<?xml version="1.0" encoding="utf-8"?>
<posts>
  <row Id="1" PostTypeId="1" AcceptedAnswerId="24" CreationDate="2012-10-23T19:38:18.867" Score="14" ViewCount="284" Body="&lt;p&gt;Imagine programming a 3 wheel soccer robot. What type of controller would you use for spinning it? P? PID?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The goal for this controller is that it should make the robot stand in a defined angle ( 0 degree ) and turn back if rotated by hand or other robot. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I use stepper motors for my robot and not servos so I need to implement this in my software!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have written a sample P type controller already and the movement is fairly good. But I would like to make it better if possible. The code is as follows:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void spinSpeed(int devidedValue, int addedValue, int correction) {&#xA;&#xA;    if(degree&amp;lt;correction &amp;amp;&amp;amp; degree&amp;gt;-correction) {&#xA;        motorSpeed = 0;&#xA;    } else {&#xA;        if(degree &amp;gt; 0) {&#xA;            motorSpeed = ((degree)/(devidedValue) + (addedValue));&#xA;        } else {&#xA;            motorSpeed = ((degree)/(devidedValue) - (addedValue));  &#xA;        }&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;correction&lt;/code&gt; is a range , in which robot has no movement. &#xA;&lt;code&gt;degree&lt;/code&gt; is a number between -127 and 128 which is returned from the compass.&#xA;&lt;code&gt;motorSpeed&lt;/code&gt; is a number between 0 and 255 which is applied to the PWM.&lt;/p&gt;&#xA;" OwnerUserId="21" LastEditorUserId="177" LastEditDate="2012-11-12T03:17:16.247" LastActivityDate="2012-11-12T03:17:16.247" Title="What is the right approach to write the spin controller for a soccer robot?" Tags="&lt;soccer&gt;&lt;control&gt;" AnswerCount="2" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="2" PostTypeId="1" AcceptedAnswerId="50" CreationDate="2012-10-23T19:42:56.030" Score="15" ViewCount="6039" Body="&lt;p&gt;I've got some hobby servos (&lt;a href=&quot;http://www.servodatabase.com/servo/power-hd/hd-1501mg&quot;&gt;Power HD 1501MGs&lt;/a&gt;) and I'd like to be able to control them (via an Arduino) so they will either go to the angle I set, or put them in a 'free running' mode, where the load will take them wherever it goes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this even possible, or am I just going to end up stripping the gears?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My first thought is to simply kill the power to the servo, but the force required to move them in that state is more than I'd like.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it is possible, am I looking at a hardware change, or could I do it in software?&lt;/p&gt;&#xA;" OwnerUserId="12" LastEditorUserId="37" LastEditDate="2013-05-20T14:52:48.300" LastActivityDate="2013-05-20T14:52:48.300" Title="How can I modify a low cost hobby servo to run 'freely'?" Tags="&lt;control&gt;&lt;rcservo&gt;" AnswerCount="4" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3" PostTypeId="1" CreationDate="2012-10-23T19:43:37.690" Score="24" ViewCount="612" Body="&lt;p&gt;&lt;a href=&quot;http://www.oricomtech.com/projects/leg-time.htm&quot; rel=&quot;noreferrer&quot;&gt;http://www.oricomtech.com/projects/leg-time.htm&lt;/a&gt; lists three gaits:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the tripod&lt;/li&gt;&#xA;&lt;li&gt;wave, and&lt;/li&gt;&#xA;&lt;li&gt;ripple.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Can these be improved, or can their relative pros and cons be altered, and are there other gaits worth considering?&lt;/p&gt;&#xA;" OwnerUserId="34" LastEditorUserId="134" LastEditDate="2014-09-03T20:22:11.577" LastActivityDate="2014-09-03T20:22:11.577" Title="What useful gaits exist for a six legged robot, and what are their pros and cons?" Tags="&lt;gait&gt;&lt;walk&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="4" PostTypeId="1" AcceptedAnswerId="52" CreationDate="2012-10-23T19:43:47.140" Score="0" ViewCount="1838" Body="&lt;p&gt;I am looking for a starting point for my project, preferably using popular systems (ones there is a lot of support for). I have an Arduino Uno, a Raspberry Pi, and a lot of willpower :) Anyone here built a project using the systems above?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Observation: I'd like to start with a simple line-following vehicle and build up afterwards.&lt;/p&gt;&#xA;" OwnerUserId="32" LastEditorUserId="37" LastEditDate="2012-11-14T15:00:39.723" LastActivityDate="2012-11-14T15:00:39.723" Title="Good Microcontrollers/SOCs for a Robotics Project" Tags="&lt;microcontroller&gt;&lt;arduino&gt;&lt;raspberry-pi&gt;" AnswerCount="7" CommentCount="2" FavoriteCount="1" ClosedDate="2012-10-24T15:28:52.117" ContentLicense="CC BY-SA 3.0" />
  <row Id="5" PostTypeId="1" AcceptedAnswerId="12" CreationDate="2012-10-23T19:43:48.463" Score="15" ViewCount="874" Body="&lt;p&gt;I'm trying to implement a nearest-neighbor structure for use in an RRT motion planner. In order to do better than a linear brute-force nearest-neighbor search, I'd like to implement something like a kd-tree. However, it seems like the classical implementation of the kd-tree assumes that each dimension of the space can be split into &quot;left&quot; and &quot;right&quot;. This notion doesn't seem to apply to non-Euclidean spaces like SO(2), for instance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm working with a serial manipulator arm with fully rotational links, meaning that each dimension of the robot's configuration space is SO(2), and therefore non-Euclidean. Can the kd-tree algorithm be modified to handle these kinds of subspaces? If not, is there another nearest-neighbor structure that can handle these non-Euclidean subspaces while still being easy to update and query? I also took a look at &lt;a href=&quot;http://www.cs.ubc.ca/~mariusm/index.php/FLANN/FLANN&quot;&gt;FLANN&lt;/a&gt;, but it wasn't clear to me from their documentation whether they can handle non-Euclidean subspaces.&lt;/p&gt;&#xA;" OwnerUserId="13" LastEditorUserId="42" LastEditDate="2012-11-15T06:58:20.917" LastActivityDate="2017-07-08T19:44:29.777" Title="Nearest-neighbor data structure for non-Euclidean configuration space" Tags="&lt;motion-planning&gt;&lt;rrt&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6" PostTypeId="1" CreationDate="2012-10-23T19:48:55.993" Score="19" ViewCount="5507" Body="&lt;p&gt;My company will soon be starting a brand new robotics project, and we are still trying to decide whether we should design and code a robotics software platform from scratch, or if there are any good existing ones.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It would be very useful if there was a software platform which was commonly used among both academics and industry so that our robotic system was generally compatible with others, and so that people were already familiar with it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We would like the software platform to be able to:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Integrate new robotic hardware components easily.&lt;/li&gt;&#xA;&lt;li&gt;Already contain a wide array of useful data processing and visualisation tools&lt;/li&gt;&#xA;&lt;li&gt;Make efficient use of computing hardware&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="40" LastActivityDate="2012-10-26T06:37:43.207" Title="What good robotics software platforms / operating systems are available?" Tags="&lt;software&gt;&lt;platform&gt;" AnswerCount="7" CommentCount="12" FavoriteCount="12" ClosedDate="2012-10-26T06:56:58.157" ContentLicense="CC BY-SA 3.0" />
  <row Id="7" PostTypeId="2" ParentId="4" CreationDate="2012-10-23T19:53:49.917" Score="4" Body="&lt;p&gt;It really depends on the project.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a line follower robot ( in your case ), using the Atmel's AVR series is the best choice. Specially ATMEGA16 or even ATMEGA32. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because the line-follower is a small project and the Arduino is too much for it. And the other advantage of Atmega16 is that it is cheap. If it is broken or faulty then you can change it easily. and it also provides PWM for controlling the speed of motors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So with atmega series you can build the most powerful line-follower . No need to spend money on getting prebuilt boards and ...&lt;/p&gt;&#xA;" OwnerUserId="21" LastActivityDate="2012-10-23T19:53:49.917" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8" PostTypeId="2" ParentId="2" CreationDate="2012-10-23T19:55:58.673" Score="7" Body="&lt;p&gt;Interesting question. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first option I'd investigate would be cutting the power as you suggested (perhaps control a MOSFET in software to switch the power).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another more complicated approach might be to monitor the current consumption of the servo to detect when it is under a heavy load. When you want to go into &quot;free running&quot; mode, have your software attempt to continuously move the servo into a position that results in the least current consumption. This will not entirely result in a &quot;free running&quot; servo, since there will be some jittery movements from the servo as the software attempts to find the &quot;right&quot; position, but it might work depending on your application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You would not need to modify your servos to monitor current consumption. A board such as &lt;a href=&quot;https://www.sparkfun.com/products/8882&quot; rel=&quot;nofollow noreferrer&quot;&gt;this one from SparkFun&lt;/a&gt; will sit in between the servo and its power source (you need one of these per servo) and will output an analog voltage (that you can read on a microcontroller ADC pin) that corresponds to the current:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/tUZOG.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Image from SparkFun&lt;/p&gt;&#xA;" OwnerUserId="16" LastEditorUserId="16" LastEditDate="2012-10-24T00:04:16.653" LastActivityDate="2012-10-24T00:04:16.653" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="9" PostTypeId="2" ParentId="6" CreationDate="2012-10-23T19:56:39.780" Score="20" Body="&lt;p&gt;&lt;a href=&quot;http://www.ros.org/wiki/&quot;&gt;ROS&lt;/a&gt; is quickly becoming the new standard for both industrial and research robotics. Most research groups I know of are adopting ROS for their work and then pushing their results back into the open for everyone to use and improve. Willow Garage is developing a suite of hardware and software platforms which are all centered around ROS at their core. ROS is a good place to start your search.&lt;/p&gt;&#xA;" OwnerUserId="13" LastActivityDate="2012-10-23T19:56:39.780" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11" PostTypeId="1" CreationDate="2012-10-23T20:03:27.800" Score="-5" ViewCount="143" Body="&lt;p&gt;What is the best software (despite the price) for designing the circuits and PCB boards for robots?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I mean having lots of components, different designing methods, best accuracy, ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I myself use the Altium Designer which I think answers my needs, but maybe there are better ones in the market i don't know about!&lt;/p&gt;&#xA;" OwnerUserId="21" LastEditorUserId="21" LastEditDate="2012-10-23T20:09:52.143" LastActivityDate="2012-10-23T20:11:13.610" Title="What software do you use to design your PCB in the robotics field?" Tags="&lt;software&gt;&lt;circuit&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="1" ClosedDate="2012-10-23T21:14:57.730" ContentLicense="CC BY-SA 3.0" />
  <row Id="12" PostTypeId="2" ParentId="5" CreationDate="2012-10-23T20:05:55.033" Score="6" Body="&lt;p&gt;You are correct that kd-trees typically only work in small, Euclidean metric spaces. But, there is lots of work for general nearest neighbor applications in metric spaces (anywhere you can define a distance function essentially).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The classic work is on &lt;a href=&quot;http://en.wikipedia.org/wiki/Ball_tree&quot;&gt;ball trees&lt;/a&gt;, which then were generalized to &lt;a href=&quot;http://en.wikipedia.org/wiki/Metric_tree&quot;&gt;metric trees&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is some newer work called &lt;a href=&quot;http://hunch.net/~jl/projects/cover_tree/cover_tree.html&quot;&gt;cover trees&lt;/a&gt; which even has GPL'ed code. I have wanted to look into the performance characteristics between these trees and kd-trees for more than two years now.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hopefully, that fits your application. &lt;/p&gt;&#xA;" OwnerUserId="42" LastActivityDate="2012-10-23T20:05:55.033" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="13" PostTypeId="2" ParentId="3" CreationDate="2012-10-23T20:08:02.520" Score="14" Body="&lt;p&gt;&lt;strong&gt;Tripod&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have never been a big fan of the traditional tripod gait. It usually looks clumsy, and doesn't really take into account the delicacy of walking over uneven terrain. Walking this way tends to be jerky since one tripod is reaching the end of its travel just as the next tripod is touching down. Exactly how smooth you can make the walk depends on the implementation of your robot. If you have 3 degrees of freedom on each leg, then you have great freedom bring one set of legs forward quickly, bring them carefully into contact with the ground, matching the motion of the ground, and gently taking the robot's weight on them before lifting the other tripod. Alternatively, if you have two fixed tripods, the robot is going to just clunk along like a toy. It also has the lowest payload carrying capacity, since only three legs are on the ground. However, it can be pretty fast, since you're moving three legs at once.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Ripple&lt;/strong&gt;&#xA;This is by far my preferred gait. What I like about this gait is that it's easier to make the walk smoother. At any one time, you have three legs taking the weight, one in flight, one touching down, and one lifting off. It also makes it easier to cope with rough terrain. When the terrain is rough, you may need a moment longer to touch the leg down carefully on the ground, begin to apply weight and see if it's stable. If so, take the weight fully, and continue walking. If not, then it's not a disaster to delay lifting another leg so that you can try to get this one stable.&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2012-10-23T20:08:02.520" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14" PostTypeId="2" ParentId="1" CreationDate="2012-10-23T20:10:06.217" Score="8" Body="&lt;p&gt;A PID controller would be the best, Using a compass then it is a relatively straight forward task of getting the bearing of your robot and comparing it to the bearing you want to achieve, and using some &lt;a href=&quot;http://en.wikipedia.org/wiki/PID_controller#Overview_of_methods&quot;&gt;PID tuning techniques&lt;/a&gt; to achieve a smooth turning motion to your desired heading. This approach can also be applied to rotating by a given amount accurately.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have already done some robotics in this field, &lt;a href=&quot;http://team759.blogspot.co.uk/2011/11/adding-compass.html&quot;&gt;this&lt;/a&gt; is what we used in our robot, doing a not too dissimilar task to yours...&lt;/p&gt;&#xA;" OwnerUserId="46" LastActivityDate="2012-10-23T20:10:06.217" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15" PostTypeId="2" ParentId="11" CreationDate="2012-10-23T20:11:13.610" Score="3" Body="&lt;p&gt;We evaluated a variety of options and settled on Altium Designer at our shop.  We build nothing but robots with a team of 9 engineers.  I am not sure there is a ton of stuff that is robotic specific in a PCB design, but Altium allows us to interface directly with our Pick and Place machine, easily generate 3D models, and the integration of the library with Subversion makes teamwork easy.&lt;/p&gt;&#xA;" OwnerUserId="39" LastActivityDate="2012-10-23T20:11:13.610" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="16" PostTypeId="2" ParentId="6" CreationDate="2012-10-23T20:13:06.233" Score="5" Body="&lt;p&gt;&lt;a href=&quot;http://rock-robotics.org&quot; rel=&quot;noreferrer&quot;&gt;The Robot Construction Kit&lt;/a&gt; is an alternative to ROS. It is driven towards model-driven engineering and design/management of complex systems. It also is driven towards &quot;not being tightly dependent on Rock&quot;. Most of the algorithms / drivers in Rock are independent of the component layer. See also &lt;a href=&quot;http://www.rock-robotics.org/stable/documentation/about/others.html&quot; rel=&quot;noreferrer&quot;&gt;this page&lt;/a&gt; for a quick summary of the differences between Rock and ROS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a previous answer points out, ROS is mainly used as a thin communication library. Rock's component layer is thicker, to provide the tools necessary to scale to complex systems. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you have to understand is this: in this day and age, the only open-source robotic software worth looking at is framework-independent (OpenCV, PCL, OpenRave, Gazebo, ...). Even Willow Garage finally understood this. Therefore, it can be integrated with a minimal amount of work in any framework.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now: your best pick also depends on your aim. If what you want is sell hardware, then it is well possible that having a ROS node is your best choice (even though having a good driver &lt;em&gt;library&lt;/em&gt; that is then integrated into a ROS node is even better).&lt;/p&gt;&#xA;" OwnerUserId="56" LastEditorUserId="56" LastEditDate="2012-10-23T20:18:09.783" LastActivityDate="2012-10-23T20:18:09.783" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="17" PostTypeId="2" ParentId="6" CreationDate="2012-10-23T20:15:12.140" Score="3" Body="&lt;p&gt;My preferred platform is ROS. However, there is another strong contender from... dare I say it... Microsoft. It is called Robotics Developer Studio (RDS). Begin your search here: &lt;a href=&quot;http://www.microsoft.com/robotics/&quot; rel=&quot;nofollow&quot;&gt;http://www.microsoft.com/robotics/&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;They have many videos of impressive applications. To me, the largest benefit is the built-in support for Kinect via Microsoft's Kinect SDK. Technically, the one which ROS uses from OpenNI has the same capabilities but it seems comforting to know the SDK which RDS uses is written by the same company which produced the hardware. &lt;/p&gt;&#xA;" OwnerUserId="45" LastActivityDate="2012-10-23T20:15:12.140" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="18" PostTypeId="1" CreationDate="2012-10-23T20:18:45.580" Score="17" ViewCount="3737" Body="&lt;p&gt;Most often tuning the Kalman filter noise matrices is done by trial and error or domain knowledge. Are there more principled ways for tuning all the Kalman filter parameters?&lt;/p&gt;&#xA;" OwnerUserId="42" LastActivityDate="2015-05-13T15:00:05.300" Title="What are good methods for tuning the process noise on Kalman filters?" Tags="&lt;odometry&gt;&lt;localization&gt;&lt;kalman-filter&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="19" PostTypeId="1" CreationDate="2012-10-23T20:20:54.537" Score="6" ViewCount="65" Body="&lt;p&gt;I'm working with a Wild Thumper 6 wheel chasis that is designed for use with an RC controller. However I'd like to have a mapping to a keyboard for control as well. Can you suggest a set of keys and behaviors that you've used to deal with the continuous value control normally offered by a joystick or pair of joysticks? The standard wasd keys + an accelerate/decelerate pair? I'd also take a pointer to a videogame that you think does this well.&lt;/p&gt;&#xA;" OwnerUserId="54" LastEditorUserId="15160" LastEditDate="2018-06-18T18:13:49.160" LastActivityDate="2018-06-18T18:13:49.160" Title="Keyboard control map for scalar based movement?" Tags="&lt;control&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="20" PostTypeId="1" CreationDate="2012-10-23T20:21:40.533" Score="0" ViewCount="2936" Body="&lt;p&gt;What is the best option to use for the shooting system of a soccer robot?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have already implemented a solenoid-based system for shooting and it works perfectly. &#xA;However, I'd like some other methods to check if they are better than mine. &lt;/p&gt;&#xA;" OwnerUserId="21" LastEditorUserId="74" LastEditDate="2012-10-24T03:37:32.520" LastActivityDate="2012-10-24T03:37:32.520" Title="Ideas for shooting the ball in a soccer robot" Tags="&lt;soccer&gt;&lt;mechanism&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2012-12-05T21:15:21.677" ContentLicense="CC BY-SA 3.0" />
  <row Id="21" PostTypeId="2" ParentId="4" CreationDate="2012-10-23T20:24:49.663" Score="3" Body="&lt;p&gt;If you want a line-following robot, then something similar to an &lt;a href=&quot;http://mbed.org/cookbook/m3pi&quot; rel=&quot;nofollow&quot;&gt;m3pi&lt;/a&gt; would be achievable. Photo-transistors seem to be very effective with a black-on-white track.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for a microcontroller, Mario Markarian is probably right, it is down to personal preference and the project you are working on. The m3pi uses an &lt;a href=&quot;http://mbed.org/handbook/mbed-Microcontrollers&quot; rel=&quot;nofollow&quot;&gt;mbed&lt;/a&gt; and has a lot of IO's to play with. For more advanced robots a raspberry pi or &lt;a href=&quot;http://mbed.org/handbook/mbed-Microcontrollers&quot; rel=&quot;nofollow&quot;&gt;beagleboard&lt;/a&gt; work, interfaced with slave microcontroller(s) to provide sensor data and offloading any repetitive computations that could otherwise slow down the pi. &lt;/p&gt;&#xA;" OwnerUserId="46" LastEditorUserId="29" LastEditDate="2012-10-23T21:15:16.773" LastActivityDate="2012-10-23T21:15:16.773" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="22" PostTypeId="2" ParentId="4" CreationDate="2012-10-23T20:25:31.350" Score="3" Body="&lt;p&gt;I would suggest using lower end Atmel AVRs for beginning robotics projects.  An AVR can take a lot of abuse and can sink and source more current without burning out than the PIC microcontrollers I have used.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are going to be building multiple projects, you should consider investing in building your own breakout boards.  You can design your own PCB with standard power circuitry, a bunch of headers for I/O and whatever microcontroller you choose.  You can get your cost down to around $15 per board for the PCB and then a couple bucks worth of components.  This way, you can leave your project intact, instead of having to harvest out the microcontroller for your next project.  As a bonus, you will gain valuable experience in PCB design and soldering.&lt;/p&gt;&#xA;" OwnerUserId="39" LastActivityDate="2012-10-23T20:25:31.350" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="23" PostTypeId="1" CreationDate="2012-10-23T20:28:18.767" Score="5" ViewCount="222" Body="&lt;p&gt;I am beginning work on a larger scale, 250-350 lbs wheeled robot and looking to use both optical and other means of object avoidance. I am concerned with a robot this large causing issues with running into things, including people as it has a top speed of 15mph and that would cause issues with safety. I am starting out with a remote control but am looking to have the robot become self contained. I have been loosely following the DARPA driver-less car project but will not have anywhere near the fiscal or power budget that they do for sensors and computers. Am I thinking to far afield with my idea of having a self-contained robot in the 250-300 lbs range that does not break the bank on optical object avoidance? Any comments or experiences will be greatly appreciated.&lt;/p&gt;&#xA;" OwnerUserId="63" LastEditorUserId="131" LastEditDate="2012-11-25T22:50:18.367" LastActivityDate="2012-11-25T22:50:18.367" Title="F/OSS Optical Object Avoidance" Tags="&lt;computer-vision&gt;&lt;wheeled-robot&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="24" PostTypeId="2" ParentId="1" CreationDate="2012-10-23T20:30:44.960" Score="7" Body="&lt;p&gt;The important thing to remember about a &lt;a href=&quot;http://en.wikipedia.org/wiki/PID_controller&quot; rel=&quot;nofollow&quot;&gt;PID&lt;/a&gt; control loop is that each term is intended to dominate control at different times during a move.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The proportional term is intended to dominate and provide a larger torque (or in your case speed) the further you are away from your target position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The derivative term is intended to dominate during the 'cruise' phase of your typical trapezoidal move. It helps to reign back a very high proportional term and limit runaway acceleration when you are far from your destination, but it can also help increase the speed at which you converge on your destination when you get close to it and the proportional term contributes much less.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are using a velocity controller rather than a torque controller then the derivative term may actually be hidden inside your speed controller and not directly accessible to your PID loop. This can make control simpler (typically it will just accelerate as quickly as it can up to the desired speed or maximum speed, whichever is lower) but it can also make it less predictable. Often an overly aggressive D (or P) term can result in getting into a &lt;a href=&quot;http://en.wikipedia.org/wiki/Limit_cycle&quot; rel=&quot;nofollow&quot;&gt;limit cycle&lt;/a&gt; (often incorrectly called &lt;a href=&quot;http://en.wikipedia.org/wiki/Mechanical_resonance&quot; rel=&quot;nofollow&quot;&gt;resonance&lt;/a&gt; or &lt;a href=&quot;http://en.wikipedia.org/wiki/Oscillation&quot; rel=&quot;nofollow&quot;&gt;oscillation&lt;/a&gt; due to the sound of the motors humming or even screaming in this state, though &lt;em&gt;limit-cycle&lt;/em&gt; is a much more accurate description).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The integral term is there to correct for residual &lt;a href=&quot;http://en.wikipedia.org/wiki/PID_controller#Integral_term&quot; rel=&quot;nofollow&quot;&gt;steady-state error&lt;/a&gt;, that is where there is a persistent, long term difference between where you are being asked to go and where you actually are. Your current &lt;code&gt;correction&lt;/code&gt; (really just tolerance) value works like the opposite of an integral term, it cuts the motor entirely when you are within a &lt;a href=&quot;http://en.wikipedia.org/wiki/Deadband&quot; rel=&quot;nofollow&quot;&gt;deadband&lt;/a&gt; around the desired position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Due to these factors, you will gain little from implementing a full PID loop unless you also plan in a velocity profile with a distinct accelerate, cruise &amp;amp; decelerate phases.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also bear in mind that the deadband and lack of I term will mean that the final position will always be somewhat random and will most likely differ depending on which direction you approach the desired position. As such, your bi-directional repeatability could be much worse than your standard repeatability.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For more information on the difference between accuracy, repeatability and resolution, see &lt;a href=&quot;http://www.me.mtu.edu/~microweb/chap2/ch2-1.htm&quot; rel=&quot;nofollow&quot;&gt;this excellent description&lt;/a&gt;. In your case, your resolution is your compass sensor, while both accuracy, repeatability are most likely limited by your &lt;code&gt;correction&lt;/code&gt; value, since if the &lt;code&gt;correction&lt;/code&gt; value is larger than your compass resolution, you are throwing away some of your positional accuracy in return for being able to turn off your motor when you are close.&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="37" LastEditDate="2012-11-06T20:30:34.777" LastActivityDate="2012-11-06T20:30:34.777" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="25" PostTypeId="1" AcceptedAnswerId="125" CreationDate="2012-10-23T20:34:39.070" Score="42" ViewCount="68584" Body="&lt;p&gt;There are many sites which explain briefly this problem and even propose combinations. I however would like a much more detailed explanation. What is going to give my quad the most agility? Do I need bigger motors/props in a heavy quad to achieve the same level of agility than in a lighter quad?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt;&#xA;Here is what I have understood on the subject:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A quadcopter doesn't need high revving motors as there are 4 propellers providing thrust and high revving motors require more battery power.&lt;/li&gt;&#xA;&lt;li&gt;Larger propellers give more thrust per revolution from the motor.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The question is focused more on the general characteristics of various combinations but some specific questions do spring to mind: &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;For a given combination what would be the effect of upgrading propeller size in comparison to installing higher revving motors?&lt;/li&gt;&#xA;&lt;li&gt;What changes would need to be made to lift a heavier quad?&lt;/li&gt;&#xA;&lt;li&gt;How can I achieve more agility in my quad?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="49" LastEditorUserId="50" LastEditDate="2012-10-23T22:15:52.707" LastActivityDate="2017-03-10T01:02:29.577" Title="How to choose the right propeller/motor combination for a quadcopter?" Tags="&lt;quadcopter&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="20" ContentLicense="CC BY-SA 3.0" />
  <row Id="27" PostTypeId="2" ParentId="2" CreationDate="2012-10-23T20:45:15.613" Score="5" Body="&lt;p&gt;Usually, these types of hobby servos are not made for continuous rotation, and will often include a mechanical stop.  Beware, what I outline below is a surefire way to never get actual closed-loop operation, but will instead make the servo continuous-only.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most of the time, you can do a quick search online for &quot;Continuous modification for x servo&quot;, but I will outline the general process here.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Determine if the servo has a physical stop.  If it does, you will have to open the servo and remove it (I recommend the Dremel tool).&lt;/li&gt;&#xA;&lt;li&gt;You then want to find the &quot;center&quot; of the feedback mechanism.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Connect the servo to your Arduino and send a &quot;center&quot; command (usually PWM 127).&lt;/li&gt;&#xA;&lt;li&gt;Find the feedback mechanism (typically a potentiometer), and trim it until the servo does not move at all.&lt;/li&gt;&#xA;&lt;li&gt;Either glue the potentiometer in place, or measure the resistance and replace the potentiometer with a set value resistor.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Reassemble the servo.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Now sending a &quot;center&quot; command to the servo should stop it from moving, while sending it a positive or negative command should cause it to rotate continuously in one direction or the other.  The rotation speed should be proportional to the &quot;distance&quot; from center of the command sent.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to restore servo operation to your newly-modified servo, you can add some sort of encoder to re-close the loop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively, you may want to look at the &lt;a href=&quot;http://www.robotis.com/xe/dynamixel_en&quot;&gt;Dynamixel series&lt;/a&gt; servo, which allows for both continuous and servo'ed operation, and includes some Arduino support.&lt;/p&gt;&#xA;" OwnerUserId="22" LastActivityDate="2012-10-23T20:45:15.613" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="28" PostTypeId="2" ParentId="19" CreationDate="2012-10-23T20:46:39.947" Score="4" Body="&lt;p&gt;Assuming you don't have other functionality that would take precedence, I would use WASD for movement and Left/Right arrows or mouse buttons for accelerating. Having the controls be divided that way mimics the conventional movement/action interface seen in many video games, while letting the user control the speed in parallel to motion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, ultimately, the right answer is whatever is most comfortable/intuitive. The above is what I'd try first, but the real best answer is getting user feedback.&lt;/p&gt;&#xA;" OwnerUserId="31" LastActivityDate="2012-10-23T20:46:39.947" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="30" PostTypeId="2" ParentId="23" CreationDate="2012-10-23T20:49:31.223" Score="8" Body="&lt;p&gt;Optical avoidance of people in an every-day (like) environment would be difficult, your best bet would be with sensing the range of things from the robot, rather than if it is a person or not. An Xbox Kinect could do the job if mounted in the right place. Alternatively you could use range finders, either the light or acoustic variety. I have used Ultrasonic sensors from &lt;a href=&quot;http://www.seeedstudio.com/depot/ultra-sonic-range-measurement-module-p-626.html?cPath=144_149&quot; rel=&quot;noreferrer&quot;&gt;these people&lt;/a&gt; before, and they are good at ranges from about 5cm to around 3 meters, although they have an unfortunately small field of view, but they work.&lt;/p&gt;&#xA;&lt;p&gt;Alternatively, if you are able to have a controlled environment, such as an arena or room, you can use &lt;a href=&quot;https://www.studentrobotics.org/docs/programming/sr/vision/markers&quot; rel=&quot;noreferrer&quot;&gt;libkoki&lt;/a&gt; markers (or an alteration thereof) to define the edges or your arena and anything the robot must not go near. The libkoki libraries can be found &lt;a href=&quot;https://github.com/chrisjameskirkham/libkoki&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="46" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2012-10-23T20:49:31.223" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="31" PostTypeId="2" ParentId="4" CreationDate="2012-10-23T20:49:35.573" Score="1" Body="&lt;p&gt;If you want to go further than using microcontrollers you could run ROS on you &lt;a href=&quot;http://www.ros.org/wiki/ROSberryPi/Setting%20up%20ROS%20on%20RaspberryPi&quot; rel=&quot;nofollow&quot;&gt;Raspberry Pi&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have build several robots and a couple of other projects using a &lt;a href=&quot;http://robocard.dk/&quot; rel=&quot;nofollow&quot;&gt;RoboCard&lt;/a&gt; (site in Danish, but can &lt;a href=&quot;http://translate.google.com/translate?js=y&amp;amp;prev=_t&amp;amp;hl=en&amp;amp;ie=UTF-8&amp;amp;layout=1&amp;amp;eotf=1&amp;amp;u=http://robocard.dk/pages/home.php&amp;amp;sl=da&amp;amp;tl=en&quot; rel=&quot;nofollow&quot;&gt;be translated&lt;/a&gt;). The RoboCard is build around an ATMega, so that certainly is a viable route.&lt;/p&gt;&#xA;" OwnerUserId="61" LastActivityDate="2012-10-23T20:49:35.573" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="32" PostTypeId="5" CreationDate="2012-10-23T20:50:20.863" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2012-10-23T20:50:20.863" LastActivityDate="2012-10-23T20:50:20.863" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="33" PostTypeId="4" CreationDate="2012-10-23T20:50:20.863" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2012-10-23T20:50:20.863" LastActivityDate="2012-10-23T20:50:20.863" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="34" PostTypeId="5" CreationDate="2012-10-23T20:51:36.573" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2012-10-23T20:51:36.573" LastActivityDate="2012-10-23T20:51:36.573" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="35" PostTypeId="4" CreationDate="2012-10-23T20:51:36.573" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2012-10-23T20:51:36.573" LastActivityDate="2012-10-23T20:51:36.573" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="36" PostTypeId="2" ParentId="6" CreationDate="2012-10-23T20:55:24.760" Score="1" Body="&lt;p&gt;MOOS is Oxford's ROS analog. &lt;a href=&quot;http://www.robots.ox.ac.uk/~mobile/MOOS/wiki/pmwiki.php&quot; rel=&quot;nofollow&quot;&gt;http://www.robots.ox.ac.uk/~mobile/MOOS/wiki/pmwiki.php&lt;/a&gt; It's used for a number of naval applications, from harbor-sweeping to low-power, UUVs that surface to report in intervals counted in months.&lt;/p&gt;&#xA;" OwnerUserId="31" LastActivityDate="2012-10-23T20:55:24.760" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="37" PostTypeId="1" CreationDate="2012-10-23T21:04:59.783" Score="-3" ViewCount="1085" Body="&lt;p&gt;I want to localize a mobile robot equipped with a 2D laser scanner in a known indoor environment.  The map is a 2D occupancy grid, but is not perfect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What algorithms are appropriate for mobile robot localization?&lt;/p&gt;&#xA;" OwnerUserId="73" LastEditorUserId="73" LastEditDate="2012-10-24T18:25:16.983" LastActivityDate="2012-10-24T18:25:16.983" Title="Mobile robot localization in a known map" Tags="&lt;localization&gt;&lt;mobile-robot&gt;" AnswerCount="2" CommentCount="2" ClosedDate="2012-10-24T23:25:13.167" ContentLicense="CC BY-SA 3.0" />
  <row Id="38" PostTypeId="2" ParentId="3" CreationDate="2012-10-23T21:11:04.363" Score="21" Body="&lt;p&gt;Discrete gaits are a very limited way of implementing hexapod motion.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Imagine trying to limit a person to two speeds, walk and run.  In reality we spend a lot of time meandering around with no defined gait or in transitions between various gaits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a reasonable amount of research on insect gaits and the common discrete gaits you read about are essentially what insects settle upon as the optimal solution when spending a long time at a single speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A gait can be fully defined by the timings of its return strokes.  In general, going faster requires performing more return strokes in a given amount of time (which is why a tripod gate will be faster than a tetrapod gait which will be faster than a wave/ripple).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not an expert in insect locomotion, but my understanding is that each leg independently decides when to return based on a set of simple rules.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As an example, a leg must return when it approaches the end of its stroke.  To avoid having all the legs retract at once, legs are discouraged from performing their return stroke when its neighbours are retracting, or if the leg directly opposite is retracting.&lt;br&gt;&#xA;As well, legs are mildly discouraged from retracting when any other leg is retracting so as many legs are on the ground as possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is easy to see that both the tripod and ripple gait obey the above rules but you also get additional gaits and transitions as speed and direction changes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;TL;DR An insect will never use a single gait so if you want optimal creepyness (or efficiency since evolution is pretty good at that) there are a lot of books/papers on how insects walk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: There are also a lot of per-leg rules that help traverse rough terrain.  As an example, legs will always try to stand in a spot where a leg has already been (since it knows that place is solid).  A typical insect will place its front legs in areas it knows are secure and all the subsequent legs will only use those locations.&lt;/p&gt;&#xA;" OwnerUserId="65" LastActivityDate="2012-10-23T21:11:04.363" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="39" PostTypeId="1" AcceptedAnswerId="45" CreationDate="2012-10-23T21:12:46.500" Score="5" ViewCount="348" Body="&lt;p&gt;As in the title, I'd like to implement gesture recognition on my robot and I'm looking for the pros and cons between the Kinect and the Xtion - and also if there are any other sensible options available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm thinking of the following, but open to other suggestions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Accuracy&lt;/li&gt;&#xA;&lt;li&gt;Price&lt;/li&gt;&#xA;&lt;li&gt;Driver quality&lt;/li&gt;&#xA;&lt;li&gt;Power draw&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="74" LastActivityDate="2021-01-09T17:50:11.940" Title="I'd like to use gesture based input for my robot. What are the pros and cons between the Xtion Live and the Kinect?" Tags="&lt;kinect&gt;&lt;input&gt;" AnswerCount="5" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="40" PostTypeId="2" ParentId="37" CreationDate="2012-10-23T21:14:50.640" Score="2" Body="&lt;p&gt;As i have mentioned in &lt;a href=&quot;https://robotics.stackexchange.com/questions/23/f-oss-optical-object-avoidance/&quot;&gt;this&lt;/a&gt; post, it can be achieved with a camera and some markers in known locations on/in the environment as demonstrated &lt;a href=&quot;http://team759.blogspot.co.uk/2012/02/more-intelligent-cube-finding.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; by the robotics team I am in. We use the location of the markers on the desks, which have a known height and width, and the center we can get from the libkoki library. It is then a simple task of using some trigonometry to find out where we are, as demonstrated in &lt;a href=&quot;http://team759.blogspot.co.uk/2012/03/getting-position-of-robot.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this blog post&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although by &lt;code&gt;Given sensors&lt;/code&gt; I assume you don't know what method you are going to use... I'm sure there are other ways of getting your position to varying degrees of accuracy.&lt;/p&gt;&#xA;" OwnerUserId="46" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2012-10-23T21:14:50.640" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="41" PostTypeId="2" ParentId="37" CreationDate="2012-10-23T21:15:20.300" Score="8" Body="&lt;p&gt;Particle filters or &lt;a href=&quot;http://en.wikipedia.org/wiki/Monte_Carlo_localization&quot;&gt;Monte Carlo localization&lt;/a&gt; can be used. Basically you distribute a set of points at random across the maps and see which points would have sensor readings most similar to the reading from your map. The best points survive and you create new points and so forth. After some iterations you have a group of points, hopefully, all in the same place on the map as your robot. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I believe there is a few methods explained in &lt;a href=&quot;http://www.udacity.com/overview/Course/cs373/CourseRev/apr2012&quot;&gt;this course&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="61" LastActivityDate="2012-10-23T21:15:20.300" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="42" PostTypeId="1" AcceptedAnswerId="103" CreationDate="2012-10-23T21:18:17.723" Score="11" ViewCount="396" Body="&lt;p&gt;I'm looking to potentially build an autonomous robot that will frequently venture off road, and remain autonomous for up to 6 hours at a time. I've found limited information however about the best tyre tread for this purpose, what could be most suitable?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm especially looking for a tread pattern that won't need regular cleaning, to save setting this up automatically (a tread that gets &quot;clogged&quot; very quickly clearly won't be that effective at tackling tough terrain autonomously.)&lt;/p&gt;&#xA;" OwnerUserId="74" LastActivityDate="2012-10-24T15:33:59.000" Title="What tyre tread would be best suited to an off road robot expected to deal with frequently muddy conditions?" Tags="&lt;wheel&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="43" PostTypeId="1" AcceptedAnswerId="96" CreationDate="2012-10-23T21:22:09.763" Score="25" ViewCount="3468" Body="&lt;p&gt;Is there a good, popular and reliable algorithm I can use by taking input from a gyroscope and using this to control two independant wheels to keep such a balanced robot reliably upright? I'm looking for an algorithm that will let me use it to drive a robot around as well as keep it upright when stationary. The ability to deal with inclines and people &lt;em&gt;nudging&lt;/em&gt; it would also be a bonus, but not essential.&lt;/p&gt;&#xA;" OwnerUserId="74" LastEditorUserId="50" LastEditDate="2012-10-23T21:25:20.583" LastActivityDate="2012-10-25T05:34:54.000" Title="What algorithm should I use for balancing a two wheeled robot using a gyroscope?" Tags="&lt;control&gt;&lt;gyroscope&gt;&lt;balance&gt;&lt;two-wheeled&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="44" PostTypeId="1" CreationDate="2012-10-23T21:25:49.197" Score="12" ViewCount="1335" Body="&lt;p&gt;I'm looking to potentially build an &lt;a href=&quot;http://en.wikipedia.org/wiki/Underwater_glider&quot;&gt;underwater glider&lt;/a&gt;, a type of submarine that's slow but can operate on extremely low power draw. However, in order for it to work effectively I've found several sources hinting that the dimensions of the components, especially the wings, are critical to its success.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I've found very sparse information about what these dimensions should be! I'm happy to do a bit of trial and error if it comes down to it, but to save some work does anyone have any information on what the critical dimensions should be?&lt;/p&gt;&#xA;" OwnerUserId="74" LastEditorUserId="350" LastEditDate="2012-11-15T14:59:30.737" LastActivityDate="2019-02-18T23:02:31.223" Title="Choosing the right dimensions for an underwater glider" Tags="&lt;design&gt;&lt;underwater&gt;&lt;auv&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="45" PostTypeId="2" ParentId="39" CreationDate="2012-10-23T21:28:21.570" Score="8" Body="&lt;p&gt;I know the Xtion is smaller and powered by USB where as the Kinect requires to use a wall power socket to operate. In terms of depth perception they are very similar in terms of accuracy. Depending on whether your robot needs to be portable (i.e not attatched to the mains) and small should probably be the deciding factor.&lt;/p&gt;&#xA;" OwnerUserId="80" LastActivityDate="2012-10-23T21:28:21.570" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="46" PostTypeId="1" AcceptedAnswerId="66" CreationDate="2012-10-23T21:31:31.177" Score="19" ViewCount="735" Body="&lt;p&gt;I'm looking to build an underwater glider robot that will need to remain autonomous for long periods of time, perhaps even months. Power draw should be minimal, and I'm thinking of including some form of charging device (such as a solar charger) however I'd also like the battery capacity to be large enough so I don't hugely need to worry about this. Large current draw isn't really needed, but the battery does need to hold its charge effectively for long periods of time. Considering this is an underwater vehicle, weight and size are also a concern.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cost isn't too much of an issue, as long as it's within reason of a hobbyist project.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am looking to understand the pros and cons of each technology (Lead acid, LiPo, NiCad, fuel cell?), so I can decide what type of battery would be best suited to my purpose. As such, I'm looking at battery technology rather than looking for a specific shopping recommendation.&lt;/p&gt;&#xA;" OwnerUserId="74" LastEditorUserId="350" LastEditDate="2012-11-15T14:59:25.663" LastActivityDate="2012-11-21T17:02:53.280" Title="What's the most effective type of rechargeable battery when taking into account size / weight / Ah?" Tags="&lt;underwater&gt;&lt;battery&gt;&lt;auv&gt;" AnswerCount="3" CommentCount="7" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="47" PostTypeId="2" ParentId="20" CreationDate="2012-10-23T21:38:26.130" Score="3" Body="&lt;p&gt;This can depend very much on your requirements - how far away do you need to shoot? How accurately do you need to shoot? Does power draw matter in the shot?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, some of the following may be of use:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Pneumatic system: If you want unrivalled shot power, this is probably the way to go - you can blast the ball pretty much as hard as you like. It also has minimal electrical current draw because it'd be mainly powered by a compressed tank filled beforehand. However, in a lot of situations this wouldn't be allowed, and it can be bulky and expensive.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Spring based system: You could have a motor which winds a spring up to the desired tension, then releases it. This can be powerful given a powerful enough spring and motor, and relatively cheap to implement. Downsides though are time taken to wind the spring up (so successive rapid shots are difficult) and this could draw quite a lot of power.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Multiple spring based system: As above, but bypasses much of the speed issue by using multiple springs and firing each one when necessary. More expensive and complicated to implement though.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Sheer speed: If you build a very quick robot, and design a &quot;ram&quot; on the front of it, sometimes simply ramming into the ball can be enough to shoot it into the goal. Very simple to implement, and can be effective with a good driver, but makes it much harder to use. A version of this involves putting a flipper on one side of the robot and then spinning the robot around quickly to shoot the ball. Accuracy also suffers with this approach however.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="74" LastActivityDate="2012-10-23T21:38:26.130" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="48" PostTypeId="1" AcceptedAnswerId="59" CreationDate="2012-10-23T21:46:04.840" Score="11" ViewCount="990" Body="&lt;p&gt;It's common for components on some types of robots to experience large environmental stresses, one key one being vibration. Is this something I need to worry about with typical electronics and other sensitive components, or not really? If it is, then how do I secure such components? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've heard of two main philosophies behind this, the first being that you should use a damping system such as with springs to absorb the shock. The second is that you should keep everything rigidly in place so it can't move, and therefore can't hit against anything else and break.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which one should I follow, or if the answer is &quot;it depends&quot; what should I use as a guide as to best protect sensitive components?&lt;/p&gt;&#xA;" OwnerUserId="74" LastEditorUserId="350" LastEditDate="2012-11-30T14:32:28.130" LastActivityDate="2012-11-30T14:32:28.130" Title="How can I best protect sensitive components against damage through vibration?" Tags="&lt;electronics&gt;&lt;protection&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="49" PostTypeId="1" AcceptedAnswerId="62" CreationDate="2012-10-23T22:01:52.997" Score="12" ViewCount="376" Body="&lt;p&gt;Obviously GPS is the most obvious and accessible technology for obtaining a locational &quot;fix&quot; for a robot at any particular time. However, while it's great sometimes, in other locations and situations it's not as accurate as I'd like, so I'm investigating whether there's a relatively easy way to improve on this accuracy (or not, if that turns out to be the case.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've considered the following options, but found limited information online:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Would using a much better antenna help, especially for low signal areas? I'm thinking yes to this, but if so how would I construct such an antenna and know that it's an improvement? Are there any good guides on how to do this? I could use a ready made antenna if they're not too expensive.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Would using multiple separate receivers in tandem help, or would they likely all be off by a similar amount, or would I not be able to extract a meaningful average with this approach?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;What sort of characteristics should I look for when choosing a good GPS receiver to help accuracy?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Is there anything else I should consider which I've missed?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="74" LastEditorUserId="50" LastEditDate="2012-10-23T22:04:11.473" LastActivityDate="2014-02-19T16:02:43.767" Title="What's the most accurate way to obtain a locational fix using GPS?" Tags="&lt;localization&gt;&lt;gps&gt;" AnswerCount="5" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="50" PostTypeId="2" ParentId="2" CreationDate="2012-10-23T22:29:05.897" Score="13" Body="&lt;p&gt;What you're asking isn't going to be very easy with a standard RC servo.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you're asking for is a back-drivable servo. I.E. one which you can freely rotate by applying an external torque. It is certainly possible to create these, and they are used on many robots, but most RC servos require considerable torque to back drive them. I would call them semi-backdrivable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What prevents you back driving them? Two things:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Friction:&lt;/strong&gt; Firstly, friction in the gear chain and motor. RC servos are always geared down; the output spins slower than the motor. Of course this means that when you try to back drive it, you have to spin the motor very quickly. Any friction or cogging in the motor will be felt dozens of time over at the output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/KFZwV.jpg&quot; alt=&quot;backdrivability&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Current:&lt;/strong&gt; something surprising about electric motors is that, if you short the terminals, they become harder to turn. The rotation of the motor generates an electric current which works against your rotation. The electronics inside the servo might well allow enough current to flow, even when off, that it noticeably prevents backdrivability. In the past I have noticed that some large stepper motors, even when ungeared, are almost impossible to back drive when plugged in to unpowered equipment. But when you unplug them, they can be spun freely.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, one way you can improve the back-drivability is to prevent current flowing. The obvious way to do this is to fully disconnect the motor from its electronics. But this is hard to do, even using FETs, because the diodes inside the FETs might well allow current to flow. However, you could use a relay, which really would disconnect the motor. You'd only have to use it on one of the motor's terminals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/9Yv1Y.jpg&quot; alt=&quot;Maxon&amp;#39;s ESCON&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;'Proper' servo controllers (like the &lt;a href=&quot;http://escon.maxonmotor.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;ESCON&lt;/a&gt; from Maxon) actually contain a current controller which can actively prevent current flowing by applying the correct voltage at the motor terminals. Replacing the electronics in the servo with something capable of current control might really help.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;What you should do:&lt;/strong&gt; Open up the servo, unsolder the motor, and re-assemble it. How easy is it to back-drive now? If it's easy, then it may be possible to do what you want. If it's still too hard for your application, then you're going to have to choose a different servo, or make your own. Make one with a single gear stage so that the gear friction is reduced as much as possible, and use drive electronics with a current control loop to guarantee zero current flow.&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2012-10-23T22:29:05.897" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="51" PostTypeId="2" ParentId="43" CreationDate="2012-10-23T22:33:02.217" Score="9" Body="&lt;p&gt;I believe the most popular solution to this problem is an &lt;a href=&quot;http://en.wikipedia.org/wiki/Linear-quadratic_regulator&quot;&gt;LQR&lt;/a&gt; controller. The problem you are trying to solve is the &lt;a href=&quot;http://en.wikipedia.org/wiki/Inverted_pendulum&quot;&gt;inverted pendulum problem&lt;/a&gt;. Using those keywords, you should be able to Google someone's open-source code. The next problem will be mapping most of the relevant physics quantities to your application (weight, motor torque, etc...)&lt;/p&gt;&#xA;" OwnerUserId="42" LastActivityDate="2012-10-23T22:33:02.217" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="52" PostTypeId="2" ParentId="4" CreationDate="2012-10-23T22:37:29.867" Score="9" Body="&lt;p&gt;The Arduino is really an AVR Atmega328p. The Arduino is a fine off-the-shelf implementation of this microcontroller, but if you make many of them, you can buy the chip for less than $3 each in bulk, and it requires very little circuitry to run on its own -- a crystal and a couple of capacitors to run at 20 Mhz, or not even that if you can run at the built-in 8 MHz resonant oscillator frequency.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's fine for generating control signals: Servo PWM, step/direction, control for H-bridges, etc.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's also OK for running sensors: Ultrasonic time measurement, IR voltage conversion measurement, on/off contactors, etc -- this includes whatever optical sensor you'd use for &quot;line sensing.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There will be a little code space left over after doing these tasks, so the simple control loop of &quot;is the line to the right, left, or center of me -&gt; do the appropriate turn&quot; can be built into that system. However, as soon as you want to do something bigger, like path planning, environmental awareness, memory, SLAM, etc, you will not be able to fit that into the Arduino.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus, the best system for your requirements probably includes tying all the physical hardware to the Arduino, and then talking to the Arduino from the Raspberry Pi. The RPi has a modicum of CPU power (700 MHz ARM) and RAM (256-512 MB RAM) and thus can run higher-level control algorithms like path planning, localization, SLAM, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you go with a bare AVR controller, there are UART outputs on the Raspberry Pi, but the problem is that the RPi is 3.3V and the Arduino Uno is 5V. Either go with a 3.3V Arduino version, or use a voltage divider to step down 5.0V output from the Arduino to the 3.3V input of the Raspberry Pi. I use a 2.2 kOhm high and 3.3 kOhm low resistor and it works fine. You can feed the 3V output from the Raspberry Pi directly into the RXD of the AVR, because it will treat anything at 1.2V or up as &quot;high.&quot;&lt;/p&gt;&#xA;" OwnerUserId="88" LastActivityDate="2012-10-23T22:37:29.867" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="53" PostTypeId="1" AcceptedAnswerId="73" CreationDate="2012-10-23T22:44:20.217" Score="9" ViewCount="1833" Body="&lt;p&gt;Ultrasound sensors are incredibly cheap these days which makes them a popular choice for many hobbyist robotic applications, and I'd like to use a bunch of them (say 10) around a robot with an algorithm to build a rough map of an area (as the robot explores it.) I'm not interested in dealing with moving objects at this stage, just pinpointing stationary ones, and I'll be using GPS for location. I realise that other components such as a laser scanner would produce much more accurate results, however such devices are also astronomically more expensive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does an algorithm exist for this purpose?&lt;/p&gt;&#xA;" OwnerUserId="74" LastEditorUserId="350" LastEditDate="2012-11-30T14:06:04.743" LastActivityDate="2012-11-30T14:06:04.743" Title="What algorithm can I use for constructing a map of an explored area using a number of ultrasound sensors?" Tags="&lt;slam&gt;&lt;localization&gt;&lt;gps&gt;&lt;mapping&gt;&lt;acoustic-rangefinder&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="55" PostTypeId="1" AcceptedAnswerId="211" CreationDate="2012-10-23T22:49:37.247" Score="8" ViewCount="787" Body="&lt;p&gt;Hobby servos are generally not sufficient for real robotics for a number of reasons: Quality, precision, range of motion, torque, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Meanwhile, industrial servos, such as ABB, Emerson, GE, etc, are generally both heavy and expensive, and not suitable for small-humanoid scale actuation. Similarly, building your own servo from motors, gearboxes, and encoders, is akin to trying to design your own CPU just to control a motor -- too much detail getting in the way of real work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There exists an in-between level of servos -- reasonably priced, reasonable performance, and reasonably controllable -- in the form of the competing brands of Dynamixel and HerculeX servos.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The smallest offerings in those lines generally are not strong enough for real-world interaction, but the next step up hold a lot of promise. For the Robotis Dynamixel line, this is the RX-24F servo (priced between the cheap AX-12F and the next step up the MX-28R.) Asking around, it seems that the specs and interface on that servo is great, but that it shuts down from thermal overload if you actually try to run it at rated load -- something that I'd expect from a hobby servo, but not a robotics servo.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, stepping up to the MX-28R doubles the price. Thus, if the RX-24F heat flaw could be fixed, it would be positioned at a nice price/performance point.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone have experience in providing additional cooling for this servo? Anything from thermal-gluing heat sinks to the case, to drilling holes and running cooling fluid tubing to any hot parts on the interior would be reasonable approaches. However, before I spend significant time and effort investigating this, I'd like a second opinion -- is it possible, does anyone have experience doing this, is it worth it?&lt;/p&gt;&#xA;" OwnerUserId="88" LastActivityDate="2012-10-28T20:31:46.073" Title="Adding external heat sinking to a Dynamixel RX-24F servo?" Tags="&lt;otherservos&gt;&lt;heat-management&gt;&lt;cooling&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="56" PostTypeId="2" ParentId="43" CreationDate="2012-10-23T22:49:43.470" Score="5" Body="&lt;p&gt;Since I don't know your skills in control engineering/theory, I recommend you to start with a &lt;a href=&quot;http://en.wikipedia.org/wiki/PID_controller&quot;&gt;PID controller&lt;/a&gt;. It is a simple controller and you will find many code implementations of it. The drawback of the PID is that you probably will end up spending some time tuning the parameters by hand.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some years ago I used it to control a two wheeled Lego Mindstorm robot based on its odometry and it worked well enough.&#xA;To make it move around, you will need to play with the set points.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, later on you can improve the the quality of your controller (stability, robustness etc.) by using more advanced control laws like the LQR mentioned before.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Good luck!&lt;/p&gt;&#xA;" OwnerUserId="90" LastActivityDate="2012-10-23T22:49:43.470" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="57" PostTypeId="1" AcceptedAnswerId="64" CreationDate="2012-10-23T22:51:07.573" Score="13" ViewCount="359" Body="&lt;p&gt;What characteristics can I look for which could be reliable early warning signs that a DC motor on my robot, say one used for the drive, could be failing? I'm looking for an answer that deals in terms of sensors rather than manual inspection, so a circuit could be constructed to warn of a potential failure before it happens.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a few ideas such as an increase in current draw or decrease in rotation speed / voltage, but I want to guard against false warnings caused by reasonable wear and tear, or just the robot struggling on tough terrain.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously such a system will never be foolproof, but are there any points I can look out for?&lt;/p&gt;&#xA;" OwnerUserId="74" LastActivityDate="2018-12-12T10:32:08.900" Title="How can I detect if a DC motor on a robot is starting to fail?" Tags="&lt;sensors&gt;&lt;failure&gt;&lt;motor&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="58" PostTypeId="2" ParentId="6" CreationDate="2012-10-23T22:56:22.340" Score="5" Body="&lt;h1&gt;&lt;a href=&quot;http://www.orocos.org&quot; rel=&quot;nofollow&quot;&gt;Orocos&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;It is one of the oldest open source framework in robotics, under development since 2001, and with professional industrial applications and products using it since about 2005. The focus of Orocos has always been to provide a hard real- time capable component framework — the so-called Real-Time Toolkit (RTT) implemented in C++ — and as independent as possible from any communication middleware and operating system.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As @BarretAmes said there are integrations which allows the implementation of hybrid systems, where Orocos and other Software Framework work together. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.ros.org/wiki/orocos_toolchain_ros&quot; rel=&quot;nofollow&quot;&gt;ROS Orocos Integration&lt;/a&gt; for ROS and Orocos integration&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://github.com/Robotics-UniBG/JOrocos/wiki&quot; rel=&quot;nofollow&quot;&gt;JOrocos&lt;/a&gt; for Java and ROS integration&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="87" LastEditorUserId="87" LastEditDate="2012-10-25T21:58:35.593" LastActivityDate="2012-10-25T21:58:35.593" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="59" PostTypeId="2" ParentId="48" CreationDate="2012-10-23T22:58:12.087" Score="6" Body="&lt;p&gt;Partly this depends on where the vibration is coming from.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While the two techniques you describe are very valuable, if the vibration is from your own actuators then you may be able to significantly improve things by simply using a different velocity profile for your moves.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Traditional trapezoidal velocity profiles are a constant &lt;a href=&quot;http://en.wikipedia.org/wiki/Acceleration&quot;&gt;acceleration&lt;/a&gt; up to a fixed maximum &lt;a href=&quot;http://en.wikipedia.org/wiki/Velocity&quot;&gt;velocity&lt;/a&gt; followed a constant velocity cruise, followed by a constant deceleration back to zero velocity. This creates a high instantaneous &lt;a href=&quot;http://en.wikipedia.org/wiki/Jerk_%28physics%29&quot;&gt;jolt (or jerk)&lt;/a&gt; - the third derivative of position over time. It is this high &lt;em&gt;jolt&lt;/em&gt; which often causes vibration damage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many motion controllers offer an &lt;a href=&quot;http://cdn.intechweb.org/pdfs/4267.pdf&quot;&gt;S-curve&lt;/a&gt; velocity profile which is jolt constrained, this can reduce those high jolt impulses significantly. Also, since you are ramping up your acceleration you can often tune your PID loop more aggressively and actually gain point-to-point performance increases. Unfortunately this is at the cost of adding complexity to your move synchronisation and planning.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have also worked on systems which use pure &lt;a href=&quot;http://en.wikipedia.org/wiki/Spline_%28mathematics%29&quot;&gt;cubic splines&lt;/a&gt; for the whole move. These created silky smooth move profiles where adjacent moves merged seamlessly into each other with no perceptible jolt. These systems are even more difficult to synchronise moves with however and the maths at the planning step gets even more complex than with S-curves.&lt;/p&gt;&#xA;" OwnerUserId="37" LastActivityDate="2012-10-23T22:58:12.087" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="60" PostTypeId="1" AcceptedAnswerId="71" CreationDate="2012-10-23T23:02:36.980" Score="15" ViewCount="362" Body="&lt;p&gt;With two wheeled robot &lt;a href=&quot;http://www.pages.drexel.edu/~dml46/Tutorials/BalancingBot/files/nxt_icon.jpg&quot;&gt;like this one&lt;/a&gt;, I have managed to stabilize it while keeping it stationary. This was done using a digital feedback control system by reading the position of the wheels to determine position, and the natural back electromotive force from the wheel motors was used in the feedback loop to determine velocity. It was kept stable with a PID controller, which was designed using a root locus algorithm to keep it stable and modulate the performance parameters (such as percent overshoot, settling time, etc.). I wanted to attempt to keep it stable while simultaneously propelling it forward, but I couldn't figure out how to go about designing a linear controller that could do that. Is it possible to both propel the robot forward &lt;strong&gt;and&lt;/strong&gt; keep it stable using a feedback controller on the wheels, or is a gyroscope necessary?&lt;/p&gt;&#xA;" OwnerUserId="30" LastEditorUserId="141" LastEditDate="2012-10-24T13:19:15.430" LastActivityDate="2012-10-24T14:57:47.143" Title="Is it possible to both move and stabilize a two wheeled robot with no gyroscopes?" Tags="&lt;two-wheeled&gt;&lt;stability&gt;" AnswerCount="4" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="61" PostTypeId="2" ParentId="49" CreationDate="2012-10-23T23:05:47.447" Score="6" Body="&lt;p&gt;A traditional approach is to use an error correcting algorithm like a &lt;a href=&quot;http://en.wikipedia.org/wiki/Kalman_filter&quot;&gt;Kalman filter&lt;/a&gt;. By combining dead reckoning from wheel encoders and heading commands with GPS you can smooth out GPS jitter. This is not an instantaneous improvement as it requires a series of measurements to estimate the error inherent in the GPS signal.&lt;/p&gt;&#xA;" OwnerUserId="54" LastActivityDate="2012-10-23T23:05:47.447" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="62" PostTypeId="2" ParentId="49" CreationDate="2012-10-23T23:06:27.880" Score="8" Body="&lt;p&gt;Can't answer all your questions, but based on your use case &lt;a href=&quot;http://en.wikipedia.org/wiki/Differential_GPS&quot;&gt;Differential-GPS&lt;/a&gt; might help you.&#xA;Modern tractors are using this for precisely navigating on fields (in autonomous mode).&#xA;Here fixed ground stations are used, which know their exact position and calculate the error in the current signal. This adjustment is then used by the other GPS receiver in the area.&lt;/p&gt;&#xA;" OwnerUserId="90" LastActivityDate="2012-10-23T23:06:27.880" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="63" PostTypeId="2" ParentId="6" CreationDate="2012-10-23T23:07:44.853" Score="1" Body="&lt;h1&gt;&lt;a href=&quot;http://www.openrtm.org/openrtm/en/node/629&quot; rel=&quot;nofollow&quot;&gt;OpenRTM&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;OpenRTM-aist is developed by Japanese National Institute of Advanced Industrial Science and Technology which also contributes to definition of the RT-middleware standard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is an open-source component-based framework, which provides real-time capabilities.&#xA;Beside the framework some tools are available:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;RTC Builder: a tool for skeleton-code generation. It is launched in the eclipse developmental environment. OpenRTM-aist also supports RTC-template which is a command-line type skeleton-code generation tool.&lt;/li&gt;&#xA;&lt;li&gt;RT System Editor: an Eclipse based toolchain for designing components and component-based systems.&lt;/li&gt;&#xA;&lt;li&gt;rtshell is a command-line tool which provides following services&lt;/li&gt;&#xA;&lt;li&gt;RTC debugger: a debugging tool for RTCs. RTC debugger is an Eclipse plug-in.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="87" LastActivityDate="2012-10-23T23:07:44.853" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="64" PostTypeId="2" ParentId="57" CreationDate="2012-10-23T23:19:47.083" Score="10" Body="&lt;p&gt;There are two key things to look for from a control system point of view. The first is the root mean square of the torque applied and the second is the following error on moves.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Root mean square (RMS) torque&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;As motors degrade over time, they require more torque to be applied for the same acceleration, so if you have tuned your PID loop for a new, low loss motor then as it ages, and the losses increase, the motor will drift out of tune. At some point the motor will become worn enough that you will be unable to tune the PID parameters to give you the performance you need. Before this happens though you may already have started tripping a torque limit in your motion controller (it may not allow 100% toque for more than a given number of ms for instance).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem with just looking at torque though, is that it can be difficult to keep track of. Looking at the max value will tell you nothing because many situations can cause 100% torque for short periods, especially with an aggressively tuned PID controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As it is constantly changing, setting up monitoring could easily be too lenient (resulting in &lt;a href=&quot;http://en.wikipedia.org/wiki/Type_I_and_type_II_errors#False_negative_error&quot; rel=&quot;nofollow noreferrer&quot;&gt;false negatives&lt;/a&gt;) or too strict (resulting in &lt;a href=&quot;http://en.wikipedia.org/wiki/Type_I_and_type_II_errors#False_positive_error&quot; rel=&quot;nofollow noreferrer&quot;&gt;false positives&lt;/a&gt;). This is why you probably want something closer to an &lt;a href=&quot;http://en.wikipedia.org/wiki/Root_mean_square&quot; rel=&quot;nofollow noreferrer&quot;&gt;RMS&lt;/a&gt; of the torque which you monitor over a long period and look at the trends.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a temperature controlled environment, motor temperature (as &lt;a href=&quot;https://robotics.stackexchange.com/a/126/37&quot;&gt;user65 suggests&lt;/a&gt;) is a pretty good approximation of RMS power usage over a long time constant. If ambient temperature isn't controlled though, this is more difficult, as different absolute temperatures will probably require different thresholds for temperature above ambient triggers for worn motors.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Following error&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Another tool to look for failing motors is the maximum &lt;a href=&quot;http://www.newport.com/Control-Theory-Terminology/178319/1033/content.aspx&quot; rel=&quot;nofollow noreferrer&quot;&gt;following error&lt;/a&gt; over a move. This is the maximum difference between where the motor was supposed to be and where it actually was at any point during the move. It is a single value for the whole move and is something that many motion controllers keep track of for their own use. In fact, many have soft limits on maximum following error and error if you exceed them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Again, tripping a max follow error can just be an indication that you just need to retune your PID loop, but the frequency with which you need to retune your PID and the difficulty you have in achieving your desired performance can be valuable tools in determining when a motor is getting to the end of it's life.&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="37" LastEditDate="2018-12-12T10:32:08.900" LastActivityDate="2018-12-12T10:32:08.900" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="65" PostTypeId="1" AcceptedAnswerId="107" CreationDate="2012-10-24T00:17:07.893" Score="13" ViewCount="10113" Body="&lt;p&gt;I'm part of a &lt;a href=&quot;http://usfirst.org&quot; rel=&quot;noreferrer&quot;&gt;FIRST Robotics&lt;/a&gt; team, and we're looking into using &lt;a href=&quot;http://en.wikipedia.org/wiki/Mecanum_wheel&quot; rel=&quot;noreferrer&quot;&gt;Mecanum wheels&lt;/a&gt; for our robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What are the advantages and disadvantages of using Mecanum wheel versus regular ones? From looking through Google, it looks like Mecanum wheels give more mobility but don't have as much traction. Are there any other advantages or disadvantages?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Compared to regular wheels, are Mecanum wheels less efficient or more efficient in any way? And if so, is there a quantifiable way to determine by how much?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there equations I can use to calculate efficiency (or inefficiency) and/or speed of moving forwards, sideways, or at arbitrary angles?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;A picture of a robot with mecanum wheels:&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/kLSuG.png&quot; alt=&quot;robot using mecanum wheels&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="79" LastEditorUserId="37" LastEditDate="2015-07-06T11:17:01.593" LastActivityDate="2018-08-13T18:31:21.403" Title="Calculating the efficiency of Mecanum wheels" Tags="&lt;mobile-robot&gt;&lt;design&gt;&lt;movement&gt;&lt;wheel&gt;&lt;first-robotics&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="66" PostTypeId="2" ParentId="46" CreationDate="2012-10-24T00:41:41.147" Score="14" Body="&lt;p&gt;The best commonly available battery technology when it comes to power density versus weight, and at reasonable cost, is LiPo.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would prbably recommend LiFePO4 batteries. LiFePO4 are somewhat more expensive than LiPo for the same watt-hours, and weigh somewhat more, but they hold the charge better, they age much better, and they can be re-charged five to ten times more than LiPo batteries before they lose their capacity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For both of those kinds of batteries, if weight matters, you can design the &quot;battery enclosure&quot; as part of your robot, and buy cells that are just the chemistry enclosed in thin insulating plastic, and build your own battery pack from those cells to fit a custom-shaped cavity in your robot. Make sure to protect the battery against over-charge / over-discharge, though, because it will ruin the battery if you don't. LiPo may even catch fire when you do, whereas LiFePO4 will not.&lt;/p&gt;&#xA;" OwnerUserId="88" LastActivityDate="2012-10-24T00:41:41.147" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="67" PostTypeId="2" ParentId="4" CreationDate="2012-10-24T01:14:12.137" Score="4" Body="&lt;p&gt;I built a line following robot with an Arduino before.  It was really simple to do and all we used were color sensors on the bottom inputted in the Arduino, and then of course some motors for the wheels.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But using an Arduino allowed us to have plenty of room for other components we wanted to add on to make our robot do more things.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, if you want to see some line following code we used just ask in a comment, but it obviously depends on your setup with the sensors and how you want it to turn at intersections and things like that.&lt;/p&gt;&#xA;" OwnerUserId="99" LastActivityDate="2012-10-24T01:14:12.137" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="68" PostTypeId="2" ParentId="4" CreationDate="2012-10-24T01:37:25.863" Score="3" Body="&lt;p&gt;You should use an ARM. Then you can run full linux or android and have access to powerful libraries, high-level functional languages, and a package manager and community. You can use gcc or LLVM, and a modern debugger like gdb.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ARMs used to be too expensive and/or too big, but nowadays you can get an ARM for $5 that's only 13x13 mm. You have to use reflow soldering, but you will anyways if you want to make a professional-quality robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.eetimes.com/electronics-products/electronic-product-reviews/processors/4230227/TI-debuts--5-Sitara-AM335x-ARM-processors&quot; rel=&quot;nofollow&quot;&gt;http://www.eetimes.com/electronics-products/electronic-product-reviews/processors/4230227/TI-debuts--5-Sitara-AM335x-ARM-processors&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All other instructions sets have lost the competition. If you  pick something like AVR, you will be forever stuck with inferior toolchains, weaker MIPS/dollar, and a much smaller community.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you don't want to engineer the whole motherboard, then Gumstix, BeagleBone, BeagleBoard, and Raspberry Pi are all excellent pre-existing ARM-based devkits, and processor vendors also offer a devkit for every processor they make, bringing out at least a display bus and some serial busses.&lt;/p&gt;&#xA;" OwnerUserId="106" LastEditorUserId="106" LastEditDate="2012-10-24T01:42:37.603" LastActivityDate="2012-10-24T01:42:37.603" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="69" PostTypeId="5" CreationDate="2012-10-24T01:54:52.113" Score="0" Body="&lt;p&gt;Localization is the problem of estimating a robot's pose relative to a map of its environment. There are a number of types of robot localization. The easiest is position tracking, where the initial pose of the robot is known and the localization system must correct for small errors generated by the robot's &lt;a href=&quot;https://robotics.stackexchange.com/questions/tagged/odometry&quot;&gt;odometry&lt;/a&gt;. A more difficult problem is the global localization problem, where the robot is not told its initial position and must determine it. Localization is a sub-problem of the more complex field of Simultaneous Localization and Mapping (&lt;a href=&quot;https://robotics.stackexchange.com/questions/tagged/slam&quot;&gt;SLAM&lt;/a&gt;), where the localization system must build the map and locate the robot in the map at the same time. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of the key sub-problems is the kidnapped robot problem. After the robot has localized, the robot is transported to a different location without being informed of the transition. This problem tests the localization system's ability to recover from complete failure. &lt;/p&gt;&#xA;" OwnerUserId="42" LastEditorUserId="6890" LastEditDate="2017-08-30T21:12:52.120" LastActivityDate="2017-08-30T21:12:52.120" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="70" PostTypeId="4" CreationDate="2012-10-24T01:54:52.113" Score="0" Body="Localization is the problem of estimating a robot's pose relative to a map of its environment." OwnerUserId="42" LastEditorUserId="42" LastEditDate="2012-10-24T13:10:18.697" LastActivityDate="2012-10-24T13:10:18.697" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="71" PostTypeId="2" ParentId="60" CreationDate="2012-10-24T02:15:22.920" Score="4" Body="&lt;p&gt;You could use other ways of measuring orientation, such as an accelerometer, optical tracking of markers, or a depth sensor pointed at the floor.&lt;/p&gt;&#xA;" OwnerUserId="106" LastActivityDate="2012-10-24T02:15:22.920" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="72" PostTypeId="2" ParentId="53" CreationDate="2012-10-24T02:15:30.750" Score="6" Body="&lt;p&gt;There is a whole area of literature on this topic. The most general idea is that of Simultaneous Localization and Mapping (&lt;a href=&quot;http://en.wikipedia.org/wiki/Simultaneous_localization_and_mapping&quot;&gt;SLAM&lt;/a&gt;), where the robot must build a map at the same time as it locating itself in that map. Depending on how accurate you want your maps to be, you can attempt a simpler problem of creating an &lt;a href=&quot;http://en.wikipedia.org/wiki/Occupancy_grid_mapping&quot;&gt;occupancy grid map&lt;/a&gt;, which assumes you know the location of the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general, GPS is pretty horrible, so generating an occupancy grid just using GPS as your primary location source will generate pretty fuzzy maps. However, it is possible to integrate GPS with acceleration, gyroscopes, compasses, cameras, wheel encoders and other sensors to approximate a good position in the world. Otherwise, you will need to look into a simple SLAM system to handle your problems. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A nice open-source package &lt;a href=&quot;http://openslam.org/g2o.html&quot;&gt;g2o&lt;/a&gt;, for so-called GraphSLAM, allows you to put in constraints like GPS and relative position to walls. It may not be an exact fit, but it is pretty general.&lt;/p&gt;&#xA;" OwnerUserId="42" LastActivityDate="2012-10-24T02:15:30.750" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="73" PostTypeId="2" ParentId="53" CreationDate="2012-10-24T03:35:28.810" Score="5" Body="&lt;p&gt;The algorithms are essentially the same regardless of what sensors you are using.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The real issue, which &lt;a href=&quot;https://robotics.stackexchange.com/a/72/37&quot;&gt;Chris touched upon&lt;/a&gt;, is that SLAM is hard even with very good sensors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would consider GPS, wheel odometry, and an IMU to be necessary to even attempt slam with ultrasound.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are just looking for cheap localization I recommend taking a look at vision/kinect based slam as well.  Both webcams and the kinect are very cheap and visual slam has come a long way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The kinect is pretty much the holy grail in terms of sensor performance/cost as long as you are indoors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is an example of a kinect on a robot plus a lot of math: &lt;a href=&quot;http://www.youtube.com/watch?v=9Y4RQVpp-BY&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.youtube.com/watch?v=9Y4RQVpp-BY&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="65" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2012-10-24T13:10:14.563" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="74" PostTypeId="2" ParentId="65" CreationDate="2012-10-24T03:52:26.840" Score="6" Body="&lt;p&gt;I have some experience with using mecanum wheels, both indoors and outdoors (on grass, sand and dirt no less).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obvious advantage is holonomic movement.  Disadvantages are weight (commercially available wheels are ridiculously heavy) and cost.  For a given tread material traction will be along the lines of 65-70% that of a regular wheel due to the smaller contact area and 45% rollers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Compared to skid steer, mecanum wheels have no additional friction when turning which is an advantage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mecanum wheels will be simpler and perhaps more reliable than a swerve/crab drive system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Everything is always about tradeoffs.  If I compared an ideal mecanum system to an ideal swerve drive system (full 360 degree rotation, extremely fast wheel orientation) the swerve wins in performance because it has full traction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An ideal swerve system will be expensive and difficult to implement compared to mecanum wheels though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Efficiency is a loaded question.  An ideal mecannum wheel will be equivalent to any other system when moving in any direction, and will turn better than a skid steer system.&#xA;In reality the rollers have reasonable friction so going sideways will be less efficient than going forwards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Getting exact numbers would require a lot of fairly accurate measurements which isn't practical.&lt;/p&gt;&#xA;" OwnerUserId="65" LastActivityDate="2012-10-24T03:52:26.840" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="75" PostTypeId="1" AcceptedAnswerId="76" CreationDate="2012-10-24T04:13:21.397" Score="7" ViewCount="1973" Body="&lt;p&gt;I've got this driver: &lt;a href=&quot;http://www.pololu.com/catalog/product/1182&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.pololu.com/catalog/product/1182&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;... a A4988 stepper motor driver carrier&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/MPEI5.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm attempting to control a connection between the RESET and SLEEP pins with logic ( code ) running on my Arduino. The motor runs perfectly when these two pins are connected however I'd like to control when the stepper is powered off from my Arduino ( and thus not generating extra heat )&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd like to:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;designate a pin to control the connection between these two pins&lt;/li&gt;&#xA;&lt;li&gt;use a &quot;digitalWrite&quot; to the above pin with a HIGH or LOW to&#xA;switch power on and off from the stepper&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;NOTE: The &lt;a href=&quot;http://www.pololu.com/file/0J450/a4988_DMOS_microstepping_driver_with_translator.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;data sheet&lt;/a&gt; mentioned that for the driver to be powering the stepper both RESET and SLEEP needed to be in switched on ( HIGH )&lt;/p&gt;&#xA;" OwnerUserId="111" LastEditorUserId="111" LastEditDate="2012-12-01T09:10:46.850" LastActivityDate="2012-12-01T09:10:46.850" Title="Using an Arduino to control an ON / OFF connection between two pins" Tags="&lt;arduino&gt;&lt;logic-control&gt;&lt;stepper-motor&gt;&lt;stepper-driver&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="76" PostTypeId="2" ParentId="75" CreationDate="2012-10-24T04:30:19.350" Score="14" Body="&lt;p&gt;You are going about this incorrectly.  The reason why pololu is telling you to connect the two pins is because the sleep pin has a pullup resistor on their breakout board.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Connecting reset to the sleep pin is equivalent to connecting the reset pin to high.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can achieve your goal by connecting reset pin to high (5V through pullup resistor) and connect the sleep pin directly to your arduino just like the step/dir pins.&lt;/p&gt;&#xA;" OwnerUserId="65" LastActivityDate="2012-10-24T04:30:19.350" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="77" PostTypeId="2" ParentId="48" CreationDate="2012-10-24T04:42:05.623" Score="6" Body="&lt;p&gt;Components should have vibration ratings somewhere.  Pretty much anything without moving parts will be fine.  Some sensors such as accelerometers and gyroscopes are affected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As an example, quadrotors are an application that is dramatically affected by vibration.  The four props produce an absolutely ridiculous amount of vibration and a quadrotor requires accurate sensor data from the accelerometers/gyros.  If you look at the accelerometer plots you will see an unbelievable amount of noise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Despite this, very few quads have any form of vibration damping, a kalman filter is enough to get good data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a lot of literature of vibration damping and several possible approaches (both active and passive).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have found that memory foam is ideal for damping vibrations to electronics and small sensors such as accel/gyro.  Memory foam is very soft but more importantly is designed to dampen extremely well.  I have cut down accelerometer noise on UAVs by ~80% by using memory foam in the past.&lt;/p&gt;&#xA;" OwnerUserId="65" LastActivityDate="2012-10-24T04:42:05.623" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="79" PostTypeId="2" ParentId="48" CreationDate="2012-10-24T08:29:57.937" Score="6" Body="&lt;p&gt;On the &lt;a href=&quot;http://robotik.dfki-bremen.de/en/research/robotsystems/asguard-iii.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Asguard&lt;/a&gt; system that we have been working on, we have a lot of shocks due to the wheel geometry. On this system we were also able to reduce the vibrations on the control side as &lt;a href=&quot;https://robotics.stackexchange.com/a/59/37&quot;&gt;Mark suggested&lt;/a&gt;. This was done through synchronising the wheels in optimal patterns. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The system also has some mechanical design features that reduces the vibrations. Flexible wheels, elestic couplings between the gears and the wheel and locking mechanisms for most of the screws. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The electronics are not rigidly connected to the structure, but use a combination of foam and rubbers to hold them in place. This has worked well so far. We had a lot of problems with connecters however, where we frequently would get micro-fractures on the board connectors, especially on the heavier connectors like firewire. In these cases we had to create mechanical structures to hold the connectors in place, or replace the connectors by lightweight alternatives where possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sensitive components, like for example the IMU and the cameras we have rigidly connected to the system. It is true that this improves the noise on the accelerometers, but the Kalman Filter never had a big problem with it for estimating the orientation. When using short exposure times on the camera, the vibrations are also not much of a problem. From a sensor point of view we really expected much more problems than we actually had.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I guess the answer to your question is that it really depends on your system, and as we have seen in our case that often you do not even need to protect your components from vibration too much.&lt;/p&gt;&#xA;" OwnerUserId="127" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2012-10-24T11:30:16.270" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="80" PostTypeId="2" ParentId="6" CreationDate="2012-10-24T09:17:28.110" Score="2" Body="&lt;p&gt;&lt;a href=&quot;http://playerstage.sourceforge.net/&quot; rel=&quot;nofollow&quot;&gt;Player/Stage&lt;/a&gt; is still one of the most popular open source robotics projects out there. It's been around for a long time and some of its developers have moved on to start ROS, but that doesn't detract from Player's usefulness. Indeed, all three main components, Player (the framework), Stage (the 2D simulator), and Gazebo (the 3D simulator), have been made to be somewhat &lt;a href=&quot;https://www.willowgarage.com/pages/software/player&quot; rel=&quot;nofollow&quot;&gt;compatible with ROS&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="131" LastActivityDate="2012-10-24T09:17:28.110" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="81" PostTypeId="2" ParentId="60" CreationDate="2012-10-24T09:57:21.070" Score="2" Body="&lt;p&gt;If you managed to get it stable in a stationary configuration, I don't really see how it would be much more difficult to get it stable for a constant velocity. From a system model point of view it would effectively be the same thing bar some velocity offsets. If the transitions between velocities are not very large it should fall within the range of the natural system perturbations. &lt;/p&gt;&#xA;" OwnerUserId="127" LastActivityDate="2012-10-24T09:57:21.070" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="82" PostTypeId="2" ParentId="49" CreationDate="2012-10-24T10:11:55.067" Score="1" Body="&lt;p&gt;If you want to be really clever, you could consider &lt;a href=&quot;http://en.wikipedia.org/wiki/Assisted_GPS&quot; rel=&quot;nofollow&quot;&gt;Assisted GPS (see Wikipedia for full details)&lt;/a&gt; which uses the phone network to provide a better initial fix, by using the cell towers fixed positions as a basis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note, however, that A-GPS uses your data stream, so if you have to pay for data, you may not want to use this!!!&lt;/p&gt;&#xA;" OwnerUserId="134" LastActivityDate="2012-10-24T10:11:55.067" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="83" PostTypeId="5" CreationDate="2012-10-24T10:15:28.807" Score="0" Body="&lt;p&gt;SLAM (Simultaneous Localization And Mapping) refers to a robot building a map of its environment through it's sensor data (mapping) and keeping track of its own position in that map (localization) at the same time.&lt;/p&gt;&#xA;" OwnerUserId="131" LastEditorUserId="131" LastEditDate="2012-10-24T13:09:15.720" LastActivityDate="2012-10-24T13:09:15.720" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="84" PostTypeId="4" CreationDate="2012-10-24T10:15:28.807" Score="0" Body="SLAM (Simultaneous Localization And Mapping) refers to a robot building a map of its environment through it's sensor data (mapping) and keeping track of its own position in that map (localization) at the same time." OwnerUserId="131" LastEditorUserId="131" LastEditDate="2012-10-24T13:10:03.877" LastActivityDate="2012-10-24T13:10:03.877" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="85" PostTypeId="1" AcceptedAnswerId="98" CreationDate="2012-10-24T10:21:01.003" Score="9" ViewCount="3523" Body="&lt;p&gt;For a robotic gripper arm we are designing for factory floor use on very small components, we propose to use electrically activated Shape Memory Alloy (SMA) wire harnesses for actuation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The device being designed is akin to Pick &amp;amp; Place machines used for circuit assembly, but moves over an aircraft-hanger sized work surface on wheels. It manipulates irregular shaped and porous objects between 0.5 cu.cm and 8 cu.cm each - hence the traditional vacuum P&amp;amp;P mechanism does not appeal. Also, individual objects in the assembly line have varying hardness and weights.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Our design constraints are: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Ensuring minimal to zero vibration and sound &lt;/li&gt;&#xA;&lt;li&gt;Using minimal volume within the mechanism (batteries are at the wheelbase, providing stability, so their weight is not a concern)&lt;/li&gt;&#xA;&lt;li&gt;Fine variation of gripper pressure&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;We believe SMA meets the first two constraints well, but need some guidance on achieving constraint 3, i.e. different levels of pressure of the gripper controlled electronically.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My questions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Can PWM of a current above the activation threshold (320 mA for &lt;a href=&quot;http://www.dynalloy.com/TechDataWire.php&quot;&gt;0.005 inch Flexinol HT&lt;/a&gt;) provide variable, repeatable actuation force? &lt;/li&gt;&#xA;&lt;li&gt;Would we need pressure sensors on each fingertip and a closed loop control for grip, or can the gripper be calibrated periodically and maintain repeatable force?&lt;/li&gt;&#xA;&lt;li&gt;Is there any well-documented precedent or study we should be referring to?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="109" LastEditorUserId="50" LastEditDate="2012-10-24T10:51:06.493" LastActivityDate="2012-10-24T15:00:53.547" Title="Shape Memory Alloy wire for robot gripper arm actuation: How to vary grip pressure?" Tags="&lt;mobile-robot&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="86" PostTypeId="5" CreationDate="2012-10-24T10:25:37.390" Score="0" Body="&lt;p&gt;GPS (Global Positioning System) is an outdoor localization system that measures time of flight of a radio signal from a number of satellites in earth orbit. Each satellite sends a very precisely time-stamped signal that also includes its current location in earth orbit. By comparing the time difference in when signals from multiple satellites arrive with the time stamp and location, the position of the receiver can be worked out using triangulation. As GPS necessitates a line of sight to the satellites (although it works through clouds and rain), it is not suitable for indoor localization. It is usually accurate to about 10-15m. Using Differential GPS, which also takes into account signals from earth-based ground stations, accuracy can be improved to about 10cm.&lt;/p&gt;&#xA;" OwnerUserId="131" LastEditorUserId="131" LastEditDate="2012-10-24T13:09:50.647" LastActivityDate="2012-10-24T13:09:50.647" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="87" PostTypeId="4" CreationDate="2012-10-24T10:25:37.390" Score="0" Body="GPS (Global Positioning System) is an outdoor localization system that measures time of flight of a radio signal from a number of satellites in earth orbit." OwnerUserId="131" LastEditorUserId="131" LastEditDate="2012-10-24T13:10:09.010" LastActivityDate="2012-10-24T13:10:09.010" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="88" PostTypeId="1" AcceptedAnswerId="111" CreationDate="2012-10-24T10:41:24.373" Score="5" ViewCount="3988" Body="&lt;p&gt;Design goal is to have a mobile robot that operates on 3 large casters, essentially 2 to 4 inch diameter steel ball bearings, that are motorized. No other mechanism would touch the surface. The robot should thus be able to move in any XY direction on a flat surface, with steering being achieved by varying the speed and rolling direction of these wheels. The robot has no designated &quot;front&quot; side, so it does not need to (and should not have to) bodily turn, in order to move off in any given direction. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Conventional wheels or tracks are not the preferred approach. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking for suggested mechanical layouts of multiple rubber wheels, pressing down onto the steel ball from within the castor housing, to drive the ball in any direction. A single wheel on a stepper, rotated around the vertical axis using a sail-winch servo, is one approach under consideration. Would this be ideal, or are there any serious flaws in this approach?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively, is there any other suggested method of driving such a steel ball in any arbitrary direction under electronic control?&lt;/p&gt;&#xA;" OwnerUserId="109" LastActivityDate="2012-10-24T23:25:24.897" Title="Mechanical design for motorized spherical caster wheels" Tags="&lt;otherservos&gt;&lt;mobile-robot&gt;&lt;stepper-motor&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="89" PostTypeId="2" ParentId="49" CreationDate="2012-10-24T10:58:55.750" Score="3" Body="&lt;p&gt;As other posters have pointed out, using some form of differential GPS will give you large improvements in precision. We have used the Magelan mb500 commercial platform and it claims an accuracy of around 2-3 cm when in RTK fix mode. However, in areas of bad satellite coverage it would sometimes not even provide a solution at all, where cheap GPS receivers in a phone could. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is an open source library called &lt;a href=&quot;http://www.rtklib.com/&quot; rel=&quot;nofollow&quot;&gt;RTKLib&lt;/a&gt; which looks very promising for using cheap GPS equipment with a number of different methods for improving the precision. &lt;/p&gt;&#xA;" OwnerUserId="127" LastActivityDate="2012-10-24T10:58:55.750" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="90" PostTypeId="2" ParentId="85" CreationDate="2012-10-24T12:17:45.737" Score="2" Body="&lt;p&gt;&lt;strong&gt;Why you shouldn't use SMA&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Firstly, I have to wonder why you have chosen to use shape memory alloys in a robotic application. If you look at any of the application lists for SMAs, you'll almost never see a robotic application on the list.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most SMA applications are non-actuated, and include things like glasses frames and golf clubs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some applications do use the SMA as an actuator, but usually only once or twice. These are applications like medical stents, which need to be inserted into an artery small, but open up once inside.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason there are no robotic applications where the SMA needs to act as an actuator and exert a force cause something to move, is that it's subject to fatigue. According to the &lt;a href=&quot;http://en.wikipedia.org/wiki/Shape-memory_alloy#Fatigue_and_functional_fatigue&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;SMA is subject to fatigue; a failure mode by which cyclic loading results in the initiation and propagation of a crack that eventually results in catastrophic loss of function by fracture.&#xA;  in addition to this failure mode, which is not exclusively observed in smart materials. SMA are also subject to Functional Fatigue, whereby the SMA does not fail structurally, but, due to a combination of applied stress, and/or temperature, loses (to some degree) its ability to undergo a reversible phase transformation.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;But if you insist&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because SMA undergoes creep and fatigue, you will &lt;em&gt;have&lt;/em&gt; to have some kind of force transducer and control system to make sure you're applying a known force.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;What I would suggest&lt;/strong&gt;&#xA;Rather than SMAs, there are many small actuators which can satisfy your constraints without the huge drawbacks of SMA.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Voice Coils:&lt;/strong&gt; These simply consist of a permanent magnet and a coil. Adjusting the flow of current directly affects the force applied to the magnet. Ungeared, these are totally silent, and more power efficient than SMAs. The force applied is quite repeatable, as long as the ambient temperature doesn't vary enormously. You can buy these as ready made components from &lt;a href=&quot;http://www.pwr-con.com/voice-coil-motor.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Moticont&lt;/a&gt;. Or open up a hard drive, look there's a ready made robotic finger!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/gpAZf.jpg&quot; alt=&quot;Voice coil robotic finger&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Piezo actuators:&lt;/strong&gt; There's a range of different motors based on piezo ceramics. These are usually very tiny, but expensive motors. Try the Squiggle motors from &lt;a href=&quot;http://www.newscaletech.com/squiggle_overview.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Newscale Tech&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/Xr2Xe.jpg&quot; alt=&quot;Squiggle Motor&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's a company called &lt;a href=&quot;http://www.flxsys.com/Applications/Advanced%20Actuators/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Flexsys&lt;/a&gt; who make actuators using both technologies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/Ajcus.jpg&quot; alt=&quot;Voice Coil actuator&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2012-10-24T12:17:45.737" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="91" PostTypeId="1" AcceptedAnswerId="104" CreationDate="2012-10-24T13:42:36.257" Score="12" ViewCount="939" Body="&lt;p&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=ZHJf365p_zw&quot;&gt;Many robots&lt;/a&gt; and other mechanical devices produce the signature whirring noise as they move, &lt;a href=&quot;http://www.youtube.com/watch?v=67CUudkjEG4&quot;&gt;some&lt;/a&gt; produce less. What makes the difference? What restrictions a silence requirement places on a robot?&lt;/p&gt;&#xA;" OwnerUserId="141" LastActivityDate="2012-10-24T19:21:43.483" Title="What determines the amount of noise an actuator produces?" Tags="&lt;motor&gt;&lt;actuator&gt;&lt;noise&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="92" PostTypeId="2" ParentId="60" CreationDate="2012-10-24T14:43:06.310" Score="2" Body="&lt;p&gt;You need some sensors to detect the state of the system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First linearize the system into a state space form, then consider what sensors you do have. Then check if it is observable. If it is observable, then you can feed the estimated states into your controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Currently, it sounds like you are using the wheel position and back EMF (for velocity) as direct measurements. Without checking the observability matrix, I am unsure if the system is observable.&lt;/p&gt;&#xA;" OwnerUserId="145" LastActivityDate="2012-10-24T14:43:06.310" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="93" PostTypeId="1" CreationDate="2012-10-24T14:49:20.000" Score="2" ViewCount="230" Body="&lt;p&gt;I am looking for a servo drive to control a brushless DC motor, with at least 10A, 30V rating. However, I want to know if any exist which take sinusoidal hall sensor signals directly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I already know there are servo drives taking hall sensor pulses (with 6 different phases), but that is trapezoidal control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: a servo drive includes the driving electronics (no additional transistors required).&lt;/p&gt;&#xA;" OwnerUserId="145" LastEditorUserId="158" LastEditDate="2014-01-10T10:48:14.477" LastActivityDate="2014-01-10T10:48:14.477" Title="What BLDC servo drive takes sinusoidal hall sensor signals?" Tags="&lt;brushless-motor&gt;&lt;hall-sensor&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="94" PostTypeId="1" CreationDate="2012-10-24T14:49:39.577" Score="-6" ViewCount="142" Body="&lt;p&gt;I would be very interested to ask for a list of repos of free open code, applicable to 8-bit avr-s and having relation to robotics - object avoidance, process controllers, battery management, etc. This would be of huge help for me, preventing me from wasting weeks and months to invent the wheel.&lt;/p&gt;&#xA;" OwnerUserId="125" LastEditorUserId="50" LastEditDate="2012-10-24T15:00:17.430" LastActivityDate="2013-12-30T10:33:36.290" Title="Developing for 8-bit AVR-s, what are the current, open and free libraries out there?" Tags="&lt;software&gt;&lt;microcontroller&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="0" ClosedDate="2012-12-05T21:13:56.780" ContentLicense="CC BY-SA 3.0" />
  <row Id="95" PostTypeId="2" ParentId="94" CreationDate="2012-10-24T14:51:31.870" Score="2" Body="&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.fourwalledcubicle.com/LUFA.php&quot; rel=&quot;nofollow&quot;&gt;Lightweight USB Framework for AVRs&lt;/a&gt; — this seems to be a giant in its field. I have not used it, however, and cannot comment on it. &lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.atmel.com/Images/doc2558.pdf&quot; rel=&quot;nofollow&quot;&gt;Atmel's PID implementation&lt;/a&gt; — I can't seem to find the source files at the moment. This is a small and fast integer-arithmetic module, really simple to use. However, choosing the P, I and D coefficients is the real challenge. &lt;/li&gt;&#xA;&lt;li&gt;Modules from &lt;a href=&quot;http://www.siwawi.arubi.uni-kl.de/avr_projects/tempsensor/index.html&quot; rel=&quot;nofollow&quot;&gt;this project&lt;/a&gt; can be used for USART and for Dallas &lt;a href=&quot;http://www.atmel.com/dyn/resources/prod_documents/doc2579.pdf&quot; rel=&quot;nofollow&quot;&gt;one-wire&lt;/a&gt; communication. I am not sure about the license&amp;nbsp;— the authors do not apper to claim anything.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://github.com/H2CO3/libavrutil&quot; rel=&quot;nofollow&quot;&gt;libavrutil&lt;/a&gt; — haven't used this. Copileft license. Covers all basic hardware: ADC-s, PWM-s, USART etc. C and C++ interface.&lt;/li&gt;&#xA;&lt;li&gt;Arduino libraries for &lt;a href=&quot;http://www.arduino.cc/en/Reference/Servo&quot; rel=&quot;nofollow&quot;&gt;RC servos&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://github.com/rickygu/openBMS&quot; rel=&quot;nofollow&quot;&gt;openBMS&lt;/a&gt; Lithium ion Battery Management System for Electric Vehicle&lt;/li&gt;&#xA;&lt;li&gt;The &lt;a href=&quot;http://reprap.org&quot; rel=&quot;nofollow&quot;&gt;RepRap project&lt;/a&gt; has a bunch of open-source stepper-motor-control code that runs on an AVR&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="125" LastEditorUserId="1177" LastEditDate="2013-12-30T10:33:36.290" LastActivityDate="2013-12-30T10:33:36.290" CommentCount="4" CommunityOwnedDate="2012-10-24T14:51:31.870" ContentLicense="CC BY-SA 3.0" />
  <row Id="96" PostTypeId="2" ParentId="43" CreationDate="2012-10-24T14:55:48.137" Score="16" Body="&lt;p&gt;The simplest controller is a linear state feedback controller. There are essentially 4 different states that you need a gain for. These are tilt angle, tilt rate, speed and position.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;strong&gt;LQR&lt;/strong&gt; (linear quadratic regulator) is a method to design these gains (after obtaining a linearized state-space representation of your system). If you do not have a state space representation (you probably don't), you can get equations of motion and measure the parameters. If you do not have a state space representation, you should just tune the gains manually (without LQR or other methods such as &lt;strong&gt;pole placement&lt;/strong&gt;).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h1&gt;Tuning gains manually:&lt;/h1&gt;&#xA;&lt;p&gt;Assuming tilt angle, position/speed and wheel torques are all directed forwards (if positive), you want a positive gain on your tilt angle and tilt rate, as well as a positive gain on position and speed.&lt;/p&gt;&#xA;&lt;p&gt;Start with a gain on tilt angle, and tilt rate. This will get it to balance initially. Once it remains balanced, you can control position and speed by adding a gain to them. If it is unstable, increase the gain on tilt rate (which helps to damp the system).&lt;/p&gt;&#xA;&lt;p&gt;The position/speed control will control both states to zero. To control to some other value, you just need a reference tracking controller, by replacing the states with their errors before feeding it into your controller (eg. current speed - speed reference).&lt;/p&gt;&#xA;&lt;p&gt;Yaw control can be done independently (with the differences in wheel torques added to the main balance/speed/position controller).&lt;/p&gt;&#xA;" OwnerUserId="145" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2012-10-25T05:34:54.000" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="97" PostTypeId="2" ParentId="60" CreationDate="2012-10-24T14:57:47.143" Score="2" Body="&lt;p&gt;Mathematically, the fact that you now have rotation (mostly) eliminates that parameter as a possible control parameter.  Basically you'd have to redesign your algorithm to accept a large and variable angular velocity component while still using angular velocity in your feedback.  The less noisy this is, the better the probable outcome simply because you're likely going to apply a differential of position to derive another control parameter.  Or rather that is one way.  So it does look like you need another control input, but it need not be an accelerometer.  You could do a horizon, fixed marker location or even tilt sensors.&lt;/p&gt;&#xA;" OwnerUserId="93" LastActivityDate="2012-10-24T14:57:47.143" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="98" PostTypeId="2" ParentId="85" CreationDate="2012-10-24T15:00:53.547" Score="6" Body="&lt;p&gt;Have a look at the paper &lt;a href=&quot;http://www.dynalloy.com/pdfs/TCF1140.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Technical Characteristics of Flexinol Actuator Wires&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you'll want to do is devise a structure that leverages the available contraction of the nitinol wire to achieve the desired stroke and force for your application. The paper give a couple of example structures:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/i1giv.png&quot; alt=&quot;structures 1&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/jKiFI.png&quot; alt=&quot;structures 2&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/i6vwx.png&quot; alt=&quot;stroke and force&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The percentage of contraction of nitinol is related to it's temperature. However, the relationship is non-linear and differs between the heating phase and the cooling phase. These differences will need to be taken into account.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/dPrWV.png&quot; alt=&quot;temp vs. contraction&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the article &lt;a href=&quot;http://robotics.hobbizine.com/flexinolresist.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;precision flexinol position control using arduino&lt;/a&gt; the author describes how to use the properties of nitinol so that the wire can act as it's own feedback sensor:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Flexinol, also known as Muscle Wire, is a strong, lightweight wire&#xA;  made from Nitinol that can be made to contract when conducting&#xA;  electricity. In this article I'll present an approach to precision&#xA;  control of this effect based on controlling the voltage in the&#xA;  Flexinol circuit. In addition, taking advantage of the fact that the&#xA;  resistance of Flexinol drops predictably as it contracts, the&#xA;  mechanism described here uses the wire itself as a sensor in a&#xA;  feedback control loop. Some advantages of eliminating the need for a&#xA;  separate sensor are reduced parts count and reduced mechanical&#xA;  complexity.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So by using PWM to vary the voltage across the wire and using an ADC to read that voltage drop, you can design closed loop control of the percentage of contraction of the nitinol wire. Then, using an appropriate mechanical structure, you can translate that contraction into the desired stroke and force needed for your application.&lt;/p&gt;&#xA;" OwnerUserId="142" LastActivityDate="2012-10-24T15:00:53.547" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="99" PostTypeId="1" AcceptedAnswerId="224" CreationDate="2012-10-24T15:07:52.240" Score="5" ViewCount="3309" Body="&lt;p&gt;I have a number of interrupt service routines on an &lt;a href=&quot;https://en.wikipedia.org/wiki/Atmel_AVR&quot; rel=&quot;nofollow&quot;&gt;AVR&lt;/a&gt;. These include interrupts for &lt;a href=&quot;https://en.wikipedia.org/wiki/Universal_asynchronous_receiver/transmitter#Synchronous_transmission&quot; rel=&quot;nofollow&quot;&gt;USART&lt;/a&gt; serial communication, timers, and &lt;a href=&quot;http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus&quot; rel=&quot;nofollow&quot;&gt;SPI&lt;/a&gt; communication.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For all of these, I use circular queues (using a start and end pointer, without boundary checking).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some problems start to occur if the AVR starts to get overloaded. The circular queues will lose chunks of data. To solve this, I can reduce the load on the AVR (for example, by skipping some cycles in the timer). However, this is a manual process, where it is reduced if the AVR appears to have problems. This is partly because I do want relatively consistent timer periods.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, even at 70% average processor load, the queues can fill up randomly by chance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case of spurious overloading at times, how can I make this more adaptive to avoid queue overflows?&lt;/p&gt;&#xA;" OwnerUserId="145" LastEditorUserId="1906" LastEditDate="2015-02-16T08:38:08.117" LastActivityDate="2015-02-16T08:38:08.117" Title="How to manage interrupts on an AVR?" Tags="&lt;microcontroller&gt;&lt;avr&gt;&lt;interrupts&gt;" AnswerCount="3" CommentCount="9" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="100" PostTypeId="1" AcceptedAnswerId="180" CreationDate="2012-10-24T15:17:21.853" Score="9" ViewCount="2433" Body="&lt;p&gt;If you have used connectors for signal wiring for any length of time, you may find that they are unreliable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Specifically, I find these to be unreliable when used for a long time, with a number of disconnections and re-connections:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/RDJQV.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is due to the loss of springy-ness of the crimped metal end on the wire, which causes contact problems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which connectors (with rapid connection time) are reliable for multiple re-connections for simple signal wiring?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This excludes screw terminals and connectors with screws (eg. D-subminiature connectors), because they are not simple plug-in connectors.&lt;/p&gt;&#xA;" OwnerUserId="145" LastActivityDate="2012-11-07T20:26:31.823" Title="What connectors are most reliable?" Tags="&lt;wiring&gt;" AnswerCount="4" CommentCount="5" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="101" PostTypeId="2" ParentId="48" CreationDate="2012-10-24T15:19:02.577" Score="2" Body="&lt;p&gt;It will take a lot to shake components off of a PCB/PWB so for the most part it should be safe if you make sure that the mounting is correct.  One thing that people forget is that if there is vibration then there may also be flex, and even tiny amounts of flex transmitted into a PWB can be damaging.  FR4 is stiff and in the wrong location will take a lot of the stress loads.  But this is easily fixed with the right kind of mounting that doesn't allow the force to transfer through the board - anchored on one side, semi-rigid on the other side.&lt;/p&gt;&#xA;" OwnerUserId="93" LastActivityDate="2012-10-24T15:19:02.577" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="102" PostTypeId="2" ParentId="53" CreationDate="2012-10-24T15:29:09.373" Score="2" Body="&lt;p&gt;To do SLAM, you will need a relatively good estimate of position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Robots that use laser scanners can make do with just odometry, because the data is relatively accurate, and the scanner data can be used to help localize in subsequent time steps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ultrasound sensors are very fuzzy, they generally have a direction fuzziness of 20+ degrees, and anything in the general direction will be detected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus, they are of negligible help in helping to localize (except in very structured environments).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A GPS/IMU combination can be used to get reasonable localization. Of course, this depends on the scale of the robot, and if it is indoors, GPS may not be practical.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are able to carefully control wheel slippage, wheel odometry can significantly improve localization in the short term (although an absolute method of localization is preferred). Without an absolute reference (eg. GPS), even with a laser scanner, you will need to be able to solve the problem of &quot;closing the loop&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Structured environments may have a lower accuracy requirement. For example, a maze-like environment with walls at regular square grid distances, where it is simple to detect the presence of a wall in each direction of a grid cell.&lt;/p&gt;&#xA;" OwnerUserId="145" LastActivityDate="2012-10-24T15:29:09.373" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="103" PostTypeId="2" ParentId="42" CreationDate="2012-10-24T15:33:59.000" Score="4" Body="&lt;p&gt;There is very little difference between a robotic off road vehicle and a normal vehicle with a driver. What kind of vehicles are suitable for off-road conditions?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why - tractors of course!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/ho71x.jpg&quot; alt=&quot;Tractor&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Look at those bad boys! Great for all around the farm. Nobody seems to talk about the importance of cleaning the mud off them, except to read the part number to order replacements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, why not other off-road vehicles? Like Land Rovers:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/3WOAg.jpg&quot; alt=&quot;Land Rover&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They seem to be able to undertake long expeditions without requiring cleaning.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or Monster trucks:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/tW98e.jpg&quot; alt=&quot;Monster Truck&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you'll notice about the treads on these types of tyres is the alternating half-chevron patterns. They point in such a way that the mud sliding on the tyre is always pushed towards the outside of the tyre, eventually falling off. In a way they're self cleaning.&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2012-10-24T15:33:59.000" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="104" PostTypeId="2" ParentId="91" CreationDate="2012-10-24T15:41:57.073" Score="5" Body="&lt;p&gt;Many parts of the actuation system create noise. One important noise generator is the gear train between the motor and the effector. All of those toothed wheels rattle slightly against each other, each contributing slightly to the orchestra of noise. This is one of the reasons behind the development of Maxon's &lt;a href=&quot;http://www.maxonmotor.co.uk/maxon/view/news/MEDIENMITTEILUNG-Koax-Drive&quot; rel=&quot;nofollow noreferrer&quot;&gt;Koaxdrive&lt;/a&gt; gear, which is targeted at low noise applications:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/osdLC.jpg&quot; alt=&quot;Maxon Koaxdrive cear&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2012-10-24T15:41:57.073" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="105" PostTypeId="2" ParentId="18" CreationDate="2012-10-24T15:42:36.533" Score="10" Body="&lt;p&gt;You can get experimental data, and perform some statistical analysis to determine the process noise (noise between time steps), and sensor noise (compared to a ground truth).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To get the ground truth for sensor noise, you either need a more accurate sensor, or else experimentally test while keeping the state of interest at a known (usually fixed) value.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you do not have experimental data, you can use the datasheets or specifications for each sensor to determine its noise. The process noise would be more difficult in this instance, but you may be able to guess at its value by assuming a certain amount of noise due to, for example, an actuator, if the actuator is the primary source of process noise.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Another way is to consider the maximum settling time allowed for estimation. This will determine the ratio between the process noise and sensor noise. This allows you to have the maximum filtering effect while meeting your settling time requirements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that this does not provide a good way to tune the ratio between different sensors, or between different states, so is not perfect.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Basically, if you have experimental data, you can obtain optimal performance. Otherwise, you can only calculate process noise based by assuming the likely noise of the dominant contributor to process noise, or by determining what minimum performance is required (which is not optimal, but at least gets what is needed).&lt;/p&gt;&#xA;" OwnerUserId="145" LastActivityDate="2012-10-24T15:42:36.533" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="106" PostTypeId="1" CreationDate="2012-10-24T15:53:23.727" Score="30" ViewCount="8807" Body="&lt;p&gt;What is a suitable model for two-wheeled robots? That is, what equations of motion describe the dynamics of a two-wheeled robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Model of varying fidelity are welcome. This includes non-linear models, as well as linearized models.&lt;/p&gt;&#xA;" OwnerUserId="145" LastEditorUserId="53" LastEditDate="2012-10-24T23:24:32.067" LastActivityDate="2017-11-20T15:29:28.003" Title="What is a suitable model for two-wheeled robots?" Tags="&lt;mobile-robot&gt;&lt;two-wheeled&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="20" ContentLicense="CC BY-SA 3.0" />
  <row Id="107" PostTypeId="2" ParentId="65" CreationDate="2012-10-24T15:56:30.673" Score="6" Body="&lt;p&gt;Efficiency isn't the right thing to compare due to various advantages and disadvantages of each type of wheel. Comparing the efficiency of the different types of wheels is like comparing apples and oranges.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, comparing speed and force can give a good comparison of the different types of wheels. Here is a table that offers a quick and simple comparison (&lt;strong&gt;&lt;em&gt;Note that this assumes fictionless bearings and equal traction!&lt;/em&gt;&lt;/strong&gt;):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/FBWEI.gif&quot; alt=&quot;wheel comparison chart&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Trying to take into account slipage gets hairy. From the paper &quot;Kinematic Analysis of Four-Wheel Mecanum Vehicle&quot; which is at the top of &lt;a href=&quot;http://www.chiefdelphi.com/media/papers/2390&quot; rel=&quot;nofollow noreferrer&quot;&gt;this list of papers&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This problem, in general, has no solution, since it represents an &#xA;  overdetermined system of simultaneous linear equations. The  physical&#xA;  meaning of this is: if four arbitrary rotational  velocities are&#xA;  chosen for the four wheels, there is in general no  vehicle motion&#xA;  which does not involve some wheel &quot;scrubbing&quot;  (slipping) on the&#xA;  floor. However, a matrix [F] which generates a  &quot;best fit&quot; least&#xA;  squares solution can be found&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="142" LastActivityDate="2012-10-24T15:56:30.673" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="108" PostTypeId="2" ParentId="91" CreationDate="2012-10-24T16:44:17.600" Score="4" Body="&lt;p&gt;There is the motor with its mechanical balancing, and its bearings, and all associated rotary parts, with their respective vibrations, adding up. If a brushed DC motor is used, the brushes have an inherent commutation &quot;whirring&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also friction noise of all moving parts, though this last is much damped as a side-effect of lubricants used, hence usually not a big factor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A parallel would be the ancient floppy disk drives, which rotated much slower than a blue-ray drive, but made quite a racket, compared to the near-silent, excellently mechanically balanced, modern Brushless DC motors running blue-ray drives and hard disks.&lt;/p&gt;&#xA;" OwnerUserId="109" LastActivityDate="2012-10-24T16:44:17.600" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="109" PostTypeId="2" ParentId="88" CreationDate="2012-10-24T19:13:56.563" Score="3" Body="&lt;p&gt;What about two perpendicular rubber sheathed shafts? This would have the benefit of neatly separating out the x and y directions into two components.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This could be thought of as an inversion of the function of an old &lt;a href=&quot;http://en.wikipedia.org/wiki/Mouse_%28computing%29#Mechanical_mice&quot; rel=&quot;nofollow&quot;&gt;analogue mouse&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the comments, it is clear that in order to rotate the steel balls in 100% x or y, the rollers on the opposing axis must be removed from contact with the balls.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is also the assumption that the castor housing has bearings to keep the steel ball in position.&lt;/p&gt;&#xA;" OwnerUserId="101" LastEditorUserId="101" LastEditDate="2012-10-24T23:25:24.897" LastActivityDate="2012-10-24T23:25:24.897" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="110" PostTypeId="2" ParentId="91" CreationDate="2012-10-24T19:21:43.483" Score="3" Body="&lt;p&gt;Whilst the two answers in place focus on mechanical noise (which is what I think you are asking about) there is also, of course, electrical noise which manifests itself as Electro-Magnetic Interference (EMI or also known as EMC)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anything that contains a motor is likely to generate a level of EMI... normally a small level that you don't notice it, but with bigger motors and/or high switching speeds it will become noticeable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Symptoms include picture breakthrough on your TV (etc) with the motor running.&lt;/p&gt;&#xA;" OwnerUserId="134" LastActivityDate="2012-10-24T19:21:43.483" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="111" PostTypeId="2" ParentId="88" CreationDate="2012-10-24T21:35:33.263" Score="4" Body="&lt;p&gt;How about Omnidirectional wheels?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/DMSs2.jpg&quot; alt=&quot;Omnidirectional wheel&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could drive the sphere on two pairs of such wheels, with each pair driven by one motor. This would give you two axis control of the sphere. I.E. you can drive forwards or sideways.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or you could use three wheels and three motors just like this robot:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/sjYFw.jpg&quot; alt=&quot;Bowling ball robot&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/npENu.jpg&quot; alt=&quot;Bowling ball robot&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This allows you to spin the sphere about the vertical axis, if that's helpful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The good thing about this solution is that the wheels both drive the sphere, and bear the weight.&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2012-10-24T21:35:33.263" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="112" PostTypeId="1" AcceptedAnswerId="114" CreationDate="2012-10-24T22:08:20.767" Score="24" ViewCount="15781" Body="&lt;p&gt;Emergency stops are obviously a good idea on most robots, how should they be wired?  What systems should be killed immediately, and what should stay working?&lt;/p&gt;&#xA;" OwnerUserId="73" LastEditorUserId="145" LastEditDate="2012-10-25T14:21:31.763" LastActivityDate="2019-03-28T10:32:17.203" Title="How should emergency stops be wired?" Tags="&lt;mobile-robot&gt;&lt;errors&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="113" PostTypeId="1" AcceptedAnswerId="161" CreationDate="2012-10-24T22:10:07.020" Score="10" ViewCount="250" Body="&lt;p&gt;Range sensors (for example sonar, infrared, and lidar) are notoriously noisy.  How can I characterize the noise characteristics to include these in a probabilistic localization sensor model?&lt;/p&gt;&#xA;" OwnerUserId="73" LastActivityDate="2012-10-27T17:29:48.033" Title="How to model the noise in a range sensor's return?" Tags="&lt;sensors&gt;&lt;noise&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="114" PostTypeId="2" ParentId="112" CreationDate="2012-10-24T23:19:12.377" Score="19" Body="&lt;p&gt;Emergency stops are a safety feature, normally found on industrial equipment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They should be used when the robot has a potential to hurt humans or cause harm to other assets. This generally depends on the weight of the robot, and the power of the motors (speed at which the robot moves).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, a 1kg robot is too light to cause much damage. Conversely if it is 50kg, it could cause some damage. Similarly, a 5kg flying robot which moves very quickly could be dangerous.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will want to mount an emergency stop on the robot, and possibly also another one off the robot (although this is a more difficult configuration). The safe way of wiring an emergency stop is in a normally closed manner. That means that the switch is normally closed, and the two terminals are connected. By connecting one end to logical 1, and pulling the other end to logical 0 through a resistor, it can be used to determine the state of the emergency stop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the emergency stop is triggered, the switch will open, and the signal will be pulled to logical 0 (0 volts).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This will normally feed into a relay controlling the power to the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that another safety requirement of emergency stops is that resetting an emergency stop should not start up the robot again. Turning it back on should require both resetting the emergency stop, and subsequently pressing the on switch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EHow has a diagram showing how this should be wired:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.ehow.com/how-does_5151421_do-emergency-stop-buttons-work.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.ehow.com/how-does_5151421_do-emergency-stop-buttons-work.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;As &lt;a href=&quot;https://robotics.stackexchange.com/a/116/145&quot;&gt;Mark Booth&lt;/a&gt; pointed out, to further increase robustness, you should use the normally open switch as well. To do this, connect this signal (with a pull down resistor), to the STOP signal of a relay (&lt;a href=&quot;http://en.wikipedia.org/wiki/Relay_logic&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://en.wikipedia.org/wiki/Relay_logic&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The systems that should be killed should include all actuators. This means anything that can move. If you have a computer on board, you may be able to separate its power to another system to avoid sudden loss of power. However, you will want to ensure that it is not powering any actuators directly (eg. USB).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;For low power applications, you might try to save on space by skipping the relay, and wire the emergency stop in series with your main power source (batteries). &lt;strong&gt;Don't do this.&lt;/strong&gt; There are two problems:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;This would violate the safety principle that resetting the emergency stop should &lt;strong&gt;not&lt;/strong&gt; by itself turn on the power again.&lt;/li&gt;&#xA;&lt;li&gt;All the current will be flow through your emergency stop. There are emergency stops rated up to 10A (others are rated only 5A). Your application will probably require more current&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;If an emergency stop is required on your robot, it is probably large enough to have the space for relays.&lt;/p&gt;&#xA;" OwnerUserId="145" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2012-10-25T00:06:43.403" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="115" PostTypeId="2" ParentId="55" CreationDate="2012-10-24T23:43:28.400" Score="5" Body="&lt;p&gt;To determine how much cooling you need, you will want to calculate the thermal resistance, and how fast heat is being generated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To do this, you can start using it for a period of time (at maximum load), then stop using it. During this time, measure how temperature rises and falls.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This will allow you to calculate the amount of heat generated, as well as thermal resistance to the case (as multiples of thermal capacity). You can also measure the difference in power in versus power out to measure heat dissipated inside ($power = voltage \times current$).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Measuring air temperature you also get the thermal resistance between the case and the ambient air temperature.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After that, you can treat thermal resistance like an electrical network (see &lt;a href=&quot;http://en.wikipedia.org/wiki/Thermal_resistance&quot;&gt;http://en.wikipedia.org/wiki/Thermal_resistance&lt;/a&gt;). Adding heat sinks of heat pipes simply adds another route for the heat, with lower resistance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can find the resistance of any heat sink or heat pipe from its datasheets. Then you can estimate how the addition of it will affect the overall thermal resistance of the network. By looking at the rate of heat dissipation, the thermal resistance and the maximum rated temperature, you will know whether it is enough.&lt;/p&gt;&#xA;" OwnerUserId="145" LastActivityDate="2012-10-24T23:43:28.400" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="116" PostTypeId="2" ParentId="112" CreationDate="2012-10-24T23:50:55.943" Score="15" Body="&lt;p&gt;In addition to the points that &lt;a href=&quot;https://robotics.stackexchange.com/a/114/37&quot;&gt;ronalchn&lt;/a&gt; makes, if you have a &lt;em&gt;safety critical system&lt;/em&gt;, the E-Stop selected should use at least a 4-wire interface rather than a simpler two wire interface.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The E-Stop should then have two internal switches, one normally closed, the other normally open (&lt;a href=&quot;http://www.ia.omron.com/products/family/1111/download/catalog.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;like one of these OMRON options&lt;/a&gt;, see &lt;code&gt;A22E-M-11-EMO&lt;/code&gt;&#xA; and &lt;code&gt;A22E-M-11-EMS&lt;/code&gt; on p2 of the &lt;a href=&quot;http://www.ia.omron.com/data_pdf/cat/a22e_ca_csm206513-9703.pdf?id=1111&quot; rel=&quot;nofollow noreferrer&quot;&gt;datasheet&lt;/a&gt;). Activating the E-Stop both opens the &lt;a href=&quot;http://en.wikipedia.org/wiki/Switch#Contact_terminology&quot; rel=&quot;nofollow noreferrer&quot;&gt;NC&lt;sup&gt;(Normally closed)&lt;/sup&gt; switch&lt;/a&gt; and closes the NO&lt;sup&gt;(Normally open)&lt;/sup&gt; switch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason for this is redundancy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One failure mode of a two wire normally closed e-stop circuit is that the wires get shorted, thus opening the NC switch would do nothing. This could happen in a situation where a cable is crushed, the insulation displaced and the now bare wires touch each other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you decide to wire your E-stop in the opposite way though, with a normally open circuit then one of &lt;em&gt;its&lt;/em&gt; failure mode is that the e-stop wire gets cut, thus closing the NO switch would do nothing. This could happen in a situation where a cable is caught between two surfaces or where movement pulls a cable out of its socket.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The risk of these failure modes means that neither on their own are sufficient.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By including both NC and NO E-Stop circuits, you virtually eliminate this risk, since either E-Stop circuit registering an E-Stop condition would cause an overall E-Stop condition. There &lt;em&gt;is&lt;/em&gt; an exceedingly small chance that the NC circuit could be shorted &lt;em&gt;at the same time&lt;/em&gt; as the NO circuit is disconnected, but any safety system worth its salt would make the window of opportunity for this vanishingly small (i.e. transistor switching rates).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;On the subject of what to kill on an E-Stop, in my opinion &lt;strong&gt;you should kill everything which can move&lt;/strong&gt; and everything which could cause damage (such as a laser).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My experience is with &lt;em&gt;industrial robotics&lt;/em&gt; though, where the mechanics are typically designed so that it is inherently safe to kill the power at any time. Axes are designed such that motors aren't acting against gravity without significant gearing (for example &lt;a href=&quot;http://en.wikipedia.org/wiki/SCARA&quot; rel=&quot;nofollow noreferrer&quot;&gt;SCARA robots&lt;/a&gt;, where most of the axes are in a horizontal plane) or are designed such that  in an E-Stop condition the &lt;a href=&quot;http://en.wikipedia.org/wiki/Dynamic_braking#Principle_of_operation&quot; rel=&quot;nofollow noreferrer&quot;&gt;motors are shorted, bringing them to an abrupt stop&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="37" LastEditDate="2019-03-28T10:32:17.203" LastActivityDate="2019-03-28T10:32:17.203" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="117" PostTypeId="1" AcceptedAnswerId="127" CreationDate="2012-10-25T02:01:30.993" Score="5" ViewCount="1501" Body="&lt;p&gt;In graph-based planning (say, A*), states are connected to their neighbors.  How should one decide whether to connect to the 4 neighbors or the 8 neighbors?  What are the pros and cons of each approach?&lt;/p&gt;&#xA;" OwnerUserId="73" LastEditorUserId="350" LastEditDate="2012-11-30T14:23:47.963" LastActivityDate="2018-01-29T18:13:34.147" Title="What is the difference between 4-point and 8-point connectivity in graph based planning?" Tags="&lt;motion-planning&gt;&lt;artificial-intelligence&gt;&lt;planning&gt;" AnswerCount="5" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="118" PostTypeId="1" AcceptedAnswerId="250" CreationDate="2012-10-25T02:41:22.373" Score="8" ViewCount="959" Body="&lt;p&gt;I am attempting to upload a custom firmware to a Lego Mindstorms NXT and am having issues.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First of all, I'm attempting to use &lt;a href=&quot;http://lejos-osek.sourceforge.net/&quot;&gt;nxtOSEK&lt;/a&gt;, which would let me run C++ programs on it.  The problem is, everytime I put it into firmware update mode, the download doesn't seem to actually occur.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I mean by this is that, according to the output in my terminal (both Mac and Windows), the download was successful, however when the NXT reboots, I still see the normal logo (not nxtOSEK).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, what I'm doing is first holding down the &lt;code&gt;Reset&lt;/code&gt; button for a few seconds, then hitting the orange button, giving me that tic-tic-tic sound.  Then I run the firmware update (either using the Windows NextTool or Mac OSX GUI NextTool) and attempt the download.  I get a success message, yet the robot is still using the old firmware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What could be the cause of this problem and how can I solve it?&lt;/p&gt;&#xA;" OwnerUserId="47" LastEditorUserId="47" LastEditDate="2012-10-25T14:58:49.250" LastActivityDate="2012-11-01T04:08:45.253" Title="Properly flashing the firmware on a Lego Mindstorms NXT" Tags="&lt;mindstorms&gt;&lt;nxt&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="119" PostTypeId="1" AcceptedAnswerId="120" CreationDate="2012-10-25T04:45:29.487" Score="13" ViewCount="1098" Body="&lt;p&gt;When designing a standard 4 or 6 wheel robot, is it better to have the weight distributed primarily in the center of the robot, or over the wheels, or is there no difference?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Specifically, which weight distribution will make the robot less likely to tip over?&lt;/p&gt;&#xA;" OwnerUserId="79" LastActivityDate="2012-10-26T16:19:50.753" Title="Is it better to have weight distributed over the wheels or the center of the robot?" Tags="&lt;mobile-robot&gt;&lt;design&gt;&lt;stability&gt;&lt;wheeled-robot&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="120" PostTypeId="2" ParentId="119" CreationDate="2012-10-25T05:32:55.577" Score="14" Body="&lt;p&gt;Assuming it is a rigid robot, then the only weight properties of interest is:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the total mass&lt;/li&gt;&#xA;&lt;li&gt;the centre of mass&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In terms of tipping over, the robot is more stable if the angle required before tipping over is maximized. This is achieved by having a low centre of mass, and a centre of mass as far away from the edges of the &lt;a href=&quot;http://en.wikipedia.org/wiki/Support_polygon&quot;&gt;support polygon&lt;/a&gt; as possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Intuitively, you can see that if the centre of mass is near the centre of the robot, it is more stable. More formally, if you consider each wheel to be the vertex of a polygon (from a top view), then you will see a support polygon. You can designate the centre to be the point furtherest away from an edge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another way to increase stability is to increase the size of the support polygon - that is, place the wheels further out to form a wide base. Adding more wheels can also increase the size of the support polygon, although this mostly impacts three wheeled robots, which have quite a small support polygon relative to the distance between the wheels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The angle required for the robot to tip may depend on the direction of tipping. If there is movement along that direction, then disturbances are more likely in that direction. That is why cars are more stable forward/backwards, compared to sideways (roll axis), with front wheels further from the rear wheels as compared to the distance between left and right wheels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The total mass of the robot is also a factor. If the robot is heavier, then a larger disturbing force is required to tip the robot to the required angle before it will continue to tip over. Having said that, you are unlikely to want to simply increase robot mass, so you will:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;try to place heavier components lower (batteries can be quite heavy)&lt;/li&gt;&#xA;&lt;li&gt;increase the size of the support polygon (wheels further out, or 4 wheels instead of 3).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="145" LastEditorUserId="145" LastEditDate="2012-10-25T05:38:03.217" LastActivityDate="2012-10-25T05:38:03.217" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="121" PostTypeId="2" ParentId="117" CreationDate="2012-10-25T06:06:53.957" Score="0" Body="&lt;p&gt;Assuming that (1) you are representing your environment as a grid (which is the only case where the 4-neighbor vs. 8-neighbor question makes sense) and (2) you are planning for navigation (which is the most common use case for grid-based representations)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I personally would not make much a case for 4-neighbour makes not much sense. What you would do by connecting only 4 neighbour per cell is force the robot to go only in &quot;straight&quot; directions. It is already a problem as it is with 8 neighbours, as one usually already has to &quot;smooth&quot; the result or use other approaches to interpret the resulting path.&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2012-10-25T06:06:53.957" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="122" PostTypeId="2" ParentId="117" CreationDate="2012-10-25T06:07:19.763" Score="1" Body="&lt;p&gt;Graph-based planning algorithms are typically performed for high level planning, for example getting a robot across an office. But, the actual actuator planning for the robot is planned completely differently. This means it completely depends on your application and your desired level of complexity. If you have a grid in which cells are either occupied or not occupied, you may not want your robot transitioning diagonally for fear of collision with the neighboring cells. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In technical terms, it doesn't matter at all if you use 4 or 8 way connectivity for algorithms like A*.&lt;/p&gt;&#xA;" OwnerUserId="42" LastActivityDate="2012-10-25T06:07:19.763" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="123" PostTypeId="2" ParentId="113" CreationDate="2012-10-25T06:22:54.963" Score="3" Body="&lt;p&gt;Almost everybody just assumes the noise is gaussian because that way the math is relatively easy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you really wanted, you could experimentally determine the distribution of sensor noise, fit a model to it, and use that but it would be a lot of work for potentially no gain.&lt;/p&gt;&#xA;" OwnerUserId="65" LastActivityDate="2012-10-25T06:22:54.963" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="124" PostTypeId="2" ParentId="100" CreationDate="2012-10-25T06:34:11.813" Score="2" Body="&lt;p&gt;Depends a lot on what the connectors are being used for.  Do they need to be panel mounted? pcb mounted?  Just hanging out?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I see anderson power poles all over the place in robotics because they lock reliably and can be snapped together to make connectors of any size.  Normally they are used for power, not signals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IDC connectors are also very common for signals/low power.  They also lock reliably and use standard .1 header spacing which is nice for prototyping/testing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The locking headers you mentioned are also very common, but never where repeated disconnects/reconnects are expected.  Mostly just indicator lights and such.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In weight/space restricted applications RC connectors are great.  A lot of the RC connectors have extremely high current capacity and are very reliable under vibration.  My favourite is the XT60.&lt;/p&gt;&#xA;" OwnerUserId="65" LastActivityDate="2012-10-25T06:34:11.813" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="125" PostTypeId="2" ParentId="25" CreationDate="2012-10-25T06:55:11.320" Score="32" Body="&lt;p&gt;Choosing the correct prop/motor combination can be challenging.  Even worse, the vast majority of RC motors will have vague or non-existant specifications.  This makes it very hard to do &quot;real&quot; math.  Instead you will have to rely on prop thrust ratings or use a known combination that other people have tested.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Propellers:&#xA;Manueverability of a quad is dependent on how quickly you can change the thrust (how fast you can change the RPM of the props). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A smaller prop is easier to speed up and slow down whereas a large prop takes a very long time to change speeds.  Beyond a certain size you essentially are unable to fly.  This is why you see hexacoptors and octocopters that use more, smaller props instead of giant quadrotors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the flipside, propeller efficiency is related to the area of a prop (or radius squared) so a small increase in prop diameter will make the quad vastly more efficient.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The faster you want to go, the more aggressive a pitch you want.  Since quadrotors are generally hovering this means you want the lowest pitch available.  If you want to go somewhere fast a higher pitch might be apropriate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Motors:&#xA;Generally you just choose a motor that matches the given prop.  Having a motor that is too large will be heavy, and a motor that is too small will perform poorly or burn up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A smaller prop requires a higher RPM motor because they must spin faster to generate equivalent lift.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you put everything together, an efficient quad will have properly sized, low RPM motors with very large props.&lt;br&gt;&#xA;An acrobatic quad will want smaller, more aggressive props, faster motors, and you might even overvolt the motors for faster response.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While you will be hard pressed to find torque curves for Rc motors, you will have thrust and current ratings for a given prop which makes it fairly straightforward to determine how much you can lift and approximately how long you can fly once you have chosen a combinatoin.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a general rule you want a 2:1 thrust/weight ratio for a standard quad and 3:1 or higher for something acrobatic.  1.5:1 has been known to fly.&lt;/p&gt;&#xA;" OwnerUserId="65" LastEditorUserId="65" LastEditDate="2012-10-25T07:01:33.607" LastActivityDate="2012-10-25T07:01:33.607" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="126" PostTypeId="2" ParentId="57" CreationDate="2012-10-25T07:11:24.653" Score="7" Body="&lt;p&gt;Temperature is a very simple number to measure and is a good aggregation of all the other factors since a weakening motor will be driven harder.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Generally a motor that is about to fail will be significantly hotter than the rest of the motors.&lt;/p&gt;&#xA;" OwnerUserId="65" LastActivityDate="2012-10-25T07:11:24.653" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="127" PostTypeId="2" ParentId="117" CreationDate="2012-10-25T09:33:40.157" Score="5" Body="&lt;p&gt;I believe it simply boils down to what your robot can do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are for some reason restricted to moving only in 4 directions, then you connect each grid cell to 4.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you can go in 8 directions, you connect each grid cell to 8.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you can go in 6 directions, you use a honeycomb grid and connect each grid cell to 6.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is no generic answer. If you plan to go diagonally with a robot that can't perform the action, that's bad planning. If you plan to only go horizontally and vertically while your robot can take shortcuts, that's also bad planning.&lt;/p&gt;&#xA;" OwnerUserId="158" LastActivityDate="2012-10-25T09:33:40.157" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="128" PostTypeId="1" AcceptedAnswerId="140" CreationDate="2012-10-25T09:49:05.213" Score="20" ViewCount="4483" Body="&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt; I don't know why, but this question seems to be confusing many people. I am aware of when/where/why/how to use real-time. I am interested in knowing whether people who have a real-time task would actually care enough to implement it in real-time or not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's no need to mention why real-time operations are important for a robot. My question is however, how much is it actually used in robotics?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Take &lt;a href=&quot;https://robotics.stackexchange.com/q/6/158&quot;&gt;this question&lt;/a&gt; for example. Only one answer mentions any platform with real-time capabilities, and it is far from the top too. ROS apparently, being a very popular platform which is not real-time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the real-time world however, RTAI&lt;sup&gt;1&lt;/sup&gt; seems to be the only workable &lt;em&gt;free&lt;/em&gt; real-time platform of use. It is however, limited to Linux (no problem), badly documented and slowly developed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;del&gt;So, how much is real-time behavior sought after among robotics developers?&lt;/del&gt; The question is, how much are developers inclined to write real-time applications when real-time behavior is actually needed? If not much, why?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, reflexive behavior based on tactile data, cannot go through ROS because it would lose its real-time property. But do people really come up with a real-time solution or use ROS anyway, ignoring the real-time property?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; or similarly Xenomai&lt;/p&gt;&#xA;" OwnerUserId="158" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2016-06-08T17:02:46.010" Title="How mature is real-time programming in robotics?" Tags="&lt;software&gt;&lt;platform&gt;&lt;real-time&gt;" AnswerCount="10" CommentCount="6" FavoriteCount="4" ClosedDate="2016-06-10T17:17:50.863" ContentLicense="CC BY-SA 3.0" />
  <row Id="129" PostTypeId="2" ParentId="128" CreationDate="2012-10-25T10:27:00.837" Score="4" Body="&lt;p&gt;The purpose of the software determines whether it needs to be strictly real-time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where the purpose is path planning or localization, often a low frequency is sufficent, for example, 10Hz. In these cases, a player/stage setup running on Linux is fine. We can see that there are few problems if one time step is a bit longer or shorter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Strictly real-time behaviour is required if the robot dynamics are fast. For example, moving a robotic arm to track a position, or to handle/grip objects, and move them. If a time step is missed, the position may overshoot undesirably, and we may want more predictable behaviour. In this case, we may have a frequency up to 1kHz or more. If an operating system is used, we want a real-time operating system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Real-time behaviour can be accomplished in embedded applications, by using timers and interrupts (compiled C code on a microcontroller). In this case, we must ensure that the processing load is not too high so that a regular sampling frequency can be maintained.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Robots using computers/microprocessors (because more processing power is required), will need to use a real-time operating system to guarantee high sampling rates.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Therefore, whether real-time behaviour is required depends on what the developer intends to use it for.&lt;/p&gt;&#xA;" OwnerUserId="145" LastActivityDate="2012-10-25T10:27:00.837" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="130" PostTypeId="2" ParentId="128" CreationDate="2012-10-25T13:38:40.087" Score="9" Body="&lt;p&gt;A real time system is not really required for many (most?) robotic control systems. As long as you have a control loop that runs fast enough, with low enough jitter, and doesn't miss too many cycles, then this is quite adequate for robotic control and servoing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As evidence of this, let me present the PR2 and the Shadow  Robot Hand:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/72drV.jpg&quot; alt=&quot;PR2&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This robot has about 20 degrees of freedom, all of which are servoed through ROS's main loop. Or how about the Shadow Robot Hand, which also has 20 DOFs, plus an array of tactile and other sensors, and is also servoed through ROS's main loop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ROS main loop suffers from a little jitter, sometimes as much as 100us, and even sometimes misses cycles altogether. But it doesn't matter if 99.9% of cycles are executed successfully. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The use of many cores within the host PCs means that one whole core is dedicated to running the main loop, and so it is very rarely delayed by other tasks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main reason for using a really real-time OS for a robotic system is for safety. If the robot is working in a safety critical situation, then it is your responsibility to guarantee 100% control up-time, and part of this is guaranteeing the real time nature of it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Whether you use a real-time OS or not, your servos should do something safe in the event that the control loop dies entirely. This safety system would also be helpful on the rare occasion your non-real-time OS skips more than a cycle. For example, on the Shadow Hand, the motors are halted if the control loop misses more than 20 cycles (20ms). I have never seen this happen though.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Added&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another way to think about it is this: What update rate does your servo system actually need? If it's a largish arm, and doesn't need super high performance, high speed positioning, then 500Hz might be sufficient. For driving around, 200Hz is probably sufficient. In both of these cases, if your loop is actually running at 1000Hz, then a late or missing cycle really is no problem at all, as long as your control algorithm takes into account the actual elapsed time between loops.&lt;/p&gt;&#xA;" OwnerUserId="40" LastEditorUserId="40" LastEditDate="2012-10-25T20:49:55.183" LastActivityDate="2012-10-25T20:49:55.183" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="131" PostTypeId="1" AcceptedAnswerId="133" CreationDate="2012-10-25T14:06:19.100" Score="2" ViewCount="853" Body="&lt;p&gt;I Have an ATmega16 mc which is master on the i2c and a ATMega8 mc which is slave on the i2c.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have connected the two mcs' sda and scl ports to each other alongside a pullup resistor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I want to read a register from the ATMega8 using the ATMega16. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is that I don't want to assign all the variables manually. Is there any libs or headers that will do this thing for me?&lt;/p&gt;&#xA;" OwnerUserId="21" LastEditorUserId="50" LastEditDate="2012-10-25T14:39:11.960" LastActivityDate="2012-10-26T07:36:48.440" Title="Connecting two microcontrollers using I2C" Tags="&lt;software&gt;&lt;microcontroller&gt;&lt;i2c&gt;" AnswerCount="3" CommentCount="4" ClosedDate="2012-10-26T07:48:04.523" ContentLicense="CC BY-SA 3.0" />
  <row Id="132" PostTypeId="2" ParentId="112" CreationDate="2012-10-25T15:29:23.513" Score="3" Body="&lt;p&gt;&lt;strong&gt;What to cut out is not always a simple matter&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One complication arises when the actuators actually need power in order to remain safe. For example: a back-drivable or compliant robot arm had picked up a heavy object, and is using motor power to hold the object in the air. If you kill the power, the weight of the object will bring the arms crashing down, and either breaking the object, the robot, or a person.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;One way to implement cut out&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the above case, rather than cutting actuator power, it might be wise to send a message to all actuators to go into a safe mode. Exactly what that means depends on the nature of the robot and the particular actuator. They might stop, or simply go into a lower power mode where they fall down slowly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Another way to implement cut out&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the &lt;a href=&quot;http://www.shadowrobot.com&quot; rel=&quot;nofollow&quot;&gt;Shadow Robot Hand&lt;/a&gt;, the sensing system, bus and actuators are all powered from the same 48v supply line. The sensors and actuators each have their own regulators, each with their own Unver-Voltage Lockout setting. The actuators cut out at 25v, while the sensors cut out at 9v. When an emergency stop happens, the power supply line is taken down to 18v, which causes the actuators' power supply to cut out, while maintaining the power to the sensors and communication bus.&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2012-10-25T15:29:23.513" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="133" PostTypeId="2" ParentId="131" CreationDate="2012-10-25T15:43:20.873" Score="1" Body="&lt;p&gt;I've not used the ATMega family, but have lots of experience of configuring many other devices - setting up the control registers for I2C is usually pretty straight forward, with appropriate reference to the datasheet/user-manual and will help you understand what's going on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For such tasks, a library is (a) inefficient (b) overkill and (c) doesn't help you learn. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know if there is one, but wouldn't recommend you use it, if there was...&lt;/p&gt;&#xA;" OwnerUserId="134" LastActivityDate="2012-10-25T15:43:20.873" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="134" PostTypeId="2" ParentId="106" CreationDate="2012-10-25T17:30:39.397" Score="24" Body="&lt;p&gt;There isn't a lot of information here. Let's fix the wheels as separated by distance $b$, and each wheel has orientation $\theta_i$ with respect to the line joining them.  Then assume each wheel can be independently driven with an angular velocity $v_i$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the wheels are independently driven, but fixed in direction, $\theta_1=\theta_2=90^\circ$, you have something like a differential drive (tank treads). &#xA;It's worth noting that, assuming the wheels do not slip perpandicular to their orientation, you can solve for the motion of the robot base in closed form given velocity commands which are fixed over a small time duration (as is usually the case with robots under software control). The iCreate is such a platform, as are the smaller pioneers, and the Husky by Clearpath.&#xA;Then the change in orientation of the base, labelled $\theta$ below, can be found in closed form.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/qr5uX.gif&quot; alt=&quot;...&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The usual model for these things, where $v_b$ is the base velocity and $\omega_b$ is the angular velocity of the base, is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$v_b = \frac{1}{2}\cdot(v_1+v_2)$$&#xA;$$\omega_b=\frac{1}{b}(v_2-v_1)$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a fixed time increment, $\delta t$, you can find the change in orientation, and linear distance traveled using these. Note that the robot travels along a circle in this time window. The distance along the circle is exactly $\delta t\cdot v_b$, and the radius of the circle is  $R=\frac{b}{2}\cdot\frac{v_1+v_2}{v_2-v_1}$.  That's enough to plug into these equations: &lt;a href=&quot;https://mathworld.wolfram.com/CircularSegment.html&quot; rel=&quot;noreferrer&quot;&gt;circular segments&lt;/a&gt; -- particularly the chord length equation, which describes the distance the robot displaces from its original location. We know $R$ and $\theta$, solve for $a$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So assuming the robot starts with orientation $0$, and position $(0,0)$, and moves along time window $\delta t$ with velocities $v_1$ (left wheel) and $v_2$ (right wheel), it's orientation will be: $$\theta_1=\frac{\delta t}{b}(v_2-v_1)$$ with position:&#xA;$$p_x=\cos\left(\frac{\theta_1}{2}\right)\cdot\left(2 R \sin\left(\frac{\theta_1}{2}\right)\right)$$&#xA;$$p_y=\sin\left(\frac{\theta_1}{2}\right)\cdot\left(2 R \sin\left(\frac{\theta_1}{2}\right)\right)$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that as $v_1\to v_2=v$ the limit is&#xA;$$p_x=\delta t \cdot v$$&#xA;$$p_y=0$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;as expected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt; why?.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Rearrange $p_x$ so that:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ p_x = cos \left( \frac{v_2-v_1}{2b} \right)&#xA;* 2 * \left( b\frac{v_1+v_2}{2(v_2-v1)} \right)&#xA;* sin\left( \frac{v_2-v_1}{2b} \right)&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ p_x = cos \left( \frac{v_2-v_1}{2b} \right)&#xA;* \frac{(v_2+v_1)}{2}* \frac{sin\left( \frac{v_2-v_1}{2b} \right)}&#xA;{\frac{v_2-v_1}{2b}}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now note that we have three limits as $v_2 \rightarrow v_1$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$cos \left( \frac{v_2-v_1}{2b} \right)\rightarrow 1$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ \frac{(v_2+v_1)}{2} \rightarrow v_1 == v_2$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ \frac{sin\left( \frac{v_2-v_1}{2b}\right)}{\frac{v_2-v_1}{2b}}&#xA; \rightarrow 1 \text{  (see sinc function)}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is covered all over the internet, but you might start here: &lt;a href=&quot;http://rossum.sourceforge.net/papers/DiffSteer/&quot; rel=&quot;noreferrer&quot;&gt;http://rossum.sourceforge.net/papers/DiffSteer/&lt;/a&gt; or here: &lt;a href=&quot;https://web.cecs.pdx.edu/~mperkows/CLASS_479/S2006/kinematics-mobot.pdf&quot; rel=&quot;noreferrer&quot;&gt;https://web.cecs.pdx.edu/~mperkows/CLASS_479/S2006/kinematics-mobot.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the wheels are not fixed in direction, as in you can vary the speed and orientation, it gets more complicated. In that sense, a robot can become essentially holonomic (it can move in arbitrary directions and orientations on the plane). However, I bet for fixed orientation, you end up with the same model.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are other models for two wheels, such as a bicycle model, which is easy to imagine as setting the velocities, and only varying one orientation.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's the best I can do for now.&lt;/p&gt;&#xA;" OwnerUserId="163" LastEditorUserId="18690" LastEditDate="2017-11-20T15:29:28.003" LastActivityDate="2017-11-20T15:29:28.003" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="135" PostTypeId="2" ParentId="128" CreationDate="2012-10-25T18:26:13.887" Score="2" Body="&lt;p&gt;Our company builds robots using FreeRTOS running on PIC microcontrollers.  For us, the main reasons to use FreeRTOS is the ease of rearranging priorities on tasks, handling multiple communication lines simultaneously, and easy communication between interrupt handlers and main tasks.  Microcontrollers are far cheaper than putting a full linux machine into each robot we produce as well.&lt;/p&gt;&#xA;" OwnerUserId="39" LastActivityDate="2012-10-25T18:26:13.887" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="137" PostTypeId="2" ParentId="23" CreationDate="2012-10-25T19:19:03.403" Score="2" Body="&lt;p&gt;Yes, you are thinking too far afield. This is an open research problem (especially where people are concerned). Don't even think about the DARPA grand challenge, that's way out of a single person's league. However, there are some good starting points I can recommend.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A labmate has had good success tracking people using a Kinect with OpenNI. The kinect has range information, which makes it better than pure vision or binocular vision. Typically a vision-based solution uses &lt;a href=&quot;http://en.wikipedia.org/wiki/Structure_from_motion&quot; rel=&quot;nofollow&quot;&gt;Structure From Motion&lt;/a&gt;. Because this can be terribly sensitive to moving scenes, vision is probably NOT the way to go for this task. A more reliable method is laser scanner for close-in obstacle avoidance. However, Vision-based &lt;a href=&quot;http://en.wikipedia.org/wiki/Simultaneous_localization_and_mapping&quot; rel=&quot;nofollow&quot;&gt;SLAM&lt;/a&gt; is possible, and can be implemented using the Robot Operating System.  The task becomes &lt;em&gt;significantly&lt;/em&gt; easier if you have detailed maps before you deploy. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Start with ROS, aka the &lt;a href=&quot;http://ros.org/wiki&quot; rel=&quot;nofollow&quot;&gt;Robot Operating System&lt;/a&gt;, it will be much more helpful than implementing these things yourself. I can assure you from personal experience.&lt;/p&gt;&#xA;" OwnerUserId="163" LastActivityDate="2012-10-25T19:19:03.403" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="138" PostTypeId="1" CreationDate="2012-10-25T20:43:48.660" Score="14" ViewCount="7374" Body="&lt;p&gt;A beginning graduate student in robotics asked me the areas of mathematics that he should brush up on (prerequisites) to begin a masters research program in robotics. What are some good materials/books that are indispensable for a research student? Which ones should we suggest in order that the student develops a solid foundation in robotics?&lt;/p&gt;&#xA;" OwnerUserId="166" LastEditorUserId="126" LastEditDate="2012-11-26T06:37:00.120" LastActivityDate="2019-06-17T18:35:33.560" Title="Mathematical prerequisites for beginning graduate student in robotics" Tags="&lt;research&gt;" AnswerCount="6" CommentCount="0" FavoriteCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="139" PostTypeId="2" ParentId="23" CreationDate="2012-10-25T20:44:47.153" Score="0" Body="&lt;p&gt;If what you are looking at is a research topic, not a ready-to-use solution, then maybe visual servoing techniques with occlusion handling, or path planning in the image, might be of some use. (Never tested, but know the names behind it: &lt;a href=&quot;http://www.irisa.fr/lagadic/visp/visp.html&quot; rel=&quot;nofollow&quot;&gt;http://www.irisa.fr/lagadic/visp/visp.html&lt;/a&gt;)&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2012-10-25T20:44:47.153" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="140" PostTypeId="2" ParentId="128" CreationDate="2012-10-25T20:45:14.690" Score="10" Body="&lt;p&gt;Remember that there's &lt;em&gt;Real Time&lt;/em&gt; and there's &lt;strong&gt;&lt;em&gt;Real Time&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Real-time_computing#Criteria_for_real-time_computing&quot;&gt;Hard Real time&lt;/a&gt; is difficult to achieve without hardware support or low level software support, but you often don't need everything to be &lt;em&gt;Hard Real Time&lt;/em&gt; capable. &lt;a href=&quot;http://en.wikipedia.org/wiki/Real-time_computing#Criteria_for_real-time_computing&quot;&gt;Soft &amp;amp; Firm Real Time&lt;/a&gt; response is much easier to achieve and is often more than adequate for many applications.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, different parts of a system can have very different &lt;em&gt;real time&lt;/em&gt; requirements. If you are running software PID loops, they really should have a &lt;em&gt;hard real time&lt;/em&gt; response (you really don't want to have to choose between soft tuning your PIDs or tuning them hard and having them occasionally go unstable, for instance). A vision system might have &lt;em&gt;firm real time&lt;/em&gt; response requirements, performance will degrade if you can't process the image in time for the next decision but it need not prevent the system running, in this case if you can't process it in time you are better off throwing away the partial results and not loosing time starting analysis on the next frame. Finally your overall planning and coordination (probably the most &lt;em&gt;complex&lt;/em&gt; part of your robotic system) can often remain firmly in the domain of &lt;em&gt;soft real time&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even in the realm of Windows PCs you can get &lt;em&gt;hard real time&lt;/em&gt; performance, you just need the right software with the right hooks into the kernel. &lt;a href=&quot;http://en.wikipedia.org/wiki/Beckhoff&quot;&gt;Beckhoff&lt;/a&gt;'s TwinCat soft PLC quite happily ran a high scan rate PLC by slicing half of a Pentium's machine cycles, giving the other half to Windows NT, and this was over a decade ago. Even modern control systems like some options in &lt;a href=&quot;http://www.aerotech.com/product-catalog/motion-controllers/automation-3200.aspx&quot;&gt;Aerotech's A3200 range&lt;/a&gt; do the grunt work on the host PC, with the low level kernel taking as much CPU time as it needs for the &lt;em&gt;hard real time&lt;/em&gt; requirements and leaving the rest of the CPU cycles for Windows 7 to use!&lt;/p&gt;&#xA;" OwnerUserId="37" LastActivityDate="2012-10-25T20:45:14.690" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="141" PostTypeId="2" ParentId="138" CreationDate="2012-10-25T20:57:00.993" Score="1" Body="&lt;p&gt;A good approach would just be to research robotics programs and see what books they have for different classes that could help build a foundation.  Personally I've used this book for a robotics/mechatronics class but it was for undergrad&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/0071254072&quot; rel=&quot;nofollow&quot;&gt;http://www.amazon.com/Introduction-Mechatronics-Measurement-Systems-Alciatore/dp/0071254072&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to build more than a foundation, it would be wise to look up top schools in robotics and find out what books they use.  Most would be in syllabus that can be found by searching the school, class title and maybe a current professors name.&lt;/p&gt;&#xA;" OwnerUserId="99" LastActivityDate="2012-10-25T20:57:00.993" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="142" PostTypeId="1" AcceptedAnswerId="152" CreationDate="2012-10-25T21:02:12.810" Score="6" ViewCount="3492" Body="&lt;p&gt;What kind of sensors and algorithms are the mobile robots of &lt;a href=&quot;http://www.kivasystems.com/&quot;&gt;Kiva Systems&lt;/a&gt; equipped with? &lt;/p&gt;&#xA;" OwnerUserId="166" LastActivityDate="2017-06-14T11:01:32.237" Title="Technology behind Kiva Systems mobile robots" Tags="&lt;mobile-robot&gt;&lt;industrial-robot&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="143" PostTypeId="1" CreationDate="2012-10-25T21:12:55.900" Score="11" ViewCount="11347" Body="&lt;p&gt;I have a motor which drives a string connected to a load cell. I would like to implement a closed loop controller to control the load applied by the motor to the string.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/wWerj.png&quot; alt=&quot;Motor driving string connected to a load cell&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How do I go about determining the required loop frequency in order to create a stable control system? Is it something like the Nyquist frequency, where the loop speed should be at least twice the highest frequency inherent in the mechanical system?&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2013-07-06T00:49:22.970" Title="How do I calculate the required loop frequency for a servo controller?" Tags="&lt;control&gt;&lt;motor&gt;&lt;force&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="144" PostTypeId="2" ParentId="138" CreationDate="2012-10-25T21:56:57.673" Score="6" Body="&lt;p&gt;This depends heavily on what the research topic will be on. For example, is it:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;image processing, machine vision...&lt;/li&gt;&#xA;&lt;li&gt;SLAM&lt;/li&gt;&#xA;&lt;li&gt;path planning&lt;/li&gt;&#xA;&lt;li&gt;control&lt;/li&gt;&#xA;&lt;li&gt;robotic manipulators?&lt;/li&gt;&#xA;&lt;li&gt;...&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Without knowing the area of research, it is not simple to know what mathematics will be required. Having said that, any mathematics required is taught during undergraduate studies anyways, so there are no real requirements. Any domain-specific mathematics generally just needs basic knowledge of matrix algebra to build on top of.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some programming experience is likely to be required as well.&lt;/p&gt;&#xA;" OwnerUserId="145" LastActivityDate="2012-10-25T21:56:57.673" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="145" PostTypeId="2" ParentId="131" CreationDate="2012-10-25T22:07:54.153" Score="2" Body="&lt;p&gt;AVR publishes a set of guides for every microcontroller they make. See &lt;a href=&quot;http://www.atmel.com/devices/atmega16.aspx?tab=documents&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.atmel.com/devices/atmega16.aspx?tab=documents&lt;/a&gt;, and obtain the &lt;strong&gt;ATmega16(L) Complete&lt;/strong&gt; document.&lt;/p&gt;&#xA;&lt;p&gt;You will find a chapter dedicated to I2C (it is named &lt;strong&gt;2-wire Serial Interface (TWI)&lt;/strong&gt;). While there may be libraries, the general practice is to set the appropriate registers manually.&lt;/p&gt;&#xA;&lt;p&gt;Each register is given a name (all caps, like a constant) - an 8-bit integer you can set in C. Specific bits will be used to set one microcontroller as a master or slave. For example, the following registers are relevant to the two-wire interface.&lt;/p&gt;&#xA;&lt;h1&gt;TWI Register Description&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;TWI Bit Rate Register – TWBR&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Bits 7...0 – TWI Bit Rate Register&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;TWI Control Register – TWCR&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Bit 7 – TWINT: TWI Interrupt Flag&lt;/li&gt;&#xA;&lt;li&gt;Bit 6 – TWEA: TWI Enable Acknowledge Bit&lt;/li&gt;&#xA;&lt;li&gt;Bit 5 – TWSTA: TWI START Condition Bit&lt;/li&gt;&#xA;&lt;li&gt;Bit 4 – TWSTO: TWI STOP Condition Bit&lt;/li&gt;&#xA;&lt;li&gt;Bit 3 – TWWC: TWI Write Collision Flag&lt;/li&gt;&#xA;&lt;li&gt;Bit 2 – TWEN: TWI Enable Bit&lt;/li&gt;&#xA;&lt;li&gt;Bit 1 – Res: Reserved Bit&lt;/li&gt;&#xA;&lt;li&gt;Bit 0 – TWIE: TWI Interrupt Enable&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;TWI Status Register – TWSR&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;TWI Data Register – TWDR&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;TWI (Slave) Address Register – TWAR&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Note that you set certain bits to specify bit rate, the data to transfer, the address a slave responds to, and when to start/stop transfers (the control register). You can also obtain the status of transmissions from the status register.&lt;/p&gt;&#xA;&lt;p&gt;The document will also walk you through the steps to use it:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/rS9Ns.png&quot; alt=&quot;enter image description here&quot; /&gt;&#xA;&lt;em&gt;Obtained from the AVR &amp;quot;ATmega16(L) Complete&amp;quot; document&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="145" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2012-10-25T22:07:54.153" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="146" PostTypeId="1" AcceptedAnswerId="170" CreationDate="2012-10-26T00:30:03.880" Score="9" ViewCount="1951" Body="&lt;p&gt;For the 3d printer &lt;a href=&quot;http://www.reprap.org/wiki/Prusa_Mendel_Assembly&quot;&gt;RepRap Prusa&lt;/a&gt; there are several rails (smooth rods) that guide the printer head on the different axises. The printer head uses several linear bearings to glide along the rails. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There isn't any specification on what kind of material would be best suited for this purpose with the linear bearings. My first assumption would be for stainless steel because it won't corrode (rust) on the surface, but I'm not sure if this is true for all printers (whether they are 3D printers or not) as a different material may allow the linear bearings to glide more easily. Aluminum would have been my second choice but I have the same reservations of which grade would be least resistant. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This &lt;a href=&quot;http://www.lm76.com/linear_shaft_selector.htm&quot;&gt;resource&lt;/a&gt; has some limited information but does not help with which would be best suited for this particular application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What material is best suited for this purpose?&lt;/p&gt;&#xA;" OwnerUserId="168" LastEditorUserId="350" LastEditDate="2012-11-30T14:11:53.523" LastActivityDate="2020-02-20T01:30:46.133" Title="What rail material is best used for linear bearings?" Tags="&lt;reprap&gt;&lt;3d-printing&gt;&lt;linear-bearing&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="147" PostTypeId="2" ParentId="146" CreationDate="2012-10-26T00:39:26.080" Score="1" Body="&lt;p&gt;Well, I got proper industrial linear bearings recently, along with stainless steel rails.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The properties of interest is that the material is smooth and hard to minimise friction. In fact, the stainless steel rails I obtained was both hardened and polished.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Aluminium could be dented by stainless steel bearings affecting performance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Having said this, for a printer, which has very little weight/force, materials of differing hardness is probably fine. If you just want to reduce friction, just get polished material, or else polish it yourself (although stainless steel would probably maintain smoothness better since it is harder).&lt;/p&gt;&#xA;" OwnerUserId="145" LastActivityDate="2012-10-26T00:39:26.080" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="148" PostTypeId="1" AcceptedAnswerId="181" CreationDate="2012-10-26T04:48:02.503" Score="7" ViewCount="494" Body="&lt;p&gt;I am not sure if this has been tried before but I am trying to use &lt;a href=&quot;http://en.wikipedia.org/wiki/Kinect&quot; rel=&quot;nofollow noreferrer&quot;&gt;Kinect&lt;/a&gt; and detect gestures made by the &lt;a href=&quot;http://en.wikipedia.org/wiki/Nao_%28robot%29&quot; rel=&quot;nofollow noreferrer&quot;&gt;Nao robot&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have made a Kinect application, &lt;a href=&quot;http://youtu.be/v8SumS-I1qo&quot; rel=&quot;nofollow noreferrer&quot;&gt;a gesture based picture viewer&lt;/a&gt; and it detects humans fine(Obviously it does!) What I wanted to try was (lazy as I am), to see if I could use some (say, voice) command to tell the Nao to do a Swipe Right gesture and have my application identify that gesture. The Nao can easily identify my command and do some gesture. The problem however is, when I put the Nao in front of the Kinect sensor, the Kinect does not track it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I want to know is, are there some basics behind Kinect's human body motion tracking that essentially fails when a robot is placed in front of it instead of a human?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS: I have kept the Nao at the right distance from the sensor. I have also checked if the entire robot is in the field of view of the sensor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: This has been posted &lt;a href=&quot;https://stackoverflow.com/q/13068945/1473556&quot;&gt;on stackoverflow&lt;/a&gt; and &lt;a href=&quot;http://social.msdn.microsoft.com/Forums/en-US/kinectsdk/thread/723a1072-f637-466f-a721-196984e7763a/#723a1072-f637-466f-a721-196984e7763a&quot; rel=&quot;nofollow noreferrer&quot;&gt;on msdn&lt;/a&gt; by me so as to target a large audience as this problem has not been encountered by anyone in the past.&lt;/p&gt;&#xA;" OwnerUserId="117" LastEditorUserId="-1" LastEditDate="2017-05-23T12:37:11.430" LastActivityDate="2012-10-27T21:46:59.970" Title="Detect Nao robot in Kinect" Tags="&lt;kinect&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="150" PostTypeId="1" AcceptedAnswerId="168" CreationDate="2012-10-26T07:23:58.103" Score="38" ViewCount="50598" Body="&lt;p&gt;Whenever building an aquatic bot, we always have to take care to prevent leakages, for obvious reasons. Now, holes for wires can be made watertight easily--but what about motors? We can easily seal the casing in place (and fill in any holes in the casing), but the part where the axle meets the casing is still left unprotected. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/xahVT.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Water leaking into the motor is still quite bad. I doubt there's any way to seal up this area properly, since any solid seal will not let the axle move, and any liquid seal (or something like grease) will rub off eventually.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was thinking of putting a second casing around the motor, maybe with a custom rubber orifice for the shaft. Something like (forgive the bad drawing, not used to GIMP):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/z0E4K.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This would probably stop leakage, but would reduce the torque/rpm significantly via friction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, how does one prevent water from leaking into a motor without significantly affecting the motor's performance?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(To clarify, I don't want to buy a special underwater motor, I'd prefer a way to make my own motors watertight)&lt;/p&gt;&#xA;" OwnerUserId="126" LastEditorUserId="350" LastEditDate="2012-11-30T14:23:20.117" LastActivityDate="2019-12-16T15:02:26.847" Title="Preventing leaks in motor shafts for underwater bots" Tags="&lt;motor&gt;&lt;underwater&gt;&lt;auv&gt;&lt;protection&gt;" AnswerCount="11" CommentCount="1" FavoriteCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="151" PostTypeId="2" ParentId="131" CreationDate="2012-10-26T07:36:48.440" Score="3" Body="&lt;p&gt;It's been a while since I've used the AVR, but there where two libraries which would do what you are looking for. Unfortunately ATMEL doesn't provide proper firmware libraries themselves (as e.g. STM does).&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.procyonengineering.com/embedded/avr/avrlib/&quot; rel=&quot;nofollow&quot;&gt;Procyon AVRlib&lt;/a&gt; is quite outdated, but also very lightweight. You can just use the parts that you are interested in.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.nongnu.org/avr-libc/&quot; rel=&quot;nofollow&quot;&gt;AVR Libc&lt;/a&gt; is another library which is slightly more recent and in my experience quite comprehensive. I think it is actually bundled with a lot of toolchains.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="127" LastActivityDate="2012-10-26T07:36:48.440" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="152" PostTypeId="2" ParentId="142" CreationDate="2012-10-26T08:43:24.673" Score="7" Body="&lt;p&gt;Kiva uses a multi-agent system to control its fleet of robots and movable shells. Their website provides a &lt;a href=&quot;http://www.kivasystems.com/solutions/software/&quot; rel=&quot;noreferrer&quot;&gt;high-level overview of their system architecture&lt;/a&gt; and there's also a &lt;a href=&quot;http://www.slideshare.net/devbp/kiva-system&quot; rel=&quot;noreferrer&quot;&gt;presentation&lt;/a&gt; online that goes into more detail. The A* algorithm is used for wayfinding and a heuristic algorithm decides on the order of things to pick up (travelling salesman problem) and which shelves to move where (more frequently used shelves are put nearer the packing stations to reduce travel time).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to &lt;a href=&quot;https://www.aaai.org/ojs/index.php/aimagazine/article/viewArticle/2082&quot; rel=&quot;noreferrer&quot;&gt;this paper&lt;/a&gt;, the whole system is implemented in Java and MySQL.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I couldn't find any direct quote about the sensors in their mobile platforms, but from the picture I'd be guessing a number of sonars and IRs&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/MQhwO.png&quot; alt=&quot;Kiva Systems Robot&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="131" LastActivityDate="2012-10-26T08:43:24.673" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="153" PostTypeId="2" ParentId="138" CreationDate="2012-10-26T08:52:45.753" Score="4" Body="&lt;p&gt;Since robotics is a combination of Electrical, Mechanical and Software Engineering the maths for those fields is obviously relevant. On top of that I would argue that in robotics it is very helpful to have good knowledge of linear algebra, probability and control theory. A good grasp of mechanics obviously helps as well. &lt;/p&gt;&#xA;" OwnerUserId="127" LastActivityDate="2012-10-26T08:52:45.753" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="154" PostTypeId="1" AcceptedAnswerId="248" CreationDate="2012-10-26T09:45:37.170" Score="12" ViewCount="9832" Body="&lt;p&gt;Often we use microcontrollers to do things in our robots, but need to make some calculations in decimal. Using floating point variables is &lt;strong&gt;very&lt;/strong&gt; slow, because a software floating point library is automatically included (unless you have a high-end microcontroller). Therefore, we generally use fixed point arithmetic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Whenever I do this, I just use an integer, and remember where the decimal place is. However, it does take some care to ensure that everything is consistent, especially when calculations involve variables where the decimal point is in a different place.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have implemented a fixed point atan2 function, but because I was trying to squeeze every last drop of limited precision (16 bits), I would often change the definition of where the decimal point is, and it would change as I tweaked it. In addition, I would have some constants, as a quasi look-up table, which themselves have an implied decimal point somewhere.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to know if there is a better way. Is there a library, or set of macros, that can simplify the use of fixed point variables, making multiplication and division between mixed variables easier, and allowing declaration of decimal numbers or constant expressions, but automatically converting to the desired fixed point representation at compile time?&lt;/p&gt;&#xA;" OwnerUserId="145" LastActivityDate="2019-03-11T04:14:39.097" Title="Fixed point arithmetic on microcontrollers" Tags="&lt;microcontroller&gt;&lt;c&gt;" AnswerCount="4" CommentCount="12" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="155" PostTypeId="1" AcceptedAnswerId="157" CreationDate="2012-10-26T09:58:11.633" Score="16" ViewCount="6780" Body="&lt;p&gt;At our lab, we have a several &quot;Kurt&quot; type robots (about the size of a Pioneer, six wheels, differential drive). The built-in gyroscopes are by now really outdated; the main problem is that the gyroscopes have a large drift that increases as the gyro heats up (the error is up to 3°/s). We mainly use the IMU (inertial measurement unit) to get initial pose estimates that are later corrected by some localization algorithm, but even doing that the large initial pose error caused by the IMU is often annoying.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We've temporarily used an Android phone (Galaxy S2) as a replacement IMU, and the results are so much better compared to the old IMUs. However, I don't like depending on a WiFi connection between IMU and the control computer (a laptop running ROS/Ubuntu), so we're looking to buy a new IMU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What IMU should we choose? What criteria are important to consider for our application?&lt;/p&gt;&#xA;" OwnerUserId="132" LastEditorDisplayName="user10072" LastEditDate="2017-05-18T15:46:06.047" LastActivityDate="2017-05-18T15:46:06.047" Title="How to choose a good IMU for a wheeled robot?" Tags="&lt;ros&gt;&lt;imu&gt;&lt;odometry&gt;&lt;gyroscope&gt;&lt;ugv&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="156" PostTypeId="2" ParentId="154" CreationDate="2012-10-26T10:03:07.797" Score="0" Body="&lt;p&gt;If you use an integer to remember where the &quot;point&quot; is, they are &lt;em&gt;kind of&lt;/em&gt; using floating point arithmetic. Fixed point, really has &lt;strong&gt;fixed&lt;/strong&gt; point.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suspect that for every function there would be a different &quot;preprocessing&quot; to make your &quot;floating&quot; point number suitable for the function. For example, for &lt;code&gt;atan&lt;/code&gt;, you would want to shift the number so that it's decimal point matches that of your fixed-point function. For &lt;code&gt;cos&lt;/code&gt;, you may want to get it in the range of $\pi$ and $-\pi$ and then shift it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This depends on the range of values your application needs, but you may want to completely move to a fixed point representation. That is, for example, instead of keeping a number like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;struct num&#xA;{&#xA;    uint16_t number;&#xA;    uint16_t decimal_point;&#xA;};&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where &lt;code&gt;number&lt;/code&gt; is the whole number and &lt;code&gt;decimal_point&lt;/code&gt; says where the decimal point is, you can store it like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;struct num&#xA;{&#xA;    uint16_t integer;&#xA;    uint16_t fraction;&#xA;};&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where the whole number is &lt;code&gt;integer.fraction&lt;/code&gt;, which has the same memory usage, higher range of values and in general simpler to use.&lt;/p&gt;&#xA;" OwnerUserId="158" LastActivityDate="2012-10-26T10:03:07.797" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="157" PostTypeId="2" ParentId="155" CreationDate="2012-10-26T10:31:24.353" Score="6" Body="&lt;p&gt;I have used a &lt;a href=&quot;http://www.vectornav.com/products/vn100-rug&quot;&gt;VN-100&lt;/a&gt; IMU to replace an old one (which could be quite inaccurate).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My experience with the VN-100 is quite good. It includes an internal Kalman filter to estimate pitch, roll and yaw (using magnetic sensors), and you can tune the gains on the Kalman filter yourself. How they should be tuned will depend on your application (eg. vibration, usual rates of rotation and acceleration).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My experience is that it is easily within 1 degree accuracy, and if tuned well, can be almost 0.1 degree accuracy. Having said that, it requires the use of the active tuning parameter (depending on how far acceleration differs from gravity). While I have looked closely at the angular position data, I have not specifically investigated the accuracy of the acceleration or angular rate data (although I have some data, but I used encoders as a ground truth, and differentiation makes the encoder data too noisy to compare).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Things you might want to consider:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It is definitely a bonus to be able to tune the Kalman filter gains. If the gains are not well tuned, even good raw data can result in inferior filtered data.&lt;/li&gt;&#xA;&lt;li&gt;Other than that, sampling time may be important (if you want samples at a high frequency - the VN-100 has a maximum frequency of 200Hz).&lt;/li&gt;&#xA;&lt;li&gt;Consider the communication protocol (the VN-100 supports RS-232, or SPI with the SMD package). With RS-232, you will want to consider the maximum rate available on your DAQ system, eg. 460kHz baud rate is required to get data at 200Hz, otherwise you will not get all the data at such a high frequency&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Size&lt;/strong&gt;? Our old IMU was quite large (5cm), but the VN-100 is tiny.&lt;/li&gt;&#xA;&lt;li&gt;Magnetic sensors - if you want yaw position data, but be aware that motors in close proximity (depends on the size of motors, but perhaps within 10cm or more) will stop them working.&lt;/li&gt;&#xA;&lt;li&gt;Kalman filter - unless you want to process the data yourself&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="145" LastActivityDate="2012-10-26T10:31:24.353" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="158" PostTypeId="5" CreationDate="2012-10-26T10:55:06.860" Score="0" Body="&lt;p&gt;ROS (Robot Operating System) is a free, open-source robot software framework for robot software development, providing operating system-like functionality on a heterogeneous computer cluster.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ROS provides standard operating system services such as hardware abstraction, low-level device control, implementation of commonly used functionality, message-passing between processes, and package management.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was developed by &lt;a href=&quot;http://willowgarage.com&quot; rel=&quot;nofollow&quot;&gt;Willow Garage&lt;/a&gt; and is licensed under the BSD license.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Links&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.ros.org/wiki/&quot; rel=&quot;nofollow&quot;&gt;Website (API documentation)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Robot_Operating_System&quot; rel=&quot;nofollow&quot;&gt;Wikipedia Article&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="131" LastEditorUserId="40" LastEditDate="2013-09-02T04:38:24.530" LastActivityDate="2013-09-02T04:38:24.530" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="159" PostTypeId="4" CreationDate="2012-10-26T10:55:06.860" Score="0" Body="ROS (Robot Operating System) is a free, open-source robot software framework developed by Willow Garage." OwnerUserId="131" LastEditorUserId="18" LastEditDate="2012-10-26T15:09:54.797" LastActivityDate="2012-10-26T15:09:54.797" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="160" PostTypeId="2" ParentId="155" CreationDate="2012-10-26T11:30:21.933" Score="6" Body="&lt;p&gt;I assume that you are looking for an IMU that provides you with an orientation estimation. The complete package is usually called an Attitude and Heading Reference System (AHRS). What really is the most defining criteria is your budget. Getting above 3 degrees/s should be within reach though. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;We have been working with the &lt;a href=&quot;http://www.xsens.com/en/general/mti&quot; rel=&quot;noreferrer&quot;&gt;XSens MTi&lt;/a&gt; and had good enough results for navigation of ground vehicles. They have a new line out, which has improved on the accuracy quite a bit. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Budget options are also available, &lt;a href=&quot;https://www.sparkfun.com/products/11028&quot; rel=&quot;noreferrer&quot;&gt;this one&lt;/a&gt; looks quite promising as it is a single chip solution. There is also an &lt;a href=&quot;https://www.sparkfun.com/pages/accel_gyro_guide&quot; rel=&quot;noreferrer&quot;&gt;IMU buyers guide&lt;/a&gt; at Sparkfun. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Usually pitch and roll are fine with most IMUs for ground vehicles, as the gravity vector can be used to compensate the drift. Not so with the yaw axis, which is often a problem even when compensated with a magnetometer. For that reason we often use a single &lt;a href=&quot;http://www.kvh.com/dsp3000comm&quot; rel=&quot;noreferrer&quot;&gt;fibre optic gyro&lt;/a&gt; to minimize the heading drift.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="127" LastActivityDate="2012-10-26T11:30:21.933" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="161" PostTypeId="2" ParentId="113" CreationDate="2012-10-26T11:49:48.540" Score="8" Body="&lt;p&gt;This subject is covered quite nicely in the &lt;a href=&quot;http://www.probabilistic-robotics.org/&quot;&gt;Probabilistic Robotics&lt;/a&gt; book by Thrun et. al. I don't have a direct reference, but there are some of his papers (such as &lt;a href=&quot;http://www.cs.cmu.edu/~thrun/papers/thrun.robust-mcl.ps.gz&quot;&gt;Robust Monte Carlo Localization for Mobile Robots&lt;/a&gt;, &lt;a href=&quot;http://www.cs.cmu.edu/~thrun/papers/thrun.robust-mcl.pdf&quot;&gt;pdf&lt;/a&gt;) essentially include the same information. Usually what is used is a mixed error model, where the probability density function consists of different parts&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A Gaussian error around the true distance reading&lt;/li&gt;&#xA;&lt;li&gt;A part which accounts for false positives like dynamic obstacles and so on. This is larger with smaller distances.&lt;/li&gt;&#xA;&lt;li&gt;A constant part which accounts for false negative readings, where the sensor gives an out of range reading.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The model needs to be fitted to your sensor and application.&lt;/p&gt;&#xA;" OwnerUserId="127" LastEditorUserId="37" LastEditDate="2012-10-27T17:29:48.033" LastActivityDate="2012-10-27T17:29:48.033" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="162" PostTypeId="2" ParentId="154" CreationDate="2012-10-26T13:44:35.147" Score="1" Body="&lt;p&gt;There are a number of implementations (no libraries that I'm immediately aware of) of &lt;a href=&quot;http://en.wikipedia.org/wiki/Binary_scaling&quot; rel=&quot;nofollow&quot;&gt;Binary Scaling&lt;/a&gt; (aka B-scaling)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this, you keep a mental note (or even better, document the code...) of where the decimal point is, using shifts to move the decimal point up or down.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've used B-scaling in assembler on defence projects, on even the smallest CPUs so can vouch for its suitability for anything else...&lt;/p&gt;&#xA;" OwnerUserId="134" LastActivityDate="2012-10-26T13:44:35.147" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="163" PostTypeId="2" ParentId="154" CreationDate="2012-10-26T14:17:58.907" Score="2" Body="&lt;p&gt;I've used the &lt;a href=&quot;http://www.ti.com/tool/sprc542&quot; rel=&quot;nofollow&quot;&gt;TI IQMath Library&lt;/a&gt; to implement virtual floating-point on their fixed-point DSPs.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Texas Instruments TMS320C28x IQmath Library is collection of highly&#xA;  optimized and high  precision mathematical functions for C/C++&#xA;  programmers to seamlessly port a floating-point  algorithm into fixed&#xA;  point code on TMS320C28x devices. These routines are typically used in&#xA;  computationally intensive real-time applications where optimal&#xA;  execution speed and high  accuracy is critical. By using these&#xA;  routines you can achieve execution speeds considerable  faster than&#xA;  equivalent code written in standard ANSI C language. In addition, by&#xA;  providing readyto-use high precision functions, TI IQmath library can&#xA;  shorten significantly your DSP application development time.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That uses some TI specific stuff but I've also used that code as a base to implement virtual floating-point math on other microcontrollers. It takes a bit of work to port but it's a lot easier than starting from scratch.&lt;/p&gt;&#xA;" OwnerUserId="142" LastEditorUserId="142" LastEditDate="2012-11-08T13:03:52.193" LastActivityDate="2012-11-08T13:03:52.193" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="164" PostTypeId="2" ParentId="143" CreationDate="2012-10-26T15:38:04.407" Score="4" Body="&lt;p&gt;The loop frequency is a parameter that needs to be tuned just like your proportional, integral, and/or derivative terms. Varying it has a similar affect on your output as varying your other parameters. Too low a frequency and you'll never reach your desired steady state. Too high and the output will oscillate.&lt;/p&gt;&#xA;&lt;p&gt;To determine the optimal loop frequency, you will first need to construct &lt;a href=&quot;https://controls.engin.umich.edu/wiki/index.php/PID_Frequency_Response_w/_Bode_Plots&quot; rel=&quot;noreferrer&quot;&gt;Bode plots&lt;/a&gt; from real world test or simulation data:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Bode plots concisely display all relevant frequency input and output&#xA;information on two plots: amplitude ratio as a functions of frequency&#xA;and phase shift as a function of frequency. The amplitude ratio plot&#xA;is a log-log plot while the phase angle plot is a semilog (or&#xA;log-linear) plot.&lt;/p&gt;&#xA;&lt;p&gt;To construct a Bode plot, an engineer would have&#xA;empirical data showing input and output values that vary as sinusoidal&#xA;functions of time. For instance, there might be inlet temperature data&#xA;that varies sinusoidally and the outlet temperature data that also&#xA;varies sinusoidally.&lt;/p&gt;&#xA;&lt;p&gt;The amplitude ratio, AR, is the ratio of the amplitude of the output&#xA;sinusoidal curve divided by the amplitude of the input sinusoidal&#xA;curve.&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$AR = \dfrac{outputamplitude}{inputamplitude}$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;To find the phase shift, the periods of the input and output sine&#xA;curves need to be found. Recall that the period, P, is the length of&#xA;time from one peak to the next.&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$P = \dfrac{1}{f} = \dfrac{2\pi}{\omega}$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$f = frequency$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$\omega = frequency(rad/sec)$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/p5iqK.jpg&quot; alt=&quot;AR vs. freq&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/reXBG.jpg&quot; alt=&quot;phase vs. freq&quot; /&gt;&lt;/p&gt;&#xA;&lt;h1&gt;Rules of Thumb when analyzing Bode plots&lt;/h1&gt;&#xA;&lt;p&gt;Generally speaking, a gain change shifts the amplitude ratio up or&#xA;down, but does not affect the phase angle. A change in the time delay&#xA;affects the phase angle, but not the amplitude ratio. For example, an&#xA;increase in the time delay makes the phase shift more negative for any&#xA;given frequency. A change in the time constant changes both the&#xA;amplitude ratio and the phase angle. For example, an increase in the&#xA;time constant will decrease the amplitude ratio and make the phase lag&#xA;more negative at any given frequency.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Then you will need to determine the &lt;a href=&quot;http://www.goddardconsulting.ca/pid-control.html&quot; rel=&quot;noreferrer&quot;&gt;cross-over frequency&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The proportional term moves the magnitude of the frequency response of&#xA;the open loop up or down and hence is used to set the cross-over&#xA;frequency of the open loop. The cross-over frequency is the frequency&#xA;at which the magnitude has a gain of 1 (or 0dB). This frequency is&#xA;important as it is closely related to bandwidth of the closed loop&#xA;response.&lt;/p&gt;&#xA;&lt;p&gt;In an ideal system the proportional gain could be made (almost)&#xA;infinitely large leading to an infinitely fast, yet still stable,&#xA;closed loop. In practice that is not the case. Rather, two design&#xA;rules of thumb come into play.&lt;/p&gt;&#xA;&lt;p&gt;Firstly the sample rate of the digital hardware on which the&#xA;controller is going to be executed needs to be considered. &lt;strong&gt;A typical&#xA;rule of thumb is that the cross-over frequency should be set to be at&#xA;least 10 times lower than the sample rate of the controller.&lt;/strong&gt;&#xA;Conceptually this ensures that the controller is running at a fast&#xA;enough rate that it can adequately handle changes in the signal being&#xA;controlled.&lt;/p&gt;&#xA;&lt;p&gt;The second rule of thumb is related to the slope of the frequency&#xA;response at the cross-over frequency. If the roll-off of the open-loop&#xA;magnitude response at cross-over can be made to be close to&#xA;-20dB/decade then the closed-loop bandwidth can be expected to be close to the cross-over frequency. Note that the integral and&#xA;derivative terms, not just the proportional term, are used to control&#xA;the slope at cross-over.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/yU7CW.jpg&quot; alt=&quot;bode cross-over graph&quot; /&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;em&gt;(emphasis mine)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;So the optimal control loop frequency should be around 10 times that of the cross-over frequency of your system's phase delay which can be obtained through empirical test data or, ideally, computer simulation.&lt;/p&gt;&#xA;" OwnerUserId="142" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2012-10-26T15:38:04.407" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="165" PostTypeId="2" ParentId="119" CreationDate="2012-10-26T15:39:58.707" Score="2" Body="&lt;p&gt;Just to add a little to &lt;a href=&quot;https://robotics.stackexchange.com/a/120/37&quot;&gt;ronalchn's excellent answer&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Changing the weight distribution in the robot in a way that doesn't change the position of the centre of mass will affect the &lt;a href=&quot;http://en.wikipedia.org/wiki/Moment_of_inertia&quot; rel=&quot;nofollow noreferrer&quot;&gt;Moment of Inertia&lt;/a&gt;, which in turn will affect the robot's ability to accelerate its rate of rotation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For most robots that trundle along, this is unlikely to be a problem. However, I could imagine that for an &lt;em&gt;extremely&lt;/em&gt; dynamic robot, that travels very quickly and takes tight turns, being able to rotate its body rapidly might be an advantage, and might even be able to save itself from tipping in some extreme cases.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore concentrating the mass near the centre would be best for this type of robot.&lt;/p&gt;&#xA;" OwnerUserId="40" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2012-10-26T16:19:50.753" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="166" PostTypeId="2" ParentId="138" CreationDate="2012-10-26T16:55:14.853" Score="13" Body="&lt;p&gt;Other answers are correct: It depends on where you are focusing, and what your topic will be. However, there are some common themes. I would say that a minor in mathematics from a decent university should cover the bases.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would strongly recommend the following, based on my experience:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Linear Algebra, at least one or two semesters. Plan on taking refresher courses and specializing if necessary. Because robots operate in the world, and the world is defined by coordinate frames, knowing something about matrix multiplication, inverses, rank, affine and projective transformations, etc is extremely helpful. &lt;/li&gt;&#xA;&lt;li&gt;Calculus, at least 3 semesters.&lt;/li&gt;&#xA;&lt;li&gt;Some numerical analysis, because robots use computers.&lt;/li&gt;&#xA;&lt;li&gt;Probabilities and Statistics, at least 1 semester, though this is becoming increasingly important&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;For my subfield (Algorithmic Robotics), the following things are very helpful:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Algorithms and Data Structures, at least 2 semesters&lt;/li&gt;&#xA;&lt;li&gt;Formal Theory of Computation (Hardness and mappings of problems), at least one semester&lt;/li&gt;&#xA;&lt;li&gt;Matrix Theory, (another semester of a specialized linear algebra)&lt;/li&gt;&#xA;&lt;li&gt;Discrete Math (graphs, counting and enumueration), at least 1 semester, &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="163" LastEditorUserId="163" LastEditDate="2012-10-26T17:36:34.550" LastActivityDate="2012-10-26T17:36:34.550" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="167" PostTypeId="1" AcceptedAnswerId="174" CreationDate="2012-10-26T19:11:31.040" Score="72" ViewCount="290222" Body="&lt;p&gt;Tuning controller gains can be difficult, what &lt;strong&gt;general&lt;/strong&gt; strategies work well to get a stable system that converges to the right solution?&lt;/p&gt;&#xA;" OwnerUserId="73" LastEditorUserId="350" LastEditDate="2012-11-30T14:32:38.397" LastActivityDate="2019-04-20T20:40:59.950" Title="What are good strategies for tuning PID loops?" Tags="&lt;control&gt;&lt;pid&gt;&lt;tuning&gt;" AnswerCount="9" CommentCount="2" FavoriteCount="73" ContentLicense="CC BY-SA 3.0" />
  <row Id="168" PostTypeId="2" ParentId="150" CreationDate="2012-10-26T21:12:04.797" Score="22" Body="&lt;p&gt;I'm not sure if an 'aquabot' is a fully submersible vehicle, or a surface one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it's a surface vehicle, then you just need to look at RC boats. They've got this solved pretty well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/W7zXO.gif&quot; alt=&quot;Boat propeller shaft&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The seal that prevents water entering the boat is called a stuffing box (4 on the diagram). It's simply a tube stuffed with grease. The grease prevents any water leaking into the boat between the tube and the propeller shaft. Usually there's about a 1mm or so gap between the shaft and the inside of the tube, so that it can hold plenty of grease. The ends of the tube have loose bushings fitted which hardly contribute any friction, but prevent the grease escaping.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This will probably work well even for fully submersible vehicles, as long as they don't go too deep. As you go deeper, the pressure will begin to force water up the tube, pushing the grease out, and eventually letting water into the boat.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One way to combat this is to simply push back. Increase the air pressure at the other end of the stuffing box so that things stay balanced. One way to do this is to enclose the motor and the inside end of the tube inside a small sealed box. Use a tiny pump to pressurize the box to match the water pressure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively, why not let the water do the work for you? Seal the motor inside a rubber bladder and house it outside the boat. The water pressure will compress the bladder so that the air pressure inside always matches the pressure outside perfectly.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;My final suggestion is similar to &lt;a href=&quot;https://robotics.stackexchange.com/a/275/37&quot;&gt;Mark Booth&lt;/a&gt;'s. Why not build a motor which can cross the hull of the vehicle. Put the magnets of the motor outside, and keep the windings inside where it's dry. What you will be making here is basically a Brushless Motor:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/Y26Lk.jpg&quot; alt=&quot;Brushless motor&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could maybe build this into something like a ducted fan.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/6OCz4.jpg&quot; alt=&quot;Ducted Fan&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="40" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2012-11-05T13:02:51.943" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="169" PostTypeId="2" ParentId="99" CreationDate="2012-10-26T22:12:08.123" Score="3" Body="&lt;p&gt;I can't answer specifically for the AVR, but I can offer some more general advice.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Low level&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;I think you are going to have to &lt;strong&gt;prioritise&lt;/strong&gt;. Look at what you can afford to throw away and what you can afford to process when your system starts to get overloaded. Also, profile your usage to see what data you have coming in when.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For instance, if you have a higher level retry protocol on your serial comms, then when you are overloaded perhaps you could drop incoming serial bytes, leaving it to the retry mechanism to catch up when the CPU has the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you can do this then you are going to want to fail early. When your serial buffer is full, there is no point reading the data from the uart, writing it into your buffer, overwriting existing data - that's just wasting cycles which could be used elsewhere (you are going to have to throw away the partial serial stream anyway). When you experience a serial buffer overrun, just clear the uart without reading it, leave the buffer in it's old state and return, letting the CPU get on with things it can complete successfully.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively, you could disable interrupts entirely for low priority events.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Profiling your usage can also be very valuable. Lets say you have four 16 byte buffers where one is constantly going into an overrun condition because you are sending 36 byte packets to it, but where the other 3 never have more than 5 or 6 bytes in them at once. In this case it is worth rewriting your buffer code to allow different sized buffers. That way you could allocate 8 bytes each to three streams and 40 bytes for the final stream.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;High level&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;You need to analyse &lt;em&gt;why&lt;/em&gt; your buffers &lt;em&gt;randomly fill up by chance&lt;/em&gt;. Are you trying to do too much with the data in one go? Could you split that processing up and do several shorter processes rather than one long process.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For instance, if your interrupts normally take up 70% of your CPU and another routine takes up 20% &lt;em&gt;on average&lt;/em&gt;, but only needs 10% some of the time and runs out of CPU at others, then breaking up that processing into more predictable, repeatable blocks could be worthwhile, even if it takes more processing power power overall.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, if you don't have a higher level retry mechanism, consider implementing one, this would enable low level prioritisation which might otherwise not be possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, learn how to optimise for your hardware. Again, profiling can help here. If your ISRs are taking up a significant proportion of your CPU time, every cycle you save is a cycle you can use elsewhere. Don't blindly 'optimise' everywhere, chose your battles. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Profiling will tell you where in your code is most critical so you can put your efforts where it will count (See &lt;a href=&quot;https://softwareengineering.stackexchange.com/a/99463/22493&quot;&gt;Is micro-optimisation important when coding?&lt;/a&gt;).&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="-1" LastEditDate="2017-04-12T07:32:02.340" LastActivityDate="2012-11-06T20:39:34.383" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="170" PostTypeId="2" ParentId="146" CreationDate="2012-10-26T22:18:28.410" Score="3" Body="&lt;p&gt;For ball bearings, you almost always want to use the hardest, smoothest material you can find. Stainless steel would do nicely. Aluminium will be far too soft, and will simply be worn down the the steel ball bearings.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Plastic bearings like these &lt;a href=&quot;http://www.igus.com/wpck/default.aspx?Pagename=drylin_w&amp;amp;C=US&amp;amp;L=en&quot; rel=&quot;nofollow noreferrer&quot;&gt;Drylin&lt;/a&gt; from Igus can use aluminium rails:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/oqeAN.jpg&quot; alt=&quot;Igus DryLin&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2012-10-26T22:18:28.410" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="171" PostTypeId="2" ParentId="167" CreationDate="2012-10-27T04:37:37.783" Score="6" Body="&lt;p&gt;Sebastian Thrun presented a simple algorithm for tuning PID in his &quot;How to Program a Robotic Car&quot; class. It's called &quot;twiddle&quot;, he describes it &lt;a href=&quot;https://www.youtube.com/watch?v=2uQ2BSzDvXs&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Twiddle is very prone to finding local minima--this means that you could come up with a set of three constants that are okay, but not &lt;em&gt;optimal&lt;/em&gt; for the situation. The problem of tuning PID constants is a subset of a more general search problem to find certain parameters to maximize utility (in this case, minimizing error of the PID algorithm). You can look into other general solutions to this problem, like hill-climbing, simulated annealing, genetic algorithms, etc. that might end up finding more optimal solutions.&lt;/p&gt;&#xA;" OwnerUserId="181" LastEditorUserId="10596" LastEditDate="2016-10-13T12:02:52.040" LastActivityDate="2016-10-13T12:02:52.040" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="172" PostTypeId="1" AcceptedAnswerId="173" CreationDate="2012-10-27T05:11:23.017" Score="23" ViewCount="15518" Body="&lt;p&gt;Using an IMU a robot can estimate its current position relative to its starting position, but this incurs error over time. GPS is especially useful for providing position information not biased by local error accumulation. But GPS cannot be used indoors, and even outdoors it can be spotty.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what are some methods or sensors that a robot can use to localize (relative to some frame of reference) without using GPS? &lt;/p&gt;&#xA;" OwnerUserId="181" LastEditorUserId="181" LastEditDate="2012-10-29T05:09:49.703" LastActivityDate="2016-08-26T10:33:59.227" Title="Absolute positioning without GPS" Tags="&lt;localization&gt;&lt;gps&gt;&lt;sensors&gt;&lt;slam&gt;" AnswerCount="8" CommentCount="2" FavoriteCount="17" ContentLicense="CC BY-SA 3.0" />
  <row Id="173" PostTypeId="2" ParentId="172" CreationDate="2012-10-27T06:31:55.223" Score="21" Body="&lt;p&gt;Primarily, dead reckoning is used along with some other technique, generally SLAM-like. The robot builds a map, and then tries to localize within that map. For example, using laser range scanners, and based on dead reckoning, the robot has an idea of where it is. By comparing the laser range data to the map, it can improve its estimate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Relevant resources are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Indoor_positioning_system&quot;&gt;Indoor positioning system&lt;/a&gt; on Wikipedia.&lt;/li&gt;&#xA;&lt;li&gt;H. Liu, H. Darabi, P. Banerjee and J. Liu. &lt;a href=&quot;http://www.sis.pitt.edu/~dtipper/2011/Survey1.pdf&quot;&gt;Survey of Wireless Indoor Positioning Techniques and Systems&lt;/a&gt;. IEEE TRANSACTIONS ON SYSTEMS, MAN, AND CYBERNETICS, page 1067.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.sensorplatforms.com/tracking-position-indoors-moving-from-hype-to-reality&quot;&gt;Tracking Position Indoors: moving from Hype to Reality&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Methods include:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;SLAM (or at least localization) with&#xA;&lt;ul&gt;&#xA;&lt;li&gt;laser&lt;/li&gt;&#xA;&lt;li&gt;vision (cameras, stereo-vision)&lt;/li&gt;&#xA;&lt;li&gt;structured environments&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;cellular signals&lt;/li&gt;&#xA;&lt;li&gt;wifi signals&lt;/li&gt;&#xA;&lt;li&gt;RF (radio frequency) beacons and triangulation (more information at &lt;a href=&quot;http://www.wpi.edu/Images/CMS/PPL/ITT.pdf&quot;&gt;http://www.wpi.edu/Images/CMS/PPL/ITT.pdf&lt;/a&gt;).&lt;/li&gt;&#xA;&lt;li&gt;camera tracking systems (optical tracking of markers within a space)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="145" LastActivityDate="2012-10-27T06:31:55.223" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="174" PostTypeId="2" ParentId="167" CreationDate="2012-10-27T08:07:31.183" Score="79" Body="&lt;p&gt;For small, low torque motors with little or no gearing, one procedure you can use to get a good baseline tune is to probe it's response to a disturbance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To tune a PID use the following steps:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Set all gains to zero. &lt;/li&gt;&#xA;&lt;li&gt;Increase the P gain until the response to a disturbance is steady oscillation. &lt;/li&gt;&#xA;&lt;li&gt;Increase the D gain until the the oscillations go away (i.e. it's critically damped). &lt;/li&gt;&#xA;&lt;li&gt;Repeat steps 2 and 3 until increasing the D gain does not stop the oscillations.&lt;/li&gt;&#xA;&lt;li&gt;Set P and D to the last stable values. &lt;/li&gt;&#xA;&lt;li&gt;Increase the I gain until it brings you to the setpoint with the number of oscillations desired (normally zero but a quicker response can be had if you don't mind a couple oscillations of overshoot)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;What disturbance you use depends on the mechanism the controller is attached to. Normally moving the mechanism by hand away from the setpoint and letting go is enough. If the oscillations grow bigger and bigger then you need to reduce the P gain.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you set the D gain too high the system will begin to chatter (vibrate at a higher frequency than the P gain oscillations). If this happens, reduce the D gain until it stops. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I believe this technique has a name. I'll put it here when I find it.&lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="37" LastEditDate="2012-10-29T16:13:27.070" LastActivityDate="2012-10-29T16:13:27.070" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="175" PostTypeId="2" ParentId="150" CreationDate="2012-10-27T08:15:32.077" Score="1" Body="&lt;p&gt;All seals leak. If you are able to enclose the motor so that the shaft is the only exit point, fill the motor with a low viscosity non conductive oil such as mineral oil. This greatly reduces the pressure difference across the seal.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2012-10-27T08:15:32.077" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="176" PostTypeId="2" ParentId="172" CreationDate="2012-10-27T09:10:56.807" Score="3" Body="&lt;p&gt;If your goal is to have a georeferenced localization, you &lt;em&gt;will&lt;/em&gt; have to use GPS at some point. The other techniques (dead reckoning, SLAM, ...) will only be useful to &quot;bridge&quot; spotty GPS/indoor absolute positioning reception.&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2012-10-27T09:10:56.807" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="177" PostTypeId="2" ParentId="128" CreationDate="2012-10-27T09:29:52.167" Score="2" Body="&lt;p&gt;If you actually need real-time, then you use a real-time operating system. Safety monitoring, data acquisition, and constant sample rate control loops are common subsystems that use real-time scheduling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The real-time portion of the programming is usually as small as possible, because it's more difficult to debug and less code is easier to check for correctness. Documentation on real-time OS's is usually pretty good (including RTAI/Xenomai).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've used QNX and RTAI-&gt;Xenomai in different &lt;em&gt;real&lt;/em&gt; robotics projects. I preferred QNX but Xenomai was just as effective.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2012-10-27T09:29:52.167" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="178" PostTypeId="1" CreationDate="2012-10-27T13:22:19.930" Score="9" ViewCount="796" Body="&lt;p&gt;I have a time-series of force data of robots interacting with environment objects with various textures. I would like to develop models of various textures using the time-series data to classify textures into smooth, rough, moderate, etc. categories. For this purpose, will Hidden Markov Models be sufficient or should i use Conditional Random Fields? If I decide to classify into more categories and the distinction between each of are categories are very subtle, in that case what would be a good choice? Will force-data be sufficient to capture all the information I need to classify textures into these categories?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks for your replies :)&lt;/p&gt;&#xA;" OwnerUserId="190" LastEditorUserId="158" LastEditDate="2014-01-10T10:49:22.280" LastActivityDate="2014-01-10T10:49:22.280" Title="HMMs vs. CRFs to model time-series force data of robots interacting with environment?" Tags="&lt;artificial-intelligence&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="179" PostTypeId="2" ParentId="99" CreationDate="2012-10-27T15:58:01.473" Score="2" Body="&lt;p&gt;First, all processors have limited performance. So the effect could be that the performance is just not good enough for the amount of work you have to do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The average load is pretty uninteresting for diagnosing lost interrupts. The interesting thing is how many interrupts and therefore how much load on the interrupt service routines are there in peak situations. If the interrupts cause too much calculation that is needed to be done in a fixed amount of time then you need a faster CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With little computing in the ISR and a big buffer, these peaks can be flattened out, but this introduces a delay. If you can decrease the amount of data written into the buffer then a bit more processing in the ISR could pay off.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your solution is to skip the unimportant(?) processing in the main routine, then you should put more processing into the ISRs. This way the CPU load will go to the ISRs and the main routine will get less. The problem here is that if the processing of one interrupt is ongoing, the next interrupt will be delayed, as its ISR can only run after finishing the other ISR. If this delay is too long then the interrupt will get lost.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So choose the way that is best fitted for your solution. But be aware that: &quot;The only replacement for CPU power is CPU power.&quot;&lt;/p&gt;&#xA;" OwnerUserId="140" LastEditorUserId="1906" LastEditDate="2015-02-14T19:47:37.953" LastActivityDate="2015-02-14T19:47:37.953" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="180" PostTypeId="2" ParentId="100" CreationDate="2012-10-27T16:31:03.253" Score="3" Body="&lt;p&gt;There are lots of very reliable connectors out there. Here are a few of my favorites:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Harwin Datamate&lt;/strong&gt; These come in a few varieties. The ones shown here are fantastic and have both high current power connections, and many signal connections. They are extremely reliable, and I know that they are used on several robots I know of, including the &lt;a href=&quot;http://www.shadowrobot.com/hand/motorhand.shtml&quot; rel=&quot;nofollow noreferrer&quot;&gt;Shadow Robot Hand&lt;/a&gt;, &lt;a href=&quot;http://robonaut.jsc.nasa.gov/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Robonaut&lt;/a&gt; and the latest &lt;a href=&quot;http://www.dlr.de/rm/en/desktopdefault.aspx/tabid-3802/&quot; rel=&quot;nofollow noreferrer&quot;&gt;DLR space qualified hand&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/7gmmT.jpg&quot; alt=&quot;Harwin Datamate&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ones you see here are a little on the expensive side, up to $30 each! But the simpler connectors with only signal pins are much more reasonable, just a couple of dollars each. They are extremely reliable. The pins are gold plated and have several contact points. The latching and screw mechanisms on them mean they can even survive the vibration of a rocket launch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Check out Harwin's other connectors, especially the M30 range. They're pretty small and, if you crimp the wires properly, then they are extremely reliable. I have never seen one of the &lt;a href=&quot;http://www.harwin.com/M30-610-family.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;M30&lt;/a&gt; connectors fail due to repeated mating.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Consumer Connectors:&lt;/strong&gt; Generally, connectors intended for the consumer market should be able to survive quite a while. These include &lt;a href=&quot;http://en.wikipedia.org/wiki/Universal_Serial_Bus&quot; rel=&quot;nofollow noreferrer&quot;&gt;USB&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Firewire&quot; rel=&quot;nofollow noreferrer&quot;&gt;Firewire&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/HDMI&quot; rel=&quot;nofollow noreferrer&quot;&gt;HDMI&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/VGA&quot; rel=&quot;nofollow noreferrer&quot;&gt;VGA&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/D-Sub&quot; rel=&quot;nofollow noreferrer&quot;&gt;D-Sub&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/rqNNw.jpg&quot; alt=&quot;USB&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/cRq2H.jpg&quot; alt=&quot;HDMI&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other good thing about these connectors is that they are suitable for high speed data, like EtherCAT's LVDS physical layer. The downside of USB, HDMI and Firewire is that they aren't vibration proof, and may fall out if not strapped down. Make sure you get gold plated ones.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Omnetics:&lt;/strong&gt; The cream of the crop come from &lt;a href=&quot;http://www.omnetics.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Omnetics&lt;/a&gt;. They have the double benefits of being both super reliable, and also very small.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/6wbc5.jpg&quot; alt=&quot;Omnetics Connectors&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/B9m4o.jpg&quot; alt=&quot;Omnetics Connectors&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They have all kinds of wire-wire, and wire-board connectors. But be warned, they are &lt;em&gt;very&lt;/em&gt; expensive.&lt;/p&gt;&#xA;" OwnerUserId="40" LastEditorUserId="40" LastEditDate="2012-10-27T16:36:42.510" LastActivityDate="2012-10-27T16:36:42.510" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="181" PostTypeId="2" ParentId="148" CreationDate="2012-10-27T17:42:21.580" Score="5" Body="&lt;p&gt;You should read the paper published by Microsoft research on the actual algorithm behind the human motion tracking.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Real-Time Human Pose Recognition in Parts from a Single Depth Image, Shotton et. al,&#xA;&lt;a href=&quot;http://research.microsoft.com/apps/pubs/default.aspx?id=145347&quot;&gt;http://research.microsoft.com/apps/pubs/default.aspx?id=145347&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It relies on large labeled training data from the human body. That is why the Nao cannot just be tracked with the same method out of the box. To achieve that, you would need to re-train the algorithm with labeled data from the Nao in different poses.&lt;/p&gt;&#xA;" OwnerUserId="191" LastActivityDate="2012-10-27T17:42:21.580" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="182" PostTypeId="1" CreationDate="2012-10-27T19:26:10.347" Score="2" ViewCount="501" Body="&lt;p&gt;I have a joint actuated by an antagonistic pair of Pneumatic Muscles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/7FNlN.png&quot; alt=&quot;Pneumatic Muscle Joint&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are two valves per muscle, one to fill and one to empty each muscle. The joint has an angle sensor, and each muscle also contain an air pressure sensor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is a suitable control algorithm set up?&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A PID controller controlling the valve orifice sizes?&lt;/li&gt;&#xA;&lt;li&gt;A PID controller controlling the mass flow rate?&lt;/li&gt;&#xA;&lt;li&gt;A PID controller controlling the pressure using two PID pressure controllers?&lt;/li&gt;&#xA;&lt;li&gt;A Fuzzy Logic controller?&lt;/li&gt;&#xA;&lt;li&gt;A Neural Network?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="40" LastActivityDate="2012-10-29T15:32:55.293" Title="Suitable control algorithm for Air Muscle based joint?" Tags="&lt;control&gt;&lt;pid&gt;&lt;air-muscle&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="183" PostTypeId="2" ParentId="25" CreationDate="2012-10-27T19:44:03.587" Score="11" Body="&lt;p&gt;Just to add to &lt;a href=&quot;https://robotics.stackexchange.com/a/125/40&quot;&gt;user65's good answer&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Rapid rotation about a horizontal axis will come from a large difference between the thrust produced by opposite motors. The larger the difference, the greater the rotation rate. So motors that can produce much more thrust than is needed to simply hold the 'copter in the air will help to achieve fast rotations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Rapid rotation about the vertical axis comes from a large difference in torque between one opposite pair and the other. So now you need not only plenty of spare thrust, but also a lot of propeller drag.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sadly, both of these requirements (spare thrust, and prop drag) imply lower efficiency.&lt;/p&gt;&#xA;" OwnerUserId="40" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2012-10-27T19:44:03.587" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="184" PostTypeId="1" AcceptedAnswerId="523" CreationDate="2012-10-27T21:47:42.403" Score="5" ViewCount="317" Body="&lt;p&gt;Robotics has always been one of those engineering fields which has promised so much, but is taking a long time to deliver all the things that people imagine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When someone asks: &quot;How long before we have [X] type of robots?&quot; Are there any resources we can call upon to try to calculate a rough answer. These resources might include:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Rate of progress of computational power, and some estimate of how much will be needed for various types of AI.&lt;/li&gt;&#xA;&lt;li&gt;Rate of progress of electrical energy storage density, and some estimate of how much will be needed for various types of robot.&lt;/li&gt;&#xA;&lt;li&gt;Rate of progress of actuation systems, and some estimate of what would be needed for various types of robot.&lt;/li&gt;&#xA;&lt;li&gt;Lists of milestones towards various types of robot, and which ones have been achieved and when.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Are these types of studies performed, and are the results published?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Added:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In response to Jakob's comment, I am not looking for opinions or discussions on this subject. What I am looking for are published studies which might shed light on this question.&lt;/p&gt;&#xA;" OwnerUserId="40" LastEditorUserId="126" LastEditDate="2012-11-26T06:37:51.400" LastActivityDate="2012-11-26T21:14:26.653" Title="Robotics Trends" Tags="&lt;research&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="185" PostTypeId="5" CreationDate="2012-10-27T21:57:11.377" Score="0" Body="&lt;p&gt;Most &lt;a href=&quot;/questions/tagged/servos&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;servos&amp;#39;&quot; rel=&quot;tag&quot;&gt;servos&lt;/a&gt; questions should fall into the subcategories of either industrial &lt;a href=&quot;/questions/tagged/servomotor&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;servomotor&amp;#39;&quot; rel=&quot;tag&quot;&gt;servomotor&lt;/a&gt; or &lt;a href=&quot;/questions/tagged/rcservo&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;rcservo&amp;#39;&quot; rel=&quot;tag&quot;&gt;rcservo&lt;/a&gt; (with the synonym &lt;a href=&quot;/questions/tagged/hobbyservo&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;hobbyservo&amp;#39;&quot; rel=&quot;tag&quot;&gt;hobbyservo&lt;/a&gt;). Only questions which do not fall into these two sub-categories should use this tag.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Servos, in Robotics, are almost always motors that include a position sensor and a control circuit. A position demand is sent to the control circuit, which in turn drives the motor to the demanded position and holds that position even when outside forces try to move it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The motor would normally be a brushed or brushless DC electric motor, but might also be a pneumatic muscle, hydraulic ram, voice coil, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The control circuit might be implemented using a micro controller, a PLC, a decicated motion controller (possibly with an external power amplifier), or bespoke circuit (possibly with an Application Specific IC).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sub&gt; See &lt;a href=&quot;https://robotics.meta.stackexchange.com/q/170/37&quot;&gt;What should we do about servo questions?&lt;/a&gt; &lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="40" LastEditorUserId="37" LastEditDate="2018-08-15T15:00:48.253" LastActivityDate="2018-08-15T15:00:48.253" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="186" PostTypeId="4" CreationDate="2012-10-27T21:57:11.377" Score="0" Body="The servos tag should only be used for questions which do not fall into the servomotor or rcservo (hobbyservo) tags." OwnerUserId="40" LastEditorUserId="37" LastEditDate="2013-05-20T16:23:21.113" LastActivityDate="2013-05-20T16:23:21.113" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="187" PostTypeId="5" CreationDate="2012-10-27T21:59:43.823" Score="0" Body="&lt;p&gt;The wheel is one of the main components of the wheel and axle which is one of the six simple machines. Wheels are used on many robots for the purpose of locomotion. However, they can also be used in many other mechanical parts of a robot.&lt;/p&gt;&#xA;" OwnerUserId="40" LastEditorUserId="40" LastEditDate="2012-10-29T17:25:13.607" LastActivityDate="2012-10-29T17:25:13.607" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="188" PostTypeId="4" CreationDate="2012-10-27T21:59:43.823" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2012-10-27T21:59:43.823" LastActivityDate="2012-10-27T21:59:43.823" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="189" PostTypeId="5" CreationDate="2012-10-27T22:05:15.000" Score="0" Body="&lt;p&gt;Without qualification 'motor' is usually taken to mean a rotary electromechanical motor, typically either a brushed or brushless design.&lt;/p&gt;&#xA;" OwnerUserId="40" LastEditorUserId="37" LastEditDate="2013-07-09T13:07:16.920" LastActivityDate="2013-07-09T13:07:16.920" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="190" PostTypeId="4" CreationDate="2012-10-27T22:05:15.000" Score="0" Body="Without qualification 'motor' is usually taken to mean a rotary electromechanical motor, typically either a brushed or brushless design." OwnerUserId="1309" LastEditorUserId="37" LastEditDate="2013-07-09T13:06:34.230" LastActivityDate="2013-07-09T13:06:34.230" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="191" PostTypeId="5" CreationDate="2012-10-27T22:11:46.413" Score="0" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/pD9MX.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/pD9MX.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;Control in the context of robotics may refer to:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The functions which allow a servo to maintain its position.&lt;/li&gt;&#xA;&lt;li&gt;The theory or mathematics that govern the control of a robot.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="40" LastEditorUserId="13495" LastEditDate="2016-04-21T18:36:14.283" LastActivityDate="2016-04-21T18:36:14.283" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="192" PostTypeId="4" CreationDate="2012-10-27T22:11:46.413" Score="0" Body="A method or device to manage, command or regulate some part of a system." OwnerUserId="40" LastEditorUserId="40" LastEditDate="2012-10-29T17:24:36.353" LastActivityDate="2012-10-29T17:24:36.353" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="193" PostTypeId="5" CreationDate="2012-10-27T22:13:01.777" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2012-10-27T22:13:01.777" LastActivityDate="2012-10-27T22:13:01.777" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="194" PostTypeId="4" CreationDate="2012-10-27T22:13:01.777" Score="0" Body="A robot which is capable of moving from one place to another, usually of its own volition." OwnerUserId="40" LastEditorUserId="40" LastEditDate="2012-10-29T16:12:53.470" LastActivityDate="2012-10-29T16:12:53.470" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="195" PostTypeId="5" CreationDate="2012-10-27T22:16:19.323" Score="0" Body="&lt;p&gt;Microcontrollers are frequently used in many parts of a robot. A single microcontroller may implement one single function of a robot, (servo control, data collection), or may implement many functions. Some robots contain only one microcontroller which carries out all of the robot's sensing, computational and data handling tasks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most robotics enthusiasts use one &quot;prototyping platform&quot; PCB that includes a microcontroller, connected to one or more &quot;breakout board&quot; PCBs that include some kind of motor driver, which is in turn connected to the actual motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikibooks.org/wiki/Robotics/Computer_Control/The_Interface/Microcontrollers&quot; rel=&quot;nofollow&quot;&gt;Robotics: Microcontrollers&lt;/a&gt; has a few more words about microcontrollers that are popular in robotics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikibooks.org/wiki/Robotics/Computer_Control/The_Interface/SBC_and_multichip_modules&quot; rel=&quot;nofollow&quot;&gt;Robotics: Computer control&lt;/a&gt; has a few words comparing boards -- &quot;protyping platform&quot;, &quot;SBC&quot;, &quot;multichip module&quot;, etc. -- that are popular in robotics, each one supporting one of the above microcontrollers.&lt;/p&gt;&#xA;" OwnerUserId="40" LastEditorUserId="187" LastEditDate="2014-01-03T03:28:18.857" LastActivityDate="2014-01-03T03:28:18.857" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="196" PostTypeId="4" CreationDate="2012-10-27T22:16:19.323" Score="0" Body="A small computer on a single integrated circuit containing a processor core, memory, and programmable input/output peripherals." OwnerUserId="40" LastEditorUserId="40" LastEditDate="2012-10-29T16:13:31.747" LastActivityDate="2012-10-29T16:13:31.747" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="197" PostTypeId="5" CreationDate="2012-10-27T22:17:35.033" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2012-10-27T22:17:35.033" LastActivityDate="2012-10-27T22:17:35.033" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="198" PostTypeId="4" CreationDate="2012-10-27T22:17:35.033" Score="0" Body="A type of sensor which measures rate of rotation." OwnerUserId="40" LastEditorUserId="40" LastEditDate="2012-10-29T16:13:46.027" LastActivityDate="2012-10-29T16:13:46.027" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="199" PostTypeId="5" CreationDate="2012-10-27T22:19:49.303" Score="0" Body="&lt;p&gt;Questions about using an existing PID implementation connected to a device.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Possible topics include:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&quot;loop tuning&quot; -- ways of tuning and tweaking the Kp, Kd, Ki &quot;constants&quot;,&#xA;and the horrible things that go wrong when they aren't tuned right&lt;/li&gt;&#xA;&lt;li&gt;how to deal with the fact that a PID for the elbow motor tuned perfectly when the shoulder is &quot;down&quot; isn't so perfect when the shoulder is &quot;horizontal&quot; or &quot;up&quot;, or when the hand is empty vs. when the hand is holding a bowling ball, and ways to compensate.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Questions about implementing a PID controller itself are best asked on &lt;a href=&quot;https://electronics.stackexchange.com/questions/tagged/pid-controller&quot;&gt;Electrical Engineering Stack Exchange&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="187" LastEditorUserId="6890" LastEditDate="2017-08-30T21:13:19.403" LastActivityDate="2017-08-30T21:13:19.403" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="200" PostTypeId="4" CreationDate="2012-10-27T22:19:49.303" Score="0" Body="Proportional Integral Derivative Controller. A type of control algorithm used in many control situations, especially servo systems." OwnerUserId="40" LastEditorUserId="40" LastEditDate="2012-10-29T16:13:05.313" LastActivityDate="2012-10-29T16:13:05.313" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="201" PostTypeId="5" CreationDate="2012-10-27T22:23:42.263" Score="0" Body="&lt;p&gt;This tag should be used with any questions relating to the use of an Arduino in robotics applications. It should not be used for general programming questions (which are off-topic of this site). Be sure to use the &lt;a href=&quot;https://arduino.stackexchange.com&quot;&gt;Arduino Stack Exchange&lt;/a&gt; for questions that are more Arduino and less robotics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.arduino.cc/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Arduino&lt;/a&gt; is an open-source electronics prototyping platform based on flexible, easy-to-use hardware and software. It's intended for artists, designers, hobbyists, and anyone interested in creating interactive objects or environments.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.arduino.cc/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Arduino&lt;/a&gt; can sense the environment by receiving input from a variety of sensors and can affect its surroundings by controlling lights, motors, and other actuators. Perfect for home appliances, prototyping, robotics, and more.  The microcontroller on the board is programmed using the &lt;a href=&quot;http://arduino.cc/en/Reference/HomePage&quot; rel=&quot;nofollow noreferrer&quot;&gt;Arduino programming language&lt;/a&gt; (based on &lt;a href=&quot;http://wiring.org.co/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wiring&lt;/a&gt;) and the &lt;a href=&quot;http://arduino.cc/en/Main/Software&quot; rel=&quot;nofollow noreferrer&quot;&gt;Arduino development environment&lt;/a&gt; (based on &lt;a href=&quot;http://processing.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Processing&lt;/a&gt;). Arduino projects can be stand-alone or they can communicate with software on running on a computer (e.g. Flash, Processing, MaxMSP). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;(This text based on the summary at &lt;a href=&quot;http://www.arduino.cc/&quot; rel=&quot;nofollow noreferrer&quot;&gt;www.arduino.cc&lt;/a&gt;)&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://ruggedcircuits.com/html/ruggeduino.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ruggeduino&lt;/a&gt; is a ruggedized Arduino-compatible microcontroller board.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;related tags:&lt;a href=&quot;/questions/tagged/atmega&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;atmega&amp;#39;&quot; rel=&quot;tag&quot;&gt;atmega&lt;/a&gt;&lt;a href=&quot;/questions/tagged/avr&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;avr&amp;#39;&quot; rel=&quot;tag&quot;&gt;avr&lt;/a&gt;&lt;a href=&quot;/questions/tagged/lilypad&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;lilypad&amp;#39;&quot; rel=&quot;tag&quot;&gt;lilypad&lt;/a&gt;&lt;a href=&quot;/questions/tagged/microcontroller&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;microcontroller&amp;#39;&quot; rel=&quot;tag&quot;&gt;microcontroller&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="40" LastEditorUserId="15160" LastEditDate="2018-07-30T14:16:31.977" LastActivityDate="2018-07-30T14:16:31.977" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="202" PostTypeId="4" CreationDate="2012-10-27T22:23:42.263" Score="0" Body="Arduino is an open-source electronics prototyping platform based on flexible, easy-to-use hardware and software. It's intended for artists, designers, hobbyists, and anyone interested in creating interactive objects or environments. Be sure to use the Arduino Stack Exchange for questions that are more Arduino and less robotics." OwnerUserId="40" LastEditorUserId="15160" LastEditDate="2018-07-30T14:16:25.720" LastActivityDate="2018-07-30T14:16:25.720" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="203" PostTypeId="5" CreationDate="2012-10-27T22:26:28.657" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2012-10-27T22:26:28.657" LastActivityDate="2012-10-27T22:26:28.657" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="204" PostTypeId="4" CreationDate="2012-10-27T22:26:28.657" Score="0" Body="The act of using a computer to study, model or predict the behaviour of a system or the outcome of an experiment." OwnerUserId="40" LastEditorUserId="40" LastEditDate="2012-10-29T16:12:26.863" LastActivityDate="2012-10-29T16:12:26.863" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="205" PostTypeId="1" CreationDate="2012-10-28T01:43:50.040" Score="13" ViewCount="3979" Body="&lt;p&gt;Most of the linear actuators I've seen are nonuniform and/or slow. Those using a cam or crankshaft-like mechanism (and nearly anything hydraulic/pneumatic) cannot be moved at a constant speed without some programming. Those using a screw-like mechanism are uniform, but slow. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Aside from a rack and pinion/rope wound around a stick, what other fast, uniform linear actuators exist? By uniform, I mean that the speed is uniform (Or the distance moved is linearly dependant on the angle rotated by the motor)&lt;/p&gt;&#xA;" OwnerUserId="126" LastActivityDate="2012-10-28T11:23:34.773" Title="Creating a fast, uniform, linear actuator" Tags="&lt;actuator&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="206" PostTypeId="2" ParentId="205" CreationDate="2012-10-28T08:52:28.760" Score="7" Body="&lt;p&gt;I don't know if this qualifies as a rack &amp;amp; pinion, or rope wound round a stick, but a simple belt drive actuator is very fast and smooth. I'm using one for a SMD pick and place machine where I need very good speed and smoothness of movement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/era9I.jpg&quot; alt=&quot;Belt drive actuator&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Linear actuators based on screws don't need to be slow at all, it just depends on the pitch of the screw you use. Use a long pitch screw, and you get a lot more travel per revolution of the motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/aaz7j.jpg&quot; alt=&quot;Long pitch ballscrew&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2012-10-28T08:52:28.760" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="207" PostTypeId="2" ParentId="172" CreationDate="2012-10-28T09:37:48.470" Score="9" Body="&lt;p&gt;I understand you problem is to find different means to GPS to find your position within a given reference frame. This problem in isolation is called localization, and there are many ways to perform that. Firstly you will have to differentiate between relative methods, so measurements which provide a change in position to a previously known position. This method has the problem, that any errors are obviously accumulated, and will grow unbounded. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Dead reckoning is likely one of the oldest ways of relative localization. If you use heading, speed and time (so estimating the distance traveled) you can sum up you position changes from a starting position. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;In addition to using dead reckoning you can also not landmarks and track them in a map. Finding those landmarks again will allow you to reduce your relative position error. This is the Simultaneous Localization and Mapping (SLAM) problem. It is still relative navigation.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Now coming to your actual question on absolute navigation. All that GPS does is provide you with distance estimations to Landmarks with a known position information in your reference frame (in this case geocentric). GPS receivers will take these information and generate a position solution, which also has an error. The good thing though is that this error is bounded within your frame of reference. This it what makes it an absolute positioning system. So whether its indoors or outdoors and regardless of your desired reference frame, all you need for absolute positioning systems are measurements that put you in relation to some known landmark position within your reference frames. Some of those methods have been given in a &lt;a href=&quot;https://robotics.stackexchange.com/a/173/127&quot;&gt;previous answer&lt;/a&gt;. Although, as I said, SLAM is not an absolute method. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The simplest form is direct landmark recognition. If you see an Eiffel-Tower you should have a good notion of your absolute position (at least with an absolute error bound) within the earth fixed frame (if you know the position of the Eiffel-Tower). You may have to do some &lt;a href=&quot;http://en.wikipedia.org/wiki/Paris_Las_Vegas&quot; rel=&quot;nofollow noreferrer&quot;&gt;disambiguation&lt;/a&gt;, though.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If you want to improve your absolute position error, you can use multiple landmarks at the same time. Classical &lt;a href=&quot;http://en.wikipedia.org/wiki/Triangulation&quot; rel=&quot;nofollow noreferrer&quot;&gt;Triangulation&lt;/a&gt; is such an example. Another one is using craters for a lunar descent vehicle. Landmarks don't have to be visual, and you can use things like RF signal strength for known signals like in WiFi or Cellular localization. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;All of the above methods needed landmarks, which need to be identified and uniquely associated. If this is a problem, you can also use different methods, like the &lt;a href=&quot;http://www.control.isy.liu.se/research/reports/2001/2333.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;terrain profile&lt;/a&gt;. This have for example been applied for early &lt;a href=&quot;http://adsabs.harvard.edu/abs/1982guco.conf...71L&quot; rel=&quot;nofollow noreferrer&quot;&gt;cruise missile navigation&lt;/a&gt;. I've also used this method for localization on an elevation map &lt;a href=&quot;http://ieeexplore.ieee.org/xpl/login.jsp?tp=&amp;amp;arnumber=6181273&amp;amp;url=http%3A%2F%2Fieeexplore.ieee.org%2Fxpls%2Fabs_all.jsp%3Farnumber%3D6181273&quot; rel=&quot;nofollow noreferrer&quot;&gt;without visual&lt;/a&gt; or range sensing. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;With all of the above methods: as long as any of your map material has Geo-referenced information associated, you can obviously Geo-reference yourself without the use of GPS. The most important factor to differentiate the methods is their error characteristics. &lt;/p&gt;&#xA;" OwnerUserId="127" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2012-10-28T10:12:11.407" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="208" PostTypeId="2" ParentId="205" CreationDate="2012-10-28T11:23:34.773" Score="10" Body="&lt;p&gt;It would be easier to give an answer if we knew what you want to use this for. That would give an idea of your requirements in terms of speed, cost, and space requirements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As Rocketmagnet has pointed out, you can use a belt drive, or long pitch screw. And you have already mentioned a rack and pinion system. These are all involve a &lt;strong&gt;conventional (DC) motor&lt;/strong&gt; along with a mechanical system to convert angular motion into linear motion:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;belt drive&lt;/li&gt;&#xA;&lt;li&gt;screw&lt;/li&gt;&#xA;&lt;li&gt;rack &amp;amp; pinion&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;rigid chain actuator (this is also cool, it can be folded into a small space)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/IT2q0.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Other methods include:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Linear_motor&quot; rel=&quot;noreferrer&quot;&gt;Linear motor&lt;/a&gt; - This is quite cool, it involves a line of magnetic poles, which accelerate the &lt;em&gt;rotor&lt;/em&gt; in a linear direction. &lt;strong&gt;These can be very fast and precise!&lt;/strong&gt; This can also be controlled in open-loop (like a stepper motor).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/OBfLO.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Above is a cross-section of a linear motor&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;Pneumatic cylinder - the speed can be controlled using a control valve, pneumatic actuators are also quite popular for robotics applications because of its compliance.&lt;/li&gt;&#xA;&lt;li&gt;Hydraulic cylinder&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Wikipedia has an article on &lt;a href=&quot;http://en.wikipedia.org/wiki/Linear_actuator&quot; rel=&quot;noreferrer&quot;&gt;linear actuators&lt;/a&gt;, and also a &lt;a href=&quot;http://en.wikipedia.org/wiki/Linear_actuator#Advantages_and_disadvantages&quot; rel=&quot;noreferrer&quot;&gt;comparison table&lt;/a&gt; with advantages and disadvantages!&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="145" LastActivityDate="2012-10-28T11:23:34.773" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="209" PostTypeId="1" CreationDate="2012-10-28T18:01:45.553" Score="14" ViewCount="587" Body="&lt;p&gt;In &lt;a href=&quot;http://ais.informatik.uni-freiburg.de/teaching/ws11/robotics2/pdfs/rob2-13-frontends.pdf&quot;&gt;SLAM frontends&lt;/a&gt; which use the Iterative Closest Point (ICP) algorithm for identifying the association between two matching point clouds, how can you determine if the algorithm is stuck in a local minimum and returns a wrong result? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is defined as matching two pointclouds which are both samples of some arbitrary surface structure, and the sampled areas have an overlap of 0-100% which is unknown. I know the &lt;a href=&quot;http://glorfindel.mavrinac.com/~aaron/school/pdf/chetverikov02_tricp.pdf&quot;&gt;Trimmed ICP&lt;/a&gt; variant works by iteratively trying to determine the overlap, but even this one can be stuck in a local minimum. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A naive approach would be to look a the mean square error of the identified point pairs. But without some estimate of the sampling this seems a risky thresholding. In the manual for the &lt;a href=&quot;http://hds.leica-geosystems.com/en/Leica-Cyclone_6515.htm&quot;&gt;Leica Cyclone&lt;/a&gt; they suggest manual inspection of the pair error histogram. If it has a Gaussian shape the fit is good. If there is a linear fall-off the match is probably bad. This seems plausible for me, but I've never seen it used in an algorithm.&lt;/p&gt;&#xA;" OwnerUserId="127" LastEditorUserId="127" LastEditDate="2012-11-04T20:48:57.723" LastActivityDate="2016-07-20T15:32:31.760" Title="How to determine quality of ICP matches?" Tags="&lt;slam&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="210" PostTypeId="1" AcceptedAnswerId="225" CreationDate="2012-10-28T19:03:57.037" Score="15" ViewCount="4795" Body="&lt;p&gt;I have a simple servo system that uses a PID controller implemented in an MCU to perform the feedback. However, the properties of the system change dynamically, and so the PID parameters can never be tuned for all circumstances.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My robot is a light weight arm with back-drivable electric motors, similar to this one:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/sp7VH.jpg&quot; alt=&quot;Lightweight robot arm&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The arm performs several tasks, including picking up heavy weights, pushing and pulling objects across the desk. Each of these tasks requires different PID tuning parameters which I cannot easily predict.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I would really like is for some higher level function which can carefully adjust the parameters in response to the arm's behaviour. For example, if it notices that the arm is oscillating, it might reduce P and increase D. Or if it noticed that the arm wasn't reaching its target, it might increase I.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do such algorithms exist? I would be happy even if the algorithm didn't perfect the parameters immediately. E.G. the arm could oscillate a few times before the parameters were adjusted to their new values. &lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2012-10-31T04:08:38.747" Title="How can I automatically adjust PID parameters on the fly?" Tags="&lt;control&gt;&lt;pid&gt;&lt;automatic&gt;&lt;tuning&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="211" PostTypeId="2" ParentId="55" CreationDate="2012-10-28T20:31:46.073" Score="7" Body="&lt;p&gt;The problem with the Dynamixel servos is that they're trapped in an insulating plastic jacket. There is no convection, and no good thermally conductive material to let heat out efficiently.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first thing I'd suggest is to get some air flow. Moving air has a surprising ability to cool something hot. You hardly need any movement to get good results. If you're willing to hack the servo, then hack away at the plastic casing. First dismantle it, removing the PCB and motor too if you can get the screws undone. Place the gears somewhere clean and safe in such a way you can remember which order they go back in.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now get your Dremmel out and carefully remove some of the casing around the motor (green areas). You're aiming to remove enough so that air can flow &lt;em&gt;through&lt;/em&gt; the casing. In one side, out the other. Note the plastic surface under the gears, there's no point cutting through to the gear cavity. In fact doing this will allow debris to enter the gear chain and stall it, so keep your cutting behind this plastic surface.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZfKBE.jpg&quot; alt=&quot;Cut the casing of a Dynamixel servo&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also be careful not to remove any of the material around the screws (red areas). You'll want that when you re-assemble the motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just doing this should give you some extra power margin before it overheats, especially if you can mount the motor so that the cool air enters at the bottom and warm air leaves at the top. It will be even better if you can blow air through the casing using a small fan. If you have several motors close together, you might be able to blow air through all of them in series with a single fan. &lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2012-10-28T20:31:46.073" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="212" PostTypeId="2" ParentId="210" CreationDate="2012-10-29T03:15:16.110" Score="2" Body="&lt;p&gt;The process you are describing is known as adaptive PID.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems kind of overkill though.  I have found PID to be quite robust when dealing with external disturbances and the tasks you describe do not seem beyond the capabilities of a single set of gains.&lt;/p&gt;&#xA;" OwnerUserId="65" LastActivityDate="2012-10-29T03:15:16.110" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="213" PostTypeId="1" AcceptedAnswerId="223" CreationDate="2012-10-29T05:30:30.627" Score="25" ViewCount="6166" Body="&lt;p&gt;Smart phones these days typically come with a gyroscope, accelerometer, compass, camera, and GPS sensor all on board. They also usually have a connection to the internet with Wifi and mobile data networks. I've seen many cases of using a phone as a remote control for a robot, but to me, it seems like the phone itself is a perfect lightweight computing and sensing platform for an autonomous robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main obstacle I see is interfacing with actuators. Being able to control motors to steer even a table-top robot, or control servos, for example. Connecting and communicating to a microcontroller could be an obstacle as well. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a robot hobbyist, I'd like to know how I can overcome these and other obstacles to be able to harness the power of my smart phone with my robotics projects.&lt;/p&gt;&#xA;" OwnerUserId="181" LastEditorUserId="37" LastEditDate="2013-12-18T00:03:27.247" LastActivityDate="2013-12-18T00:19:12.427" Title="How can I integrate a smart phone with my robotics project?" Tags="&lt;actuator&gt;" AnswerCount="5" CommentCount="1" FavoriteCount="16" ClosedDate="2013-12-17T15:40:47.243" ContentLicense="CC BY-SA 3.0" />
  <row Id="214" PostTypeId="2" ParentId="213" CreationDate="2012-10-29T06:48:28.460" Score="6" Body="&lt;p&gt;The main problem as I see it isn't really interfacing with actuators-- if you have a good way to wirelessly transfer digital (even better would be analog, or a channel good enough to do PWM) signals, you can just interface that with a motor driver chip (e.g. L293D) and be good to go. For servos, you need good response time so that you can handle the pulses. If you have a PWM-capable channel, this shouldn't be hard as the channel has a high baud already. If you have a slow channel, servos may not be possible since you require accurate pulse timing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first option I see (though it's rather bulky) is to take a Raspberry Pi, connect it via ethernet to a wireless router, and connect the phone to the same wirelessly. Now just write a basic app for your phone that sends requests  to the Pi based on  input, and write another server like app for the Pi that handles these. Might be bulky and somewhat hard, but it's quite extensible, IMO. You can also put the router offboard and stick &lt;a href=&quot;http://wolfpaulus.com/journal/embedded/raspberrypi_wifi&quot;&gt;this&lt;/a&gt; into the Pi (or use hotspot and eliminate the router entirely).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another option is to use a bluetooth controller like the one shown &lt;a href=&quot;http://blog.sigfpe.com/2011/02/build-yourself-bluetooth-controlled-six.html&quot;&gt;here&lt;/a&gt;. I've not used this before, but it looks like you'll still need a microcontroller to handle this. I guess you can connect its RX/TX pins directly to the TX/RX on an arduino, though I'm not too sure of this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you've used XBee/ZigBee before, you may want to try out the &lt;a href=&quot;http://www.seeedstudio.com/wiki/Bluetooth_Bee&quot;&gt;bluetooth bee&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A final option is to use the phone USB port with a conventional wireless control setup (XBee/whatever)--but this will require one to write drivers and all.&lt;/p&gt;&#xA;" OwnerUserId="126" LastActivityDate="2012-10-29T06:48:28.460" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="215" PostTypeId="1" AcceptedAnswerId="218" CreationDate="2012-10-29T08:02:34.200" Score="12" ViewCount="1907" Body="&lt;p&gt;I'd like to start making robots and tinkering with microcontrollers. Where do I start, and what do I need?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd like to make my own robots. I'm comfortable with programming (assembly and C) so I've got that part covered, but my electronics/circuits knowledge is a little weak. I have no idea what material to start with and which tools I need, nor how to put stuff together.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the microcontroller, I'm thinking about going with the Pololu Orangutan LV-168 or the Arduino Duemilanove, although I'm leaning more towards the Orangutan because of the built-in LCD and pushbuttons (which I would expect to use, especially for debugging and user interaction). Am I on the right track? It seems to me like the number of I/O ports is small, but is that the case in practice?&lt;/p&gt;&#xA;" OwnerUserId="119" LastEditorUserId="37" LastEditDate="2013-04-06T00:02:09.990" LastActivityDate="2013-04-06T00:02:09.990" Title="Starting out advice on making robots and tinkering with microcontrollers" Tags="&lt;arduino&gt;&lt;microcontroller&gt;&lt;beginner&gt;" AnswerCount="5" CommentCount="3" FavoriteCount="7" ClosedDate="2013-09-18T06:32:43.577" ContentLicense="CC BY-SA 3.0" />
  <row Id="217" PostTypeId="2" ParentId="213" CreationDate="2012-10-29T09:26:01.497" Score="5" Body="&lt;p&gt;Yes, the lack of GPIO pins on smartphones is a shame. If you already have ROS running on the robot you could use &lt;a href=&quot;https://play.google.com/store/apps/details?id=org.ros.android.sensors_driver&amp;amp;hl=da&quot;&gt;this app&lt;/a&gt; on an Android phone to get access to the sensor suite on the phone.&lt;/p&gt;&#xA;" OwnerUserId="61" LastActivityDate="2012-10-29T09:26:01.497" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="218" PostTypeId="2" ParentId="215" CreationDate="2012-10-29T09:29:49.547" Score="7" Body="&lt;p&gt;I'd recommend getting your hands on a &lt;code&gt;3pi&lt;/code&gt; and an &lt;code&gt;Arduino&lt;/code&gt;. They both use the same chip, and are a great place to start.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Get yourself some tools.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A soldering iron with a sharp point.&lt;/li&gt;&#xA;&lt;li&gt;A multimeter.&lt;/li&gt;&#xA;&lt;li&gt;Some breadboards and some wire.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Actually, just look here:&#xA;&lt;a href=&quot;http://www.ladyada.net/library/equipt/&quot;&gt;Ladyada's Equipment List&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="118" LastEditorUserId="145" LastEditDate="2012-10-29T10:03:25.110" LastActivityDate="2012-10-29T10:03:25.110" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="219" PostTypeId="2" ParentId="178" CreationDate="2012-10-29T14:13:20.547" Score="5" Body="&lt;p&gt;Based on your problem description, both HMM (generative model) and CRF (discriminative model) will work. See this discussion for a more in-depth explanation of the two approaches:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/questions/879432/what-is-the-difference-between-a-generative-and-discriminative-algorithm&quot;&gt;What is the difference between a Generative and Discriminative Algorithm?&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A suggestion: before choosing an algorithm, start by carefully looking at your numerical data, with MATLAB plots or similar. If the information is multi-dimensional (e.g. force values from multiple sensors), it might be the case that some dimensions (e.g. sensor reads) do not contain useful discriminative information; in this case, compress the data with Principal Component Analysis so that you will have more compact features during training and classification.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, with regard to your question:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The difference is that HMMs can represent each of your texture classes with several hidden variables/states, thus capturing the internal temporal evolution of each contact. We can say that HMM better model the &quot;low-level&quot; (intra-class) dynamics of your data. For example, in your case HMMs will permit you to explicitly model three different phases of each data acquisition: (1) start of contact between robot and object; (2) stable part of the contact; (3) end of contact and release. These phases could have different values in time, even for the same object texture, and it could make sense to separate them to improve classification results.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, CRFs are more suited for capturing the &quot;high-level&quot; (inter-class) relations of your data distribution, which are sometimes important when the spatio-temporal variability is high, or when the observation features are very similar between two samples belonging to different classes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Personally I find HMMs easier to use and I would start with those, but your mileage may vary.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If I decide to classify into more categories and the distinction between each of are categories are very subtle, in that case what would be a good choice?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In that case, CRFs can be a more robust choice (see above).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Will force-data be sufficient to capture all the information I need to classify textures into these categories?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Adding visual features (object appearance), especially if captured with high-resolution cameras, could help determine if the object has a rough texture or not.&lt;/p&gt;&#xA;" OwnerUserId="197" LastEditorUserId="-1" LastEditDate="2017-05-23T12:37:11.430" LastActivityDate="2012-10-29T14:13:20.547" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="220" PostTypeId="2" ParentId="182" CreationDate="2012-10-29T15:32:55.293" Score="1" Body="&lt;p&gt;According to the Wikipedia page on &lt;a href=&quot;http://en.wikipedia.org/wiki/Pneumatic_artificial_muscles&quot; rel=&quot;nofollow&quot;&gt;Pneumatic artificial muscles&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This is one of the major advantages; the mathematical model that supports the PAMs functionality is a non-linear system, which makes them much easier [citation needed] then conventional pneumatic cylinder actuators to control precisely. The relationship between force and extension in PAMs mirrors what is seen in the length-tension relationship in biological muscle systems.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I'm not convinced that non-linear functionality would make them easier to control, in fact in my experienced, non-linear systems are &lt;em&gt;substantially less easy&lt;/em&gt; to control than linear systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This article references a number of papers which may form the basis of useful research into the kinematics of these devices. In particular &lt;a href=&quot;http://lucy.vub.ac.be/publications/Daerden_Lefeber_EJMEE.pdf&quot; rel=&quot;nofollow&quot;&gt;Pneumatic Artificial Muscles: actuators for robotics and automation&lt;/a&gt; look slike it would be quite useful as a review of the research, including plenty of citations for following up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would guess that these air muscles suffer many of the same myths and prejudices that &lt;a href=&quot;http://hydraulicspneumatics.com/other-technologies/5-myths-pneumatic-motion-control&quot; rel=&quot;nofollow&quot;&gt;Proportional Pneumatic Motion Control&lt;/a&gt; system have, so reading up on these systems might be useful too.&lt;/p&gt;&#xA;" OwnerUserId="37" LastActivityDate="2012-10-29T15:32:55.293" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="221" PostTypeId="2" ParentId="210" CreationDate="2012-10-29T16:42:01.693" Score="4" Body="&lt;p&gt;A good approach for such a problem is called adaptive control. In short it is a control methodology that presumes the model is known but the parameters of the model (mass, inertia, etc.) are not. It's job is to estimate the unknown parameters. A brief introduction can be found on &lt;a href=&quot;http://en.wikipedia.org/wiki/Adaptive_control&quot; rel=&quot;nofollow&quot;&gt;wikipedia&lt;/a&gt;. The text Robotics: Modelling, Planning and Control by Siciliano et al. cover the topic more thoroughly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit in response to @Rocketmagnets query:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In short you must have a mathematical model of your system, i.e. the equations that describe how your system evolves over time when forced or otherwise, but you do not need to know dynamical parameters such as the mass of the various components, their inertia, etc.. It is the job of the adaptive controller to estimate these parameters. You do have to give it an initial guess for each of the unknown parameters however. Then as the system runs it uses the control signals, the output signals, and a method like linear regression or gradient descent to update the unknown parameter values. Over time the parameters will converge to values that will result in a steady-state though they may not match the real parameters, i.e. it may get the mass wrong, but the value will still work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From here I would advise referring to a text that discusses the method. I just noticed for example that Dr. Marc Bodson is offering a copy of his text Adaptive Control: Stability, Robustness, and Convergence in PDF form on his &lt;a href=&quot;http://www.ece.utah.edu/~bodson/acscr/&quot; rel=&quot;nofollow&quot;&gt;website&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="177" LastEditorUserId="177" LastEditDate="2012-10-31T04:08:38.747" LastActivityDate="2012-10-31T04:08:38.747" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="222" PostTypeId="1" CreationDate="2012-10-29T17:23:11.143" Score="8" ViewCount="186" Body="&lt;p&gt;In my application, my robot has the following physical setup:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Differential drive mechanics with feedback (wheel encoders)&lt;/li&gt;&#xA;&lt;li&gt;Commercially available webcam mounted with a known transform to the base of the robot (RGB, no depth)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The robot will be navigating through a structured, indoor type environment (think office, home, or university), and I would like to be able to determine the navigable paths through the environment using my vision sensor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the best way to approach the problem of finding safe paths to travel when given a single vision sensor?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt;  I think that I am more interested in the vision processing techniques than the actual path-planning mechanics.&lt;/p&gt;&#xA;" OwnerUserId="22" LastEditorUserId="22" LastEditDate="2012-10-29T20:51:53.350" LastActivityDate="2012-11-08T04:26:43.200" Title="Floor Segmentation to Determine Navigable Paths" Tags="&lt;computer-vision&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="223" PostTypeId="2" ParentId="213" CreationDate="2012-10-29T17:44:27.130" Score="19" Body="&lt;p&gt;The &lt;a href=&quot;https://developer.android.com/tools/adk/adk2.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Android Accessory Development Kit (ADK)&lt;/a&gt; should do everything you need.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://www.xda-developers.com/wp-content/uploads/2012/05/hardwaresoftware.jpg?f39ce1&quot; alt=&quot;ADK&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's an Arduino board that is specifically designed to interact with Android. You can connect the two over Bluetooth or USB (or WiFi/Ethernet, I think).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since the whole architecture is open, you can use each part for what it's best at. You write the Android code to get data from the phone's built-in sensors and control the display. And you write the Arduino code to control actuators, servo's and other sensors that phone's don't come. The code to communicate between the two is provided open source via Google.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the &lt;a href=&quot;http://arduino.cc/blog/2011/05/10/google-launches-android-open-accessory-development-kit-based-on-arduino/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Arduino Blog&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The Android Open Accessory Development Kit (ADK) provides an&#xA;  implementation of an Android USB accessory that is based on the&#xA;  Arduino open source electronics prototyping platform, the accessory’s&#xA;  hardware design files, code that implements the accessory’s firmware,&#xA;  and the Android application that interacts with the accessory. The&#xA;  hardware design files and code are contained in the ADK package&#xA;  download.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Most of the examples are designed around using the phone as a graphical interface for some sort of hardware accessory like a clock. But there's no reason you couldn't access the phone's sensors as well and pass data back and forth.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Adafruit even mentions using it to make robots on their &lt;a href=&quot;https://www.adafruit.com/products/563&quot; rel=&quot;nofollow noreferrer&quot;&gt;store's page&lt;/a&gt; for the ADK:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Fast track your Android phone hardware development or just design&#xA;  &lt;strong&gt;cell-phone robots&lt;/strong&gt; with the Arduino ADK! The Arduino ADK is a&#xA;  microcontroller board based on the powerful ATmega2560 (datasheet). It&#xA;  has a USB host interface to connect with Android based phones, and a&#xA;  power supply boost converter to charge up the phone from DC power&#xA;  while its plugged into the ADK&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;(emphasis mine)&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="142" LastEditorUserId="-1" LastEditDate="2017-03-10T09:42:48.650" LastActivityDate="2012-10-29T17:44:27.130" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="224" PostTypeId="2" ParentId="99" CreationDate="2012-10-29T18:10:04.630" Score="8" Body="&lt;p&gt;It sounds like you're observing the symptom of &quot;lost bytes&quot;. There are several different things that can cause an AVR to lose bytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It sounds like you are &lt;em&gt;guessing&lt;/em&gt; that it's losing bytes when new bytes are coming in while the buffer is full. While there are several remedies to fix or at least ameliorate that particular problem, those approaches are useless and counter-productive if the real cause of the &quot;lost bytes&quot; is something else.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first thing I would do in your shoes is to set up some sort of &quot;status debug&quot; port that gives me a clue of why exactly bytes have been lost -- at least a status LED. Once you know why bytes are being lost, you can apply the appropriate remedy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most modern protocols have some sort of check value at the end of each packet.&#xA;It's nice if your status debug system can report on the packet goodput rate and the packet error rate -- at least blink a green LED for each validated packet and a red LED for each failed packet check.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since (especially with radio connections) the occasional corrupted byte is pretty much inevitable, most modern protocols are carefully designed such that if &lt;em&gt;any&lt;/em&gt; byte is corrupted or lost, the system will eventually discard that packet, and eventually re-sync and correctly handle future packets.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Bytes lost because the interrupt handler somehow never put them into the buffer&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Often bytes are lost because the interrupt handler somehow never put them into the buffer. There are several causes, each with a different remedy: external problems, and internal interrupts turned off too long.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;External problems&lt;/strong&gt;:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Line noise causing errors&lt;/li&gt;&#xA;&lt;li&gt;Physical wired connections accidentally getting temporarily unplugged&lt;/li&gt;&#xA;&lt;li&gt;Loss of signal on radio connections&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Typically we clip an oscilloscope to the input pin and -- if we're lucky -- we can see the problem and try various techniques to see if that cleans up the signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even when the signal at the input pin looks perfect, we can still have data loss issues.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Immediately after the last bit of a byte comes in a &lt;a href=&quot;https://en.wikipedia.org/wiki/Universal_asynchronous_receiver/transmitter#Synchronous_transmission&quot; rel=&quot;nofollow noreferrer&quot;&gt;USART&lt;/a&gt; or &lt;a href=&quot;http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus&quot; rel=&quot;nofollow noreferrer&quot;&gt;SPI&lt;/a&gt; port,&#xA;normally the interrupt handler for that port is triggered, and that interrupt handler pulls that byte and sticks it into a circular buffer. However, if the &lt;strong&gt;interrupts are turned off too long&lt;/strong&gt;, the next byte to come in that port will inevitably overwriting and losing the first byte -- the interrupt handler for that port never sees that first byte. The four &quot;ways an interrupt handler can be turned off too long&quot; are listed at &lt;a href=&quot;https://electronics.stackexchange.com/questions/35835/what-can-be-the-cause-of-an-exceptionally-large-latency-for-the-uart-receive-int/44779#44779&quot;&gt;&quot;What can be the cause of an exceptionally large latency for the UART receive interrupt?&quot;&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To fix this problem, you need to get the longest time an interrupt handler is ever turned off to be less than the time to transfer one character. So you must either&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Reduce the amount of time interrupts are turned off; or&lt;/li&gt;&#xA;&lt;li&gt;Slow down the communication bit rate to increase the time to transfer one character;&lt;/li&gt;&#xA;&lt;li&gt;Or both.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;It's very tempting to write the interrupt routine such that, immediately after it puts a byte into the circular buffer, the same interrupt routine then checks to see if it's a complete packet and, if so, completely parse and handle it. Alas, parsing usually takes so long that any further bytes coming in the same or any other port are lost.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We typically fix this by reducing each interrupt handler (and therefore the time interrupts are disabled while processing this handler) to the minimum possible to grab a byte and stick it in the circular buffer and return from interrupt.&#xA;All the packet-parsing and packet-handling stuff executes with interrupts enabled.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The simplest way is for the main loop (AKA the &quot;background task&quot;) to periodically&#xA;call a function that checks if there is a complete packet in the circular buffer,&#xA;and if so parse and handle it. Other more complex approaches involve second-level interrupt handlers, &lt;a href=&quot;http://www.nongnu.org/avr-libc/user-manual/group__avr__interrupts.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;nested interrupts&lt;/a&gt;, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, even when the interrupt handler perfectly receives every byte and correctly puts it into the buffer, sometimes a system can still lose bytes from buffer overflow:&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Bytes lost from buffer overflow&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Many people write packet handlers that don't do anything until the handler sees a complete packet in the buffer -- then the handler processes the entire packet as a whole. That approach overflows the buffer and data is lost if any incoming packet is larger than you are expecting, too big to fit in the buffer -- &lt;strong&gt;single-packet overflow&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even if your buffer is plenty big enough to hold the largest possible packet, sometimes during the time you're processing &lt;em&gt;that&lt;/em&gt; packet, the next packet is so large that it overflows the circular queue before your packet-handler gets around to removing the first packet from the queue to make room for future packets -- &lt;strong&gt;two-packet overflow&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there some way your status debug system could detect and signal if a byte comes in and it has to be thrown away because there's no more room in the queue?&#xA;The simple solution to both these problems is to increase the size of the buffer to hold at least two maximum-size packets, or somehow change the thing that's sending the packets to send smaller packets -- so two packets will fit in the space you have now.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sometimes incoming data fills the buffers faster than the packet handler can pull data out of the buffer. Increasing the size of the buffer only briefly delays the problem, and sending smaller packets (but more of them) will probably only make things worse. A real-time system &lt;em&gt;must&lt;/em&gt; process incoming data at least as fast as that data can come in; otherwise the &lt;strong&gt;processor overload&lt;/strong&gt; will only make the processor get further and further behind. Is there some way your status debug system could detect and signal this sort of overflow?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If this overflow only happens rarely, perhaps the simplest &quot;solution&quot; (arguably merely a hack) is to handle it in more-or-less the same way you would handle a (hopefully rare) power glitch or loss-of-signal on a radio connection: when an overflow is detected, have the AVR erase the entire buffer and pretend it never received those bytes. Most modern protocols are carefully designed such that, if any packet is lost, the system will eventually re-sync and correctly handle future packets.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To really fix this problem requires somehow making the &quot;time to process a packet&quot; less than &quot;time from the end of one packet to the end of the next packet&quot;.&#xA;so you must either&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Reduce the bit rate.&lt;/li&gt;&#xA;&lt;li&gt;Modify the sender to give the AVR more time to process a packet -- perhaps unconditionally send 50 additional &quot;dummy bytes&quot; in the packet preamble -- or however many is needed to give the AVR more than enough time to completely process the last packet and get ready for the next packet.&lt;/li&gt;&#xA;&lt;li&gt;Decrease the time to process a packet&lt;/li&gt;&#xA;&lt;li&gt;Or some combination.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The wall-clock time to process a packet involves both the time the AVR spends in actually processing the packet, and also the time the AVR spends doing &quot;other stuff&quot; such as dealing with all the &lt;em&gt;other&lt;/em&gt; I/O ports and interrupt handlers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some methods of decreasing the time to actually process a packet are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Sometimes it's faster to copy the packet out of the queue into some other buffer for further processing, removing it from the circular queue. It makes the packet-handler simpler if the packet starts at the beginning of that other buffer, so key parts of the packet are a fixed constant offset from the beginning of that buffer. (This has the advantage of making it impossible for the serial interrupt handler, which only writes into the circular queue, to accidentally corrupt that packet after it's been copied to that other buffer.) (This approach lets you use tested and &quot;optimized&quot; and known-good functions that handle numbers represented as &lt;a href=&quot;http://en.wikipedia.org/wiki/ASCII&quot; rel=&quot;nofollow noreferrer&quot;&gt;ASCII&lt;/a&gt; strings of hex digits or decimal digits in consecutive order, which may run faster operating on that linear buffer than &quot;equivalent&quot; functions that also have to deal with the wrap-around split of a circular buffer). This requires both the queue and the other buffer to each be at least the size of the maximum possible packet.&lt;/li&gt;&#xA;&lt;li&gt;Sometimes it's faster to leave the packet in the queue while parsing it and remove it from the queue only after the packet handler is completely done with it.&lt;/li&gt;&#xA;&lt;li&gt;Sometimes a pair of &quot;ping-pong&quot; buffers is faster than a circular queue.&lt;/li&gt;&#xA;&lt;li&gt;Many systems use only a single buffer large enough for the largest possible valid packet, and completely disable interrupts from that port until the interrupt handler has finished with the last packet and is ready for the next packet.&lt;/li&gt;&#xA;&lt;li&gt;Somehow actually do less work per packet.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;More general approaches to dealing with situations where &quot;other stuff&quot; is eating so much time that there's not enough time to deal with the packet in the buffer (and may also help reduce the time to actually process the packet):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If you're lucky, you can find some algorithmic tweaks to effectively do the same work in fewer cycles.&lt;/li&gt;&#xA;&lt;li&gt;Load-shedding: do less important stuff less often; or perhaps don't do them at all in times of heavy load. (As implemented in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_Guidance_Computer#PGNCS_trouble&quot; rel=&quot;nofollow noreferrer&quot;&gt;Apollo 11 AGC&lt;/a&gt;).&lt;/li&gt;&#xA;&lt;li&gt;yield() more often: if your main loop does fair round-robin cycling between &quot;if we have a complete packet from port 1, handle it&quot; and &quot;if we have a complete packet from port 2, handle it&quot;, and the packet parser for either one takes so long that the buffer for the &lt;em&gt;other&lt;/em&gt; port overflows, it may help to break the packet parser up into shorter pieces and do only a little processing each time through the main loop, giving the &lt;em&gt;other&lt;/em&gt; packet parser a chance to deal with packets before its buffer overflows. Perhaps even consider switching to a pre-emptive task scheduler or a full-up RTOS.&lt;/li&gt;&#xA;&lt;li&gt;yield() less often: sometimes a processor spends more time in &quot;task switching&quot; or &quot;multitasking overhead&quot; than actually doing anything productive.&lt;/li&gt;&#xA;&lt;li&gt;Reduce the time spent processing interrupt handlers. (&lt;a href=&quot;http://www.cs.utah.edu/~regehr/papers/lctes05/regehr-lctes05.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Preventing Interrupt Overload&lt;/a&gt; ). High-frequency pulses on one interrupt line can pause main loop tasks indefinitely. It may be necessary to program each low-priority interrupt handler to recognize high-load situations and completely disable its own particular interrupt before re-enabling global interrupts at its return-from-interrupt instruction, and have the main loop recognize low-load situations and re-enable those interrupts.&lt;/li&gt;&#xA;&lt;li&gt;Increase the clock rate of the processor.&lt;/li&gt;&#xA;&lt;li&gt;Switch to a more powerful processor. A &quot;more powerful&quot; processor is &lt;em&gt;not&lt;/em&gt; the same as &quot;a processor with a faster clock rate&quot;. You might be able to find a processor that does the same work in &lt;em&gt;fewer&lt;/em&gt; cycles than your particular 8-bit AVR -- perhaps some other AVR with specialized peripherals that do work in hardware that you're currently doing in software, freeing up software cycles for other things; or perhaps a 32-bit processor that can do certain tasks in software in fewer cycles than any 8-bit processor.&lt;/li&gt;&#xA;&lt;li&gt;Occasionally in robotics &quot;one big fast processor&quot; is better than lots of little processors: the amount of code and the communication latency to copy a message from one task to another task on the same processor is always much less than to copy that same message from one task to another task on some other processor.&lt;/li&gt;&#xA;&lt;li&gt;Often in robotics it makes things simpler and more &quot;provably correct&quot; to add more processors, perhaps one processor per leg or even &lt;a href=&quot;http://openservo.com&quot; rel=&quot;nofollow noreferrer&quot;&gt;one processor per servo&lt;/a&gt;. If you have one task per processor, then many of the above potential problems can't ever happen.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="187" LastEditorUserId="-1" LastEditDate="2017-04-13T12:33:08.317" LastActivityDate="2015-02-13T18:12:04.597" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="225" PostTypeId="2" ParentId="210" CreationDate="2012-10-29T18:42:50.343" Score="9" Body="&lt;p&gt;A co-worker and I once implemented a &lt;a href=&quot;https://en.wikipedia.org/wiki/Simplex_algorithm&quot; rel=&quot;nofollow noreferrer&quot;&gt;simplex algorithm&lt;/a&gt; for on-the-fly tuning of the PID parameters of a current control loop for a motor. Essentially the algorithm would modify one parameter at a time and then collect data on some feedback parameter that was our measure of goodness. Ours was percent deviation from a current target setpoint. Based on whether the feedback parameter got better or worse, the next parameter was modified accordingly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or, in Wikipedia speak:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Let a linear program be given by a canonical tableau. The simplex&#xA;  algorithm proceeds by performing successive pivot operations which&#xA;  each give an improved basic feasible solution; the choice of pivot&#xA;  element at each step is largely determined by the requirement that&#xA;  this pivot does improve the solution.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Technically we used the &lt;a href=&quot;https://en.wikipedia.org/wiki/Nelder%E2%80%93Mead_method&quot; rel=&quot;nofollow noreferrer&quot;&gt;Nelder-Mead method&lt;/a&gt; which is a type of simplex. It could also be described as a &lt;a href=&quot;https://en.wikipedia.org/wiki/Hill_climbing&quot; rel=&quot;nofollow noreferrer&quot;&gt;hill climbing algorithm&lt;/a&gt; as well if you watch how it modifies it's input parameters as it searches for an optimum output parameter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/FdWKc.gif&quot; alt=&quot;Nelder-Mead animation&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nedler-Mead worked best in our case because it can chase a setpoint. This was important because our current target setpoint changed as torque demand increased.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;the Nelder–Mead technique is a heuristic search method that can&#xA;  converge to non-stationary points&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="142" LastActivityDate="2012-10-29T18:42:50.343" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="226" PostTypeId="2" ParentId="184" CreationDate="2012-10-29T19:36:27.907" Score="6" Body="&lt;p&gt;In my opinion, the question &quot;How long before we have [X] type of robots?&quot; is flawed. It assumes some kind of linear progress towards a goal that we already know, but scientific progress doesn't work that way. One cannot honestly say &quot;if we had 100x of today's computing power, we could achieve human-level AI&quot; (although it sounds like something Ray Kurzweil &lt;em&gt;might&lt;/em&gt; say). Also, we cannot predict today what robots 50 years from now will look like.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you had asked anybody in the sixties about the future of computers, they wouldn't have predicted that all of us carry around a super computer in our pockets which we use to publicly answer a question asked by somebody on the other side of the planet.&lt;/p&gt;&#xA;" OwnerUserId="132" LastActivityDate="2012-10-29T19:36:27.907" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="227" PostTypeId="2" ParentId="222" CreationDate="2012-10-29T19:43:25.863" Score="2" Body="&lt;p&gt;Have a look at the &lt;a href=&quot;http://scholar.google.de/scholar?q=monocular+vision+obstacle+avoidance&quot; rel=&quot;nofollow&quot;&gt;literature&lt;/a&gt; that is available on this subject. &#xA;In principle you can go two different ways: behavior based or sense/plan/act.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;for the behavior based approach there are a lot of ways you could achieve your goal, and it also depends on your environment. One very simple and elegant solution that I saw (don't have reference at hand) was to assume pixels that are just in front of you to be ground, and extend the pattern through some sort of flooding algorithm. The projection of this onto the ground plane is traversable. Optical flow could be another possible solution, which takes a little more processing power, but might be more robust on textured environments. Have a look at the literature around, I am sure there a plenty more ways.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;more complicated, but more robust would be some sort of structure from motion to get a model of your environment. This is not so trivial with a monocular camera, but possible. You could then generate a traversability map and perform path planning (some sort of A* or D*) and then path following on it. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="127" LastActivityDate="2012-10-29T19:43:25.863" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="228" PostTypeId="2" ParentId="222" CreationDate="2012-10-30T05:56:26.977" Score="1" Body="&lt;p&gt;You could have a look at visual servoing techniques with occlusion. Namely: try to reach &quot;waypoints&quot; on the floor or walls (e.g. doors, ...) using &lt;a href=&quot;http://en.wikipedia.org/wiki/visual_servoing&quot; rel=&quot;nofollow&quot;&gt;visual servoing&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="56" LastEditorUserId="187" LastEditDate="2012-11-08T04:26:43.200" LastActivityDate="2012-11-08T04:26:43.200" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="229" PostTypeId="1" AcceptedAnswerId="955" CreationDate="2012-10-30T12:59:16.537" Score="10" ViewCount="787" Body="&lt;p&gt;In ROS, I cannot get [ERROR] logs to print in red when I use python. How can I make them appear in red instead of black?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, the following Python:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;rospy.logerr(&quot;No analog input received.&quot;)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;produces this output in &lt;strong&gt;black&lt;/strong&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;[ERROR] [WallTime: 135601422.876123] No analog input received.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;whereas the following C++:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ROS_ERROR(&quot;No analog input received.&quot;);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;produces the following output in &lt;strong&gt;red&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;[ERROR] [135601551.192412]: No analog input received.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="40" LastActivityDate="2013-02-20T10:03:24.740" Title="Red [ERROR] output in python in ROS" Tags="&lt;ros&gt;&lt;python&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="230" PostTypeId="1" AcceptedAnswerId="232" CreationDate="2012-10-30T14:09:21.773" Score="30" ViewCount="15411" Body="&lt;p&gt;Can &lt;a href=&quot;http://www.ros.org/wiki/&quot;&gt;ROS&lt;/a&gt; run on a Raspberry Pi?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ROS is resigned to run on a network of machines, with different machines, even different cores on the same machine doing different jobs. Can one of those machines be a Raspberry Pi?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am considering using an R-Pi as the &lt;a href=&quot;http://en.wikipedia.org/wiki/EtherCAT&quot;&gt;EtherCAT&lt;/a&gt; master on a mobile robot, communicating with the main PC over WiFi, using a dongle.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Can an R-Pi even run ROS at all?&lt;/li&gt;&#xA;&lt;li&gt;Would an R-Pi have enough processing power to do some 1kHz servoing?&lt;/li&gt;&#xA;&lt;li&gt;Would it be possible to run some servoing on the host through the WiFi connecion?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="40" LastEditorUserId="272" LastEditDate="2012-11-11T21:30:50.410" LastActivityDate="2021-04-27T15:00:07.827" Title="Can ROS run on a Raspberry Pi?" Tags="&lt;ros&gt;&lt;raspberry-pi&gt;&lt;wifi&gt;" AnswerCount="14" CommentCount="0" FavoriteCount="11" ContentLicense="CC BY-SA 3.0" />
  <row Id="231" PostTypeId="1" CreationDate="2012-10-30T15:01:28.793" Score="20" ViewCount="5731" Body="&lt;p&gt;With a 600 mm (2 foot) motor-to-motor quadcopter, what frequency does my output-sense-calculate-output update loop need to stay stable?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm estimating a total takeoff weight of very roughly 2 pounds ( 0.9 kg ),&#xA;which I expect to be mostly motors and batteries.&lt;/p&gt;&#xA;" OwnerUserId="187" LastActivityDate="2016-06-17T15:36:35.110" Title="What frequency does my quadcopter output-sense-calculate-output update loop need to stay stable?" Tags="&lt;stability&gt;&lt;quadcopter&gt;" AnswerCount="4" CommentCount="1" FavoriteCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="232" PostTypeId="2" ParentId="230" CreationDate="2012-10-30T15:12:46.763" Score="16" Body="&lt;p&gt;The official RaspberryPi operating system is a version of Debian, but there's also an ArchLinux version on &lt;a href=&quot;http://www.raspberrypi.org/downloads&quot; rel=&quot;nofollow noreferrer&quot;&gt;their website&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Despite ROS's claim of being cross-platform, they only officially support Ubuntu at the moment. However, experimental installations have been made for the following OSes, according to &lt;a href=&quot;http://www.ros.org/wiki/ROS/Installation&quot; rel=&quot;nofollow noreferrer&quot;&gt;ros.org&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;OS X (Homebrew)&lt;/li&gt;&#xA;&lt;li&gt;Fedora&lt;/li&gt;&#xA;&lt;li&gt;Gentoo&lt;/li&gt;&#xA;&lt;li&gt;OpenSUSE&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Debian&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Arch Linux&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;Windows&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;While I don't have any first-hand experience (my two Pis are shamefully sitting in the corner), ros.org has a quick and dirty &lt;a href=&quot;http://www.ros.org/wiki/ROSberryPi/Setting%20up%20ROS%20on%20RaspberryPi&quot; rel=&quot;nofollow noreferrer&quot;&gt;setup guide&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are similar instructions on &lt;a href=&quot;http://answers.ros.org/question/34501/how-to-setting-up-ros-on-raspberrypi/&quot; rel=&quot;nofollow noreferrer&quot;&gt;answers.ros.org&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case you run into any problems, the &lt;a href=&quot;http://www.raspberrypi.org/phpBB3/viewtopic.php?f=37&amp;amp;t=6552&quot; rel=&quot;nofollow noreferrer&quot;&gt;RaspberryPi forums&lt;/a&gt; might also be of some help. And, of course, SE's got it's very own &lt;a href=&quot;https://raspberrypi.stackexchange.com/&quot;&gt;PI.SE&lt;/a&gt; (Thanks to @Jivings and @ppumkin for the reminder).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Otherwise, just google &quot;ros raspberry pi&quot; and you should find plenty more information.&lt;/p&gt;&#xA;" OwnerUserId="131" LastEditorUserId="-1" LastEditDate="2017-04-13T12:56:29.393" LastActivityDate="2012-11-12T16:33:30.737" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="233" PostTypeId="5" CreationDate="2012-10-30T15:28:25.577" Score="0" Body="&lt;p&gt;The Kinect is a combined camera and infrared depth sensor mounted on a motorized pivot and was originally developed for the Microsoft XBox 360. Because of its comparatively low cost (vs a laser range finder) and high accuracy (vs sonar or infrared sensors), it was quickly hacked and garnered widespread adaptation in the robotics community, which prompted Microsoft to release drivers and libraries for the Kinect from its Windows 7 platform onwards. Unofficial open-source libraries and drivers are also available for Linux-based operating systems, with Ubuntu 12.04 supporting the Kinect out-of-the-box.&lt;/p&gt;&#xA;" OwnerUserId="131" LastEditorUserId="131" LastEditDate="2012-10-30T15:45:50.047" LastActivityDate="2012-10-30T15:45:50.047" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="234" PostTypeId="4" CreationDate="2012-10-30T15:28:25.577" Score="0" Body="The Kinect is a combined camera and infrared depth sensor mounted on a motorized pivot and was originally developed for the Microsoft XBox 360. " OwnerUserId="131" LastEditorUserId="131" LastEditDate="2012-10-30T15:45:46.363" LastActivityDate="2012-10-30T15:45:46.363" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="235" PostTypeId="1" CreationDate="2012-10-30T15:29:36.713" Score="21" ViewCount="1736" Body="&lt;p&gt;I've seen 3 approaches to mounting batteries on a multicopter:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;All the batteries rigidly mounted near the center of the airframe&lt;/li&gt;&#xA;&lt;li&gt;All the batteries in a bag hanging under the center of the airframe&lt;/li&gt;&#xA;&lt;li&gt;Each rotor has its share of the batteries rigidly mounted near/under it. (For example, a quadcopter with 1/4 of all the batteries mounted underneath each motor).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Which design is the best, and why?&#xA;If there is no one best design, what are the advantages/tradeoffs between the designs?&#xA;Is there some other design I'm overlooking that is better in some way?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(This question focuses on multirotor flying machines.&#xA;For ground vehicles, see &quot; &lt;a href=&quot;https://robotics.stackexchange.com/questions/119/is-it-better-to-have-weight-distributed-over-the-wheels-or-the-center-of-the-rob&quot;&gt;Is it better to have weight distributed over the wheels or the center of the robot?&lt;/a&gt; &quot;).&lt;/p&gt;&#xA;" OwnerUserId="187" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2014-12-21T03:41:17.503" Title="Is it better to have batteries distributed at the rotors or the center of the multicopter?" Tags="&lt;design&gt;&lt;stability&gt;&lt;quadcopter&gt;" AnswerCount="5" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="236" PostTypeId="2" ParentId="230" CreationDate="2012-10-30T17:29:54.867" Score="6" Body="&lt;p&gt;This question was &lt;a href=&quot;https://robotics.stackexchange.com/a/232/37&quot;&gt;well-answered by ThomasH&lt;/a&gt;, but in addition I just want to suggest the possibility of &lt;em&gt;wireless tethering&lt;/em&gt; the quadcopter to a laptop. That is, just write a nice-and-fast wireless (wifi?, bluetooth?) communication protocol for the quadcopter, then do the heavy CPU stuff on a laptop, while transmitting the instructions and sensor queries to the R-PI. We tried many implementations, and settled on a similar setup for all our small robots. Also almost every jaw-dropping quadcopter implementation is set up in this way. It makes life easy, and allows you to use the big-hitter libraries without sacrificing speed. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's be honest here, that quadcopter is very likely not going to get outside wireless range of your laptop anyway.&lt;/p&gt;&#xA;" OwnerUserId="163" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2013-04-11T12:38:43.890" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="237" PostTypeId="1" AcceptedAnswerId="376" CreationDate="2012-10-30T17:41:41.563" Score="8" ViewCount="4655" Body="&lt;p&gt;A common scenario is to have a PC that sends commands to a microcontroller via RS232.  My PC program is sending commands (each of which are composed of multiple bytes) as fast as it can to a small robot.  The microcontroller on the robot is a Parallax Propellor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have noticed that if I don't process bytes quickly enough on the microcontroller side of things, it can very quickly overflow the default buffers in the popular serial port drivers that are available for the Propellor. (The buffers are generally anywhere from 16 to 256 bytes).  I can arbitrarily increase these buffers or create my own larger circular buffer, but I would like to have a more methodical approach to determining appropriate size requirements and/or the minimal amount of time I can wait before pulling bytes out of the serial port driver buffer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At 1st glance:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;115200 == 115.2 bits per millisecond == ~12.8 bytes per millisecond (assuming 1 stop bit)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;1) Is that a valid way to calculate timing for serial transmissions?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, given my specific setup:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;PC Program &amp;lt;--&gt; Bluetooth Serial Profile Driver &amp;lt;--&gt; Bluetooth Transceiver &amp;lt;-&lt;em&gt;*&lt;/em&gt;-&gt; BlueSMIRF Wireless Modem &amp;lt;--&gt; Parallax Propellor Program&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;2) What is the maximum amount of data I can send for a given period of time consistently without eventually running in to problems?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe I'm over complicating things, but it seems like there are potentially multiple buffers involved in the transmission chain above.  How do others commonly deal with this? Do they throttle the PC sending to a known safe rate? Implement flow control?  If implementing flow control, how does that affect bandwidth and response times?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(If it matters, my experiment is to use a joystick on the PC to control multiple servos with instant reaction to the joystick movements. So every small movement of the joystick results in multiple commands being sent to the microcontroller. The commands are not just simple positional commands though, they also involve acceleration/deacceleration of servos over time and this is the reason that the microcontroller spends a significant amount of clock cycles before processing new bytes.)&lt;/p&gt;&#xA;" OwnerUserId="167" LastActivityDate="2012-11-21T17:41:00.177" Title="How to calculate serial speed and buffer requirements for PC to microcontroller communications?" Tags="&lt;microcontroller&gt;&lt;serial&gt;&lt;rs232&gt;" AnswerCount="5" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="238" PostTypeId="2" ParentId="237" CreationDate="2012-10-30T22:05:47.807" Score="3" Body="&lt;p&gt;There is no right answer to this, and I'm sure you already know (or can guess) all you need to solve this problem. However&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first obvious thing to say is that downstream devices must be capable of dealing with the flow of data, both in the long term and in the short term. In the short term, devices use buffering to cope with the flow. In the long term, the need processing power to act on the data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One problem you have is that you don't control all of the steps in your chain, so if one of them is causing delays, there might not be much you can do about it, short of replacing it. Hoever, I'd have thought that the Bluetooth serial driver would have a nice big buffer, and would play nice with the transceiver and BlueSMIRF, so it's probably safe to ignore them. I guess the real problem is between the Propeller and the PC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What seems to be happening in your case is that the interaction between the data producer and the consumer is producing unpredictable queue lengths, and you would like to apply some proper theory to that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Interestingly, studies have been done on exactly this problem with regards to queuing at restaurants, E.G. &lt;a href=&quot;http://www.ipedr.com/vol6/11-A00030.pdf&quot; rel=&quot;nofollow&quot;&gt;Case Study for Restaurant Queuing Model&lt;/a&gt; and &lt;a href=&quot;http://faculty.chicagobooth.edu/laurens.debo/Research/Papers/Debo-Veeraraghavan-Sputtering-Equilibria-July-2012.pdf&quot; rel=&quot;nofollow&quot;&gt;Equilibrium in Queues under Unknown Service Times and Service Value&lt;/a&gt;. But there are easier to understand resources online, like &lt;a href=&quot;http://www.win.tue.nl/~iadan/queueing.pdf&quot; rel=&quot;nofollow&quot;&gt;Queueing Theory&lt;/a&gt; &lt;a href=&quot;http://www.embedded.com/design/connectivity/4023310/Queueing-Theory-for-Dummies&quot; rel=&quot;nofollow&quot;&gt;Queueing Theory for Dummies&lt;/a&gt;. But the one you really want is probably &lt;a href=&quot;http://www.embedded.com/design/other/4024545/How-to-size-message-queues&quot; rel=&quot;nofollow&quot;&gt;&lt;strong&gt;How to size message queues&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You have a few options:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Just make sure that the PC sends data at an orderly rate. Decide exactly what rate you really need, and don't go above that.&lt;/li&gt;&#xA;&lt;li&gt;Use a &lt;a href=&quot;http://en.wikipedia.org/wiki/Real-time_operating_system&quot; rel=&quot;nofollow&quot;&gt;Realtime Operating System&lt;/a&gt; on the MCU to make sure that the bytes are being dealt with in a timely manner.&lt;/li&gt;&#xA;&lt;li&gt;Implement flow control.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;But here's my preferred solution. &lt;a href=&quot;http://en.wikipedia.org/wiki/IEEE_1355&quot; rel=&quot;nofollow&quot;&gt;&lt;strong&gt;Spacewire&lt;/strong&gt;&lt;/a&gt;! Or at least use the flow control system from it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Essentially the downstream device sends bytes to the upstream device stating the number of empty places in its FIFO. This way the data producer only sends what the consumer can cope with.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're interested, you can read the full Spacewire standard: &lt;a href=&quot;http://ams.cern.ch/AMS/Electronics/Docs/1355-1995.pdf&quot; rel=&quot;nofollow&quot;&gt;IEEE 1355&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2012-10-30T22:05:47.807" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="239" PostTypeId="2" ParentId="235" CreationDate="2012-10-30T23:51:23.823" Score="8" Body="&lt;p&gt;Center, you want the moment of inertia to be as small as possible.&lt;/p&gt;&#xA;" OwnerUserId="65" LastActivityDate="2012-10-30T23:51:23.823" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="240" PostTypeId="2" ParentId="231" CreationDate="2012-10-30T23:54:30.983" Score="2" Body="&lt;p&gt;50-200Hz is pretty normal as we can see in the open source projects.  You have to consider that in most cases the inertia of the motors and communication with the ESCs is the limiting factor.&lt;/p&gt;&#xA;" OwnerUserId="65" LastEditorUserId="158" LastEditDate="2012-10-31T16:04:47.520" LastActivityDate="2012-10-31T16:04:47.520" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="241" PostTypeId="2" ParentId="230" CreationDate="2012-10-31T03:45:50.937" Score="2" Body="&lt;p&gt;I would check out the &lt;a href=&quot;http://www.ros.org/wiki/rosserial&quot; rel=&quot;nofollow&quot;&gt;rosserial&lt;/a&gt; project. Basically, it generates some code for Arduino for communicating over serial to a ROS node on the computer. I bet you can convert it to the Raspberry Pi, so that you can use some other protocol to communicate between the Pi and the host computer. &lt;/p&gt;&#xA;" OwnerUserId="42" LastActivityDate="2012-10-31T03:45:50.937" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="242" PostTypeId="5" CreationDate="2012-10-31T06:39:35.803" Score="0" Body="&lt;p&gt;Mindstorms is a popular robotics line launched by LEGO. The kits include software and hardware to create small, customizable, and programmable robots. Each kit includes a programmable 'Brick' computer that controls the system, a set of modular sensors and motors, and LEGO parts from the Technics line to create the mechanical systems.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;External links&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://mindstorms.lego.com&quot; rel=&quot;nofollow&quot;&gt;Official Website&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://wikipedia.org/wiki/Lego_Mindstorms&quot; rel=&quot;nofollow&quot;&gt;Wikipedia&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="38" LastEditorUserId="38" LastEditDate="2012-10-31T16:04:51.127" LastActivityDate="2012-10-31T16:04:51.127" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="243" PostTypeId="4" CreationDate="2012-10-31T06:39:35.803" Score="0" Body="Mindstorms is a popular robotics line launched by LEGO. The kits include software and hardware to create small, customizable, and programmable robots. Each kit includes a programmable 'Brick' computer that controls the system, a set of modular sensors and motors, and LEGO parts from the Technics line to create the mechanical systems." OwnerUserId="38" LastEditorUserId="38" LastEditDate="2012-10-31T16:04:38.100" LastActivityDate="2012-10-31T16:04:38.100" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="244" PostTypeId="5" CreationDate="2012-10-31T06:47:40.060" Score="0" Body="&lt;p&gt;NXT is the latest installation in the &lt;a href=&quot;https://robotics.stackexchange.com/tags/mindstorms&quot;&gt;Mindstorms&lt;/a&gt; line launched by LEGO. The NXT includes many improvements over the old RXC line, including a smarter 'NXT Brick', powerful sensors, and an easy-to-use graphical programming language.&lt;/p&gt;&#xA;" OwnerUserId="15160" LastEditorUserId="15160" LastEditDate="2019-12-09T10:51:38.253" LastActivityDate="2019-12-09T10:51:38.253" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="245" PostTypeId="4" CreationDate="2012-10-31T06:47:40.060" Score="0" Body="NXT is the latest installation in the Mindstorms line launched by LEGO. The NXT includes many improvements over the old RXC line, including a smarter 'NXT Brick', powerful sensors, and an easy-to-use graphical programming language." OwnerUserId="38" LastEditorUserId="15160" LastEditDate="2019-12-09T10:52:18.850" LastActivityDate="2019-12-09T10:52:18.850" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="246" PostTypeId="2" ParentId="231" CreationDate="2012-10-31T08:02:57.093" Score="17" Body="&lt;p&gt;As Rocketmagnet suggests, what frequency you &quot;need&quot; will depend on a lot of things. The more responsive your rotors are, the more sensitive your craft will be to random spikes in motor commands. These random spikes may be caused by noisy sensor readings caused by physical imperfections, which means you would need to lower your controller gains, which in turn might mean your quadrotor may become more unstable. Some other factors include the rotational inertias of the quadrotor, the propellers' blade pitch, the location of the center of mass, and the motor-to-motor distance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I programmed a flight controller from scratch for my 2 kg tricopter running on an ATmega1280 and found that at:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;50 Hz: It will stay in the air but is nigh impossible to control.&lt;/li&gt;&#xA;&lt;li&gt;100 Hz: It will at least avoid immediately tipping to one side.&lt;/li&gt;&#xA;&lt;li&gt;200 Hz: I can let it loose indoors at hover throttle and it will stay more or less in one spot.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;It may be of interest to note that the higher the control frequency, the more effective your rotor inertias become at being physical dampers, which helps nullify IMU noise and improve flight stability.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But if I &lt;em&gt;had&lt;/em&gt; to give a hard number for a minimum flight controller update frequency for a quadrotor of that size suitable for indoor navigation, based on personal experience...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd say 80 Hz.&lt;/p&gt;&#xA;" OwnerUserId="148" LastEditorUserId="148" LastEditDate="2012-11-01T04:03:10.037" LastActivityDate="2012-11-01T04:03:10.037" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="247" PostTypeId="2" ParentId="229" CreationDate="2012-10-31T12:04:09.617" Score="7" Body="&lt;p&gt;Please see this bug ticket: &lt;a href=&quot;https://code.ros.org/trac/ros/ticket/3691&quot;&gt;https://code.ros.org/trac/ros/ticket/3691&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I filed this bug report (with patch to fix) 13 months ago and am pretty disappointed in the ROS team that they have not put this in trunk.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2012-10-31T12:04:09.617" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="248" PostTypeId="2" ParentId="154" CreationDate="2012-10-31T14:59:03.000" Score="7" Body="&lt;p&gt;It would be nice if we could tell the compiler the range and precision of each fixed-point input variable (perhaps no two having the radix point in the same location), and it would automagically -- at compile time -- use the correct range and precision and rescaling operations for the intermediate values and final values in a series of calculations.&#xA;I've heard rumors that it may be possible to do that in &lt;a href=&quot;http://en.wikibooks.org/wiki/Ada_Programming/Types/delta&quot; rel=&quot;nofollow noreferrer&quot;&gt;the Ada programming language&lt;/a&gt; or in C++ templates.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alas, the closest I've seen is fixed-point arithmetic libraries that require you, the programmer, to manually choose the correct representation and manually verify that each operation maintains adequate range and precision.&#xA;Sometimes they make multiplication and division between mixed variables easier.&#xA;Such as:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://sourceforge.net/projects/avrfix/&quot; rel=&quot;nofollow noreferrer&quot;&gt;AVRfix&lt;/a&gt;: a library for fixed point calculation in s15.16, s7.24 and s7.8 format, entirely written in ANSI C&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://en.wikibooks.org/wiki/Embedded_Systems/Floating_Point_Unit&quot; rel=&quot;nofollow noreferrer&quot;&gt;Embedded Systems: fixed point FFT&lt;/a&gt; lists some libraries for fixed-point FFT calculation&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1824&amp;amp;appnote=en010962&quot; rel=&quot;nofollow noreferrer&quot;&gt;AN617: fixed point routines for the Microchip PICmicro&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://sourceforge.net/directory/?q=%22fixed%20point%22&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;fixed point&quot;&lt;/a&gt; projects on SourceForge.&lt;/li&gt;&#xA;&lt;li&gt;gcc has built-in fixed-point libraries &lt;a href=&quot;https://gcc.gnu.org/onlinedocs/gcc/Fixed-Point.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;a&lt;/a&gt; &lt;a href=&quot;http://gcc.gnu.org/wiki/FixedPointArithmetic&quot; rel=&quot;nofollow noreferrer&quot;&gt;b&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.ti.com/tool/SPRC087&quot; rel=&quot;nofollow noreferrer&quot;&gt;TI IQMath Library&lt;/a&gt; ( and &lt;a href=&quot;http://www.ti.com/tool/sprc542&quot; rel=&quot;nofollow noreferrer&quot;&gt;source&lt;/a&gt; -- Thank you, &lt;a href=&quot;https://robotics.stackexchange.com/a/163/37&quot;&gt;embedded.kyle&lt;/a&gt; ).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="187" LastEditorUserId="187" LastEditDate="2019-03-11T04:14:39.097" LastActivityDate="2019-03-11T04:14:39.097" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="249" PostTypeId="1" CreationDate="2012-10-31T22:24:11.043" Score="16" ViewCount="1606" Body="&lt;p&gt;I would really like a six-axis force/torque sensor for my robot, but I just can't afford one. I was thinking about making one of my own.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have experience using strain gauges, but I can't work out how to arrange them so as to create a six-axis force/torque sensor.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Is this something I could feasibly make myself?&lt;/li&gt;&#xA;&lt;li&gt;How do they work? What is the theory behind them?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I'm curious to know how they work, even if it's not feasible to make one myself.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Added:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just to be clear, I'm talking about &lt;em&gt;force / torque&lt;/em&gt; sensors, like this &lt;a href=&quot;http://www.ati-ia.com/products/ft/ft_models.aspx?id=Nano17&quot; rel=&quot;noreferrer&quot;&gt;ATI Nano 17&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/QwUvX.jpg&quot; alt=&quot;ATI Nano&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not talking about accelerometers or gyros, or MEMS IMUs.&lt;/p&gt;&#xA;" OwnerUserId="40" LastEditorUserId="158" LastEditDate="2014-09-23T15:29:42.137" LastActivityDate="2014-09-23T15:29:42.137" Title="How does a six-axis force/torque sensor work?" Tags="&lt;sensors&gt;&lt;force-sensor&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="250" PostTypeId="2" ParentId="118" CreationDate="2012-11-01T02:55:59.297" Score="2" Body="&lt;p&gt;The reason why you can't see the nxtOSEK logo, is that the enhanced firmware looks the same as the regular firmware, but with several performance and feature enhancements. It isn't specific to nxtOSEK.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To check if the firmware installed properly, visit the &lt;strong&gt;Settings&lt;/strong&gt; menu on the NXT, and then the &lt;strong&gt;NXT Version&lt;/strong&gt; submenu. The top line should read: &lt;code&gt;FW NBC/NXC x.xx&lt;/code&gt;, where &lt;code&gt;x.xx&lt;/code&gt; is the version number of the firmware.&lt;/p&gt;&#xA;" OwnerUserId="38" LastEditorUserId="38" LastEditDate="2012-11-01T04:08:45.253" LastActivityDate="2012-11-01T04:08:45.253" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="251" PostTypeId="2" ParentId="235" CreationDate="2012-11-01T05:11:29.567" Score="16" Body="&lt;p&gt;You almost definitely want to have the battery rigidly mounted to the center of the airframe.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mounting a battery underneath each motor (though I have never seen this) will increase the multicopter's moments of inertia, which will make it more &quot;stable&quot; in that it will more sluggishly lose its balance and thus give a controller more time to react. This, however, is a rather bruteforce way to go about flight stabilization.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hanging the battery from a bag will make the flight characteristics needlessly complicated. Imagine that the &quot;bag&quot; is instead a rope with a weight attached to the end. What happens to the flight characteristics as the length of the rope increases?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depending on the particular chassis design, mounting the battery rigidly can also dampen the motor vibrations, which reduces the need for heavy filtering of inertial measurements.&lt;/p&gt;&#xA;" OwnerUserId="148" LastActivityDate="2012-11-01T05:11:29.567" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="252" PostTypeId="2" ParentId="100" CreationDate="2012-11-01T15:01:02.197" Score="2" Body="&lt;p&gt;As you pointed out, on a robot with high vibration,&#xA;you want connectors that have &quot;spring&quot; (elasticity).&#xA;Even when momentarily jostled slightly out of position,&#xA;the spring pushes everything back into place.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alas, there is a tradeoff -- the higher the vibration that a connector can tolerate without getting accidentally disconnected, the more difficult it is to deliberately connect and disconnect the connector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some connectors you might look at:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.stefanv.com/rcstuff/qf200001.html&quot; rel=&quot;nofollow&quot;&gt;Stefan Vorkoetter&lt;/a&gt; has a nice review of connectors suitable for mid-size RC aircraft (easily handling 20 A), including &lt;a href=&quot;http://en.wikipedia.org/wiki/DC_connector#Anderson_Powerpole_connectors&quot; rel=&quot;nofollow&quot;&gt;Anderson Powerpole connectors&lt;/a&gt; which are the standard 12VDC connector in ham radio.&lt;/li&gt;&#xA;&lt;li&gt;cage clamp terminal strips (also known as spring clamp terminal strips)&lt;/li&gt;&#xA;&lt;li&gt;some kinds of twist-lock bi-pin connector and bayonet connectors&lt;/li&gt;&#xA;&lt;li&gt;some kinds of 8P8C &quot;RJ45&quot; &quot;Ethernet&quot; connectors. &lt;a href=&quot;http://reprap.org/wiki/list_of_electronics&quot; rel=&quot;nofollow&quot;&gt;Many RepRaps&lt;/a&gt; use these connectors to carry power over CAT5 cable to the stepper motors, in a way completely incompatible with any power-over-Ethernet standard or any Ethernet data standard.&lt;/li&gt;&#xA;&lt;li&gt;a few barrel connectors have a retaining groove that lets it snap into place&lt;/li&gt;&#xA;&lt;li&gt;The kind of IDC ribbon cable connector that has a &quot;latch&quot;&lt;/li&gt;&#xA;&lt;li&gt;USB connectors are becoming the standard 5VDC connector&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;(Too many connectors allow parts to gradually slip further and further out of place, until the connection falls apart. This includes most screw connectors, barrel connectors, etc.).&lt;/p&gt;&#xA;" OwnerUserId="187" LastActivityDate="2012-11-01T15:01:02.197" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="253" PostTypeId="2" ParentId="249" CreationDate="2012-11-01T16:54:58.570" Score="8" Body="&lt;p&gt;I don't think its entirely impossible to build something like this, especially if you already have some experience with strain gauges. I think the most common way is to arrange the sensor in a &lt;a href=&quot;http://en.wikipedia.org/wiki/Stewart_platform&quot; rel=&quot;nofollow&quot;&gt;Stewart Configuration&lt;/a&gt;. There are a lot of articles on this, e.g. &quot;Closed-form force sensing of a 6-axis force transducer based on the Stewart platform&quot;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A similar Sensor from Schunk &lt;a href=&quot;http://www.schunk.com/schunk_files/attachments/FT-Nano_017_EN.pdf&quot; rel=&quot;nofollow&quot;&gt;FT Nano&lt;/a&gt; says in the datasheet: &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Monolithic element with three measuring phases with an angle of 120°.&#xA;  Each phase has two semiconductor strain measuring bridges which record&#xA;  deformation in the micrometer range.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="127" LastEditorUserId="127" LastEditDate="2014-09-23T15:02:37.020" LastActivityDate="2014-09-23T15:02:37.020" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="254" PostTypeId="1" AcceptedAnswerId="260" CreationDate="2012-11-01T21:00:11.233" Score="13" ViewCount="829" Body="&lt;p&gt;I have a robot that uses brushed motors in its servo system. These are Maxon 3W motors, with 131:1 planetary gearboxes. The motors are controlled by a PIC microcontroller, running a 1kHz PID controller. The servos are for a low speed high torque application. There is significant backlash between the sensor and the motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maxon offer 12W brushless motors which are the same size. These are better in many ways: double the torque, better heat dissipation, higher efficiency.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem, obviously, is that they require more complex drive electronics. Also, I have heard a couple of people mention that brushed motors are better for servo applications, though they never explained why.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Has anyone else implemented this kind of system?&lt;/li&gt;&#xA;&lt;li&gt;Are there any gotchas when using brushed motors for servos?&lt;/li&gt;&#xA;&lt;li&gt;Is it possible to servo it at low speeds if I only have the 3 integral digital Hall sensors, and no encoder? (I would prefer not to add an encoder because of the money and space cost)&lt;/li&gt;&#xA;&lt;li&gt;It torque ripple likely to be a problem?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="40" LastEditorUserId="37" LastEditDate="2013-05-20T15:45:43.733" LastActivityDate="2013-05-23T14:52:32.803" Title="Should I switch my servo system from brushed to brushless motors?" Tags="&lt;brushless-motor&gt;&lt;servomotor&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="255" PostTypeId="1" AcceptedAnswerId="257" CreationDate="2012-11-01T22:47:12.250" Score="14" ViewCount="1209" Body="&lt;p&gt;I'm really new to robotics, however I am a programmer familiar with several different languages. I don't have a ton of money to spend and I was wondering what is a really good starter kit. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My criteria is for the kit to be inexpensive and &lt;strong&gt;powerful&lt;/strong&gt;, in that its functionality is extensible -- something that would allow the builder to be creative and possibly invent new ways to use it, not just a glorified model kit.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Being extendable to smartphones is a plus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not looking for something easy or introductory, just something powerful, flexible, and cost effective.&lt;/p&gt;&#xA;" OwnerUserId="216" LastEditorUserId="126" LastEditDate="2012-11-14T15:02:20.127" LastActivityDate="2012-11-14T15:02:20.127" Title="What UAV kit(s) would be suitable for a beginner roboticist with programming experience?" Tags="&lt;uav&gt;&lt;kit&gt;" AnswerCount="6" CommentCount="4" FavoriteCount="2" ClosedDate="2012-11-21T06:42:04.067" ContentLicense="CC BY-SA 3.0" />
  <row Id="256" PostTypeId="1" AcceptedAnswerId="273" CreationDate="2012-11-02T00:19:32.710" Score="18" ViewCount="2827" Body="&lt;p&gt;I want to use an RF beacon to localize my quadcopter for autolanding, when GPS is not precise enough, for example, when my driveway is only 10 feet wide, and the GPS is only showing 20-30 ft. accuracy (with a proverbial lake of lava on either side). The quadcopter would use the GPS to fly to the rough location until it had a strong enough signal off the beacon, when it would begin to use that signal to come to a landing in a precise location, referenced off said beacon. Can someone please explain to me the concepts and theories behind building the beacon and it's accompanying receiver (suitable for connection to an Arduino via any digital or analog method) and achieving, say, a 4&quot; or better horizontal and vertical accuracy within a 50' sphere? Minimally, the quad should have range and altitude, i.e. &quot;I am 10 feet away from the beacon and 2 feet above it&quot;. How much added complexity would it take to make the robot fully position aware about the beacon, i.e. &quot;x ft. South, y ft. West and z ft. above it&quot;, where the coordinate system is determined by the beacon and not linked to any sort of geographic coordinate system? If the beacon is mounted on a, say, 10 ft pole, are there any changes to be made versus having it on the ground and presuming that all activity takes place above it's x-y plane?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Last note-&#xA;This thing would prefferably operate in the 72MHz band, please presume that where I'm operating, there are not other devices operating on the same band.&lt;/p&gt;&#xA;" OwnerUserId="176" LastEditorUserId="158" LastEditDate="2014-05-08T13:39:12.227" LastActivityDate="2014-05-08T13:39:12.227" Title="Quadcopter Localization Beacon" Tags="&lt;localization&gt;&lt;quadcopter&gt;&lt;gps&gt;" AnswerCount="3" CommentCount="5" FavoriteCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="257" PostTypeId="2" ParentId="255" CreationDate="2012-11-02T00:49:32.530" Score="8" Body="&lt;p&gt;I think your question is a bit too open-ended.  To get more specific recommendations, I think you'd have to provide some idea of what facet of robotics you want to get involved in.  The mechanical buildling aspect?  Motor control? Microcontroller programming? Use of various sensors?  As an example, I can ask what do you mean by &lt;em&gt;powerful&lt;/em&gt; in your question ... motor torque or onboard computing capabilities?  &lt;strong&gt;Robotics is a broad field.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If very new to robotics, I would suggest you start out by buying the latest issue of &lt;strong&gt;&lt;a href=&quot;http://www.servomagazine.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Servo&lt;/a&gt; and/or &lt;a href=&quot;http://find.botmag.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Robot&lt;/a&gt; magazines&lt;/strong&gt; (and then possibly subscribing).  Just glancing through these magazines will give you a lot of information regarding the current hobbiest/enthusiast robotics market, and in the magazines there are many advertisers for kits of all types.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A popular, lower cost, easy-to-learn, yet flexible, microcontroller that can be used for robotics is the &lt;a href=&quot;http://www.arduino.cc/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Arduino&lt;/a&gt;.  There are prebuilt kits for integrating with smartphones. Check out the information here:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/213/ways-to-integrate-a-smart-phone-with-robotics&quot;&gt;How can I integrate a smart phone with my robotics project?&lt;/a&gt;. &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="167" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2012-11-02T00:49:32.530" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="258" PostTypeId="2" ParentId="213" CreationDate="2012-11-02T03:23:55.967" Score="11" Body="&lt;p&gt;Another option is the &lt;a href=&quot;https://www.sparkfun.com/products/11343&quot; rel=&quot;nofollow noreferrer&quot;&gt;IOIO-OTG board&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.sparkfun.com/products/11343&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Kqz3W.jpg&quot; alt=&quot;IOIO-OTG board&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://www.sparkfun.com/products/11343&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sparkfun product description&lt;/a&gt; describes its functionality:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;It features a PIC microcontroller which acts like a bridge that connects an app on your PC or Android device to low-level peripherals like GPIO, PWM, ADC, I2C, SPI, and UART. An app-level library helps you write control code for these low level peripherals in the same way you'd write any other Java app!&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This board should do everything you wish and it even has a &lt;a href=&quot;http://www.sparkfun.com/tutorials/280&quot; rel=&quot;nofollow noreferrer&quot;&gt;nice tutorial&lt;/a&gt; to help you get started.&lt;/p&gt;&#xA;" OwnerUserId="1125" LastEditorUserId="37" LastEditDate="2013-12-18T00:19:12.427" LastActivityDate="2013-12-18T00:19:12.427" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="259" PostTypeId="2" ParentId="256" CreationDate="2012-11-02T05:35:19.683" Score="1" Body="&lt;p&gt;I would start here, I know someone who did this on a quadrotor with some 50$ gps modules and said it worked very well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.rtklib.com/&quot; rel=&quot;nofollow&quot;&gt;http://www.rtklib.com/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Real_Time_Kinematic&quot; rel=&quot;nofollow&quot;&gt;http://en.wikipedia.org/wiki/Real_Time_Kinematic&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="65" LastActivityDate="2012-11-02T05:35:19.683" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="260" PostTypeId="2" ParentId="254" CreationDate="2012-11-02T05:49:00.100" Score="6" Body="&lt;p&gt;Brushed motors are easier for servo systems, but are not better.  Many high end servo systems are brushless/AC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is possible to control the motors at low speeds with only 3 hall sensors.  You really don't want trapezoidal commutation, especially at low speeds so could add an encoder or estimate the rotor position if necessary.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is possible to estimate the rotor position with only hall/current sensors but if there are a lot of external disturbances it won't work very well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Torque ripple is unlikely to be a problem, of course it depends on your application.  More advanced commutation methods (sinusoidal or flux vector) essentially eliminate torque ripple.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You say that your application is low speed, but you are also using a 131:1 gearbox.  What RPM does the motor normally see?  Its not really a low speed application if the motor is running at 30%+ of its rated RPM.  Even hall sensors are very high resolution after going through that much reduction so you might not really need low speed performance at the motor itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IMHO Given that your current system has significant backlash between the sensor and the motors, I can't imagine a brushless system doing any worse even with halls/trapezoidal commutation.&lt;/p&gt;&#xA;" OwnerUserId="65" LastEditorUserId="65" LastEditDate="2012-11-02T05:54:07.710" LastActivityDate="2012-11-02T05:54:07.710" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="261" PostTypeId="1" AcceptedAnswerId="281" CreationDate="2012-11-03T00:56:08.123" Score="12" ViewCount="18924" Body="&lt;p&gt;I have seen waveforms for driving a brushless motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/UHO04.jpg&quot; alt=&quot;Brushless motor waveform&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I guess this is the waveform used for the simpler block commutation. But if I want to do sinusoidal waveforms, what does the PWM signal look like now? Is there a need to carefully synchronise the edges on the three phases?&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2018-03-06T06:00:21.703" Title="What do the commutation waveforms look like for a brushless motor?" Tags="&lt;brushless-motor&gt;&lt;pwm&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="262" PostTypeId="1" AcceptedAnswerId="266" CreationDate="2012-11-03T06:16:39.650" Score="5" ViewCount="584" Body="&lt;p&gt;Do mobile and/or autonomous robots become more or less effective the bigger they get? For example, a bigger robot has bigger batteries, and thus bigger motors, whereas a smaller robot has the exact opposite, making it need less energy, but also have smaller motors. Is there any known theorem that models this?&lt;/p&gt;&#xA;" OwnerUserId="216" LastEditorUserId="350" LastEditDate="2012-11-30T13:59:44.310" LastActivityDate="2012-11-30T13:59:44.310" Title="Effectiveness of a Mobile Robot In Relation To Mass" Tags="&lt;mobile-robot&gt;&lt;design&gt;&lt;dynamics&gt;" AnswerCount="6" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="263" PostTypeId="2" ParentId="262" CreationDate="2012-11-03T07:54:58.887" Score="4" Body="&lt;p&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Square-cube_law&quot; rel=&quot;nofollow&quot;&gt;http://en.wikipedia.org/wiki/Square-cube_law&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The square-cube law essentially states that larger robots are more fragile.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&quot;You can drop a mouse down a thousand-yard mine shaft and, on arriving&#xA;  at the bottom, it gets a slight shock and walks away. A rat is killed,&#xA;  a man is broken, a horse splashes.&quot; — J.B.S. Haldane, biologist&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Note that this only applies in a very generic mechanical sense.  You can't really make rules involving robot size since robots are so diverse.  &lt;/p&gt;&#xA;" OwnerUserId="65" LastActivityDate="2012-11-03T07:54:58.887" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="264" PostTypeId="2" ParentId="261" CreationDate="2012-11-03T08:43:55.930" Score="12" Body="&lt;p&gt;There is a fair deal of literature on the implementation of brushless motor control but here is an overview.&lt;/p&gt;&#xA;&lt;p&gt;To understand the differences between commutation waveforms it is important to understand how brushless motors operate.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/1qCuF.jpg&quot; alt=&quot;Brushless Motor&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;A three phase (two pole) motor will have three coils around a single magnet in the center.  The goal is to energize the coils in sequence so that the shaft of the motor (and its magnet) rotates.&lt;/p&gt;&#xA;&lt;p&gt;There are two magnetic fields that are important here, the field of the rotor (rotating magnet) and the field of the stator (static coils):&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/NahC8.jpg&quot; alt=&quot;field vectors&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;We refer to the direction of the magnetic field as its &amp;quot;flux vector&amp;quot; because it sounds super cool.  The most important thing to learn from this image is that you want the two magnetic fields to be at right angles to each other.  This maximizes efficiency and torque.&lt;/p&gt;&#xA;&lt;p&gt;The dumbest commutation scheme is trapezoidal.  Using either hall sensors or back EMF from the motor, it is possible to determine if the motor is in one of a discrete number of positions and perform on/off control on one or two coils to lead the magnetic field around the motor:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/TyG7F.jpg&quot; alt=&quot;trapezoid&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;Because there might only be six separate orientations for the stator field, the flux vector of the motor could be anywhere from 60-120 degrees (instead of the desired 90) and therefore you get torque ripple and poor efficiency.&lt;/p&gt;&#xA;&lt;p&gt;An obvious solution here is to switch to sinusoidal commutation and just smooth out the waveform:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/OzDz0.jpg&quot; alt=&quot;sin&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;If you know the exact orientation of the rotor you can just do some trig to calculate the exact PWM duty cycle to apply to each coil in order to keep the flux vector at 90 degrees and bam you have a beautiful 90 degree flux vector.  (The rotor orientation can be determined via encoder, interpolation or more advanced estimation such as a kalman filter).&lt;/p&gt;&#xA;&lt;p&gt;So right now you might be wondering how you can do better than sinusoidal commutation.  The key flaw of sinusoidal commutation is that the outputs are sent straight to PWM.  Because of coil inductance, the current (and therefore flux vector) will lag behind the commanded values and as the motor approaches its top speed the flux vector will be at 80 or 70 degrees instead of 90.&lt;/p&gt;&#xA;&lt;p&gt;This is why sinusoidal commutation has poor high speed performance.&lt;/p&gt;&#xA;&lt;p&gt;This finally brings us to flux-vector control which is a name given to (often proprietary) control algorithms that attempt to ensure the magnetic flux stays at 90 degrees even at high speeds.  The simplest way to do this would be to lead the field by, for example, 90-120 degrees depending on how fast you are going, knowing that the actual magnetic flux will lag.&lt;/p&gt;&#xA;&lt;p&gt;More robust solutions involve PID/feedforward to accurately control the current going through each phase.  Every servo manufacturer has their own in-house algorithm so I am sure there is some pretty complicated stuff at the bleeding edge.&lt;/p&gt;&#xA;&lt;p&gt;To put it in simplest terms, flux vector control is sinusoidal control of the current going to each phase (instead of just the PWM duty cycle).&lt;/p&gt;&#xA;&lt;p&gt;The line between sinusoidal/flux vector is pretty vague since some companies perform advanced control on their &amp;quot;sinusoidal&amp;quot; drives (which essentially makes them flux vector).  Also, since you can technically call almost anything flux vector control the quality of implementations can vary.&lt;/p&gt;&#xA;" OwnerUserId="65" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2012-11-03T08:49:25.587" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="265" PostTypeId="2" ParentId="262" CreationDate="2012-11-03T16:26:31.010" Score="5" Body="&lt;p&gt;This is a sweeping generalization that I'd be very cautious about. Engineering is about tradeoffs. But there are two things that I'd be comfortable generalizing, from my own personal biases.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm 99% serious when I say robots become more effective as the amount of money you are willing to invest becomes higher. This is because you can eventually custom-make all components and algorithms, and get the best possible solution for your job. But this significantly increases the engineering &lt;em&gt;time&lt;/em&gt; ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second, I'd say increases in power storage translate directly to increasing capabilities for autonomous, mobile robots. The power is almost always the bottleneck for long-term autonomy. (notice: My lab works on long term-autonomy from a power-efficiency standpoint, so I'm biased).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's about all. Other than that, the size of the robot is dependent on the task it is required to do. A larger robot is awful for invasive surgery, and a smaller robot is a terrible long-range terrestrial rover: It'd get stuck on the first tree root. Consider this: What's the best size for a flying robot? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Answer: The size that allows the perfect tradeoff of fuel capacity, lift capacity, processing power, speed, stability, and all other factors, subject to the task, cost, material, policy, and time constraints imposed.&lt;/p&gt;&#xA;" OwnerUserId="163" LastActivityDate="2012-11-03T16:26:31.010" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="266" PostTypeId="2" ParentId="262" CreationDate="2012-11-03T16:42:52.827" Score="3" Body="&lt;p&gt;Aside from the square-cube law for measuring the strength of the bot &lt;a href=&quot;https://robotics.stackexchange.com/a/263/126&quot;&gt;mentioned by user65&lt;/a&gt;, you have a few more effects. I don't know of any theorem for this, though.&lt;/p&gt;&#xA;&lt;p&gt;Firstly, note that &amp;quot;bigger batteries&amp;quot; doesn't mean &amp;quot;bigger motors&amp;quot;. And &amp;quot;bigger motors&amp;quot; doesn't mean &amp;quot;stronger motors&amp;quot; or &amp;quot;more powerful motors&amp;quot;. If we're talking about the same type of battery, then we &lt;em&gt;can&lt;/em&gt; say that a bigger battery is generally more powerful{*}.&lt;/p&gt;&#xA;&lt;p&gt;One thing the weight of the bot changes a lot is the friction. See, with a heavy bot, friction increases proportionately. This means we need proportionally stronger motor to be able to climb inclines (otherwise the bot just gets stuck, or starts rolling down). The friction doesn't really make a difference while moving on a flat surface, though. This is an easy principle to put down on paper--for a given weight increase, we need a proportional increase in torque. To obtain that, we may either use a motorwith a proportionately lower rpm (but that reduces the speed), or use a proportionately more powerful battery.  So in the end, this evens out nicely, since the power of a battery depends upon its size, keeping the type fixed. When the bot is moving on a flat surface, its inertia needs to be counteracted whenever one wants to turn. For this, we need high friction (which we already have), and a proportionately stronger motor. Again, this evens out nicely, So really, we should look at the power requirements of the &lt;em&gt;other&lt;/em&gt; components and choose size/power, and the motors will take care of themselves (I don't mean you neglect the motors entirely, I'm just saying that the motor issue is easily straightened out after the bot size has been decided.&lt;/p&gt;&#xA;&lt;p&gt;Another thing a larger size gives you is more capacity to store energy. You can always stuff some extra Li-Po's on a large (autonomous or RC) bot , and increase its lifetime.&lt;/p&gt;&#xA;&lt;p&gt;Due to all this, it's really saner to just say that the size/weight of the bot has no direct relation to its effectiveness. It really depends on what the bot is supposed to &lt;em&gt;do&lt;/em&gt;.  There are just too many other factors to decide--you need to know what strength you want, what power auxiliary mechanisms need, if the auxiliary mechanisms need couterbalancing, the maximum angle incline the bot is subject to, required stability, required response time, lifetime, etc. Choosing a size/weight requires one take all these factors into account while designing the bot. Some bots are better designed small, some bots are better designed large. No formula to it :)&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;*On the other hand, one can replace a Pb-acid battery with a bunch of Li-Po batteries of the same net weight and size, and get a much powerful &amp;quot;battery&amp;quot;. &lt;/sup&gt;&lt;/p&gt;&#xA;" OwnerUserId="126" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2012-11-03T16:42:52.827" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="267" PostTypeId="1" AcceptedAnswerId="272" CreationDate="2012-11-03T16:58:44.830" Score="57" ViewCount="105010" Body="&lt;p&gt;I've seen many motors having capacitors attached in parallel in bots. Apparently, this is for the &quot;safety&quot; of the motor. As I understand it, all these will do is smoothen any fluctuations--and I doubt that fluctuations can have any adverse effects on a motor. Apparently these protect the motor if the shaft is being slowed/blocked, but I fail to see how.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What exactly is the function of such a capacitor? What does it prevent, and how?&lt;/p&gt;&#xA;" OwnerUserId="126" LastEditorUserId="350" LastEditDate="2012-11-13T16:53:37.537" LastActivityDate="2020-06-30T14:32:12.727" Title="Why are capacitors added to motors (in parallel); what is their purpose?" Tags="&lt;motor&gt;&lt;protection&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="29" ContentLicense="CC BY-SA 3.0" />
  <row Id="268" PostTypeId="2" ParentId="46" CreationDate="2012-11-03T17:36:17.997" Score="6" Body="&lt;p&gt;When taking into account size / weight / Ah,&#xA;fuel cells and micro power turbines have an energy per kilogram and (with liquid fuels) an energy per liter that is an order of magnitude better than any battery.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In particular, I keep hearing that liquid methanol fuel cells are &quot;relatively practical&quot;.&#xA;&lt;a href=&quot;http://www.infoworld.com/d/hardware/toshiba-prototypes-methanol-fuel-cell-laptops-955&quot;&gt;a&lt;/a&gt; &lt;a href=&quot;http://www.powerstream.com/methanol-fuel-cell.htm&quot;&gt;b&lt;/a&gt; &lt;a href=&quot;http://miter.mit.edu/articleenabling-liquid-fuels-high-efficiency-fuel-cells/&quot;&gt;c&lt;/a&gt; &lt;a href=&quot;http://www1.eere.energy.gov/hydrogenandfuelcells/fuelcells/fc_types.html&quot;&gt;d&lt;/a&gt; &lt;a href=&quot;http://en.wikipedia.org/wiki/Direct_methanol_fuel_cell&quot;&gt;e&lt;/a&gt;.&#xA;And I've heard that Hyuk Kim and Seungdoo Park built a prototype &lt;a href=&quot;http://www.sciencedaily.com/releases/2001/09/010905072008.htm&quot;&gt;diesel fuel cell&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Prototype microturbines also show promise.&lt;a href=&quot;http://www.powermems.be/gasturbine.html&quot;&gt;a&lt;/a&gt; &lt;a href=&quot;http://en.wikipedia.org/wiki/microturbine&quot;&gt;b&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alas, fuel cells and micro power turbines (as well as some high-energy density batteries such as zinc-air) are not really designed for underwater vehicles -- they are designed to breathe air.&lt;/p&gt;&#xA;" OwnerUserId="187" LastActivityDate="2012-11-03T17:36:17.997" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="269" PostTypeId="2" ParentId="267" CreationDate="2012-11-03T23:05:34.510" Score="12" Body="&lt;p&gt;The capacitor seen on a lot of brushed motors is there to absorb RF noise due to the arcing as the brushes commutate. You often see these on the motors used in RC cars, where the motors are  fairly powerful and spinning fast.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem comes when you are using PWM to drive the motor. At the beginning of the duty cycle, when the current is switched on, you'll see a current spike as the current rushes into the capacitor from the H-Bridge. This inrush current can sometimes cause noticeable voltage ripple at the power supply, adding noise into any sensitive analogue sensors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To prevent the inrush current, you can add a pair of inductors between the H-Bridge and the capacitor. This will hold the current fairly steady. Actually, you'll often see inductors on motor drive circuits anyway. Even though the motor itself is an inductor, it's often quite a low inductance, so extra inductance is added to help smooth out any current fluctuations when using PWM drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The capacitors have nothing to do with protecting the motor in the case of a stall. When the motor stalls, the current increases and you risk overheating the motor.&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2012-11-03T23:05:34.510" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="270" PostTypeId="2" ParentId="262" CreationDate="2012-11-03T23:11:10.513" Score="1" Body="&lt;p&gt;The square cube law mentioned by user65 is a good one. In fact, these kind of laws are fundamental when looking at machines of various sizes. For mobile robots, as Josh mentioned, power is a serious problem, and so I'd say that one of the most important laws regarding mobile robots is that the energy storage capacity goes up with the cube of the length of the robot (assuming roughly equal proportions). Thus larger robots benefit enormously from longer battery life.&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2012-11-03T23:11:10.513" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="271" PostTypeId="1" CreationDate="2012-11-03T23:24:38.043" Score="5" ViewCount="350" Body="&lt;p&gt;I have two Unmanned Aerial Vehicles (planes) which work well. They can fly to various waypoints automatically using GPS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I would like them to fly together in formation. I would like them to fly side-by-side fairly close. This is too close to reliably use GPS to guarantee that they keep the correct relative positions safely, and so I am looking for another way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Somehow the UAVs need to be able to measure their position and orientation in space relative to the other one. How can I do this? Is there some kind of sensor which can do this? It would need to have the following properties:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;6 axes (position and orientation)&lt;/li&gt;&#xA;&lt;li&gt;Range 0m - 5m, (from between plane centres, but planes won't actually ever touch wingtips)&lt;/li&gt;&#xA;&lt;li&gt;Works in day or night and all weather conditions&lt;/li&gt;&#xA;&lt;li&gt;Light weight (This is for 1.5m wingspan RC planes, so max extra weight of about 100g)&lt;/li&gt;&#xA;&lt;li&gt;Probably need about 50Hz - 100Hz refresh rate, but might get away with less, using the IMU to fill in the gaps&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="40" LastEditorUserId="350" LastEditDate="2012-11-30T14:32:57.723" LastActivityDate="2014-04-23T09:30:48.677" Title="Spatial tracking between two UAVs" Tags="&lt;sensors&gt;&lt;uav&gt;&lt;multi-agent&gt;" AnswerCount="6" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="272" PostTypeId="2" ParentId="267" CreationDate="2012-11-04T00:54:14.993" Score="59" Body="&lt;p&gt;Capacitors are used with motors in two different ways. Sometimes the same motor will have both techniques applied, and be associated with two significantly different-looking capacitors.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;When motors with brushes are running normally, the motor brushes produce sparks, which cause noise &quot;from DC to daylight&quot;. This has nothing to do with PWM -- it happens even when these motors are connected directly across a battery, without any PWM.&#xA;If we did nothing, the cable running from the electronics board (or directly from the battery) to the motor would act like an antenna, radiating TV and other radio interference.&#xA;One way people fix that problem is to attach small ceramic capacitors directly to the motor to absorb much of that noise. &lt;a href=&quot;http://www.beam-wiki.org/wiki/Reducing_Motor_Noise&quot;&gt;b&lt;/a&gt; &lt;a href=&quot;http://www.pololu.com/docs/0J15/9&quot;&gt;c&lt;/a&gt; &lt;a href=&quot;http://www.mabuchi-motor.co.jp/en_US/technic/t_0203.html&quot;&gt;d&lt;/a&gt; &lt;a href=&quot;http://www.robotshop.com/PDF/motor-noise-reduction.pdf&quot;&gt;e&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;When using PWM to drive the motor, when the transistors turn &quot;on&quot;, the motor may pull a current spike / surge current -- the above noise-filtering capacitors make that current spike worse. When the transistors turn &quot;off&quot;, the motor inductance may cause voltage spikes from the motor inductance -- the above noise-filtering capacitors help a little. More complex filters attached directly to the motor can help these two problems. &lt;a href=&quot;http://hydraraptor.blogspot.com/2007/09/dc-to-daylight.html&quot;&gt;a&lt;/a&gt; &lt;a href=&quot;http://www.stefanv.com/rcstuff/qf200005.html&quot;&gt;b&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;When a motor -- even a motor that doesn't have brushes -- is first turned on at a dead stop, and also when the robot hits an obstruction and stalls the motor, the motor pulls much higher currents than it does in normal operation -- currents that may last for several seconds. This high current may pull down the battery power rail enough to reset all the digital electronics in the system (or perhaps reset just &lt;em&gt;some&lt;/em&gt; of the digital electronics, causing half-brain syndrome).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One work-around has 2 parts:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;add large electrolytic capacitors directly across the battery (or across the battery input to the PWM motor driver, or across the battery input to the digital electronics, or often capacitors in all three locations) -- these capacitors work better at supplying high currents for a few milliseconds than the battery does.&lt;/li&gt;&#xA;&lt;li&gt;In the few milliseconds we have before the stalled motor pulls all the energy from those big capacitors and then pulls the power rails low enough to start resetting things, program the digital system to somehow recognize that the motor has stalled and kill the power to that motor. Then that motor no longer drags down the power rail, and the digital electronics and all the other motors continue to operate normally. (&quot;soft-start&quot;, &quot;current-limiting&quot;, &quot;torque-limiting&quot;, etc. are more sophisticated forms of this idea). (Those big capacitors, also absorb some of the energy that comes out of the motor when the PWM turns &quot;off&quot;, and later put that energy back into the motor when the PWM turns &quot;on&quot;).&lt;/li&gt;&#xA;&lt;/ol&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The above capacitors protect other things &lt;em&gt;from&lt;/em&gt; the motor's electrical interference.&#xA;I suppose one could argue that step (2) above prevents a stalled motor from eventually, after many seconds, overheating and failing -- but that's not really its primary purpose.&lt;/p&gt;&#xA;" OwnerUserId="187" LastEditorUserId="158" LastEditDate="2012-11-06T13:58:52.793" LastActivityDate="2012-11-06T13:58:52.793" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="273" PostTypeId="2" ParentId="256" CreationDate="2012-11-04T16:56:04.347" Score="6" Body="&lt;p&gt;You might be able to do this using inductive coupling to give the quad copter some indication as to which direction it should move to approach the landing pad.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/xTJyT.png&quot; alt=&quot;Quad copter landing pad&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the landing pad is a single coil on the vertical axis (this is the transmitter). On the quad-copter are two coils, 90º apart and on the horizontal axis (these are the receivers). An alternating current is passing through the coil on the handing pad, creating an alternating magnetic field around it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the quad-copter is centred directly above the landing pad, then no current will be induced in the receivers. If the quad-copter is to one side, then a current will be induced in the receivers. Which receiver is seeing the current will tell the quad-copter which axis to move in, but not whether to move one way or the other. You can use a band-pass filter to distinguish between the signal from the landing pad, and noise from the motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Deciding which direction to move in is tricky, and I'm not sure of the best solution yet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One way would be to correlate the change in signal with velocity information inferred from the accelerometers. If the quad-copter is moving one way, and sees the induced current reduce at the same time, then it knows that it should continue moving that way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another way would be to pulse a DC current through the coil. Pulse it forwards for 10ms, then backwards for 30ms. Use a low-pass filter on the receivers to distinguish between this signal and background noise. By looking at the pulse widths, the quad-copter can now tell the difference between the forward and backwards directions.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;You can probably make the receivers smaller than I have drawn here, and the transmitter as large as the landing pad.&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2012-11-04T16:56:04.347" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="274" PostTypeId="1" AcceptedAnswerId="290" CreationDate="2012-11-05T08:29:56.787" Score="4" ViewCount="972" Body="&lt;p&gt;Some years ago, there where some projects that provided hardware and software to perform modifications on standard hobby servos to convert them to digital servos, with all the advantages that come with it. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://openservo.com/&quot; rel=&quot;nofollow&quot;&gt;OpenServo&lt;/a&gt; is a little outdated, and does not seem to be worked on anymore, and there is no hardware to buy.&lt;/li&gt;&#xA;&lt;li&gt;Sparkfun has its &lt;a href=&quot;https://www.sparkfun.com/products/9014&quot; rel=&quot;nofollow&quot;&gt;own version&lt;/a&gt; of the OpenServo, which at least is available for buying.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Do you know if there are other mods, or even complete low cost digital servos? I am mostly interested in position feedback, and servo chaining.&lt;/p&gt;&#xA;" OwnerUserId="127" LastActivityDate="2013-02-25T11:19:59.490" Title="Low-cost servo with digital control interfaces?" Tags="&lt;otherservos&gt;&lt;i2c&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ClosedDate="2013-05-20T15:48:08.447" ContentLicense="CC BY-SA 3.0" />
  <row Id="275" PostTypeId="2" ParentId="150" CreationDate="2012-11-05T11:34:25.977" Score="22" Body="&lt;p&gt;You may want to consider a &lt;a href=&quot;http://openrov.com/forum/topics/magnetically-coupled-drive&quot; rel=&quot;noreferrer&quot;&gt;Magnetically Coupled Drive&lt;/a&gt;. Use a standard motor with a magnetic coupling to transmit the torque to your prop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This would allow your motor to be completely sealed inside your vehicle:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/3AVt1.png&quot; alt=&quot;Magnetically Coupled Drive&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;From &lt;a href=&quot;http://openrov.com/profile/1gupl83kvnk8f&quot; rel=&quot;noreferrer&quot;&gt;Eric Stackpole&lt;/a&gt;'s &lt;a href=&quot;http://openrov.com/forum/topics/magnetically-coupled-drive&quot; rel=&quot;noreferrer&quot;&gt;article&lt;/a&gt; mentioned above. Image used without permission, but with attribution.&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This solution may or may not be suitable however, depending on the torque you need to transmit, but for open water use has the distinct advantage that it &lt;em&gt;is&lt;/em&gt; torque limited. In other words, if your prop gets jammed and you have selected suitable motor and coupling torques then the coupling will &lt;em&gt;slip&lt;/em&gt; before your motor burns out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I particularly like Erics solution as it simultaneously transmits torque to the prop, centers the prop on the shaft and centers the prop along the shaft. An elegant piece of design which solves several problems simultaneously.&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="37" LastEditDate="2012-11-05T11:51:24.060" LastActivityDate="2012-11-05T11:51:24.060" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="276" PostTypeId="2" ParentId="271" CreationDate="2012-11-05T16:00:40.880" Score="5" Body="&lt;p&gt;How close together?  If they use the same make and model GPS unit, you MIGHT be able to use the relative positions calculated via GPS.  A lot of the sources of GPS error would be the same for both vehicles in that case (e.g., atmospherics, any built-in GPS filtering).  Each vehicle could broadcast it's state vector to the other one.  &lt;/p&gt;&#xA;" OwnerUserId="58" LastEditorUserId="58" LastEditDate="2012-11-05T20:26:50.883" LastActivityDate="2012-11-05T20:26:50.883" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="277" PostTypeId="1" AcceptedAnswerId="285" CreationDate="2012-11-05T23:18:26.770" Score="65" ViewCount="10178" Body="&lt;p&gt;I am designing an unmanned aerial vehicle, which will include several types of sensors: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;3-axis accelerometer&lt;/li&gt;&#xA;&lt;li&gt;3-axis gyroscope &lt;/li&gt;&#xA;&lt;li&gt;3-axis magnetometer&lt;/li&gt;&#xA;&lt;li&gt;horizon sensor&lt;/li&gt;&#xA;&lt;li&gt;GPS &lt;/li&gt;&#xA;&lt;li&gt;downward facing ultrasound.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;A friend of mine told me that I will need to put all of this sensor data through a Kalman filter, but I don't understand why. Why can't I just put this straight into my micro controller. How does the Kalman filter help me about my sensor data?&lt;/p&gt;&#xA;" OwnerUserId="40" LastEditorUserId="399" LastEditDate="2012-11-11T16:14:42.297" LastActivityDate="2014-01-09T00:20:48.943" Title="Why do I need a Kalman filter?" Tags="&lt;kalman-filter&gt;&lt;uav&gt;" AnswerCount="5" CommentCount="0" FavoriteCount="38" ContentLicense="CC BY-SA 3.0" />
  <row Id="278" PostTypeId="2" ParentId="277" CreationDate="2012-11-06T06:03:23.243" Score="24" Body="&lt;p&gt;Sensor data is noisy. If you do not filter it, then your vehicle would at least act erratically if it were even stable enough to fly. Filtering, via a Kalman filter or otherwise, can reduce the noise when done correctly, improving stability in turn.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A &lt;a href=&quot;http://en.wikipedia.org/wiki/Kalman_filter&quot;&gt;Kalman filter&lt;/a&gt; is a particularly powerful filter. It takes a model of the system and noise models for both the system and your sensors. It then estimates the state of the vehicle based on a provided state estimate and the controls applied at any moment in time. This estimated state will be more accurate than what the sensors report.&lt;/p&gt;&#xA;" OwnerUserId="177" LastEditorUserId="37" LastEditDate="2012-11-07T17:09:17.303" LastActivityDate="2012-11-07T17:09:17.303" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="279" PostTypeId="2" ParentId="277" CreationDate="2012-11-06T12:40:39.940" Score="30" Body="&lt;p&gt;The short, snide answer is &quot;try it without one.&quot;  The better answer is an example: When your accellerometers say you are 10 degrees from vertical, but your gyro says you haven't rotated away from vertical, and your magnetometers are reporting a 30 deg offset from north but your gyro says 32 degree ... what is the current heading and tilt?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'll probably come up with a million ad-hoc ways which seem to work in one example, but fail in others. The Kalman Filter (Extended Kalman Filter (EKF) for this task!) will provide for you a rigorous way to answer these questions. The quality of the answers is still being researched--though the EKF's track record is very good--but at least everyone will agree what the answers &lt;em&gt;are&lt;/em&gt;. &lt;/p&gt;&#xA;" OwnerUserId="163" LastActivityDate="2012-11-06T12:40:39.940" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="280" PostTypeId="2" ParentId="271" CreationDate="2012-11-06T13:49:45.197" Score="4" Body="&lt;p&gt;It is possible that two independent GPS units might be accurate enough (as &lt;a href=&quot;https://robotics.stackexchange.com/a/276/37&quot;&gt;ViennaMike suggests&lt;/a&gt;) if both are sufficiently similar, get a lock from the same location, follow roughly the same paths (so the accumulated differential GPS errors are roughly the same) and are re-synchronised at regular intervals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This might be significantly assisted though if you also had some sort of proximity measure between the two devices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Start them off a fixed distance from each other, sync both their differential GPS locks &amp;amp; calibrate the proximity thresholds (starting distance, too close threshold and too far threshold). You can then use the proximity sensor distance to say if the gps locks are drifting too much (they are getting closer than they should be or further apart).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One option which I believe could provide both rough proximity information and data communication between the two UAVs would be Bluetooth. Once the two devices are paired, you may be able to get both intra-device communication and rough proximity information from one pair of radios.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Searching on Bluetooth Proximity led me to see the use of RSSI (Received Signal Strength Indicator) as a measure of proximity and thus onto &lt;a href=&quot;http://www.google.co.uk/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=5&amp;amp;cad=rja&amp;amp;ved=0CEsQFjAE&amp;amp;url=http://202.175.25.24/papers/2010/fcc2010yapeng.pdf&amp;amp;ei=9RSZUIXvEsLg4QTHu4CABw&amp;amp;usg=AFQjCNHiYc5HPC3gUX6zyw1aJGaqcOL_tw&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;strong&gt;&lt;em&gt;Bluetooth Indoor Positioning using RSSI and Least Square Estimation&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt; &lt;sup&gt;#&lt;/sup&gt; which may be able to give you some interesting ideas for this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;# Stack Exchange thinks that the original link &lt;code&gt;http://202.175.25.24/papers/2010/fcc2010yapeng.pdf&lt;/code&gt; is invalid, so won't let me use it &lt;a href=&quot;https://meta.stackexchange.com/questions/131639/are-ip-address-links-valid-in-posts&quot;&gt;as a link&lt;/a&gt;, so I have used the google wrapped link.&lt;/sup&gt;&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2012-11-07T13:50:37.737" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="281" PostTypeId="2" ParentId="261" CreationDate="2012-11-06T14:49:16.757" Score="12" Body="&lt;p&gt;The diagram you show looks like it would produce a pretty rough trapezoidal Back-EMF. I'm assuming that the gates that are at 100% are the lower legs of the motor drive bridge. I can't think of a reason you would want to do this. In general you want the gate voltage of the return leg to be the complement of the gate voltage of the supply leg.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In six-step trapezoidal commutation, you typically ramp the PWM up to 100%, leave it there for a while (~30 electrical degrees of rotation), and then ramp it back down again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.dian-deng.com/index_motor_3phase_6step.htm&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/5EHWn.png&quot; alt=&quot;six-step trapezoidal&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In sinusoidal commutation, the PWM duty cycle is continuously varied in sinusoidal values. Here is a good diagram showing the difference between sinusoidal drive and trapezoidal drive PWM and phase signals:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.embedded.com/design/embedded/4006783/Implementing-Embedded-Speed-Control-for-Brushless-DC-Motors-Part-4&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9FvgT.jpg&quot; alt=&quot;sine versus trapezoidal&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This Fairchild app note shows the PWM though a full 360° rotation:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.fairchildsemi.com/ds/FC/FCM8202.pdf&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4FmHz.png&quot; alt=&quot;360 sine rotation&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.imakenews.com/eletra/mod_print_view.cfm?this_id=287045&amp;amp;u=getoshiba_mve-news&amp;amp;issue_id=000057909&amp;amp;show=F,T,T,T,F,Article,F,F,F,F,T,T,F,F,T,T&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/sVmnF.jpg&quot; alt=&quot;sine drive single&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's useful to look at what's going on in the signal up close. What you're really doing is gradually varying the current in a triangular wave so that it slowly builds up in the stator of the motor. You have more control over this buildup if you drive the supply and return gates in a complementary fashion rather than holding the lower leg open.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.screenlightandgrip.com/html/emailnewsletter_generators.html&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JsxNP.jpg&quot; alt=&quot;current variance&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Computing a sine wave is more computationally intensive (unless you use a lookup table) than a simple ramp up, hold, ramp down. But it produces a much smoother drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Space-vector commutation is even more computationally intensive. And while it has more torque ripple than a sinusoidal drive, it makes higher utilization of the bus voltage and is therefore more efficient in terms of power.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The phase voltage in space vector drive ends up looking like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.powerlab-tr.com/?p=693&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FZVFU.png&quot; alt=&quot;space vector voltage&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is done by varying the PWM duty cycle in all three phases at the same time. This is opposed to having just a single phase driven as in two-quadrant drive or having two phases driven in complementary pairs as in four-quadrant drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.sciencedirect.com/science/article/pii/S037877960900056X&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/UXgZ2.jpg&quot; alt=&quot;space-vector PWM&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="142" LastEditorUserId="142" LastEditDate="2012-11-06T21:00:00.027" LastActivityDate="2012-11-06T21:00:00.027" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="282" PostTypeId="2" ParentId="271" CreationDate="2012-11-07T10:30:29.820" Score="2" Body="&lt;p&gt;6-DOF is kind of difficult.. You could do vision but that is hard to implement robustly. You say the UAVs are localizing themselves using GPS; are you using an IMU+Kalman filtering as well? For proximity detection you could try infrared/ultrasonic sensors, e.g. &lt;a href=&quot;https://www.sparkfun.com/products/242&quot; rel=&quot;nofollow&quot;&gt;https://www.sparkfun.com/products/242&lt;/a&gt;. You could combine this with the Kalman filter to get a relative position estimate and get orientation from the Kalman filter directly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although I reckon if you are using GPS+IMU+Kalman then broadcasting the estimated state to each other (XBee?) would probably suffice, given that the GPS units are calibrated similarly. You could easily calculate the relative orientation by subtracting their orientation in the inertial frame.&lt;/p&gt;&#xA;" OwnerUserId="229" LastEditorUserId="229" LastEditDate="2012-11-07T11:05:33.803" LastActivityDate="2012-11-07T11:05:33.803" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="283" PostTypeId="2" ParentId="256" CreationDate="2012-11-07T11:14:45.560" Score="1" Body="&lt;p&gt;As other people mentioned, an RF beacon will probably be difficult and vision is definitely a viable option. The common difficulty with vision-based solutions is that they are computationally expensive, making it difficult to be done on-board. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can try using the PixArt IR tracking sensor from a Nintendo Wii remote, which communicates through I2C and can thus be easily connected to for example an Arduino and place a few active IR beacons on the ground which are then picked up by the sensor. Using a simple clever pose estimation algorithm will get you an accurate estimate of your position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A regular colour camera could also be used but unless you have something like a Beagleboard or Gumstix on-board it would be difficult to process the images in real-time. (although there is nothing stopping you from doing calculations on the ground, of course).&lt;/p&gt;&#xA;" OwnerUserId="229" LastActivityDate="2012-11-07T11:14:45.560" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="284" PostTypeId="1" CreationDate="2012-11-07T13:46:20.493" Score="29" ViewCount="58736" Body="&lt;p&gt;I wish to build a robotic arm that can lift a useful amount of weight (such as 3-6 kg on an arm that can extend to approx 1.25 meters). What actuators are available to accomplish this? The main factors and design points are:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Not Expensive&lt;/li&gt;&#xA;&lt;li&gt;5 to 6 DOF&lt;/li&gt;&#xA;&lt;li&gt;to be mounted on a yet to be designed mobile platform&lt;/li&gt;&#xA;&lt;li&gt;battery powered&lt;/li&gt;&#xA;&lt;li&gt;stronger than hobby servos (at least for the 'shoulder' and 'elbow' joints)&lt;/li&gt;&#xA;&lt;li&gt;not slow to actuate&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="234" LastEditorUserId="19515" LastEditDate="2020-07-25T00:36:01.707" LastActivityDate="2020-07-25T00:36:01.707" Title="Which type of actuator will be suitable for a very strong robot arm?" Tags="&lt;mobile-robot&gt;&lt;robotic-arm&gt;&lt;actuator&gt;" AnswerCount="5" CommentCount="1" FavoriteCount="16" ContentLicense="CC BY-SA 4.0" />
  <row Id="285" PostTypeId="2" ParentId="277" CreationDate="2012-11-07T13:56:06.577" Score="56" Body="&lt;p&gt;You &lt;em&gt;do&lt;/em&gt; connect all these sensors directly to a microcontroller.&#xA;The Kalman filter is not an electronic filter like a LRC filter that goes between the sensors and the microcontroller. The Kalman filter is a mathematical filter implemented as software routine inside the microcontroller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The sensors you have listed give the microcontroller 14 or 15 raw numbers each time they are all updated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I fly a little aircraft, what I really want to know is its position and orientation&#xA;and how far it is above the ground -- 7 numbers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need &lt;em&gt;something&lt;/em&gt; that gives me those 7 numbers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ideally I want a new estimate of those 7 numbers every time through my control loop.&#xA;The once-per-second updates I get from my cheap GPS aren't nearly fast enough.&#xA;(People at &lt;a href=&quot;https://robotics.stackexchange.com/questions/231/what-frequency-does-my-quadcopter-output-sense-calculate-output-update-loop-need&quot;&gt;What frequency does my quadcopter output-sense-calculate-output update loop need to stay stable?&lt;/a&gt; are telling me even 50-times-per-second isn't going to be fast enough).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Somehow I'm going to have to reduce those 14 or 15 raw numbers that I have, some of which only occasionally get updated, into (estimates of) the 7 numbers that I really want.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As Josh pointed out, there are many ad-hoc ways to convert those raw numbers into usable data.&#xA;Any routine that converts 15 numbers into 7 numbers can be described as a &quot;filter&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You don't &lt;em&gt;have&lt;/em&gt; to use the optimum filter.&#xA;But you will use some kind of filter -- i.e., something that converts from the 15 numbers of raw data you have into (estimates of) the 7 numbers you really want.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://en.wikipedia.org/wiki/Kalman_filter&quot; rel=&quot;noreferrer&quot;&gt;Kalman Filter&lt;/a&gt; is, in some conditions, the &quot;optimum&quot; filter, the best way of converting that raw data into the 7 numbers I really want.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It may take less work on your part to use a Kalman filter that someone else has already written and debugged,&#xA;than to write some other filter from scratch, debug it, and keep adding stuff to it until it is usable -- a filter that will inevitably turn out to be sub-optimum.&lt;/p&gt;&#xA;" OwnerUserId="187" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2014-01-09T00:20:48.943" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="286" PostTypeId="2" ParentId="284" CreationDate="2012-11-07T16:53:17.127" Score="28" Body="&lt;p&gt;Which &lt;a href=&quot;http://en.wikipedia.org/wiki/Robotics#Actuation&quot; rel=&quot;noreferrer&quot;&gt;actuators&lt;/a&gt; are suitable for your application depends very much on what kind of robot arm you want to build. Once you have decided on what kind of arm you want you can decide on a suitable actuator &lt;em&gt;for each axis&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;The Arm&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Assuming from your description that a &lt;a href=&quot;http://en.wikipedia.org/wiki/Gantry_robot&quot; rel=&quot;noreferrer&quot;&gt;gantry robot&lt;/a&gt; wouldn't be viable, then depending on your specific application, you may want to consider a &lt;a href=&quot;http://en.wikipedia.org/wiki/SCARA&quot; rel=&quot;noreferrer&quot;&gt;SCARA arm&lt;/a&gt; over an &lt;a href=&quot;http://en.wikipedia.org/wiki/Articulated_robot&quot; rel=&quot;noreferrer&quot;&gt;Articulated arm&lt;/a&gt;, which is what most people think of when they think &lt;a href=&quot;http://en.wikipedia.org/wiki/Robotic_arm&quot; rel=&quot;noreferrer&quot;&gt;Robot arm&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The big advantage of a SCARA arm is that most of it's lifting strength is in it's bearings. The main shoulder, elbow and wrist (yaw) joints are in a flat plane, which means that the motors only need to be strong enough to produce the lateral forces required, they don't need to support the weight of the remaining axes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Z axis, pitch and roll (and grip obviously) all have to work against gravity, but the Z axis is easy to gear highly enough to be able to support plenty of weight, and the pitch, roll and grip axes only have to support the payload weight, not the weight of other axes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/0gOBM.jpg&quot; alt=&quot;6 UMI RTX robot + gripper&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Compare this to an articulated arm, where many of the axes have to support the weight of all axes further down the &lt;a href=&quot;http://en.wikipedia.org/wiki/Kinematic_chain&quot; rel=&quot;noreferrer&quot;&gt;kinematic chain&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/XSXku.gif&quot; alt=&quot;6 Axis Articulated Robots from KUKA&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;The actuators&lt;/h2&gt;&#xA;&#xA;&lt;h3&gt;Gantry robots&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Typically a gantry robot will use &lt;a href=&quot;http://en.wikipedia.org/wiki/Linear_actuator#Advantages_and_disadvantages&quot; rel=&quot;noreferrer&quot;&gt;linear actuators&lt;/a&gt; for the main X, Y &amp;amp; Z axes. These could be low performance, low accuracy, high force actuators such as a lead screw with a servo or stepper drive (force and performance can be traded but accuracy will always be limited by backlash), all the way up to high performance, high accuracy direct drive linear motors with precision encoders.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The remaining 3DOF manipulator will usually require precision rotational motion for pitch, roll and yaw, so usually an electric motor (either stepper or servo), will be most suitable. Even a small motor with a reasonably high gearing can resist gravity against quite high loads.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;An aside on servo motors vs. stepper motors&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The difference between servo&lt;sup&gt;(1)&lt;/sup&gt; and stepper is a trade-off between complexity and certainty in control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A servo motor requires an encoder for position feedback, whereas a stepper doesn't. This means that a stepper is electrically &lt;em&gt;much simpler&lt;/em&gt;, and from a control point of view simpler if you want low performance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to get the most out of your motor though (pushing it close to it's limit), then steppers get &lt;em&gt;much&lt;/em&gt; more difficult to control predictably. With position feedback on a servo you can tune performance &lt;em&gt;much&lt;/em&gt; more aggressively and since you know if it fails to reach it's target position or velocity then your servo loop will get to find out about it and correct it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With a stepper you have to tune the system so that you can &lt;em&gt;guarantee&lt;/em&gt; that it can &lt;em&gt;always&lt;/em&gt; make the step, irrespective of the desired speed of move or weight of the payload. Note that some people will suggest adding an encoder to detect missed steps on a stepper motor, but if you are going to do that then you might as well have used a servo motor in the first place!&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;SCARA arm&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;With a SCARA arm, the Z axis is probably the only linear axis, while the remaining axes can all be done with rotational motor, so again stepper or servo motor. Sizing these motors is relatively easy because the weight carried is less important to many of them. The motor required to overcome the inertia of a load is rather less than sizing it to overcome gravity.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Articulated arm&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;With an articulated arm the calculations are more tricky, because most axes will need actuators sized depending on both moving the load and lifting it, but again an electric motor is the easiest to control and use.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;The gripper&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Finally there is the gripper. This is where I have seen the most variety in actuators. Depending on your applications you could easily use any number of different actuators.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've used systems with traditional motor driven grippers, linear actuated grippers, &lt;a href=&quot;http://en.wikipedia.org/wiki/Amplified_piezoelectric_actuator&quot; rel=&quot;noreferrer&quot;&gt;piezo flexture&lt;/a&gt; grips, pneumatically actuated grippers, vacuum pick-ups and simple slots or hooks amongst others, many of which were specific to the application. What your typical payload is could significantly change the actuator which is best for you. &lt;sup&gt;(2)&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Doing your calcs&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;As &lt;a href=&quot;https://robotics.stackexchange.com/a/296/37&quot;&gt;Rocketmagnet suggests&lt;/a&gt; ultimately you are going to have to break out your calculator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will need to take into account kinematics of your system, the maximum load on each motor (taking into account the worst case with arm fully extended if you are using an articulate arm design), the speed (a smaller motor with higher gearing might give the force you need without the speed, but a beefier motor might give you a higher torque with lower gearing and a higher speed etc.) and the positional accuracy you need.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general, the more money you throw at the problem, the better performance (speed, accuracy, power consumption) you will get. But analysing specifications and making smart purchasing decisions can help optimise the price/performance of your robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;(1) Note that my experience is with industrial &lt;a href=&quot;http://en.wikipedia.org/wiki/Servomechanism#Servomotor&quot; rel=&quot;noreferrer&quot;&gt;servos&lt;/a&gt;, typically a brushed or brushless DC motors with a rotary encoder, so this may or may not apply with hobby &lt;a href=&quot;http://en.wikipedia.org/wiki/Servomechanism#RC_servos&quot; rel=&quot;noreferrer&quot;&gt;RC servos&lt;/a&gt;.&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;(2) I would suggest posting another question on this.&lt;/sup&gt;&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2015-08-10T14:04:28.543" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="287" PostTypeId="1" CreationDate="2012-11-07T19:29:50.063" Score="42" ViewCount="7017" Body="&lt;p&gt;As somebody who is spending the majority of his time programming in JavaScript, what's the best route to get into small-robotics without needing to deviate too much from my current language focus?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any project kits or tools that make use of the JavaScript language that might make the field more approachable for developers like myself? I would even be interested in virtual environments where all code is executed in a simulation.&lt;/p&gt;&#xA;" OwnerUserId="250" LastEditorUserId="126" LastEditDate="2012-11-14T15:02:03.340" LastActivityDate="2021-04-21T01:29:54.380" Title="Programming Robots with JavaScript" Tags="&lt;software&gt;&lt;programming-languages&gt;" AnswerCount="11" CommentCount="5" FavoriteCount="13" ContentLicense="CC BY-SA 3.0" />
  <row Id="288" PostTypeId="2" ParentId="287" CreationDate="2012-11-07T19:38:33.743" Score="13" Body="&lt;p&gt;Hmm, interesting question! I personally would suggest that you take a look at the Arduino platform. It's programmed in C, so the syntax is going to be... familiar, to a JavaScript writer. In my humble opinion, knowing how the syntax (while loops, if/than blocks, etc) is laid out is 70% of the battle, once you're familiar with that, you can plug and play. You can pick up a starter kit for around $30 online from the good folks at SparkFun.com or adafruit.com, you can program it on a PC, Mac or Linux machine, and it comes pre-loaded with enough examples to ease you into the language quickly. I'm not saying that you're just gonna drop some JavaScript code into it and be on your way, but I was a JavaScript programmer when I started out with Arduino, and I found it quite easy to pick up and run with. Good luck, as a part time teacher in robotics it's always awesome to see people getting into the field!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S. - you should also be familiar/comfortable with building electronic circuits (lights, motors and the like), but any good Arduino introduction kit worth its salt will get you started if you don't have any experience.&lt;/p&gt;&#xA;" OwnerUserId="176" LastActivityDate="2012-11-07T19:38:33.743" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="290" PostTypeId="2" ParentId="274" CreationDate="2012-11-07T20:25:31.203" Score="2" Body="&lt;p&gt;Yes, the v3 OpenServo is out of stock.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact we are working on a new version 4 of OpenServo that will modernise the codebase.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are no timelines for the v4 as yet, but work has only just started.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would recommend the SparkFun board for now.&lt;/p&gt;&#xA;" OwnerUserId="283" LastActivityDate="2012-11-07T20:25:31.203" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="291" PostTypeId="2" ParentId="100" CreationDate="2012-11-07T20:26:31.823" Score="0" Body="&lt;p&gt;Maybe too expensive for a home project, but the MIL-DTL-38999 series connector (available from &lt;a href=&quot;http://www.glenair.com/interconnects/mildtl38999/&quot; rel=&quot;nofollow&quot;&gt;Glenair&lt;/a&gt; and many other suppliers) is the connectro of choice for military equipment&lt;/p&gt;&#xA;&#xA;&lt;p&gt;OK, it fails your &quot;they are not simple plug-in connectors&quot; requirement but are ideal for disconnect/reconnect in all kinds of environments.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ANd no I don't work for Glenair :)&lt;/p&gt;&#xA;" OwnerUserId="134" LastActivityDate="2012-11-07T20:26:31.823" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="292" PostTypeId="2" ParentId="209" CreationDate="2012-11-07T20:27:22.420" Score="0" Body="&lt;p&gt;I think the best approach would be to use a data set which contains a ground truth. The data set which is most often cited in the literature is described in the paper &quot;A benchmark for the evaluation of RGB-D SLAM systems.&quot; They also describe a few metrics to compare your pose estimation result with the ground truth. Hope this helps. Happy coding.  &lt;/p&gt;&#xA;" OwnerUserId="45" LastActivityDate="2012-11-07T20:27:22.420" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="293" PostTypeId="2" ParentId="128" CreationDate="2012-11-07T20:34:33.870" Score="2" Body="&lt;p&gt;&lt;a href=&quot;http://www.orocos.org/&quot; rel=&quot;nofollow&quot;&gt;Orocos&lt;/a&gt; is a mature real time robotics control software framework.  I have seen it used to successfully control high speed robotic manipulators with hard real time requirements.  It has many of the same framework level components as ROS, communications, configuration, serialization, and component based packaging.&lt;/p&gt;&#xA;" OwnerUserId="20" LastActivityDate="2012-11-07T20:34:33.870" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="294" PostTypeId="2" ParentId="287" CreationDate="2012-11-07T20:43:57.540" Score="23" Body="&lt;p&gt;There are a couple of projects out there that mate the Arduino platform to the Node.js javascript execution engine.  Take a look at &lt;a href=&quot;https://github.com/rwldrn/johnny-five&quot; rel=&quot;nofollow&quot;&gt;Johnny-Five&lt;/a&gt;, which is a library on top of the Arduino Firmata remote control protocol or &lt;a href=&quot;https://github.com/JayBeavers/node-reflecta&quot; rel=&quot;nofollow&quot;&gt;node-reflecta&lt;/a&gt;, which is a Node.js interface for the Arduino Reflecta remote control protocol.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've personally built a Node.js controlled robot called &lt;a href=&quot;https://github.com/JayBeavers/RocketBot&quot; rel=&quot;nofollow&quot;&gt;RocketBot&lt;/a&gt;, that combines node-reflecta with node-joystick on top of a Beaglebone and an Arduino so I can attest this approach works well.&lt;/p&gt;&#xA;" OwnerUserId="35" LastEditorUserId="9176" LastEditDate="2016-10-14T12:32:06.587" LastActivityDate="2016-10-14T12:32:06.587" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="295" PostTypeId="2" ParentId="284" CreationDate="2012-11-07T20:58:23.420" Score="5" Body="&lt;p&gt;Mobile platform: An &lt;a href=&quot;http://en.wikipedia.org/wiki/Linear_actuator#Advantages_and_disadvantages&quot; rel=&quot;nofollow&quot;&gt;electro-mechanical linear actuator&lt;/a&gt; can be a good choice for light weight actuator which can be mounted on mobile platform. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Battery powered: An electro-mechanical linear actuator is good choice over servo motors, as linear actuators draw power only when it is moving, and it does not need power to hold its position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;5-6 DoF: It might be difficult to achieve this using electro-mechanical linear actuator, as they are mechanical complicated and have limited range of motion&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can try linear actuators from www.firgelli.com. They have miniature linear actuators as well, which are good for small scale application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mechanical design concept for arm using linear actuator: Most of earth moving equipment have hydraulic linear actuator. Some of the joints for linear actuator can be implemented in this line.&lt;/p&gt;&#xA;" OwnerUserId="289" LastEditorUserId="37" LastEditDate="2012-11-08T15:30:38.133" LastActivityDate="2012-11-08T15:30:38.133" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="296" PostTypeId="2" ParentId="284" CreationDate="2012-11-07T21:25:55.483" Score="14" Body="&lt;p&gt;When you're choosing actuators, it's instructive to start by calculating how much power you need at the end effector. When you say 'not too slow' you should have some idea what this means, especially under different load conditions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, you might say: 6kg at 0.2m/s and  0kg at 0.5m/s&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now add in the estimated weight of the arm: 10kg at 0.2m/s and  4kg at 0.5m/s&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now calculate the power: 100N * 0.2m/s = 20W  and 40N * 0.5m/s = 20W&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the peak power output at the end effector is &lt;strong&gt;20W&lt;/strong&gt;. You're going to need an actuator which can comfortably produce more than 20W. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm going to make assume that you end up deciding to use an electric motor as your actuator. These are still the actuator of choice for powerful electric robots systems. (If you successfully get this robot working with muscle wire without burning down your workshop, I'll eat my mouse).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since you're using an electric motor, you'll almost certainly be using some kind of gears. Assume the gear train on the motor is about 50% efficient. This means you'll need an electric motor rated for at least 40W. If you want this to be a reliable arm, I'd spec a motor rated for at least 60W.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next you need to spec the gear train. What's the torque needed? 100N*1.25m = 125Nm. But as usual, you need to spec more torque than this for the gear train, not least because you'll need some spare torque to be able to accelerate the load upwards. Select a gear train which can take more than the rated load.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lastly, make sure that the motor's torque multiplied by the gear ratio multiplied by the efficiency exceeds your torque requirement, but not the maximum gear load.&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2012-11-07T21:25:55.483" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="297" PostTypeId="2" ParentId="271" CreationDate="2012-11-07T22:11:43.653" Score="3" Body="&lt;p&gt;How close together is important. I saw the range of 0-5m, but if you're suggesting that they might touch, or just barely not touch, then you're going to have difficulties. Lightweight is also a vague term which will need to be defined better in order to adequately answer your question. Still, there are some things to keep in mind:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Augmented GPS can get you sub-inch accuracy. This will likely involve an extra antenna, so space and weight might be a concern. You also have to make sure you don't lose GPS accuracy at the wrong time, which I've seen with some systems.&lt;/li&gt;&#xA;&lt;li&gt;As geez suggests, IMU is very useful for the 6-DOF tracking.&lt;/li&gt;&#xA;&lt;li&gt;You almost certainly know this, but 3D movement makes this a tricky problem. Avoiding collisions is &lt;em&gt;relatively&lt;/em&gt; easy, but ensuring the proper formation between the two means sensing the other vehicle will require a wide range of detection.&lt;/li&gt;&#xA;&lt;li&gt;A sensor such as MS's Kinect will get you some around .6m to 3m 3D sensing, but in a relatively narrow cone, so you'd need several to cover the all around the planes. Also, they're not all &lt;em&gt;that&lt;/em&gt; fast and will have trouble in difficult weather. Most weather, really. I don't know of any variants that are outdoor rated, especially in cold/damp (condensation on a lens would kill that sensor).&lt;/li&gt;&#xA;&lt;li&gt;Which also brings me to another question: speed. Planes are all reasonably fast, but there's glider fast and there's supersonic jet fast and all ranges in between. Refresh rate vs. distance between UAVs will be a very important consideration. Is 30-60hz enough time for your UAVs to correct when they're a few meters apart, or do they need something close to 100hz?&lt;/li&gt;&#xA;&lt;li&gt;If 30-60Hz is enough, you could potentially mark your UAVs with a distinctive pattern and use optics to detect that pattern and, combined with GPS etc, use that for close-range stuff. The problem with straight image detection is that it's computationally intensive and sometimes tricky to do, especially depending on your math skills. You'd have to have a way to keep the lens clear of condensation, like the Kinect, but I don't believe that's an intractable problem in this case, because you have a lot of options on cameras. Not saying it'd be easy, but easier than with a Kinect-style sensor.&lt;/li&gt;&#xA;&lt;li&gt;XBee is cool, but it's all packet based, so there's a maximum refresh rate on transmitting between units. You'd probably need some tolerance on lost packets, as well.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So, no sure answers yet, but possibly with some domain narrowing we could help you more. Size, weight, minimum distance, and maximum speed limits will all wildly affect what solution you might go with.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;UPDATE based on additional information:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hmmm. I don't think there's an ideal solution. An array of ultrasonics could get you collision avoidance, but there's no high-refresh rate 3D sensor that I know of that could make a bubble around your plane in the 0-5m range. If you were scaling up, you could use something like a Velodyne laser to do something like the equivalent, but environmental conditions would make that less than ideal without work on the software end.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Think hard about tolerances. Is it vital they be able to fly within X cm of wingtip to wingtip? Do they need to be coplanar, or would it be okay if one were, for example, +/- a meter above the other as long as they don't collide? You might also see if you have options on the navigational smarts of the planes, so that, as long as they're following their flight plans within tolerance, they are quiet, but if they are blown off course (or whatever), then they send out an alert to the other UAVs with what they know to be wrong. A differential system might be enough, though I imagine the test cycle for that will be exciting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, do a check on Augmented GPS systems to see if someone makes a lightweight version. Most of the ones I've seen are for agricultural use, so they're more keen to make it ideal for putting on a tractor, but it's worth checking.&lt;/p&gt;&#xA;" OwnerUserId="300" LastEditorUserId="300" LastEditDate="2012-11-08T15:38:18.260" LastActivityDate="2012-11-08T15:38:18.260" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="298" PostTypeId="2" ParentId="128" CreationDate="2012-11-08T00:44:45.050" Score="0" Body="&lt;p&gt;In response to &quot;when/in which case&quot; real-time systems are used:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my experience, motion control is the main application for real-time systems. For controlling motors a high frequency (100hz, 1000hz and more) and low jitter (time variations) are important. Safety is a big point here. Consider a robot among humans: For example, you want/need to ensure that the robot (arm) stops in a specific time frame/distance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For other tasks such as path planning, vision processing and reasoning real-time system are not that important and often avoided due to the overhead in development time and hardware costs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nowadays, big robots such as the PR2 combine both worlds. In the real-time context of the RT enabled operating system (e.g. Linux + Xenomai) motion control is happening and in the non-real-time part (user land), vision processing and planning are embedded in systems like ROS. Both can run on the same computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm happy to edit this answer, once the question has been clarified. :-)&lt;/p&gt;&#xA;" OwnerUserId="90" LastActivityDate="2012-11-08T00:44:45.050" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="299" PostTypeId="1" AcceptedAnswerId="308" CreationDate="2012-11-08T00:59:40.857" Score="19" ViewCount="12252" Body="&lt;p&gt;The forward kinematics of a robot arm can be solved easily. We can represent each joint using &lt;a href=&quot;http://en.wikipedia.org/wiki/Denavit%E2%80%93Hartenberg_parameters&quot;&gt;Denavit–Hartenberg&lt;/a&gt; transformation matrices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, if the $i^{th}$ joint is a linear actuator, it may have the transformation matrix:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$T_i = \left[\begin{matrix}&#xA;1&amp;amp;0&amp;amp;0&amp;amp;0\\&#xA;0&amp;amp;1&amp;amp;0&amp;amp;0\\&#xA;0&amp;amp;0&amp;amp;1&amp;amp;d_i\\&#xA;0&amp;amp;0&amp;amp;0&amp;amp;1&#xA;\end{matrix} \right]$&#xA;where the extension length is defined by $d_i$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;whereas, a rotating link may be:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$T_i = \left[\begin{matrix}&#xA;1&amp;amp;0&amp;amp;0&amp;amp;L\\&#xA;0&amp;amp;\cos\alpha_i&amp;amp;-\sin\alpha_i&amp;amp;0\\&#xA;0&amp;amp;\sin\alpha_i&amp;amp;\cos\alpha_i&amp;amp;0\\&#xA;0&amp;amp;0&amp;amp;0&amp;amp;1&#xA;\end{matrix} \right]$ where $\alpha$ is the angle, and $L$ is the length of the link.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We can then find the position and orientation of the end effector by multiplying all the transformation matrices: $\prod{T_i}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The question is, how do we solve the inverse problem?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mathematically, for a desired end effector position $M$, find the parameters $d_i$, $\alpha_i$ such that $\prod{T_i} = M$. What methods exist to solve this equation?&lt;/p&gt;&#xA;" OwnerUserId="145" LastActivityDate="2019-02-23T22:42:19.703" Title="How can the inverse kinematics problem be solved?" Tags="&lt;inverse-kinematics&gt;&lt;kinematics&gt;&lt;joint&gt;&lt;robotic-arm&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="300" PostTypeId="2" ParentId="271" CreationDate="2012-11-08T01:27:02.223" Score="1" Body="&lt;p&gt;You could use the gps system for long-range co-ordination, an altimeter for height, and ultra-sonic sensors for close-range co-ordination. When the planes get in to close proximity the ultrasonic sensors would work for collision prevention. The only extra weight would be ultrasonic sensors, and an altimeter.&lt;/p&gt;&#xA;" OwnerUserId="216" LastActivityDate="2012-11-08T01:27:02.223" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="301" PostTypeId="1" CreationDate="2012-11-08T02:30:43.450" Score="8" ViewCount="199" Body="&lt;p&gt;What's the best kind of spline that can be used for generating trajectory that can be adapted during execution time?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The use case is having a differential drive which has to move towards a point (x,y,theta) without stopping during the movement (e.g. no, turn toward the goal, straight move to the goal position, turn to the goal orientation). The robot is provided with a laser scanner for detecting dynamic obstacles which have to be avoided.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What's the best kind of controller in this case?&lt;/p&gt;&#xA;" OwnerUserId="87" LastEditorUserId="350" LastEditDate="2012-11-13T21:00:11.800" LastActivityDate="2012-11-13T21:00:11.800" Title="Which spline function would be best suited for the trajectory of a differential drive" Tags="&lt;control&gt;&lt;motion-planning&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="302" PostTypeId="2" ParentId="255" CreationDate="2012-11-08T02:59:09.417" Score="2" Body="&lt;p&gt;Personally I feel that Parallax has a good set of offerings in this area.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For wheeled/ground prototyping, I would choose a &lt;a href=&quot;http://www.parallax.com/Store/Robots/AllRobots/tabid/755/ProductID/666/List/0/Default.aspx?SortField=ProductName,ProductName&quot; rel=&quot;nofollow&quot;&gt;Madeusa&lt;/a&gt; ($880) chassis.  This is a very good starting chassis that can carry a decent payload and is very extensible.  I've seen security guard robot prototypes and autonomous camera man robots made on top of this platform that were very impressive.  Madeusa is basically the same chassis as the Parallax Eddie but without the Propeller and PC/Kinect parts.  By removing these parts, you can substitute back in your own control system such as an Arduino based solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://www.parallax.com/Store/Robots/FlyingPlatforms/tabid/964/ProductID/799/List/0/Default.aspx?SortField=ProductName,ProductName&quot; rel=&quot;nofollow&quot;&gt;ELEV-8&lt;/a&gt; ($600) chassis is a good flying platform.  I haven't tried this one myself but it has good reviews as hitting a sweet spot of cost, performance, complexity, and capability.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In all cases I'd suggest learning Arduino as your microcontroller platform for sensor and actuator integration.  Great community, low costs, high capabilities.&lt;/p&gt;&#xA;" OwnerUserId="35" LastActivityDate="2012-11-08T02:59:09.417" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="303" PostTypeId="2" ParentId="150" CreationDate="2012-11-08T03:04:21.043" Score="1" Body="&lt;p&gt;Take it for what it's worth, I was next to the OpenROV booth at Maker Faire and their answer was 'let it leak and dry it off later'.  They said they were surprised that water getting into the motor didn't cause issues for them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;'course I haven't tried this myself and I may have misheard them -- or perhaps nothing had failed for them &lt;em&gt;yet&lt;/em&gt; :-)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It may be worthwhile though to start with cheap motors and see if your experience matches theirs...&lt;/p&gt;&#xA;" OwnerUserId="35" LastActivityDate="2012-11-08T03:04:21.043" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="304" PostTypeId="2" ParentId="209" CreationDate="2012-11-08T04:35:06.483" Score="2" Body="&lt;p&gt;Most of the straightforward ICP methods use a Least-Squares type approach. It is common and easiest to model when assuming a Gaussian error model corrupts the point cloud data. In this case the least squared fitting component of the ICP algorithm produces a Gaussian error model for its solution parameters with estimated variance. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That is, if you have access to the error's after matching, then you can estimate a Gaussian error on your transform's parameters in the same way you'd estimate the error in any other linear regression.&lt;/p&gt;&#xA;" OwnerUserId="323" LastActivityDate="2012-11-08T04:35:06.483" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="305" PostTypeId="2" ParentId="262" CreationDate="2012-11-08T05:10:26.443" Score="2" Body="&lt;p&gt;Many rules of thumb and other scaling laws applicable to robots involve the mass of all or some part of the robot.&#xA;I look forward to other answers pointing out more of them.&#xA;One of the most surprising rules I've seen:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The batteries should weigh roughly the same as everything else on the airframe combined.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With a given aircraft -- everything known except for the mass of the batteries --&#xA;the absolute maximum flight time occurs when the weight of the batteries is twice as much as the weight of everything else on the airframe combined.&#xA;Reference: Andres 2011. &lt;a href=&quot;http://api.ning.com/files/aFMLPsgnHmZXdNMAY8PM0KekqE4uAQSMx2C%2ausF6KDpKiqpO4L9-hrUKYBsS-xtRMqo-K4GR5TPsM2Isq56oMw__/battery_capacity.pdf&quot; rel=&quot;nofollow&quot;&gt;Optimal Battery Capacity&lt;/a&gt;.&#xA;via &lt;a href=&quot;http://www.heino.com/?page_id=24443&quot; rel=&quot;nofollow&quot;&gt;Heino R. Pull&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This rule of thumb applies to all kinds of battery-powered aircraft -- fixed-wing, quadcopters, helicopters etc.&lt;/p&gt;&#xA;" OwnerUserId="187" LastActivityDate="2012-11-08T05:10:26.443" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="306" PostTypeId="5" CreationDate="2012-11-08T07:18:06.113" Score="0" Body="&lt;p&gt;The Raspberry Pi is a credit-card sized computer, based around a Broadcom BCM2835 (containing an ARM1176JZFS core), with floating point, running at 700Mhz, and a Videocore 4 GPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Currently two models are available:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Model A has 256Mb RAM, one USB port and no Ethernet (network connection).&lt;/li&gt;&#xA;&lt;li&gt;Model B  has 512Mb RAM, 2 USB port and an Ethernet port.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;There are a range of supported operating systems, which run from an SD card.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;StackExchange users may also be interested in the &lt;a href=&quot;https://raspberrypi.stackexchange.com&quot;&gt;Raspberry Pi StackExchange&lt;/a&gt; site&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Raspberry Pi is a trademark of the &lt;a href=&quot;https://www.raspberrypi.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Raspberry Pi Foundation&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="134" LastEditorUserId="6890" LastEditDate="2017-08-30T21:12:54.893" LastActivityDate="2017-08-30T21:12:54.893" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="307" PostTypeId="4" CreationDate="2012-11-08T07:18:06.113" Score="0" Body="The Raspberry Pi is a credit-card sized general purpose computer. Questions about Raspberry Pi but not related to robotics are off-topic, but may be asked on Raspberry Pi Stack Exchange." OwnerUserId="134" LastEditorUserId="15160" LastEditDate="2018-12-01T13:19:42.120" LastActivityDate="2018-12-01T13:19:42.120" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="308" PostTypeId="2" ParentId="299" CreationDate="2012-11-08T10:08:15.363" Score="11" Body="&lt;p&gt;Back in the day, when I was learning, making this up as I went along, I used simple gradient following to solve the IK problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your model, you try rotating each joint each joint a tiny amount, see how much difference that makes to the end point position error. Having done that, you then rotate each joint by an amount proportional to the benefit it gives. Then you do that over and over again until you're close enough.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Generally, this is known as gradient following, or hill following. Imagine a robot arm with two degrees of freedom:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/TTFq5.gif&quot; alt=&quot;IK&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Rotating joint &lt;strong&gt;A&lt;/strong&gt; a tiny bit moves the end point in direction &lt;strong&gt;a&lt;/strong&gt;. Rotating joint &lt;strong&gt;B&lt;/strong&gt; a tiny bit moves the end point in direction &lt;strong&gt;b&lt;/strong&gt;.  Both of these move us closer to the target by about the same amount, so we should rotate both joints at about the same speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If we were to plot a graph of the distance to the target versus joint angles, it would look like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/t2Nv5.gif&quot; alt=&quot;IK&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have coloured in some contours just to help. We can see the path this algorithm takes. What you'll notice is that in joint space, the path taken does not look optimal. It takes a curve. However, in real space, you would see the end point taking a fairly straight line to the target. You can also see that there are actually two solutions to the problem, and the algorithm has just found the closest one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is not the only way to solve the inverse kinematics problem. It's certainly not the best way either.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pros:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It's conceptually simple, so great if you're just learnig this.&lt;/li&gt;&#xA;&lt;li&gt;It's easy to implement, even if the sight of Denavit–Hartenberg transformation matrices gives you the frights.&lt;/li&gt;&#xA;&lt;li&gt;It's very general, allowing you to use all kinds of joints: rotary, linear, something else, as long as you can estimate how they cause the end point to move.&lt;/li&gt;&#xA;&lt;li&gt;It copes well, even when there are zero or an infinite number of solutions. &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Cons:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It's slow, taking many iterations to find the solution. However, it's fine if you can just have the real arm follow the progress of the algorithm as it's calculated.&lt;/li&gt;&#xA;&lt;li&gt;It can get stuck in local minima. I.E. It might not find the best possible solution, if it finds a good enough one.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;There are more details about it on my very old web site: &lt;a href=&quot;http://web.archive.org/web/20160531030510/http://freespace.virgin.net/hugo.elias/models/m_ik2.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;The good-looking textured light-sourced bouncy fun smart and stretchy page&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="40" LastEditorUserId="15038" LastEditDate="2016-10-20T12:58:52.543" LastActivityDate="2016-10-20T12:58:52.543" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="309" PostTypeId="1" AcceptedAnswerId="337" CreationDate="2012-11-08T12:07:23.013" Score="11" ViewCount="2781" Body="&lt;p&gt;I've been doing a lot of reading lately about &lt;a href=&quot;http://en.wikipedia.org/wiki/Subsumption_architecture&quot; rel=&quot;nofollow&quot;&gt;Subsumption Architecture&lt;/a&gt; and there are a few different ways people seem to advocate. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For instance some people use a global &quot;flag&quot; variable to have a task take control. Others use the &lt;code&gt;endTimeSlice()&lt;/code&gt; and allow the arbiter to really choose. And I think this is correct. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have this small section of &lt;a href=&quot;http://en.wikipedia.org/wiki/Robotc&quot; rel=&quot;nofollow&quot;&gt;RobotC&lt;/a&gt; code that I'm working on for a line following robot but am not sure I am doing it right as currently the track method will always take over the find method. The correct flow should be that find should guide the robot to the line using a spiral path to find the line. Once the line is found track should take over. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;task evade(){&#xA;    if(SensorValue(forwardSonarSensor) &amp;gt; threshold){&#xA;            //box the obstruction&#xA;    }&#xA;}&#xA;&#xA;task find(){&#xA;    if(SensorValue(lightSensor) &amp;gt; threshold){&#xA;            //spiral the robot&#xA;    }&#xA;}&#xA;&#xA;task track(){&#xA;&#xA;    if(SensorValue(lightSensor) &amp;lt; threshold){&#xA;            //go straight&#xA;    }else{&#xA;                //execute turns to follow the line&#xA;    }&#xA;}&#xA;&#xA;task main(){&#xA;    while(true){&#xA;        StartTask(evade,9);&#xA;        StartTask(track,8);&#xA;        StartTask(find,7);&#xA;        wait1Msec(250);&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I've just used some comments here rather than the actual code to keep it brief. Are my if statements not good enough as conditions because when the robot is off the line, &lt;code&gt;track()&lt;/code&gt; takes over. Is this due to the else statement within track? If so, how to have &lt;code&gt;track()&lt;/code&gt; perform turns when it looses the line without taking over from forage at the start of the program? &lt;/p&gt;&#xA;" OwnerUserId="349" LastEditorUserId="132" LastEditDate="2012-11-13T19:00:50.403" LastActivityDate="2017-12-23T14:34:53.413" Title="Correct way to use Subsumption Architecture with Robot C" Tags="&lt;mobile-robot&gt;&lt;software&gt;&lt;two-wheeled&gt;&lt;robotc&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="310" PostTypeId="2" ParentId="213" CreationDate="2012-11-08T12:26:42.660" Score="4" Body="&lt;p&gt;Many recent Android devices, such as the Nexus 7, support USB On The Go (OTG) which is a fancy way of saying that 'USB Host Mode' is supported.  In these cases, with the right cable which can be had for less than $1, any compatible USB device can be used.  You don't need a specialty version of the Arduino that has hardware for USB Host mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've experimented with this enough to know that a 'normal' Arduino such as the Leonardo or Teensy 2 appears to an Android phone as a TTY (e.g. serial port) device when connected with an OTG cable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://android.serverbox.ch/?p=549&quot; rel=&quot;nofollow&quot;&gt;This article&lt;/a&gt; goes into depth on how to use the Android USB Host API to communicate to the Arduino from an Android app.  It requires Android 3.1+ and does not require you to root the device.&lt;/p&gt;&#xA;" OwnerUserId="35" LastActivityDate="2012-11-08T12:26:42.660" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="311" PostTypeId="2" ParentId="128" CreationDate="2012-11-08T12:46:30.213" Score="2" Body="&lt;p&gt;Start thinking about your robot in terms of multiple CPUs and the real time question shifts.  If you have an algorithm that needs high speed reliable feedback such as a two wheel balancer or a quad-copter stabilizer or a servo pulse out, real time is extremely important, but the task is also very constrained.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can offload a control loop like this to a dedicated real time CPU such as the cheap 8 bit AVR or low end 32 bit ARMs found in the Arduino class of devices.  There's nothing preventing you from adding many dozens of these small MCUs running dedicated control loops, USB device enumeration even makes this easy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now that you have the timing sensitive control loops handled by a dedicated CPU, you can relax the real time needs of the 'brain' of the robot which can run higher end logic using components such as ROS on Linux or Kinect for Windows.&lt;/p&gt;&#xA;" OwnerUserId="35" LastActivityDate="2012-11-08T12:46:30.213" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="312" PostTypeId="2" ParentId="237" CreationDate="2012-11-08T12:55:36.627" Score="4" Body="&lt;p&gt;I'd suggest two possible approaches.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Use a 'heartbeat' to transfer a well known state packet at a fixed frequency that fits within your 'speed budget'.  In this case, you never send ad hoc messages directly from the PC or MCU, all you can do is update the state packet which will be sent at the scheduled time.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Put a hard limit on your 'transmission budget' and enforce it.  E.g. you can only send one packet every 100 ms and if a 2nd packet is submitted before 100 ms has expired, its transmission is delayed until the 100 ms timeout (e.g. quantum) has expired.  This requires you to add messages to a queue and then send from the queue at a fixed rate.  Similar in approach to the heartbeat in #1 but a bit more efficient since data isn't sent when it hasn't changed.  The downside of this design is if you are oversending, you build higher and higher latencies into your communications and if you have variable bursty communication the communications latency can vary widely.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I tend to work with #1 to send data from the MCU since the algorithm is simple and small.&lt;/p&gt;&#xA;" OwnerUserId="35" LastActivityDate="2012-11-08T12:55:36.627" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="313" PostTypeId="2" ParentId="150" CreationDate="2012-11-08T13:15:23.520" Score="12" Body="&lt;p&gt;If you're looking for a very cheap way to do it (as in, educational budget cheap), check out the &lt;a href=&quot;https://www.seaperch.org/action/document/download?document_id=254&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sea Perch ROV build manual&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Full disclosure, I used to work at the MIT lab that heads up this educational program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On page 9 of that PDF it starts talking about how to waterproof a hobby motor with a film canister and toilet bowl wax.  The entire housing remains submerged and we've taken it to 20 or 30 foot depths in some cases.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/X1vDz.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/X1vDzm.jpg&quot; alt=&quot;Potted Hobby Motor&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The build is actually pretty straightforward; we help a lot of junior high and high school kids make these and I can't remember an incident where the seal turned out to be unreliable.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2019-12-16T15:02:26.847" LastActivityDate="2019-12-16T15:02:26.847" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="314" PostTypeId="2" ParentId="230" CreationDate="2012-11-08T13:17:03.553" Score="6" Body="&lt;p&gt;Robotics is hard enough as it is when all your dependencies are working.  The last thing you need are additional problems coming from incompatible components or unsupported combinations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I looked into this a little and here was my progression:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Raspberry Pi doesn't support Ubuntu because it's ARM CPU uses an older instruction set (ARM v6 I believe?) and the Ubuntu team dropped support for this back in like 2009.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beaglebone is similar to a Raspberry Pi in many ways and has a newer instruction set so it will run Ubuntu.  However the 'best' Ubuntu ARM distribution is coming out of the Linaro project and they dropped support for the Beaglebone a few revisions back (last was Linaro 12.03) because it's using an older TI OMAP 3 processor (welcome to the wonderful world of rapid smartphone progress).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My next step was to look at the TI Pandaboard which uses the newer OMAP 4 processor that is currently supported, but it costs closer to the $200 range.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But now Ubuntu officially released for the Nexus 7.  At 200 dollars, the Nexus 7 gets you everything a Raspberry Pi offers plus a lot more.  Keep in mind that even with a Raspberry Pi, once you add in the charger, wifi adapter, storage card, and cables you're creeping up closer to 100 dollars than 35 dollars so imho the Nexus 7 is a much better deal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lastly, don't try and output a 1 khz signal out of a non real time OS.  Attach yourself a cheap microcontroller like the PJRC Teensy (Arduino clone) and let it handle the simple real time tasks for you.  This way you dedicate the inexpensive CPU to these simple time sensitive tasks.  At 16 MHz with support for multiple timers, a little AVR MCU can handle a half dozen tasks like this without issue.&lt;/p&gt;&#xA;" OwnerUserId="35" LastActivityDate="2012-11-08T13:17:03.553" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="315" PostTypeId="2" ParentId="172" CreationDate="2012-11-08T13:27:13.290" Score="2" Body="&lt;p&gt;You're asking how to use an acceleration sensor to make better position measurements.  As you've correctly pointed out, these accumulate error over time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One way to improve this is to have periodic absolute-position updates, like from GPS, or from the techniques in many of the answers here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, don't overlook any abilities you may have to get absolute-velocity updates.  Any speed-over-ground sensor, or just the raw position/velocity data from the wheels (if you have wheels) can improve your dead reckoning accuracy.  &lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2012-11-08T13:27:13.290" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="316" PostTypeId="2" ParentId="215" CreationDate="2012-11-08T13:36:39.213" Score="3" Body="&lt;p&gt;I'd suggest using kits to get you started.  There are excellent resources today that will quickly get you enough confidence and knowledge to built great robots.  I'd stick with as 'mainstream' technologies as you can in order to maximize what you can learn from others.  The most mainstream microcontroller you could choose is the Arduino Uno, perhaps its newer replacement the Arduino Leonardo.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.makershed.com/Getting_Started_with_Arduino_Kit_V3_0_p/msgsa.htm&quot; rel=&quot;nofollow&quot;&gt;Make's Getting Started with Arduino&lt;/a&gt; plus &lt;a href=&quot;http://www.makershed.com/MakerShield_p/msms01.htm&quot; rel=&quot;nofollow&quot;&gt;Maker Shield&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This gets you the documentation, microcontroller, electronics, and your first few projects to get started with.  The documentation is excellent and takes you from very beginning to enough knowledge to do your own projects.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Add some electronics background by getting the &lt;a href=&quot;http://www.makershed.com/product_p/9780596153748.htm&quot; rel=&quot;nofollow&quot;&gt;Make Electronics&lt;/a&gt; book with the matching &lt;a href=&quot;http://www.makershed.com/Make_Electronics_Components_Pack_1_p/mecp1.htm&quot; rel=&quot;nofollow&quot;&gt;Components Pack 1&lt;/a&gt; so you can do the projects in the book.  This will get you familiar enough to add blinky lights and simple sensors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then get your tooklit basics, such as the &lt;a href=&quot;http://www.adafruit.com/products/136&quot; rel=&quot;nofollow&quot;&gt;Ladyada's Electronics Toolkit&lt;/a&gt;.  Your first step up from this should be a better soldering iron such as the &lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/B000BRC2XU&quot; rel=&quot;nofollow&quot;&gt;Weller WES51&lt;/a&gt; once you've done enough projects to know why you need it :-)&lt;/p&gt;&#xA;" OwnerUserId="35" LastActivityDate="2012-11-08T13:36:39.213" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="317" PostTypeId="1" CreationDate="2012-11-08T13:41:39.337" Score="7" ViewCount="209" Body="&lt;p&gt;I have built a few simple X/Y/Z CNC machines.  I've learned about G-Code, motor control, firmware and open loop systems.  I see machines like rovers, big dog and factory arms that seem incredibly complex by comparison, yet they don't seem that magical any more.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What are the important skills to pick up from working with CNC machines?  What's the next logical thing to learn?  What things would CNC machines never teach me?&lt;/p&gt;&#xA;" OwnerUserId="208" LastEditorUserId="350" LastEditDate="2012-11-30T14:24:45.093" LastActivityDate="2012-11-30T14:24:45.093" Title="How much can working with CNC machines teach you about robotics?" Tags="&lt;control&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="318" PostTypeId="2" ParentId="46" CreationDate="2012-11-08T13:44:14.723" Score="5" Body="&lt;p&gt;Lithium Ion Polymer batteries are probably your best bet.  &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;They will present the least amount of magnetic interference (followed by Alkaline... NiCD interferes the most).  &lt;/li&gt;&#xA;&lt;li&gt;Unlike the regular lithium ion cells (which are usually round), these ones will stack nicely.  &lt;/li&gt;&#xA;&lt;li&gt;I hope you'll check the manual before trying this -- many of them are pressure tolerant.  I know of some AUV labs that just put stacks of cellphone-sized batteries into rectangular boxes filled with oil (for pressure compensation) and go with it.  For example, Autosub 6000's battery packs -- depth-rated to 6000 meters, without the aid of a cylindrical or spherical pressure housing:&#xA;&lt;img src=&quot;https://i.stack.imgur.com/dxHKf.jpg&quot; alt=&quot;Pressure Compensated Battery Pack&quot;&gt;&#xA;(&lt;a href=&quot;http://www.thesearethevoyages.net/jc44/autosub6000_page1.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.thesearethevoyages.net/jc44/autosub6000_page1.html&lt;/a&gt;).&#xA;For other battery technologies, you'll have to decide how to pack them into your pressure housing, which may be a bit more complicated.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2012-11-21T17:02:53.280" LastActivityDate="2012-11-21T17:02:53.280" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="319" PostTypeId="2" ParentId="317" CreationDate="2012-11-08T14:33:27.223" Score="9" Body="&lt;p&gt;Building CNC equipment may teach you:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Motor control&lt;/li&gt;&#xA;&lt;li&gt;Kinematics and coordinated movement&lt;/li&gt;&#xA;&lt;li&gt;How to choose motors for a given load&lt;/li&gt;&#xA;&lt;li&gt;Mechanical movement (torque, moment, etc)&lt;/li&gt;&#xA;&lt;li&gt;Simple electronics&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Running CNC equipment may teach you:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Software control of hardware&lt;/li&gt;&#xA;&lt;li&gt;Timing (at least on the gross level)&lt;/li&gt;&#xA;&lt;li&gt;Feedback&lt;/li&gt;&#xA;&lt;li&gt;Hardware error detection and recovery&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;While the fields are different, very broadly speaking CNC machines are merely robots.  The reverse is true.  Due to their specific use there's different terminology and typically different control and usage schemes and scenarios, but at the end of the day you are moving things under electronic, and often autonomous, control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even today's high speed circuit board assembly machines use computer vision in complex ways similar to today's advanced robotics.  You'll find that the two fields share most things in common such that everything you learn in one will apply to the other in some way.&lt;/p&gt;&#xA;" OwnerUserId="356" LastActivityDate="2012-11-08T14:33:27.223" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="320" PostTypeId="2" ParentId="262" CreationDate="2012-11-08T15:28:38.840" Score="1" Body="&lt;p&gt;Practical point of view: Traction of wheel&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Traction of the wheel (friction between wheel and surface) is proportional to the mass of the robot. Small mobile robots with low mass can have low wheel traction, and can easily slip on the surface, friction co-efficient of the wheel and surface area of contact between wheel and surface. Even if the wheel slippage is not too much, even small slippage can make big difference in accumulating odometer error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Summarizing, higher the mass of the robot, better is the traction of wheel with surface.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The type of wheel/tire will be one of the important design consideration as the mass of robot varies. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wasted lots of time trying to make a mobile robot (differential drive with 2 driven wheels + caster wheel, size around 10x15cm, mass &amp;lt; 1 kg) follow specified trajectory, and get proper odometer data. It had hard plastic wheel with rubber band tire. In normal operation slippage was barely noticeable and used slip at every small variation on floor. It also used to get stuck easily at small obstacles. Even though the motor had lots of torque, wheels used to just spin in place, due to lack of sufficient traction. At one point I added lots of deadweight to improve the traction.  &lt;/p&gt;&#xA;" OwnerUserId="289" LastEditorUserId="289" LastEditDate="2012-11-08T15:34:41.243" LastActivityDate="2012-11-08T15:34:41.243" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="321" PostTypeId="2" ParentId="112" CreationDate="2012-11-08T17:06:45.933" Score="0" Body="&lt;p&gt;If you are not near the robot but require an e-stop, you'll want to consider a watchdog circuit watching a remote signal. The circuit keeps an eye out for a pulsing signal and, if the signal stops pulsing, activates the e-stop circuitry. You want to have this as close to a physical circuit as you can, which means the pulse can't be interpreted by a computer nor a microcontroller, because either of those are likely to have failure states that will prevent them from adequately actuating the e-stop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As many of the other answers are stating, the ideal e-stop is one in which any failure mode will cause an emergency stop, which means that the laws of physics are doing most of the work of the e-stopping, rather than something resembling software. Of course, trying to interpret that stop correctly depends greatly on what the robot is meant to do and the consequences of it stopping that action, but failure of an e-stop system should not ensure that your robot keeps running.&lt;/p&gt;&#xA;" OwnerUserId="300" LastActivityDate="2012-11-08T17:06:45.933" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="322" PostTypeId="2" ParentId="299" CreationDate="2012-11-08T18:25:05.147" Score="3" Body="&lt;p&gt;There a number of solutions to this problem that center around the Jacobian Matrix. This &lt;a href=&quot;http://billbaxter.com/courses/290/html/img0.htm&quot; rel=&quot;nofollow&quot;&gt;slideshow&lt;/a&gt; covers the Jacobian methods and also mentions a Cyclic Coordinate Descent method, which I am unfamiliar with. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are a plethora of resources on the subject - if you ask google for &lt;a href=&quot;https://www.google.com/search?q=%22inverse%20kinematics%20Jacobian%22&quot; rel=&quot;nofollow&quot;&gt;&quot;inverse kinematics Jacobian&quot;&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, check out Chapter 5.3 of the lecture notes from M&lt;a href=&quot;http://ocw.mit.edu/courses/mechanical-engineering/2-12-introduction-to-robotics-fall-2005/&quot; rel=&quot;nofollow&quot;&gt;IT's Open Course on Introductory Robotics&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="366" LastEditorUserId="37" LastEditDate="2012-11-12T03:17:31.833" LastActivityDate="2012-11-12T03:17:31.833" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="323" PostTypeId="1" AcceptedAnswerId="326" CreationDate="2012-11-08T19:23:49.510" Score="4" ViewCount="157" Body="&lt;p&gt;Is anyone able to help me out getting IPC-bridge working on my ubuntu lucid installation (with matlab 2012a)? I'm not being able to finish the last step on here (Compiling the messages folders): &lt;a href=&quot;https://alliance.seas.upenn.edu/~meam620/wiki/index.php?n=Roslab.IpcBridge#Installation&quot; rel=&quot;nofollow&quot;&gt;https://alliance.seas.upenn.edu/~meam620/wiki/index.php?n=Roslab.IpcBridge#Installation&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm able to rosmake the ipc_bridge_ros, however when i enter this &quot;roscd ipc_roslib &amp;amp;&amp;amp; make&quot;, it seems meX does not recognize the commands. Here is what i get (screen shot): &lt;a href=&quot;http://img13.imageshack.us/img13/6031/screenshot20121108at191.png&quot; rel=&quot;nofollow&quot;&gt;http://img13.imageshack.us/img13/6031/screenshot20121108at191.png&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;NOTE: i'm going to use IPC-bridge so that i can control a pioneer 3DX and implement a Fast-slam algorithm in matlab.&lt;/p&gt;&#xA;" OwnerUserId="370" LastActivityDate="2012-11-08T20:37:15.223" Title="IPC-Bridge problem" Tags="&lt;mobile-robot&gt;&lt;software&gt;&lt;slam&gt;&lt;ros&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="324" PostTypeId="2" ParentId="255" CreationDate="2012-11-08T19:41:14.950" Score="0" Body="&lt;p&gt;&lt;a href=&quot;http://www.parallax.com/&quot; rel=&quot;nofollow&quot;&gt;Parralax&lt;/a&gt; offers a number of kits that are relatively cheap and extensible.&lt;/p&gt;&#xA;" OwnerUserId="366" LastActivityDate="2012-11-08T19:41:14.950" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="325" PostTypeId="2" ParentId="172" CreationDate="2012-11-08T20:34:35.127" Score="2" Body="&lt;p&gt;&lt;a href=&quot;http://www.locatacorp.com/&quot; rel=&quot;nofollow&quot;&gt;http://www.locatacorp.com/&lt;/a&gt; might be the solution you are looking for. They offer technology  to create a local constellation indoor. It emulates the satellites for indoor GPS applications. I believe it can use GPS receivers indoor without the need for additional hardware on the robots.&lt;/p&gt;&#xA;" OwnerUserId="272" LastActivityDate="2012-11-08T20:34:35.127" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="326" PostTypeId="2" ParentId="323" CreationDate="2012-11-08T20:37:15.223" Score="2" Body="&lt;p&gt;That script is calling &quot;mex&quot; but it's getting pdfTex &quot;mex&quot; tool instead of the Matlab compiler.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before running that script you need to adjust your &lt;code&gt;PATH&lt;/code&gt; environment variable to put the Matlab binaries before your system ones.  Assuming your Matlab binaries are located in &lt;code&gt;/opt/matlab/bin&lt;/code&gt; that would look something like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;export PATH=/opt/matlab/bin:$PATH&#xA;roscd ipc_roslib &amp;amp;&amp;amp; make&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="20" LastActivityDate="2012-11-08T20:37:15.223" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="327" PostTypeId="1" AcceptedAnswerId="333" CreationDate="2012-11-08T23:07:14.817" Score="7" ViewCount="4872" Body="&lt;p&gt;I'm building a 4 legged robot (quadruped) with 3 Degrees of freedom per leg.&#xA;The goal of my project is to make this robot able to learn how to walk.&#xA;What learning algorithms will I need to implement for it to work?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm using an &lt;a href=&quot;http://www.arduino.cc/&quot; rel=&quot;nofollow&quot;&gt;Arduino Uno&lt;/a&gt; for the microcontroller.&lt;/p&gt;&#xA;" OwnerUserId="374" LastEditorUserId="110" LastEditDate="2016-01-03T13:53:11.287" LastActivityDate="2016-01-03T13:53:11.287" Title="Learning Algorithms for Walking Quadruped" Tags="&lt;arduino&gt;&lt;microcontroller&gt;&lt;machine-learning&gt;&lt;walking-robot&gt;" AnswerCount="5" CommentCount="3" FavoriteCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="328" PostTypeId="2" ParentId="327" CreationDate="2012-11-09T01:57:37.823" Score="5" Body="&lt;p&gt;Here's a paper that seems relevant: &lt;a href=&quot;http://www.cs.utexas.edu/~pstone/Papers/bib2html/b2hd-icra04.html&quot; rel=&quot;nofollow&quot;&gt;Policy Gradient Reinforcement Learning for Fast Quadrupedal Locomotion&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Abstract:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;This paper presents a machine learning approach to optimizing a quadrupedal trot gait for forward speed. Given a parameterized walk designed for a specific robot, we propose using a form of policy gradient reinforcement learning to automatically search the set of possible parameters with the goal of finding the fastest possible walk. We implement and test our approach on a commercially available quadrupedal robot platform, namely the Sony Aibo robot. After about three hours of learning, all on the physical robots and with no human intervention other than to change the batteries, the robots achieved the fastest walk known for the Aibo, significantly outperforming a variety of existing hand-coded and learned solutions.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="36" LastEditorUserId="36" LastEditDate="2013-06-12T17:54:05.187" LastActivityDate="2013-06-12T17:54:05.187" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="329" PostTypeId="2" ParentId="230" CreationDate="2012-11-09T02:08:29.410" Score="4" Body="&lt;p&gt;&lt;a href=&quot;http://www.ros.org/wiki/ROSberryPi/Setting%20up%20ROS%20on%20RaspberryPi&quot; rel=&quot;nofollow&quot;&gt;Yes it does&lt;/a&gt;, but installing ROS on Debian is do-able, yet not trivial.&lt;/p&gt;&#xA;" OwnerUserId="36" LastActivityDate="2012-11-09T02:08:29.410" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="330" PostTypeId="2" ParentId="39" CreationDate="2012-11-09T02:22:33.050" Score="1" Body="&lt;p&gt;There may be software differences, depending on how you connect to the device. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;On Linux, &lt;code&gt;freenect&lt;/code&gt; seems to work better with Kinect than Xtion, while &lt;code&gt;openni&lt;/code&gt; tries to support both, but seems rather buggy, lately.&lt;/p&gt;&#xA;" OwnerUserId="36" LastActivityDate="2012-11-09T02:22:33.050" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="331" PostTypeId="1" CreationDate="2012-11-09T02:34:15.060" Score="3" ViewCount="204" Body="&lt;p&gt;We are using a Koro robot for our PC based automation solution. But sometimes the robot is getting the command but refuses to respond. Then I get a serial communication timeout error. The error is happening for a random type of commands and it is also not happening all the time making the troubleshooting difficult.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I doubt the driver problem. How do you approach this problem.?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="377" LastActivityDate="2012-11-20T00:59:16.667" Title="Robot Serial Communication Error" Tags="&lt;logic-control&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="332" PostTypeId="2" ParentId="331" CreationDate="2012-11-09T06:34:56.977" Score="4" Body="&lt;p&gt;Welcome to Robotics... Hopefully, this will give you some pointers, although your situation is not easy to debug remotely :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Things to consider (and I appreciate its a non-repeatable problem):&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Does it only happen when battery levels are low, or also with full charge (voltage low)&lt;/li&gt;&#xA;&lt;li&gt;Does it only happen when the robot is active, or also from stationary (processor overload)&lt;/li&gt;&#xA;&lt;li&gt;What else is the control PC doing? (PC overload)&lt;/li&gt;&#xA;&lt;li&gt;Have you checked that the comms link is correct (voltage levels, numbers of bits, protocol etc) - Check with an oscilloscope.&lt;/li&gt;&#xA;&lt;li&gt;Noise interference (EMC) if the motors are active&lt;/li&gt;&#xA;&lt;li&gt;Can you log what is received at the robot?&lt;/li&gt;&#xA;&lt;li&gt;Is the receive buffer on the robot big enough for the biggest command sequence? (buffer overflow)&lt;/li&gt;&#xA;&lt;li&gt;Have you checked the cable, both for continuity and that it isn't loose.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;As things stand, it is difficult to be able to determine...&lt;/p&gt;&#xA;" OwnerUserId="134" LastEditorUserId="134" LastEditDate="2012-11-09T07:34:28.567" LastActivityDate="2012-11-09T07:34:28.567" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="333" PostTypeId="2" ParentId="327" CreationDate="2012-11-09T07:42:09.500" Score="9" Body="&lt;p&gt;There are a number of things to consider for your project. Since you are asking for the learning algorithms, I asume your hardware is or will be up and running. When getting your robot to learn, you should differentiate between on-line and off-line learning. Further, there is on-system and off-sytem learning, which can be combined with the previous category. Since your system only has a micro-controller attached to it, your method of choice would be off-system. You learn (be it on-line or off-line) on your connected PC, but not on the system. The system will just execute your current learned policy. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;All gait movements have some sort of cyclic nature, and can generally be described as functions that provide an angular value over time for each of the joints. The trick is to parametrize these functions that you come out with as little parameters as possible. Then you perform optimization on these functions. In order to do that you need to know what to optimize for. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most learning approaches will require some sort of reward function, so effectively some feedback to the algorithm to tell it how well it does perform (e.g. maximise distance travelled/energy required). The algorithm will then want to see the reward for a given set of parameters (single episode). Depending on the complexity of your problem, the number of episodes might be quite large. This is where the destinction between on-line and off-line learning comes in. In off-line learning you use a simulation to perform the learning and then later move it to the system. In on-line learning you learn directly on the system. This is generally more difficult, since you will have to spend a lot of time performing evaluations for the learning algorithm. &lt;/p&gt;&#xA;" OwnerUserId="127" LastActivityDate="2012-11-09T07:42:09.500" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="334" PostTypeId="2" ParentId="274" CreationDate="2012-11-09T09:06:23.637" Score="1" Body="&lt;p&gt;With a bit of additional research I have found one other project very similar to the OpenServo project. They are called supermodified servos. Some of the web sources are not available anymore, but there is the source for the project, which is quite advanced on google code and on github:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://code.google.com/p/zosupermodified/&quot; rel=&quot;nofollow&quot;&gt;zosupermodified&lt;/a&gt; - source code for the controller&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://github.com/jandetlefsen/Supermodified-Servo&quot; rel=&quot;nofollow&quot;&gt;Supermodified-Servo&lt;/a&gt; - eagle files&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="127" LastActivityDate="2012-11-09T09:06:23.637" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="335" PostTypeId="2" ParentId="39" CreationDate="2012-11-09T10:06:13.563" Score="7" Body="&lt;p&gt;You might also consider the &lt;a href=&quot;https://leapmotion.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Leap Motion&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/U52Ny.jpg&quot; alt=&quot;Leap Motion&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's got amazing resolution, and the ability to pick out individual fingers at an amazing update rate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/8fNK7.jpg&quot; alt=&quot;Leap Motion&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And is even fine enough to allow you to write in the air with a pencil:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/yQI9B.jpg&quot; alt=&quot;Leap Motion Pencil&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can't buy one yet, but they'll be available soon.&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2012-11-09T10:06:13.563" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="337" PostTypeId="2" ParentId="309" CreationDate="2012-11-09T14:36:48.600" Score="7" Body="&lt;p&gt;With Subsumption Architecture, you should carefully design your behaviors in such a way that if you assign task &lt;code&gt;T&lt;/code&gt; priority &lt;code&gt;n&lt;/code&gt;, then &lt;code&gt;T&lt;/code&gt; should be what the robot should do if all tasks with higher priority than &lt;code&gt;n&lt;/code&gt; are ignored.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's order your example tasks, then figure out a way to implement it. Your tasks are &lt;code&gt;evade&lt;/code&gt;, &lt;code&gt;find&lt;/code&gt; and &lt;code&gt;track&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general you would want the robot to track a line. However, if it couldn't detect the line, then it should try to find it. Above all, it should evade obstacles. This gives us the following ordering:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Highest priority: &lt;code&gt;evade&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Then: &lt;code&gt;find&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Then: &lt;code&gt;track&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The reason &lt;code&gt;find&lt;/code&gt; has higher priority than &lt;code&gt;track&lt;/code&gt; is that, as I mentioned above, you would &lt;code&gt;track&lt;/code&gt; only if &lt;code&gt;evade&lt;/code&gt; and &lt;code&gt;find&lt;/code&gt; are unnecessary. If you put &lt;code&gt;find&lt;/code&gt; below &lt;code&gt;track&lt;/code&gt;, that means you start tracking if there is no obstacle, even if you are not on the line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now let's look at your implementation:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;task find(){&#xA;    if(SensorValue(lightSensor) &amp;gt; threshold){&#xA;            //spiral the robot&#xA;    }&#xA;}&#xA;&#xA;task track(){&#xA;&#xA;    if(SensorValue(lightSensor) &amp;lt; threshold){&#xA;            //go straight&#xA;    }else{&#xA;                //execute turns to follow the line&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Remember that we gave &lt;code&gt;find&lt;/code&gt; a higher priority. Therefore, if the robot cannot sense the &lt;code&gt;lightSensor&lt;/code&gt;, it will go in spiral trying to find the line. Once it does, &lt;code&gt;track&lt;/code&gt; kicks in. As you can see, the &lt;code&gt;else&lt;/code&gt; condition of &lt;code&gt;track&lt;/code&gt; never happens.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While this works, the robot would move very awkwardly. There is not much you can do about it in fact, given the current build of your robot.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Although I already answered your question, but here is a simple improvement to your line tracking:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead of one light sensor, use two; &lt;code&gt;ls_left&lt;/code&gt; and &lt;code&gt;ls_right&lt;/code&gt;. Using (at least) two sensors, you can understand whether you are totally out of the track, or about to go out of the track. In the second case, you can easily turn to the proper direction and get back on track.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your &lt;code&gt;find&lt;/code&gt; task is similar:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;task find(){&#xA;    if (SensorValue(ls_left) &amp;gt; threshold&#xA;        &amp;amp;&amp;amp; Sensorvalue(ls_right) &amp;gt; threshold){&#xA;            //spiral the robot&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;That is, you go in spiral only if you don't sense anything at all&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your &lt;code&gt;track&lt;/code&gt; task now becomes more efficient:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;task track(){&#xA;&#xA;    if (SensorValue(ls_left) &amp;lt; threshold&#xA;        &amp;amp;&amp;amp; SensorValue(ls_right) &amp;lt; threshold){&#xA;            //go straight&#xA;    } else if (SensorValue(ls_left) &amp;lt; threshold&#xA;        &amp;amp;&amp;amp; SensorValue(ls_right) &amp;gt; threshold){&#xA;            //turn left&#xA;    } else if (SensorValue(ls_left) &amp;gt; threshold&#xA;        &amp;amp;&amp;amp; SensorValue(ls_right) &amp;lt; threshold){&#xA;            //turn right&#xA;    } else {&#xA;            // shouldn't happen, but go on spiral anyway&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Obviously, with a matrix of light sensors, you can better judge how badly you are going out of track (i.e. with what angle) and better decide how to get back on track (i.e. with what angular speed).&lt;/p&gt;&#xA;" OwnerUserId="158" LastActivityDate="2012-11-09T14:36:48.600" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="338" PostTypeId="1" CreationDate="2012-11-09T20:28:01.317" Score="0" ViewCount="65" Body="&lt;p&gt;I have a platform with two tracks and two motors. Each one uses an electronic speed control with &quot;double tap to reverse&quot;. Each ESC takes an input pulse train frequency from at 1500 neutral +/-700.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;I'm interested in learning if there are algorithms or a list of commands I can use to control how such platform executes maneuvers.&lt;/strong&gt; For example:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Lock one thread and have the platform rotate by using the other one&lt;/li&gt;&#xA;&lt;li&gt;Have two treads rotate in opposite directions&lt;/li&gt;&#xA;&lt;li&gt;Execute a U turn&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I'm struggling with expressing in code how such maneuvers should be executed. There's a &quot;dead&quot; zone around the 1500 pulse train frequency where the ESC output is too weak to cause the platform to move. The double tap to reverse also makes it tough to understand for how long each track should be turned off.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you for your input&lt;/p&gt;&#xA;" OwnerUserId="390" LastEditorUserId="350" LastEditDate="2012-11-30T14:21:48.713" LastActivityDate="2012-11-30T14:21:48.713" Title="Is there a list of maneuvers related to control of a tracked platform?" Tags="&lt;control&gt;&lt;motion-planning&gt;&lt;tracks&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="339" PostTypeId="2" ParentId="44" CreationDate="2012-11-09T21:54:41.913" Score="8" Body="&lt;h1&gt;There is no right answer.&lt;/h1&gt;&#xA;&lt;p&gt;However, I think I can clarify what you've read so far.  You need a buoyancy engine to supply the thrust, wings to direct that thrust, and some ability to change your pitch angle when you change the buoyancy.  So, you'll need to balance the strength of your engine with the drag created by your wings.  At the same time, your wings need to be big enough to convert vertical forces of buoyancy into horizontal motion.  (Generally, the shallower depths you work with, the less power your buoyancy engine will require.)&lt;/p&gt;&#xA;&lt;h1&gt;Existing Gliders&lt;/h1&gt;&#xA;&lt;p&gt;This is a complex problem, and the existing solutions to it vary wildly.&lt;/p&gt;&#xA;&lt;h2&gt;Seaglider&lt;/h2&gt;&#xA;&lt;p&gt;The Seaglider AUV (built at the University of Washington, now owned by iRobot) is shaped to achieve laminar flow.  The antenna attaches at the back, allowing the vehicle to communicate while pointing nose-down at the surface.  It has no external moving parts; all control is done by shifting weight internally.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/F2dfR.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/F2dfR.jpg&quot; alt=&quot;Seaglider, in pieces&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&#xA;&lt;sub&gt;(source: &lt;a href=&quot;http://www.seaglider.washington.edu/graphics/glider-inpieces.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;washington.edu&lt;/a&gt;)&lt;/sub&gt;&lt;/p&gt;&#xA;&lt;h2&gt;Spray&lt;/h2&gt;&#xA;&lt;p&gt;The Spray Glider (built at Scripps Institute of Oceanography, now owned by Bluefin) is a more cylindrical shape.  The antenna is located in one of the wings, and the vehicle lays on its side on the surface to communicate.&lt;br /&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/Z93l6.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Z93l6.jpg&quot; alt=&quot;Spray Glider&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&#xA;&lt;sub&gt;(source: &lt;a href=&quot;http://auvac.org/uploads/configuration/spray.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;auvac.org&lt;/a&gt;)&lt;/sub&gt;&lt;/p&gt;&#xA;&lt;h2&gt;Slocum Gliders&lt;/h2&gt;&#xA;&lt;p&gt;Slocum gliders go for a cylindrical shape that's more suited to the pressure housing.  They have an electric powered version, but the real magic is in their more modern &amp;quot;thermal glider&amp;quot; -- they take advantage of the fact that pressure increases with depth but temperature decreases with depth to make an engine that requires no (or very little) electrical input.  Like Seaglider, the antenna is in the tail.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/QxVKZ.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QxVKZ.jpg&quot; alt=&quot;Slocum Glider&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&#xA;&lt;sub&gt;(source: &lt;a href=&quot;http://marine.rutgers.edu/cool/glider/webpage/PartsOfGlider.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;rutgers.edu&lt;/a&gt;)&lt;/sub&gt;&lt;/p&gt;&#xA;&lt;h2&gt;Liberdade XRAY&lt;/h2&gt;&#xA;&lt;p&gt;The Liberdade XRAY is shaped like a flying wing and (to my knowledge) is actually the fastest autonomous underwater glider ever made.  It's more for naval use than scientific use -- it tracks submarines.&#xA;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/3/38/Liberdade_XRay_underwater_glider.jpg&quot; alt=&quot;Liberdade XRAY&quot; /&gt;&lt;/p&gt;&#xA;&lt;h1&gt;Approaching the problem (from scratch)&lt;/h1&gt;&#xA;&lt;p&gt;If you can't find a hydrodynamics expert to help (which would be the best option), I would suggest starting with your buoyancy engine and working outward.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Figure out how much buoyancy your engine can create&lt;/li&gt;&#xA;&lt;li&gt;Figure out how much power your engine requires&lt;/li&gt;&#xA;&lt;li&gt;Decide how large of a battery you'll need -- this will be a significant proportion of total weight&lt;/li&gt;&#xA;&lt;li&gt;Explore your ability to trim your vehicle (likely by moving the battery fore and aft) and calculate the pitch angles you'll be able to produce&lt;/li&gt;&#xA;&lt;li&gt;Repeat steps 1-4 as necessary&lt;/li&gt;&#xA;&lt;li&gt;Make a prototype shape, make its buoyancy half of what the engine can produce (minus a little for safety).  Then drag it to the bottom of a pool and see what happens.&lt;/li&gt;&#xA;&lt;li&gt;Repeat steps 1-6 as necessary&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="350" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2019-02-18T23:02:31.223" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="340" PostTypeId="2" ParentId="167" CreationDate="2012-11-09T22:31:56.087" Score="16" Body="&lt;p&gt;A similar experimental method to hauptmech's answer that I was taught in college:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Set all gains to 0.&lt;/li&gt;&#xA;&lt;li&gt;Increase &lt;i&gt;K&lt;sub&gt;d&lt;/sub&gt;&lt;/i&gt; until the system oscillates.&lt;/li&gt;&#xA;&lt;li&gt;Reduce &lt;i&gt;K&lt;sub&gt;d&lt;/sub&gt;&lt;/i&gt; by a factor of 2-4.&lt;/li&gt;&#xA;&lt;li&gt;Set &lt;i&gt;K&lt;sub&gt;p&lt;/sub&gt;&lt;/i&gt; to about 1% of &lt;i&gt;K&lt;sub&gt;d&lt;/sub&gt;&lt;/i&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Increase &lt;i&gt;K&lt;sub&gt;p&lt;/sub&gt;&lt;/i&gt; until oscillations start.&lt;/li&gt;&#xA;&lt;li&gt;Decrease &lt;i&gt;K&lt;sub&gt;p&lt;/sub&gt;&lt;/i&gt; by a factor of 2-4.&lt;/li&gt;&#xA;&lt;li&gt;Set &lt;i&gt;K&lt;sub&gt;i&lt;/sub&gt;&lt;/i&gt; to about 1% of &lt;i&gt;K&lt;sub&gt;p&lt;/sub&gt;&lt;/i&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Increase &lt;i&gt;K&lt;sub&gt;i&lt;/sub&gt;&lt;/i&gt; until oscillations start.&lt;/li&gt;&#xA;&lt;li&gt;Decrease &lt;i&gt;K&lt;sub&gt;i&lt;/sub&gt;&lt;/i&gt; by a factor of 2-4.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://en.wikipedia.org/wiki/Ziegler%E2%80%93Nichols_method&quot;&gt;Ziegler-Nichols method&lt;/a&gt; is more precise if you can get an accurate number for the oscillation period. It does generally cause oscillations using the &quot;classic PID&quot; numbers given, so it's not always optimal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For general rules on the effect of each term on rise time, overshoot, settling time, steady-state error, and stability, see Table 1 of &lt;a href=&quot;http://eprints.gla.ac.uk/3815/1/IEEE_CS_PID_01580152.pdf&quot;&gt;&quot;PID Control System Analysis and Design&quot;&lt;/a&gt;, by Li, Ang, and Chong in IEEE Control Systems Magazine.&lt;/p&gt;&#xA;" OwnerUserId="308" LastEditorUserId="308" LastEditDate="2012-11-10T00:29:22.887" LastActivityDate="2012-11-10T00:29:22.887" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="341" PostTypeId="1" CreationDate="2012-11-10T00:02:42.607" Score="6" ViewCount="141" Body="&lt;p&gt;I am thinking of developing a tendon driven robot manipulator for an industrial application that requires a high level of reliability. However, I am aware that tendons in a robot are prone to wear and tear, and failure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I go about selecting a suitable tendon material (steel, kevlar, spectra, etc.) and use it appropriately?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Have any studies been undertaken to examine longevity and failure patterns in robotic tendon materials?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I were to perform tests on materials myself, how can I perform those tests efficiently, and make best use of the testing time (learn as much as possible about tendon failure in a reasonable length of time).&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2012-11-15T06:43:47.260" Title="Tendon longevity" Tags="&lt;failure&gt;&lt;reliability&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="342" PostTypeId="1" CreationDate="2012-11-10T00:26:06.763" Score="-2" ViewCount="280" Body="&lt;p&gt;Is there a taxonomy of errors that are common in robotics? Things that come to mind but I don't have names for are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Getting stuck in a stable infinite loop&lt;/li&gt;&#xA;&lt;li&gt;Going into an unstable feedback loop (A balancing robot overcompensating more with each correction)&lt;/li&gt;&#xA;&lt;li&gt;An inability to generalize between tasks (Pick up a bowl vs pick up a glass)&lt;/li&gt;&#xA;&lt;li&gt;An inability to generalize between 'similar' sensory inputs.&lt;/li&gt;&#xA;&lt;li&gt;Causing damage to itself or its environment.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;These would be things that make a robot look 'stupid' to a non-roboticist. If you're curious I want to have this list so I can then prepare a clear answer ready for people who don't know why these various things are hard.&lt;/p&gt;&#xA;" OwnerUserId="54" LastActivityDate="2012-11-12T00:25:59.593" Title="What are some common mistakes that robots make?" Tags="&lt;errors&gt;" AnswerCount="2" CommentCount="3" ClosedDate="2012-11-12T03:21:27.017" ContentLicense="CC BY-SA 3.0" />
  <row Id="343" PostTypeId="2" ParentId="215" CreationDate="2012-11-10T04:57:12.930" Score="3" Body="&lt;p&gt;The answers so far have covered the more general electronics stuff pretty well, so I'm going to focus on your mention of the Kinect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Something Arduino-based is a good starting point for embedded electronics even though you already know C/assembly. What Arduino offers for you is a higher level API -- you COULD muck around with bitwise operations to modify peripheral configuration registers all day, but you have robots to make! &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, it has nowhere near the horsepower needed to make use of a Kinect on its own. It needs quite a bit of USB bandwidth just to process &lt;a href=&quot;http://openkinect.org/wiki/FAQ#What_is_the_frame_size.2Fbitrate_of_the_rgb.2Fdepth.2FIR_stream_contained_in_the_isochronous_usb_tranfers_etc..3F&quot; rel=&quot;nofollow&quot;&gt;all of the raw output data&lt;/a&gt;, let alone do anything useful with it. I've heard of proof-of-concept robots connecting one to a netbook and I think once even a PandaBoard (which has smartphone-level performance using an OMAP chip), but nothing smaller than that. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Start reading up on ROS and the Kinect &lt;a href=&quot;http://www.ros.org/wiki/openni_camera&quot; rel=&quot;nofollow&quot;&gt;openni_camera&lt;/a&gt; and &lt;a href=&quot;http://www.ros.org/wiki/openni_tracker&quot; rel=&quot;nofollow&quot;&gt;openni_tracker&lt;/a&gt; drivers. Use a laptop/netbook (the Raspberry Pi is apparently &lt;a href=&quot;http://www.raspberrypi.org/phpBB3/viewtopic.php?f=37&amp;amp;t=6552&amp;amp;start=25&quot; rel=&quot;nofollow&quot;&gt;too slow&lt;/a&gt; to give more than 2-3 FPS) for the Kinect and have that talk over USB to the Arduino, which will control all of your other electronics directly.&lt;/p&gt;&#xA;" OwnerUserId="308" LastEditorUserId="308" LastEditDate="2012-11-10T19:48:21.033" LastActivityDate="2012-11-10T19:48:21.033" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="344" PostTypeId="1" CreationDate="2012-11-10T09:40:37.547" Score="11" ViewCount="2536" Body="&lt;p&gt;Given a six-axis articulated robot arm holding a tool at its end-effector,  if I have a desired tool position and tool orientation,  there will be exactly 1 solution to the inverse kinematics equation for the robot to reach that position.&lt;br&gt;&#xA;(or rather up to 16 different solutions, depending on range of the joints)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/CkYqu.gif&quot; alt=&quot;http://en.wikipedia.org/wiki/Robotic_arm&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But if the robot is holding something like a pen, and I want the robot to mark a specific point with that pen on the target, then I do not care how the pen is oriented, as long as it is perpendicular to the marked surface.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the inverse-kinematics equation will have infinitely many solutions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I pick among these solutions the joint configuration that is closest to the current configuration: the one that will require the least amount of movement to reach?&lt;br&gt;&#xA;(or the joint configuration that is optimal according to some other similar criterion, such as that all joint angles are furthest from their maximum and minimum?)&lt;/p&gt;&#xA;" OwnerUserId="362" LastEditorUserId="362" LastEditDate="2012-11-10T10:24:49.623" LastActivityDate="2013-12-18T18:31:22.517" Title="With a 6-axis robot, given end-effector position and range of orientations, how to find optimal joint values" Tags="&lt;localization&gt;&lt;motion-planning&gt;&lt;industrial-robot&gt;&lt;inverse-kinematics&gt;&lt;kinematics&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="345" PostTypeId="2" ParentId="344" CreationDate="2012-11-10T11:17:14.240" Score="10" Body="&lt;p&gt;First, we need to define &lt;strong&gt;optimal&lt;/strong&gt;. Since you do not say what you consider optimal, most people choose a quadratic expression. For example, suppose your current joint angles are given by the vector $\vec{\alpha}$. We can consider minimizing the movement required - with an error $\vec{x} = \vec{\alpha} - \vec{\alpha}_{start}$, you can define a cost function $J=\vec{x}^TQ\vec{x}$ for some matrix $Q$. We normally use a diagonal matrix, but any positive-definite matrix will do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a simplified example with two joint angles, if joint $a$ had a cheaper motor (perhaps closer to end-effector), we might have a cost function of&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$J=\left[\begin{matrix}x_a\\x_b\end{matrix} \right]\left[\begin{matrix}1&amp;amp;0\\0&amp;amp;2\\\end{matrix} \right]\left[\begin{matrix}x_a&amp;amp;x_b\end{matrix} \right]$, ie. movement of joint $b$ is twice as costly as joint $a$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, the kinematic equation is a matrix formula, and in Denavit-Hartenberg notation might be:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\prod{T_i}=\left[\begin{matrix}1&amp;amp;0&amp;amp;0&amp;amp;x\\0&amp;amp;1&amp;amp;0&amp;amp;y\\0&amp;amp;0&amp;amp;1&amp;amp;z\\0&amp;amp;0&amp;amp;0&amp;amp;1\end{matrix} \right]$, where the right hand side represents the position $(x,y,z)$ and orientation (currently set as zero rotation), given the joint angles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since we do not care about the orientation, and only the position, we can truncate the first 3 columns of the last transformation matrix, and the last row of the first transformation matrix. We can equivalently express this formula as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\left[\begin{matrix}1&amp;amp;0&amp;amp;0&amp;amp;0\\0&amp;amp;1&amp;amp;0&amp;amp;0\\0&amp;amp;0&amp;amp;1&amp;amp;0\end{matrix}\right]\prod{T_i}\left[\begin{matrix}0\\0\\0\\1\end{matrix}\right]=\left[\begin{matrix}x\\y\\z\end{matrix} \right]$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Multiplying out the left hand side, we get three equations. If the parameters were linear, it would be simple to solve. This is the case if all the actuators are linear actuators. In this case, the problem is actually a &lt;strong&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Quadratic_programming&quot;&gt;quadratic program&lt;/a&gt;&lt;/strong&gt;. We can re-arrange the left hand side to get the equation:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$K\vec{x}=\left[\begin{matrix}x\\y\\z\end{matrix}\right]$, for some matrix $K$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A quadratic program is a problem which can be expressed in the form:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Minimize $J=\frac{1}{2}\vec{x}^TQ\vec{x}+\vec{c}^T\vec{x}$&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Subject to $A\vec{x}\leq\vec{b}$, $E\vec{x}=\vec{d}$&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;To solve this, there are a number of algorithms you can use, for example, interior point, active set, ... . Just find a suitable library, and it will solve it for you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A non-linear system of equations is more difficult to solve. This is called &lt;strong&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Nonlinear_programming&quot;&gt;non-linear programming&lt;/a&gt;&lt;/strong&gt;, but it is what you have if you have rotating joints.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Essentially, in place of matrix equations, you have nonlinear functions.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Minimize $f(x)$ subject to $\vec{h}(x) = 0$, $\vec{g}(x) \leq 0$ (re-arrange if necessary to make the RHS of the constraints zero)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The algorithms used to solve this are even more complex, but includes Interior-point, Sequential quadratic programming (SQP), Active-set, Trust-region reflective algorithms. Obviously, the explanation of how these algorithms work is very lengthy, and I will leave it out of the scope of this answer. Suffice it to say, the amount of content on the algorithms used for just quadratic programming could be a whole course by itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should just find a library to solve the problem, it would take a long time to code up an efficient implementation, and efficient implementations can handle 100 (or more) variables at a time. For example, if you use MATLAB, then there is documentation on how to use the function &lt;a href=&quot;http://www.mathworks.com/help/optim/ug/constrained-nonlinear-optimization-examples.html#f11071&quot;&gt;fmincon&lt;/a&gt; from the Optimization Toolbox.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To solve it online, you might want C++ or other native implementation, for example, NLopt. Do note that this may not be something a microcontroller can solve quickly, and many libraries may have other dependencies which are not easy to use on a microcontroller (since they are intended for a computer).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;If you are not worried about efficiency, and just want something you can code yourself, then assuming there is a function you can call to solve the &lt;strong&gt;inverse kinematic problem&lt;/strong&gt;, you can simply do a gradient descent method. For example, arbitrarily choosing a random starting orientation, solve the inverse problem, then check the cost function. Then you can use perturbation analysis to check how you should vary the orientation. For example, if you check similar orientations around your current orientation (ie. 8 points in a cubic grid), you can get a second order approximation of how the cost function varies in each direction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using the second order approximation (known as a Hessian matrix since it is multivariate - 3-dimensional for orientation), you can find the zero-crossing of the gradient of the cost function (ie. the predicted local minima).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the new predicted orientation, just put it through the inverse solver again, and repeat until the accuracy is sufficient.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do note that this will probably not be as efficient, because the inverse kinematic problem itself must be iteratively solved (so you are repeatedly using a function which itself takes a while to solve). Also, the code involved may be less than a fully-fledged optimization algorithm, but it is still quite substantial, and not an insignificant investment of time.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Using either method (formally solving as a nonlinear program or using the iteratively using a function to solve the inverse problem), the solution may not be optimal if there are multiple local minima. In this case, you can try to find the global minima by using various approaches. Even with a non-linear programming solver, you will be expected to seed it with initial values (eg. joint angles). You can repeatedly run either method with the seed generated in various ways:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;random restart (it is generated randomly)&lt;/li&gt;&#xA;&lt;li&gt;grid-based&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;or other custom methods.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However do note that if there are many minima, there is no good way to guarantee that you will find the global minima. You can only improve your chances.&lt;/p&gt;&#xA;" OwnerUserId="145" LastEditorUserId="145" LastEditDate="2012-11-10T12:11:49.050" LastActivityDate="2012-11-10T12:11:49.050" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="346" PostTypeId="2" ParentId="309" CreationDate="2012-11-10T12:40:15.673" Score="4" Body="&lt;p&gt;short answer; no you really need to do things quite a bit differently.&lt;/p&gt;&#xA;&lt;p&gt;long incomplete answer;&#xA;Let me give you some psuedo code appropriate for robotC, that puts you on a better path. First, do not use tasks - this is NOT what robotC tasks are for. They could be made to work, maybe, maybe not (and you need quite a few changes to even try).&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;// global variables&#xA;int distance;&#xA;int light;&#xA;&#xA;main() {&#xA;   while (true) {&#xA;   distance = read_distance;&#xA;   light = read_light;&#xA;   if (task1_wantsToRun())&#xA;     task1_run();&#xA;   if (task2_wantsToRun())&#xA;     task2_run();   &#xA;   }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;there is a couple of things here; priority becomes irrelevant. As nice as it seems to have tasks in robotC with priorities, they are not a good choice for subsumption implementation in my experience. For reasons like, priorities are not always honored, tasks can not be interrupted (sometimes) so when a higher priority event occurs, it is not going to react like you expect, robotC only recently became re-entrant, so things like accessing a sensor from more than 1 task may be risky (I2C timing issues), and in some cases it is not (automatically polled sensors).&lt;/p&gt;&#xA;&lt;p&gt;You can add your own priority implementation to the above loop as you get things working, but it really is not needed for starts.&lt;/p&gt;&#xA;&lt;p&gt;Your comment &amp;quot;//box the obstruction&amp;quot;  describes a ballistic behavior. Those are a bit tricky to implement using multi-tasking. The simple loop I used makes it a lot easier, and better for starters/learning.&lt;/p&gt;&#xA;&lt;p&gt;The other thing I will leave you with, is that subsumption while being neat and appropriate for a lot of things, is not a good way to implement what is better done traditionally. Indeed the 'evade' portion may be a good candidate for subsumption, but honestly your other task should be called 'GoOnAboutYourBusiness'. I say this because you probably do not want to change from searching to following with subsumption. Handle those with traditional programming loops. With a single sensor, - is the light sensed darker or lighter than it was last loop?  if it got darker (assuming black line) keep turning the same direction, if it got lighter turn the other way, if it stayed the same, go straight. You probably need to add some PID and use a steering curve instead of just turning left and right to be smoother.&lt;/p&gt;&#xA;&lt;p&gt;And yes, multiple sensors help. &lt;a href=&quot;http://www.mindsensors.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.mindsensors.com/&lt;/a&gt;  - yeah, that's me in the movie currently (11/10/2012)&lt;/p&gt;&#xA;&lt;h3&gt;Update: actual code&lt;/h3&gt;&#xA;&lt;p&gt;I will try this out in a little while, but it compiles and illustrates what I wrote above:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;#pragma config(Sensor, S1,     S_LIGHT,        sensorLightActive)&#xA;#pragma config(Sensor, S2,     S_DISTANCE,     sensorSONAR)&#xA;#pragma config(Motor,  motorB,          LEFT,          tmotorNXT, PIDControl, encoder)&#xA;#pragma config(Motor,  motorC,          RIGHT,         tmotorNXT, PIDControl, encoder)&#xA;//*!!Code automatically generated by 'ROBOTC' configuration wizard               !!*//&#xA;&#xA;int distance_value, light_value;&#xA;&#xA;bool evade_wantsToRun()&#xA;{&#xA;    return distance_value &amp;lt; 30;&#xA;}&#xA;&#xA;void evade_task()&#xA;{&#xA;    // full stop&#xA;    motor[LEFT] = 0;        &#xA;    // evade the object ballistically (ie in full control)  &#xA;    // turn left, drive&#xA;    nSyncedTurnRatio = 0;&#xA;    motor[LEFT] = -20;&#xA;    Sleep(500);&#xA;    nSyncedTurnRatio = 100;&#xA;    Sleep(1000);&#xA;    // turn right, drive&#xA;    nSyncedTurnRatio = 0;&#xA;    motor[LEFT] = 20;&#xA;    Sleep(500);&#xA;    nSyncedTurnRatio = 100;&#xA;    Sleep(1000);&#xA;    // turn right, drive&#xA;    nSyncedTurnRatio = 0;&#xA;    motor[LEFT] = 20;&#xA;    Sleep(500);&#xA;    nSyncedTurnRatio = 100;&#xA;    Sleep(1000);&#xA;    // turn left, resume&#xA;    nSyncedTurnRatio = 0;&#xA;    motor[LEFT] = 20;&#xA;    Sleep(500);&#xA;    motor[LEFT] = 0;&#xA;}&#xA;&#xA;///////////////////////////////&#xA;&#xA;void TurnBySteer(int d)&#xA;{&#xA;    // normalize -100 100 to 0 200&#xA;    nSyncedTurnRatio = d + 100; &#xA;}&#xA;///////////////////////////////&#xA;&#xA;typedef enum programPhase { starting, searching, following, finished };&#xA;programPhase phase = starting;&#xA;&#xA;// these 'tasks' are called from a loop, thus do not need to loop themselves&#xA;&#xA;void initialize()&#xA;{&#xA;    nSyncedTurnRatio = 50;&#xA;    nSyncedMotors = synchBC;&#xA;    motor[LEFT] = 30;       // start a spiral drive&#xA;    phase = searching;&#xA;}&#xA;&#xA;void search()&#xA;{&#xA;    if (light_value &amp;lt; 24)&#xA;    {&#xA;        nSyncedTurnRatio = 100;&#xA;        phase = following;&#xA;    }&#xA;}&#xA;&#xA;int lastLight = -1;&#xA;int currentSteer = 0;&#xA;void follow()&#xA;{&#xA;    // if it is solid white we have lost the line and must stop&#xA;    // if lightSensors detects dark, we are on line&#xA;    // if it got lighter, we are going more off line&#xA;    // if it got darker we are headed in a good direction, slow down turn in anticipation&#xA;    // +++PID will be even smoother&#xA;    if (light_value &amp;gt; 64)&#xA;    {&#xA;        motor[LEFT] = 0;&#xA;        phase = finished;&#xA;        return;&#xA;    }&#xA;    if (light_value &amp;lt; 24)&#xA;        currentSteer = 0;&#xA;    else if (light_value &amp;gt; lastLight)&#xA;        currentSteer += sgn(currentSteer) * 1;&#xA;    else    // implied (light_value &amp;lt; lastLight)&#xA;        currentSteer -= sgn(currentSteer) * 1;      &#xA;&#xA;    TurnBySteer(currentSteer);&#xA;}&#xA;&#xA;bool regularProcessing_wantsToRun()&#xA;{&#xA;    return phase != finished;&#xA;}&#xA;&#xA;void regularProcessing_task()&#xA;{&#xA;    switch (phase)&#xA;    {&#xA;    case starting:&#xA;        initialize();&#xA;        break;&#xA;    case searching:&#xA;        search();&#xA;        break;&#xA;    case following:&#xA;        follow();&#xA;    }&#xA;}&#xA;&#xA;task main()&#xA;{&#xA;    // subsumption tasks in priority oder&#xA;    while (true)&#xA;    {&#xA;        // read sensors once per loop&#xA;        distance_value = SensorValue[S_DISTANCE];&#xA;        light_value = SensorValue[S_LIGHT];&#xA;        if (evade_wantsToRun())&#xA;            evade_task();&#xA;        if (regularProcessing_wantsToRun())&#xA;            regularProcessing_task();&#xA;        else&#xA;            StopAllTasks();&#xA;        EndTimeSlice();     // give others a chance, but make it as short as possible&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="274" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2012-11-12T03:25:10.157" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="348" PostTypeId="2" ParentId="255" CreationDate="2012-11-10T18:54:15.103" Score="2" Body="&lt;p&gt;&lt;a href=&quot;http://www.arduino.cc&quot; rel=&quot;nofollow&quot;&gt;Arduino&lt;/a&gt; is a great fit for your problem. It is not only used by hobbyists and beginners but it is frequently used by top Universities for both teaching and in research. Arduino also has a large active community which makes helps when you have a problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are a couple of caveats to the Arduino solution however. 1) They have very limited computational power and no floating point unit which can further slow down calcuation. 2) Working with Arduino does require one to have a rudimentary understanding of electronics. Of course there are myriad tutorials that can help you get up and running in a matter of minutes. However when I first delved into robotics I wanted to avoid the electronics aspect so as to focus on the programming.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.phidgets.com/&quot; rel=&quot;nofollow&quot;&gt;Phidgets&lt;/a&gt; is a good alternative. Many Phidgets components are abstracted to the point that you only need to connect them to a computer via USB and processing is done on a desktop, laptop, or single board computer (SBC) which have more processing power. Furthermore Phidgets works with multiple operating systems and they offer a lot of well documented code to simplify interfacing with their parts. It is worth noting that Phidgets solutions tend to cost a bit more than Arduino solutions but they're still reasonably priced.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would suggest against &lt;a href=&quot;http://www.parallax.com/&quot; rel=&quot;nofollow&quot;&gt;Parallax&lt;/a&gt;. They are interesting but they don't offer anything over Arduino, they are more expensive (than Arduino), and they are considerably less flexible from a programming perspective in my experience.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also Phidgets do not work well in UAV applications. For that I would advise looking at the &lt;a href=&quot;http://diydrones.com&quot; rel=&quot;nofollow&quot;&gt;ArduPilot&lt;/a&gt;. It is an Arduino based solution to UAV and UGV robots and includes a number of built-in sensors for state estimation. Furthermore ArduPilo has its own a large active community.&lt;/p&gt;&#xA;" OwnerUserId="177" LastEditorUserId="177" LastEditDate="2012-11-10T19:03:49.077" LastActivityDate="2012-11-10T19:03:49.077" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="349" PostTypeId="2" ParentId="255" CreationDate="2012-11-10T19:05:53.840" Score="2" Body="&lt;p&gt;Get a LEGO NXT kit, it costs around $280, and will give you a lot of fun.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can control it from your computer using any programming language - just send Bluetooth commands to the LEGO NXT brick. It is very simple!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to learn more - here is a simple KB article about that: &lt;a href=&quot;http://www.robotappstore.com/Knowledge-Base/Introduction-To-Lego-NXT-Programming/32.html&quot; rel=&quot;nofollow&quot;&gt;http://www.robotappstore.com/Knowledge-Base/Introduction-To-Lego-NXT-Programming/32.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="394" LastActivityDate="2012-11-10T19:05:53.840" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="351" PostTypeId="2" ParentId="342" CreationDate="2012-11-10T19:22:07.843" Score="2" Body="&lt;p&gt;To a roboticist it might look like a stupid question, however, I think your question is valid, and even important!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Setting expectations is very important when introducing robots to the general public, this will help bridging between Hollywood-robots and real-life robots.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think the most important difference is understanding the context. Robots (or computer) are very good with computing an answer to a mathematical question, however they are clueless about the context of the question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;for example - ask a humanoid robot to reach his right hand to touch his left ear. In most of the cases I saw - the robot tried to get to the left ear through the head... the context has to be hard coded into everything...&lt;/p&gt;&#xA;" OwnerUserId="394" LastActivityDate="2012-11-10T19:22:07.843" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="352" PostTypeId="2" ParentId="287" CreationDate="2012-11-10T19:24:37.623" Score="9" Body="&lt;p&gt;&lt;a href=&quot;http://ros.org&quot;&gt;Robot Operating System&lt;/a&gt; (ROS) offers the ability to use Javascript to control your robots. Specifically you will want to look at &lt;a href=&quot;http://ros.org/wiki/rosbridge/Tutorials/Using%20Javascript%20to%20control%20ROS%20via%20rosjs&quot;&gt;rosbridge&lt;/a&gt;. You will then need to use &lt;a href=&quot;http://www.ros.org/wiki/rosserial&quot;&gt;rosserial&lt;/a&gt; to interface with the microcontroller controlling your robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While I am a big fan of ROS this is an overly complicated way to begin exploring the field of robotics IMHO. You would be better served to pick up an &lt;a href=&quot;http://arduino.cc&quot;&gt;Arduino&lt;/a&gt; and learning a little bit of C. Arduino does a great job of making the process simple and C is not a large deviation from JS from a syntax perspective.&lt;/p&gt;&#xA;" OwnerUserId="177" LastActivityDate="2012-11-10T19:24:37.623" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="353" PostTypeId="2" ParentId="301" CreationDate="2012-11-10T20:14:56.007" Score="1" Body="&lt;p&gt;I have not done it myself yet, but, I have always planned on finding algorithm(s) here; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://opensteer.sourceforge.net/&quot; rel=&quot;nofollow&quot;&gt;http://opensteer.sourceforge.net/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The controller they include is called 'unaligned collision avoidance'.&lt;/p&gt;&#xA;" OwnerUserId="274" LastActivityDate="2012-11-10T20:14:56.007" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="354" PostTypeId="1" AcceptedAnswerId="367" CreationDate="2012-11-10T20:26:08.600" Score="6" ViewCount="221" Body="&lt;p&gt;I am interested in learning more about &lt;a href=&quot;http://en.wikipedia.org/wiki/Subsumption_architecture&quot; rel=&quot;noreferrer&quot;&gt;subsumption architecture&lt;/a&gt;. I have read a number of books that talk about the idea but none of them go into great detail. I have also read a fair number of Dr. Brooks papers on the topic however he hasn't published much on the topic in recent years.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this still an active area of research? Are there are any must read papers on the topic?&lt;/p&gt;&#xA;" OwnerUserId="177" LastEditorUserId="37" LastEditDate="2012-11-15T02:36:50.763" LastActivityDate="2012-11-15T02:36:50.763" Title="Is subsumption architecture still an active area of research?" Tags="&lt;control&gt;&lt;research&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="355" PostTypeId="2" ParentId="287" CreationDate="2012-11-11T05:03:50.090" Score="2" Body="&lt;p&gt;A friend of mine actually has a pretty powerful &lt;a href=&quot;http://glench.com/make/nodejs-robot/&quot; rel=&quot;nofollow&quot;&gt;tank robot&lt;/a&gt; that's controlled with NodeJS over wifi. The robot itself isn't exactly &quot;small-robotics&quot; at 150 pounds, but you could probably learn quite a bit from the source code. It has a netbook onboard running a webserver and talking to an Arduino. You can find the source code on his Github &lt;a href=&quot;https://github.com/Glench/Capstone-Tank-Robot-Software&quot; rel=&quot;nofollow&quot;&gt;project page&lt;/a&gt;. The real-time control from a web browser on another computer is surprisingly responsive.&lt;/p&gt;&#xA;" OwnerUserId="308" LastActivityDate="2012-11-11T05:03:50.090" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="356" PostTypeId="2" ParentId="287" CreationDate="2012-11-11T07:58:20.457" Score="5" Body="&lt;p&gt;Generally there are many ways to use node.js with a platform, like &lt;a href=&quot;http://blog.tomg.co/post/21322413373/how-to-install-node-js-on-your-raspberry-pi&quot;&gt;this one for the RPi&lt;/a&gt;. There are a lot more similar ones &lt;a href=&quot;https://www.google.co.in/search?sugexp=chrome,mod=3&amp;amp;sourceid=chrome&amp;amp;client=ubuntu&amp;amp;channel=cs&amp;amp;ie=UTF-8&amp;amp;q=nodejs+robotics&quot;&gt;if you just search for them&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another interesting one is &lt;a href=&quot;http://www.arduinodev.com/software/ardugate/&quot;&gt;ArduGate&lt;/a&gt;, which lets web pages communicate with the arduino via JS (though probably not exactly what you wanted since it doesn't compile and load to  the arduino)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Though I really don't see what's wrong with using a different language. I myself write primarily in JS, but I find myself perfectly comfortable programming an Arduino in C++ (it also allows C and Java, and if you put in a bit of work, &lt;a href=&quot;http://arduino.cc/playground/Main/Interfacing&quot;&gt;quite a few more languages&lt;/a&gt; ). Remember, we're not needing anything fancy for programming a robot--just normal &lt;code&gt;if&lt;/code&gt;s,&lt;code&gt;for&lt;/code&gt;s,&lt;code&gt;while&lt;/code&gt;s,&lt;code&gt;switch&lt;/code&gt;es, and the occasional &lt;code&gt;class&lt;/code&gt;. Learn the syntax, and you're good to go :) The only thing is that C/C++/Java are strongly typed (though if you're using the RPi, python is weakly typed but picky in a million more ways), so you may get a bit of frustration in the beginning when you have to specify types for everything. One advantage of using the native languages is that it's much easier to find APIs and example code on the net. For example, aside from ArduGate(which has it built in and is probably not what you wanted), I can't find any way to access the EEPROM--a common task. So, unless you want to stick to simple programs, it's just better to use the native languages.&lt;/p&gt;&#xA;" OwnerUserId="126" LastActivityDate="2012-11-11T07:58:20.457" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="358" PostTypeId="1" CreationDate="2012-11-11T16:47:45.837" Score="6" ViewCount="2081" Body="&lt;p&gt;I am looking for a way to restrict a robot's range of motion, using complex constraints such as not tearing of a cable attached to the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Take an articulated 6-axis robot arm as shown below, with attached cable (red), fixed at points X (before axis A4) and Y (after axis A6).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/ipApa.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The cable will limit the range of movement for the robot. It can stretch and bend only to some extend, but something like a full 360° turn of axis A4, with all other axes remaining as they are in the picture, will tie the cable around the arm and rip it off.&lt;br&gt;&#xA;If joint A5 is at 0°, then A4 and A6 can still move the full 360°, but they cannot diverge too much from each other, as that would twist the cable. If A5 is tilted, the relationship becomes even more complicated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can you express such a constraint?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is not a simple joint constraint, where you can independently limit the range of the joints, and it is also not a positional constraint, where you can define a region the robot must not enter. Checking a start and a goal posture is not sufficient, since along the path from start to goal posture there may still be a posture that puts too much strain on the cable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Without limiting the robot to a small set of pre-tested paths, how can you limit the robot to movements that will not rip off the cable?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What are the standard techniques used for this sort of problem?&lt;/p&gt;&#xA;" OwnerUserId="362" LastEditorUserId="362" LastEditDate="2012-11-11T17:02:40.207" LastActivityDate="2012-11-14T18:28:36.620" Title="restricting range of motion with complex constraints" Tags="&lt;motion-planning&gt;&lt;industrial-robot&gt;&lt;joint&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="359" PostTypeId="1" CreationDate="2012-11-11T16:58:29.480" Score="8" ViewCount="201" Body="&lt;p&gt;Currently I have a tricycle style robot that uses an extended kalman filter in order to track 6 state variables. The inputs to the system are a steer encoder, a distance encoder, and a rotating laser that returns bearing only information to known landmarks. Currently both encoders are located on the main wheel (The one that steers, and is also powered).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 6 variables tracked by the Kalman Filter are X, Y, Heading, Distance Scaling (calibration of the distance encoder), Steer Calibration (offset of the steer encoder), and finally a bearing calibration of a rotating laser. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;With this kind of system we put together a vehicle give it a known good location with plenty of landmarks, drive it around a bit, and end up with a well calibrated vehicle that can drive extended distances reliably with few landmarks. Its simple and it works great. Over time if an encoder drifts it will automatically follow the drift and adjust. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;We are now attempting to apply the same principles to a robot with multiple steer and drive wheels. In this case the vehicle will be able to move in any direction, spin in place, etc. . Each steer/drive wheel will have its own steer and distance encoder that each need to be calibrated. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can I expect to get the same kind of reliability and performance out of the more complex system? Are there any common pitfalls to look out for when expanding a kalman filter to include more variables? Is there a risk of it settling on sub-optimal values?&lt;/p&gt;&#xA;" OwnerUserId="201" LastActivityDate="2012-11-11T20:42:48.040" Title="What kind of performance can I expect when using an Extended Kalman Filter for calibration and localization?" Tags="&lt;localization&gt;&lt;kalman-filter&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="360" PostTypeId="2" ParentId="358" CreationDate="2012-11-11T17:21:14.760" Score="2" Body="&lt;p&gt;The cable has a certain amount of slack, and each joint it goes over takes up some of that slack as a function of the joint angle. The cable will break if the total amount of slack taken up by all joints exceeds the available slack.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Firstly, it would help if you could thread the cable along the robot in such a way that that each joint has a calculable effect on the slack, and each joint affects the cable independently. This will really help the calculations. Let's define the amount of slack taken up by joint 1 at an angle th1 by:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;f1(th1)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Now, your robot arm can move anywhere such that&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;f1(th1) + f2(th2) + ... + f6(th6) &amp;lt;= total_slack&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This assumes that the cable is fixed in such a way that it can slide up and down the robot arm, distributing the slack where it's needed. Generally, this isn't the case in most robots, and isn't easy to do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A more reliable way to solve this problem is to rigidly fix the cable before and after each joint, and make sure there's enough slack for every joint.&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2012-11-11T17:21:14.760" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="361" PostTypeId="1" AcceptedAnswerId="363" CreationDate="2012-11-11T19:48:28.747" Score="15" ViewCount="4829" Body="&lt;p&gt;I am considering programming a line following robot using reinforcement learning algorithms. The question I am pondering over is how can I get the algorithm to learn navigating through any arbitrary path?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Having followed the &lt;a href=&quot;http://webdocs.cs.ualberta.ca/~sutton/book/the-book.html&quot; rel=&quot;noreferrer&quot;&gt;Sutton &amp;amp; Barto Book&lt;/a&gt; for reinforcement learning, I did solve an exercise problem involving a racetrack where in the car agent learnt not to go off the track and regulate its speed. However, that exercise problem got the agent to learn how to navigate the track it trained on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it in the scope of reinforcement learning to get a robot to navigate arbitrary paths? Does the agent &lt;strong&gt;absolutely&lt;/strong&gt; have to have a map of the race circuit or path? What parameters could I possibly use for my state space?&lt;/p&gt;&#xA;" OwnerUserId="272" LastEditorUserId="350" LastEditDate="2013-08-27T18:23:41.307" LastActivityDate="2021-02-18T12:15:10.040" Title="Programming a line following robot with reinforcement learning" Tags="&lt;machine-learning&gt;&lt;artificial-intelligence&gt;&lt;reinforcement-learning&gt;&lt;line-following&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="362" PostTypeId="2" ParentId="359" CreationDate="2012-11-11T20:42:48.040" Score="1" Body="&lt;p&gt;In my opinion (based on my limited experience using the EKF for navigation):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The performance of the EKF can be hugely improved by a good kinematic model. You did right by including bias in your steering and odometry models for the tricycle system. If you can derive and apply a detailed kinematics model for your more complicated system, then you should do quite well. If not, then the EKF must also account for your errors in modelling, in addition to your sensor errors and linearization errors. This is the danger: including a source of error that is &lt;em&gt;not&lt;/em&gt; accounted for will make your filter inconsistent very quickly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If things get out of hand (your filter isn't converging nicely), you can try multiple model methds (IMM).  So my advice is to model the system as well as possible. The EKF has a very good track record for these tasks. Good luck.&lt;/p&gt;&#xA;" OwnerUserId="163" LastActivityDate="2012-11-11T20:42:48.040" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="363" PostTypeId="2" ParentId="361" CreationDate="2012-11-11T20:56:55.387" Score="10" Body="&lt;p&gt;One of the key measures of any machine learning algorithm is it's ability to generalize (i.e. apply what it has learned to previously unsceen scenarios). Reinforcement learners (RL) &lt;strong&gt;can&lt;/strong&gt; generalize well but this ability is in part a function of the state-space formulation in my experience. This means that if you can find the right setup then the RL learner will not need a map of of the race circuit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This leaves the question of which parameters to use. Without knowing more about the sensors available on your robot I can only speculate. My first inclinition is to try to encoded the relative orientation of the line and robot (i.e. is the robot tending to the right, left, or simply moving parallel with the line). Doing so would result in a nice small state-space. Though not strictly necessary it would make for a quick and simple implementation. Furthermore, if the robot is not going to move at a constant rate then it may help to encode the robots velocity as the robot will need to react more quickly when moving at higher speeds.&lt;/p&gt;&#xA;" OwnerUserId="177" LastActivityDate="2012-11-11T20:56:55.387" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="365" PostTypeId="2" ParentId="342" CreationDate="2012-11-12T00:25:59.593" Score="0" Body="&lt;p&gt;This is not a clear question, is more of a fishing / discussion question. As much as I'd love to sit down and discuss this for a few hours, this is unfortunately not the type of things we can concisely and objectively answer. Expectations are better diffused by specific questions. Example: &quot;Bipedal robots: Can they walk over a pile of skulls like in Terminator 2?&quot; &lt;/p&gt;&#xA;" OwnerUserId="163" LastActivityDate="2012-11-12T00:25:59.593" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="366" PostTypeId="2" ParentId="358" CreationDate="2012-11-12T00:34:31.600" Score="3" Body="&lt;p&gt;I'm not sure what the &quot;standard techniques&quot; are but here are a few a ideas.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could combine a standard &lt;a href=&quot;http://en.wikipedia.org/wiki/Robot_kinematics&quot; rel=&quot;nofollow&quot;&gt;jacobian based forward kinematics&lt;/a&gt; as your base and then apply a gradient search algorithm where you bias against things such as running out of slack on your wires or other constraints. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let me go into a bit more detail. Generally you would just give the robotic arm an end point or perhaps a series of way points you expect the end effector to follow. You can then use the forward kinematics to move the end effector between those waypoints. In order to avoid your difficult to describe constraint you can define a value function that increases as the arm moves and reduces the slack on the wire. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you guess a path most likely your initial guess will result in the wire being snapped. You're value function will give you a score representing this fact. You can then take your in between waypoints and tweak them a bit which may result in the function represetnging your constraint to decrease. You then can tweak it a bit more reducing it further. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is called &lt;a href=&quot;http://en.wikipedia.org/wiki/Mathematical_optimization&quot; rel=&quot;nofollow&quot;&gt;optimization&lt;/a&gt; and it is a huge field but the most basic method is &lt;a href=&quot;http://en.wikipedia.org/wiki/Gradient_descent&quot; rel=&quot;nofollow&quot;&gt;Gradient Descent&lt;/a&gt;. In theory if you use an optimization method to adjust your waypoints eventually you will find a set of waypoints that keeps the tension along the wire to a minimum. The main issue with optimization is that you can run into local minimums that don't adequately solve your problem, and methods that get around local minimums can be slow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are looking to get academic about it you  may want to look into the algorithm presented &lt;a href=&quot;http://www.ri.cmu.edu/publication_view.html?pub_id=6285&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;. Keep in mind there might not be a simple answer to your question or a simple algorithm to solve it.&lt;/p&gt;&#xA;" OwnerUserId="201" LastActivityDate="2012-11-12T00:34:31.600" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="367" PostTypeId="2" ParentId="354" CreationDate="2012-11-12T09:31:49.053" Score="8" Body="&lt;p&gt;As you probably guessed from the lack of answers, subsumption architecture is not an active area of research any more. Most papers on this have been published in the late 80's / early 90's.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This doesn't mean that subsumption architecture is dead; it has been very influential in robotics, and it's still used in education for example, but it is just not a hot topic in research any more.&lt;/p&gt;&#xA;" OwnerUserId="132" LastActivityDate="2012-11-12T09:31:49.053" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="368" PostTypeId="2" ParentId="338" CreationDate="2012-11-12T14:53:42.343" Score="1" Body="&lt;p&gt;I think you're caught up in trying to build high-level behavior (maneuvers) from low-level motor functionality, when in reality you should be attempting to decouple them somewhat.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you're asking 3 questions.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;How do the high level behaviors work?&lt;/li&gt;&#xA;&lt;li&gt;What low-level API do I want?&lt;/li&gt;&#xA;&lt;li&gt;How should the low-level API be implemented on my ESC?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;So, working backwards: the relevant information on implementation is most likely in your ESC's manual, on their website, or some such.  Call them up if it's unclear, sometimes they'll be familiar with the programming gotchas and can point you in the right direction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd focus on writing a motor controller API that accepts desired velocity for each tread.  You'll have to fake it in the dead zone, most likely by varying the motor speed so on average it's the speed you want (probably some sort of PID here).  But, your controller should maintain a desired velocity (0%-100% + direction) for each motor until it's handed a new desired velocity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The high level behaviors just set desired velocity for each tread.  So, a U-turn is any setting where the velocities are equal and opposite; a turn is anything where velocities are unequal but aligned.  Your path planner (or whatever tells the platform where it should go) will be the one to decide how tightly to turn to get wherever it's going (another PID, most likely).&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2012-11-12T14:53:42.343" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="369" PostTypeId="1" AcceptedAnswerId="370" CreationDate="2012-11-12T18:50:20.770" Score="7" ViewCount="1220" Body="&lt;p&gt;Are &lt;a href=&quot;http://en.wikipedia.org/wiki/Inverse_kinematics&quot; rel=&quot;noreferrer&quot;&gt;inverse kinematics&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Reinforcement_learning&quot; rel=&quot;noreferrer&quot;&gt;reinforcement learning&lt;/a&gt; techniques contending techniques to solve the same problem viz. movement of robotic manipulators or arm?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By a glance through the wikipedia article, it appears that inverse kinematics seems to attempt to achieve a &lt;a href=&quot;http://en.wikipedia.org/wiki/Equation_solving&quot; rel=&quot;noreferrer&quot;&gt;solution&lt;/a&gt;  as opposed to reinforcement learning which attempts to &lt;a href=&quot;http://en.wikipedia.org/wiki/Optimization&quot; rel=&quot;noreferrer&quot;&gt;optimizes&lt;/a&gt; the problem. Have I misunderstood anything?&lt;/p&gt;&#xA;" OwnerUserId="272" LastEditorUserId="177" LastEditDate="2012-11-13T21:00:01.287" LastActivityDate="2012-11-14T17:40:44.207" Title="Are inverse kinematics and reinforcement learning competitive techniques?" Tags="&lt;inverse-kinematics&gt;&lt;reinforcement-learning&gt;&lt;machine-learning&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="370" PostTypeId="2" ParentId="369" CreationDate="2012-11-12T20:20:50.067" Score="10" Body="&lt;p&gt;From what I understand of your question, you'd like to know if inverse kinematics and reinforcement learning are trying to solve the same problem in the particular case of robotic manipulation. Of course both of these techniques can be applied outside of this particular realm, but let's focus on robot manipulation for now.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You're right that inverse kinematics is trying to find a solution, although this can be a family of solutions. You'd like to pose the end effector of your manipulator in a particular position and you have to find out the state of the rest of the arm in order to perform the motions that will achieve your goal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Reinforcement learning is also trying to find a solution to the problem, and it's trying to optimize its solution with respect to a cost function. Imagine, for example, that there's a minimal set of movements that would get your end effector in the required position (e.g. by attaching a cost to actuating each of the manipulator's joints, you could learn the optimal way of achieving your goal with respect to power consumed).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead of considering the techniques to be at odds with each other, you could use inverse kinematics to find the family of solutions to your problem and reinforcement learning to search this space and find an optimal solution with respect to some cost/reward criteria of your choosing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're intent on choosing one technique over the other, by posing the reinforcement learning problem as an optimization that rewards, say, how fast you reach the goal state of the end effector, you could still find a solution. However, there's a chance that you'd like to use some notion of the manipulator's kinematics to inform how you search the space of its movements.&lt;/p&gt;&#xA;" OwnerUserId="295" LastActivityDate="2012-11-12T20:20:50.067" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="371" PostTypeId="5" CreationDate="2012-11-12T21:38:16.873" Score="0" Body="&lt;p&gt;A &lt;strong&gt;robotic arm&lt;/strong&gt; is a type of mechanical arm, usually programmable, with similar functions to a human arm; an &lt;em&gt;arm&lt;/em&gt; may a whole robot or just a part of a more complex robot. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Robotic arms come in all shapes and sizes. Most robotic arms are described by their &lt;a href=&quot;https://en.wikipedia.org/wiki/Degrees_of_freedom_(mechanics)&quot; rel=&quot;nofollow noreferrer&quot;&gt;degrees of freedom&lt;/a&gt;, or &quot;The number of independent parameters that define its configuration&quot;. These parameters traditionally refer to rotations at locations or joints, such as &quot;Shoulder&quot; or &quot;Elbow&quot; or &quot;Wrist&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the ARM CPU, use the tag &lt;a href=&quot;/questions/tagged/arm-cpu&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;arm-cpu&amp;#39;&quot; rel=&quot;tag&quot;&gt;arm-cpu&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="7066" LastEditorUserId="37" LastEditDate="2019-07-21T09:26:40.433" LastActivityDate="2019-07-21T09:26:40.433" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="372" PostTypeId="4" CreationDate="2012-11-12T21:38:16.873" Score="0" Body="The arm tag is intended to be used for questions relating to robotic arms from, small hobby arms with only 1 or 2 degrees of freedom to large industrial robots with complex joint assemblies. For the ARM CPU, use the tag arm-cpu." OwnerUserId="7066" LastEditorUserId="37" LastEditDate="2019-07-21T09:26:40.433" LastActivityDate="2019-07-21T09:26:40.433" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="373" PostTypeId="2" ParentId="327" CreationDate="2012-11-12T22:19:11.210" Score="7" Body="&lt;p&gt;There is not a specific set of learning algorithms that you will need to implement. Genetic algorithms (GA), neural networks (GA), and reinforcement learning (RL) have all successfully been applied to the problem of gait generation. I can also conceive of ways to use unsupervised learning methods to approach this problem but I can't say for certain whether they would work. Even if they would I'm inclined to think RL is the better approach.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Dr. Hod Lipson talks about using GAs in his TED video entitled &lt;a href=&quot;http://www.ted.com/speakers/hod_lipson.html&quot;&gt;Hod Lipson builds &quot;self-aware&quot; robots&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;NNs have often been used. A few examples include:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.mitpressjournals.org/doi/abs/10.1162/neco.1992.4.3.356&quot;&gt;A Distributed Neural Network Architecture for Hexapod Robot Locomotion&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.sciencedirect.com/science/article/pii/0921889096000036&quot;&gt;Biologically based distributed control and local reflexes improve rough terrain locomotion in a hexapod robot&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.sciencedirect.com/science/article/pii/S092188909600036X&quot;&gt;Application of evolved locomotion controllers to a hexapod robot&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://matwbn.icm.edu.pl/ksiazki/amc/amc20/amc2015.pdf&quot;&gt;A biologically inspired approach to feasible gait learning&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I don't know whether RL has been appplied to quadrapeds but there are a number of succesful applications to hexapods.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://dl.acm.org/citation.cfm?id=1346424&quot;&gt;Free gait generation with reinforcement learning for a six-legged robot&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=2&amp;amp;ved=0CD0QFjAB&amp;amp;url=http%3A%2F%2Fdownload.intel.com%2Fembedded%2Fapplications%2Find%2FQ-LearningHexapod.pdf&amp;amp;ei=YnOhUMHfJc3siQKF44CwCA&amp;amp;usg=AFQjCNEEE7tVf5I1Nydo6t3zYm6jTkhqIw&amp;amp;sig2=t68ZLQYy7UgaiX0_ScdQlw&amp;amp;cad=rja&quot;&gt;Q-Learning Hexapod&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Beware that these lists are by no means comprehensive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;GA and NN would be relatively simple to implement. RL on the other is a more principled way to approached the problem. In all cases you will need more processing power than the Uno offers to actually perform the learning. If you intended to do offline learning then the Uno may work after the learning phase.&lt;/p&gt;&#xA;" OwnerUserId="177" LastActivityDate="2012-11-12T22:19:11.210" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="374" PostTypeId="5" CreationDate="2012-11-12T22:21:30.613" Score="0" Body="&lt;p&gt;Reinforcement learning (RL) is a &lt;a href=&quot;https://robotics.stackexchange.com/questions/tagged/machine-learning&quot;&gt;machine learning&lt;/a&gt; (ML) technique wherein an agent improves its performance through interaction with its environment by attempting to minimize an objective or cost function referred to as the reward function.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;RL is a class of algorithms separate from both &lt;a href=&quot;https://en.wikipedia.org/wiki/Supervised_learning&quot; rel=&quot;nofollow noreferrer&quot;&gt;supervised learning&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Unsupervised_learning&quot; rel=&quot;nofollow noreferrer&quot;&gt;unsupervised learning&lt;/a&gt;. It differs from supervised learning methods in that RL agents are not provided with the correct answer at the time of training. Instead they receive a &quot;reward&quot; with each action. This reward is often referred to as a penalty when its value is negative. Furthermore the reward function also defines how RL differs from unsupervised learning methods. Specifically unsupervised learning methods receive no information what-so-ever regarding what is correct during training.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Common formulations of the reward function provide the agent with a positive or zero reward as long as it performs within the acceptable bounds and a negative reward if it performs incorrect or sub-optimal actions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Frequently an RL agent cannot directly determine the reward function and instead it develops a policy that defines which action to take given a particular state of the world. This policy is developed through repeated training and following the policy maximizes the reward.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One problem with always following the policy is that nothing new can be learned in doing so. Since there is no guarantee that the current policy is optimal it is necessary for the agent to occasionally select actions other than what is prescribed by the policy. This is known as exploration and permits the agent to find superior solutions. However it is done at the risk of receiving penalties or lower overall rewards. One common technique for selecting actions off-policy is epsilon-greedy selection. This method has the agent randomly select an action some percentage of the time and select the policy action the remaining percentage of the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The text &lt;a href=&quot;http://webdocs.cs.ualberta.ca/~sutton/book/ebook/the-book.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Reinforcement Learning: An Introduction&lt;/a&gt; by Sutton and Barto details the myriad facets of reinforcement learning.&lt;/p&gt;&#xA;" OwnerUserId="272" LastEditorUserId="15160" LastEditDate="2018-09-30T20:07:12.657" LastActivityDate="2018-09-30T20:07:12.657" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="375" PostTypeId="4" CreationDate="2012-11-12T22:21:30.613" Score="0" Body="Reinforcement learning is a technique wherein an agent improves its performance via interaction with its environment. For this reason it is a commonly used machine learning technique in robotics." OwnerUserId="272" LastEditorUserId="177" LastEditDate="2012-11-19T19:56:45.690" LastActivityDate="2012-11-19T19:56:45.690" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="376" PostTypeId="2" ParentId="237" CreationDate="2012-11-12T22:22:30.423" Score="2" Body="&lt;p&gt;I think the form of your question is wrong.  The problem is not that you've improperly calculated how much data-per-second can be thrown at the microcontroller; it's that you have no way for the microcontroller to indicate its readiness to receive the next command.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To put it another way, if you attempt to solve this problem by precisely calculating how quickly to send data, you will inevitably do one of the following things:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;send less data than the microcontroller can handle&lt;/li&gt;&#xA;&lt;li&gt;send more data than the microcontroller can handle (and in the worst case, it will be only &lt;em&gt;very&lt;/em&gt; slightly more so that the buffer takes an hour to overrun and leads you to debug something completely unrelated)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The solution is for your microcontroller to provide feedback -- flow control.  In the most basic example just send back a single character representing command completion (@Rocketmagnet's SpaceWire suggestion would be the most robust, but also heavy handed).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most likely, you can afford to have a few commands in the buffer.  So, the calculation you should do is to divide your buffer size by the size of the largest command you'll send, then subtract 1 (or more) for safety.  That will tell you the greatest allowable difference between commands sent and acknowledgements received, and will allow you to work at maximum speed by keeping the buffer filled.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Example&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Say that your longest possible command is 7 bytes (&quot;fw 4.32&quot;) or some such, and that you have a 64-byte buffer.  That means you can fit 9 commands in the buffer ($7 \times 9 = 63 &amp;lt; 64$), but for safety you'll subtract one and only allow 8 commands.  Here's some python psudeocode:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;MAX_UNACKED = 8  # constant, how many un-acked commands to send&#xA;unacked = 0      # number of un-acked commands that have been sent&#xA;while (true):&#xA;    # can send up to MAX_UNACKED commands as we like&#xA;    if MAX_UNACKED &amp;gt; unacked:&#xA;        send_command()&#xA;        unacked = unacked + 1&#xA;&#xA;    # assume that the ack is a single character, we don't care which&#xA;    acks = receive_response()      # receive a string of characters&#xA;    unacked = unacked - len(acks)  # number of characters = number of acks&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Note that this psuedocode is an example of spin blocking and that there are better ways to wait for input... but which one specifically will depend on how your PC code works.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2012-11-21T17:41:00.177" LastActivityDate="2012-11-21T17:41:00.177" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="377" PostTypeId="2" ParentId="117" CreationDate="2012-11-13T03:07:12.833" Score="0" Body="&lt;p&gt;Graph-based planning is a simplification of a space (that may be continuous) into the set of possible branching points, each representing the decisions that can be made.  In a pure simulation, that simplification usually goes as far as working in terms of steps instead of distance or time.  So, restricting movement to the 4 cardinal directions would be the correct choice because you'd want all the distances to be equal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a simulation with diagonals, it should still work -- provided that you adjust your algorithm so that diagonal step costs $\sqrt 2$ times more than the vertical/horizontal steps (which pushes you back in the direction of a continuous space, difficult to simulate).  But it might make more sense to just adopt a hexagonal grid if you want more ways to move between squares.  (For more discussion on grid types and their algorithms, see &lt;a href=&quot;http://www-cs-students.stanford.edu/~amitp/game-programming/grids/&quot; rel=&quot;nofollow&quot;&gt;http://www-cs-students.stanford.edu/~amitp/game-programming/grids/&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Example 1&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;You have a car-style robot -- front-wheel steering.  You might represent 3 possible branches from each state: turn left, go straight, and turn right.  In this case, a hexagonal grid would make the most sense; at every space, only 3 of the 6 neighbors would be valid and exactly which ones would depend on the direction you came from.  This would reflect reality more than a cardinal-directions grid because to reach the space to your immediate right (or left) would require a U-turn over a few extra spaces.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Example 2&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;You have a gantry robot -- X and Y actuation.  In this case, both motors can be active at once, so moving diagonally &quot;costs&quot; the same as moving vertically or horizontally.  The 8-neighbor square grid would be correct.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Example 3&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;You are simulating a large room with some objects that move.  If you allow diagonal movement, you lose the ability to use an integer for the time component -- things would end up only partway between squares.  The 4-neighbor square grid would be correct.  &lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2012-11-13T03:07:12.833" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="378" PostTypeId="2" ParentId="167" CreationDate="2012-11-13T05:20:05.947" Score="5" Body="&lt;p&gt;In contrast to the other two answers I'd say a good manual way of tuning a PID is ignoring the Kd. So start at 0 and increase Kp until you are getting to the target, then increase Ki to get rid of steady state error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Kd can confuse the issue as it responds poorly to noise, then you start adding filters on your analog input and then question what that does besides slow down your control and make the whole thing harder to work out...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another thing bound to confuse me is if the PID equation is in the standard form or in an independent (parallel in wikipedia) form. The effect of Ki seems to inverse when the form is the wrong way to what you think it is. Both types are used in automation, sometimes with the option to switch between them.   &lt;/p&gt;&#xA;" OwnerUserId="412" LastActivityDate="2012-11-13T05:20:05.947" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="379" PostTypeId="2" ParentId="237" CreationDate="2012-11-13T05:52:44.040" Score="0" Body="&lt;p&gt;Instead of calculating the speed requirement (which may vary from time to time/comp to comp and whenever you change the code), there are some other things you can do:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Have your μC &lt;em&gt;request&lt;/em&gt; input by sending interrupts to the master device (in this case, it's a PC--you may not need to use interrupts, just keep a port reserved). You can either have the master device buffer the outputs (easier to do that with a pc--effectively unlimited buffering), or you can just discard them unless necessary.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;With your scenario, it's better to get rid of buffering entirely. Accept the inputs to the  μC via the interrupt pin. Have some flag variable that basically says &quot;need input&quot; on the μC. If this flag is set, the  μC will accept the input. Otherwise, it will just discard it. This way, all the input is rapidly consumed (keeping buffers free), but not all is used. For efficiency, adjust the timing to the approximate baud of the entire setup. Instead of discarding it, you may wish to code your own buffer-type thing--have a small array in which a few inputs are stored. Now, you have gotten rid of all the upstream buffers, and have a single &quot;artificial&quot; buffer on the μC--over which you have complete control.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;It may be better to keep all computations on the pc and use the μC as a simple slave controller--give it simple motion/position commands that can be piped directly to the motors. If you have enough interrupt pins/interrupt MUXing, you may want to send these commands via interrupts for faster response.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="126" LastActivityDate="2012-11-13T05:52:44.040" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="380" PostTypeId="1" AcceptedAnswerId="14259" CreationDate="2012-11-13T09:34:55.917" Score="1" ViewCount="408" Body="&lt;p&gt;I want to build a robot arm that'll be approximately 1.25 meter long and will be able to lift up to 2 kilograms. It'll have 6 dof and it is an expensive project. And most importantly, i am the only programmer in this brand new robotics facility of ours. :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The robot that i want to build will be led by Inverse Kinematics, so with all these parameters and matrices, i think that i'll need a tough processor (Not so sure).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming that my robots control interface will be on an Android tablet, i thought that i also could develop my program for Android, and send necessary commands to the control chip via RS-232 interface.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, my question is, are standart 1 GHz Android tablets suitable for these tasks? If not, has anybody got an advice for me?&lt;/p&gt;&#xA;" OwnerUserId="305" LastEditorUserId="305" LastEditDate="2012-11-13T10:27:59.877" LastActivityDate="2017-09-22T14:48:21.900" Title="Processor and command interface preference for a robot arm" Tags="&lt;software&gt;&lt;inverse-kinematics&gt;&lt;robotic-arm&gt;&lt;rs232&gt;" AnswerCount="4" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="381" PostTypeId="2" ParentId="237" CreationDate="2012-11-13T10:02:18.053" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;At 1st glance:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;115200 == 115.2 bits per millisecond == ~12.8 bytes per millisecond&#xA;  (assuming 1 stop bit)&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Is that a valid way to calculate timing for&#xA;  serial transmissions?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Very simplistically, this is OK - but don't forget any start and parity bits also, and don't forget any protocol overhead along the bluetooth links&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Also, given my specific setup:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;PC Program &amp;lt;--&gt; Bluetooth Serial Profile Driver &amp;lt;--&gt; Bluetooth&#xA;  Transceiver &amp;lt;-*-&gt; BlueSMIRF Wireless Modem &amp;lt;--&gt; Parallax Propellor&#xA;  Program&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I think it is reasonable to assume that the PC through to the Modem are capable of handling the traffic at 115200 bps, so you can eliminate these from the equation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, having multiple hops like this does prevent use of flow-control signals, without introducing response messages... which would slow down response time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, take the worst case, of no protocol overhead, 115200 bps means your Parallax will be receiving a byte every 69us - adding in start, stop or parity bits will slow this rate down a little bit, but assuming worst case gives you some leeway.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This means that your controller has to handle receiving a byte every 69us, as well as doing its normal stuff (calculations etc).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But in reality, you will be sending a message string of (n) bytes, which need to be buffered, and processed as a string - whilst still doing the normal stuff.  Calculating the buffer is an art in itself, but I would normally work on (a minimum of) twice the size of the longest string (if you have the RAM space).  Anything less has the potential for losing messages, if one is not processed before reception of the next commences.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are restricted to only the length of the longest message, you need to be 100% sure that you can process that message between the receipt of the last byte, and the receipt of the first byte of the next message. (Obviously less of a problem with smaller messages).&lt;/p&gt;&#xA;" OwnerUserId="134" LastActivityDate="2012-11-13T10:02:18.053" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="382" PostTypeId="1" AcceptedAnswerId="386" CreationDate="2012-11-13T10:51:35.660" Score="28" ViewCount="24378" Body="&lt;p&gt;My team and I are setting up an outdoor robot that has encoders, a commercial-grade &lt;a href=&quot;http://en.wikipedia.org/wiki/IMU&quot; rel=&quot;nofollow noreferrer&quot;&gt;IMU&lt;/a&gt;, and &lt;a href=&quot;http://en.wikipedia.org/wiki/Global_Positioning_System&quot; rel=&quot;nofollow noreferrer&quot;&gt;GPS&lt;/a&gt; sensor. The robot has a basic tank drive, so the encoders sufficiently supply ticks from the left and right wheels. The IMU gives roll, pitch, yaw, and linear accelerations in x, y, and z. We could later add other IMUs, which would give redundancy, but could also additionally provide angular rates of roll, pitch, and yaw. The GPS publishes global x, y, and z coordinates.&lt;/p&gt;&#xA;&lt;p&gt;Knowing the robot's x y position and heading will useful for the robot to localize and map out its environment to navigate. The robot's velocity could also be useful for making smooth movement decisions. It's a ground-based robot, so we don't care too much about the z axis. The robot also has a &lt;a href=&quot;http://en.wikipedia.org/wiki/LIDAR&quot; rel=&quot;nofollow noreferrer&quot;&gt;lidar&lt;/a&gt; sensor and a camera--so roll and pitch will be useful for transforming the lidar and camera data for better orientation.&lt;/p&gt;&#xA;&lt;p&gt;I'm trying to figure out how to fuse all these numbers together in a way that optimally takes advantage of all sensors' accuracy. Right now, we're using a &lt;a href=&quot;http://en.wikipedia.org/wiki/Kalman_filter&quot; rel=&quot;nofollow noreferrer&quot;&gt;Kalman filter&lt;/a&gt; to generate an estimate of &lt;code&gt;[x, x-vel, x-accel, y, y-vel, y-accel]&lt;/code&gt; with the simple transition matrix:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;[[1, dt, .5*dt*dt, 0,  0,        0],&#xA; [0,  1,       dt, 0,  0,        0],&#xA; [0,  0,        1, 0,  0,        0],&#xA; [0,  0,        0, 1, dt, .5*dt*dt],&#xA; [0,  0,        0, 0,  1,       dt],&#xA; [0,  0,        0, 0,  0,        1]]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The filter estimates state exclusively based on the accelerations provided by the IMU. The IMU isn't the best quality; within about 30 seconds it will show the robot (at rest) drifting a good 20 meters from its initial location. I want to know out how to use roll, pitch, and yaw from the IMU, and potentially roll, pitch, and yaw rates, encoder data from the wheels, and GPS data to improve the state estimate.&lt;/p&gt;&#xA;&lt;p&gt;Using a bit of math, we can use the two encoders to generate x, y, and heading information on the robot, as well as linear and angular velocities. The encoders are very accurate, but they can be susceptible to slippage on an outdoor field.&lt;/p&gt;&#xA;&lt;p&gt;It seems to me that there are two separate sets of data here, which are difficult to fuse:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Estimates of x, x-vel, x-accel, y, y-vel, y-accel&lt;/li&gt;&#xA;&lt;li&gt;Estimates of roll, pitch, yaw, and rates of roll, pitch, and yaw&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Even though there's crossover between these two sets, I'm having trouble reasoning about how to put them together. For example, if the robot is going at a constant speed, the direction of the robot, determined by its x-vel and y-vel, will be the same as its yaw. Although, if the robot is at rest, the yaw cannot be accurately determined by the x and y velocities. Also, data provided by the encoders, translated to angular velocity, could be an update to the yaw rate... but how could an update to the yaw rate end up providing better positional estimates?&lt;/p&gt;&#xA;&lt;p&gt;Does it make sense to put all 12 numbers into the same filter, or are they normally kept separate? Is there already a well-developed way of dealing with this type of problem?&lt;/p&gt;&#xA;" OwnerUserId="181" LastEditorUserId="9176" LastEditDate="2020-08-07T20:34:47.117" LastActivityDate="2020-08-07T20:34:47.117" Title="How to fuse linear and angular data from sensors?" Tags="&lt;sensors&gt;&lt;kalman-filter&gt;&lt;sensor-fusion&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="20" ContentLicense="CC BY-SA 4.0" />
  <row Id="384" PostTypeId="2" ParentId="380" CreationDate="2012-11-13T13:54:06.703" Score="0" Body="&lt;p&gt;It looks like you are implementing Inverse kinematics(IK) control of robot manipulator for first time. I would suggest you to start of inverse kinematics control program in regular computer. Once you have implemented stable IK control program, you can implement the same same for Android tablet. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please don't complicate the task which is already complicated! Best way start is to keep building of arm and developing IK control for the arm as separate modules and integrate them once both modules are working properly. For IK control program you can start off with simulated robot arm. Building reliable 6 DoF arm of reach 1.25 meter is definitely not easy job, especially if you are doing it for first time. It would be good idea to start with smaller prototype and later scale it up required size.&lt;/p&gt;&#xA;" OwnerUserId="289" LastActivityDate="2012-11-13T13:54:06.703" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="385" PostTypeId="2" ParentId="380" CreationDate="2012-11-13T13:56:20.310" Score="2" Body="&lt;p&gt;This project sounds quite plausible. The question is, where do the servo loops happen? Does it go through the Android Tablet, or just the control chip? What chip is this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the servo loops go through the tablet, then be warned that the tablet needs to be able to process that servo loop in good time each cycle. No being late, or missing cycles. No sudden waiting for a WiFi connection, or spending too much time doing voice recognition. It doesn't need to be hard real time (ROS isn't for example) but it should be fairly reliable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the servo loop goes only through the control chip, whatever that is, then that would be much better. The tablet would just send demand values to the control chip, and it wouldn't matter so much if these were a bit late or were skipped.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your robot arm is only 6 degrees of freedom, meaning the Inverse Kinematics function can be solved analytically every control cycle, and will be very fast. 1GHz is actually quite a fast processor. I used to do IK on a &lt;a href=&quot;http://freespace.virgin.net/hugo.elias/models/m_ik.htm&quot; rel=&quot;nofollow&quot;&gt;12 DOF simulation&lt;/a&gt; in QBASIC on an old 486, and could easily get 30 FPS.&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2012-11-13T13:56:20.310" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="386" PostTypeId="2" ParentId="382" CreationDate="2012-11-13T14:53:53.370" Score="33" Body="&lt;p&gt;Two things. &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;If you plan to do mapping, you need a full-fledged Simultaneous Localization and Mapping (SLAM) Algorithm. See: &lt;a href=&quot;http://www.cs.berkeley.edu/~pabbeel/cs287-fa09/readings/Durrant-Whyte_Bailey_SLAM-tutorial-I.pdf&quot; rel=&quot;noreferrer&quot;&gt;Simultaneous Localisation and Mapping (SLAM):&#xA;Part I The Essential Algorithms&lt;/a&gt;. In SLAM, estimating the robot state is only half the problem. How to do that is a bigger question than can be answered here.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Regarding localization (estimating the state of the robot), this is not a job for a Kalman Filter. The transition from&#xA;$x(t)=[x,y,\dot{x},\dot{y},\theta,\dot{\theta}]$ to $x(t+1)$ is not a linear function due to the&#xA;angular accelerations and velocities. Therefore you need to consider&#xA;non-linear estimators for this task. Yes, there are standard ways of&#xA;doing this. Yes, they are available in literature. Yes, typically all&#xA;inputs are put into the same filter. Position, velocity,&#xA;orientation, and angular velocity of the robot are&#xA;used as outputs. And Yes, I'll present a brief introduction to their&#xA;common themes here.   The main take-aways are&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;include the Gyro and IMU bias in your state or your estimates will&#xA;diverge&lt;/li&gt;&#xA;&lt;li&gt;An &lt;a href=&quot;http://en.wikipedia.org/wiki/Extended_Kalman_filter&quot; rel=&quot;noreferrer&quot;&gt;Extended Kalman Filter&#xA;(EKF)&lt;/a&gt; is commonly used for this problem&lt;/li&gt;&#xA;&lt;li&gt;Implementations can be derived from scratch, and don't generally&#xA;need to be &quot;looked up&quot;. &lt;/li&gt;&#xA;&lt;li&gt;Implementaitons exist for most of the localization and SLAM problem, so don't do more work than you have to. See: Robot Operating System &lt;a href=&quot;http://www.ros.org&quot; rel=&quot;noreferrer&quot;&gt;ROS&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Now, to explain the EKF in the context of your system.&#xA;We have an IMU+Gyro, GPS, and&#xA;odometry. The robot in question is a differential drive as mentioned.&#xA;The filtering task is to take the current pose estimate of the robot&#xA;${\hat{x}_t}$, the control inputs $u_t$, and the measurements from&#xA;each sensor, $z_t$, and produce the estimate at the next time step&#xA;$\hat{x}_{t+1}$. We'll call the IMU measurements $I_t$, GPS is $G_t$, and&#xA;odometry, $O_t$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I assume we are interested in estimating the robot pose as&#xA;$x_t={x,y,\dot{x},\dot{y},\theta,\dot{\theta}}$.&#xA;The problem with IMU and Gyros is drift. There is a non-stationary&#xA;bias in the accelerations which you must account for in the EKF. This&#xA;is done (usually) by putting the bias into the estimated state. This&#xA;allows you to directly estimate the bias at each time step.&#xA;$x_t={x,y,\dot{x},\dot{y},\theta,\dot{\theta},b}$, for a vector of&#xA;biases $b$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm assuming:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;$O_t$ = two distance measurements representing the distance the&#xA;treads have travelled in some small time increment&lt;/li&gt;&#xA;&lt;li&gt;$I_t$ = three orientation measurements ${\alpha, \beta, \theta}$ and three accelleration&#xA;measurements ${\ddot{x},\ddot{y},\ddot{z}}$. &lt;/li&gt;&#xA;&lt;li&gt;$G_t$ = the position of the robot in the &lt;em&gt;global&lt;/em&gt; frame,&#xA;$^Gx_t,^Gy_t$.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Typically, the result of the control inputs (desired speeds for each&#xA;tread) are difficult to map to the outputs (the change in the pose of&#xA;the robot).  In place of $u$, it is common (see &lt;a href=&quot;http://www.probabilistic-robotics.org/&quot; rel=&quot;noreferrer&quot;&gt;Thrun&lt;/a&gt;, &lt;a href=&quot;https://robotics.stackexchange.com/questions/106/what-is-a-suitable-model-for-two-wheeled-robots/134#134&quot;&gt;Odometry Question&lt;/a&gt;) to use the&#xA;odometry as the &quot;result&quot; of the control. This assumption works well&#xA;when you are not on a near-frictionless surface. The IMU and GPS can&#xA;help correct for slippage, as we'll see.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the first task is to predict the next state from the current state:&#xA;$\hat{x}_{t+1} = f(\hat{x}_t,u_t)$. In the case of a differential&#xA;drive robot, this prediction can be obtained directly from literature&#xA;(see &lt;a href=&quot;http://ijr.sagepub.com/content/8/5/15.short&quot; rel=&quot;noreferrer&quot;&gt;On the Kinematics of Wheeled Mobile Robots&lt;/a&gt; or the more concise treatment in any modern robotics textbook), or derived from scratch as shown here: &lt;a href=&quot;https://robotics.stackexchange.com/questions/106/what-is-a-suitable-model-for-two-wheeled-robots/134#134&quot;&gt;Odometry Question&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, we can now predict $\hat{x}_{t+1} = f(\hat{x}_t, O_t)$. This is&#xA;the propagation or prediction step. You &lt;em&gt;can&lt;/em&gt; operate a robot by simply&#xA;propagating. If the values $O_t$ are completely accurate, you will&#xA;never have an estimate $\hat{x}$ which does not exactly equal your&#xA;true state. This never happens in practice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This only gives a predicted value from the previous estimate,&#xA;and does not tell us how the accuracy of the estimate degrades with&#xA;time. So, to propagate the uncertainty, you must use the EKF equations&#xA;(which propagate the uncertainty in closed form under Gaussian noise&#xA;assumptions), a particle filter (which uses a sampling-based&#xA;approach)*, the UKF (which uses a point-wise approximation of the&#xA;uncertainty), or one of many other variants.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the case of the EKF, we proceed as follows. Let $P_t$ be the&#xA;covariance matrix of the robot state. We linearize the function $f$&#xA;using Taylor-series expansion to obtain a linear system. A linear&#xA;system can be easily solved using the Kalman Filter. Assume the&#xA;covariance of the estimate at time $t$ is $P_t$, and the assumed&#xA;covariance of the noise in the odometry is given as the matrix $U_t$&#xA;(usually a diagonal $2\times2$ matrix, like $.1\times I_{2\times 2}$).&#xA;In the case of the function $f$, we obtain the &lt;a href=&quot;http://en.wikipedia.org/wiki/Jacobian_matrix_and_determinant&quot; rel=&quot;noreferrer&quot;&gt;Jacobian&lt;/a&gt;&#xA;$F_x=\frac{\partial f}{\partial x}$ and $F_u=\frac{\partial f}{\partial&#xA;u}$, then propagate the uncertainty as,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$P_{t+1}=F_x*P_t*F_x^T + F_u*U_t*F_u^T$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now we can propagate the estimate and the uncertainty. Note the&#xA;uncertainty will monotonically increase with time. This is expected.&#xA;To fix this, what is typically done, is to use the $I_t$ and $G_t$ to&#xA;update the predicted state. This is called the measurement step of the&#xA;filtering process, as the sensors provide an indirect measurement of&#xA;the state of the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, use each sensor to estimate some part of the robot state&#xA;as some function $h_g()$ and $h_i()$ for GPS, IMU. Form&#xA;the &lt;em&gt;residual&lt;/em&gt; or &lt;em&gt;innovation&lt;/em&gt; which is the difference of the&#xA;predicted and measured values. &#xA;Then, estimate the accuracy for each sensor estimate in&#xA;the form of a covariance matrix $R$ for all sensors ($R_g$, $R_i$ in&#xA;this case). Finally, find the Jacobians of $h$ and update the state&#xA;estimate as follows:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For each sensor $s$ with state estimate $z_s$  (&lt;a href=&quot;http://en.wikipedia.org/wiki/Extended_Kalman_filter#Update&quot; rel=&quot;noreferrer&quot;&gt;Following wikipedia's entry&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$v_s=z_s- h_s(\hat{x}_{t+1})$$&#xA;$$S_s = H_s*P_{t+1}*H_s^T + R_s$$&#xA;$$K = P_{t+1}*H_s^T S^{-1}_s$$&#xA;$$\hat{x}_{t+1} = \hat{x}_{t+1} - K*v$$&#xA;$$P_{t+1} = (I-K*H_s)*P_{t+1}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the case of GPS, the measurement $z_g=h_g()$ it is probably just a&#xA;transformation from latitude and longitude to the local frame of the&#xA;robot, so the Jacobian $H_g$ will be nearly Identity. $R_g$ is&#xA;reported directly by the GPS unit in most cases.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the case of the IMU+Gyro, the function $z_i=h_i()$ is an integration of&#xA;accelerations, and an additive bias term. One way to handle the IMU is&#xA;to numerically integrate the accelerations to find a position and&#xA;velocity estimate at the desired time.  If your IMU has a small&#xA;additive noise term $p_i$ for each acceleration estimate, then you&#xA;must integrate this noise to find the accuracy of the position&#xA;estimate.  Then the covariance $R_i$ is the integration of all the&#xA;small additive noise terms, $p_i$. Incorporating the update for the&#xA;bias is more difficult, and out of my expertise. However, since you are interested in planar motion, you can probably simplify the problem. &#xA;You'll have to look in literature for this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some off-the-top-of-my-head references: &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.ee.ucr.edu/~mourikis/papers/Li2012-ICRA.pdf&quot; rel=&quot;noreferrer&quot;&gt;Improving the Accuracy of EKF-Based Visual-Inertial&#xA;Odometry&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www-users.cs.umn.edu/~stergios/papers/AR-CL-Consistency-2010.pdf&quot; rel=&quot;noreferrer&quot;&gt;Observability-based Consistent EKF Estimators for Multi-robot&#xA;Cooperative&#xA;Localization&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://s-space.snu.ac.kr/handle/10371/10151&quot; rel=&quot;noreferrer&quot;&gt;Adaptive two-stage EKF for INS-GPS loosely coupled system with&#xA;unknown fault bias&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;This field is mature enough that google (scholar) could probably find&#xA;you a working implementation. If you are going to be doing a lot of&#xA;work in this area, I recommend you pick up a solid textbook. Maybe&#xA;something like &lt;a href=&quot;http://www.probabilistic-robotics.org/&quot; rel=&quot;noreferrer&quot;&gt;Probablistic Robotics by S. Thrun&lt;/a&gt; of Google Car fame.&#xA;(I've found it a useful reference for those late-night&#xA;implementations).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*There are several PF-based estimators available in the&#xA;&lt;a href=&quot;http://ros.org&quot; rel=&quot;noreferrer&quot;&gt;Robot Operating System&lt;/a&gt; (ROS). However, these have&#xA;been optimized for indoor use. Particle filters deal with the&#xA;multi-modal PDFs which can result from map-based localization (am I&#xA;near &lt;em&gt;this&lt;/em&gt; door or &lt;em&gt;that&lt;/em&gt; door). I believe most outdoor&#xA;implementations (especially those that can use GPS, at least&#xA;intermittently) use the &lt;a href=&quot;http://en.wikipedia.org/wiki/Extended_Kalman_filter&quot; rel=&quot;noreferrer&quot;&gt;Extended Kalman Filter&lt;/a&gt; (EKF). I've&#xA;successfully used the Extended Kalman Filter for an outdoor, ground&#xA;rover with differential drive. &lt;/p&gt;&#xA;" OwnerUserId="163" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2013-03-04T16:46:18.293" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="387" PostTypeId="2" ParentId="317" CreationDate="2012-11-13T15:26:29.630" Score="2" Body="&lt;p&gt;You could think of robotics as being broken down into 3 parts: sensing, decision making, and actuating.  Open loop systems are just the &quot;actuating&quot; part of that picture, and it sounds like you have a good handle on that already from your work with CNC machines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think the next area for you to check out would be sensing.  It's not as easy as it looks, and Katy Levinson will explain some of it to you: &lt;a href=&quot;http://www.youtube.com/watch?v=gFW0schumkE&quot; rel=&quot;nofollow&quot;&gt;http://www.youtube.com/watch?v=gFW0schumkE&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not that you need to jump right into sophisticated sensors.  Getting comfortable with sensors (and their limitations, and filtering, and combining separate sensors into a unified world view) could be as simple as using a clock and a light sensor to determine whether it is a cloudy day ouside.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The last thing to check out would be the decision making: how to use the data from the sensors to decide what to do with the actuators.  There are too many possibilities to enumerate here, so it's best to come up with a project idea like &quot;I want to dispense water into my plants when the soil gets too dry&quot; or &quot;I want to close my blinds at night and open them in the morning&quot; or &quot;I want to put a sharpie in my CNC machine and move the table to plot the signal from my phone's accelerometer in realtime&quot;.... then use that problem to teach yourself the theory.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2012-11-13T15:26:29.630" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="388" PostTypeId="2" ParentId="380" CreationDate="2012-11-13T23:08:16.067" Score="0" Body="&lt;p&gt;How many degrees of freedom do you plan to implement?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I use Arduino Mega for my arm with 4 axis and plan to use simple ARM processor instead it.&lt;/p&gt;&#xA;" OwnerUserId="415" LastActivityDate="2012-11-13T23:08:16.067" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="390" PostTypeId="1" AcceptedAnswerId="393" CreationDate="2012-11-13T23:27:22.663" Score="4" ViewCount="1699" Body="&lt;p&gt;I have been using the Cyberglove to control a humanoid robot hand, but found it disappointing as it doesn't measure the posture of the human hand very accurately.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/T7TYQ.png&quot; alt=&quot;Cyberglove&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have been wondering about the possibility of using Inertial Measurement Units (&lt;a href=&quot;http://en.wikipedia.org/wiki/Inertial_measurement_unit&quot; rel=&quot;nofollow noreferrer&quot;&gt;IMU&lt;/a&gt;s) mounted on the fingers to track position and measure posture. But I'm not sure how feasible it is.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Would an IMU return enough data to make tracking reliable in all circumstances?&lt;/li&gt;&#xA;&lt;li&gt;Would it be possible to fool the system into incorrectly tracking the fingers?&lt;/li&gt;&#xA;&lt;li&gt;Might it be possible to get away with using simple 3-axis accelerometers, or would it need 9-axis (accelerometer, gyro, and magnetometer)?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="40" LastEditorUserId="350" LastEditDate="2012-11-30T14:27:09.583" LastActivityDate="2020-12-28T01:15:08.740" Title="Can I use IMUs to improve the position/posture measurement of fingers in a &quot;data glove&quot;?" Tags="&lt;imu&gt;&lt;sensor-fusion&gt;&lt;hri&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="391" PostTypeId="2" ParentId="255" CreationDate="2012-11-14T01:37:30.583" Score="1" Body="&lt;p&gt;Parrallax offers some products in the space you are looking, but I think what you really want to do is go to hobby king; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__657__501__Multi_Rotors_Parts-Flight_Controller.html&quot; rel=&quot;nofollow&quot;&gt;http://www.hobbyking.com/hobbyking/store/_&lt;em&gt;657&lt;/em&gt;_501__Multi_Rotors_Parts-Flight_Controller.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;make no mistake, they ARE cheap copies of other products, and if that bothers you go back to parallax and spend the full amount. I'd go with the 550 frame with motors, and add speed controlers, and props then&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Look at &lt;a href=&quot;http://store.openpilot.org/&quot; rel=&quot;nofollow&quot;&gt;http://store.openpilot.org/&lt;/a&gt; for open source modifiable hardware and software. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;hobby king also has a few controllers including an arduino, but I'd prefer the wii if it was me (just personal preference)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is not a plug and play adventure!! You will at very least end up soldering your own cables, and if you are not comfortable with that, stay clear.&lt;/p&gt;&#xA;" OwnerUserId="274" LastEditorUserId="274" LastEditDate="2012-11-14T01:50:06.967" LastActivityDate="2012-11-14T01:50:06.967" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="393" PostTypeId="2" ParentId="390" CreationDate="2012-11-14T04:27:42.560" Score="5" Body="&lt;p&gt;Simple 3-axis accelerometers will give you an estimate of pitch. However, this will be very noisy, especially when the hand is moving from one pose to another. This is because the direction of acceleration is directly used to estimate the direction of gravity. Thus, &lt;strong&gt;this option would only be useful if the hand is not moving&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Gyroscopes allow the direction of gravity to be stabilized. &lt;strong&gt;This allows the data to remain useful during movement.&lt;/strong&gt; Drift/bias is not a problem, so long as you correct for this. This can be done by using a Kalman filter, with a model of gyroscopic drift. The drift is corrected by comparing the derivative of the long term estimate of the direction of gravity compared to the gyroscopic data. Some IMUs correct for drift automatically, for example, the &lt;a href=&quot;http://www.vectornav.com/products/vn100-rug&quot; rel=&quot;nofollow noreferrer&quot;&gt;VN-100 from VectorNav&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Magnetometers provides a global estimate of the remaining angular direction (yaw). This simply &lt;strong&gt;adds further useful data&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you only place the IMUs on the fingertips, the data is insufficient to estimate pose. Remember that IMUs only measure &lt;strong&gt;attitude&lt;/strong&gt; (also known as orientation) in space. Can you imagine cases where the fingertip may remain in the same orientation, yet the hand pose is different?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/cUbSv.jpg&quot; alt=&quot;Hand pose&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Observe that the index fingertip orientation does not change, however, the position (pose) has changed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore, you can see that IMU data on the fingertips is not enough to estimate pose. However, additional data can improve the estimate of hand pose, if you fuse the IMU data with your existing data using a Kalman filter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is theoretically &lt;strong&gt;possible&lt;/strong&gt; for &lt;strong&gt;IMU data alone&lt;/strong&gt; to be sufficient to estimate pose. However, this would require an IMU for each and every &lt;strong&gt;independently movable&lt;/strong&gt; part of the hand. Since I cannot independently move the top two segments of each finger, we would only need 2 IMUs per finger (one on the fingertip, and one on the segment just after the knuckle, ie. segments 1 and 3 on the finger), plus 2 for the hand, and another for the end of the arm (to get the wrist motion). Therefore, you need a total of &lt;strong&gt;13 IMUs&lt;/strong&gt; to get all the data required.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do not know that much about the price of tiny IMUs, however, I would guess that it is not that cheap to get that many IMUs (I don't know your budget). Normally, a single IMU is used for a rigid body. IMUs vary in price (a list at &lt;a href=&quot;http://damien.douxchamps.net/research/imu/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://damien.douxchamps.net/research/imu/&lt;/a&gt;), but say, the VN-100 IMU might be able to give you 0.1 degree accuracy in optimal conditions. If you get a cheaper IMU, the accuracy may not be as good and/or they may lack an integrated Kalman Filter. Getting 13 VN-100 IMUs, costing thousands would probably break the bank (although the VN-100 at 20x20x2mm may not be appropriate if you want an IMU with a smaller form factor).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My suggestion is to consider other data sources which may be obtained more cheaply. For example:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;camera-based systems&lt;/strong&gt;, after image processing, you can get data about the position of different parts of the hand. Image processing can be aided by using some sort of reflective markers.&lt;/li&gt;&#xA;&lt;li&gt;sensors embedded in the fabric of the glove&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;strain gauges&lt;/li&gt;&#xA;&lt;li&gt;SMA wire&lt;/li&gt;&#xA;&lt;li&gt;...&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="145" LastEditorUserId="145" LastEditDate="2012-11-14T10:18:24.913" LastActivityDate="2012-11-14T10:18:24.913" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="395" PostTypeId="2" ParentId="390" CreationDate="2012-11-14T08:55:43.483" Score="1" Body="&lt;p&gt;While &lt;a href=&quot;https://robotics.stackexchange.com/a/393/127&quot;&gt;ronalchn&lt;/a&gt; already provided a pretty good answer, I would actually like to take the stance that it should be possible. It would essentially work the same as the &lt;a href=&quot;http://www.xsens.com/en/general/mvn&quot; rel=&quot;nofollow noreferrer&quot;&gt;full-body tracking&lt;/a&gt; devices that XSens is selling. In these applications you perform model fitting, based on the orientation data from your imu. I am not sure how many sensing nodes you would need, but e.g. you could use something like this integrated &lt;a href=&quot;https://www.sparkfun.com/products/10937&quot; rel=&quot;nofollow noreferrer&quot;&gt;6DOF IMU&lt;/a&gt; sensor. Using 13 sensors wouldn't be all that implausible anymore, even from a price point of view. I guess you could also do it with just accelerometers, and one full IMU on the wrist, but it would be quite involved. In the end it comes down to the accuracy that you require.&lt;/p&gt;&#xA;" OwnerUserId="127" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2012-11-14T08:55:43.483" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="399" PostTypeId="5" CreationDate="2012-11-14T16:42:06.267" Score="0" Body="&lt;h1&gt;Unmanned aerial vehicle.&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;From the &lt;a href=&quot;https://en.wikipedia.org/wiki/Unmanned_aerial_vehicle&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia page&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;An &lt;strong&gt;unmanned aerial vehicle&lt;/strong&gt; (&lt;strong&gt;UAV&lt;/strong&gt;), commonly known as a &lt;strong&gt;drone&lt;/strong&gt;, is an aircraft without a human pilot on board. Its flight is either controlled autonomously by computers in the vehicle, or under the remote control of a navigator, or pilot (in military UAVs called a Combat Systems Officer on UCAVs) on the ground or in another vehicle.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;There are a wide variety of drone shapes, sizes, configurations, and characteristics. Historically, UAVs were simple remotely piloted aircraft, but autonomous control is increasingly being employed.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;They are predominantly deployed for military applications, but also used in a small but growing number of civil applications, such as firefighting and nonmilitary security work, such as surveillance of pipelines. UAVs are often preferred for missions that are too 'dull, dirty, or dangerous' for manned aircraft.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;h3&gt;Note that:&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Questions about &lt;a href=&quot;https://en.wikipedia.org/wiki/Autonomous_underwater_vehicle&quot; rel=&quot;nofollow noreferrer&quot;&gt;Autonomous underwater vehicle&lt;/a&gt;s should use the &lt;a href=&quot;/questions/tagged/auv&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;auv&amp;#39;&quot; rel=&quot;tag&quot;&gt;auv&lt;/a&gt; tag.&lt;/li&gt;&#xA;&lt;li&gt;Questions about autonomous &lt;a href=&quot;https://en.wikipedia.org/wiki/Unmanned_ground_vehicle&quot; rel=&quot;nofollow noreferrer&quot;&gt;Unmanned ground vehicle&lt;/a&gt;s should use the &lt;a href=&quot;/questions/tagged/ugv&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;ugv&amp;#39;&quot; rel=&quot;tag&quot;&gt;ugv&lt;/a&gt; tag.&lt;/li&gt;&#xA;&lt;li&gt;The &lt;a href=&quot;/questions/tagged/drone&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;drone&amp;#39;&quot; rel=&quot;tag&quot;&gt;drone&lt;/a&gt; tag should only be used for questions about autonomous drones which don't fit into the &lt;a href=&quot;/questions/tagged/auv&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;auv&amp;#39;&quot; rel=&quot;tag&quot;&gt;auv&lt;/a&gt;, &lt;a href=&quot;/questions/tagged/uav&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;uav&amp;#39;&quot; rel=&quot;tag&quot;&gt;uav&lt;/a&gt; or &lt;a href=&quot;/questions/tagged/ugv&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;ugv&amp;#39;&quot; rel=&quot;tag&quot;&gt;ugv&lt;/a&gt; tags.&lt;/li&gt;&#xA;&lt;li&gt;Questions about &lt;a href=&quot;https://en.wikipedia.org/wiki/Unmanned_aerial_vehicle#Degree_of_autonomy&quot; rel=&quot;nofollow noreferrer&quot;&gt;remotely controlled UAV&lt;/a&gt;s are probably off topic on &lt;em&gt;Robotics&lt;/em&gt; and are more likely to be suitable over on &lt;a href=&quot;https://electronics.stackexchange.com/&quot;&gt;Electrical Engineering&lt;/a&gt; Stack Exchange.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="37" LastEditorUserId="6890" LastEditDate="2017-08-30T21:13:24.650" LastActivityDate="2017-08-30T21:13:24.650" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="400" PostTypeId="4" CreationDate="2012-11-14T16:42:06.267" Score="0" Body="Unmanned aerial vehicle. See also the tags ugv &amp; auv." OwnerUserId="37" LastEditorUserId="37" LastEditDate="2016-05-05T15:06:14.670" LastActivityDate="2016-05-05T15:06:14.670" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="401" PostTypeId="5" CreationDate="2012-11-14T16:47:36.117" Score="0" Body="&lt;p&gt;A motor, not necessarily electric, which converts energy into some kind of motion. More generic than &lt;em&gt;motor&lt;/em&gt; which is usually assumed to be both electric and rotary.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the &lt;a href=&quot;http://en.wikipedia.org/wiki/Actuator&quot; rel=&quot;nofollow&quot;&gt;Wikipedia page&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;An &lt;strong&gt;actuator&lt;/strong&gt; is a type of motor for moving or controlling a mechanism or system. It is operated by a source of energy, usually in the form of an electric current, hydraulic fluid pressure or pneumatic pressure, and converts that energy into some kind of motion. An actuator is the mechanism by which an agent acts upon an environment. The agent can be either an artificial intelligence agent or any other autonomous being (human, other animal, etc.).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="37" LastEditorUserId="37" LastEditDate="2012-11-14T17:30:26.647" LastActivityDate="2012-11-14T17:30:26.647" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="402" PostTypeId="4" CreationDate="2012-11-14T16:47:36.117" Score="0" Body="A motor, not necessarily electric, which converts energy into some kind of motion." OwnerUserId="37" LastEditorUserId="37" LastEditDate="2012-11-14T17:30:22.210" LastActivityDate="2012-11-14T17:30:22.210" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="403" PostTypeId="1" AcceptedAnswerId="421" CreationDate="2012-11-14T16:52:39.187" Score="-1" ViewCount="123" Body="&lt;p&gt;I am aware of the legislation's in Nevada, but what is happening with the technology currently. When is it expected to be commercialized ?&lt;/p&gt;&#xA;" OwnerUserId="417" LastEditorUserId="350" LastEditDate="2012-11-30T14:01:14.433" LastActivityDate="2012-11-30T14:01:14.433" Title="What is the current state of the Google Self Driving Car Project?" Tags="&lt;ugv&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ClosedDate="2012-12-05T21:15:29.853" ContentLicense="CC BY-SA 3.0" />
  <row Id="404" PostTypeId="2" ParentId="369" CreationDate="2012-11-14T17:40:44.207" Score="2" Body="&lt;p&gt;If you consider e.g. a robotic arm, the inverse kinematics tell you how to choose the arm's joint angles to move the arm to some position and orientation where you want it to be. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In contrast to determining the forward kinemactics of some mechanism, determining it's &lt;em&gt;inverse kinematics&lt;/em&gt; is usually hard and sometimes, there isn't even an analytic solution. Industrial robots, however, are often designed in such a way that they have an analytic solution for the inverse kinematics. This can be achieved by e.g. clever alignment of joint axes. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Reinforcement Learning&lt;/em&gt;, on the other hand, is a machine learning technique. Like any other machine learning technique or algorithm, it can be used to determine a function which you don't know - given that you choose a good reward function that is related to the problem you want to solve. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, in a nutshell: you can use Reinforcement Learning to determine the inverse kinematics of a robot (if there is no analytical solution or determining one would be ridiculously hard). &lt;/p&gt;&#xA;" OwnerUserId="422" LastActivityDate="2012-11-14T17:40:44.207" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="405" PostTypeId="1" CreationDate="2012-11-14T17:56:40.557" Score="11" ViewCount="175" Body="&lt;p&gt;I have never used an accelerometer before, but I am aware that they come with I2C, SPI and analog outputs. If I choose to use an I2c or SPI, device, will I accumulate errors due to communication time?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is the fast sampling of an analog signal likely to get me a more accurate deduced position than using am I2C?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Will this be true for &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A robot moving in a room &lt;/li&gt;&#xA;&lt;li&gt;A robot moving in an outdoor terrain and is likely to slip and roll down a slope.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Also, I have no sense of Gs. I tried to move my hand around fast with my phone running andro-sensor in my fist and saw that the readings saturated at 20m/s&lt;sup&gt;2&lt;/sup&gt;. What G can I expect my robot to experience if it is hit by another fat moving bot or bumped by a fast walking human?&lt;/p&gt;&#xA;" OwnerUserId="272" LastEditorUserId="134" LastEditDate="2012-11-15T08:21:41.017" LastActivityDate="2012-11-15T20:16:37.210" Title="Selecting an accelerometer for Deduced Reckoning" Tags="&lt;sensors&gt;&lt;deduced-reckoning&gt;&lt;navigation&gt;&lt;accelerometer&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="406" PostTypeId="2" ParentId="405" CreationDate="2012-11-14T18:11:42.773" Score="5" Body="&lt;p&gt;Increasing the sampling frequency of the sensor doesn't improve it's accuracy or precision. That is a feature of the sensor which you usually cannot change. If you try to estimate your position by integrating accelerations alone, you definitely &lt;em&gt;will&lt;/em&gt; accumulate error over time, because every sensor is noisy. If you want to use the accelerometers to determine position or velocity, you should combine them with some other sensor that actually measures position (even with lower precision) or velocity. Then, you can combine these different sensor signals with a &lt;em&gt;Kalman filter&lt;/em&gt; to obtain a reasonable estimate of where you are and how fast you are moving. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Considering G forces, consider that 1 G is 9.81 m/s^2, which seems a lot to me, in the context of small hobby robots, at least for indoor robots. Outdoor could be a different story, depending on how powerful your engine is. A saturation at 20m/s^2 should be enough.&lt;/p&gt;&#xA;" OwnerUserId="422" LastActivityDate="2012-11-14T18:11:42.773" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="407" PostTypeId="5" CreationDate="2012-11-14T18:17:17.483" Score="0" Body="&lt;p&gt;deduced-reckoning, Dead Reckoning or ded reckoning is a technique of computing the current position based on a known initial position by integrating the acceleration experienced through time and the velocity.&lt;/p&gt;&#xA;" OwnerUserId="272" LastEditorUserId="272" LastEditDate="2012-11-15T19:50:06.613" LastActivityDate="2012-11-15T19:50:06.613" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="408" PostTypeId="4" CreationDate="2012-11-14T18:17:17.483" Score="0" Body="Deduced Reckoning, Dead Reckoning or Ded Reckoning is a technique of computing the current position based on a known initial position." OwnerUserId="272" LastEditorUserId="272" LastEditDate="2012-11-15T19:49:19.080" LastActivityDate="2012-11-15T19:49:19.080" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="409" PostTypeId="5" CreationDate="2012-11-14T18:21:43.823" Score="0" Body="&lt;p&gt;Accelerometers may measure acceleration on one two or three axis. It is useful in deduced reckoned navigation of robots. All accelerometers measure 1G og force due to the gravitation of the earth.&lt;/p&gt;&#xA;" OwnerUserId="272" LastEditorUserId="272" LastEditDate="2012-11-15T19:49:48.813" LastActivityDate="2012-11-15T19:49:48.813" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="410" PostTypeId="4" CreationDate="2012-11-14T18:21:43.823" Score="0" Body="Accelerometer is a sensor that measures acceleration." OwnerUserId="272" LastEditorUserId="272" LastEditDate="2012-11-15T19:50:14.163" LastActivityDate="2012-11-15T19:50:14.163" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="411" PostTypeId="2" ParentId="358" CreationDate="2012-11-14T18:28:36.620" Score="1" Body="&lt;p&gt;Don't fix it in software. Fix it in your mechanical cable harness design. If you try to do it in software, your robot will inevitably break itself. Even if it never exceeds its limits, using a cable this way will wear it out quickly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Trying to share the slack between joints will require sliding movement of the cable, which will damage the cable over time by abrasion and by repeatedly bending the cable around tight radii when you get close to overall limits. Sharing the slack means you'll have to attach the cable loosely, which will make it tend to flop around, encouraging you to leave even less slack.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead, fix the cable along each segment of the robot and treat each joint individually. Ensure that the cable bend radius is greater than 10X its diameter (more is better) over the entire range of motion of each joint. If this requires a large loop, then there are chain cable guides (looks a bit like wide plastic bicycle chain) to help keep it from getting in the way of other parts. &lt;/p&gt;&#xA;" OwnerUserId="223" LastActivityDate="2012-11-14T18:28:36.620" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="412" PostTypeId="2" ParentId="405" CreationDate="2012-11-14T19:03:51.070" Score="4" Body="&lt;p&gt;Think in terms of your control loop speed. A typical fast control loop speed is 1kHz. Some robots use a faster rate, some slower. Usually your control loop speed is higher than you really need it to be.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So each control frame lasts for 1000us. Within this control frame you need to:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Sample your sensors&lt;/li&gt;&#xA;&lt;li&gt;Perform the control calculations&lt;/li&gt;&#xA;&lt;li&gt;Send the new outputs to the motors&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;As long as you can comfortably do all of this within the time frame, you've got no problems. So how long does it take to read the accelerometer? If it's a 3-axis device, using 400kbps I2C, then it might take about 160us to read the data. That leaves you 840us to perform the calculation and update the motors. Even an 8-bit PIC can manage that.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;About G forces. During an impact, they can be surprisingly high. For example, how much of a whack do you think it would take to break a hard drive? Probably not that much. Well a hard drive I had recently said it was rated for 75G max acceleration. So expect two robots colliding to produce at least several G. It's impossible to estimate accurately because it depends hugely on the mechanical design of the robots. If they are both completely solid like snooker balls, then you can expect very high accelerations. If they have some kind of flexible shell to them, then this will reduce the acceleration a great deal. But, the question is, do you really need to know the actual value of acceleration during an impact?&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2012-11-14T19:03:51.070" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="413" PostTypeId="1" CreationDate="2012-11-14T19:12:09.213" Score="6" ViewCount="1959" Body="&lt;p&gt;I have not bought any parts yet, but I am making my own quadcopter. I have done the research and know all about the parts that I need, but many guides are sponsored and cost thousand(s) of euros/dollars while not explaining things entirely clearly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Firstly, I have found this &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__24723__Hobbyking_KK2_0_Multi_rotor_LCD_Flight_Control_Board.html&quot;&gt;flight control board&lt;/a&gt;. Would I need another microcontroller (such as the Arduino nano) for it to work? (IF ANYONE has experience with this board, let me know!).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Secondly, would the above board work with this &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/uh_viewitem.asp?idproduct=9042&amp;amp;aff=655899&quot;&gt;radio controller&lt;/a&gt;. Are controllers universal?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Please tell me if I'm not in the right section here, or if this doesn't count as a relevant topic).&lt;/p&gt;&#xA;" OwnerUserId="424" LastEditorUserId="350" LastEditDate="2012-11-30T21:17:52.360" LastActivityDate="2012-12-14T02:38:47.913" Title="Questions about quadcopter and radio controller" Tags="&lt;microcontroller&gt;&lt;quadcopter&gt;&lt;radio-control&gt;" AnswerCount="3" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="414" PostTypeId="2" ParentId="403" CreationDate="2012-11-14T20:28:22.223" Score="0" Body="&lt;p&gt;Google themselves have suggested that fully self driving cars will not be around for a decade. They have cars that can drive themselves but the entire standard is not there yet. It's difficult to take any risks with this project because it puts so many lives at risk. &lt;/p&gt;&#xA;" OwnerUserId="80" LastActivityDate="2012-11-14T20:28:22.223" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="415" PostTypeId="2" ParentId="413" CreationDate="2012-11-14T21:02:51.210" Score="3" Body="&lt;p&gt;As I understand it, the flight control board allows you to control your Quadcopter using a standard 5 or 6 channel RC receiver. So you don't need any other equipment. The radio controller you suggested is 6 channel, so that's plenty. The flight control board just provides stability, as it would be almost impossible for a human to control the speeds of all four motors rapidly enough to keep it stable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'll be able to steer the quadcopter using the controller, but won't be able to use GPS or anything clever without adding some more electronics.&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2012-11-14T21:02:51.210" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="416" PostTypeId="1" AcceptedAnswerId="465" CreationDate="2012-11-14T21:36:19.967" Score="17" ViewCount="2617" Body="&lt;p&gt;I apologize if this question may sound a little vague. I am working on a robotics project that will contain 27 servos of various sizes and I am having trouble figuring it how they should be powered.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was hoping to use several (3-6) 5 W 18650 battery boxes to power them, but the smallest motors would use 2.5 W each, so 1 battery box can only power two. The larger servos, obviously, use even more current, so this plan of using a small number of 18650's becomes infeasible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is not enough room on the robot for a 12 V car battery, and adding one would require recalculating the sizes of the servomotors that would be needed. Furthermore, I am not sure how to convert the 12 V it gives down to 5 V for the servomotors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S. What about the stall current of the motors? Should the power supply be able to supply the stall current of all the motors it supplies (at the same time) or just the working current? Should I use a fuse to handle when (if?) the servomotors stall? Should I use a fuse or a circuit breaker? Do they make 5 V fuses? If so, where can I get one?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Something like a larger version of the 18650 box would be most preferable.&lt;/p&gt;&#xA;" OwnerDisplayName="user428" LastEditorUserId="350" LastEditDate="2012-11-30T14:33:14.603" LastActivityDate="2012-11-30T14:33:14.603" Title="What is the best way to power a large number (27) servos at 5 V?" Tags="&lt;design&gt;&lt;otherservos&gt;&lt;power&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="417" PostTypeId="2" ParentId="416" CreationDate="2012-11-14T22:49:08.870" Score="1" Body="&lt;p&gt;This problem is a lot like rocket science. With a rocket, the heavier it is, the more fuel they need to lift off which makes it even heavier! You have your servos, but to power them you need a big battery making the robot heavier, this means stronger servos and an even bigger battery! If you can't work out how to power the robot with an onboard battery then prehaps you would have to settle for an off-board power supply.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this helps.&lt;/p&gt;&#xA;" OwnerUserId="374" LastActivityDate="2012-11-14T22:49:08.870" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="418" PostTypeId="2" ParentId="416" CreationDate="2012-11-14T22:55:39.167" Score="8" Body="&lt;p&gt;It's always difficult speccing the power supply for a robot, and you've hit the exact problem we all face. Do you spec it to cope with the typical load, or the absolute maximum load when all motors are stalled at max current?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's no right answer to this, except that whatever happens it shouldn't damage anything. The good news is that the servos probably won't be consuming 2.5W all the time, so a good way to start is to connect your system up to a large power supply with an ammeter and measure the actual current draw under typical heavy use. Once you know the maximum current draw, you can spec the batteries for that. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other thing you need to decide is how long you want the thing to run for. That will tell you how much battery capacity you need, and therefore the size of the battery. But, as you say, if that means you need a larger battery, then it might mean you need larger servos and more current, and therefore a larger battery! There might be no solution to this problem, except:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Ease your requirements. Accept that the robot won't run as long as you'd hoped.&lt;/li&gt;&#xA;&lt;li&gt;If possible, add torsion springs to the servos to help them lift the battery weight. This will mean they consume slightly less power.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;But what to do in the extreme case where all the motors are stalled?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might consider something like a &lt;a href=&quot;http://www.linear.com/products/hot_swap_controllers&quot;&gt;Hot Swap controller&lt;/a&gt;. This is a little chip which guards the power input to your system. It protects against the large inrush current caused by your system's capacitors. It also protects against over current in general, as well as over voltage.&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2012-11-14T22:55:39.167" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="419" PostTypeId="1" AcceptedAnswerId="622" CreationDate="2012-11-14T23:06:21.523" Score="-1" ViewCount="404" Body="&lt;p&gt;I'm building a walking robot that will need to know when it moves forward. I'm using on-board intelligence and I plan on using accelerometers, gyros, and magnometers (if needed) to be able to detect if the robot moves forward. The problem is, I dont know how to program an Internal Navigation System or an IMU.  What software algorithms are needed?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To clarify my problem, I need to know how to program the micro controller to read the sensors and be able to tell if the robot has displaced itself &lt;em&gt;forward&lt;/em&gt; since a previous measurement.&#xA;Also if I used &lt;a href=&quot;http://store.diydrones.com/ArduIMU_V3_p/kt-arduimu-30.htm&quot; rel=&quot;nofollow&quot;&gt;this sensor board&lt;/a&gt; (or similar) could I use it to determine the displacement. &lt;/p&gt;&#xA;" OwnerUserId="374" LastEditorUserId="350" LastEditDate="2012-12-04T04:55:36.247" LastActivityDate="2012-12-04T04:55:36.247" Title="How do you implement an INS from an accelerometer and (optionally) gyros and a magnetometer?" Tags="&lt;software&gt;&lt;imu&gt;&lt;deduced-reckoning&gt;&lt;artificial-intelligence&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="420" PostTypeId="2" ParentId="413" CreationDate="2012-11-14T23:26:52.390" Score="4" Body="&lt;p&gt;We have used an older generation of that board in our lab. It takes it's commands via RC which means you would not need another microcontroller. It is only a hover controller however so if you want to do any autonomy you will need another solution. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;One possibility is to use an &lt;a href=&quot;http://arduino.cc&quot; rel=&quot;nofollow&quot;&gt;Arduino&lt;/a&gt; and an &lt;a href=&quot;http://www.trossenrobotics.com/p/Xbee-Communication-Starter-Kit.aspx&quot; rel=&quot;nofollow&quot;&gt;Xbee&lt;/a&gt; to replace the RC system and use your computer to control it. We have been doing this in our lab for nearly a year now and it works fairly well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another solution is to use an &lt;a href=&quot;http://diydrones.com&quot; rel=&quot;nofollow&quot;&gt;ArduPilot&lt;/a&gt; (instead of the aforementioned controller) and communicate directly with it via an Xbee. Again you will use your laptop, desktop, or tablet to control it.&lt;/p&gt;&#xA;" OwnerUserId="177" LastActivityDate="2012-11-14T23:26:52.390" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="421" PostTypeId="2" ParentId="403" CreationDate="2012-11-15T00:00:01.140" Score="4" Body="&lt;p&gt;There's a good, if slightly overly optimistic study done by KPMG and the Center for Automotive Research called &lt;a href=&quot;http://www.kpmg.com/US/en/IssuesAndInsights/ArticlesPublications/Documents/self-driving-cars-next-revolution.pdf&quot; rel=&quot;nofollow&quot;&gt;Self Driving Cars: the Next Revolution&lt;/a&gt;.  You'll be seeing more and more semi-autonomous features within the decade, starting in higher end vehicles (all the major automakers are working on such systems and we already have advanced cruise control and lane departure warning).  However full autonomy is still a fair ways off, for cost as well as perception and institutional/legal issues.  One of the problems with commercializing Google's car is that the sensor systems cost over $250,000 (see &lt;a href=&quot;http://www.businessinsider.com/google-self-driving-car-sensor-cost-2012-9&quot; rel=&quot;nofollow&quot;&gt;http://www.businessinsider.com/google-self-driving-car-sensor-cost-2012-9&lt;/a&gt;).  Even with economies of scale, we're a ways off from that system being affordable. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Google's accomplishments are VERY impressive.  They've expanded to more vehicle types and more uses for testing (e.g., commuting to and from Google).  They still don't work in all environments (snow being one issue).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the way, though, California and Florida have joined Nevada in passing laws regulating experimental use of autonomous vehicles on public roads.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this gives you some info.&lt;/p&gt;&#xA;" OwnerUserId="58" LastActivityDate="2012-11-15T00:00:01.140" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="422" PostTypeId="2" ParentId="419" CreationDate="2012-11-15T03:00:09.867" Score="2" Body="&lt;p&gt;If you're looking for an inexpensive sensor, you could check out &lt;a href=&quot;http://www.invensense.com/mems/gyro/mpu6050.html&quot; rel=&quot;nofollow&quot;&gt;InvenSense's MPU-6000&lt;/a&gt;, which combines a 3-axis gyroscope and a 3-axis accelerometer. It communicates via an I2C or SPI bus with your main processor and is capable of estimating attitude when you add a magnetometer.&lt;/p&gt;&#xA;" OwnerUserId="295" LastActivityDate="2012-11-15T03:00:09.867" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="423" PostTypeId="2" ParentId="341" CreationDate="2012-11-15T06:43:47.260" Score="3" Body="&lt;p&gt;Robot tendons aren't much different from any other load-bearing cable. The same sources of stress and wear apply: the load tension, bending around pulleys, friction with other objects and friction between its own strands.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fatigue is much of what limits the life of a cable/wire rope, and both bending stress and abrasion play a role. Each time a section of the cable passes through a pulley or is wound around a drum, it must bend and straighten again. This creates a repeated reversing stress that causes cracks to grow through the material until it breaks (fatigue). Abrasion has a synergistic effect, by roughening the outside of the wires and making it easier for cracks to form. Both the abrasion and bending stresses are greatest at the outside of the cable, so those strands tend to fail first.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It might not even be the cable itself that breaks. Consider an everyday cable actuated mechanism: the window regulator that raises and lowers side windows in an automobile. It's not usually the cable or motor that fails, but rather the pulleys break. The pulleys are usually plastic and only supported on one side, so they're not as strong as the steel cable they're supporting. Sometimes the manufacturers don't even use pulleys, and instead just use a U-shaped plastic channel. Then, the cable slowly saws through the plastic piece. I suppose it only has to outlast the warranty.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some guidelines for maximum life are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Keep the diameters of pulleys and winding drums large relative to the cable. 10 times the diameter of the cable is barely enough, and 40 times the diameter of the cable is not too much.&lt;/li&gt;&#xA;&lt;li&gt;Lubricating the cable helps extend life both by reducing abrasion and by letting the strands slide against each other, making the cable more flexible and reducing bending stress.&lt;/li&gt;&#xA;&lt;li&gt;Don't neglect the other parts of the system, such as the pulleys the cable wraps around, guides it runs through, and its attachment points. &lt;/li&gt;&#xA;&lt;li&gt;Don't neglect the environment. Make sure any materials can handle the temperatures and chemicals they may be exposed to. Keep abrasive dust away from anything that moves.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;As far as fatigue testing materials goes, there are commercial testing machines for fatigue testing wire and cable, and testing houses that can perform the tests as a service. Actually getting a sample to fail in fatigue can take days at low stress levels, and accelerated (high stress) tests don't map easily across different materials. Narrowing options down based on calculations before testing is a good idea.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;References:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Shigley et al. &lt;em&gt;Mechanical Engineering Design&lt;/em&gt;, 7th ed. McGraw Hill, 2004 (specifically, chapter 17-6 on Wire Rope)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.wireropeworks.com/product_pdfs/EL_TB_09.pdf&quot; rel=&quot;nofollow&quot;&gt;Wirerope Works Technical Bulletin on Fatigue&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="223" LastActivityDate="2012-11-15T06:43:47.260" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="424" PostTypeId="5" CreationDate="2012-11-15T06:56:37.133" Score="0" Body="&lt;p&gt;A Kalman filter is an optimal estimator for linear dynamical systems with Gaussian noise. This algorithm takes as a series of noisy measurements from the dynamical system and combines them to estimate possibly unknown variables. In fact, if the system meets the theoretical assumptions of having linear dynamics and Gaussian noise, there is no better estimate of the unknown system state. The filter itself is usually defined in terms of matrices, one for the system model, one for the control model, one for the process noise, one for the observation model and one for the measurement noise.&lt;/p&gt;&#xA;" OwnerUserId="42" LastEditorUserId="42" LastEditDate="2012-11-15T19:49:42.823" LastActivityDate="2012-11-15T19:49:42.823" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="425" PostTypeId="4" CreationDate="2012-11-15T06:56:37.133" Score="0" Body="A Kalman filter is an optimal estimator for linear dynamical systems with Gaussian noise. Extensions to non-linear systems are included through the Extended KF and Unscented KF." OwnerUserId="42" LastEditorUserId="163" LastEditDate="2014-07-03T13:31:14.297" LastActivityDate="2014-07-03T13:31:14.297" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="426" PostTypeId="5" CreationDate="2012-11-15T07:00:33.970" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2012-11-15T07:00:33.970" LastActivityDate="2012-11-15T07:00:33.970" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="427" PostTypeId="4" CreationDate="2012-11-15T07:00:33.970" Score="0" Body="Rapidly-exploring Random Trees is an algorithm for performing motion planning" OwnerUserId="42" LastEditorUserId="20709" LastEditDate="2018-07-26T13:24:55.693" LastActivityDate="2018-07-26T13:24:55.693" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="428" PostTypeId="2" ParentId="413" CreationDate="2012-11-15T07:02:41.943" Score="5" Body="&lt;p&gt;specific answers;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;yes that controller will work fine, and is pretty popular. No it does not need anything additional other than to be hooked up to the receiver. from it, you hook up four speed controllers, and to them 4 motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;yes that transmitter receiver will work, but it is a little on the 'too inexpensive' side. You do realize it requires hooking it up to a computer to reverse a channel don't you? If you really can guarantee that will not be an inconvenience, then it will work, but usually people opt for the turnigy 9x (http://www.hobbyking.com/hobbyking/store/_&lt;em&gt;8992&lt;/em&gt;_Turnigy_9X_9Ch_Transmitter_w_Module_8ch_Receiver_Mode_2_v2_Firmware_.html). The great thing about it is that it often flashed with an improved firmware; &lt;a href=&quot;http://code.google.com/p/er9x/&quot; rel=&quot;nofollow&quot;&gt;http://code.google.com/p/er9x/&lt;/a&gt;  It is only a few more dollars and will be a much better choice. If you are at a point where 30 dollars makes a difference, do NOT get involved in this hobby. Radio controllers are universal, and what you buy now should last you for many years, so spend the extra $30 and get something a little better quality and more popular.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit - update: I purchased both of these since writing this answer. The transmitter is still work in progress but will become a long range transmitter (10 or so miles). The KK board has been pretty impressive, I've been pleased with it so far. &lt;a href=&quot;http://www.youtube.com/watch?v=gm-UdPIaIv4&quot; rel=&quot;nofollow&quot;&gt;watch&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="274" LastEditorUserId="274" LastEditDate="2012-12-14T02:38:47.913" LastActivityDate="2012-12-14T02:38:47.913" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="429" PostTypeId="5" CreationDate="2012-11-15T09:09:12.877" Score="0" Body="&lt;p&gt;A two-wire (data, SDA and clock SCL) bi-directional master/slave data-bus, originally for slow-speed peripherals (100KHz clock speed) but now available in faster versions (up to 5MHz)&lt;/p&gt;&#xA;" OwnerUserId="134" LastEditorUserId="134" LastEditDate="2012-11-15T19:49:12.217" LastActivityDate="2012-11-15T19:49:12.217" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="430" PostTypeId="4" CreationDate="2012-11-15T09:09:12.877" Score="0" Body="A two-wire bi-directional master/slave data-bus" OwnerUserId="134" LastEditorUserId="134" LastEditDate="2012-11-15T19:49:40.187" LastActivityDate="2012-11-15T19:49:40.187" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="431" PostTypeId="1" AcceptedAnswerId="448" CreationDate="2012-11-15T12:23:57.450" Score="1" ViewCount="1405" Body="&lt;p&gt;I'm planning to write an Inverse Kinematics controlled 6 dof virtual robot for Android. I did some research on packages avaliable and couldn't choose the right one which will satisfy my needs on this project. I've seen a work with Eigen in C++, and used it, it was just fine. But since i'm not so experienced in Java, i wanted to ask before i start, if someone knows some appropiate packages for these operations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is what i found so far:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;JAMA,&#xA;Vecmath,&#xA;Jmathtools,&#xA;EJML,&#xA;JAMPACK&#xA;I ask this because i really dont want to get stuck in the middle of my project. Thanks in advance.&lt;/p&gt;&#xA;" OwnerUserId="305" LastActivityDate="2012-11-17T18:29:07.723" Title="Inverse Kinematics in Java" Tags="&lt;inverse-kinematics&gt;&lt;programming-languages&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="432" PostTypeId="2" ParentId="390" CreationDate="2012-11-15T14:47:10.517" Score="3" Body="&lt;p&gt;The short answer is yes, this can work.  The long answer is &amp;quot;Yes, but you need to do a lot of sensor fusion&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;The technology you're after was conceived about 5 years ago, the academic work is here:&#xA;&lt;a href=&quot;https://people.csail.mit.edu/wojciech/MoCap/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://people.csail.mit.edu/wojciech/MoCap/index.html&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/wAjOk.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wAjOk.jpg&quot; alt=&quot;Motion capture in the real world&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&#xA;&lt;sub&gt;(source: &lt;a href=&quot;https://people.csail.mit.edu/wojciech/MoCap/teaser.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;mit.edu&lt;/a&gt;)&lt;/sub&gt;&lt;/p&gt;&#xA;&lt;p&gt;They combined the accelerometer data with ultrasonic ranges between the joints to improve the position estimation.  In this case, it was for full-body motion capture but doing it for just fingers should be a similar problem.&lt;/p&gt;&#xA;&lt;p&gt;This project immediately became a company that began making motion capture devices (for 3D movies, video games, etc), but I can't remember the company name.  A google search led me to &amp;quot;animazoo&amp;quot;, but I don't think that's what it was called before.  Maybe it's the same company with a new name.  In either case, those are the only relevant resources I know of but they seem to support your idea.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="15160" LastEditDate="2020-12-28T01:15:08.740" LastActivityDate="2020-12-28T01:15:08.740" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="433" PostTypeId="1" CreationDate="2012-11-15T17:23:01.367" Score="7" ViewCount="996" Body="&lt;p&gt;What are the pros/cons of the different &lt;a href=&quot;http://en.wikipedia.org/wiki/Visual_odometry&quot; rel=&quot;nofollow&quot;&gt;visual&lt;/a&gt; &lt;a href=&quot;http://en.wikipedia.org/wiki/Odometry&quot; rel=&quot;nofollow&quot;&gt;odometry&lt;/a&gt; options? &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Stereo Camera&lt;/li&gt;&#xA;&lt;li&gt;Optical Flow&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Simultaneous_localization_and_mapping&quot; rel=&quot;nofollow&quot;&gt;SLAM&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;other?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Criteria:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;how well it performs vs other odometry options/sensors (lidar, radar)&lt;/li&gt;&#xA;&lt;li&gt;sensor fidelity&lt;/li&gt;&#xA;&lt;li&gt;computation&lt;/li&gt;&#xA;&lt;li&gt;accuracy&lt;/li&gt;&#xA;&lt;li&gt;precision&lt;/li&gt;&#xA;&lt;li&gt;drift&lt;/li&gt;&#xA;&lt;li&gt;native resilience and repeadability in sensor noise or vehicle speed&lt;/li&gt;&#xA;&lt;li&gt;ease of integrating with &lt;a href=&quot;http://en.wikipedia.org/wiki/Inertial_measurement_unit&quot; rel=&quot;nofollow&quot;&gt;IMU&lt;/a&gt;/GPS&lt;/li&gt;&#xA;&lt;li&gt;etc&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In general, of course, because there are a lot of different ways the trade-offs go when we get into specifics about applications and hardware.  I'm asking out of curiosity, not for designing anything in particular.&lt;/p&gt;&#xA;" OwnerUserId="431" LastEditorUserId="350" LastEditDate="2012-11-30T14:08:50.077" LastActivityDate="2013-03-23T17:38:19.233" Title="Visual Odometry options?" Tags="&lt;mobile-robot&gt;&lt;localization&gt;&lt;computer-vision&gt;&lt;odometry&gt;" AnswerCount="3" CommentCount="5" FavoriteCount="3" ClosedDate="2013-05-30T22:40:31.200" ContentLicense="CC BY-SA 3.0" />
  <row Id="434" PostTypeId="5" CreationDate="2012-11-15T18:02:17.957" Score="0" Body="&lt;p&gt;Odometry is used by some robots, whether they be legged or wheeled, to estimate (not determine) their position relative to a starting location. This method is sensitive to errors due to the integration of velocity measurements over time to give position estimates. Rapid and accurate data collection, equipment calibration, and processing are required in most cases for odometry to be used effectively.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-From &lt;a href=&quot;http://en.wikipedia.org/wiki/Odometry&quot; rel=&quot;nofollow&quot;&gt;Wikipedia&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="272" LastEditorUserId="272" LastEditDate="2012-11-15T19:49:08.660" LastActivityDate="2012-11-15T19:49:08.660" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="435" PostTypeId="4" CreationDate="2012-11-15T18:02:17.957" Score="0" Body="Odometry is the use of data from moving sensors to estimate change in position over time." OwnerUserId="272" LastEditorUserId="272" LastEditDate="2012-11-15T19:50:10.203" LastActivityDate="2012-11-15T19:50:10.203" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="436" PostTypeId="1" CreationDate="2012-11-15T18:24:02.007" Score="8" ViewCount="364" Body="&lt;p&gt;The answers I received to the question on &lt;a href=&quot;https://robotics.stackexchange.com/questions/361/programming-a-line-following-robot-with-reinforcement-learning&quot;&gt;training a line following robot using reinforcement learning techniques&lt;/a&gt;, got me to think on how to train a robot. I believe there are essentially two ways -&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Train the physical robot.&lt;/li&gt;&#xA;&lt;li&gt;Model the robot and simulate the training.&lt;/li&gt;&#xA;&lt;li&gt;Did I miss something?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Approach 2 is definitely the better approach. However, a priori knowledge of the motion (response), a certain PWM signal (stimulus) would cause when the robot is in a given state is required. The motion caused by a PWM signal may depend on the (&lt;strong&gt;1&lt;/strong&gt;) current battery voltage, (&lt;strong&gt;2&lt;/strong&gt;) the mass of the robot and the (&lt;strong&gt;3&lt;/strong&gt;) current velocity (did I miss something?).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How do I model such a robot? And how do I model it quick? If I change the battery or add a few boards and other peripherals and change the mass of the robot, I would have to remodel and retrain the robot. Can I do this by providing some random stimulus PWMs and measuring the response?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;added:&lt;/strong&gt; My related &lt;a href=&quot;https://dsp.stackexchange.com/questions/6006/how-do-i-compute-the-imuplse-response-of-a-robot&quot;&gt;question in dsp.SE&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; A suggested edit to the title by &lt;a href=&quot;https://robotics.stackexchange.com/users/350/ian&quot;&gt;Ian&lt;/a&gt; worth mentioning - &quot;&lt;em&gt;How do I model train a robot so that if its dynamics change, it does not need complete re-training?&lt;/em&gt;&quot; I think this is a good question too but different from the one I am asking here. I am okay with re-training for now.&lt;/p&gt;&#xA;" OwnerUserId="272" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2013-01-22T08:45:23.490" Title="How do I model a robot?" Tags="&lt;reinforcement-learning&gt;&lt;pwm&gt;" AnswerCount="2" CommentCount="8" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="437" PostTypeId="2" ParentId="433" CreationDate="2012-11-15T18:41:39.893" Score="2" Body="&lt;p&gt;I'm not familiar with all visual odometry options, but you might find the following two articles that recently appeared in the IEEE Robotics and Automation Magazine relevant:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Scaramuzza, D., Fraundorfer, F., &lt;strong&gt;Visual Odometry: Part I - The First 30 Years and Fundamentals&lt;/strong&gt;, IEEE Robotics and Automation Magazine, Volume 18, issue 4, 2011.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fraundorfer, F., Scaramuzza, D., &lt;strong&gt;Visual Odometry: Part II - Matching, Robustness, and Applications&lt;/strong&gt;, IEEE Robotics and Automation Magazine, Volume 19, issue 2, 2012.&lt;/p&gt;&#xA;" OwnerUserId="295" LastActivityDate="2012-11-15T18:41:39.893" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="438" PostTypeId="5" CreationDate="2012-11-15T19:21:25.573" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2012-11-15T19:21:25.573" LastActivityDate="2012-11-15T19:21:25.573" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="439" PostTypeId="4" CreationDate="2012-11-15T19:21:25.573" Score="0" Body="BLDC stands for &quot;Brush-Less DC&quot;, as in &quot;BLDC Motor&quot;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2012-11-15T19:49:00.487" LastActivityDate="2012-11-15T19:49:00.487" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="440" PostTypeId="2" ParentId="433" CreationDate="2012-11-15T20:03:10.383" Score="4" Body="&lt;p&gt;In general, visual odometry is a method that performs odometric measurements using visual means. This rules out the SLAM component, since visual odometry is only a relative means of navigation (see my answer on &lt;a href=&quot;https://robotics.stackexchange.com/a/207/127&quot;&gt;navigation&lt;/a&gt;). There are a number of methods to extract the relative motion of the camera. Since the transform from camera to robot is known this will also give you the relative transform of your robot.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;If you only work with a single camera, you will always have a scale ambiguity, unless you have something to resolve that ambiguity in your image (e.g. object of known size) or combine it with another form of odometry like wheel odometry.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;From a vision point of you, there are two ways you can follow: dense and sparse processing. Dense processing means, you use a regular sampling of your image points for your processing (could also be the full image). Sparse processing would mean, that you first extract feature points and only perform your operations on these features. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Using optical flow for visual odometry, I would consider a dense approach. Once you got the flow field, you need to extract the motion components. This is not so trivial, as it largely depends on how your environment looks. There was an interesting way of resolving this in the presence of outliers presented in &quot;Monocular Heading Estimation in Non-Stationary Urban Environment&quot;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Sparse approaches will use features, which are extracted using feature detectors. Then there are two different methods on handling the features. First approach will perform tracking of the feature and in this way estimate where the scene point was moving to. Second approach performs association of features through feature descriptors. First one is usually used with fast algorithms on high frequency, while the second one is more robust to larger scene changes and hence can be run at lower frequency. The visual odometry on the MER Rovers works this way e.g. Some form of geometric constraint is used to remove outliers, usually with a form of RANSAC. There is quite a nice library called &lt;a href=&quot;http://www.cvlibs.net/software/libviso2.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;libviso2&lt;/a&gt; for performing visual odometry this way.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="127" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2012-11-15T20:03:10.383" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="441" PostTypeId="2" ParentId="405" CreationDate="2012-11-15T20:16:37.210" Score="1" Body="&lt;p&gt;From your question I figure you are trying to get your position from the accelerometers. Have a look at what sort of &lt;a href=&quot;http://www.vectornav.com/support/library?id=76#unaided-position-estimate&quot; rel=&quot;nofollow&quot;&gt;errors&lt;/a&gt; you are expecting before, and then maybe reconsider. Position estimation has very large errors, mainly due to the uncertainty in the orientation. The application in ships, planes, rockets etc use very expensive high precision navigation grade IMUs. The latency, which your question boils down to is not so much of a problem. More relevant is the synchronization between your other sensors (e.g. Gyros). Accelerometers are usually not used for position estimation (there are some cases where it helps, but only for short periods), but rather for compensating gyro drift in orientation estimation. You can also use them directly to estimate your orientation, but then your estimate is perturbed by dynamic accelerations. &lt;/p&gt;&#xA;" OwnerUserId="127" LastActivityDate="2012-11-15T20:16:37.210" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="442" PostTypeId="1" CreationDate="2012-11-15T20:52:29.157" Score="11" ViewCount="2890" Body="&lt;p&gt;Digital compasses (magnetometers) require a hard/soft iron calibration in order to be accurate.  This compensates for the magnetic disturbances caused by nearby metal objects -- the robot's chassis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/vrsV8.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(image from &lt;a href=&quot;http://diydrones.com/forum/topics/magnetometer-soft-and-hard-iron-calibration&quot; rel=&quot;noreferrer&quot;&gt;http://diydrones.com&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, digital compasses are also susceptible to the electric fields caused by the relatively high amount of current drawn by motors.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to get an accurate compass reading, what is the best way to measure (and compensate for) the interference caused by changing motor current levels?&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2012-11-15T22:36:42.447" Title="How can the dynamic effects of motor current on a digital compass be characterized and compensated for?" Tags="&lt;mobile-robot&gt;&lt;sensors&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="443" PostTypeId="2" ParentId="442" CreationDate="2012-11-15T22:36:42.447" Score="7" Body="&lt;p&gt;Generally, this is not possible. This is because motors usually rotate very rapidly, creating rapidly fluctuating magnetic fields. Whether the disturbance is enough depends on how large the motors are.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, because I mounted an IMU (Inertial Measurement Unit) with magnetometers near some motors, and was forced to turn off the magnetometers to avoid the measurement affecting the state estimation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In practice, the solutions most likely to solve your problem is:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;move the compass/magnetometer away from from the motors&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;use shielding material (basically material with high magnetic permeability). They do not block magnetic fields, but because they provide a path of low magnetic resistance, they attact the magnetic field (lines from north to south) to pass through their interior, so that the magnetic field intensity is lower elsewhere.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The best shape for magnetic shields is thus a closed container surrounding the shielded volume. The effectiveness of this type of shielding depends on the material's permeability, which generally drops off at both very low magnetic field strengths and at high field strengths where the material becomes saturated. So to achieve low residual fields, magnetic shields often consist of several enclosures one inside the other, each of which successively reduces the field inside it. - &lt;a href=&quot;http://en.wikipedia.org/wiki/Electromagnetic_shielding#Magnetic_shielding&quot;&gt;Wikipedia/Magnetic shielding&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You can thus wrap the motors in shielding material, such as:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Giron&lt;/li&gt;&#xA;&lt;li&gt;MagnetShield&lt;/li&gt;&#xA;&lt;li&gt;PaperShield&lt;/li&gt;&#xA;&lt;li&gt;Magnetic Shielding Foil&lt;/li&gt;&#xA;&lt;li&gt;Mag-Stop Plates&lt;/li&gt;&#xA;&lt;li&gt;MetGlas&lt;/li&gt;&#xA;&lt;li&gt;JointShield&lt;/li&gt;&#xA;&lt;li&gt;Finemet (for kHz frequency fields)&lt;/li&gt;&#xA;&lt;li&gt;CobalTex&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;A good site for comparison of these materials is &lt;a href=&quot;http://www.lessemf.com/mag-shld.html&quot;&gt;LessEMF.com Magnetic Field Shielding&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;It is theoretically possible to correct for the magnetic disturbance without shielding. We do need to be aware that there are two possible sources - a rotating permanent magnet and/or current in the coils. If we have feedback of the rotor position, we can correct for the permanent magnet or coil position. If you perform some experiments, recording current and rotor position, you should be able to fit a model of the magnetic field. Fitting is necessary because the actual field strength is very hard to calculate because of how the magnetic field looks depends on the size and shape of both the magnet and coils.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In practice, it is difficult to do this - unless the motor is turning very slowly and your sensor and model is accurate enough. First, if the frequency is high, it can cause problems because of synchronization issues and communication delays. If you cannot synchronize the data obtained from the motor feedback (position and current) and that from your magnetometers, you will increase your uncertainty. Even if the frequency is low, you need to have good control of the accuracy of:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the magnetometer&lt;/li&gt;&#xA;&lt;li&gt;the model&lt;/li&gt;&#xA;&lt;li&gt;the inputs to the model (position and current)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;If any of the above are not accurate enough, the residue magnetic field (assumed to be the earth's magnetic field) could be very inaccurate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general, accuracy can be decreased by:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;frequency&lt;/li&gt;&#xA;&lt;li&gt;motor field strength (since for the equation $residue magnetic field = raw measurement - motor model$, if the two terms on the right hand side are large, even at 1% accuracy, taking the difference could result in large left hand side uncertainties)&lt;/li&gt;&#xA;&lt;li&gt;sensor resolutions&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="145" LastActivityDate="2012-11-15T22:36:42.447" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="444" PostTypeId="2" ParentId="436" CreationDate="2012-11-16T00:42:20.687" Score="4" Body="&lt;p&gt;As I see it there are two main questions here. The first is, how do I model a robot? This is frequently done with a &lt;a href=&quot;http://en.wikipedia.org/wiki/State_space&quot; rel=&quot;nofollow&quot;&gt;state-space&lt;/a&gt; formulation of the &lt;a href=&quot;http://en.wikipedia.org/wiki/Equations_of_motion&quot; rel=&quot;nofollow&quot;&gt;equations of motion&lt;/a&gt;. The exact equations depend on the physical construction of your robot. Yes, in order to model them with PWM input then you need to determine the transfer function from the PWM values you supply to the output of your actuators. Then you plug that function in for the control signal in your model. Again the derivation of this function is robot specific. The current battery voltage and the mass of the robot would likely be useful but I don't know about the velocity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second question is, given a mathematical model of my robot, what is the best way to train a reinforcement learning (RL) algorithm to control it? In short there is no one best way. Training directly on the robot tends to be time consuming because it takes the robot longer to execute trials. Simulations however can result in policies that are less accurate because the physics of the simulation are necesssarily simplified. Another approach is to train the learner in simulation to get a reasonable approximation and then transfer the resulting policy to the robot for further refinement. This of course fails if the model is not sufficiently accurate. It also requires extra development.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally you ask &quot;Can I [remodel and retrain the robot] by providing some random stimulus PWMs and measuring the response?&quot; In the case of RL there is no reason to think the new optimal policy is anything like the previous optimal policy and as such there isn't much reason to think a few random controls will supply sufficient information to change the policy appropriately. Of course retraining only needs to occur if the changes you make to your robot affect the formulation of the state-space model and/or the action model that you use. For instance, if your action model is in terms of high level actions (&quot;go-left&quot;, &quot;go-right&quot;, &quot;go-forward&quot;) then changing the dynamics requires changing how you implement these motions but the policy should still hold.&lt;/p&gt;&#xA;" OwnerUserId="177" LastActivityDate="2012-11-16T00:42:20.687" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="445" PostTypeId="1" CreationDate="2012-11-16T20:22:37.827" Score="13" ViewCount="5240" Body="&lt;p&gt;I am trying to use a stereo camera for scene reconstruction, but I can usually only obtain sparse point clouds (i.e. over half the image does not have any proper depth information). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I realize that stereo processing algorithms rely on the presence of texture in the images and have a few parameters that can be tweaked to obtain better results, such as the disparity range or correlation window size. As much as I tune these parameters, though, I am never able to get results that are even remotely close to what can be obtained using an active sensor such as the Kinect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason why I want that is because very often point clouds corresponding to adjacent regions don't have enough overlap for me to obtain a match, so reconstruction is severely impaired.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question to the Computer Vision experts out there is the following: &lt;strong&gt;what can I do to obtain denser point clouds in general&lt;/strong&gt; (without arbitrarily modifying my office environment)?&lt;/p&gt;&#xA;" OwnerUserId="95" LastActivityDate="2018-01-11T21:25:53.337" Title="How to obtain dense point clouds from stereo cameras?" Tags="&lt;slam&gt;&lt;computer-vision&gt;" AnswerCount="4" CommentCount="3" FavoriteCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="446" PostTypeId="1" AcceptedAnswerId="525" CreationDate="2012-11-16T21:03:22.347" Score="6" ViewCount="23095" Body="&lt;p&gt;I have a handful of 31.2oz-in stepper motors (&lt;a href=&quot;http://www.mouser.com/Search/ProductDetail.aspx?R=HT17-268Dvirtualkey55010000virtualkey834-HT17-268D&quot;&gt;Mouser.com - Applied Motion: HT17-268D&lt;/a&gt;), and I was curious if they would be big enough to run a 3D printing/cutting/etching type (think RepRap) of machine. I had in mind to attach them via  a simple gear to a screw-type drive to run the tool head back and forth. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Maximum bed size would probably be ~1.5'&lt;sup&gt;3&lt;/sup&gt;. &lt;/li&gt;&#xA;&lt;li&gt;Heaviest tool head would be something about half the weight of a Dremel tool.&lt;/li&gt;&#xA;&lt;li&gt;Hardest substances I would use it on would probably be hardwoods (with high speed cutter) and copper (for PCB etching).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;How do I figure the amount of torque needed to drive the head, and would the motors that I already have be big enough to do the job?&lt;/p&gt;&#xA;" OwnerUserId="416" LastActivityDate="2015-02-05T13:01:38.873" Title="How much torque do I need for a CNC machine?" Tags="&lt;stepper-motor&gt;&lt;reprap&gt;" AnswerCount="4" CommentCount="5" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="447" PostTypeId="2" ParentId="445" CreationDate="2012-11-17T10:54:45.570" Score="4" Body="&lt;p&gt;You can try to skip the salient point detection, and just densely sample over the image (as grid or so) and compute a feature descriptor at every sample point. You can probably even go as far as computing a descriptor for every pixel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might lose scale-invariance, but I think this won't hurt too much for stereo vision as objects will be at approximately the same scale in both images.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another approach might be to combine multiple salient point detection algorithms: corners, edges, blobs and so on. Then you have to use the same feature descriptor algorithm for all detected points, however this latter part could be somewhat tricky to implement.&lt;/p&gt;&#xA;" OwnerUserId="443" LastActivityDate="2012-11-17T10:54:45.570" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="448" PostTypeId="2" ParentId="431" CreationDate="2012-11-17T18:29:07.723" Score="2" Body="&lt;p&gt;These are matrix-vector math libraries. They are related to inverse kinematics only because inverse kinematics involves matrices, vectors, and math. If you need an implementation of an inverse kinematics library, that is a different question. But any of those would be fine for doing the required math, once you solve the inverse kinematics in closed form or by some other method. Personally, I've used JAMA (it works).&lt;/p&gt;&#xA;" OwnerUserId="163" LastActivityDate="2012-11-17T18:29:07.723" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="449" PostTypeId="5" CreationDate="2012-11-18T00:55:48.197" Score="0" Body="&lt;h1&gt;Autonomous underwater vehicle.&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;From the &lt;a href=&quot;https://en.wikipedia.org/wiki/Autonomous_underwater_vehicle&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia page&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;An &lt;strong&gt;autonomous underwater vehicle (AUV)&lt;/strong&gt; is a robot which travels underwater without requiring input from an operator. AUVs constitute part of a larger group of undersea systems known as &lt;a href=&quot;https://en.wikipedia.org/wiki/Unmanned_underwater_vehicle&quot; rel=&quot;nofollow noreferrer&quot;&gt;unmanned underwater vehicles&lt;/a&gt;, a classification that includes non-autonomous &lt;a href=&quot;https://en.wikipedia.org/wiki/Remotely_operated_underwater_vehicle&quot; rel=&quot;nofollow noreferrer&quot;&gt;remotely operated underwater vehicles (ROVs)&lt;/a&gt; – controlled and powered from the surface by an operator/pilot via an umbilical or using remote control. In military applications AUVs more often referred to simply as &lt;strong&gt;unmanned undersea vehicles (UUVs)&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;h3&gt;Note that:&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Questions about autonomous &lt;a href=&quot;https://en.wikipedia.org/wiki/Unmanned_aerial_vehicle&quot; rel=&quot;nofollow noreferrer&quot;&gt;Unmanned aerial vehicle&lt;/a&gt;s should use the &lt;a href=&quot;/questions/tagged/uav&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;uav&amp;#39;&quot; rel=&quot;tag&quot;&gt;uav&lt;/a&gt; tag.&lt;/li&gt;&#xA;&lt;li&gt;Questions about autonomous &lt;a href=&quot;https://en.wikipedia.org/wiki/Unmanned_ground_vehicle&quot; rel=&quot;nofollow noreferrer&quot;&gt;Unmanned ground vehicle&lt;/a&gt;s should use the &lt;a href=&quot;/questions/tagged/ugv&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;ugv&amp;#39;&quot; rel=&quot;tag&quot;&gt;ugv&lt;/a&gt; tag.&lt;/li&gt;&#xA;&lt;li&gt;The &lt;a href=&quot;/questions/tagged/drone&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;drone&amp;#39;&quot; rel=&quot;tag&quot;&gt;drone&lt;/a&gt; tag should only be used on questions about autonomous drones which don't fit into the &lt;a href=&quot;/questions/tagged/auv&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;auv&amp;#39;&quot; rel=&quot;tag&quot;&gt;auv&lt;/a&gt;, &lt;a href=&quot;/questions/tagged/uav&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;uav&amp;#39;&quot; rel=&quot;tag&quot;&gt;uav&lt;/a&gt; or &lt;a href=&quot;/questions/tagged/ugv&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;ugv&amp;#39;&quot; rel=&quot;tag&quot;&gt;ugv&lt;/a&gt; tags.&lt;/li&gt;&#xA;&lt;li&gt;Questions about &lt;a href=&quot;https://en.wikipedia.org/wiki/Remotely_operated_underwater_vehicle&quot; rel=&quot;nofollow noreferrer&quot;&gt;Remotely operated underwater vehicle&lt;/a&gt;s are probably off topic on &lt;em&gt;Robotics&lt;/em&gt; and are more likely to be suitable over on &lt;a href=&quot;https://electronics.stackexchange.com/&quot;&gt;Electrical Engineering&lt;/a&gt; Stack Exchange.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;If the tags &lt;a href=&quot;/questions/tagged/uuv&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;uuv&amp;#39;&quot; rel=&quot;tag&quot;&gt;uuv&lt;/a&gt; &amp;amp; &lt;a href=&quot;/questions/tagged/rov&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;rov&amp;#39;&quot; rel=&quot;tag&quot;&gt;rov&lt;/a&gt; start to be used, then they should probably be considered synonyms of &lt;a href=&quot;/questions/tagged/auv&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;auv&amp;#39;&quot; rel=&quot;tag&quot;&gt;auv&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="6890" LastEditDate="2017-08-30T21:13:16.623" LastActivityDate="2017-08-30T21:13:16.623" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="450" PostTypeId="4" CreationDate="2012-11-18T00:55:48.197" Score="0" Body="Autonomous underwater vehicle. See also the tags ugv &amp; uav." OwnerUserId="37" LastEditorUserId="37" LastEditDate="2016-05-05T15:08:11.640" LastActivityDate="2016-05-05T15:08:11.640" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="451" PostTypeId="5" CreationDate="2012-11-18T01:11:13.090" Score="0" Body="&lt;h1&gt;Unmanned ground vehicle.&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;From the &lt;a href=&quot;https://en.wikipedia.org/wiki/Unmanned_ground_vehicle&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia page&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;An &lt;strong&gt;unmanned ground vehicle (UGV)&lt;/strong&gt; is a vehicle that operates while in contact with the ground and without an onboard human presence. UGVs can be used for many applications where it may be inconvenient, dangerous, or impossible to have a human operator present. Generally, the vehicle will have a set of sensors to observe the environment, and will either autonomously make decisions about its behavior or pass the information to a human operator at a different location who will control the vehicle through teleoperation.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The UGV is the land-based counterpart to unmanned aerial vehicles and remotely operated underwater vehicles. Unmanned robotics are being actively developed for both civilian and military use to perform a variety of dull, dirty, and dangerous activities.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;h3&gt;Note that:&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Questions about autonomous &lt;a href=&quot;https://en.wikipedia.org/wiki/Unmanned_aerial_vehicle&quot; rel=&quot;nofollow noreferrer&quot;&gt;Unmanned aerial vehicle&lt;/a&gt;s should use the &lt;a href=&quot;/questions/tagged/uav&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;uav&amp;#39;&quot; rel=&quot;tag&quot;&gt;uav&lt;/a&gt; tag.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Questions about &lt;a href=&quot;https://en.wikipedia.org/wiki/Autonomous_underwater_vehicle&quot; rel=&quot;nofollow noreferrer&quot;&gt;Autonomous underwater vehicle&lt;/a&gt;s should use the &lt;a href=&quot;/questions/tagged/auv&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;auv&amp;#39;&quot; rel=&quot;tag&quot;&gt;auv&lt;/a&gt; tag.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The &lt;a href=&quot;/questions/tagged/drone&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;drone&amp;#39;&quot; rel=&quot;tag&quot;&gt;drone&lt;/a&gt; tag should only be used on questions about autonomous drones which don't fit into the &lt;a href=&quot;/questions/tagged/auv&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;auv&amp;#39;&quot; rel=&quot;tag&quot;&gt;auv&lt;/a&gt;, &lt;a href=&quot;/questions/tagged/uav&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;uav&amp;#39;&quot; rel=&quot;tag&quot;&gt;uav&lt;/a&gt; or &lt;a href=&quot;/questions/tagged/ugv&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;ugv&amp;#39;&quot; rel=&quot;tag&quot;&gt;ugv&lt;/a&gt; tags.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Questions about &lt;a href=&quot;https://en.wikipedia.org/wiki/Unmanned_ground_vehicle#Remote-Operated&quot; rel=&quot;nofollow noreferrer&quot;&gt;remotely operated ground vehicles&lt;/a&gt; are probably off topic on &lt;em&gt;Robotics&lt;/em&gt; and are more likely to be suitable over on &lt;a href=&quot;https://electronics.stackexchange.com/&quot;&gt;Electrical Engineering&lt;/a&gt; Stack Exchange.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="37" LastEditorUserId="6890" LastEditDate="2017-08-30T21:13:28.020" LastActivityDate="2017-08-30T21:13:28.020" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="452" PostTypeId="4" CreationDate="2012-11-18T01:11:13.090" Score="0" Body="Unmanned ground vehicle. See also the tags uav &amp; auv." OwnerUserId="37" LastEditorUserId="37" LastEditDate="2016-05-05T15:08:55.170" LastActivityDate="2016-05-05T15:08:55.170" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="453" PostTypeId="1" AcceptedAnswerId="458" CreationDate="2012-11-18T05:44:20.077" Score="9" ViewCount="13326" Body="&lt;p&gt;In our lab we use LiPo batteries to power our quadrotors. Lately we have been experiencing stability issues when using certain batteries. The batteries seem to charge and balance normally and our battery monitor indicates they are fine even when putting them under load. However when we attempt to fly the quadrotor with one of these batteries, manually or autonomously, it has a severe tendency to pitch and/or roll. My guess is that the battery is not supplying sufficient power to all the motors which brings me to my question. Is this behavior indicative of a LiPo going bad? If so what is the best way to test a battery to confirm my suspicions?&lt;/p&gt;&#xA;" OwnerUserId="177" LastEditorUserId="350" LastEditDate="2012-11-30T14:28:05.310" LastActivityDate="2018-07-10T10:08:44.477" Title="How can one determine whether a LiPo battery is going bad?" Tags="&lt;battery&gt;&lt;troubleshooting&gt;" AnswerCount="4" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="454" PostTypeId="2" ParentId="445" CreationDate="2012-11-18T06:54:47.537" Score="1" Body="&lt;p&gt;When you say, &quot;over half the image does not have any proper depth information&quot;, which half ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One issue we ran into is that if distance-to-object is of the same order of magnitude than your baseline (usually associated with very wide angle cameras), then the &quot;standard&quot; dense stereo algorithms don't work so well. We've been using the libelas library, and its developers told us that this is called &quot;large baseline stereo&quot; and is yet another problem.&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2012-11-18T06:54:47.537" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="455" PostTypeId="2" ParentId="453" CreationDate="2012-11-18T07:19:33.400" Score="2" Body="&lt;p&gt;There's a possibility that the battery is going bad under those conditions. Assuming you have some kind of &lt;a href=&quot;https://en.wikipedia.org/wiki/Supervisory_circuit&quot; rel=&quot;nofollow&quot;&gt;battery supervisor&lt;/a&gt;, just adding an interrupt indicating that the battery is below a certain level would be very informative. That way, if you have a freshly charged battery and the interrupt is triggered sooner than expected, then you know that the battery is going bad. That is, unless the problem is more obvious by observing swelling of the battery, in which case you should probably (and safely) dispose of it. You could also try the fresh battery with a comparable load to that expected while in flight (e.g. when all motors are on and all processors and sensors are running nominally).&lt;/p&gt;&#xA;" OwnerUserId="295" LastActivityDate="2012-11-18T07:19:33.400" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="456" PostTypeId="2" ParentId="382" CreationDate="2012-11-18T07:39:27.350" Score="8" Body="&lt;p&gt;You can greatly simplify the problem in most common cases:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A lot of &quot;commercial grade&quot; IMus (e.g. Xsens) have very noisy accelerometers. Don't even bother fusing them to get speed, the odometry is already order of magnitudes better. The only usable data the IMU is going to provide is the pitch and roll, and to some extent the heading (see next point)&lt;/li&gt;&#xA;&lt;li&gt;heading from IMUs is not that trustworthy. It uses magetometers, and will show huge drifts (up to 25 degrees over 2m in our case) near ferromagnetic masses, such as the one you can find in building walls. What we did to solve this is to use the IMU heading, but estimate a heading bias.&lt;/li&gt;&#xA;&lt;li&gt;If you are outdoors, don't forget that travelling 10m on a 10 degree incline does not lead to the same change in X and Y than travelling 10m on a flat terrain. This is usually accounted for by estimating Z, but I guess it can be estimated differently.&lt;/li&gt;&#xA;&lt;li&gt;GPS is also a lying bitch, typically in high-multipath environments. Plus low-grade (and even in some conditions high-grade) GPSes have a tendency to report very wrong standard deviations. We used some simple chi-square tests to check whether a particular GPS measurement should be integrated (i.e. checking that it matches the current filter estimate up to a certain point), which gave us decent results.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The &quot;typical&quot; solution for us is to use odometry + IMU to get an ego-motion estimate and then use GPS to correct X,Y,Z and heading bias.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.rock-robotics.org/stable/pkg/slam/pose_ekf/index.html&quot;&gt;Here is an EKF implementation that we extensively used.&lt;/a&gt; If you need to estimate the IMU's orientation (i.e. if it does not already have a built-in filter), you can also use on of these two filter: &lt;a href=&quot;http://www.rock-robotics.org/master/pkg/slam/quater_ukf/index.html&quot;&gt;UKF&lt;/a&gt; and &lt;a href=&quot;http://www.rock-robotics.org/master/pkg/slam/quater_ekf/index.html&quot;&gt;EKF&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2012-11-18T07:39:27.350" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="457" PostTypeId="2" ParentId="453" CreationDate="2012-11-18T08:57:44.260" Score="2" Body="&lt;p&gt;&quot;behavior indicative of a LiPo going bad&quot; - in my experience this is usually a puffy battery, or a fire. My understanding of it is when a LiPo goes bad, the individual cells within it are not charging and/or discharging evenly, and that indirectly leads to the previously mentioned symptoms. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can you check the voltage balance after a bad flight? Are they more than a 1/10  volt different?  Can you verify other exact same batteries are performing adequately, and thus your C rating (burst amperage) is appropriate?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suppose it is possible to exhibit the behavior you describe, but that would mean the specifications were very close to begin with, you should try allow a little more room (ie a higher C rating, at a higher cost $$ of course).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is pretty much the same thing movrev said in his answer - so mark it instead of this one.&lt;/p&gt;&#xA;" OwnerUserId="274" LastActivityDate="2012-11-18T08:57:44.260" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="458" PostTypeId="2" ParentId="453" CreationDate="2012-11-18T14:15:19.493" Score="9" Body="&lt;p&gt;It sounds like you're asking 2 questions:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Is an imbalance in motor performance indicative of a failing battery?&lt;/li&gt;&#xA;&lt;li&gt;How would you test for a failing battery?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The answer to the first question is &quot;maybe&quot;.  We had an issue on one of the AUVs I used to work on, where sometimes at the end of the day it would lose all heading control.  By chance, we discovered that one of the motor controllers (used for differential drive) stopped working when it dipped below a certain voltage, where the other one were unaffected.  So in that sense, the imbalance in motor performance was related to the battery but not necessarily a battery failure.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The best way to rule out the battery would be to tie your quadrotor (with only a few inches of freedom) to a table, and measure the battery voltage while you manually control it.  Does it drop below what you are expecting, indicating an inability to supply enough current?  Another way to do it would be to replace the battery with a simulated battery (variable voltage source + variable resistor) and test whether dips in the output voltage or increased internal resistance are to blame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The answer to the second question is more complicated, but a decent resource for it is here:&#xA;&lt;a href=&quot;http://batteryuniversity.com/learn/article/testing_lithium_based_batteries&quot; rel=&quot;nofollow noreferrer&quot;&gt;Testing Lithium-based Batteries&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/V3Fv5.jpg&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Failure&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/V3Fv5.jpg&quot; alt=&quot;Failure&quot; title=&quot;Failure&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Essentially, you must measure the response times of the battery to changes in load.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="18235" LastEditDate="2018-07-10T10:08:44.477" LastActivityDate="2018-07-10T10:08:44.477" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="459" PostTypeId="2" ParentId="215" CreationDate="2012-11-19T10:45:59.123" Score="4" Body="&lt;p&gt;If you have no idea what to do with your microcontroller, I would start slower. I wouldn't say using a Kinect is that great an idea right now.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some of the other answers mentioned using development kits and boards to avoid soldering, which I think is a great way to get started with embedded programming without having to worry about soldering practically anything.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My tip is to look into a great website I found when I knew nothing about robots: &lt;a href=&quot;http://www.societyofrobots.com/&quot; rel=&quot;nofollow&quot;&gt;Society of Robots&lt;/a&gt; and their great &lt;a href=&quot;http://www.societyofrobots.com/step_by_step_robot.shtml&quot; rel=&quot;nofollow&quot;&gt;$50 Robot Tutorial&lt;/a&gt;! There you will find a lot of basic information for people who want to build their own robots.&lt;/p&gt;&#xA;" OwnerUserId="95" LastActivityDate="2012-11-19T10:45:59.123" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="460" PostTypeId="2" ParentId="94" CreationDate="2012-11-19T11:22:09.613" Score="2" Body="&lt;p&gt;I can say from my own experience three libraries are awesome to use with 8-bit AVR microcontrollers:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.nongnu.org/avr-libc/&quot; rel=&quot;nofollow&quot;&gt;AVR Libc&lt;/a&gt; is the standard C library for AVR programming. It is very low-level in the sense that you really need to know your hardware down to the register level, but it gives you great freedom to do &lt;strong&gt;exactly&lt;/strong&gt; what you want. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even if you don't want to dive so deep, you should become somewhat familiar with it since every now and then Arduino users end up using bits of it to surpass the capabilities of the standard Arduino API. An interesting fact is that you can use AVR Libc snippets within your Arduino code since the Arduino API is based on the AVR GNU Toolchain.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/dreamiurg/avr-liberty&quot; rel=&quot;nofollow&quot;&gt;AVR Liberty&lt;/a&gt; is currently my favorite library to develop with. It is both very straightforward and very powerful, so I feel I get the best of both worlds: I don't have to reinvent the wheel as with AVR Libc, but I also don't have to be agnostic of everything that goes on with the hardware as with the Arduino API. I &lt;strong&gt;strongly&lt;/strong&gt; recommend it.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The &lt;a href=&quot;http://www.arduino.cc&quot; rel=&quot;nofollow&quot;&gt;Arduino API&lt;/a&gt; can be used in the Arduino boards, in breadboard versions&lt;a href=&quot;http://arduino.cc/en/Main/Standalone&quot; rel=&quot;nofollow&quot;&gt;[1]&lt;/a&gt;&lt;a href=&quot;http://arduino.cc/en/Tutorial/ArduinoToBreadboard&quot; rel=&quot;nofollow&quot;&gt;[2]&lt;/a&gt; of the Arduino board, or even in standalone microcontrollers using a programmer such as the &lt;a href=&quot;http://www.fischl.de/usbasp/&quot; rel=&quot;nofollow&quot;&gt;USBasp&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I like to use Arduino boards for quick prototyping, but I find its API to be somewhat limiting at times. However, they have &lt;a href=&quot;http://arduino.cc/en/Reference/Libraries&quot; rel=&quot;nofollow&quot;&gt;many specific libraries&lt;/a&gt; that extend the standard API's functionality. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The Arduino board can also be used with any other AVR library&lt;/strong&gt; as long as you understand how to upload your code (either through the bootloader or a programmer), so it is definitely a dev board worth buying to get started.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="95" LastActivityDate="2012-11-19T11:22:09.613" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="461" PostTypeId="1" CreationDate="2012-11-19T14:04:21.143" Score="11" ViewCount="8283" Body="&lt;p&gt;Whenever I read a text about control (e.g. PID control) it often mentions 'poles' and 'zeros'. What do they mean by that?  What physical state does a pole or a zero describe?&lt;/p&gt;&#xA;" OwnerUserId="40" LastEditorUserId="350" LastEditDate="2012-11-20T15:43:16.130" LastActivityDate="2015-02-27T08:09:07.120" Title="In PID control, what do the poles and zeros represent?" Tags="&lt;control&gt;&lt;pid&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="462" PostTypeId="2" ParentId="461" CreationDate="2012-11-19T16:07:04.057" Score="8" Body="&lt;p&gt;The function $T(\mathbf{x})$ that describes how ones input to a system maps to the output of the system is referred to as a transfer function.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For linear systems the transfer function can be written as $N(\mathbf{x})/D(\mathbf{x})$ where $N$ and $D$ are polynomials, i.e. $$T(\mathbf{x}) = {N(\mathbf{x})\over D(\mathbf{x})}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The zeros of the system are the values of $x$ that satisfy the statement $N(\mathbf{x}) = 0$. In other words they are the roots of the polynomial $N(\mathbf{x})$. As $N(\mathbf{x})$. approaches a zero, the numerator of the transfer function (and therefore the transfer function itself) approaches the value 0.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similarly the poles of the system are the values of $x$ that satisfy the statement $D(\mathbf{x}) = 0$. In other words they are the roots of the polynomial $D(\mathbf{x})$. When $D(\mathbf{x})$ approaches a pole, the denominator of the transfer function approaches zero, and the value of the transfer function approaches infinity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The poles and zeros allow us to understand how a system will react to various inputs. The zeros are interesting for their ability to block frequencies while the poles provide us information about the stability of the system. Generally we plot the poles and zeros in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Complex_plane&quot;&gt;complex plane&lt;/a&gt; and we say a system is &lt;a href=&quot;http://en.wikipedia.org/wiki/BIBO_stability&quot;&gt;bounded-input bounded-output&lt;/a&gt; (BIBO) stable if the poles are located in the left half of the complex plane (LHP - Left Half Plane). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, when we design a controller we are in effect manipulating it's poles and zeros so as to achieve specific design parameters.&lt;/p&gt;&#xA;" OwnerUserId="177" LastEditorUserId="177" LastEditDate="2012-11-19T19:44:50.687" LastActivityDate="2012-11-19T19:44:50.687" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="463" PostTypeId="1" CreationDate="2012-11-19T18:02:23.310" Score="4" ViewCount="808" Body="&lt;p&gt;We are trying to power &lt;a href=&quot;http://www.e-fliterc.com/Products/Default.aspx?ProdID=EFLM3032DFA&quot; rel=&quot;nofollow&quot;&gt;this motor&lt;/a&gt; with &lt;a href=&quot;http://www.coolcomponents.co.uk/catalog/vnh2sp30-motor-driver-carrier-md01b-p-228.html&quot; rel=&quot;nofollow&quot;&gt;this motor driver&lt;/a&gt; , using a 11.1V 2.2Ah lithium-ion polymer battery.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(We're in over our heads with this and really need the help) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;We checked with the company (E-flite) and the motor is definitely DC -- we're a bit confused as to the purpose of three wires, and how we should connect them to the motor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help would be appreciated.&lt;/p&gt;&#xA;" OwnerUserId="459" LastEditorUserId="126" LastEditDate="2012-11-19T19:57:07.187" LastActivityDate="2012-11-19T19:57:07.187" Title="Connecting a 6 pole motor to a motor driver?" Tags="&lt;brushless-motor&gt;&lt;driver&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="464" PostTypeId="2" ParentId="463" CreationDate="2012-11-19T18:28:06.333" Score="2" Body="&lt;p&gt;The motor you have there is a Brushless DC motor. It's still technically a DC motor, but you won't be able to drive it by plugging it into a battery, or even into the driver you linked to. You need a driver specifically for brushless motors that can drive all three wires correctly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/Npsce.gif&quot; alt=&quot;Brushless motor driver]&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Something like this &lt;a href=&quot;http://www.coolcomponents.co.uk/catalog/electronic-speed-controller-p-716.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Electronic Speed Controller&lt;/a&gt; will drive it pretty well:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/LH5yo.jpg&quot; alt=&quot;Electronic speed controller&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You connect the motor to the 3 wires, and the power to the two wires. The little 3-wire connector normally goes to a Radio Control (RC) receiver, plugging into the servo socket. It accepts a PWM signal just like a normal servo.&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2012-11-19T18:28:06.333" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="465" PostTypeId="2" ParentId="416" CreationDate="2012-11-19T18:44:02.960" Score="10" Body="&lt;p&gt;As Rocketmagnet mentioned, just because a motor is rated at 2.5 W doesn't mean it will be pulling 2.5 W &lt;em&gt;all the time&lt;/em&gt;. Most robots have at most 1 or 2 servos that are running at full power at any one time; the rest have very low mechanical loads (and therefore pull much less electrical power) or are &quot;off&quot; and therefore pull practically zero electrical power.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This leads to 2 very different approaches to power supplies:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Tethered robots and desktop computers use a power supply and heat-sinks that can handle the maximum possible worst-case power draw --&#xA;when everything pulls the maximum power at the same time.&#xA;27 servos * 2.5 W @ 5V requires a 5 VDC and at least 14 A power supply&#xA;(or perhaps several 5 VDC supplies that add up to at least 14 A).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Autonomous robots and modern laptops use a power supply and heat-sinks that can handle some &lt;a href=&quot;http://en.wikipedia.org/wiki/thermal_design_power&quot; rel=&quot;nofollow noreferrer&quot;&gt;thermal design power&lt;/a&gt;.&#xA;Some human arbitrarily picks some the TDP, which is much smaller than the worst-case power, but somewhat above the power required in &quot;typical situations&quot;.&#xA;Then the power supply is designed so it can handle any load from 0 to &lt;em&gt;slightly above&lt;/em&gt; the TDP.&#xA;And the rest of the system is designed so it &lt;em&gt;never exceeds&lt;/em&gt; the TDP --&#xA;except perhaps for a few milliseconds.&#xA;The simplest approach is to have something that measures the total current draw --&#xA;then when the current exceeds the TDP, assume that things have already gone horribly wrong, and shut everything down for a few seconds.&#xA;More sophisticated approaches measure the current of each motor individually:&#xA;When some motor stalls, &quot;limp mode&quot; kills the power to that one motor,&#xA;so the robot continues to use the other motors at full power.&#xA;When lots of motors pull a total current that is too high,&#xA;&quot;tired mode&quot; reduces the power to all the motors&#xA;so the robot continues to use all the motors at a slower speed.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;5 V fuses?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You could install one big 14 A fuse. Or you could install 27 individual 0.5 A fuses, one in the +5V power line of each motor. Or both. You'll probably find it easier to find &quot;12 V&quot; or &quot;250 V&quot; fuses, which will work just fine in your application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are many cheap polyfuses available (designed to protect 5V USB ports from excessive current). Alas, polyfuses take several seconds to &quot;blow&quot; -- too late to protect stuff from permanent damage, but quick enough to keep stuff from heating up, catching on fire, and burning down your house.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;possibly related:&#xA;&lt;a href=&quot;https://electronics.stackexchange.com/questions/44845/how-to-do-a-simple-overcurrent-protection-circuit-breaker-circuit-for-12v-1-2a&quot;&gt;How to do a simple overcurrent protection/circuit breaker circuit for 12V 1-2A?&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;convert 12 V to 5 V&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Most people using servo motors use an off-the-shelf DC-DC converter to convert whatever voltage the batteries supply to the 5V required by the servos.&lt;a href=&quot;http://www.societyofrobots.com/schematics_powerregulation.shtml&quot; rel=&quot;nofollow noreferrer&quot;&gt;(c)&lt;/a&gt;&#xA;I see that &lt;em&gt;some&lt;/em&gt; 18650 battery box (&lt;a href=&quot;http://www.aliexpress.com/item/Free-Shipping-DIY-2A-5V-Mobile-Power-Supply-USB-Battery-Charger-18650-Box-with-voltage-meter/654255654.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;a&lt;/a&gt;) include a little DC-DC converter to convert the battery power to 5 VDC &quot;USB battery charger&quot;.&#xA;(A few people use servomotors designed to be connected directly to 12 VDC. &lt;a href=&quot;http://www.pololu.com/catalog/product/1390/specs&quot; rel=&quot;nofollow noreferrer&quot;&gt;a&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many DC-DC converters are set up so that they never pull more than some maximum current from the battery -- when the motor connected to their output stalls, the converter switches to a &quot;constant-current&quot; mode at some lower output voltage, pulling &lt;em&gt;less&lt;/em&gt; power from the batteries.&#xA;If you put such a DC-DC converter on each servo, it automatically goes into and comes out of &quot;limp mode&quot; appropriately.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;batteries&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&quot;Selecting the proper battery for your robot&quot; &lt;a href=&quot;http://letsmakerobots.com/node/28427&quot; rel=&quot;nofollow noreferrer&quot;&gt;(a)&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;Robot batteries&quot; &lt;a href=&quot;http://www.backyardrobots.com/parts/parts.shtml&quot; rel=&quot;nofollow noreferrer&quot;&gt;(b)&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;Batteries I use in my Robotics&quot; &lt;a href=&quot;http://robosapienv2-4mem8.page.tl/Batteries.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;(c)&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;etc.&#xA;&lt;a href=&quot;http://www.societyofrobots.com/batteries.shtml&quot; rel=&quot;nofollow noreferrer&quot;&gt;a&lt;/a&gt;&#xA;&lt;a href=&quot;http://www.robotmarketplace.com/products/battery_build_main.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;b&lt;/a&gt;&#xA;&lt;a href=&quot;http://www.protechrobotics.com/products.php?cat=39&quot; rel=&quot;nofollow noreferrer&quot;&gt;c&lt;/a&gt;&#xA;&lt;a href=&quot;http://www.terrorhurtz.com/a123/&quot; rel=&quot;nofollow noreferrer&quot;&gt;d&lt;/a&gt;&#xA;&lt;a href=&quot;http://www.seattlerobotics.org/encoder/200210/lithiumion.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;e&lt;/a&gt;&#xA;&lt;a href=&quot;http://www.batteryspace.com/robotbatteries.aspx&quot; rel=&quot;nofollow noreferrer&quot;&gt;f&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="187" LastEditorUserId="-1" LastEditDate="2017-04-13T12:33:08.317" LastActivityDate="2012-11-20T15:45:35.247" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="466" PostTypeId="2" ParentId="128" CreationDate="2012-11-19T22:52:43.610" Score="0" Body="&lt;p&gt;Yes, assuming the hardware resources can meet the timing requirements (enough processing power, low enough latency), when the scheduler can not sequence processes and threads appropriately, then one uses a real-time scheduler, usually attached to a kernel specifically optimized for the challenges of this. Hardware drivers can also be optimized for real-time conditions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yes, if ones software cannot be guaranteed to do it's job in the required time constraints, then one uses real-time approaches.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2012-11-19T22:52:43.610" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="467" PostTypeId="2" ParentId="331" CreationDate="2012-11-20T00:59:16.667" Score="3" Body="&lt;p&gt;I found out the problem was with the serial communication card..I connected the robot through the direct PC com port 2. It was working fine&lt;/p&gt;&#xA;" OwnerUserId="377" LastActivityDate="2012-11-20T00:59:16.667" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="468" PostTypeId="2" ParentId="277" CreationDate="2012-11-20T04:40:49.590" Score="9" Body="&lt;p&gt;You could use particle filters as well. For the basic intro to Particle Filters, you could have a look at Professor Thrun's videos in Programming a Robotic Car.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=H0G1yslM5rc&quot;&gt;http://www.youtube.com/watch?v=H0G1yslM5rc&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=QgOUu2sUDzg&quot;&gt;http://www.youtube.com/watch?v=QgOUu2sUDzg&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Particle filters are more robust and have a far lesser probability of the loop closure error, which commonly occurs while implementing an EKF.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The videos describe the functioning of a particle filter.&lt;/p&gt;&#xA;" OwnerUserId="333" LastEditorUserId="333" LastEditDate="2012-11-20T10:17:06.440" LastActivityDate="2012-11-20T10:17:06.440" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="469" PostTypeId="1" AcceptedAnswerId="490" CreationDate="2012-11-20T04:54:02.230" Score="6" ViewCount="200" Body="&lt;p&gt;I would like to have a better understanding of work in the field of &quot;Navigation Among Movable Obstacles&quot;. I started off with &lt;a href=&quot;http://www.ri.cmu.edu/pub_files/pub4/stilman_michael_2007_1/stilman_michael_2007_1.pdf&quot; rel=&quot;nofollow&quot;&gt;Michael Stilman's thesis under James Kuffner&lt;/a&gt;, but that has not yet sated my appetite.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am currently trying to simulate a scenario where debris (Tables and Table parts) from a disaster scenario block pathways. The debris forms part of a movable obstacle. The robot which will be used is a bipedal humanoid.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The thesis describes an approach to define the search space of possible actions leading from the start point to the goal. However, it assumes a mobile robot which works via gliding. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think the state space definitions would change for a bi-pedal robot. Why is why I wonder what other work is being done in this field. Perhaps the work of other research groups could give me clues as to how to design and perhaps reduce the search space for a bipedal humanoid robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An implementation of Navigation among Movable Obstacles would also aid me in understanding how to reduce the search space of possible actions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So does anyone know of a working implementation of Navigation among movable obstacles? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any supporting information about other professors or research groups working on similar problems would also be very useful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope this edit is sufficient for the problem description.&lt;/p&gt;&#xA;" OwnerUserId="333" LastEditorUserId="131" LastEditDate="2012-11-21T17:20:54.703" LastActivityDate="2012-11-23T21:06:12.147" Title="Is there a working implementation of &quot;Navigation Among Movable Obstacles&quot; for a bi-pedal robot?" Tags="&lt;navigation&gt;" AnswerCount="1" CommentCount="10" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="471" PostTypeId="2" ParentId="461" CreationDate="2012-11-20T10:43:11.440" Score="5" Body="&lt;p&gt;These polynomial transfer functions occur, when you perform a &lt;em&gt;Laplace transform&lt;/em&gt; on some linear differential equation which either actually describes your robot or is the result of &lt;em&gt;linearizing&lt;/em&gt; the robot's dynamics at some desired state. Think of it like a &quot;Taylor expansion&quot; around that state. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Laplace transform is the generalization of the Fourier transform to functions which are not periodic. In electrical engineering, the Laplace transform is interpreted as the representation of the system in the &lt;em&gt;frequency domain&lt;/em&gt;, i.e. it describes, how the system transmits any frequencies from the input signal. Zeros then describe frequencies that don't get transmitted. And as already mentioned by DaemonMaker, poles are important when considering the system's stability: The transfer function of the system goes to infinity near the poles. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What they mean in a control context:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Poles&lt;/strong&gt;: They tell you, if a system (that can also be a new system, in which you have inserted a feedback loop with a control law) is stable or not. Usually you want a system to be stable. So, you want all the poles of the system to be in the left half plane (i.e. the real parts of the poles must be smaller than zero). The poles are the &lt;em&gt;eigenvalues of your system matrix&lt;/em&gt;. How far they are on the left half-plane tells you how fast the system converges to it's resting state. The further they are away from the imaginary axis, the faster the system converges.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Zeros&lt;/strong&gt;: They can be convenient if you have a pole on the right half plane or still on the left half plane, but too close to the imaginary axis: By clever modification of your system, you can shift the zeros &lt;em&gt;onto your unwanted poles to annihilate them&lt;/em&gt;. &lt;/p&gt;&#xA;" OwnerUserId="422" LastActivityDate="2012-11-20T10:43:11.440" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="472" PostTypeId="1" CreationDate="2012-11-20T12:01:19.523" Score="-5" ViewCount="416" Body="&lt;p&gt;I want to learn robotics and build my first robot. I am looking for a well supported kit that is simple enough and can walk me through, the initial stages of my intellectual pursuit in Robotics. I want to be able to do the basic things first and build a solid foundation in robotics. And then I want to be able to use the solid foundation, to gain confidence in my ability to build new and interesting robotic contraptions. In other words, I want to be able to follow the rules off the game to gain a solid foundation and then once I'm comfortable with what I know, I want to break free of the rules and start making my own robots. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like help with 2 things,&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;I would like to begin my robotics learning with a good kit that can walk me through my initial stages. I expect that this initial stage might take quite a while. So, any recommendations for how I can start and/or what kit I can buy, to get my feet wet, would be helpful.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I would like suggestions for &quot;other&quot; actions I can take, that will set me on a path to gain confidence in my knowledge of robotics.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;A little bit about myself. I have a BS and MS in IT. So I am not new to programming. I like to code in golang and haskell. I do not know if it is possible, but it would be awesome if I can write the software aspect of all my robotic projects in haskell.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="466" LastActivityDate="2012-11-20T12:34:21.650" Title="Humble beginnings" Tags="&lt;kit&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="1" ClosedDate="2012-12-05T21:14:40.790" ContentLicense="CC BY-SA 3.0" />
  <row Id="473" PostTypeId="2" ParentId="472" CreationDate="2012-11-20T12:34:21.650" Score="1" Body="&lt;p&gt;I got drawn into Robotics by a Lego Mindstorms lab course at our university, in which the participants were divided into 2 teams whose robots had to compete against each other in some predefined task. That was shortly before the NXT were introduced. In my experience, a Lego Mindstorms kit is a good way for &quot;software people&quot; to get into Robotics because it doesn't overwhelm you with electronics and manufacturing-related questions when you just want to build e.g. a line follower robot. The NXT kits can also be flased with many different kinds of custom firmware that is available on the Interent. There is also a LabVIEW interface, if i recall correctly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another good starting point may be Arduino boards or anything from this company:&#xA;&lt;a href=&quot;http://www.vexrobotics.com/&quot; rel=&quot;nofollow&quot;&gt;http://www.vexrobotics.com/&lt;/a&gt;&#xA;I used them to order some parts i needed for a mechatronics class project. A Parrot AR drone may also be interesting. Or look for game engines or simulators if you want to stay away from hardware at first.&lt;/p&gt;&#xA;" OwnerUserId="422" LastActivityDate="2012-11-20T12:34:21.650" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="474" PostTypeId="1" AcceptedAnswerId="476" CreationDate="2012-11-20T15:46:48.243" Score="13" ViewCount="945" Body="&lt;p&gt;RS232 is not popular as it used to be and is mainly replaced by USB [&lt;a href=&quot;http://en.wikipedia.org/wiki/RS-232#Role_in_modern_personal_computers&quot; rel=&quot;nofollow noreferrer&quot;&gt;wikipedia&lt;/a&gt;]. Problems such as mentioned in &lt;a href=&quot;https://robotics.stackexchange.com/q/331/158&quot;&gt;this question&lt;/a&gt; doesn't help its reputation either.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a new system design therefore, one could think of using USB instead of Serial Port for communication. However, it still seems like RS232 is the serial communication protocol/port of choice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why is that? I understand changing old machinery that work with RS232 is costly, but what prevents &lt;em&gt;new&lt;/em&gt; system designers from using USB instead of RS232?&lt;/p&gt;&#xA;" OwnerUserId="158" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2015-10-06T23:56:08.393" Title="USB instead of RS232" Tags="&lt;rs232&gt;&lt;usb&gt;" AnswerCount="5" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="475" PostTypeId="2" ParentId="474" CreationDate="2012-11-20T17:15:20.320" Score="9" Body="&lt;p&gt;Simplicity, i guess. A USB implementation (chips and driver software) is usually more complex than good ol' RS232, which can even be found in many 8-bit microcontrollers. While USB has many protocol mechanisms and is designed to deal with many participants over a bus, a RS232 connection doesn't have any of that. Instead, it's the &quot;rawest&quot; form possible of sending bytes over a wire.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although Arduino and increasing spread of USB-to-serial adapters show promise that USB will eventually become as dominant as RS232 used to be.&lt;/p&gt;&#xA;" OwnerUserId="422" LastActivityDate="2012-11-20T17:15:20.320" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="476" PostTypeId="2" ParentId="474" CreationDate="2012-11-20T17:22:01.290" Score="12" Body="&lt;p&gt;At least in the microcontroller level:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Serial ports (usually TTL or LVTTL) are still the most common way to communicate, since most simple microcontrollers don't have a USB controller.&lt;/p&gt;&#xA;&lt;p&gt;For instance: most 8-bit AVR or PIC microcontrollers don't have USB, a few 32-bit ARM microcontrollers do, but they all usually have serial ports.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Conversion from TTL/LVTTL serial communication to RS-232 requires a &amp;quot;simple&amp;quot; logic level conversion, which can be done with very cheap ICs (MAX232/MAX3232)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Conversion from TTL/LVTTL serial communication to USB when your microcontroller does not have a USB controller usually requires using a slightly more expensive IC (FTDI) which does not have any through-hole packaging options, only surface mount.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;There are a few details relative to the protocol one has to pay attention to when using USB devices in general, such as the current level it may request from the USB host. With serial ports, you only have to worry about 3 to 5 fixed parameters that have to be consistent in your system (baudrate, # of stop bits, parity, etc).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="95" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2012-11-22T15:31:14.560" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="477" PostTypeId="2" ParentId="474" CreationDate="2012-11-21T10:40:21.363" Score="5" Body="&lt;p&gt;I think the biggest reason that RS232 has stayed around is the simplicity in implementing common use-cases in embedded hardware - like sending a sequence ASCII bytes between two devices for control. The use-cases for sending information at the much higher speeds available with USB are not worth the trade-off in complexity caused by implementing &lt;a href=&quot;http://en.wikipedia.org/wiki/Universal_Serial_Bus#Signaling&quot;&gt;the USB protocol's signalling&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As the requirements for higher speeds appear, I wouldn't be surprised if &lt;a href=&quot;http://en.wikipedia.org/wiki/RS-485&quot;&gt;RS-485&lt;/a&gt; became more common with it's very simple physical interface and high (up to 10Mb/s) data rates.&lt;/p&gt;&#xA;" OwnerUserId="435" LastActivityDate="2012-11-21T10:40:21.363" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="478" PostTypeId="1" AcceptedAnswerId="670" CreationDate="2012-11-21T10:59:55.920" Score="9" ViewCount="761" Body="&lt;p&gt;As an industrial roboticist I spent most of my time working with robots and machines which used brushless DC motors or linear motors, so I have lots of experience tuning PID parameters for those motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I'm moving to doing hobby robotics using stepper motors (I'm building my first &lt;a href=&quot;http://tvrrug.org.uk/&quot;&gt;RepRap&lt;/a&gt;), I wonder what I need to do differently. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously without encoder feedback I need to be much more conservative in requests to the motor, making sure that I always keep within the envelope of what is possible, but how do I find out whether my tuning is optimal, sub optimal or (worst case) marginally unstable?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously for a given load (in my case the extruder head) I need to generate step pulse trains which cause a demanded acceleration and speed that the motor can cope with, without missing steps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My first thought is to do some test sequences, for instance:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Home motor precisely on it's home sensor.&lt;/li&gt;&#xA;&lt;li&gt;Move $C$ steps away from home slowly.&lt;/li&gt;&#xA;&lt;li&gt;Move $M$ steps away from home with a conservative move profile.&lt;/li&gt;&#xA;&lt;li&gt;Move $N$ steps with the test acceleration/speed profile.&lt;/li&gt;&#xA;&lt;li&gt;Move $N$ steps back to the start of the test move with a conservative move profile.&lt;/li&gt;&#xA;&lt;li&gt;Move $M$ steps back to home with a conservative move profile.&lt;/li&gt;&#xA;&lt;li&gt;Move $C$ steps back to the home sensor slowly, verifying that the sensor is triggered at the correct position.&lt;/li&gt;&#xA;&lt;li&gt;Repeat for a variety of $N$, $M$, acceleration/speed &amp;amp; load profiles.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This should reliably detect missed steps in the test profile move, but it does seem like an awfully large space to test through however, so I wonder what techniques have been developed to optimise stepper motor control parameters.&lt;/p&gt;&#xA;" OwnerUserId="37" LastActivityDate="2012-12-13T00:00:38.803" Title="How can I optimise control parameters for a stepper motor?" Tags="&lt;control&gt;&lt;stepper-motor&gt;&lt;tuning&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="479" PostTypeId="1" AcceptedAnswerId="481" CreationDate="2012-11-21T15:36:22.960" Score="25" ViewCount="26224" Body="&lt;p&gt;I understand the basic principle of a particle filter and tried to implement one. However, I got hung up on the resampling part. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Theoretically speaking, it is quite simple: From the old (and weighted) set of particles, draw a new set of particles with replacement. While doing so, favor those particles that have high weights. Particles with high weights get drawn more often and particles with low weights less often. Perhaps only once or not at all. After resampling, all weights get assigned the same weight.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My first idea on how to implement this was essentially this:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Normalize the weights&lt;/li&gt;&#xA;&lt;li&gt;Multiply each weight by the total number of particles&lt;/li&gt;&#xA;&lt;li&gt;Round those scaled weights to the nearest integer (e.g. with &lt;code&gt;int()&lt;/code&gt; in Python)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Now I should know how often to draw each particle, &lt;em&gt;but&lt;/em&gt; due to the roundoff errors, I end up having &lt;em&gt;less particles&lt;/em&gt; than before the resampling step. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Question: How do I &quot;fill up&quot; the missing particles in order to get to the same number of particles as before the resampling step? Or, in case I am completely off track here, how do I resample correctly?&lt;/p&gt;&#xA;" OwnerUserId="422" LastEditorUserId="127" LastEditDate="2012-11-22T10:54:06.150" LastActivityDate="2017-10-08T12:24:19.933" Title="Particle filters: How to do resampling?" Tags="&lt;localization&gt;&lt;particle-filter&gt;" AnswerCount="5" CommentCount="0" FavoriteCount="13" ContentLicense="CC BY-SA 3.0" />
  <row Id="480" PostTypeId="2" ParentId="479" CreationDate="2012-11-21T17:29:56.173" Score="6" Body="&lt;p&gt;For an example of python code that properly implements resampling, you might find this github project to be useful:&#xA;&lt;a href=&quot;https://github.com/mjl/particle_filter_demo&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/mjl/particle_filter_demo&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Plus, it comes with its own visual representation of the resampling process, that should help you debug your own implementation.&#xA;&lt;img src=&quot;https://i.stack.imgur.com/YylQT.gif&quot; alt=&quot;Particle filter operation&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this visualization, the green turtle shows the actual position, the large grey dot shows the estimated position and turns green when it converges.  The weight goes from likely (red) to unlikely (blue).&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2012-11-26T16:12:03.137" LastActivityDate="2012-11-26T16:12:03.137" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="481" PostTypeId="2" ParentId="479" CreationDate="2012-11-21T17:30:15.313" Score="21" Body="&lt;p&gt;The issue you're running into is often referred to as sample impoverishment. We can see why your approach suffers from it with a fairly simple example. Let's say you have 3 particles and their normalized weights are 0.1, 0.1, 0.8. Then multiplying by each weight by the 3 yields 0.3, 0.3, and 2.4. Then rounding yields 0, 0, 2. This means you would not pick the first two particles and the last one would be picked twice. Now you are down to two particles. I suspect this is what you have been seeing when you say &quot;due to the roundoff errors, I end up having less particles.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An alternative selection method would be as follows.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Normalize weights.&lt;/li&gt;&#xA;&lt;li&gt;Calculate an array of the cumulative sum of the weights.&lt;/li&gt;&#xA;&lt;li&gt;Randomly generate a number &amp;amp; determine which range in that cumulative weight array to which the number belongs.&lt;/li&gt;&#xA;&lt;li&gt;The index of that range would correspond to the particle that should be created.&lt;/li&gt;&#xA;&lt;li&gt;Repeat until you have the desired number of samples.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;So, using the example above we would start with the normalized weights. We would then calculate the array [0.1, 0.2, 1]. From there we calculate 3 random numbers say 0.15, 0.38, and 0.54. This would have us pick the second particle once and the third particle twice. The point is that it gives the smaller particles a chance to propagate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One thing to note is that while this method will deal with impoverishment it can lead to a suboptimal solutions. For instance, it may be that none of the particles really match your given location well (assuming you're using this for localization). The weights only tell you which particles match best, not the quality of the match. As such when you take additional readings and repeat the process you may find that all your particles group at a single location that is not the correct location. This is usually because there were no good particles to start. &lt;/p&gt;&#xA;" OwnerUserId="177" LastEditorUserId="350" LastEditDate="2012-11-25T21:19:02.897" LastActivityDate="2012-11-25T21:19:02.897" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="482" PostTypeId="2" ParentId="39" CreationDate="2012-11-21T19:04:51.070" Score="4" Body="&lt;p&gt;More driver details:&lt;/p&gt;&#xA;&lt;p&gt;OpenNI or freenect can be used with the Xtion and the XBox Kinect.&lt;/p&gt;&#xA;&lt;p&gt;The &amp;quot;Kinect for Windows&amp;quot; requires the Microsoft SDK and drivers. However, there is also a bridge to go from the MSSDK drivers to OpenNI: &lt;a href=&quot;http://code.google.com/p/kinect-mssdk-openni-bridge/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://code.google.com/p/kinect-mssdk-openni-bridge/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Also, the latest version of the Kinect for Windows (&amp;gt;=1.5) has a &lt;a href=&quot;https://web.archive.org/web/20151121055352/http://blogs.msdn.com:80/b/kinectforwindows/archive/2012/01/20/near-mode-what-it-is-and-isn-t.aspx&quot; rel=&quot;nofollow noreferrer&quot;&gt;near mode&lt;/a&gt; that allows for better operation close to the device, this may be of use depending on the application. I do not believe the Xtion has this mode.&lt;/p&gt;&#xA;&lt;p&gt;The XBox Kinect and Kinect for Windows appear to have different USB interfaces, so you have to use the right set of drivers depending on which one you have.&lt;/p&gt;&#xA;" OwnerUserId="479" LastEditorUserId="15160" LastEditDate="2021-01-09T17:50:11.940" LastActivityDate="2021-01-09T17:50:11.940" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="483" PostTypeId="1" CreationDate="2012-11-22T06:56:45.117" Score="8" ViewCount="1958" Body="&lt;p&gt;What are some good strategies to follow while designing power supply for electrical systems on mobile robots?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Such robots typically comprise of systems with&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;microprocessor, microcontroller, DSP, etc units and boards along with immediate peripherals&lt;/li&gt;&#xA;&lt;li&gt;Motor control &lt;/li&gt;&#xA;&lt;li&gt;Analog Sensors(proximity, audio, voltage, etc)&lt;/li&gt;&#xA;&lt;li&gt;Digital Sensors (Vision, IMU, and other exotica)&lt;/li&gt;&#xA;&lt;li&gt;Radio comm circuits (Wifi, Bluetooth, Zigbee, etc)&lt;/li&gt;&#xA;&lt;li&gt;Other things more specific to the purpose of the robot being designed.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Are there unified approaches/architectural rules to designing power systems which can manage clean power supply to all these various units which may be distributed across boards, without issues of interference, common ground, etc? Furthermore, also including aspects of redundancy, failure management, and other such 'power management/monitoring' features?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;well explained examples of some such existing power systems on robots would make for excellent answers.&lt;/p&gt;&#xA;" OwnerUserId="222" LastEditorUserId="222" LastEditDate="2012-11-22T07:55:24.433" LastActivityDate="2015-05-19T14:16:18.240" Title="Strategies for managing power on electrical systems for mobile robots" Tags="&lt;mobile-robot&gt;&lt;electronics&gt;" AnswerCount="5" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="484" PostTypeId="2" ParentId="479" CreationDate="2012-11-22T10:49:18.167" Score="11" Body="&lt;p&gt;As I guess you found out yourself, the resampling method you are proposing is slightly flawed, as it should not alter the number of particles (unless you want to). The principle is that the weight represents the relative probability with respect to the other particles. In the resampling step, you draw from the set of particles such that for each particle, the normalized weight times the number of particles represents the number of times that particle is drawn on average. In that your idea is correct. Only by using rounding instead of sampling, you will always eliminate particles for which the expected value is less than half. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are a number of ways to perform the resampling properly. There is a nice paper called &lt;a href=&quot;http://users.isy.liu.se/rt/schon/Publications/HolSG2006.pdf&quot;&gt;On resampling algorithms for particle filters&lt;/a&gt;, comparing the different methods. Just to give a quick overview:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Multinomial resampling: imagine a strip of paper where each particle has a section, where the length is proportional to its weight. Randomly pick a location on the strip N times, and pick the particle associated with the section.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Residual resampling: this approach tries to reduce the variance of the sampling, by first allocating each particle their integer floor of the expected value, and leave the rest to multinomial resampling. E.g. a particle with an expected value of 2.5 will have 2 copies in the resampled set and another one with an expected value of 0.5.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Systematic resampling: take a ruler with regular spaced marks, such that N marks are the same length as your strip of paper. Randomly place the ruler next to your strip. Take the particles at the marks.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Stratified resampling: same as systematic resampling, except that the marks on the ruler are not evenly placed, but added as N random processes sampling from the interval 0..1/N.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So to answer your question: what you have implemented could be extended to a form of residual sampling. You fill up the missing slots by sampling based on a multinonmial distribution of the reminders.&lt;/p&gt;&#xA;" OwnerUserId="127" LastEditorUserId="127" LastEditDate="2012-11-22T11:02:59.407" LastActivityDate="2012-11-22T11:02:59.407" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="485" PostTypeId="2" ParentId="483" CreationDate="2012-11-22T11:47:46.667" Score="3" Body="&lt;p&gt;I don't know any &quot;rules&quot;, but for complex bots, I create separate &quot;power&quot; unit. It basically consists of the battery, as well as some 7805s/7809s. The 78xx series takes a 12V input and gives an xx V output. Most ICs work well on 5V, and an Arduino needs 9V, so that's what I end up using (Note: the 5V/3V output pins on the Arduino are &lt;em&gt;not&lt;/em&gt; really meant to be used much. They don't supply much power, so it's best to have a separate 5V line for your circuitry).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After this, I connect all components in parallel to their respective power pins. It is generally beneficial to power the motor with a separate source (common ground). The motor draws the most current, so the simple act of stopping/slowing a motor can send fluctuations throughout the circuit. If you don't want to do this, at least add &lt;a href=&quot;http://www.seattlerobotics.org/encoder/jun97/basics.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;bypass capacitors&lt;/a&gt; to the motor and the power inputs(Vcc/Gnd) of logic circuits (see &lt;a href=&quot;https://robotics.stackexchange.com/questions/267/why-are-capacitors-added-to-motors-in-parallel-what-is-their-purpose&quot;&gt;here&lt;/a&gt; for more on how they work). These solve quite a few interference issues.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to be a bit more sophisticated, you can add zener diodes to the power outputs. Never had to do this myself, but it's apparently a good way of &quot;rationing out&quot; power. There also are &quot;constant current diodes&quot; that you can use--though I've never even seen one of those.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For redundancy, the most you can do (for DC) is put two batteries in parallel and maybe send power to components by different physical routes. Take note of the &quot;physical&quot; there--the placement of the wires may be different (and they may attach do different parts of the board), but the overall circuit should remain unchanged. The reason behind doing this is that not doing this right may lead to power pins being shorted-- two logically separate 5V outputs shouldn't be shorted together, they won't be exactly the same and you'll probably have some heating/leakage.&lt;/p&gt;&#xA;" OwnerUserId="126" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2012-11-22T12:20:02.423" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="488" PostTypeId="1" CreationDate="2012-11-23T19:01:14.153" Score="5" ViewCount="198" Body="&lt;p&gt;Is it possible to use the Matlab's &lt;code&gt;system&lt;/code&gt; function to call ROS commands?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, using &lt;code&gt;system('rostopic pub /cmd_vel geometry.msgs.Twist {....}&lt;/code&gt;&#xA;or &lt;code&gt;system('rospack find ipc_bridge)&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm trying to send some commands to ROS without using something like IPC-Bridge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS: I know, however, that I need to use IPC-Bridge to subscribe to topics.&lt;/p&gt;&#xA;" OwnerUserId="483" LastEditorDisplayName="user10072" LastEditDate="2017-05-18T15:52:57.087" LastActivityDate="2017-05-18T15:52:57.087" Title="Is it possible to use Matlab &quot;system&quot; function to call ROS commands?" Tags="&lt;mobile-robot&gt;&lt;software&gt;&lt;ros&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="489" PostTypeId="2" ParentId="488" CreationDate="2012-11-23T19:10:12.973" Score="3" Body="&lt;p&gt;This is possible. But it is very sloppy, in my humble opinion. It is useful for one-off commands, but how will you read back output, verify your command was executed, etc. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are dead-set against the IPC bridge, you may want to look at using the &lt;a href=&quot;http://www.mathworks.com/help/matlab/matlab_external/product-overview.html&quot; rel=&quot;nofollow&quot;&gt;MATLAB-java interface&lt;/a&gt;. ROS also allows you to program in Java using ros-fuerte-client-rosjava (ubuntu), or just &lt;a href=&quot;http://www.ros.org/wiki/rosjava&quot; rel=&quot;nofollow&quot;&gt;rosjava&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="163" LastActivityDate="2012-11-23T19:10:12.973" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="490" PostTypeId="2" ParentId="469" CreationDate="2012-11-23T21:06:12.147" Score="2" Body="&lt;p&gt;Speaking about navigation among moving obstacles, look at Jur van den Berg thesis. Also Lavalle provided a tutorial at ICRA12 &lt;a href=&quot;http://msl.cs.uiuc.edu/~lavalle/icra12/&quot; rel=&quot;nofollow&quot;&gt;http://msl.cs.uiuc.edu/~lavalle/icra12/&lt;/a&gt; and the videos are here &lt;a href=&quot;http://techtalks.tv/events/105/&quot; rel=&quot;nofollow&quot;&gt;http://techtalks.tv/events/105/&lt;/a&gt; but neither mention the problem of bipeds.&lt;/p&gt;&#xA;" OwnerUserId="484" LastActivityDate="2012-11-23T21:06:12.147" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="491" PostTypeId="2" ParentId="445" CreationDate="2012-11-24T00:03:25.917" Score="3" Body="&lt;p&gt;So the stereo image processing algorithms I have used in the past were implemented pixel by pixel. We just used the pinhole camera model and did some old fashioned measurements with measuring tape until our depth estimations matched the real thing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The equations for a pair of parallel cameras are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;$d = $half the distance between the cameras&lt;/li&gt;&#xA;&lt;li&gt;$f = $the focal length of the cameras (assumed to be the same)&lt;/li&gt;&#xA;&lt;li&gt;Coordinate Frames: &#xA;&lt;ul&gt;&#xA;&lt;li&gt;$x, y, z = $ coordinate frame between the cameras (i.e. the camera base frame)&lt;/li&gt;&#xA;&lt;li&gt;$u_R, v_R$ camera coordinates in the right camera from the perspective of the robot (u is horizontal, v is vertical)&lt;/li&gt;&#xA;&lt;li&gt;$u_L, v_L$ camera coordinates in the left camera &lt;/li&gt;&#xA;&lt;li&gt;Note: the camera coordinates have their origins at the coordinate frame between the cameras (i.e. the u axes face opposite directions)&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;$u_L = \frac{f(x-d)}{z}$, $u_R = \frac{f(x+d)}{z}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$zu_R = f(x+d)$, $zu_L = f(x-d)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$z(u_R - u_L) = 2df$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$z = \frac{2df}{u_R - u_L}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$y = \frac{v_L*z + df}{f}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$x = \frac{u_L*z + df}{f}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using these equations you can compute a dense stereo cloud.  One for each pixel on your cameras.&lt;/p&gt;&#xA;" OwnerUserId="485" LastActivityDate="2012-11-24T00:03:25.917" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="492" PostTypeId="2" ParentId="167" CreationDate="2012-11-24T05:05:53.153" Score="5" Body="&lt;p&gt;&lt;strong&gt;System modeling&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course experimental tuning can be done as mentioned in the other answers, but if you are able to define a reasonable dynamic model for whatever you want to control and are able to &lt;a href=&quot;http://en.wikipedia.org/wiki/System_identification&quot; rel=&quot;noreferrer&quot;&gt;identify its parameters&lt;/a&gt;, you should be able to design your controller based on well-defined criteria such as &lt;a href=&quot;http://en.wikipedia.org/wiki/Overshoot_%28signal%29&quot; rel=&quot;noreferrer&quot;&gt;overshoot&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Rise_time&quot; rel=&quot;noreferrer&quot;&gt;rise time&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Settle_time&quot; rel=&quot;noreferrer&quot;&gt;settling time&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Steady_state_%28electronics%29&quot; rel=&quot;noreferrer&quot;&gt;steady-state&lt;/a&gt; error and so on. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are even &lt;a href=&quot;http://www.mathworks.com/help/control/ref/pidtool.html&quot; rel=&quot;noreferrer&quot;&gt;tools in MATLAB&lt;/a&gt; that are able to tune your controller to optimize for a combination of these criteria, which makes it even better to use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Know your controller&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Learning what each parameter in the PID controller does is quite helpful as well. All the experimental algorithms are based on this kind of knowledge somehow. If you not only follow instructions, but are able to get that feeling yourself, you may find it easier to tune your controller manually.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Real world problems&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a chance one of these things, among others, will get on your way when tuning your controller: &lt;a href=&quot;http://en.wikipedia.org/wiki/Integral_windup&quot; rel=&quot;noreferrer&quot;&gt;windup&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Nyquist_frequency&quot; rel=&quot;noreferrer&quot;&gt;inadequate sampling rate&lt;/a&gt;, &lt;a href=&quot;http://wikis.controltheorypro.com/index.php?title=Saturation&quot; rel=&quot;noreferrer&quot;&gt;saturation&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the end, it all depends on what you can actually do with your system to get some knowledge about how it works and what kind of experimentation can be done. The best thing is to actually learn more about PID controllers and control theory in general, IMO, but I'm biased :)&lt;/p&gt;&#xA;" OwnerUserId="95" LastActivityDate="2012-11-24T05:05:53.153" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="493" PostTypeId="2" ParentId="277" CreationDate="2012-11-24T05:10:03.493" Score="9" Body="&lt;p&gt;A Kalman Filter is an algorithm that is commonly used in UAVs to fuse multiple sensor measurements together to provide an &quot;optimal&quot; estimate of the position and/or orientation of the UAV.  For example, a Kalman Filter can fuse accelerometer, gyro and magnetometer measurements with a velocity estimate to estimate the UAV's yaw, pitch and roll.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For more information on the sensors and algorithms used in UAV state estimation, try the stand-alone article &lt;a href=&quot;http://www.jhuapl.edu/techdigest/TD/td3102/31_02-Barton.pdf&quot;&gt;Fundamentals of Small Unmanned Aircraft Flight&lt;/a&gt;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The article also links to accompanying Matlab code implementing the described Kalman Filter UAV state estimation algorithms.&lt;/p&gt;&#xA;" OwnerUserId="486" LastActivityDate="2012-11-24T05:10:03.493" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="494" PostTypeId="1" AcceptedAnswerId="495" CreationDate="2012-11-24T10:28:54.920" Score="5" ViewCount="10485" Body="&lt;p&gt;I'm interested to build Robot from my imagination, and I was looking to purchase a robotic kit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I find the Lego Mindstorm NXT 2.0 really interesting for many reasons : You can plug whatever brick you want, and you can develop in the language you want.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am a developer, and the use of this kind of robotic would be interaction mostly (not moving, so the servo motors are useless to me, at least now).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But regarding the spec of the NXT main component, I feel it's a bit low (proc, ram &amp;amp; rom).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That made me wonder if any of you know something similar (where I can plug whatever I want on it, and most importantly, program the reaction), but with a more powerful hardware ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Price will also be a limitation : I like the NXT also because I can build what I want under 300 USD. I don't want to spend 10k USD on my first kit, but I would appreciate buying a better piece of robotic if the price isn't too distant from the NXT's.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do you have some alternatives to check out ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks for your help !  :)&lt;/p&gt;&#xA;" OwnerUserId="488" LastEditorUserId="488" LastEditDate="2012-11-24T12:12:50.780" LastActivityDate="2013-03-11T16:44:48.730" Title="More powerful alternatives to Lego Mindstorm NXT 2.0?" Tags="&lt;nxt&gt;" AnswerCount="5" CommentCount="3" FavoriteCount="5" ClosedDate="2013-03-12T13:16:45.653" ContentLicense="CC BY-SA 3.0" />
  <row Id="495" PostTypeId="2" ParentId="494" CreationDate="2012-11-24T11:28:24.697" Score="4" Body="&lt;p&gt;I do not think you will find ANY kit better than the NXT 2.0.  You may find components, and be able to piece together your own Robot, but there is nothing available as a kit that I know of in that price range (which BTW is $230 at walmart at the moment, pretty good deal). I also do not understand how you are planning to do very much without using servos. A robot that has no movement at all is pretty boring, and more like a refrigerator than a robot. The use of servos is IMHO an important part of robotics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Exactly what is &quot;a more powerful &quot;AI&quot;'? As a developer, I would not have expected that type of question. Are you sure an NXT does not have enough AI for your current robotic experience? Personally, short of some neural network stuff, I have never exceeded capacity with an NXT, and I was able to size that down and make it workable. Learning to be efficient is part process.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The NXT also open up great opportunities in mechanical design as well as pure robotics. There is plenty to keep anyone busy for quite a while, until college at least, then you step up to $1/2million dollar PR2s that someone else paid for.&lt;/p&gt;&#xA;" OwnerUserId="274" LastActivityDate="2012-11-24T11:28:24.697" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="496" PostTypeId="2" ParentId="494" CreationDate="2012-11-24T11:40:34.580" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;but with a more powerful &quot;AI&quot; ?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Firstly, &lt;em&gt;no&lt;/em&gt; robotics kit has any AI built in. AI needs to be tailor-made for the situation, it's not like you &lt;a href=&quot;http://xkcd.com/353/&quot; rel=&quot;nofollow&quot;&gt;&lt;code&gt;import AI&lt;/code&gt;&lt;/a&gt; and everything just... works. You need to program your own AI every time you want a smart bot. That being said, some  AI-related things like image processing can be found prepackaged for use.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Regarding kits, I don't know of there's any such kit that's better than the NXT. For &quot;serious robotics&quot;, such kits will always prove inadequate as they're restrictive in many ways. What I suggest is to start using an Arduino or Raspberry Pi. A Raspberry Pi fits your criteria more--it has a good amount of RAM, and runs Linux--so it's easier to work with (it's pretty much like programming a normal application, except you don't need to create a GUI for the app). It's extremely cheap, costs $25-$35. You can use whatever language you want here, as long as you have something to make the language run on Linux (gcc/python/java--generally these are all built in, though you can easily find APT packages for stuff like ruby). In addition, it's easy to find packages for tasks like image processing/etc. It also has 512MB of RAM, which is good enough unless you want to play Warcraft on it. You do have to get familiar with Linux to use this, though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Arduino's another good (possibly better) option. You can program it in C/C++/Java (and some other languages if you use some third party tools). It is low on RAM, though--you sometimes need to chain two Arduinos in a master-slave configuration to get stuff done. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only issue is, you need to make your own sensors for the Raspberry Pi (sensors for the Arduino exist and some can be found &lt;a href=&quot;http://www.trossenrobotics.com/c/arduino-sensors.aspx&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;. In addition, there is some examples using NXT equipment &lt;a href=&quot;http://www.dexterindustries.com/blog/2013/02/27/connecting-the-arduino-and-the-lego-mindstorms-howto/&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;.) Generally not that hard (for example, a light/dark sensor can be made with a photodiode and resistor), though this is a big shift from the NXT (which was plug-and-play). You'll have to get your own servos and learn how they are controlled, and lots of other little things. You &lt;em&gt;will&lt;/em&gt; have to get your hands dirty with soldering control boards/etc, and you &lt;em&gt;will&lt;/em&gt; have to know a decent amount of electronics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Otherwise you can just continue using the NXT, there are all sorts of premade sensors out there (though custom making your own sensor isn't that easy). &lt;/p&gt;&#xA;" OwnerUserId="126" LastEditorUserId="998" LastEditDate="2013-03-09T11:39:43.197" LastActivityDate="2013-03-09T11:39:43.197" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="497" PostTypeId="1" CreationDate="2012-11-24T12:35:35.347" Score="3" ViewCount="159" Body="&lt;p&gt;I was wondering whether something like this is possible: A block of ice(say) needs to be transferred piece by piece from a source to a destination with the help of 5 robots standing in a straight line between the source and destination. The first robot picks up a piece of the block from the source and checks if the next robot in line is busy. If yes, it waits for it to complete its task and proceeds, otherwise it transfers the piece and goes back to collect another piece. Please help me on implementing this if it is possible, as I am thinking to make it a project topic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;to clear out the confusions, here's a smaller prototype of the project i'm thinking,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;i have two cars, one wired, another wireless. the wired car is the master here, the wireless, the slave. through a remote, i send a command to the wired car to instead command the wireless car to move forward. the wired car will then check if the wireless slave is already executing some previously given command or no, and accordingly send the command.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;conversely, the master may send the command as soon as it receives it, it's on the slave now to complete the task it's doing, and then execute the command it just received.&lt;/p&gt;&#xA;" OwnerUserId="489" LastEditorUserId="350" LastEditDate="2012-11-30T00:52:30.300" LastActivityDate="2012-11-30T00:52:30.300" Title="Collaborative Behavior: Implementing a Bucket Brigade With Robot Arms" Tags="&lt;mobile-robot&gt;&lt;multi-agent&gt;" AnswerCount="2" CommentCount="7" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="498" PostTypeId="2" ParentId="494" CreationDate="2012-11-24T13:09:48.280" Score="1" Body="&lt;p&gt;If you look for more advanced kits than the NXT brick, consider picking any ARM board you like. For example the &lt;a href=&quot;http://www.raspberrypi.org/&quot; rel=&quot;nofollow&quot;&gt;Raspberry Pi&lt;/a&gt;, the &lt;a href=&quot;http://cubieboard.org/&quot; rel=&quot;nofollow&quot;&gt;CubieBoard&lt;/a&gt; or the &lt;a href=&quot;http://www.pandaboard.org/&quot; rel=&quot;nofollow&quot;&gt;PandaBoard&lt;/a&gt;. All of them can be rather easily combined or expanded with electronics or sensors you like, some of them, like the RasPi have plenty of GPIO pins. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Considering hardware extensions, &lt;a href=&quot;http://www.vexrobotics.com/&quot; rel=&quot;nofollow&quot;&gt;VEX Robotics&lt;/a&gt; have many different parts like structural elements, wheels, motors, sensors, nuts, bolts and sprockets who are standardized by the company to fit nicely with each other.&lt;/p&gt;&#xA;" OwnerUserId="422" LastActivityDate="2012-11-24T13:09:48.280" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="499" PostTypeId="1" CreationDate="2012-11-24T17:09:46.203" Score="13" ViewCount="9032" Body="&lt;p&gt;I dont understand integral part of PID controller. Let's assume this pseudocode from Wikipedia:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;previous_error = 0&#xA;integral = 0 &#xA;start:&#xA;  error = setpoint - measured_value&#xA;  integral = integral + error*dt&#xA;  derivative = (error - previous_error)/dt&#xA;  output = Kp*error + Ki*integral + Kd*derivative&#xA;  previous_error = error&#xA;  wait(dt)&#xA;  goto start&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Integral is set to zero in the beginning. And then in the loop it's integrating the error over the time. When I make a (positive) change in setpoint, the error will become positive and integral will &quot;eat&quot; the values over the time (from the beginning). But what I dont understand is, when error stabilizes back to zero, the integral part will still have some value (integrated errors over time) and will still contribute to the output value of controller, but it should not, because if error is zero, output of PID should be zero as well, right?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can somebody explain me that please?&lt;/p&gt;&#xA;" OwnerUserId="491" LastActivityDate="2014-03-07T06:30:30.177" Title="I don't understand Integral part of PID controller" Tags="&lt;control&gt;&lt;pid&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="500" PostTypeId="2" ParentId="499" CreationDate="2012-11-24T18:09:25.390" Score="17" Body="&lt;p&gt;The main purpose of the integral term is to eliminate the steady state error.&#xA;In the normal case there is going to be a small steady state error and the integral is mainly used to eliminate this error.&#xA;It's however true that when the error gets to 0 the integral will still be positive and will make you overshoot. Then after overshoot the integral will start to go down again. This is the negative effect of the integral term.&#xA;So there is always the trade-off and you have to tune the PID controller to make sure that the overshoot is as small as possible and that the steady state error is minimized.&#xA;Here is where the derivative term come into play. The derivative term helps to minimize the overshoot in the system.&lt;/p&gt;&#xA;" OwnerUserId="128" LastEditorUserId="128" LastEditDate="2012-11-24T18:14:29.947" LastActivityDate="2012-11-24T18:14:29.947" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="501" PostTypeId="2" ParentId="494" CreationDate="2012-11-24T20:39:26.583" Score="1" Body="&lt;p&gt;For a programmer, you might want to check out &lt;a href=&quot;http://www.netmf.com/gadgeteer/&quot; rel=&quot;nofollow&quot;&gt;Gadgeteer&lt;/a&gt;.  No soldering or electronics experience required.  There is a wide range of processors that run .NET MF and interface with compatible devices.  &lt;a href=&quot;http://www.ghielectronics.com/catalog/category/265/&quot; rel=&quot;nofollow&quot;&gt;GHI&lt;/a&gt; is one of the larger purveyors of Gadgeteer devices.&lt;/p&gt;&#xA;" OwnerUserId="493" LastActivityDate="2012-11-24T20:39:26.583" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="502" PostTypeId="1" AcceptedAnswerId="503" CreationDate="2012-11-24T21:27:31.757" Score="4" ViewCount="157" Body="&lt;p&gt;Robots are somewhat videogenic, and the old saying &quot;show me, don't tell me&quot; is especially applicable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But of course, a video is not a &lt;em&gt;question&lt;/em&gt;, so it doesn't fit the Stack Exchange format.  Maybe video links would be more suitable in a CodeProject post.  It just seems like this board hits the right cross-section of people, whose projects I would be interested in seeing.&lt;/p&gt;&#xA;" OwnerUserId="493" LastEditorDisplayName="user9480" LastEditDate="2019-01-26T21:33:35.683" LastActivityDate="2019-01-29T05:03:08.600" Title="Is there a place for posting &quot;look at what I did&quot; videos?" Tags="&lt;publications&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="503" PostTypeId="2" ParentId="502" CreationDate="2012-11-24T21:40:54.527" Score="7" Body="&lt;p&gt;&lt;a href=&quot;http://letsmakerobots.com/&quot;&gt;Let's Make Robots&lt;/a&gt; is a good place to show off ones projects. See the &lt;a href=&quot;http://letsmakerobots.com/view/node/list/robot&quot;&gt;robots&lt;/a&gt; section to see other peoples work as well.&lt;/p&gt;&#xA;" OwnerUserId="177" LastActivityDate="2012-11-24T21:40:54.527" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="504" PostTypeId="1" AcceptedAnswerId="508" CreationDate="2012-11-24T21:43:42.497" Score="4" ViewCount="3845" Body="&lt;p&gt;I am making a 2 wheel drive robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Suppose I know that my robot is going to weight x kg when finished and I know the diameter of the wheels y (geared motors will be connected directly to the wheels). I can choose from several geared motors and I know the peak torque of each motor and the idling speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I calculate the load that a specific motor can take? I.e. will a motor with a given torque be able to move my robot without being too overloaded? What rpm will the motor have when it has load?&lt;/p&gt;&#xA;" OwnerUserId="128" LastActivityDate="2012-12-12T15:06:27.483" Title="Choosing motors for 2 wheel drive robot" Tags="&lt;motor&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="505" PostTypeId="2" ParentId="497" CreationDate="2012-11-24T23:20:33.917" Score="3" Body="&lt;p&gt;The generic answer is yes, such a project could be implemented using existing hardware and frameworks (ROS, MRDS, something else, or none).  The collaboration part is pretty simple in this scenario, it's a straightforward handshake between producer &amp;amp; consumer.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The hard part would be first defining each of the jobs in detail, procuring hardware that meets the requirements, and actually getting each robot to do his assigned task reliably.  As others have pointed out, you'll need to be a lot more specific.&lt;/p&gt;&#xA;" OwnerUserId="493" LastActivityDate="2012-11-24T23:20:33.917" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="506" PostTypeId="2" ParentId="502" CreationDate="2012-11-25T00:22:37.967" Score="2" Body="&lt;p&gt;The AAAI video competition is a good yearly place to put them.  Otherwise, submitting them to IEEE Spectrum is a good idea as well.  Though its not the best robot news ever, it is the most consistent and most people in the industry check it at least weekly.&lt;/p&gt;&#xA;" OwnerUserId="485" LastActivityDate="2012-11-25T00:22:37.967" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="507" PostTypeId="2" ParentId="483" CreationDate="2012-11-25T05:27:55.233" Score="2" Body="&lt;p&gt;These are the rules I follow when I am building power supply systems on my (small, mobile) robots:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I always separate the motors' power supply from any other circuitry, to reduce interference (as @Manishearth &lt;a href=&quot;https://robotics.stackexchange.com/a/485/435&quot;&gt;mentions&lt;/a&gt;).&lt;/li&gt;&#xA;&lt;li&gt;For the rest of my electronic systems, I step down (using linear regulators) from a battery to each of the required voltages (usually 5V and 3.3V in my applications) in parallel.&lt;/li&gt;&#xA;&lt;li&gt;I always include standard diodes as the first component after the battery's connection to any circuit boards, to protect against damage by reverse polarity. The voltage drop here should be taken into account when looking at regulator drop-outs.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Most of my robots have been fairly simple and have not merited much in the way of redundancy, but a common way to add basic redundancy in the case of one power supply failing is through a simple relay-based switch box. This can be configured such that the power supply powers the relay coil in parallel to passing through the Normally-Open contacts to the robot. A second backup supply can be wired to pass through the Normally-Closed contacts. If the first supply fails, the relay will toggle over to the second supply. Cleverer systems can monitor power supply health and manually switch between primary and backup sources as required.&lt;/p&gt;&#xA;" OwnerUserId="435" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2012-11-25T05:27:55.233" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="508" PostTypeId="2" ParentId="504" CreationDate="2012-11-25T07:50:14.843" Score="5" Body="&lt;p&gt;I would say you should use the diameter of the wheel (and any gearing embedded in the motor) to calculate how much force each motor can provide in the point of contact, and estimate the amount of friction your wheel would have against the expected surface your robot would be moving around on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Note that this isn't exactly trivial to estimate&lt;/strong&gt;, so usually what people do as far as I know is either choose a motor that is obviously much stronger than what would be necessary or prototype until they reach a sweet spot. &lt;strong&gt;Open-source projects&lt;/strong&gt; are also a great way to become more aware of the realistic needs of your robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I will also add another point that wasn't included in your question but is mighty important: &lt;strong&gt;if you plan to use DC motors, make sure they have encoders&lt;/strong&gt;. That way, you will be able to perform closed-loop control and your robot will be able to walk in a straight line. Also, if its possible, &lt;strong&gt;try to use current sensing&lt;/strong&gt; so you can detect overloading conditions when your robot is stalled.&lt;/p&gt;&#xA;" OwnerUserId="95" LastActivityDate="2012-11-25T07:50:14.843" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="509" PostTypeId="2" ParentId="497" CreationDate="2012-11-25T09:30:29.897" Score="3" Body="&lt;p&gt;A standard way to model that kind of discrete-event behavior is through &lt;a href=&quot;http://en.wikipedia.org/wiki/Petri_net&quot; rel=&quot;nofollow&quot;&gt;Petri Nets&lt;/a&gt; or a &lt;a href=&quot;http://users.abo.fi/jboling/cdes/op_on_aut.pdf&quot; rel=&quot;nofollow&quot;&gt;Parallel Composition&lt;/a&gt; of &lt;a href=&quot;http://en.wikipedia.org/wiki/Finite_state_machine&quot; rel=&quot;nofollow&quot;&gt;Automata&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;An interesting start might be to simply create the model and see if it works in &lt;a href=&quot;http://www.informatik.uni-hamburg.de/TGI/PetriNets/tools/quick.html&quot; rel=&quot;nofollow&quot;&gt;simulation&lt;/a&gt; first. That will help you solve the high-level logic of your problem. After that is dealt with, you can begin to think about which robot you want to use (or whether you want to build your own) and how you'll implement that high-level logic in your programming language of choice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The good thing about using these models is that you have means to systematically evaluate whether you have solved your problem or not. Ad-hoc programming might work if the problem is simple enough, but as soon as you incorporate more difficult situations it becomes too error-prone IMO.&lt;/p&gt;&#xA;" OwnerUserId="95" LastActivityDate="2012-11-25T09:30:29.897" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="510" PostTypeId="2" ParentId="106" CreationDate="2012-11-25T09:40:10.533" Score="4" Body="&lt;p&gt;If you really want to dive into the mathematics of it, &lt;a href=&quot;http://web.cecs.pdx.edu/~mperkows/CLASS_479/S2006/kinematics-mobot.pdf&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;'s the seminal paper that unified and categorized most models for wheeled robots.&lt;/p&gt;&#xA;" OwnerUserId="95" LastActivityDate="2012-11-25T09:40:10.533" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="511" PostTypeId="1" AcceptedAnswerId="517" CreationDate="2012-11-25T18:30:52.343" Score="0" ViewCount="165" Body="&lt;p&gt;I recently got an arduino wifi shield known as &quot;juniper&quot; (I believe it was by cutedigi). I've tried to find code examples, but when I saw code, it was un-commented and very little explained, I could really use a tutorial or some sample code with a good explanation, can anyone help me find a place to start? I found a piece of code here: &lt;a href=&quot;http://arduino.cc/forum/index.php?action=printpage;topic=103582.0&quot; rel=&quot;nofollow&quot;&gt;http://arduino.cc/forum/index.php?action=printpage;topic=103582.0&lt;/a&gt;&#xA;and I just want to connect to a network, maybe send some get requests, or open a socket.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT:&#xA;after poking around for a while, i found documentation, but I still can't get it to work.&#xA;my code:&#xA;&lt;a href=&quot;http://pastie.org/5455603&quot; rel=&quot;nofollow&quot;&gt;http://pastie.org/5455603&lt;/a&gt;&#xA;I can't seem to get any input at all from the wifi shield.&lt;/p&gt;&#xA;" OwnerUserId="498" LastEditorUserId="498" LastEditDate="2012-11-30T01:07:53.007" LastActivityDate="2012-11-30T01:07:53.007" Title="Where can I find a tutorial or sample code for the Juniper WiFi Arduino Shield?" Tags="&lt;arduino&gt;&lt;electronics&gt;&lt;wifi&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="512" PostTypeId="1" CreationDate="2012-11-25T19:03:29.883" Score="-5" ViewCount="2148" Body="&lt;p&gt;For someone interested in robotics but do not know the ABC of robotics or mechanical/electronic engineering .What's a good roadmap for becoming an amateur roboticist . I'm studying theoretical physics so that I have no problems on the physics/math . If the question is too broad and doesn't meet the criteria of posting on this site . Please inform me of any helpful advice/study material etc. before the question get closed .&#xA;Thanks in advance.&lt;/p&gt;&#xA;" OwnerUserId="499" LastActivityDate="2012-11-25T23:01:16.720" Title="How can I start learning robotics?" Tags="&lt;books&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="3" ClosedDate="2012-11-27T16:30:03.197" ContentLicense="CC BY-SA 3.0" />
  <row Id="514" PostTypeId="2" ParentId="512" CreationDate="2012-11-25T20:42:21.480" Score="4" Body="&lt;p&gt;Start with basic electronics, ditch the books, start empirically do stuff. Chances are you will be bored as hell and it will be over.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Buy some cheap breadboard, LEDs transistors, buttons and see if its fun. Next buy some cheap engines and play with them. Still reading? Buy some books like &quot;Robot Building for Beginners-David Cook&quot; or surf the web. &#xA;Next buy Arduino Uno (the cheapest) and learn some C or Java to program it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then you will know enough to decide for yourself and you will spend no more than 100$ on the stuff until then.&lt;/p&gt;&#xA;" OwnerUserId="501" LastEditorUserId="177" LastEditDate="2012-11-25T21:08:38.197" LastActivityDate="2012-11-25T21:08:38.197" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="515" PostTypeId="2" ParentId="499" CreationDate="2012-11-25T21:03:08.797" Score="9" Body="&lt;p&gt;Imagine that you set up a PID controller on your own arm, so that you could hold a cup of coffee straight out in front of you.  &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The proportional element would control your arm strength relative to your hand position being too high or too low.&lt;/li&gt;&#xA;&lt;li&gt;The derivative element would adjust that strength based on how quickly you were already moving, so that you don't overshoot your target.  &lt;/li&gt;&#xA;&lt;li&gt;The integral element would compensate for the effects of gravity; without it, the cup would come to rest where the proportional force equaled the force of gravity.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;It sounds like the part of the code you're stuck on is that the system must somehow measure the weight of the coffee, and one way to do that is to accumulate the position error over time.  Most PID controllers have an additional term to specify a reasonable limit on the size that the integral element can be.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2012-11-25T21:03:08.797" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="516" PostTypeId="2" ParentId="502" CreationDate="2012-11-25T22:09:48.730" Score="2" Body="&lt;p&gt;While there are specific outlets, as the other answers show, you shouldn't underestimate plain old &lt;a href=&quot;http://youtube.com&quot; rel=&quot;nofollow&quot;&gt;YouTube&lt;/a&gt;. Most research labs and companies simply host their videos there (e.g. &lt;a href=&quot;https://www.youtube.com/user/mitmedialab&quot; rel=&quot;nofollow&quot;&gt;MIT&lt;/a&gt;, &lt;a href=&quot;https://www.youtube.com/user/BostonDynamics&quot; rel=&quot;nofollow&quot;&gt;BostonDynamics&lt;/a&gt; and the likes), as do &lt;a href=&quot;https://www.youtube.com/watch?v=NqDTE6dHpJw&quot; rel=&quot;nofollow&quot;&gt;individuals&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="131" LastEditorUserId="131" LastEditDate="2012-11-25T22:17:47.680" LastActivityDate="2012-11-25T22:17:47.680" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="517" PostTypeId="2" ParentId="511" CreationDate="2012-11-25T22:56:55.463" Score="1" Body="&lt;p&gt;I think your best ally will be Google. A quick search for &quot;arduino juniper cutedigi&quot; led me to the &lt;a href=&quot;http://www.cutedigi.com/wireless/wifi/juniper-wifi-shield-for-arduino-based-on-gainspan-module.html&quot; rel=&quot;nofollow&quot;&gt;manufacturer's website&lt;/a&gt;, which includes a good amount of documentation and sample code under the &quot;Download:&quot; heading at the end of the page. Here's an extra &lt;a href=&quot;http://arduino.cc/forum/index.php/topic,118268.0.html&quot; rel=&quot;nofollow&quot;&gt;troubleshooting forum post&lt;/a&gt; that may be of use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even if you don't find the best documented code out there, finding several sample scripts that do similar things might help you understand the basics.&lt;/p&gt;&#xA;" OwnerUserId="295" LastActivityDate="2012-11-25T22:56:55.463" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="518" PostTypeId="2" ParentId="512" CreationDate="2012-11-25T23:01:16.720" Score="1" Body="&lt;p&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/472/humble-beginnings&quot;&gt;This same question&lt;/a&gt; was just asked a few days ago.  Please &lt;a href=&quot;https://robotics.stackexchange.com/faq#questions&quot;&gt;look around&lt;/a&gt; before posting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That being said, I would suggest taking a programming course for a start.  The &lt;a href=&quot;http://www.udacity.com/overview/Course/cs373/CourseRev/apr2012&quot; rel=&quot;nofollow noreferrer&quot;&gt;Udacity CS373&lt;/a&gt; class is the gentlest introduction to robotics I'm aware of.  I also recommend the &lt;a href=&quot;http://www.probabilistic-robotics.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;textbook&lt;/a&gt; that the prof co-authored (but it's not used in the class).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then you can use the time as you're working through the class to educate yourself more on hardware options.&lt;/p&gt;&#xA;" OwnerUserId="493" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2012-11-25T23:01:16.720" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="519" PostTypeId="1" CreationDate="2012-11-26T04:29:40.547" Score="16" ViewCount="1999" Body="&lt;p&gt;I'm using an EKF for SLAM and I'm having some problem with the update step.  I'm getting a warning that K is singular, &lt;code&gt;rcond&lt;/code&gt; evaluates to &lt;code&gt;near eps or NaN&lt;/code&gt;. I think I've traced the problem to the inversion of Z.  Is there a way to calculate the Kalman Gain without inverting the last term? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not 100% positive this is the cause of the problem, so I've also put my entire &lt;a href=&quot;https://github.com/jdowns/EKF-SLAM&quot; rel=&quot;nofollow noreferrer&quot;&gt;code here&lt;/a&gt;.  The main entry point is slam2d.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;function [ x, P ] = expectation( x, P, lmk_idx, observation)&#xA;    % expectation&#xA;    r_idx = [1;2;3];&#xA;    rl = [r_idx; lmk_idx];&#xA;&#xA;    [e, E_r, E_l] = project(x(r), x(lmk_idx)); &#xA;    E_rl = [E_r E_l];&#xA;    E = E_rl * P(rl,rl) * E_rl';&#xA;&#xA;    % innovation&#xA;    z = observation - e;&#xA;    Z = E;&#xA;&#xA;    % Kalman gain&#xA;    K = P(:, rl) * E_rl' * Z^-1;&#xA;&#xA;    % update&#xA;    x = x + K * z;&#xA;    P = P - K * Z * K';&#xA;end&#xA;&#xA;&#xA;function [y, Y_r, Y_p] = project(r, p)     &#xA;    [p_r, PR_r, PR_p] = toFrame2D(r, p);&#xA;    [y, Y_pr]   = scan(p_r);&#xA;    Y_r = Y_pr * PR_r;&#xA;    Y_p = Y_pr * PR_p;    &#xA;end&#xA;&#xA;&#xA;function [p_r, PR_r, PR_p] = toFrame2D(r , p)&#xA;    t = r(1:2);&#xA;    a = r(3);&#xA;    R = [cos(a) -sin(a) ; sin(a) cos(a)];&#xA;    p_r = R' * (p - t);&#xA;    px = p(1);&#xA;    py = p(2);&#xA;    x = t(1);&#xA;    y = t(2);&#xA;    PR_r = [...&#xA;        [ -cos(a), -sin(a),   cos(a)*(py - y) - sin(a)*(px - x)]&#xA;        [  sin(a), -cos(a), - cos(a)*(px - x) - sin(a)*(py - y)]];&#xA;    PR_p = R';    &#xA;end&#xA;&#xA;&#xA;function [y, Y_x] = scan(x)&#xA;    px = x(1);&#xA;    py = x(2);&#xA;    d = sqrt(px^2 + py^2);&#xA;    a = atan2(py, px);&#xA;    y = [d;a];&#xA;    Y_x =[...&#xA;    [     px/(px^2 + py^2)^(1/2), py/(px^2 + py^2)^(1/2)]&#xA;    [ -py/(px^2*(py^2/px^2 + 1)), 1/(px*(py^2/px^2 + 1))]];&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Edits:&#xA;&lt;code&gt;project(x(r), x(lmk))&lt;/code&gt; should have been &lt;code&gt;project(x(r), x(lmk_idx))&lt;/code&gt; and is now corrected above.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;K goes singular after a little while, but not immediately.  I think it's around 20 seconds or so.  I'll try the changes @josh suggested when I get home tonight and post the results.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update 1:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My simulation first observes 2 landmarks, so K is $7\ x\ 2$.  &lt;code&gt;(P(rl,rl) * E_rl') * inv( Z )&lt;/code&gt; results in a $5\ x\ 2$ matrix, so it can't be added to x in the next line.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;K becomes singular after 4.82 seconds, with measurements at 50Hz (241 steps).  Following the &lt;a href=&quot;http://www.mathworks.com/help/matlab/ref/inv.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;advice here&lt;/a&gt;, I tried &lt;code&gt;K = (P(:, rl) * E_rl')/Z&lt;/code&gt; which results in 250 steps before a warning about K being singular is produced.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This tells me the problem isn't with matrix inversion, but it's somewhere else that's causing the problem.    &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update 2&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My main loop is (with a robot object to store x,P and landmark pointers):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;for t = 0:sample_time:max_time&#xA;    P = robot.P;&#xA;    x = robot.x;&#xA;    lmks = robot.lmks;&#xA;    mapspace = robot.mapspace;&#xA;&#xA;    u = robot.control(t);&#xA;    m = robot.measure(t);&#xA;&#xA;    % Added to show eigenvalues at each step&#xA;    [val, vec] = eig(P);&#xA;    disp('***')&#xA;    disp(val)&#xA;&#xA;    %%% Motion/Prediction&#xA;    [x, P] = predict(x, P, u, dt);&#xA;&#xA;    %%% Correction&#xA;    lids = intersect(m(1,:), lmks(1,:));  % find all observed landmarks&#xA;    lids_new = setdiff(m(1,:), lmks(1,:));&#xA;    for lid = lids&#xA;        % expectation&#xA;        idx = find (lmks(1,:) == lid, 1);&#xA;        lmk = lmks(2:3, idx);&#xA;        mid = m(1,:) == lid;&#xA;        yi = m(2:3, mid);&#xA;&#xA;        [x, P] = expectation(x, P, lmk, yi);&#xA;    end  %end correction&#xA;&#xA;    %%% New Landmarks&#xA;&#xA;    for id = 1:length(lids_new)&#xA;    % if id ~= 0&#xA;        lid = lids_new(id);&#xA;        lmk = find(lmks(1,:)==false, 1);&#xA;        s = find(mapspace, 2);&#xA;        if ~isempty(s)&#xA;            mapspace(s) = 0;&#xA;            lmks(:,lmk) = [lid; s'];&#xA;            yi = m(2:3,m(1,:) == lid);&#xA;&#xA;            [x(s), L_r, L_y] = backProject(x(r), yi);&#xA;&#xA;            P(s,:) = L_r * P(r,:);&#xA;            P(:,s) = [P(s,:)'; eye(2)];&#xA;            P(s,s) = L_r * P(r,r) * L_r';&#xA;        end&#xA;    end  % end new landmarks&#xA;&#xA;    %%% Save State&#xA;    robot.save_state(x, P, mapspace, lmks)&#xA;    end  &#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;At the end of this loop, I save x and P back to the robot, so I believe I'm propagating the covariance through each iteration.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;More edits&lt;/strong&gt;&#xA;The (hopefully) correct eigenvalues are &lt;a href=&quot;http://pastebin.com/Vn4NzkQy&quot; rel=&quot;nofollow noreferrer&quot;&gt;now here&lt;/a&gt;. There are a number of eigenvalues that are negative. Although their magnitude is never very large, $10^{-2}$ at most, it happens on the iteration immediately after the first landmark is observed and added to the map (in the &quot;new landmarks&quot; section of the main loop).&lt;/p&gt;&#xA;" OwnerUserId="502" LastEditorUserId="20709" LastEditDate="2018-07-25T21:16:18.767" LastActivityDate="2018-07-25T21:49:20.997" Title="EKF-SLAM Update step, Kalman Gain becomes singular" Tags="&lt;slam&gt;&lt;localization&gt;&lt;kalman-filter&gt;&lt;mapping&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="520" PostTypeId="1" AcceptedAnswerId="575" CreationDate="2012-11-26T07:34:40.657" Score="5" ViewCount="554" Body="&lt;p&gt;A lot of awesome optics projects like hacking cameras and projectors become possible with CAD lens modelling software&lt;sup&gt;1&lt;/sup&gt;, if we can also easily prototype the lenses we design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What are some materials and additive or subtractive 3D fabrication strategies that can make a clear lens with strong refraction and the ability to be polished?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; &lt;a href=&quot;http://www.optenso.com/links/links.html#lds&quot; rel=&quot;nofollow&quot;&gt;Here is a helpful list of 37 different lens design &amp;amp; simulation programs&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="106" LastEditorUserId="350" LastEditDate="2012-11-30T14:03:33.200" LastActivityDate="2014-01-16T15:26:04.110" Title="Is it practical to 3D print a refractive lens?" Tags="&lt;3d-printing&gt;&lt;manufacturing&gt;" AnswerCount="3" CommentCount="4" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="521" PostTypeId="1" AcceptedAnswerId="522" CreationDate="2012-11-26T08:00:05.007" Score="19" ViewCount="23427" Body="&lt;p&gt;When computing the Jacobian matrix for solving an Inverse Kinematic analytically, I read from many places that I could use this formula to create each of the columns of a joint in the Jacobian matrix:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$\mathbf{J}_{i}=\frac{\partial \mathbf{e}}{\partial \phi_{i}}=\left[\begin{array}{c}{\left[\mathbf{a}_{i}^{\prime} \times\left(\mathbf{e}_{p o s}-\mathbf{r}_{i}^{\prime}\right)\right]^{T}} \\ {\left[\mathbf{a}_{i}^{\prime}\right]^{T}}\end{array}\right]$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Such that &lt;span class=&quot;math-container&quot;&gt;$a'$&lt;/span&gt; is the rotation axis in world space, &lt;span class=&quot;math-container&quot;&gt;$r'$&lt;/span&gt; is the pivot point in world space, and &lt;span class=&quot;math-container&quot;&gt;$e_{pos}$&lt;/span&gt; is the position of the end effector in world space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I don't understand how this can work when the joints have more than one DOFs. Take the following as an example:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/7mVwI.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt; are the rotational DOF, the &lt;span class=&quot;math-container&quot;&gt;$e$&lt;/span&gt; is the end effector, the &lt;span class=&quot;math-container&quot;&gt;$g$&lt;/span&gt; is the goal of the end effector, the &lt;span class=&quot;math-container&quot;&gt;$P_1$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$P_2$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$P_3$&lt;/span&gt; are the joints.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, if I were to compute the Jacobian matrix based on the formula above for the diagram, I will get something like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$J=\begin{bmatrix}&#xA;((0,0,1)\times \vec { e } )_{ x } &amp;amp; ((0,0,1)\times (\vec { e } -\vec { P_{ 1 } } ))_{ x } &amp;amp; ((0,0,1)\times (\vec { e } -\vec { P_{ 2 } } ))_{ x } \\ ((0,0,1)\times \vec { e } )_{ y } &amp;amp; ((0,0,1)\times (\vec { e } -\vec { P_{ 1 } } ))_{ y } &amp;amp; ((0,0,1)\times (\vec { e } -\vec { P_{ 2 } } ))_{ y } \\ ((0,0,1)\times \vec { e } )_{ z } &amp;amp; ((0,0,1)\times (\vec { e } -\vec { P_{ 1 } } ))_{ z } &amp;amp; ((0,0,1)\times (\vec { e } -\vec { P_{ 2 } } ))_{ z } \\ 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 \\ 1 &amp;amp; 1 &amp;amp; 1 &#xA;\end{bmatrix} $$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is assumed that all the rotation axes are &lt;span class=&quot;math-container&quot;&gt;$(0,0,1)$&lt;/span&gt; and all of them only have one rotational DOF. So, I believe each column is for one DOF, in this case, the &lt;span class=&quot;math-container&quot;&gt;$\theta_\#$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, here's the problem: What if all the joints have full 6 DOFs? Say now, for every joint, I have rotational DOFs in all axes, &lt;span class=&quot;math-container&quot;&gt;$\theta_x$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$\theta_y$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\theta_z$&lt;/span&gt;, and also translational DOFs in all axes, &lt;span class=&quot;math-container&quot;&gt;$t_x$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$t_y$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$t_z$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To make my question clearer, suppose if I were to &quot;forcefully&quot; apply the formula above to all the DOFs of all the joints, then I probably will get a Jacobian matrix like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/f6Fm7.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/f6Fm7.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(click for full size)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But this is incredibly weird because all the 6 columns of the DOF for every joint is repeating the same thing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I use the same formula to build the Jacobian matrix with all the DOFs? How would the Jacobian matrix look like in this case?&lt;/p&gt;&#xA;" OwnerUserId="503" LastEditorUserId="13314" LastEditDate="2019-11-29T17:10:27.850" LastActivityDate="2019-12-01T09:02:50.857" Title="Computing the Jacobian matrix for Inverse Kinematics" Tags="&lt;inverse-kinematics&gt;&lt;kinematics&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="522" PostTypeId="2" ParentId="521" CreationDate="2012-11-26T10:54:22.753" Score="11" Body="&lt;p&gt;I have to admit that i haven't seen that specific formula very often, but my guess would be that in case of more than one DOF, you would evaluate it for every joint in every column and then (perhaps?) multiply those results in each column.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But let me suggest a simpler apporach to Jacobians in the context of arbitrary many DOFs: Basically, the Jacobian tells you, how far each joint moves, if you move the end effector frame in some arbitrarily chosen direction. Let $f(\theta)$ be the forward kinematics, where $\theta = [\theta_1, ... , \theta_n]$ are the joints, $f_{\text{pos}}$ is the positional part of the forward kinematics and $f_{\text{rot}}$ the rotational part. Then you can obtain the Jacobian by &lt;em&gt;differentiating the forward kinematics&lt;/em&gt; with respect to the joint variables:&#xA;$$&#xA;J = \frac{\partial f}{\partial \theta} = &#xA;\begin{bmatrix}&#xA;  \frac{\partial f_{\text{pos}}}{\partial \theta_1}, &amp;amp; \frac{\partial f_{\text{pos}}}{\partial \theta_2} &amp;amp; ..., \frac{\partial f_{\text{pos}}}{\partial \theta_n} \\&#xA;  \frac{\partial f_{\text{rot}}}{\partial \theta_1}, &amp;amp; \frac{\partial f_{\text{rot}}}{\partial \theta_2} &amp;amp; ..., \frac{\partial f_{\text{rot}}}{\partial \theta_n}&#xA;\end{bmatrix}&#xA;$$ &#xA;is your manipulator's Jacobian. Inverting it would give you the inverse kinematics with respcet to &lt;em&gt;velocities&lt;/em&gt;. It can still be useful though, if you want to know how far each joint has to move if you want to move your end effector by some &lt;em&gt;small&lt;/em&gt; amount $\Delta x$ in any direction (because on position level, this would effectively be a linearization):&#xA;$$&#xA; \Delta \theta = J^{-1}\Delta x&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope that this helps.&lt;/p&gt;&#xA;" OwnerUserId="422" LastActivityDate="2012-11-26T10:54:22.753" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="523" PostTypeId="2" ParentId="184" CreationDate="2012-11-26T18:01:22.773" Score="3" Body="&lt;h2&gt;Rate of progress of computational power&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Moore%27s_law&quot; rel=&quot;nofollow&quot;&gt;Moore's law&lt;/a&gt;: over the history of computing hardware, the density of transistors on an integrated circuit doubles approximately every two years.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How long will that take until we have human-equivalent processing power (HEPP) ?&#xA;As Martin pointed out, Ray Kurzweil and those who listen to him say things like:&#xA;&quot;By some estimates, we already have supercomputers that have the raw processing power&#xA;necessary to produce HEPP -- we just don't know how yet to program them to act intelligently.&quot;&#xA;&quot;By 2030, the hardware for a HEPP will cost one dollar.&quot; (&lt;a href=&quot;http://mol-eng.com/takeoff.pdf&quot; rel=&quot;nofollow&quot;&gt;a&lt;/a&gt; &lt;a href=&quot;http://books.google.com/books?id=aL2QThQPuxgC&amp;amp;pg=PA340&amp;amp;lpg=PA340&amp;amp;dq=HEPP%3a%20Human%20Equivalent%20Processing%20Power&amp;amp;source=bl&amp;amp;ots=lOlF3nUjVY&amp;amp;sig=GEUZuDAnhXGnvPQV6KbcvOkrzTY&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=kYazULSOJ4y29gTit4GoAw&amp;amp;ved=0CEgQ6AEwAw#v=onepage&amp;amp;q=HEPP%3a%20Human%20Equivalent%20Processing%20Power&amp;amp;f=false&quot; rel=&quot;nofollow&quot;&gt;b&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nielsen's Law: network connection speeds double approximately every 21 months.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Rate of progress of electrical energy storage density&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://blogs.wsj.com/drivers-seat/2012/03/28/who%E2%80%99ll-name-the-law-for-electric-car-batteries/&quot; rel=&quot;nofollow&quot;&gt;unnamed law&lt;/a&gt;: electric vehicle batteries double in miles/dollar every 10 years. (&lt;a href=&quot;http://www.eaa.org/experimenter/articles/2010-05_electric.asp&quot; rel=&quot;nofollow&quot;&gt;b&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The power consumed by a integrated circuit running at full speed remains roughly constant.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The power consumed by a integrated circuit to do any fixed amount of processing halves approximately every two years.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Other trends relevant to robotics&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Hendy's Law: digital camera pixels per dollar doubles approximately every 18 months.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Haitz's law: the light output of an LED doubles approximately every 36 months.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://johnnyryan.wordpress.com/2011/08/24/a-moore%E2%80%99s-law-for-3d-printing-i-need-data/&quot; rel=&quot;nofollow&quot;&gt;Johnny Ryan&lt;/a&gt; is gathering data that may lead to a similar law for 3d printing.&#xA;(Robots are sometimes built using such 3D printed parts,&#xA;and 3D printers themselves are technically a kind of &quot;robot&quot; under most definitions).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[unnamed law]: the power-to-weight ratio of electric motors and their control electronics doubles every [FIXME] years.&#xA;(This trend is most obvious in electric aircraft). ( &lt;a href=&quot;http://www2.electronicproducts.com/High_power_MOSFET_packages_muscle_in_on_high_density_power_systems-article-MARIR1-mar1999-html.aspx&quot; rel=&quot;nofollow&quot;&gt;a&lt;/a&gt; &lt;a href=&quot;http://www.eaa.org/experimenter/articles/2010-05_electric.asp&quot; rel=&quot;nofollow&quot;&gt;b&lt;/a&gt; )&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These trends in the low-level quantitative measures of what people build are surprisingly &quot;linear&quot; (in a log-linear graph) and therefore easy to predict.&#xA;However, historically people have made terrible predictions of exactly how much quantity of such low-level hardware was necessary to achieve some qualitative features in AI and other areas of robotics.&#xA;Usually people woefully underestimate what is needed to automate things we find &quot;easy&quot; like riding a bike or &lt;a href=&quot;http://en.wikipedia.org/wiki/Darpa_grand_challenge&quot; rel=&quot;nofollow&quot;&gt;driving a car&lt;/a&gt;.&#xA;Occasionally people find it disturbing how easy it is to automate some things ( &lt;a href=&quot;http://en.wikipedia.org/wiki/ELIZA_effect&quot; rel=&quot;nofollow&quot;&gt;ELIZA effect&lt;/a&gt; ).&lt;/p&gt;&#xA;" OwnerUserId="187" LastActivityDate="2012-11-26T18:01:22.773" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="524" PostTypeId="1" CreationDate="2012-11-26T18:43:59.667" Score="2" ViewCount="289" Body="&lt;p&gt;Am trying to find the right ESC for the following two motors&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.e-fliterc.com/Products/Default.aspx?ProdID=EFLM30180MDFA#quickFeatures&quot; rel=&quot;nofollow&quot;&gt;http://www.e-fliterc.com/Products/Default.aspx?ProdID=EFLM30180MDFA#quickFeatures&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.e-fliterc.com/Products/Default.aspx?ProdID=EFLM3032DFA&quot; rel=&quot;nofollow&quot;&gt;http://www.e-fliterc.com/Products/Default.aspx?ProdID=EFLM3032DFA&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can't figure out which of the ESC's listed on the site would be best? Are there alternative (cheaper or better?) options?&lt;/p&gt;&#xA;" OwnerUserId="459" LastEditorUserId="10965" LastEditDate="2021-03-01T19:48:20.720" LastActivityDate="2021-03-01T19:48:20.720" Title="Compatible ESC's with brushless 3 phase motors" Tags="&lt;motor&gt;&lt;brushless-motor&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="525" PostTypeId="2" ParentId="446" CreationDate="2012-11-26T19:18:32.430" Score="3" Body="&lt;p&gt;I was hoping that someone else would answer this question with some sort of formula or rule of thumb that would apply to a much wider range of materials / cutting speeds / etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to the RepRap website,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;It is recommended that you get approximately 13.7 N-cm (= 0.137 N-m or 1400 gf-cm or 19.4 ozf-in or 1.21 lbf-in) of holding torque (or more) for RepRap axis motors to avoid issues, although one stepper with less has been used successfully.&#xA;For Wade's Geared Extruder (most widely used one as of 2012) it is suggested to use motor that is capable of creating a holding torque of at least 40 N-cm.&quot;&#xA;-- &lt;a href=&quot;http://reprap.org/wiki/StepperMotor#Holding_Torque&quot; rel=&quot;nofollow&quot;&gt;http://reprap.org/wiki/StepperMotor#Holding_Torque&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since your motors have 31.2oz-in of holding torque -- significantly stronger than that recommendation -- the motors you already have should work fine for the axis motors of a RepRap-like machine.&lt;/p&gt;&#xA;" OwnerUserId="187" LastActivityDate="2012-11-26T19:18:32.430" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="526" PostTypeId="2" ParentId="524" CreationDate="2012-11-26T20:37:45.160" Score="1" Body="&lt;p&gt;Looking at the second, I see 62 amps continuous, 75 max burst, you want a brushless speed controler that can handle that, assuming you plan on using the full power of the motor. So, from that vendor; &lt;a href=&quot;http://www.e-fliterc.com/Products/Default.aspx?ProdID=EFLA1080B&quot; rel=&quot;nofollow&quot;&gt;http://www.e-fliterc.com/Products/Default.aspx?ProdID=EFLA1080B&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It takes some looking, but the first motor is a replacement for a kit. That kit comes with a 5 amp speed controler/receiver combo - so you would need a 5 amp brushless speed control. &lt;a href=&quot;http://www.e-fliterc.com/Products/Default.aspx?ProdID=EFLA1005&quot; rel=&quot;nofollow&quot;&gt;http://www.e-fliterc.com/Products/Default.aspx?ProdID=EFLA1005&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That is quite a difference between the 2, power wise. You need to think about physical size and power requirements. Then I'd recommend cheap chinese verson instead; &#xA;&lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__517__59__Brushless_Motors-Outrunners_by_size.html&quot; rel=&quot;nofollow&quot;&gt;hobbyking&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just remember, brushless motors need brushless speed controlers. other than that, match up potential amp draw to speed controller capability. Choose batteries based on intended length of runtime. The battery C rating indicated how much current it can deliver. A 1000mah battery rated at 20C can deliver 20 amps.&lt;/p&gt;&#xA;" OwnerUserId="274" LastActivityDate="2012-11-26T20:37:45.160" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="527" PostTypeId="2" ParentId="184" CreationDate="2012-11-26T20:52:28.617" Score="1" Body="&lt;p&gt;This isn't a published study, but many people use the &lt;a href=&quot;http://en.wikipedia.org/wiki/Technology_readiness_level&quot; rel=&quot;nofollow&quot;&gt;Technology Readiness Level (TRL)&lt;/a&gt; system to assess the state of technologies. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Granted, it doesn't really tell you &lt;em&gt;when&lt;/em&gt; a technology might reach a particular stage, but it can be useful in establishing a common framework for this sort of question. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It also can be useful for prioritizing and comparing different subsystems. For example, in a robotic system, if you deem that the actuators are at TRL 6 but your power storage technology is only at TRL 1, you can see what is holding the whole system back and put more effort ($) there.&lt;/p&gt;&#xA;" OwnerUserId="479" LastEditorUserId="479" LastEditDate="2012-11-26T21:14:26.653" LastActivityDate="2012-11-26T21:14:26.653" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="529" PostTypeId="2" ParentId="519" CreationDate="2012-11-26T21:33:52.903" Score="1" Body="&lt;p&gt;If you are only updating the covariance sub-matrix associated with the robot and landmark (as is typical), then &lt;code&gt;K&lt;/code&gt; and &lt;code&gt;P&lt;/code&gt; should be $(N_r + N_l)\times(N_r + N_l)$ for robot state size $N_r$ and landmark size $N_l$. Note that you have: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;K = P(:, rl) * E_rl' * Z^-1&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;which I think should be &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;(P(rl,rl) * E_rl') * inv(Z)&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(see: &lt;a href=&quot;http://www.mathworks.com/help/matlab/ref/mrdivide.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;matrix division&lt;/a&gt;).&#xA;Check the size of &lt;code&gt;K&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also: &#xA;Please provide a little more information: Does &lt;code&gt;K&lt;/code&gt; go singular immediately or only after some time? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This worries me: &lt;code&gt;project(x(r), x(lmk));&lt;/code&gt; since &lt;code&gt;lmk&lt;/code&gt; is not defined. &lt;/p&gt;&#xA;" OwnerUserId="163" LastEditorUserId="9176" LastEditDate="2018-07-25T21:48:00.277" LastActivityDate="2018-07-25T21:48:00.277" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="530" PostTypeId="1" AcceptedAnswerId="540" CreationDate="2012-11-26T22:14:31.157" Score="1" ViewCount="804" Body="&lt;p&gt;OK, not really robotics, but has anyone been able to upload to a Rainboduino v3.0 using the Arduino IDE? I can't seem to figure it out, and there is virutally no documentation online. I followed &lt;a href=&quot;http://www.anyware.co.uk/2005/2012/01/17/getting-started-with-arduino-rainbowduino/&quot; rel=&quot;nofollow&quot;&gt;this blog entry&lt;/a&gt;, but got no connection to the board. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If anyone can give me some suggestions, I would appreciate it! &lt;/p&gt;&#xA;" OwnerUserId="506" LastEditorUserId="457" LastEditDate="2012-11-28T17:56:49.817" LastActivityDate="2012-11-28T17:56:49.817" Title="Rainbowduino 3.0 - Arduino IDE fails to upload" Tags="&lt;software&gt;&lt;arduino&gt;&lt;programming-languages&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="531" PostTypeId="1" AcceptedAnswerId="548" CreationDate="2012-11-26T23:32:35.390" Score="3" ViewCount="620" Body="&lt;p&gt;What's needed to utilize an IMU such as the &lt;a href=&quot;http://store.diydrones.com/ArduIMU_V3_p/kt-arduimu-30.htm&quot; rel=&quot;nofollow&quot;&gt;ArduIMU+ V3&lt;/a&gt; to be used in an INS. Is there any other hardware needed? &lt;/p&gt;&#xA;" OwnerUserId="374" LastEditorUserId="374" LastEditDate="2012-11-27T03:27:07.683" LastActivityDate="2018-01-09T19:14:38.607" Title="Using an IMU to build an INS" Tags="&lt;arduino&gt;&lt;slam&gt;&lt;imu&gt;&lt;deduced-reckoning&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="533" PostTypeId="1" AcceptedAnswerId="534" CreationDate="2012-11-27T03:34:04.287" Score="14" ViewCount="538" Body="&lt;p&gt;I'm a highschool student studying electronics and for an assessment task on the history of electronics I have decided to focus on the history of robotics. I want to begin with the earliest possible concept of a robot and progress through major developments in robotics to the current day. Where should I begin my research?&lt;/p&gt;&#xA;" OwnerUserId="374" LastEditorUserId="350" LastEditDate="2013-01-03T13:27:56.017" LastActivityDate="2013-01-03T17:00:30.720" Title="What was the earliest concept of a robot?" Tags="&lt;electronics&gt;&lt;research&gt;" AnswerCount="9" CommentCount="1" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="534" PostTypeId="2" ParentId="533" CreationDate="2012-11-27T04:05:41.467" Score="6" Body="&lt;p&gt;If I recall correctly Leonardo da Vinci is credited with the earliest design of a robot. My personal favorite is generally referred to as &lt;a href=&quot;http://en.wikipedia.org/wiki/Leonardo%27s_robot&quot;&gt;Leonardo's robot&lt;/a&gt;. However some accounts place &lt;a href=&quot;http://www.youtube.com/watch?v=a2qeZrejZp0&quot;&gt;Leonardo's cart&lt;/a&gt; as having come first and is generally considered a robot because it could be &quot;reprogrammed&quot; by replacing its cogs.&lt;/p&gt;&#xA;" OwnerUserId="177" LastActivityDate="2012-11-27T04:05:41.467" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="535" PostTypeId="1" AcceptedAnswerId="536" CreationDate="2012-11-27T04:51:39.177" Score="8" ViewCount="14411" Body="&lt;p&gt;What can an Arduino board such as the Uno really do? Of course simple things like controlling a couple servos is very easy for it. However, I don't think an Uno board would be able to preform real-time 3D SLAM from point cloud data gathered from a Kinect sensor on a mobile robot, right? If the robot had any speed at all the Arduino wouldn't be able to keep up, correct? Could it do 2D SLAM while moving and be able to keep up? What about taking 1/10 of the points from the Kinect sensor and processing only those?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically, what are some examples of the resource limitations of such an Arduino board?&lt;/p&gt;&#xA;" OwnerUserId="457" LastEditorUserId="350" LastEditDate="2012-11-27T20:12:46.613" LastActivityDate="2012-11-28T06:53:34.403" Title="How computationally powerful is an Arduino Uno board?" Tags="&lt;arduino&gt;&lt;slam&gt;&lt;kinect&gt;" AnswerCount="5" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="536" PostTypeId="2" ParentId="535" CreationDate="2012-11-27T05:06:01.763" Score="6" Body="&lt;p&gt;It depends - on the number of landmarks in the feature map, and how much time you're willing to invest tuning the algorithm for speed, and a number other parameters which you may or may not be able to control for a given application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt; As a &lt;em&gt;thought experiment&lt;/em&gt;, I think it would &lt;em&gt;theoretically&lt;/em&gt; be powerful enough to do extremely simple near-real-time SLAM in a very contrived environment, such as the center of a gym floor with a few cones set out.  It could take a single scan line from the Kinect and update a low-resolution, 2D internal map, updating periodically (say every 10 seconds).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Uno's 2K RAM would probably be a deal breaker, but the Mega might have enough (8K) and there is &lt;a href=&quot;http://hackaday.com/2011/09/05/upgrading-ram-in-an-arduino-mega/&quot;&gt;hack&lt;/a&gt; for upgrading it to 520K.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In practice, doing floating point matrix calculations on an 8-bit processor is not a good idea.&lt;/p&gt;&#xA;" OwnerUserId="493" LastEditorUserId="493" LastEditDate="2012-11-27T06:15:56.363" LastActivityDate="2012-11-27T06:15:56.363" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="537" PostTypeId="2" ParentId="533" CreationDate="2012-11-27T15:10:48.330" Score="5" Body="&lt;p&gt;If you are interested in real and fictional robots (for concepts), the &lt;a href=&quot;http://www.robothalloffame.org/inductees.html&quot;&gt;CMU Robot Hall of Fame&lt;/a&gt; may be useful.&lt;/p&gt;&#xA;" OwnerUserId="479" LastActivityDate="2012-11-27T15:10:48.330" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="538" PostTypeId="2" ParentId="535" CreationDate="2012-11-27T16:09:32.020" Score="4" Body="&lt;p&gt;The &lt;a href=&quot;http://avrprogrammers.com/doc-atmega8-atmega328.php&quot; rel=&quot;nofollow&quot;&gt;raw specs on the Arduino's microcontrollers&lt;/a&gt; list clock speeds as high as 16 or 20 MHz -- around the speed of an mid-1990s Intel 386 computer.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That sounds promising, until you consider the fact that it doesn't natively support floating point math -- the &quot;&lt;a href=&quot;http://en.wikipedia.org/wiki/FLOPS&quot; rel=&quot;nofollow&quot;&gt;FLOPS&lt;/a&gt;&quot; measurement by which most CPUs are compared.  I've seen some arduino demos that calculate the speed of the Arduino at about 60 kFLOPS, whereas the Intel 386 at 20 MHz does something like 170 kFLOPS (according to &lt;a href=&quot;http://www.obsolyte.com/sunFAQ/faq_hardware/hwref1.html&quot; rel=&quot;nofollow&quot;&gt;this page&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, it should be noted that the Arduino does 8-bit math and the 386 is doing 16-bit and 32-bit math.  A DSP board might be more suited to that kind of data acquisition, but I'm in no position to advise there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Getting that code to work in such a constrained environment as the Arduino might be possible, but it will take a lot of optimization.  You'd be better served by using a more powerful CPU to implement those algorithms; make sure that they work on the powerful CPU, &lt;em&gt;then&lt;/em&gt; attempt to optimize for the weak CPU.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2012-11-27T16:09:32.020" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="539" PostTypeId="2" ParentId="215" CreationDate="2012-11-27T16:30:25.537" Score="3" Body="&lt;p&gt;It sounds like your enthusiasm is in the right place, but I think you're trying to make intelligent design decisions without knowing what you're designing.  This is good!  These are all things to be worried about when designing a robot, whether as big as your shoe or as big as your car.  But they aren't what you should be worried about right now.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your situation, I'd choose a robotics kit that's based on an Arduino.  That will give you a good starting place in terms of seeing how other people solve the problems of materials, motors, etc.  The Arduino has a huge user base and is pretty simple to program and re-program.  You can always add your own hardware and software to a kit, to make it do the things you want -- keep pushing the envelope.  Also, get some electronic kits (non-robotic kits are perfectly fine); they will teach you a bit about electronics and circuits that would be less fun to learn from a book.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Make as many mistakes as you can&lt;/strong&gt;.   There are no right answers or silver bullets when it comes to building robots... It's an iterative process that comes with bursts of inspiration.  If you run out of I/O ports on the Arduino, start looking for another microcontroller board that has more of them.  If you find you need more user interaction (LCD, buttons, etc), get a board that supports that.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just don't try to solve all the problems before you take your first step.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2012-11-27T16:30:25.537" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="540" PostTypeId="2" ParentId="530" CreationDate="2012-11-27T16:42:34.940" Score="1" Body="&lt;p&gt;It looks like the Rainbowduino 3.0 uses an ATmega328, so first be sure to choose a board that's using that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If that doesn't solve the problem, try looking at this &lt;a href=&quot;http://www.seeedstudio.com/wiki/Rainbowduino_v3.0&quot; rel=&quot;nofollow&quot;&gt;wiki article about the Rainboduino v3.0&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="457" LastActivityDate="2012-11-27T16:42:34.940" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="541" PostTypeId="1" AcceptedAnswerId="542" CreationDate="2012-11-27T17:10:01.437" Score="16" ViewCount="20340" Body="&lt;p&gt;I'm building a small robot using some cheap Vex Robotics tank treads. However, my choice of picking tank treads is almost purely based on the fact that they seem like more fun than wheels. I don't actually know if they really have much of an advantage or disadvantage when compared to wheels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What are the pros and cons of both wheels and continuous tracks?&lt;/p&gt;&#xA;" OwnerUserId="457" LastEditorUserId="350" LastEditDate="2012-11-30T14:29:36.073" LastActivityDate="2017-07-10T17:29:17.420" Title="Wheels vs Continuous Tracks (Tank Treads)" Tags="&lt;mobile-robot&gt;&lt;design&gt;&lt;wheeled-robot&gt;&lt;tracks&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="542" PostTypeId="2" ParentId="541" CreationDate="2012-11-27T17:25:36.367" Score="16" Body="&lt;p&gt;Well, you generally use wheels when:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;You want speed&lt;/strong&gt;. Treads need a lot more torque to power, thus you generally use low-rpm/high torque motors.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;You want maneuverability:&lt;/strong&gt; Treads are a big pain to turn with. Differential steering is very ineffective (the bot skids to steer, which may not work if you have really grippy treads)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;But, treads are better when:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;You want to move on uneven terrain&lt;/strong&gt;: Wheels get stuck in potholes/bumps, treads don't.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;You want traction&lt;/strong&gt;: Treads in general are way grippier than wheels--climbing an incline is easier and you have less skids.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;You don't want the bot to be affected by pushing/gravity&lt;/strong&gt;: A wheeled bot is easily pushed around (and, as mentioned, can skid on inclines). Bots with treads are hard to push and they don't skid.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="126" LastActivityDate="2012-11-27T17:25:36.367" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="543" PostTypeId="1" AcceptedAnswerId="544" CreationDate="2012-11-27T18:01:18.020" Score="21" ViewCount="3984" Body="&lt;p&gt;I've noticed that almost all research being done with helicopter robots is done using quadcopters (four propellers). Why is there so little work done using tricopters in comparison? Or a different number of propellers? What about four propellers has made quadcopters the most popular choice?&lt;/p&gt;&#xA;" OwnerUserId="457" LastEditorUserId="2447" LastEditDate="2014-01-08T22:40:26.917" LastActivityDate="2014-01-08T22:40:26.917" Title="Why are quadcopters more common in robotics than other configurations?" Tags="&lt;quadcopter&gt;&lt;design&gt;&lt;uav&gt;" AnswerCount="4" CommentCount="1" FavoriteCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="544" PostTypeId="2" ParentId="543" CreationDate="2012-11-27T18:37:17.103" Score="21" Body="&lt;p&gt;At least in part quadrotors offer a nice balance between the complexity of the dynamics and power requirements. With traditional single rotor helicopters, control is a function of the orientation of the rotor which means you must change its orientation to change direction of the craft. This makes for very complex mechanical linkages comparatively speaking and it complicates the dynamics. With tri-copters the dynamics include an imbalance of the moments induced by the spinning of the rotors. With more than four rotors you get improved stability and some ability to handle failure, such as a motor going out, but you quickly run into a power problem. The more motors you need to drive the higher your power requirements and quadrotors are already very power hungry. This is a major issue in robotics in general. The quadrotor dynamics naturally balance the moments from the rotors and the mechanical linkages are simpler.&lt;/p&gt;&#xA;" OwnerUserId="177" LastActivityDate="2012-11-27T18:37:17.103" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="545" PostTypeId="2" ParentId="543" CreationDate="2012-11-27T18:38:22.987" Score="4" Body="&lt;p&gt;I think the main reason is that they're simply easier to build in a stable way. A 120º angle is harder to get right than a 90º angle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another thing that is a little easier to understand is how the relationship between propellers leads to different types of motion. Thinking about different propellers moving at different speeds and directions and how that affects robot motion is sort of intuitive, because you don't have to do a lot of trigonometry in your head.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lastly, it's just a good compromise between stability/controllability and cost, since motors are usually one of the most expensive components for that kind of robot.&lt;/p&gt;&#xA;" OwnerUserId="95" LastActivityDate="2012-11-27T18:38:22.987" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="546" PostTypeId="2" ParentId="535" CreationDate="2012-11-27T19:21:38.883" Score="1" Body="&lt;p&gt;It's true that the Arduino is started to look underpowered now that people are by Raspberry Pis, but I think it depends more on the application. I like the arduino because the code is really easy to write, it's really easy to flash new code, and really easy to hook up new sensors. I wouldn't use it for a vision application like kinect or webcam stuff, but it can do a whole lot more than talking to servos. A good example would be a segway type application; the arduino is ideal for talking to accelerometer sensors, doing some 3D spatial math, and then talking to servos to keep things balanced.&lt;/p&gt;&#xA;" OwnerUserId="10" LastActivityDate="2012-11-27T19:21:38.883" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="547" PostTypeId="2" ParentId="533" CreationDate="2012-11-27T19:47:45.430" Score="11" Body="&lt;p&gt;I've found the &lt;a href=&quot;http://en.wikipedia.org/wiki/History_of_robots&quot;&gt;wikipedia article&lt;/a&gt; (as well as its linked articles) on the history of robots to be enlightening:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The &lt;strong&gt;history of &lt;a href=&quot;http://en.wikipedia.org/wiki/Robot&quot;&gt;robots&lt;/a&gt;&lt;/strong&gt; has its roots as far back as ancient myths and legends. Modern concepts were begun to be developed when the Industrial Revolution allowed the use of more complex mechanics and the subsequent introduction of electricity made it possible to power machines with small compact motors. After the 1920s the modern formulation of a humanoid machine was developed to the stage where it was possible to envisage human sized robots with the capacity for near human thoughts and movements, first envisaged millennia before.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Also, you might mention &lt;a href=&quot;http://en.wikipedia.org/wiki/R.U.R.&quot;&gt;R.U.R.&lt;/a&gt;, a play in the 1920s that popularized the term &lt;em&gt;robot&lt;/em&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;R.U.R.&lt;/strong&gt; is a 1920 science fiction play in the Czech language by &lt;a href=&quot;http://en.wikipedia.org/wiki/Karel_%C4%8Capek&quot;&gt;Karel Čapek&lt;/a&gt;. R.U.R. stands for Rossum's Universal Robots, an English phrase used as the subtitle in the Czech original.&lt;a href=&quot;http://en.wikipedia.org/wiki/History_of_robots&quot;&gt;1&lt;/a&gt; It premiered in 1921 and introduced the word &quot;robot&quot; to the English language and to science fiction as a whole.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="181" LastEditorUserId="37" LastEditDate="2012-11-30T17:04:22.933" LastActivityDate="2012-11-30T17:04:22.933" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="548" PostTypeId="2" ParentId="531" CreationDate="2012-11-27T22:31:19.757" Score="1" Body="&lt;p&gt;It contains all the necessary components to function as a rudimentary IMU.&#xA;If you read through the comments &lt;a href=&quot;http://code.google.com/p/ardu-imu/wiki/WhatNeed&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;, you'll see that either a GPS or magnometer will be required for error correction. All IMUs will suffer from drift without some calibration, especially one this cheap! I don't see a clear answer on whether this can operate without one, but I imagine it could, albeit with a large margin of error.&lt;/p&gt;&#xA;" OwnerUserId="366" LastActivityDate="2012-11-27T22:31:19.757" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="549" PostTypeId="2" ParentId="543" CreationDate="2012-11-27T23:00:07.663" Score="10" Body="&lt;p&gt;You need 4 degrees of freedom to control yaw, pitch, roll and thrust.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Four props is therefore the minimum number of actuators required.  Tricoptors require a servo to tilt one or more rotors which is more mechanically complicated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is no restriction to only 4 props, hexa+ coptors are also very common.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Generally you want an even number of props unless you are tilting so the yaw forces balance out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Choosing the exact number of propellers used involves many complicated tradeoffs.  A single prop cannot be too large or the inertia makes the multicopter unstable (which is why you see more props instead of larger props for large multirotors).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Large propellers are far, far, more efficient than many small propellers which is why there is essentially a size cap on multicoptors (unless you go variable/collective pitch which would be stupid).&lt;/p&gt;&#xA;" OwnerUserId="65" LastEditorUserId="65" LastEditDate="2012-11-27T23:09:49.420" LastActivityDate="2012-11-27T23:09:49.420" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="550" PostTypeId="1" CreationDate="2012-11-27T23:04:05.027" Score="19" ViewCount="8738" Body="&lt;p&gt;Lets say I drop a robot into a featureless environment and any magnetic field based sensors (magnetometer/compass) are not allowed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What methods are there of determining where north is?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Tracking the sun/stars is an option but not reliable enough when the weather is considered.&#xA;Can you pick up the rotation of the earth using gyros?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any more clever solutions?&lt;/p&gt;&#xA;" OwnerUserId="65" LastActivityDate="2013-01-25T16:35:13.470" Title="How To Determine Heading Without Compass" Tags="&lt;localization&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="551" PostTypeId="2" ParentId="446" CreationDate="2012-11-27T23:24:11.500" Score="2" Body="&lt;p&gt;Formulas do exist but when DIYing something like this there will be too much uncertainty in the required variables.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is an extremely basic way of going through the calculations:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You need to start with the required force delivered to the table at given speeds.  Generally this will be the cutting force + way friction.  Cutting speed/feed and force can be looked up from tables for given material/cutter combinations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For high performance mills acceleration is a greater constraint than cutting force and should be used instead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Way friction depends on what you are using for linear motion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you know how much force you need to apply to the table at a given speed its pretty straightforward to figure out what motor you need.  Put the numbers through screw reduction/efficiency and pick a motor/reduction combination based on the torque/speed charts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Don't forget to use a 2-6x safety margin.&#xA;Holding torque is not usable torque and should be approximately halved if operating torque is not given.&lt;/p&gt;&#xA;" OwnerUserId="65" LastActivityDate="2012-11-27T23:24:11.500" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="552" PostTypeId="2" ParentId="535" CreationDate="2012-11-27T23:36:19.857" Score="6" Body="&lt;p&gt;The Arduino has always been horifically underpowered.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can get a &lt;em&gt;stack&lt;/em&gt; of stm discovery or other ARM based dev board for the price of a single arduino, and each one of those boards will be orders of magnitude more powerful than the arduino.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ubiquity of the arduino has also hampered many projects that should have known better.  Quadrotor stabilization and Reprap style g-code execution are two major areas where the arduino has been forced well beyond its capabilities and it shows. (The ardrupilot project needs &lt;em&gt;three&lt;/em&gt; arduinos.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hopefully the teensy/due/leaflabs stuff will help make ARM development more friendly.  Many of the newer/better projects such as smoothie, openpilot etc have also made the jump.&lt;/p&gt;&#xA;" OwnerUserId="65" LastActivityDate="2012-11-27T23:36:19.857" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="553" PostTypeId="2" ParentId="550" CreationDate="2012-11-28T00:29:31.470" Score="23" Body="&lt;p&gt;Wilderness survival might be a better place to look for &quot;finding north without a compass&quot; than in robotics, but here are some electronic adaptations of those techniques that might actually work on a robot.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Finding North&lt;/h1&gt;&#xA;&#xA;&lt;h2&gt;GPS method&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Of course, your first choice would be to use a GPS -- the line between each pair of fixes will give you your direction of travel (but it won't work while you're standing still).  If you want something that works while you're standing still (and your vehicle is large enough), you could just use 2 GPS units spaced as far apart on the chassis as possible and measure the angle between them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/rKr0w.jpg&quot; alt=&quot;Bearing between 2 points])&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Full question here: &lt;a href=&quot;https://stackoverflow.com/questions/8123049/calculate-bearing-between-two-locations-lat-long&quot;&gt;https://stackoverflow.com/questions/8123049/calculate-bearing-between-two-locations-lat-long&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is by far the easiest and best way, but to make things really interesting, here are some other possible-yet-impractical approaches.  &lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Shadow-stick method&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/GnFX7.png&quot; alt=&quot;Using a stick to cast a shadow and determine north&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Have the robot use its camera to watch its shadow for 10 or 15 minutes, and note the movement of the shadow.  Making a robot able to recognize its own silhouette is a problem in itself, but this is certainly an interesting thing to do with computer vision!&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Analog Watch Method&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/IObpU.jpg&quot; alt=&quot;Using an analog watch&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you can point a camera at an analog watch, you can take advantage of the fact that the hour hand makes two revolutions in 24 hours (while the sun only makes one).  If you just make an analog clock of your own that rotates once every 24 hours, you can just point the 0:00 mark at the sun and the arm will point north.  It won't work at night.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Keeping North&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Once you find north using the sun, you'll have to keep a good estimate of where it is while moving -- weather and time of day would prevent you from measuring it continuously.  There are a few ways to do this:&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;GPS&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Again, the best possible option.  A pair of GPSes would be even better.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;INS&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Inertial Navigation Systems can give you a decent approximation of angular position by doubly integrating the (measured) angular acceleration.  You'll inevitably accumulate errors over time, but you can mitigate those errors by buying progressively more expensive INS units (seriously, they can cost into the tens of thousands of dollars).  Assuming you know the initial heading, the INS can track it from there.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Visual SLAM&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;You could use visual landmarks to keep a sense of which way is north.  Since you said it was a featureless environment, that's probably not going to work.  On the other hand, I don't know of any places in the great outdoors on earth that would count as &quot;featureless&quot;.  Here is one possible resource for that: &lt;a href=&quot;http://www.cvlibs.net/publications/icra11.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.cvlibs.net/publications/icra11.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Triangulation&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;You could also drop your own markers, and use surveying techniques to keep your bearings.&lt;br&gt;&#xA;&lt;img src=&quot;https://i.stack.imgur.com/gCW5O.gif&quot; alt=&quot;Example triangulation techniques&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="-1" LastEditDate="2017-05-23T12:37:11.430" LastActivityDate="2013-01-25T16:35:13.470" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="554" PostTypeId="1" AcceptedAnswerId="562" CreationDate="2012-11-28T03:38:24.880" Score="35" ViewCount="44301" Body="&lt;p&gt;I'm trying to find where additional battery capacity becomes worthless in relation to the added weight in terms of a quadcopter. Currently with a 5500 mAh battery, 11.1V, I can get between 12 minutes and 12:30 flight time out of it. My question, then, is this - within the quads lifting capability of course, is there any way to find out where the added weight of a larger battery (or more batteries) cancels out any flight time improvement? Obviously it's not going to be as long as two separate flights, landing and swapping batteries; I'm just trying to maximize my continuous 'in air' time. I'm trying to figure out where the line is (and if I've already crossed it) with tacking bigger batteries onto the quad and seeing diminishing returns. Thanks!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Again, for now presume that the quad is strong enough to lift whatever you throw at it. With one 5500mAh, ~ 470 grams, my max throttle is about 70%)&lt;/p&gt;&#xA;" OwnerUserId="176" LastActivityDate="2015-07-20T20:38:25.160" Title="Quadcopter liPo battery weight/capacity trade off" Tags="&lt;battery&gt;&lt;quadcopter&gt;&lt;power&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="20" ContentLicense="CC BY-SA 3.0" />
  <row Id="555" PostTypeId="2" ParentId="541" CreationDate="2012-11-28T04:14:04.227" Score="20" Body="&lt;p&gt;The best option will depend on the type of terrain you expect to cover.  You want the correct balance of several factors: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;ground pressure&lt;/li&gt;&#xA;&lt;li&gt;traction&lt;/li&gt;&#xA;&lt;li&gt;suspension&lt;/li&gt;&#xA;&lt;li&gt;steering&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Ground pressure&lt;/strong&gt; from tracks is less than ground pressure than wheels, so they're more suited to soft surfaces.  Larger tires can help, but there are limits -- they may not work in something like snow (which is why snowmobiles use tracks).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/eo1gA.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/eo1gAm.jpg&quot; alt=&quot;snowmobile rescuing a stuck 4-wheeler&quot;&gt;&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;(0.75 psi snowmobile tows a 40 psi ATV)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Traction&lt;/strong&gt; from tracks is generally better than wheels, but still depends on the depth and firmness of the tread being adequately matched to the terrain for best results.&lt;br&gt;&#xA;&lt;img src=&quot;https://i.stack.imgur.com/pA0iPm.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Much like a gear, a tire or track engages with the ground underneath it.  Tracks simply put more &quot;teeth&quot; into the ground.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Suspension&lt;/strong&gt; is related to traction; without the ability to conform the tracks or wheels to the terrain, the traction doesn't come into play, and your motors will just spin ineffectively.&lt;br&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/gIVUY.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gIVUYm.jpg&quot; alt=&quot;articulated suspension&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Building good suspension is much more complicated for a tracked vehicle than for a wheeled vehicle, but by no means impossible --&#xA;as shown in this iRobot video: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=KWB3hkjpvKo&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/we5Lfm.png&quot; alt=&quot;suspension&quot;&gt;&lt;/a&gt;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, compare the climbing ability of tracked vehicles to the &lt;a href=&quot;https://www.youtube.com/watch?v=V3hqQ5rv_CI&quot; rel=&quot;nofollow noreferrer&quot;&gt;rocker-bogie system used by the mars rovers&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/14dky.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/14dkym.jpg&quot; alt=&quot;mars rover rocker bogie&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Steering&lt;/strong&gt; is necessary for maneuverability, and this is where wheels can have a significant advantage.  For skid steering, good traction works against you... and in uneven terrain, you might find yourself blocked from lateral movement.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/QgIUt.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QgIUtm.jpg&quot; alt=&quot;Steering difficulty&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are some hybrid approaches -- 4 tracks, non-skid steering -- that approach a &quot;best of both worlds&quot; design: &lt;a href=&quot;http://www.youtube.com/watch?v=bPVicyrU_bQ&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mattracks&lt;/a&gt; and &lt;a href=&quot;http://www.youtube.com/user/Hagglunds1&quot; rel=&quot;nofollow noreferrer&quot;&gt;hagglunds&lt;/a&gt;, for example.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/A2cEr.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/A2cErm.jpg&quot; alt=&quot;Mattracks&quot;&gt;&lt;/a&gt; &lt;a href=&quot;https://i.stack.imgur.com/fCnXy.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fCnXym.jpg&quot; alt=&quot;Hagglunds&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One &lt;strong&gt;very important&lt;/strong&gt; balance to to all of these factors is maintainability.  The complexity of tracks means that there are a lot of ways to break them; you're adding a lot of moving parts that will wear out independently, or be prone to dirt and debris causing trouble.  Troubleshooting tracks will be more difficult than wheels, and tracks will be more difficult to service.  So from a durability standpoint, if you can get away with wheels then use wheels. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Y9Lhy.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Y9Lhym.jpg&quot; alt=&quot;tread fixing&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/TbQGC.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/TbQGCm.jpg&quot; alt=&quot;tread fixing&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2013-01-25T19:40:42.750" LastActivityDate="2013-01-25T19:40:42.750" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="556" PostTypeId="1" AcceptedAnswerId="576" CreationDate="2012-11-28T05:02:11.690" Score="6" ViewCount="1125" Body="&lt;p&gt;Do I need a complex system (of gyros, accelerometers etc.) to detect if a robot has moved forward or can I simply use an accelerometer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm building a robot that learns to walk and I need to detect displacement for machine learning. Can I use an accelerometer or will I need a complicated/expensive Internal Navigation System?&lt;/p&gt;&#xA;" OwnerUserId="374" LastEditorUserId="350" LastEditDate="2012-11-28T14:59:53.763" LastActivityDate="2012-11-30T17:04:30.217" Title="Is an accelerometer sufficient to detect displacement, or do I need an INS?" Tags="&lt;slam&gt;&lt;machine-learning&gt;&lt;deduced-reckoning&gt;&lt;gyroscope&gt;&lt;accelerometer&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="557" PostTypeId="2" ParentId="535" CreationDate="2012-11-28T06:53:34.403" Score="2" Body="&lt;p&gt;For the price of an Arduino Uno, or less, a recent alternative is the &lt;a href=&quot;http://www.ti.com/ww/en/launchpad/stellaris_head.html?DCMP=stellaris-launchpad&amp;amp;HQS=stellaris-launchpad-b&quot; rel=&quot;nofollow&quot;&gt;TI Stellaris Launchpad&lt;/a&gt; at $12.99 (including world-wide FedEx): Arm Cortex M4 with an excellent built-in library set called StellarisWare that resides on ROM - so your Flash and RAM remain free for application use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Massively higher computational power than the Arduino Uno, but so far without the ubiquitous community participation that Arduino has garnered.&lt;/p&gt;&#xA;" OwnerUserId="109" LastActivityDate="2012-11-28T06:53:34.403" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="558" PostTypeId="1" CreationDate="2012-11-28T13:46:12.110" Score="17" ViewCount="2034" Body="&lt;p&gt;Typically Mars rovers use wheels and not tracks. I guess &lt;a href=&quot;http://en.wikipedia.org/wiki/Spirit_rover&quot;&gt;Spirit&lt;/a&gt; would have better chances getting out of that soft soil should it have tracks. In general, Mars surface structure is not known in advance, so it seems wiser to be prepaired for difficult terrain and so use tracks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why do Mars rovers typically use wheels and not tracks?&lt;/p&gt;&#xA;" OwnerUserId="516" LastEditorUserId="350" LastEditDate="2012-11-28T15:00:02.390" LastActivityDate="2012-11-29T10:27:22.223" Title="Why do Mars rovers designers prefer wheels over tracks?" Tags="&lt;mobile-robot&gt;&lt;design&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="559" PostTypeId="2" ParentId="558" CreationDate="2012-11-28T13:59:21.113" Score="11" Body="&lt;p&gt;There are multiple reasons wheels may be prefered over treads. The main ones that apply to the mars rovers I would put as:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Mass is a critical property, especially for space exploration missions. Treads are generally heavier than wheels.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Treaded vehicles only support skid steering and are thus less precise to manouver. They also take more power when turning.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;For space exploration simplicity is key. A wheel has less moving parts that can get damaged. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Material properties also have to be taken into account to fit the environmental conditions. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="127" LastEditorUserId="127" LastEditDate="2012-11-29T10:27:22.223" LastActivityDate="2012-11-29T10:27:22.223" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="560" PostTypeId="2" ParentId="558" CreationDate="2012-11-28T14:04:08.380" Score="11" Body="&lt;p&gt;I think the surface of mars was &lt;a href=&quot;http://www.space.com/12404-mars-explored-landers-rovers-1971.html&quot;&gt;pretty well known&lt;/a&gt; by the time Spirit / Op landed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://en.wikipedia.org/wiki/Rocker-bogie&quot;&gt;rocker-bogie&lt;/a&gt; system allows the robot to climb over obstacles up to twice the diameter of the wheels, while avoiding springs completely. Springs could cause the chassis to tilt on uneven terrain. Watch this video: &lt;a href=&quot;https://www.youtube.com/watch?v=ON1zLBvYKRI&quot;&gt;https://www.youtube.com/watch?v=ON1zLBvYKRI&lt;/a&gt;, and imagine how much the chassis would tilt if it were suspended by a spring-based system or if the wheels were attached to each other by treads.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Jet Propulsion Laboratory has a good video on this, actually. &lt;a href=&quot;http://www-a.jpl.nasa.gov/video/index.php?all_videos&amp;amp;id=932&quot;&gt;http://www-a.jpl.nasa.gov/video/index.php?all_videos&amp;amp;id=932&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="163" LastActivityDate="2012-11-28T14:04:08.380" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="561" PostTypeId="2" ParentId="556" CreationDate="2012-11-28T14:06:06.960" Score="2" Body="&lt;p&gt;Measuring if something has moved is ok with just accelerometers, how much and where not. You may need to specify your application a little better, but it sounds like you should use an external tracking system (e.g. camera based) instead. You might also use something simple like an ultrasonic sensor to get the distance your robot has moved, if you are looking for low-cost. &lt;/p&gt;&#xA;" OwnerUserId="127" LastActivityDate="2012-11-28T14:06:06.960" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="562" PostTypeId="2" ParentId="554" CreationDate="2012-11-28T15:15:27.690" Score="41" Body="&lt;p&gt;For quadcopter designs, you generally want to have around a 2:1 &lt;a href=&quot;https://en.wikipedia.org/wiki/Thrust-to-weight_ratio&quot; rel=&quot;noreferrer&quot;&gt;thrust-to-weight ratio&lt;/a&gt;. That is, at 100% throttle, you want your combined propeller thrust to be capable of lifting two times the weight of the craft.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You then need to determine the amount of power the motors need to generate that thrust (usually given on the datasheet). When you have that amount of power, you can easily calculate the amount of time your battery will last.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This page on &lt;a href=&quot;https://code.google.com/p/ro-4-copter/wiki/QuadcopterPerformance&quot; rel=&quot;noreferrer&quot;&gt;Quadcopter Performance&lt;/a&gt; gives a good example:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Looking at the data from the motor performance chart, it looks like&#xA;  the absolute maximum weight the motors can support is 560 each, so&#xA;  2240 grams. This is when the motors are working at 100%, using 95.2&#xA;  watts, which means about 8.6 amps at 11.1 volts.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Looking at the data from the flight weight vs power and battery life&#xA;  graph, it seems that the helicopter should not exceed 61 ounces (1700&#xA;  grams). At that weight, 61 watts of power is used, which is 5.5 amps&#xA;  at 11.1 volts.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/RKru1.jpg&quot; alt=&quot;Flying Weight vs Power &amp;amp; Battery Life&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The graph also shows that one ounce of flight weight would need one&#xA;  watt of power, and the two are linearly correlated. Assuming the craft&#xA;  is 60 ounces, 60 watts of power is needed.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This quote is a bit misleading though. The original author is missing the words &quot;per motor&quot; in their conclusion. 230W/4 motors = 57.5 Watts. That's where they got the &quot;60 ounces needs 60 Watts (per motor)&quot; conclusion. However the general method of plotting performance is beneficial to answering the question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you increase the maximum thrust-to-weight ratio, you can keep your throttle lower, use less power, and stay in the air longer. So you can either increase thrust or decrease weight to achieve longer flight times.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To more concisely answer your question, the point of diminishing returns comes when the additional weight added by the battery brings your thrust-to-weight ratio below 1.5:1 on the low end.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Something else to consider is the &lt;a href=&quot;https://en.wikipedia.org/wiki/Energy_density&quot; rel=&quot;noreferrer&quot;&gt;energy density&lt;/a&gt; of your battery technology. How much power per unit weight the battery is capable of. You're probably using Lithium-ion batteries which are probably the best available from a price to performance perspective. But if you're really trying to get longer flight times without increasing weight, you can consider some of the more esoteric (and much more expensive) technologies out there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://newenergyandfuel.com/http:/newenergyandfuel/com/2009/06/15/battery-research-prospects-grow/battery-specific-energy-list1/&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/5M9Fd.png&quot; alt=&quot;Battery Specific Energy List&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.legitreviews.com/article/887/2/&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Z9Flb.jpg&quot; alt=&quot;Energizer Zinc-Air Battery Comparison&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And it's probably worth mentioning that even within the Lithium-ion category, not all batteries are created equal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://batteryuniversity.com/learn/article/the_high_power_lithium_ion&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/NKfwd.gif&quot; alt=&quot;L-Ion Comparison&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="142" LastEditorUserId="142" LastEditDate="2013-12-04T21:29:19.183" LastActivityDate="2013-12-04T21:29:19.183" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="563" PostTypeId="2" ParentId="558" CreationDate="2012-11-28T15:33:30.080" Score="2" Body="&lt;p&gt;This may not be the biggest reason, but I would imagine that for space vehicles like this, wheels are easier to stow for launch and then deploy for landing.&lt;/p&gt;&#xA;" OwnerUserId="479" LastActivityDate="2012-11-28T15:33:30.080" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="564" PostTypeId="2" ParentId="556" CreationDate="2012-11-28T15:55:02.980" Score="3" Body="&lt;p&gt;You can theoretically use just an accelerometer for determining motion, but it may not be accurate enough to achieve your goals. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The big problem with accelerometers is drift over time (i.e., errors in the acceleration measurement get integrated twice), so your position accuracy significantly decreases over time. The severity of this problem depends on the quality of the accelerometer and the measurement time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you don't need position information and just want some indication that the robot has moved in a particular direction, an accelerometer would do the job. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Otherwise you would want to use some other sensor in conjunction with the accelerometer, in which case you may need some SLAM techniques. You could also switch to another type of system (like external motion capture mentioned in the other answer).&lt;/p&gt;&#xA;" OwnerUserId="479" LastEditorUserId="479" LastEditDate="2012-11-28T23:40:16.957" LastActivityDate="2012-11-28T23:40:16.957" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="565" PostTypeId="1" CreationDate="2012-11-28T16:07:20.107" Score="3" ViewCount="2616" Body="&lt;p&gt;What are the pros and cons of each? Which is better maintained? Which allows for more functionality? Which utilizes the hardware more efficiently? Etc.&lt;/p&gt;&#xA;" OwnerUserId="457" LastEditorUserId="457" LastEditDate="2012-12-05T17:04:11.147" LastActivityDate="2012-12-07T16:50:08.477" Title="Kinect - Libfreenect vs OpenNI+SensorKinect" Tags="&lt;software&gt;&lt;sensors&gt;&lt;kinect&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="1" ClosedDate="2012-12-08T01:39:06.793" ContentLicense="CC BY-SA 3.0" />
  <row Id="566" PostTypeId="1" AcceptedAnswerId="567" CreationDate="2012-11-28T18:58:27.267" Score="7" ViewCount="523" Body="&lt;p&gt;While experimenting with the OpenCV Machine Learning Library, I tried to make an example to learn the inverse kinematics of a 2D, 2 link arm using &lt;a href=&quot;http://docs.opencv.org/modules/ml/doc/decision_trees.html&quot;&gt;decision trees&lt;/a&gt;. The forward kinematics code looks like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;const float Link1 = 1;&#xA;const float Link2 = 2;&#xA;&#xA;CvPoint2D32f forwardKinematics(float alpha, float beta) &#xA;{&#xA;    CvPoint2D32f ret;&#xA;&#xA;    // Simple 2D, 2 link kinematic chain&#xA;    ret.x = Link1 * std::cos(alpha) + Link2 * std::cos(alpha - beta);&#xA;    ret.y = Link1 * std::sin(alpha) + Link2 * std::sin(alpha - beta);&#xA;&#xA;    return ret;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I generate a random set of 1000 (XY -&gt; alpha) and (XY -&gt; beta) pairs, and then use that data to train two decision tree models in OpenCV (one for alpha, one for beta). Then I use the models to predict joint angles for a given XY position. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems like it sometimes gets the right answer, but is wildly inconsistent. I understand that inverse kinematic problems like this have multiple solutions, but some of the answers I get back are just wrong.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this a reasonable thing to try to do, or will it never work? Are there other learning algorithms that would be better suited to this kind of problem than decision trees?&lt;/p&gt;&#xA;" OwnerUserId="479" LastActivityDate="2012-11-29T01:08:25.593" Title="Decision trees for solving 2D inverse kinematics?" Tags="&lt;inverse-kinematics&gt;&lt;machine-learning&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="567" PostTypeId="2" ParentId="566" CreationDate="2012-11-28T20:05:53.197" Score="1" Body="&lt;p&gt;I changed the training set generation to uniformly sample the joint space instead of using random samples, and also restricted the range of the second joint to prevent multiple solutions and singularities. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now the algorithm actually works pretty well, and gives me answers that are reasonably close to the desired position. I'm still not convinced that decision trees are the best algorithm for this problem though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thinking about it some more, I think all I've really done here is build a big lookup table in a fancy way (especially when using a uniform training set).&lt;/p&gt;&#xA;" OwnerUserId="479" LastEditorUserId="479" LastEditDate="2012-11-28T20:37:43.167" LastActivityDate="2012-11-28T20:37:43.167" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="568" PostTypeId="1" AcceptedAnswerId="569" CreationDate="2012-11-28T23:14:15.997" Score="24" ViewCount="27555" Body="&lt;p&gt;Could you implement a simple neural network on a microprocessor such as the Arduino Uno to be used in machine learning?&lt;/p&gt;&#xA;" OwnerUserId="374" LastActivityDate="2017-10-24T12:06:30.013" Title="Is it possible to run a neural network on a microcontroller" Tags="&lt;microcontroller&gt;&lt;machine-learning&gt;" AnswerCount="4" CommentCount="9" FavoriteCount="17" ContentLicense="CC BY-SA 3.0" />
  <row Id="569" PostTypeId="2" ParentId="568" CreationDate="2012-11-28T23:25:21.047" Score="10" Body="&lt;p&gt;Could you &lt;em&gt;train&lt;/em&gt; a neural network on a microcontroller? Maybe, but please don't try. Could you use a NN for classification, etc on a microcontroller? Sure, as long as you can calculate the result of propagating the node and edge values and handle the multiplications.&lt;/p&gt;&#xA;" OwnerUserId="163" LastActivityDate="2012-11-28T23:25:21.047" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="570" PostTypeId="2" ParentId="568" CreationDate="2012-11-28T23:33:06.007" Score="23" Body="&lt;p&gt;It's certainly possible to implement this on an Arduino.  Here are 3 such Arduino libraries that implement neural networks:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://diydrones.com/group/arducopter-evolution-team/forum/topics/neuroduino-a-neural-network-library-for-arduino&quot;&gt;Neuroduino&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://arduinobasics.blogspot.com/2011/08/neural-network-part-1-connection.html&quot;&gt;Arduino Basics&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://robotics.hobbizine.com/arduinoann.html&quot;&gt;ArduinoANN&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The complexity of the network that the Arduino can handle is a separate question, especially when it comes to training -- tens of thousands of iterations on training data.  Training on a fast machine and then copying the neuron weights to the Arduino will be a smarter way to develop your implementation.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2012-11-29T01:55:37.743" LastActivityDate="2012-11-29T01:55:37.743" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="571" PostTypeId="2" ParentId="533" CreationDate="2012-11-29T00:10:15.310" Score="4" Body="&lt;p&gt;&lt;a href=&quot;http://www.moah.org/exhibits/archives/robotman/history/history.html&quot; rel=&quot;nofollow&quot;&gt;This site&lt;/a&gt; gives a great time line of robotics. Keep in mind the origins of robots come well before electricity. As the article describes, the early egyptians designed and constructed simple automatons, which are considered the earliest type of robot. Another starting point worth mentioning is the materials that early robots were made from and continue to present the evolution of carbon fibre and other materials that make robots as amazing as they are today.&lt;/p&gt;&#xA;" OwnerUserId="374" LastEditorUserId="374" LastEditDate="2012-12-19T03:52:39.040" LastActivityDate="2012-12-19T03:52:39.040" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="572" PostTypeId="2" ParentId="566" CreationDate="2012-11-29T01:08:25.593" Score="1" Body="&lt;p&gt;The core problem here is that you are using two decision trees. As I understand it you are training two different decision trees on the same data. You then have one tree predict the required angle $\alpha$ and the other predict the required angle $\beta$. The problem is that $\beta$ is dependent on $\alpha$ but the $\beta$ tree has no concept of this fact. What you need to do is train one tree on both feaures (i.e. $\alpha$ and $\beta$).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In OpenCV each DT node uses a double called &lt;code&gt;value&lt;/code&gt; to store the splitting value for that node and it uses an integer called &lt;code&gt;class_idx&lt;/code&gt; to determine which feature to split on at any given level. When you train the DT you need to supply it with a matrix. Conventionally each row of the matrix is a feature vector and each column is an individual feature. However it appears that this is configurable in the OpenCV implementation by using the &lt;code&gt;tflag&lt;/code&gt; (Cool!). Using the conventional method you would need to create an $m{\times}n$ matrix where $m = 1000$ is the number of training samples and $n = 2$.&lt;/p&gt;&#xA;" OwnerUserId="177" LastActivityDate="2012-11-29T01:08:25.593" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="573" PostTypeId="2" ParentId="554" CreationDate="2012-11-29T10:50:10.763" Score="6" Body="&lt;p&gt;&lt;strong&gt;The batteries should weigh roughly the same as everything else on the airframe combined.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With a given aircraft -- everything known except for the mass of the batteries -- the absolute maximum flight time occurs when the weight of the batteries is twice as much as the weight of everything else on the airframe combined.&#xA;However, many other characteristics -- time to get up to altitude, responsiveness, avoiding stall, etc. -- work better with less battery weight, so a better rule of thumb is batteries roughly the same (one times) the weight of everything else combined.&#xA;Reference: Andres 2011. &lt;a href=&quot;http://api.ning.com/files/aFMLPsgnHmZXdNMAY8PM0KekqE4uAQSMx2C*usF6KDpKiqpO4L9-hrUKYBsS-xtRMqo-K4GR5TPsM2Isq56oMw__/battery_capacity.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Optimal Battery Capacity&lt;/a&gt;. via &lt;a href=&quot;http://www.heino.com/?page_id=24443&quot; rel=&quot;nofollow noreferrer&quot;&gt;Heino R. Pull&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This rule of thumb applies to all kinds of battery-powered aircraft -- fixed-wing, quadcopters, helicopters etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Forgive me for recycling my answer to &lt;a href=&quot;https://robotics.stackexchange.com/questions/262/effectiveness-of-a-mobile-robot-in-relation-to-mass/305#305&quot;&gt;Effectiveness of a Mobile Robot In Relation To Mass&lt;/a&gt; ).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: fixed a self-contradictory sentence -- thanks, Gustav.&lt;/p&gt;&#xA;" OwnerUserId="187" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2014-08-19T19:46:09.647" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="575" PostTypeId="2" ParentId="520" CreationDate="2012-11-29T14:05:52.013" Score="7" Body="&lt;p&gt;I interpret your question to read, that you want to directly manufacture the lens through an additive process.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My experience with this recently is that it basically isn't possible (practically anyway). Even injection molding lenses of good quality is quite an art. There is a reason that optical-quality glass lenses are so expensive. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;More specifically, we tried to make a custom LED focusing lens using stereo-lithography in a range of PC, PE, PTFE, and (even!) PVC-type plastics. In all cases we had trouble achieving sufficient optical clarity, uniform density, and dimensional accuracy. Granted, we were making a small lens (about 11mm diameter), but it was suspended across an integrated holder (causing a lot of the same problems you'll face if you try to fabricate just a lens in isolation).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know this has been a bit of a hand-wavy response, but hopefully it's at least a little helpful. If anyone else has any better experiences with this, I'd love to hear about it.&lt;/p&gt;&#xA;" OwnerUserId="531" LastActivityDate="2012-11-29T14:05:52.013" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="576" PostTypeId="2" ParentId="556" CreationDate="2012-11-29T15:04:32.690" Score="2" Body="&lt;p&gt;For simple motion detection, you might take a look at these:&lt;a href=&quot;http://www.st.com/internet/analog/product/250725.jsp&quot; rel=&quot;nofollow&quot;&gt;LIS3DH&lt;/a&gt;, &lt;a href=&quot;http://www.st.com/internet/analog/product/252443.jsp&quot; rel=&quot;nofollow&quot;&gt;L3GD20&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you would like to look at more complex options, you might take a look at this package: &lt;a href=&quot;http://www.st.com/internet/analog/product/253162.jsp&quot; rel=&quot;nofollow&quot;&gt;INEMO-M1&lt;/a&gt;. I'm using this package in a 3D motion tracking application.  It is relatively cheap, and it's integrated sensor fusion provides the most robust measure of displacement I've found.  (Accelerometer drift is minimized, output is smooth, etc.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, the fall detection and click/double-tap recognition features found on this part &#xA;may assist in a walking application: &lt;a href=&quot;http://www.st.com/internet/analog/product/152913.jsp&quot; rel=&quot;nofollow&quot;&gt;LIS302DL&lt;/a&gt;.  As an example, the free-fall detection (which may be slightly misnamed since motion triggers can be set on any axis) can assist with detection of leg motion.  The tap/double-tap feature could assist in detecting leg contact with the walking surface.&lt;/p&gt;&#xA;" OwnerUserId="532" LastEditorUserId="308" LastEditDate="2012-11-30T17:04:30.217" LastActivityDate="2012-11-30T17:04:30.217" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="577" PostTypeId="2" ParentId="550" CreationDate="2012-11-29T17:02:28.543" Score="8" Body="&lt;p&gt;Many gyros are sensitive enough to detect the Earth's rotation, and so get an estimate of &quot;true North&quot; (rotational North, as opposed to magnetic North).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've been told the first person to detect the rotation of the Earth using a gyroscope was Léon Foucault, in 1852. ( &lt;a href=&quot;http://en.wikipedia.org/wiki/Gyroscope#History&quot;&gt;a&lt;/a&gt; )&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That is the operating principle of the &lt;a href=&quot;http://en.wikipedia.org/wiki/Gyrocompass&quot;&gt;gyrocompass&lt;/a&gt; and the &lt;a href=&quot;http://en.wikipedia.org/wiki/Gyrotheodolite&quot;&gt;gyro-theodolite&lt;/a&gt;,&#xA;which are used to find true north on many ocean-going ships and in underground tunnels.&#xA;They can directly find North from a cold start.&#xA;(Unlike the &quot;&lt;a href=&quot;http://en.wikipedia.org/wiki/directional_gyro&quot;&gt;directional gyro&lt;/a&gt;&quot; in most small planes).&lt;/p&gt;&#xA;" OwnerUserId="187" LastActivityDate="2012-11-29T17:02:28.543" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="578" PostTypeId="1" AcceptedAnswerId="582" CreationDate="2012-11-29T19:15:24.753" Score="6" ViewCount="1041" Body="&lt;p&gt;We have an optional course in our high-school which is about robotics. We're using the Lego Mindstorms NXT and program it with the original Mindstorms-software.&#xA;However, we want to advance and use a major programming-language. We have tried NXC and LeJos. Plus, I tried out the Microsoft Robotics Development Studio, but with all these different possibilities we are a little bit overwhelmed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because of that (now it becomes interesting), I want to ask, what technology is the best for NXT and especially: What is easy to use? I don't want to need 14 steps just to compile a program and get it running on the NXT. Also, it would be nice, if it's an extend-able language, like using C#, but are there some better or easier possibilities?&lt;/p&gt;&#xA;" OwnerUserId="534" LastEditorUserId="38" LastEditDate="2012-12-13T07:17:05.543" LastActivityDate="2013-06-10T20:25:31.547" Title="Which programming language should I use with the NXT?" Tags="&lt;programming-languages&gt;&lt;nxt&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="1" ClosedDate="2013-12-08T21:21:36.753" ContentLicense="CC BY-SA 3.0" />
  <row Id="579" PostTypeId="2" ParentId="578" CreationDate="2012-11-29T20:41:07.220" Score="3" Body="&lt;p&gt;The kit supplied NXT software is a bit basic, agreed... but before trying anything more complex, I can commend &lt;a href=&quot;http://www.ni.com/academic/mindstorms/&quot; rel=&quot;nofollow&quot;&gt;NI LabView for NXT&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not only is this an improvement on the NXT-G but this gives you an introduction to LabView which is widely used in the Real World for data acquisition and test systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm sure there must be a C/C# API out there (I've not looked though)&lt;/p&gt;&#xA;" OwnerUserId="134" LastEditorUserId="134" LastEditDate="2012-12-03T20:10:48.817" LastActivityDate="2012-12-03T20:10:48.817" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="580" PostTypeId="5" CreationDate="2012-11-29T21:18:58.117" Score="0" Body="&lt;p&gt;Software, is any set of machine-readable instructions (most often in the form of a computer program) that directs a computer's processor to perform specific operations. The term is used to contrast with computer hardware, the physical objects (processor and related devices) that carry out the instructions. Hardware and software require each other and neither has any value without the other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Software covers a multitude of aspects within a robotic system - eg: motor control, control algorithms, communications, displays etc as well as FPGA/PLD configration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;software&lt;/code&gt; is somewhat broad and should normally be used in conjunction with other tags to focus the question.&lt;/p&gt;&#xA;" OwnerUserId="134" LastEditorUserId="40" LastEditDate="2013-09-02T04:39:03.377" LastActivityDate="2013-09-02T04:39:03.377" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="581" PostTypeId="4" CreationDate="2012-11-29T21:18:58.117" Score="0" Body="A set of machine-readable instructions (most often in the form of a computer program) that directs a computer's processor to perform specific operations." OwnerUserId="40" LastEditorUserId="40" LastEditDate="2013-09-02T04:37:43.090" LastActivityDate="2013-09-02T04:37:43.090" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="582" PostTypeId="2" ParentId="578" CreationDate="2012-11-29T22:23:50.640" Score="8" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;&quot;We have tried NXC and LeJos. Plus, I tried out the Microsoft Robotics Development Studio, but with all these different possibilities we are a little bit overwhelmed.&quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That basically leaves &lt;a href=&quot;http://www.robotc.net/index.php&quot; rel=&quot;nofollow&quot;&gt;RobotC&lt;/a&gt; - which is easier to use, and reasonably powerful. As it is based on C, you will not find it as powerful a language as JAVA (LeJOS), but robotics stuff is built in (motors/encoders, reading sensors, I2C, bluetooth). It does include a good IDE and debugging system, something NXC and LeJOS are missing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MRDS is really not suited for NXT since it does not run on the NXT:, it is simply a remote control system. You can look at &lt;a href=&quot;http://www.mindsqualls.net/&quot; rel=&quot;nofollow&quot;&gt;mindsqualls&lt;/a&gt; for an alternative and not quite as complicated C# remote control system if that is acceptable to your project/studies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A few people have ported &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/ee436350.aspx&quot; rel=&quot;nofollow&quot;&gt;MF (micro frameworks C#)&lt;/a&gt; to the NXT but there was 0 room left, making it very impractical.&lt;/p&gt;&#xA;" OwnerUserId="274" LastEditorUserId="350" LastEditDate="2013-06-10T20:25:31.547" LastActivityDate="2013-06-10T20:25:31.547" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="583" PostTypeId="1" CreationDate="2012-11-30T08:53:51.253" Score="6" ViewCount="2857" Body="&lt;p&gt;I have a manipulator having 4 revolute joints with some movement limitations. So, when I apply inverse kinematics, I'm getting results which are out of limits. Please provide me an algorithm that implements inverse kinematics considering joint limitations.&lt;/p&gt;&#xA;" OwnerUserId="536" LastEditorUserId="177" LastEditDate="2012-12-01T15:30:01.963" LastActivityDate="2012-12-03T23:15:18.693" Title="Inverse kinematics with joint contraints" Tags="&lt;inverse-kinematics&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="584" PostTypeId="2" ParentId="583" CreationDate="2012-11-30T10:39:48.760" Score="3" Body="&lt;p&gt;4 joints gives you 4 degrees of freedom only. Therefore, if you use inverse kinematics on the full 6 degrees of freedom, not all positions have a solution, and if it does, it there is generally only one unique solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am therefore assuming that you are only trying to fix some of the positions, for example, x, y and z coordinates, but not the orientation (the 3 rotation axes) of the end effector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is a non-linear system, however, at any point, you can linearise it. It is likely that the inverse kinematics applied already repeatedly linearises the problem and performs some type of gradient descent.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To alter a solution, you can find the null-space of the linearised system of equations, and use that vector to modify your solution towards the joint limits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To do this, you simply differentiate your system of equations to obtain a linearisation, so for example, you get:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\Delta \alpha \vec{a}+\Delta \beta\vec{b}+\Delta \gamma\vec{c}+\Delta \delta\vec{d}=&#xA;\left[\begin{matrix}\vec{a}&amp;amp;\vec{b}&amp;amp;\vec{c}&amp;amp;\vec{d}\end{matrix}\right]&#xA;\left[\begin{matrix}\Delta \alpha \\\Delta \beta\\\Delta \gamma\\\Delta \delta\end{matrix}\right]&#xA;=&#xA;\left[\begin{matrix}\Delta x\\\Delta y\\\Delta z\end{matrix}\right]$, where $\alpha$, $\beta$, $\gamma$, $\delta$ are the angles of the revolute joints, with appropriate coefficients.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finding the null-space means finding the $\Delta \alpha$, $\Delta \beta$, $\Delta \gamma$, $\Delta \delta$ such that $\Delta x, \Delta y, \Delta z = 0$. You can do this easily (choose from gaussian elimination, matrix divide etc.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you modify the angles by a small multiple of the null-space vector over many iterations, you should eventually get within the joint constraints (if it is possible). You just need to decide on the direction (check each angle, and if it is not within range, it should provide the appropriate angle).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your inverse kinematics algorithm/code takes initial joint angles to start it off, you can put the new joint angles back in here so that the x, y and z positions don't drift away from the desired positions. This also allows you to take larger steps with the null-space vector (which otherwise tends to make the position tracked start to become less inaccurate).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In some cases, the null-space may contain more than one vector. This would occur if you only wanted to fix two of the degrees of freedom. In this case, in each iteration, you can modify using only one or both of the vectors. Similar logic can be applied to get the angles within the constraints - just decide on the direction in which to apply each vector by checking if each revolute joint angle is within the constraints, and if not, it will give you a direction to apply the vector.&lt;/p&gt;&#xA;" OwnerUserId="145" LastActivityDate="2012-11-30T10:39:48.760" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="585" PostTypeId="1" AcceptedAnswerId="598" CreationDate="2012-11-30T13:47:48.713" Score="-9" ViewCount="2231" Body="&lt;p&gt;I want to know if its currently possible for a robot to speak by it self as &lt;code&gt;King Robota&lt;/code&gt; does, or is just someone speaking on his behalf?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=UYI2UDpQtv4&quot; rel=&quot;nofollow&quot;&gt;Youtube video&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="537" LastEditorUserId="537" LastEditDate="2012-11-30T15:29:33.677" LastActivityDate="2013-09-12T03:47:44.650" Title="King Robota: Does he speak for himself?" Tags="&lt;control&gt;&lt;software&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="0" ClosedDate="2014-02-24T21:14:36.997" ContentLicense="CC BY-SA 3.0" />
  <row Id="586" PostTypeId="5" CreationDate="2012-11-30T14:14:42.977" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2012-11-30T14:14:42.977" LastActivityDate="2012-11-30T14:14:42.977" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="587" PostTypeId="4" CreationDate="2012-11-30T14:14:42.977" Score="0" Body="Hierarchical Markov Model" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2012-11-30T17:04:02.403" LastActivityDate="2012-11-30T17:04:02.403" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="588" PostTypeId="5" CreationDate="2012-11-30T14:16:14.923" Score="0" Body="&lt;p&gt;used to encode known relationships between observations and construct consistent interpretations&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2012-11-30T17:03:35.813" LastActivityDate="2012-11-30T17:03:35.813" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="589" PostTypeId="4" CreationDate="2012-11-30T14:16:14.923" Score="0" Body="Conditional Random Field" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2012-11-30T17:03:27.263" LastActivityDate="2012-11-30T17:03:27.263" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="590" PostTypeId="5" CreationDate="2012-11-30T14:17:01.553" Score="0" Body="&lt;p&gt;Used for minimizing the difference between two clouds of points&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2012-11-30T17:04:42.713" LastActivityDate="2012-11-30T17:04:42.713" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="591" PostTypeId="4" CreationDate="2012-11-30T14:17:01.553" Score="0" Body="Iterative Closest Point" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2012-11-30T17:03:24.747" LastActivityDate="2012-11-30T17:03:24.747" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="592" PostTypeId="5" CreationDate="2012-11-30T14:22:05.873" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2012-11-30T14:22:05.873" LastActivityDate="2012-11-30T14:22:05.873" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="593" PostTypeId="4" CreationDate="2012-11-30T14:22:05.873" Score="0" Body="Tank treads -- continuous tracks" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2012-11-30T17:04:34.837" LastActivityDate="2012-11-30T17:04:34.837" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="594" PostTypeId="5" CreationDate="2012-11-30T14:26:10.287" Score="0" Body="&lt;p&gt;an electronic device that measures and reports its velocity, orientation, and gravitational force&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2012-11-30T17:04:39.920" LastActivityDate="2012-11-30T17:04:39.920" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="595" PostTypeId="4" CreationDate="2012-11-30T14:26:10.287" Score="0" Body="Inertial Measurement Unit" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2012-11-30T17:04:46.287" LastActivityDate="2012-11-30T17:04:46.287" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="596" PostTypeId="5" CreationDate="2012-11-30T14:26:44.437" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2012-11-30T14:26:44.437" LastActivityDate="2012-11-30T14:26:44.437" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="597" PostTypeId="4" CreationDate="2012-11-30T14:26:44.437" Score="0" Body="Human-Robot Interaction" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2012-11-30T17:03:57.520" LastActivityDate="2012-11-30T17:03:57.520" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="598" PostTypeId="2" ParentId="585" CreationDate="2012-11-30T15:26:04.053" Score="3" Body="&lt;p&gt;Not only is a human voice behind this (likely through a vocoder), I believe you are looking at a mechanized costume and not an actual robot -- &lt;a href=&quot;http://kingrobota.com/faq.html&quot; rel=&quot;nofollow&quot;&gt;someone is inside&lt;/a&gt;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using fake robots to attract crowds has worked since &lt;a href=&quot;http://www.youtube.com/watch?v=T35A3g_GvSg&quot; rel=&quot;nofollow&quot;&gt;&quot;Elektro&quot; at the 1939 World's Fair (video)&lt;/a&gt;.  You can also &lt;a href=&quot;http://digitaldiscountproducts.com/WP/2012/04/18/start-your-own-robot-business-2012/&quot; rel=&quot;nofollow&quot;&gt;buy your own King Robota suit&lt;/a&gt; if you want to take up this form of entertainment yourself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A more interesting question is how the costume's mouth reacts to the incoming speech, to emulate actual speaking.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2012-11-30T15:53:51.763" LastActivityDate="2012-11-30T15:53:51.763" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="599" PostTypeId="1" AcceptedAnswerId="612" CreationDate="2012-11-30T16:04:26.703" Score="10" ViewCount="457" Body="&lt;p&gt;According to &lt;a href=&quot;http://en.wikipedia.org/wiki/Simultaneous_localization_and_mapping&quot;&gt;Wikipedia's article on SLAM&lt;/a&gt;, the original idea came from Randal Smith and Peter Cheeseman (&lt;em&gt;&lt;a href=&quot;http://www.frc.ri.cmu.edu/~hpm/project.archive/reference.file/Smith&amp;amp;Cheeseman.pdf&quot;&gt;On the Estimation and Representation of Spatial Uncertainty&lt;/a&gt;&lt;/em&gt; [PDF]) in 1986, and was refined by Hugh F. Durrant-Whyte and J.J. Leonard (&lt;em&gt;&lt;a href=&quot;http://ieeexplore.ieee.org/xpl/login.jsp?tp=&amp;amp;arnumber=174711&amp;amp;url=http%3A%2F%2Fieeexplore.ieee.org%2Fxpls%2Fabs_all.jsp%3Farnumber%3D174711&quot;&gt;Simultaneous map building and localization for an autonomous mobile robot&lt;/a&gt;&lt;/em&gt;) in 1991. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, neither paper uses the term &quot;SLAM&quot;.  Where (and when) did that term come from?  Was there a particular author or whitepaper that popularized it?&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="417" LastEditDate="2012-12-01T15:30:11.697" LastActivityDate="2012-12-03T10:09:49.077" Title="Who coined (or popularized) the term &quot;SLAM&quot;?" Tags="&lt;slam&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="600" PostTypeId="2" ParentId="167" CreationDate="2012-11-30T16:46:07.670" Score="0" Body="&lt;p&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Ziegler%E2%80%93Nichols_method&quot; rel=&quot;nofollow&quot;&gt;Ziegler-Nichols&lt;/a&gt; is an easy manual method.  More robust methods also exist - these usually rely on mathematical solutions (analytic, iterative optimization, etc.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beyond that, google &quot;self-tuning PID&quot; for some automated techniques.  My favorite is the application of neural networks to PID tuning.&lt;/p&gt;&#xA;" OwnerUserId="532" LastActivityDate="2012-11-30T16:46:07.670" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="601" PostTypeId="2" ParentId="271" CreationDate="2012-11-30T17:22:30.420" Score="2" Body="&lt;p&gt;Depending on how much you wanted to play with the GPS signals, you could use some form of differential GPS to calculate their relative positions way more precisely&#xA;than using the WGS84 outputs would give you. Basically this would remove most of the inaccuracies coming from atmospheric effects and ephemeris errors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The exact precision would depend on the receivers and algorithms used, especially whether you would also use carrier phase differencing. ... but my wild guess is you could get to 1 or 2 meters precision.&lt;/p&gt;&#xA;" OwnerUserId="482" LastActivityDate="2012-11-30T17:22:30.420" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="602" PostTypeId="1" AcceptedAnswerId="605" CreationDate="2012-11-30T17:38:20.133" Score="6" ViewCount="481" Body="&lt;p&gt;I've got a couple &lt;a href=&quot;http://www.vexrobotics.com/276-2181.html&quot; rel=&quot;noreferrer&quot;&gt;Vex 269 Motors&lt;/a&gt; hooked up to an &lt;a href=&quot;http://www.arduino.cc/en/Main/ArduinoBoardDuemilanove&quot; rel=&quot;noreferrer&quot;&gt;Arduino Duemilanove&lt;/a&gt;. These motors run a some &lt;a href=&quot;http://www.vexrobotics.com/276-2168.html&quot; rel=&quot;noreferrer&quot;&gt;Vex Tank Treads&lt;/a&gt;. I powered the whole setup with an off-brand 9-volt battery. Everything seems to run great, except that it is only able to run for about 30 seconds worth of motor movement. Then the battery quickly isn't able to pump out the energy needed to move the treads and the whole thing quickly slows to being unusable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What's my problem here? The tank treads seem loose enough that I don't think they're so restricting the motor has to pump out too much energy to move them. There's nothing else being powered except the Arduino and the motors. Is it because this Enercell 9-volt (alkaline) is just a terrible battery choice? Should I only expect that long of battery life for this robot on a 9-volt? Or is there something else I'm missing? Thank you much!&lt;/p&gt;&#xA;" OwnerUserId="457" LastEditorUserId="350" LastEditDate="2012-11-30T20:11:46.663" LastActivityDate="2019-02-18T01:48:45.880" Title="Vex motors and tank treads drained 9-volt battery more quickly than expected" Tags="&lt;battery&gt;&lt;tracks&gt;&lt;troubleshooting&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="603" PostTypeId="1" AcceptedAnswerId="604" CreationDate="2012-11-30T17:50:31.360" Score="12" ViewCount="1159" Body="&lt;p&gt;I've got a couple &lt;a href=&quot;http://www.vexrobotics.com/276-2181.html&quot;&gt;Vex 269 Motors&lt;/a&gt; hooked up to an &lt;a href=&quot;http://www.arduino.cc/en/Main/ArduinoBoardDuemilanove&quot;&gt;Arduino Duemilanove&lt;/a&gt;. These motors run a some &lt;a href=&quot;http://www.vexrobotics.com/276-2168.html&quot;&gt;Vex Tank Treads&lt;/a&gt;. The two motors are run as servos on the Arduino using the Servo Library. The problem I'm having is that the two tracks don't turn at the same speed when sent the same servo angle. This is clearly due to the fact that the continuous tracks have so many moving parts that having identical friction forces on each track is hard to get.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How do I get them to move the same speed? Should they be moving the same speed given the same servo angle regardless of the friction and the Vex 269 Motors just aren't strong enough (meaning I should use the Vex 369 or some other more powerful motor)? Is it best to just doing trial and error long enough to figure out which servo angle results in equal speeds on each? Should I tinker with the tracks until they have nearly identical frictions? Thank you much!&lt;/p&gt;&#xA;" OwnerUserId="457" LastEditorUserId="37" LastEditDate="2013-05-20T15:51:27.397" LastActivityDate="2013-05-20T15:51:27.397" Title="How to get two continuous tracks (tank treads) to move at the same rate?" Tags="&lt;mobile-robot&gt;&lt;motor&gt;&lt;tracks&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="604" PostTypeId="2" ParentId="603" CreationDate="2012-11-30T18:51:47.927" Score="12" Body="&lt;p&gt;The short answer is that you need better control (feedback) to do it. Practically, you will never be able to calibrate the system accurately enough to go straight for more than a few tens of robot-body lengths. Once you dial it perfectly for one set of conditions, the environment or wear conditions will change and you'll have to tune it up again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Surface conditions, traction, attitude, motor-isolation (the distribution of electrical power to each motor from a common power source), and many other real-time operational factors effect forward velocity for each side of the 'bot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depending on your precision requirements, something as simple as a magnetic compass (position as far forward on the robot as possible to maximize its responsiveness) could help you maintain a heading during forward motion. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Often it isn't critically important precisely which direction your 'bot is moving; rather, it simply needs to be making progress on some task (follow the leader, search for a target, etc). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you post greater detail on your robot and its design objectives, I could assist you further.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;A note about magnetic sensor placement&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;But, why should I &quot;position [the magnetic transducer] as far forward as possble&quot;? Isn't it true that the angle is the same? Yup. That's true, but the magnitude of the Earth's magnetic field is not. &lt;em&gt;You are standing in a different spot on Earth&lt;/em&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Imagine your robot is as big as a car. If you sit in the geometric center of the car and the car pivots about you, your coordinates on the Earth have not changed; only your attitude has. Now if you are sitting on the hood of the car and the car repeats it's previous motion, &lt;em&gt;both&lt;/em&gt; your attitude and your coordinates have changed. Changing coordinates produces a bigger difference in magnitude of the Earth's field than rotation alone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Over the last few years I worked on a team with Dr. Dwight Veihland of Virginia Tech, arguably the world's leading expert on super-high sensitivity magnetic sensors. If I were to crystallize the body of his work (&lt;a href=&quot;http://ieeexplore.ieee.org/xpl/articleDetails.jsp?tp=&amp;amp;arnumber=5185369&amp;amp;contentType=Journals+%26+Magazines&amp;amp;sortType%3Ddesc_p_Publication_Year%26queryText%3Ddwight+viehland&quot;&gt;like in this example&lt;/a&gt;), I would say that he is always in pursuit of greater signal-to-noise ratios in the detection of ever tinier magnitudes. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any increase in the magnitude difference you can generate makes life easier for your sensor... and in this case, you get it for free. A number of DARPA grand challenge robots placed the GPS sensor forward for this same reason.&lt;/p&gt;&#xA;" OwnerUserId="531" LastEditorUserId="531" LastEditDate="2012-12-08T19:04:08.027" LastActivityDate="2012-12-08T19:04:08.027" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="605" PostTypeId="2" ParentId="602" CreationDate="2012-11-30T20:08:50.580" Score="5" Body="&lt;p&gt;It looks like your motors can draw up to 2.5A each; there's no way a 9-volt alkaline can sustain that current (plus the other on-board electronics) for any length of time.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'll need to pick a more appropriate battery for this robot.  Have a look at the discharge curves for several batteries, and pick one that fits the current draw and desired operating time for your robot.  Here's an example of what a discharge curve for several 9V batteries looks like:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://www.powerstream.com/z/9v-100ma-discharge-tests.png&quot; alt=&quot;Discharge curve&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;mAH is Milliamp-hours: how many hours the battery will supply a given amount of current -- a way of measuring capacity.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other factor is how much current you draw:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Q66Gp.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Q66Gp.gif&quot; alt=&quot;Discharge curve&quot;&gt;&lt;/a&gt; &#xA;&lt;sub&gt;(source: &lt;a href=&quot;http://www.rctoys.com/pr/pr-images/tp-extreme-5000-discharge-curve-graph.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;rctoys.com&lt;/a&gt;)&lt;/sub&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The different curves indicate different loads for the battery.  &lt;strong&gt;There is a maximum load for every battery, and you should not exceed it&lt;/strong&gt;; best case, you get poor performance, worst case you get a fire or explosion.  In this graph, you can see that the 125A load causes a severe drop in voltage.  That's the same effect you're seeing -- a severe drop in performance caused by overloading the battery. &lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2019-02-18T01:48:45.880" LastActivityDate="2019-02-18T01:48:45.880" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="607" PostTypeId="5" CreationDate="2012-11-30T21:19:11.380" Score="0" Body="&lt;p&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Denavit%E2%80%93Hartenberg_parameters&quot; rel=&quot;nofollow&quot;&gt;Denavit-Hartenberg Parameters on Wikipedia&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2012-12-01T15:30:15.847" LastActivityDate="2012-12-01T15:30:15.847" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="608" PostTypeId="4" CreationDate="2012-11-30T21:19:11.380" Score="0" Body="the four parameters associated with a particular convention for attaching reference frames to the links of a spatial kinematic chain, or robot manipulator" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2012-12-01T15:30:08.093" LastActivityDate="2012-12-01T15:30:08.093" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="609" PostTypeId="1" AcceptedAnswerId="610" CreationDate="2012-12-01T09:33:23.763" Score="7" ViewCount="581" Body="&lt;p&gt;I know this is a &lt;em&gt;broad&lt;/em&gt; statement, but when you've got support for both TCP as well as a full fledged computer on board (to integrate/run an arduino), does this essentially allow for anything that would run on a linux box (raspberryPi) to run and operate your robot?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know clock speed as well as the dependency libraries for a given code base (on the Pi) would add some complexity here, but what are some of the big issues that I'm overlooking in such a vertically-integrated control system?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Including a RaspberryPi within a robot... Does this allow for a &quot;universal API&quot;?&lt;/p&gt;&#xA;" OwnerUserId="111" LastEditorUserId="111" LastEditDate="2012-12-20T20:30:53.640" LastActivityDate="2012-12-20T20:30:53.640" Title="Including a RaspberryPi within a robot... Does this allow for a &quot;universal API&quot;?" Tags="&lt;software&gt;&lt;arduino&gt;&lt;raspberry-pi&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="610" PostTypeId="2" ParentId="609" CreationDate="2012-12-01T10:53:50.637" Score="10" Body="&lt;p&gt;The short answer is &quot;yes&quot;. I'm assuming you are describing an architecture that looks &lt;em&gt;broadly&lt;/em&gt; ;-) like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Real-time system &amp;lt;--&gt; Soft-time system&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a very common robot architecture. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The real-time system (RTS) (for example, an Arduino with appropriate firmware) handles the low-level sensor farming (conditioning, data packaging, management, and routing), power management, motor management, and general purpose I/O operations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The soft-time system (STS) (ex. the Raspberry Pi you mentioned) is a more powerful system designed to handle monitoring, long-range communications, and more elaborate sensor integration and processing tasks. It sits above the RTS, which handles all the intense timing details of waveform generation and low-speed local bus communication so that the STS can work the &quot;harder&quot; problems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously, this is a big over-simplification, but I think it gets the core ideas across.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wrote a number of academic papers &lt;a href=&quot;http://research.cens.ucla.edu/projects/2005/Actuation/robogaming/&quot;&gt;1&lt;/a&gt; &lt;a href=&quot;http://nesl.ee.ucla.edu/document/list?project_id=26&quot;&gt;2&lt;/a&gt; on robot architecture if you would like to explore more deeply. If you have something specific in mind, please feel free to ask me (or the community) some follow-up questions. ;-)&lt;/p&gt;&#xA;" OwnerUserId="531" LastEditorUserId="531" LastEditDate="2012-12-03T06:33:42.430" LastActivityDate="2012-12-03T06:33:42.430" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="611" PostTypeId="2" ParentId="609" CreationDate="2012-12-01T12:21:20.573" Score="-2" Body="&lt;p&gt;&quot;Does this essentially allow for anything that would run on a linux box ( raspberryPi ) to run and operate your robot?&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm an outsider, but from what I have heard Rasberry Pi has problems running ROS at the moment. A linux robot that can not run ROS is missing a huge part of the community, and I would have a hard time seeing that as &quot;allowing anything that runs on linux.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To me the purpose of ROS is to allow research/development in a specific area without having to  learn/develop all the other stuff that has already been done. That is the spirit of open source, that is the spirit of Linux, that is the spirit of ROS. Jut because you can not do this does not make it less of a robot, but it does make the reasons to use it much less, IMHO, and to answer your question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Wouldn't it be a much better choice to run some non rasberyy pi computer with Arduinos? Is price the real issue? And if it is why does anything else matter then? A cute name does not make a cute robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;edit: can anyone explain to me what a &quot;universal API&quot; is? How about a &quot;vertically-integrated control system&quot;? Actually, explain how this is even a question, with up votes?&lt;/p&gt;&#xA;" OwnerUserId="274" LastEditorUserId="274" LastEditDate="2012-12-01T20:37:19.687" LastActivityDate="2012-12-01T20:37:19.687" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="612" PostTypeId="2" ParentId="599" CreationDate="2012-12-01T15:17:12.447" Score="9" Body="&lt;p&gt;According to this &lt;a href=&quot;http://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=2&amp;amp;cad=rja&amp;amp;ved=0CDkQFjAB&amp;amp;url=http%3A%2F%2Fwww.cs.berkeley.edu%2F~pabbeel%2Fcs287-fa09%2Freadings%2FDurrant-Whyte_Bailey_SLAM-tutorial-I.pdf&amp;amp;ei=qB26UJ7BJcGUrgeUoYHgCg&amp;amp;usg=AFQjCNHglzCdyHwwV9DdjXlTprqMQTcrwA&quot; rel=&quot;noreferrer&quot;&gt;SLAM tutorial&lt;/a&gt;, &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The structure of the SLAM problem, the convergence result and the&#xA;  coining of the acronym ‘SLAM’ was ﬁrst presented in a mobile robotics survey &#xA;  paper presented at the 1995 International Sym- posium on&#xA;  Robotics Research.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;which refers to this paper -&gt; &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;H. Durrant-Whyte, D. Rye, and E. Nebot. Localisation of automatic&#xA;  guided vehicles. In G. Giralt and G. Hirzinger, editors, Robotics&#xA;  Research: The 7th International Symposium (ISRR’95), pages 613–625.&#xA;  Springer Verlag, 1996.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="417" LastEditorUserId="417" LastEditDate="2012-12-03T10:09:49.077" LastActivityDate="2012-12-03T10:09:49.077" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="613" PostTypeId="1" AcceptedAnswerId="615" CreationDate="2012-12-01T20:32:27.490" Score="37" ViewCount="106700" Body="&lt;p&gt;What are the stall and free currents of an electric motor? For example, &lt;a href=&quot;http://www.vexrobotics.com/276-2181.html&quot;&gt;this Vex motor&lt;/a&gt; lists its stall and free currents at the bottom of the page.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think I understand the general idea, but a detailed description would be helpful.&lt;/p&gt;&#xA;" OwnerUserId="457" LastEditorUserId="37" LastEditDate="2013-05-20T15:51:54.570" LastActivityDate="2015-02-25T16:05:21.480" Title="What is stall current and free current of motors?" Tags="&lt;motor&gt;&lt;current&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="614" PostTypeId="2" ParentId="613" CreationDate="2012-12-01T22:08:35.087" Score="17" Body="&lt;p&gt;Stall current is how much the motor will draw when it is stuck, i.e. &lt;em&gt;stalled&lt;/em&gt;. Free current is how much current it draws when the motor has no load, i.e. &lt;em&gt;free to spin&lt;/em&gt;.  As you'd expect, the more strain on the motor, the more current it will draw in order to move; the stall current and free current are the maximum and minimum, respectively.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From a standing start, the motor will draw somewhere close to the stall current at first and then drop to the current required to maintain whatever speed it's operating at.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="158" LastEditDate="2012-12-07T15:45:51.790" LastActivityDate="2012-12-07T15:45:51.790" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="615" PostTypeId="2" ParentId="613" CreationDate="2012-12-01T23:24:41.493" Score="42" Body="&lt;h2&gt;Short answer&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Stall current&lt;/strong&gt; is the maximum current drawn&lt;sup&gt;1&lt;/sup&gt;, when the motor is applying its maximum torque, either because it is being prevented from moving entirely or because it can no longer accelerate given the load it is under.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Free current&lt;/strong&gt; is the current drawn when the motor is rotating freely at maximum speed, under no load&lt;sup&gt;2&lt;/sup&gt; other than friction and back-emf forces in the motor itself.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;sup&gt;1: Under normal conditions, i.e. the motor isn't being asked &lt;a href=&quot;https://robotics.stackexchange.com/a/644/37&quot;&gt;go from max speed in one direction to max speed in the other&lt;/a&gt;.&lt;br&gt;&#xA;2: This assumes the motor is not being &lt;a href=&quot;https://robotics.stackexchange.com/a/644/37&quot;&gt;driven by external forces&lt;/a&gt;.&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;h2&gt;Long answer&lt;/h2&gt;&#xA;&lt;h3&gt;Stall Current&lt;/h3&gt;&#xA;&lt;p&gt;From the Wikipedia page on &lt;a href=&quot;http://en.wikipedia.org/wiki/Stall_torque&quot; rel=&quot;noreferrer&quot;&gt;Stall Torque&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Stall torque&lt;/strong&gt; is the &lt;a href=&quot;http://en.wikipedia.org/wiki/Torque&quot; rel=&quot;noreferrer&quot;&gt;torque&lt;/a&gt; which is produced by a device when the output rotational speed is zero. It may also mean the torque load that causes the output rotational speed of a device to become zero - i.e. to cause &lt;a href=&quot;http://en.wikipedia.org/wiki/Stall_%28engine%29&quot; rel=&quot;noreferrer&quot;&gt;stalling&lt;/a&gt;. Stalling is a condition when the motor stops rotating. This condition occurs when the load torque is greater than the motor shaft torque i.e. break down torque condition. In this condition the motor draws maximum current but the motor do not rotate.The current is called as Stalling current.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;...&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;h3&gt;Electric motors&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Electric_motor&quot; rel=&quot;noreferrer&quot;&gt;Electric motors&lt;/a&gt; continue to provide torque when stalled. However, electric motors left in a stalled condition are prone to overheating and possible damage since the current flowing is maximum under these conditions.&lt;/p&gt;&#xA;&lt;p&gt;The maximum torque an electric motor can produce in the long term when stalled without causing damage is called the &lt;strong&gt;maximum continuous stall torque&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Thus from the &lt;a href=&quot;http://www.vexrobotics.com/276-2181.html&quot; rel=&quot;noreferrer&quot;&gt;specification&lt;/a&gt; of this motor&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Stall Torque:  8.6 in-lbs&#xA;Stall Current: 2.6 A&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;we can see that if the motor is required to apply more than 8.6 in-lbs of torque the motor will stop moving (or accelerating if working against friction) and will be drawing the maximum 2.6A of current.&lt;/p&gt;&#xA;&lt;p&gt;Although it doesn't say what kind of motor it is, I would expect it to be a &lt;a href=&quot;http://en.wikipedia.org/wiki/Brushed_DC_electric_motor&quot; rel=&quot;noreferrer&quot;&gt;Brushed DC electric motor&lt;/a&gt; given it's two wire interface.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;As an unloaded DC motor spins, it generates a backwards-flowing electromotive force that resists the current being applied to the motor. The current through the motor drops as the rotational speed increases, and a free-spinning motor has very little current. It is only when a load is applied to the motor that slows the rotor that the current draw through the motor increases.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;From the &lt;a href=&quot;http://en.wikipedia.org/wiki/Counter-electromotive_force&quot; rel=&quot;noreferrer&quot;&gt;Counter electromotive force&lt;/a&gt; wikipedia page:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;In &lt;strong&gt;motor control&lt;/strong&gt; and &lt;strong&gt;robotics&lt;/strong&gt;, the term &amp;quot;Back-EMF&amp;quot; often refers to using the voltage generated by a spinning motor to infer the speed of the motor's rotation.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Note however, as &lt;a href=&quot;https://robotics.stackexchange.com/a/644/37&quot;&gt;DrFriedParts explains&lt;/a&gt;, this is only part of the story. The &lt;strong&gt;maximum &lt;em&gt;continuous&lt;/em&gt; stall torque&lt;/strong&gt; may be much lower than the &lt;strong&gt;maximum torque&lt;/strong&gt; and thus current. For instance if you switch from full torque in one direction to full torque in the other. In this case, the current drawn could be double the &lt;em&gt;continuous&lt;/em&gt; stall current. Do this often enough, exceeding the duty cycle of the motor and you could burn out your motor.&lt;/p&gt;&#xA;&lt;h3&gt;Free Current&lt;/h3&gt;&#xA;&lt;p&gt;Again, looking at the specification:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Free Speed:     100 rpm&#xA;Free Current:   0.18 A&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;So when running freely, without load, it will rapidly accelerate up to 100 rpm, where it will draw just 180 mA to maintain that speed given friction and back-emf.&lt;/p&gt;&#xA;&lt;p&gt;Again however, as &lt;a href=&quot;https://robotics.stackexchange.com/a/644/37&quot;&gt;DrFriedParts explains&lt;/a&gt;, this is also only part of the story. If the motor is being driven by an external force (effectively a -ve load), and thus the motor is turned into a generator, the current drawn may be cancelled out by the current generated by the external force.&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2012-12-11T13:37:16.057" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="616" PostTypeId="1" AcceptedAnswerId="618" CreationDate="2012-12-03T05:36:41.723" Score="5" ViewCount="2914" Body="&lt;p&gt;I've found that Arduino (Duemilanove) has a current limit of 40mA per pin. Does this include the V&lt;sub&gt;in&lt;/sub&gt; pin? Or does the V&lt;sub&gt;in&lt;/sub&gt; pin have some sort of work around in place on the board to allow for higher currents?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If this is the limit on the V&lt;sub&gt;in&lt;/sub&gt;, is there good way of using still using the power supply jack on the board and allowing other sources to draw on that supply without it needing to pass through the chip first?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you much.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: For the second part, what should I do if I wanted to get up to something like 2 amps?&lt;/p&gt;&#xA;" OwnerUserId="457" LastEditorUserId="457" LastEditDate="2012-12-03T16:58:56.343" LastActivityDate="2012-12-03T19:41:16.703" Title="Arduino Vin Current Limit" Tags="&lt;arduino&gt;&lt;current&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="617" PostTypeId="2" ParentId="616" CreationDate="2012-12-03T13:06:45.607" Score="1" Body="&lt;p&gt;According to &lt;a href=&quot;http://arduino.cc/forum/index.php/topic,27480.0.html&quot; rel=&quot;nofollow&quot;&gt;this discussion on the Arduino forums&lt;/a&gt;, you can draw about 1 amp through the V&lt;sub&gt;in&lt;/sub&gt; pin before frying the &quot;polarity protection&quot; diode that sits between the power supply and the pin. &lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2012-12-03T13:06:45.607" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="618" PostTypeId="2" ParentId="616" CreationDate="2012-12-03T19:41:16.703" Score="8" Body="&lt;p&gt;The 40mA current limit is the Absolute Maximum that an I/O pin on the &lt;a href=&quot;http://www.atmel.com/Images/doc8161.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;ATmega328P&lt;/a&gt; can supply. V&lt;sub&gt;cc&lt;/sub&gt; on the ATmega can draw up to 200mA.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From page 313 of the datasheet:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/4LNpY.png&quot; alt=&quot;absolute maximums&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 5V that connects to V&lt;sub&gt;cc&lt;/sub&gt; and powers your chip comes from one of two places. Either the USB connection, which in most cases is limited to supplying 500mA. Or an external power supply (wall wort or otherwise) which can supply as much current as is labeled on package.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;V&lt;sub&gt;in&lt;/sub&gt; is your external power supply if connected. USBVCC is your USB power if connected. +5V is whichever has a higher voltage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You seem to be interested in using an external power supply to run your Arduino and a motor. No problem. You just need to branch off of V&lt;sub&gt;in&lt;/sub&gt; &lt;em&gt;before&lt;/em&gt; the regulator that turns V&lt;sub&gt;in&lt;/sub&gt; into +5V and powers your chip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Have a look at this &lt;a href=&quot;http://www.ladyada.net/make/mshield/use.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Motor Shield tutorial by Adafruit&lt;/a&gt;. In the below diagram, they are powering a motor off of a +9V V&lt;sub&gt;in&lt;/sub&gt;. In this diagram they are branching off &lt;em&gt;before&lt;/em&gt; IC1 which is a 78L05Z. On your &lt;a href=&quot;http://arduino.cc/en/uploads/Main/arduino-duemilanove-schematic.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Duemilanove&lt;/a&gt;, this should be IC4, an MC33269.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/QjjOZ.png&quot; alt=&quot;motor shield connection&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This way the motor can take as much current as it wants from your external supply. And the AVR microcontroller can take as much current as it wants and be protected from any nasty spikes the motor puts on the line by the MC33269 voltage regulator.&lt;/p&gt;&#xA;" OwnerUserId="142" LastActivityDate="2012-12-03T19:41:16.703" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="619" PostTypeId="1" CreationDate="2012-12-03T21:00:24.960" Score="6" ViewCount="4270" Body="&lt;p&gt;How do you program an &lt;a href=&quot;http://en.wikipedia.org/wiki/Electronic_speed_control&quot; rel=&quot;nofollow&quot;&gt;ESC&lt;/a&gt; to have a reverse mode? We're looking to control an ESC from a servo board (for a &lt;a href=&quot;http://greymatterrobotics.com/2012/09/18/the-hoverbot/&quot; rel=&quot;nofollow&quot;&gt;robotics project&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming that the input will be between 0 and 255, we're looking for 127 as off, 255 as fully forward and 0 as full reverse, so how do we achieve that?&lt;/p&gt;&#xA;" OwnerUserId="459" LastEditorUserId="37" LastEditDate="2012-12-05T02:56:44.090" LastActivityDate="2019-01-13T02:49:18.733" Title="Programming an ESC to have reverse mode" Tags="&lt;control&gt;&lt;motor&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="620" PostTypeId="2" ParentId="619" CreationDate="2012-12-03T21:27:50.920" Score="5" Body="&lt;p&gt;It varies from manufacturers. Some ESC allow reverse, or disabled reverse and allow breaks instead, or some combination (break for 5 seconds, then reverse). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;for example &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__415__182__ESC_UBEC_VR-Programming_Cards.html&quot;&gt;HobbyKing&lt;/a&gt; has a bunch of programmers to make changing it easier. In most cases the same thing can be done with radio controls, although it generally is a bit more challenging.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I looked at your page a bit but did not see a reference to which speed control (ESC) you are going to use. If you have not chosen one yet, be aware that they usually come with instructions for programming reverse handling, timing etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your assumptions about input seems reasonable, and is what I think you will find once you get going.&lt;/p&gt;&#xA;" OwnerUserId="274" LastActivityDate="2012-12-03T21:27:50.920" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="621" PostTypeId="2" ParentId="583" CreationDate="2012-12-03T23:15:18.693" Score="1" Body="&lt;p&gt;An iterative IK solver is capable of dealing with many kinds of constraints. I have already talked about this kind of solver in a &lt;a href=&quot;https://robotics.stackexchange.com/a/308/40&quot;&gt;previous answer&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The basic algorithm would look something like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Move each joint to it's halfway position&#xA;&#xA;loop while arm is far from target&#xA;{&#xA;    calculate gradient vector&#xA;    add gradient vector to arm position vector&#xA;    if any joints are beyond their range, move them back into their range.&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The nice thing about the iterative solver is that it can also handle 'soft' constraints. For example, you might want a humanoid arm to maintain a comfortable looking posture where possible. Or you might prefer to keep joints away from their end stops. In that case, you can simply add those constraints into the loop&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Move each joint to it's halfway position&#xA;&#xA;loop while arm is far from target&#xA;{&#xA;    calculate gradient vector&#xA;    add gradient vector to arm position vector&#xA;&#xA;    calculate comfort vector&#xA;    add comfort vector to arm position vector&#xA;&#xA;    if any joints are beyond their range, move them back into their range.&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In this case, the comfort vector is the direction in which to move all of the joints so that the arm appears more comfortable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A fuller explanation of this can be found on my old web site: &lt;a href=&quot;http://freespace.virgin.net/hugo.elias/models/m_ik2.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;The good-looking textured light-sourced bouncy fun smart and stretchy page&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="40" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2012-12-03T23:15:18.693" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="622" PostTypeId="2" ParentId="419" CreationDate="2012-12-03T23:41:26.080" Score="3" Body="&lt;p&gt;To get relative displacement between two time instants all you need to do is integrate the values given off by the accelerometer (twice for linear displacement) and gyro (once for angular displacement).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Due to measurement errors, which can many times be adequately modeled as Gaussian (you might have to estimate a bias and/or scale factor to the measurement), there will be drift in your estimate (i.e. errors accumulate and your estimate diverges). Because of that, if you plan to use the IMU to obtain position and orientation estimates relative to a fixed frame, you will also have to use more information to correct that estimate. These corrections can be made using a &lt;a href=&quot;http://tom.pycke.be/mav/71/kalman-filtering-of-imu-data&quot; rel=&quot;nofollow&quot;&gt;Kalman Filtering&lt;/a&gt; approach.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many people use the accelerometer and magnetometer data to do that, assuming your robot isn't moving too fast (i.e. $g \gg a_{robot}$), there aren't many magnetic field disturbances (i.e. $m_{earth} \gg m_{other\_stuff}$), and both vectors are perpendicular and have fixed orientation with respect to the ground. See, for instance, the &lt;a href=&quot;http://en.wikipedia.org/wiki/Triad_method&quot; rel=&quot;nofollow&quot;&gt;TRIAD algorithm&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But then again, back to your question, if what you mean by &quot;robot has displaced itself forward since a previous measurement&quot; is:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Relative to his own body&lt;/strong&gt;, regardless of his orientation in space, all you need to do is check the sign of the accelerometer output in the forward direction (you might want to set a minimum threshold or perform median filtering due to sensor noise)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Relative to a fixed frame&lt;/strong&gt;, you have to take everything I talked about into consideration&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="95" LastActivityDate="2012-12-03T23:41:26.080" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="623" PostTypeId="1" CreationDate="2012-12-03T23:48:59.127" Score="7" ViewCount="350" Body="&lt;p&gt;I'm building an open-source bio-research hardware (ask me how you can help!) and I've got this guy here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/MZw6q.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My big questions are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Can I get away with all the ground being common? (I've got a 12v and 5v needing to be grounded)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Do I need two sets of capacitors? There are 2 wired up to the 12v regulator and 2 wired to the 5v regulator. (These are shown in blue)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I've generally denoted connections which go UNDER the shield as orange, and those above as green.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If anyone happens to see something which might backfire, feel free to point it out. As this is also my first time making anything quite like this!&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I've verified the regulator positions and they are correct.&lt;/li&gt;&#xA;&lt;li&gt;This is a &lt;a href=&quot;http://www.nkcelectronics.com/Protoshield-KIT-for-Arduino-UNO-R3_p_308.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;proto-shield&lt;/a&gt; for an Arduino R3 Uno.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;A larger version of the image can be seen here: &lt;a href=&quot;https://i.imgur.com/BPXjn.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://i.imgur.com/BPXjn.jpg&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="111" LastEditorUserId="158" LastEditDate="2012-12-04T17:37:23.687" LastActivityDate="2012-12-04T17:37:23.687" Title="When taking VCC power from an arduino to a 12v regulator, then to a 5v, do I need two sets of capacitors?" Tags="&lt;arduino&gt;&lt;electronics&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="624" PostTypeId="2" ParentId="623" CreationDate="2012-12-03T23:57:39.417" Score="6" Body="&lt;h3&gt;Can I get away with all the ground being common?&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;That's exactly what should be done.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Do I need two sets of capacitors?&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Yes, you usually want to keep all capacitors as they are even if you are cascading voltage regulators. They help keep the regulator stable and avoid sharp voltage variations. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Be aware that either regulator might limit the amount of current that can be supplied to your system (if you have things hooked up in the 12V regulator besides the 5V regulator, for instance).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I find it odd that you need a 12V regulator though... Where is the input voltage coming from?&lt;/p&gt;&#xA;" OwnerUserId="95" LastEditorUserId="37" LastEditDate="2012-12-04T17:37:11.660" LastActivityDate="2012-12-04T17:37:11.660" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="625" PostTypeId="2" ParentId="138" CreationDate="2012-12-05T09:13:23.187" Score="-1" Body="&lt;p&gt;The &lt;a href=&quot;http://books.google.com/books/about/Springer_Handbook_of_Robotics.html?id=Xpgi5gSuBxsC&amp;amp;redir_esc=y&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;Springer Handbook of Robotics&lt;/em&gt;&lt;/a&gt; is a good resource that explains what the requirements are for any particular robotic field you want to specialize in.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://bks2.books.google.com/books?id=Xpgi5gSuBxsC&amp;amp;printsec=frontcover&amp;amp;img=1&amp;amp;zoom=1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Springer Handbook of Robotics http://bks2.books.google.com/books?id=Xpgi5gSuBxsC&amp;amp;printsec=frontcover&amp;amp;img=1&amp;amp;zoom=1&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="558" LastEditorUserId="350" LastEditDate="2012-12-05T18:10:51.037" LastActivityDate="2012-12-05T18:10:51.037" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="626" PostTypeId="2" ParentId="565" CreationDate="2012-12-05T12:45:19.730" Score="5" Body="&lt;p&gt;&lt;a href=&quot;http://openkinect.org/wiki/Main_Page&quot; rel=&quot;nofollow noreferrer&quot;&gt;OpenKinect&lt;/a&gt; is a community of people, not a library. The OpenKinect community releases the &lt;a href=&quot;https://github.com/OpenKinect/libfreenect&quot; rel=&quot;nofollow noreferrer&quot;&gt;libfreenect&lt;/a&gt; Kinect driver. libfreenect and &lt;a href=&quot;http://openni.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;OpenNI&lt;/a&gt;+&lt;a href=&quot;https://github.com/avin2/SensorKinect&quot; rel=&quot;nofollow noreferrer&quot;&gt;SensorKinect&lt;/a&gt; are two competing, opensource libraries/drivers. libfreenect (Apache 2.0 or GPLv2) derives from the initial, reverse-engineered/hacked Kinect driver whereas OpenNI+SensorKinect is derived from open sourced (LGPL) PrimeSense code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both projects work on Windows, Linux (Ubuntu), and Mac OS X. Both projects allow you to access color and depth images from the camera. The projects are not compatible and they can not be used simultaneously.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Differences between the libraries are motor control (libfreenect has it, OpenNI+SensorKinect doesn't), and integration with the NITE middleware for higher-level NUI support (OpenNI+SensorKinect only). These differences tend to drive projects towards one of the libraries.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See also:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/q/6086981/42473&quot;&gt;What is the difference between OpenNI and OpenKinect?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/q/7706448/42473&quot;&gt;Official Kinect SDK vs. Open-source alternatives&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="558" LastEditorUserId="-1" LastEditDate="2017-05-23T12:37:11.430" LastActivityDate="2012-12-07T16:50:08.477" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="627" PostTypeId="1" AcceptedAnswerId="633" CreationDate="2012-12-05T08:04:45.150" Score="1" ViewCount="767" Body="&lt;p&gt;I have a Panda Board ES. I am not able to get it to boot. I sent it back to SVTronics to get it checked and they said that the board is OK; I am the one who is not able to configure it properly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After doing a little research and following all the directions on the Panda Board and Ubuntu website, I am still not able to get the board to boot. I think the problem is how I am formatting the SD card. I am using disk utility for Mac to format the SD card to &quot;MSDOS(FAT)&quot; partition.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to know how to format an &quot;SD Card&quot; on a Macintosh to install Ubuntu on it for Panda Board ES.&lt;/p&gt;&#xA;" OwnerUserId="573" OwnerDisplayName="Killer_Alien_Monk" LastEditorUserId="38" LastEditDate="2012-12-13T15:34:38.153" LastActivityDate="2012-12-13T15:34:38.153" Title="Formatting an SD card for Panda Board ES" Tags="&lt;electronics&gt;&lt;operating-systems&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="628" PostTypeId="1" CreationDate="2012-12-05T18:40:54.230" Score="26" ViewCount="26618" Body="&lt;p&gt;For this question assume that the following things are unknown:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The size and shape of the room&lt;/li&gt;&#xA;&lt;li&gt;The location of the robot&lt;/li&gt;&#xA;&lt;li&gt;The presence of any obstacles&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Also assume that the following things are constant:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The size and shape of the room&lt;/li&gt;&#xA;&lt;li&gt;The number, shape and location of all (if any) obstacles&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;And assume that the robot has the following properties:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It can only move forward in increments of absolute units and turn in degrees. Also the operation that moves will return true if it succeeded or false if it failed to move due to an obstruction&lt;/li&gt;&#xA;&lt;li&gt;A reasonably unlimited source of power (let's say it is a solar powered robot placed on a space station that faces the sun at all times with no ceiling)&lt;/li&gt;&#xA;&lt;li&gt;Every movement and rotation is carried out with absolute precision every time (don't worry about unreliable data)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Finally please consider the following properties of the robot's environment:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Being on a ceiling-less space station the room is a safe but frustratingly close distance to passing comets, so the dust (and ice) are constantly littering the environment.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I was asked a much simpler version of this question (room is a rectangle and there are no obstacles, how would you move over it guaranteeing you could over every part at least once) and after I started wondering how you would approach this if you couldn't guarantee the shape or the presence of obstacles. I've started looking at this with &lt;a href=&quot;http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm&quot;&gt;Dijkstra's algorithm&lt;/a&gt;, but I'm fascinated to hear how others approach this (or if there is a well accepted answer to this? (How does Roomba do it?)&lt;/p&gt;&#xA;" OwnerUserId="559" LastEditorUserId="163" LastEditDate="2012-12-05T19:39:54.070" LastActivityDate="2021-02-03T06:49:36.680" Title="What algorithm should I implement to program a room cleaning robot?" Tags="&lt;mobile-robot&gt;&lt;artificial-intelligence&gt;&lt;algorithm&gt;&lt;coverage&gt;&lt;theory&gt;" AnswerCount="7" CommentCount="4" FavoriteCount="24" ContentLicense="CC BY-SA 3.0" />
  <row Id="629" PostTypeId="2" ParentId="628" CreationDate="2012-12-05T19:01:33.410" Score="9" Body="&lt;p&gt;Roomba starts in a spiral until it hits something, then does a perimeter sweep. Then it just bounces around. Roomba being the de facto standard in household robotic vaccum cleaners, I guess you could call it the &quot;accepted solution&quot;. But from personal experience (I own two), there is definitely room for improvement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From &lt;a href=&quot;http://electronics.howstuffworks.com/gadgets/home/robotic-vacuum2.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;How Stuff Works&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/AtbSs.jpg&quot; alt=&quot;algorithm&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From &lt;a href=&quot;http://www.electronicsinfoline.com/News/New_Gadgets/Robotics/botjunkie-interview-nancy-dussault-smith-on-irobot-s-roomba.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;an interview&lt;/a&gt; with Nancy Dussault Smith, Vice President of Marketing Communications at iRobot:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;When it starts you’ll notice a spiral pattern, it’ll spiral&#xA;  out over a larger and larger area until it hits an object. When it&#xA;  finds an object, it will follow along the edge of that object for a&#xA;  period of time, and then it will start cris-crossing, trying to figure&#xA;  out the largest distance it can go without hitting another object, and&#xA;  that’s helping it figure out how large the space is, but if it goes&#xA;  for too long a period of time without hitting a wall, it’s going to&#xA;  start spiraling again, because it figures it’s in a wide open space,&#xA;  and it’s constantly calculating and figuring that out. &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;It’s similar&#xA;  with the dirt sensors underneath, when one of those sensors gets&#xA;  tripped it changes its behaviors to cover that area. It will then go&#xA;  off in search of another dirty area in a straight path. The way that&#xA;  these different patterns pile on to each other as they go, we know&#xA;  that that is the most effective way to cover a room. &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The patterns that&#xA;  we chose and how the algorithm was originally developed was based off&#xA;  of behavior-based algorithms born out of MIT studying animals and how&#xA;  they go about searching areas for food. When you look at how ants and&#xA;  bees go out and they search areas, these kinds of coverage and&#xA;  figuring all of that out comes from that research. It’s not exact,&#xA;  obviously, I’m not saying we’re honeybees, but it’s that understanding&#xA;  of how to search out an area in nature that is the basis behind how&#xA;  our adaptive technology is developed.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Some long exposure pics of Roombas with LEDs on them illustrate how it works in practice:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://news.cnet.com/8301-17938_105-20080916-1/vac-hack-lets-roomba-test-air-quality-too/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/YaWBns.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;http://artstormer.com/2012/04/08/roomba-light-paintings-created-with-leds-attached-to-vacuums/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Emsh0s.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;http://www.petapixel.com/2011/06/30/light-painting-art-done-using-swarms-of-robot-vacuum-cleaners/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8pVKMs.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="142" LastEditorUserId="350" LastEditDate="2013-01-10T14:12:12.573" LastActivityDate="2013-01-10T14:12:12.573" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="630" PostTypeId="2" ParentId="628" CreationDate="2012-12-05T19:18:03.210" Score="6" Body="&lt;p&gt;The first thing you need to establish is the goal of the robot -- not quite clear from your question.  There are two main tasks that your robot has to accomplish: discovering the shape of the clean-able area, and then cleaning it.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But is the amount of dirt constant?  Is dirt added constantly?  Is it your goal to minimize the average time that dirt remains on the floor, or the median time?  Is the goal to keep the floor equally clean?  Or is it just to clean once, as quickly as possible?  Are there patterns in the accumulation of dirt that you can measure and use to your advantage in accomplishing your goal?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The answer to these questions will help guide what algorithm you choose.  In the Roomba's robot's case, there might be no point learning the exact layout of the room because furniture (like chairs around a table), people, and other obstacles move very often.  However, in your case it might be better to explore the space to build a complete map (some combination of a lawnmower pattern with finding edges), then use that map to compute the shortest path through the space (the term is &quot;coverage&quot;, and there are several ways to do it e.g. &lt;a href=&quot;http://www.cs.cmu.edu/~motionplanning/papers/sbp_papers/integrated4/gabriely_spanning.pdf&quot;&gt;spanning tree algorithm&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One more thing you'll need to worry about is how to discretize the space you're in.  Because you can move in any direction -- even with integer degree amounts and integer units of distance -- your X and Y positions can have fractional values.  You'll need to decide how to represent obstacles on that map without having it grow to an infinite number of data points.  &lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2012-12-05T19:18:03.210" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="631" PostTypeId="2" ParentId="628" CreationDate="2012-12-05T19:21:27.970" Score="8" Body="&lt;p&gt;Neato uses an organized approach. Using SLAM and bumpers, it maps the 'current' room, perimeter first, then applies some algorithm for cleaning as efficiently as possible.  I've never owned a Roomba, but given what I have read about it's algorithm, I would never switch from a neato.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Laser Range Finder in the neato is often &lt;a href=&quot;http://www.hizook.com/blog/2009/12/20/ultra-low-cost-laser-rangefinders-actualized-neato-robotics&quot;&gt;cannabilized&lt;/a&gt; for robotics, as it is a cost effective sensor for SLAM algorithms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I was given your task, First I would find a suitable &lt;a href=&quot;http://openslam.org/&quot;&gt;SLAM implementation&lt;/a&gt;, based on the hardware I had.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then I would use a &lt;a href=&quot;http://link.springer.com/article/10.1007/s001700170013?LI=true#page-1&quot;&gt;CNC ISLAND Motion planning&lt;/a&gt; algorithm. My experience is they tend to be very efficient at covering an arbitrary area with the least amount of movement.&lt;/p&gt;&#xA;" OwnerUserId="274" LastActivityDate="2012-12-05T19:21:27.970" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="632" PostTypeId="2" ParentId="628" CreationDate="2012-12-05T19:39:29.200" Score="19" Body="&lt;p&gt;As far as I know, this problem hasn't been &quot;solved.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Formally, this is an online coverage problem. Coverage, because we must cover each point on the floor, and online because we do not have offline access to the map. If you are interested in the most recent results, I suggest you lookup &quot;&lt;strong&gt;robotic online coverage algorithms&lt;/strong&gt;,&quot; perhaps in google scholar (there are &lt;em&gt;lots and lots&lt;/em&gt; of great results). In addition to @embedded.kyle's very colorful (re)post, I'll add some details (I'll also try to quickly find a few simple results):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Dijkstra's will get you a path, but not necessarily a coverage. For example, how do you specify to Dijkstra's that you must visit &lt;em&gt;each&lt;/em&gt; point in the graph, instead of visiting &lt;em&gt;one&lt;/em&gt; point as quickly as possible? You can run all-pairs shortest paths, but what are the points? You don't have a map.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Online algorithms like this are often called &quot;bug&quot; algorithms because they tend to look like a bug wandering across an area, bumping into something, then wandering around it a bit.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;With no obstacles, and a rectangular room, and assuming you start on the &lt;em&gt;boundary&lt;/em&gt; a boustrophedon (way of the ox) path is optimal. &#xA;&lt;img src=&quot;https://i.stack.imgur.com/XYE6t.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Funny that farmers have been doing this forever, right? &lt;a href=&quot;http://en.wikipedia.org/wiki/Boustrophedon&quot; rel=&quot;noreferrer&quot;&gt;http://en.wikipedia.org/wiki/Boustrophedon&lt;/a&gt;. This can be extended to rooms with obstacles by finding roughly-rectangular area which are free of obstacles. &lt;a href=&quot;http://www.ri.cmu.edu/publication_view.html?pub_id=1416&quot; rel=&quot;noreferrer&quot;&gt;Howie Choset worked on this a bit&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;To cover an area with unknown perimeter, and assuming you &lt;em&gt;don't&lt;/em&gt; start on the perimeter, what is the optimal strategy? Well, imagine you drop into the world, and can't see the perimeter. You can walk in a straight line until you reach the perimeter, then do a boustrophedon, right? Except now you &quot;wasted&quot; the time spent finding the perimeter, because you will cover that part twice.  This is why robots tend to spiral: By the time you reach a boundary, you have covered a lot of the area ($\pi*d^2$ where $d$ is the distance to the &lt;em&gt;nearest&lt;/em&gt; boundary, right?). This is helpful: now you are guaranteed to find the nearest boundary, and can trace it out.&lt;/li&gt;&#xA;&lt;li&gt;This is a huge, fascinating area. I'm sorry I can't provide a better summary! &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The biggest problem is you don't have a map. Without a map, you are limited to simple actions like perimeter following, and moving along a path (like the spiral mentioned).  So, there exist some robots that actually build the map while cleaning, decompose the mapped-out area into shapes, then cover each shape to ensure coverage. See: &lt;a href=&quot;http://mintcleaner.com/&quot; rel=&quot;noreferrer&quot;&gt;http://mintcleaner.com/&lt;/a&gt;  &lt;/p&gt;&#xA;" OwnerUserId="163" LastEditorUserId="163" LastEditDate="2012-12-05T20:06:19.247" LastActivityDate="2012-12-05T20:06:19.247" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="633" PostTypeId="2" ParentId="627" CreationDate="2012-12-05T19:55:01.567" Score="2" Body="&lt;p&gt;It's possible that your problem is not the filesystem format (although you should probably using Linux EXT2/EXT3/EXT4 instead of MS-DOS/FAT).  Is the bootloader installed properly? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are some posts on putting an Ubuntu bootloader on an SD card:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://askubuntu.com/questions/191902/how-to-boot-ubuntu-from-my-sd-card&quot;&gt;https://askubuntu.com/questions/191902/how-to-boot-ubuntu-from-my-sd-card&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://bbs.archlinux.org/viewtopic.php?pid=760477&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://bbs.archlinux.org/viewtopic.php?pid=760477&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;More broadly, have you looked at this wiki, dedicated to putting Ubuntu on Panda boards?&#xA;&lt;a href=&quot;http://www.omappedia.org/wiki/OMAP_Ubuntu_Main&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.omappedia.org/wiki/OMAP_Ubuntu_Main&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="-1" LastEditDate="2017-04-13T12:25:24.863" LastActivityDate="2012-12-05T19:55:01.567" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="634" PostTypeId="1" AcceptedAnswerId="635" CreationDate="2012-12-05T20:03:56.590" Score="9" ViewCount="6559" Body="&lt;p&gt;From what I've seen, LiFePO4 batteries seem like one of the top battery choices for robotics applications. However, I've seen people mentioning that you can't use a charger for a different battery to charge these, but I haven't seen why. If I were to build my own setup to charge LiFePO4 batteries what would it specifically need to do? What kind of voltages or current rates does it need to supply to charge these?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More specifically, I was think about setting up a solar charger for these batteries. Is there any immediate reason why this is a bad solution? Such as, the battery needs to charge with a current above some amount for it to work properly?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're ambitious enough to provide an example along with your explanation, I'm specifically thinking of having &lt;a href=&quot;http://www.batteryspace.com/lifepo426650cell32v3300mah16.5arate10whunapproved.aspx&quot;&gt;4 of these batteries&lt;/a&gt; with 2 pairs of 2 in series in parallel. &lt;/p&gt;&#xA;" OwnerUserId="457" LastActivityDate="2016-03-04T18:43:20.163" Title="How to charge a LiFePO4 battery?" Tags="&lt;battery&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="635" PostTypeId="2" ParentId="634" CreationDate="2012-12-05T20:13:58.417" Score="8" Body="&lt;p&gt;This is one of those questions where if you have to ask, you shouldn't be doing it.  There are charge-monitoring boards available for these batteries, and for safety's sake you should be using them.  You can still use a solar charger or some other method, but the output of that power source should feed a charge circuit that was built specifically for LiFePO&lt;sub&gt;4&lt;/sub&gt; batteries.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You're not so much looking for a battery charger as you are a &quot;battery manager&quot;.  You need something that will &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;prevent over-discharging (both current and voltage)&lt;/li&gt;&#xA;&lt;li&gt;prevent over-charging (both current and voltage)&lt;/li&gt;&#xA;&lt;li&gt;detect raised temperature (indicating some sort of failure)&lt;/li&gt;&#xA;&lt;li&gt;actually charge the battery&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Off-the-shelf LiFePO&lt;sub&gt;4&lt;/sub&gt; chargers accomplish the charging in 3 stages:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Supply constant current (correct amount is specific to battery model) until the cell voltage hits its maximum&lt;/li&gt;&#xA;&lt;li&gt;Supply constant voltage until the charge current hits some minimum, usually related to the initial charge current.&lt;/li&gt;&#xA;&lt;li&gt;Maintain the charge by lowering the voltage slightly, and making other adjustments (I'm not completely clear on this part)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;This is more of a pure-EE project than a robotics project, so if you are dead-set on building this then you should consult a more electronics-centric resource.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2012-12-05T21:27:42.303" LastActivityDate="2012-12-05T21:27:42.303" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="636" PostTypeId="1" AcceptedAnswerId="638" CreationDate="2012-12-06T02:36:00.553" Score="14" ViewCount="1051" Body="&lt;p&gt;I have heard a lot of claims that manually turning an NXT motor by hand can potentially damage it. I was wondering whether this was at least partially true, and whether there is any evidence to confirm or refute this idea.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that some projects (e.g. etch-a-sketch) use the built-in rotation sensor to measure how much the motor has turned, so I was thinking that perhaps whether the motor is idle or set on break is an important distinction, or perhaps there is even a special 'rotation sensor' mode that needs to be switched on in order to prevent damage.&lt;/p&gt;&#xA;" OwnerUserId="38" LastEditorUserId="38" LastEditDate="2018-08-01T09:00:23.970" LastActivityDate="2018-08-01T09:00:23.970" Title="Will turning an NXT motor by hand damage it?" Tags="&lt;motor&gt;&lt;nxt&gt;&lt;mindstorms&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="637" PostTypeId="1" AcceptedAnswerId="640" CreationDate="2012-12-06T04:49:17.513" Score="6" ViewCount="235" Body="&lt;p&gt;I have built a robot from a wheelchair that has worked very well thus far. It is now time for me to take the next step. I need to implement a permanent power circuit with proper protection. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The lowest level of protection I can think of is a fuse, but I would like to take a step further (current/voltage/direction/switches/High/Low voltages). If some one could give some insight on this project of mine any info will be greatly appreciated.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Moderator comment:&lt;/strong&gt;  Please see &lt;a href=&quot;https://robotics.meta.stackexchange.com/questions/5/how-do-we-address-questions-about-related-subject-areas&quot;&gt;How do we address questions about related subject areas?&lt;/a&gt; before answering.  This question is close to the boundary, but is on-topic here.&lt;/p&gt;&#xA;" OwnerUserId="565" LastEditorUserId="-1" LastEditDate="2017-03-16T15:51:15.093" LastActivityDate="2013-01-10T11:33:17.867" Title="Protecting electronics against voltage/current extremes and bad polarity" Tags="&lt;mobile-robot&gt;&lt;wheeled-robot&gt;&lt;protection&gt;&lt;circuit&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="638" PostTypeId="2" ParentId="636" CreationDate="2012-12-06T05:48:54.433" Score="14" Body="&lt;p&gt;In general, no, it will not hurt the motor directly, BUT, the motor is geared down considerably. This means that when you turn the exterior part that you can physically touch by 1/4 turn - the motor might have actually completed 5 full rotations. The problem can happen when you turn the servo too fast, it may cause gear breakage simply due to excess speed internally.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It does not hurt the motor, but it may break a gear. Simple solution is to just not turn it fast.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the motor is set on 'brake', it will apply opposite power to counter your turns, but you're not going to really hurt anything by over powering it, slowly! It is easier to turn if the motor is not in brake mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, in RobotC, this code releases the 'brake'&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;// release motors&#xA;    nSyncedMotors = synchNone;&#xA;    bFloatDuringInactiveMotorPWM = true;&#xA;    nMotorPIDSpeedCtrl[LEFT] = mtrNoReg;&#xA;    nMotorPIDSpeedCtrl[RIGHT] = mtrNoReg;&#xA;    motor[LEFT] = 0;&#xA;    motor[RIGHT] = 0;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="274" LastActivityDate="2012-12-06T05:48:54.433" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="640" PostTypeId="2" ParentId="637" CreationDate="2012-12-07T08:10:41.820" Score="6" Body="&lt;p&gt;I think this is a very relevant question for robotics, as you can spent a lot of time fixing your system if something went wrong in this area. Here are a few things to look out for:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Insulation: Ideally you don't want any high voltages to reach your equipment in the first place. So one of the most important rules we apply to our electronics is insulate. Try to have as little conductive surfaces flying around as possible. Especially when you system is moving, having something flying around that is conductive can screw you in the literal sense. insulation tape, tubing whatever are the weapons of choice here.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Connectors: Try never to use connectors that could be plugged the wrong way, or use the same connectors for different ports. Always check your connector thrice on the running system with a voltmeter before connecting it. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Diodes can be useful to prevent overvoltage or reverse polarity, they are however useless if your power source is very powerfull, burns your diode, and gets through anyway. That is what a &lt;a href=&quot;http://en.wikipedia.org/wiki/Crowbar_%28circuit%29&quot; rel=&quot;nofollow noreferrer&quot;&gt;crowbar circuit&lt;/a&gt; will prevent. Its a combination of a fuse and a diode and will fix both overvoltage/overcurrent and reverse current. There are integrated parts available, and I've also successfully used &lt;a href=&quot;http://ae.rsdelivers.com/product/te-connectivity/zen056v130a24ls/polyzen-polymer-protected-diode-56v/0494723.aspx&quot; rel=&quot;nofollow noreferrer&quot;&gt;polyfuses&lt;/a&gt; for small equipment.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://electronics.stackexchange.com/questions/7709/why-put-a-resistor-in-series-with-signal-line&quot;&gt;Resistors in series&lt;/a&gt; for data lines are also quite useful as they limit the current flowing through. Something between 50-100 Ohm should usually do the job.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Fuses are generally a good idea, especially when you use power sources with very high current capabilities (e.g. LiPo). &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="127" LastEditorUserId="-1" LastEditDate="2017-04-13T12:33:08.317" LastActivityDate="2013-01-04T18:30:42.863" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="641" PostTypeId="1" AcceptedAnswerId="647" CreationDate="2012-12-07T16:29:15.963" Score="1" ViewCount="1121" Body="&lt;p&gt;I am working with students (9th &amp;amp; 10th grade) on robotics and wanted to get a good book which covers basic mechanisms.  Does anyone have any recommendations.  Searching Google or Amazon yields many results, however, I thought the community might have a standard book to use.  &lt;/p&gt;&#xA;" OwnerUserId="572" LastEditorUserId="38" LastEditDate="2012-12-11T12:45:09.060" LastActivityDate="2012-12-11T12:45:09.060" Title="Good book on mechanisms" Tags="&lt;design&gt;&lt;mechanism&gt;" AnswerCount="1" CommentCount="5" ClosedDate="2012-12-22T08:32:39.220" ContentLicense="CC BY-SA 3.0" />
  <row Id="642" PostTypeId="1" AcceptedAnswerId="643" CreationDate="2012-12-08T05:06:56.877" Score="3" ViewCount="3341" Body="&lt;p&gt;I recently purchased a 3-axis accelerometer from Amazon, and can't seem to find how it works. I've been looking for quite a while now, and haven't found any real clues. The x, y, and z values always seem to return the same values. They change when I tilt or move the accelerometer, but revert to about 120 for each reading. I am currently using this device with the Arduino Uno, using the following code: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;int x=1,y=2,z=3;&#xA;void setup() {&#xA;  pinMode(x, INPUT);&#xA;  pinMode(y, INPUT);&#xA;  pinMode(z, INPUT); &#xA;  Serial.begin(9600);&#xA;}&#xA;void loop() {&#xA; Serial.println();&#xA; Serial.print(analogRead(x));&#xA; Serial.print(&quot;, &quot;);&#xA; Serial.print(analogRead(y));&#xA; Serial.print(&quot;, &quot;);&#xA; Serial.print(analogRead(z));&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Also, how would I go about converting this to tilt?&lt;/p&gt;&#xA;" OwnerUserId="498" LastEditorUserId="177" LastEditDate="2012-12-08T16:26:05.280" LastActivityDate="2012-12-08T16:26:05.280" Title="MMA7361 Accelerometer Always Displays Same Values" Tags="&lt;arduino&gt;&lt;sensors&gt;&lt;accelerometer&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="643" PostTypeId="2" ParentId="642" CreationDate="2012-12-08T07:13:51.893" Score="3" Body="&lt;p&gt;There is a project on Google Code called &lt;a href=&quot;http://code.google.com/p/mma7361-library/&quot; rel=&quot;nofollow&quot;&gt;MMA7361-library&lt;/a&gt;. The &lt;a href=&quot;http://www.geeetech.com/wiki/index.php/MMA7361_Triple_Axis_Accelerometer_Breakout&quot; rel=&quot;nofollow&quot;&gt;GE Tech Wiki&lt;/a&gt; has a simple example showing how to use this library. Copied inline below for posterity.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;AcceleroMMA7361.h&amp;gt;&#xA;AcceleroMMA7361 accelero;&#xA;int x;&#xA;int y;&#xA;int z;&#xA;void setup()&#xA;{&#xA; Serial.begin(9600);&#xA; accelero.begin(13, 12, 11, 10, A0, A1, A2);&#xA; accelero.setARefVoltage(5); //sets the AREF voltage to 3.3V&#xA; accelero.setSensitivity(LOW); //sets the sensitivity to +/-6G&#xA; accelero.calibrate();&#xA;}&#xA;void loop()&#xA;{&#xA; x = accelero.getXAccel();&#xA; y = accelero.getYAccel();&#xA; z = accelero.getZAccel();&#xA; Serial.print(&quot;\nx: &quot;);&#xA; Serial.print(x);&#xA; Serial.print(&quot; \ty: &quot;);&#xA; Serial.print(y);&#xA; Serial.print(&quot; \tz: &quot;);&#xA; Serial.print(z);&#xA; Serial.print(&quot;\tG*10^-2&quot;);&#xA; delay(500); //make it readable&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="177" LastActivityDate="2012-12-08T07:13:51.893" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="644" PostTypeId="2" ParentId="613" CreationDate="2012-12-09T05:06:39.610" Score="15" Body="&lt;p&gt;&lt;a href=&quot;https://robotics.stackexchange.com/a/614/37&quot;&gt;@Ian&lt;/a&gt; and &lt;a href=&quot;https://robotics.stackexchange.com/a/615/37&quot;&gt;@Mark&lt;/a&gt; offer awesome (and correct) answers. I'll add one extra point for completeness...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There seems to be trend among less experienced designers to assume that stall current and free current equate to the maximum and minimum currents the motor might encounter. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;They don't.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They are the &lt;em&gt;effective nominal&lt;/em&gt; values. You can exceed these limits under relatively common circumstances if you are not careful.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Exceeding the minimum&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;As @Ian and @Mark have noted. The motor can turn into a generator (google &quot;regenerative braking&quot;) when an outside source or event causes the motor to move faster than its applied current/voltage. For example, Ian's going down a hill or someone hand cranking the motor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The current in these situations can not only be less than the free current, but actually go negative (go in the opposite direction -- acts like a source rather than a load).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you think of it from a work (energy) perspective, say you are pushing a box of clothes down a hallway. It doesn't take much effort to do that, but if your buddy starts pushing with you, however little effort you were expending is lessened. That is the case of a motor going down a slight grade.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Exceeding the maximum&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;A secondary consequence of the generation function of the motor is that once it acquires momentum, it continues to convert that energy into electro-motive force (voltage) once power is no longer applied. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The interesting case is when you are reversing directions. If you rev the motor forward, then immediately switch directions, the voltage on the motor coil is momentarily about &lt;em&gt;twice&lt;/em&gt; the previous supply voltage since the motor back-EMF is now in series with the supply. This results, as expected from Ohm's law, in current in excess of stall current.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Practical solution&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;For these reasons, practical bi-directional motor control circuits include &quot;free-wheeling&quot; diodes (D1-D4) in the figure to provide a return path for the back-emf related currents and thereby clamp the voltage to within the supply rails +/- the forward diode voltage. If you are building your own motor control you should include them as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/adIDk.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="531" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2012-12-14T22:18:24.867" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="645" PostTypeId="2" ParentId="634" CreationDate="2012-12-09T20:59:45.130" Score="5" Body="&lt;p&gt;Further to @Ian's post, a couple of important comments:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your Battery Management System (BMS) (not just a simple charger!) needs to monitor the condition of each individual cell, not the set as a whole - this applies during the discharge phase, as well as during charging.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And cell balancing (keeping all cells broadly level) is probably more relevant than simple charge/discharge monitoring.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Day-job non-disclosure requirements limit a long winded answer, but we are developing a BMS using the &lt;a href=&quot;http://www.ti.com/product/bq76pl536a&quot; rel=&quot;nofollow&quot;&gt;TI BQ76PL536A device&lt;/a&gt; to monitor each cell.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But it is not a trivial application.&lt;/p&gt;&#xA;" OwnerUserId="134" LastEditorUserId="350" LastEditDate="2012-12-11T01:55:33.923" LastActivityDate="2012-12-11T01:55:33.923" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="646" PostTypeId="1" AcceptedAnswerId="648" CreationDate="2012-12-10T11:51:14.537" Score="7" ViewCount="1586" Body="&lt;p&gt;I am trying to calibrate a MEMS accelerometer. I was able to calibrate it for the current axis which is parallel to gravity and shows correctly, 1g. But the other two axes which should be 0.00g are showing +-0.02g instead. &#xA;So, e.g., when the accelerometer's x axis is parallel to gravity, it should show (1g, 0g, 0g) and not (1g, 0.02g, -0.01g) like now.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How could I eliminate those values, e.g. further calibrate accelerometer? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt; The &lt;a href=&quot;http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATASHEET/CD00091417.pdf&quot; rel=&quot;nofollow&quot;&gt;acelerometer's datasheet&lt;/a&gt; says nothing about calibrating except that &lt;em&gt;The IC interface is factory calibrated for sensitivity (So) and Zero-g level (Off)&lt;/em&gt; (page 20).&lt;/p&gt;&#xA;" OwnerUserId="584" LastEditorUserId="584" LastEditDate="2016-04-01T19:13:00.950" LastActivityDate="2016-04-01T19:13:00.950" Title="MEMS accelerometer calibration" Tags="&lt;design&gt;&lt;electronics&gt;&lt;accelerometer&gt;&lt;calibration&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="647" PostTypeId="2" ParentId="641" CreationDate="2012-12-10T12:35:34.767" Score="5" Body="&lt;p&gt;The best book I have seen on the subject of mechanisms is &lt;a href=&quot;http://www.amazon.co.uk/Mechanisms-Mechanical-Sourcebook-Nicholas-Chironis/dp/0071361693/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mechanisms And Mechanical Devices by Neil Sclater and Nicholas P. Chironis&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/0WZ63.jpg&quot; alt=&quot;Mechanisms And Mechanical Devices&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's got loads of great mechanisms in it, from simple linear movements:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/gQroz.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;... to complex packaging machines:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/arW7F.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It also covers robotics.&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2012-12-10T12:35:34.767" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="648" PostTypeId="2" ParentId="646" CreationDate="2012-12-10T15:30:07.040" Score="6" Body="&lt;p&gt;It is possibly a bias in the accelerometer.  The measured non-zero results (like yours) are the bias. No idea if the magnitude of these biases is right, i.e., you may be experiencing more error than you should expect from a bias. To be clear, you can subtract this bias from your estimate of acceleration. However, you should be sure that the bias doesn't change with time. Then you'll need more sophisticated methods. see: &lt;a href=&quot;http://www.vectornav.com/support/library?id=76&quot; rel=&quot;nofollow&quot;&gt;overview of INS&lt;/a&gt; or &lt;a href=&quot;http://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=05594974&quot; rel=&quot;nofollow&quot;&gt;some literature&lt;/a&gt;&#xA;and &lt;a href=&quot;http://www.analog.com/en/content/td_accelerometer_specifications_definitions/fca.html&quot; rel=&quot;nofollow&quot;&gt;typical accelerometer specs&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does your datasheet help? There's probably a section on calibration schemes. &lt;a href=&quot;http://www.analog.com/en/mems-sensors/mems-inertial-sensors/adxl345/products/product.html&quot; rel=&quot;nofollow&quot;&gt;For example&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;In a no-turn or single-point calibration scheme, the part is oriented &#xA;such that one axis, typically the z-axis, is in the 1 g field of gravity &#xA;and the remaining axes, typically the x- and y-axis, are in a 0 g&#xA;field. The output is then measured by taking the average of a &#xA;series of samples. The number of samples averaged is a choice of &#xA;the system designer, but a recommended starting point is 0.1 sec &#xA;worth of data for data rates of 100 Hz or greater. This corresponds &#xA;to 10 samples at the 100 Hz data rate. For data rates less than &#xA;100 Hz, it is recommended that at least 10 samples be averaged &#xA;together. These values are stored as X0g, Y0g, and Z+1g for the 0 g&#xA;measurements on the x- and y-axis and the 1 g measurement on &#xA;the z-axis, respectively&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: Also please compare this error to the specified precision of your sensor. Turns out this small error was not a problem, and not unexpected.&lt;/p&gt;&#xA;" OwnerUserId="163" LastEditorUserId="163" LastEditDate="2012-12-11T17:17:00.003" LastActivityDate="2012-12-11T17:17:00.003" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="649" PostTypeId="1" CreationDate="2012-12-10T17:07:02.340" Score="14" ViewCount="813" Body="&lt;p&gt;The optimal sampling-based motion planning algorithm $\text{RRT}^*$ (described &lt;a href=&quot;http://sertac.scripts.mit.edu/web/wp-content/papercite-data/pdf/karaman.frazzoli-ijrr11.pdf&quot; rel=&quot;noreferrer&quot;&gt;in this paper&lt;/a&gt;) has been shown to yield collision-free paths which converge to the optimal path as planning time increases. However, as far as I can see, the optimality proofs and experiments have assumed that the path cost metric is Euclidean distance in configuration space. Can $\text{RRT}^*$ also yield optimality properties for other path quality metrics, such as maximizing minimum clearance from obstacles throughout the path?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To define minimum clearance: for simplicity, we can consider a point robot moving about in Euclidean space. For any configuration $q$ that is in the collision-free configuration space, define a function $d(q)$ which returns the distance between the robot and the nearest C-obstacle. For a path $\sigma$, the minimum clearance $\text{min_clear}(\sigma)$ is the minimum value of $d(q)$ for all $q \in \sigma$. In optimal motion planning, one might wish to &lt;strong&gt;maximize&lt;/strong&gt; minimum clearance from obstacles along a path. This would mean defining some cost metric $c(\sigma)$ such that $c$ increases as the minimum clearance decreases. One simple function would be $c(\sigma) = \exp(-\text{min_clear}(\sigma))$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the &lt;a href=&quot;http://sertac.scripts.mit.edu/web/wp-content/papercite-data/pdf/karaman.frazzoli-rss10.pdf&quot; rel=&quot;noreferrer&quot;&gt;first paper&lt;/a&gt; introducing $\text{RRT}^*$, several assumptions are made about the path cost metric so that the proofs hold; one of the assumptions concerned additivity of the cost metric, which doesn't hold for the above minimum clearance metric. However, in the more recent &lt;a href=&quot;http://sertac.scripts.mit.edu/web/wp-content/papercite-data/pdf/karaman.frazzoli-ijrr11.pdf&quot; rel=&quot;noreferrer&quot;&gt;journal article&lt;/a&gt; describing the algorithm, several of the prior assumptions weren't listed, and it seemed that the minimum clearance cost metric might also be optimized by the algorithm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know if the proofs for the optimality of $\text{RRT}^*$ can hold for a minimum clearance cost metric (perhaps not the one I gave above, but another which has the same minimum), or if experiments have been performed to support the algorithm's usefulness for such a metric?&lt;/p&gt;&#xA;" OwnerUserId="13" LastEditorUserId="163" LastEditDate="2012-12-18T16:16:17.780" LastActivityDate="2013-01-09T17:50:47.877" Title="Does RRT* guarantee asymptotic optimality for a minimum clearance cost metric?" Tags="&lt;motion-planning&gt;&lt;algorithm&gt;&lt;rrt&gt;&lt;theory&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="650" PostTypeId="1" AcceptedAnswerId="657" CreationDate="2012-12-10T17:44:15.900" Score="-6" ViewCount="5198" Body="&lt;p&gt;I can control a relay from an Android smartphone using Arduino and Bluetooth as seen &lt;a href=&quot;http://bellcode.wordpress.com/2012/01/02/android-and-arduino-bluetooth-communication/&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, it seems too costly to be using Arduino and a Bluetooth receiver for driving a switch. As long as Bluetooth is a radio frequency, is it possible to make a &lt;strong&gt;simple&lt;/strong&gt; Bluetooth receiver which can output 1 or 0 to drive a relay? If yes, how tough that is going to be?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main factor here is the &lt;strong&gt;cost&lt;/strong&gt;, which should be \$1-$5. &lt;/p&gt;&#xA;" OwnerUserId="587" LastEditorUserId="38" LastEditDate="2012-12-11T12:45:20.727" LastActivityDate="2012-12-13T00:11:58.127" Title="Can I make a simple Bluetooth receiver?" Tags="&lt;sensors&gt;&lt;circuit&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="0" ClosedDate="2012-12-14T01:02:43.470" ContentLicense="CC BY-SA 3.0" />
  <row Id="652" PostTypeId="2" ParentId="650" CreationDate="2012-12-10T19:16:26.043" Score="3" Body="&lt;p&gt;The question is a bit vague, but I would say that you at least need to spend ~$16 in a Bluetooth receiver. I have experience with roving networks modules, such as the &lt;a href=&quot;http://www.rovingnetworks.com/products/RN_42&quot; rel=&quot;nofollow&quot;&gt;RN42&lt;/a&gt;, which are easy to set up as wireless serial ports (you can talk to them via &lt;a href=&quot;http://pyserial.sourceforge.net/&quot; rel=&quot;nofollow&quot;&gt;pyserial&lt;/a&gt; or the like).&lt;/p&gt;&#xA;" OwnerUserId="295" LastActivityDate="2012-12-10T19:16:26.043" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="653" PostTypeId="1" CreationDate="2012-12-11T02:06:50.120" Score="7" ViewCount="611" Body="&lt;p&gt;I'm a long time &lt;a href=&quot;http://en.wikipedia.org/wiki/Java_%28programming_language%29&quot; rel=&quot;nofollow noreferrer&quot;&gt;Java&lt;/a&gt; developer who is starting to learn on the &lt;a href=&quot;http://en.wikipedia.org/wiki/Lego_Mindstorms_NXT_2.0&quot; rel=&quot;nofollow noreferrer&quot;&gt;Lego Mindstorms NXT 2.0&lt;/a&gt;. Are there any limitations to using the Java API? Which language is the most robust on the platform?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found a post, &lt;a href=&quot;https://robotics.stackexchange.com/questions/578/lego-nxt-programming-tip)&quot;&gt;&lt;em&gt;Which programming language should I use with the NXT?&lt;/em&gt;&lt;/a&gt; which mentions many of the alternatives. The answer is helpful, but doesn't mention the different languages' limitations.&lt;/p&gt;&#xA;" OwnerUserId="585" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2013-11-15T01:10:18.893" Title="What are the notable limitations on using Java with Mindstorms NXT 2.0?" Tags="&lt;nxt&gt;&lt;programming-languages&gt;&lt;mindstorms&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="654" PostTypeId="1" AcceptedAnswerId="660" CreationDate="2012-12-11T09:58:33.730" Score="40" ViewCount="24293" Body="&lt;p&gt;As I see there is a huge price gap between the two \$223 vs \$99 (at amazon).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My intention is to use one of those from Ubuntu linux to perform depth sensing, navigation etc. and naturally I prefer the cheaper. &#xA;However I am not sure if I miss some important point while betting on the Kinect for Xbox version. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As it seems the Windows version is &lt;a href=&quot;http://www.pcworld.com/article/247724/kinect_for_windows_available_february_1_but_overpriced_at_249.html&quot; rel=&quot;noreferrer&quot;&gt;overpriced&lt;/a&gt; because it has the license for development. &lt;a href=&quot;https://gaming.stackexchange.com/questions/73290/can-kinect-for-windows-work-on-an-xbox-360&quot;&gt;Here&lt;/a&gt; it is stated that there are internal differences but without exact details (The minimum sensing distance seems to be better for Windows version.).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could anyone give a comparison chart?&#xA;It would be good to know about&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Connectivity: USB, special connector, ... .&lt;/li&gt;&#xA;&lt;li&gt;Hardware differences: are they the same or do they really differ in weight, energy consumption, speed, sensing range, ...?&lt;/li&gt;&#xA;&lt;li&gt;Driver: could I use Xbox version under Ubuntu?&lt;/li&gt;&#xA;&lt;li&gt;API usage: could I develop on Xbox version, could I use the same/similar API on both, is the API for Xbox mature enough?&lt;/li&gt;&#xA;&lt;li&gt;License: is it against the license of Xbox version to develop for home/hobby/educational use?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="577" LastEditorUserId="-1" LastEditDate="2017-04-13T12:10:05.973" LastActivityDate="2018-10-29T09:54:15.653" Title="What is the difference between Kinect for Windows and Kinect for XBox?" Tags="&lt;sensors&gt;&lt;kinect&gt;" AnswerCount="4" CommentCount="1" FavoriteCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="655" PostTypeId="2" ParentId="654" CreationDate="2012-12-11T10:57:33.567" Score="15" Body="&lt;p&gt;According to &lt;a href=&quot;http://www.imaginativeuniversal.com/blog/post/2012/02/14/Why-the-Kinect-for-Windows-Sensor-Costs-2424999.aspx&quot;&gt;this article&lt;/a&gt; the hardware is almost the same, only the usb/power cord is different. Even the minimum sensing distance difference is not hardware-based it's only a firmware-based difference.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can use the cheaper hardware for developing programs using Kinect for Windows SDK, but your customers need the more expensive hardware since Kinect for Windows applications will not work with the cheaper hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The article also states, that&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If you want to use one of the non-Microsoft frameworks + drivers for&#xA;  writing Kinect enabled applications such as OpenNI, you are not&#xA;  required to use the new Kinect for Windows hardware.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="592" LastActivityDate="2012-12-11T10:57:33.567" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="656" PostTypeId="1" CreationDate="2012-12-11T20:25:27.937" Score="-4" ViewCount="281" Body="&lt;p&gt;I was wondering what options are there in terms of lightweight (&amp;lt; 5 lbs) robotic arms. I see &lt;a href=&quot;http://www.robai.com/products.php?prdt_id=1&quot; rel=&quot;nofollow&quot;&gt;Robai Cyton Gamma 300&lt;/a&gt;, and &lt;a href=&quot;http://www.crustcrawler.com/products/AX-18F%20Smart%20Robotic%20Arm/&quot; rel=&quot;nofollow&quot;&gt;CrustCrawler AX18&lt;/a&gt; look like interesting options. What lightweight arms do people use/like? &lt;/p&gt;&#xA;" OwnerUserId="595" LastEditorUserId="37" LastEditDate="2012-12-12T15:26:44.963" LastActivityDate="2012-12-12T16:48:55.613" Title="Lightweight, commercially available robotic arms" Tags="&lt;mobile-robot&gt;&lt;robotic-arm&gt;" AnswerCount="2" CommentCount="5" ClosedDate="2012-12-15T23:12:46.240" ContentLicense="CC BY-SA 3.0" />
  <row Id="657" PostTypeId="2" ParentId="650" CreationDate="2012-12-11T21:01:33.773" Score="4" Body="&lt;p&gt;I'm in agreement with &lt;a href=&quot;https://robotics.stackexchange.com/a/652/37&quot;&gt;@movrev&lt;/a&gt; but wanted to expand beyond the scope of a comment.  RN-42 is slick.  I'm coding for it now, and I think it is an excellent BT choice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Low cost and multiple receivers (switches) appear to be mutually exclusive.  You might consider the RN-42 as a BT receiver to preserve smartphone interface.  Then, you might consider an 802.15 (Zigbee) mesh-like solution to distribute a switch command from the RN-42 &quot;master&quot; receiver to the &quot;slave&quot; switches.  The Microchip MRF24J40 is a reasonable 802.15 solution.&lt;/p&gt;&#xA;" OwnerUserId="532" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2012-12-13T00:11:58.127" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="658" PostTypeId="2" ParentId="656" CreationDate="2012-12-11T22:53:37.770" Score="1" Body="&lt;p&gt;Have you thought about cardboard? &lt;a href=&quot;http://www.kickstarter.com/projects/392540503/cardboard-robot-robotic-arm-and-smart-phone-camera&quot; rel=&quot;nofollow&quot;&gt;http://www.kickstarter.com/projects/392540503/cardboard-robot-robotic-arm-and-smart-phone-camera&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2012-12-11T22:53:37.770" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="660" PostTypeId="2" ParentId="654" CreationDate="2012-12-11T23:48:43.910" Score="31" Body="&lt;p&gt;The two pieces of hardware are virtually identical, &lt;a href=&quot;https://robotics.stackexchange.com/a/655/37&quot;&gt;as asalamon74 points out&lt;/a&gt;.  There are only a few hardware differences, with a larger set of restrictions based on firmware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To extend on what asalamon74 has already pointed out, here are some direct answers to your bullet points:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Connectivity for both devices are USB.  If you get a Kinect for Xbox as part of a bundle (i.e., with an Xbox 360) you will need to buy an adapter, &lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/B004IXRXGY&quot; rel=&quot;noreferrer&quot;&gt;available from Amazon&lt;/a&gt; and others.  The adapter comes with when a Kinect for Xbox is sold individually (due to older Xboxs not having the required port).&lt;/li&gt;&#xA;&lt;li&gt;Hardware is virtually the same.  Kinect for Windows has a shorter USB cable.  Kinect for Windows may have a better microphone array, but I can't be sure of that.  Other then that, they are basically the same.&lt;/li&gt;&#xA;&lt;li&gt;Driver/API is the same for both devices.  The official &lt;a href=&quot;http://www.microsoft.com/en-us/kinectforwindows/&quot; rel=&quot;noreferrer&quot;&gt;Kinect for Windows SDK&lt;/a&gt;, &lt;a href=&quot;http://openkinect.org/wiki/Main_Page&quot; rel=&quot;noreferrer&quot;&gt;OpenKinect SDK&lt;/a&gt; and &lt;a href=&quot;http://openni.org/&quot; rel=&quot;noreferrer&quot;&gt;OpenNI SDK&lt;/a&gt; will all work with both devices.&lt;/li&gt;&#xA;&lt;li&gt;License allows you to use the Kinect for Xbox for anything except a deployed (commercial) application.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I use both for development.  I have two Kinect for &lt;em&gt;Windows&lt;/em&gt; that I use at work and I have a Kinect for &lt;em&gt;Xbox&lt;/em&gt; at home.  I bring work home with me frequently and I'm able to develop with either version of the hardware, depending on where I am.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are a few firmware differences that can cause a bit of a hick-up in development.  For example, Kinect for Xbox does not support &quot;near mode&quot; tracking.  Of course, it only effects you if you're trying to use those features.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Microsoft has said that they are actively developing the SDK with the Kinect for Windows in mind.  Although functionality is very close now, that is not necessarily true in the future.  Microsoft could very easily flip a switch to disallow Kinect for Xbox to be used in SDK v1.7 -- unlikely, but possible.  Although more expensive, Kienct for Windows is a safer buy.&lt;/p&gt;&#xA;" OwnerUserId="597" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2012-12-13T17:45:28.227" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="661" PostTypeId="2" ParentId="649" CreationDate="2012-12-12T01:27:36.177" Score="4" Body="&lt;p&gt;*Note, $a|b$ is the concatenation of paths $a$ and $b$. Then $c(\cdot)$ defined as the minimum clearance implies $c(a|b)=min(c(a),c(b))$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You refer to (in reference 1):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;Theorem 11: (Additivity of the Cost Function.)&lt;/strong&gt;&#xA;  For all&#xA;  $\sigma_1$,$\sigma_2$ $\in X_{free}$&#xA;  , the cost function c satisﬁes the following:&#xA;  $c(\sigma_1|\sigma_2) = c(\sigma_1) + c(\sigma_2)$&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Which has become (in reference 3, Problem 2): &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The cost function is assumed to be monotonic, in the sense that&#xA;  for all $\sigma_1,\sigma_2\in\Sigma:c(\sigma_1)\leq c(\sigma_1|\sigma_2)$&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Which is still not the case for minimum clearance distance. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; Given the relaxed restriction on path costs, your suggested exp(-min_clearance) seems fine.&lt;/p&gt;&#xA;" OwnerUserId="163" LastEditorUserId="163" LastEditDate="2012-12-13T15:43:46.497" LastActivityDate="2012-12-13T15:43:46.497" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="662" PostTypeId="2" ParentId="533" CreationDate="2012-12-12T15:02:13.187" Score="4" Body="&lt;p&gt;You can find some nice presentations on &lt;a href=&quot;http://prezi.com/explore/&quot; rel=&quot;nofollow&quot;&gt;prezi&lt;/a&gt; about robotic history (and about many other topics).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example &lt;a href=&quot;http://prezi.com/_a_tszqyeiut/robotics-history/&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt; or &lt;a href=&quot;http://prezi.com/mhcel532cxeq/the-history-of-robots/&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt; or &lt;a href=&quot;http://prezi.com/a3pg61a2t6qr/robots-past-present-and-future/&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt; presentations mention the ancient greek Archytas's robotic pigeon well before Leonardo's work around 350 B.C. and the klepsydra from around 300 B.C. having a feedback control system.&lt;/p&gt;&#xA;" OwnerUserId="577" LastEditorUserId="577" LastEditDate="2012-12-12T15:33:58.403" LastActivityDate="2012-12-12T15:33:58.403" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="663" PostTypeId="2" ParentId="504" CreationDate="2012-12-12T15:06:27.483" Score="3" Body="&lt;p&gt;There are really nice on-line &lt;a href=&quot;http://www.societyofrobots.com/calculator.shtml&quot; rel=&quot;nofollow&quot;&gt;calculators on societyofrobots&lt;/a&gt; including a &lt;a href=&quot;http://www.societyofrobots.com/RMF_calculator.shtml&quot; rel=&quot;nofollow&quot;&gt;robot motor factor calculator&lt;/a&gt; that could be helpful for you.&lt;/p&gt;&#xA;" OwnerUserId="577" LastActivityDate="2012-12-12T15:06:27.483" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="664" PostTypeId="2" ParentId="656" CreationDate="2012-12-12T16:48:55.613" Score="0" Body="&lt;p&gt;The &lt;a href=&quot;http://www.owirobots.com/cart/html/owi-535-robotic-arm-edge-kit.html&quot; rel=&quot;nofollow&quot;&gt;OWI robotic arm&lt;/a&gt; is a cheap starting possibility for $30. &#xA;There is an &lt;a href=&quot;http://www.instructables.com/id/Intro-and-what-youll-need/&quot; rel=&quot;nofollow&quot;&gt;instructables tutorial&lt;/a&gt; on how to connect it to arduino.&lt;/p&gt;&#xA;" OwnerUserId="577" LastActivityDate="2012-12-12T16:48:55.613" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="667" PostTypeId="1" AcceptedAnswerId="668" CreationDate="2012-12-12T19:57:51.837" Score="11" ViewCount="939" Body="&lt;p&gt;Is there an operating system for the Raspberry Pi that is specifically made for running robotics applications? Or an operating system whose purpose is to optimized just to run a few specific programs?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've been working with an Arduino for a while now. As far as efficiency goes, it makes sense to me to just upload a specific set of commands and have the hardware only need to handle that, and not have to worry about running a full fledged operating system. Is something like this possible to do on a Raspberry Pi?&lt;/p&gt;&#xA;" OwnerUserId="457" LastEditorUserId="38" LastEditDate="2012-12-13T15:35:05.300" LastActivityDate="2018-05-22T13:21:50.947" Title="Raspberry Pi operating system for robotics" Tags="&lt;raspberry-pi&gt;&lt;operating-systems&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="668" PostTypeId="2" ParentId="667" CreationDate="2012-12-12T20:12:36.290" Score="7" Body="&lt;p&gt;You are asking two different things. 1) Is there a robotics-specific operating system, and 2) Is it possible to do hardware-level control on an R-Pi without messing around with an operating system. This is sort of a false dichotomy, as an operating system is a benefit, not a cost, unless you are &lt;em&gt;severely&lt;/em&gt; constrained for processing power.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Microcontrolers (Arduino) are designed to handle time-critical things, and usually only one or two time critical things. They are great for turning wheels, etc. When it comes to high level planning, a high-level language / libraries are very helpful. As are multi-threaded applications, etc. This is where your OS comes in. Without further details about your project, I can't help you decide what is the best fit: Arduino or R-Pi.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To answer 1: Yes, just google around.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To answer 2: Yes, the hardware interfaces IO are available to code API's. But you'll need (want) something like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You -&gt; OS -&gt; microcontroller -&gt; hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See &lt;a href=&quot;https://robotics.stackexchange.com/a/610/37&quot;&gt;This excellent answer&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="163" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2012-12-13T15:40:55.890" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="669" PostTypeId="2" ParentId="667" CreationDate="2012-12-12T21:18:02.973" Score="4" Body="&lt;p&gt;From your question, what you might be interested in is an RTOS for microcontrollers. A very popular one is &lt;a href=&quot;http://www.freertos.org/&quot; rel=&quot;nofollow&quot;&gt;FreeRTOS&lt;/a&gt;, which apparently was &lt;a href=&quot;https://github.com/everslick/piratos&quot; rel=&quot;nofollow&quot;&gt;ported to Raspberry Pi&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="95" LastActivityDate="2012-12-12T21:18:02.973" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="670" PostTypeId="2" ParentId="478" CreationDate="2012-12-13T00:00:38.803" Score="1" Body="&lt;p&gt;The &quot;math&quot; way to do this is to generate a speed/torque curve for your stepper at its given voltage, and determine the maximum force that will be applied to the object in motion (in this case, the largest force is likely to be acceleration).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that most hobby 3d printers are so flimsy that the frame bending under acceleration will harm print quality long before you start missing steps.  In this case, you could model the deflection of the frame under load.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my experience, 90% of missed steps are caused by mechanical or software problems such as the axes binding or pulses being missed.  Try moving everything by hand to check if it is smooth.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Overly aggressive speeds and accelerations should be visible (and audible) on a 3d printer long before the steppers stall.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Generally a single missed step will also cause the next steps to also be missed (since the motor must now work even harder to catch up) and you get a few seconds of buzzing instead of motion.&lt;/p&gt;&#xA;" OwnerUserId="65" LastActivityDate="2012-12-13T00:00:38.803" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="671" PostTypeId="1" AcceptedAnswerId="676" CreationDate="2012-12-13T04:43:47.557" Score="2" ViewCount="94" Body="&lt;p&gt;Is there a way to check if a task, function or variable exists in Not eXactly C?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that in PHP you can use &lt;code&gt;isset()&lt;/code&gt; to check if a variable exists and &lt;code&gt;function_exists()&lt;/code&gt; to do the same for a function, but is there a way to do that in NXC?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am specifically interested in checking whether a task exists or it is alive.&lt;/p&gt;&#xA;" OwnerUserId="38" LastEditorUserId="158" LastEditDate="2012-12-13T11:14:47.870" LastActivityDate="2012-12-15T00:19:19.497" Title="Check if task exists in Not eXactly C" Tags="&lt;nxt&gt;&lt;programming-languages&gt;&lt;mindstorms&gt;&lt;not-exactly-c&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="672" PostTypeId="1" CreationDate="2012-12-13T04:45:21.737" Score="3" ViewCount="1455" Body="&lt;p&gt;I'm currently working on a line-following robot which uses three sensors to follow a black line. The sensors are pretty much in line and right next to each other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Right now, I'm doing a simple line follow: if on the line go forward, otherwise turn left or right to regain the line. This means that the robot is wiggling along the line most of the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm looking for a better way for this robot to follow the line using three sensors. The program I'm writing is in Not eXactly C code. I'm trying to get the robot to utilize the power of PID control, but I'm not sure how one would go about writing a three-sensor PID line-follower program in NXC.&lt;/p&gt;&#xA;" OwnerUserId="38" LastEditorUserId="38" LastEditDate="2012-12-18T02:57:38.567" LastActivityDate="2012-12-18T02:57:38.567" Title="PID line follow with three sensors in Not eXactly C" Tags="&lt;nxt&gt;&lt;programming-languages&gt;&lt;mindstorms&gt;&lt;algorithm&gt;&lt;not-exactly-c&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="673" PostTypeId="5" CreationDate="2012-12-13T04:47:09.083" Score="0" Body="&lt;p&gt;Not eXactly C (NXC) is a high-level programming language for the LEGO Mindstorms NXT, built on top of Next Byte Codes (NBC).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://bricxcc.sourceforge.net&quot; rel=&quot;nofollow&quot;&gt;Learn More …&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="38" LastEditorUserId="38" LastEditDate="2012-12-13T15:34:50.993" LastActivityDate="2012-12-13T15:34:50.993" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="674" PostTypeId="4" CreationDate="2012-12-13T04:47:09.083" Score="0" Body="Not eXactly C (NXC) is a high-level programming language for the LEGO Mindstorms NXT, built on top of Next Byte Codes (NBC)." OwnerUserId="38" LastEditorUserId="38" LastEditDate="2012-12-13T15:34:56.827" LastActivityDate="2012-12-13T15:34:56.827" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="675" PostTypeId="2" ParentId="671" CreationDate="2012-12-13T07:30:45.910" Score="2" Body="&lt;p&gt;No, it seems that there's no such possibility, because there's no method in &lt;a href=&quot;http://bricxcc.sourceforge.net/nbc/nxcdoc/NXC_Guide.pdf&quot; rel=&quot;nofollow&quot;&gt;the manual&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="534" LastEditorUserId="534" LastEditDate="2012-12-13T08:21:44.057" LastActivityDate="2012-12-13T08:21:44.057" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="676" PostTypeId="2" ParentId="671" CreationDate="2012-12-13T08:53:49.850" Score="4" Body="&lt;p&gt;As NXC is a compiled language, I would assume calling a non-existent function or accessing a non-existent variable would throw a syntax error during compilation as it does in other compiled languages I have used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Conversely, in interpreted languages like PHP and Python you can often call or access things that don't exist without creating an issue until that actual call or access happens - hence the need for method's like &lt;code&gt;isset()&lt;/code&gt; and &lt;code&gt;function_exists()&lt;/code&gt; in PHP.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt; Looking at the &lt;a href=&quot;http://bricxcc.sourceforge.net/nbc/nxcdoc/nxcapi/task.html&quot; rel=&quot;nofollow&quot;&gt;Tasks docs&lt;/a&gt; it seems that a &quot;task&quot; is similar to a function in that it is defined in the source code, versus being created dynamically at run-time. I expect if you write something like: &lt;code&gt;Precedes(non_existent_task_name);&lt;/code&gt; (&quot;Precedes&quot; being a function to start tasks), and try to compile you would trigger the same sort of syntax error as you would if you did something like: &lt;code&gt;call_of_non_existent_function();&lt;/code&gt;&lt;/p&gt;&#xA;" OwnerUserId="435" LastEditorUserId="435" LastEditDate="2012-12-15T00:19:19.497" LastActivityDate="2012-12-15T00:19:19.497" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="677" PostTypeId="2" ParentId="672" CreationDate="2012-12-13T16:31:15.690" Score="1" Body="&lt;p&gt;I don't think traditional PID control is appropriate &lt;em&gt;per se&lt;/em&gt;, since your sensors only provide a binary &quot;is the line under me&quot; signal; PID controls need to be able to calculate error (error = actual - desired).  Also, you need motors that can adjust their speed instead of simply turning on and off.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One way to get PID control might be to increase the number of sensors from 3 to 9, with barely-overlapping sense area.  That might get you a range of 17 values, 9 from sensors and 8 more in cases where 2 adjacent sensors are triggered.  I'm not sure how many points you'll need to be able to measure in order for PID control to become effective.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A more abstract way to approach this would be to consider the wiggles-per-second to be the value controlled by the PID.  In this case, the PID would control the maximum difference in speed between the two motors -- the maximum rate of turn.  If your robot is wiggling to much, such a PID should cause it to turn in more gradual arcs.  In this case, the correct target wiggles-per-second will depend on the radius of the tightest turn that the robot will have to make.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2012-12-13T16:31:15.690" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="678" PostTypeId="2" ParentId="672" CreationDate="2012-12-13T17:19:38.277" Score="2" Body="&lt;p&gt;I dont use NXC, so I am hesitant to propose this as an answer, but I will comment that the sensors ARE linear - not binary. They measure dark, grey, and light - On, middle, off of line. You simply devise a scheme to get a unique #, and use that as the SetPoint to PID - works great. See &lt;a href=&quot;http://www.mindsensors.com/index.php?module=pagemaster&amp;amp;PAGE_user_op=view_page&amp;amp;PAGE_id=168&quot; rel=&quot;nofollow&quot;&gt;Mindsensors light array&lt;/a&gt; for sample NXC code for their array. Adopt it to 3 sensors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know if this helps or not but is the scheme I use in RobotC; (higly shortened)&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;int LSA_GetAvg()&#xA;{&#xA;    char value[8];&#xA;    int som = 0;&#xA;    I2Cread(MINDSENSORS_LSA, LSA_ADDRESS, 0x42, value, 8);  // read 8 sensor values into an array&#xA;    int bits = 0;&#xA;    for (int i=0;i&amp;lt;8;i++)&#xA;        if (value[i] &amp;lt; 0x32)&#xA;    {&#xA;        som += ((8-i)*10);&#xA;        bits++;&#xA;    }&#xA;    return som / bits;&#xA;}&#xA;&#xA;main loop {&#xA;&#xA;    int avg = LSA_GetAvg();&#xA;    printf(&quot;avg %d\n&quot;, avg);&#xA;&#xA;    if (avg != 0)&#xA;    {&#xA;      steering = S3Pid(Oval, avg, 45, elapsedTime); // 45 is our goal, set point&#xA;      printf(&quot;Steer %d\n&quot;, steering);&#xA;&#xA;      motor[LEFT] = clipBAD((basePower - steering), -100, 100);&#xA;      motor[RIGHT] = clipBAD((basePower + steering), -100, 100);&#xA;    }&#xA;    else&#xA;    {&#xA;        // stuff gone wrong, we lost the line, check packed bits=0xff for a crossing&#xA;      PlaySound(soundBlip);&#xA;    }&#xA;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Edit: as I look at that OLD code - i see that is is not very optimum, and would work just fine with 3 binary sensors - just FYI.&lt;/p&gt;&#xA;" OwnerUserId="274" LastEditorUserId="274" LastEditDate="2012-12-13T17:36:41.107" LastActivityDate="2012-12-13T17:36:41.107" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="679" PostTypeId="1" CreationDate="2012-12-14T11:34:34.700" Score="80" ViewCount="15942" Body="&lt;p&gt;Mars rovers are typically very slow. Curiosity, for example, has average speed of about 30 meters per hour.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why is it designed so slow? Is it because of some specific power restrictions or for other reasons? What is the top reason why it is so slow?&lt;/p&gt;&#xA;" OwnerUserId="516" LastEditorUserId="516" LastEditDate="2012-12-14T11:42:23.107" LastActivityDate="2021-03-07T22:45:06.610" Title="Why are Mars rovers so slow?" Tags="&lt;mobile-robot&gt;&lt;design&gt;" AnswerCount="4" CommentCount="3" FavoriteCount="27" ContentLicense="CC BY-SA 3.0" />
  <row Id="680" PostTypeId="2" ParentId="679" CreationDate="2012-12-14T12:10:21.310" Score="26" Body="&lt;p&gt;I'm not such an expert in physics, but I can think of a few reasons:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Power&lt;/strong&gt;. The amount of power you need to do a task is inversely proportional to the time it takes to do that task. I think it is well known that doing something faster requires more power, otherwise you could do everything infinitely fast at no cost.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Computation Speed&lt;/strong&gt;. The statement about power (above) is not limited to movements. It is also true for computation. Have you noticed when your laptop is on power-saving mode, it runs slower? With processors, if you compute something twice as fast, you need four times more energy to do it. As a result, most probably, the CPU of mars rovers are also &lt;em&gt;not&lt;/em&gt; working at a high speed. Therefore, if the rover needs time to process something before moving on (for example images of the environment), it needs to move slower so it would receive data at a slower rate. Slow enough so that it can process them.&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Stability&lt;/strong&gt;. I believe I don't need to give you formulas for this phenomenon:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/u7Tox.jpg&quot; alt=&quot;car jump&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Simply put, the slower you go, the smaller the chance of lifting off over a ridge and possibly losing your stability when you land.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Maneuverability&lt;/strong&gt;. If you go at a reasonably slow speed, you wouldn't have any trouble steering. On the other hand, at high speeds, you need larger curvature to turn, as well as more pressure on the wheels on the outer side.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Note that some of these issues, such as stability, are true for robots on earth too. However, here on earth we can always flip the vehicle if it turned over, but on Mars we can't trust Martians on it (they may like the rover stuck on its back and start worshipping it, which is totally not cool for us).&lt;/p&gt;&#xA;" OwnerUserId="158" LastEditorUserId="158" LastEditDate="2013-04-12T14:39:26.833" LastActivityDate="2013-04-12T14:39:26.833" CommentCount="13" ContentLicense="CC BY-SA 3.0" />
  <row Id="681" PostTypeId="2" ParentId="679" CreationDate="2012-12-14T12:22:35.467" Score="19" Body="&lt;p&gt;One reason is because of the communications delay between Earth and Mars.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The round trip time for signals from Earth to Mars is several minutes, which means that you can't teleoperate the robot in realtime. That means that the robot needs some autonomous obstacle avoidance capability to help prevent it from getting stuck or otherwise in trouble. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The hazard avoidance equipment on mars rovers is generally designed in a very conservative way, which means drive slow and stop frequently to check your environment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From Wikipedia, for the Mars Exploration Rovers (Spirit and Opportunity):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;...hazard avoidance software causes it to stop every 10 seconds for 20&#xA;  seconds to observe and understand the terrain into which it has&#xA;  driven.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="479" LastEditorUserId="479" LastEditDate="2012-12-14T13:05:39.643" LastActivityDate="2012-12-14T13:05:39.643" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="682" PostTypeId="2" ParentId="679" CreationDate="2012-12-14T16:15:34.333" Score="96" Body="&lt;p&gt;It has more to do with the &lt;a href=&quot;http://en.wikipedia.org/wiki/Rocker-bogie&quot; rel=&quot;noreferrer&quot;&gt;rocker bogie suspension&lt;/a&gt; than anything else.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The system is designed to be used at slow speed of around 10 cm/s, so as to minimize dynamic shocks and consequential damage to the vehicle when surmounting sizable obstacles.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In exchange for moving slowly, the rover is able to climb rocks that are double the wheel diameter (normal suspension has trouble with anything over half the wheel diameter).  This is important when travelling in &amp;mdash; literally &amp;mdash; an alien landscape.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/qcnqs.gif&quot; alt=&quot;Climbing&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(image via &lt;a href=&quot;http://en.smath.info/forum/yaf_postst995p2_Animation-of-mechanisms.aspx&quot; rel=&quot;noreferrer&quot;&gt;http://en.smath.info/forum/yaf_postst995p2_Animation-of-mechanisms.aspx&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are other benefits that come with slow speed: better &lt;a href=&quot;http://trs-new.jpl.nasa.gov/dspace/bitstream/2014/37431/1/05-0761.pdf&quot; rel=&quot;noreferrer&quot;&gt;correlation between successive frames captured by its navigation cameras&lt;/a&gt;, more time to &lt;a href=&quot;http://marsrover.nasa.gov/technology/is_autonomous_mobility.html&quot; rel=&quot;noreferrer&quot;&gt;plan its path&lt;/a&gt;, and power savings.  However, without the capabilities provided by the suspension system &amp;mdash; &lt;a href=&quot;http://vimeo.com/66656664&quot; rel=&quot;noreferrer&quot;&gt;surmounting the obstacles present on the martian surface without getting stuck or causing damage&lt;/a&gt; &amp;mdash; the other benefits are moot.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2013-06-21T20:03:16.020" LastActivityDate="2013-06-21T20:03:16.020" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="683" PostTypeId="2" ParentId="679" CreationDate="2012-12-14T20:51:55.190" Score="40" Body="&lt;p&gt;This seems like a softball question but is surprisingly subtle. There are some excellent answers here, but I can add some basic rigor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason the rovers move so slow is essentially the need to be cautious with a multi-million-dollar piece of equipment. But there are some other design constraints worth mentioning.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Energy&lt;/strong&gt; is simply the worst bottleneck for mobile, autonomous systems. The energy cost for a system to relocate across a surface can be typically modeled as&#xA;$$ \int^{T_{final}}_{T_{initial}} [ c_0 v(t)^2 + c_1 a(t)^2 + c_3v(t) + c_4a(t) + c_5v(t)*a(t) + C ]dt $$ where $c_0...c_6$ are constants representing the motor parameters (see &lt;a href=&quot;http://www.cs.umn.edu/~isler/pub/icra11tokekar.pdf&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;http://www-users.cs.umn.edu/~isler/pub/iser2012solar.pdf&quot;&gt;here&lt;/a&gt;).&#xA;So the cost of travelling to a nearby crater is proportional to the square of the velocity and square of the acceleration. Thus, slower costs less power overall. There is usually a &quot;tipping speed&quot; at which the power consumption spikes, and this is usually a very slow speed. Thus, robots move slow to save power. Additionally, this means a robot cannot carry energy-intensive sensors like &lt;a href=&quot;http://en.wikipedia.org/wiki/LIDAR&quot;&gt;LIDAR&lt;/a&gt;. Note LIDAR is used extensively in autonomous, driverless vehicles like the &lt;a href=&quot;http://www.slashgear.com/back-to-basics-how-googles-driverless-car-stays-on-the-road-09227396/&quot;&gt;Google Car&lt;/a&gt;. Which brings me to...&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Computational Sensing&lt;/strong&gt;. Note, we're not considering power. Now, we have to realize that the robot is &lt;em&gt;autonomous&lt;/em&gt; (i.e., driver-less). Given the reduced sensors, a robot cannot model its whole environment, and plan a large route. Think of it this way, would you run through the forest in the dark? Not if you didn't need to. The robot is constantly &quot;in the dark&quot; since it cannot see very far ahead, so it moves slowly, carefully planning each step. The memory and cpu required to plan these things is $O(r^3)$ or worse, where $r$ is the radius of planning. see &lt;a href=&quot;http://citeseerx.ist.psu.edu/viewdoc/download;jsessionid=C47C6FE1DB3CE7AB3F24921BF5394BBD?doi=10.1.1.44.4807&amp;amp;rep=rep1&amp;amp;type=pdf&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=1013713&amp;amp;tag=1&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Communication Delays&lt;/strong&gt;. As mentioned, the robot is i) autonomous, and ii), sensing-limited. The humans have to constantly &quot;check-in&quot; to make sure the robot isn't doing something stupid (despite its state of the art planning algorithms). This means the robot will wait for instructions a &lt;em&gt;lot&lt;/em&gt;, thus slow average progress towards a goal. The previous references address this.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Stability&lt;/strong&gt;. To achieve stability / robustness, the rovers use the rocker-bogie system. see &lt;a href=&quot;http://trs-new.jpl.nasa.gov/dspace/bitstream/2014/38435/1/04-0705.pdf&quot;&gt;this&lt;/a&gt;. This system is designed to be operated at slow speeds. If you go fast, and hit a rock, you break your rover. Try to imagine doing that sensor-based motion planning.  Now try to do so when all your relevant sensors are &lt;a href=&quot;http://www.nasa.gov/mission_pages/msl/multimedia/gallery/pia13809.html&quot;&gt;on a mast attached to the top of your robot&lt;/a&gt;, and you'll see that keeping the sensing payload stable is very important.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="163" LastEditorUserId="350" LastEditDate="2013-06-21T17:06:42.790" LastActivityDate="2013-06-21T17:06:42.790" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="684" PostTypeId="1" AcceptedAnswerId="686" CreationDate="2012-12-15T13:14:25.053" Score="7" ViewCount="1860" Body="&lt;p&gt;I have an LM2576 circuit plus an adjuster to adjust the output voltage, for controlling motor speed in a line follower robot. The circuit works great when adjusted to give out low voltages, but when I adjust it to higher voltages for my motors to go faster, it works great for 1-2 minutes, then suddenly cuts down the power and motors start to go extremely slow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even when I decrease or increase the output voltage, it won't respond until I turn off the power and turn it back on again. There is something mentioned in the LM2576 datasheet that if we overload the IC it will cut down the power until the load comes lower, so I think it might be a problem with that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since this problem has already caused us to lose the competitions with 5+ teams, I would like to solve it for our next competition, so why does our LM2576 circuit suddenly reduce the power?&lt;/p&gt;&#xA;" OwnerUserId="21" LastEditorUserId="37" LastEditDate="2012-12-23T23:54:08.693" LastActivityDate="2012-12-23T23:54:08.693" Title="Why does our LM2576 circuit suddenly cut down the power?" Tags="&lt;motor&gt;&lt;electronics&gt;&lt;power&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="685" PostTypeId="2" ParentId="684" CreationDate="2012-12-15T17:47:11.693" Score="5" Body="&lt;p&gt;According to the &lt;a href=&quot;http://www.ti.com/lit/ds/symlink/lm2576.pdf&quot;&gt;datasheet&lt;/a&gt;, there are three possibilities: TTL shutdown, thermal shutdown and current limiting. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;From what I looked up, TTL shutdown means simply that you have a pin you can use to cut-off the regulator output current. My guess is that it is pin 5 and you simply grounded it, as seen in the typical application circuit, so that possibility can be eliminated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since the circuit works great for 1-2 minutes and then shuts down, my guess is that you are not properly heatsinking and the regulator is going through thermal shutdown. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the IC isn't feeling hot enough, however, then you can probably assume current limiting. In that case, you have to investigate why your circuit is demanding so much current (probably a flawed design).&lt;/p&gt;&#xA;" OwnerUserId="95" LastActivityDate="2012-12-15T17:47:11.693" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="686" PostTypeId="2" ParentId="684" CreationDate="2012-12-15T19:35:24.243" Score="11" Body="&lt;p&gt;If I were you, I would first (1) read the &lt;a href=&quot;http://www.onsemi.com/pub_link/Collateral/LM2576-D.PDF&quot; rel=&quot;nofollow noreferrer&quot;&gt;LM2576 datasheet&lt;/a&gt;.&#xA;I'm assuming you are using a circuit similar to the schematic and PCB layout on page 23 of the LM2576 datasheet.&#xA;I'm guessing you've tweaked the circuit slightly, replacing the manually-operated pot shown on the schematic for R2, replaced with some sort of microprocessor-controlled thing that frequently changes its effective resistance to make that motor spin faster or slower.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then I would (2) put my finger on the chip.&#xA;If it feels so hot that I can't hold my finger on it, I would suspect&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;thermal shutdown.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;georgebrindeiro covered this. You'll also want to read p. 18 of the datasheet, the section &quot;Thermal Analysis and Design&quot;: &quot;The following procedure must be performed to determine whether or not a heatsink will be required. ...&quot;. The typical solution is to add a big heat sink to the chip. Do you see the size of the heatsink on the PCB layout on page 23 of the datasheet?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next I would (3) take a cheap multimeter, switch it to &quot;Amp&quot; mode, and connect it in-line with the motor leads.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the output voltage drops (which I measure with my more expensive multimeter),&#xA;and I hear and see the motors slow down, what does the cheap multimeter say?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does the cheap multimeter stay pegged at some high current above 3 A (the datasheet says the internal limit will be somewhere between 3.5 A and 7.5 A)?&#xA;If so, then we almost certainly have:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;current limiting. The regulator is working as-designed.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The typical solution is to figure out what is pulling so much current, and somehow replace it with something that pulls less current.&#xA;Perhaps the robot has run into a wall or got stuck in a rut, and the motors have stalled out.&#xA;Then maybe the controller needs to sense this condition, stop its futile efforts to punch through the wall, and reverse direction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sometimes we really need more current than one regulator can supply.&#xA;Then we must replace that regulator with multiple regulators or higher-current regulators or both.&#xA;(But not so much current that it immediately melts the wires in the motor).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, if the output voltage &lt;em&gt;and&lt;/em&gt; the output current drop, then&#xA;I would (4) connect my more expensive multimeter to the power input pins of the regulator.&#xA;If that is much lower than I expected, then perhaps:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The input voltage is lower than I expected.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;When you supply the motors with a higher voltage, they drain the batteries much quicker. Partially-drained batteries have a no-load voltage &lt;em&gt;lower&lt;/em&gt; than you might expect from the &quot;nominal&quot; voltage printed on the battery, and &lt;em&gt;loaded&lt;/em&gt; batteries have an even lower voltage. I doubt this is your problem, since you imply that if you disconnect the battery and reconnect the &lt;em&gt;same&lt;/em&gt; battery, it seems to start working again. The typical solution is to put more batteries in series to increase the actual working voltage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next I would (5) try disconnecting the batteries, and powering everything from a high-current grid-powered &quot;power supply&quot; set to the appropriate output voltages.&#xA;If it seems to run fine off that power supply, but not from batteries, I would suspect:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;switching-regulator latchup. &quot;Latchup of Constant-Power Load With Current-Limited Source&quot; &lt;a href=&quot;http://www.smpstech.com/latch000.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.smpstech.com/latch000.htm&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;When you supply the motors with a higher voltage, they pull a higher current.&#xA;Surprisingly often, the total impedance at the input power pins of switching regulator is so high (bad) that when the regulator turns its internal power switch on, the voltage at its input power pins plummets so low that it's not possible to pull the desired current from that battery.&#xA;Milliseconds later, when the switch turns off, the battery pulls the voltage back up to some reasonable voltage -- so this problem is difficult to debug with a standard multimeter, but obvious when you have the input power pins connected to an oscilloscope.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only complete cure is to somehow reduce the total input impedance at the input power pins.&#xA;Occasionally all you need to do is reduce the wiring impedance -- shorten the wires (reduce the resistance), or bring closer together the PWR and GND wires (reduce the inductance), or both.&#xA;Occasionally all you need to do is put more capacitance across the power input pins of the regulator.&#xA;As a battery drains, its effective series resistance increases.&#xA;In theory, you can always cure this by putting more batteries in parallel to reduce the net ESR of of all the batteries in parallel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some people want a very lightweight robot, and so they can't add more batteries, so they can't completely cure the problem.&#xA;Sometimes they can get adequate performance from the robot by using various &quot;soft-start&quot; or &quot;load-shedding&quot; techniques.&#xA;Rather than trying to pull a lot of power from the batteries to get up to speed quickly -- more power than the battery can physically supply, and so triggering this unwanted latchup -- we pull somewhat less power from the batteries, slowly ramping up to speed, and applying various &quot;limp mode&quot; and &quot;tired mode&quot; techniques to keep the total power at any one instant low enough that the battery can supply it.&#xA;(You may be interested in&#xA;&lt;a href=&quot;https://robotics.stackexchange.com/questions/416/what-is-the-best-way-to-power-a-large-number-27-servos-at-5-v&quot;&gt;What is the best way to power a large number (27) servos at 5 V?&lt;/a&gt;&#xA;).&lt;/p&gt;&#xA;" OwnerUserId="187" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2012-12-15T19:35:24.243" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="687" PostTypeId="1" AcceptedAnswerId="688" CreationDate="2012-12-15T21:31:07.840" Score="1" ViewCount="1309" Body="&lt;p&gt;I want to learn robotics and really interested in making a robot based on Kinect sensor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I see so many projects like &lt;a href=&quot;http://www2.macleans.ca/2011/11/03/the-150-robot-revolution/&quot; rel=&quot;nofollow&quot;&gt;this one&lt;/a&gt;, and just wondering how it works on top level. I downloaded Kinect SDK and did some basic tutorials, but I just don't think that Microsoft SDK is the library to use for real robotics projects. Any suggestions where to start and what library to use? Any good books in particular or online resources?&lt;/p&gt;&#xA;" OwnerUserId="575" LastEditorUserId="10596" LastEditDate="2016-09-30T13:19:31.053" LastActivityDate="2016-09-30T13:19:31.053" Title="Robotics with Kinect" Tags="&lt;kinect&gt;" AnswerCount="4" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="688" PostTypeId="2" ParentId="687" CreationDate="2012-12-15T22:17:41.517" Score="7" Body="&lt;p&gt;Welcome to the Robotics StackExchange! The Kinect is only a sensor, albeit a relatively powerful one for its price. To use it with a robot, you need to cover basically two bases:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Get a robot that is able to interface with it&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That means you need to somehow build/buy something consisting of processing unit (a microcontroller or PC) with USB connectivity and the appropriate drivers to recognize and control the Kinect (usually easier with a PC running Linux). This thing also needs to be able to provide appropriate power input to the sensor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You also want it to be able to move, so you need to add motors or other actuators to it and figure out how to get your processing unit to control them (usually easier with a microcontroller).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want it to be able to process all the data from the Kinect and make complex decisions by itself you will need enough processing power onboard (usually a PC). Otherwise, you might have to add wireless communication with other computers that will do the heavy calculations.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Figure out how to get the Kinect data and what to do with it&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Microsoft SDK is perfectly usable, as is OpenNI or libfreenect... It really comes down to what operating system is running on your robot. I am not aware of how to interface the Kinect with less powerful microcontrollers not running a popular OS (Windows/Linux/Mac) and while it may be possible it definitely is not desirable (as in it would be a lot of work for a beginner).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you've chosen which programming library and driver to use to get Kinect data, you will need to find out what you want to do with the data you get. The raw sensor data is just a range image, but some of these libraries can provide some higher-level info extracted from these range images such as skeletonized models of people.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;In short:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Start by figuring out what kind of robot you want, how you want it to move, where the Kinect will be placed and so on. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Choose your processing unit after searching for alternatives that are able to interface with the Kinect easily. I would suggest something like a netbook running Linux to a beginner, with a microcontroller board like the Arduino connected via USB to control motors and other low-level components of the robot.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Once you have the basic components of your robot ready (e.g. mechanical parts in place, PC running Linux, motor control working, etc) add the Kinect to the mix by connecting it to your processing unit and start working on what to do with it.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="95" LastEditorUserId="95" LastEditDate="2012-12-16T18:31:12.400" LastActivityDate="2012-12-16T18:31:12.400" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="689" PostTypeId="1" AcceptedAnswerId="717" CreationDate="2012-12-16T01:59:01.610" Score="8" ViewCount="244" Body="&lt;p&gt;I'm building a motion control platform with 3 DoF: 1 axis of rotation (theta) and 2 cartesian (x,y). In most applications, like wrist actuation, you have an X-Y stage with a rotating servo as the stage's payload. This configuration works well since little of the power and data wiring needs to transit to the non-linear moving portion of the platform. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For my inverted application, the stackup is reversed. The rotating axis comes first (from the mounting plane) with the stage connected as the rotating platform's payload. Now nearly all of the wiring (power, command, sensor, and otherwise) must be routed to the non-linearly moving section.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can see two broad approaches: &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;The inside track, I route the cabling through the center of rotation.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The outside track, I route the cabling around outside the outer diameter of the rotating platform.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Mathematically, I can see that (1) results in minimum cable length, but maximum torsional loading, while (2) results in maximum cable length, but minimum torsional loading on the wires.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Having limited experience with cable routing (and the associated carriers, strategies, and products) in non-linear applications, my question is...&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;...which approach is better in practice?&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Cost isn't really the issue here. I'm more interested in reliability, ease of construction, availability of commercial components (says something about the popularity of the technique), etc...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;e.g. the generic concepts behind why you pick one over the other. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;...of course, if you have some part numbers for me I wouldn't be upset &amp;lt;-- I know I'm not supposed ask that here ;-)&lt;/p&gt;&#xA;" OwnerUserId="531" LastEditorUserId="531" LastEditDate="2012-12-16T02:52:45.463" LastActivityDate="2012-12-21T14:00:35.390" Title="Cable routing in theta, x, y motion control system. Better inside or outside?" Tags="&lt;control&gt;&lt;wiring&gt;&lt;routing&gt;&lt;motion&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="690" PostTypeId="1" AcceptedAnswerId="691" CreationDate="2012-12-16T05:29:07.907" Score="7" ViewCount="781" Body="&lt;p&gt;When using an EKF for SLAM, I often see the motion and measurement models being described as having some noise term.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This makes sense to me if you're doing a simulation, where you need to add noise to a simulated measurement to make it stochastic.  But what about when using real robot data?  Is the noise already in the measurement and thus does not need to be added, or does the noise matrix mean something else?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, in Probabilistic Robotics (on page 319), there is a measurement model: $z_t^i = h(y,j) + Q_t$, where $Q_t$ is a noise covariance.  Does $Q_t$ need to be calculated when working with real data?&lt;/p&gt;&#xA;" OwnerUserId="502" LastActivityDate="2012-12-16T05:39:56.813" Title="Noise in motion and measurement models" Tags="&lt;slam&gt;&lt;kalman-filter&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="691" PostTypeId="2" ParentId="690" CreationDate="2012-12-16T05:39:56.813" Score="8" Body="&lt;p&gt;When using the EKF (or standard KF) on a real robot, you will want to tell the filter how much noise there is in each measurement, and in the process.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The purpose of this is so that the Kalman filter can decide how much it &quot;trusts&quot; each source of data, and therefore, the weighting to give each measurement in its final estimation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For real robot data, the noise is already in the measurement. I think when you say &quot;noise matrix&quot;, you are referring to the covariance matrix. This is not the actual noise per se, but rather, the noise covariance matrix describes the magnitude of the noise (that can be expected by the Kalman Filter), and the correlation between different noise terms, for a normal distribution of noise. You will generally want as accurate a noise covariance as possible, however, it can simply be estimated. When working with real data, you can perform a quick experiment to estimate the noise covariance, or you can also estimate it by consulting datasheets, or select a somewhat sensible value. Where there is not much data available, the covariance will normally be a diagonal matrix (ie. no correlation). The diagonal elements of the covariance matrix is also referred to as the &lt;strong&gt;variance&lt;/strong&gt;. That means that you are telling the Kalman filter what the variance of the different noise sources are (square of standard deviation of the noise).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If on the other hand, you are wondering why the models related to the Kalman Filter may have a noise term (as opposed to a noise covariance), they are only models, and those equations are not actually used in the algorithm. The equations used by the algorithm will have terms representing the noise covariance (not the actual noise - which is unknown), which it normally keeps an online estimate of.&lt;/p&gt;&#xA;" OwnerUserId="145" LastActivityDate="2012-12-16T05:39:56.813" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="692" PostTypeId="2" ParentId="687" CreationDate="2012-12-17T10:11:24.910" Score="1" Body="&lt;p&gt;Evil Closet Monkey nicely itemized the possible Kinect libraries in &lt;a href=&quot;https://robotics.stackexchange.com/a/660/577&quot;&gt;his answer&lt;/a&gt; to another Kinect related question mentioning &lt;a href=&quot;http://openkinect.org/wiki/Main_Page&quot; rel=&quot;nofollow noreferrer&quot;&gt;OpenKinect SDK&lt;/a&gt; and &lt;a href=&quot;http://openni.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;OpenNI SDK&lt;/a&gt; besides Windows SDK.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A good book on Kinect is &lt;a href=&quot;http://shop.oreilly.com/product/0636920020684.do&quot; rel=&quot;nofollow noreferrer&quot;&gt;Making Things See&lt;/a&gt; by Greg Borenstein from O'Reilly.&lt;/p&gt;&#xA;" OwnerUserId="577" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2012-12-17T10:21:54.470" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="693" PostTypeId="1" AcceptedAnswerId="694" CreationDate="2012-12-18T01:47:33.573" Score="9" ViewCount="2271" Body="&lt;p&gt;Is there anything different between a iRobot Roomba and the Create?  I want go start building my own turtlebot and playing with ROS but with the cost of all the parts I'm going to have to do it piece by piece.  It's pretty easy to find cheap used Roombas.  &lt;/p&gt;&#xA;" OwnerUserId="529" LastEditorUserId="110" LastEditDate="2014-05-20T12:56:23.817" LastActivityDate="2014-05-20T12:56:23.817" Title="Can I use ROS with a Roomba?" Tags="&lt;ros&gt;&lt;roomba&gt;&lt;irobot-create&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="694" PostTypeId="2" ParentId="693" CreationDate="2012-12-18T03:34:36.223" Score="6" Body="&lt;p&gt;Can you use a Roomba with ROS? &lt;a href=&quot;http://www.ros.org/wiki/Robots/Roomba&quot;&gt;Absolutely&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can you use a Roomba with the existing turtlebot code? Most likely but it may depend on model of the Roomba since older models have a slightly different API. Of course even if there are API differences that haven't been accounted for it should not be too difficult to adjust the code to handle them.&lt;/p&gt;&#xA;" OwnerUserId="177" LastEditorUserId="163" LastEditDate="2012-12-18T16:12:33.383" LastActivityDate="2012-12-18T16:12:33.383" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="696" PostTypeId="1" CreationDate="2012-12-18T09:53:59.407" Score="3" ViewCount="100" Body="&lt;p&gt;The interesting &lt;a href=&quot;http://www.eecs.harvard.edu/ssr/projects/progSA/kilobot.html&quot; rel=&quot;nofollow&quot;&gt;Kilobot project&lt;/a&gt; from Harvard for investigating multi-robot behavior with masses of small dumb robots has been made &lt;a href=&quot;http://ssr.wikidot.com/kilobot-documents&quot; rel=&quot;nofollow&quot;&gt;open hardware&lt;/a&gt; for a year now. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However I cannot find so much activity about robot creation and movies about results. Is it too hard to create the robots, the programmer, the charger or isn't the project interesting enough?&lt;/p&gt;&#xA;" OwnerUserId="577" LastEditorUserId="350" LastEditDate="2012-12-18T22:16:30.563" LastActivityDate="2013-01-22T21:02:53.550" Title="Are there working instances of Kilobot projects?" Tags="&lt;multi-agent&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="697" PostTypeId="1" CreationDate="2012-12-18T17:13:05.567" Score="13" ViewCount="815" Body="&lt;p&gt;I'm a software engineer who volunteers with a non-profit that introduces young girls to technology. We have recently been talking about methods of introducing these children to the world of robotics, and I am curious what types of low-cost options we have.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One very appealing idea would be to have an online simulator, or (more preferable) an off-line standalone-simulator that we can build and program simple robots with. Perhaps nothing more than dragging components together, and then programming the interactions between those components.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What solution(s) exist that I might be able to make use of in our outreach?&lt;/p&gt;&#xA;" OwnerUserId="250" LastActivityDate="2013-01-25T17:50:21.990" Title="Standalone (or capable of being) Robotics Simulator" Tags="&lt;software&gt;&lt;simulator&gt;&lt;children&gt;" AnswerCount="7" CommentCount="2" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="698" PostTypeId="2" ParentId="697" CreationDate="2012-12-18T17:50:43.980" Score="7" Body="&lt;p&gt;Stage and Gazebo are open source 2D and 3D simulators respectively. They are created and maintained by the &lt;a href=&quot;http://playerstage.sourceforge.net/&quot;&gt;Player project&lt;/a&gt;. They are very easy to use and have a lot of pre-built maps and robots. Depending on the experience of your audience you may need to do a bit of the heavy lifting (i.e. building configuration files and the main classes).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They have a couple of additional benefits as well. First, so long as you create your main control code as player plug-ins then they can be easily adapted to real robots. Second, there are a large number of plug-ins already built to work with real hardware. Third, they work with &lt;a href=&quot;http://ros.org&quot;&gt;ROS&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="177" LastActivityDate="2012-12-18T17:50:43.980" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="699" PostTypeId="2" ParentId="697" CreationDate="2012-12-18T18:02:38.617" Score="3" Body="&lt;p&gt;&lt;a href=&quot;https://www.microsoft.com/robotics/&quot; rel=&quot;nofollow&quot;&gt;Microsoft robotics&lt;/a&gt; is FREE and includes a &lt;a href=&quot;https://www.microsoft.com/robotics/#GetStartedStep3&quot; rel=&quot;nofollow&quot;&gt;simulator&lt;/a&gt;. It is not exactly the easiest environment in the world, however it IS robust and appropriate to real robotics.  I think with some teacher involvement to set things up beforehand, it could be usable. There is a simulator 'package' for LEGO, Neato and some other robots, and they can be programmed in C# or a visual drag and drop language. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Again, I think it would need some work up front to make it easy for youngsters to use, but it wouldn't be that hard, and would be my approach given your requirements. I would say as far as complexity goes, this (windows) vs. a Linux environment with Gazebo/ROS, the windows environment would be slightly less complicated, although most of that would hopefully be hidden with preparation work.&lt;/p&gt;&#xA;" OwnerUserId="274" LastActivityDate="2012-12-18T18:02:38.617" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="700" PostTypeId="2" ParentId="697" CreationDate="2012-12-18T18:09:25.960" Score="2" Body="&lt;p&gt;&lt;a href=&quot;http://www.robotc.net/index.php&quot; rel=&quot;nofollow&quot;&gt;RobotC&lt;/a&gt; has a &lt;a href=&quot;http://www.robotc.net/blog/2012/11/19/new-versions-of-rvw-curriculum-and-competition-tables/&quot; rel=&quot;nofollow&quot;&gt;simulator&lt;/a&gt; available, although both are products at some costs. However, they are very geared towards younger students and education. This would be the easiest, and most appropriate route if costs are not a blocking factor (&lt;a href=&quot;http://www.robotc.net/purchase/rvw/&quot; rel=&quot;nofollow&quot;&gt;around \$100 per license for both for single user, \$300 for 6 users, \$600 for 30 users&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you buy the student version &lt;a href=&quot;http://www.robotc.net/purchase/nxt/&quot; rel=&quot;nofollow&quot;&gt;ROBOTC for MINDSTORMS NXT of LEGO&lt;/a&gt; the price can be 49\$ for each or 40$ (more than 20 licences) &lt;/p&gt;&#xA;" OwnerUserId="274" LastEditorUserId="274" LastEditDate="2012-12-19T17:53:18.237" LastActivityDate="2012-12-19T17:53:18.237" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="701" PostTypeId="2" ParentId="697" CreationDate="2012-12-18T20:32:01.393" Score="4" Body="&lt;p&gt;May be it is a bit pricy (CHF 75) but I still suggest &lt;a href=&quot;http://www.ceebot.com/colobot/edu-e.php&quot; rel=&quot;nofollow&quot;&gt;Colobot&lt;/a&gt;. It is a nice, almost game-like environment where robots need to help humans to make a space base habitable. Robots are programmed by the kids while increasingly complex tasks are performed. The program teaches the fundamentals of programming in a goal-oriented, funny way.&lt;/p&gt;&#xA;" OwnerUserId="577" LastActivityDate="2012-12-18T20:32:01.393" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="702" PostTypeId="2" ParentId="327" CreationDate="2012-12-19T03:57:37.393" Score="2" Body="&lt;p&gt;A simplified method for learning would be to make the robot into one random position and then another and tweak the second position until it moves forward. Using this position as a start do the process again n times and then you will have n positions to move through that make the robot move forward.&lt;/p&gt;&#xA;" OwnerUserId="374" LastActivityDate="2012-12-19T03:57:37.393" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="703" PostTypeId="2" ParentId="533" CreationDate="2012-12-19T09:46:13.297" Score="1" Body="&lt;p&gt;One major development milestone was the first functioning robot to use electricity. As mentioned in Jordan Brown's link, Nikola Tesla demonstrated a radio-controlled robotic boat (more of an ROV I suppose) in a specially-built pool in Madison Square Garden in 1898. He even implemented a crude logic gate designed to prevent other transmitters from taking control from him.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Radio being a not exactly well-known technology in 1898 (Marconi had not even filed for any patents in the US yet), disbelieving onlookers gave such explanations as witchcraft, telepathy, and a tiny trained monkey hidden inside the vehicle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Related US patents:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.google.com/patents/US613809&quot; rel=&quot;nofollow&quot;&gt;Patent 613,809: Method of and Apparatus for Controlling Mechanism of Moving Vessels or Vehicles&lt;/a&gt;&#xA;&lt;a href=&quot;http://www.google.com/patents/US725605&quot; rel=&quot;nofollow&quot;&gt;Patent 725,605: System of Signaling&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="308" LastActivityDate="2012-12-19T09:46:13.297" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="704" PostTypeId="1" CreationDate="2012-12-20T00:06:58.897" Score="4" ViewCount="635" Body="&lt;p&gt;I recently asked a question about the juniper WiFi shield, and am now working with wifly from spark fun. I've been using an updated version of their experimental library, and have been attempting to set up a webserver. Unfortunately, when I attempt to connect through a web browser, I get an error saying that the page sent no data. Here's my code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;SPI.h&amp;gt;&#xA;#include &amp;lt;WiFly.h&amp;gt;&#xA;&#xA;WiFlyServer s(80);&#xA;boolean current_line_is_blank=true;&#xA;void setup() {&#xA;  Serial.begin(9600);&#xA;  WiFly.begin();&#xA;  if(!WiFly.join(placeholderssid, placeholderpass,WPA_MODE)) {&#xA;    Serial.println(&quot;Connection Failed.&quot;);&#xA;  } else {&#xA;    Serial.println(&quot;Connection Succesful!&quot;);&#xA;    Serial.println(WiFly.ip());&#xA;    Serial.println(&quot;Receving Client Input...&quot;);&#xA;    s.begin();&#xA;&#xA;  }&#xA;}&#xA;void loop() { &#xA;   WiFlyClient c = s.available();&#xA;   if(c) {&#xA;   Serial.println(&quot;Server Ready.&quot;);&#xA;   current_line_is_blank=true;&#xA;   while(c.connected()) {&#xA;     Serial.println(&quot;Client Connected.&quot;);&#xA;     if(c.available()) {&#xA;       Serial.println(&quot;Client Available for data.&quot;);&#xA;       char tmp = c.read();&#xA;       Serial.println(tmp);&#xA;       if(tmp == '\n' &amp;amp;&amp;amp; current_line_is_blank) {&#xA;         Serial.println(&quot;Sent OK Response.&quot;);&#xA;         c.println(&quot;HTTP/1.1 200 OK&quot;);&#xA;         c.println(&quot;Content-Type: text/html&quot;);&#xA;         c.println();&#xA;         c.print(&quot;WiFly Webserver Running!&quot;);&#xA;         c.println(&quot;&amp;lt;br /&amp;gt;&quot;);&#xA;         break;&#xA;       }&#xA;      if (tmp == '\n') {&#xA;          // we're starting a new line&#xA;          current_line_is_blank = true;&#xA;        } else if (tmp != '\r') {&#xA;          // we've gotten a character on the current line&#xA;          current_line_is_blank = false;&#xA;        }&#xA;       }&#xA;   }&#xA;   }&#xA;    delay(2000);&#xA;    c.stop();&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I am using Arduino Uno, and the serial monitor looks like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Connection Succesful!&#xA;10.100.1.173&#xA;Receving Client Input...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Is there anything obviously wrong with my code?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT:&#xA;I now have a new shield, but I'm still working with the same problem. Is it a malfunction in the hardware? I just can't figure this out!&lt;/p&gt;&#xA;" OwnerUserId="498" LastEditorUserId="498" LastEditDate="2013-02-19T01:47:30.850" LastActivityDate="2013-02-19T01:47:30.850" Title="Wifly Shield Not Connecting" Tags="&lt;arduino&gt;&lt;software&gt;&lt;wifi&gt;&lt;c&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="706" PostTypeId="2" ParentId="704" CreationDate="2012-12-20T04:49:39.110" Score="1" Body="&lt;p&gt;I've never programmed an Arduino or used this module, but from a quick look at the code and its output, it looks like only setup() is getting run, while loop() is the source of the problem (sort of expected). Try adding a println statement before checking for c to see if the loop gets run at all. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;...&#xA;void loop() { &#xA;  WiFlyClient c = s.available();&#xA;  Serial.println(&quot;Looping...&quot;);&#xA;  if(c) {&#xA;    Serial.println(&quot;Server Ready.&quot;);&#xA;    ...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Assuming the above checks out, my hunch is that the problem is in the first line of the loop:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;...&#xA;WiFlyClient c = s.available();&#xA;...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Why are you initializing the client, c, with the server's availability? This seems to imply that the if statement is essentially testing for the server's availability, instead of the client's availability. What's more, you then also run c.connected(), c.available(), and c.println(), which is somewhat at odds with c's initialization.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Try checking what you need to initialize c with and then probably switch the if statement as follows:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;...&#xA;if(c.available()) {&#xA;...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Just my 2c. &lt;/p&gt;&#xA;" OwnerUserId="295" LastActivityDate="2012-12-20T04:49:39.110" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="707" PostTypeId="2" ParentId="609" CreationDate="2012-12-20T16:59:54.730" Score="2" Body="&lt;p&gt;To offer an answer that (specifically) addresses the question, as I understand it, the RaspberryPi offers (either as part of the standard Pi distros, as add-ons or compilable from source) pretty much anything and everything that the Linux operating system provides.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, for those that are not part of the distro (or from the repositories) there are portability issues, due to the specific hardware platform.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;does this essentially allow for anything that would run on a linux box&#xA;  (raspberryPi) to run and operate your robot&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As such, I'm of the opinion that &quot;Maybe&quot; is the answer... but whether I'd trust a robot to a Pi is another question entirely.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;That having been said, now some personal opinion:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yes I have a couple of Pis that I'm experimenting with, but I've rapidly broken through the hype surrounding the Raspie.  I've come to the conclusion that it is so general purpose that it is, in effect, a solution looking for a problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As an embedded prototyping system, one is better off with an Arduino or a PIC dev-kit, in my humble opinion.&lt;/p&gt;&#xA;" OwnerUserId="134" LastActivityDate="2012-12-20T16:59:54.730" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="708" PostTypeId="2" ParentId="327" CreationDate="2012-12-20T20:37:37.580" Score="2" Body="&lt;p&gt;I have built a lot of walking robots, in my experience if you can't get it to walk by programming a gait you are not going to get it to learn because you don't know what it is supposed to do and the search space is too large. Using an Arduino you may be able to get it to fine tune some movements iff you can define good movements.&lt;/p&gt;&#xA;" OwnerUserId="653" LastActivityDate="2012-12-20T20:37:37.580" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="709" PostTypeId="1" AcceptedAnswerId="713" CreationDate="2012-12-20T20:49:33.020" Score="30" ViewCount="6327" Body="&lt;p&gt;I was working on a project to make a bedside night light out of a stuffed butterfly or bird. I was making a mechanism to make the wings flap with a servo motor and some small gears. The &lt;a href=&quot;http://www.vexrobotics.com/276-2162.html&quot;&gt;servo motor&lt;/a&gt; was very loud as it moved. And this was whether or not the servo was moving large amounts, small amounts, fast or slow. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've worked with small servos before and realized they usually are pretty noisy machines, but I can't really explain why.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why are small servo motors noisy when they move? Is it backlash in the internal gearing?&lt;/p&gt;&#xA;" OwnerUserId="654" LastEditorUserId="654" LastEditDate="2013-05-21T21:01:53.427" LastActivityDate="2013-05-21T21:01:53.427" Title="Why are Servo Motors so noisy?" Tags="&lt;rcservo&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="12" ContentLicense="CC BY-SA 3.0" />
  <row Id="711" PostTypeId="2" ParentId="533" CreationDate="2012-12-20T22:01:40.420" Score="2" Body="&lt;p&gt;I started where you are but found lots of misconceptions and omissions so I started a small page on History making robots at &lt;a href=&quot;http://davidbuckley.net/DB/HistoryMakers.htm&quot; rel=&quot;nofollow&quot;&gt;http://davidbuckley.net/DB/HistoryMakers.htm&lt;/a&gt;&#xA;Reuben Hogget contributed a lot of information and after our trip round Europe talking to researchers who had built robots in the 1950s he started &lt;a href=&quot;http://cyberneticzoo.com&quot; rel=&quot;nofollow&quot;&gt;http://cyberneticzoo.com&lt;/a&gt; - not everything about the history of robotics is there yet. Humans have talked about robots (by other names) for a long time. &#xA;In the Greek myths Hephaestus creates 'walking' tripods and golden ladies to help him. The Greeks built large animated sculptures such as a 12 foot high statue of Nysa mounted on a huge cart. Heron of Alexandria (~50AD) created animated figures for theatre shows and also described mechanically programmable devices. There was nothing particularly new about Leonardo's drawings of a mechanical statue of a knight, it is just that his drawings have survived. The first 'modern' 'robot' was probably Dederick's 1868 steam man (Boilerplate is fictional). From early in the last century there have been many drawings of electromechanical men and several working ones (albeit of limited funtionality and really precursors of Disney's animatronic figures). Capek's RUR really only went along with people's fascination with robots (the robots he describes though are biological). A major advance came in the 1940s with Grey Walter's tortoises Elmer and Elsie which had simple electronic brains. The mobile robot Shakey (1966) was another 'milestone'. After that you have the walking robots from Waseda University, the subsumption (a dead end) robots from the MIT Mobile Robot Lab, and then Honda's P2 humanoid which led to a veritable explosion of humanoid robots from Japan followed by Korea and others. Whatever you read, all the writers will have their own slant on things and it is a huge field. Reuben has well over 500 posts on robotics history and PlastiPals.com is the site to read for more modern robots. &lt;/p&gt;&#xA;" OwnerUserId="653" LastActivityDate="2012-12-20T22:01:40.420" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="712" PostTypeId="1" AcceptedAnswerId="722" CreationDate="2012-12-20T22:33:51.033" Score="10" ViewCount="2196" Body="&lt;p&gt;I'm currently building a robot with four legs (&lt;a href=&quot;http://en.wikipedia.org/wiki/Quadrupedalism/&quot; rel=&quot;nofollow noreferrer&quot;&gt;quadruped&lt;/a&gt;), 3 DOF (Degrees of Freedom) and Its been suggested &lt;a href=&quot;https://robotics.stackexchange.com/questions/327/learning-algorithms-for-walking-quadruped/&quot;&gt;here&lt;/a&gt; that I use a simulator to do the learning on a computer and then upload the algorithms to the robot. I'm using an &lt;a href=&quot;http://arduino.cc&quot; rel=&quot;nofollow noreferrer&quot;&gt;Arduino Uno&lt;/a&gt; for the robot and what software could I use to simulate the learning and then be able to upload to the Arduino board?&lt;/p&gt;&#xA;" OwnerUserId="374" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2014-08-14T09:27:29.353" Title="Quadruped Learning Simulator" Tags="&lt;mobile-robot&gt;&lt;arduino&gt;&lt;microcontroller&gt;&lt;machine-learning&gt;&lt;simulator&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="713" PostTypeId="2" ParentId="709" CreationDate="2012-12-21T00:42:58.203" Score="34" Body="&lt;p&gt;They aren't.  The word servo refers solely to a device that uses negative feedback for control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Gearboxes or cheap brushed motors can be noisy.  You can get very quiet systems if you are willing to pay for it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cheap hobby grade servos can sometimes chatter if they do not settle in a stable state.  This is normal and is caused by poor tuning, a lack of a deadband, and backlash between the motor and the encoder (potentiometer).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Gearbox noise is caused by the spur gear teeth hitting eachother.  You can use heavier grease or quieter gear geometries such as helical gears which mesh smoothly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/kOyp1.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are also piezoelectric or memory wire based servos which are completely silent.&lt;/p&gt;&#xA;" OwnerUserId="65" LastEditorUserId="65" LastEditDate="2012-12-21T00:48:47.563" LastActivityDate="2012-12-21T00:48:47.563" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="714" PostTypeId="2" ParentId="712" CreationDate="2012-12-21T00:43:02.943" Score="2" Body="&lt;p&gt;This wouldn't cover the robot simulation, but the &lt;a href=&quot;http://docs.opencv.org/modules/ml/doc/ml.html&quot; rel=&quot;nofollow&quot;&gt;OpenCV Machine Learning Library&lt;/a&gt; might be useful for evaluating learning algorithms and training parameters to download to the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It includes a neural network implementation, which may be of particular interest for this problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;OpenCv is a standard library too, and would likely integrate well with some other simulator for the robot itself.&lt;/p&gt;&#xA;" OwnerUserId="479" LastEditorUserId="479" LastEditDate="2012-12-25T16:38:43.793" LastActivityDate="2012-12-25T16:38:43.793" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="715" PostTypeId="2" ParentId="533" CreationDate="2012-12-21T02:39:41.540" Score="-1" Body="&lt;p&gt;I think it is better to start with explaining about an automation. And then go for robotics and their milestones. &lt;/p&gt;&#xA;" OwnerUserId="655" LastActivityDate="2012-12-21T02:39:41.540" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="716" PostTypeId="1" AcceptedAnswerId="733" CreationDate="2012-12-21T10:31:13.480" Score="4" ViewCount="4839" Body="&lt;p&gt;Often when I need to perform model fitting I find myself looking for a decent C++ library to do this. There is the RANSAC implementation in &lt;a href=&quot;http://reference.mrpt.org/svn/classmrpt_1_1math_1_1_model_search.html&quot; rel=&quot;nofollow&quot;&gt;MRPT&lt;/a&gt;, but I was wondering if there are alternatives available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To give an example for the type of problems I would like to solve: For a set $A$ of (approx 500) 3D point pairs $(a, b)$ I would like to find the Isometry transform $T$, which maps the points onto each other so that $|(a - Tb)| &amp;lt; \epsilon$. I would like to get the largest subset of $A$ for a given $\epsilon$. Alternatively I guess I could have the subset size fixed and ask for the lowest $\epsilon$.&lt;/p&gt;&#xA;" OwnerUserId="127" LastActivityDate="2012-12-28T08:48:55.087" Title="C++ Robust Model Fitting Library" Tags="&lt;c++&gt;&lt;ransac&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="717" PostTypeId="2" ParentId="689" CreationDate="2012-12-21T14:00:35.390" Score="2" Body="&lt;p&gt;I've seen a number of systems in this configuration and most went for an outside track solution. Part of the reason for this is control of bend radius. With an outside track, the bend is obvious at all positions and it is clear when you &lt;em&gt;run out of track&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are bothered about cabling complexity, you could put more of the electronics on the rotated stage, so instead of having motor, encoder and other cables all running down the energy chain, you would just have power and data lines, with everything else done by remote i/o.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Taking this to the extreme, I've worked at a place where this technique was used with slip rings for a continuously revolving robot. It had two scara arms and all of the control electronics for them mounted on a revolving platform. The data slip rings were horribly noisy, so the data connection had to have more ECC than normal, but it all worked well.&lt;/p&gt;&#xA;" OwnerUserId="37" LastActivityDate="2012-12-21T14:00:35.390" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="718" PostTypeId="1" AcceptedAnswerId="4845" CreationDate="2012-12-21T14:47:11.653" Score="6" ViewCount="223" Body="&lt;p&gt;How do we know that an object is contained inside another object or is just lying on top of it? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lets take an example of a cup-plate-spoon. The cup is lying on top of the plate. But the spoon is inside the cup. How do we distinguish between the 2 situations? What are the criteria to decide whether A is contained inside B or just lying above B?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am trying to solve it using kinect.&lt;/p&gt;&#xA;" OwnerUserId="658" LastEditorUserId="350" LastEditDate="2012-12-21T14:58:15.877" LastActivityDate="2014-10-27T19:20:56.190" Title="How can computer vision distinguish one object being contained by another vs being on top of it?" Tags="&lt;kinect&gt;&lt;computer-vision&gt;&lt;algorithm&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="719" PostTypeId="5" CreationDate="2012-12-21T15:01:02.210" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2012-12-21T15:01:02.210" LastActivityDate="2012-12-21T15:01:02.210" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="720" PostTypeId="4" CreationDate="2012-12-21T15:01:02.210" Score="0" Body="&quot;RANdom SAmple Consensus&quot;. It is an iterative method to estimate parameters of a mathematical model from a set of observed data which contains outliers." OwnerUserId="350" LastEditorUserId="350" LastEditDate="2012-12-21T16:04:56.880" LastActivityDate="2012-12-21T16:04:56.880" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="721" PostTypeId="2" ParentId="718" CreationDate="2012-12-21T15:26:56.820" Score="7" Body="&lt;p&gt;Actually we don't. This is the source of myriad visual illusions. Through a life time of experience we learn context which tells us when one thing can be on another vs. in it. But even then a sculpture can be built to trick us. For example it can look like a plate, cup, and spoon organized in a certain way but in fact be non of the above. A good example of this are the &lt;a href=&quot;http://io9.com/5935888/mc-eschers-impossible-structures-printed-in-3d&quot;&gt;3D printed Escher pieces&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Kinect has the added ability to sense depth. With such information you may be able to make better determinations but we can still conceive of structures that would trick the system. I cannot speak to what CV methods exist to assist in your endeavor but I know that &lt;a href=&quot;http://en.wikipedia.org/wiki/Deep_learning&quot;&gt;Deep Learning&lt;/a&gt; from the ML world has been making inroads here.&lt;/p&gt;&#xA;" OwnerUserId="177" LastActivityDate="2012-12-21T15:26:56.820" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="722" PostTypeId="2" ParentId="712" CreationDate="2012-12-23T16:10:37.183" Score="3" Body="&lt;p&gt;&lt;a href=&quot;http://gazebosim.org/&quot; rel=&quot;nofollow&quot;&gt;Gazebo&lt;/a&gt; is a good tool for what you want to do. Since you're using a custom robot you will need to &lt;a href=&quot;http://gazebosim.org/user_guide/started__models.html&quot; rel=&quot;nofollow&quot;&gt;build a model&lt;/a&gt; for the simulator to use. They have managed to make doing so pretty easy but for a quadraped I can imagine it will take a bit of time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Gazebo is also nice because it works well with &lt;a href=&quot;http://ros.org&quot; rel=&quot;nofollow&quot;&gt;ROS&lt;/a&gt; which means that if you build you could build a program to control your robot and send the commands to the simulated robot via the integration or to the real robot via &lt;a href=&quot;http://www.ros.org/wiki/rosserial&quot; rel=&quot;nofollow&quot;&gt;rosserial&lt;/a&gt;. Just beware that if you have not used any of these tools then it will take some time to develop your solution.&lt;/p&gt;&#xA;" OwnerUserId="177" LastEditorUserId="40" LastEditDate="2014-08-14T09:27:29.353" LastActivityDate="2014-08-14T09:27:29.353" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="723" PostTypeId="2" ParentId="696" CreationDate="2012-12-23T20:51:15.807" Score="1" Body="&lt;p&gt;It appears that Nikolaus Correll at CU-Boulder is doing research with a derivative of the kilobots: &lt;a href=&quot;http://www.colorado.edu/news/releases/2012/12/14/cu-boulder-team-develops-swarm-pingpong-ball-sized-robots&quot; rel=&quot;nofollow&quot;&gt;http://www.colorado.edu/news/releases/2012/12/14/cu-boulder-team-develops-swarm-pingpong-ball-sized-robots&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2012-12-23T20:51:15.807" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="724" PostTypeId="2" ParentId="693" CreationDate="2012-12-23T21:13:46.587" Score="4" Body="&lt;p&gt;Yes, there is a difference between the Create and an off-the-shelf Roomba.  The Create doesn't have a vacuum motor or any of the cleaning brushes.  And there is an empty payload bay where all of the cleaning stuff used to be.  Additionally, the Create has an added microcontroller on it that you can push code onto.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But both the create and the Roomba let you control the robot directly over a serial interface.  I think this API is the same between the Create and the 500 series Roomba.  I am not sure about the 600 or 700 series Roombas, but i kind of doubt it changed.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2012-12-23T21:13:46.587" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="725" PostTypeId="1" AcceptedAnswerId="729" CreationDate="2012-12-24T00:50:05.517" Score="10" ViewCount="325" Body="&lt;p&gt;&lt;strong&gt;There is a lot of background here, scroll to the bottom for the question&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am trying out the map joining algorithm described in &lt;a href=&quot;http://services.eng.uts.edu.au/~sdhuang/Shoudong_IROS_2010.pdf&quot;&gt;How Far is SLAM From a Linear Least Squares Problem&lt;/a&gt;; specifically, formula (36).  The code I have written seems to always take the values of the second map for landmark positions.  My question is, am I understanding the text correctly or am I making some sort of error. I'll try to explain the formulas as I understand them and show how my code implements that.  I'm trying to do the simple case of joining just two local maps. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the paper (36) says joining two local maps is finding the a state vector $X_{join,rel}$ that minimizes:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\sum_{j=1}^{k}(\hat{X_j^L} - H_{j,rel}(X_{join,rel}))^T(P_j^L)^{-1}(\hat{X_j^L} - H_{j,rel}(X_{join,rel}))&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Expanded for two local maps $\hat{X_1^L}$ and $\hat{X_2^L}$ I have:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;(\hat{X_1^L} - H_{j,rel}(X_{join,rel}))^T(P_1^L)^{-1}(\hat{X_1^L} - H_{j,rel}(X_{join,rel})) + (\hat{X_2^L} - H_{j,rel}(X_{join,rel}))^T(P_2^L)^{-1}(\hat{X_2^L} - H_{j,rel}(X_{join,rel}))&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I understand it, a submap can be viewed as an integrated observation for a global map, so $P^L_j$ is noise associated with the submap (as opposed to being the process noise in the EKF I used to make the submap, which may or may not be different). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The vector $X_{join,rel}$ is the pose from the first map, the pose from the second map and the union of the landmarks in both maps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The function $H_{j,rel}$ is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{bmatrix} X_{r_{je}}^{r_{(j-1)e}}\\&#xA;                 \phi_{r_{je}}^{r_{(j-1)e}}\\&#xA;                 R(\phi_{r_{(j-1)e}}^{r_{m_{j1}e}})&#xA;                        (X^{r_{m_{j1}e}}_{f_{j1}} -&#xA;                         X^{r_{m_{j1}e}}_{r_{(j-1)e}})\\.\\.\\.\\&#xA;                 R(\phi_{r_{(j-1)e}}^{r_{m_{jl}e}})&#xA;                        (X^{r_{m_{jl}e}}_{f_{jl}} -&#xA;                         X^{r_{m_{jl}e}}_{r_{(j-1)e}})\\&#xA;                         X_{f_{j(l+1)}}^{r_{j-1e}}\\&#xA;                         .\\.\\.\\&#xA;                         X_{f_{jn}}^{r_{j-1e}}&#xA;\end{bmatrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;I'm not convinced that my assessment below is correct:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first two elements are the robot's pose in the reference frame of the previous map.  For example, for map 1, the pose will be in initial frame at $t_0$; for map 2, it will be in the frame of map 1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The next group of elements are those common to map 1 and map 2, which are transformed into map 1's reference frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The final rows are the features unique to map 2, in the frame of the first map.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;My matlab implementation is as follows:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;function [G, fval, output, exitflag] = join_maps(m1, m2)&#xA;    x = [m2(1:3);m2];&#xA;    [G,fval,exitflag,output] = fminunc(@(x) fitness(x, m1, m2), x, options);&#xA;end&#xA;&#xA;function G = fitness(X, m1, m2)&#xA;    m1_f = m1(6:3:end);&#xA;    m2_f = m2(6:3:end);&#xA;    common = intersect(m1_f, m2_f);&#xA;    P = eye(size(m1, 1)) * .002;&#xA;    r = X(1:2);&#xA;    a = X(3);&#xA;    X_join = (m1 - H(X, common));&#xA;    Y_join = (m2 - H(X, common));&#xA;    G = (X_join' * inv(P) * X_join) + (Y_join' * inv(P) * Y_join);&#xA;end&#xA;&#xA;function H_j = H(X, com)&#xA;    a0 = X(3);&#xA;    H_j = zeros(size(X(4:end)));&#xA;    H_j(1:3) = X(4:6);&#xA;    Y = X(1:2);&#xA;    len = length(X(7:end));&#xA;    for i = 7:3:len&#xA;        id = X(i + 2);&#xA;        if find(com == id)&#xA;            H_j(i:i+1) = R(a0) * (X(i:i+1) - Y);&#xA;            H_j(i+2) = id;&#xA;        else  % new lmk&#xA;            H_j(i:i+2) = X(i:i+2);&#xA;        end&#xA;    end&#xA;end&#xA;&#xA;function A = R(a)&#xA;    A = [cos(a) -sin(a); &#xA;         sin(a)  cos(a)];&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I am using the &lt;a href=&quot;http://www.mathworks.com/help/optim/ug/fminunc.html&quot;&gt;optimization toolbox&lt;/a&gt; to find the minimum of the fitness function described above.  The fitness function itself is pretty straightforward I think.  The function H returns the vector H described above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The result is:&lt;/strong&gt;&#xA;When I run join_maps on the two vectors&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;map_1 = [3.7054;1.0577;-1.9404; %robot x, y, angle&#xA;      2.5305;-1.0739;81.0000]; % landmark x, y, id&#xA;map_2 = [3.7054;1.0577;-1.9404;&#xA;         2.3402;-1.1463;81.0000]; % note the slightly different x,y&#xA;&#xA;[G,fv,output,exitflag] = join_maps(map_1, map_2)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The output is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Warning: Gradient must be provided for trust-region algorithm;&#xA;  using line-search algorithm instead. &#xA;&amp;gt; In fminunc at 341&#xA;  In join_maps at 7&#xA;&#xA;Local minimum found.&#xA;&#xA;Optimization completed because the size of the gradient is less than&#xA;the default value of the function tolerance.&#xA;&#xA;&amp;lt;stopping criteria details&amp;gt;&#xA;&#xA;&#xA;Local minimum possible.&#xA;&#xA;fminunc stopped because it cannot decrease the objective function&#xA;along the current search direction.&#xA;&#xA;&amp;lt;stopping criteria details&amp;gt;&#xA;&#xA;G = &#xA;      3.7054&#xA;      1.0577&#xA;     -1.9404&#xA;      3.7054&#xA;      1.0577&#xA;     -1.9404&#xA;      2.3402&#xA;     -1.1463&#xA;      81.0000&#xA;&#xA; fv =&#xA;     1.3136e+07&#xA;  output = &#xA;     iterations: 1&#xA;      funcCount: 520&#xA;       stepsize: 1.0491e-16&#xA;  firstorderopt: 1.6200e+05&#xA;      algorithm: 'medium-scale: Quasi-Newton line search'&#xA;        message: [1x362 char]&#xA;  exitflag =&#xA;   5&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The question:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My program gives map 2 is the minimum of the map joining function.  It seems like the minimum should be somewhere between map 1 and map 2.  I'm pretty sure the problem is with the matrix H.  What am I doing wrong?&lt;/p&gt;&#xA;" OwnerUserId="502" LastActivityDate="2012-12-26T19:10:05.097" Title="Least squares map joining" Tags="&lt;slam&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="726" PostTypeId="1" CreationDate="2012-12-24T20:24:04.710" Score="9" ViewCount="989" Body="&lt;p&gt;I am working on a quadrotor.  I know its position -- $a$, where I would like to go -- target position $b$, and from that I calculate a vector $c$ -- a unit vector that will take me to my target:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;c = b - a&#xA;c = normalize(c)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Since a quadrotor can move in any direction without rotation, what I have tried to do is &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;rotate $c$ by the robots yaw angle&lt;/li&gt;&#xA;&lt;li&gt;split it into its $x, y$ components &lt;/li&gt;&#xA;&lt;li&gt;pass them to the robot as roll and pitch angles.  &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The problem is that if the yaw is 0&amp;deg; &amp;plusmn;5 then this works, but if the yaw is near +90 or -90 it fails and steers to wrong directions. My question is am I missing something obvious here?&lt;/p&gt;&#xA;" OwnerUserId="665" LastEditorUserId="350" LastEditDate="2012-12-27T14:31:57.600" LastActivityDate="2018-12-31T12:01:42.523" Title="Guiding a Quadrotor Towards a Target" Tags="&lt;quadcopter&gt;&lt;uav&gt;&lt;navigation&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="727" PostTypeId="2" ParentId="726" CreationDate="2012-12-24T20:39:21.067" Score="6" Body="&lt;p&gt;Re-implementing your solution, I get this:&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Angle Between Vectors&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;First, you want the angle between points &lt;span class=&quot;math-container&quot;&gt;$A$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$B$&lt;/span&gt; -- not specifically the unit vector.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/m7CLt.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/m7CLtm.jpg&quot; alt=&quot;Angle between 2 points&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(&lt;a href=&quot;http://fxprogramming.blogspot.com/2011/01/angle-between-2-points-in-2d-space.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;via Fx Programming&lt;/a&gt;):&#xA;&lt;span class=&quot;math-container&quot;&gt;$\theta = math.atan2(B_{x}-A_{x}, B_{y}-A_{y})$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Vehicle Yaw Angle&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Next (and I suspect this is your problem), you need to &lt;em&gt;subtract&lt;/em&gt; the vehicle's yaw angle &lt;span class=&quot;math-container&quot;&gt;$\psi$&lt;/span&gt; from your calculated &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt;.  &lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Heading vs Yaw&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;If you're using a compass for the &quot;yaw angle&quot; of your vehicle, this could also be your mistake; &lt;strong&gt;heading and yaw are not the same&lt;/strong&gt;. &#xA;Compass heading is zero along the positive &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt; axis, increasing as it turns &lt;em&gt;clockwise&lt;/em&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/dyA23.gif&quot; alt=&quot;Compass rose&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yaw is zero along the positive &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; axis, increasing as it turns &lt;em&gt;counterclockwise&lt;/em&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/thumb/1/13/Polar_graph_paper.svg/300px-Polar_graph_paper.svg.png&quot; alt=&quot;Polar graph&quot;&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 90 degree overlap between these measurements, combined with adding (instead of subtracting) the vehicle yaw from the desired yaw, may be why things worked when your target was within &amp;plusmn;5&amp;deg; and behaved badly at &amp;plusmn;90&amp;deg;.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Conversion to Component X and Y&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;From there, you say that you are converting this result &lt;span class=&quot;math-container&quot;&gt;$(\theta-\psi)$&lt;/span&gt; into its &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt; components, passing them to the robot as the roll and pitch angles.  With the above corrections, you should get the desired result at this point.  However, directly mapping these components to tilt angles might be problematic since you are only considering the difference in position, and not the velocity (really, the momentum) of the vehicle.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;PID Control&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;You may be best served by using PID control loops for the roll and pitch of the vehicle.  That is, once you fix your code and are able to hit your target, my guess is that you'll start overshooting it instead -- oscillating back and forth.  A correctly-tuned PID will prevent that from happening while still allowing you to approach the target quickly.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead of plugging your &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt; into roll and pitch, consider them to be the &lt;em&gt;error&lt;/em&gt; values that the roll and pitch PIDs accept as input.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="15160" LastEditDate="2018-12-31T12:01:42.523" LastActivityDate="2018-12-31T12:01:42.523" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="728" PostTypeId="2" ParentId="726" CreationDate="2012-12-25T01:01:59.903" Score="5" Body="&lt;p&gt;I'll assume you're talking about a 3D vector here. Can you just generalize &lt;code&gt;normalize()&lt;/code&gt; like that? Is it that common (i've never seen it so if it is, then news to me). Otherwise, obvious compass wrap issues apply to each of the X and Y components. Why not call them roll and/or pitch and/or yaw? (mixing 3D and 2D nomenclature confuses the question).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My 2D normalize looks something like this;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;int Pilot_QuickestTurnTo(int hdgNow, int hdgNew)&#xA;{&#xA;    hdgNow = Pilot_Hdg360(hdgNow);&#xA;    hdgNew = Pilot_Hdg360(hdgNew);&#xA;    if (hdgNow &amp;lt; hdgNew)&#xA;        hdgNow += 360;&#xA;    int left = hdgNow - hdgNew;&#xA;        return (left &amp;lt; 181 ? -left : 360 - left);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If it is indeed a quad, I assume your X and Y components are really YAW, Altitude ( (X, Y) &amp;amp; Z). You'll need to handle the &lt;code&gt;YAW(X, Y)&lt;/code&gt; in 2D, and simply drop or gain altitude for Z (and again that's why I suspect normalize is more than you have it as).&lt;/p&gt;&#xA;" OwnerUserId="274" LastEditorUserId="350" LastEditDate="2012-12-27T14:18:24.683" LastActivityDate="2012-12-27T14:18:24.683" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="729" PostTypeId="2" ParentId="725" CreationDate="2012-12-26T19:10:05.097" Score="2" Body="&lt;p&gt;This seems to work correctly and is a much simpler solution:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;function [X, FVAL, EXITFLAG, OUTPUT, GRAD] = join_maps(m1, m2)&#xA;    p = [m1(1:3);m2(1:3)];&#xA;    x1 = [p;m1(4:end)];&#xA;    x2 = [p;m2(4:end)];&#xA;    guess_0 = zeros(size(x1,1),1);&#xA;    q = @(x)x'*eye(length(x))*x;&#xA;    fit = @(x)q(x1-x)+q(x2-x);&#xA;    [X,FVAL,EXITFLAG,OUTPUT,GRAD] = fminunc(fit ,guess_0);&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I've changed the output to better match the description for fminunc.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The output with map_1 and map_2 is&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;X =&#xA; 3.7054&#xA; 1.0577&#xA;-1.9404&#xA; 3.7054&#xA; 1.0577&#xA;-1.9404&#xA; 2.4353&#xA;-1.1101&#xA; 81.0000&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In this case, there is no need to call H(X), because the first two poses are identical, so the two maps share the same frame of reference.  The function H just transforms the state estimate into the frame of reference of the submap.&lt;/p&gt;&#xA;" OwnerUserId="502" LastActivityDate="2012-12-26T19:10:05.097" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="730" PostTypeId="1" CreationDate="2012-12-27T00:15:13.797" Score="2" ViewCount="80" Body="&lt;p&gt;Have you ever seen one those video games that has headset/goggles you stand in and look around the virtual scene with? I'm building one of those, and I'm trying to design a simple controller. I need the output of the controller to emulate a mouse input. So if you look to the left, it's as if you were moving the mouse to the left. Supposing I use optical encoders, the pan and tilt will need to be in separate locations (a couple of inches apart). It seems that many mouse hacks online have the components very close together.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do you think it's possible to have one of the encoders some distance away from the controller chip? For OEM purposes, is there a good mouse controller chip that will output USB protocol mouse movements that I could buy in bulk?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many thanks for any suggestions. Cheers&lt;/p&gt;&#xA;" OwnerUserId="671" LastActivityDate="2012-12-27T00:34:24.157" Title="Good method for building a pan and tilt controller?" Tags="&lt;microcontroller&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="731" PostTypeId="2" ParentId="730" CreationDate="2012-12-27T00:34:24.157" Score="2" Body="&lt;p&gt;Probably not the answer you want, but IMU boards have gotten so cheap and easy I'm not sure if going the mouse encoder route is worth the trouble.  I fly FPV quads, and I have the parts for pan and tilt, although not installed yet. The head tracking is built into the &lt;a href=&quot;http://www.youtube.com/watch?v=WveSggtwwNQ&quot; rel=&quot;nofollow&quot;&gt;goggles&lt;/a&gt; (ie no added costs). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also installed a MultiWii Flight control board this morning and was watching real time signals show roll/pitch/yaw(heading) with the option to add full gps. The &lt;a href=&quot;http://witespyquad.gostorego.com/flight-controllers/flip-mwc-flight-controller.html&quot; rel=&quot;nofollow&quot;&gt;board&lt;/a&gt; costs less than \$20. It would be pretty easy to install that on a hat, and add a &lt;a href=&quot;http://www.rctimer.com/index.php?gOo=goods_details.dwt&amp;amp;goodsid=764&amp;amp;productname&quot; rel=&quot;nofollow&quot;&gt;Bluetooth option&lt;/a&gt; (another \$8) for easy robust wireless pan and tilt tracking. You would need to do some sort of HUI device driver though, I do not know of anything already existing. Then again, if you are doing all your own software you could access the bluetooth stream directly and avoid needing a driver.&lt;/p&gt;&#xA;" OwnerUserId="274" LastActivityDate="2012-12-27T00:34:24.157" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="732" PostTypeId="2" ParentId="718" CreationDate="2012-12-27T23:26:01.143" Score="3" Body="&lt;p&gt;The problem is much easier, when you want solve this for specific object categories like cup-plate-spoon instead of any generic pair of objects. Also in my opinion there degeneracies as mentioned by DaemonMaker is not going to happen in this case since we have depth image instead of just a 2D image.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you know the objects in scene and you have a depth image, it is possible to estimate the full 3D orientation (pose) of each of those objects. If the objects in question are rigid, some sort of &lt;a href=&quot;http://pointclouds.org/documentation/tutorials/iterative_closest_point.php&quot; rel=&quot;nofollow&quot;&gt;ICP&lt;/a&gt; may be enough in getting this pose. For harder scenarios where the object is non-rigid (humans) or you don't know the exact specific model of the object (say tea cup vs coffee cup), you should refer to some computer-vision/Kinect literature. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you have the 3D poses of the objects, answering object-object 3D positional queries will be easier.&lt;/p&gt;&#xA;" OwnerUserId="674" LastEditorUserId="674" LastEditDate="2012-12-28T08:35:18.263" LastActivityDate="2012-12-28T08:35:18.263" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="733" PostTypeId="2" ParentId="716" CreationDate="2012-12-28T08:48:55.087" Score="5" Body="&lt;p&gt;&lt;a href=&quot;http://www.pointclouds.org/&quot; rel=&quot;noreferrer&quot;&gt;PCL&lt;/a&gt; has a nice C++ templated &lt;a href=&quot;http://docs.pointclouds.org/trunk/group__sample__consensus.html&quot; rel=&quot;noreferrer&quot;&gt;RANSAC library&lt;/a&gt; which can solve your problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you feel, PCL is too big of a dependency, then using &lt;a href=&quot;http://eigen.tuxfamily.org/dox/group__Geometry__Module.html#gab3f5a82a24490b936f8694cf8fef8e60&quot; rel=&quot;noreferrer&quot;&gt;umeyama&lt;/a&gt; function in &lt;a href=&quot;http://eigen.tuxfamily.org/index.php?title=Main_Page&quot; rel=&quot;noreferrer&quot;&gt;Eigen's&lt;/a&gt; geometry module is probably the easiest way towards a working solution for your problem.&lt;/p&gt;&#xA;" OwnerUserId="674" LastActivityDate="2012-12-28T08:48:55.087" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="734" PostTypeId="1" AcceptedAnswerId="735" CreationDate="2012-12-28T16:47:56.377" Score="6" ViewCount="586" Body="&lt;p&gt;When you've created a map with a SLAM implementation and you have some groundtruth data, what is the best way to determine the accuracy of that map?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My first thought is to use the Euclidean distance between the map and groundtruth. Is there some other measure that would be better?  I'm wondering if it's also possible to take into account the covariance of the map estimate in this comparison. &lt;/p&gt;&#xA;" OwnerUserId="502" LastActivityDate="2012-12-28T17:28:24.880" Title="Comparing maps to groundtruth" Tags="&lt;slam&gt;&lt;mapping&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="735" PostTypeId="2" ParentId="734" CreationDate="2012-12-28T17:28:24.880" Score="5" Body="&lt;p&gt;Assuming the map is a point cloud and that you know the alignment between the ground truth data and the map then calculating the &lt;a href=&quot;http://en.wikipedia.org/wiki/Mean_squared_error&quot;&gt;mean squared error&lt;/a&gt; (MSE) would give you a relative understanding of the accuracy. A lower MSE would indicate they are very similar, 0 of course mean identical, and a high MSE would idicate they are very different.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you do not know the alignment between the ground truth and the map then you could use &lt;a href=&quot;http://en.wikipedia.org/wiki/Expectation%E2%80%93maximization_algorithm&quot;&gt;expectation maximization&lt;/a&gt; over the alignments to find the best fit and then use MSE.&lt;/p&gt;&#xA;" OwnerUserId="177" LastActivityDate="2012-12-28T17:28:24.880" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="736" PostTypeId="1" AcceptedAnswerId="737" CreationDate="2012-12-29T17:06:37.283" Score="13" ViewCount="3344" Body="&lt;p&gt;I'm building a hobby 6-DOF robotic arm and am wondering what the best way is to communicate between the processors (3-4 AVRs, 18 inches max separation). I'd like to have the control loop run on the computer, which sends commands to the microprocessors via an Atmega32u4 USB-to-??? bridge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some ideas I'm considering:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;RS485&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Pros: all processors on same wire, differential signal more robust&lt;/li&gt;&#xA;&lt;li&gt;Cons: requires additional chips, need to write (or find?) protocol to prevent processors from transmitting at the same time&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;UART loop (ie, TX of one processor is connected to RX of next)&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Pros: simple firmware, processors have UART built in&lt;/li&gt;&#xA;&lt;li&gt;Cons: last connection has to travel length of robot, each processor has to spend cycles retransmitting messages&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;CANbus (I know very little about this)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;My main considerations are hardware and firmware complexity, performance, and price (I can't buy an expensive out-of-box system).&lt;/p&gt;&#xA;" OwnerUserId="681" LastEditorUserId="10596" LastEditDate="2016-09-28T10:55:11.453" LastActivityDate="2016-09-28T10:55:11.453" Title="Inter-processor communication for robotic arm" Tags="&lt;microcontroller&gt;&lt;electronics&gt;&lt;communication&gt;&lt;robotic-arm&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="737" PostTypeId="2" ParentId="736" CreationDate="2012-12-29T23:48:03.293" Score="13" Body="&lt;p&gt;You want to use USB for communications with the computer. If you have a number of microcontrollers, you will probably only connect one of the microcontrollers directly to the computer. The other microcontrollers will need to get their commands from the main microcontroller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The communication you choose will depend on a number of factors:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;required bandwidth (we will assume you are running them at 16MHz)&lt;/li&gt;&#xA;&lt;li&gt;complexity (wiring and coding)&lt;/li&gt;&#xA;&lt;li&gt;bi-directional, or master-slave&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Almost all options have built-in support on the AVR microcontroller. There is no option you might reasonably prefer over the built-in options which would require additional hardware. Because they have built-in support, the software complexity is all similar, in that you just configure the port (using registers), put the data to transmit in another register, then trigger the transmission by setting a bit in another register. Any data received is found in another register, and an interrupt is triggered so you can handle it. Whichever option you choose, the only difference is the change in register locations, and some changes to the configuration registers.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;A USART loop has the following features:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Maximum baud rate of CLK/16 = 1MHz (at 16MHz clock) which is a transfer rate of around 90KB/s&lt;/li&gt;&#xA;&lt;li&gt;fully bi-directional communications (no master or slave designation)&lt;/li&gt;&#xA;&lt;li&gt;requires separate wires between each pair of microcontrollers - the Atmega32u4 supports two USART ports natively, limiting the number of microcontrollers you can connect in a network in practice (or else you end up with a long string of microcontrollers - ie. connected in a linked list manner)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Note: this is also what you would use to get RS232 communication, except that because RS232 requires 10V, it requires a driver to get those voltage levels. For communication between microcontrollers, this is not useful (only voltage levels are changed).&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;RS485:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Essentially, you use the USART port in a different mode - there is no advantage in bandwidth, and it may only simplify the wiring slightly, but it also complicates it. This is not recommended.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Two-wire interface:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;This is also referred to as I2C. This means that all devices share the same two wires.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You need a pull-up resistor on both wires&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;It is slow (because the pull-up resistors are limited in value, and there is increasing capacitance as the number of devices increases, and the wire length increases). For this AVR microcontroller, the speed is up to 400 kHz - slower than USART (but this speed depends on limiting your capacitance). The reason is that although a device drives the data wire low, the opposite transition is accomplished by letting the wire float high again (the pull-up resistor).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;It is even slower when you consider that ALL communication shares the same limited bandwidth. Because all communication shares the same limited bandwidth, there may be delays in communication where data must wait until the network is idle before it can be sent. If other data is constantly being sent, it may also block the data from ever being sent.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;It does rely on a master-slave protocol, where a master addresses a slave, then sends a command/request, and the slave replies afterwards. Only one device can communicate at a time, so the slave must wait for the master to finish.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Any device can act as both a master and/or a slave, making it quite flexible.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;SPI&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;This is what I would recommend/use for general communication between microcontrollers.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;It is high speed - up to CLK/2 = 8MHz (for CLK at 16MHz), making it the fastest method. This is achievable because of its separate wire solely for the clock.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The MOSI, MISO data, and SCK clock wires are shared across the whole network, which means it has simpler wiring.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;It is a master-slave format, but any device can be a master and/or slave. However, because of the slave select complications, for shared wiring (within the network), you should only use it in a hierarchical manner (unlike the two-wire interface). IE. if you organise all devices into a tree, a device should only be master to its children, and only a slave to its parent. That means that in slave mode, a device will always have the same master. Also, to do this correctly, you need to add resistors to MISO/MOSI/SCK to the upstream master, so that if the device is communicating downstream (when not selected as a slave), the communications will not affect communications in other parts of the network (note the number of levels you can do this using resistors is limited, see below for better solution using both SPI ports).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The AVR microcontroller can automatically tri-state the MOSI signal when it is slave-selected, and switch to slave mode (if in master).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Even though it might require a hierarchical network, most networks can be organised in a tree-like manner, so it is usually not an important limitation&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The above can be relaxed slightly, because each AVR microcontroller supports two separate SPI ports, so each device can have different positions in two different networks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Having said this, if you need many levels in your tree/hierarchy (more than 2), the above solution using resistors gets too fiddly to work. In this case, you should change the SPI network between each layer of the tree. This means each device will connect to its children on one SPI network, and its parent on the other SPI network. Although it means you only have a single tree of connections, the advantage is that a device can communicate with both one of its children and its parent at the same time and you don't have fiddly resistors (always hard to choose the right values).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Because it has separate MOSI and MISO wires, both the master and slave can communicate at the same time, giving it a potential factor of two increase in speed. A extra pin is required for the slave-select for each additional slave, but this is not a big burden, even 10 different slaves requires only 10 extra pins, which can be easily accommodated on a typical AVR microcontroller.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;CAN&lt;/strong&gt; is not supported by the AVR microcontroller you have specified. As there are other good options, it is probably not important in this case anyways.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The recommendation is &lt;strong&gt;SPI&lt;/strong&gt;, because it is fast, the wiring isn't too complex, and doesn't require fiddly pull-up resistors. In the rare case where SPI doesn't fully meet your needs (probably in more complicated networks), you can use multiple options (eg. use both SPI ports, along with the two-wire interface, as well as pairing some of the microcontrollers using a USART loop!)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your case, using SPI means that naturally, the microcontroller with the USB connection to the computer can be the master, and it can just forward the relevant commands from the computer to each slave device. It can also read the updates/measurements from each slave and send these to the computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At 8MHz, and 0.5m wire length, I don't think it will become a problem. But if it is, try be more careful of capacitance (keep ground and signal wires getting too close, and also be careful of connections between different conductors), and also signal termination. In the unlikely event that it remains a problem, you can reduce the clock rate, but I don't think it is necessary.&lt;/p&gt;&#xA;" OwnerUserId="145" LastEditorUserId="145" LastEditDate="2013-01-02T22:10:02.137" LastActivityDate="2013-01-02T22:10:02.137" CommentCount="12" ContentLicense="CC BY-SA 3.0" />
  <row Id="738" PostTypeId="1" AcceptedAnswerId="740" CreationDate="2012-12-31T01:09:06.787" Score="12" ViewCount="504" Body="&lt;p&gt;I've got a tread-driven robot, with low precision wheel encoders for tracking distance and an electronic compass for determining heading.  The compass has significant (&gt; 1 second) lag when the robot turns quickly, e.g. after reaching a waypoint &amp;mdash; pivoting in place to point to its new heading.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What are ways for dealing with the lag?  I would think one could take a lot of measurements and model the compass response.  However, this seems problematic since it's rate-dependent and I don't know the instantaneous rate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a simple-but-slow approach, I have the robot turn until it's very roughly pointed in the right direction, then make very small incremental turns with brief measurement pauses until it's pointed the right way.  Are there other ways of dealing with this? &lt;/p&gt;&#xA;" OwnerUserId="58" LastEditorUserId="350" LastEditDate="2012-12-31T14:24:06.783" LastActivityDate="2013-01-01T02:51:36.627" Title="What are methods for dealing with compass lag (rate dependent hysteresis)?" Tags="&lt;sensors&gt;&lt;compass&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="739" PostTypeId="2" ParentId="738" CreationDate="2012-12-31T01:41:31.007" Score="4" Body="&lt;p&gt;A gyro is the simple answer. I've always heard, gyro for the short measurements, compass for the long. And realistically a cup of kallman filter between the two most of the time. The price of a 6DOF gyro/acc board is less than $20 these days, far too cheap to not use one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At one time, I worked through &lt;a href=&quot;http://nxttime.wordpress.com/2010/10/06/robotc-code-for-the-kalman-filter/&quot; rel=&quot;nofollow&quot;&gt;someone else's Kallman filter&lt;/a&gt;. and got it working. A kallman filter is actually more of an approach, not a exact implementation, and in the gyro case, the end result does not need to use matrix math. It makes for much simpler code.&lt;/p&gt;&#xA;" OwnerUserId="274" LastEditorUserId="274" LastEditDate="2013-01-01T02:51:36.627" LastActivityDate="2013-01-01T02:51:36.627" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="740" PostTypeId="2" ParentId="738" CreationDate="2012-12-31T02:56:45.393" Score="12" Body="&lt;p&gt;The lag in the compass is because of a low-pass filter, to suppress high frequency noise. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;There exist more expensive magnetometers which have less noise, and therefore, less lag.&lt;/li&gt;&#xA;&lt;li&gt;It is also possible to use a gyroscope to improve accuracy. In fact, this is what Inertial Measurement Units (IMUs) do. This can be accomplished by using a Kalman filter. Improving accuracy helps to decrease lag, because increased accuracy reduces the dependency on a low pass filter to suppress noise. The Kalman filter fuses the data from the magnetometer, and also the gyroscope (which measures rate of change in heading).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;If you stick with your current compass, there are two possible solutions (Warning, this does get increasingly advanced, but option 1 should be accessible to most people without too much work).&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;You can try to cancel out the filter. This can remove lag, but also increases high frequency noise. After doing this, you can try to control the robot based on the new estimate of heading. To do this, you must experiment to work out the low pass filter parameters. For example, in discrete time, you might find:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\hat\theta(t)=a_0\theta(t)+a_1\theta(t-1)+\cdots+a_k\theta(t-k)$$&#xA;where $\hat\theta(t)$ is the estimated heading (compass output) at time $t$, $\theta$ is the actual heading (ground truth) at time $t$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can find the parameters $a_i$ by doing an experiment where you measure the ground truth using some other external means. Given $n+k+1$ samples, you have this equation:&#xA;$$\left[\matrix{\hat\theta(k)\\\vdots\\\hat\theta(k+n)}\right]=\left[\matrix{\theta(k)&amp;amp;\theta(k-1)&amp;amp;\cdots&amp;amp;\theta(0)\\\vdots&amp;amp;\vdots&amp;amp;&amp;amp;\vdots\\\theta(k+n)&amp;amp;\theta(k+n-1)&amp;amp;\cdots&amp;amp;\theta(n)}\right]\left[\matrix{a_0\\a_1\\\vdots\\a_k}\right]$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And you can solve by finding:&#xA;$$\left[\matrix{a_0\\a_1\\\vdots\\a_k}\right]=\left[\matrix{\theta(k)&amp;amp;\theta(k-1)&amp;amp;\cdots&amp;amp;\theta(0)\\\vdots&amp;amp;\vdots&amp;amp;&amp;amp;\vdots\\\theta(k+n)&amp;amp;\theta(k+n-1)&amp;amp;\cdots&amp;amp;\theta(n)}\right]^{+}\left[\matrix{\hat\theta(k)\\\vdots\\\hat\theta(k+n)}\right]$$ where $M^+$ is the pseudo-inverse matrix of $M$. There is no definitive way to work out $k$, so you will probably just guess. For bonus points, this assumes that the noise is white and independent, but you can whiten it first to remove bias, and therefore improve your estimate of the parameters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can convert this to a transfer function (also known as Z-transform in the discrete time domain):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\frac{\hat\Theta(z)}{\Theta(z)}=a_0+a_1 z^{-1}+...+a_k z^{-k}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To cancel this out, we can take the inverse (where $\bar\theta(t)$ is our new estimate of heading):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\frac{\bar\Theta(z)}{\hat\Theta(z)}=\frac{1}{a_0+a_1 z^{-1}+\cdots+a_k z^{-k}}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Converting back to the time domain:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$a_0\bar\theta(t)+a_1\bar\theta(t-1)+\cdots+a_k \bar\theta(t-k)=\hat\theta(t)$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\bar\theta(t)=\frac{\hat\theta(t)-a_1\bar\theta(t-1)-\cdots-a_k \bar\theta(t-k)}{a_0}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;we can then use $\bar\theta$ to control the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This will be very noisy, so you might want to still put $\bar\theta$ through a low-pass filter before use (although perhaps one with less lag).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The above solution is still not the best way. The noisy estimate may not be very useful. If we put this into a state space equation, we can design a Kalman filter, and a full-state feedback controller using LQR (linear quadratic regulator). The combination of a Kalman filter and LQR controller is also known as an LQG controller (linear quadratic gaussian), and use loop-transfer recovery to get a good controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To do this, come up with the (discrete-time) state-space equations:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\vec{x}(t)=A\vec{x}(t-1)+B\vec{u}(t-1)$, $\vec{y}(t)=C\vec{x}(t)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;or:&#xA;$$\vec{x}(t)=\left[\matrix{\theta(t)\\\theta(t-1)\\\cdots\\\theta(t-k)}\right]=&#xA;\left[\matrix{&#xA;    A_1&amp;amp;A_2&amp;amp;\cdots&amp;amp;0&amp;amp;0&amp;amp;0\\&#xA;    1&amp;amp;0&amp;amp;\cdots&amp;amp;0&amp;amp;0&amp;amp;0\\&#xA;    0&amp;amp;1&amp;amp;\cdots&amp;amp;0&amp;amp;0&amp;amp;0\\&#xA;    \vdots&amp;amp;\vdots&amp;amp;&amp;amp;\vdots&amp;amp;\vdots&amp;amp;\vdots\\&#xA;    0&amp;amp;0&amp;amp;\cdots&amp;amp;1&amp;amp;0&amp;amp;0\\&#xA;    0&amp;amp;0&amp;amp;\cdots&amp;amp;0&amp;amp;1&amp;amp;0&#xA;}\right]&#xA;\vec{x}(t-1)&#xA;+&#xA;\left[\matrix{B_0\\B_1\\0\\\vdots\\0\\0}\right]\vec{u}(t-1)$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\vec{y}(t)=\left[\matrix{\hat\theta(t)}\right]=\left[\matrix{a_0\\a_1\\\vdots\\a_k}\right]\vec{x}(t)$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $\vec{u}(t-1)$ represents the power in the motors to turn the robot, and $A_0$, $A_1$, $B_0$, $B_1$ is how much it affects the heading based on position and speed (you can choose non-zero values for the other elements of the $B$ matrix, and first row of the $A$ matrix too).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, you can build your observer (Kalman Filter), by choosing noise estimates $Q_o$ and $R_o$ for the process noise and measurement noise. The Kalman Filter can then find the optimal estimate of heading, given those assumptions about the noise. After choosing the noise estimates, the implementation just depends on implementing code for the Kalman Filter (equations can be found on Wikipedia, so I won't go over it here).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After that, you can design an LQR controller, this time, choosing $Q_c$ and $R_c$ representing the weighting given to regulating the heading, and trying to limit the use of the actuators. In this case, you might choose $Q_c = \left[\matrix{1&amp;amp;0&amp;amp;0&amp;amp;\cdots&amp;amp;0\\0&amp;amp;0&amp;amp;0&amp;amp;\cdots&amp;amp;0\\\vdots&amp;amp;\vdots&amp;amp;\vdots&amp;amp;&amp;amp;\vdots\\0&amp;amp;0&amp;amp;0&amp;amp;\cdots&amp;amp;0}\right]$ and $R_c = \left[1\right]$. This is done because LQR finds the optimal controller to minimise a cost function: $J = \sum{(\vec{x}^T Q\vec{x} + \vec{u}^T R \vec{u})}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, you just put it through the discrete time algebraic Riccati equation:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$P = Q + A^T \left( P - P B \left( R + B^T P B \right)^{-1} B^T P \right) A$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and solve for a positive definite matrix $P$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus, your control law can be given by:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\vec{u}(t)=-K(\vec{x}(t)-\vec{x}_{ref}(t))$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $K = (R + B^T P B)^{-1}(B^T P A)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, just doing this won't work very well, and is likely to be unstable because of the noise. Indeed, that means option 1 probably won't work unless you first put $\bar\theta$ through a low-pass filter (albeit not necessarily with such a long effective lag time). This is because while LQR is guaranteed stable, as soon as you use a Kalman filter, the guarantee is lost.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To fix this, we use the Loop Transfer Recovery technique, where you adjust the Kalman filter, and instead choose a new $Q_o = Q_0 + q^2BVB^T$, where $Q_0$ is your original $Q$ matrix, tuned so that the Kalman filter is optimal. $V$ is any positive definite symmetric matrix, which you can just choose as the identity matrix ($V=I$). Then, just choose a scalar $q$. The resulting controller should become (more) stable as $q \rightarrow \infty$, although the $Q_o$ matrix becomes de-tuned, which means it becomes less optimal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore, you just increase $q$ until it is stable. Another way you can try to make it stable, is to increase $R_c$ (or decrease $Q_c$) to make the LQR controller slower.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The concepts in this post does get quite advanced, but if you need to solve things like the Riccati equation, you can use MATLAB or other software to do this. There may also be libraries already implementing the Kalman filter (again, I believe MATLAB also does this).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For an embedded application, you may need to implement the Kalman filter yourself, although there is probably a C implementation.&lt;/p&gt;&#xA;" OwnerUserId="145" LastActivityDate="2012-12-31T02:56:45.393" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="741" PostTypeId="1" AcceptedAnswerId="742" CreationDate="2013-01-01T22:39:17.693" Score="6" ViewCount="472" Body="&lt;p&gt;I've seen &lt;a href=&quot;https://robotics.stackexchange.com/questions/18/what-are-good-methods-for-tuning-the-process-noise-on-kalman-filters&quot;&gt;this question&lt;/a&gt;, which asks about determining the process noise for an EKF.  I don't see anything there about pre-recorded data sets.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My thought on how to determine the noise parameters, assuming ground truth is available, would be to run the data several times with the EKF and minimize the mean square error, while varying the noise parameters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this an acceptable way to determine noise for a pre recorded data set?  Are there better (or just other) ways from determining the optimal noise values based just on the data set?&lt;/p&gt;&#xA;" OwnerUserId="502" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2013-01-02T13:46:27.733" Title="How do you determine EKF process noise for pre-recorded data sets?" Tags="&lt;noise&gt;&lt;ekf&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="742" PostTypeId="2" ParentId="741" CreationDate="2013-01-01T23:25:53.343" Score="5" Body="&lt;p&gt;Yes, such a method can give you a reasonable estimates of noise. Note that it is susceptible to systematic error. For instance if you are flying a quadrotor in the presence of a fan. This would show up in your findings which is generally undesirable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With that said you could improve your estimates by using the &lt;a href=&quot;http://en.wikipedia.org/wiki/Forward%E2%80%93backward_algorithm&quot;&gt;forward-backward algorithm&lt;/a&gt;. This algorithm is named from the fact that it consists of a forward pass and a backward pass. The forward pass is basically just an application of a Kalman-Filter, which as you may already realize, only includes data available up until the time step for which the state is being estimated. The backward pass then improves these estimates by including data available after the time in question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have only used the forward-backward algorithm with a KF (i.e. not an EKF). As such I don't know the precise implementation details when using an EKF. However there does appear to be some &lt;a href=&quot;http://ieeexplore.ieee.org/xpl/login.jsp?tp=&amp;amp;arnumber=4518436&amp;amp;url=http%3A%2F%2Fieeexplore.ieee.org%2Fxpls%2Fabs_all.jsp%3Farnumber%3D4518436&quot;&gt;literature&lt;/a&gt; on the topic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: As I think about this further it occurs to me that you can use &lt;a href=&quot;http://en.wikipedia.org/wiki/Expectation%E2%80%93maximization_algorithm&quot;&gt;expectation maximization&lt;/a&gt; (EM) and &lt;a href=&quot;http://en.wikipedia.org/wiki/Coordinate_descent&quot;&gt;coordinate descent&lt;/a&gt; (CD) to automatically determine the noise parameters. The process would treat the covariance matrices for the process model (call it P) and observation models (call it O) as EM parameters and proceeds as follows:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Start with your best guess for one of the matrices. Say P for the&#xA;sake of an example. Then use EM to identify O.&lt;/li&gt;&#xA;&lt;li&gt;Use the O found in step 1 with EM to improve the estimate of P.&lt;/li&gt;&#xA;&lt;li&gt;Repeat steps 1 and 2 until the log-likelihood of using O and P reaches some stopping criterion (e.g. stops varying, varies very little, or is minimized).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="177" LastEditorUserId="177" LastEditDate="2013-01-02T03:56:29.860" LastActivityDate="2013-01-02T03:56:29.860" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="743" PostTypeId="2" ParentId="736" CreationDate="2013-01-02T13:11:10.530" Score="5" Body="&lt;p&gt;I can highly recommend CAN for inter processor communications. We use it in our robots, with up to 22 processors on the same bus. With good protocol design, you can use up about 90% of the available bandwidth (about 640kbps when you take into account all of the error checking and inter frame spacing). We're able to servo 10 motors at 1000Hz on one CAN bus. This is approaching the limit. You could probably squeeze it to 20 motors if you pack the data very carefully.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Generally CAN needs to have one transceiver chip for each processor (it's just a little 8-pin device). The transceiver gives you the nice differential signal which emits very little interference, and also makes it immune to interference if you're working in an electrically noisy environment (motors, solenoids, and radio transmitters).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/4Tk7n.jpg&quot; alt=&quot;CAN Bus connections&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, in limited circumstances, it's actually possible to use &lt;a href=&quot;https://electronics.stackexchange.com/questions/30564/is-a-can-enabled-microcontroller-sufficient-to-drive-a-can-bus/30596#30596&quot;&gt;CAN with no transceivers&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/rzs1z.gif&quot; alt=&quot;EtherCAT&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you ever feel like implementing a bus with serious bandwidth, I suggest you try &lt;a href=&quot;http://en.wikipedia.org/wiki/EtherCAT&quot; rel=&quot;nofollow noreferrer&quot;&gt;EtherCAT&lt;/a&gt;. It's a 100Mb bus, which can be connected to your PC's Ethernet port. There are two important parts to the bus:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The Bridge. This converts the Ethernet physical layer to a simpler, lower cost LVDS physical layer, which doesn't require the large connectors, Phy chip, and many components that Ethernet itself does.&lt;/li&gt;&#xA;&lt;li&gt;The nodes. Each node just needs one ET1200 chip and a microcontroller.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The PC can transmit and receive large chunks of data to and from the nodes at 1kHz or faster. You can control &lt;a href=&quot;http://www.youtube.com/watch?v=UwP4DCwXoSM&quot; rel=&quot;nofollow noreferrer&quot;&gt;quite a lot of stuff&lt;/a&gt; on a single EtherCAT bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Added:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Shadow Robot Company now sell a useful EtherCAT Bus system called &lt;a href=&quot;http://www.shadowrobot.com/products/ronex/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ronex&lt;/a&gt;. It lets you add quite a lot of I/O, and they're going to be introducing lots of other types of board soon, like motor controllers, and high quality ADCs.&lt;/p&gt;&#xA;" OwnerUserId="40" LastEditorUserId="-1" LastEditDate="2017-04-13T12:33:08.317" LastActivityDate="2014-06-05T10:53:31.663" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="746" PostTypeId="2" ParentId="533" CreationDate="2013-01-03T12:55:00.257" Score="0" Body="&lt;p&gt;When you start talking about the first robots, you quickly run into the question: &quot;What is a robot?&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before we can say whether or not some machine is the first robot, we need to define what exactly we mean by the word 'robot'. The problem is, that there's really no single definition, and it depends who you ask. For example, I had a &lt;a href=&quot;http://en.wikipedia.org/wiki/Talk%3aRobot/Archive_4#Timeline&quot; rel=&quot;nofollow&quot;&gt;massive argument&lt;/a&gt; with someone on the Wikipedia robots talk page about the definition of robot. And you can forget about looking up the word in a dictionary, all of the dictionary definitions I have seen are hopelessly naive. The best definition I have seen is on the Wikipedia page:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;A robot is a mechanical or virtual artificial agent.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The most important word here is 'agent'. A machine which seems to have a sense of agency is more likely to be called a robot. I can imagine that if Leonardo had built his 'robot' then people would really have thought it has real agency of its own, and been practically alive, and would therefore have qualified to be included in that definition of robot. Today, however, roboticists have stricter definitions, and require robots to be more than just clockwork, and have some degree of autonomy and interaction with the environment.&lt;/p&gt;&#xA;" OwnerUserId="40" LastEditorUserId="40" LastEditDate="2013-01-03T17:00:30.720" LastActivityDate="2013-01-03T17:00:30.720" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="748" PostTypeId="1" AcceptedAnswerId="752" CreationDate="2013-01-05T02:37:24.810" Score="3" ViewCount="1517" Body="&lt;p&gt;I'm trying to power 7-12 &lt;a href=&quot;http://en.wikipedia.org/wiki/Servo_%28radio_control%29&quot; rel=&quot;nofollow&quot;&gt;servos&lt;/a&gt;, and I was under the impression that each one would need about an amp, but in looking around for an appropriate &lt;a href=&quot;http://en.wikipedia.org/wiki/Battery_eliminator_circuit&quot; rel=&quot;nofollow&quot;&gt;BEC&lt;/a&gt; to supply them, I notice that most seem to output around 1-3.5 amps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They won't all be running at once, but often, say 4 will be drawing enough juice to move.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously, I'm missing some link in my understanding.  How do I determine how many amps will be needed from the power supply?&lt;/p&gt;&#xA;" OwnerUserId="12" LastEditorUserId="37" LastEditDate="2013-05-20T16:24:50.807" LastActivityDate="2013-05-20T16:24:50.807" Title="How many amps do I want my Switching BEC to provide?" Tags="&lt;design&gt;&lt;power&gt;&lt;rcservo&gt;&lt;bec&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="749" PostTypeId="2" ParentId="748" CreationDate="2013-01-05T07:21:15.513" Score="2" Body="&lt;p&gt;There's two possible current requirements to consider here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ideally, you need to be able to supply enough current to account for the rated stall current (that is, the current drawn by the servo at its maximum rated torque) of all of your servos simultaneously. Imagine a bunch of your mechanical components getting jammed on each other in some gruesome fashion and busting your servos. You don't want to add insult to injury and fry your BEC in the process as well. If you don't have that number from the datasheet for the servo, you can test it by stalling a servo manually. This number can be quite a bit larger than your normal operating current, often to the point of being impractically large to design for. In the (unlikely) event that you can somehow prove that given servos in your application will never be placed in a stall condition, you can skimp on that a bit. Keep in mind that a servo doesn't have to be actively moving on its own to be stalled; a force trying to move it from its set position can do it as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second, softer requirement is your real-world operating current, which is a lot more application-specific. The amount of current drawn by a motor is dependent on the amount of torque it is exerting to move the load. Measure the current drawn by each servo while moving its real-world load. Add those up for any given group of servos that might be moving at the same time. The largest of those is your maximum normal operating current. Multiply that by 1.5-2 for a safety margin.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See also: &lt;a href=&quot;https://robotics.stackexchange.com/questions/416/what-is-the-best-way-to-power-a-large-number-27-servos-at-5-v&quot;&gt;What is the best way to power a large number (27) servos at 5 V?&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="308" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2013-01-05T08:45:26.670" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="750" PostTypeId="2" ParentId="748" CreationDate="2013-01-05T07:42:49.090" Score="0" Body="&lt;p&gt;I'm not sure why you are trying to make it hard than it is. If you have 4 servos that are in use at one time, that draw an amp each, you need 4 amps, period. BECs are convenience components, that are used because R/C servos used to burn out if provided with more than 5 volts. 6 Nicad batteries, which was the most common configuration before LiPo technology came around,  worked out to 9.6 volts (6 X 1.2v). BECs are &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__112__182__ESC_UBEC_VR-VR_UBEC.html&quot; rel=&quot;nofollow&quot;&gt;available&lt;/a&gt; in many sizes, and greater than 3.5 amps is common. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the requirement is greater than what is available, you simply provide your own voltage/amperage to the servos - often straight from a 6v battery, again the BEC is/was just a convenience component. If you do this with excessive current (more than the controller can pass through) you need to remove the red wire from the plug that goes into the controller, and supply voltage via that red wire. the black wire, needs to be both a ground connection for the signal, so it can not be removed from the controller, but it also needs to be the negative connection for power. The need to do this is pretty uncommon. The controller power connections are just straight pass through.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are using a plain R/C receiver the rule of thumb is the circuit board can handle about 6 amps max. A good digital servo will draw 2 amps at full power, but in most cases, what I have seen used in robotics are not good servos, so your guess of about an amp is reasonable.&lt;/p&gt;&#xA;" OwnerUserId="274" LastEditorUserId="274" LastEditDate="2013-01-05T07:50:39.570" LastActivityDate="2013-01-05T07:50:39.570" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="751" PostTypeId="1" AcceptedAnswerId="753" CreationDate="2013-01-05T09:00:41.440" Score="6" ViewCount="2212" Body="&lt;p&gt;I'm trying to program advanced functions in &lt;a href=&quot;http://www.robotc.net/wiki/VEX2_Functions_Motors_and_Servos#motorType&quot; rel=&quot;nofollow&quot;&gt;RobotC&lt;/a&gt; but I'm not too sure I'm doing it right. I want to specify the motor port I'm using, but I assigned names to all the motors. Funny thing though, they don't exactly work the same as regular variables.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For instance, motor[port7]'s alternate name is light_blue.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#pragma config(Motor,  port7,           light_blue,    tmotorVex393, openLoop)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I'm not really sure if these are new variables, or just specifications.  Anyway, here is the variable's signature:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;int motor[tMotor motor]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;My code plans on doing something similar to this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void testThing (Motor motorName)&#xA;{&#xA;  motorName = someValue;&#xA;}&#xA;&#xA;testThing(light_blue);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But with the int/motor hybrid variable/unidentified I'm not sure how well that would work out. Or at all.&lt;/p&gt;&#xA;" OwnerUserId="685" LastEditorUserId="350" LastEditDate="2013-01-05T14:23:47.710" LastActivityDate="2013-01-06T18:14:52.810" Title="Confused about the variables in RobotC?" Tags="&lt;robotc&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="752" PostTypeId="2" ParentId="748" CreationDate="2013-01-05T12:18:56.893" Score="2" Body="&lt;p&gt;Forgive me I seem to get caught up in people looking for answers to a question they didn't ask a few times already. So given this question; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;How do I determine how many amps will be needed from the power supply?&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can roughly guess it, in your case you say 4 servos drawing an amp each, 4 amps total.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pick any BEC that will supply greater than 4 amps, there are plenty available from the other answer I already gave.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then apply a logging circuit to validate your estimate; Make your own that logs both current and voltage, or buy a simple already build device that is made just for that purpose such as an &lt;a href=&quot;http://www.eagletreesystems.com/MicroPower/micro.htm&quot; rel=&quot;nofollow&quot;&gt;Eagle Tree Logger&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is no magic formula to find correct amperage. Only real world usage and observation will give you a more precise estimate. Any such formula would not account for your mechanical design, friction, drag, gravity etc.&lt;/p&gt;&#xA;" OwnerUserId="274" LastActivityDate="2013-01-05T12:18:56.893" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="753" PostTypeId="2" ParentId="751" CreationDate="2013-01-05T12:45:00.340" Score="3" Body="&lt;p&gt;The #pragma is more like a #define in terms of names, as opposed to a variable declaration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your code is very close; something like this would work fine;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#pragma config(Motor,  motorA,          light_blue,    tmotorNXT, PIDControl, encoder)&#xA;&#xA;void testThing (tMotor  motor_name)&#xA;{&#xA;    motor[motor_name] = 20;   // set power to 20&#xA;}&#xA;&#xA;task main()&#xA;{&#xA;    testThing(light_blue);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The actual type of a tmotor is an enum (and used like an int) and the definition can be found in RobotCintrinsics.c included with the product.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;for exmaple;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#if (1)&#xA;&#xA;  // the actual 'enum' values for 'tMotor' are automatically defined by the ROBOTC compiler. Each platform&#xA;  // and circuit board type has its own set of &quot;enum names&quot; and it was becoming too hard to manage them in&#xA;  // this file. So they are automatically configured by the compiler which has better utilities for managing&#xA;  // differences between platform types.&#xA;&#xA;  typedef enum tMotor;&#xA;&#xA;#else&#xA;&#xA;    // The old definitions are temporarily maintained here as well until the new implementation is confirmed&#xA;  // to be working well!&#xA;&#xA;  #if defined(NXT) || defined(TETRIX)&#xA;&#xA;        typedef enum&#xA;        {&#xA;          motorA = 0,&#xA;          motorB = 1,&#xA;          motorC = 2,&#xA;          mtr_S1_C1_1 =  3,&#xA;&#xA;    ... etc&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If i was to look at your code, and accept its functionality as literal then the following would work;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#pragma config(Motor,  motorA,          light_blue,    tmotorNXT, PIDControl, encoder)&#xA;#pragma config(Motor,  motorB,          light_green,   tmotorNXT, PIDControl, encoder)&#xA;&#xA;void testThing (tMotor&amp;amp;  motor_name)&#xA;{&#xA;    tmotor_name = light_green;&#xA;}&#xA;&#xA;task main()&#xA;{&#xA;    tmotor motor_to_use = light_blue;&#xA;    testThing(motor_to_use);&#xA;    motor[motor_to_use] = 20; // will actually move light_green since testThing function changed its value&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It's hard to guess what it is you are trying to actually do&lt;/p&gt;&#xA;" OwnerUserId="274" LastEditorUserId="274" LastEditDate="2013-01-05T20:48:49.130" LastActivityDate="2013-01-05T20:48:49.130" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="754" PostTypeId="5" CreationDate="2013-01-05T14:13:43.847" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2013-01-05T14:13:43.847" LastActivityDate="2013-01-05T14:13:43.847" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="755" PostTypeId="4" CreationDate="2013-01-05T14:13:43.847" Score="0" Body="Battery Eliminator Circuit - an alternative to powering motor and hotel loads (i.e. circuits with separate current and voltage ratings) from separate battery systems, allowing both loads to be safely run from a single battery system (or other power supply).  " OwnerUserId="350" LastEditorUserId="134" LastEditDate="2013-01-05T22:16:34.367" LastActivityDate="2013-01-05T22:16:34.367" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="756" PostTypeId="2" ParentId="751" CreationDate="2013-01-05T15:02:21.343" Score="0" Body="&lt;p&gt;I think I see where you're confused, and you're correct in noticing that the motor variables are a little different than regular variables.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;#pragma config( )&lt;/code&gt; is actually doing a &lt;em&gt;lot&lt;/em&gt; of heavy lifting for you because it is a &quot;&lt;a href=&quot;http://www.cplusplus.com/doc/tutorial/preprocessor/&quot; rel=&quot;nofollow noreferrer&quot;&gt;preprocessor directive&lt;/a&gt;&quot;.  In other words, there is a hidden step &amp;mdash; preprocessing &amp;mdash; between the code you wrote and the code that the compiler sees.  The preprocessor is why you have access to the &lt;code&gt;motor[ ]&lt;/code&gt; array (which you didn't need to declare before using), and why assigning a value to a &lt;code&gt;motor&lt;/code&gt; causes your real-world motors to move (which does not happen when assigning to a &quot;normal&quot; variable).  The code generated by the preprocessor is saving you from writing a lot of setup code yourself, but it is also making some normal-looking variables do some unexpected things.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your case, this is the motor config line that you wrote:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#pragma config(Motor,  port7,           light_blue,    tmotorVex393, openLoop)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This tells the preprocessor to generate some code that does the following:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Declare a variable of type &lt;code&gt;tMotor&lt;/code&gt; and store it in &lt;code&gt;motor[light_blue]&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Set the port of &lt;code&gt;motor[light_blue]&lt;/code&gt; to &lt;code&gt;port7&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Add a function that gets called when you assign a value to &lt;code&gt;motor[light_blue]&lt;/code&gt;, which converts that value directly to a power-level signal understood by Vex 393 (and outputs this signal on &lt;code&gt;port7&lt;/code&gt;).  In other words, use &lt;em&gt;open loop&lt;/em&gt; control instead of PID control.&lt;/li&gt;&#xA;&lt;li&gt;(Other things not relevant to this question)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;So, &lt;code&gt;light_blue&lt;/code&gt; is not an &quot;alternate name&quot; for &lt;code&gt;motor[port7]&lt;/code&gt;, and in fact &lt;strong&gt;neither of those names are correct&lt;/strong&gt;.  The correct way to refer to this motor in code is &lt;code&gt;motor[light_blue]&lt;/code&gt;.   In other words, &lt;code&gt;light_blue&lt;/code&gt; is an index into the &lt;code&gt;motor[ ]&lt;/code&gt; array.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://robotics.stackexchange.com/a/753/350&quot;&gt;code that Spiked3 posted&lt;/a&gt; would be the proper way to set up your function:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#pragma config(Motor,  motorA,          light_blue,    tmotorNXT, PIDControl, encoder)&#xA;&#xA;void testThing (tMotor  motor_name)&#xA;{&#xA;    motor[motor_name] = 20;   // set power to 20&#xA;}&#xA;&#xA;task main()&#xA;{&#xA;    testThing(light_blue);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="350" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2013-01-06T18:14:52.810" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="757" PostTypeId="1" CreationDate="2013-01-06T08:40:44.293" Score="8" ViewCount="301" Body="&lt;p&gt;I would like a high torque motor (37 oz-in @ 5760 rpm) for souping up a &lt;a href=&quot;http://www.theoldrobots.com/scorbot.html&quot; rel=&quot;noreferrer&quot;&gt;Scorbot 3&lt;/a&gt; I bought. I really need it to have an encoder to count the number of revolutions and to allow high start-up torque. So far, I'm having difficulty finding a suitable motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The closest I've found are:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://holmeshobbies.com/product.php?productid=467&quot; rel=&quot;noreferrer&quot;&gt;Revolver S Stubby&lt;/a&gt;&#xA;(still not ready for purchase)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://v2.teamnovak.com/products/index.php?main_page=product_info&amp;amp;cPath=1_126&amp;amp;products_id=79&quot; rel=&quot;noreferrer&quot;&gt;Team Novak Ballistic 25.5T&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I've found other RC car motors, but they are usually too big.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some alternatives I thought about are:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;adding hall sensors to an existing motor - how hard is this?&lt;/li&gt;&#xA;&lt;li&gt;rewinding a motor with more turns to increase torque (decrease Kv)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Does anybody know of any motors that fit these requirements or modifications I can make to existing ones?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Update:&lt;/em&gt;&lt;/strong&gt; I had almost given up hope, until someone at Homebrew Robotics suggested using the &lt;a href=&quot;http://www.maxonmotorusa.com/maxon/view/msp/&quot; rel=&quot;noreferrer&quot;&gt;Maxon motor finder&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you just type in my given torque and speed, it returns 3 motors, but they're all over powered because the search interprets your specs as a continuous operating point, whereas my robot will only need that much power 20% of the time, and maybe for 1 second max.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I type in 12V, 5000rpm, and 15 oz-in, then it returns 2 brushless motors, of which, the &lt;strong&gt;Motor EC 45&lt;/strong&gt; is the best fit, which has this operating curve:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://msp.maxonmotor.com/camosHtml/i?SIG=fb9a5d91198caf381122a3d6eab8b1bda3877f30_fa_1e0.png&quot; rel=&quot;noreferrer&quot;&gt;http://msp.maxonmotor.com/camosHtml/i?SIG=fb9a5d91198caf381122a3d6eab8b1bda3877f30_fa_1e0.png&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I don't want to pay what Maxon is charging, so instead, I've contacted the guy who makes the yet to be released Revolver Stubby and he has kindly offered to build a custom high torque, low RPM motor for me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone comment on why high torque, low RPM motors like the one I want seem so rare? Is due to lack of applications (robotics) or is there some intrinsic difficulty in making them?&lt;/p&gt;&#xA;" OwnerUserId="710" LastEditorUserId="37" LastEditDate="2013-02-19T17:09:53.520" LastActivityDate="2013-02-19T17:09:53.520" Title="How can I upgrade an existing robot with a higher torque, sensored motor @ ~100 watts?" Tags="&lt;motor&gt;&lt;brushless-motor&gt;" AnswerCount="1" CommentCount="9" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="758" PostTypeId="1" AcceptedAnswerId="759" CreationDate="2013-01-07T21:09:56.563" Score="11" ViewCount="1284" Body="&lt;p&gt;I'm familiar with the idea of the &lt;a href=&quot;http://en.wikipedia.org/wiki/Uncanny_valley&quot; rel=&quot;nofollow&quot;&gt;uncanny valley&lt;/a&gt; theory in human-robot interaction, where robots with &lt;em&gt;almost&lt;/em&gt; human appearance are perceived as creepy. I also know that there have been research studies done to support this theory using MRI scans. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The effect is an important consideration when designing robotic systems that can successfully interact with people. In order to avoid the uncanny valley, designers often create robots that are very far from humanlike. For example, many therapeutic robots (Paro, Keepon) are designed to look like animals or be &quot;cute&quot; and non-threatening.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other therapeutic robots, like &lt;a href=&quot;http://kaspar.herts.ac.uk/&quot; rel=&quot;nofollow&quot;&gt;Kaspar&lt;/a&gt;, look very humanlike. Kaspar is an excellent example of the uncanny valley, since when I look at Kaspar it creeps me out. However, people on the autism spectrum may not experience Kaspar the same way that I do. And according to Shahbaz's comment, children with autism have responded well to Kaspar.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the application of therapeutic robots for people on the autism spectrum, some of the basic principles of human-robot interaction (like the uncanny valley) may not be valid. I can find some anecdotal evidence (with Google) that people on the autism spectrum don't experience the uncanny valley, but so far I haven't seen any real studies in that area.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know of active research in human-robot interaction for people on the autism spectrum?  In particular, how does the uncanny valley apply (or doesn't it apply) when people on the autism spectrum interact with a humanlike robot?&lt;/p&gt;&#xA;" OwnerUserId="479" LastEditorUserId="158" LastEditDate="2014-06-13T13:00:41.460" LastActivityDate="2017-10-27T09:47:07.320" Title="In HRI, how is the &quot;uncanny valley&quot; experienced by people on the autism spectrum?" Tags="&lt;research&gt;&lt;hri&gt;&lt;uncanny-valley&gt;" AnswerCount="5" CommentCount="4" FavoriteCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="759" PostTypeId="2" ParentId="758" CreationDate="2013-01-08T15:12:27.610" Score="9" Body="&lt;p&gt;The short answer is &lt;strong&gt;no&lt;/strong&gt;. There doesn't seem to be any study directly investigating if and how the uncanny valley applies to autistic children. At least, a Google Scholar search with the keywords &lt;a href=&quot;http://scholar.google.com/scholar?q=autism%20%22uncanny%20valley%22&quot;&gt;autism &quot;uncanny valley&quot;&lt;/a&gt; doesn't result in anything of the sort. I agree, though, that this would be a most interesting and useful area of research. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind, however, that, despite the fMRI and other studies, the Uncanny Valley is far from considered an established theory. This is, partly, because the Uncanny Valley is likely a great deal more complex than Mori first proposed, that is, it is probably not just human likeness that affects our sense of familiarity, nor is familiarity the only factor affected (MacDorman, 2006). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my personal opinion, there's no doubt something like the Uncanny Valley exists, even though it may not quite take the shape Mori gave it (Bartneck et al., 2007). Artists of all ilk have long been aware of it and have deliberately used it (e.g. Chucky or any zombie movie ever) or suffered when falling into it (the Polar Express being the most notable example). Several explanations have been put forward to explain it (Brenton et al., 2005; MacDorman, 2005; Saygin et al., 2010) and it's been observed in monkeys as well (Steckenfinger and Ghazanfar, 2009), so it's very likely evolutionary in nature.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are interested in this area, I'd probably look at how people suffering from autism process faces in general. In this area, there have been a number of studies using real faces (e.g. Scholar search &lt;a href=&quot;http://scholar.google.com/scholar?q=autism%20%22facial%20features%22&quot;&gt;autism &quot;facial features&quot;&lt;/a&gt;), as well as artificial faces (e.g. Scholar search &lt;a href=&quot;http://scholar.google.com/scholar?q=autism%20cartoon%20faces&quot;&gt;autism cartoon faces&lt;/a&gt;). This difference in decoding facial expressions might explain why they seem to not feel the effects of the uncanny valley the same way other people do. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for Kaspar in particular, Blow et al. (2006) goes into some detail on the design decisions involved in Kaspar's face. Also, in a &lt;a href=&quot;https://www.youtube.com/watch?v=wdF7TwhUgLY&quot;&gt;YouTube video&lt;/a&gt;, Kaspar's creators cite predictability and simplicity as some of the reasons for his particular design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;References:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;SA Steckenfinger,  AA Ghazanfar. &quot;Monkey visual behavior falls into the uncanny valley.&quot; Proceedings of the National Academy of Sciences 106.43 (2009): 18362-18366.&lt;/li&gt;&#xA;&lt;li&gt;M Blow et al. &quot;Perception of robot smiles and dimensions for human-robot interaction design.&quot; Robot and Human Interactive Communication, 2006. ROMAN 2006. The 15th IEEE International Symposium on. IEEE, 2006.&lt;/li&gt;&#xA;&lt;li&gt;KF MacDorman. &quot;Androids as an experimental apparatus: Why is there an uncanny valley and can we exploit it.&quot; CogSci-2005 workshop: toward social mechanisms of android science. 2005.&lt;/li&gt;&#xA;&lt;li&gt;H Brenton et al. &quot;The uncanny valley: does it exist.&quot; proc HCI Annu Conf: workshop on human-animated character interaction, Edinburgh. 2005.&lt;/li&gt;&#xA;&lt;li&gt;KF MacDorman. &quot;Subjective ratings of robot video clips for human likeness, familiarity, and eeriness: An exploration of the uncanny valley.&quot; ICCS/CogSci-2006 long symposium: Toward social mechanisms of android science. 2006.&lt;/li&gt;&#xA;&lt;li&gt;AP Saygin, T Chaminade, H Ishiguro. &quot;The perception of humans and robots: Uncanny hills in parietal cortex.&quot; Proceedings of the 32nd Annual Conference of the Cognitive Science Society. 2010.&lt;/li&gt;&#xA;&lt;li&gt;C Bartneck et al. &quot;Is the uncanny valley an uncanny cliff?.&quot; Robot and Human interactive Communication, 2007. RO-MAN 2007. The 16th IEEE International Symposium on. IEEE, 2007.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="131" LastActivityDate="2013-01-08T15:12:27.610" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="760" PostTypeId="5" CreationDate="2013-01-08T15:37:46.970" Score="0" Body="&lt;p&gt;The Uncanny Valley is a theory first proposed by Masahiro Mori that posits that people find a robot more familiar, the more human-like its appearance is, but there is a sharp drop, once the robot looks very realistic but not quite real, where our reaction turns to disgust, before rising again once we can no longer distinguish it from a real human. Mori expected the effect to be more pronounced for moving robots as opposed to still images.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/XIL5A.png&quot; alt=&quot;Mori&amp;#39;s graph of the Uncanny Valley&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="131" LastEditorUserId="131" LastEditDate="2013-01-08T15:37:46.970" LastActivityDate="2013-01-08T15:37:46.970" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="761" PostTypeId="4" CreationDate="2013-01-08T15:37:46.970" Score="0" Body="The Uncanny Valley is a theory first proposed by Masahiro Mori that posits that people find a robot more familiar, the more human-like its appearance is, but there is a sharp drop, once the robot looks very realistic but not quite real, where our reaction turns to disgust, before rising again once we can no longer distinguish it from a real human. Mori expected the effect to be more pronounced for moving robots as opposed to still images." OwnerUserId="131" LastEditorUserId="131" LastEditDate="2013-01-08T15:37:46.970" LastActivityDate="2013-01-08T15:37:46.970" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="762" PostTypeId="2" ParentId="649" CreationDate="2013-01-08T20:07:40.447" Score="1" Body="&lt;p&gt;In a &lt;a href=&quot;https://robotics.stackexchange.com/a/661/13&quot;&gt;previous answer&lt;/a&gt;, we came to agree that a cost function defined as&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$c(\sigma) = \text{exp}(-\text{min_clear}(\sigma))$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;would satisfy the properties required for RRT* to yield asymptotic optimality under this metric.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, upon reviewing the IJRR article which describes RRT*, this cost function does &lt;em&gt;not&lt;/em&gt; technically satisfy the assumptions made in the article. Specifically, this cost function violates the &lt;em&gt;boundedness&lt;/em&gt; property, defined as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\exists k_c \quad c(\sigma) \leq k_c\text{TV}(\sigma), \forall \sigma \in \Sigma$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $\text{TV}(\sigma)$ is the &lt;em&gt;total variation&lt;/em&gt; of a path, which is essentially the path's Euclidean length. Under this boundedness assumption, a path of length 0 must also have a cost of 0.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's define a path $\sigma_0$ to consist of a single configuration $q$, meaning the length of $\sigma_0$ is 0. Our path cost is therefore $c(\sigma_0) = \text{exp}(-d(q)) &amp;gt; 0$, which violates the boundedness assumption. Therefore, this cost function does not meet the requirements set in the IJRR article to yield asymptotic optimality.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wonder if RRT* simply will not yield asymptotically optimal solutions under such a cost function, or if it still might but perhaps those assumptions simplified the optimality proofs in the paper.&lt;/p&gt;&#xA;" OwnerUserId="13" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2013-01-09T17:50:47.877" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="763" PostTypeId="1" AcceptedAnswerId="766" CreationDate="2013-01-09T00:41:35.487" Score="12" ViewCount="3677" Body="&lt;p&gt;I got the following homework question:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What are the general differences between robots with Ackermann steering and standard bicycles or tricycles concerning the kinematics?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;But, I don't see what differences there should be, because a car-like robot (with 2 fixed rear wheels and 2 &lt;strong&gt;dependent&lt;/strong&gt; adjustable front wheels) can be seen as a tricycle-like robot (with a single adjustable front wheel in the middle).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, if you let the distance between the two rear wheels approach zero, you get the bicycle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, I can't see any difference between those three mobile robots. Is there something I am missing?&lt;/p&gt;&#xA;" OwnerUserId="720" LastEditorUserId="350" LastEditDate="2013-01-09T14:43:45.113" LastActivityDate="2013-01-25T16:40:27.567" Title="Differences between Ackermann steering and standard bi/tricycles concerning kinematics?" Tags="&lt;mobile-robot&gt;&lt;design&gt;&lt;kinematics&gt;&lt;theory&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="764" PostTypeId="1" AcceptedAnswerId="799" CreationDate="2013-01-09T03:56:58.867" Score="10" ViewCount="1176" Body="&lt;p&gt;I am most familiar with SLAM maps that are point clouds, usually in the form of a vector like $&amp;lt;x,y,\theta,f_{1x},f_{1y},...,f_{nx},f_{ny}&amp;gt;$.  I also understand how to create a map like this using an EKF.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Today I came across a &lt;a href=&quot;http://www.mrpt.org/Graph-SLAM_maps&quot;&gt;.graph file format&lt;/a&gt;, which as you would expect consists of vertices and edges in the format:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;VERTEX2 id x y orientation&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;EDGE2 observed_vertex_id observing_vertex_id forward sideward rotate inf_ff inf_fs inf_ss inf_rr inf_fr inf_sr&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that there's a connection between matrices and graphs (an adjacency matrix for example).  But it's not clear to me how this graph format of a map is equivalent to a point cloud map that I'm familiar with.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the relationship?  Are the vertices both poses and landmarks? Are they in a global reference frame? How is this created from say velocity information and a range/bearing sensor?  Is there a transformation between a graph map and a point cloud?  &lt;/p&gt;&#xA;" OwnerUserId="502" LastActivityDate="2013-02-18T11:37:13.067" Title="The relationship between point cloud maps and graph maps" Tags="&lt;slam&gt;&lt;mapping&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="765" PostTypeId="7" CreationDate="2013-01-09T12:40:28.560" Score="0" Body="&lt;p&gt;&lt;strong&gt;$SiteShortName&lt;/strong&gt;  is for professional robotic engineers, hobbyists, researchers and students.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We ask and answer questions about robotics, control systems, control theory, algorithms, actuators and sensors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We feel the best &lt;em&gt;Robotics&lt;/em&gt; questions have links to pertinent datasheets or code, but if your question generally covers …&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;a specific robotics design problem&lt;/li&gt;&#xA;&lt;li&gt;the theory and simulation of robotic systems&lt;/li&gt;&#xA;&lt;li&gt;a sensor for a robotic system&lt;/li&gt;&#xA;&lt;li&gt;the writing algorithms for robotic systems&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;… then you’re in the right place to ask your question!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some kinds of questions aren't allowed here:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Shopping recommendations&lt;/strong&gt;: Questions which ask &quot;which product or library should I use&quot;, are considered &lt;a href=&quot;http://blog.stackoverflow.com/2010/11/qa-is-hard-lets-go-shopping/&quot;&gt;shopping recommendations&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Electronics theory&lt;/strong&gt;: Questions which are more of generic electrical engineering questions and have no real relation to robotics are better off at &lt;a href=&quot;http://electronics.stackexchange.com&quot;&gt;Electrical Engineering&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Programming&lt;/strong&gt;: Generic programming questions with no relation to robotics should be asked on &lt;a href=&quot;http://stackoverflow.com&quot;&gt;Stack Overflow&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Sci-Fi Robotics&lt;/strong&gt; : Questions about movies/books involving robots should be be asked on &lt;a href=&quot;http://scifi.stackexchange.com&quot;&gt;Science Fiction&lt;/a&gt;, unless they involve some concept of robotics--in which they are fine here.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Generally speaking, if your question is directly related to &lt;em&gt;robotics&lt;/em&gt; then even if your question might &lt;em&gt;also&lt;/em&gt; be appropriate on another site, we are likely to be happy to see it here.&lt;/p&gt;&#xA;" OwnerUserId="-1" LastEditorUserId="1105" LastEditDate="2013-04-01T03:35:05.123" LastActivityDate="2013-04-01T03:35:05.123" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="766" PostTypeId="2" ParentId="763" CreationDate="2013-01-09T15:26:47.503" Score="7" Body="&lt;p&gt;You're making two mistakes that I can see, both related to the idea of &quot;shrinking&quot; the set of front or back wheels into a single wheel.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Rather than thinking of Ackermann steering as (conceptually) a single wheel, imagine expanding the single front wheel of a tricycle into 2 wheels.  At first, the tire gets wider, then splits into two tires, then they get further apart &amp;mdash; but the axles of the two wheels remain on the same line.  In other words, you end up with a &quot;steerable front beam axle&quot; like you'd find on a toy wagon &amp;mdash; &lt;strong&gt;not&lt;/strong&gt; an Ackermann system:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/XjorZ.jpg&quot; alt=&quot;radio flyer wagon&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could think of an Ackermann system as two bicycles welded together side by side, noting that connecting the front wheels is not solved by simply forcing their steering angles to be equal.  Instead, you might look at techniques like &lt;a href=&quot;http://en.wikipedia.org/wiki/Burmester&amp;#39;s_theory&quot; rel=&quot;nofollow noreferrer&quot;&gt;Burmester's theory&lt;/a&gt; to design the proper kinematic linkage between them.  (In the Ackermann solution, it's a 4-bar linkage.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the rear wheels, you're ignoring the ability to lean. In other words, a bicycle is not simply a tricycle with zero spacing between its back wheels; leaning is an integral part of maintaining stability with only two contact points.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Ixo0L.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Ixo0Lm.jpg&quot; alt=&quot;tricycle leaning&quot;&gt;&lt;/a&gt; &lt;a href=&quot;https://i.stack.imgur.com/ZdrQ1.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZdrQ1m.png&quot; alt=&quot;bicycle leaning&quot;&gt;&lt;/a&gt;&#xA;(shifting weight to remain stable, via &quot;&lt;a href=&quot;http://www.easystreetrecumbents.com/articles/tag/greenspeed/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Tricycle Steering&lt;/a&gt;&quot;), (leaning to turn, via &lt;a href=&quot;http://www.phys.lsu.edu/faculty/gonzalez/Teaching/Phys7221/vol59no9p51_56.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;The stability of the bicycle&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Leaning is more of a dynamic discussion than a kinematic one, but worth noting since it affects the tires &amp;mdash; bicycle/motorcycle tires have a rounded cross section to accomodate that lean, while car/motor-trike tires have a flatter cross section.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2013-01-25T16:40:27.567" LastActivityDate="2013-01-25T16:40:27.567" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="767" PostTypeId="2" ParentId="763" CreationDate="2013-01-09T23:48:17.103" Score="3" Body="&lt;p&gt;You are correct in that there is no Kinematic difference. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Kinematics&quot; rel=&quot;nofollow&quot;&gt;Kinematics&lt;/a&gt; do not consider why things happen - ie dynamic stability.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are obvious physical differences, but when the math is worked out for kinematics, it should be the same. This of course implies a certain realistic cap on the level of kinematics. For example it has been pointed out a bicycle leans to steer, but that only occurs once a certain velocity is reached. Until then the kinematics are different. And once that velocity is reached &lt;a href=&quot;http://en.wikipedia.org/wiki/Precession&quot; rel=&quot;nofollow&quot;&gt;Gyroscopic precession&lt;/a&gt; also becomes involved. One has to choose where reasonableness is satisfied. If you think all the physics can be modeled, I have some contacts at Yamaha motorcycle racing I'd like to introduce you to.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found a &lt;a href=&quot;https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;cad=rja&amp;amp;sqi=2&amp;amp;ved=0CDIQFjAA&amp;amp;url=http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.41.7363&amp;amp;rep=rep1&amp;amp;type=pdf&amp;amp;ei=JgHuUP_-DqOSiALdtIDACw&amp;amp;usg=AFQjCNEj20VNHnRRCJVEvP4DIGIsZA3xnw&amp;amp;sig2=Nl3MEaEfABs3E9KYsQMjGQ&amp;amp;bvm=bv.1357700187,d.cGE&quot; rel=&quot;nofollow&quot;&gt;PDF&lt;/a&gt; that describes the math in detail. The Kinematic math for ackerman is known as the bicycle model. Unless that's a crued joke, I would say it implies the correct answer to your question.&lt;/p&gt;&#xA;" OwnerUserId="274" LastActivityDate="2013-01-09T23:48:17.103" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="768" PostTypeId="1" AcceptedAnswerId="769" CreationDate="2013-01-10T05:53:51.920" Score="9" ViewCount="4669" Body="&lt;p&gt;I'm using my own code to create a quadcopter robot. The hardware part is done but I need to balance the copter. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;The original video demonstrating the problem was shared via dropbox and is no longer available.&#xA;&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have tried to play with the speed of each motor to get it balanced. It didn't go. &#xA;I actually have a gyro and accelerometer onboard. But how shall I adjust the motor speed based on these values? What are the rules that I should beware of?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any better solution other that try and error? Where shall I begin? Any tips? &lt;/p&gt;&#xA;" OwnerDisplayName="user697" LastEditorUserId="9176" LastEditorDisplayName="user697" LastEditDate="2017-06-28T08:27:36.767" LastActivityDate="2017-06-28T08:27:36.767" Title="How to balance a flying quadcopter?" Tags="&lt;balance&gt;&lt;quadcopter&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="769" PostTypeId="2" ParentId="768" CreationDate="2013-01-10T07:34:07.207" Score="5" Body="&lt;p&gt;I believe a little Googling and you will find several of the existing controller boards have open source. For example I made a small change to &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__24723__Hobbyking_KK2_0_Multi_rotor_LCD_Flight_Control_Board.html&quot; rel=&quot;noreferrer&quot;&gt;hobby kings KK board&lt;/a&gt; last week, compiled it and it was fine (look for firmware 1.5 in the files tab). I think &lt;a href=&quot;http://www.rcgroups.com/forums/showthread.php?t=1568554&quot; rel=&quot;noreferrer&quot;&gt;openAero&lt;/a&gt; is also readily available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I sure would not try and start from scratch, but if you do, it is multiple PID loops on each axis, mixed with control signals from the receiver. Roll and pitch vary by changing motor speed as you guessed. Yaw is changed by changing opposite rotating pairs of motors. altitude is controlled by changing all motors at once. What code I have looked at leads me to believe you probably should be comfortable with &lt;a href=&quot;http://en.wikipedia.org/wiki/Euler_angles&quot; rel=&quot;noreferrer&quot;&gt;euler angles&lt;/a&gt; in order to fuse sensor data from gyros and acceleration (which may or may not be &lt;a href=&quot;http://en.wikipedia.org/wiki/I%C2%B2C&quot; rel=&quot;noreferrer&quot;&gt;I2C&lt;/a&gt; so learn that to if you are not familiar with it).&lt;/p&gt;&#xA;" OwnerUserId="274" LastActivityDate="2013-01-10T07:34:07.207" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="770" PostTypeId="2" ParentId="637" CreationDate="2013-01-10T11:33:17.867" Score="0" Body="&lt;p&gt;Keeping with the idea of robotics-relevant answers, another thing to take into consideration for mobile/wheeled robotics (albeit not so much with a wheelchair unless you plan to take it off-roading) is vibration and shock. In reviewing your design, ask yourself: is there anything that's going to come loose? Think connectors that aren't a very snug fit or jumper wires connected to a header pin. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's been some questions with great answers on Electronics.SE that cover this area at the PCB level:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://electronics.stackexchange.com/questions/5998/smd-vs-through-hole-components-in-high-vibration-environments&quot;&gt;SMD vs. Through-hole components in high vibration environments&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://electronics.stackexchange.com/questions/11457/board-design-for-high-impact-environments&quot;&gt;Board Design for High Impact Environments&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While this is a pushing outside the scope of the question, be sure to account for disconnect/power loss conditions in software when possible as well. There's not a whole lot you can do on the power side if it's a single-supply system, but if you have multiple subsystems powered off of different supplies, you can monitor supply voltages so that one component can be aware of a failure elsewhere and act appropriately.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your robot is controlled over a serial interface and the onboard controller can't get some kind of &quot;heartbeat&quot; signal from the host system, it needs to fail gracefully and not go careening down a hallway uncontrolled because the last command it received was &quot;go forward&quot;.&lt;/p&gt;&#xA;" OwnerUserId="308" LastEditorUserId="-1" LastEditDate="2017-04-13T12:33:08.317" LastActivityDate="2013-01-10T11:33:17.867" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="771" PostTypeId="5" CreationDate="2013-01-10T14:00:38.540" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2013-01-10T14:00:38.540" LastActivityDate="2013-01-10T14:00:38.540" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="772" PostTypeId="4" CreationDate="2013-01-10T14:00:38.540" Score="0" Body="RS-232 is the electrical standard used on most serial ports." OwnerUserId="308" LastEditorUserId="308" LastEditDate="2013-01-10T15:08:17.700" LastActivityDate="2013-01-10T15:08:17.700" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="773" PostTypeId="5" CreationDate="2013-01-10T14:07:22.677" Score="0" Body="&lt;p&gt;*&lt;em&gt;P&lt;/em&gt;*ulsed *&lt;em&gt;W&lt;/em&gt;*idth *&lt;em&gt;M&lt;/em&gt;*odulation is most often used in robotics for motor control applications. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;For a brushed DC motor, the PWM duty cycle controls the speed of the motor. &lt;/li&gt;&#xA;&lt;li&gt;For RC servos, the PWM duty cycle controls the servo position.&lt;/li&gt;&#xA;&lt;li&gt;Brushless DC motors use multiple PWM waveforms to control each phase of the motor.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="308" LastEditorUserId="134" LastEditDate="2013-01-10T15:07:54.550" LastActivityDate="2013-01-10T15:07:54.550" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="774" PostTypeId="4" CreationDate="2013-01-10T14:07:22.677" Score="0" Body="Pulse-width modulation (PWM) is varying the duty cycle of a rectangle wave, usually with a constant frequency.&#xD;&#xA;" OwnerUserId="308" LastEditorUserId="308" LastEditDate="2013-01-10T15:08:28.527" LastActivityDate="2013-01-10T15:08:28.527" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="775" PostTypeId="1" AcceptedAnswerId="776" CreationDate="2013-01-10T21:41:04.937" Score="8" ViewCount="881" Body="&lt;p&gt;I would like to design a robotic arm to hold a weight X at length Y (in my case I want to hold X=2.5 lbs at Y = 4 inches). Starting out simply, I would like try building an arm with a gripper plus one servo joint. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;[Servo Joint] ----- Y ------ [Gripper]  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When designing an arm, would I want to say that the gripper has to have enough torque to hold the desired weight (e.g. 2.5 lbs) at a minimal distance (however long the fingers are) then design the servo joint to bear the weight of the gripper + the load?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to be able to hold the object at full extension&lt;/p&gt;&#xA;" OwnerUserId="721" LastEditorUserId="134" LastEditDate="2013-01-11T06:28:13.803" LastActivityDate="2014-02-20T03:38:13.187" Title="Getting started with robotic arm design" Tags="&lt;design&gt;&lt;otherservos&gt;&lt;robotic-arm&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="776" PostTypeId="2" ParentId="775" CreationDate="2013-01-10T22:20:57.947" Score="7" Body="&lt;p&gt;You have the right idea, just be sure to design for the servo to bear the &lt;a href=&quot;http://en.wikipedia.org/wiki/Torque&quot; rel=&quot;nofollow&quot;&gt;moment force (aka torque)&lt;/a&gt; generated by the load at Y = 4 inches from the joint, not the 2.5 pounds of what you're trying to hold.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\tau = r*F*\sin(\theta)$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;r is the displacement (your 4 inch arm)&lt;/li&gt;&#xA;&lt;li&gt;F is the magnitude of the force (2.5 pounds + the gripper)&lt;/li&gt;&#xA;&lt;li&gt;Theta is the angle between the force vector (gravity, pointing down) and the lever arm&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;br&gt;&#xA;You also want to account for the torque exerted by the weight of the 4-inch arm itself. The displacement you use to calculate this is not 4 inches, but the distance from the servo to the center of mass of the arm (probably 2 inches).&lt;/p&gt;&#xA;" OwnerUserId="308" LastEditorUserId="308" LastEditDate="2013-01-11T13:09:33.457" LastActivityDate="2013-01-11T13:09:33.457" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="777" PostTypeId="1" AcceptedAnswerId="779" CreationDate="2013-01-11T02:30:04.570" Score="8" ViewCount="4002" Body="&lt;p&gt;I am trying to build a semi-analog timer. Something like those old egg timers that you rotate the face of. I want a knob that I can turn that can be read by a microcontroller, and I also want the microcontroller to be able to position the knob. I'd like to implement &quot;stops&quot; by letting the microcontroller push the knob towards certain positions. As it runs down, the knob should turn. This is my first project of this kind; I've built small robots in the past, but it's been many years.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've considered &lt;a href=&quot;http://forums.trossenrobotics.com/tutorials/how-to-diy-128/get-position-feedback-from-a-standard-hobby-servo-3279/&quot;&gt;hacking a servo motor&lt;/a&gt; to read its position, but the small hobby servos I've tried are too hard to turn, very noisy, and pick up too much momentum when turned. They don't act like a good knob.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm now considering a rotary encoder connected to a motor, but after hunting at several sites (SparkFun, ServoCity, DigiKey, Trossen, and some others), I haven't been able to find anything that seemed appropriate. I'm not certain how to find a motor that's going to have the right kind of low torque.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This seems like it shouldn't be a really uncommon problem. Is there a fairly normal approach to creating a knob that can be adjusted both by the user and a microcontroller?&lt;/p&gt;&#xA;" OwnerUserId="733" LastActivityDate="2013-01-31T06:35:34.400" Title="Building a controllable &quot;knob&quot;" Tags="&lt;motor&gt;&lt;otherservos&gt;" AnswerCount="5" CommentCount="1" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="778" PostTypeId="2" ParentId="777" CreationDate="2013-01-11T03:58:13.780" Score="0" Body="&lt;p&gt;I don't know if there is a normal approach to this, but you should definitely check out a video I found years ago and still blows my mind: &lt;a href=&quot;http://www.youtube.com/watch?v=zE5PGeh2K9k&quot; rel=&quot;nofollow&quot;&gt;The Secret Knock Detecting Lock&lt;/a&gt;. Basically the guy built an Arduino-based device you can hook up to your door and setup a secret knock that will trigger it to open... Awesome!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm sure just the video would be pretty good for inspiration (it's the first thing that came to my mind as I read the title of your question), but after a quick Google search I also found the &lt;a href=&quot;http://www.instructables.com/id/Secret-Knock-Detecting-Door-Lock/&quot; rel=&quot;nofollow&quot;&gt;instructable page&lt;/a&gt; that explains it all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a part of the instructable page where he says the motor he uses and gives out some recommendations:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;1  5v Gear reduction motor.  The higher torque the better.  &lt;a href=&quot;https://solarbotics.com/product/gm22/&quot; rel=&quot;nofollow&quot;&gt;Here&lt;/a&gt;'s a&#xA;  good one. (14-16mm diameter is ideal because it fits inside of 1/2&quot;&#xA;  PVC pipe.) I recommend one with at least 15oz/in (11 N-cm) of torque&#xA;  at 5v to turn a basic lock.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="95" LastActivityDate="2013-01-11T03:58:13.780" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="779" PostTypeId="2" ParentId="777" CreationDate="2013-01-11T09:55:38.550" Score="5" Body="&lt;p&gt;I have a couple of options for you.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Option 1, build your own servomechanism&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;As you only need a very low torque to move a knob, a very small motor should do the job nicely. You will probably need to add some friction so that it it doesn't move &lt;em&gt;too&lt;/em&gt; easily, or use a small stepper motor with a decent &lt;a href=&quot;http://en.wikipedia.org/wiki/Stepper_motor#Detent_torque&quot; rel=&quot;nofollow noreferrer&quot;&gt;detent torque&lt;/a&gt; and a little gearing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A very cheap way of getting your position feedback is to find an old &lt;a href=&quot;http://en.wikipedia.org/wiki/Mouse_%28computing%29#Mechanical_mice&quot; rel=&quot;nofollow noreferrer&quot;&gt;opto-mechanical mouse&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/File:Mouse_mechanism_diagram.svg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4DwT7.png&quot; alt=&quot;opto-mechanical mouse - The copyright holder of this file allows anyone to use it for any purpose, provided that the copyright holder is properly attributed. Redistribution, derivative work, commercial use, and all other use is permitted.&quot;&gt;&lt;/a&gt; Opto-mechanical mouse&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Connect up the shaft to your motor/knob shaft and then either roll your own &lt;a href=&quot;http://en.wikipedia.org/wiki/Rotary_encoder#Incremental_rotary_encoder&quot; rel=&quot;nofollow noreferrer&quot;&gt;quadrature encoder&lt;/a&gt; (taking the A/B phase inputs directly into your microcontroller) or reuse the entire circuit board and hook up the 'mouse' to a serial port and read back the X or Y mouse position through software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The article &lt;a href=&quot;http://members.shaw.ca/swstuff/mouse.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Recycle PS/2 Mice into Rotary Pulse Generators&lt;/a&gt; is a nice example of someone doing this.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Option 2, persevere with the RC servo&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The reason why your &lt;a href=&quot;http://en.wikipedia.org/wiki/Servomechanism#RC_servos&quot; rel=&quot;nofollow noreferrer&quot;&gt;RC servo&lt;/a&gt;'s are hard to turn is that they have a high ratio gear train to give them the torque they need, and this makes them difficult to &lt;em&gt;backdrive&lt;/em&gt;. Take a look at this exploded diagram from the wikipedia &lt;a href=&quot;http://en.wikipedia.org/wiki/Servomechanism&quot; rel=&quot;nofollow noreferrer&quot;&gt;Servomechanism&lt;/a&gt; page:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/File:Servo.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZgqPf.jpg&quot; alt=&quot;Exploded RC servo - This work has been released into the public domain by its author, Sonett72 at the wikipedia project.&quot;&gt;&lt;/a&gt; Small R/C servo mechanism&lt;/p&gt;&#xA;  &#xA;  &lt;ol&gt;&#xA;  &lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Electric_motor&quot; rel=&quot;nofollow noreferrer&quot;&gt;electric motor&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;li&gt;&lt;p&gt;position feedback &lt;a href=&quot;http://en.wikipedia.org/wiki/Potentiometer&quot; rel=&quot;nofollow noreferrer&quot;&gt;potentiometer&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;li&gt;&lt;p&gt;reduction &lt;a href=&quot;http://en.wikipedia.org/wiki/Gear&quot; rel=&quot;nofollow noreferrer&quot;&gt;gear&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Actuator&quot; rel=&quot;nofollow noreferrer&quot;&gt;actuator&lt;/a&gt; arm&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;/ol&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;A small turn of the actuator shaft of this RC servo would result in a large (many turn) movement of the motor, if you could get it to move without stripping the gears.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Again, since in your application you only need enough torque to turn the knob, you may be able to get rid of that gearing and use the motor position directly. By removing or reducing the gearing, you should find the motor moves very freely indeed. In fact, you may need to add some friction (or leave some gearing in place) in order to prevent the motor being very jittery.&lt;/p&gt;&#xA;" OwnerUserId="37" LastActivityDate="2013-01-11T09:55:38.550" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="780" PostTypeId="1" AcceptedAnswerId="781" CreationDate="2013-01-11T15:07:34.650" Score="13" ViewCount="1228" Body="&lt;p&gt;The fact is that the more I search the less I find autonomous (real) robots in use. The companion robots are all toys with limited useless functionality. Whenever there is a natural disaster you don’t see operational search and rescue robots in the news. Even military robots in service are all remotely controlled machines. They are not intelligent machines. Industrial robotic arms are deterministic machines. The only robots with some levels of autonomous functionality are cleaning bots, warehouse operations bots and farming robots.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, today:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the artificial intelligence algorithms are very good in making decisions &lt;/li&gt;&#xA;&lt;li&gt;the sensing technologies are very sophisticated&lt;/li&gt;&#xA;&lt;li&gt;the communication technologies are very fast&lt;/li&gt;&#xA;&lt;li&gt;we can manufacture cheap parts&lt;/li&gt;&#xA;&lt;li&gt;people are extremely gadget savvy&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So, why there is no real robot in our day to day life? No investment in the domain? No market yet? Not enough knowledge in the domain? A missing technology? Any idea?&lt;/p&gt;&#xA;" OwnerUserId="732" LastActivityDate="2019-02-20T11:34:14.643" Title="What are the reasons for not having autonomous robots in our daily activities?" Tags="&lt;mobile-robot&gt;" AnswerCount="5" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="781" PostTypeId="2" ParentId="780" CreationDate="2013-01-11T15:28:59.643" Score="10" Body="&lt;p&gt;First of all, everything is not as perfect as you think. A lot of algorithms (AI included) work well in theory, but in practice there are way too many &lt;code&gt;if&lt;/code&gt;s of unforeseen events. It happens so often that your algorithm works perfect in simulation and once you load it in a robot, it can't even go straight in a simple hallway.&lt;/p&gt;&#xA;&lt;p&gt;That aside, I believe there are two main reasons:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;Robots are expensive&lt;/strong&gt;. You may have &lt;em&gt;some&lt;/em&gt; cheap parts, but really, robots are expensive. In my lab, we took part in making robotic skins, and just that, for a human-sized robot is not cheap at all. It's cheap for an industrial robot, but I doubt you would want to pay thousands of dollars/euros for not-useless robot.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Robots are not safe&lt;/strong&gt;. Not yet at least. If a small vacuum cleaner robot hits your leg, it won't hurt much. But if a humanoid robot crushes your hand during a hand-shake, well, no one likes to be responsible for that. Note that shortcomings of algorithms (for example sensor data processing, feature extraction and reasoning) are the main reason for this lack of safety.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;So I believe, even though we are not too far from having robot friends among us, it's still too early for it.&lt;/p&gt;&#xA;&lt;p&gt;Just to give you examples from real world:&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;http://en.wikipedia.org/wiki/Nao_%28robot%29&quot; rel=&quot;noreferrer&quot;&gt;Nao robot&lt;/a&gt;, designed to be a companion (from Wikipedia) but actually mostly used for soccer games, costs about &lt;strong&gt;16000$&lt;/strong&gt;:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/iV1bC.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/iV1bC.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&#xA;&lt;sub&gt;(source: &lt;a href=&quot;http://www.about-robots.com/images/nao-robot-price-how-much-does-the-nao-robot-cost-21603071.jpg&quot; rel=&quot;noreferrer&quot;&gt;about-robots.com&lt;/a&gt;)&lt;/sub&gt;&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;http://en.wikipedia.org/wiki/Enon_%28robot%29&quot; rel=&quot;noreferrer&quot;&gt;Enon robot&lt;/a&gt;, built to be a personal assistant, costs about &lt;strong&gt;60000$&lt;/strong&gt;:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/2/2d/Enon_robot.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;http://en.wikipedia.org/wiki/ICub&quot; rel=&quot;noreferrer&quot;&gt;iCub&lt;/a&gt; humanoid costs &lt;strong&gt;200000$&lt;/strong&gt;:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/upDNI.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/upDNI.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&#xA;&lt;sub&gt;(source: &lt;a href=&quot;http://cdn.physorg.com/newman/gfx/news/hires/2009/DSC_5744.jpg&quot; rel=&quot;noreferrer&quot;&gt;physorg.com&lt;/a&gt;)&lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="158" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2019-02-20T11:34:14.643" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="782" PostTypeId="2" ParentId="764" CreationDate="2013-01-12T06:19:56.733" Score="1" Body="&lt;p&gt;There's a &lt;a href=&quot;http://www.mrpt.org/node/1704&quot; rel=&quot;nofollow&quot;&gt;forum post&lt;/a&gt; with some more clarifying information on the format. It looks like the graph node values are initial estimates of self-poses, and edges encode pose constraints as represented by the &lt;a href=&quot;http://en.wikipedia.org/wiki/Kalman_filter#Information_filter&quot; rel=&quot;nofollow&quot;&gt;information filter&lt;/a&gt;, the dual of the Kalman filter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From what I can tell, this map format includes only self-pose information and not landmarks, so there would not be a direct conversion from a point cloud map.&lt;/p&gt;&#xA;" OwnerUserId="55" LastEditorUserId="55" LastEditDate="2013-01-14T14:51:07.723" LastActivityDate="2013-01-14T14:51:07.723" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="783" PostTypeId="1" CreationDate="2013-01-12T11:46:10.993" Score="3" ViewCount="1170" Body="&lt;p&gt;I am looking for a good embedded PC to run ROS on. I recently came across a couple of little machines using new very multi-core processors, such as the &lt;a href=&quot;http://www.kickstarter.com/projects/adapteva/parallella-a-supercomputer-for-everyone&quot; rel=&quot;nofollow&quot;&gt;Epiphany&lt;/a&gt; and the &lt;a href=&quot;http://www.xmos.com/&quot; rel=&quot;nofollow&quot;&gt;XMOS&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since the one thing that ROS really seems to want is cores, would ROS be able to take advantage of all of these cores? Or are they all just too feeble with too little RAM to be of any use?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would it make more sense to focus on machines with fewer, more powerful cores?&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2013-01-12T20:17:18.830" Title="Would ROS benefit from a multicore processor like Epiphany or XMOS?" Tags="&lt;ros&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="784" PostTypeId="2" ParentId="783" CreationDate="2013-01-12T14:46:08.500" Score="2" Body="&lt;p&gt;Short answer; it depends.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ROS is a framework that can support multiple cores, but it is up to the ROS modules themselves to thrive in a multi-core environment. You can NOT expect ROS to automatically use all the cores, but if your software is written in a way that they can be used, then ROS will accommodate them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A little generic history; There was a way that program processes used to talk to each other within a computer. Soon that grew into a method where those process could communicate within the same computer or on to a physically separate computer. And then high efficiency versions of that became the basis for ROS and &lt;a href=&quot;https://www.microsoft.com/robotics/&quot; rel=&quot;nofollow&quot;&gt;Microsoft RDS&lt;/a&gt;. Microsoft found the project so successful they merged it with an existing technology &lt;a href=&quot;http://en.wikipedia.org/wiki/SOAP&quot; rel=&quot;nofollow&quot;&gt;SOAP&lt;/a&gt;, and developed &lt;a href=&quot;http://en.wikipedia.org/wiki/Windows_Communication_Foundation&quot; rel=&quot;nofollow&quot;&gt;WCF&lt;/a&gt;. The part you probably do not know is that WCF is being implemented as a processor to processor and/or sub-processor communication protocol on the hardware bus (with strong focus on robotic potential). The point is, that the message switching architectures pioneered by ROS and MRDS are super robust to the point where something similar will probably power hardware a generation or 2 from now.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yes, by all means, use multi-core as much as possible. If you write code today that doesn't consider async and multi-core you might as well choose a different career path. There is little difference to writing well for 4 heavy cores, or 2000 small ones. Some difference, but if you know how to do one, you probably understand how to do the other as well.&lt;/p&gt;&#xA;" OwnerUserId="274" LastEditorUserId="308" LastEditDate="2013-01-12T20:17:18.830" LastActivityDate="2013-01-12T20:17:18.830" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="785" PostTypeId="2" ParentId="783" CreationDate="2013-01-12T19:57:38.353" Score="0" Body="&lt;p&gt;I can't comment on Epiphany, but you can absolutely connect additional RAM to an XMOS to be able to run ROS if the onboard 64KB/core RAM isn't sufficient. Check out the libraries on the XCore Github page: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://github.xcore.com/repo_index/sc_sdram_readme.html&quot; rel=&quot;nofollow&quot;&gt;SDRAM&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://github.xcore.com/repo_index/sc_sdram_burst_readme.html&quot; rel=&quot;nofollow&quot;&gt;SDRAM burst mode&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://github.xcore.com/repo_index/sc_fram_if_readme.html&quot; rel=&quot;nofollow&quot;&gt;SPI FRAM&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://github.xcore.com/repo_index/sc_sram_readme.html&quot; rel=&quot;nofollow&quot;&gt;SRAM&lt;/a&gt; &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://github.xcore.com/repo_index/proj_xmp64_readme.html&quot; rel=&quot;nofollow&quot;&gt;XK-XMP-64&lt;/a&gt; reference design has onboard SDRAM and the PDF schematics are in the Git repository if you want to go that route.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm picturing a lot of wrapper functions to call ROS functions and pass/stream data between threads with the XMOS inter-thread communication channels. There's a lot of design decisions you would have to make with respect to what threads to run on which cores -- if you run multiple threads on the same core, the 400-500 MIPS per core is split among them.&lt;/p&gt;&#xA;" OwnerUserId="308" LastActivityDate="2013-01-12T19:57:38.353" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="786" PostTypeId="2" ParentId="780" CreationDate="2013-01-12T20:32:36.790" Score="8" Body="&lt;p&gt;A major limiting factor to autonomous robots is intelligence. While AI has made great strides it has generally been unable to handle the complexity of the world. A common solution this problem has been to restrict autonomous robots to very simplified versions of the world.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Roomba is a good example. It deals with the complexity of the world by essentially executing combinations of simple patterns (spirals, straight lines, etc.) where transitions between patterns are a function of obstacle presence and time. This has its benefits. For instance the Roomba only needs a hand full of bump and IR sensors to perceive its world which in turn limits the amount of processing power required.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The exception at the moment is autonomous vehicles. This comes predominantly from the large investments the military has been making over the years. Not only in Unmanned Aerial Vehicles (UAVs) but also ground based vehicles. Widely known examples of these investments include the &lt;a href=&quot;http://en.wikipedia.org/wiki/DARPA_Grand_Challenge&quot;&gt;DARPA Grand Challenge&lt;/a&gt; and &lt;a href=&quot;http://archive.darpa.mil/grandchallenge/&quot;&gt;DARPA Urban Challenge&lt;/a&gt;. Fortunately a lot of the techniques developed for these vehicles are more generally applicable. For instance the motion planning techniques are usually applicable to robots with other methods of locomotion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other types of autonomous robots are on the horizon because of similar investments. For instance DARPA recently announced a winner of the &lt;a href=&quot;http://www.theverge.com/2012/8/16/3247964/sandia-robot-hand-darpa-funded-replace-fingers&quot;&gt;DARPA hand challenge&lt;/a&gt; and is actively promoting a contest for &lt;a href=&quot;http://spectrum.ieee.org/automaton/robotics/humanoids/iros-2012-darpa-robotics-challenge-update&quot;&gt;bipeds&lt;/a&gt;. Similarly companies like &lt;a href=&quot;http://www.bostondynamics.com/&quot;&gt;Boston Dynamics&lt;/a&gt; have done a lot to advance autonomous robots. Of course one might object that their robots (e.g. &lt;a href=&quot;http://spectrum.ieee.org/automaton/robotics/military-robots/latest-ls3-alphadog-prototypes-get-less-noisy-more-brainy&quot;&gt;BigDog&lt;/a&gt; and &lt;a href=&quot;http://spectrum.ieee.org/automaton/robotics/military-robots/boston-dynamics-building-fast-running-robot-cheetah-new-agile-humanoid&quot;&gt;Cheetah&lt;/a&gt;) are only semi-autonomous but such an objection fails to recognize just how much autonomy is still involved.&lt;/p&gt;&#xA;" OwnerUserId="177" LastActivityDate="2013-01-12T20:32:36.790" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="787" PostTypeId="2" ParentId="777" CreationDate="2013-01-13T04:55:24.117" Score="0" Body="&lt;p&gt;How about using a &lt;code&gt;stepper motor&lt;/code&gt;, you will be able to control the position exactly.&lt;/p&gt;&#xA;" OwnerUserId="743" LastEditorUserId="134" LastEditDate="2013-01-13T07:24:38.840" LastActivityDate="2013-01-13T07:24:38.840" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="788" PostTypeId="1" AcceptedAnswerId="793" CreationDate="2013-01-13T05:01:51.300" Score="13" ViewCount="3927" Body="&lt;p&gt;I was wondering, do we have real nano bots, like the ones in the movies? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think we have bots which can move through the blood vessels, am I right?&lt;/p&gt;&#xA;" OwnerUserId="743" LastEditorUserId="350" LastEditDate="2013-01-14T16:41:58.793" LastActivityDate="2019-02-21T11:05:22.217" Title="Do &quot;nano bots&quot; (that can fit inside the human body) actually exist?" Tags="&lt;mobile-robot&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="789" PostTypeId="2" ParentId="788" CreationDate="2013-01-13T10:58:21.477" Score="12" Body="&lt;p&gt;&lt;a href=&quot;http://www.iris.ethz.ch/msrl/publications/files/Peyer_IROS2012.pdf&quot;&gt;Movement of Artificial Bacterial Flagella in Heterogeneous Viscous&#xA;Environments at the Microscale&lt;/a&gt;&lt;sup&gt;&amp;dagger;&lt;/sup&gt; is a recent article from ETH Zürich that discusses the movement possibilities of an artificial bacteria in the blood stream or in the eye. Swim tests were performed in different methyl cellulose concentrations. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do not think so that such methods can be used in human body in the near future because of the existing technological constraints.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is still not clear how to &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;create such small machines from non-allergic material&lt;/li&gt;&#xA;&lt;li&gt;with effective motors&lt;/li&gt;&#xA;&lt;li&gt;and small battery storing enough energy for the duration of the job  &lt;/li&gt;&#xA;&lt;li&gt;that can move inside the body without making any &#xA;harm e.g. blocking the blood stream&lt;/li&gt;&#xA;&lt;li&gt;and that can deliberately move to the planned location&lt;/li&gt;&#xA;&lt;li&gt;recognize the destination &lt;/li&gt;&#xA;&lt;li&gt;and perform its job there &lt;/li&gt;&#xA;&lt;li&gt;and finally that could leave the body after the job is done,&lt;/li&gt;&#xA;&lt;li&gt;all reliable and stoppable if necessary, even with the possibility to track&#xA;the progress.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;&amp;dagger; by Kathrin E. Peyer, Famin Qiu, Li Zhang, and Bradley J. Nelson (978-1-4673-1735-1/12/S31.00 ©2012 IEEE)&lt;/sup&gt;&lt;/p&gt;&#xA;" OwnerUserId="577" LastEditorUserId="37" LastEditDate="2013-09-06T19:40:00.233" LastActivityDate="2013-09-06T19:40:00.233" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="790" PostTypeId="1" AcceptedAnswerId="792" CreationDate="2013-01-13T18:38:55.450" Score="8" ViewCount="379" Body="&lt;p&gt;Over the last month, I saw many robots that don't have any real purpose, which made me ask myself: &quot;Does this have any value?&quot; I saw dancing robot on CES, advanced lego based robots and also robots combined for very limited purpose. I saw ten year old children playing with robots, and competitions for them. Someone has told me that this is just for education and logic spreading. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In other cases, there were arguments like, &quot;this is for informing people that everything is going forwards&quot;. I know that people will buy robotic vacuum cleaners because they think that they'll save some time, but these robotic cleaners are not very reliable and I see it only as marketing. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do these things (children's education, dancing robots, and other instances of &lt;a href=&quot;http://en.wikipedia.org/wiki/Pig_in_a_poke&quot;&gt;selling a pig in a poke&lt;/a&gt;) have any value in terms of robotics, and are really advancing the field as manufacturers say?&lt;/p&gt;&#xA;" OwnerUserId="747" LastEditorUserId="350" LastEditDate="2013-01-14T16:58:33.223" LastActivityDate="2013-10-14T14:10:11.767" Title="Do &quot;toy&quot; robots move technology forwards?" Tags="&lt;research&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="792" PostTypeId="2" ParentId="790" CreationDate="2013-01-13T19:10:15.817" Score="15" Body="&lt;p&gt;It certainly does. Ever since they started writing fiction about robots, they imagined robots as intelligent beings among ourselves. No one thought of robots as mechanical arms that replace your jobs. So first of all, there is no reason to think why the humans &lt;em&gt;wouldn't&lt;/em&gt; want to make useless robots.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may have heard of the &lt;a href=&quot;http://en.wikipedia.org/wiki/Karakuri_ningy%C5%8D&quot; rel=&quot;nofollow noreferrer&quot;&gt;karakuri dolls&lt;/a&gt; from the 17&lt;sup&gt;th&lt;/sup&gt; century, that serve tea (pretty useless, huh?):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/4/45/KarakuriBritishMuseum.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or the &lt;a href=&quot;http://en.wikipedia.org/wiki/Digesting_Duck&quot; rel=&quot;nofollow noreferrer&quot;&gt;digesting duck&lt;/a&gt; from the 18&lt;sup&gt;th&lt;/sup&gt; century (even worse):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/9/9a/Vaucanson_duck1.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;that you would argue that they don't make sense and they did not bring the technology forward, but that is not entirely correct.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are many aspects why such robots are useful:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Psychological effect&lt;/strong&gt;: As a human, you would probably be creeped out if you suddenly start seeing humanoids walking around. Useless robots (as well as fictional books) help the transition from our current life to one with robots.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Technological effect&lt;/strong&gt;: The useless robot could well be (and probably often is) the testbed for a new technology. The dancing robot may indeed be a prototype on which a system that keeps the robot in balance is being tested. Since dancing is more difficult than walking or running, the balance system on a robot that can dance can very well perform on one that merely walks.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Cultural effect&lt;/strong&gt;: In this subject, the Japanese come to mind. I am not thoroughly familiar with the Japanese culture, but they certainly seem to have a knack for robots that mimic a human. By your definition of &quot;useless&quot;, we humans all more or less are useless, so it is ok for them for the robots to be that way, too.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;On the second part of your question:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;are robotics really moving forwards as manufacturers say?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I would again say yes. Most of the advances in technology (robotics included) is not made public, and by public I don't mean engineers and scientists, but your average teenage girl. You would probably never even hear in the news that they had made a super fantastic &lt;code&gt;&amp;lt;whatever&amp;gt;&lt;/code&gt; for robots. All you &lt;em&gt;would&lt;/em&gt; probably see is the &lt;em&gt;fun&lt;/em&gt; robots that people would enjoy watching.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I merely work in a lab and hear every now and then who does what, and I certainly believe that robotics is being developed quite fast!&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;To answer your comment:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;But what about using new technlogoies[sic] as deception of customer when saying this will help you; and it finally won't in most of cases.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I'm afraid we live in a world of greed and lies. You hear all sorts of advertisements on all sorts of useless junk every day from companies that want to get more and more money.  And you should note that any company that mass produces robots (or any other thing) has only one goal: &lt;em&gt;sell those robots&lt;/em&gt;. It's not just robotics, so any effect such false advertising would have on people, you should ask psychologists rather than roboticists.&lt;/p&gt;&#xA;" OwnerUserId="158" LastEditorUserId="-1" LastEditDate="2017-03-10T09:42:48.883" LastActivityDate="2013-10-14T14:10:11.767" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="793" PostTypeId="2" ParentId="788" CreationDate="2013-01-13T22:08:08.520" Score="16" Body="&lt;p&gt;Yes! Yes we do have robots which can swim through the bloodstream! &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://robotics.stackexchange.com/a/789/37&quot;&gt;rics&lt;/a&gt; did a good job of summarizing the difficulties in producing a completely autonomous nano robot. Something like a Mars rover, with more autonomy, but tiny. &lt;strong&gt;This is not the only type of robot.&lt;/strong&gt; While this is definitely beyond the capabilities of our current-day researchers / engineers, there is another thread in this domain that is worth mentioning: nano manipulators. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Traditionally, robots have been automated manipulators. In the case of robotic manipulators, most of the processing and localization challenges are offloaded, and the robot just carries out the task of delivering part A to location B.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/Sdnn7.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This closely matches the job description of a nano robot: deliver drug A to organ B, or take sample A, etc.  In this case, a very small magnetic manipulator can be inserted into the body and moved, turned, etc, by use of magnetic fields from &lt;em&gt;outside&lt;/em&gt; the body. So the robot ends up being a small piece of innocuous metal. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Y15pe.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Y15pe.png&quot; alt=&quot;A swimmer bot in the boodstream&quot;&gt;&lt;/a&gt;&lt;br&gt;&#xA;&lt;sub&gt;(source: &lt;a href=&quot;http://www.iris.ethz.ch/msrl/research/current/helical_swimmers/images/swimmer_robot.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;ethz.ch&lt;/a&gt;)&lt;/sub&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Think of it as the &quot;hand.&quot; The magnetic fields are the &quot;arms,&quot; an MRI is the &quot;eyes,&quot; and a computer somewhere is the &quot;brain.&quot;  Its not fully embedded, but it is technically a nano-scale robotic manipulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are interested in this (who wouldn't be?) Check out the following. There are plenty of awesome videos ahead:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The key guy in this field is Brad Nelson. He gave a keynote talk at&#xA;ICRA 2012, in Saint Paul, MN. It is available freely&#xA;&lt;a href=&quot;http://techtalks.tv/talks/robotics-in-the-small/55951/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. Have&#xA;a look. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;More information (including the above reference paper), can be found on his webpage,&#xA;&lt;a href=&quot;http://www.iris.ethz.ch/msrl/research/current/index.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.iris.ethz.ch/msrl/research/current/index.php&lt;/a&gt;  &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;One of &lt;em&gt;the coolest&lt;/em&gt; takeaways from the talk was his work on &quot;swimmer&quot; robots. More info (and videos!) here:&#xA;&lt;a href=&quot;http://www.iris.ethz.ch/msrl/research/current/helical_swimmers/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.iris.ethz.ch/msrl/research/current/helical_swimmers/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;There are two types of manipulators he is researching, but both are inserted, tracked using MRI, moved / manipulated using magnetic&#xA;fields, and then removed via a simple needle. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The two types are based on size. A larger manipulator is easier to move using magnets, but a smaller one can be more precise.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;My impression after the keynote talk was this technology is quickly approaching human trials. They have tested in cow eyes and other biological organs. I'm interested to see what they produce this year.&lt;/p&gt;&#xA;" OwnerUserId="163" LastEditorUserId="15160" LastEditDate="2019-02-21T11:05:22.217" LastActivityDate="2019-02-21T11:05:22.217" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="794" PostTypeId="2" ParentId="474" CreationDate="2013-01-13T22:17:02.603" Score="4" Body="&lt;ul&gt;&#xA;&lt;li&gt;Simplicity for hardware designers and easy usage for programmers &lt;/li&gt;&#xA;&lt;li&gt;Reliability&lt;/li&gt;&#xA;&lt;li&gt;Well known and supported in many systems&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Specially in robotics when we forced to use USB instead of RS232 (Our new PCs did not have RS232 ports). We faced many problems:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Any USB socket disconnection need so much effort to recover the system. Sometimes it leads to a bad system-fault and we had to restart PCs.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Any shock or hazard make it unplugged.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Too much programming time &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="748" LastActivityDate="2013-01-13T22:17:02.603" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="795" PostTypeId="1" AcceptedAnswerId="802" CreationDate="2013-01-14T14:40:31.087" Score="3" ViewCount="584" Body="&lt;p&gt;Microhard Systems currently sells several types of 900MHz modems, which are mostly used in robotics and SCADA applications.  One of their product lines, the 910 series (MHX910, n910, Spectra 910), is obsolete and no longer sold.  However, some older equipment is built with OEM versions of the 910 series soldered in place.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Microhard currently sells a 920 series (MHX920, n920, Spectra 920) that shares many of the specs with the 910 series, but cannot establish a radio link with a 910 series modem due to differences in encryption and hopping pattern.  Therefore, if you want to make new equipment communicate with equipment using the 910 series, your options are:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;De-solder the old 910 modem and replace it with the footprint-compatible 920 modem, or&lt;/li&gt;&#xA;&lt;li&gt;Reconfigure a 920 series modem to communicate with the 910 series modem.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Option 1 is undesirable, since I don't have access to the firmware on the older equipment in question.  Does anyone know how to accomplish option 2?&lt;/p&gt;&#xA;" OwnerUserId="736" LastEditorUserId="736" LastEditDate="2013-01-16T00:44:53.673" LastActivityDate="2013-01-16T14:27:55.273" Title="How can Microhard 920 series modems be made compatible with Microhard 910 series?" Tags="&lt;radio-control&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="796" PostTypeId="2" ParentId="788" CreationDate="2013-01-14T16:51:10.853" Score="7" Body="&lt;p&gt;The branch of science that most closely resembles &quot;nano bots&quot; is &lt;a href=&quot;http://en.wikipedia.org/wiki/Capsule_endoscopy&quot; rel=&quot;nofollow noreferrer&quot;&gt;Capsule Endoscopy&lt;/a&gt;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/S6htU.jpg&quot; alt=&quot;Camera Pill&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first generation of these were just &quot;edible&quot; video cameras with cameras inside, which passively recorded one's digestive tract.   The most recent round of development is focusing on making them smaller and more maneuverable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They are still not small enough to pass through blood vessels (at least, not safely).&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2013-09-06T16:35:36.543" LastActivityDate="2013-09-06T16:35:36.543" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="797" PostTypeId="1" CreationDate="2013-01-14T23:37:15.083" Score="1" ViewCount="92" Body="&lt;p&gt;I also asked this question on &lt;a href=&quot;http://answers.ros.org/question/52182/plans-to-use-vendor-id-to-identify-ethercat-devices/&quot; rel=&quot;nofollow&quot;&gt;ROS Answers&lt;/a&gt;, but it's not getting much interest there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Currently the EtherCAT package in ROS uses the slaves' Product IDs to identify the devices, and load the correct drivers. This works great when all of the devices are manufactured by a single vendor, but are there any plans to prevent Product ID collisions when multiple vendors make ROS compatible EtherCAT devices?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We manufacture our own EtherCAT devices, and are just using some large values for Product ID, just hoping that these don't collide with anyone else's. Ideally, ROS would concatenate the vendor and product IDs into a single 64-bit value, and use that to identify the correct driver.&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2013-01-15T09:30:29.677" Title="Plans to use Vendor ID to identify EtherCAT devices?" Tags="&lt;ros&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="798" PostTypeId="2" ParentId="797" CreationDate="2013-01-15T09:30:29.677" Score="2" Body="&lt;p&gt;That certainly is problematic. Given that ROS is free software, you could probably quite easily change the source code to use the &lt;code&gt;&amp;lt;vendor_id, product_code&amp;gt;&lt;/code&gt; pair as identifier and send a pull request.&lt;/p&gt;&#xA;" OwnerUserId="158" LastActivityDate="2013-01-15T09:30:29.677" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="799" PostTypeId="2" ParentId="764" CreationDate="2013-01-15T12:28:27.027" Score="4" Body="&lt;p&gt;As it says in the description of the file format, it is for graph based SLAM approaches. These work on minimizing the error of a pose constraint network. You can think of it this way: There are a number of reference frames (your vertices) and then you have knowledge on the transformation between these frames. These transformations are associated with an uncertainty. &lt;a href=&quot;http://ais.informatik.uni-freiburg.de/publications/papers/kuemmerle11icra.pdf&quot; rel=&quot;nofollow&quot;&gt;Pose graph optimization frameworks&lt;/a&gt; like e.g. &lt;a href=&quot;http://openslam.org/toro.html&quot; rel=&quot;nofollow&quot;&gt;TORO&lt;/a&gt;, &lt;a href=&quot;http://openslam.org/hog-man.html&quot; rel=&quot;nofollow&quot;&gt;HogMan&lt;/a&gt;, &lt;a href=&quot;http://openslam.org/g2o.html&quot; rel=&quot;nofollow&quot;&gt;G2O&lt;/a&gt; and so on will then give you the maximum likelihood of your vertex positions, given the constraints.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In practical robot terms, this usually means:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Each robot pose $p_k$ at time $k$ has its own reference frame and hence vertex&lt;/li&gt;&#xA;&lt;li&gt;Depending on you approach, you can also add landmarks as vertices. You don't have to however. &lt;/li&gt;&#xA;&lt;li&gt;Whenever you get new information on the relation between two poses, you add that to the constraint graph. E.g. your odometry will give you a transform between $p_k$ and $p_{k+1}$. &lt;/li&gt;&#xA;&lt;li&gt;If your approach works landmark based, you add transformations to your landmarks. If you only know the position to your landmark, you set a high uncertainty on the rotation information of your transformation. &lt;/li&gt;&#xA;&lt;li&gt;If your approach does not know about landmarks, e.g. you have large pointclouds that you match with ICP, you can add the ICP results to your constraint graph.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The pose constraints are usuall stored as sparse matrices of size $n \times n$ where $n$ is the number of vertices (again robot poses and landmarks) in your graph. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The file format itself provides initial guesses for the position of the vertices with the &lt;code&gt;VERTEX2&lt;/code&gt; (for 2D models) and &lt;code&gt;VERTEX3&lt;/code&gt; (for 3D models). You can't mix the two. &#xA;Constraints are added so that you specify the transform between the reference frames (vertices) given by &lt;code&gt;from_id&lt;/code&gt; and &lt;code&gt;to_id&lt;/code&gt;. The transform is given by either &lt;code&gt;EDGE2&lt;/code&gt; and &lt;code&gt;EDGE3&lt;/code&gt; as translation and rotation in euler angles, as well as the information matrix of the uncertainty. In this case the information matrix is the inverse of the covariance matrix for the transform vector $[x\, y \, z\, \text{roll}\, \text{pitch}\, \text{yaw}]$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depending on your framework, usually one of the vertices is grounded in a global reference frame. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Graph based pose graph optimizers are considered SLAM backends. How you generate the constraints e.g. from you range data is a front-end problem. There is a nice overview in these &lt;a href=&quot;http://ais.informatik.uni-freiburg.de/teaching/ws11/robotics2/pdfs/rob2-13-frontends.pdf&quot; rel=&quot;nofollow&quot;&gt;lecture notes&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="127" LastEditorUserId="127" LastEditDate="2013-02-18T11:37:13.067" LastActivityDate="2013-02-18T11:37:13.067" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="800" PostTypeId="2" ParentId="758" CreationDate="2013-01-16T10:14:58.307" Score="0" Body="&lt;p&gt;These robots appear creepy because they look like deformed humans and people with autism who find it difficult to read facial expressions and emotions may not perceive the disformities in the robot. They could also react the other way and be very frightened and creeped out by the robots. As someone with ADHD, I can tell you that they definitely creep me out. It's the ones like you have referenced that creep me the most, the futuristic robots from movies don't scare me so much.&lt;/p&gt;&#xA;" OwnerUserId="374" LastActivityDate="2013-01-16T10:14:58.307" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="801" PostTypeId="1" AcceptedAnswerId="803" CreationDate="2013-01-16T10:41:52.210" Score="3" ViewCount="553" Body="&lt;p&gt;I'm building a quadrupedal robot that will learn how to walk. From the &lt;a href=&quot;https://robotics.stackexchange.com/questions/568/is-it-possible-to-run-a-neural-network-on-a-microcontroller&quot;&gt;responses&lt;/a&gt; I got from asking if  its possible to run a NN on a micro controller I realised I needed to think of a clever system that wouldn't take 1000 years to be effective and would still be able to demonstrate onboard learning. I've designed a system but I'm not sure how effective it will be.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Firstly I hardcode 5-20 positions for the legs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I set up a (simple) neural network where each node is a different set of positions for the legs, which I will write.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The robot moves from one node to another and the weight of the joint is determined by how far forward the robot moves.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Eventually there will be strong connections between the best nodes/positions and the robot will have found a pattern of moves that are most successful in walking.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How effective would this be in learning to walk?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Note: instead of positions I could write short gaits and the process would work out which sets work best when combined.&lt;/p&gt;&#xA;" OwnerUserId="374" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2013-01-16T17:39:14.350" Title="Simple Neural Network with hardcoded positions for walk optimisation" Tags="&lt;microcontroller&gt;&lt;machine-learning&gt;&lt;walk&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="802" PostTypeId="2" ParentId="795" CreationDate="2013-01-16T14:27:55.273" Score="2" Body="&lt;p&gt;After some conversations with Microhard's technical support, the following procedure worked for me:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Email Microhard technical support.  Explain what you're trying to do, and ask for a version of 920 series firmware that will communicate with your 910 series modem.  This firmware is available for the n920 via email, but is not on their website.  There is a firmware file for the Spectra 920 on their downloads page; I have not tried it.&lt;/li&gt;&#xA;&lt;li&gt;Connect a serial cable to the data port of the modem. (Not the diagnostics port)&lt;/li&gt;&#xA;&lt;li&gt;You must have hardware with an &quot;S2&quot; switch accessible, or with access to the !bootprog pin on the OEM 920 module.  Hold the switch down or hold the !bootprog line low, and power cycle the modem.  Do not release until procedure is completed.&lt;/li&gt;&#xA;&lt;li&gt;Use the Microhard Firmware loader (available on the Microhard downloads page) to load the provided firmware.&lt;/li&gt;&#xA;&lt;li&gt;Release the S2 switch (or raise the !bootprog line) and power cycle the modem.  Your 920 series modem is now ready to communicate with 910 series modems.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="736" LastActivityDate="2013-01-16T14:27:55.273" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="803" PostTypeId="2" ParentId="801" CreationDate="2013-01-16T16:43:02.230" Score="3" Body="&lt;p&gt;This reminds me of &lt;a href=&quot;http://www.foddy.net/Athletics.html&quot; rel=&quot;nofollow&quot;&gt;QWOP&lt;/a&gt; (seriously).  You need to plan a sequence of button presses to move forward.  For every situation the runner finds himself in, we need to know what button to press, how long to hold it, etc. When you play that, you probably look a lot like this video I stumbled across (pun alert): &lt;a href=&quot;https://www.youtube.com/watch?v=JFJkpVWTQVM&quot; rel=&quot;nofollow&quot;&gt;NN training bi-pedal walkers&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you need to recognize is &lt;strong&gt;what configuration is my robot in&lt;/strong&gt; and you need to plan &lt;strong&gt;what leg should move to where&lt;/strong&gt;?  So you need a topology like this&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Leg encoder values → NN → Leg desired encoder values&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The difference is you need &lt;em&gt;actual&lt;/em&gt; input in the form of sensor values, and output in the form of actions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note, if you had other sensors (IMU would be helpful) it would be included in the inputs, and if you had force-controlled joints, those would be your outputs. &lt;/p&gt;&#xA;" OwnerUserId="163" LastActivityDate="2013-01-16T16:43:02.230" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="804" PostTypeId="2" ParentId="801" CreationDate="2013-01-16T17:39:14.350" Score="2" Body="&lt;p&gt;Really this is a question to be answered by experiments. Will it work? It seems like it could. Two things that will be important to look at are:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;em&gt;Training time&lt;/em&gt; - You are still using a neural network and they take time to train. Whether this formulation would reduce the number of rounds required for training is really to be seen. It will of course change with the number of connections in the net as your agent will need to test each multiple times.&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Training method&lt;/em&gt; - Based on your description it seems you are planning to use a &lt;a href=&quot;http://en.wikipedia.org/wiki/Recurrent_neural_network&quot; rel=&quot;nofollow&quot;&gt;Recurrent Neural Network&lt;/a&gt; (RNN) which, if memory serves, makes training more computationally intense.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;There is a bit of literature on this topic already. For example a quick google reveals a paper titled &lt;a href=&quot;http://www.sciencedirect.com/science/article/pii/S0925231201005045&quot; rel=&quot;nofollow&quot;&gt;A neural network model for quadruped gait generation and transitions&lt;/a&gt;. It may be worth looking to see what has already been tried. But then sometimes it is just fun to run the experiments.&lt;/p&gt;&#xA;" OwnerUserId="177" LastActivityDate="2013-01-16T17:39:14.350" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="805" PostTypeId="7" CreationDate="2013-01-17T00:48:57.617" Score="0" Body="&lt;ul&gt;&#xA;&lt;li&gt;a specific robotics design problem&lt;/li&gt;&#xA;&lt;li&gt;the theory and simulation of robotic systems&lt;/li&gt;&#xA;&lt;li&gt;a sensor for a robotic system&lt;/li&gt;&#xA;&lt;li&gt;the writing algorithms for robotic system&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="-1" LastEditorUserId="644" LastEditDate="2013-01-17T00:48:57.617" LastActivityDate="2013-01-17T00:48:57.617" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="806" PostTypeId="7" CreationDate="2013-01-17T00:49:51.250" Score="0" Body="&lt;ul&gt;&#xA;&lt;li&gt;shopping recommendations&lt;/li&gt;&#xA;&lt;li&gt;electronics theory&lt;/li&gt;&#xA;&lt;li&gt;programming&lt;/li&gt;&#xA;&lt;li&gt;sci-fi robotics&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="-1" LastEditorUserId="644" LastEditDate="2013-01-17T00:49:51.250" LastActivityDate="2013-01-17T00:49:51.250" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="807" PostTypeId="1" AcceptedAnswerId="808" CreationDate="2013-01-17T08:50:58.617" Score="13" ViewCount="904" Body="&lt;p&gt;We are currently designing a mobile robot + mounted arm with multiple controlled degrees of freedom and sensors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am considering an architecture in two parts:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;A set of realtime controllers (either Raspeberry Pis running an RTOS such as Xenomai or bare metal microcontrollers) to control the arm motors and encoders.  Let us call these machines RTx, with x=1,2,3… depending on the number of microcontrollers.  This control loop will run at 200Hz.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A powerful vanilla linux machine running ROS to compute SLAM, mocap, and execute high-level logic (decide the robot’s task and compute the motors' desired position and speed).  This control loop will run at 30Hz.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I know my framework needs to be scalable to account for more motors, more sensors, more PCs (eg. for external mocap). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My main problem is to decide how to have the different RTx communicate with PC1. I have looked at papers related to robots architecture (e.g. &lt;a href=&quot;http://global.kawada.jp/mechatronics/hrp2.html&quot;&gt;HRP2&lt;/a&gt;), most often they describe the high level control architecture but I have yet to find information on how to have the low level communicate with the high level and in a scalable way. Did I miss something?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to connect the fast RT machines ensuring the motor control with PC1, I have considered TCP/IP, CAN and UART:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;TCP/IP: not deterministic but easy to put in place. Is non determinism a real issue (as it will only be used at at slow speed 30Hz anyways)?&lt;/li&gt;&#xA;&lt;li&gt;CAN: slow, very reliable, targeted to cars ( have seen there are some exemples using CAN with robots but it looked exotic)&lt;/li&gt;&#xA;&lt;li&gt;UART: if I had only had one RT machine for motor control I would have considered UART but I guess this port does not scale well with many RTx&#xA;Is TCP/IP really a no go because of its non-deterministic characteristics? It is so easy to use…&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;At the moment no solution really seems obvious to me. And as I can find no serious robot example using a specific reliable and scalable solution, I do not feel confident to make a choice. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone have a clear view on this point or literature to point to?  Are there typical or mainstream communication solutions used on robots?&lt;/p&gt;&#xA;" OwnerUserId="763" LastEditorUserId="350" LastEditDate="2013-01-17T23:08:42.567" LastActivityDate="2014-01-20T23:05:30.883" Title="How can I control a fast (200Hz) realtime system with a slow (30Hz) system?" Tags="&lt;control&gt;&lt;design&gt;&lt;communication&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="808" PostTypeId="2" ParentId="807" CreationDate="2013-01-17T12:20:26.503" Score="8" Body="&lt;p&gt;I think you've taken a good first step; you've divided the problem into a mobile platform (which has uncertainty of position and must navigate) and the arm (which has a fair certainty of position in real time, through encoders).  &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I have looked at papers related to robots architecture [...] but I have yet to find information on how to have the low level communicate with the high level and in a scalable way. Did I miss something?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;From your description, it sounds like you're trying to tie each RTx controller directly to PC1, which is running ROS.  What you've missed is that ROS is &lt;em&gt;designed&lt;/em&gt; to handle a group of applications that may produce and consume data at different rates.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What your application needs is a &lt;strong&gt;communications bridge&lt;/strong&gt; &amp;mdash; a single interface between your 200Hz loop and your ROS environment.  In other words, instead of tying each RTx controller to PC1, tie all the RTx controllers together and connect &lt;em&gt;that&lt;/em&gt; to PC1.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, use an &lt;a href=&quot;http://www.robot-electronics.co.uk/acatalog/I2C_Tutorial.html&quot;&gt;I2C Bus&lt;/a&gt; to link the RTx systems together, and add another RTx controller to be the &quot;Arm Master&quot; (AM).  The AM's job would be to accept incoming commands in some PC1-friendly format and protocol, and convert those commands to I2C messages.  Then you'd write a ROS app to send commands to the AM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another way to do it with I2C would be to put an I2C controller directly on PC1 and write all the arm controlling logic in a ROS app.  This may seem like a more streamlined way to accomplish your goal, but it can make debugging more difficult as you are removing the modularity of the system &amp;mdash; you'll have to troubleshoot it as one big complex system instead of two easily testable components.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2013-01-17T12:20:26.503" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="809" PostTypeId="2" ParentId="777" CreationDate="2013-01-17T17:21:51.117" Score="0" Body="&lt;p&gt;Use a rotatory potentiometer. Interface it to an ADC pin of your micro-controller, and depending on the resolution, you can get anywhere between 256 to 65536 values, which you can then use to set &quot;stops&quot;.&lt;/p&gt;&#xA;" OwnerUserId="765" LastActivityDate="2013-01-17T17:21:51.117" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="810" PostTypeId="1" AcceptedAnswerId="811" CreationDate="2013-01-17T23:17:15.437" Score="5" ViewCount="276" Body="&lt;p&gt;I'm running out of digital ports, and have no sensors that fit the definition 'analog'. Would it be possible to run a &lt;a href=&quot;http://www.robotc.net/support/vex/WebHelpCortex/index.htm#page=functions_vex/sensors/VEX_2.0_Cortex_-_Sensors.htm&quot;&gt;touch sensor, a quadrature encoder, or an ultrasonic sensor on an analog port?&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm thinking not, but I didn't run across anything that said otherwise.&lt;/p&gt;&#xA;" OwnerUserId="685" LastActivityDate="2013-01-18T03:35:12.763" Title="Can ultrasonic and button sensors be run in a VEX analog port?" Tags="&lt;sensors&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="811" PostTypeId="2" ParentId="810" CreationDate="2013-01-18T03:35:12.763" Score="2" Body="&lt;p&gt;The underlying microcontroller in the VEX Cortex is some sort of STM32F1 or STM32F2. I'm not sure which model exactly (just that it's a ST-made Cortex M3), but they all do have digital I/O capabilities on the pins used for analog inputs. Given the bare microcontroller, you could do so.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the VEX Cortex is not the bare microcontroller. According to the &lt;a href=&quot;http://www.vexforum.com/wiki/index.php/VEX_Cortex_Microcontroller&quot; rel=&quot;nofollow&quot;&gt;documentation&lt;/a&gt;, the controller board has been designed to add a much higher input impedance to the analog inputs which would likely interfere with digital operation:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Input Impedance: Analog - The 8 analog inputs each consist of a 470K pull-up to +5V, a series resistance of 10K and a 20K pull-down resistance to the uP.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You can see the difference in the circuit connections on page 13 of the &lt;a href=&quot;http://content.vexrobotics.com/docs/VEXnet_Cortex_UserGuide_081811.pdf&quot; rel=&quot;nofollow&quot;&gt;User's Guide (PDF)&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="308" LastActivityDate="2013-01-18T03:35:12.763" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="812" PostTypeId="1" AcceptedAnswerId="813" CreationDate="2013-01-18T13:37:18.247" Score="6" ViewCount="275" Body="&lt;p&gt;I have a small motorized vehicle with gears as wheels running up and down a track made of gear racks. How can this robot know when it has run half the track? And what's the best method to keep it from running off its track at the end and then return to start.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The robot is carrying water, not exactly the same amount each time, so it will not weigh the same. Therefore it might not be the same amount of steps in the stepper-motor each time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here I have some ideas that might work, though I am a beginner, and don't know what's the best solution.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;GPS tracking it (overkill on such a small scale?)&lt;/li&gt;&#xA;&lt;li&gt;Some kind of distance measurer&lt;/li&gt;&#xA;&lt;li&gt;Have a knob it will hit at the middle of the track, telling program to delay for a given time&lt;/li&gt;&#xA;&lt;li&gt;Track amount of steps the motor has performed (won't be as accurate?)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="689" LastEditorUserId="158" LastEditDate="2013-01-18T14:11:55.900" LastActivityDate="2015-08-10T13:54:58.897" Title="How to find out how far a motor has taken a vehicle?" Tags="&lt;mobile-robot&gt;&lt;arduino&gt;&lt;sensors&gt;" AnswerCount="4" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="813" PostTypeId="2" ParentId="812" CreationDate="2013-01-18T14:58:32.263" Score="7" Body="&lt;p&gt;If you are running on a fixed track, by far the easiest method is to use a pair of &lt;em&gt;endstops&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typically these would be &lt;em&gt;mechanical&lt;/em&gt;, &lt;em&gt;magnetic&lt;/em&gt; or &lt;em&gt;optical&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Mechanical&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;A &lt;em&gt;mechanical endstop&lt;/em&gt; could be as simple as a physical barrier at the end of your track, much like a train track &lt;a href=&quot;http://en.wikipedia.org/wiki/Buffer_stop&quot; rel=&quot;nofollow noreferrer&quot;&gt;buffer stop&lt;/a&gt;. Your vehicle would bump up to buffer, detect that it wasn't moving and take that as a signal that it had reached the end of travel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are moving slowly, with low toque and the restraining force of the buffer is significantly greater than the motive force of the vehicle plus the force from dissipating the &lt;a href=&quot;http://en.wikipedia.org/wiki/Momentum&quot; rel=&quot;nofollow noreferrer&quot;&gt;momentum&lt;/a&gt; of the vehicle, then a simple mechanical &lt;em&gt;endstop&lt;/em&gt; might be sufficient.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to get a little more sophisticated, you could add a mechanical switch to your vehicle &lt;a href=&quot;http://en.wikipedia.org/wiki/Bumper_%28automobile%29&quot; rel=&quot;nofollow noreferrer&quot;&gt;bumpers&lt;/a&gt;, ideally on a spring such that it is closed before the main body of the vehicle hits the buffer. When the buffer stop is close, the control system would be told by the closing of the switch that and could apply the brakes.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Magnetic&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;A &lt;em&gt;magnetic endstop&lt;/em&gt; would be a magnet on the track with a &lt;a href=&quot;http://en.wikipedia.org/wiki/Reed_switch&quot; rel=&quot;nofollow noreferrer&quot;&gt;reed-switch&lt;/a&gt; attached to your control system. When the reed switch rolls over the magnet, the circuit is closed and the control system can stop the vehicle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This has the advantage over the mechanical switch that it is non contact, so is less likely to be damages if the vehicle becomes a run-away.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Optical&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;An &lt;em&gt;optical endstop&lt;/em&gt; would be a &lt;a href=&quot;http://www.micromo.com/why-stepper-motors-lose-steps.aspx&quot; rel=&quot;nofollow noreferrer&quot;&gt;slotted optical switch&lt;/a&gt; on the vehicle and a blade of metal near the end of travel on the track, which runs through optical switch, blocking the beam when the vehicle gets close to the end of travel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This has the advantage that rather than relying on a magnet that is in one spot on the track being detected, it can signal an end of travel condition for the whole distance from the end of required travel right up to any mechanical endstop.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Soft endstops&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Essentially, this is just keeping track of where you have commanded your stepper motor to move and applying limits on how far you allow the higher level software to move. If you are requesting motion which is well within the parameters of the motor you have specified for your vehicle (speed, torque and acceleration profile etc.), then it should not be &lt;a href=&quot;http://www.micromo.com/why-stepper-motors-lose-steps.aspx&quot; rel=&quot;nofollow noreferrer&quot;&gt;skipping steps&lt;/a&gt; and soft end-stops may well be sufficient.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you do this though, I would also recommend adding one of the other mechanisms as &lt;a href=&quot;http://idioms.thefreedictionary.com/belt+and+braces&quot; rel=&quot;nofollow noreferrer&quot;&gt;belt and braces&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Combinations&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Most industrial systems have multiple end of travel detection and over travel prevention systems, usually soft limits and either a &lt;a href=&quot;http://reprap.org/wiki/Mechanical_Endstop&quot; rel=&quot;nofollow noreferrer&quot;&gt;mechanical endstop&lt;/a&gt; plus &lt;a href=&quot;http://en.wikipedia.org/wiki/Limit_switch&quot; rel=&quot;nofollow noreferrer&quot;&gt;limit switches&lt;/a&gt; or soft limits, mechanical endstop plus &lt;a href=&quot;http://reprap.org/wiki/OptoEndstop_2.1&quot; rel=&quot;nofollow noreferrer&quot;&gt;opto endstop&lt;/a&gt;. All three systems have to fail in order for the system fail overall.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might also want to have a look at the answers to &lt;a href=&quot;https://electronics.stackexchange.com/q/41733/3774&quot;&gt;Why do I need an endstop sensor with stepper motor?&lt;/a&gt; over on &lt;a href=&quot;https://electronics.stackexchange.com/&quot;&gt;Electrical Engineering&lt;/a&gt; Stack exchange.&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="-1" LastEditDate="2017-04-13T12:33:08.317" LastActivityDate="2015-08-10T13:54:58.897" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="814" PostTypeId="2" ParentId="812" CreationDate="2013-01-18T15:28:59.377" Score="3" Body="&lt;p&gt;If you are running gears as wheels on gear tracks, I do not understand how weight could change the number of steps. How can they slip? If there is no slippage, then the amount of steps should always be sufficient, although as mark suggested, most real world solutions would also include a limiting touch switch in case of mechanical failure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since using number of steps involves some math, it may be just easier and as good to use only  limiting touch switches. It is common to put touch switches at any location such as the middle. In the case for a middle switch, some protrusion on the tracks would trigger the switch on the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.radioshack.com/product/index.jsp?productId=2049718&quot; rel=&quot;nofollow noreferrer&quot;&gt;typical switch&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/JgKH5.jpg&quot; alt=&quot;Touch Switch&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="274" LastActivityDate="2013-01-18T15:28:59.377" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="815" PostTypeId="1" AcceptedAnswerId="816" CreationDate="2013-01-18T19:08:37.780" Score="7" ViewCount="536" Body="&lt;p&gt;I'm working on a rather low budget project, and need some way to control four or more motors using one Arduino. I've looked at motor shields a little, but I have a shield on top of it already, It does have female input on the top though, so a motor shield may work. Any suggestions?&lt;/p&gt;&#xA;" OwnerUserId="498" LastActivityDate="2013-09-05T16:10:39.327" Title="Arduino Motor control" Tags="&lt;control&gt;&lt;arduino&gt;&lt;microcontroller&gt;&lt;motor&gt;&lt;power&gt;" AnswerCount="5" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="816" PostTypeId="2" ParentId="815" CreationDate="2013-01-18T19:21:09.853" Score="7" Body="&lt;p&gt;You'll have to determine yourself whether a motor controller shield &lt;a href=&quot;http://www.freetronics.com/pages/stacking-arduino-shields&quot;&gt;is compatible and can be stacked on your existing shield&lt;/a&gt;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In some cases, you can use Arduino's &lt;a href=&quot;http://arduino.cc/en/Reference/SPI&quot;&gt;SPI&lt;/a&gt;.  In other cases, you'll need to check whether the pins that your shield uses would conflict with the pins needed by a motor controller.  &lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2013-01-18T19:21:09.853" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="817" PostTypeId="2" ParentId="812" CreationDate="2013-01-18T19:24:04.113" Score="3" Body="&lt;p&gt;A stepper motor actually will move the same amount of steps per control signal regardless of weight, drawing more current as needed to turn the motor shaft the same amount. If there was wheel slip to account for, weight would be a factor there. However, given your gear rack track, wheel slip is negligible and can be ignored. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've built small line-follower robots in the past using 5V geared stepper motors running off AA batteries. Wheel slip was fairly small due to rubber O-rings mounted to the wheels. We took two identical prototypes and set them side by side and sent a move forward signal to both simultaneously. They moved in perfect lockstep over the course of a meter. We then placed a glass bottle of beer on one of the robots and repeated the experiment. Same result despite the weight difference.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The specifications for your stepper motor will list a &lt;b&gt;Step Angle&lt;/b&gt;, the number of degrees that the motor shaft turns for a single step (I'm assuming that you're not doing any microstepping). You then need to account for the gear ratio to figure out how far you actually move. This is a little trickier to calculate with a rack and pinion than a normal pair of spur gears. Gear ratio is normally determined by the diameter of the input and output gears, but your output gear (the rack) is technically of infinite diameter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you haven't already, set up your control code so that you can make your stepper motor turn a given number of steps. Suppose the step angle of your motor is 7.5 degrees. The number of steps required to turn 360 degrees is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;360&amp;deg; / 7.5&amp;deg; per step = 48 steps&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can verify your 360 degree turn code by by placing a small mark on the pinion gear. Now set your robot on the rack and measure how far it travels along the rack when you turn the motor 360 degrees (48 steps in this case). You can use this measurement to determine how far along the rack the robot moves per step. Suppose it travels 12 centimeters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;12 cm / 48 steps = &lt;b&gt;0.25 cm of linear motion per step&lt;/b&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Try the track measurement again with the maximum water load and verify that a 360 degree turn of the pinion gear still occurs. If not, you are trying to step too fast for the motor torque to keep up and it's missing steps. Increase the interval between steps until you get a full 360 degree turn of the pinion gear with the water weight.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can now encode movements to 0.25 cm resolution. If you know the length of the track and can guarantee your start position, you can get away with not having an endstop or limit switch. That being said, it's always a good idea to have them there anyways just in case.&lt;/p&gt;&#xA;" OwnerUserId="308" LastEditorUserId="308" LastEditDate="2013-01-22T03:49:18.343" LastActivityDate="2013-01-22T03:49:18.343" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="819" PostTypeId="1" AcceptedAnswerId="820" CreationDate="2013-01-21T06:25:29.593" Score="6" ViewCount="1989" Body="&lt;p&gt;We have an electric wheel chair, and are looking to add a rotary encoder to each wheel.  We don't want to hack the motor itself, so want to add the encoder without harming the motor-to-wheel connection.  We will be using an arduino to read the signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone have any experience adding rotary encoders to already assembled wheel assemblies?  &lt;/p&gt;&#xA;" OwnerUserId="779" LastActivityDate="2017-11-19T15:07:34.613" Title="Adding Rotary Encoders to an Electronic Wheel Chair" Tags="&lt;arduino&gt;&lt;microcontroller&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="820" PostTypeId="2" ParentId="819" CreationDate="2013-01-21T08:41:39.900" Score="6" Body="&lt;p&gt;An &lt;a href=&quot;https://www.google.com/search?q=optical%20encoder%20disk&amp;amp;hl=en&amp;amp;tbo=u&amp;amp;tbm=isch&amp;amp;source=univ&amp;amp;sa=X&amp;amp;ei=hvv8UKSBEMraigLkg4GQBA&amp;amp;ved=0CFkQsAQ&amp;amp;biw=1524&amp;amp;bih=1088&quot; rel=&quot;nofollow noreferrer&quot;&gt;optical encoder&lt;/a&gt; is fairly simple to add to an existing wheel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/GDZKa.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Essentially you mount a photosensor that can detect notches or patches on a disk as it rotates with the wheel. You could use through hole light detection as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The circuit design is fairly straight foward&#xA;&lt;img src=&quot;https://i.stack.imgur.com/TIfWj.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And your arduino program counts the number of pulses it receives. Knowing the number of ticks per revolution, and wheel size, you can get accurate odometry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another solution that may work for you is add on encoders for DC motors. Their original intent is to make a regular motor a Servo motors, but would work great for this task as well. The only real difference being that a servo motor uses the information in a closed loop to position the motor, as opposed to just keeping track of it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/iPUKQ.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And one other solution I thought of - if your wheel chair has spokes like a bicycle, then a magnet like &lt;a href=&quot;http://www.ebay.com/itm/Universal-Cat-Eye-Wheel-Spoke-Magnet-Speed-Sensor-CatEye-4-ANY-Bicycle-Computer-/150765504458&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; would be easy to attach, and a magnetic sensor, very similar to the above light detection circuit could be located on the chair/frame. That would probably be the least intrusive to implement. If you needed more than 1 per revolution accuracy, just add more magnets to more spokes, as long as they are distributed evenly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/Atj2x.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="274" LastEditorUserId="274" LastEditDate="2013-01-21T20:45:09.747" LastActivityDate="2013-01-21T20:45:09.747" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="821" PostTypeId="2" ParentId="757" CreationDate="2013-01-21T12:36:18.757" Score="2" Body="&lt;p&gt;One possible solution to your torque problem is to use &lt;a href=&quot;http://en.wikipedia.org/wiki/Mechanical_advantage&quot; rel=&quot;nofollow&quot;&gt;mechanical advantage&lt;/a&gt; to trade &lt;em&gt;speed&lt;/em&gt; for &lt;em&gt;torque&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you replace a 1:2 gear/drive belt combination with a 1:1 gear/drive belt combination then you will get twice the torque at half the speed. Swap the gears and you can use the same drive belt to get a 2:1 ratio instead and get even more torque for even less speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course you will have to re-tune your motors, the PID control parameters will be completely different with the new gearing.&lt;/p&gt;&#xA;" OwnerUserId="37" LastActivityDate="2013-01-21T12:36:18.757" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="822" PostTypeId="2" ParentId="697" CreationDate="2013-01-22T08:22:43.647" Score="1" Body="&lt;p&gt;Maybe not a full robotics simulator but we are using 3D CAD, Autodesk Inventor, quite a lot for simulations. Usually we make an interface to the CAD similar to what we want it to be for the hardware. That way we can use the CAD model as a virtual prototype to:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Catch design errors early. Collisions, not enough stroke etc.&lt;/li&gt;&#xA;&lt;li&gt;It has also been useful for finding compensations to errors such as alignment errors. Using the CAD we can model different errors one by one and test our compensations. It is convenient to be able to introduce large errors with known sign.&lt;/li&gt;&#xA;&lt;li&gt;The CAD also gives answers about things such moments of inertia.&lt;/li&gt;&#xA;&lt;li&gt;We also use the CAD model to generate the program for the equipment.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="786" LastEditorUserId="786" LastEditDate="2013-01-22T13:04:25.930" LastActivityDate="2013-01-22T13:04:25.930" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="823" PostTypeId="2" ParentId="436" CreationDate="2013-01-22T08:45:23.490" Score="0" Body="&lt;p&gt;For modeling the kinematics &lt;a href=&quot;http://en.wikipedia.org/wiki/Denavit%E2%80%93Hartenberg_parameters&quot; rel=&quot;nofollow&quot;&gt;&lt;code&gt;Denavit–Hartenberg parameters&lt;/code&gt;&lt;/a&gt; are commonly used.&#xA;the course Introduction to Robotics provided by Stanford University is available on &lt;a href=&quot;http://www.youtube.com/view_play_list?p=65CC0384A1798ADF&quot; rel=&quot;nofollow&quot;&gt;YouTube&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="786" LastActivityDate="2013-01-22T08:45:23.490" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="824" PostTypeId="2" ParentId="758" CreationDate="2013-01-22T14:53:15.660" Score="1" Body="&lt;p&gt;One of the primary facets of ADD/ADHD/Spectrum is awareness, that is, not missing small details. The phenomenon of the Uncanny Valley is probably more prevalent for these people. However, as also noted, many people sufficiently afflicted with ASD may not consciously recognize the signals they're getting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would advise making a conscious effort to stay on the non-human-cute side of the Uncanny Valley, because this is some of the most shaky ground.&lt;/p&gt;&#xA;" OwnerUserId="31" LastActivityDate="2013-01-22T14:53:15.660" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="825" PostTypeId="2" ParentId="790" CreationDate="2013-01-22T15:22:48.500" Score="5" Body="&lt;p&gt;In general, toy robots probably face fewer challenges, except in human safety. I'd imagine that they don't usually advance the knowledge base themselves.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;HOWEVER, I think it's beyond question that our crop of engineers and scientists will be larger and more competent if they're exposed early and often to technologies and sciences such as, in this example, robotics. The tinkering culture is known to facilitate and produce innovators more than who has memorized the most mathematical formulae or protein folding shortcuts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The FIRST Robotics Competition also doesn't &quot;move technology forwards&quot;, but I dare people to claim that it isn't important for our overall success of our technology sector. There's little technological advancement in playing with Lego, but the creativity and persistence in problem solving that gets reinforced by playing with Lego is absolutely essential.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So to answer your question: his statement is mostly true, in that things like what they're selling are sparks for the engine, but that particular company isn't directly pushing technology forward.&lt;/p&gt;&#xA;" OwnerUserId="31" LastActivityDate="2013-01-22T15:22:48.500" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="826" PostTypeId="1" CreationDate="2013-01-22T16:20:51.657" Score="11" ViewCount="968" Body="&lt;p&gt;I'm working with a lifesize (~130cm) humanoid robot (Hubo+) and looking for a way to easily program new motions and gestures into him. Obviously, I could write my own tool, but I am looking for a solution that can leverage existing tools or standards for robot motion. My first thought was trying to use animation software like Blender or Maya, and writing a script to extract the joint angles at keyframes. However, few robotics researchers are probably proficient with Maya. (I know I'm not!)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there already some kind of 3D posing tool for robotics that is a standard? The only things I have seen so far that comes close is the &lt;a href=&quot;http://support.robotis.com/en/software/roboplus/roboplus_motion/motionedit/poseedit/roboplus_motion_poseutility.htm&quot; rel=&quot;noreferrer&quot;&gt;Pose Utility&lt;/a&gt; in RoboPlus and &lt;a href=&quot;http://web.eecs.utk.edu/~parker/Courses/CS494-529-fall11/NAOs/creatingmovement.html&quot; rel=&quot;noreferrer&quot;&gt;Choregraphe&lt;/a&gt; for the Nao, but both programs seem limited to particular robots and don't appear to be extendable to Hubo.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my questions are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;em&gt;Are there standard file formats for robot motion?&lt;/em&gt; Not 2D wheeled robot motion. Arm and leg motion! Something equivalent to the .bvh file format used in motion capture.&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Do you know of any WYSIWYGish tool for creating robot motion using keyframes and inverse kinematics?&lt;/em&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="788" LastEditorUserId="350" LastEditDate="2013-03-24T17:21:57.317" LastActivityDate="2013-04-27T21:11:22.223" Title="Can I use digital animation software to define the movements of humanoid robots?" Tags="&lt;software&gt;&lt;motion&gt;" AnswerCount="2" CommentCount="7" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="827" PostTypeId="2" ParentId="697" CreationDate="2013-01-23T02:41:19.260" Score="1" Body="&lt;p&gt;You might want to check out &quot;&lt;strong&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/MindRover&quot; rel=&quot;nofollow&quot;&gt;MindRover&lt;/a&gt;&lt;/strong&gt;&quot;.  It's old and harder to find now since the original website is defunct, but can still be found on &lt;a href=&quot;http://www.ebay.com/mindrover&quot; rel=&quot;nofollow&quot;&gt;Ebay&lt;/a&gt; or &lt;a href=&quot;http://www.amazon.com/s/url=search-alias=aps&amp;amp;field-keywords=mindrover&quot; rel=&quot;nofollow&quot;&gt;Amazon&lt;/a&gt;.  Although game/mission oriented, it involved picking from a palette of robot components, putting them on a chassis, and then wiring them together.  It was really well done for a game and could be used to explore simple to semi-advanced concepts. Some screenshots here: &lt;a href=&quot;http://images.google.com/images?q=mindrover&quot; rel=&quot;nofollow&quot;&gt;http://images.google.com/images?q=mindrover&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are looking for something a bit more serious with real world capabilities, you might want to check out &lt;strong&gt;&lt;a href=&quot;http://www.dsprobotics.com/academic.html&quot; rel=&quot;nofollow&quot;&gt;FlowStone for Education&lt;/a&gt;&lt;/strong&gt;. I have not used it, but I believe it is a visual programming environment ideally suited for robotics type work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Last, although not software or simulation, I recently came across a &lt;a href=&quot;http://www.reddit.com/r/compsci/comments/16ov26/invited_to_talk_to_a_3rd_grade/c7xz4pg&quot; rel=&quot;nofollow&quot;&gt;comment on reddit by phblj&lt;/a&gt; regarding a &lt;strong&gt;technique for introducing programming&lt;/strong&gt;, and I thought it was really good (and especially adaptable to robotics programming). Quote:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Great example of computers I did with kids: One kid got to be the&#xA;  &quot;program&quot; and gave instructions on how to make a peanut-butter and&#xA;  jelly sandwich, but they couldn't watch my actions. I was the&#xA;  computer, and followed the instructions exactly. Hilarity resulted.&#xA;  (Not taking lid off peanut bar, not getting bread out of box I had it&#xA;  in). After a minute, another kid came up and tried. They got a little&#xA;  further, but still floundered. &quot;Put the peanut butter on the bread&quot;&#xA;  resulted in the jar sitting on the loaf, etc. It took several kids,&#xA;  but eventually we got it. If you've got an assistant, have them write&#xA;  the instructions as they're said, creating the &quot;program.&quot;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;You can get into explanations, then, but the thing that really stuck&#xA;  was that the kids were each &quot;smarter than a computer.&quot; But that&#xA;  computers were really, really fast at following instructions. So they&#xA;  needed to use their smarts and the computers speed, and...&#xA;  programming!&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="167" LastActivityDate="2013-01-23T02:41:19.260" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="829" PostTypeId="1" CreationDate="2013-01-24T13:31:01.520" Score="11" ViewCount="542" Body="&lt;p&gt;I'm currently designing a robotic arm with 6-DOF, and my goal is to be able to give setpoints for 3d position, velocity and orientation ($x,y,z,\dot{x},\dot{y},\dot{z},\theta,\alpha,\gamma$).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I only had feedback-control for &lt;a href=&quot;http://en.wikipedia.org/wiki/Single-input_single-output_system&quot;&gt;SISO&lt;/a&gt; systems so far in College, so, taking the learning curve of multivariable control in consideration, should I approach this problem trying to model the system as a &lt;a href=&quot;http://en.wikipedia.org/wiki/MIMO&quot;&gt;MIMO&lt;/a&gt; or multiple SISOs?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If possible please mention possible disadvantages and advantages in each strategy.&lt;/p&gt;&#xA;" OwnerUserId="798" LastEditorUserId="350" LastEditDate="2013-01-24T16:15:13.513" LastActivityDate="2013-02-04T02:05:40.970" Title="Which is model is best for feedback control of robotic manipulators: MIMO or parallel SISO?" Tags="&lt;control&gt;&lt;manipulator&gt;&lt;robotic-arm&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="830" PostTypeId="2" ParentId="829" CreationDate="2013-01-24T15:38:51.320" Score="4" Body="&lt;p&gt;Welcome to Robotics.SE! This is not exactly my area of expertise, but let me give you a few pointers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A very common approach for controlling manipulators is to first design good joint velocity controllers, in the &quot;multiple SISO&quot; approach you mention. You would then use inverse kinematics to determine at each point in time what the joint velocities should be ideally to reach your desired end-effector pose.  Assuming your joint velocity control loop dynamics are fast enough, you should be able to achieve those velocities. The kinematic model of manipulators is usually obtained in terms of Denavit–Hartenberg parameters. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Considering that it is frequently done for robots and probably is enough for your purposes, I suggest you take that approach. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a non-linear control class I took we saw a MIMO model for robot manipulators. I am not 100% sure about this, but I think you might want to use this if you are interested in modeling not only kinematics but also dynamics. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main difference is that in this scenario the joint positions and velocities all affect the inertia matrix, Coriolis and centrifugal forces and damping in a non-linear and usually not separable fashion. So you would not only have to get used to MIMO control, but would have to look into non-linear control as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I said, it's not my area of expertise so if someone thinks I said any gibberish I would be gladly corrected.&lt;/p&gt;&#xA;" OwnerUserId="95" LastActivityDate="2013-01-24T15:38:51.320" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="832" PostTypeId="1" AcceptedAnswerId="837" CreationDate="2013-01-25T13:51:19.353" Score="2" ViewCount="381" Body="&lt;p&gt;I have been trying to write code to connect a &lt;a href=&quot;http://www.hitechnic.com/cgi-bin/commerce.cgi?preadd=action&amp;amp;key=SPR2010&quot; rel=&quot;nofollow&quot;&gt;HiTechnic prototype board&lt;/a&gt; to my lego brick. Although I am using MSRDS studio, that isn't the issue; reading and writing to the serial port that the device is connected to works fine. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where I am lacking is that I don't understand the data is that is being sent and received. It goes out and comes back in the form of a byte array. For example:&#xA;[128]&#xA;[15]&#xA;[0]&#xA;[2]&#xA;[16]&#xA;[2]&#xA;[8]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this byte array converted from hex? What is this response telling me? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously I am a total newbie at this, I can program but I don't really understand electronics and I am trying to make that connection between what I have read about how an I2C controller works and what is happening when I send and receive data over a serial port. &lt;/p&gt;&#xA;" OwnerUserId="803" LastEditorUserId="350" LastEditDate="2013-01-25T16:15:57.647" LastActivityDate="2013-01-28T02:03:19.877" Title="How do I interpret this data, received by the I2C controller on an NXT 2 brick?" Tags="&lt;nxt&gt;&lt;i2c&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="833" PostTypeId="2" ParentId="815" CreationDate="2013-01-25T15:21:29.047" Score="0" Body="&lt;p&gt;I've had luck using &lt;a href=&quot;https://www.sparkfun.com/products/9479&quot; rel=&quot;nofollow&quot;&gt;these&lt;/a&gt; motor driver units.  They can be speed-controlled with the PWM outputs, and motor direction can be provided with digital inputs.&lt;/p&gt;&#xA;" OwnerUserId="736" LastActivityDate="2013-01-25T15:21:29.047" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="834" PostTypeId="2" ParentId="697" CreationDate="2013-01-25T17:50:21.990" Score="2" Body="&lt;p&gt;&lt;a href=&quot;http://www.coppeliarobotics.com/&quot; rel=&quot;nofollow&quot;&gt;V-Rep&lt;/a&gt; (Virtual Robot Experimentation Platform) seems to be quite broad in the kinds of simulations that it can do. It is free for educational purposes and comes with a wide range of tools. You can take a look at this &lt;a href=&quot;http://www.youtube.com/watch?v=bwGYUayglHY&quot; rel=&quot;nofollow&quot;&gt;YouTube video&lt;/a&gt; for a demo.&lt;/p&gt;&#xA;" OwnerUserId="158" LastActivityDate="2013-01-25T17:50:21.990" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="835" PostTypeId="1" CreationDate="2013-01-26T01:50:21.100" Score="2" ViewCount="120" Body="&lt;p&gt;I want to injection-mold several thousand of a part that fits in a 6&quot; x 6&quot; x 2&quot; bed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to be able to use only tooling that I can make myself, so I can rapidly iterate on the tooling as production problems are discovered.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that typical injection-mold &quot;hard tooling&quot; is created using &lt;a href=&quot;http://en.wikipedia.org/wiki/Electrical_discharge_machining&quot; rel=&quot;nofollow&quot;&gt;electrical discharge machining&lt;/a&gt;, which requires first CNCing a carbon positive and then using that as an electrode to spark-burn out a negative mold from hard steel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I do not have the equipment for EDM. Instead, I would prefer to directly CNC the negative mold. I know that a soft enough steel to be CNCed will not last very long as an injection mold, but like I said, my run size is tiny, and I am ok with making a new mold every 500 units or so if necessary.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am open to buying an endmill that is diamond-tipped, to work with harder steel, but then the limitation will probably be how much torque the CNC can produce on the endmill.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What are some recommendations or links to helpful resources? In particular, what is a good CNC with enough torque, and what blend of steel should I use? Thanks!&lt;/p&gt;&#xA;" OwnerUserId="106" LastEditorUserId="106" LastEditDate="2013-01-26T02:22:33.220" LastActivityDate="2013-01-26T02:22:33.220" Title="CNCing an injection mold" Tags="&lt;cnc&gt;" AnswerCount="1" CommentCount="12" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="836" PostTypeId="2" ParentId="835" CreationDate="2013-01-26T02:18:58.500" Score="1" Body="&lt;p&gt;Answer from my MechE friend Sam who doesn't have an account:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;First, I don't think you're going to have trouble with any CNC not&#xA;  having enough torque&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Second I don't think you'll need diamond tipped. Tungsten carbide max.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;I would look into using aluminum I believe it is viable for some&#xA;  molding.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;And mild steel should definitely hold up. Easier to machine as well.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="106" LastActivityDate="2013-01-26T02:18:58.500" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="837" PostTypeId="2" ParentId="832" CreationDate="2013-01-26T03:34:21.520" Score="3" Body="&lt;p&gt;Your question is not clear. &quot;Is this byte array converted from hex?&quot;  If you know what the values are, you should know how you got them. 128 is not a hex number, it is the same as a hex 80, also written as 0x80.  It indicates a 'Direct command, reply not required' as a serial to NXT stream. 15 = 0x0F = LSWRITE.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It does not make sense to decode any more, as it is your program but you have not told us what you are trying to do and how you are trying to do it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just to be clear, there is NO connection between the serial port (usb or bluetooth) and the i2c bus. But the LSWRITE/LSREAD would be the appropriate direct commands (I was wrong earlier, had to look at it some more). I would suggest starting on just the NXT using NXC or LeJOS or RobotC and getting an understanding of the I2C protocol before trying to extend that to a remote PC connection with MRDS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Start &lt;a href=&quot;http://mindstorms.lego.com/en-us/support/files/default.aspx&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; And download all the PDFs. They describe the command that can be sent over the PC to NXT serial link.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I2C is another step. Start with the &lt;a href=&quot;http://en.wikipedia.org/wiki/I%C2%B2C&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wiki&lt;/a&gt;. But you will find that LEGO vendors often do not completely implement the protocol, or they implement it incorrectly. You pretty much need to analyse each device and adjust how you treat it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/V5Wm6.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would suggest something like the &lt;a href=&quot;http://www.saleae.com/logic/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Saleae logic&lt;/a&gt; to analyse what is actually happening.&lt;/p&gt;&#xA;" OwnerUserId="274" LastEditorUserId="37" LastEditDate="2013-01-28T02:03:19.877" LastActivityDate="2013-01-28T02:03:19.877" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="838" PostTypeId="1" CreationDate="2013-01-26T08:58:44.237" Score="0" ViewCount="5314" Body="&lt;p&gt;I am working on building my own quadcopter from scratch. I noticed that many solutions available online use arduino, but I am not a fan of arduino. So my questions are: what microcontrollers should be used, what are the crucial features of those microcontrollers etc. I would like to build it from total scratch. I was thinking about PIC microcontrollers.&lt;/p&gt;&#xA;&lt;p&gt;Also what should be used for ESC, since I would build that from scratch too.&lt;/p&gt;&#xA;&lt;p&gt;Summing it all up:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;4 ESCs&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Gyro,acceloremeter,gps&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;transceiver&lt;/p&gt;&#xA;&lt;p&gt;which is about 8 slaves and one master microcontroller.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="807" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2013-01-26T22:04:37.387" Title="What microcontroller should be used for QuadCopter flight control and ESC?" Tags="&lt;microcontroller&gt;&lt;quadcopter&gt;&lt;esc&gt;" AnswerCount="1" CommentCount="5" ClosedDate="2013-01-27T08:12:10.070" ContentLicense="CC BY-SA 3.0" />
  <row Id="839" PostTypeId="1" AcceptedAnswerId="842" CreationDate="2013-01-26T17:51:53.783" Score="10" ViewCount="1099" Body="&lt;p&gt;For avoiding obstacles during 2D robot navigation what is the best position/angle to place the sonar sensors? How many should there be?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to know if there is some theory or examples for the problem of placing. I realize that it depends on the way that the robot moves and its geometry, but I am searching for general answers.&lt;/p&gt;&#xA;" OwnerUserId="808" LastEditorUserId="350" LastEditDate="2013-01-26T21:37:45.010" LastActivityDate="2013-01-28T14:54:57.853" Title="Sonar for obstacle avoidance: how many sensors and where to place them?" Tags="&lt;mobile-robot&gt;&lt;sensors&gt;&lt;navigation&gt;&lt;acoustic-rangefinder&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="840" PostTypeId="1" CreationDate="2013-01-26T22:03:10.763" Score="7" ViewCount="308" Body="&lt;p&gt;I am reading research papers about robotics and many of them follow the same pattern:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;some construction is established&lt;/li&gt;&#xA;&lt;li&gt;kinematical formulas are read from the mechanical structure&lt;/li&gt;&#xA;&lt;li&gt;the state space is analysed (e.g. how far the robot can reach, what the maximum speed can be, what is left underspecified and how to handle such mathematically incorrect systems and so on)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Is there some tool or software product that can receive (as input) the mechanical structure and then output the kinematical formulas?  Preferably, it would provide some kind of plots, analysis, suggestions for optimal design parameters (e.g. length, angles of the sturcture, optimum parameters of motors and so on).  Does this exist?&lt;/p&gt;&#xA;" OwnerUserId="809" LastEditorUserId="350" LastEditDate="2013-01-26T22:11:03.240" LastActivityDate="2021-03-14T00:28:51.657" Title="Is there a tool for building and analysing robots (kinematics, control) visually?" Tags="&lt;software&gt;&lt;design&gt;&lt;inverse-kinematics&gt;&lt;research&gt;&lt;kinematics&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="841" PostTypeId="2" ParentId="838" CreationDate="2013-01-26T22:04:37.387" Score="4" Body="&lt;p&gt;You're asking about microcontrollers, but I get the sense that you're asking it for the wrong reasons.  Since you don't list a technical reason for being &quot;not a fan of arduino&quot;, I get the sense that you're trying to make a quadcopter that is different in every way from existing solution.  This decision sounds at best arbitrary and at worst misguided.  Why doesn't arduino fit your needs?  What are your needs?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If many quadcopter designs are using arduino, that's a good indication that arduino is a useful element of getting quadcopters to work.  There may be a better microcontroller to use, but how will you know what to look for until you experience firsthand a shortcoming in the arduino platform?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your desire is to make a quadcopter from scratch, the best way to approach it is &lt;strong&gt;not&lt;/strong&gt; to conceive the design from first principles.  Take an existing design, study it, and improve it once you understand how it works.  It will take a lot of prototypes, trial, and especially error.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2013-01-26T22:04:37.387" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="842" PostTypeId="2" ParentId="839" CreationDate="2013-01-26T23:32:30.733" Score="9" Body="&lt;p&gt;Generally the main factor in positioning sensors is the actual &lt;a href=&quot;http://www.maxbotix.com/articles/008.htm&quot;&gt;beam width&lt;/a&gt; of the sensors themselves. It's usually the case that the longer range the sensor is, the narrower the beam width.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So firstly you need to work out the range you are aiming to sense at and pick some sensors that work at that range.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then you've got to decide on how wide an angle span you want to sense distance at. For instance, you may decide to cover everything in-front and to the sides of a robot (a 180 degree range, 90 degrees to either side of straight-ahead).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You then divide the angle span by the beam width of your chosen sensor to get the number of sensors you need.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using the above example, if you have sensors with a 90 degree beam width, you'd only need two of them, each at 45 degrees either side of straight-ahead. If you had longer-range sensors with, say, a 20 degree beam width, you'd need 9 of them to cover the same area.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously the beam width is not an exact measurement so its probably safer to have some overlap of the beams. Finally, the sensors should be installed symmetrically between the left and right sides of the robot.&lt;/p&gt;&#xA;" OwnerUserId="435" LastActivityDate="2013-01-26T23:32:30.733" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="843" PostTypeId="2" ParentId="839" CreationDate="2013-01-27T03:45:56.697" Score="8" Body="&lt;p&gt;To expand on &lt;a href=&quot;https://robotics.stackexchange.com/a/842/37&quot;&gt;thisismyrobot's answer&lt;/a&gt;, beam width is indeed important.  However, there are a number of other factors, such as the reflectivity of the environment (acoustic &quot;brightness&quot;), transmission frequency, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although it is from 1988, &lt;a href=&quot;http://www-personal.umich.edu/~ykoren/uploads/Obstacle_avoidance_w_ultrasonic_sensors_IEEE.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Obstacle Avoidance with Ultrasonic Sensors&lt;/a&gt; covers the challenges well - the physics of echo-ranging appear to have changed little over the years :) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://www.generationrobots.com/ultrasonic-sonar-sensors-for-robots,us,8,19.cfm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ultrasonic sonar sensors&lt;/a&gt; article on &lt;a href=&quot;http://www.generationrobots.com/boutique/index.cfm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Generation Robots&lt;/a&gt; introduces some of the more interesting issues in ultrasonic ranging: beam shapes and lobes (see the 50kHz figure).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From there, you should visit these more detailed articles on beam characteristics and sensor selection:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.sensorsmag.com/sensors/acoustic-ultrasound/choosing-ultrasonic-sensor-proximity-or-distance-measurement-838&quot; rel=&quot;nofollow noreferrer&quot;&gt;Choosing an Ultrasonic Sensor for Proximity or             Distance Measurement Part 2: Optimizing Sensor Selection&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.ndt-ed.org/EducationResources/CommunityCollege/Ultrasonics/EquipmentTrans/beamspread.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Transducer Beam Spread&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://airmartechnology.com/uploads/AirPDF/Intro_Overview.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Overview for Applying Ultrasonic Technology&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;cad=rja&amp;amp;sqi=2&amp;amp;ved=0CDIQFjAA&amp;amp;url=http://www.olympus-ims.com/.downloads/download/?file=285213495=en_US/&amp;amp;ei=Y6IEUZntGMWl2AX3loCgCQ&amp;amp;usg=AFQjCNE6CyPgNs60UjeUishZz5c8AbL0mA&amp;amp;sig2=APv39o2XxBbL181TI08rqw&amp;amp;bvm=bv.41524429,d.b2I&quot; rel=&quot;nofollow noreferrer&quot;&gt;Important Characteristics of Sound Fields of Ultrasonic Transducers&lt;/a&gt; [pdf]&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="532" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2013-01-28T14:54:57.853" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="844" PostTypeId="2" ParentId="840" CreationDate="2013-01-28T14:02:08.153" Score="3" Body="&lt;p&gt;&lt;a href=&quot;http://www.energid.com/actin-simulation-advantages.htm&quot; rel=&quot;nofollow&quot;&gt;The Actin toolkit&lt;/a&gt; is the only one I know of that sounds like what you want. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It integrates with SolidWorks to provide the kind of analysis you are talking about. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other people may know of other similar tools though.&lt;/p&gt;&#xA;" OwnerUserId="479" LastActivityDate="2013-01-28T14:02:08.153" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="845" PostTypeId="1" CreationDate="2013-01-28T15:19:54.600" Score="5" ViewCount="169" Body="&lt;p&gt;Using a depth sensing camera like Kinect, I would like to retrieve the position of an predetermined object (e.g. a cup, fork etc so that I would ultimately be able to grab the object). What would be a way to achieve this?&lt;/p&gt;&#xA;" OwnerUserId="721" LastEditorUserId="721" LastEditDate="2013-01-29T00:47:07.740" LastActivityDate="2013-02-17T07:58:15.883" Title="How to Identify Objects in Space" Tags="&lt;computer-vision&gt;&lt;algorithm&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="847" PostTypeId="2" ParentId="845" CreationDate="2013-01-29T08:11:07.520" Score="2" Body="&lt;p&gt;If you want to recognise a predetermined object (so one that you have seen before) in a 3d scene. It seems this would work similar to the 2d case: using features. Only in this case using &lt;a href=&quot;http://pointclouds.org/documentation/tutorials/how_features_work.php#how-3d-features-work&quot; rel=&quot;nofollow&quot;&gt;3d feature&lt;/a&gt; extractors/descriptors. You provide your model (so the object that you have seen before), and find salient features in the model. In your new scene you also perform feature extraction and then compare the features with your model. If they match well enough, you have found your object. Have a look at the &lt;a href=&quot;http://pointclouds.org/documentation/tutorials/correspondence_grouping.php#correspondence-grouping&quot; rel=&quot;nofollow&quot;&gt;pcl tutorials&lt;/a&gt; on the subject.&lt;/p&gt;&#xA;" OwnerUserId="127" LastActivityDate="2013-01-29T08:11:07.520" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="848" PostTypeId="1" AcceptedAnswerId="849" CreationDate="2013-01-29T14:06:09.987" Score="0" ViewCount="348" Body="&lt;p&gt;I am learning about I2C on the Arduino. I was looking at a sample program to scan for I2C devices and saw this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;// This sketch tests the standard 7-bit addresses&#xA;// from 0 to 127. Devices with higher bit address&#xA;// might not be seen properly.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;With the following code. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    for(address = 0; address &amp;lt;= 127; address++ ) &#xA;      {&#xA;        // The i2c_scanner uses the return value of&#xA;        // the Write.endTransmisstion to see if&#xA;        // a device did acknowledge to the address.&#xA;        Wire.beginTransmission(address);&#xA;        error = Wire.endTransmission();&#xA;&#xA;        if (error == 0)&#xA;        {&#xA;          Serial.print(&quot;I2C device found at address 0x&quot;);&#xA;          if (address&amp;lt;16) &#xA;            Serial.print(&quot;0&quot;);&#xA;          Serial.print(address,HEX);&#xA;          Serial.println(&quot; !&quot;);&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;As far as I understand it, a bit is just 1.  So, why how do 7 bits loop from 0 - 127? &lt;/p&gt;&#xA;" OwnerUserId="803" LastEditorUserId="350" LastEditDate="2013-01-29T14:50:42.363" LastActivityDate="2013-02-26T15:27:58.857" Title="Why must I loop 127 times for a &quot;7-bit&quot; address in this example?" Tags="&lt;arduino&gt;&lt;i2c&gt;" AnswerCount="4" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="849" PostTypeId="2" ParentId="848" CreationDate="2013-01-29T14:15:50.473" Score="9" Body="&lt;p&gt;If I understood your question correctly, you have a problem understanding binary numbers, right?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Think of a decimal digit. A digit is only either of 0, 1, 2, 3, 4, 5, 6, 7, 8 or 9, right? But a 7-digit number can be between 0000000 and 9999999. I presume you do understand this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now a decimal number, for example 2569 is actually a short form of writing like this (again in base 10 (i.e. decimal)):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;9 * 10^0   +   6 * 10^1   +   5 * 10^2   +   2 * 10^3&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If you have a number in another base, for example 1423 in base 5, then that is equivalent to writing the following (in base 10):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;3 * 5^0   +   2 * 5^1   +   4 * 5^2   +   1 * 5^3&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Which is basically the same, except all the &lt;code&gt;10&lt;/code&gt;s are changed for &lt;code&gt;5&lt;/code&gt;. That is, in the expanded form, each digit is multiplied by &lt;code&gt;b^p&lt;/code&gt; where &lt;code&gt;b&lt;/code&gt; is the base and &lt;code&gt;p&lt;/code&gt; is its position in the number.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now you know that in base 10, you have digits from 0 to 9. Similarly, in base 5, you have digits from 0 to 4. In base 2, you have digits from 0 to 1, which in other words is just 0 and 1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if you have a binary number like 1101, its expanded form is (in base 10):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;1 * 2^0   +   0 * 2^1   +   1 * 2^2   +   1 * 2^3   = 13&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If you have a 7 digit number in binary, which we normally call a 7-bit number, you can represent all numbers from 0000000 to 1111111. The first number corresponds to 0 and the second one corresponds to:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;1*2^0 + 1*2^1 + 1*2^2 + 1*2^3 + 1*2^4 + 1*2^5 + 1*2^6&#xA;= 1 + 2 + 4 + 8 + 16 + 32 + 64&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;or simply 127.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;P.S. The following loop:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;for (address = 0; address &amp;lt;= 127; address++)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;loops 128 times! ;)&lt;/p&gt;&#xA;" OwnerUserId="158" LastEditorUserId="158" LastEditDate="2013-02-26T15:27:58.857" LastActivityDate="2013-02-26T15:27:58.857" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="850" PostTypeId="2" ParentId="848" CreationDate="2013-01-29T14:55:20.693" Score="3" Body="&lt;p&gt;&quot;7-bit&quot; is like saying &quot;7-digit&quot;, but implies base two instead of base ten.  So, a 7-bit number can represent $2^7=128$ values in the same way that a &quot;conventional&quot; 7-digit number can represent $10^7=10000000$ values.  &lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2013-01-29T14:55:20.693" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="851" PostTypeId="1" CreationDate="2013-01-29T16:30:58.907" Score="15" ViewCount="2041" Body="&lt;p&gt;I'm studying various optimal control methods (and implements them in Matlab), and as test case I choose (for now) a simple pendulum (fixed to the ground), which I want to control to the upper position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I managed to control it using &quot;simple&quot; feedback method (swing-up based on energy control + LQR stabilization for the upper position), and the state trajectory is show in figure (I forgot the axis description: x is theta, y is theta dot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/rZAcD.png&quot; alt=&quot;Swing-up + LQR control state trajectory&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I want to try a &quot;full&quot; optimal control method, starting with an iterative LQR method (which I found implemented here &lt;a href=&quot;http://homes.cs.washington.edu/~todorov/software/ilqg_det.m&quot; rel=&quot;noreferrer&quot;&gt;http://homes.cs.washington.edu/~todorov/software/ilqg_det.m&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The method requires one dynamic function and one cost function (&lt;code&gt;x = [theta; theta_dot], u&lt;/code&gt; is the motor torque (one motor only)):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;function [xdot, xdot_x, xdot_u] = ilqr_fnDyn(x, u)&#xA;    xdot = [x(2);&#xA;        -g/l * sin(x(1)) - d/(m*l^2)* x(2) + 1/(m*l^2) * u];&#xA;    if nargout &amp;gt; 1&#xA;        xdot_x = [ 0, 1;&#xA;            -g/l*cos(x(1)), -d/(m*l^2)];&#xA;        xdot_u = [0; 1/(m*l^2)];&#xA;    end&#xA;end&#xA;&#xA;function [l, l_x, l_xx, l_u, l_uu, l_ux] = ilqr_fnCost(x, u, t)&#xA;    %trying J = x_f' Qf x_f + int(dt*[ u^2 ])&#xA;    Qf = 10000000 * eye(2);&#xA;    R = 1;&#xA;    wt = 1;&#xA;    x_diff = [wrapToPi(x(1) - reference(1)); x(2)-reference(2)];&#xA;&#xA;    if isnan(t)&#xA;        l = x_diff'* Qf * x_diff;&#xA;    else&#xA;        l = u'*R*u;&#xA;    end&#xA;&#xA;    if nargout &amp;gt; 1&#xA;        l_x = zeros(2,1);&#xA;        l_xx = zeros(2,2);&#xA;        l_u = 2*R*u;&#xA;        l_uu = 2 * R;&#xA;        l_ux = zeros(1,2);&#xA;&#xA;        if isnan(t)&#xA;            l_x = Qf * x_diff;&#xA;            l_xx = Qf;&#xA;        end&#xA;    end&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Some info on the pendulum: the origin of my system is where the pendulum is fixed to the ground. The angle theta is zero in the stable position (and pi in the unstable/goal position).&#xA;&lt;code&gt;m&lt;/code&gt; is the bob mass, &lt;code&gt;l&lt;/code&gt; is the rod length, &lt;code&gt;d&lt;/code&gt; is a damping factor (for simplicity I put &lt;code&gt;m=1&lt;/code&gt;, &lt;code&gt;l=1&lt;/code&gt;, &lt;code&gt;d=0.3&lt;/code&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My cost is simple: penalize the control + the final error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is how I call the ilqr function&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;tspan = [0 10];&#xA;dt = 0.01;&#xA;steps = floor(tspan(2)/dt);&#xA;x0 = [pi/4; 0];&#xA;umin = -3; umax = 3;&#xA;[x_, u_, L, J_opt ] = ilqg_det(@ilqr_fnDyn, @ilqr_fnCost, dt, steps, x0, 0, umin, umax);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This is the output&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Time From 0 to 10. Initial conditions: (0.785398,0.000000). Goal: (-3.141593,0.000000)&#xA;   Length: 1.000000, mass: 1.000000, damping :0.300000&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Using Iterative LQR control&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Iterations = 5;  Cost = 88230673.8003&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;the nominal trajectory (that is the optimal trajectory the control finds) is &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/tf9gp.png&quot; alt=&quot;ILQR optimal trajectory&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The control is &quot;off&quot;... it doesn't even try to reach the goal...&#xA;What am I doing wrong? (the algorithm  from Todorov seems to work.. at least with his examples)&lt;/p&gt;&#xA;" OwnerUserId="790" LastEditorUserId="350" LastEditDate="2013-01-29T17:11:00.603" LastActivityDate="2013-06-27T04:46:14.530" Title="Optimal Control for a simple pendulum" Tags="&lt;control&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="852" PostTypeId="2" ParentId="848" CreationDate="2013-01-29T21:25:04.467" Score="2" Body="&lt;p&gt;The comments in this example are not quite clear. &lt;a href=&quot;http://en.wikipedia.org/wiki/I%C2%B2C&quot; rel=&quot;nofollow&quot;&gt;I2C uses 7-bit or 10-bit addresses.&lt;/a&gt; This example simply walks through the address possibilities of a 7-bits only, 0-127 decimal or (0x00-0x7f hex), and tries to read the status from each one. If 'no error' is encountered, it means a valid device(slave) was found at that address. It does not look at 10-bit addresses.&lt;/p&gt;&#xA;" OwnerUserId="274" LastActivityDate="2013-01-29T21:25:04.467" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="853" PostTypeId="2" ParentId="815" CreationDate="2013-01-29T23:14:51.510" Score="2" Body="&lt;p&gt;For a good budget solution used 2 L298D Motor Controller IC chips. Each chip can control 2 motors. They implement an H-Bridge and so can drive motors in forward or reverse and incorperate diodes for current protection and so are safer than implementing a DIY H-Bridge with transistors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They are simple to use and you could make your own motor board for a fraction of the cost of the motor shields.&lt;/p&gt;&#xA;" OwnerUserId="823" LastActivityDate="2013-01-29T23:14:51.510" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="854" PostTypeId="1" AcceptedAnswerId="860" CreationDate="2013-01-30T03:44:23.420" Score="7" ViewCount="2573" Body="&lt;p&gt;I have the following chassis along with an Arduino and a motor shield. &lt;img src=&quot;https://i.stack.imgur.com/DgPKZ.jpg&quot; alt=&quot;Robot Chassis&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm in the process of developing a tracking mechanism for use with differential drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Normally, a photo reflector can be placed adjacent to the wheel that will reflect when each &lt;em&gt;spoke&lt;/em&gt; passes through therefore allowing code to be written that will accurately measure each wheels position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem I have is that you cannot see the wheels from inside the chassis, only small holes for the driveshaft. Placing sensors on the outside would look ridiculous and a wall crash would cause havoc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would I be able to use a photo reflector on the gears (as shown) if I accurately placed it to count each spoke on the gear itself? I'm a bit hesitant though because even a small bump could misalign the sensor - again causing havoc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So does any one have an idea on how to track the wheel movements?&lt;/p&gt;&#xA;" OwnerUserId="825" LastEditorUserId="825" LastEditDate="2013-01-30T03:49:38.650" LastActivityDate="2013-01-30T22:19:21.553" Title="Sensors for differential drive" Tags="&lt;arduino&gt;&lt;two-wheeled&gt;" AnswerCount="4" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="855" PostTypeId="2" ParentId="854" CreationDate="2013-01-30T06:37:18.780" Score="3" Body="&lt;p&gt;Are the wheels essentially hollow except for the spokes? If they were, it would seem to me like adding a small hole a little offset from the front axle (the wheel without gears) would be a good place to put a light detector. Of course that would not work too well in the dark.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each spoke, or more properly tooth on the gear, while technically would be correct, as you indicated may be hard to accomplish due to size.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does the non-gear wheels axle come into the chassis? Could you add an optical encoder there? Possibly by making the axle fixed to the wheel but pass through some sort of bearing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've never experimented with odometry with tracks, but I assume due to their increased slippage, you will have to deal with greater errors than plain wheels during turns. Have you considered that?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In any case, I think you are going to have to do some 'customization' to get what you want.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I could not find that chassis at Pololu. Is it an older model?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ah I see now where it has been replaced. The newer chassis has &lt;a href=&quot;http://www.pololu.com/catalog/product/1551&quot; rel=&quot;nofollow noreferrer&quot;&gt;encoders&lt;/a&gt; as an option.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/KMh7D.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="274" LastActivityDate="2013-01-30T06:37:18.780" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="856" PostTypeId="2" ParentId="854" CreationDate="2013-01-30T07:58:22.673" Score="4" Body="&lt;p&gt;One alternative to sensing the wheel movement is to actually track the vehicle movement over ground. I know that some people have done it using &lt;a href=&quot;https://www.sparkfun.com/products/10105&quot; rel=&quot;nofollow&quot;&gt;optical mouse sensors&lt;/a&gt;. The results will depend on the type of underground you are expecting. The upside is however that you track the actual vehicle movement, which is what you are really interested in.&lt;/p&gt;&#xA;" OwnerUserId="127" LastActivityDate="2013-01-30T07:58:22.673" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="857" PostTypeId="1" AcceptedAnswerId="858" CreationDate="2013-01-30T16:03:51.357" Score="7" ViewCount="221" Body="&lt;p&gt;Is there a way of initializing a Kalman filter using a population of particles that belong to the same &quot;cluster&quot;? How can you determine a good estimate for the mean value (compute weighted average ?) and the covariance matrix ? Each particle is represented as $[ x , y , θ , weight]$.&lt;/p&gt;&#xA;" OwnerUserId="164" LastEditorUserId="177" LastEditDate="2013-01-30T16:43:49.780" LastActivityDate="2013-01-30T16:43:49.780" Title="Can you seed a Kalman filter with a particle filter?" Tags="&lt;localization&gt;&lt;kalman-filter&gt;&lt;particle-filter&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="858" PostTypeId="2" ParentId="857" CreationDate="2013-01-30T16:43:04.477" Score="4" Body="&lt;p&gt;While this can be done it will be problematic. The issue comes from the fact that particle filters are a method for dealing with multi-modal probability distributions (PD) while Kalman filters assume your PD can be well represented with a Gaussian distribution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can conceive of a few methods for doing so if you really must. The most naive would be to calculate the mean and covariance of each $[x, y, \theta]$ vector. This neglects the weights and as such will be impacted by outliers (in this case particles of low weights).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It may be better to calculate the mean and covariance of each $[x, y, \theta]$ vector using the normalized weight values as the probability of the vector. This may be what you were driving at in your question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another naive approach would be select the largest mode and calculate its mean and covariance. Doing so requires that you select which particles belong to the mode and which don't which you could do with something like &lt;a href=&quot;http://en.wikipedia.org/wiki/K-means_clustering&quot; rel=&quot;nofollow&quot;&gt;K-means&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yet another alternative would be to use K-means to find the centers for K clusters and then calculate the mean and covariance of of these centers. I suspect this will work out pretty close to the same things as the second option I offered but not having done the math I cannot say so for certain.&lt;/p&gt;&#xA;" OwnerUserId="177" LastActivityDate="2013-01-30T16:43:04.477" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="859" PostTypeId="2" ParentId="854" CreationDate="2013-01-30T20:59:38.483" Score="5" Body="&lt;p&gt;Typically, tracking the position and orientation of a vehicle is not accomplished by looking at the wheels &amp;mdash; it's done with navigation sensors.  If you were attempting to have closed-loop control (i.e. servo control) of your motors then wheel-mounted position sensors might be appropriate.  But if the goal is to support &quot;autonomous driving&quot;, then I don't think position sensors will suffice.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Put simply, any non-flat terrain or slippage of the tracks would ruin your accuracy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead, I would suggest one or more of the following navigation sensors:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Compass&lt;/li&gt;&#xA;&lt;li&gt;GPS&lt;/li&gt;&#xA;&lt;li&gt;Inertial navigation system&lt;/li&gt;&#xA;&lt;li&gt;Acoustic or laser rangefinder&lt;/li&gt;&#xA;&lt;li&gt;Acoustic beacons and triangulation&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="350" LastActivityDate="2013-01-30T20:59:38.483" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="860" PostTypeId="2" ParentId="854" CreationDate="2013-01-30T22:19:21.553" Score="5" Body="&lt;p&gt;I put together encoders for this exact chassis.  Rather than reflecting ones, I used slot ones.  I thought I could work off the hole in the white gear, but it turns out the plastic is pretty transparent to IR, so I ended up using some black electical tape (high tech, I know) to make opaque regions on the gear.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;After building two encoders, I discovered there's a similar product online: &lt;a href=&quot;http://arduino-direct.com/sunshop/index.php?l=product_detail&amp;amp;p=202&quot; rel=&quot;nofollow noreferrer&quot;&gt;LightBeam OptoInterrupter Module&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For my first robot, I’m just using a rough encoder, with 4 counts per wheel revolution.  Here's my description from &lt;a href=&quot;http://www.mcgurrin.com/robots/?tag=wheel-encoder-electronics&quot; rel=&quot;nofollow noreferrer&quot;&gt;my blog&lt;/a&gt;: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In looking in the chassis, there’s not a lot of room. As a result, I decided I’d use a small transmissive sensor, rather than a reflective sensor.  Both have an IR emitter and an IR photo detector.  For reflective units, they both face the same direction, and the detector measure IR reflected back to the sensor.  For a transmissive or interrupt sensor, the two units are separated by a gap, and the detector picks up IR passing through the gap. So far, so good.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I ended up using Vishay transmissive optical sensors (model TCST1202) I purchased from DigiKey.  I wired them up based on the circuit posted by Aniss1001 in the “&lt;a href=&quot;http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1257038219&quot; rel=&quot;nofollow noreferrer&quot;&gt;Homemade wheel encoder&lt;/a&gt;“ thread on the Arduino forum.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZERQr.png&quot; alt=&quot;Encoder circuit diagram - for a different encoder, but it worked fine&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I built the circuit on a prototyping breadboard for testing and got a surprise.  The circuit worked fine, but the gear is transparent to IR!  It turns out that nylon and most plastics used for inexpensive gears are pretty transparent to IR.  I first tried creating an opaque section with a black marker, but while that worked on paper, it didn’t adhere well enough to the gear.  I ended up using a piece of black tape.  Once that worked, I cut some small circuit boards down to size and built the encoders, practicing my soldering skills.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I just used hot glue to mount the encoders.  The encoder boards stick up above the chassis base, so I’m using standoffs to raise the plastic plate with the Romeo controller and other devices.  Here’s a picture of one of the encoders before mounting,, and then mounted on the chassis:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/WUt0F.jpg&quot; alt=&quot;Homemade wheel encoder&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/8Jo7F.jpg&quot; alt=&quot;Mounted encoder&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this helps!&lt;/p&gt;&#xA;" OwnerUserId="58" LastActivityDate="2013-01-30T22:19:21.553" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="861" PostTypeId="2" ParentId="777" CreationDate="2013-01-31T06:35:34.400" Score="0" Body="&lt;p&gt;The industry standard for solving this problem is with &lt;a href=&quot;https://www.google.com/search?q=moving+faders&amp;amp;hl=en&amp;amp;tbo=u&amp;amp;tbm=isch&amp;amp;source=univ&amp;amp;sa=X&amp;amp;ei=Pg4KUfqlI-r7iwKmpYDYCQ&amp;amp;ved=0CH4QsAQ&amp;amp;biw=1710&amp;amp;bih=1145&quot; rel=&quot;nofollow noreferrer&quot;&gt;moving faders&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/ktnSQ.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They are readily available inexpensive components that do exactly what you ask for, except the being round part. &lt;/p&gt;&#xA;" OwnerUserId="274" LastActivityDate="2013-01-31T06:35:34.400" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="863" PostTypeId="1" AcceptedAnswerId="864" CreationDate="2013-01-31T10:58:41.593" Score="3" ViewCount="1149" Body="&lt;p&gt;I need to simulate a stream of vehicles, such as on an assembly line. Automatons are performing operations on the vehicles when they come within reach.  The automatons do not keep track of the individual vehicles, they simply collect data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We need to choose a method of matching the data gathered by each automaton with the vehicle it belongs to.  For example, we could guess the identity of a vehicle using its timing when arriving in the operation range (sensors) of an automaton.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have to check the possible problems we will face, so I would like a little (hopefully simple) video/simulation tool that I could play with.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;vehicles could be symbolized has moving black squares&lt;/li&gt;&#xA;&lt;li&gt;automatons/sensors could be static points or circles.&lt;/li&gt;&#xA;&lt;li&gt;it should be possible to change the time interval between two vehicles, and their speed, and add some random delays.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;What kind of software should I search for, or where should I look?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Should I consider to developing it from scratch? &lt;/p&gt;&#xA;" OwnerUserId="838" LastEditorUserId="350" LastEditDate="2013-01-31T18:14:25.567" LastActivityDate="2013-02-07T18:26:33.393" Title="How do I simulate an assembly line?" Tags="&lt;simulator&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="864" PostTypeId="2" ParentId="863" CreationDate="2013-01-31T16:45:38.830" Score="1" Body="&lt;p&gt;This is a great question and has come up a couple of times already (see &lt;a href=&quot;https://robotics.stackexchange.com/questions/712/quadruped-learning-simulator&quot;&gt;Quadruped Learning Simulator&lt;/a&gt; and See &lt;a href=&quot;https://robotics.stackexchange.com/questions/697/standalone-or-capable-of-being-robotics-simulator&quot;&gt;Standalone (or capable of being) Robotics Simulator&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In short, the de facto standard simulators for all things robotic are &lt;a href=&quot;http://playerstage.sourceforge.net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Stage&lt;/a&gt; (for 2D) and &lt;a href=&quot;http://gazebosim.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Gazebo&lt;/a&gt; (for 3D). &lt;a href=&quot;http://www.ros.org/wiki/&quot; rel=&quot;nofollow noreferrer&quot;&gt;ROS&lt;/a&gt; is another option for what you are trying to do. Not only because it is highly compatible with the aforementioned simulators but because it has it's own simple visualization tool called &lt;a href=&quot;http://www.ros.org/wiki/rviz&quot; rel=&quot;nofollow noreferrer&quot;&gt;RViz&lt;/a&gt; which excels at displaying primitives as you describe.&lt;/p&gt;&#xA;" OwnerUserId="177" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2013-01-31T16:45:38.830" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="865" PostTypeId="1" AcceptedAnswerId="867" CreationDate="2013-02-01T00:06:46.373" Score="8" ViewCount="18433" Body="&lt;p&gt;I am creating a CNC machine on a budget, using old motors out of printers/scanners/etc. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am limited to about 650mA for the whole system, so my fear is that when the cutting bit touches the material, the stepper might be moving too quickly and won't have enough torque.  This would mean it will become one rotation behind, which could really mess up a CNC project.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Detecting when the motor &quot;misses&quot; a step would allow me to readjust the motor speed until it reaches a balance between working quickly and having adequate torque.  How can I achieve this?&lt;/p&gt;&#xA;" OwnerUserId="824" LastEditorUserId="350" LastEditDate="2013-02-01T15:59:31.850" LastActivityDate="2013-05-09T18:44:10.113" Title="How to tell a stepper motor's position, or detect slippage" Tags="&lt;arduino&gt;&lt;stepper-motor&gt;&lt;current&gt;&lt;cnc&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="866" PostTypeId="2" ParentId="254" CreationDate="2013-02-01T14:54:39.790" Score="4" Body="&lt;p&gt;In industry, there is a strong preference for low maintenance brush-less motors over relatively high maintenance brushed motors. While the former may me more expensive in terms of the motor itself and the drive electronics, the reduction in the term long cost of maintenance usually out weighs the extra capital cost.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As &lt;a href=&quot;https://robotics.stackexchange.com/a/260/37&quot;&gt;user65&lt;/a&gt; suggests, you may need sinusoidal commutation to avoid torque ripple at low speeds, depending on precisely how you design your system and how fine you need your velocity control to be.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The paper &lt;a href=&quot;http://www.magnelab.com/uploads/4c51d9ba6fe5a.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;A Comparison Study of the Commutation Methods for ...&lt;/a&gt; has some interesting information commutation methods, which might be of use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ultimately though, I think that avoiding using encoders is a false economy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unlike halls, they have the distinct advantage that they &lt;em&gt;aren't tied to the motor rotation&lt;/em&gt; - i.e. they don't have to go on the motor shaft. You could place them on the load side of the gearbox, which will allow you to quantify the precise effects of the backlash in your gearbox.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This would allow you to to perform backlash compensation in software, run dual servo loops (one for position tracking with backlash compensation and another for more immediate velocity control) and generally take much more precise control of your system both at high and low speeds.&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2013-05-23T14:52:32.803" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="867" PostTypeId="2" ParentId="865" CreationDate="2013-02-02T01:43:13.053" Score="4" Body="&lt;p&gt;The ONLY difference between a stepper and a servo is that a Servo monitors its position with an encoder, and may increase power if it gets behind, or reduce power if it gets ahead, or generates a 'fault' condition if it is unable to move to the proper position in a predetermined time frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is no difference in power requirements. Any stepper can be a servo by the addition of encoders and closed loop electronics. Any Servo can be a stepper by bypassing the closed loop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As long as power requirements are planned, a less expensive stepper is a good choice, like moving a print head on a rail. Servo's are more appropriate when there may be some unknown power requirement, like on a CNC cutting machine.&lt;/p&gt;&#xA;" OwnerUserId="274" LastActivityDate="2013-02-02T01:43:13.053" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="868" PostTypeId="2" ParentId="829" CreationDate="2013-02-03T06:24:06.830" Score="1" Body="&lt;p&gt;The set of Parallel SISO controllers is a is a subset of MIMO controllers so MIMO is at least as powerful and possibly more powerful.  As for pros and cons I see no reason to use parallel SISO except that you may be more comfortable for it so it may be easier to get done.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said the system may be separable by actuator in which case it can pop out as being several SISO problems.  Although control systems is my area I don't work on robots so I can't say if that's the case for your problem.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another thing that is often done, as georgebrindeiro pointed out, is to break the problem into inner and outer control loops, where the inner loops allow you to ignore much of the &lt;/p&gt;&#xA;" OwnerUserId="850" LastActivityDate="2013-02-03T06:24:06.830" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="869" PostTypeId="1" AcceptedAnswerId="890" CreationDate="2013-02-03T21:22:36.800" Score="9" ViewCount="3851" Body="&lt;p&gt;I am very new to robotic design and I need to determine what parts I will need to assemble an arm joint.  The joint will contain one timing belt pulley which a remote motor will be turning, a forearm that the pulley will be rotating and an upper-arm piece that will actually be two parallel arms that will grip the pulley on top and bottom in order to brace the pulley from off axis torque from the timing belt.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am kind of at a lost as to how to mount all of these together.  I would like to mount the forearm directly to the pulley and then the two parallel arms (comprising the upper-arm) sandwich the top of the pulley and the lower part of the forearm.  This would be attached using a turn table.  Any ideas on how a shaft would mount to these?  Or how to attach the pulley to the arms themselves?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any kind of direction or links would be greatly appreciated, I don't even know the names of the parts I would be looking for.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this ASCII art model the dashed lines (-) are the arms.  The arm on the left is the forearm and the two arms on the right are the two parallel parts of the upper arm.  The stars are the belt and the bars (||) are the pulleys at the elbow |E| and shoulder |S|.  &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;              -----------------&#xA;              |E|***********|S|&#xA;-----------------&#xA;              -----------------&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I am thinking of mounting the pulley to the left arm directly (a bushing?) and then maybe using turntables to mount the pulley to the top arm and another turn table to mount the left arm to the bottom arm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a picture of the design to help you visualize:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://imgur.com/ci9BuKL&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qyAQ9.png&quot; alt=&quot;Double Joint Arm assembly&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="852" LastEditorUserId="852" LastEditDate="2013-02-08T14:41:10.043" LastActivityDate="2015-09-28T13:02:30.307" Title="Building Robotic arm joint" Tags="&lt;design&gt;&lt;robotic-arm&gt;&lt;joint&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="870" PostTypeId="2" ParentId="829" CreationDate="2013-02-04T02:05:40.970" Score="0" Body="&lt;p&gt;I've never seen &lt;a href=&quot;http://en.wikipedia.org/wiki/MIMO&quot; rel=&quot;nofollow&quot;&gt;MIMO&lt;/a&gt; used in this context before, but I can see how &lt;a href=&quot;http://en.wikipedia.org/wiki/Single-input_single-output_system&quot; rel=&quot;nofollow&quot;&gt;SISO&lt;/a&gt; might apply.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most robotic systems I've seen have been aggregation's of single axis motor controllers (your &lt;em&gt;multiple SISO&lt;/em&gt;) each of which only had a single encoder for sensing and a single motor for actuation. So each axis was &lt;em&gt;SISO&lt;/em&gt;, but the robot as a whole was &lt;em&gt;MIMO&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some systems I have worked on had significant backlash between motor/rotary encoder and load/linear encoder, so implemented a dual feedback loops, with one motor control output, but two encoders. The rotary encoder on the motor was primarily used to track velocity accurately, while the linear encoder on the load was used to compensate for backlash in the (worm) gear and provide accurate position information and tracking.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I believe that for most control systems, these traditional control methods are the most you will ever need, however there are exceptions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have only seen one system which &lt;em&gt;might&lt;/em&gt; have benefited from a truly &lt;em&gt;MIMO&lt;/em&gt; control system and that was one with similar characteristics to your own, but also needed to control the force applied by the tool-point of the robot. We &lt;em&gt;did&lt;/em&gt; implement this with a traditional &lt;em&gt;multiple SISO&lt;/em&gt; approach, but it required exceptionally careful tuning, and I'm not convinced that trying to use some form of computed torque technique would have been any easier anyway.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would suggest that you start off with a &lt;em&gt;multiple SISO&lt;/em&gt; approach and if that fails to give you the performance or characteristics you require, research into more advanced methods. At the very least you will have learn a lot more about the kinematics and dynamics of your system by that point.&lt;/p&gt;&#xA;" OwnerUserId="37" LastActivityDate="2013-02-04T02:05:40.970" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="872" PostTypeId="1" AcceptedAnswerId="881" CreationDate="2013-02-04T07:16:00.323" Score="9" ViewCount="1180" Body="&lt;p&gt;I'm working on a basic airplane flight stabilization system, as the precursor to a full autopilot system. I'm using a salvaged Wii Motion Plus and Nunchuk to create a 6DOF IMU. The first goal is to keep the wings level, then mix in the users commands. Am I correct in saying that this would not require a gyro, just a 3 (2?) axis accelerometer, to detect pitch and roll, then adjust the ailerons and elevator to compensate?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Secondly, if we extend my design goal from &quot;keeping the wings level&quot; to &quot;flying in a straight line&quot; (obviously two different things, given wind and turbulence), does the gyro become necessary, insofar as this can be accomplished without GPS guidance?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've tried integrating over the gyro values to get roll, pitch &amp;amp; yaw from that, however (as evidenced by this question), I'm at a level in my knowledge on the topic where I'd prefer simpler mathematics in my code. Thanks for any help!&lt;/p&gt;&#xA;" OwnerUserId="176" LastActivityDate="2013-02-08T10:25:38.283" Title="Do I really need a gyro for an airplane flight stabilization system?" Tags="&lt;uav&gt;&lt;accelerometer&gt;&lt;imu&gt;&lt;gyroscope&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="873" PostTypeId="1" CreationDate="2013-02-04T10:30:06.383" Score="-3" ViewCount="5620" Body="&lt;p&gt;I have a quadcopter robot that has a KINECT on it and i want to do 3D mapping with it. &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Is KINECT reliable on a moving robot (i.e., can it give me stable images and maps with this movement)?&lt;/li&gt;&#xA;&lt;li&gt;Is there an SDK for producing 3D maps from KINECT data?  Will SLAM algorithms work?&lt;/li&gt;&#xA;&lt;li&gt;Is the arduino board on the copter (ATmega 2560) powerful enough to handle this?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="853" LastEditorUserId="350" LastEditDate="2013-02-05T20:28:27.710" LastActivityDate="2013-07-16T07:22:03.817" Title="3D Mapping from a quadcopter with KINECT" Tags="&lt;arduino&gt;&lt;slam&gt;&lt;kinect&gt;&lt;quadcopter&gt;" AnswerCount="5" CommentCount="5" ClosedDate="2013-07-16T13:39:23.000" ContentLicense="CC BY-SA 3.0" />
  <row Id="874" PostTypeId="2" ParentId="873" CreationDate="2013-02-04T16:19:24.673" Score="1" Body="&lt;p&gt;I think what you are asking is on the edge of what is doable. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To specifically answer your questions;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should probably use the ROS package &lt;a href=&quot;http://www.ros.org/news/2011/01/ros-3d-entries-rgbd-slam.html&quot; rel=&quot;nofollow&quot;&gt;RGBD Slam&lt;/a&gt; made for this exact process.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yes, it uses SLAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;No, an arduino is probably not sufficient, or appropriate. It will take a fairly powerful PC class computer to process 3D SLAM data, and that would be independent of any Autonomous processing - so it might actually need 2 full function PCs before it flies. Plus an arduino for flight control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Being autonomous is an open concept. You have to write software that does something. SLAM will allow you to estimate where you are, and what your environment looks like, but you have to program the instructions to do anything within that environment. There is no general purpose &quot;let's be autonomous&quot; program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Kinect is part of a toy. It is reliable enough for experiments, you should at no time use a Kinect in any place where there is potential danger to life or property, such as on an unrestricted 'copter'. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 'copter' will have to either have remote processing, which would involve some fairly high bandwidth transmission equipment, or be able to lift 2 decent size computers, plus a kinect in either case.  The rule of thumb for 'copters' is 2 to 1 thrust to weight ratio, so you are looking at a fairly robust platform with eight motors (typical), costing several thousand dollars. I'm not sure a $10,000 &lt;a href=&quot;http://www.quadrocopter.com/CineStar-8-Basic-Kit-_p_414.html&quot; rel=&quot;nofollow&quot;&gt;cinestar&lt;/a&gt; would even be up to it, more and likely something custom beyond that. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just as reference as to whether or not it is doable, I found a &lt;a href=&quot;http://diydrones.com/profiles/blogs/quadcopter-with-kinect-doing&quot; rel=&quot;nofollow&quot;&gt;video&lt;/a&gt; showing it (a year ago, and we've gotten a little better since then).&lt;/p&gt;&#xA;" OwnerUserId="274" LastEditorUserId="274" LastEditDate="2013-02-05T20:13:49.450" LastActivityDate="2013-02-05T20:13:49.450" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="875" PostTypeId="2" ParentId="873" CreationDate="2013-02-04T19:28:31.247" Score="4" Body="&lt;p&gt;With respect to the Arduino + Kinect, see my answer to &lt;a href=&quot;https://robotics.stackexchange.com/a/343/308&quot;&gt;Start making robots with Kinect&lt;/a&gt; (short version: not happening without something with more CPU power than a Raspberry Pi, which you then have to carry onboard with sufficient additional battery power).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other obstacle in your case is that the specifications of the Kinect are not well-suited for any sort of aircraft. The effective range of the depth sensor is 1.2 - 3.5 meters. It won't be able to detect a wall right next to it or recognize it from a distance. Your copter would have to be able to react quickly enough to avoid obstacles in that 1.2 - 3.5 meter viewing range. Even then, it could get blindsided by something too close to ever be detected in the first place. You would have to add additional sensors for obstacle avoidance and only use the Kinect for mapping when you know it's safe to do so.&lt;/p&gt;&#xA;" OwnerUserId="308" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2013-02-04T19:28:31.247" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="876" PostTypeId="1" AcceptedAnswerId="877" CreationDate="2013-02-02T23:41:45.237" Score="0" ViewCount="98" Body="&lt;p&gt;Before I start asking you for help let you know that I am newbie in electronic field.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All I want to know is the principle of wheel rotation (left-right) from remote car gadget. I am not talking about changing the spin rotation of DC motor (up,down buttons from remote), I am asking about left and right movement of wheel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that spin change depends on polarity of DC motor, so changing polarity changes spin, but what is the principle of changing the left and right positions of front wheels.&lt;/p&gt;&#xA;" OwnerUserId="859" OwnerDisplayName="ttokic" LastEditorUserId="308" LastEditDate="2013-02-05T07:36:33.797" LastActivityDate="2013-02-05T07:36:33.797" Title="Remote car controlling" Tags="&lt;control&gt;&lt;wheel&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="877" PostTypeId="2" ParentId="876" CreationDate="2013-02-05T00:04:21.300" Score="0" Body="&lt;p&gt;A DC motor has 2 directions, &lt;code&gt;forwards&lt;/code&gt; and &lt;code&gt;backwards&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The DC motor &lt;strong&gt;does not&lt;/strong&gt; control the direction of an RC car, instead it's the &lt;strong&gt;steering mechanism&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Rather than write everything here - I have found &lt;a href=&quot;http://rc4beginners.blogspot.co.nz/p/lesson-4-steering-system_06.html&quot; rel=&quot;nofollow&quot;&gt;an article&lt;/a&gt; for you that I believe will explain the principles of car steering. Hopefully it's a good starting point for you; feel free to Google for further information that you require. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The term &lt;a href=&quot;https://www.google.com/#hl=en&amp;amp;sugexp=les;&amp;amp;gs_rn=2&amp;amp;gs_ri=hp&amp;amp;tok=BBu9JIbGhlO8CVJL8oOmfQ&amp;amp;cp=22&amp;amp;gs_id=6&amp;amp;xhr=t&amp;amp;q=how+car+steering+works&amp;amp;es_nrs=true&amp;amp;pf=p&amp;amp;tbo=d&amp;amp;output=search&amp;amp;sclient=psy-ab&amp;amp;oq=how+car+steering+works&amp;amp;gs_l=&amp;amp;pbx=1&amp;amp;bav=on.2,or.r_gc.r_pw.r_cp.r_qf.&amp;amp;bvm=bv.41867550,d.dGI&amp;amp;fp=6daf5ba8052c93de&amp;amp;biw=1527&amp;amp;bih=840&quot; rel=&quot;nofollow&quot;&gt;&lt;code&gt;how car steering works&lt;/code&gt;&lt;/a&gt; returns &lt;strong&gt;a lot&lt;/strong&gt; of results. Good luck!&lt;/p&gt;&#xA;" OwnerUserId="825" LastEditorUserId="350" LastEditDate="2013-02-05T04:29:30.057" LastActivityDate="2013-02-05T04:29:30.057" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="878" PostTypeId="1" AcceptedAnswerId="931" CreationDate="2013-02-05T06:36:50.580" Score="1" ViewCount="100" Body="&lt;p&gt;I have 3D printers at my school, but unfortunately they are not super high quality. I want to try 3D printing a model I made on google sketchup, but I would like for it to be fairly accurate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What measures can I take to prevent error in the model? I understand that I need to export the file as an STL; is there anything I can do to the model before hand to ensure accuracy? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What can I do to calibrate a 3D printer for best results?  &lt;/p&gt;&#xA;" OwnerUserId="216" LastEditorUserId="350" LastEditDate="2013-02-05T18:47:27.370" LastActivityDate="2018-03-29T04:00:44.657" Title="Accurate 3D Printing W/Sketchup" Tags="&lt;3d-printing&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="879" PostTypeId="2" ParentId="872" CreationDate="2013-02-05T12:53:26.347" Score="5" Body="&lt;p&gt;As the name of the accelerometer implies, you measure the acceleration on your system excluding that from the gravitational force. When your sensor is at rest, you measure the acceleration from the force that you use to counteract the gravitational force. This is how you can fix your orientation vs the gravity vector. When the sensor is accelerated, as would be the case when other external forces (like e.g. wind) are applied it gets mixed with the forces counteracting the gravity, and you can not uniquely identify the gravity vector anymore. When averaged over time you can smooth out the dynamic acceleration components, and this is for example what is used in an AHRS to compensate the gyro drift. For short term estimation - which is what you are asking for - an accelerometer is not likely to provide you the information that you need to keep your craft stable, and you need some other method to estimate your orientation (e.g. gyros, horizon sensor, etc...). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Effectively you can not differentiate between a level craft which is accelerated by a wind gust and a craft which is tilted, but otherwise not accelerated.&lt;/p&gt;&#xA;" OwnerUserId="127" LastActivityDate="2013-02-05T12:53:26.347" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="880" PostTypeId="2" ParentId="873" CreationDate="2013-02-05T18:52:39.920" Score="1" Body="&lt;p&gt;This is absolutely not feasible. The Arduino cannot handle the data rate from the Kinect. It &lt;em&gt;requires&lt;/em&gt; usb 2.0 (full speed) and a lot of power (full USB bus x2). Arduino would be swamped, especially given that the Kinect &lt;em&gt;requires a dedicated and optimized library&lt;/em&gt; to interface. Such a library does not exist for the Arduino. The Kinect is not an appropriate sensor for controlling a copter, due to limited range, high power requirements, high weight, and huge processing requirements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yes, you will have to use SLAM algorithms, of course. What you describe is exactly the job SLAM addresses.&lt;/p&gt;&#xA;" OwnerUserId="163" LastActivityDate="2013-02-05T18:52:39.920" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="881" PostTypeId="2" ParentId="872" CreationDate="2013-02-05T23:47:28.003" Score="5" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Am I correct in saying that this would not require a gyro, just a 3 (2?) axis accelerometer, to detect pitch and roll, then adjust the ailerons and elevator to compensate?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No. The opposite is true. The accelerometer will be almost useless to detect rotations on a platform that's experiencing unknown accelerations. Your plane will be subject to two force vectors: gravity and lift+drag. Lift+drag will vary hugely as a function of the plane's pitch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But here's a more general way you can know this is impossible, and you can use this method in many other cases than just IMUs. A sensor, or set of sensors gives you N values. You can't interpret this into a space with more than N dimensions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A trivial example: You want a sensor to measure someone's position within a room. Would a single ultrasonic range finder be sufficient? No. A position in a room requires two values, (X, Y) coordinates. But an ultrasonic sensor gives you only one value, a length. There is no way to set up this sensor to solve your problem. But if you had two sensors, then it might be possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now let's look at the plane. A non-accelerating plane is subject to one force only, gravity. The direction of gravity relative to the plane is a 3D vector, but luckily (if you're on Earth) you know its magnitude. That's 1 value, leaving 2 unknowns, so you could theoretically get away with a 2-axis accelerometer to make up those 2 unknowns and calculate the vector of gravity.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;What about a plane in flight. Gravity and lift+drag are both 3D vectors, giving you 6 numbers. OK you know the magnitude of gravity, so 5 numbers. You'll need some kind of sensor that gives you at least 5 values. Therefore a 3-axis accelerometer cannot be enough.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While neither a 3-axis gyro nor a 3-axis accelerometer will be enough on their own, the gyro would be much more useful. This is because it's directly measuring rotations, which is the very thing you're trying to control. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Likewise, the accelerometer will be more useful for detecting and correcting deviations from travel in a straight line.&lt;/p&gt;&#xA;" OwnerUserId="40" LastEditorUserId="40" LastEditDate="2013-02-08T10:25:38.283" LastActivityDate="2013-02-08T10:25:38.283" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="882" PostTypeId="1" CreationDate="2013-02-06T01:32:03.003" Score="1" ViewCount="69" Body="&lt;p&gt;I recently start a project to measure the force on a bathroom grab bar. The force/load is applied by the person who need to the grab bar for assistant. What I want to measure is the load against the wall and do the the real-time monitoring of the load for further analysis to improve the design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not quite sure about what kind of sensor would be suitable to do the measurement. I am looking at different load cells but cannot get the idea how to mount commercial load cells to do the measurement. What I am trying right now is using strain gauge to measure the strain near the end of the bar(wall side) and roughly calculate the load. I think (might be wrong) there may exists some kind of force/load sensors that can clamp on the bar to do the measurement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any sensor types/models or suggestion are welcome.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also posted this question to EE forum&#xA;&lt;a href=&quot;https://electronics.stackexchange.com/questions/57197/how-to-measure-force-that-applied-on-grab-bar&quot;&gt;https://electronics.stackexchange.com/questions/57197/how-to-measure-force-that-applied-on-grab-bar&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="861" LastEditorUserId="-1" LastEditDate="2017-04-13T12:33:08.317" LastActivityDate="2013-02-07T05:40:41.967" Title="Force measurement on grab bars" Tags="&lt;sensors&gt;&lt;force&gt;" AnswerCount="0" CommentCount="3" FavoriteCount="0" ClosedDate="2013-02-08T15:57:28.377" ContentLicense="CC BY-SA 3.0" />
  <row Id="883" PostTypeId="1" AcceptedAnswerId="902" CreationDate="2013-02-06T10:36:06.213" Score="6" ViewCount="554" Body="&lt;p&gt;I have been experimenting with different fitness functions for my &lt;a href=&quot;http://www.cyberbotics.com/overview&quot; rel=&quot;noreferrer&quot;&gt;Webots robot simulation&lt;/a&gt; (in short: I'm using genetic algorithm to evolve interesting behaviour).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The idea I have now is to reward/punish Aibo based on its speed of movement. The movement is performed by setting new joint position, and currently it results in jerky random movements. I have been looking at the nodes available in Webots, but apart from GPS node (which is not available in Aibo) I couldn't find anything relevant.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I want to achieve is to measure the distance from previous location to current location after each movement.  How can I do this?&lt;/p&gt;&#xA;" OwnerUserId="863" LastEditorUserId="37" LastEditDate="2013-02-06T14:23:57.547" LastActivityDate="2014-05-02T11:48:12.250" Title="Measuring speed of movement in Webots" Tags="&lt;mobile-robot&gt;&lt;reinforcement-learning&gt;&lt;simulator&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="884" PostTypeId="1" CreationDate="2013-02-06T22:51:06.027" Score="1" ViewCount="863" Body="&lt;p&gt;Is there a Matlab toolbox available to use &lt;a href=&quot;http://www.sick.com/us/en-us/home/products/product_portfolio/laser_measurement_systems/Pages/indoor_laser_measurement_technology.aspx&quot; rel=&quot;nofollow&quot;&gt;Sick lasers&lt;/a&gt; in Windows?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found &lt;a href=&quot;http://sourceforge.net/projects/sicktoolbox/&quot; rel=&quot;nofollow&quot;&gt;one toolbox for Matlab in GNU/Linux&lt;/a&gt;.  Is there another way to use Sick laser via Matlab in Windows?&lt;/p&gt;&#xA;" OwnerUserId="714" LastEditorUserId="350" LastEditDate="2013-02-07T17:27:29.147" LastActivityDate="2015-07-26T04:34:11.070" Title="Using a Sick laser with Matlab in Windows" Tags="&lt;mobile-robot&gt;&lt;localization&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="885" PostTypeId="1" AcceptedAnswerId="888" CreationDate="2013-02-07T03:57:22.483" Score="2" ViewCount="400" Body="&lt;p&gt;Does anyone know if this is possible? It's just an i2c device right? I mean you would have to cut the cable and make it so you could plug into the pins on the Arduino but you should just be able to use the wire library and say something like. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Wire.beginTransmission(0x10);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;the NXT hardware developers kit tells you what pins are which &lt;a href=&quot;http://mindstorms.lego.com/en-us/support/files/default.aspx&quot; rel=&quot;nofollow&quot;&gt;http://mindstorms.lego.com/en-us/support/files/default.aspx&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT. Turns out this is very possible. The main problem was that HiTechnic says the address is 0x10 and it is actually 0x08 but here is a short sketch that reads and prints some into about the device, i.e. the manufacturer and version. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;Wire.h&amp;gt;&#xA;&#xA;#define ADDRESS 0x08&#xA;&#xA;void setup()&#xA;{&#xA;  Wire.begin();&#xA;  Serial.begin(9600);&#xA;}&#xA;&#xA;void loop()&#xA;{&#xA;  readCharData(0, 7);&#xA;  Serial.println();    &#xA;  readCharData(8, 8);&#xA;  Serial.println();&#xA;  readCharData(16, 8);&#xA;  Serial.println();&#xA;&#xA;  Serial.println(&quot;-----------------------------&quot;);&#xA;&#xA;  delay(1000);&#xA;}&#xA;&#xA;void readCharData(int startAddress, int bytesToRead)&#xA;{&#xA;  Wire.beginTransmission(ADDRESS);&#xA;  Wire.write(startAddress);&#xA;  Wire.endTransmission();&#xA;&#xA;  Wire.requestFrom(ADDRESS, bytesToRead);&#xA;&#xA;  while(Wire.available()) &#xA;  {&#xA;     char c = Wire.read();&#xA;     Serial.print(c);  &#xA;  }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="803" LastEditorUserId="803" LastEditDate="2013-02-08T00:06:45.397" LastActivityDate="2013-02-08T00:06:45.397" Title="Would is be possible to connect a HiTechnic prototype board to an Arduino?" Tags="&lt;arduino&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="886" PostTypeId="2" ParentId="885" CreationDate="2013-02-07T04:33:53.147" Score="1" Body="&lt;p&gt;According to the HiTechnic page for the prototype board it communicates with the NXT brick. As such it is possible for the Arduino to communicate with it. The one caveat would be whether they have correctly implement I2C. If they haven't then you likely could still use it but it would take additional work.&lt;/p&gt;&#xA;" OwnerUserId="177" LastActivityDate="2013-02-07T04:33:53.147" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="887" PostTypeId="2" ParentId="883" CreationDate="2013-02-07T14:39:37.840" Score="0" Body="&lt;p&gt;I went to the source (Cyberbotics) and got these 2 solutions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Aibo has no GPS. And it's not straight forward to add it, because its node hierachy is hidden behind the prototype mechanism. The definition of the Aibo if however open-source:&#xA;$WEBOTS/resources/projects/robots/aibo/protos/Aibo_ERS7.proto&#xA;GPS can be added to the project (into the protos path) and modified as we wish.&#xA;Adding GPS is as simple as adding a GPS node inside the direct children of the Robot node.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A supervisor allows to query the scene tree. This includes getting the position of the Aibo.&#xA;This solution is clearer. The following example shows a supervisor retrieving information from the scene tree:&#xA;$WEBOTS/projects/samples/devices/worlds/supervisor.wbt&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="863" LastActivityDate="2013-02-07T14:39:37.840" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="888" PostTypeId="2" ParentId="885" CreationDate="2013-02-07T14:53:46.650" Score="4" Body="&lt;p&gt;Per the schematics of the UltraSonic Sensor the P1.3/SCL is DIGIAI0 or J1.5 and P3.0/SDA is DIGIAI1 or J1.6. And the developer Kit Manual states it is I2C as per philips original standard, detailing all the memory address's of the ESC015 chip and with all the recommended interfacing circuitry. The only note that I see is that they state the I2C's SCL is 9600. Kind of slow. But all very do-able for an Arduino. check out &lt;a href=&quot;http://www.openelectrons.com/index.php?module=pagemaster&amp;amp;PAGE_user_op=view_page&amp;amp;PAGE_id=7&quot; rel=&quot;nofollow&quot;&gt;http://www.openelectrons.com/index.php?module=pagemaster&amp;amp;PAGE_user_op=view_page&amp;amp;PAGE_id=7&lt;/a&gt; as they have a shield to directly connect and libraries for the Arduino.&lt;/p&gt;&#xA;" OwnerUserId="821" LastActivityDate="2013-02-07T14:53:46.650" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="889" PostTypeId="2" ParentId="863" CreationDate="2013-02-07T18:26:33.393" Score="1" Body="&lt;p&gt;As a child I had a copy of a software called &quot;&lt;a href=&quot;http://www.mhj-tools.com/sps-visu/&quot; rel=&quot;nofollow&quot; title=&quot;SPS VISU&quot;&gt;SPS Visu&lt;/a&gt;&quot; where you could do such simulations. (I thought it was a game and sure ha a lot of fun with it :D) Maybe this is what you are looking for?&lt;/p&gt;&#xA;" OwnerUserId="870" LastActivityDate="2013-02-07T18:26:33.393" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="890" PostTypeId="2" ParentId="869" CreationDate="2013-02-08T15:33:52.950" Score="3" Body="&lt;p&gt;This looks very much like a simplification of a traditional &lt;a href=&quot;http://en.wikipedia.org/wiki/SCARA&quot; rel=&quot;nofollow&quot;&gt;SCARA&lt;/a&gt; robot design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is a nice simple design in which the weight bearing axes are all nicely horizontal, which means these axes behave similarly irrespective of the load weight. The only downside of this design is that the some positions can only be accessed from a left handed configuration, some can only be accessed from a right handed configuration and some can be accessed from either (which can cause problems with the higher level control).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The normal nomenclature for these joints are that the upper arm is between the shoulder axis and the elbow, so that is what I will call these joints below.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want the elbow pulley to turn the lower arm then you need to use either a fixed shaft or drive shaft:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;With a drive shaft you bolt the pulley and the lower arm to the shaft and set the shaft in bearings on the end of the upper arms. Torque is transmitted from the belt to the lower arm through the drive shaft.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;This route is easier, since both pulley and arm are probably designed to do this.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;With a fixed shaft you bolt the shaft rigidly between the upper arms, mount both the lower arm and the pulley on bearings, then fix the pulley to the lower arm directly.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;This design could allow the upper arm to be much more rigid, which might be a concern if you are worried about the strength of your upper arm.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The shoulder joint has similar options, but is complicated by the fact that you not only need to transmit torque to the lower arm, but you also have to turn the upper arm too. Now you have several options:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Use the shoulder shaft as a drive shaft, fix it to both halves of the upper arm, and use the shaft rotation to drive the upper arm, then use a fixed shaft mechanism to drive the lower arm pulley (this extra joint will be freely rotating on the upper arm drive shaft).&#xA;&lt;ul&gt;&#xA;&lt;li&gt;This is probably the easiest option.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Use the shoulder shaft as a drive shaft, but fix it to the lower arm pulley, and use the shaft rotation to drive the lower arm, then use a fixed shaft mechanism to mount and drive the upper arm.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The problem with this option is that unless you add a fixed shaft shoulder mechanism for both halves of the upper arm, you may end up twisting the arm when you apply torque to one half but not the other, a problem which is even more likely if you opted for a drive shaft elbow mechanism.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Fix the shoulder shaft to the base, and use a fixed shaft mechanism to drive both upper and lower arms.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Again, this might give you a slightly stronger robot overall, but has the same problem with regard to driving both halves of the upper arm.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;It is this extra complexity which is why a single heavier duty upper arm might be preferable to increasing the strength of the upper arm by doubling up two lighter arms which are allowed to move (slightly) independently of each other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another alternative to remove the need to transmit the elbow torque through the shoulder axis is to mount the lower arm motor &lt;em&gt;on the upper arm&lt;/em&gt;. Thus you can treat upper and lower arms as mechanically independent systems, and your design decision for one won't have ramifications for the other.&lt;/p&gt;&#xA;" OwnerUserId="37" LastActivityDate="2013-02-08T15:33:52.950" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="891" PostTypeId="1" CreationDate="2013-02-08T16:57:25.997" Score="5" ViewCount="2278" Body="&lt;p&gt;I'm a programmer by trade, and an amateur aerospace nut, with some degree-level training in both fields. I'm working on a UAV project, and while the good people over at &lt;a href=&quot;http://www.diydrones.com/&quot;&gt;DIY Drones&lt;/a&gt; have been very helpful, this question is a little less drone-related and a little more general robotics/electronics. Essentially, I'm looking at options for ground stations, and my current rough plan is something like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a PC joystick with a broken sensor in the base, which I plan to dismantle, separate the handle from the base, insert an Arduino Nano into the (mostly hollow) handle and hook it up to all the buttons and the hat thumbstick. Then, where the hole is that used to accept the stem to the base, I fit a bracket that runs horizontally to hold a smallish touchscreen (think &lt;a href=&quot;http://cdn11.mobilemag.com/wp-content/uploads/2012/12/Razer-Fiona.jpg&quot;&gt;Razer's Project Fiona tablet&lt;/a&gt; with only one stick), behind which is mounted a Raspberry Pi. The Nano talks to the RPi over USB as a HID input. The RPi will be running some custom software to display telemetry and other data sent down from the UAV.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My main question whether that Nano would have enough power to run the XBee that provides the telemetry link without causing lag in the control inputs. It's worth mentioning that the UAV will be doing fly-by-wire moderation, so slight stutters won't result in wobbly flying, but serious interruptions will still be problematic - and annoying. It's also worth mentioning that this will only be used as a simplified &quot;guiding hand&quot; control; there will ALWAYS be a regular remote control available (not least because of EU flight regulations) so this is just for when I don't want to use that. If that Nano won't do, what are my options? My first thought is to get a second Nano and get that to drive the XBee (the RPi has two USB ports after all) but there may well be a better way.&lt;/p&gt;&#xA;" OwnerUserId="873" LastActivityDate="2013-02-08T20:13:20.180" Title="Arduino Nano + Raspberry Pi = UAV Ground Station?" Tags="&lt;arduino&gt;&lt;control&gt;&lt;uav&gt;&lt;raspberry-pi&gt;&lt;radio-control&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="892" PostTypeId="1" AcceptedAnswerId="894" CreationDate="2013-02-08T17:27:08.697" Score="5" ViewCount="89" Body="&lt;p&gt;Is it possible to achieve arbitrary precision to the calibration of the extrinsic parameters of a camera or is there a minimum error wich can not be compensated (probably dictated by the camera's resolution)?&lt;/p&gt;&#xA;" OwnerUserId="799" LastActivityDate="2013-02-08T19:43:46.970" Title="Is it possible to achieve arbitrary precision in camera calibration?" Tags="&lt;computer-vision&gt;&lt;calibration&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="893" PostTypeId="2" ParentId="891" CreationDate="2013-02-08T17:39:56.737" Score="2" Body="&lt;p&gt;The Arduino Nano should be able to interface with the XBee no problem. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If all you are using the Arduino for is forwarding a message that comes from the RPi, you might as well just use an &lt;a href=&quot;https://www.sparkfun.com/products/8687&quot; rel=&quot;nofollow&quot;&gt;XBee Explorer&lt;/a&gt; board (basically a &lt;a href=&quot;http://www.ftdichip.com/Products/ICs/FT232R.htm&quot; rel=&quot;nofollow&quot;&gt;FTDI Chip&lt;/a&gt; with a socket fit for an XBee). After configuration, all you need to do is to write to a serial port to get the XBee to send a message... All processing is done in-chip.&lt;/p&gt;&#xA;" OwnerUserId="95" LastActivityDate="2013-02-08T17:39:56.737" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="894" PostTypeId="2" ParentId="892" CreationDate="2013-02-08T18:21:20.710" Score="9" Body="&lt;p&gt;It is not possible to achieve &lt;em&gt;arbitrary&lt;/em&gt; precision in camera calibration, precisely because of camera resolution and camera imperfections (e.g. lens distortion, which is only approximated in the calibration of intrinsic parameters). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That, however, isn't usually the worst part of the deal. You can go a long way if you are able to fabricate your calibration target with a decent precision. According to Trucco (p.124):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The accuracy of calibration depends on the accuracy of the measurements of the calibration pattern; that is, its construction tolerances. To be on the safe side, the calibration pattern should be built with tolerances one or two order of magnitudes smaller than the desired accuracy of calibration. For example, if the desired accuracy of calibration is  0.1mm, the calibration pattern should be built with tolerances smaller than 0.01mm.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;A good quote for common sense, also by Trucco (p.136):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;A practical guideline is: &lt;em&gt;the effort going into improving calibration accuracy should be commensurate to the requirements of the application&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;[1] E. Trucco, A. Verri. &lt;em&gt;Introductory Techniques for 3-D Computer Vision&lt;/em&gt;. Prentice Hall, 1998&lt;/p&gt;&#xA;" OwnerUserId="95" LastEditorUserId="95" LastEditDate="2013-02-08T19:43:46.970" LastActivityDate="2013-02-08T19:43:46.970" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="895" PostTypeId="2" ParentId="891" CreationDate="2013-02-08T20:13:20.180" Score="2" Body="&lt;p&gt;If I'm understanding your architecture (from joystick to UAV) correctly, it is this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;${[\text{joystick}]-\text{wires}- \atop [\text{RPi}]-\text{USB HID}-}-[\text{Nano}]-\text{XBee}-[\text{UAV}]$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You're considering laying it out like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$[\text{joystick}]-\text{wires}-[\text{Nano}]-\text{USB HID}-[\text{Rpi}]-\text{USB HID}-[\text{Nano}]-\text{XBee}-[\text{UAV}]$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Nano should be more than powerful enough to run the XBee and the controls.  Even if it wasn't fast enough, I doubt that you could improve it by adding the latency introduced by two USB HID links and the processing onboard the RPi.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2013-02-08T20:13:20.180" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="896" PostTypeId="1" CreationDate="2013-02-09T21:53:47.387" Score="21" ViewCount="14006" Body="&lt;p&gt;I am in the process of building a stereo vision system to be used on a UGV. The system is for a robot that will be used in a competition wherein the robot is teleoperated to find relatively small colored rocks in a large outdoor field. I understand how to calibrate such a system and process the data for a stereo vision system. I do not however know how to select cameras for such a system. What are the best practices for picking cameras for a stereo vision system?&lt;/p&gt;&#xA;" OwnerUserId="177" LastActivityDate="2020-06-02T11:48:12.183" Title="How to select cameras for a stereo vision system?" Tags="&lt;computer-vision&gt;&lt;stereo-vision&gt;&lt;cameras&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="16" ContentLicense="CC BY-SA 3.0" />
  <row Id="897" PostTypeId="1" AcceptedAnswerId="898" CreationDate="2013-02-09T22:36:37.333" Score="5" ViewCount="9239" Body="&lt;p&gt;I'm trying to control a higher voltage motor than an arduino can source with a pin, with an arduino. I am trying to hook it up to a transistor. The battery pack is not supposed to be 4.8V, it's 6V, 4 D batteries.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the setup:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/m9QPz.png&quot; alt=&quot;Circuitry setup&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the arduino code I'm trying to run to it:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;int motorpin = 2;&#xA;&#xA;void setup()&#xA;{&#xA;    pinMode(motorpin, OUTPUT);&#xA;}&#xA;&#xA;void loop()&#xA;{&#xA;    digitalWrite(motorpin, HIGH);&#xA;    delay(500);&#xA;    digitalWrite(motorpin, LOW);&#xA;    delay(500);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Code gives me no errors, but no motor movement happens. What would make this work? Thanks.&lt;/p&gt;&#xA;" OwnerUserId="583" LastEditorUserId="583" LastEditDate="2013-02-12T01:48:15.590" LastActivityDate="2016-11-07T05:27:11.530" Title="High voltage motor control with arduino" Tags="&lt;arduino&gt;&lt;motor&gt;" AnswerCount="5" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="898" PostTypeId="2" ParentId="897" CreationDate="2013-02-10T06:37:02.613" Score="6" Body="&lt;p&gt;Your hardware configuration sounds wrong... your trying to provide all the drive current from the arduino&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given your description, your using a bipolar (NPN or PNP) transistor, I'd wire up as:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Base: To arduino&lt;/li&gt;&#xA;&lt;li&gt;Collector: Motor -ve  (motor +ve to Vcc)&lt;/li&gt;&#xA;&lt;li&gt;Emmitter: Ground&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Alternatively:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Base: To arduino&lt;/li&gt;&#xA;&lt;li&gt;Collector: Vcc&lt;/li&gt;&#xA;&lt;li&gt;Emmitter: Motor +ve  (motor -ve to Ground)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This way, the processor is switching the current flow between Vcc and the motor, not supplying all the power.&lt;/p&gt;&#xA;" OwnerUserId="134" LastEditorUserId="134" LastEditDate="2013-02-10T17:01:49.473" LastActivityDate="2013-02-10T17:01:49.473" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="899" PostTypeId="2" ParentId="896" CreationDate="2013-02-10T14:47:30.620" Score="6" Body="&lt;p&gt;You should start by calculating how many frames per second you need, and how much camera resolution you can process at that framerate.  If nothing else, that will prevent you from overspending or from buying a camera that won't suit your needs.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beyond that, there are a variety of features that make the choice more difficult/interesting.  Different cameras (especially network cameras like Axis) allow you to alter the image quality, or to specify a max bitrate for the image stream.  Some cameras also give you choices on the shutter speed, allowing you to favor a constant exposure time or a constant average illumination in the image.  Some cameras are more sensitive than others (the last time I worked with this was in 2009, and we noticed that the PS3 Eye did really well in low light conditions).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Probably the best thing you can do would be to run your image processing algorithms on a few static images that you take with a DSLR, then attempt to reduce the frame size and quality to see where things begin to break down.  &lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2013-02-10T14:47:30.620" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="900" PostTypeId="1" CreationDate="2013-02-10T14:54:03.493" Score="2" ViewCount="217" Body="&lt;p&gt;Given workspace constraints, load and task to be done, how do I select the best configuration of my robot? How do I select between a cartesian or Scara robot for instance? How do I select a manipulator? How do I determine how many axes that I need?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most of what I have seen is based on experience, rules of thumb and readily available standard devices, but I would like a more formal answer to quantify my choice. Is there some technique (genetic algorithm?) which describes the task, load, workspace, budget, speed etc. and rates and selects an optimal robot configuration or maybe even multiple configurations? How can I be mathematically ensure I ultimately chose the optimal solution?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only thing I found online was a thesis from 1999 titled &lt;a href=&quot;http://darwin2k.sourceforge.net/thesis.pdf&quot; rel=&quot;nofollow&quot;&gt;&lt;em&gt;Automated Synthesis and Optimization of Robot Configurations: An Evolutionary Approach&lt;/em&gt;&lt;/a&gt; (pdf, &lt;a href=&quot;http://scholar.google.co.uk/scholar?hl=en&amp;amp;q=CMU-RI-TR-99-43&amp;amp;btnG=&amp;amp;as_sdt=1,5&amp;amp;as_sdtp=&quot; rel=&quot;nofollow&quot;&gt;CMU-RI-TR-99-43&lt;/a&gt;). It is a synthesis and optimization tool called &lt;a href=&quot;http://darwin2k.sourceforge.net/&quot; rel=&quot;nofollow&quot;&gt;Darwin2K&lt;/a&gt; presented in a thesis written by Chris Leger at CMU. I am surprised no one has updated it or created a tool similar to it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To provide some context for my question, we are developing a robot to assist the elderly with domestic tasks. In this instance, the robot identifies and picks food items from a previously stored and known location. The hand opens the package and place it in the oven. The pick and place locations are fixed and nearby so the robot is stationary.&lt;/p&gt;&#xA;" OwnerUserId="881" LastEditorUserId="37" LastEditDate="2013-02-12T11:02:31.250" LastActivityDate="2021-04-21T21:34:04.503" Title="How do I select the best configuration for a known workspace, load and task?" Tags="&lt;design&gt;&lt;algorithm&gt;&lt;industrial-robot&gt;&lt;theory&gt;&lt;manipulator&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="901" PostTypeId="2" ParentId="896" CreationDate="2013-02-10T15:24:52.400" Score="7" Body="&lt;p&gt;A few things you should be on the lookout for:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Global shutter&lt;/strong&gt; basically means all pixels get captured at the same time, as opposed to Rolling shutter where they are captured sequentially in a line scan fashion. Since your UGV will be moving around and performing stereo algorithms over the images you capture, it could be important that you avoid aberrations that occure when camera move, such as the ones seen in the pictures below (taken from &lt;a href=&quot;http://en.wikipedia.org/wiki/Rolling_shutter&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia&lt;/a&gt;):&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/u8yKF.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/u8yKFm.jpg&quot; alt=&quot;Moving car taken with CMOS camera phone exhibits skew&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/EVM6g.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/EVM6gm.jpg&quot; alt=&quot;A photo exhibiting partial exposure. Lighting conditions changed between the exposure of the top and bottom parts of the photo.&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/Q6NJX.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Q6NJXm.jpg&quot; alt=&quot;A shot of a turboprop propeller&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Camera synchronization&lt;/strong&gt; in hardware is achievable by some cameras, notably firewire cameras AFAIK. That can greatly improve the results for stereo when things are moving around.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Mounting&lt;/strong&gt; should be done in a way that changes in the extrinsic parameters (the relative pose between cameras) for the stereo pair will be unlikely to change after calibration. In your rig that might be more important, since the UGV might face uneven terrain outdoors and things will vibrate.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Dedicated stereo hardware&lt;/strong&gt; makes it possible to acquire disparity images directly as output of your stereo vision system, which eases the load off your embedded computing. It also tends to be much faster than running the very same algorithms in software.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;As usual, the more you're willing to pay the better the results. To be honest, if you're able to buy a full-blown stereo camera such as the &lt;a href=&quot;http://www.ptgrey.com/products/bumblebee2/bumblebee2_stereo_camera.asp&quot; rel=&quot;noreferrer&quot;&gt;Bumblebee2&lt;/a&gt;, that's what I'd do. Otherwise, if you're on the cheaper side, I would simply go with a &lt;a href=&quot;http://www.xbox.com/en-US/kinect&quot; rel=&quot;noreferrer&quot;&gt;Kinect&lt;/a&gt;: it's unlikely you'll be able to get a system that outperforms it for the same price.&lt;/p&gt;&#xA;" OwnerUserId="95" LastEditorUserId="350" LastEditDate="2013-02-13T16:27:38.650" LastActivityDate="2013-02-13T16:27:38.650" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="902" PostTypeId="2" ParentId="883" CreationDate="2013-02-10T21:27:56.637" Score="1" Body="&lt;p&gt;Some years ago I have used the supervisor to know the position of a simulated Khepera robot in Webots 4.&#xA;The main components of the C code was the following:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Declarations:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  #define STEP 64&#xA;&#xA;  NodeRef robot_node;&#xA;  float robot_data[4]={0,0,0,0};&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Getting the node named Khepera:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  robot_node=(NodeRef)supervisor_node_get_from_def(&quot;KHEPERA&quot;);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Getting data from the node in every STEP milliseconds: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;supervisor_field_get(robot_node,SUPERVISOR_FIELD_TRANSLATION|SUPERVISOR_FIELD_ROTATION_ANGLE,&amp;amp;robot_data,STEP);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;All the above was called before the main cycle of the supervisor. The main cycle contained a &lt;code&gt;robot_step(STEP);&lt;/code&gt; call to let the system fill the elements of the robot data structure (x,y,z,head coordinates) regularly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Again it was Webots 4 may be there are better ways in Webots 7 to fulfill the task but it could be a starting point.&lt;/p&gt;&#xA;" OwnerUserId="577" LastActivityDate="2013-02-10T21:27:56.637" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="903" PostTypeId="2" ParentId="900" CreationDate="2013-02-11T04:58:18.347" Score="2" Body="&lt;p&gt;I'll just show why heuristics and experience are relevant in this problem by showing that is nearly impossible to solve optimally.  Note, genetic algorithms cannot necessarily always solve a problem optimally, they are just another heuristic-based search.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Defining the manipulator&lt;/strong&gt;&#xA;Let's simplify things. According to &lt;a href=&quot;http://books.google.com/books/about/Introduction_to_Robotics.html?id=MqMeAQAAIAAJ&quot; rel=&quot;nofollow&quot;&gt;Craig 2005&lt;/a&gt;, robot manipulators can be reasonably decomposed into &lt;a href=&quot;http://en.wikipedia.org/wiki/Prismatic_joint&quot; rel=&quot;nofollow&quot;&gt;prismatic&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Revolute_joint&quot; rel=&quot;nofollow&quot;&gt;revolute&lt;/a&gt; joints. Each such joint is &lt;a href=&quot;http://en.wikipedia.org/wiki/Degrees_of_freedom_%28mechanics%29&quot; rel=&quot;nofollow&quot;&gt;one degree of freedom&lt;/a&gt; in your &lt;em&gt;input&lt;/em&gt; space. That is, a hand on the end of the robot can be specified by a vectors of length $N$, where the robot has $N$ joints of types prismatic or revolute. OK. we can now specify the manipulator position. The set of all possible configurations is called the &lt;a href=&quot;http://en.wikipedia.org/wiki/Configuration_space&quot; rel=&quot;nofollow&quot;&gt;&lt;em&gt;configuration space&lt;/em&gt;&lt;/a&gt;. Let's assume we know this completely, as you stated.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Defining the task&lt;/strong&gt;&#xA;Let's assume that the task consists of moving the manipulator through a series of stages. For example, suppose the manipulator must drill 30 holes in a sheet, then place the sheet on a pallet, or whatever. Since we have the manipulator positions as a vector of length $N$, we can specify each task as a desired position, $X_1, X_2 ... X_M$ for task length $M$. What we've just done is specified a series of points in the &lt;em&gt;configuration space&lt;/em&gt; which we defined above. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;OK break time to verify the terminology if anyone is confused. Watch this &lt;a href=&quot;https://www.youtube.com/watch?v=ciSaT0eH5cY&quot; rel=&quot;nofollow&quot;&gt;video&lt;/a&gt;. The robot has 3 degrees of freedom (each rotation point), so the configuration space is all sets of 3 real numbers (in the range 0-$2\pi$, corresponding to the 3 angles of the 3 revolute joints). The task is to cause the end-effector (the pen) to visit all points on a circle. If this isn't clear, I can clarify.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Defining the cost&lt;/strong&gt; Now that we know the configuration space and the series of points, let's talk about cost. The cost is typically the force exerted by the joints. So suppose (a huge assumption), that we can model this directly as $f(X_1,X_2)$, a function which returns the energy to go from state $1$ to $2$. If we're lucky, the function is a &lt;a href=&quot;http://en.wikipedia.org/wiki/Metric_%28mathematics%29&quot; rel=&quot;nofollow&quot;&gt;&lt;em&gt;metric&lt;/em&gt;&lt;/a&gt;. If not, it defines &lt;a href=&quot;http://en.wikipedia.org/wiki/Complete_graph&quot; rel=&quot;nofollow&quot;&gt;a complete graph with $N\choose 2$&lt;/a&gt; links (the cost to go from any state to any other state).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Defining the problem&lt;/strong&gt; Find the optimal ordering of manipulator states and paths between manipulator states to minimize the cost, $f(X_i,X_{i+1})$ for each sequential task $i$. This is clearly a Travelling Salesperson Problem &lt;a href=&quot;http://en.wikipedia.org/wiki/Travelling_salesman_problem&quot; rel=&quot;nofollow&quot;&gt;(See: TSP)&lt;/a&gt;. Since TSP is &lt;a href=&quot;http://en.wikipedia.org/wiki/NP-hard&quot; rel=&quot;nofollow&quot;&gt;NP-Hard&lt;/a&gt;, this problem is &lt;a href=&quot;http://en.wikipedia.org/wiki/NP-complete#Formal_definition_of_NP-completeness&quot; rel=&quot;nofollow&quot;&gt;NP-Complete&lt;/a&gt;*.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;What does the above mean? Well, for a &lt;em&gt;given&lt;/em&gt; robot design, we have arrive at an NP-Complete problem to derive the optimal task sequence: movements, manipulator positions, etc. To optimize the &lt;em&gt;robot itself&lt;/em&gt; is even more difficult. First, we have to search over all possible robot configurations (subject to what??), and for each, solve an NP-Complete problem. The best result is the robot configuration we want.  For a small-dimensional workspace (say one joint, or $N=1$), and a simple task (say a small number of possitions like $M$=3 or so) this is not too difficult. However, in general, $N$ is unbounded, and $M$ is large. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even if there is some &lt;em&gt;ordering&lt;/em&gt; property on $N$, like a robot of 2 joints is better than a robot of 1 joints, etc, you still have to do $\log(n^\star)$ TSP solutions, where $n^\star$ is the perfect number of robot joints. Remember a TSP solution is incredibly difficult to solve optimally. This gets even worse if we want to say &quot;Well, what about two arms with two joints versus one arm with four joints.&quot;  I don't want to talk about that complexity ... It's exploding.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;&lt;strong&gt;So, because you can't solve it perfectly using computers, people pay big money to have an experienced engineer do it for them. Win-win?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*well not really, but along the way we show a polynomial time reduction, so it sorta counts.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt; What we actually did here was describe the algorithm to select the optimal manipulator design. That should answer your first question. However, it is computationally infeasible to run on a computer, and so heuristics and other design choices are necessary, that should answer your second question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What this means: We're also having this problem in our lab. Manipulators are very expensive, and we want one that is &lt;em&gt;just&lt;/em&gt; good enough to perform some task. What we converged to was an extremely minimal set of joints for each task, instead of one large and capable manipulator for all tasks. My advice: I would design the robot based on budget and programmability, rather than trying to make a claim about the optimal configuration.&lt;/p&gt;&#xA;" OwnerUserId="163" LastEditorUserId="163" LastEditDate="2013-02-11T17:10:39.167" LastActivityDate="2013-02-11T17:10:39.167" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="904" PostTypeId="2" ParentId="873" CreationDate="2013-02-11T06:09:43.257" Score="0" Body="&lt;p&gt;After reviewing the original post and the posted answers, I agree, the task is absolutely infeasible in real-time with Arduino.  Don't even bother - Arduino is off by orders of magnitude. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Have you considered strapping a larger USB stick/flash drive on board, and then simply using the copter as a &quot;sensor&quot;?  Fly the craft around, gather your 3D data, store it in flash, bring it home, and then aggregate/register/process your data offline. Very, very cool in my opinion.&lt;/p&gt;&#xA;" OwnerUserId="532" LastActivityDate="2013-02-11T06:09:43.257" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="905" PostTypeId="2" ParentId="897" CreationDate="2013-02-11T16:57:15.290" Score="0" Body="&lt;p&gt;I actually just ran into this and I found that my resistor going from my Arduino pin to the base was wrong. You might want to watch this video. It was very useful for me. &lt;a href=&quot;http://www.youtube.com/watch?v=DLl7-CmVT7w&quot; rel=&quot;nofollow&quot;&gt;http://www.youtube.com/watch?v=DLl7-CmVT7w&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="803" LastActivityDate="2013-02-11T16:57:15.290" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="906" PostTypeId="2" ParentId="900" CreationDate="2013-02-11T18:41:14.710" Score="2" Body="&lt;p&gt;The answer by &lt;a href=&quot;https://robotics.stackexchange.com/a/903/37&quot;&gt;Josh is excellent&lt;/a&gt; but here is an industrial perspective.&lt;/p&gt;&#xA;&lt;p&gt;In my experience, industrial robot design always starts with the requirements of the load and the design decisions ripple back from there.&lt;/p&gt;&#xA;&lt;p&gt;You need to look at the size, shape and weight of the object (or objects) to be manipulated, how fast you need to move the object and how accurate the control needs to be. Then you can marry this with details of &lt;em&gt;how&lt;/em&gt; the object is to be moved. At each stage you work out the worst case and give yourself a little &lt;em&gt;wriggle room&lt;/em&gt; in case something doesn't perform up to spec.&lt;/p&gt;&#xA;&lt;p&gt;Although you can attempt to use &lt;em&gt;average case&lt;/em&gt; rather than &lt;em&gt;worst case&lt;/em&gt;, it is risky to do so. Just because you think that no-one will ever drive both axis A and B to it's full extent at the same time, doesn't mean that someone won't &lt;em&gt;accidentally&lt;/em&gt; try to do it, and if arm AB isn't able to carry the weight in this configuration, it could be dangerous, both to the machine and any people nearby.&lt;/p&gt;&#xA;&lt;p&gt;If you are lucky, your mechanical designer has access to not only &lt;a href=&quot;http://en.wikipedia.org/wiki/Computer-aided_design&quot; rel=&quot;nofollow noreferrer&quot;&gt;CAD tools&lt;/a&gt;, but also &lt;a href=&quot;http://en.wikipedia.org/wiki/Computer-aided_engineering&quot; rel=&quot;nofollow noreferrer&quot;&gt;CAE tools&lt;/a&gt; such as &lt;a href=&quot;http://en.wikipedia.org/wiki/Finite_element_method&quot; rel=&quot;nofollow noreferrer&quot;&gt;Finite Element Analysis&lt;/a&gt;, but many small, specialist robotics firms can't afford expensive CAE systems and rely entirely on experience, judgement and judicious &lt;a href=&quot;http://en.wikipedia.org/wiki/Overengineering&quot; rel=&quot;nofollow noreferrer&quot;&gt;over-engineering&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Even where a company does have access to CAE tools, they will often be used sparingly. Since it is infeasible to simulate the whole of a complex system in one go, subsystems are instead analysed independently of each other.&lt;/p&gt;&#xA;&lt;p&gt;Ultimately as with many areas of expertise, there is no one-size-fits-all robotics solution. Every requirement has implications on a whole bunch of design decisions, and the effectiveness of the system is limited by the intersection of those design decisions.&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="37" LastEditDate="2021-04-21T21:34:04.503" LastActivityDate="2021-04-21T21:34:04.503" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="907" PostTypeId="1" CreationDate="2013-02-11T23:01:55.563" Score="9" ViewCount="434" Body="&lt;p&gt;A 2d laser scanner is mounted on a rotary axis. I wish to determine the transformation matrix from the center of the axis to the center of the scanner, using only the input from the scanner and the angle of rotation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/bygWj.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 2d scanner itself is assumed to be calibrated, it will accurately measure the position of any object inside the plane of the laser, in regards to the scanner origin.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The rotary axis is calibrated as well, it will accurately measure the angle of its own movement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The scanner is aligned and mounted close to the center of rotation, but the exact offset is unknown, and may drift over time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assume it is impractical to measure the position and orientation of the scanner directly. &#xA;I am looking for a way to determine the exact values for the 6 degrees of offset the scanner may have in relation to the axis, determined solely on the 2d information from the scanner and the rotation angle from the axis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/JtBDH.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am mainly interested in the 4 offsets depicted here, since the other two do not matter in regard to generating a consistent 3d point cloud from the input data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By scanning a known calibration object, it should be possible to determine these offsets. What are the mathematical formulas for this? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What sort of calibration information is required at a minimum?&#xA;Is it for example possible to determine all parameters simply by scanning a flat surface, knowing nothing about the surface except that it is flat?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(The transformation matrix from rotation axis to world is unknown as well, but that one is trivial to determine once the transformation from axis to camera is known.)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/TQh9z.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the left the camera is placed exactly on the rotational axis.  The camera scans a planar object with reference points A B and C. Based on the laser distance measurements and the angle of the axis, this planar object can be reconstructed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the right, the camera has an unknown offset to the axis. It scans the same object. If the point cloud is constructed without knowing this offset, the planar surface maps to a curved surface. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can I calculate the offset based on the surface curvature?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I know the real-world distances and angles between A, B and C, how can I calculate the camera offsets from that? What would be the minimum number of reference points I need for all 4 offsets?&lt;/p&gt;&#xA;" OwnerUserId="362" LastEditorUserId="362" LastEditDate="2013-02-18T07:53:19.880" LastActivityDate="2013-02-18T23:21:40.040" Title="Calibrate a 2d scanner mounted on a rotary axis" Tags="&lt;calibration&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="908" PostTypeId="1" AcceptedAnswerId="1188" CreationDate="2013-02-11T23:41:06.083" Score="5" ViewCount="1261" Body="&lt;p&gt;I've been looking into a &lt;a href=&quot;http://www.makeblock.cc/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Makeblock robotics kit&lt;/a&gt; but have found no information on the web that comes from end-users, and one of the main advertised features is not clear to me:  The slot threads shown below are straight, while the screw thread that will mate with them is angled.  Is there just very little contact between screw thread and rail thread vs. regular screw hole threads?  Or would the screw want to rest angled somewhat- and then the head would not be flush with the rim of the rail?  Or would the screw deform the aluminum rail if over-torqued?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a close up picture of the slot with screws:&#xA;&lt;img src=&quot;https://www.wired.com/wiredenterprise/wp-content/uploads//2012/12/makeblock-threaded-slot.jpg&quot; alt=&quot;makeblock closeup&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="884" LastEditorUserId="-1" LastEditDate="2017-03-10T09:42:48.900" LastActivityDate="2013-10-09T15:26:16.853" Title="How does the Makeblock threaded slot work?" Tags="&lt;mechanism&gt;&lt;kit&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="909" PostTypeId="1" CreationDate="2013-02-12T02:58:36.187" Score="1" ViewCount="85" Body="&lt;p&gt;I'm looking for a GPS tracking device without screen or apps. I just need it to look for the current position of a bus and send it to a server through TCP/IP protocol. This process must be constant so I can have a real-time tracking. The bus already has a wireless access point. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What device can be useful? Do I need another piece of hardware to send the coordinates to the server? I have no experience but... can something like an arduino connected to the gps send the data?&lt;/p&gt;&#xA;" OwnerUserId="886" LastEditorUserId="37" LastEditDate="2013-02-12T21:45:23.083" LastActivityDate="2013-02-12T21:45:23.083" Title="GPS tracking device" Tags="&lt;gps&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="910" PostTypeId="2" ParentId="909" CreationDate="2013-02-12T03:06:20.493" Score="2" Body="&lt;p&gt;I'm assuming you mean a passenger bus instead of a data bus. I'm also assuming you have access to a 12V output from the bus as well. If not you'll also need a battery.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Grab a Garmin GPS unit and an Arduino with Ethernet and USB. The Garmin outputs strings with the latitude and longitude over USB, which the Arduino can read in. Copy those strings to Ethernet packets and send it off via the TCP/IP connection. Easy as pie and one of the first projects I ever did with a microcontroller.  &lt;/p&gt;&#xA;" OwnerUserId="163" LastActivityDate="2013-02-12T03:06:20.493" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="911" PostTypeId="2" ParentId="907" CreationDate="2013-02-12T13:21:24.957" Score="1" Body="&lt;p&gt;If you can afford to have a small portion of your field of view obscured, you may want to consider having a &lt;a href=&quot;http://en.wikipedia.org/wiki/Fiduciary_marker&quot; rel=&quot;nofollow&quot;&gt;fiducial object&lt;/a&gt; somewhere in view.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With a suitable fiducial object, scanning it as your axis rotates, you should be able to calculate the four offsets you desire.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you cannot afford to have any of your field of view obscured under normal operation, then you may need to place your fiducial on an actuator of it's own, bringing it into view when you want to calibrate and taking it out for normal operation. The only issue here is that you limit the accuracy of your calibration by the accuracy of your fiducial actuator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that if some part of your field of view is already obscured by another part of your robot, and it may be suitable to use as a fiducial, or at the very least as a mounting point for one.&lt;/p&gt;&#xA;" OwnerUserId="37" LastActivityDate="2013-02-12T13:21:24.957" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="913" PostTypeId="1" AcceptedAnswerId="914" CreationDate="2013-02-12T16:16:00.323" Score="9" ViewCount="839" Body="&lt;p&gt;I am designing a new platform for outdoor robotics and I need to calculate the power and/or torque that is needed to move the platform. I have calculated that I need about 720 W of total power to move it (360W per motor), but I don't know how to calculate the torque that I need. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it really just about having the required power and ignoring the torque or is there a way to calculate it easily?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Already known parameters of the platform are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Weight of the whole platform: 75 kg.&lt;/li&gt;&#xA;&lt;li&gt;Number of wheels: 4.&lt;/li&gt;&#xA;&lt;li&gt;Number of powered wheels: 4.&lt;/li&gt;&#xA;&lt;li&gt;Diameter of wheels: 30 cm.&lt;/li&gt;&#xA;&lt;li&gt;Number of motors: 2.&lt;/li&gt;&#xA;&lt;li&gt;Wanted speed: 180 RPM (3 m/s).&lt;/li&gt;&#xA;&lt;li&gt;Wanted acceleration: &gt; 0.2 m/s^2&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="890" LastEditorUserId="825" LastEditDate="2013-02-13T14:01:55.657" LastActivityDate="2013-02-13T16:16:24.567" Title="Are power and torque required related in some way?" Tags="&lt;mobile-robot&gt;&lt;design&gt;&lt;motor&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="914" PostTypeId="2" ParentId="913" CreationDate="2013-02-12T17:00:14.150" Score="6" Body="&lt;p&gt;A good presentation on how to size your motors for a mobile robot is &lt;a href=&quot;http://www.scribd.com/doc/38698/Sizing-Electric-Motors-for-Mobile-Robotics&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sizing Electric Motors for Mobile Robotics&lt;/a&gt; from the &lt;a href=&quot;http://www.circpeoria.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Central Illinois Robotics Club&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The general procedure outlined there includes the following steps:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Step One: Determine total applied force at worst case&lt;/li&gt;&#xA;&lt;li&gt;Step Two: Calculate power requirement&lt;/li&gt;&#xA;&lt;li&gt;Step Three: Calculate torque and speed requirement&lt;/li&gt;&#xA;&lt;li&gt;Step Four: Find a motor that meets these requirements&lt;/li&gt;&#xA;&lt;li&gt;Step Five: Plot motor characteristics&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Since you also have an acceleration requirement, you will also need to factor that in as well.&lt;/p&gt;&#xA;" OwnerUserId="891" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2013-02-13T16:16:24.567" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="916" PostTypeId="2" ParentId="913" CreationDate="2013-02-12T20:36:08.047" Score="7" Body="&lt;p&gt;While the answer by &lt;a href=&quot;https://robotics.stackexchange.com/a/914/37&quot;&gt;freeman01in&lt;/a&gt; references a &lt;a href=&quot;http://www.scribd.com/doc/38698/Sizing-Electric-Motors-for-Mobile-Robotics&quot; rel=&quot;nofollow noreferrer&quot;&gt;useful presentation&lt;/a&gt; (&lt;a href=&quot;http://in.docsity.com/en-docs/Sizing+Electric+Motors+for+Mobile+Robotics-Robotics-Lecture+Slides&quot; rel=&quot;nofollow noreferrer&quot;&gt;alternative source&lt;/a&gt;) on the practical application aspect of your question, it is probably worth answering the specific question in the title too, in terms of first principles.&lt;/p&gt;&#xA;&lt;p&gt;From the &lt;a href=&quot;http://en.wikipedia.org/wiki/Power_%28physics%29&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia Power&lt;/a&gt; page:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;In physics, &lt;strong&gt;power&lt;/strong&gt; is the rate at which energy is transferred, used, or transformed. The unit of power is the joule per second (J/s), known as the watt ...&lt;/p&gt;&#xA;&lt;p&gt;Energy transfer can be used to do work, so power is also the rate at which this work is performed. The same amount of work is done when carrying a load up a flight of stairs whether the person carrying it walks or runs, but more power is expended during the running because the work is done in a shorter amount of time. The output power of an electric motor is the product of the torque the motor generates and the angular velocity of its output shaft. The power expended to move a vehicle is the product of the traction force of the wheels and the velocity of the vehicle.&lt;/p&gt;&#xA;&lt;p&gt;The integral of power over time defines the work done. Because this integral depends on the trajectory of the point of application of the force and torque, this calculation of work is said to be &amp;quot;path dependent.&amp;quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Meanwhile, from the &lt;a href=&quot;http://en.wikipedia.org/wiki/Torque&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia Torque&lt;/a&gt; page:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Torque, moment or moment of force (see the terminology below), is the tendency of a force to rotate an object about an axis,&lt;a href=&quot;https://robotics.stackexchange.com/a/914/37&quot;&gt;1&lt;/a&gt; fulcrum, or pivot. Just as a force is a push or a pull, a torque can be thought of as a twist to an object. Mathematically, torque is defined as the cross product of the lever-arm distance and force, which tends to produce rotation.&lt;/p&gt;&#xA;&lt;p&gt;Loosely speaking, torque is a measure of the turning force on an object such as a bolt or a flywheel. For example, pushing or pulling the handle of a wrench connected to a nut or bolt produces a torque (turning force) that loosens or tightens the nut or bolt.&lt;/p&gt;&#xA;&lt;p&gt;The symbol for torque is typically &lt;span class=&quot;math-container&quot;&gt;$\boldsymbol{\tau}$&lt;/span&gt;, the Greek letter tau. When it is called moment, it is commonly denoted &lt;span class=&quot;math-container&quot;&gt;$M$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The magnitude of torque depends on three quantities: the force applied, the length of the lever arm connecting the axis to the point of force application, and the angle between the force vector and the lever arm. ...&lt;/p&gt;&#xA;&lt;p&gt;The SI unit for torque is the newton metre (N·m).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;And from &lt;a href=&quot;http://en.wikipedia.org/wiki/Torque#Relationship_between_torque.2C_power.2C_and_energy&quot; rel=&quot;nofollow noreferrer&quot;&gt;Relationship between torque, power, and energy&lt;/a&gt; you get the formula:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Power is the work per unit time, given by &lt;span class=&quot;math-container&quot;&gt;$$P = \boldsymbol{\tau} \cdot \boldsymbol{\omega}$$&lt;/span&gt; where &lt;span class=&quot;math-container&quot;&gt;$P$&lt;/span&gt; is power, &lt;span class=&quot;math-container&quot;&gt;$\boldsymbol{\tau}$&lt;/span&gt; is torque, &lt;span class=&quot;math-container&quot;&gt;$\boldsymbol{\omega}$&lt;/span&gt; is the angular velocity, and &lt;span class=&quot;math-container&quot;&gt;$\cdot$&lt;/span&gt; represents the scalar product.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="37" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2013-02-13T01:25:46.573" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="917" PostTypeId="2" ParentId="897" CreationDate="2013-02-12T22:01:52.213" Score="6" Body="&lt;p&gt;It's possible that this isn't working because you have blown your transistor. There are a couple of things which could have blown it:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;No resistor to limit the base current&lt;/li&gt;&#xA;&lt;li&gt;No diode to protect against back EMF from the motor&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So you should add a base resistor, and a flyback diode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/HfX1h.png&quot; alt=&quot;Driving a motor with an NPN transistor.&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I always like to add an LED to the Arduino's output too, so that I can see exactly when the output is high. And if you're doing PWM on that pin, then the brightness of the LED tells you the duty cycle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Added:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason for putting the transistor below the motor is that it's easier to make it work. To switch on the transistor, I just have to push a little current through the base by bringing its voltage up higher than the emitter. But if the transistor was above the motor, and the motor was running at 12v, then it's going to be impossible for the Arduino to do this, because it can't generate a voltage high enough.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you put the transistor above the motor, you need to add &lt;em&gt;another&lt;/em&gt; transistor to help you deal with the large voltage required by the base.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/auKaY.png&quot; alt=&quot;High Side Driver&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this circuit they're using a FET, rather than an NPN transistor, so the base is called a gate, but the same thing applies.&lt;/p&gt;&#xA;" OwnerUserId="40" LastEditorUserId="40" LastEditDate="2013-02-13T10:30:04.347" LastActivityDate="2013-02-13T10:30:04.347" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="918" PostTypeId="1" AcceptedAnswerId="919" CreationDate="2013-02-14T09:59:40.490" Score="1" ViewCount="191" Body="&lt;p&gt;Does anybody know if Kinect Data can be stored directly onto a USB Drive?? &#xA;I have a Kinect for Windows that i cannot use on Linux(ROS). However what i plan is to mount the Kinect on my robot, store the captured frames on a USB and then un mount the USB ,transfer to Linux and process them on ROS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this possible?? Any suggestions.  &lt;/p&gt;&#xA;" OwnerUserId="853" LastActivityDate="2013-02-14T11:28:38.520" Title="Storing Kinect Data on a USB Drive" Tags="&lt;kinect&gt;&lt;ros&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="919" PostTypeId="2" ParentId="918" CreationDate="2013-02-14T11:23:28.993" Score="2" Body="&lt;p&gt;&lt;strong&gt;Can Kinect data be stored directly onto a USB drive?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yes. In ROS that would be easily done using bag files. In Windows, however, you might have to look for something native in the Microsoft SDK/OpenNI or code it yourself. &lt;em&gt;Edit: In OpenNI there is something called .oni files for that purpose.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The implicit question: Does Kinect for Windows work in Linux?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as I am aware, yes. From what I researched there were &lt;a href=&quot;https://groups.google.com/forum/#!topic/openni-dev/fFJM0DqLWq4&quot; rel=&quot;nofollow noreferrer&quot;&gt;compatibility issues with OpenNI initially&lt;/a&gt; but &lt;a href=&quot;https://groups.google.com/forum/#!topic/openni-dev/fFJM0DqLWq4&quot; rel=&quot;nofollow noreferrer&quot;&gt;they seem to be solved&lt;/a&gt; as of May 2012. There are reports of users successfully using K4W in both Windows and Linux there. See &lt;a href=&quot;https://robotics.stackexchange.com/questions/654/what-is-the-difference-between-kinect-for-windows-and-kinect-for-xbox&quot;&gt;this previous question&lt;/a&gt; for more info.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I assume the changes have made their way upstream, but the only way to be sure is to test it. If they haven't, you can always use the patched version referred in the link.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My suggestion is get your sensor working in Linux and don't waste your time trying to figure out how to save Kinect data to a USB drive in Windows.&lt;/p&gt;&#xA;" OwnerUserId="95" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2013-02-14T11:28:38.520" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="920" PostTypeId="2" ParentId="897" CreationDate="2013-02-14T13:49:45.700" Score="0" Body="&lt;p&gt;You need first to know how much current your motor draws at no load, and also at stall.&#xA;After that you need to choose a transistor that its collector or its drain can support the stall current. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You have to know that your current configuration is just for a one direction control, and to which direction that depends on the polarity. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You need an H-Bridge like L293-L298 for controlling in two directions.&lt;/p&gt;&#xA;" OwnerUserId="900" LastActivityDate="2013-02-14T13:49:45.700" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="921" PostTypeId="1" AcceptedAnswerId="1102" CreationDate="2013-02-14T16:56:23.807" Score="10" ViewCount="64650" Body="&lt;p&gt;I'm trying to connect a camera module to my Arduino Mega, connect my Mega to my Android phone (throught BlueTooth or other), and send the live view of the camera to the mobile phone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I saw a &lt;a href=&quot;http://www.youtube.com/watch?v=qEVXqOJz-GY&quot;&gt;video online&lt;/a&gt; that showed this for still images -- an image captured by the camera module on the Arduino was sent to Android and the output image was viewed after a couple of seconds (the time to send image by BT).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this doable with live video instead of image?  If yes, please guide me; if no, please suggest some workarounds.&lt;/p&gt;&#xA;" OwnerUserId="888" LastEditorUserId="888" LastEditDate="2013-02-14T21:19:41.833" LastActivityDate="2017-07-19T13:15:02.877" Title="How can I send video from my Arduino camera module video to my Android screen?" Tags="&lt;arduino&gt;&lt;cameras&gt;" AnswerCount="5" CommentCount="2" FavoriteCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="922" PostTypeId="1" CreationDate="2013-02-15T02:25:01.773" Score="6" ViewCount="167" Body="&lt;p&gt;I need to make an omni wheeled robot platform (4 wheels), which should go at a minimum speed of 15 cm/s.  I have an idea for the design, but since this is my first time doing something like this I have made &lt;strong&gt;a lot&lt;/strong&gt; of assumptions. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I decided to choose the &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__13360__TGY_S4505B_40g_4_8kg_0_10sec_Dual_Bearing_Analog_Servo.html&quot; rel=&quot;noreferrer&quot;&gt;TGY-S4505B&lt;/a&gt; servos as my motor system. I intend to attach these servos to &lt;a href=&quot;http://store.kornylak.com/ProductDetails.asp?ProductCode=FXA308B&quot; rel=&quot;noreferrer&quot;&gt;FXA308B&lt;/a&gt; wheels. Finally, I intend to power my servos with one &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__25030__Turnigy_LSD_6_0V_2300mAh_Ni_MH_Flat_Receiver_Pack.html&quot; rel=&quot;noreferrer&quot;&gt;Turnigy LSD 6.0V 2300mAh Ni-MH Flat Receiver Packs&lt;/a&gt; (not sure if LiPo is a better choice). I need to be able to run the servos continuously for roughly 8 minutes. You can ignore the microcontroller and other stuff, relatively speaking they will consume much less power. The robot will have four wheels (thus, four servos).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The basic specifications of each servo is:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Type: Analog&lt;/li&gt;&#xA;&lt;li&gt;Gear train: Plastic&lt;/li&gt;&#xA;&lt;li&gt;Bearings: Dual&lt;/li&gt;&#xA;&lt;li&gt;Motor Type: Carbon Brushed&lt;/li&gt;&#xA;&lt;li&gt;Weight: 40g (1.41oz)&lt;/li&gt;&#xA;&lt;li&gt;Lead: 30cm&lt;/li&gt;&#xA;&lt;li&gt;Torque: 3.9kg.cm @ 4.8v / 4.8kg.cm @ 6v&lt;/li&gt;&#xA;&lt;li&gt;Speed: 0.13sec 60°@ 4.8v / 0.10 60° @ 6v&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So based on my battery pack, I will be running the servos at 6V. That gives me a speed of 60 degrees per 0.10 seconds. I plan on modifying these servos for continuous rotation, and connected them directly to the wheel. Since the wheel has a diameter of ~5 cm, it has a circumference of ~15 cm. Based on these specs, it seems to me that my robot can move at roughly 15 cm/0.6 seconds, or 25 cm/s (quite fast actually). I don't intend to run it constantly at that speed, so in the 8 minute run, assume my average speed to be 20 cm/s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are these assumptions reasonable, and are the calculations correct?  I would really appreciate any insight, advice, recommendations, and criticisms you may have.&lt;/p&gt;&#xA;" OwnerUserId="901" LastEditorUserId="37" LastEditDate="2013-05-20T15:02:26.757" LastActivityDate="2013-05-20T15:02:26.757" Title="How do I design for a target speed?" Tags="&lt;mobile-robot&gt;&lt;wheel&gt;&lt;rcservo&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="923" PostTypeId="2" ParentId="235" CreationDate="2013-02-15T05:07:19.340" Score="5" Body="&lt;p&gt;You want to mount the batteries as close to the center of the hub and as close to the center both horizontally and vertically.  The closer it is, the less the controller has to work to keep the craft horizontally balanced and the less battery power you will use.&lt;/p&gt;&#xA;" OwnerUserId="902" LastActivityDate="2013-02-15T05:07:19.340" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="924" PostTypeId="1" AcceptedAnswerId="925" CreationDate="2013-02-15T08:20:41.940" Score="1" ViewCount="104" Body="&lt;p&gt;Do any of the TI &lt;a href=&quot;http://en.wikipedia.org/wiki/ARM_system-on-chip_architecture&quot; rel=&quot;nofollow&quot;&gt;ARM SOC&lt;/a&gt;s, e.g. &lt;a href=&quot;http://www.ti.com/lsds/ti/arm/sitara_arm_cortex_a_processor/sitara_arm_cortex_a8/omap3503_15_arm_cortex_a8/products.page?paramCriteria=no&quot; rel=&quot;nofollow&quot;&gt;OMAP&lt;/a&gt; or &lt;a href=&quot;http://www.ti.com/lsds/ti/dsp/video_processors/overview.page&quot; rel=&quot;nofollow&quot;&gt;Da Vinci&lt;/a&gt;, have a version with stacked RAM? (e.g. DDR2 or mDDR) For miniature robots like micro drones, it would be really nice to not need to spend board area on an external RAM chip. Thanks!&lt;/p&gt;&#xA;" OwnerUserId="106" LastEditorUserId="37" LastEditDate="2019-07-21T09:34:00.127" LastActivityDate="2019-07-21T09:34:00.127" Title="TI ARM with stacked RAM" Tags="&lt;arm-cpu&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="925" PostTypeId="2" ParentId="924" CreationDate="2013-02-15T16:46:18.593" Score="3" Body="&lt;p&gt;According to TI's website, &lt;a href=&quot;http://www.ti.com/general/docs/wtbu/wtbuproductcontent.tsp?templateId=6123&amp;amp;navigationId=12828&amp;amp;contentId=50020&quot; rel=&quot;nofollow noreferrer&quot;&gt;some of the OMAP processors (specifically the OMAP-DM5x range) have stacked RAM&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://focus.ti.com/en/multimedia/wtbu/OMAP-DM299-500-diagram.jpg&quot; alt=&quot;chip architecture&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More info &lt;a href=&quot;http://www.ti.com/lit/ml/swpt036/swpt036.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here (PDF)&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="-1" LastEditDate="2017-03-10T09:42:48.913" LastActivityDate="2013-02-15T16:46:18.593" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="926" PostTypeId="2" ParentId="921" CreationDate="2013-02-15T17:12:20.907" Score="0" Body="&lt;p&gt;To answer the question &quot;is it doable&quot;, I would say yes.  There is apparently a product called Looxcie that does this, according to &lt;a href=&quot;http://www.slashgear.com/looxcie-bluetooth-video-camera-review-with-an-htc-thunderbolt-11145337/&quot; rel=&quot;nofollow&quot;&gt;this review on Slashgear&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My guess is that it's using BlueTooth's &lt;a href=&quot;https://www.bluetooth.org/Building/HowTechnologyWorks/ProfilesAndProtocols/AVCTP.htm&quot; rel=&quot;nofollow&quot;&gt;Audio / Video Control Transport Protocol (AVCTP)&lt;/a&gt;, so you might check for devices and mobile phone software libraries that support AVCTP.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2013-02-15T21:01:42.250" LastActivityDate="2013-02-15T21:01:42.250" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="927" PostTypeId="2" ParentId="896" CreationDate="2013-02-15T20:18:42.453" Score="11" Body="&lt;p&gt;Off the top of my head I would go by the following selection criteria&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;color/b&amp;amp;w - usually b&amp;amp;w is better, since the stereo algorithms only use one channel anyway&lt;/li&gt;&#xA;&lt;li&gt;baseline - this really depends on the scene. With the baseline you control how much accuracy you get with distance. Wider baseline results in higher disparity values and thus less noise on the distance estimation. Higher baseline also means that you will get a reduced overlap between your field of views. Most importantly though, the wider the baseline the harder the matching between the two views. So the quality of the result goes down.&lt;/li&gt;&#xA;&lt;li&gt;shutter - always use a global shutter for anything with computer vision on mobile robots&lt;/li&gt;&#xA;&lt;li&gt;resolution - most stereo algorithms are computationally expensive. And you will likely not need that many 3d points. In the near field the sampling density is usually enough, and the far field your error from the low disparity is more of a problem than sampling density. 640x480 is fine in most cases. Some chips have a wider aspect ratio, which is favourable for the overlap, but you can get the same with using a sub-window of your chip.&lt;/li&gt;&#xA;&lt;li&gt;lens/field of view - for mobile outdoor robots I prefer a wide field of view over narrow field of view. More or less for the same reasons as the resolution. Make sure your lenses are rigid and have a means to fixate any moving parts e.g. like adjustable focal length. In most cases a fixed focal length is fine anyway, since you are limited by the selection of your baseline.&lt;/li&gt;&#xA;&lt;li&gt;trigger - when you create your own stereo rig, your cameras should support hardware trigger and ideally one should trigger the other.&lt;/li&gt;&#xA;&lt;li&gt;framerate - In my opinion the least important consideration. Unless you have a lot of processing power you won't be getting much more than something like 5 Hz anyway. So your algorithm is much more likely to be the bottleneck, rather than the chip or the connection.&lt;/li&gt;&#xA;&lt;li&gt;interface - Most cameras come with Firewire/USB2/USB3/Ethernet. USB2 is useless as it consumes a lot of CPU. Firewire is good if you have a port, but I think it seems to be on the decline in favour of USB3 these days. Didn't have much experience with USB3 yet. Ethernet is quite nice because you are more likely to find embedded systems with GigEthernet than USB3 at the moment.&lt;/li&gt;&#xA;&lt;li&gt;housing - as rigid as possible. Recalibrating is an annoying procedure.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="127" LastEditorUserId="127" LastEditDate="2020-06-02T11:48:12.183" LastActivityDate="2020-06-02T11:48:12.183" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="929" PostTypeId="2" ParentId="921" CreationDate="2013-02-16T10:31:10.710" Score="1" Body="&lt;p&gt;My solution is a workaround. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do not send the relatively large image frames via Bluetooth but I use the Android phone with OpenCV to shoot the live video and direct the Arduino via Bluetooth with a few short commands after image processing. The phone is located near the Arduino just as an Arduino connected camera would be.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to see the images - or some processed version of them - remotely you can use another phone connected to camera phone via a second Bluetooth connection. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not ready with the above, a Mindstorms NXT, Android, OpenCV version is &lt;a href=&quot;http://jataka.hu/rics/nxt_android_opencv/index.html&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="577" LastActivityDate="2013-02-16T10:31:10.710" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="931" PostTypeId="2" ParentId="878" CreationDate="2013-02-16T17:05:20.170" Score="1" Body="&lt;p&gt;What I've found 3d printing with SketchUp:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Use good geometry. Free Drawing should pretty much &lt;strong&gt;never&lt;/strong&gt; be used. Make sure all of your arcs &amp;amp; angles are clean.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You can &lt;strong&gt;not&lt;/strong&gt; have unclosed areas. Some programs are very good about this. Sketchup is &lt;strong&gt;not&lt;/strong&gt;. Lines that go no where should be removed, and all lines should be connected to the model.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Pick a good ruby script for exporting as an STL. There are many free scripts available, and any of them should work if you do what is mentioned above.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Good Luck!&lt;/p&gt;&#xA;" OwnerUserId="216" LastActivityDate="2013-02-16T17:05:20.170" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="933" PostTypeId="5" CreationDate="2013-02-16T19:00:30.070" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2013-02-16T19:00:30.070" LastActivityDate="2013-02-16T19:00:30.070" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="934" PostTypeId="4" CreationDate="2013-02-16T19:00:30.070" Score="0" Body="A programming language commonly used for controlling robotic devices " OwnerUserId="498" LastEditorUserId="498" LastEditDate="2013-02-19T12:08:51.967" LastActivityDate="2013-02-19T12:08:51.967" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="937" PostTypeId="2" ParentId="845" CreationDate="2013-02-17T07:58:15.883" Score="0" Body="&lt;p&gt;You probably want to do this, check it out. They also have code &lt;a href=&quot;http://personalrobotics.ri.cmu.edu/projects/moped.php&quot; rel=&quot;nofollow&quot;&gt;http://personalrobotics.ri.cmu.edu/projects/moped.php&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="911" LastActivityDate="2013-02-17T07:58:15.883" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="938" PostTypeId="2" ParentId="896" CreationDate="2013-02-17T20:42:08.547" Score="4" Body="&lt;p&gt;That is an interesting topic, and not very easy to get right on the first try. From experience with this, here are the most important things. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Synchronization&lt;/strong&gt;. The camera must be 100% synced. For example, say the UGV is driving at a modest 36Km/hr (10m/s)  and recording frames at 30 frames per second. That is, at every frame the UGV would cover 3m. Now, say your sync is off by 1ms, one of the cameras will be off by ~0.3m, which is bad [just off the top of my head]. Sync problems are very hard to detect.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Resolution&lt;/strong&gt;. In the context of stereo, we refer to depth resolution, or how much depth can we resolve given a change in disparity. An excellent explanation can be found here &lt;a href=&quot;http://pub1.willowgarage.com/~konolige/svs/disparity.htm&quot; rel=&quot;nofollow&quot;&gt;http://pub1.willowgarage.com/~konolige/svs/disparity.htm&lt;/a&gt; The equation you want to look at is a function of the focal length of the image and the stereo baseline. $\delta Z = \frac{Z^2}{Bf}\delta d$. This says that depth resolving power $\delta Z$ is inversely proportional to the baseline $B$ times the focal length $f$. That is the longer the baseline, the smaller $\delta Z$, the better. Meaning, you can resolve more depth. The minimum change in disparity $\delta d$ is controlled partially by the image resolution and the algorithm used. For your calculations, you can safely assume that $\delta d$ is at least $1/2$. It is better to be conservative with the choice of $\delta d$.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Overlap&lt;/strong&gt;. You want to have overlap between the cameras to get stereo. Hence, you need to choose a combination of lens focal length (field of view) and baseline so that you have enough overlap for the application. Basically, trigonometry work on the board, or a quick matlab/python script.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;For UGV's, there are two uses for stereo. &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Navigation and Pose Estimation&lt;/strong&gt; In this case you most probably need a large baseline + long focal length. This allows the stereo to see and resolve depth better and longer range.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Obstacle detection and avoidance&lt;/strong&gt; You will probably need a shorter baseline and wider lens (smaller focal length) so that  you can focus on things very close to you. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Some UGV's might have both stereo setups, the large baseline narrow field of view for navigation and another one or two for obstacle avoidance. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Be very careful what you buy. Some companies offer already built stereo setups. Those are great on the robustness side of things, they don't loose calibration easily and are always in sync. The problem is that the commercially available ones have a small baseline. If you want to build your own. I'm guessing you will end up doing so, make sure the camera are &lt;em&gt;syncable&lt;/em&gt;. Firewire is great for this, two camera on the same bus will sync with 125microsecond accuracy out of the box! USB and Gige cams are painful to sync.  When you put everything together, you want to make sure that the lenses are not going to move at all, and the baseline is rigid, very rigid for the application. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also be careful in lens selection. Not all lenses work with all cameras. Lenses have a resolution too. This is a another topic, here is a short article on this &lt;a href=&quot;http://www.qualitymag.com/articles/90642-q-a--selecting-lenses-for-machine-vision-systems&quot; rel=&quot;nofollow&quot;&gt;http://www.qualitymag.com/articles/90642-q-a--selecting-lenses-for-machine-vision-systems&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="911" LastActivityDate="2013-02-17T20:42:08.547" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="939" PostTypeId="1" AcceptedAnswerId="941" CreationDate="2013-02-17T21:09:19.683" Score="16" ViewCount="7242" Body="&lt;p&gt;For my robot, I am using two continuous rotation servos to spin a threaded rod. I am trying to make this project as cheap as possible. Here are the servos that I can find:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Servo #1: This is a very cheap option and it has half of the torque I need.&lt;/li&gt;&#xA;&lt;li&gt;Servo #2: This has all of the torque my project requires, but it is much more expensive that two of servo #1.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Can I hook up two of servo #1 to each end of the rod and have them move synchronized? I can spare a few extra pins on my microprocessor that I am using; that isn't a issue. I know hooking two together will increase torque, but I don't want 75% of the torque I want in this situation. Also, I don't care if I only have 98% of my torque &quot;goal&quot; with the extra weight (which probably won't happen) but I don't want to, like I said earlier, have 70, 80, 90% of my &quot;target goal&quot; of torque if possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help appreciated. Thanks in advance.&lt;/p&gt;&#xA;" OwnerUserId="824" LastEditorUserId="824" LastEditDate="2013-05-21T22:43:37.060" LastActivityDate="2013-11-21T05:03:51.717" Title="Will connecting two servo motors double the torque?" Tags="&lt;motor&gt;&lt;rcservo&gt;" AnswerCount="4" CommentCount="10" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="940" PostTypeId="1" AcceptedAnswerId="945" CreationDate="2013-02-18T11:18:22.693" Score="10" ViewCount="1869" Body="&lt;p&gt;I'm doing robotics research as an undergraduate, and I understand the conceptual math for the most part; however, when it comes to actually implementing code to calculate the forward kinematics for my robot, I am stuck. I'm just not getting the way the book or websites I've found explain it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to calculate the X-Y-Z angles given the link parameters (Denavit-Hartenberg parameters), such as the &lt;a href=&quot;https://i.stack.imgur.com/j6Cf6.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;following&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\begin{array}{ccc}&#xA;\bf{i} &amp;amp; \bf{\alpha_i-1} &amp;amp; \bf{a_i-1} &amp;amp; \bf{d_i} &amp;amp; \bf{\theta_i}\\&#xA;\\ &#xA;1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; \theta_1\\&#xA;2 &amp;amp; -90^{\circ} &amp;amp; 0 &amp;amp; 0 &amp;amp; \theta_2\\&#xA;3 &amp;amp; 0 &amp;amp; a_2 &amp;amp; d_3 &amp;amp; \theta_3\\&#xA;4 &amp;amp; -90^{\circ} &amp;amp; a_3 &amp;amp; d_4 &amp;amp; \theta_4\\&#xA;5 &amp;amp; 90^{\circ} &amp;amp; 0 &amp;amp; 0 &amp;amp; \theta_5\\&#xA;6 &amp;amp; -90^{\circ} &amp;amp; 0 &amp;amp; 0 &amp;amp; \theta_6\\&#xA;\end{array}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't understand how to turn this table of values into the proper transformation matrices needed to get $^0T_N$, the Cartesian position and rotation of the last link. From there, I'm hoping I can figure out the X-Y-Z angle(s) from reading my book, but any help would be appreciated.&lt;/p&gt;&#xA;" OwnerUserId="916" LastEditorUserId="350" LastEditDate="2013-03-18T15:43:13.703" LastActivityDate="2013-03-18T15:43:13.703" Title="How do I convert link parameters and angles (in kinematics) into transformation matrices in programming logic?" Tags="&lt;kinematics&gt;&lt;forward-kinematics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="941" PostTypeId="2" ParentId="939" CreationDate="2013-02-18T14:51:50.363" Score="18" Body="&lt;p&gt;In theory, you're correct.  But in practice, &lt;a href=&quot;http://finance.groups.yahoo.com/group/geckodrive/message/16536&quot; rel=&quot;nofollow noreferrer&quot;&gt;slight differences between the two motors will make them fight each other&lt;/a&gt; instead of working in perfect harmony:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Even the smallest mismatch in wire tolerances, lengths etc. will create&#xA;  different back emf characteristics due to different impedances.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;So both will work separately, but the actual characteristics of the 2&#xA;  motor within the very small timeframes of a &quot;minimum&quot; move at relatively&#xA;  high speed will not be in synch .. and thus the 2 motors fight each other.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;For this reason, your plan to save money by connecting a second servo to your microcontroller will probably &lt;em&gt;cost&lt;/em&gt; you money.  Not only are you shortening the life of the servos, you're doubling your chance of a servo failure.  Worse, the failure of one servo may cascade to the other unless you are using a mechanical linkage (as &lt;a href=&quot;https://robotics.stackexchange.com/a/943/350&quot;&gt;ApockofFork's answer&lt;/a&gt; recommends), e.g. &lt;a href=&quot;http://www.youtube.com/watch?v=3fDyULSO8KU&quot; rel=&quot;nofollow noreferrer&quot;&gt;the one in this video&lt;/a&gt;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;With that said, connecting multiple servos with a fixed linkage is done all the time, e.g. &lt;a href=&quot;https://i.stack.imgur.com/ejpnP.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;RC plane rudders&lt;/a&gt;, &lt;a href=&quot;http://www.youtube.com/watch?v=uVhBszHmvtA&quot; rel=&quot;nofollow noreferrer&quot;&gt;RC plane ailerons&lt;/a&gt;.  But to avoid the problems cited earlier, &lt;strong&gt;it requires an additional control component&lt;/strong&gt; that can compensate for the differences in the electrical characteristics of the servos.  These are commonly called &quot;servo equalizers&quot;, &quot;matchboxes&quot;, or &quot;servo synchronizers&quot;.  &lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2013-06-23T04:03:04.550" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="943" PostTypeId="2" ParentId="939" CreationDate="2013-02-18T23:05:59.580" Score="11" Body="&lt;p&gt;What &lt;a href=&quot;https://robotics.stackexchange.com/a/941/37&quot;&gt;Ians answer&lt;/a&gt; says about the two motors fighting is true however, I wouldn't go as far to say that you can never put two motors together for more power. In general  if the two motors are identical and you are hooking them up and controlling them identically then you can probably get away with it but I would expect some wasted energy and thus extra heat from the two motors fighting a little bit. You will also not get exactly two times the output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Worst of all it will probably hurt the lifespan of the motors. In other words it will probably do in a pinch but is definitely not ideal. If you really do, do a good job syncing them up then you can theoretically keep the losses to a manageable level.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are going to use two motors on the same output you will probably want to gear them together or use some other linkage that isn't fixed (I.E. don't attach them both to the same shaft). That way there is some looseness between them so they will fight each other a little less.&lt;/p&gt;&#xA;" OwnerUserId="201" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2013-02-19T16:50:05.033" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="944" PostTypeId="2" ParentId="907" CreationDate="2013-02-18T23:21:40.040" Score="1" Body="&lt;p&gt;The simplest method in this case is to essentially brute force the problem but to brute force it in an intelligent manner.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you will need is a set of data from the scanner while it is scanning an object, preferably a mathematically simple object like a cube or a sphere and the exact offset position or offset of that object relative to the mount of this scanner.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have these two pieces of information the next trick is essentially testing various combinations scanner offsets (what I would typically call calibration values) until you find offsets that cause the scanner data to accurately represent your object. For this you can either randomly guess values which can take forever and not get anywhere (but in theory would eventually get you the right answer) or you can use an &lt;a href=&quot;http://en.wikipedia.org/wiki/Mathematical_optimization&quot; rel=&quot;nofollow&quot;&gt;optimization method&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To use an optimization method you will need to develop some sort of metric to say whether a particular set of offsets works better than another set. Then whatever optimization method you are using will use that score to say whether to adjust the values in a particular direction. Eventually it will settle on a particular set of values that seem to work best.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a pretty brief and poor description of a very in depth topic but hopefully it will get you pointed in a direction. If you would like a more detailed description of anything leave a comment.&lt;/p&gt;&#xA;" OwnerUserId="201" LastActivityDate="2013-02-18T23:21:40.040" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="945" PostTypeId="2" ParentId="940" CreationDate="2013-02-18T23:24:21.857" Score="6" Body="&lt;p&gt;The &lt;a href=&quot;http://en.wikipedia.org/wiki/Denavit%E2%80%93Hartenberg_parameters&quot; rel=&quot;nofollow&quot;&gt;DH Matrix&lt;/a&gt; section of the DH page on wikipedia has the details.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically you want to use the information in your table to create a set of homogeneous transformation matrices. We do so because homogeneous transformations can be multiplied to find the relation between frames seperated by one or more others. For example, $^0T_1$ represents the transformation from frame 1 to frame 0 while $^1T_2$ represents the transformation from frame 2 to frame 1. By multiplying them we get the transformation from frame 2 to frame 0, i.e. $^0T_2 = ^0T_1^1T_2$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An easy way to create each of the transformations is to make a homogeneous transformation or homogeneous rotation matrix for each column in the table and multiply them together. For example, the transformation from 1 to 0 (e.g. $^{i-1}T_i, i = 1$) is&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$^0T_1 = Trans(d_1)*Rot(\theta_1)*Trans(a_2)*Rot(\alpha_2)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$Trans(d_1) = \begin{bmatrix}1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; \bf{d_1 = 0} \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \end{bmatrix},$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$Rot(\theta_1) = \begin{bmatrix} \text{cos}(\bf{\theta_1}) &amp;amp; - \text{sin}(\bf{\theta_1}) &amp;amp; 0 &amp;amp; 0 \\ \text{sin}(\bf{\theta_1}) &amp;amp; \text{cos}(\bf{\theta_1}) &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \end{bmatrix},$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$Trans(a_2) = \begin{bmatrix} 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; \bf{a_2 = 0} \\ 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \end{bmatrix},$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$Rot(\alpha_2) = \begin{bmatrix} 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; \text{cos}(\bf{\alpha_2 = 0}) &amp;amp; -\text{sin}(\bf{\alpha_2 = 0}) &amp;amp; 0 \\ 0 &amp;amp; \text{sin}(\bf{\alpha_2 = 0}) &amp;amp; \text{cos}(\bf{\alpha_2 = 0}) &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \end{bmatrix}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this case&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$^0T1 = Rot(\theta_1)$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you have all your transformations you multiply them togther, e.g.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$^0T_N = ^0T_1*^1T_2...^{N-1}T_N$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally you can read the displacement vector out of the homogenous transform $^0T_N$ (i.e. $d = [^0T_{N,14}, ^0T_{N,24}, ^0T_{N,34}]^T$). Similarly you can read out the rotation matrix from $^0T_N$ to find the X-Y-Z angles.&lt;/p&gt;&#xA;" OwnerUserId="177" LastEditorUserId="350" LastEditDate="2013-02-19T16:48:57.267" LastActivityDate="2013-02-19T16:48:57.267" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="946" PostTypeId="1" CreationDate="2013-02-19T01:51:50.357" Score="11" ViewCount="7360" Body="&lt;p&gt;I'm new to robot making and just got my first arduino to play around.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to make a robot that will wander on a table, and it will last longer I think if I could make it avoid falling from the table.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What will be the best way to make it detect the edge of a table so I can make it stop and turn around ? It have to be something reliable and preferably cheap.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It will also be better if I don't need to add extra stuff to the table so I can use it on any surface (my first idea was to draw path lines on the table and make a line follower robot, but I don't like this idea very much).&lt;/p&gt;&#xA;" OwnerUserId="920" LastEditorUserId="920" LastEditDate="2013-02-19T17:59:22.770" LastActivityDate="2013-02-20T17:54:30.887" Title="How can I detect the edge of a table?" Tags="&lt;sensors&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="947" PostTypeId="2" ParentId="946" CreationDate="2013-02-19T05:11:26.607" Score="7" Body="&lt;p&gt;An easy and cheap approach is to use a a touch sensor like a whisker. The controller just monitors whether the whisker is in contact with the ground, if one is not then it stops and moves away from that wisker.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another fairly cheap method is to use a set of &lt;a href=&quot;http://www.acroname.com/robotics/info/articles/sharp/sharp.html&quot;&gt;IR range finders&lt;/a&gt; pointed toward the ground. The controller then monitors the values returned from the rangers and if any of them go above some predefined threshold then the robot stops and moves away from that sensor.&lt;/p&gt;&#xA;" OwnerUserId="177" LastActivityDate="2013-02-19T05:11:26.607" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="948" PostTypeId="1" CreationDate="2013-02-19T09:54:40.927" Score="4" ViewCount="747" Body="&lt;p&gt;A robotic joint is connected to two actuators, e.g. air muscles. One flexes the joint, while the other extends it. This arrangement is called 'antagonistic'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/7FNlN.png&quot; alt=&quot;Pneumatic Muscle Joint&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But what if I had an electric motor instead of the air muscles? In that case it can only pull on one tendon at a time, and it's not antagonistic. What it the arrangement called in this case? Untagonistic?&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2013-02-24T15:02:47.147" Title="What is the opposite of 'Antagonistic'?" Tags="&lt;motor&gt;&lt;air-muscle&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="949" PostTypeId="2" ParentId="946" CreationDate="2013-02-19T12:25:44.840" Score="15" Body="&lt;p&gt;The Roomba solution to this problem was to add &lt;a href=&quot;http://uksupport.irobot.com/app/answers/detail/a_id/964/~/what-are-cliff-sensors?&quot; rel=&quot;noreferrer&quot;&gt;cliff sensors&lt;/a&gt;, which are really just downward facing &lt;a href=&quot;http://en.wikipedia.org/wiki/Proximity_sensor&quot; rel=&quot;noreferrer&quot;&gt;proximity sensors&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/File:Sharp_GP2Y0A21YK_IR_proximity_sensor_cropped.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0pwNg.jpg&quot; alt=&quot;Sharp GP2Y0A21YK infrared proximity sensor. The sensor has an analog output that varies from 3.1V at 10cm to 0.4V at 80cm.&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although this technique seems to have problems with some surfaces, such as &lt;a href=&quot;http://www.pottsland.com/roomba/Roomba_5xx_Cliff_Sensor.html&quot; rel=&quot;noreferrer&quot;&gt;dark tile floors&lt;/a&gt;, it sounds like this won't be a problem for your application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can even make one yourself with an IR LED and an IR photo diode, for example this &lt;a href=&quot;http://www.instructables.com/id/DIY-Infrared-Proximity-Sensor-Arduino-Compatible/&quot; rel=&quot;noreferrer&quot;&gt;Arduino Compatible DIY Infrared Proximity Sensor&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might also be able to get some ideas from &lt;a href=&quot;http://www.instructables.com/id/Tiny-Wanderer-A-Table-Top-Robot/&quot; rel=&quot;noreferrer&quot;&gt;Tiny Wanderer - A Table Top Robot&lt;/a&gt; over on &lt;a href=&quot;http://www.instructables.com/&quot; rel=&quot;noreferrer&quot;&gt;instructables&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="37" LastEditDate="2013-02-20T17:54:30.887" LastActivityDate="2013-02-20T17:54:30.887" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="950" PostTypeId="2" ParentId="946" CreationDate="2013-02-19T15:38:13.263" Score="4" Body="&lt;p&gt;There are a number of different approaches to solving this problem:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Distance Sensors&lt;/li&gt;&#xA;&lt;li&gt;Touch Sensor&lt;/li&gt;&#xA;&lt;li&gt;RFID Tags around the edge of the table (Or magnets)&lt;/li&gt;&#xA;&lt;li&gt;Camera (Using image processing, would be harder and the arduino would probably not be powerful enough for this)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;With the distance sensor you will need to check whether it is a digital or analogue signal provided by the sensor. For the purpose of your 'cliff sensor' you would probably be fine with digital as you would be able to use the sensor as a toggle to detect when the distance is over a minimum distance. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are interested in analogue sensors to provide more information (such as distance from a wall) than just a toggle switch you will need to check what the range is on the device. The sharp sensor pictured in the answer above will provide you with a voltage, which you will have to convert into a distance (It has an inverse relationship with distance). You will require 3 sensors to cover the same range of distances that an ultrasonic sensor covers (e.g. SRF08 Ultrasonic Range Finder). Sharp GP2D120 Distance Measurement Sensor 4-30cm for short range, the Sharp GP2Y0A02YK Distance Measurement Sensor 20-150cm for medium range, and the Sharp GP2Y0A710K0F Distance Measurement Sensor 100-550cm for the long range sensor. I had issues with the ultrasonic sensor dropping to zero sporadically, so you would need to program a catch statement if this dropout is unacceptable in your application. The SRF08 Ultrasonic Range Finder was much easier to work with as it had been tuned by the manufacturer.&lt;/p&gt;&#xA;" OwnerUserId="925" LastActivityDate="2013-02-19T15:38:13.263" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="951" PostTypeId="2" ParentId="948" CreationDate="2013-02-19T16:37:11.683" Score="5" Body="&lt;p&gt;The opposite of an &lt;a href=&quot;http://en.wikipedia.org/wiki/Antagonist_%28muscle%29&quot; rel=&quot;nofollow&quot;&gt;antagonist muscle&lt;/a&gt; is an &lt;a href=&quot;http://en.wikipedia.org/wiki/Agonist_%28muscle%29&quot; rel=&quot;nofollow&quot;&gt;agonist muscle&lt;/a&gt;, but that doesn't really answer your question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In nature, muscles are found in &lt;em&gt;antagonistic pairs&lt;/em&gt; because they can only really contract, thus once a muscle is contracted, only an opposing muscle can effectively change the state back again (unless the &lt;em&gt;muscle's natural state is opposite to that which is produced by the muscle&lt;/em&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your system, by using a single motor to replace both flexor &lt;em&gt;muscle&lt;/em&gt; and extensor &lt;em&gt;muscle&lt;/em&gt; you are departing from the way nature works and thus the analogy breaks down. As far as I can see, there is unlikely to be a term from nature which can answer your question without compromising the metaphor, but since you have a single motor which is both flexing and extending your joint, you could just call it an &lt;em&gt;agonist&lt;/em&gt;.&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="37" LastEditDate="2013-02-19T16:47:26.847" LastActivityDate="2013-02-19T16:47:26.847" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="952" PostTypeId="1" AcceptedAnswerId="7904" CreationDate="2013-02-19T21:02:05.790" Score="15" ViewCount="4597" Body="&lt;p&gt;I'm trying to create a map of the obstacles in a fairly coarse 2D grid space, using exploration.  I detect obstacles by attempting to move from one space to an adjacent space, and if that fails then there's an obstacle in the destination space (there is no concept of a rangefinding sensor in this problem).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.eriding.net/resources/general/prim_frmwrks/images/asses/asses_y3_5d_3.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;example grid http://www.eriding.net/resources/general/prim_frmwrks/images/asses/asses_y3_5d_3.gif&lt;/a&gt; (for example)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The process is complete when all the reachable squares have been visited.  In other words, some spaces might be completely unreachable even if they don't have obstacles because they're surrounded.  This is expected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the simplest case, I could use &lt;a href=&quot;https://stackoverflow.com/a/11556238/2063546&quot;&gt;a DFS algorithm&lt;/a&gt;, but I'm worried that this will take an excessively long time to complete &amp;mdash; the robot will spend more time backtracking than exploring new territory.  I expect this to be especially problematic when attempting to reach the unreachable squares, because the robot will exhaust every option.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the more sophisticated method, the proper thing to do seems to be &lt;a href=&quot;http://en.wikipedia.org/wiki/Boustrophedon_cell_decomposition&quot; rel=&quot;nofollow noreferrer&quot;&gt;Boustrophedon cell decomposition&lt;/a&gt;.&lt;br&gt;&#xA;&lt;img src=&quot;https://i.stack.imgur.com/Kagw3.gif&quot; alt=&quot;Boustrophedon cell decomposition&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I can't seem to find a good description of the Boustrophedon cell decomposition algorithm (that is, a complete description in simple terms).  There are resources like &lt;a href=&quot;http://planning.cs.uiuc.edu/node352.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this one&lt;/a&gt;, &lt;a href=&quot;http://planning.cs.uiuc.edu/node262.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;or this more general one on vertical cell decomposition&lt;/a&gt; but they don't offer much insight into the high-level algorithms nor the low-level data structures involved.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I visit (map) this grid efficiently?  If it exists, I would like an algorithm that performs better than &lt;span class=&quot;math-container&quot;&gt;$O(n^2)$&lt;/span&gt; with respect to the total number of grid squares (&lt;em&gt;i.e.&lt;/em&gt; better than &lt;span class=&quot;math-container&quot;&gt;$O(n^4)$&lt;/span&gt; for an &lt;span class=&quot;math-container&quot;&gt;$n*n$&lt;/span&gt; grid).&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="15160" LastEditDate="2018-12-31T12:01:58.623" LastActivityDate="2019-01-12T00:58:52.033" Title="What's an efficient way to visit every reachable space on a grid with unknown obstacles?" Tags="&lt;algorithm&gt;&lt;coverage&gt;&lt;planning&gt;" AnswerCount="2" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="953" PostTypeId="1" CreationDate="2013-02-20T05:53:07.863" Score="8" ViewCount="907" Body="&lt;p&gt;I am having some issues with the &lt;a href=&quot;http://ardrone2.parrot.com/usa/&quot;&gt;ARDrone Parrot 2.0&lt;/a&gt; and hope someone else may be running into the same thing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While hovering, the drone is (seemingly) randomly losing altitude then recovering . It is doing so while not being commanded any velocity inputs and should hold altitude. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;We are using the drivers from the &lt;a href=&quot;https://github.com/AutonomyLab/ardrone_autonomy/tree/dev-unstable&quot;&gt;ardrone_autonomy (dev_unstable branch) on github&lt;/a&gt;. We are able to watch the PWM outputs being sent to the motor and they are dropping from the hover command do a small value before exponentially returning to the hover value when this drop occurs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The issue could be a communication between the IMU and the onboard controller or on our software control implementation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Has anyone seen a similar problem or suggestions to test/troubleshoot what is happening?&lt;/p&gt;&#xA;" OwnerUserId="772" LastEditorUserId="350" LastEditDate="2013-02-20T14:31:48.910" LastActivityDate="2013-04-21T19:09:15.137" Title="Dropping PWM on Ardrone Parrot 2.0" Tags="&lt;ros&gt;&lt;quadcopter&gt;&lt;pwm&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="954" PostTypeId="1" CreationDate="2013-02-20T06:15:26.710" Score="6" ViewCount="3351" Body="&lt;p&gt;I'm using Teensy hardware specifically.  I have a Teensy 2.0 and a Teensy 3.0, and from the documentation it seems like there are two 16 bit timers available, and each should be able to control 12 servos.  However, I've attached a logic analyzer and have confirmed that only the first 12 servos attached ever function.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there anything special I have to do with my sketch in order to convince the Servo library to allocate the second timer for servos attached beyond number 12?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This works:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#define NUM_SERVOS 12&#xA;&#xA;Servo servos[NUM_SERVOS];&#xA;&#xA;// teensy 2.0 pins&#xA;int pin_assignments[NUM_SERVOS] = {0, 1, 2, 3, 4, 5, 20, 19, 18, 17, 16, 15};&#xA;&#xA;void setup() { &#xA;  for(int i = 0; i &amp;lt; NUM_SERVOS; i++) {&#xA;    servos[i].attach(pin_assignments[i]) ;&#xA;  }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But this, below, only ever shows activity on the first twelve pins attached:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#define NUM_SERVOS 24&#xA;&#xA;Servo servos[NUM_SERVOS];&#xA;&#xA;// teensy 3.0 pins&#xA;int pin_assignments[NUM_SERVOS] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23};&#xA;&#xA;&#xA;void setup() { &#xA;  for(int i = 0; i &amp;lt; NUM_SERVOS; i++) {&#xA;    servos[i].attach(pin_assignments[i]) ;&#xA;  }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="928" LastEditorUserId="37" LastEditDate="2013-05-20T16:01:48.000" LastActivityDate="2021-01-26T11:28:48.607" Title="Controlling more than 12 Servos with the Arduino Servo library" Tags="&lt;arduino&gt;&lt;rcservo&gt;" AnswerCount="5" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="955" PostTypeId="2" ParentId="229" CreationDate="2013-02-20T10:03:24.740" Score="4" Body="&lt;p&gt;This has been merged as of six weeks ago:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/ros/ros_comm/commit/8a1f92fc0c888099fe47005f609883601b7d8d72#diff-1&quot; rel=&quot;nofollow&quot;&gt;https://github.com/ros/ros_comm/commit/8a1f92fc0c888099fe47005f609883601b7d8d72#diff-1&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="84" LastActivityDate="2013-02-20T10:03:24.740" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="956" PostTypeId="2" ParentId="953" CreationDate="2013-02-20T12:00:10.790" Score="1" Body="&lt;p&gt;I have not used the ARDrone but have experience with height hold on another autopilot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Without the further information, a quick google search found a possible firmware issue with ARDrone in &lt;a href=&quot;http://forum.parrot.com/ardrone/en/viewtopic.php?id=17&quot; rel=&quot;nofollow noreferrer&quot;&gt;this thread&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are using the onboard ultrasound sensor then as I mentioned in my post on &lt;a href=&quot;https://robotics.stackexchange.com/questions/946/how-can-i-detect-the-edge-of-a-table&quot;&gt;How can I detect the edge of a table?&lt;/a&gt;. The ultrasound sensors can jump to zero sporadically for part of a second and this could cause the ARDrone to change altitude and then jump back to the real value.&lt;/p&gt;&#xA;" OwnerUserId="925" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2013-02-20T18:02:41.733" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="957" PostTypeId="1" AcceptedAnswerId="995" CreationDate="2013-02-20T14:54:30.407" Score="5" ViewCount="203" Body="&lt;p&gt;I have come across a number of methods for developing wall-climbing robots.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Suction&lt;/li&gt;&#xA;&lt;li&gt;Chemical Adhesion&lt;/li&gt;&#xA;&lt;li&gt;Gecko like hair adhesion&lt;/li&gt;&#xA;&lt;li&gt;Electroadhesion&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Which method would be the best for heavy robots (5kg+)? Are there any other methods that I have missed?&lt;/p&gt;&#xA;" OwnerUserId="925" LastEditorUserId="350" LastEditDate="2013-02-20T15:00:17.027" LastActivityDate="2013-03-02T22:50:35.107" Title="Adhesion for a heavy wall-climbing robot" Tags="&lt;mobile-robot&gt;" AnswerCount="2" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="958" PostTypeId="2" ParentId="952" CreationDate="2013-02-20T22:09:35.013" Score="12" Body="&lt;p&gt;Boustrophedon cell decomposition is simply sub-dividing an environment into areas which can be efficiently covered by a boustrophedon path. A trapezoidal decomposition will do, and can be accomplished using a line-sweep algorithm.&#xA;See [Choset 2000], &lt;a href=&quot;http://www.personal.kent.edu/~rmuhamma/Compgeometry/MyCG/PolyPart/polyPartition.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;This web site&lt;/a&gt;&#xA;, or (I recommend!) the excellent book &quot;Computational Geometry&quot; by Mark de Berg, et. al, for a complete description of the data structures and algorithms required.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Choset, Howie. &quot;Coverage of Known Spaces: The Boustrophedon Cellular Decomposition&quot; &lt;em&gt;Autonomous Robots&lt;/em&gt;, 2000.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;For example, consider the set of obstacles as edges and vertices. Let's say the environment is also bounded by a special polygon. We have something like the following. To decompose this space, we simply add vertical edges between every vertex and the nearest line or vertex.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To accomplish this in code, you need only a line-segment intersection test, a sorted list of edges, and a sorted list of vertices. &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;From every vertex &lt;span class=&quot;math-container&quot;&gt;$v_i$&lt;/span&gt; in left-to-right order,&lt;/li&gt;&#xA;&lt;li&gt;Create a vertical line &lt;span class=&quot;math-container&quot;&gt;$l_i$&lt;/span&gt; at each &lt;span class=&quot;math-container&quot;&gt;$v_i$&lt;/span&gt;, extended until the first edge or vertex it intersects&lt;/li&gt;&#xA;&lt;li&gt;At each intersection, create a new vertex. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;When this is done, the set of new edges and vertices encloses only trapezoids. But I emphasize, you can't do this &lt;em&gt;online&lt;/em&gt; (without prior knowledge of the obstacles). If you want to do robust coverage without prior knowledge, you might look at &quot;bug algorithms.&quot; In particular, here's a simple algorithm, assuming the environment is bounded.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;From the start position, move up and left until you reach the upper-left corner of the environment. If you encounter an obstacle first, you must travel around it. You know something is an obstacle if it can be circumnavigated (bump and move).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;From the upper left, move right until you encounter the boundary. Then move down and left (We're doing a boustrophedon of the entire space).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;When you are on a left-right line and encounter an obstacle, you have two options.  (i) We can circumnavigate until we reach the left-right line we are trying to cover, then continue.  (ii), We can turn around and cover a new left-right line until we find our way past the obstacle or end up in this situation again.  I'll illustrate. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;On the left, we move around the obstacle until we can return to the &quot;line&quot; we were trying to follow. On the right, we continue covering the (smaller) area on the one side of the obstacle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The advantage of the first method is you always map out the obstacle completely before you make a decision about how to get around it, thus you can take the shorter path. The advantage of the second method is you don't have to get around the obstacle at all, you can just proceed to cover the area you are in. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Note that this defines your boustrophedon decomposition in an online way&lt;/em&gt;: You cover the area between the obstacles or between the obstacles and the boundary.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, as far as I know, the first method is easier to analyze. The more complicated algorithms (like BFS, etc), are chosen either because the environment is unbounded (you don't want to spend forever looking for a boundary), or there is a really nasty obstacle in the way that basically partitions the environment.  Why is this bad? look at this example:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Moving left-right, then circling each obstacle produces &lt;em&gt;way&lt;/em&gt; too many covers of the small parts between each obstacle. In fact, without global path planning, you can make this as bad as the resolution of your grid by placing these columns 1 px wide, as tall as the entire environment and 1 px apart. Then you'd have to move around the obstacle each time you hit it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is why I asked if you had some idea of where you were in the environment or could do global path planning. But the &lt;em&gt;online&lt;/em&gt; vs &lt;em&gt;offline&lt;/em&gt; discussion and optimal algorithms for this is not what you really wanted.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Update: I had to remove the images (not https), and will post this which is often used in practical real-world applications. &lt;a href=&quot;http://www.cs.cmu.edu/~motionplanning/papers/sbp_papers/integrated1/yamauchi_frontiers.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.cs.cmu.edu/~motionplanning/papers/sbp_papers/integrated1/yamauchi_frontiers.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="163" LastEditorUserId="163" LastEditDate="2019-01-12T00:58:52.033" LastActivityDate="2019-01-12T00:58:52.033" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="959" PostTypeId="2" ParentId="2" CreationDate="2013-02-21T02:45:21.020" Score="2" Body="&lt;p&gt;Don't, instead get yourself some &lt;a href=&quot;http://www.pololu.com/catalog/category/51&quot; rel=&quot;nofollow noreferrer&quot;&gt;decent motors&lt;/a&gt; and drive them via an h-bridge like you'll find on this &lt;a href=&quot;http://arduino.cc/en/Main/ArduinoMotorShieldR3&quot; rel=&quot;nofollow noreferrer&quot;&gt;motor shield&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/fNMxg.jpg&quot; alt=&quot;Pololu motors&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/6uKlD.jpg&quot; alt=&quot;Arduino Motor Shield&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="35" LastActivityDate="2013-02-21T02:45:21.020" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="960" PostTypeId="2" ParentId="922" CreationDate="2013-02-21T02:51:53.533" Score="2" Body="&lt;p&gt;With all you're going to invest in your robot, it's a better idea to start off with a more solid drive train than a servo.  Take a look at a DC motor with an integrated gearbox and start from there.  Your servo approach won't be as energy efficient, performant, and it won't last as long.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A great reference to start with is &lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/0071408509&quot; rel=&quot;nofollow noreferrer&quot;&gt;Building Robot Drive Trains&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/wREwW.jpg&quot; alt=&quot;Pololu gear motor&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/h0MKD.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="35" LastActivityDate="2013-02-21T02:51:53.533" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="961" PostTypeId="2" ParentId="939" CreationDate="2013-02-21T02:57:20.777" Score="4" Body="&lt;p&gt;Put some value on your time and on system reliability.  You're increasing design time &amp;amp; failure points with this approach.  Good small gear motors are pretty cheap to start with, it's a lot more valuable to have a working robot that's reliable than a broken or unfinished robot on the shelf.&lt;/p&gt;&#xA;" OwnerUserId="35" LastActivityDate="2013-02-21T02:57:20.777" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="962" PostTypeId="2" ParentId="897" CreationDate="2013-02-21T06:55:02.840" Score="3" Body="&lt;p&gt;And for the 'I'd rather be designing the sensors and grippers' of us, consider a ready made motor shield for Arduino such as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.pololu.com/catalog/product/2504&quot; rel=&quot;nofollow noreferrer&quot;&gt;Polulu Zumo Shield&lt;/a&gt; (1.2 amp motors) or the &lt;a href=&quot;http://arduino.cc/en/Main/ArduinoMotorShieldR3&quot; rel=&quot;nofollow noreferrer&quot;&gt;Arduino Motor Shield&lt;/a&gt; (2 amp motors) or the &lt;a href=&quot;http://a.pololu-files.com/picture/0J4024.600.jpg?f1bcdd7324bf6307a61598052a9cede0&quot; rel=&quot;nofollow noreferrer&quot;&gt;Polulu Dual Motor Driver Shield&lt;/a&gt; (3.0 amp motors).&#xA;&lt;img src=&quot;https://i.stack.imgur.com/aQUEm.jpg&quot; alt=&quot;Polulu Zumo Shield&quot;&gt;&#xA;&lt;img src=&quot;https://i.stack.imgur.com/FHdyt.jpg&quot; alt=&quot;Arduino Motor Shield&quot;&gt;&#xA;&lt;img src=&quot;https://i.stack.imgur.com/TI6SZ.jpg&quot; alt=&quot;Polulu Dual Motor Driver Shield&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="35" LastActivityDate="2013-02-21T06:55:02.840" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="963" PostTypeId="1" CreationDate="2013-02-21T08:09:56.070" Score="6" ViewCount="919" Body="&lt;p&gt;I asked this question on &lt;a href=&quot;http://answers.ros.org/question/53784/simulated-kinect-rotation-around-x-bug/&quot; rel=&quot;nofollow noreferrer&quot;&gt;answers.ros.org&lt;/a&gt; and &lt;a href=&quot;http://answers.gazebosim.org/question/1177/simulated-kinect-rotation-around-x-bug/&quot; rel=&quot;nofollow noreferrer&quot;&gt;gazebo.ros.org&lt;/a&gt; but still haven't got any answer. I'm posting my question here with the hope someone can help me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In our robot, the Kinect can be mounted on the side of the arm, as shown in the screenshot below. When running the simulation in Fuerte, I found this weird behaviour. As you can observe on the image, the point cloud does not match the robot model (we see a partial image of the hand/arm at the bottom left of the screenshot, which should be on the robot model).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/I07Oq.png&quot; alt=&quot;Rotate Kinect&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As soon as I rotate the kinect against its X axis (so that the kinect is horizontal as you can see on the second screenshot), then the point cloud and robot model are aligned properly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/br1WO.png&quot; alt=&quot;Horizontal Kinect&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The kinect xacro and dae are the one from the turtlebot. I'm simply attaching them with a rotation:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;joint name=&quot;base_camera_joint&quot; type=&quot;fixed&quot;&amp;gt;&#xA;  &amp;lt;origin  xyz=&quot;0.01216 0.1713 0.433&quot;&#xA;       rpy=&quot;-&lt;span class=&quot;math-container&quot;&gt;${M_PI/2} $&lt;/span&gt;{M_PI/4} -${M_PI/12}&quot; /&amp;gt; &#xA;  &amp;lt;!-- This -pi/2 in origin rpy is the offending parameter --&amp;gt;&#xA;&#xA;  &amp;lt;parent link=&quot;shadowarm_trunk&quot;/&amp;gt;&#xA;  &amp;lt;child link=&quot;camera_link&quot; /&amp;gt;&#xA;&amp;lt;/joint&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The code can be seen on github.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help is greatly appreciated!&lt;/p&gt;&#xA;" OwnerUserId="114" LastEditorUserId="15160" LastEditDate="2019-01-02T17:24:27.750" LastActivityDate="2019-01-02T17:24:27.750" Title="Simulated kinect rotation around X [gazebo bug?]" Tags="&lt;kinect&gt;&lt;ros&gt;&lt;simulator&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="964" PostTypeId="1" AcceptedAnswerId="966" CreationDate="2013-02-21T13:50:43.330" Score="15" ViewCount="4635" Body="&lt;p&gt;In the prediction step of EKF localization, linearization must be performed and (as mentioned in &lt;a href=&quot;http://books.google.co.uk/books/about/Probabilistic_Robotics.html?id=k_yOQgAACAAJ&amp;amp;redir_esc=y&quot; rel=&quot;noreferrer&quot;&gt;Probabilistic Robotics [THRUN,BURGARD,FOX]&lt;/a&gt; page 206) the Jacobian matrix when using velocity motion model, defined as&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\begin{bmatrix} x \\ y \\ \theta \end{bmatrix}' = \begin{bmatrix} x \\ y \\ \theta \end{bmatrix} + \begin{bmatrix} \frac{\hat{v}_t}{\hat{\omega}_t}(-\text{sin}\theta + \text{sin}(\theta + \hat{\omega}_t{\Delta}t)) \\ \frac{\hat{v}_t}{\hat{\omega}_t}(\text{cos}\theta - \text{cos}(\theta + \hat{\omega}_t{\Delta}t)) \\ \hat{\omega}_t{\Delta}t \end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;is calculated as &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$G_{T}= \begin{bmatrix}&#xA;  1 &amp;amp; 0 &amp;amp; \frac{υ_{t}}{ω_{t}}(-cos {μ_{t-1,θ}} + cos(μ_{t-1,θ}+ω_{t}Δ{t})) \\&#xA;  0 &amp;amp; 1 &amp;amp; \frac{υ_{t}}{ω_{t}}(-sin {μ_{t-1,θ}} + sin(μ_{t-1,θ}+ω_{t}Δ{t})) \\&#xA;  0 &amp;amp; 0 &amp;amp; 1&#xA; \end{bmatrix}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does the same apply when using the odometry motion model (described in the same book, page 133), where robot motion is approximated by a rotation $\hat{\delta}_{rot1}$, a translation $\hat{\delta}$ and a second rotation $\hat{\delta}_{rot2}$ ? The corresponding equations are:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\begin{bmatrix} x \\ y \\ \theta \end{bmatrix}' = \begin{bmatrix} x \\ y \\ \theta \end{bmatrix} + \begin{bmatrix} \hat{\delta}\text{cos}(\theta + \hat{\delta}_{rot1}) \\ \hat{\delta}\text{sin}(\theta + \hat{\delta}_{rot1}) \\ \hat{\delta}_{rot1} + \hat{\delta}_{rot2} \end{bmatrix}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In which case the Jacobian is&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$G_{T}= \begin{bmatrix}&#xA;  1 &amp;amp; 0 &amp;amp; -\hat{\delta} sin(θ + \hat{\delta}_{rot1}) \\&#xA;  0 &amp;amp; 1 &amp;amp; -\hat{\delta} cos(θ + \hat{\delta}_{rot1}) \\&#xA;  0 &amp;amp; 0 &amp;amp; 1&#xA; \end{bmatrix}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it a good practise to use odometry motion model instead of velocity for mobile robot localization?&lt;/p&gt;&#xA;" OwnerUserId="164" LastEditorUserId="95" LastEditDate="2013-02-21T19:37:59.953" LastActivityDate="2014-02-21T13:37:06.300" Title="Extended Kalman Filter using odometry motion model" Tags="&lt;localization&gt;&lt;kalman-filter&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="965" PostTypeId="1" CreationDate="2013-02-21T16:46:48.970" Score="1" ViewCount="773" Body="&lt;p&gt;I'm having some technical problems... I'm trying to use Firmata for arduino but over nrf24, not over Serial interface. I have tested nRF24 communication and it's fine. I have also tested Firmata over Serial and it works. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Base device is simple &quot;serial relay&quot;. When it has data available on Serial, read it and send it over &lt;a href=&quot;http://maniacbug.github.com/RF24Network/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;nRF24 network&lt;/a&gt;. If there is data available from network, read it and send it through Serial.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Node device is a bit complex. It has custom &lt;a href=&quot;https://github.com/arduino/Arduino/tree/master/libraries/Firmata&quot; rel=&quot;nofollow noreferrer&quot;&gt;Standard Firmata&lt;/a&gt; where I have just added write and read override. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/nEj0s.png&quot; alt=&quot;Diagram&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Read override id handeled in &lt;code&gt;loop&lt;/code&gt; method in this way:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;while(Firmata.available())&#xA;    Firmata.processInput();&#xA;&#xA;// Handle network data and send it to Firmata process method&#xA;while(network.available()) {&#xA;    RF24NetworkHeader header;&#xA;    uint8_t data;&#xA;    network.read(header, &amp;amp;data, sizeof(uint8_t));&#xA;    Serial.print(data, DEC); Serial.print(&quot; &quot;);&#xA;    Firmata.processInputOverride(data);&#xA;    BlinkOnBoard(50);&#xA;}&#xA;&#xA;currentMillis = millis();&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Firmata &lt;code&gt;processInputOverrride&lt;/code&gt; is little changed method of &lt;code&gt;processInput&lt;/code&gt; where &lt;code&gt;processInput&lt;/code&gt; reads data directly from &lt;code&gt;FirmataSerial&lt;/code&gt;, and in this method we pass data down to method from network. This was tested and it should work fine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Write method is overloaded in a different way. In &lt;code&gt;Firmata.cpp&lt;/code&gt; I have added an method pointer that can be set to a custom method and used to send data using that custom method. I have then added custom method call after each of the &lt;code&gt;FirmataSerial.write()&lt;/code&gt; call:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Firmata.h&#xA;...&#xA;size_t (*firmataSerialWriteOverride)(uint8_t);&#xA;...&#xA;&#xA;void FirmataClass::printVersion(void) {&#xA;  FirmataSerial.write(REPORT_VERSION);&#xA;  FirmataSerial.write(FIRMATA_MAJOR_VERSION);&#xA;  FirmataSerial.write(FIRMATA_MINOR_VERSION);&#xA;  Firmata.firmataSerialWriteOverride(REPORT_VERSION);&#xA;  Firmata.firmataSerialWriteOverride(FIRMATA_MAJOR_VERSION);&#xA;  Firmata.firmataSerialWriteOverride(FIRMATA_MINOR_VERSION);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I have then set the overrided write method to a custom method that just writes byte to network instead of &lt;code&gt;Serial&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;size_t ssignal(uint8_t data) {&#xA;    RF24NetworkHeader header(BaseDevice);&#xA;    network.write(header, &amp;amp;data, sizeof(uint8_t));&#xA;}&#xA;&#xA;void setup() {&#xA;...&#xA;Firmata.firmataSerialWriteOverride = ssignal;&#xA;...&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;All stages pass right (I guess) and then I don't get any response from Node when I request pin states&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;...&#xA;&amp;lt; f0 6a 7f 7f 7f ... 7f 0 1 2 3 4 5 6 7 8 9 a b c d e f f7 // analog mapping&#xA;&amp;gt; f0 6d 0 f7 // sysex request pin 0 state and value&#xA;&amp;gt; f0 6d 1 f7 &#xA;&amp;gt; f0 6d 2 f7&#xA;...&#xA;&amp;gt; f0 6d 45 f7&#xA;// And I wait for response...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;There is no response. Any ideas why would that happen? Node receive all messages correctly and code for handling pin states exist.&lt;/p&gt;&#xA;" OwnerUserId="933" LastEditorUserId="933" LastEditDate="2013-02-21T21:25:05.407" LastActivityDate="2013-02-21T21:25:05.407" Title="Firmata over nRF24" Tags="&lt;arduino&gt;&lt;serial&gt;&lt;c++&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="966" PostTypeId="2" ParentId="964" CreationDate="2013-02-21T16:55:24.313" Score="9" Body="&lt;p&gt;You have asked two questions. As I interpret them they are:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Is it necessary to linearize the odometry motion model for use with an extended Kalman filter (EKF)?&lt;/li&gt;&#xA;&lt;li&gt;Is it better to use the odometry motion model instead of the velocity motion model.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Regarding question 1, the short answer is &quot;yes.&quot; The guarantees of the Kalman filter (KF) only apply to linear systems. We linearize a non-linear system in hopes of retaining some of those guarantees for non-linear systems. In fact linearizing the non-linear components of a system (i.e. the motion model and/or the observation model) is the very thing that differentiates KFs and EFKs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding question 2, Dr. Thrun argues on page 132 of Probabilistic Robotics that &quot;[p]ractical experience suggests that odometry, while still erroneous, is usually more accurate than velocity.&quot; However I would not interpret this statement as an argument for supplanting the velocity model. If you have both velocity and odometric information then it is generally better to use both sources of information.&lt;/p&gt;&#xA;" OwnerUserId="177" LastActivityDate="2013-02-21T16:55:24.313" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="967" PostTypeId="2" ParentId="964" CreationDate="2013-02-21T18:46:10.447" Score="2" Body="&lt;p&gt;In my experience, the answer to your last question is &quot;yes.&quot; I've had much more luck using odometry instead of dynamic (velocity) prediction. However, I've never used the motion model you describe (from Thrun's book). Instead, I've used the model I described &lt;a href=&quot;https://robotics.stackexchange.com/a/134/163&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="163" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2013-02-21T19:35:36.100" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="968" PostTypeId="2" ParentId="964" CreationDate="2013-02-21T19:56:16.600" Score="2" Body="&lt;p&gt;To your first question: &quot;Does the same apply when using the odometry motion model?&quot;, the answer is Yes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The the EKF is pretty much the same thing as the KF, with the addition of the linearization step.  What you are linearizing here is the motion model, whatever model that is.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For your second question: &quot;Is it a good practise to use odometry motion model instead of velocity for mobile robot localization?&quot;: I think the answer is 'it depends.'  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are using a data set that has velocity information and the localization is good enough for your purposes, then the simplicity of that model is probably preferred.  If you are directly controlling the robot and have access to the odometry information, then you're likely to get a better result.  &lt;/p&gt;&#xA;" OwnerUserId="502" LastActivityDate="2013-02-21T19:56:16.600" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="969" PostTypeId="2" ParentId="963" CreationDate="2013-02-22T09:18:41.500" Score="1" Body="&lt;p&gt;An answer from David Butterworth which solved my problem! Thanks David.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;I found that if you modify the visual/collision mesh to be aligned with your joint origin, then it's okay.&#xA;Don't do extra translations/rotations of the mesh from within your URDF, because that is broken.&#xA;The orientation of the sensor data should depend on the Gazebo macro, but there should be only translations in there, with 2 joint rotations for the extra pair of camera frames.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My Gazebo macro is based on the PR2 one, but with the visual/collision meshes fixed and re-scaled as per above.&#xA;The end result is that any translation/rotation is only done at the head_mount_kinect joint that orientates everything else, and you can successfully pitch the sensor up-down or vertically.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm guessing that in your situation, the PointCloud data is actually in the correct place, but because of the bug with the meshes, the visual model is in the wrong place.&lt;/p&gt;&#xA;" OwnerUserId="114" LastActivityDate="2013-02-22T09:18:41.500" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="970" PostTypeId="1" AcceptedAnswerId="971" CreationDate="2013-02-23T07:23:28.393" Score="13" ViewCount="7763" Body="&lt;p&gt;Im in the process of making a robot which requires 12 3x10mm cylindric magnets for the construction. They are 30mm from the center of the robot where I plan to have the IMU. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was thinking about using MPU-6050. Do magnets affect the values? If yes, is there a solution for it? like maybe I could have a shield or something around the IMU?&lt;/p&gt;&#xA;" OwnerDisplayName="user697" LastEditorDisplayName="user697" LastEditDate="2013-02-23T07:31:14.593" LastActivityDate="2015-07-09T05:43:20.273" Title="Do magnets affect IMU values?" Tags="&lt;sensors&gt;&lt;imu&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="971" PostTypeId="2" ParentId="970" CreationDate="2013-02-23T10:00:18.053" Score="10" Body="&lt;p&gt;If permanent magnets are rigidly mounted at a fixed distance from the IMU, they have no effect on the accelerometers and gyros inside the MPU-6050.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can optionally connect the MPU-6050 to an external magnetometer.&#xA;(It's used to cancel out yaw drift).&#xA;That magnetometer, if you have one, will be affected by magnets.&#xA;In theory you could shield the magnetometer by wrapping it in &lt;a href=&quot;http://en.wikipedia.org/wiki/mu-metal&quot;&gt;mu-metal&lt;/a&gt;,&#xA;but that would also shield the magnetometer from the magnetic field of Earth, making the magnetometer useless -- better to leave out the magnetometer and the shield entirely.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe you will be lucky and the magnets will merely shift the magnetometer values, without making it peg out.&#xA;If so, there are various ways of calibrating-out this fixed shift, and the IMU could work as well as it would have worked without those magnets.&#xA;(It's not clear to me if the MPU-6050 in particular supports such calibration).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm assuming your magnets have some purpose, yes?&#xA;Generally people use magnets in ways where the magnetic field in one small region is actually used, and any &quot;stray&quot; magnetic field elsewhere doesn't help.&#xA;There are several ways to &quot;concentrate&quot; the magnetic field,&#xA;making it stronger where it is actually useful, and making the stray fields weaker.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Counter-intuitively, it is possible to &lt;em&gt;add&lt;/em&gt; more magnets to your system in such a way that the total magnetic field, at the magnetometer, from all the magnets is almost perfectly cancelled out, leaving only the Earth's magnetic field.&#xA;(This often makes the magnetic field &lt;em&gt;elsewhere&lt;/em&gt; stronger).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, a &lt;a href=&quot;http://en.wikipedia.org/wiki/Halbach_array&quot;&gt;Halbach array&lt;/a&gt; arranges permanent magnets in a way that makes the field stronger on one side, while cancelling the field to almost zero on the other side.&lt;/p&gt;&#xA;" OwnerUserId="187" LastActivityDate="2013-02-23T10:00:18.053" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="972" PostTypeId="2" ParentId="970" CreationDate="2013-02-24T04:49:28.030" Score="3" Body="&lt;p&gt;Hard to tell in this exact case.  I looked up the MPU-6050 specs and I am unsure whether it integrates a digital compass to combat gyro drift.  On Sparkfun, it refers to it being a '9 axis fusion algorithm' which implies compass (three axis each for gyro, accel, and magento) but elsewhere it only refers to gyro and accel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was doing some related work with a Pololu MinIMU-9 which has all nine axis but requires you to implement the IMU integration logic in code.  What I found with that part was that placing it within 10 cm of the drive motors was causing the magnometer to be very difficult to use.  On one hand you can do a calibration and remove the static magnetic fields from your reading (assuming your IMU routines are coded for this).  On the other hand, I was finding that the strength of the static motor fields was so strong that the comparatively weaker Earth's magnetic fields were down in the 'noise'.  I was having to tune down the flux sensitivity to handle the drive field so my sensitivity to the Earth's field also dropped.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This fix was to ensure the magnometer was sufficiently far away from the drives that their fields were sufficiently smaller than the Earth's fields.  In my case I had to move the IMU sensor about 50 cm away from the motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So in summary, 'it depends' :-)  It depends on your sensors, the strength of your local magnetic fields, and whether you can calibrate out the local fields in your IMU logic.&lt;/p&gt;&#xA;" OwnerUserId="35" LastActivityDate="2013-02-24T04:49:28.030" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="974" PostTypeId="2" ParentId="948" CreationDate="2013-02-24T11:55:12.003" Score="2" Body="&lt;p&gt;If you have an electric motor which can drive a linear system in two directions, essentially it is its own antagonist.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;muscles, as well as single-acting pneumatic cylinders, can only provide force in one direction, so they are arranged in agonist/antagonist pairs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A motor, perhaps running a belt, is capable of pulling the belt in each direction, thereby providing motive force to what you might consider to be the agonist belt in one direction and the antagonist belt in the other.&lt;/p&gt;&#xA;" OwnerUserId="928" LastEditorUserId="928" LastEditDate="2013-02-24T15:02:47.147" LastActivityDate="2013-02-24T15:02:47.147" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="975" PostTypeId="1" AcceptedAnswerId="1152" CreationDate="2013-02-24T12:18:01.820" Score="9" ViewCount="469" Body="&lt;p&gt;I know that temperature influences the characteristics of semiconductors and other materials, but we know how and can take that into account. Furthermore, lower temperatures makes electronics more efficient, sometimes even superconducting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I remember reading somewhere that engineers building Curiosity even considered low temperature electronics for the motors driving the wheels but still decided against it in the end.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why is it, apparently, so hard to build components with operating temperatures matching those on Mars, Europa, or in space?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt; None of the answers address my question thus far. I know that all parts, both electronic and mechanical, and greases and so on have relatively narrow working temperatures. My question is, why don't we build special cold metals and cold greases and cold chips that have their narrow operating temperature band at -100 C or whatever?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Valid answers could be: it's too expensive, insufficient science has been done to determine materials appropriate for such cold, such cold materials cannot be manufactured in the sweltering heat of planet Earth.&lt;/p&gt;&#xA;" OwnerUserId="141" LastEditorUserId="141" LastEditDate="2013-03-30T19:49:07.267" LastActivityDate="2013-04-03T12:08:58.557" Title="Why do space probes need heating?" Tags="&lt;heat-management&gt;&lt;cooling&gt;" AnswerCount="6" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="976" PostTypeId="1" CreationDate="2013-02-24T12:24:30.333" Score="12" ViewCount="1885" Body="&lt;p&gt;I have a small quadruped with three degree of freedom legs which I have been working on: &lt;a href=&quot;http://www.thingiverse.com/thing:50125&quot;&gt;3DOF Mini Quadruped&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My original code for it was a simple servo controller on the arduino, and Scala code which would send servo commands over the wire.  I did all the Inverse Kinematics and Gait logic in Scala, and got it to walk: &lt;a href=&quot;https://www.youtube.com/watch?v=VsHNA3oLXC8&quot;&gt;3dof quadruped first gait&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My Gait logic in Scala was somewhat naive; it depended on the legs being in the right position at the beginning (one side extended fore and aft, the other side in toward each other).  The logic was simply translate all four feet backward by 1mm along y, and whenever a coxa angle became excessively rearward, stop and perform a little routine where that foot is lifted 10mm in z, then translated forward 60mm along y, and set back down.  Naive, but effective.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, I have rewritten my IK code in arduino C, and I'm trying to decide how to move forward with the Gait dynamics.  I've had a hard time finding good, easy to understand resources about gaits.  I do have some knowledge about the difference between dynamically stable gaits (like creep gaits) where the body is a stable tripod at all times and dynamically unstable gaits (walking, trotting), where two legs are off the ground at a time and the body is essentially falling forward into the advancing leg.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I had some thoughts about state machines and trying to calculate whether the body center falls within a triangle made by the remaining feet to decide which foot was safe to lift, but I'm not sure if these are ideas worth exploring.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know this is kind of an overly general question, but I'm interested to see how other people have attacked this problem, and about all I've been able to find are research papers.&lt;/p&gt;&#xA;" OwnerUserId="928" LastEditorUserId="37" LastEditDate="2013-12-09T22:53:24.030" LastActivityDate="2013-12-09T22:53:24.030" Title="What is a good approach to a Quadruped Gait?" Tags="&lt;mobile-robot&gt;&lt;walk&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="977" PostTypeId="2" ParentId="975" CreationDate="2013-02-24T12:45:47.547" Score="5" Body="&lt;p&gt;Because the parts work reliably only in a limited range of temperatures. If the temperature is out of the range, the chips may not work correctly or even not work at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Probes usually also have some kind of backup battery and batteries lose capacity really fast if they get colder than 0°C. It simply is easier and more efficient to keep the battery and electronics warm than to compensate for different characteristics.&lt;/p&gt;&#xA;" OwnerUserId="890" LastActivityDate="2013-02-24T12:45:47.547" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="978" PostTypeId="2" ParentId="976" CreationDate="2013-02-24T21:55:27.547" Score="5" Body="&lt;p&gt;The gait you've got is actually not too bad, although the feet don't have enough traction, so it's hard to see how good it really is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not sure about your terminology of dynamically stable gaits. As I've always understood it, the two tripod style gait is known as a statically stable gait, while a good walking biped like &lt;a href=&quot;http://www.bostondynamics.com/robot_petman.html&quot;&gt;Petman&lt;/a&gt; uses a dynamically stable gait. Never heard of a dynamically unstable gait. That sounds more like drunkenness.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Two legs on the ground is probably the lower limit for this design of robot. Generally, it's easier to make this work with tall, humanoid robots, which take a long time to fall over. Wide flat robots need to lift and place their feet pretty quickly if they aren't leaving many on the floor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But how to develop a gair for your robot. Firstly, you should decide what you want to achieve from the gait. Are you looking for maximum speed on a flat surface, or maximum stability on uneven surfaces?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your goal is stability, then I certainly think it's worth having the robot be aware of its centre of gravity in relation to its feet. To help it know this, it might even be worth adding some force sensors to its feet so it can calculate this easily.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your goal is maximum speed only, then I'd simply concentrate on funding an optimum gait pattern. This is harder to do. There are two good ways to approach it:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Modelling. Create a comprehensive computer model of the robot, including mass, stiffness, torque, etc. Use this model to fully understand the dynamic behaviour.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Trial and error. You can do this the hard way, programming in random gaits, adjusting them on a hunch and measuring their performance. Try making it walk both forwards, and diagonally. Or you can use a &lt;a href=&quot;http://en.wikipedia.org/wiki/Genetic_algorithm&quot;&gt;genetic algorithm&lt;/a&gt; to help you automatically search for better gaits. The difficulty of using a GA is that you need to have some way to automatically measure the performance of the gait.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;A third way, is to make the robot into a scientist who runs concious experiments on itself to validate hypotheses about itself, and work out how to walk, like &lt;a href=&quot;https://www.youtube.com/watch?v=iNL5-0_T1D0&quot;&gt;Cornell University's starfish robot&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2013-02-24T21:55:27.547" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="979" PostTypeId="1" CreationDate="2013-02-24T23:02:17.747" Score="3" ViewCount="5493" Body="&lt;p&gt;I'm building a quadcopter and have discovered that most ESC have a built-in BEC, but I was wondering if it wouldn't be better to use only one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What if I delivered power to my four ESC with a unique BEC ? Would that work ?&#xA;I think this would be easier to configure (you have to set it up only once for the four ESC) and it would prevent each ESC from having it's own behavior.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Am I doing it wrong ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is an image of what I'm talking about :&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit : trying to find the original image and upload it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given the &lt;a href=&quot;https://robotics.stackexchange.com/a/982/37&quot;&gt;answer by Ian McMahon&lt;/a&gt; it appears that this schema is not the right thing to do, since I had misunderstood the role of BECs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So would the right schema would look like this ?&#xA;Edit : trying to find the original image and upload it.&#xA;I'm still not sure if I'm getting it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do I need 4 ESCs with integrated BECs and connect all three cables to flight controller ?&lt;/p&gt;&#xA;" OwnerUserId="943" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2015-08-25T13:35:17.527" Title="One BEC for multiple ESC (Quadcopter)" Tags="&lt;electronics&gt;&lt;quadcopter&gt;&lt;bec&gt;&lt;esc&gt;" AnswerCount="1" CommentCount="11" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="980" PostTypeId="2" ParentId="848" CreationDate="2013-02-25T11:10:33.140" Score="2" Body="&lt;p&gt;As mentioned above 7-bits means possibility of 128 slave devices attached to the same i2c bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This loop is run 128 times(0-127) to determine how many slaves are present on the bus by asking them to respond(via ack) and prints whenever a device presence is detected. &lt;/p&gt;&#xA;" OwnerUserId="944" LastActivityDate="2013-02-25T11:10:33.140" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="982" PostTypeId="2" ParentId="979" CreationDate="2013-02-25T14:24:42.023" Score="2" Body="&lt;p&gt;Typically you want to power the ESCs directly from the battery, and use a BEC to power 5v electronics such as your controller.  However, a lot of ESCs have the ability to provide 5v power back to the controller over the 5v line on their control cable (servo-style 3 pin cable).  In that case, you wouldn't need to use a BEC at all, but it's possible you might have issues with more than one ESC all trying to supply power on the 5v line with them all hooked together.  For maximum flexibility, it might make sense to select an ESC which has switchable BEC capability.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My project experience (since removed) can be found in an &lt;a href=&quot;https://robotics.stackexchange.com/revisions/982/2&quot;&gt;earlier revision of this answer&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="928" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2015-08-25T13:35:17.527" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="984" PostTypeId="1" AcceptedAnswerId="992" CreationDate="2013-02-25T21:13:25.777" Score="3" ViewCount="93" Body="&lt;p&gt;Here is the background. I am trying to write a service for the HiTechnic prototype board. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using the Appendix 2 from the blue tooth developers kit from Lego's site I am able to understand what is going on with this service I am trying to build however the response I get is always 221 = 0xDD = &quot;Communication Bus Error&quot; or 32 = 0x20 = &quot;Pending communication transaction in progress&quot;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I figured out that the HiTechnic prototype board is using &lt;a href=&quot;http://refriedgeek.blogspot.com/2013/02/connecting-to-hitechnic-prototype-board.html&quot; rel=&quot;nofollow&quot;&gt;i2c address 0x08&lt;/a&gt; so I modified the brick code to use that address instead of the standard 0x02. It goes out and configures the device, I get a response and then it does an LSWrite which seems OK then I get a get an error when it does the LSGetStatus. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know this thing works - I can bit bang it all day long with an Arduino but I only did that to test it out - &lt;a href=&quot;http://refriedgeek.blogspot.com/2013/02/connecting-to-hitechnic-prototype-board.html&quot; rel=&quot;nofollow&quot;&gt;see this link&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not sure what else to try. Here is how I am setting it up in the connect to brick handler. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; pxbrick.Registration registration = new pxbrick.Registration(&#xA;                new LegoNxtConnection(LegoNxtPort.Sensor1),&#xA;                LegoDeviceType.DigitalSensor,&#xA;                Contract.DeviceModel,&#xA;                Contract.Identifier,&#xA;                ServiceInfo.Service,&#xA;                _state.Name);&#xA;        Debugger.Break();&#xA;        // Reserve the port&#xA;        LogInfo(&quot;ConnectToBrickHandler&quot;);&#xA;        yield return Arbiter.Choice(_legoBrickPort.ReserveDevicePort(registration),&#xA;            delegate(pxbrick.AttachResponse reserveResponse)&#xA;            {&#xA;                Debugger.Break();&#xA;                if (reserveResponse.DeviceModel == registration.DeviceModel)&#xA;                {&#xA;                    registration.Connection = reserveResponse.Connection;&#xA;                }&#xA;            },&#xA;            delegate(Fault f)&#xA;            {&#xA;                Debugger.Break();&#xA;                fault = f;&#xA;                LogError(&quot;#### Failed to reserve port&quot;);&#xA;                LogError(fault);&#xA;                registration.Connection.Port = LegoNxtPort.NotConnected;&#xA;            });&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I have also tried setting AnyPort as well so that it will hit the TestPortForI2CSensorHandler that just does what I explained before - it seems to set the mode fine and then gets an error when it tries to read the device information. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the data. - this first part is the set input more - both the message and response - You can see it is totally fine. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Send command data. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;0 &#xA;5&#xA;0 &#xA;11 &#xA;0 &#xA;receive command data. (_commState.SerialPort.Read(receiveData, 0, packetSize);) &#xA;2 &#xA;5 &#xA;0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then it does an LSWrite - everything still seems fine... You can see I have modified the NxtComm code to use 0x08 instead of 0x02 which it would normally use, then the last byte is also 0x08 which is the starting address of the manufacturer. It's asking for 16 bytes which would be the manufacturer and sensor type. like I said - I know that works I can print that info out using the Arduino.  &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;128 &#xA;15 &#xA;0 &#xA;2 &#xA;16 &#xA;8 // i2c address&#xA;8 //I assume this is what address I want to read from? &#xA;Got response: True Error code Success [02/25/2013 02:20:31]&#xA;-- SendCommandHandler (NxtComm) [02/25/2013 02:20:31]&#xA;--- RequestResponseHandler (NxtComm) [02/25/2013 02:20:31]&#xA;--- CommSendImmediateHandler (NxtComm) [02/25/2013 02:20:31]&#xA;Send command data.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then it tries to get the status&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;0 &#xA;14 &#xA;0 &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Here is the response... &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; 2 &#xA;14 &#xA;32 &#xA; 0 &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It's either 32 or 221. It's making me nuts... &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If anyone has anything that might help me out I would so much appreciate it. At this point I am running out of ideas. I can see what is going on, I can understand the entire transaction but can't seem to figure out why it just errors out like that. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also - just for grins I tried 0x10 which is what they tell you on the HiTechnic website. That gets a response of 2,14,0,0 from the NXT brick - that would indicate there is no data but as I pointed out I can get data using the Arduino. How could I have two different I2C device addresses? &lt;/p&gt;&#xA;" OwnerUserId="803" LastEditorUserId="37" LastEditDate="2013-02-26T13:34:06.260" LastActivityDate="2013-03-01T03:18:23.230" Title="Does anyone know what might be giving me this error coming from an i2c device" Tags="&lt;nxt&gt;&lt;i2c&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="985" PostTypeId="1" AcceptedAnswerId="986" CreationDate="2013-02-26T02:47:45.793" Score="3" ViewCount="1000" Body="&lt;p&gt;I was able to find a small ESC for about $12 off of ebay.  If you were designing a robot, would you see that and think?  &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;\$12 bucks for an ESC that connects to simple pulse-wave interface -&#xA;  sign me up!&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Or would you think:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;\$12 just to control a motor? I could throw together an H-bridge for&#xA;  $0.50 and be done with it.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;My robot in particular actually has two motors and therefor $24 to control the two of them.  But the interface is really easy (plus has the added advantage of being R/C vs computer controlled with a simple change of connectors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which way would you go?&lt;/p&gt;&#xA;" OwnerUserId="947" LastEditorUserId="947" LastEditDate="2013-02-26T03:15:11.677" LastActivityDate="2013-02-26T04:24:46.223" Title="Which is easier/cheaper: Hbridge vs ESC for controlling a motor?" Tags="&lt;design&gt;&lt;electronics&gt;&lt;wheeled-robot&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="986" PostTypeId="2" ParentId="985" CreationDate="2013-02-26T04:24:46.223" Score="2" Body="&lt;p&gt;What kind of motors?  ESCs typically are for brushless DC motors, which are electronically commutated DC three phase motors, and you can't run them with an H-bridge. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, ESCs give you a lot of bang for the buck, and they're certainly worth $12 :)&lt;/p&gt;&#xA;" OwnerUserId="928" LastActivityDate="2013-02-26T04:24:46.223" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="987" PostTypeId="1" CreationDate="2013-02-27T14:13:33.010" Score="1" ViewCount="941" Body="&lt;p&gt;I have written code to send data from controller to pc through serialport using interrupt&#xA;but it echos garbage value exactly 3 times back.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    ISR(USART_RX_vect)&#xA;{&#xA;    unsigned char index = UDR;&#xA;&#xA;    UDR = index;        &#xA;}&#xA;&#xA;void uartInit()&#xA;{&#xA;    UCSRA=0x00;&#xA;    UCSRB=0x18;&#xA;    UCSRC=0x86;&#xA;    UBRRH=0x00;&#xA;    UBRRL=0x67;&#xA;    UCSRB |= (1 &amp;lt;&amp;lt; RXCIE); // Enable the USART Receive Complete interrupt (USART_RXC)&#xA;    _delay_ms(10);&#xA;}&#xA;&#xA;int main(void)&#xA;{&#xA;    uartInit();&#xA;    lcd_init(); &#xA;    sei();&#xA;&#xA;   while(1)&#xA;    {&#xA;     }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt;&#xA;Function used to set baud rate..&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#define FOSC 16000000// Clock Speed&#xA;#define BAUD 9600&#xA;#define MYUBRR FOSC/16/BAUD-1&#xA;&#xA;&#xA;void USART_Init( unsigned int baud )&#xA;{&#xA;/* Set baud rate */&#xA;UBRRH = (unsigned char)(baud&amp;gt;&amp;gt;8);&#xA;UBRRL = (unsigned char)baud;&#xA;/* Enable receiver and transmitter */&#xA;UCSRB = (1&amp;lt;&amp;lt;RXEN)|(1&amp;lt;&amp;lt;TXEN);&#xA;/* Set frame format: 8data, 1stop bit */&#xA;UCSRC = (0&amp;lt;&amp;lt;USBS)|(3&amp;lt;&amp;lt;UCSZ0);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="953" LastEditorUserId="953" LastEditDate="2013-02-28T09:39:00.277" LastActivityDate="2013-10-27T04:02:10.783" Title="problem in serial communication between PC and ATMEGA 8535(AVR)" Tags="&lt;serial&gt;&lt;avr&gt;" AnswerCount="1" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="989" PostTypeId="1" CreationDate="2013-02-28T15:03:18.117" Score="4" ViewCount="211" Body="&lt;p&gt;I am doing Local Localisation with sonar, particle filter (i.e all particles are initially with robot pose).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have grip map of environment. When I execute algorithm in environment (where doors are closed/open), particles are not able to followup the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't have random particles since I know the initial position of the robot exactly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Adding random particle will change the pose of robot (i am find median of particles as robot pose).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any idea/methods how to improve local localisation?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to know, do I need random variable if I am doing local localisation? And how do I improve localisation if there are many changes in the map without adding random particles?&lt;/p&gt;&#xA;" OwnerUserId="714" LastEditorUserId="37" LastEditDate="2013-03-05T11:40:05.230" LastActivityDate="2013-03-05T11:40:05.230" Title="Local Localisation with particle filter" Tags="&lt;mobile-robot&gt;&lt;localization&gt;&lt;odometry&gt;&lt;particle-filter&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="991" PostTypeId="2" ParentId="987" CreationDate="2013-03-01T01:31:00.967" Score="1" Body="&lt;p&gt;You are setting the UBRR register incorrectly: it should not directly hold the desired baudrate, but a value that depends on your CPU speed (which you defined as the macro FOSC, but never used) and the baudrate. The exact calculation is described in the &lt;a href=&quot;http://www.atmel.com/images/doc2502.pdf&quot; rel=&quot;nofollow&quot;&gt;ATMega8535 datasheet&lt;/a&gt; (p.147).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See the &lt;a href=&quot;http://www.josephn.net/avr/avr_ubrr_calculator&quot; rel=&quot;nofollow&quot;&gt;AVR UBRR Calculator&lt;/a&gt; for easy calculation of the proper UBRR register values (note that the calculator assumes U2X = 0, as seen in Table 72, p.173).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt; I just noticed your macro MY_UBRR, sorry about that. Are you calling USART_Init with baud = MY_UBRR? If so, I'll delete this answer.&lt;/p&gt;&#xA;" OwnerUserId="95" LastEditorUserId="95" LastEditDate="2013-03-01T01:36:55.113" LastActivityDate="2013-03-01T01:36:55.113" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="992" PostTypeId="2" ParentId="984" CreationDate="2013-03-01T03:18:23.230" Score="0" Body="&lt;p&gt;Triumphant&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Check this out. Under normal circumstances you would configure your sensor by giving it a port. It would look like the following.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;pxbrick.Registration registration = new pxbrick.Registration(new LegoNxtConnection((LegoNxtPort)_state.SensorPort), &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Well, inside of the NxtBrick code there is a method called TestPortForI2CSensorHandler and reading the code you can see that if you pass in “AnySensorPort” it will try all four ports. Genuis that I am thought! Oh great. I will just let the already created code do the work for me, after all, at that point all I wanted to do was see of the thing worked. Well here is the problem. When you do that it creates a type of I2CReadSensorType inside of the ctor it executes this line of code.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ExpectedI2CResponseSize = 16;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;That doesn’t seem to work. OK - not seems, it doesn’t work. It won’t work for the sonsor sensor or any other digital sensor. I assume&#xA; because it’s 0 based, so 16 is actually 17 bytes? I am guessing. At anyrate, I changed it to 15 and low and behold it works. I even went back and tried it with the LEGO sonar sensor. It works to a point - that is to say it actually gets data back but it seems&#xA; like the sensor type data (which is “SuperPr” on the prototype board) is 0xFF for all the bytes. The name manufacturer is indeed set to LEGO though so I know it read data.&#xA; if you change the ExpectedI2CResponseSize  back to 16 it fails.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other issue I had is that the NxtCommType contains the following. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[DataMember, Description(&quot;The default I2C Bus Address of the Ultrasonic or other I2C Sensor.&quot;)]&#xA;public const byte DefaultI2CBusAddress = 0x02;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;For my purposes at the moment I am just flipping it to 0x10 for the prototype board (which oddly enough when connected to my Arduino&lt;/p&gt;&#xA;&#xA;&lt;p&gt;shows up as 0x08 but that is another story). I need to modify things so I can use sensors that have differing i2c addresses but for now I am thrilled!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would love to see someone like Trevor Taylor comment on this as to how it ever worked with 16 as the ExpectedI2CResponseSize.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Awesome!&lt;/p&gt;&#xA;" OwnerUserId="803" LastActivityDate="2013-03-01T03:18:23.230" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="993" PostTypeId="1" CreationDate="2013-03-01T04:00:21.760" Score="5" ViewCount="106" Body="&lt;p&gt;I am looking to augment a GPS/INS solution with a conventional land vehicle (car-like) model. That is, front-wheel steered, rear wheels passive on an axle.  I don't have access to odometry or wheel angle sensors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am aware of the Bicycle Model (e.g. Chapter 4 of &lt;a href=&quot;http://link.springer.com/book/10.1007/978-3-642-20144-8/page/1&quot; rel=&quot;nofollow&quot;&gt;Corke&lt;/a&gt;), but I am not sure how to apply the heading/velocity constraint on the filter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my questions are:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Are there any other dynamic models that are applicable to the land vehicle situation, especially if they have the potential to provide better accuracy?&lt;/li&gt;&#xA;&lt;li&gt;Are there any standard techniques to applying such a model/constraint to this type of filter, bearing in mind I don't have access to odometry or wheel angle?&lt;/li&gt;&#xA;&lt;li&gt;Are there any seminal papers on the topic that I should be reading?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="959" LastEditorUserId="350" LastEditDate="2013-03-01T19:23:51.300" LastActivityDate="2015-07-22T08:16:24.277" Title="Conventional Land Vehicle Dynamic Models for GPS/INS augmentation" Tags="&lt;gps&gt;&lt;dynamics&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="994" PostTypeId="1" AcceptedAnswerId="1001" CreationDate="2013-03-01T04:05:48.827" Score="9" ViewCount="512" Body="&lt;p&gt;My team is building a robot to navigate autonomously in an outdoor environment. We recently got a new integrated IMU/GPS sensor which apparently does some extended Kalman filtering on-chip. It gives pitch, roll, and yaw, north, east, and down velocities, and latitude and longitude.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, we also have some encoders attached to our wheels, which provide linear and angular velocities. Before we got this new IMU/GPS sensor, we made our own EKF to estimate our state using the encoders and some other low-cost sensors. We want to use this new sensor's on-chip filter, but also incorporate our encoders into the mix.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any problem with chaining the filters? What I mean is, we'd use the output of the IMU/GPS sensor's on-chip EKF as an update to our own EKF, just as we use the data read from the encoders as an update to our EKF. It seems reasonable to me, but I was wondering what is usually supposed to be done in this case. &lt;/p&gt;&#xA;" OwnerUserId="181" LastActivityDate="2013-03-02T19:06:07.223" Title="Chaining Kalman filters" Tags="&lt;kalman-filter&gt;&lt;imu&gt;&lt;navigation&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="995" PostTypeId="2" ParentId="957" CreationDate="2013-03-01T05:51:17.817" Score="4" Body="&lt;p&gt;Depends on what you want to climb on, if it is glass, probably your best bet will be suction, but I have no idea what you will need for normal house walls. Don't forget that many walls will not be able to survive 5kgs of weight that tears down the paint. Also if you want to climb on normal walls, you probably shouldn't use chemical adhesives, as they will leave some form of residue.&lt;/p&gt;&#xA;" OwnerUserId="890" LastActivityDate="2013-03-01T05:51:17.817" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="996" PostTypeId="2" ParentId="993" CreationDate="2013-03-01T23:39:15.197" Score="1" Body="&lt;p&gt;When doing filtering, the Kinematic model comes into play &lt;em&gt;only&lt;/em&gt; during the prediction step.  That is, you predict that the next state is one which is reachable given your current kinematic constraints. I'll reiterate: &lt;em&gt;this is not  a hard constraint on the filter output&lt;/em&gt;. It simply makes unreachable states unlikely, with only the granularity available to the 2-D Gaussian distribution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, the sensors are used to find which &lt;em&gt;of the predicted states&lt;/em&gt; are likely &lt;em&gt;given given the new information&lt;/em&gt; (GPS, etc). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you &lt;em&gt;must&lt;/em&gt; apply a kinematic model as a &lt;em&gt;constraint&lt;/em&gt; (i.e., we &lt;em&gt;cannot&lt;/em&gt; consider any state outputs which violate the kinematic model), then I know of only one option off hand: Use a particle filter to sample all nearby states, then apply a zero weight to all states which are not reachable given your Kinematics. Note, a particle filter is a general term with lots of different meanings. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;A particle can represent all positions, $x,y,\theta$, e.g., a grid over the environment. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A particle can represent all &lt;em&gt;nearby&lt;/em&gt; positions. In this case you sample the kinematic model many times with some noise, and propagate those forward. This implicitly honors the kinematic constraint.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A particle can represent possible &lt;em&gt;paths&lt;/em&gt; (i.e., &lt;a href=&quot;http://robots.stanford.edu/papers/montemerlo.fastslam-tr.html&quot; rel=&quot;nofollow&quot;&gt;fastslam&lt;/a&gt;).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Then, you can re-weight each particle according to it's probability given the GPS measurements. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;However, I recommend that you use the INS in place of the wheel odometry during the prediction step. It will likely be a reasonable proxy, especially over the short term. In fact, this is a very common practice in the literature.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To make this clearer, you predict your next pose $x^+$, based on your current pose $x^-$, and your INS measurement which gives you a $\delta x$ (because you integrate the accellerations). So your EKF_PREDICT function goes from:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$x_{t+1|t} = f_{kinematics}(x_{t}, u_t)$, with odometry $u_t$ instead of the control vector. To something like:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$x_{t+1|t} = x_{t}+\delta x$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What have we lost? We have lost the ability to condition on the fact that the robot can only take certain types of movements, i.e., is kinematically constrained.  To compensate for this, what I've suggested is you then &lt;em&gt;condition&lt;/em&gt; the estimate based on the liklihood given the kinematic model. That means, during the EKF_UPDATE step. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To do this, you need to find the conditional probability:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$P(\delta x | x_{t}, u_t)$&lt;/p&gt;&#xA;" OwnerUserId="163" LastEditorUserId="9570" LastEditDate="2015-07-22T08:16:24.277" LastActivityDate="2015-07-22T08:16:24.277" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="997" PostTypeId="1" CreationDate="2013-03-02T07:49:58.890" Score="0" ViewCount="290" Body="&lt;p&gt;As a holiday project we are building a surveillance robot that is capable of transmitting live images using a webcam and is also capable of lifting small objects.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It uses a &lt;em&gt;CC2500 module&lt;/em&gt; for communicating with the robot.  The interface is designed in &lt;em&gt;Visual Basic 6&lt;/em&gt; and it allows us to set the port of the computer to which the transreceiver is connected. It is connected via a USB to RS232 port (USB side is connected to the computer).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We tried the settings as shown below and we get an error that the config is unsuccessful. We have tried the same settings in 4 different computers so far and it did not work.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/BJRwL.png&quot; alt=&quot;Screenshot of the GUI &quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Circuit diagram for the robot:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/VDb5R.jpg&quot; alt=&quot;x&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is designed using an Atmel 89S52.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Please tell us what settings to try to make it work&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="965" LastEditorUserId="37" LastEditDate="2013-03-02T19:27:53.057" LastActivityDate="2013-03-13T14:20:53.693" Title="How do we make our robot work?" Tags="&lt;electronics&gt;&lt;computer-vision&gt;&lt;wheeled-robot&gt;&lt;robotic-arm&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="998" PostTypeId="1" AcceptedAnswerId="1004" CreationDate="2013-03-02T15:57:31.173" Score="8" ViewCount="548" Body="&lt;p&gt;We are making a junior soccer robot and we just got our brilliant motors from Maxon.&#xA;Setting the PWM timer to low-frequencies (around 39kHz or 156 kHz ) the robot acts as expected. But this produces some problems. &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;It puts a heavy current on batteries (around 1.5A for 3 motors which is far too high).&lt;/li&gt;&#xA;&lt;li&gt;The high current causes our motor drivers (L6203) to heat up very quickly and even heat-sinks won't help them.&lt;/li&gt;&#xA;&lt;li&gt;The motors make such a bad sound as they are screaming and this is not normal.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;In contrast when I configure the timer on high-frequencies (such as 1250 kHz or 10000 kHz) the current drops off to 0.2A which is ideal and the sounds quit down.&#xA;But this causes a problem that our 3 motors when set to run on their highest speed (PWM set to 255) don't run by the same rpm. like one of them runs slower than others making robot turn to a specific side and so our handling functions fail to work correctly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Asking someone he told me that the drivers don't respond the same to frequencies thus resulting in different speeds and because on low frequencies the difference is very small I won't notice it but on higher frequencies the difference becomes bigger and noticeable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So is there any workaround for this problem? or I should continue using low frequencies? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS: I'm using ATMEGA16 as the main controller with a 10 mHz external crystal. &lt;/p&gt;&#xA;" OwnerUserId="21" LastActivityDate="2014-06-18T10:21:01.510" Title="Motors response different with high-frequency PWM" Tags="&lt;pwm&gt;&lt;avr&gt;" AnswerCount="2" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="999" PostTypeId="1" AcceptedAnswerId="1063" CreationDate="2013-03-02T17:54:46.930" Score="8" ViewCount="1198" Body="&lt;p&gt;I am following a guide that recommends using stepper motors and it has an approximate holding and operating torque. It says that if you don't know the operating torque, it is often half of the holding torque. I am adapting this to use with a servo and I was wondering can this same formula be used with a servo. My servo has approximately &lt;code&gt;1.98 kg/cm&lt;/code&gt; of torque so does that mean that I can estimate the operating torque would be &lt;code&gt;~1 kg/cm&lt;/code&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;A couple of things:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I know operating torque and holding torque are different. This is just a estimate-it isn't an exact science.&lt;/li&gt;&#xA;&lt;li&gt;I know servos are harder to find their location (75 degrees, etc.) than to use a stepper and assume that it worked. I have external means of finding the location.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="824" LastEditorUserId="824" LastEditDate="2013-05-21T22:43:23.357" LastActivityDate="2013-05-21T22:43:23.357" Title="For servos, can it be implied that `Holding Torque = Operating Torque * 2` like with steppers?" Tags="&lt;rcservo&gt;&lt;stepper-motor&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1000" PostTypeId="2" ParentId="997" CreationDate="2013-03-02T18:26:32.060" Score="1" Body="&lt;p&gt;I believe your question starts with 'how do I configure and talk to a TI CC2500 transceiver from Windows treating it as a USB Virtual COM Port'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, the answer to this is going to be very specific to the TI CC2500 device.  You'll need to load a driver.  You'll need to understand the communications protocol the CC2500 uses over the serial port.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd recommend seeking help from a community closer to your device.  I haven't seen people using the TI CC2500 in robotics before, so there may not be anyone on this forum familiar with it.  Try the TI &lt;a href=&quot;http://e2e.ti.com/&quot; rel=&quot;nofollow&quot;&gt;E2E Community&lt;/a&gt; or contact one of their &lt;a href=&quot;http://www.ti.com/general/docs/contact.tsp&quot; rel=&quot;nofollow&quot;&gt;customer support centers&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Good luck with your project.  If you were to say using an Arduino with a Zigbee or Bluetooth communications chip in place of your TI CC2500 I think you'd find better support in the robotics community.&lt;/p&gt;&#xA;" OwnerUserId="35" LastActivityDate="2013-03-02T18:26:32.060" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1001" PostTypeId="2" ParentId="994" CreationDate="2013-03-02T19:06:07.223" Score="4" Body="&lt;p&gt;You can use the INS / GPS as updates to the output of your first EKF. This is, in fact, not chaining, but simply conditioning the estimate based on the added information from the INS / GPS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Suppose we have the following functions: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$x_{t+1|t}$, $P_{t+1|t}$ = EKF_PREDICT($x_t$, $P_t$, $u_t$), for inputs as state $x$, covariance $P$, and control inputs (estimated by odometry) $u_t$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$x_{t+1|t+1}$, $P_{t+1|t+1}$ = EKF_UPDATE($x_{t+1|t}$, $P_{t+1|t}$, $\hat{x}_{t+1}$).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The estimates from sensors are the $\hat{x}_{t+1}$. We have things like:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\hat{x}^{gps}_{t+1} = f(GPS)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\hat{x}^{map}_{t+1} = f(map)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\hat{x}^{ins}_{t+1} = f(INS)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;etc for all other ways of estimating the state of the robot.&#xA;So running the function EKF_UPDATE for all of those sensors is good enough.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your loop will be something like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;for all time $t$&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Let $u_t$ be the current odometry / kinematic estimate of pose, and $R_u$ be the noise on that estimate.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;$x_{t+1|t}$, $P_{t+1|t}$ = EKF_PREDICT($x_t$, $P_t$, $u_t$, $R_u$)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;for all sensors $S$,&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Let $\hat{x}^{S}_{t+1}$ be the estimate of the pose from that sensor, and $R_{S}$ be the noise on that estimate&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;$x_{t+1|t+1}$, $P_{t+1|t+1}$ = EKF_UPDATE($x_{t+1|t}$, $P_{t+1|t}$, $\hat{x}_{t+1}, R_S$).  &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;end-for&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;end-for&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Some caveats are: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Since we're using the EKF, there is no guarantee that the estimate is independent of the ordering of the updates. That is, if you do INS then GPS, the resulting estimate might be different than if you update with GPS then INS. This is usally not a big deal, but the filter will requiring significantly more tuning. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Please be aware your INS has a bias and drift, which might affect your long-term reliability. GPS can help you a &lt;em&gt;lot&lt;/em&gt; here. Most literature simultaneously estimates the bias and drift in the INS.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="163" LastActivityDate="2013-03-02T19:06:07.223" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1003" PostTypeId="2" ParentId="957" CreationDate="2013-03-02T22:50:35.107" Score="1" Body="&lt;p&gt;As Plecharts said, it depends on your surface.  Magnets work really well for a heavy robot, but iff you're going to drive on metal.  An example can be found on this VEXLabs robot: &lt;a href=&quot;http://www.vexforum.com/wiki/Magbot_Model_3&quot; rel=&quot;nofollow&quot;&gt;http://www.vexforum.com/wiki/Magbot_Model_3&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="314" LastActivityDate="2013-03-02T22:50:35.107" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1004" PostTypeId="2" ParentId="998" CreationDate="2013-03-03T01:11:11.993" Score="3" Body="&lt;p&gt;While I do not know how to fix the root cause of the problem, a work around is to use closed-loop feedback.  If you can measure the speed of each wheel (for example, with encoders), you can use a PID-like algorithm to adjust the speeds of your wheels so the robot goes straight.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A compass or gyroscope would also be suitable for this task.&lt;/p&gt;&#xA;" OwnerUserId="314" LastActivityDate="2013-03-03T01:11:11.993" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1005" PostTypeId="1" CreationDate="2013-03-03T03:19:31.527" Score="6" ViewCount="202" Body="&lt;p&gt;I am trying to control the force of a solenoid. My current system has a bank of capacitors connected to a relay. In order to control the force (how hard I am trying to hit the object) I am increasing or decreasing the the time the relay is on. The problem is this works but it either hits with too much force or way too much force. I can turn the relay on for 5 ms or more. If I try to turn it on for 1 ms it does not even respond. (I am using a mechanical relay.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to have more control on how much of the energy I discharge so I can control how hard/soft the solenoid moves (say discharge only 10 percent of the total energy stored so it hits slower). While searching I found out about Solid State Relays which according to wikipedia can be switched on an off way faster that mechanical relay (of the order of microseconds to milliseconds).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my question is am I on the right track? or is there something better to achieve what I am trying to achieve?&lt;/p&gt;&#xA;" OwnerUserId="968" LastActivityDate="2013-03-17T21:32:00.817" Title="Controlling the Power of a Solenoid" Tags="&lt;control&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1006" PostTypeId="1" AcceptedAnswerId="1008" CreationDate="2013-03-03T20:00:06.140" Score="6" ViewCount="1181" Body="&lt;p&gt;In &lt;a href=&quot;http://www.probabilistic-robotics.org/&quot; rel=&quot;nofollow&quot;&gt;Probablistic Robotics by S. Thrun&lt;/a&gt;, in the first section on the Extended Kalman Filter, it talks about linearizing the process and observation models using first order Taylor expansion.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Equation 3.51 states:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$g(u_t,x_{t-1}) \approx g(u_t,\mu_{t-1}) + g\prime(u_t, \mu_{t-1})(x_{t-1} - \mu_{t-1})$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think $\mu_{t-1}$ is the state estimate from the last time step.  My question is: what is $x_{t-1}$?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, the EKF algorithm following this (on table 3.3) does not use the factor $(x_{t-1} - \mu_{t-1})$ anywhere, only $g\prime(u_t, \mu_{t-1})$.  So after being confused about $x_{t-1}$, I'm left wondering where it went in the algorithm.&lt;/p&gt;&#xA;" OwnerUserId="502" LastEditorUserId="163" LastEditDate="2013-03-10T18:22:14.480" LastActivityDate="2013-03-10T18:22:14.480" Title="Taylor Series expansion for EKF" Tags="&lt;kalman-filter&gt;&lt;theory&gt;&lt;ekf&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1007" PostTypeId="2" ParentId="1006" CreationDate="2013-03-03T20:40:28.717" Score="4" Body="&lt;p&gt;$\mu_{t-1}$ is the state estimate from the last time step, $x_{t-1}$ is the actual state (a random variable) in the last time step. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically it goes like this: in the traditional Kalman filter, you have linear models that tells us how states evolve and measurements are made. In the EKF you have non-linear models but want to use the Kalman filter equations, so you use the first order Taylor expansion as the KF linear model. That way you can still propagate covariances appropriately.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that state and measurement predictions still use the non-linear models. So linearization &quot;only&quot; affects covariance propagation -- which affects everything really, because that regulates how certain you are about your estimates and the relative trust you place on your state estimate vs your measurements.&lt;/p&gt;&#xA;" OwnerUserId="95" LastActivityDate="2013-03-03T20:40:28.717" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1008" PostTypeId="2" ParentId="1006" CreationDate="2013-03-04T03:11:40.997" Score="3" Body="&lt;p&gt;After the propagation step, we need to find the parameters of the Gaussian which describe our new estimate. These are, the mean $\mu$, and the co-variance $\Sigma$. You asked about the mean specifically, so here we go.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that the definition of the mean of the propagated state is the expectation of the propagated state. Taking the expectation of the Taylor series expansion, we have (note I'm using shorter notation of superscript - for prior):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$x = g(x^-, u) $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And by Taylor series expansion,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$x \approx g(x^-, u) + g^\prime(x^- , u) (x-x^-)$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Evaluating the approximate function $g()$ at the mean of the prior yeilds:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$x \approx g(\mu, u) + g^\prime(\mu , u) (x-\mu)$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, let's use $\mathbb{E}$ as the expectation operator to find the expected value of the output (which is the mean of our posterior estimate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\mu = \mathbb{E}[x]$$&#xA;$$\mu = \mathbb{E}[g(\mu^-,u)]$$&#xA;$$\mu \approx \mathbb{E}[g(x^-, u) + g^\prime(x^- , u) (x-\mu^-)]$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\mu \approx \mathbb{E}[g(x^-, u)] + \mathbb{E}[g^\prime(x^- , u) (x-\mu^-)]$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now substitute in $G$, the Jacobian of the function $g$ also evaluated at the mean.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\mu \approx \mathbb{E}[g(x^-, u)] + \mathbb{E}[G\cdot (x-\mu^-)]$$&#xA;$$\mu \approx \mathbb{E}[g(x^-, u)] + \mathbb{E}[G\cdot x - G\cdot \mu^- ]$$&#xA;And by linearity of expectation:&#xA;$$\mu \approx \mathbb{E}[g(x^-, u)] + G\cdot \mathbb{E}[x] - G\cdot \mathbb{E}[\mu^- ]$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And guess what? The expected value of both of those things on the right is zero. (why? because we assumed they were Gaussian).** &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, we have to compute the co variance, defined as $\mathbb{E}\left[ (x-\mathbb{E}[x])(x-\mathbb{E}[x])^T\right]$. You can easily derive this by following the same steps. First expand the terms inside the first expectation, then substitute the linear approximation of $g$ as before. Some matrix algebra will yield the EKF co-variance update. Note that you have to include the &quot;white noise&quot; Jacobian. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;See &lt;a href=&quot;http://services.eng.uts.edu.au/~sdhuang/Extended%20Kalman%20Filter_Shoudong.pdf&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt; for a possibly better derivation.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;**The real lie the EKF tells you is that the term, $\mathbb{E}[g(x^-, u)]$ is the same as $g(\mu^-,u)$, which holds as long as the function $g()$ isn't too crazy.&lt;/p&gt;&#xA;" OwnerUserId="163" LastEditorUserId="163" LastEditDate="2013-03-04T16:50:51.113" LastActivityDate="2013-03-04T16:50:51.113" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1010" PostTypeId="2" ParentId="1005" CreationDate="2013-03-04T10:16:13.823" Score="4" Body="&lt;p&gt;To clarify, you have a bank of capacitors and you want to use them to power a solenoid for a short period of time, right?  I assume you are directly connected to the solenoid coil, not through a controller or anything.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this case the variables you can alter are length of pulse, and current of pulse.  Decreasing either of these will of course cause your capacitors to drain less with each pulse.  The actual force from the solenoid is much more linearly affected by current than length of pulse, and the easiest way to decrease current is to simply stick a power resistor somewhere along the line between the caps and the solenoid.&lt;/p&gt;&#xA;" OwnerUserId="972" LastActivityDate="2013-03-04T10:16:13.823" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1011" PostTypeId="1" AcceptedAnswerId="1017" CreationDate="2013-03-04T14:46:52.133" Score="2" ViewCount="4310" Body="&lt;p&gt;I'm looking to use 4 of &lt;a href=&quot;http://www.batteryspace.com/lifepo426650cell32v3300mah16.5arate10whunapproved.aspx&quot; rel=&quot;nofollow noreferrer&quot;&gt;these 3.2V LiFePO4 batteries&lt;/a&gt;. I intend to have 2 pairs of 2 in series in parallel. So two 6.4V battery packs in parallel. Because my setup will be run off of this, it will also be easiest to recharge the batteries using the same setup. To accomplish this, I'm looking to charge all the batteries at once using &lt;a href=&quot;http://www.batteryspace.com/Smart-Charger-0.7-A-for-6.4V-2-cells-LiFePO4-Battery-Pack-100-240VAC.aspx&quot; rel=&quot;nofollow noreferrer&quot;&gt;this 6.4V LiFePO4 smart charger&lt;/a&gt;. From a simplistic standpoint, the resulting voltage should be correct and this should work fine. However, I know (from a &lt;a href=&quot;https://robotics.stackexchange.com/questions/634/how-to-charge-a-lifepo4-battery&quot;&gt;previous question&lt;/a&gt;) that LiFePO4 battery chargers are a bit more complex then a basic voltage supply and check. Would the setup I've described work correctly? And in general, will a LiFePO4 smart charger be able to charge several batteries of the correct voltage at the same time so long as it doesn't try to charge them at too high an amperage? Or does a LiFePO4 battery also have a minimum amperage cutoff point to charge such that trying to charge more than one battery at a time will cause problems? Any other issues I didn't mention? Thank you much!&lt;/p&gt;&#xA;" OwnerUserId="457" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2019-02-22T19:47:09.427" Title="Charging multiple LiFePO4 batteries at the same time?" Tags="&lt;battery&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1012" PostTypeId="2" ParentId="1011" CreationDate="2013-03-04T19:24:24.810" Score="4" Body="&lt;p&gt;Basically for charging LiPo/LiFe, you will need charger with balancer which measure each cell voltage level, as they tend to overheat or get damaged or even burst into a flame when handling carelessly. Lipo/life doesn't like trickle charge as NiMh or NiCd and also you will need constant current output at different voltage levels. But there are smart chargers that can handle this. I guess you will need to connect all 4 cells to balancer as they are separated battery packs...&lt;/p&gt;&#xA;" OwnerUserId="973" LastEditorUserId="37" LastEditDate="2013-03-05T11:18:03.847" LastActivityDate="2013-03-05T11:18:03.847" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1013" PostTypeId="2" ParentId="989" CreationDate="2013-03-04T21:54:21.053" Score="4" Body="&lt;p&gt;Of course adding random particles will change the pose of the robot. That's the point: To add randomness to account for errors you can't compute yourself. You should add random particles every time the state of the robot may change, then adjust the weight of the particles based on which seem likely given sensor data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a very basic definition of particle filters. I suggest you roll up your sleeves and do some more research on the subject.&lt;/p&gt;&#xA;" OwnerUserId="163" LastActivityDate="2013-03-04T21:54:21.053" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1014" PostTypeId="1" CreationDate="2013-03-05T00:15:58.700" Score="5" ViewCount="1707" Body="&lt;p&gt;I saw this art drawing robot on youtube:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=Wo15zXhFdzo&quot;&gt;http://www.youtube.com/watch?v=Wo15zXhFdzo&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What do I need to learn in order to build something like that? What are some beginner oriented projects that could lead up to building something like this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm an experienced programmer but I have very little hardware experience.&lt;/p&gt;&#xA;" OwnerUserId="975" LastActivityDate="2013-03-07T11:58:40.830" Title="How would I go about making an art drawing robot like this?" Tags="&lt;robotic-arm&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1016" PostTypeId="2" ParentId="1014" CreationDate="2013-03-05T04:45:16.457" Score="9" Body="&lt;p&gt;This project is a great starter project for a programmer trying to get into robotics because it doesn't require a lot of knowledge or experience. Though it does require a small investment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The arm itself is one of the &lt;a href=&quot;http://www.lynxmotion.com/c-27-robotic-arms.aspx&quot;&gt;LynxMotion Arms&lt;/a&gt; though I don't remember precisely which. An &lt;a href=&quot;http://www.lynxmotion.com/p-395-ssc-32-servo-controller.aspx&quot;&gt;SSC-32&lt;/a&gt; was used to interface the arm with the controlling computer. The SSC-32 has a really simple protocol and appears as a serial device. As such if you have any experience working with serial devices then you already know how to communicate with this robot. Otherwise, and it probably goes without saying, you need to learn how to communicate with serial devices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With that said the real challenge with such a project would be learning how to control the location of the end effector by setting the angles of the joints. This is known as the &lt;a href=&quot;http://en.wikipedia.org/wiki/Forward_kinematics&quot;&gt;forward kinematics&lt;/a&gt; problem and requires a &lt;a href=&quot;http://en.wikipedia.org/wiki/Kinematics&quot;&gt;kinematic&lt;/a&gt; model of the arm. You will also need to learn how to determine what joint angles are required given a desired end effector position. This is known as the &lt;a href=&quot;http://en.wikipedia.org/wiki/Inverse_kinematics&quot;&gt;inverse kinematics&lt;/a&gt; problem. Dr. Hollerbach's &lt;a href=&quot;http://www.eng.utah.edu/~cs5310/chapters.html&quot;&gt;notes&lt;/a&gt; are a good resource for learning how to solve these problems. Interestingly @abstractcement had the idea of using &lt;a href=&quot;http://en.wikipedia.org/wiki/Bilinear_interpolation&quot;&gt;bilinear interpolation&lt;/a&gt; to bypass the need for solving these problems which worked out beautifully.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could also look into creating a &lt;a href=&quot;http://en.wikipedia.org/wiki/Dynamical_system&quot;&gt;dynamical&lt;/a&gt; model to control the forces and torques in the system. However in this project the robot moved slowly enough that the dynamics were neglible and were ignored altogether.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The real challenges with a painting robot are in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Automated_planning_and_scheduling&quot;&gt;automated planning&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Motion_planning&quot;&gt;motion planning&lt;/a&gt;, and &lt;a href=&quot;http://en.wikipedia.org/wiki/Control_theory&quot;&gt;control&lt;/a&gt;. But I won't go into any of that here because I believe it's beyond the scope of what you are asking.&lt;/p&gt;&#xA;" OwnerUserId="177" LastActivityDate="2013-03-05T04:45:16.457" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1017" PostTypeId="2" ParentId="1011" CreationDate="2013-03-05T17:35:44.570" Score="2" Body="&lt;p&gt;It sounds like you're planning to create a 2×2 configuration of individual cells, which is a common configuration:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/q5qFK.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/q5qFK.jpg&quot; alt=&quot;4 pack 6.4V lithium battery&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&#xA;&lt;sub&gt;(source: &lt;a href=&quot;http://img.diytrade.com/cdimg/113732/22434825/0/1310733466/lifepo4_lithium_battery_6_4v_1ah.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;diytrade.com&lt;/a&gt;)&lt;/sub&gt;&lt;/p&gt;&#xA;&lt;p&gt;The 6.4V charger is designed for a pair of 3.2V cells in series, so you should be able to add as many parallel stacks of these as you like.  They will simply take longer to charge.&lt;/p&gt;&#xA;&lt;p&gt;At one of my previous jobs, we had a homemade 1.5kW battery that was made of 648 (yes, six hundred and forty eight) LiPoly 18650 cells: 24 supercells in series, each cell being 27 batteries in parallel.  &lt;strong&gt;I do not recommend this setup.&lt;/strong&gt;  The cells within each supercell will charge evenly because they are in parallel, but the series cells do not.  Here's an example of what the supercell charges looked like when we serviced the battery and each supercell was equally charged (ours were 3.7V min, 4.2V max):&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://1.bp.blogspot.com/_Hgp1nzunDXk/Ss-ltn0RyWI/AAAAAAAAAUo/9jzuvjOXeCw/s1600-h/chart_battery_recharge_456.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://1.bp.blogspot.com/_Hgp1nzunDXk/Ss-ltn0RyWI/AAAAAAAAAUo/9jzuvjOXeCw/s320/chart_battery_recharge_456.png&quot; alt=&quot;Mission 456&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;As you can see, they mostly discharge and charge together -- you can see the point at which we plugged in the charger.  A few testing days later, one of the cells began drifting apart:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://4.bp.blogspot.com/_Hgp1nzunDXk/SuVxTh3O4AI/AAAAAAAAAX4/lIHVyUZ-8ZU/s1600-h/chart-batteryvoltage-546.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://4.bp.blogspot.com/_Hgp1nzunDXk/SuVxTh3O4AI/AAAAAAAAAX4/lIHVyUZ-8ZU/s320/chart-batteryvoltage-546.png&quot; alt=&quot;Mission 546&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Eventually, they look like this (what it looked like before servicing):&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://4.bp.blogspot.com/_Hgp1nzunDXk/SrOZSPKes0I/AAAAAAAAAQY/0DH79FlrRD0/s1600-h/Battery+Voltages+Recharging.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://4.bp.blogspot.com/_Hgp1nzunDXk/SrOZSPKes0I/AAAAAAAAAQY/0DH79FlrRD0/s320/Battery+Voltages+Recharging.png&quot; alt=&quot;Mission 394&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The moral of the story is that using many cells in series doesn't guarantee even charging, because each cell has a slightly different capacity.  Using cells in parallel is better because it keeps their voltages equal.&lt;/p&gt;&#xA;&lt;p&gt;For your particular case: if you don't charge all 4 cells in parallel, make sure that you monitor the voltage of each set of cells in the series -- one parallel pair will have a higher voltage than the other parallel pair.  Don't discharge them below the minimum rated voltage of the low pair, and don't charge them above the maximum rated voltage of the higher pair.  The difference in voltage between the two sets of cells will impact your available operating time, so it will make sense to manually balance the voltages (using 3.2V parallel charging) every so often.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2019-02-22T19:47:09.427" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="1018" PostTypeId="1" CreationDate="2013-03-07T02:33:41.910" Score="8" ViewCount="388" Body="&lt;p&gt;I am using the &lt;a href=&quot;http://www.pololu.com/file/0J37/ssc03a_guide.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pololu Micro Serial Servo Controller&lt;/a&gt; connected to an Arduino and multiple other servos (4 total) to make a robot arm.  Two of the four servos require 4-6 volts, while the other 2 require 7-10 volts, so I am planning on powering all the servos separate from the Pololu.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have the Arduino and Pololu connecting to each other correctly (flashing green led), but the servo(s) don't move when plugged in to the control pins.  All the servos work correctly when plugged into a servo-tester.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think that this problem could be fixed by connecting the grounds of the servos to the ground of the Pololu, but would like advice because I am not sure if it will work, or will end up frying one of the parts (We already fried a pololu).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would connecting the grounds of the batteries to the ground of the Pololu help, or damage the parts?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/Gf2t4.jpg&quot; alt=&quot;Wiring Diagram&quot;&gt;, but I couldn't figure out how to show the micro serial servo controller.&lt;/p&gt;&#xA;" OwnerUserId="984" LastEditorUserId="37" LastEditDate="2013-05-20T16:05:29.857" LastActivityDate="2013-05-20T16:05:29.857" Title="Connecting multiple different voltage servos to the same controller" Tags="&lt;rcservo&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1019" PostTypeId="2" ParentId="1014" CreationDate="2013-03-07T05:07:41.933" Score="3" Body="&lt;p&gt;I was in your situation when I made that video, but DaemonMaker, my friend who studies Robotics, helped immensely.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't really add much beyond &lt;a href=&quot;https://robotics.stackexchange.com/a/1016/37&quot;&gt;what DaemonMaker said&lt;/a&gt; because my focus is on stroke planning and automatic painting and most of my work runs on simulated brushes and simulated canvas.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm preparing my techniques for profit and publication and wouldn't disclose them on a public forum. However, there are other methods out there, to control the robot, such as those mentioned by Aaron Hertzmann in &lt;a href=&quot;http://www.mrl.nyu.edu/publications/hertzmann-thesis/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Algorithms for Rendering in Artistic Styles&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;We describe new algorithms and tools for generating paintings, illustrations, and animation on a computer. These algorithms are designed to produce visually appealing and expressive images that look hand-painted or hand-drawn. In many contexts, painting and illustration have many advantages over photorealistic computer graphics, in aspects such as aesthetics, expression, and computational requirements. We explore three general strategies for non-photorealistic rendering&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This technology has been around for a long time and if you're mostly interested in the robot, you can use this instead of worrying about control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hertzmann's algorithm depends on comparisons between the canvas and the reference image. If you want to do it with a robot, you'll need a camera to photograph the painting before and after every brush stroke. You'll also probably need computer vision algorithms to negate lens distortion, align the canvas and reference images, and adjust color biases from the illumination.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's good to see fresh interest in the subject.&lt;/p&gt;&#xA;" OwnerUserId="976" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2013-03-07T11:58:40.830" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1020" PostTypeId="1" AcceptedAnswerId="1031" CreationDate="2013-03-07T15:52:55.750" Score="10" ViewCount="6913" Body="&lt;p&gt;I would like to build a robot which follows a virtual path (Not a visible path like a 'black line on a white surface', etc).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm just enthusiastic by seeing some sci-fi videos which show robots carry goods and materials in a crowded place. And they really don't follow a physical line. They sense obstacles, depth, etc.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to build one such robot which follows a specific (virtual)  path from point A to B.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have tried a couple of things:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Using a magnetic &quot;Hall effect&quot; sensor on the robot and wire carrying current (beneath the table). The problem here was that the vicinity of the hall effect sensor is so small (&amp;lt; 2cms) that it is very difficult to judge whether robot is on the line or off the line. Even using series of magnets couldn't solve this issue, as my table is 1 inch thick. So this idea flopped :P&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Using an ultraviolet paint (on a line) and using UV leds on the robot as sensors. This will give more Zig-Zag motion for the robot. And due to potential threats of using UV light source, even this idea flopped :P&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I finally thought of having a camera on top and using image processing algorithms to see whether robot is on the line or diverging.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any better solution than this? Really looking for some creative and simple solutions. :)&lt;/p&gt;&#xA;" OwnerUserId="986" LastEditorUserId="134" LastEditDate="2013-08-20T07:40:11.267" LastActivityDate="2021-01-16T03:38:42.007" Title="How to make an &quot;invisible line following robot&quot;?" Tags="&lt;mobile-robot&gt;&lt;localization&gt;&lt;wheeled-robot&gt;&lt;industrial-robot&gt;&lt;line-following&gt;" AnswerCount="5" CommentCount="7" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1021" PostTypeId="1" CreationDate="2013-03-08T05:46:19.160" Score="4" ViewCount="166" Body="&lt;p&gt;Does anyone know if small mechanical actuators exist which can be controlled electrically, sort of like a miniature joystick, but in reverse.  Instead of it picking up mechanical movement and outputting electrical signals, I want it to generate mechanical movement controlled via my electrical input signals.  I’ve searched for : electromechanical actuators, not finding what I need. Think of a pencil attached to a surface which can pivot to point anywhere in its half dome.  I’m thinking small, on the order of an inch.  It will not be load bearing. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My goal is to programmatically control the normal pointed to by a small flat surface attached to the end of each joystick rod.  Accuracy is more important than speed.  From across a small room, say 10' by 10', I'd like the surface normal to accurately point to arbitrary objects in the room, say a person walking across the room.  If I can cheaply buy/build such mechanisms to control the movement of these small flat surfaces, I would like dozens places across the walls of the room.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Its for an electromechanical sound project I’m planning. &lt;/p&gt;&#xA;" OwnerUserId="988" LastEditorUserId="988" LastEditDate="2013-03-08T20:42:32.280" LastActivityDate="2015-08-25T09:54:44.667" Title="looking for a miniature joystick, but in reverse" Tags="&lt;control&gt;&lt;actuator&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1023" PostTypeId="1" AcceptedAnswerId="1027" CreationDate="2013-03-08T08:44:20.903" Score="0" ViewCount="638" Body="&lt;p&gt;I'm building a quadruped and I'm not sure of the features I should be looking for in a servo motor. e.g. digital vs analog, signal vs dual bearings. Some of the ones I'm considering are &lt;a href=&quot;http://www.servodatabase.com/compare?servos=806,1660,1664,1666http://www.servodatabase.com/compare?servos=806,1660,1664,1666&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="374" LastEditorUserId="110" LastEditDate="2016-01-03T13:53:37.530" LastActivityDate="2016-01-03T13:53:37.530" Title="Servo motor considerations for a quadruped" Tags="&lt;rcservo&gt;&lt;walking-robot&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1024" PostTypeId="2" ParentId="1021" CreationDate="2013-03-08T09:17:09.473" Score="2" Body="&lt;p&gt;You could do this using two servos (one for each axis).&#xA;Here is what I mean (sorry for the poor graphics) :&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit : trying to find the original image and upload it.&lt;/p&gt;&#xA;" OwnerUserId="943" LastEditorUserId="943" LastEditDate="2015-08-25T09:54:44.667" LastActivityDate="2015-08-25T09:54:44.667" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="1025" PostTypeId="1" CreationDate="2013-03-08T15:27:12.387" Score="4" ViewCount="4559" Body="&lt;p&gt;I am working on this project that involves using the Kinect for XBOX 360S with ROS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did all the steps mentioned in the ROS Tutorials to have Openni Installed and the Prime sense and other drivers. and when i go to Openni samples i see a output. But in ROS i do a roscore and in another terminal do a roslaunch openni_launch openni.launch. And it loads with the regular calibration warnings and service already registered errors. Then in another terminal i open Rviz which gives a error /.rviz/display_config does not exist. And even though i accept the error and go ahead i see a black window which shows no output ,even if i do all tasks mentioned at the RVIZ Tutorials. Also i tried running &quot;rosrun image_view image_view image:=/camera/rgb/image_color&quot; and it shows up a blank window with no output. How do i resolve this and get ros to show my kinect data??&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need to run RGBDSLAM and use this kinect later.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am on Ubuntu 12.04 and ROS-Fuerte.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Well when i launch the openni.launch it starts as usual except for the errors ¨Tried to advertise a service that is already advertised in this node.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And when i run a rostopic it just says subscribed to the /camera/depth_registered/points and cursor keeps blinking.&#xA;Even subscribing to the rectified topics just says subscribed and nothing more happens.&lt;/p&gt;&#xA;" OwnerUserId="853" LastEditorUserId="350" LastEditDate="2013-03-08T19:42:21.993" LastActivityDate="2013-07-19T19:48:25.337" Title="Cant see Kinect Data in ROS" Tags="&lt;kinect&gt;&lt;ros&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1026" PostTypeId="2" ParentId="287" CreationDate="2013-03-08T18:53:34.163" Score="2" Body="&lt;p&gt;&lt;a href=&quot;http://www.microsoft.com/robotics/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Microsoft Robotics&lt;/a&gt; uses a protocol called &lt;a href=&quot;http://social.msdn.microsoft.com/Forums/en-US/roboticsdss/thread/babf3e90-8196-40b2-a4a1-5f2ecc4e9b47&quot; rel=&quot;nofollow noreferrer&quot;&gt;Decentralized Software Services Protocol (DSSP)&lt;/a&gt; and they &lt;a href=&quot;https://docs.microsoft.com/en-us/archive/blogs/msroboticsstudio/decentralized-software-services-protocol-dssp-placed-under-microsoft-open-specification-promise&quot; rel=&quot;nofollow noreferrer&quot;&gt;released the specs&lt;/a&gt; under a license that allows anyone to implement it in any language. The DSSP protocol is totally compatible with current web standards and I think it would be a great idea to implement it in JavaScript and NodeJS. That can make it possible for your node application to interact with any DSS robotics services available today.&lt;/p&gt;&#xA;" OwnerUserId="994" LastEditorUserId="15160" LastEditDate="2021-01-01T14:34:59.343" LastActivityDate="2021-01-01T14:34:59.343" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="1027" PostTypeId="2" ParentId="1023" CreationDate="2013-03-08T20:20:45.860" Score="1" Body="&lt;p&gt;If you are not on the budget, go for the digital with metal gears. Basically, higher the torque better your bot will be. For the legged bots speed of the servo is not an issue but torque is. &#xA;To be sure that servo will have enough torque, you will need to roughly calculate the mass of the bot, divide it by number of legs - 2. As during the walk two legs will be in the air and other legs need to be able to hold the mass of the bot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also consider how many DOF one leg will have. In 3 DOF leg systems, one servo is used for rotation of the leg and it will not be under heavy load. So that one can be &quot;cheaper&quot; servo. Consider that on 4 legged system you will need 12 servos. Having 4 of them cheaper would mean more money for sensors or lighter material for construction ... &lt;/p&gt;&#xA;" OwnerUserId="973" LastActivityDate="2013-03-08T20:20:45.860" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1028" PostTypeId="2" ParentId="1018" CreationDate="2013-03-08T20:38:02.217" Score="2" Body="&lt;p&gt;You have a floating signal of servo ctrl, because they are not on the same common. &#xA;Output from arduino (if not on the same common as servo) will be on the different potential level than input on servos. So servo will see it as a floating potential between his ground and his vcc potential.&#xA;(i hope you did understand what i wanted to say, its hard for me to explain it on English :) )&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I guess your diagram is not connected like you have posted, because you have connected +5 and gnd from arduino to digital 3 and inputs from both servos are connected.&lt;/p&gt;&#xA;" OwnerUserId="973" LastActivityDate="2013-03-08T20:38:02.217" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1030" PostTypeId="2" ParentId="1018" CreationDate="2013-03-08T23:20:30.377" Score="2" Body="&lt;p&gt;I fixed the servos by connecting the ground of the external batteries to the ground of the pololu and arduino circuit boards, then spent an hour to realize that a wire was loose.  :S&lt;/p&gt;&#xA;" OwnerUserId="984" LastActivityDate="2013-03-08T23:20:30.377" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1031" PostTypeId="2" ParentId="1020" CreationDate="2013-03-08T23:47:22.313" Score="3" Body="&lt;p&gt;There are many possible ways to approach this problem, and they all depend on the material available and the expertise of the robot builder.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In short, the criteria is that:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The robot must get from point A to B following a pre-defined path.&lt;/li&gt;&#xA;&lt;li&gt;The path taken must not follow a line visible to the human eye.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Depending on the length of the path, using &lt;strong&gt;encoders&lt;/strong&gt; could be sufficient.  However, it should be noted that due to physical inaccuracy, drift makes odometry (what we call using encoders to measure distance) impractical for long distances.  However, this is easy for short distances, and should be at least considered.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the distance is too far for only odometry, one should consider using some sensor to measure turns (for instance, a &lt;strong&gt;gyroscope or compass&lt;/strong&gt;).  Turns tend to introduce the most error in odometry (measuring along a straight line doesn't have too much error), so using a sensor for turns can sometimes make odometry a viable solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If odometry or odometry + sensed turning doesn't work, then we get to be creative.  If you want the robot to follow a path composed of mostly straight segments, you could place &lt;strong&gt;IR LEDs&lt;/strong&gt; at given &quot;waypoints&quot; on the table, and have the robot sense those LEDs and drive towards each waypoint in series.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, that still leaves some visual marking on the table (although it could be disguised to some extent), and it would be great to be able to do without that.  Another approach would be to use &lt;strong&gt;laser pointers&lt;/strong&gt; shining parallel to the surface of the table, but a few inches above the table.  The robot could use a photoresistor to detect when it crosses a laser, and this could let it know when to turn.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All-in-all, I think that the odometry augmented with an angle sensor is probably the best bet for your robot, at least with the way you have described it.  I may be able to think of more options, but that's all I see right now.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just curious--why do you want the line to be invisible?  Knowing why could open up some more possibilities.&lt;/p&gt;&#xA;" OwnerUserId="314" LastActivityDate="2013-03-08T23:47:22.313" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1032" PostTypeId="1" AcceptedAnswerId="1034" CreationDate="2013-03-09T15:52:12.467" Score="14" ViewCount="5365" Body="&lt;p&gt;I'm considering experimenting with PIV control instead of PID control. Contrary to PID, PIV control has very little explanation on the internet and literature. There is almost a single source of information explaining the method, which is a &lt;a href=&quot;http://parkermotion.com/whitepages/ServoFundamentals.pdf&quot;&gt;technical paper by Parker Motion&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I understand from the control method diagram (which is in Laplace domain) is that the control output boils down to the sum of:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Kpp*(integral of position error)&lt;/li&gt;&#xA;&lt;li&gt;-Kiv*(integral of measured velocity)&lt;/li&gt;&#xA;&lt;li&gt;-Kpv*(measured velocity)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Am I correct? Thank you. &lt;/p&gt;&#xA;" OwnerUserId="1000" LastEditorUserId="95" LastEditDate="2013-03-10T19:52:09.437" LastActivityDate="2016-09-01T19:23:33.303" Title="How is PIV control performed?" Tags="&lt;control&gt;&lt;otherservos&gt;&lt;pid&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1033" PostTypeId="1" AcceptedAnswerId="1085" CreationDate="2013-03-09T17:01:12.603" Score="9" ViewCount="395" Body="&lt;p&gt;I'm trying to learn about servo control. I have seen that the most generic position control method for servos is PID, where the control input is position error. However, I am not sure about what is the actuated quantity. I am guessing that it is one of:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Voltage applied to the motor&lt;/li&gt;&#xA;&lt;li&gt;Current applied to the motor&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I am then guessing that the actuated quantity gets turned into one of:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Torque that the motor exerts&lt;/li&gt;&#xA;&lt;li&gt;Angular velocity that the motor runs at&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I haven't been able to get my hands on and explicitly control a physical servo so I cannot confirm that the actuated quantity is any of these. I know very little of the electronics that controls the motor. It might well be that the controlled quantities are different for different series servos. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My bet is on torque control. However, assume that the servo is holding a weight at a distance (so it is acting against gravity), which means an approximately constant torque load. In this case, if the position error is zero and the servo is at rest, then each of P, I and D components are zero, which means the exerted torque is zero. This would cause the weight to sink, which is countered by the error in its position causing P,I components to increase. Wouldn't this situation cause the lifted weight to oscillate and balance at a constant position which is significantly different from the goal position? This isn't the case with the videos of servos I have seen lifting weights. Or is this the case and friction is smoothing everything out? Please help me understand. &lt;/p&gt;&#xA;" OwnerUserId="1000" LastEditorUserId="1000" LastEditDate="2013-03-10T09:07:44.020" LastActivityDate="2021-03-13T17:29:58.763" Title="What is the actual physical actuated quantity when controlling the position of a servo?" Tags="&lt;otherservos&gt;&lt;pid&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1034" PostTypeId="2" ParentId="1032" CreationDate="2013-03-09T21:59:37.393" Score="4" Body="&lt;p&gt;It seems to me like there are three basic differences between the classic PID topology and the so-called PIV topology mentioned in the white paper:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Desired velocity is assumed to be proportional to position error, the $K_p$ term regulates this.&lt;/li&gt;&#xA;&lt;li&gt;The integral error gain $K_i$ works to remove steady state errors in velocity, not position. That is essentially the same thing, however, due to item #1.&lt;/li&gt;&#xA;&lt;li&gt;The velocity estimate is fed directly through the $K_v$ term (instead of considering the derivative of position error).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;In the paper they claim that the main advantage of this topology is that it is easier to tune.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The output of the controller is formed as follows:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$e_\theta=\theta^*-\theta\\&#xA;e_\omega = (K_pe_\theta-\hat{\omega})\\&#xA;\text{output} = \int K_ie_\omega dt - K_v\hat{\omega}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, since you will probably be programming this, the integral is replaced by an accumulator variable as follows:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$e_\theta=\theta^*-\theta\\&#xA;e_\omega = (K_pe_\theta-\hat{\omega})\\&#xA;\text{integral} = \text{integral} + K_ie_\omega \Delta t \\&#xA;\text{output} = \text{integral} - K_v\hat{\omega}$&lt;/p&gt;&#xA;" OwnerUserId="95" LastEditorUserId="95" LastEditDate="2013-03-10T14:41:48.330" LastActivityDate="2013-03-10T14:41:48.330" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="1035" PostTypeId="2" ParentId="1033" CreationDate="2013-03-09T22:11:30.297" Score="3" Body="&lt;p&gt;Your intuition is right but your question is actually a bit off, I would say. The variable controlled is indeed position. What you want to know is what variable is actuated, that is, what do we use to control position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know much about the internals of servomotors, but when performing PID control of DC motors it is quite common to use the voltage applied to the motor through pulse-width modulation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding the second part of your question, part of what you see is probably due to the gears or simply appropriate tuning of the controller, but I can't say much about it without seeing the videos you mention. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to know more about the interplay of angular velocity, torque, etc., you should look up DC motor models, which is one of the building blocks of servos. That way you will find that it is common to assume that angular velocity is proportional to armature current and other things, and understand how the blue box the white paper you mentioned represents the motor.&lt;/p&gt;&#xA;" OwnerUserId="95" LastEditorUserId="95" LastEditDate="2013-03-10T15:05:14.130" LastActivityDate="2013-03-10T15:05:14.130" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1036" PostTypeId="1" AcceptedAnswerId="1044" CreationDate="2013-03-10T07:07:13.193" Score="13" ViewCount="1298" Body="&lt;p&gt;Is there web mapping tool that allows developers to use it to plot GPS data of autonomous vehicles/robots?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;Google Maps&lt;/code&gt; forbids it. See &lt;a href=&quot;https://developers.google.com/maps/terms&quot;&gt;10.2.C&lt;/a&gt;. &lt;code&gt;Google Earth&lt;/code&gt; terms of use link jumps to the same page. &lt;code&gt;Bing&lt;/code&gt; Maps looks the similar (see &lt;a href=&quot;http://www.microsoft.com/maps/product/terms.html&quot;&gt;3.2.(g)&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I want is a internet-based tool that shows either/both satellite images and/or map, which can overlay plot using its API. &lt;a href=&quot;https://github.com/ros-visualization/rqt_common_plugins/issues/41&quot;&gt;I'm making a generic GPS plotter&lt;/a&gt; on &lt;code&gt;ROS&lt;/code&gt; that could be used both for slow robots or fast vehicles/cars.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="60" LastEditorUserId="60" LastEditDate="2013-03-16T09:27:23.673" LastActivityDate="2013-03-19T08:43:29.430" Title="Web mapping that can be used for autonomous vehicles/robots" Tags="&lt;gps&gt;&lt;visualization&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1037" PostTypeId="1" CreationDate="2013-03-10T19:38:35.130" Score="8" ViewCount="596" Body="&lt;p&gt;I've already built a two wheeled balancing robot using some continuous rotation servos and an accelerometer/gyroscope.  I upgraded the servos to some geared DC motors with 8-bit encoders with the goal having the robot drive around while balancing.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm kind of stuck on how to program it to drive around while still balancing.  I think one way would be to just have the control input to the motors act sort of like pushing it.  So the robot would be momentarily unbalanced in the direction I want it to travel.  That seems kind of clumsy to me though.  There must be a better way of doing?  I think I need to combine the dynamic model for the balancer with the differential drive but this is a bit beyond the control theory that I know.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt; &#xA;From Anorton's answer I have a good looking state matrix now. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now about pole placement:  The A matrix will will have to be 4x4 based on the new state vector.  And B will then have to be a 4x2 matrix since I can only control the left/right wheel torque (u = 2x1 vector).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I may need to read more about this but is there a systematic way to determine the A matrix by pole placement?  It seems to me for this example and even more complicated examples, determining A by guess and check would be very difficult.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update #2&lt;/strong&gt;&#xA;After a bit of reading I think I understand it now.  I still need the dynamics of the robot to determine the A matrix.  Once I have that I can do the pole placement using matlab or octave.   &lt;/p&gt;&#xA;" OwnerUserId="529" LastEditorUserId="529" LastEditDate="2013-03-14T02:37:16.413" LastActivityDate="2013-03-14T02:37:16.413" Title="Building a balancing robot with differential drive" Tags="&lt;mobile-robot&gt;&lt;control&gt;&lt;dynamics&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1039" PostTypeId="1" AcceptedAnswerId="1042" CreationDate="2013-03-11T00:45:09.677" Score="0" ViewCount="807" Body="&lt;p&gt;I am writing a method (Java) that will reset the position of e-puck in Webots. I have been following tutorial on &lt;a href=&quot;http://www.cyberbotics.com/guide/section6.3.php&quot; rel=&quot;nofollow&quot;&gt;Supervisor approach&lt;/a&gt;. I have two controllers in my project:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;SupervisorController extends &lt;a href=&quot;http://www.cyberbotics.com/reference/section3.47.php&quot; rel=&quot;nofollow&quot;&gt;Supervisor&lt;/a&gt; - responsible for genetic algorithm and resetting e-puck's position&lt;/li&gt;&#xA;&lt;li&gt;EpuckController extends &lt;a href=&quot;http://www.cyberbotics.com/reference/section3.41.php&quot; rel=&quot;nofollow&quot;&gt;Robot&lt;/a&gt; - drives the robot&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Robots are communicating via Emitter and Receiver, and everything works fine but the position reset.&#xA;This is what I'm doing in SupervisorController:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;412 Node epuck = getFromDef(&quot;epuck&quot;);    &#xA;413 Field fldTranslation = epuck.getField(&quot;translation&quot;);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And as a result I get this exception:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[SupervisorController] Exception in thread &quot;main&quot; java.lang.NullPointerException&#xA;[SupervisorController]  at SupervisorController.initialise(SupervisorController.java:413)&#xA;[SupervisorController]  at SupervisorController.main(SupervisorController.java:497)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;epuck variable is null. I tried calling different methods on epuck, and they all resulted in NullPointerException. The name of e-puck matches the world file. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;DEF EPUCK DifferentialWheels {&#xA;  translation 0.134826 -0.000327529 0.107963&#xA;  rotation 0.0244439 0.999246 -0.0301538 1.95838&#xA;  children [&#xA;  (........)&#xA;  ]&#xA;  name &quot;epuck&quot;&#xA;  controller &quot;EpuckController&quot;&#xA;  axleLength 0.052&#xA;  wheelRadius 0.0205&#xA;  maxSpeed 6.28&#xA;  speedUnit 0.00628&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I would appreciate any advice on how to get a handle to the robot or where to look for issues in simulation/code.&lt;/p&gt;&#xA;" OwnerUserId="863" LastEditorUserId="350" LastEditDate="2013-03-11T16:20:07.677" LastActivityDate="2013-03-11T16:20:07.677" Title="Resetting position of e-puck in Webots using Supervisor node - problem with getting a handle to the robot" Tags="&lt;mobile-robot&gt;&lt;simulator&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1041" PostTypeId="2" ParentId="1037" CreationDate="2013-03-11T03:39:35.553" Score="8" Body="&lt;p&gt;Disclaimer: I have never done this myself, but only have seen a description of it being done through Georgia Tech's &quot;Control of Mobile Robotics&quot; on Coursera.  My knowledge of controls is spotty, too.  Thus... take this with a grain of salt. &lt;code&gt;:)&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To keep the robot upright (and still), you're trying to stabilize (send to $0$) the state $x$, where:&#xA;$$x=\left[\begin{array}{c}\text{leftVelocity} \\ \text{rightVelocity} \\ \text{angle from vertical}\end{array}\right]$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, when this system is stable, the left and right wheel velocities will be $0$.  So, we want an offset for the target speed:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$x_{new}=\left[\begin{array}{c}\text{leftVelocity}-\delta_L \\ \text{rightVelocity}-\delta_R \\ \text{angle from vertical}\end{array}\right]$$&#xA;Where $\delta$ is the target speed for either side.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When this system is stabilized, the robot will be upright, and will have each wheel rotating at a desired speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the basic approach/outline.  I'll edit this with some more details tomorrow (and actual math, etc.), but I wanted to at least post the general idea now.  (It's late in my time zone, and I have an early class to get to.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDITED:&lt;/strong&gt;&#xA;Oh goodness.  So, I just looked back at the slides relating to this in the Coursera course (Section 4, slide 29).  You may want to go and enroll in that class just to download that slide set... &lt;code&gt;:)&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The hard part is computing the $A$ and $B$ matrices (it's a big linearization mess).  Anyway, you want to make your state matrix as follows (not as above--my memory wasn't exactly right):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$x=\left[\begin{array}{c}v \\ \omega \\ \phi \\ \dot \phi\end{array}\right]$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where $v$ is the velocity of the segway, $\omega$ is the rotational velocity (how fast the robot is pivoting) and $\phi$ is the angle from vertical.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We want to have a desired velocity, so let's define a new state vector:&#xA;$$\begin{align}\tilde x &amp;amp;= x - \left[\begin{array}{c}v_d \\ \omega_d \\ 0 \\ 0 \end{array}\right]\\&#xA;&amp;amp;= x - \delta&#xA;\end{align}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where $\delta$ is the desired velocity and rotational quantity (as seen above).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Differentiating:&#xA;$$\dot{\tilde x} = \dot x - \dot \delta \underset{\text{$\delta$ is constant}}{=} \dot x$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus, we have&#xA;$$\dot{\tilde x} = Ax + Bu$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where $A$ is the standard coeff matrix $B$ is the input matrix, and $u$ is the control vector.  We can then say:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\dot{\tilde x} = A(x - \delta) + Bu + A\delta$$&#xA;But, based on the solution for $A$ (from Coursera), $A\delta = 0$.  Thus:&#xA;$$\dot{\tilde x} = A\tilde x+ Bu$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now you can use pole placement to determine the correct eigenvalues, etc.&lt;/p&gt;&#xA;" OwnerUserId="314" LastEditorUserId="314" LastEditDate="2013-03-13T02:25:06.047" LastActivityDate="2013-03-13T02:25:06.047" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1042" PostTypeId="2" ParentId="1039" CreationDate="2013-03-11T11:42:53.443" Score="1" Body="&lt;p&gt;The Solid nodes (including Robot and Supervisor nodes) have a DEF name, like any other node and it is usually written in upper-case. These nodes also have a field &quot;name&quot;. Both may be used by a Supervisor, it depends on which function is called. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my case, the function getFromDef() expects a DEF name as argument, and not the name from the &quot;name&quot; field. The DEF name of my e-puck is &quot;EPUCK&quot; - hence modifying controller to:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Node epuck = getFromDef(&quot;EPUCK&quot;);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;solved the problem.&lt;/p&gt;&#xA;" OwnerUserId="863" LastEditorUserId="863" LastEditDate="2013-03-11T13:56:18.517" LastActivityDate="2013-03-11T13:56:18.517" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1043" PostTypeId="2" ParentId="1036" CreationDate="2013-03-11T16:28:22.947" Score="6" Body="&lt;p&gt;&lt;a href=&quot;http://www.google.com/earth/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Google Earth&lt;/a&gt; exists for precisely this purpose: overlaying your own data on a map.  You simply write scripts to translate (or export) your data into &lt;a href=&quot;https://developers.google.com/kml/documentation/&quot; rel=&quot;nofollow noreferrer&quot;&gt;KML format&lt;/a&gt; then add the URL to Google Earth like so:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://www.woopra.com/wp-content/uploads/2009/10/add_network_link.png&quot; alt=&quot;Add network link&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With regard to terms of use: the terms of use for Google Earth only forbid you to use the software to control the behavior of your vehicle, not to represent its past behavior.  (Their concern is most likely to limit their liability from you trying to draw a path on a road in GE for a robot to follow, and having it crash into something due to a map inaccuracy.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As quasi-proof, I wrote a mission planner with Google Earth at one point (&lt;a href=&quot;http://www.youtube.com/watch?v=vK0wWH9Ijnk&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.youtube.com/watch?v=vK0wWH9Ijnk&lt;/a&gt;) which I showed to the Google Earth team; they were fine with it.  They also put me in touch with a team at NASA that uses Goole Earth for this purpose.  I'm led to believe that such usage is allowed since I'm only generating mission scripts and not interacting with the autonomy. &lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="-1" LastEditDate="2017-03-10T09:42:48.963" LastActivityDate="2013-03-12T11:38:08.630" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="1044" PostTypeId="2" ParentId="1036" CreationDate="2013-03-11T16:31:34.383" Score="5" Body="&lt;p&gt;I'd summarize my read of both of those as:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Don't use our logic to provide turn by turn navigation to vehicles&lt;/li&gt;&#xA;&lt;li&gt;Don't use our maps for business asset tracking unless you've signed a commercial use agreement&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Hard to tell if your use case described violates either of these terms.  In any case, check out &lt;a href=&quot;http://www.openstreetmap.us/&quot;&gt;http://www.openstreetmap.us/&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="35" LastActivityDate="2013-03-11T16:31:34.383" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1045" PostTypeId="2" ParentId="494" CreationDate="2013-03-11T16:44:48.730" Score="0" Body="&lt;p&gt;I'd stick with a &lt;a href=&quot;https://beagleboard.org/bone&quot; rel=&quot;nofollow noreferrer&quot;&gt;BeagleBone&lt;/a&gt; for the brains plus an &lt;a href=&quot;https://www.sparkfun.com/products/11286&quot; rel=&quot;nofollow noreferrer&quot;&gt;Arduino Leonardo&lt;/a&gt; for the brawn.  This gets you a full computer capable of running Linux or Android with 512 MB of RAM and 800 MHz of CPU to write your AI and all the hardware capability that the Arduino ecosystem enables.  Connect the two together over USB and use a remote control library like &lt;a href=&quot;https://github.com/JayBeavers/Reflecta&quot; rel=&quot;nofollow noreferrer&quot;&gt;Reflecta&lt;/a&gt; or &lt;a href=&quot;https://github.com/jgautier/firmata&quot; rel=&quot;nofollow noreferrer&quot;&gt;Firmata&lt;/a&gt; to turn the Arduino into a set of 'remote hardware ports' for the Beaglebone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A new entry into this space is the &lt;a href=&quot;https://www.sparkfun.com/products/11712&quot; rel=&quot;nofollow noreferrer&quot;&gt;PCDuino from SparkFun&lt;/a&gt;.  Theoretically this combines both boards into one.  I haven't tried it out myself to validate however.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should be able to put together a robot based on these parts for around your price range of $300.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;BeagleBone&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://beagleboard.org/static/bonescript/bone101/bone_connectors.jpg&quot; alt=&quot;BeagleBone&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Arduino Leonardo&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://dlnmh9ip6v2uc.cloudfront.net/images/products/1/1/2/8/6/11286-01_i_ma.jpg&quot; alt=&quot;Arduino Leonardo&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;PCDuino&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/bSp2H.jpg&quot; alt=&quot;PCDuino&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="35" LastEditorUserId="-1" LastEditDate="2017-03-10T09:42:48.977" LastActivityDate="2013-03-11T16:44:48.730" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1046" PostTypeId="1" CreationDate="2013-03-11T22:06:31.510" Score="2" ViewCount="670" Body="&lt;p&gt;I want to make a list of what knowledge is necessary for &lt;a href=&quot;http://en.wikipedia.org/wiki/Sensor_fusion&quot; rel=&quot;nofollow noreferrer&quot;&gt;sensor fusion&lt;/a&gt;. Since it has a wide array of possible applications, it is not clear where to begin studying. Can &lt;em&gt;we&lt;/em&gt; please verify add topics that are in-scope, and specify to what extent?:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.coursera.org/course/dsp&quot; rel=&quot;nofollow noreferrer&quot;&gt;Digital Signal Processing course&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-041-probabilistic-systems-analysis-and-applied-probability-spring-2006/lecture-notes/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Probability Course&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Machine Learning - course at Coursera from Stanford University&lt;/li&gt;&#xA;&lt;li&gt;Programming robotic car - course at Udacity&lt;/li&gt;&#xA;&lt;li&gt;Knowledge of Matlab and Simulink - tutorials on mathworks webpage and offline help.&lt;/li&gt;&#xA;&lt;li&gt;Basic knowledge about integrals, matrices operations, differential equations.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="1012" LastEditorUserId="20709" LastEditDate="2018-07-11T15:50:52.047" LastActivityDate="2018-07-11T15:50:52.047" Title="Overview - what skills are needed for sensor fusion?" Tags="&lt;sensors&gt;&lt;sensor-fusion&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="1047" PostTypeId="1" AcceptedAnswerId="1058" CreationDate="2013-03-12T07:59:49.377" Score="5" ViewCount="1044" Body="&lt;p&gt;Currently I am reading a book of Mr. Thrun: &lt;a href=&quot;http://www.probabilistic-robotics.org/&quot; rel=&quot;noreferrer&quot;&gt;Probabilistic Robotics&lt;/a&gt;. I find it really helpfull to understand concept of filters, however I would like to see some code in eg. Matlab. Is the book &quot;Kalman Filter for Beginners: with MATLAB Examples&quot; worth buying, or would you suggest some other source to learn the code snippets from?&lt;/p&gt;&#xA;" OwnerUserId="1012" LastEditorUserId="37" LastEditDate="2013-03-12T13:23:45.977" LastActivityDate="2018-08-20T19:13:06.643" Title="Source to learn Kalman Fusion, explanatory code snippets" Tags="&lt;kalman-filter&gt;&lt;books&gt;" AnswerCount="7" CommentCount="0" FavoriteCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="1048" PostTypeId="2" ParentId="1047" CreationDate="2013-03-12T09:53:06.160" Score="1" Body="&lt;p&gt;The Kalman Filter is based on some assumptions - a linear process with independent normally distributed noise. Noise over time is independent. Each measurement is also independent.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Wikipedia article (&lt;a href=&quot;http://en.wikipedia.org/wiki/Kalman_filter&quot; rel=&quot;nofollow&quot;&gt;http://en.wikipedia.org/wiki/Kalman_filter&lt;/a&gt;) is quite complete in information on this. This article should be enough to allow you to implement the Kalman Filter. Other sources also exist on the internet. Most people here will not be able to give an opinion on the book you mentioned - since we have not read it, and I will never read it because I do not need to.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Wikipedia article contains, in particular, &lt;a href=&quot;http://en.wikipedia.org/wiki/Kalman_filter#Details&quot; rel=&quot;nofollow&quot;&gt;detailed equations&lt;/a&gt; showing each step that a Kalman filter takes. In particular the equations given implement a filter allowing the covariance (noise in measurements) to differ on different timesteps, and keeps an updated estimate of the covariance (accuracy) of the estimated states.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is also an &lt;a href=&quot;http://en.wikipedia.org/wiki/Kalman_filter#Example_application.2C_technical&quot; rel=&quot;nofollow&quot;&gt;example&lt;/a&gt; which helps walk through the equations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An alternative way of implementing the Kalman filter is simply as a fixed state-space linear time-invariant filter. The relevant equation is $x(k)=x(k-1)+Ky(k)$. This is a simplification of the full set of equations, because $K$ - the Kalman gain, is fixed if the covariances are fixed. The gain can also be obtained from the solution to the &lt;a href=&quot;http://en.wikipedia.org/wiki/Algebraic_Riccati_equation&quot; rel=&quot;nofollow&quot;&gt;Discrete-time Algebraic Ricatti equation&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="145" LastActivityDate="2013-03-12T09:53:06.160" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1049" PostTypeId="1" AcceptedAnswerId="1055" CreationDate="2013-03-12T16:25:48.563" Score="6" ViewCount="2345" Body="&lt;p&gt;I want to built a robot and i need bunch of modules to track it like GSM/GPS Wifi and Camera&#xA;If i try to buy each of module separately it will cost me 300 dollar each aprox in Pakistan. On the other hand an android enable phone can be purchased on just 250$ having all of them. I was wondring if it is possible to interface android phones like (Huawaii or google nexus) with 8-bit microcontrollers or Arduino? The only port available with android phones are USB and Arduino supports USB. It is possible to some how attach both of them?&lt;/p&gt;&#xA;" OwnerUserId="1015" LastActivityDate="2013-03-12T22:07:13.753" Title="Is it possible to interface android mobile as GSM and GPS module with arduino based robotic applications?" Tags="&lt;arduino&gt;&lt;usb&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1050" PostTypeId="1" AcceptedAnswerId="1053" CreationDate="2013-03-12T17:18:03.467" Score="14" ViewCount="593" Body="&lt;p&gt;For example, if a rover has working temperature range of -70 to +120 Celsius, how does it survive and then restore itself if the temperature drops to -150 degrees for several months?&lt;/p&gt;&#xA;" OwnerUserId="1007" LastEditorUserId="37" LastEditDate="2013-03-13T11:23:49.523" LastActivityDate="2013-03-13T11:23:49.523" Title="How do space rovers survive at very low temperatures?" Tags="&lt;electronics&gt;&lt;ugv&gt;&lt;reliability&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1051" PostTypeId="1" CreationDate="2013-03-12T17:37:51.190" Score="10" ViewCount="3479" Body="&lt;p&gt;Within robotics programming, orientation is primarily given in terms of x, y, &amp;amp; z coordinates, from some central location.  However x, y, z coordinates aren't convenient for rapid human understanding if there are many locations from which to select (e.g., {23, 34, 45}, {34, 23, 45}, {34, 32, 45}, {23, 43, 45} is not particularly human friendly, and is highly prone to human error).  Yet more common English orientation descriptors are frequently either too wordy or too imprecise for rapid selection (e.g.,  &quot;front-facing camera on robot 1's right front shoulder&quot; is too wordy; but &quot;front&quot;/ &quot;forward&quot; is too imprecise - is the camera on the leading edge or is it pointing forward?)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the naval and aeronautical fields vehicle locations are generically talked about as fore, aft (or stern), port, and starboard. While, direction of movement that is relative to the vehicle is frequently given in reference to a clockface (e.g., forward of the the fore would be &quot;at 12&quot;, rear of the aft would be &quot;at 6&quot;, while right of starboard and left of port would be &quot;at 3&quot; and &quot;at 9&quot;, respectively).  This language supports rapid human communication that is more precise than terms such as &quot;front&quot; and &quot;forward&quot;.  Are there equivalent terms within mobile robotics?&lt;/p&gt;&#xA;" OwnerUserId="1016" LastEditorUserId="350" LastEditDate="2013-03-18T15:16:26.173" LastActivityDate="2017-12-15T19:34:37.163" Title="What are human-friendly terms for mobile-robot orientation and relative direction of non-robot objects?" Tags="&lt;mobile-robot&gt;&lt;control&gt;&lt;design&gt;&lt;localization&gt;&lt;navigation&gt;" AnswerCount="4" CommentCount="3" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1052" PostTypeId="2" ParentId="954" CreationDate="2013-03-12T17:42:14.807" Score="3" Body="&lt;p&gt;I'm guessing you're using the arduino libraries (haven't used the Teensy), in which case, if you read through the documentation (&lt;a href=&quot;http://arduino.cc/en/Reference/Servo&quot; rel=&quot;nofollow&quot;&gt;http://arduino.cc/en/Reference/Servo&lt;/a&gt;), you'll see that the Arduino servo library&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Supports up to 12 motors on most Arduino boards and 48 on the Arduino Mega&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You can manually bitbang the pwm signals for your servo if you don't have too many other time-critical things going on, or make/get a separate serial servo controller, or do any of a number of other things. This is good reading to understand what is going on:&#xA;&lt;a href=&quot;http://arduino.cc/en/Tutorial/SecretsOfArduinoPWM&quot; rel=&quot;nofollow&quot;&gt;http://arduino.cc/en/Tutorial/SecretsOfArduinoPWM&lt;/a&gt; (I would click through to the original document for a visual view of the different timer modes).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;p.s. what are you doing with 24 servos and one microcontroller? sounds exciting!&lt;/p&gt;&#xA;" OwnerUserId="1005" LastActivityDate="2013-03-12T17:42:14.807" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1053" PostTypeId="2" ParentId="1050" CreationDate="2013-03-12T18:29:48.907" Score="11" Body="&lt;p&gt;That is a very good question, and depends on the design. There are in general two ranges for components which are temperature sensitive. The operational range gives the temperature at which the component can be actively used. Within the survival range the component should generally take no harm but may not be actively used. Often what is even more demanding on the components than extreme temperatures is temperature cycling. Mars for example usually has a large amount of cycles, where as moon has the more extreme temperatures, but less cycling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In principle there are two ways to handle low temperatures for space rovers&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Heating your rover so that all the components that are temperature sensitive stay within the respective limits. You can use active heating by for example using energy from your battery. Depending on the battery and your insulation you may not hold out very long though. Radioactive heater units (RHU) are another alternative that can be very effective.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Increasing the temperature tolerance of your system is another option. This can be done by selection of tolerant components, or potentially extending the range of existing components. Usually the most temperature sensitive component is the battery. Insulation is also possible, but may only get you so far.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In general one could say that the thermal design is one of the most critical aspects for space probes, and will often decide about the feasibility of a mission.&lt;/p&gt;&#xA;" OwnerUserId="127" LastActivityDate="2013-03-12T18:29:48.907" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1054" PostTypeId="2" ParentId="1051" CreationDate="2013-03-12T18:29:59.247" Score="10" Body="&lt;p&gt;Typically, a coordinate frame is placed at the robot center.  The x-axis points forward, the y-axis points left, and the z-axis points up.  Then, we measure angles with respect to the x-axis. So, a 90 degree angle would mean along the y-axis, as shown, &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/TjCRx.gif&quot; alt=&quot;Coordinate Frames for Mobile Robots&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, &quot;12&quot; corresponds to 0 yaw, or straight forward. &quot;9&quot; corresponds to 90 degree yaw, or along the y-axis.  6 corresponds to 180 degree yaw, or straight back along the minus x-axis, etc. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You are asking &quot;How do I describe an object relative to the robot&quot;, which is the same as &quot;how do I describe the location of the object in the robot's coordinate frame&quot; By necessity, we consider the both to be the same, so the &quot;driver's side&quot; wheel is the &quot;front left&quot;. Front because it is +X, and left because it is +Y. The cans are in &quot;front&quot; of the robot because they have a +X coordinate. They are &quot;below&quot; the robot because they have a -Z coordinate.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's the same as &quot;Port&quot;, &quot;Aft&quot;, &quot;Starboard&quot;, because these are described &lt;em&gt;with respect to the vehicle&lt;/em&gt;, not with respect to the observer. This is the basic definition of a &lt;a href=&quot;http://en.wikipedia.org/wiki/Frame_of_reference&quot; rel=&quot;noreferrer&quot;&gt;Frame of Reference&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="163" LastEditorUserId="163" LastEditDate="2013-03-12T21:24:46.457" LastActivityDate="2013-03-12T21:24:46.457" CommentCount="13" ContentLicense="CC BY-SA 3.0" />
  <row Id="1055" PostTypeId="2" ParentId="1049" CreationDate="2013-03-12T22:07:13.753" Score="3" Body="&lt;p&gt;Yes, it is possible. You need the Android Accessory API and &lt;a href=&quot;http://developer.android.com/tools/adk/index.html&quot; rel=&quot;nofollow&quot;&gt;Android Accessory Development Kit&lt;/a&gt;. It is based off Arduino, and is open. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general, if the phone + the ADK is cheaper than buying the components separately (I suspect it would be), then I'd buy the phone + ADK.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your other option is to buy a phone, and a bluetooth shield for a microcontroller, then use the bluetooth connection to send data between the phone and microcontroller.&lt;/p&gt;&#xA;" OwnerUserId="163" LastActivityDate="2013-03-12T22:07:13.753" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1056" PostTypeId="1" AcceptedAnswerId="1067" CreationDate="2013-03-13T10:09:37.960" Score="2" ViewCount="241" Body="&lt;p&gt;I need help with figuring out the following things:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm developing a hexapod R-Hex type model with a tripod gait. However, the angles obtained during the robot's walking in real life are not perfectly aligned. Because of this the robot often collapses and falls even on perfectly straight terrain.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My configuration is: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;60 rpm dc motors for each leg&lt;/li&gt;&#xA;&lt;li&gt;H-bridge motor drivers for each dc motor&lt;/li&gt;&#xA;&lt;li&gt;Atmega 8&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Should I change the gait type?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or is Tripod sufficiently stable?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are DC motors providing fine enough control or do I need servos?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do I need a DC motor with an Encoder? &#xA;What will be its benefits?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What could be done to improve performance of the robot?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Added: Would a Stepper motor work as well, instead of a servo?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="333" LastEditorUserId="333" LastEditDate="2013-03-15T04:59:59.177" LastActivityDate="2013-03-15T04:59:59.177" Title="Perfecting Tripod Gait - Building a R-Hex Robot" Tags="&lt;motor&gt;&lt;wheeled-robot&gt;&lt;gait&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1057" PostTypeId="2" ParentId="997" CreationDate="2013-03-13T14:20:53.693" Score="1" Body="&lt;p&gt;I use TI chips (typically the Stellaris line) and I agree that you need to provide much more information. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That being said I think your problem lies in one of two areas (probably the second one):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;1) Your device isn't emulating:&lt;/strong&gt;&#xA;When you connect your device to the computer does it make the '&lt;em&gt;du-duh&lt;/em&gt;' sound? Alternatively press start, right-click 'Computer', go to 'Manage' and check in Devices manager if you are showing up as a COM port. If you are not, then your problem lies with a) your driver (although your device should still show up) or on your embedded side. I'd bet on the latter. This means this is not the website for your to figure it out on and fixing this is no small task. However if you've come this far, maybe you won't mind coming a little further. However from your screen shot it does look like it is emulating, so let's go to option number two.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;2) You are throwing an exception when connecting:&lt;/strong&gt;&#xA;I'm going to assume that you are using the .NET framework &lt;code&gt;SerialPort&lt;/code&gt; class in VB (btw you should update to something newer than VB2006 or at least make sure your .NET framework is up to date if you haven't already). The &lt;code&gt;SerialPort&lt;/code&gt; class is widely regarding as being incredibly poorly written and the method &lt;code&gt;SerialPort.Open()&lt;/code&gt; actually performs about 8 things and if a single one of them fails then the whole method fails and you are up the creek. What I would do is download something like &lt;a href=&quot;http://www.compuphase.com/software_termite.htm&quot; rel=&quot;nofollow&quot;&gt;Termite&lt;/a&gt; and see if you can connect to the device that way. Most terminal programs ignore &lt;code&gt;IO Exceptions&lt;/code&gt; (which is what I bet is happening in your VB program). By the way, did you write the VB program yourself? If so, do you have a &lt;code&gt;try-catch&lt;/code&gt; around your &lt;code&gt;SerialPort.Open()&lt;/code&gt; method? Because that is a good way to figure out if that is where your problem lies. If you cannot connect with &lt;a href=&quot;http://www.compuphase.com/software_termite.htm&quot; rel=&quot;nofollow&quot;&gt;Termite&lt;/a&gt; then I would download &lt;a href=&quot;http://www.eltima.com/products/serial-port-monitor/&quot; rel=&quot;nofollow&quot;&gt;Eltima&lt;/a&gt; which is  port monitoring software. It runs in the background while you try to connect to a serial port and it will log what is happening and more importantly it will log errors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Good luck and happy coding :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR: get &lt;a href=&quot;http://www.eltima.com/products/serial-port-monitor/&quot; rel=&quot;nofollow&quot;&gt;Eltima&lt;/a&gt; and find the error.&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="1024" LastActivityDate="2013-03-13T14:20:53.693" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1058" PostTypeId="2" ParentId="1047" CreationDate="2013-03-13T15:19:45.057" Score="4" Body="&lt;p&gt;I &lt;em&gt;have&lt;/em&gt; read the book, and found it unnecessarily obtuse. Unfortunately, the code snippets will not be very helpful, since they will probably look exactly like the equations, while using a matrix library like Eigen, OpenCV, boost, or just Matlab.  To get a good understanding of a Kalman Filter, you should start with a review of multi-variate Gaussian random variables, then brush up on Taylor Series expansions, then realize we are just inventing a covariance matrix for the joint distribution of measurements and state.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, here's some code I wrote for a robotic rover which uses an EKF. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&#xA;void DifferentialKinematics::ekfMeasurement(Eigen::MatrixXd&amp;X,Eigen::MatrixXd&amp;Q,Eigen::MatrixXd&amp;Z,Eigen::MatrixXd&amp;R){&#xA;  Eigen::MatrixXd I=Eigen::MatrixXd::Identity(3,3);&#xA;  Eigen::MatrixXd ZP = Eigen::MatrixXd(Z);&#xA;  Eigen::MatrixXd XP = Eigen::MatrixXd(X);&#xA;  Eigen::MatrixXd z = Z-X;&#xA;  Eigen::MatrixXd S =Q+R;&#xA;&#xA;  Eigen::MatrixXd K=Q*S.inverse();&#xA;&#xA;  X = X + K*(z);&#xA;  Q = (I-K)*Q;&#xA;}&#xA;/**&#xA; * Update given wheel speeds left, right.&#xA; * Both are in/out&#xA; */&#xA;void DifferentialKinematics::ekfPredict(float left, float right, Eigen::MatrixXd&amp;pose, Eigen::MatrixXd&amp;cv){&#xA;  float hth=pose(2)+getTheta(left,right)/2;&#xA;  float dd = std::fabs(getVel(left,right));&#xA;  updatePose(left,right,pose);&#xA;&#xA;  //Form Jacobian&#xA;  Eigen::MatrixXd V=Eigen::MatrixXd::Zero(3,2);&#xA;  V(0,0)=(cos(hth)+(dd/width)*sin(hth))/2;&#xA;  V(0,1)=(cos(hth)-(dd/width)*sin(hth))/2;&#xA;  V(1,0)=(sin(hth)-(dd/width)*cos(hth))/2;&#xA;  V(1,1)=(sin(hth)+(dd/width)*cos(hth))/2;&#xA;  V(2,0)=(-1/width);&#xA;  V(2,1)=(1/width);&#xA;&#xA;  Eigen::MatrixXd G;&#xA;  G=Eigen::MatrixXd::Identity(3,3);&#xA;  G(0,2)=-dd*sin(hth);&#xA;  G(1,2)=cos(hth)*dd;&#xA;&#xA;  Eigen::MatrixXd M=Eigen::MatrixXd::Zero(2,2);&#xA;  M(0,0)=left &amp;lt 0? -1*left*kl:left*kl;&#xA;  M(1,1)=right &amp;lt 0? -1*right*kr:right*kr;&#xA;&#xA;  Eigen::MatrixXd R=V*M*V.transpose();&#xA;  Eigen::MatrixXd r2 = G*cv*G.transpose()+R;&#xA;  cv = r2; &#xA;  return;&#xA;}&#xA;&lt;/code&gt;&#xA;&lt;/pre&gt;&#xA;" OwnerUserId="163" LastEditorUserId="163" LastEditDate="2013-03-13T15:25:22.427" LastActivityDate="2013-03-13T15:25:22.427" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1059" PostTypeId="2" ParentId="1046" CreationDate="2013-03-13T16:02:58.323" Score="1" Body="&lt;p&gt;You can skip all but 2,6,5, if you want to learn how sensor information is fused to form a consistent estimate of something. 5 is optional but helpful. The best course you can take is a Optimal Estimation / Filtering course, and a Probabilities and Stochastic Processes course. Try MIT Courseware for both of those.&lt;/p&gt;&#xA;" OwnerUserId="163" LastActivityDate="2013-03-13T16:02:58.323" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1060" PostTypeId="1" CreationDate="2013-03-13T23:32:26.337" Score="1" ViewCount="5738" Body="&lt;p&gt;I want to know if there is best algorithm and technique to implement self learning maze solving robot in 8 bit limited resource micro-controller? I was looking for some well optimized algorithm and/or technique. Maze can be of any type. Of-course first time it has to walk all the way and keep tracking obstacles it found. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think best technique would be neural networks but is it possible to do this in such a short resources of 8bit? Any example online with similar kind of problem? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My wall detection is based on units, well, I have counted the wheel turns and it is almost 95% accurate in integers. For sensing the walls Ultrasonic range finding is used. Wheel can remeber its current position in let say, 3 feet staight, 2 feet right, etc.&lt;/p&gt;&#xA;" OwnerUserId="1015" LastEditorUserId="187" LastEditDate="2014-01-13T20:52:48.597" LastActivityDate="2014-01-13T20:52:48.597" Title="Self learning maze solving robot using 8bit microcontroller?" Tags="&lt;algorithm&gt;&lt;machine-learning&gt;&lt;mapping&gt;&lt;micromouse&gt;" AnswerCount="4" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1061" PostTypeId="2" ParentId="1060" CreationDate="2013-03-14T00:45:33.297" Score="1" Body="&lt;p&gt;Neural networks are not the best by a loooong shot. Neural networks are &lt;em&gt;not&lt;/em&gt; AI, they are a way to do regression and classification. If you don't know what those things are, then you have no business working with Neural Networks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you have described is a mapping problem. You need two things from a good algorithm in this case:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Coverage. You need to ensure that the robot can reach every part of the maze. If it cannot, then it might not find the exit / entrance.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Mapping. You need to ensure that you can keep track of all the obstacles.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Without more information about the type of maze, type of robot, and type of obstacles, I'm afraid this problem is under-determined. &lt;/p&gt;&#xA;" OwnerUserId="163" LastEditorUserId="163" LastEditDate="2013-03-15T16:45:25.990" LastActivityDate="2013-03-15T16:45:25.990" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1062" PostTypeId="2" ParentId="1060" CreationDate="2013-03-14T02:41:55.713" Score="5" Body="&lt;p&gt;Perhaps the best way to get started on this kind of problem is to take relevant coursework(either online or in real life) or to read an introductory book on this topic. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A good introductory book on motion planning and SLAM is &lt;a href=&quot;http://mitpress.mit.edu/books/principles-robot-motion&quot; rel=&quot;nofollow&quot;&gt;Principles of Robotic Motion&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A good course on SLAM/Mobile Robots: &lt;a href=&quot;https://www.coursera.org/course/conrob&quot; rel=&quot;nofollow&quot;&gt;Control of Mobile Robots&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="333" LastActivityDate="2013-03-14T02:41:55.713" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1063" PostTypeId="2" ParentId="999" CreationDate="2013-03-14T05:49:20.607" Score="3" Body="&lt;p&gt;Holding torque, by the stepper motor definition, is not a valid way to quantify servo performance.  Stepper motor torque drops off with speed whereas in a servo it remains relatively constant.  (Operating torque is never half of holding torque and is RPM dependent, your guide lied to you).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A real servo will always have a torque (continuous/operating) rating under which it will remain controlled, and a maximum torque rating where it is just running full power.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I cannot imagine ever buying a servo that does not list those two values, (especially considering that most servos will have a fairly substantial datasheet) but a quick survey shows that continuous torque is generally not half of the maximum torque.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that hobby servo specifications are so inaccurate they might as well be made up so this question would not apply to them either.&lt;/p&gt;&#xA;" OwnerUserId="65" LastActivityDate="2013-03-14T05:49:20.607" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1064" PostTypeId="1" AcceptedAnswerId="1109" CreationDate="2013-03-14T11:18:41.797" Score="3" ViewCount="329" Body="&lt;p&gt;I want to prototype a therapeutic device that will have a lot of tiny mobile-phone type vibration motors &lt;a href=&quot;http://www.cutedigi.com/robotics/vibration-motor.html&quot; rel=&quot;nofollow&quot;&gt;like this one&lt;/a&gt; in it, and I want to be able to activate them in any configuration I want.  I'm going to need analogue control, and support for logic like perlin noise functions and so on.  I'm not really going to need sensor data or any other kind of feedback beyond a few buttons for control.  I just need fine control over lots of little motors.  Depending on what results I can get out of, say, 25 motors on the initial prototype, I may decide that I'm done, or that it needs more motors.  I also don't have an enormous budget.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the question is, is Arduino a good fit for a project like this?  Is it feasible to get that many motors working off the same controller?  I know some of the Arduino boards have up to 50-something serial outputs, but from what I can tell, that may only translate to 25 or so motors, so I'd need a way to extend the board with more serial outputs if I wanted to try more.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additionally, if Arduino isn't a good fit, what would be better?  Could I try something directly out of a serial port on my PC?  I've never tried to home-cook a robotics application before, so I'm not really aware of the options.&lt;/p&gt;&#xA;" OwnerUserId="1031" LastEditorUserId="1031" LastEditDate="2013-03-14T11:26:43.380" LastActivityDate="2013-03-27T16:33:15.337" Title="Prototyping a device with 25-100 small DC 3.0V motors, is Arduino a good fit?" Tags="&lt;arduino&gt;&lt;motor&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1065" PostTypeId="2" ParentId="1064" CreationDate="2013-03-14T13:45:02.763" Score="5" Body="&lt;p&gt;The issue may not be what micro is the best choice. Note 25 to 50 IO can be expensive if implemented on the micro itself. A ATmega2560 with the most pins is significantly more in price then a 328 or Tiny. Same goes for other chips. All those additional pins may not have the function you need. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can use the micro's SPI (or I2C) port to shift out the IO. For SPI you could daisy chain as many 74HC595 as you need until you get your desired amount of Digital Output. There are equivalents for Input. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And if you wanted to control the intensity of the motor, you can use PWM. And there are SPI or I2C chips for these too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note a big problem will be power. If you were to connect 25 motors to a single micro the initial inrush if not the continuous load of turning on all the motors would likely brown out the micro as each IO may individually support the supply for the motor. Combined they all need to feed through the chips VCC pins. Hence breaking it up to individual 74HC595 would spread out the heat and load away from the micro. These are cheap chips and easily ported to any micro. You can even get evals of them on break out PCB's.&lt;/p&gt;&#xA;" OwnerUserId="821" LastActivityDate="2013-03-14T13:45:02.763" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1066" PostTypeId="1" CreationDate="2013-03-14T15:20:22.533" Score="4" ViewCount="813" Body="&lt;p&gt;I currently have a working kinematic chain made by a set of ten links in &lt;a href=&quot;http://en.wikipedia.org/wiki/Denavit%E2%80%93Hartenberg_parameters&quot; rel=&quot;nofollow noreferrer&quot;&gt;D-H convention&lt;/a&gt; (with usual parameters [ $A_i, D_i, \alpha_i, \theta_i$]).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But my task currently requires the inversion of some of them. Basically, I would have a part of the chain that is read from the end-effector to the origin, using the same links (and thus the same parameters). Is it possible? How to do so?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Please notice that this is not related to the &lt;a href=&quot;https://robotics.stackexchange.com/q/299/37&quot;&gt;inversion of the kinematic chain&lt;/a&gt;. It's more basic: &lt;em&gt;I want to find the dh parameters of the inverted forward kinematic chain&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's put it simple: I have dh parameters for a 2 link planar chain from joint 0 to joint 1, so I can compute its direct kinematics. But what if I want to compute the direct kinematics from joint 1 to joint 0?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given DH parameters [ $A_i, D_i, \alpha_i, \theta_i$], I can retrieve the transform matrix with this formula:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$G = \left[\begin{matrix}&#xA;cos(\theta) &amp;amp; -sin(\theta)*cos(\alpha) &amp;amp;  sin(\theta)*sin(\alpha) &amp;amp; cos(\theta)*a \\&#xA;sin(\theta) &amp;amp;  cos(\theta)*cos(\alpha) &amp;amp; -cos(\theta)*sin(\alpha) &amp;amp; sin(\theta)*a \\&#xA;          0 &amp;amp;              sin(\alpha) &amp;amp;              cos(\alpha) &amp;amp;             d \\&#xA;          0 &amp;amp;                        0 &amp;amp;                        0 &amp;amp;             1&#xA;\end{matrix} \right]$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the transform matrix from the i-th link to the (i+1)-th link. Thus, I can invert it to obtain the transform matrix from the (i+1)-th link to the i-th link, but the problem is that this is not working. I believe that the reason is related to the fact that the DH convention doesn't work any more &lt;strong&gt;as it is&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help?&lt;/p&gt;&#xA;" OwnerUserId="1033" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2014-12-28T22:34:32.793" Title="How to invert D-H parameters" Tags="&lt;control&gt;&lt;inverse-kinematics&gt;&lt;kinematics&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1067" PostTypeId="2" ParentId="1056" CreationDate="2013-03-14T17:18:11.607" Score="2" Body="&lt;p&gt;Tripod gait is a stable gait. Moreover, it is a statically stable gait, meaning that if you lock the joints with 3 legs down and turn the power off, the robot will not topple. This implies that you don't need to dynamically balance the robot while walking. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason when a legged robot falls down is that its center of gravity does not fall on its support polygon (in tripod gait case, it is a triangle with each corner on one leg that's touching the ground). So what you should do is to measure the center of gravity and guarantee that it never leaves the support polygon of your robot while walking via adjusting your leg motion. Of course, this is all for a statically stable gait. Dynamically stable gaits allow the center of gravity to leave the support polygon in a controlled manner. But as I said, the tripod gait is statically stable. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm assuming that you are using naked DC motors without encoders or gear trains. There are two issues about this:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;First, make sure that you are getting enough total torque at each leg triplet that lift the robot. It may be the case that the DC motors cannot lift the robot on their own without a gear train. &lt;/li&gt;&#xA;&lt;li&gt;Second, errors tend to grow without bound when performing such a task, angular position errors being one example. This is simply due to noise and imperfect modeling of the motor. So in a sense, DC motors are not actually &quot;controlled&quot;, you just apply an input while not knowing what the output is. You must apply closed loop control, which is done via getting feedback from an encoder. Then, you can sense what the angular position on your motor is, determine your error, and apply an input to correct that error.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Both of these problems are addressed in a servomotor, which is basically a DC motor, a gear train to increase torque and reduce angular velocity, and an encoder. I very much suggest using servos for your leg joints. &lt;/p&gt;&#xA;" OwnerUserId="1000" LastEditorUserId="1000" LastEditDate="2013-03-14T20:24:46.920" LastActivityDate="2013-03-14T20:24:46.920" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1068" PostTypeId="1" AcceptedAnswerId="7047" CreationDate="2013-03-15T01:42:18.520" Score="3" ViewCount="62" Body="&lt;p&gt;I am trying to run a nxt motor using the mindsensors motor multiplexer at a slow speed.  When I turn it on, it tends to jump approx 20 to 40 degrees before moving at a slow speed.  Has anyone seen this behavior?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am using NXT 1.0 with firmware down loaded from &lt;code&gt;lms_arm_mindsensors_129.rfw&lt;/code&gt;.  Sample code in NXC (I am using Bricx Command Center as my IDE) is as follows:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;MMX_Run_Degrees (SensorPort, Addr, MMX_Motor_2, MMX_Direction_Reverse,&#xA;     MMX_Speed_Slow, 220, MMX_Completion_Wait_For, MMX_Next_Action_Brake);&#xA;Wait(500);&#xA;&#xA;MMX_Run_Unlimited( SensorPort, Addr, MMX_Motor_2,MMX_Direction_Forward, 5);&#xA;// The jump happens here.&#xA;while(Sensor(IN_2)&amp;lt; SENSORTHRESHOLD);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="572" LastEditorUserId="110" LastEditDate="2015-04-18T21:07:13.743" LastActivityDate="2015-04-18T21:07:13.743" Title="Mindsensor Motor Multiplexer jump on run_unlimited" Tags="&lt;nxt&gt;&lt;mindstorms&gt;&lt;not-exactly-c&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1069" PostTypeId="1" AcceptedAnswerId="1071" CreationDate="2013-03-15T13:23:35.370" Score="3" ViewCount="5368" Body="&lt;p&gt;Is there a way to use a single dc motor output for two different loads (by using gears, relays etc) ? Please see the illustration below:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/obCuf.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To clarify the illustration, I get the dc motor power at &quot;output 1&quot; gear which is extended over an idler gear to output 2 gear. All three are in contact (though the picture doesn't quite show it). Load 1 and Load 2 are two separate gears connected to different loads (wheels etc) and initially not in contact with the bottom gears. On switching on the relays 1, 2 - the load bearing gears, move towards the output1 and output2 and mesh with them to drive Load 1, 2.&lt;/p&gt;&#xA;" OwnerUserId="1041" LastEditorUserId="15160" LastEditDate="2019-01-02T20:54:47.037" LastActivityDate="2019-01-02T20:54:47.037" Title="Is there a way to use a single dc motor output for two different loads?" Tags="&lt;motor&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="1070" PostTypeId="2" ParentId="1069" CreationDate="2013-03-15T14:08:10.233" Score="1" Body="&lt;p&gt;Well, You question is unclear, But as far as I understand You can drive two different load from a single motor by making a correct mechanical gear box assembly. You can rotate two wheels into two different directions with the use of proper gear system. &lt;/p&gt;&#xA;" OwnerUserId="1015" LastActivityDate="2013-03-15T14:08:10.233" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1071" PostTypeId="2" ParentId="1069" CreationDate="2013-03-15T14:10:19.167" Score="5" Body="&lt;p&gt;Absolutely. Think of how your car works. The engine/motor drives two (or more) wheels at the same time. And the loads presented by the independent wheels are often of very different magnitudes. For instance when the car is turning or when one wheel is slipping.&lt;/p&gt;&#xA;&lt;p&gt;What you need to split the power is a &lt;a href=&quot;http://www.howstuffworks.com/differential.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;differential&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;h1&gt;What is a Differential?&lt;/h1&gt;&#xA;&lt;p&gt;The differential is a device that splits the engine torque two ways,&#xA;allowing each output to spin at a different speed.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.platinumautoservice.com/differential&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/588yj.jpg&quot; alt=&quot;differential&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This would split the motor load equally. It would allow both outputs to spin at the same speed if their loads are equal. If one load increases or is greater, it will slow down without affecting the speed of the other load.&lt;/p&gt;&#xA;&lt;p&gt;If the loads are nominally different and you need them to spin at the same speed or if the loads are equal and you need them to spin at different speeds, then you can just add speed change gears to one of the outputs.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://enginemechanics.tpub.com/14037/css/14037_41.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/r0rLE.jpg&quot; alt=&quot;gears used to change speed&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Where your output speed would equal your input speed times the difference in the numbers of teeth on the gears:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$S_2 = S_1 \times \dfrac{T_1}{T_2}$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;strong&gt;Edit to answer comment on meshing gears:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Your intuition isn't that far off. Using a solenoid to engage and disengage a load is how part time four-wheel drive works. The solenoid engages and disengages the locking hubs to connect and disconnect the load. But simpler designs will cause a sudden increase in torque demand resulting in some jerk if the motor can't compensate for it.&lt;/p&gt;&#xA;&lt;p&gt;You would be better off using a &lt;a href=&quot;http://auto.howstuffworks.com/clutch.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;clutch&lt;/a&gt; to gradually apply the load:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.infomanejo.com/How-does-the-clutch-work.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OYHcs.png&quot; alt=&quot;clutch load application&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="142" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2013-03-15T15:02:50.627" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1072" PostTypeId="1" CreationDate="2013-03-15T14:16:49.523" Score="2" ViewCount="1259" Body="&lt;p&gt;This question was asked in &lt;a href=&quot;https://electronics.stackexchange.com/questions/61014/real-time-location-sensor-for-following-a-kite-in-the-air?noredirect=1#comment117178_61014&quot;&gt;electronics stackexchange&lt;/a&gt;. I want to know if is it possible to make a robot that can fly kites. Is this idea practical? I was thinking that making a kite is just like making some flying quadcopter or helicopter. I just want to know is this idea really implementable?  Is there an example or similar work in reference to this?     &lt;/p&gt;&#xA;" OwnerUserId="1015" LastEditorUserId="-1" LastEditDate="2017-04-13T12:33:08.317" LastActivityDate="2015-11-03T08:45:20.003" Title="Is it possible to make Kite flying robot?" Tags="&lt;control&gt;&lt;quadcopter&gt;&lt;radio-control&gt;" AnswerCount="6" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="1073" PostTypeId="2" ParentId="1060" CreationDate="2013-03-15T20:03:13.373" Score="4" Body="&lt;p&gt;My understanding of your problem is that you would like to discover and navigate a 2D maze of irregular obstacles with a non-&lt;a href=&quot;http://en.wikipedia.org/wiki/Holonomic_(robotics)&quot; rel=&quot;nofollow noreferrer&quot;&gt;holonomic&lt;/a&gt; robot using a single forward-looking ultrasonic range sensor and wheel odometry.  This is a hard problem.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&quot;Best&quot; solution&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Although a &quot;best&quot; or &quot;optimal&quot; solution to this problem possibly &lt;em&gt;could&lt;/em&gt; be implemented on an 8-bit microcontroller, it is made up of 3 problems -- each nontrivial and frequently left to full-fledged  computing systems:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Enhancing your ultrasonic sensor to be able &lt;a href=&quot;http://www.sciencedirect.com/science/article/pii/S0921889099000597&quot; rel=&quot;nofollow noreferrer&quot;&gt;to differentiate between walls and corners&lt;/a&gt;, because echoes from a maze-like environment can confuse your sensor.&lt;/li&gt;&#xA;&lt;li&gt;Exploring and mapping the space, typically done with a &lt;a href=&quot;http://en.wikipedia.org/wiki/Simultaneous_localization_and_mapping&quot; rel=&quot;nofollow noreferrer&quot;&gt;SLAM algorithm&lt;/a&gt;.  (This will assume that you get near-perfect localization information from your odometry approach to navigation.)&lt;/li&gt;&#xA;&lt;li&gt;Using your map, compute a solution using a &lt;a href=&quot;http://en.wikipedia.org/wiki/Maze_solving_algorithm&quot; rel=&quot;nofollow noreferrer&quot;&gt;maze-solving algorithm&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;h2&gt;Achievable Solutions&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Since the &quot;best&quot; solution is a tall order for an 8-bit microcontroller, focus on a &quot;dumb&quot; solution that actually works: &lt;a href=&quot;http://botbrain.com/Curriculum/CurriculumWeb/maze_solving.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;use whisker sensors and the right-hand rule&lt;/a&gt;.&lt;a href=&quot;https://i.stack.imgur.com/5sYnl.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/5sYnlm.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Going further, you could add a compass/accelerometer for navigation, use infrared sensors to  detect obstacles, and use a regular 2D grid with large gird squares.  That would be similar to the &lt;a href=&quot;http://en.wikipedia.org/wiki/Micromouse&quot; rel=&quot;nofollow noreferrer&quot;&gt;Micromouse&lt;/a&gt; competition (&lt;a href=&quot;http://www.apec-conf.org/participating-in-apec-mainmenu-261/participating-in-micromouse-mainmenu-242&quot; rel=&quot;nofollow noreferrer&quot;&gt;for example, this one&lt;/a&gt;), which also uses microcontrollers for maze solving.&#xA;&lt;a href=&quot;http://www.youtube.com/watch?v=A4hzCcFikm0&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/L5e2om.png&quot; alt=&quot;Micromouse competition&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/48k2f.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/48k2fm.png&quot; alt=&quot;Micromouse robot&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2013-03-16T17:22:04.157" LastActivityDate="2013-03-16T17:22:04.157" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1074" PostTypeId="1" AcceptedAnswerId="1076" CreationDate="2013-03-16T12:37:15.563" Score="3" ViewCount="1581" Body="&lt;p&gt;I'm building a quadcopter and I've received my motors and propellers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What's the right way to assemble those together?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not confident with what I've done, as I'm not sure the propeller would stay in place on a clockwise rotating motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I mean, if the motor rotates clockwise, will the screw stay tightly in place, even with the prop's inertia pushing counter-clockwise?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's what I've done (of course i'll tighten the screw...) :&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/mN36U.jpg&quot; alt=&quot;Motor and propeller&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="943" LastActivityDate="2013-03-22T01:57:24.380" Title="How to assemble brushless motors and propellers?" Tags="&lt;brushless-motor&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1075" PostTypeId="2" ParentId="1072" CreationDate="2013-03-17T11:52:31.130" Score="3" Body="&lt;p&gt;Of course it's possible. Here's how I would try it out.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;This would work best if the kite had some sort of sensor on it. GPS would work, but better would be some sort of local GPS function. This would allow the robot to know where the kite was easily. It would also be helpful to have a rate sensor to give a better overall picture of what is happening.&lt;/li&gt;&#xA;&lt;li&gt;The robot would have to be able to pick up the kite somehow, and move a far enough distance away. &lt;/li&gt;&#xA;&lt;li&gt;The robot would also need to know wind speed, to figure out where to go.&lt;/li&gt;&#xA;&lt;li&gt;When the robot was an appropriate distance away, it could simply reel in the string, probably from an elevated position.&lt;/li&gt;&#xA;&lt;li&gt;When the robot sensed that the kite was getting higher, it could stop pulling back.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;It would not be a simple robot by any means, but it should be possible. &lt;/p&gt;&#xA;" OwnerUserId="620" LastEditorUserId="620" LastEditDate="2013-03-17T16:46:12.347" LastActivityDate="2013-03-17T16:46:12.347" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1076" PostTypeId="2" ParentId="1074" CreationDate="2013-03-17T12:55:35.417" Score="2" Body="&lt;p&gt;This is correct. Just make sure to insert a lever into the hole at the top to really tighten the nut!&lt;/p&gt;&#xA;" OwnerUserId="1048" LastActivityDate="2013-03-17T12:55:35.417" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="1077" PostTypeId="2" ParentId="1060" CreationDate="2013-03-17T16:20:02.587" Score="3" Body="&lt;p&gt;You might want to have a look at my maze solving robot solution (&lt;a href=&quot;http://www.benaxelrod.com/robots/maze/index.html&quot; rel=&quot;nofollow&quot;&gt;http://www.benaxelrod.com/robots/maze/index.html&lt;/a&gt;).  I used a Lego RCX which is more powerful than an 8bit microcontroller, but is still pretty resource constrained.  I abstracted away most of the hardware problems to focus on the algorithm.  It uses a flood-fill or A* type algorithm.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2013-03-17T16:20:02.587" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1078" PostTypeId="1" AcceptedAnswerId="1080" CreationDate="2013-03-17T17:38:49.310" Score="6" ViewCount="1371" Body="&lt;p&gt;For a pet project, I am trying to fly a kite using my computer.  I need to measure how far a cord extends from a device.  I also need to somehow read out the results on my computer. So I need to connect this to my pc, preferably using something standard like USB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since the budget is very small, it would be best if I could get it out of old home appliances or build it myself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What technology do I need to make this measurement?&lt;/p&gt;&#xA;" OwnerUserId="1050" LastEditorUserId="350" LastEditDate="2013-03-17T20:13:44.307" LastActivityDate="2013-03-28T06:48:06.923" Title="How do I measure the distance that a cord (string) has moved?" Tags="&lt;wheel&gt;&lt;usb&gt;&lt;encoding&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1079" PostTypeId="2" ParentId="1078" CreationDate="2013-03-17T17:41:45.777" Score="2" Body="&lt;p&gt;Maybe you could take one from an old computer mouse, and count the light pulses directly from the mouse board so you could tell the length of the cord.&lt;/p&gt;&#xA;" OwnerUserId="943" LastEditorUserId="350" LastEditDate="2013-03-17T20:17:56.543" LastActivityDate="2013-03-17T20:17:56.543" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1080" PostTypeId="2" ParentId="1078" CreationDate="2013-03-17T17:58:29.800" Score="4" Body="&lt;p&gt;Sure, here are a couple of choices for you:&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;For high end, you can look at a 200 counts per revolution rotary encoder like this one:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$30 &lt;a href=&quot;https://www.sparkfun.com/products/10790&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sparkfun 200 Counts Per Revolution Rotary Encoder&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/qKLcL.jpg&quot; alt=&quot;Rotary Encoder&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'll need a microcontroller like an Arduino to count the rotations, there's some sample code to play with.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;$5 &lt;a href=&quot;https://www.adafruit.com/products/377&quot; rel=&quot;nofollow noreferrer&quot;&gt;Adafruit 24 Counts Per Revolution Rotary Encoder&lt;/a&gt;&#xA;&lt;img src=&quot;https://i.stack.imgur.com/ECKLe.jpg&quot; alt=&quot;24 CPR Rotary Encoder&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cheaper, not quite as much community support in comments.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;For a little more fun, you can combine the rotary encoder with a gearmotor so you could control the kite string with one piece of equipment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$40 &lt;a href=&quot;http://www.pololu.com/catalog/product/1447&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pololu 64 Counts Per Revolution Encoder + Gearmotor&lt;/a&gt;&#xA;&lt;img src=&quot;https://i.stack.imgur.com/NPwGc.jpg&quot; alt=&quot;Pololu Gearmotor with encoder&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="35" LastActivityDate="2013-03-17T17:58:29.800" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1081" PostTypeId="2" ParentId="1005" CreationDate="2013-03-17T21:32:00.817" Score="3" Body="&lt;p&gt;You can use a MOSFET instead of relays. MOSFET replies faster so you can achieve your goal.. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a simple schematic of a shooting system using solenoids.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/MFHJ3.jpg&quot; alt=&quot;Shooting using MOSFETs&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that the solenoid is the L1 Inductor in the schematic and I've used the push-pull mechanism for putting diodes in the schematic which are necessary for this system... You can see wikipedia for further info. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And the Optocoupler is used to translate micrcontroller's signals.. ( The microcontroller's logic one is 5v while this system's logic one (VS) is 16v.) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And surely you need to put parallel capacitors between GNDHV and VS for the shooting system to work. ( Not present in this schematic. )&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Legend : &#xA;GNDHV: Voltage supply's ground ( the ground that comes in to your circuit )&#xA;VS : Voltage supply&#xA;GND: The low voltage ground which is used to power up the micro controller.&#xA;Kick: The kick signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: This system kicks when the Kick is set to zero.  &lt;/p&gt;&#xA;" OwnerUserId="21" LastActivityDate="2013-03-17T21:32:00.817" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1082" PostTypeId="1" AcceptedAnswerId="1084" CreationDate="2013-03-18T01:08:24.437" Score="6" ViewCount="469" Body="&lt;p&gt;I have a 4-bar linkage arm (or similar design) for a telerobot used in the &lt;a href=&quot;http://vexrobotics.com&quot; rel=&quot;nofollow noreferrer&quot;&gt;VEX Robotics Competition&lt;/a&gt;.  I want to be able to press buttons on my PS3-style controller to have the arm raise to certain angles.  I have a potentiometer to measure the 4-bar's angle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The potentiometer measures the angle of one of the joints in the shoulder of the mechanism, which is similar to this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/CwnAQ.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What type of control should I use to stabilize the arm at these angles?&lt;/p&gt;&#xA;" OwnerUserId="314" LastEditorUserId="37" LastEditDate="2013-03-19T17:09:03.350" LastActivityDate="2013-03-19T17:09:03.350" Title="Stabilizing a Robot Arm at a Specified Height" Tags="&lt;mobile-robot&gt;&lt;control&gt;&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1083" PostTypeId="1" CreationDate="2013-03-18T07:04:22.903" Score="6" ViewCount="1257" Body="&lt;p&gt;The textbook I'm using doesn't have the answers to the practice questions, so I'm not sure how I'm doing. Are the following DH parameters correct given the frames I assigned?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The original question is as follows:&#xA;The arm with 3DOF shown below is like the one in example 3.3, except that joint 1's axis is not parallel to the other two. Instead, there is a twist of 90 degrees in magnitude between axes 1 and 2. Derive link parameters and the kinematic equations for $^bT_w$ (where b means base frame and w means wrist frame).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/tuo7v.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;Link Parameters:&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\begin{array}{ccc}&#xA;  &amp;amp; const.        &amp;amp; and      &amp;amp;     &amp;amp;               \\&#xA;  &amp;amp; angle         &amp;amp; distance &amp;amp;     &amp;amp;               \\&#xA;i &amp;amp; \alpha_{i-1}  &amp;amp; a_{i-1}  &amp;amp; d_i &amp;amp; \bf{\theta_i} \\&#xA;\\&#xA;1 &amp;amp; 0             &amp;amp; 0        &amp;amp; 0   &amp;amp; \theta_1      \\&#xA;2 &amp;amp; -90           &amp;amp; L_1      &amp;amp; 0   &amp;amp; \theta_2      \\&#xA;3 &amp;amp; 0             &amp;amp; L_2      &amp;amp; 0   &amp;amp; \theta_3      \\&#xA;\end{array}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Frame Assignments: &lt;img src=&quot;https://i.stack.imgur.com/I6XKZ.jpg&quot; alt=&quot;Frame Assignments&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="916" LastEditorUserId="350" LastEditDate="2014-02-27T14:57:25.183" LastActivityDate="2014-02-27T14:57:25.183" Title="Assigning Frames and Deriving Link Parameters" Tags="&lt;inverse-kinematics&gt;&lt;kinematics&gt;&lt;forward-kinematics&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1084" PostTypeId="2" ParentId="1082" CreationDate="2013-03-18T15:48:28.377" Score="8" Body="&lt;p&gt;This sounds like a classic case for a &lt;a href=&quot;http://en.wikipedia.org/wiki/PID_controller&quot;&gt;PID controller&lt;/a&gt;.  The &quot;derivative&quot; part of this controller will help prevent the arm from oscillating as you move to a new angle, and the &quot;integral&quot; part will help counteract the force of gravity acting on the arm.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2013-03-18T15:48:28.377" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1085" PostTypeId="2" ParentId="1033" CreationDate="2013-03-19T00:14:09.130" Score="6" Body="&lt;h2&gt;motor controllers&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;what is the actuated quantity&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yes, the output of the control electronics and the input of the motor, in the simplest case -- DC permanent-magnet motors -- is the &lt;em&gt;voltage applied to the motor&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In other cases, the output of the control electronics is the duty cycle of a PWM voltage applied directly to the motor or indirectly to the &quot;signal&quot; wire of a &lt;a href=&quot;http://en.wikipedia.org/wiki/Servo_%28radio_control%29&quot; rel=&quot;noreferrer&quot;&gt;radio control servo&lt;/a&gt;.&#xA;They work a little differently.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In yet other cases, many people control position using &lt;a href=&quot;http://reprap.org/wiki/stepper_motor&quot; rel=&quot;noreferrer&quot;&gt;stepper motors&lt;/a&gt;.&#xA;They work very differently than DC permanent-magnet motors.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;motors&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;the actuated quantity gets turned into&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your suggestion of &quot;&lt;em&gt;torque control&lt;/em&gt;&quot; is approximately true when motor very slow or stopped.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The so-called &quot;back-EMF&quot; generated by the motor by &quot;generator action&quot; is proportional to its angular velocity.&#xA;This back-EMF allows motors to be used as generators, such as the motor/generators used in a few cars and the regenerative breaking used in a few vehicles.&#xA;(Part of the back-EMF is caused by the &quot;autoinductance&quot; of the windings, but that part is usually negligible, so I will not mention it further -- &lt;a href=&quot;http://www.inf.fu-berlin.de/lehre/SS05/Robotik/motors.pdf&quot; rel=&quot;noreferrer&quot;&gt;the article you mentioned&lt;/a&gt; has a good explanation).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At any instant, the electrical current in the motor is proportional to the applied voltage minus the back-EMF.&#xA;Meanwhile, the mechanical torque generated by the motor is approximately proportional to that electric current.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore at low speeds the mechanical torque generated by the motor is proportional to the applied voltage.&#xA;But at high positive speeds, the torque generated by the max positive voltage is less; the &quot;max speed&quot; is often defined as the speed where the max positive voltage gives zero torque.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;PID&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;assume that the servo is holding a weight at a distance (so it is acting against gravity), which means an approximately constant torque load. In this case, if the position error is zero and the servo is at rest, then each of P, I and D components are zero, which means the exerted torque is zero. This would cause the weight to sink, which is countered by the error in its position causing P,I components to increase. Wouldn't this situation cause the lifted weight to oscillate and balance at a constant position which is significantly different from the goal position?&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are 2 different cases: the short-term state immediately after some heavy load is applied, and the long-term state after the arm is allowed to settle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please tell the person who told you that &quot;if the position error is zero and the servo is at rest, then the I component is zero&quot; to experiment with a PID controller, or read a little more about control systems (&lt;a href=&quot;http://en.wikipedia.org/wiki/control_system&quot; rel=&quot;noreferrer&quot;&gt;a&lt;/a&gt;, &lt;a href=&quot;http://ftcforum.usfirst.org/showthread.php?1359-Problem-holding-motor-in-fixed-position-for-jointed-arm&quot; rel=&quot;noreferrer&quot;&gt;b&lt;/a&gt;, &lt;a href=&quot;http://www.coactionos.com/embedded-design/39-motor-control.html&quot; rel=&quot;noreferrer&quot;&gt;c&lt;/a&gt;, &lt;a href=&quot;http://www.seattlerobotics.org/encoder/200011/SmallRobotMotionControl.htm&quot; rel=&quot;noreferrer&quot;&gt;d&lt;/a&gt;, &lt;a href=&quot;http://letsmakerobots.com/node/36435&quot; rel=&quot;noreferrer&quot;&gt;e&lt;/a&gt;), or both, to fill in the gaping hole in his knowledge of what the I component does in a PID controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;PID with near-zero I component&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the short term, the P, I, and D components start out at approximately zero,&#xA;and so the exerted torque is approximately zero.&#xA;When Fred suddenly applies a heavy load, there is not enough torque to hold it in position, so it sinks.&#xA;The error in its position causes the P,I components to increase.&#xA;If, hypothetically, one had a controller where the I component was &lt;em&gt;completely ignored&lt;/em&gt;,&#xA;then the arm would settle at some constant position, as you mentioned.&#xA;The arm would stabilize at the position where the voltage supplied by the controller (proportional to P, the error in position) was exactly enough to hold up the weight.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;PID with significant I component&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, with the &lt;a href=&quot;http://en.wikipedia.org/wiki/PID_controller&quot; rel=&quot;noreferrer&quot;&gt;PID controller&lt;/a&gt; you mentioned, the I component increases as long as there is &lt;em&gt;any&lt;/em&gt; error.&#xA;Eventually there would be enough I component accumulated that the controller would increase the voltage more than enough to hold up the weight, pushing the weight back up towards the zero-error point.&#xA;Whether the weight overshoots or not depends on how the PID controller is tuned, but as long as the P,I,D components are anywhere close to a reasonable value, the PID controller will eventually settle down to the state where:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the arm is stable at almost exactly the goal position (with practically zero error)&lt;/li&gt;&#xA;&lt;li&gt;therefore the P and D components are practically zero&lt;/li&gt;&#xA;&lt;li&gt;The I component is not zero -- it still has some large value that accumulated previously when the arm was below the desired position.&lt;/li&gt;&#xA;&lt;li&gt;the control electronics (because the I component is not zero) drive the motor with some voltage&lt;/li&gt;&#xA;&lt;li&gt;the motor converts that voltage into some torque that holds the weight up at the goal position.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Many robotic control systems are quick enough that they converge on this final state within a tenth of a second.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When Fred (that prankster!) yanks the weight off the arm,&#xA;even though the arm is already at the goal position,&#xA;the high accumulated I component causes the arm to pop up.&#xA;That small error causes the accumulated I component to bleed off,&#xA;and (hopefully soon) the arm returns to almost exactly the goal position (with practically zero error).&lt;/p&gt;&#xA;" OwnerUserId="187" LastActivityDate="2013-03-19T00:14:09.130" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1086" PostTypeId="1" AcceptedAnswerId="1087" CreationDate="2013-03-19T08:15:53.780" Score="8" ViewCount="1554" Body="&lt;p&gt;How do I increase the rotation range of a standard servo? Most servos have a rotation range of ~ 180 degrees. I would like to access the entire 360 degree range on the servo, partially because I would be attaching the servo's shaft to the robotic wheel and would like it to be able to make full rotations. Or is that not possible? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would not like to however lose the 'encoder' part of the servo which allows me to clearly specify which angular position the wheel should stop at. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I use gears in order to transform this system range, would it lead to loss of precision?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition, would such a transform allow the wheels to continuously rotate in one direction? From what I understand, this won't work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would a stepper motor with an external encoder or a dc motor with an external encoder work?&lt;/p&gt;&#xA;" OwnerUserId="333" LastEditorUserId="37" LastEditDate="2013-05-21T11:47:25.057" LastActivityDate="2013-05-21T11:47:25.057" Title="Increasing the rotation range of a servo motor" Tags="&lt;motor&gt;&lt;rcservo&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1087" PostTypeId="2" ParentId="1086" CreationDate="2013-03-19T08:36:30.283" Score="3" Body="&lt;p&gt;It is possible to do it. Take a look at this &lt;a href=&quot;http://www.acroname.com/robotics/info/ideas/continuous/continuous.html&quot; rel=&quot;nofollow&quot;&gt;link&lt;/a&gt;.&#xA;Of course you will not have the encoder possibility with that servo. But you dont have it currently either. You have to solder middle pin from rotary encoder (resistor) and read the value of resistance to determine current position of shaft.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you need positioning i would suggest DC motor with encoder or stepper. With stepper you can count steps made. That is only rough estimation on distance made by robot as you dont have feedback if motor has actually turn or not.&lt;/p&gt;&#xA;" OwnerUserId="973" LastActivityDate="2013-03-19T08:36:30.283" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1088" PostTypeId="2" ParentId="1036" CreationDate="2013-03-19T08:43:29.430" Score="0" Body="&lt;p&gt;The Rock framework has such a widget (based on OpenPilot/GCS).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;package&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://rock-robotics.org/master/pkg/gui/map2d/index.html&quot; rel=&quot;nofollow&quot;&gt;http://rock-robotics.org/master/pkg/gui/map2d/index.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;code&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://gitorious.org/rock-gui/map2d&quot; rel=&quot;nofollow&quot;&gt;http://gitorious.org/rock-gui/map2d&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2013-03-19T08:43:29.430" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1089" PostTypeId="1" CreationDate="2013-03-19T12:29:31.630" Score="3" ViewCount="224" Body="&lt;p&gt;I have two quaternions that indicate the initial orientation of a four wheel robot, each one in relative to one reference systems. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The robot's orientation given by a quaternion q is not the same in the two reference systems: For one reference system the quaternion q1 might refer to the robot looking at positive x while the same quaternion components q1 in the second reference system might refer to the robot looking at the negative x.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have two matrices which indicate the position of the robot in time in its correspondent reference system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to find the correspondent points of the first matrix in to the second reference system. Each matrix is built with a different sensor, so the results will be similar but not exactly the same.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think I should find the transformation from the first reference system to the second and then apply it for each point of the first matrix. How can I find this transformation? The translation part I think is clear, but the rotation not at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;@WildCrustacean&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The solution proposed does not solve the problem, I think that the reason is because each system represents the robot in a different way. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the initial one (A) the robot moving forward with no rotation would increase in the X axis. In the goal referential system (B) the robot moving forward with no rotation would increase in the Z axis. (See figure for more details) &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;First system (A)&#xA; ______&#xA;|\  T  \&#xA;| \_____\     z&#xA;|B |    | : y ^&#xA; \ | R  |    \|&#xA;  \|____|     +--&amp;gt; x&#xA;&#xA;&#xA;Second system (B)&#xA; ______&#xA;|\  T  \&#xA;| \_____\     x&#xA;|B |    | :   ^&#xA; \ | R  |     |&#xA;  \|____|     +--&amp;gt; z&#xA;               \&#xA;                y&#xA;&#xA;R: Right side&#xA;B: Back side&#xA;T: Top&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I think I have to apply an extra rotation to change the initial quaternion that belongs to the first system to be in accordance with the second system before applying the transformation of your post.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One rotation of 180 degrees around x followed by one of 90 around y. Would rotate from A to B &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is how I tried to solve it:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;# Quaternion to adjust reference system&#xA;first_quat = make_quaternion(unitary_x, pi) # Generates the quaternion that rotates pi around X &#xA;second_quat = make_quaternion(unitary_y, pi/2.0) # Generates the quaternion that rotates pi/2 around Y &#xA;composed_fs_q = first_quat*second_quat &#xA;&#xA;# Quaternion to rotate from one reference system to the other&#xA;quaternion_ini_A = quaternion_ini_A*composed_fs_q&#xA;A2B_quaternion = quaternion_ini_B*(quaternion_ini_A.inverse())&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;A2B_quaternion is the quaternion that I use for the rotation but still doesn't perform the right rotation. Any idea?&lt;/p&gt;&#xA;" OwnerUserId="1058" LastEditorUserId="1058" LastEditDate="2013-03-27T16:13:06.097" LastActivityDate="2013-03-28T16:17:21.460" Title="How to perform this reference system transformation?" Tags="&lt;mobile-robot&gt;&lt;localization&gt;&lt;odometry&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1090" PostTypeId="2" ParentId="1089" CreationDate="2013-03-19T13:42:43.740" Score="2" Body="&lt;p&gt;So you need to find the rotation that gets you from the first coordinate system to the second, and then combine that with the translation to get the final transformation matrix. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since you have quaternions q1 and q2, you can write this rotation as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$q = q_2 * q_1^{-1}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can then convert from the quaternion form to a rotation matrix to make the final transformation matrix, there are &lt;a href=&quot;http://en.wikipedia.org/wiki/Rotation_formalisms_in_three_dimensions#Rotation_matrix_.E2.86.94_quaternion&quot; rel=&quot;nofollow&quot;&gt;equations for this&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The final transformation would be of the form:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\begin{bmatrix}\boldsymbol{R} &amp;amp; \boldsymbol{t}\\\boldsymbol{0} &amp;amp; 1\end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where $\boldsymbol{R}$ is the 3x3 rotation matrix and $\boldsymbol{t}$ is the 3x1 translation vector.&lt;/p&gt;&#xA;" OwnerUserId="479" LastEditorUserId="479" LastEditDate="2013-03-19T13:49:36.093" LastActivityDate="2013-03-19T13:49:36.093" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1091" PostTypeId="1" CreationDate="2013-03-19T20:30:43.727" Score="6" ViewCount="2144" Body="&lt;p&gt;I'm building a motion detection and object recognition camera with feedback control for a hexy robot. Fortunately most of the servo control is handled by the analog servo controls and the high-level logic can be implemented in python on a raspberry pi. What's the right combination of python modules to implement:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;a daemon/service to trigger and execute image capture and processing&lt;/li&gt;&#xA;&lt;li&gt;a daemon/service to regularly update the hexy with the latest motion plan and servo setpoints&lt;/li&gt;&#xA;&lt;li&gt;the image processing for recognition and tracking of objects from the webcam&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I'm currently using python-daemon for the services and comparing the various pypi opencv libraries to see if any of them look promising. Anyone have experience with these on a raspberry pi or ARM processor in a robotics application? &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;remotecv                  - remotecv is an OpenCV server for face recognition&lt;/li&gt;&#xA;&lt;li&gt;ctypes-opencv             - ctypes-opencv - A Python wrapper for OpenCV using ctypes&lt;/li&gt;&#xA;&lt;li&gt;pyopencv                  - PyOpenCV - Boost.Python and NumPy&lt;/li&gt;&#xA;&lt;li&gt;opencv-cython             - An alternative OpenCV wrapper&lt;/li&gt;&#xA;&lt;li&gt;CVtypes                   - Python OpenCV wrapper using ctypes&lt;/li&gt;&#xA;&lt;li&gt;Tippy                     - another Toolbox for Image Processing, based on OpenCV&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;These each depend on a deep list of low-level libraries and/or compilers like Boost-&gt;numpy-&gt;gfortran or cython-&gt;gcc or ctypes. I'm concerned about compatibility and performance of these lowlevel libraries on Raspbian and an ARM processor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyone with a known working architecture for image processing and real-time control in python on an ARM processor will get their answer upvoted and/or accepted.&lt;/p&gt;&#xA;" OwnerUserId="1060" LastEditorUserId="1060" LastEditDate="2013-03-20T20:18:46.863" LastActivityDate="2013-03-21T17:25:45.787" Title="Python libraries for image processing and feedback control on raspberry pi" Tags="&lt;raspberry-pi&gt;&lt;real-time&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1092" PostTypeId="1" AcceptedAnswerId="1094" CreationDate="2013-03-19T21:26:07.550" Score="7" ViewCount="862" Body="&lt;p&gt;Are there any decent python numerical package libraries besides numpy for python? Numpy relies on gfortan which itself must be compiled correctly for your platform to avoid hidden/insidious numerical errors in numpy. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need a matrix algebra package to do kinematics, path planning, and machine learning in python that isn't sensitive to  &lt;code&gt;gfortran&lt;/code&gt; version and compiler options.&lt;/p&gt;&#xA;" OwnerUserId="1060" LastEditorUserId="1060" LastEditDate="2019-12-13T18:49:02.887" LastActivityDate="2019-12-13T18:49:02.887" Title="Numpy alternatives for linear algebra and kinematics in python?" Tags="&lt;kinematics&gt;&lt;python&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="1093" PostTypeId="2" ParentId="654" CreationDate="2013-03-20T08:23:59.003" Score="4" Body="&lt;p&gt;From Microsoft site:&#xA;What's the difference between the Kinect for Windows sensor and the Kinect for Xbox 360 sensor?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Kinect for Windows sensor is a fully-tested and supported Kinect experience on Windows with features such as “near mode,” skeletal tracking control, API improvements, and improved USB support across a range of Windows computers and Windows-specific 10’ acoustic models.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The sensor was specifically designed to be used with computers, and includes a shortened USB cable to ensure reliability across a broad range of computers. Kinect for Xbox 360 was built for and tested with the Xbox 360 only, not with any other platform, which is why it is not licensed for general commercial use, supported, or under warranty when used on any other platform.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Microsoft has a large team of engineers that is dedicated to continual improvements of the hardware and software associated with Kinect for Windows, and is committed to providing ongoing access to Microsoft's deep investment in human tracking and speech recognition.&lt;/p&gt;&#xA;" OwnerUserId="1061" LastEditorUserId="-1" LastEditDate="2014-08-02T09:17:29.887" LastActivityDate="2014-08-02T09:17:29.887" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1094" PostTypeId="2" ParentId="1092" CreationDate="2013-03-20T14:08:55.093" Score="1" Body="&lt;p&gt;&lt;a href=&quot;http://docs.opencv.org/modules/refman.html&quot; rel=&quot;nofollow&quot;&gt;OpenCV&lt;/a&gt; is available with python bindings. It's not geared at strictly numerical applications, but it might be sufficient. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It includes some &lt;a href=&quot;http://docs.opencv.org/modules/core/doc/operations_on_arrays.html&quot; rel=&quot;nofollow&quot;&gt;matrix math&lt;/a&gt; and &lt;a href=&quot;http://docs.opencv.org/modules/ml/doc/ml.html&quot; rel=&quot;nofollow&quot;&gt;machine learning&lt;/a&gt; algorithms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't say you won't ever experience numerical problems, but it's not based on gfortran.&lt;/p&gt;&#xA;" OwnerUserId="479" LastActivityDate="2013-03-20T14:08:55.093" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1095" PostTypeId="2" ParentId="1091" CreationDate="2013-03-21T13:15:40.553" Score="1" Body="&lt;p&gt;You could just &lt;a href=&quot;http://eduardofv.com/read_post/185-Installing-OpenCV-on-the-Raspberry-Pi&quot; rel=&quot;nofollow&quot;&gt;install OpenCV on a Raspberry Pi board&lt;/a&gt; and run your own performance tests.  What counts as &quot;real-time control&quot; and image processing will depend on your specific application, so if OpenCV can't handle it then you should post another question with more concrete performance requirements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A colleague of mine says that:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;OpenCV runs fine [on a Raspberry Pi], and is easy to install (sudo apt-get install libopencv-dev). I found the board quite capable and not far behind performance of the Beagle Board. As an example, Apriltags (&lt;a href=&quot;http://people.csail.mit.edu/kaess/apriltags/&quot; rel=&quot;nofollow&quot;&gt;http://people.csail.mit.edu/kaess/apriltags/&lt;/a&gt;) runs at 3.5fps at 320x240 from a USB camera&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2013-03-21T17:25:45.787" LastActivityDate="2013-03-21T17:25:45.787" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1096" PostTypeId="2" ParentId="1069" CreationDate="2013-03-21T18:15:17.073" Score="4" Body="&lt;p&gt;The gear trains in many printers and multifunction devices, and in some scanners, have a transfer gear that drives two different gears, depending on which way the drive motor is running.  The pictures below show several such transfer gears in the left-side gear train of a Brother MFC-1970MC (&lt;a href=&quot;http://reviews.cnet.com/multifunction-devices/brother-mfc-1970mc/4507-3181_7-4842717.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;1&lt;/a&gt;, &lt;a href=&quot;http://www.brother-usa.com/mfc/discontinued.aspx?ProductID=MFC1970MC#.UUkkblEVlkp&quot; rel=&quot;nofollow noreferrer&quot;&gt;2&lt;/a&gt;), a 1998-vintage fax/copier/printer/scanner/answering machine multifunction device.  The right-side gear train only has half-a-dozen gears in it and isn't shown.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 1970MC has one drive motor to power four different operations: printer paper pickup, printer paper drive, scan sheet pickup, and scan sheet drive.  I suspect that the solenoid (shown in first and last pictures) selects between printer and scanner operation, and that the swinging transfer gears (some of which appear in all pictures) select between paper pickup and paper drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/7XqCF.jpg&quot; alt=&quot;overview, left-side gear train&quot;&gt;&#xA;&lt;img src=&quot;https://i.stack.imgur.com/ry4aS.jpg&quot; alt=&quot;closeup, rear transfer gear, CCW&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Above: When A turns CW (clockwise), D is driven by the transfer gear C.  Gears A and C go CW while B and D go CCW.  The turning resistance of C causes the arm to swing to the left.  When C encounters D, B continues forcing C to the left so that C and D mesh strongly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Below: When A turns CCW, E is driven by the transfer gear C.  Gears A and C go CCW while B and E turn CW.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Note, there is a one-way clutch or ratchet beneath the black gear E; when E is driven, the white gear beneath E does not turn.  When D is driven, it drives the two gears at very top center in picture, so driving the white gear beneath E.  Thus E rotates CW whenever A rotates.  D rotates CCW when A goes CW.  D does not rotate when A goes CCW.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/2ZGiH.jpg&quot; alt=&quot;closeup, rear transfer gear, CW&quot;&gt;&#xA;&lt;img src=&quot;https://i.stack.imgur.com/ND0Uh.jpg&quot; alt=&quot;closeup, front transfers, solenoid, and motor&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the center of the picture above are two swing transfer gears, labeled P and Q.  When the solenoid is out (not energized) the hook at the end of arm R prevents Q from swinging.  Also, a hook on P (more visible in first photo) slides over end of R so if P is operating Q cannot.  When the solenoid is in, Q can swing, and the hook on P hits the end of R, so if Q is operating P cannot engage the gear to its right.&lt;/p&gt;&#xA;" OwnerUserId="478" LastEditorUserId="478" LastEditDate="2013-03-22T18:08:50.880" LastActivityDate="2013-03-22T18:08:50.880" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1097" PostTypeId="1" AcceptedAnswerId="1104" CreationDate="2013-03-22T01:46:47.187" Score="8" ViewCount="290" Body="&lt;p&gt;Shall I filter (kalman/lowpass) after getting the raw values from a sensor or after converting the raw values to a usable data? Does it matter? If so, why? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Example:&#xA;Filter after getting raw values from IMU&#xA;or &#xA;filter after converting raw values to a usable data eg. flight dynamics parameters.&lt;/p&gt;&#xA;" OwnerDisplayName="user697" LastEditorDisplayName="user697" LastEditDate="2013-03-22T02:58:28.477" LastActivityDate="2013-03-23T04:29:14.803" Title="At which stage should filtering be applied to the sensors data?" Tags="&lt;kalman-filter&gt;&lt;imu&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1098" PostTypeId="2" ParentId="1074" CreationDate="2013-03-22T01:57:24.380" Score="0" Body="&lt;p&gt;The ring should be below the propeller. It is designed to keep the three screws in place in case some of the screws come out during the flight.&lt;/p&gt;&#xA;" OwnerDisplayName="user697" LastActivityDate="2013-03-22T01:57:24.380" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1099" PostTypeId="2" ParentId="921" CreationDate="2013-03-22T02:15:04.173" Score="10" Body="&lt;p&gt;You have different options (priority by difficulty level):&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Using a smartphone as a camera.&#xA;There are actually apps for this. If you can attach one phone to your robot then you can stream the live video either on another phone or on the web. However the phone attached to the robot should have an internet connection(3G or even Edge). Search for &quot;live stream&quot; in App store or Google Play. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Using an &lt;a href=&quot;http://en.wikipedia.org/wiki/IP_camera&quot;&gt;IP Camera&lt;/a&gt;. &#xA;This option is quite simple and requires you to have an IP camera wich then can be controlled by the Arduino. The IP camera can transmit video wirelessly to your Router or A Raspberry pie. You can then connect another phone or computer to the router to see the live image. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Using a Raspberry Pi. &#xA;Id normally would not do video or image manipulations in the Arduino platform because of the low performance it has got. You could connect a Raspberry pi to the Arduino. And a good camera to Raspberry pi. Arduino can send commands to Raspberry pi on when to start transmitting and so on. You can then do image manipulations on the Pi as well. And Since Raspberry pi can work as a router you could connect you smartphone to the raspberry pi through wifi or even Bluetooth. You will get a nice and high FPS video even with text/color manipulations.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You could use the &lt;a href=&quot;http://developer.android.com/tools/adk/index.html&quot;&gt;Android ADK&lt;/a&gt; as your main controller. And then the Arduino is set up as an accessory. In this way the Arduino can command Android what to do. A cheap android based mobile phone will cost you around 100USD and you will get lots of features for the price. Like GPS, Camera, Battery etc. Most modern smart phone have the ability of creating a wifi hotspot. You can then connect any other wifi platform to that hotspot and control the robot or in your case viewing a live stream video. This is by the most elegant method in my opinion.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerDisplayName="user697" LastEditorDisplayName="user697" LastEditDate="2013-03-22T23:24:17.057" LastActivityDate="2013-03-22T23:24:17.057" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1100" PostTypeId="1" AcceptedAnswerId="1101" CreationDate="2013-03-22T02:46:07.920" Score="12" ViewCount="358" Body="&lt;p&gt;The definition of a robot is as follow: &quot;A robotic paradigm can be described by the relationship between the three primitives of robotics: Sense, Plan, and Act.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An example could be the famous &quot;Kuka Robots&quot;. The Kuka robot is preprogrammed and does mainly one loop over and over again. Some of them could have measurement sensors but that is all. They do not think or plan nor do they make decisions. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;An automatic door opener, used in a building is not a robot either but according to the robotic paradigm definition they are more a robot than a Kuka machine. They actually get some data from a sensor followed by planning and acting. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So why are Kuka machines called robots?&lt;/p&gt;&#xA;" OwnerDisplayName="user697" LastEditorUserId="37" LastEditDate="2013-03-26T01:54:56.927" LastActivityDate="2013-04-03T00:21:39.563" Title="Why are industrial machines called robots?" Tags="&lt;industrial-robot&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1101" PostTypeId="2" ParentId="1100" CreationDate="2013-03-22T08:12:49.960" Score="10" Body="&lt;p&gt;No, that's the definition of &quot;robotic paradigm&quot;, which is basically a class of paradigms for designing complex robots. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The definition of &quot;robot&quot;, in this context, is:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;A robot is a mechanical or virtual artificial agent, usually an electro-mechanical machine that is guided by a computer program or electronic circuitry.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;or &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;A machine capable of carrying out a complex series of actions automatically.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(&quot;complex&quot; is ambiguous here)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Robot#Defining_characteristics&quot;&gt;This Wikipedia section&lt;/a&gt; confirms that there is an ambiguity:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;While there is no single correct definition of robot, a typical robot will have several, or possibly all, of the following characteristics.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;It is an electric machine which has some ability to interact with physical objects and to be given electronic programming to do a specific task or to do a whole range of tasks or actions. It &lt;strong&gt;may&lt;/strong&gt; also have some ability to perceive and absorb data on physical objects, or on its local physical environment, or to process data, or to respond to various stimuli. This is in contrast to a simple mechanical device such as a gear or a hydraulic press or any other item which has no processing ability and which does tasks through purely mechanical processes and motion.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(emphasis mine)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the end, almost any mechanical device of some level of complexity can be classified as a robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, note that Kuka robots will have a small amount of sensors for fine-tuning (even if the bot is just picking up an object off a pedestal, it needs to correct its trajectory to align perfectly with the object)&lt;/p&gt;&#xA;" OwnerUserId="126" LastActivityDate="2013-03-22T08:12:49.960" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="1102" PostTypeId="2" ParentId="921" CreationDate="2013-03-22T11:43:15.067" Score="1" Body="&lt;p&gt;here's how i managed to solve my problem, i got my old wildfire installed &lt;a href=&quot;https://play.google.com/store/apps/details?id=com.pas.webcam&quot; rel=&quot;nofollow&quot;&gt;IP Webcam&lt;/a&gt;, set-up a wifi hotspot from my nexus4, connected to it from the wildfire, took the wildfire's ip and put it in the nexus4's web viewer.&lt;/p&gt;&#xA;" OwnerUserId="888" LastActivityDate="2013-03-22T11:43:15.067" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1103" PostTypeId="2" ParentId="1097" CreationDate="2013-03-22T12:43:33.213" Score="0" Body="&lt;p&gt;Filter the raw data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Filtering weeds out (hopefully) most noise and errors. Raw data usually is not so useful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Gyros drift, compasses has a lot of noise. Kalman can remove both.&lt;/p&gt;&#xA;" OwnerUserId="61" LastEditorUserId="61" LastEditDate="2013-03-22T12:53:23.597" LastActivityDate="2013-03-22T12:53:23.597" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1104" PostTypeId="2" ParentId="1097" CreationDate="2013-03-22T15:02:00.607" Score="1" Body="&lt;p&gt;The KF estimates the robot pose based on all sensor inputs &lt;em&gt;and the sensor correlation&lt;/em&gt;. If you do an EKF on the compass data, you'd really need the robot pose to determine how likely a given compass reading &lt;em&gt;is&lt;/em&gt;. Without that, you are &#xA;just low-pass filtering (not using a probabilistic filter like the KF).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you filter before you put everything in the same frame, then I don't know what information you'd have to do filtering &lt;em&gt;on&lt;/em&gt;.&#xA;Since I don't know exactly what you mean by &quot;usable&quot; I assume you have converted all sensor data into the coordinate frame of the robot. In that case, filtering is very easy since you can put all the sensor readings directly into one EKF. In fact, this is the &quot;normal&quot; way to do filtering, that I'm familiar with.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;:&#xA;Let's say your IMU is attached to a robot. The IMU will be used in estimating the pose of the robot. It doesn't matter what &lt;em&gt;units&lt;/em&gt; you use as long as the IMU is telling you something about how the robot is moving. Then you can use the &lt;em&gt;corellation&lt;/em&gt; of the IMU to other things that measure movement, such as the compass or odometers. That is what the KF is for. The KF is &lt;em&gt;not&lt;/em&gt; a sensor filter like a bandpass filter or something.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a very relevant answer &lt;a href=&quot;https://robotics.stackexchange.com/q/277/163&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="163" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2013-03-23T04:29:14.803" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1105" PostTypeId="2" ParentId="433" CreationDate="2013-03-23T17:38:19.233" Score="2" Body="&lt;p&gt;Have a look at &lt;a href=&quot;http://www.cvlibs.net/datasets/kitti/eval_odometry.php&quot; rel=&quot;nofollow&quot;&gt;KITTI Visual Odometry Benchmark/Evaluation&lt;/a&gt;. Its a recent and nice evaluation of different stereo visual odometry algorithms on some large outdoor urban scenes. They compare it against ground truth (GPS). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would say Visual Odometry are quite accurate and elegant perception systems. And its much better option than the IMU/GPS alone (even the high end ones).&lt;/p&gt;&#xA;" OwnerUserId="674" LastActivityDate="2013-03-23T17:38:19.233" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1106" PostTypeId="2" ParentId="840" CreationDate="2013-03-24T11:16:50.043" Score="2" Body="&lt;p&gt;You can use SolidWorks, ADAMS, or CATIA software.&#xA;You can design your platform and analyses or make a formula for that with this software.&lt;/p&gt;&#xA;" OwnerUserId="1071" LastEditorUserId="1071" LastEditDate="2021-03-14T00:28:51.657" LastActivityDate="2021-03-14T00:28:51.657" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="1107" PostTypeId="2" ParentId="826" CreationDate="2013-03-24T11:22:16.177" Score="0" Body="&lt;p&gt;If you want to Design your robot you can use SolidWork, CATIA or ADAMS software then you can animate your robot. But you can use Aldebaran standard platform robot (NAO) simulator. This simulator can be helpful for you but NAO robot is a kid size robot with good sensors.&lt;/p&gt;&#xA;" OwnerUserId="1071" LastActivityDate="2013-03-24T11:22:16.177" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1108" PostTypeId="2" ParentId="1051" CreationDate="2013-03-25T23:33:10.373" Score="2" Body="&lt;p&gt;I think you could use &lt;em&gt;bearing&lt;/em&gt; (or &lt;em&gt;azimuth&lt;/em&gt; or &lt;em&gt;right ascension&lt;/em&gt;) and &lt;em&gt;mark&lt;/em&gt; (or &lt;em&gt;altitude&lt;/em&gt; or &lt;em&gt;declination&lt;/em&gt;). For example 0 mark 0 is straight ahead and on the horizon. 30 mark 30 is 30 degrees to the right and 30 degrees above the horizon. -90 mark -90 would be 90 degrees to the left and then face down into the ground.  These could be relative to your current position and orientation or relative to some reference such as true north or magnetic north and the horizon. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the system astronomer's use.&lt;/p&gt;&#xA;" OwnerUserId="1075" LastEditorUserId="1075" LastEditDate="2013-03-25T23:43:50.693" LastActivityDate="2013-03-25T23:43:50.693" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1109" PostTypeId="2" ParentId="1064" CreationDate="2013-03-27T16:33:15.337" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;&quot;I'm going to need analogue control&quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This is almost always done by rapidly connecting and disconnecting the motor to power, using PWM or something similar.&#xA;The switching is faster than the motor can respond, and often the designer picks a switching frequency faster than the 20 kHz humans can hear.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;generating PWM signals&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;There are 3 popular methods of generating PWM signals: ( &lt;a href=&quot;https://electronics.stackexchange.com/questions/6676/which-sipo-chip-is-better-74hc4094-or-74hc595-or-something-else&quot;&gt;a&lt;/a&gt;, &lt;a href=&quot;https://electronics.stackexchange.com/questions/11633/pov-globe-speed-questions/11664#11664&quot;&gt;b&lt;/a&gt; )&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Generate the PWM in software (&quot;Bit-banging Pulse Width Modulation&quot;). Typically this is the lowest-cost approach. With enough 74HC595 or TPIC6595 chips, one Arduino can control any number of motors. (But I doubt you'll be able to get 20 kHz PWM frequency this way).&lt;/li&gt;&#xA;&lt;li&gt;Generate the PWM using on-chip PWM hardware on the microcontroller. With enough Arduinos, you can control any number of motors at a high PWM frequency with 3 or 4 motors per Arduino.&lt;/li&gt;&#xA;&lt;li&gt;Generate the PWM using dedicated PWM peripheral chips such as the TLC5947, which the microcontroller occasionally loads with a new PWM duty cycle. With enough TLC5947 chips, one Arduino can control any number of motors and still maintain a high PWM frequency.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2&gt;Converting PWM signals into something that can drive a motor&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;It appears your motors are rated at 85 mA start, 75 mA continuous.&#xA;That is really tiny for a motor.&#xA;But it's still more power than most digital logic chips can drive directly.&#xA;As you can see from this list, only one of the chips mentioned above (the TPIC6595) is really designed to directly drive that amount of power:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;TPIC6595 datasheet: test conditions ... 250 mA continuous sink current capability.&lt;/li&gt;&#xA;&lt;li&gt;TLC5947 datasheet: test conditions ... 30 mA continuous sink current&lt;/li&gt;&#xA;&lt;li&gt;ATmega328P datasheet: &quot;test conditions ... 20 mA at VCC = 5V, 10 mA at VCC = 3V... Pins are not guaranteed to source current greater than the listed test condition.&quot;&lt;/li&gt;&#xA;&lt;li&gt;74HC595 datasheet: test conditions ... 7.8 mA.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;We typically use some kind of &quot;buffer&quot; between the digital logic chips (any of the above chips) and a motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For motors that we only need to turn in one direction, we typically we use flyback diode and either a nFET or a npn transistor as the &quot;buffer&quot;:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;ULN2803A or ULQ2803A (transistor + flyback diode array) datasheet: test conditions ... over 150 mA continuous.&lt;/li&gt;&#xA;&lt;li&gt;There are thousands of discrete transistors and diodes that can easily handle: 10 V, 1 A. ( &lt;a href=&quot;https://electronics.stackexchange.com/questions/57831/how-to-determine-what-transistor-is-needed&quot;&gt;a&lt;/a&gt; )&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;For motors that we need to turn both &quot;forwards&quot; and &quot;reverse&quot;, we typically use 4 transistors arranged in a H bridge as the &quot;buffer&quot;:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;L293D H bridge datasheet: test conditions ... 600 mA.&lt;/li&gt;&#xA;&lt;li&gt;There are thousands of discrete transistors and diodes that can easily handle: 10 V, 1 A.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="187" LastEditorUserId="-1" LastEditDate="2017-04-13T12:33:08.317" LastActivityDate="2013-03-27T16:33:15.337" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1110" PostTypeId="1" AcceptedAnswerId="1112" CreationDate="2013-03-27T17:43:01.053" Score="4" ViewCount="255" Body="&lt;p&gt;I am trying to implement a mechanism to make robots avoid being too close (Say in a distance less than &lt;code&gt;d&lt;/code&gt;). I am not familiar with those systems and I have to implement a strategy to avoid robots being too close to each other. Could anyone recommend me some readings for such a problem or a set of keywords to search for? I don't know yet how to start.&lt;/p&gt;&#xA;" OwnerUserId="1082" LastEditorUserId="158" LastEditDate="2013-03-28T17:05:31.667" LastActivityDate="2014-12-30T15:15:58.607" Title="Robots minimum distance" Tags="&lt;algorithm&gt;&lt;movement&gt;" AnswerCount="4" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1111" PostTypeId="2" ParentId="1110" CreationDate="2013-03-27T18:12:55.970" Score="3" Body="&lt;p&gt;A good place to start is with the work by &lt;a href=&quot;http://arl.cs.utah.edu&quot; rel=&quot;nofollow&quot;&gt;Dr. Jur van den Berg and his colleagues&lt;/a&gt;. Check out the &lt;a href=&quot;http://arl.cs.utah.edu/pubs/index.html&quot; rel=&quot;nofollow&quot;&gt;publications&lt;/a&gt; velocity obstacles and reciprocal collision avoidance. You could start with the latest paper, &lt;a href=&quot;http://arl.cs.utah.edu/pubs/ICRA2013-2.pdf&quot; rel=&quot;nofollow&quot;&gt;Reciprocal Collision Avoidance for Robots with Linear Dynamics using LQR-Obstacles&lt;/a&gt;, they have released on the subject and use the citations to find more related material.&lt;/p&gt;&#xA;" OwnerUserId="177" LastActivityDate="2013-03-27T18:12:55.970" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1112" PostTypeId="2" ParentId="1110" CreationDate="2013-03-27T21:18:12.293" Score="2" Body="&lt;p&gt;Do you mean too close to each other?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It sounds like you might be referring to the sorts of steering behaviours that Craig Reynold's refers to in his &lt;a href=&quot;http://www.red3d.com/cwr/boids/&quot; rel=&quot;nofollow&quot;&gt;Boids project&lt;/a&gt;. He describes some behaviours that exhibit as &lt;em&gt;flocking&lt;/em&gt; or &lt;em&gt;herding&lt;/em&gt; because of the way the participants avoid each other, yet stick together.  He uses the terms 'separation', 'alignment' and 'cohesion' to describe the algorithms involved. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Craig applies these to computer simulations, but you could just as well apply the concepts to robots.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other searches that may prove beneficial: 'flock simulation', 'crowd modelling'.&lt;/p&gt;&#xA;" OwnerUserId="1075" LastEditorUserId="1075" LastEditDate="2013-03-28T17:33:39.733" LastActivityDate="2013-03-28T17:33:39.733" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1113" PostTypeId="1" AcceptedAnswerId="1122" CreationDate="2013-03-28T06:17:54.370" Score="3" ViewCount="13989" Body="&lt;p&gt;I was looking up the motor parameters for some stepper motor where they listed the torque of the motor at different current/voltage but the torque they listed was in kg/cm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How is kg/cm even a remotely acceptable unit for torque?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How do I calculate the torque in Nm from kg/cm?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Clarity note: Its not kgcm which represents [0.098 kilogram force = 1 Nm.]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.nex-robotics.com/products/motors-and-accessories/high-torque-bipolar-stepper-motor.html&quot; rel=&quot;nofollow&quot;&gt;Website&lt;/a&gt; where this happens.&lt;/p&gt;&#xA;" OwnerUserId="333" LastActivityDate="2013-04-02T04:52:10.860" Title="Torque in kg/cm?" Tags="&lt;stepper-motor&gt;&lt;torque&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1114" PostTypeId="2" ParentId="1113" CreationDate="2013-03-28T06:37:46.927" Score="1" Body="&lt;pre&gt;&lt;code&gt;Y[Nm]=X[kg-cm]*9.81[m/s^2]/100[cm]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;1kg multiplyed with gravitational constant will give you 10N and normalizing the cm to m by multiplying it with 0.01.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically, unit in their table is wrong. It is not kg/cm but rather kg-cm. Kg/cm would mean normalized linear pressure, which makes no sense for torque.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, what you have mentioned that 0.02 Nm is small torque. It is but not for 0.1A and 0.4V. If you take a look at torque for 1.5A, it is 0.18Nm for 9W of power.&lt;/p&gt;&#xA;" OwnerUserId="973" LastEditorUserId="973" LastEditDate="2013-03-28T08:14:06.697" LastActivityDate="2013-03-28T08:14:06.697" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1115" PostTypeId="2" ParentId="1078" CreationDate="2013-03-28T06:48:06.923" Score="1" Body="&lt;p&gt;I like @kramer65's answer but because you indicated you might like to make an encoder, I thought I'd share some information on that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.societyofrobots.com/sensors_encoder.shtml&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.societyofrobots.com/sensors_encoder.shtml&lt;/a&gt; shows a very common way of making a rotary encoder. You attach a disk with evenly spaced holes or reflective surfaces depending on implementation to your shaft. You align a light sensor with the holes and count the number of holes that pass to determine how much the shaft has turned. This has the disadvantage of not being able to determine direction but there was ways to modify the design to add that feature. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/254ew.jpg&quot; alt=&quot;An example of a homemade encoder.&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More information can be found in these places:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://groups.csail.mit.edu/mac/users/pmitros/encoder/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://groups.csail.mit.edu/mac/users/pmitros/encoder/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://thedenneys.org/pub/robot/encoders/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://thedenneys.org/pub/robot/encoders/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="1125" LastActivityDate="2013-03-28T06:48:06.923" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1116" PostTypeId="2" ParentId="1110" CreationDate="2013-03-28T09:04:06.963" Score="0" Body="&lt;p&gt;I'd  like to suggest that you start with a book or a course in principles of robotic motion for this topic. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/0262033275&quot; rel=&quot;nofollow&quot;&gt;Principles of Robotic Motion&lt;/a&gt; Provides a very detailed introduction to this topic starting chapter 3 onwards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively, you might want to look for how to make efficient configuration spaces for robots to traverse.&lt;/p&gt;&#xA;" OwnerUserId="333" LastActivityDate="2013-03-28T09:04:06.963" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1117" PostTypeId="1" AcceptedAnswerId="1118" CreationDate="2013-03-28T09:18:05.097" Score="3" ViewCount="1051" Body="&lt;p&gt;I am currently reading into the topic of stereo vision, using the book of Hartley&amp;amp;Zimmerman alongside some papers, as I am trying to develop an algorithm capable of creating elevation maps from two images.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am trying to come up with the basic steps for such an algorithm. This is what I think I have to do:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I have two images I somehow have to find the fundamental matrix, F, in order to find the actual elevation values at all points from triangulation later on. If the cameras are calibrated this is straightforward if not it is slightly more complex (plenty of methods for this can be found in H&amp;amp;Z).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is necessary to know F in order to obtain the epipolar lines. These are lines that are used in order to find image point x in the first image back in the second image.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now comes the part were it gets a bit confusing for me: Now I would start taking a image point x_i in the first picture and try to find the corresponding point x_i’ in the second picture, using some matching algorithm. Using triangulation it is now possible to compute the real world point X and from that it’s elevation. This process will be repeated for every pixel in the right image.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the perfect world (no noise etc) triangulation will be done based on&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;x1=P1X &#xA;x2=P2X&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In the real world it is necessary to find a best fit instead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Doing this for all pixels will lead to the complete elevation map as desired, some pixels will however be impossible to match and therefore can't be triangulated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What confuses me most is that I have the feeling that Hartley&amp;amp;Zimmerman skip the entire discussion on how to obtain your point correspondences (matching?) and that the papers I read in addition to the book talk a lot about disparity maps which aren’t mentioned in H&amp;amp;Z at all. However I think I understood correctly that the disparity is simply the difference x1_i- x2_i?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this approach correct, and if not where did I make mistakes?&lt;/p&gt;&#xA;" OwnerUserId="1085" LastEditorUserId="95" LastEditDate="2013-03-28T15:41:51.613" LastActivityDate="2013-04-05T12:26:40.877" Title="How to obtain stereo correspondences and what exactly is a disparity map?" Tags="&lt;computer-vision&gt;&lt;stereo-vision&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1118" PostTypeId="2" ParentId="1117" CreationDate="2013-03-28T14:45:18.687" Score="1" Body="&lt;p&gt;&lt;strong&gt;How to obtain your point correspondences&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are many ways to do it, which can basically be classified into two categories: feature-based and dense matching.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Feature-based methods include using corner detectors, SIFT/SURF/ORB descriptors and other similar feature detectors that provide point to point correspondences. A few of those methods that are implemented in OpenCV are compared &lt;a href=&quot;http://computer-vision-talks.com/2011/07/comparison-of-the-opencvs-feature-detection-algorithms-ii/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Dense-matching methods usually involve some kind of comparison between sliding windows in both images. The most used approach is SSD or variants. A few of these variants are listed &lt;a href=&quot;http://siddhantahuja.wordpress.com/tag/sum-of-squared-differences/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;What are disparity maps&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your intuition is right: disparity, in a rectified image, is defined as the difference between the x coordinate of a point in two images. It had a neat relationship from projective geometry: disparity = 1/depth. &lt;a href=&quot;https://stackoverflow.com/questions/7337323/definition-of-a-disparity-map&quot;&gt;This stackoverflow answer&lt;/a&gt; has a few pointers about it. Disparity maps are basically images where each pixel value is the disparity of that point, so it gives you a sense of depth - the further away from the camera, the darker.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt; Yes, in general terms your approach is correct AFAIK. Your description lacks detail, but as you mentioned you can find out how to do each of these pieces in H&amp;amp;Z.&lt;/p&gt;&#xA;" OwnerUserId="95" LastEditorUserId="-1" LastEditDate="2017-05-23T12:37:11.430" LastActivityDate="2013-04-05T12:26:40.877" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1119" PostTypeId="2" ParentId="1089" CreationDate="2013-03-28T16:17:21.460" Score="0" Body="&lt;p&gt;In your particular case, isn't it easiest to just transpose the axes:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Bx =  Az&#xA;By = -Ay&#xA;Bz =  Ax&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Or if you want to write that as a matrix transform:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;B = A * [ [  0,  0,  1  ],&#xA;          [  0, -1,  0  ],&#xA;          [  1,  0,  0  ] ]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="1075" LastActivityDate="2013-03-28T16:17:21.460" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1120" PostTypeId="1" AcceptedAnswerId="1197" CreationDate="2013-03-28T16:42:32.603" Score="4" ViewCount="1778" Body="&lt;p&gt;And if so, what was the highest score so far?&lt;/p&gt;&#xA;&lt;p&gt;Some news articles suggest only parts of tests were aced.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Update since people censored this question and closed it. There was an AI that has taken an IQ test and scored similar to a 4 year old.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://phys.org/news/2015-10-ai-machine-iq-score-young.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://phys.org/news/2015-10-ai-machine-iq-score-young.html&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The AI system which they used is ConceptNet, an open-source project run by the MIT Common Sense Computing Initiative.&#xA;Results: It scored a WPPSI-III VIQ that is average for a four-year-old child, but below average for 5 to 7 year-olds&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h3&gt;Abstract&lt;/h3&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;We administered the Verbal IQ (VIQ) part of the Wechsler Preschool and Primary Scale of Intelligence (WPPSI-III) to the ConceptNet 4 AI system. The test questions (e.g., &amp;quot;Why do we shake hands?&amp;quot;) were translated into ConceptNet 4 inputs using a combination of the simple natural language processing tools that come with ConceptNet together with short Python programs that we wrote. The question answering used a version of ConceptNet based on spectral methods. The ConceptNet system scored a WPPSI-III VIQ that is average for a four-year-old child, but below average for 5 to 7 year-olds. Large variations among subtests indicate potential areas of improvement. In particular, results were strongest for the Vocabulary and Similarities subtests, intermediate for the Information subtest, and lowest for the Comprehension and Word Reasoning subtests. Comprehension is the subtest most strongly associated with common sense. The large variations among subtests and ordinary common sense strongly suggest that the WPPSI-III VIQ results do not show that &amp;quot;ConceptNet has the verbal abilities a four-year-old.&amp;quot; Rather, children's IQ tests offer one objective metric for the evaluation and comparison of AI systems. Also, this work continues previous research on Psychometric AI.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Update. A robot has passed the Japanese college entrance test and has an 80% chance of being accepted. Since it scored more than the average, that would make the IQ &amp;gt; 100, especially since college applicants have an IQ greater than average, and especially since Japanese are smarter than average humans. &lt;a href=&quot;http://gizmodo.com/an-ai-program-in-japan-just-passed-a-college-entrance-e-1742758286&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://gizmodo.com/an-ai-program-in-japan-just-passed-a-college-entrance-e-1742758286&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The Wall Street Journal reports that the program, developed by Japan’s National Institute of Informatics, took a multi-subject college entrance exam and passed with an above-average score of 511 points out of a possible 950. (The national average is 416.) With scores like that, it has an 8 out of 10 chance of being admitted to 441 private institutions in Japan, and 33 national ones.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="1086" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2015-11-17T00:22:02.890" Title="Has a robot ever taken a complete IQ test?" Tags="&lt;artificial-intelligence&gt;" AnswerCount="4" CommentCount="5" FavoriteCount="1" ClosedDate="2015-08-06T07:48:38.020" ContentLicense="CC BY-SA 3.0" />
  <row Id="1121" PostTypeId="2" ParentId="1120" CreationDate="2013-03-28T18:55:58.453" Score="2" Body="&lt;p&gt;To the best of my knowledge no robot has ever been subjected to an IQ test. This is in part because the IQ test is not considered a valid test of intelligence amongst. It was originally developed as a test to determine whether any given child needed special attention in school and was later altered to apply to adults. Since then it has been shown to really only measure awareness of social norms. Some have argued that this awareness is indicative of intelligence but it's not generally accepted. &lt;a href=&quot;http://www.rolfpfeifer.com/&quot; rel=&quot;nofollow&quot;&gt;Dr. Rolf Pfeifer's&lt;/a&gt; book &lt;a href=&quot;https://www.google.com/search?client=ubuntu&amp;amp;channel=fs&amp;amp;q=understanding+intelligence&amp;amp;ie=utf-8&amp;amp;oe=utf-8&quot; rel=&quot;nofollow&quot;&gt;Understanding Intelligence&lt;/a&gt; has a great discussion of this topic in chapter 1.&lt;/p&gt;&#xA;" OwnerUserId="177" LastActivityDate="2013-03-28T18:55:58.453" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1122" PostTypeId="2" ParentId="1113" CreationDate="2013-03-28T19:11:51.763" Score="2" Body="&lt;p&gt;It is most likely kgf-cm, as kg/cm is not a valid unit for torque.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apparently &lt;a href=&quot;https://electronics.stackexchange.com/questions/2749/stall-torque-for-servo-kg-cm&quot;&gt;writing kg/cm when kgf-cm is meant is a common mistake made on datasheets&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to &lt;a href=&quot;http://www.convertunits.com/from/newton+meter/to/kgf+cm&quot; rel=&quot;nofollow noreferrer&quot;&gt;this conversion of kgf-cm to Nm&lt;/a&gt;, 28 kgf-cm of torque is 2.7 Nm, and 150 kgf-cm of torque is 14.7 Nm.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="-1" LastEditDate="2017-04-13T12:33:08.317" LastActivityDate="2013-03-29T21:13:40.743" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1123" PostTypeId="2" ParentId="826" CreationDate="2013-03-28T20:05:45.130" Score="3" Body="&lt;p&gt;The short answer is that I don't think a good standardized motion file format exists and I don't think there are any good generic wysiwyg robot posing tools.  Some level of custom programming is going to be required.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;RE: Standard file formats for robot motion&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/COLLADA&quot; rel=&quot;nofollow&quot;&gt;Collada&lt;/a&gt; is meant as a standardized 3D data interchange file format, and it has support for storing basic animation and physics type information with a model. Support is not consistent across tools though, especially for the animation/physics data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beyond that, it's unlikely you'll find any general use file formats for storing robotic animation.  (Although not 100% comparable, check out the &lt;a href=&quot;http://en.wikipedia.org/wiki/List_of_motion_and_gesture_file_formats&quot; rel=&quot;nofollow&quot;&gt;wikipedia list of motion/gesture file formats&lt;/a&gt;.)  Everything I have seen is specific to the platform and/or proprietary. Consider that the game and CAD industries are orders of magnitude larger and more specific than robotics. They have similar requirements, yet there is no defacto file format.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are interested in a more programmatic view of the data by these proprietary systems though, then looking at the specialized tools used by these industries &lt;em&gt;might&lt;/em&gt; give you some additional options and ideas. Examples:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.autodesk.com/products/motionbuilder/overview&quot; rel=&quot;nofollow&quot;&gt;Autodesk MotionBuilder and API&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.unrealengine.com/en/features/animation/&quot; rel=&quot;nofollow&quot;&gt;The Unreal Animation System&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://help.solidworks.com/2012/English/SolidWorks/SWHelp_List.html?id=15af46b4cbfc4971a5c3a0a6a47245f9#Pg0&quot; rel=&quot;nofollow&quot;&gt;SolidsWorks Motion Studies&lt;/a&gt; &amp;amp; &lt;a href=&quot;http://help.solidworks.com/2013/English/api/sldworksapiprogguide/GettingStarted/SolidWorks_API_Getting_Started_Overview.htm&quot; rel=&quot;nofollow&quot;&gt;SolidWorks API&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The creation, storage, and execution of character animation (often humanoid), in particular, is well represented and very advanced in the game development industry. For a price. I believe most of the larger studios have an entire team dedicated to doing nothing more than converting data from one system to another and feeding it through a production pipeline.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One recurring problem with using game development tools (or creative type 3D tools in general) for robotics is that in games/movies, is that it's usually okay if the animation doesn't model reality exactly. That can cause issues when applied to real world robots.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;RE: Posing Tools&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Robotic simulators (like &lt;a href=&quot;http://www.coppeliarobotics.com/&quot; rel=&quot;nofollow&quot;&gt;Coppelia's V-REP&lt;/a&gt; or even &lt;a href=&quot;http://www.microsoft.com/robotics/&quot; rel=&quot;nofollow&quot;&gt;MS Robotics Studio&lt;/a&gt;) might be of use &lt;em&gt;if&lt;/em&gt; they provided an API/export of some sort &lt;em&gt;and&lt;/em&gt; were able to simulate humanoid type robots. I don't know of any that support a full humanoid model though. Most are just for modelling arms and wheeled robots. Still, perhaps you could model your humanoid movements as an collection of independent arm subsystems? i.e. The left leg is one robotic arm.  If so, then a few more wsyiwyg tools would be open to you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.dsprobotics.com&quot; rel=&quot;nofollow&quot;&gt;Flowstone&lt;/a&gt; is another visual tool that could be used for posing, but probably not the wysiwyg that you had in mind.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you don't need WYSIWYG and are open to some programming, you might want to check out &lt;a href=&quot;https://code.google.com/p/arbotix/wiki/PyPose&quot; rel=&quot;nofollow&quot;&gt;PyPose&lt;/a&gt; and &lt;a href=&quot;https://code.google.com/p/arbotix/wiki/NukeIntro&quot; rel=&quot;nofollow&quot;&gt;Nuke&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similarly, but requiring more advanced programming, various physics engines might be of interest for taking in all the inputs (3D models and associated parameters) and then providing movement results by applying forces and inverse kinematics. Examples include &lt;a href=&quot;http://ode.org/ode-latest-userguide.html#sec_7_3_0&quot; rel=&quot;nofollow&quot;&gt;ODE&lt;/a&gt; and &lt;a href=&quot;http://bulletphysics.org/Bullet/phpBB3/viewtopic.php?f=9&amp;amp;t=5341&amp;amp;view=previous&quot; rel=&quot;nofollow&quot;&gt;Bullet physics&lt;/a&gt;. A similar programmatic slanted option would be to use ROS. I've seen a &lt;a href=&quot;http://www.ros.org/wiki/humanoid_walk&quot; rel=&quot;nofollow&quot;&gt;few projects&lt;/a&gt; and &lt;a href=&quot;http://www.informatik.uni-freiburg.de/~hornunga/pub/hornung12roscon.pdf&quot; rel=&quot;nofollow&quot;&gt;notes&lt;/a&gt; regarding potential ROS support for humanoid type motions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All that said... although difficult to learn, I still think Blender3D has &lt;em&gt;potential&lt;/em&gt; to be one of the better all around options for advanced hobbiest type robotics posing and motion work, particularly due to it's tight integration with the Python programming language.  Someone already pointed out the &lt;a href=&quot;http://wiki.blender.org/index.php/Community%3aScience/Robotics&quot; rel=&quot;nofollow&quot;&gt;Blender Robotics wiki&lt;/a&gt; in the comments. You should also review &lt;a href=&quot;http://www.youtube.com/watch?v=YMA0cqFAekY&quot; rel=&quot;nofollow&quot;&gt;Grantlo321's YouTube video&lt;/a&gt; using blender to control servos playing a piano, as well as the &lt;a href=&quot;http://justindailey.blogspot.com/2011/03/real-time-controlled-robotic-arm.html&quot; rel=&quot;nofollow&quot;&gt;blog post by Justin Daily&lt;/a&gt; where he describes using Blender/Python for servo control.  I agree that Blender3D is hard to learn, but that is likely going to be true with almost any 3D wysiwyg type software unless it's focus is very narrow.&lt;/p&gt;&#xA;" OwnerUserId="167" LastEditorUserId="167" LastEditDate="2013-03-28T20:19:07.937" LastActivityDate="2013-03-28T20:19:07.937" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1124" PostTypeId="2" ParentId="1047" CreationDate="2013-03-28T23:15:42.677" Score="3" Body="&lt;p&gt;If you are looking for a source to get an intuitive feeling for what the Kalman Filter is actually doing I would suggest going through lesson 2 of Udacity's Artificial Intelligence for Robotics course found here:&#xA;&lt;a href=&quot;https://www.udacity.com/course/cs373&quot; rel=&quot;nofollow&quot;&gt;https://www.udacity.com/course/cs373&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The course is free and it has video lectures and simple code examples. The explanation given is a little simplistic but it does help to build an intuition for how and why the filter works.&lt;/p&gt;&#xA;" OwnerUserId="983" LastActivityDate="2013-03-28T23:15:42.677" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1125" PostTypeId="2" ParentId="1032" CreationDate="2013-03-28T23:31:01.950" Score="2" Body="&lt;p&gt;In industry, this type of control is still generally referred to as PID control and I've seen many applications of it. It's main benefit stems from the fact that it removes the &quot;derivative kick&quot; caused by an abrupt change in set point and thus is useful for applications where set point tracking is most important (rather than fast disturbance rejection). See &lt;a href=&quot;http://www.controlguru.com/wp/p76.html&quot; rel=&quot;nofollow&quot;&gt;http://www.controlguru.com/wp/p76.html&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Image showing difference in derivative kick of PID and PIV&#xA;&lt;a href=&quot;http://controlguru.com/wp-content/uploads/2015/08/pidkickbig.jpg&quot; rel=&quot;nofollow&quot;&gt;http://controlguru.com/wp-content/uploads/2015/08/pidkickbig.jpg&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="983" LastEditorUserId="983" LastEditDate="2016-09-01T19:23:33.303" LastActivityDate="2016-09-01T19:23:33.303" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1126" PostTypeId="2" ParentId="1100" CreationDate="2013-03-29T04:22:35.040" Score="3" Body="&lt;p&gt;The problem is, there is no set standard definition on what a robot is. In our perspective, a robot should be like &quot;Honda's ASIMO.&quot; Which is not the case. It is much more complex. Robots can be controlled by humans and not controlled by humans, either definition is perfectly acceptable.&lt;/p&gt;&#xA;" OwnerUserId="1089" LastActivityDate="2013-03-29T04:22:35.040" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1127" PostTypeId="2" ParentId="1120" CreationDate="2013-03-29T05:49:30.263" Score="4" Body="&lt;p&gt;Well, there have been many AI programs written specifically to ace IQ tests. Like &lt;a href=&quot;http://www.csse.monash.edu.au/~dld/Publications/2003/Sanghi+Dowe_IQ_Paper_JIntConfCogSci2003.pdf&quot; rel=&quot;nofollow&quot;&gt;this one&lt;/a&gt; and &lt;a href=&quot;http://www.futurepundit.com/archives/008514.html&quot; rel=&quot;nofollow&quot;&gt;this one&lt;/a&gt;. I don't think there have been any &lt;em&gt;robots&lt;/em&gt; (computer programs which control mechanical components) which have been administered an IQ test, but, TBH, you don't &lt;em&gt;need&lt;/em&gt; a robot for this -- just a program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Update: looks like I'm wrong, &lt;a href=&quot;http://users.dsic.upv.es/~flip/papers/IQnotuniversal.pdf&quot; rel=&quot;nofollow&quot;&gt;this 2012 paper&lt;/a&gt; says (I've only skimmed) that while AI may be able to be written to solve certain types of IQ problems, others are beyond our current reach.&lt;/p&gt;&#xA;" OwnerUserId="126" LastEditorUserId="126" LastEditDate="2013-04-01T05:49:14.793" LastActivityDate="2013-04-01T05:49:14.793" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="1128" PostTypeId="1" CreationDate="2013-03-29T08:26:32.630" Score="1" ViewCount="95" Body="&lt;p&gt;From an old dust buster I've got this electro motor, the included battery pack and the charger:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/hVLhe.jpg&quot; alt=&quot;enter image description here&quot;&gt;&#xA;&lt;img src=&quot;https://i.stack.imgur.com/0nFln.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I ripped everything apart (the dust buster was broken) and the motor still works. After playing around with it for a while and letting it lying around for about two weeks it suddenly revs a lot slower. I supposed the battery pack was drained so I hooked up the battery pack to the charger and let it charge for a night. Unfortunately the motor still turns very slow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since I want to use this motor for my first home robotics project (making a kite fly with my computer), off I went to the local electronics store where they measured the charger to give 16V (even though it says 21V) and the battery pack to give about 5V. I then hooked up the motor directly to the charger, but unfortunately it doesn't even move an inch then.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So now I wonder:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Why doesn't the motor spin at all when hooking it up to the charger? (Could that be because the 250mA is too low?)&lt;/li&gt;&#xA;&lt;li&gt;Why doesn't the battery pack charge at all? (this bothers me the most!)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;All tips are welcome!&lt;/p&gt;&#xA;" OwnerUserId="1050" LastEditorUserId="1050" LastEditDate="2013-03-29T08:33:37.157" LastActivityDate="2013-03-30T01:08:47.510" Title="Why is this electro motor going slower?" Tags="&lt;motor&gt;&lt;battery&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1129" PostTypeId="2" ParentId="1128" CreationDate="2013-03-29T10:55:28.780" Score="3" Body="&lt;p&gt;250mA states the maximum output current to drive the load. So check what the current rating of the 5V regulator is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Check whether there is a voltage drop before reaching the motor. It might be that the motor is not spinning because of insufficient supply.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Change the adapter you are using. If it is marked 21V, the output from adapter will be around 20.5V to 21.5V.&lt;/p&gt;&#xA;" OwnerUserId="1092" LastEditorUserId="131" LastEditDate="2013-03-30T01:08:47.510" LastActivityDate="2013-03-30T01:08:47.510" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1130" PostTypeId="1" CreationDate="2013-03-29T15:29:11.317" Score="3" ViewCount="255" Body="&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/Wl3uH.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am trying to find a joint like these for a robot I'm building. It is often called a swivel joint or a universal joint, but with a modified spider. I can't find one anywhere and would prefer not to make it. Searching for 'universal joint' returns the standard automotive type. Any help would be appreciated&lt;/p&gt;&#xA;" OwnerUserId="1094" LastEditorUserId="37" LastEditDate="2017-06-13T11:18:24.023" LastActivityDate="2017-06-13T11:18:24.023" Title="What is the name of this mechanical linkage?" Tags="&lt;joint&gt;&lt;identification&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1131" PostTypeId="2" ParentId="1128" CreationDate="2013-03-29T21:33:24.053" Score="2" Body="&lt;p&gt;If your charger is running at 16V instead of the 21V it's supposed to be operating at, then that is your problem.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Why your charger won't run the motor&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Your charger should be fairly underpowered for running the motor.  Most batteries strong enough to power motors are not meant to be charged as fast as they can discharge.  This can be for several reasons, including:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Safety: some batteries will explode if charged with too much current&lt;/li&gt;&#xA;&lt;li&gt;Longevity: some batteries will degrade if charged beyond what the chemistry can handle&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;A power supply capable of running the motor would be damaging (if not dangerous) to connect directly to the battery.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Other things to check:&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;It's possible that your batteries are running near the end of their lifetime (they have a finite number of cycles).  When charged overnight and unplugged, are their voltages below what they should be?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It could also be that the problem is mechanical.  Has debris been introduced into the motor assembly, or is it poorly lubricated?  &lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2013-03-29T21:33:24.053" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1135" PostTypeId="2" ParentId="975" CreationDate="2013-03-30T01:30:39.740" Score="-2" Body="&lt;p&gt;In chemistry, you will learn the composition of matter there they have thought you about properties of certain metals/non-metals. They have certain limits, such as melting point/freezing point.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Temperature does matter in electronics. When you overclock your computer, you need liquid nitrogen to cool down your chip. Same is true for any other device. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The electronics that go into space does not only face this problem but also they must be cautious about radiations which can corrupt data. Thus, usually rovers carry additional chips/batteries for backup. The data they collect there is of great importance.&lt;/p&gt;&#xA;" OwnerUserId="1089" LastActivityDate="2013-03-30T01:30:39.740" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1137" PostTypeId="2" ParentId="975" CreationDate="2013-03-30T07:56:51.853" Score="2" Body="&lt;p&gt;I would put forward three main points for the temperature sensitivity of electronics, electronic components and mechanical parts: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;All batteries are quite &lt;a href=&quot;http://chemistry.about.com/od/howthingsworkfaqs/f/coldbattery.htm&quot; rel=&quot;nofollow&quot;&gt;sensitive&lt;/a&gt; when it comes to temperature. Chemical reaction rates are reduced, and leakage current is increased.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Silicon chips usually don't have a problem with low temperatures. What does is the packaging and the PCB substrates and bonds. And even here the actual problem is not the low temperature, but the temperature range. The reason for this is that the materials have different thermal properties, like thermal conductivity and expansion. The packaged chips as well as the bonds with the PCB will generate mechanical stress which increases the chances of micro-fractures in the conductive materials. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Moving mechanical parts like motors and gears often need lubricants to work. The mechanical properties of those lubricants are very temperature sensitive. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;As far as I know the lowest you can go with primary batteries is something like -50C. Secondaries are even worse. So there is really no other option than to insulate and heat. The electronics you can make work at low temperatures, by using PCB materials which have a similar expansion to silicon, and directly mount the silicon chips onto the substrate without the classical chip packaging. &lt;/p&gt;&#xA;" OwnerUserId="127" LastEditorUserId="127" LastEditDate="2013-03-30T08:04:08.853" LastActivityDate="2013-03-30T08:04:08.853" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1138" PostTypeId="2" ParentId="975" CreationDate="2013-03-30T13:27:29.337" Score="2" Body="&lt;p&gt;One factor in this that hasn't been mentioned in the other questions is that different materials change their volumes in different ways in response to temperature fluctuations.  This is the concept behind bimetallic strips in thermostats, why pipes burst when frozen, and why your food gets &quot;freezer burned&quot;.  So, although semiconductors may be fairly resilient to cold temperatures, mechanical parts with a variety of materials (different alloys, different lubricants) will be less so.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To have a mechanical part that works at an extreme temperature (like -100C), presumably it would need to be fabricated at that temperature, integrated into the main component at that temperature, and kept cold until it reached space.  &lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2013-04-01T19:22:00.160" LastActivityDate="2013-04-01T19:22:00.160" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1139" PostTypeId="2" ParentId="1072" CreationDate="2013-03-30T20:41:47.360" Score="3" Body="&lt;p&gt;I read a magazine article many months ago about an automated system of power generation for isolated areas like disaster relief and such where a kite was used instead of a propeller driven wind turbine.  The write-up was not particularly technical but there was a picture of the ground unit and it looked like a winch with a boom like a fishing rod or something in that vein.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I understood it would allow the kite to pull away in the wind and generate power by running the winch motor as a generator and then it would control the kite to either loose drag or swing broadside to the wind so it could be reeled in for much less power draw, to be repeated while the wind lasted.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So it does seem possible to at least partly control kite operation via automation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt;&lt;br&gt;&#xA;&lt;em&gt;I found a company &lt;a href=&quot;http://www.enerkite.de/en/&quot; rel=&quot;nofollow&quot;&gt;EnerKite&lt;/a&gt; that makes use of a controlled kite for electricity generation.  It is self launching by swinging it around on a extensible pole, pretty slick.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="1098" LastEditorUserId="9281" LastEditDate="2015-10-29T17:01:39.067" LastActivityDate="2015-10-29T17:01:39.067" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1140" PostTypeId="2" ParentId="1130" CreationDate="2013-03-31T03:20:27.640" Score="2" Body="&lt;p&gt;Another name is pin and block - &lt;a href=&quot;http://www.mcmaster.com/#&quot; rel=&quot;nofollow&quot;&gt;mcmaster carr&lt;/a&gt; is a go to place for many different fasteners, and mechanical doo-dads&lt;/p&gt;&#xA;" OwnerUserId="93" LastActivityDate="2013-03-31T03:20:27.640" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1141" PostTypeId="2" ParentId="1130" CreationDate="2013-03-31T03:25:46.533" Score="2" Body="&lt;p&gt;The closest I can find are &lt;a href=&quot;http://www.1mta.com/products/386/&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt; and &lt;a href=&quot;http://www.c-rmfg.com/cnc-machining-aluminum-swivwl-joint.html&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt;: &quot;Swivel Joint&quot;.&lt;/p&gt;&#xA;" OwnerUserId="1100" LastEditorUserId="350" LastEditDate="2013-04-01T19:17:17.360" LastActivityDate="2013-04-01T19:17:17.360" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1142" PostTypeId="2" ParentId="1113" CreationDate="2013-04-01T16:31:02.343" Score="1" Body="&lt;p&gt;The motor they listed apparently has 1.548 kg·cm of torque at 4.8 V.&#xA;(As Ian pointed out, on this website -- like too many &lt;a href=&quot;http://robosapiensindia.com/robomart/index.php?page=shop.product_details&amp;amp;flypage=flypage.tpl&amp;amp;product_id=238&amp;amp;category_id=42&amp;amp;option=com_virtuemart&amp;amp;Itemid=64&amp;amp;vmcchk=1&amp;amp;Itemid=64&quot; rel=&quot;nofollow&quot;&gt;other websites&lt;/a&gt; -- &quot;kg·cm&quot; is often misspelled as &quot;Kg/cm&quot;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is apparently a NEMA 17 motor.&#xA;From the photo, it looks about half as long as a typical NEMA 17 motor,&#xA;so I'm not surprised it has about half the torque of a typical NEMA 17 motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A torque of 1.548 kg·cm is more than adequate for many robots --&#xA;&lt;a href=&quot;http://reprap.org/wiki/stepper_motor&quot; rel=&quot;nofollow&quot;&gt;1.4 kg·cm of torque is adequate&lt;/a&gt; for axis motors on a RepRap.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;They use this unit only for the stepper motors and not for the DC&#xA;  motors&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Huh? &lt;s&gt;Every motor&lt;/s&gt; &lt;a href=&quot;http://www.nex-robotics.com/motors-and-accessories.html&quot; rel=&quot;nofollow&quot;&gt;Several motors listed on that site&lt;/a&gt;, both stepper and DC motor ( &lt;a href=&quot;http://www.nex-robotics.com/products/motors-and-accessories/75-rpm-dual-shaft-plastic-gear-motor.html&quot; rel=&quot;nofollow&quot;&gt;a&lt;/a&gt; &lt;a href=&quot;http://www.nex-robotics.com/products/motors-and-accessories/300-rpm-centre-shaft-economy-series-dc-motor.html&quot; rel=&quot;nofollow&quot;&gt;b&lt;/a&gt; ), are rated using the &quot;Kg/cm&quot; unit, which in every case is a misspelling of &quot;kg·cm&quot;.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;0.222 ... its absurdly low again.Most DC motors on the website&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The &quot;0.222 kg·cm&quot; applies when driven at 0.4 V. That's a small fraction of its rated voltage, which is 6 V where the motor gives 1.869 kg·cm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as I can tell, all the DC motors on that website include a gear box, which multiplies the torque.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is unfair to compare motors by comparing only the torque at the output of a torque-multiplying gear box of one motor driven at its full rated voltage, to the torque of some other motor without a gearbox and when driven at a small fraction of its rated voltage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, I have to laugh when this website calls this a &quot;High torque&quot; motor when it is almost the lowest-torque NEMA 17 motor I've ever seen.&#xA;It reminds me of the &quot;Schnell-Bahn&quot; (literally &quot;fast train&quot;), which are the slowest trains still operating in Germany.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT:&#xA;I shouldn't have said &quot;every motor&quot;; most of the motors are rated in &quot;Kg-cm&quot; or &quot;kg-cm&quot;, which is close enough to &quot;kg·cm&quot;.&lt;/p&gt;&#xA;" OwnerUserId="187" LastEditorUserId="187" LastEditDate="2013-04-02T04:52:10.860" LastActivityDate="2013-04-02T04:52:10.860" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1143" PostTypeId="1" AcceptedAnswerId="1144" CreationDate="2013-04-02T00:22:47.170" Score="2" ViewCount="361" Body="&lt;p&gt;This is a follow-up to this question:  &lt;a href=&quot;https://robotics.stackexchange.com/questions/1064/prototyping-a-device-with-25-100-small-dc-3-0v-motors-is-arduino-a-good-fit&quot;&gt;Prototyping a device with 25-100 small DC 3.0V motors, is Arduino a good fit?&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've decided based on the answer that sending the control signals through multiple TLC5947 chips, then sending the PWM signal to the motors is the best way to go.  What I need to know is how to turn the PWM signals into something of the required power, since the TLC5947's won't be able to drive the motors by themselves.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm guessing an amplifier is what I'll need to make, but what's the best way to boost that many signals?&lt;/p&gt;&#xA;" OwnerUserId="1031" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2013-04-02T08:04:12.563" Title="How do I interface a TLC5947 with small motors?" Tags="&lt;motor&gt;&lt;power&gt;&lt;pwm&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1144" PostTypeId="2" ParentId="1143" CreationDate="2013-04-02T07:37:55.420" Score="2" Body="&lt;p&gt;The &lt;a href=&quot;https://robotics.stackexchange.com/a/1109/478&quot;&gt;accepted answer&lt;/a&gt; to your previous question presents several ways of developing enough drive for the vibrating motor, in its section called “Converting PWM signals into something that can drive a motor”.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of the most direct ways is using one ULN2803 device per 8 motors, or one ULN2003 per 7 motors.  In some packages these devices support up to 500 mA/channel when properly heatsinked; other packages allow less but should have no problem with the 85 mA start current and 75 mA run current of the vibration motor (&lt;a href=&quot;http://www.cutedigi.com/robotics/vibration-motor.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;1&lt;/a&gt;, &lt;a href=&quot;http://www.cutedigi.com/pub/Robot/310-101_datasheet.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;2&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An alternative is to substitute LED drivers with higher drive capability in place of the TLC5947. For example, the 16-channel &lt;a href=&quot;http://www.toshiba-components.com/products/DriverLSI/LEDDrivers.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Toshiba TC62D722&lt;/a&gt; allows up to 90mA/channel.  (I don't know what the availability of these parts is.)  Like the TI  TLC5947, the TC62D722 has per-channel PWM settings.  Both parts use an external current-limit-setting resistor and the TC62D722 also has an 8-bit (256 level) output current gain control.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that TLC5947 channels can be paralleled.  On page 7 the &lt;a href=&quot;http://www.ti.com/lit/ds/sbvs114a/sbvs114a.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;data sheet&lt;/a&gt; says multiple outputs can be tied together to increase the constant current capability.  Thus you could use each TLC5947 to drive eight 90mA devices; or could use a 25mA-setting resistor and parallel 3 outputs to get 75mA.  Anyhow, &lt;em&gt;n&lt;/em&gt; TLC5947's, daisy-chained together, would drive &lt;em&gt;n&lt;/em&gt;·24/3 = 8·&lt;em&gt;n&lt;/em&gt; vibration motors.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have motors on hand, you could use a 12V power supply in series with a 166 ohm resistor (or 150 or 200 ohms for other testing) to run about 60mA through a motor and see if it starts and runs satisfactorily.  If so, you might be able to use two TLC5947 channels instead of three per motor.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Drivers like ULN2003 or ULN2803 have internal clamp diodes so they can drive inductive loads without needing such diodes added on.  As an LED driver, the TLC5947 doesn't include clamp diodes for high-going voltage excursions since LED's are not much of an inductive load.  (The output diagram on page 8 of specs shows a diode from ground to OUT_n for OUT0 through OUT23, which would clamp negative-going voltages, but no rating is shown for the diode.)  You probably would need to add one clamp diode per motor.  However, it certainly is possible that you could run motor tests and find that the motor transients don't exceed the 33 volt output ratings of the TLC5947 – whenever you test it on the bench.&lt;/p&gt;&#xA;" OwnerUserId="478" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2013-04-02T08:04:12.563" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1145" PostTypeId="1" AcceptedAnswerId="1147" CreationDate="2013-04-02T07:50:25.177" Score="8" ViewCount="1355" Body="&lt;p&gt;I'm trying to handle food grains like rice, wheat in an automated way (to cook simple dishes). For this I have to transfer grain from a larger container to a weighing scale. I know I can use solenoid valves for liquids but all solid handling valves seem to be too big (gate valves etc) and for larger applications. Is there any better way to do this ? &lt;/p&gt;&#xA;" OwnerUserId="1041" LastActivityDate="2013-04-18T12:09:10.237" Title="What would be the best way to handle food grains?" Tags="&lt;automatic&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1146" PostTypeId="2" ParentId="1145" CreationDate="2013-04-02T12:19:18.413" Score="1" Body="&lt;p&gt;Mechanism could be similar to bubble-gum machine. Container fills up the cup (for which you know the mass of grains). With motor you need to rotate shaft with few cups from filling to spilling :) This would give you the resolution of mass that fills the cup. From there you can transfer that grains with conveyor to wherever you need.&lt;/p&gt;&#xA;" OwnerUserId="973" LastActivityDate="2013-04-02T12:19:18.413" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1147" PostTypeId="2" ParentId="1145" CreationDate="2013-04-02T16:52:10.473" Score="6" Body="&lt;p&gt;I suggest experimenting with a &lt;a href=&quot;http://www.ptonline.com/kc/articles/focus-on-material-handling/cone&quot; rel=&quot;nofollow noreferrer&quot;&gt;rotating cone&lt;/a&gt; feeder.  If you make the rotation-speed and the cone's axis-angle adjustable, users could set it differently for different materials.  The cone should be made easily removable, to allow easy cleaning and perhaps substitution of shorter, wider, or longer cones for different materials.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.ptonline.com/kc/articles/focus-on-material-handling/cone&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KqsYp.jpg&quot; alt=&quot;Rotating Cone Feeder&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the diagram, the axis of the cone is horizontal.  The  “natural angle of repose” referred to in the text is material-dependent and rotation-speed dependent.  Up to some point, faster rotation delivers material faster.  Some cone systems periodically reverse the direction of rotation.  If the axis is horizontal, some given amount of material remains in the cone when it stops rotating, which might or might not matter in your process.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For other ideas, also see the &lt;a href=&quot;http://encyclopedia.che.engin.umich.edu/Pages/MaterialsHandling/Mixers/Mixers.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mixers&lt;/a&gt; page in the University of Michigan  “Encyclopedia of Chemical Engineering Equipment”, and see the  “Funnel Flow” section near the middle of the &lt;a href=&quot;http://encyclopedia.che.engin.umich.edu/Pages/MaterialsHandling/Hoppers/Hoppers.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Hoppers&lt;/a&gt; page.  As seen in the video there, the fairly coarse mixture in the hopper stops running a couple of times, until the mechanism is shaken back and forth.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A vibrating-screen device is shown in &lt;a href=&quot;http://www.youtube.com/watch?v=IZaLZApoG6I&quot; rel=&quot;nofollow noreferrer&quot;&gt;Vibrating Sieve Machine&lt;/a&gt;, Murat Model IV.  A large rotating spiral brush is shown in &lt;a href=&quot;http://www.youtube.com/watch?v=dwgf0DAfkxM&quot; rel=&quot;nofollow noreferrer&quot;&gt;AyrKing Breader/Blender/Sifter&lt;/a&gt;. An old Gyro-sifter machine appears in &lt;a href=&quot;http://www.youtube.com/watch?v=UW_Wx1slexI&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Gyro-Sifter Machine! Odd&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="478" LastEditorUserId="37" LastEditDate="2013-04-18T12:09:10.237" LastActivityDate="2013-04-18T12:09:10.237" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1148" PostTypeId="1" CreationDate="2013-04-02T23:13:52.470" Score="3" ViewCount="530" Body="&lt;p&gt;The dynamic programming algorithm refers to the &lt;a href=&quot;http://en.wikipedia.org/wiki/Bellman_equation&quot; rel=&quot;nofollow noreferrer&quot;&gt;Bellman equation&lt;/a&gt;. An open-loop control decides movement at the initial point while a closed-loop control decides control during the movement. Now most robotic application looks like closed-loop control: in every point, it checks how it is doing with respect to some reward function, this is my thinking. Now most participants in threads such as &lt;a href=&quot;https://robotics.stackexchange.com/questions/128/how-mature-is-real-time-programming-in-robotics&quot;&gt;How mature is real-time programming in robotics?&lt;/a&gt; do not differentiate their scope, perhaps they haven't thought about it. Anyway, I am interested to know:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;How is dynamic programming used in robotics? Is there any research about DP usage in robotics?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="640" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2018-07-11T15:50:38.863" Title="Dynamic programming algorithm aka Bellman equation in Robotics?" Tags="&lt;research&gt;&lt;dynamic-programming&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1149" PostTypeId="2" ParentId="1148" CreationDate="2013-04-02T23:35:12.210" Score="1" Body="&lt;p&gt;I won't answer directly how Bellman equation is used in robotics but DP is used in many areas, see the below. Even though we have a dynamic system with velocity/acceleration, we can still use linear-approximation like linear-programming algorithms &lt;a href=&quot;http://www.ensta-bretagne.fr/jaulin/robotetas.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. I provide below some material and lectures about Dynamic programming and robotics. This is pretty interdisciplinary area so hard to find concise description.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Areas&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;path-planning&lt;/li&gt;&#xA;&lt;li&gt;vision such as stereo-vision&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Constraint_satisfaction_problem&quot; rel=&quot;nofollow noreferrer&quot;&gt;CSP&lt;/a&gt; and VCSP problems (see the cognitive robotics below)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Alert about terminology!&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The term &lt;em&gt;&amp;quot;dynamic programming&amp;quot;&lt;/em&gt; is a special term referring to special class of mathematical problems. The term &lt;em&gt;&amp;quot;dynamic&amp;quot;&lt;/em&gt; system in physics refers to problems in continuum mechanics where objects are not in rest or in constant motion but they can accelerate. Then again &lt;a href=&quot;http://en.wikipedia.org/wiki/Statics&quot; rel=&quot;nofollow noreferrer&quot;&gt;Statics&lt;/a&gt; considers problems in stable equilibrium.&lt;/p&gt;&#xA;&lt;p&gt;The term &lt;em&gt;&amp;quot;dynamic programming&amp;quot;&lt;/em&gt; is programming for historical reasons but the basic idea is to break the large problem into small problems. It has analogues to fields such as Economics (for example sub-game-perfect equilibrium in game-theory).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Material&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Path-planning&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.cc.gatech.edu/fac/Chris.Atkeson/legs/xmorimo.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Minimax Diﬀerential Dynamic Programming&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.cs.ubc.ca/%7Emitchell/Papers/publishedCDC08.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Efﬁcient Dynamic Programming for Optimal Multi-Location Robot Rendezvous&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://ieeexplore.ieee.org/xpl/login.jsp?tp=&amp;amp;arnumber=1104317&amp;amp;url=http%3A%2F%2Fieeexplore.ieee.org%2Fxpls%2Fabs_all.jsp%3Farnumber%3D1104317&quot; rel=&quot;nofollow noreferrer&quot;&gt;A dynamic programming approach to trajectory planning of robotic manipulators&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://ramp.ensc.sfu.ca/fmmtutorial/slides/mitchell.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Dynamic Programming Algorithms for Planning and Robotics in Continuous Domains and the Hamilton-Jacobi Equation&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;Vision, Stereo vision and Dynamic programming&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.cipprs.org/papers/VI/VI1999/pp117-124-Gonzalez-et-al-1999.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Dynamic programming stereo vision algorithm for robotic applications&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://ieeexplore.ieee.org/xpl/login.jsp?tp=&amp;amp;arnumber=4767639&amp;amp;url=http%3A%2F%2Fieeexplore.ieee.org%2Fxpls%2Fabs_all.jsp%3Farnumber%3D4767639&quot; rel=&quot;nofollow noreferrer&quot;&gt;Stereo by Intra- and Inter-Scanline Search Using Dynamic Programming&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://search.mit.edu/search?site=ocw&amp;amp;client=mit&amp;amp;getfields=*&amp;amp;output=xml_no_dtd&amp;amp;proxystylesheet=http%3A%2F%2Focw.mit.edu%2Fsearch%2Fgoogle-ocw.xsl&amp;amp;proxyreload=1&amp;amp;as_dt=i&amp;amp;oe=utf-8&amp;amp;departmentName=web&amp;amp;courseName=&amp;amp;q=robotics+dynamic+programming&amp;amp;btnG.x=-595&amp;amp;btnG.y=-267&quot; rel=&quot;nofollow noreferrer&quot;&gt;Lectures&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Underactuated robotics in MIT &lt;a href=&quot;http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-832-underactuated-robotics-spring-2009/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;&#xA;-- this lecture &lt;a href=&quot;http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-832-underactuated-robotics-spring-2009/video-lectures/lecture-5-numerical-optimal-control-dynamic-programming/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;&#xA;about DP&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Cognitive robotics has some tasks about DP &lt;a href=&quot;http://ocw.mit.edu/courses/aeronautics-and-astronautics/16-412j-cognitive-robotics-spring-2005/assignments/ps2.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="640" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2018-07-11T15:50:38.863" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="1150" PostTypeId="5" CreationDate="2013-04-02T23:59:30.967" Score="0" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Dynamic_programming#History&quot; rel=&quot;nofollow noreferrer&quot;&gt;Dynamic Programming&lt;/a&gt; (DP) is a recursive optimization technique. DP breaks down a problem to its most basic sub problems, which have trivially optimal solutions. These base solutions are used to construct optimal solutions to sub problems of strictly increasing size until the optimal solution to the original problem is found.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The advantage of Dynamic Programming is its computationally efficiency compared to brute force methods of optimization and it has a provably correct mathematical architecture.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Dynamic Programming can only be applied when the sub problems of an initial problem can be nested recursively in strictly decreasing size.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fun Fact: The term 'Programming' in Dynamic Programming is not directly related to &lt;em&gt;computer programming&lt;/em&gt;. In the early 20th century, when concepts such as Dynamic Programming and Linear Programming were first introduced, the term 'programming' was more or less synonymous with 'optimization'.&lt;/p&gt;&#xA;" OwnerUserId="20709" LastEditorUserId="20709" LastEditDate="2018-07-26T17:05:44.803" LastActivityDate="2018-07-26T17:05:44.803" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="1151" PostTypeId="4" CreationDate="2013-04-02T23:59:30.967" Score="0" Body="An optimization technique where the optimal solutions to sub problems are used to construct an optimal solution to the original problem." OwnerUserId="20709" LastEditorUserId="20709" LastEditDate="2018-07-27T02:30:34.290" LastActivityDate="2018-07-27T02:30:34.290" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="1152" PostTypeId="2" ParentId="975" CreationDate="2013-04-03T00:05:05.480" Score="3" Body="&lt;p&gt;Because there is not enough research and development done in the manufacturing process of electronic components in low temperatures. And the probes must be reliable.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can not make parts in i.e. 250'C and expect them to work in -100'C because for example a chip has silicon parts as well as tungsten parts. These two have different temperature versus extension characteristics, so the parts would simply fall apart.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In low temperatures you can't use tin for soldering &lt;a href=&quot;http://en.wikipedia.org/wiki/Tin_pest&quot; rel=&quot;nofollow&quot; title=&quot;see tin pest&quot;&gt;see tin pest&lt;/a&gt;.  &lt;/p&gt;&#xA;" OwnerUserId="1114" LastActivityDate="2013-04-03T00:05:05.480" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1153" PostTypeId="1" CreationDate="2013-04-03T00:16:19.533" Score="12" ViewCount="9337" Body="&lt;p&gt;FPGA has good points such as a lot of IO points but then again you need to think things on very low level with flip-flops and pioneer on areas where things are not yet mature -- for example see this question &lt;a href=&quot;https://electronics.stackexchange.com/questions/3107/looking-for-open-source-fpga-hardware-and-dev-tools&quot;&gt;here&lt;/a&gt; about development-tools on FPGAs -- this is my understanding currently! Now FPGA has been used to create excellent dexterity in robotic hands like &lt;a href=&quot;http://www.youtube.com/watch?v=6rhH4YlObkM&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. Now some people market FPGA for fast prototyping and &lt;em&gt;&quot;forward looking&quot;&lt;/em&gt; designs like &lt;a href=&quot;http://www.rtcmagazine.com/articles/view/101763&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;, I don't fully understand them: if you don't need a lot of IO points for things such as sensors, why to choose FPGA for a robot? So&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;When should FPGA be chosen for a project in robotics?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="640" LastEditorUserId="-1" LastEditDate="2017-04-13T12:33:08.317" LastActivityDate="2013-04-07T09:46:04.990" Title="When should FPGAs be used in Robotics?" Tags="&lt;design&gt;&lt;research&gt;&lt;logic-control&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="13" ContentLicense="CC BY-SA 3.0" />
  <row Id="1154" PostTypeId="2" ParentId="1100" CreationDate="2013-04-03T00:21:39.563" Score="1" Body="&lt;p&gt;The definition of &lt;code&gt;robot&lt;/code&gt; is as follows:  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;&quot;A machine built to carry out some complex task or group of tasks, especially one which can be programmed&quot;&lt;/em&gt;&lt;br&gt;&#xA;&lt;a href=&quot;http://en.wiktionary.org/wiki/robot&quot; rel=&quot;nofollow&quot;&gt;wiktionary&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So a robot is a tool which can be programmed. The KUKA robot fits in this definition. But a hammer can not be programmed, so a hammer is not a robot.&lt;/p&gt;&#xA;" OwnerUserId="1114" LastActivityDate="2013-04-03T00:21:39.563" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1155" PostTypeId="2" ParentId="975" CreationDate="2013-04-03T12:08:58.557" Score="2" Body="&lt;p&gt;I would suggest that the key reason is reliability - once a probe has been launched into space, it &lt;strong&gt;HAS&lt;/strong&gt; to work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As such, it is a lot safer to heat up a known, reliable, material that has been subject to extensive testing, than it is to &quot;invent&quot; a new material that cannot be fully tested on Earth.&lt;/p&gt;&#xA;" OwnerUserId="134" LastActivityDate="2013-04-03T12:08:58.557" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1156" PostTypeId="2" ParentId="1153" CreationDate="2013-04-03T13:05:08.557" Score="4" Body="&lt;p&gt;I'm not sure what in the linked question about development tools makes you think that they are not mature. It is true that most of them are proprietary and not open source. But I thought that the tools were quite mature even back when that question was asked three years ago. Today &lt;a href=&quot;http://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/design-tools.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Xilinx&lt;/a&gt;, &lt;a href=&quot;http://www.altera.com/literature/po/ss_quartussevswe.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Altera&lt;/a&gt;, and &lt;a href=&quot;http://www.latticesemi.com/products/designsoftware/diamond/downloads.cfm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Lattice&lt;/a&gt; all have freely available development environments that run on Windows and Linux with 32 and 64-bit support. If you insist on open source &lt;a href=&quot;http://iverilog.icarus.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Icarus Verilog&lt;/a&gt; can do quite a bit. But I'd personally stick with the vendor specific tools.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;FPGA's are more than just a bunch of configurable flip flops. Consider the &lt;a href=&quot;http://www.alterawiki.com/wiki/Nios&quot; rel=&quot;nofollow noreferrer&quot;&gt;Altera NIOS II&lt;/a&gt;. A 32-bit soft-core processor capable of running Linux. Mix and match communications and other peripherals from &lt;a href=&quot;http://opencores.org/projects&quot; rel=&quot;nofollow noreferrer&quot;&gt;OpenCores&lt;/a&gt; or from &lt;a href=&quot;http://www.xilinx.com/products/intellectual-property/index.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Xilinx&lt;/a&gt;, &lt;a href=&quot;http://www.altera.com/products/ip/ip-index.jsp&quot; rel=&quot;nofollow noreferrer&quot;&gt;Altera&lt;/a&gt;, or &lt;a href=&quot;http://www.latticesemi.com/products/intellectualproperty/index.cfm?source=topnav&quot; rel=&quot;nofollow noreferrer&quot;&gt;Lattice&lt;/a&gt; and you've built a custom microcontroller with everything you need and nothing you don't. You can even write C code for the NIOS II processor and have certain functions &lt;a href=&quot;https://electronics.stackexchange.com/questions/63690/from-c-to-silicon-how-to-implement-software-firmware-solution-as-hardware/63704#63704&quot;&gt;implemented directly in the FPGA hardware&lt;/a&gt; if you need the speed. Is that high level enough thinking for you?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;FPGA's have a high initial investment cost. But it's cheaper and easier to add functionality later in the design process. That's what's meant by &quot;forward looking&quot; designs. Consider a project where you want to add some additional motors to your robot but you've run out of PWM generators on your microcontroller. What do you do? Add another microcontroller? Buy separate PWM chips and connect them to a communications interface? What if all your communications interfaces are in use? With an FPGA, this is reduced almost entirely to a copy and paste operation. It's a lot easier, cheaper, and quicker to scale a design to include new functionality without buying as much additional hardware with an FPGA.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But probably the biggest reason to use an FPGA is speed. I'm not talking about pure clock speed. But when you need a lot of things to happen simultaneously. As Gossamer mentioned, parallelism is what FPGA's are really good at. Filter designs especially benefit from this kind of parallel architecture. If you need to filter and respond to a rapidly changing sensor, then you need an FPGA. They are also quite good at video processing as this too benefits from parallel processing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Take for instance &lt;a href=&quot;http://www.virtualworldlets.net/Resources/Hosted/Resource.php?Name=HighSpeedRobotDexterity&quot; rel=&quot;nofollow noreferrer&quot;&gt;this high-speed hand robot&lt;/a&gt;. It needs to process the video from the high-speed (1000 frames per second) machine vision camera as well as the tactile sensors and respond by manipulating numerous actuators in only a few milliseconds. This type of project is when you &lt;em&gt;need&lt;/em&gt; to choose FPGAs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/K491N.png&quot; alt=&quot;massively parallel vision processing&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="142" LastEditorUserId="-1" LastEditDate="2017-04-13T12:33:08.317" LastActivityDate="2013-04-03T13:05:08.557" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="1158" PostTypeId="1" AcceptedAnswerId="1159" CreationDate="2013-04-03T18:42:03.497" Score="2" ViewCount="147" Body="&lt;p&gt;Some vector math is involved here so prepare yourself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am developing a robotic arm that moves in two dimensions.  It is a rotary-rotary design which looks roughly like the picture in this post:&#xA;&lt;a href=&quot;https://robotics.stackexchange.com/questions/869/building-robotic-arm-joint&quot;&gt;Building Robotic arm joint&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am now trying to limit the speed of the end-effector.  I am using Simulink and believe that the best way to limit the speed is the limit the rate of change of the X and Y coordinates that I tell it to move to.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, I also want the end-effector to be able to move in a straight line and believe that I can accomplish this by defining functions that calculate the maximum rate for movement in the X or Y direction based on the distance the arm is trying to travel.  The equasion I came up with is this :&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;xRate = (abs(currentX - nextX) / max(abs(currentX - nextX), abs(currentY - nextY))&#xA;yRate = (abs(currentY - nextY) / max(abs(currentX - nextX), abs(currentY - nextY))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So basically, XRate: distance in x / max between distance in X and distance in Y.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Now, for the actual problem.  Because this limits the speed in both X and Y, the end-effector can travel (for instance) 1 in./sec in both directions at the same time.  Meaning that it is travelling at OVER 1 in./sec overall.  If, however, it is only moving in ONE direction then it will only move at that 1 in./sec speed because there is no second component.  It boils down to the fact that the max speed the arm can move is 'sqrt(2)' and the minimum is '1'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;My main question is&lt;/strong&gt;:  Given that I need to calculate a max xRate and a max yRate, how can I limit the overall speed of the end-effector?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Secondarily, is there a way for me to implement a rate control that will limit the overall rate instead of limiting X and Y independantly using Simulink?&lt;/p&gt;&#xA;" OwnerUserId="852" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2013-04-03T19:53:07.270" Title="Equation to limit rate of change of end-effector in X and Y coordinates" Tags="&lt;design&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1159" PostTypeId="2" ParentId="1158" CreationDate="2013-04-03T19:53:07.270" Score="2" Body="&lt;p&gt;Rather than trying to limit the 'x' and 'y' velocities separately, you should be limiting the overall velocity and calculating the component velocities from that overall velocity. In other words, something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;dx = currentX - nextX&#xA;dy = currentY - nextY&#xA;rate = min (maxRate, maxRate / sqrt( dx^2 + dy^2 )&#xA;xRate = dx * rate&#xA;yRate = dy * rate&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So for moving only in X:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;dx = currentX - nextX                              = 1&#xA;dy = currentY - nextY                              = 0&#xA;rate = min (maxRate, maxRate / sqrt( dx^2 + dy^2 ) = maxRate&#xA;xRate = 1 * rate                                   = maxRate&#xA;yRate = 0 * rate                                   = 0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;While moving only in Y:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;dx = currentX - nextX                              = 0&#xA;dy = currentY - nextY                              = 1&#xA;rate = min (maxRate, maxRate / sqrt( dx^2 + dy^2 ) = maxRate&#xA;xRate = 0 * rate                                   = 0&#xA;yRate = 1 * rate                                   = maxRate&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And for the diagonal movement you suggested:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;dx = currentX - nextX                              = 1&#xA;dy = currentY - nextY                              = 1&#xA;rate = min (maxRate, maxRate / sqrt( dx^2 + dy^2 ) = maxRate / sqrt(2)&#xA;xRate = dx * rate                                  = maxRate / sqrt(2)&#xA;yRate = dy * rate                                  = maxRate / sqrt(2)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="37" LastActivityDate="2013-04-03T19:53:07.270" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1160" PostTypeId="1" CreationDate="2013-04-03T23:23:01.653" Score="4" ViewCount="1421" Body="&lt;p&gt;I have an old gamecube that doesn't work and I want to gut it and fill it with Arduino boards and/or Raspberry Pi if necessary.  I want the project to eventually have some kind of AI aspect, but I'm also toying with the idea of using a &lt;a href=&quot;http://en.wikipedia.org/wiki/WaveBird_Wireless_Controller&quot; rel=&quot;nofollow&quot;&gt;wireless GameCube remote and wavebird&lt;/a&gt; to issue commands at the push of a button.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I guess this would be mostly good for testing purposes, but I'm mostly curious if and how I would go about making my RaspberryPi understand Gamecube remote input.  Furthermore, would this kind of idea be feasible?&lt;/p&gt;&#xA;" OwnerUserId="1121" LastEditorUserId="350" LastEditDate="2013-04-04T16:26:00.897" LastActivityDate="2013-05-04T19:14:13.160" Title="Can I use the RaspberryPi to receive the GameCube remote's RF signals?" Tags="&lt;control&gt;&lt;arduino&gt;&lt;raspberry-pi&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1161" PostTypeId="2" ParentId="1160" CreationDate="2013-04-04T11:20:58.590" Score="0" Body="&lt;p&gt;Yes, it's definitely feasible. I realize this won't be a &quot;complete&quot; answer according to the rules here, but either way here's some links to point you in the (hopefully) right direction:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.raphnet.net/electronique/gc_n64_usb/index_en.php&quot; rel=&quot;nofollow&quot;&gt;Rather complete tutorial on making a GameCube controller to USB converter&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.raphnet-tech.com/products/gc_n64_usb_adapters/index.php&quot; rel=&quot;nofollow&quot;&gt;The same adapter ready to go for $30CAD&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://forum.allaboutcircuits.com/showthread.php?t=41524&quot; rel=&quot;nofollow&quot;&gt;Short forum discussion about GameCube serial interface&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="95" LastActivityDate="2013-04-04T11:20:58.590" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1162" PostTypeId="2" ParentId="1160" CreationDate="2013-04-04T18:15:53.613" Score="1" Body="&lt;p&gt;If you can convert the GameCube interface to be a USB game controller, this should go fairly smoothly.  I used to buy used USB Xbox and Playstation2 controllers to control our underwater vehicles, and use &lt;a href=&quot;http://www.pygame.org/docs/ref/joystick.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Python's pygame library for joystick support&lt;/a&gt; to read the input from it.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/AX8JM.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/AX8JMm.jpg&quot; alt=&quot;joysticking in the ocean&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/qZWuz.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qZWuzm.jpg&quot; alt=&quot;joysticking with live video&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pygame makes it pretty easy.  For example, &lt;a href=&quot;http://rosettacode.org/wiki/Joystick_position#Python&quot; rel=&quot;nofollow noreferrer&quot;&gt;this script to show joystick position&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2013-04-04T18:15:53.613" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1163" PostTypeId="1" AcceptedAnswerId="1166" CreationDate="2013-04-04T18:45:28.617" Score="8" ViewCount="3854" Body="&lt;p&gt;I'm building a quadcopter and I've seen that a Li-Po battery must not be entirely discharged, otherwise it could damage it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How do you know when you have to stop your quadcopter or robot in order to prevent damages, since the voltage doesn't drop? Which part should control the battery charge? ESCs? BEC? Flight controller?&lt;/p&gt;&#xA;" OwnerUserId="943" LastActivityDate="2019-01-04T13:11:44.093" Title="How to know when a Li-Po battery is discharged?" Tags="&lt;battery&gt;" AnswerCount="4" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="1164" PostTypeId="2" ParentId="1163" CreationDate="2013-04-04T19:05:05.400" Score="2" Body="&lt;p&gt;Lithium polymer batteries &lt;em&gt;do&lt;/em&gt; have a drop in their voltage as they discharge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Use a simple zener/opamp circuit (&lt;a href=&quot;http://www.reuk.co.uk/12-Volt-Battery-Low-Indicator-LM741.htm&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt; is a good example of one), or just analogRead from a resistor system parallel to the battery. Determine what your definition of &quot;low battery&quot; is (some experimentation may help, see what values you get for a discharged battery), and set your processor to understand that.&lt;/p&gt;&#xA;" OwnerUserId="126" LastActivityDate="2013-04-04T19:05:05.400" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1165" PostTypeId="2" ParentId="1163" CreationDate="2013-04-04T19:45:13.110" Score="2" Body="&lt;p&gt;There are a number of off-the-shelf battery monitors that will notify you when the battery voltage has dropped to a critical point. In our lab we use one that emits a loud noise (as an example see the &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__7223__Hobby_King_Battery_Monitor_3S.html&quot; rel=&quot;nofollow&quot;&gt;Hobby King Battery Monitor 3S&lt;/a&gt;).&lt;/p&gt;&#xA;" OwnerUserId="177" LastActivityDate="2013-04-04T19:45:13.110" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1166" PostTypeId="2" ParentId="1163" CreationDate="2013-04-04T21:41:12.610" Score="4" Body="&lt;p&gt;You can tell by the voltage.  LiPo batteries have a distinct &quot;knee&quot; in their performance, generally around 3.4V-3.6V:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/8NRI8.gif&quot; alt=&quot;lithium ion voltage discharge curve&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It will be slightly different depending on the exact battery, and how you've arranged them in your battery packs (you need to account for the current load when measuring the voltage) -- so it makes sense to characterize your own battery first.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since your batteries will be in a quadcopter, the best solution will depend on whether you favor the safety of the battery (immediate hardware shutoff) or the safety of the platform (warn the autonomy, allow it to land safely before it shuts itself down in software).  &lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="15160" LastEditDate="2019-01-04T13:11:44.093" LastActivityDate="2019-01-04T13:11:44.093" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="1167" PostTypeId="1" AcceptedAnswerId="1169" CreationDate="2013-04-05T04:02:25.527" Score="3" ViewCount="5868" Body="&lt;p&gt;I'm building an arduino controlled pump system to be able to move fluids around. I need this to be fairly accurate, but extreme precision isn't required. Since there will be a variety of liquids moved through the pump, I've determined a peristaltic pump the best fit. But I don't think I fully understand them, and had a few questions..&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Since I'll need to purge the system... Can a peristaltic pump push air? Let's assume you have a 2m of tubing, and you pump a bunch of water through it. Can you remove the tube from the water reservoir so it is open to the air, and effectively purge the system of any remaining water?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Since I want to fairly accurately measure flow, could I simply count milliseconds instead of using a flowmeter? ... Will a peristaltic pump ALWAYS pump at a constant rate, regardless of the viscosity of the fluid? That is, will maple syrup come out at the same rate as water?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Shopping question, ignore I suppose ... Anyone know where I may find a fast/high flow peristaltic pump? I'm looking to be able to pump, at a minimum, .5oz/sec&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Would be determinant upon #3 ... What sort of relay would I want for toggling this on/off with an arduino?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="1128" LastEditorUserId="350" LastEditDate="2013-04-07T22:34:09.157" LastActivityDate="2013-10-25T04:29:01.403" Title="Can the rate of peristaltic pump's flow be accurate across changes in fluid viscosity?" Tags="&lt;arduino&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1168" PostTypeId="2" ParentId="1072" CreationDate="2013-04-05T14:24:08.893" Score="5" Body="&lt;p&gt;I'm the author of &lt;a href=&quot;https://electronics.stackexchange.com/q/61014&quot;&gt;the question you refer to&lt;/a&gt; and I will tell you; it is in fact possible. But unfortunately not easy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is quite some heavy development going on now, since it seems to be the next promis of wind energy. This is because at higher altitudes, winds are stronger and more constant. In addition to that, there is no need for large constructions (like conventional wind turbines) and the setup is highly mobile (which indeed makes it ideal for emergency situations or developing countries). Lastly, there is less &quot;view pollution&quot; as we more or less call it in Dutch. This is the concept that everyone wants to use green wind energy in their homes, but no one wants a humongous wind turbine in their backyard because of the noise and the view. A kite however, can be a thousand square meters, but if its 5 kilometers up in the air, you just see a string going up in the air.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next to the advantages, there are some severe challenges as well though. These are of course in some hardware related parts. For example; how do you reliably track the kite in the air (which was exactly my issue with my other question), but also; how do you measure wind speed at kite height without the kite its wind disturbance, and how do you overcome the rope weight when the rope becomes 5 kilometers long?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The software issues seem to be a way bigger issue than the hardware ones though. It appears to be not so easy to fly a kite reliably in a figure 8. This is because you're dealing with quite an unstable environment; changing wind direction, varying speed, and incidental wind gusts. Kite deformations and the different reactions of the kite in different parts within and outside the so called &quot;wind power zone&quot; are very different. A simple PID controller is not the easy solution apparantly. In addition to these things, heavy wind gusts can also be a danger in that it can break the kite's rope. So the kite must be able to quickly depower itself when a windgust comes up, which needs some kind of feed-forward loop. Finally, if the wireless data connection between the kite and the ground station breaks (for whatever reason) how can the kite control itself to decent to make a safe landing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason I'm so into this is because I'm looking into doing a PhD at the Delft University to develop a evolutionary based self learning kite control system for the &lt;a href=&quot;http://kitepower.eu/&quot; rel=&quot;nofollow noreferrer&quot;&gt;currect kitepower project&lt;/a&gt; they have there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although I'm not very experienced with the hardware side of the story, I thought why not start myself while I haven't started at the TU Delft yet? So I set out to find what I need for all of this. By now I have a good grasp of my first plans. I am now able to do some motor controlling and I am currently in the process of collecting some parts I need.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you also want to try building one that would be great. The more people in it, the more experience that is gained.. :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cheers&lt;/p&gt;&#xA;" OwnerUserId="1050" LastEditorUserId="-1" LastEditDate="2017-04-13T12:33:08.317" LastActivityDate="2013-07-29T19:49:51.947" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1169" PostTypeId="2" ParentId="1167" CreationDate="2013-04-05T17:31:39.337" Score="4" Body="&lt;p&gt;The answers to &quot;will it work&quot; and &quot;will viscosity affect flow rate&quot; is really &quot;it depends&quot;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.wmcpumps.com/series_810.htm&quot; rel=&quot;nofollow&quot;&gt;Peristaltic pumps that push air&lt;/a&gt; exist.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All pumps work by using low pressure to pull in fluid and high pressure to push it out.  In this case, the low pressure is the suction created when the flexible tube tries to retain its shape after being pressed by the roller.  The high pressure is created by the roller moving forward, like you would do with a tube of toothpaste.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's where it gets interesting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Completely flattening the tube is a foolproof way to pump, but it shortens the life of the tube.  So, a lot of pumps take advantage of the &lt;strong&gt;viscosity&lt;/strong&gt; of the fluid (the slowing down of the fluid near the walls of the tube).  All the rollers really need to do is make it easier for the fluid to flow forward than backwards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, the pump is actually balancing the following factors:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The ability of the tubing to regain its shape (springy-ness of the tube, affected by the fluid viscosity)&lt;/li&gt;&#xA;&lt;li&gt;The pressure of the fluid at the pump exit&lt;/li&gt;&#xA;&lt;li&gt;The resistance of the fluid to flowing backwards through the restricted tube (fluid viscosity, affected by the extent that the tube is constricted by the roller)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;You'll have to find out whether your pump is completely flattening the tube, or just relying on water's higher viscosity in order to increase the life of the tubing.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2013-04-05T17:31:39.337" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1170" PostTypeId="1" CreationDate="2013-04-05T18:05:17.580" Score="9" ViewCount="16545" Body="&lt;p&gt;I'm starting out with Gazebo (1.5) at the moment and am following &lt;a href=&quot;http://bramridder.com/ai-blog.php/integrating-ros-with-gazebo&quot; rel=&quot;noreferrer&quot;&gt;a tutorial&lt;/a&gt; off the internet. In order to get Gazebo to find the model, the author advocates manually exporting the &lt;code&gt;GAZEBO_MODEL_PATH&lt;/code&gt; environment variable via &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;export GAZEBO_MODEL_PATH=[...]/models:$GAZEBO_MODEL_PATH&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But that will only work for the current terminal. So I wanted to change the environment variable permanently. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://gazebosim.org/user_guide/started__components__env.html&quot; rel=&quot;noreferrer&quot;&gt;Gazebo User Guide&lt;/a&gt; claims that &lt;code&gt;GAZEBO_MODEL_PATH&lt;/code&gt;, along with all the other environment variables, is set by &lt;code&gt;/usr/share/gazebo-1.5/setup.sh&lt;/code&gt; but my (virgin) Gazebo install doesn't list it:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;export GAZEBO_MASTER_URI=http://localhost:11345&#xA;export GAZEBO_MODEL_DATABASE_URI=http://gazebosim.org/models&#xA;export GAZEBO_RESOURCE_PATH=/usr/share/gazebo-1.5:/usr/share/gazebo_models&#xA;export GAZEBO_PLUGIN_PATH=/usr/lib/gazebo-1.5/plugins&#xA;export LD_LIBRARY_PATH=/usr/lib/gazebo-1.5/plugins:${LD_LIBRARY_PATH}&#xA;export OGRE_RESOURCE_PATH=/usr/lib/i386-linux-gnu/OGRE-1.7.4&#xA;&#xA;# This line is needed while we're relying on ROS's urdfdom library&#xA;export LD_LIBRARY_PATH=/opt/ros/fuerte/lib:${LD_LIBRARY_PATH}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But when I start Gazebo, &lt;code&gt;GAZEBO_MODEL_PATH&lt;/code&gt; is already set to &lt;code&gt;$HOME/.gazebo/models&lt;/code&gt;, so it must be set somewhere. I guess I could probably simply add &lt;code&gt;GAZEBO_MODEL_PATH&lt;/code&gt; to the &lt;code&gt;setup.sh&lt;/code&gt; script, but since it is set somewhere, I'd still like to know where and whether it is better practice to set it in there.&lt;/p&gt;&#xA;" OwnerUserId="131" LastEditorUserId="158" LastEditDate="2014-01-10T10:51:11.883" LastActivityDate="2016-11-03T16:17:59.953" Title="Where does Gazebo set the GAZEBO_MODEL_PATH environment variable?" Tags="&lt;gazebo&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1171" PostTypeId="2" ParentId="1153" CreationDate="2013-04-05T21:39:04.950" Score="2" Body="&lt;p&gt;I think there might be a misconception around what an FPGA actually is and when it is used in designs.  So let me try to explain that part first.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;FPGAs and when one might want to have one...&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At risk of simplication, an FPGA is little more than a processor that happens to be 'reconfigurable'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why would someone want a 'reconfigurable' microprocessor?  Well, because it costs far too much to fabricate a silicon processor to afford to do it for one, two, or even two hundred chips.  You'd need to be running batches of thousands of chips to make it economically feasible.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since no design is ever bug-free the first time round, going the silicon route effectively commits a company to at least two if not more test runs, all at huge fabrication costs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which essentially means that very few commercial companies are going to be interested in designing and bringing to fabrication anything other than chip with broad enough commercial appeal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, if you come up with a brilliant design that justifies a custom microprocessor, then you &lt;em&gt;might&lt;/em&gt; try to bring your idea to life on a shoestring budget by implementing it in an FPGA, where the actual chip is simply a collection of gates, and a 'program' (typically VHDL or Verilog) arranges those gates into an actual microprocessor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But that's quite a ways down an entirely different (microprocessor design!) road...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which leads me to suggest that&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;... FPGAs are &lt;em&gt;not&lt;/em&gt; essential to robotics -- at least at the outset&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you need for robotics is a &lt;em&gt;processor&lt;/em&gt;.  An FPGA is just a special kind of processor (reconfigurable). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You ask whether you 'should'?  Well that depends on your knowledge as well as where your real interests lie -- microprocessor design first or robotics first?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If microprocessors are your passion, then by all means!  And robotics is a great application area for custom microprocessors -- perhaps a vision cortex with many parallel decision pathways handled directly in hardware, or special tensor multiplication in hardware -- basically anything that generic processors can't handle well off-the-shelf.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But if you're going to microprocessor designs in FPGAs, well, then of course you'll need to have all of that low level knowledge you mention, and more -- because fundamentally you'll be designing your own processor.  Which has nothing really to do with robotics, even though your target application might be robotics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most designers can probably find an existing processor that will do most of what they'll ever need.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I think you probably &lt;em&gt;don't&lt;/em&gt; need an FPGA.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;A starter roadmap: from commercial capabilities to (maybe) an FPGA...&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First goal in my opinion is to try to get all of your creative concepts built up into a working robot (quite an intensive challenge in itself).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you find that you've got specific and significant processing bottlenecks in your design, then the next goal is optimising the selection / design of your processors, still commercially available chips.  Maybe bigger, faster (trade-off with power draw, heat dissipation).  Maybe smaller, dedicated chips handling specific tasks and interfacing with the main brain (trade-off with algorithm / logic complications).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Only if there's capabilities that you just won't be able to get commercial chips to handle, then you might consider implementing a specialised processor inside an FPGA because at that point there will be very clear advantages that you hope to gain by 'rolling your own', and you can focus on just implementing those capabilities, with the right interfaces to rest of your design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Otherwise, you're likely to get side-tracked from your main goal (which I'm going to assume is to actually build a robot!)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Bottom line: FPGAs are a distraction from getting started in robotics --- until you're quite a ways down the robotics road -- and have gained some strong chops in digital electronics / microprocessor design somewhere along the way.&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="1013" LastEditorUserId="1013" LastEditDate="2013-04-07T09:46:04.990" LastActivityDate="2013-04-07T09:46:04.990" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1173" PostTypeId="2" ParentId="1153" CreationDate="2013-04-06T18:06:25.877" Score="1" Body="&lt;p&gt;Having worked with both FPGAs and Microcontrollers in robotics projects, I would actually say now: whatever the person implementing the task has the most experience with. If you know both equally well, you wouldn't be asking yourself the question. If you don't know either well, than these would be the points to go by:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Is there complex timing on I/O ports required? 3-Phase motor control can have such requirements. FPGAs have a slight advantage here.&lt;/li&gt;&#xA;&lt;li&gt;Can you parallelize your super low latency algorithm? Here the FPGA doesn't really compete with microcontrollers, but more with embedded PCs. Most things I would go for the embedded PC, but you may have an advantage with an FPGA for some specific applications. Dense stereo processing for example is often done in FPGAs. Lots of cameras use FPGAs for processing the data stream.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;What is also often used are hybrid solutions. Either with two chips, so one microcontroller for the program code, and an FPGA for IO or some other task. There also are a number of FPGAs that actually have a microcontroller embedded.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wouldn't be so harsh on FPGAs like some other posts, but would also generally argue, that unless you know your VHDL well, you will be better off using microcontroller, or even better still embedded PCs.&lt;/p&gt;&#xA;" OwnerUserId="127" LastActivityDate="2013-04-06T18:06:25.877" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1174" PostTypeId="1" CreationDate="2013-04-08T02:12:39.543" Score="4" ViewCount="219" Body="&lt;p&gt;See the video below of my balancing robot.&lt;br&gt;&#xA;&lt;a href=&quot;http://www.youtube.com/watch?v=Rjp8yoTVUcY&quot; rel=&quot;nofollow&quot;&gt;Balancing robot&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was having trouble getting it to balance on hard surfaces but finally got it after playing with the PID gains a lot.  Previously it was balancing just fine on carpet.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I set the PID gains by just picking a Kp, then increasing Ki until the robot oscillated very badly and tried to smash it's self into the ground,  then increasing Kd until it was finally stable. Here's the gains I'm using in the video.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  Kp=20, Ki=4.5, Kd=45;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It will sit in one spot balancing without any problem.  You can see in the video that it can even stop from falling after I give it a pretty good kick.  The problem is that it stops from falling over but then greatly overshoots the other direction.  In the video you can see when I give it just a small tap it runs the other way for a while before finally becoming stable again.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any suggestions on what to try next?&lt;/p&gt;&#xA;" OwnerUserId="529" LastActivityDate="2013-04-08T02:12:39.543" Title="PID tuning to make my balancing robot better" Tags="&lt;pid&gt;" AnswerCount="0" CommentCount="3" ClosedDate="2013-04-08T15:34:20.337" ContentLicense="CC BY-SA 3.0" />
  <row Id="1175" PostTypeId="1" CreationDate="2013-04-08T09:49:43.440" Score="1" ViewCount="1171" Body="&lt;p&gt;In a quadrotor we need to change each motor's speed depends on its position in space. More frequency will result more stability ( I mean if we can change motor's speed 400 times per second instead of 100 times per second we may stabilize our UAV quadrotor far better ).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now my question targeting people who made a UAV quadrotor before or have any information about ESCs. I wanna know whats the minimum refresh rate for ESCs in a quadrotor to make it stable ? For example may an ESC with 50hz refresh rate enough for stabilizing quadrotor or not ? I'm asking this question because high speed ESCs are more expensive than lower speed ones.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have &lt;a href=&quot;http://www.emaxmodel.com/views.asp?hw_id=21&quot; rel=&quot;nofollow&quot;&gt;this one&lt;/a&gt;. May it work ?&lt;/p&gt;&#xA;" OwnerUserId="1137" LastEditorUserId="1137" LastEditDate="2013-04-08T13:53:47.473" LastActivityDate="2013-04-08T13:53:47.473" Title="Minimum speed controller refresh rate" Tags="&lt;quadcopter&gt;&lt;esc&gt;" AnswerCount="1" CommentCount="6" ClosedDate="2013-04-15T11:43:32.973" ContentLicense="CC BY-SA 3.0" />
  <row Id="1176" PostTypeId="2" ParentId="1175" CreationDate="2013-04-08T10:46:08.833" Score="0" Body="&lt;p&gt;In case you need to do such an analysis, you should build up a Simulink/xcos model and derive such an analysis from that rather than make assumptions about such things which may or may not be directly correlated.&lt;/p&gt;&#xA;" OwnerUserId="333" LastActivityDate="2013-04-08T10:46:08.833" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1178" PostTypeId="1" CreationDate="2013-04-08T14:37:25.750" Score="1" ViewCount="3298" Body="&lt;p&gt;I need a microcontroller that can process minimum 2mb data per second.&#xA;How do I determine what processors will be able to do this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also how can I calculate the processing speed in per second of any microcontroller?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am very much scared with my college project and I need help.&lt;/p&gt;&#xA;" OwnerUserId="1140" LastEditorUserId="350" LastEditDate="2013-04-08T15:20:42.263" LastActivityDate="2016-04-21T13:54:59.947" Title="How can I calculate processing speed of microcontroller" Tags="&lt;microcontroller&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="1179" PostTypeId="2" ParentId="1178" CreationDate="2013-04-08T16:06:08.213" Score="3" Body="&lt;p&gt;You need to consult the specifications. There is absolutely no other way unless you buy the micro, code it and run tests.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So first, you need to define what exactly processing means. Best way to do it is to write the program that does the processing, in assembly. Let's take a hypothetical program in a hypothetical assembly:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;load R1, portA&#xA;add R1, R1, 1&#xA;store portB, R1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;First thing you need to know is how many cycles it takes the microcontroller to execute this code. Again, you need to consult the data sheet of the micro. Hypothetical numbers:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Load takes 3 cycles&lt;/li&gt;&#xA;&lt;li&gt;Load from PortA adds 2 cycles overhead&lt;/li&gt;&#xA;&lt;li&gt;Add takes 1 cycle&lt;/li&gt;&#xA;&lt;li&gt;Store takes 2 cycles&lt;/li&gt;&#xA;&lt;li&gt;Store to PortB adds 4 cycles overhead&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So you would know that for each piece of data you read (hypothetically, 1 byte) you need 12 cycles to process them, assuming the micro is stupid enough to not use pipelines, prefetching of any sort etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you read the specifications well, you will now get a good estimate of the speed of the micro for your task. In our hypothetical example, 1 byte per 12 cycles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So to address your first question, how to know if the micro is good enough for your task, it's quite simple. You want &lt;code&gt;X&lt;/code&gt; bytes of data per second so it takes &lt;code&gt;12X&lt;/code&gt; cycles to do that. All you need to know is how many cycles per second the micro runs (let's say &lt;code&gt;Y&lt;/code&gt;). So if &lt;code&gt;Y &amp;gt; 12X&lt;/code&gt; you're good.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your second question is also simple to answer. You already have the speed in terms of &quot;per cycle&quot;. To calculate the speed in terms of &quot;per second&quot;, you just multiply the per-cycle speed by cycles/second of the microcontroller (again, found in the data sheet). In our hypothetical example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;speed (byte/cycle) = 1/12&#xA;speed (byte/second) = 1/12 * Y&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Once you define your task, so it would be clear how heavy the computation is, probably higher grade students or even vendors would be able to help you pick up a suitable micro.&lt;/p&gt;&#xA;" OwnerUserId="158" LastEditorUserId="158" LastEditDate="2016-04-21T13:54:59.947" LastActivityDate="2016-04-21T13:54:59.947" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1180" PostTypeId="1" AcceptedAnswerId="1185" CreationDate="2013-04-08T23:18:35.460" Score="7" ViewCount="2218" Body="&lt;p&gt;I read many sources about kalman filter, yet no about the other approach to filtering, where canonical parametrization instead of moments parametrization is used. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the difference?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Other questions:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Using IF I can forget KF,but have to remember that prediction is more complicated &lt;a href=&quot;http://en.wikipedia.org/wiki/Kalman_filter#Information_filter&quot; rel=&quot;nofollow noreferrer&quot;&gt;link&lt;/a&gt; &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;How can I imagine uncertainty matrix turning into an ellipse? (generally I see, area is uncertainty, but I mean boundaries) &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Simple addition of information in IF was possible only under assumption that each sensor read a different object? (hence no association problem, which I posted &lt;a href=&quot;https://robotics.stackexchange.com/questions/1181/object-level-sensor-fusion-for-multiobject-tracking&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="1012" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2018-11-06T18:47:48.670" Title="information filter instead of kalman filter approach" Tags="&lt;kalman-filter&gt;&lt;algorithm&gt;&lt;sensor-fusion&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1181" PostTypeId="1" AcceptedAnswerId="1186" CreationDate="2013-04-08T23:25:40.900" Score="7" ViewCount="522" Body="&lt;p&gt;I want to fuse objects coming from several sensors, with different (sometimes overlapping!) fields of view. Having object lists, how can I determine whether some objects observed by different sensors are in fact the same object? Only then I can truly write an algorithm to predict future state of such an object. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;From literature I read those 4 steps:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Plot to track association (first update tracks estimates and then associate by &quot;acceptance gate&quot; or by statistical approach PDAF or JPDAF)&lt;/li&gt;&#xA;&lt;li&gt;Track smoothing (lots of algorithms for generating new improved estimate, e.g.: EKF, UKF, PF)&lt;/li&gt;&#xA;&lt;li&gt;Track initiation (create new tracks from unassociated plots)&lt;/li&gt;&#xA;&lt;li&gt;Track maintenance (delete a track if was not associated for last M turns. also: predict those tracks that were associated, their new location based on previous heading and speed)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;So basically I am questioning point 1, acceptance gate. For a single sensor I can imagine it can be just a comparison of xy position of object and sensor measurement, velocity with heading eventually. My case is however, I have already ready object lists from each sensor in every cycle, there are some algorithms how to merge informations about an object collected by different sensors (great source is e.g. here: &lt;a href=&quot;http://www.mathworks.de/matlabcentral/fileexchange/37807-measurement-fusion-state-vector-fusion&quot; rel=&quot;noreferrer&quot;&gt;http://www.mathworks.de/matlabcentral/fileexchange/37807-measurement-fusion-state-vector-fusion&lt;/a&gt;), but question is how to decide which objects should be fused, and which left as they were? Fields of view may overlap partly, not totally.&lt;/p&gt;&#xA;" OwnerUserId="1012" LastEditorUserId="1012" LastEditDate="2013-04-11T07:58:28.407" LastActivityDate="2013-04-11T07:58:28.407" Title="object level sensor fusion for multiobject tracking" Tags="&lt;kalman-filter&gt;&lt;algorithm&gt;&lt;sensor-fusion&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1182" PostTypeId="1" AcceptedAnswerId="1187" CreationDate="2013-04-09T12:52:45.160" Score="9" ViewCount="492" Body="&lt;p&gt;These days, one often hears of &lt;a href=&quot;http://en.wikipedia.org/wiki/Cyber-physical_system&quot; rel=&quot;noreferrer&quot;&gt;cyber-physical systems&lt;/a&gt;. Reading on the subject, though, it is very unclear how those systems differ from distributed and/or embedded systems. Examples from Wikipedia itself only make them look more like traditional distributed systems. For example:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;A real-world example of such a system is the Distributed Robot Garden at MIT in which a team of robots tend a garden of tomato plants. This system combines distributed sensing (each plant is equipped with a sensor node monitoring its status), navigation, manipulation and wireless networking.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Obviously, &lt;em&gt;any&lt;/em&gt; distributed system consists of sensing, actuations (which can easily include navigation) and networking.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is, how exactly does cyber-physical systems differ from traditional distributed systems? Is it just a fancy name, or is there something considerably different with it?&lt;/p&gt;&#xA;" OwnerUserId="158" LastEditorUserId="131" LastEditDate="2013-04-10T14:19:25.597" LastActivityDate="2013-04-10T14:20:40.053" Title="Shedding light on &quot;cyber-physical systems&quot;" Tags="&lt;distributed-systems&gt;&lt;embedded-systems&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1183" PostTypeId="2" ParentId="1182" CreationDate="2013-04-09T19:06:01.423" Score="3" Body="&lt;p&gt;It's just a fancy (and awkward) name. Also known as robotics, cybernetics, embedded systems, control systems and so on. I'm guessing there is some dissatisfaction with either the implications or specificity of those other related categories:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Robotics - Makes people think of rovers and industrial material handling equipment.&lt;/li&gt;&#xA;&lt;li&gt;Embedded systems - Too unspecific, doesn't necessarily have much physical interaction with the world outside of buttons and displays. &lt;/li&gt;&#xA;&lt;li&gt;Control systems - Mostly is used to refer to deterministic and non-distributed control loops. More Z-transform, less AI.&lt;/li&gt;&#xA;&lt;li&gt;Cybernetics - probably the closest in meaning, but over time the cyber-x has come to mean things that are purely virtual (cyberspace, cybersecurity, etc) instead of the original control system meaning. Thus the need to tack on a somewhat redundant &quot;physical&quot; to remind people that this involves atoms and not just bits.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="223" LastActivityDate="2013-04-09T19:06:01.423" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1184" PostTypeId="2" ParentId="1181" CreationDate="2013-04-09T20:46:36.033" Score="1" Body="&lt;p&gt;This depends on a lot of things.  What kind of sensors? Are they stationary? Are they at least fixed with respect to each other?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, if you have a system of multiple cameras that are fixed with respect to each other, you can calibrate them, so that you know their relative positions and orientations.  Then not only will you be able to determine whether two detections in different cameras are the same object, but you will be able to determine its position in 3D.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the classic paper on &lt;a href=&quot;http://research.microsoft.com/en-us/um/people/zhang/papers/TR98-71.pdf&quot; rel=&quot;nofollow&quot;&gt;camera calibration&lt;/a&gt;. To actually do the calibration you can either use OpenCV or the &lt;a href=&quot;http://www.vision.caltech.edu/bouguetj/calib_doc/&quot; rel=&quot;nofollow&quot;&gt;Caltech Camera Calibration Toolbox for Matlab&lt;/a&gt;. OpenCV has an example application for camera calibration which is easier to use than the Caltech toolbox.&lt;/p&gt;&#xA;" OwnerUserId="1115" LastEditorUserId="1115" LastEditDate="2013-04-10T15:53:38.287" LastActivityDate="2013-04-10T15:53:38.287" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1185" PostTypeId="2" ParentId="1180" CreationDate="2013-04-10T04:21:56.233" Score="7" Body="&lt;p&gt;They are exactly the same. Information matricies (aka precision matricies) are the inverse of covariance matricies. Follow &lt;a href=&quot;http://en.wikipedia.org/wiki/Kalman_filter&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt;. The covariance update $$P_{+} = (I-KH)P$$ can be expanded by the definition of $K$ to be&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ P_{+} = P - KHP $$&#xA;$$ P_{+} = P - PH^T (HPH^T+R)^{-1} HP $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now apply the &lt;a href=&quot;http://en.wikipedia.org/wiki/Woodbury_matrix_identity&quot; rel=&quot;nofollow&quot;&gt;matrix inversion lemma&lt;/a&gt;, and we have:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ P_{+} = P - PH^T (HPH^T+R)^{-1} HP $$&#xA;$$ P_{+} = (P^{-1} + H^TR^{-1}H)^{-1} $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which implies:&#xA;$$ P_{+}^{-1} = P^{-1} + H^TR^{-1}H $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The term $P^{-1}$ is called the prior information, $H^TR^{-1}H$ is the sensor information (inverse of sensor variance), and this gives us $P^{-1}_+$, which is the posterior information. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm glossing over the actual state estimate, but it's straightforward. The best intro I've seen on this is &lt;em&gt;not&lt;/em&gt; Thrun's book, but Ben Grocholsky's PhD thesis. (Just the intro material). It's called &lt;strong&gt;Information Theoretic Control of Multiple Sensor Platforms&lt;/strong&gt;. Here's a &lt;a href=&quot;http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.58.5090&quot; rel=&quot;nofollow&quot;&gt;link&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDITS&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To answer the questions posed.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;It is not more complicated to predict, it is more computationally costly, since you must invert the $n \times n$ covariance matrix to get the true state output. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;To view the ellipse from a covariance matrix, just note that the covariance matrix has a nice &lt;a href=&quot;http://en.wikipedia.org/wiki/Singular_value_decomposition&quot; rel=&quot;nofollow&quot;&gt;Singular Value Decomposition&lt;/a&gt;. The square root of the eigenvalues of the ellipse, or the square root of the singular values of the ellipse, will define the principal axes of the ellipse.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;No, addition of information depends only on the assumption of independence of measurement noise. If you want to use two information filters to track two objects, that's fine. Or if you want to use an IF to track two objects, that's also fine. All you need is the correct &lt;em&gt;association&lt;/em&gt; of measurements, so that you know which part of the state (object 1 or object 2) to update.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="163" LastEditorUserId="163" LastEditDate="2013-04-16T15:54:47.827" LastActivityDate="2013-04-16T15:54:47.827" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1186" PostTypeId="2" ParentId="1181" CreationDate="2013-04-10T04:29:50.160" Score="4" Body="&lt;p&gt;This is called &quot;data association&quot; in tracking literature. When you measure the position of an object, you need to know which object it was you measured. If you can estimate this probability, then you are free to choose the most likely association. This is a heavily researched topic, but boils down to Bayesian analysis. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's a simple way:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assume we have two objects $o_1$ and $o_2$, an estimate of their position $x_1$ and $x_2$, and a measurement $z$. Suppose $z$ is just a position measurement. We'd like to update $o_1$ &lt;strong&gt;or&lt;/strong&gt; $o_2$'s estimated position, but we have no idea with object we just measured. So, we find the &lt;em&gt;most likely&lt;/em&gt; object, and update that.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Estimate $p(z|x_1)$ and $p(z|x_2)$. The Kalman filter gives you the tools to do this.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;IF $p(z|x_1)&amp;gt;p(z|x_2)$ AND $p(z|x_1)&amp;gt;\gamma$, then update $x_1$ using $z$, the Kalman filter gives you the tools to do this as well. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;ELSE IF $p(z|x_2)&amp;gt;p(z|x_1)$ AND $p(z|x_2)&amp;gt;\gamma$, then update $x_2$ using $z$, the Kalman filter gives you the tools to do this as well. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;ELSE, no probability is greater than $\gamma$, so we drop the measurement. You can set $\gamma$ to zero if you don't care. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Two things: First, you also need to know how to &lt;em&gt;initialize&lt;/em&gt; an object. That's why $\gamma$ is important. If the measurement doesn't &lt;em&gt;seem&lt;/em&gt; to match any known estimates, you might have just detected a new object.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second, I have a suspicion that your question will be heavily edited, so I'm not putting a lot of details in just now.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt;&#xA;To address your newer, revised question:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You have a different problem, but it is totally related. First, you want to fuse objects. This is as simple as estimating the probability that all measurements of object 1 and all measurements of object 2 are in fact of the same object.  The algorithm is simple, but nearly intractable computationally. This is the same as track merger.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To really do this with objects in 3D, you need a model of the object which allows you to estimate the probability that two partially overlapping (or possibly just nearby) objects are in fact the same object). But this is exactly the same as the acceptance gate approach.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;note&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are only a few really useful ways to mere measurements, and they are well defined. I strongly suggest if you wish to continue with abstract tracking and estimation tasks that you read Bar-Shalom's &lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/047141655X&quot; rel=&quot;nofollow&quot;&gt;Tracking and Estimation book&lt;/a&gt;. Please get it from a library if you can. I just don't know of a better reference.&lt;/p&gt;&#xA;" OwnerUserId="163" LastEditorUserId="163" LastEditDate="2013-04-10T14:13:15.793" LastActivityDate="2013-04-10T14:13:15.793" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1187" PostTypeId="2" ParentId="1182" CreationDate="2013-04-10T12:48:54.290" Score="5" Body="&lt;p&gt;Reading through some of the articles linked to in the Wikipedia article, I'll respectfully disagree with &lt;a href=&quot;https://robotics.stackexchange.com/a/1183/37&quot;&gt;@Theran&lt;/a&gt;. The distinction seems quite well grounded, although Wikipedia does a poor job of making it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The term &lt;em&gt;embedded systems&lt;/em&gt; (ES) has been around since the 60s and can, arguably, refer to anything from an airplane to a Furby. I think the term &lt;em&gt;cyber-physical systems&lt;/em&gt; (CPS) was coined to distinguish it from what are traditionally thought of as embedded systems, namely closed-loop, non-networked &quot;boxes&quot; that operate in a very well-defined and constrained domain with a limited power to affect physical systems. CPS, on the other hand, embody the idea of &lt;em&gt;think globally, act locally&lt;/em&gt; (my apologies to &lt;a href=&quot;https://en.wikipedia.org/wiki/Think_Globally,_Act_Locally#Origin_in_town_planning&quot; rel=&quot;nofollow noreferrer&quot;&gt;Patrick Geddes&lt;/a&gt;), that is, they are usually highly networked systems that bring about change in a local physical system dependent on the state and actions of other entities in the wider network. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;While many robotic applications fit this definition, and can therefore be termed cyber-physical systems, many are not. What bestows the honour on MIT's robotic garden, I believe, is the fact that the robots form &lt;a href=&quot;https://www2.lirmm.fr/lirmm/interne/BIBLI/CDROM/ROB/2009/IROS_2009/papers/1119.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;part of a wider, decentralised system&lt;/a&gt; (PDF). It is the plants, equipped with sensors, that decide when to request watering or other services from the robots, while it is the robots that then decide between them which one will fulfil that request. Furthermore, not all CPS are thought of as &quot;robotic&quot;, for example, an intelligent power grid.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Cybernetics&quot; rel=&quot;nofollow noreferrer&quot;&gt;Cybernetics&lt;/a&gt;, as @Theran has noted, is occupied with the study of control systems, and so will form a core part of studying CPS, but also has a broader range of applications in fields such as mathematics, economics, and sociology, for example.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This &lt;a href=&quot;http://www.eecs.berkeley.edu/Pubs/TechRpts/2008/EECS-2008-8.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;report on cyber-physical systems&lt;/a&gt; (PDF), by Edward Lee from UC Berkeley, makes clear that CPS are a next step in the evolution of embedded systems with many of the same constraints (real-time capabilities, reliability) plus a few extra ones (robustness, adaptability, intelligence, interconnectedness). As such, the field of CPS is, in parts, concerned with developing completely new approaches to hard- and software architecture. For example:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;But I believe that to realize its full potential, CPS systems will require fundamentally new technologies [...] One approach that is very much a bottom-up approach is to modify computer architectures to deliver precision timing [...] Complementing bottom-up approaches are top-down solutions that center on the concept of model-based design [...] In this approach, &quot;programs&quot; are replaced by &quot;models&quot; that represent system behaviors of interest. Software is synthesized from the models. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Lee's thoughts are echoed in this &lt;a href=&quot;http://www.jiafuwan.net/download/cyber_physical_systems.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Embedded Computing column&lt;/a&gt; (PDF) by Wayne Wolf of Georgia Tech.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;After all, we've had computers attached to stuff for a long time. Why, you may ask, do we need a new term to describe what we've been doing for years? [...] We have a surprisingly small amount of theory to tell us how to design computer-based control systems. Cyber-physical systems theory attempts to correct this deficiency. [...] Cyber-physical systems actively engage with the real world in real time and expend real energy. This requires a new understanding of computing as a physical act—a big change for computing.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I recommend reading both articles for a good view on how CPS are different from &quot;mere&quot; embedded systems. &lt;a href=&quot;http://cyberphysicalsystems.org&quot; rel=&quot;nofollow noreferrer&quot;&gt;Cyberphysicalsystems.org&lt;/a&gt; has a concept map of CPS on their homepage that nicely illustrates many of the aspects involved in developing CPS. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for the origin of the term, none of the sources I found attributed it to anyone. Many papers defined it without attribution while clearly not being the first to use them. The term first crops up in the literature in &lt;a href=&quot;http://scholar.google.com/scholar?q=%22cyber-physical+systems%22&amp;amp;hl=en&amp;amp;as_sdt=0%2C5&amp;amp;as_ylo=&amp;amp;as_yhi=2006&quot; rel=&quot;nofollow noreferrer&quot;&gt;2006&lt;/a&gt; but, by that time, the US National Science Foundation had already organised a &lt;a href=&quot;http://varma.ece.cmu.edu/cps/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Workshop on Cyber-Physical Systems&lt;/a&gt;, suggesting that the term was already in use by then.&lt;/p&gt;&#xA;" OwnerUserId="131" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2013-04-10T14:20:40.053" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1188" PostTypeId="2" ParentId="908" CreationDate="2013-04-10T19:28:37.653" Score="5" Body="&lt;p&gt;It's a clever and attractive design, but it's mechanically weak.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The mating area between the screw and grooves is small, so the pitch angle of the threads isn't as much of a problem. The grooves on opposite sides are offset by half a thread so the screw has less of a tendency to tilt. Mechanical clearance and deformation of the parts is enough to compensate for the remaining geometric mismatch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The screw will have a strong tendency to strip out the grooves when torqued. This is already a problem with threading into softer materials like aluminum; that's why they invented threaded inserts. It's even worse when only a small fraction of each thread carries any load. The grooves should only be considered suitable for light loading and gentle torquing. &lt;/p&gt;&#xA;" OwnerUserId="223" LastActivityDate="2013-04-10T19:28:37.653" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1189" PostTypeId="2" ParentId="230" CreationDate="2013-04-10T22:36:09.943" Score="4" Body="&lt;p&gt;An experimental repository has just been populated with ROS Groovy packages for Raspbian (wheezy), instructions to use it can be found here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.ros.org/wiki/groovy/Installation/Raspbian&quot; rel=&quot;nofollow&quot;&gt;http://www.ros.org/wiki/groovy/Installation/Raspbian&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The repository has 350+ packages and the core ROS packages can be installed in a matter of minutes on a fresh Raspbian install.&lt;/p&gt;&#xA;" OwnerUserId="1149" LastActivityDate="2013-04-10T22:36:09.943" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1191" PostTypeId="2" ParentId="93" CreationDate="2013-04-12T18:29:49.010" Score="2" Body="&lt;p&gt;Sometimes they are called linear halls.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A company called Eltrol used to make drives for these. I used them in the past in combination with Anorad Linear motors. Nowadays they are still available from PeakServo.&#xA;The drives drive the linear (or sine) hall and receive the two halll signal (which are 120 degrees apart).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.peakservo.com/series-45-linear-hall-sine-servo-amplifier/&quot; rel=&quot;nofollow&quot;&gt;http://www.peakservo.com/series-45-linear-hall-sine-servo-amplifier/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="1157" LastActivityDate="2013-04-12T18:29:49.010" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1192" PostTypeId="1" CreationDate="2013-04-13T02:28:07.487" Score="7" ViewCount="1878" Body="&lt;p&gt;I'm planning on programming a prebuilt robot to solve a maze as fast as possible.  The robot has forward obstacle sensors (no side sensors) and 3-axis accelerometer.  I'm planning on using the wall following algorithm.  Is this the fastest possible algorithm?  Also, since there are no side sensors, the robot needs to continuously turn to check if there is a wall on its side, so is there a clever way to use the accelerometer and sensors?&lt;/p&gt;&#xA;" OwnerUserId="1159" LastActivityDate="2017-04-18T16:46:30.150" Title="Fastest maze algorithm for robot" Tags="&lt;mobile-robot&gt;" AnswerCount="3" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="1193" PostTypeId="2" ParentId="1192" CreationDate="2013-04-13T15:24:13.373" Score="2" Body="&lt;p&gt;You can't say much about solving a maze unless you are allowed to explore first, or know the maze before-hand. Otherwise, it is easy to build a maze that will take arbitrarily long to solve using wall-following, but which has a simple solution. See the following example.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/8fbnF.png&quot; alt=&quot;Oops! We followed the wrong wall&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this case, it is faster &lt;em&gt;on average&lt;/em&gt; to just chose turns randomly. So maybe this is a tough problem that requires a little more thought.&#xA;In some contexts, an iterative-deepening approach isn't bad. Start your research there, and come back when you have specific questions.&lt;/p&gt;&#xA;" OwnerUserId="163" LastActivityDate="2013-04-13T15:24:13.373" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1194" PostTypeId="2" ParentId="1192" CreationDate="2013-04-14T03:09:29.227" Score="2" Body="&lt;p&gt;The wall following algorithm will benefit more from sensors on a side. Since you follow the side until you find a gap then you turn into that gap. You could then use the accelerometer to sense a bump when you hit the wall in front. However not sure how you can determine that you are out of the maze (in case you need to do that). Just an idea...&lt;/p&gt;&#xA;" OwnerUserId="1161" LastActivityDate="2013-04-14T03:09:29.227" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1195" PostTypeId="1" CreationDate="2013-04-15T23:42:00.593" Score="2" ViewCount="54" Body="&lt;p&gt;I am looking for A3 size poster of Mars Exploration Rover Spirit/Opportunity for robotic education. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;www.sunstartoys.com gives a little postcard-size of the MER along with its components on board when you buy the toy. But this is not large enough for classroom purpose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know where to buy A3 size poster of these MER for robotic education?&lt;/p&gt;&#xA;" OwnerUserId="1167" LastActivityDate="2013-04-15T23:42:00.593" Title="Where can I get A3 poster size of Mars Exploration Rover Spirit/Opportunity?" Tags="&lt;wheeled-robot&gt;" AnswerCount="0" CommentCount="1" FavoriteCount="1" ClosedDate="2013-04-16T14:16:48.677" ContentLicense="CC BY-SA 3.0" />
  <row Id="1197" PostTypeId="2" ParentId="1120" CreationDate="2013-04-17T16:54:29.547" Score="1" Body="&lt;p&gt;Just FYI since this is not about exactly the &lt;code&gt;IQ&lt;/code&gt; test and also this might be more suitable for computer science community, but Japanese researchers have started a project &quot;&lt;a href=&quot;http://blogs.wsj.com/japanrealtime/2012/09/12/can-a-robot-get-into-japans-most-prestigious-university/&quot; rel=&quot;nofollow&quot;&gt;Can a Robot Pass the University of Tokyo Entrance Exam?&lt;/a&gt;&quot; where by 2021 they aim to achieve the goal.&lt;/p&gt;&#xA;" OwnerUserId="60" LastActivityDate="2013-04-17T16:54:29.547" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1198" PostTypeId="1" AcceptedAnswerId="1204" CreationDate="2013-04-17T17:06:16.400" Score="5" ViewCount="338" Body="&lt;p&gt;I'm a newbie in robotics, and I'm doing a project on dynamic Braille interface. Basically it's a 8*8 array of pins, which can be either totally up or down. How to use least motor as possible?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm thinking of using Arduino for easy interface with computer.&lt;/p&gt;&#xA;" OwnerUserId="1171" LastActivityDate="2013-04-18T23:18:49.453" Title="Dynamic braille interface" Tags="&lt;design&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1199" PostTypeId="2" ParentId="1145" CreationDate="2013-04-18T06:36:23.237" Score="3" Body="&lt;p&gt;There are all sorts of mechanisms for handling dry goods. If you want to do it on a small scale, look to industrial devices for inspiration, but consumer and retail devices for quick solutions. For example, there are quite a few cereal dispensers on on the market like &lt;a href=&quot;http://www.zevro.com/smartspace-dry-food-dispenser-single-canister/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this Zevro cereal dispenser&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/5tc5h.jpg&quot; alt=&quot;Zevro cereal dispenser&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Industrial systems often use augers to measure and move dry materials. I don't see why you couldn't build a small scale delivery device using &lt;a href=&quot;http://www.harborfreight.com/7-piece-auger-bit-set-68166.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;a cheap auger bit&lt;/a&gt; rotating inside a pipe sized to fit the bit:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/Otdae.jpg&quot; alt=&quot;auger bit set&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Dry goods are often measured by weight, so you might want to think about ways to weigh grains and similar materials. There are lots of cheap digital scales with a range of about 0-5kg and accurate down to a few grams. You could try to integrate one of those into your project directly, or cannibalize it for its load sensor, or even &lt;a href=&quot;http://forums.parallax.com/showthread.php/108049-Make-your-own-load-cell-(force-sensor)-from-stuff-you-already-have.&quot; rel=&quot;nofollow noreferrer&quot;&gt;build your own load sensor&lt;/a&gt;. It'd be easy to put a small hopper on a scale to measure the material, use a simple gate to start and stop the flow of material into the hopper, and a solenoid to dump the hopper into a chute that delivers it for preparation.&lt;/p&gt;&#xA;" OwnerUserId="1174" LastActivityDate="2013-04-18T06:36:23.237" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1200" PostTypeId="1" AcceptedAnswerId="1201" CreationDate="2013-04-18T08:17:48.590" Score="0" ViewCount="620" Body="&lt;p&gt;I am looking for a specific name of the wire used for the robotic arm movement control and where can I find some of this online. I want to control it using the micro controller so please suggest some good development kit.&lt;/p&gt;&#xA;" OwnerUserId="1176" LastActivityDate="2013-04-18T12:19:29.927" Title="What is the wire used for hand movement of robot called ? where can I find it online ?" Tags="&lt;microcontroller&gt;&lt;robotic-arm&gt;&lt;movement&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1201" PostTypeId="2" ParentId="1200" CreationDate="2013-04-18T09:13:31.747" Score="5" Body="&lt;p&gt;If I understood correctly, you are referring to &lt;code&gt;robotic tendons&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/RyYGi.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a lot of material on the subject if you search google.&lt;/p&gt;&#xA;" OwnerUserId="158" LastEditorUserId="158" LastEditDate="2013-04-18T12:19:29.927" LastActivityDate="2013-04-18T12:19:29.927" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1202" PostTypeId="1" AcceptedAnswerId="1203" CreationDate="2013-04-18T10:21:39.047" Score="6" ViewCount="497" Body="&lt;p&gt;We have an air bearing for a planar xy motion. Today it consists of four pockets according to picture.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/dET39.png&quot; alt=&quot;Current design&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;In the current design there are no sealings around the peripheries of the pockets and we suspect that is the reason we get vibrations.&lt;/p&gt;&#xA;&lt;p&gt;In the current design we control the pressure, same for all for recesses. The flow is adjustable individually for each recess. In practice it is very hard to tune it.&lt;/p&gt;&#xA;&lt;p&gt;For the non recess surfaces we have used &lt;a href=&quot;http://www.tss.trelleborg.com/remotemedia/media/globalformastercontent/downloadsautomaticlycreatedbyscript/catalogs/turcite_b_slydway_gb_en.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Slydway&lt;/a&gt; as we need to be able to operate it without pressure occasionally.&lt;/p&gt;&#xA;&lt;p&gt;To try to solve the problem we plan to develop a prototype where we can try out the effect of using sealings around the periphery of the pockets. The idea is something like this:&#xA;&lt;img src=&quot;https://i.stack.imgur.com/7yKuf.png&quot; alt=&quot;Idea for new design&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Questions&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Is the idea with adding sealings good? (sanity check)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Suggestions for sealings? (I'm thinking a porous material like felt or cigarette filter)&lt;/p&gt;&#xA;&lt;p&gt;Of course all suggestions are welcome.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;em&gt;Edit&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;I'm going to try and add grooves around the recesses to evaquate the air that leaks. My thinking is that this will give us a more defined area under pressure.&lt;/p&gt;&#xA;" OwnerUserId="786" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2013-04-19T08:21:04.887" Title="Problem with vibrations in air bearing" Tags="&lt;linear-bearing&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1203" PostTypeId="2" ParentId="1202" CreationDate="2013-04-18T11:33:29.053" Score="3" Body="&lt;p&gt;Non of the commercial air bearings I've seen have attempted to &lt;em&gt;seal&lt;/em&gt; like this, so I think that your problems with vibration may lie elsewhere.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The problems I have seen with air-bearing systems have been related to mechanical &lt;a href=&quot;http://forums.reprap.org/read.php?14,131155,131155&quot; rel=&quot;nofollow noreferrer&quot;&gt;over constraint&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A high performance linear bearing stage I once worked on used six bearings like these:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.nelsonair.com/NA_prods_flatpad_fp.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gHOsJ.gif&quot; alt=&quot;Copyright of Nelson Air Corp assumed, Image used without permission but with attribution.&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Arranged in 3 pairs like this: &lt;code&gt;/\em_&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where &lt;code&gt;/&lt;/code&gt;, &lt;code&gt;\&lt;/code&gt; &amp;amp; &lt;code&gt;_&lt;/code&gt; are a pair of bearings (side by side along the track), &lt;code&gt;e&lt;/code&gt; was the encoder strip and &lt;code&gt;m&lt;/code&gt; was a linear motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem that we had was that no matter how we tuned the servo loop, if it was tightly tuned enough to get up to the speed and acceleration we needed (3m/s &amp;amp; 2g) then the system would often get into a &lt;a href=&quot;http://en.wikipedia.org/wiki/Limit_cycle&quot; rel=&quot;nofollow noreferrer&quot;&gt;limit cycle&lt;/a&gt; (sometimes erroneously called &lt;a href=&quot;http://en.wikipedia.org/wiki/Resonance&quot; rel=&quot;nofollow noreferrer&quot;&gt;resonance&lt;/a&gt;) when stopping (i.e. it would sit humming).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The way we solved this was to remove one of the air bearings on the &lt;code&gt;/&lt;/code&gt; row, relocating it to the middle:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;   Front view       Side&#xA;Unstable   Stable   view&#xA;  o o       o o      |o&#xA;   m         m       |m&#xA;   e         e       |e&#xA;  o o       o o      \o&#xA;  o o        o       /o&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;By removing the excess constraint, we appeared to remove the tendency for a perturbation in one air bearing to affect another bearing and then ripple through to the other bearings.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depending on your typical direction of motion and the flatness of your surface, you may find that a three point bearing system may work better for your system:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.newwayairbearings.com/design/technical-resources/new-way-technical-reports/tech-report-2-vacuum-preloaded-x-y-stage&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JzlXh.jpg&quot; alt=&quot;Copyright of New Way Air Bearings, Image used without permission but with attribution.&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may also want to consider purchasing commercial air-bearing modules and attaching them to a frame (at least for a prototype) rather than attempting to manufacture your own air bearings. That way you can leverage the knowledge and support provided by the air-bearing manufacturer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One other point is that we used ordinary &lt;a href=&quot;http://en.wikipedia.org/wiki/Polyimide&quot; rel=&quot;nofollow noreferrer&quot;&gt;Polyimide&lt;/a&gt; tape on our air bearings. We considered various more permanent methods, but in the end decided that being able to easily remove old, scarred or scored tape and replace it with fresh tape quickly and easily made the most sense for our application.&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="37" LastEditDate="2013-04-18T11:59:44.950" LastActivityDate="2013-04-18T11:59:44.950" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1204" PostTypeId="2" ParentId="1198" CreationDate="2013-04-18T23:18:49.453" Score="1" Body="&lt;p&gt;With a \$100-200 budget it's unlikely you can duplicate the functionality of a \$695 commercially-produced product.  Your device may be slower, bulkier, noisier, less reliable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One possible approach is to use dot matrix printer print-heads to drive pins.  See example of pins being driven in a &lt;a href=&quot;http://vimeo.com/12648709&quot; rel=&quot;nofollow noreferrer&quot;&gt;vimeo.com&lt;/a&gt; video called  “Dot Matrix Print Head - Testing”.  You might need to replace the pins with push wires so that you could go from a 3-by-9 pin layout to a 4-by-4 or 4-by-5 arrangement.  Some fairly old (and bulky) print-heads already contain push wires.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the print-head pins are driven ballistically they might not be able to work with the high duty cycle that a Braille dot would require.  If you use push wires, you could have a cam that moves a latch plate back and forth, alternately latching wires in place or releasing them so they can move up or down.  Or you could have a cam that lifts all the  Braille pins at once, and a print head that drives some latch pins sideways to catch those Braille pins that that should remain up.  Another cam would clear all the latch pins at the beginning of each character cycle. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are miniature solenoids as shown below with roughly 1cm square cross-section, with a 1.5mm diameter pin that moves about 3mm.  (Listed on ebay as “Miniature Electric Solenoid - 9 V - Push Type - 2 oz. Force - 3 mm Stoke”, about \$7.)  The duty cycle of this solenoid is 10%, so like a ballistic print head it would require some latch mechanism, as well as a spring or gravity return.  You would need to attach push wires to the end of the shaft because the solenoids won't cluster closely enough.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/VvxM2.jpg&quot; alt=&quot;Miniature Electric Solenoid - 9 V - Push Type&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="478" LastActivityDate="2013-04-18T23:18:49.453" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1205" PostTypeId="1" CreationDate="2013-04-19T03:42:53.730" Score="5" ViewCount="164" Body="&lt;p&gt;I would like to prevent a shaft from being pulled through it's bearings - that is, press a plastic ring around it on either side.  What are these rings called? They're not bearings or hubs.  And where can I find them?&lt;/p&gt;&#xA;" OwnerUserId="1183" LastActivityDate="2013-04-24T20:31:18.450" Title="Plastic shaft supports" Tags="&lt;mechanism&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1206" PostTypeId="2" ParentId="1205" CreationDate="2013-04-19T05:13:42.327" Score="3" Body="&lt;p&gt;Many shafts and spindles have shoulders (ie, a ring-shaped surface at the junction of different shaft diameters) turned on them to serve such a purpose.  If there is no diameter change in the shaft you are working with, &lt;em&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Shaft_collar&quot; rel=&quot;nofollow&quot;&gt;shaft collars&lt;/a&gt;&lt;/em&gt; sometimes are used to keep the shaft from sliding back and forth.  The wikipedia article mentions several kinds of collars.  &lt;a href=&quot;http://www.amazon.com/b?ie=UTF8&amp;amp;node=16411911&quot; rel=&quot;nofollow&quot;&gt;Amazon&lt;/a&gt; and &lt;a href=&quot;http://www.ebay.com/sch/i.html?_trksid=p2050601.m570.l1313.TR0.TRC0&amp;amp;_nkw=Shaft+collar&amp;amp;_sacat=0&amp;amp;_from=R40&quot; rel=&quot;nofollow&quot;&gt;Ebay&lt;/a&gt; sellers list quite a few medium to large sizes.  If the shaft you are working with is small-diameter, eg 1/16&quot;–3/16&quot;, then look for shaft collars among model airplane supplies.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not aware of any suppliers of shaft collars made of plastic.  If you are referring to bushings or to grommets, they won't resist sliding unless they are fastened with a band clamp or a collet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.google.com/search?q=shaft+grommet&amp;amp;hl=en&amp;amp;tbm=isch&amp;amp;tbo=u&amp;amp;source=univ&amp;amp;sa=X&amp;amp;ei=fsxwUbLpIOP5iwKqmoG4Cw&amp;amp;ved=0CDsQsAQ&amp;amp;biw=1052&amp;amp;bih=553#hl=en&amp;amp;tbm=isch&amp;amp;q=snap+ring&amp;amp;revid=1540968864&amp;amp;sa=X&amp;amp;ei=FtJwUePVEMKRiQKMqYCwAQ&amp;amp;ved=0CE8QgxY&amp;amp;bav=on.2,or.r_qf.&amp;amp;bvm=bv.45373924,d.cGE&amp;amp;fp=d610fbf3756a904e&amp;amp;biw=1052&amp;amp;bih=553&quot; rel=&quot;nofollow&quot;&gt;Snap rings&lt;/a&gt; also are used to keep shafts from sliding.  Snap rings fit into a thin shallow groove around the shaft.&lt;/p&gt;&#xA;" OwnerUserId="478" LastActivityDate="2013-04-19T05:13:42.327" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1207" PostTypeId="1" CreationDate="2013-04-19T06:31:23.970" Score="3" ViewCount="5953" Body="&lt;p&gt;I have a 9 channel RF RX/TX and want to connect 3 motors to it.  I am able to connect channel 1 with motor 1 but unable to connect channel 2 with motor 2 simultaneously with arduino.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the code I am currently using:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;int motor1Left = 7;// defines pin 5 as connected to the motor&#xA;int motor1Right= 9;// defines pin 6 as connected to the motor&#xA;int motor2Left = 22;// defines pin 7 as connected to the motor&#xA;int motor2Right = 26;// defines pin 8 as connected to the motor&#xA;int enable = 5;&#xA;int enable2 = 10;&#xA;int channel1 = 2; // defines the channels that are connected&#xA;int channel2 = 3;// to pins 9 and 10 of arduino respectively&#xA;&#xA;int Channel1 ; // Used later to &#xA;int Channel2 ; // store values&#xA;&#xA;void  setup ()&#xA;{&#xA;  pinMode (motor1Left, OUTPUT);// initialises the motor pins&#xA;  pinMode (motor1Right, OUTPUT);&#xA;  pinMode (motor2Left, OUTPUT);&#xA;  pinMode (motor2Right, OUTPUT);// as outputs&#xA;  pinMode (channel1, INPUT);// initialises the channels&#xA;  pinMode (channel2, INPUT);// as inputs&#xA;&#xA;  Serial.begin (9600); // Sets the baud rate to 9600 bps&#xA;}&#xA;&#xA;void  loop ()&#xA;{&#xA;  Channel1 = (pulseIn (channel1, HIGH)); // Checks the value of channel1&#xA;  Serial.println (Channel1); //Prints the channels value on the serial monitor&#xA;  delay(1000);&#xA;&#xA;  Channel2 = (pulseIn (channel2, HIGH)); // Checks the value of channel1&#xA;  Serial.println (Channel2); //Prints the channels value value on the serial monitor&#xA;  delay(1000);&#xA;&#xA;  if (Channel1 &amp;gt; 1470 &amp;amp;&amp;amp; Channel1 &amp;lt; 1500) /*These are the values that I got from my transmitter, which you may customize according to your transmitter values */&#xA;  {&#xA;    digitalWrite (motor1Left, LOW); // Sets both the&#xA;    digitalWrite (motor1Right, LOW);// motors to low&#xA;    analogWrite(enable, 100);  &#xA;  }&#xA;&#xA;  if (Channel1 &amp;lt; 1460) // Checks if Channel1 is lesser than 1300&#xA;  {&#xA;    digitalWrite (motor1Left, HIGH);// Turns the left&#xA;    digitalWrite (motor1Right, LOW); // motor forward&#xA;    analogWrite(enable, 100);&#xA;  }&#xA;&#xA;  if (Channel1 &amp;gt; 1510) // Checks if Channel1 is greater than 1500&#xA;  {&#xA;    digitalWrite (motor1Left, LOW);// Turns the right&#xA;&#xA;    digitalWrite (motor1Right, HIGH);// motor forward&#xA;    analogWrite(enable, 70);&#xA;  }&#xA;&#xA;  if (Channel2 &amp;gt; 1480 &amp;amp;&amp;amp; Channel1 &amp;lt; 1500 )&#xA;  {&#xA;    digitalWrite (motor2Left, LOW);// Sets both the&#xA;    digitalWrite (motor2Right, LOW);// motors to low&#xA;    analogWrite (enable2, 100);&#xA;  }&#xA;&#xA;  if (Channel2 &amp;lt; 1300) // Checks if Channel2 is lesser than 1300&#xA;  {&#xA;    digitalWrite (motor2Left, LOW);// Turns the left&#xA;    digitalWrite (motor2Right, HIGH);// motor backward&#xA;    analogWrite (enable2, 100);&#xA;  }&#xA;&#xA;  if (Channel2 &amp;gt; 1500) // Checks if Channel2 is greater than 1500&#xA;  {&#xA;    digitalWrite (motor2Left, HIGH);// Turns the right&#xA;    digitalWrite (motor2Right, LOW);// motor backward&#xA;    analogWrite (enable2, 100);&#xA;  }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="1184" LastEditorUserId="478" LastEditDate="2013-04-20T23:39:48.617" LastActivityDate="2013-12-31T03:19:19.427" Title="Read Multiple Channels of RX-TX with arduino" Tags="&lt;arduino&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1208" PostTypeId="2" ParentId="519" CreationDate="2013-04-19T17:55:26.907" Score="5" Body="&lt;p&gt;I just see your post now and it is maybe too late to really help you... but in case you are still interested in this: I think that I identified your problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You write the innovation covariance matrix in the following way&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;E = jacobian measure * P * jacobian measure&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It might be alright in theory but what happens is that if your algorithm is effective and especially if you are working on a simulation: the uncertainties will decrease, especially in the directions of your measurement. So &lt;code&gt;E&lt;/code&gt; will tend to &lt;code&gt;[[0,0][0,0]]&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To avoid this problem what you can do is to add a measurement noise corresponding to the uncertainties in the measurement and your innovation covariance becomes&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;E= Jac*P*Jac'+R&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where &lt;code&gt;R&lt;/code&gt; is the covariance of the measurement noise (diagonal matrix where the terms on diagonal are the squares of the standard deviation of the noise). If you actually don't want to consider noise you can make it as small as you want.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also add that your covariance update seems strange to me the classical formula is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;P=P - K * jacobian measure * P&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I never saw your formula written anywhere else, I might be correct but if you are not sure of it you should check it.&lt;/p&gt;&#xA;" OwnerUserId="1187" LastEditorUserId="9176" LastEditDate="2018-07-25T21:49:20.997" LastActivityDate="2018-07-25T21:49:20.997" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="1209" PostTypeId="1" CreationDate="2013-04-19T18:11:12.437" Score="12" ViewCount="13517" Body="&lt;p&gt;Today was my quadcopter's first &quot;flight&quot;. I'm running megapirate on a Crius AIOP v2 with a Turnigy Talon v2 frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I only touched the throttle stick on my remote, nothing else. When I felt the quadcopter was about to take off, I pushed the throttle just a little bit more, and the quadcopter oscillated 2 or 3 times and the just flipped over, landing on the propellers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, I broke 2 props, my frame feels a bit loose, I'll probably have to tighten the screws (I hope...). How can I tune the software so it will stabilize nicely after take off?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit :&lt;br&gt;&#xA;I don't know if it was true oscillation or just random air flows making it unstable. I made some more tests yesterday and it was quite OK (even if I crashed a few times). This time, it was really oscillating but it was quite windy outside and the quadcopter managed to stabilize after all. So i'll probably have to tune my PIDs and find a way to do it without crashing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit 2 : After some PID tuning, I managed to stabilize my quadcopter pretty well but it's still oscillating just a little bit. I guess I'll have to slightly change the values to get a perfect stabilization.&lt;/p&gt;&#xA;" OwnerUserId="943" LastEditorUserId="943" LastEditDate="2013-04-23T09:24:27.643" LastActivityDate="2016-06-14T11:16:18.783" Title="How to stabilize a quadcopter" Tags="&lt;quadcopter&gt;&lt;stability&gt;" AnswerCount="3" CommentCount="8" FavoriteCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="1211" PostTypeId="1" AcceptedAnswerId="1213" CreationDate="2013-04-21T13:33:17.253" Score="8" ViewCount="420" Body="&lt;p&gt;I have a small device that's picking up small rocks from a pile and moving them to another place. Its a kind of crude way of trying to push the whole pile onto a bigger gear and hoping one of them is pushed to one of the spaces between gears and taken around and falls off on the other side of the spinning gear. Here I want to know if the machine successfully got a rock here, if not it should spin the gear until it turns up a single rock on the other side of it. If a rock is present at the spot, the gear should stop spinning until the rock is taken care of by the rest of the machine.&lt;/p&gt;&#xA;&lt;p&gt;What kind of device can I use to sense if I successfully succeeded in getting a rock on the other side of the gear?&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/JEHag.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is just a part of a bigger system. To sum up, I need the sensor to signal when a rock is signaled out and separated from the rest so it can continue work on that single rock.&lt;/p&gt;&#xA;&lt;p&gt;I am building this using an Arduino to move the gear around, so the sensor needs to be something that can be controlled by an Arduino.&lt;/p&gt;&#xA;" OwnerUserId="689" LastEditorUserId="19515" LastEditDate="2020-08-08T17:47:50.203" LastActivityDate="2020-08-08T17:47:50.203" Title="What kind of sensor do I need for knowing that something is placed at a position?" Tags="&lt;motor&gt;&lt;sensors&gt;" AnswerCount="4" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="1212" PostTypeId="2" ParentId="1211" CreationDate="2013-04-21T18:50:50.953" Score="2" Body="&lt;p&gt;Try an IR sender and receiver, facing each other, and the connection is obstructed by the rock.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/uO3Vi.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="583" LastEditorUserId="583" LastEditDate="2013-04-23T23:09:46.100" LastActivityDate="2013-04-23T23:09:46.100" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1213" PostTypeId="2" ParentId="1211" CreationDate="2013-04-22T01:35:31.983" Score="6" Body="&lt;p&gt;There are numerous options that could/should work here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As &lt;a href=&quot;https://robotics.stackexchange.com/a/1212/37&quot;&gt;mentioned by Elias&lt;/a&gt;, an IR sender/receiver is a good choice. This is similar to a &quot;break beam&quot; sensor. Essentially, when the beam of light between the transmitter and receiver is broken, the controller knows to do something about it. Similar to this would be an IR distance sensor, which records the distance from the sensor to an object by way of the angle of the light reflections. The problem with any sort of sensor based around light (such as IR) is that it can be &quot;corrupted&quot; easily by ambient light: the sun, light bulbs, camera flash, etc. The way to get around this is to pulse the light, only looking for light of a specific frequency (this is how IR TV remotes work). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Example sensors: &lt;a href=&quot;http://www.acroname.com/robotics/info/articles/sharp/sharp.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.acroname.com/robotics/info/articles/sharp/sharp.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are also things such as ultrasonic rangefinders which use sound instead of light:&#xA;&lt;a href=&quot;http://www.acroname.com/robotics/parts/R335-SRF06.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.acroname.com/robotics/parts/R335-SRF06.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the most complicated level, you could have a camera mounted that detects when a rock has been moved.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively, you could use a physical sensor to tell when a rock has been moved. This can be as simple as a push button platform - the button is pushed down when a rock is placed on top of it. Of course, this would only work if the rocks weighed enough to counteract the spring inside of a push button switch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as the type of sensor that can be used: Arduino is based around an AVR microcontroller. Microcontrollers can be used with pretty much any kind of sensor you can imagine, although some may be too fast to be handled by the slower clock of an micro-controller versus a micro-processor or require more processing power than is available. &lt;/p&gt;&#xA;" OwnerUserId="1197" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2013-04-23T09:27:03.460" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="1214" PostTypeId="1" AcceptedAnswerId="1215" CreationDate="2013-04-22T12:04:46.710" Score="6" ViewCount="161" Body="&lt;p&gt;In order to build and operate a &lt;a href=&quot;http://en.wikipedia.org/wiki/Space_elevator&quot;&gt;space elevator&lt;/a&gt; moving crafts and people into space, there are two big challenges that have not been solved yet:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Finding a cable with enough &lt;a href=&quot;http://simple.wikipedia.org/wiki/Tensile_strength&quot;&gt;tensile strength&lt;/a&gt;,&lt;/li&gt;&#xA;&lt;li&gt;Moving stuff along the cable at a reasonnable speed.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Apart from those two ones, what are the other technical challenges to solve, especially things that do not exist yet in robotics, and need to be invented?&lt;/p&gt;&#xA;" OwnerUserId="1198" LastActivityDate="2013-04-23T07:48:36.200" Title="Space elevator: What is still needed, apart from the cable and propulsion?" Tags="&lt;mobile-robot&gt;&lt;research&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1215" PostTypeId="2" ParentId="1214" CreationDate="2013-04-22T15:55:21.807" Score="5" Body="&lt;p&gt;I don't think there would be parts not yet existent in robotics. The elevator itself is pretty much a cabin moving on a rail. It may not be built from off-the-shelf components, but building it shouldn't be difficult.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are other reasons however, some of which are mentioned in the same Wikipedia article you have linked to. So additional to &quot;not having cables strong enough&quot; and &quot;the slow speed&quot;:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Cable wear: The cable used for the elevator will be partially below the clouds (subject to &lt;strong&gt;warmth&lt;/strong&gt;, &lt;strong&gt;dry air&lt;/strong&gt;, &lt;strong&gt;rain&lt;/strong&gt;, &lt;strong&gt;snow&lt;/strong&gt;, &lt;strong&gt;wind&lt;/strong&gt;, &lt;strong&gt;tornadoes&lt;/strong&gt; etc), partially in and above clouds (&lt;strong&gt;Humid&lt;/strong&gt;, &lt;strong&gt;Cold&lt;/strong&gt;), partially in vacuum (&lt;strong&gt;extreme cold&lt;/strong&gt;, &lt;strong&gt;no air pressure&lt;/strong&gt;), sometimes in the sun (&lt;strong&gt;extremely hot&lt;/strong&gt; outside atmosphere), sometimes in the shade (&lt;strong&gt;near 0 degrees&lt;/strong&gt; outside atmosphere) etc. So any cable used for the elevator should be able to resist &lt;em&gt;all&lt;/em&gt; these environments.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The situation is made worse by considering the &lt;strong&gt;friction&lt;/strong&gt; between the &quot;wheels&quot; of the elevator and the track, &lt;strong&gt;chemical reactions&lt;/strong&gt; with the environment, &lt;strong&gt;radiation&lt;/strong&gt;, &lt;strong&gt;solar flares&lt;/strong&gt; and even &lt;strong&gt;biological&lt;/strong&gt; reasons (for example an eagle deciding he doesn't like the cable, or a sort of moss evolving to take advantage (aka eat) the material)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;Cable repair: Sooner or later, the cable needs repair. There is no such thing as &quot;indestructible&quot;. Now imagine, how would you repair such a long cable? Surely, you can't just cut the bad parts and patch it, because the &quot;welded&quot; parts would probably not be strong enough. Replacing the whole cable would be an option which is quite expensive, given the special tough material and the long length. So, at least this issue would delay building the space elevator until they are sure it's doable.&lt;/li&gt;&#xA;&lt;li&gt;Safety of the elevator: One challenge is to be able to provide safety for the elevator. For example, how would you prevent asteroids from damaging it?&lt;/li&gt;&#xA;&lt;li&gt;Safety of the passengers: Another challenge is to provide safety for the passengers. With a slow speed, passing through the &lt;a href=&quot;http://en.wikipedia.org/wiki/Van_Allen_radiation_belts&quot; rel=&quot;nofollow&quot;&gt;Allen radiation belts&lt;/a&gt; is not healthy. This means that there should be adequate radiation shielding on the elevator, adding weight to it and making it harder to build.&lt;/li&gt;&#xA;&lt;li&gt;Safety of others: Yet another issue is providing safety for others, such as airplanes or space satellites. Most probably they would all need to become aware of the existence of this new concept, involving reprogramming a large number of air/space-crafts.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In conclusion, probably the most important thing hindering the construction of the space elevator is the construction of the cable. Not only should it be strong enough to withhold the stress, but it should be practically able to withstand any kind of environment. Other reasons would be minor nuisance in comparison, but still they are and would further delay the deployment of the space elevator.&lt;/p&gt;&#xA;" OwnerUserId="158" LastEditorUserId="158" LastEditDate="2013-04-23T07:48:36.200" LastActivityDate="2013-04-23T07:48:36.200" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="1216" PostTypeId="2" ParentId="1209" CreationDate="2013-04-22T19:49:16.897" Score="19" Body="&lt;p&gt;The answer to the larger question here is that when running the initial test of any vehicle that has the capability to harm itself, it should be sufficiently restrained until you are satisfied that it can be kept under control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the case of a quadcopter, this would involve tying a bit of string to the corners, leaving enough slack so that it can rise 6-12 inches, but not enough slack for it to flip over.&#xA;&lt;a href=&quot;http://prototypes.free.fr/p1127/p1127-1.htm&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/H0PBQ.jpg&quot; alt=&quot;Harrier testing&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you do that, you'll be able to test and troubleshoot with impunity.  Being scared to run a test is the fastest way to run no tests and get nothing done.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're suspicious of random air flows being to blame, you can try taking off from a wire mesh instead of a solid surface.  Try swapping the motor polarity on purpose, just to see how that affects the behavior.  Every experiment you can run in the controlled environment to understand the parameters of the system will help you troubleshoot more complicated control problems that arise later.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2015-03-12T15:44:53.983" LastActivityDate="2015-03-12T15:44:53.983" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1217" PostTypeId="2" ParentId="1211" CreationDate="2013-04-23T07:01:49.923" Score="1" Body="&lt;p&gt;I would put the whole conveyor belt on two axis, and:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Have the right axis as a pivot.&lt;/li&gt;&#xA;&lt;li&gt;Have the left part's axis rely on a switch button.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Because of the height between the spinning gear and the belt, the rock's impact will be powerful, making it easy to find a switch button that can detect it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is very cheap and robust to dust/misplacement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/4P5vC.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="1198" LastActivityDate="2013-04-23T07:01:49.923" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1218" PostTypeId="1" AcceptedAnswerId="1245" CreationDate="2013-04-23T14:54:11.400" Score="4" ViewCount="794" Body="&lt;p&gt;This is part two of my larger robot, it follows up what happens with the small rocks here: &lt;a href=&quot;https://robotics.stackexchange.com/questions/1211/what-kind-of-sensor-do-i-need-for-knowing-that-something-is-placed-at-a-position&quot;&gt;What kind of sensor do i need for knowing that something is placed at a position?&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now i am taking the rocks down a tube for placement. In the case they need to be altered so they always will stand up before they enter the tube. Obvioulsy a rectangular rock wont fit if it comes in sideways. The dimensions here are pretty small. The rocks are about 15 mm x 10 mm. The tube i use is actually a plastic drinking straw. And the material i use for the rest of the robot is Lego powered by step motors which draw the conveyor belts to move the rocks. The control is Arduino.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/J5nzR.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(sorry for the lousy illustration, if you know a good paint program for mac like the one used to draw the picture in my other post, please tell me :-))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The rocks will always enter one at a time and have as much time they need to be adjusted to fit and enter the tube so the fall down. The question is, how to ensure all rocks are turned the right way when they get to the straw. Im not sure if using Lego when building the robot is off topic here, but a solution involving lego is preferable. And it has to be controlled by an Arduino. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;General tips in how to split a complex task into subtasks robots can do is also good, is there any theory behind the most common sub tasks a job requires when designing multiple robots to do it?&lt;/p&gt;&#xA;" OwnerUserId="689" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2013-04-30T18:23:25.913" Title="How do I adjust objects on a conveyor belt into the proper orientation?" Tags="&lt;arduino&gt;&lt;motor&gt;&lt;microcontroller&gt;&lt;motion&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1219" PostTypeId="1" AcceptedAnswerId="1238" CreationDate="2013-04-23T15:56:36.040" Score="6" ViewCount="327" Body="&lt;p&gt;Imagine a &quot;drone&quot; and a target point on a 2d plane. Assuming the target is stationary, there are eight parameters:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;P = my position&#xA;Q = target's position&#xA;V = my velocity&#xA;I = my moment of inertia&#xA;w = my angular velocity&#xA;s = my angular position&#xA;T = max thrust&#xA;U = max torque&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The drone's job is to get to the target as fast as possible, obeying max torque and max thrust. There are only two ways to apply the torque, since this is only in a 2d plane. Thrust is restricted to only go in one direction relative to the orientation of the craft, and cannot be aimed without rotating the drone. Neglect any resistance, you can just pretend it is floating around in 2d outer space. Let's say the drone checks an equation at time interval &lt;code&gt;t&lt;/code&gt; (maybe something like every .01 seconds), plugs in the parameters, and adjusts its torque and thrust accordingly.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;What should the equations for thrust and torque be?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h3&gt;What have we tried?&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;We know that the time it takes for the drone to reach the target in the x-direction has to be the same for the same time in the y-direction. There is going to have to be some integral over time in each dimension to account for the changing thrust based on total thrust, and total thrust in each direction given the changing angular position. I have no idea how to tie the torque and thrust together in a practical way where a function can just be called to give what thrust and torque should be applied over the interval &lt;code&gt;t&lt;/code&gt; unless there is some other technique.&lt;/p&gt;&#xA;" OwnerUserId="1204" LastEditorUserId="37" LastEditDate="2013-06-20T14:23:33.983" LastActivityDate="2013-06-20T14:23:33.983" Title="Drone targeting" Tags="&lt;design&gt;&lt;algorithm&gt;&lt;kinematics&gt;&lt;navigation&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1221" PostTypeId="1" AcceptedAnswerId="1239" CreationDate="2013-04-24T11:22:53.977" Score="6" ViewCount="825" Body="&lt;p&gt;We are using &lt;a href=&quot;http://code.google.com/p/ardu-imu/&quot; rel=&quot;nofollow noreferrer&quot;&gt;ArduIMU (V3)&lt;/a&gt; as our Quadrotor's inertial measurement unit. (we have a separate board to control all motors, not with ArduIMU itself). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As mentioned &lt;a href=&quot;http://code.google.com/p/ardu-imu/wiki/Output#Output_Rate&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; , the output rate of this module is only at about 8hz. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Isn't it super slow to control a quadrotor ? I'm asking because as mentioned in &lt;a href=&quot;https://robotics.stackexchange.com/a/246/1137&quot;&gt;this answer&lt;/a&gt; a quadrotor needs at least 200hz of control frequency to easily stay in one spot, and our ESCs is configured to work with 450hz of refresh rate. Any working PID controller I saw before for Quadrotors used at least 200-400hz of control frequency.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I asked similar question before from Ahmad Byagowi (one of the developers of ArduIMU ) and he answered:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The arduimu calculates the dcm matrices and that makes it so slow. If&#xA;  you disable the dcm output, you can get up to 100 hz gyro, acc and so&#xA;  on.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So, what will happen if I disable DCM from the firmware ? Is it really important ? We did a simulation before and our PID controller works pretty well without DCM.&lt;/p&gt;&#xA;" OwnerUserId="1137" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2015-07-03T17:34:37.030" Title="Quadrotor control using ArduIMU" Tags="&lt;arduino&gt;&lt;quadcopter&gt;&lt;imu&gt;&lt;pid&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="1223" PostTypeId="2" ParentId="1205" CreationDate="2013-04-24T20:31:18.450" Score="3" Body="&lt;p&gt;Shafts can be constrained with e-clips, snap rings, shaft collars, set screws, spacers or threaded holes at the end of the shaft with washers.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;McMaster.com is usually a good place to look for different shaft collars and mechanisms, especially if you don't know the exact name.  They have an excellent picture reference and sorting feature for sizes and materials.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My advice is to go with a &quot;clamp-on shaft collar&quot;.&lt;br&gt;&#xA;&lt;a href=&quot;http://www.mcmaster.com/#shaft-collars/=mgq5da&quot; rel=&quot;nofollow&quot;&gt;http://www.mcmaster.com/#shaft-collars/=mgq5da&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Clamp-on shaft collars typically do not leave marks and are easy to assemble compared to other shaft constraint methods.   E-clips and snap rings typically require the shaft to be modified to allow for the insert of the clip.  &quot;Set screw shaft collars&quot; will leave an indentation on the shaft from the screw.  &lt;/p&gt;&#xA;" OwnerUserId="68" LastActivityDate="2013-04-24T20:31:18.450" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1227" PostTypeId="1" AcceptedAnswerId="1240" CreationDate="2013-04-25T17:21:33.500" Score="15" ViewCount="31249" Body="&lt;p&gt;I'm in the planning stages for a project using the Arduino Uno to control 8 distance sensors, and have run into a little road block, the Uno only has six input pins. So I'm wondering, is there any way for this to work? If so, how?&lt;/p&gt;&#xA;" OwnerUserId="498" LastActivityDate="2013-04-26T16:56:09.260" Title="Connecting More Than Six Analog Input Pins to arduino" Tags="&lt;arduino&gt;&lt;microcontroller&gt;&lt;input&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="1228" PostTypeId="2" ParentId="1227" CreationDate="2013-04-25T17:34:59.623" Score="5" Body="&lt;p&gt;Whenever you have more signals than appropriate inputs in a digital system, you likely need a multiplexer or simply mux. An M-to-N mux is a circuit that enables you to select which of M input signals you want to output to N mux outputs, usually using digital pins to make that selection.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Googling quickly, I found this solution for the Arduino Uno: a &lt;a href=&quot;http://mayhewlabs.com/products/mux-shield-2&quot;&gt;Mux Shield&lt;/a&gt;. Hope that helps!&lt;/p&gt;&#xA;" OwnerUserId="95" LastActivityDate="2013-04-25T17:34:59.623" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1229" PostTypeId="1" CreationDate="2013-04-14T21:02:41.447" Score="5" ViewCount="6423" Body="&lt;p&gt;I have a robot with two wheels/motors and each has a quadrature encoder for odometry.  Using the &lt;a href=&quot;http://www.pololu.com/catalog/product/1218&quot; rel=&quot;nofollow&quot;&gt;wheel/motor/encoder combo from Pololu&lt;/a&gt;, I get 48 transition changes per rotation and my motors give me a max of 400RPM.  I've found it seems to miss some of the encoder state changes with the &lt;a href=&quot;https://github.com/pololu/libpololu-avr/tree/master/src/PololuWheelEncoders&quot; rel=&quot;nofollow&quot;&gt;Pololu wheel encoder library&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would I run into issues or limitations on my Arduino Uno using interrupts to track the quadrature encoders while using PWM to drive my motors through an H-bridge chip?  &lt;/p&gt;&#xA;" OwnerUserId="1148" OwnerDisplayName="Robert" LastEditorUserId="126" LastEditDate="2013-04-25T21:31:54.767" LastActivityDate="2013-07-08T05:03:09.690" Title="Limits of PWM, Timers and Interrupts?" Tags="&lt;arduino&gt;&lt;pwm&gt;&lt;encoding&gt;&lt;interrupts&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1230" PostTypeId="2" ParentId="1229" CreationDate="2013-04-14T22:54:57.107" Score="1" Body="&lt;p&gt;&lt;strong&gt;Yes you would: no current [Arduino] on the market (that I know of) can effectively track the state changes without missing a few state changes.&lt;/strong&gt; (Maybe the Due would be better or another board with a higher clock rate.) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Interrupts can help a little, but:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I believe it stops &lt;em&gt;everything&lt;/em&gt; else on the chip; the motors might stop slightly when the interrupt is triggered.&lt;/li&gt;&#xA;&lt;li&gt;You may have problems if two interrupts fire at the same time&lt;/li&gt;&#xA;&lt;li&gt;After the code is processed, I believe I read it has a little delay before returning to what it was doing.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Interrupts are not the best solution for this problem, but that is the only thing you can do with modern technology. However, if you wanted to still wanted interrupts, you &lt;em&gt;could&lt;/em&gt; have another &lt;code&gt;ATmel328&lt;/code&gt; running on the breadboard, with interrupts, that when the main chip sends a message, it can send the number of turns for each wheel since it sent it last. I don't know how it would work when a interrupt is called, but maybe if you used a developed library, such as &lt;a href=&quot;http://arduino.cc/en/Reference/Wire&quot; rel=&quot;nofollow&quot;&gt;Arduino's Wire Library&lt;/a&gt;, it might fix the kinks when it is called.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Good luck.&lt;/p&gt;&#xA;" OwnerUserId="824" OwnerDisplayName="Annonomus Person" LastActivityDate="2013-04-14T22:54:57.107" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="1231" PostTypeId="2" ParentId="1229" CreationDate="2013-04-15T17:03:11.473" Score="2" Body="&lt;p&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Interrupt_handler&quot; rel=&quot;nofollow noreferrer&quot;&gt;Interrupt service routines&lt;/a&gt; should always do the &lt;strong&gt;absolute minimum&lt;/strong&gt;. Remember that while your MCU is servicing an interrupt, it is doing &lt;strong&gt;nothing else&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a simple quadrature encoder, it should be possible to have a pair of ISR's, one triggered by a change on the A channel, the other triggered by a change on the B channel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pretty much the only thing these ISRs should do is identify whether that change means the position variable should be incremented or decremented, then update the position and end the ISR and &lt;em&gt;possibly&lt;/em&gt; update a state transition time (if you are using this information to better estimate velocity&lt;sup&gt;&amp;dagger;&lt;/sup&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&amp;dagger;&lt;sub&gt; See &lt;a href=&quot;http://www.mate.tue.nl/mate/pdfs/10617.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;Velocity and acceleration estimation for optical incremental encoders&lt;/em&gt; by R.J.E. Merry, M.J.G. van de Molengraft, M. Steinbuch&lt;/a&gt;&lt;/sub&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With a pair of standard quadrature encoders, 48 transition changes per rotation and a maximum of 400RPM, your cross channel interrupts shouldn't be more frequent than 640 times a second, which should be well within the capability of a 16MHz processor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An individual channel may produce more interrupts more frequently than that (for instance when the detector is sat on the edge) but missing those state changes does not have to affect the final position value, and there will always be a clear 1.5ms between that channel stabilising and the other channel activating.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, as long as you can service every A/B and B/A transition, it doesn't matter if you occasionally fail to process an A/A or B/B transition as long as the state of both A and B is taken into account at the next A/B or B/A transition.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that if you don't need to calculate the time for your A-B and B-A transition (to calculate velocity more responsively with low resolution encoders) then you would probably be batter off having a fixed 640Hz/1.5ms timer based interrupt service routine that looks at both A and B channels, as suggested by &lt;a href=&quot;https://robotics.stackexchange.com/a/1536/37&quot;&gt;Tim Wescott&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="37" OwnerDisplayName="Mark Booth" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2013-07-04T17:19:40.403" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1232" PostTypeId="1" CreationDate="2013-04-10T17:53:49.733" Score="20" ViewCount="19729" Body="&lt;p&gt;I would like to create an Arduino based robot with 2 wheels, quadrature encoders on each wheel, a H-bridge driver chip (or motor controller) and a caster.  I want to use the PID library to ensure the speed is proportional to the distance to travel.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;At a conceptual level, (assuming the motors do not respond identically to PWM levels) how can I implement the PID control so that it travels in a straight line and at a speed proportional to the distance left to travel? &lt;/p&gt;&#xA;" OwnerUserId="1148" OwnerDisplayName="Robert" LastEditorUserId="126" LastEditDate="2013-04-25T21:31:16.747" LastActivityDate="2015-05-06T08:30:57.857" Title="How can I use the Arduino PID library to drive a robot in a straight line?" Tags="&lt;arduino&gt;&lt;pid&gt;&lt;driver&gt;&lt;encoding&gt;" AnswerCount="4" CommentCount="1" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1233" PostTypeId="2" ParentId="1232" CreationDate="2013-04-10T18:50:03.143" Score="1" Body="&lt;p&gt;If you're not using a single axle to drive both wheels, the only solutions I can see are to add either a 3-axis accelerometer or another sensor to detect the orientation of the robot, and adjust the signals to each motor accordingly.&lt;/p&gt;&#xA;" OwnerDisplayName="John" LastActivityDate="2013-04-10T18:50:03.143" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1234" PostTypeId="2" ParentId="1232" CreationDate="2013-04-11T11:02:58.220" Score="19" Body="&lt;h1&gt;Specifics&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Looking at the &lt;a href=&quot;http://playground.arduino.cc//Code/PIDLibaryBasicExample&quot; rel=&quot;nofollow noreferrer&quot;&gt;PID Basic Example&lt;/a&gt; I think that you just need to instantiate two copies of PID controller, one for each wheel, encoder and pwm:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;PID leftPID(&amp;amp;InputLeft, &amp;amp;OutputLeft, &amp;amp;SetpointLeft,2,5,1, DIRECT);&#xA;PID rightPID(&amp;amp;InputRight, &amp;amp;OutputRight, &amp;amp;SetpointRight,2,5,1, DIRECT);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then, in your &lt;code&gt;loop()&lt;/code&gt; equivalent, you just read both encoders, pass each encoder value to the relevant &lt;code&gt;PID&lt;/code&gt; and finally write out both PWM values.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For now &lt;code&gt;SetpointLeft&lt;/code&gt; and &lt;code&gt;SetpointRight&lt;/code&gt; can actually point at the same value, but defining them separately like this allows you to add the capability to turn later.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Concepts&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;While this may work for the basic case, whether it is enough really depends on how accurate you need your straight line to be.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Dead_reckoning&quot; rel=&quot;nofollow noreferrer&quot;&gt;Dead reckoning&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Given that you have encoders on each wheel, if you run two PID loops and compare each wheels' &lt;a href=&quot;http://www.answers.com/topic/following-error&quot; rel=&quot;nofollow noreferrer&quot;&gt;following error&lt;/a&gt;, then you can potentially calculate your maximum &lt;a href=&quot;http://en.wikipedia.org/wiki/Abbe_error&quot; rel=&quot;nofollow noreferrer&quot;&gt;abbe error&lt;/a&gt; over the distance, assuming your wheels don't slip. If that error is smaller than your requirements, then &lt;em&gt;dead reckoning&lt;/em&gt; is all you need.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your wheels are prone to slipping however, then you may have hidden following error that your control system can't detect and you will need some way to detect a slip or calculate position independently of your wheel encoders and then use higher level software to correct demanded wheel positions/velocities to maintain a straight line.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Relative position determination&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;As &lt;a href=&quot;https://robotics.stackexchange.com/a/1233/37&quot;&gt;John suggests&lt;/a&gt;, you may be able to use an accelerometer to determine position, but given their accuracy and the effect of accumulated errors over time, you may be better off using the accelerometer data to detect and correct for wheel slippage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In mobile robotics, &lt;a href=&quot;https://robotics.stackexchange.com/questions/tagged/kalman-filter&quot;&gt;Kalman filtering&lt;/a&gt; techniques are commonly used to fuse the data from multiple sources, such as an accelerometer and the wheel encoders to better determine current position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Whatever you do with relative position determination however, over time the position you believe yourself to be in &lt;strong&gt;will&lt;/strong&gt; drift away from your actual physical position.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Absolute position determination&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The only way to get around this is to have a reference point outside of your vehicles frame of reference.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A roomba for instance generally uses dead reckoning for moving around a room, but whenever it needs to dock, it looks for a beam of infra-red light sent out by the charging dock. As the roomba randomly moves through that beam, it detects it, locks onto the beam and follows it back to its source. In combination with it's bump sensors, it can position itself accurately on the charging contacts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For your robot, it might have a home position, where it can move back to and detect that it is at that known location. At that point it knows exactly where it is and can report how far it's calculated position is from it's actual position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another option, if you need your robot to travel in a straight line over hundreds of meters would be to switch to a different technique, such as adding an &lt;a href=&quot;https://www.sparkfun.com/products/10710&quot; rel=&quot;nofollow noreferrer&quot;&gt;Arduino GPS shield&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;A combination of techniques&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Ultimately, depending on your accuracy requirements, you may need to use a combination of these techniques.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If a guide beam is possible, you may be able to do what you want very simply with an invisible &lt;a href=&quot;https://robotics.stackexchange.com/a/1527/37&quot;&gt;line following technique&lt;/a&gt;. If you need to move in any arbitrary straight line in an constrained area, then like the roomba you may be able to use a pair of guide beams (at right angles to each other) to allow you to correct your synthesised position in one Cartesian axis every time the robot passes one of the beams.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are lots of options here, and what you chose will depend on what you need.&lt;/p&gt;&#xA;" OwnerUserId="37" OwnerDisplayName="Mark Booth" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2013-08-06T14:49:02.063" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1235" PostTypeId="1" AcceptedAnswerId="1241" CreationDate="2013-04-25T22:40:55.590" Score="9" ViewCount="4957" Body="&lt;p&gt;How does rocker-bogie mechanism keep the body flat / keep the solar panel almost flat all the time? I know there is an differential system that connect both rocker bogie (left and right) together. But how does it actually work?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;&lt;strong&gt;Edited:&lt;/em&gt;&lt;/strong&gt; Please provide relevant references.&lt;/p&gt;&#xA;" OwnerUserId="1167" LastEditorUserId="1167" LastEditDate="2013-04-26T04:08:10.413" LastActivityDate="2013-10-01T21:52:42.430" Title="How does rocker bogie keep the body almost flat?" Tags="&lt;wheeled-robot&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1238" PostTypeId="2" ParentId="1219" CreationDate="2013-04-26T05:41:29.560" Score="4" Body="&lt;p&gt;You need to do a bit of Calculus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;First a note about your input parameters:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Actually acceleration depends on Force and mass. You don't specify what units your max. thrust is in so let's assume your max. thrust &lt;em&gt;is&lt;/em&gt; your acceleration. We can do the same thing with your max. torque then and assume that it is also your acceleration (angular) and forget about moment of inertia. Actually you would divide torque by moment of inertia to get your angular acceleration, &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you can simplify by giving your drone two static properties:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; thrust as max acceleration&#xA; and torque as max angular acceleration&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;instead of giving it four properties&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Force and mass&#xA;and Torque and MoI.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;And now crunch the numbers:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now you have your drone's Position: Px, Py, S -- it's first derivative, velocity: Vx, Vy, W -- and it's second derivative, acceleration: Ax, Ay, U&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Actually Ax, Ay will be calculated from S (angular position) and T (acceleration) by:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Ax = T ×  cos(S)&#xA;Ay = T × -sin(S)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;That should get you a good way towards generating your formulas. Now you want to project a line from P that intersects Q in the least amount of time. Of course, it'll be a curve, not a straight line, so you'll have to use Calculus.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could try asking the same question on &lt;a href=&quot;http://math.stackexchange.com&quot;&gt;math.stackexchange.com&lt;/a&gt; for specific formulas.&lt;/p&gt;&#xA;" OwnerUserId="1075" LastEditorUserId="1075" LastEditDate="2013-04-26T21:19:34.767" LastActivityDate="2013-04-26T21:19:34.767" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1239" PostTypeId="2" ParentId="1221" CreationDate="2013-04-26T13:25:38.780" Score="4" Body="&lt;p&gt;I updated ArduIMU's firmware and successfully got 100hz of output without disabling normalization.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks to Kalman filter firmware of ArduIMU I got up to 180hz of output plus removing all noises.&lt;/p&gt;&#xA;" OwnerUserId="1137" LastEditorUserId="1137" LastEditDate="2013-06-21T06:32:11.760" LastActivityDate="2013-06-21T06:32:11.760" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1240" PostTypeId="2" ParentId="1227" CreationDate="2013-04-26T16:56:09.260" Score="13" Body="&lt;p&gt;There's more than one way to do it (&lt;a href=&quot;http://en.wikipedia.org/wiki/There%27s_more_than_one_way_to_do_it&quot;&gt;TMTOWTDI&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are a several ways to connect 8 analog inputs to an Arduino.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Add an analog multiplexer, as georgebrindeiro suggested. Such as: &lt;a href=&quot;http://shieldlist.org/appliedplatonics/analoginput&quot;&gt;(a)&lt;/a&gt;, &lt;a href=&quot;http://shieldlist.org/mayhewlabs/mux&quot;&gt;(b)&lt;/a&gt;, &lt;a href=&quot;http://shieldlist.org/criticalvelocity/monstermux&quot;&gt;(c)&lt;/a&gt;, &lt;a href=&quot;http://blueberryde.com/shop/24-channel-analog-expander-shield/&quot;&gt;(d)&lt;/a&gt;, etc.&lt;/li&gt;&#xA;&lt;li&gt;Replace the Arduino with one that has enough analog inputs already built-in. Such as the Arduino Mini with 8 analog inputs, the Arduino Due with 12 analog inputs &lt;a href=&quot;http://arduino.cc/en/Main/ArduinoBoardDue&quot;&gt;(b)&lt;/a&gt;, &lt;a href=&quot;http://arduino.cc/en/Main/ArduinoBoardMini&quot;&gt;(a)&lt;/a&gt; the Arduino Mega with 16 analog inputs &lt;a href=&quot;http://arduino.cc/en/Main/arduinoBoardMega&quot;&gt;(b)&lt;/a&gt;, the Teensy 3.0 with 14 analog inputs &lt;a href=&quot;http://forum.jeelabs.net/node/1429.html&quot;&gt;(c)&lt;/a&gt;, etc.&lt;/li&gt;&#xA;&lt;li&gt;Add one or more external ADCs, and connect it to digital pins of your CPU. Such as: Arduino 4-20mA Shield with 16-bit ADC &lt;a href=&quot;http://erdosmiller.com/products/arduino-4-20ma-shield&quot;&gt;(a)&lt;/a&gt;; ADS1115 16-Bit ADC -- with 4 of these boards, 2 digital pins from the Arduino are used to read 16 analog inputs &lt;a href=&quot;http://learn.adafruit.com/adafruit-4-channel-adc-breakouts&quot;&gt;(b)&lt;/a&gt;; MCP3208 8 channel 12 bit SPI ADC &lt;a href=&quot;http://arduino.cc/forum/index.php/topic,18827.0.html&quot;&gt;(c)&lt;/a&gt;; 8-channel 16-bit Raspi analog board &lt;a href=&quot;http://hackaday.com/2012/09/14/a-truly-professional-raspi-analog-input/&quot;&gt;(d)&lt;/a&gt;; Arduino and the LTC2440 24bit ADC &lt;a href=&quot;http://blog.arduino.cc/2012/07/11/arduino-and-the-ltc2440-24bit-adc/&quot;&gt;(e)&lt;/a&gt; &lt;a href=&quot;http://blog.arduino.cc/2010/11/29/tired-of-a-10-bit-res-hook-up-a-better-analog-to-digital-converter/&quot;&gt;(f)&lt;/a&gt;; &quot;The Brick&quot; 8 Single Ended 16 Bit Analog Inputs &lt;a href=&quot;http://arduino.cc/forum/index.php?topic=69358.0&quot;&gt;(g)&lt;/a&gt;; etc.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;p.s.: Multiplexing analog inputs requires an &quot;analog multiplexer&quot; -- most multiplexers are &quot;digital muxes&quot; which won't work with analog inputs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;p.p.s.:&#xA;All the ultrasonic distance sensors I've used only require digital I/O pins.&#xA;What kind of distance sensors are you using?&lt;/p&gt;&#xA;" OwnerUserId="187" LastActivityDate="2013-04-26T16:56:09.260" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1241" PostTypeId="2" ParentId="1235" CreationDate="2013-04-26T21:01:48.730" Score="10" Body="&lt;p&gt;I was looking for something similar, and I found &lt;a href=&quot;http://www.alicesastroinfo.com/2012/07/mars-rover-rocker-bogie-differential/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mars Rover Rocker-Bogie Differential&lt;/a&gt; to be really helpful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With my level of understanding it took me a while. But the link my professor provided me with really helped me, it has decent animations to help understanding the concept. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Okay so here's my understanding of the mechanism. &#xA;The differential system essentially could consist of either of these two mechanisms:&#xA;The Differential Gearbox and the Differential Bar.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The differential Gearbox consists of three gears. The one in the middle (2) is connected to the body, while the ones on the side (1) rockers of the system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/sZMdI.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you were to pick the rocker bogie up and hold the body intact, and tilt one of the side rocker downwards, the gears in the gearbox would make the rocker on the other side tilt upward. If you tilt it upwards, the other one would tilt it downwards. More complex system use more gears to make the whole system more sensitive to the movements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for the Differential bar, it's not used on the rover as it interferes with the solar panel, but it works in a similar way. Except its rod that connects the two rockers. And this rod is pivoted in the middle onto the body. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, as far as my understanding goes, look at the picture and consider the gears on either side (Gears numbered 1). If one of the gear(let's say the top one) is turning clockwise, it would make Gear no. 2 (which sits in the grove of both of the other gears.) move anti-clockwise. Which in turn would make the other No.1 Gear turn anti-clock wise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; ALL THE GEARS FIT INTO THE GROOVE OF EACH OTHER. So any rotation that takes place in this system affects the other two gears. And the gears are attached or arranged in such a way that No.1's are running in the opposite direction of each other. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/icHbj.jpg&quot; alt=&quot;Here&amp;#39;s the differential Bar on Curiosity&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here you can see the differential Bar on Curiosity.&lt;/p&gt;&#xA;" OwnerUserId="1213" LastEditorUserId="1106" LastEditDate="2013-10-01T21:52:42.430" LastActivityDate="2013-10-01T21:52:42.430" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1245" PostTypeId="2" ParentId="1218" CreationDate="2013-04-28T19:52:52.320" Score="4" Body="&lt;p&gt;One way to do this is complicated, involving computer vision and a robot arm or other manipulator that can directly affect the orientation of each rock.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The low-tech way to do it would be to use a separate conveyor that gave you one rock at a time, and use walls to funnel it into a gate that matches the internal dimensions of the straw.  You would then just detect when the rock begins to push on the funnel walls (instead of travelling through) and knock it backwards to try again.  After a few tries, it should end up in the proper orientation (or you can give up and reject it at that point).  An even simpler way would be to skip the detection and just oscillate the funnel continuously, which would be safe if you're assured that each rock is guaranteed to have a working orientation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's similar to &lt;a href=&quot;http://www.faqs.org/patents/app/20130075226&quot; rel=&quot;nofollow&quot;&gt;this patent&lt;/a&gt; which suggests a single wall, with the other side being open for improperly-aligned objects to fall off the belt.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2013-04-30T18:23:25.913" LastActivityDate="2013-04-30T18:23:25.913" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1246" PostTypeId="1" AcceptedAnswerId="1247" CreationDate="2013-04-29T04:41:07.797" Score="8" ViewCount="14410" Body="&lt;p&gt;So I have a quadrocopter, it does come with a remote but I intend to run certain modifications to the copter, like installing a camera, a mechanical manipulator, and other random modifications. The remote that comes with the copter isn't flexible enough to help with such functions and plus it lacks any more buttons. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was wondering if I could somehow program the quadrocopter to respond to my Xbox controller. I was planning on using my laptop's Bluetooth connection to talk to copter. The Xbox controller which is connected to the computer would be then used to control the quadrocopter. So my question is, how exactly do I program the controller? How do I go about making all of this possible? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I understand this question is really vague and that there are too many options out there, but I do need help figuring this out. &lt;/p&gt;&#xA;" OwnerUserId="1213" LastEditorUserId="350" LastEditDate="2014-12-11T20:10:30.103" LastActivityDate="2017-06-12T19:20:30.790" Title="Using an Xbox controller to fly a Quadrocopter" Tags="&lt;quadcopter&gt;" AnswerCount="5" CommentCount="2" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1247" PostTypeId="2" ParentId="1246" CreationDate="2013-04-29T05:55:19.303" Score="9" Body="&lt;p&gt;Yes, in general this idea is perfectly plausible. However the method is going to be specific to your setup. I.e. the operating system you are using on your control computer and the onboard controller that you are employing. In our lab we use an &lt;a href=&quot;http://store.diydrones.com/ArduPilot_Mega_kit_p/kt-apm-01.htm&quot;&gt;Ardupilot Mega&lt;/a&gt; as our onboard controller for some of our quadrotors. To solve this problem I used the &lt;a href=&quot;https://www.kernel.org/doc/Documentation/input/joystick-api.txt&quot;&gt;Linux joystick API&lt;/a&gt; to acquire the data from the Xbox controller (or a PS3 controller for that matter). I can then send this data to an Arduino that I have used to replace the RC receiver or I can send it directly to the Ardupilot via Xbee using the &lt;a href=&quot;http://qgroundcontrol.org/mavlink/start&quot;&gt;Mavlink protocol&lt;/a&gt;. If you can provide more detail about your setup then I may be able to provide a more detailed response.&lt;/p&gt;&#xA;" OwnerUserId="177" LastActivityDate="2013-04-29T05:55:19.303" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1248" PostTypeId="2" ParentId="1246" CreationDate="2013-04-29T13:24:20.040" Score="5" Body="&lt;p&gt;This is easy actually!&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;(ROS + Joy package) -- &lt;a href=&quot;http://www.ros.org&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.ros.org&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;XBee (as mentioned by @DaemonMaker)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A simple program that takes the joy_node publications and sends them out over XBee. This could be as simple as &lt;code&gt;rostopic echo /joy &amp;gt;&amp;gt; /dev/ttyS0&lt;/code&gt; or such, depending on how much control you have over the receiving end.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Note: We use playstation controllers on all our robots. Highly recommended.&lt;/p&gt;&#xA;" OwnerUserId="163" LastEditorUserId="9176" LastEditDate="2017-06-12T19:20:30.790" LastActivityDate="2017-06-12T19:20:30.790" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1249" PostTypeId="1" CreationDate="2013-04-29T13:26:58.007" Score="5" ViewCount="240" Body="&lt;p&gt;Expanding upon the title, I am querying the use of robotic skeletons to augment human strength and speed. If such a robot had the capacity for example to bear weight 5 times heavier than the wearer and move its robotic limbs twice as fast as the wearer, is there not a danger because such powerful and sharp movements could break their bones and seriously injure them because it moves beyond their human capabilities?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The robots means of producing movement I would think is important here but unsure how so. The nature of passive or actively powered movement and when each mode is used will also determine performance of the exoskeleton. I am not well versed in this area so will appreciate any feedback.&lt;/p&gt;&#xA;" OwnerUserId="1233" LastEditorUserId="158" LastEditDate="2013-04-29T17:00:50.897" LastActivityDate="2013-04-29T17:15:03.000" Title="Would the strength and speed of a robot skeleton be a danger to its wearer?" Tags="&lt;mobile-robot&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1250" PostTypeId="2" ParentId="1249" CreationDate="2013-04-29T17:15:03.000" Score="6" Body="&lt;p&gt;&lt;strong&gt;Yes&lt;/strong&gt;, an exoskeleton would definitely be a danger to its wearer, &lt;strong&gt;if it were not properly controlled&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In science fiction this problem is solved by the system requiring the human wearer to bear some of the weight themselves. Thus the 5x multiplier would still require the wearer of the exoskeleton to exert their full effort to lift the 1/5 of the weight themselves.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similarly, the user would only be able to move more quickly because it is less effort to move a light weight than a heavy one, so in this case the exoskeleton is reducing the apparent weight to allow it to be moved more quickly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any control system which allowed the wearer of the exoskeleton to be injured through normal use of the exoskeleton would not be considered safe and would require the control system to undergo another risk assessment and the problems with the control system to be removed.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Incidentally, this is no different to a robot being strong enough to damage itself. I once worked on a robot which was more than capable of ripping straight through the protective cage which surrounded it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The cage was not there to protect humans outside of the cage from an &lt;em&gt;out of control robot&lt;/em&gt;, as this was considered a very low risk. It was primarily to prevent humans getting into the working envelope of a properly controlled robot, because &lt;em&gt;out of control humans&lt;/em&gt; were considered a &lt;strong&gt;much greater risk&lt;/strong&gt; (mostly to themselves *8').&lt;/p&gt;&#xA;" OwnerUserId="37" LastActivityDate="2013-04-29T17:15:03.000" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1251" PostTypeId="2" ParentId="1246" CreationDate="2013-04-29T19:40:02.837" Score="4" Body="&lt;p&gt;Xbox and PS3 controllers are very versatile, it is true, but don't forget about range. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bluetooth was only intended for short range operations out to about 10m (33ft.) for class 2 devices (xbox and ps3 controllers have class 2 transmitters) and 100m(330ft) for class 1 devices. Flying devices could most certainly go beyond that very quickly and you will risk losing control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You're better off using an RC radio. Even though they use the same part of the RF spectrum (2.4GHz), RC radios typically have more power and are good for a couple of miles in good weather. You &lt;strong&gt;can&lt;/strong&gt; get RC controllers with 8 channels and more, thereby offering greater flexibility of number of controlled devices.&lt;/p&gt;&#xA;" OwnerUserId="1075" LastEditorUserId="1075" LastEditDate="2013-09-05T19:47:06.317" LastActivityDate="2013-09-05T19:47:06.317" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1253" PostTypeId="1" AcceptedAnswerId="1254" CreationDate="2013-04-30T11:34:27.403" Score="3" ViewCount="719" Body="&lt;p&gt;While doing a literature review of mobile robots in general and mobile hexapods in particular I came across a control system defined as &quot;Task level open loop&quot; and &quot;Joint level closed loop&quot; system.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The present prototype robot has no external sensors by&#xA;  which its body state may be estimated. Thus, in our simulations and experiments, we have used joint space closed&#xA;  loop (“proprioceptive”) but task space open loop control&#xA;  strategies.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The relevant paper is &lt;a href=&quot;http://ai.eecs.umich.edu/RHex/Papers/ijrr2001.pdf&quot; rel=&quot;nofollow&quot;&gt;A simple and highly mobile hexapod&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the meaning of the terms &quot;joint-level&quot; and &quot;task-level&quot; in the context of the Rhex hexapod?&lt;/p&gt;&#xA;" OwnerUserId="333" LastEditorUserId="110" LastEditDate="2016-01-03T13:55:22.263" LastActivityDate="2016-01-03T13:55:22.263" Title="What is the difference between Task-Level and Joint-Level Control Systems?" Tags="&lt;mobile-robot&gt;&lt;control&gt;&lt;walking-robot&gt;&lt;hexapod&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="1254" PostTypeId="2" ParentId="1253" CreationDate="2013-04-30T18:18:07.993" Score="7" Body="&lt;p&gt;These are just terms to describe the &quot;layers&quot; of control on the robot.  The &quot;joint level&quot; means the position of each actuator (leg), and the &quot;task level&quot; means the current goal of the robot (like go forward, go east, go to location X, etc).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This paragraph is about sensing.  There are (apparently) position sensors in all of the leg joints, so the robot is capable of &lt;a href=&quot;http://en.wikipedia.org/wiki/PD_controller&quot;&gt;closed loop&lt;/a&gt; control at that level -- no user intervention needed.  (&quot;Proprioceptive&quot; is a $5 word for &quot;I know where my legs are because I can sense them&quot;.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, having no external sensors means that the robot can't tell where it is in relation to the world and as a result it can't determine what action it should take to accomplish its goals.  So, it must run as &lt;a href=&quot;http://en.wikipedia.org/wiki/Open-loop_controller&quot;&gt;open loop&lt;/a&gt;.  Presumably this means that they are either giving it a pre-scripted set of actions, or directing it via remote control.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, the task-level control handles the &quot;go forward&quot; concept, but the joint-level control handles the uneven terrain underfoot.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2013-04-30T18:18:07.993" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1255" PostTypeId="2" ParentId="1219" CreationDate="2013-04-30T22:32:37.103" Score="3" Body="&lt;p&gt;The solution is actually not quite linear. There are at least two cases:&#xA;1) The fastest solution does not require maximum turning at all times.&#xA;2) The fastest solution does require maximum turning at all times.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For an example of 1), consider the goal is straight ahead of the drone.&#xA;For an example of 2), consider the goal is very close, but straight behind the drone; the fastest solution is a circle-like path.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, the problem is somewhat under-specified, unless you also add desired velocity/spin at the time of arrival.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, the problem, as stated (even with adding mass), requires solving discontinuous differential equations in an underspecified problem system. There may exist a closed form solution to this, but when I've had to do this (in simulation systems, not real-world systems) I've ended up using simple planners and PID-type beahviors, rather than finding the &quot;optimal&quot; solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, one simple planner could be to first apply torque in a closed form to turn to face the desired target point at spin zero (this is a simple quadratic equation) and then turn on max thrust; you will get to the point (at a pretty high velocity.)&#xA;If you want to get to the point with velocity 0, then you have to reverse thrust at the middle of the trajectory.&lt;/p&gt;&#xA;" OwnerUserId="88" LastActivityDate="2013-04-30T22:32:37.103" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1256" PostTypeId="2" ParentId="1207" CreationDate="2013-04-30T22:46:54.443" Score="1" Body="&lt;p&gt;You cannot use the synchronous &quot;pulseIn()&quot; function to read multiple parallel inputs.&#xA;In general, in embedded systems, you will end up writing a loop that runs as fast as possible, over and over, and does the following:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) read inputs&#xA;2) calculate updates to state&#xA;3) write outputs&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ideally, this loop runs many thousands of times per second.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm assuming from context that by &quot;RX/TX&quot; you mean RC-hobby-radio-control PWM pulses.&#xA;The problem you're having is reading the width of more than one pulse at the same time.&#xA;There are two ways to approach this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) Each time through the loop, read both input pins. If a pin is high and was previously low, write the current time (in microseconds) to a variable tracking that pin. If the pin is low and was previously high, write the difference between current time, and the value in the tracking variable, to a variable tracking &quot;last length for pin X.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) Install pin change interrupt handlers for the input pins. Each time one of the pins change, run the algorithm above, from within the interrupt handler. Because of possible race conditions, you need to check both pins for each pin change interrupt.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will note with both these approaches that precision is pretty crummy in the Arduino environment. There are a few reasons for this, including interrupts used to run the milliseconds timer, and significant overhead in the digitalRead() function as compared to reading ports directly. To get high-quality input, you may need to read ports directly (check the Atmega data sheets for how) and you may also want to poll all the way until the pulse goes low in the interrupt handler (beware that a second pin may go high while the first pin is already high.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This may sound complex if you're new to programming microcontrollers, but it's really the kind of thing that's done every day by those who actual work with this. This is one of several reasons why you need a fair bit of education and experience to become a seasoned developer ;-)&lt;/p&gt;&#xA;" OwnerUserId="88" LastActivityDate="2013-04-30T22:46:54.443" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1257" PostTypeId="1" CreationDate="2013-05-02T13:13:34.547" Score="3" ViewCount="1830" Body="&lt;p&gt;I have tried following a number of guides on the internet but most of them fall down as libfreenect does not exist in opkg, which is the apt-get of Angstrom. Has anyone got it working and if so what is the method?&lt;/p&gt;&#xA;" OwnerUserId="925" LastActivityDate="2013-07-17T15:35:38.870" Title="How can I get Windows Kinect working on Angstrom on Beaglebone?" Tags="&lt;kinect&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1258" PostTypeId="2" ParentId="1257" CreationDate="2013-05-02T16:42:56.500" Score="1" Body="&lt;p&gt;Would it be possible to build it from source?  &lt;a href=&quot;https://groups.google.com/forum/#!msg/beagleboard/so6aGYf7Two/Ve0wLqQPetsJ&quot; rel=&quot;nofollow&quot;&gt;This thread on Google Groups&lt;/a&gt; talks about how to do that on Ubuntu 10.10 (although it doesn't work on future versions):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Install Libfreenect0.0: &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;code&gt;sudo apt-get install libc6 libusb-1.0-0 udev libglu1-mesa libgl1-mesa- &#xA;  glx libsm6 libice6 libx11-6 libxext6 libglut3 libxmu6 libxi6 libstdc+ &#xA;  +6 libgcc1&lt;/code&gt; &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;code&gt;wget http://ftp.us.debian.org/debian/pool/main/libf/libfreenect/libfreenect0.0_0.0.1+20101211+2-2_armel.deb&lt;/code&gt; &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;code&gt;sudo dpkg -i libfreenect0.0_0.0.1+20101211+2-2_armel.deb&lt;/code&gt; &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;install libfreenect-dev: &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;code&gt;sudo apt-get install libglut3-dev libxi-dev libxmu-dev libc6-dev &#xA;  libglu1-mesa-dev libgl1-mesa-dev libsm-dev libice-dev libx11-dev &#xA;  libxext-dev libstdc++6-4.5-dev libusb-1.0-0-dev pkg-config&lt;/code&gt; &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;code&gt;wget http://ftp.us.debian.org/debian/pool/main/libf/libfreenect/libfreenect-dev_0.0.1+20101211+2-2_armel.deb&lt;/code&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;code&gt;sudo dpkg -i libfreenect-dev_0.0.1+20101211+2-2_armel.deb&lt;/code&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;install libfreenect-demos: &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;code&gt;sudo apt-get install freeglut3 libgcc1 libgl1-mesa-glx libgl1 libglu1- &#xA;  mesa libglu1 libice6 libsm6 libstdc++6 libx11-6 libxext6 libxi6 &#xA;  libxmu6 libglut3&lt;/code&gt; &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;code&gt;wget http://ftp.us.debian.org/debian/pool/main/libf/libfreenect/libfreenect-demos_0.0.1+20101211+2-2_armel.deb&lt;/code&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;code&gt;sudo dpkg -i libfreenect-demos_0.0.1+20101211+2-2_armel.deb&lt;/code&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;install freenect &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;code&gt;wget http://ftp.us.debian.org/debian/pool/main/libf/libfreenect/freenect_0.0.1+20101211+2-2_armel.deb&lt;/code&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;code&gt;sudo dpkg -i freenect_0.0.1+20101211+2-2_armel.deb&lt;/code&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;code&gt;sudo cp /lib/udev/rules.d/51-kinect.rules /etc/udev/rules.d/51- &#xA;  kinect.rules&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="350" LastActivityDate="2013-05-02T16:42:56.500" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1259" PostTypeId="1" AcceptedAnswerId="1261" CreationDate="2013-05-03T07:44:58.167" Score="4" ViewCount="3177" Body="&lt;p&gt;I've been watching too much &lt;a href=&quot;http://science.discovery.com/tv-shows/how-its-made&quot; rel=&quot;nofollow&quot;&gt;How It's Made&lt;/a&gt;, and I've been wondering how they build devices that spray/inject/dispense a finite amount of liquid (to within some amount of error).  I wanted to try this for a hobby project. I'm working on that dispenses dry goods in the amount I specify.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do I use some kind of special nozzle/valve which can open and close at high speeds? How can I dispense a known quantity from a reservoir of a fluid substance onto each individual unit passing along an assembly line, or an amount specified by the user into another container?&lt;/p&gt;&#xA;" OwnerUserId="1253" LastEditorUserId="1406" LastEditDate="2013-05-31T17:27:39.453" LastActivityDate="2013-05-31T17:27:39.453" Title="How to measure and dispense a finite amount of powder or liquid" Tags="&lt;mechanism&gt;&lt;manufacturing&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1260" PostTypeId="2" ParentId="1257" CreationDate="2013-05-03T09:37:44.613" Score="1" Body="&lt;p&gt;This is the method I have found to build the libfreenect for beaglebone:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://elinux.org/ECE497_Project_BeagleBoard_Kinect_with_Usable_Framerates&quot; rel=&quot;nofollow&quot;&gt;http://elinux.org/ECE497_Project_BeagleBoard_Kinect_with_Usable_Framerates&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Summarised below:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Kinect Drivers--libfreenect&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Full information about libfreenect and its installation can be found at &lt;a href=&quot;http://openkinect.org/wiki/Main_Page&quot; rel=&quot;nofollow&quot;&gt;its site, here&lt;/a&gt;. &#xA;  Here I've reproduced just the sections that are useful for getting the drivers set up and working on the BeagleBoard&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Clone the git repository with all of the libfreenect source code in it&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;code&gt;git clone git://github.com/OpenKinect/libfreenect.git&lt;/code&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;If you don't have git already installed on your BeagleBoard, install it with the following command&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;code&gt;opkg install git&lt;/code&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Get all of the packages you need for building the drivers&#xA;  To get the basic drivers compiled, you'll need the cmake and libusb-1.0-0 packages. Use the following command to install these packages to your BeagleBoard&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;code&gt;opkg install cmake libusb-1.0-0&lt;/code&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;NOTE: For some reason on our system the cmake package failed to install the first time, it's some issue with ncurses and dependent libraries. We just reran the command to install cmake and it worked the second time.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Run the cmake utility to generate the necessary makefiles&#xA;  Go into your libfreenect directory and create a subdirectory named build&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;code&gt;cd libfreenect&lt;/code&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;code&gt;mkdir build&lt;/code&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Run cmake&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;code&gt;cmake ..&lt;/code&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Make the tiltdemo&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;code&gt;make tiltdemo&lt;/code&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;NOTE: If you try to make everything, by just running make like it says in the libfreenect instructions, your make will fail with a bunch of linker errors. This is because there is no GLUT library for the BeagleBoard, so the video demos fail when they try to link against GLUT. We'll be solving this problem later by replacing GLUT calls with PVR calls, but for now, go ahead and make the tiltdemo to be sure you have connectivity with the Kinect&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Run the tiltdemo&#xA;  Go to the bin folder and&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;code&gt;./tiltdemo&lt;/code&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;NOTE: You may have to&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;code&gt;chmod +x tiltdemo&lt;/code&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;to get it to run. Now you should see the Kinect tilting up and down and cycling through the various LED options (Red, Green, Blink, Off). Press ctrl+c to exit the demo&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="925" LastEditorUserId="350" LastEditDate="2013-07-17T15:35:38.870" LastActivityDate="2013-07-17T15:35:38.870" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1261" PostTypeId="2" ParentId="1259" CreationDate="2013-05-04T15:25:08.137" Score="3" Body="&lt;p&gt;Flow-rate meters based on measuring Coriolis-force reactions are widely used in process control systems. &#xA;The measurement principles are mentioned or illustrated at numerous web sites, including youtube video e2NGvrkmP8Y, &lt;a href=&quot;http://www.youtube.com/watch?feature=player_embedded&amp;amp;v=e2NGvrkmP8Y&quot; rel=&quot;nofollow noreferrer&quot;&gt;Back to Basics: Flow Measurement (Corilolis)&lt;/a&gt; (via oscillating-tube phase changes) and Schenck Americas' &lt;a href=&quot;http://www.schenckamericas.com/prod_solidsflowmeters.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Solids Flow Meters&lt;/a&gt; page, Coriolis Principle section (via vaned-rotor reaction forces) .  Coriolis-based meters measure the delivered mass of solids, liquids, and gases.  Delivered volume can be calculated if density is known.  Purchase of a Coriolis-based meter seems far more feasible than building one from scratch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Schenck page also illustrates impact-plate-based measuring systems and deflection-chute-based measuring systems.  These integrate impulses or deflection force to measure flow.  Again, purchase seems more feasible than building one yourself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At a hobby level, I think two approaches should be considered first:  (A) calibrate a constant-flow-rate system, and control delivery time; (B) implement a fill-and-dump system, and control number of cycles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(A) Using a method from previous questions (&lt;a href=&quot;https://robotics.stackexchange.com/questions/1145/what-would-be-the-best-way-to-handle-food-grains&quot;&gt;1&lt;/a&gt;,&lt;a href=&quot;https://robotics.stackexchange.com/questions/1167/can-the-rate-of-peristaltic-pumps-flow-be-accurate-across-changes-in-fluid-visc&quot;&gt;2&lt;/a&gt;) set up a system that moves your substance at a reasonably constant rate; measure that rate; thereafter, control how long or how fast the system runs to deliver a desired amount of substance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(B) Again using methods from previous questions, set up a system to fill a cup, box, chute, or transfer bin some number of times, and dump it into a receiver.  Issues like detecting when the cup is full, preventing or recycling overflow of the cup, and dumping the cup arise but can be resolved.  The issue of limited resolution (where the delivered amount is an integer multiple of cup size) can be treated by using a smaller cup, or using different cups for different jobs, or using a box with an adjustable side or bottom, or having the box sit on a load cell during filling.&lt;/p&gt;&#xA;" OwnerUserId="478" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2013-05-04T15:25:08.137" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1262" PostTypeId="2" ParentId="1207" CreationDate="2013-05-05T08:36:18.810" Score="4" Body="&lt;p&gt;I'm assuming you have a standard 9-channel hobby RC transmitter (with the little joysticks you move with your fingers) and a corresponding 9-channel hobby RC receiver intended to go into a RC car or airplane with standard servo 3-pin headers (9 of them).&#xA;And you have your Arduino, and a few motors you want to control with it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your program has better-than-average comments, but some are still mystifying, such as:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;int motor1Left = 7;// defines pin 5 as connected to the motor&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Really?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would break this problem into (at least) two parts, try to get each part working independently, and then try to get everything working together.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One way to break it up into parts is to have an array something like&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;int pulseWidth[9];&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I might write one program that &lt;em&gt;only&lt;/em&gt; reads pulse widths from the RC receiver and prints them out the serial port.&#xA;Then I might extend that program to store those pulse widths into that array,&#xA;and then print out the values in that array.&#xA;Then I might write a completely separate program that sets each value in that array to a different constant,&#xA;and then uses the values in that array to control the motors.&#xA;Only after I got both programs working would I combine them into one program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Reading the pulse widths is definitely the trickiest part,&#xA;but I hear that several people have gotten that to work adequately for them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The two basic approaches to reading pulse widths that I've seen are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;(a) Get &lt;a href=&quot;http://blog.ilektronx.com/2013/01/hacking-cheap-hobbyking-6-channel.html&quot; rel=&quot;nofollow&quot;&gt;all the signals on one wire&lt;/a&gt;, sometimes called &quot;the PPM stream&quot; (i.e., if it uses a 4017 IC for splitting, attach the wire to the &quot;CLK&quot; pin 14; if it uses a 4015 IC for splitting, attach the wire to the &quot;CLK&quot; pin 9), and feed that one wire into a single Arduino input. Or,&lt;/li&gt;&#xA;&lt;li&gt;(b) Feed each output pin that you care about to separate input pins on the Arduino. (It may help if you use an O'scope to figure out which order the &quot;RC receiver&quot; pulses those pins.)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Have you tried maybe running program listed at&#xA;&lt;a href=&quot;https://www.sparkfun.com/tutorials/348&quot; rel=&quot;nofollow&quot;&gt;&quot;RC Hobby Controllers and Arduino&quot;&lt;/a&gt;&#xA;without any changes at all?&#xA;Does that much work on your hardware?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other people connecting a hobby RC receiver to an Arduino include (in no particular order):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://arduino.cc/forum/index.php?topic=91909.0&quot; rel=&quot;nofollow&quot;&gt;&quot;reading 6-channel RC receiver PWM signal&quot;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://musingsandhobbies.blogspot.com/2009/11/arduino-vex-receiver-and-signal.html&quot; rel=&quot;nofollow&quot;&gt;&quot;Arduino, Vex receiver and signal splitter&quot;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://arduino.cc/forum/index.php/topic,20286.0.html&quot; rel=&quot;nofollow&quot;&gt;&quot;Arduino: Read PWM Signal from a RC-Receiver&quot;&lt;/a&gt; &lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://arduino.cc/forum/index.php/topic,42462.0.html&quot; rel=&quot;nofollow&quot;&gt;&quot;Arduiono: 3 axis auto stabilized platform&quot;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://autosysprogs.blogspot.com/2011/04/arduino-and-txrx-system.html&quot; rel=&quot;nofollow&quot;&gt;&quot;Arduino and Tx/Rx system&quot;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.rcgroups.com/forums/showthread.php?t=1227935&quot; rel=&quot;nofollow&quot;&gt;&quot;Arduino Receiver&quot;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://rcarduino.blogspot.com/2012/04/how-to-read-multiple-rc-channels-draft.html&quot; rel=&quot;nofollow&quot;&gt;&quot;RCArduino: How To Read Multiple RC Channels&quot;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://rcarduino.blogspot.com/2012/11/how-to-read-rc-receiver-ppm-stream.html&quot; rel=&quot;nofollow&quot;&gt;&quot;How To Read RC Receiver PPM Stream&quot;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://arduino.cc/forum/index.php/topic,7167.0.html&quot; rel=&quot;nofollow&quot;&gt;&quot;Arduino: Read PPM signals from RC receiver or Control&quot;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://playground.arduino.cc/Code/ReadReceiver&quot; rel=&quot;nofollow&quot;&gt;&quot;Arduino: Read Receiver&quot;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://diydrones.com/profiles/blogs/705844%3aBlogPost:38393&quot; rel=&quot;nofollow&quot;&gt;&quot;How to hack the PPM signal from any receiver (Futaba) with Arduino&quot;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.elenafrancesco.org/old/arduino/ppmmixer/&quot; rel=&quot;nofollow&quot;&gt;&quot;PPMMixer: Arduino Radio R/C PPM Mixer Programmable&quot;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.rcgroups.com/forums/showthread.php?t=1808432&quot; rel=&quot;nofollow&quot;&gt;&quot;Arduino ppm signal reader and generator&quot;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://github.com/kiuz/PPM-Signal-Reader-ARDUINO&quot; rel=&quot;nofollow&quot;&gt;&quot;Arduino PPM signal reader/decoder Library&quot;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;P.S.: often you get &lt;a href=&quot;http://www.chiark.greenend.org.uk/~sgtatham/bugs.html&quot; rel=&quot;nofollow&quot;&gt;better answers&lt;/a&gt; to problems like this if you write all three parts: (1) what you want to happen, (2) the complete program listing, and (3) what actually happens when you run the program&amp;nbsp;— &quot;Motor 2 never moves, no matter how I move the control stick&quot;, or &quot;Motor 2 always moves exactly like motor 1 moves&quot;, or whatever it is you actually observe.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You did great with part (2), but without (1) and (3) it's difficult for anyone to help you.&lt;/p&gt;&#xA;" OwnerUserId="187" LastEditorUserId="1177" LastEditDate="2013-12-31T03:19:19.427" LastActivityDate="2013-12-31T03:19:19.427" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1263" PostTypeId="1" AcceptedAnswerId="1265" CreationDate="2013-05-05T21:22:41.277" Score="5" ViewCount="1687" Body="&lt;p&gt;The latest OSX documentation I found on the website is from 2011, and the latest build is from over a year ago. I'm a complete n00b to all things ROS and wanted to start playing with it. What is the easiest way?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt; &lt;a href=&quot;http://www.ros.org/wiki/groovy/Installation/OSX/Homebrew/Source&quot; rel=&quot;noreferrer&quot;&gt;this version&lt;/a&gt; of the installation instructions is more recent (April 2013), but it says that&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;OSX is not officially supported by ROS and the installation might fail for several reasons. This page does not (yet) contain instructions for most higher level ROS packages, only for the base system. This includes the middleware and command line tools but not much more.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&quot;Does not contain instructions&quot; also means it doesn't work? What do OSX users who work on ROS usually do? Run it on an Ubuntu VM? Install it just fine on their own on OSX, even though there aren't detailed instructions on the website?&lt;/p&gt;&#xA;" OwnerUserId="1264" LastEditorUserId="1264" LastEditDate="2013-05-05T21:43:47.563" LastActivityDate="2021-02-19T00:13:26.773" Title="What is the easiest way to install ROS on OSX Mountain Lion?" Tags="&lt;ros&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1264" PostTypeId="2" ParentId="1263" CreationDate="2013-05-06T18:05:00.273" Score="5" Body="&lt;p&gt;Installing ROS is one thing, but the question you should really be asking is about maintaining  ROS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's certainly possible to install ROS on any *nix system if you satisfy all the dependencies, but since those dependencies are constantly being updated to new versions the maintenance quickly becomes a nightmare.  The OSX install tips on their wiki (&lt;a href=&quot;http://www.ros.org/wiki/groovy/Installation/OSX/Homebrew/Source&quot; rel=&quot;nofollow&quot;&gt;Homebrew&lt;/a&gt; or &lt;a href=&quot;http://www.ros.org/wiki/groovy/Installation/OSX/MacPorts/Source&quot; rel=&quot;nofollow&quot;&gt;MacPorts -- noting the lack of instruction for higher-level libraries&lt;/a&gt;) give some hints of this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Virtualbox is (unfortunately) the easiest method -- &quot;unfortunately&quot;, because technically you're installing ROS on the guest OS, not OSX.  But on the upside, it's the supported way to go.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2013-05-07T18:41:40.007" LastActivityDate="2013-05-07T18:41:40.007" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1265" PostTypeId="2" ParentId="1263" CreationDate="2013-05-06T23:34:44.253" Score="2" Body="&lt;p&gt;From experience, I suggest you only install ROS on Ubuntu (the only supported platform at the moment). As previously mentioned, Virtualbox or, in my case, VMware Fusion, is how you'd get it to run as a guest in OSX. I'd suggest you dual-boot to Ubuntu for running ROS, though, mainly due to the computational requirements of some packages and workflows.&lt;/p&gt;&#xA;" OwnerUserId="295" LastActivityDate="2013-05-06T23:34:44.253" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1266" PostTypeId="1" AcceptedAnswerId="1371" CreationDate="2013-05-07T13:25:22.977" Score="13" ViewCount="1239" Body="&lt;p&gt;Let's think of the following situations:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;You are teaching a robot to play ping pong&lt;/li&gt;&#xA;&lt;li&gt;You are teaching a program to calculate square root&lt;/li&gt;&#xA;&lt;li&gt;You are teaching math to a kid in school&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;These situations (i.e. supervised learning), and many others have one thing (among others) in common: the learner gets a reward based on its performance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is, what should the reward function look like? Is there a &quot;best&quot; answer, or does it depend on the situation? If it depends on the situation, how does one determine which reward function to pick?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, take the following three reward functions:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/UvrHs.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Function &lt;code&gt;A&lt;/code&gt; says:&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;below a certain point, bad or worse are the same: you get nothing&lt;/li&gt;&#xA;&lt;li&gt;there is a clear difference between almost good and perfect&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Function &lt;code&gt;B&lt;/code&gt; says:&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;you get reward linearly proportional to your performance&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Function &lt;code&gt;C&lt;/code&gt; says:&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;if your performance is bad, it's ok, you did your best: you still get some reward&lt;/li&gt;&#xA;&lt;li&gt;there is not much difference between perfect and almost good&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Intuitively, I'd think &lt;code&gt;A&lt;/code&gt; would make the robot very focused and learn the exact pattern, but become stupid when dealing with similar patterns, while &lt;code&gt;C&lt;/code&gt; would make it more adaptable to change at the cost of losing perfection.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One might also think of more complex functions, just to show but few:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/eCS4R.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, how does one know which function to pick? Is it known which behavior would emerge from (at least) the basic &lt;code&gt;A&lt;/code&gt;, &lt;code&gt;B&lt;/code&gt; and &lt;code&gt;C&lt;/code&gt; functions?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;A side question is would this be fundamentally different for robots and human kids?&lt;/p&gt;&#xA;" OwnerUserId="158" LastActivityDate="2013-11-08T18:13:25.833" Title="What reward function results in optimal learning?" Tags="&lt;machine-learning&gt;" AnswerCount="5" CommentCount="4" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1267" PostTypeId="2" ParentId="1266" CreationDate="2013-05-07T15:38:10.863" Score="3" Body="&lt;p&gt;These issues are addressed, to some extent, by the study of &lt;a href=&quot;http://en.wikipedia.org/wiki/Utility&quot; rel=&quot;nofollow&quot;&gt;utility functions&lt;/a&gt; in economics.  A utility function expresses effective or perceived values of one thing in terms of another.  (While the curves shown in the question are reward functions and express how much reward will be tendered for various performance levels, similar-looking utility functions could express how much performance results from various reward levels.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What reward function will work best depends on equilibria between the payer and the performer.  The wikipedia &lt;em&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Contract_curve&quot; rel=&quot;nofollow&quot;&gt;contract curve&lt;/a&gt;&lt;/em&gt; article illustrates with &lt;a href=&quot;http://en.wikipedia.org/wiki/Edgeworth_box&quot; rel=&quot;nofollow&quot;&gt;Edgeworth boxes&lt;/a&gt; how to find &lt;a href=&quot;http://en.wikipedia.org/wiki/Pareto_efficient&quot; rel=&quot;nofollow&quot;&gt;Pareto efficient&lt;/a&gt; allocations.  The &lt;a href=&quot;http://en.wikipedia.org/wiki/Von_Neumann%E2%80%93Morgenstern_utility_theorem&quot; rel=&quot;nofollow&quot;&gt;Von Neumann–Morgenstern utility theorem&lt;/a&gt; delineates conditions that ensure that an agent is VNM-rational and can be characterized as having a utility function.  The  “Behavioral predictions resulting from HARA utility” section of the &lt;a href=&quot;http://en.wikipedia.org/wiki/Hyperbolic_absolute_risk_aversion#Behavioral_predictions_resulting_from_HARA_utility&quot; rel=&quot;nofollow&quot;&gt;Hyperbolic absolute risk aversion&lt;/a&gt; article in wikipedia describes behavioral consequences of certain utility functions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Summary: These topics have been the subject of tremendous amounts of study in economics and microeconomics.  Unfortunately, extracting a brief and useful summary that answers your question might also call for a tremendous amount of work, or the attention of someone rather more expert than me.&lt;/p&gt;&#xA;" OwnerUserId="478" LastActivityDate="2013-05-07T15:38:10.863" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1268" PostTypeId="2" ParentId="1266" CreationDate="2013-05-07T18:13:24.837" Score="0" Body="&lt;p&gt;Any form of supervised learning is a directed search in policy space. You try to find the policy -- so which action to take -- which provides the maximum reward expectation. In your question you give reward as a function of performance. As long as this function is monotonic any method which converges will ultimately end up giving you maximum performance (too stay with your terminology).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How fast the method converges is another matter, and may well depend on the curve. But I think this will differ from method to method.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An entirely different problem is that for more complex scenarios performance is not a simple scalar, and defining it can be pretty difficult. What's the reward function for being good at math?&lt;/p&gt;&#xA;" OwnerUserId="127" LastActivityDate="2013-05-07T18:13:24.837" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1269" PostTypeId="2" ParentId="1266" CreationDate="2013-05-07T18:40:45.283" Score="6" Body="&lt;p&gt;&quot;Optimal learning&quot; is a very vague term, and it is completely dependent on the specific problem you're working on.  The term you're looking for is &quot;&lt;a href=&quot;http://en.wikipedia.org/wiki/Overfitting&quot; rel=&quot;nofollow noreferrer&quot;&gt;overfitting&lt;/a&gt;&quot;:&#xA;&lt;img src=&quot;https://i.stack.imgur.com/702pw.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(The green line is the error in predicting the result on the training data, the purple line the quality of the model, and the red line is the error of the learned model being used &quot;in production&quot;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In other words: when it comes to adapting your learned behavior to similar problmes, how you rewarded your system is less important than &lt;em&gt;how many times&lt;/em&gt; you rewarded it -- you want to reduce errors in the training data, but not keep it in training so long that it loses the ability to work on similar models.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One method of addressing this problem is to cut your training data in half: use one half to learn on and the other half to to validate the training.  It helps you identify when you begin to over-fit.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Non-linear reward functions&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Most supervised learning algorithms expect that application of the reward function will produce a convex output.  In other words, having local minima in that curve will prevent your system from converging to the proper behavior.  &lt;a href=&quot;http://www.youtube.com/watch?v=UMthAqRNqMw&quot; rel=&quot;nofollow noreferrer&quot;&gt;This video shows a bit of the math behind cost/reward functions&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2013-05-09T19:50:57.800" LastActivityDate="2013-05-09T19:50:57.800" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1270" PostTypeId="1" CreationDate="2013-05-07T21:49:46.780" Score="16" ViewCount="25956" Body="&lt;p&gt;How can I detect when a stepper motor has stalled?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A google search led me to some people who say that&#xA;when the stepper motor stalls, the current spikes up,&#xA;which is easily detectable with a Hall sensor.&#xA;(Or, I suppose, by any of the other current sensors mentioned at&#xA;&lt;a href=&quot;https://electronics.stackexchange.com/questions/17246/how-can-i-sense-the-motors-current&quot;&gt;&quot;How can I sense the motor's current?&quot;&lt;/a&gt;&#xA;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I measured the current through (one of the 4 wires of) my stepper motor,&#xA;and it's always within a few percent of 0.5 A, whether my stepper driver is holding one position, moving it normally (which in my application is very slowly), or the stepper driver thinks it is telling the stepper to move normally, but the motor has pegged out against the hard limit.&#xA;Measuring the current in the +12V power supply going to the stepper motor driver, also seemed to give a fairly constant current.&#xA;This may be because I turned down the current limit to that amount on my &quot;chopper&quot; stepper motor driver.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Am I missing some key detail in the &quot;measure the current&quot; approach?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A google search led me to some other people that measure the back-EMF (BEMF) in one coil of the stepper during the time the stepper driver is only driving the other coil.&#xA;But that only seems to distinguish between &quot;a motor moving quickly&quot; vs &quot;a motor stopped&quot;, and doesn't seem to distinguish between my case of &quot;a motor moving slowly&quot; vs &quot;a motor stopped&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there some way to apply the BEMF approach even in a system where I always drive the stepper slowly, and never spin it quickly?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm currently using &lt;a href=&quot;http://www.pololu.com/catalog/product/2132&quot; rel=&quot;noreferrer&quot;&gt;a stepper driver board&lt;/a&gt; with the TI DRV8825 chip on it, and I hoped the &quot;fault&quot; pin would tell me when the stepper motor has stalled against my hard stop.&#xA;But it doesn't seem to be doing anything -- is it supposed to tell me about a stall, but I just have it wired up wrong?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there some other chip or drive technique that detects when the stepper has stalled out against the hard stop?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there some other technique for detecting a hard stall that I can &quot;add on&quot; to a system using an off-the-shelf stepper motor driver?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Is there some other StackExchange site that is more appropriate for questions about motors and motor drivers?)&lt;/p&gt;&#xA;" OwnerUserId="187" LastEditorUserId="-1" LastEditDate="2017-04-13T12:33:08.317" LastActivityDate="2015-11-12T23:40:02.027" Title="How to detect when a stepper motor has stalled?" Tags="&lt;stepper-motor&gt;&lt;stepper-driver&gt;&lt;force-sensor&gt;" AnswerCount="5" CommentCount="6" FavoriteCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="1271" PostTypeId="2" ParentId="1270" CreationDate="2013-05-07T23:23:02.493" Score="7" Body="&lt;p&gt;One option is a stepper motor driver which uses sensorless stall system, such as the &lt;a href=&quot;http://www.st.com/web/catalog/sense_power/FM142/CL851/SC1794/SS1498/LN1723/PF248592&quot;&gt;STMicroelectronics L6470 dSPIN: Fully integrated microstepping motor driver with motion engine and SPI&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once calibrated it can detect a stall condition and raise the FLAG pin high to alert to the uC of the problem.&lt;/p&gt;&#xA;" OwnerDisplayName="user797" LastEditorUserId="37" LastEditDate="2013-05-08T11:59:20.043" LastActivityDate="2013-05-08T11:59:20.043" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1272" PostTypeId="2" ParentId="1270" CreationDate="2013-05-08T02:57:29.857" Score="2" Body="&lt;p&gt;Unfortunately, as you've discovered, it is difficult to tell if a stepper motor is stalled because the current through the coils of a stepper motor is roughly the same if it is stalled (can't step), holding position, or stepping normally.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could definitely detect a stall with ease if you added an encoder or used a stepper motor that already had one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why do you want to detect the stepper motor stall? Unlike a brushed DC motor, stalling a stepper motor is typically not bad for it. Could you achieve the same purpose with a limit switch?&lt;/p&gt;&#xA;" OwnerUserId="1275" LastActivityDate="2013-05-08T02:57:29.857" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1273" PostTypeId="2" ParentId="970" CreationDate="2013-05-08T03:12:20.987" Score="1" Body="&lt;p&gt;You might be able to do &quot;hard iron&quot; calibrations to cancel out the effects of the magnets if they are fixed in relation to the magnetometer. One strategy people use to avoid interference is to make a mast and put the magnetometer at the top of the mast away from the other electronics.&lt;/p&gt;&#xA;" OwnerUserId="1275" LastActivityDate="2013-05-08T03:12:20.987" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1274" PostTypeId="1" AcceptedAnswerId="1275" CreationDate="2013-05-08T13:30:52.200" Score="2" ViewCount="538" Body="&lt;p&gt;I bought my kid a &lt;a href=&quot;http://www.gigo.com.tw/english/_toy/detail.php?MID=100&amp;amp;SID=101&amp;amp;ID=974&quot; rel=&quot;nofollow&quot;&gt;robotics kit&lt;/a&gt; with several motors and an infrared remote control (you can steer the robot using IR remote control).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I want to take it to the next level and control the robots from a PC or a Raspberry Pi.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the simplest approach to do this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am thinking about 2 possible ways:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Find out the protocol the existing remote control uses and then emulate the IR signals using Arduino (Arduino is sending the IR signals).&lt;/li&gt;&#xA;&lt;li&gt;Find a piece of hardware, which presses the buttons on the remote control and control it via to Arduino (Arduino is sending signals to the button pushers, the remote control is sending the IR signals to the robot).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="1277" LastActivityDate="2013-05-08T19:17:13.590" Title="How to connect an infrared remote control to PC or Arduino or Raspberry Pi?" Tags="&lt;mobile-robot&gt;&lt;arduino&gt;&lt;raspberry-pi&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1275" PostTypeId="2" ParentId="1274" CreationDate="2013-05-08T14:23:40.063" Score="4" Body="&lt;p&gt;Read &lt;a href=&quot;http://learn.adafruit.com/ir-sensor&quot; rel=&quot;nofollow&quot;&gt;Ada Fruits Tutorial&lt;/a&gt; along with many other sources of IR tutorials out there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then for an Arduino I would use (and have used) &lt;a href=&quot;http://www.righto.com/2009/08/multi-protocol-infrared-remote-library.html&quot; rel=&quot;nofollow&quot;&gt;Ken's IRremote Library&lt;/a&gt; as it has several examples, several device protocols and requires only a &lt;a href=&quot;https://www.sparkfun.com/products/10266&quot; rel=&quot;nofollow&quot;&gt;TSOP38238&lt;/a&gt;. And is quickly adaptable to others.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Look at the GitHub Network of Forks, as there are others who have added other device protocols.&lt;/p&gt;&#xA;" OwnerUserId="821" LastEditorUserId="821" LastEditDate="2013-05-08T19:17:13.590" LastActivityDate="2013-05-08T19:17:13.590" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1276" PostTypeId="1" AcceptedAnswerId="1278" CreationDate="2013-05-08T17:33:04.103" Score="1" ViewCount="225" Body="&lt;p&gt;I have a three wheeled vehicle in a tricycle configuration attached to a fixed frame. Each wheel is powered by an AC electric motor. The AC motors are fed by motor controllers that take a speed demand. The single main wheel (which is also steerable) has a lower gear ratio than the rear wheels so it has a theoretical higher top speed. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the vehicle drives in a straight line each of the motor controllers are given identical speed requests. Unfortunately feedback from the controller indicates that some motors are pushing while some are pulling. In particular we have a common scenario where one rear wheel is pushing while the front wheel is trying to slow down. The third wheel will often have almost no current. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What can be done to make all three motors work together and avoid situations where they fight?  Is there a way to change the request to the motor controller to encourage the drives to work together? Do we have to switch from a speed request setup to a current control setup? If so what is the appropriate way to control the motors then? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let me know if I haven't included any important details and I will update my question.&lt;/p&gt;&#xA;" OwnerUserId="201" LastActivityDate="2015-09-30T09:57:44.750" Title="How can a load be balanced between multiple AC electric drive motors?" Tags="&lt;control&gt;&lt;motor&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1277" PostTypeId="1" AcceptedAnswerId="1355" CreationDate="2013-05-08T18:52:41.650" Score="1" ViewCount="1154" Body="&lt;p&gt;I am developing a robot which paints using an airbrush (3D painting). I intend to use several colors as a CMYK printer, but I do not know how to do the conversion of RGB colors in the computer to the dosage of colors in CMYK.&lt;/p&gt;&#xA;" OwnerUserId="1280" LastEditorUserId="37" LastEditDate="2013-05-08T23:55:57.460" LastActivityDate="2014-11-20T18:47:16.290" Title="How can I convert RGB colors to CMYK for my airbrush robot?" Tags="&lt;robotic-arm&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1278" PostTypeId="2" ParentId="1276" CreationDate="2013-05-08T18:57:53.090" Score="2" Body="&lt;p&gt;You're facing a problem that's normally solved mechanically, with 2 or 4 wheels, by a &lt;a href=&quot;http://en.wikipedia.org/wiki/Differential_%28mechanical_device%29&quot; rel=&quot;nofollow&quot;&gt;differential gearbox&lt;/a&gt;.  Technically, you'd be able to adapt a 4WD differential to a 3WD case, but you'd have to use a single motor for that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The concept you're looking for is an &lt;a href=&quot;http://en.wikipedia.org/wiki/Electronic_differential&quot; rel=&quot;nofollow&quot;&gt;electronic differential&lt;/a&gt;, although I'm not sure where to find resources on building and calibrating your own.  It might be as simple as switching your motor controllers to just set identical torque, based on a desired average speed between the 3 of them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The bottom line, though, is that you can't expect to set 3 motors to the same speed and have them follow 3 paths of different lengths while maintaining the same distance from each other.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2013-05-08T18:57:53.090" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1279" PostTypeId="1" CreationDate="2013-05-08T20:57:52.400" Score="6" ViewCount="1987" Body="&lt;p&gt;I am interested in building a robot like the &lt;strong&gt;&lt;a href=&quot;http://www.ez-robot.com/Shop/AccessoriesDetails.aspx?prevCat=100&amp;amp;productNumber=40&quot; rel=&quot;nofollow&quot;&gt;EZ-B&lt;/a&gt;&lt;/strong&gt;, sold by &lt;a href=&quot;http://ez-robot.com&quot; rel=&quot;nofollow&quot;&gt;ez-robot.com&lt;/a&gt;. It comes with an SDK for &lt;a href=&quot;http://en.wikipedia.org/wiki/Microsoft_Visual_Studio&quot; rel=&quot;nofollow&quot;&gt;Visual Studio&lt;/a&gt; and has direct scripting in runtime through a USB, Bluetooth, Wi-Fi, &lt;a href=&quot;http://en.wikipedia.org/wiki/Internet_Relay_Chat&quot; rel=&quot;nofollow&quot;&gt;IRC&lt;/a&gt; or &lt;a href=&quot;http://en.wikipedia.org/wiki/HTTP_Secure&quot; rel=&quot;nofollow&quot;&gt;HTTPS&lt;/a&gt; connection.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I get a regular &lt;a href=&quot;http://en.wikipedia.org/wiki/Arduino&quot; rel=&quot;nofollow&quot;&gt;Arduino&lt;/a&gt; board, will I be able to control it remotely in the same way? From what I've read, an Arduino needs to hold the instructions in its own memory, but I would rather have the brain in the computer, feeding signals back and forth to the microcontroller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, is Arduino alone, a step down as the website niceley puts it?&lt;/p&gt;&#xA;" OwnerUserId="1281" LastEditorUserId="1906" LastEditDate="2013-11-06T23:40:39.057" LastActivityDate="2019-03-05T21:43:12.160" Title="How can I create a robot like the EZ-B using a regular Arduino?" Tags="&lt;arduino&gt;&lt;microcontroller&gt;&lt;research&gt;&lt;machine-learning&gt;&lt;artificial-intelligence&gt;" AnswerCount="5" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1280" PostTypeId="2" ParentId="1277" CreationDate="2013-05-08T22:02:53.733" Score="2" Body="&lt;p&gt;According to &lt;a href=&quot;http://www.rapidtables.com/convert/color/rgb-to-cmyk.htm&quot; rel=&quot;nofollow&quot;&gt;rapidtables.com&lt;/a&gt;, the following formulae convert [24-bit] RGB color to CMYK:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The R,G,B values are divided by 255 to change the range from 0..255 to 0..1:&lt;br&gt;&#xA;  R' = R/255&lt;br&gt;&#xA;  G' = G/255&lt;br&gt;&#xA;  B' = B/255  &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The black key (K) color is calculated from the red (R'), green (G') and blue (B') colors:&lt;br&gt;&#xA;  K = 1-max(R', G', B')  &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The cyan color (C) is calculated from the red (R') and black (K) colors:&lt;br&gt;&#xA;  C = (1-R'-K) / (1-K)  &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The magenta color (M) is calculated from the green (G') and black (K) colors:&lt;br&gt;&#xA;  M = (1-G'-K) / (1-K)&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The yellow color (Y) is calculated from the blue (B') and black (K) colors:&lt;br&gt;&#xA;  Y = (1-B'-K) / (1-K)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Formulae at &lt;a href=&quot;http://www.javascripter.net/faq/rgb2cmyk.htm&quot; rel=&quot;nofollow&quot;&gt;javascripter.net&lt;/a&gt; appear to be equivalent, although complements are computed in a different order.&lt;/p&gt;&#xA;" OwnerUserId="478" LastActivityDate="2013-05-08T22:02:53.733" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1282" PostTypeId="2" ParentId="1279" CreationDate="2013-05-09T17:10:33.967" Score="3" Body="&lt;p&gt;Unfortunately, I have no experience with &lt;strong&gt;ez-b&lt;/strong&gt;, but I have looked over the site a little bit. I do, however, have lots of Arduino experience. The program is, indeed, stored on the board's local memory. However, it is very possible to write a program that can interact with your computer. With my Arduino, I often write programs that communicate with my computer over USB. To communicate over Wifi will require additional hardware. There is a Wifi &quot;shield&quot; that can be attached to your Arduino, but this runs at around $60.&lt;/p&gt;&#xA;" OwnerUserId="1287" LastActivityDate="2013-05-09T17:10:33.967" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="1283" PostTypeId="2" ParentId="865" CreationDate="2013-05-09T18:44:10.113" Score="0" Body="&lt;p&gt;To detect if your steppers have stalled check this question&lt;a href=&quot;https://robotics.stackexchange.com/questions/1270/how-to-detect-when-a-stepper-motor-has-stalled/1271?noredirect=1#comment2845_1271&quot;&gt;how to detect when a stepper motor has stalled&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to use absolute positioning you can create a linear potentiometer using a length of nichrome wire pulled across the axis, with the &quot;wiper&quot; touching where the bed/mill is moving. You will need some uC to report on the actual position of the system however a 10ADC should be enough for a small project.&lt;/p&gt;&#xA;" OwnerDisplayName="user797" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2013-05-09T18:44:10.113" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1284" PostTypeId="2" ParentId="446" CreationDate="2013-05-09T18:51:47.127" Score="0" Body="&lt;p&gt;The torque you need on a CNC machine is dependant on:&#xA;1) How much force the mill is expected to exert on the material&#xA;2) The resistance of the linear bearings used to move the axes&#xA;3) The type/style of cnc mill(i.e mills using a moving gantry need more torque than a xy table)&#xA;4) The drive system (i.e. belt driven machines needs more torque than lead screw)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ultimately the amount of torque depends on how much power (like watts power) you're pumping into your steppers. The rating on the steppers are based on their optimal; however you can over drive them. Also if you are running your machine slowly then you can escape with using less torque since there is less risk of stalling as opposed to a machine running at high speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further as stepper motors speed up they loose torque, unless they are BEMF compensated. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Try with your steppers; it may work in which case you're just over thinking the problem and if it doesn't work then you have an idea of how much torque you will need.&lt;/p&gt;&#xA;" OwnerDisplayName="user797" LastActivityDate="2013-05-09T18:51:47.127" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1285" PostTypeId="2" ParentId="1279" CreationDate="2013-05-10T18:13:34.820" Score="2" Body="&lt;p&gt;We've written robotic software in C# for a school &#xA;project, called &lt;em&gt;&lt;a href=&quot;http://sourceforge.net/projects/netbotproject/&quot; rel=&quot;nofollow&quot;&gt;NetBotProject&lt;/a&gt;&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It works in the way you described. Instead of using an Arduino we used a self-soldered &lt;a href=&quot;http://www.atmel.com/devices/atmega8.aspx&quot; rel=&quot;nofollow&quot;&gt;ATmega8&lt;/a&gt; board with our own firmware. The communication is based on &lt;a href=&quot;http://en.wikipedia.org/wiki/RS-232&quot; rel=&quot;nofollow&quot;&gt;RS-232&lt;/a&gt; and on top of that our own protocol. The protocol (and the firmware) has commands for setting/getting &lt;a href=&quot;http://en.wikipedia.org/wiki/Input/output&quot; rel=&quot;nofollow&quot;&gt;I/O&lt;/a&gt; ports, powering servos, timer functions, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To make a Wi-Fi connection, we used a cheap Fonera router, &lt;a href=&quot;http://de.wikipedia.org/wiki/La_Fonera#Fonera_.28FON2100_und_FON_2200.29&quot; rel=&quot;nofollow&quot;&gt;La Fonera 2100&lt;/a&gt;. It has RS-232 pins built in (connected to Atmega) and is running a socket server/client with &lt;a href=&quot;http://en.wikipedia.org/wiki/Netcat&quot; rel=&quot;nofollow&quot;&gt;Netcat&lt;/a&gt;. Our C# software also has a socket connection running, so we can send/receive the commands/signals to/from the ATmega over Wi-Fi.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With a few modifications the firmware should be able to run on an Arduino board. The protocol and firmware has not yet commands for the &lt;a href=&quot;http://en.wikipedia.org/wiki/I%C2%B2C&quot; rel=&quot;nofollow&quot;&gt;I²C&lt;/a&gt; bus. So you have to implement that by your own if you want to control more than one microcontroller with the software.&lt;/p&gt;&#xA;" OwnerUserId="1292" LastEditorUserId="1906" LastEditDate="2013-11-06T23:40:54.243" LastActivityDate="2013-11-06T23:40:54.243" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1286" PostTypeId="1" AcceptedAnswerId="1287" CreationDate="2013-05-10T21:09:58.213" Score="3" ViewCount="487" Body="&lt;p&gt;I noticed that some IMU units are tuned to be sensitive to small changes, other to large changes and some that can be adjusted between different sensitivities. I am familiar with the use of a Kalman filter to normalize readings, but I was wondering if my UAV could benefit from a second IMU where the two are set at high and low sensitivities to get even more accurate and timely information.&lt;/p&gt;&#xA;" OwnerUserId="1295" LastActivityDate="2013-05-12T23:15:37.837" Title="Is there a benefit to using 2 IMU units on a UAV set at different sensitivities?" Tags="&lt;kalman-filter&gt;&lt;quadcopter&gt;&lt;imu&gt;&lt;uav&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1287" PostTypeId="2" ParentId="1286" CreationDate="2013-05-11T18:05:28.830" Score="2" Body="&lt;p&gt;I think you're mixing two meanings of the word &quot;sensitive&quot;.  &lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Input Sensitivity&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;If you have an IMU that gives very raw (&quot;twitchy&quot;) readings, then you should be able to generate the output of a less input-sensitive IMU by simply computing a &lt;a href=&quot;https://en.wikipedia.org/wiki/Moving_average&quot; rel=&quot;nofollow&quot;&gt;moving average&lt;/a&gt; or using a Kalman filter on the output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This will produce an effect similar to running a low-pass filter on the output signal; the ability of your filter to reject noise will determine how much accuracy you salvage in this process of subsampling.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Output Sensitivity&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Accelerometers produce analog output, and in many accelerometers you can adjust the number of $mV/g$ that the reading will be.  This is just the scale factor that lets you match the (expected) output of the IMU to the range of your ADC, in order to get the most precision.  So, your intuition is correct -- you could get 2 accelerometers and mix low and high sensitivity to get better precision when reading slight movements.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Whether It Matters&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Ultimately, an IMU that you can buy for less than $50,000 has a limit to its accuracy, and will never be accurate enough for you to use it without other navigational aids -- compasses, GPS units, etc.  Since your vehicle is really only able to react to a certain range of forces, its accelerometers should be tuned to that range.  So, if you have 2 different operating modes that involve 2 different ranges of forces then it might be a good idea to use multiple accelerometers; otherwise, it will produce data that is interesting but not practical (and give you one more source of noise to calibrate).&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2013-05-12T23:15:37.837" LastActivityDate="2013-05-12T23:15:37.837" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1289" PostTypeId="2" ParentId="1279" CreationDate="2013-05-12T16:11:32.067" Score="2" Body="&lt;p&gt;It's great that you are taking an initiative in building/replicating one like EZ-Robot. I would like to add a few things which helps in building a robot:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) Simplicity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) Cost Factor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By simplicity I mean choosing the right hardware that actually helps your prototype to be built faster and the testing/debugging is easier. For instance, if you choose &lt;a href=&quot;http://en.wikipedia.org/wiki/Raspberry_Pi&quot; rel=&quot;nofollow&quot;&gt;Raspberry Pi&lt;/a&gt; with a Wi-Fi module (I saw one at Adafruit stores for around US$12), the whole setup may be build under US$50. Adding computer vision (I think this will boost up the investment price) since it already runs Linux on it, helps in achieving the ease in usability and development. Now you have a system that can be controlled by many components. Using a &lt;a href=&quot;http://en.wikipedia.org/wiki/Bluetooth&quot; rel=&quot;nofollow&quot;&gt;Bluetooth&lt;/a&gt; module with Raspberry Pi is much cheaper than you may think. Chinese modules are cheap, like US$5-US$10. Hereby you will have an independent robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But as you say, you wish to remotely control, the Arduino keeping your PC (since you mentioned Visual Studio), this can be done easily by adding a Wi-Fi module, but &lt;a href=&quot;http://en.wikipedia.org/wiki/XBee&quot; rel=&quot;nofollow&quot;&gt;Xbee&lt;/a&gt; costs are really high, and then use the &lt;a href=&quot;http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol&quot; rel=&quot;nofollow&quot;&gt;HTTP&lt;/a&gt; protocol to control the robot. The Arduino will be fed with some input, like say numbers ranging from 1-100 that may accumulate 100 tasks. Like move left, right, up down, turn on the light, etc. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So essentially make sure, which development board may help you serve the purpose easily.&lt;/p&gt;&#xA;" OwnerUserId="1303" LastEditorUserId="1906" LastEditDate="2013-11-06T23:40:15.100" LastActivityDate="2013-11-06T23:40:15.100" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1290" PostTypeId="1" CreationDate="2013-05-13T06:59:32.290" Score="3" ViewCount="559" Body="&lt;p&gt;I have arduino code for operating 2 servos, but we are using 4 servos and am having trouble getting the other 2 to talk. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The program so far as I can make out is that the angles for the servos that are calculated by the processing side are being sent out one after the other (shoulder, elbow, wrist, wrist2) then repeated. The arduino program gets this data and stores in into an array and then is written to the pin of the appropriate array segment. So 0 is shoulder, 1 is elbow, 2 is wrist and 3 is wirst2. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can easily get 2 servos to run with no problem.  But when I try and add 1 or 2 more we get no response.  Can anyone please help me to get the other 2 servos to work?  My knowledge on this code is rather limited, so any help is appreciated.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;processing Data being sent to the arduino:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;byte out[] = new byte[4];&#xA;out[0] = byte(shoulderAngle);&#xA;out[1] = byte(elbowAngle);&#xA;out[2] = byte(wristAngle);&#xA;out[3] = byte(wrist2Angle);&#xA;port.write(out);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Arduino Code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;Servo.h&amp;gt;&#xA;&#xA;//Declares the servos.&#xA;Servo shoulder;&#xA;Servo elbow;&#xA;Servo wrist;&#xA;Servo wrist2;&#xA;&#xA;//Setup servo positions.&#xA;int nextServo = 0;&#xA;int servoAngles[] = {0, 0};&#xA;&#xA;//Define pins for each servo.&#xA;void setup()&#xA;  {&#xA;  shoulder.attach(50);&#xA;  elbow.attach(51);&#xA;  wrist.attach(52);&#xA;  wrist2.attach(53);&#xA;&#xA;  Serial.begin(9600);&#xA;}&#xA;&#xA;void loop()&#xA;{&#xA;  if(Serial.available())&#xA;  {&#xA;    int servoAngle = Serial.read();  &#xA;&#xA;    servoAngles[nextServo] = servoAngle;  &#xA;    nextServo++;  &#xA;&#xA;    if(nextServo &amp;gt; 3)&#xA;    {&#xA;      nextServo = 0;  &#xA;    }&#xA;&#xA;    shoulder.write(servoAngles[0]);&#xA;    elbow.write(servoAngles[1]);&#xA;    wrist.write(servoAngles[2]);&#xA;    wrist2.write(servoAngles[3]);&#xA;  }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Sorry for the lengthy post but have been stuck for a while. &lt;/p&gt;&#xA;" OwnerUserId="1307" LastEditorUserId="350" LastEditDate="2013-05-13T14:20:32.990" LastActivityDate="2015-01-03T18:42:13.097" Title="Issues upgrading Arduino code for Kinect controlled arm from 2 servos to 4" Tags="&lt;arduino&gt;&lt;kinect&gt;&lt;robotic-arm&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1292" PostTypeId="2" ParentId="1290" CreationDate="2013-05-13T14:30:44.763" Score="1" Body="&lt;p&gt;I can see two potential problems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first is that you're only declaring the servoAngles array to have two elements:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;int servoAngles[] = {0, 0};&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Your code is equivalent to this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;int servoAngles[2];&#xA;servoAngles[0] = 0;&#xA;servoAngles[1] = 0;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Later, you're assigning values to &lt;code&gt;servoAngles[2]&lt;/code&gt; and &lt;code&gt;servoAngles[3]&lt;/code&gt;, which are out of the bounds of your original array -- this is very bad practice.  Instead, you should be declaring the servoAngles array the same way you're declaring and initializing your &lt;code&gt;byte out[]&lt;/code&gt; array -- it should be declared and/or initialized with 4 elements, as you require.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other problem that I can see is that you're reading 1 &lt;code&gt;servoAngle&lt;/code&gt; value every time you loop, but you're writing all 4.  That means that every 4th byte is automatically going to be sent to the same servo, regardless of whether things get out of sync.  (You would recognize this problem as the proper angle being put at the wrong joint.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Normally, you'd read all 4 values at once (followed by a newline, or some special sequence of characters that indicates the end of the info) and write all 4 values at once.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2013-05-13T14:30:44.763" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="1294" PostTypeId="1" AcceptedAnswerId="1296" CreationDate="2013-05-14T19:46:34.603" Score="8" ViewCount="482" Body="&lt;p&gt;Concerning robots which rotate at high speed by spinning the drive motors in opposite directions, while still being able to simultaneously move in a direction (translate):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as I know this originated with competitive fighting robots, where it is known as &quot;melty brain&quot; or &quot;tornado drive,&quot; according to wikipedia, and is based on alternately slowing down the motors on either side as they revolve around the centre of mass.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, with the whole body spinning so fast how is the current &quot;heading&quot; of the robot established and maintained?&lt;/p&gt;&#xA;" OwnerUserId="1316" LastActivityDate="2013-05-15T07:01:53.087" Title="What are the mechanics of translational drift?" Tags="&lt;navigation&gt;&lt;movement&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1295" PostTypeId="2" ParentId="1072" CreationDate="2013-05-15T06:56:56.820" Score="0" Body="&lt;p&gt;Another group that is working on Kite-flying robots is Professor Srikanth Saripalli's group at Arizona State University. Perhaps looking into that, their videos and contacting them would give you additional perspective.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://sese.asu.edu/person/srikanth-saripalli&quot; rel=&quot;nofollow&quot;&gt;Professor Srikanth Saripalli's Homepage&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://robotics.asu.edu/projects/autokite/&quot; rel=&quot;nofollow&quot;&gt;Kite-Flying Robot Team - Webpage and Videos&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="333" LastActivityDate="2013-05-15T06:56:56.820" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1296" PostTypeId="2" ParentId="1294" CreationDate="2013-05-15T07:01:53.087" Score="3" Body="&lt;p&gt;Okay, so most(if not all) transational drift robots or meltys use an acceleorometer to indicate the heading of the robot. What this acceleorometer does is calculates the rate of rotation based on G-forces around a given radius. The data that is accumulated from the accelerometer is then used to light up an LED once per rotation - giving and indication of the heading of the robot. The driver or user then uses this LED to decide using the remote control the direction he wants to traverse to.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for the moving, as mundane it might sound is done by switching the motor on and off. &#xA;The program or the control of the system turns a motor on when that motor is in the correct position to result in a net movement the direction the robot is indicated to go to.&#xA;So for example the LED is lit between 30 and 120 degrees it can be interpreted as the direction of the robot would be around 90 degrees.(Keep in mind that the indications of the heading using the LED is not a 100% accurate, the might be off by more than some tens of degrees. Usually because of the time taken for all the data processing and the time taken to switch the LED's on and off). If you wanted to move forward now, the motors would be needed to be on between 270 and 450(360+90) degrees during each rotation after which the net direction of travel will be 90 degrees.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Likewise if the robot wants to go to the left that is 180 degrees, but its current heading is 90. The motors will need to be on between 0 and 180 degrees. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope that helps.&lt;/p&gt;&#xA;" OwnerUserId="1213" LastActivityDate="2013-05-15T07:01:53.087" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1297" PostTypeId="2" ParentId="1211" CreationDate="2013-05-15T14:29:41.487" Score="1" Body="&lt;p&gt;IR sensor are best used for detecting any thing but they are quite sensitive to IR lights and sunlight.So if in condition when you are not bothering about Ir rays and sunlight , you can always use a pair of IR LED and Photodiode to make a pair of IR sensor.&lt;/p&gt;&#xA;" OwnerUserId="1322" LastActivityDate="2013-05-15T14:29:41.487" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1298" PostTypeId="2" ParentId="1279" CreationDate="2013-05-15T21:48:54.160" Score="2" Body="&lt;p&gt;Certainly you can.  You need a firmware for the Arduino that accepts remote control commands over the COM channel.  Take a look at &lt;a href=&quot;https://github.com/JayBeavers/Reflecta&quot; rel=&quot;nofollow&quot;&gt;Reflecta&lt;/a&gt; or &lt;a href=&quot;https://github.com/firmata/arduino&quot; rel=&quot;nofollow&quot;&gt;Firmata&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I made something like this called &lt;a href=&quot;http://blog.jaybeavers.org/2012/08/rocketbot-at-maker-faire-2012.html&quot; rel=&quot;nofollow&quot;&gt;RocketBot&lt;/a&gt; for Bay Area Maker Faire 2012.  This was a PC remote controlling two Arduinos which ran the motors, a pneumatic rocket launcher, plus a siren and a warning light.  I'll be posting a simpler version of this design that uses more off the shelf parts in a few weeks to the same blog.  This one will have a bluetooth connection to the Arduino in addition to USB.&lt;/p&gt;&#xA;" OwnerUserId="35" LastActivityDate="2013-05-15T21:48:54.160" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1299" PostTypeId="1" CreationDate="2013-05-16T12:12:15.660" Score="5" ViewCount="11090" Body="&lt;p&gt;I'm trying to send Arduino sensor data to a server using a GPRS shield (&lt;a href=&quot;http://www.geeetech.com/wiki/index.php/Arduino_GPRS_Shield&quot; rel=&quot;nofollow&quot;&gt;SIM900 shield from Geeetech&lt;/a&gt;). I have this particular set up because the data will be updated to a website and the device will be roaming. I can't use &lt;a href=&quot;http://www.cosm.org&quot; rel=&quot;nofollow&quot;&gt;http://www.cosm.org&lt;/a&gt; because to the best of my knowledge that only updates every 15 minutes, I need to update about every 5-10 seconds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to connect I tried the code below to form UDP connection but it does not get sent through to the receiving IP and port. I don't know why. No errors occur on the Arduino side, and the server side has been shown to work with an iPhone app that sends a UDP message.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;///connect&#xA;void connectUDP()&#xA;{&#xA; mySerial.println(&quot;AT+CSTT=\&quot;APN\&quot;&quot;);&#xA; delay(3000);&#xA; ShowSerialData();&#xA; mySerial.println(&quot;AT+CIICR&quot;);&#xA; delay(3000);&#xA; ShowSerialData();&#xA; mySerial.println(&quot;AT+CIFSR&quot;);&#xA; delay(3000);&#xA; ShowSerialData();&#xA; mySerial.println(&quot;AT+CIPSTART=\&quot;UDP\&quot;,\&quot;SERVER IP\&quot;,\&quot;SERVER PORT\&quot;&quot;);&#xA; delay(3000);&#xA; ShowSerialData();&#xA; mySerial.println();&#xA;&#xA;}&#xA;&#xA;&#xA;///send udp packet to server &#xA;void sendUDP()&#xA;{&#xA; for(int x = 0; x &amp;lt; 30; x++){&#xA;   mySerial.println(&quot;AT+CIPSEND&quot;); &#xA;   delay(100);&#xA;   ShowSerialData();&#xA;   mySerial.println(&quot;\&quot;hello world\&quot;&quot;);&#xA;   delay(100);&#xA;   ShowSerialData();&#xA;   mySerial.println((char)26);&#xA;   delay(1000);&#xA;   ShowSerialData();&#xA; }&#xA; mySerial.println();&#xA; //ShowSerialData();&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The server side is as follows (written in python):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;import SocketServer&#xA;&#xA;PORTNO = 14&#xA;&#xA;class handler(SocketServer.DatagramRequestHandler):&#xA;    def handle(self):&#xA;        newmsg = self.rfile.readline().rstrip()&#xA;    print (newmsg)&#xA;        self.wfile.write(self.server.oldmsg)&#xA;        self.server.oldmsg = newmsg&#xA;&#xA;s = SocketServer.UDPServer(('',PORTNO), handler)&#xA;print &quot;Awaiting UDP messages on port %d&quot; % PORTNO&#xA;s.oldmsg = &quot;This is the starting message.&quot;&#xA;s.serve_forever()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I can see a possible solution might be to change it to a TCP connection, but I don't know how to do that...&lt;/p&gt;&#xA;" OwnerUserId="1328" LastEditorUserId="9176" LastEditDate="2015-03-02T12:17:53.403" LastActivityDate="2016-06-28T06:38:13.587" Title="Send Arduino sensor data to server with GPRS shield" Tags="&lt;arduino&gt;&lt;sensors&gt;&lt;raspberry-pi&gt;&lt;programming-languages&gt;&lt;python&gt;" AnswerCount="1" CommentCount="9" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1301" PostTypeId="1" AcceptedAnswerId="1363" CreationDate="2013-05-17T19:08:13.547" Score="10" ViewCount="26239" Body="&lt;p&gt;I just got a kit and im not sure if its me or not but it appears one of the continuous servos might be broken. What happened first when I plugged it into the microcontroller, it made a humming sound when I sent it commands. The second continuous servo didnt work at all&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I played around with different ports on the aurdino based board, and to no avail, just a &lt;strong&gt;hum&lt;/strong&gt;.&#xA;Then I removed the humming servo altogether and just placed the second servo alone. the second continuous servo started to move in whatever direction I asked it to. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I plugged the first one in, only the second moved.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;then I tried spinning them by hand, the second has much resistance, while the first one has dramatically less resistance, maybe 60% easier to spin by hand.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this something I can fix? Has anyone experienced these problems before?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance, you guys are great!&lt;/p&gt;&#xA;" OwnerUserId="1281" LastEditorUserId="350" LastEditDate="2013-05-17T20:00:38.957" LastActivityDate="2017-08-20T19:55:38.083" Title="What are the signs that a servo might be broken?" Tags="&lt;arduino&gt;&lt;microcontroller&gt;&lt;otherservos&gt;&lt;wheeled-robot&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1302" PostTypeId="1" AcceptedAnswerId="1303" CreationDate="2013-05-18T04:01:29.997" Score="4" ViewCount="191" Body="&lt;p&gt;Following, the &lt;a href=&quot;https://robotics.stackexchange.com/questions/1235/how-does-rocker-bogie-keep-the-body-almost-flat&quot;&gt;previous question&lt;/a&gt;, I am trying to calculate how much one rocker would rotate when the other is being rotated. I attached my calculation here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am trying calculate the rotation of gear B that connects to right rocket. Given gear A rotates at 0.05 rad, what is the rotation of gear B in rad? Gear ratio A:D is 4:1, and D:B is 1:4.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the end, I ended up with rotational gear A = gear B. This somewhat puzzles me. Is my calculation correct?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/HDtsx.jpg&quot; alt=&quot;My calculation given rotation of gear A that connects to left rocker&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="1167" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2013-05-18T04:32:03.793" Title="Rotation ratio between left rocker and right rocker in rocker-bogie system" Tags="&lt;wheeled-robot&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1303" PostTypeId="2" ParentId="1302" CreationDate="2013-05-18T04:32:03.793" Score="3" Body="&lt;p&gt;Your calculation is correct in magnitude but incorrect in sign, because gear B rotates oppositely to A (when the axis of D is fixed and D is not locked).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If D is locked (ie, the gear is not free to rotate in its plane) then A and B are locked together and rotate identically.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the body V to which the axis of D is fixed rotates during rotation of A, then the rotation rate of B will differ from that of A.  Example: Let rotation directions for A, B, and V be stated relative to a view from the left, and for D  relative to a view from above.  With V fixed, suppose A rotates CW at 40 rpm.  Then D rotates CCW at 10 rpm, driving B CCW at 40 rpm.  If V now begins to rotate CW  at 20 rpm, D's rotation rate drops to 5 rpm, so that B begins to rotate at -20 rpm relative to A, 0 rpm relative to V, and 20 rpm to the frame of reference.&lt;/p&gt;&#xA;" OwnerUserId="478" LastActivityDate="2013-05-18T04:32:03.793" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1304" PostTypeId="2" ParentId="1301" CreationDate="2013-05-18T07:35:30.943" Score="10" Body="&lt;p&gt;&lt;strong&gt;How Servos Work&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based on these details of your question:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I just got a kit [...] continuous servos [...] plugged it into the&#xA;  microcontroller&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Combined with your &quot;Arduino&quot; tag, I'm betting that you are working with hobby (RC) servos modified for continuous rotation. Standard servos work by receiving a pulsed signal with a 20ms period (50Hz). Regular hobby servos will rotate to a specific angle based on the duty cycle (ON time) of the pulsed control signal. This on time can range from 500us to 2500us, but usually only a range of 1000us to 2000us is used so as to not damage the servo. The &quot;neutral pulse&quot; of 1500us will put the servo in the center position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This &lt;a href=&quot;http://en.wikipedia.org/wiki/Servo_control&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia article&lt;/a&gt; about servo control has a great picture regarding the pulsed control:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/j8bB5.jpg&quot; alt=&quot;Servo Pulses&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are a few different ways that the servo works, but the most common type I've seen in use by hobbyists is an analog servo. As the motor turns, an internal potentiometer is adjusted creating a feedback path for the internal circuitry. The servo will continue to rotate until the potentiometer is at the expected position for the given pulse width.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are &lt;em&gt;numerous&lt;/em&gt; different ways of modifying a standard hobby servo for continuous rotation, so I won't go into that, but essentially, this feedback path is tampered with such the servo never thinks it is in the correct position when it gets a non &quot;neutral&quot; pulse. A mechanical stop on the internal gears is also removed. Once this is done, sending a non neutral pulse will cause the servo to rotate completely, with the speed of rotation dependent upon the pulse width.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Your Issue&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When a non-modified servo is given a pulse, it will quickly rotate to the desired position and hold it as long as a pulse is being sent. It should be very difficult to manually turn the servo at this time, and doing so will cause the internal motor to hum as it draws excessive current trying to correct itself during this overload situation. If the servo is disabled (receiving no pulse) it can be manually manipulated with ease.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A modified servo will exhibit similar behavior when under too much of a load - it will hum loudly and draw excessive current. While your servo may not be overloaded, it is obviously exhibiting similar symptoms and is most likely defective. When being driven, manually turning the actuator or stopping it from turning in its desired direction/speed is not a good idea, so keep that in mind for your other servos.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the defective servo tries to rotate, it is drawing so much current that the second servo cannot operate. That is why it worked fine once the defective servo was removed.&lt;/p&gt;&#xA;" OwnerUserId="1197" LastActivityDate="2013-05-18T07:35:30.943" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1305" PostTypeId="1" CreationDate="2013-05-18T22:24:53.173" Score="2" ViewCount="1514" Body="&lt;p&gt;I recently have been working on a little project. Unfortunately, I've ran into a bit of a road block with controlling servos using serial commands. The servos do appear to move when i put in any character into serial, but only a little. When i type in say, 90 characters of random gibberish, both servos connected to my arduino move several degrees. Here's my code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;Servo.h&amp;gt;&#xA;Servo ULF; // Upper left front servo&#xA;Servo LLF; // Lower left front servo&#xA;byte index = 0;&#xA;int commandnum=1;&#xA;int steps = 0; // position of LLF servo&#xA;int partnum = 0; // unused for now&#xA;String command = &quot;&quot;; // the command we're building&#xA;void setup()&#xA;{&#xA;  LLF.attach(0);&#xA;  ULF.attach(1);&#xA;  Serial.begin(9600);&#xA;}&#xA;&#xA;void loop()&#xA;{&#xA;  while(Serial.available() &amp;gt; 0) { // while there are more than zero bytes to read&#xA;      char in = Serial.read();&#xA;      if(in=='!') {&#xA;             //! is escape character&#xA;       commandnum++;&#xA;       partnum = 0;&#xA;       Serial.println(&quot;New Command. Command #: &quot;+commandnum);&#xA;        break;&#xA;      }&#xA;      command+=in;&#xA;      if(in == ' ') {&#xA;        partnum++;&#xA;        //if we have a space, there's a new section to the command&#xA;      }&#xA;      if(command == &quot;LLF&quot;) {&#xA;        Serial.read(); //skip a space&#xA;&#xA;        Serial.println(&quot;Lower Left Foot Selected.&quot;);&#xA;        int angle = Serial.parseInt(); // find the angle we want&#xA;        Serial.println(&quot;ANGLE: &quot;+String(angle));&#xA;&#xA;        for(int pos = 0; pos &amp;lt; angle; pos++) // for loop through positions to reach goal&#xA;        {                                  &#xA;           LLF.write(pos); // write servo position&#xA;           delay(15);&#xA;        } &#xA;        for(int pos = angle; pos &amp;gt; 0; pos--) // for loop through positions to reach goal&#xA;        {                                  &#xA;           LLF.write(pos); // write servo position&#xA;           delay(15);&#xA;        } &#xA;      }&#xA;   }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Any help would be much appreciated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: Another note, nothing is printed in the serial monitor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, these are micro towerpro rc servos.&lt;/p&gt;&#xA;" OwnerUserId="498" LastEditorUserId="498" LastEditDate="2013-05-20T16:42:58.297" LastActivityDate="2013-06-12T19:07:24.833" Title="Controlling Robots Through Serial" Tags="&lt;arduino&gt;&lt;rcservo&gt;&lt;serial&gt;&lt;c++&gt;" AnswerCount="3" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1306" PostTypeId="1" AcceptedAnswerId="1307" CreationDate="2013-05-19T04:25:44.473" Score="2" ViewCount="201" Body="&lt;p&gt;I was jogging the ABB IRB1410 and I noticed that the servo motors are humming even when the joints are not moving. The motor cuts off only when the guard switch in the flex pendant is released.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;What kind of mechanism which require the drive motors to keep running even when the joints are not moving ?&lt;/strong&gt; I went through the manual but no luck. I suppose the holding torque is provided by some braking mechanism so I think I can rule it out.&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="37" LastEditDate="2013-05-20T15:33:38.593" LastActivityDate="2013-05-20T15:33:38.593" Title="Why are the IRB 1410's servos running even when the joints are not moving?" Tags="&lt;industrial-robot&gt;&lt;servomotor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1307" PostTypeId="2" ParentId="1306" CreationDate="2013-05-19T12:26:44.450" Score="1" Body="&lt;p&gt;The motors in ABB robots have integrated brakes that are &lt;strong&gt;engaged when not energized&lt;/strong&gt;. They hold the position of the joint and prevent the arm from falling if power is lost. The flex pendant enable switch actually drives a relay in the controller that removes or applies all power to the motors. This is done for safety reasons, so that in the event of a mishap (i.e, you drop the pendant), the robot becomes completely de-engerized.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you enable the robot for jogging, it disengages the brake, applies power to the servo, and uses the static torque to hold the joint position instead of the brake. When you release the switch or cut the power in some other way, the brakes engage again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Search Google for &quot;Product manual Motor Unit MU10/20/30&quot; for more details.&lt;/p&gt;&#xA;" OwnerUserId="479" LastEditorUserId="479" LastEditDate="2013-05-19T14:33:59.070" LastActivityDate="2013-05-19T14:33:59.070" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1308" PostTypeId="5" CreationDate="2013-05-20T15:31:02.507" Score="0" Body="&lt;p&gt;An &lt;a href=&quot;https://en.wikipedia.org/wiki/Servomechanism#RC_servos&quot; rel=&quot;nofollow noreferrer&quot;&gt;rc or hobby servo&lt;/a&gt; is a closed-loop servomechanism, typically used in &lt;a href=&quot;https://en.wikipedia.org/wiki/Radio-controlled_model&quot; rel=&quot;nofollow noreferrer&quot;&gt;radio control model&lt;/a&gt;, hobby or small-scale robotics applications. It usually consists of a motor coupled to a sensor (e.g. potentiometer) for position feedback, typically using a high ratio gearbox.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;/questions/tagged/rcservo&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;rcservo&amp;#39;&quot; rel=&quot;tag&quot;&gt;rcservo&lt;/a&gt; questions should not be confused with &lt;a href=&quot;/questions/tagged/servomotor&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;servomotor&amp;#39;&quot; rel=&quot;tag&quot;&gt;servomotor&lt;/a&gt; questions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sub&gt; See &lt;a href=&quot;https://robotics.meta.stackexchange.com/q/170/37&quot;&gt;What should we do about servo questions?&lt;/a&gt; &lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="37" LastEditDate="2018-08-15T14:54:03.823" LastActivityDate="2018-08-15T14:54:03.823" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="1309" PostTypeId="4" CreationDate="2013-05-20T15:31:02.507" Score="0" Body="An rc or hobby servo is a closed-loop servomechanism, typically used in radio control model, hobby or small-scale robotics applications. It usually consists of a motor coupled to a sensor (e.g. potentiometer) for position feedback, typically using a high ratio gearbox.&#xD;&#xA;" OwnerUserId="37" LastEditorUserId="37" LastEditDate="2013-05-20T16:21:55.543" LastActivityDate="2013-05-20T16:21:55.543" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1310" PostTypeId="5" CreationDate="2013-05-20T15:31:56.337" Score="0" Body="&lt;p&gt;A &lt;a href=&quot;http://en.wikipedia.org/wiki/Servomotor&quot; rel=&quot;nofollow&quot;&gt;servomotor&lt;/a&gt; is a closed-loop servomechanism, typically used in industrial applications. It usually consists of a motor coupled to a sensor (e.g. encoder) for precision position feedback, typically using a low ratio gearbox or direct drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sub&gt; See &lt;a href=&quot;http://meta.robotics.stackexchange.com/q/170/37&quot;&gt;What should we do about servo questions?&lt;/a&gt; &lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="37" LastEditDate="2013-05-20T15:31:56.337" LastActivityDate="2013-05-20T15:31:56.337" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1311" PostTypeId="4" CreationDate="2013-05-20T15:31:56.337" Score="0" Body="A servomotor is a closed-loop servomechanism, typically used in industrial applications. It usually consists of a motor coupled to a sensor (e.g. encoder) for precision position feedback, typically using a low ratio gearbox or direct drive." OwnerUserId="37" LastEditorUserId="37" LastEditDate="2013-05-20T15:31:56.337" LastActivityDate="2013-05-20T15:31:56.337" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1312" PostTypeId="5" CreationDate="2013-05-20T15:34:11.770" Score="0" Body="&lt;p&gt;A &lt;a href=&quot;https://en.wikipedia.org/wiki/Servomotor&quot; rel=&quot;nofollow noreferrer&quot;&gt;servomotor&lt;/a&gt; is a closed-loop servomechanism. It usually consists of a motor coupled to a sensor (e.g. encoder) for precision position and/or speed feedback, typically using a low ratio gearbox or direct drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;/questions/tagged/servomotor&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;servomotor&amp;#39;&quot; rel=&quot;tag&quot;&gt;servomotor&lt;/a&gt; questions should not be confused with &lt;a href=&quot;/questions/tagged/rcservo&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;rcservo&amp;#39;&quot; rel=&quot;tag&quot;&gt;rcservo&lt;/a&gt; questions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sub&gt; See &lt;a href=&quot;https://robotics.meta.stackexchange.com/q/170/37&quot;&gt;What should we do about servo questions?&lt;/a&gt; &lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="37" LastEditDate="2018-08-15T14:53:07.190" LastActivityDate="2018-08-15T14:53:07.190" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="1313" PostTypeId="4" CreationDate="2013-05-20T15:34:11.770" Score="0" Body="A servomotor is a closed-loop servomechanism, typically used in industrial applications. It usually consists of a motor coupled to a sensor (e.g. encoder) for precision position feedback, typically using a low ratio gearbox or direct drive." OwnerUserId="37" LastEditorUserId="37" LastEditDate="2013-05-20T15:34:11.770" LastActivityDate="2013-05-20T15:34:11.770" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1314" PostTypeId="1" CreationDate="2013-05-22T21:22:13.977" Score="22" ViewCount="1096" Body="&lt;p&gt;I am currently debugging and tuning an EKF (Extended Kalman Filter). The task is classical mobile robot pose tracking where landmarks are AR markers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sometimes I am surprised how some measurement affects the estimate. When I look at and calculate the numbers and matrices involved, I can work out how the update step got executed, what and why exactly happened, but this is very tedious. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I wonder if anyone is using some technique, trick or clever visualization to get a better feel of what is happening in the EKF update step?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE #1&lt;/strong&gt; (will be more specific and show first approximation of what I have in mind)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I am looking for, is some way to visualize one update step in a way that gives me a feel of how each component of the measurement affects each component of the state.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My very first idea is to plot the measurement and it's prediction together with some vectors taken from the K matrix. The vectors from K represent how the innovation vector (measurement - measurement prediction, not plotted) will affect each component of the state.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Currently I am working with an EKF where the state is 2D pose (x,y,angle) and the measurements are also 2D poses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/9rLjB.png&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9rLjB.png&quot; alt=&quot;Plot of update step&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the attached image(open it in new page/tab to see in full resolution), the (scaled) vector K(1,1:2) (MATLAB syntax to take a submatrix from 3x3 matrix) should give an idea how the first component of the EKF state will change with the current innovation vector, K(2,1:2) how the second component of EKF will change, etc. In this example, the innovation vector has a relatively large x component and it is aligned with vector K(2,1:2) - the second component of the state (y coordinate) will change the most.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One problem in this plot is that it does not give a feel of how the third component(angle) of the innovation vector affects the state. The first component of the state increases a bit, contrary to what K(1:1:2) indicates - the third component of the innovation causes this, but currently I can not visualize this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First improvement would be to visualize how the third component of the innovation affects the state. Then it would be nice to add covariance data to get a feel how the K matrix is created.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE #2&lt;/strong&gt; Now the plot has vectors in state-space that show how each component of measurement changes the position. From this plot, I can see that the third component of the measurement changes the state most.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/PfIEN.png&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/PfIEN.png&quot; alt=&quot;Added vectors corresponding to each component of measurement to state-space&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="1350" LastEditorUserId="350" LastEditDate="2013-07-26T14:54:56.793" LastActivityDate="2016-05-31T03:41:27.360" Title="Visualizing and debugging an EKF" Tags="&lt;ekf&gt;&lt;visualization&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="1315" PostTypeId="1" CreationDate="2013-05-23T03:00:11.017" Score="3" ViewCount="171" Body="&lt;p&gt;I am building 4-wheeled, knee-high robot with music and speakers on top that will follow a target person as the target moves around. I would like some help with the setup for tracking the target. The most obvious solutions are Ultrasound or Infrared sensors or some kind of vision tracking, but for this application, I don't want to use them. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Imagine that the robot is placed into a crowded area and asked to move towards a particular person in the area (for the sake of simplicity, assume the person is less than 5 meters away, but could be obscured by an object). Ideally, if someone walked between the target and the robot, the robot would not lose it's path (as would happen with vision-based sensing).&lt;br&gt;&#xA;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="1354" LastEditorUserId="1354" LastEditDate="2013-05-23T03:19:51.517" LastActivityDate="2013-05-23T21:21:47.063" Title="Non-Vision Based Target Tracking" Tags="&lt;sensors&gt;&lt;computer-vision&gt;&lt;navigation&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1316" PostTypeId="2" ParentId="1315" CreationDate="2013-05-23T04:47:48.240" Score="1" Body="&lt;p&gt;There are a few ways you might handle this.  Although my knee-jerk response is to say &quot;transmit a radio signal from the target and triangulate it with 3 antennas on the robot&quot;, apparently the implementation of that is really difficult (&lt;a href=&quot;https://electronics.stackexchange.com/a/8693&quot;&gt;1&lt;/a&gt; &lt;a href=&quot;http://forums.hackaday.com/viewtopic.php?f=8&amp;amp;t=2420&quot; rel=&quot;nofollow noreferrer&quot;&gt;2&lt;/a&gt; &lt;a href=&quot;http://www.eetimes.com/design/microwave-rf-design/4019032/Wireless-triangulation-using-RSSI-signals&quot; rel=&quot;nofollow noreferrer&quot;&gt;3&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although it sounds heavy-handed, the best way to do what you're describing is to put a GPS on both the robot and the target, and have the target communicate its location back to the robot.  Assuming that you don't lose wireless connectivity -- 5 meters is within the range of bluetooth, zigbee, wifi, and 3G -- obstacles will not hamper the ability of the robot to find its target; you just &lt;a href=&quot;http://www.movable-type.co.uk/scripts/latlong.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;use the haversine formula to draw a path between those two points&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, if you're going to let a knee-high robot loose in a crowded area, it would be common courtesy for it to have adequate ultrasonic/vision sensors to be able to &lt;a href=&quot;http://stream1.gifsoup.com/view5/2689564/peter-skint-knee-o.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;avoid bumping into passerby&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="-1" LastEditDate="2017-04-13T12:33:08.317" LastActivityDate="2013-05-23T04:47:48.240" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1317" PostTypeId="2" ParentId="1314" CreationDate="2013-05-23T12:48:07.110" Score="0" Body="&lt;p&gt;Something that is often done is to plot the state variables over time as well as their 3-sigma intervals. Points where this interval shrinks are the updates, where you could possibly annotate the source of the measurements involved.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Besides errors in implementation which should be checked (not only wrong equations, but numerically unstable equations as well), the effect of updates is only directly affected by the difference between what is &quot;expected&quot; and &quot;measured&quot; and their respective uncertainties. So you might be interested in figuring out a way to visualize this balance in terms of the time progression in the first plot.&lt;/p&gt;&#xA;" OwnerUserId="95" LastActivityDate="2013-05-23T12:48:07.110" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1318" PostTypeId="1" CreationDate="2013-05-23T00:48:32.153" Score="9" ViewCount="209" Body="&lt;p&gt;I am building a robot that will follow a target as the target moves around. I would like some help with the setup for tracking the target. The most obvious solutions are Ultrasound or Infrared sensors, but for this application, they won't work. Imagine that the robot is placed into a crowded area and asked to move towards a particular person in the area (for the sake of simplicity, assume the person is less than 5 meters away). Is there some kind of radar or radio solution to this, or anything?&lt;/p&gt;&#xA;" OwnerUserId="1354" OwnerDisplayName="RJackson" LastEditorUserId="314" LastEditDate="2013-05-23T17:39:43.370" LastActivityDate="2013-05-23T21:17:08.487" Title="Robotics Location Following and Tracking?" Tags="&lt;mobile-robot&gt;&lt;sensors&gt;&lt;electronics&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1319" PostTypeId="2" ParentId="1318" CreationDate="2013-05-23T02:23:14.050" Score="2" Body="&lt;p&gt;In a broad sense, there are a couple of ways to do this, but they basically boil down to the problem of &lt;em&gt;how do you know what person you're going towards?&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it's feasible to give the person a flashlight or some light source (IR or visible), you could use light sensitive elements to determine where to go.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Magnetic fields could also be used, by giving the person in question a strong enough magnet.  (But it would have to be pretty strong, so I don't think this is as feasible...)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A final resort would be to attempt some form of a vision system.  For instance, if you gave the person a lime-green ball, a vision system could pick up on that, and treat it as a target.&lt;/p&gt;&#xA;" OwnerUserId="314" OwnerDisplayName="anorton" LastActivityDate="2013-05-23T02:23:14.050" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1320" PostTypeId="1" AcceptedAnswerId="1325" CreationDate="2013-05-23T18:21:33.780" Score="0" ViewCount="2041" Body="&lt;p&gt;I bought a new Roboduino atmega 328 board. Basically Roboduino is a modded version of Arduino UNO made by robokits.co.in. The problem is &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;On Windows Plaform:&lt;/strong&gt;&#xA;When I tried to upload a simple Blink program that's listed in the examples of Arduino IDE 1.0.4, I got error that &#xA;&lt;strong&gt;avrdude: stk500_getsync(): not in sync: resp=0x00&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I chose the correct COM port after verifying it with the Device manager. I installed the Prolific Drivers for the board. I selected the board as Arduino UNO in Arduino IDE.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The complete verbose for the upload is as follow:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;D:\Softwares\Installed Files\arduino-1.0.4\hardware/tools/avr/bin/avrdude -CD:\Softwares\Installed Files\arduino-1.0.4\hardware/tools/avr/etc/avrdude.conf -v -v -v -v -patmega328p -carduino -P\\.\COM10 -b115200 -D -Uflash:w:C:\Users\ANKITS~1\AppData\Local\Temp\build5865304215250534760.tmp\Blink.cpp.hex:i     &#xA;avrdude: Version 5.11, compiled on Sep  2 2011 at 19:38:36&#xA;         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/&#xA;         Copyright (c) 2007-2009 Joerg Wunsch&#xA;         System wide configuration file is &quot;D:\Softwares\Installed Files\arduino-1.0.4\hardware/tools/avr/etc/avrdude.conf&quot;&#xA;Using Port                    : \\.\COM10&#xA;Using Programmer              : arduino&#xA;Overriding Baud Rate          : 115200&#xA;&#xA;avrdude: Send: 0 [30]   [20]   &#xA;avrdude: Send: 0 [30]   [20]    &#xA;avrdude: Send: 0 [30]   [20]    &#xA;avrdude: Recv:    &#xA;avrdude: stk500_getsync(): not in sync: resp=0x00&#xA;&#xA;avrdude done.  Thank you.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;When I plug in the board the power LED is on. The 13 pin LED blinks once. When the IDE shows uploading the 13 pin LED blinks 3-4 times and then the error appears on the screen. In between also sometimes it blinks randomly for 5-6 times. I also tried other example programs but the same follows.&#xA;I'm using 32 bit Windows 7 Ultimate and the baud rate is set to 9600.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;On Ubuntu 13.04:&lt;/strong&gt;&#xA;I downloaded the IDE from Software Center. I was added to the dialouts group on  the first run. After connecting the board to my pc I ran two commands &lt;code&gt;lsusb&lt;/code&gt; which returned following output:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Bus 004 Device 003: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port&#xA;Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub&#xA;Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub&#xA;Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub&#xA;Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub&#xA;Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and then &lt;code&gt;dmesg&lt;/code&gt;. After this when I tried to upload the same program of blink, it gave me following error:&lt;strong&gt;avrdude: stk500_recv(): programmer is not responding&lt;/strong&gt;. I'm using 64 bit ubuntu 13.04 and selected Arduino UNO as the board.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you for reading this long. Please provide me suggestions for the problem.&lt;/p&gt;&#xA;" OwnerUserId="1359" LastActivityDate="2013-06-23T09:44:55.573" Title="Problem uploading to Roboduino AtMega328" Tags="&lt;arduino&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ClosedDate="2013-07-03T16:26:08.300" ContentLicense="CC BY-SA 3.0" />
  <row Id="1321" PostTypeId="2" ParentId="1047" CreationDate="2013-05-23T20:58:25.673" Score="2" Body="&lt;p&gt;Once you have a real intuition for the Kalman equations you will easily be able to translate the equations / models into code.  I highly recommend working (by hand) the examples in the Lecture &lt;a href=&quot;http://www.cs.cornell.edu/Courses/cs4758/2012sp/materials/MI63slides.pdf&quot; rel=&quot;nofollow&quot;&gt;Subject MI63: Kalman Filter Tank Filling - Kalman Filter Applications&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The examples highlight how the system model can greatly affect the output of the Kalman filter and provide concrete examples of tracking random variables.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More information on the derivation of the models used in the examples is given in &lt;a href=&quot;http://www.cs.unc.edu/~welch/kalman/media/pdf/kftool_models.pdf&quot; rel=&quot;nofollow&quot;&gt;UNC-Chapel Hill, COMP 145 - Team 18: The Kalman Filter Learning Tool - Dynamic and Measurement Models&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can implement the examples in something as simple as Excel or Matlab.  However, if you plan on implementing the Kalman equations in C++, I recommend use the Eigen software package like Josh previously mentioned.&lt;/p&gt;&#xA;" OwnerUserId="1361" LastEditorUserId="37" LastEditDate="2013-05-25T01:41:51.047" LastActivityDate="2013-05-25T01:41:51.047" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1322" PostTypeId="2" ParentId="1318" CreationDate="2013-05-23T21:17:08.487" Score="0" Body="&lt;p&gt;The tricky part with what you want to do is that matching a person to some electronic representation of their &quot;signature&quot; is a very difficult task to do. Outside of some advanced facial recognition software, or tweaked vision software that could recognize a lime green shirt for example, there isn't much you can do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I thought of something I haven't seen suggested elsewhere so I don't know if something like this exists or not but it seems like it could work for you with development. Perhaps using an thermal infrared camera to calibrate a thermal image of you putting in your height dimensions would work. Ultimately you are still getting into a vision based solution but a thermal camera would auto-greenscreen your whole body so to speak so you wouldn't have to worry about wearing the right color clothes or vibrantly colored clothes. It also wouldn't matter which direction you were facing. One caveat would be if you sat down or bent over, you wouldn't be properly height matched so something would have to account for that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyways, just thought I'd throw that idea out there. It wouldn't work in a crowded area as well as you being the only one wearing vibrant green and color matching with a vision solution. Perhaps a combination of the two? Two cameras are better than one.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The issue with any kind of field based approach is that the robot wouldn't know in which direction it was coming from without enough resolution which might force one to get expensive high resolution equipment. Also, the smaller the robot, the more expensive and higher res equipment one would need to triangulate a point of origin.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively, sound signatures could work. Sound waves are slower than electromagnetic waves and so would be easier to triangulate. You could also use a frequency that humans/animals cannot hear. You wouldn't need very high end equipment I don't think if you orient mics at appropriately far angles apart. Imagine a &quot;follow my voice&quot; kind of scenario.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Perhaps RF would work here too as mentioned but it does depend on the size/equipment.&lt;/p&gt;&#xA;" OwnerUserId="1349" LastActivityDate="2013-05-23T21:17:08.487" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1323" PostTypeId="2" ParentId="1315" CreationDate="2013-05-23T21:21:47.063" Score="0" Body="&lt;p&gt;The issue with any kind of field based approach is that the robot wouldn't know in which direction it was coming from without enough resolution which might force one to get expensive high resolution equipment. Also, the smaller the robot, the more expensive and higher res equipment one would need to triangulate a point of origin.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively, sound signatures could work. Sound waves are slower than electromagnetic waves and so would be easier to triangulate. You could also use a frequency that humans/animals cannot hear. You wouldn't need very high end equipment I don't think if you orient mics at appropriately far angles apart. Imagine a &quot;follow my voice&quot; kind of scenario.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Perhaps RF would work here too as mentioned but it does depend on the size/equipment/software.&lt;/p&gt;&#xA;" OwnerUserId="1349" LastActivityDate="2013-05-23T21:21:47.063" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1324" PostTypeId="1" AcceptedAnswerId="1326" CreationDate="2013-05-24T07:13:49.387" Score="1" ViewCount="230" Body="&lt;p&gt;How can I provide more power to a DC motor that is in series behind a receiver circuit hacked out of a cheap RC car without burning up the receiver board? The board runs off two AAs at about 3V. I'm replacing the stock motor with a slightly larger one (12V, taken from a printer) and remounting it on a chassis for a homebrew robotics project... just messing around to learn more. I imagine I could go safely to 4.5V or even 6V with the receiver but I don't want to go much higher since half the stuff is epoxied and I can't really tell what's in there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I'd like to be able to do is add an additional two AA batteries behind the receiver to run the receiver system at 6V but add another two 3V 123A batteries to have the motor at 12V with the ability to run with the higher current draw due to the heavier load the motor will handle on its fancy new chassis... but without pulling that current through the receiver circuit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My first thought is to simply connect my 123As negative to the motor and positive to a common ground... but I'm really not sure and I want to be careful to not damage the circuit or batteries. My next thought is to simply build a single power supply out of my 123As and use a current divider but I've only read about them and never actually tried so.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've been doing some of those kiddie &quot;electronic playgrounds,&quot; a few books and probably cost Google an extra few bucks in energy costs and I'm still kinda at a loss.&lt;/p&gt;&#xA;" OwnerUserId="1362" LastEditorUserId="1362" LastEditDate="2013-05-24T07:22:15.450" LastActivityDate="2015-02-07T03:07:06.683" Title="Additional Power to DC Motor via Second Power Source" Tags="&lt;motor&gt;&lt;power&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1325" PostTypeId="2" ParentId="1320" CreationDate="2013-05-24T09:16:16.450" Score="2" Body="&lt;p&gt;I finally got the problem solved. The problem was that I had selected Arduino UNO. After checking out the datasheets for my board I found that it had the same specs as Arduino Duemilanove AtMega328. After selecting it I got the things right.&#xA;So the general solution is check out the data sheets if you are using any such modded boards and then select the appropriate board which matches the specs.&#xA;Now my board is working successfully on both windows and linux.&lt;/p&gt;&#xA;" OwnerUserId="1359" LastActivityDate="2013-05-24T09:16:16.450" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1326" PostTypeId="2" ParentId="1324" CreationDate="2013-05-24T09:26:17.907" Score="1" Body="&lt;p&gt;It is safest to isolate the power supply for the motors from the electronics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Normally, there is a single top-level power supply, eg. at 12V. This can supply the motors and other actuators directly. Because electronics normally run at 5V or 3V, a voltage regulator is often used to decrease the voltage (it taps into the 12V supply, and outputs a regulated 5V for the electronics). This is good, because the current motors draw can change quickly and may sometimes affect the power supply. In this case, if the voltage regulator is insufficient, capacitors may be added across the 12V supply, but this is not often required.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your case, supposing you don't want to use a voltage regulator, you should have separate battery cells supply your electronics (at 3V), and another stack of cells at 12V to run your motors. You can then connect the ground of each circuit to each other to provide a common reference for your motor control signals. This setup again prevents the motors from affecting the voltage supplied to your electronics (assuming they draw a relatively constant, low current, won't require voltage regulation, although you might add a few capacitors to help with this - especially when you have op-amps or other switching electronics). Also, each cell in each battery stack will have the same current drawn from it. This avoids the some batteries in a stack having more charge than others, or having more current drawn.&lt;/p&gt;&#xA;" OwnerUserId="145" LastActivityDate="2013-05-24T09:26:17.907" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1327" PostTypeId="1" AcceptedAnswerId="1331" CreationDate="2013-05-24T13:34:10.740" Score="3" ViewCount="253" Body="&lt;p&gt;I ran into confusion while reading about motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider a motor with these specs:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Maximum motor voltage - 6VDC&lt;/li&gt;&#xA;&lt;li&gt;No load current - 250mA max.&lt;/li&gt;&#xA;&lt;li&gt;Stall current - around 1A&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I am considering using the Texas Instruments L293D, with these specs:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Output Current - 600 mA Per Channel&lt;/li&gt;&#xA;&lt;li&gt;Peak Output Current - 1.2 A Per Channel&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;If I use the L293D to run 1 motor (back and forth), is this safe?  What would happen if my motor requires more than 600mA?  Does this simply mean I need different driver IC?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, the specs say that if I want to drive 2 motors then i'll need to compensate for the current. Is it current from my power supply or from the motor driver?&lt;/p&gt;&#xA;" OwnerUserId="1367" LastEditorUserId="350" LastEditDate="2013-05-26T01:08:15.397" LastActivityDate="2013-05-26T01:08:15.397" Title="How do I interpret these specs for a motor and motor driver?" Tags="&lt;mobile-robot&gt;&lt;motor&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1329" PostTypeId="1" AcceptedAnswerId="1330" CreationDate="2013-05-24T17:32:40.517" Score="3" ViewCount="54" Body="&lt;p&gt;I used a &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__8934__Turnigy_2200mAh_3S_25C_Lipo_Pack.html&quot; rel=&quot;nofollow&quot;&gt;Turnigy 2200mAh 3S 25C Lipo&lt;/a&gt; battery pack with &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__7637__Turnigy_balancer_Charger_2S_3S.html&quot; rel=&quot;nofollow&quot;&gt;Turnigy balancer &amp;amp; Charger 2S-3S&lt;/a&gt; for about a month. Yesterday I left the battery plugged into four ESCs of my quadrocopter. Today I've found the battery totally discharged. When I tried to charge it, the charger showed it as faulty. After replugging it to the charger it showed it as fully charged.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I charge it now?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S. I've got a multimeter, but I do not know what and how to measure... The battery pack has two plugs: one is connected to the charger and the other to the ESCs...&lt;/p&gt;&#xA;" OwnerUserId="1371" LastEditorUserId="37" LastEditDate="2013-05-25T01:49:14.463" LastActivityDate="2013-05-25T01:49:14.463" Title="Battery pack discharged" Tags="&lt;battery&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1330" PostTypeId="2" ParentId="1329" CreationDate="2013-05-24T18:35:56.360" Score="2" Body="&lt;p&gt;You have to be very careful with those packs as they don't usually have under-voltage protection for themselves. You're pack is likely fine but the charger isn't seeing the minimum voltage required to begin charging and so it won't.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found myself in nearly the same situation not too long ago and managed to bring the battery back to a visible voltage by charging it with a Pb charge algorithm of similar voltage for a few minutes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The multiple plugs are because there are multiple cells in the pack and each one requires individual charging (in parallel - not in series). They all have a common ground so you put the black end of the multimeter in the 4 pin black hole and put the red end in each of the 3 other colored wires. You will get 3 different, but probably close voltages.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have this exact charger which is what I used to revive a similar pack: &lt;a href=&quot;https://www.sparkfun.com/products/10473&quot; rel=&quot;nofollow&quot;&gt;https://www.sparkfun.com/products/10473&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Edit:&#xA;If you wanted to get a littler risky with the battery, a NiMH charger could be used for a short period as you mentioned. It charges at an acceptably low rate but the cells differ a lot more than they do between Pb and Li. A multi-cell NiMH for instance can have all of it's cells charged at once while this is generally not possible for Pb/Li. This means that a 12v NiMH charger is not going to work for a 12v Li battery since each Li cell needs to be charged individually.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you happen to have an NiMH AA charger, you would retrofit that to be a 3v Li cell booster provided it slow-charges by putting two 1.5v terminals in series with the Li cell.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would highly suggest getting an inexpensive smart charger as it's uses are nearly endless and it could save you many headaches that dumb chargers often create.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additionally, you may want to build in a low-voltage cutoff circuit into your design to prevent this issue in the future.&lt;/p&gt;&#xA;" OwnerUserId="1349" LastEditorUserId="1349" LastEditDate="2013-05-24T19:20:49.360" LastActivityDate="2013-05-24T19:20:49.360" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1331" PostTypeId="2" ParentId="1327" CreationDate="2013-05-25T05:52:05.477" Score="2" Body="&lt;p&gt;For the motor, a stall current of 1A means that at stall, supplying 6V will cause the motor to draw 1A. The no-load current of 250mA means that supplying 6V will cause the motor to draw 250mA.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The half-bridge IC you have given has no current overload protection. Its peak current of 1.2A is high enough, but the 600mA continuous current is not. This can normally cause it to overheat, and possibly break. Under the absolute maximum ratings, it has a peak current of 1.2A for &amp;lt;100us. Normally, it may be possible to heat an IC a little more than recommended if a good heatsink is used. However, the &amp;lt;100us implies that this is not possible, because the heat would not be able to transmit through the package fast enough.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These are your options:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;You can supply your own current foldback protection. By using a current sensor of some sort, you can detect when there is too much current flow, you can then scale down the voltage, possibly down to $6\times0.6\div1 = 3.6V$. Assuming a fast control circuit, this is probably fine (due to the peak current allowed).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You can run the motor at only 3.6V. This limits the stall current, torque and maximum no-load speed, but means that you do not have to do any current foldback.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If you can measure the speed of the motor, and assuming you know the back EMF constant of your motor, you can convert speed to back EMF voltage. This is the additional voltage that you can supply to your motor (in addition to the 3.6V which gives 0.6A of current). This is because the amount of the back EMF voltage represents the voltage which will cause zero current to flow.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Note that when you run the motor at 3.6V, this is just the average voltage. Assuming you use pulse width modulation, this is equivalent to a power supply of 6V, with a duty cycle of 60%. Of course, the actual supply voltage must be within the operating condition of the device (36V).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might be tempted to use two sets of half-bridges for each direction of the same motor. However, if you do this, you should be aware that it is quite difficult to control how much of the current comes from each parallel supply. Therefore, due to slight differences in transistor characteristics, one will supply more current than the other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The specifications do not appear to mention anything about compensating current with two motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why don't you just use the L293 quad half-bridge drivers (which allow 1A continuous)?&lt;/p&gt;&#xA;" OwnerUserId="145" LastEditorUserId="145" LastEditDate="2013-05-25T08:50:14.053" LastActivityDate="2013-05-25T08:50:14.053" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1332" PostTypeId="1" CreationDate="2013-05-26T19:15:22.503" Score="3" ViewCount="124" Body="&lt;p&gt;I would like to ask which is better to design the multicopter with odd or even number of propellers? and why?&lt;/p&gt;&#xA;" OwnerUserId="1378" LastEditorUserId="37" LastEditDate="2013-05-27T23:20:27.307" LastActivityDate="2013-05-27T23:20:27.307" Title="Multicopter odd or even" Tags="&lt;quadcopter&gt;" AnswerCount="1" CommentCount="0" ClosedDate="2013-05-27T23:13:55.907" ContentLicense="CC BY-SA 3.0" />
  <row Id="1333" PostTypeId="2" ParentId="1332" CreationDate="2013-05-26T21:59:53.780" Score="1" Body="&lt;p&gt;Simply put, it is a trade off between control complexity vs. power requirements. You should probably go with an even number, 4 or greater. Nice explanation of all the technicalities:  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/543/why-do-quadcopters-have-four-propellers-besides-the-name/544#544&quot;&gt;Why do quadcopters have four propellers?&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&quot;https://robotics.stackexchange.com/questions/25/how-to-choose-the-right-propeller-motor-combination-for-a-quadcopter&quot;&gt;How to choose the right propeller/motor combination for a quadcopter?&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="1330" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2013-05-27T00:48:51.497" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1334" PostTypeId="1" AcceptedAnswerId="1335" CreationDate="2013-05-27T10:38:08.170" Score="2" ViewCount="1033" Body="&lt;p&gt;I bought an RC car about a year ago. A few days later I integrated an arduino nano into the vehicle. The only thing the arduino does is to receive the RC signal and pass it on to the esc/servo. So, basically it just does a big amount of NOTHING :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Right now the wiring looks like this:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;[Remote] -&gt; [rc receiver] -&gt; [arduino] -&gt; [servo/esc/lights]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I added lights and I did some experiments with distance sensors and I will try to integrate car control via xbee + processing. This works via serial already.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What else could be possible with a setup like that? Here are some of my ideas:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;perhaps some sort of autonomic driving? The car is built for offroad and the suspension is not too bad but it is pretty fast (40 km/h) so a crash would be fatal.&lt;/li&gt;&#xA;&lt;li&gt;FPV (first person view) driving? I could add another servo to move a small camera.&lt;/li&gt;&#xA;&lt;li&gt;&quot;swarm intelligence&quot;? I have built two of those vehicles. Both feature the arduino nano, a zigbee and LED front lights.&lt;/li&gt;&#xA;&lt;li&gt;steering correction? I could integrate a gyro sensor to check if the car is not driving straight when it should.&lt;/li&gt;&#xA;&lt;li&gt;telemetry to another arduino? I could build some sort of arduino-zigbee-handheld that shows me some information for both cars like motor temperature, current speed, uptime, battery voltage, sensor values etc.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Any ideas, anyone? Right now it is just driving like it normally would. I integrated an arduino into an RC toy that does an awesome amount of NOTHING. Makes me feel pretty stupid.&lt;/p&gt;&#xA;" OwnerUserId="1383" LastEditorUserId="158" LastEditDate="2013-05-27T19:41:47.990" LastActivityDate="2013-05-27T21:45:56.220" Title="Arduino Controlled RC Car. What now?" Tags="&lt;arduino&gt;&lt;sensors&gt;&lt;radio-control&gt;&lt;automatic&gt;" AnswerCount="1" CommentCount="3" ClosedDate="2013-05-27T23:17:12.013" ContentLicense="CC BY-SA 3.0" />
  <row Id="1335" PostTypeId="2" ParentId="1334" CreationDate="2013-05-27T21:45:56.220" Score="0" Body="&lt;ul&gt;&#xA;&lt;li&gt;Consider integrating an Android smartphone with the Arduino board, as then you get cameras, gps, accelorometers and even voice command.&lt;/li&gt;&#xA;&lt;li&gt;If you have 2 units and you want to build in a camera on one, why not have it automatically follow the other one. This should not be too hard if you put a marker / beacon on the one without the camera, or even a couple of different coloured markers so you can differentiate which side you are looking at. You could then have a 'robot cop' chase the user controlled car. &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="1330" LastActivityDate="2013-05-27T21:45:56.220" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1336" PostTypeId="1" CreationDate="2013-05-28T13:13:10.447" Score="3" ViewCount="80" Body="&lt;p&gt;I have a matrix of M measurements and N objects. Each cell contains a cost of assignment a particular measurement to the object. I want to assign them optimally. As the condition, only one measurement can go to one object, and one measurement can go to only one object. I want to set some cost threshold, in effect there may be some measurement or object, which is not assigned at all.&#xA;How can I do it?&#xA;I was recently thinking of the auction algorithm, which however will never leave any unassigned measurement or object. If that is false, correct me please. Or help with some alternative solution. Thanks for your time!&lt;/p&gt;&#xA;" OwnerUserId="1012" LastEditorUserId="1012" LastEditDate="2013-05-29T08:08:54.397" LastActivityDate="2013-08-05T20:01:50.337" Title="Association of multiple measurements to multiple objects" Tags="&lt;artificial-intelligence&gt;&lt;sensor-fusion&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1338" PostTypeId="2" ParentId="1301" CreationDate="2013-05-28T14:08:51.583" Score="1" Body="&lt;p&gt;Eventually if it's under too much of a load, such as if it's holding a position and you force it in a different direction, or if its trying to adjust to a position and something is blocking it, it will burn out. As in a little puff of smoke will come out. This also happens with servos which eventually reach their end of life. You can generally smell the servo to know if it's dead. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In you're case, it hasn't died, but may be malfunctioning. You generally can't repair servos. If you had new electronics, you could, but unless its a $100+ motor, its generally not worth it. &lt;/p&gt;&#xA;" OwnerUserId="1386" LastActivityDate="2013-05-28T14:08:51.583" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1339" PostTypeId="1" AcceptedAnswerId="1360" CreationDate="2013-05-29T00:41:05.047" Score="6" ViewCount="1070" Body="&lt;p&gt;Okay, this might sound like a stupid question but, is there some sort of a permission in the US I might require to fly a quadcopter or a UAV for that matter? I couldn't find much help anywhere else.  &lt;/p&gt;&#xA;" OwnerUserId="1213" LastActivityDate="2013-06-21T20:05:32.797" Title="Permission to fly UAVs" Tags="&lt;quadcopter&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1340" PostTypeId="2" ParentId="1339" CreationDate="2013-05-29T01:06:43.480" Score="2" Body="&lt;p&gt;It is best to check with your local council - they will be able to inform you on general laws as well as local by-laws. Another good source would be your local model plane club.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as I know: UAV typically requires permission, depending on capabilities (they don't want unlicensed Predator drones flying around). Quadcopters typically don't, except at public events (like those camera quadcopters they use at some sport events). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Disclaimer : based on my personal understanding never having been to the states (they are pretty much standard the world over). I accept absolutely no reponsibility for any claims arising from usage of this info i.e. use at your own risk.&lt;/p&gt;&#xA;" OwnerUserId="1330" LastEditorUserId="1330" LastEditDate="2013-05-29T01:12:24.393" LastActivityDate="2013-05-29T01:12:24.393" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1341" PostTypeId="2" ParentId="1047" CreationDate="2013-05-29T02:43:08.707" Score="2" Body="&lt;p&gt;I've been collecting books on Kalman filtering and target tracking for some years now.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most approachable book I've found: Gelb's &lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/0262570483&quot; rel=&quot;nofollow&quot;&gt;Applied Optimal Estimation&lt;/a&gt;.  It is widely considered a classic in the field.  It is also relatively inexpensive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second place goes to Brookner's &lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/0471184071&quot; rel=&quot;nofollow&quot;&gt;Tracking and Kalman Filtering Made Easy&lt;/a&gt;.  It is aimed primarily at radar processing.  He goes to a good bit of trouble to explain simpler tracking filters first, then shows that the Kalman filter is nothing magic, just a more flexible way of coming up with the coefficients for the filter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Neither of them tackle the association problem for multiple target tracking.  Blackman's &lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/0890061793&quot; rel=&quot;nofollow&quot;&gt;Multiple Target Tracking with Radar Applications&lt;/a&gt; is a good start.  New, it is expensive, like all Artech House books.  Amazon says there are some inexpensive used copies available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, I have yet to find anything that even remotely resembles an approachable explanation for Reid's &lt;a href=&quot;http://users.isr.ist.utl.pt/~alex/Resources/Reid_MHT_ieee_trans_ac_1979.pdf&quot; rel=&quot;nofollow&quot;&gt;Multiple Hypothesis Tracker&lt;/a&gt;, which you need if you are trying to do multiple-target tracking.  This is a robust approach to the problem of associating sensor reports with existing tracks and/or initiating new tracks if something new pops up.  You NEED to solve the association problem to do multiple target tracking.  Unfortunately, Reid's paper is almost incomprehensible, at least to me.  (Yes, there are simpler methods, but they are not nearly as robust.)&lt;/p&gt;&#xA;" OwnerUserId="1384" LastEditorUserId="1384" LastEditDate="2013-05-29T02:49:03.133" LastActivityDate="2013-05-29T02:49:03.133" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1342" PostTypeId="1" CreationDate="2013-05-29T06:08:13.097" Score="0" ViewCount="98" Body="&lt;p&gt;I'm looking for a robot that is capable of moving around and has arms that can get objects in one place and drop in another. Something akin to what we see in most sci-fi movies, though much simpler. It may run on legs, wheels or tracks; it may have claws or hands. I'm looking for open-sourced design, schematics, specifications of the parts, coding - the whole package. It may be specific cases or projects/initiatives with a growing collection of robots.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As long as it can take out the trash, it's perfect. ;D&lt;/p&gt;&#xA;" OwnerUserId="1388" LastActivityDate="2013-05-29T12:30:36.200" Title="Open source &quot;sci-fi&quot;-like robot projects IRL" Tags="&lt;mobile-robot&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="0" ClosedDate="2013-05-30T10:25:00.567" ContentLicense="CC BY-SA 3.0" />
  <row Id="1343" PostTypeId="2" ParentId="1342" CreationDate="2013-05-29T11:33:47.533" Score="2" Body="&lt;p&gt;Regarding Open Source software for robots, check about the &lt;a href=&quot;http://en.wikipedia.org/wiki/Robot_Operating_System&quot; rel=&quot;nofollow&quot;&gt;ROS (robotics operating system)&lt;/a&gt; from &lt;a href=&quot;http://www.willowgarage.com/pages/software/ros-platform&quot; rel=&quot;nofollow&quot;&gt;willow garage&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="1394" LastEditorUserId="37" LastEditDate="2013-05-29T12:30:36.200" LastActivityDate="2013-05-29T12:30:36.200" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1344" PostTypeId="1" AcceptedAnswerId="1366" CreationDate="2013-05-29T17:47:11.450" Score="1" ViewCount="1118" Body="&lt;p&gt;So building a quadrocopter from scratch HAS a lot of decision making, and I need some input on the material choice. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have short listed Aluminum and Carbon Fiber for the Arms and support of the Quadrocopter. &#xA;I am a little short on cash to experiment with both of them. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So considering that I have enough money to buy either of those, and assuming that I have access to general tools like a Table Saw, Horizontal Band Saw, CNC Router and a Water jet. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What would be a better material to work with&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT:&lt;br&gt;&#xA;I will be deciding the specs around the frame so as to allow me some design liberty. So right now, my goal is to assemble a very durable, as-light-as possible frame, which can withstand a lot of experimentation on the electrical side.&lt;/p&gt;&#xA;" OwnerUserId="1213" LastEditorUserId="1213" LastEditDate="2013-05-29T18:43:24.467" LastActivityDate="2014-01-16T11:30:13.913" Title="Aluminum vs Carbon Fiber" Tags="&lt;design&gt;&lt;quadcopter&gt;" AnswerCount="7" CommentCount="1" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1345" PostTypeId="2" ParentId="1344" CreationDate="2013-05-29T20:17:54.663" Score="2" Body="&lt;p&gt;Have you considered balsa or similar woods from the model airplane world?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are a LOT of balsa model airplanes flying.  Some of them are pretty big, and very strong.  (There's a picture of a 1/4 scale Piper J-3 Cub skeleton, pre-covering, with an elementary school kid sitting on the wing box, straddling the forward fuselage.  The airplane survived this particular elephant test just fine.)&lt;/p&gt;&#xA;" OwnerUserId="1384" LastActivityDate="2013-05-29T20:17:54.663" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1346" PostTypeId="1" AcceptedAnswerId="1365" CreationDate="2013-05-29T20:19:28.193" Score="7" ViewCount="1412" Body="&lt;p&gt;I am looking to upgrade the motors for SeaPerch underwater ROVs so we can carry heavier payloads and more equipment.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is, should I look for motors which have a higher RPM and lower torque, or with lower RPM but higher torque to gain a substantial power increase? If the latter, what threshold of RPMs should I stay above to maintain speed?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;We are currently running &lt;a href=&quot;http://www.jameco.com/Jameco/Products/ProdDS/232022.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Jameco &lt;code&gt;PN 232022&lt;/code&gt; motors&lt;/a&gt; with ~1 1/2&quot; props (same setup as &lt;a href=&quot;https://robotics.stackexchange.com/a/313/1397&quot;&gt;here&lt;/a&gt;). They are mainly run at max power as our ESC currently consists of a fuse and a toggle switch.  &lt;/p&gt;&#xA;" OwnerUserId="1397" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2013-06-10T20:28:42.737" Title="Upgrading the motors on a SeaPerch ROV - more torque, or more RPMs?" Tags="&lt;motor&gt;&lt;underwater&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1347" PostTypeId="2" ParentId="1344" CreationDate="2013-05-29T21:56:53.690" Score="1" Body="&lt;p&gt;Based on the experience others have had, it would appear that carbon fibre is a much better choice, because it is much lighter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because you need motors which can hold up the quadrocopter, weight is a primary consideration. By lightening it, you do not need as powerful motors, and you can carry less batteries - which of course, helps to lighten it further.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main part of the frame, are the arms holding the rotors, so using carbon fibre for those would help significantly. I believe there are carbon fibre rods and tubes which can be purchased. The hollow tubes allow wiring through the centre.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, using carbon fibre may change the way things are mounted. In particular, drilling holes for mounting may be problematic - potentially causing cracking in the material. A good solution is to rely on clamping parts to the structure instead.&lt;/p&gt;&#xA;" OwnerUserId="145" LastActivityDate="2013-05-29T21:56:53.690" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1348" PostTypeId="1" CreationDate="2013-05-29T22:11:39.623" Score="17" ViewCount="8772" Body="&lt;p&gt;Some time ago I saw a demo of a small 'toy tank' with a single camera mounted on it. This tank was able to drive around the floor and detect objects and then move/steer to avoid them.&#xA;The interesting part was that it used a single camera vision system and as far as I remember was taking advantage of the floor being flat. and then using the rate a feature was moving in the scene relative to the motors and directions of travel to evaluate and hence map the scene.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone send me pointers what to search for to get some more information on this, or some pointers to codebases that can do this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason I ask is that this was a single camera system from a number of years ago (5+) and therefore (from what I remember) was a relatively low compute load.&#xA;I was intending to try this out on a Raspberry PI to build a car/tank that maps a room or set of rooms.&lt;/p&gt;&#xA;" OwnerUserId="1398" LastEditorUserId="804" LastEditDate="2013-09-17T21:01:14.387" LastActivityDate="2016-06-23T21:37:20.377" Title="Single camera vision and mapping system" Tags="&lt;raspberry-pi&gt;&lt;computer-vision&gt;" AnswerCount="4" CommentCount="1" FavoriteCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="1349" PostTypeId="1" CreationDate="2013-05-30T06:41:04.933" Score="3" ViewCount="2052" Body="&lt;p&gt;I have an Autonomous Lawn mower(ALM) which can mow a certain lawn area when that area is bounded by a perimeter wire. Even when that perimeter wire is removed, it has to mow the above mentioned area accurately without slipping into a neighboring area.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Constraints and problems:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The ALM is an open loop system.&lt;/li&gt;&#xA;&lt;li&gt;Differential GPS was tried, but it did not yield proper results.&lt;/li&gt;&#xA;&lt;li&gt;Any iterative pattern of area coverage can be used provided the error in each iteration is not added cumulatively which can result in unpredictable error in the end.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I do not expect full fledged solution. But I need a starting point to understand motion planning particularly for unbounded robotics to solve this problem. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I searched on internet to know about the knowledge sources about motion planning but could not get good results. Can anyone guide me to know about such sources preferably books and articles on internet which can help me to solve this problem?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT:&#xA;Addition of information:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/a19Od.jpg&quot; alt=&quot;enter image description here&quot;&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The above picture shows the irregular lawn area which does not have any enclosures and perimeter&#xA;wire&#xA;1.The red mark shows the center point of lawn .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2.The grey area is the initial scaled down area which resembles in shape to the larger area .I could not draw the grey area which exactly resembles the larger green area .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3.The grey lines are the contours which from the tracks to be followed by the lawn mower&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Idea description:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1.Using planimeter app for onetime , the shape and dimension of the lawn area (green area) can be known&#xA;Link:&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.vistechprojects.planimeter&amp;amp;hl=en&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://play.google.com/store/apps/details?id=com.vistechprojects.planimeter&amp;amp;hl=en&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2.Center of polygon can be found by using the method in the following link&#xA;&lt;a href=&quot;http://en.wikipedia.org/wiki/Centroid#Centroid_of_polygon&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://en.wikipedia.org/wiki/Centroid#Centroid_of_polygon&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3.Calculation of area of grey shape in the above figure .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;4 . Grey shape is the least possible area which can be grazed by the ALM . Grey shape is similar to the green area shape and it is formed when Green area is scaled down&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To determine the scale down factor which is a numerical value ‘ n’ (n&amp;lt;1) &#xA;Where Grey area = n * Green area&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once the Grey area is known , the number of contours or tracks to be grazed by ALM have to be determined manually .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The width of contour is equal to the distance between the blades on the either end i.e. the width which can be grazed by ALM in a single stroke .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Green area = Grey area + area of track 1 + area of track 2 + area of track3 + . . . . . . + area of track n&lt;/p&gt;&#xA;&#xA;&lt;p&gt;5.Once the lawn mower is switched on ,it should reach the center of the lawn (red mark showed in the above figure)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;6.Then, ALM should graze the least possible area or grey area .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;7.After that ALM should Switch to contour circumscribing the grey area . It should continue circumscribing in each track till all the tracks are completed( decision has to be made by validating against the calculated and preset value ' No.of tracks' in ALM)   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this way entire lawn can be mowed without the need of perimeter wire and also ALM would not mow the neighbor’s lawn &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Challenges :&lt;/p&gt;&#xA;&#xA;&lt;p&gt;a. Enable ALM to reach the center point of the lawn&lt;/p&gt;&#xA;&#xA;&lt;p&gt;a. To make ALM mow the grey area accurately&lt;/p&gt;&#xA;&#xA;&lt;p&gt;b. To make the ALM switch from one track to track .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;c. To bypass the obstacle in track and return to the same track .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When i mentioned this idea to my colleague ,he mentioned the about possible cumulative addition of error in each iteration resulting in an unpredictable error in the end .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I intend to minimize the error and fix the boundary as correct as possible. &#xA;In fact this deviation should be predictable before it can be corrected .&lt;/p&gt;&#xA;" OwnerUserId="1394" LastEditorUserId="1394" LastEditDate="2013-06-04T11:14:06.297" LastActivityDate="2016-08-01T02:40:50.673" Title="Working of Autonomous Lawn mower(ALM) in an unbounded area without a perimeter wire" Tags="&lt;motion-planning&gt;" AnswerCount="3" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1350" PostTypeId="1" CreationDate="2013-05-30T07:01:47.417" Score="2" ViewCount="254" Body="&lt;p&gt;Visible worms, pests, and diseased parts of plants emit a unique odor (Volatile Organic compounds with different concentrations). I understand that sensors which can quantitatively detect these compounds development are being developed. My idea is to build a swarm of robots which can spray pesticides by detecting VOCs on three targets present on plants across the fields.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Target 1: Visible worms, pests, larvae. May these can be mechanically eliminated &lt;/li&gt;&#xA;&lt;li&gt;Target 2: Invisible pathogens on certain areas of a plant &lt;/li&gt;&#xA;&lt;li&gt;Target 3: Areas where pesticides have to be sprayed to prevent disease &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;For these targets, pesticide has to be administered in the correct concentration &#xA;This idea can optimize the use of pesticides and treat the plant properly &#xA;Questions:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Is swarm robotics still sci-fi or Did any one implement it?&lt;/li&gt;&#xA;&lt;li&gt;Are the  any specific scenarios where implemented swarm robotic systems  are coming to help and establish the ease?   &lt;/li&gt;&#xA;&lt;li&gt;Which is the implemented system or idea in conception that can help in formation of solution for the above problem? &lt;/li&gt;&#xA;&lt;li&gt;How much time is required approximately to realize this idea?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Hope this question does not sound sci-fi and is practical and the intention is to solve a definite problem &#xA;How can i work by following some steps to further  make this idea concrete&lt;/p&gt;&#xA;" OwnerUserId="1394" LastEditorUserId="350" LastEditDate="2013-06-03T16:14:57.257" LastActivityDate="2013-06-03T16:14:57.257" Title="Building a Autonomous pesticide spraying system using swarm robotics based on odor (volatile Organic Compounds) detection" Tags="&lt;sensors&gt;&lt;research&gt;" AnswerCount="0" CommentCount="2" FavoriteCount="0" ClosedDate="2014-04-30T16:46:34.470" ContentLicense="CC BY-SA 3.0" />
  <row Id="1352" PostTypeId="2" ParentId="1348" CreationDate="2013-05-30T22:35:33.007" Score="4" Body="&lt;p&gt;It's hard to say exactly what they were doing, but the terms you may want here are &quot;&lt;a href=&quot;http://en.wikipedia.org/wiki/Optical_flow&quot; rel=&quot;nofollow&quot;&gt;optical flow&lt;/a&gt;&quot; and &quot;&lt;a href=&quot;http://en.wikipedia.org/wiki/Egomotion&quot; rel=&quot;nofollow&quot;&gt;egomotion&lt;/a&gt;&quot;. Sounds like there may have been some feature detection and matching (something like SURF or SIFT) or foreground/background segmentation thrown in as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://opencv.org/&quot; rel=&quot;nofollow&quot;&gt;OpenCV&lt;/a&gt; is probably the most widely used codebase for computer vision, they have a lot of &lt;a href=&quot;http://docs.opencv.org/modules/video/doc/motion_analysis_and_object_tracking.html&quot; rel=&quot;nofollow&quot;&gt;functionality for motion analysis&lt;/a&gt;. OpenCV should run on the Raspberry Pi, although your algorithms may be limited by computing power.&lt;/p&gt;&#xA;" OwnerUserId="479" LastActivityDate="2013-05-30T22:35:33.007" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1353" PostTypeId="2" ParentId="1348" CreationDate="2013-05-30T22:52:21.853" Score="4" Body="&lt;p&gt;Building on &lt;a href=&quot;https://robotics.stackexchange.com/users/479/wildcrustacean&quot;&gt;WildCrustcean&lt;/a&gt;'s response another possiblity would be &lt;a href=&quot;http://en.wikipedia.org/wiki/Computer_stereo_vision&quot; rel=&quot;nofollow noreferrer&quot;&gt;stereo vision&lt;/a&gt;. While we often think of stereo vision as using two cameras the techniques really only need images displaced in space and a model of the displacement. In other words I can take an image, move, then take another image. So long as I know the transformation between these two images I can then use stereo vision techniques to calculate the distance to a point in the image.&lt;/p&gt;&#xA;" OwnerUserId="177" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2013-05-30T22:52:21.853" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1354" PostTypeId="2" ParentId="1270" CreationDate="2013-05-31T00:53:53.060" Score="5" Body="&lt;p&gt;If you want to detect missed steps, you want an encoder. Luckily, both magnetic and optical encoders exist that easily give you 4096 steps per revolution, so even a micro-stepping stepper motor will be measured with at least one step per step.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that some CNC mills may not necessarily detect missed steps; it's up to the operator to not program a tool path that's too hard for the spindle and tool, and to hear the problem when it happens. Instead, those CNCs just use end limit switches to find the absolute home, and then work entirely by assuming steps are taken.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Encoders may allow you to experiment with other features, too, like using an assist DC motor for non-engaged moves for really fast rapids :-)&lt;/p&gt;&#xA;" OwnerUserId="88" LastActivityDate="2013-05-31T00:53:53.060" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1355" PostTypeId="2" ParentId="1277" CreationDate="2013-05-31T01:06:07.433" Score="0" Body="&lt;p&gt;Professional CMYK conversions use algorithms that use blend matrices and even non-linear warping to fit the RGB color space (which color space? sRGB?) onto available printing inks. The best way to do that might be to find a library that does this, and find the specific parameters for the inks you want to use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You need to design a system that can deliver an increment in coverage based on an input.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, in offset printing and laser printing, the picture is broken up in very small dots (a halftone screen,) and a percentage of dots is covered to achieve a certain degree of saturation. The different colors in 4-color printing are printed using halftone screens at different angles to minimize the case where one colored dot will keep falling right on top of another colored dot and thus &quot;punch out&quot; the covered color.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For an airbrushing robot, perhaps you can measure degree of paint feed (pressure on the lever) and dwell time, and convert that to a measurement of degree of paint coverage. The air brush works a bit like a stochastic paint particle emitter, removing N % of uncovered area within its zone of effect for every millisecond it is &quot;on.&quot; The covered area is also a 2D function that's strongest in the center, and fades out towards the edges.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my opinion, the most interesting programming challenge in this design is figuring out the optimal path to &quot;sweep&quot; the airbrush to get the right amount of coverage of each kind of paint on each area, while not over/under-covering certain areas and making a mess. Holding the airbrush very close, and painting one &quot;pixel&quot; at a time, would work, but wouldn't be very &quot;artistic.&quot;&lt;/p&gt;&#xA;" OwnerUserId="88" LastActivityDate="2013-05-31T01:06:07.433" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1356" PostTypeId="1" AcceptedAnswerId="1357" CreationDate="2013-05-31T16:38:17.993" Score="7" ViewCount="692" Body="&lt;p&gt;I'm trying to use a PID to stabilize a system described from the following difference equation:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$y_{k+1} = a y_k \sqrt{(1-y_k)}~~~ + b y_{k-1} ~+ c u_k$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can I use &lt;a href=&quot;http://en.wikipedia.org/wiki/Ziegler%E2%80%93Nichols_method&quot; rel=&quot;noreferrer&quot;&gt;Ziegler-Nichols's rules&lt;/a&gt; to find PID parameters in this situation?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To be more precise. My system is an &lt;a href=&quot;http://en.wikipedia.org/wiki/Apache_HTTP_Server&quot; rel=&quot;noreferrer&quot;&gt;Apache Http Server&lt;/a&gt;, in particular I'm trying to model how the CPU load can change in function of &lt;a href=&quot;http://httpd.apache.org/docs/current/mod/core.html#keepalivetimeout&quot; rel=&quot;noreferrer&quot;&gt;KeepAlive&lt;/a&gt; parameter. When KeepAlive grows the cpu load should decrease.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$cpu_{k+1} = a \cdot cpu_k \sqrt{(1-cpu_k)}~~~ + b \cdot cpu_{k-1} ~+ c \cdot keepAlive_k$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously the Cpu load is a scalar $\in [0,1]$ , $keepAlive$ is just a time and the $a,b,c$ parameters are known to me through experimental data and multiple regression on them.&lt;/p&gt;&#xA;" OwnerUserId="1408" LastEditorUserId="37" LastEditDate="2013-06-01T22:09:16.833" LastActivityDate="2013-06-01T22:12:47.440" Title="Can I use Ziegler-Nichols's rules to find PID parameters for a non linear system" Tags="&lt;pid&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1357" PostTypeId="2" ParentId="1356" CreationDate="2013-05-31T19:26:22.700" Score="5" Body="&lt;p&gt;First, you haven't provided enough information.  Your equation is nonlinear, which means that the behavior of the system as described depends not just on the coefficients of the difference equation, but on the range of values that $y$ can take on.  From the looks of things, the closer that $y$ is restricted to 0, the more you can treat the whole thing like a linear system and just apply PID control to it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second, Ziegler-Nichols just isn't indicated here.  Z-N was invented as an ad-hoc tuning method for industrial plants with unknown characteristics.  It guarantees neither stability nor performance of the result -- and assuming that you know the values of $a$, $b$, and $c$, you have a plant with known characteristics!!!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even if the plant characteristics are known, Z-N is really only a good way to arrive at a starting point for tuning.  Z-N tends to result in an underdamped system, and as I mentioned, it guarantees neither stability nor performance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In systems that are amenable, I vastly prefer to do swept-sine measurements (&lt;a href=&quot;http://www.wescottdesign.com/articles/FreqMeas/freq_meas.html&quot; rel=&quot;nofollow&quot;&gt;Measuring Frequency Response&lt;/a&gt;).  If you don't like the buzzing and shrieking noises, and the uninitiated diving for cover behind lab equipment, you can use some sort of a system identification based on a step response instead -- but in my experience with servo systems, a frequency response-based design is superior when you need to go from measured values.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Whatever you do, you want to account for the effect that the variation in the value of $y$ is going to have on your system.  If the derivative &#xA;$$\frac{d}{dy}y\,\sqrt{1-y}$$ varies by more than a few percent, then you need to do your design to accommodate the differing systems characteristics.  If that derivative varies by a factor of two or more, then you need to consider the possibility of some sort of a nonlinear controller, however difficult and perverted your design may end up being, or you need to just pull in your horns and accept that you're going to have a severely detuned system for most ranges of $y$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See &lt;a href=&quot;http://www.wescottdesign.com/actfes/actfes.html&quot; rel=&quot;nofollow&quot;&gt;Applied Control Theory for Embedded Systems&lt;/a&gt; for more information.&lt;/p&gt;&#xA;" OwnerUserId="1411" LastEditorUserId="37" LastEditDate="2013-06-01T22:12:47.440" LastActivityDate="2013-06-01T22:12:47.440" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1358" PostTypeId="2" ParentId="1033" CreationDate="2013-05-31T19:40:59.703" Score="3" Body="&lt;p&gt;If you are speaking about RC style servos, then the actual drive to the motor is in the form of a pulse width modulated voltage: the servo amplifier just turns the motor on fully in one direction or the other, for a length of time determined by the difference between the measured position and the target position as determined by the width of the incoming pulse.&lt;/p&gt;&#xA;&lt;p&gt;Life is complicated by the newer &amp;quot;digital&amp;quot; servos -- I can't swear to the internal workings of these, but the drive to the motor is almost certainly PWM of some sort, just at a faster rate than the old-style analog servo amplifiers.  There's no reason that it couldn't be as described below, except that there is precious little room inside of an RC servo, so there's a good chance that no current measurement is done, and hence that the parameter that the microprocessor controls is the PWM duty cycle.&lt;/p&gt;&#xA;&lt;p&gt;How servo mechanisms in industry are controlled is a much wider answer: basically, it can happen any way that the designer thought was appropriate.  Motor drive can be via a linear amplifier that is configured to drive a current or a voltage, or it can be via a switching amplifier (i.e. PWM).  In the case of a switching amplifier, the amplifier itself can be either analog or digital and (through feedback) configured for either constant-current, constant-voltage, or constant duty cycle.&lt;/p&gt;&#xA;&lt;p&gt;Usually in a &amp;quot;pro&amp;quot; servo mechanism with a brushed or brushless motor there will be an inner loop that servos the motor current (and therefor torque).  This is not so much to provide any big advantage in control as it is because it vastly simplifies current limiting to the motor, which is necessary if you want to keep all that expensive smoke inside the motor where it belongs.  That inner current (and hence torque) loop will often be wrapped by a speed loop that either senses the speed of the motor shaft or that deduces it from the motor's back-EMF (and which provides a convenient means of speed limiting the motor, if that is necessary).  Finally, that speed loop is wrapped by a position loop.&lt;/p&gt;&#xA;" OwnerUserId="1411" LastEditorUserId="1411" LastEditDate="2021-03-13T17:29:58.763" LastActivityDate="2021-03-13T17:29:58.763" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="1359" PostTypeId="2" ParentId="1032" CreationDate="2013-05-31T20:50:17.727" Score="2" Body="&lt;p&gt;A PID loop and a so-called PIV loop with equal gains should have the same response to a disturbance, so I'm not sure why the claim that the disturbance response is better or worse.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As mentioned, the derivative &quot;kick&quot; will be less, which can be a good thing if you give the thing sharp inputs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition, there can be some benefits as the thing comes out of integrator saturation, depending on how you implement your anti-windup.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mostly, the so-called PIV loop is just a way of affecting the zeros of the closed-loop transfer function.  It's a special case of a more general scheme where your controller output is (in Laplace notation) &#xA;$$Y(s)=\frac{k_{fi}U(s) - k_{bi}X(s)}{s} + \left(k_{fp}U(s) - k_{bp}X(s)\right) + \left(k_{fd}U(s) - k_{bd}X(s)\right)s$$ &#xA;where $Y$ is the controller output, $U$ is the system command and $X$ is the controlled variable, while the various $k_{xx}$ are forward and backward integral, derivative, and proportional gains.  In this scheme you tune the various feedback gains ($k_{bx}$) to get the loop (and hence disturbance) response that you want, and you tune the forward gains ($k_{fx}$) to improve the response to a command change, by whatever criteria you have for &quot;better&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Setting all the forward and reverse gains equal gets you a plain ol' PID, while setting $k_{bp}=0$ and  $k_{bd}=0$ gets you the so-called &quot;PIV&quot; controller.&lt;/p&gt;&#xA;" OwnerUserId="1411" LastActivityDate="2013-05-31T20:50:17.727" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1360" PostTypeId="2" ParentId="1339" CreationDate="2013-05-31T21:12:29.600" Score="4" Body="&lt;p&gt;Disclaimer: &lt;a href=&quot;http://en.wikipedia.org/wiki/IANAL&quot; rel=&quot;nofollow&quot;&gt;IANAL&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the US law, small UAVs are analogous to RC models and the regulation depends on the use intent.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For non-commercial, recreational use, the law is relatively permissive and mostly relies on the rules of the Academy of Model Aeronautics. You can find their rules here: &lt;a href=&quot;http://www.modelaircraft.org/documents.aspx&quot; rel=&quot;nofollow&quot;&gt;http://www.modelaircraft.org/documents.aspx&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For commercial use, the UAV currently must be certified like a manned aircraft, which is impossible in practice for small UAVs. Until recently, this has rendered the commercial exploitation of UAVs impossible in US. The parliament has been tasked to design laws to permit commercial exploitation of UAVs by 2015 at the latest. At the moment, it's possible for government agencies and university to obtain special permits through Certificates of Authorization. Other ways of demoing/using UAS are also being put in place (testing fields, lightweight certification process, etc.), but it will be difficult to have a clear picture for the next year or two. To complicate the picture, several states are in the process of passing restrictive laws related, e.g., to privacy, so the situation may end up being state dependent.&lt;/p&gt;&#xA;" OwnerUserId="1400" LastEditorUserId="350" LastEditDate="2013-06-21T20:05:32.797" LastActivityDate="2013-06-21T20:05:32.797" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1363" PostTypeId="2" ParentId="1301" CreationDate="2013-06-01T12:33:10.207" Score="4" Body="&lt;p&gt;There is at least two modalities along which servos (continuous or otherwise) usually fail: gear problems and motor breakdown.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the gear fails (broken tooth, hard point, etc.), the servo may get stuck, free moving or any combination. When the motor breaks (usually the brushes inside the DC motor are the culprit), the servo stops working altogether (as if it was unplugged) or overheats and burns. In your case, since it's humming and behaves differently when actuated by hand, I'd think your servo has gear problem. Its relatively easy to take a look at the gear box as it is the first apparent area when opening the servo and it can easily be re-assembled afterward (on the contrary, checking the motor's brushes usually means breaking the motor open), so I'd have a look to confirm the diagnostic.&lt;/p&gt;&#xA;" OwnerUserId="1400" LastActivityDate="2013-06-01T12:33:10.207" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1364" PostTypeId="2" ParentId="1344" CreationDate="2013-06-01T12:42:17.557" Score="1" Body="&lt;p&gt;My choice is Carbon Fiber for sure. It has some advantages and some disadvantages.&#xA;OT: Using carbon fiber your robot will look much more professional and you will feel good looking at it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Advantages:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Much Lighter.&lt;/li&gt;&#xA;&lt;li&gt;Much Stronger&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Disadvantages:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;More expensive&lt;/li&gt;&#xA;&lt;li&gt;Slightly harder to work with (cutting, ...)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="21" LastActivityDate="2013-06-01T12:42:17.557" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1365" PostTypeId="2" ParentId="1346" CreationDate="2013-06-01T15:33:24.127" Score="7" Body="&lt;p&gt;Keep in mind that &quot;heavier&quot; is not quite the term you're looking for.  You should be trimming your SeaPerch to be neutrally buoyant, so unless the new payload creates significantly more drag than your old one, your existing motors should work fine (just with decreased acceleration in response to the increased mass).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The answer to the question of torque vs RPM really depends on the propeller you use -- they should be evenly matched.  There is a fair amount of theory on this (for example, &lt;a href=&quot;http://web.mit.edu/drela/Public/web/qprop/motorprop.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mark Drela's lecture notes from MIT&lt;/a&gt;), but you can also just approach it in a practical way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The basic idea is to work with the power curves of the propeller and motor (both of which are measurable):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.tunnel2funnel.com/2013/01/significance-of-propeller-curve.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dFuVS.png&quot; alt=&quot;Engine and propeller power curves&quot;&gt;&lt;/a&gt; (more &lt;a href=&quot;http://www.tunnel2funnel.com/2013/01/significance-of-propeller-curve.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based on this, you should be able to work iteratively with a few propeller designs after you pick your motor.  There are also a lot of guides for this (like &lt;a href=&quot;http://youboat.net/boatPower4.aspx&quot; rel=&quot;nofollow noreferrer&quot;&gt;this one&lt;/a&gt;, providing the image below) that explain how to choose the propeller based on the power of the motor that you've already selected.  You might not be measuring your engine power in units as large as &lt;a href=&quot;http://en.wikipedia.org/wiki/Horsepower#Brake_horsepower&quot; rel=&quot;nofollow noreferrer&quot;&gt;BHP&lt;/a&gt;, but the technique is the same.&#xA;&lt;a href=&quot;http://youboat.net/boatPower4.aspx&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/u5r76.png&quot; alt=&quot;Rpm vs propeller size for given HP&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As always, you'll have to run your own thrust-vs-rpm tests on a variety of propellers to verify your calculations.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2013-06-10T20:28:42.737" LastActivityDate="2013-06-10T20:28:42.737" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1366" PostTypeId="2" ParentId="1344" CreationDate="2013-06-02T04:27:23.833" Score="7" Body="&lt;p&gt;If your goal is to experiment, then use the cheapest option possible -- it will give you the freedom to make more mistakes.  Carbon fiber would be great if your design is in a fairly final state, but are you 100% assured that you correctly determined all the thicknesses, mounting holes, wiring guides, etc?  Are you good enough working with carbon fiber to successfully build what you designed?  These are serious things to consider if you are on a budget.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Balsa wood is a fairly cheap way to get started, and there are plenty of others (for example, if it's light enough then you may be able to use a sheet of foam).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Will it look pretty?  No.  But that's a prototype for you; if you're too heavily invested in the appearance/workmanship of the first draft, you'll fail to make newer &amp;amp; better drafts.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2013-06-02T04:27:23.833" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1367" PostTypeId="1" AcceptedAnswerId="1368" CreationDate="2013-06-02T05:11:59.240" Score="4" ViewCount="772" Body="&lt;p&gt;While looking up information for the right propellers for my quadcopter, I realized that they had different orientations i.e. Clockwise and Counterclockwise. On further research I found that all multi-rotors have different combinations of these orientations. So my question is WHY? How does it matter if the propeller is turning clockwise or anti-clockwise?   &lt;/p&gt;&#xA;" OwnerUserId="1213" LastEditorUserId="1213" LastEditDate="2013-06-02T05:17:43.463" LastActivityDate="2013-06-02T06:35:38.837" Title="Prop Orientation on a Multirotor" Tags="&lt;quadcopter&gt;&lt;multi-rotor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1368" PostTypeId="2" ParentId="1367" CreationDate="2013-06-02T06:35:38.837" Score="4" Body="&lt;p&gt;This has to do with the torque, or moment, the rotors induce on the body of the quadcopter/multirotor. If all of the rotors were to spin the same direction they would all induce a torque in the same direction causing the craft to yaw. Of course this is undesirable for many reasons. By spinning half of the rotors the opposite direction the torques are theoretically canceled preventing the craft from yawing.&lt;/p&gt;&#xA;" OwnerUserId="177" LastActivityDate="2013-06-02T06:35:38.837" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1369" PostTypeId="1" CreationDate="2013-06-02T19:28:05.727" Score="7" ViewCount="1464" Body="&lt;p&gt;I want to find the instantaneous center of rotation of a differential drive robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming I know that the robot will travel with a particular linear and angular velocity $(v,w)$ I can use the equations (given at &lt;a href=&quot;http://rossum.sourceforge.net/papers/CalculationsForRobotics/CirclePath.htm&quot; rel=&quot;noreferrer&quot;&gt;A Path Following a Circular Arc To a Point at a Specified Range and Bearing&lt;/a&gt;) which come out to be:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$x_c = x_0 - |\frac{v}{w}| \cdot sin(\theta_0)$$&#xA;$$y_c = y_0 - |\frac{v}{w}| \cdot cos(\theta_0) $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm using the webots simulator and I dumped gps points for the robot moving in a circle (constant v,w (1,1)) and instead of a single $x_c$ and $y_c$ I get a center point for every point. If I plot it out in matlab it does not look nice:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://docs.google.com/file/d/0BzLnU1-OKHh7dmxvbGU1bDFKcFU/edit?usp=sharing&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/J1r3m.jpg&quot; alt=&quot;circles.jpg&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The red points in the image are the perceived centers, they just seem to trace the curve itself. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there some detail I am missing? I'm really really confused as to what's happening. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm trying to figure out the center so I can check whether an obstacle is on this circle or not and whether collision will occur. &lt;/p&gt;&#xA;" OwnerUserId="1419" LastEditorUserId="37" LastEditDate="2013-06-03T16:58:58.107" LastActivityDate="2013-06-04T02:59:23.090" Title="Instantaneous Center of Rotation for a differential Drive Robot" Tags="&lt;mobile-robot&gt;&lt;motion&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1370" PostTypeId="1" AcceptedAnswerId="1373" CreationDate="2013-06-02T20:34:24.683" Score="8" ViewCount="1652" Body="&lt;p&gt;This question stems from previous &lt;a href=&quot;https://robotics.stackexchange.com/questions/1367/prop-orientation-on-a-multirotor&quot;&gt;question&lt;/a&gt;, where I asked why does the prop orientation matter so much for a multirotor. But on further research&lt;sup&gt;&amp;dagger;&lt;/sup&gt; I found that these reasons need not apply to a tri copter. and then again. Why? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are these reasons general for all multi rotors with odd number of motors? or even rotors?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&amp;dagger; &lt;a href=&quot;http://www.rcgroups.com/forums/showthread.php?t=1889111&quot; rel=&quot;nofollow noreferrer&quot;&gt;This forum&lt;/a&gt; talks a lot about tricopters and prop orientations but nothing really answers the question. &lt;/p&gt;&#xA;" OwnerUserId="1213" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2013-06-03T15:11:46.800" Title="Prop orientation for tricopters" Tags="&lt;multi-rotor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1371" PostTypeId="2" ParentId="1266" CreationDate="2013-06-03T02:06:43.127" Score="5" Body="&lt;p&gt;Short answer: the strongest reinforcement effect comes from delivering a valuable reward on an intermittent (random) schedule.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Longer version: One aspect of your question is about &lt;a href=&quot;http://en.wikipedia.org/wiki/Operant_conditioning&quot; rel=&quot;nofollow noreferrer&quot;&gt;operant conditioning&lt;/a&gt;, at least as it applies to teaching maths to a complex organism. Applying this to machine learning is known as &lt;a href=&quot;http://en.wikipedia.org/wiki/Reinforcement_learning&quot; rel=&quot;nofollow noreferrer&quot;&gt;reinforcement learning&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Economics (as per &lt;a href=&quot;https://robotics.stackexchange.com/a/1267/37&quot;&gt;jwpat7's answer&lt;/a&gt;) only addresses one part the story of reinforcement. Utility function tells you what reward has the strongest reinforcement effect (biggest impact on behaviour) in a given context. Is it praise? chocolate? cocaine? direct electrical stimulation to certain areas of the brain? Mostly my answer is about effect of context, assuming a given reward utility.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For complex organisms/behaviours, reward scheduling is at least as important as reward utility:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A &quot;fixed-interval reward schedule&quot; is the least effective way to modify behaviour with a given quantity of reward (I'll give you \$10 per week if you keep your bedroom tidy). Think dole bludger.&lt;/li&gt;&#xA;&lt;li&gt;Fixed ratio reward schedules (I'll give you \$10 every seven days you have a tidy bedroom) are more effective than fixed intervals, but they have a kind of effectiveness ceiling (subject will tidy their room seven times when they are hungry for \$10, but not otherwise). Think mercenary.&lt;/li&gt;&#xA;&lt;li&gt;The most influential way to deliver a given reward with a &quot;variable interval reinforcement schedule&quot; (e.g. every day you tidy your bedroom you have a 1/7 chance of getting $10). Think poker machine.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;If you are a learning supervisor with a fixed reward budget, for a given learning situation, there will be an optimum balance of reward size (utility) and frequency. It's probably not a very small slice of reward at a very high frequency, nor a very large chunk of reward delivered very rarely. It might even be a random size reward at a random schedule - the optimum is usually determined experimentally for a particular situation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, the &quot;optimum&quot; schedule (random frequency, random quantity {p(reward),p(value)}) will probably vary at different stages in the learning process. For example, a new pupil might be subject to &quot;primacy&quot; effect (welcome! have a jelly bean) that quickly becomes fixed-interval reward if you repeat it. There might be a &quot;recency&quot; effect that gets more reinforcement value from a reward delivered on the very last trial (&quot;finishing on a high note&quot;). In between, there may be an accumulative &quot;faith effect&quot; where as a learner becomes more experienced, the optimum might shift toward lower probability, higher utility over time. Again, more stuff to determine empirically in your situation.&lt;/p&gt;&#xA;" OwnerUserId="1422" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2013-06-03T09:53:43.167" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1372" PostTypeId="2" ParentId="1266" CreationDate="2013-06-03T02:49:30.427" Score="1" Body="&lt;p&gt;The optimal reward function depends on the learning objective, i.e. what is to be learned. For simple problems it may be possible to find a closed form representation for the optimal reward function. In fact for really simple problems I'm confident it is possible though I know of no formal methods for doing so (I suspect utility theory would address this question). For more complex problems I would argue that it is not possible to find a closed form solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead of seeking the optimal function we could look to an expert for a good reward function. One approach to doing so is a technique called Inverse Reinforcement Learning (IRL). It formulates a learning problem as a reinforcement learning problem where the reward function is unknown and the objective of the learning process. The paper Apprenticeship Learning via Inverse Reinforcement Learning by &lt;a href=&quot;http://www.cs.berkeley.edu/~pabbeel/&quot; rel=&quot;nofollow&quot;&gt;Pieter Abbeel&lt;/a&gt; and &lt;a href=&quot;http://ai.stanford.edu/~ang/&quot; rel=&quot;nofollow&quot;&gt;Andrew Ng&lt;/a&gt; is a good place to start learning about IRL.&lt;/p&gt;&#xA;" OwnerUserId="177" LastActivityDate="2013-06-03T02:49:30.427" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1373" PostTypeId="2" ParentId="1370" CreationDate="2013-06-03T13:05:43.053" Score="4" Body="&lt;p&gt;For a basic multicopter, in the absence of any other way to control yaw, orientation does matter. A quadrotor needs a balanced set of rotation directions so that it can easily control yaw direction, and at equilibrium, all propellers can rotate at the same speed. This is primarily because all rotors in a quadrotor are fixed (usually). The quadrotor can also control yaw by varying the speed of propellers that rotate in one direction versus another.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Propeller orientation does not matter so much when it has some other method to control yaw. For example, helicopters have a tail rotor, which corrects for any yaw moment caused by the main propeller. Thus, if it was to set to rotate in the opposite direction, the tail rotor can just rotate in the opposite direction to counter this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The standard tricopter has two front rotors, and a third rear rotor. However, the rear rotor can change its axis. It tilts left or right. When it tilts left or right, a portion of its thrust acts in the yaw direction. Therefore, where front rotors rotate in the same direction, the rear rotor must tilt more the counter the moment from the front rotors. Where the front rotors rotate in opposite directions, the rear rotor tilts less. This is explained in &lt;a href=&quot;http://vimeo.com/22778782&quot; rel=&quot;nofollow&quot;&gt;the video&lt;/a&gt; in &lt;a href=&quot;http://www.rcgroups.com/forums/showpost.php?s=768e670da2be9e8df7c955f722722400&amp;amp;p=24951580&amp;amp;postcount=4&quot; rel=&quot;nofollow&quot;&gt;message #4&lt;/a&gt; of the link you posted.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason why the controllers does not even need to know the direction of rotation in the tri-copter is because it is a feedback controller. Thus, when it senses undesired yaw, it simply tilts the rear rotor in the opposite direction to correct the yaw direction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that the rear rotor, when tilted in one direction, also causes a lateral force. This is counter-balanced by having the whole tricopter tilt in the opposite direction. Hence, the front rotors are tilted (to a lesser degree), and part of their force is oriented laterally.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore, tricopters are more stable and performs better when the front rotors are counter-rotating, because the rear rotor can tilt less (as well as the whole tricopter tilting less).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In summary, the general rule is that propeller orientation is a consideration &lt;strong&gt;unless&lt;/strong&gt; it has some other mechanism to correct for yaw. With more than 4 rotors (which are unable to tilt), it is not necessary to have rotors in one direction be exactly equal to the number in the other direction, because it can change the speed of the rotors independently to exactly cancel out the moments. However, this may cause uneven utilisation of the rotors - we tend to like symmetry.&lt;/p&gt;&#xA;" OwnerUserId="145" LastEditorUserId="37" LastEditDate="2013-06-03T15:11:46.800" LastActivityDate="2013-06-03T15:11:46.800" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1374" PostTypeId="2" ParentId="1369" CreationDate="2013-06-03T16:06:37.687" Score="0" Body="&lt;p&gt;It looks like there is some noise in the sensor readings. Make sure your simulator is reporting ground truth, or you have some tolerance to noise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See here: &lt;a href=&quot;http://www.cyberbotics.com/dvd/common/doc/webots/guide/section9.2.html&quot; rel=&quot;nofollow&quot;&gt;http://www.cyberbotics.com/dvd/common/doc/webots/guide/section9.2.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In particular&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In Supervisor code:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;To get the 3D position of any Transform (or derived) node in the&#xA;  Supervisor code: you can use the wb_supervisor_node_get_position()&#xA;  function. Please check this function's description in the Reference&#xA;  Manual.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;To get the 3D position of any Transform (or derived) node placed at&#xA;  the root of the Scene Tree (the nodes visible when the Scene Tree is&#xA;  completely collapsed), you can use the&#xA;  wb_supervisor_field_get_sf_vec3f() function. Here is an example.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;A simulation example that shows both the GPS and the Supervisor&#xA;  techniques is included in the Webots installation, you just need to&#xA;  open this world: $WEBOTS_HOME/projects/samples/devices/worlds/gps.wbt.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;IF in fact noise in the state estimate is the problem (bit IF), then &#xA;the way to compensate for such errors is to use an estimate of your state and error models. It's beyond the scope of the question, unfortunately. If you want to do obstacle avoidance AND you are certain that sensor error is the issue, I suggest you:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Check for obstacles in a wide band (a fat circle) which could represent your trajectory with a bit of error&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Run a filter to get an estimate of robot position, then find the &quot;likely&quot; collisions&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Only look for obstacles over a small window into the future.  In the short term, your state estimate should be fine.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;However, these are heavy handed fixes for what is likely a small problem.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="163" LastEditorUserId="163" LastEditDate="2013-06-04T02:59:23.090" LastActivityDate="2013-06-04T02:59:23.090" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="1375" PostTypeId="2" ParentId="1047" CreationDate="2013-06-03T17:01:27.983" Score="4" Body="&lt;p&gt;The two links that I found most useful were &lt;a href=&quot;http://greg.czerniak.info/guides/kalman1/&quot; rel=&quot;nofollow&quot; title=&quot;Kalman Filter for Undergrads1&quot;&gt;Kalman Filter for Undergrads1&lt;/a&gt;&#xA;and &lt;a href=&quot;http://bilgin.esme.org/BitsBytes/KalmanFilterforDummies.aspx&quot; rel=&quot;nofollow&quot;&gt;Kalman Filter for Dummies&lt;/a&gt;. They're not high on the theory though. and &lt;a href=&quot;http://studentdavestutorials.weebly.com/kalman-filter-with-matlab-code.html&quot; rel=&quot;nofollow&quot;&gt;Student Dave's Kalman Filter Tutorial&lt;/a&gt;. The last one has matlab code that you can play with and is easy to follow. &lt;/p&gt;&#xA;" OwnerUserId="1419" LastActivityDate="2013-06-03T17:01:27.983" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1376" PostTypeId="2" ParentId="1369" CreationDate="2013-06-03T21:19:43.910" Score="2" Body="&lt;p&gt;It's hard to see what's going on exactly, especially without seeing the code or knowing more about the sensor model. That's said, your trajectory is mostly straight and $w$ is thus mostly close to zero. This means that: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;your center of rotation is far away during most of your experiment -- likely beyond the bounds of your graph;&lt;/li&gt;&#xA;&lt;li&gt;you may have numerical stability issues due to a division by a very small number.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="1400" LastActivityDate="2013-06-03T21:19:43.910" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1378" PostTypeId="1" AcceptedAnswerId="1430" CreationDate="2013-06-04T07:07:59.703" Score="2" ViewCount="286" Body="&lt;p&gt;Using ArduPilot software (fixed wing, ArduPlane), I know that after I boot up I need to keep the system sit still while the gyros initialise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I have ground station in the field it's easy to know when it's safe to launch because the telemetry message tells me. But I don't always fly with a ground station. In these situations I currently just sit and wait for a while before arming, then again before launching. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there some reliable rule of thumb? information in the blinking of the arming switch or buzzing that I haven't worked out yet? This UAV has PX4 autopilot hardware (with both Px4FMU and PX4IOBoard), including with buzzer and illuminated arming switch. The LEDs on the board are obscured (but I could make light channels from them if required).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Note: I'm asking this question here to test the theory that robotics stack exchange night be an appropriate forum for these sorts of questions, which has been suggested a couple of times in response to the Area51 drones proposal.)&lt;/p&gt;&#xA;" OwnerUserId="1422" LastEditorUserId="350" LastEditDate="2013-08-08T13:17:56.823" LastActivityDate="2013-08-08T13:17:56.823" Title="How to tell when an ArduPilot has finished initialising its gyros (without referencing telemetry)?" Tags="&lt;uav&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1379" PostTypeId="2" ParentId="1349" CreationDate="2013-06-04T07:14:05.407" Score="1" Body="&lt;p&gt;So you want your robot to stay in a fixed area, without giving any sensor feedback? Don't move the robot... &lt;/p&gt;&#xA;&#xA;&lt;p&gt;More seriously, I don't see how you could get away with having no sensor feedback. You tagged your question as motion planning. Yes, you could find a coverage pattern which minimizes your dead reckoning error, e.g. by looking for the least amount of turns or shortest path. But if you want to use the system in the real world I don't see how this would ever result in the robot not going over your boundary. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ah.. wait. Lets say you know your boundary and your starting position, the best I could think of here would be to go straight to your bounds and then move along the bounds at a distance of lets say three sigma of your position uncertainty. You would try to cover your area from the outside to the inside, and always keep a three sigma distance of your position uncertainty to the borders. At some point your uncertainty ellipse will not fit into the area anymore and you will have to stop. With a bit of luck, large parts of your area may have been covered. Not sure if its practical, since I would not expect lawn movers to have very good odometry. &lt;/p&gt;&#xA;" OwnerUserId="127" LastActivityDate="2013-06-04T07:14:05.407" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1380" PostTypeId="2" ParentId="568" CreationDate="2013-06-05T05:39:59.487" Score="6" Body="&lt;p&gt;Yes. If you only run it in feed-forward mode and do your training off-line somewhere else:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I programmed a 3-layer (5-5-2) feedforward ANN on an Arduino UNO.  It ran on a mobile robot.  Whenever the robot would hit something, it would re-train the network.  The feedforward portion of the net ran in real-time; while the back-propagation training took on the order of ~5 to 20 seconds.  I suppose you could trim the size of the network as well as the play with the parameters to make it run a bit faster, but if you plan on doing backpropagation on an Arduino, I think it would be too slow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some thoughts to speed things up include:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Use fixed vs floating point (for MCU's w/o an FPU)&lt;/li&gt;&#xA;&lt;li&gt;Use an MCU that has a FPU&lt;/li&gt;&#xA;&lt;li&gt;Use a simpler activation function (ie. $\tanh$) instead of Sigmoid&lt;/li&gt;&#xA;&lt;li&gt;Have the training phase occur offline on a PC&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Here's a quick &lt;a href=&quot;http://gururise.github.io/machine-learning-on-an-8-bit-micro/&quot; rel=&quot;nofollow noreferrer&quot;&gt;write-up&lt;/a&gt; I did of the network.&lt;/p&gt;&#xA;" OwnerUserId="1428" LastEditorUserId="-1" LastEditDate="2017-10-24T12:06:30.013" LastActivityDate="2017-10-24T12:06:30.013" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1381" PostTypeId="2" ParentId="568" CreationDate="2013-06-05T06:31:22.010" Score="3" Body="&lt;p&gt;Yes indeed, it's possible to embed neural network in microcontrollers. There are many such examples of this in the scientific literature but I can cite a striking example of what can be done with a very simple MCU if you're smart enough. In &lt;a href=&quot;http://infoscience.epfl.ch/record/63939&quot; rel=&quot;nofollow&quot;&gt;Evolutionary Bits'n'Spikes&lt;/a&gt;, the authors describe the implementation of a real time spiking neural network AND a genetic algorithm to train it, in order to control a differential wheel robot. The whole code runs in a tiny PIC16F628 4MHz MCU embedded on the 1-cubic-inch Alice robot.&lt;/p&gt;&#xA;" OwnerUserId="1400" LastActivityDate="2013-06-05T06:31:22.010" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1383" PostTypeId="1" CreationDate="2013-06-05T12:48:20.323" Score="3" ViewCount="203" Body="&lt;p&gt;I'm robotic engineer, using OpenSCAD to model robotic components (gears, pulleys, parts, etc). But I need an application to model the physics and interaction of the components (for i.e. how will robot move if I rotate a given gear).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, is there any software I can use for modelling interactions in Linux? Google SketchUp is good, but I can't use it in Linux.&lt;/p&gt;&#xA;" OwnerUserId="415" LastEditorUserId="37" LastEditDate="2013-06-05T13:42:37.877" LastActivityDate="2013-06-07T02:43:46.290" Title="Software for robot parts interaction modeling" Tags="&lt;software&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1384" PostTypeId="2" ParentId="1349" CreationDate="2013-06-05T14:47:48.850" Score="4" Body="&lt;p&gt;You have an interesting approach, but I think it's the wrong approach; you've painted yourself into a corner by trying to avoid some technical obstacles (instead of just tackling them).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based on the information you've provided, it sounds like the goal is for this robot to successfully mow an irregularly-shaped lawn while staying within an invisible boundary -- defined using GPS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A positioning system (enabling closed-loop control) is critical to accomplishing this goal.  Going without one is the equivalent of pushing the lawnmower around the yard while blindfolded; not only is it impractical, having a spinning blade on a blindfolded robot borders on unethical.  There are ways to improve the accuracy of GPS, e.g. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;With an INS (&lt;a href=&quot;http://www.cs.cmu.edu/~pvernaza/papers/gpsBiasEst.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Robust GPS/INS-aided localization and mapping via GPS bias estimation&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;li&gt;With visual odometry (&lt;a href=&quot;http://www.doc.ic.ac.uk/~sl203/content/IV2011/Lovegrove_etal_iv2011.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Accurate Visual Odometry from a Rear Parking Camera&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;li&gt;With wheel odometry (&lt;a href=&quot;http://cdn.intechopen.com/pdfs/27718/InTech-Improved_inertial_odometry_gps_positioning_of_wheeled_robots_even_in_gps_denied_environments.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Improved Inertial/Odometry/GPS&#xA;Positioning of Wheeled Robots Even in&#xA;GPS-Denied Environments&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Once you have a robot that knows its precise location, you do not need to pick your algorithm based on minimizing error; you need only visit every position in the lawn area.  (Remember, you will have already used a GPS to draw the boundary of the lawn.) I would refer you to other questions on this site that concern coverage, such as:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://robotics.stackexchange.com/q/628/350&quot;&gt;What algorithm should I implement to program a room cleaning robot?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://robotics.stackexchange.com/q/952/350&quot;&gt;What's an efficient way to visit every reachable space on a grid with unknown obstacles?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="350" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2013-06-05T14:47:48.850" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1386" PostTypeId="5" CreationDate="2013-06-05T16:59:58.500" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2013-06-05T16:59:58.500" LastActivityDate="2013-06-05T16:59:58.500" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1387" PostTypeId="4" CreationDate="2013-06-05T16:59:58.500" Score="0" Body="[Model Predictive Control](http://en.wikipedia.org/wiki/Model_predictive_control)" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2013-06-05T18:47:31.513" LastActivityDate="2013-06-05T18:47:31.513" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1388" PostTypeId="1" CreationDate="2013-06-03T05:00:51.497" Score="1" ViewCount="338" Body="&lt;p&gt;I am trying to write a C code for a pan-tilt unit model ptu-d46 using visual studio 2010 in Windows 7, but I can't find any tutorial or reference on how to do so. All the user's manual mentions is that there is a C programmer's interface (model ptu-cpi) available, but it doesn't say where to find it nor how to use. I looked for it on google but couldn't find anything.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a command reference manual along with the user's manual, but it only shows the different commands to control the tilt and does not explain how to make a C program that connects to the tilt controller and sends queries to it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone please have an idea of where I should look or if there are any open source programs for that. I'm not trying to make a complicated program. I just need it to connect to the tilt controller (the computer is connected via USB cable to the host RS232 of the tilt controller) and makes it nod to say &quot;Yes&quot; and &quot;No&quot; !&lt;/p&gt;&#xA;" OwnerDisplayName="user2446260" LastEditorUserId="350" LastEditDate="2013-06-05T23:33:22.897" LastActivityDate="2013-06-05T23:33:22.897" Title="programming pan-tilt unit with C" Tags="&lt;c&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1389" PostTypeId="2" ParentId="1388" CreationDate="2013-06-03T05:23:26.913" Score="1" Body="&lt;p&gt;The command reference manual is &lt;a href=&quot;http://www.dperception.com/pdf/Pan-Tilt-Command-Reference-Manual.pdf&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;. These commands are sent as ASCII text to the serial interface on the controller.  How to send data to a serial port depends on your OS and how the device is attached.  On Linux, you'll probably open a device file like /dev/ttyXXX and write to that.  I don't know about Windows or MacOS.&lt;/p&gt;&#xA;" OwnerDisplayName="Lee Daniel Crocker" LastActivityDate="2013-06-03T05:23:26.913" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1390" PostTypeId="2" ParentId="1388" CreationDate="2013-06-03T05:26:45.940" Score="0" Body="&lt;p&gt;You do not need the PTI-CPU (which is a separate product -- $250) for your application. It's only necessary if you are going to give the PTU instructions more than 10 times per second.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you just need to do is figure out how to use a serial port in your environment, and send it the commands as described in the manual you already have.&lt;/p&gt;&#xA;" OwnerDisplayName="Gabe" LastActivityDate="2013-06-03T05:26:45.940" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1391" PostTypeId="1" CreationDate="2013-05-07T20:55:32.517" Score="0" ViewCount="10" Body="&lt;p&gt;Does anyone have experience with this &lt;strong&gt;ez-b&lt;/strong&gt;, it is sold by &lt;em&gt;ez-robot.com&lt;/em&gt; and comes with an SDK for Visual Studio&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It has direct scripting in runtime and through usb or bluetooth, wifi, irc, https&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is, if I get a regular arduino board, will i be able to do the same?&#xA;from what ive read, arduino needs to hold the instructions on its own memory, but I rather have the brain in the computer, and feed signals back and forth to the microcontroller&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, is &lt;strong&gt;arduino&lt;/strong&gt; alone, a step down as the website niceley puts it&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks for your help in advance&lt;/p&gt;&#xA;" OwnerUserId="1281" OwnerDisplayName="Ess Kay" LastActivityDate="2013-06-05T18:55:20.790" Title="creating a robot from ez-b or regular arduino" Tags="&lt;arduino&gt;&lt;microcontroller&gt;" AnswerCount="0" CommentCount="3" ClosedDate="2013-06-05T19:48:26.987" ContentLicense="CC BY-SA 3.0" />
  <row Id="1392" PostTypeId="1" CreationDate="2013-05-02T16:37:54.263" Score="1" ViewCount="699" Body="&lt;p&gt;I am using a LSM303 sensor to compute a heading and I want to turn my robot to a heading.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have the simple code here:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;int mag;&#xA;mag = compass.heading((LSM303::vector){0,-1,0});;   //read the angle of the robot&#xA;&#xA;Serial.println(mag);&#xA;while (mag != angle){   &#xA;    //while it isn't the desired angle turn and continue to update the robot angle      &#xA;    trex.write(0xE9);&#xA;    trex.write(90);&#xA;    trex.write(90);&#xA;    mag = compass.heading((LSM303::vector){0,-1,0});;   //read the angle of the robot&#xA;&#xA;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In a function called with a speed and angle (heading), the trex part tells the motor controller to turn on a point and the while loop should test for when the desired heading is reached. However, testing using a couple of instances of &lt;code&gt;Serial.println(mag);&lt;/code&gt; I have determined that once inside the while loop, mag never changes which just means the robot turns indefinitely. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have no idea why this would happen. Perhaps someone here does?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerDisplayName="mark mcmurray" LastActivityDate="2013-06-26T22:20:07.560" Title="Why does my LSM303 magnetometer reading not change in a while loop?" Tags="&lt;arduino&gt;" AnswerCount="1" CommentCount="11" ContentLicense="CC BY-SA 3.0" />
  <row Id="1393" PostTypeId="1" CreationDate="2013-06-05T19:21:52.773" Score="15" ViewCount="29485" Body="&lt;p&gt;I'd like to know if anyone has had success detecting a warm-bodied mammal (ie. Human) using standard off the shelf, inexpensive sensors?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ideally, I'd like to use an inexpensive sensor or combination of sensors to detect a person within a room and localize that person. I would like the robot to enter a room, detect if a human(s) is/are present and then move to the detected human. The accuracy does not need to be 100%, as cost is more of a factor. I'd like the computational requirements of such a sensor to be such that it can run on an Arduino, although if it's impossible, I'd be willing to utilize something with more horespower, such as a Raspberry Pi or a BeagleBone Black. I have a few thoughts; however, none of them are ideal:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;PIR Sensor&lt;/strong&gt; - Can detect movement within a large field of vision (ie. usually 120 degrees or more).  Might be the closest thing to a &quot;human&quot; detector that I'm aware of; however, it requires movement and localizing/triangulating where a person is would be very difficult (impossible?) with such a large field of vision.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Ultrasound&lt;/strong&gt; - Can detect objects with good precision.  Has a much narrower field of view; however, is unable to differentiate between a static non-living object and a human.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;IR detectors&lt;/strong&gt; - (ie. Sharp range sensors) Can again detect objects with great precision, very narrow field of view; however, it is again unable to differentiate objects.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Webcam + OpenCV&lt;/strong&gt; - Possibly use face detection to detect human(s) in a room.  This may be the best option; however, OpenCV is computationally expensive and would require much more than an arduino to run.  Even on a Raspberry Pi, it can be slow.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Kinect&lt;/strong&gt; - Using the feature detection capabilities of Kinect, it would be relatively easy to identify humans in an area; however, the Kinect is too expensive and I would not consider it a &quot;cheap&quot; solution.  &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Perhaps someone is aware of a inexpensive &quot;heat-detector&quot; tuned to body heat and/or has had success with some combination of (#1-4) above and would like to share their results?&lt;/p&gt;&#xA;" OwnerUserId="1428" LastEditorUserId="2663" LastEditDate="2017-04-26T15:57:53.340" LastActivityDate="2018-08-24T10:36:39.290" Title="What is the cheapest / easiest way of detecting a person?" Tags="&lt;sensors&gt;" AnswerCount="6" CommentCount="5" FavoriteCount="13" ContentLicense="CC BY-SA 3.0" />
  <row Id="1394" PostTypeId="1" CreationDate="2013-05-30T04:32:11.880" Score="0" ViewCount="859" Body="&lt;p&gt;I am working on a robotic application under R.O.S. groovy Galapagos.&#xA;I would like to make a tutorial about how create a template app with catkin_create_qt_pkg.&#xA;I'm unable to call the script &lt;code&gt;catkin_create_qt_pkg&lt;/code&gt; from my catkin workspace.&#xA;I found it at the root : _/opt/ros/groovy/qt_ros/qt_create/script_&#xA;But even if I try to execute it as sudoer I got an error.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;ImportError: No module named qt_create&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I'm unable to determine what I have to do to make it work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why?&lt;/p&gt;&#xA;" OwnerUserId="1647" OwnerDisplayName="Jonny_S" LastEditorUserId="350" LastEditDate="2013-06-05T23:31:30.170" LastActivityDate="2013-07-16T02:18:44.297" Title="qt ros tutorial issue" Tags="&lt;c++&gt;&lt;ros&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1396" PostTypeId="2" ParentId="578" CreationDate="2013-06-05T20:06:48.530" Score="3" Body="&lt;p&gt;NXT-G is based on LabView. If you don't like LabView, you won't like NXT-G. Good news though. Lego just debuted Mindstorms EV3. It uses a language based on ICON. Something you may be more interested in. It should be available this winter. &lt;a href=&quot;http://mindstorms.lego.com/en-us/News/ReadMore/Default.aspx?id=476243&quot; rel=&quot;nofollow&quot;&gt;http://mindstorms.lego.com/en-us/News/ReadMore/Default.aspx?id=476243&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, while browsing questions on this site, I learned about this: &lt;a href=&quot;http://www.ros.org/wiki/Robots/NXT&quot; rel=&quot;nofollow&quot;&gt;http://www.ros.org/wiki/Robots/NXT&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A group has apparently built bindings that are relatively simple to use for the Robot Operating System and NXT. EV3 is still cooler, but if you simply must use NXT, I would give ROS a try.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ROS uses &lt;a href=&quot;https://code.google.com/p/nxt-python/&quot; rel=&quot;nofollow&quot;&gt;NXT-python&lt;/a&gt; which you might also give a look as well.&lt;/p&gt;&#xA;" OwnerUserId="1433" LastEditorUserId="1433" LastEditDate="2013-06-06T00:26:23.560" LastActivityDate="2013-06-06T00:26:23.560" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1397" PostTypeId="2" ParentId="1393" CreationDate="2013-06-05T21:55:21.363" Score="7" Body="&lt;p&gt;A combination of a passive infrared detector (PIR) and sonar range finder (SRF) should do the trick.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What has worked well for me previously (not finding humans but very similar) was to have two PIRs on the left and right sides pointed so they have a little bit of overlap in the middle.&lt;br&gt;&#xA;You can then figure out if the human is to the left, right or in front (when both are on). You basically then stack this on top of the SRF which will tell you range etc. It is a bit dirty and you have to make some assumptions, but it works well for it's simplicity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The pseudo code for the 2 PIRs could be something as dead simple as:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;amount = 60; //degrees&#xA;while (notCloseEnough)&#xA;{&#xA;  if (bothActive)&#xA;    forward;&#xA;  else &#xA;  {&#xA;    if (leftActive)  &#xA;      turnLeftByAmount(amount);&#xA;    else&#xA;      turnRightByAmount(amount);&#xA;    amount = amount - 5;&#xA;&#xA;    //recalibrate&#xA;    if (amount &amp;lt;= 0)&#xA;      amount = 60;&#xA;  }&#xA;&#xA;  checkIfCloseEnough();&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The idea is that you turn a lot to one side (60 degrees) if you see something in that area. If they are not in front of you after the turn, turn a little bit less to the side which you are seeing them. Keep repeating and narrowing the amount of turn until they are in front of you, then forward. Remember that you do not turn as much (reset the angle) once they are in front because the will not move 'out of scope' as quick.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was genuinely amazed by how good this algorithm actually works (we used it for automated chase toys and had to slow/dumb it down because it would beat/catch a human controlled robot too easily).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both sensors are available from Pololu (no affiliation):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.pololu.com/catalog/product/1635&quot; rel=&quot;nofollow&quot;&gt;Passive Infrared Detector&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&quot;http://www.pololu.com/catalog/product/723&quot; rel=&quot;nofollow&quot;&gt;Sonar Range Finder&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="1330" LastEditorUserId="1330" LastEditDate="2014-02-12T21:58:01.753" LastActivityDate="2014-02-12T21:58:01.753" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1398" PostTypeId="2" ParentId="1344" CreationDate="2013-06-05T23:14:28.237" Score="2" Body="&lt;p&gt;Aluminum. Simply because you're going to want to make improvements and design changes. I assume cost is a major consideration else you probably would not ask this question. You're free to get creative, adaptive and constantly make changes if you go with a cheaper material. It would be a shame to inhibit creativity because of budget constraints.&lt;/p&gt;&#xA;" OwnerUserId="1435" LastActivityDate="2013-06-05T23:14:28.237" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1399" PostTypeId="1" CreationDate="2013-06-06T02:38:59.163" Score="3" ViewCount="107" Body="&lt;p&gt;I've worked with wiimote accelerometer, but I think now I want to move past that. Mostly because I want to have a wider range of available gestures and I think that using only one accelerometer has too many limitations for what I want to do. I'm looking for something compatible with arduino or RPi. Does anyone have recommendations on how I should do this?&lt;/p&gt;&#xA;" OwnerUserId="1433" LastEditorUserId="350" LastEditDate="2013-06-06T21:45:53.507" LastActivityDate="2016-02-22T12:41:53.717" Title="Wearable Accelerometor" Tags="&lt;control&gt;&lt;sensors&gt;&lt;accelerometer&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1400" PostTypeId="1" CreationDate="2013-06-06T02:46:34.377" Score="4" ViewCount="4205" Body="&lt;p&gt;I want to embed environmental data collected from sensors into a live video stream from a camera. Has anyone done this or know how I would go about doing something like this? Is there a library available for the arduino or RPi?&lt;/p&gt;&#xA;" OwnerUserId="1433" LastEditorUserId="350" LastEditDate="2013-10-07T18:47:15.867" LastActivityDate="2013-11-10T23:29:52.210" Title="Stream Real-time Video with Environmental Data Overlaid" Tags="&lt;sensors&gt;&lt;cameras&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1401" PostTypeId="2" ParentId="1400" CreationDate="2013-06-06T04:59:47.260" Score="0" Body="&lt;p&gt;There are no ready-made open-source solutions that incorporate both streaming video &amp;amp; sensor data from an Arduino that I am aware of; however, it wouldn't be too hard to build your own.  You would need a webcam + software for live streaming, then you'd need to interface your Rpi with the Arduino in order to access sensors that are connected to the Arduino via Python (or other language).  The easiest way of doing that is through the i2c bus, which will leave both USB ports on the Pi free, so you can connect a webcam, and even a USB wifi stick.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://sourceforge.net/projects/mjpg-streamer/&quot; rel=&quot;nofollow&quot;&gt;&lt;strong&gt;mjpg-streamer&lt;/strong&gt;&lt;/a&gt; - if your webcam supports MJPEG, it is the best and least computationally expensive way of streaming live video from your Raspberry Pi.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://blog.oscarliang.net/raspberry-pi-arduino-connected-i2c/&quot; rel=&quot;nofollow&quot;&gt;&lt;strong&gt;RPi + Arduino via i2c&lt;/strong&gt;&lt;/a&gt; - Tutorial for connecting the Rpi to the Arudino via i2c (uses Python SMBus library).  You will need to modify the Arduino code to send the sensor data you need based upon the byte value sent from the Pi.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;You would then edit the php page hosted by the mjpg daemon to add your sensor data that you would collect via Python and the SMBus library.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can launch mjpg-streamer using the following:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;./mjpg_streamer -i &quot;./input_uvc.so&quot; -o &quot;./output_http.so -w ./www&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;or for webcams w/o MJPEG support:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;./mjpg_streamer -i &quot;./input_uvc.so&quot; -o &quot;./output_http.so -y -w ./www&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You can then view the livestream at localhost:8080&lt;/p&gt;&#xA;" OwnerUserId="1428" LastEditorUserId="1428" LastEditDate="2013-06-06T05:07:18.660" LastActivityDate="2013-06-06T05:07:18.660" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1402" PostTypeId="2" ParentId="1399" CreationDate="2013-06-06T06:13:43.043" Score="3" Body="&lt;p&gt;What you want is a three-axis (or sometimes triple-axis, three-axes) accelerometer, which will allow you to detect the magnitude and direction of the acceleration. If you want to detect the acceleration of one part relative to another part, then you need an accelerometer for each part. I2C is a reasonably standard sensor protocol. I2C accelerometers are available off-the-shelf, and Arduino has libraries for I2C communication.&lt;/p&gt;&#xA;" OwnerUserId="1438" LastActivityDate="2013-06-06T06:13:43.043" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1404" PostTypeId="2" ParentId="1400" CreationDate="2013-06-06T15:28:17.970" Score="0" Body="&lt;p&gt;I have done something similar using the Robot Operating System (ROS). It makes streaming data really easy, although it might be more than you're asking for, and I'm not sure how much support for RPi there is. Basically, after installing ROS, you would just need to download  the mjpeg_server (&lt;a href=&quot;http://ros.org/wiki/mjpeg_server&quot; rel=&quot;nofollow&quot;&gt;http://ros.org/wiki/mjpeg_server&lt;/a&gt;) package for streaming video and rosbridge (&lt;a href=&quot;http://www.ros.org/wiki/rosbridge_suite&quot; rel=&quot;nofollow&quot;&gt;http://www.ros.org/wiki/rosbridge_suite&lt;/a&gt;) for streaming other types of data. ROS probably already has support for your webcam, but you'd probably have to write ROS nodes to collect other sensor data and publish them to topics. With rosbridge, you can easily expose those topics to the web on websockets.&lt;/p&gt;&#xA;" OwnerUserId="181" LastActivityDate="2013-06-06T15:28:17.970" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1405" PostTypeId="2" ParentId="1348" CreationDate="2013-06-06T15:52:31.753" Score="1" Body="&lt;p&gt;It could have been using Parellel Tracking and Mapping &lt;a href=&quot;http://www.robots.ox.ac.uk/~gk/PTAM/&quot; rel=&quot;nofollow&quot;&gt;PTAM&lt;/a&gt;. PTAM is an implementation of the Simultaneous Localization and Mapping (SLAM) problem that uses a single camera to build a 3D map of the world and localize by tracking visual features.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My team once experimented with using the &lt;a href=&quot;http://www.ros.org/wiki/ptam&quot; rel=&quot;nofollow&quot;&gt;PTAM package in ROS&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We were running Ubuntu on an Intel Atom, and as I recall it didn't grain too much of the processor. We didn't end up using though, mainly because we couldn't get it to find enough features in the environment where our robot would be running.&lt;/p&gt;&#xA;" OwnerUserId="181" LastEditorUserId="1336" LastEditDate="2016-06-23T21:37:20.377" LastActivityDate="2016-06-23T21:37:20.377" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1406" PostTypeId="2" ParentId="1336" CreationDate="2013-06-06T19:40:50.397" Score="3" Body="&lt;p&gt;The &lt;a href=&quot;http://en.wikipedia.org/wiki/Hungarian_algorithm&quot; rel=&quot;nofollow&quot;&gt;Hungarian Algorithm&lt;/a&gt; should be suitable for this case. You have already generated the cost matrix that describes the cost of each measurement to each object. The algorithm determines the assignments that yield the minimum total cost. It can handle cases with more measurements that objects (false positives) and more objects than measurements (when an object isn't detected). (These cases have non-square cost matrices.) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This will assign all measurements if the number of objects if M measurements &amp;lt;= N objects. However, you can then go back and look at the individual costs of the assignments and apply a threshold to weed out matches with low scores.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are many libraries in various programming languages for this algorithm. One I've used and is well documented is the &lt;a href=&quot;https://pypi.python.org/pypi/munkres/&quot; rel=&quot;nofollow&quot;&gt;munkres python library&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="1125" LastActivityDate="2013-06-06T19:40:50.397" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1407" PostTypeId="2" ParentId="1383" CreationDate="2013-06-07T02:43:46.290" Score="3" Body="&lt;p&gt;Have you considered modeling the robot in a simulator? &lt;a href=&quot;http://www.v-rep.eu/&quot; rel=&quot;nofollow&quot;&gt;V-REP&lt;/a&gt; is new and quite good, having lots of examples robots from other famous projects. &lt;a href=&quot;http://gazebosim.org/&quot; rel=&quot;nofollow&quot;&gt;Gazebo&lt;/a&gt; is another popular one that is usually used with ROS (although V-REP also has ROS support). Both run on linux and are open-source.&lt;/p&gt;&#xA;" OwnerUserId="181" LastActivityDate="2013-06-07T02:43:46.290" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1408" PostTypeId="1" AcceptedAnswerId="1412" CreationDate="2013-06-07T13:41:23.617" Score="5" ViewCount="2323" Body="&lt;p&gt;So I want to program something that will simply push a button, but controllable over ethernet.  I'm new to robotics so I don't know where to start.  What's the best way to control an actuator over a network connection?&lt;/p&gt;&#xA;" OwnerUserId="1432" LastEditorUserId="32" LastEditDate="2013-06-07T16:10:33.357" LastActivityDate="2016-05-31T15:28:02.970" Title="Pushing Buttons Remotely over Ethernet" Tags="&lt;arduino&gt;&lt;actuator&gt;" AnswerCount="4" CommentCount="2" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1409" PostTypeId="2" ParentId="1408" CreationDate="2013-06-07T15:01:17.560" Score="1" Body="&lt;p&gt;Are you talking about something similar to &lt;a href=&quot;http://www.youtube.com/watch?v=7TcdAJ3LjtM&quot; rel=&quot;nofollow&quot;&gt;this setup&lt;/a&gt;? If so, the code in &lt;a href=&quot;http://forum.arduino.cc/index.php/topic,112311.0.html&quot; rel=&quot;nofollow&quot;&gt;this thread&lt;/a&gt; could be helpful, as well as the video found &lt;a href=&quot;http://bildr.org/2011/06/arduino-ethernet-pin-control/&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I focused on was first getting Arduino to work as a Web-server (a bit like &lt;a href=&quot;http://www.makeuseof.com/tag/give-your-arduino-project-its-own-mini-webserver-with-an-ethernet-shield/&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt;), then including hyperlinks in the Arduino-generated page that would then allow me to control the actuator.&lt;/p&gt;&#xA;" OwnerUserId="32" LastEditorUserId="32" LastEditDate="2013-06-07T15:06:41.407" LastActivityDate="2013-06-07T15:06:41.407" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1410" PostTypeId="2" ParentId="1408" CreationDate="2013-06-07T15:04:33.883" Score="3" Body="&lt;p&gt;One approach would be to use and &lt;a href=&quot;https://www.sparkfun.com/categories/103&quot; rel=&quot;nofollow&quot;&gt;Arduino&lt;/a&gt; with an &lt;a href=&quot;https://www.sparkfun.com/products/9026&quot; rel=&quot;nofollow&quot;&gt;ethernet shield&lt;/a&gt;. There are plenty of examples online for both of these devices. From there you would just need to create a GUI and the build your robot to push the button.&lt;/p&gt;&#xA;" OwnerUserId="177" LastActivityDate="2013-06-07T15:04:33.883" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1411" PostTypeId="2" ParentId="1339" CreationDate="2013-06-07T17:47:41.113" Score="1" Body="&lt;p&gt;You can fly anything you want in class G airspace. Generally speaking, if you're far from any airport or military training area, you are probably walking around in  class G. To be sure, though, you should consult a &lt;a href=&quot;http://aeronav.faa.gov/index.asp?xml=aeronav/applications/VFR/chartlist_sect&quot; rel=&quot;nofollow&quot;&gt;current FAA sectional chart&lt;/a&gt; for your area.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Class G is considered &quot;uncontrolled&quot; by the FAA. Note however that there are other regulations and agencies that restrict flight activities there. Sadly there is no &quot;easy&quot; answer in U.S. airspace.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In most cases, except for special situations like in the mountains, Class G extends up to 1200 ft above the ground (AGL).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm quite familiar with airspace rules because of my previous job (UAV operator).  I guarantee you can fly anything you want, but see for yourself: &lt;a href=&quot;http://en.wikipedia.org/wiki/Airspace_class_(United_States)#Class_G&quot; rel=&quot;nofollow&quot;&gt;http://en.wikipedia.org/wiki/Airspace_class_(United_States)#Class_G&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="1444" LastEditorUserId="1527" LastEditDate="2013-06-21T19:14:18.543" LastActivityDate="2013-06-21T19:14:18.543" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1412" PostTypeId="2" ParentId="1408" CreationDate="2013-06-07T21:13:26.127" Score="3" Body="&lt;p&gt;First, let's consider what actuator you need to physically push a button. One straight forward solution is to use a RC-Servo motor. An RC-Servo motor is a high torque (DC motor with gearbox) actuator which can be instructed to rotate at a specific angle. It is controlled through a PWM signal. So you need to figure out the duty cycle of the PWM signal to do the desired movement and push the button you want.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Secondly we need a controller that:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;is able to generate a PWM signal&lt;/li&gt;&#xA;&lt;li&gt;communicate through the Internet&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;First thing that comes to my mind is to use a Raspberry Pi. Of course it is a huge overkill to use it just for pushing a button but in the process you will learn a lot of interesting things about setting up Raspberry Pi. You can setup a minimal web-server using python in less that 5 minutes.&#xA;Arduino with an Ethernet shield as DaemonMaker suggested is also a great setup.&lt;/p&gt;&#xA;" OwnerUserId="1445" LastEditorUserId="2447" LastEditDate="2014-01-09T00:24:38.540" LastActivityDate="2014-01-09T00:24:38.540" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1413" PostTypeId="1" AcceptedAnswerId="1415" CreationDate="2013-06-09T21:29:14.680" Score="3" ViewCount="645" Body="&lt;p&gt;In general, is a Raspberry Pi processor powerful enough for a mobile chatbot? I want to make a small mobile robot that is like a chatbot. Is a Raspberry Pi processor powerful enough for any type of AI robotics?&#xA;As far as a mobile robot, I want to make a wheeled robot about one foot in every dimension. The chatbot abilities will be from ProgramPY-SH, a new chatbot program that uses Xaiml databases. The chatbot works by looking through a database for a match of the user's input (vocal or text-based). It then acts according to the instructions given by the XML-like database.&lt;/p&gt;&#xA;" OwnerUserId="1309" LastEditorUserId="1309" LastEditDate="2013-06-09T21:51:36.760" LastActivityDate="2013-06-10T22:00:45.510" Title="Is a Raspberry Pi processor powerful enough for a mobile chatbot?" Tags="&lt;mobile-robot&gt;&lt;raspberry-pi&gt;&lt;artificial-intelligence&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1414" PostTypeId="1" AcceptedAnswerId="1462" CreationDate="2013-06-10T16:08:43.623" Score="5" ViewCount="350" Body="&lt;p&gt;I am currently working on a legged hexapod which moves around using a tripod gait. I have two sets of code to control the tripod. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Set 1: Time based control&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this code set, I set the tripod motor set to move at their rated rpm for a required amount of time before shifting to the other tripod motor set.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PID control would be based on counting the number of transitions using an optical speed encoder, Calculating the error based on difference between actual speed and required speed and then adjusting the error with fixed Kd and Ki values.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Set 2: Transitions based control&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this code set I count to the number of transitions required to complete one rotation of the leg(tripod motor set) before starting the other leg(tripod motor set).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PID control would be time based. Calculation of error would be the difference in time taken for individual motors of the motor set.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Query:&#xA;The set 2 shows promising results even without PID control, but the first set does not.Why so? The motors are basically set to move 1 rotation before the other set moves. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would the speed differences between the motors cause it to destabilize?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How often do I update the PID loop?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My robot seems to drag a little bit. How do I solve this?&lt;/p&gt;&#xA;" OwnerUserId="333" LastEditorUserId="110" LastEditDate="2016-01-03T13:55:10.327" LastActivityDate="2016-01-03T13:55:10.327" Title="PID Conundrums for Legged Robots" Tags="&lt;mobile-robot&gt;&lt;pid&gt;&lt;legged&gt;&lt;walking-robot&gt;&lt;hexapod&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1415" PostTypeId="2" ParentId="1413" CreationDate="2013-06-10T22:00:45.510" Score="1" Body="&lt;p&gt;Despite its price, the Raspberry Pi is a rather powerful platform that can run most Linux desktop applications but the most CPU/memory hungry. For example, Quake 3 has been shown to &lt;a href=&quot;http://www.youtube.com/watch?v=e_mDuJuvZjI&quot; rel=&quot;nofollow&quot;&gt;run in 1080p&lt;/a&gt; on it.&lt;/p&gt;&#xA;" OwnerUserId="1400" LastActivityDate="2013-06-10T22:00:45.510" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1416" PostTypeId="1" AcceptedAnswerId="1487" CreationDate="2013-06-11T00:11:39.623" Score="3" ViewCount="244" Body="&lt;p&gt;I'm involved in research on psychologically plausible models of reinforcement learning, and as such I thought it'd be nice to try and see how well some to the models out there perform in the real world (i.e. sensory-motor learning on a mobile robot). This is already been done in some robotics labs, such Sutton's &lt;a href=&quot;http://webdocs.cs.ualberta.ca/~sutton/papers/horde-aamas-11.pdf&quot; rel=&quot;nofollow&quot;&gt;implementation of the Horde Architecture on the &quot;Critterbot&quot;&lt;/a&gt;. However, these implementations involve robots custom-build by robotics experts in order to deal with the trials and tribulations of learning on a long time-scale: &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&quot;The robot has been&#xA;  designed to withstand the rigors of reinforcement learning&#xA;  experiments; it can drive into walls for hours without damage or burning out its motors, it can dock autonomously&#xA;  with its charging station, and it can run continuously for&#xA;  twelve hours without recharging.&quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Unfortunately I'm no expert when it comes to designing robots, and don't have access to a high quality machine shop even if I did; I'm stuck with whatever I can buy off-the-self or assemble by hand. Are these constraints common enough for amateur robotics suppliers to cater to, or should I expect to have to start from scratch?&lt;/p&gt;&#xA;" OwnerUserId="1460" LastEditorUserId="1460" LastEditDate="2013-06-12T03:44:01.973" LastActivityDate="2013-06-27T04:28:24.337" Title="Building robots with high reliability, durability, and battery life" Tags="&lt;mobile-robot&gt;&lt;battery&gt;&lt;reinforcement-learning&gt;" AnswerCount="2" CommentCount="12" ContentLicense="CC BY-SA 3.0" />
  <row Id="1417" PostTypeId="1" CreationDate="2013-06-11T07:29:41.250" Score="-2" ViewCount="447" Body="&lt;p&gt;How would you go about building a robot that can use a computer? Type on the keyboard, move &amp;amp; click mouse? I am talking about physically manipulating the hardware inputs, and the robot would be able to see the screen. Not connected to anything. It's purely autonomous. My hope is that this will replace human QA testers.&lt;/p&gt;&#xA;" OwnerUserId="1462" LastActivityDate="2013-06-11T10:01:20.850" Title="What is the best way to go about building a robot hand that can type on keyboard, move &amp;click mouse, swipe touchscreens?" Tags="&lt;wheeled-robot&gt;&lt;artificial-intelligence&gt;&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="6" ClosedDate="2013-06-11T11:28:02.617" ContentLicense="CC BY-SA 3.0" />
  <row Id="1418" PostTypeId="2" ParentId="1417" CreationDate="2013-06-11T10:01:20.850" Score="2" Body="&lt;p&gt;Your question contains a bunch of questions which i would try to reveal in the first place:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Q:&lt;/strong&gt; &lt;em&gt;What kind of drive would i need to solve the task of typing keyboards, clicking a mouse etc.?&lt;/em&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;A:&lt;/strong&gt; Basically this is answered by your requirements of motion which are force, velocity, range to name the most important. Every type of drive has its own privileges according these requirements, but you totally have an eye on costs and your control as well. For these kind of tasks i would suggest a pneumatic drive for example. But it could be a combination of different types as well, e.g. wrist - electrical drive, finger - pneumatics and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Q:&lt;/strong&gt; &lt;em&gt;What kind of control would i need to control these motions?&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;A:&lt;/strong&gt; For this you have to consider several aspects such as complexity, your chosen drive, energy consumption (mobile systems!!) and costs as well. Hardware would not be a problem since embedded systems nowadays are quite powerful and performant. But in your case your control would contain closed loops since you need a feedback on force to not destroy your touchpad and keyboard. Which is in general quite complex and difficult to solve in realtime. If we are speaking of recognition by images etc., then hallelujah..&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Q:&lt;/strong&gt; &lt;em&gt;Which tools do i need?&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;A:&lt;/strong&gt; First of all a your well trained brain :) But in general you would start to desing a simulation for your drives and control to be sure everything COULD work out fine. Then you would need tools for design and layout. These tools are quite expensive as you may have guessed already..&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Q:&lt;/strong&gt; &lt;em&gt;Where to start?&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;A:&lt;/strong&gt; Think in modules. Start with the very basic part and easily spoken integrate all parts to subsystems, all subsystems to a whole system. But don't forget to run tests /  simulations on every level! Every change afterwards will exploder your time (and cost) consumption exponential!&lt;/p&gt;&#xA;" OwnerUserId="1329" LastActivityDate="2013-06-11T10:01:20.850" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1419" PostTypeId="1" CreationDate="2013-06-11T10:07:54.903" Score="9" ViewCount="2242" Body="&lt;h1&gt;A little background of my aim&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;I am in the process of building a mobile autonomous robot which must navigate around an unknown area, must avoid obstacles and receive speech input to do various tasks. It also must recognize faces, objects etc. I am using a Kinect Sensor and wheel odometry data as its sensors. I chose C# as my primary language as the official drivers and sdk are readily available. I have completed the Vision and NLP module and am working on the Navigation part. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My robot currently uses the Arduino as a module for communication and a Intel i7 x64 bit processor on a laptop as a CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the overview of the robot and its electronics: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Oo3PD.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Oo3PDm.jpg&quot; alt=&quot;overview of the robot&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/sYjNL.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/sYjNLm.jpg&quot; alt=&quot;electronics of the robot&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h1&gt;The Problem&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;I implemented a simple SLAM algorithm which gets robot position from the encoders and the adds whatever it sees using the kinect (as a 2D slice of the 3D point cloud) to the map.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is what the maps of my room currently look like:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/4NzwA.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0jcKv.png&quot; alt=&quot;what a map looks like of my room&quot;&gt;&lt;/a&gt; &lt;a href=&quot;https://i.stack.imgur.com/r81Bd.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/r81Bd.png&quot; alt=&quot;Another map my room&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a rough representation of my actual room:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/tsbzE.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/AnKvn.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can see, they are &lt;strong&gt;very&lt;/strong&gt; different and so really bad maps.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Is this expected from using just dead reckoning?&lt;/li&gt;&#xA;&lt;li&gt;I am aware of particle filters that refine it and am ready to implement, but what are the ways in which I can improve this result? &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h1&gt;Update &lt;br /&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;I forgot to mention my current approach (which I earlier had to but forgot). My program roughly does this: (I am using a hashtable to store the dynamic map)&#xA;&lt;br /&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Grab point cloud from Kinect&lt;/li&gt;&#xA;&lt;li&gt;Wait for incoming serial odometry data&lt;/li&gt;&#xA;&lt;li&gt;Synchronize using a time-stamp based method&lt;/li&gt;&#xA;&lt;li&gt;Estimate robot pose (x,y,theta) using equations at &lt;a href=&quot;http://en.wikipedia.org/wiki/Dead_reckoning#Differential_steer_drive_dead_reckoning&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia&lt;/a&gt; and encoder data&lt;/li&gt;&#xA;&lt;li&gt;Obtain a &quot;slice&quot; of the point cloud&lt;/li&gt;&#xA;&lt;li&gt;My slice is basically an array of the X and Z parameters&lt;/li&gt;&#xA;&lt;li&gt;Then plot these points based on the robot pose and the X and Z params&lt;/li&gt;&#xA;&lt;li&gt;Repeat&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="1463" LastEditorUserId="350" LastEditDate="2013-06-11T19:33:42.813" LastActivityDate="2013-06-12T08:59:05.333" Title="How can I improve the map in my Mobile Autonomous Robot using KINECT" Tags="&lt;arduino&gt;&lt;slam&gt;&lt;kinect&gt;&lt;odometry&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1420" PostTypeId="2" ParentId="1419" CreationDate="2013-06-11T12:03:33.367" Score="1" Body="&lt;p&gt;Is this what would be expected: in principle yes. Although you may be able to improve your odometry model, in general it is not enough to get a good map. Without a description of your system its difficult to say how to improve it. On most systems translation estimation is better than rotation. You could add a gyro and measure the rotation. This should improve your results significantly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead of implementing a particle filter yourself, you could use a SLAM implementation e.g. from &lt;a href=&quot;http://openslam.org/&quot; rel=&quot;nofollow&quot;&gt;openslam&lt;/a&gt;. This should save you a lot of time, and will most likely give better results.&lt;/p&gt;&#xA;" OwnerUserId="127" LastActivityDate="2013-06-11T12:03:33.367" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1421" PostTypeId="2" ParentId="1305" CreationDate="2013-06-11T15:05:56.397" Score="0" Body="&lt;p&gt;Does a simple serial sketch work? If yes, then try using this code:&#xA;What this does is it takes two bytes simultaneously, the  first indicating the pin number and the second the analog value, and then sets the pin mode. I am sure you can modify it for your own needs. This is the code I use for my robot. Hope this helps. (sorry, arduino indentation is weird)&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;int pin = -999;&#xA;int val = -999;&#xA;int count = 0;&#xA;&#xA;void setup()&#xA;{&#xA;    Serial.begin(9600);&#xA;}&#xA;&#xA;void loop()&#xA;{&#xA;&#xA;}&#xA;&#xA;void serialEvent()&#xA;{&#xA;    //As soon as a byte arrives&#xA;    while(Serial.available())&#xA;    {&#xA;        //Read it&#xA;       int data = Serial.read();&#xA;       if (count == 0)&#xA;       {&#xA;           pin = data;&#xA;       }&#xA;       else if(count == 1)&#xA;       {&#xA;           val = data;&#xA;       }&#xA;       count = count + 1;&#xA;&#xA;       if (count == 2)&#xA;       {&#xA;          //Time for reset&#xA;          count = 0;&#xA;&#xA;          //execute&#xA;          analogWrite(pin,val);&#xA;&#xA;       }&#xA;    } &#xA;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="1463" LastActivityDate="2013-06-11T15:05:56.397" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1422" PostTypeId="2" ParentId="884" CreationDate="2013-06-11T15:08:46.877" Score="1" Body="&lt;p&gt;I have worked with &lt;a href=&quot;http://sicktoolbox.sourceforge.net/&quot; rel=&quot;nofollow&quot;&gt;the Sick LIDAR Matlab/C++ Toolbox&lt;/a&gt;, its pretty easy to use and does the job very well.&lt;/p&gt;&#xA;" OwnerUserId="1463" LastEditorUserId="350" LastEditDate="2013-07-11T17:30:11.980" LastActivityDate="2013-07-11T17:30:11.980" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="1423" PostTypeId="2" ParentId="1305" CreationDate="2013-06-11T19:03:22.787" Score="3" Body="&lt;p&gt;I rewrote your program a bit. Not tested since I have no servos.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;Servo.h&amp;gt;&#xA;Servo ULF; // Upper left front servo&#xA;Servo LLF; // Lower left front servo&#xA;byte index = 0;&#xA;int commandnum=1;&#xA;int steps = 0; // position of LLF servo&#xA;int partnum = 0; // unused for now&#xA;String command = &quot;&quot;; // the command we're building&#xA;char in;                // character to read&#xA;int angle;              // desired angle&#xA;&#xA;void setup()&#xA;{&#xA;  LLF.attach(0);&#xA;  ULF.attach(1);&#xA;  Serial.begin(9600);&#xA;}&#xA;&#xA;void loop()&#xA;{&#xA;    // define a protocol for commands, maybe like this:&#xA;    // [XXX&amp;lt;d&amp;gt;] where XXX is command and &amp;lt;d&amp;gt; is the angle,&#xA;    // the brackets [] indicates start and stop of a &quot;packet&quot; ( the command ).&#xA;    // Example: [LLF120], [LLF035], [LLF005]. I am here assuming a 3-digit&#xA;    // value for angle.&#xA;&#xA;    // You also need to reset the variables that holds the command data&#xA;    // when the command has been executed so that they are ready for the next command.&#xA;    // and to use parseInt() you must ensure that the serial buffer has all the &#xA;    // digits that you sent.&#xA;&#xA;  if(Serial.available() &amp;gt; 0) { // if there are more than zero bytes to read&#xA;      in = Serial.read();&#xA;      if(in == '[') // start of packet, now read command&#xA;      {&#xA;        command = &quot;&quot;;&#xA;&#xA;        // get command, 3 chars&#xA;        while(command.length() &amp;lt; 3)&#xA;        {&#xA;            if(Serial.available() &amp;gt; 0)&#xA;                command += Serial.read();&#xA;&#xA;            delay(10);  &#xA;        }&#xA;&#xA;        // get angle    &#xA;        while(Serial.available() &amp;lt; 3) &#xA;        {               &#xA;            delay(10);  &#xA;        }&#xA;&#xA;        angle = Serial.parseInt(); // find the angle we want&#xA;&#xA;        // flush buffer, all info received&#xA;        Serial.flush();&#xA;      }   &#xA;&#xA;      if(command == &quot;LLF&quot;) {&#xA;&#xA;        Serial.println(&quot;Lower Left Foot Selected.&quot;);&#xA;&#xA;        Serial.println(&quot;ANGLE: &quot;+String(angle));&#xA;&#xA;        for(int pos = 0; pos &amp;lt; angle; pos++) // for loop through positions to reach goal&#xA;        {                                  &#xA;           LLF.write(pos); // write servo position&#xA;           delay(15);&#xA;        } &#xA;        for(int pos = angle; pos &amp;gt; 0; pos--) // for loop through positions to reach goal&#xA;        {                                  &#xA;           LLF.write(pos); // write servo position&#xA;           delay(15);&#xA;        } &#xA;      }&#xA;   }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="1380" LastEditorUserId="1380" LastEditDate="2013-06-11T19:15:10.417" LastActivityDate="2013-06-11T19:15:10.417" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1424" PostTypeId="2" ParentId="1305" CreationDate="2013-06-11T19:30:12.457" Score="3" Body="&lt;p&gt;According to &lt;a href=&quot;http://arduino.cc/en/Reference/ServoAttach&quot; rel=&quot;nofollow&quot;&gt;the Arduino reference for Servo.attach( )&lt;/a&gt;, you should be using pins 9 and 10, not 0 and 1.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Note that in Arduino 0016 and earlier, the Servo library supports only servos on only two pins: 9 and 10.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Verify that you are setting the proper pin number in code.  Specifically, look at these lines in your originally-posted code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void setup()&#xA;{&#xA;  LLF.attach(0);&#xA;  ULF.attach(1);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2013-06-12T19:07:24.833" LastActivityDate="2013-06-12T19:07:24.833" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="1425" PostTypeId="2" ParentId="1419" CreationDate="2013-06-12T05:14:48.673" Score="1" Body="&lt;p&gt;Because you are using dead reckoning the errors in estimating the pose of the robot accumulate in time. From my experience, after a while, dead reckoning pose estimation becomes useless. If you use extra sensors,like Gyroscope or Accelerometer the pose estimation will improve but since you have no feedback at some point it will diverge as before. As a result, even if you have good data from the Kinect, building an accurate map is difficult since your pose estimation is not valid.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You need to localize your robot at the same time as your try to build your map (SLAM!). So as the map is being created, the same map is also used to localize the robot. This ensures that your pose estimation will not diverge and your map quality should be better. Therefore I would suggest to study some SLAM algorithms (i.e. FastSLAM) and try to implement your own version.&lt;/p&gt;&#xA;" OwnerUserId="1445" LastEditorUserId="1445" LastEditDate="2013-06-12T08:59:05.333" LastActivityDate="2013-06-12T08:59:05.333" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1426" PostTypeId="2" ParentId="1419" CreationDate="2013-06-12T08:15:28.253" Score="1" Body="&lt;p&gt;I'd suggest that you try particle filters/ EKF.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you currently do:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;--&gt; Dead Reckoning: You're looking at your current position without any reference.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;--&gt; Continuous Localization: You roughly know where you are in the map.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you don't have a reference and don't know where you are on the map, regardless of what actions you take, you will find it dificult to obtain a perfect map.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example:&#xA;You're in a circular room. You keep moving forward. You know what was your last move. The map which you get will be that of a straight box like structure. This will occur unless and until you have some way to localize or to know where are you precisely on the map, continuously.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Localization can be done via EKF/Particle Filters if you have a starting reference point. However, the starting reference point is a must.&lt;/p&gt;&#xA;" OwnerUserId="333" LastActivityDate="2013-06-12T08:15:28.253" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="1427" PostTypeId="1" CreationDate="2013-06-12T10:12:54.573" Score="4" ViewCount="4335" Body="&lt;p&gt;I need to control quadrotor from a PC, without using a joystick.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have got a mini-beetle &lt;a href=&quot;http://www.banggood.com/Wholesale-WLtoys-V929-Beetle-4-Axis-Dexterous-Mini-UFO-BNF-p-46046.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;quad V929 Beetle 4-Axis&lt;/a&gt;  and also have this &lt;a href=&quot;http://www.ebay.in/itm/281061946755?ssPageName=STRK:MEWNX:IT&amp;amp;_trksid=p3984.m1439.l2648&quot; rel=&quot;nofollow noreferrer&quot;&gt;NRF24L01+ Wireless Transceiver Module Chip&lt;/a&gt; (2.4&amp;nbsp;GHz transceiver)&#xA;Is it possible to write an Arduino program to make them speak to each other?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did some research and found that the quad V929 model uses FlySky protocol and only works with A7105 NRF24L01 2.4&amp;nbsp;GHz transmitter chip not the one which I mentioned above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any other better ways of controlling the quad from PC or Arduino board?&lt;/p&gt;&#xA;" OwnerUserId="1469" LastEditorUserId="9176" LastEditDate="2017-06-29T08:50:58.567" LastActivityDate="2017-06-29T08:50:58.567" Title="Controlling a quadrotor from a PC" Tags="&lt;arduino&gt;&lt;quadcopter&gt;&lt;radio-control&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1428" PostTypeId="2" ParentId="1394" CreationDate="2013-06-12T18:31:45.447" Score="1" Body="&lt;p&gt;You will get better help for this question by asking on &lt;a href=&quot;http://answers.ros.org&quot; rel=&quot;nofollow&quot;&gt;http://answers.ros.org&lt;/a&gt;, which is a similar, but more specific forum.&lt;/p&gt;&#xA;" OwnerUserId="36" LastActivityDate="2013-06-12T18:31:45.447" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1429" PostTypeId="1" CreationDate="2013-06-12T20:07:30.473" Score="1" ViewCount="359" Body="&lt;p&gt;Currently, I'm using a &lt;a href=&quot;https://www.sparkfun.com/products/10335&quot; rel=&quot;nofollow&quot;&gt;pan tilt bracket&lt;/a&gt; that works with the servos I have (spark fun product 9065), and are generic to all servos. However, servos aren't accurate enough. I'm looking at other options, but have limited knowledge about them. What would you recommend?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An important consideration is that I need my motor to tilt in two dimensions, to any random $x, y$ coordinate accurately. To do this, I think I'll need some sort of attachment to the motor shaft, like the pan tilt bracket.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What motor and bracket would you recommend I use to go to any random $(x,y)$ coordinate?&lt;/p&gt;&#xA;" OwnerUserId="1471" LastEditorUserId="1471" LastEditDate="2013-06-13T15:01:51.687" LastActivityDate="2013-06-13T15:01:51.687" Title="Pan and tilt bracket for a stepper motor" Tags="&lt;otherservos&gt;&lt;stepper-motor&gt;&lt;motion&gt;" AnswerCount="0" CommentCount="3" ClosedDate="2013-06-18T10:45:10.930" ContentLicense="CC BY-SA 3.0" />
  <row Id="1430" PostTypeId="2" ParentId="1378" CreationDate="2013-06-12T23:16:23.480" Score="2" Body="&lt;p&gt;This depends on a few things. First of all, are you using ArduPlane or ArduCopter, and what mode are you in? For ArduPlane, your answers are &lt;a href=&quot;http://plane.ardupilot.com/wiki/flying/starting-up-and-calibrating-arduplane/&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;, and for arducopter, &lt;a href=&quot;http://copter.ardupilot.com/wiki/flying-arducopter/&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In both cases, the software has safeguards that will not let you arm or start the motor while it is initializing. In both cases, the LEDs indicate when it is ready to arm or fly. Of course, these behaviours are mostly configurable. For example, you can set the MANUAL_LEVEL parameter in ArduPlane to 1 if you want to skip the accelerometer calibration on each boot.&lt;/p&gt;&#xA;" OwnerUserId="1473" LastActivityDate="2013-06-12T23:16:23.480" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1431" PostTypeId="2" ParentId="1378" CreationDate="2013-06-13T02:57:13.260" Score="2" Body="&lt;p&gt;The LEDs on the board indicate the status of the Ardupilot. See the &lt;a href=&quot;http://code.google.com/p/arducopter/wiki/AC2_LEDs&quot; rel=&quot;nofollow&quot;&gt;LEDs on the boards&lt;/a&gt; on the Arducopter wiki for more detail. Of interest to you are likely the A (red), B (yellow), and C (blue) LEDs. LED A is solid when the motors are armed and blinks otherwise. LED B flashes while the Ardupilot calibrates. Finally LED C indicates the status of the GPS module if there is one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: I just noticed you are using Arduplane in which case you want to reference the &lt;a href=&quot;http://code.google.com/p/ardupilot-mega/wiki/LED&quot; rel=&quot;nofollow&quot;&gt;LEDs and their meanings&lt;/a&gt; page on the Arduplane wiki. The meanings are basically the same though it appears you do not have the option arm/disarm the motors.&lt;/p&gt;&#xA;" OwnerUserId="177" LastActivityDate="2013-06-13T02:57:13.260" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1432" PostTypeId="2" ParentId="1393" CreationDate="2013-06-13T08:17:04.370" Score="0" Body="&lt;p&gt;a capacitive sensor could work, it's really cheap to make, just aluminum foil and a few resistors, it can detect flesh but i'm not sure if iy doesn't detect anything but flesh, you can use 3 to triangulate&lt;/p&gt;&#xA;" OwnerUserId="1477" LastActivityDate="2013-06-13T08:17:04.370" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1433" PostTypeId="2" ParentId="1393" CreationDate="2013-06-13T14:35:33.793" Score="0" Body="&lt;p&gt;I can't say whether this is easiest, but conceivably you could use the &lt;a href=&quot;http://people.csail.mit.edu/mrub/vidmag/&quot; rel=&quot;nofollow&quot;&gt;Eulerian Video Magnification library&lt;/a&gt; to detect the pulse of a person.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In that case, you would be looking for a fluctuation in the video that matched the expected range of human pulses.  You would also need a clear image of a body part that exhibited the visible pulse.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There has also been some work (&lt;a href=&quot;http://www.eecg.toronto.edu/~jayar/pubs/theses/Mccready/RobertMccready.pdf&quot; rel=&quot;nofollow&quot;&gt;example 1&lt;/a&gt;, &lt;a href=&quot;http://www.cse.psu.edu/~cg577/LECTURES/L9-2005.pdf&quot; rel=&quot;nofollow&quot;&gt;example 2&lt;/a&gt;) exploring hardware-based face detection.  Digital cameras from a few years ago had this capability, which was essentially a highly optimized neural network designed to say &quot;does this square contain a face or not&quot;... then you just iterate over a set of predefined squares in the captured image.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2013-06-13T14:35:33.793" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1434" PostTypeId="2" ParentId="1025" CreationDate="2013-06-14T19:27:12.030" Score="4" Body="&lt;p&gt;Try &lt;a href=&quot;http://ros.org/wiki/freenect_stack&quot; rel=&quot;nofollow&quot;&gt;freenect&lt;/a&gt;, there are some problems with OpenNI solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Firt, install freenect by&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sudo apt-get install ros-fuerte-freenect-stack&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;After installation, connect your kinect (in USB 2.0 port) and run freenect &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;roslaunch freenect_launch freenect.launch&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then run Rviz and set Fixed frame to /camera_link, you can now add PointCloud2 window and select the right topic to view the input.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;rosrun rviz rviz&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Hope you enjoy ROS!&lt;/p&gt;&#xA;" OwnerUserId="405" LastActivityDate="2013-06-14T19:27:12.030" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1435" PostTypeId="1" AcceptedAnswerId="1436" CreationDate="2013-06-14T22:04:40.517" Score="5" ViewCount="281" Body="&lt;p&gt;I'm looking at laser scanners and I see a huge range of detection distances.  The furthest I've see are 30m if you exclude the very expensive ones that claim up to 150m.  My question is what is the reason for the huge difference in range/price.  I would think that with a laser it wouldn't be that difficult to detect something at distances greater than 30m.  What's the physical limitation that makes it so much more expensive to go above 30m for a laser scanner or is there one?&lt;/p&gt;&#xA;" OwnerUserId="529" LastActivityDate="2013-06-14T23:16:17.137" Title="laser scanner distance" Tags="&lt;localization&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1436" PostTypeId="2" ParentId="1435" CreationDate="2013-06-14T23:06:14.220" Score="9" Body="&lt;p&gt;It may be worthwhile to consider how laser scanners work. We know that it is possible to send a beam of light at an object, and detect how long it takes to be reflected back to the sensor to measure its distance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First of all, we use lasers because reflection of the light from the object is so important. lasers keep the light concentrated in a narrow beam, with minimal refraction. We'll come back to that later.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are several ways to measure distance. The first is triangulation. This typically depends on good placement of optics, and the CCD sensor the return beam shines onto. You can easily see the problem with a large distance - the angle detected gets increasingly close to $0^\circ$, so that we need sensor components which are very accurate at small scales. We would also like a beam width which is narrow for accurate detection of where the beam is, but there is greater diffraction at narrow beam widths, meaning the return beam of light is not that narrow. Over long distances, the beam gets increasingly wider, because of the small amount of diffraction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second way is to measure the round-trip time. Light travels very fast at $3\times 10^8  \textrm{m/s}$. This means that even detecting something at $150 \textrm{m}$ will take $1 \textrm{μs}$. Embedded computers typically have a clock rate of only several megahertz, so even at this large distance, a system would struggle to provide an accuracy of 10%, and that is assuming the data acquisition is as fast - often the peripheral features have a slower clock rate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The data acquisition is typically much slower, allowing cheaper systems to be built. As to how they can get away with this - an interesting phenomenon is used. If a sinusoidal signal is embedded into the light (via the intensity), the return signal will also be a sinusoidal signal. However, depending on the distance, the signal will have a phase shift. That is, at $0 \textrm m$, there is no phase shift, and if the wavelength is $20 \textrm m$, then an object at $5 \textrm m$ will mean that the light travels $10 \textrm m$, creating a phase shift of $180^\circ$. If the signals are normalized to the same amplitude, taking the difference between the outbound signal, and the return signal, we get another analog sinusoidal signal (note: this is only one method). The amplitude of this depends on the phase shift. At $180^\circ$, we get the maximum amplitude - double of the original outbound signal. We can easily detect the amplitude of this signal even with slow digital circuitry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main problem is that the choice of wavelength limits the maximum range. For example, the wavelength of $20 \textrm m$ limits the detection range to only $5\textrm m$. If we simply chose a much longer wavelength, we would get the same percentage accuracy. In many cases, if we want greater absolute accuracy, the system will have a greater cost, since we must more accurately measure amplitude in the face of environmental noise. This may involve a number of changes - for example, a larger laser beam, greater light intensity, and more accurate electronic components, more shielding of noise, and more power to run the system. If any one of these is not good enough, accuracy is affected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other problem which affects all methods is the intensity of the return beam. As the distance increases, the intensity decreases. There is not that much scatter of light in air, so attenuation is not so much caused by this. However, even though a laser light is used, there is a very small amount of diffraction. It is not possible to remove this diffraction completely, although it can be decreased with a wider beam width. Diffraction reduces the amount of the returning light beam incident on the sensor. Because the beam width gradually increases, the sensor only receives a small proportion of the returning light. This affects the accuracy of measurements. Using a larger sensor can also increase noise. Therefore, here we also see another limit on the distance. We can increase the distance by increasing light intensity, or increasing beam width. However, increasing light intensity increases power consumption and heat, while increasing beam width requires larger optic lenses, and larger distances between optic components.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Essentially, there is a balance between cost, accuracy, power consumption, and size of the system, and longer distances often requires better components to maintain accuracy.&lt;/p&gt;&#xA;" OwnerUserId="145" LastEditorUserId="145" LastEditDate="2013-06-14T23:16:17.137" LastActivityDate="2013-06-14T23:16:17.137" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1437" PostTypeId="1" AcceptedAnswerId="1438" CreationDate="2013-06-15T22:30:49.067" Score="2" ViewCount="3083" Body="&lt;p&gt;I haven't made or flown any quadcopter, but I am fascinated by them.&#xA;But when looking at the frame of a lot of designs, after whachting &lt;a href=&quot;http://www.youtube.com/watch?v=dAyDi1aa40E&quot; rel=&quot;nofollow&quot;&gt;this video&lt;/a&gt; I wondered why a lot the frames are in an X shape. Since the most efficient shape would according to the video be something like this &gt;-&amp;lt;, where each corner is 120°.&#xA;I also did a quick search on the internet and found &lt;a href=&quot;http://deltaquadlog.blogspot.nl/2013/03/frame-design.html&quot; rel=&quot;nofollow&quot;&gt;this blog&lt;/a&gt; which stated the same (however he did not mention the exact angle) and said: &quot;Even though this is not entirely a new idea, it has not yet been widely accepted by the community.&quot;&lt;/p&gt;&#xA;" OwnerUserId="1487" LastActivityDate="2013-06-16T01:17:21.320" Title="Most material efficient quadcopter frame" Tags="&lt;design&gt;&lt;quadcopter&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1438" PostTypeId="2" ParentId="1437" CreationDate="2013-06-16T01:17:21.320" Score="1" Body="&lt;p&gt;If adjacent motors are 1 unit apart, the overall path-length of an X form is 2√2, or about 2.8284, and the overall path-length of a Steiner form is 1+√3, or about 2.732, which is 3.5% less.  It is likely that hub mounting will decrease either or both of the total lengths by a few percent, but I will ignore that factor for the moment and merely say that the length improvement provided by using a Steiner form is quite small.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition, the Steiner form will require either two hubs or one rather-long hub, and may require mounting hardware for spokes at six points instead of four.  Because hub weight often is comparable to the weight of one or more spokes, the Steiner form has a weight disadvantage.  (See “&lt;a href=&quot;http://www.rcgroups.com/forums/showthread.php?t=1718951&quot; rel=&quot;nofollow&quot;&gt;Intro to Multirotors, Theory, Build Log and Tips&lt;/a&gt;” for a series of pictures that illustrate relative hub and spoke sizes for a variety of quadcopters.) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A central point, as available with an X-frame, is a convenient location for a battery and a controller that serves all the motors.  For balance, an extra pad for mounting the battery and controller would be needed on the middle bar of a Steiner frame (unless multiple batteries and controllers are used).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note, the &lt;a href=&quot;http://www.wowhobbies.com/quacopters-drones-quad-flyers.aspx&quot; rel=&quot;nofollow&quot;&gt;quacopters-drones-quad-flyers&lt;/a&gt; page at wowhobbies.com includes a quadcopter, hexacopter and octocopter buying guide, in which several units are characterized by &lt;em&gt;IAS&lt;/em&gt;, meaning there is “Inadequate Structural Support (eg: booms are too long and center frame is too weak to support the size of the quadcopter structure or any substantial payload)”.   As size scales up, the crossbar in the Steiner form needs to scale up more than the rest of the arm structure (which will also overpower that form's 3.5% length advantage) else the frame will become structurally inadequate.&lt;/p&gt;&#xA;" OwnerUserId="478" LastActivityDate="2013-06-16T01:17:21.320" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1440" PostTypeId="1" CreationDate="2013-06-17T09:16:42.640" Score="1" ViewCount="2105" Body="&lt;p&gt;How do you know if a commercial driver is working with trapezoidal or sinusoidal commutation? If you measure the 3-phase voltage applied to the PMSM by means of an oscilloscope, will you see a difference?&lt;/p&gt;&#xA;" OwnerUserId="1494" LastEditorUserId="350" LastEditDate="2013-06-17T17:17:50.590" LastActivityDate="2015-11-30T21:33:29.943" Title="trapezoidal vs sinusoidal commutation" Tags="&lt;brushless-motor&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1441" PostTypeId="2" ParentId="1399" CreationDate="2013-06-17T10:46:55.350" Score="2" Body="&lt;p&gt;The Mpu6050, or 9150 is great for gesture sensing. The 6050 has a 3 axis accelerometer and a 3 axis gyro. The 9150 has all that, as well as a 3 axis magnetometer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Theoretically, you can program gestures into it that trigger an external interrupt when they are activated. Unfortunately, Invensense, the makers of the chip have not been forthcoming with documentation on how to do that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to write the gesture reconization yourself, then there is a library for getting plain data as well as quaternions from the 6050 at &lt;a href=&quot;https://github.com/jrowberg/i2cdevlib&quot; rel=&quot;nofollow&quot;&gt;https://github.com/jrowberg/i2cdevlib&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you go with the 9150, there is a great resource of code at &lt;a href=&quot;https://github.com/Pansenti/MPU9150Lib&quot; rel=&quot;nofollow&quot;&gt;https://github.com/Pansenti/MPU9150Lib&lt;/a&gt;, which includes resources to do some of the higher level processing the 9150 is capable of.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I actually am trying to use the line of mpu's myself, as part of a rocketlogger project. I have some of my code at &lt;a href=&quot;http://waterrocketry.com&quot; rel=&quot;nofollow&quot;&gt;http://waterrocketry.com&lt;/a&gt; It doesn't entirely work yet, but it is still a work in progress, and I hope to have full control of the Data Motion Processing of the 6050 soon.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Good luck with what your building&lt;/p&gt;&#xA;" OwnerUserId="1495" LastEditorUserId="1495" LastEditDate="2013-06-17T16:51:42.220" LastActivityDate="2013-06-17T16:51:42.220" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1442" PostTypeId="2" ParentId="1440" CreationDate="2013-06-17T17:37:31.993" Score="2" Body="&lt;p&gt;I'm reasonably sure that the sinusoidal wave will look like a sign wave, and that the trapezoidal wave will look more square-ish. The image below explains it better:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/ccHs1.jpg&quot; alt=&quot;Trapezoidal vs Sinusoidal waves&quot; /&gt;&lt;/p&gt;&#xA;" OwnerUserId="1495" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2013-06-17T17:37:31.993" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1443" PostTypeId="1" CreationDate="2013-06-18T07:33:21.043" Score="0" ViewCount="147" Body="&lt;p&gt;The last robotics project I worked on involved autonomous outdoor navigation, using a microcontroller for lower-level control and a computer for image processing and decision making. I worked more with the higher-level software and another guy on the team did the electrical and embedded systems. I would like to be capable of doing everything, including stuff with embedded, but I'm not sure where to look for information. If I were to have done the project from scratch on my own, I'd need to know:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;What microcontroller to use&lt;/li&gt;&#xA;&lt;li&gt;What motors are required &lt;/li&gt;&#xA;&lt;li&gt;What motor controllers to get, and how to interface with the controllers&lt;/li&gt;&#xA;&lt;li&gt;What encoders to use for motor feedback, and how to write drivers for them&lt;/li&gt;&#xA;&lt;li&gt;What batteries to use and how to safely power everything &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;If I were trying to learn about higher-level software, I'd probably take a few courses on Udacity. Are there any good resources out there like that for this kind of low-level stuff?&lt;/p&gt;&#xA;" OwnerUserId="181" LastActivityDate="2013-06-18T13:15:33.340" Title="Learning about embedded systems" Tags="&lt;microcontroller&gt;&lt;power&gt;&lt;embedded-systems&gt;" AnswerCount="1" CommentCount="5" ClosedDate="2013-06-18T23:21:11.387" ContentLicense="CC BY-SA 3.0" />
  <row Id="1444" PostTypeId="2" ParentId="1443" CreationDate="2013-06-18T13:15:33.340" Score="1" Body="&lt;p&gt;While I don't know about any online resources for what you want, I learned my skills by trying and failing, probably the best method to learn this sort of stuff if you have the time to do it. If you don't have much time, your best bet is probably just googling  stuff that you need to know.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A lot of good information can also be found in university thesis or research papers, also a lot of quality parts from reputable manufacturers come with really good documentation on how to use them. The documentation can sometimes be overwhelming, but at least it will point you in the right direction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And if you did't find anything you need after the steps above, just ask here, that's why this site exists.&lt;/p&gt;&#xA;" OwnerUserId="890" LastActivityDate="2013-06-18T13:15:33.340" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1445" PostTypeId="1" CreationDate="2013-06-18T13:37:46.553" Score="6" ViewCount="12039" Body="&lt;p&gt;I'm doing a project related to telemetry, and I want to make ArduPilot (programmed with ArduPlane 2.73) send through a serial port the sensors informations such as height, GPS position, etc.. I have tried to use ArduStation, but I could not change its firmware to do what I want. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The idea would be to read the Ardupilot's serial port using an Arduino Uno, and then saving it in a SD card in real-time. So ArduPilot needs to send data without any user input or something like that. I've already tried to manipulate ArduPlane source code to do that, but I couldn't either.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Has someone here did something like that before? I need some advice!&lt;/p&gt;&#xA;" OwnerUserId="1502" LastEditorUserId="1473" LastEditDate="2013-08-16T20:06:58.230" LastActivityDate="2016-12-20T06:58:28.437" Title="How to get data from ArduPilot through Serial Port" Tags="&lt;arduino&gt;&lt;ardupilot&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1446" PostTypeId="2" ParentId="1445" CreationDate="2013-06-18T15:18:49.450" Score="4" Body="&lt;p&gt;I understand a new Ardupilot was released recently. I am not familiar with it, so if that's the device you have then this answer may not be helpful. With that said I have done something similar to what you are doing with the Ardupilot Mega. Specifically I wrote a node in ROS to control a quadrotor and read its state. The Ardupilot uses a fairly simple protocol called &lt;a href=&quot;http://qgroundcontrol.org/mavlink/start&quot; rel=&quot;nofollow&quot;&gt;Mavlink&lt;/a&gt; to communicate with other systems. You can get the library from the QGroundControl website linked above. From there you will connect the serial port on your Uno to the Xbee port on the APM. There are two caveats however. First, I don't know whether the Mavlink library will fit on the Uno though I believe it will. Second, it does require that your Uno query the APM by sending requests for data but they are simple enough to construct. The purpose for this is to control the flow of information. If I recall correctly you can instruct the device to repeatedly send the data you are interested in but you will have to review the documentation to confirm as much. &lt;/p&gt;&#xA;" OwnerUserId="177" LastActivityDate="2013-06-18T15:18:49.450" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1448" PostTypeId="1" CreationDate="2013-06-18T10:38:45.997" Score="4" ViewCount="7125" Body="&lt;p&gt;I am trying to implement a line following robot that can solve mazes similar to the Pololu robots you can watch on youtube. My problem is the maze that I am trying to solve is looped and therefore simple Left/Right hand rule can not solve the maze. I have done some research and think either Flood-Fill or Breadth-First-Search algorithm will be able to solve these looped mazes. Solving the maze is reaching a large black area where all the sensors will read black. When the robot is following the line some of the sensors will read white and the central ones black.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any other algorithms that can solve looped mazes? I understand how the Flood-Fill algorithm works but am unsure how it could be implemented in this situation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My robot has 3 sensors on the bottom. The one in the centre is expected to always read black (the black line it follows) and the sensors on the right and left are expected to read white (while following a straight line) and then black once a junction or turn is reached. My robot has no problem following the line, turning etc. I need to find an algorithm that can solve looped mazes (that is, find a path from an entrance to an exit).&lt;/p&gt;&#xA;" OwnerUserId="1512" OwnerDisplayName="user2476983" LastEditorUserId="134" LastEditDate="2013-08-20T07:40:58.113" LastActivityDate="2013-08-20T07:40:58.113" Title="Maze Solving Algorithm For Mazes With Loops" Tags="&lt;mobile-robot&gt;&lt;motion-planning&gt;&lt;line-following&gt;&lt;routing&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1449" PostTypeId="1" AcceptedAnswerId="1459" CreationDate="2013-06-20T07:12:43.997" Score="7" ViewCount="8025" Body="&lt;p&gt;I'm trying to understand how noise is represented for accelerometers, gyroscopes, and magnetometers so that I can match the requirements of my project with the standard specs of these sensors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want the output of a 3 axis inertial sensor to be values in meters/sec/sec, gauss, and radians/sec for each axis, and noise to be represented by a range around the true value (so X as in +/- X m/s/s, gauss, and radians/sec) for accelerometers, magnetometers, and gyroscopes respectively. Switching out gauss for teslas, meters for feet, radians for degrees, etc. would all be fine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After looking at a few datasheets, I'm surprised to find that... &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Accelerometer noise is measured in &quot;LSB rms&quot; and &quot;μg/√Hz&quot;(&lt;a href=&quot;https://www.sparkfun.com/datasheets/Sensors/Accelerometer/ADXL345.pdf&quot; rel=&quot;noreferrer&quot;&gt;https://www.sparkfun.com/datasheets/Sensors/Accelerometer/ADXL345.pdf&lt;/a&gt;, &lt;a href=&quot;http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Sensors/Accelerometers/MMA8452Q.pdf&quot; rel=&quot;noreferrer&quot;&gt;http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Sensors/Accelerometers/MMA8452Q.pdf&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;li&gt;Gyroscope noise is measured in &quot;º/s-rms&quot; and &quot;º/s/√Hz&quot; (&lt;a href=&quot;https://www.sparkfun.com/datasheets/Sensors/Gyro/PS-ITG-3200-00-01.4.pdf&quot; rel=&quot;noreferrer&quot;&gt;https://www.sparkfun.com/datasheets/Sensors/Gyro/PS-ITG-3200-00-01.4.pdf&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;li&gt;Magnetometer noise is measured in &quot;µT rms&quot; and &quot;Gauss/√Hz&quot; (&lt;a href=&quot;http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Sensors/Magneto/MAG3110.pdf&quot; rel=&quot;noreferrer&quot;&gt;http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Sensors/Magneto/MAG3110.pdf&lt;/a&gt;, &lt;a href=&quot;http://www.vectornav.com/products/vn200-rug?id=54&quot; rel=&quot;noreferrer&quot;&gt;http://www.vectornav.com/products/vn200-rug?id=54&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;What do these units mean, and how do they (or can they) translate into what I want?&lt;/p&gt;&#xA;" OwnerUserId="181" LastEditorUserId="350" LastEditDate="2013-06-25T16:01:04.643" LastActivityDate="2021-04-20T14:56:13.030" Title="How are units of noise measurement related to units of a sensor's data measurement?" Tags="&lt;imu&gt;&lt;accelerometer&gt;&lt;gyroscope&gt;&lt;noise&gt;&lt;magnetometer&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1450" PostTypeId="1" CreationDate="2013-06-20T14:39:21.563" Score="1" ViewCount="31" Body="&lt;p&gt;I want to do a project where I control motors, and the arduino seems ideal for that. However, I'm going to need to do quite a bit of processing on the back end first. Connecting the arduino to a computer isn't an option, because it has to be quite mobile. Does anyone have any experience controlling arduino with raspberry pi?&lt;/p&gt;&#xA;" OwnerUserId="1310" LastActivityDate="2013-06-20T14:39:21.563" Title="How would I go about interfacing the raspberry pi and arduino?" Tags="&lt;arduino&gt;&lt;raspberry-pi&gt;" AnswerCount="0" CommentCount="2" ClosedDate="2013-06-20T15:28:24.073" ContentLicense="CC BY-SA 3.0" />
  <row Id="1451" PostTypeId="2" ParentId="150" CreationDate="2013-06-20T16:32:28.930" Score="1" Body="&lt;p&gt;On one of my remotely controlled boats, I used this design...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/NB48i.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The blue discs are flywheels. They are attached to the green rods which are hooked to both sides of a flexible, waterproof membrane. The membrane is fixed to both sides of the casing so it will transmit the motion, but it will not let water through.&lt;/p&gt;&#xA;" OwnerUserId="1423" LastActivityDate="2013-06-20T16:32:28.930" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1452" PostTypeId="2" ParentId="1344" CreationDate="2013-06-20T21:03:17.630" Score="1" Body="&lt;p&gt;I would say, that it depends on how you fly it, if you think you are going to crash it a lot, and if you make a lot of changes/improvements. Aluminum is pretty damn cheap, and it has, depending on how you fly/crash, one big advantage, it's flexible. Sudden high G-forces don't crack aluminum, carbon fiber on the other hand is very rigid.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if you are a professional R/C pilot, that build's it right the first time, and doesn't crash a lot, I would say Carbon fiber.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you make a lot of changes, are not a very good pilot, or think you are going to stress it a lot, I would say Aluminum. &lt;/p&gt;&#xA;" OwnerUserId="1520" LastActivityDate="2013-06-20T21:03:17.630" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1453" PostTypeId="2" ParentId="543" CreationDate="2013-06-21T03:36:13.773" Score="3" Body="&lt;p&gt;The mechanical answers above are correct. The inherent stability problems with single large motors are exchanged for dynamic comtrol over 12 dimensions of acceleration, yaw, pitch, roll which can be partially coupled (the translational amd rotational matrix) where one is presented with a simplified diagonal inertial frame to build a dynamic model with. In this model there is also an inverse relation between the radius of the quad and the translational and rotational agility. It becomes very easy to &quot;dodge bullets&quot; at very very small radii.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To answer the question &lt;em&gt;How do you get pure yaw motion with a quadcoptor?&lt;/em&gt;, in comments to &lt;a href=&quot;https://robotics.stackexchange.com/a/549/37&quot;&gt;this answer&lt;/a&gt;, you get pure yaw in the following way: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;North and South motors rotating the same speed but collectively at a higher (or lower) speed than East and West Motors which are also at the same speed. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It won't pitch or roll, it will yaw y'all. (Sorry)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Furthermore, in software one can control the copter after breaking off the north and south propellers at the expense of yaw control, the craft will continuously spin and as long as the frequency of software refresh rate is able to handle the speed of yaw rotation the copter remains exactly as stable (sort of) the dimension of acceleration is clipped and response or jerk is also somewhat clipped but it can move pitch and yaw just the same by compensating in software. (Desired yaw state becomes virtually coupled to the physical state)&lt;/p&gt;&#xA;" OwnerUserId="1521" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2013-07-09T11:19:12.633" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1454" PostTypeId="1" AcceptedAnswerId="1456" CreationDate="2013-06-22T00:59:26.140" Score="6" ViewCount="697" Body="&lt;p&gt;I was wondering if it is possible to plug a motor shield on top of an Ethernet shield, even though the direction pins on the motor shield would be connected to the same pins as the spi bus.  I was thinking that it would work if, in the coding, I disabled both chip selects on the Ethernet shield before I used the motors.&lt;/p&gt;&#xA;" OwnerUserId="1263" LastActivityDate="2013-06-22T12:42:41.000" Title="Motor and Ethernet shields together" Tags="&lt;arduino&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1455" PostTypeId="1" CreationDate="2013-06-22T01:13:51.013" Score="2" ViewCount="370" Body="&lt;p&gt;&lt;em&gt;&lt;strong&gt;TL;DR:&lt;/em&gt;&lt;/strong&gt;&#xA;Can anyone point me to a good adaptive path fill algorithm?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hey there, my name is James, and &lt;a href=&quot;http://sylviashow.com&quot; rel=&quot;nofollow&quot;&gt;my daughter&lt;/a&gt; built &lt;a href=&quot;http://watercolorbot.com&quot; rel=&quot;nofollow&quot;&gt;an awesome painting robot&lt;/a&gt; with her friends over at Evil Mad Scientist labs, even brought it to the white house, very fun stuff!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyways, I'm a web programmer by day, and though it might be fun to try and write some software to get the robot to do some cool stuff, and for some crazy reason I decided to do this using standard web technologies like SVG and JavaScript, and.. it actually works! [see the project at github.com/techninja/robopaint]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;But there's a problem:&lt;/strong&gt; to fill in colors for given shapes, it requires some kind of path filling algorithm using a given size shape to cover every part of the shape internally, not to mention it has to take into account overlapping paths and occlusions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have successfully created &quot;&lt;em&gt;fake&lt;/em&gt;&quot; fills, by following known paths like spirals and back and forth hatch lines over paths, while detecting occlusion using browser internal functions for detecting what object lies at a given x/y coordinate, but these fill functions fall incredibly short of doing anything other than simply following paths, and can be incredibly inefficient at filling certain paths (like filling borders, letters, or &lt;strong&gt;U&lt;/strong&gt; shaped areas).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;&lt;strong&gt;The question:&lt;/em&gt;&lt;/strong&gt; I need an adaptive path filling algorithm. I know they're currently being used in similar CNC setups for milling, and similar algorithms are used by the Roomba and 3D printers to figure out coverage in the most efficient way possible. The issue comes in that I don't think &lt;strong&gt;&lt;em&gt;any&lt;/em&gt;&lt;/strong&gt; have ever been done in JavaScript, using native SVG paths.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyone out there know where I should look? I'm not too afraid to attempt to port something over to JS, or possibly even use it as is for a native Node.JS module. All my work will be sure to go back to the community and become open source as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks for the help!&lt;/p&gt;&#xA;" OwnerUserId="1529" LastActivityDate="2013-07-22T18:38:11.587" Title="Help with adaptive fill algorithm for Water Color Painting Robot" Tags="&lt;algorithm&gt;&lt;motion-planning&gt;&lt;motion&gt;&lt;cnc&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1456" PostTypeId="2" ParentId="1454" CreationDate="2013-06-22T12:42:41.000" Score="2" Body="&lt;p&gt;The whole point of the chipselect pin is so that multiple devices (in this case, shields) can share the same SPI bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As long as no two chipselect pins are the same, you ought to be fine. Make sure only one chip select pin is on at any given time.&lt;/p&gt;&#xA;" OwnerUserId="126" LastActivityDate="2013-06-22T12:42:41.000" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1457" PostTypeId="1" CreationDate="2013-06-22T13:21:50.047" Score="1" ViewCount="893" Body="&lt;p&gt;3D CAD:&#xA;&lt;img src=&quot;https://i.stack.imgur.com/0heyS.jpg&quot; alt=&quot;quadcopter image&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;After some editing:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm building the frame myself from aluminum and polycarbonate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt; all frame is polycarbonate except of the arms (and all screws &amp;amp; nuts &amp;amp; washers)), they are form aluminum covered in polycarbonate. the total length (from one motor to another) is exactly &lt;em&gt;60cm&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Approximate Mass: 1.736 kg&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&lt;strong&gt;What I thought to put in:&lt;/strong&gt;&lt;/h2&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Battery&lt;/strong&gt;: &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__7634__ZIPPY_Flightmax_4000mAh_3S1P_20C.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;ZIPPY Flightmax 4000mAh 3S1P 20C&lt;/a&gt; (changed from this 1500mAh &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/uh_viewitem.asp?idproduct=6307&amp;amp;aff=588847&quot; rel=&quot;nofollow noreferrer&quot;&gt;battery&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Motors&lt;/strong&gt;: &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/uh_viewitem.asp?idproduct=18151&amp;amp;aff=588847&quot; rel=&quot;nofollow noreferrer&quot;&gt;Turnigy Aerodrive SK3 - 2822-1090kv&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;PDB&lt;/strong&gt;: &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/uh_viewitem.asp?idproduct=23140&amp;amp;aff=607489&quot; rel=&quot;nofollow noreferrer&quot;&gt;Hobby King Quadcopter Power Distribution Board&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;ESC&lt;/strong&gt;: &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__6457__hobbyking_ss_series_18_20a_esc.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Hobbyking SS Series 18-20A ESC&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Core&lt;/strong&gt;: &lt;a href=&quot;http://www.ebay.com/itm/Nano-V3-0-ATmega328P-Arduino-Compatible-/170962843198?pt=LH_DefaultDomain_0&amp;amp;hash=item27ce2df63e&quot; rel=&quot;nofollow noreferrer&quot;&gt;Arduino Nano&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;IMU&lt;/strong&gt;: &lt;a href=&quot;http://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&amp;amp;item=261231955458&quot; rel=&quot;nofollow noreferrer&quot;&gt;Invensense MPU-6050&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Propellers&lt;/strong&gt;: &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/uh_viewitem.asp?idproduct=25822&amp;amp;aff=607489&quot; rel=&quot;nofollow noreferrer&quot;&gt;10x4.5 SF Props 2pc Standa## Heading ##rd Rotation/2 pc RH Rotation&lt;/a&gt; (changed from 8x4.5 ones)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I'm gonna program it myself (or atleast try to).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;I WANT TO USE IT AS A UAV (self controlled)&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&lt;strong&gt;Questions:&lt;/strong&gt;&lt;/h2&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Is this a good setup?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;It costs to much for me, any way to keep the frame and change the&#xA;parts to be cheaper and yet a good quadcopter?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Does the propeller fit the motor?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Any place to buy these for cheaper?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Is it a good frame?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Am I missing some parts?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Thanks alot,&#xA;Dan&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;I checked it using this &lt;a href=&quot;http://www.ecalc.ch/xcoptercalc.htm?ecalc&amp;amp;lang=en&quot; rel=&quot;nofollow noreferrer&quot;&gt;site&lt;/a&gt; and it gave no errors (guess its a good sign).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The camera on the image is just for the picture (no camera is intended there).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="1337" LastEditorUserId="1337" LastEditDate="2013-06-23T00:35:28.220" LastActivityDate="2013-12-31T17:39:52.557" Title="Is this a good quadcopter build?" Tags="&lt;arduino&gt;&lt;motor&gt;&lt;quadcopter&gt;" AnswerCount="1" CommentCount="4" ClosedDate="2013-06-23T10:47:25.560" ContentLicense="CC BY-SA 3.0" />
  <row Id="1458" PostTypeId="2" ParentId="1455" CreationDate="2013-06-22T17:41:56.890" Score="1" Body="&lt;p&gt;What you're looking for is a &quot;coverage algorithm&quot;.  There are a few relevant questions on this site that address this topic: &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://robotics.stackexchange.com/q/952/350&quot;&gt;What&amp;#39;s an efficient way to visit every reachable space on a grid with unknown obstacles?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://robotics.stackexchange.com/q/628/350&quot;&gt;What algorithm should I implement to program a room cleaning robot?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="350" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2013-06-22T17:41:56.890" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1459" PostTypeId="2" ParentId="1449" CreationDate="2013-06-22T18:15:41.350" Score="12" Body="&lt;p&gt;&amp;quot;&lt;a href=&quot;http://en.wikipedia.org/wiki/Least_significant_bit&quot; rel=&quot;nofollow noreferrer&quot;&gt;LSB&lt;/a&gt; &lt;a href=&quot;https://en.wikipedia.org/wiki/Root_mean_square&quot; rel=&quot;nofollow noreferrer&quot;&gt;RMS&lt;/a&gt;&amp;quot; means the root-mean-squared value of the total noise in least significant bits of the digital channel.  Roughly, that's the standard deviation of the noise times the weight of one step of the digital value.&lt;/p&gt;&#xA;&lt;p&gt;&amp;quot;&lt;span class=&quot;math-container&quot;&gt;$\mu g/\sqrt{Hz}$&lt;/span&gt;&amp;quot; means the power spectral density in micro-g's (&lt;span class=&quot;math-container&quot;&gt;$1\mu g \simeq 0.0000098  m/s^2$&lt;/span&gt;).  If the power spectral density is flat, then you can square this number, multiply it by the bandwidth, take the square root, and get to the noise as LSB RMS.  The power spectral density is useful when you try to figure out the effect of sensor noise on velocity and/or position when integrating.&lt;/p&gt;&#xA;&lt;p&gt;&amp;quot;&lt;span class=&quot;math-container&quot;&gt;$^\circ / s$&lt;/span&gt;-rms&amp;quot; has a similar meaning to the &amp;quot;LSB RMS&amp;quot;, except the noise is referred to the rate measurement rather than the ADC bits.&lt;/p&gt;&#xA;&lt;p&gt;&amp;quot;&lt;span class=&quot;math-container&quot;&gt;$^\circ /s / \sqrt{Hz}$&lt;/span&gt;&amp;quot; is, again, the power spectral density.&lt;/p&gt;&#xA;&lt;p&gt;It should be obvious at this point what the magnetometer specifications mean.&lt;/p&gt;&#xA;&lt;p&gt;If you haven't got a background in random processes and signal analysis then you're going to have a rough time relating this back to real-world numbers, particularly if you're doing any kind of sensor fusion.  Even the &amp;quot;big boys&amp;quot; in the sensor fusion game can't easily map sensor noise to system behavior without lots of simulation and head-scratching.&lt;/p&gt;&#xA;&lt;p&gt;Simpler problems will yield to analysis, however.&lt;/p&gt;&#xA;" OwnerUserId="1411" LastEditorUserId="1411" LastEditDate="2021-04-20T14:56:13.030" LastActivityDate="2021-04-20T14:56:13.030" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="1460" PostTypeId="2" ParentId="1414" CreationDate="2013-06-22T18:30:37.043" Score="2" Body="&lt;p&gt;I believe that your set #2 works better because you're already applying feedback to it, in the form of counting transitions of your encoder.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My knee-jerk method to do this control would be to first use quadrature encoders on each motor, to make sure that I was capturing any backwards motion that might mess me up.  Then I would store a time vs. position trajectory that I wanted the motor to follow, which would result in my desired velocity trajectory.  Then I would servo the motors to the desired positions using PID control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The rule of thumb for control loops that generally works is to sample ten times faster than your desired bandwidth.  That works out to a sampling interval that's ten times shorter than the amount of time you want to allow for your system to settle &lt;strong&gt;after&lt;/strong&gt; it is operating in its linear range (which roughly starts at the last instant that any of the variables come out of saturation).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your encoders are coarse enough that they don't go through many transitions in your desired control loop sampling interval, you may be better off sampling at the encoder transitions.  This will make your life difficult as the speed changes, but perhaps not as difficult as trying to cope with control loop updates with insufficient information.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some of the articles linked to here may help, particularly &quot;PID Without a PhD&quot; and the one on operating motors with friction and backlash:&#xA;&lt;a href=&quot;http://www.wescottdesign.com/articles.html&quot; rel=&quot;nofollow&quot;&gt;http://www.wescottdesign.com/articles.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="1411" LastActivityDate="2013-06-22T18:30:37.043" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1461" PostTypeId="2" ParentId="1457" CreationDate="2013-06-22T20:52:37.450" Score="4" Body="&lt;p&gt;First of all, don't take it personally.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not a quad copter builder of some sort myself, but your setup is flawed: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Battery can deliver 30A constant, maxed out. Your motors take, at full power, 8×4&amp;nbsp;= 32A. You might get away with this battery, but it won't last long because you are pushing it too hard.&lt;/li&gt;&#xA;&lt;li&gt;Big, heavy battery, low power engines/esc/battery. I don't even think your copter is going to lift of with this setup. Engines of&#xA;only 80W on a quad that, taking a look at your picture, is going to&#xA;be relatively heavy, is asking for trouble.&lt;/li&gt;&#xA;&lt;li&gt;PDB is okay with this, and future, more power-hungry (I think), motors. They probably have a safety margin, but don't push it too&#xA;hard, which for now, you are not.&lt;/li&gt;&#xA;&lt;li&gt;Arduino: you are going to &lt;em&gt;try&lt;/em&gt; and program it. Programming a quad isn't an easy task, and unless you are quite a skilled programmer, I&#xA;recommend you to buy a programmed board, something like this: &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__21977__HobbyKing_Multi_Rotor_Control_Board_V3_0_Atmega328_PA_.html&quot; rel=&quot;nofollow&quot;&gt;Hobby&#xA;king link&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;I don't know a whole lot about copters, I'm more in the plane business, but unless you change motors, these props seem too big.&#xA;Moral of the story: get bigger engines, bigger battery, bigger ESC.&lt;/li&gt;&#xA;&lt;li&gt;I can try to recommend better motors, ESC, etc., but I won't. I don't know enough about quads to be certain it is going to work, and&#xA;I won't recommend you something I don't know for sure, sorry.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;It costs to much for me, any way to keep the frame and change the parts to be cheaper and yet a good quadcopter?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;First make sure that your setup is right, then start asking where you can get it cheaper, that's my advice. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Does the propeller fit the motor?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You are going to need an adaptor, but that is normal, I'd bet there are adaptors that suit your needs.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Any place to buy these for cheaper?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, but you are missing a few (important) parts, the setup you present here isn't a very expensive one, if you can't afford it, I recommend you to save money until you can buy a proper setup, you won't regret having some patience. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Is it a good frame?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I can't judge if a frame is correct by one picture, there are way too many variables (like thickness of the material, where you are using aluminum, and where you are using the plastic, how are your motor mounts, what material, so on...).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Am I missing some parts?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, since I think you want to control it, you are going to need a controller, add &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__9042__Hobby_King_2_4Ghz_6Ch_Tx_Rx_V2_Mode_2_.html&quot; rel=&quot;nofollow&quot;&gt;25$&lt;/a&gt;. Materials for the frame, camera, transmitter for the camera, ground station to receive, monitor for the video feed, so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think you are taking this too lightly. You don't just build a quad for the first time, it's going to take a lot, and I mean a lot, of trial and error, and quite a bit of money.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Take your time to find the right parts.&lt;/p&gt;&#xA;" OwnerUserId="1520" LastEditorUserId="1177" LastEditDate="2013-12-31T17:39:52.557" LastActivityDate="2013-12-31T17:39:52.557" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1462" PostTypeId="2" ParentId="1414" CreationDate="2013-06-23T01:34:44.000" Score="3" Body="&lt;p&gt;It sounds like you have 6 legs with some number of PID-controlled joints on each leg.  You would like to move 3 legs at a time, while the other 3 legs stand in a stable tripod configuration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Instead of figuring out how to move each set of 3 legs as one unit, you should be treating them as individual legs.&lt;/strong&gt;  You will send a leg a set of desired joint positions, and the PID control on each joint motor will effect that change.  By sending a steady stream of desired joint positions, you will be describing a trajectory for the leg to follow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Coordinating the actions of all 6 legs simply involves a series of checkpoints to make sure that no leg gets too far behind the others.  You need not keep all 6 legs on the same checkpoint; for example, you might keep each set of tripods tightly in sync but only sync the 2 sets at the point in the gait where the weight is shifted.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Another way to imagine the checkpoints is to consider the gait to be a series of repeated movements of each leg, where each leg is slightly phase-shifted.  In that case, the checkpoints would be the &quot;constraints&quot; on the allowed phase differences (e.g. &lt;a href=&quot;http://www.msl.ri.cmu.edu/publications/pdfs/haynes-icra-2006.pdf&quot; rel=&quot;nofollow&quot;&gt;this CMU paper&lt;/a&gt;).&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2013-06-23T01:34:44.000" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1463" PostTypeId="1" CreationDate="2013-06-23T20:01:19.637" Score="1" ViewCount="1795" Body="&lt;p&gt;If a motor has more Power (W) from another it means that it is better?&lt;/p&gt;&#xA;" OwnerUserId="1337" LastActivityDate="2013-06-24T02:39:37.067" Title="Does more &quot;Power&quot; (W) means better motor?" Tags="&lt;motor&gt;&lt;quadcopter&gt;&lt;power&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1464" PostTypeId="2" ParentId="1463" CreationDate="2013-06-24T00:58:34.677" Score="3" Body="&lt;p&gt;The short answer is no.  The longer answer requires more information from you, regarding how the motor is to be used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since you have tagged your question with &quot;quadcopter&quot;, I'm going to assume that you plan to put the motor on a UAV, in which case more power definitely does not mean &quot;better&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More power (W) will draw more current (A) from the battery (meaning a larger battery and higher all-up-weight (AUW) of the craft).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You need to choose the correct motor and prop for your particular quadcopter frame.  There is no one-size-fits-all motor for quadcopters.  In general, you should be looking for a brushless outrunner motor with low kv, and pairing it with a slow-fly prop.&lt;/p&gt;&#xA;" OwnerUserId="1474" LastActivityDate="2013-06-24T00:58:34.677" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1465" PostTypeId="2" ParentId="1463" CreationDate="2013-06-24T02:39:37.067" Score="2" Body="&lt;p&gt;The wattage rating is &lt;em&gt;usually&lt;/em&gt; (read the manufacturer's specs very carefully) the measure of how much power the motor can draw.  It doesn't tell you anything more than that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Wattage does not tell you whether the motor is &lt;a href=&quot;http://en.wikipedia.org/wiki/Energy_conversion_efficiency&quot; rel=&quot;nofollow&quot;&gt;efficient at converting the input electrical energy into output mechanical energy&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Wattage does not tell you whether the motor's &lt;a href=&quot;http://en.wikipedia.org/wiki/Power-to-weight_ratio&quot; rel=&quot;nofollow&quot;&gt;power-to-weight ratio&lt;/a&gt; is reasonable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Wattage does not tell you whether the motor's size is reasonable for your application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Wattage does not tell you whether the &lt;a href=&quot;http://en.wikipedia.org/wiki/Stall_torque&quot; rel=&quot;nofollow&quot;&gt;stall torque&lt;/a&gt; or maximum speed is correct for the load you wish to drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Wattage does not tell you whether the motor's &lt;a href=&quot;https://en.wikipedia.org/wiki/Duty_cycle#Electrical_devices&quot; rel=&quot;nofollow&quot;&gt;duty cycle&lt;/a&gt; can support the needs of your application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are comparing 2 motors that differ &lt;em&gt;only&lt;/em&gt; by their input power rating, and more power is important to you, then yes: the motor with more power will be better for you.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2013-06-24T02:39:37.067" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1466" PostTypeId="1" AcceptedAnswerId="1472" CreationDate="2013-06-24T05:26:18.397" Score="8" ViewCount="2840" Body="&lt;p&gt;Just out of curiosity, can the concept of a Quadcopter be applied to an ROV? Would it work the same way underwater as it would be in Air? If not what kind of modifications it would take to implement that idea, underwater?&lt;/p&gt;&#xA;" OwnerUserId="1213" LastActivityDate="2015-12-21T10:54:50.300" Title="Quadcopter application underwater" Tags="&lt;quadcopter&gt;" AnswerCount="3" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1467" PostTypeId="2" ParentId="954" CreationDate="2013-06-24T08:38:45.713" Score="0" Body="&lt;p&gt;The problem lies in the Servo.h file in Arduino\libraries\Servo.  The Teensy 3.0 parameters are not defined in this file and therefore it is assumed to have only one timer.  Changing the default action to copy the second last action was sufficient for my purposes, I changed it the file as follows:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#else  // everything else&#xA;#define _useTimer1&#xA;typedef enum { _timer1, _Nbr_16timers } timer16_Sequence_t ;                  &#xA;#endif&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;To:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#else  // everything else&#xA;#define _useTimer3&#xA;#define _useTimer1&#xA;typedef enum { _timer3, _timer1, _Nbr_16timers } timer16_Sequence_t ;&#xA;#endif&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This only managed to get me 16 servos though.  I also tried adding other timers with no success in increasing the number of available servos.  Hopefully this proves useful to someone.&lt;/p&gt;&#xA;" OwnerUserId="1540" LastActivityDate="2013-06-24T08:38:45.713" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1468" PostTypeId="2" ParentId="1466" CreationDate="2013-06-24T09:42:45.420" Score="0" Body="&lt;p&gt;First of all, my intuition says it'll work, same logic - props push the water/air makes the quadcopter move.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My guess is that the water resistance to the motors is much higher than the air and therefor the motors should be much stronger.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another thing might be that there is almost no way to fix it if it brakes in the water (it'll probably just drown) so you should probably &quot;extra&quot; protect your props and electronics and actually everything..&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other thing is quite obvious, you need to protect your electronics from water so that makes the price go up a bit more.&lt;/p&gt;&#xA;" OwnerUserId="1337" LastActivityDate="2013-06-24T09:42:45.420" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1469" PostTypeId="2" ParentId="954" CreationDate="2013-06-24T09:54:15.750" Score="0" Body="&lt;p&gt;There is another Servo library that can drive as many servo's as you want :&lt;a href=&quot;http://playground.arduino.cc/ComponentLib/servo&quot; rel=&quot;nofollow&quot;&gt;Link to Arduino Software Servo&lt;/a&gt;. Good luck&lt;/p&gt;&#xA;" OwnerUserId="1520" LastActivityDate="2013-06-24T09:54:15.750" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1470" PostTypeId="2" ParentId="1466" CreationDate="2013-06-24T11:00:28.607" Score="13" Body="&lt;p&gt;I'm guessing that your question is based on whether the mathematical &lt;em&gt;model&lt;/em&gt; of a quadrotor would work in a water environment, and not the hardware. Quite obviously the electronics and mechanical systems would need changing to work in the water: the electronics would short and the rotors would spin too fast.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The rest of my answer is based on the work &lt;a href=&quot;http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=5164715&amp;amp;tag=1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Design and implementation of a structured flight controller for a 6DoF quadrotor using quaternions&lt;/a&gt; by Stingu and Lewis. The free version of that paper can be found at &lt;a href=&quot;http://www.uavdesign.net/adaptive-a-distributed-control/quaternion-based-quadrotor-control/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Quaternion-Based Quadrotor Control&lt;/a&gt;. Most quadrotor models that I have studied use minor variations on the same equations for the basic flight control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From that paper we have the following system diagram:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/eVHRA.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/LSpaz.jpg&quot; alt=&quot;System control&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Operating a quadrotor model in a liquid would require one change to the model: if the physical vehicle was neutrally or positively buoyant (ie, it doesn't sink) then the model would be invalidated. In that case the model would have to adjust for flipping the quadrotor upside down to increase the depth.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The rest of the model could be used as is: it's medium independent. In fact, the only portion of the model that touches on the medium is the equations for torque and thrust of the propellers:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;K_T = \frac{T}{\rho n^2 D^4}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;K_Q = \frac{Q}{\rho n^2 D^5}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In these equations, $K_T$ is a thrust constant, $K_Q$ is a torque constant, $T$ is thrust, $\rho$ is free stream density (air or water), $n$ is rotation speed, and $D$ is rotor diameter. To operate the model in water $\rho$ just has to be replaced with the density of water ($1000 kg/m^3$).&lt;/p&gt;&#xA;" OwnerUserId="1524" LastEditorUserId="37" LastEditDate="2013-06-24T17:41:31.707" LastActivityDate="2013-06-24T17:41:31.707" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1471" PostTypeId="2" ParentId="1448" CreationDate="2013-06-24T12:31:38.037" Score="3" Body="&lt;p&gt;If both entrance and exit of the maze is at the edges of the maze, the left/right hand (wall following) algorithm should work. If you start following a wall that is connected to the exit, you could never get into a loop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want the robot to be able to start in the middle of a maze with loops then simple wall following is not enough. I would recommend the &lt;a href=&quot;http://en.wikipedia.org/wiki/Maze_solving_algorithm#Pledge_algorithm&quot; rel=&quot;nofollow&quot;&gt;Pledge algorithm&lt;/a&gt; in that case. The basic idea is that you pick an arbritary direction and follow it until you encounter a wall. Then you follow the wall until you have made as many righ turns as left turns, then continue forward (along the direction you originally picked).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Pledge algorithm is proven to work in the ideal case with perfect sensors or some kind of error correction. If there could be errors when turning and not all angles are 90° some further measures may be needed (for example a compass). See &lt;a href=&quot;http://academic.research.microsoft.com/Paper/688807.aspx&quot; rel=&quot;nofollow&quot;&gt;this article&lt;/a&gt; for more details (&lt;a href=&quot;http://web.informatik.uni-bonn.de/I/publications/kl-pares-03.pdf&quot; rel=&quot;nofollow&quot;&gt;direct link to the pdf&lt;/a&gt;). In your case the errors should be small enough.&lt;/p&gt;&#xA;" OwnerUserId="1542" LastEditorUserId="1542" LastEditDate="2013-06-26T18:56:17.067" LastActivityDate="2013-06-26T18:56:17.067" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1472" PostTypeId="2" ParentId="1466" CreationDate="2013-06-24T17:01:00.157" Score="19" Body="&lt;p&gt;Is an underwater quadrotor possible?  Absolutely.  Whether it's practical in that configuration is a different matter.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In air, viscosity and buoyancy are negligible; in water, they are not.  An aerial quadrotor will expend energy fighting gravity, while an underwater quadrotor can simply rely on positively bouyant materials to keep it from sinking.  You can experience this yourself &amp;mdash; you can swim in water (or use a small piece of foam for flotation), but not in air.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An underwater quadrotor will expend energy fighting the water's fluid friction, while an aerial quadrotor will move easily.  You can experience this effect as well &amp;mdash; try throwing a frisbee in air, then see how far you can &quot;throw&quot; it underwater.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you were to actually operate a quadrotor underwater, you would mostly likely fly it with the rotors oriented horizontally &amp;mdash; in the direction of travel, instead of being vertical and just tilting slightly in the direction of travel.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update 2015-12-21:&lt;/strong&gt; Someone did this exact thing.&#xA;&lt;a href=&quot;https://www.youtube.com/watch?v=FC9EJhs0pc0&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.imgur.com/FZy52am.gif&quot; alt=&quot;underwater quadrotor&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While a torpedo shape typically favored for cruising in a forward direction, there are other vehicles with 4 thrusters (positioned for maneuverability), such as Bluefin's HAUV:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/JlXXy.jpg&quot; alt=&quot;Bluefin HAUV Prototype&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2015-12-21T10:54:50.300" LastActivityDate="2015-12-21T10:54:50.300" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1475" PostTypeId="1" CreationDate="2013-06-26T13:35:50.340" Score="0" ViewCount="47" Body="&lt;p&gt;I am interested in starting a robotics club at my high school next year, since we don't have one, and I want to know what the pros/cons are of common kits. I already have a Vex kit since my uncle is one of the regional suppliers for Indiana, but I'm not sure that Vex is the best choice. What are the pros/cons of the other kits out there?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: I looked at Lego Mindstorms, and have used them when I was learning robotics, but do not want them for this. Also, i own a Raspberry Pi.&lt;/p&gt;&#xA;" OwnerUserId="1551" LastEditorUserId="1551" LastEditDate="2013-06-26T21:59:34.063" LastActivityDate="2013-06-26T21:59:34.063" Title="Pros/Cons of common robotics &quot;kits&quot; at the high school level" Tags="&lt;raspberry-pi&gt;&lt;mindstorms&gt;&lt;beginner&gt;&lt;children&gt;" AnswerCount="0" CommentCount="7" ClosedDate="2013-06-26T16:48:49.507" ContentLicense="CC BY-SA 3.0" />
  <row Id="1477" PostTypeId="5" CreationDate="2013-06-26T14:06:51.673" Score="0" Body="&lt;p&gt;From &lt;a href=&quot;http://en.wikipedia.org/wiki/Robotc&quot; rel=&quot;nofollow&quot;&gt;Wikipedia&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;ROBOTC (trademarked as ROBOTC and frequently spelled RobotC) is an Integrated development environment targeted towards students that is used to program and control LEGO NXT, VEX, RCX, and Arduino robots using a programming language based on the C programming language.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="37" LastEditorUserId="37" LastEditDate="2013-06-26T14:06:51.673" LastActivityDate="2013-06-26T14:06:51.673" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1478" PostTypeId="4" CreationDate="2013-06-26T14:06:51.673" Score="0" Body="ROBOTC (trademarked as ROBOTC and frequently spelled RobotC) is an Integrated development environment targeted towards students that is used to program and control LEGO NXT, VEX, RCX, and Arduino robots using a programming language based on the C programming language. Not to be confused with &quot;Robotic&quot;. Please refrain from using this tag for general robotics questions." OwnerUserId="37" LastEditorUserId="30" LastEditDate="2013-07-31T17:43:45.553" LastActivityDate="2013-07-31T17:43:45.553" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1481" PostTypeId="2" ParentId="851" CreationDate="2013-06-26T22:13:23.827" Score="2" Body="&lt;p&gt;Without going through all your code (that would be too much like real work), my gut feel is that you have weighted your control effort heavily enough that the least-cost thing to do is to do nothing and live with the error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yes, I know -- all your explicit weights are unity.  But still -- try giving the control effort a lower weight, or the position error a higher one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Again without getting deeply into your code, your ilrq function may not &quot;understand&quot; the nonlinear nature of the thing you're controlling.  As such, it may not see a way to get to the pendulum upright position, and again, it may fail.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The approach that you first tried, to put just the right amount of energy into the pendulum, then regulate optimally once the pendulum is erect, is probably the best way: you know that in the absence of friction, a system with just the perfectly right amount of energy is going to end up standing still on top (however briefly), so that would seem a sensible place to start.&lt;/p&gt;&#xA;" OwnerUserId="1411" LastActivityDate="2013-06-26T22:13:23.827" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1482" PostTypeId="2" ParentId="1392" CreationDate="2013-06-26T22:20:07.560" Score="1" Body="&lt;p&gt;I don't know Arduino from Aardvark, so this comment is based purely on how a modern C++ compiler would behave:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Were you asking about a plain ol' C++ problem, I would ask you if compass is declared volatile, or if the 'heading' method of compass's class is declared volatile, or if your system is based on cooperative multitasking.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the first two cases (lack of things being tagged as volatile) the compiler will optimize the call to compass.heading to just outside the loop (to save you time -- isn't that nice?).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the third case, whatever the code is that actually acquires the values for the compass structure will never get a chance to run (because your code is stuck in the while loop) and you'll never see results.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope this makes sense to the Arduino environment...&lt;/p&gt;&#xA;" OwnerUserId="1411" LastActivityDate="2013-06-26T22:20:07.560" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1483" PostTypeId="1" AcceptedAnswerId="1486" CreationDate="2013-06-26T22:51:52.753" Score="3" ViewCount="265" Body="&lt;p&gt;I'm trying to find the optimal-time trajectory for an object (point mass) from point &lt;code&gt;p0&lt;/code&gt; with initial velocity &lt;code&gt;v0&lt;/code&gt; to point &lt;code&gt;p1&lt;/code&gt; with velocity &lt;code&gt;v1&lt;/code&gt;. I'm considering a simple environment without any obstacles to move around. The only constraint is a maximum acceleration in any direction of &lt;code&gt;a_max&lt;/code&gt; and optionally a maximum speed of &lt;code&gt;s_max&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is easy to work out in 1D but I struggle with the solution 2D and 3D. I could apply the 1D solution separately to each dimension, but this would only limit acceleration and speed in a single dimension. The actual acceleration might be larger in multiple dimensions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any textbook, closed-form solutions to this problem? If not, how can I solve this in a discrete-event simulation?&lt;/p&gt;&#xA;" OwnerUserId="1555" LastActivityDate="2013-06-27T14:32:19.673" Title="Optimal-time trajectory in 2D and 3D with simple constraints" Tags="&lt;control&gt;&lt;motion-planning&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1484" PostTypeId="2" ParentId="1416" CreationDate="2013-06-27T01:35:40.590" Score="0" Body="&lt;p&gt;Off-the-shelf robot kits are a good place to start for an amateur. If you're not using system-based kits (i.e. Lego), then they can usually be modified. Mount bumpers around the sides to help it withstand crashes and add a larger battery with a higher milli-amp-hour (mAh) rating for longer battery life. It's tough to provide any more specific solutions than that.&lt;/p&gt;&#xA;" OwnerUserId="1557" LastActivityDate="2013-06-27T01:35:40.590" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1485" PostTypeId="2" ParentId="1427" CreationDate="2013-06-27T01:40:58.803" Score="1" Body="&lt;p&gt;If you're open to purchasing a new quadrotor, take a look at the Crazyflie from Bitcraze. It operates exactly this way via USB dongle attached to a PC.&lt;/p&gt;&#xA;" OwnerUserId="1557" LastActivityDate="2013-06-27T01:40:58.803" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1486" PostTypeId="2" ParentId="1483" CreationDate="2013-06-27T04:06:00.853" Score="3" Body="&lt;p&gt;In case you're not already aware, the problem you are asking about is generally referred to as the &lt;a href=&quot;https://en.wikipedia.org/wiki/Boundary_value_problem&quot; rel=&quot;nofollow&quot;&gt;two-point boundary value problem&lt;/a&gt;. For some systems, a closed form solution may be extremely difficult to calculate and may not even exist. As such it would help to know more about your dynamics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your description would seem to imply that you are working with a double integrator system. If that's accurate then you could use a fixed-final-state-free-final-time controller. Because the dynamics matrix is nilpotent you can find a closed form solution in terms of time, then minimize the function to find the optimal arrival time. From there you can use your favorite numerical integration method to verify that the accelerations are within the desired bound. This approach will actually work for any linear system with a nilpotent dynamics matrix. For additional details please see section IV, Optimally Connecting a Pair of States, of my paper &lt;a href=&quot;http://arl.cs.utah.edu/pubs/ICRA2013-1.pdf&quot; rel=&quot;nofollow&quot;&gt;Kinodynamic RRT$^*$: Asymptotically Optimal Motion Planning for Robots with Linear Dynamics&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="177" LastEditorUserId="350" LastEditDate="2013-06-27T14:32:19.673" LastActivityDate="2013-06-27T14:32:19.673" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1487" PostTypeId="2" ParentId="1416" CreationDate="2013-06-27T04:28:24.337" Score="2" Body="&lt;p&gt;In short, yes, there are a number of robotics companies catering to just your needs. Specifically which apply to you depends on what type of robot you desire. Naturally cost varies with the complexity and durability. For example if you would be satisfied with a differential drive robot for indoor use then the &lt;a href=&quot;http://www.irobot.com/us/learn/Educators/Create.aspx&quot; rel=&quot;nofollow&quot;&gt;iRobot Create&lt;/a&gt; may suit your needs. If you need something for outside use then you could look at &lt;a href=&quot;http://www.clearpathrobotics.com/&quot; rel=&quot;nofollow&quot;&gt;Clearpath Robotics&lt;/a&gt; products. For a full humanoid robot the &lt;a href=&quot;http://www.aldebaran-robotics.com/en/&quot; rel=&quot;nofollow&quot;&gt;Aldeberan Nao&lt;/a&gt; is a good choice. For quadrotors check out the &lt;a href=&quot;http://ardrone2.parrot.com/&quot; rel=&quot;nofollow&quot;&gt;AR.Drone Parrot&lt;/a&gt;. And I understand &lt;a href=&quot;http://liquidr.com/technology/wave-glider.html&quot; rel=&quot;nofollow&quot;&gt;Liquid Robotics&lt;/a&gt; offers a good selection of water based robots. &lt;/p&gt;&#xA;" OwnerUserId="177" LastActivityDate="2013-06-27T04:28:24.337" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1488" PostTypeId="2" ParentId="851" CreationDate="2013-06-27T04:46:14.530" Score="1" Body="&lt;p&gt;iLQR is an iterative method but you do not in fact appear to be iterating. Todorov supplies a &lt;a href=&quot;http://homes.cs.washington.edu/~todorov/software/test_ilqg_det.m&quot; rel=&quot;nofollow&quot;&gt;test script&lt;/a&gt; that should elucidate the approach though it may need to be customized for your system.&lt;/p&gt;&#xA;" OwnerUserId="177" LastActivityDate="2013-06-27T04:46:14.530" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1489" PostTypeId="1" AcceptedAnswerId="1491" CreationDate="2013-06-27T10:05:35.743" Score="-2" ViewCount="365" Body="&lt;p&gt;I'm endeavoring to prototype a challenging sorting mechanism inside a fridge and would appreciate any constructive tips on how to get from the specs to a plausible design.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Problem&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The aim of the game is to identify and sort food items in the limited space of a fridge&#xA;-   such that a user would push their unsorted shopping into a chamber at the top of the enclosure&#xA;-   and the machine inside would then try to identify the contents with help of bar-codes (first big problem)&#xA;-   and then sort and move the items according to their identities into different chambers below (second big problem). &lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Solution?&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Are there any existing devices that already serve such functions (automatic bar-coding and sorting), the designs of which could perhaps inform the mechanics of the device I'm planning to construct?&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I'm thinking maybe manufacturing plants&lt;/li&gt;&#xA;&lt;li&gt;or packing factories with conveyor belts etc may use systems that already solve such problems? &lt;/li&gt;&#xA;&lt;li&gt;Or filtering mechanisms in candy dispensers,&lt;/li&gt;&#xA;&lt;li&gt;mechanized lifting forks? &lt;/li&gt;&#xA;&lt;li&gt;Textbook engineering mechanisms?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="1489" LastActivityDate="2013-06-27T19:02:03.810" Title="automatic sorting with barcode identification inside a refrigerator" Tags="&lt;arduino&gt;&lt;motor&gt;&lt;sensors&gt;&lt;cameras&gt;" AnswerCount="1" CommentCount="8" ClosedDate="2013-06-27T20:51:21.113" ContentLicense="CC BY-SA 3.0" />
  <row Id="1491" PostTypeId="2" ParentId="1489" CreationDate="2013-06-27T19:02:03.810" Score="1" Body="&lt;p&gt;Moving it around requires, apart the mechanics, always a free and therefore unused space. Wouldn't you rather like to know, &lt;em&gt;what&lt;/em&gt; is in &lt;em&gt;which&lt;/em&gt; position? And for the barcode: it can become unreadable by ice. I'm thinking of using RFID for a similar project for about 10 fridges with each 30 boxes in it.&lt;/p&gt;&#xA;" OwnerUserId="1251" LastActivityDate="2013-06-27T19:02:03.810" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1492" PostTypeId="1" CreationDate="2013-06-27T21:10:37.393" Score="5" ViewCount="103" Body="&lt;p&gt;It seems popular to build robotic systems with separate supplies for the electronics and motors/servos, but what would be involved in a circuit that powers both from one source?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it helps, here is my particular situation. I want to use a single 7.4V Li-Po pack to power an embedded system (2.5-6V operating voltage input, max 1A current draw) and up to 18 standard-sized servos (HS-645, 4.8-6V operating voltage). This would be a hexapod, so it is unlikely that all servos would be stalling at once with normal gait patterns.&lt;/p&gt;&#xA;" OwnerUserId="1557" LastActivityDate="2013-07-03T22:55:51.753" Title="Single power source for electronics and actuators" Tags="&lt;electronics&gt;&lt;otherservos&gt;&lt;power&gt;&lt;legged&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1493" PostTypeId="2" ParentId="1492" CreationDate="2013-06-27T21:32:52.673" Score="6" Body="&lt;p&gt;There are a variety of reasons to separate the motor power from the &quot;hotel load&quot;, including:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Reducing the number of wires running between high-power and low-power electronics&lt;/li&gt;&#xA;&lt;li&gt;Redundancy (your homing beacon shouldn't run out of power when the rest of the system does)&lt;/li&gt;&#xA;&lt;li&gt;Preventing heavy current loads from browning out the control system&lt;/li&gt;&#xA;&lt;li&gt;Making the system more modular&lt;/li&gt;&#xA;&lt;li&gt;Being able to have an emergency kill switch for the actuator power that won't hard-shutdown your onboard PC (risking data loss in the filesystem).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;However, there's nothing fancy about doing it all from one battery: use a DC-DC converter to get the voltage you need for your electronics, and watch out for ground faults.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2013-06-27T21:32:52.673" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1494" PostTypeId="1" CreationDate="2013-06-28T10:59:20.897" Score="0" ViewCount="5231" Body="&lt;p&gt;My team developed a filling machine for liquids which uses a piston to measure and deliver volumes 0.1 to 1 liters into bottles. It is built mostly with mechanical parts and we'd like to replace most of them with electronic ones.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How do I build a machine to pull liquid from a reservoir and fills a bottle using a piston, with electronic parts such as stepper motor, linear actuators and sensors?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I understand this is somewhat vague. Any aligned response is appreciated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Update:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This machine should, at its max speed, fill a 1 litter bottle with water in 2 seconds (to deliver 30 bottles per minute). Higher viscosity liquids may take longer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It should not spill so liquid needs some filling acceleration control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may assume two operation modes: with bubbles and without bubbles. The first is a plus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd like to be able to change the volume electronically (via a LCD menu).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I thought of a single main valve that switches between the reservoir and the bottle. That should be controlled electronically too. I could use two valves too.&lt;/p&gt;&#xA;" OwnerUserId="1556" LastEditorUserId="1556" LastEditDate="2013-06-29T10:23:25.790" LastActivityDate="2013-06-29T10:23:25.790" Title="How to build a liquid filling machine using piston?" Tags="&lt;sensors&gt;&lt;stepper-motor&gt;&lt;mechanism&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ClosedDate="2013-07-01T15:23:54.943" ContentLicense="CC BY-SA 3.0" />
  <row Id="1495" PostTypeId="2" ParentId="1494" CreationDate="2013-06-28T14:40:49.420" Score="1" Body="&lt;p&gt;Off the top of my head, the first thing I would try:&#xA;Attach a &lt;a href=&quot;http://reprap.org/wiki/stepper_motor&quot; rel=&quot;nofollow&quot;&gt;stepper motor&lt;/a&gt; to a &lt;a href=&quot;http://en.wikipedia.org/wiki/Pump#Positive_displacement_pump&quot; rel=&quot;nofollow&quot;&gt;positive-displacement pump&lt;/a&gt;.&#xA;(Gearing it down is often necessary).&#xA;Then hook the wires from the stepper motor one of the many off-the-shelf stepper motor drivers, perhaps &lt;a href=&quot;http://reprap.org/wiki/Pololu_Electronics&quot; rel=&quot;nofollow&quot;&gt;Pololu stepper drivers&lt;/a&gt; or the many &lt;a href=&quot;http://reprap.org/wiki/Alternative_electronics&quot; rel=&quot;nofollow&quot;&gt;alternatives&lt;/a&gt;.&#xA;Then figure out how much volume came out for every revolution of the stepper motor.&#xA;Then program the Arduino (or one of many alternatives) to somehow detect when there is a bottle in position and how much volume it needs, pump the appropriate volume into the bottle, and stop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A note near the bottom of&#xA;&lt;a href=&quot;http://www.stpats.com/FillingMachines.htm&quot; rel=&quot;nofollow&quot;&gt;one filling machine vendor&lt;/a&gt;&#xA;points out that sometimes constant-volume filling doesn't work --&#xA;sometimes it's better to start filling when the bottle is in position,&#xA;then turn off the pump&#xA;when the liquid has reached the fill line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My understanding is that a visible-light laser and a photo-sensor&#xA;is the easiest way to manually line up a non-contact sensor to the appropriate fill line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Have you searched Google for &quot;bottle filling&quot; to see if maybe there's an off-the-shelf system that already does most of what you need to do?&lt;/p&gt;&#xA;" OwnerUserId="187" LastActivityDate="2013-06-28T14:40:49.420" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1496" PostTypeId="1" CreationDate="2013-06-28T15:32:27.220" Score="1" ViewCount="278" Body="&lt;p&gt;I'm looking for an electrical explanation of the statement &lt;a href=&quot;http://copter.ardupilot.com/wiki/camera-mount/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Warning: Do not connect power (red + &amp;amp; black -) from the RC10 (A10) &amp;amp;&#xA;  RC11 (A11) connectors to the servos, just use the signal lines. Power&#xA;  the servos via the PWM Outputs connectors. These solutions will avoid&#xA;  the scenario that can possibly happen when the Pan/Tilt servo draw too&#xA;  much current and cause the APM to brownout (reset)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I examined the APM2.5 board drawing and schematic &lt;a href=&quot;http://stuff.storediydrones.com/APM_v252_RELEASE.zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; and the grounding is a little unclear. On the schematic, they all just go to GND, but on the board drawing some of the ground pins appear unconnected to traces. I checked for continuity, and there is no continuity between the PWM grounds and the A10/A11 ground pins. By the way, my power setup is that I have J1 enabled and I am using an ESC to power the board.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone figure out, electrically, what is between these two sets of ground pins?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ground pins appear unconnected to the traces:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/hLO2r.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hLO2rm.jpg&quot; alt=&quot;Ground pins appear unconnected to the traces&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PWM ground just connected to GND:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Fyzmo.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Fyzmom.png&quot; alt=&quot;PWM ground just connected to GND&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;analog output ground also connected to GND:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/arrQR.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/arrQRm.png&quot; alt=&quot;analog output ground also connected to GND&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="1473" LastEditorUserId="1473" LastEditDate="2013-07-02T18:22:40.370" LastActivityDate="2013-07-02T18:22:40.370" Title="On the ardupilot board, what is the difference between A10 / A11 ground pins and the PWM ground pins?" Tags="&lt;power&gt;&lt;ardupilot&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1497" PostTypeId="2" ParentId="1494" CreationDate="2013-06-28T16:51:14.833" Score="3" Body="&lt;p&gt;Yes, general question.  Here's some general bits-o-answer: some assembly is required.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, I would leave the decision about stepper vs. some other kind of motor until later -- it should be a tactical, not a strategic, decision.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second, assuming that the positive displacement idea works at all, I would assume that at the core of your machine you still need that piston that you mention.  I would achieve controlled displacement of the piston by using some sort of linear actuator that has lots of available force and considerable mechanical stiffness, coupled with a good distance measurement on the piston.  I'd close my outer loop around the distance that the piston has traveled.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What springs to mind for a linear actuator is either a stepper motor (probably geared down) driving a jack screw, or a small DC gear motor, with an encoder on the motor and speed control, driving a jack screw.  I am personally biased against steppers, so if I were King on this project it would almost certainly be the DC gear motor -- but if you were paying me to implement it with a stepper, I'd say &quot;sure!&quot; and make sure that you selected one that had more than sufficient torque to get the job done.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The field is pretty open as far as the piston position sensor.  I don't know how clean your environment is, but assuming reasonable cleanliness I'd probably choose an optical linear encoder with a good fine line -- but I know there's other technologies out there that would work as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For control I'd close the piston, fill the piston by some extra amount to account for bubbles or whatever, switch the flow over to the bottle, then push the piston in by the correct distance to get the amount of fill desired.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or, I'd find a way to weigh the bottles as I was filling them, and do the job by weight.&lt;/p&gt;&#xA;" OwnerUserId="1411" LastActivityDate="2013-06-28T16:51:14.833" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1498" PostTypeId="2" ParentId="1492" CreationDate="2013-06-28T19:52:24.480" Score="3" Body="&lt;p&gt;You can also add between the controller power an electrolytic capacitor of about 500 or even 1000 microfarads x 12 volts and a diode in series with it, so when the trigger pull much current source with a corresponding drop in voltage will be avoided that Power down controller please and even free you from unwanted noise (about 10 turns of cable around a ferrite core also help eliminate noise).![enter image description here][1]&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;+__________mmm___________K|_______________ + controller&#xA;Fonte                          ___|___&#xA;                             |_________|&#xA;                                  |&#xA;                                 ground                                      &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="1563" LastEditorUserId="350" LastEditDate="2013-06-28T20:40:46.523" LastActivityDate="2013-06-28T20:40:46.523" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1499" PostTypeId="2" ParentId="1427" CreationDate="2013-06-28T20:34:03.613" Score="0" Body="&lt;p&gt;It's a non-starter to try and send flysky data from a computer, since it is a closed-source protocol designed to be sent from r/c transmitters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You really want a separate data radio with a serial-type connection, using wifi, xbee, or similar.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would recommend using &lt;a href=&quot;http://qgroundcontrol.org/mavlink/start#autopilots_using_mavlink&quot; rel=&quot;nofollow&quot;&gt;one of the many quadcopter flight controllers&lt;/a&gt; that speaks the standard &lt;a href=&quot;http://qgroundcontrol.org/mavlink&quot; rel=&quot;nofollow&quot;&gt;MAVlink&lt;/a&gt; protocol. Then you can use many programs, such as qgroundcontrol, andropilot, or APM planner to control your quad. You can also use pymavlink to control your quad from python, and you have complete flexibility to set it up with any sort of interface you like with a little programming.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're looking for a pre-made micro quad, you may be able to use the new walkera qr-w100, which has wifi. So far they have only created an iphone app, but I hope someone will reverse engineer their wifi command protocol so that we can use a computer or android phone.&lt;/p&gt;&#xA;" OwnerUserId="1473" LastEditorUserId="1473" LastEditDate="2013-06-28T20:39:10.260" LastActivityDate="2013-06-28T20:39:10.260" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1500" PostTypeId="1" AcceptedAnswerId="1502" CreationDate="2013-06-29T00:30:43.873" Score="3" ViewCount="292" Body="&lt;p&gt;I am building a robot where power density is critical, and looking into using lithium thionyl chloride (SOCl2) batteries. I will be drawing around 20A constantly and need between 12 and 17V. The batteries I have found so far are AA-sized and designed to deliver 100mA, 3.6v, 2.4Ah, and weigh 19g each. I could picture a pack with 4 blocks of these batteries in series, where each block has 20 batteries in parallel. That would mean 48Ah, which is way more than the ~10Ah that I need, and 1.52kg, which is more than I would like the robot be carrying.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, the question is, is there a way to achieve 10Ah at 20A and 14.4V (i.e. for 5 hours) using SOCl2, carrying much less weight than 1.52kg?&lt;/p&gt;&#xA;" OwnerUserId="1473" LastEditorUserId="1473" LastEditDate="2013-06-29T13:02:58.040" LastActivityDate="2013-06-29T20:29:40.677" Title="lithium thionyl chloride batteries to generate 20A @ 14.4V" Tags="&lt;power&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1501" PostTypeId="2" ParentId="1496" CreationDate="2013-06-29T16:09:14.850" Score="1" Body="&lt;p&gt;I found a possible answer for you &lt;a href=&quot;https://groups.google.com/forum/#!topic/drones-discuss/baFSnoCtKJ0&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;A10 &amp;amp; A11 are connected to the input rail because historically those were inputs and the Vcc rail was used to power the sensors.  When you attempt to power servos from the input rail, the extra current draw causes an additional voltage drop across the input diode and fuse and Vcc drops to brownout levels regardless if you are using a BEC or the Power Module.  If you are going to connect servos to A10 &amp;amp; A11 you must provide an alternate source of power not Vcc from the input rail.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="1565" LastActivityDate="2013-06-29T16:09:14.850" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1502" PostTypeId="2" ParentId="1500" CreationDate="2013-06-29T20:29:40.677" Score="2" Body="&lt;p&gt;Lithium thionyl chloride / SOCl2 batteries have excellent &lt;a href=&quot;http://www.allaboutbatteries.com/Battery-Energy.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;energy density&lt;/a&gt; but are not aimed at high-current applications and are not rechargeable, so it seems likely that you can save weight and cost by using some other kind of batteries.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Quadcopter batteries (typically &lt;a href=&quot;http://en.wikipedia.org/wiki/Lithium_polymer_battery&quot; rel=&quot;nofollow noreferrer&quot;&gt;lithium ion polymer&lt;/a&gt; technology, rated for 5C to 15C discharge rates and rechargeable hundreds of times) might be a better choice.  You could use half-a-dozen 2200 mAh packs, or a couple of 5500 mAh packs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Previous question &lt;a href=&quot;https://robotics.stackexchange.com/q/554&quot;&gt;Quadcopter liPo battery weight/capacity trade off&lt;/a&gt; includes some charts comparing energy densities, etc., for several battery technologies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note, if your application is controlling several motors, with several motor controllers, you may be able to use higher voltages to the controllers, which use PWM to deliver desired amounts of energy to the motors.  This technique is usable when you have a high-voltage, low-current power source.  However (see below) that doesn't help in the present case.  Likewise, a DC/DC buck converter (that converts high voltages to lower voltages, at ~ 95% efficiency) doesn't help.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 20A, 10Ah parameters of your SOCl2 example imply 30 minutes of operation.  The 20A, 14.4V parameters imply energy rate is 288 W.  The current drain per cell in the example is 1A (which exceeds the rating of a typical AA  SOCl2 cell).  If we limit per-cell current to 1A, we get 3.6 W per cell.  Then the number of cells required is 288/3.6 = 80 cells, regardless of the cells' series or parallel configuration, which is why a higher voltage to the motor controller, or to a buck converter, doesn't help.&lt;/p&gt;&#xA;" OwnerUserId="478" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2013-06-29T20:29:40.677" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1503" PostTypeId="1" AcceptedAnswerId="1521" CreationDate="2013-06-29T22:41:17.110" Score="1" ViewCount="166" Body="&lt;p&gt;Are there any Python3 modules used to program robotic movement by declaring a device or component and then providing the instructions? I am not looking for modules that test the components.&lt;/p&gt;&#xA;" OwnerUserId="1309" LastEditorUserId="1309" LastEditDate="2013-07-01T18:15:20.870" LastActivityDate="2013-07-01T19:15:10.237" Title="Python3 Modules for motor movement" Tags="&lt;python&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1504" PostTypeId="5" CreationDate="2013-06-29T22:41:53.250" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2013-06-29T22:41:53.250" LastActivityDate="2013-06-29T22:41:53.250" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1505" PostTypeId="4" CreationDate="2013-06-29T22:41:53.250" Score="0" Body="Python is a widely used high-level, general-purpose, interpreted, dynamic programming language." OwnerUserId="10596" LastEditorUserId="10596" LastEditDate="2016-05-09T17:30:52.807" LastActivityDate="2016-05-09T17:30:52.807" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1506" PostTypeId="5" CreationDate="2013-06-29T22:43:44.257" Score="0" Body="&lt;p&gt;3D-printing is the process of making virtual objects into real objects by using a device that 'prints' material (often plastic) layer by layer. 3D printing, also known as additive manufacturing (AM), refers to processes used to synthesize a three-dimensional object in which successive layers of material are formed under computer control to create an object.&lt;/p&gt;&#xA;" OwnerUserId="1309" LastEditorUserId="9504" LastEditDate="2017-01-24T14:07:58.733" LastActivityDate="2017-01-24T14:07:58.733" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1507" PostTypeId="4" CreationDate="2013-06-29T22:43:44.257" Score="0" Body="3D printing, also known as additive manufacturing (AM), refers to processes used to synthesize a three-dimensional object in which successive layers of material are formed under computer control to create an object." OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-01-24T14:08:20.960" LastActivityDate="2017-01-24T14:08:20.960" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1508" PostTypeId="5" CreationDate="2013-06-29T22:45:13.623" Score="0" Body="&lt;p&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Artificial_intelligence&quot; rel=&quot;nofollow&quot;&gt;Wikipedia&lt;/a&gt;: Artificial intelligence (AI) is a branch of computer science that studies and develops systems that can perceive their environment and take actions that maximize the chances of success.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Currently popular approaches include statistical methods, computational intelligence and traditional symbolic AI. There are an enormous number of tools used in AI, including versions of search and mathematical optimization, logic, methods based on probability and economics, and many others.&lt;/p&gt;&#xA;" OwnerUserId="1449" LastEditorUserId="350" LastEditDate="2013-08-04T16:29:26.033" LastActivityDate="2013-08-04T16:29:26.033" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1509" PostTypeId="4" CreationDate="2013-06-29T22:45:13.623" Score="0" Body="The central problems (or goals) of Artificial Intelligence research include reasoning, knowledge, planning, learning, communication, and perception." OwnerUserId="-1" LastEditorUserId="350" LastEditDate="2013-08-04T16:29:26.033" LastActivityDate="2013-08-04T16:29:26.033" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1510" PostTypeId="5" CreationDate="2013-06-29T22:45:47.110" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2013-06-29T22:45:47.110" LastActivityDate="2013-06-29T22:45:47.110" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1511" PostTypeId="4" CreationDate="2013-06-29T22:45:47.110" Score="0" Body="C++ is a compiled general-purpose programming language that adds object-oriented features and other enhancements to the C language. It is popular for both embedded (including robotics) and PC software development. " OwnerUserId="10596" LastEditorUserId="10596" LastEditDate="2016-05-09T10:44:11.963" LastActivityDate="2016-05-09T10:44:11.963" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1512" PostTypeId="5" CreationDate="2013-06-29T22:46:30.517" Score="0" Body="&lt;p&gt;A device for measuring one's relative heading with respect to geography cardinal directions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See &lt;a href=&quot;https://en.wikipedia.org/wiki/Compass&quot; rel=&quot;nofollow noreferrer&quot;&gt;the wiki&lt;/a&gt; for more.&lt;/p&gt;&#xA;" OwnerUserId="20709" LastEditorUserId="20709" LastEditDate="2018-07-26T17:19:26.450" LastActivityDate="2018-07-26T17:19:26.450" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="1513" PostTypeId="4" CreationDate="2013-06-29T22:46:30.517" Score="0" Body="A device for measuring one's relative heading with respect to geography cardinal directions." OwnerUserId="20709" LastEditorUserId="20709" LastEditDate="2018-07-26T17:19:21.193" LastActivityDate="2018-07-26T17:19:21.193" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="1514" PostTypeId="1" AcceptedAnswerId="1522" CreationDate="2013-06-30T18:23:12.643" Score="7" ViewCount="935" Body="&lt;p&gt;So I built three little bots so far. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;One with a raspberry-pi, (6V motors), one with an arduino (12V motors), and another with an arduino but a hacked remote car (7ish, volt motors):&lt;br&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/AJ45l.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/AJ45ls.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/f6NUt.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/f6NUts.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/Rr5fH.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Rr5fHs.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem I have with all these is that the motors spin so fast the car just bumps into something in a few seconds. (I have a small house)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried to use PWM to control the speed, but at a little less than full throttle (255) they jam up and they can't take the weight I put on them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Should I buy one of these chassis that slow the motor down and give it torque with a gearbox, or is there anything else I can do?&lt;/p&gt;&#xA;" OwnerUserId="1522" LastEditorUserId="350" LastEditDate="2013-07-01T15:57:43.283" LastActivityDate="2013-08-16T13:38:23.540" Title="Reducing motor speed without jamming up" Tags="&lt;motor&gt;&lt;pwm&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1515" PostTypeId="1" CreationDate="2013-07-01T10:44:57.507" Score="5" ViewCount="1413" Body="&lt;p&gt;I'm looking for a way to create a non-rotating persistence of vision device. I have all the electronics set up but I'm stumped with the mechanical design.&#xA;I tried these two designs:&lt;img src=&quot;https://i.stack.imgur.com/Xvb5l.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;br&gt;&#xA;But these didn't work so well. Everything shakes violently and it doesn't go nearly as fast as I need (about 20 swipes per second)&#xA;Any ideas on how I can build this?&lt;/p&gt;&#xA;" OwnerUserId="1571" LastActivityDate="2014-02-03T11:58:29.263" Title="Building a non rotating persistence of vision device" Tags="&lt;motor&gt;&lt;mechanism&gt;" AnswerCount="2" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="1517" PostTypeId="1" CreationDate="2013-07-01T15:07:47.273" Score="2" ViewCount="99" Body="&lt;p&gt;I have two Kinects (each on its own USB card) whose cameras I'm watching in RVIZ through OpenNI, and the structured light pattern of one is flashing intermittently - it's only there for a short flash every two seconds. Obviously, the structured light depth calculations only work if the pattern is always projected when the camera is looking at it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What causes this, and how do I fix it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: I was also having this issue with a single Kinect, for which I discovered the issue, as detailed in my own answer. However, the problem persists when two Kinects are plugged in, with one Kinect flashing and the other functioning normally.&lt;/p&gt;&#xA;" OwnerUserId="31" LastEditorUserId="31" LastEditDate="2013-07-01T18:03:27.633" LastActivityDate="2013-07-01T18:03:27.633" Title="Light pattern is flashing intermittently using RVIZ/OpenNI with two Kinects" Tags="&lt;ros&gt;&lt;kinect&gt;&lt;openni&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1518" PostTypeId="1" AcceptedAnswerId="1529" CreationDate="2013-07-01T16:27:51.393" Score="1" ViewCount="92" Body="&lt;p&gt;If a street is extremely crowded to an extent that the terrain is not visible from the point of view of the LIDAR (e.g. in google's self driving car), can it still manage to localize itself and continue to operate? I recall Sebastian Thrun saying that Google's car cannot navigate through snow filled roads since the onboard LIDAR cannot map the terrain beneath the snow (&lt;a href=&quot;http://www.economist.com/node/21560989&quot; rel=&quot;nofollow&quot;&gt;e.g. here&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[Edit : Based on the comments] Clarifying the context, here &quot;not visible&quot; means there is an obstacle between the LIDAR and the terrain&lt;/p&gt;&#xA;" OwnerUserId="105" LastEditorUserId="350" LastEditDate="2013-07-02T15:03:01.770" LastActivityDate="2013-07-02T16:53:43.190" Title="How do visual obstructions impact the ability to localize using LIDAR?" Tags="&lt;ugv&gt;&lt;lidar&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1519" PostTypeId="1" CreationDate="2013-07-01T17:39:34.627" Score="1" ViewCount="227" Body="&lt;p&gt;Does anyone here know PX4 software? I'm using Eclipse to program it and I want to Open a new UART door and write on this, I'm doing the following commands...&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;static int uart2=open(&quot;/dev/ttyS1&quot;, O_RDWR | O_NONBLOCK | O_NOCTTY);&#xA;write(uart2,&quot;Hi&quot;,3);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But this is not working! Anyone have any idea why?&lt;/p&gt;&#xA;" OwnerUserId="1502" LastEditorUserId="350" LastEditDate="2013-07-02T01:47:38.387" LastActivityDate="2013-07-02T01:47:38.387" Title="PX4 Communication" Tags="&lt;microcontroller&gt;&lt;communication&gt;" AnswerCount="0" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1520" PostTypeId="2" ParentId="1517" CreationDate="2013-07-01T17:40:43.393" Score="1" Body="&lt;p&gt;Apparent partial issue was a conflict with the VM running Windows (on my Linux box) attempting to grab the XnSensorServer resource. Running the VM and then the setup specified in the question produced the observed Kinect disfunctionality, whereas running the setup and then opening the VM crashed the XnSensorServer, freezing the Kinect altogether.&lt;/p&gt;&#xA;" OwnerUserId="31" LastEditorUserId="31" LastEditDate="2013-07-01T18:00:26.697" LastActivityDate="2013-07-01T18:00:26.697" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1521" PostTypeId="2" ParentId="1503" CreationDate="2013-07-01T19:15:10.237" Score="1" Body="&lt;p&gt;This is an extremely general question. What code you will use will depend on the type of &quot;robotic movement&quot; you are attempting to achieve, and what platform you are running the code on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's say you want to control a stepper motor from python running on a Raspberry Pi. Stephen Phillips has written &lt;a href=&quot;http://blog.scphillips.com/2012/12/a-python-class-to-move-the-stepper-motor/&quot; rel=&quot;nofollow&quot;&gt;a nice python class&lt;/a&gt; for this purpose. The code was for Python 2.x, but the only changes you need to make to port it to python 3 are to add parenthesis to the print statements and change the backticks to repr() because python 3 has cleaned up the print syntax. See the output of python's 2to3 command below:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;@@ -41,10 +41,10 @@&#xA;         steps = (steps % self.steps_per_rev)&#xA;         if steps &amp;gt; self.steps_per_rev / 2:&#xA;             steps -= self.steps_per_rev&#xA;-            print &quot;moving &quot; + `steps` + &quot; steps&quot;&#xA;+            print(&quot;moving &quot; + repr(steps) + &quot; steps&quot;)&#xA;             self._move_acw(-steps / 8)&#xA;         else:&#xA;-            print &quot;moving &quot; + `steps` + &quot; steps&quot;&#xA;+            print(&quot;moving &quot; + repr(steps) + &quot; steps&quot;)&#xA;             self._move_cw(steps / 8)&#xA;         self.step_angle = target_step_angle&#xA;&#xA;@@ -98,7 +98,7 @@&#xA;     GPIO.setmode(GPIO.BOARD)&#xA;     m = Motor([18,22,24,26])&#xA;     m.rpm = 5&#xA;-    print &quot;Pause in seconds: &quot; + `m._T`&#xA;+    print(&quot;Pause in seconds: &quot; + repr(m._T))&#xA;     m.move_to(90)&#xA;     sleep(1)&#xA;     m.move_to(0)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="1473" LastActivityDate="2013-07-01T19:15:10.237" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1522" PostTypeId="2" ParentId="1514" CreationDate="2013-07-01T22:49:21.473" Score="8" Body="&lt;ol&gt;&#xA;&lt;li&gt;Gearboxes are probably your best bet if you never want to go fast.&lt;/li&gt;&#xA;&lt;li&gt;You may be able to make it work better if you give it pulsed power (PWM in a way, but pulsed at a speed low enough that the motor actually gets going and then slows down each time.  See &lt;a href=&quot;http://wescottdesign.com/articles/Friction/friction.pdf&quot;&gt;Controlling Motors in the Presence of Friction and Backlash&lt;/a&gt; for details on the technique.&lt;/li&gt;&#xA;&lt;li&gt;You can almost certainly make it better if you put some sort of closed-loop speed control on the motors.  Encoders are best, but you can do amazing things using back-EMF speed sensing.  Either of these techniques require you to work with a closed-loop system which isn't trivial, and neither of them will overcome all the problems unless you use a gearbox (but, with closed-loop speed control you can have a much higher ratio of top to bottom speed while keeping things smooth).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="1411" LastActivityDate="2013-07-01T22:49:21.473" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1524" PostTypeId="1" AcceptedAnswerId="1527" CreationDate="2013-07-02T12:06:21.443" Score="9" ViewCount="5926" Body="&lt;p&gt;I'm working on building a line follower robot and want to optimize its performance. It was suggested that I use a PID algorithm. I read a lot about PID but am confused a bit regarding following:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've calculated the error_value using $k_p * proportional + ...$&#xA;But regarding the change in the motor speed I'm confused as to what to use during comparison the difference (i.e. currentposition - setpoint) or the errorvalue. That is should I use &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;if (difference &amp;gt; 0)&#xA;{ //code for changing appropriate motor's speed using error_value }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;or &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;if (error_value &amp;gt; 0)&#xA;{ //code for changing appropriate motor's speed using error_value }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Also is there any specified range for the values of the constants $k_p$, $k_i$ and $k_d$?&#xA;I'm using a &lt;a href=&quot;https://en.wikipedia.org/wiki/Differential_wheeled_robot&quot; rel=&quot;noreferrer&quot;&gt;differential wheeled robot&lt;/a&gt; for my line follower.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also I would be happy if someone suggests me any other advanced optimization algorithm for improving the line follower robot.&lt;/p&gt;&#xA;" OwnerUserId="1359" LastEditorUserId="134" LastEditDate="2013-08-20T07:39:16.417" LastActivityDate="2013-08-20T07:39:16.417" Title="Line Follower optimization" Tags="&lt;arduino&gt;&lt;pid&gt;&lt;line-following&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1525" PostTypeId="1" CreationDate="2013-07-02T13:03:24.603" Score="1" ViewCount="133" Body="&lt;p&gt;I have built a &lt;a href=&quot;http://sourceforge.net/projects/r-localization/&quot; rel=&quot;nofollow&quot;&gt;Particles Filter simulator&lt;/a&gt; and I wanted to add the following functionalities.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Limited Range Vision (Robot can see up to 50 meters)&lt;/li&gt;&#xA;&lt;li&gt;Limited Angle Vision (Robot can see within a certain angle w.r.t its current orientation.  &lt;em&gt;e.g.&lt;/em&gt; If the current orientation is 30 degree then it can see in the range from 0 to 60 degree.)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I have managed to add the Limited Range Vision functionality but unable to add Limited Angle Vision.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Method to Sense the landmarks distance within the range&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;public double[] sense(boolean addNoise) {&#xA;    double[] z = new double[World.getLandmark().getLandmarks().size()];&#xA;    for (int i = 0; i &amp;lt; z.length; i++) {&#xA;        Point lm = World.getLandmark().getLandmarks().get(i);&#xA;        double dx = x - lm.getX();&#xA;        double dy = y - lm.getY();&#xA;        double dist = Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2));&#xA;        if (addNoise) {&#xA;            dist += Util.nextGaussian(0, sense_noise);&#xA;        }&#xA;        if (isBoundedVision()) {&#xA;            // TODO Limited angle vision&#xA;            // if robot can see within 60 degree angle w.r.t its orientation&#xA;            if (dist &amp;lt;= laserRange) {&#xA;                z[i] = dist;&#xA;            }&#xA;        } else {&#xA;            z[i] = dist;&#xA;        }&#xA;    }&#xA;    return z;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Method to calculate the probability of this particle&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;@Override&#xA;public double measurement_prob(double[] measurements) {&#xA;    double prob = 1.0;&#xA;    int c = 0;&#xA;    double[] myMeasurements = sense(false);&#xA;    for (int j = 0; j &amp;lt; measurements.length; j++) {&#xA;        if (measurements[j] != 0) {&#xA;            prob *= Util.gaussian(myMeasurements[j], sense_noise, measurements[j]);&#xA;            c++;&#xA;        }&#xA;    }&#xA;    if (isBoundedVision()) {&#xA;        if (c &amp;gt; 0) {&#xA;            // increase the probability if this particle can see more landmarks&#xA;            prob = Math.pow(prob, 1.0 / c);&#xA;        } else {&#xA;            prob = 0.0;&#xA;        }&#xA;    }&#xA;    return prob;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Coordinates are relative to the robot and for distance calculation I am using the Euclidean Distance method and my Robot gets localized correctly. &lt;/p&gt;&#xA;" OwnerUserId="1573" LastEditorUserId="10041" LastEditDate="2015-10-12T09:54:54.167" LastActivityDate="2015-10-12T09:54:54.167" Title="How to implement Bounded Angle Vision in Particle Filter?" Tags="&lt;localization&gt;&lt;particle-filter&gt;&lt;visualization&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1526" PostTypeId="2" ParentId="1525" CreationDate="2013-07-02T13:47:48.950" Score="2" Body="&lt;p&gt;It looks like you're missing the angle that the robot is currently looking, e.g. &lt;code&gt;robot_angle_radians&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you know where the robot is looking, you just use the &lt;a href=&quot;http://docs.oracle.com/javase/6/docs/api/java/lang/Math.html#atan2&amp;#40;double,&amp;#32;double&amp;#41;&quot; rel=&quot;nofollow&quot;&gt;atan2 function&lt;/a&gt; (see also: &lt;a href=&quot;http://www.tutorialspoint.com/java/lang/math_atan2.htm&quot; rel=&quot;nofollow&quot;&gt;example usage&lt;/a&gt;) on each point:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;point_angle = Math.atan2(dy, dx); // in radians&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then you want to check whether the angle is &lt;a href=&quot;http://docs.oracle.com/javase/6/docs/api/java/lang/Math.html#abs&amp;#40;double&amp;#41;&quot; rel=&quot;nofollow&quot;&gt;not more than&lt;/a&gt; 30&amp;deg; off of the robot's angle:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;offset = Math.abs(robot_angle_radians - point_angle) % (2 * Math.PI); &#xA;if (Math.toRadians(30) &amp;lt; offset) // then it's out of +/- 30 degree range&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Make sure you are consistent between &lt;a href=&quot;http://nautilus.baruch.sc.edu/CSV/explain_coord_sys_diagram.pdf&quot; rel=&quot;nofollow&quot;&gt;a polar coordinate system and a compass rose coordinate system&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2013-07-02T13:47:48.950" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1527" PostTypeId="2" ParentId="1524" CreationDate="2013-07-02T13:52:05.687" Score="8" Body="&lt;p&gt;When using a PID loop to steer using line following, then your set point will always be the same. You will always want the line to be in the same position with respect to the robot, for instance in the centre of your sensor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if your line sensor outputs a value from -1 to 1 with 0 being the centre of the sensor, then you will want your set point to be zero (and sensor read back and difference will be the same). If your line sensor outputs a value of 0 to 10, then you will want your set point to be 5 (and your sensor read back and difference will be different).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since you are steering by setting the wheels to turn at different speeds, then to smoothly follow a line at a constant velocity, you will probably want to adjust the speeds for both wheels based on the error. For example, if you need to turn left to stay on the line, you will slow down the left wheel and speed up the right wheel. The more you need to turn, the more you will need to slow down the inside wheel and the more you will need to speed up the outside wheel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider the situation where you need to turn $\theta$ radians to the left to correct for error $e$ and your current speed is $S_0$:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/File:DifferentialSteering.svg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/TVXKL.png&quot; alt=&quot;Differential Steering&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So your left wheel needs to travel at $S_L = r\theta$ and your right wheel needs to travel at $S_R = (r+b)\theta$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To maintain the same overall speed $S_0$, you need $S_0 = (r+b/2)\theta$, &#xA;so the left wheel will need to travel at $S_L = S_0 - (b/2)\theta$&#xA;while the right wheel will need to travel at $S_R = S_0 + (b/2)\theta$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As your error tends towards zero, the speeds of each motor will also tend towards each other. As the error grows, the speed differentials will grow too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may even need your inside wheel to rotate backwards if your sensor is telling you that the line is curving more tightly than the distance between your wheels. These are complications which you can work through step by step as your control gets more sophisticated though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, since your error will have both positive and negative values (to represent the continuum from &lt;em&gt;off the scale left ... too far left ... on the line ... too far right ... off the scale right&lt;/em&gt; then you should never need to ask &lt;code&gt;if&lt;/code&gt; the error is positive or negative, you should just calculate new values based on the error value, since a positive value and a negative value should have opposite and symmetric effects on the motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that for line following, you may be able to get away with just the proportional gain term (i.e. leaving the other terms at zero). Implementing a Derivative term may well allow you to push up the proportional gain term higher to get a more responsive system, but an integral term is unlikely to help. The fact that if you robot goes in the wrong direction the error will get larger means that your robots physical movements will act like an integral term anyway.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The specific values of P, D and I will be determined by the responsiveness of your system. For general advice about tuning PID parameters, see &lt;a href=&quot;https://robotics.stackexchange.com/a/174/37&quot;&gt;my answer&lt;/a&gt; and others on &lt;a href=&quot;https://robotics.stackexchange.com/q/167/37&quot;&gt;What are good strategies for tuning PID loops?&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2013-07-04T10:09:02.967" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="1528" PostTypeId="2" ParentId="1524" CreationDate="2013-07-02T14:00:42.113" Score="3" Body="&lt;p&gt;You may want to check out &lt;a href=&quot;https://robotics.stackexchange.com/questions/167/what-are-good-strategies-for-tuning-pid-loops&quot;&gt;this question on how to tune PIDs&lt;/a&gt;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It sounds like you're confusing the role of &lt;code&gt;error&lt;/code&gt; in this calculation.  The PID equation takes the error measurement (actual position - desired position) and determines how much &quot;response&quot; should be commanded in the controller (e.g. how much force).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So instead of saying &lt;code&gt;if (error_value &amp;gt; 0) { }&lt;/code&gt;, you should be saying something like &lt;code&gt;response = get_PID_calculation(error_value)&lt;/code&gt;.  Depending on the construction of your specific vehicle, that response would be sent to the drive motor as the throttle amount, the steering as desired angle, or some other control input.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2013-07-02T14:00:42.113" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1529" PostTypeId="2" ParentId="1518" CreationDate="2013-07-02T16:53:43.190" Score="0" Body="&lt;p&gt;The snow problem you're referring to seems to that the car can no longer tell where the edge of the road is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even in heavy traffic, a good driver still maintains enough space from the car in front that plenty of road is visible, and the side of the road identifiable from LiDAR. This is not common practice, but I imagine autonomous cars would be programmed to do so. In that case, plenty of road is always visible for the car.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Google's car seems to have &lt;a href=&quot;http://www.youtube.com/watch?v=BrmorE5W1tM&quot; rel=&quot;nofollow&quot;&gt;no problems in heavy traffic&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="1473" LastActivityDate="2013-07-02T16:53:43.190" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1530" PostTypeId="1" CreationDate="2013-07-02T21:37:23.510" Score="0" ViewCount="888" Body="&lt;p&gt;I was considering using a Raspberry Pi controlling a USB Relay to dim 12V LED lights, but I'm having trouble finding a solution that isn't a simple ON/OFF.  What type of device would I need for dimming?&lt;/p&gt;&#xA;" OwnerUserId="1432" LastActivityDate="2013-07-03T18:09:21.187" Title="How do you dim 12 volt LEDs?" Tags="&lt;raspberry-pi&gt;" AnswerCount="1" CommentCount="0" ClosedDate="2013-07-03T12:42:06.150" ContentLicense="CC BY-SA 3.0" />
  <row Id="1531" PostTypeId="2" ParentId="1530" CreationDate="2013-07-03T02:25:56.093" Score="3" Body="&lt;p&gt;You probably want a PWM (pulse width modulation) solution. Essentially this means flashing the led on and off faster than you can see. To make it brighter, you increase the amount of on time versus off time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could use an external PWM LED driver, or possibly you can produce &lt;a href=&quot;https://sites.google.com/site/semilleroadt/raspberry-pi-tutorials/gpio&quot; rel=&quot;nofollow&quot;&gt;PWM from the GPIO ports&lt;/a&gt; on the Pi and step it up using a transistor and / or relay.&lt;/p&gt;&#xA;" OwnerUserId="1473" LastEditorUserId="1473" LastEditDate="2013-07-03T18:09:21.187" LastActivityDate="2013-07-03T18:09:21.187" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1533" PostTypeId="2" ParentId="167" CreationDate="2013-07-03T21:52:50.190" Score="8" Body="&lt;p&gt;Embedded.com has moved my article yet again, but here is where it is now.  This shows you both how to write a PID loop (figuring out how to do it in something other than floating point is left as an exercise to the reader) and how to tune it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.embedded.com/design/prototyping-and-development/4211211/PID-without-a-PhD&quot;&gt;PID Without a PhD&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;em&gt;best way&lt;/em&gt; depends a lot on your abilities.  The way to get the &lt;em&gt;best tuning&lt;/em&gt;, assuming you're an experienced control system hand, is usally to measure the response of the plant (&quot;plant&quot; == &quot;the thing you're controlling&quot;), then depending on how you did the measurements extract a model of the plant and design to that, or just design directly to the measurements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For certain difficult plants you'll find that you can't ever make satisfactory measurements, in which case you have to go by models alone.  Those are rare, but satisfying when you get them working.&lt;/p&gt;&#xA;" OwnerUserId="1411" LastActivityDate="2013-07-03T21:52:50.190" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1534" PostTypeId="2" ParentId="1492" CreationDate="2013-07-03T22:55:51.753" Score="0" Body="&lt;p&gt;Both your computer and your servos need supplies at a lower voltage than your battery supplies.  So you need some sort of voltage regulation between battery and &quot;the rest&quot;.  Just make sure that the servo side is current limited.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Better, make sure that the one to the servos is current limited, and that it indicates to the processor that it's in current limit.  That way if it goes into current limit for more than a moment you can shut the whole thing off.&lt;/p&gt;&#xA;" OwnerUserId="1411" LastActivityDate="2013-07-03T22:55:51.753" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1536" PostTypeId="2" ParentId="1229" CreationDate="2013-07-04T16:41:59.377" Score="2" Body="&lt;p&gt;When I'm processing quadrature encoder input in an &lt;a href=&quot;http://en.wikipedia.org/wiki/Interrupt_handler&quot; rel=&quot;nofollow&quot;&gt;ISR&lt;/a&gt;, I prefer to have a simple ISR running on a timer that's guaranteed to run fast enough to catch every state (not state change) of the encoder.  Interrupting on every pin transition invites a situation where the processor gets bogged down if a pin starts bouncing.  Interrupting at a fixed rate may use up processor resources all the time, but it always uses the same amount of resources, so it doesn't catch you by surprise when you least want it to happen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For your 48 transitions/rotation, 400RPM motor, that works out to 320 transitions per second: I would set my ISR to interrupt at least twice that fast.  It should do nothing but check the current state of the two pins against the previous one, and then increment or decrement the wheel's counter as appropriate based on what it sees.  At 640Hz, such an ISR should load the processor very lightly, even if you're doing updates for multiple wheels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've built quite a few successful control systems that use this method, so it can't be all bad.&lt;/p&gt;&#xA;" OwnerUserId="1411" LastEditorUserId="1411" LastEditDate="2013-07-08T05:03:09.690" LastActivityDate="2013-07-08T05:03:09.690" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1537" PostTypeId="2" ParentId="1514" CreationDate="2013-07-05T00:26:38.530" Score="5" Body="&lt;p&gt;When you PWM the voltage to the motor you are effectively controlling the current to the motor which is related to torque (acceleration).  The &quot;jamming up&quot; that you notice is basically the inability of the motor to overcome friction.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Think about the PWM as the gas pedal in your car, to get to a constant speed you may push all the way down, gradually back off as you reach your target speed and then modulate it to maintain that speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A DC motor driven at a fixed voltage loses torque as it goes faster and faster.  That's why it doesn't speed up to infinity.  Gearing it down effectively limits the top speed you'll see at the output.  It gives you more torque at the output but you're trading off speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As Tim notes what you need is a closed speed control loop running over that such that you set a speed set-point and the loop, very quickly, ramps the PWM up and down to maintain the speed.  To do that you need some way of measuring the speed.  Once you have that you may be able to get by with a relatively simple PI controller.&lt;/p&gt;&#xA;" OwnerUserId="1584" LastEditorUserId="1584" LastEditDate="2013-07-05T20:11:19.647" LastActivityDate="2013-07-05T20:11:19.647" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1538" PostTypeId="1" AcceptedAnswerId="1543" CreationDate="2013-07-05T03:47:23.300" Score="13" ViewCount="43024" Body="&lt;p&gt;I am interested in using this miniature motor &lt;a href=&quot;http://www.newscaletech.com/technology/squiggle-motors.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;Squiggle Micro Motor&lt;/a&gt; to create very tiny &lt;strong&gt;horizontal&lt;/strong&gt; movements. However, due to very limited space, I can only place it &lt;strong&gt;vertically&lt;/strong&gt; within my project.&lt;/p&gt;&#xA;&lt;p&gt;Assuming this motor is placed as follows, how can one adapt it to simultaneous movement at a right angle? (Ideally with the X-axis movement matched to the Y-axis movement as well as possible.)&#xA;&lt;img src=&quot;https://i.stack.imgur.com/sdyln.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;&#xA;" OwnerUserId="1588" LastEditorUserId="19515" LastEditDate="2020-07-27T18:28:14.337" LastActivityDate="2020-07-27T18:28:14.337" Title="How to convert vertical motion to horizontal?" Tags="&lt;motor&gt;&lt;motion&gt;&lt;movement&gt;&lt;driver&gt;&lt;linear-bearing&gt;" AnswerCount="5" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="1541" PostTypeId="2" ParentId="167" CreationDate="2013-07-05T19:52:50.117" Score="4" Body="&lt;p&gt;I'll try to expand a little from my experience for those who may be interested.  I think the problem is we have a lot of control theory that is somewhat inaccessible (and sometimes not useful) and then we have rules of thumb that make assumptions about systems that are often inaccurate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Stability&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's talk first about why control loops become unstable.  For this discussion I'll assume a linear system.  Informally this means that if your control signal is a sine wave at a given frequency then your observed output is at the same frequency and if you change the amplitude of your control system your output responds at the same ratio.  This assumption is a good approximation for many real world systems and lets us look at different frequencies in isolation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you look at the control path you have a set-point, your PID controller, your system (aka &quot;Plant&quot;), and then your sensor.  Imagine a fixed set-point and a sine wave from your sensor (this is equal to a real world disturbance at the sensor, fed back).  In an unstable system your feedback causes the control loop to amplify the error rather than reducing it such that as time increases your amplitude increases.  The reason this happens is due do a delay, or for this particular frequency a phase shift between the input and output.  For a given frequency we can look at that open loop (i.e. no feedback) shift and amplitude of the output and when we draw all those on a graph we get something like a &lt;a href=&quot;http://en.wikipedia.org/wiki/Bode_plot&quot; rel=&quot;nofollow&quot;&gt;Bode Plot&lt;/a&gt;.  If we have a situation in this open loop graph where the error keeps getting amplified then we have an unstable system.  If the delay is less than 1/2 the wavelength or the gain is less than x1 the system will be &lt;a href=&quot;http://en.wikipedia.org/wiki/Barkhausen_stability_criterion&quot; rel=&quot;nofollow&quot;&gt;stable&lt;/a&gt;.  In practice we want some margin from that point (gain margin and phase margin) which is why you'll see this &quot;backing off&quot; in many of the manual/heuristic methods.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main problem with those manual methods is that you're flying blind and you're pretty much guaranteed to get a poor control system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also keep in mind that the meaning P, I and D is related to what your sensor is measuring and what control you're applying.  A common mistake in home built controllers is for people to think they're applying P when they're actually not.  Motor controllers often have a position loop, running over a velocity loop running over a torque loop. (A &lt;a href=&quot;http://www.controldesign.com/Media/0704/article_061_fig2-2.jpg&quot; rel=&quot;nofollow&quot;&gt;cascade&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;OK but how does this help us?&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first point I'd like to make is that if you're building your own PID controller you should also build a way of measuring the open loop response.  Do a frequency sweep at the input to your controller and measure the sensor's output with the feedback disconnected.  Then you can draw the open loop Bode plot and &lt;em&gt;see&lt;/em&gt; why your system is stable and be able to trade off the various controls.  It's also useful to measure the closed loop response and you can do that with any system by doing a frequency sweep of your set-point while the loop is closed.  Both these aren't that hard and don't require a lot of theoretical knowledge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're simply tweaking controls without any understanding of what's going on under the hood you won't be able to optimize your system.  Building some intuition about these systems isn't that hard.  E.g. the proportional gain has no effect on phase but simply increases the open loop gain across all frequencies.  So what you're doing when you're increasing the proportional gain in all those manual tuning methods is finding the frequency where the phase goes to -180.  See &lt;a href=&quot;http://en.wikibooks.org/wiki/Control_Systems/Bode_Plots#Examples&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt; to get some more idea about the impact of the various controls on your frequency response.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Quite often getting best closed loop performance involves tweaking the system and not just the controller gains.  What you want is to make the system as &quot;stiff&quot; as possible.  That will let you ramp up the control parameters and get the best open and closed loop bandwidth.  In my experience in motor control applications the proportional gain is the one that should be doing most of the &quot;work&quot; and the integrator the &quot;rest&quot;.  I don't think you need a D term at all.  Having a low pass filter and a notch filter helps a lot in situations where you may have some mechanical resonance but setting them without a Bode Plot is very difficult (the oscillation frequency you observe under closed loop may be different than the open loop one).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If safety is a concern (very powerful motors or a system that could be destroyed by the motor going out of control) you need to put in some limits before you start tuning (e.g. current limit, maximum position error) to protect the system.  Then you need to get some sort of feel for the range of the parameters.  If your feedback has 40 counts per rotation or 4000 counts per rotation your parameters will be a factor of 100 for a given system.  My approach would be to first find a range where you have some poor controllability and then ramp up from there starting with P and then I (though again you're flying blind).  Backing off creates this stability margin.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Beyond closed loop&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Closed loop attempts to take out the error from the system.  It's always going to have a somewhat limited performance.  What you want to do is minimize the error your closed loop controller sees and one way to do that is through a technique called &lt;a href=&quot;http://en.wikipedia.org/wiki/Feed_forward_%28control%29&quot; rel=&quot;nofollow&quot;&gt;feed forward&lt;/a&gt;.  In feed-forward you go around the controller and drive a command directly to the system.  An example of that would be acceleration feed-forward.  If you know you're motor's torque constant and you know the load you can pretty much tell how much current you need to drive to get a certain acceleration of the load.  You simply take the command input acceleration, multiply it by a constant and add that to the controller's drive command.  You're basically doing what it would take to drive the system if there was no controller and the closer you can get the less error your loop has to take out and the better your system will perform.  It makes a huge difference in practice.&lt;/p&gt;&#xA;" OwnerUserId="1584" LastActivityDate="2013-07-05T19:52:50.117" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1542" PostTypeId="2" ParentId="143" CreationDate="2013-07-05T21:12:53.183" Score="3" Body="&lt;p&gt;When the string isn't under tension you have a non-linear system (i.e. you're pushing on a rope) which may also make this harder to control.  The stiffness of your string is going to limit your bandwidth. (The string acts as a low-pass filter, at least when it's under tension).  I've actually worked a little on a similar setup and it was really hard to control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since you're sampling the &lt;a href=&quot;http://en.wikipedia.org/wiki/Nyquist%E2%80%93Shannon_sampling_theorem&quot; rel=&quot;nofollow&quot;&gt;sampling theorem&lt;/a&gt; absolutely applies and you must sample at least x2 the highest frequency in your input (either by increasing the sample rate or filtering the input before sampling or both) otherwise you'll get aliasing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As Kyle points out the other factor is your desired control bandwidth.  I concur with the rule of thumb that the loop should run at least ~x10 that frequency.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both these conditions need to be met.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's a pretty good discussion of this in &lt;a href=&quot;http://dissertations.ub.rug.nl/FILES/faculties/science/1995/m.d.van.der.laan/c6.pdf&quot; rel=&quot;nofollow&quot;&gt;Chapter 6: Sampling in closed loop control systems&lt;/a&gt; of Marten Derk van der Laan's (1995) dissertation &lt;a href=&quot;http://irs.ub.rug.nl/ppn/138454876&quot; rel=&quot;nofollow&quot;&gt;Signal sampling techniques for data acquisition in process control&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Selection of sampling rates is an important issue. For economical&#xA;  reasons, sampling rates are kept as low as possible: A lower rate&#xA;  means that there is more time available for control algorithm&#xA;  execution, which can thereby be carried out on slower computers.&#xA;  Digitizing well behaved analog control systems can heavily affect&#xA;  system response. If sampling frequencies is too low, the systems may&#xA;  even become unstable. According to the Nyquist criterion, the sampling&#xA;  frequency should at least be twice as high as the bandwidth of the&#xA;  error signal. This bandwidth is bounded by the system bandwidth, hence&#xA;  ws  2wB. However, in order to guarantee satisfactory response, a&#xA;  factor of 10 to 20 may be required&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="1584" LastEditorUserId="37" LastEditDate="2013-07-06T00:49:22.970" LastActivityDate="2013-07-06T00:49:22.970" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1543" PostTypeId="2" ParentId="1538" CreationDate="2013-07-05T21:33:05.743" Score="7" Body="&lt;p&gt;If this is true linear motion (non-rotational) then you will need some sort of a pivoting linkage in between the two units to transfer one motion to the other. Something like this would probably work:&#xA;&lt;img src=&quot;https://i.stack.imgur.com/rGdKH.jpg&quot; alt=&quot;Pivoting Linkage&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As the lower link moves vertically, it rotates the red gear which in turn pushes the second link horizontally.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, given that your image shows more of a screw type link, I feel like the lower link will be rotating (correct me if I'm wrong here). In that case, then a different approach would need to be taken - at least, a rotational ball joint would need to be used to attached the rotating unit to any linkage.&lt;/p&gt;&#xA;" OwnerUserId="1197" LastActivityDate="2013-07-05T21:33:05.743" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1544" PostTypeId="1" AcceptedAnswerId="1546" CreationDate="2013-07-06T13:25:20.640" Score="0" ViewCount="7316" Body="&lt;p&gt;I have no problem in reading circuit schemes, connecting wires, resistors etc. (basing on for example instructables.com), but I've only tried to learn Java (a while ago) and it's difficult to me to find out what's going on with all this C-code-stuff.&#xA;Are there any tutorials that are focused on the programming part?&#xA;thanks&lt;/p&gt;&#xA;" OwnerUserId="1593" LastActivityDate="2013-07-06T17:12:16.290" Title="Arduino C/C++ progamming tutorials" Tags="&lt;arduino&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="2" ClosedDate="2013-07-09T11:00:37.730" ContentLicense="CC BY-SA 3.0" />
  <row Id="1545" PostTypeId="2" ParentId="1544" CreationDate="2013-07-06T16:09:31.183" Score="1" Body="&lt;p&gt;Yes, under the &lt;a href=&quot;http://arduino.cc/en/Tutorial/HomePage&quot; rel=&quot;nofollow&quot;&gt;learning&lt;/a&gt; section of the &lt;a href=&quot;http://arduino.cc&quot; rel=&quot;nofollow&quot;&gt;Arduino website&lt;/a&gt; there are a number of coding tutorials. They begin with explaining the &lt;a href=&quot;http://arduino.cc/en/Tutorial/BareMinimum&quot; rel=&quot;nofollow&quot;&gt;minimum code necessary&lt;/a&gt; to how to use many of the peripherals. These tutorials explain fairly well what each line of the programs do.&lt;/p&gt;&#xA;" OwnerUserId="177" LastActivityDate="2013-07-06T16:09:31.183" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1546" PostTypeId="2" ParentId="1544" CreationDate="2013-07-06T17:12:16.290" Score="3" Body="&lt;pre&gt;&lt;code&gt; A great way to learn C/C++ for arduino is by going to the website: ardx.org/CIRC01&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This website is completely and gives great mini projects that involve electronics and then gives an example code and a great explanation of how the code works. This site consists of 11 projects and explains the basics of C/C++ for arduino, it also teaches you how to read schematics and data sheets. After you are done with project #1 change the CIRC01 at the end of url to CIRC02, and each time you complete a project continue to go to the next one by changing the # on the end of the CIRC to a higher # until you get to 11. By the time you get to project #11 you should have a good understanding of programming for arduino and a better understanding of electronics as well. Another way that I learned C++ is by reading the book &quot;C++ for Dummies by Stephen R. Davis&quot;. This book teaches C++ in a simple yet affective fashion, however it is quite tedious to completely read this book, if it were me I would start by using the projects on ardx.org and then once I have finished all the projects and if I wanted even more knowledge on programming c/C++ then read the book. Good luck!&lt;/p&gt;&#xA;" OwnerUserId="1596" LastActivityDate="2013-07-06T17:12:16.290" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1547" PostTypeId="1" CreationDate="2013-07-06T20:56:49.207" Score="4" ViewCount="272" Body="&lt;p&gt;Many robot applications (actually - the most practical and appealing ones) include the robot's reaction to (and impact on) the evironment, e.g. due to stochastic nature of the environment (e.g. when robot should handle non-rigid objects like clothes) or due to the variability of environment (e.g. harvesting robots should be prepared to pick fruits of different sizes and shapes).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The question is - is there a robotics simulator that can simulate not only robot but also the environment as well? E.g. that can simulate the response of robots action on cloth folding or fruit picking and so on. I guess that such simulator is really non-trivial but maybe there is some ongoing project for it?&lt;/p&gt;&#xA;" OwnerUserId="809" LastEditorUserId="350" LastEditDate="2013-07-07T17:55:22.947" LastActivityDate="2019-02-22T22:36:37.357" Title="How can I simulate a changing environment with non-rigid objects?" Tags="&lt;simulator&gt;&lt;industrial-robot&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1548" PostTypeId="2" ParentId="1538" CreationDate="2013-07-07T01:07:38.390" Score="4" Body="&lt;p&gt;The mechanism suggested in the previous answer is a form of&#xA;&lt;em&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Four-bar_linkage&quot; rel=&quot;nofollow&quot;&gt;four-bar linkage&lt;/a&gt;&lt;/em&gt;.  A &lt;em&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Bell_crank&quot; rel=&quot;nofollow&quot;&gt;bell crank&lt;/a&gt;&lt;/em&gt; is a slightly simpler form of basically the same thing.  You could push on one side of a &lt;a href=&quot;https://www.google.com/search?hl=en&amp;amp;site=imghp&amp;amp;tbm=isch&amp;amp;source=hp&amp;amp;biw=1052&amp;amp;bih=570&amp;amp;q=bell+crank&amp;amp;oq=bell+crank&amp;amp;gs_l=img.3..0l5j0i10j0l4.1311.1311.0.1675.1.1.0.0.0.0.170.170.0j1.1.0....0...1ac..19.img.32OY_EL0zEI&quot; rel=&quot;nofollow&quot;&gt;bell crank&lt;/a&gt; with the end of the motor shaft, and use a spring return for the other direction if it is difficult to attach to the shaft.  (The shaft apparently rotates, but the &lt;a href=&quot;http://www.newscaletech.com/technology/squiggle-motors.php&quot; rel=&quot;nofollow&quot;&gt;Squiggle motors&lt;/a&gt; site doesn't say if it does or doesn't, and the pictures, videos, and technical drawing PDF files are not clear on this point.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also consider using a flexible-wire push-pull control cable, or a push cable with  spring return; or push a wedge up to produce &lt;a href=&quot;http://en.wikipedia.org/wiki/Cam&quot; rel=&quot;nofollow&quot;&gt;cam&lt;/a&gt; action.&lt;/p&gt;&#xA;" OwnerUserId="478" LastActivityDate="2013-07-07T01:07:38.390" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1550" PostTypeId="2" ParentId="1547" CreationDate="2013-07-07T21:30:55.837" Score="1" Body="&lt;p&gt;Gazebo, the most popular open-source robotics simulator at the moment, is adding support for the Bullet physics library and that should eventually add simulation of contact with deformable objects. Check out this question: &lt;a href=&quot;http://answers.ros.org/question/57900/deformation-on-gazebo-and-ros-possible/&quot; rel=&quot;nofollow&quot;&gt;http://answers.ros.org/question/57900/deformation-on-gazebo-and-ros-possible/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, &lt;a href=&quot;http://opengrasp.sourceforge.net&quot; rel=&quot;nofollow&quot;&gt;OpenGRASP&lt;/a&gt;, built on top of &lt;a href=&quot;http://openrave.org&quot; rel=&quot;nofollow&quot;&gt;OpenRAVE&lt;/a&gt;, includes soft contact simulation.&lt;/p&gt;&#xA;" OwnerUserId="1473" LastEditorUserId="1473" LastEditDate="2013-07-07T21:42:24.240" LastActivityDate="2013-07-07T21:42:24.240" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1552" PostTypeId="1" AcceptedAnswerId="1553" CreationDate="2013-07-08T00:46:21.340" Score="2" ViewCount="2506" Body="&lt;p&gt;Hy, I just found useful to post my idea here. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've seen videos about automated quadcopters: &lt;a href=&quot;http://www.ted.com/talks/raffaello_d_andrea_the_astounding_athletic_power_of_quadcopters.html&quot; rel=&quot;nofollow&quot;&gt;http://www.ted.com/talks/raffaello_d_andrea_the_astounding_athletic_power_of_quadcopters.html&lt;/a&gt; and &lt;a href=&quot;http://www.ted.com/talks/vijay_kumar_robots_that_fly_and_cooperate.html&quot; rel=&quot;nofollow&quot;&gt;http://www.ted.com/talks/vijay_kumar_robots_that_fly_and_cooperate.html&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I surfed pages from the companies presenting this research and other information on the internet, but I haven't found why they use quadcopters specifically. &#xA;I understand, how accelerating, rotating and rolling works in those quadcopters - it's simple, but they claim that quadcopters have minimum number of working parts to fulfill their needs, which I don't agree and I think that tricopters are better in this (duocopters can't rotate horizontally, but tricopters can by inclining and then powering the remaining left or right propeller). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I rode forums, calculated and draw drafts of both tri and quad and found, that tri is much more efficient just in everything than quad with same props and battery when taken in account that best properties has the smallest copter with the largest props so: &#xA;3:4 moving parts (no vectored yaw in tri), 9.5:16 size, building Y instead of X construction take far less material 1.5:2.82, lesser maximum power input 3:4, better power efficiency makes longer flight time and tricopters have also improved agility over quadcopters. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only disadvantage I see is a bit complicated horizontal rotating in tricopter without vectored yaw, which can be problem in man controlled machines but easily solved by simple algorithms in automated machines -&gt; it's not a real disadvantage, just a small work to be done. I was thinking about doing that in my bachelor thesis, but for now I am looking for your opinions, thanks!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: Maybe the torque is the problem, because on tricopters you can can have all 3 props in 1 direction or 2 in 1 direction and 1 in the opposite and it's symmetrical in neither way, but I'm not sure if this is the main problem...&lt;/p&gt;&#xA;" OwnerUserId="1602" LastEditorUserId="1602" LastEditDate="2013-07-08T03:22:54.580" LastActivityDate="2013-07-08T04:43:04.390" Title="Use of automated tricopters instead of quadcopters?" Tags="&lt;quadcopter&gt;&lt;multi-rotor&gt;" AnswerCount="1" CommentCount="4" ClosedDate="2013-07-09T10:50:46.017" ContentLicense="CC BY-SA 3.0" />
  <row Id="1553" PostTypeId="2" ParentId="1552" CreationDate="2013-07-08T04:43:04.390" Score="4" Body="&lt;p&gt;If you want to maximise efficiency, you go with two rotors: a main rotor, and a tail rotor. I.e. a traditional helicopter. With the common CCPM setup (Cyclic Collective Pitch Mixing), you have three servos controlling the main rotor. Together they can tilt it any direction and control the pitch on the blades. As you can imagine, this is mechanically complicated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The advantage of a quadcopter is that it's very simple; you have no servos. Adjacent arms are counter-rotating to control yaw.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Tricopters have a yaw imbalance that is corrected by dynamically tilting one of the motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, with a tricopter you lose the &quot;no servo&quot; advantage that made people switch from traditional 2-rotor helis to quads.&lt;/p&gt;&#xA;" OwnerUserId="1473" LastActivityDate="2013-07-08T04:43:04.390" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1554" PostTypeId="1" AcceptedAnswerId="1559" CreationDate="2013-07-08T06:46:38.617" Score="7" ViewCount="8310" Body="&lt;p&gt;If this has already been answered, by all means please point me to it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am in the process of building a quadcopter which I eventually plan to run autonomously by allowing it to track an object and take a video feed of it moving.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;GPS is one of the options I've considered, basically:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;GPS antena on moving object (person, car, bike, surfer)&lt;/li&gt;&#xA;&lt;li&gt;GPS antena on quadcopter&lt;/li&gt;&#xA;&lt;li&gt;Radio to transmit coordinates from moving object to quad copter&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Some of the challenges I can foresee are&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Line of sight for camera. How does the camera know exactly where to point?&lt;/li&gt;&#xA;&lt;li&gt;Angle, how can I pre-program the quad to always record, say... 10m to the right of the moving object, or even better, program a set of angles to record from whilst keeping up with the object&lt;/li&gt;&#xA;&lt;li&gt;GPS accuracy, what happens if the GPS lock is weak?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;What are some of my other options? I saw this &lt;a href=&quot;http://www.youtube.com/watch?v=w2itwFJCgFQ&quot;&gt;TED Talk&lt;/a&gt; where the quads are following a ball shaped sensor? I believe it uses Kinect cameras and lots of them which is not really an option for this challenge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I'm open to hearing some ideas before I start research and development of these features.&lt;/p&gt;&#xA;" OwnerUserId="825" LastActivityDate="2014-07-02T00:45:04.593" Title="Track a moving object" Tags="&lt;arduino&gt;&lt;quadcopter&gt;&lt;gps&gt;" AnswerCount="5" CommentCount="0" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1558" PostTypeId="2" ParentId="1554" CreationDate="2013-07-08T16:12:51.137" Score="1" Body="&lt;p&gt;Research the accuracy of your proposed GPS receivers.  You may be disappointed.  You can augment GPS accuracy by fusing the GPS receiver output with data from an inertial sensor, but as far as I know you can't get a hobbyist-price system where that's already done, and the problem isn't at all trivial to solve.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For pointing, consider a compass on your quad copter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's going to be a pretty rough problem to solve, particularly if you want the quad copter to be small and not tied to a ground station (there's lots you could do if you had video processing capabilities, and the time to get them working, but that's not something that'll readily fit on a small copter).&lt;/p&gt;&#xA;" OwnerUserId="1411" LastActivityDate="2013-07-08T16:12:51.137" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1559" PostTypeId="2" ParentId="1554" CreationDate="2013-07-08T16:13:01.717" Score="5" Body="&lt;p&gt;A &lt;a href=&quot;http://www.vicon.com/&quot; rel=&quot;nofollow&quot;&gt;Vicon&lt;/a&gt; &lt;a href=&quot;https://en.wikipedia.org/wiki/Motion_capture&quot; rel=&quot;nofollow&quot;&gt;motion capture system&lt;/a&gt; system is used in the TED Talk that you referenced. It is similar to a Kinect in that gives the 3D coordinates of any object being tracked within its field of view. Like the Kinect it uses IR, but uses IR reflective balls attached to the quadrotor and the presenters pointer to identify and track objects. Not to mention it is a considerably more expensive system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Systems like Vicon and the Kinect do not work outdoors because they use IR and the sun blinds them. The GPS solution you propose is a common approach to this problem for outdoor venues. Another approach might be to use &lt;a href=&quot;http://quuppa.com/&quot; rel=&quot;nofollow&quot;&gt;Quuppa&lt;/a&gt;, an RF based motion capture system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regardless of which tracking method you use, once you know the position of the robot and the target the problem of calculating the direction to the target, or ahead of it, is a basic geometric problem. Subtracting the robot position from the target position will give you the direction to point the camera. To track a few feet ahead of the target you would first add vector to the target position representing the direction of travel and lead distance (10m in your example).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you don't actually need to know the location of the robot, only its relative position to the target, then you could use computer vision techniques to track the target and move with it. Of course you will need to avoid obstacles in the process. Also the obstacles themselves could occlude your view in which case you would need some way to predict the targets movement. This could be particularly difficult to come up with if your tracking humans outdoors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reality is that the problem you are addressing is a highly active area of research. I know of several research groups, both in academia and industry, that are trying to address this problem. I have only scratched the surface here.&lt;/p&gt;&#xA;" OwnerUserId="177" LastEditorUserId="2447" LastEditDate="2014-01-07T20:02:21.813" LastActivityDate="2014-01-07T20:02:21.813" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1560" PostTypeId="2" ParentId="1554" CreationDate="2013-07-08T19:21:05.057" Score="1" Body="&lt;p&gt;Your proposed GPS solution is the best option by a significant margin, as long as you are in an environment where GPS is available (aka you are always outdoors).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Vision-based solutions might seem tempting, but they are really not appropriate in this situation.  Not only are you limited in terms of camera quality and processing power, but object tracking in arbitrary locations outdoors is a horrendously difficult problem, especially once you start have partial/complete occlusions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You also have a very nice advantage because the vast majority of GPS errors will affect both receivers simultaneously. Their &quot;global&quot; position might be off by dozens of meters, but their relative locations are likely to be much, much closer. (This is essentially &lt;a href=&quot;http://en.wikipedia.org/wiki/Differential_GPS&quot; rel=&quot;nofollow&quot;&gt;DGPS&lt;/a&gt;.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As soon as you know the location of your quadrotor relative to the location of the target the problem reduces down to high-school trig or basic linear algebra. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that as soon as you start talking about obstacle avoidance, or robustness when sensors drop out things become genuinely complicated again.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Frankly, a reliable solution to this problem that does not involve placing a beacon on the target would be at the minimum worthy of a PhD thesis, and probably worth a lot more.&lt;/p&gt;&#xA;" OwnerUserId="65" LastEditorUserId="1177" LastEditDate="2013-12-31T16:58:12.753" LastActivityDate="2013-12-31T16:58:12.753" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1561" PostTypeId="2" ParentId="1554" CreationDate="2013-07-08T19:33:38.937" Score="1" Body="&lt;p&gt;In this case, your absolute-positioning technology is a red herring.  If you are trying to track an object, all that matters is your relative position.  We did such vision-based navigation (relative to an underwater structure) with an underwater vehicle -- unable to receive GPS signals while submerged.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming that you've established the ability to locate an object in a video frame (and deduce your range and bearing relative to it), all that remains is to calculate your desired position and feed that into your X/Y PID control.  The only difficult part is getting the object into the frame initially.  (Presumably, your coarse GPS control will get you in the right ballpark.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can think of 3 fairly simple ways that you might get your range and bearing from an input video stream.  The best way would be to have native 3D support in the camera (such as in a Kinect).  Failing that, if you know your target's size (and how to detect it in the frame) then you should be able to calculate the range based on how many pixels it occupies.  Worst case, just use an &lt;a href=&quot;http://www.aforgenet.com/articles/glyph_recognition/&quot; rel=&quot;nofollow&quot;&gt;augmented reality glyph&lt;/a&gt; on your target -- they are fairly easy for computer vision to detect.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2013-07-08T19:33:38.937" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1562" PostTypeId="1" AcceptedAnswerId="1563" CreationDate="2013-07-09T11:15:30.823" Score="5" ViewCount="540" Body="&lt;p&gt;&lt;a href=&quot;https://robotics.stackexchange.com/a/549/37&quot;&gt;An answer&lt;/a&gt; to the question &lt;a href=&quot;https://robotics.stackexchange.com/q/543/37&quot;&gt;Why are quadcopters more common in robotics than other configurations?&lt;/a&gt;  said:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;You need 4 degrees of freedom to control yaw, pitch, roll and thrust.&lt;/p&gt;&#xA;&lt;p&gt;Four props is therefore the minimum number of actuators required. Tricoptors require a servo to tilt one or more rotors which is more mechanically complicated.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;In a comment, I asked:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;How do you get pure yaw motion with a quadcoptor and if that's possible why won't this work with a tricoptor? I don't understand how can you get yaw motion with any system where all rotors are in a plane without first tilting and moving. I would have thought that the main difference between quadcopters and tricoptors would be the kinematic calculations would be more complex.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://robotics.stackexchange.com/a/1453/37&quot;&gt;Another answer&lt;/a&gt; explained:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;you get pure yaw in the following way:&lt;/p&gt;&#xA;&lt;p&gt;North and South motors rotating the same speed but collectively at a higher (or lower) speed than East and West Motors which are also at the same speed.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This explains why it works with a quadcopter, but doesn't explain why it won't work with a tricopter.&lt;/p&gt;&#xA;&lt;p&gt;Is it simply the fact that the asymmetry means that you can't imbalance the &lt;a href=&quot;http://en.wikipedia.org/wiki/Torque_effect&quot; rel=&quot;nofollow noreferrer&quot;&gt;torque effects&lt;/a&gt; to provide yaw movement while still keeping the thrusts balanced to keep pitch and roll constant?&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2019-01-05T20:24:34.230" Title="If you can create pure yaw motion with a quadcoptor then why won't this work with a tricoptor?" Tags="&lt;design&gt;&lt;quadcopter&gt;&lt;uav&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1563" PostTypeId="2" ParentId="1562" CreationDate="2013-07-09T12:20:25.863" Score="9" Body="&lt;p&gt;Let's look at how a quadrotor flies, then apply that to a trirotor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's assume that we want to remain in a stationary hover position. To do that, you need to balance all the forces: thrust from the propellers vs. gravity, and the torques of each motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each motor produces both thrust and torque according to the equations:&#xA;$$&#xA;T = K_T\rho n^2 D^4&#xA;$$&#xA;$$&#xA;Q = K_Q\rho n^2 D^5&#xA;$$&#xA;Where $T$ is thrust, $Q$ is torque, $K_T$ and $K_Q$ are system dependent constants, $\rho$ is the air density, $n$ is rotor speed, and $D$ is rotor diameter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you increase thrust then you increase torque, and vice versa. A quadrotor remains stationary by balancing all the forces. This is possible because the quadrotor is symmetrical: two motors spin clockwise, and two motors spin anti clockwise. If all the motors rotate at the same speed then the torques balance, and the thrust balances. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only question then is what speed? The four rotors need to spin fast enough to collectively generate enough lift to remain in a stationary hover.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What about a trirotor?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Intuitively, the easy base case is when the arms holding the motors are all the same length (such that you can ignore the effects of the motor's displacement from the center of mass). In this case you must set the force of each motor to be equal (to hover without falling) then the torques will be unbalanced (2 in one direction, 1 in the other). The result is a spinning trirotor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The slightly more difficult case is when the rotor arms are not the same length. To solve that, let's solve the general case. The equation for torque is:&#xA;$$&#xA;\tau = rFsin(\theta)&#xA;$$&#xA;$sin(\theta)$ is 1 (at a right angle), so we can ignore it and rearrange our torque equation as follows:&#xA;$$&#xA;F = \frac{\tau}{r}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's make a trirotor and label it as follows:&#xA;&lt;img src=&quot;https://i.stack.imgur.com/bfK3P.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, we can balance all the torques:&#xA;$$&#xA;\frac{\tau_A}{r_A} + \frac{\tau_B}{r_B} + \frac{\tau_C}{r_C} = 0&#xA;$$&#xA;Substitute in the motor equation for torque from above:&#xA;$$&#xA;\frac{ K_Q\rho n_A^2 D^5}{r_A} + \frac{K_Q\rho n_B^2 D^5}{r_B} + \frac{K_Q\rho n_C^2 D^5}{r_C} = 0&#xA;$$&#xA;And get rid of the common constants:&#xA;$$&#xA;\frac{n_A^2}{r_A} + \frac{n_B^2}{r_B} + \frac{n_C^2}{r_C} = 0&#xA;$$&#xA;To solve this equation, we need to make a system of equations with the thrust for each motor:&#xA;$$&#xA;T_A + T_B + T_C = mg&#xA;$$&#xA;$$&#xA;K_T\rho n_A^2 D^4 + K_T\rho n_B^2 D^4 + K_T\rho n_C^2 D^4 = mg&#xA;$$&#xA;$$&#xA;n_A^2 + n_B^2 + n_C^2  = \frac{mg}{K_T\rho D^4} = C&#xA;$$&#xA;Where C is some constant. We don't really care what it is as long as it's non-zero (if it's zero then we don't need the motors to do anything).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, make our system of equations and solve them:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\frac{n_A^2}{r_A} + \frac{n_B^2}{r_B} + \frac{n_C^2}{r_C} = 0&#xA;$$&#xA;$$&#xA;n_A^2 + n_B^2 + n_C^2  =  C&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Right away we see that there is no solution except when $C=0$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus, a trirotor needs the servo to rotate at least one motor in order to generate more torque without generating more thrust (in the z direction).&lt;/p&gt;&#xA;" OwnerUserId="1524" LastActivityDate="2013-07-09T12:20:25.863" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1564" PostTypeId="1" CreationDate="2013-07-09T12:57:07.513" Score="2" ViewCount="1069" Body="&lt;p&gt;I am trying to launch a file from remote computer but I could not success. Actually I can connect to remote computer but I think the problem is with including a file from remote computer. In other words, I am looking for a machine tag for include. Here is the my code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;launch&amp;gt;  &#xA;&#xA;    &amp;lt;group &amp;gt;&#xA;      &amp;lt;machine name=&quot;marvin-1&quot; address=&quot;tek-marvin-1&quot; user=&quot;blabla&quot; password=&quot;blabla&quot; env-loader=&quot;/home/blabla/.rosLaunchScript.sh&quot;/&amp;gt;  &#xA;&#xA;      &amp;lt;include file=&quot;$(find openni_launch_marvin)/launch/kinect_left.launch&quot;/&amp;gt;&#xA;    &amp;lt;/group&amp;gt;     &#xA;&#xA;&amp;lt;/launch&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="1611" LastActivityDate="2021-02-10T09:21:18.417" Title="Roslaunch include file remotely" Tags="&lt;ros&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1565" PostTypeId="5" CreationDate="2013-07-09T13:02:35.087" Score="0" Body="&lt;p&gt;A sensor (also called detector) is a converter that measures a physical quantity and converts it into a signal which can be read by an observer or by an (today mostly electronic) instrument. For example, a mercury-in-glass thermometer converts the measured temperature into expansion and contraction of a liquid which can be read on a calibrated glass tube. A thermocouple converts temperature to an output voltage which can be read by a voltmeter. For accuracy, most sensors are calibrated against known standards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sensors are used in everyday objects such as touch-sensitive elevator buttons (tactile sensor) and lamps which dim or brighten by touching the base. There are also innumerable applications for sensors of which most people are never aware. Applications include cars, machines, aerospace, medicine, manufacturing and robotics.&lt;/p&gt;&#xA;" OwnerUserId="1449" LastEditorUserId="1449" LastEditDate="2013-08-02T18:58:59.417" LastActivityDate="2013-08-02T18:58:59.417" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1566" PostTypeId="4" CreationDate="2013-07-09T13:02:35.087" Score="0" Body="A sensor (also called detector) is a converter that measures a physical quantity and converts it into a signal which can be read by an observer or by an (today mostly electronic) instrument." OwnerUserId="1449" LastEditorUserId="1449" LastEditDate="2013-08-02T18:59:03.247" LastActivityDate="2013-08-02T18:59:03.247" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1567" PostTypeId="1" CreationDate="2013-07-09T18:13:57.490" Score="8" ViewCount="2224" Body="&lt;p&gt;For a DC motor with a stall current of 950 mA, what should the H-bridge's current rating be?  What will happen if we use our H-bridge L293D whose max. output current is 600 mA?&lt;/p&gt;&#xA;" OwnerUserId="1613" LastEditorUserId="350" LastEditDate="2013-07-09T18:57:44.237" LastActivityDate="2013-07-11T00:07:16.307" Title="H-bridges and stall current" Tags="&lt;motor&gt;&lt;electronics&gt;&lt;h-bridge&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1568" PostTypeId="2" ParentId="1547" CreationDate="2013-07-09T23:51:41.807" Score="1" Body="&lt;p&gt;I think &lt;a href=&quot;http://www.gazebosim.org/&quot; rel=&quot;nofollow&quot;&gt;Gazebo&lt;/a&gt; is the most popular, but &lt;a href=&quot;http://www.openrobots.org/wiki/morse/&quot; rel=&quot;nofollow&quot;&gt;Morse&lt;/a&gt; is also worth checking.&lt;/p&gt;&#xA;" OwnerUserId="484" LastActivityDate="2013-07-09T23:51:41.807" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1569" PostTypeId="2" ParentId="1567" CreationDate="2013-07-09T23:57:08.023" Score="3" Body="&lt;p&gt;First a bit about motors. Stall current is the current drawn by the motor when the recommended voltage is applied and the motor is not turning due to a load. Alternatively, the no load speed is the speed the motor will spin at under no load. In this state it will draw a minimum current.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is an example torque/speed current for a DC motor:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/dsC0E.jpg&quot; alt=&quot;Torque / Speed Curve for DC motor&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Source: &lt;a href=&quot;http://www.societyofrobots.com/robotforum/index.php?topic=4324.0&quot; rel=&quot;nofollow noreferrer&quot;&gt;societyofrobots.com&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So whether or not you can use your H-Bridge depends on how you are using the motor. If you are using the motor at a high speed and thus low torque state, you will not approach the stall current and may stay within the spec for the motor driver.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Furthermore, torque/speed curve is voltage dependent. If you operate at a lower voltage, you will draw less current and could possibly stay within spec for the H-bridge. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you exceed the recommended current draw for the H-Bridge, it will heat up and possibly burn out or in the worst case start a fire. The L293D has overtemp protection so it may just stop functioning.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are ways to increase the max current capacity of the H-bridge by introducing cooling in the form of a heat sink or fan or liquid cooling, etc. The current through the H-bridge is causing resistive heating of the chip. The heating raises the temperature of the chip eventually causing damage. If you increase the flow of heat out of the chip, you will be able to heat it more (more current) without raising the temperature too high.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another option is use two L293D chips in parallel (H-bridge piggybacking). Adafruit suggests this with their motor arduino shield which uses L293D chips. They state this will double the current capacity. &lt;a href=&quot;http://learn.adafruit.com/adafruit-motor-shield/power-requirements&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://learn.adafruit.com/adafruit-motor-shield/power-requirements&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other H-bridges you could checkout are the L298 and DRV8801.&lt;/p&gt;&#xA;" OwnerUserId="1125" LastEditorUserId="350" LastEditDate="2013-07-10T04:10:29.557" LastActivityDate="2013-07-10T04:10:29.557" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1570" PostTypeId="1" AcceptedAnswerId="1573" CreationDate="2013-07-10T11:07:19.197" Score="2" ViewCount="3170" Body="&lt;p&gt;I found &lt;a href=&quot;http://www.kionix.com/sites/default/files/AN012%20Accelerometer%20Errors.pdf&quot; rel=&quot;nofollow&quot;&gt;a good explanation&lt;/a&gt; on how to remove accelerometer bias (when on flat table only one axis should show values, the other two should be 0). I've calculated S and B factors (page 3):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Record $B_x^{0g}$, $B_y^{0g}$, $B_z^{0g}$, $S_{xx}$, $S_{yy}$, and $S_{zz}$ in EEPROM or flash memory&#xA;  and use these values in all subsequent calculations of acceleration to&#xA;  get the corrected outputs.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I don't know how to incorporate these into the final calculation of accelerations. I guess the bias should be substracted from my sensor reading. What about sensitivities (S)?&lt;/p&gt;&#xA;" OwnerUserId="584" LastEditorUserId="350" LastEditDate="2013-07-10T14:56:33.010" LastActivityDate="2013-07-10T16:07:57.553" Title="Accelerometer bias removal" Tags="&lt;accelerometer&gt;&lt;calibration&gt;&lt;errors&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1571" PostTypeId="1" AcceptedAnswerId="1576" CreationDate="2013-07-10T14:31:23.340" Score="4" ViewCount="1316" Body="&lt;p&gt;For Halloween, I'd like to build a spider that drops from the ceiling when it detects motion and then rewinds itself back up to scare the next kids. I already have a lightweight foamish spider from Hobby Lobby that I'd like to use, but I need help adding the smarts to it to scare the kids.&lt;/p&gt;&#xA;&lt;p&gt;Ideally, it'd be able to detect how tall/far away the kid is to drop to a custom height each time, but I'd settle for a standard dropping height if that's too much. I even had an idea of having a motion sensor and having it shoot Silly String webs in front of people.&lt;/p&gt;&#xA;&lt;p&gt;I have a very technical background, but I'm a total noob when it comes to robotics, so ideas as to what components and considerations I'd need would be greatly appreciated!&lt;/p&gt;&#xA;" OwnerUserId="1624" LastEditorUserId="19515" LastEditDate="2020-08-08T17:48:15.907" LastActivityDate="2020-08-08T17:48:15.907" Title="How to raise/drop a spider?" Tags="&lt;motor&gt;&lt;rcservo&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="1572" PostTypeId="2" ParentId="1571" CreationDate="2013-07-10T14:50:17.530" Score="1" Body="&lt;p&gt;It sounds like you want some sort of winch that moves faster in one direction (for the release) than the other.  There are heavy-duty winches that accomplish this by having a clutch in addition to the winch motor, so that when the clutch is disengaged the cable can unspool freely.  &lt;strong&gt;EDIT:&lt;/strong&gt; Fishing reels are a more appropriate example (+1 &lt;a href=&quot;https://robotics.stackexchange.com/a/1576/350&quot;&gt;JoeFromOzarks&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To achieve custom drop distance with such a setup, you'd have to rely on disengaging the clutch for a very specific interval -- you should be able to find the relationship between drop time and drop distance (considering gravity, spool momentum, and string friction).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When rewinding, you'd need a sensor to detect when the string is all the way back in.  There are several ways you might do this, from electrical measurement of the motor load to physical measurements on the string/spider position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may want to check out this other question for a list of ways to detect motion: &lt;a href=&quot;https://robotics.stackexchange.com/q/1393/350&quot;&gt;What is the cheapest / easiest way of detecting a person?&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2013-07-10T18:14:04.890" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1573" PostTypeId="2" ParentId="1570" CreationDate="2013-07-10T15:12:01.310" Score="2" Body="&lt;p&gt;As noted at the top of the second page:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;$B_z^{0g} = a_{z1}-S_{zz}*1g$&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The &quot;ground truth&quot; z-axis acceleration (of an accelerometer sitting flat on the table) is $1g$, which is affected by the sensitivity of the accelerometer along that axis.  You could rewrite it as follows:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$Bias = a_{measured} - Sensitivity * a_{actual}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since you want to calculate the actual acceleration from the measured acceleration, you'd rewrite it like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$a_{actual}=\frac{a_{measured}-Bias}{Sensitivity}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or in terms of the original variables,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$a_{z1}^{corrected}=\frac{a_{z1}-B_z^{0g}}{S_{zz}}$$&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2013-07-10T15:23:09.263" LastActivityDate="2013-07-10T15:23:09.263" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1574" PostTypeId="2" ParentId="1570" CreationDate="2013-07-10T16:07:57.553" Score="2" Body="&lt;p&gt;Ian's answer is mathematically correct.  However, on most processors division takes longer than multiplication.  So if you're at all pressed for processor resources you would want to precalculate a gain and offset for each channel, and apply it:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$k_{zz} = \frac{1}{S_{zz}}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$b_{zz} = -\frac{B_z^{0g}}{S_{zz}}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$a_{z1}^{corrected} = k_{zz} a_{z1} + b_{zz}$&lt;/p&gt;&#xA;" OwnerUserId="1411" LastActivityDate="2013-07-10T16:07:57.553" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1575" PostTypeId="2" ParentId="1567" CreationDate="2013-07-10T16:22:48.997" Score="1" Body="&lt;p&gt;What Brendan said.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, there is an out if you want to reach for it: once you have determined the actual stall current for your situation, from the motor armature resistance, supply voltage, and the whopping 1.4V drop in the L293, if you pulse the drive to the motor such that the &lt;em&gt;average&lt;/em&gt; current through the L293 is the rated 600mA or less, then it shouldn't burn up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'll need to pay attention to switching speed, and where the current goes on the back side of the PWM, and all those other pesky details, and if your PWM generator stalls at the wrong portion of the cycle things will get toasty, but that doesn't mean there isn't a path to success with that part.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Personally, I'd figure out how to deal with surface-mount parts and put in the DRV8801 -- it looks far superior.  Or, if I never needed to generate top torque at top speed, and if efficiency wasn't a concern, I'd just put a resistor in series with the motor).&lt;/p&gt;&#xA;" OwnerUserId="1411" LastEditorUserId="1411" LastEditDate="2013-07-11T00:07:16.307" LastActivityDate="2013-07-11T00:07:16.307" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1576" PostTypeId="2" ParentId="1571" CreationDate="2013-07-10T16:59:58.937" Score="7" Body="&lt;p&gt;Take a look at a kids &quot;spincast&quot; fishing reel and rod.&lt;br&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/XYdwV.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XYdwVm.jpg&quot; alt=&quot;Spincast reel&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We built one in 2008 (still works, rain, snow and all!) using a automobile door lock solenoid to operate the &quot;thumb release&quot; and an automobile power window motor (PWM &amp;amp; MOSFET) via rubber hose driveline to operate the retract.  Choice of MCU is yours, but we've since added spooky lights, MP3 with speaker, &quot;beam break&quot; and IR detectors just to &quot;juice it up.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/joefromozarks/9257124436/sizes/o/in/photostream/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://farm6.staticflickr.com/5521/9257124436_7ef2c04e3b_z.jpg&quot; alt=&quot;diagram&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="1625" LastEditorUserId="-1" LastEditDate="2017-03-10T09:42:48.990" LastActivityDate="2013-07-10T18:02:13.573" CommentCount="11" ContentLicense="CC BY-SA 3.0" />
  <row Id="1577" PostTypeId="2" ParentId="1571" CreationDate="2013-07-10T17:13:46.590" Score="3" Body="&lt;p&gt;If you want to detect how tall your target is &lt;em&gt;and&lt;/em&gt; tailor the drop height to suit, then you are going to need more precise &lt;em&gt;sensors&lt;/em&gt; and &lt;em&gt;control&lt;/em&gt; than the other (excellent) answers here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One option might be to use a &lt;a href=&quot;http://www.pololu.com/catalog/product/723&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sonar Range Finder&lt;/a&gt; as suggested in &lt;a href=&quot;https://robotics.stackexchange.com/a/1397/37&quot;&gt;this answer&lt;/a&gt; to &lt;a href=&quot;https://robotics.stackexchange.com/q/1393/350&quot;&gt;What is the cheapest / easiest way of detecting a person?&lt;/a&gt; &lt;sup&gt;(Thanks &lt;a href=&quot;https://robotics.stackexchange.com/a/1572/37&quot;&gt;Ian&lt;/a&gt;)&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Basic idea&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;While the &lt;em&gt;SRF&lt;/em&gt; is detecting a distance of more than your maximum drop distance, the 'spider' would lie in wait. If the &lt;em&gt;SRF&lt;/em&gt; detects anything closer, you immediately start the motor unspooling the cord and the spider will start dropping.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As the spider is dropping you continue monitoring the &lt;em&gt;SRF&lt;/em&gt; and stop unspooling when the length of cord you've unspooled is approximately the same as the &lt;em&gt;minimum&lt;/em&gt; distance measured by the &lt;em&gt;SRF&lt;/em&gt; since it started dropping. This should place the spider right at eye level of the tallest person there, for maximum effect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, after a short delay, start the motor slowly returning to it's rest position by spooling the cord back in and resetting for the next &lt;em&gt;attack&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Complications&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;You will need to be careful about the weight of the spider. It needs to be heavy enough that &lt;a href=&quot;https://en.wikipedia.org/wiki/Drag_%28physics%29&quot; rel=&quot;nofollow noreferrer&quot;&gt;drag (air resistance)&lt;/a&gt; does not significantly impede it's acceleration due to gravity, but not so heavy that it could harm anyone or overload your motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even if your spider isn't &lt;em&gt;too&lt;/em&gt; heavy, you will want to make sure that there is &lt;a href=&quot;http://www.wikihow.com/Make-Larp-Arrows&quot; rel=&quot;nofollow noreferrer&quot;&gt;1.5 to 2&quot; of foam&lt;/a&gt; between the heavy centre and anything that might touch anyone. You will also need to make sure that there are no stiffening wires or springs which can end up protruding out of the spider as it wears. All basic health and safety stuff really.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the spider is dropping into the SRF sensor beam area, then obviously you will not be able to improve your initial estimate of drop distance, and will just have to drop to that first range measured. This might mean that you end up dropping to teh height of someone's hand rather than to the level of their head though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to be clever, you can arrange your drop trajectory to be controlled so that you never have too much loose cord, this will minimise the risk of the cord getting tangled and snagging on anything. In this case you will want to ramp up the speed of the motor such that the cord is being spooled out at the same rate as the acceleration of the spider due to gravity, i.e. $9.8 ms^{-2}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may or may not also want to control the deceleration rate as you approach the desired drop length. The faster you stop it, the more dramatically the spider will bounce and jump around, but the more stress you will put your system under.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, you will want to size your motor such that it can move relatively quickly under light load (when dropping) but still have the torque to stop the spider at the end of travel (and winch the spider back up).&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Some calculations&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The formulae for &lt;a href=&quot;http://en.wikipedia.org/wiki/Acceleration#Uniform_acceleration&quot; rel=&quot;nofollow noreferrer&quot;&gt;uniform acceleration&lt;/a&gt; is $s=ut+\frac{1}{2}at^2$ where $s$ is displacement, $u$ is initial velocity (zero in our case), $a$ is uniform acceleration and $t$ is time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming that you have a spool of 10cm in circumference, and want to drop the spider at most 2m then $s=2$, $u=0$, $a=9.8$ and $t$ is unknown: $t=\sqrt{\frac{2}{\frac{9.8}{2}}}=0.638$. To spool 2m in that time seconds would require the spool to turn at almost 2000 rpm on average ($200/10/0.638*60=1881$).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This seems a little unreasonable, so doubling the spool to 20cm circumference would drop the motor speed to under 1000rpm on average, but we are now looking at quite a bulky bit of mechanics.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Conclusion&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;If you get the design right, you might even be able to fit all of the components needed (spider, spool, motor, drive electronics, control electronics, sensor and power supply) into something which you can screw into a light fitting and thus hide in a (large) lamp shade.&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2013-07-10T22:43:45.287" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1578" PostTypeId="2" ParentId="1571" CreationDate="2013-07-10T18:16:20.393" Score="1" Body="&lt;p&gt;I did this exact same project 6 years back. I used two servos. The first was a continuous rotation servo with a spool the pull the spider up. The spool did not have an end on it so that when the spool turned parallel to the string it all came loose and the spider fell. It was simple and effective, although the CR servo that I used was under powered.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a write up in &lt;a href=&quot;http://forums.parallax.com/showthread.php/107352-Oldbit-s-Unofficial-Propeller-Halloween-Contest-%28Over-300-value-in-cash-amp-priz?p=760287&amp;amp;viewfull=1#post760287&quot; rel=&quot;nofollow noreferrer&quot;&gt;this thread&lt;/a&gt; on the Parallax forums.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/LSHzj.jpg&quot; alt=&quot;hardware picture&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="1524" LastActivityDate="2013-07-10T18:16:20.393" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1579" PostTypeId="1" AcceptedAnswerId="1580" CreationDate="2013-07-10T20:44:48.130" Score="5" ViewCount="2164" Body="&lt;p&gt;I've already &lt;a href=&quot;https://robotics.stackexchange.com/questions/1570/accelerometer-bias-removal&quot;&gt;asked a related question (accelerometer bias removal)&lt;/a&gt; here on robotics and got a bit better results on corrected accelerometer output. To get even better results I found the &lt;a href=&quot;http://www.vectornav.com/support/library?id=86&quot; rel=&quot;nofollow noreferrer&quot;&gt;calibration equations (7th &amp;amp; 8th paragraph)&lt;/a&gt; from Vectornav which are just a bit enhanced than the solution in the linked question:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZlbWs.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;However, six more variables are needed:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Sensitivity of sensor X-axis to Y-axis inputs (&lt;span class=&quot;math-container&quot;&gt;$M_{xy}$&lt;/span&gt;)&lt;/p&gt;&#xA;&lt;p&gt;Sensitivity of sensor X-axis to Z-axis inputs (&lt;span class=&quot;math-container&quot;&gt;$M_{xz}$&lt;/span&gt;)&lt;/p&gt;&#xA;&lt;p&gt;Sensitivity of sensor Y-axis to X-axis inputs (&lt;span class=&quot;math-container&quot;&gt;$M_{yx}$&lt;/span&gt;)&lt;/p&gt;&#xA;&lt;p&gt;Sensitivity of sensor Y-axis to Z-axis inputs (&lt;span class=&quot;math-container&quot;&gt;$M_{yz}$&lt;/span&gt;)&lt;/p&gt;&#xA;&lt;p&gt;Sensitivity of sensor Z-axis to X-axis inputs (&lt;span class=&quot;math-container&quot;&gt;$M_{zx}$&lt;/span&gt;)&lt;/p&gt;&#xA;&lt;p&gt;Sensitivity of sensor Z-axis to Y-axis inputs (&lt;span class=&quot;math-container&quot;&gt;$M_{zy}$&lt;/span&gt;)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Below it is also stated:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;IEEE-STD-1293-1998 [...] provides a detailed test procedure for&#xA;determining each of these calibration parameters&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;However, after searching through the &lt;a href=&quot;https://docs.google.com/file/d/0B8zqB-WeBKRBTUN4OU0weEV0eVE/edit&quot; rel=&quot;nofollow noreferrer&quot;&gt;1293-1998 standard&lt;/a&gt; (especially page 201 in Google Docs) I didn't find any clue on how to calculate the &lt;span class=&quot;math-container&quot;&gt;$M$&lt;/span&gt; values. Also, &lt;span class=&quot;math-container&quot;&gt;$B_{d}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$V_x$&lt;/span&gt; values from Vectornav equations is not explained anywhere. Can someone point me further?&lt;/p&gt;&#xA;" OwnerUserId="584" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2017-10-01T00:31:17.173" Title="Accelerometer calibration - how to get cross-axis sensitivities" Tags="&lt;sensors&gt;&lt;accelerometer&gt;&lt;calibration&gt;&lt;errors&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1580" PostTypeId="2" ParentId="1579" CreationDate="2013-07-11T00:05:28.110" Score="5" Body="&lt;p&gt;OK.  I'm too lazy to read the document, but in general you can model the sensor response as&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\alpha_m = S \alpha + b$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $\alpha$ is the actual acceleration in three dimensions with respect to the accelerometer body (including the acceleration due to gravity), $\alpha_m$ is the measured acceleration from the accelerometer, $b$ is an offset, and $S$ is a $3\times3$ sensitivity matrix.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$S$ and $b$ can be derived from the equations you give in your question above: $S$ is the product of your two $3\times3$ matrices, while $b$ is the product of $S$ and their $B$ and $V$ vectors.  We're all saying the same thing; I'm just compressing the math a bit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you know $S$, $b$, and $\alpha_m$ then you can solve the above equation for $\alpha$ to get&#xA;$$\hat{\alpha}=S^{-1}\left(\alpha_m - b \right)$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if you don't assume that $S$ is symmetrical (I don't think it needs to be) then you have 12 unknowns (nine in $S$ and three in $b$).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you mount your accelerometer into a cube whose sides are more accurate than the calibration you're trying to make, and you set it on a table that is as accurate as the cube, and measure the acceleration at each of the six faces of the cube, then you'll get 18 equations, three for the three axes, times the six faces of the cube.  There should be sufficient information there to extract your 12 unknowns by linear algebra.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Serious aerospace companies do this job with rotary tables, but that gets kinda spendy.&lt;/p&gt;&#xA;" OwnerUserId="1411" LastEditorUserId="1411" LastEditDate="2013-07-11T23:16:47.153" LastActivityDate="2013-07-11T23:16:47.153" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1581" PostTypeId="1" AcceptedAnswerId="1585" CreationDate="2013-07-11T15:19:47.430" Score="4" ViewCount="383" Body="&lt;p&gt;I have a project which requires a robot to move around a room with a flat surface (concrete floor).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The robot must carry a laptop. I estimated that the total weight would be 6-7kg (including motors, battery, laptop, motor controller board and other mics items). I would like it to move at about the same speed as a Roomba moves. The robot will have two motors and a castor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have tried doing the calculation to determine the type of motor to use, but I'm very confused.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can someone advise me on the type of motor and type of battery (Lipo/SLA) to use?&lt;/p&gt;&#xA;" OwnerUserId="1629" LastEditorUserId="177" LastEditDate="2013-07-11T16:09:04.977" LastActivityDate="2014-10-30T15:19:55.193" Title="Choosing motor and battery for a robot" Tags="&lt;motor&gt;&lt;wheeled-robot&gt;&lt;battery&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1582" PostTypeId="1" AcceptedAnswerId="1588" CreationDate="2013-07-11T18:31:18.143" Score="4" ViewCount="2636" Body="&lt;p&gt;I'm starting to attempt to fly FPV on my quadrotor. I am using a FrSky D8R-II 2.4 GHz frequency hopping diversity receiver (two antennas) for control and recently added a &lt;a href=&quot;http://www.readymaderc.com/store/index.php?main_page=product_info&amp;amp;cPath=11_30_31&amp;amp;products_id=348&quot; rel=&quot;nofollow noreferrer&quot;&gt;no-name 910 MHz 1.5 watt analog video transmitter&lt;/a&gt; for FPV flying:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/UFrHc.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the video transmitter is powered up, my control range drops from about 1.5km to under 50m. I'm surprised that the 910 MHz video channel affects my 2.4 GHz control channel this way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this sort of interference expected? Is it because my transmitter is low quality? What changes are recommended&amp;nbsp;— should I switch to a UHF control radio? Or a different frequency (eg 5.8 GHz?) for the video radio? Or just try moving it a few more inches (they are already about 5in apart)?&lt;/p&gt;&#xA;" OwnerUserId="1473" LastEditorUserId="478" LastEditDate="2014-01-01T14:11:37.897" LastActivityDate="2014-01-25T21:11:52.820" Title="Interference between 900 MHz video transmitter and 2.4 GHz control radio" Tags="&lt;multi-rotor&gt;" AnswerCount="3" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1584" PostTypeId="1" AcceptedAnswerId="1586" CreationDate="2013-07-11T22:16:02.167" Score="10" ViewCount="2804" Body="&lt;p&gt;Our robot has a circular array of 12 sonar sensors that looks like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/Q5dBX.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__31136__ultrasonic_module_hc_sr04_arduino.html&quot; rel=&quot;noreferrer&quot;&gt;sonar sensors themselves&lt;/a&gt; are pretty good. We use a low-pass filter to deal with noise, and the readings seem pretty accurate. However, when the robot comes across a flat surface like a wall, something weird happens. The sonars don't show readings that would indicate a wall, instead, it appears like a curved surface. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The plot below was made when the robot was facing a wall. See the curve in the blue lines, as compared to the straight red line. The red line was produced by using a camera to detect the wall, where the blue lines show filtered sonar readings. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/B4KWm.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We believe this error is due to crosstalk, where one sonar sensor's pulse bounces off the wall at an angle and is received by another sensor. This is a systematic error, so we can't really deal with it like we would with noise. Are there any solutions out there to correct for it?&lt;/p&gt;&#xA;" OwnerUserId="181" LastActivityDate="2013-12-31T03:22:58.930" Title="How to deal with sonar crosstalk" Tags="&lt;sonar&gt;&lt;sensor-error&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1585" PostTypeId="2" ParentId="1581" CreationDate="2013-07-11T23:11:43.363" Score="3" Body="&lt;p&gt;Roombas move slowly, below a walking pace, right?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If that's so, then you probably want a geared DC motor.  I'm guessing that on concrete you can get away with a motor that's 100W or less, particularly if it's geared down a whole bunch.  You might want to figure out the highest incline or steepest step that you want to negotiate, figure out what force you need to surmount that obstacle, multiply by two, and go from there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To figure out the gear ratio (or to buy a gearbox-motor combination), decide on a wheel diameter and a top speed.  Then figure out the wheel speed that gets you that top speed.  Then go buy a pair of gear motor that are rated for that RPM as a unit, or select a motor with a known RPM and a gearbox with the right ratio to bring the RPM down.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as batteries -- SLA will be way cheaper, LiPo will be more expensive for both batteries and support equipment, but will hold more charge for the weight.  You makes your choice and you pays your money...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If this is a one-off then just buy a pair of wheel units made for robots.  Whatever you get you're just about guaranteed to be wrong somehow, so the most important thing to do is to start making the mistakes that you'll correct in Robot, Mark II.&lt;/p&gt;&#xA;" OwnerUserId="1411" LastActivityDate="2013-07-11T23:11:43.363" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1586" PostTypeId="2" ParentId="1584" CreationDate="2013-07-12T03:06:14.600" Score="10" Body="&lt;p&gt;This is a common problem, and one of a great many.  Acoustic sensing is a complicated field of study, a significant part of which is spent guessing what path a sound wave took between sending it and receiving it.  As you've noticed, assuming that it went straight out and came straight back will produce odd results in practice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To really solve it, you'll need to use a system that places a unique frequency and/or tone length on each sensor.  This can be taken to significant extremes, &lt;em&gt;e.g.&lt;/em&gt; &lt;a href=&quot;http://ieeexplore.ieee.org/xpl/articleDetails.jsp?tp=&amp;amp;arnumber=4058758&quot;&gt;Frequency-Hopping Pseudo-Random Pulse Width Modulation to Eliminate Crosstalk of Sonar Sensors in Mobile Robots&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is also a low-tech solution, which is fairly straightforward in concept.  If you wanted to simply detect the crosstalk, it would be a matter of firing a single sensor's pulse in between the firing of all sensors' pulses.  If you detect the return pulse with any other sensor, you know that you are in a crosstalk situation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In practice, this is fairly wasteful: notice that this effectively halves the number of samples you can take.  So you can improve on the implementation by dividing the sensors into groups where each member of the group is far enough from the others that it will not receive crosstalk.  The most robust version of this approach is to &lt;a href=&quot;http://www-personal.umich.edu/~johannb/Papers/paper32.pdf&quot;&gt;make the groups themselves be pseudorandom&lt;/a&gt; which not only allows the errors to average out over time but aids the detection of crosstalk on an individual sensor basis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your particular case, you have the added benefit of a camera sensor that you've shown is returning a more correct value for the ranges.  Strategies to combine separate (and possibly conflicting) measurements into a single more accurate estimate is its own very broad topic (called &lt;em&gt;fusion&lt;/em&gt;, &lt;a href=&quot;http://ieeexplore.ieee.org/xpl/login.jsp?tp=&amp;amp;arnumber=363924&quot;&gt;example 1&lt;/a&gt;, &lt;a href=&quot;http://eia.udg.es/~qsalvi/papers/2009-MARTECH.pdf&quot;&gt;example 2&lt;/a&gt;), but a very relevant one to what you're doing here.  &lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2013-07-12T03:06:14.600" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1587" PostTypeId="2" ParentId="1584" CreationDate="2013-07-12T17:25:56.687" Score="5" Body="&lt;p&gt;Some sensors, such as the Maxbotix MB1200 XL-MaxSonar-EZ0, have a daisy chaining system built in where one sensor triggers the next sensor once it has finished its measurement. This way you can have N sensors and ensure that only one is firing at once but that there the next sensor fires as soon as the first has collected its return. This solution is simple but obviously greatly reduces the amount of data you get per unit time. Ian's solutions are far closer to optimal.&lt;/p&gt;&#xA;" OwnerUserId="1473" LastActivityDate="2013-07-12T17:25:56.687" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1588" PostTypeId="2" ParentId="1582" CreationDate="2013-07-12T23:34:04.733" Score="2" Body="&lt;p&gt;There's a lot of things that this could be.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The transmitter could be faulty, and transmitting considerable power close enough to 2.4GHz to be directly interfering with the receiver.  Yes, the receiver is spread-spectrum, but interference to such a receiver will generally raise its noise floor, which will reduce its range.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The receiver could be faulty; it's front end could be getting swamped by the 910MHz.  This would reduce the effective gain of the receiver front end, which would also result in low range.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's even a slight chance that the problem is neither one, but some other bit of electronics: the 910MHz signal could be getting rectified by some component in a servo or other bit of electronics.  This would generate signal at 1.82GHz, 2.73GHz and more -- that 2.73GHz signal, if it's strong enough, could cause issues with your 2.4GHz receiver.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A rough test of which is which would be to unhook one or the other from the quadcopter, then increase the separation between them while you see how the signal strength, or range, looks on the 2.4GHz receiver.  If the range of the 2.4GHz receiver rises rapidly with separation, or shows some threshold effect where it is low, low, low, HIGH, then there's a good chance that the problem is that the 2.4GHz receiver is allowing itself to be stomped on by the out-of-band energy from the transmitter.  If the range of the 2.4GHz receiver rises gradually and smoothly as you back away from the video transmitter, then the problem could be in either radio but is most likely in the transmitter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In an ideal world both the receiver and the video transmitters would be inside of metal boxes, with bandpass filters right at the point of entry or exit for the RF signal that only let the correct frequencies through.  Those metal boxes would weigh nothing, of course.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alas, this is the real world.  I'm not sure if it'd be worthwhile to try the metal box idea -- the required filters are hard to debug without a spectrum analyzer; you can put one together and see if it works, but if it doesn't you still won't know for sure if a filter isn't the answer, or if that particular filter didn't do the job for you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The (US) Amateur Radio Relay League has a book called the &quot;Radio Interference Handbook&quot;.  The book is aimed at amateur radio operators who are having problems with their neighbors -- but much of what it'll have to say should be pertinent to your case.&lt;/p&gt;&#xA;" OwnerUserId="1411" LastActivityDate="2013-07-12T23:34:04.733" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1589" PostTypeId="1" CreationDate="2013-07-13T00:34:59.227" Score="0" ViewCount="167" Body="&lt;p&gt;I want to compute an existence probability of an object in a sensor fusion on the high level (having from each sensor list of objects already filtered with e.g. Kalman Filter).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are these formulae:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$LR(G)_{old} = \frac{p(Ex_{out})_{old}}{1 - p(Ex_{out})_{old}}$$&#xA;$$\alpha = \frac{p(Ex_{in})_{old}}{p(Ex_{in})_{old}*(1 - p(Ex_{in})_{new})}$$&#xA;$$LR(G)_{new} = LR(G)_{old} * \alpha$$&#xA;$$p(Ex_{out})_{new} = \frac{LR(G)_{new}}{1 + LR(G)_{new}}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where $p(Ex)$ is the probability of existence and $LR$ is the Likelihood Ratio.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The idea is that $p(Ex)_{in}$ is some probability existence of local object, which was fused into the global $p(Ex_{out})$, and its probability influences that global one.  $old$ would mean values from previous cycle. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How do you condition that computation to avoid situations of dividing by zero, obtaining &lt;code&gt;NaN&lt;/code&gt;, or &lt;code&gt;Inf&lt;/code&gt;? Also, if $p(Ex_{in})_{new}$ is almost 1, then $\alpha$ will be huge, increasing output, and increasing it enormously in each later cycle, so that the object will live forever. How to prevent it?&lt;/p&gt;&#xA;" OwnerUserId="1633" LastEditorUserId="37" LastEditDate="2014-01-29T23:39:57.100" LastActivityDate="2014-01-29T23:39:57.100" Title="existence probability of an object in fusion" Tags="&lt;sensors&gt;&lt;kalman-filter&gt;&lt;sensor-fusion&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1590" PostTypeId="1" CreationDate="2013-07-13T05:14:28.927" Score="4" ViewCount="3797" Body="&lt;p&gt;What is the name for the transfer function, GH, in a simple feedback control system like&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$y=\frac{G}{1+GH}u$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What do you call G? What about (G/(1+GH))?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am confused by the fact that that  &quot;open-loop transfer function&quot; and &quot;Loop transfer function&quot; are used to mean GH by different people. Which is academically correct or widely accepted?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are several terms: &quot;closed-loop transfer function&quot;&#xA;&quot;open-loop transfer function&quot;&#xA;&quot;overall transfer function&quot;&#xA;&quot;Loop transfer function&quot;&#xA;&quot;loop gain&quot;&#xA;&quot;loop ratio&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="1634" LastEditorUserId="350" LastEditDate="2013-07-13T19:57:33.583" LastActivityDate="2013-07-16T04:47:00.057" Title="What is the name for the transfer function, GH" Tags="&lt;control&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1591" PostTypeId="2" ParentId="1590" CreationDate="2013-07-13T06:21:39.540" Score="3" Body="&lt;p&gt;$GH$ has no special name in and of itself, it is merely a part of the transfer function.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$G$ is the plant/system. It is a mode of the system you want to control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$y = Gu$ is the open-loop transfer function. It describes how the output of the system changes given a conrol signal $u$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$y = \frac{G}{1+GH}u$ is the closed loop transfer function. It describes how the output of the system changes given a control signal $u$ and some observation model $H$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The phrase &quot;Loop transfer function&quot; is used in contexts where the type of controller (open vs. closed) is not relevant.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A good introductory text to these ideas is the sixth edition of &lt;a href=&quot;http://books.google.com/books?id=gxOLZwEACAAJ&amp;amp;dq=feedback+control+of+dynamic+systems&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=gnbjUZXmMsbBigLZ1oEY&amp;amp;ved=0CDUQ6AEwAA&quot; rel=&quot;nofollow&quot;&gt;Feedback Control of Dynamic Systems by Franklin, Powell, and Emami-naeini&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="177" LastEditorUserId="177" LastEditDate="2013-07-15T04:13:38.100" LastActivityDate="2013-07-15T04:13:38.100" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="1592" PostTypeId="2" ParentId="1582" CreationDate="2013-07-14T00:57:05.353" Score="1" Body="&lt;p&gt;I hesitated to provide this answer, because I can't find directly relevant articles to back it up.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's possible that the video transmitter (even though it's on a separate frequency) is saturating the receiver for the controls.  If this is the case, you'll have to find some way to reduce this.  There are a few possibilites:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Increase the distance between the antennas.  On a quadrotor, this can only be taken so far.&lt;/li&gt;&#xA;&lt;li&gt;Change the distance between the antennas to a 1/2 or 1/4 wavelength of the interfering signal.&lt;/li&gt;&#xA;&lt;li&gt;Change the orientation of the antennas to interfere less &amp;mdash; use a 90&amp;deg; offset.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;In any of these cases, you'll be better off if you can directly measure the interference signal instead of relying on the audible beeps to gauge the signal level.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2013-07-14T00:57:05.353" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1593" PostTypeId="2" ParentId="1590" CreationDate="2013-07-14T21:08:34.987" Score="3" Body="&lt;p&gt;Both &quot;loop transfer function&quot; and &quot;open loop transfer function&quot; are acceptable terms for $GH$, as are &quot;loop gain&quot; and &quot;loop ratio&quot;.  They all mean much the same thing.  We're humans, we can't always stick to a 1:1 correspondence between the thing and it's name.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are you sure that you meant $\frac{G}{1+GH}$, or did you mean $\frac{GH}{1+GH}$?  The former is useful in its way, but the latter is so common that I saw what you wrote and mistook it for the common form.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a complicated subject.  You need a book.  Being naturally modest and retiring, I suggest this one: &lt;a href=&quot;http://www.wescottdesign.com/actfes/actfes.html&quot; rel=&quot;nofollow&quot;&gt;http://www.wescottdesign.com/actfes/actfes.html&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="1411" LastEditorUserId="1411" LastEditDate="2013-07-16T04:47:00.057" LastActivityDate="2013-07-16T04:47:00.057" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1594" PostTypeId="2" ParentId="1589" CreationDate="2013-07-14T21:16:48.477" Score="1" Body="&lt;p&gt;There's not enough information there for me to comment on the validity of your formula.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, if you substitute the first three equations into the last on, you will find two things.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;the expression will be very messy, and&lt;/li&gt;&#xA;&lt;li&gt;the factors $1 - p\left(Ex_{out}\right)_{old}$ and $1 - p\left(Ex_{in}\right)_{new}$ occur in both the numerator and denominator, and can be canceled out, making the expression more opaque, but numerically more tractable.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="1411" LastActivityDate="2013-07-14T21:16:48.477" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1595" PostTypeId="1" CreationDate="2013-07-15T02:13:57.117" Score="3" ViewCount="168" Body="&lt;p&gt;I'm quite new to mechanical engineering and not familiar with gears and motors. A few days ago, I bought a second-hand GWS servo motor for my project, and it didn't include gears.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can someone help me understand the correct measurement of my motor so I can buy the correct &lt;strong&gt;gear&lt;/strong&gt; to fit on my servo motor. Specifically, the measurement of the &lt;strong&gt;gear hole&lt;/strong&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://oi43.tinypic.com/2ekktw7.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fK4KE.jpg&quot; alt=&quot;GWS S35 Continuous rotation servo&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="1641" LastEditorUserId="37" LastEditDate="2013-07-15T08:41:36.550" LastActivityDate="2013-07-16T17:36:59.453" Title="measuring gears for servo motors" Tags="&lt;rcservo&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1596" PostTypeId="2" ParentId="1595" CreationDate="2013-07-15T02:17:38.247" Score="1" Body="&lt;p&gt;That servo already has a gear train inside of it.  It's designed to have an arm attached to that output shaft.  The splines on the shaft need to be matched specifically to the servo arm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You need to find arms that are meant to fit that servo.  If you can't find them at hobby shops, then try eBay or similar.&lt;/p&gt;&#xA;" OwnerUserId="1411" LastActivityDate="2013-07-15T02:17:38.247" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1597" PostTypeId="2" ParentId="1590" CreationDate="2013-07-15T04:18:42.193" Score="0" Body="&lt;p&gt;G is the open loop transfer function&lt;/p&gt;&#xA;&#xA;&lt;p&gt;G*H is the loop transfer function. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The closed loop transfer function is the (open loop) / (1 + loop)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Closed-loop_transfer_function&quot; rel=&quot;nofollow&quot;&gt;http://en.wikipedia.org/wiki/Closed-loop_transfer_function&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="1642" LastActivityDate="2013-07-15T04:18:42.193" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1598" PostTypeId="1" CreationDate="2013-07-15T14:54:59.060" Score="2" ViewCount="598" Body="&lt;p&gt;I am software engineering student and don't know much about hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I recently have started a project in my AI course. The project is &lt;strong&gt;playing a 3x3 &lt;a href=&quot;http://en.wikipedia.org/wiki/Tic-tac-toe&quot; rel=&quot;nofollow&quot;&gt;tic-tac-toe&lt;/a&gt; game between computer and a human&lt;/strong&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a tic-tac-toe board, suppose you play first and you put a cross mark in a certain place.(in &lt;a href=&quot;https://dl.dropboxusercontent.com/u/80047546/tic.png&quot; rel=&quot;nofollow&quot;&gt;tic-tac-toe board&lt;/a&gt; your position is (3,1)).&#xA; Now my computer will take a picture with webcam and analyse this picture with help of Opencv(It is a open source c++ library for image processing. for details opencv.org). After finding the position of your cross mark it will find the optimal position with the help of my algorithm at which it will put a circle. For output it will just speak out the position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, I want to make a robotic hand that can draw this circle as output. Would anybody please help me to find the hardware and other materials that needed to make that robotic hand? It will be very helpful if anybody suggest me some tutorials.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I Googled and found many many suggestions, but I am confused about what to choose. &lt;/p&gt;&#xA;" OwnerUserId="1644" LastEditorUserId="1309" LastEditDate="2013-07-17T15:39:36.293" LastActivityDate="2013-07-17T15:39:36.293" Title="Making a robotic arm that can draw a circle" Tags="&lt;robotic-arm&gt;" AnswerCount="0" CommentCount="5" ClosedDate="2013-07-15T19:54:21.310" ContentLicense="CC BY-SA 3.0" />
  <row Id="1599" PostTypeId="2" ParentId="1394" CreationDate="2013-07-16T02:18:44.297" Score="0" Body="&lt;p&gt;Hi sorry for being so late.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My OS is Linux Ubuntu 13.04.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I already fix that issue.&#xA;It was weird I just reuse an ROS exemple, readapt it exactly as I did when post that message, and everything worked ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you for your help&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Jonny&lt;/p&gt;&#xA;" OwnerUserId="1647" LastActivityDate="2013-07-16T02:18:44.297" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1600" PostTypeId="2" ParentId="873" CreationDate="2013-07-16T07:22:03.817" Score="1" Body="&lt;p&gt;In answer to your q1 Kinect mapping quadcopter has been done:&#xA;&lt;a href=&quot;http://www.engadget.com/2010/12/06/kinect-used-as-a-quadrocopter-radar-video/&quot; rel=&quot;nofollow&quot;&gt;http://www.engadget.com/2010/12/06/kinect-used-as-a-quadrocopter-radar-video/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In answer to your q2 you can read from some of the online analyses of the project (&lt;a href=&quot;http://aeroquad.com/archive/index.php/t-1503.html?s=eb7c86f8f916e82c4d8bb7476a68f608&quot; rel=&quot;nofollow&quot;&gt;http://aeroquad.com/archive/index.php/t-1503.html?s=eb7c86f8f916e82c4d8bb7476a68f608&lt;/a&gt;) the onboard computer was a 1.6GHz Intel Atom CPU, which is significantly more powerful than arduino.&lt;/p&gt;&#xA;" OwnerUserId="1648" LastActivityDate="2013-07-16T07:22:03.817" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1602" PostTypeId="1" AcceptedAnswerId="1605" CreationDate="2013-07-16T11:26:28.637" Score="3" ViewCount="2803" Body="&lt;p&gt;I want to give my robot a differential mechanism for the system of turning and steering. Considering the case of turning a right-angled corner, the robot will achieve this by following a gradual circular arc through the intersection while maintaining a steady speed. To accomplish this end, we increase the speed of the outer wheel while slowing that of the inner. But supposing i want the turn to be within a definite radius, how do i calculate what ratio the 2 speeds have to be in? Can someone give me an insight into this? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What Ive done is this, although I have my doubts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the speed of the right wheel is $V_r$ and the speed of the left wheel is $V_l$, then the ratio of their speeds while turning will be equal to the ratio of the circumferences of their corresponding quadrants.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Therefore&lt;/strong&gt;&#xA;$$V_r :V_l =\frac{r+A}{r}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this right? I have a sinister feeling Im missing something out..&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/FjWpW.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="1650" OwnerDisplayName="Ghost" LastEditorUserId="350" LastEditDate="2013-07-16T17:43:37.460" LastActivityDate="2013-07-16T18:02:14.867" Title="How to design a differential steering mechanism?" Tags="&lt;kinematics&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1603" PostTypeId="1" CreationDate="2013-07-16T13:40:38.343" Score="2" ViewCount="1823" Body="&lt;p&gt;I am thinking of creating a robot that can navigate using a map. It is controlled from a PC. An 8-bit controller performs low level tasks and the PC is doing the image processing. I plan to implement it in a single room where the robot is placed and the robot and environment are tracked by a camera from a height or from the ceiling of the room. First, the robot needs to be mapped, like this &lt;a href=&quot;http://www.societyofrobots.com/programming_wavefront.shtml&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.societyofrobots.com/programming_wavefront.shtml&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;To do:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Track the robot from some height using a camera Following the&#xA;Wavefront algorithm to locate the robot and obstacles.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;Procedure:&lt;/strong&gt;(just my idea)&lt;/p&gt;&#xA;&lt;p&gt;The camera will give an image of the robot surrounded by obstacles in random places.&#xA;using some OpenCV technique draws some grind over the image.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Locating the grid which contains robot (by having some colored symbol over the robot) and locating the grids containing the obstacle.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Now, the grids with an obstacle are thought of as wall and the remaining is the free space for the robot to navigate.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The robot is going to get the goal place which should be reached is given from the pc(maybe like point the place to reach in the image by mouse click).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;Unknowns&lt;/strong&gt; :&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Mapping the room and locating the robot&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;How to do that? The robot should know where it is in the map or the image. We cannot believe only the camera is enough to locate the robot. So I thought of adding &lt;em&gt;&lt;strong&gt;triangulation&lt;/strong&gt;&lt;/em&gt; mapping like placing two IRs in the room and a receiver in the robot.&lt;/p&gt;&#xA;&lt;p&gt;The doubt I have in this is how an IR receiver can know from which direction it is receiving the IR signal (from left or right ). I think it knows only that it receives IR, not the direction. Then how is the triangulation going to happen if I don't know the angle and direction?&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;coming to the image processing, how can I implement the Wavefront&#xA;algorithm (that captures the live video and draw grids over it to&#xA;find the robot and the obstacles)?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I have &lt;code&gt;HC-05&lt;/code&gt; Bluetooth module, Arduino, Bluetooth dongle, chassis with dc motors and driver, and a dc supply.&lt;/p&gt;&#xA;" OwnerUserId="1622" LastEditorUserId="19515" LastEditDate="2020-07-27T18:27:59.540" LastActivityDate="2020-07-27T18:27:59.540" Title="How to implement the Wavefront algorithm?" Tags="&lt;algorithm&gt;&lt;mapping&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="1604" PostTypeId="2" ParentId="1595" CreationDate="2013-07-16T17:36:59.453" Score="1" Body="&lt;p&gt;The output spline is generally proprietary, and will vary by manufacturer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Measuring the diameter is generally not useful, although counting the teeth can help.  Really all you need to do is type the servo model number into google and see what arms match.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did the legwork and the S35 uses the futuba spline, so any arm designed for a futuba servo in that size range will fit.&lt;/p&gt;&#xA;" OwnerUserId="65" LastActivityDate="2013-07-16T17:36:59.453" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1605" PostTypeId="2" ParentId="1602" CreationDate="2013-07-16T18:02:14.867" Score="1" Body="&lt;p&gt;Your intuition is correct.  We can look at the difference in arc length that each wheel will roll for a given &lt;a href=&quot;http://en.wikipedia.org/wiki/Circular_sector&quot; rel=&quot;nofollow&quot;&gt;sector&lt;/a&gt; (specified by $\theta$ in degrees).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$d_l = \frac{\theta*2\pi{r}}{360}$$&#xA;$$d_r = \frac{\theta*2\pi(r+A)}{360}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This simplifies to:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ \frac{d_r}{d_l} = \frac{\frac{\theta*2\pi(r+A)}{360}}{\frac{\theta*2\pi{r}}{360}} = \frac{r+A}{r}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Speed is just distance over time:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ \frac{V_r}{V_l} = \frac{d_r/t}{d_l/t} = \frac{r+A}{r}$$&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2013-07-16T18:02:14.867" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1606" PostTypeId="2" ParentId="1257" CreationDate="2013-07-16T23:51:39.800" Score="1" Body="&lt;p&gt;If someone gets an error relating to missing GLUT_Xmu_LIBRARY stuff after running &quot;cmake ..&quot; using Tom Bamber's instructions just install &quot;sudo apt-get install libxmu-dev libxi-dev&quot; and then cmake should work now.&lt;/p&gt;&#xA;" OwnerUserId="1655" LastActivityDate="2013-07-16T23:51:39.800" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1607" PostTypeId="1" AcceptedAnswerId="1608" CreationDate="2013-07-16T17:57:51.097" Score="4" ViewCount="197" Body="&lt;p&gt;I'm moving from controlling a robot arm with basic time based motors controlled using a raspberry pi and python to a more advanced robotic arm that has servos (e.g &lt;a href=&quot;http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Robotics/Hitec-HS-425BB-Servo-Specsheet.pdf&quot; rel=&quot;nofollow&quot;&gt;HS-425BB&lt;/a&gt;). With the time based motors I must constantly keep track of the arms position (guess work) and make sure it doesn't over turn.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do servos automatically stop if you give them a position that is outside of their boundaries rather than grinding the gears?&lt;/p&gt;&#xA;" OwnerUserId="1682" OwnerDisplayName="GreenGiant" LastEditorUserId="187" LastEditDate="2014-01-03T04:15:23.060" LastActivityDate="2014-01-08T13:28:27.563" Title="Do servos stop at their limits automatically?" Tags="&lt;rcservo&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1608" PostTypeId="2" ParentId="1607" CreationDate="2013-07-16T18:02:14.317" Score="2" Body="&lt;p&gt;Most PWM servos (including the one you indicated, the HS-425BB) do stop at their limits automatically. This can be useful for initial calibration as it allows you to move the servo to a known point.&lt;/p&gt;&#xA;" OwnerDisplayName="quinxorin" LastActivityDate="2013-07-16T18:02:14.317" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1609" PostTypeId="2" ParentId="1607" CreationDate="2013-07-16T18:07:13.490" Score="1" Body="&lt;p&gt;In general, servos don't stop unless you command them to (remove power). I'm not familiar with this model and the spec sheet is not clear.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;hope you get a better answer soon.&lt;/p&gt;&#xA;" OwnerDisplayName="edprochak" LastActivityDate="2013-07-16T18:07:13.490" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1610" PostTypeId="1" CreationDate="2013-07-17T00:50:36.413" Score="1" ViewCount="351" Body="&lt;p&gt;I'm a newbie to Electronics/ Robotics, but I love to do it as a hobby. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I want to build a circuit (a really small in size would be much better) with a motion sensor that can communicate data (Basically when it sense a motion send a signal) to my computer over Wifi. Is this something possible? &#xA;If so how do I do it, may be a schematics diagram, or someway to start the project would be a grate help.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you!!  &lt;/p&gt;&#xA;" OwnerUserId="1616" LastEditorUserId="1616" LastEditDate="2013-07-17T00:58:24.587" LastActivityDate="2013-07-17T00:58:24.587" Title="How to make a motion sensor circuit, that can communicate with my LAN?" Tags="&lt;sensors&gt;&lt;wifi&gt;&lt;communication&gt;&lt;circuit&gt;" AnswerCount="0" CommentCount="8" ClosedDate="2013-07-22T10:57:48.053" ContentLicense="CC BY-SA 3.0" />
  <row Id="1611" PostTypeId="5" CreationDate="2013-07-17T12:53:16.637" Score="0" Body="&lt;p&gt;Any device with electrical circuits.&lt;/p&gt;&#xA;" OwnerUserId="1309" LastEditorUserId="1309" LastEditDate="2013-07-17T15:38:46.337" LastActivityDate="2013-07-17T15:38:46.337" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1612" PostTypeId="4" CreationDate="2013-07-17T12:53:16.637" Score="0" Body="Any device with electrical circuits." OwnerUserId="1309" LastEditorUserId="1309" LastEditDate="2013-07-17T15:39:04.243" LastActivityDate="2013-07-17T15:39:04.243" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1613" PostTypeId="1" CreationDate="2013-07-17T15:23:10.513" Score="1" ViewCount="187" Body="&lt;p&gt;I am building a 2 wheel robot to carry 7KG of load. I used this &lt;a href=&quot;http://www.robotshop.com/dc-motor-selection.html?lang=en-us&quot; rel=&quot;nofollow&quot;&gt;link&lt;/a&gt; to get the torque required for each motor which is &lt;strong&gt;11Kg-cm&lt;/strong&gt;. So I choose 2 of these &lt;a href=&quot;http://www.robot-r-us.com/motor-brushed/planetary-gearhead-motor-12v-13.71-with-encoder.html&quot; rel=&quot;nofollow&quot;&gt;motor&lt;/a&gt; which has &lt;strong&gt;36Kg-cm&lt;/strong&gt;(2x more) torque. I noticed that the stall current is 14A. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can I use Adafruit Motor Shield for Arduino which is rated 3A peak current capability?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If not what current rating driver should look into?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!!&lt;/p&gt;&#xA;" OwnerUserId="1662" LastActivityDate="2013-08-27T18:50:40.910" Title="Motor driver selection" Tags="&lt;motor&gt;&lt;driver&gt;&lt;current&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1614" PostTypeId="1" AcceptedAnswerId="1691" CreationDate="2013-07-17T16:50:15.297" Score="2" ViewCount="613" Body="&lt;p&gt;We are using &lt;a href=&quot;http://code.google.com/p/ardu-imu/&quot; rel=&quot;nofollow noreferrer&quot;&gt;ArduIMU (V3)&lt;/a&gt; as our Quadrotor's inertial measurement unit. (we have a separate board to control all motors, not with ArduIMU itself). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now we have a problem with ArduIMU's sensors output. When we put our quadrotor steady on the ground with motors on, instead of getting 0 degree in roll and pitch we have a noisy output something like the image below( -6 to 6 degree error ):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/cd62D.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;delta_t = 0.2s&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We are sure that this isn't a mechanical problem, because we checked the mechanical joints and everything.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I should mention that with motors off everything is going well. Also we checked that if we vibrate the device slowly on yaw axis or any other axis, it still shows the noisy output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We are using DCM filter inside ArduIMU, also we tested with Kalman filter but no difference.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We also tested FRI low-pass filter, results is good but there is about 3 seconds delay in the output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We also checked that if we separate the ArduImu's power from our circuit, it still no difference.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What's the problem with ArduIMU and how we can get rid off this noisy output ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; &#xA;We think that the problem with our PID controller is because of these noises ... Is this a true assumption ? We can't tune our PID parameters ( using Ziegler–Nichols method ) when we have noisy data. We tested Ziegler–Nichols method when we have low rate noises and we successfully tuned our PID but when noise appears we are unable to tune PIDs. Is there anyway for us for tuning our PID in such situation ? Is this problem is because of the noises or the PID itself can get rid of them ?&lt;/p&gt;&#xA;" OwnerUserId="1137" LastEditorUserId="1137" LastEditDate="2013-07-19T06:10:48.373" LastActivityDate="2013-08-01T16:18:15.533" Title="ArduIMU noisy output in Quadrotor" Tags="&lt;arduino&gt;&lt;quadcopter&gt;&lt;noise&gt;&lt;ardupilot&gt;" AnswerCount="2" CommentCount="18" ContentLicense="CC BY-SA 3.0" />
  <row Id="1615" PostTypeId="1" CreationDate="2013-07-17T18:15:40.580" Score="8" ViewCount="242" Body="&lt;p&gt;I was at a Robotics conference earlier today and one of the speakers mentioned robots not being able to function as well in a crowd because they can't single out audio like a person can.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why can people single out audio so well?  And what would it take for a robot to do the same?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm aware of Active Noise Reduction (ANR) like on Bose Aviation headset, but that is not what I'm talking about.  I am thinking about the ability to take everything in but process only what you feel is important. &lt;/p&gt;&#xA;" OwnerUserId="1663" LastActivityDate="2013-07-22T19:39:31.133" Title="Why can Humans single out audio in a crowd? What would it take for a robot to do the same?" Tags="&lt;artificial-intelligence&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1616" PostTypeId="2" ParentId="1615" CreationDate="2013-07-17T19:55:10.570" Score="2" Body="&lt;p&gt;I think there are at least three things going on:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Filtering that is dependant on the location the sound is coming from.  Our stereo hearing combined with certain attributes of how our ears are built helps us isolate sound coming from a particular location/direction.&lt;/li&gt;&#xA;&lt;li&gt;Filtering that is dependant on the frequency/amplitude of the audio.&lt;/li&gt;&#xA;&lt;li&gt;The redundancy in the audio allows us to reconstruct the input.  If multiple people are speaking over each other (or generally in the presence of noise) we only need to catch a fraction of what's being said (or sometimes even observe visually) to know what is being said.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I would think that a robot can outperform humans on #1 and #2.  With a microphone array one would think you could effectively focus on a single point in space and eliminate all other interference.  That may be made more complicated by reflections and various other disturbances.  #3 is probably something that is harder for computers to do.&lt;/p&gt;&#xA;" OwnerUserId="1584" LastActivityDate="2013-07-17T19:55:10.570" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1617" PostTypeId="2" ParentId="1613" CreationDate="2013-07-17T20:41:19.767" Score="1" Body="&lt;p&gt;The Adafruit Motor Shield for Arduino should work, if two conditions are satisfied:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;the Adafruit Motor Shield for Arduino can limit its own current, or there's enough data available so that you can.&lt;/li&gt;&#xA;&lt;li&gt;the motor you want to use can generate sufficient torque on 3 amps&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The answer to (1) should come from the data for the Adafruit Motor Shield for Arduino.  The answer to (2) should come from the motor data (look for the motor torque constant.  It should be in (torque units)/(amp).  Given what the motor uses for torque units, it'll probably be in kg-cm/amp, however improper those units may be as a measure of torque.  Multiply that torque constant by 3A, and you have your answer for the motor.&lt;/p&gt;&#xA;" OwnerUserId="1411" LastActivityDate="2013-07-17T20:41:19.767" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1618" PostTypeId="1" AcceptedAnswerId="1621" CreationDate="2013-07-18T02:34:04.530" Score="4" ViewCount="2480" Body="&lt;p&gt;What is the minimum amount of power that a beaglebone needs to start up? This would be with no   peripherals attached besides host usb. The getting started guide claims that it can run off of a computer's usb power, but makes no mention of how many amps are actually needed. I saw a mention of older kernels limiting current draw to .5 amps when working off of usb, although that was all I could find. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could one start a BeagleBone Black off of .3 amps? If not, how many?&lt;/p&gt;&#xA;" OwnerUserId="1667" LastActivityDate="2013-07-18T11:05:11.023" Title="Beaglebone Black power draw" Tags="&lt;microcontroller&gt;" AnswerCount="1" CommentCount="0" ClosedDate="2013-07-18T12:47:07.873" ContentLicense="CC BY-SA 3.0" />
  <row Id="1619" PostTypeId="2" ParentId="1607" CreationDate="2013-07-18T04:42:58.463" Score="4" Body="&lt;p&gt;I have worked with quite a few servos (Industrial and RC) and from my experience they don't come with a limit switch that actually takes the current off the motor when they hit a limit. They are however limited in rotation by the PWM signal you send them and are as such limited to a rotation safe area. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It does become a bit more complicated when you link several servos into a robot arm as there is a chance that individual arm segments might hit each other or the ground or... . &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a reference feedback i recommend measuring the internal voltage over the servo reference potentiometer as outlined in the following link:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://forums.trossenrobotics.com/tutorials/how-to-diy-128/get-position-feedback-from-a-standard-hobby-servo-3279/&quot; rel=&quot;nofollow&quot;&gt;http://forums.trossenrobotics.com/tutorials/how-to-diy-128/get-position-feedback-from-a-standard-hobby-servo-3279/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This analog voltage gives you an indication of the actual servo position. This voltage can be sampled from eg. an Arduino board or any other board with an analog/digital converter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have done something similar with a hexapod robot, and it worked perfectly.&lt;/p&gt;&#xA;" OwnerUserId="1670" LastEditorUserId="2447" LastEditDate="2014-01-08T13:28:27.563" LastActivityDate="2014-01-08T13:28:27.563" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1620" PostTypeId="2" ParentId="1613" CreationDate="2013-07-18T10:58:05.790" Score="0" Body="&lt;p&gt;You could use it, but that would mean you will have to limit your power supply &lt;strong&gt;&lt;em&gt;a lot&lt;/em&gt;&lt;/strong&gt;. When your robot starts up, it will need a serious amount of power for the time it takes to accelerate, if you have a power supply of 12V, you will probably immediately burn out the motor driver you mentioned.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A motor driver that would work (from Sparkfun, I couldn't find a high power motor driver at Adafruit) is &lt;a href=&quot;https://www.sparkfun.com/products/10182&quot; rel=&quot;nofollow&quot;&gt;this shield&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, you could use these motors, with the shield you mentioned, but you will have to limit your power supply, and that is going to cost you: speed, acceleration, torque and a big headache. You are way better off getting a higher power shield.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am in no way affiliated with Sparkfun, I just knew they had a shield that will suit your needs.&lt;/p&gt;&#xA;" OwnerUserId="1520" LastEditorUserId="350" LastEditDate="2013-08-27T18:50:40.910" LastActivityDate="2013-08-27T18:50:40.910" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1621" PostTypeId="2" ParentId="1618" CreationDate="2013-07-18T11:05:11.023" Score="1" Body="&lt;p&gt;If the getting started guide claims you can run it of a computers USB port, it will work at about .5 amps. A normal computer power supply limits the current to a USB port to .5 amps. Doing some research on the Beaglebone Black's site &lt;a href=&quot;http://beagleboard.org/Support/FAQ&quot; rel=&quot;nofollow&quot;&gt;http://beagleboard.org/Support/FAQ&lt;/a&gt;, I found this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;When powered up over USB, the regulators are somewhat limited in what they can supply the system. Power over USB is sufficient as long as the software and system running perform some management to keep it under the USB current limit threshold.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;The recommended supply current is at least 1.2A (or 6W), but at least 2A (or 10W) is recommended if you are going to connect up anything over the USB. The actual power consumption will vary greatly with changes on the USB load.&lt;/em&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So it seems like the .5 amps from the computers USB port, is about as low as it gets.  &lt;/p&gt;&#xA;" OwnerUserId="1520" LastActivityDate="2013-07-18T11:05:11.023" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1622" PostTypeId="1" AcceptedAnswerId="1624" CreationDate="2013-07-18T02:20:07.367" Score="8" ViewCount="6887" Body="&lt;p&gt;How would you motorize the joints in an Iron Man suit? You need something fairly shallow, I would think, probably dual servos sitting on either side of an elbow or knee joint or either side of your hips, but how do you get motorized action there without dramatically adding to the thickness of the joint? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bicycle-style chain drives wouldn't work, I would think, since the length of the chain would need to vary depending on what position you're in for at least a lot of joints.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How would you motorize the joints?&lt;/p&gt;&#xA;" OwnerUserId="1676" OwnerDisplayName="Erik  Reppen" LastEditorUserId="350" LastEditDate="2013-07-18T18:10:51.003" LastActivityDate="2020-03-28T06:28:21.823" Title="How do I motorize the elbow socket and other joints in a powered exo-skeleton?" Tags="&lt;design&gt;&lt;mechanism&gt;" AnswerCount="3" CommentCount="13" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1623" PostTypeId="2" ParentId="1622" CreationDate="2013-07-18T03:32:12.027" Score="3" Body="&lt;p&gt;Erik, your wish is my command:   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;High torque pancake stepper motor&quot; comes to mind. Can you develop one, and a couple of extra's? :)  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Seriously, you're looking at a combination of technologies and disciplines.  Precision positioning of a &quot;High torque pancake stepper motor&quot; might be an acceptable direction, but it'll probably end up simply being the driver behind Nick Alexeev's (Terminator) hydraulics, after all, the back-hoe surely has its place in &quot;motive amplification,&quot; if I may use the term sloppily. :) &lt;/p&gt;&#xA;" OwnerUserId="1625" OwnerDisplayName="JoeFromOzarks" LastActivityDate="2013-07-18T03:32:12.027" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1624" PostTypeId="2" ParentId="1622" CreationDate="2013-07-18T06:47:17.703" Score="10" Body="&lt;p&gt;Addressing the &lt;strong&gt;shoulder joint&lt;/strong&gt;, which is rather more complicated than elbows and knees... After this one, the other joints become far simpler to visualize or engineer.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Here is how the ball and socket shoulder joint could work:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/EDy5z.jpg&quot; alt=&quot;Shoulder Joint&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Freedom of movement: Approximately 60 degrees end to end, all around. Less than for humans, but it can be tweaked to around 80 degrees without difficulty just by making the half-torus narrower.&lt;/li&gt;&#xA;&lt;li&gt;The static half-torus (shown in shiny steel here) is for strength, and would be joined to the torso exoskeleton by a rigid set of struts. Half torus = torus with an inner coaxial cylinder excised, tentative diameter of cylindrical hole 145 mm.&lt;/li&gt;&#xA;&lt;li&gt;The inner blued-steel hollow sphere is where the arm goes through, just beyond the actual shoulder. Tentative diameter of sphere 138mm, diameter of inner cylindrical hole 100 mm.&lt;/li&gt;&#xA;&lt;li&gt;Rings of little stepper motors on both front and hidden edges of half-torus, gripping inner hollow sphere. &lt;/li&gt;&#xA;&lt;li&gt;Stepper motors have outer ring rotor, inner stator, and rubberized omniwheel &quot;teeth&quot; to move the inner sphere.&lt;/li&gt;&#xA;&lt;li&gt;Inner sphere will of course be attached to a rigid exoskeleton matching the upper arm dimensions, up to the elbow joint. &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This is how the motors act upon the inner sphere, close up:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/qKl4e.jpg&quot; alt=&quot;Close-up of joint&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is how each omniwheel stepper motor will work:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/JI2KQ.jpg&quot; alt=&quot;Omniwheel Stepper&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The omniwheel design is required for the teeth to allow frictionless motion axial to the rotation direction.&lt;/p&gt;&#xA;" OwnerUserId="109" OwnerDisplayName="Anindo Ghosh" LastEditorUserId="109" LastEditDate="2013-07-19T07:29:46.483" LastActivityDate="2013-07-19T07:29:46.483" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="1625" PostTypeId="2" ParentId="1615" CreationDate="2013-07-18T18:26:20.893" Score="7" Body="&lt;p&gt;What the speaker said at the conference was not accurate.  Perhaps they meant &quot;&lt;em&gt;our robot&lt;/em&gt; can't single out audio like a person can&quot;, but the statement &quot;[robots] can't single out audio like a person can&quot; is false.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a partial list of systems that can determine the source of an audio signal, and track it:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Conference phones (and many cell phones), with technique(s) described in papers &lt;a href=&quot;http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.43.139&quot; rel=&quot;nofollow&quot;&gt;this one&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Gunfire_locator&quot; rel=&quot;nofollow&quot;&gt;Gunfire locators&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Underwater robots with towed microphone arrays, e.g. &lt;a href=&quot;http://acoustics.mit.edu/faculty/henrik/LAMSS/Pubs/poulsen_eickstedt_oceans06.pdf&quot; rel=&quot;nofollow&quot;&gt;the AUV described in this paper&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.fer.unizg.hr/_download/repository/kvalifikacijski_IvanMarkovic.pdf&quot; rel=&quot;nofollow&quot;&gt;Mobile land-based robots&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The term you're looking for is a &quot;phased array&quot; of microphones (see also: &lt;a href=&quot;http://www.mathworks.com/products/phased-array/examples.html?file=%2Fproducts%2Fdemos%2Fshipping%2Fphased%2Fmicrophonebeamformerdemo.html&quot; rel=&quot;nofollow&quot;&gt;Matlab phased array toolbox&lt;/a&gt;).  NASA uses phased arrays to &lt;a href=&quot;http://www.grc.nasa.gov/WWW/Acoustics/testing/instrumentation/arraymic.htm&quot; rel=&quot;nofollow&quot;&gt;localize the noise coming from spinning rotor fan blades&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2013-07-22T19:39:31.133" LastActivityDate="2013-07-22T19:39:31.133" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="1626" PostTypeId="2" ParentId="1614" CreationDate="2013-07-18T20:06:47.443" Score="3" Body="&lt;p&gt;&lt;strong&gt;This answer is incorrect (TaW)&lt;/strong&gt; It is based on IMU noise that's about 1000 times faster than it really is, based on a typo in the discussion following the original question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not a big fan of the Ziegler-Nichols method.  It's an ad-hoc method that is not only not guaranteed to stabilize all plants, it comes with a guarantee that there will be some plants that it cannot stabilize.  Furthermore, it has a history of coughing up an underdamped system.  Its only advantage seems to be that it comes up often in web searches.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would suspend the copter on one of the horizontal axes, parallel to the IMU, and I would tune the PID controller using the usual seat of the pants method (derivative, then proportional, then integral).  Then I'd go back and measure the frequency response of the thing (still tethered), and tune the PID properly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then I would repeat for the vertical axis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Only then would I cross my fingers, hold my breath, and go fly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For some reason, I seem to think that this is a good description of the seat of the pants PID tuning method:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.embedded.com/design/prototyping-and-development/4211211/PID-without-a-PhD&quot; rel=&quot;nofollow&quot;&gt;http://www.embedded.com/design/prototyping-and-development/4211211/PID-without-a-PhD&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With that much noise in the IMU output would bandlimit my differentiator.  That'll limit the bandwidth of your control loop, but if you don't do it then your differentiator will swamp out any other control signals.&lt;/p&gt;&#xA;" OwnerUserId="1411" LastEditorUserId="1411" LastEditDate="2013-07-20T05:02:15.110" LastActivityDate="2013-07-20T05:02:15.110" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1627" PostTypeId="1" AcceptedAnswerId="1629" CreationDate="2013-07-18T21:37:55.480" Score="20" ViewCount="21615" Body="&lt;p&gt;I've been thinking about starting a quadcopter project, maybe building it from scratch. One of the main barriers-to-entry for me is the motors: it seems like most quadcopters use brushless motors. I have some experience with DC motors and using PWM signals to regulate speed, but no experience with brushless motors. As I understand it, brushless motors are more expensive than the typical DC motor I would use on a land robot, and they also require Electronic Speed Controllers (ESCs), which seem to make them (from my perspective) even more expensive and more complicated to use.&lt;/p&gt;&#xA;&lt;p&gt;So, my question: what is it about brushless motors that make them useful in a quadcopter? Is it more torque, less weight, something to do with efficiency? And would it be significantly harder (or even possible) to achieve lift using DC motors instead?&lt;/p&gt;&#xA;" OwnerUserId="181" LastEditorUserId="19515" LastEditDate="2020-07-25T00:37:01.283" LastActivityDate="2020-07-25T00:37:01.283" Title="Why do quadcopters use brushless motors?" Tags="&lt;quadcopter&gt;&lt;brushless-motor&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="1628" PostTypeId="2" ParentId="1627" CreationDate="2013-07-18T22:13:09.930" Score="11" Body="&lt;p&gt;The brushless motors are way more powerful for their weight than available brushed motors, and they last longer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Power to weight ratio is king, in an aircraft.&lt;/p&gt;&#xA;" OwnerUserId="1411" LastActivityDate="2013-07-18T22:13:09.930" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1629" PostTypeId="2" ParentId="1627" CreationDate="2013-07-19T11:26:56.230" Score="19" Body="&lt;p&gt;Most motors on quadcopters are outrunners. In outrunner motors, the rotating part is on the outside, and not the inside (as opposed to the inrunner motors). Because of this layout this type of motors can generate much more torque. High torque is required for quadcopters, since you balance by changing the revolutions of the motor. The higher your torque the faster you can change the speed of your propellers. High torque also means you don't need a gearbox, and save a lot of mass. Outrunners are not very practical for brushed commutation, as it would require lots of wires and additional contacts. Hence most of the outrunners are brushless.&lt;/p&gt;&#xA;" OwnerUserId="127" LastActivityDate="2013-07-19T11:26:56.230" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1630" PostTypeId="1" AcceptedAnswerId="1632" CreationDate="2013-07-19T19:14:17.173" Score="2" ViewCount="1402" Body="&lt;p&gt;I have some crude time based motors taken from a robot arm that we upgraded to proper servos. I want to be able to power a conveyor belt with one of them and I was wondering how I would go about the following setup:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A ball drops through a hole onto the conveyer belt hitting a lever switch on its way through. This switch triggers the motor to start. When the ball gets to the top of the belt and falls off it hits another lever switch that turns the motor off.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I could handle this logic by hooking it up to my raspberry pi and using python to start and stop the motor depending on which GPIO pin received input (top or bottom lever). Or I could use a single lever and set a constant time interval to stop the motor. I would prefer to use both to handle any change in scale/construction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was wondering however if this could be done with the breadboard alone, using logic gates or similar?&lt;/p&gt;&#xA;" OwnerUserId="1682" LastEditorUserId="1429" LastEditDate="2013-09-15T10:28:45.957" LastActivityDate="2013-09-15T10:28:45.957" Title="Controlling a conveyor belt with a time based motor" Tags="&lt;motor&gt;&lt;raspberry-pi&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1631" PostTypeId="2" ParentId="1025" CreationDate="2013-07-19T19:48:25.337" Score="1" Body="&lt;p&gt;First of all, I know this is not an answer, however since I am a new user I cannot comment on Preetham's question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a very similar problem, however, when I first run roswtf, I get no errors but when I wait a bit after using rviz or trying to record a bagfile, the openni.launch terminal itself gives me this error:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;terminate called after throwing an instance of 'openni_wrapper::OpenNIException'&#xA;  what():  virtual void openni_wrapper::OpenNIDevice::startImageStream() @ /tmp/buildd/ros-groovy-openni-camera-1.8.8-0precise-20130418-2203/src/openni_device.cpp @ 224 : starting image stream failed. Reason: Xiron OS got an event timeout!&#xA;[camera_nodelet_manager-2] process has died [pid 3788, exit code -6, cmd /opt/ros/groovy/lib/nodelet/nodelet manager __name:=camera_nodelet_manager __log:=/home/rosbotics/.ros/log/16b63744-e043-11e2-ac16-080027486aa8/camera_nodelet_manager-2.log].&#xA;log file: /home/rosbotics/.ros/log/16b63744-e043-11e2-ac16-080027486aa8/camera_nodelet_manager-2*.log&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and roswtf  displays:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;unknown network error contacting node: timed out&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Warning These nodes have died:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;camera_nodelet_manager-2&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;found 2 errors&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ERROR The following nodes should be connected but aren't:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;/camera_base_link1-&gt;/camera_nodelet_manager (/tf)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;/camera_base_link-&gt;/camera_nodelet_manager (/tf)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;/camera_base_link3-&gt;/camera_nodelet_manager (/tf)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;/camera_base_link2-&gt;/camera_nodelet_manager (/tf)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;ERROR Errors connecting to the following services: (then it displays a lot of services)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At first After looking around a bit I thought it was a problem with openni and tried using freenect instead, however that too gave a black screen. Then I tried using something completely unrelated to ros, freenect-glview, however that too gave me a black screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;lsusb shows that all 3 parts of the kinect are connected and I've been able to control the kinect's motor through ubuntu so I know that there is at least a connection established between both.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am using ubuntu 12.04 and ROS-Groovy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would appreciate anyone's help on the matter.&lt;/p&gt;&#xA;" OwnerUserId="1681" LastActivityDate="2013-07-19T19:48:25.337" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1632" PostTypeId="2" ParentId="1630" CreationDate="2013-07-19T21:14:34.010" Score="0" Body="&lt;p&gt;To control the motor with logic gates, you could make a circuit with a monostable multivibrator (or  “one-shot”), an R-S flipflop (or R-S latch), and an AND gate or an OR gate to combine the one-shot and latch outputs.  You would use an AND if you want the motor to run when both the latch and the one-shot are active, &lt;em&gt;vs&lt;/em&gt; an OR to make the motor run when either of them is active.  Whether to use AND or OR depends on what error conditions you want to detect or handle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An &lt;a href=&quot;http://en.wikibooks.org/wiki/Electronics/Flip_Flops#RS_Flip_Flop&quot; rel=&quot;nofollow&quot;&gt;R-S flipflop&lt;/a&gt; is easily made using two NAND gates, &lt;em&gt;ie&lt;/em&gt; half of the gates in the quad NAND 74LS00.  A one-shot also can be made &lt;a href=&quot;http://www.electronics-tutorials.ws/sequential/seq_3.html&quot; rel=&quot;nofollow&quot;&gt;using  two NANDs&lt;/a&gt; (see “Simple NAND Gate Monostable Circuit” at about 1/3 thru page), or you can use a 74121, 74221, etc.  The 555 also is often used as a &lt;a href=&quot;http://www.circuitstoday.com/555-timer-as-monostable-multivibrator&quot; rel=&quot;nofollow&quot;&gt;monostable multivibrator&lt;/a&gt;, and can also be &lt;a href=&quot;http://www.edaboard.com/thread142724.html&quot; rel=&quot;nofollow&quot;&gt;used as an R-S flipflop&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, you could use two 7400 packages for the circuit, or could use one 7400 and one 556 (which is a dual 555).  Circuits with NAND gates can be simulated by hand or in &lt;a href=&quot;http://www.neuroproductions.be/logic-lab/&quot; rel=&quot;nofollow&quot;&gt;online simulators&lt;/a&gt;. &lt;a href=&quot;https://www.circuitlab.com/circuit/e38756/555-timer-as-astable-multivibrator-oscillator/&quot; rel=&quot;nofollow&quot;&gt;Some simulators&lt;/a&gt; also simulate 555's.&lt;/p&gt;&#xA;" OwnerUserId="478" LastActivityDate="2013-07-19T21:14:34.010" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1633" PostTypeId="1" AcceptedAnswerId="1643" CreationDate="2013-07-19T22:01:54.720" Score="6" ViewCount="1333" Body="&lt;p&gt;Whenever I try using &lt;code&gt;openni_launch&lt;/code&gt;, it works normally, however, when I try viewing an image using the kinect's rgb or depth camera, or even recording a simple &lt;code&gt;bagfile&lt;/code&gt; with data from the kinect, I am unable to see any picture and &lt;code&gt;rosbag&lt;/code&gt; does not record any data, and after a few seconds of running &lt;code&gt;image_view&lt;/code&gt; or &lt;code&gt;rosbag record&lt;/code&gt;, I got this error:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;terminate called after throwing an instance of 'openni_wrapper::OpenNIException'&#xA;  what():  virtual void openni_wrapper::OpenNIDevice::startImageStream() @ /tmp/buildd/ros-groovy-openni-camera-1.8.8-0precise-20130418-2203/src/openni_device.cpp @ 224 : starting image stream failed. Reason: Xiron OS got an event timeout!&#xA;[camera_nodelet_manager-2] process has died [pid 3788, exit code -6, cmd /opt/ros/groovy/lib/nodelet/nodelet manager __name:=camera_nodelet_manager __log:=/home/rosbotics/.ros/log/16b63744-e043-11e2-ac16-080027486aa8/camera_nodelet_manager-2.log].&#xA;log file: /home/rosbotics/.ros/log/16b63744-e043-11e2-ac16-080027486aa8/camera_nodelet_manager-2*.log&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;After searching around and trying various fixes, I figured it might be a problem with openni and started using freenect, however I encountered the same problems, I could not record any data using bagfiles or see any images from the kinect (using &lt;code&gt;rviz&lt;/code&gt; or &lt;code&gt;image_view&lt;/code&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then someone asked me to use something completely unrelated, &lt;code&gt;freenect-glview&lt;/code&gt;, however that too gave me a black screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;lsusb&lt;/code&gt; shows that all 3 parts of the kinect are connected and I've been able to control the kinect's motor through ubuntu so I know that there is at least a connection established between both.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additional Info:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;I run ROS on Ubuntu using VirtualBox V.4.2.14 and Windows 7 with USB 2 ports&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I am using ubuntu 12.04 and ROS-Groovy (all up to date)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I've had the exact same errors on my Mac OSX Lion&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;When I try using Rviz with the kinect, VirtualBox crashes all together&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I would appreciate anyone's help on the matter.&lt;/p&gt;&#xA;" OwnerUserId="1681" LastEditorUserId="37" LastEditDate="2013-07-20T18:49:13.420" LastActivityDate="2013-07-22T22:10:46.177" Title="How can I get data from my kinect?" Tags="&lt;ros&gt;&lt;kinect&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1634" PostTypeId="1" CreationDate="2013-07-20T15:49:55.773" Score="1" ViewCount="503" Body="&lt;p&gt;Im designing a differential steering mechanism for my robot. Supposing my robot is going in a straight line and I want it to change it direction by a certain angle( $θ$ in the diagram). What should the velocity ratio be of the 2 wheels so that it gradually turns and starts moving along a line that is $θ$ degrees to the initial line of movement?&#xA;If there's any ambiguity in the question please take a look at my earlier question which is similar. &lt;a href=&quot;https://robotics.stackexchange.com/questions/1602/how-to-design-a-differential-steering-mechanism&quot;&gt;How to design a differential steering mechanism?&lt;/a&gt;&#xA;&lt;img src=&quot;https://i.stack.imgur.com/a0vKQ.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="1650" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2013-07-20T20:59:55.350" Title="How to control velocity ratio when turning angle is θ?" Tags="&lt;kinematics&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="1635" PostTypeId="2" ParentId="1634" CreationDate="2013-07-20T20:59:55.350" Score="1" Body="&lt;p&gt;In your &lt;a href=&quot;https://robotics.stackexchange.com/q/1602/350&quot;&gt;previous question&lt;/a&gt;, we calculated the &lt;s&gt;velocity&lt;/s&gt; speed ratio that would be required to make a turn of a given radius.  I'm going to reuse those formulas with &lt;em&gt;inner&lt;/em&gt; and &lt;em&gt;outer&lt;/em&gt; replacing &lt;em&gt;left&lt;/em&gt; and &lt;em&gt;right&lt;/em&gt;, and $d_{axle}$ replacing $A$.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In those terms, the ratio of the outer wheel's speed to the inner wheel's speed is still what it was before:&#xA;$$\frac{v_{outer}}{v_{inner}} = \frac{r+d_{axle}}{r}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, in this question, you're trying to determine how much time should pass with the wheels turning at those speeds (in other words, following a circular path of a given $r$) before you come to a desired turning angle of $\theta$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the distance equation from before:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$d_{inner} = \frac{\theta*2\pi{r}}{360}$$&#xA;$$v_{inner} = \frac{d_{inner}}{t} = \frac{\theta*2\pi{r}}{360*t}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, solving for $t$:&#xA;$$ t = \frac{\theta*2\pi{r}}{360*v_{inner}}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is essentially saying &quot;how long will it take me to travel along a circular arc defined by $r$ and $\theta$ if I move at the given speed $v_{inner}$&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now for the bad news: &lt;strong&gt;achieving this is impossible in practice&lt;/strong&gt;.  The equations above are assuming that your acceleration is infinite, meaning that you would change your speed from $0$ to $v_{inner}$ instantly.  This has never happened.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you need to be sure that you've reached a desired heading, you'll need to start working with sensors.  A GPS, a compass, or even wheel odometry would be good places to start.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2013-07-20T20:59:55.350" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1636" PostTypeId="2" ParentId="1584" CreationDate="2013-07-21T04:45:31.300" Score="4" Body="&lt;p&gt;Is it possible to use multiple ultrasonic sensors on a single robot? Yes: &lt;a href=&quot;http://www.societyofrobots.com/sensors_sonar.shtml&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;Using Multiple Sonar Sensors&quot;&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you have already figured out, one sensor often receives echoes of pings sent by another sensor.&#xA;There are several ways to deal with cross-sensitivity, roughly in order of simplest first:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Ping only one transducer at a time, ignoring all the other transducers while waiting for the &quot;ghost echoes&quot; from the current transducer to die down before pinging the next transducer. This is much faster than mechanically rotating a single transducer. Perhaps this will be fast enough, unless your robot is ramming into things at nearly the speed of sound.&lt;/li&gt;&#xA;&lt;li&gt;Use relatively narrow beam angle transmitters or receivers (or both) per sensor, and increase the angle from one sensor to the next so one sensor can't hear the echo from another (unless the stuff in front of the transducer causes some weird lateral reflections)&amp;nbsp;— sensors angled apart roughly the same as the beam angle. Alas, this leaves &quot;blind spots&quot; between transducers where objects can't be seen by any transducer.&lt;/li&gt;&#xA;&lt;li&gt;Some combination — for example, increase the angle from one sensor to another so one sensor only hears echoes from its 2 neighbors (about half the beam angle); then alternate between pinging the even transducers (ignoring the odd transducers) and pinging the odd transducers (ignoring the even transducers).&lt;/li&gt;&#xA;&lt;li&gt;Each transducer operating at a different frequency. Alas, all the low-cost ultrasonic transducers, with &lt;a href=&quot;http://www.newark.com/multicomp/mcpct-g5120-4140/ultrasonic-transducer/dp/25R0960?in_merch=Popular%20Products&quot; rel=&quot;nofollow noreferrer&quot;&gt;few exceptions&lt;/a&gt;, are tuned to resonate at 40 kHz. When listening to a variety of signals, these transducers can only &quot;hear&quot; signals that are within a few kHz of 40 kHz. You'll have to balance (a) The further away from 40 kHz you use on a transducer designed for 40 kHz, the less sensitive it is, so you want a frequency &quot;relatively close&quot; to 40 kHz; and (a) The closer all the frequencies are together, the more difficult it is to discriminate between them, so you want a set of frequencies that are spread &quot;relatively far apart&quot;. I don't know if there is a good compromise or not&amp;nbsp;— if not, you're stuck with (c) use more expensive sensors tuned to other frequencies, or more expensive &lt;a href=&quot;http://search.digikey.com/us/en/products/SPM0404UD5/423-1086-1-ND/1587388&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;wide-bandwidth&quot; sensors&lt;/a&gt; not tuned to any particular frequency.&lt;/li&gt;&#xA;&lt;li&gt;Use various transmit timings to rule out ghost echoes. Say you transmit from the left, delay 2 ms (not nearly enough to let the echoes die down), then transmit from the right,... after the echoes die down, then transmit from the left, delay 3 ms, then transmit from the right. If the right receiver gets an echo back 5 ms later both times, then you can be pretty sure it's a real echo; if the right receiver gets an echo back 5 ms later the first time, 6 ms later the second time, it's probably a ghost from the left receiver. (There are much more sophisticated &quot;spread spectrum&quot; techniques for separating out many transmitters all using the same frequency at the same time.)&lt;/li&gt;&#xA;&lt;li&gt;Combine the signals from all the receivers. If you have one central transmitter that pings in all directions (or equivalently you have transmitters pointed in every direction, and you ping them all at the same instant), and the first echo you get back hits the left receiver first (then later the right receiver hears an echo), you know that the nearest obstacle is closer to the left side than the right side. (There are more sophisticated &quot;phased array&quot; techniques that combine signals from all the receivers, and even more sophisticated &quot;beamforming&quot; techniques for slightly adjusting the transmit times of all the transmitters.)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;P.S.: Have you seen &lt;a href=&quot;http://www.societyofrobots.com/member_tutorials/node/71&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;Infrared vs. Ultrasonic — What You Should Know&quot;&lt;/a&gt; ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Yes, I've said this all before, at &lt;a href=&quot;https://electronics.stackexchange.com/questions/24835/multiple-ultrasonic-rangefinder-question&quot;&gt;&quot;Multiple Ultrasonic Rangefinder Question&quot;&lt;/a&gt;.)&lt;/p&gt;&#xA;" OwnerUserId="187" LastEditorUserId="-1" LastEditDate="2017-04-13T12:33:08.317" LastActivityDate="2013-12-31T03:22:58.930" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1637" PostTypeId="1" AcceptedAnswerId="1640" CreationDate="2013-07-21T17:33:49.660" Score="-2" ViewCount="233" Body="&lt;p&gt;I am a graduate student trying to make my own Line follower Robot for my minor assessment, I've all &lt;strong&gt;hardware&lt;/strong&gt; parts and all &lt;strong&gt;data-sheets&lt;/strong&gt; with me, I've attended a workshops of Robotics and studied a lot on &lt;strong&gt;Line follower robot&lt;/strong&gt;. I have a good knowledge of C Programming and Embedded systems, but the problem is I've a very &lt;strong&gt;limited amount&lt;/strong&gt; of time(2 days).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please help me to suggest a good paper work about my Project - Line follower robot, where should I start from ? I am getting myself confused should I start from &lt;strong&gt;Programming&lt;/strong&gt; or should I first do circuit &lt;strong&gt;simulations&lt;/strong&gt; as I know It is not a better approach to use directly hardware. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please suggest me a fine &lt;strong&gt;Paper work&lt;/strong&gt; or some links/videos so that I can make my Robotics projects fast. Any help would be really appreciated, Thanks.&lt;/p&gt;&#xA;" OwnerUserId="1558" LastActivityDate="2013-07-21T21:36:16.453" Title="Paper work before I do make my own Line follower Robot" Tags="&lt;mobile-robot&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2013-07-22T10:55:51.467" ContentLicense="CC BY-SA 3.0" />
  <row Id="1638" PostTypeId="1" AcceptedAnswerId="1639" CreationDate="2013-07-21T18:33:28.620" Score="6" ViewCount="311" Body="&lt;p&gt;I have been looking online for a while, and I cannot seem to find any steppers without any torque ratings. (&lt;strong&gt;Operating torque, not holding torque.&lt;/strong&gt;) I even looked on hobby sites that usually have all the ratings, including Adafruit and Sparkfun. I only have found one ever that said the operating torque, however, it didn't seem that reputable and it didn't have holding torque, so it might be likely that it's a mistake. I might contact them and ask.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Am I missing something? Can I calculate what it will run at with certain factors? (How long in between each step, etc.)&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason that I say that is I found a tutorial saying how much &lt;em&gt;torque&lt;/em&gt; (didn't specify which kind, but I kinda assume it isn't holding) you need for a CNC machine (what I'm building).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Equation (From &lt;a href=&quot;http://buildyourcnc.com/torquemotion.aspx&quot;&gt;this&lt;/a&gt; site):&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Torque = ((weight)(inches/revolution))/2(pi)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Also on the page:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;By the way, we are talking about torque during a continual turning motion, not at a holding position.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That seems like operating torque, but what makes it the most confusing is they sell steppers and they only list the holding.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;What am I missing?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="824" LastActivityDate="2013-07-27T04:53:20.023" Title="WHY are there no operating torque specifications on steppers?" Tags="&lt;stepper-motor&gt;&lt;cnc&gt;" AnswerCount="3" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1639" PostTypeId="2" ParentId="1638" CreationDate="2013-07-21T21:32:06.780" Score="3" Body="&lt;p&gt;Stepper motors are nasty little beasts and I don't like them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Actually, stepper motors are perfectly good as far as they go, but there are subtleties involved in selecting them and running them -- and I've had a couple of projects where the incorrect motor was chosen, then the problem of driving it was dumped unceremoniously in my lap.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given a stepper motor without feedback, if you ask for too much torque from the motor then it will slip, and you won't have any clue where your mechanism is until you home it again.  Given a stepper motor &lt;em&gt;with&lt;/em&gt; feedback, you have all the pieces you need to use a DC motor, perhaps with a gearbox, in a smaller package that won't get as hot.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;You want to design your mechanism with lots of torque overhead.  The article that ott references says you got a guideline to overdesign by a factor of 2 -- that's probably wise, unless you really flog the numbers, test the snot out of things, and are ready to fail anyway.&lt;/li&gt;&#xA;&lt;li&gt;With constant-voltage drive, torque drops with speed.  I believe that this is mostly due to the inductance of the motor, which is listed in the good data sheets.  Fancy stepper drives are current-controlled, to try to drive the current to the data sheet value quickly, in spite of the stepper's inductance (and maybe back-EMF).  They do this by driving higher voltage into the stepper than its continuous-duty rating.&lt;/li&gt;&#xA;&lt;li&gt;More subtly, accelerating a mechanism requires torque, and decelerating it requires torque in the other direction.  If you're trying for speedy transitions this can make a stepper slip.  You need to calculate the acceleration that you can achieve, and stay below it both coming and going.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="1411" LastActivityDate="2013-07-21T21:32:06.780" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="1640" PostTypeId="2" ParentId="1637" CreationDate="2013-07-21T21:36:16.453" Score="1" Body="&lt;p&gt;Two days?  Eeek!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wouldn't try to simulate the thing at a circuit level.  If you're an EE and you're familiar with circuit simulation packages then using SPICE (or whatever) to simulate the &lt;em&gt;system&lt;/em&gt; may let you slide by with an acceptable performance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Personally, if I were designing one of these for money, I'd probably simulate it in Scilab, possibly using Xcos -- but that's because I'm familiar with that tool.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given your limited time I wouldn't try to do more than make something that follows straight lines and gentle curves at some fixed speed.&lt;/p&gt;&#xA;" OwnerUserId="1411" LastActivityDate="2013-07-21T21:36:16.453" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1641" PostTypeId="2" ParentId="235" CreationDate="2013-07-22T14:55:05.883" Score="2" Body="&lt;p&gt;Definitely rigidly mounted to make use of the batteries mass for vibration damping but where?&#xA;Depends if you want an agile acrobatic machine or a stable camera platform. Spread the mass out if you want to reduce the wobbles in turbulence.&lt;/p&gt;&#xA;" OwnerUserId="1693" LastActivityDate="2013-07-22T14:55:05.883" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1642" PostTypeId="1" CreationDate="2013-07-22T16:25:55.013" Score="6" ViewCount="1556" Body="&lt;p&gt;I need  my robotic arm to ring a desk bell. &lt;a href=&quot;http://www.maplin.co.uk/robotic-arm-kit-with-usb-pc-interface-266257&quot; rel=&quot;nofollow noreferrer&quot;&gt;I one on the maplins site  usb robotic arm.&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It does seem very slow.  What can I hack on it to boost the downwards and upwards speed. I need it hit the bell tip/platform quickly once or twice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/9tJZC.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;This is purely a LOL project for work. Ever time we get an order we want the arm to ring the bell. :)&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/X3imO.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-EDIT&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the gearbox assembly - And it much much to slow - What can i change in here to speed up one gearbox by at least 4 times?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The grabber gearbox is different though. The gear marker P7 is white and seems to move the grabbers at a faster speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/4pUS5.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="233" LastEditorUserId="233" LastEditDate="2013-07-30T08:38:10.607" LastActivityDate="2013-07-30T08:38:10.607" Title="How to speed up robotic arm?" Tags="&lt;robotic-arm&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1643" PostTypeId="2" ParentId="1633" CreationDate="2013-07-22T22:10:46.177" Score="0" Body="&lt;p&gt;It turns out VirtualBox was causing everything to not work properly for some reason. Now I'm using VMware and everything's running fine. What confused me was that I was getting errors that I found online and that even after trying every fix I could find some would still be there. Next step is getting XYZ coordinates of a moving robot, I'll start looking for tutorials right away (I'm still new to ros).&lt;/p&gt;&#xA;" OwnerUserId="1681" LastActivityDate="2013-07-22T22:10:46.177" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1644" PostTypeId="1" CreationDate="2013-07-22T22:20:23.120" Score="1" ViewCount="35" Body="&lt;p&gt;On my stepper's &lt;a href=&quot;http://download.lulzbot.com/AO-100/hardware/electronics/spec_sheets/SY42STH47-1504A_stepperMotors.pdf&quot; rel=&quot;nofollow&quot;&gt;datasheet&lt;/a&gt;, it has the category &quot;rotor torque&quot; (labeled in N-CM). &lt;strong&gt;What does that mean? Is this the torque it has can supply when turning? (Hopefully)&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="824" LastActivityDate="2013-07-22T22:20:23.120" Title="What is rotor torque?" Tags="&lt;torque&gt;&lt;stepper-motor&gt;" AnswerCount="0" CommentCount="1" ClosedDate="2013-07-24T07:49:35.130" ContentLicense="CC BY-SA 3.0" />
  <row Id="1645" PostTypeId="2" ParentId="1642" CreationDate="2013-07-22T23:03:15.253" Score="1" Body="&lt;p&gt;Since the website for the arm doesn't provide useful technical specs. you will have to do some investigating yourself to figure out how to boost the speed. Some knowledge of electronics knowledge is required and it may not be a simple change.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first thing to do would be to find out what is currently bottle-necking the speed. &#xA;It could be due to&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the motors themselves (underated for the performance that you want)&lt;/li&gt;&#xA;&lt;li&gt;current limiting circuitry on the control board (eg. low current voltage regulators)&lt;/li&gt;&#xA;&lt;li&gt;current limiting power supply (eg. low current wall adapter)&lt;/li&gt;&#xA;&lt;li&gt;The software that controls the arm&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;You can investigate by using a digital multimeter to measure the current at different parts of the control board to see where the bottleneck is. Doing a google search for the part(s) where the bottleneck occurs can get you more information so that you could buy a higher power version that will perform the same tasks. For example, swapping out a 5V 1A DC voltage regulator for a 5V 10A regulator. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the motors are the bottleneck then you can just try and replace them with higher rated motors.&lt;/p&gt;&#xA;" OwnerUserId="983" LastEditorUserId="983" LastEditDate="2013-07-24T17:51:02.883" LastActivityDate="2013-07-24T17:51:02.883" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="1646" PostTypeId="2" ParentId="1642" CreationDate="2013-07-23T02:29:07.403" Score="5" Body="&lt;p&gt;You might be able to speed up the arm's movement in a purely mechanical way -- non-invasively.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, you could extend the arm and use the rotation of the base to ring the bell.  Or, you could coordinate the movements of all the joints to make the gripper pass the bell at a maximum speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another way to do it could be to have the gripper pick up a long rod and use that to ring the bell.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2013-07-23T14:45:06.283" LastActivityDate="2013-07-23T14:45:06.283" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1648" PostTypeId="2" ParentId="1638" CreationDate="2013-07-23T18:31:54.420" Score="3" Body="&lt;p&gt;I have never seen a stepper motor manufacturer &lt;strong&gt;not&lt;/strong&gt; specify the torque vs. speed.  I'm not sure where you've looked but a lot of people re-sell various random equipment to hobbyists without providing the same level of information.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These graphs look like this one (&lt;a href=&quot;http://www.orientalmotor.com/products/pdfs/2012-2013/A/usa_st_overview.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;source&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/XijM8.png&quot; alt=&quot;Stepper torque vs. speed&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The way you drive steppers has a large influence on their performance.  The DC bus voltage you use, whether or not it's a constant current driver and whether or not you're micro-stepping all have an influence.  The vendor will state the conditions under which this curve was measured.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're using a stepper in open loop (stepper motors can be used in closed loop servo just like their brushless DC cousins) you want to have adequate torque margin to ensure you never lose a step.  A rule of thumb is x2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Examples of some vendors are: &lt;a href=&quot;http://www.orientalmotor.com/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Oriental Motor&lt;/a&gt;, &lt;a href=&quot;http://www.electrocraft.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;ElectroCraft&lt;/a&gt; (formerly Eastern Air Devices).&lt;/p&gt;&#xA;" OwnerUserId="1584" LastActivityDate="2013-07-23T18:31:54.420" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1649" PostTypeId="1" CreationDate="2013-07-24T00:08:28.877" Score="8" ViewCount="1154" Body="&lt;p&gt;I have a APM 3DR Quad with a 3DR radio telemetry kit.  I would like to send real-time sonar data to my laptop (running Windows 7) in order to manipulate it in an additional Arduino Sketch.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The sonar sensor is connected to an Analog In channel on my Arduino. That data is processed for altitude calculations, and I would like to send this altitude data to some sort of ground station on my computer through the use of a telemetry kit (2 3DR Radios: 1 on the quadcopter and 1 on my computer).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not quite sure how to go about this task.  Is there a way that I can modify the source code (GCS.h or GCS_Mavlink.pde) in conjunction with Mission Planner Mav 1.0 ground station to do this?  Or would I need to write a python module to accomplish this?  &lt;/p&gt;&#xA;" OwnerUserId="1702" LastEditorUserId="37" LastEditDate="2013-07-24T08:36:54.643" LastActivityDate="2014-06-28T05:09:23.107" Title="How can I manipulate real-time sonar data from my Arducopter in Arduino?" Tags="&lt;quadcopter&gt;&lt;python&gt;&lt;sonar&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1650" PostTypeId="2" ParentId="758" CreationDate="2013-07-24T10:31:20.937" Score="3" Body="&lt;p&gt;Actually at the University of Pisa, Centro Piaggio, Italy, we discovered this years ago while working with a human-like robot and presented it at the conference for Autism in Catania, Sicily in 2010.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.ilc.cnr.it/~ferro/publications/Roboethics__Human_Robot_Interaction_in_Autism.pdf&quot; rel=&quot;nofollow&quot;&gt;Human-Robot Interaction in Autism&lt;/a&gt; (PDF)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="1705" LastEditorUserId="350" LastEditDate="2013-09-13T15:17:24.780" LastActivityDate="2013-09-13T15:17:24.780" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1653" PostTypeId="1" AcceptedAnswerId="1679" CreationDate="2013-07-25T07:54:49.897" Score="15" ViewCount="14985" Body="&lt;p&gt;&lt;strong&gt;How do you calculate or update the position of a differential drive robot with incremental sensors?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is one incremental sensor attatched to each of the two differential wheels. Both sensors determine the distance $\Delta left$ resp. $\Delta right$ their wheel has rolled during a known time $\Delta t$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, let's assume the center between both wheels marks the position of the robot. In this case, one could calculate the position as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;x = \frac{x_{left}+x_{right}}{2} \\&#xA;y = \frac{y_{left}+y_{right}}{2}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;Deriving&quot; those equations under the assumption that both wheels rolled in a straight line (which should be approximately correct for small distances) I get:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\frac{\Delta x}{\Delta t} = \frac{1}{2}\left( \frac{\Delta left}{\Delta t} + \frac{\Delta right}{\Delta t}\right)cos(\theta) \\&#xA;\frac{\Delta y}{\Delta t} = \frac{1}{2}\left( \frac{\Delta left}{\Delta t} + \frac{\Delta right}{\Delta t}\right)sin(\theta)&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where $\theta$ is the angle of orientation of the robot. For the change of this angle I found the equation&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\frac{\Delta \theta}{\Delta t} = \frac{1}{w} \left( \frac{\Delta left}{\Delta t} - \frac{\Delta right}{\Delta t}\right)&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where $w$ is the distance between both wheels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because $\Delta x$ and $\Delta y$ depend on $\theta$, I wonder whether I should first calculate the new $\theta$ by adding $\Delta \theta$ or if I should rather use the &quot;old&quot; $\theta$ ? &lt;strong&gt;Is there any reason to use one over the other?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, let's now assume the center between both wheels does &lt;em&gt;not&lt;/em&gt; mark the position of the robot. Instead I want to use a point which marks the geometric center of the robot's bounding box. Then $x$ and $y$ change to:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;x = \frac{x_{left}+x_{right}}{2} + l\, cos(\theta)\\&#xA;y = \frac{y_{left}+y_{right}}{2} + l\, sin(\theta)&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;Deriving&quot; the first gives:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\frac{\Delta x}{\Delta t} = \frac{1}{2}\left( \frac{\Delta left}{\Delta t} + \frac{\Delta right}{\Delta t}\right)cos(\theta) - l\,sin(\theta)\,\frac{\Delta \theta}{\Delta t}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now there is a dependance on $\Delta \theta$. &lt;strong&gt;Is this a reason to use the &quot;new&quot; $\theta$ ?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Is there any better method to do simulatenous update of position and orientation?&lt;/strong&gt; May be using complex numbers (same approach as with quaternions in 3D?) or homogeneous coordinates?&lt;/p&gt;&#xA;" OwnerUserId="720" LastActivityDate="2014-07-23T04:53:45.397" Title="Calculate position of differential drive robot" Tags="&lt;mobile-robot&gt;&lt;kinematics&gt;&lt;motion&gt;&lt;two-wheeled&gt;&lt;forward-kinematics&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="1654" PostTypeId="1" AcceptedAnswerId="1657" CreationDate="2013-07-25T16:30:23.483" Score="12" ViewCount="21268" Body="&lt;p&gt;What is the difference between a Robot and a Machine? At what point does a machine begin to be called a robot?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it at a certain level of complexity? Is it when it has software etc?.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For instance: A desktop printer has mechanics, electronics and firmware but it is not considered a robot (or is it). A Roomba has the same stuff but we call it a robot. So what is the difference.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have always believed that a robot is a robot when it takes input from it's environment and uses it to make decisions on how to affect it's environment; i.e. a robot has a feedback loop.&lt;/p&gt;&#xA;" OwnerDisplayName="user797" LastEditorUserId="37" LastEditDate="2013-07-29T14:33:08.380" LastActivityDate="2018-10-22T13:12:04.260" Title="What is the difference between a Robot and a Machine?" Tags="&lt;industrial-robot&gt;" AnswerCount="7" CommentCount="7" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1655" PostTypeId="2" ParentId="1653" CreationDate="2013-07-25T18:27:02.080" Score="2" Body="&lt;p&gt;For a repeated calculation, it doesn't matter whether you find $\Delta\theta$ before or after you apply $\theta$ to the $\Delta{x}, \Delta{y}$ calculation.  You will always be alternating between a position and an orientation calculation.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a practical sense, it might be better to calculate $\Delta\theta$ after you calculate $\Delta{x}, \Delta{y}$, since your first iteration through the loop requires an initial value of $\theta$.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Remember that this is an error-prone measurement method anyway -- it's a pair of 1D measurements feeding a 2D approximation of a 3D world.  Even if you are able to get a $\Delta{t}$ very close to $0$, it still won't account for wheel slippage and uneven terrain.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2013-07-26T15:00:43.490" LastActivityDate="2013-07-26T15:00:43.490" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1656" PostTypeId="2" ParentId="1654" CreationDate="2013-07-25T18:53:53.307" Score="9" Body="&lt;p&gt;As @Shahbaz points out this is a highly philosophical question though it does get to the core of the field of robotics. &lt;a href=&quot;http://www.cs.utah.edu/%7Ejmh/&quot; rel=&quot;noreferrer&quot;&gt;Dr. John Hollerbach&lt;/a&gt; begins his &lt;a href=&quot;http://www.eng.utah.edu/%7Ecs5310/chapters.html&quot; rel=&quot;noreferrer&quot;&gt;Intro to Robotics notes&lt;/a&gt; as follows:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What is a robot? In 1980, the Robot Institute of America (RIA), an industrial trade group, came up with the following definition:&lt;/p&gt;&#xA;&lt;p&gt;&amp;quot;A robot is a reprogrammable multifunctional manipulator designed to move material, parts, tools, or specialized devices through variable programmed motions for the performance of a variety of tasks.&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;These days, this definition would be considered too restrictive, as it reflects the concentration of the RIA on robot manipulators on an assembly line. Robotics has broadened over the years in many ways: to include mobility platforms, to address the service sector as well as the manufacturing sector, and to incorporate man-machine interactions, not just autonomy, in telerobotic and virtual reality systems.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Ultimately he does not offer an alternative definition outright, that I recall. Instead he discusses the elements of a robot system which he lists as:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Mechanical Structure&lt;/li&gt;&#xA;&lt;li&gt;Actuators&lt;/li&gt;&#xA;&lt;li&gt;Sensors&lt;/li&gt;&#xA;&lt;li&gt;Computer Controller&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;It is arguable whether the computer controller is even necessary because mechanisms can be built that respond to environmental stimuli without the explicit aid of a computer (see &lt;a href=&quot;http://blog.ted.com/2007/11/27/robert_full/&quot; rel=&quot;noreferrer&quot;&gt;Dr. Robert Full&lt;/a&gt;'s work). In AI we call such things reflex agents.&lt;/p&gt;&#xA;&lt;p&gt;If we accept the first three elements (or all four) then our world is overrun by robots. This is a bit unsatisfying for many because we often envision the robots from SciFi. If we don't then the definition becomes arbitrary as @Ian points out because we cannot draw a distinction between two devices with the same components wherein we call one a robot (e.g. 3D printer) and another we don't (e.g. microwave) as you implicitly observe.&lt;/p&gt;&#xA;&lt;p&gt;Regardless it is generally accepted that these are the elements of a robot. This of course gives rise to the question, did we have robots before we had the term &amp;quot;robot?&amp;quot; The answer to this question is yes (see &lt;a href=&quot;https://robotics.stackexchange.com/questions/533/what-was-the-earliest-concept-of-a-robot/547#547&quot;&gt;What is the earliest concept of a robot?&lt;/a&gt;). However you shouldn't let this bother you, it is not uncommon for a field of research to come after the technology and/or ideas that define it.&lt;/p&gt;&#xA;" OwnerUserId="177" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2013-07-25T18:53:53.307" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1657" PostTypeId="2" ParentId="1654" CreationDate="2013-07-26T03:00:17.627" Score="5" Body="&lt;p&gt;You asked two (root) questions:&lt;/p&gt;&#xA;&lt;p&gt;Question: What is the difference between a Robot and a Machine?&lt;/p&gt;&#xA;&lt;p&gt;and&lt;/p&gt;&#xA;&lt;p&gt;Question: At what point does a machine begin to be called a robot?&lt;/p&gt;&#xA;&lt;p&gt;If I may, allow me to present the following text to address the first question:&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org:/wiki/Simple_machine&quot; rel=&quot;nofollow noreferrer&quot;&gt;six classical simple machines&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Reference: &lt;a href=&quot;https://en.wikipedia.org/wiki/Simple_machine&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Simple_machine&lt;/a&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Lever&lt;/li&gt;&#xA;&lt;li&gt;Wheel and axle&lt;/li&gt;&#xA;&lt;li&gt;Pulley&lt;/li&gt;&#xA;&lt;li&gt;Inclined plane&lt;/li&gt;&#xA;&lt;li&gt;Wedge&lt;/li&gt;&#xA;&lt;li&gt;Screw&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Any one of these “machines” is a long way from (but may contribute to the construction of) a robot.&lt;/p&gt;&#xA;&lt;p&gt;Addressing your second question and although fiction, Isaac Asimov presented &lt;a href=&quot;http://en.wikipedia.org/wiki/Three_Laws_of_Robotics&quot; rel=&quot;nofollow noreferrer&quot;&gt;a line of thought&lt;/a&gt; (reference: &lt;a href=&quot;http://en.wikipedia.org/wiki/Three_Laws_of_Robotics&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://en.wikipedia.org/wiki/Three_Laws_of_Robotics&lt;/a&gt;) still discussed today:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The Three Laws of Robotics (often shortened to The Three Laws or Three Laws) are a set of rules devised by the science fiction author Isaac Asimov. The rules were introduced in his 1942 short story &amp;quot;Runaround&amp;quot;, although they had been foreshadowed in a few earlier stories. The Three Laws are:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A robot may not injure a human being or, through inaction, allow a human being to come to harm.&lt;/li&gt;&#xA;&lt;li&gt;A robot must obey the orders given to it by human beings, except where such orders would conflict with the First Law.&lt;/li&gt;&#xA;&lt;li&gt;A robot must protect its own existence as long as such protection does not conflict with the First or Second Law.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Since I’m referencing Wikipedia verses presenting any original thought, I might as well &lt;a href=&quot;http://en.wikipedia.org/wiki/Robot&quot; rel=&quot;nofollow noreferrer&quot;&gt;continue&lt;/a&gt;: (reference: &lt;a href=&quot;http://en.wikipedia.org/wiki/Robot&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://en.wikipedia.org/wiki/Robot&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A robot is a mechanical or virtual agent, usually an electro-mechanical machine that is guided by a computer program or electronic circuitry. ... Robotics is the branch of technology that deals with the design, construction, operation, and application of robots, as well as computer systems for their control, sensory feedback, and information processing.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;In summary, a machine can be a robot, a robot can be a machine, a robot can be virtual.   I agree with the poster who said it would be several doctoral programs defining the difference.   :)&lt;/p&gt;&#xA;" OwnerUserId="1625" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2013-08-04T19:20:43.603" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1658" PostTypeId="1" CreationDate="2013-07-26T09:19:46.223" Score="4" ViewCount="487" Body="&lt;p&gt;I would like to know if there are any other solutions to implement slip compensation into a Half-Size Micromouse other than the conventional method. I have spoken to a few Japanese competitors, and they told me that the only solution they have to such a problem is creating a table of predetermined values and using these values to increase or decrease the before turn/after turn distances. The values used are determined by the Mouse's intelligence. Due to the fact that this method has too many limitations, I would like to hear more suggestions from people who are familiar with this matter.&lt;/p&gt;&#xA;" OwnerDisplayName="Lai Feng" LastEditorUserId="158" LastEditDate="2014-01-10T10:52:16.793" LastActivityDate="2014-06-28T05:34:17.673" Title="Implementing Slip Compensation into a Half-Size Micromouse" Tags="&lt;micromouse&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1660" PostTypeId="1" AcceptedAnswerId="1664" CreationDate="2013-07-26T18:41:28.633" Score="2" ViewCount="854" Body="&lt;p&gt;I am working on a homemade vending machine project that serves milk and cookies, using arduino and some basic servos and stuff.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is: I really have no clue on how to protect the milk to last long, or how to even know if the milk is still ok to drink.. All I really know is that air is bad for the milk (and the cookies), so here is what I came up with:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/mGUMy.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Two solenoids that activates at the same time, to allow air in, and milk out. All of this should be inside a &quot;slightly&quot; colder place.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm sure this design might sound stupid to some of you, but this is where I need your help please, do you think this design can work ? (Would that solenoid on top make any difference to protect milk?) How to improve it to make the milk last as long as possible ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'v heard about the big guys making machines that keep milk fresh for weeks even months, while i'm probably sure my milk won't stand a couple of hours..&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any idea or any information, link, or clue would be greatly appreciated. Thank you.&lt;/p&gt;&#xA;" OwnerUserId="1717" LastActivityDate="2013-07-27T01:01:50.680" Title="How to protect the milk in a homemade vending machine?" Tags="&lt;arduino&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1661" PostTypeId="2" ParentId="1660" CreationDate="2013-07-26T19:11:31.307" Score="6" Body="&lt;p&gt;Milk is readily available in plastic bags inside cardboard boxes, as illustrated in the picture below of part of a cafeteria-style milk dispenser.  Flow of milk is controlled by pinching off the white plastic tube that comes out of the bottom front edge of the box.  To resupply the machine, you get a new box of milk from a larger refrigerator, rip open a tab and pull out the white tube, put the box into the dispenser, thread the tube through the pinch-off, then cut off the seal at the bottom end of the tube.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using a readily available commercial product like this probably would be a better approach than having to clean and refill a tank like that shown in your picture.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Picture source: &lt;a href=&quot;http://www.hurstgreenplastics.com/products-page/&quot; rel=&quot;nofollow noreferrer&quot;&gt;hurstgreenplastics.com&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/XGun5.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="478" LastActivityDate="2013-07-26T19:11:31.307" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1664" PostTypeId="2" ParentId="1660" CreationDate="2013-07-27T01:01:50.680" Score="1" Body="&lt;p&gt;If you are concerned about the milk coming in contact with the air. I'd suggest using a plastic bag which the air from the first solenoid pours into. On expansion, the plastic bag(filled with air) will force the milk in the container to push out through the second solenoid. This way doesn't come in contact with milk. The only problem I see, which would compromise the milk, is any leaks in the bag itself. And another problem would that you'll have to find a way to drain that air in the plastic bag once all the milk is out.&lt;/p&gt;&#xA;" OwnerUserId="1213" LastActivityDate="2013-07-27T01:01:50.680" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1665" PostTypeId="2" ParentId="1638" CreationDate="2013-07-27T04:53:20.023" Score="1" Body="&lt;p&gt;I'm pretty sure that people at the place that manufactured your stepper motors did, in fact, write up a datasheet including operating torque specifications and lots of other information.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is unfortunate that all too often a person ends up with some electrical part in his hand, and somehow the datasheet was lost along the way.&#xA;I've discovered that it's well worth the money to buy stuff from people who actually do supply good datasheets, rather than try to save a few nickles buying allegedly &quot;the same&quot; part from other people who can't be bothered to forward the datasheets they got from the manufacturer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A few links to datasheets that list operating torque:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.kelinginc.net/KL23H251-24-8BT.pdf&quot; rel=&quot;nofollow&quot;&gt;Torque curve for the KL23H251-24-8B&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.shinano.com/motors/docs/SKC_stepper_operation.pdf&quot; rel=&quot;nofollow&quot;&gt;&quot;Stepper Motor Operation and Theory&quot;: &quot;Fig. 7-1 Speed - Torque Curve&quot;&lt;/a&gt; gives a brief explanation of the speed-torque curve.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.linengineering.com/line/contents/stepmotors/pdf/LinEngineering_Catalog_2011-2012_HR.pdf&quot; rel=&quot;nofollow&quot;&gt;&quot;Lin Engineering Catalog&quot;: &quot;Reading a speed and torque curve&quot;&lt;/a&gt; on p. 11 gives  a brief explanation of the speed-torque curve. The rest of the catalog has many speed-torque curves for particular motors.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.alltronics.com/mas_assets/acrobat/28M016.pdf&quot; rel=&quot;nofollow&quot;&gt;torque curves&lt;/a&gt; for several Lin Engineering steppers&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.alephobjects.com/hardware/motors/SY42STH47-1504A_060047067.pdf&quot; rel=&quot;nofollow&quot;&gt;Pull out torque curve for the SY42STH47-1504A&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.trinamic.com/tmc/media/Downloads/QMot_motors/QSH4218/QSH4218_manual.pdf&quot; rel=&quot;nofollow&quot;&gt;Torque figures for Trinamic QSH4218 series&lt;/a&gt;(p. 7-8)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.wantmotor.com/ProductsView.asp?id=155&amp;amp;pid=75&amp;amp;sid=80&quot; rel=&quot;nofollow&quot;&gt;Pulse-torque characteristics of the 42BYGHW&lt;/a&gt; (several graphs of speed vs. torque, each one of the &lt;em&gt;same&lt;/em&gt; motor connected to a different kind of motor driver).&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://catalog.orientalmotor.com/plp/itemdetail.aspx?cid=1002&amp;amp;categoryname=all-categories&amp;amp;productname=pk-series-stepping-motors&amp;amp;itemname=pke245da-l&amp;amp;cid=1002&amp;amp;plpver=11&amp;amp;categid=100&amp;amp;prodid=3001048&amp;amp;itemid=49362&amp;amp;origin=groupdetail&amp;amp;by=prod&amp;amp;filter=0&amp;amp;grpid=25391&amp;amp;backtoname=Compatible%20Motors%20%28sold%20separately%29&amp;amp;isUOM=1#&quot; rel=&quot;nofollow&quot;&gt;Speed-Torque Characteristics of the Oriental Motor PKE245DA-L&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;As you can see from the above graphs, the torque at the maximum-mechanical-power part of the torque curve is very roughly half the &quot;holding torque&quot; (the torque when moving very slowly).&lt;/p&gt;&#xA;" OwnerUserId="187" LastActivityDate="2013-07-27T04:53:20.023" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1666" PostTypeId="1" CreationDate="2013-07-27T11:45:45.427" Score="5" ViewCount="194" Body="&lt;p&gt;I have a box (cuboid) lying on floor or table. So there are 6 surfaces of the box and 1 surface of the floor. If I take each pair of surface such that the surfaces are &quot;adjacent&quot; to each other, I get two kind of pairings:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) two surfaces of the box: the surface normals of the surfaces diverge from each other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) 1 surface of the box + surface of the floor : the surface normals converge and intersect at an angle of 90 degrees. ( 8o to 100 degrees, if we want to add some tolerance).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to distinguish these two cases by representing through a function? What function can distinguish between these two situations?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In both cases, the the normalized dot product of the surface normals is 0, since the angle b/w them is 90 degrees. So this is not the right solution...&lt;/p&gt;&#xA;" OwnerUserId="658" LastEditorUserId="350" LastEditDate="2013-08-02T15:03:46.100" LastActivityDate="2013-08-15T21:44:27.363" Title="classify if two adjacent surfaces belong to same object" Tags="&lt;kinect&gt;&lt;computer-vision&gt;&lt;machine-learning&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1668" PostTypeId="2" ParentId="287" CreationDate="2013-07-28T03:46:32.167" Score="1" Body="&lt;p&gt;There is also a project called &lt;a href=&quot;http://www.espruino.com/&quot; rel=&quot;nofollow&quot;&gt;Espruino&lt;/a&gt;, which is a JavaScript interpreter for low power ARM microcontrollers. It is a rewrite of the &lt;a href=&quot;https://code.google.com/p/tiny-js/&quot; rel=&quot;nofollow&quot;&gt;tiny-js&lt;/a&gt; project, a small C++ interpreter for Javascript.&lt;/p&gt;&#xA;" OwnerUserId="181" LastActivityDate="2013-07-28T03:46:32.167" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1670" PostTypeId="1" AcceptedAnswerId="1671" CreationDate="2013-07-28T15:19:02.270" Score="5" ViewCount="240" Body="&lt;p&gt;I’m trying to inject some kind of rubber around an aluminum strut to form “feet” for a robot. I’ve already milled the mold, but I’m having trouble finding an inexpensive and readily available rubber compound that will cure without exposure to air. Ideally it should cure to about the consistency of a silicone O-ring. I’ve tried silicone gasket-maker (the automotive stuff), however a week later it hasn’t cured in the mold, as there is no exposure to the air.  Is there anything out there with a similar consistency to silicone, but doesn’t require air to cure?  Or is there a way to get what I’m currently using to set up without waiting a millennium?  There aren’t any real mechanical requirements, I’m just trying to clean up the look of the robot and prevent its legs from scratching my table. &lt;/p&gt;&#xA;" OwnerUserId="176" LastEditorUserId="478" LastEditDate="2013-07-29T02:56:36.433" LastActivityDate="2013-08-15T16:22:27.460" Title="Moldable rubber for &quot;feet&quot;" Tags="&lt;cnc&gt;" AnswerCount="3" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1671" PostTypeId="2" ParentId="1670" CreationDate="2013-07-28T23:54:51.457" Score="6" Body="&lt;p&gt;You need a two-part resin of some sort.  Search on &quot;room-temperature vulcanized&quot; rubber, or &quot;RTV rubber&quot;.  There may also be epoxies that are designed to dry rubbery.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You want stuff that comes with an activator -- if it's single-part RTV it depends on drying or on oxygen in the air to kick off, and you're back to never curing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your challenge will be to find something that is available in small quantities to the hobbyist.  I can't help you with that, alas -- I just have the name floating around in my head from some prior research, and new what search terms to type in.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's an example, but I couldn't even say if they'd sell to you: &lt;a href=&quot;http://www.contenti.com/products/casting/179-050.html&quot;&gt;http://www.contenti.com/products/casting/179-050.html&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="1411" LastActivityDate="2013-07-28T23:54:51.457" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1672" PostTypeId="2" ParentId="1515" CreationDate="2013-07-29T00:22:02.817" Score="3" Body="&lt;p&gt;&lt;em&gt;I'm looking for a way to create a non-rotating persistence of vision device.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems to me that the two designs that you propose yourself, at least rely on rotation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would suggest getting rid of rotation entirely. In particular since you say you have problems swinging these arms around.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One way to go about this, is by using magnets, springs and electro magnets. Actually, instead of me explaining this, go look at a loud speaker unit, and apply that same principle to your challenge. You want it to move further though, so use some soft springs to suspend your moving  component between, so you can get some good range on it.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;          &amp;lt;fixed electro magnet&amp;gt;               L&#xA;&amp;lt;spring&amp;gt;--&amp;lt;free moving magnet&amp;gt;--&amp;lt;electronics&amp;gt;--E--&amp;lt;spring&amp;gt;&#xA;          &amp;lt;fixed electro magnet&amp;gt;               D&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The middle line can move from side to side, the electromagnet is curled around the sliding assembly&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You would likely need to drive the electro magnet in both directions (reversing the poles) to get some good speed too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The benefit of this, is that the suspended electronics, can be really light, so you dont need some really heavy weights to keep the vibrations down. And the two springs of either end, could carry the power to the moving electronics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt;&#xA;I got inspired by rocketnagnet's graphics, so i stole some of it, to clarify just a little bit, just to give a hint as to how my ascii graphics was intended.&#xA;&lt;img src=&quot;https://i.stack.imgur.com/Jju2a.png&quot; alt=&quot;vertical led strip vibrating horizontally along the axis of the solenoid&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="1724" LastEditorUserId="1724" LastEditDate="2014-02-01T17:38:34.063" LastActivityDate="2014-02-01T17:38:34.063" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1674" PostTypeId="2" ParentId="1670" CreationDate="2013-07-29T03:09:17.173" Score="5" Body="&lt;p&gt;Instead of trying to mold a liquid, you could try to form a viscoelastic solid.  That way, the uncured material would keep its shape without an airtight mold.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's a product called &lt;a href=&quot;https://sugru.com/about&quot;&gt;Sugru&lt;/a&gt; that you might try; it's hand-moldable silicone rubber that dries in air.  (I am not affiliated with their company.)  &lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2013-07-29T03:09:17.173" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1675" PostTypeId="2" ParentId="1072" CreationDate="2013-07-29T11:19:44.063" Score="1" Body="&lt;p&gt;I am working on an open source project to make a platform to make diy automated kite steering unit. I sent a reply as well on electronics.stackexchange.com&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am using SimpleCV which is a python binding to OpenCV to get the position and orientation of the kite relative to the camera of my mobile phone. I use the acceleration and magnetometer of my mobile phone to get the orientation of the camera. I then send the data to my computer over wifi and process them into python.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The project is still in development, but everybody's welcome to help. The source code and documentation is available here &lt;a href=&quot;http://code.google.com/p/robokite/&quot; rel=&quot;nofollow&quot;&gt;http://code.google.com/p/robokite/&lt;/a&gt; I have a blog but it is in french, soon in English?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can also have a look at zenith wind power. It's a student project. The code was on google code as well, but can't be seen anymore for unknown reason. However, you can still get it with svn checkout &lt;a href=&quot;http://zenith-wind-power.googlecode.com/svn/trunk&quot; rel=&quot;nofollow&quot;&gt;http://zenith-wind-power.googlecode.com/svn/trunk&lt;/a&gt; I was not able to compile it, but they made a great job. Adrien should start working again on the project in September.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You have as well academics project (mainly TU Delft).&#xA;And you have the &quot;proprietary&quot; solution lie Makani power, sky sails, kite gen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope it helps!&#xA;Baptiste LABAT&lt;/p&gt;&#xA;" OwnerUserId="1726" LastActivityDate="2013-07-29T11:19:44.063" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1676" PostTypeId="1" CreationDate="2013-07-30T13:27:09.137" Score="2" ViewCount="118" Body="&lt;p&gt;I'm trying to control the speed of this &lt;a href=&quot;http://www.pololu.com/catalog/product/1117&quot; rel=&quot;nofollow&quot;&gt;motor&lt;/a&gt;, with this &lt;a href=&quot;http://www.pololu.com/catalog/product/2130&quot; rel=&quot;nofollow&quot;&gt;motor driver&lt;/a&gt; and pic16f690. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;pwm in my program&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;5 kHz frequency (0.2 ms period)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Starting with 50% duty cycle the motor doesn't run.&#xA;But moving from say, 80% to 50% (i.e. program my PIC with 80% duty cycle, and then re-program it with 50%), the motor will run at 50% (of course at a lower speed). I consider this funny. Anyone to explain this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;my motor powered by 5V.&lt;/p&gt;&#xA;" OwnerUserId="1733" LastActivityDate="2013-07-30T22:29:06.617" Title="funny behaviour or what - dc motor control" Tags="&lt;motor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1677" PostTypeId="2" ParentId="1676" CreationDate="2013-07-30T22:29:06.617" Score="5" Body="&lt;p&gt;If you're saying that it always starts with 80% PWM, but never with 50%, but it runs with 50% after starting, then you're just starting to learn the joys of working with a system that has significant stiction (AKA starting friction).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Somewhere buried in this document is a description, along with some prescriptions of how to deal with it in a closed-loop control system: &#xA;&lt;a href=&quot;http://wescottdesign.com/articles/Friction/friction.pdf&quot; rel=&quot;nofollow&quot;&gt;http://wescottdesign.com/articles/Friction/friction.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="1411" LastActivityDate="2013-07-30T22:29:06.617" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1678" PostTypeId="1" AcceptedAnswerId="1681" CreationDate="2013-07-31T00:04:17.147" Score="12" ViewCount="2021" Body="&lt;p&gt;I made a small crawler robot a little while ago that had two legs with two degrees of freedom each, so 4 RC servos total. While I was programming the movement of the legs I noticed that they moved rather stiffly. It makes sense that the RC servo's internal controller would have a very quick response to position commands, but I wanted my crawler to move in a way that seems a little more smooth and life-like.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My solution was create a cubic function of time that describes the path of the servos, and then set their position in small time increments, resulting in more smooth motion. Essentially what I did was solve for the $a_i$ coefficients in a cubic equation using the time interval, starting and ending position of the servo, and starting and ending rates the servo should move (which is just the derivative of the position):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Solve for $a_0$, $a_1$, $a_2$, and $a_3$:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ position(t) = a_0 + a_1t + a_2t^2 + a_3t^3 $$&#xA;$$ rate(t) = position'(t) = a_1 + 2a_2t + 3a_3t^2 $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given: $position(0)$, $position(t_f)$, $rate(0)$, $rate(t_f)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I set the rate of the servo between a pair of movements to be zero if the movements were in opposite directions, and positive or negative if the movements were both in the positive or negative direction, respectively. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This worked pretty well, but this solution is limited in a few ways. For one, it's difficult to decide what exactly the rates between movements that go in the same direction should be. I used the average of the slopes ahead and behind of a particular position between movements, but it isn't clear to me that is optimal. Second of all, cubic curves could take the servo to a position outside of the range of the positions at the beginning and end of a movement, which may be undesirable. For example, at some point during the time interval, the curve could cause the servo to go beyond the second position, or below the first position. Thirdly, curve generation here does not consider the maximum rate that the servo can turn, so a curve may have the servo move at a speed that is unrealistic. With that, a minor concern is that the maximum turning rate depends on the response of servo's internal controller, and may change depending on the size of the position interval. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Neglecting that last concern, these issues may be solved by increasing the degree of the polynomial and adding constraints to solve for the coefficients, but I'm now starting to wonder...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a better way than this to make servo movement smooth and seem more life-like?&lt;/p&gt;&#xA;" OwnerUserId="181" LastEditorUserId="350" LastEditDate="2013-08-05T12:57:41.913" LastActivityDate="2018-06-07T10:03:15.483" Title="Smooth servo movement for a crawling robot" Tags="&lt;otherservos&gt;&lt;kinematics&gt;" AnswerCount="2" CommentCount="17" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1679" PostTypeId="2" ParentId="1653" CreationDate="2013-07-31T09:52:19.097" Score="10" Body="&lt;p&gt;To answer your first question: if you really want to find the true kinematic equations for differential drive, I wouldn't start approximating by assuming that each wheel has moved in a straight line. Instead, find the turning radius, calculate the center point of the arc, and then calculate the robot's next point. The turning radius would be infinite if the robot is moving straight, but in the straight case the math is simple. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, just imagine that over each time step, or each time you calculate the change in the incremental sensors, the robot travels from point A to point B on an arc like this:&#xA;&lt;img src=&quot;https://i.stack.imgur.com/l0fEQ.png&quot; alt=&quot;enter image description here&quot;&gt;&#xA;Here's some sample code with the math simplified:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;// leftDelta and rightDelta = distance that the left and right wheel have moved along&#xA;//  the ground&#xA;&#xA;if (fabs(leftDelta - rightDelta) &amp;lt; 1.0e-6) { // basically going straight&#xA;    new_x = x + leftDelta * cos(heading);&#xA;    new_y = y + rightDelta * sin(heading);&#xA;    new_heading = heading;&#xA;} else {&#xA;    float R = unitsAxisWidth * (leftDelta + rightDelta) / (2 * (rightDelta - leftDelta)),&#xA;          wd = (rightDelta - leftDelta) / unitsAxisWidth;&#xA;&#xA;    new_x = x + R * sin(wd + heading) - R * sin(heading);&#xA;    new_y = y - R * cos(wd + heading) + R * cos(heading);&#xA;    new_heading = boundAngle(heading + wd);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I used similar math in a simulator to demonstrate different ways of steering: &lt;a href=&quot;http://www.cs.utexas.edu/~rjnevels/RobotSimulator4/demos/SteeringDemo/&quot; rel=&quot;noreferrer&quot;&gt;http://www.cs.utexas.edu/~rjnevels/RobotSimulator4/demos/SteeringDemo/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="181" LastEditorUserId="181" LastEditDate="2014-07-23T04:53:45.397" LastActivityDate="2014-07-23T04:53:45.397" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1680" PostTypeId="1" CreationDate="2013-07-31T13:09:43.993" Score="1" ViewCount="127" Body="&lt;p&gt;I am working on a robotics project with C++ (drawing signs on board), on CRS CataLyst5 arm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have faced a problem:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have many methods move in different directions, goToLocalizations, etc, but the problem is that when I run many of them in main without Sleep() function between each function they does not run properly. I think that the first one needs time (the time of robot movement) but when I put Sleep(10000) between them (I guessed that 10 seconds are enough for the movement) all is ok. This is very ineffective and slow solution. Would you like to give me some solutions to avoid the use of Sleep ?&lt;/p&gt;&#xA;" OwnerUserId="1743" LastEditorUserId="158" LastEditDate="2013-07-31T15:56:55.207" LastActivityDate="2013-07-31T22:58:00.367" Title="Management of asynchronous commands" Tags="&lt;activerobot&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1681" PostTypeId="2" ParentId="1678" CreationDate="2013-07-31T17:33:30.940" Score="7" Body="&lt;p&gt;&lt;strong&gt;Motion Profile Generation&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the past, I've used a motion profile generator to solve this problem. To use it you would need the desired target position (set point), maximum velocity, and acceleration values that are associated with your motors. It works by integrating a trapezoidal velocity curve in order to get a smooth position profile. An S-curve can be used if the motion has to be even smoother.&#xA;&lt;a href=&quot;https://www.pmdcorp.com/resources/get/mathematics-of-motion-control-profiles-article&quot; rel=&quot;nofollow noreferrer&quot;&gt;Reference to article explaining Motion profiling&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Set Point Pre-filtering&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Aside from the motion profiling route, you can try simply low pass filtering the command to the servos. This type of setpoint filtering will slow your response down but it will also smooth it out and it's easy to implement. The cut-off frequency will have to be chosen so that it supports the bandwidth of your system (so it does not filter out desired motion). &#xA;&lt;a href=&quot;https://ccrma.stanford.edu/~jos/filters/Definition_Simplest_Low_Pass.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Simple Low-pass filter implementation in C&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="983" LastEditorUserId="-1" LastEditDate="2018-06-07T10:03:15.483" LastActivityDate="2018-06-07T10:03:15.483" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="1682" PostTypeId="1" AcceptedAnswerId="1683" CreationDate="2013-07-31T17:41:12.177" Score="3" ViewCount="249" Body="&lt;p&gt;I am in the concept phase of a driving robot. The two wheels on the front axle will be powered, while the rear will be dragged along. The rear is also responsible for steering but this has noting to do with my question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since the robot is required to make relatively sharp turns at high speed. Therefore I have two options to compensate the different speeds on both sides. On the one hand, a differential gear in the front axle could be used. It would be powered by one motor then. On the other hand, I could simply use two motors directly powering each a front wheel. This way I could simulate the differentiation in software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd like to go for the first approach, using the hardware differential. But I have the one concern with it. Would a robot vehicle with differential gear still move straight, without explicit steering applied?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My imagination is that, with those wheels not being solidly connected, the robot would move in random curves which I'd have to compensate with a lot of steering then. I know that for real cars, differential gears are standard and do their work, but now I am talking about a small robot measuring about 6 inches.&lt;/p&gt;&#xA;" OwnerUserId="1054" LastActivityDate="2013-07-31T18:15:45.133" Title="Does a vehicle with defferential gear still move straight?" Tags="&lt;motor&gt;&lt;wheeled-robot&gt;&lt;motion&gt;&lt;wheel&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1683" PostTypeId="2" ParentId="1682" CreationDate="2013-07-31T18:07:41.043" Score="3" Body="&lt;p&gt;If I understand your question, you are asking whether a vehicle balancing on two wheels (or two wheels and one &lt;a href=&quot;http://en.wikipedia.org/wiki/Caster&quot; rel=&quot;nofollow&quot;&gt;caster&lt;/a&gt;) will be able to move straight, or at least predictably, if both wheels were driven from the same motor and used a differential.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The answer is yes, but only if you have a way to equalize the forces of friction affecting each wheel.  For example, by applying a brake individually to each wheel, you could alter the balance of force between the left and right.  It would be crude, but certainly possible to control the steering in this way.  In fact, many &lt;a href=&quot;http://en.wikipedia.org/wiki/Tractor#Pedals&quot; rel=&quot;nofollow&quot;&gt;tractors use independent left and right brake pedals&lt;/a&gt; to accomplish this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Without actively braking (or some other method), your intuition is correct: the amount of rotation of each wheel would depend on an unpredictable set of forces, and the robot would make seemingly random turns.  &lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2013-07-31T18:15:45.133" LastActivityDate="2013-07-31T18:15:45.133" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="1684" PostTypeId="1" CreationDate="2013-07-31T22:23:52.237" Score="5" ViewCount="165" Body="&lt;p&gt;I've got an arm attached to a shaft. The arms dimensions are 40x5 inches the arm weights about 10 lbs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I have a wind acting on the side of the arm, how would I translate the wind force into torque on the shaft?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To give some more information, I'm rotating the arm using a stepper motor, and I would like to know how to size the motor depending environmental conditions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What should my formula look like in order to arrive a required oz-in of torque given my requirements being:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I need to be able to accelerate the arm from 0 to 12 rpm in 1.5 seconds&lt;/li&gt;&#xA;&lt;li&gt;The wind speed can be as high as 30 mph&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Using the formula &lt;strong&gt;P = .00256 x 30^2&lt;/strong&gt; i find the wind pressure per square foot being &lt;strong&gt;2.304&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using the formula &lt;strong&gt;F = A x P x Cd&lt;/strong&gt; for calculating force, I get &lt;strong&gt;1.389 x 2.304 x 2 = 6.4&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I know that the wind force on my arm is &lt;strong&gt;6.4 lbs&lt;/strong&gt;. But now how do I translate this to torque on my arm? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/awzfj.png&quot; alt=&quot;mechanical arm&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Source: &lt;a href=&quot;http://k7nv.com/notebook/topics/windload.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://k7nv.com/notebook/topics/windload.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="1749" LastActivityDate="2013-07-31T22:32:13.760" Title="Wind force impact on torque mechanical arm" Tags="&lt;force&gt;&lt;torque&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1685" PostTypeId="2" ParentId="1684" CreationDate="2013-07-31T22:32:13.760" Score="4" Body="&lt;p&gt;If you assume that the wind force you calculated is distributed evenly about the arm (reasonable assumption) then the torque about the shaft is the distance to the center of the arm (20 in) multiplied by the force in oz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Torque = Force in ounces * Distance = (6.4 lb) * (16 oz / 1 lb) * (20 in) =  2048 oz. in.&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="983" LastActivityDate="2013-07-31T22:32:13.760" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1686" PostTypeId="2" ParentId="1680" CreationDate="2013-07-31T22:58:00.367" Score="2" Body="&lt;p&gt;Since you mention that you are using a &lt;a href=&quot;http://en.wikipedia.org/wiki/CRS_Robotics&quot; rel=&quot;nofollow&quot;&gt;CRS Catalyst 5&lt;/a&gt; arm, I assume that you are using the &lt;a href=&quot;http://www.thermoscientific.fr/com/cda/product/detail/0,1055,21981,00.html&quot; rel=&quot;nofollow&quot;&gt;CRS ActiveRobot&lt;/a&gt; ActiveX control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A quick look through &lt;a href=&quot;http://www.scribd.com/doc/44659351/Tutorial-Active-Robot&quot; rel=&quot;nofollow&quot;&gt;this ActiveRobot Tutorial&lt;/a&gt; suggests that &lt;a href=&quot;http://en.wikipedia.org/wiki/Asynchronous_method_invocation&quot; rel=&quot;nofollow&quot;&gt;all robot commands are asynchronous&lt;/a&gt;, so when you command the gripper to open (using &lt;code&gt;Robot.GripperOpen&lt;/code&gt; in VB) you then have to wait for the move to finish (using &lt;code&gt;Robot.GripperFinish&lt;/code&gt; in VB).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similarly it looks like you need to wait for a &lt;code&gt;Robot.MoveStraight&lt;/code&gt; to complete with a &lt;code&gt;Robot.Finish&lt;/code&gt; etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Replace all of your sleep calls with the relevant wait commands and you will get rid of all of the unwanted &lt;a href=&quot;https://en.wikipedia.org/wiki/Dead_time&quot; rel=&quot;nofollow&quot;&gt;dead time&lt;/a&gt;. Similarly if you wait for one move to finish before starting a subsequent move, you may prevent moves conflicting with eact other, confusing the control system.&lt;/p&gt;&#xA;" OwnerUserId="37" LastActivityDate="2013-07-31T22:58:00.367" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1687" PostTypeId="1" AcceptedAnswerId="1688" CreationDate="2013-08-01T02:26:37.093" Score="2" ViewCount="4129" Body="&lt;p&gt;I'm going to be embarking on an autonomous robot project and I was going to be using GPS to navigate to waypoints (I'm aware of the margin of error when it comes to localization with GPD but I live in a lovely area with many open fields). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was going to use Adafruit's Ultimate GPS Breakout board with my RaspberryPi, and I was wondering how I should protect or mount the GPS to protect it from the elements. Do all GPS units need to be face up and unobstructed (ex. wood or plastic) in order to work? If so, how can I still protect a GPS unit from the outdoors?&lt;/p&gt;&#xA;" OwnerUserId="1740" LastActivityDate="2013-08-02T13:51:38.660" Title="Can GPS modules work inside plastic enclosures?" Tags="&lt;gps&gt;&lt;protection&gt;&lt;coverage&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1688" PostTypeId="2" ParentId="1687" CreationDate="2013-08-01T03:27:05.733" Score="2" Body="&lt;p&gt;Yes, it works fine in a plastic (or wood) case. I've used the PA6H GPS from Adafruit in a &lt;a href=&quot;http://www.mouser.com/Search/ProductDetail.aspx?R=1553BRDBKvirtualkey54600000virtualkey546-1553BRDBK&quot; rel=&quot;nofollow noreferrer&quot;&gt;Hammond 1553B&lt;/a&gt; plastic case with no issues.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/j4Edm.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mostly what you want to avoid is any sort of conductor that might block a signal. This includes copper and iron.&lt;/p&gt;&#xA;" OwnerUserId="1524" LastActivityDate="2013-08-01T03:27:05.733" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1689" PostTypeId="2" ParentId="150" CreationDate="2013-08-01T07:40:44.277" Score="0" Body="&lt;p&gt;Simple DC motors installed in my Underwater Robot are still running (with a little more noise), from an year, without ANY seal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The voltage of 12V is not so much, so even if the power terminals are dipped in water,  water will not conduct much current through itself, unless it is salty.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As the current flows through the path of least possible resistance, most of the current will still be going through the motor windings, however presence of water causes Rusting which will damage the brushes of the motor and hence more noise and friction.&lt;/p&gt;&#xA;" OwnerUserId="1753" LastActivityDate="2013-08-01T07:40:44.277" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1690" PostTypeId="2" ParentId="287" CreationDate="2013-08-01T08:05:02.233" Score="1" Body="&lt;p&gt;Programming the &lt;a href=&quot;http://en.wikipedia.org/wiki/Parrot_AR.Drone&quot; rel=&quot;nofollow&quot;&gt;AR.Drone 2.0&lt;/a&gt; with Javascript is super fun. Here's an example that makes a drone take off, move around, do a flip, then land, all using the &lt;a href=&quot;https://github.com/felixge/node-ar-drone&quot; rel=&quot;nofollow&quot;&gt;node-ar-drone&lt;/a&gt; library:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;var arDrone = require('ar-drone');&#xA;var client = arDrone.createClient();&#xA;&#xA;client.takeoff();&#xA;&#xA;client&#xA;  .after(5000, function() {&#xA;    this.clockwise(0.5);&#xA;  })&#xA;  .after(3000, function() {&#xA;    this.animate('flipLeft', 15);&#xA;  })&#xA;  .after(1000, function() {&#xA;    this.stop();&#xA;    this.land();&#xA;  });&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The blog post &lt;a href=&quot;http://voodootikigod.com/nodebots-the-rise-of-js-robotics/&quot; rel=&quot;nofollow&quot;&gt;NodeBots - the Rise of JS Robotics&lt;/a&gt; talks about advantages javascript has for robotics, specifically the natural way that real world objects and actions can be modeled as chainable, evented processes.  The example code above to animate a drone looks very similar to using jQuery to animate an HTML element:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$(&quot;#foo&quot;)&#xA;  .slideUp(300)&#xA;  .delay(800)&#xA;  .fadeIn(400);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="1488" LastEditorUserId="1488" LastEditDate="2013-08-21T19:02:07.687" LastActivityDate="2013-08-21T19:02:07.687" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1691" PostTypeId="2" ParentId="1614" CreationDate="2013-08-01T16:18:15.533" Score="0" Body="&lt;p&gt;We build a new version and its now available for download:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://code.google.com/p/ardu-imu/downloads/detail?name=arduimu_vD&quot; rel=&quot;nofollow&quot;&gt;http://code.google.com/p/ardu-imu/downloads/detail?name=arduimu_vD&lt;/a&gt;....&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem completely gone in this version. Read comments in arduimu_vd.ino for more info.&lt;/p&gt;&#xA;" OwnerUserId="1137" LastActivityDate="2013-08-01T16:18:15.533" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1692" PostTypeId="2" ParentId="1666" CreationDate="2013-08-01T18:48:33.903" Score="3" Body="&lt;p&gt;It actually makes sense that the dot product in both cases is the same (zero) because the dot product of two vectors does not consider the vectors' origins.  Or in other words the math for the dot product places the two vectors at the same origin. In this sense there is no way to distinguish converging or diverging vectors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think what you need to do is to consider a midpoint for your surfaces as well as their normals and then you should have a convergence or a divergence. Or try taking a dot product of one surface's normal with the other surface's position or vice versa. You will probably find that positive vs negative numbers in this regard will get the answer you seek. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or maybe you can use the delta position from one to the other against a normal. See the following sketch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/3IqXt.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By delta position I mean P1-P2. I hope the diagram helps to clarify. I've drawn two cases: case #1 on the left and case #2 on the right. Calculate the dot product of the two blue vectors or the two red vectors. So, for example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;answer = dot( N[blue], P[red]-P[blue] )&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;These vectors won't be perpendicular, but the answer will tell you if the one surface is in front of the other or behind it. For case #1 the dot products will be positive. For case #2 the dot products will be negative.  In fact, this method will tell you if any two arbitrarily positioned surfaces that meet at a common edge are convex or concave (divergent or convergent). They don't have to be perpendicular.&lt;/p&gt;&#xA;" OwnerUserId="1075" LastEditorUserId="1075" LastEditDate="2013-08-15T21:44:27.363" LastActivityDate="2013-08-15T21:44:27.363" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1693" PostTypeId="1" AcceptedAnswerId="1694" CreationDate="2013-08-01T22:08:53.750" Score="6" ViewCount="178" Body="&lt;p&gt;For the Dagu Wild Thumper 6 Wheeled platform, or any multiple motor system, do I really need 1 battery for each motor? Or should I just buy 2 for either side of the platform. In addition, for larger motors like the ones on this platform, how do I deal with the power generated from a coasting motor?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to jump into the deep end with robotics, as I already hold all the programming skills, and I realize a platform of this magnitude may be a difficult endeavor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Recommended motor voltage is 2 – 7.5 Volts, so should one use two 22 Volt batteries for the left and right side, or six 7.5 volt batteries?&lt;/p&gt;&#xA;" OwnerUserId="1740" LastEditorUserId="350" LastEditDate="2013-08-02T15:03:04.893" LastActivityDate="2013-08-02T15:03:04.893" Title="Do 6 motors require 6 individually-assigned batteries?" Tags="&lt;motor&gt;&lt;battery&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1694" PostTypeId="2" ParentId="1693" CreationDate="2013-08-01T23:35:52.627" Score="6" Body="&lt;p&gt;I'm not familiar with that platform.  But in general, no, you do not need separate batteries for each motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also in general, if you need 2-7.5V for each motor, then you probably want one honkin' big battery that puts out 7.5V or slightly more.  You could use a 12V battery and take care with your drive commands to never give the motors over 7.5V.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Only if you need to do something odd like connecting the motors in series would you need more voltage.&lt;/p&gt;&#xA;" OwnerUserId="1411" LastActivityDate="2013-08-01T23:35:52.627" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1695" PostTypeId="1" CreationDate="2013-08-02T05:22:18.607" Score="2" ViewCount="2521" Body="&lt;p&gt;I'm in the process of writing my own simple quadcopter controller for experimental use, and I'm having trouble getting my head around how to convert from the degrees which my PID controller demands to an appropriate 1k-2k range for PWM output. For example, take the roll axis on a '+' configured 'copter (pseudo-code):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;setpoint = scaleToRange(receiver.rollValue, -30, 30); //scale the command (1000-2000) to between -30 and 30 degrees, as that's the maximum roll permitted.&#xA;demandedRoll = rollPID.calculate(setpoint, imu.currentRoll, PID_params);&#xA;&#xA;/// the part I'm having trouble with&#xA;&#xA;motorLeft_command = receiver.throttle - rollPWM;&#xA;motorRight_command = receiver.throttle + rollPWM;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;How do I take the roll demanded by my PID controller and convert it to a value useful to the motors, that is to say, where does &lt;code&gt;rollPWM&lt;/code&gt; come from? My first instinct is to use a simple linear relationship, i.e.:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;rollPWM = scaleToRange(demandedRoll, MinValue=receiver.throttle/2, MaxValue=2000-receiver.throttle);&#xA;//don't let it go beyond 50% of throttle on low end, and the ESC's max on the high end. &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;However this seems far too simplistic to work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or should I be doing more calculations before everything goes through PID control? Any help would be great. &lt;/p&gt;&#xA;" OwnerUserId="176" LastActivityDate="2013-08-02T19:00:41.753" Title="Help with PID &quot;units&quot; in a quadcopter control system" Tags="&lt;pid&gt;&lt;motion&gt;&lt;multi-rotor&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1696" PostTypeId="2" ParentId="1687" CreationDate="2013-08-02T13:51:38.660" Score="0" Body="&lt;p&gt;There are a variety of GPS units available that use plastic cases to protect against the elements, and they are all plastic.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, &lt;a href=&quot;https://www.google.com/search?q=garmin+puck&amp;amp;tbm=isch&quot; rel=&quot;nofollow noreferrer&quot;&gt;these Garmin units&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It sounds like you're really asking about what enclosure materials will keep the weather out but let the signal in.  For this, you just need to make sure that you aren't using a conductive shield:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;a href=&quot;https://electronics.stackexchange.com/a/2370&quot;&gt;the conductor used as a shield has to be thicker than the &quot;skin depth&quot; of the metal at the frequencies you're trying to block out. [...] 1 micron is enough in practice.&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This &lt;a href=&quot;https://en.wikipedia.org/wiki/Electromagnetic_shielding&quot; rel=&quot;nofollow noreferrer&quot;&gt;shielding&lt;/a&gt; could be in the form of a metal, a paint, or even a fabric.  So, your enclosure can be anything that does not have a lining made with one of these materials.  Unpainted plastic is a good option.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="-1" LastEditDate="2017-04-13T12:33:08.317" LastActivityDate="2013-08-02T13:51:38.660" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1697" PostTypeId="1" AcceptedAnswerId="1704" CreationDate="2013-08-02T15:36:39.800" Score="0" ViewCount="848" Body="&lt;p&gt;I bought this MPU-6050: &lt;a href=&quot;http://www.ebay.com/itm/MPU-6050-6DOF-3-Axis-Gyroscope-Accelerometer-Module-for-Arduino-DIY-/261231955458&quot; rel=&quot;nofollow&quot;&gt;link&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to the manufacture site, the sensor logic level is 3.3V (though the &lt;em&gt;ebay&lt;/em&gt; page says &lt;code&gt;Power supply :3-5v&lt;/code&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Should I use a 4 channel Bi-Directional Logic Level Converter (&lt;a href=&quot;http://www.dash.co.il/image/cache/data/AD-757/ID757_LRG-500x500.jpg&quot; rel=&quot;nofollow&quot;&gt;like this one&lt;/a&gt;) for the &lt;code&gt;SDA, SCL, INT&lt;/code&gt; channels? or can I connect it directly to my arduino nano?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I saw some places that says I should use it with a logic level converter and some who say it's ok without it. (I guess it depends on the sensor board, so please take a look, link above)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Current Setup:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;SDA &amp;lt;-&amp;gt; LLC &amp;lt;-&amp;gt; A4&#xA;SCL &amp;lt;-&amp;gt; LLC &amp;lt;-&amp;gt; A5&#xA;INT &amp;lt;-&amp;gt; LLC &amp;lt;-&amp;gt; D2&#xA;VCC &amp;lt;- LLC &amp;lt;- 5V (arduino)&#xA;GND &amp;lt;- LLC &amp;lt;- GND (arduino)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;I still don't have the parts so I can't test it, and I'm probably going to use &lt;a href=&quot;http://www.i2cdevlib.com/devices/mpu6050&quot; rel=&quot;nofollow&quot;&gt;Jeff Rowberg library&lt;/a&gt;&lt;/em&gt; to communicate with the sensor (I&lt;sup&gt;2&lt;/sup&gt;C)&lt;/p&gt;&#xA;" OwnerUserId="1337" LastActivityDate="2013-08-02T19:41:48.770" Title="MPU-6050 + Arduino nano - Logic converter or not?" Tags="&lt;arduino&gt;&lt;sensors&gt;&lt;quadcopter&gt;&lt;logic-control&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ClosedDate="2013-08-02T22:09:30.283" ContentLicense="CC BY-SA 3.0" />
  <row Id="1698" PostTypeId="2" ParentId="1695" CreationDate="2013-08-02T18:12:57.027" Score="3" Body="&lt;p&gt;Wrapping your head around unit conversions in controllers is a pretty common problem, so don't think you're alone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're implementing your PID controller using floating point math, then you really don't have to worry: the gains that you assign for the proportional, integral, and derivative action will take care of the differing ranges for the inputs and outputs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're implementing your PID controller using integer math or fixed-point math, then you don't have to worry for the reasons you're worrying.  Instead, you have to worry about keeping the calculations in the right range so that you neither lose precision nor overflow any calculations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As an example for a floating-point calculation, a plausible proportional gain would be 500 output counts per degree of input error.  In floating point, you'd just assign 500.0 to the proportional gain.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So have fun.  Don't forget the integrator anti-windup.&lt;/p&gt;&#xA;" OwnerUserId="1411" LastActivityDate="2013-08-02T18:12:57.027" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1699" PostTypeId="5" CreationDate="2013-08-02T18:45:12.290" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2013-08-02T18:45:12.290" LastActivityDate="2013-08-02T18:45:12.290" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1700" PostTypeId="4" CreationDate="2013-08-02T18:45:12.290" Score="0" Body="Machine learning is a branch of Artificial Intelligence concerned with the development of algorithms that adapt their behavior based on past observations. Examples of such algorithms include Artificial Neural Networks, Genetic Algorithms, Expectation-Maximization, and Support Vector Machines. Such algorithms are used for classifying previously unseen data and predicting future values of some unknown process." OwnerUserId="1449" LastEditorUserId="177" LastEditDate="2013-08-05T08:06:22.420" LastActivityDate="2013-08-05T08:06:22.420" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1701" PostTypeId="5" CreationDate="2013-08-02T18:47:24.190" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2013-08-02T18:47:24.190" LastActivityDate="2013-08-02T18:47:24.190" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1702" PostTypeId="4" CreationDate="2013-08-02T18:47:24.190" Score="0" Body="A distributed system consists of a collection of autonomous computers, connected through a network and distribution middleware, which enables computers to coordinate their activities and to share the resources of the system, so that users perceive the system as a single, integrated computing facility." OwnerUserId="1449" LastEditorUserId="1449" LastEditDate="2013-08-02T18:59:11.777" LastActivityDate="2013-08-02T18:59:11.777" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1703" PostTypeId="2" ParentId="1695" CreationDate="2013-08-02T19:00:41.753" Score="2" Body="&lt;p&gt;Tim Wescot is one of the most experienced experts ever in this forum especially in the PID controllers field.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I recommend you to read his brilliant article &lt;a href=&quot;http://www.embedded.com/design/prototyping-and-development/4211211/PID-without-a-PhD&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We used discrete PID for our quadrotor control system. We are building a quadrotor right now and tested both continuous PID controller(What you are usually find in wikipedia or web searches) and discrete PID controller, and for quadrotor systems which has a digitized system, we find discrete PID far better than continuous one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this method, you should use 2 separate PID for each motor, but PID gains is equal except Kp of one of them should be -Kp of another one. Here is the sample code( in C# ):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    class PIDController&#xA;    {&#xA;        float[] _u = new float[3];&#xA;        float[] _e = new float[3];&#xA;        float[] _ef = new float[3];&#xA;        float _Tf;&#xA;&#xA;        float _Kp;&#xA;        float _Ti;&#xA;        float _Td;&#xA;        float _h; //delta_t&#xA;        float MaxValue; // min value for motors output&#xA;        float MinValue; // max value for motors output       &#xA;        float _Alfa; //mostly 0.1&#xA;        public PIDController(float SamplingPeriod,float Alfa)&#xA;        {&#xA;            _Alfa = Alfa;&#xA;            _h = SamplingPeriod;&#xA;            MinValue = 0;&#xA;            MaxValue = 100;&#xA;&#xA;        }&#xA;        public void SetCoefficient(float Kp,float Ti,float Td)&#xA;        {&#xA;            _Kp = Kp;&#xA;            _Ti = Ti;&#xA;            _Td = Td;&#xA;        }&#xA;        public void SetRenge(float Min,float Max)&#xA;        {&#xA;            MinValue = Min;&#xA;            MaxValue = Max;&#xA;        }&#xA;&#xA;&#xA;        public float GetOutputSignal(float y, float r)&#xA;        {&#xA;&#xA;            _Tf = _Alfa * _Td;&#xA;            float a = _h / (_Tf + _h);&#xA;            _u[1] = _u[0];&#xA;            _ef[2] = _ef[1];&#xA;            _ef[1] = _ef[0];&#xA;            _e[2] = _e[1];&#xA;            _e[1] = _e[0];&#xA;            _e[0] = r - y;&#xA;            _ef[0] = (1 - a) * _ef[1] + a * _e[0];&#xA;            if ((_Ti != 0) &amp;amp;&amp;amp; (_h &amp;gt; 0))&#xA;                _u[0] = _u[1] + _Kp * (_e[0] - _e[1]) + (_Kp * _h / _Ti) * _e[0] + ((_Kp * _Td) / _h) * (_ef[0] - 2 * _ef[1] + _ef[2]);&#xA;            else&#xA;                _u[0] = 0;&#xA;            //System.Diagnostics.Debug.WriteLine(string.Format(&quot;y = {0} , r = {1} , e = {2} u={3}&quot;,y,r,_e[0],_u[0]));&#xA;            //System.Diagnostics.Debug.WriteLine(string.Format(&quot;Ti = {0} , Td = {1} , Kp = {2}&quot;, _Ti, _Td, _Kp));&#xA;            //System.Diagnostics.Debug.WriteLine(&quot;&quot;);&#xA;            if ((_u[0] &amp;gt; MaxValue) || (_u[0] &amp;lt; MinValue))&#xA;            {&#xA;                if (_u[0] &amp;gt; MaxValue) { _u[0] = MaxValue; };&#xA;                if (_u[0] &amp;lt; MinValue) { _u[0] = MinValue; };&#xA;            }            &#xA;&#xA;            return _u[0];&#xA;        }&#xA;&#xA;    }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Test it, you will find this solution far better than continious one. We also used genetic algorithm for auto-tuning this PID. I should mention this type of PID controller won't work without an integral gain. I also should mention that, we didn't currently fully tune our quadrotor, but we got far far better results than continuous one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.4shared.com/office/F4_cfogP/tidsdiskret_pid_reg.html&quot; rel=&quot;nofollow&quot;&gt;Here&lt;/a&gt; is the mathematical explanation of this method for more info.&lt;/p&gt;&#xA;" OwnerUserId="1137" LastActivityDate="2013-08-02T19:00:41.753" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1704" PostTypeId="2" ParentId="1697" CreationDate="2013-08-02T19:41:48.770" Score="2" Body="&lt;p&gt;According to the link you provided, you can use 5V or 3.3V directly on the sensor (it already have a voltage regulator). Since the arduino is able to send 3.3V or 5V you can use both of them directly without any level converter.&#xA;You can see on the video &lt;a href=&quot;http://lukagabric.com/arduino-mpu6050/&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt; that you don't need anything &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I got a GY-80 with the same kind of features and I use it directly on my arduino nano without any level converter.&#xA;Their is also a whole arduino playground on how to use this sensor.&lt;/p&gt;&#xA;" OwnerUserId="1615" LastActivityDate="2013-08-02T19:41:48.770" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1705" PostTypeId="2" ParentId="1678" CreationDate="2013-08-02T21:53:18.877" Score="2" Body="&lt;p&gt;I think the question refers to this sort of device: &lt;a href=&quot;http://en.wikipedia.org/wiki/Servo_%28radio_control%29&quot; rel=&quot;nofollow&quot;&gt;RC servo&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Those usually aren't very high performance so they're not going to be able to track a generated motion profile very well.  Most commercial motor control systems use an S curve for a point to point move (see @ddevaz's answer) which do a piece-wise profile where each segment uses a different equation.  Your problem is going to be that in order for your motor to track the generated profile you're probably going to have a very &quot;slow&quot; profile.  Otherwise the profile you try and command the device to follow is going to have a large position error vs. the actual position of the device.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ideally you'll want some sort of feedback you can look at while you are executing the motion so you can see how well the device is tracking the command.  From a more practical perspective, if you want significantly better motion you may need different motors and different motor control.&lt;/p&gt;&#xA;" OwnerUserId="1584" LastActivityDate="2013-08-02T21:53:18.877" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1707" PostTypeId="1" CreationDate="2013-08-04T15:49:24.350" Score="0" ViewCount="4333" Body="&lt;p&gt;I have a USB webcam and a WiFi module which it can convert Serial data to WiFi and vice versa.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The question is can I simply convert the data coming from the webcam to serial with a USB to Serial IC (like FT232R ) and then hand it over to my WiFi Module?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The WiFi module DataSheet is &lt;a href=&quot;http://www.uplooder.net/cgi-bin/dl.cgi?key=1bbc1bb2c5731ba520a0a206664ba57b&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="1481" LastEditorUserId="1481" LastEditDate="2013-08-04T16:27:57.183" LastActivityDate="2013-08-04T16:54:52.517" Title="Build an WiFi IP camera with webcam" Tags="&lt;cameras&gt;&lt;wifi&gt;&lt;usb&gt;" AnswerCount="1" CommentCount="3" ClosedDate="2013-08-05T13:04:39.737" ContentLicense="CC BY-SA 3.0" />
  <row Id="1708" PostTypeId="2" ParentId="1707" CreationDate="2013-08-04T16:54:52.517" Score="1" Body="&lt;p&gt;I think you're asking whether you can use a USB-to-serial adapter to enable you to connect a USB webcam to a serial-to-wifi converter.  The answer to that is no, unfortunately.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;USB defines a hardware interface and a communications protocol.  Your webcam driver communicates with the physical webcam by sending image data over USB, and your USB-to-serial adapter sends RS232 data over USB.  The video stream and the RS232 stream are not compatible.  (And even if your webcam somehow sent data over RS232, USB devices communicate with the operating system, not each other.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you are looking for is a bridge -- a way to send USB data over wifi.  There are other consumer products which perform this function, &lt;em&gt;e.g.&lt;/em&gt; &lt;a href=&quot;http://www.gizmag.com/iogear-wireless-4-port-usb-sharing-station/19471/&quot; rel=&quot;nofollow&quot;&gt;this one&lt;/a&gt; or &lt;a href=&quot;http://www.icron.com/products/icron-brand/legacy/usb-wi-ranger/&quot; rel=&quot;nofollow&quot;&gt;this one&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2013-08-04T16:54:52.517" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1710" PostTypeId="2" ParentId="1654" CreationDate="2013-08-05T20:02:09.420" Score="5" Body="&lt;p&gt;In the industrial world, robots have a clear definition to differentiate them from other industrial machines:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Industrial robot as defined by ISO 8373:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;An automatically controlled, reprogrammable, multipurpose manipulator programmable in three or more axes, which may be either fixed in place or mobile for use in industrial automation applications.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Reprogrammable: whose programmed motions or auxiliary functions may be changed without physical alterations;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Multipurpose: capable of being adapted to a different application with physical alterations;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Physical alterations: alteration of the mechanical structure or control system except for changes of programming cassettes, ROMs, etc.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Axis: direction used to specify the robot motion in a linear or rotary mode &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The important words in this definition are &quot;reprogrammable&quot; and &quot;multipurpose.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, let's think about a welding operation that takes place in a car factory.  This operation could be done with a custom machine that lowers welding elements into place at the appropriate place on the car.  Or we could install a robot arm, put a welder on the end of the arm, and teach (program) it where to weld.  When a new model of car comes along, we can teach it the new weld points.  If we no longer need the welding operation, we can move the robot somewhere else, put a new tool on the end of the arm, and teach it to paint or to screw in a bolt.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a larger context, people have different ideas about what is a robot and what is not.  But &quot;multipurpose&quot; and &quot;reprogrammable&quot; are still key ideas.  If you can't easily re-purpose your machine to do something completely different by reprogramming (and perhaps making minimal hardware &quot;tool&quot; changes), it's not a robot.&lt;/p&gt;&#xA;" OwnerUserId="1748" LastActivityDate="2013-08-05T20:02:09.420" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1711" PostTypeId="1" AcceptedAnswerId="1714" CreationDate="2013-08-05T21:23:04.340" Score="13" ViewCount="9578" Body="&lt;p&gt;Consider a differential drive robot that has two motorized wheels with an encoder attached to each for feedback. Supposed there is a function for each DC motor that takes a float from -1 to 1 and sets the PWM signals to provide a proportional amount of power to that motor. Unfortunately, not all motors are created equal, so sending each motor the same PWM signal makes the robot veer left or right. I'm trying to think about how to drive the robot straight using the encoders attached to each motor as input to a PID loop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's how I would do it: I would take the difference between the left and right encoders, bound the error between some range, normalize it to be from [-1, 1], and then map it to the motor powers 0 to 1. So if I and D were zero, and we get an error of 1 (so the left motor has turned much more than the right motor), then left motor would be set to 0, and the right motor set to 1 (causing a hard left). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any issues with this? What is a better approach?&lt;/p&gt;&#xA;" OwnerUserId="181" LastEditorUserId="181" LastEditDate="2013-08-07T15:52:59.587" LastActivityDate="2016-07-26T15:19:34.677" Title="Approach to using PID to get a differential robot driving straight" Tags="&lt;pid&gt;&lt;differential-drive&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="1712" PostTypeId="1" AcceptedAnswerId="1715" CreationDate="2013-08-06T09:26:02.310" Score="6" ViewCount="13484" Body="&lt;p&gt;I am working on a robot with focus on speed. At the moment I am looking for a suitable motor but it world help if I understood the difference between the various options.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To provide some background, I have not worked with RC model components before, but I think this is the only place for me to find the components needed for my robot, such as the motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have already figured out how much power the motor needs to accelerate my robot as desired, taking energy conversion efficiency and tractional resistance into account. It's about 170 watts, depending on the final weight.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To limit my search further, I need to decide on either using a RC car motor or a RC helicopter motor now, but I don't understand the difference between these options.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Focussing on brushless motors (if that matters), what are the differences between RC car and RC helicopter motors which might need to be taken into account when choosing between them?&lt;/p&gt;&#xA;" OwnerUserId="1054" LastEditorUserId="37" LastEditDate="2013-08-06T14:28:47.760" LastActivityDate="2014-01-20T02:23:13.360" Title="What is the difference between RC motors for cars and helicopters?" Tags="&lt;motor&gt;&lt;brushless-motor&gt;" AnswerCount="4" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1714" PostTypeId="2" ParentId="1711" CreationDate="2013-08-06T15:23:20.257" Score="5" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Are there any issues with this?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The main issue with this is that while your proposed solution will instantaneously correct for a mismatch between the performance of the motors, it will not correct for accumulated error, let alone more complex errors in position such as &lt;a href=&quot;http://en.wikipedia.org/wiki/Abbe_error&quot; rel=&quot;nofollow noreferrer&quot;&gt;Abbe error&lt;/a&gt; (see later).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What is a better approach?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There are several things you can do, depending on what your tolerance for errors are and how much effort you want to put into correcting them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first step would be to set up a pair of PID loops, one for each wheel, giving them both the same demand position. As I suggested in &lt;a href=&quot;https://robotics.stackexchange.com/a/1234/37&quot;&gt;my answer to a similar question&lt;/a&gt;, if you keep both wheels within a very tight error bound of where you ask them to be, then it will take some time to accumulate enough of an error to cause noticeable veer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It will also be much easier to tune two nominally independent Motor level PID loops than to tune a single complex, interdependent combined system. To stand any change of the higher level control working you really need each motor to behave as similarly as possible to the other motor for as much of the time as possible, and that really requires separate servo loops.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are a number of further complications however, and it depends what accuracy you need and how much effort you are prepared to go to to correct for them as to which solution you go for. It may be that &lt;a href=&quot;http://en.wikipedia.org/wiki/Dead_reckoning&quot; rel=&quot;nofollow noreferrer&quot;&gt;Dead Reckoning&lt;/a&gt; is sufficient, or you may need to add Relative or Absolute position determination to your robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One problem is that even if your left and right wheels both move 1000 encoder counts, you &lt;em&gt;may&lt;/em&gt; still end up in a different position on two different runs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, say you have a maximum following error of 10 encoder counts, and your motors are running at a speed of say 10 encoder counts per PID loop iteration. Your left motor might move 5,10,10,10...10,5 while your right motor might have a profile of 4,11,10,10...10,5 and even that slight difference in acceleration at the start of the move could cause the robot to set off in slightly the wrong direction. Not only that but the further you move in that direction, the greater the error will become in absolute terms. This is what we are talking about when we talk of &lt;a href=&quot;http://en.wikipedia.org/wiki/Abbe_error&quot; rel=&quot;nofollow noreferrer&quot;&gt;Abbe error&lt;/a&gt;, and without a complex kinematic model or some sort of external reference, you are never going to be able to correct for it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For more information, see &lt;a href=&quot;https://robotics.stackexchange.com/a/1234/37&quot;&gt;my answer&lt;/a&gt; to a similar but not quite duplicate question: &lt;a href=&quot;https://robotics.stackexchange.com/q/1232/37&quot;&gt;How can I use the Arduino PID library to drive a robot in a straight line?&lt;/a&gt; &#xA;and &lt;a href=&quot;https://robotics.stackexchange.com/a/1527/37&quot;&gt;my answer&lt;/a&gt; to the also related &lt;a href=&quot;https://robotics.stackexchange.com/q/1524/37&quot;&gt;Line Follower optimization&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2013-08-07T16:42:16.877" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1715" PostTypeId="2" ParentId="1712" CreationDate="2013-08-06T16:28:04.127" Score="6" Body="&lt;p&gt;I think the term you're looking for is &lt;a href=&quot;http://en.wikipedia.org/wiki/Outrunner&quot; rel=&quot;nofollow&quot;&gt;outrunner&lt;/a&gt; (vs &lt;a href=&quot;http://en.wikipedia.org/wiki/Inrunner&quot; rel=&quot;nofollow&quot;&gt;inrunner&lt;/a&gt;):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This type of motor spins its outer shell around its windings&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;[...]&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Outrunners spin much slower than their inrunner counterparts with their more traditional layout (though still considerably faster than ferrite motors) while producing far more torque. This makes an outrunner an excellent choice for directly driving electric aircraft propellers since they eliminate the extra weight, complexity, inefficiency and noise of a gearbox.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Inrunners (which are what most people think of when they think of a &lt;a href=&quot;http://en.wikipedia.org/wiki/DC_motor&quot; rel=&quot;nofollow&quot;&gt;DC motor&lt;/a&gt;) are high-RPM motors with low torque, which usually require some kind of mechanical transmission to be practical.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Quadcopters and other aerial vehicles tend to use outrunners, while R/C cars tend to use inrunners.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2013-08-08T13:12:28.800" LastActivityDate="2013-08-08T13:12:28.800" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="1717" PostTypeId="1" CreationDate="2013-08-07T06:08:26.700" Score="6" ViewCount="10907" Body="&lt;p&gt;I know that the Complementary Filter has the functions of both LPF and HPF. But I think my understanding on the principal behind it is still unclear.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am quite new on digital signal processing, and maybe some very fundamental explanations will help a lot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Say I have a Complementary Filter as follows:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$y =a\cdot y+(1-a)\cdot x$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then my parameter $a$ may be calculated by $$a=\frac{\text{time constant}}{\text{time constant}+\text{sample period}}$$&#xA;where the $\text{sample period}$ is simply the reciprocal of the $\text{sampling frequency}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The $\text{time constant}$ seems to be at my own choice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;My Questions:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;What is the theory behind this calculation?&lt;/li&gt;&#xA;&lt;li&gt;How do we choose the $\text{time constant}$ properly?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;sub&gt;&lt;strong&gt;Note:&lt;/strong&gt; I also &lt;a href=&quot;https://stackoverflow.com/q/18095785&quot;&gt;posted this question on Stack Overflow&lt;/a&gt;, as the answers there are likely to be slightly different in emphasis.&lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="1770" LastEditorUserId="-1" LastEditDate="2017-05-23T12:37:11.430" LastActivityDate="2013-08-08T11:41:25.443" Title="How to determine the parameter of a Complementary Filter?" Tags="&lt;gyroscope&gt;&lt;magnetometer&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1719" PostTypeId="2" ParentId="807" CreationDate="2013-08-07T13:36:08.673" Score="5" Body="&lt;p&gt;I would say any application where a large number of communications nodes are required (sensors or actuators) would benefit from being implemented as a system bus (in contrast to point to point links such as UART or Ethernet), due to wiring complexity, determinism and modularity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any control system requires a high degree of determinism, which high bandwidth channels (such as Ethernet) are usually poor at (especially when used with a general purpose OS which introduces large amounts of scheduling jitter, see &lt;a href=&quot;http://elinux.org/images/4/4e/Real-Time-Preemption-Patchset.pdf&quot;&gt;the following link for a discussion on scheduling determinism&lt;/a&gt;). Application processors (such as the ARM11 of the Raspberry Pi) is also probably a poor fit for real-time systems (due to effects such as interrupt latency, and instruction pipe-lining). &lt;a href=&quot;http://www.digikey.com/us/en/techzone/microcontroller/resources/articles/real-time-notes-on-microcontroller-interrupt-latency.html&quot;&gt;See the following digikey discussion comparing real-time behavior of a ARM application core vs a microcontroller&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's a shame the availability of integrated CAN isn't as widespread as UART (RS-485) or I2C (yet), because I think it really simplifies the problem of distributed sensing and actuation. And while the usual 1 Mbps may seem slow, it's usually more than enough after refresh rates of all bus members are calculated (and the transmission rate can always be increased, depending on bus length, impedance and whether your transceivers will allow it). There's also brilliant simulation software available, that basically guarantees worst case response times (for instance RealTime-at-work has a free CAN bus analyser called RTaW-Sim). And finally, it would seem the availability of MEMS sensors with integrated CAN is rather poor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another example where actuators are configured as a bus (or ring), is Dynamixels AX and MX series, where each motor is daisy chained to the next via a UART link. This greatly simplifies system design if you have a large amount of actuators.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, to get back to the actual question, I think if you describe your system as real-time set points, instead of commands (eg rather continuously broadcast a motor angle than instructing a command such as goto angle), it simplifies the coupling between the 200 Hz and 30 Hz loop.&lt;/p&gt;&#xA;" OwnerUserId="1775" LastActivityDate="2013-08-07T13:36:08.673" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1720" PostTypeId="2" ParentId="1712" CreationDate="2013-08-07T16:54:53.193" Score="2" Body="&lt;p&gt;Ian is absolutely right.  I've been in the RC hobby for years.  Your drivetrain/gearing is going to be your biggest factor into deciding inrunner vs. outrunner.  You must also consider your power source and figure out it's voltage and max current output and be sure it has enough capacity (typically measured in milliamp/hours).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To make things easier, I'd recommend buying a brushless SYSTEM so you don't have to worry when buying a separate ESC (electronic speed controller) and having it not be a good match for your motor choice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Brushless motors are faster than you might think.  They can easily make RC cars go 50+ MPH.  You don't want to have something so fast you can't control it.  All said, I'd go with a properly powered and geared inrunner because I believe the large RPM range will allow greater control.  I've NEVER seen a radio controlled land vehicle use an outrunner brushless setup in all my years.  Good luck!&lt;/p&gt;&#xA;" OwnerUserId="1779" LastActivityDate="2013-08-07T16:54:53.193" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1721" PostTypeId="2" ParentId="1717" CreationDate="2013-08-07T19:55:21.663" Score="4" Body="&lt;p&gt;The complementary filter you mentioned comprises of both a low-pass filter (which filters out, or attenuates, short term accelerometer fluctuations), as well as a high pass filter (which tries to negate the effect of drift on the gyroscope).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/GTkB0.jpg&quot; alt=&quot;Image copied from [http://www.chrismarion.net/index.php?option=com_content&amp;amp;view=article&amp;amp;id=122:the-segway-theory&amp;amp;catid=44:robotics](Chris Marion  - The Segway: Theory (Jan 2011))&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A time constant $\tau$ with respect to first order filters describes at what point (the cut-off frequency $f_{c}$) information should start being rejected (LPF) or stop being rejected (HPF). With respect to a complementary filter the time-constant used is the same for both the LPF as well as the HPF. The time constant can be thought of as boundary between trusting the gyroscope, and trusting the accelerometer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The value of $a$, or the time constant, should be a function of your gyroscope's drift and accelerometer noise. You can optimize to filter out gyroscopic drift (HPF with slow cut-off), but then your accelerometer will allow too much accelerometer noise (LPF with slow cut-off).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As with all filter design, calculate the filter coefficients, test it to confirm it doesn't work, and randomly tweak it till it does.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Refer to the following links for more in depth discussion:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.chrismarion.net/index.php?option=com_content&amp;amp;view=article&amp;amp;id=122:the-segway-theory&amp;amp;catid=44:robotics&quot; rel=&quot;nofollow noreferrer&quot;&gt;Marion, C. The Segway: Theory (Jan 2011)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://web.mit.edu/scolton/www/filter.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Colton, S. A Simple Solution for Integrating Accelerometer and&#xA;Gyroscope Measurements for a Balancing Platform (June 2007)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="1775" LastEditorUserId="1775" LastEditDate="2013-08-07T20:11:06.873" LastActivityDate="2013-08-07T20:11:06.873" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="1724" PostTypeId="1" CreationDate="2013-08-08T03:40:20.787" Score="5" ViewCount="1435" Body="&lt;p&gt;Need a way to dispense micro liter amounts of water (lets say 1-10ul). Only thing I've found is piezoelectric dispensers and they are &gt;$100. Any suggestions? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can build, but preferably would be an off-the-shelf component.&lt;/p&gt;&#xA;" OwnerUserId="1782" LastActivityDate="2015-05-08T17:21:12.940" Title="Off-the-shelf micro fluid dispenser" Tags="&lt;electronics&gt;" AnswerCount="4" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1727" PostTypeId="2" ParentId="1654" CreationDate="2013-08-08T07:18:59.660" Score="0" Body="&lt;p&gt;There are quite some definitions (see other questions) and even robot ontologies. I am with &lt;a href=&quot;http://en.wikipedia.org/wiki/Joseph_Engelberger&quot; rel=&quot;nofollow&quot;&gt;Joseph Engelberger&lt;/a&gt; (inventor of the first industrial robot &lt;a href=&quot;http://en.wikipedia.org/wiki/Unimate&quot; rel=&quot;nofollow&quot;&gt;Unimate&lt;/a&gt;):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I can't define a robot, but I know one when I see one.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Works quite well.&lt;/p&gt;&#xA;" OwnerUserId="157" LastEditorUserId="134" LastEditDate="2013-08-18T06:48:42.477" LastActivityDate="2013-08-18T06:48:42.477" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1728" PostTypeId="1" AcceptedAnswerId="1971" CreationDate="2013-08-08T11:47:18.693" Score="4" ViewCount="627" Body="&lt;p&gt;I'm working on a robotics project, and I am using grayscale sensors to automatically follow a black line: turning 90 degrees, going round in a circle, and passing through gaps in the lines etc.  I was wondering what is an effective way to detect the colours and move it through the lines, with five or six grayscale sensors.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you very much.&lt;/p&gt;&#xA;" OwnerUserId="1783" LastEditorUserId="134" LastEditDate="2013-08-20T07:41:29.770" LastActivityDate="2014-12-02T01:27:25.053" Title="What is an effective distribution of grayscale sensors on robot" Tags="&lt;mobile-robot&gt;&lt;sensors&gt;&lt;automatic&gt;&lt;line-following&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1729" PostTypeId="1" CreationDate="2013-08-09T16:15:58.987" Score="13" ViewCount="742" Body="&lt;p&gt;I'm doing some groundwork for a project, and I have a question about the current state of SLAM techniques.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When a SLAM-equipped device detects an object, that object's position is stored. If you look at the point cloud the device is generating, you'll see points for this object, and models generated from it will include geometry here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If an object is placed in a previously-empty space, it is detected, and points are added. Subsequent models will feature geometry describing this new object.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How does the device react if that object is removed? As far as I've seen, SLAM systems will tend to leave the points in place, resulting in &quot;ghost&quot; geometry. There are algorithms that will disregard lone points caused by transient contacts, but objects that remained long enough to build up a solid model will remain in the device's memory. Are there any systems that are capable of detecting that previously-occupied space is now empty?&lt;/p&gt;&#xA;" OwnerUserId="873" LastEditorUserId="134" LastEditDate="2013-08-12T18:52:25.430" LastActivityDate="2013-08-12T18:52:25.430" Title="How do SLAM algorithms handle a changing environment?" Tags="&lt;slam&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1730" PostTypeId="1" CreationDate="2013-08-10T08:47:59.637" Score="3" ViewCount="697" Body="&lt;p&gt;I'm trying to put together a simple simulation for a delta robot and I'd like to use forward kinematics (direct kinematics) to compute the end effector's position in space by passing 3 angles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've started with the &lt;a href=&quot;http://forums.trossenrobotics.com/tutorials/introduction-129/delta-robot-kinematics-3276/&quot; rel=&quot;nofollow&quot;&gt;Trossen Robotics Forum Delta Robot Tutorial&lt;/a&gt; and I can understand most of the math, but not all. I'm lost at the last part in forward kinematics, when trying to compute the point where the 3 sphere's intersect. I've looked at spherical coordinates in general but couldn't work out the two angles used to find to rotate towards (to E(x,y,z)).&#xA;I see they're solving the equation of a sphere, but that's where I get lost. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can someone please 'dumb it down' for me ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, I've used the example code to do a quick visualization using &lt;a href=&quot;http://processing.org/&quot; rel=&quot;nofollow&quot;&gt;Processing&lt;/a&gt;,&#xA;but the last part seems wrong. The lower leg changes length and it shouldn't:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;//Rhino measurements in cm&#xA;final float e = 21;//end effector side&#xA;final float f = 60.33;//base side&#xA;final float rf = 67.5;//upper leg length - radius of upper sphere&#xA;final float re = 95;//lower leg length - redius of lower sphere (with offset will join in E(x,y,z))&#xA;&#xA;final float sqrt3 = sqrt(3.0);&#xA;final float sin120 = sqrt3/2.0;   &#xA;final float cos120 = -0.5;        &#xA;final float tan60 = sqrt3;&#xA;final float sin30 = 0.5;&#xA;final float tan30 = 1/sqrt3;&#xA;final float a120 = TWO_PI/3;&#xA;final float a60 = TWO_PI/6;&#xA;&#xA;//bounds&#xA;final float minX = -200;&#xA;final float maxX = 200;&#xA;final float minY = -200;&#xA;final float maxY = 200;&#xA;final float minZ = -200;&#xA;final float maxZ = -10;&#xA;final float maxT = 54;&#xA;final float minT = -21;&#xA;&#xA;float xp = 0;&#xA;float yp = 0;&#xA;float zp =-45;&#xA;float t1 = 0;//theta&#xA;float t2 = 0;&#xA;float t3 = 0;&#xA;&#xA;float prevX;&#xA;float prevY;&#xA;float prevZ;&#xA;float prevT1;&#xA;float prevT2;&#xA;float prevT3;&#xA;&#xA;boolean validPosition;&#xA;//cheap arcball&#xA;PVector offset,cameraRotation = new PVector(),cameraTargetRotation = new PVector();&#xA;&#xA;void setup() {&#xA;  size(900,600,P3D);&#xA;}&#xA;&#xA;void draw() {&#xA;  background(192);&#xA;  pushMatrix();&#xA;  translate(width * .5,height * .5,300);&#xA;  //rotateY(map(mouseX,0,width,-PI,PI));&#xA;&#xA;  if (mousePressed &amp;amp;&amp;amp; (mouseX &amp;gt; 300)){&#xA;    cameraTargetRotation.x += -float(mouseY-pmouseY);&#xA;    cameraTargetRotation.y +=  float(mouseX-pmouseX);&#xA;  }&#xA;  rotateX(radians(cameraRotation.x -= (cameraRotation.x - cameraTargetRotation.x) * .35));&#xA;  rotateY(radians(cameraRotation.y -= (cameraRotation.y - cameraTargetRotation.y) * .35));&#xA;&#xA;  stroke(0);&#xA;  et(f,color(255));&#xA;  drawPoint(new PVector(),2,color(255,0,255));&#xA;  float[] t = new float[]{t1,t2,t3};&#xA;  for(int i = 0 ; i &amp;lt; 3; i++){&#xA;    float a = HALF_PI+(radians(120)*i);&#xA;    float r1 = f / 1.25 * tan(radians(30));&#xA;    float r2 = e / 1.25 * tan(radians(30));&#xA;    PVector F = new PVector(cos(a) * r1,sin(a) * r1,0);&#xA;    PVector E = new PVector(cos(a) * r2,sin(a) * r2,0);&#xA;    E.add(xp,yp,zp);&#xA;    //J = F * rxMat&#xA;    PMatrix3D m = new PMatrix3D();&#xA;    m.translate(F.x,F.y,F.z);&#xA;    m.rotateZ(a);&#xA;    m.rotateY(radians(t[i]));&#xA;    m.translate(rf,0,0);&#xA;&#xA;    PVector J = new PVector();&#xA;    m.mult(new PVector(),J);&#xA;    line(F.x,F.y,F.z,J.x,J.y,J.z);&#xA;    line(E.x,E.y,E.z,J.x,J.y,J.z);&#xA;    drawPoint(F,2,color(255,0,0));&#xA;    drawPoint(J,2,color(255,255,0));&#xA;    drawPoint(E,2,color(0,255,0));&#xA;    //println(dist(F.x,F.y,F.z,J.x,J.y,J.z)+&quot;\t&quot;+rf);&#xA;    println(dist(E.x,E.y,E.z,J.x,J.y,J.z)+&quot;\t&quot;+re);//length should not change&#xA;  }&#xA;  pushMatrix();&#xA;    translate(xp,yp,zp);&#xA;    drawPoint(new PVector(),2,color(0,255,255));&#xA;    et(e,color(255));&#xA;    popMatrix();&#xA;  popMatrix(); &#xA;}&#xA;void drawPoint(PVector p,float s,color c){&#xA;  pushMatrix();&#xA;    translate(p.x,p.y,p.z);&#xA;    fill(c);&#xA;    box(s);&#xA;  popMatrix();&#xA;}&#xA;void et(float r,color c){//draw equilateral triangle, r is radius ( median), c is colour&#xA;  pushMatrix();&#xA;  rotateZ(-HALF_PI);&#xA;  fill(c);&#xA;  beginShape();&#xA;  for(int i = 0 ; i &amp;lt; 3; i++)&#xA;    vertex(cos(a120*i) * r,sin(a120*i) * r,0);&#xA;  endShape(CLOSE);&#xA;  popMatrix();&#xA;}&#xA;void keyPressed(){&#xA;  float amt = 3;&#xA;  if(key == 'q') t1 -= amt;&#xA;  if(key == 'Q') t1 += amt;&#xA;  if(key == 'w') t2 -= amt;&#xA;  if(key == 'W') t2 += amt;&#xA;  if(key == 'e') t3 -= amt;&#xA;  if(key == 'E') t3 += amt;&#xA;  t1 = constrain(t1,minT,maxT);&#xA;  t2 = constrain(t2,minT,maxT);&#xA;  t3 = constrain(t3,minT,maxT);&#xA;  dk();&#xA;}&#xA;&#xA;void ik() {&#xA;  if (xp &amp;lt; minX) { xp = minX; }&#xA;  if (xp &amp;gt; maxX) { xp = maxX; }&#xA;  if (yp &amp;lt; minX) { yp = minX; }&#xA;  if (yp &amp;gt; maxX) { yp = maxX; }&#xA;  if (zp &amp;lt; minZ) { zp = minZ; }&#xA;  if (zp &amp;gt; maxZ) { zp = maxZ; }&#xA;&#xA;  validPosition = true;&#xA;  //set the first angle&#xA;  float theta1 = rotateYZ(xp, yp, zp);&#xA;  if (theta1 != 999) {&#xA;    float theta2 = rotateYZ(xp*cos120 + yp*sin120, yp*cos120-xp*sin120, zp);  // rotate coords to +120 deg&#xA;    if (theta2 != 999) {&#xA;      float theta3 = rotateYZ(xp*cos120 - yp*sin120, yp*cos120+xp*sin120, zp);  // rotate coords to -120 deg&#xA;      if (theta3 != 999) {&#xA;        //we succeeded - point exists&#xA;        if (theta1 &amp;lt;= maxT &amp;amp;&amp;amp; theta2 &amp;lt;= maxT &amp;amp;&amp;amp; theta3 &amp;lt;= maxT &amp;amp;&amp;amp; theta1 &amp;gt;= minT &amp;amp;&amp;amp; theta2 &amp;gt;= minT &amp;amp;&amp;amp; theta3 &amp;gt;= minT ) { //bounds check&#xA;          t1 = theta1;&#xA;          t2 = theta2;&#xA;          t3 = theta3;&#xA;        } else {&#xA;          validPosition = false;&#xA;        }&#xA;&#xA;      } else {&#xA;        validPosition = false;&#xA;      }&#xA;    } else {&#xA;      validPosition = false;&#xA;    }&#xA;  } else {&#xA;    validPosition = false;&#xA;  }&#xA;&#xA;  //uh oh, we failed, revert to our last known good positions&#xA;  if ( !validPosition ) {&#xA;    xp = prevX;&#xA;    yp = prevY;&#xA;    zp = prevZ;&#xA;  }&#xA;&#xA;}&#xA;&#xA;void dk() {&#xA;  validPosition = true;&#xA;&#xA;  float t = (f-e)*tan30/2;&#xA;  float dtr = PI/(float)180.0;&#xA;&#xA;  float theta1 = dtr*t1;&#xA;  float theta2 = dtr*t2;&#xA;  float theta3 = dtr*t3;&#xA;&#xA;  float y1 = -(t + rf*cos(theta1));&#xA;  float z1 = -rf*sin(theta1);&#xA;&#xA;  float y2 = (t + rf*cos(theta2))*sin30;&#xA;  float x2 = y2*tan60;&#xA;  float z2 = -rf*sin(theta2);&#xA;&#xA;  float y3 = (t + rf*cos(theta3))*sin30;&#xA;  float x3 = -y3*tan60;&#xA;  float z3 = -rf*sin(theta3);&#xA;&#xA;  float dnm = (y2-y1)*x3-(y3-y1)*x2;&#xA;&#xA;  float w1 = y1*y1 + z1*z1;&#xA;  float w2 = x2*x2 + y2*y2 + z2*z2;&#xA;  float w3 = x3*x3 + y3*y3 + z3*z3;&#xA;&#xA;  // x = (a1*z + b1)/dnm&#xA;  float a1 = (z2-z1)*(y3-y1)-(z3-z1)*(y2-y1);&#xA;  float b1 = -((w2-w1)*(y3-y1)-(w3-w1)*(y2-y1))/2.0;&#xA;&#xA;  // y = (a2*z + b2)/dnm;&#xA;  float a2 = -(z2-z1)*x3+(z3-z1)*x2;&#xA;  float b2 = ((w2-w1)*x3 - (w3-w1)*x2)/2.0;&#xA;&#xA;  // a*z^2 + b*z + c = 0&#xA;  float a = a1*a1 + a2*a2 + dnm*dnm;&#xA;  float b = 2*(a1*b1 + a2*(b2-y1*dnm) - z1*dnm*dnm);&#xA;  float c = (b2-y1*dnm)*(b2-y1*dnm) + b1*b1 + dnm*dnm*(z1*z1 - re*re);&#xA;&#xA;  // discriminant&#xA;  float d = b*b - (float)4.0*a*c;&#xA;  if (d &amp;lt; 0) { validPosition = false; }&#xA;&#xA;  zp = -(float)0.5*(b+sqrt(d))/a;&#xA;  xp = (a1*zp + b1)/dnm;&#xA;  yp = (a2*zp + b2)/dnm;&#xA;&#xA;  if (xp &amp;gt;= minX &amp;amp;&amp;amp; xp &amp;lt;= maxX&amp;amp;&amp;amp; yp &amp;gt;= minX &amp;amp;&amp;amp; yp &amp;lt;= maxX &amp;amp;&amp;amp; zp &amp;gt;= minZ &amp;amp; zp &amp;lt;= maxZ) {  //bounds check&#xA;  } else {&#xA;    validPosition = false;&#xA;  }&#xA;&#xA;  if ( !validPosition ) {    &#xA;    xp = prevX;&#xA;    yp = prevY;&#xA;    zp = prevZ;&#xA;    t1 = prevT1;&#xA;    t2 = prevT2;&#xA;    t3 = prevT3;  &#xA;  }&#xA;&#xA;}&#xA;&#xA;void  storePrev() {&#xA;  prevX = xp;&#xA;  prevY = yp;&#xA;  prevZ = zp;&#xA;  prevT1 = t1;&#xA;  prevT2 = t2;&#xA;  prevT3 = t3;&#xA;}&#xA;&#xA;float rotateYZ(float x0, float y0, float z0) {&#xA;  float y1 = -0.5 * 0.57735 * f; // f/2 * tg 30&#xA;  y0 -= 0.5 * 0.57735    * e;    // shift center to edge&#xA;  // z = a + b*y&#xA;  float a = (x0*x0 + y0*y0 + z0*z0 +rf*rf - re*re - y1*y1)/(2*z0);&#xA;  float b = (y1-y0)/z0;&#xA;  // discriminant&#xA;  float d = -(a+b*y1)*(a+b*y1)+rf*(b*b*rf+rf); &#xA;  if (d &amp;lt; 0) return 999; // non-existing point&#xA;  float yj = (y1 - a*b - sqrt(d))/(b*b + 1); // choosing outer point&#xA;  float zj = a + b*yj;&#xA;  return 180.0*atan(-zj/(y1 - yj))/PI + ((yj&amp;gt;y1)?180.0:0.0);&#xA;} &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="269" LastActivityDate="2014-11-16T18:23:22.273" Title="How to correctly compute direct kinematics for a delta robot?" Tags="&lt;kinematics&gt;&lt;forward-kinematics&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="1732" PostTypeId="2" ParentId="1724" CreationDate="2013-08-10T17:04:12.840" Score="4" Body="&lt;p&gt;It may be practical to adapt some ink-jet printer heads to dispense water.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;An ink-jet printer head projects a stream of droplets.  Droplet volume varies widely among printers; typically, it's smaller in newer printers.  Eg, a fairly-comprehensive 1998 &lt;a href=&quot;http://www.imaging.org/ist/resources/tutorials/inkjet.cfm&quot; rel=&quot;nofollow&quot;&gt;inkjet tutorial&lt;/a&gt; at imaging.org says early HP 800-series ink-jets produced 6000 drops per second with 32 pL per drop, which works out to about 5.2 seconds to deliver 1 µL of ink.  (I don't know if the DPS is per nozzle or per head.) The later 890C with a 192-nozzle head produced 12000 drops per second with 10 pL per drop, or about 8.3 s to deliver 1 µL of ink.  As noted in a 2010 &lt;a href=&quot;http://blogs.computerworld.com/16162/hp_explains_why_printer_ink_is_so_expensive&quot; rel=&quot;nofollow&quot;&gt;computerworld.com blog&lt;/a&gt;, the “Photosmart 8250 uses 3,900 nozzles to deliver 122 million drops per second onto the paper.”&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Note, with a &lt;a href=&quot;http://en.wikipedia.org/wiki/Inkjet_printing#Drop-on-demand&quot; rel=&quot;nofollow&quot;&gt;drop-on-demand&lt;/a&gt; printhead, you could count drops – that is, control the number of pulses –  vs turning the head on for a timed interval.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strike&gt;An article called &lt;a href=&quot;http://www.labautopedia.org/mw/index.php/Non-Contact_Liquid_Handling:_Basics_and_Technologies&quot; rel=&quot;nofollow&quot;&gt;Non-Contact Liquid Handling: Basics and Technologies&lt;/a&gt; at labautopedia.org gives a good introduction to several techniques now in use for delivering small amounts of liquid.&lt;/strike&gt; &lt;em&gt;[Edit, May 2015: Article is gone; instead see &lt;a href=&quot;http://www.labautopedia.org/mw/index.php?title=Small_volume_pipetting&quot; rel=&quot;nofollow&quot;&gt;Small Volume Pipetting&lt;/a&gt; and perhaps &lt;a href=&quot;http://www.labautopedia.org/mw/index.php?title=Microfluidic_sample_transport&quot; rel=&quot;nofollow&quot;&gt;Microfluidic Sample Transport&lt;/a&gt;.]&lt;/em&gt;   Among other topics it covers physics of &#xA;droplet formation and illustrates several valving techniques.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strike&gt;Another useful survey, “Dispensing systems for miniaturized diagnostics”, is at &lt;a href=&quot;http://www.ivdtechnology.com/article/dispensing-systems-miniaturized-diagnostics&quot; rel=&quot;nofollow&quot;&gt;ivdtechnology.com&lt;/a&gt;.&lt;/strike&gt; &lt;em&gt;[Edit, May 2015: Website is gone; perhaps see &lt;a href=&quot;http://www.mddionline.com/search/apachesolr_search/Dispensing%20systems%20for%20miniaturized%20diagnostics&quot; rel=&quot;nofollow&quot;&gt;a search for related articles at mddionline.com&lt;/a&gt;]&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://en.wikipedia.org/wiki/Inkjet_printing&quot; rel=&quot;nofollow&quot;&gt;wikipedia inkjet article&lt;/a&gt; referenced earlier and a &lt;a href=&quot;http://en.wikipedia.org/wiki/Microdispensing&quot; rel=&quot;nofollow&quot;&gt;wikipedia microdispensing article&lt;/a&gt; are helpful but seem superficial compared to the imaging.org and labautopedia.org articles.  Also see an &lt;a href=&quot;http://www.ncbi.nlm.nih.gov/pubmed/17588671&quot; rel=&quot;nofollow&quot;&gt;nlm.nih.gov article&lt;/a&gt; about dispensing an enzyme-conjugated solution into an ELISA plate by adapting ink-jet printers, by Lonini et al.&lt;/p&gt;&#xA;" OwnerUserId="478" LastEditorUserId="478" LastEditDate="2015-05-08T17:21:12.940" LastActivityDate="2015-05-08T17:21:12.940" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1735" PostTypeId="2" ParentId="1729" CreationDate="2013-08-12T14:08:07.957" Score="5" Body="&lt;p&gt;That very much depends. Since SLAM is a problem (or at least a technique), not a solution, there is no definitive SLAM algorithm.  Semantically, you have to decide what goes on a &quot;map&quot; of the environment, and that determines how your algorithm should handle transient (aka moving) signals. But that's a digression.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Permanent maps:&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Permanent maps should contain enough information to localize yourself with respect to known geometry. Typically used in buildings. Typically human-readable. See Willow-Garage's work. or anything by Thrun in his quite famous textbook. If you lose this map, you have to build it up over time again. &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Removing objects. Yes, the object will appear in a static map for a time. If no measures are taken to remove previously-detected objects, then it will persist. A typical 2D grid-based representation will use each grid cell to represent the probability of an object, so after time the object will &quot;fade&quot;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Adding objects. Same as above.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;h3&gt;Local maps:&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;In reality, SLAM is usually used to localize a robot as it moves, and the map is not kept permanently (or, it is kept permanently, but only the closest Y features are used). Local maps are whatever the robot needs to know to determine how it moved in the last X minutes, where X depends on the application. If you lose the map, you can still fly just fine by using whatever features are in sight right now. &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Batch methods such as Bundle Adjustment using visual features is a very common technique in this direction. Features may be kept over time, and even revisited, but a moving feature is just an unreliable feature, and it will be ignored when trying to figure out where the robot is.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Visual SLAM is exactly this. It is a delta-P (change in pose) estimator, not a map-based localization algorithm. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;In short, as long as most things are &lt;em&gt;not currently&lt;/em&gt; moving, it doesn't matter if you remove an object when the robot isn't &quot;looking&quot; at it.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;h3&gt;Example&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;So do this. When you read a SLAM paper, decide the following:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Are they really building a map?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Are they just keeping a list of features and locations?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If so, what &quot;features&quot; go in the map? Lines, points, visual features?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Are these features likely to move? &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If so, how can they handle that?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Finally, sensor noise often &quot;looks&quot; like moving features. How do they handle sensor noise? Because this will often determine what happens to moving features.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;You'll get a different answer for each paper / author / book / application. In short, they are typically omitted since they don't help the robot localize much, and can be avoided by simply having a few low-level path planner that only uses local information. &lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Good luck, slam is a huge topic.&lt;/h3&gt;&#xA;" OwnerUserId="163" LastEditorUserId="163" LastEditDate="2013-08-12T14:13:50.577" LastActivityDate="2013-08-12T14:13:50.577" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="1736" PostTypeId="2" ParentId="1724" CreationDate="2013-08-12T15:06:00.130" Score="1" Body="&lt;p&gt;Just how precise do you need to be? We build medical instruments and a $100 pump would be considered pretty damn cheap around here. The most common technology is a syringe pump controlled by a stepper motor, but for precise, very repeatable dispense, fluid dynamic effects have to be considered. e.g., wicking off the droplet at the probe tip can have a dramatic impact on accuracy.&lt;/p&gt;&#xA;" OwnerUserId="794" LastActivityDate="2013-08-12T15:06:00.130" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1737" PostTypeId="1" CreationDate="2013-08-12T18:00:51.573" Score="0" ViewCount="1021" Body="&lt;p&gt;I want to use my atmega8 uC as a &lt;a href=&quot;/questions/tagged/h-bridge&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged 'h-bridge'&quot; rel=&quot;tag&quot;&gt;h-bridge&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anybody give me the source code using C, so that the microcontroller acts as an H-Bridge.&lt;/p&gt;&#xA;" OwnerUserId="1799" LastEditorUserId="110" LastEditDate="2015-04-20T00:28:19.857" LastActivityDate="2015-04-20T17:33:18.510" Title="H-Bridge using atmega8 microcontroller" Tags="&lt;microcontroller&gt;&lt;c&gt;&lt;h-bridge&gt;&lt;avr&gt;" AnswerCount="3" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1738" PostTypeId="2" ParentId="1737" CreationDate="2013-08-12T21:56:39.593" Score="1" Body="&lt;p&gt;I'm not really familiar with Atmel microcontrollers, but I'm assuming you're using some Arduino variant. &lt;a href=&quot;http://itp.nyu.edu/physcomp/Labs/DCMotorControl&quot; rel=&quot;nofollow&quot;&gt;Here's a pretty thorough tutorial about using an Arduino with a SN754410 h-bridge&lt;/a&gt; (found it via the SN754410 Sparkfun entry). It seems the only thing the tutorial lacks is controlling the motors via PWM, which of course means you will only be able to control the motors direction, and whether the motor is on or off. Just google Arduino PWM, I'm sure there's loads of code examples. [Update] &lt;a href=&quot;http://learn.adafruit.com/adafruit-arduino-lesson-15-dc-motor-reversing?view=all&quot; rel=&quot;nofollow&quot;&gt;See also Adafruit Arduino tutorials&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One thing to keep in mind is to never enable both directional signals at the same time (which obviously causes a straight short across your motor rail). One way of ensuring this never happens is by using only one micro-controller output (eg &lt;code&gt;MOTOR_DIR_FORWARD&lt;/code&gt;), and then feeding that into a not-gate, and then into your other directional signal (in other words, instead of having a motor enable ouput, and two directional outputs, you'll only have a motor enable output, and a single directional output).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also remember that if your motors and micro are running off the same supply that insufficient decoupling may cause your micro to reset.&lt;/p&gt;&#xA;" OwnerUserId="1775" LastEditorUserId="1775" LastEditDate="2013-08-12T22:12:18.823" LastActivityDate="2013-08-12T22:12:18.823" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1740" PostTypeId="2" ParentId="1724" CreationDate="2013-08-13T18:24:50.087" Score="2" Body="&lt;p&gt;If your goal is to dispense a single reagent (water), then you are best off using a microdispensing valve based solution. I do not know that you will find something for less than $100, but if you went that route, you would be looking for parts like &lt;a href=&quot;http://www.theleecoefs.com/EFSWEB2.NSF/MDG!OpenView&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are other technologies out there (syringe based, capillary action based, pipette based), but none are suited as well as a microdispensing valve for bulk reagent dispensing in the 1-10uL volume range. You can find more technical information about microdispensing &lt;a href=&quot;http://www.theleecoefs.com/PDF.nsf/bdb21d9b7952d46a85256a400071dc4c/e9c48210dfa8354f85256cc4004de470/%24FILE/VHS-STARTER%20KIT%20MANUAL-B2.pdf&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="1800" LastActivityDate="2013-08-13T18:24:50.087" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1742" PostTypeId="2" ParentId="1737" CreationDate="2013-08-13T23:44:35.437" Score="2" Body="&lt;p&gt;It is not possible to use the micro-controller directly as an H-Bridge. A micro-controller is a micro-controller and an H-bridge is an H-bridge. You need both of them to control a motor (or something equivalent).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I will suppose that you are using motors and not servo. Let's say you want to use your micro-controller as an H-bridge. You have two cables from the motor. One for the ground and the other one for the current. When both of them are plugged, how are you going to wired it to the micro-controller to control the motor ? Or are you going to wire directly the current supply wire to the micro-controller ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The thing is you will not be able to input enough current to move the motor with just the pin of a micro-controller. You will need another source of current and thus, something to control it, if you want to control the direction and speed of your motor. That's where the H-bridge is used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should read some documentation about &lt;a href=&quot;http://en.wikipedia.org/wiki/H_bridge&quot; rel=&quot;nofollow&quot;&gt;H-Bridge&lt;/a&gt;, it's not that complicated to understand.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And if you really want not to use H-Bridge, you can create one with &lt;a href=&quot;http://www.instructables.com/id/H-Bridge-on-a-Breadboard/&quot; rel=&quot;nofollow&quot;&gt;transistors&lt;/a&gt; on the bread-board. That tutorial is pretty good for that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If in the end you want to use H-Bridge, the &lt;a href=&quot;http://itp.nyu.edu/physcomp/Labs/DCMotorControl&quot; rel=&quot;nofollow&quot;&gt;tutorial&lt;/a&gt; that EDDY74 gave you is perfect for that. Really simple and easy to understand. To, then, control the motor via a PWM is fairly easy since you just have to modulate the enable pin or the motor logic pins (I guess it depend on the H-bridge you are using).&#xA;There a &lt;a href=&quot;http://forum.arduino.cc/index.php/topic,9522.0.html&quot; rel=&quot;nofollow&quot;&gt;discussion&lt;/a&gt; about speed control on the Arduino forum.&lt;/p&gt;&#xA;" OwnerUserId="1615" LastActivityDate="2013-08-13T23:44:35.437" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1743" PostTypeId="1" AcceptedAnswerId="1744" CreationDate="2013-08-14T08:20:38.523" Score="3" ViewCount="6142" Body="&lt;p&gt;I am using SIM900A for some purpose and want to know the number of the sender from where a message comes. I am unable to find the specific AT command related to receiving message which give me number from where latest message comes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I had used AT+CNMI (it corresponds to notification regarding latest received message), but am unable to find sender number.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I had seen AT+CMGL=&amp;lt;stat&amp;gt;[,&amp;lt;mode&amp;gt;] will give you a string which will have oa i.e. originating address and once that is stored in a string I can easily parse it out, but when I had data format of that string. Need help or any suggestion if somebody can help me out with any other possible solution.&lt;/p&gt;&#xA;" OwnerUserId="1322" LastEditorUserId="1177" LastEditDate="2013-12-31T16:58:03.877" LastActivityDate="2013-12-31T16:58:03.877" Title="AT command in SIM900A GSM/GPRS module to find out originating address of an SMS" Tags="&lt;arduino&gt;&lt;microcontroller&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1744" PostTypeId="2" ParentId="1743" CreationDate="2013-08-14T09:26:57.180" Score="1" Body="&lt;h3&gt;Text mode vs PDU mode&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The SIM900 module supports both text and PDU mode. Please note that some AT commands have different syntax depending on which mode is currently active. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To check which mode is currently active (0: PDU mode, 1: Text mode):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; AT+CMGF?&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;h3&gt;Retrieving SMS's&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;You can use the CMGL command to retrieve unread, read, stored unsent, stored sent, or all messages.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If text mode is currently selected:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; AT+CMGL=STAT,MODE&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Parameters:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;STAT:&#xA;   &quot;REC UNREAD&quot;  Received unread messages&#xA;   &quot;REC READ&quot;    Received read messages&#xA;   &quot;STO UNSENT&quot;  Stored unsent messages&#xA;   &quot;STO SENT&quot;    Stored sent messages&#xA;   &quot;ALL&quot;         All messages&#xA;MODE: (OPTIONAL)&#xA;   0 Normal&#xA;   1 Not change status of the specified SMS record&#xA;&#xA;In other words, the following command should print all SMS messages:&#xA;&#xA;   AT+CMGL=&quot;ALL&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If PDU mode is currently selected:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; AT+CMGL=STAT,MODE&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Parameters:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;STAT:&#xA;   0  Received unread messages&#xA;   1  Received read messages&#xA;   2  Stored unsent messages&#xA;   3  Stored sent messages&#xA;   4  All messages&#xA;MODE: (OPTIONAL)&#xA;   0 Normal&#xA;   1 Not change status of the specified SMS record&#xA;&#xA;In other words, the following command should print all SMS messages:&#xA;&#xA;   AT+CMGL=4&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;h3&gt;Example&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;If text mode is currently selected, and a CMGL command is issued, the following is an example of what could be expected (note there's a line break before the actual message starts).&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;AT+CMGL=&quot;ALL&quot;&#xA;+CMGL: 1,&quot;REC READ&quot;,&quot;+85291234567&quot;,,&quot;07/05/01,08:00:15+32&quot;,145,37&#xA;It is easy to list SMS text messages.&#xA;&#xA;     1                      : Message index&#xA;     &quot;REC READ&quot;             : Message status (it's been read before)&#xA;     &quot;+85291234567&quot;         : Source number (ie the person that sent you the sms)&#xA;     &quot;07/05/01,08:00:15+32&quot; : Service center timestamp&#xA;     145                    : Character set&#xA;     37                     : Length of message&#xA;&#xA;Refer to Section 4.2.3, page 99, of the SIM900 AT command set for more information.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;h3&gt;External links&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.cooking-hacks.com/skin/frontend/default/cooking/pdf/SIM900_AT_Command_Manual.pdf&quot; rel=&quot;nofollow&quot;&gt;SIM900A AT Command set (V1.05: 2011-10-24)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.developershome.com/sms/checkCommandSupport.asp&quot; rel=&quot;nofollow&quot;&gt;Developers home — Tutorials regarding AT commands&lt;/a&gt; (I'd strongly recommend you take some time and go through the tutorials — especially sections 18 to 26)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="1775" LastEditorUserId="1177" LastEditDate="2013-12-31T16:57:56.517" LastActivityDate="2013-12-31T16:57:56.517" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1745" PostTypeId="1" AcceptedAnswerId="1747" CreationDate="2013-08-14T11:48:18.233" Score="0" ViewCount="100" Body="&lt;p&gt;I am planning to build a robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) What free or low cost robot modelling tools exist.&lt;/p&gt;&#xA;" OwnerUserId="1813" LastActivityDate="2013-08-16T17:26:03.963" Title="What modelling tools are available to design a robot" Tags="&lt;design&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ClosedDate="2013-08-16T13:37:46.303" ContentLicense="CC BY-SA 3.0" />
  <row Id="1746" PostTypeId="2" ParentId="1538" CreationDate="2013-08-14T12:20:45.840" Score="4" Body="&lt;p&gt;I think a more compact and reliable solution would be to use a third shaft that is perpendicular to the other two (on the Z-axis)&lt;/p&gt;&#xA;&lt;p&gt;Given the shaft moving up/down is moving on the Y-axis and the shaft moving left/right is moving on the X-axis.&lt;/p&gt;&#xA;&lt;p&gt;This crude diagram should explain things better.&lt;/p&gt;&#xA;&lt;p&gt;As the motor turns Shaft A upwards it then turns Shaft C. Shaft C then moves Shaft B left and right&lt;/p&gt;&#xA;&lt;p&gt;The addition of Shaft C would make this vertical to horizontal conversion precise and compact.&lt;/p&gt;&#xA;&lt;p&gt;Note that the only rotating parts are Shafts A and C. Shaft B would only move left and right.&lt;/p&gt;&#xA;&lt;p&gt;And unlike Kurts answer there's no need for messy joints at the end of each shaft.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/8Z17O.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;&#xA;" OwnerUserId="1610" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2013-08-15T11:45:16.637" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1747" PostTypeId="2" ParentId="1745" CreationDate="2013-08-14T16:36:17.253" Score="2" Body="&lt;p&gt;Here are some that I know of:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Solidworks student edition: &#xA;&lt;a href=&quot;http://www.solidworks.com/sw/education/cad-faq-students.htm&quot; rel=&quot;nofollow&quot;&gt;http://www.solidworks.com/sw/education/cad-faq-students.htm&lt;/a&gt;&#xA;(Free for students who use a school's privately assigned password, otherwise $149)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;AutoCAD Student version: &lt;a href=&quot;http://students.autodesk.com/&quot; rel=&quot;nofollow&quot;&gt;http://students.autodesk.com/&lt;/a&gt; (Free for students)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Google Sketchup: &lt;a href=&quot;http://www.sketchup.com/products/sketchup-make&quot; rel=&quot;nofollow&quot;&gt;http://www.sketchup.com/products/sketchup-make&lt;/a&gt; (Free)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;FreeCAD: &lt;a href=&quot;http://www.freecadweb.org/&quot; rel=&quot;nofollow&quot;&gt;http://www.freecadweb.org/&lt;/a&gt; (Free)&lt;/p&gt;&#xA;" OwnerUserId="983" LastEditorUserId="983" LastEditDate="2013-08-16T17:26:03.963" LastActivityDate="2013-08-16T17:26:03.963" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1748" PostTypeId="2" ParentId="1514" CreationDate="2013-08-15T11:58:22.200" Score="0" Body="&lt;p&gt;You need to use a PID algorithm to control the speed of the motors, that way you'll be able to make them spin as slow as you need while still getting torque. The PID algorithm needs to measure the speed of your motor somehow, the typical way is to place some optical encoders in the wheels, this is a must for any rover and besides giving you the speed will give you a very good estimate of the position, which helps navigate and make turns.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can steal the optical encodes from an old mouse, those with a ball. &lt;/p&gt;&#xA;" OwnerUserId="1816" LastEditorUserId="134" LastEditDate="2013-08-16T13:38:23.540" LastActivityDate="2013-08-16T13:38:23.540" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1749" PostTypeId="2" ParentId="1670" CreationDate="2013-08-15T16:22:27.460" Score="0" Body="&lt;p&gt;Sugru is great for this kind of thing, but it can be a little pricey. An alternative is &lt;a href=&quot;http://www.instructables.com/id/How-To-Make-Your-Own-Sugru-Substitute/&quot; rel=&quot;nofollow&quot;&gt;Oogoo&lt;/a&gt;, a DIY mixture of silicone caulk, cornstarch, and (optional) pigment.&lt;/p&gt;&#xA;" OwnerUserId="1174" LastActivityDate="2013-08-15T16:22:27.460" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1750" PostTypeId="1" CreationDate="2013-08-16T03:29:25.240" Score="3" ViewCount="1578" Body="&lt;p&gt;I have been studying about building a tricopter.  But I couldn't find the design calculations or mathematical modeling of the tricopter any where over the internet. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What are the mathematical relationships or equations of motion and forces in tricopter?  How do I calculate the requirements of the structural design and the energy requirements of the motors?&lt;/p&gt;&#xA;" OwnerUserId="1820" LastEditorUserId="350" LastEditDate="2013-08-27T18:49:15.090" LastActivityDate="2014-09-10T16:53:01.633" Title="Design Calculations &amp; Mathematical Modeling of Tricopters" Tags="&lt;design&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1751" PostTypeId="2" ParentId="1711" CreationDate="2013-08-16T03:29:34.177" Score="2" Body="&lt;p&gt;I have a bot with 2 independently driven wheels. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I chose to use a gyro to keep it heading in the desired direction, bumps slippage and even picking it up and turning it around are of little consequence to it as it will just correct it's heading.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I use a single PID, which adds/subtracts a correction to the desired current speed for each of the 2 motors in accordance with the error in the current heading (direction) as determined by the gyro.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example I set the speed to 50% and the heading to 20degrees. this would normally drive both motors at 50% power. but as the heading wanders off, the PID will make adjustments adding some power to one motor and removing some power from the other, so you might end up with a 45%/55% power split between the motors as the pid corrects the heading.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Gyros have their problems though, even with some time spent calibrating I'm still finding my gryo has about 1 degree per minute drift. It might be because the earth rotates 15 degrees per hour, this should also be considered in the long run.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As previously stated encoders on the wheels are a great idea for actually knowing how far you have traveled.&lt;/p&gt;&#xA;" OwnerUserId="1819" LastEditorUserId="-1" LastEditDate="2016-07-26T15:19:34.677" LastActivityDate="2016-07-26T15:19:34.677" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1752" PostTypeId="2" ParentId="1750" CreationDate="2013-08-16T08:20:31.670" Score="1" Body="&lt;p&gt;I found the following paper, &lt;a href=&quot;http://liu.diva-portal.org/smash/get/diva2:538067/FULLTEXT01.pdf&quot; rel=&quot;nofollow&quot;&gt;Model Predictive Control of a Tricopter (Barsk, J. 2012)&lt;/a&gt; quite helpful.&lt;/p&gt;&#xA;" OwnerUserId="1775" LastEditorUserId="37" LastEditDate="2013-08-31T17:43:20.310" LastActivityDate="2013-08-31T17:43:20.310" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1753" PostTypeId="1" AcceptedAnswerId="1805" CreationDate="2013-08-16T08:40:44.710" Score="2" ViewCount="6321" Body="&lt;p&gt;This might be a out of league question and may seems to be very odd.I am using multiple Arduino UNO boards over network and want to assign a GUID and Serial number to each board so that when ever they send any data to a central server, server is able to find which Device it is if we have assign name for each device.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;first way to do this is to assign GUID and serial number of device before each message that is send to central server manually while programming and then burn that hex to arduino.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Now is there any way out that we can burn a program that always give a output as a string (GUID+Serial number of device) like we program EEPROM for this and then burn our main code in Arduino which pick the GUID+Serial ID combo from EEPROM and write it before every message which arduino is pushing to central server.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or my another way of asking is can we program EEPROM with a different program and our Arduino separately like 2 files running in parallel or is it not possible?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any other way of doing this?&lt;/p&gt;&#xA;" OwnerUserId="1322" LastActivityDate="2017-07-31T12:12:38.767" Title="Assigning Serial number and GUID to a microcontroller" Tags="&lt;arduino&gt;&lt;microcontroller&gt;&lt;communication&gt;" AnswerCount="3" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1754" PostTypeId="2" ParentId="1753" CreationDate="2013-08-16T15:31:04.327" Score="3" Body="&lt;p&gt;The answer to this question depends entirely on the type of connection you are using to build your network.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming that when you say you have arduinos &quot;on a network&quot; you are using ethernet shields or similar to put them on an ethernet network, one way to accomplish your goal would be to take advantage of the MAC address on the ethernet shield as this is a pre-existing globally-unique identifier. The MAC address is appended to every ethernet &lt;em&gt;frame&lt;/em&gt;. Now, you only have access to that data at Level 2 (the &quot;link layer&quot;) of ethernet and you are not going through a switch / hub which will modify the frames which you almost certainly are.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So instead, you could have your hub or switch assign IP addresses through DHCP based on the MAC address of the ethernet shield. This is sometimes referred to as &quot;link layer filtering.&quot; Then when you get packets with data from the Arduino, you know which one it comes from by the source IP address on the &lt;em&gt;packet&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You suggested you might be using cellular data, IP addresses are probably dynamic and the problem becomes more difficult. You would need to talk to your provider and see if you can get static IP addresses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are using SMS, then simply identify by phone number.&lt;/p&gt;&#xA;" OwnerUserId="1473" LastEditorUserId="1473" LastEditDate="2013-08-31T17:37:27.023" LastActivityDate="2013-08-31T17:37:27.023" CommentCount="11" ContentLicense="CC BY-SA 3.0" />
  <row Id="1755" PostTypeId="1" AcceptedAnswerId="1760" CreationDate="2013-08-16T15:48:38.817" Score="5" ViewCount="169" Body="&lt;p&gt;I have several &lt;a href=&quot;http://store.3drobotics.com/products/apm-2-5-kit&quot;&gt;APM 2.5 boards&lt;/a&gt; and need to identify them based on some globally unique hardware signature that does not change with programming.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Arduinos and atmel AVR chips in general &lt;a href=&quot;http://forum.arduino.cc/index.php?topic=45104.0&quot;&gt;do not have&lt;/a&gt; (also &lt;a href=&quot;http://forum.arduino.cc/index.php?topic=45060.0&quot;&gt;this thread&lt;/a&gt;) an accessible serial number.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, it seems that the Ardupilot has so many integrated sensors and other ICs that one of them must have something unique I can use ( &lt;a href=&quot;http://stuff.storediydrones.com/APM_v252_RELEASE.zip&quot;&gt;see schematic&lt;/a&gt; )!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I will be checking datasheets for MPU-6000, HMC5883L-TR and MS5611, but in the meantime, if someone has already figured this one out, please answer.&lt;/p&gt;&#xA;" OwnerUserId="1473" LastActivityDate="2013-08-18T19:56:03.627" Title="Any globally unique signature in Ardupilot hardware, or Arduino in general?" Tags="&lt;arduino&gt;&lt;ardupilot&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1756" PostTypeId="2" ParentId="1724" CreationDate="2013-08-16T21:37:30.907" Score="3" Body="&lt;p&gt;I have used small solenoid valves with a fixed displacement to dispense small droplets. For example, the valve I used consistently pumped 0.5 uL from one orifice to the other every time it was switched. That particular valve was not intended to be used as a pump, but there was no reason it couldn't be. There are other solenoids which are intended to be used that way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The valve I used costs less than $100. Unfortunately I can't share the specific part number, but you should be able to find some help from &lt;a href=&quot;http://www.theleeco.com/products.cfm&quot; rel=&quot;nofollow&quot;&gt;The Lee Company&lt;/a&gt;, or &lt;a href=&quot;http://www.smcusa.com/smc.aspx&quot; rel=&quot;nofollow&quot;&gt;SMC&lt;/a&gt;, who sell these types of valves. Lee will definitely sell small quantities. I don't know about SMC. Either one should be able to provide you with samples. &lt;/p&gt;&#xA;" OwnerUserId="1827" LastActivityDate="2013-08-16T21:37:30.907" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1757" PostTypeId="1" CreationDate="2013-08-17T17:39:02.537" Score="1" ViewCount="148" Body="&lt;p&gt;I'm looking for a laser / photosensor pair (or product of similar function) for detecting when a beam is interrupted (no more than 3ft apart, probably more like 1ft).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd like these to run off of 5V, since I'm using an Arduino. My main requirement, however, is that these parts have nice housings, ideally with some mounting screw holes or something along those lines. This is going into a project where sturdiness and durability are important.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know how to search for parts like what I am looking for. Could you please point me either to some good product sources, give me some better keywords for searching, or link me directly to potentially useful products?&lt;/p&gt;&#xA;" OwnerUserId="1828" LastEditorUserId="37" LastEditDate="2013-08-31T17:34:36.997" LastActivityDate="2013-08-31T17:34:36.997" Title="Laser / photosensor pair or similar" Tags="&lt;arduino&gt;&lt;sensors&gt;" AnswerCount="0" CommentCount="6" ClosedDate="2013-08-31T17:37:15.383" ContentLicense="CC BY-SA 3.0" />
  <row Id="1758" PostTypeId="1" CreationDate="2013-08-18T17:41:02.557" Score="8" ViewCount="4336" Body="&lt;p&gt;We hope to build a simple line follower robot and we got a problem when we were discussing about PIC programming.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We planed to write a endless loop, check the sensor panel reading and do the relevant stuff for that reading.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But one of our friends told us to use a timer interrupt to generate interrupts in definite time periods and in each interrupt check the sensor panel reading and do the relevant stuff for that reading.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But we can't figure out which is best: the endless loop in main method OR timer interrupt method.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the best way, and why?&lt;/p&gt;&#xA;" OwnerUserId="1829" LastEditorUserId="1600" LastEditDate="2013-08-22T02:12:10.917" LastActivityDate="2019-08-14T11:56:11.770" Title="Polling or Timer interrupt?" Tags="&lt;sensors&gt;&lt;microcontroller&gt;&lt;interrupts&gt;" AnswerCount="6" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1759" PostTypeId="2" ParentId="1758" CreationDate="2013-08-18T18:47:35.870" Score="8" Body="&lt;p&gt;The processor has to execute something.  You will always have an &quot;endless&quot; loop even if you're doing some work in an interrupt handler.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The best solution depends on exactly what you're trying to do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main advantage of using interrupts is they allow you to service events in real-time while your main program is doing something else.  Timer interrupts specifically allow you to perform some periodic activity on a fairly accurate time-base while doing some other processing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For most control algorithms it is useful to have some sort of a time-base (or fixed frequency).  If that's all your CPU is doing you can easily do that without interrupts by either controlling the number of cycles/instructions in your control loop or polling the timer.  Both methods would be simpler and more efficient than using interrupts.  Interrupts are more useful in more complex systems doing many things concurrently (I/O, time keeping, scheduling etc.).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you go with the endless loop without polling the timer or calibrating the time it takes to run one iteration of the loop you will have to be careful of situations where adding more code in your loop changes the timing and the behavior of your control system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you implement your control algorithm in a timer interrupt you will have to be careful you're not trying to perform more work than the CPU can handle in one time &quot;slot&quot; or that will again impact the behavior of your control system.&lt;/p&gt;&#xA;" OwnerUserId="1584" LastEditorUserId="1584" LastEditDate="2013-08-21T05:06:26.437" LastActivityDate="2013-08-21T05:06:26.437" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1760" PostTypeId="2" ParentId="1755" CreationDate="2013-08-18T19:56:03.627" Score="1" Body="&lt;p&gt;Well, I'll be darned. A serial number shows up in dmesg when you plug the thing in. I checked two boards that the number was different, so hopefully these are globally unique.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;me@mycompy:~/arducopter/MissionPlanner$ dmesg|tail                                                                                                                                                   &#xA;[26581.627967] iwlwifi 0000:03:00.0: fail to flush all tx fifo queues&#xA;[26583.020822] usb 1-1.2: new full-speed USB device number 27 using ehci-pci&#xA;[26583.115672] usb 1-1.2: New USB device found, idVendor=2341, idProduct=0010&#xA;[26583.115682] usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=220&#xA;[26583.115689] usb 1-1.2: Product: Arduino Mega 2560&#xA;[26583.115696] usb 1-1.2: Manufacturer: Arduino (www.arduino.cc)&#xA;[26583.115702] usb 1-1.2: SerialNumber: 64033353830351A0B122&#xA;[26583.116485] cdc_acm 1-1.2:1.0: ttyACM0: USB ACM device&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="1473" LastActivityDate="2013-08-18T19:56:03.627" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1761" PostTypeId="2" ParentId="1758" CreationDate="2013-08-19T05:42:25.293" Score="4" Body="&lt;p&gt;Further to Guy's answer, using a timer interrupt to generate accurate intervals adds determinacy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, at any given time, you know exactly what the processor is doing, and all activities are performed at specified rates.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You also should schedule at determined rates as otherwise you have no basis for time constants and such like, which will be essential in your filtering.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And finally, this means that if you add additional tasks, then the existing tasks are not slowed down.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Simple polling is OK if that is all your system has to do - but while time slot scheduling is a minor overhead in a trivial system, adding it from the start allows growth and expansion without having to restructure everything later.&lt;/p&gt;&#xA;" OwnerUserId="134" LastActivityDate="2013-08-19T05:42:25.293" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1762" PostTypeId="2" ParentId="1728" CreationDate="2013-08-19T14:16:22.903" Score="1" Body="&lt;p&gt;Use dynamic threshold to counter variation of ambient light condition, though the color green may still be hard to distinguish from white and black (dependent on the reflective index of the green material, which you might have to experiment with). This is a serious problem if you are using photo reflectors as grayscale sensors. The distribution of grayscale sensors depends on the size of your robot and your expected speed. If your robot aims at 1.0m/s, I would say six sensors are enough, placed at the front of your robot with a distance of roughly 1cm or 2cm. If you want to achieve higher speed (i.e., 3.0m/s) you might need as many as twelve to sixteen sensors. But these numbers are very inconclusive since you are giving out too limited information about your project. As someone who has done this before, I would recommend using the TSL1401 linear sensor array, which is equivalent to 128 grayscale sensors, yet is still quite cheap. &lt;/p&gt;&#xA;" OwnerUserId="1833" LastActivityDate="2013-08-19T14:16:22.903" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1763" PostTypeId="2" ParentId="1758" CreationDate="2013-08-19T16:26:40.307" Score="4" Body="&lt;p&gt;I would just like to add few points to other posts. My personal opinion is that endless while loop has no sense in systems which read from snsors or write to actuators as both has some physical constrains, eg. There is no point in reading from sensors at 1Mhz if the sensor has stability cycle before meassurent is accurate at 100Hz. Same goes to motor drivers. You can send 1mil instructiins to move motor but it can only witstand its physical limitations in respect of inertia.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What i do in my designs is following. I create timer interrupt which triggers every 1ms or so, and then i decrement some global variables in that interrupt routine. In main while loop i check if variable is 0 and execute command that is defined by that variable. In that case i can drive motor at 125Hz, read sensor at 20Hz, and output leds at 0.5Hz. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope you got the point.&lt;/p&gt;&#xA;" OwnerUserId="973" LastActivityDate="2013-08-19T16:26:40.307" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1764" PostTypeId="2" ParentId="1758" CreationDate="2013-08-19T20:53:13.160" Score="3" Body="&lt;p&gt;I'd also like to stress that the comparison between polling (i.e. checking if a interrupt flag has been set) and interrupt vectors (i.e. an ISR, or function that's loaded when a interrupt has occurred) should be more than just evaluating the efficiency/simplicity of executing a block of reactionary code. The interrupt controllers of most modern micros are capable of so much more, especially when considering inter-peripheral signalling (ie, DMA).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, a Texas Instruments TMS320F28335 microcontroller &lt;a href=&quot;http://www.ti.com/lit/ug/sprug04a/sprug04a.pdf&quot; rel=&quot;nofollow&quot; title=&quot;Please refer to Figure 42 on page 64&quot;&gt;allows you to trigger your ADC's start of conversion pulse directly from a PWM's rising or falling edge&lt;/a&gt;. In addition to this, the micro also has a six channel DMA controller, which for instance can also be programmed to trigger off the same PWM signal (this could allow you to &lt;a href=&quot;http://www.ti.com/lit/ug/sprufb8d/sprufb8d.pdf&quot; rel=&quot;nofollow&quot; title=&quot;Please refer to Section 1 on page 8&quot;&gt;start a memory read via the devices' parallel bus&lt;/a&gt;, that's for instance connected to a high speed delta sigma converter). The same DMA controller can then be used to buffer the values read from the ADC and external delta sigma to internal RAM. The DMA controller can then be configured to only trigger a normal interrupt service routine after sampling a total of lets say 128 ADC and delta sigma readings. All this would happen without any CPU intervention (freeing you up to do other things).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This type of behind-the-scenes triggering allows you to get a lot more work done compared to when you would have had an ISR controlling all the enable flags or memory reads (due to the overhead associated with &lt;a href=&quot;http://en.wikipedia.org/wiki/Interrupt_latency&quot; rel=&quot;nofollow&quot;&gt;interrupt latency&lt;/a&gt;). The vector chained approach would allow you to sample at (let's say) 50 KHz, where an ISR driven approach would only allow you to sample at (let's say) 5 KHz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also as Andrew stated, using interrupt vectors are much more deterministic, or repeatable, than polling a status register.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd also highly recommend subscribing to &lt;a href=&quot;http://betterembsw.blogspot.com/&quot; rel=&quot;nofollow&quot;&gt;Phil Koopman's blog&lt;/a&gt;, or at least reading the following posts:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://betterembsw.blogspot.com/2013/03/rules-for-using-interrupts.html&quot; rel=&quot;nofollow&quot;&gt;Rules for using interrupts&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://betterembsw.blogspot.com/2013/04/why-short-interrupt-service-routines.html&quot; rel=&quot;nofollow&quot;&gt;Why Short Interrupt Service Routines Matter&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://betterembsw.blogspot.com/2013/07/making-main-loop-scheduling-timing-more.html&quot; rel=&quot;nofollow&quot;&gt;Making Main Loop Scheduling Timing More Deterministic&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://betterembsw.blogspot.com/2012/12/software-timing-loops.html&quot; rel=&quot;nofollow&quot;&gt;Software Timing Loops&lt;/a&gt; (and why you should rather use a hardware timer)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="1775" LastEditorUserId="1775" LastEditDate="2013-08-19T21:06:58.273" LastActivityDate="2013-08-19T21:06:58.273" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1765" PostTypeId="1" AcceptedAnswerId="1940" CreationDate="2013-08-20T05:29:43.533" Score="6" ViewCount="307" Body="&lt;p&gt;I used to think that the higher GPS antenna position the better until I read the following on &lt;a href=&quot;http://gpsd.berlios.de/faq.html#accuracy&quot; rel=&quot;nofollow noreferrer&quot;&gt;GPSd FAQ&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;One &lt;strong&gt;common error is to place the GPS or antenna as high as possible&lt;/strong&gt;.&#xA;This will increase multipath effects due to signal bounce from the&#xA;ground or water, which can cause the GPS to mistake its position and&#xA;the time signal. The &lt;strong&gt;correct location for a boat GPS antenna&lt;/strong&gt; is on the&#xA;gunwale rail or pushpit rail, &lt;strong&gt;close to the water&lt;/strong&gt; and as far from the&#xA;mast as possible (to reduce signal bounce from the mast). If you're&#xA;outside or in a fixed location, put the GPS antenna as far from&#xA;buildings as possible, and on the ground.&lt;/p&gt;&#xA;&lt;p&gt;If you're &lt;strong&gt;in a car&lt;/strong&gt;, &lt;strong&gt;don't&#xA;put the GPS antenna on the roof, put it on the towbar&lt;/strong&gt; or some similar&#xA;location. If you're driving in a heavily built up area, you're going&#xA;to get signal bounce off buildings and reduced accuracy. That's just&#xA;how the physics works. Note, however, that as your velocity goes up it&#xA;becomes easier for the convergence filters in your GPS to spot and&#xA;discard delayed signal, so multipath effects are proportionally less&#xA;important in fast-moving vehicles.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Does anyone has experience placing GPS antenna on a towbar of the car as suggested? Does it give reasonable effect?&lt;/p&gt;&#xA;&lt;p&gt;My concern is that placing antenna there will not reduce an error that much, but will expose the device (antenna) to possible mechanical damage.&lt;/p&gt;&#xA;&lt;p&gt;So, are there any better positions apart from roof and towbar?&lt;/p&gt;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="1836" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2013-12-10T19:15:46.160" Title="Place for GPS antenna on autonomous vehicle" Tags="&lt;gps&gt;&lt;ugv&gt;" AnswerCount="2" CommentCount="7" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1766" PostTypeId="1" CreationDate="2013-08-20T13:59:45.130" Score="9" ViewCount="1119" Body="&lt;p&gt;&lt;strong&gt;Background:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am implementing a simple Kalman Filter that estimates the heading direction of a robot. The robot is equipped with a compass and a gyroscope.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;My Understanding:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am thinking about representing my state as a 2D vector $(x, \dot{x})$, where $x$ is the current heading direction and  $\dot{x}$ is the rotation rate reported by the gyroscope.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Questions:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;If my understanding is correct, there will be no control term, $u$ in my filter. Is it true? What if I take the state as a 1D vector $(x)$? Then does my $\dot{x}$becomes the control term $u$? Will these two methods yield different results?&lt;/li&gt;&#xA;&lt;li&gt;As we know, the main noise source comes from the compass when the compass is in a distorted magnetic field. Here, I suppose the Gaussian noise is less significant. But the magnetic distortion is totally unpredictable. How do we model it in the Kalman Filter?&lt;/li&gt;&#xA;&lt;li&gt;In Kalman Filter, is the assumption that &quot;all the noises are white&quot; necessary? Say, if my noise distribution is actually a Laplacian distribution, can I still use a Kalman Filter? Or I have to switch to another filter, like Extended Kalman Filter?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="1770" LastEditorUserId="1770" LastEditDate="2013-08-20T14:29:23.123" LastActivityDate="2018-07-10T12:17:10.973" Title="How to model unpredictable noise in Kalman Filter?" Tags="&lt;localization&gt;&lt;kalman-filter&gt;&lt;gyroscope&gt;&lt;compass&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1767" PostTypeId="1" CreationDate="2013-08-20T14:38:10.740" Score="6" ViewCount="933" Body="&lt;p&gt;I am implementing a simple Kalman Filter that estimates the heading direction of a robot. The robot is equipped with a compass and a gyroscope.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Say at time $t-dt$, the compass reports a reading $\theta_{t-dt}$, and the gyroscope reports a reading $\omega_{t-dt}$. Then I assume from time $t-dt$ to $t$, the rotation rate can be regarded as a constant. Thus, my current heading direction is $$\theta_{t}=\theta_{t-dt}+\omega_{t-dt}\cdot dt$$&#xA;As can be seen, the $\theta$ can be easily time-updated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But what about my $\omega$? The robot is not at my control. So its rotation rate at next moment is &lt;strong&gt;unpredictable&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;How should I do the time update in this case?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="1770" LastActivityDate="2013-08-20T16:06:16.933" Title="What to do when the control input of the Kalman filter is unknown?" Tags="&lt;kalman-filter&gt;&lt;gyroscope&gt;&lt;compass&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1768" PostTypeId="5" CreationDate="2013-08-20T16:04:54.510" Score="0" Body="&lt;p&gt;A line-following robot is typically a wheeled robot with light sensor(s) beneath it. These sensors are used to determine whether the robot is on the line, outside the line or in transition between the two states. Accordingly, the robot chooses the appropriate control action to move back in the line if not on it already and go along the line otherwise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Line-following robots are often didactic.&lt;/p&gt;&#xA;" OwnerUserId="158" LastEditorUserId="158" LastEditDate="2013-08-20T16:14:41.177" LastActivityDate="2013-08-20T16:14:41.177" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1769" PostTypeId="4" CreationDate="2013-08-20T16:04:54.510" Score="0" Body="A line-following robot is typically a wheeled robot with light sensor(s) beneath it. The goal of the robot is to follow along a line with a distinct color or intensity, e.g. black on white background." OwnerUserId="158" LastEditorUserId="158" LastEditDate="2013-08-20T16:14:27.300" LastActivityDate="2013-08-20T16:14:27.300" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1770" PostTypeId="2" ParentId="1767" CreationDate="2013-08-20T16:06:16.933" Score="2" Body="&lt;p&gt;For both states, you are using sensors to give you the required information. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;One way to make this work properly: Use the gyroscope reading for your ω and your previous state estimate for your θ (or initial state estimate if its the first iteration). This is the &lt;strong&gt;predict&lt;/strong&gt; step of the filter. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then for the &lt;strong&gt;update&lt;/strong&gt; step you can use your compass measurement (this will correct the gyro drift).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For both states, you are relying on sensors to provide information about heading, not the control inputs of the robot itself. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This method is common in attitude heading and reference systems. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For your application a &lt;a href=&quot;http://www.pieter-jan.com/node/11&quot; rel=&quot;nofollow&quot;&gt;complementary filter&lt;/a&gt; may be better suited since its easily implemented and is easy to tune and can have comparable performance to a Kalman filter in many situations.&lt;/p&gt;&#xA;" OwnerUserId="983" LastActivityDate="2013-08-20T16:06:16.933" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1771" PostTypeId="2" ParentId="1766" CreationDate="2013-08-20T16:24:40.783" Score="3" Body="&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;There will be no control input term. You should take (x, xdot) as your state vector to formulate the Kalman filter properly.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The primary sources of noise are the compass &lt;strong&gt;and the gyroscope&lt;/strong&gt;. The gyroscope noise and drift are significant. It is pretty challenging to overcome magnetic distortion in general but there are &lt;a href=&quot;http://www.sensorsmag.com/sensors/motion-velocity-displacement/compensating-tilt-hard-iron-and-soft-iron-effects-6475&quot; rel=&quot;nofollow noreferrer&quot;&gt;compensation techniques&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The assumption of &lt;strong&gt;zero mean multivariate normal &#xA;distribution&lt;/strong&gt; noise is necessary however white noise is only a special case of this. For the extended Kalman filter, this assumption still needs to be true. You can look into other types of filters (&lt;a href=&quot;http://www.cim.mcgill.ca/~yiannis/particletutorial.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;particle filter&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Kalman_filter#Unscented_Kalman_filter&quot; rel=&quot;nofollow noreferrer&quot;&gt;unscented Kalman filter&lt;/a&gt;).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Kalman Filter Design/Implementation Paper: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://franciscoraulortega.com/pubs/Algo3DFusionsMems.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Implementing a Sensor Fusion Algorithm for 3D Orientation Detection with Inertial/Magnetic Sensors &lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="983" LastEditorUserId="9176" LastEditDate="2018-07-09T16:04:58.020" LastActivityDate="2018-07-09T16:04:58.020" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="1772" PostTypeId="2" ParentId="1766" CreationDate="2013-08-20T18:06:24.757" Score="6" Body="&lt;ol&gt;&#xA;&lt;li&gt;I would model this as a one-state system (x), with the gyro as the control input.  The gyro noise becomes state input noise, the compass noise becomes measurement noise.  So your system model becomes $$\hat{\dot \theta} = \omega_{gyro} + w$$ $$\hat y = \hat x$$ where $\hat y$ is the filter's estimate of direction, which you compare to the compass direction to get your Kalman update.&lt;/li&gt;&#xA;&lt;li&gt;The magnetic distortion is going to be difficult, because if you sit in any one place it will appear as a constant offset term -- the Kalman filter won't deal with this well.  I'm pretty sure you'll either need to map the distortion, get some second absolute direction reference, or just accept the distortion.&lt;/li&gt;&#xA;&lt;li&gt;You are confusing spectral content with probability distribution.  If the noise is white, then each sample in perfectly independent of any other sample.  If the noise is Laplacian, each sample obeys the Laplace distribution.  Kalman filters don't like colored noise (but you can deal with that by adding states).  A Kalman filter is only the overall optimal filter when the noise is of Gaussian distribution and the cost function is sum-of-squares.  For any other noise and cost function, the optimal filter is probably nonlinear.  But for any zero-mean, white noise and sum-of-squares cost function, the Kalman filter is the best linear filter to be found.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;(Note that the system model I gave ends up with a pretty trivial Kalman filter -- you may be better off, if you can't find some other means of estimating compass offset, using a complimentary filter to combine these two sensor inputs.  Doing all the Kalman computations will just end up coughing up a complimentary filter anyway, and chances are that you'll have enough guesses for your constants that you may as well just guess at the crossover point in a complimentary filter and be done with it).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Note, too, that if you have some absolute &lt;em&gt;position&lt;/em&gt; reference, and some means estimating speed, and a vehicle that always goes in the direction you point it, that you can use an extended Kalman filter very profitably to correct the compass distortion by using the direction it actually moves to correct for the compass direction).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://onlinelibrary.wiley.com/doi/book/10.1002/0470045345&quot; rel=&quot;nofollow noreferrer&quot;&gt;Optimal State Estimation&lt;/a&gt; by Dan Simon, Wiley 2006, is -- in my opinion -- a very rich and clear treatment of the subject of Kalman filtering and its more sophisticated brethren (H-infinity, extended Kalman, unscented Kalman, and even a bit on Baysian and particle filtering).  It won't tell you how to apply that to navigation problems like this, but where would be the fun in life if all the problems were solved?.  If you can't follow the math in Simon's book, then you should probably be asking yourself if you're going to be able to apply a Kalman filter in any sort of intelligent way.&lt;/p&gt;&#xA;" OwnerUserId="1411" LastEditorUserId="20709" LastEditDate="2018-07-10T12:17:10.973" LastActivityDate="2018-07-10T12:17:10.973" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="1774" PostTypeId="1" AcceptedAnswerId="1890" CreationDate="2013-08-21T07:02:49.803" Score="3" ViewCount="169" Body="&lt;p&gt;In this &lt;a href=&quot;http://www.mdpi.com/1424-8220/12/1/429&quot; rel=&quot;nofollow&quot;&gt;paper&lt;/a&gt;, the author says that during SLAM process, pseudo segments that appear from any momentary pause of dynamic objects in laser data would make the map unsatisfied.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How is this caused?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the dynamic object moved, won't laser data update and eliminate the segment of dynamic objects?&lt;/p&gt;&#xA;" OwnerUserId="405" LastEditorUserId="350" LastEditDate="2013-08-27T18:18:53.953" LastActivityDate="2013-09-26T21:45:44.243" Title="In SLAM, how does a laser range finder produce pseudo-segments from dynamic objects?" Tags="&lt;sensors&gt;&lt;slam&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1775" PostTypeId="1" CreationDate="2013-08-21T20:42:06.220" Score="1" ViewCount="4087" Body="&lt;p&gt;How can I control the position of a &lt;strong&gt;pneumatic&lt;/strong&gt; piston?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only way I know about is using a magnetic reed switch (magnetic sensor) with a matching piston and use some type of control algorithm, like PID for instance, to keep the piston where the sensor is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem with that is that it gives you only limited control of the position, it just adds another &quot;state&quot; (open, closed, sensor position) and not full control. for example I want it to be 43% once and 70% the other time, but without using a sensor for each position because I would like all the &quot;options&quot; to be available (I mean that the percentages aren't pre-defined)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is an example of the pistons I use:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/Lm29K.jpg&quot; alt=&quot;piston&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a good example of what I want: &lt;a href=&quot;http://www.youtube.com/watch?v=A8LZ15uiuXU&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.youtube.com/watch?v=A8LZ15uiuXU&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="1337" LastEditorUserId="1337" LastEditDate="2013-08-22T16:36:10.627" LastActivityDate="2013-08-27T18:09:22.890" Title="How to control the position of a pneumatic piston?" Tags="&lt;sensors&gt;&lt;control&gt;&lt;pid&gt;&lt;movement&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1776" PostTypeId="1" CreationDate="2013-08-21T22:34:52.203" Score="1" ViewCount="237" Body="&lt;p&gt;Where can I find a good documentation about the UWSim in ROS. Actually having the source files is not enough and it is actually hard to follow all the functions. for example, how can I use these command correctly :&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&amp;amp; rosrun UWSim gotoAbsolutePosition   0 0 0 0 0 0&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that there is a node 'gotoAbsolutePosition' in the Package 'UWSim' and I knwo the variables, but I cannot set the two topics properly.&lt;/p&gt;&#xA;" OwnerUserId="1850" LastActivityDate="2013-08-21T22:34:52.203" Title="running UWSim commands in ROS" Tags="&lt;ros&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1777" PostTypeId="1" CreationDate="2013-08-23T12:19:47.470" Score="3" ViewCount="3900" Body="&lt;p&gt;I'm building quadcopter and most of the control systems use one accelerometer and gyro. I've read few papers and usually accelerometer is used as reference to the ground because gyro slowly drifts away in time. But if quadcopter does some crazy maneuvering when force direction from accelerometer does not have to point to the ground than accelerometer data is useless. As well there is problem with centripetal force if the accelerometer is not directly in the centor of mass.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was thinking about using multiple accelerometers. To fully determine position and motion of quadcopter one would need three accelerometers(If I have done the math right). This would kind of solve the problem with centripetal force&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I would like to know if anyone tried to use multiple accelerometers for better orientation estimation. &lt;/p&gt;&#xA;" OwnerUserId="1861" LastActivityDate="2013-08-26T15:56:39.410" Title="Tracking with accelerometer and gyro versus multiple accelerometers" Tags="&lt;quadcopter&gt;&lt;imu&gt;&lt;accelerometer&gt;&lt;gyroscope&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1778" PostTypeId="2" ParentId="1777" CreationDate="2013-08-23T14:06:46.640" Score="2" Body="&lt;p&gt;You definitely mean the orientation and not position. Any yes, people have used multiple accelerometers to determine the orientation, for example Wii's &quot;nunchuck&quot; is an attachment to the Wiimote that has an additional accelerometer, so that the orientation of the stick can be calculated&lt;/p&gt;&#xA;" OwnerUserId="1289" LastActivityDate="2013-08-23T14:06:46.640" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1779" PostTypeId="2" ParentId="1775" CreationDate="2013-08-23T14:17:33.113" Score="2" Body="&lt;p&gt;You probably could attach an optical encoder strip to the piston, maybe even paint the piston rod with some reflecting / non reflecting paint.&#xA;Or you could attach a modified digital caliper to it, using something similar to this: &lt;a href=&quot;http://hackaday.com/2013/06/20/giving-digital-calipers-bluetooth/&quot; rel=&quot;nofollow&quot;&gt;http://hackaday.com/2013/06/20/giving-digital-calipers-bluetooth/&lt;/a&gt; .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have never done anything like this, so I don't really know if it would work in reality :-)&lt;/p&gt;&#xA;" OwnerUserId="482" LastActivityDate="2013-08-23T14:17:33.113" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1780" PostTypeId="2" ParentId="1777" CreationDate="2013-08-25T01:21:23.313" Score="2" Body="&lt;p&gt;You won't be able to determine the &lt;strong&gt;position&lt;/strong&gt; of the quadcopter with accelerometers or gyros or a combination of both. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can use either accelerometers or a combination of accelerometers and gyros to determine the &lt;strong&gt;orientation&lt;/strong&gt; (eg. roll, pitch, yaw) of the quadcopter. The gyro will allow for a more nimble quadcopter because it provides additional information at a faster rate. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can think of it like this: The accelerometers are useful for determining your orientation when moving slow (stable response, no drift, low bandwidth). The gyros are useful for determining your orientation when your moving fast (provide high bandwidth updates but have significant drift over longer time periods). The combination of the two using something like a &lt;a href=&quot;http://www.pieter-jan.com/node/11&quot; rel=&quot;nofollow&quot;&gt;complementary filter&lt;/a&gt; will provide the best of both worlds however you will need 6 axes of measurement (3-axis gyro, 3-axis accelerometer). Also, since gravity is symmetric about the vertical axis you would need a magnetometer or compass sensor to zero the gyro drift about that axis and provide reliable heading control. There are several off-shelf &lt;a href=&quot;https://www.sparkfun.com/products/10736&quot; rel=&quot;nofollow&quot;&gt;Intertial Measurement Units (IMU)&lt;/a&gt; that can be purchased and interfaced to your main controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you use only accelerometers your quadcopter won't be as agile as if you used a combination of gyros and accelerometers since the bandwidth of accelerometers are generally lower than that of gyros. Most ready-to-fly quads use accelerometers, gyros, and magnetometers.&lt;/p&gt;&#xA;" OwnerUserId="983" LastEditorUserId="983" LastEditDate="2013-08-26T15:56:39.410" LastActivityDate="2013-08-26T15:56:39.410" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1781" PostTypeId="2" ParentId="1314" CreationDate="2013-08-25T20:13:00.247" Score="4" Body="&lt;p&gt;A very informative way to visualize the effect of measurements (for me) is to plot the state of the robot (mean, with covariance ellipse) before and after each measurement. Then, take the individual &lt;em&gt;components&lt;/em&gt; of the measurement (bearing, range for AR markers), and apply them separately to get a feel for it.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;To do this:&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;I use one or more of &lt;a href=&quot;https://en.wikipedia.org/wiki/Ellipse#Equations&quot; rel=&quot;nofollow&quot;&gt;these functions&lt;/a&gt; to plot the ellipse. To find the constants $a,b$, note that they are the square roots of the eigenvalues of the covariance matrix.  Then sample the angle $\theta$ over $[0, 2\pi]$ and find the range from the hypothesis. using the linked equation. I especially recommend using &lt;a href=&quot;https://en.wikipedia.org/wiki/Ellipse#Polar_form_relative_to_center&quot; rel=&quot;nofollow&quot;&gt;this equation&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ &#xA;r(\theta) = \frac{ab}{\sqrt{b\cos^2\theta + a\sin^2\theta} }&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Tracking the covariance of the prior hypothesis, measured state, and posterior hypothesis is usually sufficient to find if the equations of an EKF are being applied correctly. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Good luck, and don't update your question too frequently. Instead, come back with new questions.&lt;/p&gt;&#xA;" OwnerUserId="163" LastEditorUserId="-1" LastEditDate="2016-05-31T03:41:27.360" LastActivityDate="2016-05-31T03:41:27.360" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1782" PostTypeId="1" AcceptedAnswerId="1783" CreationDate="2013-08-26T12:47:32.267" Score="5" ViewCount="136" Body="&lt;p&gt;So i got this idea waay back when i was in highschool as a kind of electromagnetic analogue to a biological muscle. it is basically a long stack of thin electromagnets connected in parallel. &#xA;&lt;img src=&quot;https://lh5.googleusercontent.com/-DUdbOfkO9bI/UhtIXyefiII/AAAAAAAAB0c/vmkKU3K6rF0/w2350-h1762-no/IMG_20130826_152132.jpg&quot; alt=&quot;(the picture)&quot;&gt;. &#xA;when current is applied gaps between electromagnets shrink thus providing contraction of the whole chain. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am pretty sure it can work. It can't offer great contraction range (up to 50% i would guess) but it has potential to provide good speed and be compact so that multiple chains can be combined to form stong and fast linear actuators. The thing is, i never heard of this type of actuator being used. so what is the catch? is there a better alternative? is there a design flaw? too much heat generated making them unpractical?&lt;/p&gt;&#xA;" OwnerUserId="1870" LastEditorUserId="350" LastEditDate="2013-08-27T17:48:27.923" LastActivityDate="2013-08-30T08:20:47.370" Title="Actuator design. plausible?" Tags="&lt;actuator&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1783" PostTypeId="2" ParentId="1782" CreationDate="2013-08-27T14:36:40.607" Score="3" Body="&lt;p&gt;This design is definitely plausible, but there are some problems I can see.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The maximum length is defined by the force the magnets can lift, since the ones lowest in the stack won't push the other ones up after some amount of them.&lt;/li&gt;&#xA;&lt;li&gt;The magnets will want to get as far from the force as possible, so they will most definitely not go straight up. This calls for a use of something like a flexible tube. This may mean the design won't be as space-efficient as it seems (if it is even possible).&lt;/li&gt;&#xA;&lt;li&gt;The stack won't keep it's shape if the magnets are not energized all the time, so the current consumption may be bigger than readily-available parts.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;It is an interesting concept, but I can't see using it to lift any significant load to a reasonable distance.&lt;/p&gt;&#xA;" OwnerUserId="890" LastEditorUserId="890" LastEditDate="2013-08-30T08:20:47.370" LastActivityDate="2013-08-30T08:20:47.370" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1784" PostTypeId="2" ParentId="1775" CreationDate="2013-08-27T18:09:22.890" Score="0" Body="&lt;p&gt;To control the position of a piston, you need -- at the very least -- a position sensor and an actuated valve.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In reality, you will encounter a few other effects that will complicate the simple PID algorithm you're attempting.  &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Depending on how many pistons you're driving, or how much airflow your piston takes, you may find that the available air pressure fluctuates.  If your valve can achieve a range of positions (not just open or closed), this changes the relationship between valve position and the resulting pneumatic force.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The system may exhibit negative damping for a variety of reasons.  For a good explanation, see &lt;a href=&quot;http://projecthexapod.com/blog/battling-subtle-negative-damping/&quot; rel=&quot;nofollow&quot;&gt;this page about a robot experiencing negative damping, and how to fix it&lt;/a&gt;.  (This might also be a solution to your problem of the actuator moving too fast.)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;There is no simple answer; these systems are complicated and require testing every step of the way.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2013-08-27T18:09:22.890" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1787" PostTypeId="1" AcceptedAnswerId="2150" CreationDate="2013-08-28T19:13:55.500" Score="2" ViewCount="1341" Body="&lt;p&gt;I'm trying to get the &quot;Torobot&quot; USB servo controller to work with Angstrom Linux on a Beagle Board XM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The servo controller registers as a USB device. The device just takes simple text commands, but there is no TTY associated with it. So I'm not sure how to send commands to it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can I just send data like this (assuming that 002/005 is the device):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ cat file.txt &amp;gt;&amp;gt; /dev/bus/usb/002/005&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Or do I need to associate it with the generic USB device? If so, how do I do that?&lt;/p&gt;&#xA;" OwnerUserId="947" LastActivityDate="2013-12-15T09:23:21.943" Title="How do I send text to a Torobot USB device?" Tags="&lt;control&gt;&lt;microcontroller&gt;&lt;rcservo&gt;&lt;usb&gt;&lt;embedded-systems&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1788" PostTypeId="2" ParentId="1445" CreationDate="2013-08-28T20:02:49.340" Score="0" Body="&lt;p&gt;If you just want to write data to the UART, you can use &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;cliSerial-&amp;gt;printf(&quot;my output&quot;);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;cliSerial is an alias for hal.console .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a good example &lt;a href=&quot;https://github.com/diydrones/ardupilot/blob/master/libraries/AP_HAL/examples/AnalogIn/AnalogIn.pde&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;UART 2 is unused on the APM so I think you can examine how hal.console is set up and set up your own equivalent that uses UART 2. Looks like you would start with&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;hal.uartB-&amp;gt;begin(115200);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Using the mavlink protocol is also an option but you probably want your own simpler protocol. If you want to use mavlink you can use the gcs_send_text_fmt() function. For example, it is used inside verify_nav_wp() of commands_logic.pde .&lt;/p&gt;&#xA;" OwnerUserId="1473" LastEditorUserId="1473" LastEditDate="2013-08-28T21:41:23.587" LastActivityDate="2013-08-28T21:41:23.587" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1789" PostTypeId="2" ParentId="1787" CreationDate="2013-08-28T21:38:27.713" Score="1" Body="&lt;p&gt;you can pyusb for send data &lt;a href=&quot;http://pyusb.sourceforge.net/docs/1.0/tutorial.html&quot; rel=&quot;nofollow&quot;&gt;http://pyusb.sourceforge.net/docs/1.0/tutorial.html&lt;/a&gt;&#xA;and your data information is here &lt;a href=&quot;http://www.torobot.com/down/usc_en.pdf&quot; rel=&quot;nofollow&quot;&gt;http://www.torobot.com/down/usc_en.pdf&lt;/a&gt;&#xA;i think you python code like this&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    import usb.core&#xA;import usb.util&#xA;&#xA;# find our device&#xA;dev = usb.core.find(idVendor=0xfffe, idProduct=0x0001)&#xA;&#xA;# was it found?&#xA;if dev is None:&#xA;    raise ValueError('Device not found')&#xA;&#xA;# set the active configuration. With no arguments, the first&#xA;# configuration will be the active one&#xA;dev.set_configuration()&#xA;&#xA;# get an endpoint instance&#xA;cfg = dev.get_active_configuration()&#xA;interface_number = cfg[(0,0)].bInterfaceNumber&#xA;alternate_settting = usb.control.get_interface(interface_number)&#xA;intf = usb.util.find_descriptor(&#xA;    cfg, bInterfaceNumber = interface_number,&#xA;    bAlternateSetting = alternate_setting&#xA;)&#xA;&#xA;ep = usb.util.find_descriptor(&#xA;    intf,&#xA;    # match the first OUT endpoint&#xA;    custom_match = \&#xA;    lambda e: \&#xA;        usb.util.endpoint_direction(e.bEndpointAddress) == \&#xA;        usb.util.ENDPOINT_OUT&#xA;)&#xA;&#xA;assert ep is not None&#xA;&#xA;# write the data&#xA;ep.write('#1P1500T100\r\n')&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="1882" LastActivityDate="2013-08-28T21:38:27.713" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1790" PostTypeId="1" CreationDate="2013-08-29T06:39:51.187" Score="1" ViewCount="303" Body="&lt;p&gt;I am a Robotics enthusiast and planning to make a small and simple four wheel car whose motors are supposed to be controlled by an Android device housed inside the car by means of the micro USB port of the device. The car has to move forward or backward only as directed by the signals from the Android device.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my assumption is that there should be a circuit board which accepts the signals from the microUSB/USB of the Android device and controls the power to the electric DC motor. Also the power for the motor will be supplied from a battery pack inside the car.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could anyone suggest me a cheap motor driver circuit which supports micro USB or USB? And where can I get the parts for this online? I did a lot research but very confused with the technical terms which I am not familiar with.&lt;/p&gt;&#xA;" OwnerUserId="1478" LastEditorUserId="1478" LastEditDate="2013-08-29T07:03:14.273" LastActivityDate="2013-08-29T07:03:14.273" Title="Motor Controller with micro USB interface" Tags="&lt;mobile-robot&gt;&lt;motor&gt;&lt;wheeled-robot&gt;" AnswerCount="0" CommentCount="2" FavoriteCount="1" ClosedDate="2013-08-29T23:14:19.827" ContentLicense="CC BY-SA 3.0" />
  <row Id="1791" PostTypeId="1" AcceptedAnswerId="1792" CreationDate="2013-08-29T19:25:26.487" Score="3" ViewCount="681" Body="&lt;p&gt;I consider using a brushless outrunner motor, designed for helicopters, in my driving roboter. How can I control such a brushless motor with my micro controller? Of course I'll have a separate power source.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The roboter should be able to move forwards and backwards, so I need to control the motor in a way to determine direction of rotation, too. I think this isn't related to the question, but I need to ensure high acceleration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Specially, I am talking about &lt;a href=&quot;http://www.modellhobby.de/Motoren/E-Motoren/DYMOND-Brushless-Antriebe/Aussenlaeufer/DYMOND-MASTER-HQ-2838.htm?shop=k_staufenb&amp;amp;SessionId=&amp;amp;a=article&amp;amp;ProdNr=03121706&amp;amp;t=11&amp;amp;c=3258&amp;amp;p=3258&quot; rel=&quot;nofollow noreferrer&quot;&gt;this motor&lt;/a&gt; which is listed in a German shop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/Q3ih6.jpg&quot; alt=&quot;DYMOND MASTER HQ motor&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="1054" LastEditorUserId="40" LastEditDate="2013-08-31T21:38:01.547" LastActivityDate="2013-08-31T21:38:01.547" Title="How to control a brushless motor?" Tags="&lt;motor&gt;&lt;control&gt;&lt;microcontroller&gt;&lt;power&gt;&lt;brushless-motor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1792" PostTypeId="2" ParentId="1791" CreationDate="2013-08-29T20:26:08.440" Score="3" Body="&lt;p&gt;You can control brushless motors 2 ways&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;control with a hall effect sensor &lt;a href=&quot;http://scholar.lib.vt.edu/theses/available/etd-09152003-171904/unrestricted/T.pdf&quot; rel=&quot;nofollow&quot;&gt;http://scholar.lib.vt.edu/theses/available/etd-09152003-171904/unrestricted/T.pdf&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;sensorless(back emf) control &lt;a href=&quot;http://www.pmdcorp.com/downloads/app_notes/BrushlessSensorConfig.pdf&quot; rel=&quot;nofollow&quot;&gt;http://www.pmdcorp.com/downloads/app_notes/BrushlessSensorConfig.pdf&lt;/a&gt;&#xA;or you can buy an esc (elcetronic speed control) My advice If you are not knowledgeable about electronic you can buy esc&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="1882" LastActivityDate="2013-08-29T20:26:08.440" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="1795" PostTypeId="1" AcceptedAnswerId="1804" CreationDate="2013-08-31T21:49:19.597" Score="9" ViewCount="617" Body="&lt;p&gt;I have a 300cm x 300cm room with a 25cm high ceiling (yes twenty five centimeters). It contains 50 small wheeled robots (about 20cm x 20cm). A central computer will orchestrate the movements of the robots, using a wireless network to send position commands to them. The robots will perform their own closed loop position control to save wireless bandwidth. The robots have 32-bit ARM microcontrollers. They have wheel position sensors, and the ability to do accurate wheel control. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Problem: The robots can't actually do this yet because they have no way to measure their position in the room.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Question: How can the robots be given the ability measure their position and orientation to an accuracy of better than ±5mm? I am looking for an accurate and robust solution, which is not affected by occlusions, and doesn't require a high power PC on each robot. Whatever sensors are necessary for localisation can easily be added to the robots. The microcontrollers can easily be changed for more powerful ones if the localisation solution demands it.&lt;/p&gt;&#xA;" OwnerUserId="40" LastEditorUserId="40" LastEditDate="2013-08-31T23:19:43.003" LastActivityDate="2013-09-03T18:33:28.443" Title="Localizing a swarm of robots" Tags="&lt;localization&gt;&lt;wireless&gt;&lt;swarm&gt;" AnswerCount="4" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1796" PostTypeId="2" ParentId="1654" CreationDate="2013-08-31T23:04:55.403" Score="3" Body="&lt;p&gt;When I was contributing to the &lt;a href=&quot;https://en.wikipedia.org/wiki/Robot&quot; rel=&quot;nofollow&quot;&gt;Robot Wikipedia article&lt;/a&gt;, this was a question I spent a long time struggling with. What could you possibly write in the first sentence to basically define 'robot'. I spent days searching for people's personal definitions of robot, and reading forum discussions, until I found the 'agent' definition, and I realised this was the closest I was going to get to a definition.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;A robot is a mechanical or virtual artificial agent&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The sense of agency seems to be key whether or not people generally call a machine a robot. A machine must give a sense that it has its own agency:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;it's active in the environment&lt;/li&gt;&#xA;&lt;li&gt;it can take in data&lt;/li&gt;&#xA;&lt;li&gt;it can affect the environment&lt;/li&gt;&#xA;&lt;li&gt;it has its own internal state&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This is why software agents get called robots too, even though they have no body. Software agents are active in the environment inside computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A long time ago, the Wikipedia article went into much more depth describing how, for example, Kitt would be considered a robot, while a radio controlled humanoid would generally not be. See the Robot page from &lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=Robot&amp;amp;oldid=300662394&quot; rel=&quot;nofollow&quot;&gt;July 2009&lt;/a&gt;. (Sadly, since then it has rotted quite a lot.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think that the reason the 'agency' definition works well is that it replaces the poorly defined and poorly understood concept of 'robot' and replaces it with the equally poorly defined, but much better understood concept of 'agency'. Even if we don't explicitly think of animals and robots as agents, we are wired to recognise agents, and categorise objects into things that are and aren't agents. We can easily tell the difference between animals and plants (well, for the types of animals and plants we usually encounter).&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Animal -&gt; Robot&lt;/li&gt;&#xA;&lt;li&gt;Plant -&gt; Machine&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="40" LastActivityDate="2013-08-31T23:04:55.403" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1797" PostTypeId="1" AcceptedAnswerId="1798" CreationDate="2013-09-01T03:20:07.567" Score="3" ViewCount="1391" Body="&lt;p&gt;&lt;em&gt;Outline:&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm trying to work with an Arduino and Analog thumb stick to get values for a simple differential drive robot I'm working on. The &lt;a href=&quot;http://www.plexishop.it/en/modulo-joystick-keyes-sjoys.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Keyes_Sjoys Arduino Joystick Module&lt;/a&gt; I have in my possession is giving me some strange numbers. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Following axises Data I have:&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;X-axis range of 0 to a shaky 470-520 with a center value of 40.&lt;/li&gt;&#xA;&lt;li&gt;Y-axis range of a solid 4 to solid 1023 with a center value of 605.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Problem&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I haven't used analog sensors before but it seems pretty obvious that my X-axis ranges should feel somewhat similar to the Y-axis but they don't. In addition, the X-axis hits zero way way before even coming close to the edge for its operating range.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is my sensor broken (it's new), or is there some way I can recalibrate the potentiometer?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sub&gt;Note, I also asked this over on &lt;a href=&quot;https://electronics.stackexchange.com/q/80870&quot;&gt;Electrical Engineering Stack Exchange&lt;/a&gt;.&lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="1740" LastEditorUserId="-1" LastEditDate="2017-04-13T12:33:08.317" LastActivityDate="2013-12-17T00:57:55.970" Title="How do I Calibrate Analog Thumb stick?" Tags="&lt;microcontroller&gt;" AnswerCount="1" CommentCount="0" ClosedDate="2013-09-04T22:44:01.437" ContentLicense="CC BY-SA 3.0" />
  <row Id="1798" PostTypeId="2" ParentId="1797" CreationDate="2013-09-01T09:07:37.277" Score="3" Body="&lt;p&gt;It certainly sounds like the joystick is broken, but in Robotics, nothing is certain. Some things to try:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Swap over the X and Y wires going to the Arduino. Which axis exhibits the problem now?&lt;/li&gt;&#xA;&lt;li&gt;Disconnect the joystick from the Arduino, and power it up on its own. Using a multimeter, measure the voltage on the X axis wire as you move the joystick. Does this make more sense? If so, then there's something wrong with the way it's connected to the Arduino, or something wrong in software.&lt;/li&gt;&#xA;&lt;li&gt;Disconnect the joystick completely from its power, and use the multimeter to measure the resistance between the X axis signal wire and the GND wire. If this doesn't make sense, then there's likely a fault in the joystick. Possibly a failed solder joint. This could be fixed by simply re-heating the solder joints on that pot.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="40" LastActivityDate="2013-09-01T09:07:37.277" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1799" PostTypeId="2" ParentId="1795" CreationDate="2013-09-01T15:21:19.253" Score="3" Body="&lt;p&gt;If a &lt;a href=&quot;http://www.vicon.com/&quot; rel=&quot;nofollow&quot;&gt;vicon system&lt;/a&gt; is out of the question, then you can use a system of calibrated cameras to read markers placed on top of the robots. &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Place the best cameras you can get around the environment. I use $20 web cams from amazon.com&lt;/li&gt;&#xA;&lt;li&gt;Use OpenCV's calibration tools to calibrate the cameras.&lt;/li&gt;&#xA;&lt;li&gt;Place markers on top of the robots&lt;/li&gt;&#xA;&lt;li&gt;The cameras know their relative positions in the environment, so by triangulating the marker positions, they can accurately output the position and orientation of the markers.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Sort of like what &lt;a href=&quot;http://mars.cs.umn.edu&quot; rel=&quot;nofollow&quot;&gt;these researchers&lt;/a&gt; did in &lt;a href=&quot;http://www-users.cs.umn.edu/~stergios/papers/TRO-Optimal-Motions-Distance-Bearing-2010.pdf&quot; rel=&quot;nofollow&quot;&gt;this paper&lt;/a&gt; (see page 16)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, as others have noted, if the ceiling is very low, you won't have a good line of sight to the top of the robots, and you'll have a difficult time using this method.&lt;/p&gt;&#xA;" OwnerUserId="163" LastActivityDate="2013-09-01T15:21:19.253" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1800" PostTypeId="2" ParentId="1795" CreationDate="2013-09-01T16:14:37.607" Score="4" Body="&lt;p&gt;If the ceiling is a flat surface that is visible from the tops of the robots, you could place marker stripes (or some other known fiducial pattern) on the ceiling at regular intervals.   The stripes might be white or black lines or narrow reflective tape, detected using photosensors on top of robots.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If wheel position sensors and accurate wheel control are good enough to maintain desired location data accuracy when a robot has moved no further than distance &lt;em&gt;d&lt;/em&gt; from an accurately known position, the stripes (which might be white stripes, black stripes, or narrow reflective tape) might need to be placed no further than about &lt;em&gt;d&lt;/em&gt;/√2 apart.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The motion-planning software probably would need to adapt. If a robot's position is consistently wrong when it crosses a stripe, adjust its ratio of wheel encoder counts to distance traveled; or if a stripe would be seen if a travel leg were just slightly longer, extend the leg to cross the stripe; or move to calibrate against several stripes just before any position-sensitive operations; or perform position-sensitive operations at a stripes crossing-point.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is quite a variety of fiducial patterns possible.  Orthogonal stripes laid out parallel to x and y axes are probably simplest to create and work with.  But bulls-eyes, cross-hairs, wedges,  bar codes, and other patterns as well are worth considering.&lt;/p&gt;&#xA;" OwnerUserId="478" LastEditorUserId="478" LastEditDate="2013-09-03T03:21:41.797" LastActivityDate="2013-09-03T03:21:41.797" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1801" PostTypeId="2" ParentId="1515" CreationDate="2013-09-01T20:55:32.027" Score="2" Body="&lt;p&gt;I think Zuu's answer was very good, but I'd like to add some more detail to it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/YAjtC.png&quot; alt=&quot;Persistence of Vision oscillator&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The idea of using a spring is very good. From the start this creates the oscillating movement you want. I would suggest using a steel leaf spring. This is good for two reasons:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It restricts the movement to just left-right.&lt;/li&gt;&#xA;&lt;li&gt;It allows you to add solenoids to drive the movement.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Firstly, set up your spring system. The PCB with LEDs is mounted somehow on the end of the leaf spring. As well as the LEDs, the PCB should also have an accelerometer to measure the movement of the PCB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pull back the PCB with LEDs and let it oscillate. Look at the output of the accelerometer to measure the frequency of oscillation. Adjust the length of the spring until the oscillation frequency is about 20 swipes per second. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You're almost there. Now you need to drive the oscillation using the solenoids. Use the accelerometer to synchronise energising the solenoids. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Added:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason this is an improvement over Zuzu's answer is that, while solenoids are great for short sharp movements, they are terrible for long smooth movements. The travel you get from them will be too short to make an interesting display.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you need is some mechanism that allows the solenoids to work over a short distance, while the LEDs move a large distance. Hence allowing the stick to bend at the leaf spring. Whether you consider this to be a 'rotating' mechanism depends on whether you consider bending to be a type of rotating.&lt;/p&gt;&#xA;" OwnerUserId="40" LastEditorUserId="40" LastEditDate="2014-02-03T11:58:29.263" LastActivityDate="2014-02-03T11:58:29.263" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1802" PostTypeId="5" CreationDate="2013-09-01T22:36:24.477" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2013-09-01T22:36:24.477" LastActivityDate="2013-09-01T22:36:24.477" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1803" PostTypeId="4" CreationDate="2013-09-01T22:36:24.477" Score="0" Body="A step-by-step procedure for calculations. Algorithms are used for calculation, data processing, and automated reasoning." OwnerUserId="40" LastEditorUserId="40" LastEditDate="2013-09-02T04:38:04.090" LastActivityDate="2013-09-02T04:38:04.090" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1804" PostTypeId="2" ParentId="1795" CreationDate="2013-09-02T04:08:31.023" Score="4" Body="&lt;p&gt;Some ideas off the top of my head...  Generally you can either have each robot sense it's own position or have some sort of system find the robots and send them information about their position (or a combination).  Possibly using other robot positions to locate yourself is another option if they can communicate.  You could also combine sensor information from the robots and other sources.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Optical&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can encode either absolute position or relative position on the floor or ceiling.  A sensor on the robot can look at those.  A sensor like the one in your optical mouse can get relative motion off most surfaces even without any pattern.  There were older style mice that used a patterned grid.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could have two (or more) cameras on every robot looking at different directions, if the walls of the room have the right kind of pattern you could determine your location based on the images.  A spinning camera is another option.  Obstruction of the camera by other robots may be a concern.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A sensor array or camera in the floor or ceiling could locate the robots and then you can send the robots their location.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some sort of spinning optical sensor that can locate the direction of an optical beacon (e.g. a LED).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Sound&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could have a few beacons around emitting ultrasound chirps.  If they are all synchronized (e.g. fixed delay between them) then given their location you could use a time of flight calculation to determine the position of the robot.  Many years ago I've worked with an ultrasound digitizer that was accurate to about a mm over a distance of about a meter so it seems in the ballpark.  Depending on the shape of your robot and the configuration of the swarm reflections and obstructions may or may not be a problem.  You would need to experiment but my gut feeling is that with enough beacons you could good performance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ultrasound range finders on every robot.  (spinning?)  Could map the distance to other robots or the walls.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If any of these sound interesting I can try develop those ideas a little further.&lt;/p&gt;&#xA;" OwnerUserId="1584" LastActivityDate="2013-09-02T04:08:31.023" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="1805" PostTypeId="2" ParentId="1753" CreationDate="2013-09-03T12:50:26.717" Score="3" Body="&lt;p&gt;I would create a small sketch that allows you to communicate over serial port that will let you create a GUID on the desktop computer and write it to the EEPROM of your uno to a known location.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then later on in your networked arduino code you can use that saved value.  I've done this before and it's pretty simple to implement.  You can even copy / paste guid values from the web like this &lt;a href=&quot;http://www.famkruithof.net/uuid/uuidgen&quot; rel=&quot;nofollow&quot;&gt;Online GUID Generator&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See this for simple usage.  &lt;a href=&quot;http://arduino.cc/en/Tutorial/EEPROMWrite&quot; rel=&quot;nofollow&quot;&gt;Arduino EEPROMWrite Command&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another option if you have networking already active is to setup a server on your network and have the machines request a GUID from a network server if they don't have one already present on the device, then write that to the EEPROM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Either way it should be a small step you perform when first programming your devices.&lt;/p&gt;&#xA;" OwnerUserId="208" LastActivityDate="2013-09-03T12:50:26.717" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1806" PostTypeId="1" AcceptedAnswerId="2343" CreationDate="2013-09-03T12:54:04.527" Score="5" ViewCount="486" Body="&lt;p&gt;I'm trying to make differential in Google SketchUp using this tutorial &lt;a href=&quot;http://support.ponoko.com/entries/21249896-Gears-and-Joints-with-SketchUp-Sketchy-Physics&quot;&gt;http://support.ponoko.com/entries/21249896-Gears-and-Joints-with-SketchUp-Sketchy-Physics&lt;/a&gt; for gears modeling.&#xA;But I have problem: gears don't collide with any objects (and other gears). What's wrong? How to fix this?&#xA;How to make a bevel gear placed at 90 degrees relative to each other and conical cylindrical gears joints?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S. Is there something like SketchUp and SketchyPhisics in Linux?&lt;/p&gt;&#xA;" OwnerUserId="415" LastActivityDate="2014-01-22T05:23:56.770" Title="Gears modeling in Google SketchUp and SketchyPhisics" Tags="&lt;design&gt;&lt;mechanism&gt;&lt;3d-printing&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1807" PostTypeId="2" ParentId="1795" CreationDate="2013-09-03T18:33:28.443" Score="4" Body="&lt;p&gt;The low distance between the top of the robot and the ceiling really restricts your options. It seems pretty much impossible to get a centralised overview of the whole room and work from there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not sure what kind of 'room' you are talking about and how much you can instrument it, but it might be an option to place markers on the ceiling rather than the robots. Given the short distance, you'd have to pretty much completely fill the ceiling with tiny markers that can be completely observed by an upwards pointing camera on every single robot, though you might be able to position this camera lower on the robot, say between the front and back wheels on either side, to give you a wider viewing angle. But the biggest challenge would be to print enough distinct markers to instrument the whole ceiling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively, it might be conceivable to instrument the floor with lots of RFID tags, provided you can find readers that have a small enough range (AFAIK, RFID readers will only tell you that a certain tag is in range, not where it is). The &lt;a href=&quot;http://www.phidgets.com/products.php?category=14&amp;amp;product_id=1024_0&quot; rel=&quot;nofollow&quot;&gt;Phidgets RFID reader&lt;/a&gt; already has a range of approx. 3 inches, so unless you localise by seeing which group of tags you can observe (if it's possible to observe multiple tags at the same time - can you tell I have no actual working experience with RFID?), you'd have to experiment with getting smaller tags and 'shielding' them to a degree from the reader, so that they can't be read other than at very close range.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All in all it seems a tough but very interesting challenge. If it's for work, I assume you can't tell us the purpose of the project, but it sure sounds intriguing :)&lt;/p&gt;&#xA;" OwnerUserId="131" LastActivityDate="2013-09-03T18:33:28.443" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1808" PostTypeId="1" AcceptedAnswerId="1810" CreationDate="2013-09-03T19:23:28.217" Score="2" ViewCount="203" Body="&lt;p&gt;I need to assemble a small (about 8cm x 5cm x 5cm maximum), actuator with as much torque as I can get at that size. It will be driving a small reel and pulley (reel is ~1.25cm^3, 5mm center diameter), and needs to respond to load (eg. stop if the load increases beyond a certain threshold). Power to the actuator will be provided via a common bus line, so the space limit isn't further limited by the size of the battery.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My thought is to use a worm drive for this (for torque) and watch for change in current/voltage (for load), but I'm not sure if that is mechanically sound. It seems like the mechanical advantage provided by the worm would make it hard to detect a change in load.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Plan B&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I could add another sensor that would gauge the force being exerted. I'd prefer to avoid adding too many points of failure to the system, but if I did what sort of sensor would I use?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How should I approach this?&lt;/p&gt;&#xA;" OwnerUserId="1316" LastEditorUserId="1316" LastEditDate="2013-09-03T20:48:52.473" LastActivityDate="2013-09-03T21:38:45.603" Title="Tiny high torque actuator/sensor design" Tags="&lt;sensors&gt;&lt;control&gt;&lt;actuator&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1810" PostTypeId="2" ParentId="1808" CreationDate="2013-09-03T21:38:45.603" Score="5" Body="&lt;p&gt;With a series of planetary gear sets aligned axially, one can gear down by high ratios.  For example, the picture below (a &lt;a href=&quot;https://upload.wikimedia.org/wikipedia/commons/thumb/8/88/Rearview_Mirror_Epicyclic_Gears.jpg/640px-Rearview_Mirror_Epicyclic_Gears.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;wikipedia commons&lt;/a&gt; image used in the &lt;a href=&quot;https://en.wikipedia.org/wiki/Planetary_gear#Gallery&quot; rel=&quot;nofollow noreferrer&quot;&gt;planetary gear&lt;/a&gt; article) shows a 2.5-cm gearset with ratio -5/352, about 1:70.  Stacking three of these would give a ratio of about 1:343000.  Some torque and power would be lost to friction, and plastic gears would not be strong enough to deliver all of the torque possible at the output, but the concept should be clear.  If multiplying motor torque by 1/3 of a million isn't enough, add a fourth gearset, giving a torque multiplication from motor to output of about 24 million.  Note that rotation speed would be correspondingly divided (by about 24 million) and only about 1/2 to 3/4 of the motor power would arrive at the output, due to friction losses.&lt;img src=&quot;https://i.stack.imgur.com/VZIUx.jpg&quot; alt=&quot;mirror gearset&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To stop turning the pulley if load gets too high, you could use a &lt;em&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Clutch#Torque_limiter&quot; rel=&quot;nofollow noreferrer&quot;&gt;torque-limiter&lt;/a&gt;&lt;/em&gt; (or, &lt;em&gt;safety clutch&lt;/em&gt; or  &lt;em&gt;slip clutch&lt;/em&gt;) at the output. &lt;/p&gt;&#xA;" OwnerUserId="478" LastActivityDate="2013-09-03T21:38:45.603" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1811" PostTypeId="1" CreationDate="2013-09-04T12:03:26.460" Score="3" ViewCount="128" Body="&lt;p&gt;This question is further to &lt;a href=&quot;https://robotics.stackexchange.com/questions/1795/localizing-a-swarm-of-robots&quot;&gt;Localizing a swarm of robots&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In summary: I want to create a swarm of robots which can each measure their own position in a 3x2m room with a 25cm high ceiling, to an accuracy of ±5mm. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were some good answers, but most of them were optical methods. I would be interested to hear some non-optical localisation ideas, so I will impose the following further constraints:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Localisation method cannot use optical means, either visible or invisible.&lt;/li&gt;&#xA;&lt;li&gt;Nothing can be added to the floor or ceiling.&lt;/li&gt;&#xA;&lt;li&gt;There's no appreciable gap between the top of the robots and the ceiling.&lt;/li&gt;&#xA;&lt;li&gt;There are no walls, and equipment can be added around the perimeter of the room.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I look forward to hearing some creative ideas.&lt;/p&gt;&#xA;" OwnerUserId="40" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2015-05-06T08:45:03.323" Title="Localising a robot swarm non-optically" Tags="&lt;wireless&gt;&lt;swarm&gt;" AnswerCount="4" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1812" PostTypeId="2" ParentId="1811" CreationDate="2013-09-04T13:42:36.020" Score="2" Body="&lt;p&gt;I guess after optic (direct-line of sight) solutions, &lt;a href=&quot;https://electronics.stackexchange.com/questions/8690/signal-triangulation&quot;&gt;triangulation via sonic/radio frequency seems to be a possible solution&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A factor that needs to be decided is how the triangulation will be achieved. Will your transmitters be stationary, or will your receivers be stationary. In other words, will you synchronize your transmitters or your receivers.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Stationary transmitters&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;In other words, your robots will have receivers, while your room has 2 or more stationary transmitters (each synchronized). Each transmitter will continuously broadcast a unique identifier (for instance, each transmitting on their own frequency). The mobile receiver (robot), will then measure the phase shift between each transmission and triangulate.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Stationary Receivers&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;In other words, your robots will have speakers, while your room has 2 or more microphones (each synchronized). Each mobile transmitter (ie, each robot), will have an unique id (again for example their own frequency), while the stationary receivers (synchronized) will listen for broadcasts. The only problem of course is the stationary receivers will need to communicate the triangulated position back to the robot via a parallel channel (eg Bluetooth).&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Implementation&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Since trying to sample time-of-flight for RF waves isn't exactly cheap/easy (299 792 458 m / s at 5 mm : 16.7 ps ~ sampling rate in excess of 50 GHz), I'd recommend going for sonic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only problem of course is the desired resolution. Given the speed of sound at sea level 340.29 m/s, a signal pulse will take 14.7 us to travel 5 mm. And since we'd like to take a sample at least twice per our base period, we need to sample at a rate of at least 1/7.35 us = 136 kHz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While you do get system's that can sample the audible range at that rate (professional audio recording equipment usually goes up to 192 kHz and above), easily accessible recording equipment usually samples at 48 kHz (PC sound cards).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ultimately I think I'd try and go for stationary (expensive) recorders, and cheap speakers on the robots.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;External links&lt;/h2&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://instruct1.cit.cornell.edu/Courses/ee476/FinalProjects/s2007/ai45_hkc2_sbs43/ai45_hkc2_sbs43/index.html#hardware&quot; rel=&quot;nofollow noreferrer&quot;&gt;Cornell University - PeanutBot, The Audio Homing Robot&lt;/a&gt; (uses a single stationary speaker, with three microphones on the robot itself).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="1775" LastEditorUserId="-1" LastEditDate="2017-04-13T12:33:08.317" LastActivityDate="2013-09-04T14:04:32.823" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1813" PostTypeId="1" AcceptedAnswerId="1818" CreationDate="2013-09-04T21:51:27.273" Score="2" ViewCount="676" Body="&lt;p&gt;Which software can be used to prototype/design robot parts (mechanical parts, body, gears, etc)&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have some crazy idea I would like to try (quadripedal walking robot, animal-like), but I'd like to design the mechanism and test (to some degree) the mechanism in some kind of simulator before I start wasting money on parts/materials. What tool could I use for that? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm only interested in mechanical design (chassis + servo/motor placement + cogs/gears), not in electronic design. I'm not interesting in robot &lt;em&gt;control&lt;/em&gt; software, because I'll be probably able to slap something like arduino onto it and program behavior I want (experienced programmer)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Details (what I'd like to see)&lt;/strong&gt;:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Should work in 3d. I.e. finished system should be viewable in 3d.&lt;/li&gt;&#xA;&lt;li&gt;I should be able to cut materials like plywood/metal, drill holes, place gears on it, etc.&lt;/li&gt;&#xA;&lt;li&gt;It would be nice if it had some kind of part catalog so to place a gear/cog I wouldn't need to design it from scratch.&lt;/li&gt;&#xA;&lt;li&gt;It would be nice I could test if parts can actually move. I don't need full-blown simulation, just to see if gears can turn or if they'll get stuck.&lt;/li&gt;&#xA;&lt;li&gt;Not interested in electronic circuitry, just need mechanical parts, but should be able to place servos.&lt;/li&gt;&#xA;&lt;li&gt;It would be nice if it could produce blueprints.&lt;/li&gt;&#xA;&lt;li&gt;cheap/inexpensive, if possible.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Basically, I should be able to construct robot mechanism in it (by placing/connecting parts like gears,cogs, motors, springs), or some kind of clock, and test (to some degree) if it actually works.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that I could use blender3d for that, but it wasn't exactly designed for this purpose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also heard that solidworks could be used for designing mechanical parts, but it is too expensive, especially for one-time-project. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any recommendations?&lt;/p&gt;&#xA;" OwnerUserId="1910" LastEditorUserId="1910" LastEditDate="2013-09-04T21:59:49.670" LastActivityDate="2013-09-05T16:29:04.220" Title="Software for designing mechanical systems/robotic parts" Tags="&lt;software&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2013-09-06T06:22:49.273" ContentLicense="CC BY-SA 3.0" />
  <row Id="1815" PostTypeId="1" AcceptedAnswerId="1833" CreationDate="2013-09-05T12:40:22.553" Score="6" ViewCount="657" Body="&lt;p&gt;I need an equation or a some hints to solve the following problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Imagine a &lt;a href=&quot;http://en.wikipedia.org/wiki/Roller_screw&quot; rel=&quot;nofollow noreferrer&quot;&gt;roller screw&lt;/a&gt; drive. I apply a torque of &lt;code&gt;T&lt;/code&gt; to translative move my load mass &lt;code&gt;M&lt;/code&gt;. I assume my screw has an efficiency of 90%. Now an additional axial force affects my mass in the opposite moving direction. Is this force completely transformed into torque (of course considering the efficiency) or is it possible, that my whole roller screw is moving, because it is not fixed? I just found papers/books/articles for movable slides/loads, but fixed shafts. But in my case motor and shaft are part of an osciallation system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not a mechanical engineer, so I'm sorry if the answer may is trivial.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I made a little sketch now &lt;img src=&quot;https://i.stack.imgur.com/70UmY.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The process force &lt;code&gt;Fp&lt;/code&gt; is pushing my mass, most of the force is transformed into a load torque &lt;code&gt;Tp&lt;/code&gt; which acts against my drive torque &lt;code&gt;TD&lt;/code&gt;. Some of the energy is lost by friction. The question is, if there is also a partial force &lt;code&gt;Tp?&lt;/code&gt; which is affecting the bearing and therefore exciting my chassis.&lt;/p&gt;&#xA;" OwnerUserId="1913" LastEditorUserId="-1" LastEditDate="2013-09-08T16:16:12.500" LastActivityDate="2013-09-12T16:56:46.577" Title="Roller Screw drive - axial movement instead of friction" Tags="&lt;movement&gt;&lt;torque&gt;&lt;differential-drive&gt;" AnswerCount="1" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="1816" PostTypeId="2" ParentId="815" CreationDate="2013-09-05T14:44:32.470" Score="1" Body="&lt;p&gt;Are you worried that the Arduino may not have enough pins to control 4 different motors plus the stuff on that other shield?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is possible to control any number of motors using 4 digital pins from the Arduino.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The STMicroelectronics L6470 stepper motor driver chip is designed to be daisy-chained so 4 digital pins from the Arduino can control any number of motors.&#xA;(If you know of any other motor driver that can be daisy-chained to control any number of motors using less than 10 pins from the Arduino, please comment and mention its name).&#xA;I built a prototype using the Sparkfun &lt;a href=&quot;https://www.sparkfun.com/products/10859&quot; rel=&quot;nofollow&quot;&gt;L6470 breakout board&lt;/a&gt;.&#xA;Apparently several people have made other &lt;a href=&quot;http://reprap.org/wiki/Stepper_motor_driver#Stepper_driver_chips&quot; rel=&quot;nofollow&quot;&gt;open-source hardware boards for the L6470&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="187" LastActivityDate="2013-09-05T14:44:32.470" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1817" PostTypeId="2" ParentId="815" CreationDate="2013-09-05T16:10:39.327" Score="0" Body="&lt;p&gt;Is the problem that the off-the-shelf motor shields all look like they mechanically interfere with the other shield you want to use?&#xA;Perhap you're seeing the &quot;both shields want to be the top shield, so they can't stack&quot; problem?&#xA;It's pretty simple to control servo motors with simple wire connections.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Standard off-the-shelf servo motors have a 3-wire cable for &lt;a href=&quot;https://en.wikipedia.org/wiki/servo_control&quot; rel=&quot;nofollow&quot;&gt;servo control&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many shields -- in addition to their &quot;main&quot; circuit -- throw in a &quot;power connection&quot; and a few servo connections.&lt;a href=&quot;http://www.scienceprog.com/testing-arduino-motor-shield-with-servo-motor/&quot; rel=&quot;nofollow&quot;&gt;(a)&lt;/a&gt;, &lt;a href=&quot;http://arduino-info.wikispaces.com/SensorShield&quot; rel=&quot;nofollow&quot;&gt;(b)&lt;/a&gt;, &lt;a href=&quot;http://www.robotshop.com/dual-stepper-motor-driver-shield-arduino.html&quot; rel=&quot;nofollow&quot;&gt;(c)&lt;/a&gt;, etc.&#xA;They connect the 3 servo wires connected -- the GND (G) and Power (+) wires connected to the appropriate power supply, and the Arduino GND and the power supply GND connected.&#xA;Typically the signal wire (S) is connected to one of the six special &lt;a href=&quot;http://arduino-info.wikispaces.com/Arduino-PWM-Frequency&quot; rel=&quot;nofollow&quot;&gt;Arduino PWM pins&lt;/a&gt;.&#xA;(This method can drive a maximum of 6 motors -- or less if that other shield needs some of these pins).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you make the same connections between the Arduino and the servo with simple wire connections, it works just as well.&#xA;&lt;a href=&quot;http://www.adafruit.com/blog/2012/12/18/tutorial-arduino-lesson-14-servo-motors/&quot; rel=&quot;nofollow&quot;&gt;(a)&lt;/a&gt;, &lt;a href=&quot;http://forum.arduino.cc/index.php?topic=111690.msg838987#msg838987&quot; rel=&quot;nofollow&quot;&gt;(b)&lt;/a&gt;, &lt;a href=&quot;http://www.instructables.com/id/Controlling-an-RC-Servo-motor-with-an-Arduino-and-/&quot; rel=&quot;nofollow&quot;&gt;(c)&lt;/a&gt;, etc.&lt;/p&gt;&#xA;" OwnerUserId="187" LastActivityDate="2013-09-05T16:10:39.327" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1818" PostTypeId="2" ParentId="1813" CreationDate="2013-09-05T16:29:04.220" Score="1" Body="&lt;p&gt;You can use &lt;a href=&quot;http://www.sketchup.com/&quot; rel=&quot;nofollow&quot;&gt;google sketchup&lt;/a&gt;. It's free and should be allow you to do most of what you want. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Solidworks would most likely fully match your requirements above. Since it is a one-time project, you could consider evaluating Solidworks by requesting a &lt;a href=&quot;http://www.solidworks.com/sw/purchase/solidworks-trial.htm&quot; rel=&quot;nofollow&quot;&gt;free trial&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Good luck.&lt;/p&gt;&#xA;" OwnerUserId="983" LastActivityDate="2013-09-05T16:29:04.220" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1819" PostTypeId="2" ParentId="1066" CreationDate="2013-09-06T09:29:25.550" Score="3" Body="&lt;p&gt;As you correctly say, if you want to compute the transform from link $(n+1)$ to link $n$, you should simply invert the matrix $G$. The inverse of a homogenous transformation matrix&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$G = \left[\begin{matrix}&#xA;  R &amp;amp; p \\&#xA;  0 &amp;amp; 1&#xA;\end{matrix}\right]$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;is&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$G^{-1} = \left[\begin{matrix}&#xA;  R^T &amp;amp; -R^T p \\&#xA;  0 &amp;amp; 1&#xA;\end{matrix}\right]$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If $G$ is already available, this is probably the fastest way of computing $G^{-1}$. Otherwise, if only the DH parameters are known, you can insert the expression for $G$ to find this simplified expression for the translation of $G^{-1}$:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$-R^T p = \left[\begin{matrix}&#xA;-a\\&#xA;-d \sin(\alpha)\\&#xA;-d \cos(\alpha)&#xA;\end{matrix}\right]$&lt;/p&gt;&#xA;" OwnerUserId="1917" LastActivityDate="2013-09-06T09:29:25.550" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1820" PostTypeId="2" ParentId="521" CreationDate="2013-09-06T12:08:15.040" Score="2" Body="&lt;p&gt;Your formula for a 6 &lt;em&gt;dof&lt;/em&gt; joint assumes that all 6 joints have the axis $(0, 0, 1)$ in the world frame and that all joints are revolute. Since the 6 joints are thus identical, their columns in the Jacobian are also identical.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Starting over, suppose a joint has an axis $a$ going through a point $r$. Let $e$ be the position of the end-effector. The coordinates of $a$, $r$, and $e$ are all given in the world frame and are being updated as the robot is being moved. The axis $a$ has length $1$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the joint is revolute, the column of the Jacobian for the joint is&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$J_{\theta}(a, r) = \left[\begin{matrix}&#xA; a \times (e - r) \\&#xA; a&#xA;\end{matrix}\right]$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the joint is prismatic, the column is&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$J_{p}(a) = \left[\begin{matrix}&#xA; a \\&#xA; 0&#xA;\end{matrix}\right]$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Suppose we have a 6 &lt;em&gt;dof&lt;/em&gt; joint which is not only spherical but can translate in space too. Suppose the axes of the joint are $a_x$, $a_y$, and $a_z$ and that each revolute and prismatic joint shares an axis, so that the Jacobian for the joint becomes&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$J = \left[\begin{matrix}&#xA;  J_p(a_x) &amp;amp; J_p(a_y) &amp;amp; J_p(a_z) &amp;amp; J_{\theta}(a_x, r) &amp;amp; J_{\theta}(a_y, r) &amp;amp; J_{\theta}(a_z, r)&#xA;\end{matrix}\right]$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The axes $a_x$, $a_y$, and $a_z$ depend on the forward kinematics of the robot. To illustrate, let the transformation of the $k$th joint in the world frame be given by&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$F_k = \prod_{i=1}^{k} L_i T_i$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where the transformations $L_i$ are constants, and the transformations $T_i$ depend on the joint variables. Let $R_c(q)$ and $P_c(q)$ be the transformations that rotate and translate by $q$ about the coordinate axis named $c$ (either $x$, $y$, or $z$).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let $\Delta q = (\Delta p_x, \Delta p_y, \Delta p_z, \Delta \theta_x, \Delta \theta_y, \Delta \theta_z)$ be a displacement, computed by help of the Jacobian, for the $i$th joint. Let $\Delta T = P_x(\Delta p_x) P_y(\Delta p_y) P_z(\Delta p_z) R_x(\Delta \theta_x) R_y(\Delta \theta_y) R_z(\Delta \theta_z)$ and update the local transformation of the joint by:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$T_i \leftarrow T_i \, \Delta T$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this formulation of the forward kinematics, the axes $a_x$, $a_y$, and $a_z$ of joint $i$ are exactly the columns of the rotation matrix of $F_i$. Also the position $r$ is the translation vector of $F_i$.&lt;/p&gt;&#xA;" OwnerUserId="1917" LastActivityDate="2013-09-06T12:08:15.040" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1825" PostTypeId="2" ParentId="344" CreationDate="2013-09-06T14:31:25.567" Score="2" Body="&lt;p&gt;Since the question is about an industrial robot, we probably don't have a model of the dynamics of the robot, so I am assuming we are looking for solutions that optimize a kinematic criterion only.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The robot has a closed-form solution for its inverse kinematics, but unluckily the end-effector has an extra rotational degree of freedom, which means that the robot has essentially 7 degrees of freedom. But because this is just one more &lt;em&gt;dof&lt;/em&gt;, it is not as much of an issue as one might think.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A common trick for such &lt;em&gt;almost&lt;/em&gt; non-redundant robots is to lock the extra degrees of freedom and solve for the remaining joint values analytically. Let's say we write a closed-form IK solver for the 6 &lt;em&gt;dof&lt;/em&gt; robot that returns solutions in $0.05$ ms on average. By iterating from $1$ to $360$ you can therefore find the optimal solution for a discretization of the pen angle of $1^\circ$ in about $18$ ms, which given the application is probably more than adequate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If most of the time the pen is only moving a little (e.g. when drawing a line), another trick to speed up the search is to make use of numerical IK, for example the pseudoinverse method:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let $q_1$ be the current configuration of the robot, let $J$ be its Jacobian, and let $\Delta x$ be the displacement of the target relative to the current end-effector transformation. Solve $\Delta x = J \, \Delta q$ for $\Delta q$ and compute a new configuration $q_2 = q_1 + \Delta q$. I am skipping details here, but the solution $\Delta q$ should minimize $\|\Delta q\|$ for a properly chosen metric.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is done for the 7 &lt;em&gt;dof&lt;/em&gt; robot and again should take only fractions of a millisecond. Although $q_2$ might not be a valid configuration (the joint values can be out of bounds) and might not be an accurate IK solution (you can take more pseudoinverse steps, though), most of the time it will be a good starting point for a search using the closed-form solver.&lt;/p&gt;&#xA;" OwnerUserId="1917" LastActivityDate="2013-09-06T14:31:25.567" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1826" PostTypeId="1" CreationDate="2013-09-07T18:05:23.013" Score="-1" ViewCount="477" Body="&lt;p&gt;Today I was going to buy a motor online, and saw that 10 rpm and 1000 rpm DC motors cost the same. How is it possible to change the rpm without requiring any additional parts cost?&lt;/p&gt;&#xA;" OwnerUserId="1924" LastEditorUserId="350" LastEditDate="2013-09-07T20:06:02.977" LastActivityDate="2013-09-07T20:21:07.433" Title="Why do 1000 rpm and 10 rpm DC motors cost the same?" Tags="&lt;motor&gt;" AnswerCount="2" CommentCount="1" ClosedDate="2013-09-08T06:04:33.527" ContentLicense="CC BY-SA 3.0" />
  <row Id="1827" PostTypeId="2" ParentId="1826" CreationDate="2013-09-07T19:10:49.490" Score="1" Body="&lt;p&gt;Revolutions per minute (RPM) is merely one of the parameters of a DC motor. Another important criterion is torque, which may be understood as the power output capability of the motor. Perhaps the 10 RPM motor is capable of driving a heavier load, and the 1000-RPM motor simply cannot reach its nominal revolutions per minute with even a very light load. &lt;/p&gt;&#xA;" OwnerUserId="1833" LastActivityDate="2013-09-07T19:10:49.490" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1828" PostTypeId="2" ParentId="1826" CreationDate="2013-09-07T20:21:07.433" Score="1" Body="&lt;p&gt;Most likely, the difference between the two motors will be the number of times the wire is wrapped around the &lt;a href=&quot;http://en.wikipedia.org/wiki/Commutator_%28electric%29&quot; rel=&quot;nofollow&quot;&gt;commutator&lt;/a&gt;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a &lt;a href=&quot;http://lancet.mit.edu/motors/motors3.html#tscurve&quot; rel=&quot;nofollow&quot;&gt;tradeoff between RPM and torque in DC motors&lt;/a&gt;, where more windings mean more torque (but a lower maximum RPM).  Depending on the characteristics of the motor, some manufacturers use a thicker wire when building motors with fewer windings -- allowing more current to flow.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, it's possible that the same amount of copper wire is being used for both motors, or that it's near enough not to bother with pricing the different motor types differently.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2013-09-07T20:21:07.433" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1831" PostTypeId="1" CreationDate="2013-09-09T18:06:08.263" Score="4" ViewCount="1865" Body="&lt;p&gt;I want to make a mathematical model of quadcopter in simulink. I have studied quadcopter, although I am new and not build any flying robot before. I studied so far that I have to use four brushless DC motors PID speed control, two motors will rotate clock wise and two anti clock wise. I want to make very simple mathematical model. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The input of the model will be the xyz locations on 3d space, copter will always fly from 0,0,0 path. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So far I decided that I will increment the coordinates step by step for example if I want the next location of the to be x=10, y=10, z=10; then I will increment in these locations and input to a flight control block. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is how can I decide the speed of motors according to x,y,z next location and how to convert that speed into Yaw Pitch and Roll and finnally convert the Yaw, Pitch and Roll into X,Y,Z coordinates. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need the convertion formulas that can be easily implemented into simulink. &#xA;Please provide help thanks &lt;/p&gt;&#xA;" OwnerUserId="1015" LastActivityDate="2013-10-09T19:55:31.960" Title="quadcopter parameters calculations for simulink model" Tags="&lt;quadcopter&gt;&lt;simulator&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1832" PostTypeId="2" ParentId="1831" CreationDate="2013-09-09T19:18:26.980" Score="2" Body="&lt;p&gt;A linearized quadrotor model can be found in the results section of my paper &lt;a href=&quot;http://arl.cs.utah.edu/pubs/ICRA2013-1.pdf&quot; rel=&quot;nofollow&quot;&gt;Kinodynamic RRT*: Asymptotically Optimal Motion Planning&#xA;for Robots with Linear Dynamics&lt;/a&gt;. This is a state space model that includes the 3D position, 3D velocity, 2D angular position, and 2D angular velocity. The angular position and angular velocity are 2D because it restricts the quadrotor from yawing. If you want to model yaw then you need to add a couple of equations to describe how the yaw at its associated angular velocity changes.&lt;/p&gt;&#xA;" OwnerUserId="177" LastActivityDate="2013-09-09T19:18:26.980" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1833" PostTypeId="2" ParentId="1815" CreationDate="2013-09-09T21:13:24.670" Score="3" Body="&lt;p&gt;OK.  &lt;strong&gt;as drawn&lt;/strong&gt;, ignoring mass and accelerations, the force $F_p$ will appear as a torque on your ball screw.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;However&lt;/strong&gt;, the total force on the ball screw, and hence the torque, depends on the mass of the thing you're moving with the ball screw interacting with gravity (if it's being moved in anything other than a horizontal plane), and on whether or not the whole assembly -- frame and load -- is moving at anything other than a steady velocity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On a bad day, your mass-spring-damper system will have an overall resonance that interacts with your control system, making oscillations happen where you never expected them.&lt;/p&gt;&#xA;" OwnerUserId="1411" LastEditorUserId="350" LastEditDate="2013-09-12T16:56:46.577" LastActivityDate="2013-09-12T16:56:46.577" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="1835" PostTypeId="1" CreationDate="2013-09-10T18:51:58.993" Score="2" ViewCount="1027" Body="&lt;p&gt;I am trying to build an arm that will have about 5 by 5 by maybe 7 or so centimeters of room for a rotary motor capable of lifting it. The joint will basically allow the arm to rotate in a single degree of freedom in a circle that is perpendicular to the ground.The rest of the arm will probably be around 64 centimeters long and weigh around a minimum of 9 kilograms before it lifts anything. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What kind of motor type would give it the best chance of lifting the arm quickly&lt;sup&gt;&amp;dagger;&lt;/sup&gt; and reasonably accurately&lt;sup&gt;&amp;ddagger;&lt;/sup&gt;? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;&amp;dagger; Raising from straight down to out 90 degrees in around 1 to .5 seconds maximum.&lt;/sup&gt;&lt;br&gt;&#xA;&lt;sup&gt;&amp;ddagger; At least a centimeter at the end of the arm which means probably at the very least 300 positions for the motor.&lt;/sup&gt;&lt;/p&gt;&#xA;" OwnerUserId="1936" LastEditorUserId="37" LastEditDate="2013-09-20T14:56:57.090" LastActivityDate="2013-09-20T14:56:57.090" Title="Effective motor type for robotic arm?" Tags="&lt;motor&gt;&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1837" PostTypeId="1" CreationDate="2013-09-11T12:21:35.940" Score="0" ViewCount="127" Body="&lt;p&gt;I'd like to start with robotics, but unfortunately I know very little about HW engineering. Moreover I used to use such languages as Python, C# and Java, and do not have much experience in C. Still I want very much to be able to program a robot, and I have very big interest in Computer Vision and AI. Are there any platforms/kits that you can buy, and with little time spent you already can program them, preferably in high-order languages?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd prefer something wheeled (something flying would also be nice, but it may be too hard to be the case for a first robot), with a camera and some additional sensors. Would be also nice to have there something, that could help to avoid obstacles, like laser distance sensor or ultra-sonic sensor. Ideally I would like to build a robot that can navigate in the room without the help of operator. I'd like to look at SLAM some time in future, but for now I just need something to get familiar with the robotics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also it should probably be not very expensive, at least not before I will be very sure that I am ready to go deeper into robotics. Something for 300-500$ would be awesome.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can somebody suggest kits/platforms/tutorials/any other info?&lt;/p&gt;&#xA;" OwnerUserId="1918" LastActivityDate="2013-09-11T18:57:42.827" Title="Choosing a platform to start" Tags="&lt;beginner&gt;" AnswerCount="1" CommentCount="6" ClosedDate="2013-09-11T22:30:40.490" ContentLicense="CC BY-SA 3.0" />
  <row Id="1838" PostTypeId="1" CreationDate="2013-09-11T12:35:16.233" Score="0" ViewCount="16744" Body="&lt;p&gt;I am doing simulation of Quadcopter in simulink. I want to know how Yaw, Pitch and Roll effect the flight of Quadcopter? and How these are different from a single rotor helicopter? &#xA;Mainly how to change the RPM to change the x,y,z coordinates of the Quadcopter? &#xA;Is there any Differential Equation that can convert the rpm to yaw pitch and roll? Please help.&lt;/p&gt;&#xA;" OwnerUserId="1015" LastActivityDate="2013-09-11T18:51:37.317" Title="How Yaw, Pitch and Roll effect the flight of Quadcopter?" Tags="&lt;quadcopter&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ClosedDate="2013-09-12T05:42:39.237" ContentLicense="CC BY-SA 3.0" />
  <row Id="1839" PostTypeId="1" CreationDate="2013-09-11T15:51:34.930" Score="5" ViewCount="112" Body="&lt;p&gt;I'm new to the whole visual servoing area.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm now reading the tutorial &lt;a href=&quot;http://www.irisa.fr/lagadic/pdf/2006_ieee_ram_chaumette.pdf&quot; rel=&quot;nofollow&quot;&gt;Visual Servo Control &#xA;Part I: Basic Approaches&quot;&lt;/a&gt; and I don't understand something fundamental - what information is available to the robot?&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Is the 3D location of the tracked features in the current frame known?&lt;/li&gt;&#xA;&lt;li&gt;Is it known for the desired frame?&lt;/li&gt;&#xA;&lt;li&gt;Is it known for both?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;If it's known for both - then what would be the best thing to do? &#xA;Would it be to compute the current and desired 3D location and orientation of the robot, and plan an optimal path accordingly, essentially knowing everything in advance?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, in what sense could a control law (i.e translation + rotation path) be optimal for a visual servo?&lt;/p&gt;&#xA;" OwnerUserId="1940" LastEditorUserId="350" LastEditDate="2013-09-13T03:22:34.940" LastActivityDate="2013-09-13T03:22:34.940" Title="What frame of reference is used during Visual Servoing?" Tags="&lt;localization&gt;&lt;research&gt;&lt;visual-servoing&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1841" PostTypeId="2" ParentId="1838" CreationDate="2013-09-11T18:51:37.317" Score="5" Body="&lt;p&gt;In a &lt;strong&gt;helicopter&lt;/strong&gt; (which has 2 rotors, one main rotor and one tail rotor) the angle of attack of the main rotor controls the altitude, pitch, and roll. The yaw is controlled by the counter-torque rotor (tail rotor) which counter acts the reaction torque exerted by the rotation of main rotor which acts on the body of the helicopter. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Cyclic Control for Pitch and Roll&lt;/strong&gt; &#xA;The blades of the main rotor are pitched up or down cyclically, that is, the pitch depends on the blades current position in the rotation cycle. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Collective Control for Altitude&lt;/strong&gt;&#xA;The blades are pitched up or down &quot;collectively&quot;, that is, at the same time. This produces a balanced lift force that can move the helicopter up or down. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Throttle control&lt;/strong&gt;&#xA;The throttle controls the speed of rotation of the blades. Through mechanical or electro-mechanical control systems this is often automatically controlled to maintain constant power while altering the other two control mechanisms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More information here: &#xA;&lt;a href=&quot;http://en.wikipedia.org/wiki/Helicopter_flight_controls&quot; rel=&quot;noreferrer&quot;&gt;http://en.wikipedia.org/wiki/Helicopter_flight_controls&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a &lt;strong&gt;quadcopter&lt;/strong&gt;, the pitch of the blades doesn't change. Instead, the rotation speed of the rotors change to control the flight dynamics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a plus configuration&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Pitch&lt;/strong&gt;&#xA;Pitch is controlled by increasing and decreasing the rpms of the front and back rotors causing a moment which causes the copter to pitch up or down. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Roll&lt;/strong&gt;&#xA;Same mechanism as pitch but using left and right rotors instead of front and rear.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Yaw&lt;/strong&gt;&#xA;In a quadcopter the rotors are counter rotating. Two of the rotors rotate in one direction and two rotate in the other. If the rpms of all rotors are the same then no moment about he yaw axis is created. By altering the rpms of the sets of counter rotating rotors, a moment will be created and the copter will yaw.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a paper that models and simulates the dynamics of a quadcopter:&#xA;&lt;a href=&quot;http://andrew.gibiansky.com/downloads/pdf/Quadcopter%20Dynamics,%20Simulation,%20and%20Control.pdf&quot; rel=&quot;noreferrer&quot;&gt;http://andrew.gibiansky.com/downloads/pdf/Quadcopter%20Dynamics,%20Simulation,%20and%20Control.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="983" LastActivityDate="2013-09-11T18:51:37.317" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1842" PostTypeId="2" ParentId="1837" CreationDate="2013-09-11T18:57:42.827" Score="3" Body="&lt;p&gt;I would suggest trying &lt;a href=&quot;http://mindstorms.lego.com/%E2%80%8E&quot; rel=&quot;nofollow&quot;&gt;lego mindstorms&lt;/a&gt;. It removes a lot of the electronics, and mechanical barriers when starting to learn about robotics.&lt;/p&gt;&#xA;" OwnerUserId="983" LastActivityDate="2013-09-11T18:57:42.827" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1844" PostTypeId="1" AcceptedAnswerId="1849" CreationDate="2013-09-12T15:15:05.590" Score="6" ViewCount="13393" Body="&lt;p&gt;My quad copter can balance itself in the air using data collected from mpu6050. With the sonar sensor, it can hover at a specific height, but it  moves on the horizontal plane in a random direction.  If i put an object below it, it will ascend to keep the distance between the sonar senor and the object.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now i want to make it have the ability to hover stably. Is it possible to add a downward-facing camera to calculate the speed of optical flow in order to keep it hovering on the same point in the horizontal plane?  Could I use a forward-facing camera to stabilize its vertical speed?&lt;/p&gt;&#xA;" OwnerUserId="1948" LastEditorUserId="350" LastEditDate="2013-09-13T03:21:34.610" LastActivityDate="2014-01-16T08:46:34.223" Title="Stabilizing a quadcopter with optical flow" Tags="&lt;sensors&gt;&lt;quadcopter&gt;&lt;cameras&gt;&lt;visual-servoing&gt;" AnswerCount="4" CommentCount="2" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1845" PostTypeId="2" ParentId="1839" CreationDate="2013-09-12T16:52:52.043" Score="1" Body="&lt;p&gt;Generally, visual servoing is a way to measure your position &lt;em&gt;relative&lt;/em&gt; to features that are seen on the camera, without having to know your absolute position.  In other words, registering those features with those in a global frame would be a separate process.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Remember that visual servoing is not limited to simply providing more data about your static environment -- it's entirely appropriate to use visual servoing to maintain a position relative to something else in the environment that might move.  &lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2013-09-12T16:52:52.043" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1846" PostTypeId="2" ParentId="1844" CreationDate="2013-09-13T03:21:19.577" Score="0" Body="&lt;p&gt;It sounds like you want to control the position of your quadcopter, and although it's possible to do with a camera I don't think optical flow is the right way to approach the problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Rather than measure the motion of the quadcopter, you should measure the position.  For that, you'll want to use the camera to identify features in its field of vision, then attempt to keep them in the same place relative to the vehicle.  This is called &lt;a href=&quot;http://en.wikipedia.org/wiki/Visual_Servoing&quot; rel=&quot;nofollow&quot;&gt;Visual Servoing&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2013-09-13T03:21:19.577" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1847" PostTypeId="2" ParentId="1844" CreationDate="2013-09-13T09:54:47.517" Score="1" Body="&lt;p&gt;You can definitely use Visual Servoing for pose maintenance in the X-Y plane. You need to have sufficient distinct features on the ground to get a good estimate of drift/spin etc. For example, on an uniform and large ground/field, lack of features might become a problem. But things will be more in your control and you can add visual cues into the scene to assist the image processing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The forward facing camera is quite different. If your quadcopter flies high enough and is staring right into the horizon, precise pose maintenance will be very difficult (roll/pitch stabilisation might become easy in that case). But stabilising the vertical speed based on solely its front facing camera may not be a very good idea. &lt;/p&gt;&#xA;" OwnerUserId="1949" LastActivityDate="2013-09-13T09:54:47.517" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1849" PostTypeId="2" ParentId="1844" CreationDate="2013-09-13T20:52:55.443" Score="7" Body="&lt;p&gt;The following diagram (&lt;a href=&quot;http://www.thedambusters.org.uk/height.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;1&lt;/a&gt;) illustrates a method by which a Lancaster navigator determined airplane height above the water of a lake. Such a method is useful if the ground lacks features needed for other forms of Visual Servoing.  A program I saw about mission &lt;a href=&quot;https://en.wikipedia.org/wiki/Operation_Chastise&quot; rel=&quot;nofollow noreferrer&quot;&gt;Chastise&lt;/a&gt; showed one spotlight shining green and the other red, to avoid confusion about which way to go to get to correct altitude.  Note, the bomb aiming &lt;a href=&quot;http://www.thedambusters.org.uk/sight.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;rangefinder&lt;/a&gt; used similar geometric principles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/gz4i3.jpg&quot; alt=&quot;2-spotlight height-method&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With a quadcopter, you could use red and green lasers, eg from a red laser pointer and a green laser pointer.  You could also add servos to rotate one or both of the lasers to adjust the altitude setpoint.  A camera or a line sensor would detect the relative positions where the lights hit the ground.&lt;/p&gt;&#xA;" OwnerUserId="478" LastActivityDate="2013-09-13T20:52:55.443" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1853" PostTypeId="1" CreationDate="2013-09-15T20:45:39.083" Score="3" ViewCount="821" Body="&lt;p&gt;i need your advice if someone experienced something similar. I try using digital servo but when i tried to connect it to board by this tutorial &lt;a href=&quot;https://blogs.oracle.com/hinkmond/entry/connect_robot_servo_to_rpi3&quot; rel=&quot;nofollow&quot;&gt;https://blogs.oracle.com/hinkmond/entry/connect_robot_servo_to_rpi3&lt;/a&gt;&lt;br&gt;&#xA;servo motor only shakes for first ten cycles but after that turns normally. I have no idea why is that but in every article i read that controlling digital servo is same as analog with no need to program them after unboxing.&#xA;Thanks for any idea&lt;/p&gt;&#xA;" OwnerUserId="1955" LastActivityDate="2013-09-16T22:08:02.160" Title="Digital servo shaking" Tags="&lt;raspberry-pi&gt;&lt;otherservos&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1854" PostTypeId="2" ParentId="1853" CreationDate="2013-09-16T00:28:24.200" Score="1" Body="&lt;p&gt;The tutorial is using software pwm from java code. If the PI is otherwise busy or the jvm pauses for garbage collection, the pwm signals to the servo will be erratic. Which could be causing your problems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have to admit to only looking at the first page of the tutorial.... The other problem I encountered which was very confusing was erratic behaviour caused by the servo drawing more powerr than the PI can supply... Yes I was powering my servo from the pi's 5 volt rail.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By far the most likely answer is that java does lots of small garbage collections for a while until it adjusts its settings and settles into a much longer garbage collection cycle causing your program to pause repeatedly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When java does a garbage collection your code stops, therefore so does the pwm and this would cause the strange behavior your are describing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For my servos I'm using the adafruit 16 Channel pwm board, it has it's own clock, you talk to it via i2c and it leaves your code free to do other stuff.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should probably do some reading about java garbage collection, java and real-time processing don't go together so well. As long as you understand that you can only get near to real-time processing out of java, all is good.&lt;/p&gt;&#xA;" OwnerUserId="1819" LastEditorUserId="1819" LastEditDate="2013-09-16T22:08:02.160" LastActivityDate="2013-09-16T22:08:02.160" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1856" PostTypeId="1" CreationDate="2013-09-16T17:33:16.537" Score="0" ViewCount="2438" Body="&lt;p&gt;I am tasked with creating a system that will recognize fish pulled out of a lake. The system should be able to identify the type of species of fish. Typically, I turn to Arduino for projects like this. However, based on what I've read about image processing, it's sounding like Arduino doesn't have the processing power. Does anyone have any suggestions for development boards and cameras that can easily interface with the board?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've look at this option, &lt;a href=&quot;http://www.finboard.org/videos/introducing-finboard?utm_campaign=Embedded%20Processing%20and%20DSP%20Newsletter%2013-Q3%20NA&amp;amp;utm_medium=email&amp;amp;utm_source=Eloqua&quot; rel=&quot;nofollow&quot;&gt;http://www.finboard.org/videos/introducing-finboard?utm_campaign=Embedded%20Processing%20and%20DSP%20Newsletter%2013-Q3%20NA&amp;amp;utm_medium=email&amp;amp;utm_source=Eloqua&lt;/a&gt;. It seems like it would be a nice all in one type of thing. Has anyone used anything like this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="1958" LastActivityDate="2013-10-18T23:26:32.243" Title="Need suggestions for object recognition" Tags="&lt;arduino&gt;&lt;microcontroller&gt;&lt;raspberry-pi&gt;&lt;cameras&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1857" PostTypeId="1" AcceptedAnswerId="1859" CreationDate="2013-09-16T17:59:59.720" Score="5" ViewCount="270" Body="&lt;p&gt;I'm kicking around the idea of building a small passive sonar for an autonomous submarine. I've looked through the net for parts and finding a good transducer for converting the sound underwater into an electrical impulse. After looking at parts I got into the piezoelectric materials used for doing this such as barium titanate or Lead zirconate titanate. From what I've read on the web, some of these materials are toxic. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is, are there piezoelectric materials that one could to build a sensor from scratch that does not possess the toxic qualities? Something that could preferably thrown in a pool w/ my kids and not give them or me any defects.&lt;/p&gt;&#xA;" OwnerUserId="1957" LastEditorUserId="350" LastEditDate="2013-09-16T18:24:42.563" LastActivityDate="2013-09-16T18:46:59.793" Title="Transducer for underwater applications (passive sonar)" Tags="&lt;sensors&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1858" PostTypeId="1" AcceptedAnswerId="8324" CreationDate="2013-09-16T18:18:13.083" Score="8" ViewCount="2689" Body="&lt;p&gt;Careful inspection of page 35 (figure 58) of the &lt;a href=&quot;http://www.analog.com/media/en/technical-documentation/data-sheets/ADXL345.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;ADXL345 datasheet&lt;/a&gt; shows that under gravitational loading only, the chip uses a left-handed coordinate system.  My own experiments with this chip confirm this.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I typically only use the chip to indicate the gravity vector.  So when using this chip, I simply negate the values to get a right handed coordinate system.  But this doesn't seem right.  I assume there is a logical and mathematical explanation for the left-handed coordinate system but i can't figure out what it might be. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/bItD6.png&quot; alt=&quot;Image from ADXL345 Datasheet&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="110" LastEditorUserId="110" LastEditDate="2015-09-18T13:24:30.653" LastActivityDate="2015-10-23T22:17:46.863" Title="Why do 3-axis accelerometers seemingly have a left-handed coordinate system?" Tags="&lt;sensors&gt;&lt;imu&gt;&lt;accelerometer&gt;&lt;calibration&gt;" AnswerCount="4" CommentCount="3" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1859" PostTypeId="2" ParentId="1857" CreationDate="2013-09-16T18:46:59.793" Score="4" Body="&lt;p&gt;In general, the microphone should be covered in some sort of waterproofing material (called &quot;potting&quot;) that would prevent its materials from ever coming in contact with the pool water.  So unless you are concerned that the microphone will be smashed to pieces while in your pool, it shouldn't be a problem&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, there are some other transducer technologies besides piezo.  Ribbon microphones won't suffice, mostly because of their fragility.  Dynamic microphones might also a bad idea, because they are generally larger and require more motion than the others.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd recommend trying a cheap electrostatic (also called electret) microphone.  You should be able to cover it in silicone RTV or &quot;plumbing goop&quot; and still get a signal out of it.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2013-09-16T18:46:59.793" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1860" PostTypeId="2" ParentId="1856" CreationDate="2013-09-16T19:48:36.240" Score="1" Body="&lt;p&gt;I don't think it would be powerful enough, but you could look into the raspberry pi.  It has an HDMI port and ethernet port, and it allows you to run Linux. The Beaglebone is similar but more powerful. At work when I built an image processing platform for an autonomous ATV we used a miniITX motherboard with an i5 processor and a separate firewire card plugged into the PCIE port (this was for the stereo camera). Computer vision can involve some very intense computation, so I'd probably recommend a similar setup. However, the perception system I built was constantly running in a loop, whereas yours only needs to process one image and it's probably fine if it takes 10+ seconds to operate. When driving an autonomous vehicle, you don't have that kind of time XD. For those reasons, you might be able to get away with the previously mentioned boards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's a video of someone using a webcam to capture video and images (and look at that he's looking at FISH!) with a Beaglebone. He's also using the openCV library, which is something you'd probably want to use as well: &lt;a href=&quot;http://www.youtube.com/watch?v=8QouvYMfmQo&quot; rel=&quot;nofollow&quot;&gt;http://www.youtube.com/watch?v=8QouvYMfmQo&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="1960" LastEditorUserId="1960" LastEditDate="2013-09-16T21:50:47.313" LastActivityDate="2013-09-16T21:50:47.313" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1861" PostTypeId="1" CreationDate="2013-09-17T13:25:28.787" Score="4" ViewCount="1053" Body="&lt;p&gt;I have a question about car-like robot localization using only dead-reckoning. Given: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;robot position (at current time step) in the form $\begin{bmatrix}x &amp;amp; y &amp;amp; \theta\end{bmatrix}$ (theta is the heading)&lt;/li&gt;&#xA;&lt;li&gt;steering angle &lt;/li&gt;&#xA;&lt;li&gt;distance traveled between two time steps&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;How can I estimate the position of the robot at the next time step?&lt;/p&gt;&#xA;" OwnerUserId="1965" LastEditorUserId="350" LastEditDate="2013-09-17T15:30:53.477" LastActivityDate="2013-09-23T17:02:24.017" Title="question about car-like robot localization based on dead-reckoning" Tags="&lt;mobile-robot&gt;&lt;localization&gt;" AnswerCount="3" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1862" PostTypeId="2" ParentId="1858" CreationDate="2013-09-17T18:38:32.547" Score="0" Body="&lt;p&gt;At the end of the day, you can use a matrix to transform whatever coordinate system was used to your own system. This is typically the case when you have to place parts in a certain direction because of routing difficulties. Using a simple 3x3 matrix you can transform X,Y,Z readings so that they all align on multiple sensors. The matrix will have 0, 1 and -1 values accordingly depending on how the transformation is to be done.&lt;/p&gt;&#xA;" OwnerUserId="804" LastActivityDate="2013-09-17T18:38:32.547" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1863" PostTypeId="1" CreationDate="2013-09-17T19:16:32.240" Score="3" ViewCount="112" Body="&lt;p&gt;I want to build some simple application. I need a 5 or 6 degrees of freedom robotic arm. The arm must have feedback, so that I can control it preciously. The arm must be able to handle at least 5 lbs. And the arm would be able to work 10 hours a day.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My budget is USD$300 . Any suggestion?&lt;/p&gt;&#xA;" OwnerUserId="1967" LastActivityDate="2013-09-17T19:16:32.240" Title="May I have some suggestion on inexpensive robotic arm?" Tags="&lt;robotic-arm&gt;" AnswerCount="0" CommentCount="4" ClosedDate="2013-09-17T22:13:13.650" ContentLicense="CC BY-SA 3.0" />
  <row Id="1864" PostTypeId="1" AcceptedAnswerId="1921" CreationDate="2013-09-18T00:50:06.823" Score="2" ViewCount="6706" Body="&lt;p&gt;I was looking into the  Razor IMU from Sparkfun, and realized that the only example code on sparkfun's website was for it was meant for hooking it up to a computer (the AHRS head tracker used a serial to usb chip). I looked on google and saw nothing but stories about how it did not work. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any good way to hook up the  Razor IMU to an arduino uno (or any arduino without hardware support for more than one serial port), and if so does example code exist?&lt;/p&gt;&#xA;" OwnerUserId="1667" LastActivityDate="2017-07-20T23:07:43.523" Title="Razor IMU Arduino interfacing" Tags="&lt;arduino&gt;&lt;imu&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1867" PostTypeId="2" ParentId="1861" CreationDate="2013-09-18T23:54:17.453" Score="0" Body="&lt;p&gt;I'm reasonably sure the answer to your original question using the steering angle, will involve some hefty calculus. Although I'd like to be proven wrong.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd suggest putting encoders on the non steering pair of wheels so you can tell how far each wheel has traveled. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As the non steering wheels are always pointing the same direction you can use the information about how far each wheel has traveled in the same way that you would for a differential drive robot. This does of course assume that the to wheels can rotate independently of each other, as is traditional with cars having a differential to allow for the vehicle turning.&lt;/p&gt;&#xA;" OwnerUserId="1819" LastEditorUserId="1819" LastEditDate="2013-09-19T11:23:05.167" LastActivityDate="2013-09-19T11:23:05.167" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1868" PostTypeId="2" ParentId="554" CreationDate="2013-09-19T03:48:00.900" Score="0" Body="&lt;p&gt;have you seen these new zinc air 8cell 10,000mAh 12V drone batteries? &#xA;&lt;a href=&quot;http://www.tradekorea.com/product-detail/P00265914/drone_battery_10000mAh.html#.UjpxM2QpY2K&quot; rel=&quot;nofollow&quot;&gt;http://www.tradekorea.com/product-detail/P00265914/drone_battery_10000mAh.html#.UjpxM2QpY2K&lt;/a&gt;&#xA;saw the chart on different power to weight ratios on the above discussion comparing efficiency to fuel cells (which are still too heavy 1.2kg + fuel^800g+)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;was toying round with the idea of a quad fitted with a zinc air 10,000mAh battery, 4xGenesys alternators and 2x super capacitors&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Barry Densley&lt;/p&gt;&#xA;" OwnerUserId="1973" LastActivityDate="2013-09-19T03:48:00.900" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1869" PostTypeId="2" ParentId="1864" CreationDate="2013-09-19T04:11:57.403" Score="1" Body="&lt;p&gt;The Razor IMU has an ATmega328 microcontroller on board that can be programmed with the Arduino IDE according to &lt;a href=&quot;https://www.sparkfun.com/products/10736&quot; rel=&quot;nofollow&quot;&gt;sparkfun's product page&lt;/a&gt;. You could use the tx/rx pins (serial communication) to connect to your other Arduino's rx/tx pins (tx to rx, tx to rx) and program a communication protocol to pass data from the Razor IMU to the Arduino Uno. The Razor IMU probably already has code on board to do this. It's a matter of writing the Uno's code to request and receive the data. The Razor IMU uses 3.3V logic so make sure you use an arduino variant that uses 3.3V or use a level shifter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another option is to &lt;a href=&quot;http://trandi.wordpress.com/2011/01/03/razor-9dof-imu-i2c-to-arduino/&quot; rel=&quot;nofollow&quot;&gt;hack an I2C connection&lt;/a&gt;. This involves soldering to a pin ATmega328 and modifying some of its code.&lt;/p&gt;&#xA;" OwnerUserId="1125" LastActivityDate="2013-09-19T04:11:57.403" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1870" PostTypeId="2" ParentId="1861" CreationDate="2013-09-19T17:25:07.807" Score="2" Body="&lt;p&gt;Assuming that this doesn't count as a duplicate of the math that &lt;a href=&quot;https://robotics.stackexchange.com/users/720/daniel-oertwig&quot;&gt;Daniel Oertwig&lt;/a&gt; provided in his question &quot;&lt;a href=&quot;https://robotics.stackexchange.com/q/1653/350&quot;&gt;Calculate position of differential drive robot&lt;/a&gt;&quot;, the calculations are as follows (for each time step):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, calculate the distance travelled.&#xA;$$&#xA;\Delta d = \frac{\Delta L + \Delta R}{2} = \Delta t * s&#xA;$$&#xA;Where $L$ is the left wheel odometry, $R$ is the right wheel odometry, and s is the vehicle speed.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next, calculate the change in $x, y$ position.&#xA;$$&#xA;\Delta x = \Delta d \cdot cos(\theta) \\&#xA;\Delta y = \Delta d \cdot sin(\theta)&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where $\theta$ is the orientation angle (in radians) of the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next, calculate the change in the heading.&#xA;$$&#xA;\Delta \theta = \frac{\Delta R - \Delta L}{w}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where $w$ is the distance betweeen the two wheels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The accuracy of this technique is inversely proportional to the size of the time steps ($\Delta{t}$), and will accumulate error over time.  You can improve estimation if you have a compass, as you can detect some slippage of the wheels by comparing the actual vs expected orientation.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2013-09-23T17:02:24.017" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1871" PostTypeId="2" ParentId="1835" CreationDate="2013-09-19T18:49:09.810" Score="3" Body="&lt;p&gt;So you want to lift 9kg of mass, which means a force of around 90N, that's on an arm that's 64cm long, in one second.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\frac{\left(90N\right)\left(0.64m\right)}{1s}\simeq58W$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, that's probably doable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You don't say anything at all about gearing -- how do you propose to take the high-speed, low-torque power that comes from most motors and turn it into the low-speed, high-torque (or high-force) power that you need for the arm?  Do you have space allocated for that, or were you planning on attaching your motor output directly to the arm?&lt;/p&gt;&#xA;" OwnerUserId="1411" LastActivityDate="2013-09-19T18:49:09.810" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1873" PostTypeId="2" ParentId="1861" CreationDate="2013-09-20T11:37:54.800" Score="1" Body="&lt;p&gt;With a vehicle with steered wheels the simple approach is to calculate the centre of rotation for the vehicle and then, given the speed of the vehicle, the distance travelled around the arc can be calculated. This results in a change in position and heading. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The centre of rotation can be determined by projecting lines along the axles of the four wheels and finding where they intersect. Normally the rear wheels are non steering so they project a line along the rear axle line. If the steering geometry is 100% Ackermann, the lines projected from the front axles will intersect at the same point on the rear axle line, giving the centre of rotation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 'AckerMann Steering Geometry' and 'Slip Angle' entries on Wikipedia cover this quite nicely without getting bogged down in the maths.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that this is a simple model which ignores wheel slip, static toe etc&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A slightly more complex approach is to calculate the angle of the wheels relative to the motion of the vehicle (aka the slip angle) and then determine the force vector generated by each wheel. &#xA;Each wheel has a longitudinal force (rolling resistance and driving/braking torque) and a lateral force (generated by the slip) which combine to give the force vector.&#xA;Each of these forces act upon the vehicle to give a net acceleration (both linear and rotational)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This approach requires knowledge of the wheel loads and, at the least, an estimation of the tyre slip-force curves, although you could assume the force is linearly dependent on slip angle for low speed modelling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to really simplify matters you can treat the vehicle as a bicycle model i.e. two wheels on the centreline, one steering.&#xA;The position calculation can then be approximated by using the steering angle to generate a rotation around the centre of gravity (the steering angle is roughly proportional to a force which acts along the axle line of the wheel) and then travel in a straight line using the vehicle velocity over the sampling interval. In some regards this is similar to the calculations required for a tracked vehicle.&lt;/p&gt;&#xA;" OwnerUserId="1978" LastEditorUserId="1978" LastEditDate="2013-09-20T11:58:15.750" LastActivityDate="2013-09-20T11:58:15.750" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1874" PostTypeId="1" CreationDate="2013-09-21T07:16:58.173" Score="-1" ViewCount="260" Body="&lt;p&gt;I am a programmer by profession and new to Robotics. I have studied ECE, so know electronics, but not very familiar with mechanical aspects of robotics. I am working on a learning project with Dagu Rover 5 platform.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am trying to control the 4 DC motors with PWM and want to use the optical encoders for feedback. I am looking for some algorithms, example code in C to effectively control the rover. I know how to control the GPIO, PWM and interrupts from the processor. I am more interested in learning the algorithm that controls the motors based on this. For now, i am working on a manual robot, controlled with up/down/left/right keys. In future, I would like to add sensors, camera etc and work on autonomous aspects. Any pointers would be helpful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For reference, I am working on the Raspberry Pi platform to control the rover.&lt;/p&gt;&#xA;" OwnerUserId="1144" LastActivityDate="2016-04-14T00:54:13.010" Title="Where I can learn algorithms or and find examples of code for controlling a rover?" Tags="&lt;mobile-robot&gt;&lt;algorithm&gt;&lt;pwm&gt;&lt;c&gt;" AnswerCount="1" CommentCount="4" ClosedDate="2016-04-15T09:51:18.443" ContentLicense="CC BY-SA 3.0" />
  <row Id="1876" PostTypeId="1" CreationDate="2013-09-22T09:47:40.777" Score="3" ViewCount="1002" Body="&lt;p&gt;Is it possible to get two images from the Raspberry Pi camera mounted on a remote controlled bot and have them sent to a computer through Wi-Fi and process the images in the computer to generate a depth map?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All this is to be done in a very short time so that the robot can be helped with its locomotion without making it completely autonomous.&lt;/p&gt;&#xA;" OwnerUserId="1989" LastEditorUserId="1906" LastEditDate="2013-09-26T22:36:01.543" LastActivityDate="2016-04-17T09:47:49.733" Title="Depth map with Raspberry Pi" Tags="&lt;raspberry-pi&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1877" PostTypeId="1" CreationDate="2013-09-22T11:15:25.803" Score="2" ViewCount="880" Body="&lt;p&gt;I am going to start a project on controlling robots using hand gestures.&#xA;Though I have used MATLAB for this purpose earlier, I realized it is extremely slow for any practical real-time system.&#xA;I am currently planning to use OpenCV for this purpose.&#xA;I want suggestions on, if OpenCV is the best alternative, are there any other alternatives and if I use OpenCV, which language should I go for, C, C++ or Python?&lt;/p&gt;&#xA;" OwnerUserId="1954" LastActivityDate="2013-11-14T10:48:34.290" Title="Controlling bot using video and image processing" Tags="&lt;real-time&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1878" PostTypeId="2" ParentId="1876" CreationDate="2013-09-22T16:36:01.873" Score="4" Body="&lt;p&gt;Yes, it is possible. This is a form of &lt;a href=&quot;http://en.wikipedia.org/wiki/Computer_stereo_vision&quot; rel=&quot;nofollow&quot;&gt;stereo vision&lt;/a&gt;. You will need an accurate model of how the robot moved between frames. Then you can use stereo vision techniques to calculate the disparity.&lt;/p&gt;&#xA;" OwnerUserId="177" LastActivityDate="2013-09-22T16:36:01.873" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1879" PostTypeId="5" CreationDate="2013-09-24T08:25:52.737" Score="0" Body="&lt;p&gt;Real-time software is one with tasks that have critical timing requirements. Failure in delivering results within the required deadlines results in catastrophe at worst and uselessness of the results at best.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Real-time software is executed on an &lt;a href=&quot;http://en.wikipedia.org/wiki/Real-time_operating_system&quot; rel=&quot;nofollow&quot;&gt;RTOS&lt;/a&gt; capable of guaranteeing that those deadlines are meant, as far as the task scheduling is concerned. The task itself must be as deterministic as possible to guarantee production of its results within the allocated time slice.&lt;/p&gt;&#xA;" OwnerUserId="158" LastEditorUserId="158" LastEditDate="2013-09-24T17:57:12.077" LastActivityDate="2013-09-24T17:57:12.077" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1880" PostTypeId="4" CreationDate="2013-09-24T08:25:52.737" Score="0" Body="Real-time software is one with tasks that have critical timing requirements. Failure in delivering results within the timing requirement results in catastrophe at worst and uselessness of the results at best." OwnerUserId="158" LastEditorUserId="158" LastEditDate="2013-09-24T17:57:42.313" LastActivityDate="2013-09-24T17:57:42.313" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1881" PostTypeId="1" AcceptedAnswerId="1882" CreationDate="2013-09-24T15:50:54.913" Score="0" ViewCount="2642" Body="&lt;p&gt;I ask this since assembly language is really close to the micro-controller hardware, and what micro-controller would you reccomend.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The bot has to search for object that I show it before and then I 'lose' the object. Note, I do not know anything about micro-controllers.&lt;/p&gt;&#xA;" OwnerUserId="1888" LastEditorUserId="1888" LastEditDate="2013-09-24T16:37:48.200" LastActivityDate="2013-09-28T15:10:48.357" Title="Should you learn assembly language for robotics?" Tags="&lt;microcontroller&gt;&lt;software&gt;&lt;programming-languages&gt;" AnswerCount="6" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1882" PostTypeId="2" ParentId="1881" CreationDate="2013-09-24T16:11:31.637" Score="5" Body="&lt;p&gt;This is one of those &quot;open-ended&quot; questions that the moderator doesn't like.  So I'm going to leave you with some short, general answers.  These are based on over 20 years in industry designing various bits of hardware and software for embedded systems:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Learning enough about microprocessors so that assembly language programming comes naturally will be a big plus, but is not necessary.  Just knowing assembly language programming for some processor or another because you've memorized it isn't going to be very useful.&lt;/li&gt;&#xA;&lt;li&gt;There is no one microcontroller to recommend.  There is such a huge number of factors that come into play that the correct processor for your project could be anything from a slow 8051 clone to a super-fast bazzilion-core desktop processor with liquid cooling.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="1411" LastActivityDate="2013-09-24T16:11:31.637" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1883" PostTypeId="2" ParentId="1881" CreationDate="2013-09-24T16:12:39.400" Score="6" Body="&lt;p&gt;In general you don't need to learn assembly to be able to program a microcontroller. As long as you know C, it's enough for you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Knowledge of assembly of course would help. Specifically, it would help in writing optimized code (or rather, not writing stupid code) as well as having a good estimate of how fast or slow a piece of code could be. Sometimes in very performance critical sections manipulating the assembly may also be needed, but again, in general you wouldn't be needing any of this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Specially if you are a beginner.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Regarding microcontrollers, there is a wide variety of them, almost all of which are good and useful. Choosing a microcontroller really depends on what you want to attach to it and how complicated its software is going to be. With similar microcontrollers among different brands, I would personally pay attention to how well the microcontroller is documented and how good its compiler/IDE is. Little-explained data-sheet is a headache and a bad IDE an annoyance you don't want to deal with.&lt;/p&gt;&#xA;" OwnerUserId="158" LastActivityDate="2013-09-24T16:12:39.400" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1884" PostTypeId="1" CreationDate="2013-09-24T19:51:57.107" Score="6" ViewCount="1433" Body="&lt;p&gt;I'm interested in simulating Quadcopter control and Swarm co-ordinations. Was wondering if Blender or specifically &lt;a href=&quot;http://www.openrobots.org/wiki/morse/&quot; rel=&quot;noreferrer&quot;&gt;MORSE&lt;/a&gt; was going to be good enough? According to the &lt;a href=&quot;http://www.openrobots.org/morse/doc/latest/what_is_morse.html#but-even-morse-has-its-limitations&quot; rel=&quot;noreferrer&quot;&gt;limitations of MORSE&lt;/a&gt;, it states:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;MORSE was never meant to be a physically accurate simulator: while we rely on a state-of-the-art physics engine (Bullet), do not expect to accurately simulate robot arm dynamics or fine grasping. Other projects are doing that much better (like OpenGrasp for grasping).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;While on-going efforts try to tackle this issue, we do not consider MORSE to have a good enough temporal accuracy and time synchronization capabilities for application like hybrid simulation (where some robots are simulated while others are physically operated).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Was wondering if anyone has experience in using blender for these types of applications.&lt;/p&gt;&#xA;" OwnerUserId="1999" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2013-11-24T17:31:45.983" Title="Blender a good robotic simulator for quadcopters / swarm simulations?" Tags="&lt;simulator&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1886" PostTypeId="2" ParentId="1884" CreationDate="2013-09-25T16:47:14.383" Score="3" Body="&lt;p&gt;You might look at &lt;a href=&quot;http://www.coppeliarobotics.com/&quot; rel=&quot;nofollow&quot;&gt;v-rep&lt;/a&gt;. They say that the program is specifically designed to simulate any robot and support dynamic particles allowing for the creation of engines and propellors. The program even comes with a pre-made quadcopter model.&lt;/p&gt;&#xA;" OwnerUserId="1708" LastActivityDate="2013-09-25T16:47:14.383" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1887" PostTypeId="2" ParentId="1881" CreationDate="2013-09-25T20:37:44.017" Score="3" Body="&lt;p&gt;The major disadvantage of assembly language is that it is different for each processor that you use.  Therefore there is a big learning curve whenever you change processor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Clearly, if you only ever plan on using a single processor (or family of processors) then this is less of an issue; however, life is rarely that simple.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Equally, assembler allows you to really get things wrong, unless you are very careful. I speak as someone with lots of years commercial experience writing flight-critical assembly code!!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, pretty much every processor comes with a suitable C compiler (as @Shahbaz suggests) and porting C from one processor to another is a lot more straightforward than porting assembler.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unless you already have good assembler experience, I'd be minded to learn C, and leave assembly language for those (very rare) occurrences when C just isn't up for it.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;As for which processor... how long is your piece of string?&lt;/p&gt;&#xA;" OwnerUserId="134" LastActivityDate="2013-09-25T20:37:44.017" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1888" PostTypeId="2" ParentId="1881" CreationDate="2013-09-25T21:15:19.287" Score="0" Body="&lt;p&gt;I think the answer here is &quot;that's the wrong question&quot;.  (It's a bit like asking &quot;what spoken language should I learn if I want to write detective novels?&quot;)  But it does have an answer: &lt;strong&gt;it depends&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't speak for everyone, but when I was just starting out in programming it seemed to me that learning assembly language would help my programs run faster.  This is not necessarily true, because it was based on a faulty assumption: that my writing assembly code (at a beginner level) would produce more efficient code than today's sophisticated compilers.  Furthermore, I assumed that I could pull off complicated algorithms in assembly in the first place -- look at how a simple algorithm like &lt;a href=&quot;http://en.wikipedia.org/wiki/Bubble_sort#Pseudocode_implementation&quot; rel=&quot;nofollow&quot;&gt;bubble sort&lt;/a&gt; becomes &lt;a href=&quot;http://www.dailyfreecode.com/Code/performs-bubble-sort-497.aspx&quot; rel=&quot;nofollow&quot;&gt;very intimidating in assembly&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should have a good command of the algorithms themselves that are required for robotics.  With that knowledge, the specific language is irrelevant; you will use the language most appropriate to the platform, even if you have to learn a new language to do so.    In some cases this will be assembly, in other cases it will be a variant of C/C++ (like in Arduino), and in still other cases it could be a high-level language.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But learn the theory first, before you get bogged down in the implementation.  In other words, before you choose a language you should think about what you're going to say.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2013-09-25T21:15:19.287" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1890" PostTypeId="2" ParentId="1774" CreationDate="2013-09-26T21:45:44.243" Score="2" Body="&lt;p&gt;I think you're misunderstanding the following two sentences from the abstract: &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;(i) the first one is a fusion module which synthesizes line segments obtained from laser rangefinder and line features extracted from monocular camera. This policy eliminates any pseudo segments that appear from any momentary pause of dynamic objects in laser data.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It looks like they're first extracting lines from the point cloud generated from the laser range finder. They then cross-reference these lines with lines extracted via computer vision on the monocular image. If a line extracted from the point cloud doesn't exist in the image, then it is NOT a valid line. Therefore, you are correct, &quot;If the dynamic object moved, [the] laser data [WILL] update and eliminate the segment&quot; caused by dynamic objects. However, they're trying to correctly identify segments specifically when the dynamic object is briefly static.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can see a specific example on page 441 where a person standing still caused a segment to be extracted from the point cloud. Fortunately, this segment does not exist in the monocular image, and so it was deemed an INVALID segment. There's also a brief description of this process in section 4 on page 437.&lt;/p&gt;&#xA;" OwnerUserId="1960" LastActivityDate="2013-09-26T21:45:44.243" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1891" PostTypeId="2" ParentId="1874" CreationDate="2013-09-27T04:30:10.100" Score="1" Body="&lt;p&gt;Specifically about control of motors by PWM, you should learn about the &lt;a href=&quot;http://en.wikipedia.org/wiki/PID_controller&quot; rel=&quot;nofollow&quot;&gt;PID controller&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The sky's the limit for what you want to learn about.  Find a robotics simulator to start playing around with algorithms -- otherwise you will find that you will spend all year building the robot instead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a mobile robot, motion planning or mapping algorithms would be a good start.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Real sensors are noisy and ambiguous, so machine learning (i.e. statistical, fuzzy learning) is a whole field you can look at if you're interested, with applications in control, motion planning, and vision processing.  How much time do you have?&lt;/p&gt;&#xA;" OwnerUserId="2005" LastActivityDate="2013-09-27T04:30:10.100" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1892" PostTypeId="2" ParentId="1881" CreationDate="2013-09-27T04:37:08.787" Score="0" Body="&lt;p&gt;What kind of problems are you interested in?  Mechanical design?  Electronics?  Low-level control and algorithms?  High-level planning and state estimation?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pick your battles.  Assembly is good to know for some projects, but use bigger/easier building blocks depending on what your interest is.&lt;/p&gt;&#xA;" OwnerUserId="2005" LastActivityDate="2013-09-27T04:37:08.787" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1895" PostTypeId="1" AcceptedAnswerId="1900" CreationDate="2013-09-27T06:27:53.983" Score="1" ViewCount="343" Body="&lt;p&gt;First, I'm a beginner in MCU/Robotic world (been working with ATMega+CVavr, but that's all). so please bear with me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm making a prototype data glove (Like &lt;a href=&quot;http://keyglove.com&quot; rel=&quot;nofollow&quot;&gt;KeyGlove&lt;/a&gt;, but much more simpler), it consist of:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;IMU sensors (MPU 9150 9DOF, all reading is fused with built in DMP) -&gt;&#xA;Reads hand position and orientations&lt;/li&gt;&#xA;&lt;li&gt;Minimum of 2 flex sensors -&gt; Reads Figer flexion&lt;/li&gt;&#xA;&lt;li&gt;MCU (well, Arduino to be specific)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The sensors are plugged in to the Arduino and the reading will be filtered (e.g Low pass, Kalmann) in the Arduino before being transferred over serial to PC. The PC will then translates the data into virtual gripper to move an object (VR)  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Initially I planned to use UNO +  Pansenti’s MPU9150 Library in my code, then I realised the flash memory size left would be so tiny (i.e MPU9150 lib code size is ~29k, Uno has 32k).&#xA;My project is still in very early stage, so a lot things are expected to be changed and added, with so little flash memory left. I can only do so much.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I immediately looking for Mega as replacement (256k flash) but I realised there is also newer Due with faster processor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;They cost effectively the same as for now.&#xA;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My main concern here is the robustness and compatibility when:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Designing  the HW interface to Arduino (making circuits, addding&#xA;shield)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Code development (available library)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Streaming and filtering the sensor readings &lt;strong&gt;(would 32 bit MCus helps, or it's overkill?)&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;I know this question might sound as too localized, but I believe a lot of projects that utilize multiple sensor reading + filtering similarly will also benefits from this discussion&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'll revise the question if it's needed. The main question is probably&#xA;&lt;strong&gt;Would 32 bit MCUs perform &lt;em&gt;significantly&lt;/em&gt; better in multiple sensor reading and signal filtering compared to 8 bit MCUs?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or in my case.. should I go with Mega or Due?&lt;/p&gt;&#xA;" OwnerUserId="1865" LastActivityDate="2013-09-27T22:34:18.560" Title="Arduino for simple Data-Glove. Should I go with Mega or Due?" Tags="&lt;arduino&gt;&lt;imu&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1897" PostTypeId="1" AcceptedAnswerId="1898" CreationDate="2013-09-27T20:06:01.870" Score="1" ViewCount="470" Body="&lt;p&gt;I'm looking to make an automatically shifting bicycle for my senior design project (along with some additional features TBD). However, I come from an electrical/software background; not a mechanical one. So I need to figure out a decent way to shift gears. I was thinking of leaving the gear system in place as is and using some sort of motor (servo or stepper motor with worm gears) to pull and release the wire cable as needed. However, I have some concerns with this; namely the amount of torque needed to pull the wire and finding something with enough holding torque. Perhaps my best option is to use the trigger shifters on as well and perhaps use a solenoid. My other concern (namely with the worm gear) is that it'll be too slow. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I would like to pick your brains here for a moment. Thanks&lt;/p&gt;&#xA;" OwnerUserId="2013" LastActivityDate="2013-09-28T02:14:01.013" Title="Mechanism for changing gears on a bicycle" Tags="&lt;motor&gt;&lt;automatic&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1898" PostTypeId="2" ParentId="1897" CreationDate="2013-09-27T21:16:33.770" Score="2" Body="&lt;p&gt;Depending on your budget, for the mechanical part you could use one of the electronic derailleurs on the market and simply add send it signals from your microcontroller. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of the fancier ones I've seen is the Shimano Di2 Dura Ace 7970 It's not cheap though, it's about &lt;a href=&quot;http://www.performancebike.com/bikes/Product_10052_10551_1147610_-1_400608__400608&quot; rel=&quot;nofollow&quot;&gt;\$2200&lt;/a&gt; for the set or \$500 for the rear derailleur alone, \$690 for the shifters, plus another \$85 for the battery.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're looking for something cheaper, you might want to check out a project from some Carnegie Mellon students. &lt;a href=&quot;http://build18.ece.cmu.edu/wiki/index.php/Automatic_Bicycle_Transmission&quot; rel=&quot;nofollow&quot;&gt;Their wiki&lt;/a&gt; goes into more detail. It looks like they used an Arduino controller, hall effect sensors and four servos to control the shifting based on rider cadence.&lt;/p&gt;&#xA;" OwnerUserId="2014" LastActivityDate="2013-09-27T21:16:33.770" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1899" PostTypeId="1" CreationDate="2013-09-27T22:16:16.680" Score="1" ViewCount="874" Body="&lt;p&gt;I'd like to assemble a prototype of brushless servo system using a RC brushless motor (heavily geared down), a sensored Electronic Speed Controller for RC motors, and a microcontroller to do the PID control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/anmOB.png&quot; alt=&quot;Brushless motor and sensored ESC&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd add three Hall sensors around the motor, and feed those signals into the ESC and the microcontroller. The MCU will run a PID controller, and output an RC servo compatible PWM signal to the ESC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Question: Is this likely to work, or will I find that the ESC is trying to be clever? I have one RC car which only switches into reverse if you double pulse the reverse signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Note, the reason I'm trying to get this working using an off-the-shelf ESC, rather than designing my own proper one is that development time is &lt;em&gt;much&lt;/em&gt; more expensive than parts cost at the moment).&lt;/p&gt;&#xA;" OwnerUserId="40" LastEditorUserId="350" LastEditDate="2013-09-28T18:40:30.630" LastActivityDate="2013-09-28T18:40:30.630" Title="Making a brushless servo using Hall sensors" Tags="&lt;otherservos&gt;&lt;brushless-motor&gt;&lt;esc&gt;" AnswerCount="0" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1900" PostTypeId="2" ParentId="1895" CreationDate="2013-09-27T22:34:18.560" Score="1" Body="&lt;p&gt;The number of bits in the instruction set for the MCU will directly affect the precision of the math operations on that given MCU. If you're going to be doing a lot of 16/32 bit math operations, then yes, a 32 bit MCU will perform significantly better compared to an 8 bit MCU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This article may help you understand the difference: &lt;a href=&quot;http://www.embedded.com/electronics-blogs/industry-comment/4027627/The-8-bit-MCUs-won-t-be-going-away-anytime-soon&quot; rel=&quot;nofollow&quot;&gt;http://www.embedded.com/electronics-blogs/industry-comment/4027627/The-8-bit-MCUs-won-t-be-going-away-anytime-soon&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Due has an 84MHz CPU vs the Mega's 16MHz...this isn't even taking into account that a 32-bit core allows the Due to perform operations on 4 byte wide data within a single CPU clock cycle, whereas the Mega will need a clock cycle for each byte at least.&lt;/p&gt;&#xA;" OwnerUserId="1960" LastActivityDate="2013-09-27T22:34:18.560" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1901" PostTypeId="1" AcceptedAnswerId="1907" CreationDate="2013-09-28T01:43:26.767" Score="2" ViewCount="282" Body="&lt;p&gt;So I'm doing some reading on Monte Carlo Localization, and it sounds like the approach is based on using a predefined map, but I just need to make sure (because I haven't read anywhere that it absolutely needs a predefined map). I just want to make 100% sure that my understanding is correct:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does it absolutely need a predefined map?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[maybe I need to add the below stuff as another question, but here goes nothing]&#xA;And what other localization approaches are there that don't need a predefined map? So far I've only read about SLAM (which sounds to me like a general approach instead of a specific implementation).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance!&lt;/p&gt;&#xA;" OwnerUserId="1887" LastActivityDate="2013-09-28T18:26:41.263" Title="Does Monte Carlo Localization need a predefined map?" Tags="&lt;localization&gt;&lt;slam&gt;&lt;mapping&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1902" PostTypeId="2" ParentId="1897" CreationDate="2013-09-28T02:14:01.013" Score="1" Body="&lt;p&gt;This might be a stupid idea, but wouldn't using a CVT (continuously variable transmission) be easier to control using an electronic system (both from a mechanical and control points of view)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm just not sure how easy it is to build one. I hope this helps! Good luck! :D&lt;/p&gt;&#xA;" OwnerUserId="1887" LastActivityDate="2013-09-28T02:14:01.013" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1903" PostTypeId="1" AcceptedAnswerId="1908" CreationDate="2013-09-28T06:56:12.847" Score="3" ViewCount="222" Body="&lt;p&gt;I'm working on a robot with a team, and we're building our robot out of acetal &lt;a href=&quot;http://en.wikipedia.org/wiki/Polyoxymethylene&quot; rel=&quot;nofollow&quot;&gt;polyoxymethylene (POM)&lt;/a&gt; (specifically, delrin) plastic. However, we'd like to prototype the robot before we build it out of POM, as POM is somewhat expensive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are several critical areas that plywood would be used in place of POM:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Over sliding surfaces&lt;/li&gt;&#xA;&lt;li&gt;Around gearboxes &lt;/li&gt;&#xA;&lt;li&gt;Under weight stress&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;We'd like to take into account the friction coefficients, smoothness, and rigidity of the materials in deciding whether plywood is a valid prototype substitute. The material will be 1/4&quot; thick.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What differentiates plywood from acetal POM with respect to the relevant points?&lt;/p&gt;&#xA;" OwnerDisplayName="user2015" LastEditorUserId="37" LastEditDate="2013-09-30T23:47:56.717" LastActivityDate="2013-09-30T23:47:56.717" Title="Is finished plywood a comparable prototyping substitute for polyoxymethylene?" Tags="&lt;design&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="1904" PostTypeId="1" CreationDate="2013-09-28T11:03:58.123" Score="5" ViewCount="989" Body="&lt;p&gt;I am part of my college robotics team. We are participating in Robocon 2014 and are thinking about using mecanum wheels. We have done our research but one thing id like to clarify is: Does the number of rollers in the mecanum wheel effect its strafing? if yes then how?&lt;/p&gt;&#xA;" OwnerUserId="2016" LastActivityDate="2013-09-28T17:06:17.237" Title="Strafing of Mecanum wheels" Tags="&lt;wheeled-robot&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1905" PostTypeId="2" ParentId="1881" CreationDate="2013-09-28T15:10:48.357" Score="0" Body="&lt;p&gt;It's nice, but for the most part, unnecessary if you're just dealing with robotics. Maybe if you need some high-end optimization, it may be helpful. But most compilers can optimize better than average humans these days anyway. Unless you really know what you're doing and understand the architecture enough to optimize further, I'd say it's not necessary. Plus, different manufactures have their own instruction sets, many of which behave differently on different MCU's. Another thing to cosider is that syntax varies between different MCU's. For instance, AVR MCU's have a different syntax than MIPS architectures and TI DSP's. It all depends on what you're doing.&lt;/p&gt;&#xA;" OwnerUserId="2013" LastActivityDate="2013-09-28T15:10:48.357" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1906" PostTypeId="2" ParentId="1904" CreationDate="2013-09-28T17:06:17.237" Score="4" Body="&lt;p&gt;No, the number of wheels does not affect its strafing. Strafing is affected only by the angle of the rollers relative to the wheels, and you shouldn't need to worry about that for standard mecanums. The reason for this is that as your robot moves (let's assume constant velocity), the wheels spin; as they spin, the same velocity is on a different part of the wheel, which continues to spin freely. No net effect, besides a minor bump, will occur from rolling a wheel forward. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, everything with a limit. The number of rollers will affect the &lt;em&gt;bumpiness&lt;/em&gt; of the movements. The more rollers, the less vibration your frame will undergo. Obviously, for instance, four rollers won't work. However, again, most commercial mecanums have at least enough for decent smoothness. &lt;/p&gt;&#xA;" OwnerDisplayName="user2015" LastActivityDate="2013-09-28T17:06:17.237" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1907" PostTypeId="2" ParentId="1901" CreationDate="2013-09-28T18:26:41.263" Score="4" Body="&lt;p&gt;Yes, as defined in literature, all &lt;em&gt;localization&lt;/em&gt; requires a prior map.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is because the goal of localization is to &lt;em&gt;localize&lt;/em&gt; a robot with respect to some feature. If you don't know where the feature is, you can't know where the robot is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are &lt;em&gt;uncertain&lt;/em&gt; about the features, then you are doing &lt;em&gt;Simultaneous Localization and Mapping&lt;/em&gt; (SLAM).&lt;/p&gt;&#xA;" OwnerUserId="163" LastActivityDate="2013-09-28T18:26:41.263" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1908" PostTypeId="2" ParentId="1903" CreationDate="2013-09-28T23:37:36.670" Score="2" Body="&lt;p&gt;Plywood is available in various grades (A, B, C),  sanded and unsanded, veneer core or MDF core, and with surfaces of various kinds of woods.  I'm not aware of any plywood that will emulate the friction coefficient of &lt;a href=&quot;http://en.wikipedia.org/wiki/Delrin&quot; rel=&quot;nofollow&quot;&gt;Delrin&lt;/a&gt; (polyoxymethylene).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;With some hard, tightly grained, or oily woods (eg ironwood, ebony, teak) or Baltic Birch plywood, it might be possible to polish the wood to a point that its smoothness approaches that of  polyoxymethylene.  Note that those woods might cost more than polyoxymethylene does.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For other woods, it might be possible to use a filler and an epoxy finish to emulate some properties of Delrin, but if your project is about building your robot and not about accurately emulating properties of polyoxymethylene, I don't recommend the approach of experimenting with different finishes on plywood.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead, it may be best to purchase several &lt;a href=&quot;http://en.wikipedia.org/wiki/Polyethylene&quot; rel=&quot;nofollow&quot;&gt;polyethylene&lt;/a&gt; cutting boards and cut them up for use as polyoxymethylene testing standins.  Large cutting boards often are available cheap on Ebay, and small cutting boards can be found at thrift stores.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that polyoxymethylene is significantly stronger, harder, and more wear-resistant than the polyethylene in cutting boards, but polyethylene's properties are so much closer to polyoxymethylene's than plywood's are, that the prototyping fit should be much closer.  For a still-closer fit, you can buy  “drops” (small cutoffs) of  UHMWPE (&lt;a href=&quot;http://en.wikipedia.org/wiki/Ultra-high-molecular-weight_polyethylene&quot; rel=&quot;nofollow&quot;&gt;ultra high molecular weight polyethylene&lt;/a&gt;) that in some applications will work as a Delrin replacement.&lt;/p&gt;&#xA;" OwnerUserId="478" LastActivityDate="2013-09-28T23:37:36.670" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1909" PostTypeId="1" CreationDate="2013-09-29T21:12:03.760" Score="1" ViewCount="59" Body="&lt;p&gt;In earlier versions of the Arduino IDE there was a option to burn a the bootloader using an Arduino as the programmer. As of current there is only a burn bootloader option. Was the burn using a Arduino as a isp integrated into the still existing one, or did it disappear?&lt;/p&gt;&#xA;" OwnerUserId="1667" LastActivityDate="2013-09-29T21:12:03.760" Title="Arduino isp bootloader burning" Tags="&lt;arduino&gt;" AnswerCount="0" CommentCount="1" ClosedDate="2013-09-29T22:48:14.667" ContentLicense="CC BY-SA 3.0" />
  <row Id="1910" PostTypeId="1" CreationDate="2013-09-29T22:05:57.563" Score="3" ViewCount="140" Body="&lt;p&gt;Would like a product that enables me to use my computer to throw an small DC ON / OFF switch. Seems like a stupidly simple thing to do, but for the life of me I can't seem to find such a device when I search online.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a device floating around out there that I can order? Or is there some kind of term I should be searching for?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks so much!&lt;/p&gt;&#xA;" OwnerUserId="1857" LastActivityDate="2013-09-30T06:15:15.170" Title="Use computer to throw a small switch" Tags="&lt;control&gt;" AnswerCount="1" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="1911" PostTypeId="1" AcceptedAnswerId="1917" CreationDate="2013-09-30T03:23:16.163" Score="1" ViewCount="547" Body="&lt;p&gt;I just got my rover 5 chassis with 4 motors and 4 &lt;a href=&quot;http://en.wikipedia.org/wiki/Rotary_encoder#Incremental_rotary_encoder&quot; rel=&quot;nofollow&quot;&gt;quadrature encoders&lt;/a&gt; and I am trying to utilize the optical encoders. I know the encoders generate pulse signals which can be used to measure speed and direction of the motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to know how 4 separate optical encoders add value for the controller of rover 5 like platform. The controller normally uses PWM to control the speed of the motor. If two motors are running at same speed then the encoder output will be same. So, why should the controller monitor all 4 encoders?&lt;/p&gt;&#xA;" OwnerUserId="1144" LastEditorUserId="37" LastEditDate="2013-09-30T23:55:27.920" LastActivityDate="2013-09-30T23:55:27.920" Title="How are the optical encoders used in platforms like Rover 5?" Tags="&lt;mobile-robot&gt;&lt;motor&gt;&lt;control&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1912" PostTypeId="2" ParentId="1910" CreationDate="2013-09-30T06:15:15.170" Score="2" Body="&lt;p&gt;There are two easy ways:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Use a relay&lt;/li&gt;&#xA;&lt;li&gt;Use a transistor&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In both cases, you can use the processor as the switch input...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/khRpY.png&quot; alt=&quot;Example MOSFET switch&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="134" LastActivityDate="2013-09-30T06:15:15.170" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="1913" PostTypeId="2" ParentId="1911" CreationDate="2013-09-30T12:49:24.887" Score="0" Body="&lt;p&gt;There are two use cases i can think of, which benefits of individual motor feedback. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;If you are moving in strait line, you need to have both sides synced. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You can have motor that will degrade over the time and will not stay in sync with the other one at the same side (in case you control them by only one encoder), which will fail rolling the caterpillar band.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="973" LastActivityDate="2013-09-30T12:49:24.887" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1914" PostTypeId="2" ParentId="1911" CreationDate="2013-09-30T12:56:42.810" Score="0" Body="&lt;p&gt;If you are running the Rover 5 in a tracked configuration then, as you rightly point out, the two wheels on each side should rotate at equal speeds meaning that half of the sensors are redundant.&#xA;If you swap the tracks out for the mecanum wheels then the four encoders have more of a benefit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It probably also makes sense from a manufacturing point of view to keep all the motor/encoder units the same. The increased cost of manufacture may be offset by the reduced complexity.&lt;/p&gt;&#xA;" OwnerUserId="1978" LastActivityDate="2013-09-30T12:56:42.810" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1917" PostTypeId="2" ParentId="1911" CreationDate="2013-09-30T22:37:27.103" Score="2" Body="&lt;p&gt;No two motors will ever turn with the same angular velocity given the same voltage. If you power each of your Rover 5 motors with 12V (I don't know what they're rated for), you'll see that each motor will spin at slightly different speeds. If you want to guarantee you're traveling in a straight line, you need to implement velocity control on both wheels. One method of doing this is implementing a PID controller on the drive wheels to ensure their velocity is the same, based on encoder ticks per unit time. Otherwise (let's assume you have two wheels that are driving the vehicle) one wheel will turn faster than the other, and you'll slowly drift in one direction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, you may want to turn a vehicle with no steering control! That means you want to turn your drive wheels at different velocities (albeit this will cause your wheels to slip horizontally and thus cause you to lose some traction/power), and so you need two different encoders that will be the input to two different velocity controllers. For a tank like system, if the front left wheel encoder is ticking and the rear left wheel encoder is NOT ticking, then maybe your tread has fallen off! It's really very useful to create a robust system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: Man I keep editing and adding more stuff...having multiple encoders will also allow you to identify failures. If you see that one wheel has stopped moving, it could be stuck on something and/or broken! This could allow you to halt the system and tell the operator that a mechanical failure has occurred with, for example, the front left wheel. This can only be done if you have more than one encoder.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a side note, it's always good to have a redundant system in case one breaks!&lt;/p&gt;&#xA;" OwnerUserId="1960" LastEditorUserId="1960" LastEditDate="2013-09-30T22:43:41.037" LastActivityDate="2013-09-30T22:43:41.037" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1918" PostTypeId="1" AcceptedAnswerId="1932" CreationDate="2013-10-01T14:28:08.767" Score="0" ViewCount="761" Body="&lt;p&gt;I've been having trouble installing MORSE.&#xA;I am trying to install it on Ubuntu 12.04 and on a VirtualBox with Ubuntu 13.04 (I don't need it on a VirtualBox, I'm just trying to make &lt;em&gt;something&lt;/em&gt; work). &#xA;On Ubuntu 12.04 I get the following errors at the cmake stage:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ cmake -DCMAKE_INSTALL_PREFIX=/home/oferb/opt/morse_build ..&#xA;-- will install python files in /home/oferb/opt/morse_build/lib/python3/dist-packages&#xA;CMake Error: The following variables are used in this project, but they are set to NOTFOUND.&#xA;Please set them or make sure they are set and tested correctly in the CMake files:&#xA;PYTHON_INCLUDE_DIR (ADVANCED)&#xA;   used as include directory in directory /home/oferb/mnt/svr_home/opt/morse&#xA;   used as include directory in directory /home/oferb/mnt/svr_home/opt/morse/src&#xA;   used as include directory in directory /home/oferb/mnt/svr_home/opt/morse/src/morse&#xA;   used as include directory in directory /home/oferb/mnt/svr_home/opt/morse/src/morse/builder&#xA;   used as include directory in directory /home/oferb/mnt/svr_home/opt/morse/src/morse/modifiers&#xA;   used as include directory in directory /home/oferb/mnt/svr_home/opt/morse/src/morse/sensors&#xA;   used as include directory in directory /home/oferb/mnt/svr_home/opt/morse/src/morse/multinode&#xA;   used as include directory in directory /home/oferb/mnt/svr_home/opt/morse/src/morse/middleware&#xA;   used as include directory in directory /home/oferb/mnt/svr_home/opt/morse/bindings&#xA;   used as include directory in directory /home/oferb/mnt/svr_home/opt/morse/testing&#xA;   used as include directory in directory /home/oferb/mnt/svr_home/opt/morse/testing/base&#xA;   used as include directory in directory /home/oferb/mnt/svr_home/opt/morse/testing/failures&#xA;   used as include directory in directory /home/oferb/mnt/svr_home/opt/morse/testing/robots/human&#xA;   used as include directory in directory /home/oferb/mnt/svr_home/opt/morse/testing/robots/segway&#xA;   used as include directory in directory /home/oferb/mnt/svr_home/opt/morse/testing/robots/pr2&#xA;   used as include directory in directory /home/oferb/mnt/svr_home/opt/morse/testing/robots/pionner3dx&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;On a fresh VMBox with Ubuntu 13.04, after 'morse check' succeeds, I try &quot;morse create mysim&quot; and get:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;adminuser@adminuser-VirtualBox:~$ morse create mysim&#xA;usage: morse [-h] [-b BASE] [--name NAME] [-c] [--reverse-color] [-g GEOM]&#xA;         [-v]&#xA;         {check,edit,run} [scene] ...&#xA;morse: error: argument mode: invalid choice: 'create' (choose from 'check', 'edit', 'run')&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Any suggestions?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;UPDATE:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've managed to install MORSE on Ubuntu 12.04. Make sure your Blender was compiled with the same version of python (i.e python 3.2.2) that MORSE was compiled in. I used this Blender: &#xA;&lt;a href=&quot;http://download.blender.org/release/Blender2.62&quot; rel=&quot;nofollow&quot;&gt;http://download.blender.org/release/Blender2.62&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="1940" LastEditorUserId="1940" LastEditDate="2013-10-07T12:35:31.570" LastActivityDate="2013-10-08T08:10:03.647" Title="Installing MORSE simulator on Ubuntu 12.04" Tags="&lt;simulator&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="1919" PostTypeId="1" AcceptedAnswerId="1922" CreationDate="2013-10-01T21:49:15.783" Score="4" ViewCount="3881" Body="&lt;p&gt;I need to actuate 3 or 4 Cnc-like Nema 23 (~1N.m torque) stepper motors, I would like some cable solution to connect easily the motor to the motor driver. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have not yet bought anything, I have searched various robotic stores and ebay, but did not yet found a triple (motor, cables, driver) which would be &quot;plug and play&quot;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As stepper motors usually have 4 to 6 cables, and there are multiple motors, manual soldering everything would be too time consuming, error prone and messy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a standard way to deal with cables for stepper motors ?&lt;/p&gt;&#xA;" OwnerUserId="2033" LastEditorUserId="187" LastEditDate="2013-10-06T15:11:51.517" LastActivityDate="2013-11-10T01:47:43.657" Title="How can we manage stepper motor cables?" Tags="&lt;stepper-motor&gt;&lt;wiring&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1920" PostTypeId="2" ParentId="1919" CreationDate="2013-10-02T00:20:14.670" Score="2" Body="&lt;p&gt;Stepper motors usually have 4 to 6 &lt;em&gt;wires&lt;/em&gt;, often bundled up into one &lt;em&gt;cable&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There might be some pro industrial solution out there that's 100% plug and play, but I would consider myself lucky if I found connectorized motors and drivers for which I could make up cables.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Making up cables is not rocket science.  Find the matching connectors for the motors and drivers (this is much less trivial than you would either think or like), make up your cables (by soldering, most likely -- someone has to do it), and have fun.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Be sure to make the cables long enough.  I'm always too stingy the first time around and have everything stretched way too much.&lt;/p&gt;&#xA;" OwnerUserId="1411" LastActivityDate="2013-10-02T00:20:14.670" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1921" PostTypeId="2" ParentId="1864" CreationDate="2013-10-02T10:11:56.170" Score="3" Body="&lt;p&gt;by searching for a different topic I found your post and I work with the Sparkfun Razor 9DOF IMU too. Actually it was a pain in the ass to get it all work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First of all you have to do the tutorial &lt;a href=&quot;https://github.com/ptrbrtz/razor-9dof-ahrs/wiki/Tutorial&quot; rel=&quot;nofollow&quot;&gt;razor-9dof-ahrs&lt;/a&gt; form ptrbrtz. When this is working you can do the next steps. Btw.: read it carefully and you should be able to do it on your own!!!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First I tried to get it work with an Arduino Uno and a SoftwareSerial. Sadly I wasn’t able to get it work with a SoftwareSerial, I received with Text and Binary output only rubbish data. I worked a whole day on this topic and I wasn’t able to do it and I could say I have a lot experience with Arduino programming. If you are able to get it work with a SoftwareSerial please post an answear.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the Uno I was only able to receive data with this configuration: &lt;a href=&quot;http://blog.mobileapes.com/2010/09/read-data-from-9dof-razor-imu-via.html&quot; rel=&quot;nofollow&quot;&gt;http://blog.mobileapes.com/2010/09/read-data-from-9dof-razor-imu-via.html&lt;/a&gt;&#xA;But be aware the TX should go to RX and the RX to TX!!! The description in the picture (Rx to Rx and Tx to Tx) is false.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are able to use an Arduino MEGA, which has at least 4 UARTs, you could use the code I developed. Once I get it work on an Uno but I searched for the Code and I didn’t found it anymore, with a little try and fail you should be able to do it. But be aware, if you are sending data to the PC and receiving data from to IMU on only one UART, you could probably negatively influence the serial communication.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/**************************** INFO ********************************/&#xA;&#xA;// This code expects a message in the format: H 12.00,-345.00,678.00&#xA;&#xA;/******************************************************************/&#xA;&#xA;#include &amp;lt;TextFinder.h&amp;gt;&#xA;&#xA;/*** Defines the frequency at which the data is requested ***/&#xA;/*** frequency f=1/T, T=period; ie. 100ms --&amp;gt; f=10Hz, 200ms --&amp;gt; f=5Hz ***/&#xA;#define PERIOD      100 // [ms]&#xA;&#xA;/*** Vars for IMU ***/&#xA;TextFinder  finder(Serial3);  &#xA;const int NUMBER_OF_FIELDS = 3; // how many comma seperated fields we expect                                           &#xA;float rpy[NUMBER_OF_FIELDS];    // array holding values for all the fields&#xA;&#xA;/************************************************************/&#xA;/*** Setup&#xA;/************************************************************/&#xA;void setup()&#xA;{&#xA;  Serial.begin(57600);  // init the Serial port to print the data to PC&#xA;  Serial3.begin(57600); // init the Serial3 port to get data from the IMU&#xA;&#xA;  delay(500);&#xA;&#xA;  initIMU();&#xA;}&#xA;&#xA;/************************************************************/&#xA;/*** Loop&#xA;/************************************************************/&#xA;void loop()&#xA;{&#xA;  // print manager timer&#xA;  static unsigned long timer = 0;&#xA;  static unsigned long currentTime = 0;&#xA;&#xA;  /************************************************************/&#xA;  /*** Request after a specific period for the data&#xA;  /************************************************************/&#xA;  currentTime = millis();&#xA;  if(currentTime - timer &amp;gt;= PERIOD)&#xA;  {&#xA;    // Request one output frame from the IMU&#xA;    // #f only requests one reply, replies are still bound to the internal 20ms (50Hz) time raster.&#xA;    // So worst case delay that #f can add is 19.99ms.&#xA;    Serial3.write(&quot;#f&quot;);&#xA;&#xA;    /************************************************************/&#xA;    /*** Get the IMU values&#xA;    /************************************************************/&#xA;&#xA;    // the current field being received&#xA;    int fieldIndex = 0;            &#xA;&#xA;    // search the Serial Buffer as long as the header character is found&#xA;    boolean found_HeaderChar = finder.find(&quot;H&quot;);&#xA;&#xA;    if (found_HeaderChar)&#xA;    {&#xA;      // Get all 3 values (yaw, pitch, roll) from the Serial Buffer&#xA;      while(fieldIndex &amp;lt; NUMBER_OF_FIELDS)&#xA;      {&#xA;        rpy[fieldIndex++] = finder.getFloat();&#xA;      }&#xA;    }&#xA;&#xA;    /************************************************************/&#xA;    /*** Print out the values&#xA;    /*** Format: yaw, pitch, roll, left_Encoder, right_Encoder&#xA;    /************************************************************/&#xA;    if (found_HeaderChar)&#xA;    {&#xA;      // print Interval&#xA;      Serial.print(currentTime - timer);&#xA;      Serial.print(&quot;,&quot;);&#xA;&#xA;      // print IMU values&#xA;      for(fieldIndex=0; fieldIndex &amp;lt; NUMBER_OF_FIELDS; fieldIndex++)&#xA;      {&#xA;        Serial.print(rpy[fieldIndex]);&#xA;        Serial.print(&quot;,&quot;);&#xA;      }&#xA;      Serial.println(&quot;&quot;);&#xA;    }&#xA;&#xA;    timer = millis();&#xA;  }&#xA;}&#xA;&#xA;/********************************/&#xA;/*** Initialize Functions&#xA;/********************************/&#xA;&#xA;void initIMU()&#xA;{&#xA;  // Output angles in TEXT format &amp;amp; Turn off continuous streaming output &amp;amp; Disable error message output&#xA;  Serial3.write(&quot;#ot#o0#oe0&quot;);&#xA;  Serial3.flush();&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Edit: Oh I forgot to say that you must edit the Output.ino from the Razor AHRS Firmware. search for the function &quot;output_angles()&quot; and change it to:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;// Output angles: yaw, pitch, roll&#xA;void output_angles()&#xA;{&#xA;  if (output_format == OUTPUT__FORMAT_BINARY)&#xA;  {&#xA;    float ypr[3];  &#xA;    ypr[0] = TO_DEG(yaw);&#xA;    ypr[1] = TO_DEG(pitch);&#xA;    ypr[2] = TO_DEG(roll);&#xA;&#xA;    Serial.write((byte*) ypr, 12);  // No new-line&#xA;  }&#xA;  else if (output_format == OUTPUT__FORMAT_TEXT)&#xA;  {&#xA;    Serial.print(&quot;H &quot;);&#xA;    Serial.print(TO_DEG(yaw)); Serial.print(&quot;,&quot;);&#xA;    Serial.print(TO_DEG(pitch)); Serial.print(&quot;,&quot;);&#xA;    Serial.print(TO_DEG(roll)); Serial.println();&#xA;  }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="2035" LastEditorUserId="2035" LastEditDate="2013-10-02T12:59:05.517" LastActivityDate="2013-10-02T12:59:05.517" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1922" PostTypeId="2" ParentId="1919" CreationDate="2013-10-02T20:00:31.350" Score="3" Body="&lt;p&gt;Don't worry about the cables; plan to make them yourself.  I recommend using one of the wide variety of crimp-on connectors available to you, depending on what you can find for your ESC and steppers connections.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are a handful of connectors representing part of what we stock in our lab:&#xA;&lt;img src=&quot;https://i.stack.imgur.com/EvFlc.jpg&quot; alt=&quot;Molex minifit and microfit&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The white connector is the Molex Minifit, the black one to its right is the Molex Microfit, and the 1/8&quot; miniplug is for scale.  Using these connectors can involve either soldering them to a board, or using a crimp tool and crimp-on terminations which are then snapped into the plug body.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This allows the cables to be run much more precisely than they would be if you just made solder connections in the middle of the cable length.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2013-10-02T20:00:31.350" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1923" PostTypeId="2" ParentId="150" CreationDate="2013-10-04T07:47:02.593" Score="2" Body="&lt;p&gt;I have come across all the suggestions in the other posts. I don't understand why people are suggesting complex and expensive solutions which are also not feasible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A &lt;strong&gt;mechanical seal&lt;/strong&gt; is the simplest answer for sealing the motor or making it of IP 68. We can use this motor to a depth of 20 m in sea water. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The construction is like a WET pit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Such types of motor are used in sewage submersible pumps which work to the depth of 20 m in water.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The cost of such a seal is also very low.&lt;/p&gt;&#xA;" OwnerUserId="2044" LastEditorUserId="131" LastEditDate="2013-10-06T16:24:37.993" LastActivityDate="2013-10-06T16:24:37.993" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1924" PostTypeId="1" CreationDate="2013-10-05T00:19:15.813" Score="1" ViewCount="102" Body="&lt;p&gt;I am in the FLL (First Lego League), and while we are waiting for the competitions, we want to work on a robot. Anyone have any ideas?&lt;/p&gt;&#xA;" OwnerUserId="2047" LastActivityDate="2013-10-05T06:23:44.090" Title="Any ideas for a robot?" Tags="&lt;sensors&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ClosedDate="2013-10-05T07:29:50.677" ContentLicense="CC BY-SA 3.0" />
  <row Id="1925" PostTypeId="1" AcceptedAnswerId="1929" CreationDate="2013-10-05T00:39:23.150" Score="3" ViewCount="283" Body="&lt;p&gt;I could use some guidance regarding a coordinate system transform problem. My situation is this: my system begins at some unknown location, which I initialize the location (x y) and orientation (roll, pitch, and yaw) all to zero. I establish a frame of reference at this point, which I call the &quot;local&quot; coordinate frame. It is fixed in the world and does not move. At system startup, the body frame is perfectly aligned with the local frame, where body +x points forward, +y to the right and +z down. The body frame is fixed to my system, and travels with the system as it moves.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have an estimation routine that provides me with the x and y position, as well as the roll, pitch, and yaw of the system. Yaw is rotation about the z axis of the local frame. Pitch and roll are with respect to the body frame (I.e.,if the robot pitches up, I always get a positive value. If it rolls right, I get a positive value.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I take the known roll and pitch values and transform them to be with respect to the local (fixed) frame?&lt;/p&gt;&#xA;" OwnerUserId="2048" LastActivityDate="2013-10-07T14:52:39.570" Title="Performing the proper coordinate system transformation" Tags="&lt;mobile-robot&gt;&lt;kinematics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1926" PostTypeId="2" ParentId="1924" CreationDate="2013-10-05T06:23:44.090" Score="2" Body="&lt;p&gt;I have worked as a robot design judge at my local qualifiers and regional events for 3 years now. There are several major areas where successful teams tend to excel. Following are a few in no particular order:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Sensors: Learning to use sensors is simultaneously the hardest and best thing you can do to improve performance. Using sensors well can increase reliability and repeatability when performing tasks. In other words it can improve the performance of the robot by making it more accurate. Start with something simple like learning how to use bump sensors. Then try something a little more complicated like learning how to use color sensors considering how their output changes given different lighting conditions. If you are really up for a challenge then you can learn how to do &lt;a href=&quot;http://www.nxtprograms.com/line_follower/index.html&quot; rel=&quot;nofollow&quot;&gt;line following&lt;/a&gt;. The most successful teams I have seen make line following a core component.&lt;/li&gt;&#xA;&lt;li&gt;Programming: Many tasks require the same functionality. For instance, you can use line following to get from home base to the various challenges. You can either put this functionality into each of your programs directly or you can use &lt;em&gt;&lt;a href=&quot;http://www.nxtprograms.com/help/MyBlocks/tutorial.html&quot; rel=&quot;nofollow&quot;&gt;My Blocks&lt;/a&gt;&lt;/em&gt; to build the functionality once and use it over and over in your programs. Doing so has the added benefit of making your code more reliable because once it has been written and tested you know it works. It has the added benefit of making your programs smaller allowing you to fit more programs. This can be great for testing. But be careful, too many programs can make switching programs during a challenge time consuming.&lt;/li&gt;&#xA;&lt;li&gt;Attachments: Changing attachments during the competition is a major time sink. Learning to design attachments that can be used to perform multiple tasks saves time and helps score many points. Try making different types of attachments and focus on learning how to make them rigid and strong.&lt;/li&gt;&#xA;&lt;li&gt;Stability: Tipping over during a challenge can cost you points as a result of touching the robot while it's away from home base. Practice building chassis that avoiding tipping when the robot turns and interacts with objects in the environment.&lt;/li&gt;&#xA;&lt;li&gt;Team: FLL emphasizes team building for a reason. A good team can divide the numerous tasks necessary to be successful and can help each other when challenges arise. Learn how to communicate with your team members especially when you disagree. This will show through when you are in the various judging rooms which can earn you a prize in-and-of-itself.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="177" LastActivityDate="2013-10-05T06:23:44.090" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1927" PostTypeId="1" CreationDate="2013-10-05T14:56:03.603" Score="3" ViewCount="969" Body="&lt;p&gt;I found many tutorials and online calculators for the selection of dc motor to drive wheel, I understood how the torque affect the driving of wheel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But what happen when I change the orientation of motor and load? What is the main criteria for a dc motor to work when I want to rotate a plate which is vertically mounted on motor's shaft, when the motor is placed vertically also (as shown in the picture)?&#xA;&lt;img src=&quot;https://i.stack.imgur.com/aSlKL.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not an engineering student so please provide me an answer as simple as possible.&lt;/p&gt;&#xA;" OwnerUserId="2049" LastEditorUserId="2447" LastEditDate="2014-01-14T19:51:41.910" LastActivityDate="2014-09-14T05:53:51.590" Title="DC motor direct loading" Tags="&lt;motor&gt;&lt;torque&gt;" AnswerCount="3" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="1929" PostTypeId="2" ParentId="1925" CreationDate="2013-10-07T00:04:46.260" Score="1" Body="&lt;p&gt;I introduced a different frame of reference, which I called $\mathbf{R}_p$, or position of the robot on the ground plane, instead of the &quot;body&quot; frame that I asked about.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\mathbf{R}_p$ moves with the robot, but only in yaw and X and Y position. The pitch and roll (provided by the estimator) are relative to this frame, so the roll ($\phi$) and pitch ($\theta$) are relative to the frame $\mathbf{R}_p$. To transform a point from $\mathbf{R}_p$, to the local frame $\mathbf{L}$, we just rotate $\psi$, (yaw) about the Z axis of $\mathbf{R}_p$ of e.g.: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\mathbf{T}_R^L = \begin{vmatrix} cos(\psi) &amp;amp; -sin(\psi) &amp;amp; 0 &amp;amp; 0 \\ sin(\psi) &amp;amp; cos(\psi) &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \end{vmatrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;P_L = \mathbf{T}_R^L * \begin{vmatrix} \phi \\ \theta \\ 0 \\ 0 \end{vmatrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This gives me the attitude with respect to the local frame that I established when I initialized my system.&lt;/p&gt;&#xA;" OwnerUserId="2048" LastEditorUserId="2048" LastEditDate="2013-10-07T14:52:39.570" LastActivityDate="2013-10-07T14:52:39.570" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1931" PostTypeId="1" CreationDate="2013-10-08T01:27:47.520" Score="4" ViewCount="2095" Body="&lt;p&gt;I'm trying to learn about a very basic motor, the servo motor.  Can these be found a thrift stores like Goodwill in old toys?  Are these &quot;robotic&quot; quality?  What toys or other kinds of things would I scavenge?  All I want to do is get a motor.  After that I want an Arduino and make it &quot;work.&quot;  Nothing complex.&lt;/p&gt;&#xA;" OwnerUserId="2058" LastEditorUserId="350" LastEditDate="2013-10-09T17:24:22.690" LastActivityDate="2013-10-12T11:01:30.320" Title="Is a thrift store a good place to get a servo motor?" Tags="&lt;servomotor&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1932" PostTypeId="2" ParentId="1918" CreationDate="2013-10-08T08:10:03.647" Score="1" Body="&lt;p&gt;&lt;strong&gt;Tips for MORSE on Ubuntu 12.04&lt;/strong&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're having trouble compiling MORSE, perhaps these can help:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Install python3-dev or python-dev or both (not sure which was needed)&lt;/li&gt;&#xA;&lt;li&gt;Check which version python3 directs to. If it's the wrong one, you can specify the python version explicitly in cmake. The cmake I used is: &quot;cmake -DCMAKE_INSTALL_PREFIX=/home/oferb/opt/morse -DPYTHON_EXECUTABLE=/usr/local/bin/python3.3 ..&quot;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;If you've already managed to compile MORSE, then make sure your Blender was compiled with the same version of python (i.e python 3.2.2) that MORSE was compiled in. I used this Blender: &lt;a href=&quot;http://download.blender.org/release/Blender2.62&quot; rel=&quot;nofollow&quot;&gt;http://download.blender.org/release/Blender2.62&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Tips for MORSE on Ubuntu 13.04&lt;/strong&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that &quot;sudo apt-get install morse-simulator&quot; gives you morse 1.0, but according to morse support, &quot;morse create&quot;, which shows up in the tutorials, is something new in morse-1.1. You might want to search for an older tutorial, or install a more recent version of MORSE.&lt;/p&gt;&#xA;" OwnerUserId="1940" LastActivityDate="2013-10-08T08:10:03.647" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1933" PostTypeId="2" ParentId="1931" CreationDate="2013-10-08T12:38:45.047" Score="2" Body="&lt;p&gt;While some people scavenge even for cheap parts, I do not do that, simply because it will cost you more than just ordering the exact thing you need and knowing it is working. Don't forget that you probably have some specific requirements, i.e. the servo must be of some size, have some torque and so on...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Majority of toys (if not all of them) you will find at Goodwill will have just a basic DC motor with minimal feedback and won't probably as a 3-pin plug&amp;amp;play servo. These are not even required to be the same in identical toys, simply because manufacturer will use the one that is cheaper. This means the properties of the motors may be different and to tune your control loop to get two motors running at the same speed will cost you the same as just buying a working part with known characteristics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: Since it seems like you are contradicting yourself in the question I would like to make it clear that a servo motor is not the easiest to use, since besides power it also needs a signal that determines where it will turn. A typical servo motor you will find looks something like &lt;a href=&quot;https://lh3.ggpht.com/-d377i5B68IU/Tgha_la8CWI/AAAAAAAAACY/_b0CCHvi3i0/s1600/servo.gif&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, the easiest motor to use is just a plain DC motor. They look something like &lt;a href=&quot;http://images.wisegeek.com/dc-motor.jpg&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt;, although there are many models of them that may even look different. To turn this motor you just need to supply power to it. The polarity of the wires determines the direction in which it will turn and the voltage determines the speed.&lt;/p&gt;&#xA;" OwnerUserId="890" LastEditorUserId="890" LastEditDate="2013-10-09T18:25:41.973" LastActivityDate="2013-10-09T18:25:41.973" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="1934" PostTypeId="1" CreationDate="2013-10-08T14:18:53.537" Score="6" ViewCount="242" Body="&lt;p&gt;If I was controlling a normal brushed motor as a servo, I would measure the motor's position, and adjust the PWM signal to control the voltage. This way I could achieve a precise velocity/position profile if my control was good enough.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;pwm_duty = CalcPID(motor_position - target_position);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;When doing Field Oriented Control (FOC) of a brushless motor, there are two parameters I can control: The voltage angle, and the voltage magnitude. There are three things I can measure, the current angle and magnitude, and the rotor position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to achieve a precise velocity/position profile including good control down to zero speed and reverse.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Question: how can I calculate the correct voltage field angle (or phase lead) and magnitude?  Do I need two PID algorithms?&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;phase_lead  = CalcPID_1( ... );&#xA;voltage_mag = CalcPID_2( ... );&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Assume I can take any reasonable measurements of the motor state, including rotor position and winding current.&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2013-10-10T20:07:49.967" Title="Field oriented control of brushless motors" Tags="&lt;otherservos&gt;&lt;pid&gt;&lt;brushless-motor&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1935" PostTypeId="1" CreationDate="2013-10-08T15:18:31.727" Score="7" ViewCount="2162" Body="&lt;p&gt;I live in an apartment that has sliding windows in it. The apartment is naturally warm because we live above a mechanical room, such that we either opened the windows or ran the air conditioning through the winter. I want to create a device than can open and close the windows in the apartment depending on temperature. The software and electronics are already figured out, I just need to figure out how to move the windows.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/ffas3.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a sample of the window. It takes about 4 lbs of force to pull it open, and they only open 6 inches(since I'm 16 stories high).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ultimately, I want to make this cheap enough that I could replicate it on 6 windows.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My first thought was a linear actuator, but most of the ones I have seen are designed for moving 100+lbs and cost several hundred dollars. Pneumatic actuators are cheaper, but I'd have to run a network of air lines and solenoids, and would have a compressor that would randomly kick in. A double winch system would be very complicated to set up and prone to failure. Lastly, I was thinking of a cheap metal gear servo(dealextreme has 15kg/cm servos for under $15.00), but it would be somewhat difficult to use a series of turnbuckles and arms to translate into 6 inches of linear movement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help would be appreciated.&lt;/p&gt;&#xA;" OwnerUserId="2065" LastActivityDate="2013-11-03T14:04:53.690" Title="How to open a sliding window?" Tags="&lt;design&gt;&lt;actuator&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1938" PostTypeId="2" ParentId="1934" CreationDate="2013-10-09T20:56:39.617" Score="3" Body="&lt;p&gt;I believe the most efficient thing to do is to maintain a 90 degree phase lead, and adjust your voltage magnitude for control.  You'll probably want to have an inner current loop, wrapped by the actual position loop.&lt;/p&gt;&#xA;" OwnerUserId="1411" LastEditorUserId="37" LastEditDate="2013-10-10T20:07:49.967" LastActivityDate="2013-10-10T20:07:49.967" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1939" PostTypeId="2" ParentId="1935" CreationDate="2013-10-09T22:37:59.277" Score="7" Body="&lt;p&gt;As others have said in comments, a screw is probably your best bet. It's mechanically pretty simple to set up, and could be made to look fairly tidy, which is always nice in a home.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the main problem, as always is going to be doing this on the cheap. The cost of the parts soon adds up. Even if your motors are only $15, you still need to buy the lead screw and nuts. These can be shockingly expensive if you buy nice ones for CNC machines, but you can probably get away with a simple length of threaded rod attached to a motor mounted on the wall, and a nut attached to the window. Since this thing isn't going to be moving very often, it should last a reasonably long time. And when the components wear out, they'll be cheap to replace.&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2013-10-09T22:37:59.277" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1940" PostTypeId="2" ParentId="1765" CreationDate="2013-10-10T16:42:19.353" Score="3" Body="&lt;p&gt;I work on  race cars which occasionally race in built up areas such as street circuits. &#xA;As part of the mandatory electronic systems we fit a GPS antenna to the car to allow vehicle tracking.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some of the guidance we have for the installation is &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Fit the antenna to the upper surface of the car &lt;/li&gt;&#xA;&lt;li&gt;Keep the antenna within 5 degrees of horizontal&lt;/li&gt;&#xA;&lt;li&gt;Do not place metal objects above the antenna&lt;/li&gt;&#xA;&lt;li&gt;Guarantee the direct visibility of the sky from the antenna, with a minimum of 170º cone unimpeded&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So I would have expected that mounting a GPS antenna on a towbar where, potentially, half of the visibility would be obstructed by the metal structures at the rear of the vehicle would not be a good idea and would almost certainly be worse than fitting it to the roof&lt;/p&gt;&#xA;" OwnerUserId="1978" LastActivityDate="2013-10-10T16:42:19.353" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1942" PostTypeId="2" ParentId="1931" CreationDate="2013-10-10T23:29:23.830" Score="2" Body="&lt;p&gt;A servo is not a basic motor - it's a motor plus some means to control its position. If you want DC motors. A small servo costs around £1.75/$2 new for 1-10 quantities.  Servos have three wires going to them - ground, power, and a pulse width modulation signal to control them, which is fairly easy to generate with a microcontroller. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Plain DC motors are electrically simpler - you provide power as DC and they move one way or another depending on polarity - but require more driving electronics as a microcontroller cannot provide enough current. So you would need either an H-bridge to drive it both ways, or a power transistor to drive it one direction only. A small low-quality DC motor costs about a pound, a higher quality motor (such as you'd get in a model railway locomotive) ten or a few tens of pounds. An H-bridge to drive it, such as L298 costs a couple of pounds, so if you want bidirectional drive it's probably worth buying a better motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The prices above are for hobby kit; industrial robotics motors are typically ten times more expensive, so if you mean industrial by 'robotic quality' then it's unlikely you'll find something in a second hand store.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Buying scrap equipment and salvaging the motors from goodwill is unlikely to give you better quality or consistency than buying cheap motors new. You may get lucky and be able to buy a toy with a few hobby quality servos in it for less than $$2 per servo, or you may have a project in mind which needs a higher power motor and so buy something like a sewing machine for less than the cost of an equivalent motor (~$20), but unless you're lucky it's probably not worth the candle. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So be lucky!&lt;/p&gt;&#xA;" OwnerUserId="1321" LastActivityDate="2013-10-10T23:29:23.830" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1943" PostTypeId="2" ParentId="1931" CreationDate="2013-10-12T11:01:30.320" Score="2" Body="&lt;p&gt;Not servos explicitly, but I've obtained low end nema 17 stepper motors on occasion from electronic typewriters at goodwill. The typewriters I've seen there usually have 1 such motor in them (in addition to some other neat pin mount components) and fetch for $1 each. In my case the only other source for parts is radio shack and online outlets, so for me it's a viable option if I don't want sit around waiting for orders. This is however not a reliable method at all, especially if you want parts in large numbers or with certain specifications.&lt;/p&gt;&#xA;" OwnerUserId="1845" LastActivityDate="2013-10-12T11:01:30.320" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1944" PostTypeId="1" AcceptedAnswerId="1945" CreationDate="2013-10-12T19:30:42.633" Score="1" ViewCount="1358" Body="&lt;p&gt;Has anybody experimented with &lt;a href=&quot;http://en.wikipedia.org/wiki/Gas_metal_arc_welding&quot; rel=&quot;nofollow&quot;&gt;GMAW&lt;/a&gt; for additive manufacturing? The thing is, welding wire is so much cheaper than ABS or PLA filaments and, well, it is steel you are printing in, not some flimsy plastic! I imagine the arc deposition printhead would be constructed similarly to one used in plastic filament printers, except there is no need for the heating element (so, even simpler). Welding often requires fast Z speed (to finely control the arc) so i think Delta (&lt;a href=&quot;http://www.wired.com/design/2013/02/deltamaker-3d-printer/&quot; rel=&quot;nofollow&quot;&gt;DeltaMaker&lt;/a&gt;) chassis would work best. GMAW calls for some sort of inert gas to insulate heated metal from oxygen. It would make sense to seal off most of the interior of the printer and fill it with heavier than air inert gas during printing. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would highly appreciate any pointers on existing 3d printer designs employing this deposition method as well as flaws in design i outlined here.&lt;/p&gt;&#xA;" OwnerUserId="1870" LastActivityDate="2017-03-07T10:45:04.153" Title="Arc welder for 3d printing" Tags="&lt;3d-printing&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1945" PostTypeId="2" ParentId="1944" CreationDate="2013-10-13T13:10:53.077" Score="2" Body="&lt;p&gt;I believe this is in very active development.  Here's an article with a few videos on that subject:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.extremetech.com/extreme/143552-3d-printing-with-metal-the-final-frontier-of-additive-manufacturing&quot; rel=&quot;nofollow&quot;&gt;3D printing with metal: The final frontier of additive manufacturing&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The real breakthrough that has enabled 3D printing for the masses has been the laser. Spray welding is a technique that has been used for decades to build up worn motor shafts, but it is far too crude for controlled additive printing. Spray welding uses a gravity-fed powdered metal dispenser integrated into a special oxygen-acetylene torch head which melts the powder as it is dispensed. Swapping the torch for a laser gave us the powerful construction tool we have today. A powdered metal feedstream, confined and protected against oxidation with a surrounding jet of inert shielding gas, fused by a laser piped through a central bore in the head is now the state of the art technology. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There is also a room-temperature extrusion method that seems to work, using gallium:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://hackaday.com/2013/07/09/3d-printing-with-liquid-metals/&quot; rel=&quot;nofollow&quot;&gt;3D printing with liquid metals&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The medium the team is using for their metallic 3D prints is an alloy of 75% gallium and 25% indium. This alloy is liquid at room temperatures, but when exposed to an oxygen atmosphere, a very thin layer of oxide forms on a small metal bead squeezed out of a syringe. Tiny metal sphere by tiny metal sphere, the team can build up metallic objects out of this alloy, stacking the beads into just about any shape imaginable.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="350" LastActivityDate="2013-10-13T13:10:53.077" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1946" PostTypeId="1" CreationDate="2013-10-13T14:07:39.250" Score="3" ViewCount="1433" Body="&lt;p&gt;I have been researching on SLAM. I came across EKF SLAM which uses odometry to measure the robot's initial position in the map and as well as landmarks which helps the robot's position to be more accurate. Based on the SLAM for dummies, it has a problem of loop closure. In another journal, it was compared to fastSLAM and EKF has a big-O function of $O(K^2)$ where $K$ is the number of landmarks while fastSLAM has $O(M\log(K))$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was also said that the most promising SLAM algorithm from the journal &lt;a href=&quot;http://www.vision.caltech.edu/mariomu/research/papers/vSLAM-krs.pdf&quot; rel=&quot;nofollow&quot;&gt;&quot;The vSLAM Algorithm for Navigation in Natural Environments&quot;&lt;/a&gt;&#xA; is FastSLAM &#xA;However, the vSLAM used by an experiment done by the University of Pennsylvania is the occupancy grid SLAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to ask what would be the most approriate SLAM algorithm for vSLAM given an unmanned aerial vehicle like the quadrotor and RGB-D camera + IMU? Also are there any algorithm that can be extended to support co-operation?&lt;/p&gt;&#xA;" OwnerUserId="2089" LastEditorUserId="350" LastEditDate="2013-10-14T02:05:47.280" LastActivityDate="2019-04-02T13:16:20.133" Title="What is the most appropriate SLAM algorithm for quadrotors with RGB-D camera?" Tags="&lt;localization&gt;&lt;slam&gt;&lt;quadcopter&gt;&lt;mapping&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1947" PostTypeId="1" AcceptedAnswerId="1951" CreationDate="2013-10-14T06:21:05.723" Score="3" ViewCount="4886" Body="&lt;p&gt;I have this project I'm working on where I'll need the speed of the stepper motor to change set speed at a certain distance, I just can't figure out a way to do it. I'm using arduino and a stepper motor, this is the current code.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;AccelStepper.h&amp;gt;&#xA;&#xA;AccelStepper stepper1(AccelStepper::FULL4WIRE, 0, 1, 2, 3);&#xA;&#xA;void setup()&#xA;{  &#xA;    stepper1.setMaxSpeed(200.0);&#xA;    stepper1.setAcceleration(400.0);&#xA;    stepper1.moveTo(5000);&#xA;&#xA;}&#xA;&#xA;void loop()&#xA;{&#xA;    // Change direction at the limits&#xA;    if (stepper1.distanceToGo() == 0)&#xA;    stepper1.moveTo(-stepper1.currentPosition());&#xA;    stepper1.run();&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;What I want it to do basically is to first &lt;code&gt;moveTo(2500)&lt;/code&gt;  at the current speed 200 then after 2500 I want it to increase speed to 400. After it has moved 5000 it turns and moves back to position but that's implemented already.&lt;/p&gt;&#xA;" OwnerUserId="2091" LastEditorUserId="350" LastEditDate="2013-10-14T17:56:29.170" LastActivityDate="2015-04-03T23:36:54.700" Title="I want my stepper motor to switch speed while traveling (not acceleration wise)" Tags="&lt;arduino&gt;&lt;control&gt;&lt;stepper-motor&gt;" AnswerCount="3" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1949" PostTypeId="1" CreationDate="2013-10-14T09:22:32.657" Score="8" ViewCount="2012" Body="&lt;p&gt;In the book of SLAM for dummies, why do we even need the odometry when the robot would use the data retrieved from the laser scanner which is more accurate than odometry? Why not just rerly on the laser scanner and do away from the odometry? Is there any contribution by the odometry that the laser scanner does not have? Also, are all SLAM algorithms feature-based?&lt;/p&gt;&#xA;" OwnerUserId="2089" LastActivityDate="2016-09-01T13:24:10.710" Title="In EKF-SLAM, why do we even need odometry when there is a more reliable sensor?Also, are all SLAM algorithms feature-based?" Tags="&lt;localization&gt;&lt;slam&gt;&lt;mapping&gt;" AnswerCount="4" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1950" PostTypeId="2" ParentId="1949" CreationDate="2013-10-14T23:16:04.297" Score="6" Body="&lt;p&gt;If you read about the principles of sensor fusion, you will always get a better estimate when you combine data in the right way. For example, if you are measuring temperature in a room with 3 different temperature sensors, it is not ideal to only use the best sensor. The ideal case would be to create a weighted combination of each sensor, where the sensor's weight is proportional to one over that sensor's variance. Not to mention, odometry data is VERY good. It's the extraction of landmarks that is noisy and will most likely have a higher variance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you think about it from a high level perspective it's also required that you have a motion update based on odometry. If you only used landmarks, then you would have ambiguous cases. Take for example, the case where you only identify one landmark. You'd have a distance z from your robot to the landmark, but this would map to an infinite number of points in a circle around the landmark. If you identify zero landmarks, then you can't do anything! By including odometry, we no longer have an ambiguity. Assuming we're localizing in a 2D plane (x,y), then you would have to guarantee you have readings for at least 3 landmarks to triangulate your position without odometry, and you cannot make that guarantee in normal environments.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, an encoder can be sample on the order of 50Hz, whereas a LIDAR can only be sampled at around 6-7Hz (don't quote me on those frequencies). This means that you can update your current position much more frequently via odometry than you can from sensor readings. This isn't even taking into account how long it takes you to process your sensor reading to identify landmarks!&lt;/p&gt;&#xA;" OwnerUserId="1960" LastActivityDate="2013-10-14T23:16:04.297" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1951" PostTypeId="2" ParentId="1947" CreationDate="2013-10-15T11:50:51.697" Score="3" Body="&lt;p&gt;For this task; increase speed when a certain distance is reached.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would use encoders on the wheels which will workout the distance travelled and when the target distance is reached then increase speed.  &lt;/p&gt;&#xA;" OwnerUserId="2099" LastActivityDate="2013-10-15T11:50:51.697" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1952" PostTypeId="2" ParentId="1927" CreationDate="2013-10-15T12:12:25.137" Score="1" Body="&lt;p&gt;I would say that the main criteria for a motor mounted in this way would be to ensure that's it's balanced, equal to it's middle position and well supported and secured to it's base. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will have centrifugal force wanting to pull the centre shaft outwards. This force will increase the faster you spin the plate. The torque calculation should be the same but you might need to take into account the weight (if any) acting down on the motor's shaft. Also make the plate as light as possible as this will reduce load bearing on the shaft and reduce the centrifugal force.  &lt;/p&gt;&#xA;" OwnerUserId="2099" LastActivityDate="2013-10-15T12:12:25.137" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1953" PostTypeId="2" ParentId="1949" CreationDate="2013-10-15T13:05:52.967" Score="10" Body="&lt;p&gt;You are reading it too narrowly. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;You don't &quot;need&quot; odometery. SLAM is simply a way to fuse any sensor estimates into a consistent estimate of the robot's state.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&quot;Feature-based&quot; doesn't necessarily mean you need to have identifiable features everywhere in the environment. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;First principal of sensor fusion: Two estimates are better than one! &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h3&gt;Example&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;I haven't read the book &quot;for dummies&quot; but if they don't do the following numeric example, I'd set the book on fire and get a better one. And if they &lt;strong&gt;do&lt;/strong&gt; have this example, then I wonder why you didn't mention it!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;( you can follow along in the math &lt;a href=&quot;http://en.wikipedia.org/wiki/Kalman_filter&quot;&gt;here&lt;/a&gt; )&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A robot is at position $x=0$, and is moving to the right (increasing $x$). In this perfect world, the dynamics and sensor modes are linear. (otherwise use EKF, PF, or some variant).&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;There's a wall at &lt;em&gt;exactly&lt;/em&gt; $x=10$ which the robot can measure distance to.&lt;/li&gt;&#xA;&lt;li&gt;The robot has a laser scanner to get distance with sensor variance $\sigma_l^2=.1$&lt;/li&gt;&#xA;&lt;li&gt;The robot can measure it's distance travelled with odometers using sensor variance $\sigma_o^2 = .5$. Clearly the laser is more accurate than the odos.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Here's how the robot handles SLAM in this simple environment. (note this is actually localization since we aren't updating the position of the wall).&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The robot tries to move one unit to the right.&lt;/li&gt;&#xA;&lt;li&gt;Odometry measures $x=.9$&lt;/li&gt;&#xA;&lt;li&gt;Laser scanner says you are $8.8$ units from the wall. (implying you are at 1.2)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Question&lt;/em&gt;: Where are you? &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Do you choose the best sensor? In this case, the laser is the best right? So obviously I'm at $x=1.2$.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Do you choose the one &quot;closest&quot; to what you expect? Well in this case I think we should use odometry, since $.9$ is closer to what I intended, (moving one unit).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Maybe you could average the two? Well, that's better, but it is susceptible to outliers.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The shiny principals of sensor fusion tell you how to answer the question as follows:&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Your minimum mean-squared estimate of the robot position is given by:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$x_{mmse}=\frac{\sigma_l^2}{\sigma_o^2+\sigma_l^2}(.9) + \frac{\sigma_o^2}{\sigma_o^2+\sigma_l^2}(1.2)$$&#xA;$$x_{mmse}=\frac{.1}{.6}(.9) + \frac{.5}{.6}(1.2)$$&#xA;$$x_{mmse}=1.15$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;... unless I screwed up the algebra somewhere. People localize airplanes using math not much more complicated than that.&lt;/p&gt;&#xA;" OwnerUserId="163" LastEditorUserId="163" LastEditDate="2013-10-15T18:18:01.540" LastActivityDate="2013-10-15T18:18:01.540" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1954" PostTypeId="1" AcceptedAnswerId="1957" CreationDate="2013-10-16T06:09:58.530" Score="3" ViewCount="3013" Body="&lt;p&gt;The HC-SR04 is directly connected to an Arduino board with the receiver end(echo) connected to analog pin 2 and the transmitter (trigger) connected to digital pin 4.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am wondering if I can use the sensor to sense the change in saturation from when object block its path. The receiver and transmitter will be positioned like this &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/phIBB.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The line in the middle is supposed to be a paper. I'll be using it to see the difference between one paper and two paper when they travel trough the two. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I'm not sure if this is possible but the way I see it working is kind of similar to an IR LED Arduino program connected to an LED, where when one paper passes trough the light gets a little bit weaker and with two it takes a heavier hit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this possible?&lt;/p&gt;&#xA;" OwnerUserId="2091" LastEditorUserId="1177" LastEditDate="2013-12-30T19:50:07.077" LastActivityDate="2013-12-30T19:50:07.077" Title="Is it possible to use HC-SR04 ultrasonic range sensor to indicate thickness of a material" Tags="&lt;arduino&gt;&lt;sensors&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1955" PostTypeId="1" CreationDate="2013-10-16T14:36:36.653" Score="7" ViewCount="2424" Body="&lt;p&gt;I am working on a 2D space where my robot needs to follow a trajectory while avoiding some obstacles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've read recently about methods for path planning as &quot;Vector Field Histogram&quot; and the &quot;Dynamic window approach&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it worth to use these kind of algorithms for a 2D space or should I go with something as Potential Fields or Rapidly-Exploring Random Trees?&lt;/p&gt;&#xA;" OwnerUserId="2102" LastActivityDate="2014-01-02T11:56:18.640" Title="Choosing path planning and obstacle avoidance algorithm for 2D space" Tags="&lt;mobile-robot&gt;&lt;motion-planning&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1956" PostTypeId="2" ParentId="1955" CreationDate="2013-10-16T17:06:16.720" Score="1" Body="&lt;p&gt;In a 2D space, you could probably get away with something much simpler to begin with like Breadth-first search, Dijkstra's or A-Star. Combine it with an occupancy grid as a map based on LIDAR data and you'd be good to go. RRT's work well and I've used them in the past, but for much higher dimensional search spaces. In general I would recommend starting out with the simplest solution. If it turns out it doesn't perform fast/well enough, then you upgrade to something more complicated. There's no need to build a formula-1 car to drive to the grocery store XD.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It really depends on your application, and since I know nothing about it, it's hard to give you the best answer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: RRT* (read: RRT star) is also very nice.&lt;/p&gt;&#xA;" OwnerUserId="1960" LastEditorUserId="1960" LastEditDate="2013-10-16T17:13:19.770" LastActivityDate="2013-10-16T17:13:19.770" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1957" PostTypeId="2" ParentId="1954" CreationDate="2013-10-17T18:22:57.347" Score="4" Body="&lt;p&gt;The short answer is &quot;no, a sonic range sensor can't do it&quot;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It might &quot;work&quot; under very controlled conditions, but relying on only the attenuation of the returned signal to determine thickness may leave you open to incorrect results due to &lt;a href=&quot;http://en.wikipedia.org/wiki/Multipath_propagation&quot; rel=&quot;nofollow noreferrer&quot;&gt;multipath propagation&lt;/a&gt; effects.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The more traditional way to measure thickness with sound is called profiling.  The following is excerpted from &lt;a href=&quot;http://woodshole.er.usgs.gov/operations/sfmapping/seismic.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;a USGS Woods Hole Science Center page on Seismic Profiling systems&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;reflection profiling is accomplished by [emitting] acoustic energy in timed intervals [...]. The transmitted acoustic energy is reflected from boundaries between various layers with different acoustic impedances [i.e. the air and the paper]. Acoustic impedance is defined by the bulk density of the medium times the velocity of the sound within that medium. The reflected acoustic signal is received [by one or more microphones]. The receiver converts the reflected signal to an analog signal [which is digitized and heavily processed to determine the makeup of the materials].  &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/wwlhm.png&quot; alt=&quot;Seismic Profiling System&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Rather than just measuring the time of the incoming pulse, you'd need to analyze both the time and frequency domain of the recovered signal to solve for the acoustic properties necessary to transform your transmitted pulse into the received pulse.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the long answer is that it can be done sonically, although a sonic range sensor is generally insufficient for this purpose.  &lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2013-10-17T18:22:57.347" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1959" PostTypeId="1" CreationDate="2013-10-18T22:40:17.927" Score="5" ViewCount="3675" Body="&lt;p&gt;I have read that you can wire a unipolar stepper to a bipolar driver, which I have, by ignoring the two extra wires. One concern I have is whether connecting a unipolar stepper to a bipolar driver will cause it to lose torque (holding or operating)? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Will it be the same? Increase? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've read that bipolars are more bang for your buck energy-wise, and since you can &quot;transform&quot; a unipolar stepper to a bipolar good enough that the driver will still work right, I would think that it might run more efficiently. Is this true?&lt;/p&gt;&#xA;" OwnerUserId="824" LastEditorUserId="350" LastEditDate="2013-10-22T16:26:23.777" LastActivityDate="2019-07-15T15:36:17.437" Title="Will wiring a unipolar stepper to a bipolar stepper driver decrease the holding torque?" Tags="&lt;torque&gt;&lt;stepper-driver&gt;&lt;stepper-motor&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1960" PostTypeId="2" ParentId="1856" CreationDate="2013-10-18T23:26:32.243" Score="2" Body="&lt;p&gt;The arduino is a pretty versatile piece of kit that can work alongside pretty much anything. I'd look at the fish identification process and work back to the appropriate hardware.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;How many possible species of fish are there in the lake? (The more fish, the more memory you'll need, and the more complex your software will be)&lt;/li&gt;&#xA;&lt;li&gt;Can these species clearly be told apart by size/weight? (If so, you may not necessarily need computer vision at all)&lt;/li&gt;&#xA;&lt;li&gt;Can the species be told apart simply by colour? (colour averaging will be significantly easier to process than differentiating finer details, less processing power required)&lt;/li&gt;&#xA;&lt;li&gt;How fast does this recognition need to occur? (imaging processing can be intensive, pick an appropriately fast system)&lt;/li&gt;&#xA;&lt;li&gt;Does the system need to be entirely self-contained / on-site? (If not, you could save time by sending the image to a remote computer over wireless/3G for processing)&lt;/li&gt;&#xA;&lt;li&gt;How small are the distinguishing features? (This will determine what camera resolution / number of cameras / lens you will need)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;...etc&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In terms of computer vision software, &lt;a href=&quot;http://opencv.org&quot; rel=&quot;nofollow&quot;&gt;OpenCV&lt;/a&gt; should be high on your list.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have a good understanding of mobile app development, a smart phone could be appropriate (combined camera &amp;amp; computer, cheap, portable, relatively fast), combined with Google's ADK and you could pass resulting commands to actuators.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The list of hardware capable of running image processing software is rather large. Arduinos, Beaglebone/boards, mbeds, FPGAs, RaspberryPi, fitPC, NUCs, full-sized computers (ATX motherboards etc) and beyond. Up to you what works for your application and budget.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Have a look at some of the HD logitech web cams, for the price and resolution they deliver high frame rates and have support across a good few operating systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Good luck!&lt;/p&gt;&#xA;" OwnerUserId="2113" LastActivityDate="2013-10-18T23:26:32.243" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1962" PostTypeId="2" ParentId="1944" CreationDate="2013-10-19T01:03:29.443" Score="2" Body="&lt;p&gt;Look at Electron Beam welding technology.  Businesses like &lt;a href=&quot;http://www.sciaky.com/products_EB.html&quot; rel=&quot;nofollow&quot;&gt;Sciaky's Additive Manufacturing&lt;/a&gt; have found a niche market by using 3D printing techniques in metal applications.  They have a 2 min video on &lt;a href=&quot;https://www.youtube.com/watch?v=A10XEZvkgbY&quot; rel=&quot;nofollow&quot;&gt;Youtube&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Specifically with GMAW you will want to use a wire with very little manganese and other &quot;cleaner&quot; elements.  This wire will cause the formation of a silica slag (glass) on the top of the weld.  This slag will act as an insulator and prevent the next successive arc on that spot from establishing.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Read the literature that comes with the wire you select.  Often straight CO2 gas will work more economically that an Argon gas mix.  Also factor in temperature / gas expansion when you design your enclosure or consider pre and post flow gas timing when considering your output speed.&lt;/p&gt;&#xA;" OwnerUserId="2114" LastEditorUserId="131" LastEditDate="2013-10-22T12:20:43.627" LastActivityDate="2013-10-22T12:20:43.627" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1963" PostTypeId="5" CreationDate="2013-10-19T03:12:49.613" Score="0" Body="&lt;p&gt;Brushless DC motor or BLDC motor is a type of synchronous electric motor powered by direct current. BLDC motor does not operate on brushes, rather than it operates on controller via electronic commutation.&lt;/p&gt;&#xA;" OwnerUserId="1336" LastEditorUserId="1336" LastEditDate="2013-10-19T11:10:52.087" LastActivityDate="2013-10-19T11:10:52.087" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1964" PostTypeId="4" CreationDate="2013-10-19T03:12:49.613" Score="0" Body="Brushless motor is kind of DC motor. It is also called BLDC Motors (Brush-Less Direct Current Motors)." OwnerUserId="1336" LastEditorUserId="1336" LastEditDate="2013-10-19T11:11:08.133" LastActivityDate="2013-10-19T11:11:08.133" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1965" PostTypeId="1" AcceptedAnswerId="1967" CreationDate="2013-10-21T11:11:13.247" Score="5" ViewCount="713" Body="&lt;p&gt;I'm pretty new to the world of UAS after a ten year holiday from RC flying.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm looking at Ardupilot and am wondering what purpose telemetry serves? Is it just to get in flight data back to a ground station or can it also be used to program the system in flight? Are there other capabilities that I am missing?&lt;/p&gt;&#xA;" OwnerUserId="2127" LastEditorUserId="2127" LastEditDate="2013-10-21T11:43:08.917" LastActivityDate="2013-10-22T18:52:50.630" Title="What is telemetry used for?" Tags="&lt;uav&gt;&lt;ardupilot&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1966" PostTypeId="1" CreationDate="2013-10-21T11:39:01.407" Score="8" ViewCount="160" Body="&lt;p&gt;This question is to anyone familiar with object (specifically vehicle) detection research.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm new to computer vision and am confused about training object detection classifiers. Specifically, the objective is vehicle detection. I've been reading through vehicle detection literature for weeks now, but I'm still a bit confused.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I'm confused about is evaluation. For the evaluation of a system, the research community usually has a benchmarked dataset which can be used for testing data. But the performance of a system also depends very much on the data that was used to train it, no? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So aren't there any &lt;em&gt;training datasets&lt;/em&gt; out there, too? That would make for far more uniform method comparisons. I seem to keep finding papers using benchmarked datasets for evaluation, but making no mention of where they got their training data from.&lt;/p&gt;&#xA;" OwnerUserId="2128" LastActivityDate="2013-10-22T21:05:57.047" Title="Public training data for vehicle detectors in computer vision?" Tags="&lt;computer-vision&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1967" PostTypeId="2" ParentId="1965" CreationDate="2013-10-22T18:52:50.630" Score="3" Body="&lt;p&gt;Telemetry is used to get in-flight data back to a ground station. For example, attitude (roll, pitch, yaw), altitude, GPS position, speed, battery voltages. It just gives you more feedback.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It can also be used to alert you when battery levels are too low or when a fault occurs.&lt;/p&gt;&#xA;" OwnerUserId="983" LastActivityDate="2013-10-22T18:52:50.630" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1968" PostTypeId="2" ParentId="1966" CreationDate="2013-10-22T21:05:57.047" Score="2" Body="&lt;p&gt;You typically use the same data set (or, rather, parts of it) for training and testing. I. e. you split the data set into a training set and a test set. A common technique for evaluating classifiers in general is called 10-fold cross validation. You split your data set 10 different ways such that 90% of the data is used for training and 10% of the data is used for testing. This way you get 10 different accuracy results, which you can then use to do statistical significance testing to show that your classifier is better than somebody else's.&lt;/p&gt;&#xA;" OwnerUserId="1115" LastActivityDate="2013-10-22T21:05:57.047" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1971" PostTypeId="2" ParentId="1728" CreationDate="2013-10-23T16:53:20.703" Score="4" Body="&lt;p&gt;I recommend arranging your sensors like the following:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;         Thickness of Line&#xA;            &amp;lt;--------&amp;gt;             /\&#xA;            |        |            /  \&#xA;            | *    * |             ||&#xA;            |        |             || moving&#xA;         *  |        |  *          || direction&#xA;            |        |             ||&#xA;            | *    * |             ||&#xA;            |        |             ||&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This allows you to detect many conditions.  Let's say the sensors receives 1 if on black area and 0 if on white. Let's look at some of the configurations that may happen and their interpretations. I will use &lt;code&gt;|&lt;/code&gt;, &lt;code&gt;-&lt;/code&gt;, &lt;code&gt;/&lt;/code&gt; and &lt;code&gt;\&lt;/code&gt; to indicate the borders of the actual line:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;You are completely lost:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;          0    0  &#xA;&#xA;     0              0&#xA;&#xA;          0    0  &#xA;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;moving on straight line:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;        |        |&#xA;        | 1    1 |&#xA;        |        |&#xA;     0  |        |  0&#xA;        |        |&#xA;        | 1    1 |&#xA;        |        |&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The line turns right:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;          0    0 &#xA;        ------------------&#xA;     0  |           1&#xA;        |         &#xA;        | 1    1 |--------&#xA;        |        |&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The line turns left:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;          0    0 &#xA;------------------&#xA;     1           |  0&#xA;                 |&#xA;--------| 1    1 |&#xA;        |        |&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Gap ahead:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;        |________|&#xA;          0    0  &#xA;         ________ &#xA;     0  |        |  0&#xA;        |        |&#xA;        | 1    1 |&#xA;        |        |&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Gap behind:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;        |        |&#xA;        | 1    1 |&#xA;        |        |&#xA;     0  |________|  0&#xA;&#xA;          0    0  &#xA;         ________ &#xA;        |        |&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;leaning out of the line from the left:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;            |        |&#xA;          0/   1    /&#xA;          |         |&#xA;     0   /         /0 or 1&#xA;         |        |&#xA;        / 1    1 /&#xA;        |        |&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;you are being teased:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;          1    1  &#xA;&#xA;     1              1&#xA;&#xA;          1    1  &#xA;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;There are many other variations you can think of. As one of the examples shows, this also gives you the ability to detect when you are leaning out of the line so you can come back smoothly (without having to turn back on the line sharply). Given this, following the circle shouldn't be a problem at all regardless of whether it's green or black.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Detecting color with grey-scale sensors is possible, but probably not what you are looking for. In your specific case, a value that is far from both 0 and 1 (say from 0.2 to 0.8 or something like that) would depict your color, which is only one. You should still pay attention that if only one of the sensors is showing such a value, for example 0.5, it is likely that you are just going out of the line and it's measuring a half white/half black location.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you really want to detect the actual color you have to do the following:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Use three grey-scale sensors instead of one at each location.&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;On each of the three, mount a color filter; one green, one blue and one red. Color filters are as simple as colored transparent pieces of plastic:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/dqfTd.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Read the three RGB values and convert them to &lt;a href=&quot;https://en.wikipedia.org/wiki/HSL_color_space&quot; rel=&quot;nofollow noreferrer&quot;&gt;HSL (Hue-Saturation-Lightness)&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;Base your decisions on the calculated hue. I say only on the hue because the environment lighting very easily changes your observed saturation and lightness so they are not very reliable.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="158" LastEditorUserId="158" LastEditDate="2013-11-12T10:11:08.047" LastActivityDate="2013-11-12T10:11:08.047" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1972" PostTypeId="2" ParentId="18" CreationDate="2013-10-24T10:01:13.187" Score="1" Body="&lt;p&gt;In the field of machine learning, we look at a Kalman filter as an inference algorithm on a latent variable model. The measurements are visible, but the true state is hidden. You now want to infer the true states.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As usual, this method relies on a set of parameters and -- in principle -- the way to obtain the best point-estimate for the parameters is to look at the likelihood for the data (given the parameters) and optimising your parameters to obtain the maximum value. This gives you the maximum likelihood estimate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, in the case of the Kalman filter, this approach is not so easy and intractable to do in closed form. This is because we do not observe the hidden states. Therefore, one has to apply some tricks. One of them is to use the Expecation Maximisation (EM) Algorithm, which is an iterative approach: In the first step, you calculate the most likely value for your hidden states (the expected value) under your current parameters. In the second step, you keep the hidden states fixed and optimise the parameters to obtain the solution with highest likelihood. These steps are repeated until convergence.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can read up on the general concept of EM in a whole bunch of text books on machine learning (only one example: &lt;a href=&quot;http://web4.cs.ucl.ac.uk/staff/D.Barber/pmwiki/pmwiki.php?n=Brml.HomePage&quot; rel=&quot;nofollow&quot;&gt;&quot;Bayesian Reasoning and Machine Learning&quot;&lt;/a&gt; by David Barber). The process of inferring the parameters for linear dynamical systems (which gives you the Kalman filter type of model) is well described in a &lt;a href=&quot;http://www.gatsby.ucl.ac.uk/~zoubin/papers/tr-96-2.pdf&quot; rel=&quot;nofollow&quot;&gt;tech report by Zoubin Ghahramani and Geoffrey Hinton&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="2143" LastActivityDate="2013-10-24T10:01:13.187" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1974" PostTypeId="1" AcceptedAnswerId="1977" CreationDate="2013-10-24T21:20:04.303" Score="3" ViewCount="1360" Body="&lt;p&gt;I want to steer a RC car in a straight line.The car has 4 sharp IR sensors on each corner of the car to help it steer the corridor.The corridor is irregular and looks something similar to the picture below.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The car needs to be stay exactly at the middle(shown by lighter line) and take help of the IR sensors to correct its path.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The car has a servo on the front wheel to steer and another that controls the speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried running it using a algorithm where it summed the values on each side of the car and took the difference.THe difference was then fed to a pid control the output of which went to steer the car.The greater the value from the pid (on either sides), the greater the value of the steering angle till it reaches the middle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It works for the part where the walls are at similar distance from the center and even then it oscillates a lot around the center and fails miserably around the bumps in the corridor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need to make changes to the algorithm and need some help in steering me  in the right direction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The IR sensors are too finicky and is there a way to filter out the noise and make the readings more stable?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help regarding the changes that needs to be implemented is much appreciated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Currently the car only uses 4 IR sensors to guide.I can also use 2 ultrasonic sensors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/sXdUT.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="1139" LastEditorUserId="1139" LastEditDate="2013-10-24T23:03:00.993" LastActivityDate="2015-05-29T17:04:42.613" Title="Autonomous car steering using IR sensors" Tags="&lt;mobile-robot&gt;&lt;sensors&gt;" AnswerCount="4" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1975" PostTypeId="2" ParentId="1167" CreationDate="2013-10-25T04:29:01.403" Score="2" Body="&lt;p&gt;I will try to answer 2 and 3.&lt;/p&gt;&#xA;&lt;h1&gt;2&lt;/h1&gt;&#xA;&lt;p&gt;I am pretty sure the cheap ones won't and I doubt expensive ones would.&lt;/p&gt;&#xA;&lt;p&gt;In addition, The viscosity isn't the only thing you have to take into account when it comes to accuracy. Distance, height, wear of the tubes, wear of the motor, liquids that can potentially accumulate in the tube, etc, etc.&lt;/p&gt;&#xA;&lt;p&gt;Having that said, I wouldn't design the solution expecting constant rate. I would rather provide an easy interface to calibrate the pumps to a particular situation. Also, I would recommend the user to check calibration in a regular basis (something like 6 months, by experience).&lt;/p&gt;&#xA;&lt;h1&gt;3&lt;/h1&gt;&#xA;&lt;p&gt;It doesn't really matter, you can use a simple relay, a solid state relay or a mosfet.&#xA;A professional level custom circuit would use a mosfets, as it is silent, small and fits better in a PCB.&#xA;Personally, I would rather use a relay board for DIY stuff, which is surprisingly cheaper and easier to find in single units these days. Also, it requires no soldering and doesn't require you to learn how to use the mosfet.&lt;/p&gt;&#xA;" OwnerUserId="2145" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2013-10-25T04:29:01.403" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1976" PostTypeId="1" AcceptedAnswerId="1982" CreationDate="2013-10-25T05:58:53.117" Score="3" ViewCount="265" Body="&lt;p&gt;I belong to an AUV team at my university. We are planning to have a Multibeam 2D Imaging Sonar (the Blueview P900) for our AUV to detect obstacles underwater.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have the following questions to ask on the feasibility of testing/implementing such sonars on AUVs.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;As we know that these multibeam sonars have multiple reflections arriving at different times from various surfaces while testing in a pool, is there any recommended way to filter these noises in the image obtained from the sonar pings?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Are such sonars in use/test by any other team/organization anywhere else who do pool testing other than a ocean/reservoir testing where multiple reflections are almost zero except the reflections from the obstacle(s)?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Also i would like to know the recommended image processing algorithms that can be implemented/used to detect obstacles from the sonar images.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="2146" LastEditorUserId="350" LastEditDate="2013-10-25T19:53:07.923" LastActivityDate="2016-03-04T16:31:27.257" Title="Usage of Multibeam 2D Imaging Sonar for AUVs, testing them in the pool environment" Tags="&lt;sonar&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1977" PostTypeId="2" ParentId="1974" CreationDate="2013-10-25T15:30:02.703" Score="2" Body="&lt;p&gt;If you have a map, then you can use a Kalman filter with a motion update based on odometry and a sensor update based on the actual IR sensor readings and the expected sensor readings given your current position and the map. The PID control you implemented will only be able to make the vehicle drive in the actual center of the hallway, which would be a curved path based on the bumps in the hallway.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;HOWEVER, the simplest things you should try are as follows: 1) Implement an averaging filter on the IR sensor readings...aka take the average of n IR readings as the input to your control algorithm. This simulates a low pass filter and can eliminate high frequency noise. 2) Implement a threshold filter on the IR sensors...if the readings are greater than some range value, then DON'T use that sensor in your control loop. Combined, an averaging filter and threshold filter should mean that your PID loop is only controlling to the center of the walls that you want. In the image below, the algorithm would only control based off readings from the red walls, ignoring any readings from the black walls. If you don't find any walls within your range threshold (i.e. the hallway is open on both sides, you can try just maintaining your current heading). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/j336U.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="1960" LastActivityDate="2013-10-25T15:30:02.703" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1978" PostTypeId="1" CreationDate="2013-10-25T16:25:45.717" Score="2" ViewCount="282" Body="&lt;p&gt;Recently I am working with two accelerometers: BMA020 and BMA180. I will try to explain my problem using BMA020 as example because it is less accurate therefore problem is more visible. When I hold my Acc in neutral position I get correct average result: -1G. Now I turn my Acc upside down but this time my average result is +0,91G. The same problem occurs for other axis. For BMA180 problem is less visible (-1G in normal position and +0.98G upside down). Do you know why accelerometer behaves like this ?&lt;/p&gt;&#xA;" OwnerUserId="2147" LastActivityDate="2013-11-02T22:30:28.927" Title="Accelerometers error (BMA020 and BMA180)" Tags="&lt;accelerometer&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1979" PostTypeId="1" CreationDate="2013-10-25T16:39:24.323" Score="1" ViewCount="1516" Body="&lt;p&gt;I've been able to use &lt;a href=&quot;https://github.com/mavlink/pymavlink/blob/master/mavutil.py&quot; rel=&quot;nofollow&quot;&gt;pymavlink.mavutil&lt;/a&gt; to read telemetry from a .tlog created by &lt;a href=&quot;https://github.com/diydrones/MissionPlanner&quot; rel=&quot;nofollow&quot;&gt;MissionPlanner&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To do this, I create a &lt;code&gt;mavlogfile&lt;/code&gt; like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;mlog = mavutil.mavlink_connection('mylogfile.tlog')&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I want to read the flight parameters (settings) from the .tlog . The method mavlogfile.param_fetch_all() appears to be designed only to work with a live telemetry link rather than a log. It sends a parameter request command, which obviously has no result when you are linked to a log rather than an actual aircraft.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know the parameters are in the .tlog... how do I get them out?&lt;/p&gt;&#xA;" OwnerUserId="1473" LastActivityDate="2013-10-25T17:26:42.957" Title="How to retrieve parameters from mavlink .tlog using pymavlink?" Tags="&lt;python&gt;&lt;ardupilot&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1980" PostTypeId="2" ParentId="1979" CreationDate="2013-10-25T17:26:42.957" Score="2" Body="&lt;p&gt;Turns out it's implemented in &lt;a href=&quot;https://github.com/mavlink/mavlink/blob/master/pymavlink/tools/mavparms.py&quot; rel=&quot;nofollow&quot;&gt;https://github.com/mavlink/mavlink/blob/master/pymavlink/tools/mavparms.py&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and the relevant code is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;m = mlog.recv_match(type='PARAM_VALUE')&lt;/code&gt;&lt;/p&gt;&#xA;" OwnerUserId="1473" LastActivityDate="2013-10-25T17:26:42.957" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1981" PostTypeId="1" CreationDate="2013-10-25T18:45:18.497" Score="1" ViewCount="641" Body="&lt;p&gt;I need to track a point in space. The point is less than 2&amp;nbsp;m away, it has to be passive, no batteries, and no charging.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't always have a line of sight. I need to pinpoint it to about a centimeter. I need to sample it at a frequency of 10&amp;nbsp;Hz or more.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can it be done at all? Does such a solution exist?&lt;/p&gt;&#xA;" OwnerUserId="2149" LastEditorUserId="1906" LastEditDate="2013-11-22T15:48:01.507" LastActivityDate="2013-11-22T15:48:01.507" Title="1 cm accuracy radio rangefinder?" Tags="&lt;sensors&gt;" AnswerCount="0" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="1982" PostTypeId="2" ParentId="1976" CreationDate="2013-10-25T20:32:31.400" Score="3" Body="&lt;p&gt;As you've noted, a pool is one of the worst environments in which to test acoustic sensors; there is nothing to dampen the echoes, and the multipath is quite extreme.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Generally, one of 3 things is done to help mitigate these effects -- the goal being an &lt;a href=&quot;http://en.wikipedia.org/wiki/Anechoic_chamber&quot; rel=&quot;nofollow noreferrer&quot;&gt;anechoic test chamber&lt;/a&gt;.  &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Make the shape of your test tank such that all echoes are reflected into a trap.  The &lt;a href=&quot;http://wikimapia.org/1362997/TRANSDEC-Anechoic-Pool&quot; rel=&quot;nofollow noreferrer&quot;&gt;TRANSDEC anechoic pool&lt;/a&gt; accomplishes this with its eliptical shape; sounds that hit the bottom are directed toward the edge, which has a &quot;trap&quot; around its perimeter. (I can no longer find the cut-away diagram for that... sorry).&lt;br&gt;&#xA;&lt;img src=&quot;https://i.stack.imgur.com/FMyNb.jpg&quot; alt=&quot;TRANSDEC anechoic pool&quot;&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Put foam wedges along the outside of the tank to absorb acoustic energy, similar to the way that recording-studio anechoic chambers are designed. &#xA;&lt;a href=&quot;http://www.floridamemory.com/items/show/75485&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/YBKiQ.png&quot; alt=&quot;Vincent Benedetti placing a submarine model inside the large anechoic tank at the Naval Research Laboratory - Orlando, Florida.&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Aerate the water to scatter the echoes, a technique described in &lt;a href=&quot;http://www.ncbi.nlm.nih.gov/pmc/articles/PMC1692822/pdf/11079420.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this paper: &quot;Anechoic aquarium&#xA;for ultrasonic neural telemetry&quot;&lt;/a&gt;.  The use of microbubbles is apparently able to prevent most of the multipath effects.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/5vrov.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/5vrovm.png&quot; alt=&quot;Diagrammatic representation of the anechoic aquarium, (a) cross-section and (b) top view.&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2016-03-04T16:31:27.257" LastActivityDate="2016-03-04T16:31:27.257" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1983" PostTypeId="1" CreationDate="2013-10-26T22:41:29.173" Score="5" ViewCount="344" Body="&lt;p&gt;I'm a first year electronics engineering student. I love almost all the aspects of robotics - the electronics, algorithms, control theory etc. I can't stand the mechanical aspect of robotics though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can I have a fulfilling career in Robotics if I hate mechanics but love all other parts of robotics? I'm ready to learn mechanics if I absolutely have to, but would strongly prefer not to learn any more than the absolute basics.&lt;/p&gt;&#xA;" OwnerUserId="2154" LastEditorUserId="37" LastEditDate="2016-10-21T10:10:33.077" LastActivityDate="2016-10-21T10:10:33.077" Title="Can you have a career in robotics if you hate mechanics?" Tags="&lt;software&gt;&lt;electronics&gt;&lt;mechanism&gt;" AnswerCount="4" CommentCount="3" FavoriteCount="2" ClosedDate="2016-10-21T10:11:03.160" ContentLicense="CC BY-SA 3.0" />
  <row Id="1984" PostTypeId="2" ParentId="1983" CreationDate="2013-10-27T00:53:26.100" Score="7" Body="&lt;p&gt;The answer is 'yes'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A more detailed answer likely depends on how you define &quot;robotics&quot;.  But generally, robotics applications are considered to require a very broad spectrum of knowledge.  So while most robotics includes some form of mechanical function, you could easily specialize in artificial intelligence, microcontroller design,  or any number of specialties without ever having to learn advanced mechanical theory and application. I would even say you are at advantage; I would guess, but do not know for certain, that most people are the other way. They enjoy the mechanical real-world aspects of robotics, not so much the abstract topics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given what you say you enjoy though, I would have to wonder if &quot;robotics&quot; should be your focus vs. a more general computer engineering or science focus.&lt;/p&gt;&#xA;" OwnerUserId="167" LastActivityDate="2013-10-27T00:53:26.100" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1985" PostTypeId="1" AcceptedAnswerId="1986" CreationDate="2013-10-27T08:13:45.520" Score="8" ViewCount="1993" Body="&lt;p&gt;First, is it possible to build map without landmarks for a robot in 2D? Let's say we have an aisle surrounded  by two walls. The robot moves in this environment. Now is it feasible to build such a SLAM problem? Or landmarks must be available to do so?&lt;/p&gt;&#xA;" OwnerUserId="2155" LastActivityDate="2015-01-29T21:30:36.077" Title="SLAM without landmarks?" Tags="&lt;mobile-robot&gt;&lt;slam&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1986" PostTypeId="2" ParentId="1985" CreationDate="2013-10-27T17:21:05.450" Score="7" Body="&lt;p&gt;I think you misunderstand what a landmark is. It is a generic, catch-all term for anything that a robot can recognize and use as part of a map. In particular, &quot;landmarks&quot; are important for feature-based SLAM algorithms, such as EKF-based slam. What you use for &quot;landmarks&quot; depends on what sensors are available to the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your case, since you haven't specified any sensing, then we'll assume the robot knows when it hits an object. Then any &quot;landmark&quot; is simply any time the robot bumps into something. If you do this with pen and paper, you'd just wander around and put an X any time you hit something, then turn and keep wandering. As time goes to infinity, you'd have a reasonable map of where object boundaries are, and what the object shapes are, as long as everything is static.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this case, the &quot;map&quot; can just be a bitmap, where each pixel is 0 or 1, depending on if it has an object in that space or not. Scaling is up to the application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suggest doing a bit more research on these topics:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Occupancy Grid representation&lt;/li&gt;&#xA;&lt;li&gt;Feature-based mapping&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="163" LastActivityDate="2013-10-27T17:21:05.450" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="1987" PostTypeId="2" ParentId="1983" CreationDate="2013-10-27T18:02:49.873" Score="4" Body="&lt;p&gt;Working in robotics doesn't mean that you must understand (or enjoy) all the relevant disciplines.  It simply means that you must understand that you are one part of a team that produces a robotic system.  On the other hand, what skills you have will determine which teams will find you valuable as a member -- smaller teams require everyone to bring multiple skills to the table, but in larger teams you can get extreme specialization.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At a minimum, you need only understand that the mechanical system will constrain what can be with the other systems (e.g. you may have a hard maximum or minimum acceleration, finite range of motion, limit on total battery current, etc).  You will work within those constraints.  &lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2013-10-27T18:02:49.873" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1988" PostTypeId="2" ParentId="1974" CreationDate="2013-10-28T09:31:49.100" Score="1" Body="&lt;p&gt;You could have it keep track of the last distance read from the IR sensors and if it changes more than a certain amount (2%? not sure what would work for you) calculate the difference between the measured distance and the expected distance. Save that difference as an offset, which you apply to the reading from that IR sensor until it returns to normal. If the sensor reads 'infinity' you could ignore the actual reading entirely and just give the PID loop the &quot;expected&quot; value. This is entirely untested.&lt;/p&gt;&#xA;" OwnerUserId="2160" LastActivityDate="2013-10-28T09:31:49.100" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1989" PostTypeId="2" ParentId="1983" CreationDate="2013-10-28T16:21:37.197" Score="2" Body="&lt;p&gt;Robotics is by definition a subject rooted in mechanics and if you &quot;hate&quot; this subject then surely there will always be an large part of this industry that you &quot;hate&quot;.  So I would suggest you review either:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;a.  What you mean by &quot;I hate mechanics&quot; or &quot;the mechanical side&quot;&#xA;b.  Understand what you like about Robotics because in the end all of the work is translated into the mechanical side (electronics, algorithms, control theory etc.).  That is this work has to be implemented in the real world.  And this is where the real rewards, off seeing the results of your work, will come from.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note:  My experience is that if you work hard at the mechanics side then ultimately you will learn to like it as your work translates into real things.&lt;/p&gt;&#xA;" OwnerUserId="2166" LastActivityDate="2013-10-28T16:21:37.197" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1991" PostTypeId="1" AcceptedAnswerId="2060" CreationDate="2013-10-29T09:01:10.230" Score="8" ViewCount="500" Body="&lt;p&gt;I'm looking to build an outdoor robot and I need to know if &lt;a href=&quot;http://en.wikipedia.org/wiki/Time-of-flight_camera&quot; rel=&quot;nofollow&quot;&gt;time-of-flight cameras&lt;/a&gt; like the &lt;a href=&quot;http://www.mesa-imaging.ch/swissranger4500.php&quot; rel=&quot;nofollow&quot;&gt;SwissRanger™ SR4500&lt;/a&gt; work in fog, does anybody have some experiences on that?&lt;/p&gt;&#xA;" OwnerUserId="1777" LastEditorUserId="37" LastEditDate="2013-10-31T22:10:07.890" LastActivityDate="2013-11-13T15:01:20.960" Title="Are time-of-flight cameras like the swissranger affected by outdoor fog?" Tags="&lt;mobile-robot&gt;&lt;cameras&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="1992" PostTypeId="1" AcceptedAnswerId="2005" CreationDate="2013-10-30T04:59:42.603" Score="4" ViewCount="1335" Body="&lt;p&gt;The state vector is &#xA;$$ \textbf{X} = \begin{bmatrix} x \\ y \\ v_{x} \\ v_{y} \end{bmatrix}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;transition function is &#xA;$$&#xA;\textbf{X}_{k} = f(\textbf{X}_{k-1}, \Delta t) =&#xA;\begin{cases} &#xA;x_{k-1} + v_{xk} \Delta t \\&#xA;y_{k-1} + v_{yk} \Delta t &#xA; \end{cases} &#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$z_{b} = atan2(y, x)$ and&#xA;$z_{r} = \sqrt{ x^{2} + y^{2}}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;the Jacobian of the observation model:&#xA;$$&#xA;\frac{\partial h}{\partial x} =&#xA; \begin{bmatrix} \frac{-y}{x^{2}+y^{2}} &amp;amp; \frac{1}{x(1+(\frac{y}{x})^{2})} &amp;amp; 0 &amp;amp; 0 \\&#xA;                 \frac{x}{\sqrt{ x^{2} + y^{2}}} &amp;amp; \frac{y}{\sqrt{ x^{2} + y^{2}}} &amp;amp; 0 &amp;amp; 0 &#xA; \end{bmatrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is how  the Jacobian of the observation model has been obtained? and why it is 2X4?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;the model from &lt;a href=&quot;http://www.mrpt.org/Kalman_Filters&quot; rel=&quot;nofollow&quot;&gt;Kalman filter&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="2155" LastEditDate="2013-10-31T04:18:41.040" LastActivityDate="2013-11-01T15:08:00.910" Title="Jacobian of the observation model?" Tags="&lt;kalman-filter&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="2" ClosedDate="2013-10-31T18:58:49.853" ContentLicense="CC BY-SA 3.0" />
  <row Id="1993" PostTypeId="2" ParentId="1974" CreationDate="2013-10-30T08:41:31.120" Score="0" Body="&lt;p&gt;I had problems with servo jitter and power surges when the motors where running which reset the Arduino I was uisng.&#xA;I sorted the problem by using capacitors on my servo &amp;amp; main power rails. My thinking is that you have the same type of noise affecting the IR sensors.&#xA;Take a look at these posts on Let's Make Robots which should help you track down the source of the noise. &lt;br&gt;&#xA;&lt;a href=&quot;http://letsmakerobots.com/node/23297&quot; rel=&quot;nofollow&quot;&gt;http://letsmakerobots.com/node/23297&lt;/a&gt; &lt;br&gt;&#xA;&lt;a href=&quot;http://letsmakerobots.com/node/5549&quot; rel=&quot;nofollow&quot;&gt;http://letsmakerobots.com/node/5549&lt;/a&gt;  &lt;br&gt;&#xA;&lt;a href=&quot;http://letsmakerobots.com/node/3880&quot; rel=&quot;nofollow&quot;&gt;http://letsmakerobots.com/node/3880&lt;/a&gt;  &lt;br&gt;&lt;br&gt;&#xA;If you use the ultrasonic sensors there is a good library for the Arduino called NewPing which has good function within as it can be set a maximum distance to scan for. So if you know the width of the corridor you could half it then set a flag when reading within or outside that range       &lt;/p&gt;&#xA;" OwnerUserId="2099" LastActivityDate="2013-10-30T08:41:31.120" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1994" PostTypeId="2" ParentId="1935" CreationDate="2013-10-30T09:03:46.500" Score="1" Body="&lt;p&gt;You could try this:&#xA;Using wire cable; mount pulleys at each corner of window; then get a suitable motor for your pull requirement (4lbs). wind the cable around the motor shatft then power forward/backward to Maybe use a block and tackle arrangement for increased torque. Don't forget the need for limit stop switches.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This could be cheaper than screw method but might not have same look and feel     &lt;/p&gt;&#xA;" OwnerUserId="2099" LastActivityDate="2013-10-30T09:03:46.500" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="1995" PostTypeId="1" CreationDate="2013-10-30T09:12:57.947" Score="2" ViewCount="2167" Body="&lt;p&gt;I lead a university robotics team that needs PID controllers for four drive motors and two additional motors that are used in a secondary system. I would strongly prefer to buy pre-built PID controllers that provide just about any reasonable interface for setting PID constants, motor velocity and direction, as the controllers are not remotely central to the difficult, interesting problems we're trying to solve. To my astonishment, the Internet doesn't seem to be saturated with such controllers (talk about reinventing the wheel - hundreds of tutorials but almost no pre-built solutions! Did Willow Garage build their own PID controller for the PR2?!). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone have recommendations/experience, preferably pointers to such controllers? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've Googled around quite a bit, and so far &lt;a href=&quot;https://github.com/Exadler/DualMotorControlCape&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt; is the best option I've found. It's a cape for a BeagleBone Black (which is the board we're using). The problem is that the Python library is not finished - it resets PID constants at every call, it doesn't support changing the direction of the motor, and it seems to only support setting motor power, not velocity, which gives me the impression that it's not actually using the PID controller at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additional details:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The stall current of our &lt;a href=&quot;http://www.pololu.com/catalog/product/2271&quot; rel=&quot;nofollow&quot;&gt;drive motors&lt;/a&gt; is 6A. They are brushless DC motors with quadrature encoders. The secondary motors are much smaller, and we're building our own encoders for them.&lt;/li&gt;&#xA;&lt;li&gt;Our code base is in Python, and we're running on a BeagleBone Black using the latest Debian image from Robert Nelson (that guy's awesome!). Our batteries provide 14.8V, and we already have 3.3V and 5V rails.&lt;/li&gt;&#xA;&lt;li&gt;Our robot is fairly small, about 1x1x2 feet, and weighs about 9 pounds. This info is meant to give perspective with regard to scale.&lt;/li&gt;&#xA;&lt;li&gt;$350 or so is the comfortable top range of what we could spend to get all 6 motors PID-controlled.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Any help would be greatly appreciated!&lt;/p&gt;&#xA;" OwnerUserId="2173" LastEditorUserId="2173" LastEditDate="2013-10-31T07:22:18.790" LastActivityDate="2014-01-29T13:16:11.697" Title="Pre-built PID motor controller" Tags="&lt;motor&gt;&lt;pid&gt;&lt;brushless-motor&gt;" AnswerCount="3" CommentCount="10" ClosedDate="2014-01-29T23:31:17.470" ContentLicense="CC BY-SA 3.0" />
  <row Id="1997" PostTypeId="1" AcceptedAnswerId="14967" CreationDate="2013-10-30T16:31:17.353" Score="6" ViewCount="620" Body="&lt;p&gt;For a 6DoF robot with all revolute joints the Jacobian is given by:&#xA;$$&#xA;\mathbf{J} = &#xA;\begin{bmatrix}&#xA;\hat{z_0} \times (\vec{o_6}-\vec{o_0}) &amp;amp; \ldots &amp;amp; \hat{z_5} \times (\vec{o_6}-\vec{o_5})\\&#xA;\hat{z_0} &amp;amp; \ldots &amp;amp; \hat{z_5}&#xA;\end{bmatrix}&#xA;$$&#xA;where $z_i$ is the unit z axis of joint $i+1$(using DH params), $o_i$ is the origin of the coordinate frame connected to joint $i+1$, and $o_6$ is the origin of the end effector.  The jacobian matrix is the relationship between the Cartesian velocity vector and the joint velocity vector:&#xA;$$&#xA;\dot{\mathbf{X}}=&#xA;\begin{bmatrix}&#xA;\dot{x}\\&#xA;\dot{y}\\&#xA;\dot{z}\\&#xA;\dot{r_x}\\&#xA;\dot{r_y}\\&#xA;\dot{r_z}&#xA;\end{bmatrix}&#xA;=&#xA;\mathbf{J}&#xA;\begin{bmatrix}&#xA;\dot{\theta_1}\\&#xA;\dot{\theta_2}\\&#xA;\dot{\theta_3}\\&#xA;\dot{\theta_4}\\&#xA;\dot{\theta_5}\\&#xA;\dot{\theta_6}\\&#xA;\end{bmatrix}&#xA;=&#xA;\mathbf{J}\dot{\mathbf{\Theta}}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a singularity position of a Staubli TX90XL 6DoF robot:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/Ikjas0J.png&quot; alt=&quot;robot with joint 4 and joint 6 aligned pointed down&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\mathbf{J} = &#xA;\begin{bmatrix}&#xA;          -50     &amp;amp;    -425     &amp;amp;    -750      &amp;amp;      0     &amp;amp;    -100      &amp;amp;      0\\&#xA;       612.92     &amp;amp;       0     &amp;amp;       0      &amp;amp;      0     &amp;amp;       0      &amp;amp;      0\\&#xA;            0     &amp;amp; -562.92     &amp;amp;       0      &amp;amp;      0     &amp;amp;       0      &amp;amp;      0\\&#xA;            0     &amp;amp;       0     &amp;amp;       0      &amp;amp;      0     &amp;amp;       0      &amp;amp;      0\\&#xA;            0     &amp;amp;       1     &amp;amp;       1      &amp;amp;      0     &amp;amp;       1      &amp;amp;      0\\&#xA;            1     &amp;amp;       0     &amp;amp;       0      &amp;amp;     -1     &amp;amp;       0      &amp;amp;     -1&#xA;\end{bmatrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can easily see that the 4th row corresponding to $\dot{r_x}$ is all zeros, which is exactly the lost degree of freedom in this position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, other cases are not so straightforward.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/cAUoVq3.png&quot; alt=&quot;robot with joint 4 and joint 6 aligned pointed at an angle&quot;&gt;&#xA;$$&#xA;\mathbf{J} = &#xA;\begin{bmatrix}&#xA;          -50   &amp;amp;   -324.52  &amp;amp;    -649.52   &amp;amp;         0   &amp;amp;   -86.603   &amp;amp;         0\\&#xA;       987.92   &amp;amp;         0  &amp;amp;          0   &amp;amp;         0   &amp;amp;         0   &amp;amp;         0\\&#xA;            0   &amp;amp;   -937.92  &amp;amp;       -375   &amp;amp;         0   &amp;amp;       -50   &amp;amp;         0\\&#xA;            0   &amp;amp;         0  &amp;amp;          0   &amp;amp;       0.5   &amp;amp;         0   &amp;amp;       0.5\\&#xA;            0   &amp;amp;         1  &amp;amp;          1   &amp;amp;         0   &amp;amp;         1   &amp;amp;         0\\&#xA;            1   &amp;amp;         0  &amp;amp;          0   &amp;amp;    -0.866   &amp;amp;         0   &amp;amp;    -0.866&#xA;\end{bmatrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here you can clearly see that joint 4 and joint 6 are aligned because the 4th and 6th columns are the same.  But it's not clear which Cartesian degree of freedom is lost (it should be a rotation about the end effector's x axis in red).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even less straightforward are singularities at workspace limits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/ykxmMUH.png&quot; alt=&quot;robot at workspace limit with no aligned joint axes&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\mathbf{J} = &#xA;\begin{bmatrix}&#xA;          -50     &amp;amp;     650   &amp;amp;       325  &amp;amp;          0    &amp;amp;        0     &amp;amp;       0\\&#xA;       1275.8     &amp;amp;       0   &amp;amp;         0  &amp;amp;         50    &amp;amp;        0     &amp;amp;       0\\&#xA;            0     &amp;amp; -1225.8   &amp;amp;   -662.92  &amp;amp;          0    &amp;amp;     -100     &amp;amp;       0\\&#xA;            0     &amp;amp;       0   &amp;amp;         0  &amp;amp;    0.86603    &amp;amp;        0     &amp;amp;       1\\&#xA;            0     &amp;amp;       1   &amp;amp;         1  &amp;amp;          0    &amp;amp;        1     &amp;amp;       0\\&#xA;            1     &amp;amp;       0   &amp;amp;         0  &amp;amp;        0.5    &amp;amp;        0     &amp;amp;       0&#xA;\end{bmatrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this case, the robot is able to rotate $\dot{-r_y}$ but not $\dot{+r_y}$.  There are no rows full of zeros, or equal columns, or any clear linearly dependent columns/rows.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a way to determine which degrees of freedom are lost by looking at the jacobian?&lt;/p&gt;&#xA;" OwnerUserId="2175" LastActivityDate="2018-01-11T22:15:41.540" Title="Is there a way to determine which degrees of freedom are lost in a robot at a singularity position by looking at the jacobian?" Tags="&lt;robotic-arm&gt;&lt;inverse-kinematics&gt;&lt;industrial-robot&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1998" PostTypeId="2" ParentId="1995" CreationDate="2013-10-30T17:30:56.493" Score="0" Body="&lt;p&gt;Should be able to find something either &lt;a href=&quot;http://www.kbelectronics.com/Variable_Speed_DC_Drives.html&quot; rel=&quot;nofollow&quot;&gt;here at Kb Drives&lt;/a&gt; or &lt;a href=&quot;http://www.geckodrive.com/g320x.html&quot; rel=&quot;nofollow&quot;&gt;at GeckoDrive&lt;/a&gt;&#xA;I think the &quot;problem&quot; is that very few hobbyists actually use servo drives for projects since steppers are simpler. As a result, most of the prebuilt stuff you will find is for industry, with prices to match. Geckodrive has a good reputation (never used them) and their prices are quite reasonable.&lt;/p&gt;&#xA;" OwnerUserId="794" LastActivityDate="2013-10-30T17:30:56.493" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="1999" PostTypeId="2" ParentId="1995" CreationDate="2013-10-30T18:24:46.943" Score="0" Body="&lt;p&gt;These should work well: &lt;a href=&quot;http://www.jrkerr.com/&quot; rel=&quot;nofollow&quot;&gt;http://www.jrkerr.com/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Control via serial w/ tunable PID gains for position, velocity and acceleration. They also require a quadrature encoder signal, so you're good to go in that regard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My boss has used these in previous robotics projects and vouches for them.&lt;/p&gt;&#xA;" OwnerUserId="1960" LastActivityDate="2013-10-30T18:24:46.943" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2000" PostTypeId="1" AcceptedAnswerId="2004" CreationDate="2013-10-30T18:46:37.280" Score="8" ViewCount="5333" Body="&lt;p&gt;I have an unscented Kalman filter (UKF) that tracks the state of a robot. The state vector has 12 variables. Each time I carry out a prediction step, my transfer function (naturally) acts on the entire state. However, my sensors provide measurements of different parts of the robot's state, so I may get roll, pitch, yaw and their respective velocities in one measurement, and then linear velocity in another.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My approach to handling this so far has been to simply create sub-matrices for the covariance, carry out my standard UKF update equations, and then stick the resulting values back into the full covariance matrix. However, after a few updates, the UKF yells at me for trying to pass a matrix that isn't positive-definite into a Cholesky Decomposition function. Clearly the covariance is losing its positive-definite properties, and I'm guessing it has to do with my attempts to update subsets of the full covariance matrix. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As an example taken from an actual log file, the following matrix (after the UKF prediction step) is positive-definite:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;   1.1969            0            0            0            0            0      0.11567            0            0            0            0            0&#xA;        0       1.9682            0            0            0            0            0      0.98395            0            0            0            0&#xA;        0            0       1.9682            0            0            0            0            0      0.98395            0            0            0&#xA;        0            0            0       1.9682            0            0            0            0            0      0.98395            0            0&#xA;        0            0            0            0       1.9682            0            0            0            0            0      0.98395            0&#xA;        0            0            0            0            0       1.9682            0            0            0            0            0      0.98395&#xA;  0.11567            0            0            0            0            0      0.01468            0            0            0            0            0&#xA;        0      0.98395            0            0            0            0            0            1            0            0            0            0&#xA;        0            0      0.98395            0            0            0            0            0            1            0            0            0&#xA;        0            0            0      0.98395            0            0            0            0            0            1            0            0&#xA;        0            0            0            0      0.98395            0            0            0            0            0            1            0&#xA;        0            0            0            0            0      0.98395            0            0            0            0            0            1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;However, after processing the correction for one variable (in this case, linear X velocity), the matrix becomes:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;   1.1969            0            0            0            0            0      0.11567            0            0            0            0            0&#xA;        0       1.9682            0            0            0            0            0      0.98395            0            0            0            0&#xA;        0            0       1.9682            0            0            0            0            0      0.98395            0            0            0&#xA;        0            0            0       1.9682            0            0            0            0            0      0.98395            0            0&#xA;        0            0            0            0       1.9682            0            0            0            0            0      0.98395            0&#xA;        0            0            0            0            0       1.9682            0            0            0            0            0      0.98395&#xA;  0.11567            0            0            0            0            0         0.01            0            0            0            0            0&#xA;        0      0.98395            0            0            0            0            0            1            0            0            0            0&#xA;        0            0      0.98395            0            0            0            0            0            1            0            0            0&#xA;        0            0            0      0.98395            0            0            0            0            0            1            0            0&#xA;        0            0            0            0      0.98395            0            0            0            0            0            1            0&#xA;        0            0            0            0            0      0.98395            0            0            0            0            0            1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The difference between the two matrices above is &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;        0            0            0            0            0            0            0            0            0            0            0            0&#xA;        0            0            0            0            0            0            0            0            0            0            0            0&#xA;        0            0            0            0            0            0            0            0            0            0            0            0&#xA;        0            0            0            0            0            0            0            0            0            0            0            0&#xA;        0            0            0            0            0            0            0            0            0            0            0            0&#xA;        0            0            0            0            0            0            0            0            0            0            0            0&#xA;        0            0            0            0            0            0     -0.00468            0            0            0            0            0&#xA;        0            0            0            0            0            0            0            0            0            0            0            0&#xA;        0            0            0            0            0            0            0            0            0            0            0            0&#xA;        0            0            0            0            0            0            0            0            0            0            0            0&#xA;        0            0            0            0            0            0            0            0            0            0            0            0&#xA;        0            0            0            0            0            0            0            0            0            0            0            0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;As you can see, the only difference between the two is the value in the location of the variance of linear X velocity, which is the measurement I just processed. This difference is enough to &quot;break&quot; my covariance matrix.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have two questions:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Updating a subset of the filter doesn't appear to be the right way to go about things. Is there a better solution?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Alternatively, am I missing a step that would keep my covariance matrix as positive-definite?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It looks like I'm not properly placing the values back into the original covariance matrix. Simply copying the values back isn't sufficient. I need to track the correlation coefficients for the covariance matrix, and make sure that when I update a variance value, I update all the values in its row/column to maintain the correlation coefficient value. I have to do some more testing to verify that this is my issue, but some initial analysis in Matlab suggests that it is. If I'm correct, I'll answer my own question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT 2:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given the response below and after trying it, I can see that my original edit idea won't fly. However, I have one more question:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As this is a UKF, I don't actually have Jacobian matrices. I think I see how I would make it work within the UKF update equations, but even in an EKF - and I ask because I have one of those as well - my state-to-measurement function $h$ is going to end up being the identity matrix, as I am directly measuring my state variables. In the case, I take it my &quot;Jacobian&quot; would just be an $m \times n$ matrix with ones in the $(i, i)$ location, where $i$ is the index of the measured values in the measurement vector?&lt;/p&gt;&#xA;" OwnerUserId="2176" LastEditorUserId="2176" LastEditDate="2013-11-01T13:31:19.383" LastActivityDate="2013-11-01T13:31:19.383" Title="Maintaining positive-definite property for covariance in an unscented Kalman filter update" Tags="&lt;kalman-filter&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="2001" PostTypeId="2" ParentId="1992" CreationDate="2013-10-31T04:19:18.603" Score="3" Body="&lt;p&gt;I've solved the problem by applying&#xA;$$  \frac{\partial h}{\partial x} = &#xA;\begin{bmatrix}&#xA;\frac{\partial z_{b}}{\partial x} &amp;amp; \frac{\partial z_{b}}{\partial y} &amp;amp;&#xA;\frac{\partial z_{b}}{\partial v_{x}} &amp;amp; \frac{\partial z_{b}}{\partial v_{y}} \\&#xA;\frac{\partial z_{r}}{\partial x} &amp;amp; \frac{\partial z_{r}}{\partial y} &amp;amp;&#xA;\frac{\partial z_{r}}{\partial v_{x}} &amp;amp; \frac{\partial z_{r}}{\partial v_{y}}&#xA;\end{bmatrix}  =&#xA;	\begin{bmatrix}  \frac{-y}{x^{2}+y^{2}} &amp;amp; \frac{1}{x(1+(\frac{y}{x})^{2})} &amp;amp; 0 &amp;amp; 0 \\&#xA;					 \frac{x}{\sqrt{x^{2}+y^{2}}} &amp;amp; \frac{y}{\sqrt{x^{2}+y^{2}}} &amp;amp; 0 &amp;amp; 0 \\ &#xA;	\end{bmatrix}&#xA;$$&lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="2155" LastEditDate="2013-11-01T15:08:00.910" LastActivityDate="2013-11-01T15:08:00.910" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="2002" PostTypeId="2" ParentId="1995" CreationDate="2013-10-31T06:47:50.713" Score="0" Body="&lt;p&gt;Check &lt;a href=&quot;http://www.pololu.com&quot; rel=&quot;nofollow&quot;&gt;http://www.pololu.com&lt;/a&gt; , they have few cheap options. If you want more reliable, more expensive solutions, then check &lt;a href=&quot;http://www.copleycontrols.com&quot; rel=&quot;nofollow&quot;&gt;http://www.copleycontrols.com&lt;/a&gt; . Both have solutions that meet your requirements, just find something that suits your budget. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is another option that is used mainly for robotic drive, quite easy to setup, but it also allows you to drive motors individually, worth while looking at : www.robot-electronics.co.uk/htm/md49tech.htm&lt;/p&gt;&#xA;" OwnerUserId="642" LastEditorUserId="642" LastEditDate="2013-10-31T06:59:03.813" LastActivityDate="2013-10-31T06:59:03.813" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2003" PostTypeId="2" ParentId="736" CreationDate="2013-10-31T09:51:04.067" Score="1" Body="&lt;p&gt;I know I'm digging up an old thread and this is sort of off topic, but I don't think you can just get hold of ET1200 chips from Beckhoff. I emailed them a little while back and was advised that I need to join the Ethercat group. To do this I had to demonstrate that I was going to contribute back to the group - ie, by building and selling devices that used the Ethercat stuff. At that (and this) point in time, I am still prototyping my device (a brushless motor controller for robot applications - currently using CAN) so I could not offer anything (I cannot give a solid time for completion - Im still working on my undergrad). I expressed to them my disappointment. They said not to be disappointed!! Pretty funny stuff! &#xA;I would &lt;em&gt;really&lt;/em&gt; like to get into Ethercat, but the ASICs seem to be untouchable to hobbyists or those without a company.&#xA;Also, this is my first post, so apologies if I have angered the gods by digging up an old post!&lt;/p&gt;&#xA;" OwnerUserId="2178" LastActivityDate="2013-10-31T09:51:04.067" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2004" PostTypeId="2" ParentId="2000" CreationDate="2013-10-31T17:03:43.553" Score="8" Body="&lt;p&gt;A few notes first,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, as you mentioned, you can't just pull out a submatrix and do an &lt;em&gt;update&lt;/em&gt; on it. You &lt;em&gt;can&lt;/em&gt; do a propogation step on a submatrix, however. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is because of the cross-covariance terms (which &quot;spread&quot; information across different parts of the state). This is why having a more accurate estimate of your heading will lead to more accurate position estimates, for example. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, following your edit, simply updating the cross-correlation (covariance) terms won't do it either, you need to update the whole matrix (unless you know &lt;em&gt;for sure&lt;/em&gt; that some elements are independent, conditioned on the state estimate.  &lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Here you go:&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;To do this, form the Jacobian matrices as before, but note that there should be zeros in all off-diagonal elements when no part of that state is being measured. Then the magic of matrix inversion will spread the innovation corrections to the correct parts of the state. The Jacobian matrix &lt;em&gt;must&lt;/em&gt; be of size $n\times m$ for $m$ measured values and $n$ state variables (or $m\times n$ depending on your definition of Jacobian). None of this &quot;update part of the covariance junk&quot; unless you know &lt;em&gt;for sure&lt;/em&gt; that the Jacobian elements are equivalent to identity. The safest way is to use the full Jacobian.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Other hacks (once everything is theoretically correct)&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;However, this &lt;em&gt;still&lt;/em&gt; won't ensure PD covariance matrices.&#xA;I strongly &lt;em&gt;strongly&lt;/em&gt; recommend you don't do the following hacks until you fix all the other mistakes. But in the end, for a field-deploy-able system that operates for non-trivial amounts of time, I've found it is almost always necessary to do the following things:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;After all updates, Let covariance $P$ be $P\gets \frac{1}{2}P + \frac{1}{2}P^{T}$, just to &quot;even out&quot; the off-diagonal terms -- for symmetry&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Let $P\gets P + \epsilon I_{n\times n}$, where $\epsilon$ is a small scalar to ensure you don't underflow (and wreck the &lt;a href=&quot;https://en.wikipedia.org/wiki/Condition_number&quot;&gt;condition number&lt;/a&gt; of your matrix)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="163" LastActivityDate="2013-10-31T17:03:43.553" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2005" PostTypeId="2" ParentId="1992" CreationDate="2013-10-31T17:14:51.900" Score="5" Body="&lt;p&gt;The Jacobian is of size $2\times 4$ because you have four state elements and two measurement equations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Jacobian_matrix_and_determinant&quot; rel=&quot;noreferrer&quot;&gt;Jacobian&lt;/a&gt; of the measurement model is the matrix where each $i,j$ element corresponds to the partial derivative of the $i$th measurement equation with respect to the $j$th state element.&lt;/p&gt;&#xA;" OwnerUserId="163" LastActivityDate="2013-10-31T17:14:51.900" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2006" PostTypeId="2" ParentId="1997" CreationDate="2013-10-31T17:28:18.563" Score="4" Body="&lt;p&gt;You need to find the null space, not just look for zero rows or full columns. And I don't mean the null space of &lt;em&gt;any particular&lt;/em&gt; jacobian, I mean the analytic space of all singular configurations, given the closed-form Jacobian. Usually this occurs because of a &lt;a href=&quot;https://en.wikipedia.org/wiki/Gimbal_lock&quot; rel=&quot;nofollow&quot;&gt;gimbal lock&lt;/a&gt; (as opposed to just an unreachable state space)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Doing this in closed form is very, very hard.   But sometimes you can reduce the space a little.&lt;/p&gt;&#xA;" OwnerUserId="163" LastActivityDate="2013-10-31T17:28:18.563" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2007" PostTypeId="2" ParentId="1983" CreationDate="2013-10-31T19:21:48.197" Score="1" Body="&lt;p&gt;I have been working with Numerical Control for more than 30 years. This is a arm of the robotics genera which doesn't appear to be touched upon. What I do is programming, not mechanics. There are several types of jobs available in NC without getting your hands dirty.&#xA;Most of the people I interface with are mechanical and manufacturing engineers. &lt;/p&gt;&#xA;" OwnerUserId="2182" LastEditorUserId="2182" LastEditDate="2013-10-31T19:27:03.100" LastActivityDate="2013-10-31T19:27:03.100" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2009" PostTypeId="1" AcceptedAnswerId="2010" CreationDate="2013-11-01T15:22:32.457" Score="1" ViewCount="645" Body="&lt;p&gt;This is a follow up to &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/2000/maintaining-positive-definite-property-for-covariance-in-an-unscented-kalman-fil/2004#2004&quot;&gt;Maintaining positive-definite property for covariance in an unscented Kalman filter update&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;...but it's deserving of its own question, I think.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am processing measurements in my EKF for a subset of the variables in my state. My state vector is of cardinality 12. I am directly measuring my state variables, which means my state-to-measurement function $h$ is the identity. I am trying to update the first two variables in my state vector, which are the x and y position of my robot. My Kalman update matrices currently look like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;State $x$ (just test values):&#xA;$$&#xA;\left(\begin{array}{ccc}&#xA;0.4018 &amp;amp; 0.0760&#xA;\end{array} \right) &#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Covariance matrix $P$ (pulled from log file): &#xA;$$&#xA;\left(\begin{array}{ccc}&#xA;0.1015 &amp;amp; -0.0137 &amp;amp; -0.2900 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0.0195 &amp;amp; 0.0233 &amp;amp; 0.1004 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\&#xA;-0.0137 &amp;amp; 0.5825 &amp;amp; -0.0107 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0.0002 &amp;amp; -0.7626 &amp;amp; -0.0165 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\&#xA;-0.2900 &amp;amp; -0.0107 &amp;amp; 9.6257 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0.0015 &amp;amp; 0.0778 &amp;amp; -2.9359 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0.0100 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0.0100 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0.0100 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\&#xA;0.0195 &amp;amp; 0.0002 &amp;amp; 0.0015 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0.0100 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\&#xA;0.0233 &amp;amp; -0.7626 &amp;amp; 0.0778 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1.0000 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\&#xA;0.1004 &amp;amp; -0.0165 &amp;amp; -2.9359 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1.0000 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0.0100 &amp;amp; 0 &amp;amp; 0 \\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0.0100 &amp;amp; 0 \\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0.0100 \\&#xA;\end{array} \right) &#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Measurement $z$ (just test values):&#xA;$$&#xA;\left(\begin{array}{ccc}&#xA;2 &amp;amp; 2&#xA;\end{array} \right) &#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;Jacobean&quot; $J$:&#xA;$$&#xA;\left(\begin{array}{ccc}&#xA;1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\&#xA;0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\&#xA;\end{array} \right) $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Measurement covariance $R$ (just test values):&#xA;$$&#xA;\left(\begin{array}{ccc}&#xA;5 &amp;amp; 0 \\&#xA;0 &amp;amp; 5 \\&#xA;\end{array} \right) $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Kalman gain $K = PJ^T(JPJ^T + R)^{-1}$:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\left(\begin{array}{ccc}&#xA;0.0199 &amp;amp; -0.0024 \\&#xA;-0.0024 &amp;amp; 0.1043 \\&#xA;-0.0569 &amp;amp; -0.0021 \\&#xA;0 &amp;amp; 0 \\&#xA;0 &amp;amp; 0 \\&#xA;0 &amp;amp; 0 \\&#xA;0.0038 &amp;amp; 0.0000 \\&#xA;0.0042 &amp;amp; -0.1366 \\&#xA;0.0197 &amp;amp; -0.0029 \\&#xA;0 &amp;amp; 0 \\&#xA;0 &amp;amp; 0 \\&#xA;0 &amp;amp; 0 \\&#xA;\end{array} \right) $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$K$ is 12x2, meaning that my innovation - and therefore both measurement and current state - would need to be 2x1 in order to have a 12x1 result to add to the current full state:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$x' = x + K(z - h(x_s))$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $x_s$ is a vector containing only the parts of the full state vector that I am measuring. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's my question: $K(z - h(x_s))$ yields&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\left(\begin{array}{ccc}&#xA;    0.0272 \\&#xA;    0.1969 \\&#xA;   -0.0948 \\&#xA;         0 \\&#xA;         0 \\&#xA;         0 \\&#xA;    0.0062 \\&#xA;   -0.2561 \\&#xA;    0.0258 \\&#xA;         0 \\&#xA;         0 \\&#xA;         0 \\&#xA;\end{array} \right) $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does it make sense that this vector, which I will add to the current state, has non-zero values in positions other that 1 and 2 (the x and y positions of my robot)? The other non-zero locations correspond to the robot's z location, and the x, y, and z velocities. It seems strange to me that a measurement of x and y should yield changes to other variables in the state vector. Am I incorrect in this assumption?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Incidentally, the covariance update works very well with the Jacobean in this form, and maintains its positive-definite property.&lt;/p&gt;&#xA;" OwnerUserId="2176" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2013-11-01T17:32:16.437" Title="EKF partial state update question" Tags="&lt;kalman-filter&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2010" PostTypeId="2" ParentId="2009" CreationDate="2013-11-01T17:32:16.437" Score="3" Body="&lt;p&gt;According to your covariance matrix it does make sense. The third column of the first row is sigma_xz, and is nonzero, which means, according to your covariance matrix, the random variable z is correlated to the random variable x, and so changes in x will affect z. If you further analyze your covariance matrix, it seems that Z is correlated to Y (element (2,3) of covariance matrix is nonzero) and, of course, itself (element (3,3) of covariance matrix). For the velocities, it certainly makes sense that updates in position will update your velocity because the EKF is simply capturing information regarding changes in state. Again if you look at the covariance matrix, I assume the 7th, 8th and 9th elements of your state vector are the velocity in x, y and z. In the covariance matrix, the elements (1,7), (1,8), and (1,9) are all nonzero so the 3 velocities are correlated to your x position...further analysis shows that they're also correlated to your Y and Z position by similar arguments.&lt;/p&gt;&#xA;" OwnerUserId="1960" LastActivityDate="2013-11-01T17:32:16.437" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2011" PostTypeId="1" CreationDate="2013-11-01T22:51:49.267" Score="9" ViewCount="3986" Body="&lt;p&gt;I am trying to control the &lt;a href=&quot;https://www.sparkfun.com/products/10336&quot; rel=&quot;noreferrer&quot;&gt;Rover 5 robot&lt;/a&gt; using an Android app with a touch-based joystick control in the app UI. I want to calculate the speed of the left and right motors in the rover when joystick is moved.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the joystick, I get two values, pan and tilt. I convert them into the &lt;a href=&quot;http://en.wikipedia.org/wiki/Polar_coordinate_system&quot; rel=&quot;noreferrer&quot;&gt;polar coordinate system&lt;/a&gt; with &lt;code&gt;r&lt;/code&gt; and &lt;code&gt;theta&lt;/code&gt;. Where r ranges from 0 to 100 and theta from 0 to 360. I want to derive an equation which can convert the &lt;strong&gt;&lt;code&gt;(r, theta)&lt;/code&gt;&lt;/strong&gt; to &lt;strong&gt;&lt;code&gt;(left_speed, right_speed)&lt;/code&gt;&lt;/strong&gt; for rover. The speed values also are in the [0;100] range.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, here is what I have figured out till now. For any value of &lt;code&gt;r&lt;/code&gt;, &lt;br&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If &lt;code&gt;theta = 0&lt;/code&gt; then &lt;code&gt;left_speed = r, right_speed = -r&lt;/code&gt; (turning right on spot) &lt;br&gt;&#xA;If &lt;code&gt;theta = 90&lt;/code&gt; then &lt;code&gt;left_speed = r, right_speed = r&lt;/code&gt; (moving forward at speed r) &lt;br&gt;&#xA;If &lt;code&gt;theta = 180&lt;/code&gt; then &lt;code&gt;left_speed = -r, right_speed = r&lt;/code&gt; (turning left on spot) &lt;br&gt;&#xA;If &lt;code&gt;theta = 270&lt;/code&gt; then &lt;code&gt;left_speed = -r, right_speed = -r&lt;/code&gt; (moving backwards at speed r) &lt;br&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For other values, I want it moving and turning simultaneously. For example,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If &lt;code&gt;theta = 45&lt;/code&gt; then &lt;code&gt;left_speed = alpha*r, right_speed = beta*r&lt;/code&gt; (moving forward while turning right) &lt;br&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, basically for any &lt;code&gt;(r, theta)&lt;/code&gt;, I can set speeds as,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;(left_speed, right_speed) = (alpha*r, beta*r)&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need to formulate an equation where I can generalize all these cases by finding &lt;code&gt;alpha&lt;/code&gt; and &lt;code&gt;beta&lt;/code&gt; based on &lt;code&gt;theta&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I do this? Is there is any existing work I can refer to?&lt;/p&gt;&#xA;" OwnerUserId="1144" LastEditorUserId="1906" LastEditDate="2014-01-16T00:20:12.743" LastActivityDate="2014-01-16T00:20:12.743" Title="How to calculate the right and left speed for a tank-like rover?" Tags="&lt;control&gt;&lt;kinematics&gt;&lt;movement&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2012" PostTypeId="2" ParentId="2011" CreationDate="2013-11-02T05:21:34.647" Score="2" Body="&lt;p&gt;What you want is angular velocity proportional to the cosine of the angle, it seems, with positive to the right, and negative to the left.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, since we know that angular velocity is given by $\frac{V_l - V_r}{D}$ where $D$ is the diameter of the robot, we're all set.  Try this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;if $\theta\ge0$ and $\theta\le90$: $V_l \gets r$ and $V_r \gets r\sin(2\theta-90)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;if $\theta &amp;lt; 0$ and $\theta\geq-90$: $V_r \gets -r$ and $V_l \gets r\sin(2\theta+90)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Swap the velocities for the other quadrants. Note, this won't &quot;feel&quot; like driving a car, as moving the stick to the lower-right will turn backwards and rotate right, whereas a car in reverse with the wheel right will move backwards and turn leftward.  Just a weirdness of differential drives...  You can adjust for this by just applying the fourth quadrant rules to the third quadrant $\theta$ and visa-versa.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I used $\theta \in [-180,+180]$, which you can get by:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\theta \gets \text{atan2}(\sin\theta,\cos\theta)$ (watch your units though, atan2 is usually radians.&lt;/p&gt;&#xA;" OwnerUserId="163" LastActivityDate="2013-11-02T05:21:34.647" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2013" PostTypeId="2" ParentId="1976" CreationDate="2013-11-02T10:15:11.100" Score="0" Body="&lt;p&gt;I've worked with the same sonar in a similar setting, and your only real option (if you can't do anything to the pool itself) is to find an open water testing area. You could also contact BlueView. They're pretty responsive.&lt;/p&gt;&#xA;" OwnerUserId="2176" LastActivityDate="2013-11-02T10:15:11.100" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2014" PostTypeId="2" ParentId="1978" CreationDate="2013-11-02T13:01:09.793" Score="2" Body="&lt;p&gt;You have to calibrate the accelerometer to compensate for this. Usually, calibrating an accelerometer consists of finding a scaling factor and an offset vector. So the calibrated measurement vector Z can be written as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Z = aX + B, where a is the scaling factor, B the offset vector and X is the 'raw' measurement vector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you mount the accelerometer on a device, the accelerometer axis system should be aligned with the device body axis system. If this is not the case, for example if the pcb is rotated or upside down, the calibrated measurement Z should be converted to the body axis system using a rotation matrix. You can combine the rotation matrix with the scaling factor a, so you get:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Z = AX + B. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A is now a 3x3 matrix. Z is the calibrated measurent in the device body axis system.&#xA;The values of the 3x3 matrix A and the 3-element vector B are found by putting the device in a number of known, fixed orientations, so you know Z. By measuring X, you get a set of linear equations that you can solve to find A and B.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this helps.&lt;/p&gt;&#xA;" OwnerUserId="2186" LastActivityDate="2013-11-02T13:01:09.793" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2015" PostTypeId="2" ParentId="1978" CreationDate="2013-11-02T22:30:28.927" Score="1" Body="&lt;p&gt;This behavior is usually specified in the datasheet. For example, in table 1 of the datasheet of the BMA020 accelerometer you have the entry &quot;Sensitivity&quot;. Probably you are operating your sensor with a 2g range. If your sensor has a temperature of 25°C, according to the datasheet the raw output of your sensor is typically 256 LSB if it is exposed to a acceleration of 1.0 g. As specified in the datasheet, this is only the typical value. Each manufactured sensor is a little bit different and thus the &quot;min&quot; and &quot;max&quot; columns define other possible values, depending on your specific sensor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your question you talk about measurements in g units and not in LSB. Thus, the code operating your accelerometer already converts the raw measurements to g units. The conversion algorithm can range from very simple algorithms to very sophisticated algorithms. An ideal conversion algorithm would incorporate all errors your sensor makes due to production variations and due to the current operation conditions. To compensate for the production variations this conversion algorithm should make use of calibration values which you found for your specific accelerometer or which are known from factory calibration (expensive sensors). Additionally, if you look at your datasheet again, you see that the sensitivity of your accelerometer depends on the operation temperature. Thus, if the defined error due to temperature change is too high for your application, you need to add an temperature sensor and your conversion algorithm should use the temperature to correct for this error too. There are also additional error sources defined in the datasheet and the algorithm for converting your raw measurements to g units can get very sophisticated. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus, the reason why your sensors don't output 1 g is simply that you're using some conversion algorithm to get from the raw sensor readings to g units and this algorithm probably neither uses any calibrated values specific to your sensor nor does it incorporate the current environment conditions. &lt;/p&gt;&#xA;" OwnerUserId="2189" LastActivityDate="2013-11-02T22:30:28.927" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2016" PostTypeId="2" ParentId="2011" CreationDate="2013-11-02T22:40:56.483" Score="12" Body="&lt;p&gt;You're trying to find a formula to convert a given $(r, \theta)$ to left and right thrust percentages, where $r$ represents your throttle percentage.  The naive implementation is to base your function on 100% throttle:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;At $0 ^{\circ}$, left and right thrust are equal to $r$&lt;/li&gt;&#xA;&lt;li&gt;At $\pm45 ^{\circ}$, one side's thrust equals $r$ and the other side's equals 0&lt;/li&gt;&#xA;&lt;li&gt;At $\pm 90 ^{\circ}$, one side's thrust equals $r$ and the other side's equals $-r$&lt;/li&gt;&#xA;&lt;li&gt;At $180 ^{\circ}$, left and right thrust are equal to $-r$&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This produces a function like the following:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZaZpz.png&quot; alt=&quot;Thrust ratios for 100% throttle&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem with this implementation is that &lt;em&gt;you are only providing the desired $r$ when $\theta$ is at an exact multiple of $90 ^{\circ}$&lt;/em&gt;.  At all other points, you sacrifice total speed for control.  You can see this in the graph: &quot;Absolute Thrust&quot;, the amount of thrust being delivered by both motors, is not (and cannot be) constant in this regime.  Simply scaling this function is not optimal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The maximum absolute thrust that can be sustained over the entire range of $\theta$ occurs when $r=50\%$ -- &lt;strong&gt;this is what your function should be based on&lt;/strong&gt;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/QSS1W.png&quot; alt=&quot;Thrust ratios for 100% throttle&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this implementation, total thrust remains constant between $\pm45 ^{\circ}$, and absolute thrust is constant no matter what direction is chosen -- the motors trade off their thrust to maintain the desired $r$.  Above $r=50\%$, the range of angles where your total thrust can satisfy $r$ begins to shrink -- you begin to sacrifice control for speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This produces a python function like the following:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;# assumes theta in degrees and r = 0 to 100 %&#xA;# returns a tuple of percentages: (left_thrust, right_thrust)&#xA;def throttle_angle_to_thrust(r, theta):&#xA;    theta = ((theta + 180) % 360) - 180  # normalize value to [-180, 180)&#xA;    r = min(max(0, r), 100)              # normalize value to [0, 100]&#xA;    v_a = r * (45 - theta % 90) / 45          # falloff of main motor&#xA;    v_b = min(100, 2 * r + v_a, 2 * r - v_a)  # compensation of other motor&#xA;    if theta &amp;lt; -90: return -v_b, -v_a&#xA;    if theta &amp;lt; 0:   return -v_a, v_b&#xA;    if theta &amp;lt; 90:  return v_b, v_a&#xA;    return v_a, -v_b&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The result is the following:&#xA;&lt;img src=&quot;https://i.stack.imgur.com/w7yVQ.gif&quot; alt=&quot;animated right/left function&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2013-11-04T21:57:54.870" LastActivityDate="2013-11-04T21:57:54.870" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="2017" PostTypeId="2" ParentId="1935" CreationDate="2013-11-03T14:04:53.690" Score="0" Body="&lt;p&gt;If you want to be cheap....you could go to a junk yard and grab a linear actuator used for opening and closing car door windows.  &lt;/p&gt;&#xA;" OwnerUserId="2190" LastActivityDate="2013-11-03T14:04:53.690" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2018" PostTypeId="1" CreationDate="2013-11-04T10:42:55.843" Score="1" ViewCount="1437" Body="&lt;p&gt;I am new in robotics. May be this question looks like too naive but i want to know which is a better board among Arduino Uno R3 or Roboduino ATMega168 or Arduino Mega 2560 R3 for my purpose mention below - &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A simple robot with wheels, can move around.&lt;/li&gt;&#xA;&lt;li&gt;Can have IR sensors and camera.&lt;/li&gt;&#xA;&lt;li&gt;Is powerful enough to deal with computer vision computations.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Arduino Mega 2560 R3 looks more powerful than the other too, I just want to know if my purpose can be solved with other two boards too?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="2191" LastActivityDate="2013-11-20T11:15:47.787" Title="Arduino Uno R3 or Roboduino ATMega168 or Arduino Mega 2560 R3 which board is better for small robots" Tags="&lt;arduino&gt;" AnswerCount="3" CommentCount="1" ClosedDate="2013-12-08T21:20:54.097" ContentLicense="CC BY-SA 3.0" />
  <row Id="2019" PostTypeId="2" ParentId="2018" CreationDate="2013-11-04T13:37:34.000" Score="1" Body="&lt;p&gt;The Mega is a great board, I use it for my robot. If your robot is small and space is limited, the size of the Mega could be an issue...&#xA;Hopefully, SeeedStudio has made and Seeeduino Mega which is almost the size of an Arduino UNO.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For computer vision though, I'm not sure the Mega will be powerfull enough. And if it is, it won't be able to do anything else during the computation (because of the way the Arduino works).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So maybe you should take a look at the Raspberry Pi. It has great camera modules you can use and is powerful enough for some computation. There are shields avalaible to connect and easily use Arduino shields for your motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope it helps! :)&lt;/p&gt;&#xA;" OwnerUserId="2031" LastActivityDate="2013-11-04T13:37:34.000" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2020" PostTypeId="2" ParentId="2018" CreationDate="2013-11-04T13:40:58.257" Score="2" Body="&lt;p&gt;I'm not sure you can achieve computer vision on any of those chips. &#xA;Way to go is to stream video to distributed PC, make calculations, stream commands to arduino. That could probably work, but there is also a question of how much frames you could grab from camera with Arduino.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Raspberry Pi would give you around 9fps in OpenCV while recognizing faces. Maybe you could achieve around 15-20 top if you just need movement detection...&lt;/p&gt;&#xA;" OwnerUserId="973" LastActivityDate="2013-11-04T13:40:58.257" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2021" PostTypeId="1" AcceptedAnswerId="2051" CreationDate="2013-11-05T07:12:11.477" Score="3" ViewCount="3206" Body="&lt;p&gt;I'm using the telemetry kit from &lt;a href=&quot;http://store.3drobotics.com/products/3dr-radio&quot; rel=&quot;nofollow&quot;&gt;3DR robotics&lt;/a&gt; (433MHz) to interface with Ardupilot Mega 2.6, controlling a quadcopter. The &lt;a href=&quot;http://planner.ardupilot.com/&quot; rel=&quot;nofollow&quot;&gt;Mission Planner&lt;/a&gt; (v1.2.84) by Michael Oborne works well with the telemetry kit, transmitting flight data (IMU, compass, GPS etc.) from the quadcopter to the GCS and displaying them in their GUI.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I would like to see the same data in the hyperterminal (windows system). The radio receiver on the GCS connects to my PC through a USB drive. I have tried calling the remote radio station using all possible Baud rates, starting from 110 to 921600 (including 57600). I've set the &lt;strong&gt;data bits to 8&lt;/strong&gt; and &lt;strong&gt;stop bits to 1&lt;/strong&gt;. &lt;strong&gt;'None'&lt;/strong&gt; for &lt;strong&gt;parity&lt;/strong&gt; and &lt;strong&gt;flow control&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, all that I ever get on my terminal is either gibberish or no data at all. I also tried burning this &lt;a href=&quot;http://vps.oborne.me/3drradioconfig.zip&quot; rel=&quot;nofollow&quot;&gt;software&lt;/a&gt; to the radio receiver and tried using AT commands on the radio. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It connects OK with '+++', but keeps returning error for AT1, ATT etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please give me an idea about how to get flight data at the hyperterminal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="1949" LastActivityDate="2018-02-11T17:56:46.853" Title="Telemetry with Ardupilot 2.6" Tags="&lt;quadcopter&gt;&lt;ardupilot&gt;" AnswerCount="3" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2022" PostTypeId="1" AcceptedAnswerId="2023" CreationDate="2013-11-05T11:10:07.917" Score="3" ViewCount="202" Body="&lt;p&gt;This is my first question on this site, might be a little subjective :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is an ongoing process of many cool cyclonic changes of technology in the electronics and software industry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Concurrency and Parallelism&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What will be the implications of GPGPU, Multi-core  and &quot;programming in the large&quot; model in the specific case of embedded software, and how will it influence the styles and conventions in the community?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Single board multicore hardware like soon to be released Parallela can be an example?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Programming language research&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The results have been excellent. Functional Programming has supposedly started reaching the masses. It was late night previous weekend when I briefly skimmed through an example of functional reactive programming to solve real time problems. AI people are also suggesting that we should be programming our robots in Declarative Domain Specific languages soon. It would be nice to know the implications on the robotics community. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There has been a tremendous growth of frameworks like ROS and Urbi too!! That should be the region to look upon.. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most of the robotics, embedded and high performance AI codebase directly depends on C/C++ , and though languages like Rust and D are bubbling up, wouldn't it take massive amount of time to adopt the new languages, if ever adaptation begins? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;AI&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Correct me, but it seems like a lot of time has passed and there are not many major production results from the AI community. I've heard about cognitive architectures of old like ACT-R and 4CAPS. They seem to be in hibernation mode! &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There seems to be a lot of work lately on otherwise intelligent systems (solved problems) like Computer vision and Data mining, but these problems cater to supercomputing and industrial crowd more. Could there be any possible shift towards low powered systems soon?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="2196" LastEditorUserId="19515" LastEditDate="2020-07-25T00:36:08.940" LastActivityDate="2020-07-25T00:36:08.940" Title="How will the currently evaluated computer technology influence robotics and embedded systems in the foreseeable future?" Tags="&lt;software&gt;&lt;artificial-intelligence&gt;&lt;programming-languages&gt;&lt;beginner&gt;&lt;embedded-systems&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="2" ClosedDate="2013-11-05T22:44:21.890" ContentLicense="CC BY-SA 4.0" />
  <row Id="2023" PostTypeId="2" ParentId="2022" CreationDate="2013-11-05T11:50:32.130" Score="1" Body="&lt;p&gt;There's a lot of advancement on the software side, but there are many reasons why we don't currently see them on robots.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, notice that there are a huge variety of robots already built or possibly built in the future. So let's look at a couple of them:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Manipulators: A manipulator is just an arm. You define a task for it, it does it. It's dumb, it's big and it's plugged in the wall at some factory. Do you really need AI or parallel processing for a manipulator? Does the programming language even matter? Probably not.&lt;/li&gt;&#xA;&lt;li&gt;Small mobile robots: a variety of robots are small, or could be small. The biggest issue on those robots is power. To process heavily, you need more power. To provide more power, you need bigger batteries. To carry bigger batteries you need stronger motors. Stronger motors are big and need a bigger support. In short, small robots have to be really energy efficient, that's why they also can't be processing too much. GPGPU's and complicated AI is usually off limits for those robots.&lt;/li&gt;&#xA;&lt;li&gt;Humanoids: This is probably what you have been thinking when you asked the question. So let's continue this answer assuming you are talking about humanoids, or more generally big mobile robots.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What will be the implications of GPGPU, Multi-core and &quot;programming in the large&quot; model in the specific case of embedded software,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It would be great! Besides the fact that you need proper hardware (actual computers vs. microcontrollers), it would be great. I believe this would specifically be helpful on areas where there is need for processing of huge input data, such as vision or tactile input.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;and how will it influence the styles and conventions in the community?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Probably not much. Software is done in modules. Someone writes an odometry module and you use it. If they change the odometry implementation underneath, you won't notice it (much). Using GPGPUs is low-level enough to be part of lower level libraries, and often the actual users (programmers) of the robot would be unaware of it. Multi-core processing is all too easy and I think it's already widely used (you just make threads!)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Functional Programming has supposedly started reaching the masses. It was late night previous weekend when I briefly skimmed through an example of functional reactive programming to solve real time problems. AI people are also suggesting that we should be programming our robots in Declarative Domain Specific languages soon. It would be nice to know the implications on the robotics community.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Basically all non-joke (and even some joke) programming languages we have are turing-complete. This means that they can all get the job done. So choosing a language is really just a matter of convenience. Currently, C is the ubiqutous languange for every architecture. Everything can link to C and C is compiled on the remotest microcontroller on this planet. I don't think C could be put aside.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For higher level programming, I don't see any reason why any language couldn't be used. If the robot is controlled by a computer (vs. a microcontroller), it can probably run anything compiled or interpreted in any language.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding real-time, probably you are misusing the word. If you are actually referring to an actual &lt;a href=&quot;https://en.wikipedia.org/wiki/Real-time_computing&quot; rel=&quot;nofollow&quot;&gt;real-time system&lt;/a&gt;, then probably the biggest obstacles are the tools. Believe it or not, there are not many good ones. I program in real-time and trust me, there's something wrong with each of them. Still, you'd probably be forced to write in C or C++ if you want to use any of those tools.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;There has been a tremendous growth of frameworks like ROS and Urbi too!! That should be the region to look upon.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I don't know Urbi, but I know ROS. ROS is quite famous, and everything you make, people immediately request a ROS module. It's nice, it works, but it's not perfect. Biggest flaw is that it can't be real-time, but they can't really be blamed. What I mean is, it's not a region to look upon, it's a region where people are already at.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Most of the robotics, embedded and high performance AI codebase directly depends on C/C++, and though languages like Rust and D are bubbling up, wouldn't it take massive amount of time to adopt the new languages, if ever adaptation begins?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It sure will. As for embedded systems, I doubt it would ever change away from C, definitely not to a functional language. C is quite low-level yet very high-level. It's at the exact sweet spot for embedded programming. You can be portable yet have access to all hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Embedded programming is in direct violation of most of what's important in a functional language. The fact that you are working with hardware means that the functions can't be pure (in Haskell, they would be IO). So what would be the benefit of functional programming if most functions are not-pure and their results can't be cached? Besides, it's not even practical to load a whole interpreter of a functional language in a tiny microcontroller and hope to be able to use all sorts of dynamic caching during runtime to compensate for lack of non-functional language structures.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In short for microcontrollers, functional languages simply aren't fit. For &quot;high performance AI codebases&quot;, there is again no reason why they can't be used. It's just that people have to pick up one of those languages and start using it. Biggest problem is though that People are lazy and don't like change.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Correct me, but it seems like a lot of time has passed and there are not many major production results from the AI community. I've heard about cognitive architectures of old like ACT-R and 4CAPS. They seem to be in hibernation mode!&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;They are not in hibernation mode. The nature of the research has changed. Take a look at &lt;a href=&quot;https://en.wikipedia.org/wiki/Artifical_intelligence#History&quot; rel=&quot;nofollow&quot;&gt;a very brief history of AI on Wikipedia&lt;/a&gt;. Whereas in the 80s you would see for example a lot of algorithms developed on solving NP-complete problems, now you see artifical intelligence for example in Kinect that you usually don't think of as &quot;intelligent&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is also a lot of way more complicated research going on such as cognitive science and others. My personal feeling is that they are still maturing and not yet at a stage that could be widely used. Either that, or I have just been ignorant about it myself.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;There seems to be a lot of work lately on otherwise intelligent systems (solved problems) like Computer vision and Data mining, but these problems cater to supercomputing and industrial crowd more. Could there be any possible shift towards low powered systems soon?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Could there? Yes. Would there? Probably not. Like I said before, heavy processing requires power and power is very precious on a (mobile) robot. There would however definitely be a middle-ground used in robotics. Perhaps not a super complete AI, but a dumbed down, simpler one (but still more intelligent than current) would be placed on robots.&lt;/p&gt;&#xA;" OwnerUserId="158" LastEditorUserId="158" LastEditDate="2013-11-05T13:28:38.440" LastActivityDate="2013-11-05T13:28:38.440" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2024" PostTypeId="1" AcceptedAnswerId="2026" CreationDate="2013-11-06T00:19:13.383" Score="1" ViewCount="173" Body="&lt;p&gt;I have an old beat-up netbook that is currently collecting dust. I've also only taken stuff apart, without having to worry about putting it back together, so please bear with my possibly stupid questions. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;a) I imagine it's possible to wire this baby up to servos, breadboards, and all that good stuff. Am I correct? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;b) I'd like to start with some simple Raspberry Pi-like projects (think automating my irrigation system, feeding the dog from work, etc). Obviously barring the energy expenditure, wouldn't a netbook be more apt than a Raspberry Pi for handling this type of thing?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;c) I have basic Python experience, but I wouldn't mind picking up more as I go. Would that be sufficient?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cheers!&lt;/p&gt;&#xA;" OwnerUserId="2198" LastActivityDate="2013-11-06T09:31:32.717" Title="Roboticize an old netbook?" Tags="&lt;raspberry-pi&gt;&lt;python&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2013-11-09T06:34:20.903" ContentLicense="CC BY-SA 3.0" />
  <row Id="2026" PostTypeId="2" ParentId="2024" CreationDate="2013-11-06T09:31:32.717" Score="0" Body="&lt;p&gt;Of course this can be done, however the important bit isn't really the netbook here. The important bit is the type of interface you decide to use and the command language you code in to control that interface.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your netbook probably has USB and possibly serial - but you need to have a way to connect these to relays and voltage control devices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;X10 or NexTag produce a range of USB compatible interfaces, and provide a controller language. They provide a very simple, beginner's route to home automation and control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For more fun, you could build your own serial interface board - which converts the signals from the 9 serial pins to useful output, but this is more of an electronics project - not for the faint hearted :-)&lt;/p&gt;&#xA;" OwnerUserId="67" LastActivityDate="2013-11-06T09:31:32.717" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2027" PostTypeId="1" CreationDate="2013-11-06T10:05:13.153" Score="4" ViewCount="2799" Body="&lt;p&gt;I'm reading &lt;a href=&quot;http://wiki.ros.org/amcl&quot; rel=&quot;nofollow&quot;&gt;amcl&lt;/a&gt; document on ROS Wiki. In its subscribed topics there is not odometry topic, why? It works only with laser?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Subscribed Topics:&lt;/strong&gt; (From ROS Wiki)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;scan (sensor_msgs/LaserScan)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;tf (tf/tfMessage)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;initialpose (geometry_msgs/PoseWithCovarianceStamped)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;map (nav_msgs/OccupancyGrid)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And my next question is how can I use &lt;code&gt;amcl&lt;/code&gt; in &lt;code&gt;Gazebo&lt;/code&gt; simulator for turtlebot? Any tutorial available?&lt;/p&gt;&#xA;" OwnerUserId="2202" LastActivityDate="2014-08-30T12:46:55.040" Title="ROS AMCL does not need odometry data?" Tags="&lt;slam&gt;&lt;ros&gt;&lt;navigation&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2028" PostTypeId="1" AcceptedAnswerId="2035" CreationDate="2013-11-06T12:28:56.787" Score="5" ViewCount="22829" Body="&lt;p&gt;I've got a code where I have a motor running back and forth and buttons connected to a scanner, when I press the buttons it causes the motor to stop  and over rides it. I would like them to run parallel to each other so the codes don't interrupt each other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is my code&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;AccelStepper.h&amp;gt;&#xA;&#xA;// Define some steppers and the pins they will use&#xA;&#xA;AccelStepper stepper1(AccelStepper::FULL2WIRE, 2, 3);&#xA;&#xA;const int buttonPin = 4;&#xA;const int button2Pin = 14;&#xA;const int pulseopto1 = 9;&#xA;const int startScan = 11;&#xA;&#xA;int buttonState = 0;&#xA;long previousMillis = 0;&#xA;long interval = 5;&#xA;&#xA;void setup()&#xA;{&#xA;    pinMode(buttonPin, INPUT);&#xA;    pinMode(button2Pin, INPUT);&#xA;    pinMode(pulseopto1, OUTPUT);&#xA;    pinMode(startScan, OUTPUT); &#xA;    stepper1.setMaxSpeed(40000.0);&#xA;    stepper1.setAcceleration(100000.0);&#xA;    stepper1.moveTo(25000);&#xA;}&#xA;&#xA;void loop()&#xA;{&#xA;    buttonState = digitalRead(buttonPin);&#xA;&#xA;    if (buttonState == LOW)&#xA;    {&#xA;        digitalWrite(startScan, HIGH);&#xA;    }&#xA;    else (buttonState == HIGH);&#xA;    {&#xA;        digitalWrite(startScan, LOW);&#xA;    }&#xA;&#xA;    {&#xA;        buttonState = digitalRead(button2Pin);&#xA;&#xA;        if (buttonState == LOW)&#xA;        {&#xA;            // turn LED on:&#xA;            digitalWrite(pulseopto1, HIGH);&#xA;            delay(5);&#xA;            digitalWrite(pulseopto1, LOW);&#xA;            delay(5);&#xA;        }&#xA;        else&#xA;        {&#xA;            // turn LED off:&#xA;            digitalWrite(pulseopto1, LOW);&#xA;        }&#xA;    }&#xA;&#xA;    // Change direction at the limits&#xA;    if (stepper1.distanceToGo() == 0)&#xA;    {&#xA;        stepper1.moveTo(-stepper1.currentPosition());&#xA;    }&#xA;&#xA;    stepper1.run();&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="2091" LastEditorUserId="142" LastEditDate="2013-11-06T14:16:24.163" LastActivityDate="2018-12-11T16:06:11.607" Title="Is it possible to run multiple loops at the same time? (Arduino)" Tags="&lt;arduino&gt;&lt;stepper-motor&gt;&lt;c&gt;" AnswerCount="5" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2029" PostTypeId="2" ParentId="2028" CreationDate="2013-11-06T14:06:45.303" Score="1" Body="&lt;p&gt;What do you mean by override? Does the motor stop or does it start turning in the wrong direction?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is something weird going on with the brackets in the loop() function&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;if (buttonState == LOW)&#xA;{&#xA;    digitalWrite(startScan, HIGH);&#xA;}&#xA;else (buttonState == HIGH);  //This shouldn't be here. Just use else&#xA;{&#xA;    digitalWrite(startScan, LOW); &#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I'm not sure, but I don't think you need to call stepper1.run() in the loop function. Try placing it at the end of the setup() function instead.&lt;/p&gt;&#xA;" OwnerUserId="2206" LastActivityDate="2013-11-06T14:06:45.303" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2030" PostTypeId="2" ParentId="2028" CreationDate="2013-11-06T19:07:25.987" Score="2" Body="&lt;p&gt;I think you should look into the Arduino's attachInterrupt function. You would connect the buttons to a specific interrupt pin on the Arduino and then write a small simple interrupt handler that would be called when that interrupt fires. You can configure the interrupt to fire while low, on a rising edge, on a falling edge, or on a change of the interrupt pin. This way you don't have to poll your buttons, and it will make your main loop cleaner/easier to write.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's the arduino webpage for attachInterrupt(): &lt;a href=&quot;http://arduino.cc/en/Reference/attachInterrupt&quot; rel=&quot;nofollow&quot;&gt;http://arduino.cc/en/Reference/attachInterrupt&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;edit: You should also comment your code so we know what you are trying to do, and possibly give us a description of your hardware setup (what are pins of Arduino actually connected to).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given the syntax error that TheRussian pointed out, I don't understand how this code compiles.&lt;/p&gt;&#xA;" OwnerUserId="1960" LastEditorUserId="1960" LastEditDate="2013-11-06T19:13:38.213" LastActivityDate="2013-11-06T19:13:38.213" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2031" PostTypeId="1" AcceptedAnswerId="2033" CreationDate="2013-11-07T06:17:38.840" Score="3" ViewCount="3817" Body="&lt;p&gt;In &lt;strong&gt;ROS&lt;/strong&gt; I've recorded a bag file from a custom robot (in real world) that does not provide covariance matrix and I want to use &lt;code&gt;/odom&lt;/code&gt; to feed an &lt;strong&gt;EKF&lt;/strong&gt;, but covariance matrix is 0. How can I calculate it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;:&#xA;Covariance matrix is needed by EKF to estimate position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's a sample of &lt;code&gt;/odom&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;pose: &#xA;  pose: &#xA;    position: &#xA;      x: 0.082&#xA;      y: 0.507&#xA;      z: 0.0&#xA;    orientation: &#xA;      x: 0.0&#xA;      y: 0.0&#xA;      z: -0.789272088731&#xA;      w: 0.614043622188&#xA;  covariance: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]&#xA;twist: &#xA;  twist: &#xA;    linear: &#xA;      x: 0.104&#xA;      y: 0.0&#xA;      z: 0.0&#xA;    angular: &#xA;      x: 0.0&#xA;      y: 0.0&#xA;      z: 0.0663225115758&#xA;  covariance: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="2202" LastActivityDate="2013-11-07T13:33:51.217" Title="Calculate covariance matrix from x,y,z data" Tags="&lt;localization&gt;&lt;ros&gt;&lt;odometry&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2032" PostTypeId="1" CreationDate="2013-11-07T10:57:25.743" Score="3" ViewCount="743" Body="&lt;p&gt;From the designs usually shown of rocker bogie systems, the whole weight of platform seems to be supported by only one rod, be it differential bar or gear. Isn't this a bit unstable system because if we have arms of rover at one end we will have a high torque about that rod?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is my understanding such rocker bogie systems correct? If so, are there any solutions to this problem which don't sacrificing the functionality of rover?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To clarify, I want to know how rovers like curiosity are designed so as to balance such a heavy platform with a differential bar mechanism. I am trying to make a small rocker bogie myself and I want to avoid this anticipated problem.&lt;/p&gt;&#xA;" OwnerUserId="2212" LastEditorUserId="37" LastEditDate="2014-01-29T23:49:40.313" LastActivityDate="2014-05-01T22:11:05.287" Title="Rocker bogie suspension stability" Tags="&lt;mobile-robot&gt;&lt;design&gt;&lt;wheeled-robot&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2033" PostTypeId="2" ParentId="2031" CreationDate="2013-11-07T13:33:51.217" Score="2" Body="&lt;p&gt;Well, you &lt;em&gt;can't&lt;/em&gt; estimate the covariance from the state.  You need the equations used to &lt;em&gt;find&lt;/em&gt; the state.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is because the covariance (along with the markov assumption) represents &lt;em&gt;how&lt;/em&gt; the robot got to the state.   A robot at location (10,5,1) does not always have the same covariance matrix, right? You need to know what actions brought it to that state.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Barring any ros-based solution (are you sure the SLAM / EKF nodes can't do this for you?) you'll have to do this:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Find the kinematics model for the robot (differential drive, ackerman, whatever)&lt;/li&gt;&#xA;&lt;li&gt;Read in the odometery and control command, and use the kinematics equations and control inputs as the &lt;em&gt;u&lt;/em&gt; and &lt;em&gt;f()&lt;/em&gt; for the EKF (using &lt;a href=&quot;https://en.wikipedia.org/wiki/Extended_Kalman_filter#Discrete-time_predict_and_update_equations&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt;) as a reference.&lt;/li&gt;&#xA;&lt;li&gt;Find the Jacobian of the kinematics equations with respect to each state element&lt;/li&gt;&#xA;&lt;li&gt;Feed the Jacobian and control / odometery into the EKF as the &lt;em&gt;F&lt;/em&gt; term (using &lt;a href=&quot;https://en.wikipedia.org/wiki/Extended_Kalman_filter#Discrete-time_predict_and_update_equations&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt;) as a reference.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;In case you are wondering, yes this effectively reproduces the work done by the /odom node, since the output of the kinematics equations is precisely what /odom reports. &lt;/p&gt;&#xA;" OwnerUserId="163" LastActivityDate="2013-11-07T13:33:51.217" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2034" PostTypeId="1" CreationDate="2013-11-08T04:32:55.670" Score="5" ViewCount="723" Body="&lt;p&gt;It would be incredibly useful if I could print my own gearing solutions, &lt;em&gt;even if I have to print the gears one at a time.&lt;/em&gt;  However, I do not know how the market's cheapest printers will accommodate this task.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;--The gears need be 2-3 inches in diameter, and they will bear only a very light load (much less than 1 foot pound), so the material need not be strong or machinable. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;--The tolerances need only be sufficient for the teeth to mate robustly, preventing any hang.  &lt;em&gt;Unfortunately, I do not have a sense of what tolerances will allow gears to mate properly.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;--(If the machine is precise enough to print a hole to statically mate with a shaft of a specified dimensions due to friction, excellent.  If not, I can probably improvise a tiny shaft hole with adhesive.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;--Because this may be used in close proximity to pavement, a melting temperature in excess of 100F is desirable but not required.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;--Because any given element will interact kinetically only with other elements that have also been 3D printed (except a metallic shaft), compatibility with external resources is not required.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would be grateful to anyone who could shed some light on this issue!&lt;/p&gt;&#xA;" OwnerUserId="1032" LastEditorUserId="158" LastEditDate="2013-12-26T01:10:46.913" LastActivityDate="2015-03-24T23:55:58.213" Title="Cheapest 3D printer for gears?" Tags="&lt;wheeled-robot&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2035" PostTypeId="2" ParentId="2028" CreationDate="2013-11-08T06:51:12.317" Score="6" Body="&lt;p&gt;The short answer is yes, but the long answer is that you're approaching the code the wrong way and will need to rewrite things a bit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It looks like you're attempting to read a button and have it flash some LEDs while at the same time having your stepper move back and forth.  The problem is your &lt;code&gt;delay(5);&lt;/code&gt; commands, which pause the execution of your code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead, you'll have to make use of the &lt;code&gt;millis();&lt;/code&gt; function to read the current time at each iteration through the loop.  Both the stepper movement and the LED flashes are functions of time, so just write those functions and set them on every iteration.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;long stepperPosition(long t)&#xA;{&#xA;    // YOUR CODE GOES HERE, like a sine or triangular waveform&#xA;    // it might also depend on stepper1.distanceToGo() == 0&#xA;    return sine(t * TIME_SCALE_FACTOR) * MAGNITUDE;&#xA;}&#xA;&#xA;bool ledState(long t)&#xA;{&#xA;    // return HIGH if we're in the first &quot;interval&quot; millis after pressing&#xA;    // after that, return LOW to turn off the LED&#xA;    return (t &amp;lt; buttonPressTime + interval) ? HIGH : LOW;&#xA;}&#xA;&#xA;void loop()&#xA;{&#xA;    long now = millis();&#xA;&#xA;    // set the LED directly from the button state&#xA;    digitalWrite(startScan, LOW == digitalRead(buttonPin));&#xA;&#xA;    // record the time of the button press for use in our function&#xA;    if (digitalRead(button2Pin) == LOW) {&#xA;        buttonPressTime = now;&#xA;    }&#xA;&#xA;    // set LED based on time function&#xA;    digitalWrite(pulseopto1, ledState(now));&#xA;&#xA;    // set stepper based on time function&#xA;    stepper1.moveTo(stepperPosition(now));&#xA;    stepper1.run();&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In this code, both the LED and stepper are controlled &quot;in parallel&quot; -- they are both set during each iteration, with no conditional delays.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2018-12-10T13:32:41.927" LastActivityDate="2018-12-10T13:32:41.927" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="2036" PostTypeId="1" AcceptedAnswerId="2040" CreationDate="2013-11-08T17:49:30.283" Score="1" ViewCount="348" Body="&lt;p&gt;I'm dealing with a board that no matter what I do I can't seem to make CAN work over 125&amp;nbsp;kbit/s. I'll give some detail about the board on the bottom, but I'm going to keep this question generic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First of all, regarding hardware. From what I've gathered, there isn't any need for a &lt;a href=&quot;https://en.wikipedia.org/wiki/Pull-up_resistor&quot; rel=&quot;nofollow&quot;&gt;pull-up resistor&lt;/a&gt; on the TX of CAN. Is that correct? It may perhaps be chip-specific, but wherever I see, it seems that the TX/RX lines are directly connected to the transceiver.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second, regarding bit-timing: Using different calculators, for example, &lt;a href=&quot;http://www.kvaser.com/en/support/bit-timing-calculator.html&quot; rel=&quot;nofollow&quot;&gt;Kvaser&lt;/a&gt; or &lt;a href=&quot;http://www.intrepidcs.com/support/mbtime.htm&quot; rel=&quot;nofollow&quot;&gt;the one from Microchip&lt;/a&gt;, I can see the following configuration (for 64&amp;nbsp;kHz input clock):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;             SYNC     PROP     PHASE1      PHASE2       BRP (prescaler)&#xA;&#xA;125  kbit/s   1        1        3           3            32&#xA;250  kbit/s   1        1        3           3            16&#xA;500  kbit/s   1        1        3           3             8&#xA;1000 kbit/s   1        1        3           3             4&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I've seen this from more than one source. Furthermore, the numbers fit to the formula in the datasheet of the microcontroller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, only the configuration for 125&amp;nbsp;kbit/s works for me. I'm using &lt;a href=&quot;http://www.esd-electronics-usa.com/esd-electronics-usa/canreal.htm&quot; rel=&quot;nofollow&quot;&gt;CANreal&lt;/a&gt; to monitor the messages.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've tried different configurations for the CAN, for example with 16 time quanta instead of 8 as well as changing my microcontroller's clock to 16&amp;nbsp;MHz and using again different values. Regardless of all that, speeds higher than 125&amp;nbsp;kbit/s result in only errors and warnings in CANreal (which are taken from the CAN driver). Note that the same CAN board, driver and software works with 1&amp;nbsp;Mbit/s with some other hardware I have.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This all is made harder since, as soon as I put a probe from my oscillator on the TX line, it becomes a continuous 0-1 alteration like the following:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;      __------     __------     __------     __------     __------&#xA;     /       |    /       |    /       |    /       |    /       |&#xA;   /         |  /         |  /         |  /         |  /         |&#xA;  /          | /          | /          | /          | /          |&#xA;  |          | |          | |          | |          | |          |&#xA;  |          |_|          |_|          |_|          |_|          |&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Which is not something I would be outputting by software. In fact, as soon as I remove the probe, the messages start arriving (again, only at 125&amp;nbsp;Mbit/s). So basically, I don't seem to be able to have any oscillator debugging available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back to my &quot;first of all, regarding hardware&quot;, the shape of the signal suggests a pull-up resistor may be necessary, but I haven't seen the need for that in any datasheet I found. Furthermore, my microcontroller configures the pin when used as CAN, so I don't have control over making it push-pull (since it looks like it's &lt;a href=&quot;http://en.wikipedia.org/wiki/Open_collector#MOSFET&quot; rel=&quot;nofollow&quot;&gt;open-drain&lt;/a&gt;). Not to mention the microcontroller doesn't even have a configuration to make the pin push-pull.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any hidden parameter somewhere that should also be set? Is a pull-up resistor necessary after all? Why would the oscillator probe cause such a behavior?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Details from the board:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Microcontroller&quot; rel=&quot;nofollow&quot;&gt;MCU&lt;/a&gt;: P18F45K80. CAN is connected to its default RB2 and RB3.&lt;/li&gt;&#xA;&lt;li&gt;CAN transceiver: ISO1050  &lt;/li&gt;&#xA;&lt;li&gt;Compiler: &lt;a href=&quot;https://en.wikipedia.org/wiki/Mikroelektronika#Products&quot; rel=&quot;nofollow&quot;&gt;mikroC&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="158" LastEditorUserId="1906" LastEditDate="2013-11-22T17:12:59.630" LastActivityDate="2013-11-22T17:12:59.630" Title="Making high CAN baud rates work" Tags="&lt;microcontroller&gt;&lt;can&gt;" AnswerCount="1" CommentCount="11" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2037" PostTypeId="2" ParentId="2034" CreationDate="2013-11-08T21:45:36.720" Score="3" Body="&lt;p&gt;I run a rep-rap (Mendel Max) 3d printer ~ $1500AUD (built from scratch). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't really comment on the print quality of other printers, but my statements about materials will hold for other printers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have printed usable gears down to about 1/2 inch diameter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PLA has a melting point of about 150 Celsius and starts softening at about 60 Celsius, you could also print in ABS which has a slightly higher melting point but it gives of more toxic gases when heated for printing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PLA is surprisingly strong, I've stood on a 40mm cube with out it breaking. I recently glued some PLA to a piece of MDF, when separating the materials the MDF broke - NOT the PLA.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are various gear libraries on thingy-verse which make it easy to create meshing gears of the desired size.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Realistically if you build a 3d printer your self as I did, it will be months before you are printing usable gears.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can quite reliably print the hole in the center of the gear to take a shaft, as well as printing bearing mounts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a serious learning curve if you build your own 3d printer, that's not a bad thing - just be prepared for it!&lt;/p&gt;&#xA;" OwnerUserId="1819" LastActivityDate="2013-11-08T21:45:36.720" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2038" PostTypeId="2" ParentId="2028" CreationDate="2013-11-08T23:28:35.303" Score="2" Body="&lt;p&gt;It looks like the reason (one of) why the motor stops is due to the following code:-&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;if (buttonState == LOW)&#xA;    {&#xA;        digitalWrite(startScan, HIGH);&#xA;    }&#xA;    else (buttonState == HIGH); --&amp;gt; this is a statement due to the semicolon.&#xA;    {&#xA;        digitalWrite(startScan, LOW); --&amp;gt; this statement will get executed even when buttonState is LOW.&#xA;    }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;CHange this to the following and check.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;if (buttonState == LOW)&#xA;    {&#xA;        digitalWrite(startScan, HIGH);&#xA;    }&#xA;    else if (buttonState == HIGH)&#xA;    {&#xA;        digitalWrite(startScan, LOW);&#xA;    }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Try splitting the 2 activities using a task scheduler.&#xA;My $0.02.&lt;/p&gt;&#xA;" OwnerUserId="2215" LastActivityDate="2013-11-08T23:28:35.303" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2039" PostTypeId="1" CreationDate="2013-11-09T12:46:33.837" Score="1" ViewCount="87" Body="&lt;p&gt;i want to model the quadrotor using experimental method &quot;i have not built it yet&quot; what i want to do is: turn only one motor at a specific speed ,then plot the x,y,z and the angles then identify the transfert functions from the plots,x/w1,y/w1,... and so on, but i don't know if it's possible or what graphs i will have,so if you know about the subject or maybe tried something like that, and feel free to add anything you think might be helpfull&lt;/p&gt;&#xA;" OwnerUserId="2217" LastEditorUserId="2217" LastEditDate="2013-11-11T11:03:34.290" LastActivityDate="2013-11-11T11:03:34.290" Title="quadrotor experimental identification" Tags="&lt;control&gt;&lt;quadcopter&gt;&lt;brushless-motor&gt;&lt;uav&gt;" AnswerCount="0" CommentCount="1" FavoriteCount="0" ClosedDate="2013-12-08T21:21:58.633" ContentLicense="CC BY-SA 3.0" />
  <row Id="2040" PostTypeId="2" ParentId="2036" CreationDate="2013-11-09T14:38:05.243" Score="1" Body="&lt;h2&gt;scope probe&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I can sympathize with how frustrating it is when attaching an oscilloscope probe to debug a problem makes the system act differently.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A standard 1X probe (1:1 probe) will load a circuit with a capacitance of about 110 pF.&#xA;Many people use a 10X probe or a 100X probe, giving 1/10 or 1/100 the loading on the circuit -- hopefully small enough to be insignificant.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;ISO1050&lt;/h2&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;a pull-up resistor on the TX of CAN.&#xA;  ...&#xA;  the shape of the signal suggests a pull-up resistor may be necessary, but&#xA;  I haven't seen the need for that in any datasheet I found.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I think this is it.&#xA;Page 4 of the &lt;a href=&quot;http://www.ti.com/lit/ds/slls983h/slls983h.pdf&quot; rel=&quot;nofollow&quot;&gt;datasheet for the ISO1050&lt;/a&gt; specifically says&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;NOTE&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;TXD is very weakly internally pulled up to VCC1. An external pull&#xA;  up resistor should be used ... &#xA;  An adequate external pullup resistor must be used to&#xA;  ensure that the TXD output of the microprocessor maintains adequate&#xA;  bit timing input to the input on the transceiver.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;h2&gt;PIC18F45K80&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I'm assuming you're using the Microchip PIC18F45K80.&#xA;The &lt;a href=&quot;http://ww1.microchip.com/downloads/en/DeviceDoc/39977f.pdf&quot; rel=&quot;nofollow&quot;&gt;PIC18F66K80 family datasheet&lt;/a&gt; has a lot of useful information about the Microchip PIC18F45K80.&#xA;In particular, I think you might find section 27.0 ECAN MODULE useful.&#xA;Subsection 27.2.5 mentions ENDRHI: Enable Drive High bit, where&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;ENDRHI = 1: CANTX pin will drive VDD when recessive &lt;/li&gt;&#xA;&lt;li&gt;ENDRHI = 0: CANTX pin will be tri-state when recessive&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Subsection 27.3.1 CONFIGURATION MODE implies that ENDRHI (and all other configuration bits) must be set in configuration mode, and cannot be changed while the CAN module is active.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suspect that &lt;em&gt;either&lt;/em&gt; the pull-up resistor &lt;em&gt;or&lt;/em&gt; setting ENDRHI to 1 would be adequate.&#xA;However, if I were you, I would run some tests with &lt;em&gt;both&lt;/em&gt; a 10 KOhm pull-up resistor &lt;em&gt;and&lt;/em&gt; ENDRHI set to 1.&lt;/p&gt;&#xA;" OwnerUserId="187" LastActivityDate="2013-11-09T14:38:05.243" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2041" PostTypeId="2" ParentId="1919" CreationDate="2013-11-10T01:47:43.657" Score="0" Body="&lt;p&gt;The vast majority of the time, I end up cutting off whatever connector is at the end of the cable hanging out of the stepper motor, and crimping on something else compatible with the board I want to connect it to.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Occasionally the board I want to connect it to has some sort of cage clamp terminal strips (also known as spring clamp terminal strips) or some other terminal block, so I can cram in the raw bare wires without any connector on the end.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As &lt;a href=&quot;https://robotics.stackexchange.com/questions/100/what-connectors-are-most-reliable/252#252&quot;&gt;I mentioned earlier&lt;/a&gt;, many RepRaps use 8P8C &quot;RJ45&quot; &quot;Ethernet&quot; connectors to carry power over CAT5 cable, usually in a way completely incompatible with any power-over-Ethernet standard or any Ethernet data standard.&#xA;&lt;a href=&quot;http://reprap.org/wiki/RepRap_project_FAQ#wires_and_connectors&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;Why do many RepRaps have RJ45 connectors?&quot;&lt;/a&gt;; &lt;a href=&quot;http://reprap.org/wiki/CupCakeWiring#Plug_in_Extruders_.2F_Toolheads&quot; rel=&quot;nofollow noreferrer&quot;&gt;a&lt;/a&gt;; &lt;a href=&quot;http://reprap.org/wiki/Extruder_Controller_2.2#RS485_Comms_.2B_Power&quot; rel=&quot;nofollow noreferrer&quot;&gt;b&lt;/a&gt;; &lt;a href=&quot;http://reprap.org/wiki/Motherboard_1.2#RS485_Comms_.2B_Power&quot; rel=&quot;nofollow noreferrer&quot;&gt;c&lt;/a&gt;; &lt;a href=&quot;http://reprap.org/wiki/Monotronics&quot; rel=&quot;nofollow noreferrer&quot;&gt;d&lt;/a&gt;; etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;( Quite a few people, for reasons inexplicable to me, insist on removing those 8P8C sockets and using their own favorite connector -- &lt;a href=&quot;http://reprap.org/wiki/PCB_adaptions_for_Mendel&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://reprap.org/wiki/PCB_adaptions_for_Mendel&lt;/a&gt; ).&lt;/p&gt;&#xA;" OwnerUserId="187" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2013-11-10T01:47:43.657" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2042" PostTypeId="1" AcceptedAnswerId="2046" CreationDate="2013-11-10T08:53:08.697" Score="3" ViewCount="7092" Body="&lt;p&gt;I am building a machine and need 2 Stepper Motor for that.&#xA;The motors are driven using by a 3.3v arm device.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have made the following selections regarding the stepper motor, stepper motor driver and the power supply.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.circuitspecialists.com/12-volt-3.5-amp-power-supply.html&quot; rel=&quot;nofollow&quot;&gt;Power Supply 12 Volt Power Supply - 3.5 Amp Single Output&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.pololu.com/product/1200&quot; rel=&quot;nofollow&quot;&gt;Stepper Motors Stepper Motor: Unipolar/Bipolar, 200 Steps/Rev, 42×48mm, 4V, 1.2 A/Phase&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.pololu.com/product/2133&quot; rel=&quot;nofollow&quot;&gt;Stepper Motor Driver DRV8825 Stepper Motor Driver Carrier, High Current&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried my best to research the compatibility and came up with these.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this a good selection considering the fact that the Power Supply will be driving 2 of these motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I will be running the motors at 1/16 step for high resolution.As far as the speed is concerned,it's going to be pretty slow but they will be running continuously for hours in end.Basically what I am trying to do here is make a V-Plotter.As far I can tell, there will be loads of start stop motion in the motors though.&lt;/p&gt;&#xA;" OwnerUserId="1139" LastEditorUserId="1139" LastEditDate="2013-11-11T02:44:45.857" LastActivityDate="2013-11-11T04:31:54.027" Title="Choosing correct power supply for Stepper Motors" Tags="&lt;stepper-motor&gt;&lt;power&gt;&lt;stepper-driver&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2044" PostTypeId="2" ParentId="1400" CreationDate="2013-11-10T23:29:52.210" Score="1" Body="&lt;p&gt;There is no easy way of doing it. I've done it in many of my projects, the best method I found was to use &lt;a href=&quot;http://opencv.org/&quot; rel=&quot;nofollow&quot;&gt;http://opencv.org/&lt;/a&gt; to capture the frames, and overlay each frame with your data before displaying it again. The code below gives you an idea (written in the old opencv version 1 syntax)&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/**&#xA;* Display the video from webcam and overlay text&#xA;*/&#xA;&#xA;#include &amp;lt;stdio.h&amp;gt;&#xA;#include &quot;cv.h&quot;&#xA;#include &quot;highgui.h&quot;&#xA;&#xA;int main(int argc, char** argv)&#xA;{&#xA;&#xA;    CvCapture *capture;&#xA;    IplImage  *frame;&#xA;    double    t, ms = 0;&#xA;&#xA;    bool finished = false;&#xA;    /* initialize webcam */&#xA;    capture = cvCaptureFromCAM(0);&#xA;&#xA;    CvFont myFont;&#xA;&#xA;    //Initialise font&#xA;    cvInitFont(&amp;amp;myFont,CV_FONT_HERSHEY_COMPLEX_SMALL ,1.5f,1.5f,0,1,8);&#xA;&#xA;    while (!finished)&#xA;    {&#xA;        /* display frame */&#xA;        frame = cvQueryFrame(capture);&#xA;        cvPutText( frame, &quot;My Text&quot;, cvPoint(50,50), &amp;amp;myFont , cvScalar(128) );&#xA;        // use other functions to draw something &#xA;        cvShowImage(&quot;Stream&quot;,frame);&#xA;    }&#xA;&#xA;    /* free memory */&#xA;    cvReleaseCapture(&amp;amp;capture);&#xA;    return 0;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It also depends if you want to write your own code, or if you want a simple off the shelf solution. If you are writing your own code, then have a look at some of my scene rendering components, &lt;a href=&quot;https://sourceforge.net/p/visionmagic/code/ci/master/tree/src/modules/sceneRendering/&quot; rel=&quot;nofollow&quot;&gt;https://sourceforge.net/p/visionmagic/code/ci/master/tree/src/modules/sceneRendering/&lt;/a&gt; , not perfect, but will give you an idea on how to render things in OpenGL, and Qt.&lt;/p&gt;&#xA;" OwnerUserId="642" LastActivityDate="2013-11-10T23:29:52.210" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2045" PostTypeId="1" AcceptedAnswerId="2052" CreationDate="2013-11-11T01:09:54.447" Score="4" ViewCount="1076" Body="&lt;p&gt;I'm interested in getting a Create for a project I'll be working on, and wanted some information about it from somebody that already has one:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;How much weight can it safely carry? I talked with Irobot's tech support and they told me the maximum is 5lb, but searching on the internet it seems like this limit is actually not as strict as it appears to be. I'm asking because I'd need to put a 3kg laptop on top of it, which would mean ~3.5-4kg if you also consider the kinect and eventual supports for both. I guess I could use a netbook and send the data I need to another computer, but I wanted to avoid the additional overhead of the wireless link.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;For how long does it run using AA batteries? I'm inclined on not getting the battery pack, since I'd be using the robot in europe, so I'd also need a transformer if I went with the battery pack option.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="2222" LastEditorUserId="4373" LastEditDate="2014-12-13T07:26:43.120" LastActivityDate="2014-12-13T07:26:43.120" Title="Questions about Irobot Create" Tags="&lt;mobile-robot&gt;&lt;irobot-create&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2046" PostTypeId="2" ParentId="2042" CreationDate="2013-11-11T04:31:54.027" Score="2" Body="&lt;p&gt;As long as the steppers are running relatively slowly, let's say a few hundred steps per second, you should be fine.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your driver uses PWM to control the current through the motor windings.  In microstepping mode the driving waveform at the motor terminals looks like a sine and cosine (sines offset by 90 degrees) and the driver modulates the outputs to maintain the current to the windings.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 1.2A appears to be peak current.  So at standstill we're talking 1.2A*4V = 4.8W max per phase (though a microstepping driver will never drive those two phases &quot;fully&quot; simultaneously).  At any rate, at very slow speeds/standing we're talking about ~13W for the two motors vs. your 40W power supply.  So no problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you start speeding things up two things happen: &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The motors starts acting as a generator producing counter-EMF (and we don't know the Ke constant for those motors).  Now to maintain the same current your driver has to overcome this counter-EMF.  This is why you want the highest voltage you can get if you're planning to run your motors at speed.&lt;/li&gt;&#xA;&lt;li&gt;We are going through the microstepping waveform and really start caring more about the RMS current (So we can effectively divide by ~1.4 since the power supply doesn't care about peak current as much over very short durations).  So about 0.86A RMS per phase.  That adds up to ~3.42A which is still lower (though not by much, than your 3.5A supply).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;So as long as you're well below a speed where your back-EMF is ~8V you're fine.  If you plan to go to this point or above it you'll run out of voltage and you're also left with relatively small margins on power.  It also depends on how much power you need for the rest of your system.  Unfortunately I'm not quite sure how to calculate the back-EMF constant (Ke) from your motor parameters.  Looking at the pulling torque curve (given with a 24V supply) I would guess that up to 1000-2000pps you'll still be OK and it looks like the torque is dropping by ~25% over ~1500pps so it's probably in the range of 6V/1500pps (very rough guess).  Since we know the inductance maybe someone can show us how to calculate back-EMF constant (I'd be interested in learning)...&lt;/p&gt;&#xA;" OwnerUserId="1584" LastActivityDate="2013-11-11T04:31:54.027" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2047" PostTypeId="2" ParentId="2021" CreationDate="2013-11-11T04:41:19.747" Score="1" Body="&lt;p&gt;From what I understand, this telemetry kit uses Mavlink as a protocol for data transfer and unless I follow the specific header, footer, data etc format for Mavlink, I will invariably end up with gibberish on my hyperterminal. This means in order to read and modify the telemetry data, I'd have to develop a Mavlink engine from scratch, right?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/A6fuf.png&quot; alt=&quot;Mavlink Data Format&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to know if this problem can be cut short by using XBee radio Tx-Rx pair instead of the one 3DR is providing?&lt;/p&gt;&#xA;" OwnerUserId="1949" LastActivityDate="2013-11-11T04:41:19.747" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="2048" PostTypeId="1" AcceptedAnswerId="2072" CreationDate="2013-11-11T07:09:21.587" Score="0" ViewCount="1506" Body="&lt;p&gt;I am trying to get precise control over the speed of rover 5 based robot. It has four PWM controlled motors and 4 Optical Quadrature Encoders. I am using &lt;a href=&quot;https://www.sparkfun.com/products/11593&quot; rel=&quot;nofollow&quot;&gt;4-channel motor controller&lt;/a&gt; with &lt;a href=&quot;https://www.sparkfun.com/products/10336&quot; rel=&quot;nofollow&quot;&gt;rover 5 chassis&lt;/a&gt;. I am using arduino Nano for control. I am able to read encoder INT output and change PWM based on pulse width to control speed. But, as a result, I am getting heavy oscillations in the control output. That makes, the robot to move in steps, as PWM is changing constantly. I need an algorithm which can minimize this ringing and have a smooth moving robot. Here is my arduino code snippet.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void setup() {&#xA;    Serial.begin(9600);&#xA;    init_motors();&#xA;    init_encoders();        &#xA;    req_speed[0] = 20;&#xA;    req_speed[1] = 20;&#xA;    req_speed[2] = 20;&#xA;    req_speed[3] = 20;&#xA;}&#xA;&#xA;void loop() {&#xA;  update_encoders();&#xA;  update_motors();&#xA;}&#xA;&#xA;void update_motors() {&#xA;  int i, err;&#xA;  unsigned long req_width;&#xA;  if(micros() - mtime &amp;gt; 2999) {&#xA;    mtime = micros();&#xA;&#xA;    for(i=0; i&amp;lt;4; i++) {&#xA;      digitalWrite(pins_dir[i], req_speed[i]&amp;gt;0);&#xA;      if(mtime - change_time[i] &amp;gt; 50000ul &amp;amp;&amp;amp; req_speed[i] != 0) {&#xA;        cur_pwm[i] += 5;&#xA;      } &#xA;      if(req_speed[i] &amp;gt; 0)&#xA;        cur_err[i] = req_speed[i]*10  - cur_speed[i];&#xA;      else&#xA;        cur_err[i] = (-req_speed[i]*10)  - cur_speed[i];&#xA;      if(cur_err[i] &amp;gt; 0 &amp;amp;&amp;amp; cur_pwm[i] &amp;lt; 255) {&#xA;        cur_pwm[i]++;&#xA;      } else if(cur_err[i] &amp;lt; 0 &amp;amp;&amp;amp; cur_pwm[i] &amp;gt; 0) {&#xA;        cur_pwm[i]--;&#xA;      }&#xA;      analogWrite(pins_pwm[i], cur_pwm[i]);&#xA;    }&#xA;  }&#xA;}&#xA;&#xA;void update_encoders() {&#xA;  int i;&#xA;  unsigned long w;&#xA;  enc_new = PINC &amp;amp; B00001111;&#xA;  unsigned long etime = micros();&#xA;  for (i=0; i&amp;lt;4; i++) {&#xA;    if((enc_old &amp;amp; (1 &amp;lt;&amp;lt; i)) &amp;lt; (enc_new &amp;amp; (1 &amp;lt;&amp;lt; i)))&#xA;    {&#xA;      w = (unsigned long)(((etime - change_time[i])));&#xA;      pulse_width[i] = (w + pulse_width_h1[i] + pulse_width_h2[i])/3;&#xA;      pulse_width_h2[i] = pulse_width_h1[i];&#xA;      pulse_width_h1[i] = pulse_width[i];&#xA;      change_time[i]=etime;&#xA;      pulse_count[i]++;&#xA;      cur_speed[i] = (3200000ul / pulse_width[i]);&#xA;    }&#xA;  }&#xA;  enc_old=enc_new;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Here req_speed is between -100 to 100, where sign indicates direction. Please consider all undefined variables as globals. I experimentally measured that, when motor is running at full speed, the pulse width is around 3200us.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Encoders' INT outputs (XOR of A and B) are connected to A0 thru A3. Motor PWM is connected to D3, D5, D6, D9. Please let me suggest any improvements to this code and advice me about what am I missing here.&lt;/p&gt;&#xA;" OwnerUserId="1144" LastActivityDate="2021-01-18T07:26:43.560" Title="Encoder based speed control for Rover 5" Tags="&lt;arduino&gt;&lt;motor&gt;&lt;pwm&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2051" PostTypeId="2" ParentId="2021" CreationDate="2013-11-11T15:54:36.020" Score="2" Body="&lt;p&gt;MAVLink is an encoded message. In order for you to get specific data out of it you will need to decode it in some way. There are a number of ways of doing this including writing your own code and attaching MAVlink to it. This is described here: &lt;a href=&quot;http://qgroundcontrol.org/dev/mavlink_onboard_integration_tutorial&quot; rel=&quot;nofollow&quot;&gt;http://qgroundcontrol.org/dev/mavlink_onboard_integration_tutorial&lt;/a&gt;. In order to use this you will have to have downloaded the mavlink libraries from the repository here: &lt;a href=&quot;https://github.com/mavlink/mavlink&quot; rel=&quot;nofollow&quot;&gt;https://github.com/mavlink/mavlink&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are wanting a platform independent java based implementation, a friend of mine Owen McAree developed MAVNode a Node.js based decoder for MAVLink which will decode the messages you require. It is a nvm repository &lt;a href=&quot;https://npmjs.org/package/mavlink&quot; rel=&quot;nofollow&quot;&gt;https://npmjs.org/package/mavlink&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="925" LastActivityDate="2013-11-11T15:54:36.020" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2052" PostTypeId="2" ParentId="2045" CreationDate="2013-11-11T19:36:52.223" Score="1" Body="&lt;p&gt;The weight of just the 6.6 pound laptop is already 32% over capacity, so you may need to consider lightening the load. If not then you risk lower performance, higher stresses on the robot and possibly even burning out one or more motors under stress testing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the matter of battery life, according to the &lt;a href=&quot;http://www.irobot.com/filelibrary/pdfs/hrd/create/Create%20Manual_Final.pdf&quot; rel=&quot;nofollow&quot;&gt;iRobot Create Manual&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Alkaline batteries will power the robot (on a hard floor with no payloads or&#xA;  attachments) for up to 1.5 hours if the robot is constantly moving.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So this is less than half the run time of the APS battery:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The iRobot Create robot (without a payload or other attachments) will run for&#xA;  up to 3.5 hours with a fully charged APS battery.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="37" LastActivityDate="2013-11-11T19:36:52.223" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2053" PostTypeId="1" CreationDate="2013-11-12T06:50:00.757" Score="3" ViewCount="1139" Body="&lt;p&gt;I have a chip that is labeled L293D with a small 'ST' logo, which does not behave like I believe a L239D should:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have the chip on a breadboard with pins 4,5,12 and 13 connected to the ground rail. The positive rail gets 6V from a battery pack.&#xA;A motor is connected to pins 3 and 6.&#xA;Pin 2 is connected to the positive rail.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, when I connect pin 1 (enable 1) to the positive rail, the motor spins, which is expected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The weird thing is that if I connect pin 16 instead of pin 1 to positive, the motor spins, as well. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, with the motor connected to 11 and 14, and 15 connected to positive, the motor spins if I connect pin 1 or pin 16 to positive, but not if I connect pin 9 (which should be the enable pin for that side).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does any of that make sense? Am I missing something here?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="2228" LastActivityDate="2013-11-13T08:31:37.093" Title="Odd L293D behavior: Pin 16 seems to act as enable" Tags="&lt;motor&gt;&lt;h-bridge&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2054" PostTypeId="2" ParentId="2053" CreationDate="2013-11-12T09:25:39.153" Score="2" Body="&lt;p&gt;The behaviour you're describing seems to be correct (as described in the &lt;a href=&quot;http://www.ti.com/lit/gpn/l293&quot; rel=&quot;nofollow noreferrer&quot;&gt;Texas Instruments L293 datasheet&lt;/a&gt; - which should be the same as ST's variant). Here's an example of how to wire 3 different motors (please note the indicated diodes are internal to the L293).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/VSY5i.png&quot; alt=&quot;Copied from TI L293 Datasheet&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The idea is that Vcc1 (pin 16) should be associated with your logic inputs: pins 1, 2, 7, 9, 10 and 15 (in other words, if your micro is powered from 3V3, Vcc1 should be 3V3). On the other hand, if you run your motors from 6V, Vcc2 (pin 8) should be 6V (or whichever voltage you use to drive the motors).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For reference, here's the pinout of the TI L293.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/ep9A5.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Update:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The TI variant does indeed seem to be the same as &lt;a href=&quot;http://www.st.com/web/catalog/sense_power/FM142/CL851/SC1790/SS1555/PF63141&quot; rel=&quot;nofollow noreferrer&quot;&gt;ST's L293D (see powerdip package)&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="1775" LastEditorUserId="1775" LastEditDate="2013-11-12T16:34:08.153" LastActivityDate="2013-11-12T16:34:08.153" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2055" PostTypeId="2" ParentId="653" CreationDate="2013-11-12T12:35:34.707" Score="2" Body="&lt;p&gt;A lot of the different options with regards to language are listed on the NXT wiki page &lt;a href=&quot;http://en.wikipedia.org/wiki/Lego_Mindstorms_NXT_2.0&quot; rel=&quot;nofollow&quot;&gt;http://en.wikipedia.org/wiki/Lego_Mindstorms_NXT_2.0&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;NXT-G&lt;/strong&gt; NXT-G is the programming software included in the&#xA;standard base kit. It is based on LabVIEW graphical programming. It&#xA;features an interactive drag-and-drop environment. LabVIEW&#xA;Toolkit[edit] NXT-G is powered by LabVIEW, an industry standard in&#xA;programming. Created by National Instruments, LabVIEW uses data flow&#xA;programming to create a virtual instrument. To allow for more&#xA;advanced programming, in the graphical sense, National Instruments&#xA;released a Toolkit for the NXT. Version 1.0 came out in December&#xA;2006 Since its release, several bugs have been found and new sensors have been created. While the toolkit does allow for the creation of new sensors, National Instruments has yet to formally release an update&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Lego::NXT&lt;/strong&gt; Lego::NXT provides an API between Perl and&#xA;NXT. &lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Ada&lt;/strong&gt; A port of GNAT is available for the NXT. It requires&#xA;nxtOSEK to run. The port includes Ada bindings to the NXT hardware&#xA;and nxtOSEK. &lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Next Byte Codes &amp;amp; Not eXactly C&lt;/strong&gt; Next Byte Codes&#xA;(NBC) is a simple open-source language with an assembly language&#xA;syntax that can be used to program the NXT brick. Not eXactly C (NXC)&#xA;is a high level open-source language, similar to C, built on top&#xA;of the NBC compiler. It can also be used to program the NXT brick.&#xA;NXC is basically NQC for the NXT. It is the most widely used&#xA;third-party programming language. &lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;ROBOTC&lt;/strong&gt; ROBOTC is an&#xA;Integrated development environment targeted towards students that is&#xA;used to program and control LEGO NXT, VEX, RCX, and Arduino robots&#xA;using a programming language based on the C programming language.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;RoboMind&lt;/strong&gt; RoboMind is an educational programming environment&#xA;that offers a concise scripting language for programming a simulated&#xA;robot. These internationalized scripts can, however, also directly be&#xA;exported to Lego Mindstorms robots. It does not require custom&#xA;firmware in order to run. &lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;NXTGCC&lt;/strong&gt; NXTGCC is a GCC toolchain for&#xA;programming the NXT firmware in C. URBI[edit] URBI is a parallel and&#xA;event-driven language, with interfaces to C++/Java and Matlab. It&#xA;also has a component architecture (UObject) for distributed&#xA;computation. Urbi is compatible with many robots, including Nao (cf&#xA;Robocup), Bioloid or Aibo. &lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;leJOS NXT&lt;/strong&gt; leJOS NXT is a high&#xA;level open source language based on Java that uses custom firmware&#xA;developed by the leJOS team.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;nxtOSEK&lt;/strong&gt; To be able to write in&#xA;C (programming language)/C++, nxtOSEK can be used, but that requires&#xA;custom firmware too.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;MATLAB and Simulink&lt;/strong&gt; MATLAB is a&#xA;high-level programming language for numerical computing, data&#xA;acquisition and analysis. It can be used to control LEGO NXT robots&#xA;over a Bluetooth serial port (serial port communication is part of&#xA;the base functionality of MATLAB) or via a USB connection; for&#xA;example using the RWTH - Mindstorms NXT Toolbox (free &amp;amp; open-source).&#xA;Simulink is a MATLAB-based environment for modeling and simulating&#xA;dynamic systems. Using Simulink, a user can design control&#xA;algorithms, automatically generate C code for those algorithms, and&#xA;download the compiled code onto the LEGO NXT. MATLAB and Simulink&#xA;code for NXT programming is freely available. &lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Lua&lt;/strong&gt; pbLua is an&#xA;implementation of the Lua programming language, a general purpose&#xA;scripting language, for Lego Mindstorms. FLL &lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;NXT Navigation&lt;/strong&gt; FLL&#xA;Nxt Navigation An open source program to help navigation on the FLL&#xA;competition table. Uses NXT-G and .txt files to write programs.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;ruby-nxt&lt;/strong&gt; ruby-nxt is a library to program the NXT for the Ruby&#xA;programming language. Unlike the other languages for the NXT the code&#xA;isn't compiled to a binary file. Instead the code is directly&#xA;transmitted to the NXT via a bluetooth connection. This method of&#xA;execution is significantly slower than executing compiled code&#xA;directly. Robotics. &lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;NXT&lt;/strong&gt; Robotics.NXT is a Haskell interface to&#xA;NXT over Bluetooth. It supports direct commands, messages and many&#xA;sensors (also unofficial). It has also support for a simple&#xA;message-based control of a NXT brick via remotely executed program&#xA;(basic NXC code included).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;As previously mentioned the chart in  &lt;a href=&quot;http://teamhassenplug.org/NXT/NXTSoftware.html&quot; rel=&quot;nofollow&quot;&gt;http://teamhassenplug.org/NXT/NXTSoftware.html&lt;/a&gt; is a good comparison.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Which language is the most robust on the platform?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Although I agree that the question is far too ambiguous, after using NXT-G, Matlab, Labview and a number of the other interfaces, I have found that the BricxCC IDE and the NXC is very easy to use with great contextual help and a lot of examples. It allows a lot more programming freedom that the visual based solutions do not offer. I have not attempted to use the higher level programming languages such as Java and C++ because most of the applications that I have been using would not have benefited from the advanced functions. If you are wanting these advanced functions is NXT the right hardware?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;One might also like to know (1) which (if any) of these alternatives supports hard real-time systems&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This post for the LeJOS discuses this with regards to Java: &lt;a href=&quot;http://www.lejos.org/forum/viewtopic.php?f=18&amp;amp;t=4619&quot; rel=&quot;nofollow&quot;&gt;http://www.lejos.org/forum/viewtopic.php?f=18&amp;amp;t=4619&lt;/a&gt; :- &quot;The NXT firmware switches thread contexts every 1ms. Also, the scheduler of the NXT firmware is much more predictable. For example, a thread with high priority would be preferred by the scheduler over any thread with lower priority. So high priority threads could be pretty sure to be scheduled as soon as possible. The motor regulation was typically running as a high priority thread. But as you already guessed, the NXT firmware was no realtime system either. Threads with the same priority are served round-robin. Oh and once in a while, the garbage collector will halt the whole JVM. This is always true for the NXT. But the Oracle JVM used on the EV3 uses concurrent garbage collectors. However, in the worst case, even those fall back to halting the whole JVM. The trick to avoid that is to reuse object, arrays, and such stuff as far as possible in performance critical code paths.&quot;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;how much memory on the NXT is left over for my &quot;user-level&quot; programs and data after the language-support infrastructure libraries are loaded&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This post for the LeJOS discuses this with regards to Java: &lt;a href=&quot;http://www.lejos.org/nxt/nxj/tutorial/AdvancedTopics/UnderstandingFilesLCPMemTools.htm&quot; rel=&quot;nofollow&quot;&gt;http://www.lejos.org/nxt/nxj/tutorial/AdvancedTopics/UnderstandingFilesLCPMemTools.htm&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;The NXT has 256kb of flash memory. A fixed section at the start of the flash memory is allocated to the system. It is used to hold the firmware, followed by the startup menu. The rest of this system area is unused. The size of the system area varies between releases.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The firmware is written in C, with some ARM assembly language. The startup menu is written in Java (in the startup project in SVN).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Flash memory is read and written in 256-byte pages. The first page after the system area is used for persistent system settings administered by the startup menu.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The rest of the flash memory is used for the user file system. The first two pages hold the file table (directory), and the rest of the pages hold user files. Files are held as a contiguous set of bytes – i.e they use a single range of page numbers with no gaps. This allows a file to be addressed as a region of memory.&quot;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;do any of these alternatives support interrupt handlers&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;One way of programming interrupt handlers on the NXT is to program at a lower level: &lt;a href=&quot;http://www.tau.ac.il/~stoledo/lego/nxt-native/&quot; rel=&quot;nofollow&quot;&gt;http://www.tau.ac.il/~stoledo/lego/nxt-native/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;It's pretty easy to get started. You need two tools: the GNU development tools for ARM processors, and some way to download the resulting programs to the NXT. I use nexttool to download programs to the NXT, but I suppose that you could use NXT-G as well. There are several distributions of the GNU tools for ARM around. I usually use a distribution called WinARM, which is for windows; GNUARM and YAGARTO are two other options (I have used GNUARM on Linux).&quot;&lt;/p&gt;&#xA;" OwnerUserId="925" LastEditorUserId="925" LastEditDate="2013-11-13T15:53:33.973" LastActivityDate="2013-11-13T15:53:33.973" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2056" PostTypeId="1" CreationDate="2013-11-12T13:26:18.287" Score="6" ViewCount="28115" Body="&lt;p&gt;I am working right now with Arduino UNO and HC-05 bluetooth module.I followed the instruction given on &lt;a href=&quot;http://www.instructables.com/id/Modify-The-HC-05-Bluetooth-Module-Defaults-Using-A/?ALLSTEPS&quot; rel=&quot;noreferrer&quot;&gt;this link for wiring&lt;/a&gt;. So there are 2 mode of working with this HC-05 module&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Simple serial communication&lt;/li&gt;&#xA;&lt;li&gt;Working in AT command mode so as to change the parameters of HC-05 module&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;As long as I work in simple serial communication mode, everything works fine but when I tried to change the parameters of module, it didn't work out. For working in At command mode, PIN NO 34 of HC-05 module needs to be high which I had taken care of. Lately I found that in mu module they had knowingly not connected the Berg strip to PIN 34, so I connected the PIN directly, even though I am not able to change the parameters of module and when I write any command on COM port of arduino IDE, I get this response&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Enter AT commands:&#xA;ERROR:(0)&#xA;ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõÿýì¢^&#xA;ERROR:(0)&#xA;ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõÿýì¢^&#xA;ERROR:(0)&#xA;ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõÿýì¢^&#xA;ERROR:(0)&#xA;ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõÿýì¢^&#xA;ERROR:(0)&#xA;ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõÿýì¢^&#xA;ERROR:(0)&#xA;ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõÿýì¢^&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I think that garbage is due to my code&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is my code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;SoftwareSerial.h&amp;gt;&#xA;&#xA;SoftwareSerial BTSerial(10, 11); // RX | TX&#xA;&#xA;void setup()&#xA;{&#xA;  pinMode(9, OUTPUT);  &#xA;  digitalWrite(9, HIGH);&#xA;  Serial.begin(9600);&#xA;  Serial.println(&quot;Enter AT commands:&quot;);&#xA;  BTSerial.begin(38400);  &#xA;}&#xA;&#xA;void loop()&#xA;{&#xA;  uint8_t x;&#xA;  char CommandFromSerial[50]=&quot; &quot;;&#xA;  char ResponseFromBluetooth[50]= &quot; &quot;;&#xA;&#xA;  if ((Serial.available())){&#xA;    if(Serial.available()&amp;gt;0){&#xA;      for(x=0;x&amp;lt;50;x++)&#xA;        CommandFromSerial[x]=Serial.read();&#xA;      BTSerial.println(CommandFromSerial);&#xA;    }&#xA;  }&#xA;&#xA;  if ((BTSerial.available())){&#xA;    if(BTSerial.available()&amp;gt;0)&#xA;      for(x=0;x&amp;lt;50;x++)&#xA;        ResponseFromBluetooth[x]=BTSerial.read();&#xA;    Serial.println(ResponseFromBluetooth);&#xA;  }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I am not able to figure out what I am doing wrong. I used this command on COM port &#xA;&lt;code&gt;AT\r\n&lt;/code&gt; and many other commands but every time I get the same response.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did I mess up with my bluetooth module unknowingly?&lt;/p&gt;&#xA;" OwnerUserId="1322" LastEditorUserId="158" LastEditDate="2013-11-12T15:18:17.667" LastActivityDate="2018-07-11T08:42:48.850" Title="Bluetooth module HC-05 giving ERROR :(0)" Tags="&lt;arduino&gt;&lt;c&gt;&lt;communication&gt;&lt;serial&gt;" AnswerCount="7" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2057" PostTypeId="2" ParentId="2053" CreationDate="2013-11-13T08:31:37.093" Score="0" Body="&lt;p&gt;The correct way to wire the pins out on a L293D is as follows:&lt;br&gt;&#xA;Pin 1 &amp;amp; 9 are enable pins should be tied to +5 if pulled low the outputs will be turned off regardless of the input states. &lt;br&gt;&#xA;Pins 4,5, 13, 12 are ground pins and ideally connected to the micro-controller ground connection. &lt;br&gt;&#xA;Pin2, Pin7, Pin10 and Pin15 are logic input pins. These are control pins and should be connected to micro-controller pins. &lt;br&gt;&#xA;Pins 2 &amp;amp; 7 control the left motor and 10 &amp;amp; 15 control the right motor.&#xA;Pin3, Pin6, Pin11, and Pin14 are output pins. Tie Pin3 and Pin6 to the first motor, Pin11 and Pin14 to second motor.&lt;br&gt;&#xA;Pin 16 enables the IC should be connected to a +5v Regulated Supply&#xA;Pin 8 powers the motors &lt;br&gt;&#xA;More details:&#xA;&lt;a href=&quot;http://www.robotplatform.com/howto/L293/motor_driver_1.html&quot; rel=&quot;nofollow&quot;&gt;http://www.robotplatform.com/howto/L293/motor_driver_1.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2099" LastActivityDate="2013-11-13T08:31:37.093" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2058" PostTypeId="2" ParentId="2056" CreationDate="2013-11-13T09:45:54.440" Score="1" Body="&lt;p&gt;Wouldn't have thought you have messed up your bluetooth module or it's a problem with your code; it could be the firmware loaded on the module.&lt;BR&gt;&lt;BR&gt;&#xA;I too have encountered problems getting those HC-05 &quot;linvor&quot; modules to respond to AT command set. If the only AT commands that module responds to is AT  and setting the name; then you have a slave module. These have been loaded with limited firmware which doesn't respond to other AT commands given. &lt;BR&gt;&#xA;You need the ones which are master's as they will respond to the other AT commands and have better firmware installed on them.&#xA;&lt;br&gt;&lt;br&gt;&#xA;Found this out by trial and error as I have 2 modules which I was trying to configure so they paired up without user intervention and failing. I bought my modules on eBay from a seller with a ID for emailforyou which gave good information within the description; which informed me that in order to get each module to pair up you need a master &amp;amp; slave. I bought 2 surface mount masters but also opted to get a 6 pin (assembled) HC-06 Master/Slave module as well from the above seller. &lt;br&gt;&#xA;&lt;strong&gt;Updated&lt;/strong&gt; &lt;br&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;SoftwareSerial.h&amp;gt;&#xA;&#xA;SoftwareSerial BTSerial(16, 17); // RX | TX&#xA;&#xA;void setup()&#xA;{&#xA;  pinMode(11, OUTPUT);  // this pin will pull the HC-05 pin 34 (key pin) HIGH to switch module to AT mode&#xA;  digitalWrite(11, HIGH);&#xA;  Serial.begin(9600);&#xA;  Serial.println(&quot;Enter AT commands:&quot;);&#xA;  BTSerial.begin(9600);  // HC-05 default speed in AT command more&#xA;                         // was 38400 but changed it to 9600&#xA;}&#xA;&#xA;void loop()&#xA;{&#xA;&#xA;  // Keep reading from HC-05 and send to Arduino Serial Monitor&#xA;  if (BTSerial.available())&#xA;    Serial.write(BTSerial.read());&#xA;&#xA;  // Keep reading from Arduino Serial Monitor and send to HC-05&#xA;  if (Serial.available())&#xA;    BTSerial.write(Serial.read());&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="2099" LastEditorUserId="2099" LastEditDate="2013-11-13T11:18:34.893" LastActivityDate="2013-11-13T11:18:34.893" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="2059" PostTypeId="2" ParentId="1877" CreationDate="2013-11-13T10:02:08.677" Score="0" Body="&lt;p&gt;If starting out with programming use C/C++ as most of the examples using OpenCV on the internet use that language but there are interfaces for many other languages. I.E. Java, Python, C++, C &lt;BR&gt;&#xA;More details: &lt;a href=&quot;http://opencv.org/&quot; rel=&quot;nofollow&quot;&gt;http://opencv.org/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2099" LastActivityDate="2013-11-13T10:02:08.677" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2060" PostTypeId="2" ParentId="1991" CreationDate="2013-11-13T15:01:20.960" Score="2" Body="&lt;p&gt;The swissranger is a RF-modulated light sources with phase detectors which is one type of time of flight camera. The other type is Range Gated Imager. The Wiki Page for time-of-flight cameras &lt;a href=&quot;http://en.wikipedia.org/wiki/Time-of-flight_camera&quot; rel=&quot;nofollow&quot;&gt;http://en.wikipedia.org/wiki/Time-of-flight_camera&lt;/a&gt;  states this for the Range Gated imagers: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;Range gated imagers can also be used in 2D imaging to suppress anything outside a specified distance range, such as to see through fog. A pulsed laser provides illumination, and an optical gate allows light to reach the imager only during the desired time period.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It also states that:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;The ZCam by 3DV Systems is a range-gated system.&quot;&lt;/p&gt;&#xA;" OwnerUserId="925" LastActivityDate="2013-11-13T15:01:20.960" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2061" PostTypeId="2" ParentId="1877" CreationDate="2013-11-14T10:48:34.290" Score="2" Body="&lt;p&gt;Though I did not use hand gestures, I used color based object tracking for my undergrad project. I did it through MATLAB as at that point of time I had no idea about Open-CV. I am guessing you will have a laptop for image processing and send commands run-time to your robot.&#xA;Ok first thing, sending serial commands though the serial port / USB port / wifi to your robot will be damn easy (at-least in the computer part - sending). You can do your gesture recognition using low resolution say 240*240. This will be fast considering a moderately new machine. &lt;strong&gt;MATLAB is itself not slow&lt;/strong&gt;. It is your &lt;strong&gt;implementation and algorithms&lt;/strong&gt; used which determines slow or fast. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now if you want to do the entire thing in a mobile platform say Android, MATLAB is out of the question. Or if you are using any embedded platform then Open-CV is the way to go. You will have to code the communication part of things too as OpenCV does not have any serial communication or related toolbox. But even with Open-CV your &lt;strong&gt;implementation and algorithms&lt;/strong&gt; will determine slow or fast.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In open-CV 2.0 the new C++ interface is much better and also faster than the old openCV 1.0 functions. You also have OO with OpenCV 2.0 and using CVMat is much more related and easy like MATLAB than the native IPLImage interface.&lt;/p&gt;&#xA;" OwnerUserId="2236" LastActivityDate="2013-11-14T10:48:34.290" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2062" PostTypeId="1" CreationDate="2013-11-05T00:32:35.767" Score="5" ViewCount="98" Body="&lt;p&gt;I'm working on a legged robot and generating joint torques. Basically the robot seems to be statically stable to some extend. The robot goes instable if the center of pressure moves to the border of the feet. I'm looking for some method to move away the center of pressure  from the feet edges after having calculated my joint torques. In Sentis thesis ( &lt;a href=&quot;http://ai.stanford.edu/~lsentis/files/Thesis-Sentis-2007.pdf&quot; rel=&quot;nofollow&quot;&gt;http://ai.stanford.edu/~lsentis/files/Thesis-Sentis-2007.pdf&lt;/a&gt; ) , it is mentioned that he somehow manages to cancel out the internal forces to keep the feet flat against the supporting surfaces. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone has got experience in dealing with internal forces? As far as I understood the literature one can modify the nullspace of the calculated torques to achieve that the COP remains in the geometrical center of the considered foot. I'm looking for methods apart from the virtual linkage model as it did not seem to work for me or someone with whom I could discuss the virtual linkage model described in ( &lt;a href=&quot;http://ai.stanford.edu/~lsentis/files/tro-2010.pdf&quot; rel=&quot;nofollow&quot;&gt;http://ai.stanford.edu/~lsentis/files/tro-2010.pdf&lt;/a&gt; ) as I might not have it understood it correctly.&lt;/p&gt;&#xA;" OwnerDisplayName="someguy" LastEditorUserId="158" LastEditDate="2014-01-10T10:54:29.103" LastActivityDate="2015-07-18T22:03:37.537" Title="Guidance for compensating internal forces on closed loop chain" Tags="&lt;stability&gt;&lt;legged&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2063" PostTypeId="1" AcceptedAnswerId="2066" CreationDate="2013-11-14T20:32:20.550" Score="4" ViewCount="3181" Body="&lt;p&gt;I am trying to use a push button in order to know and print number of time a push button is pressed using a counter.But everytime i press the button , counter get incremented to sometime 3 and sometime 5 and some time counter does start &gt;100 and continue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I had preferred the &lt;a href=&quot;http://arduino.cc/en/Tutorial/Button&quot; rel=&quot;nofollow&quot;&gt;this link&lt;/a&gt; for wiring PUSH button with arduino.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and here is my code&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;const int buttonPin = 2;     // the number of the pushbutton pin&#xA;const int ledPin =  13;      // the number of the LED pin&#xA;&#xA;// variables will change:&#xA;int buttonState = 0;         // variable for reading the pushbutton status&#xA;int count = 0;&#xA;void setup() {&#xA;  // initialize the LED pin as an output:&#xA;  pinMode(ledPin, OUTPUT);      &#xA;  // initialize the pushbutton pin as an input:&#xA;  pinMode(buttonPin, INPUT);   &#xA;  pinMode(buttonPin, INPUT); &#xA;  Serial.begin(9600);&#xA;    buttonState = digitalRead(buttonPin);&#xA;  digitalWrite(ledPin,LOW);  &#xA;}&#xA;&#xA;void loop(){&#xA;    // read the state of the pushbutton value:&#xA;  buttonState = digitalRead(buttonPin);&#xA;&#xA;  // check if the pushbutton is pressed.&#xA;  // if it is, the buttonState is HIGH:&#xA;  if (buttonState == HIGH) {&#xA;&#xA;    // turn LED on:    &#xA;    digitalWrite(ledPin, HIGH); &#xA;    count = count + 1;  &#xA;    Serial.print(count);&#xA;  } &#xA;  else {&#xA;    // turn LED off:&#xA;    digitalWrite(ledPin, LOW); &#xA;  }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I dont know why count is coming absurdly and unevenly.&lt;/p&gt;&#xA;" OwnerUserId="1322" LastActivityDate="2019-08-14T04:53:08.930" Title="Unable to read pushbutton press properly in Arduino" Tags="&lt;arduino&gt;&lt;c&gt;&lt;serial&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2065" PostTypeId="2" ParentId="2063" CreationDate="2013-11-14T22:12:56.060" Score="3" Body="&lt;p&gt;What your experiencing is known as &quot;button bounce&quot;. When you push a standard pushbutton, it actually makes and breaks contact many times very quickly for a few microseconds, usually enough to make the processor detect between 10 and 100 pushes, or more. There are many different methods of &quot;debouncing&quot; a pushbutton. The easiest approach is to add a small delay in your code right after you check if the pushbutton is pressed:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;if(buttonState == HIGH){&#xA;    delay(10);&#xA;    //turn the light on, etc. &#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;There are other methods, both hardware and software. The most elegant method which will not interrupt the running of other code is to have a timer that scans the pushbutton periodically (i.e. every 5 milliseconds or so), and sets a boolean variable to TRUE when it detects a push. You could also rig up a small capacitor to the button; the schematic is available on the internet. &lt;/p&gt;&#xA;" OwnerUserId="176" LastActivityDate="2013-11-14T22:12:56.060" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2066" PostTypeId="2" ParentId="2063" CreationDate="2013-11-15T00:15:59.420" Score="5" Body="&lt;p&gt;Chris is right, the problem is that the mechanical contact of the switch is bouncing. However, I disagree with his statement that the most elegant solution is polling. Polling is very inefficient for the task of counting how many times a button was pressed, and so I decided to post my own answer for clarification:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Interrupts are what you want. Polling is used when you want to constantly capture information, for example from a range sensor. Interrupts give you time sensitive control, and only performs processing at the exact time you need it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a more thorough answer...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This design problem is commonly referred to as &quot;switch debouncing.&quot; As Chris correctly mentions, you can do this in hardware or software. The optimal method of implementation with respect to count accuracy and CPU load is to use hardware to smooth out the signal and connect your button to an interrupt pin on the Arduino. You can then use the built in attachInterrupt() function to eliminate the need to poll constantly. Polling is a waste of CPU power. The attachInterrupt() function will assign an interrupt handler that will be called whenever the interrupt pin sees a RISING or FALLING edge (this depends on how you have your switch electrically connected), or even more generally on a CHANGE. This would look similar to the following:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;attachInterrupt(0, buttonHandler, RISING);&#xA;&#xA;void buttonHandler() {&#xA;   // turn LED on:    &#xA;  digitalWrite(ledPin, HIGH); &#xA;  count = count + 1;  &#xA;  Serial.print(count);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This page explains the problem of switch debouncing and shows some example hardware circuits you can easily implement: &lt;a href=&quot;http://www.elexp.com/t_bounc.htm&quot; rel=&quot;nofollow&quot;&gt;http://www.elexp.com/t_bounc.htm&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: You probably won't be able to see the led go HIGH because it will be handled so quickly. This code will increment the count once every time the button is pressed or released, depending on whether you attach the interrupt to the rising or falling edge of the signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit for OP's comment:&#xA;If you want the serial.print to say that the button is pressed the entire time, then add a while loop in the interrupt:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void buttonHandler() {&#xA;   // turn LED on:    &#xA;  digitalWrite(ledPin, HIGH); &#xA;  count = count + 1;&#xA;  Serial.print(count);&#xA;  while(digitalRead(buttonPin)) //This will loop until the button is released&#xA;    Serial.print(&quot;ON&quot;);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Please note that this will cause your program to stay inside the interrupt handler, and your main function will not execute. In your main function, you can then have a Serial.print(&quot;OFF&quot;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may also be able to use a boolean that is set to true in your interrupt handler:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void buttonHandler() {&#xA;   // turn LED on:    &#xA;  digitalWrite(ledPin, HIGH); &#xA;  count = count + 1;  &#xA;  Serial.print(count);&#xA;  buttonWasPressed = true;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;That way, in your main you can have an if statement to prevent your code from having to loop in the interrupt handler:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void loop() {&#xA;  if(buttonWasPressed) {&#xA;    while(digitalRead(buttonPin)) {&#xA;      Serial.print(&quot;ON&quot;);&#xA;    }&#xA;    buttonWasPressed = false;&#xA;  }&#xA;  else&#xA;    Serial.print(&quot;OFF&quot;);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="1960" LastEditorUserId="1960" LastEditDate="2013-11-20T16:47:28.790" LastActivityDate="2013-11-20T16:47:28.790" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2068" PostTypeId="1" AcceptedAnswerId="2069" CreationDate="2013-11-15T12:58:46.770" Score="11" ViewCount="1064" Body="&lt;p&gt;I have an &lt;a href=&quot;http://en.wikipedia.org/wiki/Radio-controlled_model&quot; rel=&quot;nofollow noreferrer&quot;&gt;RC&lt;/a&gt; car. The battery provides power to the &lt;a href=&quot;https://en.wikipedia.org/wiki/electronic_speed_control&quot; rel=&quot;nofollow noreferrer&quot;&gt;ESC&lt;/a&gt; and then the ESC provides 6 V back out to the receiver. Instead of the receiver I have a Raspberry Pi, which uses the 6 V, steps it down to 5 V and provides power to the Raspberry Pi.&lt;/p&gt;&#xA;&lt;h3&gt;The problem&lt;/h3&gt;&#xA;&lt;p&gt;Every time we go full power*, there is a lack of voltage and the Raspberry Pi seems to hard reset.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;* By full power we mean direct to 100% and not ranging from 0-100&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;I am not an expert in electrical circuits, but some of the suggestions are to use a capacitor to provide the missing 5 V in the interim. How do I prevent the Raspberry Pi from dying in the event of full power?&lt;/p&gt;&#xA;" OwnerUserId="2241" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2014-01-11T15:25:12.277" Title="My Raspberry Pi is losing power in a surge" Tags="&lt;raspberry-pi&gt;&lt;electronics&gt;&lt;esc&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2069" PostTypeId="2" ParentId="2068" CreationDate="2013-11-15T13:48:56.520" Score="5" Body="&lt;p&gt;Since you're running directly from a battery I would say it's safe to just add as much decoupling (in other words caps across your input power) as possible, since the only real downside (that I think is relevant to your setup) to adding a lot of capacitance is increased in-rush current (since the capacitor naturally acts as a short-circuit during charge-up).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In certain circumstances however the high current draw associated with excessive decoupling during initial start-up should be avoided. An example is when you use a switching converter to step a voltage up/down. If the converter has built in over current protection (and no slow start feature), the short-circuit caused by the uncharged caps will cause the converter to stagger (starting up, over current and starting up again), and never fully reach its target voltage. However, since you're running directly from a battery this shouldn't be a problem, since a battery can be driven way above it's rated current capacity (for short periods).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another thing to also remember is that since there exists a large energy store across your power rails (the capacitors), the system might take a while to discharge (after being powered off). In other words, your Pi will probably run for another 30 seconds (depending on how much capacitance you add) or so after you disconnect your main battery.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, always try to add capacitors that's rated at at least twice your operating voltage (for instance, if you have 6V batteries try to get 16V caps). Motors that reverses their direction very quickly may induce sufficiently large voltage spikes back into your system, and cause your caps to explode (hopefully your motor driver has sufficient clamping diodes).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would say a single 1000 uF electrolytic cap would be more than enough decoupling. If your Pi continues to brown-out, I guess the more appropriate cause would be your batteries not being able to supply the required current. Remember, the reason you Pi is restarting (or browning out) is due to the supply voltage dipping because the batteries are unable to supply the current the motors require. Adding capacitors will help with surges in currents (such as motors accelerating), but obviously won't solve long term high current draw.&lt;/p&gt;&#xA;" OwnerUserId="1775" LastEditorUserId="1775" LastEditDate="2013-11-15T13:58:24.847" LastActivityDate="2013-11-15T13:58:24.847" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2070" PostTypeId="2" ParentId="2068" CreationDate="2013-11-15T17:20:36.763" Score="5" Body="&lt;p&gt;It sounds like you're experiencing a &quot;brown out&quot; caused when the excessive current draw from the battery causes a drop in the supply voltage.  This is due to the fact that batteries have internal resistance (a.k.a &lt;a href=&quot;http://en.wikipedia.org/wiki/Output_impedance#Batteries&quot; rel=&quot;nofollow noreferrer&quot;&gt;output impedance&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/o8c50.png&quot; alt=&quot;internal resistance&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this example, if the load drops to $0.2\Omega$, the internal resistance of the battery will cause the output voltage to be divided equally with the external resistance -- the load will only see 5V.  It's possible that your 6V supply is dropping to 3V (or less) under load, in much the same way.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A capacitor will delay this effect, but what you really need is a voltage regulator -- many are available in an integrated circuit (IC) package.  Some voltage regulators will step up voltage when insufficient, but most simply lower a supply voltage to the voltage needed by a component like your RPi (in which case, your battery voltage would have to be increased so that it never dipped below 5V under full motor load).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively, you could use a separate battery pack for the RPi.  This is a common solution for mobile robots, because it ensures that when the robot is immobilized due to lack of power, radio communication with the onboard PC will not be lost.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2013-11-17T23:11:33.453" LastActivityDate="2013-11-17T23:11:33.453" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2071" PostTypeId="2" ParentId="2048" CreationDate="2013-11-15T19:58:25.887" Score="0" Body="&lt;p&gt;I'll be honest, I don't understand what some of your code is doing. Why is there a 4bit mask for the encoders? Is this the direction? What is pulse_width_h1 vs pulse_width_h2...please comment your code and I will be able to help you. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition, your controller is odd. It looks like you're simply adding 1 or -1 depending on the sign of the error. You should look into a PID controller. These are easy to implement and VERY commonly used to implement velocity control. You can start with just a P (proportional) term. The idea is to tune your gain K_p until the system behaves as desired.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To reiterate...please comment your code and I can edit this post to provide a better answer.&lt;/p&gt;&#xA;" OwnerUserId="1960" LastActivityDate="2013-11-15T19:58:25.887" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2072" PostTypeId="2" ParentId="2048" CreationDate="2013-11-16T01:34:02.520" Score="0" Body="&lt;p&gt;I looked at the PID controller basics and found that its the canonical solution for this kind of speed control problem. I used the arduino PID library and it worked pretty well. I had to spend some time figuring out the PID parameters (Kp, Ki, Kd) manually by trial and error. But,  with this, I am now able to get my motors running at the required speed with pretty much stable behaviour. You can take a look the new PID based code &lt;a href=&quot;https://github.com/punitsoni/rv_arduino/blob/master/rv_arduino.ino&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="1144" LastEditorUserId="1144" LastEditDate="2013-11-16T01:39:10.520" LastActivityDate="2013-11-16T01:39:10.520" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2074" PostTypeId="1" AcceptedAnswerId="2076" CreationDate="2013-11-17T06:08:31.293" Score="0" ViewCount="580" Body="&lt;p&gt;I could swear that it was working for a while. I got back to my desk, tried it again, and it's no longer working. Could I have fried the NO pins on both sides? This is a DPDT relay. Everything works normally on the NC pins. I have never applied more than 5V. I do hear the relay click when I apply 5V to the coil. But when I measure voltage on the NO pins, I get 0V. Has anyone else seen this? I have two of these relays and I can't seem to get voltage on the NO pins with either relay. I should clarify that I'm expecting the same 5V power source to power both the coil and the common pins. If the NC pins work then I don't see why the NO pins shouldn't. In both cases the 5V is shared between the coil and any load attached to the NC/NO pins. I did try driving the entire circuit off a 9V power supply, but that did not change the results (and that does contradict my earlier statement that I've never applied more than 5V to this relay). My circuit is based on Charles Platt's &quot;Make: Electronics&quot;, p. 59.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's a pic of the schematic I am following, except that I am using a 5V relay and a 5V power supply (USB port) and I am using piezo buzzers without resistors instead of LEDs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/nYbnL.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="2247" LastEditorUserId="2247" LastEditDate="2013-11-17T15:14:22.100" LastActivityDate="2013-11-17T22:59:06.723" Title="Omron G5V-2 relay NO pins not working" Tags="&lt;electronics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2075" PostTypeId="1" CreationDate="2013-11-17T14:44:29.527" Score="4" ViewCount="2108" Body="&lt;p&gt;I'm looking for particle filter implementation in ROS to use in mobile robot localization, but it seems the only available package is &lt;a href=&quot;http://wiki.ros.org/amcl&quot; rel=&quot;nofollow&quot;&gt;amcl&lt;/a&gt; (Adaptive Monte Carlo), I'm not sure is it possible to use it as particle filter or not, and if it's feasible, how?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: The robot (wheeled robot) provides odometry data and another data source is &lt;code&gt;Kinect&lt;/code&gt;, that provides visual odometry data using &lt;a href=&quot;http://wiki.ros.org/fovis&quot; rel=&quot;nofollow&quot;&gt;fovis&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="2202" LastActivityDate="2013-11-19T15:31:49.787" Title="Particle filter implementation in ROS" Tags="&lt;mobile-robot&gt;&lt;localization&gt;&lt;ros&gt;&lt;particle-filter&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2076" PostTypeId="2" ParentId="2074" CreationDate="2013-11-17T18:41:09.620" Score="1" Body="&lt;p&gt;Problem solved. It turns out that the pin assignment on my relay is different from that in the book. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's the schematic for my actual relay (notice that the pin assignment is CO,NC,NO instead of NC,CO,NO as in the book)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Schematic of my actual relay:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/u7HMx.jpg&quot; alt=&quot;OMRON G5V-2&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="2247" LastEditorUserId="350" LastEditDate="2013-11-17T22:59:06.723" LastActivityDate="2013-11-17T22:59:06.723" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2077" PostTypeId="1" CreationDate="2013-11-18T02:42:12.970" Score="3" ViewCount="310" Body="&lt;p&gt;I frequently bang my head on my desk after performing a task poorly. I would like to eliminate the unnecessary middle step of actually performing a task poorly. As such, I would like to design a system to hold my head and repeatedly strike it against my desk. Alternatively, a system that holds the desk and repeatedly strikes it against my head would be acceptable. Requirements are at least 2 strikes per second maximum with ~50cm travel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anybody make any recommendations for a system to base this device off of? Denso products, while small and affordable, do not have the required load capacity (some users may have a rather large head, and involuntary resistance is to be expected -- at least near the start of the cycle). I am thinking of something more industrial, perhaps:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/irpHH.jpg&quot; alt=&quot;Fanuc R-2000iA&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="2248" LastActivityDate="2013-11-18T02:42:12.970" Title="Recommendations for system to repeatedly force contact between head and desk" Tags="&lt;robotic-arm&gt;" AnswerCount="0" CommentCount="4" FavoriteCount="1" ClosedDate="2013-11-21T01:59:03.820" ContentLicense="CC BY-SA 3.0" />
  <row Id="2079" PostTypeId="2" ParentId="2068" CreationDate="2013-11-18T13:06:20.337" Score="5" Body="&lt;p&gt;I must agree with the other two answers, however the main issue is that you do not have enough voltage into your regulator (I see from your comment to Ian that you are using a Pololu D15V35F5S3 Regulator). If you refer to the &lt;a href=&quot;http://www.pololu.com/product/2110&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pololu D15V35F5S3 Product Description&lt;/a&gt;, down at the bottom you will find the following graph:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/ugMfs.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking at the red line for 5V output: Note for all currents greater than zero, the dropout voltage is greater than 1V. (The minimum input voltage necessary to achieve 5V output is 5V + dropout voltage.) The more current used by your 5V loads (Pi), the greater the dropout. The problem is compounded by any voltage drop in your 6V source due to current surges (see Ian's answer).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You either need a higher input voltage, a lower dropout regulator (this may be difficult and insufficient), a different regulator (buck-boost), or a different power source for the Pi.&lt;/p&gt;&#xA;" OwnerUserId="1844" LastEditorUserId="1844" LastEditDate="2013-11-18T15:04:51.773" LastActivityDate="2013-11-18T15:04:51.773" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2080" PostTypeId="2" ParentId="2075" CreationDate="2013-11-19T15:12:24.377" Score="5" Body="&lt;p&gt;Monte Carlo localization is just another name for a particle filter. Monte Carlo methods are a broader name for computational algorithms that rely on random sampling. A particle filter is a specific application of the general Monte Carlo method for localization, and so it is simply referred to sometimes as Monte Carlo localization.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you ask Lord Google, he'll tell you everything you want to know:&#xA;&lt;a href=&quot;http://en.wikipedia.org/wiki/Monte_Carlo_localization&quot;&gt;http://en.wikipedia.org/wiki/Monte_Carlo_localization&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sebastian Thrun has a great book called Probabilistic Robotics that talks about MCL (Monte Carlo Localization) if you're interested in something more formal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: I just read the amcl rosnode wiki page and it actually mentions pretty much exactly what I've said here...I'm sure if you just read the node's wiki page you'll find your answers. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The amcl rosnode currently works with laser range data (i.e. from a LIDAR), so you'll have to extend it if you want to take advantage of a Kinect. It seems like you'll need some form of sensor measurement, as opposed to pure odometry. You could combine the odometry readings from the wheels &amp;amp; the visual odometry in a Kalman Filter, but with no sensor readings to update your position and fix errors based on a map, you'll just accumulate error and you'd have no sensor update in your MCL. You should be able to generate range data using the Kinect for the purpose of applying it as the sensor update in the MCL algorithm, and it might even be possible to publish this as laser data in ROS if you reformat it. This would allow you to interface directly with the existing amcl package.&lt;/p&gt;&#xA;" OwnerUserId="1960" LastEditorUserId="1960" LastEditDate="2013-11-19T15:31:49.787" LastActivityDate="2013-11-19T15:31:49.787" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2081" PostTypeId="1" CreationDate="2013-11-20T07:41:16.627" Score="2" ViewCount="65" Body="&lt;p&gt;I am looking for some material to build a soft clear protective covering for RGB LEDs. The material needs to be close to transparent to allow light to shine through, be soft and compliant but sturdy enough to withstand someone standing on it. The ultimate goal is to have a floor of these LEDs that someone can jump in barefoot and change led colors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have tried Gel Candle Wax and Silicone but neither worked very well. I am looking for other material ideas and this was the most relevant of the StackExchanges that I could find. &lt;/p&gt;&#xA;" OwnerUserId="2263" LastActivityDate="2013-12-16T12:41:46.360" Title="Soft LED Protection Material" Tags="&lt;arduino&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2082" PostTypeId="2" ParentId="2018" CreationDate="2013-11-20T11:15:47.787" Score="1" Body="&lt;p&gt;Choosing which board/chip to use would also depend on the number of Input/Output ports you are going to need.&lt;br&gt;&#xA;Uno has analogue 6 in / 0 out, digital IO 14/ 6 do PWM, 1 serial port (tx,rx)&lt;br&gt;&#xA;Mega 2560 has 16 analogue / 0 out ports, digital IO 54/ 15 do PWM, 4 serial ports.&lt;br&gt;&#xA;The robodunio ATMega168 has the same spec as the UNO but the clock speed is lower; It's also based upon the freedunio.&lt;br&gt;&#xA;&lt;a href=&quot;http://arduino.cc/en/Products.Compare&quot; rel=&quot;nofollow&quot;&gt;http://arduino.cc/en/Products.Compare&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will find it hard to process video feed with each of these chips. You could process the video on a Pi as all ready suggested or use other hardware to to process the video feed then pass the resulting information to the arduino's to enable movement processing or some other action needed.  &lt;/p&gt;&#xA;" OwnerUserId="2099" LastActivityDate="2013-11-20T11:15:47.787" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2083" PostTypeId="1" AcceptedAnswerId="2191" CreationDate="2013-11-20T14:42:44.193" Score="3" ViewCount="168" Body="&lt;p&gt;I am using Arduino UNO to read a push button every time it is pressed.Earlier i was simply reading the Digital IO pin to read the count and then i faced the condition of switch debounce regarding which i had asked a &lt;a href=&quot;https://robotics.stackexchange.com/questions/2063/unable-to-read-pushbutton-press-properly-in-arduino&quot;&gt;question here&lt;/a&gt; and get to know that i must use Interrupt instead of reading a digital IO pin but even after using interrupt, i was facing the problem of Switch Debouncing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So i used &lt;a href=&quot;http://www.arduino.cc/en/Tutorial/Debounce&quot; rel=&quot;nofollow noreferrer&quot;&gt;this link&lt;/a&gt; and code given on this link&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;const int buttonPin = 2;    // the number of the pushbutton pin&#xA;const int ledPin = 13;      // the number of the LED pin&#xA;&#xA;// Variables will change:&#xA;int ledState = HIGH;         // the current state of the output pin&#xA;int buttonState;             // the current reading from the input pin&#xA;int lastButtonState = LOW;   // the previous reading from the input pin&#xA;&#xA;// the following variables are long's because the time, measured in miliseconds,&#xA;// will quickly become a bigger number than can be stored in an int.&#xA;long lastDebounceTime = 0;  // the last time the output pin was toggled&#xA;long debounceDelay = 50;    // the debounce time; increase if the output flickers&#xA;&#xA;void setup() {&#xA;  pinMode(buttonPin, INPUT);&#xA;  pinMode(ledPin, OUTPUT);&#xA;&#xA;  // set initial LED state&#xA;  digitalWrite(ledPin, ledState);&#xA;}&#xA;&#xA;void loop() {&#xA;  // read the state of the switch into a local variable:&#xA;  int reading = digitalRead(buttonPin);&#xA;&#xA;  // check to see if you just pressed the button&#xA;  // (i.e. the input went from LOW to HIGH),  and you've waited&#xA;  // long enough since the last press to ignore any noise:  &#xA;&#xA;  // If the switch changed, due to noise or pressing:&#xA;  if (reading != lastButtonState) {&#xA;    // reset the debouncing timer&#xA;    lastDebounceTime = millis();&#xA;  }&#xA;&#xA;  if ((millis() - lastDebounceTime) &amp;gt; debounceDelay) {&#xA;    // whatever the reading is at, it's been there for longer&#xA;    // than the debounce delay, so take it as the actual current state:&#xA;&#xA;    // if the button state has changed:&#xA;    if (reading != buttonState) {&#xA;      buttonState = reading;&#xA;&#xA;      // only toggle the LED if the new button state is HIGH&#xA;      if (buttonState == HIGH) {&#xA;        ledState = !ledState;&#xA;      }&#xA;    }&#xA;  }&#xA;&#xA;  // set the LED:&#xA;  digitalWrite(ledPin, ledState);&#xA;&#xA;  // save the reading.  Next time through the loop,&#xA;  // it'll be the lastButtonState:&#xA;  lastButtonState = reading;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and change &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; long debounceDelay = 50;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;to 10(means read any thing ina time gap of 10 mili second) as the code says.Now what is happening, code is running on the board and after some time my board get hang and LED stop toggling on any press of push button and then i had to manually reset my board.I also want to add upon a thing that i am also using a serial port in between when LED toggles or switch is pressed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am totally confused why this is happening.There can beone possibility that this is happening because i reduced time gap between two consecutive events to 10 from 50 miliseconds and that might be making AVR get hanged and thus require a manual reset.&lt;/p&gt;&#xA;" OwnerUserId="1322" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2013-12-26T10:26:42.393" Title="Arduino Uno getting a type of &quot;HANGED&quot; while runing samll code of switc debounce and Serial print" Tags="&lt;arduino&gt;&lt;c&gt;&lt;serial&gt;&lt;communication&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2084" PostTypeId="1" AcceptedAnswerId="3034" CreationDate="2013-11-20T16:25:12.700" Score="3" ViewCount="1460" Body="&lt;p&gt;I have a bag file that contains couple of topics needed for localization, odometry data, kinect data and &lt;code&gt;/tf&lt;/code&gt;. What I want is watching robot's movement path in &lt;code&gt;rviz&lt;/code&gt; after initializing robot position (even I don't know how to initial it). Any help?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All topics:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/scan&#xA;/tf&#xA;/clock&#xA;/map&#xA;/odom&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="2202" LastEditorUserId="350" LastEditDate="2014-05-01T19:16:19.760" LastActivityDate="2014-05-31T20:14:58.957" Title="Fake localization using bag file in ROS" Tags="&lt;localization&gt;&lt;ros&gt;" AnswerCount="2" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2085" PostTypeId="2" ParentId="939" CreationDate="2013-11-21T05:03:51.717" Score="1" Body="&lt;p&gt;This guy put a spring in between his 2nd servo to protect them from any slight differences... Maybe this is what you're looking for? &lt;a href=&quot;http://youtu.be/jqsmai2Nafk?t=1m13s&quot; rel=&quot;nofollow&quot;&gt;http://youtu.be/jqsmai2Nafk?t=1m13s&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2266" LastActivityDate="2013-11-21T05:03:51.717" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2086" PostTypeId="2" ParentId="2027" CreationDate="2013-11-21T08:26:32.620" Score="3" Body="&lt;p&gt;amcl receives the integrated odometry information over the tf topic between base_link and odom and then computes the correction between the odom frame and the map frame as the odometry accumulates drift. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Frames are defined in &lt;a href=&quot;http://www.ros.org/reps/rep-0105.html&quot; rel=&quot;nofollow&quot;&gt;REP 105&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="161" LastEditorUserId="5573" LastEditDate="2014-08-30T12:46:55.040" LastActivityDate="2014-08-30T12:46:55.040" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2087" PostTypeId="1" CreationDate="2013-11-22T12:48:56.097" Score="0" ViewCount="53" Body="&lt;p&gt;I am making a mobile base for a robot with wheels. I want to use a Kinect like a movement sensor (to avoid obstacles, recognition of people, etc...) but I read that there is 2 models, the 360 and the Developer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which Kinect works well for my job? And another thins, its there another thing that can I use like a movement sensor? To see diferent posibilities,&lt;/p&gt;&#xA;" OwnerUserId="2269" LastActivityDate="2013-11-22T12:48:56.097" Title="Which Kinect to a movement base?" Tags="&lt;mobile-robot&gt;&lt;wheeled-robot&gt;&lt;kinect&gt;" AnswerCount="0" CommentCount="3" ClosedDate="2014-01-14T19:52:09.713" ContentLicense="CC BY-SA 3.0" />
  <row Id="2088" PostTypeId="1" CreationDate="2013-11-23T12:37:27.940" Score="5" ViewCount="376" Body="&lt;p&gt;For a certain robotic application (actually for the FTC challenge this year) our team is performing an operation where a servo-driven arm could potentially be forced into an unknown position. We are using NXT+Tetrix.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since this could damage a powered servo working against this forced position (servo holding arm weight on fixed base is now trying to move heavy base relative to fixed arm), we are thinking about somehow de-powering our servos (or servo controller), in order to get the servos to &quot;relax&quot; and accept the mechanically-forced position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Originally, we were thinking of having our RobotC code determine the physical position of a given servo and set its desired position to there every loop, limiting how much a servo would try to fight the movement, but to our dismay, &lt;code&gt;ServoValue[fooServo]&lt;/code&gt; actually gives us the setpoint, and not the physical location (due to the servo being unable to provide this information).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We also considered setting &lt;code&gt;ServoChangeRate[fooServo]&lt;/code&gt; to 1(the minimal value) but this only changes the rate of the target location changing relative to the previous target.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, we're concluding that the only way to really do this is to fully depower the servos. Is this possible on NXT/Tetrix with RobotC?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A few notes:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;I realized as well that one could suggest to rig an encoder(associated with a Tetrix motor that does not need an encoder) onto the rotating area. That actually would not work for mechanical constraints.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I looked into setting &lt;code&gt;PWM enable&lt;/code&gt; as shown &lt;a href=&quot;http://stuyfissionfusiondevelopment.googlecode.com/files/HiTechnic%20Servo%20Controller%20Brief%20v1.2.pdf&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt; but am not sure how to send the i2c commands needed. If someone could clue me in to how these commands would be sent in terms of c code, that would be very helpful.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="964" LastEditorUserId="964" LastEditDate="2013-11-25T21:35:17.363" LastActivityDate="2014-01-22T05:14:27.620" Title="Powering down servos completely in RobotC+Tetrix" Tags="&lt;power&gt;&lt;rcservo&gt;&lt;nxt&gt;&lt;robotc&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2089" PostTypeId="1" AcceptedAnswerId="2095" CreationDate="2013-11-24T06:28:48.743" Score="2" ViewCount="98" Body="&lt;p&gt;I recently purchased at EY-80 from electrodragon: &lt;a href=&quot;http://www.electrodragon.com/?product=all-in-one-9-axis-motion-sensor-gyroscope-accelerometer-magnetometer-barometer&quot; rel=&quot;nofollow noreferrer&quot;&gt;EY-80 All in one 9-Axis Motion Sensor (Gyro + Acceler + Magneto + Baro)&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am having a hard time compiling the &lt;a href=&quot;https://github.com/Edragon/Arduino_sketch/wiki&quot; rel=&quot;nofollow noreferrer&quot;&gt;example code&lt;/a&gt; on my arduino:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/C7xKr.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is what is happening.  So far, I am only copy and pasting the code.  Any help? (I am somewhat new to programming, so don't fully understand all of the code)&lt;/p&gt;&#xA;" OwnerUserId="779" LastEditorUserId="37" LastEditDate="2013-11-25T12:07:56.047" LastActivityDate="2013-11-25T17:43:30.723" Title="Compiling Code for EY-80" Tags="&lt;arduino&gt;&lt;sensors&gt;&lt;gyroscope&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2090" PostTypeId="1" CreationDate="2013-11-24T11:09:41.173" Score="5" ViewCount="1966" Body="&lt;p&gt;I am about to make an rc car which uses a wifi connection. The body for the car would be made from aluminium and the wifi receiver will be placed inside this aluminium casing. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How do I make sure that this will work?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would I be forced to change my material or can I just make an extension for the receiver and make sure it is out of the casing? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If so , would that really help me?&lt;/p&gt;&#xA;" OwnerUserId="1989" LastActivityDate="2013-11-28T20:30:29.987" Title="Wifi to pass through aluminium" Tags="&lt;wifi&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2091" PostTypeId="1" AcceptedAnswerId="2094" CreationDate="2013-11-24T23:38:07.977" Score="9" ViewCount="12786" Body="&lt;p&gt;I am using an Arduino Uno to control an ESC for my (in progress) quadrocopter.  I am currently using the servo library to control the ESC, which works great.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Except..&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A count of 100 is max speed, meaning I only have 10 speeds between 90 (stopped) and 100 (motor at full power) to correctly run my quadrocopter, I would like to have many more speed options.  Any ideas?  I'm having a hard time using a PWM signal, I might not be doing it right though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My current code is &lt;a href=&quot;https://github.com/toozinger/Quad/blob/master/run_motor_as_servo.ino&quot;&gt;here&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;Servo.h&amp;gt;&#xA;&#xA;Servo myservo; // create servo object to control a servo&#xA;                // a maximum of eight servo objects can be created&#xA;&#xA;int pos = 0; // variable to store the servo position&#xA;&#xA;void setup()&#xA;{&#xA;  myservo.attach(8); // attaches the servo on pin 8 to the servo object&#xA;}&#xA;&#xA;void loop()&#xA;{&#xA;&#xA; int maxspeed=100;&#xA; int minspeed=0;&#xA; int delaytime=5;&#xA; int count;&#xA;&#xA; for(count=0; count &amp;lt;1; count+=1) {&#xA;  for(pos = minspeed; pos &amp;lt; maxspeed; pos += 1) // goes from 0 degrees to 180 degrees&#xA;  { // in steps of 1 degree&#xA;    myservo.write(pos); // tell servo to go to position in variable 'pos'&#xA;    delay(delaytime); // waits 15ms for the servo to reach the position&#xA;  }&#xA;  for(pos = maxspeed; pos&amp;gt;=minspeed; pos-=1) // goes from 180 degrees to 0 degrees&#xA;  {&#xA;    myservo.write(pos); // tell servo to go to position in variable 'pos'&#xA;    delay(delaytime); // waits 15ms for the servo to reach the position&#xA;  }&#xA;  if(count&amp;gt;1){&#xA;    break;&#xA;  }&#xA; }&#xA;&#xA; myservo.write(92);&#xA; delay(100000);&#xA; myservo.write(90);&#xA; delay(10000000);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="779" LastEditorUserId="37" LastEditDate="2013-11-25T12:20:51.923" LastActivityDate="2013-11-25T13:50:16.310" Title="How to use Arduino for ESC control?" Tags="&lt;arduino&gt;&lt;control&gt;&lt;quadcopter&gt;&lt;esc&gt;&lt;servomotor&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2092" PostTypeId="2" ParentId="2090" CreationDate="2013-11-24T23:59:31.227" Score="6" Body="&lt;p&gt;You can use an external onmidirectional wifi antenna, like &lt;a href=&quot;http://www.ebay.com/sch/i.html?_nkw=omni%20wifi%20antenna&amp;amp;_fscr=1&quot;&gt;these on ebay&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your wifi chip does not have a U-FL connector, you can use a SMA to U-FL adapter or directly a SMA Antenna.&lt;/p&gt;&#xA;" OwnerUserId="2281" LastEditorUserId="37" LastEditDate="2013-11-25T12:14:39.773" LastActivityDate="2013-11-25T12:14:39.773" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2093" PostTypeId="2" ParentId="2091" CreationDate="2013-11-25T02:54:30.603" Score="4" Body="&lt;p&gt;Your code uses the typical &lt;code&gt;servo.attach(pin)&lt;/code&gt; where you can use the overload of &lt;code&gt;servo.attach(pin, min, max)&lt;/code&gt; to set the min and max microseconds of the pulse width to match the desired ranges for you ESC. Additionally to make it a bit more clear where &lt;code&gt;myservo.write(90);&lt;/code&gt; is used to set the angle, you can use &lt;code&gt;myservo.writeMicroseconds(1500);&lt;/code&gt; to set the duration of the pulse directly in microseconds. &lt;/p&gt;&#xA;" OwnerUserId="821" LastEditorUserId="37" LastEditDate="2013-11-25T12:21:34.817" LastActivityDate="2013-11-25T12:21:34.817" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2094" PostTypeId="2" ParentId="2091" CreationDate="2013-11-25T13:50:16.310" Score="5" Body="&lt;p&gt;The servo.write(angle) function is designed to accept angles from 0 to 180.&#xA;(The value 180 is significantly larger than 100).&#xA;Could you tell me where in &lt;a href=&quot;http://playground.arduino.cc/ComponentLib/Servo&quot; rel=&quot;noreferrer&quot;&gt;the Servo documentation&lt;/a&gt; you read &quot;&lt;em&gt;100 (motor at full power)&lt;/em&gt;&quot;, so we can fix that typo?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please change the line&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;int maxspeed=100; /* wrong */&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;to&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;int maxspeed=180;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Also, please run &lt;code&gt;servo.refresh()&lt;/code&gt; periodically to keep the servos updated -- perhaps something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;for(pos = maxspeed; pos&amp;gt;=minspeed; pos-=1) // goes from 180 degrees to 0 degrees&#xA;{&#xA;    myservo.write(pos); // set the servo position&#xA;    myservo.refresh(); // tell servo to go to the set position&#xA;    delay(delaytime); // waits 15ms for the servo to reach the position&#xA;};&#xA;// ...&#xA;myservo.write(92);&#xA;for( long int delaytime = 0; delaytime &amp;lt; 100000; delaytime+=10 ){&#xA;    myservo.refresh(); // tell servo to go to the set position&#xA;    delay(10);&#xA;};&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;As mpflaga pointed out, you can get more precision by setting the pulse width directly in microseconds with&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;myservo.writeMicroseconds(1000); // typical servo minimum; some go down to 600 or less&#xA;myservo.writeMicroseconds(2000); // typical servo maximum; some go up to 2500 or more&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;p.s.:&#xA;Have you seen &lt;a href=&quot;http://arduino.cc/en/Tutorial/BlinkWithoutDelay&quot; rel=&quot;noreferrer&quot;&gt;&quot;blink without delay&quot;&lt;/a&gt; ?&#xA;That technique makes it much easier to read sensors and update servo positions with consistent heartbeat timing.&lt;/p&gt;&#xA;" OwnerUserId="187" LastActivityDate="2013-11-25T13:50:16.310" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2095" PostTypeId="2" ParentId="2089" CreationDate="2013-11-25T17:43:30.723" Score="1" Body="&lt;p&gt;After talking to a friend, I found out what I did wrong.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;I needed to include all of the #include libraries.&lt;/li&gt;&#xA;&lt;li&gt;I downloaded one of the libraries in html, instead of raw .h format which was messing up the program, so I downloaded the correct version.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The program is now working, and collecting data well!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you find your readings to be off, change the update delay from 500ms to 20ms and the readings will drastically improve.&lt;/p&gt;&#xA;" OwnerUserId="779" LastActivityDate="2013-11-25T17:43:30.723" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2096" PostTypeId="1" CreationDate="2013-11-27T07:59:50.847" Score="6" ViewCount="284" Body="&lt;p&gt;I'm trying to add my own robot in &lt;a href=&quot;https://www.openrobots.org/wiki/morse&quot; rel=&quot;nofollow&quot;&gt;Morse&lt;/a&gt; 1.1 (using Ubuntu 12.04). I am struggling to add an armature actuator and armature pose sensor to an existing robot. Can someone please explain how this can be done (preferably with some sample code and using the socket interface).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks. &lt;/p&gt;&#xA;" OwnerUserId="2292" LastEditorUserId="110" LastEditDate="2014-10-28T00:11:16.350" LastActivityDate="2015-06-03T12:41:23.153" Title="Using Armatures in Morse Robotic Simulator" Tags="&lt;mobile-robot&gt;&lt;sensors&gt;&lt;robotic-arm&gt;&lt;simulator&gt;&lt;python&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2097" PostTypeId="2" ParentId="2090" CreationDate="2013-11-28T20:30:29.987" Score="0" Body="&lt;p&gt;Your Wifi signals should be able to penetrate aluminum. Wifi uses radio waves which can go through some thick material. I know that Wifi signals pass through steel. The best way for you to know is to try. If it does not work, drill a hole in your casing and use an antennae.&lt;/p&gt;&#xA;" OwnerUserId="1309" LastActivityDate="2013-11-28T20:30:29.987" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2098" PostTypeId="1" CreationDate="2013-11-29T06:02:52.177" Score="1" ViewCount="663" Body="&lt;p&gt;I searched for GPS devices that provide 1 sec updates to server, but I have not found any.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found this &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;T=30s.Module has sent a monitoring data packet. After 12 seconds the&#xA;  server sends an acknowledgement. In 18 seconds later (T = 30s) module&#xA;  sends the next monitoring data packet&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Are there any products that take less than this time?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why do gps devices take this much time to send data?&lt;/p&gt;&#xA;" OwnerUserId="2301" LastEditorUserId="350" LastEditDate="2013-11-30T15:36:42.660" LastActivityDate="2013-11-30T16:28:57.007" Title="Are there any GPS sensors that provide data at 1Hz or faster?" Tags="&lt;sensors&gt;&lt;gps&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2100" PostTypeId="2" ParentId="2098" CreationDate="2013-11-29T21:25:35.530" Score="1" Body="&lt;p&gt;Many GPS receivers will output data more often than 1Hz. For example, the &lt;a href=&quot;https://www.sparkfun.com/products/11058&quot; rel=&quot;nofollow noreferrer&quot;&gt;Venus GPS&lt;/a&gt;, which can produce readings at 10Hz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/JjnBp.jpg&quot; alt=&quot;Venus GPS&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2013-11-29T21:25:35.530" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2101" PostTypeId="1" CreationDate="2013-11-29T21:40:42.333" Score="3" ViewCount="232" Body="&lt;p&gt;As I understand it, a Kalman filter uses a mathematical model of the robot to predict the robot's state at t+1. It then combines that prediction with information from sensors to get a better sense of the state.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the robot is an aeroplane, how accurate/realistic does the model need to be? Can I get away with simple position and velocity, or do I therefore need an accurate flight model with computational fluid dynamics?&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2014-03-10T22:57:35.317" Title="Do I need an accurate flight model for a UAV?" Tags="&lt;kalman-filter&gt;&lt;uav&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2103" PostTypeId="2" ParentId="2098" CreationDate="2013-11-30T16:28:57.007" Score="1" Body="&lt;p&gt;The 1-second processing time is based on the fact that GPS technology uses &lt;a href=&quot;http://en.wikipedia.org/wiki/Code_division_multiple_access&quot; rel=&quot;nofollow&quot;&gt;CDMA&lt;/a&gt; to allow the receiver to pick up all satellite signals simultaneously.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For GPS to work, your receiver must perform several steps:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Step 0) Locate which satellites are overhead (this can be assisted by something called an &lt;a href=&quot;http://en.wikipedia.org/wiki/GPS_signals#Almanac&quot; rel=&quot;nofollow&quot;&gt;almanac&lt;/a&gt;).  This step only happens when the unit is first powered on.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;The signals from all visible satellites are received one the same frequencies simultaneously, and amplified.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The spread-spectrum digital signal is extracted by mixing the received signal with a local carrier (&lt;a href=&quot;http://www.ele.uri.edu/Courses/ele436/labs/DSSS.pdf&quot; rel=&quot;nofollow&quot;&gt;more info, PDF&lt;/a&gt;).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;For each satellite (of at least 4), a pseudo-random code is generated to match the code of that given satellite.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The remote (sender) and local (receiver) codes are synchronized.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The incoming signal is decoded using the now-synchronized code. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The decoded signal contains a known pseudorandom sequence, which is matched against a local sequence to determine the distance from the satellite that transmitted the signal (this is based on the time offset between the sequences).  &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;When all signals have been decoded, any clock inaccuracies are corrected and the position can be calculated.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Repeat.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Notice that each satellite's signal has its own code, which helps it stand out from all the other satellite signals.  Simpler GPS units will process these decoding steps sequentially, while more sophisticated units use multiple receivers to process the signals in parallel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can further speed up the reporting rate of a GPS by combining the updates with an estimation based on odometry, an accelerometer, etc.  &lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2013-11-30T16:28:57.007" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2104" PostTypeId="1" AcceptedAnswerId="2129" CreationDate="2013-11-30T21:58:59.943" Score="3" ViewCount="696" Body="&lt;p&gt;I'm trying to figure out a way that I can calculate the probability that a particle will survive the re-sampling step in the particle filter algorithm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the simple case of multinomial re-sampling, I can assume that we can model the process like a Binomial distribution if we only care about one sample/particle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if the particle has a weight of w that is also the probability that it will get selected in a step of the re-sampling. So we use 1 - P(k, p, n) where P is the Binomial distribution, k is 0 (we did not select the particle in all our tries), p is equal to w and n is equal to M, the number of particles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the case though in the systematic re-sampling, where the probability of a particle being selected is proportional but not equal to its weight?&lt;/p&gt;&#xA;" OwnerUserId="2309" LastEditorUserId="2309" LastEditDate="2014-10-15T09:13:06.117" LastActivityDate="2014-10-15T09:13:06.117" Title="How to calculate probability of particle survival for particle filter?" Tags="&lt;particle-filter&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2105" PostTypeId="1" AcceptedAnswerId="2113" CreationDate="2013-12-01T02:11:11.960" Score="2" ViewCount="3582" Body="&lt;p&gt;Basically, I want to detect an ultrasonic beacon in a radius around the robot.&#xA;The beacon would have a separate ultrasonic emitter while the robot would have the spinning receiver.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any existing ultrasonic sensors that would meet this use case or am I stuck hacking one together myself?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is ultrasonic even the best choice? I was hoping that the beacon would be kept in a pocket, so I figured optical sensors were out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: The beacon and robot will both be mobile so fixed base stations are not an option.&lt;/p&gt;&#xA;" OwnerUserId="1952" LastEditorUserId="1952" LastEditDate="2013-12-01T21:31:26.810" LastActivityDate="2016-06-17T16:32:35.670" Title="360 degree ultrasonic beacon sensor" Tags="&lt;sensors&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2106" PostTypeId="1" CreationDate="2013-12-01T20:19:07.187" Score="2" ViewCount="117" Body="&lt;p&gt;Having read the &lt;a href=&quot;http://books.google.com/books?id=jd8DAAAAMBAJ&amp;amp;lpg=PA128&amp;amp;dq=automatic%20car&amp;amp;pg=PA128#v=onepage&amp;amp;q&amp;amp;f=false&quot; rel=&quot;nofollow&quot;&gt;article&lt;/a&gt; &quot;This Car Has Electric Brains&quot; in Popular Mechanics, August 1958 I have some questions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How practical were his methods? Was his work acquired by a car manufacturer or some other company? Were his methods developed further?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How did his corner navigation work? I don't think he needed to know the distances of road segments; I think he could have used sonar or radar to detect a corner but if cars were entering the corner before him, he could misinterpret those cars as a wall and the absence of a corner. Additionally I think he'd need two sonar/radar systems on both sides of the cars which aren't mentioned; all that's mentioned is a set of relays.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the compensator that is mentioned (it's said to function as a gyroscope)? I cannot find any information on this device (that I'm sure is relevant).&lt;/p&gt;&#xA;" OwnerUserId="2310" LastEditorUserId="163" LastEditDate="2014-04-25T14:52:00.753" LastActivityDate="2014-04-25T14:52:00.753" Title="What happened to Butler's car?" Tags="&lt;design&gt;&lt;navigation&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2107" PostTypeId="2" ParentId="758" CreationDate="2013-12-02T17:18:37.163" Score="0" Body="&lt;p&gt;I test positive for aspergers syndrome on highly validated tests and I can read facial expressions sufficiently well to notice certain patterns in my daily interactions and one of the most noticeable &quot;common&quot; patterns is the disgust/revulsion pattern. The sequencing is pretty simple, I start talking, within 500ms of hearing my talking, the face of the respondent contorts in a most hideous way, and then they immediately start wanting to leave/get-away by whatever means possible. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Researching the uncanny valley, as part of my studies into all things related to aspergers syndrome, I couldn't help but notice the similarity of the reactions I get and the reactions described on wikipedia.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Knowing of the evolutionary significance of autism spectrum disorders (Mainly, less of them work, they earn less money on average and, anecdotally, they tend to have fewer friends/girlfriends than average... and money has its evolutionary underpinnings...), it would seem to me there's probably an evolutionary connection between autism and the uncanny valley concept.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, according to the tests, I'm a &quot;light sufferer&quot;(I feel like I suffer plenty, though, BELIEVE me.), so I can read facial expressions in a way that more severely affected apparently can't(?). So, I appear to be right between the extremes of blends-in-and-reads-people-well/doesn't-blend-in-and-can't-read-people-well, getting the worst of both worlds.&lt;/p&gt;&#xA;" OwnerUserId="2314" LastActivityDate="2013-12-02T17:18:37.163" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2108" PostTypeId="2" ParentId="39" CreationDate="2013-12-02T18:00:12.543" Score="0" Body="&lt;p&gt;The robotics team I lead at NCSU has implemented the ability to drive our holonomic robot using a Leap motion controller. Here's a &lt;a href=&quot;https://www.youtube.com/watch?v=BDgmRz1Gb7Q#t=0&quot; rel=&quot;nofollow&quot;&gt;demo video&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Our codebase is in Python, so we used the Python Leap library, which was quite simple and friendly. Our Leap-related code is only about 150 lines. Our client basically takes pitch, yaw and roll data from the Leap controller and converts it into movements, which it uses to make calls to our bot's API using ZMQ. I can share the code with you if you're interested in additional details (currently in a private GitHub repo pending our contest, but it's open sourced under the BSD two-clause license).&lt;/p&gt;&#xA;" OwnerUserId="2173" LastActivityDate="2013-12-02T18:00:12.543" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2109" PostTypeId="1" CreationDate="2013-12-02T20:52:32.100" Score="4" ViewCount="158" Body="&lt;p&gt;POMDPs are used when we cannot observe all the states.&#xA;However, I cannot figure out when these POMDPs can be useful in robotics. What is a good example of the use of POMDPs? (I have read one paper where they used them, but I didn't find it obvious why pomdps should be used) What would be good projects ideas based on POMDPs?&lt;/p&gt;&#xA;" OwnerUserId="2316" LastEditorUserId="2316" LastEditDate="2013-12-02T21:01:06.863" LastActivityDate="2015-06-30T17:20:06.540" Title="POMDPs in robotics" Tags="&lt;algorithm&gt;&lt;artificial-intelligence&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2110" PostTypeId="1" AcceptedAnswerId="2112" CreationDate="2013-12-02T22:23:42.537" Score="1" ViewCount="1644" Body="&lt;p&gt;I have a WL v262 quadcopter and I want to control it using Arduino instead of the joysticks on the transmitter. I opened up the transmitter and saw that each joystick has 2 potentiometers on the PCB and that the voltage for each pot goes from 0-3.3V. I used arduino's PWM and a low pass filter and connected the output of the filtered output to the potentiometer's analog pin which is connected to the PCB (I cannot desolder and take out the pots from the PCB) but even with this $V_{out}$ going onto the analog pin, my transmitter's display gave ???? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I am really confused and frustrated because I don't know how else to control this transmitter other than attaching stepper motors to the joysticks and manually controlling the transmitter but this is really my last resort. Can someone help me with this? I have spent hours and hours trial and error but I am getting nowhere. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the PCB of the transmitter:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/Kd2Rw.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/vxRRg.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="2318" LastEditorUserId="350" LastEditDate="2013-12-05T16:14:35.830" LastActivityDate="2017-09-23T19:13:09.650" Title="RC Transmitter Quadcopter with Arduino" Tags="&lt;arduino&gt;&lt;sensors&gt;&lt;radio-control&gt;&lt;wireless&gt;" AnswerCount="4" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2111" PostTypeId="1" CreationDate="2013-12-02T22:40:44.637" Score="3" ViewCount="158" Body="&lt;p&gt;A Google search on &quot;bloodstream nanobots&quot; yields thousands of results and just on the first page, many results of blog posts that date back to 2009. It is nearly 4 years later. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've had no luck in finding any information on actual APPROVAL of these bots.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any countries at all who have approved this? People seem to have talked about it like crazy 4 years ago, yet, we're still not seeing anything.&lt;/p&gt;&#xA;" OwnerUserId="2319" LastEditorUserId="1445" LastEditDate="2013-12-22T12:49:32.957" LastActivityDate="2013-12-22T12:49:32.957" Title="Have bloodstream nanobots been approved in any countries?" Tags="&lt;microcontroller&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2112" PostTypeId="2" ParentId="2110" CreationDate="2013-12-03T00:51:06.893" Score="1" Body="&lt;p&gt;Did it actually output only &quot;????&quot;&#xA;Does removing the PWM restore normal operation?&#xA; It is likely that the load from the PWM is not initially within correct voltage range at RC's bootup and it is detecting this and faulting.&#xA;With the Pot's still inplace the range will be limited, but you could try to match it. Initially (and even while ????'ing) try to set the PWM's output to be the same voltage as when it is not connected. This may solve your ???? problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also note from your picture the Transmitter module at top between joy sticks. I would suspect that you can better decipher the stream of information sent into this module by the controller and send your own information. This would be similar to what I did for &lt;a href=&quot;https://github.com/mpflaga/Arduino-IRremote&quot; rel=&quot;nofollow&quot;&gt;IR Helicopter controllers &lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="821" LastActivityDate="2013-12-03T00:51:06.893" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2113" PostTypeId="2" ParentId="2105" CreationDate="2013-12-03T01:25:17.250" Score="0" Body="&lt;p&gt;If you were to place 3 ultrasonic microphones/sensors in a triangle layout you should be able to determine the direction of the beacon based on the time difference the ping arrives at each sensor with some straightforward trigonometry. They'd all have to be facing in the same direction (probably upwards) and you may have to find some way to make them omnidirectional. The further apart you can space the sensors, the more accurate the calculation will be.&lt;/p&gt;&#xA;" OwnerUserId="366" LastActivityDate="2013-12-03T01:25:17.250" CommentCount="12" ContentLicense="CC BY-SA 3.0" />
  <row Id="2114" PostTypeId="1" AcceptedAnswerId="2118" CreationDate="2013-12-03T17:00:28.630" Score="4" ViewCount="1547" Body="&lt;p&gt;I am interested in getting an arducopter with an ardupilot(APM). I read through the documentation and from what I understand, ardupilot is the low level hardware and firmware that directly controls the motors of the arducoptor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to know if there is a higher level programmatic interface to the ardupilot? The mission planner provides a user interface to control the ardupilot. But is there a programmatic interface to control it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In other words, would it be possible for a user written 'linux process' to receive and send sensory data to and from the ardupilot respectively?&lt;/p&gt;&#xA;" OwnerUserId="466" LastEditorUserId="350" LastEditDate="2013-12-05T16:07:04.070" LastActivityDate="2013-12-05T16:07:04.070" Title="sending and receiving parameters to ardupilot" Tags="&lt;quadcopter&gt;&lt;ardupilot&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2115" PostTypeId="2" ParentId="2109" CreationDate="2013-12-03T18:10:47.260" Score="2" Body="&lt;p&gt;A good rule of thumb is that where ever an MDP is useful in theory a POMDP would likely need to be used in reality.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To answer your question directly I would direct you to some of the latest work coming out of the &lt;a href=&quot;http://arl.cs.utah.edu/&quot; rel=&quot;nofollow&quot;&gt;Algorithmic Robotics Lab&lt;/a&gt;. My advisor and I recently developed a method wherein we use a POMDP at the core of a new grey-box system identification method. In this method we know an approximate kinematic or dynamic model of the robot in question. We do not however know some of the associated parameters (e.g. mass, center of mass). One way to learn the parameters is to use an extended Kalman filter (EKF) to monitor the system while the motor babbling. However more can be learned if the dynamics are excited correctly. To achieve this part we use a POMDP to plan controls. The details can be found in our paper &lt;a href=&quot;http://arl.cs.utah.edu/research/ope/&quot; rel=&quot;nofollow&quot;&gt;Online Parameter Estimation via Real-time Replanning of Continuous Gaussian POMDPs&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="177" LastActivityDate="2013-12-03T18:10:47.260" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2116" PostTypeId="2" ParentId="1083" CreationDate="2013-12-03T22:33:04.933" Score="0" Body="&lt;p&gt;For the i =2, with alpha(i-1), it should be 0 if Z1 and Z2 are parallel &lt;/p&gt;&#xA;" OwnerUserId="2322" LastActivityDate="2013-12-03T22:33:04.933" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2117" PostTypeId="1" AcceptedAnswerId="2123" CreationDate="2013-12-03T22:49:16.563" Score="4" ViewCount="147" Body="&lt;p&gt;For examples if i have this robotic arm:&#xA;&lt;a href=&quot;http://www.youtube.com/watch?v=bKafht51Juw&quot; rel=&quot;nofollow&quot;&gt;Example&lt;/a&gt;, for the base rotation (5th DOF in the clip at 0:58), we know that the Z axis for that joint will be the same as the Z axis for the base frame{0}, but I don't know about Y and Z axises of the base rotation respects to the base frame, should they be the same or not ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And one more thing, for defining the frame of the base rotation (at 0:58 in the clip), the vertical arm pitch (at 0.47 in the clip) and the horizontal arm pitch (at 0:46 in the clip), it's pretty easy, but I don't know how to continue for defining the frame of wrist roll (at o.12 in the clip) and wrist pitch (0.23 in the clip) since the angle between the Z axis of wrist roll and the wrist pitch is now 90o.&#xA;&lt;br&gt; Thank you very much.&lt;/p&gt;&#xA;" OwnerUserId="2322" LastActivityDate="2013-12-06T14:43:58.753" Title="Defining frames for 5DOF robotics arm" Tags="&lt;localization&gt;&lt;kinematics&gt;&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2118" PostTypeId="2" ParentId="2114" CreationDate="2013-12-03T22:52:47.857" Score="1" Body="&lt;p&gt;Yes, there is programmatic interface. Like many autopilot systems the Ardupilot uses a protocol called &lt;a href=&quot;http://qgroundcontrol.org/mavlink/start&quot; rel=&quot;nofollow&quot;&gt;Mavlink&lt;/a&gt;. It allows for both sending commands and receiving telemetry data. It also allows for managing the data that is sent to the ground control system to avoid overburdening ones communication link. There is support for Mavlink in C and python as well as a ROS library (see &lt;a href=&quot;https://github.com/mavlink&quot; rel=&quot;nofollow&quot;&gt;Mavlink Github&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Furthermore this can be used for onboard control via a single board computer (SBC) such as a Raspberry Pi, Gumstix, or PCduino by interfacing the preferred SBC with the Ardupilot XBee port which is really just a TTL level serial.&lt;/p&gt;&#xA;" OwnerUserId="177" LastEditorUserId="177" LastEditDate="2013-12-04T06:53:26.297" LastActivityDate="2013-12-04T06:53:26.297" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2119" PostTypeId="1" CreationDate="2013-12-04T17:35:23.833" Score="2" ViewCount="231" Body="&lt;p&gt;For a university course I have been asked to design a rough &quot;specification&quot; for a system that will deburr a plastic box that appears in a workspace. Due to irregularities in the boxes edges I cannot use simple position control and must use force control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have so far decided on;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using an IR sensor to detect the box has appeared in the workspace.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Use an Epson 2 axis robot to move around the work piece&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Use an ATI 6 axis force sensor to maintain a constant force against the edge of the box as the deburrer/robot moves around it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a simple means of detecting the end of each side of the box ?&#xA;A 0N force value would indicate reaching the edge of a box but it could also mean a breakage in the box which was also specified. How can I distinguish between the two ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also does my work so far sound sensible ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks for any help&lt;/p&gt;&#xA;" OwnerUserId="2330" LastActivityDate="2013-12-17T23:54:08.467" Title="Deburring Robot (Plastic Box)" Tags="&lt;control&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2120" PostTypeId="2" ParentId="2119" CreationDate="2013-12-05T00:06:44.130" Score="0" Body="&lt;p&gt;Supposing all the boxes (or all the boxes being run in a batch) are the same size, and that they have rectangular cross-sections, consider fastening an L-shaped fixture to the workspace surface, at a location somewhat aside from the point where the box usually appears.  When the box does appear, push it against the L stop via a moving L-shaped fixture that is spring-loaded and has a fair amount of travel.  Upon detecting that the springs have compressed enough (or upon activation of limit switches, etc.) latch the moving L into place.  Now the box's  orientation (that is, which of four possible rotations has occurred) can be tested using force sensors, limit switches, or optical sensors.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even with the box in a known location and orientation, it appears (from your mention of box-edge irregularities) that use of force sensors still is necessary, but presumably you will know where the end-product edges should be, so can keep deburring until the force sensors indicate close-enough results.&lt;/p&gt;&#xA;" OwnerUserId="478" LastActivityDate="2013-12-05T00:06:44.130" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2121" PostTypeId="1" CreationDate="2013-12-05T01:15:41.073" Score="8" ViewCount="310" Body="&lt;p&gt;Suppose I have a particle filter which contains an attitude state (we'll use a unit quaternion from the body to the earth frame for this discussion) $\mathbf{q}_b^e$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What methods should or should not be used for resampling? Many resampling schemes (e.g. &lt;a href=&quot;http://www.stat.columbia.edu/~liam/teaching/neurostat-spr12/papers/EM/resampling.pdf&quot;&gt;this paper&lt;/a&gt;) seem to require the variance to be calculated at some stage, which is not trivial for $SO\{3\}$. Or, the variance is required when performing roughening.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any good papers on resampling attitude states?  Especially those that re-sample complete poses (e.g. position and attitude)?&lt;/p&gt;&#xA;" OwnerUserId="959" LastEditorUserId="177" LastEditDate="2013-12-05T03:19:20.263" LastActivityDate="2013-12-06T16:35:49.323" Title="Resampling attitude states (quaternions, rotation matrix) in a Particle Filter" Tags="&lt;particle-filter&gt;&lt;pose&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2122" PostTypeId="2" ParentId="344" CreationDate="2013-12-05T20:39:39.243" Score="1" Body="&lt;p&gt;There is a nice closed form to this.  Let's say that we don't care what $r_z$ is (i.e. we don't care how we &lt;em&gt;change&lt;/em&gt; it).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\mathbf{J}^{-1}\dot{\mathbf{X}}=&#xA;\dot{\mathbf{\Theta}}=&#xA;\begin{bmatrix}&#xA;\vec{j_{1}} &amp;amp; \vec{j_{2}} &amp;amp; \vec{j_{3}} &amp;amp; \vec{j_{4}} &amp;amp; \vec{j_{5}} &amp;amp; \vec{j_{6}}&#xA;\end{bmatrix}&#xA;\begin{bmatrix}&#xA;\dot{x}\\&#xA;\dot{y}\\&#xA;\dot{z}\\&#xA;\dot{r_x}\\&#xA;\dot{r_y}\\&#xA;\dot{r_z}&#xA;\end{bmatrix}&#xA;=&#xA;\begin{bmatrix}&#xA;\dot{\theta_1}\\&#xA;\dot{\theta_2}\\&#xA;\dot{\theta_3}\\&#xA;\dot{\theta_4}\\&#xA;\dot{\theta_5}\\&#xA;\dot{\theta_6}\\&#xA;\end{bmatrix}&#xA;$$&#xA;Where $\vec{j_{i}}$ is the $i^{th}$ column of $\mathbf{J}^{-1}$.&#xA;We can break up $\dot{\mathbf{\Theta}}$ into the portion that depends on $\dot{r_z}$ and the portion that doesn't.&#xA;$$&#xA;\dot{\mathbf{\Theta}}=&#xA;\dot{\mathbf{\Theta}}_{\dot{x}\dots \dot{r_y}} + \dot{\mathbf{\Theta}}_{\dot{r_z}}&#xA;\\&#xA;\dot{\mathbf{\Theta}}_{\dot{r_z}}=&#xA;\vec{j_{6}}&#xA;\dot{r_z}&#xA;$$&#xA;So now the game has become, let's minimize &#xA;$$&#xA;(\dot{\mathbf{\Theta}}_{\dot{x}\dots \dot{r_y}} + \dot{\mathbf{\Theta}}_{\dot{r_z}})^T&#xA;D(\dot{\mathbf{\Theta}}_{\dot{x}\dots \dot{r_y}} + \dot{\mathbf{\Theta}}_{\dot{r_z}})&#xA;$$ &#xA;for some diagonal matrix $D$ like ronalchn said above.  I'm going to use $A=\dot{\mathbf{\Theta}}_{\dot{x}\dots \dot{r_y}}$ and $B=\dot{\mathbf{\Theta}}_{\dot{r_z}^*}$ for easier viewing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We can expand this out to&#xA;$$&#xA;A^TDA+2B^TDA+B^TDB\\&#xA;\text{or}\\&#xA;A^TDA+2\dot{r_z}\vec{j_{6}}^TDA+\dot{r_z}^2\vec{j_{6}}^TD\vec{j_{6}}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now we have an easy equation to differentiate on $\dot{r_z}$.  We find the derivative with respect to $\dot{r_z}$ and set it to $0$.&#xA;$$&#xA;2\vec{j_{6}}^TDA+2\dot{r_z}\vec{j_{6}}^TD\vec{j_{6}}=0\\&#xA;\dot{r_z} = \frac{-\vec{j_6}^TDA}{\vec{j_6}^TD\vec{j_6}}&#xA;$$&#xA;This minimizes the joint angle &quot;distance&quot; between your two poses.&lt;/p&gt;&#xA;" OwnerUserId="2175" LastEditorUserId="2175" LastEditDate="2013-12-18T18:31:22.517" LastActivityDate="2013-12-18T18:31:22.517" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2123" PostTypeId="2" ParentId="2117" CreationDate="2013-12-05T21:32:45.513" Score="2" Body="&lt;p&gt;Follow the &lt;a href=&quot;http://en.wikipedia.org/wiki/Denavit%E2%80%93Hartenberg_parameters&quot; rel=&quot;nofollow&quot;&gt;Denavit-Hartenburg&lt;/a&gt; parameters, and you'll get easy equations for the transformation matrices between each frame.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The $z_n$-axis is in the direction of the $(n+1)^{th}$ joint axis&lt;/li&gt;&#xA;&lt;li&gt;The $x_n$-axis is collinear to the common normal: $x_n = z_n × z_{n-1}$ If there is no unique common normal (parallel $z$ axes), the direction of $x_n$ is from $z_{n-1}$ to $z_n$.&lt;/li&gt;&#xA;&lt;li&gt;The $y$-axis follows from the $x$- and $z$-axis by choosing it to be a right-handed coordinate system.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="2175" LastActivityDate="2013-12-05T21:32:45.513" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2124" PostTypeId="1" CreationDate="2013-12-06T11:10:46.623" Score="6" ViewCount="247" Body="&lt;p&gt;I would like to know if anyone here has used the Blueview SDK (Linux) for retrieval of images from the pings obtained by a multibeam sonar (P450, P900, etc.) ?&#xA;If so, I'd like to know why would anyone get a &lt;em&gt;null head&lt;/em&gt; when I trying to retrieve the head (eventually for the pings to be converted to an image) using the &lt;code&gt;BVT_GetHead()&lt;/code&gt; method. My snippet for retrieving the image from a &lt;code&gt;.son&lt;/code&gt; file (some_son_data.son) is given below:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;int main() {&#xA;    BVTSonar son = BVTSonar_Create();&#xA;    BVTSonar_Open(son, &quot;FILE&quot;, &quot;some_son_data.son&quot;);&#xA;&#xA;    if (NULL != son) cout &amp;lt;&amp;lt; &quot;son not null&quot; &amp;lt;&amp;lt; endl;&#xA;    BVTHead head = NULL ;&#xA;    BVTSonar_GetHead(son, 0, &amp;amp;head);&#xA;    return 0;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="2340" LastActivityDate="2015-04-30T23:24:29.727" Title="Image retrieval through a multibeam imaging sonar" Tags="&lt;auv&gt;&lt;sonar&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2125" PostTypeId="2" ParentId="2121" CreationDate="2013-12-06T14:30:17.367" Score="4" Body="&lt;p&gt;Most particle filter implementations will use some kind of importance sampling, which does not require you to make an assumption on the underlying distribution. This is one of the main reasons for using a particle filter in the first place. Importance sampling does not sample from the estimated distribution, but from your set of weighted samples.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This includes the ones in your linked paper. All the references to variance in there speak of the variance which is introduced by that particular re-sampling scheme. It is a measure on the quality of the re-sampling, since you do not want to introduce unnecessary uncertainty in your estimate of the true distribution by the particles. You do not need to calculate the variances of your particles for the re-sampling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the question which one work best? Your paper has some of the answers. I also made a &lt;a href=&quot;https://robotics.stackexchange.com/a/484/127&quot;&gt;post&lt;/a&gt; on the subject using less maths. In most cases some form of stratified resampling will be better than the multinomial scheme. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only case I could think of where you would need to calculate the variance of your SO(3) distribution as well would be when you wanted to verify the variance your resampling introduces. In that case, what I would do is to calculate the mean of the orientation (as you said, not trivial), and then use the variance of differences to the mean as scaled axis of rotation representation. But as I said. I don't think you need this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One word of caution: sampling over the full 6D pose is in most cases not recommended. You need a serious amount of particles for this. Even if you needed only 10 particles per dimension to represent your distribution appropriately - which often is not enough - this could mean that you need up to one million particles in 6D. Lots of memory and processing power...&lt;/p&gt;&#xA;" OwnerUserId="127" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2013-12-06T16:35:49.323" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2127" PostTypeId="1" AcceptedAnswerId="2128" CreationDate="2013-12-07T05:37:07.330" Score="0" ViewCount="63" Body="&lt;p&gt;I'd like some well put video series of like 30 videos. Or anything but it needs to thorough and in easy English...less mundane. So far all resources i have found either go upto resistors code or of projects that tell you do this and this and this and tada you got this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there really no online resource for people to learn electronics. I want further master analog and do move on to digital cause it's better to spend 0.40 cents.... than&#xA; spend $95 on components and get the whole thing on tiny chip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please bare with me like six months i have been searching for legit source, material that is meant to teach you. I like pictures and colors. &lt;/p&gt;&#xA;" OwnerUserId="1892" LastActivityDate="2015-03-04T17:41:23.527" Title="where can i learn electronics from intro to advance digital" Tags="&lt;electronics&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2013-12-07T17:16:32.233" ContentLicense="CC BY-SA 3.0" />
  <row Id="2128" PostTypeId="2" ParentId="2127" CreationDate="2013-12-07T07:39:25.390" Score="2" Body="&lt;p&gt;MOOCS are so popular nowadays, that I'm not sure you haven't check it out. Anyway, let's give it a shot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please, have a look at this courses:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;edx.org&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.edx.org/course-list/allschools/electronics/allcourses&quot; rel=&quot;nofollow&quot;&gt;https://www.edx.org/course-list/allschools/electronics/allcourses&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;www.coursera.org&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can also check out &lt;a href=&quot;http://www.coursera.org&quot; rel=&quot;nofollow&quot;&gt;www.coursera.org&lt;/a&gt;. it's similar to mentioned above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;MIT OpenCourseware&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And last but not least, you can also try to find something here:&#xA;&lt;a href=&quot;http://ocw.mit.edu/courses/find-by-topic/#cat=engineering&amp;amp;subcat=electricalengineering&amp;amp;spec=electronics&quot; rel=&quot;nofollow&quot;&gt;MIT OpenCourseware electronics&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt; Also, there's a site with all MOOCS in one place: &lt;a href=&quot;https://www.class-central.com/&quot; rel=&quot;nofollow&quot;&gt;class-central.com&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="1298" LastEditorUserId="1298" LastEditDate="2015-03-04T17:41:23.527" LastActivityDate="2015-03-04T17:41:23.527" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2129" PostTypeId="2" ParentId="2104" CreationDate="2013-12-07T17:46:43.520" Score="4" Body="&lt;p&gt;Let&#xA;$w_1 \dots w_n$ be the weights of $n$ particles, $p_i \triangleq \frac{w_i}{\sum\limits_{j=1}^{n}w_j}, \sum\limits_{j=1}^{n} p_j = 1$, then as you posted, the probability of the $i$th particle surviving in the resampling procedure for multinomial resampling is:&#xA;$$&#xA;P(Survival_i) = 1 - (1 - p_i)^n&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In systematic resampling, one concatenate $p_1 \dots p_n$ as a ring of interval [0,1). First select $\tilde{u} \sim U[0,1)$, and take $n$ points $u_k = \frac{k-1 + \tilde{u}}{n}, k = 0, \dots n-1$ equally spaced $\frac{1}{n}$ apart from each other on that ring, and take the $n$ samples which have partitions $p_i$ covering the $n$ points. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore, if $p_i \geq \frac{1}{n}$, the probability of survival for the $i$th particle is 1. If $p_i &amp;lt; \frac{1}{n}$, the probability of survival depends on $u_k$. Without loss of generality, let's always assume $i=1, p_1 &amp;lt; \frac{1}{n}$, and consider the probability of the first particle not being selected (you can always re-index the particles to see this is valid for all $i$). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order for the first particle not to be selected, there need to be two equally spaced points $\{u_j, u_{j+1}, | j = 0 \dots n-1\}$ such that $u_j &amp;lt; 0$ and $u_{j+1} &amp;gt; p_1$. The probability of this event happening for $j=0$ is equal to $\frac{1}{n}-p_1$ (consider the ring interval $[1-\frac{1}{n}+p_1, 1)$). The probability of the first particle not to be selected, is a combination of $n$ exclusive events $j=0, \dots n-1$. Therefore the probability of the first particle not selected is $n\times (\frac{1}{n}-p_1) = 1-n p_1$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Same derivation for other particles $i=1\dots n$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In conclusion,&#xA;$$&#xA;P(Survival_i) = 1, \text{if } p_i &amp;gt;= \frac{1}{n}\\&#xA;P(Survival_i) = np_i, \text{if } p_i &amp;lt; \frac{1}{n}&#xA;$$&lt;/p&gt;&#xA;" OwnerUserId="1064" LastEditorUserId="1064" LastEditDate="2013-12-07T17:57:17.470" LastActivityDate="2013-12-07T17:57:17.470" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2130" PostTypeId="1" AcceptedAnswerId="2136" CreationDate="2013-12-07T18:43:21.297" Score="5" ViewCount="4794" Body="&lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt; &lt;em&gt;&lt;a href=&quot;https://stackoverflow.com/questions/20445147/transform-image-using-roll-pitch-yaw-angles-image-rectification/20469709#20469709&quot;&gt;This exact problem&lt;/a&gt; has been solved in StackOverflow. Please read this post there for further explanation and a working solution. Thanks!&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am working on an application where I need to rectify an image taken from a mobile camera platform. The platform measures roll, pitch and yaw angles, and I want to make it look like the image is taken from directly above, by some sort of transform from this information. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In other words, I want a perfect square lying flat on the ground, photographed from afar with some camera orientation, to be transformed, so that the square is perfectly symmetrical afterwards. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have been trying to do this through OpenCV(C++) and Matlab, but I seem to be missing something fundamental about how this is done.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In Matlab, I have tried the following:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;%% Transform perspective&#xA;img = imread('my_favourite_image.jpg');&#xA;R = R_z(yaw_angle)*R_y(pitch_angle)*R_x(roll_angle);&#xA;tform = projective2d(R);   &#xA;outputImage = imwarp(img,tform);&#xA;figure(1), imshow(outputImage);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Where R_z/y/x are the standard rotational matrices (implemented with degrees).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For some yaw-rotation, it all works just fine:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;R = R_z(10)*R_y(0)*R_x(0);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Which gives the result:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/pyiNq.jpg&quot; alt=&quot;Image rotated 10 degrees about the Z-image axis&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I try to rotate the image by the same amount about the X- or Y- axes, I get results like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;R = R_z(10)*R_y(0)*R_x(10);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/cbZoE.jpg&quot; alt=&quot;Image rotated 10 degrees about the X-image axis&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, if I rotate by 10 degrees, divided by some huge number, it starts to look OK. But then again, this is a result that has no research value what so ever:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;R = R_z(10)*R_y(0)*R_x(10/1000);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/kssGS.jpg&quot; alt=&quot;Image rotated 10/1000 degrees about the X-image axis&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can someone please help me understand why rotating about the X- or Y-axes makes the transformation go wild? Is there any way of solving this without dividing by some random number and other magic tricks? Is this maybe something that can be solved using Euler parameters of some sort? Any help will be highly appreciated!&lt;/p&gt;&#xA;" OwnerUserId="2347" LastEditorUserId="-1" LastEditDate="2017-05-23T12:37:11.430" LastActivityDate="2013-12-09T19:31:21.323" Title="Transform Image Using Roll-Pitch-Yaw Angles (image rectification)" Tags="&lt;computer-vision&gt;&lt;cameras&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2131" PostTypeId="1" CreationDate="2013-12-07T20:34:39.493" Score="3" ViewCount="1185" Body="&lt;p&gt;I am trying to build an advanced coloured lines following robot with the ability to differentiate between many different coloured lines and follow them. I am looking for the right sensor that will help my robot achieve its objective.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I was researching I came across the &lt;em&gt;EV3 Colour Sensor&lt;/em&gt; which can detect up to 7 colours.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this sensor suitable for my project?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What other sensors can I use and how?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank You&lt;/p&gt;&#xA;" OwnerUserId="3858" LastEditorUserId="9176" LastEditDate="2015-03-02T12:18:19.793" LastActivityDate="2021-04-21T01:46:37.870" Title="Line following robot with EV3 Colour Sensor" Tags="&lt;mobile-robot&gt;&lt;sensors&gt;&lt;line-following&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2132" PostTypeId="1" CreationDate="2013-12-07T23:40:08.260" Score="0" ViewCount="356" Body="&lt;p&gt;I am trying to get the &lt;code&gt;usb.find&lt;/code&gt; command to work properly in a python script I'm writing on Angstrom for the Beagleboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is my code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#!/usr/bin/env python&#xA;&#xA;import usb.core &#xA;import usb.util &#xA;import usb.backend.libusb01 as libusb&#xA;&#xA;&#xA;PYUSB_DEBUG_LEVEL = 'debug'&#xA;# find our device&#xA;# Bus 002 Device 006: ID 1208:0815&#xA;#  idVendor           0x1208&#xA;#  idProduct          0x0815&#xA;# dev = usb.core.find(idVendor=0xfffe, idProduct=0x0001)&#xA;# iManufacturer           1 TOROBOT.com&#xA;&#xA;dev = usb.core.find(idVendor=0x1208, idProduct=0x0815,&#xA;backend=libusb.get_backend() )&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I don't know what's missing, but here is what I do know.&#xA;When I don't specify the backend, no backend is found.  When I do specify the backend &lt;code&gt;usb.backend.libusb01&lt;/code&gt; I get the following error: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;root@beagleboard:~/servo# ./pyServo.py&#xA;Traceback (most recent call last):&#xA;  File &quot;./pyServo.py&quot;, line 17, in &amp;lt;module&amp;gt;&#xA;    dev = usb.core.find(idVendor=0x1208, idProduct=0x0815, backend=libusb.get_backend() )&#xA;  File &quot;/usr/lib/python2.6/site-packages/usb/core.py&quot;, line 854, in find&#xA;    return _interop._next(device_iter(k, v))&#xA;  File &quot;/usr/lib/python2.6/site-packages/usb/_interop.py&quot;, line 60, in _next&#xA;    return next(iter)&#xA;  File &quot;/usr/lib/python2.6/site-packages/usb/core.py&quot;, line 821, in device_iter&#xA;    for dev in backend.enumerate_devices():&#xA;  File &quot;/usr/lib/python2.6/site-packages/usb/backend/libusb01.py&quot;, line 390, in enumerate_devices&#xA;    _check(_lib.usb_find_busses())&#xA;  File &quot;/usr/lib/python2.6/ctypes/__init__.py&quot;, line 366, in __getattr__&#xA;    func = self.__getitem__(name)&#xA;  File &quot;/usr/lib/python2.6/ctypes/__init__.py&quot;, line 371, in __getitem__&#xA;    func = self._FuncPtr((name_or_ordinal, self))&#xA;AttributeError: python: undefined symbol: usb_find_busses&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;What am I missing so that this will work properly?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you.&lt;/p&gt;&#xA;" OwnerUserId="947" LastEditorUserId="9176" LastEditDate="2015-02-27T17:54:13.453" LastActivityDate="2015-02-27T17:54:13.453" Title="What dependencies do I need for USB programing in python with pyUSB?" Tags="&lt;rcservo&gt;&lt;python&gt;&lt;usb&gt;" AnswerCount="0" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2133" PostTypeId="1" CreationDate="2013-12-08T05:20:59.900" Score="0" ViewCount="144" Body="&lt;p&gt;Given a robot with 2 wheels with radius r on one axle with length D, I want to set the wheel speed so that it turns to an angle phi as fast as possible. The timestep t is 64 milliseconds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I thought the wheel speed could be set to v = ((desired_heading-actual_heading) * circumference_wheel_trajectory)/(2*pi * t * wheel_radius). This will converge to a somewhat right angle, eventually, but its very slow and becomes slower as I approach the angle I want to be at.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there an alternative/better way to do this?&lt;/p&gt;&#xA;" OwnerDisplayName="user1815201" LastActivityDate="2013-12-08T18:26:03.387" Title="Turning a differential drive robot to a specific angle" Tags="&lt;kinematics&gt;" AnswerCount="0" CommentCount="2" ClosedDate="2013-12-08T18:34:03.110" ContentLicense="CC BY-SA 3.0" />
  <row Id="2135" PostTypeId="1" CreationDate="2013-12-08T20:54:03.207" Score="4" ViewCount="1063" Body="&lt;p&gt;I'm just wondering that is there any case that when algebraic way can't solve the problem while the geometric can ? Cause I'm working on a 2DOF robotics arm &lt;a href=&quot;http://www.quanser.com/Products/2dof_serial_flexible_joint&quot; rel=&quot;nofollow&quot;&gt;This one&lt;/a&gt;, I know the length of L1 and L2, location that I want for the end effector, then I tried calculating the angles by using algebraic but it gave me cos(alpha) &gt; 1, but when I tried solving with geometric, I can find the solution, so is it because I use a wrong way in algebraic ? &#xA;&lt;br&gt;Thank you very much.&lt;/p&gt;&#xA;" OwnerUserId="2322" LastActivityDate="2015-10-04T14:32:33.030" Title="Algebraic and geometric in inverse kinematic" Tags="&lt;localization&gt;&lt;kinematics&gt;&lt;robotic-arm&gt;&lt;inverse-kinematics&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2136" PostTypeId="2" ParentId="2130" CreationDate="2013-12-09T19:31:21.323" Score="2" Body="&lt;p&gt;&lt;strong&gt;SOLUTION:&lt;/strong&gt; &lt;em&gt;&lt;a href=&quot;https://stackoverflow.com/questions/20445147/transform-image-using-roll-pitch-yaw-angles-image-rectification/20469709#20469709&quot;&gt;This exact problem&lt;/a&gt; has been solved in StackOverflow. Please read this post there for further explanation and a working solution. Thanks!&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="2347" LastEditorUserId="-1" LastEditDate="2017-05-23T12:37:11.430" LastActivityDate="2013-12-09T19:31:21.323" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2137" PostTypeId="2" ParentId="2119" CreationDate="2013-12-10T01:35:57.107" Score="1" Body="&lt;p&gt;Use the robot to hold and index the plastic box and use flame to deburr the plastic.&#xA;I owned a machine shop and deburred plastic for a living.&#xA;No force necessary just the correct flame and speed.&#xA;Good luck&lt;/p&gt;&#xA;" OwnerUserId="2359" LastActivityDate="2013-12-10T01:35:57.107" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2138" PostTypeId="1" AcceptedAnswerId="2163" CreationDate="2013-12-10T16:10:54.943" Score="3" ViewCount="664" Body="&lt;p&gt;Is there a node or package that can send commands to &lt;code&gt;/cmd_vel&lt;/code&gt; to move &lt;strong&gt;ATRV-Jr&lt;/strong&gt; like 2 meters forward or turn it 90 degree to right/left? I don't want to tell the robot to move with specified speed. For example when I use this command &lt;code&gt;rostopic pub /cmd_vel geometry_msgs/Twist '[1.0,0.0,0.0]' '[0.0,0.0,0.0]'&lt;/code&gt; the robot starts moving forward until I send another command or send &lt;code&gt;break&lt;/code&gt; command.&lt;/p&gt;&#xA;" OwnerUserId="2202" LastActivityDate="2013-12-18T11:59:42.077" Title="Move ATRV robot to specific distance using ROS" Tags="&lt;mobile-robot&gt;&lt;ros&gt;&lt;navigation&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2139" PostTypeId="2" ParentId="2101" CreationDate="2013-12-10T18:33:37.373" Score="0" Body="&lt;p&gt;Depends on how stable you want the UAV to be. If the air is still, probably position/velocity/acceleration added with friction and &lt;a href=&quot;https://en.wikipedia.org/wiki/Drag_%28physics%29&quot; rel=&quot;nofollow&quot;&gt;drag&lt;/a&gt; would be a pretty accurate model and is not too difficult.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, air is not still, and no matter what model you make, you can't predict wind. Neither it's strength nor direction. The effect of wind especially makes the calculation of drag difficult as it depends on the aerodynamicity of the UAV in the direction of the wind.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, unless someone here has created before a similar UAV to the one you are building, and used it in the same application as yours, I don't think you can get a clear answer. Best way would be to try it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My suggestion is to try building a model that doesn't ignore the basics (e.g. basic fluid dynamics), but don't go out of your way either. If it turns out that it's not good enough, then ask for help on the particular behavior.&lt;/p&gt;&#xA;" OwnerUserId="158" LastActivityDate="2013-12-10T18:33:37.373" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2141" PostTypeId="2" ParentId="1765" CreationDate="2013-12-10T19:15:46.160" Score="1" Body="&lt;p&gt;Inaccuracy due to multipath bounces is negligible compared to inaccuracy due to seeing fewer satellites, as Matthew Gordon answers.  So on a land vehicle, roof is best.  Towbar is very poor.&lt;/p&gt;&#xA;" OwnerUserId="2363" LastActivityDate="2013-12-10T19:15:46.160" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2144" PostTypeId="2" ParentId="2105" CreationDate="2013-12-12T06:58:37.410" Score="1" Body="&lt;p&gt;I'm not going to mark this as the answer unless others agree it is the answer, but I found an omnidriectional ultrasonic transmitter/receiver: &lt;a href=&quot;http://www.metrolog.net/ultra40k.php?lang=en&quot; rel=&quot;nofollow&quot;&gt;http://www.metrolog.net/ultra40k.php?lang=en&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I haven't used it or tested it yet, but it seems promising.&lt;/p&gt;&#xA;" OwnerUserId="1952" LastEditorUserId="1952" LastEditDate="2016-06-17T16:32:35.670" LastActivityDate="2016-06-17T16:32:35.670" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2145" PostTypeId="1" CreationDate="2013-12-12T15:23:00.233" Score="1" ViewCount="65" Body="&lt;p&gt;I am taking information for my project and I need to see libraries ans SDKs. Searching in the web I found that OpenNI has a lot of functions and when I try to found another SDK, I dont find any other. I am working with a Kinect and a XTION so I need an SDK who works in both. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any other SDK o set of libraries that works well in both?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="2269" LastEditorUserId="197" LastEditDate="2014-01-15T14:14:56.907" LastActivityDate="2014-01-15T14:14:56.907" Title="Another SDK like OpenNI" Tags="&lt;kinect&gt;&lt;openni&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2146" PostTypeId="1" AcceptedAnswerId="2157" CreationDate="2013-12-13T06:41:12.867" Score="1" ViewCount="897" Body="&lt;p&gt;I am trying to manually calibrate the on-board accelerometer of an APM 2.6 controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am using the following code (I found this somewhere, don't remember where) with Arduino 1.0.5 (in Windows environment) to fetch the accelerometer and gyro data:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  #include &amp;lt;SPI.h&amp;gt;&#xA;  #include &amp;lt;math.h&amp;gt;&#xA;&#xA;  #define ToD(x) (x/131)&#xA;  #define ToG(x) (x*9.80665/16384)&#xA;&#xA;  #define xAxis 0&#xA;  #define yAxis 1&#xA;  #define zAxis 2&#xA;&#xA;  #define Aoffset 0.8&#xA;&#xA;  int time=0;&#xA;  int time_old=0;&#xA;&#xA;  const int ChipSelPin1 = 53;&#xA;&#xA;  float angle=0;&#xA;  float angleX=0;&#xA;  float angleY=0;&#xA;  float angleZ=0;&#xA;&#xA;&#xA;&#xA;  void setup() {&#xA;     Serial.begin(9600);  &#xA;&#xA;     pinMode(40, OUTPUT);&#xA;     digitalWrite(40, HIGH);&#xA;&#xA;&#xA;     SPI.begin();  &#xA;     SPI.setClockDivider(SPI_CLOCK_DIV16); &#xA;&#xA;     SPI.setBitOrder(MSBFIRST); &#xA;     SPI.setDataMode(SPI_MODE0);&#xA;&#xA;&#xA;      pinMode(ChipSelPin1, OUTPUT);&#xA;&#xA;     ConfigureMPU6000();  // configure chip&#xA;    }&#xA;&#xA;void loop()&#xA;&#xA;{&#xA; Serial.print(&quot;Acc X &quot;);&#xA;&#xA;&#xA;  Serial.print(AcceX(ChipSelPin1));&#xA;  Serial.print(&quot;   &quot;);&#xA;  Serial.print(&quot;Acc Y &quot;);&#xA;  Serial.print(AcceY(ChipSelPin1));&#xA;  Serial.print(&quot;   &quot;);&#xA;  Serial.print(&quot;Acc Z &quot;);  &#xA;  Serial.print(AcceZ(ChipSelPin1));  &#xA;  Serial.print(&quot; Gyro X &quot;);  &#xA;  Serial.print(GyroX(ChipSelPin1)); &#xA;  Serial.print(&quot; Gyro Y &quot;);  &#xA;  Serial.print(GyroY(ChipSelPin1)); &#xA;  Serial.print(&quot; Gyro Z &quot;);  &#xA;  Serial.print(GyroZ(ChipSelPin1)); &#xA;  Serial.println();&#xA;}&#xA;&#xA;&#xA;void SPIwrite(byte reg, byte data, int ChipSelPin) {&#xA;  uint8_t dump;&#xA;  digitalWrite(ChipSelPin,LOW);&#xA;  dump=SPI.transfer(reg);&#xA;  dump=SPI.transfer(data);&#xA;  digitalWrite(ChipSelPin,HIGH);&#xA;}&#xA;&#xA;&#xA;uint8_t SPIread(byte reg,int ChipSelPin) {&#xA;  uint8_t dump;&#xA;  uint8_t return_value;&#xA;  uint8_t addr=reg|0x80;&#xA;  digitalWrite(ChipSelPin,LOW);&#xA;  dump=SPI.transfer(addr);&#xA;  return_value=SPI.transfer(0x00);&#xA;  digitalWrite(ChipSelPin,HIGH);&#xA;  return(return_value);&#xA;}&#xA;&#xA;&#xA;int AcceX(int ChipSelPin) {&#xA;  uint8_t AcceX_H=SPIread(0x3B,ChipSelPin);&#xA;  uint8_t AcceX_L=SPIread(0x3C,ChipSelPin);&#xA;  int16_t AcceX=AcceX_H&amp;lt;&amp;lt;8|AcceX_L;&#xA;  return(AcceX);&#xA;}&#xA;&#xA;&#xA;int AcceY(int ChipSelPin) {&#xA;  uint8_t AcceY_H=SPIread(0x3D,ChipSelPin);&#xA;  uint8_t AcceY_L=SPIread(0x3E,ChipSelPin);&#xA;  int16_t AcceY=AcceY_H&amp;lt;&amp;lt;8|AcceY_L;&#xA;  return(AcceY);&#xA;}&#xA;&#xA;&#xA;int AcceZ(int ChipSelPin) {&#xA;  uint8_t AcceZ_H=SPIread(0x3F,ChipSelPin);&#xA;  uint8_t AcceZ_L=SPIread(0x40,ChipSelPin);&#xA;  int16_t AcceZ=AcceZ_H&amp;lt;&amp;lt;8|AcceZ_L;&#xA;  return(AcceZ);&#xA;}&#xA;&#xA;&#xA;int GyroX(int ChipSelPin) {&#xA;  uint8_t GyroX_H=SPIread(0x43,ChipSelPin);&#xA;  uint8_t GyroX_L=SPIread(0x44,ChipSelPin);&#xA;  int16_t GyroX=GyroX_H&amp;lt;&amp;lt;8|GyroX_L;&#xA;  return(GyroX);&#xA;}&#xA;&#xA;&#xA;int GyroY(int ChipSelPin) {&#xA;  uint8_t GyroY_H=SPIread(0x45,ChipSelPin);&#xA;  uint8_t GyroY_L=SPIread(0x46,ChipSelPin);&#xA;  int16_t GyroY=GyroY_H&amp;lt;&amp;lt;8|GyroY_L;&#xA;  return(GyroY);&#xA;}&#xA;&#xA;&#xA;int GyroZ(int ChipSelPin) {&#xA;  uint8_t GyroZ_H=SPIread(0x47,ChipSelPin);&#xA;  uint8_t GyroZ_L=SPIread(0x48,ChipSelPin);&#xA;  int16_t GyroZ=GyroZ_H&amp;lt;&amp;lt;8|GyroZ_L;&#xA;  return(GyroZ);&#xA;}&#xA;&#xA;&#xA;//--- Function to obtain angles based on accelerometer readings ---//&#xA;float AcceDeg(int ChipSelPin,int AxisSelect) {&#xA;  float Ax=ToG(AcceX(ChipSelPin));&#xA;  float Ay=ToG(AcceY(ChipSelPin));&#xA;  float Az=ToG(AcceZ(ChipSelPin));&#xA;  float ADegX=((atan(Ax/(sqrt((Ay*Ay)+(Az*Az)))))/PI)*180;&#xA;  float ADegY=((atan(Ay/(sqrt((Ax*Ax)+(Az*Az)))))/PI)*180;&#xA;  float ADegZ=((atan((sqrt((Ax*Ax)+(Ay*Ay)))/Az))/PI)*180;&#xA;  switch (AxisSelect)&#xA;  {&#xA;    case 0:&#xA;    return ADegX;&#xA;    break;&#xA;    case 1:&#xA;    return ADegY;&#xA;    break;&#xA;    case 2:&#xA;    return ADegZ;&#xA;    break;&#xA;  }&#xA;}&#xA;&#xA;&#xA;//--- Function to obtain angles based on gyroscope readings ---//&#xA;float GyroDeg(int ChipSelPin, int AxisSelect) {&#xA;  time_old=time;&#xA;  time=millis();&#xA;  float dt=time-time_old;&#xA;  if (dt&amp;gt;=1000)&#xA;  {&#xA;    dt=0;&#xA;  }&#xA;  float Gx=ToD(GyroX(ChipSelPin));&#xA;  if (Gx&amp;gt;0 &amp;amp;&amp;amp; Gx&amp;lt;1.4)&#xA;  {&#xA;    Gx=0;&#xA;  }&#xA;  float Gy=ToD(GyroY(ChipSelPin));&#xA;  float Gz=ToD(GyroZ(ChipSelPin));&#xA;  angleX+=Gx*(dt/1000);&#xA;  angleY+=Gy*(dt/1000);&#xA;  angleZ+=Gz*(dt/1000);&#xA;  switch (AxisSelect)&#xA;  {&#xA;    case 0:&#xA;    return angleX;&#xA;    break;&#xA;    case 1:&#xA;    return angleY;&#xA;    break;&#xA;    case 2:&#xA;    return angleZ;&#xA;    break;&#xA;  }&#xA;}&#xA;&#xA;&#xA;void ConfigureMPU6000()&#xA;{&#xA;  // DEVICE_RESET @ PWR_MGMT_1, reset device&#xA;  SPIwrite(0x6B,0x80,ChipSelPin1);&#xA;  delay(150);&#xA;&#xA;  // TEMP_DIS @ PWR_MGMT_1, wake device and select GyroZ clock&#xA;  SPIwrite(0x6B,0x03,ChipSelPin1);&#xA;  delay(150);&#xA;&#xA;  // I2C_IF_DIS @ USER_CTRL, disable I2C interface&#xA;  SPIwrite(0x6A,0x10,ChipSelPin1);&#xA;  delay(150);&#xA;&#xA;  // SMPRT_DIV @ SMPRT_DIV, sample rate at 1000Hz&#xA;  SPIwrite(0x19,0x00,ChipSelPin1);&#xA;  delay(150);&#xA;&#xA;  // DLPF_CFG @ CONFIG, digital low pass filter at 42Hz&#xA;  SPIwrite(0x1A,0x03,ChipSelPin1);&#xA;  delay(150);&#xA;&#xA;  // FS_SEL @ GYRO_CONFIG, gyro scale at 250dps&#xA;  SPIwrite(0x1B,0x00,ChipSelPin1);&#xA;  delay(150);&#xA;&#xA;  // AFS_SEL @ ACCEL_CONFIG, accel scale at 2g (1g=8192)&#xA;  SPIwrite(0x1C,0x00,ChipSelPin1);&#xA;  delay(150);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;My objective use to calibrate the accelerometers (and gyro), so that I can use them without having to depend on Mission Planner.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm reading values like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Acc X 288   Acc Y -640   Acc Z 16884 Gyro X -322 Gyro Y 26 Gyro Z 74&#xA;Acc X 292   Acc Y -622   Acc Z 16854 Gyro X -320 Gyro Y 24 Gyro Z 79&#xA;Acc X 280   Acc Y -626   Acc Z 16830 Gyro X -328 Gyro Y 23 Gyro Z 71&#xA;Acc X 258   Acc Y -652   Acc Z 16882 Gyro X -314 Gyro Y 22 Gyro Z 78&#xA;Acc X 236   Acc Y -608   Acc Z 16866 Gyro X -321 Gyro Y 17 Gyro Z 77&#xA;Acc X 238   Acc Y -642   Acc Z 16900 Gyro X -312 Gyro Y 26 Gyro Z 74&#xA;Acc X 226   Acc Y -608   Acc Z 16850 Gyro X -321 Gyro Y 26 Gyro Z 68&#xA;Acc X 242   Acc Y -608   Acc Z 16874 Gyro X -325 Gyro Y 27 Gyro Z 69&#xA;Acc X 236   Acc Y -576   Acc Z 16836 Gyro X -319 Gyro Y 19 Gyro Z 78&#xA;Acc X 232   Acc Y -546   Acc Z 16856 Gyro X -321 Gyro Y 24 Gyro Z 68&#xA;Acc X 220   Acc Y -624   Acc Z 16840 Gyro X -316 Gyro Y 30 Gyro Z 77&#xA;Acc X 252   Acc Y -594   Acc Z 16874 Gyro X -320 Gyro Y 19 Gyro Z 59&#xA;Acc X 276   Acc Y -622   Acc Z 16934 Gyro X -317 Gyro Y 34 Gyro Z 69&#xA;Acc X 180   Acc Y -564   Acc Z 16836 Gyro X -320 Gyro Y 28 Gyro Z 68&#xA;Acc X 250   Acc Y -596   Acc Z 16854 Gyro X -329 Gyro Y 33 Gyro Z 70&#xA;Acc X 220   Acc Y -666   Acc Z 16888 Gyro X -316 Gyro Y 19 Gyro Z 71&#xA;Acc X 278   Acc Y -596   Acc Z 16872 Gyro X -307 Gyro Y 26 Gyro Z 78&#xA;Acc X 270   Acc Y -642   Acc Z 16898 Gyro X -327 Gyro Y 28 Gyro Z 72&#xA;Acc X 260   Acc Y -606   Acc Z 16804 Gyro X -308 Gyro Y 31 Gyro Z 64&#xA;Acc X 242   Acc Y -650   Acc Z 16906 Gyro X -313 Gyro Y 31 Gyro Z 78&#xA;Acc X 278   Acc Y -628   Acc Z 16898 Gyro X -309 Gyro Y 22 Gyro Z 67&#xA;Acc X 250   Acc Y -608   Acc Z 16854 Gyro X -310 Gyro Y 23 Gyro Z 75&#xA;Acc X 216   Acc Y -634   Acc Z 16814 Gyro X -307 Gyro Y 27 Gyro Z 83&#xA;Acc X 228   Acc Y -604   Acc Z 16904 Gyro X -326 Gyro Y 17 Gyro Z 75&#xA;Acc X 270   Acc Y -634   Acc Z 16898 Gyro X -320 Gyro Y 31 Gyro Z 77&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;From what I understand, SPIread(...,...) returns an analog voltage value from the data pins of the sensor, which happens to be proportional to the acceleration values. Right?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;My question is:&lt;/strong&gt; How do I go about calibrating the accelerometer?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;What I've tried till date:&lt;/strong&gt; I've tried the &quot;place horizontal... place nose down... left side, right side&quot; technique used by mission planner. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically, when placed on horizontal position, the sensor is experiencing +1g on it's Z axis and 0g in X and Y axis. Left/right side provides ±1g on Y axis and nose down/up provides ±1g on X axis. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now for every orientation, I've passed the raw sensor data through a LPF and then computed the mean, median and SD of this sensor data over 100 iterations. I store this mean, median and SD value in the EEPROM for each axis (one for +1g and one for 0g).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, when I use the sensor, I load the stats from the EEPROM, match the mean/median and standard deviation with the current reading of 4/5 iterations. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here I'm working under the assumption that the values between 0g and +1g (and anything above 1g) can be interpolated/extrapolated from the data using a linear plot. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Is this the correct approach for calibration?&lt;/li&gt;&#xA;&lt;li&gt;Can you suggest a better way?&lt;/li&gt;&#xA;&lt;li&gt;I noticed that the maxima/minima for each axis is different. Is this&#xA;the expected outcome or is there something wrong in the code?&lt;/li&gt;&#xA;&lt;li&gt;What do I do with the gyro? How to calibrate for angular&#xA;acceleration?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="1949" LastEditorUserId="1949" LastEditDate="2013-12-13T06:49:09.373" LastActivityDate="2013-12-17T19:21:09.747" Title="APM Accelerometer Calibration" Tags="&lt;arduino&gt;&lt;accelerometer&gt;&lt;ardupilot&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2147" PostTypeId="1" CreationDate="2013-12-13T12:48:32.227" Score="2" ViewCount="15882" Body="&lt;p&gt;I am totally new to the camera interface and usage in an Embedded project, and would like to use a CMOS vision sensor &lt;a href=&quot;https://www.sparkfun.com/products/8667&quot; rel=&quot;nofollow&quot;&gt;like this&lt;/a&gt;.This project further will be used to power a small robot with on-board video processing power using processors like ARM 9.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do have a limitation that until now I have worked only on 8-bit micro-controllers like the atmega 8, 16, 32 and on the Arduino platform. I think that for better processing we can use Arduino Due.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the data sheet for the CMOS camera above, we can build its breakout board. But what next? I haven't I found any useful resources while searching. All I need to do is to capture a small video and store it in a SD card.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have seen &lt;a href=&quot;http://www.cmucam.org/projects/cmucam1/wiki/Wiki&quot; rel=&quot;nofollow&quot;&gt;these links&lt;/a&gt; but they haven't proved to be very useful as they don't provide me the required form factor. I am looking to interface this module to a customized board.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what so I need to understand about what commands they accept for their proper functioning like starting to take video and posting them out on a output pin.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If we get a video on a output pin, to which pin should I take that output to on my controller, i.e. on UART or I2C or SPI?&lt;/p&gt;&#xA;" OwnerUserId="1322" LastEditorUserId="1322" LastEditDate="2013-12-20T06:22:26.240" LastActivityDate="2013-12-20T06:22:26.240" Title="How can I interface my CMOS camera module to an Arduino?" Tags="&lt;arduino&gt;&lt;microcontroller&gt;&lt;computer-vision&gt;&lt;cameras&gt;&lt;c&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="3" ClosedDate="2013-12-18T11:34:14.680" ContentLicense="CC BY-SA 3.0" />
  <row Id="2148" PostTypeId="1" CreationDate="2013-12-14T04:51:32.740" Score="2" ViewCount="943" Body="&lt;p&gt;I am new to robotics and control and I have been thinking about how to deal with problems in real life. I have passed a course in control, but I do not have any idea about control for discrete/digital systems.&lt;br&gt;&#xA;There are a lot of robots and in general dynamic systems which are controlled by microcontrollers or computers with some software, i.e. simulink. Usually there are sensors which send feedback to the microcontroller or the computer and the controller sends a signal w.r.t the input signal from sensors. I was wondering how we decide if the system is discrete or continuous? How one can decide if he should use discrete or continuous blocks in simulink to control a dynamic system. Does it really matter which one we use?&lt;br&gt;&#xA;After all computers are digital and I think it is easier to work with digital signals and also  do we really have continuous signal? I have not passed any signals course, so my questions might be really easy. I did not find any other place for my question.&lt;/p&gt;&#xA;" OwnerUserId="2388" LastActivityDate="2014-08-24T20:23:15.633" Title="Continuous or Discrete" Tags="&lt;control&gt;&lt;microcontroller&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2149" PostTypeId="1" CreationDate="2013-12-14T07:35:27.447" Score="10" ViewCount="1342" Body="&lt;p&gt;I am currently working on a project for school where I need to implement an extended Kalman Filter for a point robot with a laser scanner. The Robot can rotate with 0 degree turn radius and drive forward. All motions are piecewise linear (drive,rotate,drive).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The simulator we are using does not support acceleration, all motion is instantaneous. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;We also have a known map (png image) that we need to localize in. We can ray trace in the image in order to simulate laser scans. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My partner and I are little confused as to the motion and sensor models we'll need to use. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So far we are modelling the state as a vector $(x,y,\theta)$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We are using the update equations as follows&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void kalman::predict(const nav_msgs::Odometry msg){&#xA;    this-&amp;gt;X[0] += linear * dt * cos( X[2] ); //x&#xA;    this-&amp;gt;X[1] += linear * dt * sin( X[2] ); //y&#xA;    this-&amp;gt;X[2] += angular * dt; //theta&#xA;&#xA;    this-&amp;gt;F(0,2) = -linear * dt * sin( X[2] ); //t+1 ?&#xA;    this-&amp;gt;F(1,2) =  linear * dt * cos( X[2] ); //t+1 ?&#xA;&#xA;    P = F * P * F.t() + Q;&#xA;&#xA;    this-&amp;gt;linear = msg.twist.twist.linear.x;&#xA;    this-&amp;gt;angular = msg.twist.twist.angular.z;&#xA;    return;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;We thought we had everything working until we noticed that we forgot to initialize &lt;code&gt;P&lt;/code&gt; and that it was zero, meaning that there was no correction happening. Apparently our propagation was very accurate as we haven't yet introduced noise into the system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the motion model we are using the following matrix for F:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$F = \begin{bmatrix}1 &amp;amp; 0 &amp;amp; -v*\Delta t*sin(\theta)  &#xA;\\ 0 &amp;amp; 1 &amp;amp; v*\Delta t*cos(\theta)   &#xA;\\ 0 &amp;amp; 0 &amp;amp; 1 &#xA;\end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As its the Jacobian of our update formulas. Is this correct?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the sensor model we are approximating the Jacobian (H) by taking finite differences of the robots $x$, $y$ and $\theta$ positions and ray tracing in the map. We talked to the TA who said that this would work but I'm still unsure it will. Our prof is away so we can't ask him unfortunately. We are using 3 laser measurements per correction step so H is a 3x3. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other issue where having how to initialize P. We tried 1,10,100 and they all place the robot outside the map at (-90,-70) when the map is only 50x50.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The code for our project can be found here: &lt;a href=&quot;https://github.com/en4bz/kalman/blob/master/src/kalman.cpp&quot;&gt;https://github.com/en4bz/kalman/blob/master/src/kalman.cpp&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any advice is greatly appreciated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At this point I've gotten the filter to stabilize with basic movement noise but no actual movement. As soon as the robot starts to move the filter diverges quite quickly and exits the map. &lt;/p&gt;&#xA;" OwnerUserId="2391" LastEditorUserId="1445" LastEditDate="2014-01-30T16:24:01.823" LastActivityDate="2014-06-13T15:30:38.907" Title="Extended Kalman Filter with Laser Scan + Known Map" Tags="&lt;mobile-robot&gt;&lt;ros&gt;&lt;kalman-filter&gt;&lt;ekf&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2150" PostTypeId="2" ParentId="1787" CreationDate="2013-12-15T09:23:21.943" Score="0" Body="&lt;p&gt;Finally Success:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found that the Torobot USB board could be communicated with an Arduino serial driver.  Conveniently this is available through opkg:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;opkg install kernel-module-cdc-acm&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;When the board is plugged in, it comes up as&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/dev/ttyACM0 &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;From here you can  simply echo commands to the device.  &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;echo &quot;#8P1500T100&quot; &amp;gt; /dev/ttyACM0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This basically says &quot;set servo 8 to position 1500 with speed 100&quot;&lt;/p&gt;&#xA;" OwnerUserId="947" LastActivityDate="2013-12-15T09:23:21.943" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2151" PostTypeId="1" CreationDate="2013-12-15T14:06:41.427" Score="1" ViewCount="130" Body="&lt;p&gt;I am planning on building a robot with wheels (later legs, if possible), that can move around the room and analyze certain things, using a couple sensors.&#xA;In the later steps more functions such a grabbing are the things I want to add.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could you recommend me a micro controller?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My concern about Arduino is that there aren't enough slots, Raspberry Pi seems like it constantly needs a screen for the user.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am a complete amateur when it comes to robotics. However, I am quite familiar with the computer languages Java and Python. Since I wrote a fun app for Android for myself I would love the robot to be compatible with Android, too.&lt;/p&gt;&#xA;" OwnerUserId="2395" LastEditorUserId="37" LastEditDate="2013-12-17T23:58:11.000" LastActivityDate="2013-12-17T23:58:11.000" Title="What micro controller should I use?" Tags="&lt;arduino&gt;&lt;raspberry-pi&gt;&lt;beginner&gt;" AnswerCount="2" CommentCount="2" ClosedDate="2013-12-17T15:40:28.697" ContentLicense="CC BY-SA 3.0" />
  <row Id="2152" PostTypeId="2" ParentId="2151" CreationDate="2013-12-15T22:44:20.293" Score="0" Body="&lt;p&gt;I've used Arduino for a while now, and am very happy with it. It doesn't always need a screen to control it, as you can program it from the computer then run it from the wall. Your concern of low pins on the Arduino is irrelevant, as you could get the Arduino Mega to supply al lthe pins you need. If that is not enough, there are plenty of multiplexer shields you can get to stack on top to give it all the pins you need. However, the Arduino language is different from anything else, and the Raspbery-Pi uses Python, which I am very familiar with. I have not worked with the Raspberry-Pi before, so I don't know all of its functionality.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All in all, I would reccomend the Arduino. Of course, it is your choice, so I also suggest you do some research on your own to figure out if the board you choose has all the functionality you want.&lt;/p&gt;&#xA;" OwnerUserId="583" LastActivityDate="2013-12-15T22:44:20.293" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2153" PostTypeId="2" ParentId="2151" CreationDate="2013-12-16T04:39:39.437" Score="5" Body="&lt;p&gt;Firstly, this is a stupid nit-picky thing, but neither the Arduino nor RPi are micro controllers. Anyways, to answer your question:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Neither of your concerns are really problems. Arduinos come in all kinds of sizes and ALL of them should have enough pins to do what you want. And the RPi can easily be run headless, and programs can be run at startup with methods such as &lt;a href=&quot;http://www.raspberrypi-spy.co.uk/2013/07/running-a-python-script-at-boot-using-cron/&quot;&gt;cron&lt;/a&gt; or by &lt;a href=&quot;http://www.raspberry-projects.com/pi/pi-operating-systems/raspbian/auto-running-programs&quot;&gt;adding it to rc.local&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To simplify things your sensors, I would suggest going with the Arduino, since most sensors use 5v like the arduino does, whereas the Pi uses 3.3v. However, since the Arduino's programmed in a C variant, you may want to use the RPi because it works with Python natively, and you could use Java if you really wanted.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But all in all it comes down to preference, both could get the job done.&lt;/p&gt;&#xA;" OwnerUserId="2399" LastActivityDate="2013-12-16T04:39:39.437" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2154" PostTypeId="2" ParentId="2145" CreationDate="2013-12-16T07:26:51.223" Score="1" Body="&lt;p&gt;Try the Point Clound Library (PCL). They claim to have support for both. I've used it with Kinect, it works quite well. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;------&gt; &lt;a href=&quot;http://pointclouds.org/&quot; rel=&quot;nofollow&quot;&gt;Point Cloud Library&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2391" LastActivityDate="2013-12-16T07:26:51.223" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2155" PostTypeId="2" ParentId="2081" CreationDate="2013-12-16T12:41:46.360" Score="2" Body="&lt;p&gt;Sounds like what you need is transparent vinyl. Opaque vinyl is routinely used as a floor covering ('Cushionfloor', for example)where it is durable and easy to use. The transparent product is readily available, and the price varies because of polishing treatments to render it more window glass like. As you're just shining LEDs thorough it, the cheapest kind should work well. It comes in sheets up to at least 1 mm thick, and you could sandwich layers. I can get 5' by 7' sheets here in Canada for approx ~2$...its sold in many stores as a tablecloth protector. There is also a thicker version with molded nubs that is sold as a floor runner - typically 2' wide and cut to length by many hardware stores. If installed upside down, the LEDs and wires could probably be wound through the nubs, affording them considerable protection.&lt;/p&gt;&#xA;" OwnerUserId="2402" LastActivityDate="2013-12-16T12:41:46.360" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2156" PostTypeId="1" CreationDate="2013-12-16T17:15:25.567" Score="2" ViewCount="365" Body="&lt;p&gt;I am testing an industrial robot (&lt;a href=&quot;http://www.abb.us/product/seitp327/aebd514c0e25af94c125714c0044106a.aspx&quot; rel=&quot;nofollow&quot;&gt;ABB IRB 1410&lt;/a&gt;) using three simple Micron Dial gauges to get x,y,z values at particular point by varying Speed, Load and distance from home position. &#xA;My questions are,&#xA;Whether these three parameters influencing the repeatability or only the accuracy?&#xA;Using dial gauges, without any relation to the Base frame, is it possible to measure accuracy?&#xA;Is any other cost effective method to measure the repeatability and accuracy like above method?&lt;/p&gt;&#xA;" OwnerUserId="2405" LastEditorUserId="350" LastEditDate="2013-12-31T17:43:47.273" LastActivityDate="2013-12-31T17:43:47.273" Title="How to calibrate an industrial Robot?" Tags="&lt;industrial-robot&gt;&lt;calibration&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2157" PostTypeId="2" ParentId="2146" CreationDate="2013-12-17T19:21:09.747" Score="1" Body="&lt;p&gt;You can use least square approach and solve this problem using Gauss-Newton method. Following blog post sums it up very well. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://chionophilous.wordpress.com/2011/08/26/accelerometer-calibration-iii-improving-accuracy-with-least-squares-and-the-gauss-newton-method/&quot; rel=&quot;nofollow&quot;&gt;http://chionophilous.wordpress.com/2011/08/26/accelerometer-calibration-iii-improving-accuracy-with-least-squares-and-the-gauss-newton-method/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2118" LastActivityDate="2013-12-17T19:21:09.747" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2158" PostTypeId="1" AcceptedAnswerId="2166" CreationDate="2013-12-17T23:12:35.343" Score="8" ViewCount="345" Body="&lt;p&gt;I'd like to build a robot as small as possible and with as few &quot;delicate&quot; parts as possible (the bots will be bashing into each other).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was wondering if it was possible to use a small chip that could receive bluetooth/IR/wifi commands to move the motors, and in turn, send back feedback based on sensors such as an accelerometer (to detect impact).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can probably achieve something like this with the &lt;a href=&quot;http://www.piborg.org/picypack&quot; rel=&quot;noreferrer&quot;&gt;PiCy&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/vjVzf.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vjVzfm.jpg&quot; alt=&quot;picy&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;however this is slightly bigger than I'd like (due to the size of the Pi) and I'm not sure how long the Pi would last taking continuous impacts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd therefore like to try to offset the brain (the Pi) to the side of the arena and just use a small chip to receive move commands, and send back data from the accelerometer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do you have any recommendations for such a chip? Wifi would be my choice but if it impacts the size I could try BT&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: After further research it seems an Arduino nano with a WiFi RedBack shield might do the job along with something like this for the motors: &lt;a href=&quot;http://www.gravitech.us/2mwfecoadfor.html&quot; rel=&quot;noreferrer&quot;&gt;http://www.gravitech.us/2mwfecoadfor.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="1682" LastEditorUserId="350" LastEditDate="2013-12-18T14:56:31.097" LastActivityDate="2013-12-18T21:44:14.207" Title="Making a tiny robot by using a remote brain" Tags="&lt;raspberry-pi&gt;&lt;rcservo&gt;&lt;accelerometer&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2159" PostTypeId="1" CreationDate="2013-12-17T23:47:05.587" Score="1" ViewCount="82" Body="&lt;p&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=4Vh_R1NlmX0&quot; rel=&quot;nofollow&quot;&gt;http://www.youtube.com/watch?v=4Vh_R1NlmX0&lt;/a&gt; is from 2011 SWARM and shows RC aircraft or combat wings trying to hit each other in the air. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Scoring a hit is pretty rare, and I'd like to increase a pilot's chances by using a computer targeting system.  It would be an offline system that gets data from sensors on the airplane.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What sensor(s) would work for this application?&lt;/p&gt;&#xA;" OwnerUserId="2414" LastActivityDate="2013-12-17T23:47:05.587" Title="computer aided RC airplane combat" Tags="&lt;mobile-robot&gt;&lt;sensors&gt;" AnswerCount="0" CommentCount="7" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2160" PostTypeId="2" ParentId="2119" CreationDate="2013-12-17T23:54:08.467" Score="0" Body="&lt;p&gt;If your force sensor is sliding along the inside of the box, the end of each side will be felt by the change in the wall's orientation. If you are feeling along the outside of the box, when the 'finger' loses contact, have the finger sweep a circle. If its a hole in the box, then picking the right radius circle will re-establish contact with the box wall. If its a corner, then contact will be re established at an angle - typically +/- 90 degrees from the course the finger was following before it lost contact. I presume the deburrer is operating in concert with the contact sensor, but if the box is secured against movement, and time is not an issue, the box edge could be mapped before a deburring pass initiated. Also, the touch sensor may be able to detect the irregularity of the burr, not only to signal end of deburr, but being able to modify the deburring technique to match the burr's heaviness.&lt;/p&gt;&#xA;" OwnerUserId="2402" LastActivityDate="2013-12-17T23:54:08.467" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2161" PostTypeId="2" ParentId="2147" CreationDate="2013-12-18T03:59:38.130" Score="3" Body="&lt;p&gt;&quot;All I need to do&quot;.... Famous last words. This is a very complicated project to attempt for multiple reasons. I'll try to break down these challenges. For documentation, the datasheet has all the information that you need, but there is probably not any code available that is ready to use. Sparkfun has recently introduced a 'degree of difficulty' rating for parts, and from what I can discern just using the camera is beyond your current skill level. This doesn't mean you can't do the project, but you will be learning a lot along the way :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To break this project down, you have a few challenges. First, you have a I2C &lt;em&gt;control&lt;/em&gt; interface, and a &lt;em&gt;parallel&lt;/em&gt; data output. There are a few other pins, such as the various power supplies required and the CLK, Hsync, and Vsync pins. The I/O connections aren't too complicated, but there are two different power supply domains (1.5V and 2.8V that you need &lt;em&gt;in addition to&lt;/em&gt; your Arduino supply.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you have the circuit connected electrically, then you need to implement the camera control codes. This will allow you to at least set the resolution and FPS on the camera, and probably control when the camera captures images.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then you need to transfer the image data from the camera to your microcontroller. This is done as parallel data transferred one byte at a time, and the entire sensor is row/column scanned to output the image as raw data. This means that you need at least as much RAM as the resolution of the image you are receiving. Also, the minimum transfer rate listed in the datasheet is basically 12 MBytes / sec, which is probably difficult to implement with a regular Arduino. The RAM required per frame ranges from 7MByte for full resolution, down to &#xA;25kByte for the subQCIF resolution. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you have an image in memory, then you need to encode each frame into some video format because even at the lowest bitrate you will be recording 370kByte/sec as a raw data. Video encoding is probably very difficult to do on an Arduino (or without a video encoding library and/or core). Encoding will require additional RAM on the device, and will vary depending on the codec you use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you have encoded the video into some format, you will need to transfer it to the SD card. Again, video takes a lot of bandwidth, and it is unlikely that an Arduino will be able to interface with a SD card in a way that will provide enough bandwidth for transferring video in real-time. (AFAIK, most Arduinos access SD cards through the SPI interface - this will be very slow compared to what you need).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All in all, there are a lot of challenges to recording video from a raw sensor. They aren't insurmountable, but they are significant.&lt;/p&gt;&#xA;" OwnerUserId="2415" LastActivityDate="2013-12-18T03:59:38.130" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2162" PostTypeId="2" ParentId="2158" CreationDate="2013-12-18T07:41:41.340" Score="0" Body="&lt;p&gt;There are two approaches to build the robots you describe.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first, as you suggest, is to decouple the processing power from the rest of the robot which holds the sensors and actuators. To do that you need some communication between the processing unit (PC/RPi/Other microcontroller) and your robot. A low-cost solution for this is to use cheap Bluetooth modules (search ebay for 'Serial Bluetooth Module', they should't cost more than $5). On the robot side you will need a microcontroller as well since you need to receive the data from the Bluetooth, process it and convert it to control signals for the motors. Additionally, the same microcontroller will be responsible for reading the sensors and transmitting the data back to the remote processing unit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second approach is to have a single processing unit which is located on the robot. The same controller will read the sensors, provide the intelligence and control the motors. Because the robot you describe it simple, this controller could be implemented on simple microcontroller. You can create your own controller (using PIC/AVR/ARM) or you can use a ready solution like an Arduino, BasicStamp etc. Optionally you can have Bluetooth connection with a PC for telemetry (observing the sensors values and/or manually controlling the robot).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For your project, the second approach seems more appealing. It will cost much less and robots will react faster since the processing is done directly on the robot. Also since the first approach requires a processing unit on the robot as well it seems like an overkill to use a second unit for processing. On the other hand, the first approach allows you to develop your robot controller in a higher level system (PC/RPi) which depending on your experience, may be a more comfortable environment.&lt;/p&gt;&#xA;" OwnerUserId="1445" LastEditorUserId="1445" LastEditDate="2013-12-18T18:57:11.870" LastActivityDate="2013-12-18T18:57:11.870" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2163" PostTypeId="2" ParentId="2138" CreationDate="2013-12-18T11:59:42.077" Score="0" Body="&lt;p&gt;I've found this usefull:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#!/usr/bin/env python&#xA;import roslib; roslib.load_manifest('robot_mover')&#xA;import rospy&#xA;&#xA;from geometry_msgs.msg import Twist&#xA;&#xA;def mover():&#xA;    pub = rospy.Publisher('cmd_vel', Twist)&#xA;    rospy.init_node('robot_mover')&#xA;&#xA;    twist = Twist()&#xA;    twist.linear.x = 0.1; # move forward at 0.1 m/s   &#xA;&#xA;    rospy.loginfo(&quot;Moving the robot forward.&quot;)&#xA;    pub.publish(twist)&#xA;    rospy.sleep(1)&#xA;&#xA;    rospy.loginfo(&quot;Moving the robot backward.&quot;)&#xA;    twist.linear.x = -0.1; # move backward at 0.1 m/s&#xA;    pub.publish(twist)&#xA;    rospy.sleep(1);&#xA;&#xA;    rospy.loginfo(&quot;Turning the robot left.&quot;);&#xA;    twist = Twist();&#xA;    twist.angular.z = 0.5&#xA;    pub.publish(twist)&#xA;    rospy.sleep(1);&#xA;&#xA;    rospy.loginfo(&quot;Turning the robot right.&quot;);&#xA;    twist.angular.z = -0.5&#xA;    pub.publish(twist)&#xA;    rospy.sleep(1);&#xA;&#xA;    rospy.loginfo(&quot;Stopping!&quot;)&#xA;    twist = Twist()&#xA;    pub.publish(twist)&#xA;&#xA;    rospy.loginfo(&quot;Node exiting.&quot;);&#xA;&#xA;if __name__ == '__main__':&#xA;    try:&#xA;        mover()&#xA;    except rospy.ROSInterruptException: pass&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Source: &lt;a href=&quot;http://pharos.ece.utexas.edu/wiki/index.php/Writing_A_Simple_Node_that_Moves_the_iRobot_Create_Robot&quot; rel=&quot;nofollow&quot;&gt;http://pharos.ece.utexas.edu/wiki/index.php/Writing_A_Simple_Node_that_Moves_the_iRobot_Create_Robot&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2202" LastActivityDate="2013-12-18T11:59:42.077" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2164" PostTypeId="2" ParentId="2158" CreationDate="2013-12-18T15:18:18.047" Score="2" Body="&lt;p&gt;You might find that the rPI boards are more durable than you expected.  There isn't much mass to them, so a small amount of rubber or foam padding (to reduce rattling around) should be sufficient to protect them -- provided that your robots aren't bashing together with enough force to crack the plastic casing around them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Offloading the processing onto a remote (and likely more powerful) system will give you a few advantages, like the ones you've noted -- less weight, less to break, less battery required to move the thing around.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The downsides will be the bandwidth limitations, and the latency.  Once you introduce the delay of wireless transmissions, you go from a hardware-based loop that can handle in the ballpark of thousands of iterations per second to a networking-based loop that can handle only dozens of iterations per second.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For best results, your design should do as much control processing as possible on the local hardware, and use the remote connection for higher-level planning decisions that only will need to be received a few times per second.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2013-12-18T15:18:18.047" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2165" PostTypeId="1" CreationDate="2013-12-18T16:25:12.583" Score="1" ViewCount="143" Body="&lt;p&gt;I'm building a project that uses a cell phone to control a microcontroller via Bluetooth.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've decided to use the HC-05 Bluetooth module.&#xA;&lt;br&gt;HC-05 Manual: &lt;a href=&quot;http://www.exp-tech.de/service/datasheet/HC-Serial-Bluetooth-Products.pdf&quot; rel=&quot;nofollow&quot;&gt;http://www.exp-tech.de/service/datasheet/HC-Serial-Bluetooth-Products.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And the phone I'm using is the Nokia C3-00 (series 40).&#xA;&lt;br&gt;&lt;a href=&quot;http://developer.nokia.com/Devices/Device_specifications/C3-00/&quot; rel=&quot;nofollow&quot;&gt;http://developer.nokia.com/Devices/Device_specifications/C3-00/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The HC-05 module uses the SPP Bluetooth profile while my phone only supports DUN, FTP, GAP, GOEP, HFP, HSP, OPP, PAN, SAP, SDAP profiles. But to my knowledge the phone API utilizes RFCOMM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Question is, can I use this Bluetooth module with my phone?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance and my apologies if my question is too trivial as I'm quite new to Bluetooth.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-Shaun &lt;/p&gt;&#xA;" OwnerUserId="2422" LastActivityDate="2013-12-18T16:25:12.583" Title="SPP Bluetooth profile compatibility with phone" Tags="&lt;microcontroller&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2166" PostTypeId="2" ParentId="2158" CreationDate="2013-12-18T21:01:21.683" Score="0" Body="&lt;p&gt;I think I may have found the perfect controller for this project:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.robotshop.com/en/dagu-micro-magician-robot-controller.html&quot; rel=&quot;nofollow&quot;&gt;http://www.robotshop.com/en/dagu-micro-magician-robot-controller.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Micro Magician will allow me to control 2 simple DC motors, detect impacts and crashes with the accelerometer AND receive move commands from the IR receiver! Pretty awesome for the size. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only piece left in the puzzle is sending back the data to the remote controller (accelerometer data). I'm not sure if I could attach an IR transmitter or maybe BT/Wifi? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: looks like this could do the job! &lt;a href=&quot;http://www.dawnrobotics.co.uk/dagu-arduino-bluetooth-module/&quot; rel=&quot;nofollow&quot;&gt;http://www.dawnrobotics.co.uk/dagu-arduino-bluetooth-module/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now to find small motors...&lt;/p&gt;&#xA;" OwnerUserId="1682" LastEditorUserId="1682" LastEditDate="2013-12-18T21:44:14.207" LastActivityDate="2013-12-18T21:44:14.207" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2167" PostTypeId="1" CreationDate="2013-12-19T06:06:10.373" Score="4" ViewCount="6549" Body="&lt;p&gt;I'm trying to get a quad rotor to fly. The on board controller is an Ardupilot Mega 2.6, being programmed by Arduino 1.0.5.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm trying to fly it in simple autonomous mode, no Radio controller involved. I've done a thorough static weight balancing of the assembly (somewhat like this: &lt;a href=&quot;http://www.youtube.com/watch?v=3nEvTeB2nX4&quot; rel=&quot;nofollow&quot;&gt;http://www.youtube.com/watch?v=3nEvTeB2nX4&lt;/a&gt;) and the propellers are balanced correctly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm trying to get the quadcopter to lift using this code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;Servo.h&amp;gt;&#xA;&#xA;&#xA;int maxspeed = 155;&#xA;int minspeed = 0;&#xA;&#xA;Servo motor1;&#xA;Servo motor2;&#xA;Servo motor3;&#xA;Servo motor4;&#xA;&#xA;int val = 0;&#xA;int throttleCurveInitialGradient = 1;&#xA;&#xA;void setup()&#xA;{&#xA;&#xA;&#xA;val = minspeed;&#xA;&#xA;motor1.attach(7);&#xA;motor2.attach(8);&#xA;motor3.attach(11);&#xA;motor4.attach(12);&#xA;&#xA;&#xA;}&#xA;&#xA;&#xA;void loop()&#xA;{&#xA;setAllMotors(val);&#xA;delay(200);&#xA;val&amp;gt;maxspeed?true:val+=throttleCurveInitialGradient;&#xA;}&#xA;&#xA;void setAllMotors(int val)&#xA;  {&#xA;    motor1.write(val);&#xA;    motor2.write(val);&#xA;    motor3.write(val);&#xA;    motor4.write(val);&#xA;  }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But the issue is, as soon as the quadcopter takes off, it tilts heavily in one direction and topples over. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It looks like one of the motor/propeller is not generating enough thrust for that arm to take-off. I've even tried offsetting the weight balance against the direction that fails to lift, but it doesn't work (and I snapped a few propellers in the process);&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Is there something wrong with the way the ESCs are being fired using&#xA;the Servo library?&lt;/li&gt;&#xA;&lt;li&gt;If everything else fails, am I to assume there is something wrong&#xA;with the motors?&lt;/li&gt;&#xA;&lt;li&gt;Do I need to implement a PID controller for self-balancing the roll&#xA;and pitch just to get this quadrotor to take off?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit 1:&lt;/strong&gt;    Thanks for all the replies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I got the PID in place. Actually, it is still a PD controller with the integral gain set to zero. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's how I'm writing the angles to the servo:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;motor1.write((int)(val + (kP * pError1) +(kI * iError1) +(kD * dError1)));  //front left&#xA;motor2.write((int)(val + (kP * pError2) +(kI * iError2) +(kD * dError2)));  //rear right&#xA;motor3.write((int)(val + (kP * pError3) +(kI * iError3) +(kD * dError3)));  //front right&#xA;motor4.write((int)(val + (kP * pError4) +(kI * iError4) +(kD * dError4)));  //rear left &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;kI is zero, so I'll ignore that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the value of kP set somewhere between 0.00051 to 0.00070, I'm getting an oscillation of steady amplitude around a supposed mean value. But the problem is, the amplitude of oscillation is way too high. It is somewhere around +/- 160 degrees, which looks crazy even on a tightly constrained test rig. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;[  &lt;strong&gt;Edit 2:&lt;/strong&gt; &lt;em&gt;How I calculate the term 'pError'&lt;/em&gt; - Simple linear thresholding. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've a precomputed data of the average readings (mean and SD) coming out of the gyro when the IMU is steady. Based on the gyro reading, I classify any motion of the setup as left, right, forward or backward. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For each of these motion, I increase the pError term for two of the motors, i.e, for right tilt, I add pError terms to motors 2 &amp;amp; 3, for left tilt, I add pError term to motors 1 &amp;amp; 4 etc. (check the comment lines in the code snippet given above). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The magnitude of error I assign to the pError term is = &lt;em&gt;abs(current gyro reading) - abs(mean steady-state gyro reading)&lt;/em&gt;. This value is always positive, therefore the side that is dipping downwards will always have a positive increment in RPM.  ]&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;As I crank up the derivative gain to around 0.0010 to 0.0015, the oscillation dampens rapidly and the drone comes to a relatively stable attitude hold, but not on the horizontal plane. The oscillation dies down (considerably, but not completely) only to give me a stable quadrotor tilted at 90 - 100 degrees with horizontal. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm using only the gyros for calculating the error. The gyros were self calibrated, hence I do expect a fair amount of noise and inaccuracy associated with the error values. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Do you think that is the primary reason for the high amplitude&#xA;oscillation?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;One other probable reason might be the low update frequency of the errors. I'm updating the errors 6 times a second. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Could that be a probable reason it is taking longer to stabilise the&#xA;error?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;And, for the steady state error after the wild oscillations dampen, is it necessary to fine tune the integral gain to get rid of that?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please help.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit 3:&lt;/strong&gt;  I cranked up the frequency of operation to 150+ Hz and what I get now is a very controlled oscillation (within +/- 10 degrees). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm yet to tune the derivative gain, following which I plan to recompute the errors for the integral gain using a combination of gyro and accelerometer data. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit 4:&lt;/strong&gt;  I've tuned the P and D gain, resulting in +/- 5 degrees oscillation(approx). I can't get it to any lower than this, no matter how much I try.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are two challenges about which I'm deeply concerned:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After 5 to 8 seconds of flight, the quadcopter is leaning into one side, albeit slowly. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A) Can this drift be controlled by tuning the integral gain?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;B) Can the drift be controlled by using accelerometer + gyro fused data?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;C) Given that my drone still shows +/- 5 degrees oscillation, can I consider this the optimal set point for the proportional and derivative gains? Or do I need to search more? (In which case, I'm really at my wits end here!) &lt;/p&gt;&#xA;" OwnerUserId="1949" LastEditorUserId="1949" LastEditDate="2013-12-31T10:26:59.590" LastActivityDate="2017-05-02T02:42:38.667" Title="Quadcopter instability with simple takeoff in autonomous mode" Tags="&lt;arduino&gt;&lt;quadcopter&gt;&lt;pid&gt;&lt;ardupilot&gt;" AnswerCount="5" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2169" PostTypeId="2" ParentId="2167" CreationDate="2013-12-19T20:57:35.733" Score="7" Body="&lt;p&gt;Even very small errors can bother the balancing. Small errors such as: &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Weight of the quadcopter is unbalanced. &lt;/li&gt;&#xA;&lt;li&gt;One motor is rotating faster/slower than others due to manufacturing or your power-source. &lt;/li&gt;&#xA;&lt;li&gt;Air resistance and wind. &lt;/li&gt;&#xA;&lt;li&gt;Unbalanced propellers due to manufacturing.&lt;/li&gt;&#xA;&lt;li&gt;Strong magnetic forces.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;You simple can not send the same motor speed to all motors and expect it to hover. &#xA;You do need a sensor which can read the tilting of the robot and adjust the motor speeds based on the tilt angles. To do that you need to implement a PID controller (The simplest method).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as I know there are some PID controller for arudino. But you could always write your own simple version of a PID controller.&lt;/p&gt;&#xA;" OwnerUserId="745" LastActivityDate="2013-12-19T20:57:35.733" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2170" PostTypeId="2" ParentId="2167" CreationDate="2013-12-19T22:19:03.310" Score="4" Body="&lt;p&gt;Quadcopter is inherently unstable system. So you have to apply some feedback controller (eg. PID) to keep it airborne. Even if you apply some basic PID using angular rates and angles, you still have to provide manual correction for drift till PID gains are perfectly set. So using radio control for manual control is really helpful during initial development stage.&lt;/p&gt;&#xA;" OwnerUserId="2118" LastActivityDate="2013-12-19T22:19:03.310" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2171" PostTypeId="5" CreationDate="2013-12-19T23:04:50.987" Score="0" Body="&lt;ul&gt;&#xA;&lt;li&gt;Note: If your question essentially boils down to &lt;a href=&quot;https://robotics.stackexchange.com/q/25/37&quot;&gt;How to choose the right propeller/motor combination for a quadcopter?&lt;/a&gt; then it will be closed as a duplicate of the existing question.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;A quadcopter, also called a quadrotor helicopter, quadrotor, is a multirotor helicopter that is lifted and propelled by four rotors. Quadcopters are classified as rotorcraft, as opposed to fixed-wing aircraft, because their lift is generated by a set of rotors (vertically oriented propellers).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unlike most helicopters, quadcopters use 2 sets of identical fixed pitched propellers; 2 clockwise (CW) and 2 counter-clockwise (CCW). These use variation of RPM to control lift and torque. Control of vehicle motion is achieved by altering the rotation rate of one or more rotor discs, thereby changing its torque load and thrust/lift characteristics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/f/f3/ReuseumMakerFaireQuadrotor.JPG&quot; alt=&quot;A Maker Faire quadcopter in Garden City, Idaho&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Early in the history of flight, quadcopter (referred to as 'quadrotor') configurations were seen as possible solutions to some of the persistent problems in vertical flight; torque-induced control issues (as well as efficiency issues originating from the tail rotor, which generates no useful lift) can be eliminated by counter-rotation and the relatively short blades are much easier to construct. A number of manned designs appeared in the 1920s and 1930s. These vehicles were among the first successful heavier-than-air vertical take off and landing (VTOL) vehicles. However, early prototypes suffered from poor performance, and latter prototypes required too much pilot work load, due to poor stability augmentation and limited control authority.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More recently quadcopter designs have become popular in unmanned aerial vehicle (UAV) research. These vehicles use an electronic control system and electronic sensors to stabilize the aircraft. With their small size and agile maneuverability, these quadcopters can be flown indoors as well as outdoors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are several advantages to quadcopters over comparably-scaled helicopters. First, quadcopters do not require mechanical linkages to vary the rotor blade pitch angle as they spin. This simplifies the design and maintenance of the vehicle. Second, the use of four rotors allows each individual rotor to have a smaller diameter than the equivalent helicopter rotor, allowing them to possess less kinetic energy during flight. This reduces the damage caused should the rotors hit anything. For small-scale UAVs, this makes the vehicles safer for close interaction. Some small-scale quadcopters have frames that enclose the rotors, permitting flights through more challenging environments, with lower risk of damaging the vehicle or its surroundings.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Due to their ease of both construction and control, quadcopter aircraft are frequently used as amateur model aircraft projects.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(&lt;a href=&quot;https://en.wikipedia.org/wiki/Quadcopter&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia&lt;/a&gt;, accessed 28 July 2014)&lt;/p&gt;&#xA;" OwnerUserId="6784" LastEditorUserId="37" LastEditDate="2018-01-08T12:03:44.207" LastActivityDate="2018-01-08T12:03:44.207" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2172" PostTypeId="4" CreationDate="2013-12-19T23:04:50.987" Score="0" Body="A quadcopter, also known as a quadrotor, is a multirotor helicopter that is lifted and propelled by four rotors." OwnerUserId="2118" LastEditorUserId="37" LastEditDate="2018-01-08T12:03:44.207" LastActivityDate="2018-01-08T12:03:44.207" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2173" PostTypeId="1" AcceptedAnswerId="2824" CreationDate="2013-12-19T23:13:08.690" Score="4" ViewCount="3700" Body="&lt;p&gt;I am a beginner of ROS, Kinect and Ubuntu. What I want is to visualize Kinect's data on rviz environment then run object recognition on it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've tried a few tutorials but had no luck. All I got was an empty rviz world.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since I am a beginner I would appreciate any step-by-step instructions (preferably for hydro or groovy).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would also like to note that I've managed to get visual from Kinect so the device is working fine.&lt;/p&gt;&#xA;" OwnerUserId="2433" LastEditorUserId="7383" LastEditDate="2014-11-25T17:54:43.227" LastActivityDate="2014-11-25T17:54:43.227" Title="Visualizing kinect data on rviz" Tags="&lt;ros&gt;&lt;kinect&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2175" PostTypeId="2" ParentId="2111" CreationDate="2013-12-20T18:53:25.083" Score="2" Body="&lt;p&gt;Short Answer: No.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While there is a lot of media hype, and patent applications, there isn't any nanobots being commercially manufactured. Its unlikely that any legislative or FDA approval would happen before there are working demonstration models of actual utility.&#xA;There are several significant problems that have to be solved before we see any kind of production models: a lack of nanoscale processors and dependable nanoscale power supplies probably being the two biggest problems. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would estimate 20+ years before they become mainstream.&lt;/p&gt;&#xA;" OwnerUserId="2402" LastActivityDate="2013-12-20T18:53:25.083" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2176" PostTypeId="2" ParentId="1603" CreationDate="2013-12-20T19:23:32.223" Score="1" Body="&lt;p&gt;The camera is enough to locate the robot if its mounted high enough,unless the robot is hidden by furniture. If the furniture hides the robot from the camera, it will hide it from a&#xA;IR Beacon.&#xA;If you start the robot in a visible position, don't have too much cover, and use dead reckoning when under cover, you should be okay.The dead reckoning will add error to the robot's known position, but really, how much time is it going to spend underneath a table?&#xA;The position can be corrected when the robot comes back into view.&lt;/p&gt;&#xA;" OwnerUserId="2402" LastActivityDate="2013-12-20T19:23:32.223" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2179" PostTypeId="2" ParentId="1603" CreationDate="2013-12-22T19:18:12.373" Score="1" Body="&lt;p&gt;First run the Canny edge detector on the captured image. Next dilate the edges by 1 or 2 pixels in the image. Then search the colour image for what ever colour you are looking for. generally pure R,G,or B are good as they aren't very natural. This allows you to localize in the image. Now run the wave front algorithm in the Canny image. It's not very hard to implement its just breadth first search where neighbours are pixels and pixels with value 255 (white) aren't added to the search queue as they are walls. You may want to convert the canny image from 8bit to 16bit so that you can move more than 255 pixels. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only problem is that is assumes the ground plane has no edges (i.e. not tile or hardwood floor) and it can't deal with obstacles like tables that one can navigate under. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to remedy this you would have to find the ground plane somehow. This could be done with a stereo camera or a Kinect. &lt;/p&gt;&#xA;" OwnerUserId="2391" LastActivityDate="2013-12-22T19:18:12.373" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2180" PostTypeId="1" AcceptedAnswerId="2181" CreationDate="2013-12-23T12:22:29.310" Score="2" ViewCount="186" Body="&lt;p&gt;If not all, but major types of lawn mower robots are rotary mowers.&#xA;I presume&lt;sup&gt;1&lt;/sup&gt; that reel mower is more efficient, and is said to leave a better lawn health and cut. So, why industry go to the other option?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;1 - I'm assuming the efficiency, as electrical rotary mowers have at least 900W universal-motors or induction motors, and a manual reel mower is capable nearly the same cutting speed.&lt;/sup&gt;&lt;/p&gt;&#xA;" OwnerUserId="2447" LastEditorUserId="2447" LastEditDate="2014-01-06T18:17:32.180" LastActivityDate="2014-01-06T18:17:32.180" Title="Lawn mower robot (type of cutter)" Tags="&lt;motor&gt;&lt;mechanism&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2181" PostTypeId="2" ParentId="2180" CreationDate="2013-12-23T15:28:43.740" Score="3" Body="&lt;p&gt;Rotary mowers are mechanically simpler, so cheaper to make. The rotary mower is more tolerant of getting dull, and if you run over something like small trees or rocks, the blades take less damage, and the motor is harder to jam and stall.&#xA;The blades are also easier to sharpen.&#xA;For this simplicity, you get a poorer cut, and more grass damage.&#xA;I do agree, though, that the reel mower would be more efficient. You'd probably need more sensors though, to watch for jamming.&lt;/p&gt;&#xA;" OwnerUserId="2402" LastActivityDate="2013-12-23T15:28:43.740" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2182" PostTypeId="1" CreationDate="2013-12-24T13:39:37.847" Score="1" ViewCount="135" Body="&lt;p&gt;I was wondering, my team and me are working on a robot communication-oriented and we wanted to add speech recognition on it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What technology should I use ?&lt;/p&gt;&#xA;" OwnerUserId="2455" LastActivityDate="2013-12-25T20:13:59.860" Title="What should I use for speech recognition?" Tags="&lt;software&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="1" ClosedDate="2014-01-06T20:04:21.143" ContentLicense="CC BY-SA 3.0" />
  <row Id="2183" PostTypeId="2" ParentId="2182" CreationDate="2013-12-24T14:03:41.747" Score="2" Body="&lt;p&gt;You must go through softwares like matlab(licensed). Open source versions are also available like QtOctave and FreeMat.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You must have a sound knowledge about Digital Signal Procesing , different type of Filters etc..&lt;/p&gt;&#xA;" OwnerUserId="2456" LastActivityDate="2013-12-24T14:03:41.747" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2184" PostTypeId="2" ParentId="2182" CreationDate="2013-12-24T18:10:12.860" Score="3" Body="&lt;p&gt;I don't think there is any &quot;must&quot; for you task. In turn, it depends on what your robot platform is. In the context of embedded systems, MATLAB could be cumbersome.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know what your robot system is like, but maybe this &lt;a href=&quot;http://www.pirobot.org/blog/0022/&quot; rel=&quot;nofollow&quot;&gt;article&lt;/a&gt; based on ROS and Sphinx is a good starting point?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, for the purpose of understanding speech recognition technologies, the &lt;a href=&quot;http://htk.eng.cam.ac.uk/&quot; rel=&quot;nofollow&quot;&gt;HTK toolkit&lt;/a&gt; and the &lt;a href=&quot;http://en.wikipedia.org/wiki/HTK_%28software%29&quot; rel=&quot;nofollow&quot;&gt;HTK book&lt;/a&gt; are a good reference.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a general idea of the state-of-art research on speech recognition, you can also visit &lt;a href=&quot;http://www-i6.informatik.rwth-aachen.de/rwth-asr/&quot; rel=&quot;nofollow&quot;&gt;http://www-i6.informatik.rwth-aachen.de/rwth-asr/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="1064" LastActivityDate="2013-12-24T18:10:12.860" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2185" PostTypeId="2" ParentId="2156" CreationDate="2013-12-25T01:08:15.700" Score="1" Body="&lt;p&gt;Without relation to the base frame, or to some physical point, absolute accuracy cannot be measured.&#xA;You can measure repeatability via a dial gauge and any fixed point, but absolute accuracy will require careful measurements from wherever on the robot that 0,0,0 is referenced from. &#xA;Repeatability requires only one point of reference, although you will get a better idea of over all performance if you use several points. But accuracy has to be a measurement between TWO points.&#xA;One being a reference point - such as the base frame, and the other can be arbitrary.&#xA;If you have a long accurate ruler,or rod of known length, this could be clamped into any arbitrary position, and the arm  made to run from one end to the other, and then measure the offset from that. That would give you some idea of how accurate it is across the section of its reach, which would be probably pretty close to its absolute accuracy.&#xA;Errors would be introduced by the rulers inaccuracys in length, and bend.&lt;/p&gt;&#xA;" OwnerUserId="2402" LastActivityDate="2013-12-25T01:08:15.700" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2186" PostTypeId="1" AcceptedAnswerId="2188" CreationDate="2013-12-25T17:00:21.147" Score="4" ViewCount="1371" Body="&lt;p&gt;That is what I came to understand while reading here and there about flashing a new bootloader/understanding what a bootloader is etc etc&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The bootloader is supposed to be the first thing that runs when I power up my Arduino Duemilanove (or micro controllers in general). It does some setup then runs my app. It also listens to the usb cable so that if I upload some code it erases the old one and run the new one. There are 2 sections in the memory, one for the bootloader (S1) and one for the app (S2). Code on S1 can write to S2 but not to S1 (or strongly discouraged I don't remember).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are things that I don't understand though :&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;If I upload some new code &lt;em&gt;while my app is running&lt;/em&gt;, the upload works. What happened ? I thought that the bootloader gave hand to my app&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;How can we flash a new bootloader ? If the bootloader is the thing that runs on section 1 (S1) and can only write to S2 and if the bootloader is the only thing that listens to new code uploads, ...&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Can you help me correct my thoughts and answer my questions ? Many thanks !&lt;/p&gt;&#xA;" OwnerUserId="2396" LastActivityDate="2013-12-25T21:49:46.243" Title="Understanding Arduino bootloader" Tags="&lt;arduino&gt;&lt;microcontroller&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2187" PostTypeId="2" ParentId="2182" CreationDate="2013-12-25T20:13:59.860" Score="1" Body="&lt;p&gt;You may find the Natural Language Tool Kit useful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://nltk.org/&quot; rel=&quot;nofollow&quot;&gt;http://nltk.org/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2391" LastActivityDate="2013-12-25T20:13:59.860" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2188" PostTypeId="2" ParentId="2186" CreationDate="2013-12-25T20:16:17.537" Score="2" Body="&lt;p&gt;(1) On several Arduino models, there's a 100 nF capacitor (at red dot in diagram) connected between DTR# on the FT232RL (or equivalent) chip and the RESET pin on the CPU.&#xA;&lt;img src=&quot;https://i.stack.imgur.com/IHRoq.jpg&quot; alt=&quot;portion of schematic from arduino-duemilanove-schematic.pdf&quot;&gt;  (Obtain file &lt;a href=&quot;http://arduino.cc/en/uploads/Main/arduino-duemilanove-schematic.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;arduino-duemilanove-schematic.pdf&lt;/a&gt; to see whole schematic.  Also see arduino.cc &lt;a href=&quot;http://arduino.cc/en/Main/arduinoBoardDuemilanove&quot; rel=&quot;nofollow noreferrer&quot;&gt;Duemilanove&lt;/a&gt; page.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DTR# normally sits high, and RESET normally is high due to an internal pullup resistor (eg 20K-50KΩ) so C13 usually has 0 volts across it.  In the Arduino process for programming via USB-serial, a programming cycle starts with DTR# being pulled down for 22ms &#xA;(&lt;a href=&quot;http://playground.arduino.cc/Learning/AutoResetRetrofit&quot; rel=&quot;nofollow noreferrer&quot;&gt;1&lt;/a&gt;,&lt;a href=&quot;http://playground.arduino.cc/Main/DisablingAutoResetOnSerialConnection&quot; rel=&quot;nofollow noreferrer&quot;&gt;2&lt;/a&gt;), which pulls RESET low long enough to reset the processor.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;After the reset, the bootloader initializes; stores the received program into flash memory; then runs the stored program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note, auto-reset can be disabled (on some Arduino models) by cutting a jumper (eg, RESET-EN).  See the “Automatic (Software) Reset” sections or similar of &lt;a href=&quot;http://playground.arduino.cc/Learning/AutoResetRetrofit&quot; rel=&quot;nofollow noreferrer&quot;&gt;1&lt;/a&gt;,&lt;a href=&quot;http://playground.arduino.cc/Main/DisablingAutoResetOnSerialConnection&quot; rel=&quot;nofollow noreferrer&quot;&gt;2&lt;/a&gt;,&lt;a href=&quot;http://arduino.cc/en/Main/ArduinoBoardFioTips&quot; rel=&quot;nofollow noreferrer&quot;&gt;3&lt;/a&gt;,&lt;a href=&quot;http://arduino.cc/en/Main/arduinoBoardUno&quot; rel=&quot;nofollow noreferrer&quot;&gt;4&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(2) To &lt;a href=&quot;http://arduino.cc/en/Hacking/Bootloader&quot; rel=&quot;nofollow noreferrer&quot;&gt;flash a new bootloader&lt;/a&gt;, you attach a programmer to either the 6-pin ICSP header (marked by green dot in diagram) or to J3 (blue dot).  (Using J3 may require manually pressing S1 to reset the CPU before programming; see &lt;a href=&quot;http://playground.arduino.cc/Main/DisablingAutoResetOnSerialConnection&quot; rel=&quot;nofollow noreferrer&quot;&gt;2&lt;/a&gt;.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A bootloader is a program that accepts data to store into flash; or, if no program begins arriving in the first half second or so after a reset (see refs 1-4 above), it starts a previously loaded program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Programming via &lt;a href=&quot;http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus&quot; rel=&quot;nofollow noreferrer&quot;&gt;SPI&lt;/a&gt; (the Serial Peripheral Interface Bus, which uses the SCK, MISO, MOSI, SS pins of ICSP header for high speed full duplex serial data transfer) by contrast is a hardware operation that does not run a program from flash.  Like &lt;a href=&quot;http://en.wikipedia.org/wiki/JTAG#Storing_firmware&quot; rel=&quot;nofollow noreferrer&quot;&gt;JTAG&lt;/a&gt;, it's one of the built-in hardware-level programming protocols in typical AVR chips.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;During SPI programming, RESET is held low and the AVR is like a puppet carrying out directives issued to it by the programmer device.  The AVR is not executing a user-accessible stored program during programming; it is carrying out low-level directives issued to it by the programmer device.  A programming directive precedes each bit of data on the SPI bus.  For an explanation of the serial programming algorithm, see (eg) section 30.8 in doc2549.pdf, ATmega manual #2549P–AVR–10/2012.  Section 30.8.2 on p. 350-351 explains the method.  Table 30-17 on p. 352 shows the directives used to control programming.  These include “Programming Enable”,  “Chip Erase”, “Load Extended Address byte”, “Write Program Memory Page”, etc. &lt;/p&gt;&#xA;" OwnerUserId="478" LastEditorUserId="478" LastEditDate="2013-12-25T21:49:46.243" LastActivityDate="2013-12-25T21:49:46.243" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2189" PostTypeId="1" AcceptedAnswerId="2193" CreationDate="2013-12-25T22:14:34.500" Score="2" ViewCount="1935" Body="&lt;p&gt;I'm a newbie in UAV stuff, your advice would be very helpful, i want to start mapping using fixed wing UAV, but my main choice was APM 2.6, but after some researches, i found that APM 2.6 won't be actively maintained in the future because the future releases will be PixHawk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;i wonder if i should choose APM 2.6 for its stability, on the other side i don't see the benefits of Pixhawk apart having long time support. or being a newbie i should start with something experimental like APM 2.5.2 (cheap chinese version for APM).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance&lt;/p&gt;&#xA;" OwnerUserId="2463" LastEditorUserId="2463" LastEditDate="2013-12-26T08:18:17.720" LastActivityDate="2013-12-27T13:19:35.927" Title="What autopilot to purchase APM 2.6 or PixHawk?" Tags="&lt;uav&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ClosedDate="2014-01-06T20:02:56.087" ContentLicense="CC BY-SA 3.0" />
  <row Id="2190" PostTypeId="2" ParentId="2167" CreationDate="2013-12-26T08:54:48.070" Score="1" Body="&lt;p&gt;Is it always the same side that topples? If so, one obvious thing to try to eliminate the possibility that one of your motors is faulty, is to simply switch motor positions and see if the side that topples changes.&lt;/p&gt;&#xA;" OwnerUserId="1687" LastActivityDate="2013-12-26T08:54:48.070" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2191" PostTypeId="2" ParentId="2083" CreationDate="2013-12-26T10:26:42.393" Score="1" Body="&lt;p&gt;It get solved automatically and that give me clear hint that when i was using 9v 1 Amp adaptor, because of heat Arduino was getting a type of HANGED..but when i powered it with USB cable..it works fine now.&lt;/p&gt;&#xA;" OwnerUserId="1322" LastActivityDate="2013-12-26T10:26:42.393" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2192" PostTypeId="1" CreationDate="2013-12-27T10:07:15.863" Score="8" ViewCount="683" Body="&lt;p&gt;Everybody here is probably aware of the Sharp distance sensors (GP2Y0 series, e.g. GP2Y0A02YK0F). They use a diode to emit infrared light and measure the angle of the reflected light with a PSD (i.e. they do triangulation). They seem to be the only producers of this technology.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am only aware of a few similar but incomparable devices (sensors of ambient light and distance or proximity like Si114x). Which other comparable products are out there?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another way to ask this question: &quot;What are the different ways to build a 10cm - 200cm range low-cost IR range sensor, and what is an example of each of those ways?&quot;&lt;/p&gt;&#xA;" OwnerUserId="2467" LastEditorUserId="350" LastEditDate="2014-08-05T01:59:51.037" LastActivityDate="2014-09-10T05:40:09.857" Title="How can I build a 10cm-200cm IR range sensor?" Tags="&lt;sensors&gt;&lt;manufacturing&gt;" AnswerCount="2" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2193" PostTypeId="2" ParentId="2189" CreationDate="2013-12-27T13:19:35.927" Score="1" Body="&lt;p&gt;Pixhawk is released very recently so there is a possibility of bugs associated with software and hardware  which will be fixed as more people use it, report bugs and correct them. APM 2.6 is very much ready to go with lots of reviews and support available online.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if you wish to be in this field for significantly long time then I would suggest go for Pixhawk. If you are very new with system and also planning to tweak around with code then APM 2.6 is good start.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Chinese version of APM 2.5.2 is surely cheap option to start but beware as there is no warranty on hardware you get.&lt;/p&gt;&#xA;" OwnerUserId="2118" LastActivityDate="2013-12-27T13:19:35.927" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2195" PostTypeId="1" AcceptedAnswerId="2198" CreationDate="2013-12-28T06:53:49.067" Score="1" ViewCount="656" Body="&lt;p&gt;We are planning to recalibrate ABB IRB 1410 robot and conduct series of accuracy &amp;amp; repeatability tests using FaroArm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My questions are&lt;/p&gt;&#xA;&#xA;&lt;p&gt;i) Is there any physical identification marker on the robot which can be used to identify the location of base co-ordinate frame?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ii) If locating the base frame is not possible, can accuracy be measured from fixed arbitrary point in space?&lt;/p&gt;&#xA;" OwnerUserId="105" LastActivityDate="2013-12-28T14:45:19.957" Title="Re-Calibration of an articulated industrial robot" Tags="&lt;industrial-robot&gt;&lt;calibration&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2196" PostTypeId="1" CreationDate="2013-12-28T11:02:39.763" Score="3" ViewCount="412" Body="&lt;p&gt;BEAM robotics seem to be a good approach to teach learners about electronics in robotics. But can these robots be like regular programmed &quot;cognitive&quot; robots? Can these robots, with just analog circuits, take us to the level of robotic assistants, worker robots and other kinds of self sufficient autonomous robots?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I specifically want to know that, when creating mission critical robots -&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) What are the areas in robotics which are practically impossible without a real time software system?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) What areas of the field can be done without programming? If yes, are these areas feasible without an onboard software system?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3) Could an intelligent space rover, work without a cpu in the future?&lt;/p&gt;&#xA;" OwnerUserId="2196" LastEditorUserId="2196" LastEditDate="2013-12-28T11:12:47.423" LastActivityDate="2018-09-23T18:40:29.010" Title="Robots without microcontrolers (beam robots). Are they technologically limited?" Tags="&lt;control&gt;&lt;software&gt;&lt;electronics&gt;&lt;artificial-intelligence&gt;&lt;embedded-systems&gt;" AnswerCount="4" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2197" PostTypeId="1" CreationDate="2013-12-28T14:10:27.757" Score="-2" ViewCount="55" Body="&lt;p&gt;I'm having an event for a boat race.Simple boat has to be made.All i have is 5 days.The restriction is 24V motor not more than 1000 rpm.What best material and shape will you suggest to make a boat.I know basic circuits.We have to make a boat with a wired circuit.That circuiting i can do but what can be an ideal shape for boat with maximum speed it can achieve? &lt;/p&gt;&#xA;" OwnerUserId="2474" LastActivityDate="2013-12-29T14:29:38.963" Title="How can i make a boat" Tags="&lt;activerobot&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2014-01-06T20:05:20.007" ContentLicense="CC BY-SA 3.0" />
  <row Id="2198" PostTypeId="2" ParentId="2195" CreationDate="2013-12-28T14:45:19.957" Score="1" Body="&lt;p&gt;There is reference points on the robot for calibration, including one on the base.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Page 123 of this manual lists them: &#xA;&lt;a href=&quot;http://lecture.sccsc.edu/amt/AMT%20206%20Electricity%20and%20Automation/ABB%20IRB%20140%20Robot/files/3HAC026320-001_revB_en.pdf&quot; rel=&quot;nofollow&quot;&gt;http://lecture.sccsc.edu/amt/AMT%20206%20Electricity%20and%20Automation/ABB%20IRB%20140%20Robot/files/3HAC026320-001_revB_en.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ABB does not calibrate the robot by finding the x,y,z position of the effector hand by direct measurement. They calculate it by zeroing the joints rotation sensors, and using that to 'blind reckon' x,y,z position from the 'home position'&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is that the manufacturers calibration system requires the manufacturers special pendulum calibration tool. More details on the mark locations and the calibration process is this manual:&#xA;&lt;a href=&quot;http://www2.tec.ilstu.edu/students/ABB%20Robots/IRB1600_Manuals/files/3HAC16578-1_revC_en.pdf&quot; rel=&quot;nofollow&quot;&gt;http://www2.tec.ilstu.edu/students/ABB%20Robots/IRB1600_Manuals/files/3HAC16578-1_revC_en.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may be able to rent the calibrator from ABB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you don't have the calibration tool, then you may be able to reference using a machinists level, a accurate ruler, and a fair amount of patience! &lt;/p&gt;&#xA;" OwnerUserId="2402" LastActivityDate="2013-12-28T14:45:19.957" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2199" PostTypeId="2" ParentId="2196" CreationDate="2013-12-28T21:34:34.533" Score="3" Body="&lt;p&gt;If we are defining BEAM robots as ones that do not use microprocessors, and only use analog circuits, then yes I think it is possible, but not practical.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A microprocessor is essentially a programmable circuit, and if we define what we want our robot to do, then we should be able to program the hardware (by building the proper circuit) without needing a microprocessor and programming software for it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To answer your sub questions:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) Without a real-time software system you can still have a real-time hardware system, so the only areas that would be impossible are areas where the robot needs to be functionally flexible and programmable post-manufacturing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) As answered in 1), all robots can be manufactured without software as long as the &quot;programming&quot; is defined in the hardware circuitry and doesn't need to change.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3) Yes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: I'm not a hardware expert, please correct me if I'm wrong.&lt;/p&gt;&#xA;" OwnerUserId="1687" LastActivityDate="2013-12-28T21:34:34.533" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2204" PostTypeId="2" ParentId="2197" CreationDate="2013-12-29T14:29:38.963" Score="2" Body="&lt;p&gt;Believe it or not, but the maximum speed a boat can achieve is related to its length.  See &lt;a href=&quot;http://en.wikipedia.org/wiki/Hull_speed&quot; rel=&quot;nofollow&quot;&gt;http://en.wikipedia.org/wiki/Hull_speed&lt;/a&gt;.  The longer the better.  The front and rear designs also have a large contribution to drag.  The pointier the better.  That's why crew racing boats are very long and pointy.  Boats with a flat stern (like a lot of speed boats) go fast because the boat planes at high speed (gets up on top of the water instead of plow through it).  So the flat back doesn't really affect them as much.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not sure if you will be able to make your model boat plane or not with those motor specs.  But i will also say that your prop also has a big part in the speed of the boat.  If you have the same motor, but with different props, the boat can have very different speeds.  Depending on the number, angle, and shape of the blades, the prop can be torqueier for slow speeds, or faster for higher speeds.  Kind of like a transmission after a motor.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Naval architecture is a large field, that i admittedly know very little about.  I only know some of these very high level concepts.  Hopefully these rules of thumb will help you out.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2013-12-29T14:29:38.963" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2205" PostTypeId="1" AcceptedAnswerId="2207" CreationDate="2013-12-29T14:59:04.927" Score="4" ViewCount="3922" Body="&lt;p&gt;I'm having a problem with controlling my BLDC motor when starting up and when running in low rpm. I have a custom board to measure rotation of the motor using an optical sensor and send servo pwm commands to an &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__14630__Turnigy_TrackStar_18A_1_18th_Scale_Brushless_Car_ESC_.html&quot; rel=&quot;nofollow&quot;&gt;esc&lt;/a&gt;.&#xA;The problem is, that I can't start the motor smoothly. When I slowly increase the control signal, it starts stuttering and then jumps directly up to about 1500rpm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a way to improve this situation without using a sensored motor/esc combo?&lt;/p&gt;&#xA;" OwnerUserId="482" LastActivityDate="2013-12-29T21:57:07.097" Title="Low speed control of bldc motors" Tags="&lt;motor&gt;&lt;control&gt;&lt;brushless-motor&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2207" PostTypeId="2" ParentId="2205" CreationDate="2013-12-29T21:57:07.097" Score="4" Body="&lt;p&gt;Brushless DC motors should have excellant lower speed performance.  Your problem is probably not the motor but rather the electronic speed controller.  Those sensorless controllers generally don't perform well in low speeds because there is very little signal for them to key on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It also sounds like you may be &quot;fighting&quot; the ESC's built in controller with your own control loop on top of it.  The first thing I would check is what's the lowest speed command the ESC can reliably take before trying to close a loop with an additional sensor.  What is your loop doing?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to build your own system you may want to replace the ESC with an amplifier and change your control algorithm to control the current/torque rather than speed.  Since you have your own position sensor it may somehow be possible to fake out the back-emf signature the ESC is looking for but this isn't easy and is probably a waste of time.&lt;/p&gt;&#xA;" OwnerUserId="1584" LastActivityDate="2013-12-29T21:57:07.097" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2209" PostTypeId="1" AcceptedAnswerId="2212" CreationDate="2013-12-30T06:53:20.663" Score="7" ViewCount="2884" Body="&lt;p&gt;I am beginning to learn about the hardware aspect of robotics, and in order for a lot of this new information to be useful to me (whether on this site or elsewhere) I will need a basic understanding of the terminology.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One thing that comes up repeatedly is different electric motors: servo, DC motor, brushless motor, step motor, gear motor... etc&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a comprehensive list? Or at least a list of the most common ones, and their descriptions / differences?&lt;/p&gt;&#xA;" OwnerUserId="1687" LastActivityDate="2019-02-24T19:42:29.447" Title="What are the different types of electric motors?" Tags="&lt;motor&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2210" PostTypeId="2" ParentId="2196" CreationDate="2013-12-30T12:27:45.417" Score="3" Body="&lt;p&gt;I think you are mixing the idea of BEAM robotics (why that, I prefer to not use this term), with analog electronics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Analog circuits are in major applications more fast than a micro processed one, that have a clock to process instructions. The &quot;problem&quot; with analogs is in part with noise, but early computers are made analog, &lt;em&gt;operational amplifiers&lt;/em&gt; are made to do computation with analog circuits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 74LS series, have a bunch of digital discrete ICs, they are not microprocessors, but can be flip-flops of some types, bus drivers, gate logic, and can do&#xA;a lot of &quot;processing&quot;, again generally faster than a microprocessor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, today digital electronics and micro-controller or processors reached a point where cost is acceptable even for the hobbyist. Sometimes is more easy to make a software than the equivalent analog circuit if possible. There a number of reasons.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But you can see that micro-controllers still have analog circuits for the user, like analog comparators, A/D and D/A converters, and much more depending on the application, so &lt;strong&gt;majority of circuits are mixed type&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;But Software-less robots, spacecrafts etc. might never be close to feasible. Right?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That is really application and project dependent, and at some degree opinion based.&#xA;Op amps for example with an analog encoder, could close a PID loop, very fast ones.&#xA;But the signal to the PID would come from a software and a D/A. &lt;strong&gt;So I don't say its impossible, but there's no subject to go this way, but again, they are in major projects mixed circuits, not only digital&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="2447" LastActivityDate="2013-12-30T12:27:45.417" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2212" PostTypeId="2" ParentId="2209" CreationDate="2013-12-30T12:47:18.587" Score="10" Body="&lt;p&gt;There are too much of types to someone describe. I think a simple research will help you.&lt;/p&gt;&#xA;&lt;p&gt;Reading the other responses I will put something, to put things like they are.&lt;/p&gt;&#xA;&lt;h1&gt;Servo-motor&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;Near any motor can be a servo motor or not&lt;/strong&gt;. That means a brushed-motor, brush-less motor, stepper-motor (that is a brush-less motor) can be a servo-motor or not. Servo-motors have a feed-back loop to know some variables like the position or speed, or both, and correct according to the signal you put. BUT, that is made by a controller, the motor just has the sensors to provide the signals.&lt;/p&gt;&#xA;&lt;h1&gt;Brushed-motors&lt;/h1&gt;&#xA;&lt;p&gt;As the name suggests, these motors have a rotating part that is energized (major part is the rotor), and to energize it brushes are used. &lt;strong&gt;There's many types of brushed-motors&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;They can do its commutation mechanically, in the brushes, what generates sparks, less efficiency, EMI and RFI and more brush wear.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;They can do the switching externally, and the brushes runs on continuous ring of contact, their only function is to supply power, the commutation is done by a controller.&#xA;There's nearly no sparks at the brushes (although as the ring wear this can led to bumps of the brush in the ring what result in sparks).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Their stator can be of magnets (normally the motor found on toys), or can be coils too (electro-magnets) as the motors found in power-tools.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/thumb/f/f6/Right_Motor_Internal.JPG/180px-Right_Motor_Internal.JPG&quot; alt=&quot;Four brushes motor, showing its brushes and contact ring, and the mechanical commutation. The brushes are inside the &amp;quot;yellow&amp;quot; casing, that holds the brush with a spring to force it over the contact ring.&quot; /&gt;&lt;br&gt;&#xA;&lt;sup&gt;Four brushes motor partially open, showing its brushes and contact ring, and the mechanical commutation. The brushes are inside the &amp;quot;yellow&amp;quot; casing, that holds the brush with a spring to force it over the contact ring. The brushes are made mainly from carbon, yet have other materials, the brush wear is visible on the contact ring&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/9z6Pd.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9z6Pd.jpg&quot; alt=&quot;From left to right. Brushes of a small motor, rotor with contact ring and coils, stator and case with magnets&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&#xA;&lt;sub&gt;(source: &lt;a href=&quot;https://upload.wikimedia.org/wikipedia/commons/4/42/Brushed_dc_motor_dissembled.jpg&quot; rel=&quot;noreferrer&quot;&gt;wikimedia.org&lt;/a&gt;)&lt;/sub&gt;  &lt;br&gt;&#xA;&lt;sup&gt;From left to right. Brushes of a small motor, rotor with contact ring and coils, stator and case with magnets&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;h1&gt;Brush-less motors&lt;/h1&gt;&#xA;&lt;p&gt;Brush-less motors supply the power to the rotating part of the motor (rotor) by other means.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Induction motors&lt;/strong&gt;, as the name suggest, supply the power by induction. These motors are&#xA;the most common in industry, they are very efficient (normally ~90%). As other motors&#xA;they can have mechanical brake to have fast deceleration and holding breaking. (Ex: cable elevators).&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/thumb/5/58/Stator_and_rotor_by_Zureks.JPG/320px-Stator_and_rotor_by_Zureks.JPG&quot; alt=&quot;Induction motor partially opened. The rotor, these small cuts in the metal form a low impedance coil, and case with its coils. The fins on the case help to dissipate the generated heat. Depending on the motor it normally have a fan attached to the axle, or use other motor for forced ventilation, for example the motor runs slow.&quot; /&gt;&lt;br&gt;&#xA;&lt;sup&gt;Induction motor partially opened. The rotor, these small cuts in the metal form a low impedance coil, and case with its coils. The fins on the case help to dissipate the generated heat. Depending on the motor it normally have a fan attached to the axle, or use other motor for forced ventilation, for example the motor runs slow.&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;DC brush-less motors&lt;/strong&gt; have magnets in their rotor, so no electrical power supply is necessary to the rotor. Normally the magnets have high force to power ratio, see Neodymium magnets for example, and so the rotor&lt;sup&gt;&lt;b&gt;1&lt;/b&gt;&lt;/sup&gt; has low mass and consequently low inertia. That said, it can start and stop at higher rates/accelerations than other motors with less wear.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Stepper-motors&lt;/strong&gt; are a type of brush-less motor, but with more poles, that means that applying power to the correct phase you can &lt;em&gt;presume&lt;/em&gt; the position of the rotor&lt;sup&gt;&lt;b&gt;2&lt;/b&gt;&lt;/sup&gt;. But the rotor can &lt;em&gt;slip&lt;/em&gt;, called &amp;quot;lose step&amp;quot;, and so you lost the position synchronism. That means that if use a stepper motor for precise positioning you need to be sure that the motor can handle the load and not slip. How can you be sure of the position? Put a position sensor on the axle of the motor, this with a controller turns it into a servo-motor.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/thumb/c/cf/Stepper_motor.jpg/320px-Stepper_motor.jpg&quot; alt=&quot;Stepper motor partially open. This is probably a hybrid type, with the rotor being magnetized and with gear like shape. Some steppers have round rotors, but the rotor is still magnetized with a high number of poles.&quot; /&gt;&lt;br&gt;&#xA;&lt;sup&gt;Stepper motor partially open. This is probably a hybrid type, with the rotor being magnetized and with gear like shape. Some steppers have round rotors, but the rotor is still magnetized with a high number of poles.&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;As they don't have brushes, normally the only mechanical contact between rotor and stator are the bearings. That why they have low maintenance, high efficiency, nearly no sparks&lt;sup&gt;&lt;b&gt;3&lt;/b&gt;&lt;/sup&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;1 - the rotor refereed can be the inner or outer part of the motor, the part that don't rotate relative to the power supply I would consider the stator.&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;2 - That can be applied to others motors as well. A DC brush-less non-stepper motor, with 3 poles for example, would give you 120° of precision, but what you do is modulate the power applied to each coil (ex: less power to one more to the other) so that you get the positions between. That is used on some steppers motors to, and is called micro-stepping.&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;3 - although major times that means spark free, one possible mean of spark is from static energy on the rotor, that sometimes find the bearings as the short circuit to discharge, resulting in wear to the bearing, but that in not so common and have some means of counter-measure.&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is only a small list of electrical motors types.&lt;/p&gt;&#xA;&lt;h1&gt;Mechanical transmission&lt;/h1&gt;&#xA;&lt;p&gt;&lt;em&gt;Note: You called that gearing but it's not the only way to do it. I will refer to mechanical transmission&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;That is other topic. Motors run efficiently and have more torque at certain rotations, so you put for example a reducing transmission and get less speed and more torque.&#xA;Suppose a motor spin at 4000 RPM and have a 0.1Kg-cm of torque, assuming a reduction of 100:1 (that is 100 turn in the input result in 1 turn at the output) you should get 400 RPM and 1Kg-cm of torque.&lt;sup&gt;&lt;b&gt;1&lt;/b&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;sup&gt;1 - This is a theoretical example, the transmissions are not 100% efficiently so you lose some power&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;h2&gt;Some types of transmissions that can have different ratios&lt;/h2&gt;&#xA;&lt;p&gt;Gears, Hydraulics, chain sprocket, belts. There's more of course, and each of that have their subtypes. Ex: Gear reductions can be worm-gear, planetary, etc.&#xA;On some applications you can use pulleys, like cranes, elevators.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;All images courtesy of Wikimedia commons &lt;a href=&quot;http://commons.wikimedia.org&quot; rel=&quot;noreferrer&quot;&gt;http://commons.wikimedia.org&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="2447" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2019-02-24T19:42:29.447" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="2214" PostTypeId="2" ParentId="2196" CreationDate="2013-12-30T20:17:08.263" Score="2" Body="&lt;p&gt;BEAM robots are generally simple circuits that exhibit some emergent behavior that (superficially) mimics biological behavior.  Generally speaking, there is no hard criteria for what a BEAM robot must accomplish -- they are not built to handle tasks that require reliability or repeatability.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;While BEAM robotics should in theory be able to handle any tasks that a microcontroller could handle, the style of construction is not geared toward ease of troubleshooting or debugging -- essential tasks for the development of any complex behavior.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Analog circuits in general are capable of very critical real-time tasks, such as &lt;a href=&quot;http://www.computerhistory.org/revolution/real-time-computing/6/128&quot; rel=&quot;nofollow noreferrer&quot;&gt;guiding rockets&lt;/a&gt;; see -- for example -- &lt;a href=&quot;http://www.ti.com/ww/en/bobpease/&quot; rel=&quot;nofollow noreferrer&quot;&gt;the work of Bob Pease&lt;/a&gt;.  But compare the ease of development by changing a few lines of code to testing and rewiring a system like the Hawk Missile autopilot:&#xA;&lt;a href=&quot;http://www.computerhistory.org/revolution/real-time-computing/6/128/530?position=0&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KclBRm.jpg&quot; alt=&quot;Hawk Missile Autopilot&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Analog electronics aren't incapable, they're just (in these sorts of cases) impractical.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2013-12-30T20:17:08.263" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2215" PostTypeId="1" AcceptedAnswerId="2220" CreationDate="2013-12-31T07:15:35.533" Score="17" ViewCount="752" Body="&lt;p&gt;In software engineering startups, you generally go to a room with a computer or bring your own laptop, and write code. I'm interested in how robotics startups work: Is there a separate location for designing the robots? Take for example, &lt;a href=&quot;http://anki.com/&quot; rel=&quot;noreferrer&quot;&gt;Anki&lt;/a&gt;. Do they have separate research labs for designing robots? How does a robot get from a single design to being manufactured?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I couldn't find a better place on SE to post this (the startups business section is defunct): Please link me to another SE site if there is a better place to ask this question.&lt;/p&gt;&#xA;" OwnerUserId="2488" LastEditorUserId="9176" LastEditDate="2015-08-18T12:35:49.757" LastActivityDate="2015-08-18T12:35:49.757" Title="How do robotics startups work?" Tags="&lt;manufacturing&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="12" ContentLicense="CC BY-SA 3.0" />
  <row Id="2216" PostTypeId="1" CreationDate="2013-12-31T20:16:13.710" Score="1" ViewCount="247" Body="&lt;p&gt;I have a BOE bot PBasic2 stamp based robot that came with rubberband &quot;tires&quot; for the wheel. however, they are very tight and I can't figure out how to get them onto the plastic hubs.&#xA;the furthest I've gotton was mostly covering the outside, but when trying to make it less crooked it came off again.&#xA;is there some trick to getting those pesky tires to stay on?&lt;/p&gt;&#xA;" OwnerUserId="2490" LastActivityDate="2014-01-01T06:23:14.323" Title="what method should I use for putting rubber bands on wheels?" Tags="&lt;wheeled-robot&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2217" PostTypeId="1" CreationDate="2013-12-31T23:43:10.487" Score="0" ViewCount="264" Body="&lt;p&gt;I'm programming a &lt;strong&gt;PIC16F77&lt;/strong&gt; with &lt;strong&gt;ProPic 2&lt;/strong&gt; which communicates via serial port. As I don't have this port in my PC, I used serial to USB adapter.&#xA;I'm using &lt;strong&gt;ICProg&lt;/strong&gt; in &lt;strong&gt;Windows 8&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've proggrammed it before but it was in Windows XP using the driver who specifies in &lt;a href=&quot;http://www.ic-prog.com/index1.htm&quot; rel=&quot;nofollow&quot;&gt;http://www.ic-prog.com/index1.htm&lt;/a&gt; and worked perfectly.&#xA;But in this OS the only difference is the adapter, the program gives some errors while loading the driver:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&quot;Error occured (Access is denied) while loading the driver!&quot;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&quot;Privileged instruction&quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="2380" LastEditorUserId="350" LastEditDate="2014-01-03T17:36:44.690" LastActivityDate="2014-01-03T17:36:44.690" Title="Access denied during PIC Programming in Windows XP" Tags="&lt;microcontroller&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2218" PostTypeId="1" AcceptedAnswerId="2219" CreationDate="2014-01-01T02:05:32.327" Score="4" ViewCount="249" Body="&lt;p&gt;I have a &lt;a href=&quot;http://letsmakerobots.com/files/userpics/u1533/Descriptive_photo_600_0.jpg&quot; rel=&quot;noreferrer&quot;&gt;Micro Magician v2 micro controller&lt;/a&gt;. It has a A3906 Dual FET “H” bridge motor driver built in.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the manual it states &quot;Electronic braking is possible by driving both inputs high.&quot; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My first question is, what is the purpose of these brakes? If I set the left/right motor speed to 0, the robot stops immediately anyway. What advantage is there to using these brakes, or am I taking the word &quot;brake&quot; too literally?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My second question is, the driver has &quot;motor stall flags that are normally held high by pullup resistors and will go low when a motor draws more than the 910mA current limit. Connect these to spare digital inputs so your program will know if your robot gets stuck.&quot; But when my robot hits a wall, the wheels just keep on spinning (slipping if you will), I take it these stall flags can be used on a rough surface where the wheels have more friction?&lt;/p&gt;&#xA;" OwnerUserId="1682" LastEditorUserId="2447" LastEditDate="2014-01-03T03:28:56.500" LastActivityDate="2014-01-03T03:28:56.500" Title="What is the purpose of electronic braking in motors?" Tags="&lt;motor&gt;&lt;h-bridge&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2219" PostTypeId="2" ParentId="2218" CreationDate="2014-01-01T02:24:39.783" Score="6" Body="&lt;p&gt;Question 1: If you are satisfied with your robots stopping distance, than you don't need electronic braking. With a heavier or faster robot, its quite useful. The larger the machine, the more inertia becomes a important design factor. For example, a form of electronic braking is used by open-pit mining dump trucks. Ordinary dump trucks, being much smaller, make do with ordinary brakes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Question 2: The stall flags are useful to detect that the wheel is &lt;em&gt;not&lt;/em&gt; moving despite full power being applied. I'm presuming we're still talking about a small robot here - what would happen if the wheel got tangled in something like a long hair or thread? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I had a two-inch long robot once that got its powered wheels jammed on a tiny piece of toothpick it encountered while crossing a carpet. Freak luck, but it does happen. If you only run your robot on clean surfaces, and it'll spin the tires when it bumps into something, than you probably don't need the flags. Personally, though, I would use them -- but I'm a belt AND suspenders kinda guy.&lt;/p&gt;&#xA;" OwnerUserId="2402" LastActivityDate="2014-01-01T02:24:39.783" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2220" PostTypeId="2" ParentId="2215" CreationDate="2014-01-01T03:25:54.087" Score="15" Body="&lt;p&gt;I work at a robotics startup. To sum up my long answer below,  robotics startups are &lt;i&gt;slower, more expensive, and often more distributed in location&lt;/i&gt; than their more famous software counterparts. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Robotics or hardware startups do have a lab for design. It holds owned or rented equipment:  3D printers, machine shop lathes and drills, soldering stations and power supplies, and ONLY 1 really nice oscilloscope that everyone has to share. All the engineers will have a laptop- they may often share licenses for the expensive software like MATLAB and SolidWorks. They work outside the lab whenever possible, because the lab has no windows. Sometimes they make work from home. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main Engineering work of a robotics startup is to go from a prototype to product. Signs of a prototype that needs to be commercialized include pieces made from&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Arduino boards&lt;/li&gt;&#xA;&lt;li&gt;RC Hobbyist servos and batteries&lt;/li&gt;&#xA;&lt;li&gt;cardboard&lt;/li&gt;&#xA;&lt;li&gt;duct-tape &lt;/li&gt;&#xA;&lt;li&gt;80/20 framework&lt;/li&gt;&#xA;&lt;li&gt;Legos&lt;/li&gt;&#xA;&lt;li&gt;3D printed parts&lt;/li&gt;&#xA;&lt;li&gt;Hand machined metal parts&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;These parts, for reasons of cost and scaleability and reliability, must be replaced with custom molded plastic, metal, composites, cheaper PCBs, standardized fasteners, and consumer grade batteries and power supply electronics. This process is months to years long and uses at least 3 engineering disciplines. It's very expensive. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the same time, the Sales and Marketing and Finance employees (and also Engineering employees if the company is any good) are working to move from an &lt;i&gt;idea&lt;/i&gt; to a &lt;i&gt;business&lt;/i&gt;. This selling and fundraising is where the money to do the Engineering work comes from.  You'll notice that Anki site you linked to is billing the product as a toy, not as a military transport robot. This seems obvious, but it has significant engineering implications for what your robot will be expected to do, how long it will last, and how much you can sell it for. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;All these people are busily burning up money, sometimes to the tune of  millions of dollars. To fight some of this battle, most robotics companies outsource A LOT to consultants and contractors: a consultant might build your website, design your business cards, redesign your plastic shell to be injection molded instead of 3D printed,  test your power supplies for safety, and write your user manual. You should NOT outsource complaints handling and tech support initially, because if you do, you'll lose a lot of valuable information about your first products.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a startup, once you are actually ready to produce a product (Double check- if there are still pieces of your robot made from the bullet list above, then you aren't ready), you will probably hire a Contract Manufacturer to make your first robots because you can't afford all the equipment or employees to make them yourself. You will pay them to follow your instructions to make your robot and test units before they are sold. You will discover, over the course of several months and dozens of angry user phone calls, that your written instructions weren't clear enough and robots have shipped broken. You will fix it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your coworkers and consultants and contractors are located all over the country and world, not in your lab. In the case of suppliers and contract manufacturers, someone at your company is paid to visit them and audit their work, and report the results back. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;All this costs more time and money than the stereotypical software startup. It rarely includes extra money for Silicon-Valley-style perks such as gyms and gourmet smoothies[1].  The logistics of a robotics startup are close to insanity. The payoff margins are smaller than software, and the costs are higher. About the only good news is that no one can bit-torrent your robot for free, and because it is so hard to build a sustainable robot business, there are fewer people willing to fight the battle. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, I get to say I design robots for a living, and that's worth a LOT. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;-Crazy System Engineer apologizes for long answer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note 1:  The perk of free coffee IS included.  In my professional opinion, no one has EVER made engineers pay for coffee. &lt;/p&gt;&#xA;" OwnerUserId="2492" LastActivityDate="2014-01-01T03:25:54.087" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2221" PostTypeId="2" ParentId="2215" CreationDate="2014-01-01T05:13:38.663" Score="11" Body="&lt;p&gt;I can share my experience at a startup where we built what was essentially special purpose robots.  I'm sure there's a wide spectrum though.  A lot depends on the complexity of your robot or machine and the target market for it.  Is it something that will be manufactured in 10's of units and sold for millions a dollar a piece or something that will be manufactured in the millions and sold for hundreds of dollars.  There are many other factors as well.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;We had mechanical engineers, electrical engineers, software engineers, physicists, system integrators.  When you're at the &quot;garage&quot; stage you may have 0-1 of each but the general ideas still apply.&lt;/li&gt;&#xA;&lt;li&gt;Physically we had some lab spaces where the machines would be built/integrated/tested and around them was the team work area/offices.&lt;/li&gt;&#xA;&lt;li&gt;You start from a concept/high level system design.&lt;/li&gt;&#xA;&lt;li&gt;The system will typically be decomposed into separate parts/assemblies.&lt;/li&gt;&#xA;&lt;li&gt;Typically the design is iterated on.  Some assemblies may be designed, built, tested and then changed.  The system design can evolve as well.&lt;/li&gt;&#xA;&lt;li&gt;If you walked into our labs there'd always be some piece of the machine being run through cycle testing or some other functional tests.  Things clicking and humming all over the place ;-)&lt;/li&gt;&#xA;&lt;li&gt;In our startup we didn't make any parts in house.  We had some close machine shop contractors manufacture all the parts we needed for development.  I know some startups will have a machine shop with a CNC mill/lathe for rapid turnaround of parts.&lt;/li&gt;&#xA;&lt;li&gt;We did do all the assembly and integration in house.&lt;/li&gt;&#xA;&lt;li&gt;Over time the design is finalized and various production drawings, procedures, and BOMs are made for the entire machine.  Those include all the manufactured parts, the off-the-shelf parts, things like printed circuit boards etc.&lt;/li&gt;&#xA;&lt;li&gt;Throughout this software is being developed side by side with everything else and needs to change to match the changing system and requirements (that's my job :-) )&lt;/li&gt;&#xA;&lt;li&gt;There are various other business activities ongoing as well.  Talking to customers, HR, finance...&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;It's not as easy to prototype as it is with pure software.  Arguably if you're building a small web site you can bootstrap your business with no investment.  If you're building a robotic company it's probably not possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope this gives some idea of my experience.  Feel free to ask more questions.&lt;/p&gt;&#xA;" OwnerUserId="1584" LastEditorUserId="1584" LastEditDate="2014-01-01T05:22:34.003" LastActivityDate="2014-01-01T05:22:34.003" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2222" PostTypeId="1" CreationDate="2014-01-01T05:18:43.353" Score="3" ViewCount="267" Body="&lt;p&gt;Over the last couple of years I've had good success with my technology startups and now looking to enter into robotics. I was interested in robotics and automation ever since I was a kid (yes, that sounds nerdy). So my question is: Where to get started, what to build? and how to sell? And lastly, how difficult it is to sell in this industry?&lt;/p&gt;&#xA;" OwnerUserId="2493" LastActivityDate="2016-01-12T10:37:54.387" Title="I am an entrepreneur and I want to start building robots for businesses, where do I start?" Tags="&lt;industrial-robot&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="3" ClosedDate="2014-01-06T20:04:29.877" ContentLicense="CC BY-SA 3.0" />
  <row Id="2223" PostTypeId="2" ParentId="2216" CreationDate="2014-01-01T06:23:14.323" Score="1" Body="&lt;p&gt;A BOE wheel is shown below.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/6T37l.png&quot; alt=&quot;boe wheel&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;To get the tire (the outer rubber ring) onto the wheel, pulling a thin string around between the wheel and tire might work.  However, you might also try slightly heating the ring (eg, with a hair dryer), which is likely to make the ring slightly more flexible and stretchy.  Be careful not to overheat the ring.  Uncontrolled hot air from a heat gun probably is too warm and would risk melting the ring.&lt;/p&gt;&#xA;" OwnerUserId="478" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2014-01-01T06:23:14.323" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2224" PostTypeId="1" CreationDate="2014-01-01T15:24:26.417" Score="5" ViewCount="970" Body="&lt;p&gt;I am wondering if it would be possible to get Kinect to work with Udoo board (Quad). I have found that there is now support for &lt;a href=&quot;http://wiki.ros.org/hydro/Installation/UDOO&quot; rel=&quot;nofollow&quot;&gt;ROS + Udoo&lt;/a&gt;. Also saw a question asked about &lt;a href=&quot;http://answers.ros.org/question/113131/can-use-freenect-library-for-asus-xtion/&quot; rel=&quot;nofollow&quot;&gt;Xtion + Udoo&lt;/a&gt; which shows some more interest. It would really be great if it could be possible for Kinect+Udoo. Was hoping to implement perhaps a miniature version of TurtleBot. I wish someone could give some insights on this matter. Thanks.&lt;/p&gt;&#xA;" OwnerUserId="2495" LastEditorUserId="2495" LastEditDate="2014-01-03T01:20:23.900" LastActivityDate="2015-05-07T00:21:54.483" Title="Udoo board + Kinect sensor?" Tags="&lt;ros&gt;&lt;kinect&gt;&lt;robotic-arm&gt;&lt;embedded-systems&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2225" PostTypeId="2" ParentId="2222" CreationDate="2014-01-01T20:05:47.417" Score="0" Body="&lt;p&gt;To answer your questions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Where to get started?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Start with an idea, talk to some experts about feasibility, hire someone to build a prototype, then get funding and produce your final product.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;What to build?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Build something that is useful, if you want it to be marketable.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;How to sell?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The same way you sell anything else... market it to the right demographic.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;How difficult it is to sell in this industry?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Can't answer this, because it largely depends on what you're selling and how good you are at selling things.&lt;/p&gt;&#xA;" OwnerUserId="1687" LastActivityDate="2014-01-01T20:05:47.417" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2226" PostTypeId="2" ParentId="1955" CreationDate="2014-01-02T11:56:18.640" Score="2" Body="&lt;p&gt;As you can reduce the path planning and collision avoidance of aircraft down to 2D if you do not include separation by height, I will use aerospace as the example. One school of thought is that collision avoidance is different from path planning, because in high level path planning you can assume that you have complete knowledge of the other aircraft or obstacles that&#xA;you are avoiding. In collision avoidance you&#xA;are limited by the sensors available. The levels of mission planning are shown in the Figure:- &lt;a href=&quot;https://i.stack.imgur.com/UrJBA.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;Planning Hierarchy with Spatial Decomposition&lt;/a&gt;, collision avoidance is most&#xA;applicable to the safety or low level trajectory planning. Also shown in this figure&#xA;are the time requirements for data from each&#xA;of the systems. Collision avoidance is the&#xA;point at which, if you do not alter course&#xA;you will crash. The two places where this&#xA;can be observed are in controlled airspace&#xA;within the terminal region (airports) and where&#xA;the airways intersect. Rules of the Air dictate a set of rules, which if followed prevent this happening. Pilots are not very&#xA;good at see-and avoid as they are required&#xA;to perform stability and control, communications and high level mission planning. This&#xA;means that collisions are not detected as early&#xA;as they should be and then become a critical last second maneuver.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In large aircraft, Traffic Collision Avoidance System (TCAS) is used to make the pilots aware of&#xA;where approaching aircraft are. TCAS is a co-operative system, which works on the assumption&#xA;that both aircraft will have TCAS. If only one aircraft has TCAS, for example a large aircraft &#xA;flying&#xA;towards a micro-light, a collision will occur. The large aircraft may turn in one direction, and the&#xA;micro-light (who has had no communication with the aircraft) may turn in the same direction. As&#xA;mentioned above the issue is with small aircraft, which are unable to carry the large, power hungry&#xA;TCAS systems. Larger gliders carry a FLARM system (The name is inspired from Flight Alarm),&#xA;which broadcasts its own position and speed vector; but this does not communicate with TCAS, it&#xA;just senses the approaching aircraft (only it has FLARM also, leaving the same problem mentioned&#xA;with the micro-light).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These systems, which will be on most aircraft in the next ten to fifteen years, have in&#xA;influenced many experts in this field, to assume that the position of all aircraft within the operating area will be known. Though it should be noted that, whilst this would be a logical conclusion to draw in controlled airspace, in uncontrolled airspace this cannot be definitively said, because it does not account for the aforementioned small aircraft that are unable to carry such systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to deal with the situations described above in uncontrolled airspace there are three types&#xA;of collision detection sensors:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Cooperative : That tell you where they are (e.g. ADS-B)  &lt;/li&gt;&#xA;&lt;li&gt;Passive : Take data in (e.g. Camera's)  &lt;/li&gt;&#xA;&lt;li&gt;Active : Send out signals to receive&#xA;information back (e.g. Radar/Sonar or Lasers)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;After the sensor data is acquired, in order to work out where to go, the sensor data is analysed&#xA;using Collision Avoidance Algorithms:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Potential Fields : Real time obstacle avoidance method. `Robot&#xA;motion can be considered as a particle that moves in a gradient&#xA;vector field generated by positive and negative electric particles'&#xA;The advantage is that it is simple. The disadvantage is the local&#xA;minima condition where the robot can get stuck between two walls or&#xA;obstacles.&lt;/li&gt;&#xA;&lt;li&gt;Vortex Potential Field : In order to reduce the problem of the local minima, a vortex can be added to the potential field, the disadvantage of this is that it forces the vehicle one way round the obstacle and this can lead to a sub-optimal path.&lt;/li&gt;&#xA;&lt;li&gt;Bug Algorithms : Simple to find optimal leave points, the 'simplicity    of these algorithms leads to a number of shortcomings. None of these    algorithms take into account robot kinematics which is a severe    limitation.'&lt;/li&gt;&#xA;&lt;li&gt;Roadmap : Captures the connectivity of the robots free space into one&#xA;dimensional curves 'If more than one continuous paths can be found,&#xA;the shortest patch might be selected according to Dijstra's algorithm&#xA;or the A* algorithm' Drawbacks are `time and storage complexities&#xA;when the environment is complex'&lt;/li&gt;&#xA;&lt;li&gt;3D Geometric : 'does not require the solution of any programming&#xA;problem, thus resulting suitable for real time applications'&lt;/li&gt;&#xA;&lt;li&gt;Azimuth Approach : Using passive camera video feeds and image&#xA;processing techniques to spot the aircraft and detects a collision&#xA;based on change in azimuth angle. This method can be very processor&#xA;intensive.&lt;/li&gt;&#xA;&lt;li&gt;Collision Cone : Transforms the velocities of both aircraft into&#xA;relative velocities. A safety region is drawn around the obstacle&#xA;aircraft and a cone is used to connect the region to the avoiding&#xA;aircraft. A potential collision is detected when the relative&#xA;velocities are within the cone.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;A number of path planning algorithms have been discussed in the other answers so I will not repeat them here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In conclusion you need to fully understand the problem you are dealing with before you can design a collision avoidance algorithm or path planning algorithm to suit the purpose. Many collision avoidance algorithms and path planning algorithms are compared using a simple bicycle model which may or may not be representative of your final application. If the model is not representative then its like tuning a controller for one system then implementing it on another.&lt;/p&gt;&#xA;" OwnerUserId="925" LastActivityDate="2014-01-02T11:56:18.640" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2227" PostTypeId="1" CreationDate="2014-01-02T13:32:01.477" Score="1" ViewCount="338" Body="&lt;p&gt;I'm building a quadcopter. It will be controlled by a Beaglebone black with several Sensors and a cam.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I new to the quadcopter stuff, therefore it would be nice if someone could have a look at my setup before I buy the parts.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Frame: &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__29600__Hobbyking_X650F_Glass_Fiber_Quadcopter_Frame_550mm.html&quot; rel=&quot;nofollow&quot;&gt;X650F - 550mm&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Battery: &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/uh_viewItem.asp?idProduct=20676&quot; rel=&quot;nofollow&quot;&gt;Turnigy nano-tech 5000mah 4S 25~50C Lipo Pack&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Motor: &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__25080__NTM_Prop_Drive_28_30S_800KV_300W_Brushless_Motor_short_shaft_version_.html&quot; rel=&quot;nofollow&quot;&gt;NTM Prop Drive 28-30S 800KV / 300W Brushless Motor&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;ESC: &lt;a href=&quot;http://www.goodluckbuy.com/hobbywing-brushless-esc-4in1-25a-x-4-skywalker-quattro-throttle-hub-for-quadcopter-.html&quot; rel=&quot;nofollow&quot;&gt;Skywalker 4x 25A Brushless&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This sums up to ~ 2kg. Giving me still some room for about 700g payload.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What do you think? Did I miss something important? Better ideas for some parts?&lt;/p&gt;&#xA;" OwnerUserId="2500" LastActivityDate="2014-01-04T19:46:11.760" Title="Quadcopter configuration" Tags="&lt;quadcopter&gt;" AnswerCount="2" CommentCount="2" ClosedDate="2014-01-06T20:05:00.537" ContentLicense="CC BY-SA 3.0" />
  <row Id="2228" PostTypeId="1" CreationDate="2014-01-02T22:22:11.337" Score="3" ViewCount="4252" Body="&lt;p&gt;I would like to ask a question about zero crossing event in a trapezoidal commutation on a brush-less DC motor. Here is a waveform that shows that the zero crossing event occurs every 180 electrical degrees in a sinusoidal commutation:&lt;br&gt; &lt;img src=&quot;https://i.stack.imgur.com/lcZrH.png&quot; alt=&quot;sinusoidal&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But what about trapezoidal commutation. Here is the waveform that I found about the trapezoidal commutation:&lt;br&gt; &lt;img src=&quot;https://i.stack.imgur.com/jIez1.png&quot; alt=&quot;trapezoidal&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So as you see, the zero crossing occurs 30 electrical degrees after the previous commutation and 30 electrical degrees before the next commutation.&#xA;In a motor with one pole pair, we would have 30 electrical degrees = 30 mechanical degrees, so we would have this waveform: &lt;img src=&quot;https://i.stack.imgur.com/T5BCZ.png&quot; alt=&quot;zero crossing&quot;&gt;&#xA;You see that the zero crossing in phase A occurs when the magnet faces the phase C, or in other words, after 30 electrical degrees from the last commutation.&#xA;My question in why does the zero crossing happen at that moment, why not after 60 electrical degrees, or 15 electrical degrees?&#xA;Is it related to some law's of induction? What are those law and how do this law's appear in this motor?&#xA;Can someone explain to me this with some pics?&lt;/p&gt;&#xA;" OwnerUserId="2504" LastEditorUserId="2447" LastEditDate="2014-01-06T19:49:12.463" LastActivityDate="2015-01-23T10:38:27.330" Title="Zero crossing events with brushless DC motors" Tags="&lt;brushless-motor&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2229" PostTypeId="2" ParentId="2228" CreationDate="2014-01-03T09:47:06.123" Score="1" Body="&lt;h1&gt;First, some background to make sure we are clear on the basics:&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;1 mechanical degree&lt;/strong&gt; = 1/360th of a full mechanical rotation&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;1 electrical degree&lt;/strong&gt; = 1/360th of a full AC cycle&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Zero crossing&lt;/strong&gt; = the point where the voltage equals 0&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/0/03/Zero_crossing.svg&quot; alt=&quot;zero crossing waveform explanation&quot;&gt;&#xA;&lt;br&gt;&lt;sup&gt;Image from &lt;a href=&quot;https://upload.wikimedia.org/wikipedia/commons/0/03/Zero_crossing.svg&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://upload.wikimedia.org/wikipedia/commons/0/03/Zero_crossing.svg&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, in an electric motor with 2 poles, a full AC cycle is needed to make 1 full mechanical rotation. So 1 electrical degree = 1 mechanical degree, and the zero crossing occurs twice, i.e once every 180 degrees.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;&quot;Sensored&quot; Mode&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;You say that in sensored mode, the hall sensor tells you to commutate once every 60 degrees, so your zero crossing occurs once per 60 degrees, and the full AC cycle once per 120 mechanical degrees, which means you make 3 full AC cycles per 1 mechanical rotation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That means your &quot;sensored&quot; motor has 6 poles (3 pole pairs).&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Sensorless Mode&lt;/h1&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I found while searching that the zero crossing happens 30 electrical degrees after the previous commutation&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Where did you find this? Looking at the linked chart above, shouldn't the commutation occur every 180 electrical degrees &lt;em&gt;always&lt;/em&gt;? And the zero crossing should always be in the middle between 2 commutations, which means it is always going to happen 90 electrical degrees after (or before) a commutation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you meant 30 &lt;strong&gt;mechanical degrees&lt;/strong&gt;, then we can say the commutation happens every 60 mechanical degrees (also the zero crossing happens every 60 mechanical degrees). This means a full AC cycle takes 120 mechanical degrees, so 3 full AC cycles per 1 mechanical rotation, which agrees with the information from the &quot;sensored&quot; mode.&lt;/p&gt;&#xA;" OwnerUserId="1687" LastEditorUserId="-1" LastEditDate="2017-03-10T09:42:49.073" LastActivityDate="2014-01-06T19:48:33.617" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2230" PostTypeId="2" ParentId="2217" CreationDate="2014-01-03T12:24:09.233" Score="1" Body="&lt;p&gt;If you're running this from command prompt, try this when launching command prompt: Right click. Run as administrator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then use as usual.&lt;/p&gt;&#xA;" OwnerUserId="2512" LastActivityDate="2014-01-03T12:24:09.233" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2233" PostTypeId="2" ParentId="2217" CreationDate="2014-01-03T14:14:31.200" Score="1" Body="&lt;p&gt;Certain low-level instructions are forbidden to be used by the User under Windows: unfortunately, these 'privileged' instructions can include port control commands.&#xA;Details: &lt;a href=&quot;http://support.microsoft.com/kb/112298/EN-US&quot; rel=&quot;nofollow&quot;&gt;http://support.microsoft.com/kb/112298/EN-US&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot; The inp(), outp(), and other I/O port related functions map to privileged processor instructions. For example, on Intel processors, the inp() and outp() functions end up calling the IN and OUT instructions. The privileged instruction exception occurs when these instructions are executed because typical Windows NT applications execute in a non privileged (user) mode. Only code executing in kernel mode has the necessary rights to execute privileged instructions.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Device drivers run in kernel mode: if you're getting this error on your program run, its trying to access on the low-level (which is kind of by definition what a port controller does)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Seeing as ic-prog.com's page on windows drivers was last changed on 06/09/08, which is not a good sign.&lt;/p&gt;&#xA;" OwnerUserId="2402" LastActivityDate="2014-01-03T14:14:31.200" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2234" PostTypeId="1" CreationDate="2014-01-03T15:59:07.897" Score="1" ViewCount="40" Body="&lt;p&gt;I would like to ask a question about zero crossing event in a trapezoidal commutation on a brush-less DC motor. Here is the waveform that shows that the zero crossing event occurs every 180 electrical degrees in a sinusoidal commutation:&lt;br&gt; &lt;img src=&quot;https://i.stack.imgur.com/lcZrH.png&quot; alt=&quot;sinusoidal&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But what about trapezoidal commutation. Here is the waveform that I found about the trapezoidal commutation: &lt;br&gt;&lt;img src=&quot;https://i.stack.imgur.com/jIez1.png&quot; alt=&quot;trapezoidal&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So as you see, the zero crossing occurs 30 electrical degrees after the previous commutation and 30 electrical degrees before the next commutation.&#xA;In a motor with one pole pair, we would have 30 electrical degrees = 30 mechanical degrees, so we would have this waveform: &lt;img src=&quot;https://i.stack.imgur.com/T5BCZ.png&quot; alt=&quot;zero crossing&quot;&gt;&#xA;You see that the zero crossing in phase A occurs when the magnet faces the phase C, or in other words, after 30 electrical degrees from the last commutation.&#xA;My question in why does the zero crossing happen at that moment, why not after 60 electrical degrees, or 15 electrical degrees?&#xA;Is it related to some law's of induction? What are those law and how do this law's appear in this motor?&#xA;Can someone explain to me this with some pics?&lt;/p&gt;&#xA;" OwnerUserId="2504" LastEditorUserId="2447" LastEditDate="2014-01-06T19:48:58.993" LastActivityDate="2014-01-06T19:48:58.993" Title="Zero crossing events in trapezoidal commutation" Tags="&lt;brushless-motor&gt;" AnswerCount="0" CommentCount="2" ClosedDate="2014-01-06T20:04:07.923" ContentLicense="CC BY-SA 3.0" />
  <row Id="2235" PostTypeId="2" ParentId="2228" CreationDate="2014-01-03T18:58:48.070" Score="4" Body="&lt;p&gt;Each of the three Hall Effect sensor signals is out of phase with the others by 120°. The same is true for the BEMF signals. The Hall Effect signals and the BEMF signals are 30° out of phase with each other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From this &lt;a href=&quot;http://ww1.microchip.com/downloads/en/appnotes/00970a.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Microchip App note&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Hall sensor signals are out of phase by 120 degrees to each other. At&#xA;  every 60 degrees, one of the Hall sensors makes a transition.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The BEMF generated in the windings are also at 120 degrees out of&#xA;  phase to each other, but they are asynchronous  with the Hall sensor&#xA;  signals. In every energizing sequence, two phases are connected across&#xA;  the power supply and the third winding is left open. the BEMF voltage&#xA;  is monitored on the winding that is left open. With this, the BEMF&#xA;  voltage in windings increases when it is connected to power supply and&#xA;  reduces when it is connected to the return path. The transition takes&#xA;  place when the winding is left open in the sequence. The combination&#xA;  of all 3 zero cross over points are used to generate energizing&#xA;  sequence. The phase difference between the hall sensor and the BEMF&#xA;  signal is 30 degrees.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/TvnQs.png&quot; alt=&quot;Waveform of Hall sensor versus BEMF voltages&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/nokDK.png&quot; alt=&quot;Oscilloscope waveform of BEMF and Hall sensor signals&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if you commutate 30° &lt;em&gt;after&lt;/em&gt; sensing a zero crossing, you are actually commutating at the same time you would be if you detected a change in the Hall Effect sensors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason the Hall Effect signals and the BEMF are out of phase is because they are measuring two different things. The Hall Effect sensors are measuring rotor position. The BEMF signals are measuring stator sequence energization. It is from that energization that we can extrapolate rotor position and determine correct commutation timing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From this &lt;a href=&quot;http://www.atmel.com/Images/doc7658.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Atmel App note&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The optimum drive sequence is to drive PWM at 30° after zero crossing&#xA;  to be in phase with the rotor position as shown by the figure below.&#xA;  Driving earlier or later to this 30° will increase the current&#xA;  comsumption [sic] of the motor.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/uWkfZ.png&quot; alt=&quot;Thirty degree phase angle&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So why 30°? 30° is the amount of time it takes for the interaction between the stator magnetic field and the rotor magnetic field to begin to weaken to the point that stator's electrical field needs to be altered in order to strengthen the interaction between the two magnetic fields.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can actually play with this timing to some degree by doing things like rotating the Hall Effect sensors in order to achieve certain results and/or meet certain requirements. I go into this practice more in my answer to this question: &lt;a href=&quot;https://electronics.stackexchange.com/questions/53637/why-have-non-zero-timing-on-a-bldc&quot;&gt;Why Have Non-Zero Timing on a BLDC?&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="142" LastEditorUserId="-1" LastEditDate="2017-04-13T12:33:08.317" LastActivityDate="2014-01-03T18:58:48.070" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2236" PostTypeId="1" AcceptedAnswerId="2240" CreationDate="2014-01-04T00:26:06.863" Score="7" ViewCount="774" Body="&lt;p&gt;I'm programming Lua for controlling computers and robots in-game in the Minecraft mod &lt;a href=&quot;http://computercraft.info&quot; rel=&quot;noreferrer&quot;&gt;ComputerCraft&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ComputerCraft has these robots called Turtles, that are able to move around in the &lt;em&gt;grid based&lt;/em&gt;(?) world of Minecraft. They are also equipped with sensors making them able to detect blocks (obstacles) adjacent to them. Turtles execute Lua programs written by a player.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a hobby project I would like to program a &lt;code&gt;goto(x, y, z)&lt;/code&gt; function for my Turtles. Some Turtles actually have equipment to remove obstacles, but I would like to make them avoid obstacles and thus prevent the destruction of the in-game environment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have no prior experience in robotics, but I have a B.Sc. in Computer Science and am now a lead web developer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did some research and found some basic strategies, namely &lt;em&gt;grid based&lt;/em&gt; and &lt;em&gt;quadtree based&lt;/em&gt;. As I have no experience in this area, these strategies might be old school.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that Turtles are able to move in three dimensions (even hover in any height). I could share the obstacles as well as obstacle free coordinates in a common database as they are discovered if that would help me out, as most obstacles are stationary once they are placed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What are my best options in this matter? Are there any &lt;em&gt;easy fixes&lt;/em&gt;? Where do I look for additional resources?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you very much in advance! :-)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt;: Thank you for your feedback!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I started reading the book &lt;em&gt;Artificial Intelligence: A Modern Approach, 3rd Edition&lt;/em&gt; to get up to speed on basic theory as suggested by &lt;strong&gt;Ian&lt;/strong&gt;. Pointers to other educational resources are appreciated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, I started developing a basic navigation algorithm for moving in unexplored areas, similar to what &lt;strong&gt;Cube&lt;/strong&gt; suggested.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The priority for me is as few moves as possible, as it costs time and fuel cells for each additional move (approx. 0.8 seconds and 1 fuel cell per move in either direction). I plan on using the Euclidean heuristics function in a Greedy Best-First Search for computing a path that is expected to be quite optimal in reducing the number of moves to reach the goal, if enough data is available from the shared database from previous exploration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each time an obstacle is reached, I plan to use the following very basic algorithm, exploiting the fact that Turtles are able to move vertically:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;1. Calculate direct horizontal path to the goal.&#xA;2. Turn to the direction of the next step of the path.&#xA;3. If an obstacle is detected in front of the Turtle go to 5. If this is the 4th time that an obstacle is detected in front of the Turtle after moving up, go to 6.&#xA;4. Move forward, go to 2.&#xA;5. If no obstacle is detected above the Turtle, move up and go to 3, else go to 7.&#xA;6. Backtrack to the coordinates the Turtle was in before moving upwards.&#xA;7. Turn left, go to 3.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;When using this algorithm, records are kept of the explored coordinates and uploaded to a shared database. However, there are some cases, that I did not consider:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;- When should it move down?&#xA;- What if the goal is not reachable from a coordinate directly above it?&#xA;- If no horizontal move in any direction is possible, how long should it backtrack?&#xA;- How to detect unreachable goals (obstacles can then be removed if requested)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Maybe if enough exploration data of the area is available, a Jump Point Search is performed to calculate an optimal path. However this assumes a 2D map. How can I take the 3rd dimension into account?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, what would be a good data structure to store the exploration data?&lt;/p&gt;&#xA;" OwnerUserId="2522" LastEditorUserId="2522" LastEditDate="2014-01-05T19:35:17.073" LastActivityDate="2014-01-05T19:35:17.073" Title="ComputerCraft (Minecraft mod) navigation: Collision avoidance and path planning/finding in 2D/3D space" Tags="&lt;mobile-robot&gt;&lt;navigation&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2238" PostTypeId="2" ParentId="2222" CreationDate="2014-01-04T01:44:43.550" Score="2" Body="&lt;p&gt;Where to get started?&#xA;Start with an idea, write down its properties, requirements, scope of the robot, its audience. Sketch it on paper. Make a CAD model using Solidworks if you have. You can simulate many properties in Solidworks. You can also import a 3D model of the ECAD file and estimate the production cost. Learn electronics, programmering and take several courses in mathematics. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What to build?&#xA;Build what you would love to have or exist.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How to sell?&#xA;Anything can be sold to anybody at any price, if the product makes an impression on the buyer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How difficult it is to sell in this industry?&#xA;Robots nowadays are like computers 40 years ago. So the opportunities are huge. Having said that, the better it impresses the buyer the easier it gets sold. But generally robots related to &quot;Saving the environment&quot;, &quot;Saving human lives and increasing health and comfort&quot;, &quot;Minimising crime or unwanted behaviors&quot; are getting popular and get a lot of attention in the media.&lt;/p&gt;&#xA;" OwnerUserId="745" LastEditorUserId="745" LastEditDate="2016-01-12T10:37:54.387" LastActivityDate="2016-01-12T10:37:54.387" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2239" PostTypeId="2" ParentId="2227" CreationDate="2014-01-04T02:03:24.940" Score="1" Body="&lt;p&gt;Looks good to me. You also need:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;propellers&lt;/li&gt;&#xA;&lt;li&gt;power distribution board which keeps thing more organised until you make your own PCB.&lt;/li&gt;&#xA;&lt;li&gt;A Li-Po battery charger with a compatible connector.&lt;/li&gt;&#xA;&lt;li&gt;Spare parts. (Many propellers, and few motors and ESCs)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Also visit &lt;a href=&quot;http://ecalc.ch/xcoptercalc.htm&quot; rel=&quot;nofollow&quot;&gt;xcoptercalc&lt;/a&gt; to 'simulate' the parts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Be careful with the motors since there are some openings at the bottom making it easy for small metal dust to enter the motor. If metallic dust enters the motor, it is almost impossible to detach it from those permanent magnets.&lt;/p&gt;&#xA;" OwnerUserId="745" LastEditorUserId="745" LastEditDate="2014-01-04T14:13:41.833" LastActivityDate="2014-01-04T14:13:41.833" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2240" PostTypeId="2" ParentId="2236" CreationDate="2014-01-04T12:37:51.250" Score="2" Body="&lt;p&gt;What comes to my mind first is some sort of bug algorithm. That is a path finding algorithm that has only small constant amount of memory and only sees (small) local parts of the world.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can imagine this as&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Go directly to the goal&lt;/li&gt;&#xA;&lt;li&gt;If there is an obstacle in a way, pick a direction and start going around it&lt;/li&gt;&#xA;&lt;li&gt;Once there is a free path again, goto 1&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Of cause there are some problems with this, I'm not entirely sure that this will work in 3D. Selecting a way around an obstacle will be a little trickier than just saying &quot;always go right&quot;.&#xA;Other than that, this algorithm can select a wrong direction and spend a long time going around the obstacle which it could avoid easily by going other way around it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.cs.cmu.edu/~motionplanning/lecture/Chap2-Bug-Alg_howie.pdf&quot; rel=&quot;nofollow&quot;&gt;These slides&lt;/a&gt; might help you with some of the details.&lt;/p&gt;&#xA;" OwnerUserId="482" LastEditorUserId="482" LastEditDate="2014-01-04T15:08:56.617" LastActivityDate="2014-01-04T15:08:56.617" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2241" PostTypeId="2" ParentId="2227" CreationDate="2014-01-04T19:46:11.760" Score="1" Body="&lt;p&gt;You should have a prop balancer like &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__19292__Turnigy_Magnetic_Precision_Prop_Balancer.html&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt; which will ensure that propellers are well balanced. Also you should have a Lipo alarm like &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__18588__Hobbyking_2_8S_Cell_Checker_with_Low_Voltage_Alarm.html&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt; which can warn you when you are low on battery during fight.&lt;/p&gt;&#xA;" OwnerUserId="2118" LastActivityDate="2014-01-04T19:46:11.760" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2242" PostTypeId="2" ParentId="2236" CreationDate="2014-01-04T20:08:25.470" Score="2" Body="&lt;p&gt;It looks like your research here is a little too specific -- you're working on the practical level before being up to speed on the theory.  Take a look at more of the higher-level concepts of motion planning and obstacle avoidance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;em&gt;extremely&lt;/em&gt; simplified process is:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Expressing a high-level objective for the robot&lt;/li&gt;&#xA;&lt;li&gt;Based on data describing the current environment, creating a set of planned movements that meet the objective (using path planning algorithms like &lt;a href=&quot;http://en.wikipedia.org/wiki/A%2a_search_algorithm#Example&quot; rel=&quot;nofollow&quot;&gt;A* search&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;li&gt;As time passes, collecting new data about the environment (e.g. current position, new obstacles) and re-planning the path&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Quadtrees and grids are just 2 ways of representing the environment itself; one of the practical problems involved in robotics is the sheer volume of data that can come in, and quadtrees offer a more memory-space-efficient representation of that data (see also, &lt;a href=&quot;http://en.wikipedia.org/wiki/Octree&quot; rel=&quot;nofollow&quot;&gt;octrees&lt;/a&gt; for 3D spaces) in return for some extra CPU time and complexity.  There are many such optimizations that you could make, but it sounds like you're considering them a little too early in the design process.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-01-04T20:08:25.470" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2244" PostTypeId="1" AcceptedAnswerId="2252" CreationDate="2014-01-06T03:33:49.137" Score="7" ViewCount="3955" Body="&lt;p&gt;I am trying to simulate a quadcopter model on Simulink. I want to implement a PID controller for each of X,Y,Z and phi,theta, psi angles. PID gets the error, as input, which is to be minimized.&#xA;For the X,Y and Z, the desired values are entered by the user and the actual values are calculated from the accelerometer data, hence, the error is the desired set value - actual value.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For phi,theta and psi, the actual values may be obtained from the gyroscope and accelerometer (sensor fusion) but I don't actually know how to calculate the desired values for each one of them since the user is usually interested in giving the position values X,Y and Z as desired not the angle values! The absence of the desired values prevents me form calculating the angular error which is needed for the PID controller.&lt;/p&gt;&#xA;" OwnerUserId="2533" LastEditorUserId="2447" LastEditDate="2014-01-08T14:29:45.643" LastActivityDate="2014-01-09T16:10:33.877" Title="How to know the desired orientation of a quadcopter?" Tags="&lt;design&gt;&lt;pid&gt;&lt;quadcopter&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2245" PostTypeId="1" AcceptedAnswerId="2248" CreationDate="2014-01-06T08:49:17.403" Score="6" ViewCount="376" Body="&lt;p&gt;I'm reading Probabilistic Robotics by Thrun. In the Kalman filter section, they state that &#xA;$$&#xA;x_{t} =A_{t}x_{t-1} + B_{t}u_{t} + \epsilon_{t}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $\epsilon_{t}$ is the state noise vector.  And in&#xA;$$&#xA;z_{t} = C_{t}x_{t} + \delta_{t}&#xA;$$&#xA;where $\delta_{t}$ is the measurement noise. Now, I want to simulate a system in Matlab. Everything to me is straightforward except the state noise vector $\epsilon_{t}$. Unfortunately, majority of authors don't care much about the technical details. My question is what is the state noise vector? and what are the sources of it? I need to know because I want my simulation to be rather sensible. About the measurement noise, it is evident and given in the specifications sheet that is the sensor has uncertainty ${\pm} e$.&lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="2155" LastEditDate="2015-07-23T22:29:26.317" LastActivityDate="2015-07-23T22:29:26.317" Title="Kalman Filter and the state noise vector?" Tags="&lt;kalman-filter&gt;&lt;noise&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2246" PostTypeId="5" CreationDate="2014-01-06T17:10:33.993" Score="0" Body="&lt;p&gt;Kinematics is the study of mechanics deal with motion of points and objects without regard to the cause of the motion, such as the movement of jointed robotic arm or the movement of pistons and tappets of an engine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Forward_kinematics&quot; rel=&quot;nofollow&quot;&gt;Forward kinematic&lt;/a&gt;&lt;/strong&gt; equations describe the final position of a robotic arm or other system based on the joint parameters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Inverse_kinematics&quot; rel=&quot;nofollow&quot;&gt;Inverse kinematic&lt;/a&gt;&lt;/strong&gt; equations describe the joint parameters necessary to move a robotic arm to a particular position.&lt;/p&gt;&#xA;" OwnerUserId="2540" LastEditorUserId="177" LastEditDate="2014-01-08T22:40:36.683" LastActivityDate="2014-01-08T22:40:36.683" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2247" PostTypeId="4" CreationDate="2014-01-06T17:10:33.993" Score="0" Body="Kinematics is the branch of mechanics dealing with the motion of points and objects." OwnerUserId="2540" LastEditorUserId="2540" LastEditDate="2014-01-06T19:49:21.420" LastActivityDate="2014-01-06T19:49:21.420" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2248" PostTypeId="2" ParentId="2245" CreationDate="2014-01-06T17:58:44.900" Score="5" Body="&lt;p&gt;In my understanding, $\epsilon_{t}$ accounts for the uncertainties of the state model. Uncertainties come from real life imperfections, for example the wheels are not completely round, or the weight distribution is not even, or the motors don't perform exactly as predicted by the model.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So when the robot executes a straight movement, it is expected to eventually reach a nearby position of that predicted by the model, a bit to the left or right.&lt;/p&gt;&#xA;" OwnerUserId="1445" LastActivityDate="2014-01-06T17:58:44.900" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2249" PostTypeId="2" ParentId="1959" CreationDate="2014-01-06T19:03:19.243" Score="3" Body="&lt;p&gt;From wikipedia &lt;a href=&quot;http://en.wikipedia.org/wiki/Stepper_motor&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://en.wikipedia.org/wiki/Stepper_motor&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Because windings are better utilized, they are more powerful than a unipolar motor of the&lt;br /&gt;&#xA;same weight. This is due to the physical space occupied by the windings. A unipolar motor&#xA;has twice the amount of wire in the same space, but only half used at any point in time,&#xA;hence is 50% efficient (or approximately 70% of the torque output available). Though a&#xA;bipolar stepper motor is more complicated to drive, the abundance of driver chips means&#xA;this is much less difficult to achieve.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;If you read specifications for a stepper motor that can be wired as unipolar/bipolar, you will confirm this.&lt;/p&gt;&#xA;&lt;p&gt;But if you have a 5 wire unipolar, the central one is common to the center tap of both coils. You need to remove this connection to use it as bipolar. If you have a 6 wire, yes it is meant for that, just ignore the two other wires (some motors have connectors so you can disconnect the wires), and run it as bipolar.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/OmHCR.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OmHCR.png&quot; alt=&quot;stepper motor wiring&quot; /&gt;&lt;/a&gt;&#xA;&lt;br&gt;&lt;sup&gt;From &lt;a href=&quot;http://www.esuli.it/2011/10/11/converting-an-unipolar-stepper-to-bipolar/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.esuli.it/2011/10/11/converting-an-unipolar-stepper-to-bipolar/&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;" OwnerUserId="2447" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2019-07-15T15:36:17.437" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="2250" PostTypeId="1" CreationDate="2014-01-06T21:53:00.587" Score="4" ViewCount="942" Body="&lt;p&gt;I need to find a way to solve invrese kinematics for Comau SMART-3 robot. Could you give me a few hints where to start looking? I have no idea about robotics and I couldn't find an algorithm for this specific robot.&lt;/p&gt;&#xA;" OwnerUserId="2543" LastActivityDate="2019-12-24T22:19:08.340" Title="Finding inverse kinematics algorithm for a specific manipulator" Tags="&lt;inverse-kinematics&gt;" AnswerCount="5" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2251" PostTypeId="1" AcceptedAnswerId="4438" CreationDate="2014-01-06T22:15:12.180" Score="13" ViewCount="6576" Body="&lt;p&gt;From what I've read so far, it seems that a &lt;em&gt;Rao-Blackwellized&lt;/em&gt; particle filter is just a normal particle filter used after marginalizing a variable from:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$p(r_t,s_t | y^t)$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not really sure about that conclusion, so I would like to know the precise differences between these two types of filters. Thanks in advance.&lt;/p&gt;&#xA;" OwnerUserId="2541" LastEditorUserId="10041" LastEditDate="2015-10-06T12:48:30.667" LastActivityDate="2017-04-27T05:44:08.713" Title="Difference between Rao-Blackwellized particle filters and regular ones" Tags="&lt;slam&gt;&lt;particle-filter&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2252" PostTypeId="2" ParentId="2244" CreationDate="2014-01-06T22:25:47.173" Score="8" Body="&lt;p&gt;You're trying to implement more PIDs than you have &lt;a href=&quot;http://en.wikipedia.org/wiki/Degrees_of_freedom_(engineering)&quot; rel=&quot;nofollow noreferrer&quot;&gt;degrees of freedom&lt;/a&gt;.  In a quadcopter, you have only 4: $(Z, \phi, \theta, \psi)$ i.e. (Altitude, Roll, Pitch, and Yaw). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.draganfly.com/uav-helicopter/draganflyer-x4/features/stability.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3H4Ba.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;via (&lt;a href=&quot;http://www.draganfly.com/uav-helicopter/draganflyer-x4/features/stability.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.draganfly.com/uav-helicopter/draganflyer-x4/features/stability.php&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Interestingly, from a PID perspective you definitely &lt;em&gt;do&lt;/em&gt; have desired values for $\phi$ and $\theta$: you want them both to default to zero, so that your quadcopter hovers stably.  (You could also constrain $\psi$ to a fixed value like zero, but since the quadcopter is symmetric about the Z axis, all you really need to do is prevent excessive rotation by bumping up the 'D' term in the $\psi$ PID.)  The Z PID can then be tuned to ensure that you can set and hold a desired altitude.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So in the simplest case, the X and Y PIDs will end up sitting &quot;on top&quot; of the other PIDs.&lt;br&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/hUzW8.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hUzW8.png&quot; alt=&quot;Processing chain&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In other words, the output of the X and Y PIDs will be (respectively) become the desired $\phi$ and $\theta$ angles that will nudge the quadcopter toward the desired position.  (Note that you'll have to convert the world-relative desired X and Y to quadcopter-relative X and Y to compensate for $\psi$.  &lt;a href=&quot;https://robotics.stackexchange.com/a/727/350&quot;&gt;This answer&lt;/a&gt; has more.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are more sophisticated ways to control aerial vehicles, but this is one of the easiest to learn.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2014-01-09T16:10:33.877" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="2253" PostTypeId="2" ParentId="1554" CreationDate="2014-01-07T00:24:11.563" Score="1" Body="&lt;p&gt;If you want sub-meter tracking of the moving object, GPS alone will not be sufficient.  I concur that passive vision-based techniques will require a huge amount of engineering to implement, not to mention substantial size, weight, and power.  I recommend using differential GPS techniques -- not exactly easy, but simpler from a system standpoint.  You will need a high-update rate GPS receiver that outputs Carrier Phase and Pseudo-Range data as well as a traditional GPS solution.  You will also need to transmit this additional data to your quadcopter from both a nearby reference station and the moving object.  It is useful to have a stationary reference station since its position is exactly known, so using the satellite ephemeris you can determine the propagation and timing errors from each satellite very precisely.  Since you know the approximate geometry to both the non-moving reference station and the moving object, and the paths to the satellites are approximately the same for both cases, you can adopt the precisely calculated propagation and timing errors learned from the reference station and apply them to the moving object.  Additional accuracy is gained by computing a relative position solution for both the quadcopter and the moving object that explains the observed changes in Carrier Phase over time as both of these move.  Since these are phase changes, the integer number of cycles is unknown and must be solved for using a well-known technique for finding integer solutions to least-square problems (name escapes me at the moment).  A Kalman Filter or Particle Filter is also typically needed to converge to the correct position solution using the carrier data after fusing with the pseudo-range-derived data.  Check out work done at Auburn University's Navlab for examples of this type of work.&lt;/p&gt;&#xA;" OwnerUserId="2546" LastActivityDate="2014-01-07T00:24:11.563" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2254" PostTypeId="5" CreationDate="2014-01-07T17:00:31.163" Score="0" Body="&lt;p&gt;&lt;strong&gt;Inverse kinematics&lt;/strong&gt; uses kinematic equation to determine what joint parameters are required in the kinematic chain to move an end-effector into a particular position.  A &lt;a href=&quot;http://en.wikipedia.org/wiki/Kinematic_chain&quot; rel=&quot;nofollow&quot;&gt;kinematic chain&lt;/a&gt; is mathematical model of the rigid bodies and joint connectors in (for example) a robotic arm.&lt;/p&gt;&#xA;" OwnerUserId="2540" LastEditorUserId="350" LastEditDate="2014-01-07T19:48:11.047" LastActivityDate="2014-01-07T19:48:11.047" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2255" PostTypeId="4" CreationDate="2014-01-07T17:00:31.163" Score="0" Body="Inverse kinematics is a subtopic of kinematics dealing with equations that describe the joint parameters necessary to move a robotic arm to a particular position. Also called motion planning." OwnerUserId="2540" LastEditorUserId="2540" LastEditDate="2014-01-07T19:48:54.330" LastActivityDate="2014-01-07T19:48:54.330" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2256" PostTypeId="1" CreationDate="2014-01-07T17:37:26.657" Score="2" ViewCount="340" Body="&lt;p&gt;I Have an old &lt;a href=&quot;http://www.hifido.co.jp/photo/10/520/52010/b.jpg&quot; rel=&quot;nofollow&quot;&gt;audio amplifier&lt;/a&gt; that has those switches to turn it on. &#xA;I'm looking for the simplest motor/robotic arm (or any other relevant component) to control this switch - eventually via Raspberry Pi .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any options ?&lt;/p&gt;&#xA;" OwnerUserId="2552" LastActivityDate="2014-01-09T00:15:06.827" Title="Flipping an old manual switch (physical one)" Tags="&lt;motor&gt;&lt;raspberry-pi&gt;&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2014-01-25T13:15:29.087" ContentLicense="CC BY-SA 3.0" />
  <row Id="2257" PostTypeId="2" ParentId="2256" CreationDate="2014-01-07T18:40:33.953" Score="2" Body="&lt;p&gt;If you just want to control the switches and not the knobs, some options are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Dual acting solenoids or two simple acting &lt;a href=&quot;http://www.magnetschultz.co.uk/uploads/images/product_images/return-springs-l.jpg&quot; rel=&quot;nofollow&quot;&gt;solenoids&lt;/a&gt;. &#xA;&lt;br&gt;&#xA;Needs just a pulse of current in one direction to operate. In some dual acting solenoids, you need to reverse current to reverse the direction of force.&#xA;&lt;br&gt;&lt;sup&gt;Image from &lt;a href=&quot;http://www.magnetschultz.co.uk&quot; rel=&quot;nofollow&quot;&gt;http://www.magnetschultz.co.uk&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;RC servo-motor. &lt;em&gt;(With that you can control the knobs too)&lt;/em&gt;&#xA;&lt;br&gt;Normally more force for a given size/weight of solenoid. Slower than a solenoid but depending on the model still in the $ ms $ for a 60° rotation. Has more moving parts than a solenoid, so more wear. Major ones have a brushed DC motor so have the brushes wear too. Anyway, should last for maybe a decade without problem. It's a servo-mechanism, so has position feedback and precision positioning. Have the drive electronics, but you need to provide a PWM signal relative to the position you want it to rotate.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://ecx.images-amazon.com/images/I/41dI3XxmxWL._SX300_.jpg&quot; rel=&quot;nofollow&quot;&gt;Car door lock actuator&lt;/a&gt;&lt;br&gt;Shares some of the properties from a RC Servo-motor, but has linear action like the solenoid, and don't have position feed-back (some have a open/closed feed-back). Needs a pulse of current to operate too, but needs reversing the current to reverse the direction of force.&#xA;&lt;br&gt;&lt;sup&gt;Image from &lt;a href=&quot;http://www.amazon.com/&quot; rel=&quot;nofollow&quot;&gt;http://www.amazon.com/&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;&lt;strong&gt;Note:&lt;/strong&gt; I presume by your question that you want to mechanical actuate the switch and electronic options are excluded.&lt;/sup&gt;&lt;/p&gt;&#xA;" OwnerUserId="2447" LastEditorUserId="2447" LastEditDate="2014-01-09T00:15:06.827" LastActivityDate="2014-01-09T00:15:06.827" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2259" PostTypeId="2" ParentId="2245" CreationDate="2014-01-07T20:33:18.810" Score="1" Body="&lt;p&gt;The noise term $\epsilon_t$ is meant to capture uncertainty in the transition model, e.g. slippage due to an imperfect friction model for wheels. In other words, components of the model that were not incorporated either because they add to much computational complexity or simply cannot be modeled, such as disturbances that cannot be known in advance. It is usually assumed to be a zero mean Gaussian distributed random variable vector of the same size as the state variable $x$ that is independent between time steps. In other words, $x, \epsilon \in \mathbb{R}^n$ where $n$ is the dimension of the state-space, $\epsilon \sim \mathcal{N}(0,\Sigma)$, $\Sigma$ is the covariance of $\epsilon$, and $\epsilon_t$ and $\epsilon_{t+1}$ are identical and independently distributed. These assumptions permit closed form solutions to the Kalman filter which in term makes it relatively efficient to compute.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The noise term $\delta_t$ is basically the same but represents uncertainty in the sensing model. Usually $\epsilon_t$ and $\delta_t$ are not known a priori and need to be learned via some system identification method or can be learned from data using something like Expectation-Maximization.&lt;/p&gt;&#xA;" OwnerUserId="177" LastActivityDate="2014-01-07T20:33:18.810" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2260" PostTypeId="2" ParentId="2244" CreationDate="2014-01-07T21:45:13.247" Score="4" Body="&lt;p&gt;Defining the state of the quadcopter as $\bf{x} = \left[ \begin{matrix} \mathbf{p} &amp;amp; \mathbf{v} &amp;amp; \mathbf{r} &amp;amp; \mathbf{w} \end{matrix} \right]^T$ where $\mathbf{p}$, $\mathbf{v}$, $\mathbf{r}$, and $\mathbf{w}$ are the position, velocity, angular position, and angular velocity of the quadcopter respectively. A simplified transition model for a quadcopter using PD control is:&#xA;\begin{align}&#xA;\dot{\mathbf{p}} &amp;amp; = \mathbf{v} \\&#xA;\dot{\mathbf{v}} &amp;amp; = -g\mathbf{e}_3 + \text{exp}([\mathbf{r}])\mathbf{e}_3u_1/m \\&#xA;\dot{\mathbf{r}} &amp;amp; = \mathbf{w} + \frac{1}{2}[\mathbf{r}]\mathbf{w} + (1 - \frac{||\mathbf{r}||}{2\text{tan}(||\mathbf{r}||/2)})\frac{[\mathbf{r}]^2}{||\mathbf{r}||^2}\mathbf{w} \\&#xA;\dot{\mathbf{w}} &amp;amp; = \begin{bmatrix} k_1(u_2 - r_x) + k_2w_x \\ k_1(u_3 - r_y) + k_2w_y \\ 0 \end{bmatrix}&#xA;\end{align}&#xA;where $\mathbf{e}_3 = \left[ \begin{matrix} 0 &amp;amp; 0 &amp;amp; 1 \end{matrix} \right]^T$, $[\mathbf{r}]$ represents the skew-symmetric matrix of $\mathbf{r}$, $||\mathbf{r}||$ represents the magnitude of $\mathbf{r}$, $k_1$ and $k_2$ represent the proportional and derivative gains respectively, and the control $\mathbf{u} = \left[ \begin{matrix} u_1 &amp;amp; u_2 &amp;amp; u_3 \end{matrix} \right]^T$ is comprised of the desired total thrust $u_1$, the desired roll angle $u_2$, the desired pitch angle $u_3$, and assumes yaw remains the same. Note that this uses a PD controller because the integration term I is generally not useful for trajectory following.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using this model you can, given the current state $\mathbf{x}$, calcualte how the state will change. This of course does not give you the desired angular positions about which you asked. Assuming the user expects the quadcopter to hover once it has reached the specified desired position $\mathbf{p} = [X, Y, Z]^T$ then we need $\mathbf{v} = \mathbf{r} = \mathbf{w} = \left[ \begin{matrix} 0 &amp;amp; 0 &amp;amp; 0 \end{matrix} \right]^T$ for the final state.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However that still does not give you the desired angles to transition between the initial state $\mathbf{x}_i$ and the final state $\mathbf{x}_f = \left[ \begin{matrix} \mathbf{p} &amp;amp; \mathbf{v} &amp;amp; \mathbf{r} &amp;amp; \mathbf{w} \end{matrix} \right]^T$. To get that you need a higher level controller to calculate a trajectory $\pi = (\mathbf{x}[], \mathbf{u}[], \tau)$ with $\mathbf{x} : [0, \tau] \rightarrow \mathcal{X}$, $\mathbf{u} : [0, \tau] \rightarrow \mathcal{U}$ for the state-space $\mathcal{X}$ and control space $\mathcal{U}$ and some travel time $\tau$. This trajectory will give you the desired angles at any given moment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately there are a lot of ways to calculate this trajectory. One possibility is to look at my own work in this area. Specifically my paper titled &lt;a href=&quot;http://arl.cs.utah.edu/research/krrtstar/&quot; rel=&quot;nofollow&quot;&gt;Kinodynamic RRT*: Asymptotically Optimal Motion Planning for Robots with Linear Dynamics&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="177" LastActivityDate="2014-01-07T21:45:13.247" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2261" PostTypeId="1" CreationDate="2014-01-08T05:16:57.413" Score="2" ViewCount="86" Body="&lt;p&gt;Can a gyroscopic sensor (comparable to the type that are typically used in smartphones) that is embedded in this black object &#xA;&lt;br&gt;&lt;img src=&quot;https://i.stack.imgur.com/4KvPC.jpg&quot; alt=&quot;some object&quot;&gt; &lt;br&gt;&#xA;that is rotating around the X axis measure the number of rotations around the X axis if the object may or may not also be rotating at the same time in random ways (number of partial or full rotations, speeds, and directions) around the Z axis?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If so, is the Z axis rotation irrelevant, or is there special mathematics involved in filtering out the affects of the Z rotation on the measurement of X axis rotation?  Or does another measurement such as acceleration or magnetism need to be used to solve the problem?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any impact in using a 2-axis vs. a 3-axis gyroscopic sensor for this measurement scenario?&lt;/p&gt;&#xA;" OwnerUserId="2556" LastEditorUserId="2447" LastEditDate="2014-01-09T11:20:59.287" LastActivityDate="2014-01-09T13:58:33.453" Title="How to gyroscopically measure number of rotations on one axis when there is concurrent random motion on another axis" Tags="&lt;sensors&gt;&lt;gyroscope&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2262" PostTypeId="1" CreationDate="2014-01-08T09:07:46.643" Score="1" ViewCount="1449" Body="&lt;p&gt;We want to create robot that will localize itself by the signals of wifi routers.&#xA;Which sensors should we buy to detect strength of 3 WiFi signal?&#xA;Which of following is necessary for us?&#xA;&lt;a href=&quot;http://www.dfrobot.com/index.php?route=product/category&amp;amp;path=45_80&quot; rel=&quot;nofollow&quot;&gt;http://www.dfrobot.com/index.php?route=product/category&amp;amp;path=45_80&lt;/a&gt;&#xA;or can be any other more suitable variants?&#xA;We are using arduino as a platform.&lt;/p&gt;&#xA;" OwnerUserId="2557" LastActivityDate="2014-05-08T19:15:16.560" Title="How to choose WiFi signal strength detecting sensors" Tags="&lt;arduino&gt;&lt;sensors&gt;&lt;localization&gt;&lt;wifi&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2263" PostTypeId="1" AcceptedAnswerId="2269" CreationDate="2014-01-08T09:10:29.550" Score="5" ViewCount="13608" Body="&lt;p&gt;I previously thought that an accelerometer on a quadcopter is used to find the position by integrating the data got from it. After I read a lot and watched &lt;a href=&quot;http://www.youtube.com/watch?v=C7JQ7Rpwn2k&quot; rel=&quot;noreferrer&quot;&gt;this Youtube video&lt;/a&gt; (specifically at time 23:20) about Sensor Fusion on Android Devices, I seem to get its use a little correct. I realized that it's hard to filter out the considerable noise, generated from error integration,  to get useful information about the position. I also realized that it is used along with the gyroscope and magnetometer to for fused information about orientation not linear translation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For outdoor flight, I thought of the GPS data to get the relative position, but is it so accurate in away that enables position measurement (with good precision)? How do commercial quadcopters measure positions (X,Y and Z)? Is it that GPS data are fused with the accelerometer data?&lt;/p&gt;&#xA;" OwnerUserId="2533" LastActivityDate="2016-08-25T15:14:55.273" Title="Quadcopter Position Measurement (Accelerometer, GPS or Both)?" Tags="&lt;quadcopter&gt;&lt;accelerometer&gt;&lt;navigation&gt;&lt;sensor-fusion&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2264" PostTypeId="1" CreationDate="2014-01-08T07:02:30.187" Score="10" ViewCount="14290" Body="&lt;p&gt;I need help in differentiating between AI and Robotics. Are AI and Robotics two different fields or is robotics a subject in AI?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to pursue a career in AI and Robotics. So I need your valuable suggestion. I searched the web and also some universities that I want to apply and I cannot find any such thing that I am searching for.&lt;/p&gt;&#xA;" OwnerDisplayName="user1395787" LastEditorUserId="131" LastEditDate="2014-04-10T11:49:12.053" LastActivityDate="2016-03-21T21:45:36.267" Title="Are Artificial Intelligence and Robotics Different?" Tags="&lt;artificial-intelligence&gt;" AnswerCount="7" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2265" PostTypeId="2" ParentId="2264" CreationDate="2014-01-08T09:43:08.847" Score="5" Body="&lt;p&gt;AI means different things to different people and encapsulates a large number of sub-domains: vision, natural language processing, knowledge representation and engineering, machine learning, etc.  Many, if not all, areas of AI have applications to robotics; however, doing AI research does not mean that you directly, or in any way, work with robots.  Working with robots does not necessarily mean that you do artificial intelligence research, either.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Off the top of my head, here are a few good programs (my opinion, which was based off of my research and interests): &lt;a href=&quot;http://www.robotics.gatech.edu/&quot;&gt;Georgia Tech&lt;/a&gt;, &lt;a href=&quot;http://www.eecs.mit.edu/&quot;&gt;MIT&lt;/a&gt;, &lt;a href=&quot;http://www.ri.cmu.edu/&quot;&gt;CMU&lt;/a&gt;, &lt;a href=&quot;http://ai.stanford.edu/&quot;&gt;Stanford&lt;/a&gt;, &lt;a href=&quot;http://cs.brown.edu/research/areas.html&quot;&gt;Brown&lt;/a&gt;, &lt;a href=&quot;https://www.lcsr.jhu.edu/Main_Page&quot;&gt;Johns Hopkins&lt;/a&gt;, etc. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;NB:&lt;/strong&gt;&lt;br&gt; It may be different for a master's degree, but if you're looking to do research, you shouldn't be judging schools based off the general reputation of a particular sector of the CS department.  Instead, you should be looking for specific professors with whom you would like to conduct research.  Being at a well known school is wonderful, but if the professors aren't doing what you're interested in, then you're doing yourself a disservice.   &lt;/p&gt;&#xA;" OwnerUserId="2562" OwnerDisplayName="Steve P." LastActivityDate="2014-01-08T09:54:53.973" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2266" PostTypeId="2" ParentId="2264" CreationDate="2014-01-08T13:02:19.997" Score="2" Body="&lt;p&gt;If you want to understand the difference between robotics vs AI, you can roughly think about it as creatures vs brain (more precisely, nerve system).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First off, not all creatures have a brain. They may have nerves that allow them to act reflexively. They are equivalent to robots with no AI (note: definition of AI is not &lt;em&gt;that&lt;/em&gt; precise).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are some creatures with a brain, but a brain that is quite dumb (in the sense that it can do complex tasks, but it can't learn new ways for it). Those are robots with more complex algorithms, but still no learning, which some consider as no AI and some consider as a specific kind of AI.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The interesting ones are the ones that have brains they use to learn (e.g. humans, cats, dolphins, elephants etc). They are like robots with AI.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In summary, robotics is a whole set of sciences; mathematics, physics, mechanics, electronics, materials, control, geometry, artificial intelligence and many others. However, each of those sciences by itself goes beyond robotics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you go after learning AI, you &lt;em&gt;may&lt;/em&gt; end up applying it in robotics or not, depending on your own decisions later. If you go after learning robotics, you &lt;em&gt;may&lt;/em&gt; end up working on its AI or not, depending on your own decisions later.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My recommendation would therefore be to think of possibilities. For example, if you are interested in AI in robotics now, what would happen if you lose interest in it in the future? If you are generally interested in algorithmic software, choose AI. If you change your mind about robotics, you still have something to focus on. If you are particularly interested in building real things, go with robotics. If you change your mind about AI later, you can still work on robots.&lt;/p&gt;&#xA;" OwnerUserId="158" LastActivityDate="2014-01-08T13:02:19.997" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2267" PostTypeId="2" ParentId="2264" CreationDate="2014-01-08T16:29:16.260" Score="12" Body="&lt;p&gt;They are different.  They are often used together, but the two are not specifically related.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Artificial Intelligence is a branch of computer science that focuses on solving problems that are traditionally difficult for computers -- tasks that become exponentially or &lt;a href=&quot;http://en.wikipedia.org/wiki/Factorial&quot;&gt;factorially&lt;/a&gt; more complex for each incremental increase in the input.  An example of this would be the &lt;a href=&quot;https://xkcd.com/173/&quot;&gt;XKCD movie seating problem&lt;/a&gt;, which has 120 options for 5 people but 2,432,902,008,176,640,000 options for 20 people.  Another example would be processing the many thousands of points you'd see in a &lt;a href=&quot;http://en.wikipedia.org/wiki/Lidar&quot;&gt;LiDAR&lt;/a&gt; image (like &lt;a href=&quot;http://www.neonnotes.org/wp-content/uploads/2012/05/manhattan-lidar092701.jpg&quot;&gt;this one&lt;/a&gt;) in order to build a plan for navigating through an area.  The field of Artificial Intelligence attempts to find decent shortcuts to getting acceptable solutions to these types of problems; it would take far too long to evaluate each possible solution separately then pick the best one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Robotic systems are simply mechanical systems that can measure and react to their environment in the pursuit of some goal.  This could be as simple as &lt;a href=&quot;http://www.youtube.com/watch?v=Hm3p3yFuS6w&quot;&gt;balancing an inverted pendulum&lt;/a&gt;, which requires no AI.  Alternatively, it could be as complicated as &lt;a href=&quot;http://www.youtube.com/watch?v=gy5g33S0Gzo&quot;&gt;recognizing folding towels&lt;/a&gt;, which requires AI to sort out things like &quot;which objects are towels&quot;, &quot;how do I pick them up&quot;, &quot;how do I move in order to fold them&quot;, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In short, AI is one of many tools that a robotics engineer might integrate into a robotic system.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-01-08T16:29:16.260" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2268" PostTypeId="2" ParentId="2262" CreationDate="2014-01-08T16:48:28.607" Score="1" Body="&lt;p&gt;Any WiFi system should be able to report the signal strength (in dBm), but the question will be how quickly you need it to report values and how accurate a measurement you are looking for.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main problem with what you're suggesting is that the relationship between signal strength and distance is not necessarily linear.  Antennas produce an interference pattern which can make the strength change depending on your orientation to them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Radiation_pattern&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/thumb/7/74/Sidelobes_en.svg/200px-Sidelobes_en.svg.png&quot; alt=&quot;antenna lobes&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second problem is that the signal strength can be affected by the environment: humidity, nearby metal, buildings, and even &lt;a href=&quot;http://www.wikihow.com/Boost-Your-Car-Remote-With-Your-Skull&quot; rel=&quot;nofollow noreferrer&quot;&gt;your body&lt;/a&gt; can affect the strength of the signal (if not directly, then through interference).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only way to really do it is by &lt;a href=&quot;http://arstechnica.com/uncategorized/2008/01/where-gps-wont-do-wifi-triangulation-might/&quot; rel=&quot;nofollow noreferrer&quot;&gt;heavily characterizing the wifi signals in the area you want to operate in&lt;/a&gt; and hoping that it doesn't change too much over time.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="-1" LastEditDate="2017-03-10T09:42:49.090" LastActivityDate="2014-01-08T16:48:28.607" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2269" PostTypeId="2" ParentId="2263" CreationDate="2014-01-08T17:04:49.430" Score="5" Body="&lt;p&gt;Generally, for indoor flight, commercial quadcopters do not measure position. Instead, they measure the change in position so as to prevent the quadrotor from moving when it should not. So while accelerometers are not great for maintaining an estimate of the quadrotors position they can be used to stabilize the system, i.e. to determine what commands needed to be executed to maintain their current position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Drift can still be a problem though. As such the data from the accelerometer is usually combined with other sources of information. The Kalman filter is one approach as the presenter touches on around minute 27. Another is to use a complimentary filter which are nice because they require less processing power. Some of the other sources for data for estimating the state of a quadcopter include the gyroscopes, magnometers, barometric pressure sensors, range finders (usually ultrasonic though I have seen IR sensors used), and optical flow via cameras.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With this additional information you could arguably still use an accelerometer for position estimation. I have not seen this done so I cannot speak to its effectiveness though. I suspect other approaches would be better. One method would be to use a laser range finder to localize the robot. Another would be to use a motion capture system as many research facilities do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a side note, beware that GPS gives absolute position $\pm \epsilon$ where $\epsilon$ accounts for error, i.e. give or take some error, as opposed to relative position.&lt;/p&gt;&#xA;" OwnerUserId="177" LastActivityDate="2014-01-08T17:04:49.430" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2270" PostTypeId="2" ParentId="2263" CreationDate="2014-01-08T19:21:29.113" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Is ... GPS data ... fused with the accelerometer data?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, many aircraft use sensor-fusion techniques so both GPS data and accelerometer data effect the estimated X, Y, Z position.&#xA;Often they use a Kalman filter to do the data fusion.&#xA;(  &lt;a href=&quot;/questions/tagged/kalman-filter&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;kalman-filter&amp;#39;&quot; rel=&quot;tag&quot;&gt;kalman-filter&lt;/a&gt;; &lt;a href=&quot;https://robotics.stackexchange.com/questions/277/why-do-i-need-a-kalman-filter&quot;&gt;Why do I need a Kalman filter?&lt;/a&gt; )&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Measuring X,Y,Z accurately for each photo is important for assembling photos into an aerial photographic map. &lt;a href=&quot;http://vterrain.org/Imagery/self.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;(a)&lt;/a&gt; &lt;a href=&quot;http://plane.ardupilot.com/wiki/common-geotagging-images-with-mission-planner/&quot; rel=&quot;nofollow noreferrer&quot;&gt;(b)&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Low-cost GPS receivers typically produce a X,Y,Z position once a second with an accuracy better than 20 meters. That is &quot;good precision&quot; for photographic mapping with a small RC aircraft or finding the destination runway in a manned aircraft. It's pretty much useless for a quadcopter flying in a room or a small field  less than 20 meters on a side.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Some GPS receivers are available that use DGPS and other techniques to get better accuracy, or generate a position many more times per second, or both).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How do ... quadcopters measure positions (X,Y and Z)?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;They usually don't.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My understanding is that most quadcopters aren't doing aerial mapping or fully autonomous motion, so they don't bother calculating XYZ position. &lt;a href=&quot;http://diydrones.com/forum/topics/quadcopter-control-function-layers&quot; rel=&quot;nofollow noreferrer&quot;&gt;(c)&lt;/a&gt; &lt;a href=&quot;http://diydrones.com/forum/topics/how-to-get-xyz-position-from-9dof-imu-output&quot; rel=&quot;nofollow noreferrer&quot;&gt;(d)&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you already know from that video,&#xA;quadcopters use the accelerometers to improve their estimates of the aircraft orientation (its pitch, roll, yaw).&#xA;The quadcopter needs to know the orientation in order to stay right-side-up and to avoid spinning uncontrollably.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How do ... quadcopters measure positions (X,Y and Z)?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The people at the &lt;a href=&quot;https://www.grasp.upenn.edu&quot; rel=&quot;nofollow noreferrer&quot;&gt;GRASP lab at U Penn&lt;/a&gt; measure XYZ position of their quadcopters using lots of expensive motion capture cameras bolted to the walls. They produce lots of really impressive-looking videos.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A few cutting-edge research projects are trying to measure XYZ positions using cameras attached to the quadcopters.&#xA;&lt;a href=&quot;http://savvash.blogspot.com/2012/05/sfly-quadrotors-navigate-outdoors-all.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;(&quot;sFly Quadrotors Navigate Outdoors All By Themselves&quot;)&lt;/a&gt;&#xA;( &lt;a href=&quot;https://robotics.stackexchange.com/questions/1554/track-a-moving-object&quot;&gt;Track a moving object&lt;/a&gt; )&#xA;&lt;a href=&quot;http://www.acceler8or.com/tags/quadcopter/&quot; rel=&quot;nofollow noreferrer&quot;&gt;(&quot;Encouraging Developments In Quadcopters (w. Lots Of Video)&quot;)&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before GPS, commercial aircraft used airport radio beacons to &lt;del&gt;do instrument landing&lt;/del&gt; navigate.&#xA;I see some people talking about related techniques for &lt;a href=&quot;https://robotics.stackexchange.com/questions/256/quadcopter-localization-beacon&quot;&gt;radio beacon localization for quadcopters&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://robotics.stackexchange.com/users/350/ian&quot;&gt;Ian&lt;/a&gt; suggests &lt;a href=&quot;https://robotics.stackexchange.com/questions/1554/track-a-moving-object/1561#1561&quot;&gt;tagging each landmark&lt;/a&gt; with a unique &lt;a href=&quot;http://www.aforgenet.com/articles/glyph_recognition/&quot; rel=&quot;nofollow noreferrer&quot;&gt;augmented reality glyph&lt;/a&gt;.&#xA;Some people find it more practical to use a camera on the quadcopter to detect and estimate relative bearing to a simple red rectangular landing pad.&#xA;&lt;a href=&quot;http://people.ece.cornell.edu/land/courses/eceprojectsland/STUDENTPROJ/2012to2013/ssm92/ssm92_report_201305171020.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;(&quot;Autonomous Quadcopter Docking System&quot;)&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="187" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2014-01-09T01:50:59.957" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2271" PostTypeId="2" ParentId="2263" CreationDate="2014-01-08T20:44:26.120" Score="1" Body="&lt;p&gt;Position measurement is all about dealing with uncertainty.  Entire books have been written on how to estimate good position from uncertain data coming from several sources, so I won't try to summarize that here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general though, what you need will depend a lot on how accurate you need to be.  Getting GPS fixes once per second (5 times per second on some hardware) is great for something like a large boat.  However, 5 fixes per second is pretty bad when you're moving at high speeds in close quarters, like a quadcopter does -- not to mention the (roughly) 20-foot circle of uncertainty in GPS positions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are many position, velocity, and acceleration sensors that you can buy.  Only some of them are practical for any given application, and terribly few of them are good enough to be considered real-time ground-truth by themselves (either operating in tightly controlled environments, or costing you hundreds of thousands of dollars).  So, you need to pick a good mix of sensors so that each one can help keep the inaccuracies of the other sensors in check. This is entirely dependent on your robot and its application; there is no one-size-fits-all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typically, you'd combine a high-accuracy-low-frequency method like GPS (or other triangulation-based scheme) with a moderate-accuracy-high-frequency method like an accelerometer or gyro.  This keeps estimates from drifting too far while giving some reasonable real-time adjustments.  &lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-01-08T20:44:26.120" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2273" PostTypeId="1" AcceptedAnswerId="2296" CreationDate="2014-01-09T01:56:50.623" Score="7" ViewCount="2786" Body="&lt;p&gt;I am having difficulty sustaining a connection between my Raspberry Pi (Model B running &lt;a href=&quot;http://en.wikipedia.org/wiki/Raspbian&quot; rel=&quot;nofollow noreferrer&quot;&gt;Raspbian&lt;/a&gt;) and my Arduino (&lt;a href=&quot;http://arduino.cc/en/Main/ArduinoBoardUno&quot; rel=&quot;nofollow noreferrer&quot;&gt;Uno&lt;/a&gt;) while sending signals from the Raspberry Pi to a &lt;a href=&quot;http://www.pololu.com/product/2149&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;title here&quot;&gt;continuously rotating servo&lt;/a&gt; (PowerHD AR- 3606HB Robot Servo) via Python. I'm not sure if there is a more efficent way of sending servo instructions via Python to the Arduino to rotate the servo. I'm attempting to communicate signals from the Raspberry Pi to the Arduino via USB using what I believe is considered a &quot;digital Serial connection&quot;. My current connection:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;Wireless Xbox 360 Controller&#xA;-&amp;gt;&#xA;Wireless Xbox 360 Controller Receiver&#xA;-&amp;gt;&#xA;Raspberry Pi&#xA;-&amp;gt;&#xA;Externally Powered USB Hub&#xA;-&amp;gt;&#xA;Arduino&#xA;-&amp;gt;&#xA;Servo&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/u038Q.png&quot; alt=&quot;Enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Servo connection to Arduino:&#xA;   Signal (Orange) - pin 9&#xA;   Power (Red) - +5 V&#xA;   Ground (Black) - GND&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;On the Raspberry Pi I have installed the following (although not all needed for addressing this problem):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://github.com/Grumbel/xboxdrv&quot; rel=&quot;nofollow noreferrer&quot;&gt;xboxdrv&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://pyserial.sourceforge.net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;pyserial&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://github.com/thearn/Python-Arduino-Command-API&quot; rel=&quot;nofollow noreferrer&quot;&gt;Python-Arduino-Command-API&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.pygame.org/news.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;PyGame&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://github.com/zephod/lego-pi&quot; rel=&quot;nofollow noreferrer&quot;&gt;lego-pi&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://arduino.cc/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Arduino&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The sketch I've uploaded to the Arduino Uno is the &lt;a href=&quot;https://github.com/thearn/Python-Arduino-Command-API/blob/master/sketches/prototype/prototype.ino&quot; rel=&quot;nofollow noreferrer&quot;&gt;corresponding sketch&lt;/a&gt; provided with the Python-Arduino-Command-API. *Again, I'm not positive that this is the best method means of driving my servo from Python to Arduino (to the servo).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the Raspberry Pi, I can see the Arduino is initially correctly connected via USB:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;pi@raspberrypi ~/Python-Arduino-Command-API $ dir /dev/ttyA*&#xA;/dev/ttyACM0  /dev/ttyAMA0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;pi@raspberrypi ~/Python-Arduino-Command-API $ lsusb&#xA;Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp.&#xA;Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub&#xA;Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.&#xA;Bus 001 Device 004: ID 045e:0719 Microsoft Corp. Xbox 360 Wireless Adapter&#xA;Bus 001 Device 005: ID 1a40:0201 Terminus Technology Inc. FE 2.1 7-port Hub&#xA;Bus 001 Device 006: ID 0bda:8176 Realtek Semiconductor Corp. RTL8188CUS 802.11n WLAN Adapter&#xA;Bus 001 Device 007: ID 046d:c52b Logitech, Inc. Unifying Receiver&#xA;Bus 001 Device 008: ID 2341:0043 Arduino SA Uno R3 (CDC ACM)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;From the Raspberry Pi, I'm able to rotate the servo as a test clockwise for one second, counter-clockwise for one second, then stop the servo, with the following Python script:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#!/usr/bin/env python&#xA;from Arduino import Arduino&#xA;import time&#xA;&#xA;board = Arduino(9600, port='/dev/ttyACM0')&#xA;&#xA;board.Servos.attach(9) # Declare servo on pin 9&#xA;board.Servos.write(9, 0) # Move servo to full speed, clockwise&#xA;time.sleep(1) # Sleep for 1 second&#xA;print board.Servos.read(9) # Speed check (should read &quot;0&quot;)&#xA;&#xA;board.Servos.write(9, 180)&#xA;time.sleep(1)&#xA;print board.Servos.read(9) # (Should read &quot;180&quot;)&#xA;&#xA;board.Servos.write(9, 90)&#xA;print board.Servos.read(9)&#xA;board.Servos.detach(9)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The output via the Raspberry Pi terminal reads:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;0&#xA;180&#xA;90&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Although this only performs full-speed in both direction (as well as the calibrated &quot;stop&quot; speed of 90), I have successfully alternated from a full-speed to slower speeds, for example, going from 0 up to 90 in increments of 10.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the Raspberry Pi, I'm able to send input from my Xbox controller to drive the servo with a small custom Python script I've created along with xboxdrv (which works flawlessly with other projects I'm doing):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#!/usr/bin/python&#xA;&#xA;from legopi.lib import xbox_read&#xA;from Arduino import Arduino&#xA;&#xA;# To catch Ctrl+C&#xA;import signal&#xA;import sys&#xA;&#xA;# The deadzone within which we ignore inputs, approximately 1/3 of total possible input&#xA;DEADZONE = 12000&#xA;&#xA;def signal_handler(signal, frame):&#xA;    print &quot;Stopping Wrapper&quot;&#xA;    sys.exit(0)&#xA;&#xA;# Capture Ctrl+C so we can shut down nicely&#xA;signal.signal(signal.SIGINT, signal_handler)&#xA;&#xA;print &quot;Starting Wrapper&quot;&#xA;print &quot;Press Ctrl+C at any time to quit&quot;&#xA;&#xA;board = Arduino(9600, port='/dev/ttyACM0')&#xA;board.Servos.attach(9)&#xA;board.Servos.write(9, 90)&#xA;&#xA;for event in xbox_read.event_stream(deadzone=DEADZONE):&#xA;    print &quot;Xbox event: %s&quot; % (event)&#xA;&#xA;    # If the RB button it's being held, rotate the servo counter-clockwise at full-speed.&#xA;    # When the RB button is released, stop the servo.&#xA;    if(event.key=='RB'):&#xA;        if(event.value&amp;gt;0):&#xA;            board.Servos.write(9, 180)&#xA;            print board.Servos.read(9)&#xA;        else:&#xA;            board.Servos.write(9, 90)&#xA;            print board.Servos.read(9)&#xA;        continue&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This script runs, and I'm able to control the servo using the RB button on my controller. However, &lt;strong&gt;it eventually fails&lt;/strong&gt; - sometimes after minutes, sometimes after seconds (rapid and intermittent input seemingly having no influence on expediting a crash). Input is no longer read by the script, the terminal comes to a halt, the servo freezes on whatever the last command given was (either spinning endlessly or stopped), and I'm forced to &lt;kbd&gt;Ctrl&lt;/kbd&gt; + &lt;kbd&gt;C&lt;/kbd&gt; out of the script. If I check to see if the Arduino is still connected to the Raspberry Pi, it shows that it has reconnected itself to the Raspberry Pi as &quot;ttyACM1&quot; (from /dev/ttyACM0 to /dev/ttyACM1):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;pi@raspberrypi ~/robotarm $ dir /dev/ttyA*&#xA;/dev/ttyACM1  /dev/ttyAMA0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Why does the Arduino reconnect itself? Is there some other way I should be processing this information? Distance to the wireless Xbox receiver is not a factor as all of these pieces are adjacent to one another for testing purposes. It will prove impossible to use this servo as a wheel for my robot if I'm constantly tending to this issue.&lt;/p&gt;&#xA;" OwnerUserId="2564" LastEditorUserId="1906" LastEditDate="2014-01-18T13:37:46.503" LastActivityDate="2014-01-18T13:37:46.503" Title="Unwanted Arduino reconnect: Servo + Arduino + Python (Raspberry Pi)" Tags="&lt;arduino&gt;&lt;raspberry-pi&gt;&lt;otherservos&gt;&lt;python&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2274" PostTypeId="1" AcceptedAnswerId="2275" CreationDate="2014-01-09T05:45:28.850" Score="2" ViewCount="226" Body="&lt;p&gt;I've spent quite some time researching this, but most of my Google search results have turned up academic research papers that are interesting but not very practical.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm working on a target/pattern recognition project** where a robot with a small camera attached to it will attempt to locate targets using a small wireless camera as it moves around a room. The targets will ideally be as small as possible (something like the size of a business card or smaller), but could be (less ideally) as large as 8x10 inches. The targets will be in the form of something easily printable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The pattern recognition software needs to be able to recognize if a target (only one at a time) is in the field of vision, and needs to be able to accurately differentiate between at least 12 different target patterns, hopefully from maybe a 50x50 pixel portion of a 640x480 image.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before playing with the camera, I had envisioned using somewhat small printed barcodes and the excellent &lt;a href=&quot;https://code.google.com/p/zxing/&quot; rel=&quot;nofollow noreferrer&quot;&gt;zxing&lt;/a&gt; library to recognize the barcodes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As it turns out, the camera's resolution is terrible - 640x480, and grainy and not well-focused. &lt;a href=&quot;https://i.imgur.com/MuPibcJ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here is an example still image.&lt;/a&gt; It's not very well-suited for capturing barcodes, especially while moving. I think it could work with 8x10 barcodes, but that's really larger than I'm looking for. (I'm using this particular camera because it is tiny, light, cheap, and includes a battery and wi-fi.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm looking for two things: a suggestion or pointer to an optimal pattern that I could use for my targets, and a software library and/or algorithm that can help me identify these patterns from images. I have NO idea where to start with the right type of pattern so suggestions there would really help, especially if there is a project out there that does something resembling this. I've found &lt;a href=&quot;http://opencv.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;OpenCV&lt;/a&gt; and &lt;a href=&quot;http://robwhess.github.io/opensift/&quot; rel=&quot;nofollow noreferrer&quot;&gt;OpenSIFT&lt;/a&gt; which both seem like potential candidates for software libraries, but neither seemed to have examples of doing the type of recognition I'm talking about. I'm thinking picking the right type of pattern is the big hurdle to overcome here, so any pointers to the optimal type of pattern would be great. Being able to recognize the pattern from all different angles is a must.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So far, my idea is to use patterns that perhaps look &lt;a href=&quot;https://i.imgur.com/jWU875q.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;something like this&lt;/a&gt;, where the three concentric color rings are simply either red, green, or blue - allowing for up to 27 unique targets, or 81 if I use 4 rings. From about 2 feet, the capture of a 3x3 inch target (from my computer screen) &lt;a href=&quot;https://i.imgur.com/JQcmBdv.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;looks like this&lt;/a&gt; which seems like it would be suitable for analysis but I feel like there should be a better type of pattern that would be more compact and easier to recognize - maybe just a plain black and white pattern of some sort with shapes on it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pointers to an optimal approach for this are greatly appreciated.&lt;/p&gt;&#xA;" OwnerUserId="2567" LastEditorUserId="2447" LastEditDate="2014-01-09T15:20:16.123" LastActivityDate="2014-01-09T20:08:06.483" Title="Workable low-resolution object/target recognition pattern and library?" Tags="&lt;software&gt;&lt;computer-vision&gt;&lt;artificial-intelligence&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2275" PostTypeId="2" ParentId="2274" CreationDate="2014-01-09T06:06:10.677" Score="1" Body="&lt;p&gt;Well, one of the things is that computer vision starts at light, lenses and camera, you need good ones. Its not only a question of resolution, it's also a question of sensor size, signal/noise ratio, and good lenses. There's no need for high resolution if your camera has poor optics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So your environment is pretty challenging and there's no certainly that it will works in this way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 640x480 is not to low resolution. I have read a paper that proposed something like your circle, but without the spaces between the rings, so more light reflected and less wasted space, the circles are divided to represent a code of the place.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A simple circle divided into 4 segments with 4 colors would give you 256 distinct codes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More or less this:&lt;br&gt;&#xA;&lt;img src=&quot;https://i.stack.imgur.com/ckiCO.gif&quot; alt=&quot;robot land mark&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The lines are just for exemplification. Lets suppose you use 4 divisions with 4 colors: Red, Green, Blue and White. This would give you $ 4^4=256 $ distinct marks.&#xA;You could detect the circle with edge detect algorithms, and then you have the coordinates to get the color marks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This needs that the orientation of the robot and the mark is always the same, if the robot or camera tilts, or you want to put the mark in any position, just add a first marker.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Adding a &lt;em&gt;redundancy check&lt;/em&gt; to it is good to, as this will help removing false-positive marks.&lt;/p&gt;&#xA;" OwnerUserId="2447" LastEditorUserId="2447" LastEditDate="2014-01-09T20:08:06.483" LastActivityDate="2014-01-09T20:08:06.483" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2276" PostTypeId="2" ParentId="2261" CreationDate="2014-01-09T13:58:33.453" Score="2" Body="&lt;p&gt;I believe the term you are looking for is 'Cross sensitivity'. This term describes the effect that motion in one axis has on the measured motion of other orthogonal axes in accelerometers or gyroscopes&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cross Sensitivity is normally stated by the manufacturer of the sensor and (depending on the quality/type of the sensor) is typically 1-5%. So, for example, a 10 rad/s rotation around the x axis might also give an output of 0.1 rad/s around the y axis and -0.2rad/s around the z axis which will lead to drift in the calculated position/angle of the device&#xA;Also, the cross-sensitivity may be different between different pairs of axes so there may be 3 values Sxy, Syz, Sxz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a perfect sensor the motion around one axis would not affect the others but in a real device there is always some effect.&lt;/p&gt;&#xA;" OwnerUserId="1978" LastActivityDate="2014-01-09T13:58:33.453" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2277" PostTypeId="1" CreationDate="2014-01-09T21:17:09.453" Score="3" ViewCount="127" Body="&lt;p&gt;I've gone through tutorials on how to build circuits and control dc, stepper, and servo motors.  I may not understand everything about them internally, but i have a good basic foundation.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now i'm at a loss for where to go from here.  I'm more interested in learning how to make mechanical devices with them than just the electronics behind the devices.  While i know that they go hand in hand, i want to learn more about the mechanical aspects of using motors.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have in mind several ultimate goal projects that i want to work toward, like home automation, model rc vehicles, autonomous robots, etc...  But i'm sure that there is more to mechanics that i need to learn before i can jump into a project like that.  &lt;strong&gt;&lt;em&gt;He who will learn to fly one day must first learn to stand and walk.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there hobbyist mechanical starter kits or starter projects to learn how to make effective use of electric motors?  I don't necessarily need a specific product endorsement, but rather a general idea of what important concepts to learn and materials / projects to help me learn them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My apologies if this question is too broad.  I can refine it if deemed necessary.&lt;/p&gt;&#xA;" OwnerUserId="2295" LastActivityDate="2014-01-10T23:41:06.013" Title="Once you understand motors, what's the next step?" Tags="&lt;motor&gt;&lt;mechanism&gt;" AnswerCount="1" CommentCount="9" ClosedDate="2014-01-11T00:57:41.267" ContentLicense="CC BY-SA 3.0" />
  <row Id="2279" PostTypeId="1" AcceptedAnswerId="2285" CreationDate="2014-01-10T00:23:22.653" Score="4" ViewCount="1508" Body="&lt;p&gt;at the moment I am creating an android program, that will steer my simple, 3 wheel (2 motors, 1 for balance) robot to move online following the path drawn by user on his screen. The robot is operated through WiFi and has 2 motors that will react on any input signals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Imagine user drawing a path for this robot on smartphone screen. It has aquired all the points on XY axis, every time beginning with (0,0). Still I have no idea, how to somehow &quot;convert&quot; just points, into voltage input to both motors. Signals will be sent in approx. 60Hz connection, so quite fast. Maybe not every single axis point will be taken into consideration, there will be surely some skips, but that is irrelevant, since this path does not have to be done perfectly by the robot, just in reasonable error scale.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do you have any idea on how to make the robot follow defined axis points that overall create a path?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit 10.01:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The voltage will be computed by the robot, so input on both is between -255 and 255 and the velocity should increase or decrease lineary in those borders.&#xA;Additionaly, I would like to solve it as if there were perfect conditions, I don't need any feedback crazy models. Let's assume that all the data is true, no sensors and additional devices. Just XY axis path and required input (ommit wheel slide too).&lt;/p&gt;&#xA;" OwnerUserId="2573" LastEditorUserId="2573" LastEditDate="2014-01-10T12:53:05.823" LastActivityDate="2014-01-10T20:07:50.503" Title="2D path following robot, converting XY axis path to input on wheels" Tags="&lt;wheeled-robot&gt;&lt;wifi&gt;&lt;two-wheeled&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2280" PostTypeId="2" ParentId="2279" CreationDate="2014-01-10T04:32:03.853" Score="1" Body="&lt;h1&gt;for the hardware&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;You don't say what type of motor you use. If it's a DC-brushed type, putting more or less voltage will not necessary linearly alter the speed, in fact if you increase the voltage the relative amount the load on the motor increase the speed won't change. To do a good control you need a feed-back of the motor or wheel speed, or an angle sensor that you can derivate the speed.&#xA;If you use this information, and correct it according to the speed you want.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;for the software&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;What you presumable want to navigation is &lt;a href=&quot;http://en.wikipedia.org/wiki/Dead_reckoning&quot; rel=&quot;nofollow&quot;&gt;Dead reckoning&lt;/a&gt;, but if one wheel slips, the position information will drift and accumulates to the point it turns unusable. So, don't expect the best results with only this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One more &lt;em&gt;simple&lt;/em&gt; solution is to use an &lt;em&gt;electronic compass&lt;/em&gt; so you know to what direction relative to north (deviations should not be a problem), your robot is pointing. This should help at the turns and more straight path, even if some wheel slip occurs, it will close the loop by that. Wheel slip will still affect the distance traveled.&lt;/p&gt;&#xA;" OwnerUserId="2447" LastEditorUserId="2447" LastEditDate="2014-01-10T20:07:50.503" LastActivityDate="2014-01-10T20:07:50.503" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2281" PostTypeId="2" ParentId="284" CreationDate="2014-01-10T05:43:59.277" Score="3" Body="&lt;p&gt;There are two more factors to consider: &lt;strong&gt;Complexity and cost.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Industrial robotic arm like that&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://halcyondrives.com/images/robotic_arm.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;industrial robotic arm http://halcyondrives.com/images/robotic_arm.png&lt;/a&gt;&#xA;&lt;br&gt;&lt;sup&gt;Image from &lt;a href=&quot;http://halcyondrives.com&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://halcyondrives.com&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;normally use torque from the gearbox to direct drive the joint, now think about the torque the gear reduction should support and the size/weight it will be? It simple huge and expensive, their materials need to support a huge torque.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's take your example with the arm fully horizontally extended.&#xA;Lets consider just the load of 6Kg at 1m, you have &lt;span class=&quot;math-container&quot;&gt;$ 600Kgf/cm $&lt;/span&gt;. This is not including the robot arm own weight (easily more 4Kg), and considering &lt;em&gt;just&lt;/em&gt; 1m.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Some solutions industry uses&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Strain Wave Gearing or Harmonic drive&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/8/85/Harmonic_drive_animation.gif&quot; alt=&quot;Strain Wave Gearing or Harmonic drive&quot;&gt;&lt;br&gt;&#xA;&lt;sup&gt;Image from &lt;a href=&quot;http://commons.wikipedia.org&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://commons.wikipedia.org&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To get lighter gear reduction, with high reduction ratios, most uses &lt;a href=&quot;http://en.wikipedia.org/wiki/Harmonic_drive&quot; rel=&quot;nofollow noreferrer&quot;&gt;Strain Wave Gearing or Harmonic drive&lt;/a&gt;. Its low-weight, robust, and according to wikipedia can have a reduction of &lt;span class=&quot;math-container&quot;&gt;$ 200:1 $&lt;/span&gt; (wikipedia says more) where a planetary gear can archive &lt;span class=&quot;math-container&quot;&gt;$ ~ 10:1 $&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But this type of gearing is very expensive and complex.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Springs and counter-weights&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/fBlBO.jpg&quot; alt=&quot;6DOF industrial motor drawing&quot;&gt;&#xA;&lt;br&gt;&lt;sup&gt;Image from &lt;a href=&quot;http://www.globalrobots.ae&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.globalrobots.ae&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other even simple solution is adding counter-weights like you see in the image. This has a linkage to act both on the forearm (I forget the name) and in the arm. Springs will help too, and if mounted on the same axis of the joint but a bit offset, it will put more force as the arm gets more extended.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Low-cost and less complex solutions for the mechanical drive system&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Now for less cost and less complex solutions, what I should think is removing the high torque at the gear drive, so you can use less expensive materials. For a pure electronic drive, this would be a &lt;em&gt;linear actuator&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a variety of linear actuators. But the idea is that it will take less force (depending on what points of the arm it is attached).&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&quot;Nut&quot; and leadscrew type&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/djVOU.jpg&quot; alt=&quot;lead screw linear actuator&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This type of actuator has many sub-types, and that affects efficiency, wear, force, and much more. But in general, they have a high force and a relative slow-to-medium speed (this will again depend on the type, it can be vary fast, like the ones used on some motion platform simulators).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://cfile29.uf.tistory.com/T250x250/195BAD4B4FDB0AF104C30F&quot; rel=&quot;nofollow noreferrer&quot;&gt;6 dof motion platform with electric linear actuators http://cfile29.uf.tistory.com/T250x250/195BAD4B4FDB0AF104C30F&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Electric linear actuators are substituting hydraulic linear actuators at this application, and they need to be fast and strong, some simulators easily weight more than 2 tons.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Belt or chain drive&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;For more speed and other simple method are the belt or chain drive like that&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/Rrveh.jpg&quot; alt=&quot;belt linear drive actuator&quot;&gt;&#xA;&lt;br&gt;&lt;sup&gt;Image from &lt;a href=&quot;http://images.pacific-bearing.com&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://images.pacific-bearing.com&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is of course an industrial made one, this is a DIY one, and it has more for the&#xA;application: (yes it has space for much improvement, but is a good form to show how fast and strong it can be even in this design).&#xA;&lt;a href=&quot;http://bffsimulation.com/linear-act.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://bffsimulation.com/linear-act.php&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This allows you to use less gearing, if a motor could output &lt;span class=&quot;math-container&quot;&gt;$ 50Kgf/cm $&lt;/span&gt; and you use a 2 cm diameter pulley, you would get &lt;span class=&quot;math-container&quot;&gt;$ 50Kgf $&lt;/span&gt; (not considering losses) on the full stroke.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also the bearings at this actuator will need to support most radial forces, where in a &quot;leadscrew and nut&quot; the bearing will take most axial force. So depending on the force you need to use a &lt;a href=&quot;http://en.wikipedia.org/wiki/Thrust_bearing&quot; rel=&quot;nofollow noreferrer&quot;&gt;thrust ball bearing&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="2447" LastEditorUserId="15160" LastEditDate="2019-01-08T21:22:07.980" LastActivityDate="2019-01-08T21:22:07.980" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="2283" PostTypeId="1" CreationDate="2014-01-10T10:51:55.737" Score="0" ViewCount="112" Body="&lt;p&gt;Orrery is a clockwork model of the solar system. I am trying to emulate one in 2D. Now, to emulate, I need to know what goes on inside. Can someone please explain the basic principle behind the clockwork? Or direct me to a resource that will explain all the machinery inside a simple Orrery.&lt;/p&gt;&#xA;" OwnerUserId="2576" LastActivityDate="2014-01-10T16:23:40.077" Title="Emulation of an Orrery" Tags="&lt;motor&gt;&lt;design&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2284" PostTypeId="2" ParentId="2279" CreationDate="2014-01-10T13:55:16.753" Score="1" Body="&lt;p&gt;There are two ways you can approach this problem, open-loop and closed-loop. Open-loop approach should be easier although it will be highly inaccurate. The closed-loop is more complex but it should improve the accuracy. The decision depends on your application and how much time you can spend.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The robot has to follow a requested path drawn by the user. To do that, you &lt;strong&gt;first&lt;/strong&gt; need to track the position and orientation (state) of the robot. In the open-loop approach this is done by blindly predicting the state of the robot based on the input. So for example if you know that the robot is positioned at (0,0) facing at 0 degrees, and the input in the wheels is the same (i.e. drives &quot;straight&quot;) at 1 meter per second, you would expect that after a second, the state of the robot will be (1,0) and still facing at 0 degrees (in reality this wont be the case because of uncertainties but it is just a rough estimation). This is usually done based on a mathematical model of the robot.  For the close-loop approach you also use feedback from the robot. One way to do this is with odometry, i.e. measuring the distance traveled by each wheel and therefore estimating its state using a model, for example the Kinematic Model. State estimation is improved, since you have the model (as in the open-loop) to &quot;predict&quot; the state and then you have the feedback to correct that prediction. For later reference lets define the state estimation as $\hat{x}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The closed-loop approach is certainly more accurate but it mainly depends on what sensors you use. An odometry based estimation will be acceptable for short periods but after that it will diverge and be useless. As always, this depends on your application and tolerance for accuracy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The second step&lt;/strong&gt; is to decide what input is required to send to the motor. This decision is made based on where the robot is i.e. $\hat{x}$ and where it needs to go $x_r$. For this you need a controller that constantly tries to minimize the error $e=\hat{x}-x_r$. So for your example, $x_r$ holds the coordinates of the next point that has to be visited by the robot. A simple controller would be one that:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Rotates the robot until it faces the point $x_r$&lt;/li&gt;&#xA;&lt;li&gt;Moves the robot in a straight line until it reaches the point&lt;/li&gt;&#xA;&lt;li&gt;Load the next point in $x_r$ and go to the first step&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;There are of course more sophisticated controllers which have certain properties but the above should work for your application.&lt;/p&gt;&#xA;" OwnerUserId="1445" LastActivityDate="2014-01-10T13:55:16.753" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="2285" PostTypeId="2" ParentId="2279" CreationDate="2014-01-10T16:10:43.050" Score="1" Body="&lt;p&gt;You're attempting to move a robot along a predefined path without the aid of sensors, so really we just need to convert the list of points into a list of pre-scripted actions.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Convert input points to $({\Delta}x, {\Delta}y)$ pairs&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Convert $({\Delta}x, {\Delta}y)$ pairs to $(\Delta\theta, d)$ pairs&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Convert $(\Delta\theta, d)$ pairs to $(V_{left}, V_{right}, {\Delta}t)$ tuples&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The first step is easy -- simple subtraction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second step is also fairly straightforward: using the pythagorean theorem for the distance and the &lt;code&gt;atan2&lt;/code&gt; function for the angle:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/m7CLt.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/m7CLtm.jpg&quot; alt=&quot;Angle between 2 points&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Then just keep track of the last $\theta$ so you can calculate $\Delta\theta$).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The last step is a little tricky.  You want to convert that set of angles and distances to the left and right wheel voltages, and the time to run them.  This will actually give you &lt;em&gt;two&lt;/em&gt; $(V_{left}, V_{right}, {\Delta}t)$ tuples for every $(\Delta\theta, d)$ pair: one to change the angle, and one to travel the distance.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a given width $w$ between the wheels, the change in the angle (radians) will be based on the movements of the right and left wheel:&#xA;$$&#xA;\Delta \theta = \frac{1}{w} \left( {\Delta}d_{left} - {\Delta}d_{right}\right)&#xA;$$&#xA;You'll have to decide what voltages and $\Delta t$ will produce that change in distance for your robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next, you'll do the same calculation for $d$.  Both motors will use the same voltage to (hopefully) travel the same distance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That should produce a list of times and voltages that approximate the line you drew.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-01-10T16:10:43.050" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2286" PostTypeId="2" ParentId="2283" CreationDate="2014-01-10T16:23:40.077" Score="1" Body="&lt;p&gt;An &lt;a href=&quot;http://en.wikipedia.org/wiki/Orrery&quot; rel=&quot;nofollow&quot;&gt;orrery&lt;/a&gt; just represents the different speeds at which planets orbit the sun by careful selection of gear ratios.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://zeamon.com/wordpress/?page_id=468&quot; rel=&quot;nofollow&quot;&gt;Here is a set of plans that define the gears themselves&lt;/a&gt;, but you could calculate the necessary ratios from the &lt;a href=&quot;http://en.wikipedia.org/wiki/Orbital_period&quot; rel=&quot;nofollow&quot;&gt;orbital period&lt;/a&gt; of each planet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In code, it would be something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;timestep = 0&#xA;while True:&#xA;    timestep = timestep + 1&#xA;    for each planet:&#xA;        theta = (timestep / orbital_period(planet)) % 360&#xA;        draw(planet, theta)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-01-10T16:23:40.077" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2288" PostTypeId="2" ParentId="2277" CreationDate="2014-01-10T23:41:06.013" Score="2" Body="&lt;p&gt;so now you have a good foundation of motors and the similar electro-mechanical actuators.&#xA;You have to learn or you have to build up a concepts of all kinds of mechanical parts needed to do a project on a mechanical robotics.&#xA;see there are so many things nto thr domain of robotics but first you have to go step by step.&#xA;as you have a good knowledge about the motors then go through there ratings and emf and all the ratings stuffs and after that try to know which motors are used for which purposes.&#xA;see for robotics the purpose of using the components should be known to do a project in robotics domain.so after gathering the practical knowledge you may tend to the different parts onto them.Try to design a system especially a mechanical system that may be a simple one &lt;strong&gt;(like a robotic mechanical arm)&lt;/strong&gt; and then try to implement some &lt;strong&gt;gear related and pully related mechanical system&lt;/strong&gt; that will do a specific job for you.or you can interface these kinds of motors like a system of &lt;strong&gt;steering system of a car etc&lt;/strong&gt; or you may try something innovative generator system by using motors you have or you can interface it to a analog circuit to make a low cost mechanical system for a specific requirement.you cann try a different one like you can make an &lt;strong&gt;autonomous system using a microcontroller or microprocessor system&lt;/strong&gt; and interface it with some sensors and after sensing the environment you can control the actuators to get your requirement done!&#xA;hope the suggestions may help you.&lt;/p&gt;&#xA;" OwnerUserId="2581" LastActivityDate="2014-01-10T23:41:06.013" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2289" PostTypeId="1" CreationDate="2014-01-11T14:03:55.197" Score="1" ViewCount="166" Body="&lt;p&gt;My task is to apply forces to control 3-dof parallel manipulator. Forces are applied to linear  actuators, friction is neglected.  End-effector of a robot is supposed to follow generated path; for this example, let it be a simple circle. So far I have made a simplified 3d model of robot and calculated inverse kinematics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/L8b00Iz.png&quot; alt=&quot;3D model of robot&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Promoter of my engineering work don't really know how to do this, but he said that calculating forward dynamics is too complex and i shouldn't go that way. Could you tell me what will be the easiest way to go? &lt;/p&gt;&#xA;" OwnerUserId="2584" LastEditorUserId="350" LastEditDate="2014-01-13T00:51:18.933" LastActivityDate="2014-01-13T00:51:18.933" Title="Dynamics of parallel manipulator" Tags="&lt;force&gt;&lt;dynamics&gt;&lt;manipulator&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2290" PostTypeId="1" CreationDate="2014-01-11T20:58:11.123" Score="2" ViewCount="706" Body="&lt;p&gt;I'm running a kk2.0 + 4 20A Multistar ESCs + 4 EMax GF 2215-20 motors + 4 Slow Fly Props&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After about a foot off the ground, the entire quadcopter starts wobbling like crazy (no auto-level). Any ideas?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'll add some video if needed.&lt;/p&gt;&#xA;" OwnerUserId="2588" LastActivityDate="2014-01-12T16:32:55.620" Title="KK2.0 Quad Stablility" Tags="&lt;quadcopter&gt;&lt;stability&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2291" PostTypeId="2" ParentId="619" CreationDate="2014-01-12T05:07:22.150" Score="1" Body="&lt;p&gt;While my answer does not address reprogramming ESCs, which is the actual question asked, it does turn the motor the opposite direction. And it was hard for me to find a good answer on the web. Google searching can end up here, so I'm posting what I think is helpful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For my ESCs, I have three wires coming out, and to reverse the direction of the motor, all I have to do is swap any two wires that go from the ESC to the motor. It worked for me. YMMV.&lt;/p&gt;&#xA;" OwnerUserId="2589" LastActivityDate="2014-01-12T05:07:22.150" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2292" PostTypeId="2" ParentId="1209" CreationDate="2014-01-12T05:12:04.140" Score="6" Body="&lt;p&gt;Something you can do &lt;strong&gt;WRONG&lt;/strong&gt; to very easily unstabilize a quadcopter is to put the wrong propeller on the wrong motor. There are both pushers and pullers, and depending on the configuration you choose, you need the right type. Its possible you had two of them swapped. When they broke, you got the new ones on properly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://copter.ardupilot.com/wiki/connecting-your-rc-input-and-motors/&quot;&gt;This page&lt;/a&gt; really helped me. &lt;a href=&quot;http://diydrones.com/forum/topics/copter-propellers-rotation-incorrect?commentId=705844%3aComment:1146618&quot;&gt;This one&lt;/a&gt; has some good info too.&lt;/p&gt;&#xA;" OwnerUserId="2589" LastActivityDate="2014-01-12T05:12:04.140" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2293" PostTypeId="2" ParentId="2290" CreationDate="2014-01-12T15:39:00.853" Score="3" Body="&lt;p&gt;Sounds like ground effects. When a plane or helicopter is close to the surface, the aerodynamics change. This distance is usually considered to be the same as wingspan, or rotor diameter for a helicopter. The lift/drag ratios change, the thrust efficiency changes, and the balance can be affected because you are moving on or off a bubble of pressurized air. Also the turbulence can go nuts, placing high demands on the control systems. Slower or unoptimized systems are going to struggle through this zone.&#xA;This effect is also dependent on the surface you are above, with the effect maximized on smooth hard surfaces. If the craft has the same behavior at the same height when hovering over grass or very bumpy surfaces that it does off a smooth piece of plywood on concrete, then the problem is something else. If the transition occurs at a lower height on grass, than you'll have found the problem.&#xA;Check out: &lt;a href=&quot;http://www.skybrary.aero/index.php/Ground_Effect#The_Extent_of_Ground_Effect&quot; rel=&quot;nofollow&quot;&gt;http://www.skybrary.aero/index.php/Ground_Effect#The_Extent_of_Ground_Effect&lt;/a&gt;&#xA;Here is a forum where they had this problem, and were able to reduce it via control settings.&#xA;&lt;a href=&quot;http://forums.openpilot.org/topic/7596-quad-unstable-in-ground-effect/&quot; rel=&quot;nofollow&quot;&gt;http://forums.openpilot.org/topic/7596-quad-unstable-in-ground-effect/&lt;/a&gt;&#xA;and if you want a formal discussion:&#xA;&lt;a href=&quot;http://www.seas.upenn.edu/~dmel/ISER2012_powers.pdf&quot; rel=&quot;nofollow&quot;&gt;http://www.seas.upenn.edu/~dmel/ISER2012_powers.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2402" LastActivityDate="2014-01-12T15:39:00.853" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2294" PostTypeId="2" ParentId="2290" CreationDate="2014-01-12T16:32:55.620" Score="0" Body="&lt;p&gt;Make sure you have set PIDs for your frame correctly. &lt;a href=&quot;http://www.youtube.com/watch?v=YNzqTGEl2xQ&quot; rel=&quot;nofollow&quot;&gt;Here&lt;/a&gt; is a video which explains behavior of quadrotor under various PID settings which will help you tune gains for your frame. Also Make sure your frame is well balanced with CG at center of board. ESCs must to be calibrated so that all 4 motors perform equally. Unbalanced propellers can cause significant vibration hence   make sure propeller are well balanced. Always fly quadrotor to height of more than 1m and then check behavior so that ground effects are negligible. &lt;/p&gt;&#xA;" OwnerUserId="2118" LastActivityDate="2014-01-12T16:32:55.620" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2295" PostTypeId="1" CreationDate="2014-01-13T00:28:14.540" Score="1" ViewCount="90" Body="&lt;p&gt;I am in the process of creating a Power Prediction Model for &lt;a href=&quot;http://en.wikipedia.org/wiki/HUBO&quot; rel=&quot;nofollow&quot;&gt;the Hubo Robot&lt;/a&gt;.&#xA;The Robot has 38 Degrees of Freedom and has a computer some sensors and motor boards. The motors are powered through Motor Boards. All these boards are powered through a main power board that exists at the robots chest.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My model should be able to predict the power for any trajectory of the robot. Say for instance if the robot raises its hand from 0 degrees to 180 degrees my model should be able to predict the power.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Heres an idea I came across. My idea was to equate the electrical torque to the mechanical torque of each joint.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For instance if the Right arm pitch moves from 0 to 180 degrees I can do as follows ?&#xA;$mgsin(\theta)= Kt*I$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I am not getting a proper prediction and the current value is way off than what we can read from a software installed in the robot. I know there are losses but even then its off. I was wondering if there are any other approaches or a fault in my approach.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And after I do this I can add all the joint currents for a specific trajectory and then give a estimate for total power consumption.&lt;/p&gt;&#xA;" OwnerUserId="2594" LastEditorUserId="350" LastEditDate="2014-01-23T16:10:27.403" LastActivityDate="2014-01-23T16:10:27.403" Title="Power Model for humanoids" Tags="&lt;brushless-motor&gt;&lt;power&gt;&lt;inverse-kinematics&gt;&lt;motion-planning&gt;&lt;torque&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2296" PostTypeId="2" ParentId="2273" CreationDate="2014-01-13T00:44:30.330" Score="4" Body="&lt;p&gt;I suspect that your Arduino is reseting, by the fact that the stall current of the motor by the product sheet is $800mA$, and you are using the USB power, then Arduino regulator, to supply the motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you are using the USB/Serial converter to make the connection to the Raspberry Pi, when it resets, it can be creating a new &quot;virtual&quot; serial port on the Raspberry Pi, like you are saying.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The USB maximum supply of current is near $500mA$ in this case, but in reality there's more&#xA;than the motor, Arduino, and so on, so its less.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To test it, just disconnect the motor and see if don't reset or create a new &quot;virtual&quot; serial port.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Being the problem (or even if its not) you should power your motor from an external supply capable of suppling the required current under the voltage you want.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The servo was attempting to draw more than 500mA over USB and was triggering the &#xA;  Arduino's USB Overcurrent Protection feature. An appropriate power supply for the &#xA;  Arduino fixed the issue. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I still suggest you to use other power supply to the motor, or use the same power supply but not use the power from the Arduino to supply the motor. This is due that even with an external power supply the Arduino has an power regulator with a $1000mA$ capacity, and also this could put some noise on the ATMega supply. Of course the power supply should be in the motor voltage supply range.&lt;/p&gt;&#xA;" OwnerUserId="2447" LastEditorUserId="2447" LastEditDate="2014-01-13T00:53:29.377" LastActivityDate="2014-01-13T00:53:29.377" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2297" PostTypeId="1" AcceptedAnswerId="2316" CreationDate="2014-01-13T12:14:10.597" Score="13" ViewCount="18608" Body="&lt;p&gt;In continuation of the question I asked here: &lt;a href=&quot;https://robotics.stackexchange.com/questions/2167/quadcopter-instability-with-simple-takeoff-in-autonomous-mode&quot;&gt;Quadcopter instability with simple takeoff in autonomous mode&lt;/a&gt;&#xA;  ...I'd like to ask a few questions about implementing a basic PID for a quadrotor controlled by an APM 2.6 module. (I'm using a frame from 3DRobotics)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've stripped down the entire control system to just two PID blocks, one for controlling roll and another for controlling pitch (yaw and everything else... I'd think about them later).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm testing this setup on a rig which consists of a freely rotating beam, wherein I've tied down two of the arms of the quadrotor. The other two are free to move. So, I'm actually testing one degree of freedom (roll or pitch) at a time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Check the image below: here A, B marks the freely rotating beam on which the setup is mounted.&#xA;&lt;img src=&quot;https://i.stack.imgur.com/CbgYO.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With careful tuning of P and D parameters, I've managed to attain a sustained flight of about 30 seconds. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But by 'sustained', I simple mean a test where the drone ain't toppling over to one side. Rock steady flight is still no where in sight, and more than 30 secs of flight also looks quite difficult. It wobbles from the beginning. By the time it reaches 20 - 25 seconds, it starts tilting to one side. Within 30 secs, it has tilted to one side by an unacceptable margin. Soon enough, I find it resting upside down &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for the PID code itself, I'm calculating the proportional error from a 'complimentary filter' of gyro + accelerometer data. The integral term is set to zero. The P term comes to about 0.39 and the D term is at 0.0012. (I'm not using the Arduino PID library on purpose, just want to get one of my own PIDs implemented here.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Check this video, if you want to see how it works.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=LpsNBL8ydBA&amp;amp;feature=youtu.be&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.youtube.com/watch?v=LpsNBL8ydBA&amp;amp;feature=youtu.be&lt;/a&gt;&#xA;[Yeh, the setup is pretty ancient! I agree. :)]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please let me know what could I possibly do to improve stability at this stage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;@Ian: Of the many tests I did with my setup, I did plot graphs for some of the tests using the reading from the serial monitor. Here is a sample reading of Roll vs 'Motor1 &amp;amp; Motor2 - PWM input' (the two motors controlling the roll):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/rnyIi.png&quot; alt=&quot;Roll vs Motor PWM input&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for the input/output:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Input:&lt;/strong&gt; Roll and pitch values (in degrees), as obtained by a combination of accelerometer + gyro&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt; PWM values for the motors, delivered using the Servo library's motor.write() function&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Resolution&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I resolved the problem. Here's how:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;The crux of the issue lied in the way I implemented the Arduino program. I was using the write() function to update the servo angles, which happens to accept only integer steps in the argument (or somehow responds only to integer input, 100 and 100.2 produces the same result). I changed it to writeMicroseconds() and that made the copter considerably steadier.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I was adding up RPM on one motor while keeping the other at a steady value. I changed this to increase RPM in one motor while decreasing the opposing motor. That kinda keeps the total horizontal thrust unchanged, which might help me when I'm trying to get vertical altitude hold on this thing.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I was pushing up the RPM to the max limit, which is why the quadcopter kept losing control at full throttle. There was no room for the RPM to increase when it sensed a tilt.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I observed that one of the motor was inherently weaker than the other one, I do not know why. I hardcoded an offset into that motors PWM input.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Thanks for all the support.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Source Code:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're interested, here's the source code of my bare-bones PID implementation: &lt;a href=&quot;https://github.com/agnivsen/NoobCopter&quot; rel=&quot;nofollow noreferrer&quot;&gt;PID Source Code&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please feel free to test it in your hardware. Any contributions to the project would be welcome.&lt;/p&gt;&#xA;" OwnerUserId="1949" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2014-05-22T05:33:16.957" Title="Quadcopter PID tuning" Tags="&lt;arduino&gt;&lt;pid&gt;&lt;quadcopter&gt;&lt;stability&gt;" AnswerCount="3" CommentCount="8" FavoriteCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="2298" PostTypeId="1" CreationDate="2014-01-13T18:57:20.743" Score="5" ViewCount="2421" Body="&lt;p&gt;Given a 12' x 12' field (4m x 4m), a reasonably cheap 3-axis gyro sensor and accelerometer, and compass, I plan to design a device capable of tracking its position to sub-centimeter accuracy for a minute of motion or so.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The device has a holonomic drive system, capable of moving any direction at a maximum of about 8mph (3.6m/s), with a maximum acceleration of about 2g's. However, there are some simplifying constraints. For one, the field is nearly flat. The floor is made of a tough foam, so there is slight sinking, but the floor is flat except for a ramp of known angle (to a few degrees). The device will, excepting collisions, not be rising above the floor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Accuracy is preferred over simplicity, so any mathematics required on the software side to improve the system would be welcomed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before I definitively choose accelerometers as the method of position tracking, though, I would like some idea of how much accuracy I could get, and the best ways of doing it.&lt;/p&gt;&#xA;" OwnerUserId="2597" LastActivityDate="2014-01-22T15:20:50.560" Title="How much accuracy could I get position tracking with a 3-axis accelerometer and gyro sensor, and compass, and how would I do it?" Tags="&lt;kinematics&gt;&lt;accelerometer&gt;&lt;machine-learning&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2299" PostTypeId="1" CreationDate="2014-01-14T01:49:35.800" Score="3" ViewCount="259" Body="&lt;p&gt;I am a Computer Science student entering my last year of college. I'm pretty sure Robotics is what I want to eventually be doing based on my interests in AI and embedded systems. I've seen a lot of topics that covers Robotics such as: control theory, signal processing, kinematics, dynamics, 3D simulators, physics engines, AI, Big Data with machine learning. I'm hoping someone can point me in the right direction as to what I should be attempting to study in my interests of Robotics. I am not sure what other topics I have not mentioned that would be relevant. I would like to deal with the software side of Robotics, both AI and none AI.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My other question is about machine learning. I've seen researchers applying machine learning (deep learning/unsupervised learning specifically) to robotics but how do they do this? Is information and data transferred from the internals of the robot to an external computer that does the data processing? Machine learning requires a lot of data to predict. Is this the only way machine learning can be used in robotics (through an external computer)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope someone can touch on some of the things I've mentioned, Thank you.&lt;/p&gt;&#xA;" OwnerUserId="2600" LastEditorUserId="158" LastEditDate="2014-01-14T13:16:32.710" LastActivityDate="2014-01-14T15:38:55.010" Title="Where to start for the software side of Robotics?" Tags="&lt;mobile-robot&gt;&lt;software&gt;&lt;artificial-intelligence&gt;&lt;programming-languages&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="2" ClosedDate="2014-01-14T19:52:26.590" ContentLicense="CC BY-SA 3.0" />
  <row Id="2301" PostTypeId="2" ParentId="2299" CreationDate="2014-01-14T15:38:55.010" Score="1" Body="&lt;p&gt;To answer your first question: if you are looking merely into the software side of robotics, you might consider what aspect of software interests you the most considering the list you posted. One thing to remember in this regard when making a choice is to think on what platforms you could test those hypotheses you would generate while studying and how to set up an experimental verification. Generally speaking, a C language is the most common.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On your second question: machine learning is a vast subject. Personally, the global aspect of learning--leveraging, say, neural networks--is a good experience in itself. Understanding the state-of-the-art in NN programming, as well as following examples is a great start to both your questions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have the interest to program, I would suggest keying into Google &quot;neural networks c#&quot; and visiting CodeProject for examples. C# has the shortest learning curve, I think, and has the most to offer you simply of the volume of people using it.&lt;/p&gt;&#xA;" OwnerUserId="2602" LastActivityDate="2014-01-14T15:38:55.010" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2302" PostTypeId="2" ParentId="2297" CreationDate="2014-01-14T17:04:56.793" Score="3" Body="&lt;p&gt;I'd start by reading over this question: &lt;a href=&quot;https://robotics.stackexchange.com/q/167/350&quot;&gt;What are good strategies for tuning PID loops?&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I had to guess, I'd say you have a problem in the way your complimentary filter is constructed.  With the quadcopter motors off, you should tilt the frame back and forth and see if the roll / pitch values that are reported are actually accurate.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To me, it looks like there is a delay between the input from the accelerometer and the output of your filter -- the oscillation could be explained by late reactions to the input data.  The eventual turning over looks like a possible integration error that accumulates over time -- in other words, while your quadcopter is on its side it actually thinks it's hovering levelly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Update) Regarding your graph, the fact that your motor speeds continue to increase (instead of staying balanced) means you have an error somewhere.  Perhaps your Integral term is growing unbounded, and you should specify a reasonable maximum for it.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2014-01-24T17:05:05.350" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2303" PostTypeId="2" ParentId="2298" CreationDate="2014-01-14T17:18:06.963" Score="4" Body="&lt;p&gt;The mechanics of your vehicle are not extremely relevant here; I will assume that the motion your vehicle induces on the sensors will be within their specifications.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Entire volumes have been written on &quot;sensor fusion&quot;, which is the act of combining measurements from multiple sensors (e.g. your gyro, accelerometer, and compass).  Doing this 100% accurately is impossible, so the goal is always to put some known bound on the error that can accumulate with time.  You will have to research that for yourself, as the best option depends greatly on your (and your CPU's) mathematical abilities.  Here is &lt;a href=&quot;http://hkr.diva-portal.org/smash/get/diva2:475619/FULLTEXT02.pdf&quot; rel=&quot;nofollow&quot;&gt;a document that discusses the development of a sensor fusion system with gyroscope, accelerometer, and compass&lt;/a&gt; so you get an idea of what's involved.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the short term, one thing you can do is begin to characterize each of your sensors -- what is their precision and accuracy versus ground truth?  What sort of delay do you get from their measurements?  This characterization will help you more accurately combine their measurements later.  &lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-01-14T17:18:06.963" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2304" PostTypeId="1" CreationDate="2014-01-14T20:46:01.280" Score="1" ViewCount="1659" Body="&lt;p&gt;I need an app that can do live monitoring of whether each seat in an auditorium is occupied,  so visitors can load the app and see where to sit.    &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The auditorium has a relatively flat ceiling 4m high, and the seats are .5m wide. &#xA;The hardware cost per seat needs to be $5.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm looking for all solutions.  Web cams, preasure sensors, sonars, lasers, arduino, pi, intel edison, anything. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously there cannot be wires that people could trip over.  Sensors on the ceiling could have wired networking.  Sensors on the seat or floor would need to have wireless communication.  sensors on the ceiling would need to consider occlusion by people sitting in the seats (think, if there is an empty spot between 2 people, can the sensor see it as empty)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the end, the data needs to be collected as a simple list of which chairs are occupied/open&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/dGKyO.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Possible solutions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;rasberry pi's on the ceiling every 8 seats with a camera.   &lt;/li&gt;&#xA;&lt;li&gt;pressure sensors under chair legs wired to pi's gpio&lt;/li&gt;&#xA;&lt;li&gt;Drones flying around the auditorium :)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Any ideas?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update (more constraints):&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;auditorium size is 400 seats&lt;/li&gt;&#xA;&lt;li&gt;Installation costs should average 10 chairs per hour(400/10 = 40 hours)  &lt;/li&gt;&#xA;&lt;li&gt;as the picture shows, chairs are cushioned&lt;/li&gt;&#xA;&lt;li&gt;regular maintenance should take no longer than 30 min. per 2-hour event(eg, batteries)&lt;/li&gt;&#xA;&lt;li&gt;hardware should last 100 sessions&lt;/li&gt;&#xA;&lt;li&gt;for auditorium cleaning, it should be possible to &quot;disconnect&quot; and &quot;reconnect&quot; the chairs with 4 hours of labor.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="2608" LastEditorUserId="2608" LastEditDate="2014-01-15T00:00:50.523" LastActivityDate="2014-01-15T04:29:41.507" Title="System for determining occupied seats in an auditorium" Tags="&lt;arduino&gt;&lt;sensors&gt;&lt;raspberry-pi&gt;&lt;computer-vision&gt;" AnswerCount="3" CommentCount="0" ClosedDate="2014-01-29T23:54:49.067" ContentLicense="CC BY-SA 3.0" />
  <row Id="2305" PostTypeId="2" ParentId="2304" CreationDate="2014-01-14T21:47:43.680" Score="1" Body="&lt;p&gt;OK, so the hardware cost per seat is $5. But what is the total cost per seat? What's the total cost for the whole auditorium? In short, what's your budget? Who will maintain this system? What other constraints do you have?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A simple pressure switch can be made for 50 cents, but wiring it might cost $100 per seat, so you meet the hardware cost constraint, but may fail elsewhere.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, with what little you've told us, the simple solution is to put a pressure plate on each seat, with sensor wires going down into the floor. Then all those sensors can be read by a single computer with a lot of input channels. That could easily be built for a cost of $200 + $5/seat, but I suspect that the installation costs will kill you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want wireless communication, now you have to deal with how to power the thing. Who will make sure all those batteries are working every day, or will they all be changed out at a fixed time?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you use one each of those cheap &lt;a href=&quot;https://www.sparkfun.com/products/10534&quot; rel=&quot;nofollow&quot;&gt;wireless transmitters and receivers&lt;/a&gt; in each seat and a small microcontroller to implement a poll/response mechanism, a battery, sensor and an enclosure, then you might just scrape by for $5/seat in volume.&lt;/p&gt;&#xA;" OwnerUserId="794" LastActivityDate="2014-01-14T21:47:43.680" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2306" PostTypeId="2" ParentId="2304" CreationDate="2014-01-14T23:46:39.253" Score="1" Body="&lt;p&gt;Computer vision would work, but have some error margins like people putting a bag on the other chair. It may be uncomfortable to the people too to, although the cameras could be hidden.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pressure sensors could suffers from a high weight bag too, where computer vision is more affected by area.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's a fixed installation with a cost for that. When you can, use wires! There's then no batteries to worry, no signal problems, no RF pollution, and goes on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you have a relatively high number of seats, just use a small uC from Microchip, Atmel, or what you prefer, that should cost near 1,60 and a differential driver (RS-485 compliant), and use it to read lets say 4 seats sensors. Pass a bus of RS-485 (UTP with 2 pair), and poll the sensors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt; (as OP said that has no way to pass wires in the floor)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you go to computer vision&lt;sup&gt;&lt;strong&gt;note 2&lt;/strong&gt;&lt;/sup&gt; and you said a chair occupied by some object will in fact by considered occupied (and not the say the people to put the bag on the ground and allow space for another people), computer vision could do the job. Just think its not that cheap as you may think. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lets take a 200,00 camera (it should be higher than this, need to check prices and options on your country), thought 20 seats, so 10,00/seat would be more than you can use. You could get a larger area depending on the height of the camera relative to the chairs, but high angle lens does not seems a good option as there will me much distortion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Wiring would have near more or less the cost of the other option. As the cameras require each cable from the hub/switch to the camera, a bus would not be feasible like an RS-485 bus.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;Note 1: You mean nothing of infrastructure for wiring, if there's no way to pass wires, then yes, you should go wireless.&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;Note 2: For computer vision the better is to use RAW cameras (without image compression) and if it's unavoidable to use compression, at least H.264. (An lossless compression would give the same uncompressed image, but that's not easy to find).&#xA;Good optics are very important too, so good focus. As you have a controlled light environment, sensor size could be less important, but not forgettable. Computer vision is not that easy, that's why some projects fails. Just putting any camera with any lens would not to the work for most of the scenarios.&lt;/sup&gt;&lt;/p&gt;&#xA;" OwnerUserId="2447" LastEditorUserId="2447" LastEditDate="2014-01-15T00:18:02.797" LastActivityDate="2014-01-15T00:18:02.797" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="2307" PostTypeId="2" ParentId="2304" CreationDate="2014-01-15T04:29:41.507" Score="1" Body="&lt;p&gt;You are looking for an easy cheap solution.  I doubt there is one.   Each easy solution can be fooled. A camera is going to detect a jacket of bag on a seat, a weight or pressure sensors will get tripped many times.  What if a person &quot;takes&quot; a seat them walk around.  How does your system know a seat is reserved.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think this system will need to use multiple sensors and some &quot;rules of thumb&quot; to make guesses.   You will have to accept that the results will not be perfect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Star  with pressure sensors.  You can wire an entire row together from seat to seat without creating any wire s on the floor.  Then you have boxes mounted on the seats nearest the isle to handle that row.  These boxes will need power.  You will need to run wire down the ales to each isle box.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would back this up with another system perhaps based on vision.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then you can also count people and cross check the totals from the count, pressure and vision systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;OK, one last question?  Why do you care about the cost of the seat sensors.  That will be trivial compared to the engineering and installation costs.&lt;/p&gt;&#xA;" OwnerUserId="2609" LastActivityDate="2014-01-15T04:29:41.507" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2308" PostTypeId="2" ParentId="2167" CreationDate="2014-01-15T05:09:19.427" Score="4" Body="&lt;p&gt;I read the code but it looks like it is for the first attempt where you tried to hover &quot;open loop&quot;  that can't work.   So now you tried a PID control based straight off the raw IMU data.  Tha't better but you are going to need one more step between the two.   Will I say this assuming you are using a low-cost IMU, the kind that just breaks out the chip.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;First off it would be ideal if you could measure the speed of each motor, and not just assume it rotates at a speed proportionate to the commanded value.  Likely it does not.  The BEST way to to place an encoder on the motor shaft that sends a few pluses per revolution.  Then you replace &quot;motor2.write(val)&quot; with something like &quot;motor.setspeed(rotationVelocity); and the set speed method runs a PID loop just ontheat one motor's speed, sending whatever PWM value is required.   OK, lacking an encoder, get a hand held propeller tachometer.  And plot RPM vs PWM for a tried vehicle fixed to a stand at some hight from the ground.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;NEXT YOU NEED TO KNOW HOW TO RELATE RPM TO THRUST.  One problem with yourPID control is it assume PWM value (voltage) is LINEARLY related to force in the vertical direction is is NOT because &#xA;1) If the vehicle is tilted the foxed is no longer down and is smaller be the cosine of the tilt and..&#xA;2) force is NEVER linearly replaced to voltage.  It think(???) there is a cubed relationship the is power cubed = force.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might just kip all the math and measure the force as a function of PWM and make a lookup table.  Better to use encoders and&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You over all PID loop will work much better when have a linear relationship.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next idea:  You CAN make a quad more stable.  What if you tilt the plane of each door inwards just a little.  Each is slightly non-horizonal, now if one side dips it will generate more lift.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Last idea:  The IMU is a noisy device.  The accelerometer has high frequency noise on it becise of random vibrations and the gyro has drift.  The &quot;standard&quot; why to address this is with a Kalman Filter.  The math is not easy but you can find MANY examples of Kalman filters on-line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Summary:&#xA;1) Use good filter model to correct the IMU data.  The raw data is not good.&#xA;2) Create a method (function) that takes llefting force as input then sets the PWM slue as required.&lt;br&gt;&#xA;3) Used a top layer PID to drive the error to zero&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What this does is address the basic flaw of all PID controller, they don't &quot;see&quot; inside the black box.  They don't know the gyro drift and accelerometer is noisy and that PWM has a non-linear relationship to lift.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next you get into moving flight and you need to make your aerodynamic model better to account for the fixed pitch props&lt;/p&gt;&#xA;" OwnerUserId="2609" LastActivityDate="2014-01-15T05:09:19.427" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2309" PostTypeId="2" ParentId="1947" CreationDate="2014-01-15T05:28:52.263" Score="2" Body="&lt;p&gt;You can do what yu want with the standard arduino &quot;Stepper&quot; library.  You are using something called &quot;accelsteper.h&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using the standard one....&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This c-like psudocode will run a motor at some speed for 2000 steps then run and some other speed for 4000 steps and then go back an do it again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;loop{&#xA;setspeed(speed1)&#xA;step(2000)&#xA;setspeed(speed2)&#xA;step(4000)&#xA;}&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Look here for details on the standard stepper library&#xA;&lt;a href=&quot;http://arduino.cc/en/Reference/Stepper&quot; rel=&quot;nofollow&quot;&gt;http://arduino.cc/en/Reference/Stepper&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Get this to work FIRST.  then make it nicer if you need to.  for example place a half way between speed in there like this &quot;set speed((speed1+speed2)/2). and run a few steps.&lt;/p&gt;&#xA;" OwnerUserId="2609" LastActivityDate="2014-01-15T05:28:52.263" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2310" PostTypeId="2" ParentId="1927" CreationDate="2014-01-15T05:37:23.203" Score="0" Body="&lt;p&gt;Are you asking about the gyroscopic effect?  What they call &quot;gyroscopic precession&quot;.  Then Google that term &quot;gyroscopic precession&quot; and you can find some ways to calculate it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But in practical terms your 0.5Kg wheel moving at 1 rpm will show very lift of this effect unless the diameter is huge.  For normal size wheels at 1 rpm you can ignore this.&lt;/p&gt;&#xA;" OwnerUserId="2609" LastActivityDate="2014-01-15T05:37:23.203" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2312" PostTypeId="2" ParentId="1844" CreationDate="2014-01-15T09:59:32.783" Score="6" Body="&lt;p&gt;Using a so-called optical flow sensor is the best way to help with holding the horizontal (i.e. in X-Y plane) position. I don't see any reason why you couldn't do the same for vertical control, although a sonar is probably easier and cheaper to use for this (likewise, if you are indoors, you could use 2 sonars for the horizontal position as well)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;People used to hack the sensors of optical mice to achieve this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://makezine.com/2007/12/15/using-an-optical-mouse-for-rob/&quot; rel=&quot;noreferrer&quot;&gt;http://makezine.com/2007/12/15/using-an-optical-mouse-for-rob/&lt;/a&gt;&#xA;&lt;a href=&quot;http://areciv.com/index.php?aid=18&quot; rel=&quot;noreferrer&quot;&gt;http://areciv.com/index.php?aid=18&lt;/a&gt;&#xA;&lt;a href=&quot;http://home.roadrunner.com/~maccody/robotics/croms-1/croms-1.html&quot; rel=&quot;noreferrer&quot;&gt;http://home.roadrunner.com/~maccody/robotics/croms-1/croms-1.html&lt;/a&gt;&#xA;&lt;a href=&quot;http://home.roadrunner.com/~maccody/robotics/mouse_hack/mouse_hack.html&quot; rel=&quot;noreferrer&quot;&gt;http://home.roadrunner.com/~maccody/robotics/mouse_hack/mouse_hack.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some ready-made sensors are available: &lt;a href=&quot;http://www.buildyourowndrone.co.uk/Optical-Flow-Sensor-p/op-fs.htm&quot; rel=&quot;noreferrer&quot;&gt;http://www.buildyourowndrone.co.uk/Optical-Flow-Sensor-p/op-fs.htm&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some explanation on how to use such device with an Arduino can be found here:&lt;a href=&quot;https://code.google.com/p/arducopter/wiki/AC2_OptFlow&quot; rel=&quot;noreferrer&quot;&gt;https://code.google.com/p/arducopter/wiki/AC2_OptFlow&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nowadays, better sensors are out there (but much more expensive) that works in low-light conditions (i.e. indoors) and are even combined with a sonar (as it makes senses to hold altitude in order to get a better/stable optical reading for XY positioning), such as this one:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/S1APo.jpg&quot; alt=&quot;px4flow&quot;&gt;&#xA;&lt;a href=&quot;http://store.3drobotics.com/products/px4flow&quot; rel=&quot;noreferrer&quot;&gt;http://store.3drobotics.com/products/px4flow&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2603" LastEditorUserId="2603" LastEditDate="2014-01-16T08:46:34.223" LastActivityDate="2014-01-16T08:46:34.223" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2313" PostTypeId="2" ParentId="2297" CreationDate="2014-01-15T14:34:13.737" Score="1" Body="&lt;p&gt;Well there could be a number of things going on here...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) Are your reported angles correct? noisy? You can easily check that by manually tilting your quad and monitoring the values coming out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) your own PID implementation has a bug. You could use the trusted implementation out there to check your code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3) Props, motors mounted the wrong way round.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;4) ...&lt;/p&gt;&#xA;" OwnerUserId="2603" LastActivityDate="2014-01-15T14:34:13.737" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2314" PostTypeId="2" ParentId="2167" CreationDate="2014-01-15T14:55:45.973" Score="2" Body="&lt;p&gt;I can see several mistakes in your approach.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The biggest red flag for me is that you are treating the motors as individually-controlled PIDs when in fact they need to work in pairs.  I'm talking about this line that you posted:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;motor1.write((int)(val + (kP * pError1) +(kI * iError1) +(kD * dError1)));  //front left&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The output of your PID should be the desired roll or pitch force -- the correction to the current pitch or roll vs what is desired.  The desired roll or pitch force will then be translated into the thrust ratio between the 2 motors that can effect that force.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second problem I see is that you are using a PD controller instead of a PID controller and wondering why it appears to be imbalanced.  The integral term is &lt;em&gt;precisely&lt;/em&gt; what you are missing -- it compensates for any (static) imbalance in the quadcopter itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The third (potential) problem that I see is that you might not be properly mapping the motor speed to the desired thrust -- that relationship may not be linear. &lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-01-15T14:55:45.973" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2315" PostTypeId="1" CreationDate="2014-01-15T16:28:49.267" Score="5" ViewCount="427" Body="&lt;p&gt;I'm trying to get an extended Kalman Filter to work. My System Model is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$ x = \begin{bmatrix}&#xA; lat \\&#xA; long \\&#xA; \theta&#xA;\end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where &lt;em&gt;lat&lt;/em&gt; and &lt;em&gt;long&lt;/em&gt; are latitude and longitude (in degree) and $\theta$ is the current orientation of my vehicle (also in degree).&#xA;In my Prediction Step I get a reading for current speed &lt;em&gt;v&lt;/em&gt;, yaw rate $\omega$ and inclination angle $\alpha$:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$z = \begin{bmatrix}&#xA; v \\&#xA; \alpha\\&#xA; \omega &#xA; \end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I use the standard prediction for the EKF with $f()$ being:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$&#xA;\vec{f}(\vec{x}_{u,t}, \vec{z}_t) = \vec{x}_{u,t} + &#xA; \begin{bmatrix}&#xA;  \frac{v}{f} * \cos(\theta) * \cos(\alpha) * \frac{180 °}{\pi * R_0} \\&#xA;  \frac{v}{f} * \sin(\theta) * \cos(\alpha) * \frac{180 °}{\pi * R_0} * \frac{1}{\cos(lat)} \\&#xA;  \frac{\omega}{f}&#xA; \end{bmatrix}&#xA;$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$f$ being the prediction frequency, $R_0$ being the radius of the earth (modelling the earth as a sphere)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My Jacobian Matrix looks like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$&#xA;C = v \cdot \Delta t \cdot cos(\alpha) \cdot \frac{180}{\pi R_0}&#xA;$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$&#xA;F_J =&#xA;\begin{pmatrix}&#xA;  1 &amp;amp; 0 &amp;amp; -C \cdot sin(\phi) \cdot \frac{1}{cos(lat)} \\&#xA;  -C \cdot sin(\phi) \cdot \frac{sin(lat)}{{cos(lat)}^2} &amp;amp; 1 &amp;amp; C \cdot cos(\phi) \cdot \frac{1}{cos(lat)}\\&#xA;  0 &amp;amp; 0 &amp;amp; 1&#xA;\end{pmatrix}&#xA;$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I have a far higher frequency on my sensors for the prediction step, I have about 10 predictions followed by one update.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the update step I get a reading for the current GPS position and calculate an orientation from the current GPS position and the previous one. Thus my update step is just the standard EKF Update with $h(x) = x$ and thus the Jacobian Matrix to $h()$, $H$ being the Identity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Trying my implementation with testdata where the GPS Track is in constant northern direction and the yaw rate constantly turns west, I expect the filter to correct my position close to the track and the orientation to 355 degrees or so. What actually happens can be seen in the image attached (Red: GPS Position Measurements, Green/blue: predicted positions): &lt;img src=&quot;https://i.stack.imgur.com/KCasT.png&quot; alt=&quot;Red: GPS Position Measurements, Green/blue: predicted positions&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have no Idea what to do about this. I'm not very experienced with the Kalman filter, so it might just be me misunderstanding something, but nothing I tried seemed to work…&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I think:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I poked around a bit: If I set the Jacobian Matrix in the prediction to be the identity, it works really good. The Problem seems to be that $P$ (the covariance Matrix of the system model) is not zero in $P(3,1)$ and $P(3,2)$. My interpretation would be that in the prediction step the Orientation depends on the Position, which does not seem to make sense. This is due to $F_J(2,1)$ not being zero, which in turn makes sense.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone give me a hint where the overcorrection may come from, or what I should look at / google for?&lt;/p&gt;&#xA;" OwnerUserId="2614" LastEditorUserId="10041" LastEditDate="2015-10-08T11:00:30.030" LastActivityDate="2015-10-14T23:55:18.103" Title="Overcorrecting Kalman Filter" Tags="&lt;kalman-filter&gt;&lt;gps&gt;&lt;sensor-fusion&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2316" PostTypeId="2" ParentId="2297" CreationDate="2014-01-15T23:08:28.120" Score="6" Body="&lt;ol&gt;&#xA;&lt;li&gt;It looks like your proportional gain is too high.&lt;/li&gt;&#xA;&lt;li&gt;You seem to be constantly increasing RPM on one motor while locking in the other one to make the system rotate.  This isn't a good control strategy as eventually those are going to both saturate and you will lose control.  Also as time increases your ability to command the system decreases.  So you need a better model of the system.&lt;/li&gt;&#xA;&lt;li&gt;If you deal with #1, and #2 you'll have a more stable system but you may not be happy with the control bandwidth.  To deal with that you need to make your system stiffer which includes getting rid of any lag on the sensor side of things and on the control side of things.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="1584" LastActivityDate="2014-01-15T23:08:28.120" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2317" PostTypeId="2" ParentId="520" CreationDate="2014-01-16T08:46:21.670" Score="1" Body="&lt;p&gt;3D printing a refractive lens is possible using &quot;printoptical technology&quot; by LUXeXceL. It was developed for making perfectly smooth surfaces. With this technology there is no need for post-processing (grinding, polishing / coloring, etc.). &lt;/p&gt;&#xA;" OwnerUserId="2618" LastEditorUserId="177" LastEditDate="2014-01-16T15:26:04.110" LastActivityDate="2014-01-16T15:26:04.110" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2318" PostTypeId="2" ParentId="1344" CreationDate="2014-01-16T11:30:13.913" Score="1" Body="&lt;p&gt;CF is lighter but you definitively need to know your source, many of the inexpensive tubes are quite brittle. In any case I do not recommend drilling holes in the tube use clamps.&#xA;Aluminium is somewhat heavier and will transmit vibration (balance your motors and props) but is readily available cheaper and easier to work with. For a smaller craft I would use aluminium anything over 550 quality carbon &lt;/p&gt;&#xA;" OwnerUserId="2622" LastActivityDate="2014-01-16T11:30:13.913" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2319" PostTypeId="2" ParentId="520" CreationDate="2014-01-16T14:43:05.243" Score="1" Body="&lt;p&gt;One thing to watch out for is that many of the additive or extrusion-based 3D printers will leave small gaps between the beads of plastic that they lay down.  Even if you polish the surface, the interior will be very poor optically.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may want to look at &lt;a href=&quot;http://en.wikipedia.org/wiki/Selective_laser_sintering&quot; rel=&quot;nofollow&quot;&gt;Selective Laser Sintering (SLS)&lt;/a&gt; to create a finished product that is more uniformly solid.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-01-16T14:43:05.243" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2320" PostTypeId="2" ParentId="1712" CreationDate="2014-01-16T22:23:22.123" Score="1" Body="&lt;p&gt;i am a electrician . inrunners and outrunners are not DC motors! they are 3 phase motors like in industry . your speed control takes DC and uses electronics to change the DC into a pulsating DC ,in the shape of a AC 3 phase sine wave .and changes the frequency at your command .this is known as a frequency drive . &#xA;     inrunners spin about 65k rpm . after they get to a larger size they spin 40k rpm . outrunners spin 40k . outrunners put out more than twice the torque . outrunners are more efficient . this means more run time . outrunners dissipate heat faster and do not need cool down time if set up correctly .&#xA;     to pick a outrunner look for one about the same weight pick the highest KV for that frame size , pay attention to the voltage . &#xA;     now you have more than twice the torque . use it . start with twice the amount of teeth on your pinion , or change your spurr and pinion to get half the gear ratio .then go lower until the motor gets worm to the touch. NOT HOT .&#xA;     GOOD LUCK .&lt;/p&gt;&#xA;" OwnerUserId="2624" LastActivityDate="2014-01-16T22:23:22.123" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2321" PostTypeId="1" CreationDate="2014-01-17T13:47:38.040" Score="0" ViewCount="1015" Body="&lt;p&gt;I am using a miniature car and I want to estimate the position. We can not use GPS modules and most of the tracking systems that I saw, are using IMU senson with the GPS module. In our car we are able to find our exact correct location with image processing but for some parts that dont have enough markings we can not do this. So we want to use the IMU as backup for our positioning. so as long as the positioning is close is good for us.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And we are only interested in our 2D position since the car is on a flat ground.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am using a IMU 9DOF sensor and I want to calculate my movement. I have seen some amazing works with IMU for tracking body movements but no code or simple explanation is anywhere about it. So basically I have the reading from accelerometer, gyro and magnetometer. I also have orientation in quarternions. From the device I am getting also the linear acceleration but even when I am not moving it in any direction the values are not 0 which is really confusing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can you please help me how to approach this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance&lt;/p&gt;&#xA;" OwnerUserId="2628" LastActivityDate="2014-01-17T18:21:26.563" Title="Tracking 2D positioning with IMU Sensor" Tags="&lt;sensors&gt;&lt;accelerometer&gt;&lt;gyroscope&gt;" AnswerCount="1" CommentCount="0" ClosedDate="2014-01-20T01:29:25.070" ContentLicense="CC BY-SA 3.0" />
  <row Id="2322" PostTypeId="1" CreationDate="2014-01-17T16:21:13.917" Score="2" ViewCount="1405" Body="&lt;p&gt;I want to make a quadcopter for my final year project and I am willing to use DC motors as the four rotors of the quadcopter. Can any one guide me about the ratings for proper motor selection for my job.&lt;/p&gt;&#xA;" OwnerUserId="2629" LastActivityDate="2014-07-27T14:47:06.023" Title="What can be the rating and specifications of dc motor used for making a quadcopter?" Tags="&lt;quadcopter&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2323" PostTypeId="2" ParentId="2322" CreationDate="2014-01-17T16:37:29.363" Score="1" Body="&lt;p&gt;You'll need to use brushless (as opposed to brushed) motors for a quadcopter:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;see &lt;a href=&quot;https://robotics.stackexchange.com/questions/1627/why-do-quadcopters-use-brushless-motors&quot;&gt;Why do quadcopters use brushless motors&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The motor goes hand in hand with the propellers, so you have to make sure they are compatible for your application, as you'll need to generate enough thrust to get it to fly (so it will depend on the weight):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;see &lt;a href=&quot;https://robotics.stackexchange.com/questions/25/how-to-choose-the-right-propeller-motor-combination-for-a-quadcopter&quot;&gt;How to choose the right propeller/motor combination for a quadcopter?&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2603" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2014-01-17T16:37:29.363" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2324" PostTypeId="1" AcceptedAnswerId="8713" CreationDate="2014-01-17T17:33:12.067" Score="4" ViewCount="4534" Body="&lt;p&gt;I have a 4 wheeled differential drive robot, like the Pioneer 3-AT. There are only two motors, one for left wheels and one for right wheels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to send velocity commands to the robot, I'm using ROS and the standard commands are: [linear_velocity, angular_velocity].&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need to convert them into left and right velocities, from literature if I had 2 wheels I should do this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$v_l = linear_v - \omega * |r|$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$v_r = linear_v + \omega * |r|$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where |r| is the absolute value of the distance from the wheels to the robot &quot;center&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How should I take into account that I have 4 wheels?&lt;/p&gt;&#xA;" OwnerUserId="1777" LastEditorUserId="350" LastEditDate="2014-01-21T17:01:59.957" LastActivityDate="2019-03-10T14:39:15.717" Title="Kinematics of a 4 wheeled differential drive robots" Tags="&lt;wheeled-robot&gt;&lt;inverse-kinematics&gt;&lt;wheel&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2325" PostTypeId="2" ParentId="2321" CreationDate="2014-01-17T18:00:16.240" Score="2" Body="&lt;p&gt;An IMU as any sensor is not perfect and it is affected by errors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In IMUs case there are some accelerometers and gyros. They should be orthogonal each other but for construction constraints they can't really be.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Expensive IMUs come with a calibration matrix which is &quot;personal&quot; for each device, and here is why of the extra costs. So someone should calibrate it before use it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IMUs are affected by many others things like magnetic fields as example.&#xA;This is another reason for why you won't never read a zero value if the IMU is not moving.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All these error affect the pose estimation since they read accelerations you have to perform a double integration of the value to reach a pose. Double integration of an error make it error^2 (for a simple constant error due to bad calibration).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can suggest you to search the web for &quot;pose estimation algorithm&quot; as keywords or go to &lt;a href=&quot;http://wiki.ros.org/Sensors/Pose%20Estimation&quot; rel=&quot;nofollow&quot;&gt;ROS&lt;/a&gt; that maybe have something ready for your IMU.&lt;/p&gt;&#xA;" OwnerUserId="1777" LastEditorUserId="1777" LastEditDate="2014-01-17T18:21:26.563" LastActivityDate="2014-01-17T18:21:26.563" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2326" PostTypeId="1" AcceptedAnswerId="2366" CreationDate="2014-01-18T08:25:38.050" Score="1" ViewCount="155" Body="&lt;p&gt;I'm simulating a sensor in 3D. The sensor should determine ($p, \theta, \phi$) from the origin  where $\theta$ is the rotation about z-axis and $\phi$ is the rotation about x-axis. The sensor is given position of a point($x, y, z$). This is what I did&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    p = sqrt(x^2 + y^2 + z^2);&#xA;theta = acos(z/p);   &amp;lt;---- I'm guessing the problem here&#xA;  phi = atan2(y,x);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Now I need to get the Cartesian coordinates ($x',y',z'$). This is what I did&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    [p theta phi] = getmeasurement(x, y, z);&#xA;    x' = p*cos(theta)*sin(phi);&#xA;    y' = p*sin(theta)*sin(phi);&#xA;    z' = p*cos(phi); &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The sensor is working fine at the beginning but at a particular point it behaves strangely. I have the state vector to compare it with the measurement. I'm guessing that $\theta$ might be the problem. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Edit: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm sorry for this mistake. The aforementioned calculations based on the following picture&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/BYMzR.png&quot; alt=&quot;spherical Coordinates&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, the point will rotate first about z-axis ($\theta$) and then rotate about x-axis ($\phi$)&lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="2155" LastEditDate="2014-01-18T23:36:43.700" LastActivityDate="2014-01-24T23:16:17.320" Title="problem with simulated sensor in Matlab?" Tags="&lt;sensors&gt;&lt;sensor-error&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2327" PostTypeId="2" ParentId="2326" CreationDate="2014-01-18T23:04:50.330" Score="1" Body="&lt;p&gt;Your first set of formulas are calculating the spherical coordinates for the sensor which are different from the angles of rotation around the x-axis (which you have called $\phi$) and the y-axis (which you have called $\theta$)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When using the formulas for converting cartesian coordinates to spherical coordinates you  end up with $\phi$ as the rotation about the x-axis and $\theta$ as the angle between the vector to the x,y,z location and the z-axis (the polar angle)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the calculation with $\theta$ is correct it just isn't calculating what you thought.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem you have isn't with any of that though, it is with the calculation of z', the formula should be&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;z' = p*cos(theta);    &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="1978" LastActivityDate="2014-01-18T23:04:50.330" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2328" PostTypeId="2" ParentId="1712" CreationDate="2014-01-20T02:23:13.360" Score="1" Body="&lt;p&gt;There is no difference in between them. Motors are categorized by type (brushed or brushless), size, kv rating and the number of poles. The size and kv rating are usually what determine what application it can be used in.&lt;/p&gt;&#xA;" OwnerUserId="2641" LastActivityDate="2014-01-20T02:23:13.360" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2330" PostTypeId="1" AcceptedAnswerId="2334" CreationDate="2014-01-20T02:46:22.127" Score="0" ViewCount="758" Body="&lt;p&gt;I have a quadcopter equipped with PX4FMU board. You may download its datasheet from &lt;a href=&quot;http://pixhawk.org/_media/modules/px4fmu-manual-v1.6.pdf&quot; rel=&quot;nofollow&quot;&gt;HERE&lt;/a&gt;.&#xA;I wonder whether it is possible to program the quadcopter to autonomously follow a path like circular motion without any human interference. Are the built-in sensors enough for this task?&#xA;I also wonder how accurate the built-in GPS is? I read that it gives coordinates with a radius of 5m as error.&lt;/p&gt;&#xA;" OwnerUserId="2533" LastActivityDate="2015-12-27T03:27:36.163" Title="Is it possible to achieve fully autonomous route following using PX4FMU module?" Tags="&lt;quadcopter&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2331" PostTypeId="1" CreationDate="2014-01-20T02:49:57.287" Score="-4" ViewCount="91" Body="&lt;p&gt;My question is very broad. However I would like a complete description to the very last detail in a way that a foreign exchange student would understand. I want to try my best to master the way the Kalman Filter works. Please be as through as you possibly can, and more.&lt;/p&gt;&#xA;" OwnerUserId="2641" LastActivityDate="2014-01-28T04:38:52.443" Title="What is the Kalman Filter in the basics of its aspects?" Tags="&lt;kalman-filter&gt;" AnswerCount="2" CommentCount="1" ClosedDate="2014-01-29T23:37:48.107" ContentLicense="CC BY-SA 3.0" />
  <row Id="2332" PostTypeId="2" ParentId="2264" CreationDate="2014-01-20T08:45:58.130" Score="1" Body="&lt;p&gt;Both, robotics and artificial intelligence, are strongly overlapping fields. But none of them is the subset of the other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, robotics cover hardware design, which normally* does not involve artificial intelligence. On the other hand, artificial intelligence covers a lot of big data fields that aren't connected to robotics, like predicting weather or stock markets. Shared fields of both disciplines are computer vision, natural language processing, path finding, behavior planning, decision making.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am interested in a robotics career, too. The advice I got many times is to dive into artificial intelligence as it is the biggest challenge in robotics today. In most robotic projects, mechanical or electronic design is not the border, but software is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Human kind already solved most hardware problems. Research is still needed for optimizations but in artificial intelligence, there might happen a breakthrough. Even though such a breakthrough is controversial, it still is the more evolving field.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sub&gt;* Using artificial intelligence in hardware design would be interesting though. I don't know if someone already did that.&lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="1054" LastActivityDate="2014-01-20T08:45:58.130" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2333" PostTypeId="2" ParentId="2330" CreationDate="2014-01-20T09:50:39.440" Score="0" Body="&lt;p&gt;I think the answer depends upon the degree of autonomy you require. If, by &quot;fully autonomous route&quot;, you mean just the ability to &quot;autonomously follow a path like circular motion without any human interference&quot;... then yes, that kind of function has been built into quadcopters with even less processing power and with almost identical sensor suite. But if your definition of autonomous route following widens, it is hard to say. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Btw... most GPS typically have an error radius of +/- 5m. &lt;/p&gt;&#xA;" OwnerUserId="1949" LastActivityDate="2014-01-20T09:50:39.440" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2334" PostTypeId="2" ParentId="2330" CreationDate="2014-01-20T18:28:29.090" Score="2" Body="&lt;p&gt;There is everything on that board that you'd need for basic autonomous flight: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A gyro (MPU6000) + an accelerometer (L3GD20) + a compass/magnetometer (HMC5883L) to measure your roll, pitch and yaw angles and a barometric pressure sensor (MS5611) to measure the altitude.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is no GPS sensor though - Only the connector to use easily add one. You're right though, GPS will only give you 5/10 meter resolution (but that's not due to the sensor being in accurate, but rather the technique/method itself - Don't forget that it's using satellite in space (!) to do that measurement, so it's pretty good really!)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What that means is that GPS is only good for large scale flight path. Achieving  autonomous motion like &lt;a href=&quot;http://www.youtube.com/watch?v=w2itwFJCgFQ&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt; is a lot more difficult of course (in the video, they are &quot;cheating&quot;, as they have cameras up in the ceiling watching down and tracking exactly where the quad is located). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The board comes will lots of other goodies such as a buzzer, GPIO ports... but if you don't care about these, you're probably better off getting each sensors separately.&lt;/p&gt;&#xA;" OwnerUserId="2603" LastActivityDate="2014-01-20T18:28:29.090" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2335" PostTypeId="2" ParentId="807" CreationDate="2014-01-20T23:05:30.883" Score="5" Body="&lt;p&gt;You seem to have 2 separate (but related) problems you are trying to solve at once. Let's break down your conundrum into smaller pieces:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;How do I &lt;em&gt;communicate&lt;/em&gt; commands from a slow system (30Hz) to a fast controller (200Hz), and how do I communicate data being received at 200Hz back to my 30Hz thinktank?&lt;/li&gt;&#xA;&lt;li&gt;How do I &lt;em&gt;control&lt;/em&gt; what is happening at 200Hz, when I can only tell the robot what to do at 30Hz?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Item 1 can be solved in hardware as your original question seems to point- you can queue up data at 200Hz and send the packet at 30Hz to your higher level system. You can do this with TCP/IP, or possibly CAN depending on how much data you want to send. Different hardware has different max data rates.  Adding an architecture level like ROS to act as communication bridge/arbiter as suggested in other posts may also help. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Item 2 is a &lt;em&gt;control theory&lt;/em&gt; problem that can't be solved with hardware alone. The SLAM, position and speed determinations, and task determination that you want will need to be smarter since they send and receive information less often. You will probably want &lt;strong&gt;2 control loops&lt;/strong&gt;: 1 at 200Hz and 1 at 30Hz. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's lots of other questions that cover feed-forward, feed-back, and PID control loops, but you specifically asked about scaleability- the way most giant systems scale is by &lt;strong&gt;layering&lt;/strong&gt; control loops and logic so that the minimal necessary information goes across whatever hardware you end up with. For example, your top level controller might only give goal position points and an average goal speed to the lower level one, not change the speed 30 times a second.&lt;/p&gt;&#xA;" OwnerUserId="2002" LastActivityDate="2014-01-20T23:05:30.883" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2336" PostTypeId="1" CreationDate="2014-01-21T00:16:24.260" Score="1" ViewCount="67" Body="&lt;p&gt;I am an aerospace engineer (currently in grad school) and I really want to get into (embedded) electronics.&#xA;But I have this problem:&#xA;I understand the theory fairly well, I took an edX course in circuits and had no problem. I can build projects from the internet. However, I have a very hard hard time connecting the theory with the practical part, understanding why projects are done the way they are done and I have a hard time to design my own projects!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please help!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd appreciate the following:&#xA;-General tips: how did you learn it? How is your workflow? What should I do? Which steps should I take?&#xA;-Books: which hands on books and websites can you recommend? I am looking for books and website that are practical but also explain the why&#xA;-Kits: What kits can you recommend that combine the theory with the practical?&#xA;-Anything you think is important&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you for your time!&lt;/p&gt;&#xA;" OwnerUserId="2649" LastActivityDate="2014-01-21T00:16:24.260" Title="learning (embedded) electronics" Tags="&lt;electronics&gt;" AnswerCount="0" CommentCount="4" ClosedDate="2014-01-22T02:09:46.137" ContentLicense="CC BY-SA 3.0" />
  <row Id="2337" PostTypeId="1" CreationDate="2014-01-21T04:20:58.830" Score="8" ViewCount="469" Body="&lt;p&gt;I'm implementing Monte-Carlo localization for my robot that is given a map of the enviroment and its starting location and orientation. Mine approach is as follows:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Uniformly create 500 particles around the given position&lt;/li&gt;&#xA;&lt;li&gt;Then at each step:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;motion update all the particles with odometry (my current approach is newX=oldX+ odometryX(1+standardGaussianRandom), etc.)&lt;/li&gt;&#xA;&lt;li&gt;assign weight to each particle using sonar data (formula is for each sensor probability*=gaussianPDF(realReading) where gaussian has the mean predictedReading)&lt;/li&gt;&#xA;&lt;li&gt;return the particle with biggest probability as the location at this step &lt;/li&gt;&#xA;&lt;li&gt;then 9/10 of new particles are resampled from the old ones according to weights and 1/10 is uniformly sampled around the predicted position&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Now, I wrote a simulator for the robot's enviroment and here is how this localization behaves:&#xA;&lt;a href=&quot;http://www.youtube.com/watch?v=q7q3cqktwZI&quot;&gt;http://www.youtube.com/watch?v=q7q3cqktwZI&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm very afraid that for a longer period of time the robot may get lost. If add particles to a wider area, the robot gets lost even easier. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I expect a better performance. Any advice?&lt;/p&gt;&#xA;" OwnerUserId="2650" LastActivityDate="2014-06-27T12:18:35.747" Title="Monte-Carlo Localization" Tags="&lt;localization&gt;&lt;motion-planning&gt;&lt;sonar&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2339" PostTypeId="2" ParentId="2331" CreationDate="2014-01-21T16:56:31.373" Score="1" Body="&lt;p&gt;Imagine watching a bird flying behind some trees.  You can observe the bird's speed and direction, and when it passes behind a tree you have an expectation of (approximately) where you will see it appear on the other side.  If the tree is wide, or there are several trees in a group, the bird will be hidden for longer -- and there will be a larger set of possibilities for where you might see the bird again.  A Kalman filter is a more formal version of this process.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because this is a statistical technique, it works best when the possible variations in the path of the bird (or whatever you're filtering) follow a gaussian distribution -- in other words, are completely random.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Those are the very basic concepts, and I'm not sure how I'd explain the rest any better than something you'd find on Google.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-01-21T16:56:31.373" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2340" PostTypeId="2" ParentId="2324" CreationDate="2014-01-21T17:08:03.977" Score="3" Body="&lt;p&gt;If there is no differential between the front and rear wheels, you will be skid-steering.  You will just treat it like a simple 2-wheeled differential drive robot:&#xA;&lt;a href=&quot;https://robotics.stackexchange.com/q/1653/350&quot;&gt;Calculate position of differential drive robot&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It shouldn't change much, but if you really wanted to you could find the robot's center of rotation (e.g. following &lt;a href=&quot;https://robotics.stackexchange.com/q/1369/350&quot;&gt;this question&lt;/a&gt;) and consider a virtual &quot;axle&quot; running through that point on the vehicle.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2014-01-21T17:08:03.977" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2341" PostTypeId="1" CreationDate="2014-01-22T02:44:12.807" Score="5" ViewCount="5640" Body="&lt;p&gt;As far as I can tell, an ultrasonic rangefinder works by reflecting inaudible soundwaves off of objects and timing their return.  But if the object has a flat surface and is angled with respect to the line to the rangefinder, how does it detect that object?  Under what circumstances might it give a false distance or otherwise fail to detect the object?&lt;/p&gt;&#xA;" OwnerUserId="2295" LastEditorUserId="2447" LastEditDate="2014-01-25T17:29:34.307" LastActivityDate="2014-01-25T17:29:34.307" Title="How do ultrasonic range finders detect objects at an angle?" Tags="&lt;sensors&gt;&lt;sonar&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2342" PostTypeId="2" ParentId="2088" CreationDate="2014-01-22T05:14:27.620" Score="1" Body="&lt;p&gt;Well, when you change the value of PWM to 0 in an instant, it will definitely shut the servo down, but it will happen in such a sudden fashion that it could break the servo. I am also partaking in this event as well at my school and we are also had the same problem. We even tried setting the value of PWM to 0 in the end, but it broke two of our servos due to the sudden movement. What I recommend is, which I used with my FTC robot to solve my problem is to decrease the value of the angle instead of the PWM by decreasing the servo angle, or speed, by 1.25 every second. Every second is crucial in the games so it is always helpful to use your time efficiently and as fast as possible.&lt;/p&gt;&#xA;" OwnerUserId="2641" LastActivityDate="2014-01-22T05:14:27.620" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2343" PostTypeId="2" ParentId="1806" CreationDate="2014-01-22T05:23:56.770" Score="3" Body="&lt;p&gt;In my personal experience, I hate Google SketchUp. I Recommend that you use CAD Solidworks. Google SketchUp is not meant for gear design. In Solidworks, you are able to create gears however you may and also make it function on a three-dimensional visual on your computer screen. *I personally recommend this to you with great honestly.&lt;/p&gt;&#xA;" OwnerUserId="2641" LastActivityDate="2014-01-22T05:23:56.770" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2345" PostTypeId="1" CreationDate="2014-01-22T06:16:09.677" Score="0" ViewCount="396" Body="&lt;p&gt;This is actually a very simple question, but I'm lost at the moment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was using a beaglebone black for a school project. It controls a bunch of motors and actuators,etc. We wrote everything in C++, and made libraries of functions. When a main program calls them, the functions run just fine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Recently we have been told to demo our progress so far. The main program is nowhere near done, so we were thinking of some sort of web interface that can execute the complied C++ program on command. We were hoping to get the server hosted on the board, and access it via LAN from other PCs. But I've never done this before and have no idea where to start. Does node.js (with the 'bonescript') going to be of any help? Or is there a simpler way with basic HTML?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I only have a few days to figure it out, so I didn't want to waste time looking at the wrong methods.&lt;/p&gt;&#xA;" OwnerDisplayName="user1243" LastActivityDate="2014-01-22T06:16:09.677" Title="Simple web interface with beaglebone black" Tags="&lt;embedded-systems&gt;" AnswerCount="0" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="2346" PostTypeId="2" ParentId="2341" CreationDate="2014-01-22T07:17:21.860" Score="7" Body="&lt;p&gt;The sound beam is not traveling in a straight line but is leaving the range finder is a multi-lobed pattern. &lt;img src=&quot;https://i.stack.imgur.com/ymsh0.png&quot; alt=&quot;M. Drumheller - Mobile robot localization using sonar&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course we are interested in the main lobe. When the sound wave hits an object, it is reflected in various directions. So some of that energy returns to the sensor and triggers it, therefore measuring the distance. Reflection depends on the material and the shape of the object as well as the angle with respect to the centerline of the range finder. As you pointed out, if this angle is large enough the reported distance will be off, as shown in the following figure&#xA;&lt;img src=&quot;https://i.stack.imgur.com/uNedF.png&quot; alt=&quot;M. Drumheller - Mobile robot localization using sonar&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both figures are from the paper &quot;M. Drumheller - Mobile robot localization using sonar (1987)&quot;&lt;/p&gt;&#xA;" OwnerUserId="1445" LastActivityDate="2014-01-22T07:17:21.860" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2347" PostTypeId="1" CreationDate="2014-01-22T11:03:24.013" Score="2" ViewCount="240" Body="&lt;p&gt;I would like to use a Kuka/abb 6 axis robot and a machine vision system to pick and place a variety of metal drill bits in size ranges from 0.5mm (ascending up 0.5mm per cylinde) to 13mm in metric and then 1/16 of an inch ascending to 9/64 of an inch. The machine would not have to differentiate between the bits, niether drill bit would weight more than 1kg.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Crucially at the beginning and end of the picking and placing I would like to inspect the very tip of the cylinders to be inspected for a 118 degree chamfer on one end of the bit which should be present regardless of drill diameter of length. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am lead to believe that if the drill bits are placed end up on a conveyor belt and always the the same place its relatively low cost but crucially if the kuka 6 axis robot has to find the drill bits then the cost increases dramatically, is this true?&lt;/p&gt;&#xA;" OwnerUserId="2660" LastActivityDate="2014-01-22T11:03:24.013" Title="The costs of using existing 6 axis kuka/abb robots and existing vision systems in picking and placing tasks" Tags="&lt;industrial-robot&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2348" PostTypeId="1" AcceptedAnswerId="2353" CreationDate="2014-01-22T11:42:33.083" Score="2" ViewCount="5562" Body="&lt;p&gt;I want to make a copy of this machine &lt;a href=&quot;https://www.youtube.com/watch?v=16x-_9pcWXU&quot; rel=&quot;nofollow&quot;&gt;Fisher Price Soothing Motions™ Glider&lt;/a&gt; and I'm wondering what motor to use? Simple DC motor with appropriate gearbox (slow rpm) or stepper motor?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.youtube.com/watch?feature=player_embedded&amp;amp;v=KvlVKIuXGuI&quot; rel=&quot;nofollow&quot;&gt;Here&lt;/a&gt; is another instance of this idea.&lt;/p&gt;&#xA;" OwnerUserId="2663" LastEditorUserId="37" LastEditDate="2014-01-25T12:56:23.207" LastActivityDate="2014-01-25T12:56:23.207" Title="What motor to use for reciprocating (reversive) movement" Tags="&lt;motor&gt;&lt;stepper-motor&gt;&lt;mechanism&gt;" AnswerCount="1" CommentCount="15" FavoriteCount="2" ClosedDate="2014-01-29T23:56:37.967" ContentLicense="CC BY-SA 3.0" />
  <row Id="2349" PostTypeId="2" ParentId="2056" CreationDate="2014-01-22T11:50:33.587" Score="1" Body="&lt;p&gt;I had the same problem, so please try this code but with IDE 1.0.0 and baud rate 38400 in serial monitor:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void setup() {&#xA;  Serial1.begin(38400);&#xA;  Serial.begin(38400);&#xA;}&#xA;&#xA;void loop() {&#xA;  if(Serial1.available())&#xA;  {&#xA;    byte a=Serial1.read();&#xA;    Serial.write(a);&#xA;  }&#xA;  if(Serial.available())&#xA;  {&#xA;    byte a=Serial.read();&#xA;    Serial1.write(a);&#xA;  }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="2664" LastEditorUserId="158" LastEditDate="2014-01-22T12:53:15.170" LastActivityDate="2014-01-22T12:53:15.170" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2350" PostTypeId="1" CreationDate="2014-01-22T13:48:08.387" Score="6" ViewCount="765" Body="&lt;p&gt;I have very limited experience with sensors or robotic components at all, and I hope you will excuse the lack of detail in this Question. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to set up posts around my yard with electronic noses that detect dog urine. I want to use this information to make a map of my yard from a dogs perspective. Is it possible with todays technology? What would it cost? There may be information that is very relevant to me, but that I'm not requesting. This is because of lacking insight. If there is something you think I should consider or research, please say so. &lt;/p&gt;&#xA;" OwnerUserId="2666" LastActivityDate="2014-01-22T17:03:42.213" Title="Electronic noses for detecting dog urine" Tags="&lt;sensors&gt;&lt;electronics&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2351" PostTypeId="2" ParentId="2298" CreationDate="2014-01-22T15:20:50.560" Score="5" Body="&lt;p&gt;First, here's what you CAN do with those sensors. Assuming you are not constantly accelerating you can use the accelerometer to know which direction is &quot;down&quot; (the gyro can be used as well for faster updates). If there aren't any magnetic field disturbances, you can also use the compass to know which direction is forward. Usually this is done using either an extended Kalman filter or direct nonlinear algorithms for attitude estimation (sometimes referred to as SO3).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, for position estimation your only option for that set of sensors is to integrate the accelerometer. In an ideal world that is enough, but in the real world all accelerometers have bias error. Over time this will just keep adding error to your position and velocity estimates. You can ballpark the error by&#xA;$$&#xA;e_p = \frac{1}{2} a_b t^2&#xA;$$&#xA;where $e_p$ is the position error, $a_b$ is the accelerometer bias, and $t$ is time. In your case, you can reverse this to estimate that 0.010m error after 60s requires an accelerometer bias of less than 5.6e-6m/s^2, which is not going to be found in low cost accelerometers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To achieve sub-centimeter accuracy you will need another sensor. Usually people will use cameras or laser scanners for this purpose.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2014-01-22T15:20:50.560" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2352" PostTypeId="2" ParentId="2350" CreationDate="2014-01-22T17:03:42.213" Score="4" Body="&lt;p&gt;Is it possible? Certainly. Is it worthwhile? Depends on how sensitive you need it to be.&lt;/p&gt;&#xA;&lt;p&gt;Dog urine has a strong ammonia component (or maybe it's just my dogs that stink so bad) that could be used as the primary analyte to look for. Unfortunately, calibrated electronic ammonia sensors are expensive. I was actually looking into this just a week ago because I raise chickens and I wanted to measure ammonia levels in my chicken coop.&lt;/p&gt;&#xA;&lt;p&gt;Now, there are some inexpensive gas sensors that claim to detect ammonia such as &lt;a href=&quot;http://winsensor.en.alibaba.com/product/469905318-215871181/MQ137_Ammonia_Sensor.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this one&lt;/a&gt;. If you're not concerned about accuracy of the sensor, then it may work. I haven't tried them out yet since I suspect they won't work for my purposes.&lt;/p&gt;&#xA;&lt;p&gt;What it would cost depends on how much you're willing to learn. The cheap sensors themselves are around \$30 each and can be read with about \$5 worth of parts. However, you would have to spend a fair amount of time learning electronics and interfacing to sensors.&lt;/p&gt;&#xA;&lt;p&gt;The industrial ammonia meters are upwards of \$500 each and require replacement of the sensor element frequently. I think one of the poultry farming articles I read on the subject suggested an average yearly total cost of about \$900 per instrument.&lt;/p&gt;&#xA;&lt;p&gt;I don't know what other easily detectable components of dog urine there are, so it's possible that there is a simpler way to detect it.&lt;/p&gt;&#xA;" OwnerUserId="794" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2014-01-22T17:03:42.213" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2353" PostTypeId="2" ParentId="2348" CreationDate="2014-01-22T17:54:40.153" Score="1" Body="&lt;p&gt;A DC or AC gearmotor is all you need. If you're asking about a stepper because of the change in direction, you can use a crank shaft mechanism to convert motion from rotary to reciprocating linear like the one in the above image:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/GKuEh.gif&quot; alt=&quot;a crank mechanism&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="794" LastEditorUserId="2447" LastEditDate="2014-01-24T12:25:30.707" LastActivityDate="2014-01-24T12:25:30.707" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2356" PostTypeId="1" CreationDate="2014-01-23T13:20:06.393" Score="0" ViewCount="10181" Body="&lt;p&gt;I am working on a line follower robot as part of my Microelectronics project, and am confused over what sort of code to use to program the &quot;pic18f&quot; microcontroller I'm using. Can someone give me source code or a layout of the code and what should be in there?&lt;/p&gt;&#xA;" OwnerUserId="2675" LastEditorDisplayName="user2681" LastEditDate="2014-01-24T11:04:41.770" LastActivityDate="2014-01-24T12:54:14.363" Title="Line follower robot program" Tags="&lt;c&gt;&lt;line-following&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2014-01-29T17:26:08.907" ContentLicense="CC BY-SA 3.0" />
  <row Id="2357" PostTypeId="1" AcceptedAnswerId="2358" CreationDate="2014-01-23T14:28:21.837" Score="5" ViewCount="545" Body="&lt;p&gt;robotics enthusiasts!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm a member of a team which has to develop a mobile rescue robot to cooperate with firemen (e.g. on earthquake sites).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem we have is connection of a commander post with the robot. The robot has to enter buildings, so it is desirable that the connection can go through several decimeters of walls and have a reach 50-100 meters. On the other hand, we need to send a lot of data (camera images, point clouds, maps) which can easily eat 10 Mbps or more.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At this time we use 2.4 GHz WiFi for this connection. As for the speed, with direct visibility it seems to be sufficient, but only when a single robot is operating (we can use up to 3 non-overlapping channels, so in theory 3 robots can work together; but usually you have the environment messed up with home routers). We need at least 5 robots to be operating simultaneousely.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We have tried 5 GHz WiFi, but it has problems with penetrating walls, so it can only be used for UAVs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My idea was to use some mobile connection technology like LTE. I found that LTE can be run on 800 MHz, which could be great for the wall penetration performance. I also found that the LTE's theoretical upload speeds (for clients) are 70 Mbps, but nobody says if it is on 2.6 GHz and how would it be changed when running LTE on 800 MHz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Moreover, we cannot rely on some provider's coverage. I have found that you can build your own LTE transmitter for about €2000, which seems to be interesting to us. Maybe it is possible to build it even cheaper. But we think both 2.6 GHz and 800 MHz are regulated frequencies. However, the cooperation with firefighters could persuade local regulators to give an exception to us to setup our own small LTE base station.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And now to the question: do you think such setup would give better results than using WiFi? Or do you know of any other technologies that would help us to either increase the bandwidth or the wall penetration performance? What are their cons and pros?&lt;/p&gt;&#xA;" OwnerUserId="2676" LastActivityDate="2019-01-23T18:24:20.267" Title="Cons and pros of wireless technologies for rescue robot" Tags="&lt;wireless&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2358" PostTypeId="2" ParentId="2357" CreationDate="2014-01-23T17:11:11.757" Score="3" Body="&lt;p&gt;According to &lt;a href=&quot;https://www.ic.gc.ca/eic/site/smt-gst.nsf/vwapj/smse-005-11-bell-apndix3.pdf/$FILE/smse-005-11-bell-apndix3.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this report&lt;/a&gt;, there is a fairly predictable measurement of penetration loss in buildings as a function of radio frequency:&#xA; &lt;a href=&quot;https://i.stack.imgur.com/uRV10.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/uRV10.png&quot; alt=&quot;Measured building penetration loss versus frequency for residential buildings&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based on that, here's a chart I made that lists the wireless technologies found in &lt;a href=&quot;http://books.google.com/books?id=lRa9AQAAQBAJ&quot; rel=&quot;nofollow noreferrer&quot;&gt;Integration of ICT in Smart Organizations&lt;/a&gt; (specifically, the chart on page 207):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/53nIU.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/53nIU.png&quot; alt=&quot;Chart of wireless penetration and data rates&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will probably want a technology toward the upper-right of the chart, but the decision to favor greater speed or greater signal penetration will be yours to make.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another useful resource might be the &lt;a href=&quot;http://en.wikipedia.org/wiki/Spectral_efficiency#Comparison_table&quot; rel=&quot;nofollow noreferrer&quot;&gt;spectral efficiency comparison table on wikipedia&lt;/a&gt;, which gives a more basic value of &quot;kbps per MHz&quot;.  &lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2014-01-25T20:17:06.657" LastActivityDate="2014-01-25T20:17:06.657" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2360" PostTypeId="2" ParentId="2356" CreationDate="2014-01-24T01:41:39.477" Score="1" Body="&lt;p&gt;Here is the &lt;strong&gt;Basic&lt;/strong&gt; source code you could start with. Then you can make it more complex:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#define INA_2   10   // This is the left forward control of the robot, I defined each pwm pin that is connected to the arduino&#xA;#define INB_2   11   // This is the left backward control of the motor, e.g set this high and INB_1 high and others low you will do a reverse&#xA;#define INA_1   5    // This is the right forward control of the motor&#xA;#define INB_1   6    // This is the right backward control of the motor&#xA;&#xA;void setup() {              // This is always the 1st void function in an arduino program&#xA;    Serial.begin(9600);&#xA;    pinMode(INA_2, OUTPUT);      // each pwm pin was placed as an output for the program&#xA;    pinMode(INB_2, OUTPUT);&#xA;    pinMode(INA_1, OUTPUT);&#xA;    pinMode(INB_1, OUTPUT);&#xA;}&#xA;&#xA;void loop() {      // This is a loop shows the sensor and the driver funtion&#xA;    sensor();&#xA;    driver();&#xA;}&#xA;&#xA;void driver()       // This is the driver function, it reads the sensors and drives the motor using pwm signal&#xA;{&#xA;    int lowVal = 60;          // I did set my sensor low value to be 60 note this is not the lowest value the sensor can go&#xA;    int highVal = 300;        // I did set my sensor high value to be 300 note this is not the highest value the sensor can go&#xA;&#xA;    int s0 = analogRead(A0);            // This defines the sensor value s0, it puts the reading of analogread(A0) into s0&#xA;    int s1 = analogRead(A1);&#xA;    int s2 = analogRead(A2);&#xA;    int s3 = analogRead(A3);&#xA;    int s4 = analogRead(A4);&#xA;    int s5 = analogRead(A5);&#xA;&#xA;    ////////////////////////////////////////////////&#xA;    if ((s2 &amp;gt;= highVal) &amp;amp;&amp;amp; (s3 &amp;gt;= highVal))    // This is the 1st if statement of the program, it says if s2 and s3 see's a black line robot should move straight at highest speed&#xA;    {&#xA;        analogWrite(INA_2, 255);&#xA;        analogWrite(INB_2, 0);&#xA;        analogWrite(INA_1, 255);&#xA;        analogWrite(INB_1, 0);&#xA;    }&#xA;    else if ((s3 &amp;gt;= highVal) &amp;amp;&amp;amp; (s4 &amp;gt;= highVal))&#xA;    {&#xA;        analogWrite(INA_2, 200);&#xA;        analogWrite(INB_2, 0);&#xA;        analogWrite(INA_1, 240);&#xA;        analogWrite(INB_1, 0);&#xA;    }&#xA;    else if ((s4 &amp;gt;= highVal) &amp;amp;&amp;amp; (s5 &amp;gt;= highVal))&#xA;    {&#xA;        analogWrite(INA_2, 0);&#xA;        analogWrite(INB_2, 0);&#xA;        analogWrite(INA_1, 200);&#xA;        analogWrite(INB_1, 0);&#xA;    }&#xA;    else if((s1 &amp;gt;= highVal) &amp;amp;&amp;amp; (s2 &amp;gt;= highVal))&#xA;    {&#xA;        analogWrite(INA_2, 200);&#xA;        analogWrite(INB_2, 0);&#xA;        analogWrite(INA_1, 255);&#xA;        analogWrite(INB_1, 0);&#xA;    }&#xA;    else if ((s0 &amp;gt;= highVal) &amp;amp;&amp;amp; (s1 &amp;gt;= highVal))&#xA;    {&#xA;        analogWrite(INA_2, 200);&#xA;        analogWrite(INB_2, 0);&#xA;        analogWrite(INA_1, 0);&#xA;        analogWrite(INB_1, 0);&#xA;    }&#xA;    else if(s0 &amp;gt;= highVal)&#xA;    {&#xA;        analogWrite(INA_2, 200);&#xA;        analogWrite(INB_2, 0);&#xA;        analogWrite(INA_1, 0);&#xA;        analogWrite(INB_1, 0);&#xA;    }&#xA;    else if(s1 &amp;gt;= highVal)&#xA;    {&#xA;        analogWrite(INA_2, 200);&#xA;        analogWrite(INB_2, 0);&#xA;        analogWrite(INA_1, 0);&#xA;        analogWrite(INB_1, 0);&#xA;    }&#xA;    else if(s2 &amp;gt;= highVal)&#xA;    {&#xA;        analogWrite(INA_2, 255);&#xA;        analogWrite(INB_2, 0);&#xA;        analogWrite(INA_1, 255);&#xA;        analogWrite(INB_1, 0);&#xA;    }&#xA;    else if(s3 &amp;gt;= highVal)&#xA;    {&#xA;        analogWrite(INA_2, 255);&#xA;        analogWrite(INB_2, 0);&#xA;        analogWrite(INA_1, 255);&#xA;        analogWrite(INB_1, 0);&#xA;    }&#xA;    else if(s4 &amp;gt;= highVal)&#xA;    {&#xA;        analogWrite(INA_2, 0);&#xA;        analogWrite(INB_2, 0);&#xA;        analogWrite(INA_1, 200);&#xA;        analogWrite(INB_1, 0);&#xA;    }&#xA;    else if(s5 &amp;gt;= highVal)&#xA;    {&#xA;        analogWrite(INA_2, 0);&#xA;        analogWrite(INB_2, 0);&#xA;        analogWrite(INA_1, 200);&#xA;        analogWrite(INB_1, 0);&#xA;    }&#xA;    else if((s0 &amp;lt;= lowVal) &amp;amp;&amp;amp; (s1 &amp;lt;= lowVal) &amp;amp;&amp;amp; (s2 &amp;lt;= lowVal) &amp;amp;&amp;amp; (s3 &amp;lt;= lowVal) &amp;amp;&amp;amp; (s4 &amp;lt;= lowVal) &amp;amp;&amp;amp; (s5 &amp;lt;= lowVal)) // This says if its all white light the robot should make a 180 degree left turn&#xA;    {&#xA;        analogWrite(INA_2, 0);&#xA;        analogWrite(INB_2, 200);&#xA;        analogWrite(INA_1, 200);&#xA;        analogWrite(INB_1, 0);&#xA;    }&#xA;}&#xA;&#xA;void sensor(){               // This function basically prints the sensor reading so you can see what sensors are working.&#xA;    int s0 = analogRead(A0);&#xA;    int s1 = analogRead(A1);&#xA;    int s2 = analogRead(A2);&#xA;    int s3 = analogRead(A3);&#xA;    int s4 = analogRead(A4);&#xA;    int s5 = analogRead(A5);&#xA;&#xA;    Serial.print(&quot;s0 &quot;);    // This prints out the reading for each sensor&#xA;    Serial.print(s0);&#xA;    Serial.print(&quot; s1 &quot;);&#xA;    Serial.print(s1);&#xA;    Serial.print(&quot; s2 &quot;);&#xA;    Serial.print(s2);&#xA;    Serial.print(&quot; s3 &quot;);&#xA;    Serial.print(s3);&#xA;    Serial.print(&quot; s4 &quot;);&#xA;    Serial.print(s4);&#xA;    Serial.print(&quot; s5 &quot;);&#xA;    Serial.print(s5);&#xA;    Serial.print(' ');&#xA;    Serial.println();&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="2641" LastEditorUserId="158" LastEditDate="2014-01-24T12:54:14.363" LastActivityDate="2014-01-24T12:54:14.363" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2361" PostTypeId="1" CreationDate="2014-01-24T03:10:11.613" Score="0" ViewCount="195" Body="&lt;p&gt;I am a beginner in robotics, and I am learning about the Kalman filter. I do not seem to get it, though. I am a mathematician, and so it would be helpful if the Kalman filter could be explained in a mathematical method.&lt;/p&gt;&#xA;" OwnerDisplayName="user2681" LastActivityDate="2014-01-25T13:17:57.083" Title="Explanation of the Kalman Filter" Tags="&lt;kalman-filter&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ClosedDate="2014-01-25T13:20:42.313" ContentLicense="CC BY-SA 3.0" />
  <row Id="2362" PostTypeId="1" AcceptedAnswerId="2368" CreationDate="2014-01-24T03:57:14.450" Score="2" ViewCount="388" Body="&lt;p&gt;I have a steam radiator at home and it has a valve similar to the picture below.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/Ukvhd.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please note that the valve doesn't have grooves on top to attach things to.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to build something to turn it on and off depending on the temperature at certain points in the room.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have that taken care of but cannot find a way to attach a actuator(actuator is the right word in the context I guess?) to turn the valve in both directions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also It is a rented apartment so I would like to avoid making any modifications to the radiator itself.&lt;/p&gt;&#xA;" OwnerUserId="1139" LastEditorUserId="2447" LastEditDate="2014-01-24T16:58:07.080" LastActivityDate="2019-01-07T15:27:43.577" Title="Actuator to control steam valve" Tags="&lt;actuator&gt;&lt;valve&gt;" AnswerCount="2" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="2363" PostTypeId="1" CreationDate="2014-01-24T11:10:42.073" Score="2" ViewCount="495" Body="&lt;p&gt;I have zero experience with robotics, but I need to build a mobile platform for a streaming camera. The idea is that I'll plug in my Android phone into the pan/tilt unit on my wheeled robot and then drive and look around via WiFi. I have already solved all of the software, interface and controller issues, but I would appreciate some advice on how to build the wheeled platform.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My initial idea was to buy a cheap RC car, remove all electronics and replace them with my own. This approach almost worked. I purchased this New Bright F-150 Truck.  The size is good and there is plenty of storage space:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/rofI9.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rofI9m.jpg&quot; alt=&quot;New Bright F-150 Truck&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/QAlFU.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QAlFUm.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I quickly ran into a problem with this thing. I assumed that the front wheel would be turned by some kind of servo. Instead I found this nonsense:&#xA;&lt;img src=&quot;https://i.stack.imgur.com/LFdWC.jpg&quot; alt=&quot;enter image description here&quot;&gt;&#xA;&lt;img src=&quot;https://i.stack.imgur.com/9Ouzy.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That small gear shaft is not driven by a servo - it's a conventional motor, which spins until it is jammed at the extremes of travel. The wheels are straightened when power is removed by a small spring on the other side. This means that there is only one angle at which the wheels can be turned, and that angle is way too small for what I need. So using this RC car will not work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before I start buying more things, I would like to hear some opinions from more experienced people. Am I on the right track? Do I simply need to get a better RC car, or are they all designed like this? Perhaps there are other options that would be more suitable for what I am doing?&lt;/p&gt;&#xA;" OwnerUserId="2684" LastEditorUserId="350" LastEditDate="2014-01-29T19:29:07.260" LastActivityDate="2014-01-29T19:35:05.257" Title="Building a mobile camera platform" Tags="&lt;mobile-robot&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2364" PostTypeId="2" ParentId="2362" CreationDate="2014-01-24T17:10:47.520" Score="1" Body="&lt;p&gt;&lt;strong&gt;If the valve has enough traction with a rubber band&lt;sup&gt;1&lt;/sup&gt;&lt;/strong&gt;, you can use one to control the valve as in the image below.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/881Bl.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To make sure the rubber band doesn't start falling over time due to gravity, you could attach a half-circular plate under the valve, so the rubber band wouldn't slowly slide down as it would rest on that plate. Note that the amount of the pressure on the plate should be very small, since the rubber band is quite stretched to provide enough stretch for rotation, so a not so strong glue might do the trick for that plate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; This both depends on the material it's made of and quite importantly, how much torque is required to turn the valve.&lt;/p&gt;&#xA;" OwnerUserId="158" LastActivityDate="2014-01-24T17:10:47.520" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2365" PostTypeId="1" AcceptedAnswerId="2380" CreationDate="2014-01-24T23:01:56.657" Score="16" ViewCount="3648" Body="&lt;p&gt;I'm struggling with the concept of covariance matrix. &#xA;$$&#xA;\Sigma&#xA;= &#xA;\begin{bmatrix}&#xA;\sigma_{xx} &amp;amp; \sigma_{xy} &amp;amp; \sigma_{x \theta} \\&#xA;\sigma_{yx} &amp;amp; \sigma_{yy} &amp;amp; \sigma_{y \theta} \\&#xA;\sigma_{\theta x} &amp;amp; \sigma_{\theta y} &amp;amp; \sigma_{\theta \theta} \\&#xA;\end{bmatrix}&#xA;$$&#xA;Now, my understanding for $\sigma_{xx}$, $\sigma_{yy}$, and $\sigma_{\theta \theta}$ that they describe the uncertainty. For example, for $\sigma_{xx}$, it describes the uncertainty of the value of x. Now, my question about the rest of sigmas, what do they represent? What does it mean if they are zeros? I can interpret that if $\sigma_{xx}$ is zero, it means I don't have uncertainty about the value of x. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Note, I'm reading &lt;a href=&quot;http://mitpress.mit.edu/books/principles-robot-motion&quot;&gt;Principles of Robot Motion - Theory, Algorithms, and Implementations&lt;/a&gt; by Howie Choset et. al., which states that&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;By this definition $\sigma_{ii}$ is the same as $\sigma_{i}^{2}$ the variance of $X_{i}$. For $i ≠ j$, if $\sigma_{ij} = 0$, then $X_{i}$ and $X_{j}$ are independent of each other.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This may answer my question if the rest of sigmas are zeros however, I'm still confused about the relationship between these variables for example $x$ and $y$. When does this happen? I mean the correlation between them. Or in other words, can I assume them to be zeros?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another book namely &lt;a href=&quot;http://www.amazon.ca/FastSLAM-Scalable-Simultaneous-Localization-Robotics/dp/3540463992&quot;&gt;FastSLAM: A Scalable Method ...&lt;/a&gt; by Michael and Sebastian which states &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The off-diagonal elements of the covariance matrix of this&#xA;  multivariate Gaussian encode the correlations between pairs of state&#xA;  variables.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;They don't mention when the correlation might happen and what does it mean?&lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="2155" LastEditDate="2014-01-27T09:57:14.950" LastActivityDate="2014-04-27T18:04:24.227" Title="covariance matrix in EKF?" Tags="&lt;kalman-filter&gt;&lt;noise&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2366" PostTypeId="2" ParentId="2326" CreationDate="2014-01-24T23:16:17.320" Score="0" Body="&lt;p&gt;I found the problem by switching the following&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    p = sqrt(x^2 + y^2 + z^2);&#xA;  Phi = acos(z/p);   &amp;lt;---- Phi not Theta&#xA;Theta = atan2(y,x);  &amp;lt;---- Theta not Phi&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="2155" LastActivityDate="2014-01-24T23:16:17.320" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2367" PostTypeId="2" ParentId="2361" CreationDate="2014-01-25T00:01:09.030" Score="2" Body="&lt;p&gt;I think you need to understand it from practical perspective. From mathematical point of view, it is matrix multiplications and it is simple. I understood the concept by simulating simple systems in Matlab in the presence of noise. The goal is to estimate the state vector in the presence of noise which makes sense to build such a system that has noise. Check out the &lt;a href=&quot;http://www.joansola.eu/JoanSola/eng/course.html&quot; rel=&quot;nofollow&quot;&gt;INTERACTIVE COURSE ON EKF AND SLAM&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="37" LastEditDate="2014-01-25T13:17:57.083" LastActivityDate="2014-01-25T13:17:57.083" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2368" PostTypeId="2" ParentId="2362" CreationDate="2014-01-25T03:04:07.113" Score="4" Body="&lt;p&gt;Well, being the manipulator removable, so you can attach other thing to the valve shaft, you have so much options.&lt;/p&gt;&#xA;&lt;h1&gt;Mechanical coupling&lt;/h1&gt;&#xA;&lt;p&gt;You could use a coupled rotary actuator to the shaft by the means of a shaft coupler. There's many types, this is a &lt;a href=&quot;https://c10645061.ssl.cf2.rackcdn.com/product/icongo/icg_39276_motorshaftcoupler.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;simple one&lt;/a&gt;, but you probably would not get the actuator axle full aligned with the valve shaft, so a coupler that permits some misalignment is desirable, like these:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.abssac.co.uk/uploads/products/cat_pp651_coupling%20jaw%202.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;rubber shaft coupler http://www.abssac.co.uk/uploads/products/cat_pp651_coupling%20jaw%202.jpg&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Every coupler has its specifications and types of misalignment it will support.&lt;/p&gt;&#xA;&lt;p&gt;You can use a belt or chain transmission too. Then you need to attach a pulley or sprocket to the valve axle.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Chain and sprocket transmission&lt;/strong&gt;&#xA;&lt;br&gt;&lt;img src=&quot;https://www.excelcalcs.com/images/repository/Chain%20Sprocket%20to%20Sprocket%20Center%20Distance.png&quot; alt=&quot;chain and sprocket transmission&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Synchronous belt transmission&lt;/strong&gt;&#xA;&lt;br&gt;&lt;img src=&quot;https://1.bp.blogspot.com/-wR4ZIpSVgik/ThOS7lOlUpI/AAAAAAAAAC0/1GU_5Tc5qsU/s1600/7-5-2011%2B4-26-04%2BPM.png&quot; alt=&quot;Synchronous belt transmission&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;A possible problem with these two option is the lateral force the transmission could put on the valve shaft, as it has not made to support this, it probably will wear. &lt;sup&gt;One way to overcome this is to use a shaft coupler to a bearing with the transmission, so the lateral force will be supported by the bearing.&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;h1&gt;Electro-mechanical actuator&lt;/h1&gt;&#xA;&lt;p&gt;For actuating the valve, you can use a couple of options.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A stepper motor.&lt;/li&gt;&#xA;&lt;li&gt;A DC brushed-motor with a reduction gearbox like this&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/4xbRB.jpg&quot; alt=&quot;DC brushed-motor with gearbox show&quot; /&gt;&#xA;&lt;br&gt;&lt;sup&gt;The gears are show for illustration purposes, they are normally enclosed.&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;There's many types of reduction gearbox too, I will not extend into this on this answer.&lt;/p&gt;&#xA;&lt;p&gt;You probably need some way of knowing the position of the valve shaft (feedback). It can be a multi-turn potentiometer for simple analog output.&lt;/p&gt;&#xA;&lt;h1&gt;RC servo motor&lt;/h1&gt;&#xA;&lt;p&gt;If the valve needs less than 1 turn you can try to use an &lt;strong&gt;RC servo-motor&lt;/strong&gt;, they have a DC-brushed motor, a reduction gearbox, a potentiometer for feedback, and a control circuit. You then feed with the angle position in a signal modulated by a technique know as PWM. Along the fact that the valve will operate at less than a 360° angle, you need to be sure the torque of the &lt;strong&gt;RC servo motor&lt;/strong&gt; will be superior to the needed. Also metal gears and shaft will provide a more robust system, considering the torque.&lt;/p&gt;&#xA;&lt;h1&gt;Assembly&lt;/h1&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/TSwRl.gif&quot; alt=&quot;assembly&quot; /&gt;&#xA;&lt;br&gt;&lt;sup&gt;@DiegoCNascimento the image can be used with credits&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;Here's a final assembly possibility. You should be sure the pipe could support the forces involved with a safety margin, if not, use the &lt;em&gt;wall mount&lt;/em&gt; supports.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Note: some valves main axles will go up or down when rotated, if this is the case the mechanical coupler should support this.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;I do not assume any responsibility by any damage or injure in the mounting of this, the user should have plenty attention he/she is working with high-temperature and high-pressure parts that can pose danger.&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="2447" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2019-01-07T15:27:43.577" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="2369" PostTypeId="2" ParentId="1582" CreationDate="2014-01-25T06:54:01.953" Score="2" Body="&lt;p&gt;I can say positively that 900Mhz china video transmitters can affect 2.4Ghz frequency range. I experienced this first hand and confirmed interference on my spectrum analyzer, it can cause harmonics on the 2.4Ghz but when the tx and rx are close it appears to have an affect on the noise floor too, using those low pass filter don't seem to help close range either.&lt;/p&gt;&#xA;" OwnerUserId="2689" LastEditorUserId="2447" LastEditDate="2014-01-25T21:11:52.820" LastActivityDate="2014-01-25T21:11:52.820" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2371" PostTypeId="1" AcceptedAnswerId="2372" CreationDate="2014-01-25T16:06:12.857" Score="2" ViewCount="992" Body="&lt;p&gt;I'm trying to make a quadcopter move laterally at a certain angle. I've been able to find the proper roll and pitch angles for this (that work with a yaw of 0°); how would I adjust these values to compensate for a different yaw?&lt;/p&gt;&#xA;" OwnerUserId="2290" LastEditorUserId="2447" LastEditDate="2014-01-25T16:42:33.357" LastActivityDate="2014-01-28T03:54:47.257" Title="Compensating for Yaw in Lateral Quadcopter Movement" Tags="&lt;quadcopter&gt;&lt;gyroscope&gt;&lt;movement&gt;&lt;dynamics&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2372" PostTypeId="2" ParentId="2371" CreationDate="2014-01-25T20:43:41.313" Score="3" Body="&lt;p&gt;This is just basic trigonometry; you'll covert your world-relative calculations of roll and pitch ($\phi$ and $\theta$) into vehicle-relative values, based on yaw ($\psi$).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just so we're on the same page, I'm assuming measurements like the following, with roll, pitch, and yaw being zero when levelly flying North:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/8yUpq.gif&quot; alt=&quot;Roll, pitch, and yaw on an airplane&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\phi_{vehicle} = \phi_{world}\cos(\psi) - \theta_{world}\sin(\psi)$$&#xA;$$\theta_{vehicle} = \phi_{world}\sin(\psi) + \theta_{world}\cos(\psi)$$&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2014-01-27T20:03:03.503" LastActivityDate="2014-01-27T20:03:03.503" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2373" PostTypeId="1" CreationDate="2014-01-25T22:56:34.157" Score="3" ViewCount="568" Body="&lt;p&gt;From each step of my vision code I am able to get around 400 coordinates of where the robot thinks the walls are&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to integrate this into Monte-Carlo observation step.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm storing the map of the maze as a set of Line segments. What would be a nice way to implement the sensor update, i.e. given the position (x,y) of the robot what is the probability that it is found there given the above described coordinates of the walls.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The main idea I currently have:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Transform points in polar coordinates. Then for each point (from vision output) compute a ray with this angle and find the first intersection with the maze. Now we have the predicted distance and real distance and we can compute the probability that this measurement is right. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main drawback is that this is slow. For each point from vision output I have to iterate over all line segments to find the one with the closest intersection. The line segments number is around 50. So it gets to O(400*50*Particle number).&lt;/p&gt;&#xA;" OwnerUserId="2650" LastEditorUserId="2650" LastEditDate="2014-01-26T03:07:49.113" LastActivityDate="2019-02-26T10:31:38.560" Title="Using vision for Monte-Carlo localization" Tags="&lt;mobile-robot&gt;&lt;localization&gt;&lt;computer-vision&gt;" AnswerCount="5" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2374" PostTypeId="1" CreationDate="2014-01-26T06:14:09.690" Score="2" ViewCount="374" Body="&lt;p&gt;I want to capture two views of same scene. The scene consists of a set of objects kept on a table. From the two views, I wish to calculate homography for image matching. I want to know what is the maximum angle between the two views  such that the homography can be accurately calculated. Right now, I am capturing the images at around 60 degrees of angle, but unable to construct homography accurately.&lt;/p&gt;&#xA;" OwnerUserId="658" LastEditorUserId="658" LastEditDate="2014-01-30T05:46:24.090" LastActivityDate="2014-02-10T18:08:00.783" Title="Maximum angle between the camera pose to correctly estimate homography" Tags="&lt;kinect&gt;&lt;computer-vision&gt;&lt;stereo-vision&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2375" PostTypeId="2" ParentId="2264" CreationDate="2014-01-26T12:28:06.813" Score="0" Body="&lt;p&gt;&lt;strong&gt;Use of a classification system:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;For input the robot would gauge, sense/sensor, and trip through methodology. (Standard logic studies).&lt;/li&gt;&#xA;&lt;li&gt;For input the AI would gauge, sense/sensor, and apply logical methodology. (Advanced robotics and high level programming). &lt;/li&gt;&#xA;&lt;li&gt;For input the human would gauge, sense, and react through methodology. (Awareness studies).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Continue&lt;/strong&gt;&#xA;(For output... Continue).&#xA;(For process... Continue).&#xA;(For memory... Continue).&#xA;(For feedback... Continue).&#xA;(For control... Continue).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Living examples:&lt;/em&gt;&#xA;Ants although having life would generally trip through methodology too - a little robotic.&#xA;Animals having intelligence would generally apply a set of traits - slightly artificial. The baboon with the hand stuck in the tree when the farmer comes with the gun is a logical exploitation showing incorrect informers being used to master the required reaction. Lower IQ humans can display similar difficulties. At low points in a day you may notice similar difficulties emerging. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;About Results&lt;/em&gt;&#xA;Humans are not all-powerful, and so could equally be outmaneuvered by lesser or higher complexity. The results are therefore organic when a variety of complexities are instantiated into a progression of activity. e.g. Ant's plot out strange pathways!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Extensible Usage of the Academic/Semantic Paradigm&lt;/em&gt;&#xA;A robotic construct could be extended into a bigger set of activities, but doesn't automatically prove itself advanced enough to be considered any kind of intelligence. It is (a topic) noted for large organizational studies, and in studies for comparisons to insect organizations. Simple exploitation not being enough to satisfy the development of higher order intelligence. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;*Not considered in this answer: is the evolved design. As studied in plants and art (for example). &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Research&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Questioning intelligence: &lt;a href=&quot;http://media.johnwiley.com.au/product_data/excerpt/40/11183378/1118337840-238.pdf&quot; rel=&quot;nofollow&quot;&gt;http://media.johnwiley.com.au/product_data/excerpt/40/11183378/1118337840-238.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Examples of complexity defeated by lower order intelligence:&#xA;...hal.archives-ouvertes.fr/hal-00917542/&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Studying evolved performance in limited individuals:&#xA;.../trends/neurosciences//retrieve/pii/S0166223613000039?cc=y &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pretty much find anything by searching: &quot;behavior intelligence + {keyword/specialty}&quot;:&#xA;&lt;a href=&quot;http://scholar.google.com/scholar?q=behavior+intelligence+robot&amp;amp;btnG=&amp;amp;hl=en&amp;amp;as_sdt=0%2C5&amp;amp;as_ylo=2013&quot; rel=&quot;nofollow&quot;&gt;http://scholar.google.com/scholar?q=behavior+intelligence+robot&amp;amp;btnG=&amp;amp;hl=en&amp;amp;as_sdt=0%2C5&amp;amp;as_ylo=2013&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2694" LastEditorUserId="2694" LastEditDate="2014-01-26T14:02:15.280" LastActivityDate="2014-01-26T14:02:15.280" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2376" PostTypeId="1" AcceptedAnswerId="2475" CreationDate="2014-01-26T14:06:19.433" Score="5" ViewCount="280" Body="&lt;p&gt;My application is basically about sound source localization and visual servoing. I selected Kinect as the main hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I already know the basic differences between Kinect for &lt;em&gt;Windows&lt;/em&gt; and Kinect for &lt;em&gt;Xbox&lt;/em&gt;. I cannot access to windows version from my country (no reseller here in Turkey), but the xbox version is there at the stores. I am not sure about problem specific software selection.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found out that the latest Kinect SDK supports sound source localization (and beamforming) using the built-in microphone array. &lt;strong&gt;Can I use that SDK within the xbox version? Or is there another SDK for xbox, having the same support?&lt;/strong&gt; I am not sure because I also read that OpenNI does not provide the best audio API.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I will also apply some processing on image &amp;amp; depth outputs, so I will be using OpenCV. I also want to use Qt for threading, GUI etc. So, another question: &lt;strong&gt;Is it possible to use the microsoft official kinect SDK within another IDE, not Visual Studio?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="2695" LastEditorUserId="2695" LastEditDate="2014-01-27T07:10:49.250" LastActivityDate="2014-02-14T18:45:12.830" Title="Kinect for Xbox: SDK selection" Tags="&lt;kinect&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2377" PostTypeId="2" ParentId="2363" CreationDate="2014-01-26T17:39:20.900" Score="1" Body="&lt;p&gt;You may replace tgis with an RC servo, but be sure to have enough torque and prefer metal gear.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The steering will involves a lot of mechanic constraints.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway, Diego advice is good and you could also keep the actual mechanism.&lt;/p&gt;&#xA;" OwnerUserId="2698" LastEditorUserId="2447" LastEditDate="2014-01-26T21:15:42.863" LastActivityDate="2014-01-26T21:15:42.863" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2378" PostTypeId="2" ParentId="2365" CreationDate="2014-01-27T09:55:49.827" Score="4" Body="&lt;p&gt;To get a feeling for the covariance matrix - without getting into the math details here - its best to start with a 2x2 matrix. Then remember that the covariance matrix is an extension of the concept of variance into the multivariate case. In the 1D case, variance is a statistic for a single random variable. If your random variable has a Gaussian distribution with zero mean, its variance can precisely define the probability density function. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, if you extend this to two variables instead of one, you can differentiate between two cases. If your two variables are independent, which means the outcome of one value has no relation to the other value, its basically the same as in the 1D case. Your $\sigma_{xx}$ and your $\sigma_{yy}$ give the variance of the $x$ and $y$ part of your random variable, and $\sigma_{xy}$ will be zero. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your variables are dependent this is different. Dependent means that there is a relation between the outcome of $x$ and $y$. For example you could have that whenever $x$ is positive, $y$ is in general more likely to also be positive. This is given by your covariance value $\sigma_{xy}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Giving an example for a robot in a 2D case without orientation is a bit contrived, but lets say you have a random component along the travel direction on the $x$-axis and you know that this component also generates a drift on your lateral axis ($y$). This could for example be a faulty wheel. This will result in a rotated uncertainty ellipse. Now for e.g. when you later have something that measures your actual $x$ position, you can estimate the uncertainty distribution on your $y$ component. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A more relevant example is in the 3D case, where usually you have a different uncertainty along the transversal direction compared to the lateral direction. When you rotate your system (so changing $\theta$) this will also rotate your uncertainty ellipse. Note that the actual representation is usually some banana shape, and the Gaussian is only an approximation. In the EKF case its a linearization around the mean.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One really good way to visualize this is to use the concept of the uncertainty ellipse. It basically shows the $1 \sigma$ boundary for a multivariate Gaussian distribution, and can be used to visualize a Covariance matrix. A quick search brought up &lt;a href=&quot;http://demonstrations.wolfram.com/EllipseRepresentingTheConfidenceRegionOfACovarianceMatrix/&quot; rel=&quot;nofollow&quot;&gt;this demo&lt;/a&gt; which will also provide you with some additional insight into how the covariance is built. In essence, the diagonal entries define the extents of the axis, while the off-diagonal entries relate to the rotation of the entire ellipse. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is also true in the 3D case. I would love to get more mathematical here, but maybe some time later.&lt;/p&gt;&#xA;" OwnerUserId="127" LastEditorUserId="127" LastEditDate="2014-01-27T11:32:25.713" LastActivityDate="2014-01-27T11:32:25.713" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2379" PostTypeId="1" AcceptedAnswerId="2385" CreationDate="2014-01-27T15:26:32.803" Score="2" ViewCount="11512" Body="&lt;p&gt;Just like a fish finder finds the depth of the water directly beneath it, Im trying to find a sensor that I can purchase for the Arduino that does the same. would like it to check up to 20 ft at least, with high accuracy, +/- 10 or 15 cm. All the threads and info I've been finding are water level sensors not for water depth. So does anyone know of a sensor like this and where I can find one?&lt;/p&gt;&#xA;" OwnerUserId="2700" LastEditorUserId="2700" LastEditDate="2014-01-27T19:59:46.900" LastActivityDate="2014-01-28T20:20:13.833" Title="Water depth arduino sonar sensor" Tags="&lt;arduino&gt;&lt;microcontroller&gt;&lt;underwater&gt;" AnswerCount="1" CommentCount="7" ClosedDate="2014-02-12T19:20:01.563" ContentLicense="CC BY-SA 3.0" />
  <row Id="2380" PostTypeId="2" ParentId="2365" CreationDate="2014-01-27T16:58:58.233" Score="5" Body="&lt;p&gt;Here is one toy case where off-diagonal elements are non-zero.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider a state vector that includes the position of both the left and right wheels instead of just a single position for the robot. Now if the left wheel has a position of 100m then you know the right wheel will also have a position of roughly 100m (depending on the axle length). As the left wheel increases position so will the right wheel, in general. It's not an exact 1:1 correlation, e.g. it doesn't hold exactly when the robot is turning, but overall it holds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So here the off-diagonal entry between left wheel x-position and right wheel x-position would be close to 1.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2014-01-27T16:58:58.233" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2381" PostTypeId="2" ParentId="2371" CreationDate="2014-01-27T17:05:37.047" Score="1" Body="&lt;p&gt;Think of it this way, if you had 90$^\circ$ yaw you would swap roll and pitch, and maybe switch the sign depending on your coordinate system definition. Once you think through that, you just use the yaw angle to interpolate for arbitrary yaw angles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{align}&#xA;\phi' &amp;amp;= \cos(\psi) \phi + \sin(\psi) \theta&#xA;\\&#xA;\theta' &amp;amp;= -\sin(\psi) \phi + \cos(\psi) \theta&#xA;\end{align}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The $\pm$ signs might be off, but you get the idea.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2014-01-27T17:05:37.047" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2382" PostTypeId="1" CreationDate="2014-01-27T18:07:05.563" Score="6" ViewCount="1297" Body="&lt;p&gt;We are working with an holonomic robot equipped with three (120 degree shifted) omnidirectional wheels. The relative movement is estimated by dead reckoning using wheel encoders. To improve this estimation we installed an gyroscope to measure the change in orientation. Furthermore the robot has a 270 degree laser range finder. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to solve the kidnapped robot problem we implemented a particle filter. In every step each particle is updated according to the odometry and gyroscope readings. Since these readings are distorted by noise we need a motion model to include these errors. As described in Probabilistic Robotics by Thrun (Page 118 - 143) there are two commonly used motion models (velocity motion model and odometry motion model). However these models seem to describe the behavior of differential drive robots not omnidirectional robots. I base this thesis on the fact that the error in relative y-direction is proportional to the error in orientation as far as the motion models by Thrun are concerned. This is appropriate for differential drive robots as the orientation and the heading of the robot are identical. For omnidirectional robots this assumption can not be made since the heading and the orientation are completely independent. Even if we assume perfect information about the robots orientation we can still obtain error in relative y-direction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to discuss if my assumption - that the velocity/odometry motion model fails for omnididrectional robots - is correct or not as i am not sure about that. Furthermore  i am curious if there are any other motion models for omnidirectional robots that might fit better.&lt;/p&gt;&#xA;" OwnerUserId="2450" LastEditorUserId="2450" LastEditDate="2014-01-27T23:22:22.440" LastActivityDate="2015-07-19T01:00:34.373" Title="Motion Model for Holonomic Robot" Tags="&lt;mobile-robot&gt;&lt;localization&gt;&lt;motion&gt;&lt;particle-filter&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2383" PostTypeId="2" ParentId="2056" CreationDate="2014-01-27T20:41:02.440" Score="1" Body="&lt;p&gt;&lt;strike&gt;You're getting garbage in because the module is running at 9600 baud. In order for the module to operate at 38400 baud, pin 34 must be set high before the module is powered on. It looks like you are trying to set the pin high in &lt;code&gt;Setup()&lt;/code&gt;, but it's already too late by then.&lt;/strike&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: I see now that he hardwired pin 34 high and he is getting valid data read back from the module.  The following fixes still apply if you need a way to ensure the baud rate of the module.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can fix this in a few ways: &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;use 9600 baud in your code &lt;/li&gt;&#xA;&lt;li&gt;wire vcc directly to pin 34 so it's always in 38400 baud mode &lt;/li&gt;&#xA;&lt;li&gt;change the default uart speed using the AT command that does this (can't remember) &lt;/li&gt;&#xA;&lt;li&gt;tie the hc-05 reset pin to an Arduino output pin so you can set pin 34 high and then toggle the reset which will ensure the module goes into 38400 mode.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Edit:  Assuming you have everything connected properly and the baud rates set correctly, the following code is known to work on the Arduino Uno.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/* Serial Loop */&#xA;&#xA;#include &amp;lt;SoftwareSerial.h&amp;gt;&#xA;&#xA;#define rxPin 8&#xA;#define txPin 9&#xA;&#xA;SoftwareSerial mySerial(rxPin, txPin); // RX, TX&#xA;char myChar;&#xA;&#xA;void setup() {&#xA;  Serial.begin(9600);   &#xA;  Serial.println(&quot;AT&quot;);&#xA;&#xA;  mySerial.begin(38400);&#xA;  mySerial.println(&quot;AT&quot;);&#xA;}&#xA;&#xA;void loop() {&#xA;  while (mySerial.available()) {&#xA;    myChar = mySerial.read();&#xA;    Serial.print(myChar);&#xA;  }&#xA;&#xA;  while (Serial.available()) {&#xA;    myChar = Serial.read();&#xA;    Serial.print(myChar); //echo&#xA;    mySerial.print(myChar);&#xA;  }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Here is the circuit that goes with the code. The pin labled &quot;Key&quot; is pin 34. &lt;img src=&quot;https://i.stack.imgur.com/7NfeU.png&quot; alt=&quot;Bluetooth command loop schematic&quot;&gt;  &lt;/p&gt;&#xA;" OwnerUserId="2702" LastEditorUserId="2702" LastEditDate="2014-06-09T19:53:52.253" LastActivityDate="2014-06-09T19:53:52.253" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2384" PostTypeId="2" ParentId="2371" CreationDate="2014-01-28T03:54:47.257" Score="1" Body="&lt;p&gt;Don't think roll and pitch.  think of the level flight case where the vertical axis of the 'copter is vertical.  Now if you want to move in any direction at all create a plane that contains your vertical axis (so this is a vertical plane) and also contains your desired new direction.  two line now define a plane.   You need to tip the 'copter's vertical axis while keeping ti on that plane&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking down on this plane from high up on your z-axis the plane looks line a line drawn on the x,y plane pointing to your desired new heading.  The line is has some angle which equals the change in heading you want call it theta. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;the rotation will have a pitch and roll component and you must distribute the total amount of tilt between pitch and roll.   that is sin(theta) and cos(theta)&#xA;Does this make sense?  Try it: what if you want to turn 90 degrees then sin(90)=1 and cos(90)=0 this means to so &quot;due left&quot; you roll.   To move forward is is pitch one because sin(0)=0 and cos(0) = 1.    At 45 degree heading sin(45)=cos(45) so equal amount of pitch and roll.    &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now you can go any direction take the total rotation and proportion it between pitch and roll be multiplying by (total rotation)(sin(theta)) and cos for roll.&lt;/p&gt;&#xA;" OwnerUserId="2609" LastActivityDate="2014-01-28T03:54:47.257" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2385" PostTypeId="2" ParentId="2379" CreationDate="2014-01-28T04:13:39.940" Score="4" Body="&lt;p&gt;The simplest sensor you can build is a weight on a string. Lower it down until the tension of the string is reduced. I assume you want sonar. So just go buy one they are dead easy to interface to.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can buy these at marine hardware stores. They are not cheap. Look for a depth finder that has &quot;NMEA&quot; output. You may have heard of NMEA as the data format that GPS receivers use to send location. But it is a common format used by wind, depth and speed sensors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The NMEA format is just 4800 baud serial ASCII data with end of lines and the data is typically sent once per second. You can read the data in a PC if it has a serial port and a terminal program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The sensors itself looks like a plumbing fitting. You drill a 1 or 2 inch hole in the boat and install the sensor facing down then a wire runs to the main unit. In theory you could create electronics that &quot;ping&quot; the sensor and wait for a return but it's easier to buy a complete unit with NMEA output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you try and roll your own you have to deal with thermoclines, soft bottoms, rocks and even fish and do a lot of signal processing to find a reliable depth. This is &lt;strong&gt;not&lt;/strong&gt; like sonar in air where there is a &lt;strong&gt;huge&lt;/strong&gt; difference between a solid wall and air. Soft mud is not so much unlike water. But a NMEA sensor would be very easy to use. You pay the big price for the DSP.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My favorite store is West Marine. Google it and I bet there is one near you if you live near ocean. I recommend them because of their high level of customer support. They will point you at the best product and answer questions like &quot;what's NMEA?&quot;&lt;/p&gt;&#xA;" OwnerUserId="2609" LastEditorUserId="2447" LastEditDate="2014-01-28T20:20:13.833" LastActivityDate="2014-01-28T20:20:13.833" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2386" PostTypeId="2" ParentId="2331" CreationDate="2014-01-28T04:38:52.443" Score="0" Body="&lt;p&gt;&quot;Please be as through as you possibly can&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a book length subject.  To cover it completely would required hundreds of pages of text. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The best way to learn, and I'm just starting to learn is to start out very simple.  Make a filter where the state is just a 2D vector and the measurements look a LOT like the state.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then you try a harder problem and so on.   I doubt you can learn by reading.  I can't.  I have to use the theory to learn it.  This is a very good and simple explanation, about as simple as in can get: &lt;a href=&quot;http://greg.czerniak.info/guides/kalman1/&quot; rel=&quot;nofollow&quot;&gt;Kalman tutorial&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2609" LastActivityDate="2014-01-28T04:38:52.443" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2387" PostTypeId="1" AcceptedAnswerId="2390" CreationDate="2014-01-28T06:53:04.840" Score="1" ViewCount="1229" Body="&lt;p&gt;I have bought a really small &lt;a href=&quot;http://www.ebay.com/itm/like/231129032058?lpid=82&quot; rel=&quot;nofollow noreferrer&quot;&gt;proto X quad&lt;/a&gt; (it has a joystick which navigates the device) and I am looking for a way to send a signal to this thing from my computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/381Yl.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So can anyone point me how can I turn on one of the propellers of this quad using my laptop (I have a decent knowledge in python/matlab/C# but hardware is a completely new world to me).&lt;/p&gt;&#xA;" OwnerUserId="2706" LastActivityDate="2014-01-29T05:39:05.747" Title="How can I start programming proto X quad" Tags="&lt;quadcopter&gt;&lt;programming-languages&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2388" PostTypeId="2" ParentId="2337" CreationDate="2014-01-28T10:20:35.090" Score="2" Body="&lt;p&gt;I just answered the question on StackOverflow, where it already been asked. Here is the link:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/questions/21249131/monte-carlo-localization-for-mobile-robot&quot;&gt;https://stackoverflow.com/questions/21249131/monte-carlo-localization-for-mobile-robot&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2450" LastEditorUserId="-1" LastEditDate="2017-05-23T12:37:11.430" LastActivityDate="2014-01-28T10:20:35.090" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2389" PostTypeId="2" ParentId="2376" CreationDate="2014-01-28T10:26:11.797" Score="0" Body="&lt;p&gt;There is some discussion about this on stackoverflow. Please check out this link:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/questions/9936272/using-xbox-360-kinect-with-kinect-for-windows-sdk&quot;&gt;https://stackoverflow.com/questions/9936272/using-xbox-360-kinect-with-kinect-for-windows-sdk&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="1794" LastEditorUserId="-1" LastEditDate="2017-05-23T12:37:11.430" LastActivityDate="2014-01-28T10:26:11.797" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2390" PostTypeId="2" ParentId="2387" CreationDate="2014-01-28T10:39:36.507" Score="1" Body="&lt;p&gt;I can think of 2 ways:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;(1)&lt;/strong&gt; Open it up, &lt;strong&gt;get rid of off the control board in the quad&lt;/strong&gt; and only keep the motors and electronic speed controller. There should one per motor, but they might be integrated in the main board in which case you'd have to get some yourselves. &lt;strong&gt;Then get an&lt;a href=&quot;http://www.arduino.cc/&quot; rel=&quot;nofollow&quot;&gt;arduino&lt;/a&gt; (a programmable microcontroller) to control the motors.&lt;/strong&gt; The communication with a laptop can then be done via an RF signals (using e.g. &lt;a href=&quot;http://lmgtfy.com/?q=xbee%20arduino&quot; rel=&quot;nofollow&quot;&gt;xbees&lt;/a&gt;) and use &lt;strong&gt;another arduino as a transmitter&lt;/strong&gt; plugged into your laptop to control it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There a lots of tutorials and blogs &lt;a href=&quot;http://lmgtfy.com/?q=diy%20quadcopter%20arduino&quot; rel=&quot;nofollow&quot;&gt;online&lt;/a&gt; about this kind of projects, with open source code available etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;(2)&lt;/strong&gt; Probably the easiest option: &lt;strong&gt;Reverse engineering the RF signals between the quad and the remote control and replicate them from your laptop.&lt;/strong&gt; To do that, you'll have to know the frequency that's being used (probably written at the back of the remote), buy a receiver + transmitter for that frequency. Use the receiver to &quot;listen&quot; to what the signals are when using the remote. Then you can try to recreate those signals in software and use the transmitter to send those across to the quad.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sounds difficult, but it's probably the easiest option. &lt;strong&gt;See this &lt;a href=&quot;http://issuu.com/themagpi/docs/issue_8_final&quot; rel=&quot;nofollow&quot;&gt;magpi article - page 8&lt;/a&gt; that describes how to do this&lt;/strong&gt; - This was for a totally different project but the method still stands.&lt;/p&gt;&#xA;" OwnerUserId="2603" LastActivityDate="2014-01-28T10:39:36.507" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2391" PostTypeId="2" ParentId="1627" CreationDate="2014-01-28T12:15:38.650" Score="5" Body="&lt;p&gt;For the smallest (and cheapest) of multicopters, DC brushed motors are well in use: &lt;a href=&quot;http://www.rcgroups.com/forums/showthread.php?t=2009496&quot; rel=&quot;nofollow&quot;&gt;http://www.rcgroups.com/forums/showthread.php?t=2009496&lt;/a&gt;&#xA;They are coreless motors&lt;sup&gt;&lt;strong&gt;1&lt;/strong&gt;&lt;/sup&gt; and have very little inertia, can accelerate very quickly and are perfectly suited for high frquency PWM (we drive them with up to 32kHz). You can achieve more than 3:1 power:weight ratio on a sub 50g AUW airframe. Driving those motors is a lot simpler than a brushless motor, you basically just need a transistor and a capacitor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That applies to micro copters, brushless technology didn't catch up in that weight class (yet). Probably just a question of time. The first micro brushless systems are available, but they cost many times more than coreless motors and don't offer more performance (yet).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For larger quads: no question, brushless is king. But for the micro and nano-quads, its awesome to have these cheap motors to crash with confidence ;)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;&lt;strong&gt;1&lt;/strong&gt; - &lt;a href=&quot;http://www.pacificelectronicscorp.com/dccoreless.html&quot; rel=&quot;nofollow&quot;&gt;http://www.pacificelectronicscorp.com/dccoreless.html&lt;/a&gt; &lt;/sup&gt;&lt;/p&gt;&#xA;" OwnerUserId="2708" LastEditorUserId="2447" LastEditDate="2014-01-28T20:19:31.500" LastActivityDate="2014-01-28T20:19:31.500" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2392" PostTypeId="2" ParentId="2322" CreationDate="2014-01-28T12:18:28.370" Score="-2" Body="&lt;p&gt;If you want to build a really cheap but great flying quadcopter, check out coreless micro motors: &lt;a href=&quot;http://www.rcgroups.com/forums/showthread.php?t=2009496&quot; rel=&quot;nofollow&quot;&gt;http://www.rcgroups.com/forums/showthread.php?t=2009496&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2708" LastActivityDate="2014-01-28T12:18:28.370" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2394" PostTypeId="1" AcceptedAnswerId="2395" CreationDate="2014-01-28T17:46:14.847" Score="4" ViewCount="3347" Body="&lt;p&gt;I am surprised by the price range of Lidar applications considering the simplicity of the design. I try to make a simple project that requires lidar for object recognitions etc. I wouldn't like to use Visual Recognition such as OpenCV. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regardless of that I am trying to understand why Lidar solutions are so expensive you can see&#xA;that this &#xA;&lt;a href=&quot;http://velodynelidar.com/lidar/hdlproducts/hdl32e.aspx&quot; rel=&quot;nofollow&quot;&gt;http://velodynelidar.com/lidar/hdlproducts/hdl32e.aspx&lt;/a&gt;&#xA;Small lidar sensor goes for 20,000$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I strongly believe that Lidar is the next step in robotic applications but I am not sure why it is so EXCLUSIVE. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have seen few projects that go for around 200$ but their performance is very bad. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope you can answer what makes a Lidar so expensive and what are some cheap systems a hobbyist can afford. &lt;/p&gt;&#xA;" OwnerUserId="2711" LastActivityDate="2014-01-28T18:21:56.473" Title="LIDAR solutions" Tags="&lt;arduino&gt;&lt;computer-vision&gt;&lt;lidar&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="1" ClosedDate="2014-01-29T23:53:30.813" ContentLicense="CC BY-SA 3.0" />
  <row Id="2395" PostTypeId="2" ParentId="2394" CreationDate="2014-01-28T18:14:03.107" Score="0" Body="&lt;p&gt;LIDAR are expensive because it normally relies on Time-of-Flight of the light for measuring each point distance. They are &lt;em&gt;simple&lt;/em&gt; in theory of working, in practice it requires a good design in electronics and the sensors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't think LIDAR is the next step, but stereo vision could be. This is not related to OpenCV, and most optical vision system designers forget the basics that is a good camera with good optics. This is your source of information, if you have a bad one, you difficultly get good results. This means at least ~$200,00 for camera and lenses, with RAW protocol for images, and goes on.&lt;/p&gt;&#xA;" OwnerUserId="2447" LastEditorUserId="2447" LastEditDate="2014-01-28T18:21:56.473" LastActivityDate="2014-01-28T18:21:56.473" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2396" PostTypeId="1" AcceptedAnswerId="2397" CreationDate="2014-01-28T19:12:55.640" Score="5" ViewCount="272" Body="&lt;p&gt;Is there a generic name for the category of robots that move using two opposing wheels or tank-like treads?&lt;/p&gt;&#xA;" OwnerUserId="554" LastEditorUserId="37" LastEditDate="2014-01-28T20:51:46.480" LastActivityDate="2014-01-29T03:03:40.877" Title="Generic name for two-motor wheeled/tracked robots?" Tags="&lt;mobile-robot&gt;&lt;differential-drive&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2397" PostTypeId="2" ParentId="2396" CreationDate="2014-01-28T20:20:20.600" Score="7" Body="&lt;p&gt;Robots with two opposing wheels and usually a castor wheel for balancing reasons (no motor attached) are called &lt;em&gt;Differential Drive Robots&lt;/em&gt;.&lt;/p&gt;&#xA;" OwnerUserId="1445" LastActivityDate="2014-01-28T20:20:20.600" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2398" PostTypeId="2" ParentId="2382" CreationDate="2014-01-28T20:25:44.353" Score="1" Body="&lt;p&gt;I found a paper (&lt;a href=&quot;http://dl.acm.org/citation.cfm?id=1015413&quot; rel=&quot;nofollow&quot;&gt;Learning probabilistic motion models for mobile robots&lt;/a&gt;) which examines the constraints of the motion models introduced by Thrun and presents a more general model.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Abstract:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Machine learning methods are often applied to the problem of learning a map from a robot's sensor data, but they are rarely applied to the problem of learning a robot's motion model. The motion model, which can be influenced by robot idiosyncrasies and terrain properties, is a crucial aspect of current algorithms for Simultaneous Localization and Mapping (SLAM). In this paper we concentrate on generating the correct motion model for a robot by applying EM methods in conjunction with a current SLAM algorithm. In contrast to previous calibration approaches, we not only estimate the mean of the motion, but also the interdependencies between motion terms, and the variances in these terms. This can be used to provide a more focused proposal distribution to a particle filter used in a SLAM algorithm, which can reduce the resources needed for localization while decreasing the chance of losing track of the robot's position. We validate this approach by recovering a good motion model despite initialization with a poor one. Further experiments validate the generality of the learned model in similar circumstances.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="2450" LastEditorUserId="37" LastEditDate="2015-07-19T01:00:34.373" LastActivityDate="2015-07-19T01:00:34.373" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2399" PostTypeId="2" ParentId="2396" CreationDate="2014-01-29T03:03:40.877" Score="3" Body="&lt;p&gt;To append Demetris answer, if it has tank-like treads or even 4 fixed wheels, then you can also call it a &lt;em&gt;skid steer&lt;/em&gt; vehicle.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-01-29T03:03:40.877" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2400" PostTypeId="2" ParentId="2387" CreationDate="2014-01-29T05:39:05.747" Score="1" Body="&lt;p&gt;You won't be able to do this with a Proto X, since (a) you don't have access to the board firmware, and (b) the hardware cannot be modified.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you wish to experiment with this, a good first step will be to get a &lt;a href=&quot;http://witespyquad.gostorego.com/flip-mwc-flight-controller.html&quot; rel=&quot;nofollow&quot;&gt;Flip 1.5 board&lt;/a&gt; and bluetooth module.  For $24, this will give you a complete open source system that includes PC or Android bluetooth or USB communication.&lt;/p&gt;&#xA;" OwnerUserId="554" LastActivityDate="2014-01-29T05:39:05.747" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2401" PostTypeId="2" ParentId="2374" CreationDate="2014-01-29T15:01:06.327" Score="1" Body="&lt;p&gt;I don't think the degree of distance, which I assume you mean rotation between cameras, is relevant to computing the homography. Could you clarify what you mean by degrees of distance? The only requirement to compute a homography between two cameras is that there are at least 4 point correspondences (aka matching points) between the two images captured by the two cameras. The 4 point requirement has to do with the number of unknowns in the homography matrix, which because it's defined up to scale and is a 3x3 matrix, turns out to be 9 elements in matrix - 1 up to scale variable = 8 unknowns. Since we're dealing with planes, we have 2D points (x,y), so each point has 2 values, and thus 4 points give us 8 values.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit - After a lengthy chat discussion and some example images, it turned out the images were in fact rotated too far to obtain satisfactory point correspondences between frames using conventional methods. What ended up working was increasing the sampling rate by taking more pictures at smaller rotations (30 deg instead of 60 deg), which allowed us to track correspondences across multiple frames so the 60 degree frame could be matched with the 0 degree frame by using the 30 deg frame as a link. Let me know if I missed anything!&lt;/p&gt;&#xA;" OwnerUserId="1960" LastEditorUserId="1960" LastEditDate="2014-02-10T18:08:00.783" LastActivityDate="2014-02-10T18:08:00.783" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="2402" PostTypeId="1" AcceptedAnswerId="2403" CreationDate="2014-01-24T22:09:59.440" Score="1" ViewCount="3241" Body="&lt;p&gt;I have a couple of these DC motors&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.pololu.com/product/2202&quot; rel=&quot;nofollow&quot;&gt;http://www.pololu.com/product/2202&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which have an extended motor shaft that sticks out the back and is 1mm diameter. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm having trouble trying to think of the best way to attach an encoder disk to this shaft.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I thought of getting a custom wheel 3d printed and make the opening 0.9mm so it will be a tight fit. But I don't know if is just to small?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also though of taking the encoder disks from a PC mouse and drilling a 1mm / 0.9mm but its the same problem but with the added difficultly of trying to drill a small hole on a small thing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I wondered if anyone knows a better way, or of a made disk to attach. As I just can't find anything for a 1mm shaft&lt;/p&gt;&#xA;" OwnerUserId="2718" OwnerDisplayName="binarysmacker" LastActivityDate="2014-01-29T15:20:56.507" Title="How to: Attach wheel encoder to motor?" Tags="&lt;motor&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2403" PostTypeId="2" ParentId="2402" CreationDate="2014-01-25T12:10:41.603" Score="1" Body="&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Place a disk on the large shaft.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Depends how 'professional' you want to be.  &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;A 1mm hole is not unreasonably hard to drill using a small hobby drill press, and you can do it with many battery drills with due care - the chuck minimum drill size is the main limitation. Down to about 0.8mm is easily enough achievable by mere mortals. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Substitute imperial units below if the mood seizes you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(2a) You can push the 1mm shaft into material that it will penetrate and glue it in place with either epoxy or a super super-glue. Go from there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(2b)  If you get a piece of say 4mm dia brass rod you can  -&lt;br&gt;&#xA;File one end flat - repeat until good enough.&lt;br&gt;&#xA;Mark centre - many guides how to do this on net.&lt;br&gt;&#xA;Centre punch centre&lt;br&gt;&#xA;Drill 1mm hole in end. Drill in horizontal clamp may help. Or not.&#xA;Drill and tap to 2mm or 2.5mm a hole at right angles to long axis.&lt;br&gt;&#xA;Add grub screw or screw - 2 or 2.5mm to suit.&lt;br&gt;&#xA;You now have a shaft extension and half a coupler. Use other end as seems good.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(3) Mark a dark line on shaft. Use optical reflective detector to produce tach signal. &lt;/p&gt;&#xA;" OwnerDisplayName="Russell McMahon" LastActivityDate="2014-01-25T12:10:41.603" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2406" PostTypeId="2" ParentId="2363" CreationDate="2014-01-29T19:35:05.257" Score="0" Body="&lt;p&gt;Depending on the strength of the spring, you may be able to convert the power to the steering motor to a PWM solution.  That would allow you to vary the overall voltage going to the motor, and (hopefully) allow you adjust the balance between the motor force and the spring force -- resulting in an adjustable steering angle.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This would be less preferable than a servo-based steering design, but might be a good last-ditch effort before upgrading to a more capable platform.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-01-29T19:35:05.257" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2409" PostTypeId="1" AcceptedAnswerId="2410" CreationDate="2014-01-30T17:41:21.873" Score="0" ViewCount="55" Body="&lt;p&gt;I am new to robotics and planning my first purchase.&#xA;I'm looking at the Baby Orangutang B-328. Here is information about the microcontroller: &lt;a href=&quot;http://www.hobbytronics.co.uk/baby-orangutan-328&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.hobbytronics.co.uk/baby-orangutan-328&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The pin headers come unmounted, so you have to do the soldering yourself. My problem is that I don't know what the pin connections are for. Here is a picture of the board:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.ca.diigiit.com/image/cache/data/pololu/1220/Pololu-Baby-orangutan-b-328-6-500x500.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.ca.diigiit.com/image/cache/data/pololu/1220/Pololu-Baby-orangutan-b-328-6-500x500.png&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could someone briefly tell me what the different connections are for, or link a website that does?&lt;/p&gt;&#xA;" OwnerUserId="2732" LastEditorUserId="2447" LastEditDate="2014-01-30T20:01:33.010" LastActivityDate="2014-01-30T20:01:33.010" Title="Connections on a Baby Orangutang B-328 board" Tags="&lt;microcontroller&gt;" AnswerCount="1" CommentCount="3" ClosedDate="2014-01-30T20:23:16.727" ContentLicense="CC BY-SA 3.0" />
  <row Id="2410" PostTypeId="2" ParentId="2409" CreationDate="2014-01-30T18:47:44.410" Score="1" Body="&lt;p&gt;Look at the bottom of the page on your first link:  &lt;a href=&quot;http://www.hobbytronics.co.uk/baby-orangutan-328&quot; rel=&quot;nofollow&quot;&gt;http://www.hobbytronics.co.uk/baby-orangutan-328&lt;/a&gt;. under &quot;Documents relating to the Baby Orangutan B-328&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There you will find links to the &lt;a href=&quot;http://www.hobbytronics.co.uk/datasheets/baby_orangutan_b.pdf&quot; rel=&quot;nofollow&quot;&gt;Baby Orangutan B Users Guide&lt;/a&gt; as well as other useful links.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The user's guide contains the pin descriptions you need on page 5.&lt;/p&gt;&#xA;" OwnerUserId="1844" LastActivityDate="2014-01-30T18:47:44.410" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2411" PostTypeId="1" AcceptedAnswerId="2412" CreationDate="2014-01-30T19:03:33.947" Score="7" ViewCount="3892" Body="&lt;p&gt;I'm a complete newbie trying to build a simple robot that dispenses candy (M&amp;amp;M, skittles, etc).  However, since I'm not familiar with the field, I'm having a hard time googling because I don't know the correct terms to search for.  I'm looking for a piece to build a robotic 'trap door' of sorts that will open for a specified amount of time to release candy.  What parts can I use and what is are called?  I've tried robotic lever, robotic door, etc with no luck.&lt;/p&gt;&#xA;" OwnerUserId="2734" LastActivityDate="2015-12-05T22:49:03.497" Title="Robotic part to dispense candy" Tags="&lt;design&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2412" PostTypeId="2" ParentId="2411" CreationDate="2014-01-30T19:52:20.753" Score="7" Body="&lt;p&gt;Your mechanism will depend on the type of dispenser you want. Like if its gravity feed or not. I will assume it is, so I make this sketch to give you some idea:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/5EEuB.gif&quot; alt=&quot;electronics candy dispenser sketch&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The hole size will depend on how many candy you want to dispense at each stroke. (Of course its related to the candy size). The electro-mechanical actuator can be a crankshaft one, a solenoid, a linear motor, and goes on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can use a vibrator attached to the cup if the candy tends to get stuck.&lt;/p&gt;&#xA;" OwnerUserId="2447" LastActivityDate="2014-01-30T19:52:20.753" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2413" PostTypeId="1" AcceptedAnswerId="2414" CreationDate="2014-01-30T21:41:35.710" Score="0" ViewCount="161" Body="&lt;p&gt;I am studying Informatics and I am interested in doing a Masters in Robotics and I was checking out some unis and their courses and I saw that Robotics contains analysis and a lot of math.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why is that?&lt;/p&gt;&#xA;" OwnerUserId="2538" LastActivityDate="2014-01-31T20:52:18.293" Title="Why is analysis required to study robotics?" Tags="&lt;software&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2414" PostTypeId="2" ParentId="2413" CreationDate="2014-01-30T23:19:54.910" Score="2" Body="&lt;p&gt;Math is the way that roboticists translate our understanding of the world into something that a computer can understand. Since this is not how humans do it, this requires a lot of rather difficult math. How would you tell a computer what a pencil is? How does that description change if the pencil is rotated?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Robot control also needs a lot of math. If I move this shoulder joint by 5 degrees how much does that move the hand? If I the robot sees the world through a camera and I want the robot to move an object 5 pixels to the right, how much do I need to move each joint? If the object weighs 5 kg how much torque do I need on the motors to hold it? How do I make sure this works even if I measured wrong and the object is really 6kg?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, robots have to deal with a lot of uncertainty. The sensors it uses to &quot;see&quot; the world have a lot of random noise so all the algorithms need to somehow model this noise so the robot can react properly. This involves a lot of probability theory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, since it's not possible to test every environment you have to use math to prove that your algorithms will always work.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2014-01-30T23:19:54.910" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2415" PostTypeId="2" ParentId="1021" CreationDate="2014-01-31T15:56:49.380" Score="5" Body="&lt;p&gt;The device you are looking for is a &quot;pan-tilt&quot; unit.  They are typically used for pointing security cameras.  If you find a &quot;PTZ&quot;, i.e. pan-tilt-zoom security camera used, you could butcher it an just use the Pan/Tilt part.&lt;/p&gt;&#xA;" OwnerUserId="2743" LastActivityDate="2014-01-31T15:56:49.380" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2416" PostTypeId="1" CreationDate="2014-01-31T20:42:27.217" Score="2" ViewCount="1058" Body="&lt;p&gt;Why do FPV Quadcopter Motors (usually the more expensive ones) draw lower amps than regular motors? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And why are they more squat(disk shaped) as opposed to normal motors which are about the same diameter and height?&lt;/p&gt;&#xA;" OwnerUserId="2588" LastActivityDate="2014-05-05T01:43:37.670" Title="Low Amp FPV Quadcopter Motors" Tags="&lt;motor&gt;&lt;quadcopter&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2417" PostTypeId="2" ParentId="2413" CreationDate="2014-01-31T20:44:54.360" Score="2" Body="&lt;p&gt;The short answer is that learning robotics is easier &lt;em&gt;with&lt;/em&gt; the math than without.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are a few areas of robotics and the field of mathematics that make them manageable:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Measuring data from sensors, with some level of uncertainty: &lt;strong&gt;statistics&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;Solving problems through reasoning: &lt;strong&gt;formal logic&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;Kinematics: &lt;strong&gt;linear algebra&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;Control theory: &lt;strong&gt;calculus&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;Algorithms: &lt;strong&gt;theory of computation, combinatorics&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;Mechanical design: &lt;strong&gt;physics&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;Sonar design: &lt;strong&gt;acoustics&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;Cooperative robotics, path planning: &lt;strong&gt;graph theory&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This is a very incomplete list.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Being able to predict or explain why a system works the way it does is very difficult without the mathematical language to describe it.  The ideas are complicated, and you'd be hard pressed to find a more understandable way to communicate all but the simplest ideas in robotics without a mathematical language to rely on.  (Not to mention that it's a more objective process to simplify mathematical equations than an english description of the same system.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may find that studying robotics will make it easier to learn the math, because it will give you a practical application for what's ordinarily just a bunch of theory.  &lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2014-01-31T20:52:18.293" LastActivityDate="2014-01-31T20:52:18.293" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2418" PostTypeId="1" CreationDate="2014-01-31T21:04:42.310" Score="3" ViewCount="2676" Body="&lt;p&gt;All the pro FPV builds and the more expensive quads don't seem to be using plastic props. Any reason for this?&lt;/p&gt;&#xA;" OwnerUserId="2588" LastActivityDate="2016-03-19T11:29:06.083" Title="Quadcopter Props? Wood vs Plastic vs Carbon Fiber" Tags="&lt;quadcopter&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2419" PostTypeId="2" ParentId="2411" CreationDate="2014-01-31T21:09:25.510" Score="4" Body="&lt;p&gt;There are two good search terms that come to mind.  The first one is a &quot;candy machine mechansim&quot;, or &quot;dispenser mechanism&quot; (e.g. &lt;a href=&quot;http://www.woodworkingformeremortals.com/2012/10/make-candy-dispenser.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.woodworkingformeremortals.com/2012/10/make-candy-dispenser.html&lt;/a&gt;).  There are several models of off-the-shelf pet food dispensers and cereal dispensers that use this method.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Ab4YP.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Ab4YPm.jpg&quot; alt=&quot;cereal dispenser&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second term would be a &lt;a href=&quot;http://en.wikipedia.org/wiki/Screw_conveyor&quot; rel=&quot;nofollow noreferrer&quot;&gt;screw conveyor&lt;/a&gt; (a.k.a. &quot;auger dispenser&quot;/&quot;food auger&quot;/&quot;grain auger&quot;), which describes a more continuous-flow version of what you are describing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/2/22/Archimedes-screw_one-screw-threads_with-ball_3D-view_animated_small.gif&quot; alt=&quot;screw conveyor&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This type of dispenser controls the volume that is delivered by rotating the auger by a fixed amount, not by dumping a fixed-size container.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beyond those, there are some homemade concepts that use some variation on the idea, like this one:&#xA;&lt;a href=&quot;http://omahamakergroup.org/2011/06/24/evening-project-automatic-cat-food-dispenser/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/UsIeTm.jpg&quot; alt=&quot;sliding cat food dispenser&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="-1" LastEditDate="2017-03-10T09:42:49.163" LastActivityDate="2014-02-03T16:12:49.793" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2420" PostTypeId="2" ParentId="2032" CreationDate="2014-01-31T21:27:48.493" Score="1" Body="&lt;p&gt;This should only be a problem if you anticipate that the weight would be shifting &lt;em&gt;within&lt;/em&gt; the robot.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You're correct that the weight of the rover will be borne by the single contact points on each side, so any imbalance about that rod will become stress on the differential mechanism.  However, in the initial design of the vehicle you should be placing the contact points of the suspension system in line with the vehicle body's center of mass.  You could also add weight to certain parts of the vehicle to achieve this balance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In cases where you really do want to change the weight distribution in the vehicle (e.g. picking up an object with a gripper arm), you have 2 choices: either make the suspension strong enough to handle the torque you'll be putting on it, or introduce a system that can adjust the balancing point -- a movable ballast.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-01-31T21:27:48.493" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2421" PostTypeId="1" CreationDate="2014-02-01T12:57:51.567" Score="1" ViewCount="62" Body="&lt;p&gt;Is there any way I can simply run a program on the NXT, but not download it?&lt;br /&gt;  I have all my programs already downloaded, and I am connecting with a USB cable to a MacBook Pro using the NXT-G interface.  Is there any way I can just run programs existing on the NXT from the computer, and not download them?  It's really increasing my robot's run time.&#xA;&lt;br /&gt;&#xA;&lt;br /&gt;  I am competing in Robocross in Science Olympiad, and my event is at noon.&#xA;&lt;br /&gt;&#xA;Thank you.&lt;/p&gt;&#xA;" OwnerUserId="2749" LastActivityDate="2014-02-04T17:45:50.733" Title="Just run program on NXT, not download?" Tags="&lt;nxt&gt;&lt;usb&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2422" PostTypeId="1" AcceptedAnswerId="2444" CreationDate="2014-02-01T14:01:58.290" Score="7" ViewCount="7837" Body="&lt;p&gt;For robotic manipulator like the one on the picture:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://www.learnartificialneuralnetworks.com/images/rcfig1.jpg&quot; alt=&quot;robot arm&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;are the configuration space and joint space equivalent? I am trying to understand difference between the two...&lt;/p&gt;&#xA;" OwnerUserId="2483" LastEditorUserId="-1" LastEditDate="2017-03-10T09:42:49.177" LastActivityDate="2018-04-12T11:59:33.917" Title="Is configuration space same as joint space?" Tags="&lt;kinematics&gt;&lt;motion-planning&gt;&lt;forward-kinematics&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2423" PostTypeId="1" CreationDate="2014-02-01T16:22:17.553" Score="6" ViewCount="688" Body="&lt;p&gt;I'm trying to figure out the diameter of tri-blade propellers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found a 7x3x4.5 blade, I'm trying to understand the measurements. Is the '7' the length of the blade giving the prop a 10.5&quot; diameter? or is the 7 the total diameter?&lt;/p&gt;&#xA;" OwnerUserId="2751" LastEditorUserId="37" LastEditDate="2014-02-02T14:46:03.497" LastActivityDate="2014-02-02T19:23:50.320" Title="What do quadcopter propeller specifications mean?" Tags="&lt;quadcopter&gt;&lt;design&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2424" PostTypeId="1" CreationDate="2014-02-01T20:23:03.927" Score="3" ViewCount="2009" Body="&lt;p&gt;for a project for a robotic lab, i'd like to build an automous quadcopter able to follow a path and land on its own. I'd like to use an onboard android phone to do the image processing and recognition part, so that I avoid to send the video stream to a control station, process it and send back the commands.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I need to use it in an indoor environment (so no GPS coordinate), I need the phone to guide the quadcopter giving it relative directions like FORWARD and after 1 sec STOP. This is something a normal pilot would do via the RC radio.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I already have a arducopter APM 2.5 and an arduino mega ADK and I was thinking to connect the phone to the ADK and then the ADK to the APM to guide the copter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think I have 2 options: either having the ADK to generate PPM/PWM signals as a RC receiver would do or use the mavlink protocol.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which is the best/easiest solution?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other info:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-I have already read checked some UAV related websites, but I couldn't find something close to what I want. In most of them, try to build a new type of controller, or use only ab Android phone + ADK. I'd like to stick to something already tested and known to work (as the APM &amp;amp; arducopter software) and I don't want to use the phone as IMU as i don't trust its sensors&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-I already have built the quad (a hexa actually)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-I have already set up the connection and protocol between the phone and the adk so i'm able to send commands like, i.e. forward, turn, hover etc...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-I have already checked the andro-copter project and similar ones.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-I might consider other platforms than the APM 2.5 if there's something easier to use&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-It'd be nice to keep the RC receiver in the loop to regain control of the quad if something goes wrong.&lt;/p&gt;&#xA;" OwnerUserId="2752" LastEditorUserId="2752" LastEditDate="2014-02-02T00:12:26.717" LastActivityDate="2014-10-20T11:51:37.097" Title="Android phone + ADK + Arducopter APM 2.5 for autonomous quadcopter" Tags="&lt;arduino&gt;&lt;control&gt;&lt;quadcopter&gt;&lt;ardupilot&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2426" PostTypeId="1" AcceptedAnswerId="2427" CreationDate="2014-02-02T00:37:02.163" Score="1" ViewCount="76" Body="&lt;p&gt;I have a &lt;a href=&quot;https://hobbyking.com/hobbyking/store/__14630__Turnigy_TrackStar_18A_1_18th_Scale_Brushless_Car_ESC_.html&quot; rel=&quot;nofollow&quot;&gt;Turnigy ESC&lt;/a&gt; and I am controlling it from AVR. Now I need to calibrate it to set the range of the input.&#xA;With a servo tester I managed to calibrate it without any problems, more or less by following the user guide, but when I try to do the same procedure from code, the ESC starts beeping in some confused pattern and then enters programming mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My code looks like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void calibrate_turningy_esc()&#xA;{&#xA;    servo_set16(SERVO_RANGE_TICKS);&#xA;    for (uint16_t i = 0; i &amp;lt; 10000; ++i)&#xA;        _delay_ms(1);&#xA;    servo_set16(-SERVO_RANGE_TICKS);&#xA;    for (uint16_t i = 0; i &amp;lt; 10000; ++i)&#xA;        _delay_ms(1);&#xA;    servo_set16(0);&#xA;    for (uint16_t i = 0; i &amp;lt; 10000; ++i)&#xA;        _delay_ms(1);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where +SERVO_RANGE_TICKS is 2.2ms pulse length, -SERVO_RANGE_TICKS is 0.8ms pulse length and 0 is 1.5ms. The timeouts of 10s were measured during the manual calibration with a stopwatch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strike&gt;I have checked with an oscilloscope that the output servo signal looks the way I would expect it -- 10 seconds of 2.2ms pulses, 10 seconds of 0.8ms pulses and then 1.5ms pulses.&lt;/strike&gt;&#xA;Edit: I made a mistake here, see my answer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do you have any idea what to change to calibrate the ESC?&lt;/p&gt;&#xA;" OwnerUserId="482" LastEditorUserId="482" LastEditDate="2014-02-02T09:52:56.780" LastActivityDate="2014-02-02T09:59:54.693" Title="How to programatically calibrate Turningy esc?" Tags="&lt;c&gt;&lt;calibration&gt;&lt;esc&gt;&lt;avr&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2427" PostTypeId="2" ParentId="2426" CreationDate="2014-02-02T09:59:54.693" Score="1" Body="&lt;p&gt;So, the calibration code was essentially correct. The problem was in my Makefile dependency code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For previous tests i used a range from 0.5 to 2.5ms and that was clearly too much for this ESC. I tried to decrease the range to 0.8ms - 2.2ms, but my makefile didn't notice the change and kept uploading the old version ... After a clean rebuild the ESC is calibrated without any problems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for the oscilloscope check... I mixed them up :-)&lt;/p&gt;&#xA;" OwnerUserId="482" LastActivityDate="2014-02-02T09:59:54.693" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2428" PostTypeId="2" ParentId="2423" CreationDate="2014-02-02T11:28:56.593" Score="3" Body="&lt;p&gt;7 is diameter of propeller in inches and 4.5 is pitch of propeller in inches. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unless mentioned, propeller parameters are mentioned in inches. The Pitch of a propeller is distance covered by the propeller in one full rotation hence measured in inches. This is similar to pitch of a screw. &lt;/p&gt;&#xA;" OwnerUserId="2118" LastEditorUserId="37" LastEditDate="2014-02-02T19:23:50.320" LastActivityDate="2014-02-02T19:23:50.320" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2429" PostTypeId="2" ParentId="2418" CreationDate="2014-02-02T13:45:03.893" Score="1" Body="&lt;p&gt;Plastic and wood props wear and tear over the time while carbon fiber props have very less tendency to wear and tear hence are more durable ad last long. I have seen plastic props breaking in flight as it was used for long duration. So if you are making expensive setup the it is always better to use carbon fiber props as their strength is far better than plastic or wooden props.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also carbon fiber props are more rigid than plastic props. Hence you can have better efficiency out of carbon fiber props which will result in less power consumption resulting in more flight time which is a very crucial factor while designing and build qauds or any multirotor for FPV.&lt;/p&gt;&#xA;" OwnerUserId="2118" LastActivityDate="2014-02-02T13:45:03.893" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2431" PostTypeId="2" ParentId="2264" CreationDate="2014-02-02T21:13:45.837" Score="0" Body="&lt;p&gt;A Basic Robot Model&#xA;&lt;img src=&quot;https://i.stack.imgur.com/hdBBg.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Perception:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;gathers input Data from Environment using Sensors(Like Laser Scanners and Cameras).&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Plan:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is the part where &lt;strong&gt;AI&lt;/strong&gt; comes into play( as the robot with respect to the input coming from sensors makes intelligent decesions like: where in the world he is called &lt;strong&gt;Localization&lt;/strong&gt; or where to go in order  to find a goal etc.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Action:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Action is the output means the commands given to the Actuators(like motors and servos).This comes under the field of control theory &amp;amp; &lt;strong&gt;Control Systems&lt;/strong&gt; .Use of intensive mathematics Linear Algebra.and control systems also involve perception (both External and Internal Sensory)&lt;/p&gt;&#xA;" OwnerUserId="2758" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2014-02-02T21:13:45.837" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2433" PostTypeId="1" CreationDate="2014-02-03T06:53:02.083" Score="1" ViewCount="3949" Body="&lt;p&gt;I am planning to buy CNC mechanical skeleton without motors, spindle and controller. I will be using the CNC mainly for aluminium milling. Are there any specifications for minimum torque requirement for stepper motors and spindle to perform aluminium milling ?&lt;/p&gt;&#xA;" OwnerUserId="2761" LastActivityDate="2016-11-11T09:50:35.020" Title="What is minimum torque required for CNC stepper motors and spindle for aluminium milling?" Tags="&lt;stepper-motor&gt;&lt;cnc&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2434" PostTypeId="1" CreationDate="2014-02-03T13:50:52.380" Score="1" ViewCount="256" Body="&lt;p&gt;Is it possible to make clone of &lt;a href=&quot;http://www.makerbeam.eu/&quot; rel=&quot;nofollow&quot;&gt;http://www.makerbeam.eu/&lt;/a&gt; of some easy accessible material like:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;wood&lt;/li&gt;&#xA;&lt;li&gt;plywood&lt;/li&gt;&#xA;&lt;li&gt;OSB&lt;/li&gt;&#xA;&lt;li&gt;MDF&lt;/li&gt;&#xA;&lt;li&gt;HDF&lt;/li&gt;&#xA;&lt;li&gt;others&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Using any type of CNC machine to mill some holes and rails in those materials may give sufficient results e.g. to make a prototype of 3D printer of such &quot;beams&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course it won't be as rigid and durable but for making prototypes it may be good idea.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just for reference: when reading this &lt;a href=&quot;http://www.lowtechmagazine.com/2012/12/how-to-make-everything-ourselves-open-modular-hardware.html&quot; rel=&quot;nofollow&quot;&gt;http://www.lowtechmagazine.com/2012/12/how-to-make-everything-ourselves-open-modular-hardware.html&lt;/a&gt; I've found this &lt;a href=&quot;http://bitbeam.org/&quot; rel=&quot;nofollow&quot;&gt;http://bitbeam.org/&lt;/a&gt;, this &lt;a href=&quot;https://www.google.com/search?q=grid+beam&amp;amp;client=ubuntu&amp;amp;hs=zAr&amp;amp;channel=fs&amp;amp;source=lnms&amp;amp;tbm=isch&amp;amp;sa=X&amp;amp;ved=0CAcQ_AUoAWoVChMIiLHdqf2MyQIVQZoUCh1cHwV1&amp;amp;biw=1215&amp;amp;bih=927&quot; rel=&quot;nofollow&quot;&gt;https://www.google.com/search?q=grid+beam&amp;amp;client=ubuntu&amp;amp;hs=zAr&amp;amp;channel=fs&amp;amp;source=lnms&amp;amp;tbm=isch&amp;amp;sa=X&amp;amp;ved=0CAcQ_AUoAWoVChMIiLHdqf2MyQIVQZoUCh1cHwV1&amp;amp;biw=1215&amp;amp;bih=927&lt;/a&gt; and this &lt;a href=&quot;http://www.gridbeam.com/&quot; rel=&quot;nofollow&quot;&gt;http://www.gridbeam.com/&lt;/a&gt;, and this &lt;a href=&quot;https://www.tetrixrobotics.com/&quot; rel=&quot;nofollow&quot;&gt;https://www.tetrixrobotics.com/&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="2663" LastEditorUserId="2663" LastEditDate="2016-01-15T11:59:51.457" LastActivityDate="2016-01-15T11:59:51.457" Title="Is it possible to make DIY clone of MakerBeam" Tags="&lt;mechanism&gt;" AnswerCount="2" CommentCount="1" ClosedDate="2016-01-15T19:14:05.963" ContentLicense="CC BY-SA 3.0" />
  <row Id="2435" PostTypeId="1" AcceptedAnswerId="2439" CreationDate="2014-01-16T13:13:49.980" Score="2" ViewCount="543" Body="&lt;p&gt;There is this project I am working on which is using a BeagleBone and we need a JSP container to run on it. I was thinking of Tomcat but wanted to know if Tomcat is suitable for embedded systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it too resource-heavy? If yes, are there other lighter JSP containers? I know only of Tomcat and Jetty.&lt;/p&gt;&#xA;" OwnerUserId="2766" OwnerDisplayName="pratnala" LastEditorUserId="2766" LastEditDate="2014-02-04T04:19:13.663" LastActivityDate="2014-06-04T06:46:53.627" Title="JSP container for embedded systems" Tags="&lt;beagle-bone&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2436" PostTypeId="2" ParentId="2434" CreationDate="2014-02-03T21:29:45.847" Score="1" Body="&lt;p&gt;The main problem you will have with this idea is that the MakerBeam / MicroRax / 80/20 rails are extruded aluminum, not milled.  It might be difficult to replicate the design in wood.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beyond that, the wood will have roughly 1/10 the &lt;a href=&quot;http://en.wikipedia.org/wiki/Ultimate_tensile_strength&quot; rel=&quot;nofollow&quot;&gt;tensile strength&lt;/a&gt; of the aluminum and 1/20th the compression strength.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-02-03T21:29:45.847" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2437" PostTypeId="2" ParentId="2433" CreationDate="2014-02-03T21:33:31.890" Score="0" Body="&lt;p&gt;There are many calculators online for determining this sort of thing, and there are many factors involved.  Here is &lt;a href=&quot;http://www.kennametal.com/kennametal/en/resources/calculators/face-milling/force-torque-and-power.html&quot; rel=&quot;nofollow&quot;&gt;one such calculator&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-02-03T21:33:31.890" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2438" PostTypeId="2" ParentId="2421" CreationDate="2014-02-03T21:36:55.183" Score="2" Body="&lt;p&gt;There have been some projects that allow you to run NXT programs on a computer, like this one:&#xA;&lt;a href=&quot;http://ocaml-mindstorm.forge.ocamlcore.org/&quot; rel=&quot;nofollow&quot;&gt;http://ocaml-mindstorm.forge.ocamlcore.org/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, this is done by downloading and running a different program on the NXT, which acts as a communications bridge -- passing control to and from the main computer.  There are probably other libraries that use this model of operation, so you might not need to learn OCaml specifically to try this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Downloading programs onto the NXT is the only way that they can be run; there is no concept of a filesystem or external memory device on a microcontroller that you could use as an alternate source of the program instructions.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2014-02-04T17:45:50.733" LastActivityDate="2014-02-04T17:45:50.733" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2439" PostTypeId="2" ParentId="2435" CreationDate="2014-02-03T22:03:05.987" Score="1" Body="&lt;p&gt;Could you perhaps elaborate on your performance requirements?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm quite confident you will be able to get Tomcat running, &lt;a href=&quot;http://www.youtube.com/watch?v=aUCa8GQvsjo&quot; rel=&quot;nofollow noreferrer&quot;&gt;here's a video of someone getting Tomcat 5.5 running&lt;/a&gt; on a beagleboard c4 (note the video is dated Feb 2011). Also remember that you can run a normal &lt;a href=&quot;https://wiki.ubuntu.com/ARM&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ubuntu distro&lt;/a&gt; on the beaglebone, so installing Tomcat should be as easy as simply going 'sudo apt-get install tomcat7'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The big issue is performance. If you're planning to use the beaglebone as a server handling thousands of requests a second you're probably going to have a problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The following table indicates the performance difference between embedded application processors and a desktop PC (the benchmark calculates pi to 500 digits, &lt;a href=&quot;http://upon2020.com/blog/2013/07/comparing-raspberry-pi-beaglebone-and-mirabox/&quot; rel=&quot;nofollow noreferrer&quot;&gt;see Johannes Ernst's blog for more info&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/Dpe8k.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The above benchmark obviously does not characterize other performance areas important in running a server (e.g. disk or network I/O), but let's assume you're looking at roughly a tenfold increase in processing time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For instance, if a single Tomcat transaction usually took 10 ms to complete, it could now take 100 ms. If you're only using the beaglebone to serve a small number of consumers (infrequently), and responsiveness isn't as critical, it should work fine.&lt;/p&gt;&#xA;" OwnerUserId="1775" LastActivityDate="2014-02-03T22:03:05.987" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2440" PostTypeId="2" ParentId="2416" CreationDate="2014-02-03T22:56:47.257" Score="1" Body="&lt;p&gt;While doing FPV using multirotor, endurance is essential as you want to stay in air for maximum time in limited battery capacity. This requires minimizing current consumption while designing a multirotor. Multirotors use flight control system which works best with relatively lower rpm motors as response is faster with low rpm motor. This demands usage of bigger diameter propeller for desired thrust which expects high torque motor to drive it. Now we expect higher torque at lower current consumption for our purpose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case of brushless DC motor, torque depends on number of poles and current consumption depends on coil. Now in order to increase torque one has to increase number of poles and consequently diameter of motor is increased. In order to decrease coil, we have to decease length of stator. These requirement of large radius and small stator length results in disc like shape for a high torque and low current consuming motor.&lt;/p&gt;&#xA;" OwnerUserId="2118" LastActivityDate="2014-02-03T22:56:47.257" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2441" PostTypeId="2" ParentId="2373" CreationDate="2014-02-04T06:39:40.777" Score="0" Body="&lt;p&gt;I have done this with a kinect and it wasn't slow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So Give more details about:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Sensor output sample &lt;/li&gt;&#xA;&lt;li&gt;the system you are running on&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;In monte carlo you have to traverse all the points one way or another to get a Posterior distribution from the Prior.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the System has a GPU you can parallel process the whole array at once.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you are saying is one of the Cons of Monte Carlo Localization it doesn't scale well for bigger problems specially for 3-dimensional spaces.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;there are other continous models which scale better than it&lt;/p&gt;&#xA;" OwnerUserId="2758" LastActivityDate="2014-02-04T06:39:40.777" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2442" PostTypeId="2" ParentId="2422" CreationDate="2014-02-04T06:50:25.523" Score="1" Body="&lt;p&gt;&lt;em&gt;Configuration space&lt;/em&gt; refers to the set of all possible configurations of the end-effector, the tool frame in this case. &lt;em&gt;Joint space&lt;/em&gt; is the set of joint parameters which describe the overall configuration of the robotic manipulator. &lt;em&gt;Forward kinematics&lt;/em&gt; are used to map the &lt;em&gt;Joint space&lt;/em&gt; to the &lt;em&gt;Configuration space&lt;/em&gt; and &lt;em&gt;Inverse kinematics&lt;/em&gt; do the opposite.&lt;/p&gt;&#xA;" OwnerUserId="1445" LastActivityDate="2014-02-04T06:50:25.523" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2443" PostTypeId="1" CreationDate="2014-02-04T10:50:16.050" Score="2" ViewCount="4013" Body="&lt;p&gt;When I buy some length of timing belt I don't know how to link ends of timing belt into loop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So far I've found one way to do that (thanks to &lt;a href=&quot;http://www.lasersaur.com/&quot; rel=&quot;nofollow&quot;&gt;http://www.lasersaur.com/&lt;/a&gt;):&#xA;&lt;a href=&quot;http://www.flickr.com/photos/stfnix/8697962319/in/set-72157624491114826&quot; rel=&quot;nofollow&quot;&gt;http://www.flickr.com/photos/stfnix/8697962319/in/set-72157624491114826&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any other ideas?&lt;/p&gt;&#xA;" OwnerUserId="2663" LastActivityDate="2018-09-13T13:30:55.577" Title="How to link ends of timing belt into loop" Tags="&lt;mechanism&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2444" PostTypeId="2" ParentId="2422" CreationDate="2014-02-04T12:17:34.500" Score="7" Body="&lt;p&gt;In order to answer my own question &lt;em&gt;Configuration space&lt;/em&gt; and &lt;em&gt;Joint space&lt;/em&gt; must be defined.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Configuration space&lt;/em&gt; of a rigid body is a minimum set of parameters that can determine position of each point in that body or &lt;em&gt;Configuration space&lt;/em&gt; is set of all possible configurations of that body. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Configuration space of the end-effector&lt;/em&gt; is set of all possible positions and orientations of the end-effector, while &lt;em&gt;Configuration space of the robot&lt;/em&gt; is the set of all possible positions and orientations for each rigid link of the robot. Shape of the &lt;em&gt;Configuration space&lt;/em&gt; depends on which rigid body it refers to.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Joint space&lt;/em&gt; is set of all joint parameters. In case of the robot in the picture those are its joint angles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the robotic manipulator in the picture it can be assumed that its configuration is completely determined by its joint parameters. It can be said that &lt;em&gt;Configuration space&lt;/em&gt; and &lt;em&gt;Joint space&lt;/em&gt; are equivalent for this robot (give or take few mathematical definitions of equivalent).&lt;/p&gt;&#xA;" OwnerUserId="2483" LastEditorUserId="2483" LastEditDate="2018-04-12T11:59:33.917" LastActivityDate="2018-04-12T11:59:33.917" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2445" PostTypeId="1" CreationDate="2014-02-04T22:53:19.307" Score="4" ViewCount="748" Body="&lt;p&gt;I'm watching this &lt;a href=&quot;http://www.youtube.com/watch?v=0wOp4k_lJvI&quot; rel=&quot;nofollow&quot;&gt;video&lt;/a&gt; at 36.00 min. The guy gave an example but I'm not sure what is the problem. He stated that if we want to move a robot then we should to the following &lt;/p&gt;&#xA;&#xA;&lt;p&gt;for inhomogeneous case, &#xA;$$&#xA;x' = Rx + t \\&#xA;R = &#xA;\begin{bmatrix}&#xA;cos\theta &amp;amp; -sin\theta \\&#xA;sin\theta  &amp;amp; cos\theta&#xA;\end{bmatrix}&#xA;$$ &#xA;where $t$ is the translation vector and $x$ is the previous position. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;in homogeneous case, &#xA;$$&#xA;x' = &#xA;\begin{bmatrix}&#xA;R &amp;amp; \bf{t} \\&#xA;\bf{0}^{T} &amp;amp; 1 &#xA;\end{bmatrix}&#xA;x&#xA;$$&#xA;Now, he gave an example in which &#xA;$$&#xA;t = &#xA;\begin{bmatrix}&#xA;1 \\&#xA;0 &#xA;\end{bmatrix}&#xA;, &#xA;x = &#xA;\begin{bmatrix}&#xA;0.7 \\&#xA;0.5 &#xA;\end{bmatrix}&#xA;$$&#xA;My solution is as the following in Matlab&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;% inhomogeneous case&#xA;&amp;gt;&amp;gt; a = 45;&#xA;&amp;gt;&amp;gt; R = [cosd(a) -sind(a); sind(a) cosd(a)];&#xA;&amp;gt;&amp;gt; t = [1; 0];&#xA;&amp;gt;&amp;gt; x = [0.7; 0.5];&#xA;&amp;gt;&amp;gt; xnew = R*x + t&#xA;xnew =&#xA;&#xA;    1.1414&#xA;    0.8485&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;For homogeneous case&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt; xn = [R t; 0 0 1]*[x ; 1]&#xA;&#xA;xn =&#xA;&#xA;    1.1414&#xA;    0.8485&#xA;    1.0000&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Both have same result, but the guy got another result. What exactly he did is &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt; xf = [R x; 0 0 1]*[t ; 1]&#xA;&#xA;xf =&#xA;&#xA;    1.4071&#xA;    1.2071&#xA;    1.0000&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Why he did switch $t$ and $x$? I'm aware of the issue that he is trying to calculate the velocity but in fact he is computing the position. This mistake in the notation won't affect the final result. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Second question, why he assumed that the forward movement of the robot in the above example should be&#xA;$$&#xA;t = \begin{bmatrix}1\\0\end{bmatrix}&#xA;$$&#xA;? He said that because the robot always in the forward movement move in +x axis. Why this is the case? The movement in robot's frame is determined based on the direction of the robot and the distance the robot travels which is specified as hypotenuse length. &lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="158" LastEditDate="2014-02-05T11:09:35.957" LastActivityDate="2014-04-12T00:08:27.847" Title="Transformation a robot in 2D?" Tags="&lt;mobile-robot&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2446" PostTypeId="1" CreationDate="2014-02-05T11:22:04.447" Score="2" ViewCount="8801" Body="&lt;p&gt;I am planing to control my RC helicopter with my computer. I have experience of programming in .Net. Could we use .Net to control RC helicopter? &#xA;From where can I start this project?&lt;/p&gt;&#xA;" OwnerUserId="3769" LastEditorUserId="127" LastEditDate="2014-02-06T07:38:54.757" LastActivityDate="2014-02-06T07:38:54.757" Title="RC Helicopter Connect with computer" Tags="&lt;control&gt;&lt;radio-control&gt;" AnswerCount="4" CommentCount="2" ClosedDate="2014-02-12T19:19:45.110" ContentLicense="CC BY-SA 3.0" />
  <row Id="2447" PostTypeId="2" ParentId="2446" CreationDate="2014-02-05T13:08:35.573" Score="1" Body="&lt;p&gt;Yes you can do it and there are a number of different ways&#xA;as far as the language you choose its your choice because you can manipulate serial ports with any language. Think of an RC Heli as another computer. What comes to mind is you just need a medium for communication. Choosing what medium of course depends on how much data you want to send and receive and what range you want.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Example:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Bluetooth:&lt;/strong&gt; if you need only few meters range and small amount of data&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;RC Transmitter&lt;/strong&gt; Another way is to connect the RC transmitter to your computer directly. See this &lt;a href=&quot;http://www.min.at/prinz/?x=entry%3aentry130320-204119&quot; rel=&quot;nofollow&quot;&gt;blog Post&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Wifi&lt;/strong&gt; can also be used to communicate &lt;a href=&quot;http://diydrones.com/profiles/blogs/hacking-a-rc-helicopter-for-wifi-router-control&quot; rel=&quot;nofollow&quot;&gt;see this Post&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you need more help give more details what you intend to do.&lt;/p&gt;&#xA;" OwnerUserId="2758" LastEditorUserId="1445" LastEditDate="2014-02-05T13:30:11.740" LastActivityDate="2014-02-05T13:30:11.740" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2448" PostTypeId="2" ParentId="2446" CreationDate="2014-02-05T14:00:46.603" Score="0" Body="&lt;p&gt;You can use onboard microcontroller like &lt;a href=&quot;https://www.ghielectronics.com/catalog/product/450&quot; rel=&quot;nofollow&quot;&gt;FEZ cerb40&lt;/a&gt; which you can program using .NET micro framework. You can use this to control servo and ESC. You can use &lt;a href=&quot;https://www.sparkfun.com/products/8742&quot; rel=&quot;nofollow&quot;&gt;Xbee&lt;/a&gt; or any similar wireless serial communication system to receive commands from your computer using serial terminal program.&lt;/p&gt;&#xA;" OwnerUserId="2118" LastActivityDate="2014-02-05T14:00:46.603" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2449" PostTypeId="2" ParentId="2446" CreationDate="2014-02-05T15:53:54.827" Score="0" Body="&lt;p&gt;Waqas, your question is a little vague. So the simple answer is of course why not. But do consider the following:&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;What type of RC helicopter is it?&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;RC helicopters come in many shape and sizes, and they require special mixing for each type. For example a collective pitch/roll helicopter uses different mixing than a non collective type RC. So given this you will have to think about how many different types do you wish to support.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In some cases the mixing is done onboard the helicopters most commonly known as FlightControllers(FC). At the same time some advanced Transmitters also do certain pre-mixing before sending commands to the FC.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;How do I connect to it?&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Again the possibilities here are endless. You can tether to it from your laptop, but then you are limited to how far it can go. How about instead you use an onboard controller which you can control using WiFi or bluetooth, try &lt;a href=&quot;http://www.buildyourowndrone.co.uk/ArduPilot-Mega-s/36.htm&quot; rel=&quot;nofollow&quot;&gt;http://www.buildyourowndrone.co.uk/ArduPilot-Mega-s/36.htm&lt;/a&gt;. You could build a program to send commands to your ArduPilot over UDP.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;How do I start tinkering?&lt;/h2&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Try maybe starting small, try controlling and RC car, trust me it is a lot easier to get past the initial problems, and you will experience the problems in easier dimensions.&lt;/li&gt;&#xA;&lt;li&gt;See which parts you can pull out and replace with your application&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Try to turn you PC into a transmitter&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;When ready replace the Car with the Helicopter&lt;/li&gt;&#xA;&lt;li&gt;If you wish try replacing the FC onboard the Helicopter with your custom version should you choose to.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I am for learning actually doing something similar, by building an onboard framework use to control many types of RC vehicle &lt;a href=&quot;http://dashee.co.uk&quot; rel=&quot;nofollow&quot;&gt;http://dashee.co.uk&lt;/a&gt;. This is very much a work in progress, so I recommend you use ArduPilot to control an RC over Radio/Wifi using your .NET program.&lt;/p&gt;&#xA;" OwnerUserId="2241" LastActivityDate="2014-02-05T15:53:54.827" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2450" PostTypeId="2" ParentId="2445" CreationDate="2014-02-05T19:55:01.400" Score="0" Body="&lt;p&gt;First of all thanx for sharing a good video&#xA;i have me first lecture of Computer vision tomorrow so i revised all the matrix and vector operations.&#xA;Its been a while when i last studied these things&lt;/p&gt;&#xA;&#xA;&lt;p&gt;OK your &lt;strong&gt;Second Question&lt;/strong&gt;&#xA;The assumption is made to simplify the problem to understand .if we have a robot with too many variables changing at the same time it will become complicated.&#xA;So we assume just for the sake of simplicity&#xA;When i first studied we used to assume a simple robot just going forward to understand control theory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Now the First Question&lt;/strong&gt;&#xA;Why you answer is wrong &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Simple Logic(just plot the values with a graph) :&#xA;&lt;img src=&quot;https://i.stack.imgur.com/ztUov.png&quot; alt=&quot;enter image description here&quot;&gt;&#xA; robot was at x,y(0.7,0.5).it then moves another 1 Meter forward .which will end up increasing x and y eventually   :)&#xA;If your answer is right then the increased difference in your answer will give answer 1 by Pythagoras theorem &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;a^2 + b^2 = c^2&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;We cannot apply this  x′=[R0Tt1]x    formula straight forward because the teacher in the video said the distance of 1 meter it traveled is &lt;strong&gt;Local&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To change that local distance to global he uses the method &lt;strong&gt;Matrix multiplication with Vector&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There can be a lot more dicussion that can be done in solving these kind of questions.thats why i am posting the answer to see your response&lt;/p&gt;&#xA;" OwnerUserId="2758" LastActivityDate="2014-02-05T19:55:01.400" CommentCount="12" ContentLicense="CC BY-SA 3.0" />
  <row Id="2452" PostTypeId="2" ParentId="2446" CreationDate="2014-02-05T22:20:21.770" Score="0" Body="&lt;p&gt;I've done a similar project before where I wrote the control program with .Net.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think the first step is deciding how much of a role do you want the computer to play in controlling the helicopter.  If you want the helicopter to be rather autonomous and simply receive commands from the computer but decide how to execute those commands you will likely need to use a microcontroller on-board the helicopter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to control everything via transmitting sensor data from the helicopter and then having the computer do all the control, you won't need as much hardware on the helicopter itself. You will just need a wireless data link.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I worked on my project, I used the first architecture because I didn't want loss of communication with the computer to result in a total loss of control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do you have microcontroller or assembly language experience?&lt;/p&gt;&#xA;" OwnerUserId="2765" LastActivityDate="2014-02-05T22:20:21.770" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2453" PostTypeId="1" CreationDate="2014-02-06T04:07:54.770" Score="3" ViewCount="1852" Body="&lt;p&gt;I'm building my first quadrocopter, and I'm trying to come up with a parts list that is suitable for a first build. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I will use this to &lt;strong&gt;learn how to fly a quadrocopter manually&lt;/strong&gt; (lots of crashes!), and to do some experiments with running AI for piloting it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A couple questions about the below list of parts:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Is this a good choice for a first build?&lt;/strong&gt; Are we missing any crucial parts?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Do these components work together?&lt;/strong&gt; Is this &lt;strong&gt;battery strong enough&lt;/strong&gt; to fuel all the components that need power?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Here's the current list of parts:&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Frame - 450 mm&lt;/li&gt;&#xA;&lt;li&gt;Propellers - 10x4.5&quot;, two pairs&lt;/li&gt;&#xA;&lt;li&gt;Motor (4x) - 900kv brushless outrunner motor; max current: 18A; ESC: 25-30A; cell count:3s-4s lipoly&lt;/li&gt;&#xA;&lt;li&gt;Electronic speed controllers (4x) - 20A constant current, 25A burst current; battery: 2-4S lipoly&lt;/li&gt;&#xA;&lt;li&gt;Battery - 3300mAh lipoly, 11.1v, 3 cell; constant discharge: 30C, peak discharge: 40C. charge plug: JST-XH. 3300 mAh x 30C = 99 amps?&lt;/li&gt;&#xA;&lt;li&gt;Charger - lipoly, 50W, 6A, 12v power supply&lt;/li&gt;&#xA;&lt;li&gt;Power supply - input: AC 100-240v 50/60Hz; output: DC15v 5A&lt;/li&gt;&#xA;&lt;li&gt;Arduino board&lt;/li&gt;&#xA;&lt;li&gt;Gyroscope for arduino&lt;/li&gt;&#xA;&lt;li&gt;Accelerometer for arduino&lt;/li&gt;&#xA;&lt;li&gt;GPS sensor for arduino?&lt;/li&gt;&#xA;&lt;li&gt;RC transmitter for arduino&lt;/li&gt;&#xA;&lt;li&gt;RC controller&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="3775" LastActivityDate="2015-12-25T09:49:04.587" Title="Quadrocopter first build: how to tell if components play well together?" Tags="&lt;arduino&gt;&lt;motor&gt;&lt;sensors&gt;&lt;quadcopter&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2454" PostTypeId="2" ParentId="2453" CreationDate="2014-02-06T14:53:39.343" Score="4" Body="&lt;p&gt;You part list is fine as this is your first build. However I would suggest you to use ready made flight controller instead of buying arduino and program it yourself. Once you are comfortable flying quad rotor, it will be easier for you to test your code and adjust controller gains which is a very crucial step to control quad rotor as per your requirement. There are good flight controller available for quad rotor such as &lt;a href=&quot;http://store.3drobotics.com/products/apm-2-6-kit-1&quot; rel=&quot;nofollow&quot;&gt;Ardupilotmega&lt;/a&gt; or &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__49254__Hobbyking_KK2_1_Multi_rotor_LCD_Flight_Control_Board_With_6050MPU_And_Atmel_644PA.html&quot; rel=&quot;nofollow&quot;&gt;KKMulticopter&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apart from this, you should add lipo alarm like &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__18588__Hobbyking_2_8S_Cell_Checker_with_Low_Voltage_Alarm.html&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt; to your list which will monitor lipo voltage during flight and tell you when to land. Also you should have spare propellers as propeller are most likey to get damage when you crash. You should also consider propeller balancer like &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__19292__Turnigy_Magnetic_Precision_Prop_Balancer.html&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt; to reduce vibration due to imbalanced propeller.&lt;/p&gt;&#xA;" OwnerUserId="2118" LastActivityDate="2014-02-06T14:53:39.343" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2455" PostTypeId="2" ParentId="2453" CreationDate="2014-02-06T23:17:34.810" Score="0" Body="&lt;p&gt;I found myself in the same situation some time ago. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep your list. If you want to see if everything fits, well I'm going to tell you that they won't. Only if there's a miracle. Start learning and designing in SolidWorks. This software gives you the ability to test and fail until everything works. You can simulate basically everything, from weather in diverse regions to how an alloy reacts to pressure. You can even simulate how your code works on your quadcopter by creating a virtual quadcopter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for tutorial, I can tell you that you have all the good documentation on their website. If you have a confusion, google and youtube is your best friend. Oh, and don't forget stackexchange.com.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since time must not rush you, take your time, and be meticulous. Start with an Arduino, but take it slow. Test your programming skills, and if they're not that good, read some tutorials about it. Implement this &quot;algorithm&quot; into your own life, and you'll find out that you can solve anything.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in touch, mate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the way, we are both the same age. Well, I'm 17.&lt;/p&gt;&#xA;" OwnerUserId="3781" LastEditorUserId="3781" LastEditDate="2014-02-07T00:03:03.547" LastActivityDate="2014-02-07T00:03:03.547" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2456" PostTypeId="1" AcceptedAnswerId="2457" CreationDate="2014-02-07T13:57:54.403" Score="0" ViewCount="52" Body="&lt;p&gt;Someone told me when explaining about a controller module named &lt;code&gt;CollisionDetector&lt;/code&gt; that it only checks self-&lt;code&gt;interference&lt;/code&gt; and moves accordingly without detecting &lt;code&gt;collision&lt;/code&gt;. To me both sounds the same. How are they different?&lt;/p&gt;&#xA;" OwnerUserId="60" LastEditorUserId="9176" LastEditDate="2018-08-10T19:32:07.697" LastActivityDate="2018-08-10T19:32:07.697" Title="How are Interference Avoidance and Collision Avoidance different?" Tags="&lt;movement&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="2457" PostTypeId="2" ParentId="2456" CreationDate="2014-02-07T15:02:17.860" Score="1" Body="&lt;p&gt;One is internal, one is external.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Self-interference refers to instances where something like a robot arm (with many degrees of freedom) may attempt to move in a path that crosses part of its own body.  Your &lt;code&gt;CollisionDetector&lt;/code&gt; is likely keeping track of the joint angles in a planned arm movement and seeing if any of them result in such a condition.  The robot doesn't need any information about its environment to do this, just a reliable measurement of its own position (and possibly the shape of whatever it may be gripping).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;Collision Avoidance&quot; usually refers to the detection of transient objects with externally-facing sensors.  For example, a robot has planned a path based on a map of a room but other robots (or people) might be moving around in that same space; the robot detects them with some sort of sensor, and adjusts its planned path (or just stops) until the risk of collision has gone away.  This is usually more difficult than detecting self-interference, because modeling the external environment is a bit more complicated than modeling a robot's internal state.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-02-07T15:02:17.860" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2458" PostTypeId="1" CreationDate="2014-02-08T04:05:18.950" Score="-2" ViewCount="344" Body="&lt;p&gt;I understand this is a broad question but I'm taking the risk to ask anyway.  Robotics, from what I can tell so far, is a detailed, diverse, and thorough field. However, if there are better areas of research to invest time into, what would those areas be?&lt;/p&gt;&#xA;" OwnerUserId="2004" LastActivityDate="2014-02-09T16:54:55.617" Title="What should I study if I want to get into robotics?" Tags="&lt;research&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="2" ClosedDate="2014-02-10T13:30:04.517" ContentLicense="CC BY-SA 3.0" />
  <row Id="2459" PostTypeId="2" ParentId="2458" CreationDate="2014-02-08T08:34:56.613" Score="-1" Body="&lt;p&gt;Arduino really helped me get started. Tons of support and great products these days.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Parallax is another good company offering great starter kits.&#xA;PBasic is a good starter programing language which runs on the Basic Stamp. The &lt;a href=&quot;http://www.parallax.com/product/32500&quot; rel=&quot;nofollow&quot;&gt;Activity Robot Kit&lt;/a&gt; was very useful for me.&lt;/p&gt;&#xA;" OwnerUserId="3774" LastEditorUserId="3774" LastEditDate="2014-02-08T08:47:39.887" LastActivityDate="2014-02-08T08:47:39.887" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2461" PostTypeId="2" ParentId="2458" CreationDate="2014-02-09T16:54:55.617" Score="1" Body="&lt;p&gt;Yes this is a broad question, you answered it partially is depends on your project.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are working on a team, you probably would be responsible for the electrical, or mechanical, or navigation, and goes on, so you can go more deep inside the topic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, anyway, you should know sufficient about the other team topics to integrate things together.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are managing a project, working not in a big team, or want to get more specialized, there's so much things related to robotics. And as a base I would say: Electronics, mechanics, electro-mechanic, programming. This will include for example in mechanics, all the basic concepts, tons of literature and the experience you gain with time, and this includes how the things you study are manufactured. That includes (but not only) how the material is cut, welded, molded, each type of the processes and their pros and cons, etc. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Kits will help with this, but it will take some years to get all together, as the kits have the pieces manufactured, you probably don't experience the more manufacturing questions. You would not get complicated by &quot;will this method of joining&quot; two materials will be the correct choice for this type of application? Will the stress on it be a problem?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is just about mechanical, now take that to electrical, electro-mechanical, and programming, as you see, it takes time and effort. This means you would not know all about just one, you probably want to specialize in one subject once you get a project that will require it, but with the base and experience in this topics, it should be a more easily learning curve to get on the subject.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As robotic is a wide topic, you probably won't get all in small time, this would go with the experience, literature, already implemented solutions, and goes on.&lt;/p&gt;&#xA;" OwnerUserId="2447" LastActivityDate="2014-02-09T16:54:55.617" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2462" PostTypeId="1" AcceptedAnswerId="2466" CreationDate="2014-02-09T23:32:02.023" Score="2" ViewCount="1664" Body="&lt;p&gt;I have a Raspberry Pi with &lt;a href=&quot;https://www.sparkfun.com/products/9718&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt; FTDI cable and a Roomba 560. The Roomba has an SCI port to allow for control of the roomba via serial. I installed the PySerial library on the pi and send valid commands to Roomba, but the roomba doesn't respond. I have the TXD of the cable attached to the TXD of the roomba, the RXD on the cable wired to the RXD on the roomba, and a ground on the cable wired to the ground on the roomba (everything in  it's respective port). I do not have power going from the cable to the roomba or vice-versa.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I can't figure out is why the commands aren't working. There's no error message upon running the python code. &lt;a href=&quot;http://www.irobot.com/images/consumer/hacker/Roomba_SCI_Spec_Manual.pdf&quot; rel=&quot;nofollow&quot;&gt;This&lt;/a&gt; is the information sheet for the Roomba's SCI port.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;import serial&#xA;&#xA;ser = serial.Serial('/dev/ttyUSB0')&#xA;# this is the defualt Roomba baud rate&#xA;ser.baudrate = 57600&#xA;&#xA;# Start SCI - puts into safe mode&#xA;ser.write(chr(128))&#xA;# Enable full mode&#xA;ser.write(chr(131))&#xA;# Spot clean&#xA;ser.write(chr(134))&#xA;&#xA;print 'Done'&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="3794" LastActivityDate="2014-08-17T02:11:32.483" Title="Connecting a Raspberry Pi to a roomba via an FTDI cable" Tags="&lt;mobile-robot&gt;&lt;software&gt;&lt;wheeled-robot&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2463" PostTypeId="2" ParentId="2462" CreationDate="2014-02-10T06:16:57.187" Score="0" Body="&lt;p&gt;Try:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ser = serial.Serial('/dev/ttyUSB0', 57600)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(though from a quick look at the docs your way should work too).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A very common mistake is switching RX and TX.  The TX from your board need to go into the Roomb'a RX. Given your note about connecting TX to TX you've almost certainly wired this wrong.  TXD in your cable (JP1-4) is an output and needs to go into RXD in the Roomba which is the corresponding input.  Looks like reversing these shouldn't cause any damage as your cable schematic shows a 100ohm resistor in series with TXD.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I see there's also a &quot;device detect&quot; input on the Roomba which seems to only be needed when the Roomba is &quot;sleeping&quot; but you may want to wire it to RTS so you can control it.&lt;/p&gt;&#xA;" OwnerUserId="1584" LastEditorUserId="1584" LastEditDate="2014-02-10T06:24:54.073" LastActivityDate="2014-02-10T06:24:54.073" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2464" PostTypeId="2" ParentId="2462" CreationDate="2014-02-10T07:47:52.557" Score="0" Body="&lt;ol&gt;&#xA;&lt;li&gt;Even though the port is automatically opened when the Serial object is created, make sure that is open using &lt;code&gt;ser.isOpen()&lt;/code&gt;. If it is not opened, then open it with &lt;code&gt;ser.open()&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Try to add a small pause between the &lt;code&gt;ser.write&lt;/code&gt; commands&lt;/li&gt;&#xA;&lt;li&gt;Make sure you connected the ground to the correct pin. Maybe you connected it to pin 5 (on the roomba connector) instead on 6 or 7&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="1445" LastEditorUserId="1445" LastEditDate="2014-02-10T08:24:34.253" LastActivityDate="2014-02-10T08:24:34.253" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2465" PostTypeId="1" CreationDate="2014-02-10T08:44:05.643" Score="3" ViewCount="806" Body="&lt;p&gt;I'm looking for low-cost depth cameras (less than 1000 USD) with a range of more than 3 meters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Currently, I have found only SoftKinetic DS-311 that meets these requirements. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are some other low-cost cameras that I found, but they have a short range:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;pmd[vision] camboard nano&lt;/li&gt;&#xA;&lt;li&gt;SoftKinetic DS-325&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;and others with a long range but high cost&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Panasonic D-Imager&lt;/li&gt;&#xA;&lt;li&gt;pmd[vision] CamCube 3.0&lt;/li&gt;&#xA;&lt;li&gt;SwissRanger SR4500&lt;/li&gt;&#xA;&lt;li&gt;Odos Imaging Real.iZ-1K&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="3798" LastActivityDate="2014-02-10T08:44:05.643" Title="Alternatives to Primesense depth cameras?" Tags="&lt;sensors&gt;&lt;kinect&gt;&lt;computer-vision&gt;" AnswerCount="0" CommentCount="4" ClosedDate="2014-02-12T19:18:54.823" ContentLicense="CC BY-SA 3.0" />
  <row Id="2466" PostTypeId="2" ParentId="2462" CreationDate="2014-02-10T15:59:45.320" Score="2" Body="&lt;p&gt;It turns out that the statement in the Roomba SCI spec sheet about ports is either outdated or incorrect. The Roomba 5XX series (and 7XX series) uses port 115200 to communicate, and that's what was wrong.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Wiring: I wired the TXD of the cable to the RXD of the roomba (so the orange cable would go into port 3 on the roomba), and vice versa. I also wired the ground and that was all that was needed.&lt;/p&gt;&#xA;" OwnerUserId="3794" LastEditorUserId="3794" LastEditDate="2014-02-12T17:13:31.553" LastActivityDate="2014-02-12T17:13:31.553" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2468" PostTypeId="2" ParentId="2453" CreationDate="2014-02-11T16:45:41.917" Score="1" Body="&lt;p&gt;Are you trying to learn about electronics, flying quadcopters, or both? If it's just flying, then I would consider buying one of the little models in a wireframe cage for practicing flying. If it's both, then here are a couple of things to consider:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;There are &quot;pusher&quot; and &quot;puller&quot; rotors. You will need two of each.&lt;/li&gt;&#xA;&lt;li&gt;Don't make your own flight controller. Buy an already-made one. They are complex, and do a lot. And you can get a great one for $50 or less.&lt;/li&gt;&#xA;&lt;li&gt;Voltage levels matter. You'll want most things regulated to 3.3 or 5 volts. A good flight controller will do this for you.&lt;/li&gt;&#xA;&lt;li&gt;Buy an air frame with ESCs and motors already attached. While you don't have to do this, it's easier and there will be less things that can go wrong.&lt;/li&gt;&#xA;&lt;li&gt;(Shameless self promotion alert) You can take a look at &lt;a href=&quot;http://www.thecoldheartofspace.com&quot; rel=&quot;nofollow&quot;&gt;my build blog&lt;/a&gt;  for some step-by-step guidance. I'm not completely done yet, but I'm getting there.&lt;/li&gt;&#xA;&lt;li&gt;You will want a telemetry radio. They are sometimes called 3DR (after the company that builds the standard one). Take a look at &lt;a href=&quot;http://www.thecoldheartofspace.com/2013/12/lets-talk-about-parts.html&quot; rel=&quot;nofollow&quot;&gt;my parts list&lt;/a&gt; and you'll see links to it.&lt;/li&gt;&#xA;&lt;li&gt;If you use an ArduPilot or MegaPirateNG (my recommendation) compatible flight controller, then you can use a wonderful free program called &lt;a href=&quot;http://planner.ardupilot.com/&quot; rel=&quot;nofollow&quot;&gt;Mission Planner&lt;/a&gt;. I highly recommend it.&lt;/li&gt;&#xA;&lt;li&gt;If you use one of the flight controllers I spoke about in item 7, your firmware is already written for you. Just download, set your board style, build, and upload to your AVR. It's wonderful.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="2589" LastActivityDate="2014-02-11T16:45:41.917" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2470" PostTypeId="1" AcceptedAnswerId="2472" CreationDate="2014-02-11T12:38:16.860" Score="1" ViewCount="350" Body="&lt;p&gt;I'm multimedia developer who is searching for a way to get GPS signal inside buildings/structures. Is amplification a reliable way to fix this GPS signal issue?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Will a &quot;GPS Amplifier&quot; work as perfectly as using GPS outside?&lt;/p&gt;&#xA;" OwnerUserId="3846" OwnerDisplayName="fiskolin" LastEditorUserId="350" LastEditDate="2014-02-12T16:32:34.147" LastActivityDate="2014-02-12T17:33:32.757" Title="GPS Amplifier - Is this reliable?" Tags="&lt;wireless&gt;&lt;gps&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2471" PostTypeId="2" ParentId="2470" CreationDate="2014-02-11T15:59:03.813" Score="2" Body="&lt;p&gt;GPS relies on trilateration to work. That is, the calculated distance from at least three satellites, to fix. So, for working &lt;em&gt;exactly&lt;/em&gt; like in an outdoor GPS covered signal environment I doubt it will be feasible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you get with that &lt;em&gt;repeaters&lt;/em&gt;, is that the indoor devices will get the position of the external antenna/receiver.&lt;strong&gt;¹&lt;/strong&gt;. So if you have a big space and move inside it you will get the same position from the GPS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So it will depend on your application if this is sufficient or not.&#xA;One way it will work is like some repeaters within a big mine for example, so it will show some location points, but this is for legacy compatibility of the signal. If the devices are able to read the location from other types of signals a simple beacon transmitting a programmed location will work, and without any external antennas.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;&lt;strong&gt;Note 1:&lt;/strong&gt; the repeater inside the building will relay the exact co-ordinates of the outdoor antenna to the interior of the building - it will not provide co-ordinates for the repeater unit itself. From &lt;a href=&quot;http://www.gps-repeaters.com&quot; rel=&quot;nofollow&quot;&gt;http://www.gps-repeaters.com&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;" OwnerUserId="2447" OwnerDisplayName="Diego C Nascimento" LastActivityDate="2014-02-11T19:41:05.347" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2472" PostTypeId="2" ParentId="2470" CreationDate="2014-02-12T17:20:54.683" Score="2" Body="&lt;p&gt;The short answer is no.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By amplifying a GPS signal, you are creating a multipath situation. Instead of the proper signal path from the satellite directly to the receiver, you would be creating a &lt;a href=&quot;http://en.wikipedia.org/wiki/Triangle_inequality&quot; rel=&quot;nofollow noreferrer&quot;&gt;triangle inequality&lt;/a&gt; (unless your amplifiers just happened to be exactly in line between each satellite and the receiver).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2XFCp.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2XFCp.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might decide that having an imperfect signal inside the building is better than no signal at all.  However, the bigger issue is that you'd be magnifying the multipath effects for any GPS receivers &lt;em&gt;outside&lt;/em&gt; the building.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should look at an alternate GPS-like technology, such as radio-frequency &lt;strong&gt;TDOA&lt;/strong&gt; (time-difference of arrival).  &lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2014-02-12T17:33:32.757" LastActivityDate="2014-02-12T17:33:32.757" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2475" PostTypeId="2" ParentId="2376" CreationDate="2014-02-14T18:45:12.830" Score="3" Body="&lt;p&gt;You can use all versions of the Kinect for Windows SDK, even with an Xbox-version. Some parts are limited and you require a Kinect for Windows in commercial scenarios (more information on &lt;a href=&quot;http://www.kinectingforwindows.com/2012/09/07/what-is-the-difference-between-kinect-for-windows-kinect-for-xbox360/&quot; rel=&quot;nofollow&quot;&gt;my blog&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your scenario you should be able to use the official &lt;strong&gt;Kinect for Windows SDK v1.8&lt;/strong&gt; to use the speech/sound scenario. If you are going to do speech/voice recognition, in &lt;a href=&quot;http://www.kinectingforwindows.com/2013/12/01/kinecting-ar-drone-pt-i-basic-ui-kinect-camera-voice-recognition/&quot; rel=&quot;nofollow&quot;&gt;this post&lt;/a&gt; I set up a basic version to controll my drone which should be the same.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You don't need to use VIsual Studio but C#/C++/VB.net require a compiler to run the code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;CONCLUSION -&lt;/strong&gt; The official SDK will fit your needs, incl. support for speech/voice, but if you want to deploy the application in public you'll need the Kinect for Windows sensor for the public license.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;More questions? --&gt; hello[at]kinectingforwindows[dot]com&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="3821" LastActivityDate="2014-02-14T18:45:12.830" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2476" PostTypeId="1" AcceptedAnswerId="2477" CreationDate="2014-02-14T21:24:40.963" Score="5" ViewCount="421" Body="&lt;p&gt;I am planning on creating a quad-copter with my Arduino that I have. I have created a few land robots before but no aerial vehicles, so this is all new to me. I was looking on the Internet for different models, and I see that most robots have 4 propellers. I have also seen a few hexacopters (?) and octocopters but that many propellers can't get a but out of hand. Does having 4 propellers the best and most efficient thrust to weight ratio, or will 3 propellers/arms work better?&lt;/p&gt;&#xA;" OwnerUserId="3823" LastActivityDate="2014-02-17T05:22:27.150" Title="Benefits of the Number of Propellers" Tags="&lt;quadcopter&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2477" PostTypeId="2" ParentId="2476" CreationDate="2014-02-17T05:22:27.150" Score="0" Body="&lt;p&gt;Four fixed pitch propellers is one of the simplest configurations.  The motors are mounted rigidly and the control of the vehicle is 100% electronic through controlling the speed of the propellers ( &lt;a href=&quot;http://en.wikipedia.org/wiki/Quadcopter#Flight_control&quot; rel=&quot;nofollow&quot;&gt;http://en.wikipedia.org/wiki/Quadcopter#Flight_control&lt;/a&gt; ).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the classical two prop helicopter configuration you need pitch control for the main rotor.  Let's say you have two blades on the main rotor you would need two additional actuators and you end up with a more complex and expensive design.  I think you could get by without pitch control of the tail rotor but I'm not sure. ( &lt;a href=&quot;http://en.wikipedia.org/wiki/Helicopter_flight_controls#Flight_conditions&quot; rel=&quot;nofollow&quot;&gt;http://en.wikipedia.org/wiki/Helicopter_flight_controls#Flight_conditions&lt;/a&gt; )&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A tri-copter would typically need tilt control of the rear motor. ( &lt;a href=&quot;http://en.wikipedia.org/wiki/Multirotor&quot; rel=&quot;nofollow&quot;&gt;http://en.wikipedia.org/wiki/Multirotor&lt;/a&gt; )&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The basic physics of the situation is that in order to move freely around in 3d space you require certain degrees of freedom.  A quadcopter is arguably the simplest mechanical design that provides those degrees of freedom.  It's a trade-off.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In terms of additional propellers, the trade-off is often the inertia of a single propeller.  Higher inertia means it's harder to change the speed of the propeller and so the vehicle is less agile and less controllable.  Therefore to generate more lift more propellers are often a better choice than a larger propellers (if you stick with the premise of fixed pitch, fixed mount).  Since adding one prop doesn't really make much sense you mostly see an even number of propellers.&lt;/p&gt;&#xA;" OwnerUserId="1584" LastActivityDate="2014-02-17T05:22:27.150" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2480" PostTypeId="1" CreationDate="2014-02-18T09:50:37.203" Score="1" ViewCount="284" Body="&lt;p&gt;I've really tried to find something online that's suitable but what I'm after is&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've two concentric circular rings, one of which has a diameter about 10mm smaller than the larger .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The rings themselves are in the region of 300mm diameter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm trying to find a way to connect the two together and allow the smaller to 'slide' in a circular rotational way within the larger one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm also trying to let the 2 rings pivot vertically in relation to each other - the intention being of producing a gyroscopic-esque motion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/n4jO3.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/n4jO3.jpg&quot; alt=&quot;diagram of it&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What type of bearings/tracks/spindles would suffice?&lt;/p&gt;&#xA;" OwnerUserId="3838" LastEditorUserId="350" LastEditDate="2014-02-21T15:33:47.930" LastActivityDate="2015-04-03T23:58:40.520" Title="looking for a circular track and bearing with a spindle" Tags="&lt;tracks&gt;&lt;linear-bearing&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2481" PostTypeId="1" AcceptedAnswerId="2484" CreationDate="2014-02-18T11:03:31.773" Score="1" ViewCount="198" Body="&lt;p&gt;I would like to write a simple program which processes the depth feed from an Asus xtion depth sensor using OpenNI. The sensor will be fixed like a CCTV camera and count multiple targets moving around. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The processing would involve some simple functions on each frame (background subtraction, level sets, connected components filter), and some multi-target tracking across frames. I have searched the web, but it is hard to see how best to get started (and I'm also quite new to programming in C). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone recommend any existing code that can help to get started / any libraries which would be suitable for this real-time application? Or perhaps there is some opensource code which already does such a thing? Would really appreciate any pointers from anyone with experience. Thanks!&lt;/p&gt;&#xA;" OwnerUserId="3840" LastEditorUserId="158" LastEditDate="2014-02-18T18:30:40.660" LastActivityDate="2014-02-18T18:30:40.660" Title="writing a simple program for processing RGBD video with OpenNI" Tags="&lt;openni&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2484" PostTypeId="2" ParentId="2481" CreationDate="2014-02-18T13:55:44.690" Score="0" Body="&lt;p&gt;I work with ASUS Xtion as well. The best library that I found so far and I am using daily is &lt;strong&gt;Point Cloud Library&lt;/strong&gt; (&lt;strong&gt;PCL&lt;/strong&gt;). You can find, download, and Install it from &lt;a href=&quot;http://pointclouds.org/&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After installing and getting it to work, you can go to the tutorial section of the website, and there is a &lt;a href=&quot;http://pointclouds.org/documentation/tutorials/ground_based_rgbd_people_detection.php#ground-based-rgbd-people-detection&quot; rel=&quot;nofollow&quot;&gt;very good tutorial&lt;/a&gt; similar to what you want. There is a &lt;strong&gt;pcl_people module&lt;/strong&gt; that you can start from.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This tutorial aims at explaining how to detect people from &lt;strong&gt;RGB-D&lt;/strong&gt; data with the &lt;strong&gt;pcl_people module&lt;/strong&gt;. With the proposed method, people standing/walking on a planar ground plane can be detected in &lt;strong&gt;real time&lt;/strong&gt; with standard CPU computation. This implementation corresponds to a people detection algorithm for RGB-D data.&lt;/p&gt;&#xA;" OwnerUserId="1850" LastActivityDate="2014-02-18T13:55:44.690" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2485" PostTypeId="2" ParentId="49" CreationDate="2014-02-18T15:02:03.900" Score="3" Body="&lt;p&gt;I actually work as a programmer for the tractors that bit-pirate mentioned.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are several ways mentioned that can get you more accurate results. It depends largely on your application and what you are trying to accomplish.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Wide_Area_Augmentation_System&quot; rel=&quot;nofollow&quot;&gt;WASS&lt;/a&gt; uses a signal to augment not as accurate as some other methods but you will get decent.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If your platform is fixed you can just average the position over time and get good results.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;RTK is very accurate, and the library mentioned by Jakob looks pretty cool. Some states like Iowa have a government run RTK system that you can use. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I found &lt;a href=&quot;http://gizmodo.com/no-gps-signal-no-problem-this-little-chip-knows-where-1518907218&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt; the other day for dead reckoning.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;On a mobile system the antennae offset to the center of gravity will effect the accuracy. E.G. On a steep hill the GPS antennae will be off center.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;What are you trying to accomplish? The atmospheric distortion for multiple antennas in the same location would be very similar.  &lt;/p&gt;&#xA;" OwnerUserId="3843" LastEditorUserId="350" LastEditDate="2014-02-19T16:02:43.767" LastActivityDate="2014-02-19T16:02:43.767" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2486" PostTypeId="1" CreationDate="2014-02-19T13:50:06.987" Score="1" ViewCount="93" Body="&lt;p&gt;In my bachelor, I programmed CNC machines. Now, working with an Industrial robot arm, I learn that their programming languages are mostly similar. VAL is a typical example, for instance:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;PROGRAM PICKPLACE&#xA;  1. MOVE P1&#xA;  2. MOVE P2&#xA;  3. MOVE P3&#xA;  4. CLOSEI 0.00&#xA;  5. MOVE P4&#xA;  6. MOVE P5&#xA;  7. OPENI 0.00&#xA;  8. MOVE P1&#xA;.END&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Most of the cases, control of a robot arm is similar to this example. Cleary, move end-effector to a point with a given pose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But... is there any way that I can control the end-effector (EE) speed? An example is &quot;Move EE to P1 with time duration T1&quot;, or &quot;Move EE to P1 with velocity V1&quot; (I could have only seen defining for joint rotational velocity) In other way of speaking, I can command the EE to move from P0 to P1 but cannot control the duration of that traverse which is necessary in cases of EE velocity control&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the programming manual for my robot mediafire.com/?agl76pi7t7v4hjv. The velocity control I'm talking about is not joint velocity but end-effector velocity. But EE_screw = robot_Jacobian*joint_vel which means to control EE velocity, it resolves in control joint velocity. About the inverse kinematic, I've already programmed a module to solve the robot&lt;/p&gt;&#xA;&#xA;&lt;p&gt;the experienced in robotics programming and VAL please help! I've stuck in this problem for months&lt;/p&gt;&#xA;" OwnerUserId="1282" LastEditorUserId="482" LastEditDate="2014-02-19T16:53:11.760" LastActivityDate="2014-02-19T16:53:11.760" Title="VAL language and velocity control of industrial robot" Tags="&lt;control&gt;&lt;manipulator&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2488" PostTypeId="1" AcceptedAnswerId="2490" CreationDate="2014-02-19T20:29:09.470" Score="2" ViewCount="126" Body="&lt;p&gt;Can I assume the noise of motion model to be zero? If so, what are the consequences of doing so?&lt;/p&gt;&#xA;" OwnerUserId="2155" LastActivityDate="2014-02-19T22:34:28.233" Title="Can motion model noise be zero?" Tags="&lt;kalman-filter&gt;&lt;noise&gt;&lt;ekf&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2489" PostTypeId="1" AcceptedAnswerId="2492" CreationDate="2014-02-19T22:00:45.633" Score="3" ViewCount="1612" Body="&lt;p&gt;So my team made a Vex robot for the &lt;a href=&quot;http://www.vexrobotics.com/wiki/Toss_Up&quot; rel=&quot;nofollow&quot;&gt;toss-up competition&lt;/a&gt;, but we need the arm up during the autonomous. The problem is that it's too heavy to stay up on its own. I was going to use encoders to count what angle the arm is at. I was going to use this code, but I'm not sure if there's a better way.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; while(MotorEncoder[rightMotor] &amp;lt; 1000)&#xA;  {&#xA;    motor[rightMotor] = 80;&#xA;    motor[leftMotor] = 80;&#xA;  }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Would anyone recommend a better solution or is this the best way? This is untested by the way.&lt;/p&gt;&#xA;" OwnerUserId="3857" LastEditorUserId="350" LastEditDate="2014-02-19T22:03:10.110" LastActivityDate="2014-03-08T02:03:42.813" Title="VeX - Keeping arm at an angle" Tags="&lt;robotic-arm&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2490" PostTypeId="2" ParentId="2488" CreationDate="2014-02-19T22:34:28.233" Score="4" Body="&lt;p&gt;I'm assuming this is with respect to a Kalman filter?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mathematically, yes it can be zero. The effect of this is that model is assumed to be perfect and estimation uncertainty is due 100% to the uncertainty in the initial state. In the extreme case, if you assume 0 initial uncertainty you will never have any model uncertainty and all your measurements will be ignored.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even assuming non-zero initial uncertainty the behavior will probably not be what is expected. Consider a simple position+velocity state vector. Over time, the position uncertainty will grow a little bit due to initial velocity uncertainty, but the velocity uncertainty will be constant. No matter how long you wait until the first measurement arrives the velocity estimate will have low uncertainty so not much weight will be given to the measurement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, all usage scenarios that I've seen have non-zero dynamic noise.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2014-02-19T22:34:28.233" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2491" PostTypeId="1" CreationDate="2014-02-19T22:56:51.680" Score="1" ViewCount="2570" Body="&lt;p&gt;I have to build a line following robot that will be able to detect a selected colored line on the floor and start following it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How do color sensors do this after detecting the specific colored line?&lt;/p&gt;&#xA;" OwnerUserId="3858" LastEditorUserId="350" LastEditDate="2014-02-21T15:30:48.013" LastActivityDate="2017-07-24T14:09:44.037" Title="How are color sensors used for line following?" Tags="&lt;mobile-robot&gt;&lt;sensors&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2492" PostTypeId="2" ParentId="2489" CreationDate="2014-02-20T03:35:31.863" Score="0" Body="&lt;p&gt;Some clarifications before i answer.  when you say &quot;its too heavy to stay up on its own&quot; do you mean that the arm is too heavy for the motor, or the arm doesn't stay at an angle when the motor is not powered?  also, why are you controlling two motors, and reading only one encoder?  perhaps you should provide a better description of your arm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;that being said, i would use simple proportional control for this.  (proportional control being the &quot;P&quot; in what is more commonly called PID control).  what you have above is called &quot;bang&quot; control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;basically, you just set up a linear relationship between encoder readings and motor current.  (actually the difference between encoder readings of where the arm is and where you want it to be).  For example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; void set_arm_to_angle(int angle)&#xA; {&#xA;     int P = 200;&#xA;     int error = angle - MotorEncoder[rightMotor];&#xA;     motor[rightMotor] = P * error&#xA; }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;you should be able to find lots of info on proportional control on the web.  but basically, if the arm is lower than where you want, positive current is applied to raise the arm.  the farther away from your desired angle, the more current.  if the arm is too high, current is reversed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;it can be a little tricky figuring out the right gain (P).  too low, and the arm won't move, too high and the arm will oscillate.  i wouldn't worry about the I and D terms.  but adding some friction to the arm might help.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and if you want more info on more advanced robot arm topics, this page give a gentle overview: &lt;a href=&quot;http://www.societyofrobots.com/robot_arm_tutorial.shtml&quot; rel=&quot;nofollow&quot;&gt;http://www.societyofrobots.com/robot_arm_tutorial.shtml&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-02-20T03:35:31.863" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2493" PostTypeId="2" ParentId="775" CreationDate="2014-02-20T03:38:13.187" Score="1" Body="&lt;p&gt;this page gives a nice overview of joint torque requirements for robot arms.  and even provides a simple calculator. &lt;a href=&quot;http://www.societyofrobots.com/robot_arm_tutorial.shtml&quot; rel=&quot;nofollow&quot;&gt;http://www.societyofrobots.com/robot_arm_tutorial.shtml&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-02-20T03:38:13.187" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2494" PostTypeId="1" CreationDate="2014-02-20T10:45:32.733" Score="5" ViewCount="417" Body="&lt;p&gt;I am working on SLAM for autonomous car like vehicles with 2D lasers and IMU (deriving odometry).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to know how efficient is using the existing SLAM algorithms (for example: gmapping in ROS based on rao blackwellized particle filter).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;till now i find MAP are high in volume and speed of vehicle is high and most importantly computational time compared to Mobile robots.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there  any other important factors to consider for car like vehicles in using SLAM algorithm.&lt;/p&gt;&#xA;" OwnerUserId="714" LastEditorUserId="37" LastEditDate="2017-01-04T11:51:10.023" LastActivityDate="2017-02-03T20:11:43.887" Title="SLAM for Autonomous car" Tags="&lt;mobile-robot&gt;&lt;localization&gt;&lt;slam&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2496" PostTypeId="2" ParentId="2491" CreationDate="2014-02-21T08:42:17.723" Score="-1" Body="&lt;p&gt;It might require a little bit of soldering to create such a color sensor, but you can probably handle it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The easiest way to create a color sensor for such an application is by using a reflective optical sensor such as the following:&#xA;&lt;a href=&quot;http://www.engr.ucsb.edu/~mdnip/me170c/datasheets/QRB1114.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Optical Sensor&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is basically just a light detector and a LED. The light emitted from the LED gets reflected by the surface and hits the detector. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The amount of reflected light is dependent on many things, but mainly on the color of the surface. If the surface is black all the light will be absorbed and the detector won't see any light. If the surface is white the detector will see a lot of light and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/9eZdS.gif&quot; alt=&quot;Image i found on google images&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To create an linetracking sensor for the robot i suggest that you use several (e.g. 6) of these sensors and place them pointing downwards on the front bumper of the robot. You can now detect where the line is by looking at the individual sensors and detecting which one (or more) sees less or more light.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This will give you a relatively cheap sensor that should be sufficient for a line tracking robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The downside is however that it requires a bit of soldering. On google i have found the following diagram that you might use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/l1IHg.png&quot; alt=&quot;Circuit&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="1670" LastActivityDate="2014-02-21T08:42:17.723" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2498" PostTypeId="1" CreationDate="2014-02-21T22:23:46.223" Score="3" ViewCount="211" Body="&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/G3Jxp.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What would the equations be for the robot's angular and linear velocity at P and also P2? I think I'm doing it wrong...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;WL = left wheels angular velocity&#xA;WR = right wheels angular velocity&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For P I had for example the linear velocity = (1/3)&lt;em&gt;r&lt;/em&gt;WL + (2/3)&lt;em&gt;2r&lt;/em&gt;WR&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Am I on right track?&lt;/p&gt;&#xA;" OwnerUserId="3867" LastActivityDate="2014-06-01T05:24:39.243" Title="Forward Kinematics Two fixed standard wheels" Tags="&lt;kinematics&gt;&lt;wheel&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2499" PostTypeId="1" AcceptedAnswerId="2502" CreationDate="2014-02-23T18:49:51.070" Score="3" ViewCount="156" Body="&lt;p&gt;I know that inverse kinematics ($p \rightarrow q$, p: desired pose of the end-effector, q: joint angles) is not a function because there might be multiple joint angle vectors q that result in the same pose p.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By inverse dynamics control I mean the mapping $(q, \dot{q}, \ddot{q}) \rightarrow u$ (u: required torques. I am not very experienced with these kind of problems. Is the mapping a function, i.e. for each triple $(q, \dot{q}, \ddot{q})$ there is a &lt;em&gt;unique&lt;/em&gt; solution u? My intuition says it is. But I am not sure. If there is not, would it always be possible to obtain a solution by averaging two or more solutions?&lt;/p&gt;&#xA;" OwnerUserId="3875" LastEditorUserId="3875" LastEditDate="2014-02-24T15:53:26.273" LastActivityDate="2014-02-24T15:53:26.273" Title="Can inverse dynamics control be regarded as a function?" Tags="&lt;dynamics&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2502" PostTypeId="2" ParentId="2499" CreationDate="2014-02-24T15:18:18.630" Score="3" Body="&lt;p&gt;I think you are confusing 2 issues.  &lt;em&gt;Inverse dynamics&lt;/em&gt; is the process of mapping end effector position, velocity, and acceleration to joint torques.  as described in this book, page 298: &lt;a href=&quot;http://books.google.com/books?id=jPCAFmE-logC&amp;amp;lpg=PR2&amp;amp;pg=PA298#v=onepage&amp;amp;q=inverse%20dynamics&amp;amp;f=false&quot; rel=&quot;nofollow&quot;&gt;http://books.google.com/books?id=jPCAFmE-logC&amp;amp;lpg=PR2&amp;amp;pg=PA298#v=onepage&amp;amp;q=inverse%20dynamics&amp;amp;f=false&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the paper you posted is simply modeling and calibrating their robot's non-geometric parameters.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So i think there can be multiple solutions to the inverse dynamics problem as i define above.  because when only given the end effector parameters, the arm can potentially be in different configurations to realize this.  a simple example is a 2 link planar arm where the elbow can be on either side.  as seen in figure 2.31, page 93: &lt;a href=&quot;http://books.google.com/books?id=jPCAFmE-logC&amp;amp;lpg=PR2&amp;amp;pg=PA93#v=onepage&amp;amp;q=two-link%20planar%20arm&amp;amp;f=false&quot; rel=&quot;nofollow&quot;&gt;http://books.google.com/books?id=jPCAFmE-logC&amp;amp;lpg=PR2&amp;amp;pg=PA93#v=onepage&amp;amp;q=two-link%20planar%20arm&amp;amp;f=false&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;but i still think the problem as you describe, mapping joint position, velocity, and acceleration to joint torques is a low-level control problem and probably has a unique solution.  however, when factoring in nonlinearities like friction can probably make the answer non-unique.  for example, imagine a joint with lots of friction.  a range of joint torques will be sufficient to hold the joint at a given angle.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-02-24T15:18:18.630" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2503" PostTypeId="2" ParentId="2424" CreationDate="2014-02-24T18:01:30.160" Score="1" Body="&lt;p&gt;I have done something similar to this. I used a Samsung Galaxy onboard an APM2.6-based quadcopter. As a starting point, I used &lt;a href=&quot;https://github.com/DroidPlanner/droidplanner&quot; rel=&quot;nofollow&quot;&gt;DroidPlanner&lt;/a&gt; and it was a pretty simple matter to use the same libraries it does. Then I used another Galaxy with a screen-mirroring application over wifi to run the app.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's good that you realize the importance of keeping RC receiver control available -- this is important for safety. You should set up your code so that it runs in &quot;auto&quot; mode and have switches on your receiver set up so that you can change the flight mode back to stabilize easily.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's worth noting that APM's mavlink implementation is very incomplete. It simply ignores some of the parameters of some of the commands. For example, when you send a waypoint, it ignores the yaw parameter. Here's a &lt;a href=&quot;https://github.com/diydrones/ardupilot/pull/554&quot; rel=&quot;nofollow&quot;&gt;pull request&lt;/a&gt; (never got into trunk) I submitted that fixes this and might be useful for you if you want to modify APM's mavlink implementation. Still, I think this is probably a better solution than generating PWM with the ADK.&lt;/p&gt;&#xA;" OwnerUserId="1473" LastEditorUserId="1473" LastEditDate="2014-02-24T18:06:53.383" LastActivityDate="2014-02-24T18:06:53.383" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2504" PostTypeId="1" CreationDate="2014-02-25T15:41:25.210" Score="3" ViewCount="6833" Body="&lt;p&gt;I have big problem. I have to solve inverse kinematics for a manipulator with 6-DOF using jacobian method. From what I know to do that I need to have matrix of transformation and Denavit–Hartenberg parameters, which both I have. But I am not a mathematician, and descriptions I find on the web are not even a bit understandable to me. So I would love if you could give me an example of how to solve my problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Denavit-Hartenberg parameters are:&#xA;$$&#xA;        \begin{matrix}&#xA;        \alpha &amp;amp; l &amp;amp; \lambda &amp;amp; \theta\\&#xA;        90 &amp;amp; 150 &amp;amp; 0 &amp;amp; var(-69) \\&#xA;        0 &amp;amp; 610 &amp;amp; 0 &amp;amp; var(85) \\&#xA;        90 &amp;amp; 110 &amp;amp; 0 &amp;amp; var(-52) \\&#xA;        -90 &amp;amp; 0 &amp;amp; 610 &amp;amp; var(62) \\&#xA;        90 &amp;amp; 0 &amp;amp; 113 &amp;amp; var(-60) \\&#xA;        0 &amp;amp; 0 &amp;amp; 78 &amp;amp; var(-108) \\&#xA;        \end{matrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The values in theta are values to get the following matrix of transformation, and values I want to get with this jacobian method. And those values are in degrees.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Matrix of transformation:&#xA;$$&#xA;        \begin{matrix}&#xA;        0.7225 &amp;amp; 0.0533 &amp;amp; 0.6893 &amp;amp; 199.1777\\&#xA;        -0.2557 &amp;amp; -0.9057 &amp;amp; 0.3381 &amp;amp; -500.4789\\&#xA;        0.6423 &amp;amp; -0.4206 &amp;amp; -0.6408 &amp;amp; 51.6795\\&#xA;        0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\&#xA;        \end{matrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would be most greatful, if someone could walk me through how to solve it in simple language.&lt;/p&gt;&#xA;" OwnerUserId="2543" LastActivityDate="2018-03-30T09:57:46.050" Title="Jacobian method for inverse kinematics" Tags="&lt;inverse-kinematics&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2507" PostTypeId="1" AcceptedAnswerId="2512" CreationDate="2014-02-26T09:40:25.650" Score="1" ViewCount="197" Body="&lt;p&gt;I want to begin robotics.So as a beginner what micro-controller would be convenient?Arduino or PIC?what type of robots can be built with arduino or PIC? Should I start from just a line-following vehicle? &lt;/p&gt;&#xA;" OwnerUserId="3895" LastActivityDate="2014-02-27T00:44:35.470" Title="robotics as a beginner" Tags="&lt;arduino&gt;&lt;microcontroller&gt;&lt;beginner&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="2" ClosedDate="2014-03-04T12:18:22.920" ContentLicense="CC BY-SA 3.0" />
  <row Id="2508" PostTypeId="1" CreationDate="2014-02-26T17:26:46.927" Score="1" ViewCount="200" Body="&lt;p&gt;Can anyone recommend a commercial or solid, reliable DIY solution for scanning cylindrical objects? I've seen a couple of simple hacks for flatbed scanners, but I'm looking for something I could make or buy for a commercial project that work reliably.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many thanks&lt;/p&gt;&#xA;" OwnerUserId="671" LastActivityDate="2018-01-25T16:16:59.690" Title="Looking for a way to scan cylindrical objects" Tags="&lt;stepper-motor&gt;" AnswerCount="1" CommentCount="5" ClosedDate="2018-01-25T17:12:20.647" ContentLicense="CC BY-SA 3.0" />
  <row Id="2510" PostTypeId="1" AcceptedAnswerId="2517" CreationDate="2014-02-26T23:03:30.713" Score="0" ViewCount="192" Body="&lt;p&gt;I would like to know if there is a good source that combines Slam problem with vision. From mathematical perspective, there are numerous resources that handle SLAM ,however, I didn't find a good source that focuses on slam and vision.  &lt;/p&gt;&#xA;" OwnerUserId="2155" LastActivityDate="2014-02-27T14:10:03.990" Title="Slam and Vision (good resources)?" Tags="&lt;kalman-filter&gt;&lt;slam&gt;&lt;ekf&gt;" AnswerCount="1" CommentCount="3" ClosedDate="2014-03-16T10:30:42.267" ContentLicense="CC BY-SA 3.0" />
  <row Id="2511" PostTypeId="1" CreationDate="2014-02-27T00:22:59.740" Score="1" ViewCount="642" Body="&lt;p&gt;I am working on a Micromouse and it has three sensors. Call it S1,S2 and S3. For now, I have to use S1. The idea is this S1 controls the left motor and S3, the right motor. S2 will detect wall in the front. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyways, I am trying to write a code in C for the dsPIC30F4011 MCU which would continuously read Sensor values and after reading two consecutive values, it will compare the two values. Read happens every 0.1ms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Flow of the Code is as follows:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;// Initialize timer for generating interrupts every 0.1ms&#xA;// Pseudo-Code&#xA;void __attribute__((interrupt, auto_psv)) _T1Interrupt(void)&#xA;{&#xA;  int count = 0;      //Read Sensor1 and store value in Sensor1Value&#xA;  Sensor1Value = Sensor1;&#xA;  int i = count++;&#xA;&#xA;  //Now this is part where I am lost :(&#xA;  // I want to do this&#xA;* diff_S1Value = Sensor1Value(i = n+1) - Sensor1Value(i = n); // n is in the mathematical sense, like n+1 is 2 and n is 1&#xA;&#xA;  // So I want to compare the new value with the previous sensor value&#xA;  if (diff_S1Value != 0) // Checks if the difference is zero&#xA;  { //Duty Cycle of PWM that controls the Speed of the Motor&#xA;    Sensor1Value = Sensor1Value(i = n+2) + or - diff_S1Value;&#xA;    PDC1 = float k/Sensor1Value;&#xA;  }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So if you look at the line with the *, how do I compare two sensor values in real-time every 0.1ms ? Let me know if one wants to more info!!&lt;/p&gt;&#xA;" OwnerUserId="3905" LastEditorUserId="350" LastEditDate="2014-02-27T14:53:58.970" LastActivityDate="2014-02-27T14:53:58.970" Title="Find the difference between two consecutive sensor readings in real-time in C" Tags="&lt;c&gt;&lt;micromouse&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2512" PostTypeId="2" ParentId="2507" CreationDate="2014-02-27T00:44:35.470" Score="2" Body="&lt;p&gt;Alright, this is my first question that I am answering. I'll try to throw as much light as possible to clarify your doubt. I guess, I'll open the door to many more answers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyways, I am a 2nd Year Robotics Engineering student from Bristol, UK. I started out with an Arduino because when I entered Uni, I had no previous experience with electronics or even coding (zero knowledge infact). So, my uni had us start out with Arduino to get some coding experience with C. We did some coding on an Altera Development Board as well, that was to get us familiar with bit-wise operations for controlling hardware from the register level. Arduino is easier because you don't go into the territory of registers. You have pre-written functions for many operations like reading from sensors, writing to serial port, displaying strings etcetera. My first robot, my team named is Zeus was a helper robot, it's tasks were to follow wall, detect and avoid obstacles, identify and stop at the goal. The last task requires some algorithms to do it efficiently but hey, common, we just started out and so all we had to do was search the entire area, which was a fairly small one. We just had to connect sensors which were ready made and picked from the LEGO Kit and then just program them in Arduino using C. It was easy, the only thing that was difficult for us was we didn't have enough knowledge of C when coding, its easy now that I think back. Now, I am working on PIC Microcontroller, its a level above. Here you have to deal with registers and reading datasheets and configuring ports and yaada yaada yaada. I'd say start from scratch, learn how to use the Arduino first and when you successfully interface sensors with your motors on the Arduino platform which is again easy, then step up to do stuff like sending data wirelessly from a bluetooth back and forth between PC and Arduino. Then step up to do some small projects which will serve as foundation for the big stuff like line-follower robot. It's not as easy as the word sounds. It could be fairly easy on an Arduino but once you get into the discrete platforms like Atmel and PIC, you will deal with much more deeper levels of coding so to keep you strong for that, work on the Arduino a fair bit and then step up to the more complex MCUs like Atmel,PIC, Altera and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope that answers your question a little atleast. I might have missed something, let me know, if you need more clarity on a specific issue. &lt;/p&gt;&#xA;" OwnerUserId="3905" LastActivityDate="2014-02-27T00:44:35.470" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="2513" PostTypeId="2" ParentId="1083" CreationDate="2014-02-27T01:13:49.313" Score="2" Body="&lt;p&gt;Seems like you are using the Proximal convention. It's always good practice to have an extra frame called {X0,Y0,Z0} at the base. It makes visualizing so much easier. &lt;img src=&quot;https://i.stack.imgur.com/srlXd.png&quot; alt=&quot;It&amp;#39;s your picture modified a bit to make it easy&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyways, from the image below, I know, it's not good, but hey common, I made it using a mouse. Alright, so I'll Z0 is the base frame and Z1 is parallel to it because, its the rotating Joint1 and Z2 is coming out of the screen, because it is Joint2 and obviously since, Z2 and Z1 are perpendicular to each other X1 will be perpendicular to the plane created by Z1 and Z2. Since, Z2 and Z3 are parallel, X2 will be towards Z3, that is Joint3. Now, Z3 and Ze are perpendicular since, Joint4 is a wrist joint. X3 will be perpendicular to the plane made by Ze and Z3. Finally X4 can be placed arbitrarily but I placed it parallel to X3 since, again, its easier that way. Now shoot off your rules of measuring the DH parameters using the Proximal Convention and boom you are off. :D Have fun.. &lt;/p&gt;&#xA;" OwnerUserId="3905" LastActivityDate="2014-02-27T01:13:49.313" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2515" PostTypeId="2" ParentId="2511" CreationDate="2014-02-27T04:35:35.793" Score="2" Body="&lt;p&gt;You need to store the previous value somewhere, e.g. in a &lt;code&gt;static&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void ...&#xA;{&#xA;  static int previous_value = 0;&#xA;  int current_value = Sensor1;&#xA;  diff = current_value - previous_value;&#xA;  previous_value = current_value&#xA;...&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="1584" LastActivityDate="2014-02-27T04:35:35.793" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2516" PostTypeId="2" ParentId="2135" CreationDate="2014-02-27T11:34:17.603" Score="2" Body="&lt;p&gt;Yup, I guess you are. But there are tradeoffs you see in the methods you pick to solve a problem. Algebraic is alright if you want to solve things analytically and if there are atleast 3DOF. You don't wanna be doing for something as trivial as a 2DOF arm because, you'll just be wasting effort in trying to come up with crazy equations. Geometric on the other hand is alright until 2DOF, 3DOF a little bit more complex and then from there onwards you have to brainstorm quite a bit. But then again, it's come down to your preference as well. You see, I don't like either of the methods. I like to use the Exponential Coordinates method, you can find in a book called &quot;A Mathematical Introduction to Robotics Manipulation - Zhexiang Li, S.Sastry and R.Murray&quot;. It's an amazing book but anyways again, its upto you. For another example, one of my tutors for Robotics, she uses the algebraic method for everything she does no matter the DOF. So as I say its upto you. But if you say that you don't get the answer with one method and not the other then you're doing it wrong :D Have fun....^&lt;em&gt;_&lt;/em&gt;^&lt;/p&gt;&#xA;" OwnerUserId="3905" LastActivityDate="2014-02-27T11:34:17.603" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2517" PostTypeId="2" ParentId="2510" CreationDate="2014-02-27T11:47:43.523" Score="1" Body="&lt;p&gt;&lt;em&gt;Someuseful resources&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Video lecture&lt;/em&gt; : &lt;a href=&quot;http://videolectures.net/bmvc2012_davison_scene_perception/&quot; rel=&quot;nofollow&quot;&gt;Monocular SLAM and Real-Time Scene Perception&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Lecture slides from TU-Dresden&lt;/em&gt; &lt;a href=&quot;http://www.wv.inf.tu-dresden.de/~wiki/Robotics/Tutorials/SLAM-Summer-2006/Lectures/Lacroix/lacroix-visionSLAM.pdf&quot; rel=&quot;nofollow&quot;&gt;Vision-based SLAM lecture &lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Lecture from Bristol University (some links dead)&lt;/em&gt; : &lt;a href=&quot;http://www.cs.bris.ac.uk/Research/Vision/Resources/bmvctutorial/&quot; rel=&quot;nofollow&quot;&gt;Visual SLAM tutorial&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="714" LastEditorUserId="714" LastEditDate="2014-02-27T14:10:03.990" LastActivityDate="2014-02-27T14:10:03.990" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2518" PostTypeId="2" ParentId="2489" CreationDate="2014-02-27T14:46:31.327" Score="1" Body="&lt;p&gt;Can't comment but expanding on Ben's answer.&#xA;To get the general magnitude of P you consider the range of your inputs and outputs. For vex motor control you have a control parameter range of -127 to +127. Your angle input if coming straight from the encoder value is 360 per revolution with the Cortex. One recommendation: for an arm with a fixed range, you are better off using a potentiometer which gives you an absolute rather than relative range position. Just make sure you mount it in a way that the arm doesn't move outside of the pots range. Motion range is about 250 degrees. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back to the question of P. You want P such that the input to the motor is in its range. Figure out the maximum angle error. For example if you want the arm at position 80 and it starts out at 0, the initially the error is 80. Since you want the motor input to be as large at 127, P=127/80 .  For the pot, output range is about 4000 and your maximum error might be on the order of 2000, so initially try P=127/2000.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A final bit of advice, since you are using a simple proportional controller (only P, not I and D terms), you will have some droop. That is, you'll never be exactly at 80 since this means no error and hence no drive. So the arm will settle in at some point below that - hence droop. The simple solution used in this case is to have your set point a bit above the desired point so the set point - droop = desired point.  You can adjust this after you get P established.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A final bit of advice, have your competition switch hooked up and have someone standing by to move the switch to off. If you get values really wrong, your arm could go crazy and hurt some one, or even worse, break something on the robot. I've seen shafts (and done it myself) that are twisted like taffy.&lt;/p&gt;&#xA;" OwnerUserId="3913" LastActivityDate="2014-02-27T14:46:31.327" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2519" PostTypeId="1" CreationDate="2014-02-27T14:50:59.693" Score="6" ViewCount="1078" Body="&lt;p&gt;Motion is known to be confined in a sphere with radius of about 0.5m, and resolution doesn't have to be very high (5cm is enough). The device will actually be incorporated in a toy designed for kids.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried implementing that with an accelerometer but the estimated displacement drifted away 100s of meters per minute.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there some other solution, maybe involving electrical or magnetic fields? It's important that the sensor costs no more than a few bucks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt; The device should not be attached to anything mechanical and its movement is in 3d (a kid moves the toy freely).&lt;/p&gt;&#xA;" OwnerUserId="3912" LastEditorUserId="3912" LastEditDate="2014-03-02T16:57:11.910" LastActivityDate="2014-03-09T04:09:31.130" Title="How to measure displacement, cheaply and without using an accelerometer?" Tags="&lt;sensors&gt;&lt;imu&gt;" AnswerCount="6" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2522" PostTypeId="2" ParentId="2519" CreationDate="2014-02-28T02:16:24.853" Score="1" Body="&lt;p&gt;I guess it depends partially on volume. Ultrasonics is very precise (down to sub-mm depending on your signal processing and frequency), but they cost $8-10 per transducer unless you are buying in large volume.  &lt;/p&gt;&#xA;" OwnerUserId="3920" LastActivityDate="2014-02-28T02:16:24.853" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2524" PostTypeId="1" AcceptedAnswerId="2529" CreationDate="2014-02-28T13:57:24.480" Score="0" ViewCount="2897" Body="&lt;p&gt;I need to specify a fan motor combination and wondered if there are formulas that can work this out? The fan we are using is a crossflow fan:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/zenu6.jpg&quot; alt=&quot;cross flow fan&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I'm assuming the power required to drive it is derived from the number of blades, dimensions of blades (including angle of attack), dimension of barrel/wheel and the speed in RPM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this possible or does it need to be worked out practically with experimental measurements etc?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hopefully this is the correct stack for this question, if not then mods please feel free to edit/close. &lt;/p&gt;&#xA;" OwnerUserId="3923" LastActivityDate="2014-03-04T16:24:14.110" Title="How to calculate the power required to drive a fan" Tags="&lt;motor&gt;&lt;power&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2526" PostTypeId="1" CreationDate="2014-02-28T16:03:26.683" Score="3" ViewCount="235" Body="&lt;p&gt;I have been into a boggling paper research on neuromorphic engineering and its implications on robotics applications, lately. It is relatively a less applied field and full of academic papers and difficult to skim easily :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are many ongoing projects applying analog or digital circuitry design to implement neurosynaptic simulations of the brain. Consumer oriented products like IBM &lt;a href=&quot;http://www.research.ibm.com/cognitive-computing/neurosynaptic-chips.shtml?lnk=ushpls1&quot; rel=&quot;nofollow&quot;&gt;Synapse&lt;/a&gt; and Qualcomm's &lt;a href=&quot;http://www.qualcomm.com/media/blog/2013/10/10/introducing-qualcomm-zeroth-processors-brain-inspired-computing&quot; rel=&quot;nofollow&quot;&gt;Zeroth&lt;/a&gt; focus on digital hardware whereas academic research like Standford's &lt;a href=&quot;http://www.stanford.edu/group/brainsinsilicon/neurogrid.html&quot; rel=&quot;nofollow&quot;&gt;neurogrid&lt;/a&gt; or ETC Zurich's Human Brain Project focus more on actual brain study using analog hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If anybody is following this engineering field, can he/she spread more light on it and explain it's &lt;strong&gt;implications, methodologies and toolsets&lt;/strong&gt; to the community, in detail?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS : Regarding toolsets, I'm talking about the most feasible engineering methodologies to commit to the field.&lt;/p&gt;&#xA;" OwnerUserId="2196" LastEditorUserId="2196" LastEditDate="2014-02-28T16:29:08.723" LastActivityDate="2014-05-30T05:03:28.577" Title="Neuromorphic Engineering and Robotics" Tags="&lt;mobile-robot&gt;&lt;artificial-intelligence&gt;&lt;research&gt;&lt;machine-learning&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2527" PostTypeId="2" ParentId="2382" CreationDate="2014-02-28T18:47:41.953" Score="1" Body="&lt;p&gt;I think you have two problems; first, on the mathematical side, the models aren't matching your geometry, so the assumptions about error accumulation are wrong, as you've ascertained.  I suspect that's fixable.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second problem is harder and is related to the messy physics of omnidirectional robots (at least for 120-degree and Mecanum) - they generally involve so much nonlinear slip that odometry just doesn't work.  I don't have the mathematical rigor to defend this assertion, but if your output error component isn't significantly less than the ideal model output component, you might as well do dead reckoning based on a random number.  :-)&lt;/p&gt;&#xA;" OwnerUserId="3928" LastActivityDate="2014-02-28T18:47:41.953" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2528" PostTypeId="2" ParentId="2491" CreationDate="2014-02-28T20:56:36.693" Score="1" Body="&lt;p&gt;It seems like you are asking how to do the line following, so here's one way to think about it:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you have found the line, one way to follow it is to follow one of the edges of the line. For example: following the right edge could be done like this: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have two color sensors (left and right) and the left sensor is on the line while the right is not, continue forward.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the right sensor or both sensors detect the line, turn right slightly until the robot is back on the right edge. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the left sensor doesn't detect the line and the right doesn't detect the line, the robot has gone off the right side of the line. Turn left.&lt;/p&gt;&#xA;" OwnerDisplayName="user3929" LastActivityDate="2014-02-28T20:56:36.693" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2529" PostTypeId="2" ParentId="2524" CreationDate="2014-02-28T23:33:13.517" Score="3" Body="&lt;p&gt;This is very rough, might or might not help you....&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Treating it as a macroscopic perspective: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Kinetic Energy&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$E_k = \frac{1}{2}mv^2$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For working energy in a flow, substitute volume with Area*Velocity and mass with density $\rho$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$E_k = \frac{1}{2}\rho Av^3$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With that, you should be able to estimate (after efficiency corrections) the power required. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Otherwise, &lt;a href=&quot;https://www.google.nl/?q=impeller%20formula#q=impeller%20formula&quot; rel=&quot;nofollow&quot;&gt;a search for impeller equations&lt;/a&gt; might yield something. Most aerospace formulas are directed towards normal propellers with aerofoils. &lt;/p&gt;&#xA;" OwnerUserId="3932" LastEditorUserId="350" LastEditDate="2014-03-04T16:24:14.110" LastActivityDate="2014-03-04T16:24:14.110" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2530" PostTypeId="1" AcceptedAnswerId="2537" CreationDate="2014-02-28T23:55:33.550" Score="2" ViewCount="1201" Body="&lt;p&gt;I have a Raspberry Pi hooked up to a Roomba 560's serial port. While going over &lt;a href=&quot;http://www.irobot.com/images/consumer/hacker/Roomba_SCI_Spec_Manual.pdf&quot; rel=&quot;nofollow&quot;&gt;the spec&lt;/a&gt;, I noticed movement controls weren't as simple as I expected. I can't send bytes larger than 255, but, according to the spec, to go straight I have to send 8000. How does this work?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: My solution was the following three functions:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;import serial&#xA;import time&#xA;&#xA;def start():&#xA;    #Open serial connection&#xA;    global ser&#xA;    ser = serial.Serial('/dev/ttyUSB0', 115200)&#xA;    # this is the defualt Roomba baud rate&#xA;    # Start SCI - puts into safe mode&#xA;    ser.write(chr(128))&#xA;    # Enable the safe mode&#xA;    ser.write(chr(131))&#xA;    # this is required or the command may fail&#xA;    time.sleep(1)&#xA;&#xA;# This makes the serial command fit the big-endian notation&#xA;def make4(num):&#xA;    num = num[2:]&#xA;    z2a = 4-len(num)&#xA;    for q in range(z2a):&#xA;        num = '0' + num&#xA;    return '\\x'+num&#xA;&#xA;def move(vel, rad):&#xA;    # Init move command&#xA;    ser.write(chr(137))&#xA;&#xA;    # velocity&#xA;    vhex = hex(vel)&#xA;    vhex = make4(vhex)&#xA;&#xA;    #radius&#xA;    vrad = hex(rad)&#xA;    vrad = make4(vrad)&#xA;&#xA;    # send to roomba&#xA;    ser.write(vhex)&#xA;    ser.write(vrad)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="3794" LastEditorUserId="-1" LastEditDate="2014-12-13T07:25:51.107" LastActivityDate="2014-12-13T07:25:51.107" Title="Help sending serial command to Roomba" Tags="&lt;mobile-robot&gt;&lt;raspberry-pi&gt;&lt;serial&gt;&lt;irobot-create&gt;&lt;roomba&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2531" PostTypeId="1" CreationDate="2014-03-01T00:36:16.317" Score="8" ViewCount="7026" Body="&lt;p&gt;ROS is not real-time OS.&#xA;After reading the architecture of ROS, I am unable to realize why is ROS not real-time? What part of the architecture or what design decision is causing that?&lt;/p&gt;&#xA;" OwnerUserId="3933" LastActivityDate="2014-03-01T06:31:26.300" Title="Why is ROS not a real-time operating system?" Tags="&lt;ros&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2532" PostTypeId="2" ParentId="2531" CreationDate="2014-03-01T01:56:23.360" Score="2" Body="&lt;p&gt;Check out this website, &lt;a href=&quot;http://www.control.com/thread/1026205354&quot; rel=&quot;nofollow&quot;&gt;http://www.control.com/thread/1026205354&lt;/a&gt; you'll find your answer. The reason I directed you to this website is because ROS is an Operating System to provide Real-Time like operation but not truly. You can also call it as Pseudo-RTOS. &lt;/p&gt;&#xA;" OwnerUserId="3905" LastActivityDate="2014-03-01T01:56:23.360" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2533" PostTypeId="2" ParentId="2524" CreationDate="2014-03-01T02:07:49.540" Score="0" Body="&lt;p&gt;For calculating the power required by the fan to set it into operation would be calculated using how much power is generated by the motor that is used by the fan. Now, the fan is like a load to the motor. From reading the picture and trying to make sense out of the air-flow arrows, it seems that air-is pulled into the system from the outside which I assume is going to be warm and air-is pushed out of the system because of the motor spinning the fans. The dimensions of the fan will help you calculate the amount of air-intake and output. If at all one parameter that will influence the power requirements will be the fans mass and the amount of drag the fans create as they spin. Since friction due to drag will add to the load that the motor has to drive. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you can do is calculate the Power generated by the Motor with No-Load. Then calculate the drag generated by fans which you will take as mass and add it to the fans mass. Now you have mass which will be the load that the motor has to drive. Now calculate how much Power does the Motor generate with this mass which most likely will be the answer to your question. :D&lt;/p&gt;&#xA;" OwnerUserId="3905" LastActivityDate="2014-03-01T02:07:49.540" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2534" PostTypeId="2" ParentId="2526" CreationDate="2014-03-01T02:32:32.747" Score="1" Body="&lt;p&gt;Seems like this is a step towards what religious AI people would call a Singualarity. The goal to create a system which would function like the brain. I'am not into this field but I am into Robotics and AI. I can tell you that it's a step towards that dream. No one can say if its possible to do that because of Neuroscience finding weird things about the brain that they can't make sense of and Quantum Science confusing it even further. But what we can say is this, it's a step forward. It's like Quantum Computing in a way. So far in my opinion, Quantum Computing + Neural Model based Hardware + XXXX = Brain. So the implications are that you can develop Robotics to the level of using hardware that will emulate a few functions of the Brain so that we don't have to bang out heads against the table trying to make it learn something and do something. I'd say it's more to do with Automating most of the stuff that we humans are lazy or inefficient or incapable of doing. It will take many Engineering disciplines to come together, sorta like the United Nations. AI, EEE, ECE, Robotics, Neuroscience, Quantum Physics. Umm..I can't think of anymore that will make sense into the addition to make up for this field. &lt;/p&gt;&#xA;" OwnerUserId="3905" LastActivityDate="2014-03-01T02:32:32.747" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2537" PostTypeId="2" ParentId="2530" CreationDate="2014-03-01T06:00:47.417" Score="2" Body="&lt;p&gt;The spec says hex 8000 as in hexadecimal (which I usually write in C/Python notation as &lt;code&gt;0x8000&lt;/code&gt;). Each byte is exactly two hexadecimal digits. So you can break &lt;code&gt;0x8000&lt;/code&gt; into &lt;code&gt;0x80&lt;/code&gt; and &lt;code&gt;0x00&lt;/code&gt; and send them separately, which correspond to decimal numbers &lt;code&gt;128&lt;/code&gt; and &lt;code&gt;0&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You also have to know which to send first (referred as little-endian vs big-endian). The spec says [radius high byte] [radius low byte], so high byte comes first (big-endian).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore send the sequence &lt;code&gt;[128, 0]&lt;/code&gt; in order to transmit hex 8000.&lt;/p&gt;&#xA;" OwnerUserId="3935" LastActivityDate="2014-03-01T06:00:47.417" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2538" PostTypeId="2" ParentId="2135" CreationDate="2014-03-01T06:11:51.070" Score="2" Body="&lt;p&gt;For the 2 DOF system you show, the algebraic and geometric really should give the same answers...usually a cos(alpha) &gt; 1 means that your desired point is outside of the workspace (i.e, trying to reach a point 10 feet away with an 8 foot arm.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Personally, I find that I make fewer mistakes using the geometric method. I actually make a fair number of mistakes with algebraic, which usually results in me giving up and using geometric. I would hazard a guess that your algebraic approach probably has mistake similar in nature to the ones I make.&lt;/p&gt;&#xA;" OwnerUserId="3935" LastActivityDate="2014-03-01T06:11:51.070" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2539" PostTypeId="2" ParentId="2531" CreationDate="2014-03-01T06:31:26.300" Score="2" Body="&lt;p&gt;ROS isn't even an operating system, it's a framework and it's usually built on top of Ubuntu. First and foremost, it provides a clean way to write several modular programs with inputs and outputs and stitch them together at runtime.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's no reason you can't run ROS inside a RTOS (however, it was developed on Ubuntu, so it will take effort to get it running on anything else.)&lt;/p&gt;&#xA;" OwnerUserId="3935" LastActivityDate="2014-03-01T06:31:26.300" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2541" PostTypeId="2" ParentId="2524" CreationDate="2014-03-01T09:22:46.957" Score="1" Body="&lt;p&gt;Because air is a compressible fluid it's a rather complicated issue. This might be better suited to physics.stackexchange.com, but maybe I can point you in the right direction...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can think of each rotor blade as a wing moving in a circle, and then you can view it in terms of aerodynamics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Things we need to consider:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The speed the blade near the rotor will be greater than that at the end.&lt;/li&gt;&#xA;&lt;li&gt;The angle of attack affects drag and lift, which translate to airflow. This can be maximized in favor of airflow but is interdependent with RPM.&lt;/li&gt;&#xA;&lt;li&gt;Blades are often shaped along their length to take advantage of #1 and #2.&lt;/li&gt;&#xA;&lt;li&gt;Blade count is somehow related to drag and ambient air velocity or temperature or something.&lt;/li&gt;&#xA;&lt;li&gt;The stator and enclosure shape can induce turbulent air currents, which will increase drag.&lt;/li&gt;&#xA;&lt;li&gt;At high speed you need to take into account laminar flow.&lt;/li&gt;&#xA;&lt;li&gt;Thanks to thermodynamics, all the power you put in has to go somewhere. So the total of heat, airflow, acceleration, friction, and static force (every action has an opposite reaction) is going to give you your net power requirement.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;It might be best to experiment, since fluid dynamics can be tricky.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See also:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://physics.stackexchange.com/questions/9643/shape-of-fan-blades&quot;&gt;Shape of Fan Blades&lt;/a&gt; - approaches to simulation&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://physics.stackexchange.com/questions/9030/design-of-a-common-table-fan&quot;&gt;Design of a common table fan&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://physics.stackexchange.com/questions/69915/what-part-of-the-fan-blade-actually-does-the-noise-generation&quot;&gt;What part of the fan blade actually does the noise generation?&lt;/a&gt; -&#xA;has an excellent answer on blade/enclosure turbulence.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="1316" LastEditorUserId="-1" LastEditDate="2017-04-13T12:40:13.570" LastActivityDate="2014-03-01T09:44:47.030" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2542" PostTypeId="1" AcceptedAnswerId="2544" CreationDate="2014-03-01T10:21:53.887" Score="3" ViewCount="678" Body="&lt;p&gt;In most situations, range of motion is limited by the fact that we need to carry power or information past a joint. So, past a certain point there are either cables in the way, or the cables would stretch so much that they would either prevent further movement or break.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, if we situate the conductors in concentric rings around or within the rotor shaft, we can have a joint that can rotate forever while keeping in contact with any modules on the other side.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What do we call this mechanism? Does it even have a name?&lt;/p&gt;&#xA;" OwnerUserId="1316" LastEditorUserId="131" LastEditDate="2014-03-04T19:53:44.333" LastActivityDate="2014-03-04T19:53:44.333" Title="What do we call a coupling with infinite range of rotation" Tags="&lt;motor&gt;&lt;motion&gt;&lt;joint&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2544" PostTypeId="2" ParentId="2542" CreationDate="2014-03-01T15:23:20.097" Score="2" Body="&lt;p&gt;It's called a slip ring.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Slip_ring&quot; rel=&quot;nofollow&quot;&gt;http://en.wikipedia.org/wiki/Slip_ring&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Wikipedia page has several alternate names for it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Be careful when using these devices, a cheap or damaged one with poor brushes will destroy a high-speed digital signal (and even worse, it will get damaged after you build a working prototype.)&lt;/p&gt;&#xA;" OwnerUserId="3935" LastActivityDate="2014-03-01T15:23:20.097" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2545" PostTypeId="1" CreationDate="2014-03-01T20:48:12.817" Score="2" ViewCount="52" Body="&lt;p&gt;In my project i'm aiming to control a quadruped robot from my android phone using raspberry pi as a middle device (web server). In order to make sure that the server on RPi working fine i googled and got an app that sends a specific character whenever a button is clicked and the arduino job here is simply to receive it from serial port and blink a led! (so easy huh?)&#xA;&lt;strong&gt;but the problem here is that i noticed that some leds are blinking when i click a button not assigned with them!&lt;/strong&gt; this can be a disaster if you are controlling a robot! &#xA;Does anybody know the reason of this and the solution? &lt;/p&gt;&#xA;" OwnerUserId="2525" LastActivityDate="2014-03-02T07:03:02.243" Title="arduino serial mixing incoming commands" Tags="&lt;arduino&gt;&lt;serial&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2546" PostTypeId="2" ParentId="2084" CreationDate="2014-03-01T22:05:45.243" Score="0" Body="&lt;p&gt;For localisation you need map of the environment. For the data you have, you should use SLAM algorithm which give path and map of your environment. Try using gmapping in ROS.&lt;/p&gt;&#xA;" OwnerUserId="714" LastActivityDate="2014-03-01T22:05:45.243" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2547" PostTypeId="5" CreationDate="2014-03-02T02:44:52.603" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2014-03-02T02:44:52.603" LastActivityDate="2014-03-02T02:44:52.603" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2548" PostTypeId="4" CreationDate="2014-03-02T02:44:52.603" Score="0" Body="Every knowledge domain has its own jargon, and robotics intersects many domains. " OwnerUserId="1316" LastEditorUserId="1316" LastEditDate="2014-03-04T23:21:08.323" LastActivityDate="2014-03-04T23:21:08.323" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2549" PostTypeId="2" ParentId="2519" CreationDate="2014-03-02T04:48:12.223" Score="1" Body="&lt;p&gt;have you tried using the optical mouse? the sensors they have are accurate enough(down to 1/400 inches )and the cost can be very small compared with encoders&lt;/p&gt;&#xA;" OwnerUserId="3939" LastActivityDate="2014-03-02T04:48:12.223" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2550" PostTypeId="2" ParentId="2545" CreationDate="2014-03-02T07:03:02.243" Score="2" Body="&lt;p&gt;If I had to guess, I'd say mismatch on baud rates, but it's dangerous to guess.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you need is some old-fashioned debugging!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Three possibilities:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Bug in the app code&lt;/li&gt;&#xA;&lt;li&gt;Bug in the arduino code&lt;/li&gt;&#xA;&lt;li&gt;Problem with the interface/configuration&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;First things first, get a serial cable and connect it to a terminal program (Window's HyperTerminal or Unix's screen). First, test your serial cable by itself.Connect the TX to the RX (do a hardware loopback) and type a few characters and watch them appear in the terminal. Remove the loopback, type the characters and watch them fail to appear. This step is critical and has saved me several headaches.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, connect your app to the computer, and send some characters and make sure they appear on your terminal. This will test 1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If that works, disconnect your serial cable from the app and connect it to the arduino. Type the characters and watch them appear. This will test 2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If both tests pass, this indicates that it might be issue 3. At this point, it could be something such as improper grounding, slight differences in baudrate, loose connection (happens frequently, even to experts.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyways, you need to narrow down the issue before proceeding. Good luck!&lt;/p&gt;&#xA;" OwnerUserId="3935" LastActivityDate="2014-03-02T07:03:02.243" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2552" PostTypeId="1" CreationDate="2014-03-02T21:32:48.887" Score="1" ViewCount="77" Body="&lt;p&gt;I was wondering what was, in your opinion, the best way to study the different motions of a Rubiks Cube.&#xA;I want to be able to recognize what face moved and in what direction. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would I be able to get the direction and the face with accelerometers/gyro and if yes how many would I need?&#xA;If you have ever used a Leapmotion or Kinect, is it possible to achieve this using those?&lt;/p&gt;&#xA;" OwnerUserId="3947" LastEditorUserId="3947" LastEditDate="2014-03-05T03:19:24.933" LastActivityDate="2014-03-05T03:19:24.933" Title="Best Way to Sense Rubiks Cube Movements" Tags="&lt;accelerometer&gt;&lt;motion&gt;" AnswerCount="0" CommentCount="1" ClosedDate="2014-03-16T08:25:27.457" ContentLicense="CC BY-SA 3.0" />
  <row Id="2553" PostTypeId="1" AcceptedAnswerId="2554" CreationDate="2014-03-02T22:25:04.560" Score="2" ViewCount="591" Body="&lt;p&gt;I'd like to buy a capacitive touch input robot in order to remote access my iPad but I'm having trouble describing a correct kind of robot. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to keep lag down to an additional 60ms so that it is still a high quality interface. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to have a robotic arm equipped with a capacitive pen that moves to places on the ipad screen based on the mouse or I'd like a array of capacitive pens that emulate the touch of a user. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I guess I'd use Squires software reflect and the mirror function but I'm open to using an SHD camera with the robotic arm and a pixel sensor array with the array of capacitive pens. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does this make sense? How could I improve the design? What materials would I need to build it myself. Assuming ready built arm? How could I build an array of capacitive touch micro pens?&lt;/p&gt;&#xA;" OwnerUserId="3949" LastActivityDate="2015-06-21T13:21:26.350" Title="Capacitive touch input robot to remote access iPad" Tags="&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2554" PostTypeId="2" ParentId="2553" CreationDate="2014-03-03T03:21:08.623" Score="0" Body="&lt;p&gt;Since the screen of an iPad is your desired workspace, and all the arm will have to lift is a stylus, this will not have to be a large arm.  There are many &quot;hobby&quot; arms built with hobby airplane servos that will probably work for you.  I won't list any makes / models because there are many out there.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not sure what your comment about lag is about, but if you want a fast arm, you should consider a Delta robot arm configuration.  Because the &quot;standard&quot; serial arms mentioned above are not very fast.  These are harder to come by.  the only hobby level delta arm i have seen was the &lt;a href=&quot;https://www.kickstarter.com/projects/1984252088/robot-army-starter-kit&quot; rel=&quot;nofollow&quot;&gt;Robot Army Starter Kit&lt;/a&gt; on Kickstarter.&lt;/p&gt;&#xA;" OwnerUserId="110" LastEditorUserId="110" LastEditDate="2015-06-21T13:21:26.350" LastActivityDate="2015-06-21T13:21:26.350" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2555" PostTypeId="1" CreationDate="2014-03-03T11:44:37.623" Score="0" ViewCount="2479" Body="&lt;p&gt;I want to send image over wireless serial communication. I am planning to capture images using either raspberry pi or stm32 mcu using DCMI and then transfer image using wireless serial communication module such as &lt;a href=&quot;https://www.sparkfun.com/products/10419&quot; rel=&quot;nofollow&quot;&gt;Xbee&lt;/a&gt; or &lt;a href=&quot;http://store.3drobotics.com/products/3dr-radio&quot; rel=&quot;nofollow&quot;&gt;3DR radio&lt;/a&gt; which can provide air data rate upto 250Kbps at baud rate of 115200&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to know if there is any protocol which can send a jpeg compressed image as a wireless serial data.&lt;/p&gt;&#xA;" OwnerUserId="2118" LastActivityDate="2015-04-07T14:13:48.177" Title="Any image transfer protocol for wireless serial transfer?" Tags="&lt;raspberry-pi&gt;&lt;serial&gt;&lt;communication&gt;&lt;wireless&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2556" PostTypeId="1" AcceptedAnswerId="2557" CreationDate="2014-03-03T16:51:18.867" Score="11" ViewCount="16124" Body="&lt;p&gt;I am working on an EKF and have a question regarding coordinate frame conversion for covariance matrices. Let's say I get some measurement $(x, y, z, roll, pitch, yaw)$ with corresponding 6x6 covariance matrix $C$. This measurement and $C$ are given in some coordinate frame $G_1$. I need to transform the measurement to another coordinate frame, $G_2$. Transforming the measurement itself is trivial, but I would also need to transform its covariance, correct? The translation between $G_1$ and $G_2$ should be irrelevant, but I would still need to rotate it. If I am correct, how would I do this? For the covariances between $x$, $y$, and $z$, my first thought was to simply apply a 3D rotation matrix, but that only works for a 3x3 submatrix within the full 6x6 covariance matrix. Do I need to apply the same rotation to all four blocks? &lt;/p&gt;&#xA;" OwnerUserId="2176" LastActivityDate="2019-11-04T07:35:38.327" Title="How to rotate covariance?" Tags="&lt;kalman-filter&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2557" PostTypeId="2" ParentId="2556" CreationDate="2014-03-03T17:21:53.007" Score="8" Body="&lt;p&gt;Covariance is defined as&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\begin{align}&#xA;C &amp;amp;= \mathbb{E}(XX^T) - \mathbb{E}(X)\mathbb{E}(X^T)&#xA;\end{align}$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where, in your case, &lt;span class=&quot;math-container&quot;&gt;$X \in \mathbb{R}^6$&lt;/span&gt; is your state vector and &lt;span class=&quot;math-container&quot;&gt;$C$&lt;/span&gt; is the covariance matrix you already have.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the transformed state &lt;span class=&quot;math-container&quot;&gt;$X'=R X$&lt;/span&gt;, with &lt;span class=&quot;math-container&quot;&gt;$R \in \mathbb{R}^{6\times 6}$&lt;/span&gt; in your case, this becomes&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\begin{align}&#xA;C' &amp;amp;= \mathbb{E}(X' X'^T) - \mathbb{E}(X')\mathbb{E}(X'^T)&#xA;\\&#xA;&amp;amp;= \mathbb{E}(R X X^T R^T) - \mathbb{E}(RX)\mathbb{E}(X^T R^T)&#xA;\\&#xA;&amp;amp;= R ~\mathbb{E}(X X^T) ~R^T - R\mathbb{E}(X)\mathbb{E}(X^T)R^T&#xA;\\&#xA;&amp;amp;= R \big(~\mathbb{E}(X X^T) - \mathbb{E}(X)\mathbb{E}(X^T)\big)R^T&#xA;\\&#xA;&amp;amp;= R C R^T&#xA;\end{align}$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a caveat, be careful with Euler angles. Those are usual non-intuitive in their behavior so you might not be able to simply rotate them with the same rotation matrix that you use for position. Remember that they are usually defined (in the robotics world) in terms of the local coordinate system whereas position is usually defined in terms of the global coordinate system. Off the top of my head, though, I can't remember if they need special treatment.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastEditorUserId="-1" LastEditDate="2019-11-04T07:35:38.327" LastActivityDate="2019-11-04T07:35:38.327" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="2558" PostTypeId="2" ParentId="2555" CreationDate="2014-03-03T19:33:13.057" Score="0" Body="&lt;p&gt;The only way I know is using FTP protocol.&#xA;YOu have to make your system connect to the internet using Ethernet Shield/ Wifi Shield/ 3G-GPRS (GSM) Shield. Then, using FTP protocol to upload the image to the local host. There are dozens of hosts that support the FTP protocol.&#xA;Then, you can easily re-download the image from anywhere else connected to the host.&lt;/p&gt;&#xA;" OwnerUserId="2583" LastActivityDate="2014-03-03T19:33:13.057" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2559" PostTypeId="1" CreationDate="2014-03-03T19:38:40.023" Score="8" ViewCount="5464" Body="&lt;p&gt;Aren't all propellers super dangerous? How are these startups like Hex and Pocket Drone selling drones as 'kid-friendly' to consumers? What happens if a kid puts his finger in a propeller's movement space while its flying? &lt;/p&gt;&#xA;" OwnerUserId="3955" LastEditorUserId="1445" LastEditDate="2014-03-04T19:55:14.120" LastActivityDate="2017-01-15T10:07:51.403" Title="Are propellers dangerous?" Tags="&lt;quadcopter&gt;" AnswerCount="4" CommentCount="1" FavoriteCount="2" ClosedDate="2017-01-15T23:52:50.433" ContentLicense="CC BY-SA 3.0" />
  <row Id="2561" PostTypeId="2" ParentId="2555" CreationDate="2014-03-04T04:22:41.187" Score="2" Body="&lt;p&gt;Once you have the image stored as a file, you can transfer that using &lt;em&gt;any&lt;/em&gt; one of dozens of &lt;a href=&quot;http://en.wikipedia.org/wiki/list_of_file_transfer_protocols&quot; rel=&quot;nofollow noreferrer&quot;&gt;file transfer protocols&lt;/a&gt;, as long as it is supported by &lt;em&gt;both&lt;/em&gt; ends of the link.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We would really &lt;a href=&quot;https://robotics.stackexchange.com/help/how-to-ask&quot;&gt;like to help&lt;/a&gt;, but it's impossible for anyone to &lt;a href=&quot;https://meta.stackexchange.com/questions/18584/how-to-ask-a-smart-question&quot;&gt;read your mind&lt;/a&gt; and see what you put on &lt;em&gt;both&lt;/em&gt; ends of the link.&#xA;And I certainly would like to help someone building a robot that can use a double crossover merging interchange (DCMI).&#xA;(Hint: it's not too late to edit your question and add a few more details).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If, hypothetically, you have lots of RF noise and you're trying to transfer a file between two Raspberry Pi machines over an XBee connection,&#xA;you might want to try the &lt;a href=&quot;http://en.wikipedia.org/wiki/ZMODEM&quot; rel=&quot;nofollow noreferrer&quot;&gt;ZMODEM&lt;/a&gt; protocol.&#xA;ZMODEM was designed to reliably transfer files over high-noise, high-latency, slow dial-up links.&#xA;(I did a quick search and turned up this &lt;a href=&quot;http://ijiet.com/wp-content/uploads/2013/12/6.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Zmodem on Raspberry Pi tutorial&lt;/a&gt;; you can probably find a better tutorial with a little more search time).&lt;/p&gt;&#xA;" OwnerUserId="187" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2014-03-04T04:22:41.187" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2562" PostTypeId="2" ParentId="2559" CreationDate="2014-03-04T07:27:00.810" Score="6" Body="&lt;p&gt;Yes, they are dangerous. I've cut myself multiple times. Once through the nail. The small toy helicopters are apparently some cause for increased eye injury, although &lt;a href=&quot;http://www.ncbi.nlm.nih.gov/pubmed/22846260&quot;&gt;studies&lt;/a&gt; suggest the injuries are usually not severe. Larger helicopters though seem to have caused &lt;a href=&quot;http://www.pcmag.com/article2/0,2817,2424072,00.asp&quot;&gt;fatal injuries&lt;/a&gt; in the past.&lt;/p&gt;&#xA;" OwnerUserId="127" LastActivityDate="2014-03-04T07:27:00.810" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2563" PostTypeId="1" CreationDate="2014-03-04T10:10:06.540" Score="1" ViewCount="455" Body="&lt;p&gt;I started to follow &quot;Get started with the Wifi Bee&quot; tutorial in &lt;a href=&quot;http://www.dfrobot.com/wiki/index.php/WiFi_Bee_V1.0_%28SKU%3aTEL0067%29&quot; rel=&quot;nofollow&quot;&gt;Wifi bee v1.0 wiki page&lt;/a&gt;. &#xA;I am using Xbee USB adapter v2.0,Wifi Bee-RN-XV,mini USB cable as listed in &lt;strong&gt;Tools needed&lt;/strong&gt;.&#xA;When i conneted the Xbee USB adapter v2 to my computer via mini USB cable Wifi bee didn't light up (but USB adapter did light up). Then i followed all the steps till number 4, which is &quot; Send AT command $$$ to the wifi Bee and it will reply &quot;CMD&quot; to indicate that it enter the command mode properly&quot;. When i sent command, it didn't reply anything. I typed other commands like &lt;strong&gt;show net&lt;/strong&gt; and  &lt;strong&gt;scan&lt;/strong&gt;, it didn't reply either.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When i tried &lt;strong&gt;Arduino Server example&lt;/strong&gt; in the wiki page, Wifi bee lighted up. But it gave me some strange ip address with port 200, and when i entered that ip address to my browser address, browser couldn't find the page.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my question is does Xbee Usb adapter need some extra power sources? Or it just doesn't fit with Wifi Bee? I don't think the problem is with usb cable, 'cause my computer found the device. &lt;/p&gt;&#xA;" OwnerUserId="2568" LastActivityDate="2014-03-04T10:10:06.540" Title="Connecting Wifi bee with Xbee USB adapter" Tags="&lt;wifi&gt;&lt;usb&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2564" PostTypeId="1" CreationDate="2014-03-04T15:16:27.460" Score="0" ViewCount="75" Body="&lt;p&gt;I need to read the location of my device within a 1m radius sphere, with accuracy of 5-10cm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The device is handheld and wireless, and currently communicates using a Bluetooth v4 chip. I could add an RF transmitter on the moving part and a few stationary receivers at the base.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What components should I look into? What would be the cheapest way to triangulate it?&lt;/p&gt;&#xA;" OwnerUserId="3912" LastActivityDate="2014-03-12T17:23:44.650" Title="How to use TOA (Time Of Arrival) to measure 3-axis location of a wireless device?" Tags="&lt;sensors&gt;&lt;imu&gt;" AnswerCount="1" CommentCount="0" ClosedDate="2014-03-16T10:30:08.203" ContentLicense="CC BY-SA 3.0" />
  <row Id="2566" PostTypeId="2" ParentId="2519" CreationDate="2014-03-04T16:20:26.457" Score="3" Body="&lt;p&gt;Ultrasonic transducers are the best bet, in my opinion. However, they might cost you a little over &quot;a few bucks&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You have two options:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Set two/three ultrasonic Rx/Tx pair along one plane. Trigger them sequentially, in quick succession and triangulate your object in 3D. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;A drawback of this approach is that the sensor noise would be phenomenal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other option would be:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Set three ultrasonic transmitters, one along each plane (X,Y and Z),&#xA;near the boundary of the active region in which the object will be&#xA;moving.&lt;/li&gt;&#xA;&lt;li&gt;Place the ultrasonic receivers inside the object, one facing each&#xA;direction.&lt;/li&gt;&#xA;&lt;li&gt;Precompute a lookup table that tracks the ultrasonic flight time&#xA;along each direction separately.&lt;/li&gt;&#xA;&lt;li&gt;During operations, trigger the three sensors in quick succession,&#xA;getting X, Y and Z values consecutively.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This method should be less noisy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'll need and omnidirectional ultrasonic transmitter, like this: &lt;a href=&quot;http://www.metrolog.net/transdutores/piezofilm/ultra40k.php?lang=en&quot; rel=&quot;nofollow&quot;&gt;http://www.metrolog.net/transdutores/piezofilm/ultra40k.php?lang=en&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[I'm not sure how much three of them would cost, but there must be some cheaper variant available somewhere].&lt;/p&gt;&#xA;" OwnerUserId="1949" LastActivityDate="2014-03-04T16:20:26.457" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2568" PostTypeId="2" ParentId="2519" CreationDate="2014-03-05T07:29:20.283" Score="0" Body="&lt;p&gt;One of the most common solutions to this problem is structured light (Kinect). I'm not sure about the Playstation Move, but it uses something similar. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ultrasound is going to be tricky, as you either need to bounce signals around or have a transmitting unit and a receiving unit, but I'm sure you could make it work. &lt;/p&gt;&#xA;" OwnerUserId="3920" LastActivityDate="2014-03-05T07:29:20.283" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2570" PostTypeId="1" AcceptedAnswerId="2743" CreationDate="2014-03-06T01:04:22.797" Score="6" ViewCount="236" Body="&lt;p&gt;I am looking at buying a servo motor for a an application that must be able to lift 4-5 lb at a rotational speed of approximately 1rpm. The servo motor listed here &lt;a href=&quot;http://www.robotshop.com/ca/en/hitec-hs755mg-servo.html&quot;&gt;http://www.robotshop.com/ca/en/hitec-hs755mg-servo.html&lt;/a&gt; states a stalling torque of 200 oz-in. Is this torque rating at the horn of the servo motor or the torque rating of the actual motor before any gear reduction is done?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this motor sufficiently strong for my application?&lt;/p&gt;&#xA;" OwnerUserId="3972" LastEditorUserId="37" LastEditDate="2018-08-15T15:19:45.783" LastActivityDate="2018-08-15T15:19:45.783" Title="Do servo motor specifications take into account the gear ratio inside?" Tags="&lt;motor&gt;&lt;servomotor&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2571" PostTypeId="1" CreationDate="2014-03-06T03:24:38.033" Score="3" ViewCount="245" Body="&lt;p&gt;I am making a robot that needs to continuously track the relative position of a human, up to 15 meters away and with at least 300 degrees coverage. Currently I am using a &lt;a href=&quot;https://www.hitechnic.com/cgi-bin/commerce.cgi?preadd=action&amp;amp;key=NSK1042&quot; rel=&quot;nofollow&quot;&gt;Hitechnic IRSeeker v2 sensor&lt;/a&gt; and made a beacon wristband with 6 TV remote IR LEDs. But the maximum distance I can get is around 3 meters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I ordered some 3 watts IR LEDs to boost the power, but the size of the wristband will be a problem because it will not run on a CR2032 battery.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also bought some IR remote receivers. But I am not sure if the reflection from the wall will give false results.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is what I am trying to do possible? Is a beacon 15m away feasible using this technology? &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If it is, then what do I need to modify in my current implementation?&lt;/li&gt;&#xA;&lt;li&gt;If not, are there any other technologies that I should be considering to track the relative position or direction of human, 15 meters away with at least 300 degrees coverage?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="3974" LastEditorUserId="37" LastEditDate="2014-03-17T00:09:35.153" LastActivityDate="2016-11-20T08:06:37.743" Title="Sensor for tracking relative position of human" Tags="&lt;sensors&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2572" PostTypeId="2" ParentId="2570" CreationDate="2014-03-06T05:45:57.450" Score="0" Body="&lt;p&gt;the torque rating is AFTER the gear reduction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;you can calculate the maximum load by the following equation&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Torque = Force * Radius&lt;/p&gt;&#xA;&#xA;&lt;p&gt;if you try to lift 1.8-2.2kg load with this servo, you need to attach the load no farther than 6 cm away from the center of the horn.&lt;/p&gt;&#xA;" OwnerUserId="3974" LastEditorUserId="4238" LastEditDate="2014-05-07T11:37:55.877" LastActivityDate="2014-05-07T11:37:55.877" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2574" PostTypeId="2" ParentId="2559" CreationDate="2014-03-06T12:54:52.023" Score="0" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Aren't all propellers super dangerous?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Depends on the RPM and propeller size. Low RPM with very small diameter, may just result in cuts or bruises. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How are these startups like Hex and Pocket Drone selling drones as 'kid-friendly' to consumers?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Quads are not kid-friendly. Pocket drone uses collapsible propellers that may reduce the force of the impact, but it will hurt. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/Dcw2Dm.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Hex uses pretty small propellers which reduces the area around it in which it will be dangerous.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What happens if a kid puts his finger in a propeller's movement space while its flying?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Nothing good. Quads are dangerous and need to be handled extremely carefully.&lt;/p&gt;&#xA;" OwnerUserId="417" LastActivityDate="2014-03-06T12:54:52.023" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2575" PostTypeId="1" CreationDate="2014-03-06T20:34:31.047" Score="0" ViewCount="1895" Body="&lt;p&gt;I'm writing a PID to control a toy car that follows a black line on a circuit. I've tuned my PID and it works at high speed for all the circuit except the winding section. For that, the error signal looks like a sine wave, and the toy car steers too much. I would like it to go close to straight, is it possible?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt; My car sees 100 grey points in a line ahead, and the difference between the darkest point and the middle of the visual range is the error signal. My output is the angle of a servo on the front wheels of the car, while the speed of the back motors is constant.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The desired performance would be to oscillate with an amplitude less than the amplitude of the winding road, and the actual performance is that the car steers close to the sine line for one period, and at the next max amplitude it under steers. Sorry, I can't provide graphs right now but I'll try to add some in the next days.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a formula for adjusting the PID constants for the desired PID bandwidth?&lt;/p&gt;&#xA;" OwnerUserId="3971" LastEditorUserId="3971" LastEditDate="2014-03-06T21:41:43.127" LastActivityDate="2014-03-08T05:49:57.690" Title="PID control against sine wave error" Tags="&lt;pid&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2576" PostTypeId="2" ParentId="2519" CreationDate="2014-03-06T22:13:54.170" Score="1" Body="&lt;p&gt;Accellerometers won't help much (as you noticed) because they are not &lt;em&gt;global&lt;/em&gt; sensors. They drift. To beat this, you need some way of knowing the location of the object relative to another, fixed location. So, here's my question:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What are the constraints of the system? Is the object to be estimated &lt;em&gt;tethered&lt;/em&gt; so it cannot move outside that sphere? or is the sphere an actual object? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the sphere (or even boundaries of the sphere) are known, fixed, or some other way constrained, then you may have hope of fixing the accellerometer's bias, so long as you can detect that the object has &lt;em&gt;actually not moved&lt;/em&gt; (e.g., by sensing the boundary).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may consider putting sensors in the sphere itself. One way of doing this is magnetic (hall-effect) sensors, then making the object mildly magnetic. Then, whichever group of hall-effect sensors is reading the largest magnetic field is likely near the small object. I have successfully done this to track rotations in a wheel by placing a magnet inside the wheel and hall-effect sensors in the wheel well. Simple, and very, very cheap.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If there &lt;em&gt;is&lt;/em&gt; no physical sphere, you may have to put all your sensors in the device. Then the problem is actually very hard! If a cheap solution existed for this, then the Army, Firefighters, Police, and all other sorts of disaster rescue people would &lt;strong&gt;love&lt;/strong&gt; to know how you did it. All solutions I'm aware of require extremely expensive accellerometers, coupled with a GPS or camera system. Tough for cheap applications.&lt;/p&gt;&#xA;" OwnerUserId="163" LastActivityDate="2014-03-06T22:13:54.170" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2577" PostTypeId="2" ParentId="2559" CreationDate="2014-03-07T06:19:01.727" Score="3" Body="&lt;p&gt;Small quads that use brushed pager motors aren't too bad.  Typical quads that used brushless motors easily cut through flesh.  These shots were from an RC Groups thread where people were submitting their accident pictures.  Be careful!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For some  truly gruesome pictures (amputated fingers, severed tendons, etc), you can see this French language thread: &lt;a href=&quot;http://chrismeme11.over-blog.com/article-36258812.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://chrismeme11.over-blog.com/article-36258812.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/AGmQ7.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="554" LastActivityDate="2014-03-07T06:19:01.727" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2578" PostTypeId="2" ParentId="499" CreationDate="2014-03-07T06:30:30.177" Score="0" Body="&lt;p&gt;Here's a video that gives an &quot;intuitive&quot; understanding of PID loops.  It has an explanation of the integral term, as well as the proportional and derivative terms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=l03SioQ9ySg&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=l03SioQ9ySg&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's a followup video that explains the math and shows how to derive the code from the general formula.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=sDd4VOpOnnA&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=sDd4VOpOnnA&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/ik7xv.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="554" LastActivityDate="2014-03-07T06:30:30.177" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2579" PostTypeId="2" ParentId="2575" CreationDate="2014-03-07T13:47:53.920" Score="1" Body="&lt;p&gt;From &lt;a href=&quot;http://www.goddardconsulting.ca/pid-control.html&quot; rel=&quot;nofollow&quot;&gt;An Introduction to Loop-Shaping Design for PID Control&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;any constant gain feedback will act as a stabilizing controller when&#xA;  the loop is closed. This constant gain is simply a proportional&#xA;  controller. The gain raises or lowers the open-loop magnitude response&#xA;  hence setting the cross-over frequency.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;...&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;When the loop is closed the cross-over frequency is the bandwidth of&#xA;  the closed-loop.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So you would run your loop in Proportional only mode over that section of track. Tune your P term until you achieve the desired performance. You will then need to add back in your I and D terms and tune over the rest of the track.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It may turn out that the P term chosen to achieve the desired performance over the winding section of track produces an unacceptable response for the rest of the track. In which case it may be best to simply place a low pass filter in front of your loop and not pass any errors that are above a certain value.&lt;/p&gt;&#xA;" OwnerUserId="142" LastActivityDate="2014-03-07T13:47:53.920" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2580" PostTypeId="1" CreationDate="2014-03-07T15:21:32.193" Score="3" ViewCount="109" Body="&lt;p&gt;I have odometry data $(x, y, angle)$ of a real two-wheeled robot, who received control commands $(forward speed, angular speed)$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I want to code a motion model (in C++ (/ROS)) which should follow the same trajectory, given the same control commands.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Normally, the kinematics should look something like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ &#xA;\begin{align} &#xA;v_{fwd} &amp;amp;= control_{fwd} \\&#xA;v_{ang} &amp;amp;= control_{ang} \\&#xA;x &amp;amp;= x_{old} + 0.5(control_{fwd} + v_{fwd,old}) * \cos(angle) * dt \\&#xA;y &amp;amp;= y_{old} + 0.5(control_{fwd} + v_{fwd,old}) * \sin(angle) * dt \\&#xA;angle &amp;amp;= angle_{old} + 0.5(control_{ang} + v_{ang,old}) * dt&#xA;\end{align} &#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And I thought about just setting &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ &#xA;\begin{align} &#xA;v_{fwd} &amp;amp;= control_{fwd} + k_1 v_{fwd,old} + k_2 v_{fwd,old}^2 + k_3 v_{ang,old} + k_4 v_{ang,old}^2 \\&#xA;v_{ang} &amp;amp;= \text{ ...analog...} \\&#xA;x, y, angle &amp;amp;\text{ unchanged}&#xA;\end{align} &#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and then just search the minimum of the squared distance of the computed trajetory to the real one - depending on the values of $k_i$. This would mean either a good optimization algorithm or just brute-forcing / randomly testing a lot of values.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this the way to go here? I tried the 2nd approach, but the results so far are not that good. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, as you might guess now, I'm pretty new at this, so any help is appreciated.&lt;/p&gt;&#xA;" OwnerUserId="3926" LastEditorUserId="9860" LastEditDate="2016-08-22T21:38:37.520" LastActivityDate="2016-08-22T21:38:37.520" Title="Fit robot simulator to robot" Tags="&lt;wheeled-robot&gt;&lt;kinematics&gt;&lt;algorithm&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2585" PostTypeId="2" ParentId="2489" CreationDate="2014-03-08T02:03:42.813" Score="0" Body="&lt;p&gt;proportional controller may yield steady state error. it's better to use PI control. that your arm will fall when the motors are not powered is due to the fact that no special backdrive protection is included in the motor or the mechansim. you may want some actual brake to stop the backdrive&lt;/p&gt;&#xA;" OwnerUserId="3939" LastActivityDate="2014-03-08T02:03:42.813" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2586" PostTypeId="2" ParentId="2575" CreationDate="2014-03-08T05:49:57.690" Score="2" Body="&lt;p&gt;One observation is that this is a slightly different situation than the classical control problem.  Your sensor is looking ahead so you're not measuring the current (or past error) but rather you're measuring where you want to position that car in some future time.  As an example, consider that your car currently has its wheels turned such that it is following a given arc to the right.  Your sensor tells you that the target line is somewhat to your right.  It is quite likely that you do not need to give any additional control input to hit your target and attempting to keep correcting to the right will over-steer the car.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To get the best tracking performance you need to figure out how the car drives in open loop mode.  Think about it as a race car driver approaching a turn, he doesn't correct his current error as he's going through the turn, he plans his approach and only correct the tiny errors left as he is taking the turn.  Your perfect driver will need very little correction as he takes into account all the parameters ahead of hitting that turn.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From a control perspective this part of your algorithm is known as &lt;a href=&quot;http://en.wikipedia.org/wiki/Feed_forward_%28control%29&quot; rel=&quot;nofollow noreferrer&quot;&gt;feed-forward&lt;/a&gt; and is the most important part in getting your car to perform.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the right feedforward in place you will still need a PID controller to take out any residual error.  One problem you have though is actually figuring out what to use as an error signal.  The simplest choice is to use that signal but you can probably do better.  There are a number of questions that discuss some PID tuning basics and you can refer to those (e.g. &lt;a href=&quot;https://robotics.stackexchange.com/q/167/1584&quot;&gt;What are good strategies for tuning PID loops?&lt;/a&gt; ).&lt;/p&gt;&#xA;" OwnerUserId="1584" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2014-03-08T05:49:57.690" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2587" PostTypeId="1" CreationDate="2014-03-08T15:33:49.187" Score="2" ViewCount="1295" Body="&lt;p&gt;So I have this optical mouse with me, which has a PAN3504DL-TJ optical sensor. It has a USB interface and when I looked up the internet, all I could find was tutorials using A2501 or sensors in those lines and it has pins like SCLK and SDI but I don't have them instead I have D+ and D-. I understand that these are the data pins so what I did was take two wires and plug them into my Analog Pins of my dsPIC30F4011 and read data from it. After setting up UART communication and transmitting data, all I get are numbers running continuously.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/Gu8lW.png&quot; alt=&quot;Screenshot of Termite receiving information from the Analog Pins which are connected to the D+ and D- of the Optical Sensor&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I want to do is to read coordinates over the analog pins as the mouse aka the sensor moves on a surface. I would use this for position control for my robot.&#xA;So my question is how do I read coordinates from the Optical Sensor over the D+ and D- lines through my Analog Pins ?&lt;/p&gt;&#xA;" OwnerUserId="3905" LastActivityDate="2014-05-08T16:15:17.450" Title="Reading data from D+ and D- pins of a USB" Tags="&lt;sensors&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2588" PostTypeId="1" CreationDate="2014-03-08T22:27:02.233" Score="-3" ViewCount="297" Body="&lt;p&gt;Robotics Stackexchange vs. ROS Answer:&#xA;What is better and for what purpose?&lt;/p&gt;&#xA;" OwnerUserId="3999" LastEditorUserId="10327" LastEditDate="2015-08-10T19:03:18.847" LastActivityDate="2015-08-10T19:03:18.847" Title="Robotics StackExchange vs ROS Answer" Tags="&lt;ros&gt;&lt;robotc&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2014-03-16T08:21:39.177" ContentLicense="CC BY-SA 3.0" />
  <row Id="2589" PostTypeId="2" ParentId="2519" CreationDate="2014-03-09T04:09:31.130" Score="0" Body="&lt;p&gt;Since an accelerometer is  not an option, an ir transmitter can placed on the toy. A  strip of ir receivers can be placed nearby. The receivers must be spaced out with blinders in between.  Essentially what you are actually doing, is defining a finite plane where the kid can move the toy. For instance, if the strip is in front of the child, at about 15 feet away, he can wave the toy freely along the x-axis. The length of the strip determines how the width of plane. You can adjust the height of the blinders as needed. When receiver Ri is activated,  time Ti is recorded (i = 0..n receivers). Since the distance between the receivers are fixed, it then becomes easy to calculate other variables using the recorded time. This method requires strong microcontroller programming ability. In the absence of an accelerometer,  i am eager to hear other options. Ultrasonic sensors  will not work for they only measure distsnce from a to b only. &#xA;Good Luck!&lt;/p&gt;&#xA;" OwnerUserId="3975" LastActivityDate="2014-03-09T04:09:31.130" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2590" PostTypeId="2" ParentId="2587" CreationDate="2014-03-09T08:29:18.197" Score="1" Body="&lt;p&gt;The mouse is sending data using the USB protocol.  You will have to read and decode that protocol to get the mouse data.&lt;/p&gt;&#xA;" OwnerUserId="554" LastActivityDate="2014-03-09T08:29:18.197" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2591" PostTypeId="1" AcceptedAnswerId="2855" CreationDate="2014-03-09T08:57:37.203" Score="2" ViewCount="3326" Body="&lt;p&gt;What are valid values for the Denavit-Hartenberg parameters $d$ and $a$ (sometimes called $r$) of the last 3 links of a robot with spherical wrist?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From &lt;a href=&quot;http://www.eng.utah.edu/~cs5310/chapter4.pdf&quot; rel=&quot;nofollow&quot;&gt;this reference&lt;/a&gt;, &quot;A spherical joint can be represented by three consecutive rotary joints with intersecting rotation axes.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the retrictions should be:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$L_{n-2}$ ($d$ arbitrary, $a=0$)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$L_{n-1}$ ($d = 0$, $a=0$)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$L_{n}$ ($d = 0$, $a=0$)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But in &lt;a href=&quot;http://www.dis.uniroma1.it/~deluca/rob1_en/WrittenExamsRob1/Robotics1_10.07.07.pdf&quot; rel=&quot;nofollow&quot;&gt;this exam&lt;/a&gt; I have found on the internet, It says that the KUKA robot has spherical wrist, and $d$ of the last joint is different to $0$. Would $d\neq0$ in the last link still yield a spherical wrist?&lt;/p&gt;&#xA;" OwnerUserId="4003" LastEditorUserId="1850" LastEditDate="2014-04-25T16:56:41.177" LastActivityDate="2014-04-30T08:50:05.603" Title="Denavit–Hartenberg parameters of a robot with spherical wrist" Tags="&lt;kinematics&gt;&lt;joint&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2592" PostTypeId="2" ParentId="2588" CreationDate="2014-03-09T17:03:38.050" Score="2" Body="&lt;p&gt;The following are very common in software driven robotics:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Ros&lt;/li&gt;&#xA;&lt;li&gt;ubuntu&lt;/li&gt;&#xA;&lt;li&gt;c++&lt;/li&gt;&#xA;&lt;li&gt;python&lt;/li&gt;&#xA;&lt;li&gt;arduino&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;You may notice that all of those have a .stackexchange. But robotics may not always involve these.  And it's bigger than all of those. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Neither is better. They have different purposes. &lt;/p&gt;&#xA;" OwnerUserId="163" LastActivityDate="2014-03-09T17:03:38.050" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2593" PostTypeId="1" CreationDate="2014-03-09T21:58:34.107" Score="0" ViewCount="119" Body="&lt;p&gt;I have been wanting to build larger robots and r/c cars for some time now, but one issue I have had is trying to find larger motors, in the range of electric wheelchair motor size. I found one set on ebay but I am trying to find a more reliable source for these.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To make my question more clear, I am looking for a reliable source(s) for medium size electric motors around the size and power rating of a typical electric wheelchair motor&lt;/p&gt;&#xA;" OwnerUserId="1110" LastEditorUserId="1110" LastEditDate="2014-03-20T19:26:32.733" LastActivityDate="2014-03-20T19:26:32.733" Title="Sourcing Motors for larger robots" Tags="&lt;motor&gt;" AnswerCount="2" CommentCount="2" ClosedDate="2014-03-16T10:31:19.563" ContentLicense="CC BY-SA 3.0" />
  <row Id="2594" PostTypeId="1" AcceptedAnswerId="2616" CreationDate="2014-03-09T22:05:27.197" Score="4" ViewCount="170" Body="&lt;p&gt;I have built a r/c car that runs on 2 30AH 12V DC deep cycle batteries. The motors are 24v motors that will each draw around 15A at full power. My  motor controller can handle this, as well as reclaiming braking energy. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is my way of saying that i have a 24v power system. Now my issue is that I want to run a 12v device on this 24v service. I do not want to have the hassle of another battery to maintain so i would like to power it off the main batteries. All the BECs and other converters that i have found only supply around 1 amp while the device i am looking at powering will take around 4-5A 12v DC. Does anyone know of a device that will do this.&lt;/p&gt;&#xA;" OwnerUserId="1110" LastActivityDate="2014-05-11T21:49:56.250" Title="24v dc to 12vdc converter" Tags="&lt;bec&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2595" PostTypeId="1" CreationDate="2014-03-10T00:53:25.810" Score="1" ViewCount="1162" Body="&lt;p&gt;I'm using the &lt;a href=&quot;https://github.com/rwaldron/johnny-five&quot; rel=&quot;nofollow&quot;&gt;johnny-five&lt;/a&gt; library to control an Arduino Uno running StandardFirmata. I have a HC-05 bluetooth module that I want to use to wirelessly control firmata, but have yet to get it working.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I used &lt;a href=&quot;http://www.instructables.com/id/Modify-The-HC-05-Bluetooth-Module-Defaults-Using-A/&quot; rel=&quot;nofollow&quot;&gt;http://www.instructables.com/id/Modify-The-HC-05-Bluetooth-Module-Defaults-Using-A/&lt;/a&gt; to configure the board for 57600 baud rate: &lt;code&gt;AT+UART=57600,0,0&lt;/code&gt;. I'm able to send various AT commands and read back the results in my serial monitor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I followed &lt;a href=&quot;http://www.instructables.com/id/Use-your-android-phone-sensors-on-the-arduino-/?ALLSTEPS&quot; rel=&quot;nofollow&quot;&gt;http://www.instructables.com/id/Use-your-android-phone-sensors-on-the-arduino-/?ALLSTEPS&lt;/a&gt; to wire up the voltage divider, to make my Arduino's TX operate at 3.3 going into the HC-05's RX.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've tried running the HC-05 in master, slave, and slave-loop. It only makes a BT connection in slave, which is default.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I run my johnny-five script, here's the output:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;± node jf-simple.js&#xA;1394412173445 Board Connecting...&#xA;1394412173447 Board -&amp;gt; Serialport connected&#xA;waiting for board to be ready&#xA;1394412273448 StandardFirmata A timeout occurred while connecting to the Board.&#xA;Please check that you've properly loaded StandardFirmata onto the Arduino&#xA;1394412273448 Board Closing: firmata, serialport&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I've more-than-triple-checked everything. Uploaded firmata many times. Firmata works fine over  USB. Also, I have been able to get this working in the past with an HC-06.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Am I missing something?&lt;/li&gt;&#xA;&lt;li&gt;What are some good debugging techniques to figure out why it won't connect to Firmata?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="4008" LastActivityDate="2014-03-10T00:53:25.810" Title="Control Arduino firmata with HC-05" Tags="&lt;arduino&gt;&lt;troubleshooting&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2596" PostTypeId="1" CreationDate="2014-03-10T03:41:31.327" Score="3" ViewCount="628" Body="&lt;p&gt;Boston Dynamics keeps making great robots, however, I dont see any papers that they publish.  Although now I can find papers on people using the ATLAS robot, I can not find an original paper detailing the robot or its mechanics designs.  Is there a reference for the robot, should I use youtube videos?&lt;/p&gt;&#xA;" OwnerUserId="3776" LastEditorUserId="131" LastEditDate="2014-04-10T11:47:46.260" LastActivityDate="2016-02-26T11:52:09.593" Title="Atlas Robot Reference" Tags="&lt;design&gt;&lt;mechanism&gt;&lt;humanoid&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2597" PostTypeId="1" AcceptedAnswerId="2608" CreationDate="2014-03-10T03:53:52.493" Score="2" ViewCount="278" Body="&lt;p&gt;What software libraries are there for assisting the general problem of parsing a stream of sensor data?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We use various sensors like LIDARs and GPSINS units that provide messages in proprietary binary formats, and have to write drivers for each one. Even though there's a lot of similar concepts used in each sensor (like a general purpose datagram for all messages, consisting e.g. of start/end sentinels, length specifications and a checksum, and then a variety of well-defined message formats for the payload), it ends up being a lot of tedious work to develop a driver each time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd love a solution where I can write out packet/message specifications in some format, and have a library that finds &amp;amp; extracts valid messages from a stream, and provides them in a simple data structure format.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not too fussed about what language, but basically want a general purpose datagram parsing library. There's a lot of customisation with sensors, maybe some odd format parsing, and probably some initial configuration to start the data stream, so this is really something I want as a library for processing the data in real-time that can be used as part of a driver/application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Everything I find is either too basic (the low level tools for interpreting individual elements, so still lots of time spent extracting individual elements explicitly), or too specific (i.e. parsers written specifically for one particular protocol).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a concrete example, consider NMEA messages:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;There's a basic outer datagram (starts with &lt;code&gt;$&lt;/code&gt; followed by message name, then comma separated data, and ends with &lt;code&gt;*&lt;/code&gt;, checksum and line terminating character)&lt;/li&gt;&#xA;&lt;li&gt;Data is in ASCII so needs to be parsed to binary for computational use&lt;/li&gt;&#xA;&lt;li&gt;Outer datagram allows for validation and removal of incomplete/corrupted messages&lt;/li&gt;&#xA;&lt;li&gt;Message name &amp;amp; content would be further parsed for consumption&lt;/li&gt;&#xA;&lt;li&gt;Field names can be specified for ease of use&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;A 'GPGLL' message might be turned from &lt;code&gt;$GPGLL,4533.21,N,17739.11,W,113215.22,A*31&lt;/code&gt; into a programmatic data structure containing latitude, longitude, UTC timestamp and its validity.&lt;/p&gt;&#xA;" OwnerUserId="4009" LastActivityDate="2014-03-12T02:37:08.630" Title="Software libraries for parsing sensor data" Tags="&lt;sensors&gt;&lt;software&gt;&lt;driver&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2598" PostTypeId="2" ParentId="2593" CreationDate="2014-03-10T12:49:01.373" Score="1" Body="&lt;p&gt;From what I found doing a quick search on eBay for electric wheel chair motors, they output 100-150 watts nominal. This isn't that much power and can easily be found.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are looking for precision miniature drive high quality motors (that come with a certain price tag): &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Maxon Motors&lt;/li&gt;&#xA;&lt;li&gt;Faulhaber&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;If space isn't at a premium in your designs, you can expand your search to lower quality, bigger motors that are much less expensive. A quick eBay search got me the two follwing manufacturers:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Dunkermotoren &lt;/li&gt;&#xA;&lt;li&gt;Groschopp&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;If you are looking for a distributor, I know of RobotShop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can probably find others with the help of eBay or Google. &lt;/p&gt;&#xA;" OwnerUserId="3927" LastActivityDate="2014-03-10T12:49:01.373" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2599" PostTypeId="2" ParentId="2597" CreationDate="2014-03-10T16:57:25.887" Score="1" Body="&lt;p&gt;I have a feeling you won't get a generic solution for you problem. The reason for that is that you normally need to keep some sort of state on your device. Finding a general form to handle all different cases will end up in a construct that is likely quite complex. So why not use the general purpose tool that you have to handle such complexity (e.g. C++ or whatever other language you use).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That being said, there are some generic parts you could factor. In &lt;a href=&quot;http://rock-robotics.org&quot; rel=&quot;nofollow&quot;&gt;Rock&lt;/a&gt; for Example, we derive most drivers from a base library called &lt;a href=&quot;https://gitorious.org/rock-drivers/iodrivers_base&quot; rel=&quot;nofollow&quot;&gt;iodrivers_base&lt;/a&gt;. This would do all the annoying IO stuff, and you just need to implement package parsing, package assembly and your state machine.&lt;/p&gt;&#xA;" OwnerUserId="127" LastEditorUserId="158" LastEditDate="2014-03-10T17:15:36.670" LastActivityDate="2014-03-10T17:15:36.670" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2600" PostTypeId="1" CreationDate="2014-03-10T17:43:45.003" Score="2" ViewCount="427" Body="&lt;p&gt;I just bought Arduino Uno and HC-06, I hooked up the connections:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;5V Bluetooth &amp;rarr; 5V Arduino&lt;/li&gt;&#xA;&lt;li&gt;GND Bluetooth &amp;rarr; GND Arduino&lt;/li&gt;&#xA;&lt;li&gt;TDX Bluetooth &amp;rarr; RX &amp;rarr;1&lt;/li&gt;&#xA;&lt;li&gt;RDX bluetooth &amp;rarr; TX &amp;rarr; 0&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Here are the pictures:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/58xGC.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/58xGCm.png&quot; alt=&quot;HC-06&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/5k9Em.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/5k9Emm.jpg&quot; alt=&quot;Arduino&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My problem is that I cannot seem to search for the Bluetooth connection on my Laptop or on my phone.&#xA;Is there something wrong I am doing here?&lt;/p&gt;&#xA;" OwnerUserId="4013" LastEditorUserId="350" LastEditDate="2014-03-12T02:01:45.223" LastActivityDate="2014-03-12T16:32:44.163" Title="Need Troubleshooting help regarding Arduino Uno &amp; HC-06 Bluetooth connection problem" Tags="&lt;arduino&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2601" PostTypeId="2" ParentId="2600" CreationDate="2014-03-10T19:09:56.940" Score="1" Body="&lt;p&gt;The R and T in &quot;Rx&quot; and &quot;Tx&quot; stand for &quot;Receiver&quot; and &quot;Transmitter&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the Transmitter from one device should be connected to the receiver of the other device. Thus:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Arduino Uno Rx -&gt; HC-06 Tx&lt;/li&gt;&#xA;&lt;li&gt;Arduino Uno Tx -&gt; HC-06 Rx&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;EDIT: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks to the pictures that I can now see, what are the values of the resistors on the Arduino Tx pin? 2.2k I think, but I cannot see very well. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In idle mode, both Tx and Rx should be high (5V). Can you verify this with a multimeter? &lt;a href=&quot;http://www.exp-tech.de/service/datasheet/HC-Serial-Bluetooth-Products.pdf&quot; rel=&quot;nofollow&quot;&gt;This&lt;/a&gt; pdf  (p.8) states that the Rx should be pulled high. I assume that is what you did with the resistors, but I am confused to why you have two resistors. Could you explain this please? Usually a simple 10k resistor to Vcc should be sufficient. Adding a resistor between the Arduino Tx and the cable will cause reflections because of the impedance change and affect the signal quality.&lt;/p&gt;&#xA;" OwnerUserId="3927" LastEditorUserId="3927" LastEditDate="2014-03-12T16:32:44.163" LastActivityDate="2014-03-12T16:32:44.163" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2603" PostTypeId="2" ParentId="2101" CreationDate="2014-03-10T22:57:35.317" Score="1" Body="&lt;p&gt;Well, i had a little trouble understanding your question. &#xA;If you want to control it, and the UAV can be controlled (it has to do with its design) just use some decent controller. As far as I know the Ardupilot uses a very simplified version of a PID  controller and works just fine for pretty much everything. &#xA;You can add additional stability to an aircraft during its design with things like the position and angles of the wings. &#xA;The Kalman will give you the state, and you use that state to control the aircraft. But airplanes are made with lots of stability due to the uncertainties you get. &#xA;I remember using a LQR algorithm in college to control an aircraft. It incorporates state vectors and control vectors. That algorithm is pretty much state of the art. It incorporates everything you need from the aircraft. Just like you asked. And answering your question, we only need the coefficients of the main parameters, and we can look those up in tables and graphics (Search for Roskam books...). It doesn't get better than that. We would get two matrices A and B. One for state (x1) and another for control(u1) . The next iteration of the state of the aircraft that we wanted would be&#xA; x2 = A.x1 + B.u1 &#xA;The control vector u1 for now would take into account how the aircraft was,  and how we wanted it. &#xA;u1 = (x2 - A.x1)/B&#xA;So simple... &#xA;It's one of the best controllers you have out there. The other don't need information about the UAV,  just feed back. &#xA;Did you understand? &#xA;Did I solve your problem? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ps.  For velocity, you need a pitot tube to measure the true airspeed. &lt;/p&gt;&#xA;" OwnerUserId="4015" LastActivityDate="2014-03-10T22:57:35.317" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2604" PostTypeId="1" AcceptedAnswerId="2607" CreationDate="2014-03-11T15:44:13.980" Score="7" ViewCount="1284" Body="&lt;p&gt;I have a robot platform with differential drive which knows it's position and orientation.&#xA;Lets say that the space through which the robot moves is known and it has only static obstacles. The task is to move the robot from point A and heading alpha (on which it currently stands) to point B and heading beta on the map.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lets also say that I can obtain a reasonable trajectory (in relation to the turning abilities of the robot). As both the robot and the sensors are inert, what are some general approaches for controlling such a robot to follow the path? It should of course be kept in mind that the final task is to reach the point B without colliding with the obstacles and not the perfect trajectory following.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope the question is not too general.&lt;/p&gt;&#xA;" OwnerUserId="4017" LastActivityDate="2014-03-12T02:03:22.820" Title="Differential drive trajectory following control" Tags="&lt;control&gt;&lt;pid&gt;&lt;navigation&gt;&lt;differential-drive&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2606" PostTypeId="1" AcceptedAnswerId="2682" CreationDate="2014-03-11T23:00:17.080" Score="1" ViewCount="210" Body="&lt;p&gt;I am a beginner to robotics and embedded systems. Consequently I have a lot of questions related to the toolchain and how things are going together like how to debug or how to connect a bluetooth module.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I already tried &lt;a href=&quot;https://electronics.stackexchange.com/&quot;&gt;https://electronics.stackexchange.com/&lt;/a&gt; and it did not work out for me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any ideas where I can get help with my LPC1343 related questions?&lt;/p&gt;&#xA;" OwnerUserId="3848" LastEditorUserId="6890" LastEditDate="2019-07-20T00:24:56.480" LastActivityDate="2019-07-20T00:24:56.480" Title="Where to ask NXP LPC1343 / ARM Cortex M3 related questions" Tags="&lt;microcontroller&gt;&lt;embedded-systems&gt;&lt;arm-cpu&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2607" PostTypeId="2" ParentId="2604" CreationDate="2014-03-12T02:03:22.820" Score="2" Body="&lt;p&gt;&lt;strong&gt;Pure pursuit&lt;/strong&gt; is the standard method for following a trajectory with a differential drive (or ackerman steering) robot.  It is a very simple technique.  You should be able to search for it and find some (very old) papers describing it.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-03-12T02:03:22.820" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2608" PostTypeId="2" ParentId="2597" CreationDate="2014-03-12T02:31:19.353" Score="2" Body="&lt;p&gt;&lt;a href=&quot;http://www.tldp.org/HOWTO/Lex-YACC-HOWTO.html&quot; rel=&quot;nofollow&quot;&gt;YACC and Lex&lt;/a&gt; to the rescue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They are exactly what you ask for: &quot;a general purpose datagram parsing library&quot;.  Bytes go in one end, and structured data comes out the other end.  You are responsible for doing 2 things:&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Tokenizing&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.cs.rug.nl/~jjan/vb/lextut.pdf&quot; rel=&quot;nofollow&quot;&gt;Lex&lt;/a&gt; is used for tokenizing &amp;ndash; deciding how the input stream of bytes should be grouped.  For example, to tokenize the text of a book, you'd want the tokens to be the words (i.e. all the letters and the apostrophe), and the punctuation.  In the GPS message you showed, the tokens would be the literal string &lt;code&gt;$GPGLL&lt;/code&gt; (and separately, any other GPS commands that start with &lt;code&gt;$&lt;/code&gt;), commas, groups of digits, &lt;code&gt;N&lt;/code&gt;, &lt;code&gt;W&lt;/code&gt;, and a few others.  This is essentially regular expression matching.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Parsing&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.cs.rug.nl/~jjan/vb/yacctut.pdf&quot; rel=&quot;nofollow&quot;&gt;YACC&lt;/a&gt; is used for parsing &amp;ndash; deciding how the sequence of tokens should form structure.  To use the example of text in a book, parsing would allow you to tell whether certain text was a quotation (or parenthetical text) by keeping track of the opening and closing marks.  &lt;em&gt;As an aside: try as you might, there is no regular expression that can tell you whether quotes or parenthesis are evenly matched; hence the need for parsing.&lt;/em&gt;  In the GPS example, the parse rules would be something like &quot;a GPGLL command is the &lt;code&gt;$GPGLL&lt;/code&gt; token followed by &lt;code&gt;,&lt;/code&gt;, followed by a float (which itself is an &lt;code&gt;integer&lt;/code&gt; token followed by a &lt;code&gt;.&lt;/code&gt; optionally followed by another &lt;code&gt;integer&lt;/code&gt;), followed by an &lt;code&gt;N&lt;/code&gt; or &lt;code&gt;S&lt;/code&gt; token&quot;... and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Writing a parser is essentially writing a &lt;a href=&quot;https://people.cs.umass.edu/~mccallum/courses/inlp2007/lect5-cfg.pdf&quot; rel=&quot;nofollow&quot;&gt;context-free grammar&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although these may sound scary and difficult (they certainly sounded so to me...), I can say from personal experience that learning how to use these tools is much &lt;em&gt;much&lt;/em&gt; &lt;strong&gt;much&lt;/strong&gt; easier than trying to write your own parser from scratch and then maintain it.  There are many examples and tutorials online that should help you get started.  &lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2014-03-12T02:37:08.630" LastActivityDate="2014-03-12T02:37:08.630" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2609" PostTypeId="1" AcceptedAnswerId="2615" CreationDate="2014-03-12T05:01:29.220" Score="0" ViewCount="96" Body="&lt;p&gt;Just wanted to clarify some pretty basic Arduino concept:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I put this code into an arduino board:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;double start, endTime;&#xA;long int counter = 0;&#xA;&#xA;void setup()&#xA;{&#xA;  Serial.begin(19200);&#xA;start = micros();&#xA;}&#xA;&#xA;&#xA;void loop()&#xA;{&#xA;  endTime = micros();&#xA;  counter++;&#xA;&#xA;  //Point A&#xA;&#xA;  if((endTime - start) &amp;gt; 1000000)&#xA;  {&#xA;    Serial.println(counter);&#xA;    counter = 0;&#xA;    start = micros();&#xA;  }&#xA;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;...I see &gt;38000 value in my serial monitor (for the 'counter' variable).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the moment I put in some heavy calculation in 'Point A', the value drops to 150 - 170. This is expected, I guess.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is: Is the only way to push up the operational frequency lies in optimising the code/calculation? Or, is there some other way I can get faster execution?&lt;/p&gt;&#xA;" OwnerUserId="1949" LastActivityDate="2014-03-13T18:02:40.540" Title="Arduino Operational Frequency" Tags="&lt;arduino&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2610" PostTypeId="1" CreationDate="2014-03-12T14:37:04.973" Score="2" ViewCount="503" Body="&lt;p&gt;I am trying to sync motors on a VEX Cortex based robot and have had mixed success using the encoders with position control.  I noticed that the motor setup directive&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#pragma config(Motor, port2, motorA, tmotorVex393, PIDControl, encoder, encoderPort, I2C_1, 1000)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;has a parameter &quot;PIDControl&quot; but I cannot find any documentation as to what it actually does.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I see on the encoder documentation page &lt;a href=&quot;http://www.vexrobotics.com/wiki/index.php/Intergrated_Motor_Encoders&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt; that the encoder provides velocity output, but it is not apparently built into the API.  So my question is two fold:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) What does the &quot;PIDControl&quot; directive actually do?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) How can I use the encoder to control the speed of the motors?&lt;/p&gt;&#xA;" OwnerUserId="572" LastActivityDate="2018-12-22T04:05:36.017" Title="function of PIDControl #pragma config() directive in robotC" Tags="&lt;robotc&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2611" PostTypeId="2" ParentId="2609" CreationDate="2014-03-12T17:12:28.020" Score="2" Body="&lt;p&gt;Correct: you must optimize your code.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Arduino can do a fixed number of machine instructions per second, so reducing the number of instructions required for the calculation will &lt;em&gt;increase&lt;/em&gt; the number of calculations that can be done per second.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\text{operational frequency} = \frac{\text{calculations}}{t} = \frac{\frac{\text{instructions}}{t}}{\frac{\text{instructions}}{\text{calculation}}} = \frac{\text{16 MHz}}{\frac{\text{instructions}}{\text{calculation}}}$$&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2014-03-13T18:02:40.540" LastActivityDate="2014-03-13T18:02:40.540" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2612" PostTypeId="2" ParentId="2564" CreationDate="2014-03-12T17:23:44.650" Score="1" Body="&lt;p&gt;TOA method is almost impossible to work at such short lengths with radio signals (as they travel at the speed of 3*10^8 m/s which means you need a very high sampling rate to detect that time difference). You should consider using some ultrasonic sound sources and microphones and use them for such a task.&#xA;If you wish to know the location of the device in 3 dimensions, you need to place one sound emitter onto the moving device and 4 microphones at the center of the sphere. The more apart the microphones are, the better precision you'll have.&lt;/p&gt;&#xA;" OwnerUserId="4017" LastActivityDate="2014-03-12T17:23:44.650" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2613" PostTypeId="1" AcceptedAnswerId="2614" CreationDate="2014-03-12T17:51:39.443" Score="1" ViewCount="1215" Body="&lt;p&gt;I found a model for 2-wheeled robots here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/106/what-is-a-suitable-model-for-two-wheeled-robots/134#134&quot;&gt;What is a suitable model for two-wheeled robots?&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How should I adapt it to a 4-wheeled setting?&lt;/p&gt;&#xA;" OwnerUserId="4024" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2014-03-18T03:25:08.540" Title="What is a suitable model for four-wheeled differential drive rigid-body robots?" Tags="&lt;wheeled-robot&gt;&lt;kinematics&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2614" PostTypeId="2" ParentId="2613" CreationDate="2014-03-12T18:05:50.203" Score="2" Body="&lt;p&gt;If only two wheels are connected to motors (and the other two are just used as pivots) then you can use the same model (the wheels on the same side, either left or right, have the same velocity).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have motors on all four wheels then it's a bit different story, you should first think about why you would do that. The problem there arises if the wheels on the same side (either left or right) do not turn with the same angular speed (or speeds proportional to their radius if one is larger) as that would cause drifting which you would have to take into the account. If they do in fact turn with the same angular speeds then again, the 2-wheeled model applies to this system as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regards&lt;/p&gt;&#xA;" OwnerUserId="4017" LastActivityDate="2014-03-12T18:05:50.203" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2615" PostTypeId="2" ParentId="2609" CreationDate="2014-03-12T19:55:09.047" Score="3" Body="&lt;p&gt;The microcontroller you are using has a certain clock frequency. Every operation you make it compute takes a specific (but constant) number of clock cycles to perform. What your code does is it enters the loop function, it performs all the tasks within it and then it jumps back to it's beginning and does everything again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you are limited by the number of &lt;em&gt;operations&lt;/em&gt; you can perform per second and not the number of &lt;em&gt;loop iterations&lt;/em&gt;, you need to either decrease the number of operations you are performing per loop iteration or find a way to increase the number of operations you can do per second.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to increase the number of operations you can do per second you need to increase the clock frequency which might mean buying a new chip if the one you are using is already at it's maximum.&lt;/p&gt;&#xA;" OwnerUserId="4017" LastActivityDate="2014-03-12T19:55:09.047" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2616" PostTypeId="2" ParentId="2594" CreationDate="2014-03-12T20:03:01.013" Score="1" Body="&lt;p&gt;If you already have two separate 12V batteries then it makes no sense to convert 24V down to 12V which you already have. As the two of your batteries are coupled together to form 24V, just draw a wire from the place where the two batteries meet and you'll have 12V there (with respect to the ground).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If by some strange reason you really want to convert those 24V to 12V, take a look at some switch-mode power supplies (like LM2576, it can output 3A but there are better ones, you should have no problem finding them), they are more efficient than linear voltage regulators (like 7805) and can give higher output current.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regards&lt;/p&gt;&#xA;" OwnerUserId="4017" LastActivityDate="2014-03-12T20:03:01.013" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2617" PostTypeId="2" ParentId="2596" CreationDate="2014-03-12T20:10:53.453" Score="0" Body="&lt;p&gt;Not really a solid answer, but...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Boston Dynamics does publish papers, though the only one I could find was the one for the BigDog: &lt;a href=&quot;http://www.bostondynamics.com/img/BigDog_IFAC_Apr-8-2008.pdf&quot; rel=&quot;nofollow&quot;&gt;http://www.bostondynamics.com/img/BigDog_IFAC_Apr-8-2008.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for the ATLAS robot, it is nowhere to be found, but I believe that as soon as they publish it (if they ever do), it will be on their website &lt;a href=&quot;http://www.bostondynamics.com&quot; rel=&quot;nofollow&quot;&gt;http://www.bostondynamics.com&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4017" LastActivityDate="2014-03-12T20:10:53.453" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2618" PostTypeId="2" ParentId="2445" CreationDate="2014-03-12T20:24:36.937" Score="1" Body="&lt;p&gt;The problem is that the rotation matrix describes the rotation around the coordinate system center and not around the center of the robot, so here's what happens.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You wish to add to the robot position a vector which is oriented the same as he is (which is described by R), so how do you do this. You take a vector t which is rotated by 0 degrees (that is [1; 0] because of the angle convention), you multiply it by intensity (which is 1 because of 1m/s), you rotate it so it has the same direction as your robot (because it should move &lt;em&gt;forward&lt;/em&gt;) and then you add that vector to the current position (which is described by x).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you in the end you get x'=R*t+x which is the same thing he did.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt;&#xA;I forgot to mention that this is much easier to remember in homogeneous representation:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;S=[R R x; R R y; 0 0 1]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;which represents the &quot;state&quot; of the robot (it's position and orientation, as I mentioned, if it's looking to the right along x axis its angle is 0). So when you multiply the state of the robot with transformation matrix you get the new state. Transformation matrix is in the exact shape as the state matrix, so it's A=[R R tx; R R ty; 0 0 1]. So if you want only to translate the robot you make [R R; R R] identity matrix [1 0; 0 1], and if you want only to rotate the robot you make tx=ty=0. You can both rotate and translate the robot at the same time like this but keep in mind that the robot will first translate and then rotate (that is, it will translate with respect to the old orientation, not the new one). If you wish to rotate and then translate it, make a rotation transformation matrix and multiply it by the translation transformation matrix and then use that matrix as the transformation matrix which you will multiply with the state matrix (right side multiply as always). Order of matrices is of course important as matrix multiplication is not commutative.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regards&lt;/p&gt;&#xA;" OwnerUserId="4017" LastEditorUserId="4017" LastEditDate="2014-03-12T23:34:53.097" LastActivityDate="2014-03-12T23:34:53.097" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2619" PostTypeId="1" CreationDate="2014-03-13T08:18:41.067" Score="3" ViewCount="75" Body="&lt;p&gt;Since finding data on stalled and in use under load (not free) amp draw for servos seems impossible, I want to build/create my own servo tester.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All I really want to know is how much amps the servo is drawing at idle, at movement under load, and at stalled/full position. I think that should cover all the bases relative to amp usage on the servo but if not, please let me know what I am missing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are my questions:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;I am going to need a power supply for an exact 4.8V and 6.0V since that seems to be the standard measurement voltages. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I'll need some way to accurately measure the amp draw.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I'll need some way to control the servo movement.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Is that it? What am I missing and if anyone has any suggestions please let me know and thanks for the help.  This seems to be uncharted waters for those in the RC hobby area but someone in the robotics field may have been down this path.&lt;/p&gt;&#xA;" OwnerUserId="4028" LastActivityDate="2014-05-12T19:56:35.320" Title="Building A Servo Tester To Measure Peak/Stalled Amp Draw" Tags="&lt;rcservo&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2620" PostTypeId="1" AcceptedAnswerId="2623" CreationDate="2014-03-13T10:02:34.107" Score="5" ViewCount="1749" Body="&lt;p&gt;I am working on a system which is measuring a force. The specification is to have a 500Hz bandwidth on the measurement. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I was trying to explain this 500Hz bandwith to my mom and I could not really explain it easily.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the most easy way to explain the term bandwidth of a measurement to someone without control engineering background?&lt;/p&gt;&#xA;" OwnerUserId="4029" LastActivityDate="2014-03-13T21:07:18.560" Title="How to explain bandwidth of a measurement to a noob?" Tags="&lt;control&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2621" PostTypeId="2" ParentId="2620" CreationDate="2014-03-13T10:40:00.230" Score="1" Body="&lt;p&gt;I would attempt to explain it like this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The measuring system has some latency and cannot detect very very fast changes (if you were to push it and release it in less than a microsecond it probably wouldn't detect anything). Bandwidth is a measure of that characteristic, that is, it tells us how fast change can the system measure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;500Hz bandwidth means that any change that is greater than the changing speed of a 500Hz sine wave will not be measured correctly. (this is a loose and not perfectly correct explanation but I guess you won't be explaining Fourier transform to a person without engineering/maths background).&lt;/p&gt;&#xA;" OwnerUserId="4017" LastActivityDate="2014-03-13T10:40:00.230" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2622" PostTypeId="2" ParentId="2619" CreationDate="2014-03-13T11:36:59.540" Score="0" Body="&lt;p&gt;I believe that is everything you need. As for the solutions:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.ti.com/lit/ds/symlink/lm2576.pdf&quot; rel=&quot;nofollow&quot;&gt;http://www.ti.com/lit/ds/symlink/lm2576.pdf&lt;/a&gt; you can implement power supply both for 4.8V and for 6V with this circuit, there is application note in the datasheet which you can use to calculate the needed component values to get the desired output voltage.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://www.digikey.com/product-highlights/us/en/allegro-acs710-current-sensor-ic/1030&quot; rel=&quot;nofollow&quot;&gt;https://www.digikey.com/product-highlights/us/en/allegro-acs710-current-sensor-ic/1030&lt;/a&gt; ACS710 is a current sensing sensor, or you can just use a standard ampermeter.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You need a microcontroller to implement the control for the servo. Servos are usually controlled via pulse width modulation (PWM), where the signal period is 20ms, duration of logical &quot;1&quot; is 1ms (5% duty cycle) for the minimal angle position, 1.5ms (7.5% duty cycle) for the middle and 2ms (10% duty cycle) for the maximal angle position.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Regards&lt;/p&gt;&#xA;" OwnerUserId="4017" LastActivityDate="2014-03-13T11:36:59.540" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2623" PostTypeId="2" ParentId="2620" CreationDate="2014-03-13T11:44:40.500" Score="5" Body="&lt;p&gt;The simplest explanation I can think of is to compare bandwidth to the rate which you look at things. It doesn't really cover how continuous systems work but given that most people deal with digital or discontinuous systems (even if they don't know it) it's a relevant, if not perfect, analogy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Compare a low bandwidth with having your eyes closed and then opening them briefly once every 5 seconds. Not only are you going to be slow to react to changes because you only get an update every 5 seconds (latency) but you will also miss all of the things happening while your eyes are closed (filtering).&#xA;A higher bandwidth would be opening your eyes once a second. You could increase the sampling rate up until your eyes are always open.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The more rapidly you open your eyes, the higher your bandwidth. So higher bandwidth means not only can you update you output more quickly but you also capture more of the things going on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: The above is a closer analogy to the sampling rate of your system. The bandwidth of the system is a measure of how quickly your system can react to your observations. &#xA;If we follow the blinking analogy the system bandwidth is a measure of how quickly you can react to the changes you see when you open your eyes. A low bandwidth system will have difficulty reacting to changes,no matter how much you open your eyes. a fast bandwidth system can respond quickly to changes but will be limited by how often you oen your eyes to look&lt;/p&gt;&#xA;" OwnerUserId="1978" LastEditorUserId="1978" LastEditDate="2014-03-13T21:07:18.560" LastActivityDate="2014-03-13T21:07:18.560" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2624" PostTypeId="2" ParentId="2593" CreationDate="2014-03-13T14:10:21.650" Score="0" Body="&lt;p&gt;For small quantities and ad-hoc projects just above the eBay level: www.surpluscenter.com &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For repeatable prototypes: www.robotmarketplace.com &#xA;then track back by searching on manufacturer for larger quantities.&lt;/p&gt;&#xA;" OwnerUserId="4032" LastActivityDate="2014-03-13T14:10:21.650" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2626" PostTypeId="2" ParentId="2619" CreationDate="2014-03-13T18:26:52.217" Score="1" Body="&lt;p&gt;I just use a standard servo tester but put a multimeter in the loop on the +5v side by cutting the power line on a servo extension. Very simple but works fine. I suppose if you were after exact measures a precise voltage supply might matter. &lt;/p&gt;&#xA;" OwnerUserId="4035" LastActivityDate="2014-03-13T18:26:52.217" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2627" PostTypeId="2" ParentId="2620" CreationDate="2014-03-13T20:44:21.350" Score="6" Body="&lt;p&gt;2pietjuh2's Mom:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are you familiar with &lt;em&gt;dog whistles&lt;/em&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/nWn9B.jpg&quot; alt=&quot;Ultrasonic dog whistle (wikipedia)&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Dog whistles make a sound at a frequency that dogs can hear but humans can not.  The sound it makes has a higher frequency than the maximum frequency humans can hear.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If we try to draw a picture of what &lt;strong&gt;human&lt;/strong&gt; hearing is like it looks something like this:&#xA;&lt;img src=&quot;https://i.stack.imgur.com/xTAZz.jpg&quot; alt=&quot;Audiogram (wikipedia)&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may have seen this already if you've ever taken a hearing test.  Where the red circles are low signal where our hearing gets worse.  In this example we have a person who can hear pretty well between 250Hz and 8000Hz (Hz is a measuring unit called after &lt;a href=&quot;http://en.wikipedia.org/wiki/Heinrich_Hertz&quot; rel=&quot;nofollow noreferrer&quot;&gt;Heinrich Hertz&lt;/a&gt; and means cycles per second) but less well outside this range, or &lt;strong&gt;band&lt;/strong&gt;.  We can think of the area from the first frequency to the last frequency as a &quot;band&quot;.  Humans with good hearing can still hear something up to 20000Hz but we are not as sensitive to those higher frequency sounds.  At some point we simply will hear nothing at all no matter how loud/strong the sound is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Not&lt;/strong&gt; this kind of a band:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/uH1fo.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But more like a band you'd wear on your wrist.  We measure the &lt;strong&gt;width&lt;/strong&gt; of this band and that's our &lt;strong&gt;band width&lt;/strong&gt;, &lt;strong&gt;bandwidth&lt;/strong&gt;.  For our human example it's 8,000 minus 250 Hertz or about &lt;strong&gt;7,750&lt;/strong&gt; Hertz (ignoring the little dip around 4,000).  If someone asked me to design the hearing system for this human they would specify a bandwidth of 7,750Hz.  We usually need to decide what's large enough to count as being inside the band in order to determine this.  The &quot;standard&quot; human hearing range is often considered to be 20Hz to 20,000Hz or a bandwidth of about 19,980Hz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Meanwhile, our best friend:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/zo1ib.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Has a hearing range of about 40 Hz to 60 kHz (kHz is kilo-Hertz or one thousand Hertz).  So we can say his hearing bandwidth is about &lt;strong&gt;59,960Hz&lt;/strong&gt; (60,000-40).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We can explain this mathematically and more rigorously but that will take more time where most people would lose interest (a few hours should yield an expert level of understanding for this particular concept).  I think it's important to stress out the origin of the term as the width of the band in a graph of frequency vs. response (e.g. in radio, light etc.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(p.s. All images from Wikipedia)&lt;/p&gt;&#xA;" OwnerUserId="1584" LastEditorUserId="1584" LastEditDate="2014-03-13T20:53:34.413" LastActivityDate="2014-03-13T20:53:34.413" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2628" PostTypeId="1" CreationDate="2014-03-13T21:29:42.717" Score="0" ViewCount="1204" Body="&lt;p&gt;I am a Computer Science final year undergraduate student.Until now,I used to shirk away from robotics as I believed that it is more related to electrical and mechanical aspects.But my interest in robotics grew by seeing some demos and I seriously want to make a robot which involves AI by teaming up with interbranch students of college.So what is the best project I can pick up as a beginner in robotics and AI and some experience in Computer Science so I can apply AI Machine learning concepts so that it learns something.How to start something?&lt;/p&gt;&#xA;" OwnerUserId="4039" LastActivityDate="2014-03-15T02:59:22.490" Title="Project Idea for a AI related project" Tags="&lt;artificial-intelligence&gt;&lt;machine-learning&gt;" AnswerCount="2" CommentCount="4" ClosedDate="2014-03-15T23:51:45.277" ContentLicense="CC BY-SA 3.0" />
  <row Id="2629" PostTypeId="2" ParentId="2628" CreationDate="2014-03-14T01:46:33.710" Score="0" Body="&lt;p&gt;Basically almost any control system can be used with machine learning. You just &lt;em&gt;learn&lt;/em&gt; the control logic instead of using some PID for example. Here is one simple example which doesn't have too much robotics involved but you'll get the point I hope: &lt;a href=&quot;http://www.youtube.com/watch?v=XiigTGKZfks&quot; rel=&quot;nofollow&quot;&gt;http://www.youtube.com/watch?v=XiigTGKZfks&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ball and Plate system could also be interesting to you. You could generally base your research on comparison of different algorithms, both machine learning (HMM, reinforcement, supervised...) and some more often used controllers like PID and Fuzzy logic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regards&lt;/p&gt;&#xA;" OwnerUserId="4017" LastActivityDate="2014-03-14T01:46:33.710" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2630" PostTypeId="2" ParentId="2628" CreationDate="2014-03-14T06:41:51.003" Score="1" Body="&lt;p&gt;This is quite a broad question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Everything depend on if you want to involve hardware design as Matthew Gordon said already. Lets say you don't want to touch hardware design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I, as well, will suppose you don't want to do control (like PID control) but more AI, in team work, K-means algorithm and so.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First of all, I honestly think that, you'll always have to know at least a bit how the hardware is working for it is just really useful to know that in the control process. You don't have to be an expert about it but know the limit and the possibility of the robot helps design the machine learning process. So you know what's possible and what isn't.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apart from that if you have no robot at disposition already you should look at simulation software. Some like &lt;a href=&quot;http://playerstage.sourceforge.net/&quot; rel=&quot;nofollow&quot;&gt;Stage&lt;/a&gt; or &lt;a href=&quot;http://gazebosim.org/&quot; rel=&quot;nofollow&quot;&gt;Gazebo&lt;/a&gt; are really good simulators. Gazebo implied a bit more of preparation to be run though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then you can just take an existing robot to do your simulation. An existing robot like &lt;a href=&quot;https://www.willowgarage.com/pages/pr2/overview&quot; rel=&quot;nofollow&quot;&gt;PR2&lt;/a&gt; or &lt;a href=&quot;https://www.willowgarage.com/turtlebot&quot; rel=&quot;nofollow&quot;&gt;TurtleBot&lt;/a&gt; depending on your project would do the trick.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now those robots run with &lt;a href=&quot;http://www.ros.org/&quot; rel=&quot;nofollow&quot;&gt;ROS&lt;/a&gt; which is, as the name say, a &lt;em&gt;Robot Operating System&lt;/em&gt;. The goal is to provide abstraction so if you design an AI in C++ or python you could just directly run it on those robots because all the controls are already done. Meaning if your program uses the standard type of message for moving the robot you just have to ask for things as simples as &quot;go there&quot; in your AI program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ros is definitely a good start if you want to team up with other people as well as it will give you conventions, rules and a lot of libraries already provided for your robot.&lt;/p&gt;&#xA;" OwnerUserId="1615" LastEditorUserId="1615" LastEditDate="2014-03-15T02:59:22.490" LastActivityDate="2014-03-15T02:59:22.490" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2631" PostTypeId="1" AcceptedAnswerId="2655" CreationDate="2014-03-14T08:16:30.340" Score="0" ViewCount="336" Body="&lt;p&gt;I am completely brand new to quadrocopter building. I am currently about to start building a Quad. I have done a little bit of research and was thinking of buying the following parts:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;KK2.1 Hobbyking Flight Controller&lt;/li&gt;&#xA;&lt;li&gt;Turnigy H.A.L Quadcopter Frame&lt;/li&gt;&#xA;&lt;li&gt;4 x NTM Prop Drive    35-30 1100kv / 380w&lt;/li&gt;&#xA;&lt;li&gt;Turnigy 9X 9CH&lt;/li&gt;&#xA;&lt;li&gt;Turnigy Plush 40A ESC&lt;/li&gt;&#xA;&lt;li&gt;Slow Fly Prop Left&lt;/li&gt;&#xA;&lt;li&gt;Slow Fly Prop Right&lt;/li&gt;&#xA;&lt;li&gt;Quad Power Dist Board&lt;/li&gt;&#xA;&lt;li&gt;Turnigy 5Ah 3S25C LiPo&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;What do you think of these parts/Do you have any complete builds with instructions that you would recommend instead?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="4040" LastEditorUserId="134" LastEditDate="2014-03-16T08:35:58.757" LastActivityDate="2014-07-22T03:09:16.000" Title="Quadrocopter build - Do these parts look fine?" Tags="&lt;motor&gt;&lt;sensors&gt;&lt;quadcopter&gt;&lt;multi-rotor&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2633" PostTypeId="2" ParentId="150" CreationDate="2014-03-15T07:17:17.903" Score="1" Body="&lt;p&gt;I understand exactly what you are talking about. I am developing my own ROV that will have a track system and crawl on the sea floor. If I may suggest placing your motor in a high point in your ROV with the gear drive close to the bottom, you can install a pressurized air system that will allow air into the chamber as the ROV goes deeper. Think of it like a toilet bowl except it allows air in as the water level rises. I have thought about this same issue and this is what I have come up with.&#xA;Using a CO2 cartridge from an airgun and a home-made pressurizing valve (idea from toilet bowl) the deeper it goes, the more air compresses allowing water to enter into the chamber. With the valve installed, it introduces more air, keeping the water away from the electric motor.&lt;/p&gt;&#xA;" OwnerUserId="4044" LastEditorUserId="134" LastEditDate="2014-03-16T08:27:24.447" LastActivityDate="2014-03-16T08:27:24.447" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2635" PostTypeId="1" AcceptedAnswerId="2636" CreationDate="2014-03-15T11:28:39.080" Score="3" ViewCount="1254" Body="&lt;p&gt;I am using 8 brushless motors for an octocopter. Each motor can be run at maximum 30A. I use 4 batteries in parallel. How high C number is needed?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\frac{30*8}{4*2} = 30C$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When running the motors at 100% load, it will draw 30C from each battery. Can a 25C with max 50C be used, or will it run hot?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additionaly, how many ampere hours can be drawn from a 5000mAh battery before it's empty? Many 12V car batteries can only be drawn for 60% of their stated capacity before they need to be charged.&lt;/p&gt;&#xA;" OwnerUserId="4012" LastEditorUserId="350" LastEditDate="2014-03-17T14:08:36.103" LastActivityDate="2014-03-17T14:08:36.103" Title="How much can realistically be drawn from a 25C max 50C battery?" Tags="&lt;battery&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2636" PostTypeId="2" ParentId="2635" CreationDate="2014-03-15T13:12:21.540" Score="3" Body="&lt;p&gt;Total current that can be drawn from a battery depends on discharge capacity (C) and ampere-hour (Ah) rating of a battery. Maximum continuous current that can be drawn from batter can be given as follows&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Maximum Current (A) = discharge capacity (C) x  ampere-hour(Ah)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;For example, in your case if you are using 5000mAh, 25C battery, then you can draw maximum  125A continuously. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Generally discharge capacity of battery is mentioned as continuous discharge and burst discharge. Continuous discharge rating can be used to calculate maximum allowed continuous current. Burst discharge rating can be used to calculate maximum burst current that an be handled by battery. Usually burst current is can be drawn for few seconds (less than 10 seconds).&#xA;For example, in your case if you are using 5000mAh, 25C-50C battery, they you can draw 125A continuous and 250A burst current.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So for application purpose, one should always use continuous discharge rating for calculations and keep in mind burst rating only as fail-safe.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are using batteries in parallel then make sure all have same discharge rating. Discharge rating and voltage of resultant battery will be same as individual battery and only Ah rating will add up. So in your case, resultant battery should be 9600mAh, 25C then only it will be able to supply 240A(8x30A) continuously. In case you are using 4 batteries in parallel then each battery should be at least 2400mAh.&lt;/p&gt;&#xA;" OwnerUserId="2118" LastActivityDate="2014-03-15T13:12:21.540" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="2637" PostTypeId="1" AcceptedAnswerId="2638" CreationDate="2014-03-16T01:10:35.437" Score="3" ViewCount="1732" Body="&lt;p&gt;When researching robots, micro mouses etc I've often come across people taking about generating &quot;speed profiles&quot; and how to calculate them. Also profiles for acceleration , deceleration , turning etc. Also trapezoidal profile?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I can't seem to find exactly what is meant by this. The how or why also.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what is a &quot;profile&quot; in this sense and why you would need one?&lt;/p&gt;&#xA;" OwnerUserId="2718" LastActivityDate="2018-03-11T01:55:17.700" Title="What is meant by a speed profile?" Tags="&lt;control&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2638" PostTypeId="2" ParentId="2637" CreationDate="2014-03-16T02:19:07.417" Score="5" Body="&lt;p&gt;Think of a motion profile as a graph of speed vs. time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you drive your car down the road:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Your initial speed is zero.&lt;/li&gt;&#xA;&lt;li&gt;You start pressing the accelerator pedal.&lt;/li&gt;&#xA;&lt;li&gt;The car starts moving slowly.&lt;/li&gt;&#xA;&lt;li&gt;You keep pressing down on the accelerator.&lt;/li&gt;&#xA;&lt;li&gt;The car accelerates faster.&lt;/li&gt;&#xA;&lt;li&gt;As you approach your targer speed you let go of the accelerator.&lt;/li&gt;&#xA;&lt;li&gt;The car settles on your target speed.&lt;/li&gt;&#xA;&lt;li&gt;You approach a stop sign and start pressing on the brake pedal.&lt;/li&gt;&#xA;&lt;li&gt;Your speed goes down and as you approach the stop sign you start letting go of the brake pedal.&lt;/li&gt;&#xA;&lt;li&gt;You come to a smooth stop.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I just described roughly what people would refer to as an S-curve motion profile or a limited jerk profile.  To experience jerk in your car try this next time you stop, press the brake pedal but do not let it go at all until the car comes to an absolute stop.  This also illustrates the importance of controlling the motion profile for smooth motion.  When graphed this looks something like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/WxM7C.png&quot; alt=&quot;Wikipedia third order motion profile&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can see the S in there.  A trapezoidal profile has straight lines and three sections and as per our car experiment above will force you to reduce your acceleration to avoid &quot;jerking&quot; at the &quot;corners&quot; (discontinuities).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should also think about this in terms of the equivalent position vs. time graph.  A motion profile executed in a robot, e.g. is typically moving from one position to the other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Motion profiles are critical for achieving smooth and reliable high performance motion.  With more than one motion axis they are also important for synchronizing the motion.  Without them your motion might look like your car firing off a rocket to get started and locking the wheels to stop at the end of the street, not very pretty.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additional reading:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.pmdcorp.com/resources/get/mathematics-of-motion-control-profiles-article&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.pmdcorp.com/resources/get/mathematics-of-motion-control-profiles-article&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="1584" LastEditorUserId="19829" LastEditDate="2018-03-11T01:55:17.700" LastActivityDate="2018-03-11T01:55:17.700" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2639" PostTypeId="1" AcceptedAnswerId="2647" CreationDate="2014-03-16T17:01:40.787" Score="1" ViewCount="789" Body="&lt;p&gt;I want to create a two wheel remote controlled robot. I have worked out a lot of the logic with regards to balancing. I have started to read up on motor control and arduino vs beagleboard black vs raspberry pi.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is the multitasking nature of a full linux OS a problem I need to be concerned with for this application?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I expect that I have to adjust the motors at least 20 times per second, but I don't think a slight variation in the update loop interval to be a problem. Possibly, I will face problems if I need to do PWM myself?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically, the way I plan to make the robot work is by using an accelerometer to have a reference to where down is. The robot will autonomously work to keep the direction of the accelerometer down. The remote control will simply adjust the readings from the accelerometer, and the balancing loop will then react as if the robot is falling and accelerate the wheels.&lt;/p&gt;&#xA;" OwnerUserId="4049" LastEditorUserId="9570" LastEditDate="2015-05-20T06:11:42.240" LastActivityDate="2015-05-20T06:11:42.240" Title="Raspberry Pi for two wheel robot?" Tags="&lt;arduino&gt;&lt;control&gt;&lt;raspberry-pi&gt;&lt;real-time&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2641" PostTypeId="1" AcceptedAnswerId="2648" CreationDate="2014-03-16T22:01:46.667" Score="1" ViewCount="1080" Body="&lt;p&gt;I want to make a circuit that powers a transistor when a sound above a set threshold is reached. (Trigger a flash for high speed photography.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How long will the response time be?&lt;/p&gt;&#xA;" OwnerUserId="4012" LastActivityDate="2014-03-18T10:54:03.250" Title="What is the response time of an Arduino Nano?" Tags="&lt;arduino&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2642" PostTypeId="1" CreationDate="2014-03-17T02:11:54.320" Score="8" ViewCount="2165" Body="&lt;p&gt;I am doing SLAM with a four wheeled (2-wheel drive) differential drive robot driving through some hall way. The hallway is not flat everywhere. And the robot turns by spinning in place, then traveling in the resulting direction. The SLAM algorithm does not need to run online.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The robot takes measurements from a strap down IMU/gyro measuring &lt;code&gt;(ax,ay,az,wx,wy,wz)&lt;/code&gt;, where &lt;code&gt;ax&lt;/code&gt; refers to acceleration the x direction and &lt;code&gt;wx&lt;/code&gt; measures angular acceleration about the x-axis. The LIDAR scans the hall way with a 270-degree arc and measures ranges and angles. However, so far as I know the hall way has no discernable features except when it corners&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need to find the best way to fuse the proposed action measured by the encoder with IMU and LIDAR data. It makes sense to me that I could fuse yaw from IMU with encoder data to get a better sense of heading, but how should I incorporate LIDAR data? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In essence, what is the appropriate &lt;em&gt;measurement model&lt;/em&gt; and how should I incorporate noise into the &lt;em&gt;motion model&lt;/em&gt;? Beside just adding some gaussian noise at some &lt;code&gt;(0,σ)&lt;/code&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Addendum&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This somewhat orthogonal to the question but just as confusing to me. Currently I am using a particle filter to do SLAM, and I am a little confused about whether to represent uncertainty in angular acceleration in the particles themselves. I see two options:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;A separate navigation filter using EKF (or anything really) to find a vector of &quot;best-estimate&quot; angular acceleration matrix first, then use this matrix as absolute truth for the particle filter. So that any drift in the particles is &lt;em&gt;not&lt;/em&gt; from uncertainty in angular acceleration.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Incorporate the uncertainty into the particle drift themselves. This option appears more sensible but I am not sure what a principled way to do this is. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="4024" LastEditorUserId="4024" LastEditDate="2014-03-17T14:18:06.840" LastActivityDate="2014-07-11T09:38:39.517" Title="What is the best way to fuse measurements from IMU, LIDAR, and Encoder information in some recursive bayesian filter?" Tags="&lt;kalman-filter&gt;&lt;slam&gt;&lt;particle-filter&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2643" PostTypeId="1" CreationDate="2014-03-17T05:45:57.033" Score="2" ViewCount="559" Body="&lt;p&gt;Most small quadcopters use rigid rotors with some fixed pitch.&#xA;In principle, I can imagine it might be possible for such a rigid-prop quadcopter to hover upside-down,&#xA;but that apparently requires reversing the direction of rotation of all 4 motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(This is very different from the way some &quot;standard&quot; single-rotor model helicopters can hover upside-down by continuing to spin that rotor in &quot;the same direction&quot;, but moving the swash plate to give negative blade pitch).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it possible for a rigid-prop quadcopter to hover upside-down?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I build a quadcopter so it can switch from flying upright to flying upside-down and back again in mid-flight, what do I do differently than a normal quadcopter designed to always fly right-side-up?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Related: &lt;a href=&quot;https://electronics.stackexchange.com/questions/2771/can-you-run-a-bldc-motor-backwards-without-damage&quot;&gt;&quot;Can you run a BLDC motor backwards without damage?&quot;&lt;/a&gt; )&lt;/p&gt;&#xA;" OwnerUserId="187" LastEditorUserId="-1" LastEditDate="2017-04-13T12:33:08.317" LastActivityDate="2014-03-18T01:07:41.447" Title="Can a rigid-prop quadcopter hover upside-down?" Tags="&lt;motor&gt;&lt;quadcopter&gt;&lt;multi-rotor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2644" PostTypeId="1" CreationDate="2014-03-17T09:40:12.103" Score="1" ViewCount="1276" Body="&lt;p&gt;Can anyone help me out here with this DC motor, especially the encoder part? I tried searching around for its datasheet but its as short as 1 page and the only spec I get are:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Encoder:&#xA;1 pulse/revolution&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It has 2 connection on the bottom, and I guess they are for driving the motor, but they say nothing about the 3 connections wires below.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/yj8sz.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="4053" LastEditorUserId="10596" LastEditDate="2016-05-06T12:03:11.623" LastActivityDate="2016-05-06T12:03:11.623" Title="DC motor with encoder" Tags="&lt;motor&gt;&lt;quadrature-encoder&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2645" PostTypeId="2" ParentId="2644" CreationDate="2014-03-17T13:52:03.463" Score="0" Body="&lt;p&gt;Yes, &lt;a href=&quot;http://www.crouzet.com/english/catalog/dc-motors-dc-direct-drive-brushed-motors-32-mm-3-9-watts-3-9-w-with-tags-Part%20number-82860502.pdf#zoom=100&quot; rel=&quot;nofollow&quot;&gt;Crouzet's 82860502 documentation&lt;/a&gt; doesn't seem to be very helpful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to &lt;a href=&quot;http://www.crouzet-usa.com/techtalk/lofiversion/index.php/t145.html&quot; rel=&quot;nofollow&quot;&gt;this post on their forum&lt;/a&gt;, the wiring is as follows:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Brown wire: + VDC encoder supply&lt;/li&gt;&#xA;&lt;li&gt;Yellow wire: encoder output signal&lt;/li&gt;&#xA;&lt;li&gt;Blue wire: encoder ground&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-03-17T13:52:03.463" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2646" PostTypeId="2" ParentId="2641" CreationDate="2014-03-17T14:00:57.543" Score="2" Body="&lt;p&gt;Why would you use an Arduino plus a circuit when you can just use the circuit by itself?  Here are some example circuits:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.doc-diy.net/photo/sound_trigger/&quot; rel=&quot;nofollow&quot;&gt;http://www.doc-diy.net/photo/sound_trigger/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://hiviz.com/tools/triggers/triggers2.htm&quot; rel=&quot;nofollow&quot;&gt;http://hiviz.com/tools/triggers/triggers2.htm&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://forums.popphoto.com/showthread.php?346908-How-to-Build-a-simple-Sound-Trigger&quot; rel=&quot;nofollow&quot;&gt;http://forums.popphoto.com/showthread.php?346908-How-to-Build-a-simple-Sound-Trigger&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.instructables.com/id/Sound-Activated-Camera-Trigger-For-High-Speed-Phot/&quot; rel=&quot;nofollow&quot;&gt;http://www.instructables.com/id/Sound-Activated-Camera-Trigger-For-High-Speed-Phot/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.diyphotography.net/universal_sound_and_optical_slave_flash_trigger/&quot; rel=&quot;nofollow&quot;&gt;http://www.diyphotography.net/universal_sound_and_optical_slave_flash_trigger/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-03-17T14:00:57.543" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2647" PostTypeId="2" ParentId="2639" CreationDate="2014-03-17T14:06:25.813" Score="1" Body="&lt;p&gt;With an Arduino, you are guaranteed to have dedicated processing power for your balancing application.  That said, the calculations for PID control are not terribly complicated and I would be very surprised to hear that a Raspberry Pi could not keep up with 20 calculations per second, even under load.  &lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-03-17T14:06:25.813" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2648" PostTypeId="2" ParentId="2641" CreationDate="2014-03-17T14:11:04.593" Score="2" Body="&lt;p&gt;If you're using a microcontroller (Arduino-type) with a loop, you can expect a response time of microseconds or less. If you're using a more advanced controller (Raspberry PI or BeagleBone Black), the latency will be less predictable, but very fast. The reason for less predictable latency is multitasking on the systems running Linux, while the Arduino isn't running anything that will interfere.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given that you plan to use sound as a signal, there will be physical factors that create greater variation in reaction speed; wind direction comes to mind as a significant source of latency.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, if you're trying to trigger it by the camera click sound, I guess you could do quite well with a simple arduino.&lt;/p&gt;&#xA;" OwnerUserId="4049" LastEditorUserId="158" LastEditDate="2014-03-18T10:54:03.250" LastActivityDate="2014-03-18T10:54:03.250" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2649" PostTypeId="1" CreationDate="2014-03-18T00:21:51.850" Score="0" ViewCount="407" Body="&lt;p&gt;I'm a newbie to Mircroprocessors (PcDuino, for example) and I wanted to know if Kinect can be integrated with the pcduino, before I go and buy the board. I know in terms of connectors etc what might be required. My concern is regarding the hardware required to run the Kinect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To elaborate more, I'll explain my current system: I have a system working on my laptop that uses a Kinect to extract unorganized point cloud data using &quot;Processing&quot; IDE which interacts with Kinect using openni drivers. My Matlab code then processes this information to detect obstacles and specific objects (can also be done using C++). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to build such a system for a robot, but using pcduino as the processing module. This means that the Kinect will connect to the pcduino using one of its usb ports. I'll power the Kinect using battery and a converted power adapter. Since pcduino can run Linux (Ubuntu) I (think I) can easily convert my laptop code into whatever the Ubuntu requires. The only concern I have is if there were any problems associated with using depth sensors with mini pc boards in terms of hardware capabilities of mini pc boards? I know that mini pc boards are not as fast as a PC, so the processing would be slower, but I'm not concerned with the speed, atleast for the time being.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One problem I encountered while using kinect, even on a PC is that the point cloud drivers in openni won't initiate the point cloud data stream, unless there was a GPU in the PC; the exact same code runs perfectly on a PC with a dedicated GPU. However, I do know that pcduino has a GPU chip (OpenGl ES2.0). Would the kinect work on this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I searched online but the closest thing I could find is &lt;a href=&quot;http://hackaday.com/2013/05/29/charlotte-the-hexapod-with-3d-vision/&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt; which does not elaborate how the integration of Raspi and Asus Xtion works. I'm not too picky about the boards, anything that would work with a kinect is fine with me, although I like the pcduino since it has arduino headers and built in wi-fi etc. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any additional pointers can also be helpful. Please let me know if I need to elaborate on anything more.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance&lt;/p&gt;&#xA;" OwnerUserId="4056" LastActivityDate="2014-03-20T13:14:04.960" Title="Kinect point cloud + Pcduino. Will it work?" Tags="&lt;microcontroller&gt;&lt;kinect&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2650" PostTypeId="2" ParentId="687" CreationDate="2014-03-18T01:03:29.050" Score="3" Body="&lt;p&gt;Excellent answer by George. If I may, I'd like add more details and suggestions. (I would recommend googling terms that are new to you). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your entire robot (input) configuration depends on what kind of data your code is going to process. If it's more vision oriented, the data can be depth maps, point clouds, rgb images  or a combination of the 3. This means you can use something like the Kinect (which would require a more powerful processor that the arduino), or simple rgb cameras (for which something like the arducam+arduino is sufficient). Arduino can run simple computer vision programs, but nothing too heavy and processor intensive. Also, if I'm not wrong, Arduino cannot process and use its GPIO pins at the same time. Which means during an intensive processing task, your robot motors are basically off.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my experience, if you're planning to use point cloud stream, it would require a dedicated graphics hardware (like a GPU chip that's present on the Raspberry Pi or pcduino). (Hell, even my laptop cannot run the point cloud stream openni drivers without a dedicated graphics card)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depth maps can be easily processed without a GPU, but it still requires high processing capabilities which would render the Arduino micro'controller' pretty useless. In this case you'd require a microprocessor board viz. Beagleboard, pcduino, gumstix, Raspi, Arduino TRE (not released yet), to name a few.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In terms of the output, the way to control your robot's mobility is to send power to the dc motors, servos, or stepper motors of your robot. This requires writing programs similar to what one would write on the microcontroller like an arduino. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you require microprocessors, in my opinion (although I've never used it before), the pcduino V2 has it all: First of all, it's relatively cheap (~$70 + some cables etc). Raspi is cheaper, but not as powerful. &#xA;Pcduino has 1Ghz A10 processor, expandable upto 32GB SD slot, a GPU chip (OpenGL ES2.0) which means you can program CV applications and integrate webcams, or maybe even a Kinect. It also has wifi arduino headers, HDMI and usb outputs for easily connecting to monitors for programming etc. &#xA;But the thing I love about pcduino is that it has arduino headers. Which means you can attach something like the ADAfruit motor shield (normally used with arduino to effectively control a bunch of motors) on top of the pcduino board and send motor signals to control your robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this helps&lt;/p&gt;&#xA;" OwnerUserId="4056" LastActivityDate="2014-03-18T01:03:29.050" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2651" PostTypeId="2" ParentId="2643" CreationDate="2014-03-18T01:07:41.447" Score="2" Body="&lt;p&gt;You can run a brushless DC motors backwards using a &lt;a href=&quot;https://en.wikipedia.org/wiki/H_bridge&quot; rel=&quot;nofollow&quot;&gt;H-bridge&lt;/a&gt;. Basically you'll need to program your microcontroller/microprocessor onboard to flip the polarity of 2 of the wires of the bldc (a bldc has 3 wires, switching any 2 wires will reverse the spin)&lt;/p&gt;&#xA;" OwnerUserId="4056" LastActivityDate="2014-03-18T01:07:41.447" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2652" PostTypeId="1" AcceptedAnswerId="2654" CreationDate="2014-03-18T02:38:24.990" Score="1" ViewCount="97" Body="&lt;p&gt;I'm planning to order parts for my first quadcopter build and I had a few questions. &lt;a href=&quot;https://docs.google.com/document/d/1jJsP1noISRmEyQZirJVCQK5455tRXtAwk2ZPOVDElxk/edit?usp=sharing&quot; rel=&quot;nofollow&quot;&gt;Here&lt;/a&gt; is my parts list. I'm crossing my fingers that they are all compatible, and I'm pretty sure they are. I have two questions:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Do I need a Power Distribution Board and if so, what does it do?&lt;/li&gt;&#xA;&lt;li&gt;Where on my flight controller do I attach my radio receiver? &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="4057" LastEditorUserId="350" LastEditDate="2014-03-18T22:05:03.423" LastActivityDate="2014-03-18T22:05:25.300" Title="A few questions about my first quadcopter build" Tags="&lt;quadcopter&gt;&lt;microcontroller&gt;&lt;radio-control&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ClosedDate="2014-03-19T15:18:33.987" ContentLicense="CC BY-SA 3.0" />
  <row Id="2653" PostTypeId="2" ParentId="2644" CreationDate="2014-03-18T02:44:58.833" Score="3" Body="&lt;p&gt;Besides referring to the previously-mentioned &lt;a href=&quot;http://www.crouzet.com/english/catalog/dc-motors-dc-direct-drive-brushed-motors-32-mm-3-9-watts-3-9-w-with-tags-Part%20number-82860502.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;82860502 pdf file&lt;/a&gt;, see pages 30 and 31 of Steven Engineering's &lt;a href=&quot;http://stevenengineering.com/tech_support/PDFs/44MICRO-MOTORS.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;44MICRO-MOTORS.pdf file&lt;/a&gt;, where the following diagram appears and shows the usage of the brown, yellow, and blue wires.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/FnW8e.png&quot; alt=&quot;encoder wiring diagram&quot;&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Attach a V+ voltage (for example, 5VDC) to the brown wire and connect the blue wire to ground.  As the motor rotates, the yellow wire will alternately be pulled up to V+ through a 10K resistor, and to ground via an NPN transistor. &lt;/p&gt;&#xA;" OwnerUserId="478" LastEditorUserId="350" LastEditDate="2014-03-20T13:18:46.987" LastActivityDate="2014-03-20T13:18:46.987" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2654" PostTypeId="2" ParentId="2652" CreationDate="2014-03-18T03:09:09.410" Score="1" Body="&lt;p&gt;Since your frame is about (530g + other parts' weight), you need to make sure that your 4 motors give you a combined thrust of at least 100 g more than, just to get off the ground and maneuver. Anything greater than that is good. (&lt;a href=&quot;http://aeroquad.com/showthread.php?1048-Calculating-motor-thrust&quot; rel=&quot;nofollow&quot;&gt;Thrust Calculator&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You battery amps * burst C / constant C should be greater than the motor amp pull * 4.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Propellers look OK. Make sure their inner diameter matches motor shaft diameter, else buy adapters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Motor controller board is also good.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your radio receiver output should control the ALE, THR, ELE, RUD (Aileron, Thrust, Elevation, Rudder). Which means the radio receiver output (the CHx output pins) should be the input (the 4 above) of the controller board.&lt;/p&gt;&#xA;" OwnerUserId="4056" LastEditorUserId="350" LastEditDate="2014-03-18T22:05:25.300" LastActivityDate="2014-03-18T22:05:25.300" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2655" PostTypeId="2" ParentId="2631" CreationDate="2014-03-18T03:18:51.600" Score="2" Body="&lt;p&gt;Since your frame is about (220g + other parts' weight), you need to make sure that your 4 motors give you a combined thrust of atleast 100 g more than, just to get off the ground and maneuver. Anything greater than that is good. &lt;a href=&quot;http://aeroquad.com/showthread.php?1048-Calculating-motor-thrust&quot; rel=&quot;nofollow&quot;&gt;(Thurst Calculator)&lt;/a&gt;. Just looking at the numbers, I think it should work out fine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You battery amps * burst C / constant C should be greater than the motor amp pull * 4 (using same units, mAh or Ah).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your ESC amp rating should be higher than the Max current pull of a motor (which it looks to be).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Propellers look OK. Make sure their inner diameter matches motor shaft diameter, else buy adapters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Rest all looks good to me.&lt;/p&gt;&#xA;" OwnerUserId="4056" LastActivityDate="2014-03-18T03:18:51.600" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2656" PostTypeId="2" ParentId="2613" CreationDate="2014-03-18T03:25:08.540" Score="0" Body="&lt;p&gt;The easiest way to built a 4 wheeled robot with motors to all 4 wheels is to buy a &lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/B003ML36HI&quot; rel=&quot;nofollow&quot;&gt;Rock crawler&lt;/a&gt; off of the internet, and to remove it's body and Radio receiver. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then connect it's motors' and steering motor's wires to the output of a microcontroller and you have your 4WD robot, with the differential n steering system with suspensions n all. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are building a differential drive robot, best way is to give power to 2 diagonally opposite wheels and keep other 2 wheels freely rotating. This means your robot's platform should be circular&lt;/p&gt;&#xA;" OwnerUserId="4056" LastActivityDate="2014-03-18T03:25:08.540" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2657" PostTypeId="1" AcceptedAnswerId="2658" CreationDate="2014-03-18T04:05:40.643" Score="1" ViewCount="82" Body="&lt;p&gt;I have found some load sensors (piezoelectric) that measure relatively small weights (on the order of ~ grams). That's what I need!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However...&#xA;Around my robot, there will occasionally be bursts of extremely high pressure. These bursts do not need to be measured... they just wash over.&#xA;The pressure appears, to the sensor, to be a ~ 2,000+ kg &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Question:&#xA;Are these sensors likely to break or fatigue? I realize piezos do not measure via deformation, but still... that's a big load!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe I should just order a few and try...&lt;/p&gt;&#xA;" OwnerUserId="4058" LastActivityDate="2014-08-05T01:49:57.543" Title="Could piezoelectric sensors be crushed?" Tags="&lt;sensors&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2658" PostTypeId="2" ParentId="2657" CreationDate="2014-03-18T10:27:53.867" Score="0" Body="&lt;p&gt;This really depends on the sensor. There are sensors which are protected for heigher loads. Usually around 300%-1500% of the rated load for sensors in gram range. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most manufacturers say, connect the sensor when you are installing it so you can monitor it live so you won't break it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd recommend to check the datasheet of your sensor. This should specify overload. I'd also think of something to prevent your sensor from such high loads.&lt;/p&gt;&#xA;" OwnerUserId="4029" LastActivityDate="2014-03-18T10:27:53.867" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2661" PostTypeId="1" AcceptedAnswerId="2662" CreationDate="2014-03-18T16:35:08.657" Score="3" ViewCount="960" Body="&lt;p&gt;I have a system that I can make a strong kinematic model for, but my sensors send readings at unpredictable times. When I say unpredictable, I am not just saying the order the readings will arrive, I also mean that sensors are able to sleep when they do not see a significant change. When an input arrives for any given sensor, that information can be used to infer the states of many other sensors based on my model.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At first, it seemed like a Kalman Filter was exactly what I needed because I could make a prediction of all of the states of the system and then update those states when one piece of information comes in and repeat this process until a good estimate of the system as a whole was determined. However, after reading over Kalman filters, it looks like they assume that every state will be updated on a regular basis. Is there a way the Kalman filter can be modified for when you are unsure about what input will come in next and you are also unsure how much time will elasped before the next input arrives? Please note that in my case, once the information arrives, I will know the source of the input as well as the time that has elapsed since the last update, I just won't be able to predict these two things beforehand.&lt;/p&gt;&#xA;" OwnerUserId="4063" LastActivityDate="2014-03-18T20:31:17.763" Title="Kalman Filter when states are not observable at the same time?" Tags="&lt;kalman-filter&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2662" PostTypeId="2" ParentId="2661" CreationDate="2014-03-18T20:31:17.763" Score="6" Body="&lt;p&gt;First, be careful when using the term &quot;observable&quot; with respect to Kalman filters. It has a precise mathematical meaning that basically determines whether or not the filter is even possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With respect to your question, you need to select a subset of the observation and measurement noise covariance matrices depending on which measurements are available. Assume you have the system&#xA;$$&#xA;\begin{align}&#xA;x_{t+1} &amp;amp;= A_t x_t + B_t u_t + G_t w_t&#xA;\\&#xA;y_t &amp;amp;= C_t x_t  + v_t&#xA;\end{align}&#xA;$$&#xA;where $w$ and $v$, with covariance $W$ and $V$, are the dynamic and measurement noises respectively.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now partition your measurements as&#xA;$$&#xA;\begin{align}&#xA;y = \begin{bmatrix} y_1 \\ y_2\end{bmatrix},\quad&#xA;C = \begin{bmatrix} C_{11} &amp;amp; C_{12} \\ C_{21} &amp;amp; C_{22} \end{bmatrix},\quad&#xA;V = \begin{bmatrix} V_{11} &amp;amp; V_{12} \\ V_{21} &amp;amp; V_{22} \end{bmatrix}&#xA;\end{align}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you only have measurement 1 available, you would use the observation equation&#xA;$$&#xA;\begin{align}&#xA;y_1 &amp;amp;= C_{11} x + v_1&#xA;\end{align}&#xA;$$&#xA;and apply the Kalman filter measurement update accordingly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The difference in time between measurements is not a problem since you can just keep running the time update equation ($x_{t+1} = \dots$) until you get a measurement. i.e. You might run the time update equation 5 times before running a single measurement update.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2014-03-18T20:31:17.763" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2666" PostTypeId="2" ParentId="2649" CreationDate="2014-03-20T13:14:04.960" Score="1" Body="&lt;p&gt;I have used ROS and Ubuntu with a Kinect on many platforms and it has yet to let me down. I used it on a Pentium laptop without dedicated GPU as well as on powerfull desktops.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the board has a USB port (which it does) and it can run Ubuntu, I don't see that there would be any problems with this setup. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have also used MatLab on Windows and it is much easier to work with than ROS. Be prepared to do some debugging before it gets working correctly. If you don't have to, good for you!&lt;/p&gt;&#xA;" OwnerUserId="3927" LastActivityDate="2014-03-20T13:14:04.960" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2667" PostTypeId="1" AcceptedAnswerId="2669" CreationDate="2014-03-20T17:35:28.547" Score="0" ViewCount="70" Body="&lt;p&gt;My friend has acquired a (small) wine yard to discover how much work it is tending and harvesting the grapes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now we are musing to enlist robotic help. The vine stocks are usually connected by a stiff wire, so some dangling machine might be feasible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We are looking for references/inspirations for an agricultural robotic vine assistant. Any ideas?&lt;/p&gt;&#xA;" OwnerUserId="4078" LastActivityDate="2014-03-21T01:01:27.010" Title="Wine yard robotics?" Tags="&lt;mobile-robot&gt;&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="5" ClosedDate="2014-03-27T11:04:11.900" ContentLicense="CC BY-SA 3.0" />
  <row Id="2668" PostTypeId="1" AcceptedAnswerId="2675" CreationDate="2014-03-20T22:28:34.050" Score="3" ViewCount="929" Body="&lt;p&gt;I wrote my own quadcopter firmware which is based on some older code. This code shall stabilize the copter to be always in equilibrium. The model is behaving relatively nice. I can control it with my laptop.&#xA;However I noticed, that the copter is hovering to the side (if not manually controlled), likely because of wind, not well balanced or turbulence. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My idea was maybe to fuse GPS and accelerometer data to implement a function which shall help to hold the position. But this will likely only work if I have a hold altitude function, because changes in pitch or roll change the height, because the thrust is changed slightly. This is why I recently added a routine which shall allow to hold the altitude. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is someone having experiences with this? I mean with avoiding side drifts of the model because of whatever by software? The problem is in my opinion, that I don't know whether the position change is wanted (by remote control) or not. Additionally it is hard to localize the correct position and calculate the distance caused by drift from it (just with GPS, but this is not precise).&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void hold_altitude(int_fast16_t &amp;amp;iFL, int_fast16_t &amp;amp;iBL, int_fast16_t &amp;amp;iFR, int_fast16_t &amp;amp;iBR, &#xA;                   const int_fast32_t rcalt_m) &#xA;{&#xA;  // Enhance the performance:&#xA;  // This function is only needed for (semi-)autonomous flight mode like:&#xA;  // * Hold altitude&#xA;  // * GPS auto-navigation&#xA;  if(_RECVR.m_Waypoint.m_eMode == GPSPosition::NOTHING_F) {&#xA;    return;&#xA;  }&#xA;&#xA;  // Return estimated altitude by GPS and barometer &#xA;  float fCurAlti_cm       = _HAL_BOARD.get_alti_m() * 100.f;&#xA;  // Estimate current climb rate&#xA;  float fBaroClimb_cms    = _HAL_BOARD.get_baro().climb_rate_ms * 100;&#xA;  float fAcclClimb_cms    = _HAL_BOARD.get_accel_ms().z * 100;&#xA;  // calculate the &#xA;  float fAltStabOut      = _HAL_BOARD.m_rgPIDS[PID_THR_STAB].get_pid(fCurAlti_cm - (float)(rcalt_m*100), 1);&#xA;  float fBarAcclOut      = _HAL_BOARD.m_rgPIDS[PID_THR_ACCL].get_pid(fAltStabOut - fBaroClimb_cms, 1);&#xA;  float fAccAcclOut      = _HAL_BOARD.m_rgPIDS[PID_THR_ACCL].get_pid(fAltStabOut - fAcclClimb_cms, 1);&#xA;  int_fast16_t iAltOutput = _HAL_BOARD.m_rgPIDS[PID_THR_RATE].get_pid(fAltStabOut - (fBarAcclOut + fAccAcclOut), 1);&#xA;  // Modify the speed of the motors&#xA;  iFL += iAltOutput;&#xA;  iBL += iAltOutput;&#xA;  iFR += iAltOutput;&#xA;  iBR += iAltOutput;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Copter control:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;// Stabilise PIDS&#xA;float pit_stab_output = constrain_float(_HAL_BOARD.m_rgPIDS[PID_PIT_STAB].get_pid((float)rcpit - vAtti.x, 1), -250, 250);&#xA;float rol_stab_output = constrain_float(_HAL_BOARD.m_rgPIDS[PID_ROL_STAB].get_pid((float)rcrol - vAtti.y, 1), -250, 250);&#xA;float yaw_stab_output = constrain_float(_HAL_BOARD.m_rgPIDS[PID_YAW_STAB].get_pid(wrap180_f(targ_yaw - vAtti.z), 1), -360, 360);&#xA;&#xA;// is pilot asking for yaw change - if so feed directly to rate pid (overwriting yaw stab output)&#xA;if(abs(rcyaw ) &amp;gt; 5.f) {&#xA;  yaw_stab_output = rcyaw;&#xA;  targ_yaw = vAtti.z; // remember this yaw for when pilot stops&#xA;}&#xA;&#xA;// rate PIDS&#xA;int_fast16_t pit_output = (int_fast16_t)constrain_float(_HAL_BOARD.m_rgPIDS[PID_PIT_RATE].get_pid(pit_stab_output - vGyro.x, 1), -500, 500);&#xA;int_fast16_t rol_output = (int_fast16_t)constrain_float(_HAL_BOARD.m_rgPIDS[PID_ROL_RATE].get_pid(rol_stab_output - vGyro.y, 1), -500, 500);&#xA;int_fast16_t yaw_output = (int_fast16_t)constrain_float(_HAL_BOARD.m_rgPIDS[PID_YAW_RATE].get_pid(yaw_stab_output - vGyro.z, 1), -500, 500);&#xA;&#xA;int_fast16_t iFL = rcthr + rol_output + pit_output - yaw_output;&#xA;int_fast16_t iBL = rcthr + rol_output - pit_output + yaw_output;&#xA;int_fast16_t iFR = rcthr - rol_output + pit_output + yaw_output;&#xA;int_fast16_t iBR = rcthr - rol_output - pit_output - yaw_output;&#xA;// Hold the altitude&#xA;hold_altitude(iFL, iBL, iFR, iBR, rcalt);&#xA;&#xA;hal.rcout-&amp;gt;write(MOTOR_FL, iFL);&#xA;hal.rcout-&amp;gt;write(MOTOR_BL, iBL);&#xA;hal.rcout-&amp;gt;write(MOTOR_FR, iFR);&#xA;hal.rcout-&amp;gt;write(MOTOR_BR, iBR);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="4080" LastActivityDate="2014-03-21T17:03:58.140" Title="Removing quadcopter drift to the side" Tags="&lt;arduino&gt;&lt;quadcopter&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2669" PostTypeId="2" ParentId="2667" CreationDate="2014-03-21T01:01:27.010" Score="0" Body="&lt;p&gt;You might want to check out this grape vine pruning robot: &lt;a href=&quot;https://www.youtube.com/watch?v=9GaGO9LIDEA&quot; rel=&quot;nofollow&quot;&gt;https://www.youtube.com/watch?v=9GaGO9LIDEA&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-03-21T01:01:27.010" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2670" PostTypeId="2" ParentId="2668" CreationDate="2014-03-21T04:23:23.903" Score="0" Body="&lt;p&gt;Do you have Gyros (roll pitch and yaw) installed? I would recommend those, since they give stability feedback to your code. If possible, you can even add a control board (from Hobbyking, kkV2). This board has 3 gyros, inputs to ale, rud, thr, ele. But the best thing is, it has gain adjusters for all 3 gyros, which means you can adjust them till your quad is stable (they adjust the power given to motors to keep the quad flat)&lt;/p&gt;&#xA;" OwnerUserId="4056" LastActivityDate="2014-03-21T04:23:23.903" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2671" PostTypeId="1" CreationDate="2014-03-21T05:37:55.657" Score="4" ViewCount="860" Body="&lt;p&gt;What exactly is active compliance control in robotics joint? &#xA;Why Is it used ? &#xA;How can I write a program to simulate the compliance control in matlab for a single robotic link or single robotic joint ?&#xA;I have to develop an algorithm for torque control.&#xA;I have to sense the torque and give feedback to BLDC motor which is supposed to apply some controlled torque. &#xA;I also have some unclear understanding of few things: Lets say I have single joint two link systems, How would this system behave when I have applied the compliance control algorithm at the joint? How will I test it? I mean if I apply some external torque what should it do so that I understand that it is in compliance control mode.&#xA;Here is a related paper.&#xA;&lt;a href=&quot;http://www.thehandembodied.eu/pdf/ICCAS.pdf&quot; rel=&quot;nofollow&quot;&gt;http://www.thehandembodied.eu/pdf/ICCAS.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4081" LastEditorUserId="4081" LastEditDate="2014-04-03T01:33:14.013" LastActivityDate="2014-06-02T02:37:02.540" Title="Compliance control for a single link robot in matlab" Tags="&lt;control&gt;&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2672" PostTypeId="1" AcceptedAnswerId="2674" CreationDate="2014-03-21T05:54:35.640" Score="1" ViewCount="57" Body="&lt;p&gt;I'm trying to use the &lt;a href=&quot;http://www.micromo.com/manuals/sites/en/steuerungen/mcbl_3006_s_rs.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;MCBL Controller&lt;/a&gt; by Faulhaber to control my motor. I'm trying to program some sort of driver on linux using the serial connection and libserial. But it does not seem to be working for now. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm using the usb to RS232 converter like this one:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/jA8vW.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/jA8vWm.png&quot; alt=&quot;Cable&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm wondering if it's well supported by libserial. I've read that yes but does anyone have any experience with it?&lt;/p&gt;&#xA;" OwnerUserId="1615" LastEditorUserId="1615" LastEditDate="2014-03-21T19:03:33.790" LastActivityDate="2014-03-21T19:03:33.790" Title="MCBL Controller through RS232" Tags="&lt;serial&gt;&lt;communication&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2673" PostTypeId="1" AcceptedAnswerId="3195" CreationDate="2014-03-21T09:38:10.010" Score="2" ViewCount="165" Body="&lt;p&gt;I am doing research of ego-motion estimation and positioning in 6DoF space. And I found that apparently all systems are based on active RGB-D sensors, like Kinect. I understand, that such sensors provide greater accuracy, and requires less computational resources.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But if such systems will be used, for example, for augmented reality or robot navigation, how they are going to solve the problem of the interference of signals from different systems, operating in the same space? If many people will wear AR glasses with active sensors - they will interfere with each other, aren't they?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there big commercial projects, that use passive visual odometry with multiple camera units and IMU sensors? I found some good papers on this topic, but I have not found commercial application of such technology. I am going to make research of passive odometry method for AR, but is it actually a problem with active depth sensors, that i described earlier?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;UPD:&#xA;The main question:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is passive odometry, based on video flow analysis and IMU, worth to make deep research in this topic, or active sensors - is our future, and the signal mix is not a big deal, and passive odometry is a dead end of such kind of technology? Because it will be not very useful to make research in useless technology...&lt;/p&gt;&#xA;" OwnerUserId="4083" LastEditorUserId="4083" LastEditDate="2014-03-21T22:26:48.173" LastActivityDate="2014-07-02T15:57:36.283" Title="Passive ego-motion estimation vs active" Tags="&lt;kinect&gt;&lt;sensor-fusion&gt;&lt;odometry&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2674" PostTypeId="2" ParentId="2672" CreationDate="2014-03-21T09:39:30.560" Score="1" Body="&lt;p&gt;Answering myself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yes it works flawlessly, you just need to take care of the different parameters for the connection. Especially the flow control one needed to be set at none.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then just send the command using a std::string and the &quot;&amp;lt;&amp;lt;&quot; operator.&lt;/p&gt;&#xA;" OwnerUserId="1615" LastEditorUserId="1615" LastEditDate="2014-03-21T19:03:18.620" LastActivityDate="2014-03-21T19:03:18.620" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2675" PostTypeId="2" ParentId="2668" CreationDate="2014-03-21T17:03:58.140" Score="2" Body="&lt;p&gt;The drift is being caused either by your position data being consistently wrong, or by your roll/pitch PIDs not correcting the drift error with their integral term.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In any case, it is the integral term of a PID that (when working properly) prevents drift.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-03-21T17:03:58.140" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2676" PostTypeId="1" CreationDate="2014-03-21T19:55:19.767" Score="3" ViewCount="4382" Body="&lt;p&gt;I believe that there must be a &lt;em&gt;tool&lt;/em&gt; that can measure &lt;span class=&quot;math-container&quot;&gt;$oz-in$&lt;/span&gt; of torque.  I do not trust what the servo manufacturers state on their site for torque values, so I want to test them for myself.&lt;/p&gt;&#xA;&lt;p&gt;Can anyone suggest a tool which I can use to do this?  I have used fishing scales before, but I need something more sensitive than that and my units are pretty small, such as around &lt;span class=&quot;math-container&quot;&gt;$20\; oz-in$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="4028" LastEditorUserId="28193" LastEditDate="2021-03-25T13:16:15.293" LastActivityDate="2021-03-28T18:22:59.880" Title="How Can I Measure the torque applied by a servo motor?" Tags="&lt;servomotor&gt;&lt;torque&gt;" AnswerCount="4" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="2680" PostTypeId="1" CreationDate="2014-03-22T11:03:29.697" Score="2" ViewCount="7168" Body="&lt;p&gt;I am designing  a remote controlled robot which will have a base with three wheels, two of them will be simple wheels at the back of the base and the third will be a ball wheel at the front. It will have a robotic arm which will have a gripper to hold objects up to 1kg. I have designed the arm like this&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/8BH53.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I want to ask is how to calculate the length of the arm, the base of the  robot, the torque and also which motor to use. Please suggest to me if there is a better solution for designing the robot.I am a robot enthusiast and I am designing a robot for the first time.&lt;/p&gt;&#xA;" OwnerUserId="4090" LastEditorUserId="7383" LastEditDate="2014-11-16T19:40:13.890" LastActivityDate="2017-12-23T07:08:36.343" Title="How to decide about the length of a robotic arm, the base of it and the torque?" Tags="&lt;motor&gt;&lt;control&gt;&lt;design&gt;&lt;robotic-arm&gt;" AnswerCount="3" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2681" PostTypeId="2" ParentId="2673" CreationDate="2014-03-22T11:46:37.330" Score="0" Body="&lt;p&gt;Odometry based only on passive sensors is a thoroughly researched topic.  You will find topics such as optic-flow, visual odometry, visual SLAM (VSLAM), structure from motion, stereo vision, etc.  This is certainly one path forward many people are going based on the cheap availability of cameras.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, with the introduction of the Kinect and other cheap RGB-D sensors, many people are switching to this route.  Yes, they provide much more information and can simplify many problems.  I don't think i have heard of issues of interference between them.  However, it might be because they are mounted so that their field of views don't overlap.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-03-22T11:46:37.330" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2682" PostTypeId="2" ParentId="2606" CreationDate="2014-03-22T21:00:39.897" Score="2" Body="&lt;p&gt;I feel that people who say &quot;this is off-topic&quot; should &lt;a href=&quot;http://communitywiki.org/en/OnAndOffTopic&quot; rel=&quot;nofollow noreferrer&quot;&gt;tell you about some other place where that is on-topic&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I see that you and I are not the only people who think the electronics stackexchange is a good place to ask questions about the &lt;a href=&quot;https://electronics.stackexchange.com/search?q=LPC1343&quot;&gt;NXP LPC1343&lt;/a&gt; and other &lt;a href=&quot;https://electronics.stackexchange.com/search?q=Cortex%20M3&quot;&gt;ARM Cortex M3&lt;/a&gt; processors.&lt;/li&gt;&#xA;&lt;li&gt;The Arduino Due uses a ARM Cortex-M3 CPU -- perhaps the &lt;a href=&quot;http://forum.arduino.cc/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Arduino Forum&lt;/a&gt; or the &lt;a href=&quot;https://arduino.stackexchange.com/&quot;&gt;Arduino Stackexchange&lt;/a&gt; or the &lt;a href=&quot;http://playground.arduino.cc/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Arduino Playground&lt;/a&gt; might be a good place to ask about setting up a toolchain and debugger for the M3 and other things that are not hyper-specific to the LPC1343.&lt;/li&gt;&#xA;&lt;li&gt;the &lt;a href=&quot;http://www.inf.u-szeged.hu/gcc-arm/&quot; rel=&quot;nofollow noreferrer&quot;&gt;GCC ARM Improvement Project&lt;/a&gt; might be a good place to ask about setting up a toolchain and debugger that is not specificic to the M3.&lt;/li&gt;&#xA;&lt;li&gt;The &lt;a href=&quot;http://www.lpcware.com/forums/microprocessor-forums/lpc13xx&quot; rel=&quot;nofollow noreferrer&quot;&gt;lpc13xx Microprocessor Forum&lt;/a&gt; may be a good place to ask about things that are specific to the LPC13xx series (including the LPC1343).&lt;/li&gt;&#xA;&lt;li&gt;The LPCXpresso now uses the LPC1347 chip -- perhaps you might pick up some good tips at the &lt;a href=&quot;http://www.lpcware.com/forums/lpcxpresso/lpcxpresso-forum&quot; rel=&quot;nofollow noreferrer&quot;&gt;LPCXpresso Forum&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Perhaps you might pick up some good tips in the &quot;Getting started with the &lt;a href=&quot;https://www.olimex.com/Products/ARM/NXP/LPC-P1343/&quot; rel=&quot;nofollow noreferrer&quot;&gt;LPC-P1343&lt;/a&gt;&quot; document.&lt;/li&gt;&#xA;&lt;li&gt;I hear the &lt;a href=&quot;http://dangerousprototypes.com/forum/search.php?keywords=LPC1343&amp;amp;submit=Search&quot; rel=&quot;nofollow noreferrer&quot;&gt;Dangerous Prototypes forum sometimes discusses the LPC1343&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Good luck.&lt;/p&gt;&#xA;" OwnerUserId="187" LastEditorUserId="-1" LastEditDate="2017-04-13T12:50:09.580" LastActivityDate="2014-03-22T21:00:39.897" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2683" PostTypeId="1" AcceptedAnswerId="2685" CreationDate="2014-03-22T23:09:54.270" Score="6" ViewCount="9930" Body="&lt;p&gt;I wonder currently how to implement an altitude control for a quadcopter. I have atm just a barometer/GPS and an accelerometer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Barometer and GPS are relatively straight forward implemented, but not very precise and slow. For the accelerometer readout, I remove the constant 9.81 m/s² acceleration by a low pass filter. Then I take this data and calculate out of it the climb-rate(in cm per s). I know the speed approximation by this way is not so great. However I don't know a better approach so far.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the calculation of the motor speeds I use atm two PIDs (STAB and RATE). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I coded the example shown below, without much testing so far. I believe it will not work out in a smooth and nice way. E. g. instead of the speed calculated of the accelerometer I could use the climb-rate of the barometer. However for low altitudes and small changes I do need very likely the accelerometer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;ArduPilot seems to use somehow in a different way both with a third PID for the acceleration. I believe they calculate the height difference like me. Then they use maybe for STAB-Pid the barometer climb rate (not like me the accelerometer) and calculate with acceleration data another output. Unfortunately I don't know how exactly, or whether there are other methods.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does someone know the exact layout to implement with a barometer and accelerometer an altitude hold function. I mean I am really not sure whether my ideas would be correct. Maybe I can post some options later.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My PIDs:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;m_rgPIDS[PID_THR_STAB].kP(1.25);  // For altitude hold&#xA;&#xA;m_rgPIDS[PID_THR_RATE].kP(0.35);  // For altitude hold&#xA;m_rgPIDS[PID_THR_RATE].kI(0.15);  // For altitude hold&#xA;m_rgPIDS[PID_THR_RATE].imax(100); // For altitude hold&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Code for altitude hold:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;// Stabilizing code done before&#xA;&#xA;float fCurAlti_cm       = _HAL_BOARD.get_alti_m() * 100.f;        // Barometer and GPS data&#xA;float fAcclClimb_cms    = _HAL_BOARD.get_accel_mg_ms().z * 100;   // Accelerometer output in cm per s (gravitational const. corrected)&#xA;&#xA;// calculate the difference between current altitude and altitude wanted&#xA;float fAltStabOut       = _HAL_BOARD.m_rgPIDS[PID_THR_STAB].get_pid(fCurAlti_cm - (float)(rcalt_m*100), 1);&#xA;// Rate it with climb rate (here with accelerometer)&#xA;int_fast16_t iAltOutput = _HAL_BOARD.m_rgPIDS[PID_THR_RATE].get_pid(fAltStabOut - fAcclClimb_cms, 1);&#xA;&#xA;// Modify the speed of the motors&#xA;iFL += iAltOutput;&#xA;iBL += iAltOutput;&#xA;iFR += iAltOutput;&#xA;iBR += iAltOutput;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="4080" LastActivityDate="2018-10-21T14:29:42.613" Title="Altitude hold for quadcopter with Accelerometer and Barometer" Tags="&lt;sensors&gt;&lt;quadcopter&gt;&lt;accelerometer&gt;&lt;ardupilot&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2684" PostTypeId="2" ParentId="2680" CreationDate="2014-03-22T23:53:25.677" Score="2" Body="&lt;p&gt;Every motor has a torque described in kg&lt;em&gt;cm units. 1 kg&lt;/em&gt;cm means that the motor can lift 1kg weight on a distance of 1cm from the axis of rotation, or 0.5kg at the distance of 2cm and so on. Using that knowledge and the fact that you are lifting 1kg we can say that arm's length * 1kg must be less than the maximal torque of the motor. The stronger the motor - the longer the arm can be. How strong motor you'll use depends on how much money you'll spend and what length you need for your design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for the base of the robot, you need to measure where the center of the mass of the robot will be when the robot is holding the object and make sure that it is somewhere between the two red lines on the image (that is, between the wheels). If the center of mass goes outside of these boundaries, your robot will flip over. If your robot is accelerating, then not only the gravity can flip it but also the force due to acceleration (F=m*a). To check if your robot will flip, add the vectors of gravity force and force due to acceleration, position the beginning of the vector at the center of the mass and check if the vector passes between the wheels. If it doesn't, the robot will flip over.&#xA;You can make sure that doesn't happen by keeping your center of mass low (that is, keeping your base heavy), keeping the wheels as separated as possible and not having a too long arm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope this helped you as your question is a bit vague.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/dxGho.png&quot; alt=&quot;center of mass&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="4017" LastActivityDate="2014-03-22T23:53:25.677" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2685" PostTypeId="2" ParentId="2683" CreationDate="2014-03-23T03:19:24.910" Score="1" Body="&lt;p&gt;Sorry, I'm not sure exactly what your code is doing but generally speaking ... &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead of trying to control using the accelerometer directly, it is usually better to estimate velocity and control using that (as the D part of your PID controller). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're willing to dig into the math, the most common way to do this is to combine the barometer and accelerometer measurements using a Kalman filter. This will give you a smooth estimate of the altitude and velocity which can then be used as the P and D of the attitude controller.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2014-03-23T03:19:24.910" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2687" PostTypeId="1" CreationDate="2014-03-23T06:31:46.373" Score="5" ViewCount="42637" Body="&lt;p&gt;I'm trying to calculate the lifting capability of my four quadcopter motors. I tried using eCalc but it doesn't have battery I'm using. Are there any equations to keep in mind for doing these calculations? Here are some relevant details:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Battery: 2200mAh 3S 25~50C LiPo&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ESC: 25A&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Motor: 1240kV Brushless&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Propeller: 8x4&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help would be much appreciated, thanks!&lt;/p&gt;&#xA;" OwnerUserId="4057" LastActivityDate="2019-04-16T10:01:22.073" Title="Need help calculating the thrust on quadcopter motors" Tags="&lt;quadcopter&gt;" AnswerCount="4" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2688" PostTypeId="2" ParentId="2110" CreationDate="2014-03-24T00:11:47.373" Score="2" Body="&lt;p&gt;Search for a Digital Potentiometer. It's exactly what you're looking for. Just replace the manual pot's with them and you can use serial connections to control the voltage.&lt;/p&gt;&#xA;" OwnerUserId="4099" LastActivityDate="2014-03-24T00:11:47.373" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2690" PostTypeId="2" ParentId="2683" CreationDate="2014-03-24T14:50:26.277" Score="0" Body="&lt;p&gt;I made a small routine for that, but not yet completely without errors. E.g.the acceleration term is still contradicting the differcence in height term, but working for it's own well.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;const float fBias_g   = 0.1f;&#xA;const float fScaleF_g = 100.0f;&#xA;&#xA;int_fast16_t iAltZOutput = 0; // Barometer &amp;amp; Sonar&#xA;int_fast16_t iAccZOutput = 0; // Accelerometer&#xA;&#xA;// Return estimated altitude by GPS and barometer &#xA;bool bOK_H, bOK_R, bOK_G;&#xA;int_fast32_t fCurAlti_cm = altitude_cm(&amp;amp;_HAL_BOARD, bOK_H);&#xA;float fClimbRate_cms = climbrate_cms(&amp;amp;_HAL_BOARD, bOK_R);&#xA;// Get the acceleration in g&#xA;Vector3f vAccel_g = accel_g(&amp;amp;_HAL_BOARD, bOK_G) * fScaleF_g;&#xA;&#xA;// Calculate the motor speed changes by the error from the height estimate and the current climb rates&#xA;// If the quadro is going down, because of an device error, then this code is not used&#xA;if(_RECVR.m_Waypoint.mode != GPSPosition::CONTRLD_DOWN_F) {&#xA;  float fAltZStabOut = _HAL_BOARD.m_rgPIDS[PID_THR_STAB].get_pid((float)(rcalt_cm - fCurAlti_cm), 1);&#xA;  iAltZOutput        = _HAL_BOARD.m_rgPIDS[PID_THR_RATE].get_pid(fAltZStabOut - fClimbRate_cms, 1);&#xA;}&#xA;&#xA;&#xA;// Don't change the throttle if acceleration is below a certain bias&#xA;vAccel_g.z           = sign_f(vAccel_g.z) * (abs(vAccel_g.z) - fBias_g) * fScaleF_g;&#xA;&#xA;// Calculate the throttle changes if copter changes altitude&#xA;float fAccZStabOut   = _HAL_BOARD.m_rgPIDS[PID_ACC_STAB].get_pid(vAccel_g.z, 1);&#xA;iAccZOutput          = _HAL_BOARD.m_rgPIDS[PID_ACC_RATE].get_pid(fAccZStabOut, 1);&#xA;&#xA;// Modify the speed of the motors to hold the altitude&#xA;iFL += iAltZOutput + iAccZOutput;&#xA;iBL += iAltZOutput + iAccZOutput;&#xA;iFR += iAltZOutput + iAccZOutput;&#xA;iBR += iAltZOutput + iAccZOutput;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="4080" LastEditorUserId="4080" LastEditDate="2014-06-01T11:33:20.963" LastActivityDate="2014-06-01T11:33:20.963" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2691" PostTypeId="2" ParentId="2676" CreationDate="2014-03-24T19:34:10.930" Score="2" Body="&lt;p&gt;One option for you if you are willing to spend ~ 100 dollars is a particle brake.  I just saw a 15 in-lb particle brake on ebay for 99 dollars.  If you search, you may be able to find a better deal.  You can couple a particle brake to your shaft and the torque that the brake applies is proportional to voltage.  Their torque is usually pretty linear with respect to voltage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you can't spend that much, then I don't have a lot of options for you.  But there are some checks you can do.  Start with checking winding resistance.  &lt;strong&gt;Measure the resistance between any 2 of the 3 motor leads&lt;/strong&gt; and make sure it matches the manufacturer's spec.  Stall torque is proportional to resistance, so this is an important value.  I would suggest using a strobe or motor tachometer (~ 30 dollars).  &lt;strong&gt;Measure no-load speed and current.&lt;/strong&gt;  Attach your motor to another motor and back drive the motor.  Take an oscilloscope and look at the waveform between any 2 of the 3 motor leads.  &lt;strong&gt;Measure the peak voltage and record the speed at the time of the measurement.&lt;/strong&gt;  The speed (in RPM) divided the peak voltage should give you the motor's Kv value.  The peak voltage divided by the speed (in RPM) should give you the motor's back-emf constant.  Even more important is if you take the peak voltage divided by the speed (in rads/sec), then you get a back-emf constant in Volts/(rad/sec) which is equivalent to your torque constant in Nm/A.  From your no-load current and your torque constant, you should be able to estimate what your torque is based on the current draw of your motor.   &lt;/p&gt;&#xA;" OwnerUserId="3866" LastActivityDate="2014-03-24T19:34:10.930" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2692" PostTypeId="1" CreationDate="2014-03-25T03:43:33.757" Score="1" ViewCount="528" Body="&lt;p&gt;I am trying to send some data over to my PC from the Arduipilot, I used a Normal USB connection to send over a recurring string like this:-&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;const AP_HAL::HAL&amp;amp; hal = AP_HAL_BOARD_DRIVER;&#xA;&#xA;void setup()&#xA;{&#xA;   hal.uartA-&amp;gt;begin(38400);&#xA;}&#xA;&#xA;void loop()&#xA;{&#xA;    hal.scheduler-&amp;gt;delay(20);&#xA;    hal.console-&amp;gt;println(&quot;Recd_String&quot;);&#xA;}&#xA;AP_HAL_MAIN();&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I receive the string just fine when I open a serial monitor with baud of 38400 bits/sec. But, when I remove the USB port and plug in the 3DR radio module to the ardupilot and the PC, it gives me garbage. I know that the 3DR radios use MAVLink communication protocol, but I was wondering if it's possible to change this protocol and use a normal SPI so that I receive the data in the same format I receive when connected via USB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If this is not possible, is there a way to convert this garbled data from the radio module to a useful string. &#xA;It would be greatly appreciated if someone can help me with this.&lt;/p&gt;&#xA;" OwnerUserId="4107" LastEditorUserId="350" LastEditDate="2014-03-26T14:02:15.457" LastActivityDate="2015-07-14T05:13:31.167" Title="Using 3DR Radio to communicate ArduPilot Data" Tags="&lt;ardupilot&gt;&lt;radio-control&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2694" PostTypeId="1" AcceptedAnswerId="2722" CreationDate="2014-03-25T22:45:13.137" Score="1" ViewCount="139" Body="&lt;p&gt;Does anybody know how to configure the node ID of an Ingenia &lt;a href=&quot;http://www.ingeniamc.com/En/-Pluto-compact-dc-servo-drive-canopen&quot; rel=&quot;nofollow&quot;&gt;Pluto&lt;/a&gt; DC Servo Drive?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've got a request out to their support team, but perhaps somebody here is already familiar with these drive boards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do have Ingenia MotionLab 2.7.2, but it does not ship with documentation and the MotionLab user manual on the site is out of date (I had previously been looking through the hardware documentation, but it turns out the info was in MotionLab documentation; although the instructions for previous versions no longer seem to apply to 2.7.2).&lt;/p&gt;&#xA;" OwnerUserId="2248" LastEditorUserId="2248" LastEditDate="2014-03-26T20:39:28.220" LastActivityDate="2014-03-29T18:29:13.897" Title="Set CANopen Node ID of Ingenia Pluto DC Servo Drive" Tags="&lt;control&gt;&lt;can&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2695" PostTypeId="1" CreationDate="2014-03-25T23:22:40.403" Score="0" ViewCount="49" Body="&lt;p&gt;I'm looking to make or buy something resembling an LED, that would be thin (about 0.5mm or less) and cheap (&amp;lt;0.1$ in mass production).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any suggestions?&lt;/p&gt;&#xA;" OwnerUserId="3912" LastActivityDate="2014-03-26T13:12:48.740" Title="What are the options for a thin light source (e.g. LED)?" Tags="&lt;arduino&gt;&lt;electronics&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2014-03-27T11:06:25.640" ContentLicense="CC BY-SA 3.0" />
  <row Id="2696" PostTypeId="1" CreationDate="2014-03-25T23:48:03.573" Score="5" ViewCount="583" Body="&lt;p&gt;I'm designing a simple autopilot software on top of Ardupilot, my goal is to possibly interface an Raspi on top of ArduPilot Mega (APM). I am stuck on setting up a simulation environment using either V-Rep or Gazebo. &#xA;The quadcopter will have basic sensors plus advanced sensors. basic sensors talks directly with ArduPilot, while advanced sensors talks with my own autopilot software. I am trying to wrap my head around a feasible setup to test the software while using ArduPilot Mega in the Hardware-In-The-Loop. I am planning on having three stages of Simulation:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Stage 1. Simulate quadcopter physics in Gazebo/V-Rep, run ArduPilot software and my autopilot software in a VM (not sure if it's even do-able)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Stage 2. Simulate quadcopter physics in computer, run my autopilot software in a VM, and run APM in a hardware-in-the-loop fashion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Stage 3. deploy my autopilot onto Raspi and interface with APM then run both hardwares in Hardware-in-the-loop fashion.&lt;/p&gt;&#xA;" OwnerUserId="4117" LastActivityDate="2015-08-17T17:27:40.793" Title="An architecture for testing autonomous flight and sensors" Tags="&lt;quadcopter&gt;&lt;simulator&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2697" PostTypeId="2" ParentId="2676" CreationDate="2014-03-26T03:57:40.153" Score="2" Body="&lt;p&gt;There are lots of ways of measuring torque from first principles.  Obviously the first problem is that you need a sensor, you have lots of options:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;You can use a torque sensor. ( e.g. imada.com/torque-testers/torque-gauge ) couple it directly to your shaft.  Drive your motor.  Read the sensor.  Your error would be the sensor's accuracy plus any errors introduced due to inaccurate coupling.&lt;/li&gt;&#xA;&lt;li&gt;You can use some sort of force sensor.  Your scale is one example.  You mount an arm on the motor and you read the force at a given distance.  This gives you torque.  With a scale you want to: idle your motor, zero the scale with the weight of your arm on it, and then energize the motor (pushing on the scale) and read the scale.  Any zeroing error plus measurement error on the arm would eat into your accuracy.  Variations on this is putting a large weight on and driving up.  It's all the same principle.&lt;/li&gt;&#xA;&lt;li&gt;You can use a position sensor.  Mount a large mass of known moment of inertia onto the motor and start driving it.  Take position measurements and differentiate them to find velocity and then acceleration.  From acceleration you can work back to torque given the moment of inertia inertia.  This has the advantage of being able to measure torque at speed. This is basically an inertia dynamometer.  You accuracy will depend on how accurately you know the moment of inertia of the system (including the shaft), you timing resolution, your position sensor resolution, friction potentially introduced by the sensor (e.g. an encoder) etc.&lt;/li&gt;&#xA;&lt;li&gt;velocity sensor.  same princple as above.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="1584" LastActivityDate="2014-03-26T03:57:40.153" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2698" PostTypeId="1" CreationDate="2014-03-26T05:48:00.727" Score="2" ViewCount="142" Body="&lt;p&gt;I implemented a bootstrap Particle filter on C++ by reading few Papers and I first implemented a 1D mouse tracker which performed really well. I used normal Gaussian for weighting in this exam. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I extended the algorithm to track face using 2 features of Local motion and HSV 32 bin Histogram. In this example my weighing function becomes the probability of Motion x probability of Histogram. (Is this correct).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Incase if that is correct than I am confused on the resampling function. At the moment my resampling function is as follows:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For each Particle N = 50;&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Compute CDF&lt;/li&gt;&#xA;&lt;li&gt;Generate a random number (via Gaussian) X&lt;/li&gt;&#xA;&lt;li&gt;Update the particle at index X&lt;/li&gt;&#xA;&lt;li&gt;Repeat for all N particles.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;This is my re-sampling function at the moment. Note: the second step I am using a Random Number via Gaussian distribution for get the index while my weighting function is Probability of Motion and Histogram. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is: Should I generate random number using the probability of Motion and Histogram or just the random number via Gaussian is ok.&lt;/p&gt;&#xA;" OwnerUserId="4120" LastEditorUserId="350" LastEditDate="2014-03-26T13:59:05.503" LastActivityDate="2014-03-26T13:59:05.503" Title="Random number generation for Particle Filter" Tags="&lt;mobile-robot&gt;&lt;localization&gt;&lt;particle-filter&gt;&lt;tracks&gt;" AnswerCount="0" CommentCount="1" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2699" PostTypeId="2" ParentId="2695" CreationDate="2014-03-26T13:12:48.740" Score="2" Body="&lt;p&gt;What's wrong with an actual LED? Size 0402 is about your size spec.&#xA;&lt;a href=&quot;http://www.digikey.com/product-detail/en/SML-P11MTT86/511-1652-2-ND/2036457&quot; rel=&quot;nofollow&quot;&gt;This one&lt;/a&gt; is $0.06 at 10k quantity.&lt;/p&gt;&#xA;" OwnerUserId="794" LastActivityDate="2014-03-26T13:12:48.740" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2700" PostTypeId="1" AcceptedAnswerId="2816" CreationDate="2014-03-26T14:20:19.360" Score="1" ViewCount="93" Body="&lt;p&gt;I'm working on a project where mains voltage will sometimes be disconnected, and the system will have to run on battery for as long as possible before doing a (safe) shutdown.  The desired behavior is exactly like a laptop battery system:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;When mains voltage is connected, charge the battery and power the system from mains&lt;/li&gt;&#xA;&lt;li&gt;When mains voltage is disconnected, power the system from the battery&lt;/li&gt;&#xA;&lt;li&gt;Prevent the battery system from supplying current when the batteries are discharged below a certain voltage (to prevent damage).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Is there a name for this type of system, or a name for the feature(s) that I should be looking for when I look at chargers?  (If it matters, this system will be 12V, so I'm looking at 14.8V Lithium battery options.)&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-04-23T14:21:47.133" Title="Battery system with and without mains voltage attached" Tags="&lt;power&gt;&lt;battery&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2701" PostTypeId="1" CreationDate="2014-03-26T18:32:21.253" Score="4" ViewCount="575" Body="&lt;p&gt;I want to implement my own GPS navigation for a quad-copter.&#xA;I can calculate and filter the GPS coordinates (latitude and longitude in degrees). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I believe the easiest approach for me would be, to calculate the change of the heading of the quad-copter from the current attitude to the destination point and let it fly straight on after turning. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However I am not sure about the 2D representation of the latitude/longitude-GPS coordinates (for a round earth to a 2D map system when calculating the heading change). How big is the expected error? Or is there none?&lt;/p&gt;&#xA;" OwnerUserId="4080" LastEditorUserId="4080" LastEditDate="2014-03-26T19:20:40.187" LastActivityDate="2014-03-26T22:59:45.833" Title="2D Map representation of GPS coordinates in degrees" Tags="&lt;navigation&gt;&lt;gps&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2702" PostTypeId="1" CreationDate="2014-03-26T22:05:01.857" Score="2" ViewCount="223" Body="&lt;p&gt;A robotic usually consists of joints with sections of possibly varying width connected together. Considering we know how much each is bent and the length of each section, and their location in 3D space (not local coordinates) at time zero; how do we determine how much each joint should rotate to goto position B from position A. Both A and B are defined in world cartesian coordinates.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now each joint can move in terms or all at once, so should all joints move simultaneously or in turns?&lt;/p&gt;&#xA;" OwnerUserId="4125" LastEditorUserId="158" LastEditDate="2014-03-31T09:58:24.180" LastActivityDate="2014-03-31T09:58:24.180" Title="How does one calculate the angular motion of each node in a robotic arm" Tags="&lt;kinematics&gt;&lt;robotic-arm&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2703" PostTypeId="2" ParentId="2701" CreationDate="2014-03-26T22:59:45.833" Score="1" Body="&lt;p&gt;If the expected range of your quadcopter's journeys is under 10 miles, the error between spherical and flat geometry is less than the GPS's poistion error...assuming you are using normal GPS, not dGPS. As a rough rule of thumb, 2D mapping works to the horizon!&lt;/p&gt;&#xA;" OwnerUserId="2402" LastActivityDate="2014-03-26T22:59:45.833" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2704" PostTypeId="1" CreationDate="2014-03-27T06:38:33.453" Score="7" ViewCount="8466" Body="&lt;p&gt;I am trying to better understand the dynamics of forward flight in multirotors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming I have a quadcopter with 4 motor/propeller combinations capable (each) of a propeller pitch speed of, say, SpeedMax= 100 mph.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In forward horizontal flight, the quadcopter will pitch down at a certain angle, let's say AlphaP, from horizontal. If AlphaP is, say, 45 degrees, and drag is neglected, wouldn't the quadcopter be capable of a max theoretical speed of sin (45)* SpeedMax ~ 70Mph?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, seems to me AlphaP cannot go all the way to 90 degree (quadcopter flying like a plane), as at that point the propellers would not produce any  upward thrust to maintain the copter aloft given there is no wing loading as available in a plane.  If drag was to be neglected, what factors would the optimum AlphaP be depended on, and what would that angle be, for maximum speed?&lt;/p&gt;&#xA;" OwnerUserId="4128" LastActivityDate="2016-06-24T17:50:40.337" Title="Quadcopter forward speed" Tags="&lt;quadcopter&gt;" AnswerCount="4" CommentCount="3" FavoriteCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="2705" PostTypeId="2" ParentId="2704" CreationDate="2014-03-27T08:34:34.420" Score="0" Body="&lt;p&gt;With my rudimentary knowledge of aerodynamics, your calculation of forward horizontal velocity sounds OK. I'm sure other people can shed more light on the practical constraints.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;About the max alphaP angle, here's what I think:&#xA;Say your copter can produce F Newton upward thrust. And say your copter weighs x Kg. Then your max angle for alphaP will be governed by:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; F*cos(maxAlphaP) = x*g     //cos or sine alphaP, depending upon how you measure the angle.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="1949" LastActivityDate="2014-03-27T08:34:34.420" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2706" PostTypeId="1" CreationDate="2014-03-27T09:11:15.570" Score="0" ViewCount="100" Body="&lt;p&gt;I want to know how to write and run the correct code. I understand that I need to download OpenCV (which I have), but when I try to compile sample code - for example, Blob Detection - it doesn't compile. I am just very confused on the process of what you need to do to get something to show up on the screen. &#xA;I know my question is really vague, but I have such a bad understanding of Computer Vision that I don't really know how to describe my problem. Hopefully discussing more will be able to help me. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please help me! I have been searching the Internet for 2 hours now and I am just lost in a sea of information...&lt;/p&gt;&#xA;" OwnerUserId="2565" LastActivityDate="2014-03-27T09:31:19.067" Title="How do I get started in Computer Vision?" Tags="&lt;computer-vision&gt;" AnswerCount="1" CommentCount="0" ClosedDate="2014-03-27T11:04:31.257" ContentLicense="CC BY-SA 3.0" />
  <row Id="2707" PostTypeId="2" ParentId="2706" CreationDate="2014-03-27T09:31:19.067" Score="1" Body="&lt;p&gt;First try going through tutorials on the official OpenCV website: &lt;a href=&quot;http://docs.opencv.org/doc/tutorials/tutorials.html&quot; rel=&quot;nofollow&quot;&gt;http://docs.opencv.org/doc/tutorials/tutorials.html&lt;/a&gt;&#xA;There they don't talk only about OpenCV functions but also explain some basic concepts of image processing along the way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also recommend this course, it can help you grasp some basic concepts related to geometry: &lt;a href=&quot;https://class.coursera.org/vision&quot; rel=&quot;nofollow&quot;&gt;https://class.coursera.org/vision&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, this is a great book but it is a bit depricated &lt;a href=&quot;http://www.cse.iitk.ac.in/users/vision/dipakmj/papers/OReilly%20Learning%20OpenCV.pdf&quot; rel=&quot;nofollow&quot;&gt;http://www.cse.iitk.ac.in/users/vision/dipakmj/papers/OReilly%20Learning%20OpenCV.pdf&lt;/a&gt; so use it with caution of that if you will.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regards,&#xA;Damjan&lt;/p&gt;&#xA;" OwnerUserId="4017" LastActivityDate="2014-03-27T09:31:19.067" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2708" PostTypeId="1" AcceptedAnswerId="2872" CreationDate="2014-03-27T15:21:50.917" Score="8" ViewCount="1265" Body="&lt;p&gt;I have a system in which I have two separate subsystems for estimating robot positions.&#xA;First subsystem is composed of 3 cameras which are used for detecting markers the robot is carrying and which outputs 3 estimates of the robot's position and orientation.&#xA;The second subsystem is a system which is located on the robot and is measuring speed on the two points of the robot. By numerically integrating those two I can get an estimate on the robot's position and orientation (because I am tracking two points at once).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first system is less accurate but the second system drifts. First system gives output about once a second while the second one gives output much more frequently (100-200 times per second).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I assume there must be a better approach than to just reset the position with the first system's estimate (as it is not 100% accurate), but to also use the accumulated position from the second sensor system and fuse that with the new data from the first system. Also, there is a question how to fuse 3 estimates of the first system? There must be a better way than pure average as it might happen that the two estimates are exactly the same and the third one is completely different (meaning that it is probably more wrong)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do you have any fusion algorithms to recommend to use in such a system? I know about Kalman filter, but I am having trouble figuring out how to use it as the two systems output data at different frequencies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope the question is clear enough, what is the best approach to fuse the estimates into a more correct and accurate estimate?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="4017" LastActivityDate="2014-05-03T04:38:44.817" Title="Multiple position estimates fusion" Tags="&lt;sensors&gt;&lt;localization&gt;&lt;kalman-filter&gt;&lt;sensor-fusion&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2709" PostTypeId="2" ParentId="2700" CreationDate="2014-03-27T15:30:32.127" Score="1" Body="&lt;p&gt;It appears to me that you are looking for some sort of UPS (uninterruptible power supply). You should look for &quot;load sharing&quot; controllers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe one of these will suit your needs?&#xA;&lt;a href=&quot;http://www.mini-box.com/micro-UPS-load-sharing&quot; rel=&quot;nofollow&quot;&gt;http://www.mini-box.com/micro-UPS-load-sharing&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regards,&#xA;Damjan&lt;/p&gt;&#xA;" OwnerUserId="4017" LastActivityDate="2014-03-27T15:30:32.127" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2710" PostTypeId="2" ParentId="2702" CreationDate="2014-03-27T15:38:51.113" Score="4" Body="&lt;p&gt;Inverse kinematics (a very hard field in its own right) is the correct answer, but it gets even more complicated than that. The &lt;em&gt;path&lt;/em&gt; that your arm takes might really matter. Say that you need to get the end effector (gripper or hand) to a specific point, but there is a wall with a window in the way. The arm might need to snake around that hole so that it doesn't collide with the wall. This leads to the field of motion planning.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Motion_planning&quot; rel=&quot;nofollow&quot;&gt;Motion Planning&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One motion planning method that might help you work out the angles needed to get the hand to a specific position while taking the environment into account (the environment can also be free of clutter and all you want is the angles to get to a specific point) is to use a RRT.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Rapidly_exploring_random_tree&quot; rel=&quot;nofollow&quot;&gt;RRT - Rapidly exploring Random Tree&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This method would randomly close in on a solution in a &quot;smart&quot; way.&lt;/p&gt;&#xA;" OwnerUserId="4063" LastActivityDate="2014-03-27T15:38:51.113" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2711" PostTypeId="2" ParentId="2680" CreationDate="2014-03-27T15:47:07.893" Score="0" Body="&lt;p&gt;You could go into a lot of detail on what the optimal design would be by taking into account the weights of the joints and where their centers of mass are, how fast the robot arm would be moving, what positions the arm will be in (which effects the center of mass of the entire arm), etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, if you are just an enthusiast and want to make an arm that works, I would suggest just over designing the arm. Make your joints out of a light but strong material (PVC or some kind of plastic would probably work), get large enough servos that they will definitely be able to hold the weight of the arm and the object you are trying to pick up, and then make the base of the arm wide and heavy so that the arm is unlikely to fall over. You can probably work out some of these values by &quot;going with your gut&quot; and then adding a little more power, little less arm weight, and a little more base weight than what your gut tells you.&lt;/p&gt;&#xA;" OwnerUserId="4063" LastActivityDate="2014-03-27T15:47:07.893" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2712" PostTypeId="1" CreationDate="2014-03-27T21:37:46.570" Score="1" ViewCount="129" Body="&lt;p&gt;I have a Raspberry Pi (Model B) attached to a Roomba. I'm using &lt;a href=&quot;http://www.adafruit.com/products/1065&quot; rel=&quot;nofollow&quot;&gt;this part&lt;/a&gt; to bring the unregulated 17V+ power of the Roomba down the 5V/1A of the Pi. The problem is that the Pi will randomly reboot and cause peripherals (such as the bluetooth adapter) to freak out and not work. We can sometimes drive it around for a little while before it reboots, other times it happens almost immediately.&lt;/p&gt;&#xA;" OwnerUserId="3794" LastActivityDate="2015-04-01T21:19:39.263" Title="Power issues involving Raspberry Pi" Tags="&lt;mobile-robot&gt;&lt;raspberry-pi&gt;" AnswerCount="1" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="2713" PostTypeId="1" CreationDate="2014-03-27T22:16:09.580" Score="2" ViewCount="790" Body="&lt;p&gt;I am trying to build an autonomous multi coloured lines following robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The parts I have bought so far include:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Arduino Uno 3.&lt;/li&gt;&#xA;&lt;li&gt;3 Colour Sensors (taos tcs 230).&lt;/li&gt;&#xA;&lt;li&gt;L293DNE motor driver.&lt;/li&gt;&#xA;&lt;li&gt;Robot chassis including 2 dc motors, 2 wheels and 1 caster wheel.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I am trying to figure on how to connect all these components together (for example: arduino to the colour sensor, l293d to motor).  How do I connect it in order for the motor to rotate in both directions?  Do I need to solder anything?&lt;/p&gt;&#xA;" OwnerUserId="3858" LastEditorUserId="350" LastEditDate="2014-04-02T16:05:31.863" LastActivityDate="2014-05-02T17:12:58.477" Title="How to connect Arduino Uno3, L293D motor driver and 3 colour sensors together?" Tags="&lt;mobile-robot&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2714" PostTypeId="1" AcceptedAnswerId="2718" CreationDate="2014-03-28T00:42:24.880" Score="3" ViewCount="244" Body="&lt;p&gt;I'm considering building an absolute, indoor robot-positioning system based on ultrasound Time Of Flight. Transducers will be ordinary, narrow-band, 40 kHz ones.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based on your experience, what is the best exactitude and precision we can achieve with such a system?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm aware that the answer to such a question will depend on many factors, both hardware and software (if applicable), but I'm not asking about the performance of one solution or another, but about the intrinsic limitations of the ultrasound technology.&lt;/p&gt;&#xA;" OwnerUserId="4136" LastActivityDate="2014-03-28T15:48:43.630" Title="Precision we can expect of an ultrasound-based localisation system" Tags="&lt;localization&gt;&lt;ultrasonic-sensors&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2715" PostTypeId="1" CreationDate="2014-03-28T01:59:43.587" Score="2" ViewCount="439" Body="&lt;p&gt;More in the line of robotics observing their environment, I'm trying to implement a proximity sensor that can sense objects in front of it to a least up to $-30^ \circ \space$ to   $\space+30^ \circ $ of it's direction of propagation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are only two ways I can think of&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Multiple Infrareds.     Con: more spacious&lt;/li&gt;&#xA;&lt;li&gt;Fast-Motor.  Con: expensive in money and time-complexity wise&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I'm currently using a &lt;a href=&quot;https://www.sparkfun.com/datasheets/Sensors/Infrared/gp2y0a02yk_e.pdf&quot; rel=&quot;nofollow&quot;&gt;Proximity Sensor with up to 10ft distance capability&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4137" LastActivityDate="2014-07-31T15:05:23.180" Title="How to implement a distance proximity sensor with wider range" Tags="&lt;sensors&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2716" PostTypeId="2" ParentId="2713" CreationDate="2014-03-28T10:40:20.363" Score="1" Body="&lt;p&gt;You need to have a way of connecting things mechanically (e.g. screws) and electronically (e.g. wires). Depending on the connectors that you have, yes you may need to solder something.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to build a robot like that, you would need to have a basic understanding of electronics. Then you need to take the datasheet of your components, look at their electrical characteristics and make sure the circuit you make meets their needs (by carefully adding resistors, capacitors and inductors). An example from the driver you have picked:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/DRwfV.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are lucky, the datasheet may have a &quot;typical usage&quot; you could gain insight from. Example from your driver:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/NE33C.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is also connection to the microcontroller, which again means you should take the datasheet of the micro, look at what pins are available for what, and then decide which of your component pins should connect to which of the micro's pins. For example, you may need an interrupt from a certain component and therefore you should make sure to connect it to a pin that can generate an interrupt.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should also pay attention not to break the micro. For example, you shouldn't try to power a motor directly by a pin of the micro because usually the current that the micro can give out at its pins is not enough to drive a motor (and you'd risk burning the micro). You have done well by buying the motor drivers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, you need to program the micro, which depending on the microcontroller may be widely different. Arduino has tried to make the coding as simple as possible, so if you don't try to do smart things and stick with the basics, its libraries should be fine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Tip for things to go smoothly: &lt;strong&gt;read the datasheets carefully&lt;/strong&gt;.&lt;/p&gt;&#xA;" OwnerUserId="158" LastEditorUserId="158" LastEditDate="2014-03-28T10:46:43.583" LastActivityDate="2014-03-28T10:46:43.583" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2717" PostTypeId="2" ParentId="2715" CreationDate="2014-03-28T15:30:26.167" Score="1" Body="&lt;p&gt;You might want to check out these ultrasonic proximity sensors for example: &lt;a href=&quot;http://www.maxbotix.com/pictures/HRUSB-MaxSonar-EZ/HRUSB-MaxSonar-EZ%20Beam%20Patterns.gif&quot; rel=&quot;nofollow&quot;&gt;http://www.maxbotix.com/pictures/HRUSB-MaxSonar-EZ/HRUSB-MaxSonar-EZ%20Beam%20Patterns.gif&lt;/a&gt;&#xA;And then use two or three of them if needed to get a wider field.&#xA;They can be bought all over, sparkfun being one of the shops.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regards&lt;/p&gt;&#xA;" OwnerUserId="4017" LastActivityDate="2014-03-28T15:30:26.167" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2718" PostTypeId="2" ParentId="2714" CreationDate="2014-03-28T15:48:43.630" Score="1" Body="&lt;p&gt;It closely depends on the method you use to determine location. That is, will you use lateration or angulation? If you wish to use angulation then you need to synchronize the emitters (or receivers, depending on which of the two is being localized), find the phase difference using correlation of signals and then based on that estimate the location. At this point, the most difficult thing is the synchronization part and that's what will affect the error the most.&#xA;If you're using lateration (measuring the time of flight), you need to somehow know when the signal was generated and when it arrived at the target. For this you could use some RF transmission technology (ZigBee or WiFi or something). If your detection resolution is high enough you can get a pretty good accuracy (if your sampling frequency is for example 500kHz for example it means you can detect the minimal distance of around 0.6mm because that's how much the sound travels between the two measurements) but the thing to also consider is the latency in the RF communication. That latency can probably be measured and estimated to a degree but it will affect your precision.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All in all to finally answer your actual question, if all is calibrated well you can get an error bellow 1%. Check this out for example &lt;a href=&quot;http://link.springer.com/chapter/10.1007%2F978-1-4471-2386-6_105&quot; rel=&quot;nofollow&quot;&gt;http://link.springer.com/chapter/10.1007%2F978-1-4471-2386-6_105&lt;/a&gt; their results say 0.1% error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regards&lt;/p&gt;&#xA;" OwnerUserId="4017" LastActivityDate="2014-03-28T15:48:43.630" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2719" PostTypeId="1" CreationDate="2014-03-29T04:20:23.207" Score="2" ViewCount="177" Body="&lt;p&gt;I am building a 6 wheeled rover, one set of 3 wheels will work together and other set of 3 wheels will run together, so current in each side may vary from &lt;strong&gt;3A-15A(blocked rotor)&lt;/strong&gt; and &lt;strong&gt;6V&lt;/strong&gt; i want to make a H-bridge(for controlling direction and speed(i ll use PWM) so i will require &lt;strong&gt;two such H-bridges&lt;/strong&gt;. what is the &lt;strong&gt;copper track thickness&lt;/strong&gt; i should use in &lt;strong&gt;proteus&lt;/strong&gt; for making the design or else shall i go for &lt;strong&gt;manual soldering&lt;/strong&gt; replacing &lt;strong&gt;tracks with wires&lt;/strong&gt;. Can anybody suggest a design which is relatively easy to design with some &lt;strong&gt;protection circuit&lt;/strong&gt; in it (for MCU pins isolation) or suggest any suitable motor controllers from TI or any company which can be apt to my problem&lt;/p&gt;&#xA;" OwnerUserId="4088" LastEditorUserId="4088" LastEditDate="2014-03-29T04:31:43.523" LastActivityDate="2014-05-28T18:26:02.977" Title="H bridge for rover" Tags="&lt;motor&gt;&lt;control&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2721" PostTypeId="2" ParentId="2719" CreationDate="2014-03-29T17:39:30.257" Score="1" Body="&lt;p&gt;If you can purchase a motor driver board, Pololu has some that probably fit your specs. &lt;a href=&quot;http://www.pololu.com/product/708&quot; rel=&quot;nofollow&quot;&gt;This board&lt;/a&gt; uses the &lt;a href=&quot;http://www.st.com/web/catalog/sense_power/FM1965/SC1039/PF145473?s_searchtype=partnumber&quot; rel=&quot;nofollow&quot;&gt;VNH2SP30&lt;/a&gt; from ST. The Pololu board is rated for operating voltages from 5.5V to 16V and a continuous current of 14A (peak of 30A). Continuous current and peak current of course depend on how well cooled the driver chip is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could also create your own design around a driver chip like the VNH2SP30. The &lt;a href=&quot;http://www.st.com/st-web-ui/static/active/en/resource/technical/document/datasheet/CD00043711.pdf&quot; rel=&quot;nofollow&quot;&gt;datasheet&lt;/a&gt; has a standard application circuit that you may base your design off of. When designing your board, the copper thickness, usually specified in ounces of copper, is the same for the whole board and is typically 1 oz for external traces. Once you know the thickness, you can calculate the width of the trace based on the current through it. Wider traces have lower resistance per unit length and thus heat less and can handle higher current.&lt;/p&gt;&#xA;" OwnerUserId="1125" LastActivityDate="2014-03-29T17:39:30.257" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2722" PostTypeId="2" ParentId="2694" CreationDate="2014-03-29T18:22:17.753" Score="0" Body="&lt;p&gt;As it turns out, it is a bug in the current MotionLab 2.7.2. In theory, the node ID should be able to be changed on the Drive Parameter screen. However, the field for changing the ID is disabled:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/ANe6h.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was compounded by the fact that only documentation for the old MotionLab is available on their site, and the old procedure (right-click on drive in tree) no longer applies. The documentation for 2.7.2 is a work in progress and is not available yet. So missing documentation combined with this issue was the primary cause of confusion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the time of this writing, Ingenia has both confirmed this bug (and will be issuing an update soon) and stated that updated documentation will be available soon as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the mean time, Ingenia has offered the following workaround:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Node ID can be change writing the register 0x2000 , subindex 0x1.&lt;/p&gt;&#xA;  &#xA;  &lt;ol&gt;&#xA;  &lt;li&gt;&lt;p&gt;Just open with a terminal you communication port and write:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;Current node Id&amp;gt; &amp;lt;Action&amp;gt; &amp;lt;Subindex and index in hexa&amp;gt; &amp;lt;in hexa&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;  &lt;p&gt;E.g.:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;0x20 w 0x12000 &amp;lt;Node number&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;  &lt;p&gt;I suggest you using Realterm for instance.&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;li&gt;&lt;p&gt;[Use] the old MotionLab.&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;/ol&gt;&#xA;  &#xA;  &lt;p&gt;After changing the Node id, remember to ‘commit’ the parameters (save in non-volatile memory).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Theoretically, you could also do this via, e.g., libcanopen on Linux. 0x2000 subindex 0x01 can be used to write the 8-bit node ID (range 1-127), and parameters can be committed to non-volatile memory by writing 0x65766173 to index 0x1010 subindex 0x01 (&lt;a href=&quot;http://www.ingeniamc.com/En/-Pluto-DC-Servo-Drive.CREF.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;source&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm presuming the updated software and documentation will be available by the time anybody actually finds and reads this post.&lt;/p&gt;&#xA;" OwnerUserId="2248" LastEditorUserId="2248" LastEditDate="2014-03-29T18:29:13.897" LastActivityDate="2014-03-29T18:29:13.897" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2723" PostTypeId="1" CreationDate="2014-03-29T22:02:36.123" Score="6" ViewCount="749" Body="&lt;p&gt;I'm thinking about building a &lt;a href=&quot;http://en.wikipedia.org/wiki/SCARA&quot; rel=&quot;nofollow&quot;&gt;SCARA Arm&lt;/a&gt; to lift moderate loads(5lbs) with a high degree of accuracy. I want a relatively quick and inexpensive Z axis gantry, and I was thinking about using a lead screw with dual linear rail. Trouble is I'm not certain the linear velocity will be fast enough.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What's the best method of choosing the lead screws and the associated nut, given a desired linear velocity of 10inches/second and a NEMA stepper motor driving it?&lt;/p&gt;&#xA;" OwnerUserId="4146" LastEditorUserId="110" LastEditDate="2015-01-14T13:55:46.687" LastActivityDate="2015-01-14T13:55:46.687" Title="SCARA Arm Lead Screw Choices" Tags="&lt;robotic-arm&gt;&lt;mechanism&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2724" PostTypeId="1" CreationDate="2014-03-30T05:12:26.020" Score="1" ViewCount="89" Body="&lt;p&gt;I'm trying to get a 6DOF pose solution for an object that'll be between 10 and 50 cm from a fixed point. I want to avoid putting too much special hardware on the object, but extra hardware on the fixed side is fine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've been looking into two general methods:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;fiducial markers&lt;/strong&gt; There are several software packages with different types of markers, but I haven't been able to find any information about them regarding precision or accuracy in short-range pose sensing.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;ultrasonics&lt;/strong&gt; I've found some commercial systems that do 6DOF pose sensing (e.g. &lt;a href=&quot;http://hexamite.com/&quot; rel=&quot;nofollow&quot;&gt;hexamite&lt;/a&gt;), but they're expensive and require you to put transmitters on the object.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="4147" LastActivityDate="2014-04-02T15:59:40.860" Title="What's a good pose estimation method for high precision (&lt;5mm per-axis) solutions at short range (&lt;50cm)?" Tags="&lt;sensors&gt;&lt;ultrasonic-sensors&gt;&lt;pose&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2725" PostTypeId="2" ParentId="2702" CreationDate="2014-03-30T12:08:13.767" Score="1" Body="&lt;p&gt;To expand on tomsrobots answer a bit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your desired arm end effector pose is far from the current, you should use an inverse kinematics solver to give you the corresponding joint angles.  Typically, for high DOF arms, there are multiple solutions, so you should pick the best solution based on some metric.  Minimum distance in joint space (i.e. configuration space) to the current or some known good configuration works well.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depending on the complexity of your arm, the IK could be as simple as some trigonometry and conditionals, or require a full-blown IK library.  See for example &lt;a href=&quot;http://moveit.ros.org/&quot; rel=&quot;nofollow&quot;&gt;ROS MoveIt!&lt;/a&gt; and &lt;a href=&quot;http://openrave.org/&quot; rel=&quot;nofollow&quot;&gt;OpenRAVE&lt;/a&gt;.  Standard robotics textbooks should cover the basics of what is involved here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, you can move the arm there in a number of ways.  One joint at a time, or all at once like you mentioned.  These move the arm in joint space and the trajectory of the end-effector will probably not be what you want.  But typically, for advanced motions you will plan a path in cartesian space and the arm will then follow the trajectory.  But for for relatively open workspaces, and small motions, a straight line in cartesian space is typically fine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then the arm must follow the trajectory.  If you used a motion planner, it probably gave you a trajectory in joint space.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another way is to input your desired end-effector cartesian velocity into the arm's Jacobian, which will then give you the required joint velocities.  The Jacobian is dependent on the arm's configuration, so you need to iterate.  (i.e. get joint velocities, move a small amount, repeat.)  Again, unless your arm is very simple, you probably want a kinematics library mentioned above to calculate the Jacobian for you.  Note that you can often skip the IK and path planning steps and go straight to following a trajectory with the Jacobian if you are moving short distances, you know you are far from singularities, you have no obstacles in the workspace to get around, etc.  &lt;/p&gt;&#xA;" OwnerUserId="110" LastEditorUserId="110" LastEditDate="2014-03-30T14:53:39.600" LastActivityDate="2014-03-30T14:53:39.600" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2726" PostTypeId="1" AcceptedAnswerId="2738" CreationDate="2014-03-30T19:10:20.193" Score="1" ViewCount="133" Body="&lt;p&gt;CAN301/402 provides Max Motor Speed (0x6080,0x00) and Max Profile Velocity (0x607F,0x00). In profiled motions, the maximum speed is limited to the lower of these two values. In non-profiled motions, the maximum speed is limited to Max Motor Speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the intended purpose of Max Profile Velocity, rather than only providing Max Motor Speed and using that everywhere instead?&lt;/p&gt;&#xA;" OwnerUserId="2248" LastActivityDate="2014-04-03T05:56:58.230" Title="What's the difference between CAN's Motor Max Velocity vs. Profile Max Velocity?" Tags="&lt;motor&gt;&lt;control&gt;&lt;can&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2729" PostTypeId="1" CreationDate="2014-03-31T15:49:34.473" Score="8" ViewCount="2823" Body="&lt;p&gt;Let's take a 6 DOF robotic structure. It's consisting of the 3 DOF global structure for the position - and the 3 DOF local structure for the orientation of the endeffector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the last 3 axis (of the local structure) are coincident in one point, the inverse kinematics can be solved analytically by decomposing it into a position- and orientation-problem. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But is it possible to solve the inverse kinematics analytically if the last 3 axis are &lt;strong&gt;NOT coincident&lt;/strong&gt; in one point? I've read several papers that claim that due to high non-linearity of the trigonometric functions and motion complexity in 3D-space, a 6 DOF serial chain cannot be solved analytically. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anybody know if this is right?&lt;/p&gt;&#xA;" OwnerUserId="4154" LastActivityDate="2014-09-16T20:07:07.370" Title="Is there an analytical solution for inverse kinematics of a 6 DOF serial chain?" Tags="&lt;inverse-kinematics&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2730" PostTypeId="1" CreationDate="2014-04-01T08:50:36.967" Score="2" ViewCount="229" Body="&lt;p&gt;We want to find available WiFi networks near.&#xA;So in &lt;a href=&quot;http://www.dfrobot.com/wiki/index.php/WiFi_Bee_V1.0_(SKU:TEL0067)&quot; rel=&quot;nofollow&quot;&gt;tutorial&lt;/a&gt; there is command scan, which is send from CoolTerm program from PC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now we want to write program to Arduino which will do same operation, how it can be done?&lt;/p&gt;&#xA;" OwnerUserId="2557" LastEditorUserId="10596" LastEditDate="2016-09-27T09:44:09.963" LastActivityDate="2018-10-18T07:48:18.387" Title="How to use scan command in Arduino WifiBee" Tags="&lt;arduino&gt;&lt;wifi&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2731" PostTypeId="1" CreationDate="2014-04-01T09:07:38.067" Score="3" ViewCount="240" Body="&lt;p&gt;Probabilistic localization approaches like Kalman or Monte Carlo benefit from an accurate prediction step. The more accurate the prediction step, the more accurate is the belief of the robots pose. In most approaches probabilistic motion models are applied, mainly because robot dynamics are more difficult to model. Still some approaches rely on dynamic models in order to increase the accuracy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore, I was wondering if it’s reasonable to utilize a robotic simulator like V-REP or Gazebo for the prediction step. The advantages I see in doing so are the following:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the robots kinematic is solved by default, simply through modeling it in the robotic simulator&lt;/li&gt;&#xA;&lt;li&gt;the robots dynamics are taken into account&lt;/li&gt;&#xA;&lt;li&gt;nonlinear behaviors like slippage or collision can be modelled up to a certain extend&lt;/li&gt;&#xA;&lt;li&gt;the robots workspace is taken into account, by modeling its environment (if the robot drives against a wall previous models would predict it behind the wall, which won’t happen in a robotic simulator)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;With the shown advantages I hope to achieve a more accurate prediction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However there might be some problems using a robotic simulator. For a start it has to ensure real time behavior and there will be delay in the prediction due to the communication with the simulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was looking for some papers which pick up on that idea but couldn’t find any. Are there any approaches similar to my idea? If not, are there any reasons why nobody is using a robotic simulator for the prediction? What are your opinions about my proposal?&lt;/p&gt;&#xA;" OwnerUserId="2450" LastEditorUserId="2450" LastEditDate="2014-04-01T09:18:50.047" LastActivityDate="2016-07-26T12:10:47.997" Title="Using robotic simulator for prediction step in probabilistic localization approaches" Tags="&lt;mobile-robot&gt;&lt;localization&gt;&lt;motion&gt;&lt;simulator&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2733" PostTypeId="2" ParentId="2715" CreationDate="2014-04-02T13:31:33.053" Score="1" Body="&lt;p&gt;It depends on the purpose, but −30∘ to +30∘ (cone shaped beam) smells like ultrasonic sensors.&lt;bR&gt;&lt;bR&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, if you don't like ultrasonic and you are more &quot;infrared person&quot; you may also make your own scanner (SHARP GP2Y0A21YK0F + RC servo) like here (chapter &quot;5.3.3 Skaner 2D&quot;):&lt;bR&gt;&#xA;&lt;a href=&quot;http://www.forbot.pl/forum/download.php?id=676&amp;amp;sid=54f9ba7ac5b724b64bfff3686de0e39c&quot; rel=&quot;nofollow&quot;&gt;http://www.forbot.pl/forum/download.php?id=676&amp;amp;sid=54f9ba7ac5b724b64bfff3686de0e39c&lt;/a&gt;&lt;bR&gt;&#xA;&lt;a href=&quot;http://www.forbot.pl/forum/topics20/fuzja-sygnalow-sensorycznych-dla-robotow-minisumo-vt2151.htm&quot; rel=&quot;nofollow&quot;&gt;http://www.forbot.pl/forum/topics20/fuzja-sygnalow-sensorycznych-dla-robotow-minisumo-vt2151.htm&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2663" LastActivityDate="2014-04-02T13:31:33.053" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2734" PostTypeId="2" ParentId="2730" CreationDate="2014-04-02T15:48:12.193" Score="1" Body="&lt;p&gt;To my knowledge, the WifiBee doesn't support network scanning.  You must specify the SSID of the Wifi network that it should connect to, the IP address it expects to be assigned, and the gateway address &lt;a href=&quot;http://www.seeedstudio.com/wiki/Wifi_Bee#Downloading_and_configuring_the_Library_for_running_the_application_examples&quot; rel=&quot;nofollow noreferrer&quot;&gt;as part of its initial configuration&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="18235" LastEditDate="2018-10-18T07:48:18.387" LastActivityDate="2018-10-18T07:48:18.387" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="2735" PostTypeId="2" ParentId="2724" CreationDate="2014-04-02T15:59:40.860" Score="2" Body="&lt;p&gt;The accuracy of fiducial markers (i.e. &lt;a href=&quot;http://www.aforgenet.com/articles/posit/&quot; rel=&quot;nofollow&quot;&gt;glyphs&lt;/a&gt;) depends on your camera's resolution, noise ratio, focus, and field of view.  Essentially, you will need to ensure that there are enough pixels in the recorded image to represent the real-world precision that you want.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To make this easier, it would help if the glyphs are as large as possible and the camera is aimed as &quot;tightly&quot; as possible on the subject.  For a camera with a known resolution and field of view, you should be able to calculate the pixels-per-cm that the images represent (given 10cm and 50cm distances to the subject).  Assume &amp;pm;2 pixels possible measurement error, and calculate the precision from that.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-04-02T15:59:40.860" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2736" PostTypeId="2" ParentId="2713" CreationDate="2014-04-02T16:14:14.170" Score="1" Body="&lt;p&gt;Some of the arduino connections require no soldering.  The black strips with holes in them -- the headers -- allow you to connect and disconnect a wire without soldering it.  You may also find it useful to use a breadboard, which is a large grid of similar solderless connections.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, whether you'll need to solder things together depends more on the needs of your projects than the components themselves.  Although solderless versions of many connectors exist (crimp, punch-down, etc), you probably won't be able to do anything interesting in robotics without being at least somewhat familiar with soldering.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In terms of how to connect those specific components, you'll need to consult the data sheets.  The easiest way to draw a component (i.e. what appears on the datasheet) is not the easiest way to manufacture a component (i.e. how things are laid out on the circuit board), so the datasheet is your guide to converting your schematic on paper to a set of solid electrical connections.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-04-02T16:14:14.170" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2737" PostTypeId="2" ParentId="2671" CreationDate="2014-04-02T19:20:46.913" Score="2" Body="&lt;p&gt;I was hoping you would elaborate your question because it is pretty vague.  There are two kinds of robot arm compliance: passive and active.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Passive compliance is a property of the physical system.  For example a soft end-effector, a spring in line with the motor (aka series elastic actuation), or a flexible link.  If you know all the parameters of the arm such as masses, moments of inertia, spring, and damper coefficients, you can determine various characteristics of the arm.  For example, how the arm will behave when given a step input.  This is a standard control problem.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Active compliance uses sensing in the arm and/or end-effector to sense external forces on the arm, then move the joints accordingly.  This is closely related to force control.  In the industrial world, this could be applying the right amount of force during some machining operation.  For arms in human environments, this could be moving out of the way when a user pushes the arm.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-04-02T19:20:46.913" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2738" PostTypeId="2" ParentId="2726" CreationDate="2014-04-03T05:56:58.230" Score="1" Body="&lt;p&gt;&lt;strong&gt;Max Motor Speed&lt;/strong&gt; is used to protect the motor against being driven over it's maximum speed.  The units for this are RPM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Max Profile Velocity&lt;/strong&gt; is given in same units as the profile velocity and applies only to profile position mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Source CiA DSP 402 V2.0)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While the standard doesn't expand on these, the way I see it is that the first number is something you set up based on the motor's data sheet to prevent damaging the motor.  The units are set up that way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second number is an application specific limit.  You want to protect yourself against moves that can be damaging in your application and you use the same units used for position profiles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Having two parameters allows for running the motor in velocity mode in higher speeds than you allow during positioning modes.  While that may not seem important I've actually worked on an application where a plate was loaded on a drum and the drum then spun up to considerable speed.  In this application the loading portion used positioning mode and needed to be slower than the velocity mode used later so this separation of limits could have come in handy.  In general having those sorts of limits built-in reduces the chance of damaging the machine you're working on.&lt;/p&gt;&#xA;" OwnerUserId="1584" LastActivityDate="2014-04-03T05:56:58.230" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2739" PostTypeId="2" ParentId="2730" CreationDate="2014-04-04T13:32:38.577" Score="-4" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Moderator Note: This answer has been posted by someone related to the&#xA;  product that they are recommending&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Sketch Arduino and PIC firmware for Wifly RN-XV modem configuration without Wifly library and with &lt;a href=&quot;https://dl.dropboxusercontent.com/u/101922388/WiflySanUSB.zip&quot; rel=&quot;nofollow&quot;&gt;front-end&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Type in browser address bar: 192.168.1.195/YT to toggle LED and open a HTML page.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The microcontroller can be, with this firmware and Wifly, a server (switching the LED signal through 192.168.1.195/YT in address bar) &#xA;or also client (the AD converter value is inserted in google databank).&lt;/p&gt;&#xA;" OwnerUserId="4174" LastEditorUserId="10596" LastEditDate="2016-09-27T09:44:40.747" LastActivityDate="2016-09-27T09:44:40.747" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2740" PostTypeId="2" ParentId="1811" CreationDate="2014-04-04T13:35:32.017" Score="0" Body="&lt;p&gt;What about sonar?  I guess this would be made a bit more difficult with other robots in the room.  It might take a few minutes for an individual robot to create a clear picture of the room by eliminating the other robots that it detects, thus finding &quot;walls&quot;.  You would get the added benefit of collision detection.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do the robots communicate?&lt;/p&gt;&#xA;" OwnerUserId="4173" LastActivityDate="2014-04-04T13:35:32.017" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2741" PostTypeId="2" ParentId="1811" CreationDate="2014-04-04T14:15:04.933" Score="1" Body="&lt;p&gt;It seems that RF positioning is the only technology capable of giving you the precision that you need.  That said, I don't think it's ready for 5mm ranges just yet.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://diydrones.com/profiles/blogs/radio-based-position-tracking-works-indoors-and-out&quot; rel=&quot;nofollow&quot;&gt;50 quadcopters, 20Hz, 5-15cm precision&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://ieeexplore.ieee.org/xpl/login.jsp?tp=&amp;amp;arnumber=4653450&amp;amp;url=http%3A%2F%2Fieeexplore.ieee.org%2Fxpls%2Fabs_all.jsp%3Farnumber%3D4653450&quot; rel=&quot;nofollow&quot;&gt;Development of experimental TDOA system test-bed for indoor applications&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://ieeexplore.ieee.org/xpl/login.jsp?tp=&amp;amp;arnumber=1682996&amp;amp;url=http%3A%2F%2Fieeexplore.ieee.org%2Fxpls%2Fabs_all.jsp%3Farnumber%3D1682996&quot; rel=&quot;nofollow&quot;&gt;Hybrid TDOA/AOA Indoor Positioning and Tracking Using Extended Kalman Filters&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-04-04T14:15:04.933" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2743" PostTypeId="2" ParentId="2570" CreationDate="2014-04-05T18:55:44.247" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Is this torque rating at the horn of the servo motor or the torque&#xA;  rating of the actual motor before any gear reduction is done&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;For reputable manufactures and vendors, the ratings will include all internal gear reduction, or external in the case of gear-head motors.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Is this motor sufficiently strong for my application?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That depends more on the details of your application. 200 oz-in of torque means the servo &lt;em&gt;should&lt;/em&gt; be able to lift &lt;strong&gt;&lt;em&gt;up to&lt;/em&gt;&lt;/strong&gt; 200 oz within one inch of its center shaft. That means it can work on &lt;strong&gt;&lt;em&gt;up to&lt;/em&gt;&lt;/strong&gt; [ 200 oz / 16 oz/lb ] = 12.5 pounds within that inch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To get 4 - 5 pounds out of it, your rotational radius must be within:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;12.5 lb-in / 4.5 lb = 2.78 inches.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, operating the motor continuously under a full load will most likely cause it to fail fairly quickly. It will also slow down the rotational speed.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Speaking of speed, the servo is given at 0.23 seconds / 60 degrees. That means it will rotate 60 degrees in 0.23 seconds. a Full circle is 360 degrees, so 4 * 0.23 = 0.92 seconds for a full rotation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;However&lt;/strong&gt;, (and correct me if I am wrong) no where in the listing does it mention continuous rotation. A traditional RC servo motor cannot rotate all the way around unless it specifically states it can or is manually altered (voiding any warranties). It will typically only rotate a maximum of 140 to 180 degrees.&lt;/p&gt;&#xA;" OwnerUserId="1197" LastActivityDate="2014-04-05T18:55:44.247" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2744" PostTypeId="1" AcceptedAnswerId="2745" CreationDate="2014-04-06T06:05:49.843" Score="3" ViewCount="84" Body="&lt;p&gt;I'm aware of the PrimeSense camera powering the Kinect. Are more advanced sensor types available now in the &amp;lt; $500 range? For example, has there been any sort of game-changer in structured light techniques? Do decent flash lidar cameras exist now?&lt;/p&gt;&#xA;" OwnerUserId="4177" LastActivityDate="2014-04-06T20:01:31.690" Title="What different sensing approaches are used in the current batch of indoor 3D cameras?" Tags="&lt;sensors&gt;&lt;kinect&gt;&lt;cameras&gt;&lt;lidar&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2745" PostTypeId="2" ParentId="2744" CreationDate="2014-04-06T20:01:31.690" Score="1" Body="&lt;p&gt;I guess that the approach in structured cameras is pretty much the same.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the world is trying to minify this kind of sensors.&#xA;In particular&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://structure.io/&quot; rel=&quot;nofollow&quot;&gt;http://structure.io/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.google.com/atap/projecttango/&quot; rel=&quot;nofollow&quot;&gt;https://www.google.com/atap/projecttango/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Some people speculate that the reason for kinect to be so big is the array of microphones that allows to localize source of noise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I haven't heard of anything else, though if I find new info I will expand my answer.&lt;/p&gt;&#xA;" OwnerUserId="1298" LastActivityDate="2014-04-06T20:01:31.690" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2747" PostTypeId="1" CreationDate="2014-04-07T07:27:59.800" Score="2" ViewCount="188" Body="&lt;p&gt;I have created robot using a robot &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__44606__DG012_ATV_4WD_ATV_Multi_Chassis_Kit_with_Four_Rubber_Tyres.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;chassis kit&lt;/a&gt; from hobbyking. At first when testing the robot connected to USB power source and the wheels lifted above the ground everything seemed to be OK. Then, when I tried to power the robot with batteries I encountered a problem with starting the movement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The robot hardly starts to move even when I power it with 100% of power - sometimes I have to push it a little bit in order to start driving.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a newbie I don't know whether it is a power source (battery) or motors problem.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;There are 4 motors with torque of 800gf.cm min in the chassis. &lt;/li&gt;&#xA;&lt;li&gt;The gear ratio is 48:1 and to power the motors &lt;/li&gt;&#xA;&lt;li&gt;I used two serially connected Li-ion batteries and dc-dc regulator which limits the voltage output to 5V. &lt;/li&gt;&#xA;&lt;li&gt;The power is regulated with dual H-bridge motor driver. &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;According to specifications, the maximum free running current for a single motor is 250mA and I have read that the stall current is 3-8x running current.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway, the problem is that the robot has problems with starting-up driving and I don't know how whether the motors are even powerful enough to move the robot or it is a power source problem or perhaps the obstacle could be solved with appropriate power regulation (ramp). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I solve this problem?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/1Mgjy.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1Mgjym.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4183" LastEditorUserId="350" LastEditDate="2014-04-08T19:17:09.970" LastActivityDate="2014-06-03T08:15:29.707" Title="Robot start-up movement problems" Tags="&lt;motor&gt;&lt;battery&gt;&lt;movement&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2748" PostTypeId="1" CreationDate="2014-04-07T15:25:50.723" Score="1" ViewCount="18192" Body="&lt;p&gt;What is the maximum distance (of say , a car ) you could measure using an ultrasonic sensor that would be compatible with arduino? Is there any sensor(ultrasonic or not) that could measure the distance of a car , say upto 50 meters that can be used with arduino?&lt;/p&gt;&#xA;" OwnerUserId="4187" LastEditorUserId="2663" LastEditDate="2014-04-09T22:37:36.160" LastActivityDate="2019-01-15T21:01:38.197" Title="Maximum Distance using Ultrasonic sensor Arduino" Tags="&lt;arduino&gt;&lt;ultrasonic-sensors&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2750" PostTypeId="2" ParentId="2587" CreationDate="2014-04-08T10:48:19.800" Score="1" Body="&lt;p&gt;Use different PAN, PAN3101 in praticular. How to do that? See this (chapter &quot;5.3.6 PAN3101&quot;) &lt;a href=&quot;https://robotics.stackexchange.com/a/2733/2663&quot;&gt;https://robotics.stackexchange.com/a/2733/2663&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2663" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2014-04-08T10:48:19.800" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2753" PostTypeId="2" ParentId="2587" CreationDate="2014-04-08T15:57:03.970" Score="1" Body="&lt;p&gt;As others pointed out, you'll need to implement the protocol for communication (most likely HID). I recommend you buy an optical mouse with PS/2 protocol because it will be much much easier to implement, there are even numerous solutions for it online (as in codes and libraries).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regards&lt;/p&gt;&#xA;" OwnerUserId="4017" LastActivityDate="2014-04-08T15:57:03.970" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2754" PostTypeId="1" AcceptedAnswerId="2755" CreationDate="2014-04-08T16:24:42.103" Score="2" ViewCount="118" Body="&lt;p&gt;I'm looking for a part that will do a particular function.  It has to be able to move along one axis and tell me the force that is being exerted on it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Kind of how like a piston moves inside an engine (one axis of movement) except that something will be pushing at the top of the piston and I need to know how hard its pushing.  Another difference is that the piston won't be constantly moving back in forth, but needs to be able to receive commands like.  &lt;code&gt;move x centimeters forward&lt;/code&gt; and then remain stationary at its new position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know to make this it would involved a sensor and something that can exert force but what is the name of the described machine?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit #1 - Response to Matthew Gordon&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The piston would have to move between 0-6 centimeters.  The form factor would be small, ideally smaller than the palm of your hand.  (Smaller=better) The forces it would have to deal with are comparable to the forces exerted on a bicycle by its chain.  I'm a math/cs person not engineering so I don't know technical terms for these kinds of things off the top of my head.  It would have to be real time sensor reading, but the volume of data could be processed by a phone.  Would have to working in conjunction with wireless communication, probably Bluetooth, but I'd have to look into the latency requirements to be sure.&lt;/p&gt;&#xA;" OwnerUserId="4193" LastEditorUserId="37" LastEditDate="2017-06-13T11:18:50.860" LastActivityDate="2017-06-13T16:55:33.097" Title="What is the Name of the part I'm describing" Tags="&lt;sensors&gt;&lt;mechanism&gt;&lt;force-sensor&gt;&lt;identification&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2755" PostTypeId="2" ParentId="2754" CreationDate="2014-04-08T18:52:31.093" Score="2" Body="&lt;p&gt;It sounds like you're describing a &lt;a href=&quot;http://en.wikipedia.org/wiki/Linear_actuator&quot; rel=&quot;nofollow&quot;&gt;linear actuator&lt;/a&gt; with a &lt;a href=&quot;http://en.wikipedia.org/wiki/Pressure_sensor&quot; rel=&quot;nofollow&quot;&gt;pressure sensor&lt;/a&gt; (or &lt;a href=&quot;http://en.wikipedia.org/wiki/Strain_gauge&quot; rel=&quot;nofollow&quot;&gt;strain gauge&lt;/a&gt;) attached to the end.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To bridge that system across bluetooth, you may want to check out one of several microcontrollers -- look for bluetooth modules, a motor (or servo) controller, and analog inputs (to read the strain gauge).&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-04-08T18:52:31.093" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2758" PostTypeId="1" AcceptedAnswerId="4422" CreationDate="2014-04-10T05:36:28.567" Score="11" ViewCount="4670" Body="&lt;p&gt;When one wants to model a kinematic chain and in particular define the frames attached to each body, it is common to use the &lt;a href=&quot;http://en.wikipedia.org/wiki/Denavit%E2%80%93Hartenberg_parameters&quot; rel=&quot;noreferrer&quot;&gt;Denavit-Hartenberg parameters&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What are the advantages of this representation?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can understand the interest of having a normalized representation but does it impact the algorithms performance?&#xA;The algorithm is not trivial to implement, what gain can we expect from this instead of, for instance, just fixing reference frames by hands (i.e. arbitrarily) like this is done in many robotics formats such as &lt;a href=&quot;http://wiki.ros.org/urdf&quot; rel=&quot;noreferrer&quot;&gt;URDF&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="28" LastEditorUserId="131" LastEditDate="2014-04-10T11:46:30.830" LastActivityDate="2014-08-20T18:46:20.090" Title="What are the advantages of using the Denavit-Hartenberg representation?" Tags="&lt;kinematics&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2759" PostTypeId="2" ParentId="2758" CreationDate="2014-04-10T10:15:56.630" Score="3" Body="&lt;p&gt;I believe this to be the key factor:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In this convention, coordinate frames are attached to the joints between two links such that one transformation is associated with the joint, [Z], and the second is associated with the link [X]. The coordinate transformations along a serial robot consisting of n links form the kinematics equations of the robot,&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;[T] = [Z1][X1][Z2][X2]...[X(n-1)][Zn]&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;where [T] is the transformation locating the end-link.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That is, to get a transformation from a serially attached links you can just multiply transformation matrices which is much easier to write and much easier to work with than calculating everything manually using basic geometry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regards&lt;/p&gt;&#xA;" OwnerUserId="4017" LastActivityDate="2014-04-10T10:15:56.630" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2760" PostTypeId="1" CreationDate="2014-04-10T12:39:06.903" Score="6" ViewCount="8317" Body="&lt;p&gt;I'm trying to calculate the inverse kinematic for an 6 dof manipulator.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Task:&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;A target point $p_{target} = (x,y,z)^T$ and the orientation $o_{target} = (a, b, c)^T$ are given and I want to get the angle configuration $q = (q_1, q_2, q_3, q_4, q_5, q_6)^T$ for my robot.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Method:&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;For that I try to implement the Jacobian method (with the transposed jacobian matrix) with &lt;a href=&quot;http://graphics.cs.cmu.edu/nsp/course/15-464/Fall09/handouts/IK.pdf&quot;&gt;this&lt;/a&gt; guide and followed the pseudocode at slide 26. But instead using the pseudoinverse of the Jacobian matrix I used the transposed one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'll try to compute the Jacobian matrix numerically and analytically, but didn't get a solution (endless loop) for any of them. Here's how I retrieve the Jacobian:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Numerically: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;private void calculateMatrixNumerically()&#xA;{&#xA;    var deltaTheta = 0.01;&#xA;    var newAxisConfiguration = new AxisConfiguration(&#xA;        this.currentAxisConfiguration.joints[0] + deltaTheta,&#xA;        this.currentAxisConfiguration.joints[1] + deltaTheta,&#xA;        this.currentAxisConfiguration.joints[2] + deltaTheta,&#xA;        this.currentAxisConfiguration.joints[3] + deltaTheta,&#xA;        this.currentAxisConfiguration.joints[4] + deltaTheta,&#xA;        this.currentAxisConfiguration.joints[5] + deltaTheta&#xA;        );&#xA;&#xA;    var ePos = this.kinematic.CalculateDirectKinematic(newAxisConfiguration);&#xA;&#xA;    for (var column = 0; column &amp;lt; this.Columns; column++)&#xA;    {&#xA;        this.M[0, column] = (this.currentPos.Point.X - ePos.Point.X) / deltaTheta;&#xA;        this.M[1, column] = (this.currentPos.Point.Y - ePos.Point.Y) / deltaTheta;&#xA;        this.M[2, column] = (this.currentPos.Point.Z - ePos.Point.Z) / deltaTheta;&#xA;        this.M[3, column] = (this.currentPos.Orientations[0].A - ePos.Orientations[0].A) / deltaTheta;&#xA;        this.M[4, column] = (this.currentPos.Orientations[0].B - ePos.Orientations[0].B) / deltaTheta;&#xA;        this.M[5, column] = (this.currentPos.Orientations[0].C - ePos.Orientations[0].C) / deltaTheta;&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Analytically:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;private void calculateMatrixAnalytically()&#xA;{&#xA;    var peMatrix = calculateJointPositions();&#xA;    var zMatrix = calculateZ();&#xA;&#xA;    for (var column = 0; column &amp;lt; this.Columns; column++)&#xA;    {&#xA;        double[] p_p = new double[3];&#xA;        for(var row = 0; row &amp;lt; zMatrix.Rows; row++)&#xA;        {&#xA;            p_p[row] = peMatrix.M[row, this.Columns-1] - peMatrix.M[row, column];&#xA;        }&#xA;&#xA;        this.M[0, column] = zMatrix.M[1, column] * p_p[2] - zMatrix.M[2, column] * p_p[1];&#xA;        this.M[1, column] = zMatrix.M[2, column] * p_p[0] - zMatrix.M[0, column] * p_p[2];&#xA;        this.M[2, column] = zMatrix.M[0, column] * p_p[1] - zMatrix.M[1, column] * p_p[0];&#xA;        this.M[3, column] = zMatrix.M[0, column];&#xA;        this.M[4, column] = zMatrix.M[1, column];&#xA;        this.M[5, column] = zMatrix.M[2, column];&#xA;    }&#xA;}&#xA;&#xA;/// &amp;lt;summary&amp;gt;&#xA;/// Calculate the positions of every joint.&#xA;/// &amp;lt;/summary&amp;gt;&#xA;/// &amp;lt;returns&amp;gt;The Matrix with the joint coordinate for each joint.&amp;lt;/returns&amp;gt;&#xA;private Matrix calculateJointPositions()&#xA;{&#xA;    Matrix jointPositions = new Matrix(3,6);&#xA;    Position pos;&#xA;&#xA;    for (var joint= 0; joint&amp;lt; this.currentAxisConfiguration.joints.Count(); joint++)&#xA;    {&#xA;        pos = this.kinematic.CalculateDirectKinematic(this.currentAxisConfiguration, joint);&#xA;        jointPositions.M[0, joint] = pos.Point.X;&#xA;        jointPositions.M[1, joint] = pos.Point.Y;&#xA;        jointPositions.M[2, joint] = pos.Point.Z;&#xA;    }&#xA;&#xA;    return jointPositions;&#xA;}&#xA;&#xA;private Matrix calculateZ()&#xA;{&#xA;    // (z0^T-z1^T-z2^T-...-z6^T)&#xA;    var ksEnd = Kinematics.TranslateRobotToWorld();&#xA;    var zMatrix = new Matrix(3, 6);&#xA;&#xA;    for (var column = 0; column &amp;lt; this.currentAxisConfiguration.joints.Count(); column++)&#xA;    {&#xA;        for (var row = 0; row &amp;lt; zMatrix.Rows; row++)&#xA;            zMatrix.M[row, column] = Math.Round(ksEnd.M[row, 2], 7);&#xA;&#xA;        ksEnd = ksEnd.Multiply(&#xA;            Kinematics.TranslateCoordinateSystem(&#xA;            Robo.theta[column] + this.currentAxisConfiguration.joints[column],&#xA;            Robo.d[column],&#xA;            Robo.alpha[column],&#xA;            Robo.a[column])&#xA;            );&#xA;    }&#xA;    return zMatrix;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Here is the implementation of the Pseudocode:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;        do&#xA;        {&#xA;            jacob = JacobiMatrix.GetJacobi(currentPosition, currentAxisConfiguration);&#xA;            jacobiTranspose = jacob.getTransposeMatrix();&#xA;&#xA;            // deltaE = (x2-x1, y2-y1, z2-z1, a2-a1, b2-b1, c2-c1)    &#xA;            deltaE = Position&#xA;                .GetDistanceVector(currentPosition, targetPosition);&#xA;&#xA;            deltaThetas = jacobiTranspose.Multiply(deltaE).&#xA;                                    Scale(beta);&#xA;&#xA;            for (var axis = 0; axis &amp;lt; deltaThetas.Rows; axis++ )&#xA;                currentAxisConfiguration.joints[axis] += deltaThetas.M[axis, 0];&#xA;&#xA;            currentPosition = this.CalculateDirectKinematic(currentAxisConfiguration);&#xA;        } while (Math.Abs(Position.Distance(currentPosition, targetPosition)) &amp;gt; epsilon);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where $beta = 0.5$ and $epsilon = 0.0001$&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Problems:&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The transformation matrice should be fine, because it behaves good for the forward kinematic.&#xA;In my opinion the Jacobian matrix must be somehow wrong. I'm not sure if it is correct how I put the orientation data in the numerical calculation. For the analytical computation I didn't have any clue what could be wrong.&#xA;I would be thankful for any advice. An explicit example for calculating the Jacobian would also be very helpful. &lt;/p&gt;&#xA;" OwnerUserId="4197" LastEditorUserId="4197" LastEditDate="2014-04-10T13:16:39.407" LastActivityDate="2014-04-15T12:46:37.193" Title="Computing inverse kinematic with jacobian matrices for 6 dof manipulator" Tags="&lt;inverse-kinematics&gt;&lt;manipulator&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2761" PostTypeId="1" CreationDate="2014-04-10T13:07:56.240" Score="0" ViewCount="205" Body="&lt;p&gt;I am trying to test a sensor circuit I'm working on. Essentially, I am using &lt;a href=&quot;http://realterm.sourceforge.net/&quot; rel=&quot;nofollow&quot;&gt;RealTerm&lt;/a&gt; to send commands to the microcontroller and it is returning the value read by the sensor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When logging to a file in RealTerm, I noticed the commands being sent were showing up as well as the data being returned. I was wondering if anyone knew a way to record only the incoming data using RealTerm, and not the outgoing commands. Any suggestions would be greatly appreciated. Unfortunately, there is no way around using RealTerm specifically because of a company policy. &lt;/p&gt;&#xA;" OwnerUserId="4198" LastEditorUserId="350" LastEditDate="2014-04-10T14:43:54.003" LastActivityDate="2014-05-11T16:45:22.817" Title="Is it possible to record only incoming data with realterm?" Tags="&lt;serial&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2762" PostTypeId="2" ParentId="2761" CreationDate="2014-04-10T14:45:40.243" Score="1" Body="&lt;p&gt;It sounds like RealTerm has &lt;a href=&quot;http://en.wikipedia.org/wiki/Echo_%28computing%29&quot; rel=&quot;nofollow&quot;&gt;local echo&lt;/a&gt; turned on.  Apparently that setting in RealTerm is (incorrectly) called &quot;half-duplex&quot;, and should be disabled for your purposes.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-04-10T14:45:40.243" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2765" PostTypeId="2" ParentId="2748" CreationDate="2014-04-11T13:04:37.213" Score="3" Body="&lt;p&gt;Your question is multiple questions inside of one. As answered in comments, your question should probably be limited to the sensor and/or technology for longer range detection of large (moving?) objects. The use of an arduino is mostly irrelevant.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As per comment by @Ian, &lt;strong&gt;ultrasonic sensors will probably not be useful at 50 meters&lt;/strong&gt;, I think due to physics of sound. See the article below on choosing an ultrasonic sensor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One option might be to use a &lt;strong&gt;laser rangefinder&lt;/strong&gt; (such as you can find in hardware stores).  Another option might be to use &lt;strong&gt;radar&lt;/strong&gt;, such as in old police radar guns. However, both of these options are &lt;strong&gt;limited in capability and highly dependent on environmental factors&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Perhaps the best option would be a &lt;strong&gt;LIDAR system&lt;/strong&gt;. They tend to be expensive, but there is an upcoming product called &quot;LIDAR-Lite&quot; by PulseLight that is lower cost and might be of interest. They are advertising a 40 meter range capability.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additional reading:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.phoenixgarage.org/show_article/167&quot; rel=&quot;nofollow&quot;&gt;Low Cost LIDAR and Laser Range Finders: Where Are They?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://store.3drobotics.com/products/lidar-lite/&quot; rel=&quot;nofollow&quot;&gt;LIDAR-Lite by PulseLight&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.parallax.com/product/28043&quot; rel=&quot;nofollow&quot;&gt;SF02 Laser Rangefinder from Parallax&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.sensorsmag.com/sensors/acoustic-ultrasound/choosing-ultrasonic-sensor-proximity-or-distance-measurement-825&quot; rel=&quot;nofollow&quot;&gt;Choosing an Ultrasonic Sensor for Proximity or Distance Measurement&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.maxbotix.com/performance.htm&quot; rel=&quot;nofollow&quot;&gt;Beam patterns of various MaxBotix ultrasonic sensors&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Radar_gun&quot; rel=&quot;nofollow&quot;&gt;Radar Gun&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="167" LastEditorUserId="167" LastEditDate="2014-06-03T18:57:54.883" LastActivityDate="2014-06-03T18:57:54.883" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2766" PostTypeId="2" ParentId="2761" CreationDate="2014-04-11T16:28:07.243" Score="0" Body="&lt;p&gt;You can use &lt;a href=&quot;http://cutecom.sourceforge.net/&quot; rel=&quot;nofollow&quot;&gt;Cutecom&lt;/a&gt; on linux or &lt;a href=&quot;https://sites.google.com/site/terminalbpp/&quot; rel=&quot;nofollow&quot;&gt;Terminal&lt;/a&gt; on windows. Both of them log only incoming data.&lt;/p&gt;&#xA;" OwnerUserId="2118" LastActivityDate="2014-04-11T16:28:07.243" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2767" PostTypeId="1" AcceptedAnswerId="2790" CreationDate="2014-04-13T03:26:55.713" Score="3" ViewCount="376" Body="&lt;p&gt;I'm attempting to build a segway robot using a gyrosensor and accelerometer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm having trouble getting the robot to remain standing, for some reason, and I can't identify the problem.&#xA;Here's what I know:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The gyroscope API for the lejos NXT platform is here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.lejos.org/nxt/nxj/api/&quot; rel=&quot;nofollow&quot;&gt;http://www.lejos.org/nxt/nxj/api/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By using timestamps and angular velocity, the project attempts to infer the angle of the robot.  The API suggests that in order to be accurate, it must be polled 100 times per second (or every 10ms on average).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is that simply polling the gyrosensor takes 4ms.&#xA;Polling the accelerometer takes 10ms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The dimensions of the robot:&#xA;Height: 28cm&#xA;wheel circumference : 13.25cm&#xA;Radius of a wheel, given the circumference:  2.1cm&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The accelerometer is mounted on the top of the robot (at approximately 28cm from the ground, 26cm from axis of rotation)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to keep the correction amount linear (as opposed to trying to correct an arbitrary angle) , I translate the angle of the robot to a distance to travel along the ground to &quot;right&quot; the robot.  This might be a bit naive, and I'm open to suggestion here.  Basically it's just the horizontal distance calculated using a right-angle triangle with the angle of the robot at the top and hypotenuse of 28cm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If that's not clear, it's essentially the horizontal distance from the top of the robot and the bottom of the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Right now my main concern is the amount of drift the gyroscope seems to be experiencing.  Given the fact that with the NXT java software package, it's nearly impossible to poll 100 times per second, the amount of error accumulated by the gyroscope is fairly large.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, I've implemented a PID control system.  The thing I'm not clear about with respect to this system is the integral and derivative of error must be calculated given a set of values.  Say, the last 20 error measurements recorded.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the amount of past errors recorded is a variable, and the PID constants are variable, and the speed of the wheels is a variable, it seems this problem begs for some kind of automated optimization.  But how to do it?  If I set the speed to 120 RPM (roughly the max of the NXT servos) and take the past 20 errors for calculating the integral and derivative of the error, will it be possible to optimize the PID constants successfully?  Or must all 5 variables be tuned together?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks ahead for any insight on the problem.&lt;/p&gt;&#xA;" OwnerUserId="4208" LastActivityDate="2014-04-17T11:49:29.967" Title="NXT Segway problem. Need advice/help" Tags="&lt;accelerometer&gt;&lt;gyroscope&gt;&lt;nxt&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2768" PostTypeId="1" AcceptedAnswerId="2835" CreationDate="2014-04-13T06:29:53.297" Score="5" ViewCount="5700" Body="&lt;p&gt;I have a differential drive robot that works fine (good PD parameters) driving at say 1 m/s. Now, if it speeds up (to 1.2 m/s) it starts wobbling again. What would be a good strategy for a controller that is able to cope with the whole speed range of 0 - 4 m/s?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;edit 14th of April:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The robot is a line follow robot but I do not see how this would be related to my question since a robot following a trajectory would have the same problem. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I recently talked to other developers of differential drive robots and they are facing similar issues e.g. they told me that they need to adjust PID parameters once the battery is not fully charged hence the robot drives at a different speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do not know if you guys are into youtube, but if your are really interested in my robot this link would be helpful: &lt;a href=&quot;https://www.youtube.com/watch?v=vMedNPhXlEo&quot; rel=&quot;nofollow&quot;&gt;https://www.youtube.com/watch?v=vMedNPhXlEo&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PID parameters are: P 0.31, D 0.59, I 0.00&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PID controller programmed using C:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  // note: the inner wheel turns backwards for narrow curves&#xA;  // cte is -128..128 depending on the robots position&#xA;  // relative to a trajectory / black line &#xA;  /** Execute the PID controller and update motor speeds */&#xA;  void PID()&#xA;  {&#xA;    int32_t steer;&#xA;    int32_t cte;&#xA;    cte = 128 - get_segment_center(0);&#xA;    // Compute PID equation&#xA;    steer = (int)(&#xA;      -P * (float)cte &#xA;      -D * (float)(cte - diff_cte) / (float)PERIOD_MS&#xA;      -I * (float)int_cte&#xA;    );&#xA;    if (steer &amp;lt; -5)&#xA;    {&#xA;      // turn left&#xA;      turn = -1;&#xA;      uXbot_move(MAX_SPEED + steer, MAX_SPEED);&#xA;    } &#xA;    else if (steer &amp;gt; 5)&#xA;    {&#xA;      // turn right&#xA;      turn = 1;&#xA;      uXbot_move(MAX_SPEED, MAX_SPEED - steer);&#xA;    }&#xA;    else&#xA;    {&#xA;      // go straight&#xA;      turn = 0;&#xA;      uXbot_move(MAX_SPEED, MAX_SPEED);&#xA;    }&#xA;    diff_cte = cte;&#xA;    int_cte += cte;&#xA;  }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="3848" LastEditorUserId="3848" LastEditDate="2014-04-26T18:50:48.430" LastActivityDate="2019-09-26T22:12:10.820" Title="differential drive PID controller" Tags="&lt;pid&gt;&lt;differential-drive&gt;" AnswerCount="4" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2769" PostTypeId="1" CreationDate="2014-04-13T18:09:44.827" Score="1" ViewCount="2700" Body="&lt;p&gt;I have a four wheel DC rover with two optical wheel encoders.  I'm executing rover turns by controlling the direction of wheel motion on either side of the rover.  To turn left, all wheels on the left rotate backwards while all right wheels rotate forward.  This allows to rover to remain relatively in the same position while turning.  The directions are reversed to do a right turn.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I use these two sensors to execute as close to a 90 degree turn as possible without fusing additional sensor data?&lt;/p&gt;&#xA;" OwnerUserId="2295" LastEditorUserId="350" LastEditDate="2014-04-14T18:00:52.893" LastActivityDate="2014-04-16T20:55:33.247" Title="How to turn a rover 90 degrees using wheel encoders?" Tags="&lt;sensors&gt;&lt;motion&gt;" AnswerCount="4" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2770" PostTypeId="2" ParentId="2768" CreationDate="2014-04-13T19:01:10.243" Score="0" Body="&lt;p&gt;Nice robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The +/- 5 threshold in your code is a red flag to me.  This introduces a non-linearity/discontinuity which shouldn't be needed.  What is the rationale for that?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have enough memory to capture some real-time data try logging your &lt;code&gt;cte&lt;/code&gt; and &lt;code&gt;steer&lt;/code&gt; and then review them as you tune.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Speed is going to have an impact because of the way you've set up your steering and the vehicle dynamics.  As the speed increases your steering command is going to cause a different turning radius.  Also as speed increases it becomes hard to steer the vehicle.  This isn't a trivial system.  When your battery voltage goes down and assuming that voltage is your motor power tail and that you're not actually closing a velocity loop the effect of the lower voltage would be lower speed and therefore the effect of your PID coefficients will be reduced linearly to that.  Note that going at a lower speed with a full battery and going at a low speed due to a low battery will behave differently (the impact of your steer command will be different).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's what I would suggest as a first go:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Get rid of that +5/-5 threshold.&lt;/li&gt;&#xA;&lt;li&gt;Add some data logging in and review while tuning.&lt;/li&gt;&#xA;&lt;li&gt;Start with I=0, D=0 and pick a fixed velocity.  Start on the slow end.&lt;/li&gt;&#xA;&lt;li&gt;Ramp up P, keep doubling it until the system becomes unstable.  Back off (e.g. take half or 1/4 of the unstable P.)&lt;/li&gt;&#xA;&lt;li&gt;Experiment with adding a little I or D and see if they improve performance.  If not leave at 0.&lt;/li&gt;&#xA;&lt;li&gt;Repeat tuning at a few speeds and plot your tuned variables vs. speed.&lt;/li&gt;&#xA;&lt;li&gt;Try fitting linear or 2nd order segments to that graph to determine the coefficients at different speeds if needed.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="1584" LastEditorUserId="1584" LastEditDate="2014-04-14T22:02:06.903" LastActivityDate="2014-04-14T22:02:06.903" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2771" PostTypeId="1" AcceptedAnswerId="2789" CreationDate="2014-04-14T09:15:18.207" Score="2" ViewCount="176" Body="&lt;p&gt;How can I track a fixed point $P=(x_P, y_P)$  from a moving robot?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Coordinates of $P$ are relative to the state/pose of the robot (x axis looks forward the robot and y axis is positive on the right of the robot).&#xA;Suppose that the initial robot state/pose is at $S_{R}=(x_R, y_R, \theta_R)$.&#xA;The next frame (namely after $\Delta t$) with the applied control $(v, \omega)$ the robot is at state $S_{R'}=(x_{R'}, y_{R'}, \theta_{R'})$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where (I set the axes as OpenCV):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$x_{R'} = x_R + v cos(\theta_R) \Delta t $ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$y_{R'} = y_R + v sin(\theta_R) \Delta t $ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\theta_{R'} = \theta_{R} + \omega\Delta t$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The question is: which are the coordinates $(x_P', y_P')$ of the same point $P$ relative to $S_{R'}$?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/TgM1h.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As visible in the picture, I know the transformation from the initial state to the next state of the robot and the coordinate of P in reference to the initial state&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;t = \begin{pmatrix}&#xA;cos(\theta_{R'}) &amp;amp; -sin(\theta_{R'}) &amp;amp; x_{R'}\\&#xA;sin(\theta_{R'}) &amp;amp; cos(\theta_{R'}) &amp;amp; y_{R'}\\&#xA;0 &amp;amp; 0 &amp;amp; 1\\&#xA;\end{pmatrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please correct me if I made some mistakes!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you, any help is appreciated.&lt;/p&gt;&#xA;" OwnerUserId="1777" LastEditorUserId="1777" LastEditDate="2014-04-17T08:07:45.777" LastActivityDate="2014-04-17T09:27:56.713" Title="Point tracking from a mobile robot" Tags="&lt;mobile-robot&gt;&lt;kalman-filter&gt;&lt;tracks&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2772" PostTypeId="1" AcceptedAnswerId="2820" CreationDate="2014-04-14T12:24:37.403" Score="5" ViewCount="5157" Body="&lt;p&gt;I've been writing some quad copter software and I am not sure what the best way is to map the throttle and PID inputs to ESC power.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My throttle range is 0-1 and my PID outputs are 0-1. My ESC's have a range of 1060us to 1860us.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have mapped the motor speeds like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;_motorPower[0] = map((_rcConstrainedCommands[3] + _ratePIDControllerOutputs[1] + _ratePIDControllerOutputs[2] + _ratePIDControllerOutputs[0]), 0.0, 4.0, 1060, 1860);&#xA;_motorPower[1] = map((_rcConstrainedCommands[3] + _ratePIDControllerOutputs[1] - _ratePIDControllerOutputs[2] - _ratePIDControllerOutputs[0]), 0.0, 4.0, 1060, 1860);&#xA;_motorPower[2] = map((_rcConstrainedCommands[3] - _ratePIDControllerOutputs[1] - _ratePIDControllerOutputs[2] + _ratePIDControllerOutputs[0]), 0.0, 4.0, 1060, 1860);&#xA;_motorPower[3] = map((_rcConstrainedCommands[3] - _ratePIDControllerOutputs[1] + _ratePIDControllerOutputs[2] - _ratePIDControllerOutputs[0]), 0.0, 4.0, 1060, 1860);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This works but if my quad is perfectly level (i.e. the PID outputs are 0) and I apply full throttle (1.0) then map this to ESC power I will only get quarter power (1260us).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How should I be doing this so that if my throttle is on max then I get max power? If my throttle is half (0.5) then I should get half power plus the PID values etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone help me with this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&#xA;Joe&lt;/p&gt;&#xA;" OwnerUserId="4212" LastActivityDate="2014-07-05T14:44:25.527" Title="Quadcopter Throttle and PID mixing to Motor Speed" Tags="&lt;motor&gt;&lt;quadcopter&gt;&lt;pid&gt;&lt;pwm&gt;&lt;esc&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2773" PostTypeId="2" ParentId="2768" CreationDate="2014-04-14T17:56:55.757" Score="2" Body="&lt;p&gt;You aren't properly mapping your steering value to the wheel speeds.  In fact, I don't think you're applying the PID correctly at all.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;From your code, my guess is that you're using &lt;code&gt;get_segment_center&lt;/code&gt; to determine the adjustment that you need to make.  My assumption is that this describes a distance measurement of how far the line sensor is off of the center of the line.  If that's the case, you are lacking the necessary calculations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The output of a PID takes an &lt;em&gt;error&lt;/em&gt; and gives you a &lt;em&gt;correction&lt;/em&gt;, so if your error is in inches then your correction will be in inches; if the error is in degrees, your correction will be in degrees, and so on.  You need to pick either of those and stick with it.  As written, you're taking a distance error and plugging it directly into a speed correction &amp;ndash; no wonder it only works at one speed!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My recommendation would be to calculate the steering error as an angle, which you can get by measuring (1) the distance over which your sensor can pick up the line and (2) the distance between the axle and the sensor.  With the tangent function, you can map sensor readings to angle error.  Then, you can implement the function I wrote about in &lt;a href=&quot;https://robotics.stackexchange.com/a/2016/350&quot;&gt;this post&lt;/a&gt; to convert the steering angle to wheel velocities.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2014-04-14T17:56:55.757" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="2774" PostTypeId="1" CreationDate="2014-04-14T18:05:01.093" Score="0" ViewCount="1056" Body="&lt;p&gt;Can someone please post the datasheet for the colour sensor mentioned above. All i can find is for TCS3200&lt;/p&gt;&#xA;" OwnerUserId="3858" LastActivityDate="2014-04-26T10:41:35.587" Title="Datasheet for Taos TCS3200 GY-31" Tags="&lt;sensors&gt;" AnswerCount="2" CommentCount="1" ClosedDate="2014-05-07T11:36:33.527" ContentLicense="CC BY-SA 3.0" />
  <row Id="2776" PostTypeId="2" ParentId="2769" CreationDate="2014-04-14T18:30:17.353" Score="1" Body="&lt;p&gt;You want the wheel odometry to add up to 1/4 of the circumference of the circle whose radius is the distance between the wheels (call it $R$). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In other words, if you only drove one wheel and the wheels were $R$ units apart, then you'd leave a circular tire track whose circumference would be $2\pi R$.  If the left wheel moved $\frac{2\pi R}{4} = \frac{\pi R}{2}$ then effectively you've drawn a quarter circle and are now facing 90 degrees ($\pi/2$ radians) to your right.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This also works if you rotate both wheels in opposite directions.  Instead of rotating one wheel $\frac{\pi R}{2}$, rotate each wheel $\frac{\pi R}{4}$ in opposite directions.  This will trace a circle of diameter $R$ (half the size of before), whose circumference is $\pi R$.  Both wheels are tracing $\frac{\pi R}{4}$ or one quarter of the same circle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My back-of-the-envelope says that this will work for any combination of left and right wheel distances.  So, if your left and right wheel odometry values are $D_l$ and $D_r$, you've made a 90 degree turn to the right when $D_l - D_r = \frac{\pi R}{2}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should be able to calculate $D_l$ and $D_r$ from your wheel encoders since you know the wheel radius.  At that point, the value of $\pi$ should be factored out of the equation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This won't be accurate over time, but it's about the best you can do without factoring in any other sensor data.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2014-04-16T20:55:33.247" LastActivityDate="2014-04-16T20:55:33.247" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2777" PostTypeId="2" ParentId="2767" CreationDate="2014-04-14T18:34:06.793" Score="0" Body="&lt;p&gt;You're essentially designing an &quot;inverted pendulum&quot; PID controller.  If you search for that, you should find a lot of good information on the calculations you need to make.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-04-14T18:34:06.793" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2778" PostTypeId="2" ParentId="2774" CreationDate="2014-04-14T22:50:23.920" Score="1" Body="&lt;p&gt;Are you looking for the &lt;em&gt;TCS230&lt;/em&gt; or the &lt;em&gt;TCS3200&lt;/em&gt;?&#xA;If its the &lt;em&gt;TCS3200 GY-31&lt;/em&gt; (which is the upgraded module from the &lt;em&gt;TCS230&lt;/em&gt;), you can try &lt;a href=&quot;http://smart-prototyping.com/image/data/2_components/Arduino/100847%20GY-31%20TCS230%20TCS3200%20Color%20Sensor%20Recognition%20Module%20for%20Arduino/color-sensor-module.pdf&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Its not the most informative, but it does cover the basics for the &lt;em&gt;GY-31&lt;/em&gt;.&lt;/p&gt;&#xA;" OwnerUserId="2402" LastEditorUserId="1850" LastEditDate="2014-04-25T18:26:39.077" LastActivityDate="2014-04-25T18:26:39.077" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2779" PostTypeId="2" ParentId="2760" CreationDate="2014-04-15T12:46:37.193" Score="8" Body="&lt;h3&gt;Disclaimer!&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;I will try to solve your problem but it may or may not solve the problem with your code!&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;: Two possible mistake in your code. In your pseudo-code, you are using transpose of jacobian instead of pseudo-inverse of jacobian (as suggested in your referenced slide). The other possible mistake is in the calculation of cross product in your analytical jacobian code.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h3&gt;Long answer for future readers:&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;First: In gradient based jacobian approach, if the target point is out of workspace of the robot, your algorithm traps in an infinite loop, trying to reach the error threshold. In inverse methods, jacobian looses rank and program crashes!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second: Note that under some conditions a 6dof for manipulator there is always a closed form solution that gives you 6 answers for a IK problem of position and orientation. These conditions are as follow:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Three consecutive rotational joint axes are incident (e.g., spherical wrist)&lt;/li&gt;&#xA;&lt;li&gt;Three consecutive rotational joint axes are parallel&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;To give you an idea, consider an anthropomorphic arm. First joint brings the end-effector to a plane that answer lies within and next two joints solve the position problem. The rest of three degrees of freedom cat tackle the orientation part. There is a brief explanation in 7th page of &lt;a href=&quot;http://excelsior.cs.ucsb.edu/courses/cs290n_cg_modeling/notes/uiuc_notes/chap4.pdf&quot; rel=&quot;noreferrer&quot;&gt;this&lt;/a&gt; file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Three: Regarding your code, I'm not sure if the following is correct (to be very honest, I'm not sure what is happening!).&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;this.M[0, column] = zMatrix.M[1, column] * p_p[2] - zMatrix.M[2, column] * p_p[1];&#xA;this.M[1, column] = zMatrix.M[2, column] * p_p[0] - zMatrix.M[0, column] * p_p[2];&#xA;this.M[2, column] = zMatrix.M[0, column] * p_p[1] - zMatrix.M[1, column] * p_p[0];&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;To calculate the contribution of $i^{th}$ revolute joint motion to end-effector velocity, the correct way to go is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$J_{Li}(q) = z_{i-1}\times (p_{ee}-p_{i-1})$$&#xA;$$J_{Ai}(q) = z_{i-1}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;$J_{Li}$ and $J_{Ai}$ are linear and angular velocity of end-effector&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;$q$ is a vector of the current configuration of the robot and &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;$z_{i}$ is the a vector expressing the orientation of the joint in space. If you are using &lt;em&gt;Denavit Hartenberg&lt;/em&gt; convention, this will be the first three elements of the third column of DH matrix related to the joint.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;$p_{i}$ and $p_{ee}$ are position of $i^{th}$ joint and end-effector respectively (First three elements of fourth column of DH).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;At last but not least, $\times$ is the &lt;em&gt;cross product&lt;/em&gt; of two vectors (I think this is one of the places that your code &lt;em&gt;might&lt;/em&gt; have gone wrong).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This, is the proper way of calculating the &lt;strong&gt;geometric&lt;/strong&gt; jacobian. Once you have this, there are several ways to solve IK problem numerically. Apart from transpose, newton method, gradient method and etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To have a deep study of these methods, have a look at &lt;a href=&quot;http://www.dis.uniroma1.it/~deluca/rob1_en/10_InverseKinematics.pdf&quot; rel=&quot;noreferrer&quot;&gt;&lt;strong&gt;these very nice set of slides&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/w7keV.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/2wCC9.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h3&gt;Bonus!&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;I strongly suggest, if you are doing to do serious robot programming, consider using some linear algebra libraries such as &lt;a href=&quot;http://www.boost.org/doc/libs/1_55_0b1/libs/numeric/ublas/doc/index.htm&quot; rel=&quot;noreferrer&quot;&gt;boost::numeric::ublas&lt;/a&gt; or &lt;a href=&quot;http://eigen.tuxfamily.org/index.php?title=Main_Page&quot; rel=&quot;noreferrer&quot;&gt;Eigen&lt;/a&gt;. They are fast, comprehensive and common. To give you an insight, here is how you can do a simple jacobian in &lt;code&gt;Eigen&lt;/code&gt; for a 7dof robot:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    //Hint:&#xA;    // A0i = A01*A12*A23...Ai&#xA;    // Aij = DH matrix related to transformation for ith to jth joint.&#xA;    Eigen::Vector3d z0, p0, pe;&#xA;        z0  &amp;lt;&amp;lt; 0, 0, 1;&#xA;        p0  &amp;lt;&amp;lt; 0, 0, 0;&#xA;        pe = A07.block&amp;lt;3,1&amp;gt;(0,3);&#xA;&#xA;    // Ji linear velocity&#xA;    Jacobian.block&amp;lt;3,1&amp;gt;(0,0) = z0.cross(pe-p0);                                  &#xA;    Jacobian.block&amp;lt;3,1&amp;gt;(0,1) = A01.block&amp;lt;3,1&amp;gt;(0,2).cross(pe-A01.block&amp;lt;3,1&amp;gt;(0,3));&#xA;    Jacobian.block&amp;lt;3,1&amp;gt;(0,2) = A02.block&amp;lt;3,1&amp;gt;(0,2).cross(pe-A02.block&amp;lt;3,1&amp;gt;(0,3));&#xA;    Jacobian.block&amp;lt;3,1&amp;gt;(0,3) = A03.block&amp;lt;3,1&amp;gt;(0,2).cross(pe-A03.block&amp;lt;3,1&amp;gt;(0,3));&#xA;    Jacobian.block&amp;lt;3,1&amp;gt;(0,4) = A04.block&amp;lt;3,1&amp;gt;(0,2).cross(pe-A04.block&amp;lt;3,1&amp;gt;(0,3));&#xA;    Jacobian.block&amp;lt;3,1&amp;gt;(0,5) = A05.block&amp;lt;3,1&amp;gt;(0,2).cross(pe-A05.block&amp;lt;3,1&amp;gt;(0,3));&#xA;    Jacobian.block&amp;lt;3,1&amp;gt;(0,6) = A06.block&amp;lt;3,1&amp;gt;(0,2).cross(pe-A06.block&amp;lt;3,1&amp;gt;(0,3));&#xA;&#xA;    // Ji angular velocity&#xA;    Jacobian.block&amp;lt;3,1&amp;gt;(3,0) = z0;                 &#xA;    Jacobian.block&amp;lt;3,1&amp;gt;(3,1) = A01.block&amp;lt;3,1&amp;gt;(0,2); &#xA;    Jacobian.block&amp;lt;3,1&amp;gt;(3,2) = A02.block&amp;lt;3,1&amp;gt;(0,2); &#xA;    Jacobian.block&amp;lt;3,1&amp;gt;(3,3) = A03.block&amp;lt;3,1&amp;gt;(0,2); &#xA;    Jacobian.block&amp;lt;3,1&amp;gt;(3,4) = A04.block&amp;lt;3,1&amp;gt;(0,2); &#xA;    Jacobian.block&amp;lt;3,1&amp;gt;(3,5) = A05.block&amp;lt;3,1&amp;gt;(0,2); &#xA;    Jacobian.block&amp;lt;3,1&amp;gt;(3,6) = A06.block&amp;lt;3,1&amp;gt;(0,2); &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And if you are sure your jacobian is not rank deficient, calculating right pseudo inverse is as easy as:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;inline Eigen::Matrix&amp;lt;float, Eigen::Dynamic, Eigen::Dynamic&amp;gt; pInv(const Eigen::Matrix&amp;lt;float, Eigen::Dynamic, Eigen::Dynamic&amp;gt; &amp;amp;a) {&#xA;    Eigen::Matrix&amp;lt;float, Eigen::Dynamic, Eigen::Dynamic&amp;gt; aT= a.transpose();&#xA;    Eigen::Matrix&amp;lt;float, Eigen::Dynamic, Eigen::Dynamic&amp;gt; aaT = a*aT;&#xA;    return aT*(aaT.inverse());&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="2523" LastActivityDate="2014-04-15T12:46:37.193" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2780" PostTypeId="2" ParentId="2769" CreationDate="2014-04-15T19:57:28.427" Score="3" Body="&lt;p&gt;All theory aside, circumferences and actual distances travelled will vary with your wheel geometry since your wheels aren't perfectly tangential to their direction of travel while turning.  While Ian gives some good math I think I would run tests and assign a &lt;em&gt;pseudo-circumference&lt;/em&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think I would just measure what the odometers read for a full 360 turn-about and then divide that up as necessary.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, I'd bet that different floors would give different performance from your off-tangent wheels and your pseudo circumference is probably dependent on that.&lt;/p&gt;&#xA;" OwnerUserId="1075" LastEditorUserId="1075" LastEditDate="2014-04-15T23:04:48.947" LastActivityDate="2014-04-15T23:04:48.947" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2781" PostTypeId="1" AcceptedAnswerId="2799" CreationDate="2014-04-15T21:17:31.523" Score="3" ViewCount="4838" Body="&lt;p&gt;I am preparing for my first quadcopter build and need to know how to tell what motors/ESC's/propellers will work with each other. I also would like to know how to tell what the motors would be capable of carrying/how much thrust they have. I would like to put a camera on this copter. I cannot find anywhere a straight answer to this question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ones I currently think are the ones I want are:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ESC:&#xA;&lt;a href=&quot;https://www.hobbyking.com/hobbyking/store/__25365__Turnigy_Multistar_30_Amp_Multi_rotor_Brushless_ESC_2_4S.html&quot; rel=&quot;nofollow&quot;&gt;https://www.hobbyking.com/hobbyking/store/__25365__Turnigy_Multistar_30_Amp_Multi_rotor_Brushless_ESC_2_4S.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Motor: &lt;a href=&quot;https://www.hobbyking.com/hobbyking/store/__28112__Turnigy_D3530_14_1100KV_Brushless_Outrunner_Motor_US_Warehouse_.html&quot; rel=&quot;nofollow&quot;&gt;https://www.hobbyking.com/hobbyking/store/__28112__Turnigy_D3530_14_1100KV_Brushless_Outrunner_Motor_US_Warehouse_.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Propeller: 11inch&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This copter needs to be able to carry a camera (~go pro)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;TLDR: How does one match ESC's/Motors/Propellers, and how to tell if they can get the job done?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(ESC - Electronic Speed Control)&lt;/p&gt;&#xA;" OwnerUserId="4222" LastEditorUserId="131" LastEditDate="2014-04-30T17:35:35.350" LastActivityDate="2014-04-30T17:35:35.350" Title="How to know what motor/ESC/propeller combination will work for a quadcopter?" Tags="&lt;quadcopter&gt;&lt;brushless-motor&gt;&lt;esc&gt;&lt;multi-rotor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2782" PostTypeId="1" CreationDate="2014-04-16T01:15:34.537" Score="1" ViewCount="962" Body="&lt;p&gt;So, i'm making my second ever hobby robot(I'm 15) and am planning on soldering my own connectors for the battery, sensors, Arduino, etc. It will be a small mobile robot. Anyways, I was wondering what a good gauge of stranded hookup wire would be good for that purpose. Thanks!!&lt;/p&gt;&#xA;" OwnerUserId="4224" LastActivityDate="2014-04-16T15:54:58.450" Title="Wire gauge for hobby robot question" Tags="&lt;mobile-robot&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2783" PostTypeId="2" ParentId="2782" CreationDate="2014-04-16T07:02:48.663" Score="1" Body="&lt;p&gt;For power/ground/analog signals the only limitation on how small you can go on wire gauge is power loss.&#xA;You can look up voltage drop calculators online but generally speaking if it's short runs with low current you shouldn't run into problems with wire gauge being too small. &#xA;One place where you do need to be careful is when using ratiometric sensor such as rotary potentiometers or resistive temperature sensors as the resistance of the connecting wires could have a measurable effect.&#xA;In the applications I work on I use a rule of thumb of 28AWG for signals, 26AWG for low current devices (up to 0.2A) 24AWG for up to 1A and 22 AWG up to 3A (assuming the lengths aren't more than 1-2m)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As much of a consideration as wire gauge is the wire material and protection.&#xA;Plated wire (normally tin) is much easier to solder, I've occasionally had batched of unplated wire which refused to solder unless attacked with flux and steer clear of wire with thick PVC coating. Not only is it bulkier but the PVC melts when you solder the wire.&lt;/p&gt;&#xA;" OwnerUserId="1978" LastActivityDate="2014-04-16T07:02:48.663" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2784" PostTypeId="2" ParentId="2782" CreationDate="2014-04-16T15:54:58.450" Score="1" Body="&lt;p&gt;You may want to check &lt;a href=&quot;http://www.keywolf.com/American_Wire_Gauge.php&quot; rel=&quot;nofollow&quot;&gt;this table&lt;/a&gt; to see what a given AWG size can handle in terms of current as well as AC frequency.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Remember that getting enough surface area on your connections is as important as using the correct wire size.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-04-16T15:54:58.450" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2785" PostTypeId="2" ParentId="2769" CreationDate="2014-04-16T18:00:40.640" Score="1" Body="&lt;p&gt;If you wanted accurate turns, you should throw a gyrometer onto the rover. They're relatively inexpensive and easy to use. Here's one as an example: &lt;a href=&quot;https://www.sparkfun.com/products/11977&quot; rel=&quot;nofollow&quot;&gt;https://www.sparkfun.com/products/11977&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="1960" LastActivityDate="2014-04-16T18:00:40.640" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2786" PostTypeId="2" ParentId="2769" CreationDate="2014-04-16T18:32:19.613" Score="1" Body="&lt;p&gt;No need for factors of pi. (I think in Ian's answer, the circumference would be pi*R since he defines R as the separation between the wheels which I read as the width of the robot?) You just need the width of the robot and the diameter of the wheels. The amount the robot turns is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ang = enc_value/enc_range * D/W * 360&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where Ang is the angle, env_value is your encoder reading, enc_range is the encoder reading for one full revolution, D is the diameter of a wheel and W is the width of the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For 90 degrees you get:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;enc_value= enc_range/4 * (W/D)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Calibration as another poster said, is recommended. This kind of dead reckoning without any reference points will accumulate errors pretty fast. After a few turns you'll have order unity errors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that if you only drive the wheels on one side to turn, how the wheels drag on the other side is very dependent on the surface. For example on a softer surface, the wheel that has to push across the surface will dig in more than the one that is dragged and you'll rotate about the wheel not moving.&lt;/p&gt;&#xA;" OwnerUserId="3913" LastActivityDate="2014-04-16T18:32:19.613" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2787" PostTypeId="1" CreationDate="2014-04-17T08:38:46.633" Score="2" ViewCount="330" Body="&lt;p&gt;For a class project, I'm working with a weight stack:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/LSgxa.png&quot; alt=&quot;weight stack&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm trying to simultaneously measure:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;the position of a moving weight stack&lt;/li&gt;&#xA;&lt;li&gt;the value of the weight based on a calibrated/preloaded position in the stack, not via load sensor. (e.g. think a stack of plate weights where the sensor knows in advance that 1 plate = 10lbs, 2 plates = 20lbs, etc.)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The weight stack and the base camp chip/sensor/laser would be within two feet of the weight stack, so I don't need anything overly strong. My requirement is that it is small/unobtrusive and cost effective. I've looked into a few options, but I'm not an engineer so I'm not sure if I am on the right track.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How would you do this? Is there any research that I could check out?&lt;/p&gt;&#xA;" OwnerUserId="4229" LastEditorUserId="350" LastEditDate="2014-09-25T14:54:15.713" LastActivityDate="2015-07-22T23:10:43.377" Title="Position and Object Data Tracking" Tags="&lt;sensors&gt;" AnswerCount="3" CommentCount="4" ClosedDate="2015-07-24T16:55:34.677" ContentLicense="CC BY-SA 3.0" />
  <row Id="2788" PostTypeId="2" ParentId="2787" CreationDate="2014-04-17T09:05:24.633" Score="0" Body="&lt;p&gt;You can use a kinect or a similar depth sensor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you know the weight of a plate, if you can setup the environment as you wish (namely the stack is always on the floor or on a plane) you can, with &lt;a href=&quot;http://pointclouds.org/&quot; rel=&quot;nofollow&quot;&gt;pcl&lt;/a&gt; extract the volume of the stack (removing the plane what rest is only the stack and you get its track for free), estimate the number of plates with the height of the stack and consequently get the weight.&lt;/p&gt;&#xA;" OwnerUserId="1777" LastActivityDate="2014-04-17T09:05:24.633" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2789" PostTypeId="2" ParentId="2771" CreationDate="2014-04-17T09:27:56.713" Score="1" Body="&lt;p&gt;Let's assume that you know the position of P=(xp,yp) in the initial state.&#xA;Let's also assume that you know the transformation matrix t which transforms the initial state of the robot to the next state. Due to the relative nature of positions, you can say that robot is standing still and that the point P is moving. This is exactly what you need as you wish to view everything from robot's own coordinate system. It is not moving relative to itself, but the point P is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By that we can say:&#xA;P'=inverse(T)*P&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regards&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: I'm not completely sure that the transformation matrix you wrote is perfectly correct, please check it and edit the post if it's incorrect for future reference (it should hold the difference between the values, not ending values).&#xA;Also, keep in mind that the rotation and translation are not commutative so don't let that give you headaches.&lt;/p&gt;&#xA;" OwnerUserId="4017" LastActivityDate="2014-04-17T09:27:56.713" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2790" PostTypeId="2" ParentId="2767" CreationDate="2014-04-17T11:49:29.967" Score="2" Body="&lt;p&gt;Here is a useful thesis that might help:&#xA;&lt;a href=&quot;http://dspace.mit.edu/bitstream/handle/1721.1/69500/775672333.pdf&quot; rel=&quot;nofollow&quot;&gt;http://dspace.mit.edu/bitstream/handle/1721.1/69500/775672333.pdf&lt;/a&gt;&#xA;And this paper discusses some of the control problems, including the drift compensation problem that you're having:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.raysforexcellence.se/wp-content/uploads/2013/01/Dennis-Jin-Development-of-a-stable-control-system-for-a-segway.pdf&quot; rel=&quot;nofollow&quot;&gt;http://www.raysforexcellence.se/wp-content/uploads/2013/01/Dennis-Jin-Development-of-a-stable-control-system-for-a-segway.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a kind of side comment, you are better off to have the gyro mounted closer the wheels rather than up at the top as the linear accelerations measured are proportional to their distance from the wheel axis, and this may be making your drift worse.&lt;/p&gt;&#xA;" OwnerUserId="2402" LastActivityDate="2014-04-17T11:49:29.967" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2791" PostTypeId="2" ParentId="2723" CreationDate="2014-04-17T18:28:13.297" Score="1" Body="&lt;p&gt;The 'speed' of a lead-screw is the product of the lead-screw's pitch and the rotational speed of the motor. For example, if you have a screw with 10 threads-per-inch pitch, and you rotate it at 60 r.p.m. you will get an advance speed of 0.1 inches per second. At 600 r.p.m. you would get 1 inch per second. You would need 6000 r.p.m. to drive a 10 threads-per-inch lead-screw.(3/4&quot; hardware store all-thread has this pitch)&#xA;If you get a coarser thread, to increase translational speed, the torque requirements go up, and you'll need a bigger motor.&#xA;Lead-screws are great for slow, precise motion - the homemade 3d printer industry was practically built on them. High speed movement is another kettle of fish. As Mark Booth pointed out, belt drives are better if you need the speed.&#xA;As per accuracy, this page has a good practical discussion:&#xA;&lt;a href=&quot;http://www.protoparadigm.com/blog/2013/10/accuracy-vs-precision-and-threaded-rod-vs-leadscrews-in-3d-printers/&quot; rel=&quot;nofollow&quot;&gt;http://www.protoparadigm.com/blog/2013/10/accuracy-vs-precision-and-threaded-rod-vs-leadscrews-in-3d-printers/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2402" LastActivityDate="2014-04-17T18:28:13.297" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2792" PostTypeId="2" ParentId="2596" CreationDate="2014-04-18T00:47:53.570" Score="1" Body="&lt;p&gt;What kind of &quot;reference&quot; do you want?  Some bibtex to reference in your paper?  Or detailed schematics?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it is a paper reference, i'd probably just point to either BD's website above or this: &lt;a href=&quot;http://www.theroboticschallenge.org&quot; rel=&quot;nofollow&quot;&gt;http://www.theroboticschallenge.org&lt;/a&gt; or this: &lt;a href=&quot;http://www.theroboticschallenge.org/files/ATLAS-Datasheet_v15_DARPA.PDF&quot; rel=&quot;nofollow&quot;&gt;http://www.theroboticschallenge.org/files/ATLAS-Datasheet_v15_DARPA.PDF&lt;/a&gt;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to look at their mechanics, take a look at the ROS URDF and gazebo models.  They can be downloaded from OSRF's bitbucket site: &lt;a href=&quot;https://bitbucket.org/osrf/drcsim&quot; rel=&quot;nofollow&quot;&gt;https://bitbucket.org/osrf/drcsim&lt;/a&gt;.  &lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-04-18T00:47:53.570" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2793" PostTypeId="2" ParentId="2787" CreationDate="2014-04-18T01:14:00.863" Score="0" Body="&lt;p&gt;If the moving stack follows a regular path, you could use a stack of bump switches to determine their arrival at that point, and also to measure the number of plates in the stack by using one switch for each plate.&#xA;This would only work if the plates were thick enough, and the path regular. By extension, a array of photocell/LED pairs could provide a contactless method of doing the same thing.&lt;/p&gt;&#xA;" OwnerUserId="2402" LastActivityDate="2014-04-18T01:14:00.863" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2794" PostTypeId="1" CreationDate="2014-04-18T15:49:41.150" Score="2" ViewCount="598" Body="&lt;p&gt;So, I'm planning out my second hobby robot(I'm 15). I am planning on using a 7.4V LiPo battery and my idea is to solder on a 3-pin header to connect to the electronics. Anyways, should I solder to crimp terminals and then attach it to the pack? Or should I solder directly to the battery leads Keep in mind I have a decent background in hobby electronics and am just starting with robotics. My soldering skills are also decent!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!!&lt;/p&gt;&#xA;" OwnerUserId="4224" LastEditorUserId="4224" LastEditDate="2014-04-18T15:55:49.263" LastActivityDate="2014-04-20T22:53:45.850" Title="Crimp or Solder to LiPo Battery?" Tags="&lt;battery&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2795" PostTypeId="2" ParentId="2794" CreationDate="2014-04-18T20:38:44.113" Score="4" Body="&lt;p&gt;I find it's always cleaner to use connectors rather than soldering directly to leads, no matter what component you're trying to attach to your robot. You have to think about things in terms of maintenance. If a battery goes kaput (technical term :D) and you soldered directly to the leads, you'll have to desolder and solder again. If you used a connector, you simply pop out the battery and replace it with a new one. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to take your designs to the next level, you should start planning where your wires will be routed through the chassis, covering them with wire loom, spiral wraps, cable carrier, cable ducts or even just cable ties w/ cable tie holders (google wire management products and you'll find even more options). The ideal situation is when the wiring throughout your chassis is static and never replaced or moved (except when a wire is the point of failure). To replace any part or to work/modify it, all you should have to do is unplug connectors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a final note, ALWAYS color code your wires: Red = +12V, Black = Gnd, Orange = +5V, Yellow = +3.3V, Green = Sensor Signals, Blue = Communication lines...you get the picture. You can define them any way you'd like (although I'd recommend to stick w/ red = power, black = gnd) as long as you're consistent. On the other hand, NEVER assume someone else has color coded their wiring. This has bitten me in the rear because I had assumed red would be power and black would be ground, but I was mistaken. The extra time you take in the beginning to do things cleanly will save you hours if not days later on in the project.&lt;/p&gt;&#xA;" OwnerUserId="1960" LastActivityDate="2014-04-18T20:38:44.113" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2796" PostTypeId="2" ParentId="2794" CreationDate="2014-04-18T23:25:16.200" Score="0" Body="&lt;p&gt;I must agree with Andrew Capodieci in that you should use a connectors and 1 mm headers (or whatever the balance lead is). There is a good chance that at some point you will want to remove the battery to replace it/inspect it for damage or whatnot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I had to do one of the two, then I would crimp for low current applications, and solder for high current. Crimping is probably fine for small robots, but I wouldn't dream of it for anything that wouldn't fit in a 20 cm cube or especial anything aerial. However, using a connector would be the best option in both situations. &lt;/p&gt;&#xA;" OwnerUserId="1667" LastActivityDate="2014-04-18T23:25:16.200" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2797" PostTypeId="2" ParentId="2794" CreationDate="2014-04-20T22:53:45.850" Score="-1" Body="&lt;p&gt;Really, the decision of whether to crimp or to solder comes from the thickness of the wire.  Thin wire is too brittle to be crimped, and must be soldered.  However, iff the wire is too thick then a soldering iron can't apply heat faster than the wire dissipates it (and the jacket will melt long before your solder does). At that point, your options are to use a torch (like in pipe soldering) or to crimp the connections.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For our batteries, we spot-welded nickel plates to the tops and bottoms of Li-ion 18650 cells to make battery packs, and then added crimp terminals to the connections between packs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Crimp connections done properly are very reliable -- most residential wiring uses some form of a crimp connector.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-04-20T22:53:45.850" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2798" PostTypeId="1" AcceptedAnswerId="2811" CreationDate="2014-04-21T13:37:14.647" Score="1" ViewCount="806" Body="&lt;p&gt;I'm trying to find a good beginners platform to use ROS with, and I came across the iRobot Create. To my surprise, they do not sell in Europe. Why is that?&lt;/p&gt;&#xA;" OwnerUserId="4245" LastEditorUserId="158" LastEditDate="2014-05-19T15:30:13.803" LastActivityDate="2014-05-19T15:30:13.803" Title="Why does iRobot not sell the Create in Europe?" Tags="&lt;mobile-robot&gt;&lt;ros&gt;&lt;irobot-create&gt;" AnswerCount="1" CommentCount="6" ClosedDate="2014-05-07T11:36:21.533" ContentLicense="CC BY-SA 3.0" />
  <row Id="2799" PostTypeId="2" ParentId="2781" CreationDate="2014-04-21T20:05:47.600" Score="1" Body="&lt;p&gt;First step to decide electronics is roughly estimate your all up weight (AUW) which is total flying weight including payload. Now your target total maximum thrust(T) provided by system should be just double your AUW which will ensure good maneuverability and control. This will given you amount of thrust to be provided by each motor (in your case it will be T/4 as you are using 4 rotors).&#xA;Now you have got a criteria to choose a motor. &#xA;For multirotor purpose, people generally use low rpm brushless motors (&amp;lt; 1200KV). You should also refer to &lt;a href=&quot;https://robotics.stackexchange.com/questions/2416/low-amp-fpv-quadcopter-motors/2440#2440&quot;&gt;this&lt;/a&gt; link for more criteria for motor selection. Once motor is selected, propeller can be selected based on manufacturer data for wattage and thrust for compatible propellers. &#xA;ESC can be chosen which is rated higher than maximum current rating of motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your case, motor looks good as maximum thrust is around 1Kg. However no propeller data is given. I would personally suggest you to bench test motor with range of propeller to find optimum performance. However user comments in discussion section on webiste suggest 10x4.5 prop. Current rating for motor is 22A so ESC you are considering (30) should do fine. &lt;/p&gt;&#xA;" OwnerUserId="2118" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2014-04-21T20:05:47.600" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2800" PostTypeId="1" AcceptedAnswerId="2817" CreationDate="2014-04-21T22:27:35.670" Score="6" ViewCount="4919" Body="&lt;p&gt;I'm developing/tuning a software PID for a quadcopter. For now I'm only trying to stabilise the pitch angle using the front and back motors, and I'm only looking at Kp. The motors have a control resolution: input variations need to reach a threeshold to have any effect at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The process output does reach the setpoint, but not precisely enough for my requirements. There is no steady-state error (aka droop), the hunting range is centered on the setpoint, just too wide for my requirements. Also the instability is not an oscillation, but more of a random drift which needs to be large enough before the PID attempts to correct it.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;With a lower Kp the output needs to diverge from the setpoint significantly before the error is big enough for the PID to attempt to correct it.&lt;/li&gt;&#xA;&lt;li&gt;With a higher Kp the PID oscillates.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I could not find a reasonable compromise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm thinking about applying the cuberoot function (or similar) to the error before feeding it to the PID: that way small errors should be significant enough for the PID to attempt to correct them, and large errors would be reduced and might not trigger oscillations. I suppose someone must have been through this before: is this a good solution? Are there any better alternatives?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is not a steady-state error (aka droop) or oscillation issue as far as I can tell: please don't suggest using Ki or Kd&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt;: I have clarified the problem description and suggested using cuberoot rather than logarithm which was a bad idea indeed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks,&#xA;Marc.&lt;/p&gt;&#xA;" OwnerUserId="4249" LastEditorUserId="4249" LastEditDate="2014-04-22T16:41:53.200" LastActivityDate="2015-03-10T20:57:26.267" Title="PID output does not reach setpoint precisely enough" Tags="&lt;pid&gt;" AnswerCount="4" CommentCount="5" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2801" PostTypeId="1" CreationDate="2014-04-22T05:48:32.680" Score="5" ViewCount="11190" Body="&lt;p&gt;Most of the blogs/website say we need a minimum of four channels for a quadcopter (pitch, roll, throttle, yaw): &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;One channel for throttle&lt;/li&gt;&#xA;&lt;li&gt;A second channel for turning right and left.&lt;/li&gt;&#xA;&lt;li&gt;A third channel for pitching forward and backward.&lt;/li&gt;&#xA;&lt;li&gt;A fourth one for rolling left and right.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/Y6W94.gif&quot; alt=&quot;Radio Transmitter Image&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But looking at the RC transmitter, I see that at a time you can change a maximum of two sets data (left and right joy stick). Even if you want to send Rudder and Throttle information at the same, can it not be sent in the same packet?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My understanding is two channels should be sufficient to control a quad copter. Please provide more clarity on this.&lt;/p&gt;&#xA;" OwnerUserId="4251" LastEditorUserId="15160" LastEditDate="2019-01-10T13:36:27.857" LastActivityDate="2019-07-08T22:37:59.577" Title="What is the minimum number of RC channels required to control a Quad Copter?" Tags="&lt;quadcopter&gt;&lt;radio-control&gt;" AnswerCount="4" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="2802" PostTypeId="1" CreationDate="2014-04-22T07:25:03.953" Score="2" ViewCount="86" Body="&lt;p&gt;I am wondering what technology should I use to transmit data (enough for controlling the robot and receiving video) over dozens of kilometers and mountains ?&lt;/p&gt;&#xA;" OwnerUserId="4255" LastActivityDate="2014-04-23T14:18:48.720" Title="Radio-control over dozens of kilometers and mountains" Tags="&lt;radio-control&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2803" PostTypeId="2" ParentId="2802" CreationDate="2014-04-22T07:48:55.697" Score="2" Body="&lt;p&gt;How far is it in kilometers? What radio frequency you can use? Do you need security (code the data)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It strongly depends on your application, it seems you need a real-time connection (to control a robot).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In practice you can use an infrastructure such as telephony systems, GPRS or if you have enough resources you can use satellite solutions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another solution is to make a network or repeater of &lt;a href=&quot;http://en.wikipedia.org/wiki/ZigBee&quot; rel=&quot;nofollow&quot;&gt;ZigBee&lt;/a&gt; modules.&lt;/p&gt;&#xA;" OwnerUserId="748" LastEditorUserId="748" LastEditDate="2014-04-22T07:54:29.437" LastActivityDate="2014-04-22T07:54:29.437" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2804" PostTypeId="2" ParentId="2802" CreationDate="2014-04-22T11:03:55.573" Score="1" Body="&lt;p&gt;You can use high power(1W) radio modems such as &lt;a href=&quot;http://www.digi.com/products/wireless-modems-peripherals/wireless-range-extenders-peripherals/xtend&quot; rel=&quot;nofollow&quot;&gt;digi XTend&lt;/a&gt; or &lt;a href=&quot;http://store.jdrones.com/jD_RD900_Telemetry_Bindle_p/rf900set01.htm&quot; rel=&quot;nofollow&quot;&gt;RFD900&lt;/a&gt; for controlling your robot. For video transmission you can use high power &lt;a href=&quot;http://www.readymaderc.com/store/index.php?main_page=product_info&amp;amp;cPath=11_30_38&amp;amp;products_id=917&quot; rel=&quot;nofollow&quot;&gt;analog video&lt;/a&gt; modules. Using proper directional antennas such as &lt;a href=&quot;http://en.wikipedia.org/wiki/Patch_antenna&quot; rel=&quot;nofollow&quot;&gt;patch&lt;/a&gt; antennas or &lt;a href=&quot;http://en.wikipedia.org/wiki/Helical_antenna&quot; rel=&quot;nofollow&quot;&gt;helical&lt;/a&gt; antennas, you can easily go up to 20+ km in line of site. &lt;/p&gt;&#xA;" OwnerUserId="2118" LastActivityDate="2014-04-22T11:03:55.573" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2805" PostTypeId="2" ParentId="2800" CreationDate="2014-04-22T13:38:45.850" Score="1" Body="&lt;p&gt;I am unsure of why you said &quot;please don't suggest using Ki or Kd&quot; and will suggest them anyway.&#xA;From the comments from the original post I understood that it is not the problem that you settle near the setpoint but that you oscillate around it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If that is the case then you need to add Kd to dampen the oscillations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your problem is in fact that you settle near the setpoint then you need to add Ki to compensate that error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the reason why there are all three terms in the PID regulator and not just one. Such behavior from using proportional term only is expected. Introducing nonlinearity such that you suggested is not something you should generally do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regards&lt;/p&gt;&#xA;" OwnerUserId="4017" LastActivityDate="2014-04-22T13:38:45.850" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2806" PostTypeId="2" ParentId="2800" CreationDate="2014-04-22T13:59:20.547" Score="1" Body="&lt;p&gt;I'm going to suggest it anyways. Add an integrator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you've described is a textbook description of how a proportional only controller would work. If your output is stable, you will never reach your setpoint. From &lt;a href=&quot;http://en.wikipedia.org/wiki/PID_controller#Droop&quot; rel=&quot;nofollow&quot;&gt;Wikipedia&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Because a non-zero error is required to drive it, a proportional&#xA;  controller generally operates with a steady-state error, referred to&#xA;  as droop. Droop is proportional to the process gain and inversely&#xA;  proportional to proportional gain. Droop may be mitigated by adding a&#xA;  compensating bias term to the setpoint or output, or corrected&#xA;  dynamically by adding an integral term.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Biasing is typically a static value added to the output based on some known quantity. If the droop is a know stable constant, you can do this. But my personal feeling is that it is usually a hack that requires constant adjustment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You're attempting to achieve dynamic biasing by using the logarithm of the error. Don't mess with the input to the controller. It will only cause you headaches down the line. You will achieve much better results if you use an integrator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The alternative is to use a &lt;a href=&quot;http://ctms.engin.umich.edu/CTMS/index.php?aux=Extras_Leadlag&quot; rel=&quot;nofollow&quot;&gt;lead-lag filter&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;A lead compensator can increase the stability or speed of reponse[&lt;em&gt;sic&lt;/em&gt;] of a&#xA;  system; a lag compensator can reduce (but not eliminate) the&#xA;  steady-state error.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;But you will achieve the same thing with a lot less math if you &lt;a href=&quot;http://en.wikipedia.org/wiki/PID_controller#Manual_tuning&quot; rel=&quot;nofollow&quot;&gt;manually tune&lt;/a&gt; using an integrator.&lt;/p&gt;&#xA;" OwnerUserId="142" LastActivityDate="2014-04-22T13:59:20.547" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2807" PostTypeId="1" AcceptedAnswerId="2808" CreationDate="2014-04-22T14:21:39.717" Score="5" ViewCount="4031" Body="&lt;p&gt;For a robot, say path planning in particular, what are the pros and cons of choosing classical control theory or optimal control (LQR for example) ?&lt;/p&gt;&#xA;" OwnerUserId="2757" LastEditorDisplayName="user10072" LastEditDate="2019-04-22T09:43:39.807" LastActivityDate="2019-04-22T09:43:39.807" Title="What are the advantages of optimal control as opposed to control theory?" Tags="&lt;control&gt;&lt;motion-planning&gt;" AnswerCount="4" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="2808" PostTypeId="2" ParentId="2807" CreationDate="2014-04-22T17:41:10.923" Score="5" Body="&lt;p&gt;Classical control theory requires Linear Time Invariant systems. Most robots of interest actually have non-linear dynamics. Of course many optimal control techniques also require linear systems. LQR for instance stands for &lt;em&gt;Linear Quadratic Regulator&lt;/em&gt; meaning it takes a quadratic cost function and gives the optimal control for a system with linear dynamics. This is handled in both cases by linearizing the dynamics. In the case of classical control techniques linearizing the dynamics invalidates all the guarantees and the tools for analyzing stability and tuning gains generally don't work. In the case of optimal control methods then generated control will often still be good so long as the approximation error is low. Often it helps to simply try the different methods. Alternatively you may consider non-linear control methods.&lt;/p&gt;&#xA;" OwnerUserId="177" LastActivityDate="2014-04-22T17:41:10.923" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2809" PostTypeId="2" ParentId="2801" CreationDate="2014-04-22T19:08:00.043" Score="2" Body="&lt;p&gt;You have two channels on each stick. Commonly throttle and yaw on the left stick and pitch and roll on the right.&lt;/p&gt;&#xA;" OwnerUserId="3871" LastActivityDate="2014-04-22T19:08:00.043" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2810" PostTypeId="2" ParentId="2774" CreationDate="2014-04-22T20:32:19.623" Score="2" Body="&lt;p&gt;One thing I find helpful for minimal or missing datasheets is to look for Arduino/PIC or other code examples and discussions on the module. The basic datasheet has wiring - but no actual usage help, where as forum discussions and code examples will get you some actual results from it. &lt;a href=&quot;http://forums.parallax.com/showthread.php/136258-Code-for-using-a-TCS3200-with-Arduino-and-a-question&quot; rel=&quot;nofollow&quot;&gt;This one&lt;/a&gt; looks promising.&lt;/p&gt;&#xA;" OwnerUserId="4258" LastEditorUserId="1850" LastEditDate="2014-04-26T10:41:35.587" LastActivityDate="2014-04-26T10:41:35.587" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2811" PostTypeId="2" ParentId="2798" CreationDate="2014-04-23T01:53:01.310" Score="3" Body="&lt;p&gt;I believe the Create was not sold in Europe because it is not RoHS compliant.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, every Roomba can be hacked.  You can communicate with the robot with the &quot;Open Interface&quot; or sometimes called the &quot;Serial Control Interface&quot;.  There is lots of information about this on the web.  See here for example: &lt;a href=&quot;http://www.irobot.com/filelibrary/pdfs/hrd/create/Create%20Open%20Interface_v2.pdf&quot; rel=&quot;nofollow&quot;&gt;http://www.irobot.com/filelibrary/pdfs/hrd/create/Create%20Open%20Interface_v2.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that you will need to either make or buy a cable to connect to the 7 pin mini-DIN port on the robot.  Every Roomba has this.  Sometimes it is under the faceplate though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most libraries you can find online communicate with the Roomba outlined above and do not use the &quot;Command Module&quot; that was unique to the Create.  &lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-04-23T01:53:01.310" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2812" PostTypeId="1" AcceptedAnswerId="2821" CreationDate="2014-04-23T09:28:32.033" Score="6" ViewCount="585" Body="&lt;p&gt;I asked a similar kind of question some time ago (&lt;a href=&quot;https://robotics.stackexchange.com/questions/2526/neuromorphic-engineering-and-robotics&quot;&gt;Neuromorphic Engineering and Robotics&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since then, many things have come to the point of revelation. A &lt;a href=&quot;http://journal.frontiersin.org/Journal/10.3389/fnins.2013.00118/full&quot; rel=&quot;nofollow noreferrer&quot;&gt;road-map for neuromorphic computing&lt;/a&gt; was revealed recently; It proposes the analog way of computation, to solve advanced computer vision problems. IBM and Qualcomm are also working on the similar project though on the digital side. Memristor technology is slated to come very soon.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The question I am asking here is &lt;strong&gt;How is the Robotics community working to adopt the technology?&lt;/strong&gt; This question opens the domain for other pressing questions which have been answered cryptically since the 1980s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are neuromorphic computers good for &lt;em&gt;mission critical precise robots&lt;/em&gt;, like that on Mars? Can we use neuromorphic systems on &lt;em&gt;Avionics systems&lt;/em&gt;? How is neuromorphic processing going to help us solve the problems on NLP, and knowledge processing? &lt;em&gt;Aren't quantum computers very similar to neuromorphic computers in ideology?&lt;/em&gt; If neuromorphic robots gain traction, will digital hardware still be required?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It would be really nice if someone could explain all points, because answers in various but sparsely related research papers are very cryptic.&lt;/p&gt;&#xA;" OwnerUserId="2196" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2018-09-20T03:31:18.107" Title="Role of Neuromorphic Computing and Quantum Computing in the field of Robotics and AI" Tags="&lt;microcontroller&gt;&lt;computer-vision&gt;&lt;machine-learning&gt;&lt;research&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2813" PostTypeId="2" ParentId="2801" CreationDate="2014-04-23T14:05:53.667" Score="2" Body="&lt;p&gt;In this case, you can think of a &quot;channel&quot; as a &quot;linear control&quot; -- a single-dimensional value.  For example, throttle can go from 0%-100% (or -100% to 100% if you're doing some really crazy things); roll, pitch, and yaw are expressed as a range of degrees.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The RC transmitter you refer to has 2 joysticks, each with 2 dimensions, for a total of 4 channels that can be controlled -- this covers all the channels you mentioned.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, since a quadcopter can move freely in any cardinal direction, you need only transmit 3 channels: throttle, roll, and pitch.  This prevents you from controlling what direction the quadcopter is facing at any one time, but does not limit its mobility.  &lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-04-23T14:05:53.667" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2814" PostTypeId="2" ParentId="2800" CreationDate="2014-04-23T14:13:26.307" Score="2" Body="&lt;p&gt;It sounds like the problem stems from your motors.  The motors are fine, but they have a threshold that prevents you from setting their speed to exactly the value you want.  This is a problem because you are attempting to map your PID directly to their output, which has a minimum value.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You need to alter your motor control code so that if the desired thrust is below the motor's threshold, you pulse the motor so that its average over time is the thrust you need.  There are several ways of accomplishing this, depending on how your control loop works.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-04-23T14:13:26.307" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2815" PostTypeId="2" ParentId="2802" CreationDate="2014-04-23T14:18:48.720" Score="0" Body="&lt;p&gt;You're posting somewhat of a contradiction.  If you want a radio signal with enough bandwidth to transmit video, then you'll have to use &lt;a href=&quot;http://en.wikipedia.org/wiki/Very_high_frequency#Line-of-sight_calculation&quot; rel=&quot;nofollow&quot;&gt;line-of-sight communications&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To do what you're asking, you'd need more of a network solution, or a very high vantage point (i.e. somewhere in the atmosphere) for your control antenna.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-04-23T14:18:48.720" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2816" PostTypeId="2" ParentId="2700" CreationDate="2014-04-23T14:21:47.133" Score="1" Body="&lt;p&gt;I found the name of the component: &lt;a href=&quot;http://en.wikipedia.org/wiki/Power_management_IC&quot; rel=&quot;nofollow&quot;&gt;PMIC, or Power Management IC&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To quote from &lt;a href=&quot;http://www.linear.com/products/pmic_%28dc-dc,_powerpath_and_battery_charger%29&quot; rel=&quot;nofollow&quot;&gt;this example&lt;/a&gt;: &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;PMICs seamlessly manage power flow from various power sources (wall adapters, USB and batteries) to power loads (device systems and the charging battery), while maintaining current limits where required (such as that specified for USB). To this end, PMICs typically feature built-in PowerPath control, DC/DC conversion and battery charging functions.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-04-23T14:21:47.133" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2817" PostTypeId="2" ParentId="2800" CreationDate="2014-04-23T22:09:49.627" Score="4" Body="&lt;p&gt;Since posting the question I tried to tune the 3 PID parameters a lot but I never reached any acceptable result. I didn't try to modify the error curve as I suggested in the question, but I found an alternative solution which works reasonably well. There might be other good solutions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was using a PID as follows:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;process setpoint: angle&lt;/li&gt;&#xA;&lt;li&gt;process output: difference between motors speed (used in motor mix equation)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;While in theory this might very well work, I could not find good values for Kp, Ki, and Kd to obtain satisfying results. I changed my program to use 2 cascaded PIDs as follows:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Outer PID:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;process setpoint: angle&lt;/li&gt;&#xA;&lt;li&gt;process output: angular rate&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Inner PID:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;process setpoint: angular rate&lt;/li&gt;&#xA;&lt;li&gt;process output: difference between motors speed (used in motor mix equation)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I first tuned the inner PID so as to get no oscillation but a slight resistance against angular change when the target angular rate is zero. I then tuned the outer PID so as to get no oscillation but a reasonably responsive attitude matching the stick inputs. Even with a very basic tuning the results are acceptable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks again to all the participants, your input encouraged me to learn more about PIDs and avoided me some errors.&lt;/p&gt;&#xA;" OwnerUserId="4249" LastEditorUserId="4249" LastEditDate="2015-03-10T20:57:26.267" LastActivityDate="2015-03-10T20:57:26.267" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2818" PostTypeId="2" ParentId="1348" CreationDate="2014-04-24T06:37:04.647" Score="0" Body="&lt;p&gt;In the general you can't extract &lt;em&gt;metric distance&lt;/em&gt; measurements from a single image, unless  you have extra information about the world. For example, if you know the world is planar (or you can detect the floor, which is a planar region), then you can estimate a homography.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A homography is a projective transformation between planes (3x3 matrix). Given the camera intrinsic calibration, you can decompose this plane-induced homography into a rotation and translation. The translation is up to scale. You can resolve this scale ambiguity by knowing the distance from the camera to the floor (plane).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you have the homography, you can detect objects that are &lt;em&gt;not&lt;/em&gt; on the plane. The homography allows you warp the first image onto the second. Objects on the plane will align and will have a small error. Objects not on the plane will &lt;em&gt;not&lt;/em&gt; align. This is called parallax.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One way to implement this could be &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Extract features from both images.&lt;/li&gt;&#xA;&lt;li&gt;Match the features, or track them.&lt;/li&gt;&#xA;&lt;li&gt;Estimate the homography using RANSAC.&lt;/li&gt;&#xA;&lt;li&gt;Decompose the homography into a rotation and translation using the calibration.&lt;/li&gt;&#xA;&lt;li&gt;Warp the first image onto the&lt;br&gt;&#xA;second. Pixels with large errors are not on the floor and could be&lt;br&gt;&#xA;obstacles.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Most of the building blocks are implemented in opencv (see &lt;a href=&quot;http://docs.opencv.org/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html&quot; rel=&quot;nofollow&quot;&gt;http://docs.opencv.org/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Good luck.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S. the homography decomposition will also give you the normal of the plane. But, since you are assuming this is the ground plane, we have the normal pointing in the up direction. A more precise solution can be accomplished in your calibration procedure. You can use a checkerboard target and estimate its pose. The pose will have a plane normal and distance to the camera.&lt;/p&gt;&#xA;" OwnerUserId="911" LastActivityDate="2014-04-24T06:37:04.647" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2819" PostTypeId="2" ParentId="2801" CreationDate="2014-04-24T13:49:16.087" Score="6" Body="&lt;p&gt;&lt;strong&gt;Ironic answer:&lt;/strong&gt; you do not need any channel, but your quadcopter will just hover stationary :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Practical answer:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The throttle controls translation on the vertical axis. This allows you to gain or loose altitude. Depending on how the quadcopter is programmed you may control the vertical acceleration or the vertical speed (aka autolevel mode).&lt;/li&gt;&#xA;&lt;li&gt;The rudder controls the rotation around the vertical axis. This allows you to face North, East, South, and West.&lt;/li&gt;&#xA;&lt;li&gt;The ailerons and elevator (2 channels) control the roll and pitch. This allows you to get the quadcopter at an angle compared to the horizontal plane, and move forward, backward, left, or right. Depending on how the quadcopter is programmed you may control the angular rate (aka manual mode) or the angle (aka attitude mode).&lt;/li&gt;&#xA;&lt;li&gt;In addition you may have any number of spare channels to control the flight mode, trigger a camera, control a gimbal, retract the landing gear, etc.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;As commented in the ironic answer none of this is required, but more channels will make your quadcopter experience more fun. You don't say what your goal is, but if you want to build a quadcopter for fun I would recommend at least 6 channels, and advise &lt;strong&gt;against&lt;/strong&gt; using a 4-channels transmitter. For instance the mainstream DJI Naza controller requires 6 channels to use all the features.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Extra information: Each joystick counts for 2 channels, because they can move on 2 different axes. The number of channels does not mean anything on a hardware/packet level on modern controllers (2.4GHz), as all the channels are multiplexed into digital packets and demultiplexed at the receiver. Multiplexing 4 channels into 2 on the transmitter and demultiplexing them on the receiver is &lt;strong&gt;possible&lt;/strong&gt; but it would require a significant amount of DIY and is &lt;strong&gt;not practical or sensible&lt;/strong&gt; for any actual application.&lt;/p&gt;&#xA;" OwnerUserId="4249" LastEditorUserId="4249" LastEditDate="2014-04-24T14:00:58.983" LastActivityDate="2014-04-24T14:00:58.983" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2820" PostTypeId="2" ParentId="2772" CreationDate="2014-04-24T14:26:20.183" Score="2" Body="&lt;p&gt;For each motor the output should be:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A value at which the power from the 4 motors roughly keeps the quadcopter airborne, for instance 1500ms.&lt;/li&gt;&#xA;&lt;li&gt;Plus or minus the influence of the throttle. For instance with your throttle is in the 0:1 range you could apply 600 * (throttle - 0.5), which will put the motors output in the 1200:1800ms range.&lt;/li&gt;&#xA;&lt;li&gt;Plus or minus the PIDs output. For instance with your PIDs in the 0:1 range you could add 200 * (PID - 0.5). The individual PID contribution would be in the -100:100 range. For a +4 configuration there are 2 PIDs to add for each motor, so the output would be in the 1000:2000ms range.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Here is my unmodified code for this. My throttle is in the -100:100 range, and my PIDs are already in the appropriate range. I'm sure you can translate to your own specifications easily.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;uint16_t motor[4];&#xA;float base = MOTOR_IDLE + (THROTTLE_K * throttle);&#xA;motor[MOTOR_FRONT] = base + pitchRatePID.getControl() - yawRatePID.getControl();&#xA;motor[MOTOR_LEFT] = base + rollRatePID.getControl() + yawRatePID.getControl();&#xA;motor[MOTOR_BACK] = base - pitchRatePID.getControl() - yawRatePID.getControl();&#xA;motor[MOTOR_RIGHT] = base - rollRatePID.getControl() + yawRatePID.getControl();&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The THROTTLE_K constant would be what to modify if I experienced your problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you realise the possible motors output exceeds the ESC range, which is evil. Bounding the output is not an elegant way to do it as it will trip up your PIDs computations. A better way which maintains the speed ratios between the motors is the add or remove a constant to all the motors to get all the outputs back within the bounds. Here is a sample from my own code, I hope it makes sense.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;// Fix motor mix range&#xA;int16_t motorFix = 0;&#xA;uint16_t motorMin = motor[0], motorMax = motor[0];&#xA;for(int i=1 ; i&amp;lt;4 ; i++)&#xA;{&#xA;  if(motor[i] &amp;lt; motorMin) motorMin = motor[i];&#xA;  if(motor[i] &amp;gt; motorMax) motorMax = motor[i];&#xA;}&#xA;if(motorMin &amp;lt; MOTOR_MIN) motorFix = MOTOR_MIN - motorMin;&#xA;else if(motorMax &amp;gt; MOTOR_MAX) motorFix = MOTOR_MAX - motorMax;&#xA;&#xA;// Refresh motors&#xA;for(int i=0 ; i&amp;lt;4 ; i++) Servo::setChannel(i, motor[i] + motorFix);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I hope this helps, please let me know if you need further clarifications!&lt;/p&gt;&#xA;" OwnerUserId="4249" LastActivityDate="2014-04-24T14:26:20.183" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2821" PostTypeId="2" ParentId="2812" CreationDate="2014-04-24T23:06:18.293" Score="3" Body="&lt;p&gt;You've asked more than one question, so I'll try to answer them in order.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;The Robotics community has not yet hit the limits of current hardware, so very little work is being done on the exotic cutting edge like neuromorphic hardware. The exception to this is software neural nets, which have come in and out of fashion for decades, and the  Nv artificial neurons used successfully in BEAM robotics.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;No. Neuromorphic systems are not ideal for precision. Most probes are remote-controlled, not Artificially Intelligent. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;To some extent. A bird's brain could not be built in neuromorphic form, and then used to fly a fighter jet, as the control actuators and senses are completely different. If the algorithms for good flight are properly understood, they could be implemented on digital hardware more easily than trying to wire up a neuromorphic chip. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Its not. The hope was that if we could throw enough neurons at the problem , and put them in a learning circuit, then we would not have to understand NLP and similar problems, because the machine would magically solve them for us. But while that might work for a demo - look up Perceptrons, for instance - it does not get us any closer to the algorithms we need.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Not at all. Neuromorphic mimics the neural structures in living creatures. Quantum computers specialize in simultaneously parallel computing.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Most likely. Digital systems work very well for measurement and calculation. Consider how microcontrollers are often easier to understand, debug and use than operational amplifiers, for many control systems.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I am afraid that this is largely an opinion-based answer, as the questions were very general, and contained enough scope for an entire course.&lt;/p&gt;&#xA;" OwnerUserId="2402" LastActivityDate="2014-04-24T23:06:18.293" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2822" PostTypeId="1" CreationDate="2014-04-25T11:02:38.670" Score="1" ViewCount="99" Body="&lt;p&gt;I want to develop a toy project that will allow me to move object around the house. Because I am interested in the programming of the robot and not actually build it, I would like to use some sort of programmable &quot;starter kits&quot; (like lego mindstorm) to get started. While I do not have everything figured out yet, here is a list of specs that I expect my ideal kit should have: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The ability to lift object (Object as big as 4'' or 10 centimeters)&lt;/li&gt;&#xA;&lt;li&gt;The ability to distinguish objects by their colors. It should have some stort of color sensors.&lt;/li&gt;&#xA;&lt;li&gt;Obviously it should be able to move on a smooth surface.&lt;/li&gt;&#xA;&lt;li&gt;Obstacle detection. Should have sensors for obstacle detection&lt;/li&gt;&#xA;&lt;li&gt;Extra: Maybe remotely controllable.&#xA;Can someone please suggests the cheapest kit I should use for this? &#xA;Thanks&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="4271" LastActivityDate="2014-04-28T12:51:32.570" Title="Robot kit suggestions" Tags="&lt;mobile-robot&gt;&lt;kit&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="1" ClosedDate="2014-04-30T16:37:16.547" ContentLicense="CC BY-SA 3.0" />
  <row Id="2824" PostTypeId="2" ParentId="2173" CreationDate="2014-04-25T14:35:08.693" Score="2" Body="&lt;p&gt;You can  install the a package for kinect:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sudo apt-get install ros-hydro-openni-launch&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then to make the package publish kinect's topics:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;roslaunch openni_launch openni.launch  &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;To visualize the depth image run:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;rosrun image_view image_view image:=/camera/depth/image&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;To visualize for example the Point Cloud in rviz you can add a PointCloud2 Display ad choose the appropriate topic. &lt;/p&gt;&#xA;" OwnerUserId="1850" LastActivityDate="2014-04-25T14:35:08.693" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2826" PostTypeId="1" AcceptedAnswerId="2845" CreationDate="2014-04-25T15:42:28.123" Score="5" ViewCount="7243" Body="&lt;p&gt;I am learning about Kalman filters, and implementing the examples from the paper &lt;a href=&quot;https://www.cs.cornell.edu/Courses/cs4758/2012sp/materials/MI63slides.pdf&quot; rel=&quot;noreferrer&quot;&gt;Kalman Filter Applications - Cornell University&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have implemented example 2, which models a simple water tank, filling at a constant rate. We only measure the tank level, and the Kalman filter is supposed to infer the fill rate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/w9SEw.png&quot; alt=&quot;Kalman Filter Example, filling a water tank.&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to the model, the fill rate is a constant, so I assumed that over time, the Kalman filter would converge more and more accurately (and with less and less noise) on the correct fill rate. However, the amount of noise in the fill rate never seems to reduce after the first few iterations:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/zNd1Q.png&quot; alt=&quot;Kalman Filter example, Filling a water tank at a constant rate.&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This graph shows how the fill rate part of the state vector changes over the course of 1000 iterations of the simulation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Adjusting the Measurement Variance Matrix seems to have very little effect on the fill rate noise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, the Kalman gain vector and State Variance matrix seem to be constant throughout the simulation. I assumed that the State Variance would reduce as the filter became more and more confident in its state estimate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Questions:&#xA;- Is this graph what I should expect to see?&#xA;- Should the Kalman Gain vector and State Variance matrix change over time in this situation?&lt;/p&gt;&#xA;" OwnerUserId="40" LastEditorUserId="40" LastEditDate="2014-04-25T15:56:59.050" LastActivityDate="2015-10-17T14:12:06.190" Title="How much should I expect a Kalman filter to converge?" Tags="&lt;kalman-filter&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2828" PostTypeId="1" CreationDate="2014-04-26T03:26:40.993" Score="1" ViewCount="437" Body="&lt;p&gt;I am using the &lt;a href=&quot;https://code.google.com/p/clickbutton/wiki/Usage&quot; rel=&quot;nofollow&quot;&gt;clickbutton&lt;/a&gt; library from Arduous and am having some problems implementing it. As it stand now the code just runs the servo clockwise and I'm not sure what I did wrong. Basically I want the servo if pressed for a short period of time to move according to an exponential function, and if pressed according to a long period of time to move at a regular pace.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;Servo.h&amp;gt;&#xA;#include &quot;ClickButton.h&quot;&#xA;&#xA;Servo myservo; // create servo object to control a servo&#xA;&#xA;// CONSTANTS&#xA;&#xA;// PINS&#xA;const int crServo = 12; // sets pin 12 as servo&#xA;const int buttonPinCW = 2; // sets pin 2 as button; CW =&amp;gt; clockwise =&amp;gt; FOCUS FAR&#xA;const int buttonPinCC = 3; // sets pin 3 as button; CC =&amp;gt; counterclockwise =&amp;gt; FOCUS NEAR&#xA;const int ledPinB = 4; // sets pin 10 as LED&#xA;const int ledPinG = 5; // sets pin 10 as LED&#xA;const int ledPinR = 6; // sets pin 10 as LED&#xA;&#xA;const int t = 1;  // slow down&#xA;&#xA;// SERVO PROPERTIES&#xA;const int crSpeedDefault = 100; // is the stay still position, motor should not turn&#xA;const int crSpeedCW = 107; // turns the motor full speed clockwise&#xA;const int crSpeedCC = 87; // turns the motor full speed counter-clockwise&#xA;&#xA;// SET BUTTON STATES&#xA;ClickButton buttonCW(buttonPinCW, LOW);&#xA;ClickButton buttonCC(buttonPinCC, LOW);&#xA;&#xA;void setup()&#xA;{&#xA;  myservo.attach(crServo); // attaches the servo on pin 12 to the servo object&#xA;  //pinMode (buttonPinCW, INPUT); // sets button as input&#xA;  //pinMode (buttonPinCC, INPUT); // sets button as input&#xA;  pinMode (ledPinB, OUTPUT); // sets led as output&#xA;  pinMode (ledPinG, OUTPUT); // sets led as output&#xA;  pinMode (ledPinR, OUTPUT); // sets led as output&#xA;  myservo.write(crSpeedDefault); // default servo to crSpeedDefault&#xA;  startup();&#xA;}&#xA;&#xA;int startup() {&#xA;  //blinker(2, ledPinB);&#xA;  //blinker(1, ledPinG);&#xA;  //blinker(1, ledPinR);&#xA;}&#xA;&#xA;void blinker(int count, int pin) {&#xA;  for (int x = 0; x &amp;lt; count; x++)&#xA;  {&#xA;    digitalWrite(pin, HIGH);&#xA;    delay(1000);&#xA;    digitalWrite(pin, LOW);&#xA;    delay(1000);&#xA;  }&#xA;}&#xA;&#xA;void loop()&#xA;{&#xA;  buttonCW.Update();&#xA;  buttonCC.Update();&#xA;  int buttonCWClicks = 0;&#xA;  int buttonCCClicks = 0;&#xA;  if (buttonCW.clicks != 0) buttonCWClicks = buttonCW.clicks;&#xA;  if (buttonCC.clicks != 0) buttonCCClicks = buttonCC.clicks;&#xA;  //buttonStateCW = digitalRead(buttonPinCW);&#xA;  //buttonStateCC = digitalRead(buttonPinCC);&#xA;  // clockwise rotation&#xA;  if (buttonCW.depressed == true) {&#xA;    if (buttonCWClicks == 1) {&#xA;      digitalWrite(ledPinR, HIGH);&#xA;      float speed = crSpeedCW;&#xA;      Serial.print(&quot;CLOCKWISE-ROTATION \n&quot;);&#xA;      for (int i = 0; i &amp;lt; t * 5; i++) {&#xA;        speed += ((float)crSpeedDefault - speed)/ 10;&#xA;        Serial.print(speed);&#xA;        Serial.print(&quot;\n&quot;);&#xA;        myservo.write((int)speed);&#xA;        delay(100);&#xA;      }&#xA;      myservo.write(crSpeedCW);&#xA;    } &#xA;    else if (buttonCWClicks == -1) {&#xA;      digitalWrite(ledPinR, HIGH);&#xA;      myservo.write(crSpeedCW);&#xA;    }&#xA;  } &#xA;  else if (buttonCC.depressed == true) {&#xA;    if (buttonCCClicks == 1) {&#xA;      digitalWrite(ledPinG, HIGH);&#xA;      float speed = crSpeedCC;&#xA;      Serial.print(&quot;COUNTER-CLOCKWISE-ROTATION \n&quot;);&#xA;      for (int i = 0; i &amp;lt; t * 5; i++) {&#xA;        speed += ((float)crSpeedDefault - speed) / 10;&#xA;        Serial.print(speed);&#xA;        Serial.print(&quot;\n&quot;);&#xA;        myservo.write((int)speed);&#xA;        delay(100);&#xA;      }&#xA;      myservo.write(crSpeedCC);&#xA;    } &#xA;    else if (buttonCCClicks == -1) {&#xA;      digitalWrite(ledPinR, HIGH);&#xA;      myservo.write(crSpeedCW);&#xA;    }&#xA;  } &#xA;  else {&#xA;    myservo.write(crSpeedDefault);&#xA;    digitalWrite(ledPinR, LOW); &#xA;    digitalWrite(ledPinG, LOW);     // turn the LED off by making the voltage LOW&#xA;  }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="4276" LastActivityDate="2014-04-26T03:26:40.993" Title="Click button short vs long button presses Arduino" Tags="&lt;arduino&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2829" PostTypeId="1" AcceptedAnswerId="2840" CreationDate="2014-04-26T04:39:43.460" Score="2" ViewCount="646" Body="&lt;p&gt;So I am building a differential drive robot and I want it to autonomously drive in a straight line on an uneven surface. I know I need a position and velocity PID. As of now, I am deciding on which sensors to buy. Should I use optical encoders, accelerometers, or something else?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wanted to go with accelerometers due to the error encoders would face due to slippage, but I am not sure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some enlightenment would help!&lt;/p&gt;&#xA;" OwnerUserId="4278" LastEditorUserId="4278" LastEditDate="2014-04-26T04:58:50.267" LastActivityDate="2016-07-16T06:50:12.023" Title="Differential Drive Robot on uneven surfaces" Tags="&lt;sensors&gt;&lt;control&gt;&lt;pid&gt;&lt;differential-drive&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2831" PostTypeId="2" ParentId="2704" CreationDate="2014-04-26T10:39:10.880" Score="4" Body="&lt;p&gt;As you said, as AlphaP increases, the amount of upward thrust decreases, and when AlphaP = Forget about speed. This idea that each propeller is capable of 100mph isn't that helpful. The problem is that the thrust produced by the propellers will be a function of speed. The faster they are traveling through the air, the less thrust they'll produce. Think instead about thrust. How much thrust are the propellers capable of?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;90º, there's no upward thrust at all.&#xA;Your tilt angle, AplhaP will be limited by the upward thrust needed to keep the quadcopter aloft. the amount of upward thrust produced is proportional to cos(AlphaP).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If all 4 propellers together produce 20N, and your Quadcopter weighs 10N, then to stay aloft: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;cos(AlphaP)*20N &gt;= 10N&lt;/li&gt;&#xA;&lt;li&gt;cos(AlphaP) &gt;= 0.5&lt;/li&gt;&#xA;&lt;li&gt;Alpha &amp;lt;= invcos(0.5)&lt;/li&gt;&#xA;&lt;li&gt;Alpha &amp;lt;= 60º&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Now the forward thrust produced will be sin(60º)*20N = 0.866*20N = 17.3N. What speed does this relate to? You can't neglect drag here. The quadcopter will accelerate until the drag equals 17.3N.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But of course, it's not that simple. What's confounding this is that the thrust produced at speed will be less than that produced when stationary. A very rough first approximation is to think of the power output of the propellers.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;power = force * speed&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Double the speed means half the thrust. But it's not that simple either. Generally, when you do these simple calculations, I would divide the results by 4 to get a more realistic estimate of the maximum speed.&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2014-04-26T10:39:10.880" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2832" PostTypeId="1" CreationDate="2014-04-26T14:01:26.060" Score="1" ViewCount="1419" Body="&lt;p&gt;I'm facing a problem while building my quadruped robot which is figuring out the efficient power supply needed for the 12 servos. I'm using 12 MG995 tower pro servos powered by 2 lithium batteries 2x3.7v (about 8 volts) with 2200 mA . I really don't know if that enough for the servos or something else is needed to be added(i hardly fitted the 2 batteries into the robot's body) &#xA;any suggestions please?&lt;/p&gt;&#xA;" OwnerUserId="2525" LastEditorUserId="110" LastEditDate="2016-01-03T13:53:20.937" LastActivityDate="2016-01-03T13:53:20.937" Title="Servos power supply in Quadruped Robot" Tags="&lt;power&gt;&lt;battery&gt;&lt;servomotor&gt;&lt;walking-robot&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2833" PostTypeId="2" ParentId="2826" CreationDate="2014-04-26T16:20:59.087" Score="1" Body="&lt;p&gt;Your graph is actually indicative of what I would expect to see, but there might be some problems. For now, let us assume that you've implemented it perfectly.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;the fill rate is a constant, so I assumed that over time, the Kalman filter would converge more and more accurately&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Does your Kalman filter know that the fill rate is constant? It's actually pretty easy to estimate fill rate given lots of data, but one that can estimate it as fast as possible is very powerful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It looks like your graph starts at zero and then rings three times and converges very fast. At this point, it just responding to injected noise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the trick is to balance favoring your current estimate vs incoming data using the Kalman gain. The noisier the data, the more you'll have to favor your estimate. However, favoring it more means you won't converge that fast (because you're essentially telling the filter that the fill rate doesn't change that fast.) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Two items to test:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1.) The filter is receiving a measurement z with added noise. Take that signal and plot it's derivative on top of the estimated value. Look at how much noise is in the signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2.) Halfway through your simulation, increase the fill rate by 2x and see how the filter responses. Then play with the values in K (move them away from their calculated optimal values) and see what the behavior is.  &lt;/p&gt;&#xA;" OwnerUserId="3935" LastActivityDate="2014-04-26T16:20:59.087" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2834" PostTypeId="1" CreationDate="2014-04-26T17:43:10.680" Score="3" ViewCount="355" Body="&lt;p&gt;Recently I began to build a car-like robot and I stumbled upon dead reckoning. I use one motor for steering and one for traction. I want to be able to get the position of the robot. From what I have read 2 encoders should be used. But I am curious if you can use only one encoder on the motor shaft to get distance  and a gyro + accelerometer to get the orientation of the robot.&lt;/p&gt;&#xA;" OwnerDisplayName="user4281" LastEditorUserId="350" LastEditDate="2014-05-02T16:16:26.683" LastActivityDate="2014-05-02T16:16:26.683" Title="Dead reckoning on a car-like robot with a gyro and only one encoder" Tags="&lt;mobile-robot&gt;&lt;motor&gt;&lt;gyroscope&gt;&lt;encoding&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2835" PostTypeId="2" ParentId="2768" CreationDate="2014-04-26T18:48:53.463" Score="0" Body="&lt;p&gt;After thinking about this problem a little more I had an important insight: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;For the robots differential drive PID controller to be operational at different speeds, the turning angle &lt;em&gt;R&lt;/em&gt; used for steering must be consistent over the whole speed range.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This post inspired my thinking and explains the turning angle of a differential drive robot:&#xA;&lt;a href=&quot;https://robotics.stackexchange.com/questions/1653/calculate-position-of-differential-drive-robot&quot;&gt;Calculate position of differential drive robot&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks to Guy Sirton and Ian for discussing my PID controller and providing useful debugging tips.&lt;/p&gt;&#xA;" OwnerUserId="3848" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2014-04-26T18:48:53.463" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2836" PostTypeId="2" ParentId="2832" CreationDate="2014-04-26T23:26:42.603" Score="1" Body="&lt;p&gt;That should be enough power, although I would regulate the 8 volts to 6. You could get slightly better life out of the batteries on a single go if you pull some power out using a Polulu adjustable boost regulator. This will regulate the current to 6v and give you the ability to drop below 6v on the batteries and still have the 6v output to the servos (although  sometimes this can be bad for the batteries)&lt;/p&gt;&#xA;" OwnerUserId="4276" LastActivityDate="2014-04-26T23:26:42.603" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2837" PostTypeId="1" CreationDate="2014-04-27T11:58:24.943" Score="5" ViewCount="244" Body="&lt;p&gt;Every time I see a PID control for a motor, it involves an Encoder, so the algorithm knows the real position of the motor or wheel.&#xA;But with &lt;a href=&quot;http://www.ebay.es/itm/331143350493?ssPageName=STRK%3aMEWNX%3aIT&amp;amp;_trksid=p3984.m1497.l2649&quot; rel=&quot;nofollow&quot;&gt;the robot I have&lt;/a&gt;, I cannot use an encoder. I only have ONE optocoupler per wheel which can count how many degrees the wheel has moved. I can use it to increment a counter, but the counter ALWAYS increment (if the wheel moves forward or if the wheel moves backward).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first moment I saw it as an inconvenient was when I studied the &lt;a href=&quot;http://brettbeauregard.com/blog/2012/01/arduino-pid-autotune-library/&quot; rel=&quot;nofollow&quot;&gt;Arduino PID Autotune Library&lt;/a&gt;. In the first figure, I would not see decrements on the INPUT. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My objective is to move a little two-wheels robot small segments driven by simple trajectories separated over time by a complete stop (straight 10 cm, stop, move right 90 degrees, stop, straight until detect obstacle...)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could you suggest me some kind of ideas?&#xA;The first idea I have is to transform the PID position control to a speed control (which is more convenient for the feedback loop I have) and keep a counter of the traveled distance to inform the speed control when to stop.&lt;/p&gt;&#xA;" OwnerUserId="4285" LastEditorUserId="350" LastEditDate="2014-04-28T14:15:21.767" LastActivityDate="2015-01-03T13:29:54.053" Title="What kind of motor control can I implement if I cannot use an Encoder?" Tags="&lt;arduino&gt;&lt;motor&gt;&lt;control&gt;&lt;pid&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2838" PostTypeId="2" ParentId="2837" CreationDate="2014-04-27T13:49:23.360" Score="2" Body="&lt;p&gt;I'm no guru (building a robot, learning as I go :) ), but I was facing similar problem (not with arduino, though).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the one encoder only part: I'm counting ticks using a single reflective sensor. I assumed that motor + gearing are strong enough that they will never turn when I'm not sending commands. Then I keep track of the direction of rotation and when there is a request to change it, I force several milliseconds wait with the motor stopped to ensure that it's not turning in a wrong direction.&#xA;This adds some complications and state keeping to the code, but seems to work OK.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the PID: I'm putting in speed difference (encoder ticks / timer interval) and using the output for PWM (actually I'm feeding it to a RC car ESC). This works really nice, it's fairly stable even when the motor has almost no torque during start up. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If some code will help you, here is my implementation for AVR:&#xA;&lt;a href=&quot;https://github.com/bluecube/robomower2/blob/master/src_avr/drive/main.c&quot; rel=&quot;nofollow&quot;&gt;https://github.com/bluecube/robomower2/blob/master/src_avr/drive/main.c&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="482" LastEditorUserId="482" LastEditDate="2015-01-03T13:29:54.053" LastActivityDate="2015-01-03T13:29:54.053" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2839" PostTypeId="2" ParentId="2822" CreationDate="2014-04-27T15:29:36.887" Score="0" Body="&lt;p&gt;There are a couple ways you could do this.  I'm gonna put down my recommendations in order of what I'd most recommend to least.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Mindstorms NXT flashed with Lejos for java.  You can follow simple instructions to build anything with these kits and then program them in java.  They have Bluetooth built in for simple remote control and no wiring necesary for tons of sensors. Plus, an NXT kit will cost you only $200 on ebay for near infinite possibilities.  &lt;/li&gt;&#xA;&lt;li&gt;Work with a simple material to build a very basic robot chassis.  My reccomendation would just be to buy a sheet of precut lexan and drill 8 holes for cheap motor mounts.  Boom, robot chassis.  Add an arduino with bluetooth shield, couple of motors and controllers and you're ready to go.  You would have infinite expansion opportunities, for example you could add any type of linear actuator you liked with minimal fuss.  Trust me, even if you think you're a software guy it's important to know a little about hardware.  Add a claw such as &lt;a href=&quot;https://www.sparkfun.com/products/11524&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt;, and you have a high powered solution for 1/2 the cost of a kit.&lt;/li&gt;&#xA;&lt;li&gt;If you really do need a kit, I'd recommend going with the Rover 5 from &lt;a href=&quot;https://www.sparkfun.com/products/10336&quot; rel=&quot;nofollow&quot;&gt;&#xA;Sparkfun&lt;/a&gt;.  Add an arduino with bluetooth, a couple of sensors and a linear actuator and you're good to go.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;All in all, there are many ways to get into robotics from a software perspective.  You may also be interested in software such as RobotC Virtual Worlds, which is essentially a robot simulator you program in C.  If you are feeling adventurous go with #2.   A kit such as the rover 5 would take you 10 minutes to build from scratch with just a drill and be so much more rewarding.  And if you need any help, you know where to ask. &lt;/p&gt;&#xA;" OwnerUserId="4238" LastActivityDate="2014-04-27T15:29:36.887" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2840" PostTypeId="2" ParentId="2829" CreationDate="2014-04-27T15:39:04.713" Score="0" Body="&lt;p&gt;Get a good IMU you can communicate with over i2c.  Make sure it has an accelerometer and a gyroscope.  Use these two sensors to calculate your heading, and then correct accordingly to make sure you are heading straight.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's an example of a nice IMU: &lt;a href=&quot;https://www.sparkfun.com/products/10121&quot; rel=&quot;nofollow&quot;&gt;https://www.sparkfun.com/products/10121&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sparkfun has created an arduino library for that particular sensor that will make calculating heading easy peasy.  Good luck!&lt;/p&gt;&#xA;" OwnerUserId="4238" LastActivityDate="2014-04-27T15:39:04.713" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2841" PostTypeId="1" AcceptedAnswerId="2843" CreationDate="2014-04-28T12:00:36.333" Score="3" ViewCount="502" Body="&lt;p&gt;First a bit of background, I am planning to make a highly maneuverable airship controlled by four thrust vectored propellers. I don't want to rely on a rudder and forward momentum for turns but instead be able to maneuver with direct prop thrust. I want to be able to point each prop anywhere within a half sphere/dome. So two axis, 360 degrees traversal for the forward/back/up/down and 180 degrees for the left/right. The nearest thing I can think of is a ball turret similar to &lt;a href=&quot;http://en.wikipedia.org/wiki/Ball_turret&quot; rel=&quot;nofollow&quot;&gt;this ball turret&lt;/a&gt; but instead of a gun, have a motor and propeller. The turret can rotate infinitely through 360 degrees, but the gun rotates through 90 degrees.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My first thought was for a servo for both axis, but they are limited in range and I would like the 360 axis to be able to rotate continuously. This would allow for the turret to rotate to the desired angle using the shortest path. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is, What do I need to be able to rotate the turret and still know what angles the turret is currently pointing?&lt;/p&gt;&#xA;" OwnerUserId="1767" LastEditorUserId="37" LastEditDate="2018-08-15T15:28:09.267" LastActivityDate="2018-08-15T15:28:09.267" Title="What approaches should I consider to create rotating a turret" Tags="&lt;sensors&gt;&lt;rcservo&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2842" PostTypeId="2" ParentId="2822" CreationDate="2014-04-28T12:51:32.570" Score="0" Body="&lt;p&gt;I found this treasure chest at the &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__702__689__Robotics_DIY-Robotics_Kits.html&quot; rel=&quot;nofollow&quot;&gt;Hobbyking&lt;/a&gt; website today.&#xA;They feature Arduino based robot kits from 43 up to 150 USD.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A simple Arduino board is great for small robots, due to a low power consumption and thus smaller batteries and larger autonomy compared to other options.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, having something like a Raspberry Pi with an operating system, access to standard frameworks and libraries (for computer vision etc.) mounted on your robot can be a huge asset, depending on what direction you would like to take with your project.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In either case, the above kits seem like a great start!&lt;/p&gt;&#xA;" OwnerUserId="4290" LastActivityDate="2014-04-28T12:51:32.570" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2843" PostTypeId="2" ParentId="2841" CreationDate="2014-04-28T14:08:55.290" Score="1" Body="&lt;p&gt;Servos should be able to accomplish both the 90 degree and 360 degree (i.e. &quot;continuous rotation&quot;) movements.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Servos operate on the concept of &quot;steps&quot;, so you simply need to figure out how many servo steps represent the range of motion of each servo, then keep track of the current step (which can be used to calculate position) in your code.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively, you could directly measure the position with a separate sensor (like a wheel encoder).  This is traditionally used in cases where the servo could slip, and cause the steps and the position to become out of sync.  This will probably not be an issue in an airship, where the only load on the motor will be the turning of the turret in free space.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-04-28T14:08:55.290" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2844" PostTypeId="2" ParentId="2834" CreationDate="2014-04-28T14:27:18.690" Score="2" Body="&lt;p&gt;Dead reckoning is not a measurement, it's a form of estimation.  It is by definition inaccurate, and accumulates error over time.  We use it when more precise forms of position measurement aren't available (because it's better than nothing) and only to the extent that the accumulated error stays below a desired bound.  In other words: after your error reaches a certain threshold, you're better off &lt;em&gt;not&lt;/em&gt; using the estimate than relying on something that you know is wrong.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To keep the accumulated error as low as possible, you'll want to use as much sensor data as you can.  This is the opposite of what you're attempting to do (eliminating one of the encoders).  So the answer to your question is &quot;yes&quot;, you can use only one encoder... &lt;em&gt;but your estimates will suffer for it&lt;/em&gt;.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-04-28T14:27:18.690" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2845" PostTypeId="2" ParentId="2826" CreationDate="2014-04-28T16:29:46.093" Score="0" Body="&lt;p&gt;The reason the filter stops converging on a solution is because of the Process Variance Matrix, Q.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This matrix tells the Kalman filter how imperfect the model itself is. If the matrix contains only zeros, you're telling the filter that the model is perfect, but if it contains non-zeros, you're saying that the model can't entirely be trusted, and that more weight should be given to the measurements. This will then limit the filter's convergence.&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2014-04-28T16:29:46.093" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2847" PostTypeId="1" CreationDate="2014-04-28T19:25:43.253" Score="8" ViewCount="10812" Body="&lt;p&gt;I have not yet built this so this is basically a theoretical question. I am still wrestling with some &lt;code&gt;C&lt;/code&gt; code to manage &lt;code&gt;i2c&lt;/code&gt; communication etc.&lt;/p&gt;&#xA;&lt;p&gt;When I originally said &amp;quot;I have not built this&amp;quot;, I meant that the robot is in what could be called a &amp;quot;design phase&amp;quot;. For the sake of my question lets assume for a moment that the whole robot consists of just one IMU sensor. It moves magically (no motors that create a lot of noise in the sensor measurements). With theoretical I mean I am interested in the mathematics and algorithms involved in solving this problem. What I call IMU sensor provides raw accelerometer, gyro, and magnetometer measurements.&lt;/p&gt;&#xA;&lt;p&gt;Lets say our tiny robot travels on a snooker table (3569 mm x 1778 mm). I believe this is sufficiently small to call it 2d. **Now, sensor fusion should be much easier (faster, consume less resources) than in 3d, right? **&lt;/p&gt;&#xA;&lt;p&gt;I would like to measure the velocity and if possible the position.&#xA;With velocity I mean at a given point of time I need to know the current velocity of the robot moving over the snooker table. Velocity is in the range of 0 - 5 m/s.&#xA;With position I mean at a given point of time I need to know the current position of the robot on the snooker table (x, y, heading).&lt;/p&gt;&#xA;&lt;p&gt;I hope this will be possible since the robot should be able to identify some landmarks and use this information to reduce position errors.&lt;/p&gt;&#xA;&lt;p&gt;When I originally said &amp;quot;I hope this will be possible&amp;quot; I meant to express that I already am aware of the fact that real sensor data is noisy and errors accumulate quickly. Using landmarks I will / or will not be able to manage to reduce the error in the position estimates. But this is NOT part of my question.&lt;/p&gt;&#xA;&lt;p&gt;I am about to improve my linear algebra knowledge. So I am confident to manage some matrix multiplications, inversions and such.&lt;/p&gt;&#xA;&lt;p&gt;My question is for some ideas, references on measuring velocity and position in 2d using &lt;a href=&quot;http://www.pololu.com/product/2468&quot; rel=&quot;nofollow noreferrer&quot;&gt;an IMU sensor like this one&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;P.S. A little side question: I just figured that this question is probably too theoretical for robotics.SE. If you know any forum that is more focused on mathematical / algorithmic side of robotics please let me know.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="3848" LastEditorUserId="26766" LastEditDate="2020-10-05T00:32:42.950" LastActivityDate="2020-10-05T00:32:42.950" Title="Accelerometer, gyro, and magnetometer sensor fusion in 2d" Tags="&lt;localization&gt;&lt;imu&gt;&lt;sensor-fusion&gt;" AnswerCount="2" CommentCount="7" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="2848" PostTypeId="1" CreationDate="2014-04-28T22:06:16.327" Score="1" ViewCount="82" Body="&lt;p&gt;When I look at my &lt;a href=&quot;http://www.ampflow.com/motor_controller.htm&quot; rel=&quot;nofollow&quot;&gt;160A motor controller&lt;/a&gt;, it has a port that is called &quot;CTL.&quot;&#xA;What does CTL stand for? Is that a sort of protocol like RS232?&lt;/p&gt;&#xA;" OwnerUserId="4269" LastEditorUserId="350" LastEditDate="2014-04-29T14:17:04.760" LastActivityDate="2016-02-05T19:20:32.123" Title="CTL port in a motor controller" Tags="&lt;motor&gt;" AnswerCount="1" CommentCount="7" FavoriteCount="1" ClosedDate="2016-02-07T04:48:18.213" ContentLicense="CC BY-SA 3.0" />
  <row Id="2849" PostTypeId="1" CreationDate="2014-04-29T00:40:54.937" Score="9" ViewCount="5434" Body="&lt;p&gt;I'm trying to do a quadcopter with some friends and we have a problem. It goes forward instead of hovering in place. We made a video to explain it, you can see it &lt;a href=&quot;https://www.youtube.com/watch?v=iH-BB3ADuus&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can see, the quadcopter flight and go forward when I don't touch the controller. I need to correct it to go backward and it goes forward again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We use the kk2.1.5. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The HobbyKing KK2.1.5 Multi-Rotor controller is a flight control board for multi-rotor aircraft (Tricopters, Quadcopters, Hexcopters etc). Its purpose is to stabilize the aircraft during flight. To do this it takes the signal from the 6050MPU gyro/acc (roll, pitch and yaw) then passes the signal to the Atmega644PA IC. The Atmega644PA IC unit then processes these signals according the users selected firmware and passes control signals to the installed Electronic Speed Controllers (ESCs). These signals instruct the ESCs to make fine adjustments to the motors rotational speed which in turn stabilizes your multi-rotor craft.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;We made some test. As you can see in the video, we placed the battery backward to be sure there is no weight against. When we check values in the debug mode, all values are at 0 when nothing is pressed.&lt;/p&gt;&#xA;" OwnerUserId="4291" LastEditorUserId="350" LastEditDate="2014-04-29T14:13:35.870" LastActivityDate="2014-06-13T18:25:48.953" Title="Our quadcopter goes forward instead of hovering in place. How to correct it?" Tags="&lt;quadcopter&gt;&lt;uav&gt;&lt;multi-rotor&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2850" PostTypeId="1" CreationDate="2014-04-29T11:36:21.160" Score="1" ViewCount="150" Body="&lt;p&gt;Here is the &lt;a href=&quot;https://imgur.com/a/oFeJ5&quot; rel=&quot;nofollow noreferrer&quot;&gt;disassembled stepper motor that I'm working with&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Contains the photo of the motor, and the label that's on the bottom of the motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.imgur.com/UGPG0t5.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.imgur.com/UGPG0t5m.jpg&quot; alt=&quot;disassembled stepper motor&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.imgur.com/nJsyKFl.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.imgur.com/nJsyKFlm.jpg&quot; alt=&quot;disassembled stepper motor&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need to identify this stepper motor that was retrieved from scrap for a project. Budget constraints force us to use the scrap motor. I tried to drive this using a L298 H Bridge, but I couldn't find the right bit sequences to get this running smoothly. I also tried to search for a specifications sheet in the internet with the label, unsuccessfully.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm using either an RPi or Arduino board to run this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I just need a pin diagram and the specifications of the motor, if you guys have seen this type before.&lt;/p&gt;&#xA;" OwnerUserId="4295" LastEditorUserId="350" LastEditDate="2014-04-29T14:09:24.563" LastActivityDate="2014-04-29T15:13:00.840" Title="Need specifications to operate this stepper motor with RPi or Arduino" Tags="&lt;arduino&gt;&lt;raspberry-pi&gt;&lt;stepper-motor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2851" PostTypeId="2" ParentId="2850" CreationDate="2014-04-29T15:13:00.840" Score="1" Body="&lt;p&gt;The &lt;a href=&quot;http://www.mpja.com/Stepper-Motor-NEMA-23-384V/productinfo/17607%20MS/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Marlin P. Jones Co. page for this item&lt;/a&gt; has a link to a pdf data sheet with the following diagram and stepping sequence.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/cujAW.jpg&quot; alt=&quot;pin diagram &amp;amp; step chart&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The pdf file shows the following specifications:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;17607-MS&lt;br&gt;&#xA;  1.8 DEG. 3.84V NEMA 23 STEPMOTOR&lt;br&gt;&#xA;  SHINANO KENSHI&lt;br&gt;&#xA;  P/N: STP-57D211&lt;br&gt;&#xA;  3.84VDC/4.7ohms/0.8A 2 Phase Uni-Polar 5 lead Step Motor with 6.5mm dia. X 18mm steel shaft with a 3/4 dia., 16 tooth, plastic cog belt gear attached by a steel roll pin. Ball bearings, 3&quot; leads, 4 corner mounting holes, Removable anti vibration rubber/steel mtg. bracket.&lt;br&gt;&#xA;  L: 2&quot;(Body) SQ: 2-3/16&quot;               WT: 1.5&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="478" LastActivityDate="2014-04-29T15:13:00.840" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2852" PostTypeId="1" AcceptedAnswerId="2858" CreationDate="2014-04-30T01:11:52.023" Score="7" ViewCount="6682" Body="&lt;p&gt;I am planning to create a motor turret described &lt;a href=&quot;https://robotics.stackexchange.com/questions/2841/what-approaches-should-i-consider-to-create-rotating-a-turret&quot;&gt;in this question&lt;/a&gt;. But to simplify the problem, I'm thinking of a wind turbine with a generator in the main head that can rotate freely through 360 degrees to face the wind. How would I prevent the power and sensor wires coming from the head and down the shaft from twisting? &lt;/p&gt;&#xA;" OwnerUserId="1767" LastEditorUserId="1767" LastEditDate="2021-01-06T04:24:25.470" LastActivityDate="2021-01-06T04:24:25.470" Title="How to prevent twisting of cables" Tags="&lt;sensors&gt;&lt;wiring&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="2853" PostTypeId="2" ParentId="2849" CreationDate="2014-04-30T04:46:19.353" Score="2" Body="&lt;p&gt;There are quite a few possible explanations for the instability, I'll try to list 'em:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;PID settings are off the mark. I'm not familiar with KK2.1.5 Multi-Rotor controller, but I'm sure there will be something to adjust the roll/pitch PIDs. Try tweaking them. Under-compensated integral error may be a possible culprit.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Some issue with ESC calibration. Try recalibrating the ESCs. In case you happen to have any spare ESCs, try replacing them.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Re-calibrating the 6050MPU might be a good idea.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Some thing wrong with the electrical connections inside PDB or the BLDC motors.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;However, wrong PID tuning seems to be the most plausible reason. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Quite often, while hovering in low throttle, there will be an uncompensated roll/pitch integral error that would cause the quadrotor to translate sideways. Such translations would usually go away at a higher throttle.&lt;/p&gt;&#xA;" OwnerUserId="1949" LastActivityDate="2014-04-30T04:46:19.353" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2854" PostTypeId="1" AcceptedAnswerId="2856" CreationDate="2014-04-30T04:57:54.670" Score="-2" ViewCount="202" Body="&lt;p&gt;How would one go about making a number of drones fly in a preset pattern or formation. for example have them rotating around a point.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;something like this.&#xA;&lt;a href=&quot;https://www.youtube.com/watch?v=ShGl5rQK3ew&quot; rel=&quot;nofollow&quot;&gt;https://www.youtube.com/watch?v=ShGl5rQK3ew&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4300" LastActivityDate="2014-04-30T13:11:04.760" Title="Create set of drones to fly in patterns" Tags="&lt;quadcopter&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2014-04-30T17:05:39.460" ContentLicense="CC BY-SA 3.0" />
  <row Id="2855" PostTypeId="2" ParentId="2591" CreationDate="2014-04-30T08:50:05.603" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;A spherical joint can be represented by three consecutive rotary&#xA;  joints with intersecting rotation axes.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This statement is true, your restrictions, I'm afraid are not. The position of spherical wrist can be determined based on what you said, but don't forget that there is another transformation from spherical wrist to the end-effector of the robot and that is the point with the last $d_i$. For example consider figure 4.2.A from the link you provided:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/VCce2.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you wanted to end kinematic chain at the red point, you could go with $d=0$, but to calculate the position of green point, how would you continue?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In &lt;a href=&quot;http://robotics.usc.edu/~aatrash/cs545/Lecture8.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; set of slides there some example DH for spherical joints. Furthermore, you can have a look at the &lt;a href=&quot;http://www.dis.uniroma1.it/~deluca/rob1_en/09_DirectKinematics.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;slides&lt;/a&gt; of the same professor whom you have mentioned his exam (it can give you an idea of why he has answered the question that way).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, you should remember that there are the following ambiguities in Denavit-Hartenberg convention i.e. two DH representation of the same robot, can be different, yet will result in the same forward kinematics. DH ambiguities:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Frame$_0$: origin and $x_0$ axis are arbitrary.&lt;/li&gt;&#xA;&lt;li&gt;Frame$_n$: $z_n$ axis is not specified (but $x_n$ &lt;em&gt;must&lt;/em&gt; be orthogonal to the intersect $z_{n-1}$&lt;/li&gt;&#xA;&lt;li&gt;When $z_{i-1}$ and $z_i$ are parallel, the common normal is not uniquely defined ($O_i$ can be chosen arbitrarily along $z_i$) &lt;/li&gt;&#xA;&lt;li&gt;When $z_{i-1}$ and $z_i$ are incident, the positive direction of $x_i$ can be chosen at will (however, we often take $x_i = z_{i-1} ! z_i$)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="2523" LastActivityDate="2014-04-30T08:50:05.603" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2856" PostTypeId="2" ParentId="2854" CreationDate="2014-04-30T13:05:01.643" Score="1" Body="&lt;p&gt;As a complete answer to this question would be very very long I'll attempt to answer it in generally high-level lines. If you wish to know specifics ask several more concise questions.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;You need to create the drones. The drones need to be controllable and stable. Quadcopters are usually OK, octocopters are more stable/easier to control. Larger ones are more stable but have less maneuver capabilities.&lt;/li&gt;&#xA;&lt;li&gt;You need a localization system so each drone knows it's position and orientation in a fixed coordinate system. This can be obtained in a quite large number of ways. Usually orientation is obtained using IMU and the position can be obtained via GPS (or dGPS for higher precision if possible), some sound-based system (using TDOA method or similar) or some visual systems for example. Another approach would be to fully localize only one drone and then use some system to find the relative positions of other drones with respect to that one.&lt;/li&gt;&#xA;&lt;li&gt;After that, you need to produce control sequences to guide the drones along those paths. This can be done from the ground by some wireless control system or can be implemented directly onto the drones.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Given how wide your question is I hope this covers at least some portion of the answer you were looking for.&lt;/p&gt;&#xA;" OwnerUserId="4017" LastEditorUserId="158" LastEditDate="2014-04-30T13:11:04.760" LastActivityDate="2014-04-30T13:11:04.760" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2857" PostTypeId="2" ParentId="2852" CreationDate="2014-04-30T13:12:16.080" Score="1" Body="&lt;p&gt;Two approaches come to my mind.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first one is brush connectors, these for example: &lt;a href=&quot;http://www.mercotac.com/html/products.html&quot; rel=&quot;nofollow&quot;&gt;http://www.mercotac.com/html/products.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second one would be to use something like audio connector for example &lt;a href=&quot;http://www.trait-tech.com/uploads/details/T-PCA-7034-1__2-5-to-3-5-Adapter-Audio-Connector-Plug-Converter.jpg&quot; rel=&quot;nofollow&quot;&gt;http://www.trait-tech.com/uploads/details/T-PCA-7034-1__2-5-to-3-5-Adapter-Audio-Connector-Plug-Converter.jpg&lt;/a&gt;&#xA;If this isn't smooth enough for your application, there are conductive greases you can find appropriate. Be careful to separate plastic parts so that they don't make the connection rough.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regards&lt;/p&gt;&#xA;" OwnerUserId="4017" LastActivityDate="2014-04-30T13:12:16.080" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2858" PostTypeId="2" ParentId="2852" CreationDate="2014-04-30T14:49:17.037" Score="5" Body="&lt;p&gt;What you're looking for is generally referred to as a slip ring. Here's a cheaper slip ring sold by Adafruit along with a video demonstrating how it works: &lt;a href=&quot;http://www.adafruit.com/products/736&quot;&gt;http://www.adafruit.com/products/736&lt;/a&gt;. They sell hobbyist parts. I've used slip rings before to manufacture my own rotating LiDAR using a Hokuyo.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's another company that sells what seem to be industrial grade slip rings: &lt;a href=&quot;http://www.moflon.com/&quot;&gt;http://www.moflon.com/&lt;/a&gt;. I found them by doing a quick Google search for &quot;slip ring connector&quot;, which you can use to find many many more options.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a final note, here's the video of the rotating LiDAR I built which uses a slip ring...you will see the slip ring in the first 30 seconds of the video: &lt;a href=&quot;https://www.youtube.com/watch?v=7PLcqhXVndI&amp;amp;list=UU0A5iVxngtVcHPjANH75z1A&quot;&gt;https://www.youtube.com/watch?v=7PLcqhXVndI&amp;amp;list=UU0A5iVxngtVcHPjANH75z1A&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="1960" LastEditorUserId="1960" LastEditDate="2014-04-30T15:00:06.770" LastActivityDate="2014-04-30T15:00:06.770" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2860" PostTypeId="1" CreationDate="2014-04-30T20:06:52.857" Score="2" ViewCount="67" Body="&lt;p&gt;How long can a vex pneumatic piston be?&lt;/p&gt;&#xA;" OwnerUserId="4303" LastActivityDate="2014-08-28T00:38:29.787" Title="How long can a VEX pneumatic arm be?" Tags="&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2863" PostTypeId="2" ParentId="2847" CreationDate="2014-05-01T19:16:09.543" Score="5" Body="&lt;p&gt;The gyrometer gives you angular velocity about each axis. You simply integrate these values to get the roll, pitch and yaw of the robot. Since this is 2D, all you care about is yaw, and you'll integrate one value. Of course, there are many different ways of integrating the value you read from the gyrometer. The easiest way is to sample the gyro, timestamp the sample, and assume this value holds until the next sample. This is similar to a Riemann's sum approximation of the integral, and will be more accurate the higher your sampling rate. You can use more advanced forms of interpolation between sets of samples like bilinear interpolation, but it's up to you to decide how far you'd like to go.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The accelerometer gives you linear acceleration along each axis. Since this is 2D, we only care about the acceleration along x &amp;amp; y (I assume x is pointing in the direction of positive velocity of the vehicle, y is pointing to the left, and z is the normal of the table). Again, we simply integrate these values to get velocity, and if you so choose integrate a second time to obtain position. Since you're integrating twice, you'll accumulate a significant amount of error. Error in the integration accumulates as a random walk (see: &lt;a href=&quot;http://www.mit.edu/~kardar/teaching/projects/chemotaxis%28AndreaSchmidt%29/random.htm&quot; rel=&quot;nofollow&quot;&gt;http://www.mit.edu/~kardar/teaching/projects/chemotaxis(AndreaSchmidt)/random.htm&lt;/a&gt;). This means error grows with time on the order of sqrt(t). Both the first and the second integration will have this random walk, which will compound your error further.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The magnetometer is there to provide a constant reference (magnetic north) which compensates for the drift of the gyroscope.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Essentially, you use the magnetometer and gyroscope to calculate your heading in the local frame (a static frame that has (0,0) located at the position where you started the robot). The accelerometer gives you changes in position in the vehicle frame (dynamic frame whose (0,0) origin is anchored somewhere on the robot). You can use the updated heading and changes in position in the vehicle frame to compute your location in the local frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's an article I think you will find very useful: &lt;a href=&quot;https://forum.sparkfun.com/viewtopic.php?f=14&amp;amp;t=24226&quot; rel=&quot;nofollow&quot;&gt;https://forum.sparkfun.com/viewtopic.php?f=14&amp;amp;t=24226&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: I should mention that to do this, all you need are encoders on the wheels to compute position and velocity and a one axis gyro to measure heading. Then you simply use trigonometry with the change in distance computed from the encoders and the angle from the gyro to get the change in x &amp;amp; y. The best gyrometers can be used for hours upon hours without a significant amount of drift. Adding the magnetometer is a big help as well. Ideally you'd use the IMU as an &quot;Attitude Heading &amp;amp; Reference System&quot; and encoders to compute distance travelled and as another source of velocity. If you wanted the most accurate velocity, you'd fuse the data from the encoders with the integral of acceleration by adding the data together after weighting each data point by 1/variance of the data.&lt;/p&gt;&#xA;" OwnerUserId="1960" LastEditorUserId="1960" LastEditDate="2014-05-01T19:21:21.320" LastActivityDate="2014-05-01T19:21:21.320" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2864" PostTypeId="2" ParentId="2847" CreationDate="2014-05-01T19:47:27.087" Score="3" Body="&lt;p&gt;Using an IMU you can only measure: acceleration, rate of rotation, and direction of magnetic field. You cannot measure velocity, you can only integrate the acceleration to infer velocity. As you can imagine, this leads to velocity drift, which in turn leads to a lot of unbounded position drift.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are three parts to your problem:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Infer the robot's bearing from gyro and compass. If the robot is quite slow, you may be able to ignore the gyro, and just use the compass.&lt;/li&gt;&#xA;&lt;li&gt;Infer the robots velocity and position from the accelerometer&lt;/li&gt;&#xA;&lt;li&gt;Adjust your position estimate from 'landmarks'&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The mathematics for 2. is very simple. if dT is the time between samples, then:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;accelerationInWorldCoordinates = accelerationInRobotCoodinates.rotate(-heading)&#xA;velocity += accelerationInWorldCoordinates * dT&#xA;position += velocity * dT&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The mathematics for 1. is a little more involved, because we're fusing together the gyro and compass. Here's something to try:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;k = 0.95&#xA;headingDegrees += gyroReadingDegreesPerSecond * dT&#xA;headingDegrees  = (headingDegrees*k) + (compassReadingDegrees*(1.0-k))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;What's happening here is that we're mainly using the gyro to update the heading, but mixing in a little of the compass reading to help keep it stable in the long term.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The mathematics for 3. (and possibly 1) is harder. What you are looking for is a Kalman Filter. This filter can take information from several sources and produce an optimal estimate of the state of the robot, along with a measure of its confidence in that estimate. It's not unlike our code for 1. In fact, you'll see the k and (1-k) in the Kalman filter too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem with Kalman filters is that the only documentation you'll find on the subject tends to be heavy on the maths, and very low on practical advice for people actually implementing it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The way I learned was by very slowly and carefully picking my way through &lt;a href=&quot;http://www.cs.cornell.edu/Courses/cs4758/2013sp/materials/MI63slides.pdf&quot; rel=&quot;nofollow&quot;&gt;Kalman Filter Tank Filling from Cornell University&lt;/a&gt;. I recommend implementing the examples given and trying to make them work. What's annoying about this paper (and most others), is that they often don't tell you the size and shape of the various matrices used in the algorithm, so you'll have to work these out by hand. They also don't tell you much about the meaning of the covariance matrix, or how to calculate it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have this dream that one day I'll get round to writing a genuinely helpful article on Kalman filters on my &lt;a href=&quot;http://hugosprojects.wordpress.com/&quot; rel=&quot;nofollow&quot;&gt;blog&lt;/a&gt;, but don't hold your breath.&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2014-05-01T19:47:27.087" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2865" PostTypeId="1" CreationDate="2014-05-02T03:04:52.993" Score="2" ViewCount="200" Body="&lt;p&gt;My current class assignment is to program a robot through a course that includes two moving obstacles – other robots moving at constant speed around a region the one robot must get to. Since the other robots are moving at a constant pace alongside a predictable path, my robot can just stop at the border of the region, wait until the others pass by and then proceed. The robot can use a 2D laser range scanner to sense its surroundings.&lt;/p&gt;&#xA;&lt;p&gt;Given these restrictions, what is the simplest object tracking algorithm I could use? I am thinking of something along these lines:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Collect two laser readings (2D point clouds) &lt;code&gt;A&lt;/code&gt; and &lt;code&gt;B&lt;/code&gt; with a suitable time gap between them;&lt;/li&gt;&#xA;&lt;li&gt;Apply &lt;a href=&quot;http://en.wikipedia.org/wiki/DBSCAN&quot; rel=&quot;nofollow noreferrer&quot;&gt;DBSCAN&lt;/a&gt; to &lt;code&gt;A&lt;/code&gt; and &lt;code&gt;B&lt;/code&gt;, producing the cluster lists &lt;code&gt;A'&lt;/code&gt; and &lt;code&gt;B'&lt;/code&gt;;&lt;/li&gt;&#xA;&lt;li&gt;Generate a list &lt;code&gt;P&lt;/code&gt; of pair-wise matches of the clusters in &lt;code&gt;A'&lt;/code&gt; and &lt;code&gt;B'&lt;/code&gt;, maybe using the &lt;a href=&quot;http://en.wikipedia.org/wiki/Hungarian_algorithm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Hungarian algorithm&lt;/a&gt;;&lt;/li&gt;&#xA;&lt;li&gt;Discard from &lt;code&gt;P&lt;/code&gt; any pairings whose difference falls within a threshold;&lt;/li&gt;&#xA;&lt;li&gt;Calculate direction and magnitude of movements from the distance between the centers of mass of each cluster pair.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;The reason for choosing DBSCAN and the Hungarian algorithm is that I already have both implemented and in use elsewhere; and the difference between clusters could be measured as the distance between their centers of mass.&lt;/p&gt;&#xA;&lt;p&gt;Do you think this solution would work for my problem? Do you have any suggestions on better and/or simpler ways to solve it?&lt;/p&gt;&#xA;" OwnerUserId="4310" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2014-05-28T05:30:24.030" Title="Simplest way to do object tracking with a 2D range finder sensor?" Tags="&lt;mobile-robot&gt;&lt;sensors&gt;&lt;algorithm&gt;&lt;rangefinder&gt;" AnswerCount="0" CommentCount="2" ClosedDate="2014-06-04T11:53:06.963" ContentLicense="CC BY-SA 3.0" />
  <row Id="2868" PostTypeId="1" AcceptedAnswerId="4258" CreationDate="2014-05-02T18:44:51.583" Score="1" ViewCount="1769" Body="&lt;p&gt;Edited: I have a differential drive robot that needs to drive down a hall and stay in the center. I have 4 ultra sonic sensors, 2 on each side. Currently, I thought of implementing pure pursuit and having a lookahead distance etc. but I am not sure if this is the correct approach. I have all the lower level PIDs for motor control working, I just need some help in choosing a path planning algorithm? Will pure pursuit work to my needs? OR do people have any suggestions.&lt;/p&gt;&#xA;" OwnerUserId="4278" LastEditorUserId="4278" LastEditDate="2014-05-10T10:04:27.127" LastActivityDate="2014-07-14T23:36:40.290" Title="Differential Drive Robot Control" Tags="&lt;control&gt;&lt;pid&gt;&lt;differential-drive&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2870" PostTypeId="1" CreationDate="2014-05-02T21:46:12.133" Score="1" ViewCount="20" Body="&lt;p&gt;I'm building a circuit to control the flow of flour. The basic idea is to open that actuator (Possibly valve?) to let a specific amount go through and then close it. The tube should have a diameter of 1cm max.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wonder what is the right actuator to use? Maybe a valve is the right one? Any other solution? Also, it would be great if you pointed out some suitable actuators that I can buy online.&lt;/p&gt;&#xA;" OwnerUserId="4319" LastActivityDate="2014-05-02T21:46:12.133" Title="Find the right actuator to control the flow of flour" Tags="&lt;actuator&gt;" AnswerCount="0" CommentCount="1" ClosedDate="2014-05-07T11:36:48.217" ContentLicense="CC BY-SA 3.0" />
  <row Id="2871" PostTypeId="1" CreationDate="2014-05-02T23:03:51.940" Score="2" ViewCount="308" Body="&lt;p&gt;I would like to build 2D EKF-SLAM in openGL. I've implemented the entire virtual environment in which there is a robot that moves in 2D and there are some landmarks(feature-based map). I have the motion and observation models. Also, I've implemented the sensors with Gaussian noise. Now, I would like to use MRPT to build SLAM. At this point, I don't want to use data association that is the robot moves and detects its pose and landmarks and discard the previous data which means I only concern with the current state vector. My question is Is it possible to build SLAM without data association? Please suggest me some articles so that I can enrich my background about only this issue. &lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="2155" LastEditDate="2014-05-02T23:46:17.720" LastActivityDate="2017-02-08T14:34:02.060" Title="SLAM without data association?" Tags="&lt;slam&gt;&lt;ekf&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2872" PostTypeId="2" ParentId="2708" CreationDate="2014-05-03T04:38:44.817" Score="4" Body="&lt;p&gt;What you are describing is essentially a textbook case for using a Kalman filter. First you need a prediction step. Let's assume you are predicting the pose of the robot $(x,y,\theta)$, given the previous pose estimate and your high-frequency velocity measurements $(v,\omega)$, where $v$ is the linear velocity and $\omega$ is the angular velocity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/mnMVi3C.png&quot; alt=&quot;prediction step&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$P$ is the 3x3 covariance matrix that represents the uncertainty of the robot pose. $Q$ is the covariance of your inputs (i.e., how noisy are those velocity measurements?) $F$ is the Jacobian of the motion model with respect to the state and $G$ is the Jacobian with respect to the inputs, i.e.,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/PWILZO9.png&quot; alt=&quot;Q and Jacobians&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now you have your less frequent correction updates, which actually measure the full state, making this quite simple, i.e.,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/0yLMvcd.png&quot; alt=&quot;correction step&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $z_k$ is your measurement (from the camera) and $R$ is the covariance matrix associated with that measurement (probably a diagonal matrix). This measurement is compared with the predicted measurement (which in your case is just the latest pose estimate). In this simple case, the Kalman gain is the proportion of the current pose covariance compared to the sum of the pose covariance and the measurement covariance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To answer your question about the different rates, you can just run your motion update repeatedly until your prediction update arrives. For example, it might happen that the motion update occurs 100 times before your perform a correction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You also asked about how to handle three cameras. The easiest way is to just process them sequentially; just apply three corrections in a row. Another way is to stack them and perform a single update. You would need to adjust the correction update step to do it this way.&lt;/p&gt;&#xA;" OwnerUserId="4320" LastActivityDate="2014-05-03T04:38:44.817" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2873" PostTypeId="1" CreationDate="2014-05-04T19:32:33.013" Score="3" ViewCount="479" Body="&lt;p&gt;I'm building a robot with differential drive. I've reached the point when I can drive it around on remote control and I'm trying to get the localization working. Now I would like to exactly measure parameters of the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Model of the robot I'm using has two wheels spaced $b$ meters, each wheel has a distance per encoder tick $s_L$ and $s_R$ and variance standard deviation of the driven distance $\sigma_L$ and $\sigma_R$.&#xA;When moving, distances are random variables from the following distributions: $d_L \sim t_{L}s_{L}N(1, \sigma_L^2)$ and $d_R \sim t_{R}s_{R}N(1, \sigma_R^2)$. Later this model might expand a little bit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is a good way to measure the parameters?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found a way to measure $b$, $d_L$ and $d_R$ (added that as an answer), but I have no idea how to measure the standard deviations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The model will be used as a prediction input in MCL, so I don't need covariance matrix for localization.&lt;/p&gt;&#xA;" OwnerUserId="482" LastEditorUserId="482" LastEditDate="2014-05-05T19:26:54.433" LastActivityDate="2014-05-05T19:26:54.433" Title="How to calibrate differential drive?" Tags="&lt;localization&gt;&lt;calibration&gt;&lt;differential-drive&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2874" PostTypeId="2" ParentId="2873" CreationDate="2014-05-04T19:32:33.013" Score="1" Body="&lt;p&gt;To estimate the first three parameters (distance between wheels and distance per encoder tick of both left and right wheels) I made a calibration pattern on the ground as shown in the image:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/B4ReW.png&quot; alt=&quot;Calibration pattern&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(this shape was chosen because it's easy to make using tape measure and a string)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then I will manually drive the robot along the path in a ABCDBCA pattern as precisely as possible while recording encoder ticks. Then the calibration code will attempt to find the model parameters that minimize distance between output of the model (with variances set to 0) and the pattern.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My intuition is that since the path is quite long, maximal error between real robot and the pattern is bounded by a few centimeters and there are turns both left and right, the parameters found by this should be fairly close to the real values.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only problem is that this won't give me the variances...&lt;/p&gt;&#xA;" OwnerUserId="482" LastActivityDate="2014-05-04T19:32:33.013" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2875" PostTypeId="1" AcceptedAnswerId="2878" CreationDate="2014-05-04T20:13:08.077" Score="3" ViewCount="942" Body="&lt;p&gt;I'm building the biggest robot I've ever done. The hardware I have so far is as follows:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;HCR-Platform from DFRobot as a base&lt;/li&gt;&#xA;&lt;li&gt;x2 12V 146Rpm DC motor with two phase hall encoder&lt;/li&gt;&#xA;&lt;li&gt;x7 Sharp 2Y0A21 IR sensors&lt;/li&gt;&#xA;&lt;li&gt;x6 URM37 ultrasonic sensor&lt;/li&gt;&#xA;&lt;li&gt;x4 IR ground sensor&lt;/li&gt;&#xA;&lt;li&gt;Microsoft Kinect&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Right now I'm only using a RoMeo board (arduino 328 compatible) to drive the motors and process the PIDs for the wheels + steering and also access to all the sensors (except for the kinect). I have a BeagleBone Black running linux that is intended to be the main brain connected to the RoMeo using the RS232 port and do the processing of the Kinect + wifi access.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I started thinking about connecting the sensors to the Beagle board directly so I don't need to waste time sending commands to the arduino board to read the sensors and that yielded the first issue, beagle board works on 3.3V instead of 5V used on the sensors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;After this I thought to create a board with voltage divisors to connect the sensors there and then using a ribbon cable to connect this new board to the beaglebone. I couldn't find any 2x23 IDC male connector to create the &quot;interface cable&quot; between the two boards so the beaglebone option is out as I don't want to have tons of jumper cables all over the place.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This morning I thought about all this again and I researched about GPIO boards over USB and found three from Numato, only one works on TTL 5V and has 8 pins so I would need a few of them to use all the sensors so unless I design my own board this option is out too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At this point I'm quite confused in terms of what's the best hardware I could use to drive this beast. Right now I think I should use a Intel NUC with linux for the Kinect, wifi and usb link to a custom made sensor board. This custom made board will work on TTL 5V, provide a power bus for the sensors and will interface all the &quot;low level&quot; sensors using USB as link. I also thought about an FPGA for the custom board but I'm not sure if this would help me or if it's worth the effort of learning how to use it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What are your thoughts on this? Any idea on how this issues are solved on &quot;complex&quot; robots?&lt;/p&gt;&#xA;" OwnerUserId="4324" LastActivityDate="2014-05-05T14:11:14.320" Title="Connect sensors to beaglebone/arduino in a complex robot" Tags="&lt;arduino&gt;&lt;mobile-robot&gt;&lt;sensors&gt;&lt;computer-vision&gt;&lt;beagle-bone&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2876" PostTypeId="1" AcceptedAnswerId="3060" CreationDate="2014-05-05T09:04:51.260" Score="5" ViewCount="157" Body="&lt;p&gt;According not only to &lt;a href=&quot;http://www.hitl.washington.edu/people/tfurness/courses/inde543/READINGS-03/BERKLEY/White%20Paper%20-%20Haptic%20Devices.pdf&quot;&gt;this link&lt;/a&gt;, but in my humble opinion to common sense as well, cable-based haptic devices have got lower inertia and are less complicated mechanically. I also believe that controlling them is not that big deal - the inverse kinematics should be quite straightforward. Moreover, the play should be easy to compensate - if there occurs any at all, since the cables are tensioned. Cables should also be easy - ? just a guess from me - to be equipped with strain gauges or to become strain gauges themselves, allowing to enhance control capabilities of a device.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where am I wrong? Why is that the links-based systems (e.g. PhaNTom or Falcon, although that latter has got cable transmission), especially with impedance control, are the only I seem to be able to buy? Is it because of cable elongation (creep)? Or too constrained workspace (esp. angles)?&lt;/p&gt;&#xA;" OwnerUserId="4325" LastEditorUserId="4325" LastEditDate="2014-05-05T09:15:25.040" LastActivityDate="2014-06-26T16:03:56.313" Title="Why linkage-based haptic devices are much more common than cable (tension)-based ones?" Tags="&lt;sensors&gt;&lt;mechanism&gt;" AnswerCount="4" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2877" PostTypeId="2" ParentId="2875" CreationDate="2014-05-05T11:36:36.930" Score="1" Body="&lt;p&gt;My reccomendation would be to do as much as possible arduino side, as you have much easier access to PWM and digital inputs.  Connect all of your sensors and motor drivers to the arduino.  Communicate over serial with your main robot controller (Beaglebone, Raspi, etc).  Send motor signals over serial and receive sensor values the same way.  Easy to program, neat to wire.&lt;/p&gt;&#xA;" OwnerUserId="4238" LastActivityDate="2014-05-05T11:36:36.930" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2878" PostTypeId="2" ParentId="2875" CreationDate="2014-05-05T14:11:14.320" Score="1" Body="&lt;p&gt;You're right to see this as a problem of complexity.  Whatever setup you decide to use, keep in mind that you will inevitably have to troubleshoot it.  It's already going to be complex -- but make it work in your favor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In other words, let's say that you choose to make a subassembly for your sensors (like arduino + sensors, or GPIO board + sensors).  Make sure that this subassembly is completely self-contained: it can read all the sensor values, and without being connected to the beaglebone it can tell you whether all sensors are being reported properly.  What you &lt;em&gt;don't&lt;/em&gt; want to do is make it so that the entire system has to be connected in order to check the low-level sensors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you compare options, figure out which options will support a modular system design and which options won't.  &lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-05-05T14:11:14.320" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2879" PostTypeId="1" CreationDate="2014-05-05T14:25:06.630" Score="2" ViewCount="93" Body="&lt;p&gt;I want do make following installation (blowing bottle tops as music instrument):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;V - valve&#xA;B - bottle&#xA;&#xA;&#xA; ___________________&#xA;|mini air compressor|&#xA; -------------------&#xA;         |&#xA;   ______|_______&#xA;  |  |  |  |  |  |&#xA;  V  V  V  V  V  V&#xA;  |  |  |  |  |  |&#xA;  B  B  B  B  B  B&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And I want to use and rc servo as electro valve (throttle) to control air flow for each bottle. Is there any other way to do that?&lt;/p&gt;&#xA;" OwnerUserId="2663" LastActivityDate="2014-05-06T14:22:22.373" Title="What to use as electrovalve?" Tags="&lt;rcservo&gt;&lt;mechanism&gt;&lt;valve&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2880" PostTypeId="2" ParentId="2873" CreationDate="2014-05-05T14:30:49.123" Score="1" Body="&lt;p&gt;Someone please check my math here, but the wheel encoder value $\theta$ is not a continuous random variable -- it can't have a variance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might get a more reasonable continuous random variable in the form of the estimated total linear distance.  In that case, the main source of variance in your encoder measurement is going to be the difference between your $r \theta$ calculation of distance travelled and the actual distance travelled -- if your radius measurement wasn't quite right, or the rubber on the tires compresses, or the wheels slip, etc.  &lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-05-05T14:30:49.123" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2881" PostTypeId="2" ParentId="2373" CreationDate="2014-05-05T22:18:25.873" Score="0" Body="&lt;p&gt;I assume you're doing this inside a loop. Make sure that you look at your computations and PRECOMPUTE everything you can before the loop starts. When you're multiplying matrices and doing other math operations 400*50*particle# times, it adds up very quickly. I remember I was doing a calculation for a transform between frames, which boiled down to multiplying 3 matrices together, and doing this inside the loop instead of precomputing made the difference of 3 seconds of computation time per iteration of my algorithm.&lt;/p&gt;&#xA;" OwnerUserId="1960" LastActivityDate="2014-05-05T22:18:25.873" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2882" PostTypeId="1" AcceptedAnswerId="2924" CreationDate="2014-05-06T07:38:21.110" Score="2" ViewCount="149" Body="&lt;p&gt;The &lt;a href=&quot;http://rock-robotics.org&quot; rel=&quot;nofollow&quot;&gt;Rock&lt;/a&gt; framework already includes a lot of software libraries. However, I would like to add an existing external library so that I can use it for my component development. What is the preferred way of doing that?&lt;/p&gt;&#xA;" OwnerUserId="127" LastActivityDate="2014-05-15T08:25:33.563" Title="How do I add an external library to the Rock Framework?" Tags="&lt;software&gt;&lt;rock&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2883" PostTypeId="5" CreationDate="2014-05-06T07:39:40.803" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2014-05-06T07:39:40.803" LastActivityDate="2014-05-06T07:39:40.803" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2884" PostTypeId="4" CreationDate="2014-05-06T07:39:40.803" Score="0" Body="Rock is a software framework for the development of robotic systems. The underlying component model is based on the Orocos RTT (Real Time Toolkit). Rock provides all the tools required to set up and run high-performance and reliable robotic systems for wide variety of applications in research and industry. It contains a rich collection of ready to use drivers and modules for use in your own system, and can easily be extended by adding new components." OwnerUserId="127" LastEditorUserId="127" LastEditDate="2014-05-07T11:38:04.970" LastActivityDate="2014-05-07T11:38:04.970" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2885" PostTypeId="1" AcceptedAnswerId="2886" CreationDate="2014-05-06T10:51:34.707" Score="5" ViewCount="199" Body="&lt;p&gt;What's the name of the &quot;big meccano&quot; used in the photo below to construct all the cabinets and racks?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It appears to be an aluminium cut-to-length system of 4-way rails. I've seen it used many times and assume it has a well-known brand-name to those that know.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/HG4sp.jpg&quot; alt=&quot;Inside Audi facility&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Photo taken from theverge.com and was a feature about how Audi are building a new car.&lt;/p&gt;&#xA;" OwnerUserId="4329" LastEditorUserId="37" LastEditDate="2017-06-13T11:11:08.370" LastActivityDate="2017-06-13T11:11:08.370" Title="Can you identify the construction material/system used in the pic?" Tags="&lt;frame&gt;&lt;identification&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2886" PostTypeId="2" ParentId="2885" CreationDate="2014-05-06T14:08:04.057" Score="4" Body="&lt;p&gt;It looks like 80/20 to me: &lt;a href=&quot;http://www.8020.net/&quot; rel=&quot;nofollow&quot;&gt;http://www.8020.net/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've used it many times...pretty useful stuff.&lt;/p&gt;&#xA;" OwnerUserId="1960" LastActivityDate="2014-05-06T14:08:04.057" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2887" PostTypeId="2" ParentId="2879" CreationDate="2014-05-06T14:22:22.373" Score="2" Body="&lt;p&gt;Generally you won't need a servo.  The more common way to throttle a flow is to use &lt;a href=&quot;http://en.wikipedia.org/wiki/Solenoid_valve&quot; rel=&quot;nofollow&quot;&gt;pneumatic solenoid valves&lt;/a&gt; (which are either open or closed) and control them with &lt;a href=&quot;http://en.wikipedia.org/wiki/Pulse-width_modulation&quot; rel=&quot;nofollow&quot;&gt;PWM&lt;/a&gt;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;See (for example) &lt;a href=&quot;http://www.tlxtech.com/understanding-solenoids/theory-operation/pwm-solenoid-theory&quot; rel=&quot;nofollow&quot;&gt;this link&lt;/a&gt;.  This is also how the boost controller in many cars works. &lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-05-06T14:22:22.373" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2889" PostTypeId="1" AcceptedAnswerId="2896" CreationDate="2014-05-07T12:31:33.813" Score="6" ViewCount="652" Body="&lt;p&gt;I have a 7 dof manipulator (Kuka LBR4+) and would like to calculate the joint torques needed to keep the arm in a static equilibrium. In most books the transposed jacobian is used to map the forces applying on the end effector to the joint torques.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\tau = J^T\cdot F$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That however doesn't take the mass of the links into account. Is there a way to calculate the needed torques for a given configuration so that, assuming an ideal case, by setting these torques the arm will be in a static equilibrium?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;cheers&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For everybody interested, i found a solution to this problem in &lt;em&gt;Introduction to Robotics - Third Edition&lt;/em&gt; by John J. Craig on Page 175-176. It is done with the aid of the iterative Newton-Euler dynamics algorithm. The actual trick is, to set all velocities and accelerations to zero except for the base acceleration. The base acceleration will be $^0 \dot v_0 = G$, where G has the magnitude of the gravity vector but points in opposite direction. This is equivalent to saying that the base of the robot is accelerating upwards with 1 g and this upward acceleration causes exactly the same effect on the link as gravity would.&lt;/p&gt;&#xA;" OwnerUserId="2450" LastEditorUserId="2450" LastEditDate="2014-05-17T14:09:44.337" LastActivityDate="2016-02-23T20:52:46.393" Title="Static equilibrium for 7 dof manipulator" Tags="&lt;torque&gt;&lt;manipulator&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2890" PostTypeId="1" CreationDate="2014-05-07T18:18:21.640" Score="3" ViewCount="151" Body="&lt;p&gt;A project has been given to me at work, with no schematics or idea of where it was going.  I need to fill 5 30ml bottles at a time with a food-grade liquid.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based on the parts I have, I think the design was going to use a air agitated pressure pot tank which is used for spraying paint, which would work if we weren't using food grade liquid, so right off the bat I cant use that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main parts that I can use are an Allen Bradley micrologix plc, 2 pneumatic cylinders, a couple solenoids, start and stop buttons. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is: to fill a 30ml bottle with this liquid, would a positive displacement pump with a vfd be the best way of slowing the pdp down enough to fill the 5 30ml bottle at a time?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do have a little experience with this particular plc so the ladder logic is not the issue, its the figuring out the specs for the pump and the motor.  Any input would be very helpful also any links would be great. At this point im trying to determine if this is a huge waste of time and money or should I just go buy a filling machine for $3-5000.     &lt;/p&gt;&#xA;" OwnerUserId="4340" LastEditorUserId="350" LastEditDate="2014-05-13T18:06:58.353" LastActivityDate="2014-08-07T10:09:29.423" Title="Filling 30mL bottles with food-grade liquid" Tags="&lt;electronics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2891" PostTypeId="1" CreationDate="2014-05-07T22:19:21.870" Score="3" ViewCount="1920" Body="&lt;p&gt;So I need to output a varying voltage off an &lt;a href=&quot;http://arduino.cc/en/Main/ArduinoBoardMega2560&quot; rel=&quot;nofollow&quot;&gt;Arduino Mega&lt;/a&gt; in a range of 17 to 32 millivolts, which I've attempted to do by sending a PWM signal off the board into a low-pass filter which steps down the voltage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This works, but the problem is that Arduino's &lt;a href=&quot;http://arduino.cc/en/Reference/AnalogWrite&quot; rel=&quot;nofollow&quot;&gt;analogWrite&lt;/a&gt; function accepts a value of 0 - 255 to represent the duty cycle of the PWM which isn't precise enough. A value of 1 yields around 20 millivolts and a value of 2 yields around 40 millivolts. Is there some way to have a duty cycle that is more precise than the 0 - 255 range like 0 - 1023 (I think even this isn't really precise enough)? Or is there a better way to get precise voltage output?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The mega is running on and outputting a max voltage of 5 volts, and the low pass filter contains an 11 kiloohm resistor and a 1 microfarad capacitor.&lt;/p&gt;&#xA;" OwnerUserId="4341" LastActivityDate="2014-05-07T22:56:01.267" Title="Outputting a precise voltage in millivolts on Arduino Mega" Tags="&lt;arduino&gt;&lt;pwm&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2892" PostTypeId="2" ParentId="2891" CreationDate="2014-05-07T22:56:01.267" Score="4" Body="&lt;p&gt;analogWrite() does not support a higher range of duty cycle. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However the timers on the AVR chip do support higher precision/resolution, so you can bang the registers directly, especially if you don't need to use the rest of the Arduino libraries. I recommend using avr-gcc with avr-libc and avrdude for programming, and let go of Arduino IDE/libraries entirely.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You have up to 16 bit timers, where the duty cycle can be up to 0-65535. However, at 16 MHz, a 16 bit timer only ticks over 244 times a second, so the filter has to be very low-frequency and thus the lag in the output will be long (although the default PWM frequency for 8-bit timers is only 490 Hz or so, so only twice as good.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second thing you can do is output to a resistor divider. If you output to a 9.9k:100ohm divider, the voltage at the 1ohm resistor will vary from 0 to 50 mV even though the voltage across the top will vary from 0 to 5V. Note that the source impedance is kind-of high here, so you might want to re-buffer with an opamp if the load is low-impedance.&lt;/p&gt;&#xA;" OwnerUserId="88" LastActivityDate="2014-05-07T22:56:01.267" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2893" PostTypeId="2" ParentId="2373" CreationDate="2014-05-07T23:01:49.493" Score="0" Body="&lt;p&gt;What kind of CPU or GPU power do you have available? A GPU might be able to do a large chunk of those calculations in parallel, and all of them in a single calculate call, which would complete in a few milliseconds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, with proper spatial partitioning, SIMD implementation, and using coherency where you know that close rays are likely to have the same result, you should be able to optimize this even on a regular CPU.&lt;/p&gt;&#xA;" OwnerUserId="88" LastActivityDate="2014-05-07T23:01:49.493" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2894" PostTypeId="1" CreationDate="2014-05-08T07:39:50.003" Score="6" ViewCount="3151" Body="&lt;p&gt;What are some good cheap, silent, motors for mannequin robots and what kind of controller should I use?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm creating mannequin robots that require 24 motors: 2 neck, 4 shoulder, 2 elbow, 4 wrist, 2 waist, 4 hip, 2 knee and 4 ankle motors. The mannequins will be bolted via a horizontal post from the lower back to a wall. This means they can run, dance, and pose. I may also do something with the horizontal beam so the robots can do side flips, and moves like the twist, jumps and crouches. They will not stand up, but be bolted as I've described to a wall. They could even spin around completely to face the wall.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've tried using 6v hobby servos for the joins. These are too weak for lifting fibreglass mannequin body parts. They are too loud. They also make noise when poses are held, and they drop and smash when power is shut off. I have been using a handheld remote control for testing with only 5 channels. The robot must be programmable though. Lets say the objective is to make a mannequin dance to 'Thriller' like Michael Jackson. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am open to using kinnect technology as the controller (so that a dancer can simply dance in front of my robot, who can copy and remember) but I'm also open to controllers that allow me to force the mannequin into a pose at specific time codes in the song. If necessary, I am also willing to program the poses using some kind of lighting desk type controller (such as tech crews use in rock concerts to sync everything to go with the music).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have noticed that a power drill or winch is very loud whereas my fan is very quiet. I live in an apartment in which neighbours can hear footsteps from other apartments. I would not dare turn on a drill at 4am because it would wake up everyone in the whole building, but I would have no guilt in turning on a fan. I need my robot to be as quiet as a fan. The voltage does not really matter for this project. I'm happy to use up to 240v from the wall socket.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please let me know which motors and controllers are best for my mannequin robots, taking cost into account. Thanks so much for any help :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/1myof.jpg&quot; alt=&quot;Two standard mannequins - these will be cut at certain joints to allow for mobility.&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="4344" LastEditorUserId="4344" LastEditDate="2014-05-22T18:02:50.157" LastActivityDate="2014-05-22T18:02:50.157" Title="What are some good cheap, silent, motors for mannequin robots and what kind of controller should I use?" Tags="&lt;microcontroller&gt;&lt;robotic-arm&gt;&lt;motion&gt;&lt;humanoid&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="2" ClosedDate="2014-06-04T11:53:48.653" ContentLicense="CC BY-SA 3.0" />
  <row Id="2895" PostTypeId="2" ParentId="2889" CreationDate="2014-05-08T18:22:20.610" Score="0" Body="&lt;p&gt;If you represent the links by their center of mass you should be able to calculate the torque applied at each joint by the weight of the arm. Then your tau on the left hand side would be the tau_control that you're setting minus the tau_links which is the torques placed on each joint by the links, i.e. tau = tau_control - tau_links.&lt;/p&gt;&#xA;" OwnerUserId="1960" LastActivityDate="2014-05-08T18:22:20.610" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2896" PostTypeId="2" ParentId="2889" CreationDate="2014-05-08T21:17:52.993" Score="1" Body="&lt;p&gt;This is something that i have looked for in standard textbooks and have not found much information on it.  I am not sure if it is because they are geared towards industrial arms which are typically not backdrivable.  (meaning once you reach a position, you can essentially turn off your motors and the arm will continue to hold position).  Or if they don't care about this level of control.  (meaning they have low-level controllers that handle it and the arm will &quot;know what to do&quot;).  Or if it is too simple of a problem to worry about.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;nevertheless, i wrote some code to calculate these torques for a simulated robot.  the output seems correct, although it was never tested.  This is python code for OpenRAVE.  &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;# Calculate the center of mass past the current joint.&#xA;# This assumes the mass is specified properly for each link.&#xA;def get_COM_past_joint(joint):&#xA;    mass = 0.0&#xA;    com = np.array([0.0, 0.0, 0.0])&#xA;    for i in range(joint.GetDOFIndex(), robot.GetDOF()):&#xA;        j = robot.GetJointFromDOFIndex(i)&#xA;        link = j.GetHierarchyChildLink()&#xA;        mass += link.GetMass()&#xA;        com += link.GetMass() * link.GetGlobalCOM()&#xA;    # todo: add mass in robot's hand&#xA;    com /= mass    &#xA;    return (mass, com)&#xA;&#xA;# Calculate the torque required to hold joints in current configuration.&#xA;# Procedure:&#xA;#  1. calculate the center of mass &quot;past&quot; the joint&#xA;#  2. find the closest perpendicular distance between the COM and joint axis&#xA;#  3. cross the joint axis with gravity vector&#xA;#  4. cross the perpendicular distance vector with gravity vector&#xA;#  5. return mass * direction * magnitude of both crosses &#xA;def get_static_joint_torque(joint):&#xA;    (mass, com) = get_COM_past_joint(joint)&#xA;    anchor = joint.GetAnchor()&#xA;    axis = joint.GetAxis()&#xA;    joint_to_com_closest = (anchor - com) - np.dot((anchor - com), axis) * axis&#xA;    axis_cross_k = np.cross(axis, np.array([0, 0, -1]))&#xA;    joint_to_com_closest_cross_k = np.cross(joint_to_com_closest, np.array([0, 0, -1]))&#xA;    direction = np.sign(np.dot(axis, joint_to_com_closest_cross_k))&#xA;    return mass*direction*np.linalg.norm(axis_cross_k)*np.linalg.norm(joint_to_com_closest_cross_k)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;EDIT: I recently found out that OpenRAVE does a more advanced form of this calculation already.  (And their units are correct too).  &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;robot.SetDOFValues(dofvalues)&#xA;robot.SetDOFVelocities(dofvelocities)&#xA;torques = robot.ComputeInverseDynamics(dofaccelerations)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;or&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;torqueconfiguration, torquecoriolis, torquegravity = robot.ComputeInverseDynamics(dofaccelerations,None,returncomponents=True)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="110" LastEditorUserId="110" LastEditDate="2016-02-23T20:52:46.393" LastActivityDate="2016-02-23T20:52:46.393" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2897" PostTypeId="1" CreationDate="2014-05-09T05:09:29.683" Score="3" ViewCount="8628" Body="&lt;p&gt;I'm new to embedded devices and am trying to understand how to use i2cget (or the entire I2C protocol really).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm using an accelerometer MMA8452, and the datasheet says the Slave Address is 0x1D (if my SAO=1, which I believe is referring to the I2C bus being on channel 1 on my raspberrypi v2).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the command line, I enter&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sudo i2cget -y 1 0X1d&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It returns&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;0X00&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I think that means I'm attached to the correct device.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So now, I'm trying to figure out how do I get actual data back from the accelerometer?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The i2c spec says&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;i2cget [-y] i2cbus chip-address [data-address [mode]]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So I have tried&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sudo i2cget -y 1 0x1D 0x01&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where 0x01 is the OUT_X_MSB. I'm not sure entirely what I'm expecting to get back, but I figured if I saw some data other than 0x00, I might be able to figure that out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Am I using ic2get wrong? Is there a better way to learn and get data from i2c?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The datasheet for my accelerometer chip is at &lt;a href=&quot;http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Sensors/Accelerometers/MMA8452Q.pdf&quot; rel=&quot;nofollow&quot;&gt;http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Sensors/Accelerometers/MMA8452Q.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4348" LastEditorUserId="4017" LastEditDate="2014-05-10T16:14:28.387" LastActivityDate="2015-06-17T07:52:41.647" Title="How to read data from i2c using i2cget?" Tags="&lt;raspberry-pi&gt;&lt;i2c&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2899" PostTypeId="1" AcceptedAnswerId="2914" CreationDate="2014-05-09T08:09:16.167" Score="2" ViewCount="616" Body="&lt;p&gt;I'm working on my first robot project. I previously used a 12V 6Ah sealed lead acid battery, but recently I aquired some 15 ASUS Li-Ion battery packs, each of them 14.8V and either 2200 mAh or 4400 mAh. The laptops have been discarded, and some of the battery packs seem to be dead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The battery packs have an 8 pin connector. Inside, I assume there's a bunch of 18650-cells and some electronics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My robot can handle 14.8 V directly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I use these batteries? How can I charge them without the laptops? I'm a little put off by the idea of taking the 18650-cells out of the packs and rebuilding my own battery pack and charging system, but if that's what's needed I have to do it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The packs are marked ASUS A41-A3 for the 2200 mAh ones, and ASUS A42-A3 for the 4400 mAh ones.&lt;/p&gt;&#xA;" OwnerUserId="4049" LastActivityDate="2014-05-13T17:54:26.217" Title="Salvaging a bunch of laptop battery packs" Tags="&lt;battery&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2902" PostTypeId="1" CreationDate="2014-05-11T00:32:34.037" Score="4" ViewCount="506" Body="&lt;p&gt;I was wondering if you could reccomend possible solutions for locating a robot within a multilevel house.  What seems obvious to me is that need an altitude sensor to derive the story the robot, and a compass sensor to derive the heading.  However I was wondering what I could use to locate the robots xy position in the house.  If this requirement is unclear, imagine that I have to map a dot representing my robot position to an image of the current floor from the top.&lt;br&gt;&#xA;My original idea was to use GPS, however as I need submeter accuracy that would be incredibly expensive.  I also considered Monti-Carlo localization, however that requires no obstruction between sonar sensors and walls.  It is also a significant task programically.  I had an idea to place 3 wireless beacons of some sort on the vertexes of an equilateral triangle surrounding the house, then triangulate my position using distance from each beacon.  However, I have no idea how I would go about this hardware-wise.  Do any of these ideas seem viable, and if so do you have suggestions on how to implement them? Otherwise, can you reccomend an easier or cheaper alternative?  My platform is essentially an arduino hooked up to sensors and motor drivers connected to java on a laptop over serial.  Thanks.&lt;/p&gt;&#xA;" OwnerUserId="4238" LastActivityDate="2014-05-14T14:42:17.123" Title="Solutions for Finding Position and Heading in a Multi-Level House" Tags="&lt;arduino&gt;&lt;sensors&gt;&lt;localization&gt;&lt;gps&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2905" PostTypeId="1" CreationDate="2014-05-12T16:40:53.580" Score="4" ViewCount="1669" Body="&lt;p&gt;We have builded a quadcopter that use the flight manager kk2.1.5 with the latest firmware. When we increase the throttle, it flight. When we keep the hand on the stick we are able to maintain it but when we don't touch to the throttle, it goes up and down.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can see an example on &lt;a href=&quot;http://youtu.be/N0BhK1tS2YQ&quot; rel=&quot;nofollow&quot;&gt;this video&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We have tried different values for PID but we don't know what is the best for us. We have a large quadcopter with medium propellers (may be too small). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does the weight of the quadpcoter or the width of the propellers can be a factor? What can be the problem?&lt;/p&gt;&#xA;" OwnerUserId="4291" LastActivityDate="2014-09-10T19:44:15.947" Title="Grasshopper effect on a quadcopter with kk2.1.5" Tags="&lt;quadcopter&gt;&lt;multi-rotor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2908" PostTypeId="1" CreationDate="2014-05-12T19:19:32.220" Score="3" ViewCount="487" Body="&lt;p&gt;I am building a Quadcopter using the Sparkfun Razor IMU which outputs the Roll, Pitch and Yaw axes values at 50 Hz, which limits the operations of the controller(implemented on Arduino IMU), to 50 Hz mx itslef. Please tell me if flashing the ESCs(EMax 40A) with the Simon K firmware can do me any good. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'll be grateful. :)&lt;/p&gt;&#xA;" OwnerUserId="4367" LastActivityDate="2014-05-20T13:10:59.957" Title="Simon K firmware when the IMU outputs at 50HZ" Tags="&lt;arduino&gt;&lt;quadcopter&gt;&lt;imu&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2909" PostTypeId="2" ParentId="2908" CreationDate="2014-05-13T04:21:20.387" Score="1" Body="&lt;p&gt;Simonk K firmware can give you ESC update rate upto 400Hz. But your output rate is limited to 50Hz as your control loop cannot run at more than 50Hz. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;High ESC update rate will only be hepful when you can run your control loop at higher frequency.&lt;/p&gt;&#xA;" OwnerUserId="2118" LastEditorUserId="2118" LastEditDate="2014-05-13T11:42:35.653" LastActivityDate="2014-05-13T11:42:35.653" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2910" PostTypeId="2" ParentId="2902" CreationDate="2014-05-13T14:25:09.540" Score="1" Body="&lt;p&gt;GPS won't give you the accuracy you are looking for. Outdoors it's good for around 1-3 m, indoors if you get a signal at all the multipath will increase your error. There are better GPS technologies out there such as RTK and PPP but their performance degrades significantly when the view of the sky is obstructed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you don't have line of sight to the landmarks, your options are a bit more limited. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;RF trilateration is a good direction to investigate; there's a lot of interesting research these days into using COTS wifi access points for this purpose. You'll have to read some fairly recent research papers to find an algorithm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is actually a pretty difficult problem that you are trying to solve. To make it easier, I would suggest making the problem simpler. Try using a large number of artificial landmarks that are identifiable (such as QR codes or April tags), and use the landmark IDs to indicate the floor of the house you are on. (You can color code them by floor, for example.) From there you can implement a basic SLAM algorithm to find your position. It will be even easier if you map out the locations of the landmarks in advance, because then instead of SLAM you can just do triangulation.&lt;/p&gt;&#xA;" OwnerUserId="4373" LastEditorUserId="4373" LastEditDate="2014-05-14T14:42:17.123" LastActivityDate="2014-05-14T14:42:17.123" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2913" PostTypeId="2" ParentId="2905" CreationDate="2014-05-13T16:58:28.893" Score="1" Body="&lt;p&gt;You've correctly identified 2 out of the 3 possible sources for the problem you're having.  They are:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;The propellers or motors may be inadequate for the weight of the quadcopter.&lt;/strong&gt;  Since the propellers are able to lift the quadcopter off the ground, they are probably not causing the problem you see.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;The PID settings may be incorrect.&lt;/strong&gt;  Look at &lt;a href=&quot;https://robotics.stackexchange.com/q/2297/350&quot;&gt;this question&lt;/a&gt; for some advice on tuning them.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;The altitude sensor may be faulty.&lt;/strong&gt; If the PID isn't getting good data in, then it won't be able to act appropriately.  If your quadcopter can't measure altitude much beyond zero, it could explain the behavior you're seeing.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="350" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2014-05-13T16:58:28.893" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2914" PostTypeId="2" ParentId="2899" CreationDate="2014-05-13T17:54:26.217" Score="0" Body="&lt;p&gt;None of what I will say in this answer is safe, and you should not even attempt it without proper supervision, safety equipment and a class D fire extinguisher around.  &lt;a href=&quot;http://www.batteryspace.com/warningsforusingbatteries.aspx&quot; rel=&quot;nofollow&quot;&gt;Lithium ion batteries need to be handled carefully, in both the mechanical and electrical sense.  Physical stress can cause fires, as can improperly charging or discharging.&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given the danger of reverse engineering the cell management circuitry in your batteries, it would be better to disassemble them and treat them as individual cells.  Any of the cells that haven't gone flat need to be grouped to minimize any mismatches in their charge levels or lifetimes.  Then you can look at constructing a battery management system that can safely deal with the cells you have.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-05-13T17:54:26.217" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2915" PostTypeId="1" CreationDate="2014-05-13T18:01:59.470" Score="3" ViewCount="663" Body="&lt;p&gt;I am confused about how adding a D (which adds a zero to the complete system) decreases the speed of the system. But when we normally add a zero to the system, it causes the system to overshoot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The same goes for the I part of the PID. Normally when we add a pole to the system, it has less overshoot, but at the same time the integrator increases the overshoot!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I make sense out of this inverse relation?&lt;/p&gt;&#xA;" OwnerUserId="4376" LastEditorUserId="158" LastEditDate="2015-01-28T16:58:53.070" LastActivityDate="2018-12-15T18:44:56.203" Title="Effect of adding a Pole and Zero to PID" Tags="&lt;control&gt;&lt;pid&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2918" PostTypeId="1" CreationDate="2014-05-13T23:22:29.153" Score="1" ViewCount="502" Body="&lt;p&gt;I am working on a project where a dslr camera will be rotated on a tripod on 2 axes. I'm definitely using nema 17 motors as those are what I have. The motors will rotate 30 degrees every 5 seconds in normal usage so speed is not a requirement. The weight of the camera is 1170g and I'm using 3d printed parts for the remainder of the mount. I tried running nema 17 stepper motors off a Adafruit Motor Shield V2 but the whole thing overheats (battery, driver, and motor). By the way, the motor will be controlled by an Arduino. I need to find another motor controller to use. I looked on ebay and things like this came up for 20 dollars which seems too good to be true. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is what motor driver should I use for this project as I have little experience with them outside of Arduino shields&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/hPqyQ.jpg&quot; alt=&quot;A motor controller&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="4380" LastEditorUserId="4380" LastEditDate="2014-05-13T23:29:29.470" LastActivityDate="2014-05-16T18:22:19.760" Title="Suggestions for stepper motor controllers" Tags="&lt;arduino&gt;&lt;motor&gt;&lt;cameras&gt;&lt;stepper-driver&gt;" AnswerCount="2" CommentCount="0" ClosedDate="2014-06-04T11:53:00.393" ContentLicense="CC BY-SA 3.0" />
  <row Id="2919" PostTypeId="1" CreationDate="2014-05-14T09:48:54.027" Score="1" ViewCount="100" Body="&lt;p&gt;How do i use the Nicolas Ziegel approach when the root locus plot of my system never becomes marginally stable , for any gain (unless it is negative).. ??&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How do i estimate my ultimate gain value????&lt;/p&gt;&#xA;" OwnerUserId="4376" LastEditorUserId="4376" LastEditDate="2014-05-14T09:56:49.067" LastActivityDate="2021-01-10T18:03:44.893" Title="How do i use the Nicolas ziegel approach if my system never becomes unstable?" Tags="&lt;control&gt;&lt;pid&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="2920" PostTypeId="1" CreationDate="2014-05-14T17:47:55.537" Score="7" ViewCount="1031" Body="&lt;p&gt;I am trying to understand the effects of P, I and D constants in a PID controller on a system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far I've understood, P and I make the system 'faster', and D makes it 'slower'(which I read in books), but I don't actually understand what makes it go 'fast' or 'slow'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How an integrator causes overshoot and all things like that. It makes sense that the P part causes overshoot, since it adds a gain. But what is the integrator doing? I want some kind of mathematical understanding on how all these parameters affect the system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know how they work individually, but I'm having a hard time understanding, how it affects the system as a whole. For example, how does a Zero added to the system lead to decrease in overshoot, but when normally adding a zero to a system would create more overshoot.&lt;/p&gt;&#xA;" OwnerUserId="4376" LastEditorUserId="5605" LastEditDate="2014-07-02T06:56:29.957" LastActivityDate="2014-07-05T16:49:57.043" Title="understanding the PID controller" Tags="&lt;pid&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2921" PostTypeId="1" AcceptedAnswerId="2938" CreationDate="2014-05-14T20:16:06.100" Score="4" ViewCount="7558" Body="&lt;p&gt;Many websites say that analog servo motors work on 50Hz and digital servo motors work on 300Hz. My question is, does this difference apply only to the inner control loop of the servo or does the user of the digital servo actually provide 300Hz PWM signal? To rephrase, are all (most) servos including digital ones controlled with 50Hz PWM, or are digital ones specifically controlled with 300Hz PWM? Thanks&lt;/p&gt;&#xA;" OwnerUserId="4017" LastActivityDate="2018-02-21T15:16:12.687" Title="Controlling digital servos" Tags="&lt;rcservo&gt;&lt;pwm&gt;&lt;servomotor&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2922" PostTypeId="2" ParentId="2921" CreationDate="2014-05-15T06:56:45.617" Score="0" Body="&lt;p&gt;The difference between digital and analog servo is analog servo is controlled by custom logic chip and digital servo is controlled by micro controllers. Custom logic chips can control motor (inside servo) at 50Hz while micro controllers can control at up to 300Hz. Both of them take same user input which is generally pwm pulse ranging from 800ms-2200ms. The difference is inside servo. Higher motor update rate gives more precise and fast control. You can also refer &lt;a href=&quot;http://www.futaba-rc.com/servos/digitalservos.pdf&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Update Rate for user input pwm can go upto 300Hz in case of digital servo and 50Hz in case of analog servo. One should be careful as over driving this pwm frequency may create jitters and sometimes fry your servo.&lt;/p&gt;&#xA;" OwnerUserId="2118" LastEditorUserId="2118" LastEditDate="2014-05-16T18:38:04.423" LastActivityDate="2014-05-16T18:38:04.423" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2923" PostTypeId="2" ParentId="2868" CreationDate="2014-05-15T07:33:53.557" Score="0" Body="&lt;p&gt;error = distance to left - distance to right, goal (set point) is 0.&lt;/p&gt;&#xA;" OwnerUserId="274" LastActivityDate="2014-05-15T07:33:53.557" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2924" PostTypeId="2" ParentId="2882" CreationDate="2014-05-15T08:25:33.563" Score="1" Body="&lt;p&gt;You should keep as a guideline that you should NOT modify the external package. If you have to, it should be in a way that can in the end be integrated upstream (i.e. be sent as a patch to the original developers and integrated there).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First thing: what name to give to the package ?&#xA; - do NOT use the external/ category. This is deprecated and no new packages should be added to it&#xA; - instead, find a &lt;a href=&quot;http://rock-robotics.org/stable/documentation/packages/package_structure.html&quot; rel=&quot;nofollow&quot;&gt;proper category&lt;/a&gt; to put it in. The basename (the name of the package inside the category) is probably easy to derive from the library's own name or the name of the device it drives (if it is a device driver, Rock has special rules for device driver names, devicetype_devicename as e.g. imu_xsens).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ideally, the external package follows standard practice: uses a standard build system such as CMake or autotools and provides an install target. It can be &lt;a href=&quot;http://rock-robotics.org/stable/documentation/autoproj/adding_packages.html&quot; rel=&quot;nofollow&quot;&gt; added to the autoproj configuration like any other package&lt;/a&gt;. Ideally, a manifest file should be added in the package set in the manifests/&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the package does NOT follow these practices, then you will unfortunately have to get your hands dirty. You will have to create a special autobuild handler that handles your package manually. There are examples for these in the rock package set&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;import_package 'drivers/aria' do |pkg|&#xA;  def pkg.do_build&#xA;    # Perform install steps&#xA;    # Use run('build', Autobuild.tool(:command_name), 'argument', 'to', 'the', 'command') to run an external command&#xA;    # For instance&#xA;    #   run('build', Autobuild.tool(:make))&#xA;    # FileUtils.install to copy files&#xA;  end&#xA;&#xA;  def pkg.do_install&#xA;    # Perform install steps&#xA;    # Use run('install', Autobuild.tool(:command_name), 'argument', 'to', 'the', 'command') to run an external command&#xA;    # FileUtils.install to copy files&#xA;    # Files should be installed in the prefix path returned by #prefix&#xA;  end&#xA;&#xA;  def pkg.do_pkgconfig&#xA;    pkgconfig_dir     = File.join(prefix, 'lib', &quot;pkgconfig&quot;)&#xA;    FileUtils.mkdir_p pkgconfig_dir&#xA;    # Generate a proper pkg-config file that you install in&#xA;    # pkgconfig_dir&#xA;    # A good way is to save a template file in the package&#xA;    # set directly and generate the file using ERB&#xA;  end&#xA;&#xA;  pkg.post_install do&#xA;    pkg.progress_start &quot;building %s&quot; do&#xA;      pkg.do_build&#xA;    end&#xA;    pkg.progress_start &quot;installing %s&quot; do&#xA;      pkg.do_install&#xA;    end&#xA;    pkg.progress_start &quot;generating pkgconfig file for %s&quot; do&#xA;      pkg.do_pkgconfig&#xA;    end&#xA;  end&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="56" LastActivityDate="2014-05-15T08:25:33.563" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2925" PostTypeId="1" AcceptedAnswerId="2946" CreationDate="2014-05-15T10:10:56.020" Score="7" ViewCount="5865" Body="&lt;p&gt;Why doesn't a PID only consisting of ID exist?&lt;/p&gt;&#xA;" OwnerUserId="4376" LastActivityDate="2017-10-30T06:55:41.317" Title="Why does a ID controller not exist?" Tags="&lt;control&gt;&lt;pid&gt;" AnswerCount="5" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2926" PostTypeId="2" ParentId="2925" CreationDate="2014-05-15T10:20:28.060" Score="1" Body="&lt;p&gt;I have very basic knowledge of control theory, but:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/PID_controller#Proportional_term&quot; rel=&quot;nofollow&quot;&gt;Wikipedia&lt;/a&gt; says (emphasis mine):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;A high proportional gain results in a large change in the output for a given change in the error. If the proportional gain is too high, the system can become unstable (see the section on loop tuning). In contrast, a small gain results in a small output response to a large input error, and a less responsive or less sensitive controller. &lt;strong&gt;If the proportional gain is too low, the control action may be too small when responding to system disturbances.&lt;/strong&gt; Tuning theory and industrial practice indicate that the proportional term should contribute the bulk of the output change.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In other words, when the proportional gain is too low, the control would be too slow to be usable, because its response to change would effectively be negligible. You can imagine making it 0 would only make things worse.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So while an ID controller can exist in theory, it would be pretty useless.&lt;/p&gt;&#xA;" OwnerUserId="158" LastEditorUserId="158" LastEditDate="2014-05-19T13:56:56.643" LastActivityDate="2014-05-19T13:56:56.643" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="2927" PostTypeId="2" ParentId="2894" CreationDate="2014-05-15T10:54:55.010" Score="2" Body="&lt;p&gt;The majority of the noise you're hearing is not from the motor itself but from gearing, which both servo motors and drills have a lot of.  However, if you don't have a gearbox then when power is cut the torque exherted by the motor will become zero and your arm will fall.  I would reccomend a standard brushed DC motor with an encoder for precise control, however a special gearbox designed for less noise.  An example of this are the segway gearboxes, which are supposedly designed to be quiet and harmonic.  Here's a cheaper example, however it does not have the torque or speeed you are looking for.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.robotshop.com/en/12v-silent-dc-motor-146rpm-encoder.html&quot; rel=&quot;nofollow&quot;&gt;http://www.robotshop.com/en/12v-silent-dc-motor-146rpm-encoder.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another option are stepper motors, which at certain sizes can offer huge amounts of torque with no gearing.  If your mannequin is mounted to a wall would it be possible to mount motors behind the wall, having them run winches through pulleys to manipulate the appendages?  This would eliminate the issue as it would allow some form of shield inbetween the noise and the application. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, if you're simply articulating appendages pnuematics may be the better option&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this helps.&lt;/p&gt;&#xA;" OwnerUserId="4238" LastActivityDate="2014-05-15T10:54:55.010" CommentCount="17" ContentLicense="CC BY-SA 3.0" />
  <row Id="2928" PostTypeId="2" ParentId="2925" CreationDate="2014-05-15T13:02:06.297" Score="4" Body="&lt;p&gt;You almost never see ID controllers because they generally don't do anything useful. Here is what they can do:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) The D part will respond to changes in the system. It will try to correct and move the system back to 0, but once it reaches steady steady the D part is no longer active. Note that it does NOT matter where that steady state is; it could be 0 or 10 or 100.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) Now imagine that the system is moving very slowly, so the D part is negligible. The I part will drive the integral of the error to 0. Again, this is NOT the same as driving the error to zero. Imagine the system is disturbed from 0 to -5. Now the integral will start to become negative and the controller will send positive commands. Once the system reaches 0 again, the integral is still negative so the controller is still applying positive commands and the system moves positive. Eventually the integral reaches zero but the system is now far into positive territory so the whole process repeats itself in the reverse.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Without P, the controller just doesn't reliably do what a control system is supposed to do: drive the error to 0.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2014-05-15T13:02:06.297" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="2930" PostTypeId="1" CreationDate="2014-05-16T10:15:21.567" Score="2" ViewCount="1810" Body="&lt;p&gt;I have a kk2.1.5 and I fly with the self-level on. In the kk2, there are two menus. One to set PI-settings and another with selflevel-settings. Both enable to set P-Gain and I-Gain.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it important to have good PI-settings when the self-level is on, or is setting good values in selflevel-settings sufficient?&lt;/p&gt;&#xA;" OwnerUserId="4291" LastEditorUserId="350" LastEditDate="2014-05-20T18:56:19.047" LastActivityDate="2014-08-18T19:53:38.427" Title="Is it important to have good PI settings when we running in self-level with kk2?" Tags="&lt;multi-rotor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2931" PostTypeId="1" AcceptedAnswerId="2941" CreationDate="2014-05-16T14:37:35.183" Score="1" ViewCount="809" Body="&lt;p&gt;I have built a quad copter completely from scratch (electronics, mechanics and software). &#xA;I am now at the point where all my sensor data looks correct and when I tilt the quad copter the correct motors increase and decrease.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have been trying to tune the PIDs for a couple of days now, in rate mode it stays level and rotates at roughly the correct degrees per second when I give it a command.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In stability mode a lot of the time it just spins around the axis and when I did get it stable it kept rotating from upright to upside down and then maintaining an upside down flat position. I have come to the conclusion that I am either doing something completely wrong or I have some + - signs mixed around somewhere.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would anyone who is knowledgeable about quad copter control code be able to take a look at what I have done and how it works as I'm really struggling to work out what needs to change and what I should try next.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My flight control code is posted below, the other relevant classes are hardware.h and main.cpp&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &quot;mbed.h&quot;&#xA;#include &quot;rtos.h&quot;&#xA;#include &quot;hardware.h&quot;&#xA;&#xA;&#xA;//Declarations&#xA;float Constrain(const float in, const float min, const float max);&#xA;float map(float x, float in_min, float in_max, float out_min, float out_max);&#xA;void GetAttitude();&#xA;void Task500Hz(void const *n);&#xA;void Task10Hz();&#xA;&#xA;&#xA;//Variables&#xA;float _gyroRate[3] ={}; // Yaw, Pitch, Roll&#xA;float _ypr[3] = {0,0,0}; // Yaw, pitch, roll&#xA;float _yawTarget = 0;&#xA;int _notFlying = 0; &#xA;float _altitude = 0;&#xA;int _10HzIterator = 0;&#xA;float _ratePIDControllerOutputs[3] = {0,0,0}; //Yaw, pitch, roll&#xA;float _stabPIDControllerOutputs[3] = {0,0,0}; //Yaw, pitch, roll&#xA;float _motorPower [4] = {0,0,0,0};&#xA;&#xA;&#xA;&#xA;&#xA;//Timers&#xA;RtosTimer *_updateTimer;&#xA;&#xA;&#xA;// A thread to monitor the serial ports&#xA;void FlightControllerThread(void const *args) &#xA;{  &#xA;    //Update Timer&#xA;    _updateTimer = new RtosTimer(Task500Hz, osTimerPeriodic, (void *)0);&#xA;    int updateTime = (1.0 / UPDATE_FREQUENCY) * 1000;&#xA;    _updateTimer-&amp;gt;start(updateTime);&#xA;&#xA;    // Wait here forever&#xA;    Thread::wait(osWaitForever);&#xA;}&#xA;&#xA;&#xA;//Constrains value to between min and max&#xA;float Constrain(const float in, const float min, const float max)&#xA;{&#xA;    float out = in;&#xA;    out = out &amp;gt; max ? max : out;&#xA;    out = out &amp;lt; min ? min : out;&#xA;    return out;&#xA;}&#xA;&#xA;&#xA;//Maps input to output&#xA;float map(float x, float in_min, float in_max, float out_min, float out_max)&#xA;{&#xA;    return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;&#xA;}&#xA;&#xA;&#xA;//Zeros values&#xA;void GetAttitude()&#xA;{&#xA;    //Take off zero values to account for any angle inbetween the PCB level and ground&#xA;    _ypr[1] = _ypr[1] - _zeroValues[1];&#xA;    _ypr[2] = _ypr[2] - _zeroValues[2];&#xA;&#xA;    //Swap pitch and roll because IMU is mounted at a right angle to the board&#xA;            //Gyro data does need swapping - done within freeIMU class&#xA;    float pitch = _ypr[2];&#xA;    float roll = _ypr[1];&#xA;    _ypr[1] = pitch;&#xA;    _ypr[2] = roll;&#xA;}&#xA;&#xA;&#xA;void Task500Hz(void const *n)&#xA;{&#xA;    _10HzIterator++;&#xA;    if(_10HzIterator % 50 == 0)&#xA;    {&#xA;        Task10Hz();&#xA;    }&#xA;&#xA;&#xA;    //Get IMU data&#xA;    _freeIMU.getYawPitchRoll(_ypr);&#xA;    _freeIMU.getRate(_gyroRate);&#xA;    GetAttitude();&#xA;&#xA;    //Rate mode&#xA;    if(_rate == true &amp;amp;&amp;amp; _stab == false)&#xA;    {&#xA;        //Update rate PID process value with gyro rate&#xA;        _yawRatePIDController-&amp;gt;setProcessValue(_gyroRate[0]);&#xA;        _pitchRatePIDController-&amp;gt;setProcessValue(_gyroRate[1]);&#xA;        _rollRatePIDController-&amp;gt;setProcessValue(_gyroRate[2]);&#xA;&#xA;        //Update rate PID set point with desired rate from RC&#xA;        _yawRatePIDController-&amp;gt;setSetPoint(_rcMappedCommands[0]);&#xA;        _pitchRatePIDController-&amp;gt;setSetPoint(_rcMappedCommands[1]);&#xA;        _rollRatePIDController-&amp;gt;setSetPoint(_rcMappedCommands[2]);&#xA;&#xA;        //Compute rate PID outputs&#xA;        _ratePIDControllerOutputs[0] = _yawRatePIDController-&amp;gt;compute();&#xA;        _ratePIDControllerOutputs[1] = _pitchRatePIDController-&amp;gt;compute();&#xA;        _ratePIDControllerOutputs[2] = _rollRatePIDController-&amp;gt;compute();&#xA;    }&#xA;    //Stability mode&#xA;    else&#xA;    {&#xA;        //Update stab PID process value with ypr&#xA;        _yawStabPIDController-&amp;gt;setProcessValue(_ypr[0]);&#xA;        _pitchStabPIDController-&amp;gt;setProcessValue(_ypr[1]);&#xA;        _rollStabPIDController-&amp;gt;setProcessValue(_ypr[2]);&#xA;&#xA;        //Update stab PID set point with desired angle from RC&#xA;        _yawStabPIDController-&amp;gt;setSetPoint(_yawTarget);&#xA;        _pitchStabPIDController-&amp;gt;setSetPoint(_rcMappedCommands[1]);&#xA;        _rollStabPIDController-&amp;gt;setSetPoint(_rcMappedCommands[2]);&#xA;&#xA;        //Compute stab PID outputs&#xA;        _stabPIDControllerOutputs[0] = _yawStabPIDController-&amp;gt;compute();&#xA;        _stabPIDControllerOutputs[1] = _pitchStabPIDController-&amp;gt;compute();&#xA;        _stabPIDControllerOutputs[2] = _rollStabPIDController-&amp;gt;compute();&#xA;&#xA;        //If pilot commanding yaw&#xA;        if(abs(_rcMappedCommands[0]) &amp;gt; 0)&#xA;        {  &#xA;            _stabPIDControllerOutputs[0] = _rcMappedCommands[0];  //Feed to rate PID (overwriting stab PID output)&#xA;            _yawTarget = _ypr[0];&#xA;        }&#xA;&#xA;        //Update rate PID process value with gyro rate&#xA;        _yawRatePIDController-&amp;gt;setProcessValue(_gyroRate[0]);&#xA;        _pitchRatePIDController-&amp;gt;setProcessValue(_gyroRate[1]);&#xA;        _rollRatePIDController-&amp;gt;setProcessValue(_gyroRate[2]);&#xA;&#xA;        //Update rate PID set point with desired rate from stab PID&#xA;        _yawRatePIDController-&amp;gt;setSetPoint(_stabPIDControllerOutputs[0]);&#xA;        _pitchRatePIDController-&amp;gt;setSetPoint(_stabPIDControllerOutputs[1]);&#xA;        _rollRatePIDController-&amp;gt;setSetPoint(_stabPIDControllerOutputs[2]);&#xA;&#xA;        //Compute rate PID outputs&#xA;        _ratePIDControllerOutputs[0] = _yawRatePIDController-&amp;gt;compute();&#xA;        _ratePIDControllerOutputs[1] = _pitchRatePIDController-&amp;gt;compute();&#xA;        _ratePIDControllerOutputs[2] = _rollRatePIDController-&amp;gt;compute();&#xA;    }&#xA;&#xA;    //Testing&#xA;    _ratePIDControllerOutputs[0] = 0; // yaw&#xA;    //_ratePIDControllerOutputs[1] = 0; // pitch&#xA;    _ratePIDControllerOutputs[2] = 0; // roll&#xA;&#xA;&#xA;    //Calculate motor power if flying&#xA;    if(_rcMappedCommands[3] &amp;gt; 0.1 &amp;amp;&amp;amp; _armed == true)&#xA;    {&#xA;        //Constrain motor power to 1, this means at max throttle there is no overhead for stabilising&#xA;        _motorPower[0] = Constrain((_rcMappedCommands[3] + _ratePIDControllerOutputs[1] - _ratePIDControllerOutputs[2] + _ratePIDControllerOutputs[0]), 0.0, 1.0);&#xA;        _motorPower[1] = Constrain((_rcMappedCommands[3] + _ratePIDControllerOutputs[1] + _ratePIDControllerOutputs[2] - _ratePIDControllerOutputs[0]), 0.0, 1.0);&#xA;        _motorPower[2] = Constrain((_rcMappedCommands[3] - _ratePIDControllerOutputs[1] + _ratePIDControllerOutputs[2] + _ratePIDControllerOutputs[0]), 0.0, 1.0);&#xA;        _motorPower[3] = Constrain((_rcMappedCommands[3] - _ratePIDControllerOutputs[1] - _ratePIDControllerOutputs[2] - _ratePIDControllerOutputs[0]), 0.0, 1.0);&#xA;&#xA;&#xA;        //Map 0-1 value to actual pwm pulsewidth 1060 - 1860&#xA;        _motorPower[0] = map(_motorPower[0], 0.0, 1.0, MOTORS_MIN, 1500); //Reduced to 1500 to limit power for testing&#xA;        _motorPower[1] = map(_motorPower[1], 0.0, 1.0, MOTORS_MIN, 1500);&#xA;        _motorPower[2] = map(_motorPower[2], 0.0, 1.0, MOTORS_MIN, 1500);&#xA;        _motorPower[3] = map(_motorPower[3], 0.0, 1.0, MOTORS_MIN, 1500);&#xA;    }&#xA;&#xA;&#xA;    //Not flying&#xA;    else if(_armed == true)&#xA;    {&#xA;        _yawTarget = _ypr[0];&#xA;&#xA;        //Set motors to armed state&#xA;        _motorPower[0] = MOTORS_ARMED;&#xA;        _motorPower[1] = MOTORS_ARMED;&#xA;        _motorPower[2] = MOTORS_ARMED;&#xA;        _motorPower[3] = MOTORS_ARMED;&#xA;&#xA;        _notFlying ++;&#xA;        if(_notFlying &amp;gt; 500) //Not flying for 1 second&#xA;        {&#xA;            //Reset iteratior&#xA;            _notFlying = 0;&#xA;&#xA;            //Reset I&#xA;            _yawRatePIDController-&amp;gt;reset();&#xA;            _pitchRatePIDController-&amp;gt;reset();&#xA;            _rollRatePIDController-&amp;gt;reset();&#xA;            _yawStabPIDController-&amp;gt;reset();&#xA;            _pitchStabPIDController-&amp;gt;reset();&#xA;            _rollStabPIDController-&amp;gt;reset();&#xA;        }&#xA;    } &#xA;    else&#xA;    {&#xA;        //Disable Motors&#xA;        _motorPower[0] = MOTORS_OFF;&#xA;        _motorPower[1] = MOTORS_OFF;&#xA;        _motorPower[2] = MOTORS_OFF;&#xA;        _motorPower[3] = MOTORS_OFF;&#xA;    }&#xA;&#xA;    //Set motor power&#xA;    _motor1.pulsewidth_us(_motorPower[0]);&#xA;    _motor2.pulsewidth_us(_motorPower[1]);&#xA;    _motor3.pulsewidth_us(_motorPower[2]);&#xA;    _motor4.pulsewidth_us(_motorPower[3]);&#xA;}&#xA;&#xA;&#xA;//Print data&#xA;void Task10Hz()&#xA;{&#xA;    int batt = 0;&#xA;    _wirelessSerial.printf(&quot;&amp;lt;%1.6f:%1.6f:%1.6f:%1.6f:%1.6f:%1.6f:%1.6f:%d:%1.6f:%1.6f:%1.6f:%1.6f:%1.6f:%1.6f:%d:%d:%d:%d:%1.6f:%1.6f:%1.6f:%1.2f:%1.2f:%1.2f:%1.2f:%1.8f:%1.8f:%1.8f:%1.8f:%1.8f:%1.8f:%1.8f:%1.8f:%1.8f:%1.8f:%1.8f:%1.8f:%1.8f:%1.8f:%1.8f:%1.8f:%1.8f:%1.8f&amp;gt;&quot;,&#xA;    _motorPower[0], _motorPower[1], _motorPower[2], _motorPower[3], _ypr[0], _ypr[1], _ypr[2], batt, _ratePIDControllerOutputs[0], _ratePIDControllerOutputs[1], _ratePIDControllerOutputs[2], _stabPIDControllerOutputs[0], _stabPIDControllerOutputs[1], _stabPIDControllerOutputs[2], _armed, _initialised, _rate, _stab, _gyroRate[0], _gyroRate[1], _gyroRate[2], _rcMappedCommands[0], _rcMappedCommands[1], _rcMappedCommands[2], _rcMappedCommands[3], _yawRatePIDControllerP, _yawRatePIDControllerI, _yawRatePIDControllerD, _pitchRatePIDControllerP, _pitchRatePIDControllerI, _pitchRatePIDControllerD, _rollRatePIDControllerP, _rollRatePIDControllerI, _rollRatePIDControllerD, _yawStabPIDControllerP, _yawStabPIDControllerI, _yawStabPIDControllerD, _pitchStabPIDControllerP, _pitchStabPIDControllerI, _pitchStabPIDControllerD, _rollStabPIDControllerP, _rollStabPIDControllerI, _rollStabPIDControllerD);    &#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The whole program can be seen on my mBed page at &lt;a href=&quot;http://mbed.org/users/joe4465/code/QuadMK6/&quot; rel=&quot;nofollow&quot;&gt;http://mbed.org/users/joe4465/code/QuadMK6/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you need any more info or something explaining let me know.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If anyone can point me in the right direction or has any idea of what I should try next it would be very much appreciated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&#xA;Joe&lt;/p&gt;&#xA;" OwnerUserId="4212" LastActivityDate="2014-05-18T22:23:37.600" Title="Quad copter attitude control" Tags="&lt;quadcopter&gt;&lt;pid&gt;&lt;imu&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2932" PostTypeId="2" ParentId="2918" CreationDate="2014-05-16T14:39:38.567" Score="0" Body="&lt;p&gt;A &quot;nema 17 stepper motor ... controlled by an Arduino&quot;&#xA;is the same setup used by RepRap 3D printers.&#xA;Perhaps one of the stepper drivers on the &lt;a href=&quot;http://reprap.org/wiki/stepper_motor_driver#Stepper_drivers&quot; rel=&quot;nofollow&quot;&gt;&quot;stepper motor driver&quot; page at RepRep&lt;/a&gt; would be adequate for your project.&#xA;That page also has many relatively unbiased comments about each one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One thing that many people regret: they save a bunch of money buying an extremely low-cost stepper motor controller, and then they are pulling their hair out for weeks because of inadequate documentation.&#xA;Stuff with good documentation often costs a little more, but in my opinion is well worth it.&lt;/p&gt;&#xA;" OwnerUserId="187" LastActivityDate="2014-05-16T14:39:38.567" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2933" PostTypeId="1" AcceptedAnswerId="4822" CreationDate="2014-05-16T17:10:56.370" Score="1" ViewCount="337" Body="&lt;p&gt;My FRC team will recently upgrade from &lt;a href=&quot;http://en.wikipedia.org/wiki/CompactRIO&quot; rel=&quot;nofollow&quot;&gt; CompactRIO &lt;/a&gt; to RoboRIO.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CompactRIO only supports up to Java 1.4.&#xA;What version of Java does RoboRIO?&lt;/p&gt;&#xA;" OwnerUserId="4392" LastActivityDate="2014-10-24T19:03:05.600" Title="Does RoboRIO support Java 8?" Tags="&lt;microcontroller&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2934" PostTypeId="2" ParentId="2918" CreationDate="2014-05-16T18:22:19.760" Score="0" Body="&lt;p&gt;I decided on the RAMPS shield from the reprap open hardware initiative. The stepper motors are cheap and the board is too when bought from certain places. The board is expandable and has many possible reuses. Also the pololu drivers are plenty powerful for this project with up to 2.2 amps with proper heat management. They accept ranges up to 45 volts in some cases. Also I have never seen one break on a reprap printer with over 500 prints.&lt;/p&gt;&#xA;" OwnerUserId="4380" LastActivityDate="2014-05-16T18:22:19.760" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2935" PostTypeId="1" AcceptedAnswerId="2947" CreationDate="2014-05-16T23:06:36.733" Score="3" ViewCount="474" Body="&lt;p&gt;I am trying to understand how a PID controller moves the poles and zeros of an transfer function. &#xA;I've been playing a bit with it, but aren't able to see some kind of connection. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I mean that P and I rises the Overshoot which would mean that the damping ratio gets smaller, thereby should  away from the real axis. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;and D should should do the opposite, but it doesn't seem to be true with the examples i've used.. am i doing something wrong??&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Well i kind of just want a general knowlegde of how it affect second order systems. &lt;/p&gt;&#xA;" OwnerUserId="4376" LastEditorUserId="4376" LastEditDate="2014-05-17T08:47:27.830" LastActivityDate="2014-05-19T07:30:21.260" Title="How PID affect the Root locus of a close loop transfer function" Tags="&lt;control&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2936" PostTypeId="1" AcceptedAnswerId="4999" CreationDate="2014-05-17T11:58:48.997" Score="2" ViewCount="123" Body="&lt;p&gt;I'm currently working on a school project about simulating robots scanning an area, but it has been a struggle to find what strategy the robots should use.  Here are the details:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am given a certain amount of robots, each with a sensing range of $r$.  They spawn one after another.  Their task to scan a rectangular area.  They can only communicate with each other when they are within communication range. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am looking for the best strategy, (i.e. time efficient solution) for this. &#xA;Any reply or clue to the strategy will be appreciated. &lt;/p&gt;&#xA;" OwnerUserId="4399" LastEditorUserId="110" LastEditDate="2016-01-14T16:22:12.413" LastActivityDate="2016-01-14T16:22:12.413" Title="Best strategy for area scanning using little sensing bots" Tags="&lt;mobile-robot&gt;&lt;sensors&gt;&lt;coverage&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2937" PostTypeId="1" CreationDate="2014-05-17T20:29:21.907" Score="3" ViewCount="457" Body="&lt;p&gt;I have this close loop transfer function:&#xA;&lt;a href=&quot;http://snag.gy/Vh1SM.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.snag.gy/Vh1SM.jpg&quot; alt=&quot;close loop transfer&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It overshoots, but why? The poles are placed such that that the damping = 1, so why the overshoot?&lt;/p&gt;&#xA;" OwnerUserId="4376" LastEditorUserId="-1" LastEditDate="2017-03-10T09:42:49.190" LastActivityDate="2014-08-28T13:25:30.440" Title="how does poles and zeroes affect the step response of an transfer function?" Tags="&lt;control&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2938" PostTypeId="2" ParentId="2921" CreationDate="2014-05-18T04:57:58.843" Score="3" Body="&lt;p&gt;Digital servos accept the same pulse width and pulse repetition rate as regular analog servos.&#xA;&lt;a href=&quot;http://letsmakerobots.com/content/digital-servos&quot; rel=&quot;nofollow&quot;&gt;a&lt;/a&gt;&#xA;&lt;a href=&quot;http://www.sailservo.co.uk/anvdig.html&quot; rel=&quot;nofollow&quot;&gt;b&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With many RC servos -- both digital and analog -- as long as the &quot;frame rate&quot; (how many times per second the pulse is sent over the control wires to the servo, aka the pulse repetition rate) is in a range of 40 Hz to 200 Hz,&#xA;the exact value of the frame rate is irrelevant.&#xA;&lt;a href=&quot;http://bobblick.com/techref/projects/sv2pwm/sv2pwm.html&quot; rel=&quot;nofollow&quot;&gt;b&lt;/a&gt;&#xA;&lt;a href=&quot;http://www.societyofrobots.com/actuators_servos.shtml&quot; rel=&quot;nofollow&quot;&gt;c&lt;/a&gt;&#xA;&lt;a href=&quot;http://www.pololu.com/blog/17/servo-control-interface-in-detail&quot; rel=&quot;nofollow&quot;&gt;d&lt;/a&gt;&#xA;&lt;a href=&quot;http://www.basicx.com/Products/robotbook/servo%20intro.pdf&quot; rel=&quot;nofollow&quot;&gt;e&lt;/a&gt;&#xA;&lt;a href=&quot;http://ebldc.com/?p=48&quot; rel=&quot;nofollow&quot;&gt;f&lt;/a&gt;&#xA;&lt;a href=&quot;http://wearcam.org/ece385/lecturelab6/servos.htm&quot; rel=&quot;nofollow&quot;&gt;g&lt;/a&gt;&#xA;&lt;a href=&quot;http://www.4qdtec.com/pwpm.html&quot; rel=&quot;nofollow&quot;&gt;h&lt;/a&gt;&#xA;&lt;a href=&quot;http://mechatronics.mech.northwestern.edu/design_ref/actuators/servo_motor_drive.html&quot; rel=&quot;nofollow&quot;&gt;i&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The RC radio receiver or Arduino or whatever is sending the pulses to the RC servo can send the pulses at any frequency in that range (and in many cases well outside that range), and the servo will Do the Right Thing.&#xA;The frequency listed by the servo manufacturer and the reseller for a servo (&lt;a href=&quot;http://www.ronlund.com/rcheli/HELP_SERVO_PULSE.html&quot; rel=&quot;nofollow&quot;&gt;j&lt;/a&gt;) is not the frequency that must be used; it is the maximum of the range of frequencies that the servo is guaranteed to respond properly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In particular, many people take a servo that is designed to respond to frame rates up to 200 Hz, and stick it in an airplane with a RC radio receiver that sends a frame to that servo 50 times per second, and the airplane flies just fine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many digital servos have a higher limit on the input pulse frame rate than many analog servos, but that's not what makes digital servos different from analog servos.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A few people -- such as people installing the tail servo of a small single-rotor helicopter &lt;a href=&quot;http://www.spartan-rc.com/resources/faq/faq.php?topic=1&amp;amp;category=3&quot; rel=&quot;nofollow&quot;&gt;(k)&lt;/a&gt;, and people building quadcopters -- really need a servo or ESC that can support some frame rate much faster than 50 Hz.&#xA;They need to look at the specs and pick a servo with a supported frequency at least as high or higher than the update rate they need.&#xA;For example,&#xA;ArduCopter drives the stabilization loop at 100Hz &lt;a href=&quot;http://diydrones.com/forum/topics/pwm-frequency-for-driving-escs&quot; rel=&quot;nofollow&quot;&gt;(l)&lt;/a&gt; &lt;a href=&quot;http://diydrones.com/forum/topics/main-loop-speed&quot; rel=&quot;nofollow&quot;&gt;(m)&lt;/a&gt; &lt;a href=&quot;http://copter.ardupilot.com/wiki/glossary/&quot; rel=&quot;nofollow&quot;&gt;(n)&lt;/a&gt;,&#xA;so people using it must pick a servo or ESC that supports frequencies of at least 100 Hz.&lt;/p&gt;&#xA;" OwnerUserId="187" LastActivityDate="2014-05-18T04:57:58.843" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2939" PostTypeId="1" AcceptedAnswerId="4473" CreationDate="2014-05-18T13:58:47.247" Score="2" ViewCount="117" Body="&lt;p&gt;I identified my system and now I am trying to tune PI regulator since I think I do not need D.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I came across this graph while Matlabing and I do not know what does it mean.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am using pidtune() to get my P and I values. (I think computation is all correct, I made model in simulink to confirm). Anyway see my picture and arrow is pointing at what I do not understand. Why is my system going below zero first?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is supposed to be water flow regulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/36usV.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Transfer function:&#xA;$$ \frac{-0.311s + 0.05548}{s^2 + 0.06882s + 0.0007626}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Continuous-time PI controller in parallel form:&#xA;$$K_p + K_i * \frac{1}{s}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With $K_p = 0.256$, $K_i = 0.000342$&lt;/p&gt;&#xA;" OwnerUserId="4403" LastEditorUserId="350" LastEditDate="2014-09-02T13:24:48.417" LastActivityDate="2014-12-31T16:04:59.913" Title="What does this &quot;inverse&quot; peak mean? (step function)" Tags="&lt;pid&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2940" PostTypeId="1" AcceptedAnswerId="2943" CreationDate="2014-05-18T19:39:04.547" Score="2" ViewCount="301" Body="&lt;p&gt;I am trying to implement a controller for an inverted pendulum using LQR (with MATLAB command lqr(A,B,Q,R)). The problem is that the motors are relatively weak, so I tried to increase R, but simulations show that the effort is still very high. How can I reduce the effort?&lt;/p&gt;&#xA;" OwnerUserId="4405" LastActivityDate="2014-05-20T12:48:51.090" Title="LQR design with low effort" Tags="&lt;control&gt;&lt;design&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2941" PostTypeId="2" ParentId="2931" CreationDate="2014-05-18T22:23:37.600" Score="0" Body="&lt;p&gt;If you've built this from scratch, the best person to troubleshoot your code is yourself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Look at the basic pieces of the code: the sensor, the PIDs, and the motor control.  Write some functions to help you test each of those pieces individually, so that you can determine whether the error you're seeing is in just one component, or a system-level error based on some incorrect code in all 3 components.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you know the extent of the error, you'll be able to either recognize the problem and fix it, or to ask a more focused question here.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-05-18T22:23:37.600" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2943" PostTypeId="2" ParentId="2940" CreationDate="2014-05-18T23:23:35.323" Score="2" Body="&lt;p&gt;With LQR you can either decrease $Q$ or increase $R$. If that's not working you have to consider the possibility that your motor just will not work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It also might be worth looking at different controller design techniques. If I remember correctly, LQR minimizes the total energy, which usually means a large initial correction followed by a slop back to zero for the control signal (as opposed to lots of oscillation). There are other techniques that can focus on the maximum peak instead of total energy (e.g. generic optimal control or $\mathcal{H}_2$ robust-control techniques, which Matlab has commands for) but they tend to be difficult to understand and use without a lot of study.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Aside from changing the motors, you're left with studying the other optimal controllers or just playing around with PID, feedforward, and/or pole-zero shaping to see if you can get a better response.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastEditorUserId="2669" LastEditDate="2014-05-20T12:48:51.090" LastActivityDate="2014-05-20T12:48:51.090" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2944" PostTypeId="2" ParentId="2920" CreationDate="2014-05-19T01:10:18.710" Score="10" Body="&lt;p&gt;It sounds like you've missed the core concept of a PID, so let's start from scratch.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In mathematical terms, a PID controller decides how much force to apply in order to move a system in 1-dimensional space -- from an actual position to a desired position.  Based on the error $(\text{error} = \text{position}_{desired} - \text{position}_{actual})$, it provides a value for some corrective force to be applied; this value is the sum of 3 forces (P, I, and D).&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Proportional force is so named because it is directly proportional to the error.  Double the error, and you double the force.  When error is zero, proportional force is zero.  You've observed that this makes the system &quot;faster&quot;, which is more or less correct; it controls how aggressively the system will attempt to return to zero.&lt;/li&gt;&#xA;&lt;li&gt;Derivative force is proportional to the rate of change of the error -- the differential calculus type of derivative.  Double the rate of change of the error, and you double the force.  So, when the system is standing still then the derivative force is zero.  You've observed that this makes the system &quot;slower&quot;, which is somewhat correct, but probably not for the reason you think; it accounts for momentum in the system.&lt;/li&gt;&#xA;&lt;li&gt;Integral force is proportional to the error multiplied by time -- the differential calculus type of integral.  Double the amount of time that the error stays at a certain value, and you double the force.  So, when the system spends an equal amount of time moving between negative and positive errors, the integral term drops to zero.  The integral term accounts for constant forces, like gravity, that act on the system.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2014-07-05T16:49:57.043" LastActivityDate="2014-07-05T16:49:57.043" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2945" PostTypeId="1" AcceptedAnswerId="2950" CreationDate="2014-05-19T01:48:30.073" Score="5" ViewCount="846" Body="&lt;p&gt;From what I understand, you can create a map using sensors and storing values in an array.  For example, the array can have 0's for places not visited, and 1's for places visited, or 0's for open spaces and 1's for occupied spaces, etc.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The map I'm thinking of making will have about 1000 x 2000 members.  This means I need an array of 2 million members.  That seems like a lot.  If I have eight attributes about each member (like temperature, light level, sound level, etc.), then I have 16 million pieces of information to capture.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this correct, or is there a better way to create a map for a robot using software?&lt;/p&gt;&#xA;" OwnerUserId="4409" LastActivityDate="2015-04-20T22:08:12.993" Title="How does a robot efficiently store a map it makes?" Tags="&lt;software&gt;&lt;mapping&gt;" AnswerCount="5" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2946" PostTypeId="2" ParentId="2925" CreationDate="2014-05-19T06:41:35.370" Score="3" Body="&lt;p&gt;The short answer to this is that the P (Propotional) part of the PID controller is the base function of the controller, and that the I (Integral) and D (Derivative) parts merely attempts to fix the very commonly encountered downsides of the P-only controller. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If we have a look at the general actuating force in the system - the motor or &quot;actuator&quot; the PID controls - the explanation becomes quite obvious. For the PID, the actuation is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;u = Kp*(e) + Kd*derivative(e) + Ki*integral(e)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where &lt;em&gt;e&lt;/em&gt; is the &lt;em&gt;error&lt;/em&gt; from the desired system position, and Ki, Kd and Kp are user-defined numbers. Now, imagine that the system indeed is in its desired position, meaning the error &lt;em&gt;e&lt;/em&gt;=0; then u would also be zero! So, the question then becomes how to get u = 0 when the system is in the state we would like it to be in. This can explain why you typically only see P, PD, PI or PID controllers used, because these combinations usually coincides with an actuation u=0 that gives a desired system state. There is, however, nothing wrong about the I, D, ID or even ABC-controller - you can literally add any additional party to u that you find usable for the system you are working with. You could for instance say that &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;u  = 0,  if |e| &amp;lt; 5 and&#xA;u  = 1,  otherwise&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;which effectively would be a simple on-off switch like your typical thermostat. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this help!&lt;/p&gt;&#xA;" OwnerUserId="2347" LastActivityDate="2014-05-19T06:41:35.370" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2947" PostTypeId="2" ParentId="2935" CreationDate="2014-05-19T07:30:21.260" Score="0" Body="&lt;p&gt;So imagine this scenario: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You are driving you car towards a red stop light. As a human, you would naturally adjust your speed so that you smoothly stop in front of the stop line. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is how a PID controller would do it:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;P:&lt;/strong&gt; The proportional part of the controller would measure the exact distance from the car to the stop light, and drive slower and slower as it approaches the light. The P-controller  will drive super slow when getting close to the light, eventually stop without actually reaching it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;I:&lt;/strong&gt; The integral part of the controller would go fast towards the light, pass it, realise it had gone too far, drive back, drive back too far, then go forwards again, drive pass the light again, and so on. The I-controller might, in fact, never stop &lt;em&gt;on&lt;/em&gt; the line. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;D:&lt;/strong&gt; The derivative part of the controller would know exactly when to start breaking, so that it does not break to early - like the P-controller - nor does it drive to far - like the I-controller. Instead, it would start breaking exactly when it needs to, giving a firm but smooth stop in front of the stop light. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A properly tuned &lt;strong&gt;PID&lt;/strong&gt; would combine these characteristics: The &lt;strong&gt;P&lt;/strong&gt; would measure the exact distance to the light, and adjust the initial speed according to this distance. The &lt;strong&gt;I&lt;/strong&gt; would be more aggressive, and enforce that no breaking is done until the the stop light is close, while the &lt;strong&gt;D&lt;/strong&gt; would take over breaking when it realises the car is going way too fast towards the stop light, and break firmly. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depending on the weighting of Kp, Ki and Kd, these characteristics will be more or less visible in the final system. Of course, the example contains some simplifications. For a general tuning guide, have a look at the &lt;a href=&quot;http://en.wikipedia.org/wiki/Ziegler%E2%80%93Nichols_method&quot; rel=&quot;nofollow&quot;&gt;Ziegler-Nichols method;&lt;/a&gt; the first paragraph in this wiki pretty much explains it all. Note that this tuning method is merely a guide, and that you will most likely have to manually fine tune the system afterwards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope that helps!&lt;/p&gt;&#xA;" OwnerUserId="2347" LastActivityDate="2014-05-19T07:30:21.260" CommentCount="16" ContentLicense="CC BY-SA 3.0" />
  <row Id="2948" PostTypeId="1" CreationDate="2014-05-19T10:57:46.423" Score="1" ViewCount="2785" Body="&lt;p&gt;Is it possible to determine PID parameter using pole placement. &#xA;I mean by solving the ch. eq. of close loop transfer functions  which consists of either P,PI,PD or PID controllers??&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because i've tried it, an eventhough i am getting my poles at the locations I want the systems does not act as I assumed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;an example. I want my system to be overdamped and to have settling time less than 1 sec. which means that i want my poles to lie on the real axis, and to be less than -4. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$G(s) =\frac{10.95 s + 0.9574}{s^2 + 0.09149 s +  6.263*10^{-6}}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With P = 0.1, I= 0.617746, d =  0.0147173&#xA;I get a close loop system which is &#xA;$$G_cl(s) =  \frac{0.1612 s^4 + 1.109 s^3 + 6.86 s^2 + 0.5914 s}{  0.1612 s^4 + 2.109 s^3 + 6.952 s^2 + 0.5914s}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But looking at it's step response I see it creates overshoot, which i cannot justify due to an step input...&lt;/p&gt;&#xA;" OwnerUserId="4376" LastActivityDate="2014-08-24T20:10:29.907" Title="PID tuning method based on Pole placement" Tags="&lt;control&gt;&lt;pid&gt;&lt;tuning&gt;" AnswerCount="1" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="2949" PostTypeId="1" CreationDate="2014-05-19T11:27:55.617" Score="1" ViewCount="37" Body="&lt;p&gt;Sorry if this is out of robotics, but this seemed the closest.&#xA;A motor has to be used to rotate three cranks. They are in the same plane, but each should not run at the same time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Only one that occupies a central position, corresponding to the motor, should rotate. The discs are mounted in rectangular frame that can be slid to bring the required disc to the central position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone suggest a method to achieve this? (Basically coupling and uncoupling the motor shaft from whatever disc is in the centre.)&lt;/p&gt;&#xA;" OwnerUserId="4415" LastEditorUserId="350" LastEditDate="2014-05-20T19:12:01.170" LastActivityDate="2014-05-20T19:12:01.170" Title="Actuation of three reciprocating blades via conversion of rotary to linear" Tags="&lt;motor&gt;&lt;mechanism&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2950" PostTypeId="2" ParentId="2945" CreationDate="2014-05-19T11:43:11.460" Score="2" Body="&lt;p&gt;It really really depends on the kind of map. If you want a map that is a 2-D grid of boolean values, then it depends on how sparse the map is expected to be.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to keep all boolean values, you would need at least &lt;code&gt;N * M * S&lt;/code&gt; bits (assuming the map is &lt;code&gt;N&lt;/code&gt; by &lt;code&gt;M&lt;/code&gt; and each location has &lt;code&gt;S&lt;/code&gt; sensor readings), which for your numbers translate to ~2MB of data. If your microcontroller doesn't have this much space, then that's a bad approach.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, all is not lost! Usually the environment has some feature you can take advantage of. For example, if the environment is not full of obstacles, you don't need to memorize all the empty spaces, right? Or if there is an area closed by obstacles, you don't to keep track of what's inside it, since you can't get there anyway.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, perhaps the approach with the least amount of memory would be to model your environment by a set of closed polygons. As you explore the world, you refine the polygons, but not with extreme details, to reduce the memory footprint. All algorithms would then work with polygons (e.g. collision detection) rather than bitmaps which is possibly also less costly, so it could be a win for everyone!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Robotic_mapping&quot; rel=&quot;nofollow&quot;&gt;This Wikipedia article&lt;/a&gt; may help, where topological frameworks are hinted at, and the thereby linked &lt;a href=&quot;http://en.wikipedia.org/wiki/Map_database_management&quot; rel=&quot;nofollow&quot;&gt;Map Database Management&lt;/a&gt; which could also provide some insight.&lt;/p&gt;&#xA;" OwnerUserId="158" LastEditorUserId="158" LastEditDate="2014-05-19T12:04:13.763" LastActivityDate="2014-05-19T12:04:13.763" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2953" PostTypeId="2" ParentId="2945" CreationDate="2014-05-19T21:02:17.053" Score="1" Body="&lt;p&gt;Look at papers and projects at universities on how others have done this.&#xA;Unfortunately most of this is not as transferable from robot to robot as one would initially imagine.&#xA;There is a lot that will be custom to your robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That being said, here's what I did...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I was doing for mine was a graph of 1&quot; squares representing the room.&lt;br&gt;&#xA;To &quot;fill in&quot; a square I incremented the value of it by 1.  To &quot;clear&quot; it I decremented it by 2, to min of 0.&#xA;I then filled in squares as IR and Ultrasonic detectors detected them.  I cleared them as the squares would be seen to be clear.&#xA;This handled transient obstacles OK, but it walked about as the sensors and their precision did not match the grid well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This also depends as Shahbaz stated on resources for storage/processing power, etc.&lt;/p&gt;&#xA;" OwnerUserId="4420" LastActivityDate="2014-05-19T21:02:17.053" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2955" PostTypeId="2" ParentId="2930" CreationDate="2014-05-20T07:51:04.393" Score="1" Body="&lt;p&gt;Without having tested the kk2.1.5 specifically, I tell you my experience based on a mini-quad with a PID of some sort, and PIDs in general:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A good PI settings will make the quad faster and more &quot;determined&quot; at leveling out while avoiding drift (the quad not fully reaching the correct level, just almost). Auto-leveling is particularly useful when you are letting the sticks go during flight. How they influence the quad during handling, I don't know.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That being said, having a badly tuned controller is much better than having none at all. And having a too aggressive controller might make everything go crazy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Try to adjust the P-part first. The P alone will not be able to compensate for constant disturbances - such as wind - but will determine the overall quickness of the system. The I-part will make sure there is no drift, and that the quad will actually reach the desired level - but also make the stabilizing much more aggressive. Be careful with not setting the I too high initially, as it might overshoot too much, and become unstable. So: P first until you are happy with it, then I. Start low on both and increase.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Good luck!&lt;/p&gt;&#xA;" OwnerUserId="2347" LastActivityDate="2014-05-20T07:51:04.393" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2958" PostTypeId="2" ParentId="2908" CreationDate="2014-05-20T13:10:59.957" Score="1" Body="&lt;p&gt;There are benefits from SimonK beyond update frequency. For example SimonK handles hysteresis (The time it takes to change the rpm of the motor is drastically reduced with simonk) differently. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also it eliminates some of the unwanted parameters that WILL cause you grief, eg lipo cutoff and brakes. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using a 50mhz update rate will not produce a very good performance multirotor. The Razor does processing on board, which will be repeated by the flight controller. Something like a $25 Naze would be magnitudes better.&lt;/p&gt;&#xA;" OwnerUserId="274" LastActivityDate="2014-05-20T13:10:59.957" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2960" PostTypeId="2" ParentId="2945" CreationDate="2014-05-20T19:10:34.313" Score="2" Body="&lt;p&gt;The world is always bigger than the robot's memory can hold (it's bigger than &lt;em&gt;your&lt;/em&gt; memory can hold, too).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are 2 ways to reduce the space that you need.  The first is to consider whether you need to pre-allocate the storage space, and the second is to consider what kind of compression you can use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pre-allocating space makes sense if you already have values for those 8 attributes at every square, or if the robot's job is to visit all 2 million squares and measure them.  However, if the robot is just going to visit a small portion of the total squares then you might be able to store the data in something like a &lt;a href=&quot;http://en.wikipedia.org/wiki/Quadtree&quot; rel=&quot;nofollow&quot;&gt;quadtree&lt;/a&gt; instead.  (There are many other structures that take advantage of sparse data sets, and I won't list them here.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Compression can help if you can't avoid pre-allocating the space.  For example, you could store the state of visited squares as bits instead of bytes to get 8:1 compression with minimal effort.  For the attributes of the spaces, do you need exact values?  Can you exploit patterns in the data to save on storage space (think of GIF, JPEG, and other 2D compression schemes).   &lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-05-20T19:10:34.313" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2961" PostTypeId="1" CreationDate="2014-05-21T02:36:15.090" Score="1" ViewCount="89" Body="&lt;p&gt;I was recently reading that those artificial muscles had the highest power/weight ratio while electric motors only have a ratio of less than 100:1. As electrical engineer I have never worked with pneumatics before and do not have a big idea about air pumps.&#xA;My question is, how much will this ratio change if we consider an autonomous system. &#xA;On one side, the McKibben actuators + air pumps and valves + energy source   and on the other side, electric motors + energy source. As an example, let suppose that somebody found a way to model and control the artificial muscles as good as the electric motors and make two autonomous walking leg models, which one would have a higher resulting power/weight ratio ?&lt;/p&gt;&#xA;" OwnerUserId="4429" LastActivityDate="2014-05-21T02:36:15.090" Title="McKibben artificial muscles and the 400:1 ratio" Tags="&lt;control&gt;&lt;power&gt;&lt;actuator&gt;&lt;torque&gt;&lt;battery&gt;" AnswerCount="0" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2962" PostTypeId="2" ParentId="1654" CreationDate="2014-05-21T23:23:10.870" Score="0" Body="&lt;p&gt;Back to the original question, a robot is something that turns it self on and off and does its thing without human interference, touching, sending a signal, ect. Like the Roomba. Sure sometimes you tell it to do certain things, but that is different, that is just for an occasion.When you are done, it goes back to vacuuming again. A machine is a thing that has mechanics, electronics and firmware, but needs human interference to work, like the printer. You send a signal telling it to print, not it telling itself to print.&#xA;Does that answer your question?&lt;/p&gt;&#xA;" OwnerUserId="4434" LastActivityDate="2014-05-21T23:23:10.870" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2963" PostTypeId="1" AcceptedAnswerId="2979" CreationDate="2014-05-22T03:04:14.977" Score="2" ViewCount="185" Body="&lt;p&gt;I am interested in learning how to build a dynamic quadcopter, and hope to be fairly proficient with Arduino/raspberry-pi. What resources and/or practices might you recommend? &lt;/p&gt;&#xA;" OwnerUserId="4435" LastActivityDate="2014-05-26T22:00:12.050" Title="How do I learn about Arduino/raspberry-pi based robotics on my own?" Tags="&lt;arduino&gt;&lt;raspberry-pi&gt;&lt;beginner&gt;" AnswerCount="2" CommentCount="9" FavoriteCount="1" ClosedDate="2014-06-04T11:53:20.107" ContentLicense="CC BY-SA 3.0" />
  <row Id="2964" PostTypeId="1" AcceptedAnswerId="2974" CreationDate="2014-05-22T06:36:03.223" Score="4" ViewCount="12262" Body="&lt;p&gt;I'm trying to develop a control system to a quadcopter and one of my options is to use a PID controller (which I think is the most used method).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From what I've read, the commom strategy is to run a PID algorithm to each axis. My question is: how the PID output is converted to PWM signals?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm asking that because the three axes and the four rotors depend on each other. I mean, if I slow down a couple of rotors which are opposite to each other then the quadcopter will move down in a vertical axis. But if I speed one of them and slow down the other, the quadcopter will rotate in a different axis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So we cannot isolate each axis and associate them with a single rotor or a pair of those. And because of that, how can a PID output (which is associated to an axis) can be converted to PWM signals to the rotors?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is that a MIMO system?&lt;/p&gt;&#xA;" OwnerUserId="4437" LastActivityDate="2016-02-19T14:13:28.410" Title="Quadcopter PID output" Tags="&lt;quadcopter&gt;&lt;pid&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="2965" PostTypeId="2" ParentId="2964" CreationDate="2014-05-22T09:39:54.050" Score="1" Body="&lt;p&gt;If you slow down one couple of oppositely placed rotors in a quadcopter, it will not only reduce the vertical thrust, it will result in change of yaw. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since what you're asking is essentially a general description of PID tuning techniques for a quadcopter, I suggest you stick to Google for the moment, including &lt;a href=&quot;http://blog.oscarliang.net/quadcopter-pid-explained-tuning/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://blog.oscarliang.net/quadcopter-pid-explained-tuning/&lt;/a&gt;   and   &lt;a href=&quot;http://www.thomasteisberg.com/quadcopter/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.thomasteisberg.com/quadcopter/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Things to note:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;You can have more than 1 PIDs per axis&lt;/li&gt;&#xA;&lt;li&gt;The usual output of PIDs are +/- values for rate of change of roll, pitch and yaw.&lt;/li&gt;&#xA;&lt;li&gt;The desired change in roll, pitch or yaw is brought about by a low level controller. It converts the rate of change to a restoring torque (basically... a small increment in one motor and a corresponding small decrement in the opposite motor.)&lt;/li&gt;&#xA;&lt;li&gt;Usually, roll and pitch PIDs act on two motors at a time. Yaw PID act on all fours.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;You may try going through :&#xA;&lt;a href=&quot;https://robotics.stackexchange.com/questions/2920/understanding-the-pid-controller&quot;&gt;understanding the PID controller&lt;/a&gt;&#xA;and &#xA;&lt;a href=&quot;https://robotics.stackexchange.com/questions/2297/quadcopter-pid-tuning&quot;&gt;Quadcopter PID tuning&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="1949" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2014-05-22T09:39:54.050" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="2966" PostTypeId="1" CreationDate="2014-05-22T16:30:42.047" Score="0" ViewCount="176" Body="&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=MPhhYlIq294&quot; rel=&quot;nofollow&quot;&gt;https://www.youtube.com/watch?v=MPhhYlIq294&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have found this robotic arm on the internet, and I was wondering if someone can tell me what parts I need to build it or similar. The video says it can lift a small cat.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need to be able to program it, so I'll need a controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please recommend specific motor, controller links that you recommend. Thanks :)&lt;/p&gt;&#xA;" OwnerUserId="4344" LastActivityDate="2014-05-28T20:41:45.743" Title="What parts do I need for a strong robotic arm?" Tags="&lt;robotic-arm&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ClosedDate="2014-06-04T11:52:51.547" ContentLicense="CC BY-SA 3.0" />
  <row Id="2968" PostTypeId="1" CreationDate="2014-05-22T19:40:53.667" Score="1" ViewCount="318" Body="&lt;p&gt;Would a control system consisting of 2 PID controller one plant  would be considered as an cascade controller??&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And how come would a proper tuning method be?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far i've googled it seems to me that only best method is to manually do it, one by one. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;this is how my system looks like &#xA;&lt;a href=&quot;http://snag.gy/rJH2J.jpg&quot; rel=&quot;nofollow&quot;&gt;http://snag.gy/rJH2J.jpg&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4376" LastEditorUserId="4376" LastEditDate="2014-05-22T22:16:39.100" LastActivityDate="2014-05-22T22:16:39.100" Title="proper tuning method of an cascade controller?" Tags="&lt;control&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2969" PostTypeId="2" ParentId="2968" CreationDate="2014-05-22T20:56:27.340" Score="2" Body="&lt;p&gt;A &lt;a href=&quot;http://en.wikipedia.org/wiki/PID_controller#Cascade_control&quot; rel=&quot;nofollow&quot;&gt;cascaded controller&lt;/a&gt; simply has the output of one controller acting as the input to another.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A good example of this would be in a motor control application where you typically have a current loop controlling the current to the motor, over that you'd have a velocity loop where the output of that loop is the input to the current loop, and over that you'd have a position loop where the output is the input to the velocity loop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each loop can be tuned independently of the other by whatever method you fancy.  Tune the inner-most controller first and then start going outwards.&lt;/p&gt;&#xA;" OwnerUserId="1584" LastActivityDate="2014-05-22T20:56:27.340" CommentCount="14" ContentLicense="CC BY-SA 3.0" />
  <row Id="2970" PostTypeId="1" CreationDate="2014-05-23T03:16:54.340" Score="1" ViewCount="108" Body="&lt;p&gt;I'm looking to build a test rig for a robot that rotates a 1&quot; diameter pipe 180º (roll not yaw or pitch). I am currently testing a motor's performance when subjected to various kinds of PWM (high duty cycle, low duty cycle, etc). I would like to characterize how this performs under various loads.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a simple mechanical mechanism I can attach to a fixture and insert into or around the pipe that lets me control how easy or difficult it is to rotate? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am thinking of something like a drill bit chuck that fits inside the pipe and expands or a circular clutch that clamps down around pipe to add resistance when one tightens a thumbscrew. I would like to go from no resistance to full stop for a 4N•m motor. I would like to be able to test how 'sticky' the pipe is using a torque wrench.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I imagine this would be very simple but I can't think of something that would do this!&lt;/p&gt;&#xA;" OwnerUserId="4446" LastActivityDate="2014-10-19T20:19:51.543" Title="How can I dynamically control the amount of torque necessary to rotate something for a test rig?" Tags="&lt;motor&gt;&lt;torque&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2971" PostTypeId="2" ParentId="2970" CreationDate="2014-05-23T04:43:18.567" Score="2" Body="&lt;p&gt;Only rotate 180º, right? Not continuous rotation?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How about wrap a string around the pipe and then hang a weight off the string? As you rotate the pipe it will lift the weight and the torque calculation is straightforward. If you need more torque you can artificial increase the diameter where the weight is attached.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hmm, looking at your title again you say &quot;dynamically control&quot; ... does that mean you need to change the torque in the middle of one test? One of your examples includes a clutch with a tightening thumb screw, though, so maybe not?&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2014-05-23T04:43:18.567" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2972" PostTypeId="1" AcceptedAnswerId="2973" CreationDate="2014-05-23T07:52:27.187" Score="2" ViewCount="298" Body="&lt;p&gt;I am having a hard time grasping the concept of a DC motor  with load being unstable, and stable due to a controller &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My confusions appears as I am trying to design a controller for one using Z-N method, and the transfer function i've identified using matlab tells me that my DC-motor always will be stable. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which makes sense, since feeding it constant voltages, will lead to a constant veloicty. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But to use the z-n approach the system has be able to become unstable, and since this isn't possible i am getting confused if a motor are able to become motor for which i am to design a controller for. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The question in simplicity, &#xA;how come can a controller make a motor, (if the motor itself cannot (due to pole zero plot)) unstable.  &lt;/p&gt;&#xA;" OwnerUserId="4376" LastEditorUserId="4376" LastEditDate="2014-05-23T10:20:33.853" LastActivityDate="2014-05-23T12:54:16.630" Title="Transfer function of DC motor being unstable due to a controller?" Tags="&lt;motor&gt;&lt;control&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2973" PostTypeId="2" ParentId="2972" CreationDate="2014-05-23T12:54:16.630" Score="2" Body="&lt;p&gt;2 comments ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, as many people said in answer to your other question, you need to understand that your transfer function is not the real transfer function of the motor. Real motors have nonlinear, and other, unmodelled effects that can cause problems in certain cases.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second, you need to consider the entire system, not just a single subsystem. Stability is a property of the combination of motor+controller, so a poorly designed/tuned controller connected to a stable motor can easily make the whole system unstable.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2014-05-23T12:54:16.630" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2974" PostTypeId="2" ParentId="2964" CreationDate="2014-05-23T18:57:14.990" Score="3" Body="&lt;p&gt;Let's try to give a comprehensive answer and stay on topic!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you said in your question there is one PID per axis. This means 3 PIDs in total: roll, pitch, and yaw.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also the motors input is a PWM high-level time, typically in the 1000-2000us range. There are 4 motors input: front, back, left, and right. One subtlety of the motors is that there is a value under which the motors stop completely, for instance 1100ms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is another variable not mentioned in the question: the throttle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first step in my quadcopter project was to tune the throttle. My throttle values were between -100 and 100, so I applied the following formula to each motor: motor = 300 * throttle / 100 + 1550. The constant values are arbitrary and give us a motor value in the 1250-1850 range, other values of the same magnitude would work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Only then do we apply the PIDs using the motor mix formula. For instance for my +4 quadcopter the formula is:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Front = Throttle + PitchPID - YawPID&lt;/li&gt;&#xA;&lt;li&gt;Back = Throttle - PitchPID - YawPID&lt;/li&gt;&#xA;&lt;li&gt;Left = Throttle + RollPID + YawPID&lt;/li&gt;&#xA;&lt;li&gt;Right = Throttle - RollPID + YawPID&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The PID output has no unit. Choosing the right P, I, and D constants shall give us values which can stabilise the quadcopter. One caveat is that depending on the PID values the motor input can exceed the bounds: it could go over 2000us or under 1100us (which is our example motor cut value). In order to avoid such a situation we can analyse the higher and the lower of our motors inputs and add a constant to get all the motors within bounds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For instance if the motor mix formula gave us:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Front = 1900&lt;/li&gt;&#xA;&lt;li&gt;Back = 1800&lt;/li&gt;&#xA;&lt;li&gt;Left = 2100&lt;/li&gt;&#xA;&lt;li&gt;Right = 1700&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;We would remove 100 from each motor and get:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Front = 1800&lt;/li&gt;&#xA;&lt;li&gt;Back = 1700&lt;/li&gt;&#xA;&lt;li&gt;Left = 2000&lt;/li&gt;&#xA;&lt;li&gt;Right = 1600&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This would give us motors input values within bounds and maintain the difference between motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a side note you said in a comment that the thrust vs PWM input is not linear. This is true but PIDs can drive non-linear systems with more or less success. For quadcopters the consensus is that it works reasonably well :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If anything was unclear please let me know!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cheers,&#xA;Marc.&lt;/p&gt;&#xA;" OwnerUserId="4249" LastEditorUserId="4249" LastEditDate="2014-05-29T09:13:26.847" LastActivityDate="2014-05-29T09:13:26.847" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="2978" PostTypeId="2" ParentId="2747" CreationDate="2014-05-24T09:22:03.573" Score="1" Body="&lt;p&gt;Try running the motors in free-load condition (holding in air). If motor runs then, most likely they are not able to carry the load or the battery is dying. Try replacing the battery &amp;amp; see if that works well. Here in all, I am assuming that you boards are working well &amp;amp; enough power is reaching the output pins of the board (or input of motor).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyways, its difficult to run metal geared motors at 5V. What are the motor specifications?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just to test, see if you can disconnect any 2 motors (either front or back) &amp;amp; see if the bot moves. This may give you some hints.&lt;/p&gt;&#xA;" OwnerUserId="4448" LastEditorUserId="417" LastEditDate="2014-06-03T08:15:29.707" LastActivityDate="2014-06-03T08:15:29.707" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2979" PostTypeId="2" ParentId="2963" CreationDate="2014-05-24T17:55:06.890" Score="1" Body="&lt;p&gt;In your shoes, I would start &quot;simpler&quot;.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;First, I would make a system that cycles between LED states (on/off/blinking) based on interaction with a sensor. That's to get the basics.&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Then, I would build a little &quot;truck&quot; bot, one that can drive around my room without getting stuck. This is (especially in MY room, where navigation between all sorts of stuff is risky...) already an interesting challenge.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Next, I would add navigation (get some points/GPS-positions/emitters/NFC-tags/anything-that-suits-you in my room and go around them with the bot, which seems to be something you want your quadcopter to be able to do so that it knows how to come home, once you have GPS integrated)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Next I would add a few circuits for balancing (you really want the quad to know up from down, and handle their stability well). Side note, if you are on the equator, factor that in your system. It seems American F-16s had to be upgraded (a long while ago...) when the US Air Force had the nasty surprise of having them roll 180° when passing the equator :D&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;At that point, you're much more savvy than I'll ever be ;)&lt;/p&gt;&#xA;" OwnerUserId="4449" LastActivityDate="2014-05-24T17:55:06.890" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2980" PostTypeId="1" CreationDate="2014-05-24T19:24:35.233" Score="2" ViewCount="94" Body="&lt;p&gt;I am bit uncertain how I should interpret the definition of an robust controller. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far I've understood, the closed loop system including the controller has to have a high gain for frequencies where disturbance appears, and decay at frequencies higher than the work area, or noise.  Both of these can be determined using a bode plot, thereby determining the robustness of my closed-loop system. &lt;/p&gt;&#xA;" OwnerUserId="4376" LastEditorUserId="350" LastEditDate="2014-05-27T16:08:34.270" LastActivityDate="2014-09-24T18:59:10.577" Title="Definition of (or determine whether something is) a robust controller?" Tags="&lt;control&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2981" PostTypeId="1" CreationDate="2014-05-24T19:46:14.800" Score="2" ViewCount="64" Body="&lt;p&gt;I want to cut acrylic pieces that will be assembled into the body of a robot. What are some recommendations for acrylic/plastic cutting services? Does laser cutting produce the best results?&lt;/p&gt;&#xA;" OwnerUserId="2056" LastActivityDate="2014-05-26T21:57:17.290" Title="Acrylic/plastic cutting services" Tags="&lt;manufacturing&gt;" AnswerCount="2" CommentCount="0" ClosedDate="2014-06-04T11:52:18.170" ContentLicense="CC BY-SA 3.0" />
  <row Id="2982" PostTypeId="1" AcceptedAnswerId="2989" CreationDate="2014-05-24T20:00:52.270" Score="3" ViewCount="202" Body="&lt;p&gt;I'm writing a C code generator geared toward RobotC and complex tasks for an FTC team, and was wondering about some performance and storage concerns:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;How much memory is available for my program's data? It'll be mostly pre-defined lookup tables, generally in the form of multidimensional arrays.&lt;/li&gt;&#xA;&lt;li&gt;How much NXT memory is available for my program itself? As in, roughly how much code can I expect to fit into a single RobotC compiled program?&lt;/li&gt;&#xA;&lt;li&gt;How quickly do programs execute, generally? Looking at disassembly most of my generated lines correspond to 2-4 opcodes.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Based on these, I'm trying to make a decision of precomputation vs runtime pathfinding.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm using NXT/Tetrix. My major interest at this point with these questions is for pathfinding. I plan to have a 64x64 grid and be running Djisktra's A* algorithm with a heuristic function that assigns a penalty to turns and is as close to consistent as possible (not sure if consistency/monotonicity is doable with the turn penalty).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Roughly 8 paths would be cached if I decide to use the pre-cached lookup tables.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead of a set, I'll probably use a boolean array for the set of nodes visited. The fact that I'm working with a square layout will allow me to use a 2D array for the map needed to reconstruct the path.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd love some feedback and answers to my question if anyone has any. Thanks!&lt;/p&gt;&#xA;" OwnerUserId="964" LastActivityDate="2014-05-26T06:12:05.637" Title="Performance/memory considerations for pathfinding lookup tables on RobotC for a small set of paths" Tags="&lt;nxt&gt;&lt;robotc&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2983" PostTypeId="1" CreationDate="2014-05-25T01:57:19.550" Score="1" ViewCount="198" Body="&lt;p&gt;I am in a situation where I need to secure a 20&quot; wheel made of 3/4&quot; thick MDF (of my own making) onto a 1-1/4&quot; precision-ground steel shaft, and this joint needs to be strong enough to convey a rather large amount of torque, about 575-600 in-lbs, effectively a 5hp motor driving the shaft at 500-600 rpm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't have a milling machine or any metalworking tools, so my preferred option of 'milling flats onto the shaft' is out. My second option was to attempt to increase the surface area of the wheel's bore and then use an appropriate adhesive such as JB Weld.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is JB weld a suitable solution to this problem or is there a better method of fastening that doesn't involve modifying the steel shaft at all?&lt;/p&gt;&#xA;" OwnerUserId="4452" LastEditorUserId="4452" LastEditDate="2014-05-25T04:56:33.553" LastActivityDate="2014-05-25T04:56:33.553" Title="Securing a disc/wheel to a shaft" Tags="&lt;wheel&gt;" AnswerCount="0" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="2984" PostTypeId="2" ParentId="2981" CreationDate="2014-05-25T08:57:01.360" Score="2" Body="&lt;p&gt;Just signed up to answer the question!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have always found I get the best results laser cutting when using acrylic, would highly recommend it. Have made robots from some solid 6mm accrylic before. It looks nice, it's strong, pretty light, quick to cut, and it's easy to make more robots later!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would also recommend using acrylic glue to hold the body together:&#xA;&lt;a href=&quot;http://www.cutlasercut.com/resources/tips-and-advice/bonding-and-glueing-acrylic-and-plastics&quot; rel=&quot;nofollow&quot;&gt;http://www.cutlasercut.com/resources/tips-and-advice/bonding-and-glueing-acrylic-and-plastics&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I managed to get hold of some which was UV cured, and only took about 20 minutes to dry in the sun. This stuff is pretty toxic, would recommend using it outside anyway.&lt;/p&gt;&#xA;" OwnerUserId="4453" LastEditorUserId="4453" LastEditDate="2014-05-25T09:16:38.477" LastActivityDate="2014-05-25T09:16:38.477" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="2985" PostTypeId="2" ParentId="2945" CreationDate="2014-05-25T09:15:20.793" Score="0" Body="&lt;p&gt;Are you just using a microcontroller? Do you have the option of strapping a laptop to it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I use Octomap to store my robot's maps (with the robotic operating system):&#xA;&lt;a href=&quot;http://octomap.github.io/&quot; rel=&quot;nofollow&quot;&gt;http://octomap.github.io/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is the best method I have found to store rich robot sensory data in an efficient way. There is a good PDF explaining how it works:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;www.first-mm.eu/files/hornung13auro.pdf&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm pretty sure you could apply the same principles to a raw embedded robot.&lt;/p&gt;&#xA;" OwnerUserId="4453" LastActivityDate="2014-05-25T09:15:20.793" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2986" PostTypeId="2" ParentId="2966" CreationDate="2014-05-25T10:51:28.023" Score="1" Body="&lt;p&gt;The video link is to a universal robots robot (R10), it is a very high quality arm. I would rate it as one of the best in the world in it's class.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I recommend ROS industrial to drive the robotic arm:&#xA;&lt;a href=&quot;http://rosindustrial.org/&quot; rel=&quot;nofollow&quot;&gt;http://rosindustrial.org/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are doing the mechanics yourself, and you want to get it to this quality, you will need some serious skill, a small team of engineers, and a lot of cash.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are just doing it by yourself as a hobby, you will probably want to start small:&#xA;&lt;a href=&quot;https://www.kickstarter.com/projects/ufactory/uarm-put-a-miniature-industrial-robot-arm-on-your&quot; rel=&quot;nofollow&quot;&gt;https://www.kickstarter.com/projects/ufactory/uarm-put-a-miniature-industrial-robot-arm-on-your&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can get it running with just a laptop and an Arduino. The project will be pretty cheap.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I get most of my serious gear from China (big motors, sensors + electronics), and design/create most of the mechanics myself. It takes a lot of effort and cash.&lt;/p&gt;&#xA;" OwnerUserId="4453" LastActivityDate="2014-05-25T10:51:28.023" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2987" PostTypeId="1" AcceptedAnswerId="4548" CreationDate="2014-05-25T11:41:37.727" Score="5" ViewCount="1620" Body="&lt;p&gt;I have upgraded the motors in my robotic arm to sensored, brushless RC car motors. The hope was to reuse the Hall sensors to double as a rotary encoder, by tapping 2 Hall sensors and treating the 2 bits as a quadrature signal (a crude quadrature since 2 of the 4 states will be longer than the other 2).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This works when none of the motor phases are powered and I just rotate the motor manually. But once the stator coils are energized, the encoder no longer counts correctly: When running at low power, the counting is correct, but when running under high power, the count is monotonic (only increases or decreases) no matter if I run in reverse or forward.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm almost certain this is because of the stator coils overpowering the permanent magnets on the rotors. So is there still a way to use the Hall sensors as an encoder?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sorry if this is an obvious question. I'd love to research this problem more if I had more time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt;&#xA;I've measured the wave forms with my DSO quad and see the expected 120 degree separated signals (the measurement for phase C gets more inaccurate over time because I only had 2 probes, so I measured phases A &amp;amp; B first, then A &amp;amp; C, and then merged them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When ESC speed is 0.1:&#xA;&lt;img src=&quot;https://i.stack.imgur.com/tXBod.png&quot; alt=&quot;speed = 0.1&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When ESC speed is 0.3:&#xA;&lt;img src=&quot;https://i.stack.imgur.com/4D4Na.png&quot; alt=&quot;speed = 0.3&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Previously, I was using a hardware quadrature counter (EQEP module on a BeagleBone). At speed=0.3, this was counting backwards no matter if I do forward or reverse!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I then implemented quadrature counting on an LPC1114FN28 uController. The result was still bad at high speeds (count didn't change at all). The logic was:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void HandleGPIOInterrupt()&#xA;{&#xA;  const uint8_t allowableTransitions[4][2] = {1, 2, 3, 0, 0, 3, 2, 1};&#xA;  static int prevState = -1;&#xA;  int state = phaseA | (phaseB * 2)&#xA;  if (prevState != -1)&#xA;  {&#xA;    if (allowableTransitions[prevState][0] == state)&#xA;    {&#xA;       ++rotations;&#xA;    }&#xA;    else if (allowableTransitions[prevState][1] == state)&#xA;    {&#xA;      --rotations;&#xA;    }&#xA;  }&#xA;  prevState = state;&#xA;}    &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then I got the idea to change the code to not update prevState until an expected state happens (to deal with glitches):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  int state = phaseA | (phaseB * 2)&#xA;  if (prevState != -1)&#xA;  {&#xA;    if (allowableTransitions[prevState][0] == state)&#xA;    {&#xA;       ++rotations;&#xA;       prevState = state;&#xA;    }&#xA;    else if (allowableTransitions[prevState][1] == state)&#xA;    {&#xA;      --rotations;&#xA;      prevState = state;&#xA;    }&#xA;    else&#xA;    {&#xA;        // assume transition was a glitch&#xA;    }&#xA;  }&#xA;  else&#xA;    prevState = state;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Now the counting finally is correct in both directions, even at speeds higher than 0.3!&#xA;But are there really glitches causing this? I don't see any in the waveforms?&lt;/p&gt;&#xA;" OwnerUserId="710" LastEditorUserId="350" LastEditDate="2014-06-02T22:00:34.213" LastActivityDate="2016-08-20T02:10:08.313" Title="Can I reuse the hall sensors in a brushless motor as an encoder?" Tags="&lt;brushless-motor&gt;&lt;encoding&gt;&lt;hall-sensor&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2988" PostTypeId="1" AcceptedAnswerId="2996" CreationDate="2014-05-26T03:39:44.167" Score="2" ViewCount="304" Body="&lt;p&gt;I wanted to present a voice-controlled robot in my lab's upcoming demo contest. My robot is essentially a x86 Ubuntu notebook resting on top of a two-wheeled platform, so in principle any solution available on Linux would do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I looked into &lt;a href=&quot;http://julius.sourceforge.jp/en_index.php&quot; rel=&quot;nofollow&quot;&gt;Julius&lt;/a&gt;, but it seems the only comprehensive acoustic model available for it is aimed at the Japanese language – which coincidentally I &lt;em&gt;can&lt;/em&gt; speak a little, but apparently not clearly enough to produce anything beyond garbled text. I also tried the &lt;a href=&quot;https://gist.github.com/alotaiba/1730160&quot; rel=&quot;nofollow&quot;&gt;Google Speech API&lt;/a&gt;, which has a decent selection of languages and worked very well, but requires Internet access. Finally there is &lt;a href=&quot;http://cmusphinx.sourceforge.net/&quot; rel=&quot;nofollow&quot;&gt;CMU Sphinx&lt;/a&gt;, which I haven't yet tested, but I'm afraid might have a problem with my accent (I'm a nativa Brazilian Portuguese speaker, and apparently there is no such acoustic model available for it).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is that all there is to it? Have I missed any additional options? As you may have guessed, my main requirement is support for my native language (Brazilian Portuguese), or failing that, good performance for English spoken with foreign accents. A C++ API is highly desirable, but I can do with a shell interface.&lt;/p&gt;&#xA;" OwnerUserId="4310" LastEditorUserId="4310" LastEditDate="2014-05-30T06:31:36.770" LastActivityDate="2021-01-27T13:09:37.490" Title="Voice control solution for Linux robot?" Tags="&lt;mobile-robot&gt;&lt;linux&gt;&lt;speech-processing&gt;&lt;digital-audio&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="1" ClosedDate="2014-06-04T11:53:37.420" ContentLicense="CC BY-SA 3.0" />
  <row Id="2989" PostTypeId="2" ParentId="2982" CreationDate="2014-05-26T06:12:05.637" Score="3" Body="&lt;p&gt;Just to be clear, my answers assume you are asking about NXT, &lt;strong&gt;not&lt;/strong&gt; the more recent EV3. Also I couldn't find information on how RobotC works on NXT – if it loads native code straight to memory or generates RXE files to run on the NXT VM – so I'll cover both scenarios.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to the &lt;a href=&quot;http://www.legolab.daimi.au.dk/DigitalControl.dir/LEGO%20MINDSTORMS%20NXT%20Hardware%20Developer%20Kit/LEGO%20MINDSTORMS%20NXT%20Hardware%20Developer%20Kit.pdf&quot; rel=&quot;nofollow&quot;&gt;NXT Hardware Developer Kit&lt;/a&gt;, the NXT brick's main processor is connected to 64KB RAM. That is the amount of memory available for &lt;a href=&quot;http://www.cs.tau.ac.il/~stoledo/lego/nxt-native/&quot; rel=&quot;nofollow&quot;&gt;bare metal programming&lt;/a&gt;, that is if you load a native program into the brick, bypassing the original firmware. Of course in this case your program will also have to include drivers to control robot sensors, motors and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If however your program runs on top of the NXT VM, the &lt;a href=&quot;http://cache.lego.com/upload/contentTemplating/Mindstorms2SupportFilesDownloads/otherfiles/download49E7B34DE74049D6BC872D3A0FB2A1F6.pdf&quot; rel=&quot;nofollow&quot;&gt;Executable File Specification&lt;/a&gt; says that &lt;em&gt;&quot;[w]hen the VM runs a program, it reads the encoded&#xA;.RXE file format from flash memory and initializes a 32KB pool of RAM reserved for use by user programs. The .RXE file specifies the layout and default content of this pool. (...) Non-volatile sub-components remain in the file, which the VM can refer to at any time during program execution. The code space is an example of a non-volatile sub-component. The bytecodes never change at run-time, so these bytecodes remain entirely in flash memory.&quot;&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In other words, RXE programs have a 32KB limit for data structures, but bytecode instructions are not included in this total – they are executed directly from Flash memory, which has a size of 256KB (minus the size of the NXT VM – unfortunately I couldn't find a number for this).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for processing speed, the NXT HDK says the main processor runs at 48MHz. How this translates to actual speed again depends on whether RobotC programs run natively or on top of the VM. The &lt;a href=&quot;http://lejos-osek.sourceforge.net/&quot; rel=&quot;nofollow&quot;&gt;nxtOSEK&lt;/a&gt; project &lt;a href=&quot;http://lejos-osek.sourceforge.net/whatislejososek.htm&quot; rel=&quot;nofollow&quot;&gt;reports&lt;/a&gt; their test program achieves a maximum speed of 1,864,000 loop iterations per minute.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But at any rate, I'd bet peripheral pooling, not processing speed, will be you main speed limiting factor. &lt;a href=&quot;http://www.cs.tau.ac.il/~stoledo/lego/nxt-native/&quot; rel=&quot;nofollow&quot;&gt;According to Sivan Toledo&lt;/a&gt;, &lt;em&gt;&quot;[t]he Interval Timer of the AT91SAM7S256 is used to generate an interrupt every 1 ms. This interrupt is used for time keeping and for running all the periodic tasks of the system.&quot;&lt;/em&gt; So every 1ms your program stops while the NXT drivers talk to sensors and motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So to summarize:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;RXE programs running on top of the VM are limited to 32KB RAM for data structures, whereas native programs will have 64KB to share between data and code;&lt;/li&gt;&#xA;&lt;li&gt;RXE programs run straight from Flash, so their code size is limited to how much storage is taken by the firmware. For native programs see the previous answer;&lt;/li&gt;&#xA;&lt;li&gt;The brick's main processor runs at 48MHz, but peripheral interruptions occur once every 1ms, so even native code will probably run somewhat slower than that.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I hope this helps.&lt;/p&gt;&#xA;" OwnerUserId="4310" LastActivityDate="2014-05-26T06:12:05.637" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="2990" PostTypeId="1" AcceptedAnswerId="4294" CreationDate="2014-05-26T06:33:18.090" Score="8" ViewCount="278" Body="&lt;p&gt;Let's say we have a bunch of observations $z^{i}$ from sensor and we have a map in which we can get the predicted measurements $\hat{z}^{i}$ for landmarks. In EKF localization in correction step, should we compare each observation $z^{i}$ with the entire predicted measurement $\hat{z}^{i}$?, so in this case we have two loops? Or we just compare each observation with each predicted measurement?, so in this case we have one loop. I assume the sensor can give all observations for all landmarks every scan.  The following picture depicts the scenario. Now every time I execute the EKF-Localization I get $z^{i} = \{ z^{1}, z^{2}, z^{3}, z^{4}\}$ and I have $m$, so I can get $\hat{z}^{i} = \{ \hat{z}^{1}, \hat{z}^{2}, \hat{z}^{3}, \hat{z}^{4}\}$. To get the innovation step, this is what I did &#xA;$$&#xA;Z^{1} = z^{1} - \hat{z}^{1} \\&#xA;Z^{2} = z^{2} - \hat{z}^{2} \\&#xA;Z^{3} = z^{3} - \hat{z}^{3} \\&#xA;Z^{4} = z^{4} - \hat{z}^{4} \\&#xA;$$&#xA;where $Z$ is the innovation. For each iteration I get four innovations. Is this correct? I'm using EKF-Localization  in this book &lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/0262201623&quot; rel=&quot;noreferrer&quot;&gt;Probabilistic Robotics&lt;/a&gt; page 204. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/Ht7Yw.jpg&quot; alt=&quot;&quot;&gt; &lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="2155" LastEditDate="2014-05-26T07:58:34.590" LastActivityDate="2018-06-15T17:46:30.337" Title="innovation step ekf localization?" Tags="&lt;sensors&gt;&lt;localization&gt;&lt;ekf&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2991" PostTypeId="2" ParentId="2980" CreationDate="2014-05-26T13:28:59.837" Score="2" Body="&lt;p&gt;In its &lt;a href=&quot;http://en.wikipedia.org/wiki/Robust_control&quot; rel=&quot;nofollow&quot;&gt;broadest sense&lt;/a&gt;, a controller is &quot;robust&quot; when it allows for bounded variations to its parameters – in other words, the controller continues to work as long as its parameters remain within a given bounded range. In the context of Bode work, this translates to high-gain feedback, but it's not necessarily true elsewhere – see for example the &lt;a href=&quot;http://en.wikipedia.org/wiki/H_infinity&quot; rel=&quot;nofollow&quot;&gt;H-infinity methods&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="4310" LastActivityDate="2014-05-26T13:28:59.837" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="2992" PostTypeId="2" ParentId="2988" CreationDate="2014-05-26T17:04:04.713" Score="2" Body="&lt;p&gt;Well, if no connection with internet is a requirement, I would say that the best option could be using Julius with a self trained corpus model. In this case you can use your own language and intonation. As an advantage, the success percentage of the ASR unit will be higher than using a public trained corpus. As a disadvantage, this corpus will be useful just for you, for other users the percentage of recognized commands will be lower.&lt;/p&gt;&#xA;&lt;p&gt;With your own corpus, using a limited number of voice commands would be something relatively easy to do, but of course if we are speaking about natural language recognition, the only solution is looking in internet for an already trained corpus of your own language.&lt;/p&gt;&#xA;&lt;p&gt;I used Simon &lt;a href=&quot;http://www.simon-listens.org&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.simon-listens.org&lt;/a&gt; to prepare my own corpus, and once was correctly working, I integrate it in the Julius Engine.&lt;/p&gt;&#xA;&lt;p&gt;If using a remote service, as you said the Google API, could be possible, then a combination of Julius + Google API would be the best solution.&#xA;Julius continuously running the ASR process looking for a keyword (already integrated in your corpus), and once this keyword is found, trigger a request to the Google service that is not limited for the number of commands to be recognized.&lt;/p&gt;&#xA;&lt;p&gt;One year ago I created a similar project using Julius, Google API and the Raspberry Pi board. Here can you find further infos: &lt;a href=&quot;http://www.robotergarten.de&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.robotergarten.de&lt;/a&gt; (dead link)&lt;/p&gt;&#xA;" OwnerUserId="4461" LastEditorUserId="4310" LastEditDate="2021-01-27T13:09:37.490" LastActivityDate="2021-01-27T13:09:37.490" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="2993" PostTypeId="2" ParentId="2987" CreationDate="2014-05-26T21:53:50.227" Score="2" Body="&lt;p&gt;I would think you should be able to. I've used magnets and reed switches in a similar application for a speed sensor which uses the turns to calculate speed much like an encoder and it worked perfectly. The hall sensor should behave in a similar way.&lt;/p&gt;&#xA;" OwnerUserId="4465" LastActivityDate="2014-05-26T21:53:50.227" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2994" PostTypeId="2" ParentId="2981" CreationDate="2014-05-26T21:57:17.290" Score="0" Body="&lt;p&gt;We use a laser in our robotics program and they work well, but may sometimes aesthetically scar the edges a bit on transparent pieces. Also, for the most durable robot, I would reccomend lexan polycarbonate instead of acryllic or plexiglass. You can hit lexan with a hammer and it won't shatter and you can cut it using tin snips if need be. A band saw is also a good way to cut plastics.&lt;/p&gt;&#xA;" OwnerUserId="4465" LastActivityDate="2014-05-26T21:57:17.290" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2995" PostTypeId="2" ParentId="2963" CreationDate="2014-05-26T22:00:12.050" Score="0" Body="&lt;p&gt;Find a project you really think is cool with a tutorial and then work towards that. For programming, a good way to learn is to beg, borrow and steal from others by combining their programs to make a hybrid of your own. This gives you something good to start with and you can see what the programmer did to make it work in the first place.&lt;/p&gt;&#xA;" OwnerUserId="4465" LastActivityDate="2014-05-26T22:00:12.050" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="2996" PostTypeId="2" ParentId="2988" CreationDate="2014-05-27T07:06:51.743" Score="1" Body="&lt;p&gt;&lt;a href=&quot;https://robotics.stackexchange.com/users/4461/robotergarten&quot;&gt;robotergarten&lt;/a&gt; gave some really interesting tips, but in the end I decided to roll &lt;a href=&quot;https://github.com/xperroni/clarus/blob/master/src/clarus/io/speech.cpp&quot; rel=&quot;nofollow noreferrer&quot;&gt;my own Google Speech client&lt;/a&gt;, using &lt;a href=&quot;http://sox.sourceforge.net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;sox&lt;/a&gt; to record the user's voice. The ability to work without an Internet connection would be nice but is not really required for my demo, and response time is short enough.&lt;/p&gt;&#xA;" OwnerUserId="4310" LastEditorUserId="4310" LastEditDate="2021-01-27T13:08:31.137" LastActivityDate="2021-01-27T13:08:31.137" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="2997" PostTypeId="2" ParentId="2988" CreationDate="2014-05-27T07:20:29.080" Score="1" Body="&lt;p&gt;Also for completeness, I did find a &lt;a href=&quot;https://github.com/setecrs/julius-lapsam&quot; rel=&quot;nofollow noreferrer&quot;&gt;Julius model for Brazilian Portuguese&lt;/a&gt;, but was rather underwhelmed with its performance – Julius would take several seconds to process any utterance, and usually get what I said hilariously wrong. A &lt;a href=&quot;https://acassis.wordpress.com/2012/11/09/compilando-o-reconhecedor-de-voz-julius-para-funcionar-com-o-coruja/&quot; rel=&quot;nofollow noreferrer&quot;&gt;second model&lt;/a&gt; that promised improved performance for dictation would require me to recompile Julius in order to work, but at that point I had already resigned myself to relying on the Google cloud.&lt;/p&gt;&#xA;" OwnerUserId="4310" LastEditorUserId="4310" LastEditDate="2021-01-27T13:05:12.177" LastActivityDate="2021-01-27T13:05:12.177" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="2998" PostTypeId="1" CreationDate="2014-05-27T10:29:20.460" Score="3" ViewCount="1895" Body="&lt;p&gt;I am experimenting with using a stepper motor for a robotics project. I'd like to use microstepping to give a better resolution and smoother movement, but I have noticed that the finer the microsteps, the lower the torque from the motor. Why is this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For reference I'm using the Allegro Micro &lt;a href=&quot;http://www.allegromicro.com/~/media/Files/Datasheets/A4988-Datasheet.ashx&quot; rel=&quot;nofollow&quot;&gt;A4988&lt;/a&gt; motor driver, and a bipolar stepper motor.&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2015-03-08T23:25:26.043" Title="Why does microstepping give less torque?" Tags="&lt;stepper-motor&gt;&lt;torque&gt;&lt;stepper-driver&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3000" PostTypeId="5" CreationDate="2014-05-28T05:23:47.353" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2014-05-28T05:23:47.353" LastActivityDate="2014-05-28T05:23:47.353" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3001" PostTypeId="4" CreationDate="2014-05-28T05:23:47.353" Score="0" Body="Speech processing is the study of human spoken language in the context of signal processing. It includes several subfields, among them speech recognition and speech synthesis. " OwnerUserId="4310" LastEditorUserId="4310" LastEditDate="2014-06-04T06:29:40.417" LastActivityDate="2014-06-04T06:29:40.417" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3002" PostTypeId="5" CreationDate="2014-05-28T05:35:15.067" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2014-05-28T05:35:15.067" LastActivityDate="2014-05-28T05:35:15.067" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3003" PostTypeId="4" CreationDate="2014-05-28T05:35:15.067" Score="0" Body="A rangefinder is any device that can measure the distance from the observer – the device itself – from a target. This includes sonar, LIDAR, 2D and 3D laser range scanners, time-of-flight cameras, etc." OwnerUserId="4310" LastEditorUserId="4310" LastEditDate="2014-06-04T06:31:12.710" LastActivityDate="2014-06-04T06:31:12.710" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3004" PostTypeId="2" ParentId="2829" CreationDate="2014-05-28T07:27:50.560" Score="0" Body="&lt;p&gt;nanogru is right, you will need definatley need an IMU, not just an accelerometer. The one he recommended looks pretty good. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would also recommend going down the Ardiuno track, it will make life much easier and cheaper. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I normally use encoders too. There is a good Arduino library for encoders:&#xA;&lt;a href=&quot;http://www.pjrc.com/teensy/td_libs_Encoder.html&quot; rel=&quot;nofollow&quot;&gt;http://www.pjrc.com/teensy/td_libs_Encoder.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Have had good success with optical quadrature encoders. Can be read using digital or interrupt inputs. If you want the best performance, you will want to use at least a Mega to have enough interrupts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could also upgrade your robot with a laptop, Kinect, Linux, and ROS (if your robot can handle the payload).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This stuff is pretty easy to set up these days for 6DOF SLAM and autonomous navigation, especially with new tools like MoveIt:&#xA;&lt;a href=&quot;http://moveit.ros.org/robots/&quot; rel=&quot;nofollow&quot;&gt;http://moveit.ros.org/robots/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What do you plan on doing with the position data? Is it for autonomous navigation?&lt;/p&gt;&#xA;" OwnerUserId="4453" LastActivityDate="2014-05-28T07:27:50.560" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3005" PostTypeId="2" ParentId="2173" CreationDate="2014-05-28T07:40:27.907" Score="-1" Body="&lt;p&gt;ROS Indigo Igloo will be coming out in a week or 2. Will be the first release in a year (they used to have 6 month release cycle, it has been a long wait). It moves at such a fast pace, so it may be worth waiting until it comes out so you don't have to set up your environment/re-learn new stuff again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would recommend you start with MoveIt, even if you already have Hydro or Groovy set up:&#xA;&lt;a href=&quot;http://moveit.ros.org/documentation/tutorials/&quot; rel=&quot;nofollow&quot;&gt;http://moveit.ros.org/documentation/tutorials/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With this tutorial first:&#xA;&lt;a href=&quot;http://docs.ros.org/hydro/api/moveit_setup_assistant/html/doc/tutorial.html&quot; rel=&quot;nofollow&quot;&gt;http://docs.ros.org/hydro/api/moveit_setup_assistant/html/doc/tutorial.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then move onto the integrating the Kinect:&#xA;&lt;a href=&quot;http://docs.ros.org/api/pr2_moveit_tutorials/html/planning/src/doc/perception_configuration.html&quot; rel=&quot;nofollow&quot;&gt;http://docs.ros.org/api/pr2_moveit_tutorials/html/planning/src/doc/perception_configuration.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4453" LastActivityDate="2014-05-28T07:40:27.907" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3006" PostTypeId="1" CreationDate="2014-05-28T09:30:13.513" Score="1" ViewCount="361" Body="&lt;p&gt;Am going to be competing in Robocup Rescue in Thailand next year - I was too busy to pull off a campaign for Brazil this year :(&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Will be using CUDA powered GPUs, Kinect/Xtions, and ROS as the primary navigation system, but I need a sensor for long range scanning - at least 25 meters. It is probably overkill for the competition, but I want it to be used in other real world applications. It will need to be very robust, fairly light, high resolution, and proven. The cheaper the better, but high quality is a must.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Have read this question, but I need something that is available and proven now:&#xA;&lt;a href=&quot;https://robotics.stackexchange.com/questions/2744/what-different-sensing-approaches-are-used-in-the-current-batch-of-indoor-3d-cam&quot;&gt;What different sensing approaches are used in the current batch of indoor 3D cameras?&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A similar question was asked before, but closed:&#xA;&lt;a href=&quot;https://robotics.stackexchange.com/questions/2394/lidar-solutions&quot;&gt;LIDAR solutions&lt;/a&gt;. The &lt;a href=&quot;http://www.robotshop.com/en/hokuyo-urg-04lx-laser-rangefinder.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;suggestion&lt;/a&gt; was good , but I need something with a lot more range:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the moment am probably going to go with a the RobotEye &lt;a href=&quot;http://www.ocularrobotics.com/products/lidar/re05/&quot; rel=&quot;nofollow noreferrer&quot;&gt;RE05&lt;/a&gt; or &lt;a href=&quot;http://www.ocularrobotics.com/re08-3d-laser-scanner&quot; rel=&quot;nofollow noreferrer&quot;&gt;RE08&lt;/a&gt; 3D-LiDAR:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a paper that descibes how this sensor can be used on a mobile robot: &lt;a href=&quot;http://www.araa.asn.au/acra/acra2012/papers/pap125.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;www.araa.asn.au/acra/acra2012/papers/pap125.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone have any alternative techniques, or suggestions of a sensor that can achieve similar results?&lt;/p&gt;&#xA;" OwnerUserId="4453" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2014-06-17T18:10:19.040" Title="How can I achieve long distance, high quality 3D Scans on a mobile robot?" Tags="&lt;mobile-robot&gt;&lt;ros&gt;&lt;slam&gt;&lt;kinect&gt;&lt;lidar&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3007" PostTypeId="1" AcceptedAnswerId="3018" CreationDate="2014-05-28T11:39:24.533" Score="3" ViewCount="669" Body="&lt;p&gt;I had the opportunity to work for a factory/company that is in the domain space of production and they want to use a robotic arm for part of the production line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They want basically a robotic arm with payload of about 2 Kgs or more and an arm length of more than 1600mm&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have researched a few companies like Kuka.com but I am not sure what I should be looking for when making suggestions and researching for it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any suggestions you can give me on few good points to be careful about with robotics arms? Any innovating companies out there I should consider? How is an installation done and if I should find a supplier for it etc. Please enlighten me. &lt;/p&gt;&#xA;" OwnerUserId="2711" LastActivityDate="2014-05-30T01:09:03.990" Title="Industrial Robotic Arm" Tags="&lt;robotic-arm&gt;&lt;mechanism&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3008" PostTypeId="2" ParentId="2988" CreationDate="2014-05-28T15:09:29.577" Score="1" Body="&lt;p&gt;a couple of years ago I tried Julius and it worked quite well. It is documented here, hope it helps:&#xA;&lt;a href=&quot;http://achuwilson.wordpress.com/2012/01/11/speech-recogition-using-julius-in-linux/&quot; rel=&quot;nofollow&quot;&gt;http://achuwilson.wordpress.com/2012/01/11/speech-recogition-using-julius-in-linux/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://achuwilson.wordpress.com/2012/01/11/chippu-speech-recognition/&quot; rel=&quot;nofollow&quot;&gt;http://achuwilson.wordpress.com/2012/01/11/chippu-speech-recognition/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4485" LastActivityDate="2014-05-28T15:09:29.577" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3009" PostTypeId="2" ParentId="3006" CreationDate="2014-05-28T15:55:43.503" Score="2" Body="&lt;p&gt;If cost is a factor, you can also do 3D reconstruction using &lt;a href=&quot;http://en.wikipedia.org/wiki/Computer_stereo_vision&quot; rel=&quot;nofollow&quot;&gt;stereo vision&lt;/a&gt; with a pair of commercial digital cameras. Many algorithms are available online to reconstruct 3D scenes from a pair of stereo images since this is a popular research topic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The quality and range of the reconstructed scene will be a function of the image resolution, the image distortion, and the spacing between cameras.&lt;/p&gt;&#xA;" OwnerUserId="4474" LastActivityDate="2014-05-28T15:55:43.503" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3010" PostTypeId="2" ParentId="2966" CreationDate="2014-05-28T20:41:45.743" Score="0" Body="&lt;p&gt;I think what you're really asking is what kind of actuator can I get that's powerful,  &lt;em&gt;inexpensive, and simple&lt;/em&gt;, which rules out hydraulics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm also building a robot arm... first to catch balls and hopefully &lt;a href=&quot;http://www.youtube.com/watch?v=VuSCErmoYpY&quot; rel=&quot;nofollow&quot;&gt;fencing!&lt;/a&gt;&#xA;So I'm interested in speed and power, but not precision which is what most robots aim for.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To the best of my knowledge, if you want high power and use commodity parts, the answer is RC car motors and planetary gearboxes.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Motor: you need to get a sensored motor for precise running (especially during startup), braking, and counting revolutions. Here's an excellent recommendation:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://holmeshobbies.com/Revolver-S-Stubby-Sensored-Outrunner.html&quot; rel=&quot;nofollow&quot;&gt;Revolver stubby&lt;/a&gt;&#xA;    Very high amount of torque in a compact size due to being an outrunner (likely the only sensored outrunner out there thanks to John Holmes)&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Planetary gearbox:&#xA;Look at BaneBots' P60 and P80 gearboxes.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I have used both of these to soup up a Scorbot 3 that I bought at a surplus depot and am impressed.&lt;/p&gt;&#xA;" OwnerUserId="710" LastActivityDate="2014-05-28T20:41:45.743" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3011" PostTypeId="2" ParentId="3007" CreationDate="2014-05-29T07:38:36.460" Score="2" Body="&lt;p&gt;Based on your requirements, I would recommend the &lt;a href=&quot;https://github.com/ros-industrial/universal_robot&quot; rel=&quot;nofollow&quot;&gt;UR5 (0.85m range, 5kg payload) or UR10 (1.3 m range, 10kg payload)&lt;/a&gt; from Universal Robotics. Have a friend who has used it for work, and it performs well. It may be overkill on the payload, but it is the only one I would recommend!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would use &lt;a href=&quot;http://rosindustrial.org/&quot; rel=&quot;nofollow&quot;&gt;ROS industrial&lt;/a&gt; to drive it.&lt;/p&gt;&#xA;" OwnerUserId="4453" LastActivityDate="2014-05-29T07:38:36.460" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3013" PostTypeId="1" AcceptedAnswerId="3014" CreationDate="2014-05-29T15:30:22.680" Score="5" ViewCount="2373" Body="&lt;p&gt;I have built several quadcopters, hexacopters, and octacopters. Between the flight controller (I use 3DR APM2.6 or Pixhawk) and the motors I use heavy duty power wires as well as a servo-style cable carrying a PWM control signal for the ESC. Three short heavy-duty wires then connect the motor to the ESC, one for each phase.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Several times I've heard or read people saying that the electronic speed controllers (ESCs) should be mounted far away from the flight controller (FMU seems to be the abbreviation en vogue) and close to the motors. I think the idea is that this cuts down on interference (I'm not sure what sort) that could be emitted by the long ESC -&gt; motor wires that would be required if you have the ESCs all at the center of the aircraft. Another consideration is that ESCs can be cooled by propellers if they are right under the rotor wash, as mine usually are.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, I've always mounted ESCs close to motors, but realized that design could be much simpler if ESCs are mounted centrally. So, my question is: what are the pros and cons of mounting ESCs close to the motor versus close to the FMU?&lt;/p&gt;&#xA;" OwnerUserId="1473" LastEditorUserId="1473" LastEditDate="2019-12-04T16:05:08.427" LastActivityDate="2019-12-04T16:05:08.427" Title="Does it matter if my electronic speed controllers are close to my brushless motors?" Tags="&lt;brushless-motor&gt;&lt;multi-rotor&gt;&lt;esc&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="3014" PostTypeId="2" ParentId="3013" CreationDate="2014-05-29T17:06:16.910" Score="3" Body="&lt;p&gt;First, you can look at &lt;a href=&quot;http://www.mikrokopter.de/en/products/flightsystems&quot; rel=&quot;nofollow&quot;&gt;Mikrokopter&lt;/a&gt; as an example of quad with centrally mounted ESCs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for the various engineering reasons for ESC location, here is some rationale behind the two you mentioned&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) Interference/noise. Non-steady state current running through wire can induce current to flow in nearby conductors. Practically speaking, this means that if you have power lines wires next to signal wires, the changing current in the power wires will create noise on the signal wires. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, this effect degrades with both distance and non-parallelism of the wires (ideal perpendicular wires don't have this coupling effect). So as long as you don't run signal wires right next to your power wires, you should be fine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) Cooling. ESCs contain power electronics that need to be cooled. Certainly having them under the forced air coming from the spinning rotors helps but at the theoretical cost of reduced aerodynamic efficiency. If you can keep your ESCs cool enough elsewhere , then no problems. &lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2014-05-29T17:06:16.910" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3016" PostTypeId="1" CreationDate="2014-05-29T21:52:04.973" Score="1" ViewCount="182" Body="&lt;p&gt;&lt;a href=&quot;http://pointclouds.org/documentation/tutorials/normal_distributions_transform.php#normal-distributions-transform&quot; rel=&quot;nofollow&quot;&gt;http://pointclouds.org/documentation/tutorials/normal_distributions_transform.php#normal-distributions-transform&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've used this program with the sample PCD's given and it came out correctly. This was confirmed by experienced users on here. Now I'm trying to use my own pcd's. I didn't want to bother changing the program so I just changed the names to room_scan1 and room_scan2. When I attempt to use them, I get this error:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Loaded 307200 data points from room_scan1.pcd Loaded 307200 data&#xA;  points from room_scan2.pcd Filtered cloud contains 1186 data points&#xA;  from room_scan2.pcd normal_distributions_transform:&#xA;  /build/buildd/pcl-1.7-1.7.1/kdtree/include/pcl/kdtree/impl/kdtree_flann.hpp:172:&#xA;  int pcl::KdTreeFLANN::radiusSearch(const PointT&amp;amp;, double,&#xA;  std::vector&amp;amp;, std::vector&amp;amp;, unsigned int) const [with PointT =&#xA;  pcl::PointXYZ, Dist = flann::L2_Simple]: Assertion&#xA;  `point_representation_-&gt;isValid (point) &amp;amp;&amp;amp; &quot;Invalid (NaN, Inf) point&#xA;  coordinates given to radiusSearch!&quot;' failed. Aborted (core dumped)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This is the program I compiled: &lt;a href=&quot;http://robotica.unileon.es/mediawiki/index.php/PCL/OpenNI_tutorial_1%3a_Installing_and_testing#Testing_.28OpenNI_viewer.29&quot; rel=&quot;nofollow&quot;&gt;http://robotica.unileon.es/mediawiki/index.php/PCL/OpenNI_tutorial_1:_Installing_and_testing#Testing_.28OpenNI_viewer.29&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before you suggest it, I will let you know I already changed all of the PointXYZRGBA designations to just PointXYZ. It threw the same error before and after doing this. The thing that confuses me is that I looked at my produced PCD files and they seem to be exactly the same as the samples given for NDT.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mine:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;2320 2e50 4344 2076 302e 3720 2d20 506f&#xA;696e 7420 436c 6f75 6420 4461 7461 2066&#xA;696c 6520 666f 726d 6174 0a56 4552 5349&#xA;4f4e 2030 2e37 0a46 4945 4c44 5320 7820&#xA;7920 7a0a 5349 5a45 2034 2034 2034 0a54&#xA;5950 4520 4620 4620 460a 434f 554e 5420&#xA;3120 3120 310a 5749 4454 4820 3634 300a&#xA;4845 4947 4854 2034 3830 0a56 4945 5750&#xA;4f49 4e54 2030 2030 2030 2031 2030 2030&#xA;2030 0a50 4f49 4e54 5320 3330 3732 3030&#xA;0a44 4154 4120 6269 6e61 7279 0a00 00c0&#xA;7f00 00c0 7f00 00c0 7f00 00c0 7f00 00c0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Sample from NDT page:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;2320 2e50 4344 2076 302e 3720 2d20 506f&#xA;696e 7420 436c 6f75 6420 4461 7461 2066&#xA;696c 6520 666f 726d 6174 0a56 4552 5349&#xA;4f4e 2030 2e37 0a46 4945 4c44 5320 7820&#xA;7920 7a0a 5349 5a45 2034 2034 2034 0a54&#xA;5950 4520 4620 4620 460a 434f 554e 5420&#xA;3120 3120 310a 5749 4454 4820 3131 3235&#xA;3836 0a48 4549 4748 5420 310a 5649 4557&#xA;504f 494e 5420 3020 3020 3020 3120 3020&#xA;3020 300a 504f 494e 5453 2031 3132 3538&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Does anyone have any ideas?&lt;/p&gt;&#xA;" OwnerUserId="4423" LastActivityDate="2015-06-25T13:56:20.143" Title="Tried Normal Distributions Transform with my own files (in correct PCD format) and it throws errors, why?" Tags="&lt;kinect&gt;&lt;computer-vision&gt;&lt;openni&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3017" PostTypeId="1" AcceptedAnswerId="3019" CreationDate="2014-05-30T01:06:12.457" Score="0" ViewCount="569" Body="&lt;p&gt;In general, what is a good programming language for robotics? I am a starting robo nerd and don't know anyone who would know things like this.&lt;/p&gt;&#xA;" OwnerUserId="4490" LastActivityDate="2014-06-03T12:09:53.233" Title="Programming language?" Tags="&lt;mobile-robot&gt;&lt;wheeled-robot&gt;&lt;programming-languages&gt;" AnswerCount="2" CommentCount="0" ClosedDate="2014-06-04T11:52:27.740" ContentLicense="CC BY-SA 3.0" />
  <row Id="3018" PostTypeId="2" ParentId="3007" CreationDate="2014-05-30T01:09:03.990" Score="5" Body="&lt;p&gt;2 kgs is not very much, so i would probably consider arms that are slightly less &lt;em&gt;industrial&lt;/em&gt; than Kuka, ABB, Fanuc, Denso and the like.  However, 1.6m is pretty long and that may be hard to find in non-industrial arms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind there are many other factors to consider when choosing a robot arm.  human safety, accuracy, repeat-accuracy, speed, workspace envelope.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;for example, for relatively planar tasks, low payload, and very fast speeds, a delta configuration robot is best.  Larger payloads, maybe a SCARA configuration is better.  super large workspace, and planar tasks, perhaps a gantry is best.  the point being, there is more than &lt;em&gt;typical&lt;/em&gt; robot arms with spherical workspaces.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;some of the arms listed below just won't survive the number of cycles industrial arms are typically driven to.  the arms listed below are slightly more human safe than standard industrial arms,  but probably less accurate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;all that being said, here are some more arms to consider:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As Pikey mentioned, Universal Robotics (&lt;a href=&quot;http://www.universal-robots.com/&quot; rel=&quot;noreferrer&quot;&gt;http://www.universal-robots.com/&lt;/a&gt;) has some arms that might work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should also consider the WAM arm from Barrett (&lt;a href=&quot;http://www.barrett.com/robot/products-arm.htm&quot; rel=&quot;noreferrer&quot;&gt;http://www.barrett.com/robot/products-arm.htm&lt;/a&gt;).  It has been around a long time, and has a longer reach than many other arms. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A lighter duty arm which is very human safe is the Kinova arm: &lt;a href=&quot;http://kinovarobotics.com/&quot; rel=&quot;noreferrer&quot;&gt;http://kinovarobotics.com/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another that i have seen, but never touched is the Schunk arm: (&lt;a href=&quot;http://mobile.schunk-microsite.com/en/produkte/produkte/dextrous-lightweight-arm-lwa-4d.html&quot; rel=&quot;noreferrer&quot;&gt;http://mobile.schunk-microsite.com/en/produkte/produkte/dextrous-lightweight-arm-lwa-4d.html&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The HDT Arm might be overkill: (&lt;a href=&quot;http://www.hdtglobal.com/products/robotics/Adroit_Manipulator_Arm/&quot; rel=&quot;noreferrer&quot;&gt;http://www.hdtglobal.com/products/robotics/Adroit_Manipulator_Arm/&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and of course Baxter for very light industrial use: &lt;a href=&quot;http://www.rethinkrobotics.com/products/baxter/&quot; rel=&quot;noreferrer&quot;&gt;http://www.rethinkrobotics.com/products/baxter/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-05-30T01:09:03.990" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3019" PostTypeId="2" ParentId="3017" CreationDate="2014-05-30T04:37:08.737" Score="5" Body="&lt;p&gt;The short answer is, frustratingly, &quot;it depends&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nearly every established language can be used to program one robot platform or another. In my short career as a roboticist I have already used Python, Java and C++ to program different robots. There are even &lt;a href=&quot;http://libre.adacore.com/tools/mindstorms/&quot;&gt;tools&lt;/a&gt; to program the Lego NXT in &lt;em&gt;Ada,&lt;/em&gt; would you believe that? So whatever programming language you already know, there's a good chance you can use just that: Google &lt;code&gt;robot &amp;lt;language name&amp;gt;&lt;/code&gt; and see what turns up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, if you have no previous programming language knowledge, C and C++ are probably the safest bets out there. Most robotics platforms support either one of them (or can be &lt;a href=&quot;http://www.cs.tau.ac.il/~stoledo/lego/nxt-native/&quot;&gt;coaxed into support&lt;/a&gt; without too much effort), and there are plenty of &lt;a href=&quot;http://opencv.org/&quot;&gt;useful packages&lt;/a&gt; available. As a bonus, C / C++ were highly influential to languages that came after them, so it would give you a head start on many a language you might want to learn later.&lt;/p&gt;&#xA;" OwnerUserId="4310" LastActivityDate="2014-05-30T04:37:08.737" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="3020" PostTypeId="2" ParentId="2526" CreationDate="2014-05-30T05:03:28.577" Score="3" Body="&lt;p&gt;Regarding methodologies and tools, I recommend Chris Eliasmith's &lt;a href=&quot;http://nengo.ca/build-a-brain&quot; rel=&quot;nofollow&quot;&gt;How to Build a Brain&lt;/a&gt;. It presents the Semantic Pointer Architecture (SPA), a cognitive model that has been realized in the open source &lt;a href=&quot;http://nengo.ca/&quot; rel=&quot;nofollow&quot;&gt;Nengo&lt;/a&gt; toolkit. I have read the book's introduction and some of Eliasmith's papers, and so far the approach looks very promising.&lt;/p&gt;&#xA;" OwnerUserId="4310" LastActivityDate="2014-05-30T05:03:28.577" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3021" PostTypeId="1" AcceptedAnswerId="20442" CreationDate="2014-05-30T06:25:12.813" Score="1" ViewCount="119" Body="&lt;p&gt;I want to give my Linux robot the ability to locate a sound source and drive towards it. I am reading a &lt;a href=&quot;http://cdn.intechopen.com/pdfs-wm/10567.pdf&quot; rel=&quot;nofollow&quot;&gt;paper&lt;/a&gt; on sound localization that seems to cover the theory well enough, but I'm at a loss as to how do I implement it. Specifically I would like to know:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;How do I connect two microphones to a Linux PC?&lt;/li&gt;&#xA;&lt;li&gt;How do I record from two microphones simultaneously?&lt;/li&gt;&#xA;&lt;li&gt;Is there any library of sound processing algorithms (similar to how OpenCV is a library of computer vision algorithms) available for Linux?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="4310" LastActivityDate="2020-04-16T09:07:59.983" Title="Directional hearing for Linux robot?" Tags="&lt;mobile-robot&gt;&lt;digital-audio&gt;&lt;linux&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3022" PostTypeId="5" CreationDate="2014-05-30T06:29:14.390" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2014-05-30T06:29:14.390" LastActivityDate="2014-05-30T06:29:14.390" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3023" PostTypeId="4" CreationDate="2014-05-30T06:29:14.390" Score="0" Body="Linux is an open source, UNIX-like operating system available for a variety of platforms, including a number of embedded hardware for robotics and other applications." OwnerUserId="4310" LastEditorUserId="4310" LastEditDate="2014-06-04T06:31:21.100" LastActivityDate="2014-06-04T06:31:21.100" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3024" PostTypeId="5" CreationDate="2014-05-30T06:31:07.070" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2014-05-30T06:31:07.070" LastActivityDate="2014-05-30T06:31:07.070" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3025" PostTypeId="4" CreationDate="2014-05-30T06:31:07.070" Score="0" Body="Digital audio refers to the recording, storage, generation, manipulation and reproduction of sound using audio signals encoded in digital form." OwnerUserId="4310" LastEditorUserId="4310" LastEditDate="2014-06-04T06:29:49.947" LastActivityDate="2014-06-04T06:29:49.947" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3026" PostTypeId="1" AcceptedAnswerId="5015" CreationDate="2014-05-30T07:23:48.233" Score="4" ViewCount="593" Body="&lt;p&gt;Hello I wanted to simulate a busy urban road,similar to &lt;strong&gt;Darpa Urban Challenge&lt;/strong&gt; for an autonomous &lt;strong&gt;self-driving-car&lt;/strong&gt;. I'm in search of simulators for that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've seen gazebo since its integration with ROS is easier but editing world files or indeed creating them itself is difficult. In &lt;strong&gt;torcs&lt;/strong&gt; simulator I have seen many world files but not many sensors.  I don't want much physics in my simulation. I want a light weight simulator(for checking out path planning on an urban road) and in which creating roads are easier. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've even searched for gazebo sdf files similar to urban city but in vain.&lt;/p&gt;&#xA;" OwnerUserId="4491" LastActivityDate="2014-11-19T20:22:20.070" Title="world files for simulating roads and tracks" Tags="&lt;simulator&gt;&lt;gazebo&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3027" PostTypeId="1" CreationDate="2014-05-30T13:51:21.937" Score="6" ViewCount="4472" Body="&lt;p&gt;I am developing a quadcopter platform on which will be extended over the next year. The project can be found on &lt;a href=&quot;https://github.com/micavdtu/MICAV&quot; rel=&quot;noreferrer&quot;&gt;Github&lt;/a&gt;. Currently, we are using an Arduino Uno R3 as the flight management module.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At present, I am tuning the &lt;a href=&quot;https://github.com/micavdtu/MICAV/blob/master/mav_pilot/PID.cpp&quot; rel=&quot;noreferrer&quot;&gt;PID loops&lt;/a&gt;. The PID function is implemented as:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;int16_t pid_roll(int16_t roll)&#xA;{&#xA;    static int16_t roll_old = 0;&#xA;    int16_t result = &#xA;    (KP_ROLL * roll) + &#xA;    (KI_ROLL * (roll_old + roll)) +&#xA;    (KD_ROLL * (roll - roll_old))&#xA;    ;&#xA;    roll_old += roll;&#xA;    result = constrain(result, PID_MIN_ROLL, PID_MAX_ROLL);&#xA;    return -result;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I am having trouble interpreting the system response on varying the constants. I believe the problem is related to the questions below.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;How frequently should a PID controller update the motor values? Currently, my update time is about 100-110 milliseconds. &lt;/li&gt;&#xA;&lt;li&gt;What should be the maximum change that a PID update should make on the motor thrusts? Currently, my maximum limit is about +-15% of the thrust range.&lt;/li&gt;&#xA;&lt;li&gt;At what thrust range or values, should the tuning be performed? Minimum, lift off, or mid-range or is it irrelevant?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="417" LastActivityDate="2019-11-09T22:57:22.850" Title="How frequently should a PID controller update?" Tags="&lt;quadcopter&gt;&lt;pid&gt;" AnswerCount="4" CommentCount="7" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3028" PostTypeId="2" ParentId="3027" CreationDate="2014-05-30T16:23:47.053" Score="5" Body="&lt;p&gt;1) I would try find out how fast your ESCs can update and use that as the PID update rate. Your current rate is definitely too slow (need at least 50Hz for marginal performance).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) Putting a threshold on the maximum change should only be used to handle emergency/unexpected situations. You should NOT expect it to be part of the normal operation, and if you are see spikes during normal operation it means you need to fix something somewhere else or lower gains.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3) Tune the PIDs wherever you need best performance, which depends on your application. One strategy is to use different sets of gain values for different situations (e.g. separate takeoff gains) but each set of gains needs to be tuned separately so it adds more work.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2014-05-30T16:23:47.053" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3029" PostTypeId="1" CreationDate="2014-05-30T22:04:44.843" Score="3" ViewCount="2280" Body="&lt;p&gt;I've read a lot places that making a controller which cancels the unwanted pole or zero is not good designing practice for designing a controller.. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It should make the system uncontrollable which off course isn't wanted. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But what alternatives do i have.. ??&lt;/p&gt;&#xA;&#xA;&lt;p&gt;considering i have a system in which all poles and zeros lies on RHP. &lt;/p&gt;&#xA;" OwnerUserId="4495" LastActivityDate="2014-05-31T08:54:01.817" Title="Alternative way to perform Pole zero cancellation?" Tags="&lt;control&gt;&lt;design&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3030" PostTypeId="2" ParentId="3029" CreationDate="2014-05-30T23:43:31.950" Score="2" Body="&lt;p&gt;Pole/zero cancellation is discouraged primarily because in practice it is almost impossible to do perfectly. Real systems have variation and uncertainty so you can't know for sure where the poles/zeros are at. So if you try to cancel them out, but they aren't where you thought they were, you have a potentially unstable pole still active.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Feedback controllers stabilize unstable plants (such as yours) by adding and modifying system dynamics such that all poles move to the LHP. (in this case, we're talking about the &lt;strong&gt;entire&lt;/strong&gt; system instead of just the unstable plant being controlled) If you've heard of root locus plots, they show where the system poles move as a function of the controller gain.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;--- Edit ---- &#xA;(add example)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assume your plant has transfer function $P(s)$ and your controller has transfer function $G(s)$. Using this interconnection&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;r --&amp;gt;(+/-)--&amp;gt;[G(s)]--&amp;gt;[P(s)] ----&amp;gt; x&#xA;       ^                       |&#xA;       |                       |&#xA;       |&amp;lt;-----------------------&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;you have&#xA;$$&#xA;\begin{align}&#xA;X = G P (R-X)&#xA;\\&#xA;(1+G P)X = G P R&#xA;\\&#xA;\frac{X}{R} = \frac{GP}{1+GP}&#xA;\end{align}&#xA;$$&#xA;where everything is in the Laplace domain but I've dropped the $(s)$ for simplicity. For stability, we are now only concerned with the points where $1+G(s) P(s)=0$. Note that we have not made any assumptions about the specifics of $P(s)$ yet, so the results work for all plants.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now take a plant such as $P(s) = s-1$ and assume a second order controller. We have&#xA;$$&#xA;\begin{align}&#xA;1+G(s) P(s) &amp;amp;= 1+G (s-1)&#xA;\\&#xA;&amp;amp;= 1+(as^2+bs+c)(s-1)&#xA;\\&#xA;&amp;amp;= as^3 + (b-a) s^2 + (c-b) s + (1-c)&#xA;\end{align}&#xA;$$&#xA;Now you just need to choose $a, b, c$ to give negative roots. For example $a=0.1, b=0.3, c=0.8$ gives roots of $-0.467, -0.767 \pm 1.92$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As plants become more and more complex, this process gets pretty difficult and you need to either have lots of experience to understand how to shape the locus (which I don't) or use other controller design techniques. One common approach is converting to state-space models and using things like linear quadratic regulators (LQR) to design the feedback controller.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastEditorUserId="2669" LastEditDate="2014-05-31T03:19:15.563" LastActivityDate="2014-05-31T03:19:15.563" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="3032" PostTypeId="1" CreationDate="2014-05-31T14:10:20.103" Score="3" ViewCount="4147" Body="&lt;p&gt;Can someone please help me with the jacobian matrix equations for Abb irb140 robot. Or an easy way by which I can derive it given the DH parameters. I need it to implement some form of control that am working on. Thanks&lt;/p&gt;&#xA;" OwnerUserId="4497" LastEditorUserId="110" LastEditDate="2015-02-15T17:56:15.550" LastActivityDate="2015-07-28T15:42:47.393" Title="jacobian of Abb irb140 robot" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;dh-parameters&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="3034" PostTypeId="2" ParentId="2084" CreationDate="2014-05-31T20:14:58.957" Score="0" Body="&lt;p&gt;Before you run rviz, you need to set use_sim_time to true:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;rosparam set use_sim_time true&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Now start up rviz, then run rosbag using --clock:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;rosbag play bagfile_name.bag --clock&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;For setting up rviz with the navigation stack, you will want to follow &lt;a href=&quot;http://wiki.ros.org/navigation/Tutorials/Using%20rviz%20with%20the%20Navigation%20Stack&quot; rel=&quot;nofollow&quot;&gt;this tutiorial&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="4453" LastActivityDate="2014-05-31T20:14:58.957" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3035" PostTypeId="1" AcceptedAnswerId="3039" CreationDate="2014-05-31T22:09:10.213" Score="5" ViewCount="196" Body="&lt;p&gt;This is quite a basic question. I'm practising robot programming with VRep. I have 2 K3 robots in the scene. One robot follows a predefined path. I want the second robot to move &quot;in parallel&quot; with the first one so they keep same orientation and same distance at all time. When there is a turn, I want the follower to slow/accelerate a little to keep the parallel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my implementation, I use wireless communication. The first robot will periodically &quot;tell&quot; the second about its speed, orientation. The second will use these parameters to calculate two speed to its two wheel. But when I run it, it doesn't work. The orientation of the follower is wrong. The distance is not maintained. I was totally confused.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think this is quite a rudimentary task. There must be some practise to follow. Can somebody help to provide some ideas, references? That will be highly appreciated! &lt;/p&gt;&#xA;" OwnerUserId="4501" LastEditorUserId="350" LastEditDate="2014-06-02T21:37:05.477" LastActivityDate="2020-10-09T19:48:14.693" Title="How to make one robot follow the other in parallel formation" Tags="&lt;kinematics&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="3036" PostTypeId="2" ParentId="3032" CreationDate="2014-05-31T22:40:55.820" Score="1" Body="&lt;p&gt;Not exaclty sure how to easily/automatically derive it from DH parmameters. Is using DH actually necessery for your project? &lt;a href=&quot;https://robotics.stackexchange.com/questions/2758/what-are-the-advantages-of-using-the-denavit-hartenberg-representation&quot;&gt;What are the advantages of using the Denavit-Hartenberg representation?&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do you have a CAD model for the robot?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are using Solidworks, you could generate a URDF (Unified Robot Description Format) model based on the CAD model using &lt;a href=&quot;http://wiki.ros.org/sw_urdf_exporter&quot; rel=&quot;nofollow noreferrer&quot;&gt;sw_urdf_exporter&lt;/a&gt;. Then use the tool &lt;a href=&quot;http://wiki.ros.org/pykdl_utils&quot; rel=&quot;nofollow noreferrer&quot;&gt;pykdl_utils&lt;/a&gt; to automatically fill the FK and jacobian requests with the current joint angles. &lt;/p&gt;&#xA;" OwnerUserId="4453" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2014-05-31T22:40:55.820" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3037" PostTypeId="2" ParentId="3032" CreationDate="2014-06-01T01:54:08.467" Score="0" Body="&lt;p&gt;Similar to Pikey's answer, &lt;a href=&quot;http://openrave.org/&quot; rel=&quot;nofollow&quot;&gt;OpenRAVE&lt;/a&gt; lets you input the kinematics of your arm in an XML format (different than URDF), and will give you the Jacobian, FK, IK, motion planning, etc for your arm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to do it the traditional way, many standard robotics textbooks outline how to go from DH parameters to the geometrical Jacobian.  I like this book: &lt;a href=&quot;https://www.google.com/shopping/product/18328483085519729280&quot; rel=&quot;nofollow&quot;&gt;&quot;Robotics: Modelling, Planning and Control&quot; by Bruno Siciliano, Lorenzo Sciavicco, Luigi Villani, Giuseppe Oriolo&lt;/a&gt;.  For all but the simplest of arms, you will want to use a symbolic algebra package to help with this...&lt;/p&gt;&#xA;" OwnerUserId="110" LastEditorUserId="110" LastEditDate="2015-07-28T15:42:47.393" LastActivityDate="2015-07-28T15:42:47.393" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3038" PostTypeId="2" ParentId="2498" CreationDate="2014-06-01T05:24:39.243" Score="2" Body="&lt;p&gt;The linear velocity $v$ of a differential drive robot is the average of the velocities of its wheels [&lt;a href=&quot;http://omicsgroup.org/journals/dynamic-modelling-of-differentialdrive-mobile-robots-using-lagrange-and-newtoneuler-methodologies-a-unified-framework-2168-9695.1000107.pdf&quot; rel=&quot;nofollow&quot;&gt;^&lt;/a&gt;]. In mathematical terms:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;v = \frac{v_L + v_R}{2}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where $v_L$ and $v_R$ are respectively the linear velocity of the left and right wheels. These are functions of their angular velocities and radii, such that:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;v_L = r_L \omega_L&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;v_R = r_R \omega_R&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where $r_L$ and $r_R$ are respectively the radii (not the diameters!) of the left and right wheels, and $\omega_L$ and $\omega_R$ likewise the angular velocities.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The angular velocity $\omega$, on the other hand, is the average of the opposing contributions of left and right wheels: the left wheel contributes clockwise (&quot;negative&quot;) motion, whereas the right wheel contributes counter-clockwise (&quot;positive&quot;) motion. In mathematical terms:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\omega = \frac{\phi_R - \phi_L}{2}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where the wheel contributions $\phi_L$ and $\phi_R$ are given by:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\phi_L = \frac{r_L \omega_L}{l_L}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\phi_R = \frac{r_R \omega_R}{l_R}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And $l_L$ and $l_R$ are respectively the left and right shaft lengths between the center of rotation and the left and right wheels.&lt;/p&gt;&#xA;" OwnerUserId="4310" LastActivityDate="2014-06-01T05:24:39.243" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3039" PostTypeId="2" ParentId="3035" CreationDate="2014-06-01T12:39:51.827" Score="3" Body="&lt;p&gt;As is often the case in robotics, there is no universally agreed-upon approach to formation control (which is what you are trying to achieve). As explained in the introduction to &lt;a href=&quot;https://www.researchgate.net/publication/3352651_Formation_feedback_control_for_multiple_spacecraft_via_virtual_structures&quot; rel=&quot;nofollow noreferrer&quot;&gt;this article&lt;/a&gt;, there are roughly three basic approaches currently in use:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;em&gt;Behaviour-based,&lt;/em&gt; where each robot moves according to a set of local rules, and the formation dynamics results from the interactions between neighboring robots;&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Virtual structure,&lt;/em&gt; where the robots are conceived to be parts of a single body (e.g. vertices of a polygon) and trajectories are calculated to conserve the shape of that abstract body;&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Leader-following,&lt;/em&gt; where a designated &amp;quot;leader&amp;quot; robot follows a prescribed trajectory, and the &amp;quot;followers&amp;quot; track transformed versions of the leader current pose.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Given your description of the intended scenario, I'd say leader-following would be the best approach. This could be achieved fairly easily in the following manner (see &lt;a href=&quot;http://april.eecs.umich.edu/courses/eecs498_f09/wiki/images/6/6b/L02.LinAlgCoordinates.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this presentation&lt;/a&gt; for references on terminology and formulas):&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Define the intended pose &lt;span class=&quot;math-container&quot;&gt;$p_f$&lt;/span&gt; for the follower robot in the leader's reference frame – e.g. &lt;span class=&quot;math-container&quot;&gt;$p_f = [0 \quad 1 \quad 0]^T$&lt;/span&gt; for keeping to the left, or  &lt;span class=&quot;math-container&quot;&gt;$p_f = [0 \quad -1 \quad 0]^T$&lt;/span&gt; for keeping to the right;&lt;/li&gt;&#xA;&lt;li&gt;Every once in a while calculate the follower's pose in the global reference frame &lt;span class=&quot;math-container&quot;&gt;$g_f = Tp_f$&lt;/span&gt; and relay it to the follower robot;&lt;/li&gt;&#xA;&lt;li&gt;Have the follower robot adjust its position to comply with the received pose &lt;span class=&quot;math-container&quot;&gt;$g_f$&lt;/span&gt;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Just for reference, the Rigid Body Transformation matrix T is given by:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;T = &#xA;\begin{bmatrix}&#xA;cos(\theta) &amp;amp; -sin(\theta) &amp;amp; x \\&#xA;sin(\theta) &amp;amp; cos(\theta) &amp;amp; y \\&#xA;0 &amp;amp; 0 &amp;amp; 1&#xA;\end{bmatrix}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Where &lt;span class=&quot;math-container&quot;&gt;$[x \quad y \quad \theta]^T$&lt;/span&gt; is the leader robot's current pose.&lt;/p&gt;&#xA;" OwnerUserId="4310" LastEditorUserId="4310" LastEditDate="2020-10-09T19:48:14.693" LastActivityDate="2020-10-09T19:48:14.693" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="3040" PostTypeId="1" AcceptedAnswerId="3041" CreationDate="2014-06-01T23:34:43.803" Score="5" ViewCount="2982" Body="&lt;p&gt;I have been reading about kinematic models for nonholonomic mobile robots such as &lt;a href=&quot;http://en.wikipedia.org/wiki/Differential_wheeled_robot&quot; rel=&quot;noreferrer&quot;&gt;differential wheeled robots&lt;/a&gt;. The texts I've found so far all give reasonably decent solutions for the forward kinematics problem; but when it comes to inverse kinematics, they weasel out of the question by arguing that for every possible destination pose there are either infinite solutions, or in cases such as $[0 \quad 1 \quad 0]^T$ (since the robot can't move sideways) none at all. Then they advocate a method for driving the robot based on a sequence of straight forward motions alternated with in-place turns.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I find this solution hardly satisfactory. It seems inefficient and inelegant to cause the robot to do a full-stop at every turning point, when a smooth turning would be just as feasible. Also the assertion that some points are &quot;unreachable&quot; seems misleading; maybe there &lt;em&gt;are&lt;/em&gt; poses a nonholonomic mobile robot can't reach by maintaining a single set of parameters for a finite time, but clearly, if we vary the parameters over time according to some procedure, and in the absence of obstacles, it &lt;em&gt;should&lt;/em&gt; be able to reach any possible pose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my question is: what is the inverse kinematics model for a 2-wheeled differential drive robot with shaft half-length $l$, two wheels of equal radii $r$ with adjustable velocities $v_L \ge 0$ and $v_R \ge 0$ (i.e. no in-place turns), and given that we want to minimize the number of changes to the velocities?&lt;/p&gt;&#xA;" OwnerUserId="4310" LastActivityDate="2016-06-20T20:18:47.177" Title="&quot;Smooth&quot; inverse kinematics model for 2-wheeled differential drive robot" Tags="&lt;mobile-robot&gt;&lt;inverse-kinematics&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3041" PostTypeId="2" ParentId="3040" CreationDate="2014-06-02T21:36:05.917" Score="2" Body="&lt;p&gt;While there may be an inverse kinematic solution, the most likely reason that your texts are avoiding the problem is because this sort of thing falls more naturally in the domain of AI and path planning.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the simplest case, you should look at the &lt;a href=&quot;http://en.wikipedia.org/wiki/Dubins_path&quot; rel=&quot;nofollow&quot;&gt;Dubins path&lt;/a&gt;.  Balancing constraints like turning radius, maximum speed, etc, is what takes you from infinite solutions to a very reasonable set of possible movements.  Given a set of poses, you can plan Dubins paths between them for whatever cost function you prefer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's an example paper on the topic: &lt;a href=&quot;ftp://ftp.math.ucla.edu/pub/camreport/cam09-74.pdf&quot; rel=&quot;nofollow&quot;&gt;A Practical Path-planning Algorithm for a Vehicle with a Constrained&#xA;Turning Radius: a Hamilton-Jacobi Approach&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2014-06-02T22:03:29.497" LastActivityDate="2014-06-02T22:03:29.497" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3042" PostTypeId="2" ParentId="3013" CreationDate="2014-06-02T21:57:36.957" Score="0" Body="&lt;p&gt;I would guess that the real &quot;interference&quot; you'd see would be magnetic interference.  Motors draw quite a bit of current, and that will affect your compass reading.&lt;br&gt;&#xA;&lt;a href=&quot;http://onlinephys.com/magnetism.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/PgB1N.jpg&quot; alt=&quot;Compasses affected by electric current&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, the same applies to the ESCs that feed the motors -- the supply of current from the battery to the ESCs should also be kept away from the flight controller (which presumably has a compass).&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-06-02T21:57:36.957" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="3043" PostTypeId="1" CreationDate="2014-06-03T01:44:51.507" Score="6" ViewCount="108" Body="&lt;p&gt;I am working on a quadrotor and am trying to solve the problems &lt;a href=&quot;https://robotics.stackexchange.com/questions/3027/how-frequently-should-a-pid-controller-update&quot;&gt;described here&lt;/a&gt;. In attempts to bring the refresh rate to 100 Hz, I did an analysis of the functions  and most of the time 35+ ms is being taken by the RC receiver input function. To tackle this, I have decided on two solutions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Use interrupts (&lt;code&gt;PinChangeInt&lt;/code&gt; library) instead of &lt;code&gt;pulseIn&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Reduce the frequency of pilot input&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The second solution which is much simpler is to simply read the pilot input once in $(n+1)$  PID updates. So, for $n$ times, we have a update time of $8\;ms$, and for the $(n+1)^{th}$ time, we have an update time of T ms. $n$ will be around $10$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This will create a system that will run on average in $(n*8 + T)/(n+1)\; ms$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, how does a dual/variable frequency affect the PID system? Does the system behave as if working at the effective frequency? I have been searching for some time but I cannot find anything that discusses such a situation. &lt;/p&gt;&#xA;" OwnerUserId="417" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2014-06-03T14:39:07.520" Title="Are there any problems with a variable frequency PID?" Tags="&lt;pid&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3045" PostTypeId="2" ParentId="3017" CreationDate="2014-06-03T12:09:53.233" Score="0" Body="&lt;p&gt;It depends on the project. But generally you should choose the language you are most comfortable with. C/C++, Python  have the most tools and libraries available. However I'd choose Ada all the days in the week. It's an elegant and simple yet very advanced language which has a very strong typing. The latest 2014 GPL version has been release for the public recently. There are not many Ada users left but the support communities are great. To sum it up, try the popular languages first and then try Ada perhaps. Links to visit if you want more information on Ada or if you have questions:   &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.reddit.com/r/ada/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ada on Reddit&lt;/a&gt; &lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://groups.google.com/forum/m/#!forum/comp.lang.ada&quot; rel=&quot;nofollow noreferrer&quot;&gt;Comp.lang.ada&lt;/a&gt;   &lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/questions/tagged/ada&quot;&gt;Ada on StackOverflow&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.seas.gwu.edu/~mfeldman/ada-project-summary.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Who uses Ada?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.pegasoft.ca/resources/boblap/book.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Big Online Book of Linux Ada Programming&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/0521197163&quot; rel=&quot;nofollow noreferrer&quot;&gt;Building Parallel, Embedded, and Real-Time Applications with Ada&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Alse check out the &lt;a href=&quot;http://www.ros.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Robot Operating System&lt;/a&gt; which has many modules and packages ready to use.&lt;/p&gt;&#xA;" OwnerUserId="745" LastEditorUserId="-1" LastEditDate="2017-05-23T12:37:11.430" LastActivityDate="2014-06-03T12:09:53.233" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3046" PostTypeId="2" ParentId="3043" CreationDate="2014-06-03T12:30:48.310" Score="0" Body="&lt;p&gt;Ideally, you would adjust PID gains based on sample time. The &quot;correct&quot; adjustment is hard to say since you would need to discretize the nonlinear quadrotor dynamics for each timestep and find gains that make them two closed loop systems equivalent; not a trivial task.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have access to Matlab (or maybe Octave, which is free) you could test in simulation with different ratios. If not, I would just play around experimentally. Maybe try setting the long update period gains to 2/3, 1/2, 1/4, 1/8, etc of the fast gains and see at what point, if any, you notice a difference.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that as the maximum sampling time decreases you need to worry about this less and less. In your case, though, the maximum time is kind of large so I would at least experiment with different adjustments.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2014-06-03T12:30:48.310" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3047" PostTypeId="2" ParentId="3043" CreationDate="2014-06-03T13:15:19.697" Score="3" Body="&lt;p&gt;You should be fine as long as your PID algorithm understands that it's not being called at a constant rate. Currently your function doesn't take a delta time parameter. Let's add one:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;int16_t pid_roll(int16_t roll, int16_t dT_ms)&#xA;{&#xA;    static int16_t roll_old = 0;&#xA;    int16_t result = &#xA;    (KP_ROLL * roll) + &#xA;    (KI_ROLL * (roll_old + roll)*dT_ms) +&#xA;    (KD_ROLL * (roll - roll_old)/dT_ms);&#xA;    roll_old += roll;&#xA;&#xA;    return -result;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;However, I would say that ideally you would be using a microcontroller or Arduino which had enough processing power to reliably execute the PID controller at a decent rate.&lt;/p&gt;&#xA;" OwnerUserId="40" LastEditorUserId="40" LastEditDate="2014-06-03T13:57:16.220" LastActivityDate="2014-06-03T13:57:16.220" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3048" PostTypeId="2" ParentId="3043" CreationDate="2014-06-03T13:53:49.910" Score="3" Body="&lt;p&gt;I think you're solving the wrong problem.  Variable-frequency PIDs are a really bad idea because you lose control of the proportional component of force.  In other words, your force toward the setpoint stays constant even though you may have moved much closer to it in the time between updates, and the PID will need to make larger adjustments &amp;mdash; possibly oscillating wildly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The constraint of only being able to update your inputs once every ~35ms means that your desired setpoint will only change every ~35ms, but the PID should only care about getting to that setpoint smoothly.  To accomplish that, the PID should ideally be running at the frequency of the measurement sensor and/or motor controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For an extreme example, consider a PID controller for a cart on a track whose desired setpoint is constant at zero.  It would be silly to run the PID at 0Hz just because the setpoint never changes.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;TL;DR, don't wait for pilot input inside your PID loop.  Let the PID loop run at constant frequency and feed it new setpoints whenever they become available. &lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-06-03T13:53:49.910" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3049" PostTypeId="1" AcceptedAnswerId="3054" CreationDate="2014-06-03T14:20:42.650" Score="2" ViewCount="69" Body="&lt;p&gt;I am searching for a way that allows me to wait for some conditions on ports before applying a new state.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My concrete Problem:&#xA;I want to make sure that my AUV aligns to the right pipeline. Therefore before starting the pipeline-tracking, I want to check for the current system heading.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My current state-machine looks like this:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;find_pipe_back = state target_move_def(:finish_when_reached =&gt; false ,&#xA;  :heading =&gt; 1 ...)&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;pipe_detector = state pipeline_detector_def&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;pipe_detector.depends_on find_pipe_back, :role =&gt; &quot;detector&quot;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;start(pipe_detector)&#xA;  forward pipe_detector.align_auv_event, success_event&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;roughly I am looking for a way to condition the last-forward.&lt;/p&gt;&#xA;" OwnerUserId="4508" LastEditorUserId="350" LastEditDate="2014-06-11T13:50:41.600" LastActivityDate="2014-06-11T13:50:41.600" Title="How to define conditions for state-machines in roby?" Tags="&lt;rock&gt;&lt;syskit&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3050" PostTypeId="2" ParentId="3049" CreationDate="2014-06-03T15:17:50.633" Score="0" Body="&lt;p&gt;I don't know if i understand right, but couldn't you make another condition in your state machine for a transition? So for example if you find a pipe or whatever and afterwards you get the permission from the user to follow this pipe ... these two conditions could form the transition to switch to the next state.&lt;/p&gt;&#xA;" OwnerUserId="4483" LastEditorUserId="127" LastEditDate="2014-06-04T06:37:03.877" LastActivityDate="2014-06-04T06:37:03.877" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3052" PostTypeId="1" CreationDate="2014-06-04T01:29:45.850" Score="2" ViewCount="221" Body="&lt;p&gt;I use Autodesk inventor professional 2014. I design my gears using the design accelerator. However, whenever I create gear trains, parts of certain gears become transparent. This seems completely random because sometimes if I zoom in or out or when I pan or orbit, the gears look normal again.&#xA;I have experienced this problem using both the default and other material types.&#xA;I also have ensured that each of these gears are enabled.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are some example pictures&#xA;&lt;img src=&quot;https://i.stack.imgur.com/T0PRQ.png&quot; alt=&quot;This is a picture of my problem&quot;&gt;&#xA;&lt;img src=&quot;https://i.stack.imgur.com/GaIvo.png&quot; alt=&quot;This is another picture&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/e9zWS.png&quot; alt=&quot;A third picture&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/nrGWd.jpg&quot; alt=&quot;enter image description here&quot;&gt;&#xA;Any help or suggestions will be greatly appreciated.&lt;/p&gt;&#xA;" OwnerUserId="4516" LastActivityDate="2014-06-09T22:17:37.577" Title="Gears in Autodesk Inventor are looking weird" Tags="&lt;design&gt;&lt;errors&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3053" PostTypeId="2" ParentId="2748" CreationDate="2014-06-04T03:05:35.113" Score="0" Body="&lt;p&gt;There is a &lt;a href=&quot;http://hackaday.com/2014/01/23/lidar-with-leds-for-under-100/&quot; rel=&quot;nofollow&quot;&gt;cheap LIDAR&lt;/a&gt; I saw on hackaday earlier this year that can connect to an Arduino over I2C (or any other micro). The sensor can detect up to 40m, and it's called &lt;a href=&quot;http://www.dragoninnovation.com/projects/32-pulsedlight-single-board-range-finder-minimodule&quot; rel=&quot;nofollow&quot;&gt;LIDAR-LITE&lt;/a&gt;. They start shipping next month and can be ordered from &lt;a href=&quot;https://store.3drobotics.com/products/lidar-lite/&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt; for $72 US.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As the previous comments/answers have indicated, you will get nowhere near 50m with any ultrasonic sensor, most hobbyist ones are only a meter or 2.&lt;/p&gt;&#xA;" OwnerUserId="4453" LastActivityDate="2014-06-04T03:05:35.113" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3054" PostTypeId="2" ParentId="3049" CreationDate="2014-06-04T07:44:51.027" Score="1" Body="&lt;p&gt;Such &quot;conditioning&quot; was existing in the pre-syskit days, and it got removed as it made the state machines considerably more complex. Usually, what starts as a simple condition becomes quickly something a lot more involved.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The best way is therefore to create a dedicated composition that would do the monitoring:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;class PipelineFinder &amp;lt; Syskit::Composition&#xA;  argument :expected_heading&#xA;  add PipelineDetector::Task, :as =&amp;gt; 'detector'&#xA;  def heading_within_tolerance?(current, tolerance)&#xA;    # Test for tolerance&#xA;  end&#xA;  task_script do&#xA;    # Don't know the name of the relevant port, so I am making it up&#xA;    reader = detector.pipeline_state_port.reader&#xA;    wait detector.align_auv_event&#xA;    if (data = reader.read_new) &amp;amp;&amp;amp; heading_within_tolerance?(data.yaw, tolerance)&#xA;      emit :success&#xA;    else&#xA;      emit :false_positive&#xA;    end&#xA;  end&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Note that you could also attach the task script on the detector task in a separate action:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;describe('runs the pipeline detector but filters against an expected direction').&#xA;   required_arg('expected_heading')&#xA;def detect_pipeline_with_validation(arguments = Hash.new)&#xA;   detector = pipeline_detector_def&#xA;   expected_heading = arguments[:expected_heading]&#xA;   detector.task_script do&#xA;     # same script than up there, except that expected_heading&#xA;     # is in this case a local variable&#xA;   end&#xA;   detector&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="56" LastEditorUserId="56" LastEditDate="2014-06-11T13:28:46.170" LastActivityDate="2014-06-11T13:28:46.170" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="3055" PostTypeId="2" ParentId="2124" CreationDate="2014-06-04T08:46:23.873" Score="1" Body="&lt;p&gt;We are using the P900 multibeam sonar.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So far our interface hasn't any problem. But we requested a new version of the library from teledyne which works now in our case.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sonar = new BVTSDK::Sonar();&#xA;head = new BVTSDK::Head();&#xA;int ret = sonar-&amp;gt;Open(&quot;NET&quot;, hostAddress);&#xA; //error handling&#xA;ret = sonar-&amp;gt;GetHead(1, head);&#xA;//again error handling&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I will ask wether we can publish our interface within the next weeks.&lt;/p&gt;&#xA;" OwnerUserId="4508" LastEditorUserId="350" LastEditDate="2014-06-04T15:23:03.267" LastActivityDate="2014-06-04T15:23:03.267" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3057" PostTypeId="2" ParentId="3052" CreationDate="2014-06-04T13:05:31.300" Score="0" Body="&lt;p&gt;Might be an issue with your graphics card. Try to update to the newest drivers and check again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also you can try to change the Hardware settings in the Inventor options.&lt;/p&gt;&#xA;" OwnerUserId="4483" LastActivityDate="2014-06-04T13:05:31.300" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3058" PostTypeId="1" AcceptedAnswerId="3059" CreationDate="2014-06-05T09:11:56.587" Score="1" ViewCount="2531" Body="&lt;p&gt;I have a riddle about EtherCAT in mind and I'd like to have your point of view about it...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the rise of open platforms and hardware, and easily accessible embedded machines, it is now rather straightforward to install a RT system such as Xenomai on a raspberry PI, or a beagleboard black, or whatever cheap platform you prefer...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now to connect these a RT bus would be really cool (e.g. EtherCAT...).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hence my question: every hobbyist face the same problems with RT communication, so is there any good reason why there does not exist any open EtherCAT shield for raspberry PI or beagleboards? It would solve so many problems...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any thoughts on why? Any idea?&lt;/p&gt;&#xA;" OwnerUserId="763" LastEditorUserId="37" LastEditDate="2016-02-29T16:17:15.507" LastActivityDate="2016-03-01T10:14:57.243" Title="Why cannot we find EtherCAT shields?" Tags="&lt;communication&gt;" AnswerCount="3" CommentCount="3" ClosedDate="2016-02-29T16:16:22.487" ContentLicense="CC BY-SA 3.0" />
  <row Id="3059" PostTypeId="2" ParentId="3058" CreationDate="2014-06-05T10:44:44.570" Score="1" Body="&lt;p&gt;There are some small EtherCAT peripherals, like Shadow's &lt;a href=&quot;http://www.shadowrobot.com/products/ronex/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ronex&lt;/a&gt; system, which gives you a great deal of I/O, although it's not in the 'shield' form factor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/TSzpb.jpg&quot; alt=&quot;Shadow Robot Ronex&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2014-06-05T10:44:44.570" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="3060" PostTypeId="2" ParentId="2876" CreationDate="2014-06-05T13:01:32.107" Score="3" Body="&lt;p&gt;I think there might be different reasons for this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;First, historical reasons&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first systems with haptic feedback were mechanical systems to which vibration / force feedback functions were added (vibrations in a pilot's handle, for instance). In the early stages robotic systems were used as haptic displays for different uses (quite early, force feedback was used in telemanipulation devices for operating in nuclear power plants for instance). Naturally, the linkage-based systems became the norm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Second, technical reasons&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I see two reasons here. The first is the fact that cables can only pull and not push. Therefore, you need redundancy to generate forces and wrenches in all directions. It can become quite cumbersome and difficult to control. Also, doubling the number of motors has a direct impact on price. The second reason is related to the workspace : the larger your workspace, the longer your cables. The longer the cables, the more flexible they get. In order to be accurate, the flexibility of those cables must be compensated for, which is not necessarily a trivial problem. This links to historical reasons, as cables that could be made in the 50's were likely less good in terms of stiffness and elasticity than the ones we can make now.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;All in all&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think that linkage-based systems are easier to use and to place in an experimental setup (you don't need a box the size of your workspace to use them). This being reinforced by historical reasons that made the use of linkage-based systems more or less the norm. On the other hand, cable-based mechanisms have a nice future for many applications. Also, don't forget that there are alternatives to cable and linkage-based haptic devices, with magnetic-based devices for instance. &lt;/p&gt;&#xA;" OwnerUserId="1010" LastActivityDate="2014-06-05T13:01:32.107" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3061" PostTypeId="2" ParentId="2876" CreationDate="2014-06-05T13:29:09.467" Score="0" Body="&lt;p&gt;There are primary a Technical reason for this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you use tension based, the actual joint-angle has to be computed from all tension lengths, the inverse kinematic is as you mentioned known in general but not in detail for each user, this normally lead into a more non-precise measurements. Additionally these devices needs to be calibrated for each person by doing some gestures.&lt;/p&gt;&#xA;" OwnerUserId="4508" LastActivityDate="2014-06-05T13:29:09.467" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3062" PostTypeId="1" CreationDate="2014-06-05T14:13:12.383" Score="2" ViewCount="1119" Body="&lt;p&gt;I have a standard 5v &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/6Iv4e.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6Iv4em.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am using the horn it came with it, I mean this piece: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/aQJxo.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Like the long arm in the middle. Each of its holes are 1mm diameter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then I have a 3d printed crankshaft I did:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/i5JGD.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Its holes are also 1 mm. So while the servo horn is attached to the servo, I attach this crank to the horn in order to lift or lower a small scructure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I am not sure is hot to connect these 2 pieces (horn and 3d printed crankshaft). So far I have been using a paper clip, and at both end of it I placed 2 blobs of tin using a soldering iron. This has worked for nearly a year, but today I failed, and I was wondering if there's something more specific for my problem, which seems something common.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have seen some people use something called Dubro EZ connector, but it seems an overkill, plus it won't have space for my 3D printed piece. Some people seems to use a clevis pin, but I cannot find any with a diameter of less than 1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my question is, how can I fix it? What can I put at both ends to stop if from slipping away? I have already tried simple things like simply bending it.&lt;/p&gt;&#xA;" OwnerUserId="4525" LastEditorUserId="350" LastEditDate="2014-06-05T20:39:39.243" LastActivityDate="2014-06-05T20:39:39.243" Title="How to connect a servo motor and a crank shaft" Tags="&lt;arduino&gt;&lt;mechanism&gt;&lt;rcservo&gt;" AnswerCount="0" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="3063" PostTypeId="1" AcceptedAnswerId="3064" CreationDate="2014-06-06T08:12:25.613" Score="10" ViewCount="2248" Body="&lt;p&gt;The Unscented Kalman Filter is a variant of the Extended Kalman Filter which uses a different linearization relying on transforming a set of &quot;Sigma Points&quot; instead of first-order Taylor series expansion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The UKF does not require computing Jacobians, can be used with discontinuous transformation, and is, most importantly, more accurate than EKF for highly nonlinear transformations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only disadvantage I found is that &quot;the EKF is often slightly faster than the UKF&quot; (Probablistic Robotics). This seems negligible to me and their asymptotic complexity seems to be the same.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So why does everybody still seem to prefer EKF over UKF? Did I miss a big disadvantage of UKF? &lt;/p&gt;&#xA;" OwnerUserId="4531" LastActivityDate="2014-06-06T12:14:03.377" Title="Why should I still use EKF instead of UKF?" Tags="&lt;mobile-robot&gt;&lt;localization&gt;&lt;kalman-filter&gt;&lt;ekf&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="3064" PostTypeId="2" ParentId="3063" CreationDate="2014-06-06T12:14:03.377" Score="6" Body="&lt;p&gt;Here are a few possible points of consideration. Certainly the UKF has many counterpoints where it has an advantage too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The most obvious advantage is computation power. Don't forget that traditionally, these filters are implemented on embedded systems with very limited computational resources. Also, while I don't have much experience with UKFs myself, one significant advantage of EKFs is their relative ease of implementation. For many systems, the Jacobian is very easily derived analytically which makes the EKF implementation mostly straightforward.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another area of potential advantage is ease of tuning. I don't remember how many parameters are tunable in a UKF, but the EKF tuning parameters are already well understood because the basic Kalman Filter is ubiquitous so anybody thinking about using a UKF already knows how to tune an EKF.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, don't ignore momentum. If an existing system already has a working EKF, why go through all the work of implementing and testing a UKF?&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2014-06-06T12:14:03.377" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3066" PostTypeId="1" CreationDate="2014-06-06T17:25:34.363" Score="1" ViewCount="50" Body="&lt;p&gt;e.g. what general multicopter configurations would be generally accepted as recommendations to lift 0.5kg, 1kg, 2kg, 4kg, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any general correlation between number of motors on a similar sized frame and lift capacity?&lt;/p&gt;&#xA;" OwnerUserId="554" LastEditorUserId="40" LastEditDate="2014-06-06T19:09:50.510" LastActivityDate="2014-06-06T19:09:50.510" Title="What are some generally accepted lift capacity guidelines for multirotors?" Tags="&lt;quadcopter&gt;&lt;power&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3068" PostTypeId="2" ParentId="3032" CreationDate="2014-06-06T19:09:28.337" Score="5" Body="&lt;p&gt;Here is the traditional way.  I think this is the kinematics of your arm, but am not 100% sure.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are the DH parameters and transformation matrix:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/AgW0M.png&quot; alt=&quot;Anthropomorphic arm with spherical wrist&quot;&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;DH Parameters for the anthropomorphic arm with spherical wrist&#xA;  $$&#xA;\begin{array}{c c c c c}&#xA;\\\hline&#xA;\text{Link} &amp;amp; a_i &amp;amp; \alpha_i &amp;amp; d_i &amp;amp; \vartheta_i&#xA;\\\hline&#xA;\\1 &amp;amp; 0   &amp;amp; \pi/2  &amp;amp; 0   &amp;amp; \vartheta_1&#xA;\\2 &amp;amp; a_2 &amp;amp; 0      &amp;amp; 0   &amp;amp; \vartheta_2&#xA;\\3 &amp;amp; 0   &amp;amp; \pi/2  &amp;amp; 0   &amp;amp; \vartheta_3&#xA;\\4 &amp;amp; 0   &amp;amp; -\pi/2 &amp;amp; d_4 &amp;amp; \vartheta_4&#xA;\\5 &amp;amp; 0   &amp;amp; \pi/2  &amp;amp; 0   &amp;amp; \vartheta_5&#xA;\\6 &amp;amp; 0   &amp;amp; 0      &amp;amp; d_6 &amp;amp; \vartheta_6&#xA;\\\hline&#xA;\end{array}&#xA;$$&#xA;  $$&#xA;{\Large A}_i^{i-1}(q_i) = {\Large A}_{i^\prime}^{i-1}{\Large A}_i^{i^\prime} = \begin{bmatrix}&#xA;\\c_{\vartheta_i} &amp;amp; -s_{\vartheta_i} c_{\alpha_i} &amp;amp; s_{\vartheta_i} s_{\alpha_i} &amp;amp; a_i c_{\vartheta_i}&#xA;\\s_{\vartheta_i} &amp;amp; c_{\vartheta_i} c_{\alpha_i} &amp;amp; -c_{\vartheta_i} s_{\alpha_i} &amp;amp; a_i s_{\vartheta_i}&#xA;\\0 &amp;amp; s_{\alpha_i} &amp;amp; c_{\alpha_i} &amp;amp; d_i&#xA;\\0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1&#xA;\end{bmatrix}&#xA;$$&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Here are general instructions how to compute Jacobian:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/oJLiX.png&quot; alt=&quot;vectors needed to compute geometric Jacobian&quot;&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;It is easiest to compute the Jacobian for linear velocity and angular velocity separately.  &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;For linear velocity:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The time derivative of $\boldsymbol{p}_e(\boldsymbol{q})$ is:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;$$&#xA;\dot{\boldsymbol{p}}_e = \sum\limits_{i=1}^n \frac{\partial \boldsymbol{p}_e}{\partial q_i} \dot{q}_i = \sum\limits_{i=1}^n \boldsymbol{\jmath}_{P_i} \dot{q}_i&#xA;$$&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;This shows how $\dot{\boldsymbol{p}}_e$ can be obtained by summing the contributions from each joint.  Note for revolute joints, $q_i = \vartheta_i$.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;$$&#xA;\dot{q}_i \boldsymbol{\jmath}_{P_i} = \boldsymbol{\omega}_{i-1,i} \times r_{i-1,e} = \dot{\vartheta}_i \boldsymbol{z}_{i-1} \times ( \boldsymbol{p}_e - \boldsymbol{p}_{i-1} )&#xA;$$&#xA;  Simplifying:&#xA;  $$&#xA;\boldsymbol{\jmath}_{P_i} = \boldsymbol{z}_{i-1} \times ( \boldsymbol{p}_e - \boldsymbol{p}_{i-1} )&#xA;$$&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Now for angular velocity:&#xA;  $$&#xA;\omega_e = \omega_n = \sum\limits_{i=1}^n \omega_{i-1,i} = \sum\limits_{i=1}^n \boldsymbol{\jmath}_{O_i} \dot{q}_i&#xA;$$&#xA;  in detail:&#xA;  $$&#xA;\dot{q}_i \boldsymbol{\jmath}_{O_i} = \vartheta_i \boldsymbol{z}_{i-1}&#xA;$$&#xA;  and then:&#xA;  $$&#xA;\boldsymbol{\jmath}_{O_i} = \boldsymbol{z}_{i-1}&#xA;$$&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;So now the Jacobian can be partitioned into (3x1) column vectors $\boldsymbol{\jmath}_{P_i}$ and $\boldsymbol{\jmath}_{O_i}$ as such:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;$$&#xA;\boldsymbol{J} = &#xA;\begin{bmatrix}&#xA;\boldsymbol{\jmath}_{P_1} &amp;amp; &amp;amp; \boldsymbol{\jmath}_{P_n}\\&#xA; &amp;amp; \ldots &amp;amp; \\&#xA;\boldsymbol{\jmath}_{O_1} &amp;amp; &amp;amp; \boldsymbol{\jmath}_{O_n}&#xA;\end{bmatrix}&#xA;$$&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Courtsey of Siciliano, Sciavicco, Villani, and Oriolo.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope that helps.&lt;/p&gt;&#xA;" OwnerUserId="110" LastEditorUserId="350" LastEditDate="2014-06-17T17:15:44.360" LastActivityDate="2014-06-17T17:15:44.360" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="3069" PostTypeId="1" AcceptedAnswerId="3070" CreationDate="2014-06-06T21:49:37.827" Score="7" ViewCount="7067" Body="&lt;p&gt;It might be kind of a stupid question but how many degrees of freedom are there in a typical quadcopter? I say some saying 4 and some saying 6. The difference stands in translation throughout the other 2 axis (horizontal ones). Being strict to what you can directly tell the quadcopter to do, only 4 movements are possible since you cannot apply a pure lateral force. But you can tilt to start a lateral movement and align the body right after and let it hover in a horizontal axis, theoretically. So, formally, how many degrees of freedom should I consider to exist?&lt;/p&gt;&#xA;" OwnerUserId="4437" LastActivityDate="2015-03-06T00:14:16.733" Title="Quadcopter degrees of freedom" Tags="&lt;quadcopter&gt;" AnswerCount="5" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3070" PostTypeId="2" ParentId="3069" CreationDate="2014-06-07T01:50:29.073" Score="2" Body="&lt;p&gt;Formally, a quadcopter has &lt;strong&gt;four&lt;/strong&gt; degrees of freedom. As you noted, at any given instant in time you can only apply force/moment in only four directions.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2014-06-07T01:50:29.073" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3071" PostTypeId="1" CreationDate="2014-06-07T09:32:15.400" Score="5" ViewCount="508" Body="&lt;p&gt;I am implementing the &lt;strong&gt;ATLAS SLAM&lt;/strong&gt; framework for a ground robot, using EKF Slam for local maps and using line segment features. The line segment features can be abstracted to their respective lines &lt;code&gt;[d,α]&lt;/code&gt; where &lt;code&gt;d&lt;/code&gt; and &lt;code&gt;α&lt;/code&gt; represent the distance and angle in the distance-angle representation of lines. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the given framework, there is a local map matching step where lines of the local maps will be matched, and there is a need for a distance metric between 2 lines. The mahalanobis distance is suggested in the literature, however strictly a mahalanobis distance is between a single measurement and a distribution and not between 2 distributions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How do I find the mahalanobis distance between line 1 &lt;code&gt;[d1,α1]&lt;/code&gt; with covariance matrix &lt;code&gt;S1&lt;/code&gt; and line 2 &lt;code&gt;[d2,α2]&lt;/code&gt; with covariance matrix &lt;code&gt;S2&lt;/code&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the &lt;strong&gt;EKF Algorithm&lt;/strong&gt; from the book Probabilistic Robotics by Sebastian Thrun, there is a computation during the feature update step, where it looks like the covariances (of a new measurement and an existing measurement) are multiplied to give a resultant covariance matrix, and then the inverse is used in the Mahalanobis distance computation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That would be similar to &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Mahalanobis_Distance = [d2-d1,α2-α1] * Inverse(S1*S2) * [d2-d1,α2-α1]'&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Is that correct?&lt;/p&gt;&#xA;" OwnerUserId="4540" LastEditorUserId="4540" LastEditDate="2014-06-08T13:29:21.640" LastActivityDate="2014-10-21T12:42:59.567" Title="Mahalanobis distance between 2 line features" Tags="&lt;ekf&gt;&lt;mapping&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3072" PostTypeId="2" ParentId="2056" CreationDate="2014-06-07T16:24:45.017" Score="2" Body="&lt;p&gt;I was having the same problem. I finally solved the problem. This &lt;a href=&quot;http://www.instructables.com/files/orig/FOR/4FP2/HKZAVRT6/FOR4FP2HKZAVRT6.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;document&lt;/a&gt; says that you have to put CR LF (\r\n) characters after you send something in AT mode. But in the arduino code that you use, uses the &lt;code&gt;Serial.write&lt;/code&gt; command to send command. But  &lt;code&gt;Serial.write&lt;/code&gt; command doesn't put CR LF characters. So I used Tera Term to send command. First connect PIN34 to 3.3V. Power the arduino and upload the code below. Open Tera Term. Start a new serial connection. Choose your arduino's serial port. And then click Setup&gt;Terminal. Change Transmit to CR+LF and check Local Echo checkbox. Now you can send the AT commands.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/7qhMG.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/wOl80.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;SoftwareSerial.h&amp;gt;&#xA;&#xA;SoftwareSerial BTSerial(2, 3); // RX | TX&#xA;&#xA;void setup()&#xA;{&#xA;  pinMode(9, OUTPUT);  // this pin will pull the HC-05 pin 34 (key pin) HIGH to switch module to AT mode&#xA;  digitalWrite(9, HIGH);&#xA;  Serial.begin(9600);&#xA;  Serial.println(&quot;Enter AT commands:&quot;);&#xA;  BTSerial.begin(38400);  // HC-05 default speed in AT command more&#xA;}&#xA;&#xA;void loop()&#xA;{&#xA;&#xA;  // Keep reading from HC-05 and send to Arduino Serial Monitor&#xA;  if (BTSerial.available())&#xA;    Serial.write(BTSerial.read());&#xA;&#xA;  // Keep reading from Arduino Serial Monitor and send to HC-05&#xA;  if (Serial.available())&#xA;    BTSerial.write(Serial.read());&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="4541" LastActivityDate="2014-06-07T16:24:45.017" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3073" PostTypeId="1" AcceptedAnswerId="3075" CreationDate="2014-06-09T02:32:37.780" Score="2" ViewCount="393" Body="&lt;p&gt;Given part of the following algorithm in page 217 &lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/0262201623&quot; rel=&quot;nofollow&quot;&gt;probabilistic robotics&lt;/a&gt;, this algorithm for EKF localization with unknown correspondences &lt;/p&gt;&#xA;&#xA;&lt;p&gt;9. for all observed features $z^{i}  = [r^{i} \ \phi^{2} \ s^{i}]^{T} $&lt;/p&gt;&#xA;&#xA;&lt;p&gt;10. &amp;nbsp; &amp;nbsp; for all landmarks $k$ in the map $m$ do&lt;/p&gt;&#xA;&#xA;&lt;p&gt;11. &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $q = (m_{x} - \bar{\mu}_{x})^{2} + (m_{y} - \bar{\mu}_{y})^{2}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;12. &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $\hat{z}^{k} = \begin{bmatrix}&#xA;\sqrt{q} \\ &#xA;atan2(m_{y} - \bar{\mu}_{y}, m_{x} - \bar{\mu}_{x} ) - \bar{\mu}_{\theta} \\ &#xA;m_{s} \\ \end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;13. &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $ \hat{H}^{k} = \begin{bmatrix} &#xA;h_{11} &amp;amp; h_{12} &amp;amp; h_{13} \\&#xA;h_{21} &amp;amp; h_{22} &amp;amp; h_{23} \\&#xA;h_{31} &amp;amp; h_{32} &amp;amp; h_{33} \\ \end{bmatrix}  $&lt;/p&gt;&#xA;&#xA;&lt;p&gt;14. &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $\hat{S}^{k} = H^{k} \bar{\Sigma} [H^{k}]^{T} + Q $&lt;/p&gt;&#xA;&#xA;&lt;p&gt;15. &amp;nbsp; &amp;nbsp; endfor &lt;/p&gt;&#xA;&#xA;&lt;p&gt;16. &amp;nbsp; &amp;nbsp; $ j(i) = \underset{k}{\operatorname{arg\,max}} \ \ det(2 \pi S^{k})^{-\frac{1}{2}} \exp\{-\frac{1}{2} (z^{i}-\hat{z}^{k})^{T}[S^{k}]^{-1} (z^{i}-\hat{z}^{k})\} $&lt;/p&gt;&#xA;&#xA;&lt;p&gt;17. &amp;nbsp; &amp;nbsp; $K^{i} = \bar{\Sigma} [H^{j(i)}]^{T} [S^{j(i)}]^{-1}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;18. &amp;nbsp; &amp;nbsp; $\bar{\mu} = \bar{\mu} + K^{i}(z^{i}-\hat{z}^{j(i)}) $&lt;/p&gt;&#xA;&#xA;&lt;p&gt;19. &amp;nbsp; &amp;nbsp; $\bar{\Sigma} = (I - K^{i} H^{j(i)}) \bar{\Sigma} $&lt;/p&gt;&#xA;&#xA;&lt;p&gt;20. endfor&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is why the second loop ends in the line 15. Shouldn't it end after the line 19. I've checked the &lt;a href=&quot;http://robots.stanford.edu/probabilistic-robotics/errata.html&quot; rel=&quot;nofollow&quot;&gt;errata&lt;/a&gt; of this book but nothing about this issue. &lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="37" LastEditDate="2014-10-27T16:35:52.070" LastActivityDate="2014-10-27T16:35:52.070" Title="Data association with ekf?" Tags="&lt;localization&gt;&lt;ekf&gt;&lt;data-association&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3074" PostTypeId="2" ParentId="3052" CreationDate="2014-06-09T17:20:45.900" Score="1" Body="&lt;p&gt;Have you tried turning on either the &quot;Backface Culling&quot; or the &quot;Polygon Transparency Sorting&quot; settings under Shading?  Those settings affect the rendering of polygons based on view distance and can potentially speed up the rendering process as well as hide incorrectly drawn surfaces. &lt;/p&gt;&#xA;" OwnerUserId="5550" LastActivityDate="2014-06-09T17:20:45.900" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3075" PostTypeId="2" ParentId="3073" CreationDate="2014-06-09T19:10:57.330" Score="1" Body="&lt;p&gt;The value $S^k$ (innovation variance) needs to be calculated for all landmarks, but the subsequent update steps (post line 16 --- after argmax), need be applied to all of the map, given the landmark update that was selected on line 16 --- the argmax.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;FYI, argmax searches over the list of landmarks for the landmark maximizing the equation given. It selects the index of the landmark which is &lt;em&gt;most likely&lt;/em&gt; to be the landmark given the measurement value. Notice that the equation in line 16 is the gaussian multivariate pdf with the measurement and mean measurement for landmark k, normalized by the measurement variance, S.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's a notation problem here, $\argmax$ should have a subscript denoting what the search is &lt;em&gt;over&lt;/em&gt;. In this case, $\argmax$ is searching over $k$, since $i$ is the current measurement we're trying to associate with each of the $k=1...$ possible landmarks.&lt;/p&gt;&#xA;" OwnerUserId="163" LastEditorUserId="163" LastEditDate="2014-06-10T15:29:40.873" LastActivityDate="2014-06-10T15:29:40.873" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="3076" PostTypeId="2" ParentId="3052" CreationDate="2014-06-09T22:17:37.577" Score="0" Body="&lt;p&gt;Looks like a problem with normals. I've seen this in 3d studio max. I don't know autodesk inventor, but maybe there is something similar to 'invert normals' or 'flip normals'? You ought to be able to select a single object that's adversely affected and do this to it.&lt;/p&gt;&#xA;" OwnerUserId="1075" LastActivityDate="2014-06-09T22:17:37.577" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3077" PostTypeId="2" ParentId="2876" CreationDate="2014-06-10T04:19:01.050" Score="1" Body="&lt;p&gt;linkage based systems can be engineered to be very stiff mechanisms, however cable based systems cannot be due to the inherent elasticity of the cable used. Also cable based systems are higher maintenance, as you have to account for cable tension changes over time as the cable stretches/creeps (ie by periodic adjustment of tension).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The real world implication is that you cannot reproduce very hard wall contacts with cable based interfaces, and the effect feels more springy then with a rigid link device.&lt;/p&gt;&#xA;" OwnerUserId="5554" LastActivityDate="2014-06-10T04:19:01.050" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3079" PostTypeId="1" AcceptedAnswerId="7053" CreationDate="2014-06-10T09:44:06.053" Score="3" ViewCount="173" Body="&lt;p&gt;How would one typically integrate a neural network into an online automation system?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As an example, we have developed a neural network that predicts a difficult to measure variable within a reactor using multiple sensors. We then use this predicted variable to tell the automation system to, for example, increase/decrease the stirrer speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How would someone implement this idea into a commercial system. Would they develop a function block that can simulate the neural network? Would they run a software on the server that reads and writes to the PLC control tags?&lt;/p&gt;&#xA;" OwnerUserId="5557" LastActivityDate="2015-04-19T15:08:17.647" Title="Typical method for integrating a neural net into a PLC" Tags="&lt;sensors&gt;&lt;control&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3080" PostTypeId="1" AcceptedAnswerId="3082" CreationDate="2014-06-10T14:50:59.700" Score="0" ViewCount="2279" Body="&lt;p&gt;I need help on how to go about building a quadcopter software from scratch with the available tools I have with me. I don't have a transmitter radio therefore the only way I can do remote control is using an android phone with the itead studio bluetooth shield that I was recently given.&#xA;How can I use the existing open source software, i.e aeroquad or arducopter. The following are parts that I have:-&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Arduino Uno &lt;/li&gt;&#xA;&lt;li&gt;Bluetooth shield &lt;/li&gt;&#xA;&lt;li&gt;Four brushless motors &lt;/li&gt;&#xA;&lt;li&gt;Q450 frame Four&lt;/li&gt;&#xA;&lt;li&gt;ESC Turnigy &lt;/li&gt;&#xA;&lt;li&gt;MPU6050&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="5559" LastActivityDate="2014-06-11T18:41:11.577" Title="Arduino Quadcopter using bluetooth shield and android phone" Tags="&lt;arduino&gt;&lt;quadcopter&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ClosedDate="2014-07-03T13:29:57.443" ContentLicense="CC BY-SA 3.0" />
  <row Id="3082" PostTypeId="2" ParentId="3080" CreationDate="2014-06-10T17:34:09.743" Score="0" Body="&lt;p&gt;First, you will need to test the communication range. Make a test app to talk between the phone and arduino/bluetooth shield and then walk around to see how far away they can still communicate. If it's not far enough you can't do much else and need to find a different communication solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After that, you will need to modify the source code from the open source projects you referenced as I don't believe they use the same setup as you. First, you will need to modify/replace the communication logic to use your bluetooth. Second, you won't be able to do autonomous flight with those sensors so you will need to strip out anything related to that from the code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, you just need to define your own protocol for sending movement commands from the phone to the bluetooth shield.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2014-06-10T17:34:09.743" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3083" PostTypeId="2" ParentId="3071" CreationDate="2014-06-10T18:53:53.447" Score="0" Body="&lt;p&gt;The Mahalanobis distance is useful because it is a measure of the &quot;probablistic nearness&quot; of two points. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, if I have a gaussian PDF with mean zero and variance 100, it is quite likely to generate a sample around the value 100. ($(100-0)/100 = 1$).  However, a gaussian PDF with mean 100 and variance 1 is &lt;em&gt;more likely&lt;/em&gt; to be the PDF which generates samples around 100. ($(100-100)/1=0$). So we consider the point &quot;closer to&quot; the second one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus, we need a &lt;a href=&quot;http://en.wikipedia.org/wiki/Metric_space&quot; rel=&quot;nofollow&quot;&gt;metric&lt;/a&gt; to determine which PDF was a &quot;better&quot; choice when determining who generated the sample 100.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So in your case, it depends on which quantities were being generated by random processes.  For example, if you assumed that $d$ and $a$ were being measured, but corrupted by independent random noise, then yes, your definition of the Mahalanobis Distance is correct.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is very unlikely that the noise on $d$ and $a$ are independent, since they probably aren't being measured independently. However, many algorithms make such an assumption. Make sure yours does.&lt;/p&gt;&#xA;" OwnerUserId="163" LastActivityDate="2014-06-10T18:53:53.447" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3084" PostTypeId="2" ParentId="2149" CreationDate="2014-06-10T19:40:09.787" Score="3" Body="&lt;ul&gt;&#xA;&lt;li&gt;Using EKF for localisation based on laser scans and a known map is a bad idea and will not work because one of EKF's main assumptions is not valid: &lt;strong&gt;The measurement model is not differentiable.&lt;/strong&gt; &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I would suggest looking into Monte Carlo Localization (Particle Filters). This will not only solve the problem with your measurement model, but also allow global localization (initial pose within the map completely unknown).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: I am sorry I forgot to mention another important point:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If you want to apply EKF, your measurement model as well as your motion &lt;strong&gt;model may only include Gaussian noise&lt;/strong&gt;. This means you need be able to write down your measurement model as $z_t = h(x_t) + N(0, Q_t)$.&#xA;This is is a severe limitation, since it does not allow a slightly more complex model like the beam_range_finder_model in Probabilistic Robotics, which also considers dynamic objects in front of the robot, invalid (max) measurements and completely random readings. You would be stuck with casting rays for the $h(x_t)$ part and adding Gaussian noise.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="4531" LastEditorUserId="4531" LastEditDate="2014-06-13T15:30:38.907" LastActivityDate="2014-06-13T15:30:38.907" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3085" PostTypeId="2" ParentId="2642" CreationDate="2014-06-10T20:23:24.827" Score="3" Body="&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Since you have a 2D sensor which you can not rotate in a controlled way, you can only expect to perform SLAM in a 2D plane.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Your best bet is to use the IMU for attitude estimation (roll and pitch only, since you do not have a compass) and correct each slightly rotated 2D laser scan accordingly. If your IMU does not provide you with an attitude estimate already, I would compute attitude estimates using a nonlinear complementary filter since they only need tuning of one single constant.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Even though it is theoretically possible to use Particle Filters for SLAM with laser scans (see gmapping), the current state of the art is graph-based SLAM, i.e. least squares optimization of the SLAM graph, or in your case pose graph optimization. Have a look at karto in ROS as an exemplary open source implementation.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="4531" LastEditorUserId="4531" LastEditDate="2014-06-11T09:24:43.817" LastActivityDate="2014-06-11T09:24:43.817" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3086" PostTypeId="2" ParentId="2382" CreationDate="2014-06-10T21:11:25.630" Score="2" Body="&lt;p&gt;I agree that the motion models in Probabilistic Robotics are badly suited for omnidirectional robots. I always interpreted the models presented there as examples only that should enable you to devise a custom model for your own robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First of all you need to model and solve the forward kinematics for this kind of omnidirectional drive. I guess you already managed to do that, but just in case you might want to check Section III.b) in &lt;a href=&quot;ftp://robotics.mi.fu-berlin.de/pub/Rojas/omniwheel/killoughz.pdf&quot; rel=&quot;nofollow&quot;&gt;this paper&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second, there are many ways of turning a kinematic model into a probabilistic model. The easiest way is to just take the kinematic model and add some &quot;process noise&quot; in pose space. A probably better alternative is assuming noisy wheel encoders, i.e. sample and add noise to wheel encoder readings before transforming these according to the kinematic model.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I had good results applying a particle filter to a robot with the same geometry with the latter option a while ago, but your mileage may vary.&lt;/p&gt;&#xA;" OwnerUserId="4531" LastActivityDate="2014-06-10T21:11:25.630" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3087" PostTypeId="2" ParentId="2149" CreationDate="2014-06-11T06:37:18.500" Score="0" Body="&lt;p&gt;First of all, you mentioned nothing about which kind of localization you are using. Is it with known or unknown correspondences? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now to acquire the Jacobian in Matlab you may do the following &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt; syms x y a Vtran Vrotat t&#xA;&amp;gt;&amp;gt; f1 = x + Vtran*t*cos(a);&#xA;&amp;gt;&amp;gt; f2 = y + Vtran*t*sin(a);&#xA;&amp;gt;&amp;gt; f3 = a + Vrotat*t;&#xA;&amp;gt;&amp;gt; input  = [x y a];&#xA;&amp;gt;&amp;gt; output = [f1 f2 f3];&#xA;&amp;gt;&amp;gt; F = jacobian(output, input)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The result &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;F =&#xA;[ 1, 0, -Vtran*t*sin(a)]&#xA;[ 0, 1,  Vtran*t*cos(a)]&#xA;[ 0, 0,               1]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Extended Kalman Filter requires the system to be linear and the noise to be Gaussian. The system here means the motion and observation models must be linear. Laser sensors give the range and the angle toward a landmark from the robot's frame, so the measurement model is not linear. About &lt;code&gt;P&lt;/code&gt;, if you assume it to be large then your EKF estimator will be poor at the beginning and it relies on the measurements because the previous state vector is not available. However, once your robot starts moving and sensing, EKF will be getting better because it uses the motion and measurement models to estimates the robot's pose.  If your robot is not sensing any landmarks, the uncertainty increases drastically. Also, you need to be careful about the angle. In C++, &lt;code&gt;cos and sin&lt;/code&gt;, the angle should be in radian. There is nothing in your code about this issue. If you are assuming the angle's noise in degree while your calculation in radian, then you might get weird results because one degree as a noise while the calculations in radian is considered huge. &lt;/p&gt;&#xA;" OwnerUserId="2155" LastActivityDate="2014-06-11T06:37:18.500" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3088" PostTypeId="1" CreationDate="2014-06-11T06:40:51.453" Score="5" ViewCount="352" Body="&lt;p&gt;I'm using &lt;a href=&quot;http://wiki.ros.org/amcl&quot; rel=&quot;noreferrer&quot;&gt;amcl&lt;/a&gt; package in &lt;a href=&quot;http://wiki.ros.org&quot; rel=&quot;noreferrer&quot;&gt;ROS&lt;/a&gt; to localize a mobile robot. I've changed &lt;code&gt;min_particles&lt;/code&gt; and &lt;code&gt;max_particles&lt;/code&gt; several times then calculated the output difference with odomotry to evaluate these parameters. The table below demonstrate results; As you see, there is no notable change in the output and if you ignore the first row of the table, output variance is small. &#xA;&lt;img src=&quot;https://i.stack.imgur.com/NMSy8.jpg&quot; alt=&quot;enter image description here&quot;&gt;&#xA;&lt;br/&gt;And this is the Particle Filter output on the map:&lt;br/&gt;&#xA;&lt;img src=&quot;https://i.stack.imgur.com/tiD4j.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="2202" LastActivityDate="2014-06-11T13:45:33.187" Title="Different Particle Filter min and max particle numbers give almost the same result" Tags="&lt;localization&gt;&lt;particle-filter&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3089" PostTypeId="2" ParentId="3088" CreationDate="2014-06-11T09:23:23.513" Score="2" Body="&lt;p&gt;It is not completely clear what your question is, but I assume you wanted to ask: Why does the output not change with the number of particles above a certain number of particles?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By allowing amcl to use more samples, you decrease the errors (or inaccuracies) that are caused by the fact that the particle filter &lt;strong&gt;approximates&lt;/strong&gt; your probability distributions using Monte Carlo sampling. Above a certain number of samples, these errors from Monte Carlo approximation are so small that they are negligible compared to other sourceof uncertainty, e.g. measurement, system, or odometry uncertainty.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thousands of particles are in my experience many more than you need for local localization in 2D (when the robot has a rough estimate of where it is already). You will likely only need so many particles for global localization, i.e. when the robot does not know anything (for example during initialization).&lt;/p&gt;&#xA;" OwnerUserId="4531" LastActivityDate="2014-06-11T09:23:23.513" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3090" PostTypeId="1" CreationDate="2014-06-11T09:48:15.427" Score="4" ViewCount="3548" Body="&lt;p&gt;I'm developing a program for communicating with Ardupilot using Mavlink. I've generated code based on the Mavlink definition for Ardupilot, and I have the basic communication working.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I can't figure out, is how to request Ardupilot to send a specific Mavlink message. I'd like Ardupilot to send me Mavlink message &lt;a href=&quot;https://pixhawk.ethz.ch/mavlink/#ATTITUDE&quot; rel=&quot;nofollow&quot;&gt;Attitude (#30)&lt;/a&gt; every second. How can I do this?&lt;/p&gt;&#xA;" OwnerUserId="4265" LastActivityDate="2015-04-25T16:59:41.893" Title="How to request a specific Mavlink packet from Ardupilot?" Tags="&lt;ardupilot&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3091" PostTypeId="1" AcceptedAnswerId="3092" CreationDate="2014-06-11T10:10:23.250" Score="2" ViewCount="79" Body="&lt;p&gt;I want to overwrite the git source of a package in autoproj. That package is by &#xA;default on gitorious and I forked it on spacegit to apply specific patches.&#xA;According to the autoproj documentation (&lt;a href=&quot;http://rock-robotics.org/stable/documentation/autoproj/customization.html&quot; rel=&quot;nofollow&quot;&gt;http://rock-robotics.org/stable/documentation/autoproj/customization.html&lt;/a&gt;), I set the new repo in the overrides.yml by:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  - control/orogen/&amp;lt;package&amp;gt;:&#xA;    url: git://spacegit.dfki.uni-bremen.de/virgo/orogen-&amp;lt;package&amp;gt;.git&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But if I inspect the remotes of the newly checked out package, only the &#xA;fetch url is adapted to spacegit whereas the push url still points to &#xA;the default gitorious repo:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ git remote -v&#xA;autobuild   git://spacegit.dfki.uni-bremen.de/&amp;lt;project&amp;gt;/orogen-&amp;lt;package&amp;gt;.git (fetch)&#xA;autobuild   git@gitorious.org:/rock-control/orogen-&amp;lt;package&amp;gt;.git (push)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;How can I overwrite both the fetch and the push source of a package in the &#xA;overrides.yml?&lt;/p&gt;&#xA;" OwnerUserId="5561" LastActivityDate="2014-06-12T06:15:42.253" Title="How to overwrite default git source in autoproj?" Tags="&lt;rock&gt;" AnswerCount="1" CommentCount="4" ClosedDate="2014-07-03T13:29:35.857" ContentLicense="CC BY-SA 3.0" />
  <row Id="3092" PostTypeId="2" ParentId="3091" CreationDate="2014-06-11T10:48:14.840" Score="2" Body="&lt;p&gt;You missed the part that autobuild can separate between push and pull urls.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See documentation at&#xA;&lt;a href=&quot;http://rock-robotics.org/next/api/autobuild/Autobuild/Git.html&quot; rel=&quot;nofollow&quot;&gt;http://rock-robotics.org/next/api/autobuild/Autobuild/Git.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Gitorious statement automatically set the push_to url, see here:&#xA;&lt;a href=&quot;http://rock-robotics.org/next/api/autoproj/Autoproj.html#method-c-gitorious_server_configuration&quot; rel=&quot;nofollow&quot;&gt;http://rock-robotics.org/next/api/autoproj/Autoproj.html#method-c-gitorious_server_configuration&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;everything you have to do is add:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;- control/orogen/&amp;lt;package&amp;gt;:&#xA;  url: git://spacegit.dfki.uni-bremen.de/virgo/orogen-&amp;lt;package&amp;gt;.git&#xA;  push_to: git@spacegit.dfki.uni-bremen.de:virgo/orogen-&amp;lt;package&amp;gt;.git&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="4508" LastEditorUserId="4508" LastEditDate="2014-06-12T06:15:42.253" LastActivityDate="2014-06-12T06:15:42.253" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3093" PostTypeId="2" ParentId="3090" CreationDate="2014-06-11T10:55:59.807" Score="3" Body="&lt;p&gt;If you carefully go through &lt;a href=&quot;https://github.com/diydrones/ardupilot&quot; rel=&quot;nofollow&quot;&gt;Ardupilot&lt;/a&gt; code, you will find all the mavlink communication related function are put in file &lt;a href=&quot;https://github.com/diydrones/ardupilot/blob/master/ArduCopter/GCS_Mavlink.pde&quot; rel=&quot;nofollow&quot;&gt;GCS_Mavlink.pde&lt;/a&gt;. If you wish to receive particular message you will have to look into and modify this file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mavlink message &lt;a href=&quot;https://pixhawk.ethz.ch/mavlink/#ATTITUDE&quot; rel=&quot;nofollow&quot;&gt;attitude(#30)&lt;/a&gt; is handled in &lt;a href=&quot;https://github.com/diydrones/ardupilot/blob/master/ArduCopter/GCS_Mavlink.pde#L117&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt; function within ardupliot. So you will have to modify and the ardupilot code and call this function at desired time interval. Similarly you can find relevant functions for desired messages already build within code. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you wish to send any mavlink message on your own then I would suggest you to go through particular mavlink message file. All transfer functions related to particular message are defined within message file. For example, in order to send &lt;a href=&quot;https://pixhawk.ethz.ch/mavlink/#ATTITUDE&quot; rel=&quot;nofollow&quot;&gt;attitude(#30)&lt;/a&gt;, go to &lt;a href=&quot;https://github.com/diydrones/ardupilot/blob/master/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_attitude.h&quot; rel=&quot;nofollow&quot;&gt;mavlink_msg_attitude.h&lt;/a&gt; and refer to function &lt;a href=&quot;https://github.com/diydrones/ardupilot/blob/master/libraries/GCS_MAVLink/include/mavlink/v1.0/common/mavlink_msg_attitude.h#L180&quot; rel=&quot;nofollow&quot;&gt;mavlink_msg_attitude_send()&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One should also refer &lt;a href=&quot;http://qgroundcontrol.org/mavlink/start&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt; for more mavlink related information.&lt;/p&gt;&#xA;" OwnerUserId="2118" LastActivityDate="2014-06-11T10:55:59.807" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3094" PostTypeId="2" ParentId="3088" CreationDate="2014-06-11T13:45:33.187" Score="3" Body="&lt;p&gt;Once you have enough particles to resolve your position, the effect of adding more particles shrinks to zero.  You are likely seeing the best possible results that your particle filter can achieve.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It looks like the smallest adequate number of particles for your simulation is somewhere between 120 and 1200, and my guess is that if you plotted the Odom difference vs &lt;code&gt;max_particles&lt;/code&gt;, you would see a curve that was near-vertical at &lt;code&gt;max_particles = 1&lt;/code&gt;, decreasing past 172 at &lt;code&gt;max_particles = 120&lt;/code&gt;and near-horizontal at 149 by the time &lt;code&gt;max_particles&lt;/code&gt; got to 1200.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-06-11T13:45:33.187" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3096" PostTypeId="2" ParentId="2056" CreationDate="2014-06-12T12:18:09.390" Score="0" Body="&lt;p&gt;IN CASE OF A HC05 MODULE : You could use Arduino IDE but don't forget to select &quot;both, NL and CR&quot; in the case nearby the baudrate selection (in the hardware serial monitor).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IN CASE OF A HC06 MODULE: choose &quot;no line ending&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With this code it is ok:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    #include &amp;lt;SoftwareSerial.h&amp;gt;&#xA;&#xA;SoftwareSerial BTSerial(10, 11); // RX | TX&#xA;&#xA;void setup()&#xA;{&#xA;  pinMode(9, OUTPUT);  //HC-05 pin 34 (key pin) &#xA;  digitalWrite(9, HIGH);  // 5V sur Key pour activer le mode commande AT&#xA;  Serial.begin(9600);&#xA;  Serial.println(&quot;AT commandes:&quot;);&#xA;  BTSerial.begin(38400);  // HC-05 vitesse par défaut pour la commande AT&#xA;}&#xA;&#xA;void loop()&#xA;{&#xA;  // lecture des commandes AT par le serial port(9600)&#xA;  if (BTSerial.available()) Serial.write(BTSerial.read());&#xA;&#xA;  // envoie à HC-05 de commandes AT saisi&#xA;  if (Serial.available()) BTSerial.write(Serial.read());&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="5565" LastActivityDate="2014-06-12T12:18:09.390" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3098" PostTypeId="1" AcceptedAnswerId="3120" CreationDate="2014-06-13T14:40:46.723" Score="4" ViewCount="136" Body="&lt;p&gt;Assume I have a rather simple system I want to control, but all sensor measurements exhibit considerable time delay, i.e.:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$z_t = h(x_{(t-d)}) \neq h(x_t)$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;With my limited knowledge about control, I could imagine the following setup:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;One observer estimates the delayed state $x_{(t-d)}$ using control input and (delayed) measurements.&lt;/li&gt;&#xA;&lt;li&gt;A second observer uses the delayed observer's estimate and predicts the current state $x_t$ using the last control inputs between delayed measurement and current time.&lt;/li&gt;&#xA;&lt;li&gt;The second observer's estimate is used to control the system.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Can I do any better than that? What is the standard approch to this problem? And is there any literature or research about this topic?&lt;/p&gt;&#xA;" OwnerUserId="4531" LastActivityDate="2014-11-04T17:27:04.190" Title="Controlling a system with delayed measurements" Tags="&lt;sensors&gt;&lt;control&gt;&lt;sensor-fusion&gt;&lt;sensor-error&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="3099" PostTypeId="2" ParentId="2849" CreationDate="2014-06-13T15:47:37.383" Score="2" Body="&lt;p&gt;You seem to be controlling the quadrotor's attitude (roll, pitch) to (0, 0) and not its position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you are seeing is drift in position, which is inevitable if you do not control the quadrotor's position. You might still be able to reduce the amount of drift a little:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Make sure that the center of gravity of your quadrotor is actually in the center. If it is only slightly in front, it will pull your quadrotor forward.&lt;/li&gt;&#xA;&lt;li&gt;Make sure that the KK controller board is mounted exactly parallel to the propeller plane. This is mechanically difficult so most controller boards allow you to calibrate their orientation, but I do not know about KK. The controller board can then account for the fact that their attitude estimate is slightly off.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Also keep in mind that your quadrotor behaves differently from normal so close to the ground due to the &lt;a href=&quot;http://en.wikipedia.org/wiki/Ground_effect_%28aerodynamics%29&quot; rel=&quot;nofollow&quot;&gt;so-called ground effect&lt;/a&gt;. It might get much better after takeoff.&lt;/p&gt;&#xA;" OwnerUserId="4531" LastEditorUserId="4531" LastEditDate="2014-06-13T18:25:48.953" LastActivityDate="2014-06-13T18:25:48.953" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3100" PostTypeId="2" ParentId="3098" CreationDate="2014-06-13T21:52:01.553" Score="2" Body="&lt;p&gt;The most straightforward approach is to use a Kalman filter with a memory of recent state history. While waiting for measurements you do the standard time update. When a new measurement arrives, you restore the state and error covariance to the appropriate point in time, apply the measurement update, and then apply time updates to get to the current point in time.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2014-06-13T21:52:01.553" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3101" PostTypeId="1" AcceptedAnswerId="3147" CreationDate="2014-06-14T02:32:35.297" Score="4" ViewCount="1311" Body="&lt;p&gt;I want to implement the velocity motion model in Matlab. According to &lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/0262201623&quot; rel=&quot;nofollow&quot;&gt;Probabilistic Robotics&lt;/a&gt; page 124, the model is as following &lt;/p&gt;&#xA;&#xA;&lt;p&gt;\begin{align*}&#xA;\hat{v}      &amp;amp;= v + sample(\alpha_{1} v^{2} + \alpha_{2} w^{2}) \\&#xA;\hat{w}      &amp;amp;= w + sample(\alpha_{3} v^{2} + \alpha_{4} w^{2}) \\&#xA;\hat{\gamma} &amp;amp;= sample(\alpha_{5} v^{2} + \alpha_{6} w^{2}) \\&#xA;x' &amp;amp;= x - \frac{\hat{v}}{\hat{w}} sin \theta + \frac{\hat{v}}{\hat{w}} sin(\theta + \hat{w} \Delta{t}) \\&#xA;y' &amp;amp;= y + \frac{\hat{v}}{\hat{w}} cos \theta - \frac{\hat{v}}{\hat{w}} cos(\theta + \hat{w} \Delta{t}) \\&#xA;\theta' &amp;amp;= \theta + \hat{w} \Delta{t} + \hat{\gamma} \Delta{t}&#xA;\end{align*}&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $sample(b^{2}) \Leftrightarrow \mathcal{N}(0, b^{2})$. With this kind of variance $\alpha_{1} v^{2} + \alpha_{2} w^{2}$, the Kalman Gain is approaching singularity. Why?  &lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="2155" LastEditDate="2014-06-20T20:36:21.510" LastActivityDate="2014-08-22T16:07:11.913" Title="Velocity Model Motion in Matlab (Probabilistic Robotics)" Tags="&lt;mobile-robot&gt;&lt;kinematics&gt;&lt;motion&gt;&lt;motion-planning&gt;&lt;noise&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="3102" PostTypeId="1" CreationDate="2014-06-14T02:53:59.597" Score="1" ViewCount="432" Body="&lt;p&gt;We are building a 6 DOF robotic arm as a college project and we've almost finished the designs. The problem is with the controls. We still havent thought on how to control the arm, as in , software gui interfaces , etc. Any suggestions on this ? Also, is there any simulation software for Simulating and testing robotic arms ? &lt;/p&gt;&#xA;" OwnerUserId="5571" LastActivityDate="2014-06-14T03:45:02.260" Title="6 DOF Robotic Arm" Tags="&lt;control&gt;&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="0" ClosedDate="2014-07-03T13:30:33.300" ContentLicense="CC BY-SA 3.0" />
  <row Id="3103" PostTypeId="2" ParentId="3102" CreationDate="2014-06-14T03:36:44.750" Score="1" Body="&lt;p&gt;I think Matlab suits your needs. About the control input, once you got the dynamic equation of your manipulator,&#xA;\begin{equation}&#xA;M(q) \ddot{q} + C(q, \dot{q})q + G(q) = u \qquad (1)&#xA;\end{equation}&lt;/p&gt;&#xA;&#xA;&lt;p&gt;then you need to specify the input $u$ of the dynamic equation (1). There are many control input algorithms. The simplest one is PID control which specifies the input as the error.&#xA;\begin{equation}&#xA;u = K_{p} \tilde{q} + K_{i} \int_0^t{\tilde{q}dt} + K_{d} \frac{d}{dt} \tilde{q}&#xA;\end{equation}&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $u(t) = [u_{1},..., u_{n}]^{T}$ the input, $\tilde{q}(t) = q(t) - q_{d}(t)$ which represents the error $e(t)$. $q_{d}(t)$ is the desired trajectory and $K_{p}, K_{d}$ and $K_{i}$ are the gain matrices, the proportional, derivative, and integral respectively.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, the inverse dynamics and Lyapunov-based design algorithms are good ones. The problem with the last two algorithms is that they require the parameters of the system to be given accurately, so you should start with PID controller. In GUI, you might want the user to specify the desired trajectory whether tracking or regulation trajectories. Also, you might want the user to adjust the Gain of PID. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a start point, you should implement two arms in Matlab. The kinematic and dynamic equations of two arms are given in the majority of manipulator books. Pick one and try to test the aforementioned algorithms. Start with regulation problem in which the desired trajectory is a constant value and see how well your manipulator approaches the desired trajectory as time approaches infinity. Also, try to plot the errors which are the difference between the current trajectory and the desired one. They must approach zero when time approaches infinity. &lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="2155" LastEditDate="2014-06-14T03:45:02.260" LastActivityDate="2014-06-14T03:45:02.260" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3104" PostTypeId="1" CreationDate="2014-06-14T05:54:36.330" Score="3" ViewCount="207" Body="&lt;p&gt;I'm facing problems with this &lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/0262201623&quot; rel=&quot;nofollow&quot;&gt;book&lt;/a&gt; and it is the only book that discusses localization in depth. The results that I'm getting makes no sense. I've read a lot of papers, majority of them copy the localization algorithm from this book. My question here is why $\bar{\mu}$ and $\bar{\Sigma}$ are being changed every iteration?? I'm using them to get the predicted measurements in lines 11- 13, so they should be fixed. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;9. for all observed features $z^{i}  = [r^{i} \ \phi^{i} \ s^{i}]^{T} $ do &lt;/p&gt;&#xA;&#xA;&lt;p&gt;10. &amp;nbsp; $j = c^{i}$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;11. &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $q = (m_{x} - \bar{\mu}_{x})^{2} + (m_{y} - \bar{\mu}_{y})^{2}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;12. &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $\hat{z}^{i} = \begin{bmatrix}&#xA;\sqrt{q} \\ &#xA;atan2(m_{y} - \bar{\mu}_{y}, m_{x} - \bar{\mu}_{x} ) - \bar{\mu}_{\theta} \\ &#xA;m_{s} \\ \end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;13. &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $ \hat{H}^{i} = \begin{bmatrix} &#xA;h_{11} &amp;amp; h_{12} &amp;amp; h_{13} \\&#xA;h_{21} &amp;amp; h_{22} &amp;amp; h_{23} \\&#xA;h_{31} &amp;amp; h_{32} &amp;amp; h_{33} \\ \end{bmatrix}  $&lt;/p&gt;&#xA;&#xA;&lt;p&gt;14. &amp;nbsp; &amp;nbsp; $\hat{S}^{i} = H^{i} \bar{\Sigma} [H^{i}]^{T} + Q $&lt;/p&gt;&#xA;&#xA;&lt;p&gt;15. &amp;nbsp; &amp;nbsp; $K^{i} = \bar{\Sigma} [H^{i}]^{T} [S^{i}]^{-1}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;16. &amp;nbsp; &amp;nbsp; $\bar{\mu} = \bar{\mu} + K^{i}(z^{i}-\hat{z}^{i}) $&lt;/p&gt;&#xA;&#xA;&lt;p&gt;17. &amp;nbsp; &amp;nbsp; $\bar{\Sigma} = (I - K^{i} H^{i}) \bar{\Sigma} $&lt;/p&gt;&#xA;&#xA;&lt;p&gt;18. endfor&lt;/p&gt;&#xA;&#xA;&lt;p&gt;19. $\mu = \bar{\mu}$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;20. $\Sigma = \bar{\Sigma}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please suggest me other books that discuss EKF localization in depth. &lt;/p&gt;&#xA;" OwnerUserId="2155" LastActivityDate="2014-07-14T15:50:10.037" Title="EKF localization known correspondences" Tags="&lt;localization&gt;&lt;ekf&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3105" PostTypeId="1" AcceptedAnswerId="3106" CreationDate="2014-06-14T05:57:10.350" Score="3" ViewCount="1380" Body="&lt;p&gt;I'm a noobie just starting out and trying to come up what I need to build my first quadrocopter, I just wanted to run something by people with some experience before I commit to buying anything.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__27775__Turnigy_Multistar_20_Amp_Multi_rotor_Brushless_ESC_2_4S_OPTO_.html&quot; rel=&quot;nofollow&quot;&gt;this esc&lt;/a&gt; be fine for running &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__39036__Turnigy_Multistar_2213_980Kv_14Pole_Multi_Rotor_Outrunner.html&quot; rel=&quot;nofollow&quot;&gt;this motor&lt;/a&gt;? As I understand it the ESC should be rated for slightly above what the max amps are for the motor?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On top of that, should &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__7636__ZIPPY_Flightmax_2200mAh_3S1P_25C_EU_warehouse_.html&quot; rel=&quot;nofollow&quot;&gt;this battery&lt;/a&gt; be able to run all of the motors without any issue?&lt;/p&gt;&#xA;" OwnerUserId="5572" LastEditorUserId="350" LastEditDate="2014-06-17T18:12:21.267" LastActivityDate="2014-06-25T00:24:00.553" Title="Will a 20amp ESC run a Turnigy 2213-980?" Tags="&lt;quadcopter&gt;&lt;brushless-motor&gt;&lt;multi-rotor&gt;&lt;esc&gt;&lt;battery&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3106" PostTypeId="2" ParentId="3105" CreationDate="2014-06-14T09:57:48.967" Score="3" Body="&lt;p&gt;In process of selection of components for multirotor, one should start from motor as it is the driving component. Maximum current drawn by your motor is given by manufacture which is 15A. Now your ESC should have maximum current rating more than maximum current rating of motor. This is satisfied in your motor-ESC combination so your selection looks good.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maximum current that can be obtained from a battery depend on capacity (mAh rating) and constant discharge rating (C rating) and is given by multiplication of both. In your case, battery should be able to give constant 55A (2200x25 = 55000mA). However maximum current that can be drawn by motor is 15A, so you should be able to use this battery with given single motor-ESC combo. However for a quadrotor, total maximum current drawn will be 15x4 = 60A. So you should consider using battery with more mAh rating or more C capacity like &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__9394__Turnigy_2200mAh_3S_30C_Lipo_Pack.html&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt; or &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__9465__Turnigy_3300mAh_3S_20C_Lipo_Pack.html&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also make sure that you do not put any bigger propeller on motor than a recommended one. This action might cause motor to draw more current that maximum rating which might result in burning of motor.&lt;/p&gt;&#xA;" OwnerUserId="2118" LastEditorUserId="2118" LastEditDate="2014-06-15T11:13:07.440" LastActivityDate="2014-06-15T11:13:07.440" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="3107" PostTypeId="2" ParentId="3104" CreationDate="2014-06-14T15:09:34.450" Score="2" Body="&lt;p&gt;The underlying assumption seems to be that if all observed features you measure at the same time are independent, you can apply the EKF correction step several times: Once for each observed feature. (I am currently not completely sure whether this is valid.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is what the above algorithm does. It is an optimization of the naive solution, which would work like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can also combine the measurement vectors of all observed features to a full measurement vector $z$ by stacking them on top of each other:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$z = (z_0^T, z_1^T, z_2^T, ...)^T$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will get the full Jacobian by stacking all Jacobians accordingly. The full measurement covariance matrix $Q$ is the block-diagonal matrix which contains all individual measurement covariances $Q$ as blocks on its diagonal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This way, you can use the original EKF algorithm which modifies $\bar\mu$ and $\bar\Sigma$ only once.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;But:&lt;/strong&gt; This naive solution is computationally more expensive, which is why you should use the method described in Probabilistic Robotics. Using the naive method, you have to invert one much bigger matrix $H \bar\Sigma H^T + Q$ instead of several much smaller versions.&lt;/p&gt;&#xA;" OwnerUserId="4531" LastActivityDate="2014-06-14T15:09:34.450" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3108" PostTypeId="1" CreationDate="2014-06-16T03:49:49.553" Score="0" ViewCount="66" Body="&lt;p&gt;How might I be able to control one function (like brightness control of an &lt;a href=&quot;http://en.wikipedia.org/wiki/Light-emitting_diode&quot; rel=&quot;nofollow&quot;&gt;LED&lt;/a&gt;) with two different triggers (like a tactile switch and an IR remote)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am trying to be able to control the brightness with switches as well as IR remote when desired.&lt;/p&gt;&#xA;" OwnerUserId="5575" LastEditorUserId="1906" LastEditDate="2014-08-02T09:17:09.797" LastActivityDate="2014-08-02T09:17:09.797" Title="How to control a function with two different inputs" Tags="&lt;control&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3110" PostTypeId="1" AcceptedAnswerId="3112" CreationDate="2014-06-16T08:39:24.630" Score="17" ViewCount="2998" Body="&lt;p&gt;I'm going to build a &lt;em&gt;small robot system&lt;/em&gt;, and it seems like that ROS serves a nice framework to control and program the system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I am wondering which is the best practice to manage the components of my robot.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Does it make sense to put all the sensors in one node?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Should I only put the sensors of the same type in one node or is it better to have one node for one sensor? &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Is it a good practice to have some kind of handler node, which takes input from sensors and steers the corresponding actuators or should the actuator nodes and sensor nodes communicate directly?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Fused sensor nodes and actuator nodes with handler&#xA;&lt;img src=&quot;https://i.stack.imgur.com/wkjDK.jpg&quot; alt=&quot;1. Fused sensor nodes and actuator nodes with handler&quot;&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Single sensor and actuator nodes with handler&#xA;&lt;img src=&quot;https://i.stack.imgur.com/WZkGN.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Direct communication&#xA;&lt;img src=&quot;https://i.stack.imgur.com/MyCez.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;For me, I guess the best is to have some kind of handler, which handles the communication between sensors and actuators and have one node for each element of the robot (like in figure 2), because the system is in this way loosely coupled and can be extended easily, but I want to know what your opinion is.&lt;/p&gt;&#xA;" OwnerUserId="4483" LastEditorDisplayName="user10072" LastEditDate="2017-04-23T13:47:28.197" LastActivityDate="2018-03-04T17:02:59.557" Title="ROS: Best practices?" Tags="&lt;control&gt;&lt;ros&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="13" ContentLicense="CC BY-SA 3.0" />
  <row Id="3111" PostTypeId="2" ParentId="3006" CreationDate="2014-06-16T09:13:19.023" Score="0" Body="&lt;p&gt;For the stereo vision, it could be very hard to achieve a resolution over 1% I think, which means 10cm resolution can be achieved for 10m range..&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Roboteye RE05 seems to be a good option.. However where to buy one?&lt;/p&gt;&#xA;" OwnerUserId="5576" LastActivityDate="2014-06-16T09:13:19.023" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3112" PostTypeId="2" ParentId="3110" CreationDate="2014-06-16T09:59:28.927" Score="16" Body="&lt;p&gt;Very short answer: 2&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h1&gt;Sensors&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Regarding whether reading from sensors all in one node or each separately, you should ask yourself this question:&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Are the sensors meaningless without the other?&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;This question asks if the sensors are tightly coupled or not. For example, say you have a sensor that is sensitive to temperature (and you need to compensate for it). You add a temperature sensor primarily to fix the value of the other sensor. In this scenario, it makes sense to read both values at the same time, since they are tightly coupled. In fact, without the readings from the temperature sensor, the readings from the original sensor is useless.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, if the sensors are individually useful, by all means keep them in separate nodes. This has many benefits:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The nodes can be run on separate processors&lt;/li&gt;&#xA;&lt;li&gt;The nodes can be reused in future robots&lt;/li&gt;&#xA;&lt;li&gt;Failure in communication with one node doesn't bring the whole system down&lt;/li&gt;&#xA;&lt;li&gt;Restart of acquisition from a faulty sensor board can be done separately from the others&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In fact, if you &lt;em&gt;need&lt;/em&gt; any of the above benefits, you would have to go with separate nodes, even if the sensors are tightly coupled, but that usually doesn't happen.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Actuators&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;This is analogous.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Are the actuators meaningless without the other?&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;For example, if you are designing a wrist with &lt;a href=&quot;https://robotics.stackexchange.com/a/1201/158&quot;&gt;robotic tendons&lt;/a&gt; where for each tendon (for whatever reason) two motors are responsible to simultaneously work to move a joint in one or the other direction, then having them served in the same node makes much more sense than separate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, where actuators are independent (common case), it makes sense to have one node for each actuator. In that case, each could be put in a different node.  Besides the exact same benefits as with sensors, there is this added benefit:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If an actuators is stalled (for whatever reason), the other actuators still function.  If there is redundant degrees of freedom, they could even completely compensate for it.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This has one implication. If you &lt;em&gt;need&lt;/em&gt; the actuators to work in harmony, then put them in the same node. This is not just because of failure in communication, but because different nodes means different delays; on a distributed system each node is on a different part of the network and hence the difference in delays, on a centralized system different delays happen on high CPU loads due to each process's &lt;em&gt;luck&lt;/em&gt; in scheduling.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Should There Be a Handler?&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Even though the answer is &quot;it depends&quot;, there is a common approach with many advantages. Let's change the name and call it &quot;controller&quot;. The approach is &quot;yes, there should be a controller&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The advantages of having a controller are (among many):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Decoupled processing: each node is responsible for one thing which means:&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Simplicity: which implies&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Easier development&lt;/li&gt;&#xA;&lt;li&gt;Easier debugging&lt;/li&gt;&#xA;&lt;li&gt;Fewer errors&lt;/li&gt;&#xA;&lt;li&gt;Less chance of failure&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Reusability: because the same controller can be used with different sensor nodes if they have the same functionality (i.e. message and service formats).&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Execution on separate hardware: each node can be moved in the network. For example, sensor and actuator nodes may be moved to a dedicated microcontroller (&lt;a href=&quot;http://wiki.ros.org/rosserial_arduino&quot; rel=&quot;noreferrer&quot;&gt;Arduino&lt;/a&gt; for example (not that I recommend)) and the controller on a PC.&lt;/li&gt;&#xA;&lt;li&gt;Avoid extreme ugliness: if the sensors wanted to directly influence the actuators, the result is simply a mess. Assuming no controller, let's look at each case:&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;One sensor node: basically this means the sensor node and the controller are put together in the same node. Not too bad, but very unnecessary.&lt;/li&gt;&#xA;&lt;li&gt;Many sensor nodes: this is the mess. This means the controller is &lt;em&gt;distributed&lt;/em&gt; among the sensor nodes. Therefore all the sensor nodes have to talk with each other for each to know how to control its associated actuator(s). Imagine a failure in communication or various kinds of delays and you'll see how difficult it becomes. Given that this is utterly unnecessary, there is no reason for doing it!&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;These said, there are disadvantages too. Having more nodes (any nodes, not just the controller) means:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;More wasted communication: the data have to move around in standard formats (so serialized and deserialized) through network or shared memory, ROS core has to look at them and decide who to deliver them to, etc. In short, some system resources are wasted in communication. If all nodes where in one, that cost could have been zero.&lt;/li&gt;&#xA;&lt;li&gt;Higher chance of failure: if for whatever reason a network link goes down, or a node dies, there is a failure in the system. If you are not prepared for it, it can take down the whole system. Now this is actually a good thing in general to be able to lose part of the system but not all of it (&lt;a href=&quot;https://en.wikipedia.org/wiki/Graceful_degradation&quot; rel=&quot;noreferrer&quot;&gt;graceful degradation&lt;/a&gt;), but there also exist applications where this should be avoided as much as possible. Cutting the communication and putting all code in one node actually helps with system stability. The down side is of course, the system either works fine or suddenly dies completely.&lt;/li&gt;&#xA;&lt;li&gt;Chaotic timings: each node runs on its own. The time it takes for its messages to arrive at others is non-deterministic and varies run by run. Unless your nodes timestamp each message (as a side note: you need to have synchronized clocks to a good degree, which ROS doesn't) and unless each receiving node can take the delay into account and control accordingly (which is a very difficult task on its own) then having multiple nodes means high uncertainty about the age of the data. This is actually one of the reasons (among many) that most robots move so slow; their control loop has to be slow enough to make sure all data correspond to the current period. The larger the delays, the slower the control loop.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In all above disadvantages, the solution is to reduce the number of nodes, preferably to a single node. Wait a minute, that's not using ROS anymore! Exactly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To summarize:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Use ROS for non-realtime systems where delays could sporadically get high. In that case, feel free to have as many ROS nodes as you wish. In fact, it's very good practice to have each ROS node do &lt;em&gt;one and only one&lt;/em&gt; thing. That way, they become very simple, and they become highly reusable.&lt;/li&gt;&#xA;&lt;li&gt;On the other hand, for realtime systems, by all means avoid ROS. For that there is &lt;a href=&quot;http://www.orocos.org/&quot; rel=&quot;noreferrer&quot;&gt;orocos&lt;/a&gt; and technologies like &lt;a href=&quot;https://en.wikipedia.org/wiki/EtherCAT&quot; rel=&quot;noreferrer&quot;&gt;EtherCAT&lt;/a&gt; and more often than not, ad-hoc solutions.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;As a final word, in practice ROS does fine. Not great, but fine. Very often the system is not critical and the chance of failure is so small that every now and then a restart is not a big deal. This is the &lt;a href=&quot;https://en.wikipedia.org/wiki/Ostrich_algorithm&quot; rel=&quot;noreferrer&quot;&gt;Ostrich algorithm&lt;/a&gt;!&lt;/p&gt;&#xA;" OwnerUserId="158" LastEditorUserId="158" LastEditDate="2018-03-04T17:02:59.557" LastActivityDate="2018-03-04T17:02:59.557" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3114" PostTypeId="2" ParentId="3108" CreationDate="2014-06-16T13:08:17.840" Score="2" Body="&lt;p&gt;I'm assuming you are doing this with a microcontroller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The solution is very simple. Let's say you know how to do them individually. In the most general case, this would be:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;For the tactile sensor:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/* get the value from tactile sensor */&#xA;unsigned int value_from_tactile = read_tactile();&#xA;&#xA;/* convert to range of LED brightness (formula is just random example) */&#xA;unsigned int brightness = 100 - value_from_tactile * 100 / 256;&#xA;&#xA;write_brightness(brightness);&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;For IR remote:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/* get the value from IR sensor */&#xA;unsigned int value_from_ir = read_ir();&#xA;&#xA;/* convert to range of LED brightness (formula is just random example) */&#xA;unsigned int brightness = value_from_ir * 100 / 65536;&#xA;&#xA;write_brightness(brightness);&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;which are generally the same code, even though each is implemented with a different peripheral, e.g. one may use ADC, another I2C etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is now how to merge them. Before getting to code, we should first define the exact behavior of the system. This is really really dependent on the goal of the system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's put this in mathematical terms.  The examples above translate to:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;For the tactile sensor:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$b_1(x) = 100 - x * 100 / 256$&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;For the IR remote:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$b_2(y) = y * 100 / 65536$&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;where $b_N$ is the brightness of the LED, $x$ is the value of the tactile sensor and $y$ is the value of the IR sensor. Obviously, these two functions conflict. They drive the same output with different formulas.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The question is, what would the function $b(x, y)$ look like, where it takes into account both $x$ and $y$? The answer is that you should decide it based on your systems. Some examples would be:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;$b(x, y) = max(b_1(x), b_2(y))$: This means whoever wants the LED to have a higher value wins.&lt;/li&gt;&#xA;&lt;li&gt;$b(x, y) = (b_1(x) + b_2(y)) / 2$: The brightness of the LED is determined equally by both sensors.&lt;/li&gt;&#xA;&lt;li&gt;$b(x, y) = (N * b_1(x) + M * b_2(y)) / (N + M)$: One of the sensors has more control over the brightness of the LED.&lt;/li&gt;&#xA;&lt;li&gt;$b(x, y) = min(100, b_1(x) + b_2(y))$: Both sensors can drive the brightness of the LED to its maximum individually, but they can also work together.&lt;/li&gt;&#xA;&lt;li&gt;$b(x, y) = \left\{&#xA;  \begin{array}{l l}&#xA;    b_1(x) &amp;amp; \quad \text{if $b_2(y) == 0$}\\&#xA;    b_2(y) &amp;amp; \quad \text{o.w.}&#xA;  \end{array} \right.$: Give priority to IR sensor and only control through touch if not being controlled by IR.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;There are many other ways you can think of combining the two. Whichever you choose, the code would be straightforward. We just put the two pieces of code from before together, and then add the chosen merge function:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/* get the value from tactile and IR sensors */&#xA;unsigned int value_from_tactile = read_tactile();&#xA;unsigned int value_from_ir = read_ir();&#xA;&#xA;/* convert to range of LED brightness (formula is just random example) */&#xA;unsigned int brightness_1 = 100 - value_from_tactile * 100 / 256;&#xA;unsigned int brightness_2 = value_from_ir * 100 / 65536;&#xA;&#xA;/* merge */&#xA;unsigned int brightness;&#xA;switch (strategy)&#xA;{&#xA;    case 1:&#xA;    default:&#xA;        brightness = brightness_1 &amp;lt; brightness_2?brightness_2:brightness_1;&#xA;        break;&#xA;    case 2:&#xA;        brightness = (brightness_1 + brightness_2) / 2;&#xA;        break;&#xA;    case 3:&#xA;        brightness = (N * brightness_1 + M * brightness_2) / (N + M);&#xA;        break;&#xA;    case 4:&#xA;        brightness = brightness_1 + brightness_2;&#xA;        if (brightness &amp;gt; 100) brightness = 100;&#xA;        break;&#xA;    case 5:&#xA;        brightness = brightness_2 == 0?brightness_1:brightness_2;&#xA;        break;&#xA;}&#xA;&#xA;write_brightness(brightness);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="158" LastActivityDate="2014-06-16T13:08:17.840" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3116" PostTypeId="1" CreationDate="2014-06-16T15:57:36.473" Score="0" ViewCount="104" Body="&lt;p&gt;I had just tested my first monitor, which results in the following error&#xA;regarding the suggestion in &lt;a href=&quot;https://robotics.stackexchange.com/questions/3049/how-to-define-conditions-for-state-machines-in-roby&quot;&gt;How to define conditions for state-machines in roby?&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;unfortunately i ran into a runtime error, i don't know whether this is a bug or if i misuse the monitor...&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;16:28:27.564 (Roby) = failed emission of the weak_signal event of Pipeline::Detector:0x71f5cf0&#xA;16:28:27.564 (Roby) = Backtrace&#xA;16:28:27.564 (Roby) |&#xA;16:28:27.564 (Roby) | /home/auv/dev/tools/roby/lib/roby/task.rb:663:in `emitting_event'&#xA;16:28:27.564 (Roby) | /home/auv/dev/tools/roby/lib/roby/task_event_generator.rb:46:in `emitting'&#xA;16:28:27.564 (Roby) | /home/auv/dev/tools/roby/lib/roby/event_generator.rb:628:in `emit_without_propagation'&#xA;16:28:27.564 (Roby) | /home/auv/dev/tools/roby/lib/roby/execution_engine.rb:1017:in `block (2 levels) in event_propagation_step'&#xA;16:28:27.564 (Roby) | /home/auv/dev/tools/roby/lib/roby/execution_engine.rb:648:in `propagation_context'&#xA;16:28:27.564 (Roby) | /home/auv/dev/tools/roby/lib/roby/execution_engine.rb:1015:in `block in event_propagation_step'&#xA;16:28:27.564 (Roby) | /home/auv/dev/tools/roby/lib/roby/execution_engine.rb:559:in `block in gather_propagation'&#xA;16:28:27.565 (Roby) | /home/auv/dev/tools/roby/lib/roby/execution_engine.rb:648:in `propagation_context'&#xA;16:28:27.565 (Roby) | /home/auv/dev/tools/roby/lib/roby/execution_engine.rb:559:in `gather_propagation'&#xA;16:28:27.565 (Roby) | /home/auv/dev/tools/roby/lib/roby/execution_engine.rb:1014:in `event_propagation_step'&#xA;16:28:27.565 (Roby) |/home/auv/dev/tools/roby/lib/roby/execution_engine.rb:783:in `block in event_propagation_phase'&#xA;16:28:27.565 (Roby) | /home/auv/dev/tools/roby/lib/roby/execution_engine.rb:761:in `gather_errors'&#xA;16:28:27.565 (Roby) | /home/auv/dev/tools/roby/lib/roby/execution_engine.rb:779:in `event_propagation_phase'&#xA;16:28:27.565 (Roby) | /home/auv/dev/tools/roby/lib/roby/execution_engine.rb:1426:in `process_events'&#xA;16:28:27.565 (Roby) | /home/auv/dev/tools/roby/lib/roby/execution_engine.rb:1940:in `block (2 levels) in event_loop'&#xA;16:28:27.565 (Roby) | /home/auv/dev/tools/roby/lib/roby/support.rb:176:in `synchronize'&#xA;16:28:27.565 (Roby) | /home/auv/dev/tools/roby/lib/roby/execution_engine.rb:1939:in `block in event_loop'&#xA;16:28:27.565 (Roby) | /home/auv/dev/tools/roby/lib/roby/execution_engine.rb:1917:in `loop'&#xA;16:28:27.565 (Roby) /home/auv/dev/tools/roby/lib/roby/execution_engine.rb:1917:in `event_loop'&#xA;16:28:27.565 (Roby) | /home/auv/dev/tools/roby/lib/roby/execution_engine.rb:1797:in `block (3  levels) in run'&#xA;16:28:27.565 (Roby) =&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Don't know whether this is a bug, or if i had miss-used the monitor... &#xA;here is the action_state_machine i'm using:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;183     describe(&quot;Find_pipe_with_localization&quot;).&#xA;184         optional_arg(&quot;check_pipe_angle&quot;,false)&#xA;185     action_state_machine &quot;find_pipe_with_localization&quot; do&#xA;186         find_pipe_back = state target_move_def(... some long stuff here ... )&#xA;187         pipe_detector = state pipeline_detector_def&#xA;188         pipe_detector.depends_on find_pipe_back, :role =&amp;gt; &quot;detector&quot;&#xA;189         start(pipe_detector)&#xA;190&#xA;191         pipe_detector.monitor(&#xA;192             'angle_checker', #the Name&#xA;193             pipe_detector.find_port('pipeline'), #the port for the reader&#xA;194             :check_pipe_angle =&amp;gt; check_pipe_angle). #arguments&#xA;195             trigger_on do |pipeline|&#xA;196                 angle_in_range = true&#xA;197                 if check_pipe_angle&#xA;198                     angle_in_range = pipeline.angle &amp;lt; 0.1 &amp;amp;&amp;amp; pipeline.angle &amp;gt; -0.1&#xA;199                 end&#xA;200                 state_valid = pipeline.inspection_state ==  :ALIGN_AUV || pipeline.inspection_state == :FOLLOW_PIPE&#xA;201                 state_valid &amp;amp;&amp;amp; angle_in_range #last condition&#xA;202             end. emit pipe_detector.success_event&#xA;# for non-monitor use, this works if the above is commented out&#xA;203 #        forward pipe_detector.align_auv_event, success_event&#xA;204 #        forward pipe_detector.follow_pipe_event, success_event&#xA;205&#xA;206         forward pipe_detector.success_event, success_event&#xA;207         forward pipe_detector,find_pipe_back.success_event,failed_event #timeout here on moving&#xA;208     end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="4508" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2019-12-25T18:01:05.127" Title="Problems using syskit monitors -&gt; failed emission of the foo event of" Tags="&lt;rock&gt;&lt;syskit&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="3117" PostTypeId="1" AcceptedAnswerId="3119" CreationDate="2014-06-17T15:18:32.427" Score="1" ViewCount="59" Body="&lt;p&gt;I'm looking for a device that can push out independent pinpoints from something similar to a Pin Point Impression Toy. I'm looking to create a 3D image from for example my computer. Does anybody know the name of such a device or can point me in the right direction of making one? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've been looking now for a while, but I'm having some slight problems finding a good way to describe it as a search term.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm sorry if this is the wrong forum.&lt;/p&gt;&#xA;" OwnerUserId="5589" LastActivityDate="2015-01-12T20:41:30.097" Title="Device that can push out independent pin points?" Tags="&lt;3d-printing&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3118" PostTypeId="1" AcceptedAnswerId="3129" CreationDate="2014-06-17T16:48:08.560" Score="3" ViewCount="144" Body="&lt;p&gt;Let's say I have a hypothetical sensor that provides, for example, velocity estimates, and I affix that sensor at some non-zero rotational offset from the robot's base. I also have an EKF that is estimating the robot's velocity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Normally, the innovation calculation for an EKF looks like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ y_k = z_k - h(x_k) $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this case, $h$ would just be the rotation matrix of the rotational offset. What are the ramifications if instead, I pre-process the sensor measurement by rotating $z_k$ by the inverse rotation, which will put its coordinates in the frame of the robot? Can I then safely just make $h$ the identity matrix $I$?&lt;/p&gt;&#xA;" OwnerUserId="2176" LastActivityDate="2014-06-18T18:54:57.760" Title="Observation Model Jacobian for Fixed Transforms" Tags="&lt;kalman-filter&gt;&lt;ekf&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3119" PostTypeId="2" ParentId="3117" CreationDate="2014-06-17T17:45:27.337" Score="1" Body="&lt;p&gt;I don't know of any devices that exist for this purpose (besides devices that are not for sale, such as &lt;a href=&quot;http://tangible.media.mit.edu/project/transform/&quot; rel=&quot;nofollow&quot;&gt;the MIT Media Lab's &quot;Transform&quot; table&lt;/a&gt;), but I'd imagine that the 2 most promising approaches for a homemade solution would be:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Use a robot arm or X/Y table to move to each pin location and push it the desired distance -- one pin at a time.  Reset the pins by just tilting the pins' frame back.&lt;/li&gt;&#xA;&lt;li&gt;Attach a &lt;a href=&quot;http://en.wikipedia.org/wiki/Bowden_cable&quot; rel=&quot;nofollow&quot;&gt;bowden cable&lt;/a&gt; to each pin and use a servo (or linear actuator) at the other end to control the position.  This has the advantage of setting all the pins in parallel.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2015-01-12T20:41:30.097" LastActivityDate="2015-01-12T20:41:30.097" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3120" PostTypeId="2" ParentId="3098" CreationDate="2014-06-17T18:35:10.287" Score="1" Body="&lt;p&gt;Delayed measurements are a very common occurrence in &lt;a href=&quot;http://en.wikipedia.org/wiki/Long_base_line_sonar&quot; rel=&quot;nofollow&quot;&gt;LBL sonar positioning&lt;/a&gt;, commonly used by AUVs.  Modified Kalman filters are a common solution.  I searched for &quot;LBL&quot;, &quot;delay&quot;, and &quot;EKF&quot;.  Here are a few reasonable papers:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://ieeexplore.ieee.org/xpl/login.jsp?tp=&amp;amp;arnumber=5779652&amp;amp;url=http%3A%2F%2Fieeexplore.ieee.org%2Fxpls%2Fabs_all.jsp%3Farnumber%3D5779652&quot; rel=&quot;nofollow&quot;&gt;Delayed-state sigma point Kalman filters for underwater navigation&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://dspace.mit.edu/bitstream/handle/1721.1/70429/785210078.pdf&quot; rel=&quot;nofollow&quot;&gt;Contributions to Automated Realtime Underwater Navigation&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.whoi.edu/cms/files/croman/2005/11/main_thesis_6186.pdf&quot; rel=&quot;nofollow&quot;&gt;Self Consistent Bathymetric Mapping from Robotic Vehicles&#xA;in the Deep Ocean&#xA;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;The discussion of Navigation Filters (section 17) in &lt;a href=&quot;http://www.robots.ox.ac.uk/~pnewman/TheMOOS/MOOSII.pdf&quot; rel=&quot;nofollow&quot;&gt;the MOOS manual&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-06-17T18:35:10.287" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3121" PostTypeId="1" AcceptedAnswerId="3143" CreationDate="2014-06-17T22:12:32.113" Score="1" ViewCount="1310" Body="&lt;h2&gt;Where can I buy multi-directional omni wheels?&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I'm specifically looking at something which can support in &lt;strong&gt;excess of 100kg/wheel, so around 400kg in total&lt;/strong&gt;. Also, a possible mission profile would include a 300 meter excursion outdoors on asphalt path, so they should be a little durable. The only ones I can find online are small ones for experimenting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://4.bp.blogspot.com/-tB_edZOgyPc/TvCsA0_ebAI/AAAAAAAA5pg/cV4ggfOYUWs/s1600/Omniwheel-grabcad.JPG&quot; alt=&quot;pic&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="3932" LastEditorUserId="-1" LastEditDate="2017-03-10T09:42:49.207" LastActivityDate="2014-06-22T12:41:53.080" Title="Where can I buy heavy-duty Omni Wheels?" Tags="&lt;wheel&gt;" AnswerCount="2" CommentCount="1" ClosedDate="2014-07-03T13:29:11.390" ContentLicense="CC BY-SA 3.0" />
  <row Id="3122" PostTypeId="2" ParentId="2723" CreationDate="2014-06-18T01:02:50.720" Score="1" Body="&lt;p&gt;There are a bunch of mechanical considerations but as far as the screw/motor combination is concerned you want to look at the top speed and torque requirements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your torque requirements are a function of the reflected load seen at the motor during acceleration (including things like nut friction).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've worked on screw driven systems that went up to ~x3 your speed requirements and I've seen others that are even faster.  So there's no feasibility issue from a load/speed perspective.  There are practical questions in terms of what type of screw to use, cost, accuracy, whether the motor is directly coupled to the screw or not, etc.  When very high loads are involved screws are often a very good linear motion solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there some specific NEMA motor size you have in mind?  There's a huge range of torque available from &quot;NEMA&quot; stepper motors.  How accurate do you need your linear motion to be?  What sort of acceleration did you have in mind?  What's your budget?  What's the range of motion?&lt;/p&gt;&#xA;" OwnerUserId="1584" LastActivityDate="2014-06-18T01:02:50.720" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3123" PostTypeId="2" ParentId="3121" CreationDate="2014-06-18T06:06:44.570" Score="0" Body="&lt;p&gt;Have seen in-action omni wheel industrial fork lift trucks like these image search.&lt;br&gt;&#xA;&lt;a href=&quot;https://www.google.com/search?q=omni+wheels+folk+truck&amp;amp;safe=off&amp;amp;tbm=isch&amp;amp;tbo=u&amp;amp;source=univ&amp;amp;sa=X&amp;amp;ei=aiqhU8DwDdWhugTy_oCIBA&amp;amp;ved=0CCoQsAQ&amp;amp;biw=1654&amp;amp;bih=813&quot; rel=&quot;nofollow&quot;&gt;https://www.google.com/search?q=omni+wheels+folk+truck&amp;amp;safe=off&amp;amp;tbm=isch&amp;amp;tbo=u&amp;amp;source=univ&amp;amp;sa=X&amp;amp;ei=aiqhU8DwDdWhugTy_oCIBA&amp;amp;ved=0CCoQsAQ&amp;amp;biw=1654&amp;amp;bih=813&lt;/a&gt;  Apparently, they are production items, although may not as widely used as the 'normal' wheel version&lt;/p&gt;&#xA;" OwnerUserId="5582" LastActivityDate="2014-06-18T06:06:44.570" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3124" PostTypeId="1" AcceptedAnswerId="3149" CreationDate="2014-06-18T08:54:44.627" Score="2" ViewCount="294" Body="&lt;p&gt;It is &quot;good enough&quot; for PID output directly controls, without further modelling, the PWM duty cycle?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Logic behind the question is, &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case of pure resistance heater, PWM duty cycle percentage directly relates to power (on off time ratio). So, direct control is appropriate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, motor has two additional effects,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;a) with considerable &lt;strong&gt;inductance&lt;/strong&gt;, initial current is smaller and ramping up over time&lt;/p&gt;&#xA;&#xA;&lt;p&gt;b) as RPM gradually ramping up, after time constant of mechanical inertia etc, increasing &lt;strong&gt;back EMF&lt;/strong&gt; will reduce current&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Will it be wise to ignore the above two effects and still expect a reasonably good outcome? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Application is 6 volts, 2 watt DC brushed motor, gear 1:50, 10000 RPM no load, PWM frequency 490Hz, driving DIY 1kg robot.&lt;/p&gt;&#xA;" OwnerUserId="5582" LastActivityDate="2014-06-23T17:23:26.487" Title="PWM PID control for small 2 watts brushed DC motor" Tags="&lt;motor&gt;&lt;pid&gt;&lt;pwm&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3125" PostTypeId="1" CreationDate="2014-06-18T09:26:01.260" Score="1" ViewCount="84" Body="&lt;p&gt;I’m a graduate student, and we're doing a project that is going to introduce a robot arm into manufacturing. Our goal is to build up an autonomous object classification system. We already have the software and hardware required for the task, but we have no idea if there is any existing manufacturing scenario where we can apply the system and really improve the efficiency or save human resources.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is some info about the robot arm:&#xA;For the hardware part, the robot arm is with 7 dof and 5kg payload (the weight of the end effector is not counted). Besides, the end effector is a 1.5kg 3-fingered robot hand with 2kg payload. The workspace is approximately a sphere with 0.9m diameter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the software part, we have programming by touch, by which human can drag the robot and record the desired pose. Besides, we have PCL object recognition that can recognize the object and its pose in the scene. Lastly, we have online trajectory generator and dynamic obstacle avoidance that can improve the safety when the robot corporates with human.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since we know few about manufacturing, we hope that someone can give us a hint about the scenario and an actual application where we can apply this system. &lt;/p&gt;&#xA;" OwnerUserId="5594" LastEditorUserId="350" LastEditDate="2014-06-23T17:08:40.967" LastActivityDate="2014-09-24T15:00:08.910" Title="What is the actual application for manufactuing, with robot arm autonomous object classification system" Tags="&lt;robotic-arm&gt;&lt;manufacturing&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3127" PostTypeId="2" ParentId="998" CreationDate="2014-06-18T10:09:17.003" Score="0" Body="&lt;p&gt;Two issues on hardware,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;a)  Chip takes time to turn on and off. Heating up more while in-between on and off. So, no point to use too high frequency. Generally, 10, 15 or 20KHz max, out of human ear range is enough. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;See details (explain frequency effects with examples of 20 chips from many companies) (especially those items state ultrasonic frequency 20KHz) in&lt;br&gt;&#xA;&lt;a href=&quot;http://www.pololu.com/category/11/brushed-dc-motor-drivers&quot; rel=&quot;nofollow&quot;&gt;http://www.pololu.com/category/11/brushed-dc-motor-drivers&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;b)  Motor coil has inductance. Too high frequency reduce current flow, low torque, low RPM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apparently, 0.5A per motor seems in normal range. Likely, at 6, 7.2 or 12 volts, a few watts to 10 watts per motor for fast robot motion. &lt;/p&gt;&#xA;" OwnerUserId="5582" LastEditorUserId="5582" LastEditDate="2014-06-18T10:21:01.510" LastActivityDate="2014-06-18T10:21:01.510" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3128" PostTypeId="2" ParentId="780" CreationDate="2014-06-18T15:19:34.957" Score="0" Body="&lt;p&gt;This situation may change now that Aldebaran has announced the &lt;a href=&quot;http://www.aldebaran.com/en/a-robots/who-is-pepper&quot; rel=&quot;nofollow&quot;&gt;Pepper robot&lt;/a&gt; for approx US$2000 (plus an as yet undisclosed subscription).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also this year the NAO robot was reduced in price and is now available for approx US$7000&lt;/p&gt;&#xA;" OwnerUserId="5583" LastActivityDate="2014-06-18T15:19:34.957" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3129" PostTypeId="2" ParentId="3118" CreationDate="2014-06-18T18:48:14.757" Score="1" Body="&lt;p&gt;The KF (EKF), even though it is closed form, does not require you to input directly what your sensors sense. Preprocessing is OK if you are doing it perfectly and not losing information. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider GPS measurements, which may occur in a coordinate frame which is &quot;rotated&quot; with respect to the robot's base or the robot's map coordinate frame. The &quot;rotation&quot; (pre-processing) and scaling (to find x-y from long-lat), are typically not included in the Jacobian. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your example, if &quot;rotating&quot; the velocity sensor meant that it detected: $v+b$ for velcoity vector $v$ and some fixed bias $b$, then yes, simply removing the bias before incorporating the data is fine. Your innovation has the same value, since $h(x)$ is already the operation you described (applying the rotation).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But if the velocity sensor now measured $v+f(x)$, as in it measured greater velocity if the robot was turning right than left (as is the case of optical flow calculations from a camera facing a little to the right instead of directly forward), then you'd have to be much more careful. (Update jacobians or have near-perfect pre-processing).&lt;/p&gt;&#xA;" OwnerUserId="163" LastEditorUserId="163" LastEditDate="2014-06-18T18:54:57.760" LastActivityDate="2014-06-18T18:54:57.760" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3132" PostTypeId="1" CreationDate="2014-06-19T00:51:40.127" Score="1" ViewCount="159" Body="&lt;p&gt;I'm getting this warning from Matlab about Kalman Gain. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Warning: Matrix is close to singular or badly scaled.&#xA;         Results may be inaccurate. RCOND = 9.996841e-19. &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The problem is coming from high variance of the measurement model. My question is here Does EKF work with high noise in sensor?&lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="350" LastEditDate="2014-06-23T17:10:49.523" LastActivityDate="2014-06-23T17:10:49.523" Title="EKF localization is approaching singularity. Are my sensors too noisy?" Tags="&lt;localization&gt;&lt;ekf&gt;" AnswerCount="0" CommentCount="1" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3133" PostTypeId="1" CreationDate="2014-06-19T15:42:28.933" Score="1" ViewCount="275" Body="&lt;p&gt;Following my &lt;a href=&quot;https://robotics.stackexchange.com/questions/2649/kinect-point-cloud-pcduino-will-it-work&quot;&gt;previous question about pcduino+kinect&lt;/a&gt;, decided to go ahead and buy the pcduino I wish to run my robot with (kinect+pcduino+shields). However I'm having trouble getting started: I tried installing OpenNI, NITE and SensorKinect however OpenNI installation fails (I haven't even gotten to installing NITE and SensorKinect yet so no idea if that would work). I tried a bunch of pointers (&lt;a href=&quot;http://daybydaylinux.blogspot.com/2012/12/how-to-compile-openni-and-sensorkinect.html&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;http://www.andol.info/hci/1924.htm&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;). For example the error I get if I follow link 1 is:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;ubuntu@ubuntu:~/kinect/OpenNI/Platform/Linux/CreateRedist \$ sudo ./RedistMaker.Arm &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Target: Linux-Arm&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Version: 1.5.7.10&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Num of compile jobs: 0&lt;/p&gt;&#xA;  &#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;Building OpenNI...&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;  &#xA;  &lt;p&gt;Common/CommonDefs.mak:36: &lt;em&gt;*&lt;/em&gt; Cross-Compilation error. Can't find ARM-J1_CXX and &gt;ARM-J1_STAGING.  Stop.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;failed to execute: make PLATFORM=Arm-j1 -C &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;/home/ubuntu/kinect/OpenNI/Platform/Linux/CreateRedist/../Build clean  &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;/home/ubuntu/kinect/OpenNI/Platform/Linux/CreateRedist/Output/BuildOpenNI_clean.txt&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Cleaning Failed!&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;ubuntu@ubuntu:~/kinect/OpenNI/Platform/Linux/CreateRedist$ &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;After someone suggested it, I tried removing the -mfloat-abi=softfp option but that didn't help. There seems to be some compiling/linking issue due to float types which I'm not able to figure out. In link 1 the author mentions to remove the 'calc_jobs_number()' but that does not work and I get similar error. Also similar problem exists for link 2 above&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I follow link 2, 'make' won't work and will give the following error:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;/usr/bin/ld: error: ../../Bin/Arm-Release/libOpenNI.so uses VFP register &gt;arguments, ./Arm-Release/tinyxmlparser.o does not&#xA;  /usr/bin/ld: failed to merge target specific data of file ./Arm-Release/tinyxmlparser.o&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Another approach would be to use simpleCV instead of OpenNI on pcduino as someone else claims it has worked before. However I've never used simpleCV with Kinect before so unless it's not radically different I prefer using OpenNI.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any suggestions as to why I might be getting these errors are appreciated. Any other pointers for solving the problem of installing OpenNI on Pcduino would be welcome.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please let me know if you need more details about anything else.&#xA;Thanks in advance&lt;/p&gt;&#xA;" OwnerUserId="4056" LastActivityDate="2014-09-11T14:38:31.530" Title="Installing OpenNI on Pcduino" Tags="&lt;kinect&gt;&lt;robotic-arm&gt;&lt;openni&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3134" PostTypeId="1" CreationDate="2014-06-19T23:33:50.983" Score="1" ViewCount="167" Body="&lt;p&gt;I installed SimpleCV and libfreenect on pcduino (running lbuntu). I separately verified that simpleCV reads my USB webcam well and libfreenect (glview tutorial) gives me depth and rgb correctly, albeit and a pathetic framerate. What I want is to call cam = Kinect() in simplecv but when I do that, I get the warning &quot;You dont seem to have the freenect library installed. This will make it hard to use a kinect&quot;. Although this is a warning I get an error if I then do cam.getDepth(), which says &quot;NameError: global name 'freenect' is not defined&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How do I let simplecv know that I've installed libfreenect?&lt;/p&gt;&#xA;" OwnerUserId="4056" LastActivityDate="2014-06-19T23:33:50.983" Title="libfreenect simplecv integration?" Tags="&lt;kinect&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3135" PostTypeId="2" ParentId="1393" CreationDate="2014-06-20T01:04:07.247" Score="1" Body="&lt;p&gt;A more recent sensor type that can be used are MEMS based temperature arrays by Omron (D6T range) or Excelitas (DigiPile). These, as opposed to PIR elements, measure absolute temperatures and thereby allow to distinguish between background and foreground temperatures and detect movement and static presences of temperature sources.&lt;/p&gt;&#xA;" OwnerUserId="5600" LastActivityDate="2014-06-20T01:04:07.247" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="3137" PostTypeId="1" AcceptedAnswerId="4483" CreationDate="2014-06-20T13:20:14.710" Score="9" ViewCount="8843" Body="&lt;p&gt;I'm making a quadcopter. I have set up a PID loop to stabilize it to a given Euler angle (pitch and roll). The problem arises when the roll approaches 90 degrees (45 degrees and up). The values don't make sense anymore, as it approaches the gimbal lock. I intend to make it do complex maneuvers like looping etc., which exceeds the 45 degree roll limit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I use quaternions to overcome this problem? (I get quaternions from the MPU-9150.) I have read many articles on the matter of quaternions, but they all talk about rotations in 3D software, and tweening between two rotation points. This makes little sense as I do not know imaginary numbers and matrices.&lt;/p&gt;&#xA;" OwnerUserId="4012" LastEditorUserId="4012" LastEditDate="2014-06-20T13:25:37.150" LastActivityDate="2016-02-20T20:08:03.990" Title="How to use quaternions to feed a PID quadcopter stabilization loop?" Tags="&lt;quadcopter&gt;&lt;pid&gt;&lt;stability&gt;" AnswerCount="4" CommentCount="3" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="3138" PostTypeId="2" ParentId="3137" CreationDate="2014-06-20T18:44:43.613" Score="3" Body="&lt;p&gt;First, I think you need to go back and look at your code. Gimbal lock is only a problem when you get very near (within a couple degrees) of 90. If you are seeing strange behavior at 45 degrees something else is the cause. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for your question, quaternions are usually not used directly in basic PID control since they have complicated behavior resulting in non-intuitive results. Usually they are either converted to Euler angles and then used in the normal PID controller, or special nonlinear controllers are designed to use them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that for your looping maneuvers, PID is generally not a very good controller: the gains that work well near hover no longer work well at large angles. Usually, when someone wants to do a loop they go &quot;open loop&quot;, i.e. they start the maneuver under control and then once they get past a certain angle just just apply a fixed series of commands until they have completed the loop. Figuring out what fixed series of commands to use is the tricky part and often uses reinforcement learning (kind of like a formal way of doing trial and error).&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2014-06-20T18:44:43.613" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="3139" PostTypeId="1" CreationDate="2014-06-21T05:49:04.243" Score="7" ViewCount="2875" Body="&lt;p&gt;There are two different conventions that can determine &lt;strong&gt;DH parameters&lt;/strong&gt;.   What is the difference between &lt;strong&gt;Craig's&lt;/strong&gt; [1, Sec 3.4] convention and the &lt;strong&gt;Spong&lt;/strong&gt; [2, Sec. 3.2] convention?&#xA;I know that both methods must have the same response.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[1]: Craig, John J. &lt;em&gt;Introduction to robotics: mechanics and control&lt;/em&gt;. Addison-Wesley, 1989.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[2]: Spong, Mark W., Seth Hutchinson, and Mathukumalli Vidyasagar. &lt;em&gt;Robot modeling and control&lt;/em&gt;. Wiley, 2006.&lt;/p&gt;&#xA;" OwnerUserId="5607" LastEditorUserId="110" LastEditDate="2015-02-15T17:54:53.863" LastActivityDate="2019-10-15T09:57:52.520" Title="Denavit-Hartenberg convention" Tags="&lt;forward-kinematics&gt;&lt;dh-parameters&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3141" PostTypeId="2" ParentId="3137" CreationDate="2014-06-21T06:45:59.757" Score="2" Body="&lt;p&gt;This MOOC free-of-charge course, &lt;a href=&quot;https://courses.edx.org/courses/TUMx/AUTONAVx/2T2014/info&quot; rel=&quot;nofollow&quot;&gt;Welcome to TUMx's AUTONAVx!&#xA;Autonomous Navigation for Flying Robots&lt;/a&gt;, may help. It covers:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Learning theory&lt;/li&gt;&#xA;&lt;li&gt;Exercise Quadcoptor programming that run on both stimulator and actual hardware&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="5582" LastEditorUserId="9176" LastEditDate="2016-02-20T20:07:53.410" LastActivityDate="2016-02-20T20:07:53.410" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="3143" PostTypeId="2" ParentId="3121" CreationDate="2014-06-22T12:41:53.080" Score="1" Body="&lt;p&gt;Try andymark, their 10 inch mecanums (or smaller) may suit you well.&lt;/p&gt;&#xA;" OwnerUserId="4238" LastActivityDate="2014-06-22T12:41:53.080" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3144" PostTypeId="1" AcceptedAnswerId="4757" CreationDate="2014-06-23T01:16:02.063" Score="4" ViewCount="5297" Body="&lt;p&gt;Let me start off by saying that I am currently going to university majoring in computer engineering.  I love software/hardware and I especially love robotics and I want to apply my knowledge of software/hardware in robots.  I have never taken a formal class on robotics, so I don't really know where to start or how to approach the mathematics that robots entail.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Currently, I am interested in calculating the inverse kinematics of a delta robot. To clarify a bit more, I am trying to determine the required joint angles that will position the end-effector of the delta robot to a specific location given some x,y,z coordinate.  The delta robot that I will be basing my design off of is shown in the image below.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/mr8hD.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based off of some research that I have been doing for the past few days, I found that the sort of mathematics involved are usually like those of Denavit-Hartenberg parameters, Jacobian matrices, etc.  I am going to be honest, I have never encountered Denavit-Hartenberg parameters or Jacobian matrices and I don't even know how to apply these to solve the kinematics equations and let alone find the kinematics equations.  Most of the articles that I have read, mainly deal with serial manipulator robots and the mathematics in finding the kinematics equations of those serial manipulators.  I couldn't really find any good material or material that was easy to understand given my current situation on parallel manipulators.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wanted to ask my question here in the hopes that someone in the community could direct me to where I can start on learning more on obtaining the inverse kinematics equations of parallel manipulators and solving those equations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help will be much appreciated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you.&lt;/p&gt;&#xA;" OwnerUserId="4210" LastActivityDate="2017-11-10T09:09:40.410" Title="Inverse Kinematics of Parallel Manipulator (Delta Robot)" Tags="&lt;kinematics&gt;&lt;inverse-kinematics&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="3145" PostTypeId="1" CreationDate="2014-06-23T07:51:51.357" Score="2" ViewCount="128" Body="&lt;p&gt;I will have a belt-driven linear actuator, consisting a gantry-plate riding on two rails. I'm thinking of using a brushed dc motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The gantry will move from home position to the right (outbound) at 1m/s. The mass of the gantry will vary from 3Kg to 6Kg. On the return home (inbound) one must avoid spillage of contents which may require soft start/stop or simply a slow return to home.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the outbound case, what I'd like to know is how,in a practical sense, do you brake the mass and bring the gantry to a stop, ensuring that the gantry plate always comes to rest to within 0.5mm of an end plate?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm clearer how I can ensure the gantry stops to within 0.5mm of the home position, because I can use a PWM ramp to slowly decelerate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm wanting to avoid using an MCU. Just want to use an IC with switches and potentiometers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can also use math if you want to explain.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, one seeks to begin to arrest the mass as close to the end stop in the outbound case as one can without problems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerDisplayName="user5612" LastEditorDisplayName="user5612" LastEditDate="2014-06-23T12:02:31.933" LastActivityDate="2014-06-24T19:16:09.320" Title="How to brake a brushed dc motor, belt-driven linear actuator to within 0.5mm of an end stop" Tags="&lt;motor&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3146" PostTypeId="2" ParentId="3116" CreationDate="2014-06-23T11:45:40.353" Score="1" Body="&lt;p&gt;Apart from the error message that is very unspecific (look at my comment to the question), the event that is causing the fault (weak_signal) is &lt;em&gt;not&lt;/em&gt; part of the state machine. I guess that there is something else going on here that has no relationship with the monitor at all.&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2014-06-23T11:45:40.353" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3147" PostTypeId="2" ParentId="3101" CreationDate="2014-06-23T14:40:17.733" Score="3" Body="&lt;p&gt;There are several traps you might have stepped into, but it is difficult to tell without more information. The first issues that came to my mind:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The equations you wrote down are for &lt;em&gt;sampling&lt;/em&gt; from the velocity motion model. But then you write about the Kalman Gain approaching singularity, which only makes sense of you apply a Gaussian filter (EKF or UKF). There is no sampling in EKF or UKF.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The model above is not defined for $\omega = 0$. You need to handle this special case by computing the limit for $\omega \to 0$. Hint: &lt;a href=&quot;https://en.wikipedia.org/wiki/L%27H%C3%B4pital%27s_rule&quot; rel=&quot;nofollow&quot;&gt;L'Hôpital's rule&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The model assumes perfect accuracy (no noise) if $\omega = v = 0$. This is a rather strong assumption and may or may not lead to problems.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="4531" LastActivityDate="2014-06-23T14:40:17.733" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3148" PostTypeId="2" ParentId="3145" CreationDate="2014-06-23T17:01:44.510" Score="1" Body="&lt;p&gt;Since you are trying to affect the acceleration as well as the endpoints, you should consider using a PID controller.  That will provide the &lt;em&gt;effect&lt;/em&gt; of braking, but it will do so as part of the larger goal of coming to a complete stop at a desired setpoint. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depending on how you tune it, you can have it start and stop very gently (vs very responsively) according to your own needs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are several &lt;a href=&quot;http://www.ecircuitcenter.com/Circuits/op_pid/op_pid.htm&quot; rel=&quot;nofollow&quot;&gt;analog PID circuits, (e.g. this one)&lt;/a&gt; if you don't want a microcontroller-based solution.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2014-06-24T19:16:09.320" LastActivityDate="2014-06-24T19:16:09.320" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3149" PostTypeId="2" ParentId="3124" CreationDate="2014-06-23T17:23:26.487" Score="0" Body="&lt;p&gt;The factors that you mention will definitely have an effect on the accuracy of your PID.  Whether that inaccuracy is enough to negatively affect your outcome is something that only you can determine -- preferably after doing some tests.  In most cases, these inaccuracies are safe to ignore.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general, if you have some nonlinear effect in your actuator, you would handle that separately from your PID.  For your case, you would need to write some algorithm that converts the desired value (PID output) to the appropriate PWM signal, based on the current state of the motor.  Even if you can't measure the properties of the motor directly to do this, a simple mathematical model of the motor might be enough.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before you start in this direction, make sure that you've actually found a problem behavior that is being caused by naive conversion of PID level to PWM level (i.e., you know that your PID is tuned properly but you still see a problem).  Otherwise, you will have no way to judge whether your algorithm is helping or hurting your results.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-06-23T17:23:26.487" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3150" PostTypeId="1" CreationDate="2014-06-24T07:26:14.063" Score="1" ViewCount="56" Body="&lt;p&gt;I am using a ruby script to connent the Multi Layer Surface Map of the velodyne_slam component to the vizkit3D visualization.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The visualizazion plugin is loaded like this:&#xA;envireViz = Vizkit.default_loader.EnvireVisualization&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is possible to get the MLSVisualisation object from the EnvireVisualization in order to set visualization properties (like colors etc.) from the ruby script?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Rubys introspection abilities didn't help a lot here...&lt;/p&gt;&#xA;" OwnerUserId="5617" LastActivityDate="2014-08-23T11:20:24.400" Title="Rock envire - vizkit3d : Change environment visualization (envire lib) from ruby script" Tags="&lt;rock&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3151" PostTypeId="2" ParentId="3150" CreationDate="2014-06-24T09:49:27.270" Score="1" Body="&lt;p&gt;That is currently not implemented. The Envire visualization plugins are all handled and updated by one Envire Vizkit plugin.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But since the Envire visualization plugins became QObjects too it would be possible to add a qt slot method to get an instance of the envire plugins, where the properties can be accessed.&lt;/p&gt;&#xA;" OwnerUserId="5619" LastActivityDate="2014-06-24T09:49:27.270" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3152" PostTypeId="1" AcceptedAnswerId="3153" CreationDate="2014-06-24T11:30:09.800" Score="0" ViewCount="26" Body="&lt;p&gt;I need to search in the git history of a couple of packages to &#xA;get back to a working state for a demo. I am searching by checking out &#xA;commits manually until I found the commits of all effected packages that &#xA;work together.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By checking out commits manually, I will get into the detached HEAD state:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$ git checkout 995e018&#xA;-&gt; You are in 'detached HEAD' state. [...]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To save the current state of all packages, a snapshot is created:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$ autoproj snapshot demo_working&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now the demo_working/overrides.yml will pin the commit where the HEAD is &#xA;pointing to (e.g. 5e2e3a259) instead of the commit that I chose manually &#xA;for the package (995e018).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this the desired behaviour? In my opinion a snapshot should store the &#xA;current state of all my git repositories meaning that I can also select &#xA;commits manually.&lt;/p&gt;&#xA;" OwnerUserId="5561" LastActivityDate="2014-06-24T11:52:35.600" Title="autoproj snapshot with git detached HEAD" Tags="&lt;rock&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3153" PostTypeId="2" ParentId="3152" CreationDate="2014-06-24T11:50:47.227" Score="1" Body="&lt;p&gt;Working with git HEADs is just a bad idea, so yes, this behaviour is expected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you want to do is reset your current branch to the desired commit, i.e.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;git reset --hard 995e018&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;which will be picked up by autoproj&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2014-06-24T11:50:47.227" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3155" PostTypeId="1" CreationDate="2014-06-24T13:37:44.930" Score="6" ViewCount="256" Body="&lt;p&gt;I need to get position $x$ from integrating velocity $v$. One could use 1st order Euler integration as&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$x_{t+1} = x_t + \delta * v_t.$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, doing so leads to errors proportional to sampling time $\delta$. Do you know any more accurate solution please?&lt;/p&gt;&#xA;" OwnerUserId="5620" LastEditorUserId="5620" LastEditDate="2014-06-24T13:43:55.170" LastActivityDate="2014-07-24T15:49:32.863" Title="One of the best ways to numerically integrate the velocity?" Tags="&lt;kinematics&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3156" PostTypeId="2" ParentId="3155" CreationDate="2014-06-24T14:30:37.943" Score="2" Body="&lt;p&gt;One of the most common techniques for integrating ODEs is to using &lt;a href=&quot;http://en.wikipedia.org/wiki/Runge%E2%80%93Kutta_methods&quot; rel=&quot;nofollow&quot;&gt;Runge-Kutta methods&lt;/a&gt; (of which Euler integration is just a special case). However, these only improve errors due to discretization of time. If you are concerned about errors caused by noise in $\delta$ then I'm not aware of any better methods. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Add Example&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For RK4 and using the dynamics $\dot{x}(t) = v(t)$, where the velocity is not dependent on the  state, you have&#xA;$$&#xA;\begin{align}&#xA;k_1 &amp;amp;= v(t)&#xA;\\&#xA;k_2 &amp;amp;= v \left ( t+\frac{\delta}{2} \right )&#xA;\\&#xA;k_3 &amp;amp;= v \left ( t+\frac{\delta}{2} \right )&#xA;\\&#xA;k_4 &amp;amp;= v \left ( t+\delta \right )&#xA;\\&#xA;x(t+\delta) &amp;amp;= x(t) + \frac{h}{6} (k_1 + 2 k_2 + 2 k_3 + k_4)&#xA;\end{align}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have access to $v(t+\frac{\delta}{2})$ this will provide an improvement over Euler integration. If not, you can probably still get some improvement by assuming $v(t+\frac{\delta}{2}) = \frac{v(t) + v(t+\delta)}{2}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Other Option - Kalman Filter&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For such a simple system, another option would be to use a &lt;a href=&quot;http://en.wikipedia.org/wiki/Kalman_filter&quot; rel=&quot;nofollow&quot;&gt;Kalman filter&lt;/a&gt;. In the case where you only have access to $v(t)$ and $v(t+\delta)$ (no intermediate information) this might work better.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastEditorUserId="2669" LastEditDate="2014-06-24T15:28:42.943" LastActivityDate="2014-06-24T15:28:42.943" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="3157" PostTypeId="2" ParentId="3145" CreationDate="2014-06-24T17:56:10.617" Score="1" Body="&lt;p&gt;We have used PID for a similar application involving hydraulic cylinder control. We used an SSI linear position sensor and we could get WAAAAAAYYY more accurate than .5mm&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We were moving at 24&quot;/sec over 6 ft of travel&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And the braking effect was great.&lt;/p&gt;&#xA;" OwnerUserId="5622" LastActivityDate="2014-06-24T17:56:10.617" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3159" PostTypeId="1" CreationDate="2014-06-24T20:49:45.693" Score="1" ViewCount="480" Body="&lt;p&gt;I just got an iRobot iCreate base and I've followed the instructions given in  ROS Tutorials to setup the turtlebot pc and the workstation. I could successfully ssh into username@turtlebot through workstation so I'm assuming that is all good. I had an issue with create not able to detect the usb cable which I solved using the detailed answer given for question &lt;a href=&quot;http://answers.ros.org/question/46790/failed-to-open-port-devttyusb0/&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;. This solved the problem of &quot;Failed to open port /dev/ttyUSB0&quot; that I was facing before. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now the next step would be to ssh into the turtlebot (which I've done) and use &lt;code&gt;roslaunch turtlebot_bringup minimal.launch&lt;/code&gt; to do whatever the command does (I've no idea what to expect upon launch). But apparently something's amiss since the create base chirps and then powers down after showing &lt;code&gt;[kinect_breaker_enabler-5] process has finished cleanly&lt;/code&gt; as output and the log file location (see output below), but I dont see a prompt. I checked the battery and that's charged so that's not the problem. &lt;strong&gt;Following&lt;/strong&gt; is the terminal output.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;anshul@AnshulsPC:~$ roslaunch turtlebot_bringup minimal.launch&#xA;... logging to /home/anshul/.ros/log/9d936a6a-fbdc-11e3-ba6b-00265e5f3bb9/roslaunch-AnshulsPC-5038.log&#xA;Checking log directory for disk usage. This may take awhile.&#xA;Press Ctrl-C to interrupt&#xA;Done checking log file disk usage. Usage is &amp;lt;1GB.&#xA;&#xA;started roslaunch server http://128.110.74.233:48495/&#xA;&#xA;SUMMARY&#xA;========&#xA;&#xA;PARAMETERS&#xA; * /cmd_vel_mux/yaml_cfg_file&#xA; * /diagnostic_aggregator/analyzers/digital_io/path&#xA; * /diagnostic_aggregator/analyzers/digital_io/startswith&#xA; * /diagnostic_aggregator/analyzers/digital_io/timeout&#xA; * /diagnostic_aggregator/analyzers/digital_io/type&#xA; * /diagnostic_aggregator/analyzers/mode/path&#xA; * /diagnostic_aggregator/analyzers/mode/startswith&#xA; * /diagnostic_aggregator/analyzers/mode/timeout&#xA; * /diagnostic_aggregator/analyzers/mode/type&#xA; * /diagnostic_aggregator/analyzers/nodes/contains&#xA; * /diagnostic_aggregator/analyzers/nodes/path&#xA; * /diagnostic_aggregator/analyzers/nodes/timeout&#xA; * /diagnostic_aggregator/analyzers/nodes/type&#xA; * /diagnostic_aggregator/analyzers/power/path&#xA; * /diagnostic_aggregator/analyzers/power/startswith&#xA; * /diagnostic_aggregator/analyzers/power/timeout&#xA; * /diagnostic_aggregator/analyzers/power/type&#xA; * /diagnostic_aggregator/analyzers/sensors/path&#xA; * /diagnostic_aggregator/analyzers/sensors/startswith&#xA; * /diagnostic_aggregator/analyzers/sensors/timeout&#xA; * /diagnostic_aggregator/analyzers/sensors/type&#xA; * /diagnostic_aggregator/base_path&#xA; * /diagnostic_aggregator/pub_rate&#xA; * /robot/name&#xA; * /robot/type&#xA; * /robot_description&#xA; * /robot_pose_ekf/freq&#xA; * /robot_pose_ekf/imu_used&#xA; * /robot_pose_ekf/odom_used&#xA; * /robot_pose_ekf/output_frame&#xA; * /robot_pose_ekf/publish_tf&#xA; * /robot_pose_ekf/sensor_timeout&#xA; * /robot_pose_ekf/vo_used&#xA; * /robot_state_publisher/publish_frequency&#xA; * /rosdistro&#xA; * /rosversion&#xA; * /turtlebot_laptop_battery/acpi_path&#xA; * /turtlebot_node/bonus&#xA; * /turtlebot_node/port&#xA; * /turtlebot_node/update_rate&#xA; * /use_sim_time&#xA;&#xA;NODES&#xA;  /&#xA;    cmd_vel_mux (nodelet/nodelet)&#xA;    diagnostic_aggregator (diagnostic_aggregator/aggregator_node)&#xA;    kinect_breaker_enabler (create_node/kinect_breaker_enabler.py)&#xA;    mobile_base_nodelet_manager (nodelet/nodelet)&#xA;    robot_pose_ekf (robot_pose_ekf/robot_pose_ekf)&#xA;    robot_state_publisher (robot_state_publisher/robot_state_publisher)&#xA;    turtlebot_laptop_battery (linux_hardware/laptop_battery.py)&#xA;    turtlebot_node (create_node/turtlebot_node.py)&#xA;&#xA;auto-starting new master&#xA;process[master]: started with pid [5055]&#xA;ROS_MASTER_URI=http://128.110.74.233:11311&#xA;&#xA;setting /run_id to 9d936a6a-fbdc-11e3-ba6b-00265e5f3bb9&#xA;process[rosout-1]: started with pid [5068]&#xA;started core service [/rosout]&#xA;process[robot_state_publisher-2]: started with pid [5081]&#xA;process[diagnostic_aggregator-3]: started with pid [5102]&#xA;process[turtlebot_node-4]: started with pid [5117]&#xA;process[kinect_breaker_enabler-5]: started with pid [5122]&#xA;process[robot_pose_ekf-6]: started with pid [5181]&#xA;process[mobile_base_nodelet_manager-7]: started with pid [5226]&#xA;process[cmd_vel_mux-8]: started with pid [5245]&#xA;process[turtlebot_laptop_battery-9]: started with pid [5262]&#xA;[WARN] [WallTime: 1403641073.765412] Create : robot not connected yet, sci not available&#xA;[WARN] [WallTime: 1403641076.772764] Create : robot not connected yet, sci not available&#xA;[kinect_breaker_enabler-5] process has finished cleanly&#xA;log file: /home/anshul/.ros/log/9d936a6a-fbdc-11e3-ba6b-00265e5f3bb9/kinect_breaker_enabler-5*.log&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Following&lt;/strong&gt; is the log file: /home/anshul/.ros/log/9d936a6a-fbdc-11e3-ba6b-00265e5f3bb9/kinect_breaker_enabler-5*.log output:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[rospy.client][INFO] 2014-06-24 14:20:12,442: init_node, name[/kinect_breaker_enabler], pid[5538]&#xA;[xmlrpc][INFO] 2014-06-24 14:20:12,442: XML-RPC server binding to 0.0.0.0:0&#xA;[rospy.init][INFO] 2014-06-24 14:20:12,443: ROS Slave URI: [http://128.110.74.233:51362/]&#xA;[xmlrpc][INFO] 2014-06-24 14:20:12,443: Started XML-RPC server [http://128.110.74.233:51362/]&#xA;[rospy.impl.masterslave][INFO] 2014-06-24 14:20:12,443: _ready: http://128.110.74.233:51362/&#xA;[xmlrpc][INFO] 2014-06-24 14:20:12,444: xml rpc node: starting XML-RPC server&#xA;[rospy.registration][INFO] 2014-06-24 14:20:12,445: Registering with master node http://128.110.74.233:11311&#xA;[rospy.init][INFO] 2014-06-24 14:20:12,543: registered with master&#xA;[rospy.rosout][INFO] 2014-06-24 14:20:12,544: initializing /rosout core topic&#xA;[rospy.rosout][INFO] 2014-06-24 14:20:12,546: connected to core topic /rosout&#xA;[rospy.simtime][INFO] 2014-06-24 14:20:12,547: /use_sim_time is not set, will not subscribe to simulated time [/clock] topic&#xA;[rospy.internal][INFO] 2014-06-24 14:20:12,820: topic[/rosout] adding connection to [/rosout], count 0&#xA;[rospy.core][INFO] 2014-06-24 14:20:20,182: signal_shutdown [atexit]&#xA;[rospy.internal][INFO] 2014-06-24 14:20:20,187: topic[/rosout] removing connection to /rosout&#xA;[rospy.impl.masterslave][INFO] 2014-06-24 14:20:20,188: atexit&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;From the logs, I could tell something told the create to power down. And since the log is named with 'kinect', I tried minimal.launch w/ and w/o kinect attached to the turtlebot pc. It doesn't make any difference. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any clue what I might be missing? Or is this the way bringup works (I guess not)?&lt;/p&gt;&#xA;" OwnerUserId="4056" LastActivityDate="2018-07-18T13:39:50.983" Title="Cannot launch iRobot Create. Powers down upon minimal launch?" Tags="&lt;ros&gt;&lt;irobot-create&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3160" PostTypeId="1" CreationDate="2014-06-24T22:33:01.620" Score="1" ViewCount="345" Body="&lt;p&gt;Is it possible to control the Create without using any ROS whatsoever? I know it has all these serial/Digital I/O pins that connect to ROS which controls it using drivers/libraries. But how hard would it be to do so using, say, a PCduino?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm asking this because I'm having trouble launching the create using ROS (&lt;a href=&quot;https://robotics.stackexchange.com/questions/3159/cannot-launch-irobot-create-powers-down-upon-minimal-launch&quot;&gt;question&lt;/a&gt;)&lt;/p&gt;&#xA;" OwnerUserId="4056" LastActivityDate="2015-11-18T02:07:40.507" Title="iRobot Create without ROS?" Tags="&lt;irobot-create&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3161" PostTypeId="2" ParentId="3105" CreationDate="2014-06-25T00:24:00.553" Score="1" Body="&lt;p&gt;The motor/esc pair you selected look fine. However, you should probably use a larger battery. 2.2 Ah * 25C = 55 amp continuous current draw. Each of your motors is rated 15 amps, but the speed controllers can handle more which means that they will probably occasionally draw more. 15 amps * 4 motors = 60 amps which is 5 amps higher than your battery is rated at. While this might work, the battery probably wouldn't last very long, and I personally wouldn't want to be near it while it is on. I would strongly suggest that you either find a larger battery or one with a higher C rating. Pushing lipos to their maximum ratings is almost never a good idea. &lt;/p&gt;&#xA;" OwnerUserId="1667" LastActivityDate="2014-06-25T00:24:00.553" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3162" PostTypeId="1" CreationDate="2014-06-25T18:41:43.007" Score="0" ViewCount="18" Body="&lt;p&gt;I have a BS2 mounted on a Parallax Board of Education Rev D.&#xA;I was trying to use a wire to determine whether a control was pressed. &#xA;however, whenever there's a wire connected the state seems to fluctuate between 1 and 0 instead of staying one or the other. when connected to the desired button it still exhibits this behavior but has the added quality of switching to zero when the button is pressed. ideally it will stay zero while the buttons pressed and 1 when it's not, but instead it flickers between 1 and 0 when unpressed. &#xA;what causes this behavior and why does it occur even when the wire is not connected to anything except the bus?&#xA;the code used to get the state is &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;DO&#xA;DEBUG CRSRXY,0,3,&#xA;&quot;P5:&quot;, BIN1 IN5,&#xA;LOOP&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="5629" LastActivityDate="2014-06-30T17:16:24.807" Title="BS2 inconsistant pin state when connected to wire?" Tags="&lt;microcontroller&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3163" PostTypeId="2" ParentId="3160" CreationDate="2014-06-25T22:35:49.247" Score="3" Body="&lt;p&gt;It is very easy to control an iRobot Create with an Arduino or other microcontroller. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have one of the Mini-DIN cables (circular ones) that you are willing to cut up you can wire the correct pins into the TX and RX of an Arduino or PCDuino.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have found that it is easier though to use the large DB-25 connector (which is the same one used on old printers and scanners) because it can provide 5v regulated power directly to an Arduino (but it can't provide enough current for a PCDuino) along with the serial data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The pinouts for both of the these connectors can be found here: &lt;a href=&quot;http://www.irobot.com/filelibrary/pdfs/hrd/create/create%20open%20interface_v2.pdf&quot; rel=&quot;nofollow&quot;&gt;http://www.irobot.com/filelibrary/pdfs/hrd/create/create%20open%20interface_v2.pdf&lt;/a&gt;, along with a lot of other information.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For software I recommend this Arduino library: &lt;a href=&quot;http://www.airspayce.com/mikem/arduino/Roomba/&quot; rel=&quot;nofollow&quot;&gt;http://www.airspayce.com/mikem/arduino/Roomba/&lt;/a&gt;, which is simple and easy to use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: I just realized that you wanted to do this with a PCDuino, which I have never used, but I think you would have to port the library. The pdf I linked provides information on the entire protocol. If you don't need the processing power of the PCDuino it might just be easier to use an Arduino.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope this helps.&lt;/p&gt;&#xA;" OwnerUserId="1173" LastEditorUserId="1173" LastEditDate="2014-06-25T22:44:23.067" LastActivityDate="2014-06-25T22:44:23.067" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3164" PostTypeId="1" CreationDate="2014-06-26T13:01:27.540" Score="2" ViewCount="52" Body="&lt;p&gt;I am using Autodesk Inventor 2013 and I need to round a component of a device. I want to round the green marked edges, but not the red marked. But when I click &quot;round&quot;, then the bottom edge will always be added to the rounding and I cannot de-select it. Any hints how to solve this problem?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/nR3wW.png&quot; alt=&quot;Rounding problem in AutoDesk Inventor 2013&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="5633" LastActivityDate="2014-06-28T04:22:01.780" Title="Autodesk Inventor 2013: Rounding only at specific edge" Tags="&lt;design&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3165" PostTypeId="2" ParentId="2876" CreationDate="2014-06-26T16:03:56.313" Score="0" Body="&lt;p&gt;why not to consider a hybrid cable which can be stiff (&quot;frozen&quot;) like a pipe or flexible as a rope? In such a case it can push not only pull. By the hybrid cable I mean a cable covered with many small cylindrical pulleys.&lt;/p&gt;&#xA;" OwnerUserId="5635" LastActivityDate="2014-06-26T16:03:56.313" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3166" PostTypeId="1" CreationDate="2014-06-26T20:04:23.483" Score="2" ViewCount="312" Body="&lt;p&gt;This question is an extension to &lt;a href=&quot;https://robotics.stackexchange.com/questions/3073/data-association-with-ekf&quot;&gt;my previous problem (Data association with ekf)&lt;/a&gt;. My problem here is in the line 16 in the aforementioned link. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;16. &amp;nbsp; &amp;nbsp; $ j(i) = \underset{k}{\operatorname{arg\,max}} \ \ det(2 \pi S^{k})^{-\frac{1}{2}} \exp\{-\frac{1}{2} (z^{i}-\hat{z}^{k})^{T}[S^{k}]^{-1} (z^{i}-\hat{z}^{k})\} $&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I compute this line, I'm getting huge number &lt;code&gt;1.0e+09 * 3.5230&lt;/code&gt;. This is probability density function. Why is the pdf getting bigger than 1 in a huge way?&lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2014-08-01T15:05:46.527" Title="Maximum likelihood estimator (ML Data Association) EKF" Tags="&lt;localization&gt;&lt;ekf&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3170" PostTypeId="1" AcceptedAnswerId="3171" CreationDate="2014-06-27T12:06:48.570" Score="2" ViewCount="89" Body="&lt;p&gt;Problem: the cartesian position of an end effector (no orientation) of a robot arm is recorded, say, every millisecond (the time steps can not be changed), during a motion. The robot arm is commanded the same path but with different velocities. So I get different trajectories. I want to calculate the deviation of the paths, which is the distances of equivalent points of two paths. The problem is to find equivalent points. Since the two velocities are different the comparison at the same time steps of the trajectories makes no sense. I can assume that the paths underlying the trajectories to be compared are rather similar. The deviation for the ideal path being smaller than 1% of a typical length dimension of the path. I want to detect deviations of much lass than that. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have to map the timestamp of the recorded points to the path length, and make comparison of points at the same path length. But of course also the path lengths differ for different paths, so any deviation would distort the result for all later points. How can I compensate for this ? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a reliable algorithm ? Where can I find information ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: time warp algorithms (even memory optimized ones) are out of the game because of memory consumption. &lt;/p&gt;&#xA;" OwnerUserId="5638" LastEditorUserId="5638" LastEditDate="2014-06-27T13:42:54.260" LastActivityDate="2014-06-27T13:42:54.260" Title="Path comparison" Tags="&lt;localization&gt;&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3171" PostTypeId="2" ParentId="3170" CreationDate="2014-06-27T12:42:54.600" Score="2" Body="&lt;p&gt;The problem you are describing sounds like you need to calculate Frechet distance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you take a point at each of your paths, connect them with a string and move them along the path (not necessarily with the same velocities), then Frechet distance of the paths is a minimum length of the string necessary.&#xA;Not a good description :-)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The formula from the &lt;a href=&quot;https://en.wikipedia.org/wiki/Frechet_distance&quot; rel=&quot;nofollow&quot;&gt;wikipedia page&lt;/a&gt; is much better:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$F(A,B) = \inf_{\alpha, \beta}\,\,\max_{t \in [0,1]} \,\, \Bigg \{d \Big ( A(\alpha(t)), \, B(\beta(t)) \Big ) \Bigg \}$$&#xA;where $\alpha$ and $\beta$ are mappings from time to the position on the curve.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only problem is, that calculating the Frechet distance between two polylines takes $O(n^{2}m + m^{2}n)$ of memory (and even more time). There are some approximations you could use that only take the turning points of the polyline into account, but I don't know much about them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And some resources:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;More detailed description of the calculation:&#xA;&lt;a href=&quot;http://www.cim.mcgill.ca/~stephane/cs507/Project.html&quot; rel=&quot;nofollow&quot;&gt;http://www.cim.mcgill.ca/~stephane/cs507/Project.html&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Implementation in matlab:&#xA;&lt;a href=&quot;http://www.mathworks.com/matlabcentral/fileexchange/38714-frechet-distance-calculation/content/frechet_compute.m&quot; rel=&quot;nofollow&quot;&gt;http://www.mathworks.com/matlabcentral/fileexchange/38714-frechet-distance-calculation/content/frechet_compute.m&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;My buggy implementation in python:&#xA;&lt;a href=&quot;https://github.com/bluecube/robomower2/blob/master/src_python/util/frechet_distance.py&quot; rel=&quot;nofollow&quot;&gt;https://github.com/bluecube/robomower2/blob/master/src_python/util/frechet_distance.py&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="482" LastActivityDate="2014-06-27T12:42:54.600" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="3172" PostTypeId="1" AcceptedAnswerId="3179" CreationDate="2014-06-27T16:55:56.450" Score="1" ViewCount="75" Body="&lt;p&gt;How do you make a gripper changer for a robotic arm like &lt;a href=&quot;https://www.youtube.com/watch?v=_8ovd4khIBM&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt;? I don't see how you could connect power/control wires or what you use to hold the gripper to the arm.&lt;/p&gt;&#xA;" OwnerUserId="5640" LastActivityDate="2014-06-28T13:00:00.497" Title="Making a Gripper Changer for a Robotic Arm" Tags="&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="0" ClosedDate="2014-07-03T13:30:19.460" ContentLicense="CC BY-SA 3.0" />
  <row Id="3173" PostTypeId="1" AcceptedAnswerId="3201" CreationDate="2014-06-27T21:02:19.073" Score="0" ViewCount="98" Body="&lt;p&gt;I am working on a robot that has an accelerometer. This accelerometer measures the vibration of the robot. When the robot hits a certain vibration, I would like it to slow down in order to reduce the vibration. I thought about a PID controller, but I don't think it would work. Does anybody have some input on different types of controllers I can use? &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Mechaman&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="4278" LastActivityDate="2014-07-04T16:44:19.190" Title="Velocity Control via Vibration" Tags="&lt;pid&gt;&lt;accelerometer&gt;&lt;navigation&gt;" AnswerCount="2" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="3174" PostTypeId="2" ParentId="3173" CreationDate="2014-06-28T00:50:29.880" Score="0" Body="&lt;p&gt;Your main problem is that vibration isn't a well-defined measurement; what number do you assign to vibration? Peak accel value? Average accel value? And over what time range; peak value over the last 1s, 2s, 3s?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you've decided precisely what measurement you plan to use, then I would initially go ahead and try a PID. If it works then you're set. Beyond that, it's hard to say what will work well. Ideally, you would use a controller that minimizes energy (e.g. $\mathcal{H}_\infty$ control) but those are quite complex and take a lot of advances math to understand and create.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2014-06-28T00:50:29.880" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="3175" PostTypeId="2" ParentId="3164" CreationDate="2014-06-28T04:22:01.780" Score="2" Body="&lt;p&gt;The problem is the fillet is reaching the long edge by following the smooth curve around your previously-filleted edges.  The solution is to undo or delete features to get rid of the existing fillets on the left and right sides, then do all the fillets on those sides at once.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Often you need to be strategic in choosing the &lt;strong&gt;order&lt;/strong&gt; of chamfering and filleting.  This can get complicated for a real project with lots of different intersecting features!&lt;/p&gt;&#xA;" OwnerUserId="5643" LastActivityDate="2014-06-28T04:22:01.780" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3176" PostTypeId="2" ParentId="1649" CreationDate="2014-06-28T05:09:23.107" Score="2" Body="&lt;p&gt;Setting up the software to extract new custom sensor data via MAVLink seems to be harder than it should be.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Step one is to make the quadcopter &lt;strong&gt;send&lt;/strong&gt; off the data.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;First, you need to &lt;a href=&quot;http://qgroundcontrol.org/mavlink/create_new_mavlink_message&quot; rel=&quot;nofollow&quot;&gt;define a new MAVLink message type using XML&lt;/a&gt; in mavlink/message_definitions.  You can just make up a new unused integer for the message_id.&lt;/li&gt;&#xA;&lt;li&gt;Second, you generate the message pack/unpack functions using the MAVLink generator.&lt;/li&gt;&#xA;&lt;li&gt;Then you'll need to add code to ArduCopter/GCS_Mavlink.pde in data_stream_send to build and send off your message.  You do need to be a little careful here, because the flight dynamics start to degrade if your sensor reads stop the main loop for more than a few milliseconds, especially for a small quad or flying indoors (that's what the &quot;gcs_out_of_time&quot; business is about).  I'd add a new sensor to the STREAM_EXTRA3 trigger.&lt;/li&gt;&#xA;&lt;li&gt;Rebuild and upload the new flight firmware.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The other half of the project is on the PC, where you need to modify the ground station software to &lt;strong&gt;read&lt;/strong&gt; your MAVLink packets out of the telemetry stream.  I have no clue where you'd begin to do this to Mission Planner, which seems like a really sophisticated piece of software.  But luckily it dumps raw &lt;a href=&quot;http://copter.ardupilot.com/wiki/common-mission-planner-telemetry-logs/&quot; rel=&quot;nofollow&quot;&gt;radio telemetry to the &quot;tlog&quot;&lt;/a&gt;, so you might be able to build a completely separate program that looks for your new MAVLink packet from the tlog.  (You certainly don't want an Arduino Sketch for this, since a Sketch runs on the Arduino, not the PC.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If this sounds intimidating to you, you're not alone!  For our indoor quad, we ended up building our own radio communication protocol and &quot;ground station&quot;, since we couldn't use GPS or waypoints or the other MAVLink features, and dealing with the complexity of MAVLink wasn't worth it to us.&lt;/p&gt;&#xA;" OwnerUserId="5643" LastActivityDate="2014-06-28T05:09:23.107" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3177" PostTypeId="2" ParentId="1658" CreationDate="2014-06-28T05:34:17.673" Score="2" Body="&lt;p&gt;Wheel slip is a serious limitation for any odometry-based robot tracking system.  The big problem is a wheel will slip when the force due to wheel &lt;strong&gt;torque&lt;/strong&gt; exceeds the tire/ground static &lt;strong&gt;friction&lt;/strong&gt; force.  Wheel torque depends on not just the PWM commanded power, but also the battery voltage and the gearbox.  The drive friction depends on the vehicle dynamic weight, and the tire and surface properties, both of which can change dramatically over short periods (e.g., when crossing a bump).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At low torques and speeds, slip is a small effect, mostly noticable as a small deviation in the distance turned.  At high speeds or torque, which is what wins competitions, wheel slip dominates the vehicle's dynamics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But there are lots of possible tools to detect and compensate for wheel slip:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;An accelerometer and gyro based &lt;strong&gt;IMU&lt;/strong&gt; can be used to cross-check wheel odometry, since slip will cause a mismatch between these two.  Magnetometer (9-axis) IMUs are better for big applications, since the magnetic axis helps stop gyro drift, but you need to be careful about shielding the fields from the motors on a small robot. Surface mount MEMS IMU packages can be quite lightweight.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A downward-facing &lt;strong&gt;optical sensor&lt;/strong&gt;, like the optic flow &lt;a href=&quot;http://home.roadrunner.com/~maccody/robotics/croms-1/croms-1.html&quot; rel=&quot;nofollow&quot;&gt;motion sensor in an optical mouse&lt;/a&gt;, can be used to estimate vehicle motion.  I've seen these used on micro-mouse sized platforms.  Like a black mousepad, the track typically has enough optical roughness to allow the sensor to work reliably, although depth of focus blur and motion blur can be a problem.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Separate non-powered odometry &lt;strong&gt;wheels&lt;/strong&gt; are another option, although these are difficult to fit even in a full size micro mouse platform.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Outward-looking &lt;strong&gt;wall tracking&lt;/strong&gt; sensors are very useful in micro mouse localization.  Of course, you need to detect the walls to map the maze, but you can also use them to calibrate your motion, especially if you can reliably measure distances in the forward direction, such as via ultrasonics or laser distance measurement.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="5643" LastActivityDate="2014-06-28T05:34:17.673" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3178" PostTypeId="1" CreationDate="2014-06-28T10:51:05.130" Score="5" ViewCount="697" Body="&lt;p&gt;I'm controlling the angular position of a pendulum using a DC motor with a worm gearbox. Mechanically, worm gears are impossible to backdrive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using a PID controller on a pendulum system with a regular DC motor (no worm gear), the integrator would help the motor find the appropriate constant power setting to overcome gravity so the pendulum can hold any arbitrary position. With the worm gear, however, there is no need to apply constant power to the motor once the desired position is achieved. Power to the motor can be cut off and the worm gear will resist gravity's force to backdrive the pendulum to the lowest gravity potential.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems to me, then, that the integrator of the PID algorithm will cause large overshoots once the desired position is achieved. I want the integrator initially to help control the pendulum to the desired position. But once the position is achieved, I'd need the integrator to turn off.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only solution I can come up with is to test for a special condition in the PID algorithm that checks if the position has been reached AND the angular speed is small, then instantaneously reset the integrator to zero. Is there a better way to handle the integrator in a system that resists backdrive?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;** EDIT *&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I originally worded my question, I was mostly just interested in the academic approach of backdrive resistance in a PID loop. But it'll help if I explain the actual mechanism I'm building. The device is a robotic arm that rotates on a car window motor. It will also occasionally pick up and drop small weights at the end of the arm. Manufacturing variability in motors and the difference in drive torque when picking up the small weights led to me consider a PID loop.&lt;/p&gt;&#xA;" OwnerUserId="5644" LastEditorUserId="5644" LastEditDate="2014-07-01T07:18:02.477" LastActivityDate="2014-11-13T17:29:15.857" Title="Controlling a system with PID that resists backdrive" Tags="&lt;pid&gt;" AnswerCount="4" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3179" PostTypeId="2" ParentId="3172" CreationDate="2014-06-28T13:00:00.497" Score="1" Body="&lt;p&gt;Mechanically, there are a variety of ways to fix the gripper to the arm.  I think the easiest way is to have a little tab rotate under an overhang. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;At least one of the grippers shown in your video is pneumatic.  (It is quite possible both are).  In which case, the pneumatic connection is just a hole with a gasket or O-ring to seal it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Electrically, you can have pins on a connector slide into the housing on the other end.  But i think that requires some pretty tight tolerances, and might wear out quickly.  More likely, you can use something called &quot;pogo pins&quot;.  these are spring loaded contacts made for just this type of thing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;it is also possible that your end-effector gripper can be actuated mechanically.  this can be accomplished with gears, splines, or push rods i think.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-06-28T13:00:00.497" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3180" PostTypeId="2" ParentId="3178" CreationDate="2014-06-28T13:05:00.183" Score="1" Body="&lt;p&gt;I would find something like a &lt;a href=&quot;http://en.wikipedia.org/wiki/Leaky_integrator&quot; rel=&quot;nofollow&quot;&gt;leaking integrator&lt;/a&gt;. The primary component will integrate error but there is also another component that will always slowly decay the integral value over time.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2014-06-28T13:05:00.183" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3181" PostTypeId="1" CreationDate="2014-06-28T13:51:43.650" Score="0" ViewCount="1180" Body="&lt;p&gt;i want to calculate humanoid robot hand position with given shoulder roll, pitch angles and elbow roll angle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm able to calculate elbow position using rotation matrix which includes shoulder angles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But i dont know how to calculate hand position using elbow position and elbow roll angle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can you propose a method to calculate hand position? &lt;/p&gt;&#xA;" OwnerUserId="5645" LastEditorUserId="110" LastEditDate="2014-07-03T01:07:51.473" LastActivityDate="2014-07-03T01:07:51.473" Title="How to calculate robot hand positions using Roll, Pitch angles" Tags="&lt;robotic-arm&gt;&lt;forward-kinematics&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="3182" PostTypeId="2" ParentId="3178" CreationDate="2014-06-29T02:08:12.973" Score="0" Body="&lt;p&gt;Why not just have a deadband region?  (when position is close enough to target, stop controlling the motor).&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-06-29T02:08:12.973" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3183" PostTypeId="1" AcceptedAnswerId="3189" CreationDate="2014-06-29T20:23:21.853" Score="1" ViewCount="3363" Body="&lt;p&gt;Is it possible to strengthen permanent magnet DC motors by simply attaching extra magnets on the outside of the motor casing - adding to the magnetic field?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If this is not possible, the question becomes; what happens if I replace the magnets inside the motor with better magnets?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that the coils will not handle more current than they currently do, so what will the net effect on the motor be?&lt;/p&gt;&#xA;" OwnerUserId="4049" LastActivityDate="2014-07-01T17:00:13.573" Title="Adding external magnets to a DC motor" Tags="&lt;motor&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="3186" PostTypeId="2" ParentId="3178" CreationDate="2014-06-30T17:06:10.340" Score="1" Body="&lt;p&gt;It sounds like you don't need a PID controller at all.  You're trying to move a worm gear until it reaches a given set point, then turn it off -- proportional control sounds like all you'd need.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-06-30T17:06:10.340" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="3187" PostTypeId="2" ParentId="3162" CreationDate="2014-06-30T17:16:24.807" Score="1" Body="&lt;p&gt;I think you're in need of a &lt;a href=&quot;http://en.wikipedia.org/wiki/Pull-up_resistor&quot; rel=&quot;nofollow&quot;&gt;pull-up resistor&lt;/a&gt;.  This will help keep the input fixed at one value when disconnected.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-06-30T17:16:24.807" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3188" PostTypeId="1" CreationDate="2014-06-30T23:52:38.447" Score="0" ViewCount="390" Body="&lt;p&gt;I am trying to build a 2ft square an XY Plotter. I have seen three designs so far: 1)Rack and Pinion 2)Threaded Screw 3) belt-driven. all these use a stepper motor to drive the system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each one has their obvious pros and cons but correct me if i am wrong, i believe the rack and pinion system is the most sturdy and easiest to put together.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I googled for Rack and pinion but all i get is industrial websites. Is there any place that sells cheaper rack and pinion sets for hobbyists? The payload of the XY Table is an eletro-magnet that isn't extremely heavy (maybe a half kilogram at most).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So obviously the motor must be strong enough to move anothe rack which will be significantly heavier than the payload.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is my first real robotics project so i am new to all this.&lt;/p&gt;&#xA;" OwnerUserId="5652" LastActivityDate="2014-07-02T20:18:50.677" Title="Where to go to purchase parts for XY Plotter" Tags="&lt;stepper-motor&gt;&lt;motion&gt;&lt;actuator&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2014-07-03T13:29:51.467" ContentLicense="CC BY-SA 3.0" />
  <row Id="3189" PostTypeId="2" ParentId="3183" CreationDate="2014-07-01T17:00:13.573" Score="1" Body="&lt;p&gt;First, consider that the purpose of the magnets in a motor are to create a permanent magnetic field.  The magnetic flux associated with this magnetic field follows a path from one pole of the magnet, through the air gap to the armature, then through the opposite air gap, then through the other magnet, then around the housing of the motor back to the opposite pole of the first magnet.  The magnets are embedded in the motor's magnetic circuit.  If you place magnets on the outside of the motor, they will not be in the magnetic circuit of the motor.  Rather, one pole of the magnets will be on the housing that the other will be facing out away from the motor.  Little to no flux will be added to the motor's magnetic circuit.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you took the motor apart and replaced the standard magnets with new magnets, then that is a different question.  This is a complicated subject and there is no definite answer to your question other than &quot;it depends.&quot;  Most motors are designed so that the steel in the motor is near magnetic saturation.  Increasing the strength of the magnet will drive more of the steel into saturation.  How much and what affect it will have depends on the motor and how much you change your magnet by.  But you will increase Kt, which means for a given torque, your current will be lower.  And your speed will be lower.  Your ability to dissipate heat will not change.  However, your magnet may be more susceptible to demagnetization.  You'd want to make sure your magnet's coercivity (Hc) is high enough. &lt;/p&gt;&#xA;" OwnerUserId="3866" LastActivityDate="2014-07-01T17:00:13.573" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3192" PostTypeId="2" ParentId="3166" CreationDate="2014-07-02T07:08:02.550" Score="2" Body="&lt;p&gt;Getting a value larger than 1 in a pdf &lt;a href=&quot;http://en.wikipedia.org/wiki/Probability_density_function#Further_details&quot; rel=&quot;nofollow&quot;&gt;is normal&lt;/a&gt;. Remember that the pdf does not actually evaluate to a probability itself, but to a density. Only the integral over the function has to evaluate to 1. For a continuous variable the probability of getting exactly one particular value approaches zero. In this case you can only give the probability that the variable is within a certain interval, or you can compare the relative probability. &lt;/p&gt;&#xA;" OwnerUserId="127" LastActivityDate="2014-07-02T07:08:02.550" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3193" PostTypeId="2" ParentId="3166" CreationDate="2014-07-02T14:15:10.417" Score="0" Body="&lt;p&gt;Just like Jacob said. The integral of pdf from $\int_{-\infty}^{\infty}{f(t) dt}=1$ for some pdf $f(t)$.&#xA;This does not mean the pdf cannot be more than one at some point (i.e. infinitesimal interval). Thinking about &lt;a href=&quot;http://en.wikipedia.org/wiki/Dirac_delta_function&quot; rel=&quot;nofollow&quot;&gt;dirac delta function&lt;/a&gt; might help.&lt;/p&gt;&#xA;" OwnerUserId="4033" LastActivityDate="2014-07-02T14:15:10.417" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3195" PostTypeId="2" ParentId="2673" CreationDate="2014-07-02T15:57:36.283" Score="0" Body="&lt;p&gt;Regarding interference of active sensors: Yes, this is a problem for Primesensor-based RGBD cameras (like the Kinect), but it does not make these sensors completely useless. There are even some &lt;a href=&quot;http://www.precisionmicrodrives.com/tech-blog/2012/08/28/using-vibration-motors-with-microsoft-kinect&quot; rel=&quot;nofollow&quot;&gt;clever hardware hacks&lt;/a&gt; to work around this problem. A much bigger problem of these sensors is exposure to direct sunlight. This has slightly improved with Kinect 2.0.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;About your main question: The different approaches you mentioned all have different advantages and problems/failure cases. RGB-D sensors suffer from interference (the worst being interference with sunlight). A similar alternative is relying on stereo vision, but this is computationally more expensive and may fail in textureless environments. Monocular camera + IMU requires the least space/weight but is less accurate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Neither option is going to become completely irrelevant in the near future, but the ideal approach depends on the exact problem you need to solve.&lt;/p&gt;&#xA;" OwnerUserId="4531" LastActivityDate="2014-07-02T15:57:36.283" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3197" PostTypeId="2" ParentId="3188" CreationDate="2014-07-02T20:18:50.677" Score="1" Body="&lt;p&gt;Check out pololu.com and sparkfun.com&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each of the motors you will find will have a torque rating which indicates how much torque they can produce. Stepper motors require stepper motor drivers to operate. The drivers usually take an input voltage pulse of 5 volts, and will then move the stepper motor attached to it 1 step. &#xA;&lt;img src=&quot;https://i.stack.imgur.com/Asdyz.png&quot; alt=&quot;stepper motor driver picture from pololu&quot;&gt;&#xA;This is the stepper driver I just used for a project where I used the stepper setup to drive my little 5 lbs robot around on a ping pong table. I used this with a 68 oz.in stepper motor from sparkfun and an Arduino.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I imagine for a rack and pinion setup you would have to do some math to determine how far 1 step of the motor would move the tray based on the diameters of the gears and the degrees traveled by one step of the motor. Stepper motors have a paramater, steps per revolution, that specifies how much rotation happens for one step. There is a thing called microstepping which allows you to turn a stepper motor less than this rating.&lt;/p&gt;&#xA;" OwnerUserId="4522" LastActivityDate="2014-07-02T20:18:50.677" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3200" PostTypeId="1" CreationDate="2014-07-04T12:50:07.867" Score="1" ViewCount="214" Body="&lt;p&gt;I want to implement a manipulator link using a physic library. I can only apply some torque to the centre of mass, but the torque should be applied at the beginning of the link.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Shifting a reference frame from the centre of mass and recalculating inertia tensor in the new frame is not a problem, neither is recalculating a new torque, based on the change of distance, but I think it is not the correct solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In short, how can I scale a torque of a control signal applied at the beginning of the link to a torque of a physic simulation applied to the centre of mass. Thanks.&lt;/p&gt;&#xA;" OwnerUserId="5679" LastEditorUserId="134" LastEditDate="2014-08-02T09:24:10.240" LastActivityDate="2015-10-29T18:58:54.840" Title="Manipulator link applied torque" Tags="&lt;simulator&gt;&lt;torque&gt;" AnswerCount="4" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3201" PostTypeId="2" ParentId="3173" CreationDate="2014-07-04T16:44:19.190" Score="1" Body="&lt;p&gt;Since you are attempting to slow down a car when the road gets too bumpy, a PID controller is not what you want.  Or rather, the bumpiness of the road will determine the &lt;em&gt;desired speed&lt;/em&gt; that goes into the PID, instead of being part of the PID's sensor feedback loop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may want to look at &lt;a href=&quot;http://en.wikipedia.org/wiki/Additive_increase/multiplicative_decrease&quot; rel=&quot;nofollow&quot;&gt;additive increase, multiplicative decrease&lt;/a&gt; as a function to control your desired speed.  The basic idea would be:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;good = 1&#xA;bad = 1&#xA;while (true):&#xA;    if (bumpy_level_detected() &amp;gt; bumpy_level_allowed):&#xA;        bad = bad + 1&#xA;    else:&#xA;        good = good + 1&#xA;&#xA;    desired_speed = (good_speed_constant * good) / (bad_speed_constant ** bad)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In more mathematical notation: &#xA;$$speed_{desired} = \frac{k_{good} * g}{({k_{bad}})^b} $$&#xA;Where $g$ represents the number of iterations where the bump sensor was within limits, $b$ represents the number of iterations where the bump sensor was over the limit, $k_{good}$ controls how quickly the car ramps up its speed when the road is smooth, and $k_{bad}$ controls how quickly the car slows down when the road is bumpy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(The above is just for explanatory purposes; in practice, rather than keeping $g$ and $b$ in memory and causing an overflow as they increase, you'd just apply the $k_{good}$ &gt; 0 and $k_{bad} &amp;gt; 1$ constants to the running total as appropriate.)&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-07-04T16:44:19.190" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3204" PostTypeId="2" ParentId="2639" CreationDate="2014-07-06T13:22:08.947" Score="5" Body="&lt;p&gt;A Raspberry Pi should be sufficient for the control you intend to do with it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In designing a controller under a full multitasking operating system, like the Linux operating systems that are available for the Raspberry Pi, you have to be careful about the real-time requirements, and if the time share chunk of processor made available to your software will be enough to keep up with the rt nature of cyber-physical interactions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In small words: if you don't run much beyond the controller code in the RPi, it should suffice, but if you want to have other pieces of code running, like some higher level supervisory control or even a Java virtual machine for some reason, you will have to assess the response time, and even take the risk of some runaway thread end up blocking your controller for some time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The solution for that, and if you take it you will most likely have no headaches in the process, is to have non-preemptive multi-tasking OS, or, even better, a Real Time OS running on the Raspberry Pi.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And you can have both (not at the same time, of course!). Raspberry Pi has support for the &lt;a href=&quot;http://www.raspberrypi.org/risc-os-for-raspberry-pi/&quot; rel=&quot;nofollow&quot;&gt;RISC OS&lt;/a&gt; Operating System, which employs cooperative multitasking, where you can give absolute priority for the control loop, and only run other pieces of code once the control loop is done for the cycle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And, my personal best, you have &lt;a href=&quot;http://www.xenomai.org/&quot; rel=&quot;nofollow&quot;&gt;Xenomai&lt;/a&gt; running on it. Xenomai is a hard real-time supervisor that has Linux running under it, so you can have a full deploy of a Linux machine, with all the benefits of having all the pre-packaged software and other amenities, and you also have a Real Time layer where you can run your control loop without any risks of getting interrupted out of time. You can find instructions on how to have Xenomai installed on the RPi &lt;a href=&quot;http://www.raspberrypi.org/forums/viewtopic.php?f=28&amp;amp;t=50184&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;. There used to be a ready SD image of it available, but it seems to have gone offline at this time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt; A ready to install SD image of Xenomai for the Raspberry Pi can be downloaded from &lt;a href=&quot;http://diy.powet.eu/2012/07/25/raspberry-pi-xenomai/&quot; rel=&quot;nofollow&quot;&gt;this link&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="1755" LastEditorUserId="1755" LastEditDate="2014-07-15T15:47:14.380" LastActivityDate="2014-07-15T15:47:14.380" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3205" PostTypeId="2" ParentId="3200" CreationDate="2014-07-07T02:05:32.257" Score="-1" Body="&lt;p&gt;A &lt;a href=&quot;http://en.wikipedia.org/wiki/Couple_%28mechanics%29&quot; rel=&quot;nofollow&quot;&gt;moment&lt;/a&gt; applied to a rigid body does not matter where it is placed.  (This simple fact is taught in the &quot;Statics&quot; class for freshmen mechanical engineers).  Bullet does support joint constraints.  So you only need apply the torque on one link relative to the previous link.  Do not scale or transform the torque.&lt;/p&gt;&#xA;" OwnerUserId="110" LastEditorUserId="110" LastEditDate="2014-12-03T01:51:44.477" LastActivityDate="2014-12-03T01:51:44.477" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="3206" PostTypeId="1" CreationDate="2014-07-07T17:22:55.890" Score="2" ViewCount="163" Body="&lt;p&gt;I have been working on a robot project for a while. Now I am tired of finding parts that just does the job, so it is time to do create parts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A 3D printer will do the trick for many parts, but 3D printers share a lot with a CNC mill in terms of control and parts. So my question is this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am building a Reprap style printer, but I will use more heavy duty parts and motors, hoping to make a aluminum capable 3 axis mill later. I found some bipolar NEMA 23 stepper motors at 1.9 Nm and 3 Amps per coil. According to the reprap.org website, they recommend NEMA 17 and low voltage. Seems to me that they use voltage to limit the current.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can I build a reprap, and use current limiting stepper drivers with an Arduino and some software I find online, and get away with these large stepper motors? Or am I in for a lot of trouble?&lt;/p&gt;&#xA;" OwnerUserId="4049" LastEditorUserId="350" LastEditDate="2014-07-07T20:53:38.670" LastActivityDate="2014-07-09T03:43:44.313" Title="Current-limiting stepper motors for RepRap" Tags="&lt;arduino&gt;&lt;stepper-motor&gt;&lt;stepper-driver&gt;&lt;cnc&gt;&lt;reprap&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3207" PostTypeId="1" AcceptedAnswerId="3232" CreationDate="2014-07-08T02:27:06.817" Score="0" ViewCount="962" Body="&lt;p&gt;I made several tests with different setups in order to achieve an acceptable speech recognition quality. It works well when I push a button to activate it but now I want it to be automatically activated when a user speaks. This is a big problem, especially when I only use the energy of the audio signal to guess when the user is speaking. That is why I thought about using a headset and not a distant microphone. In a headset the microphone is very close to the users mouth and it is easier to make correct guesses about when the user is speaking. Now my question is if bluetooth sets used with mobile phones also have such a property. They are not long enough and their microphone is not positioned exactly in front of the mouth. Is there a possibility that such devices can also capture some speech/noise from a distant user? Is there a significant difference in the signal energy coming from the user's speech and a 1 meter distant person's speech?&lt;/p&gt;&#xA;" OwnerUserId="4429" LastActivityDate="2014-08-05T01:30:34.650" Title="Best microphone for speech recognition tasks" Tags="&lt;digital-audio&gt;&lt;speech-processing&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3208" PostTypeId="1" CreationDate="2014-07-08T03:47:54.677" Score="3" ViewCount="1081" Body="&lt;p&gt;I am a programmer who has never worked with electronics before. I am learning the concepts and hoping to build a quadcopter, with the control software entirely written by me. Motor control seems to be the most important part.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it true that the typical brushless DC motor and ESC (Electronic Speed Control) can only approximately control the speed?  That's because the ESC seems to have only a very approximate idea how fast the motor is revolving. This still works for a PID (Proportional Integral Derivative) controller because it gets indirect feedback from say a gyroscope whether the motor is going fast enough and so it can tell the ESC to make it revolve &quot;even faster&quot; or &quot;even slower&quot;, and that's good enough.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is my understanding in the above paragraph correct?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If so, I wonder whether a servo motor that can inform about its current rate of rotation could help do away with the ESC entirely? I feel that if the microcontroller can receive an input about motor speeds and send an output requesting a certain speed, it would not need the ESC. But I am not sure how servo motors work -- what happens immediately after you request 100rpm when say they were at 80rpm?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since they cannot adjust the immediately, should the microcontroller immediately adjust other motors to account for the fact that not all motors are at 100rpm yet?  Does that imply that the microcontroller should only request very small deltas from the currently measured speed, so that the period of deviation from desired state is negligible?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the latter model, of requesting only very small deltas from currently measured speed, the algorithm seems like it would not really be PID since there is no way to control the acceleration? But may be requesting the servo to go from 80rpm to 100rpm causes it to reach 81rpm much faster than requesting it to go from 80rpm to 81rpm?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I feel I know so little I cannot put my finger on it more precisely, but I hope this gives an idea of the concepts I am struggling to absorb.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To summarize, the questions are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;can a servo (brushless dc) motor allow doing away with ESC?&lt;/li&gt;&#xA;&lt;li&gt;does a servo motor accept control inputs such as &quot;revolve at 100rpm&quot;?&lt;/li&gt;&#xA;&lt;li&gt;does a servo motor offer an output saying &quot;i am at 80rpm now&quot;?&lt;/li&gt;&#xA;&lt;li&gt;does a servo motor at 80rpm go to 81rpm faster if it is requested to revolve at 100rpm versus at 81rpm?&lt;/li&gt;&#xA;&lt;li&gt;the less precise questions implicit in the text above.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;(crossposted from &lt;a href=&quot;https://electronics.stackexchange.com/questions/118236/electronic-speed-control-concepts&quot;&gt;electronics.stackexchange&lt;/a&gt;)&lt;/p&gt;&#xA;" OwnerUserId="5690" LastEditorUserId="-1" LastEditDate="2017-04-13T12:33:08.317" LastActivityDate="2014-07-09T07:57:52.670" Title="Electronic Speed Control Concepts" Tags="&lt;motor&gt;&lt;pid&gt;&lt;brushless-motor&gt;&lt;esc&gt;&lt;servomotor&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3209" PostTypeId="1" CreationDate="2014-07-08T05:42:36.313" Score="1" ViewCount="58" Body="&lt;p&gt;I'd like to drive the position of various components within a virtual assembly based on sensor data being collected in real time from an external device. Does Inventor support such a setup?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The goal is to match the relative movements of the components on screen to the real-world counterpart. For example, a absolute rotary encoder records the current angle of a physical joint and the virtual joint is rotated to match. Is this feasible?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My past searches for information on this have turned up empty; perhaps because I'm using the wrong search terms. Most results point to irrelevant mechanical stress simulations.&lt;/p&gt;&#xA;" OwnerUserId="5692" LastActivityDate="2014-07-08T05:42:36.313" Title="Can active sensor data be fed into an Autodesk Inventor Simulation?" Tags="&lt;sensors&gt;&lt;kinematics&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3210" PostTypeId="1" CreationDate="2014-07-08T06:26:22.683" Score="0" ViewCount="61" Body="&lt;p&gt;I'm thinking of starting my adventure in area of professional manufacturing. When I started to look onto machines I figured out that they are build somehow like in the 70s: huge footprint, big 3kW electric motors etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any explanation why they are build in that way?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only one I can think of is: they were developed long time ago and if it worked, it stays as it is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BTW: If you know other place where to ask this question please let me know!&lt;/p&gt;&#xA;" OwnerUserId="2663" LastActivityDate="2014-07-08T15:19:15.907" Title="Why production lines are so huge and power hungry?" Tags="&lt;manufacturing&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3211" PostTypeId="2" ParentId="3208" CreationDate="2014-07-08T08:10:56.753" Score="2" Body="&lt;p&gt;First a little warning: This answer is one big AFAIK. I have some limited experience with RC electronics and don't know anything about industrial servos, and other simillar stuff :-)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BLDC motors (just motors) don't have any kind of RPM feedback, they are just three sets of coils and a bunch of magnets. The electronics that drives them can do some magic, though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The speed controllers that I have played with are the RC hobby ones, simillar to &lt;a href=&quot;https://hobbyking.com/hobbyking/store/__14630__Turnigy_TrackStar_18A_1_18th_Scale_Brushless_Car_ESC_.html&quot; rel=&quot;nofollow&quot;&gt;this one&lt;/a&gt;. This kind of ESC have very simple interface, only receiving PWM encoded value that they somehow turn to motor speed / torque / who knows what. The general idea is that if you put more PWM, you get more speed, but no exact relation is given. They are meant to be manually controlled to drive RC cars (or planes), so they don't provide any feedback at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The next step are sensored ESCs. These need special sensored BLDC. The sensor in this case are three Hall effect sensors inside the motor, and its output is used to help the ESC drive the motor more precisely (or something like that), giving you more torque (especially when starting the motor from 0rpm), but the interface from the outside world is still just one PWM value going in and no feedback. I was thinking of tapping into the signal from these sensors with my microcontroller, but never tried it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then there are some smarter(?) ESCs like the &lt;a href=&quot;http://open-bldc.org/wiki/Open-BLDC&quot; rel=&quot;nofollow&quot;&gt;OpenBLDC&lt;/a&gt;, that receive commands over I2C or some simillar bus. I have no experience with these at all, but in principle I think it should be able to report some data about how the motor is spining (rotation counts, maybe?).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;RC servos (like &lt;a href=&quot;https://hobbyking.com/hobbyking/store/__662__HXT900_9g_1_6kg_12sec_Micro_Servo.html&quot; rel=&quot;nofollow&quot;&gt;this one&lt;/a&gt; have the same PWM input as the ESC, but here the value corresponds to position and the servo will control itself to keep the position even when externally disturbed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For my robot I'm using a sensorless BLDC with the ESC I linked + a microcontroller with an optical sensor to measure the real motor rotation. Then I use PID to get the PWM input for the ESC. It receives commands like &quot;I want to go at 1500rpm&quot; and returns reports like &quot;the motor rotated 135 degrees since the last report&quot;. I'm not saying this is ideal, but it kind of works.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also careful about the start up (and low RPM operation) of the sensorless BLDCs, it can be really jumpy and unreliable.&lt;/p&gt;&#xA;" OwnerUserId="482" LastActivityDate="2014-07-08T08:10:56.753" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3212" PostTypeId="2" ParentId="2890" CreationDate="2014-07-08T08:18:26.413" Score="1" Body="&lt;p&gt;A specific type of equipment is named 'metering pump' (chemical dosing pump) which can be controlled by PLC, computer, serial link or on-off switch, etc.   These are standard equipment as used in lab., hospital for patient, chemical process control for PCB factory and food-processing factories.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;'Metered' refers to precise control of either or both (one-shot) volume and (continuous) flow-rate, depending on specific mechanical configuration and working principle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;search google will give hundreds of units, from many brands, functions, size, and price. Try look for lab type unit for your 30ml requirement (there are big unit for hundred of litres as in food industry). There are specific types for food, 'harsh chemical (PCB etch)' and even living human/animal blood/fluids.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.google.com/?gws_rd=ssl#q=metered+pump&amp;amp;safe=off&quot; rel=&quot;nofollow&quot;&gt;https://www.google.com/?gws_rd=ssl#q=metered+pump&amp;amp;safe=off&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As original poster questioned price, one may google and get prices listed on some seller's site at much lower cost than original poster's mentioning. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope it helps&lt;/p&gt;&#xA;" OwnerUserId="5582" LastEditorUserId="5582" LastEditDate="2014-07-08T09:37:58.450" LastActivityDate="2014-07-08T09:37:58.450" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3213" PostTypeId="2" ParentId="3200" CreationDate="2014-07-08T10:54:45.247" Score="0" Body="&lt;p&gt;From this page on Bullet's constraints (&lt;a href=&quot;http://bulletphysics.org/mediawiki-1.5.8/index.php/Constraints&quot; rel=&quot;nofollow&quot;&gt;http://bulletphysics.org/mediawiki-1.5.8/index.php/Constraints&lt;/a&gt;), you can clearly create a hinge constraint that is not at the COM of the links it is attached to.  &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;btHingeConstraint(btRigidBody&amp;amp; rbA,btRigidBody&amp;amp; rbB,&#xA;                  const btVector3&amp;amp; pivotInA,&#xA;                  const btVector3&amp;amp; pivotInB,&#xA;                  btVector3&amp;amp; axisInA,&#xA;                  btVector3&amp;amp; axisInB,&#xA;                  bool useReferenceFrameA = false);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Once you set up a constraint like this, the bodies will pivot about this point (relative to each other).  applying a torque to any location on one of the links will have the same affect.  &lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-07-08T10:54:45.247" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3214" PostTypeId="2" ParentId="3210" CreationDate="2014-07-08T15:19:15.907" Score="3" Body="&lt;p&gt;Older manufacturing robots where definitely larger than those available today. One of the biggest things you'll notice when you compare robots from today and years ago is the size of the control box! Just like computers have shrank over the years, robot controller have shrank drastically, even to the point that some manufacturing robots don't have a seperate control box, all the electronics are built into the body of the robot. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just imagine all the power that was required to run a desktop in the 70's and compare that to the little battery in your cell phone...and the cell phone is orders of magnitudes better at crunching numbers! &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That being said, the heavier an object that needs to be picked up is, the larger motors will be required. Electric motor designs have only made small incremental improvements over the years and not much has changed in terms of power density. At the end of the day, torque is proportional to current. There is some promising technology coming from &lt;a href=&quot;http://www.themarysue.com/schaft-robot-prototype/&quot; rel=&quot;nofollow&quot;&gt;humaniod robots&lt;/a&gt; that involves liquid cooling DC motors, that help reduce motor size, but I think power consumption is the same. &lt;/p&gt;&#xA;" OwnerUserId="5695" LastActivityDate="2014-07-08T15:19:15.907" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3215" PostTypeId="2" ParentId="3200" CreationDate="2014-07-08T17:06:16.547" Score="0" Body="&lt;p&gt;I know how set up the constraint. I have it set up, have the control signal and it just do not behave as expected (though it also can be because of some mistake in my calculations). Constraining two bodies like this is just removing some dof to keep them at distance pivotInA, pivotInB and allow only for rotation about set axis. It does not dismiss the fact, that the inertia tensors is calculated for COM, not for the beginning of link. If you look at the methode applyForce (const btVector3 &amp;amp;force, const btVector3 &amp;amp;rel_pos) you can see that it is separated into &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  applyCentralForce(force);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and&lt;br&gt;&#xA;      applyTorque(rel_pos.cross(force*m_linearFactor));&lt;/p&gt;&#xA;&#xA;&lt;p&gt;the offset is taken relative to the COM, you can not just apply a force relative to any other points but to the COM. So, the inertia tensor is wrong, force would be applied with a wrong shoulder, i doubt it is gonna produce the correct result. &lt;/p&gt;&#xA;" OwnerUserId="5697" LastActivityDate="2014-07-08T17:06:16.547" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3216" PostTypeId="1" CreationDate="2014-07-09T03:02:28.843" Score="2" ViewCount="66" Body="&lt;p&gt;I came up with an idea and am working with a mechanical engineer to design and prototype the idea but I keep sketching out my own ideas in the process and I just came up with this.. I'm quite sure this is not an idea he'll go with but I'm just kinda curious whether or not this would actually be feasible.  Or for all I know it's already common place, or totally stupid...  I dunno.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What do you think?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/JtLgo.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="5702" LastActivityDate="2014-07-09T13:53:38.760" Title="Is this gear design feasible?" Tags="&lt;mechanism&gt;&lt;movement&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3217" PostTypeId="2" ParentId="3206" CreationDate="2014-07-09T03:43:44.313" Score="2" Body="&lt;p&gt;I'm using a NEMA23 on my Y axis on my greatly frankensteined MendelMax. The bed was elongated to 350mm along with other upgrades, so I needed the bigger motor. It's running nice and cool at 26 volts on standard Pololu DRV8825 stepper motor controllers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note however that CNC platforms and 3D printer platforms have only three things in common: X, Y, and Z axes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Otherwise, 3D printers tend to want to be very fast (150+ mm/s), very light, low torque, with modest precision (0.1mm is ok). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;CNC mills tend to have a lot more torque, can be much slower (5mm sec would be ok), and would want higher precision (0.01mm).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While many reprap based 3D printer designs use belts for the X+Y axes for their speed (and screws for the Z axis for holding power); most CNC designs tend to use leadscrews on all three (or four) axes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want a machine that can do both, it's best to start out with a CNC design and use leadscrews. Then you can make a very slow but very precise 3D printer.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's much better than a wimpy belt-based CNC machine that won't have enough torque to even mill out plastic.&lt;/p&gt;&#xA;" OwnerUserId="4545" LastActivityDate="2014-07-09T03:43:44.313" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3218" PostTypeId="1" AcceptedAnswerId="4383" CreationDate="2014-07-09T07:37:58.663" Score="2" ViewCount="288" Body="&lt;p&gt;I have a Chinese CNC mill (CNC3020T, though several different devices go under this name), and its Z axis was very imprecise, often being randomly off position by as much as 0.5mm. I've disassembled the linear actuator and discovered several problems with it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First problem is that they apparently forgot to lubricate the linear ball bearings. I make this conclusion because the rails have a set of grooves ground into them, and after wiping the rails with a tissue the only thing that is left is the finely powdered metal, with no traces of oil or other lubricant.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/eIQYD.jpg&quot; alt=&quot;rails&quot;&gt;&#xA;&lt;img src=&quot;https://i.stack.imgur.com/bf2b4.jpg&quot; alt=&quot;bearings&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second problem is the nut. I expected to see a ballnut, but in reality it is just a piece of threaded PTFE! The leadscrew rotates smoothly in it, but there is quite some lateral movement, i.e. I can tilt it slightly without any opposing force.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/8KVRS.jpg&quot; alt=&quot;PTFE nut&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Third problem is the overall mounting. In the picture below, the top left screw has been sheared in the factory and then they hid their mistake by tapping a larger thread and putting in a shorter screw that doesn't actually hold anything in the top plate.  So the whole assembly was fixed in three, rather than four, points. However, the remaining screw was quite tight.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/MSvwB.jpg&quot; alt=&quot;assembly&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my closely related questions are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Is the assembly even salvageable? How do I verify that linear ball bearings, the PTFE nut are relatively undamaged?&lt;/li&gt;&#xA;&lt;li&gt;Can I just rotate the rails by 45° to get smooth surface again?&lt;/li&gt;&#xA;&lt;li&gt;What do I lubricate the linear bearings with? Do I clean them before lubrication? I have an ultrasonic cleaner.&lt;/li&gt;&#xA;&lt;li&gt;Any other advice on maintenance of the whole assembly? There may be something that I missed.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="5705" LastActivityDate="2014-08-08T20:37:38.943" Title="Repairing non-lubricated linear actuator" Tags="&lt;actuator&gt;&lt;linear-bearing&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="3220" PostTypeId="2" ParentId="3208" CreationDate="2014-07-09T07:50:39.760" Score="0" Body="&lt;p&gt;For practice, model quadcopter typically uses sensorless BLDC motor with ESC which are mass produced, low cost and specifically designed for the job (high power, light weight).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Speed control via PWM (pulse width modulation) signal applied to ESC input pin. PWM frequency is fixed. Pulse width vary from a minimum to maximum value which ESC control motor varying from min to max speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This type of ESC creates a rotating magnetic field which the rotor magnet simply follows, &lt;strong&gt;ESC knows the precise speed&lt;/strong&gt; that you can control via the PWM signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sensored ESC provides better performance at low speed (precise speed control down to zero RPM) that may be useful for vehicle but not required for quadcoptor. Sensorless system has non-zero minimum speed.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For theory, a nice free-of-charge &lt;strong&gt;MOCC course&lt;/strong&gt; is&#xA;&lt;a href=&quot;https://courses.edx.org/courses/TUMx/AUTONAVx/2T2014/info&quot; rel=&quot;nofollow&quot;&gt;https://courses.edx.org/courses/TUMx/AUTONAVx/2T2014/info&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are many web and open source projects. Try wiki and follow the external link at bottom. &#xA;&lt;a href=&quot;http://en.wikipedia.org/wiki/Ardupilot&quot; rel=&quot;nofollow&quot;&gt;http://en.wikipedia.org/wiki/Ardupilot&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this helps.&lt;/p&gt;&#xA;" OwnerUserId="5582" LastEditorUserId="5582" LastEditDate="2014-07-09T07:57:52.670" LastActivityDate="2014-07-09T07:57:52.670" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3222" PostTypeId="1" AcceptedAnswerId="4243" CreationDate="2014-07-09T13:35:11.407" Score="2" ViewCount="233" Body="&lt;p&gt;Suppose we have a moving object (&lt;i&gt;a horizontal projectile motion as one of the most basic examples&lt;/i&gt;). Is there any way to predict where it will hit finally? Please note that I'm looking for a machine learning method not a closed form solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although we can track the motion, using Kalman filter, That is only applicable when we want to predict the new future&lt;i&gt;(As far as I'm considered)&lt;/i&gt;. But I need to predict the ultimate goal of a moving object.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To better express the problem let see the following example:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Suppose a goalkeeper robot that of course uses filtering methods to smooth the ball motion. It needs to predict if the ball is going to enter the goal or not, before it decide to catch the ball or neglect it to go out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;b&gt;Input data is a time series of location and velocity [x,y,z,v].&lt;/b&gt;&lt;/p&gt;&#xA;" OwnerUserId="5709" LastEditorUserId="5709" LastEditDate="2014-07-11T09:44:38.800" LastActivityDate="2014-07-15T07:12:58.270" Title="Predicting the impact point of a moving object" Tags="&lt;machine-learning&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3223" PostTypeId="2" ParentId="3216" CreationDate="2014-07-09T13:53:38.760" Score="2" Body="&lt;p&gt;Hmm, thats definitely a unique idea. I think the shape of the top gear would have to be rounded off like half of a torus so it maintains a good interlocking through the motion from parallel to 90 degrees. Also, the motion that the top shaft/gear go through during that transition might not be a simple rotation...it might be a rotation + translation. I'm just speculating, but if that is the case, it would be cumbersome to design the supporting structure for this setup. If it were me, I'd model it up in solidworks and inspect it throughly. I'd be interested in knowing what you find out. &lt;/p&gt;&#xA;" OwnerUserId="5695" LastActivityDate="2014-07-09T13:53:38.760" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3225" PostTypeId="1" AcceptedAnswerId="3226" CreationDate="2014-07-09T18:44:10.180" Score="0" ViewCount="177" Body="&lt;p&gt;I want to make a simple device that causes my cellphone to vibrate for 30 seconds when my phone is 10 feet away from it. How would I go about doing that. How small could I make the device?&lt;/p&gt;&#xA;" OwnerUserId="5712" LastActivityDate="2014-07-09T19:48:46.337" Title="Android Vibrating based on Arduino devices" Tags="&lt;arduino&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3226" PostTypeId="2" ParentId="3225" CreationDate="2014-07-09T19:06:05.720" Score="1" Body="&lt;p&gt;Program a Bluetooth 4 BLE transmitter to send a burst of short data every n seconds. Choose n to balance cell life and response time. Small n, less cell life. The data is dummy data as we need the signal strength only. Use shortest data length to save cell life.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Older transmitter is MCU and BLE chip. Seem newer chip is one chip doing both.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Program a cell phone app to read RSSI signal strength to estimate distance with reasonable accuracy. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;With mass production factory grade tools, facility and know how, size can be 1.2 diameter of coin cell and 3 times height of coin cell, being 1 time for cell, 1 time for electronic and PCB and 1 time for plastic and misc.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Google &quot;child monitor bracelet&quot; to see examples of real commercial products&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this helps&lt;/p&gt;&#xA;" OwnerUserId="5582" LastEditorUserId="5582" LastEditDate="2014-07-09T19:48:46.337" LastActivityDate="2014-07-09T19:48:46.337" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="3231" PostTypeId="1" AcceptedAnswerId="10268" CreationDate="2014-07-09T22:36:20.897" Score="3" ViewCount="1561" Body="&lt;p&gt;I'm working on an application where I need to apply a linear or angular force to operate a linkage mechanism, but I don't (yet) know what amount of force I will need. I anticipate that it will be less than 4.5 kg (44 N). The travel distance on the linkage input should be less than 15 cm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I look through available servos, they seem to exist firmly in the scale-model realm of remote control vehicles, and as such I am uncertain if any will be suitable for my application. For example, one of Futaba's digital servos, the mega-high torque &lt;a href=&quot;http://www.futaba-rc.com/servos/digital.html&quot; rel=&quot;nofollow&quot;&gt;S9152&lt;/a&gt;, is listed at 20 kg/cm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From what I understand, this means that at 1 cm from the center of the servo shaft, I can expect approximately 20 kg force. If I wanted 15 cm of travel distance I would need roughly a 10.6 cm radius, which would diminish the applied force to 20 / 10.6 = 1.9 kg, well below the 4.5 that might be required.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Question:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is my understanding and calculation even remotely accurate? Should I be looking at other types of actuators instead of servos? They seem to become prohibitively expensive above 20 kg/cm torque. &lt;em&gt;(For the purposes of this project, the budget for the actuator is less than $250 US.)&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For my application, I'd like to have reasonable control over intermediate positions across the travel range, good holding power, and fairly fast operation. For this reason I have dismissed the idea of using a linear actuator driven by a gearmotor and worm drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am relatively new to robotics in the usage of motorized actuators, but I've used pneumatic cylinders for many years. For this application, I can't use pneumatics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Per comments, some additional constraints that are important:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Linkage Details:&lt;/strong&gt; The linkage is a planar, one degree-of-freedom, part of a portable system (similar to a scissor lift mechanism). It is for a theatrical effect where the motion is amplified and force reduced (speed ratio and mechanical advantage are &amp;lt; 1).&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Power:&lt;/strong&gt; It will be carried by a person. As such, the actuation needs to be battery-operated, as no tubing or wiring can tether the person. Tubing or wiring that is self-contained is okay. Because this is a portable system, battery-power will be used. The control system will be designed specifically for an appropriate actuator. Rechargeable batteries up to 12V will most likely be employed. Actuators could operate on as high as 24V. Ideally a motor would not exceed 1-2 amperes draw, but as it is not in continuous operation, this is not a hard limit.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Not Pneumatic:&lt;/strong&gt; I've considered pneumatic actuation, using CO2 cartridges, for example, but the client would prefer not to use pneumatics. Also, the ability to stop/hold at intermediate points in the motion range is desirable, and somewhat more complicated to do with pneumatic actuators.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Speed:&lt;/strong&gt; An ideal actuator will be able to move the input coupling 15 cm in 1-2 seconds.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Weight:&lt;/strong&gt; Weight constraints are not well-defined. As it will be carried by a person, it should be moderately lightweight. The actuator itself should probably be less than 1kg, but certainly this can vary. (The rest of the mechanism will probably be 6-8 kg.)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Size:&lt;/strong&gt; The primary size constraint is that everything must fit within a space measuring no more than 500 x 500 x 120 mm (H x W x D). The linkage mechanism extends from and collapses outside the enclosure, parallel to the width.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Noise:&lt;/strong&gt; The quieter the better, but noise is the least priority.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Servos seemed like the best choice for the job, but they don't seem to be available with the sort of torque I need.&lt;/p&gt;&#xA;" OwnerUserId="5713" LastEditorUserId="5713" LastEditDate="2014-07-11T17:22:44.860" LastActivityDate="2016-07-13T16:08:39.103" Title="Up to what force is a servo motor a reasonable choice as an actuator?" Tags="&lt;servomotor&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="3232" PostTypeId="2" ParentId="3207" CreationDate="2014-07-09T22:53:46.593" Score="2" Body="&lt;p&gt;You might want to examine different microphone pickup patterns and determine which is best for your application:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/4bHqb.jpg&quot; alt=&quot;Microphone Pickup Patterns&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most headset microphones are designed using a cardioid or hypercardioid pattern for their noise-cancelling properties. They probably won't be as good for recording sound at a distance of 1 meter, but you can still get cardioid microphones that are useful at such a distance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To understand better some of the design concepts of directional microphones, I recommend checking out &lt;a href=&quot;http://www.eevblog.com/2014/04/20/eevblog-605-fig-8-cardioid-microphone-patterns/&quot; rel=&quot;nofollow noreferrer&quot;&gt;EEVBlog video #605&lt;/a&gt;, which discusses it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As to whether you should use a condenser, dynamic, ribbon, etc. microphone, that depends on the electrical characteristics of your device.&lt;/p&gt;&#xA;" OwnerUserId="5713" LastActivityDate="2014-07-09T22:53:46.593" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="3233" PostTypeId="1" AcceptedAnswerId="4237" CreationDate="2014-07-10T00:54:05.317" Score="1" ViewCount="422" Body="&lt;p&gt;I'm trying to increase the torque on the output shaft of my robot's gearbox.  I have a motor with a pinion attached to it with 8 teeth.  I want to create a gear with 33 teeth that will mesh with the pinion that I currently have.  I've got access to a 3D printer to make the gear, but I don't know how to design the second gear so that it will mesh properly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What parameters do I need to know about the first gear (8 teeth) to ensure that the second gear (33 teeth) will mesh correctly?  How do I translate these parameters into the design of the second gear?&lt;/p&gt;&#xA;" OwnerUserId="2295" LastActivityDate="2014-07-10T19:29:26.630" Title="Designing compatible spur gears for a robot gearbox" Tags="&lt;motor&gt;&lt;differential-drive&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="3234" PostTypeId="1" CreationDate="2014-07-10T02:48:47.597" Score="4" ViewCount="144" Body="&lt;p&gt;Is there any well documented robot interaction language? I would imagine something like taking a user's speech in English, parsing it using some natural language processing like NLTK or Stanford NLP and then building a new sentence understandable by the robot. Does something like this already exists?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I recently found ROILA &lt;a href=&quot;http://roila.org/language-guide/&quot; rel=&quot;noreferrer&quot;&gt;http://roila.org/language-guide/&lt;/a&gt; but it seems like it is a whole different language and not just a reformulation of sentences using English words with less grammatical complexity.&lt;/p&gt;&#xA;" OwnerUserId="4429" LastActivityDate="2018-08-13T16:14:25.383" Title="Robot interaction language" Tags="&lt;speech-processing&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4234" PostTypeId="2" ParentId="3231" CreationDate="2014-07-10T05:23:54.817" Score="1" Body="&lt;p&gt;The motion control parts of this well  documented open sourced project likely suits your specification and cost budget.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It uses mass-produced and widely available 3D printer parts in a re-purposed (different functions) manner.  Stepper motor is sized by a NMEA number. Choose one suits your N.cm specification. also, note the power / current rating of driver. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The scheme is widely scalable. You can use bigger or small motor, gear and belt to achieve a very wide range of force, speed and cost. The scheme (at small size) is widely used in millions of ink jet printers and scanner.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For even higher force, use lead screw. &#xA;Google IMAGE for pcb drilling machine. High end unit drive 100kg load, at 0.01mm accuracy and amazing high speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.google.com/search?safe=off&amp;amp;hl=en&amp;amp;site=imghp&amp;amp;tbm=isch&amp;amp;source=hp&amp;amp;biw=1824&amp;amp;bih=795&amp;amp;q=pcb+drilling+machine&amp;amp;oq=pcb+drilling+machine&amp;amp;gs_l=img.3..0l3j0i5l3j0i24l4.3081.6630.0.9591.20.18.0.2.2.0.119.1541.15j3.18.0....0...1ac.1.48.img..0.20.1534._cNDl940Wms#hl=en&amp;amp;q=lead+screw&amp;amp;safe=off&amp;amp;tbm=isch&quot; rel=&quot;nofollow&quot;&gt;https://www.google.com/search?safe=off&amp;amp;hl=en&amp;amp;site=imghp&amp;amp;tbm=isch&amp;amp;source=hp&amp;amp;biw=1824&amp;amp;bih=795&amp;amp;q=pcb+drilling+machine&amp;amp;oq=pcb+drilling+machine&amp;amp;gs_l=img.3..0l3j0i5l3j0i24l4.3081.6630.0.9591.20.18.0.2.2.0.119.1541.15j3.18.0....0...1ac.1.48.img..0.20.1534._cNDl940Wms#hl=en&amp;amp;q=lead+screw&amp;amp;safe=off&amp;amp;tbm=isch&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.google.com/search?safe=off&amp;amp;hl=en&amp;amp;site=imghp&amp;amp;tbm=isch&amp;amp;source=hp&amp;amp;biw=1824&amp;amp;bih=795&amp;amp;q=pcb+drilling+machine&amp;amp;oq=pcb+drilling+machine&amp;amp;gs_l=img.3..0l3j0i5l3j0i24l4.3081.6630.0.9591.20.18.0.2.2.0.119.1541.15j3.18.0....0...1ac.1.48.img..0.20.1534._cNDl940Wms&quot; rel=&quot;nofollow&quot;&gt;https://www.google.com/search?safe=off&amp;amp;hl=en&amp;amp;site=imghp&amp;amp;tbm=isch&amp;amp;source=hp&amp;amp;biw=1824&amp;amp;bih=795&amp;amp;q=pcb+drilling+machine&amp;amp;oq=pcb+drilling+machine&amp;amp;gs_l=img.3..0l3j0i5l3j0i24l4.3081.6630.0.9591.20.18.0.2.2.0.119.1541.15j3.18.0....0...1ac.1.48.img..0.20.1534._cNDl940Wms&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Choice belt or screw. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Large size belt can suit high force. However, it is 'plastic and soft' and cannot support too high acceleration and rapidly changing speed / acceleration / quick start /sudden stop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lead screw is all-metal and can support very high acceleration. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Large size NMEA stepper motor should be more than sufficient for your loading. If even higher force is needed, us industrial servo motor, tens to a few thousand watts. Precise angle 1000 to 20000 steps of one revolution. This type is over your stated budget and no need for your stated load.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.google.com/search?safe=off&amp;amp;hl=en&amp;amp;site=imghp&amp;amp;tbm=isch&amp;amp;source=hp&amp;amp;biw=1824&amp;amp;bih=795&amp;amp;q=pcb+drilling+machine&amp;amp;oq=pcb+drilling+machine&amp;amp;gs_l=img.3..0l3j0i5l3j0i24l4.3081.6630.0.9591.20.18.0.2.2.0.119.1541.15j3.18.0....0...1ac.1.48.img..0.20.1534._cNDl940Wms#hl=en&amp;amp;q=industrial+servo+motor&amp;amp;safe=off&amp;amp;tbm=isch&quot; rel=&quot;nofollow&quot;&gt;https://www.google.com/search?safe=off&amp;amp;hl=en&amp;amp;site=imghp&amp;amp;tbm=isch&amp;amp;source=hp&amp;amp;biw=1824&amp;amp;bih=795&amp;amp;q=pcb+drilling+machine&amp;amp;oq=pcb+drilling+machine&amp;amp;gs_l=img.3..0l3j0i5l3j0i24l4.3081.6630.0.9591.20.18.0.2.2.0.119.1541.15j3.18.0....0...1ac.1.48.img..0.20.1534._cNDl940Wms#hl=en&amp;amp;q=industrial+servo+motor&amp;amp;safe=off&amp;amp;tbm=isch&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Video&#xA;&lt;a href=&quot;http://www.youtube.com/watch?v=CjzSeOg8oTs&quot; rel=&quot;nofollow&quot;&gt;http://www.youtube.com/watch?v=CjzSeOg8oTs&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Description&#xA;&lt;a href=&quot;http://cienciaycacharreo.blogspot.com.es/2014/02/new-project-air-hockey-robot-3d-printer.html&quot; rel=&quot;nofollow&quot;&gt;http://cienciaycacharreo.blogspot.com.es/2014/02/new-project-air-hockey-robot-3d-printer.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Github for design files&#xA;&lt;a href=&quot;https://github.com/JJulio/AHRobot&quot; rel=&quot;nofollow&quot;&gt;https://github.com/JJulio/AHRobot&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Build manual&#xA;&lt;a href=&quot;https://docs.google.com/document/d/1SXIIW5MG1uT7O6P6tBWwzjiLe_gj4_Z2HHhHXPehwso/edit?pli=1&quot; rel=&quot;nofollow&quot;&gt;https://docs.google.com/document/d/1SXIIW5MG1uT7O6P6tBWwzjiLe_gj4_Z2HHhHXPehwso/edit?pli=1&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this helps&lt;/p&gt;&#xA;" OwnerUserId="5582" LastEditorUserId="5582" LastEditDate="2014-07-10T08:37:18.487" LastActivityDate="2014-07-10T08:37:18.487" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4236" PostTypeId="2" ParentId="3207" CreationDate="2014-07-10T16:48:42.247" Score="0" Body="&lt;p&gt;Best audio needs mic be close, not 1 m away.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consumer grade, 10 to 20 US dollars&#xA;&lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/B00007M1TZ&quot; rel=&quot;nofollow&quot;&gt;http://www.amazon.com/Panasonic-KX-TCA60-Hands-Free-Headband-Cordless/dp/B00007M1TZ/ref=sr_1_6?ie=UTF8&amp;amp;qid=1405009506&amp;amp;sr=8-6&amp;amp;keywords=headset&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Professional Audio (stage, TV station, etc.) grade, 200 US dollars&#xA;&lt;a href=&quot;http://pro.sony.com/bbsc/ssr/cat-audio/cat-wiredmics/product-ECM322BMP/&quot; rel=&quot;nofollow&quot;&gt;http://pro.sony.com/bbsc/ssr/cat-audio/cat-wiredmics/product-ECM322BMP/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Example for very best audio quality in real action&#xA;&lt;a href=&quot;http://www.ted.com/talks/amanda_palmer_the_art_of_asking&quot; rel=&quot;nofollow&quot;&gt;http://www.ted.com/talks/amanda_palmer_the_art_of_asking&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope it helps&lt;/p&gt;&#xA;" OwnerUserId="5582" LastActivityDate="2014-07-10T16:48:42.247" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4237" PostTypeId="2" ParentId="3233" CreationDate="2014-07-10T19:29:26.630" Score="2" Body="&lt;p&gt;To make compatible gears, you need to match the pitch and shape of the teeth.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, check out &lt;a href=&quot;http://en.wikipedia.org/wiki/Gear&quot; rel=&quot;nofollow noreferrer&quot;&gt;this wiki article&lt;/a&gt; about gears and especially &lt;a href=&quot;http://en.wikipedia.org/wiki/Gear#Nomenclature&quot; rel=&quot;nofollow noreferrer&quot;&gt;the image about nomenclature&lt;/a&gt;, so you have a good idea of the names for things:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/f5ADO.png&quot; alt=&quot;Gear Nomenclature&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You first need to determine the pitch of the gear you want to match, the 8-tooth gear. If it has a diameter of say 10 mm, then take the circumference for your new gear (&amp;pi;d = 31.4 mm) and divide by the number of teeth (8) to get a pitch of 3.925 mm. Note that I am using the root circle to calculate diameter, rather than outside circle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Knowing the pitch, multiply by 33 to get the circumference: 129.525 mm. We can now determine the diameter (d = c / &amp;pi;), 41.25 mm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'll need to use the same tooth shape, that is, the angles for the faces and flanks of the teeth, so that the gears mesh well.&lt;/p&gt;&#xA;" OwnerUserId="5713" LastActivityDate="2014-07-10T19:29:26.630" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4238" PostTypeId="1" CreationDate="2014-07-10T20:00:15.883" Score="1" ViewCount="657" Body="&lt;p&gt;I am in charge of studying passage of different species of fish (six species) between lakes in Patagonian Andean range. We've been thinking of deploying video cameras underwater, but we'd need software that would control the cameras and record images only when the video adequately changes so as to avoid having to continuously check the video.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the software is also capable of recognizing the species that would even be better.&lt;/p&gt;&#xA;" OwnerUserId="6723" LastEditorUserId="158" LastEditDate="2014-07-11T12:54:06.173" LastActivityDate="2014-07-11T16:25:46.487" Title="I need a software that will help me track passage and identify fish in clear water" Tags="&lt;software&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4239" PostTypeId="1" CreationDate="2014-07-10T22:26:39.257" Score="4" ViewCount="400" Body="&lt;p&gt;Given a PID controller with an anti-windup, what are some practical ways to retune the controller once oscillation has been caused and detected? I have access to the magnitude and period of the oscillation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't want to use the &lt;a href=&quot;http://en.wikipedia.org/wiki/Ziegler%E2%80%93Nichols_method&quot; rel=&quot;nofollow&quot;&gt;Ziegler-Nichols method&lt;/a&gt;; rather I'd like a method that allows me to specify a phase/gain margin as I am returning the system. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could someone recommend me towards a book/article or theory?&lt;/p&gt;&#xA;" OwnerUserId="6724" LastEditorUserId="2347" LastEditDate="2014-07-11T16:26:08.317" LastActivityDate="2015-01-23T20:47:55.437" Title="Good method for Retuning a PID After Detecting Oscillation" Tags="&lt;control&gt;&lt;pid&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4240" PostTypeId="2" ParentId="4238" CreationDate="2014-07-11T04:31:29.953" Score="1" Body="&lt;p&gt;OpenCV, a portable video library for hosted (e.g. Linux, Windows etc) as well as specialized embedded systems (e.g. Raspberry Pi), has been around for decades and has hundreds of books and tutorials written for it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Use functions to detect: &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;difference between frame&lt;/li&gt;&#xA;&lt;li&gt;calculate the size (of fish)&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Tune to match size of fish and reduce false alarms&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;movement of the 'detected block' (fish, as a group of pixels moving in the same direction)&#xA;&lt;ul&gt;&#xA;&lt;li&gt;helps avoid false detection due to noise (floating leave, rubbish, etc.)&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;OpenCV has template matching and can detect different types of objects under good lighting conditions and pose. It may not work too well in natural setting in your case, but you can try and see.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;OpenCV is a library, not a ready-made application. It is portable and works well in Linux, Windows and other operating systems. There are many high quality tutorials on the web as well as examples.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In all computer vision projects, the computer itself is only half of what matters. Camera, lighting, etc are very important, too. Select a suitable camera, focal length, lighting, etc to get the best possible image quality. If video is EASILY detected by human, computer may be able to do it (for vision, computer is less able than human, but, works 24 hours).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Raspberry Pi has many &quot;tracking&quot; or &quot;counting&quot; projects, such as detecting new people who have just entered a room (note some such projects use opencv some do not) or passed a line. Some examples from YouTube:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=OWab2_ete7s&quot; rel=&quot;nofollow&quot;&gt;People Counter With OPENCV&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=m_Y3Ym5n8Vc&quot; rel=&quot;nofollow&quot;&gt;Real time vehicle counting and velocity estimation using OpenCV&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Learning resources&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://opencv-srf.blogspot.hk/&quot; rel=&quot;nofollow&quot;&gt;http://opencv-srf.blogspot.hk/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.stemapks.com/opencv.html&quot; rel=&quot;nofollow&quot;&gt;http://www.stemapks.com/opencv.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://videolectures.net/icml2010_bradski_ocv/&quot; rel=&quot;nofollow&quot;&gt;http://videolectures.net/icml2010_bradski_ocv/&lt;/a&gt;   [[author of a opencv book]]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are companies selling complete packages for people/vehicle counting or vehicle classification (e.g. car, truck).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can search YouTube further for demos such as this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=tL-cCQkl20Q&quot; rel=&quot;nofollow&quot;&gt;RIVA IP Cameras - People Counting Supermarket&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this helps.&lt;/p&gt;&#xA;" OwnerUserId="5582" LastEditorUserId="5582" LastEditDate="2014-07-11T14:48:33.133" LastActivityDate="2014-07-11T14:48:33.133" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4241" PostTypeId="2" ParentId="4239" CreationDate="2014-07-11T11:12:31.413" Score="0" Body="&lt;p&gt;I'm am just going to mention the two first approaches that came to my mind when reading about your situation. You can change the behavior of a PID controller by adjusting the Kp, Ki and Kd parameters. For doing so, I suggest:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Evolutionary Programming&lt;/li&gt;&#xA;&lt;li&gt;Another PID controller (or three, in fact)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;In both scenarios you will need to be have some idea of what your ideal response would be, for instance using the gain/phase, the amount of overshoot, the number of oscillations - or similar characteristics - as measurements. I have previously experimented with both options, but never implemented either. Also, I do not know if these methods are actually used in practice for auto-tuning PIDs. Good luck. :)&lt;/p&gt;&#xA;" OwnerUserId="2347" LastActivityDate="2014-07-11T11:12:31.413" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4242" PostTypeId="2" ParentId="4238" CreationDate="2014-07-11T16:25:46.487" Score="2" Body="&lt;p&gt;The main difficulty of using openCV to classify fish underwater involves lighting.  Even in clear water, the amount of available light varies wildly with depth, cloud cover, sun position, etc.  Fish prefer not to advertise their presence to any possible predators, so they've evolved to blend into the water column as much as possible.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's not to say it's impossible, but keep in mind that you will be looking for some very low-contrast features.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For simply recording video when there is motion, look for a &quot;video motion detector&quot;.  These analyze the difference between successive frames of video (with some intelligence built in, in some cases) to decide when to record.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-07-11T16:25:46.487" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4243" PostTypeId="2" ParentId="3222" CreationDate="2014-07-11T16:30:59.833" Score="2" Body="&lt;p&gt;Unless you are talking about something higher-order (like learning the behavior of an autonomous agent and predicting how it will move in the future), what you are looking for is to create a simple physics simulator.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It will be closed-form, unless you are asking how to build a system that can &quot;learn&quot; the laws of physics.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="158" LastEditDate="2014-07-11T16:45:30.160" LastActivityDate="2014-07-11T16:45:30.160" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4244" PostTypeId="2" ParentId="3207" CreationDate="2014-07-11T16:35:44.810" Score="0" Body="&lt;p&gt;Most &lt;a href=&quot;http://www.bth.se/fou/cuppsats.nsf/all/eb95114803e5034ec1257a080030948f/$file/BTH2012Naveen.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;laptops&lt;/a&gt;, &lt;a href=&quot;http://www.google.com.ar/patents/US8503691&quot; rel=&quot;nofollow noreferrer&quot;&gt;cell phones&lt;/a&gt;, and &lt;a href=&quot;http://www.clearone.com/uploads/resource/Advanced_Beamforming_Microphone_Array_Technology_for_Corporate_Conferencing_Systems.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;conference phones&lt;/a&gt; actually use an &lt;em&gt;array&lt;/em&gt; of microphones to properly locate the source of the person speaking, and filter out noise that comes from other locations.  This is called &quot;beamforming&quot;, used with a &quot;microphone array&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See also: &lt;a href=&quot;https://robotics.stackexchange.com/a/1625/350&quot;&gt;this answer&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2014-08-05T01:30:34.650" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4246" PostTypeId="2" ParentId="3234" CreationDate="2014-07-11T16:42:59.237" Score="1" Body="&lt;p&gt;This does exist (or will, both eventually and inevitably).  The most relevant project to what you are talking about is &lt;a href=&quot;http://www.princetonai.com/bot/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Eugene&lt;/a&gt; who recently &lt;a href=&quot;http://blogs.telegraph.co.uk/technology/jamiebartlett/100013858/no-eugene-didnt-pass-the-turing-test-but-he-will-soon/&quot; rel=&quot;nofollow noreferrer&quot;&gt;sort of passed the Turing test&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Update: hopefully non-rotting link with up-to-date information &lt;a href=&quot;https://en.wikipedia.org/wiki/Eugene_Goostman&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Eugene_Goostman&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2018-08-13T16:14:25.383" LastActivityDate="2018-08-13T16:14:25.383" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="4247" PostTypeId="1" AcceptedAnswerId="4248" CreationDate="2014-07-11T20:22:05.567" Score="1" ViewCount="457" Body="&lt;p&gt;The propellers of a multicopter produce thrust. Unfortunately the thrust is the smaller, the more the copter is tilted. I was currently wondering whether there is an established method to calculate how much the overall thrust has to be modified to hold the current altitude, based on the current attitude.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the way a calculate the motor output so far. rol/pit/yaw-output already ran through the PIDs. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;// Calculate the speed of the motors&#xA;int_fast16_t iFL = rcthr + rol_output + pit_output - yaw_output;&#xA;int_fast16_t iBL = rcthr + rol_output - pit_output + yaw_output;&#xA;int_fast16_t iFR = rcthr - rol_output + pit_output + yaw_output;&#xA;int_fast16_t iBR = rcthr - rol_output - pit_output - yaw_output;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="4080" LastActivityDate="2014-07-11T22:09:38.547" Title="Tilt-compensated motor output to keep altitude for quadcopter" Tags="&lt;quadcopter&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4248" PostTypeId="2" ParentId="4247" CreationDate="2014-07-11T22:09:38.547" Score="2" Body="&lt;p&gt;The thrust vector is given by $f = qRg$ where $q$ is the magnitude of the thrust vector, $R$ is the rotation matrix for the current attitude and $g$ is the gravity vector in world coords, i.e. $[0~0~\pm1]^T$. Expanding $R$ for the ZYX Euler angles usually used for quadrotors, we have&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\&#xA;\begin{align}&#xA;R &amp;amp;= \begin{bmatrix}&#xA;c_\psi c_\theta		&amp;amp; c_\psi s_\theta s_\phi - c_\phi s_\psi		&amp;amp; s_\psi s_\phi + c_\psi c_\phi s_\theta \\&#xA;c_\theta s_\psi 	&amp;amp; c_\psi c_\phi + s_\psi s_\theta s_\phi		&amp;amp; c_\phi s_\psi s_\theta - c_\psi s_\phi \\&#xA;-s_\theta		&amp;amp; c_\theta s_\phi					&amp;amp; c_\theta c_\phi&#xA;\end{bmatrix}&#xA;\end{align}&#xA;$$&#xA;where $\phi$ is the roll angle, $\theta$ is the pitch angle, and $\psi$ is the yaw angle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For simplicity, assume $\psi=0$ since it doesn't affect the vertical lift force. Multiplying $Rg$ and looking at just the vertical component we have&#xA;$$&#xA;f_z = q c_\theta c_\phi&#xA;\\&#xA;q = \frac{f_z}{c_\theta c_\phi}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So just plug in your desired lift force (e.q. mass*gravity) and use your current roll and pitch angles to get the needed total thrust force.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2014-07-11T22:09:38.547" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4253" PostTypeId="2" ParentId="3234" CreationDate="2014-07-14T10:49:18.267" Score="1" Body="&lt;p&gt;Speech recognition is a pretty vast problem, if you are simply wanting to command a robot using your voice, a lot of ROS users use &lt;a href=&quot;http://wiki.ros.org/pocketsphinx&quot; rel=&quot;nofollow&quot;&gt;Pocket Sphinx&lt;/a&gt;. You'll have to teach the program all the words, sentences or phrases you want it to recognize, but there are built-in tools that make this easy. It's also straight forward to teach it multiple phrases that mean the same thing, for example: come here, get over here, heel boy, etc. There is a nice example of how to use it in the &lt;em&gt;ROS by Example&lt;/em&gt; book if you can get your hands on a copy. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're not using ROS, Pocket Sphinx is actually independent of ROS, that link just points to the ROS wrapper, I've never used it outside of ROS. &lt;/p&gt;&#xA;" OwnerUserId="5695" LastActivityDate="2014-07-14T10:49:18.267" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4255" PostTypeId="1" AcceptedAnswerId="5004" CreationDate="2014-07-14T11:36:54.657" Score="1" ViewCount="81" Body="&lt;p&gt;Is there any software where I can simulate production line elements (joints, motors, springs, actuators, movement)? For example I want to simulate mechanism to unwind paper from big roll to weld it later with bubble foil and finally make bubble foil envelope, mechanism will look like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/WVROy.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/WVROy.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need it as simple as possible and preferably free.&lt;/p&gt;&#xA;" OwnerUserId="2663" LastEditorUserId="11178" LastEditDate="2015-11-29T08:58:02.190" LastActivityDate="2015-11-29T08:58:02.190" Title="Software to simulate mechanics of production line" Tags="&lt;mechanism&gt;&lt;simulator&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4256" PostTypeId="1" CreationDate="2014-07-14T17:30:01.360" Score="4" ViewCount="616" Body="&lt;p&gt;I have a differential drive robot whose motors are virtually quiet while driving on a completely flat surface, but the motors make a lot of noise when on a incline. This is likely due to the correction required to maintain speed with the high inertial load where the robot cannot accelerate fast enough for the PID to keep up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I noticed that some of the noise is related to acceleration, and the higher the acceleration, the smaller the amount of noise I hear, or the smaller the time the same level of noise lasts (up to a certain acceleration limit, otherwise the motors get really noisy again).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am trying to find out of how to use an IMU that I have a available in order to change the acceleration based on how steep the path's incline is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any documentation (papers, tutorials, etc) about motion planning related to this topic that you can point me to?&lt;/p&gt;&#xA;" OwnerUserId="4269" LastEditorUserId="350" LastEditDate="2014-07-19T18:09:36.327" LastActivityDate="2015-08-14T11:11:47.503" Title="IMU based acceleration parameters for differential drive robot" Tags="&lt;ros&gt;&lt;imu&gt;&lt;differential-drive&gt;&lt;noise&gt;" AnswerCount="2" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="4257" PostTypeId="2" ParentId="4256" CreationDate="2014-07-14T17:48:42.537" Score="1" Body="&lt;p&gt;Plan A: get IMU chip and read the raw register data. Read data is easy. Using data is hard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Plan B: use FreeIMU library that does 'data fusion' that combine raw data from multiple sensors and present user with a much reliable, stable and easy-to-use data in a roll, pitch yaw format.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;FreeIMU&#xA;&lt;a href=&quot;http://www.varesano.net/projects/hardware/FreeIMU&quot; rel=&quot;nofollow&quot;&gt;http://www.varesano.net/projects/hardware/FreeIMU&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(about 60% toward the end) Video showing roll, pitch and yaw as displayed on pc screen&#xA;&lt;a href=&quot;https://www.youtube.com/watch?v=4Dmbr4XDnSM&quot; rel=&quot;nofollow&quot;&gt;https://www.youtube.com/watch?v=4Dmbr4XDnSM&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are dozens of similar videos. like&#xA;&lt;a href=&quot;https://www.youtube.com/watch?v=jSUULyOchKY&quot; rel=&quot;nofollow&quot;&gt;https://www.youtube.com/watch?v=jSUULyOchKY&lt;/a&gt;     which explain a bit about the working principle, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Use Arduino MCU board as it is low cost and has plenty examples.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this helps&lt;/p&gt;&#xA;" OwnerUserId="5582" LastActivityDate="2014-07-14T17:48:42.537" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4258" PostTypeId="2" ParentId="2868" CreationDate="2014-07-14T21:48:32.117" Score="2" Body="&lt;p&gt;&lt;strong&gt;At the foundation of PID control, there is the assumption that the quantity you are measuring (and using to compute your error) has a direct linear relationship with the quantity you are controlling.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In practice, people frequently bend this rule without things going horribly wrong. In fact this resiliency to modeling error--when our assumptions (our &quot;model&quot;) do not match exactly to the real system--is one of the reasons PID control is such a popular and commonly used technique.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your case, what you are measuring is distances between your robot and the walls, and what you are controlling is the speed of your motors. So your question really boils down to &lt;strong&gt;&quot;How can we describe a (hopefully) linear relationship between these quantities?&quot;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First off, we have to deal with the fact that we have at least six different numbers floating around (four sensor measurements and at least two motor speeds), when we'd really like to have just one, to make a simple SISO (Single Input Single Output) PID controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the motors, one way we can accomplish that is by choosing to use the &lt;em&gt;difference&lt;/em&gt; between the motor speeds as our control quantity. We will have to control overall speed separately, but it makes steering a lot easier this way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\omega = R_\text{wheel speed}-L_\text{wheel speed}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next, for combining the range sensor inputs we have a number of different options to choose from. Which one is best for a given situation will depend a lot on the geometry of the robot and where the sensors are pointing. For now, let's just assume we can boil it down to a DISTANCE_LEFT and DISTANCE_RIGHT that tells us how far away the walls are on either side. We can then take the &lt;em&gt;difference&lt;/em&gt; and use that as our &quot;error&quot; measurement. Minimizing this error makes the distance to either wall equal and keeps us centered in the hall. So far, so good.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;error = RIGHT_DISTANCE - LEFT_DISTANCE&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/ADPvY.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now for the part where we bend the rules. When we chose to use the difference between left and right motor speeds as our control variable, what we were in effect doing is controlling the &lt;em&gt;angular rate&lt;/em&gt; of our robot. The relationship between angular rate and us being centered in the hallway goes something like this:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;angular rate --&gt; {&lt;em&gt;integration over time&lt;/em&gt;} --&gt; robot heading angle --&gt;&#xA;  {&lt;em&gt;cosine of heading angle&lt;/em&gt; * &lt;em&gt;forward movement speed&lt;/em&gt;} --&gt; movement speed&#xA;  toward or away from the hallway center --&gt; {&lt;em&gt;integration over time&lt;/em&gt;} --&gt;&#xA;  robot position in the hallway&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yikes! That does not look linear. What do we do? Well, we can do what all good engineers do when faced with a complex math problem. We approximate. ;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, if the robot is facing in roughly the direction down the hall that we would like it to go, we can make the claim that our robot's heading (for small heading angles) is (approximately) linearly proportional to it's movement speed toward or away from the hallway center. Now we have:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;angular rate --&gt; {&lt;em&gt;integration over time&lt;/em&gt;} --&gt; robot heading angle --&gt;&#xA;  {&lt;em&gt;approx. linear&lt;/em&gt;} --&gt; movement speed toward or away from the hallway&#xA;  center --&gt; {&lt;em&gt;integration over time&lt;/em&gt;} --&gt; robot position in the hallway&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Better, but we're not there yet. We still have those integration operations to deal with. This is where it gets complicated. I'll see about filling out this answer more later, but for now I'll say that the reason this PID controller (might) still work has to do with (a.) the integral and derivative terms in the controller and (b.) interaction between the controller and the dynamic equations governing the motion of the robot itself.&lt;/p&gt;&#xA;" OwnerUserId="5655" LastEditorUserId="5655" LastEditDate="2014-07-14T23:36:40.290" LastActivityDate="2014-07-14T23:36:40.290" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4260" PostTypeId="2" ParentId="3222" CreationDate="2014-07-15T07:12:58.270" Score="1" Body="&lt;p&gt;Ball catching - which I believe should cover your intention - has been investigated a fair bit in robotics. There is some nice work on this from Udo Frese, which has been demonstrated on DLR's two arm humanoid Justin. They use a multi hypothesis filter to track the ball, and predict the landing [1]. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using the laws of physics will make it easier for you, and you should get a good enough accuracy. I would start out with something that is already working. Using a learning approach you could definitely enhance on the result. You could for example use the difference of your initial prediction with the final result as a signal for a reinforcement learning approach. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;[1] &lt;a href=&quot;http://elib.dlr.de/74466/1/Birbach2011.pdf&quot; rel=&quot;nofollow&quot;&gt;Birbach, Oliver, Udo Frese, and B. Bauml. &quot;Realtime perception for catching a flying ball with a mobile humanoid.&quot; Robotics and Automation (ICRA), 2011 IEEE International Conference on. IEEE, 2011.&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="127" LastActivityDate="2014-07-15T07:12:58.270" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4261" PostTypeId="1" CreationDate="2014-07-15T08:10:01.917" Score="3" ViewCount="180" Body="&lt;p&gt;I am doing stereo camera calibration as described in &lt;a href=&quot;http://blog.martinperis.com/2011/01/opencv-stereo-camera-calibration.html&quot; rel=&quot;nofollow&quot;&gt;this blog post&lt;/a&gt;. I wonder I do not need to input camera baseline for the calibration. The fact probably goes back to some very basic mathematics of triangulation. Can someone explain?&lt;/p&gt;&#xA;" OwnerUserId="1021" LastActivityDate="2014-07-15T11:23:36.743" Title="Stereo camera baseline not needed for calibration?" Tags="&lt;computer-vision&gt;&lt;calibration&gt;&lt;stereo-vision&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4262" PostTypeId="2" ParentId="4261" CreationDate="2014-07-15T09:02:46.207" Score="2" Body="&lt;p&gt;The baseline is an output parameter of the calibration. What the calibration needs to know is the size of your calibration object. How it works is to find the transformation between the two views, and reduce the overall error for multiple views. The transformation is both the rotation and the translation. The translation in this case is the baseline. &lt;/p&gt;&#xA;" OwnerUserId="127" LastEditorUserId="127" LastEditDate="2014-07-15T11:23:36.743" LastActivityDate="2014-07-15T11:23:36.743" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4263" PostTypeId="1" AcceptedAnswerId="4264" CreationDate="2014-07-15T11:11:32.153" Score="0" ViewCount="829" Body="&lt;p&gt;I'm searching for a python toolbox/library to do visibility graph based motion planning. I have searched on the internet, but couldn't find anything. I'm probably missing out...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any package, you can recommend me?&lt;/p&gt;&#xA;" OwnerUserId="3782" LastActivityDate="2014-07-15T12:54:42.693" Title="Visibility Graph Toolbox for Python" Tags="&lt;motion-planning&gt;&lt;python&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ClosedDate="2014-08-02T09:19:30.103" ContentLicense="CC BY-SA 3.0" />
  <row Id="4264" PostTypeId="2" ParentId="4263" CreationDate="2014-07-15T12:54:42.693" Score="3" Body="&lt;p&gt;The &lt;a href=&quot;http://www.visilibity.org/&quot; rel=&quot;nofollow&quot;&gt;VisiLibity&lt;/a&gt; implementation appears to have python bindings.&lt;/p&gt;&#xA;" OwnerUserId="5695" LastActivityDate="2014-07-15T12:54:42.693" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="4265" PostTypeId="1" CreationDate="2014-07-15T17:36:06.703" Score="1" ViewCount="659" Body="&lt;p&gt;How to determine the limit range of end effector orientation (Roll-Pitch-Yaw) at one specific point(XYZ)?I had derived Forward/Inverse kinematic. I'm making a program for 6DOF articulated robot arm so that the user can know the limit of tool rotation in Global axis(Roll-Pitch-Yaw) at a certain point.&lt;/p&gt;&#xA;" OwnerUserId="6748" LastEditorUserId="350" LastEditDate="2014-07-19T17:48:23.343" LastActivityDate="2014-07-27T03:01:09.330" Title="Determing limits of rotation in a robot workspace" Tags="&lt;robotic-arm&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4266" PostTypeId="1" CreationDate="2014-07-15T19:33:24.087" Score="1" ViewCount="386" Body="&lt;p&gt;Is there a standard format of how stereo calibration data (various matrices, usually saved in XML) are stored? Can I load calibration data generated say from a OpenCV script in C to another OpenCV script say in C++ or to completely different software where I create disparity image?&lt;/p&gt;&#xA;" OwnerUserId="1021" LastEditorUserId="1021" LastEditDate="2014-07-15T19:44:55.217" LastActivityDate="2014-07-16T06:53:30.543" Title="Are stereo camera calibration data standardized?" Tags="&lt;computer-vision&gt;&lt;calibration&gt;&lt;stereo-vision&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4267" PostTypeId="2" ParentId="4265" CreationDate="2014-07-15T23:19:29.100" Score="1" Body="&lt;p&gt;The kinematic answer to this question is pretty complex, but I'll answer it in the way in which I would attack this problem. If you're trying to understand the math behind what is going on, this might not be the answer you're looking for:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know if you're familiar with &lt;a href=&quot;http://openrave.org/&quot; rel=&quot;nofollow&quot;&gt;OpenRAVE&lt;/a&gt;, but it is a really nice project that has a tool called &lt;a href=&quot;http://openrave.org/docs/latest_stable/openravepy/ikfast/&quot; rel=&quot;nofollow&quot;&gt;IKFast&lt;/a&gt;. IKFast is a tool that [attempts to] provides automated analytical inverse kinematic solutions to any serial manipulator. OpenRAVE has built many very useful tools around their ability to create analytical solutions, one of which is the ability produce all the possible joint space solutions to a workspace pose. This &lt;a href=&quot;http://openrave.org/docs/latest_stable/openravepy/examples.tutorial_iksolutions/&quot; rel=&quot;nofollow&quot;&gt;example&lt;/a&gt; shows what I'm talking about. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;All you have to do is create a model of your robot that is &lt;a href=&quot;http://openrave.programmingvision.com/wiki/index.php/Format:XML&quot; rel=&quot;nofollow&quot;&gt;OpenRAVE friendly&lt;/a&gt; and run that example which spits out an array of joint value arrays that correspond to all the possible solutions to the pose. There is a &lt;a href=&quot;http://wiki.ros.org/collada_urdf&quot; rel=&quot;nofollow&quot;&gt;tool&lt;/a&gt; that converts ROS's urdf models to openRAVE models in case you're already using ROS. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I realize there is a programming learning curve to learning OpenRAVE but I believe that curve is much easier to overcome than the curve associated with understanding the complexities of analyzing the inverse kinematics of a robot arm manually. Not to mention, when you solve the kinematics of an arm, its only good for that particular arm. But if you learn how to do this using OpenRAVE, you will be able to do it quickly with almost any arm in the future. &lt;/p&gt;&#xA;" OwnerUserId="5695" LastActivityDate="2014-07-15T23:19:29.100" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4269" PostTypeId="2" ParentId="4266" CreationDate="2014-07-16T06:53:30.543" Score="3" Body="&lt;p&gt;The short answer is no.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can use the XML output file within OpenCV's ecosystem (and ROS), but there are no standard formats for calibration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The issue is not coming up with a standard. Camera intrinsic calibration models differ in their modeling of lens distortion, due to different lenses and different application settings.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are using a calibration obtained from OpenCV, I'd highly recommend making sure you read calibration documentations before plugging in the values into another package.&lt;/p&gt;&#xA;" OwnerUserId="911" LastActivityDate="2014-07-16T06:53:30.543" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4270" PostTypeId="1" CreationDate="2014-07-16T11:29:01.310" Score="1" ViewCount="622" Body="&lt;p&gt;I've been looking for ideas on how to launch a ping pong ball a small distance (&amp;lt; 1 metre) for a game. Solenoids look like they might be useful but I'm not 100% on what force/type I need. I can mount it under a base and have the balls roll over it, with a pin pushing the ball up a ramp to it's target.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As it's only a ping pong ball, it should be light. I was considering something like this: &lt;a href=&quot;http://www.adafruit.com/product/412&quot; rel=&quot;nofollow&quot;&gt;http://www.adafruit.com/product/412&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Am I along the right lines? Or should I go back to the drawing board.&lt;/p&gt;&#xA;" OwnerUserId="6755" LastActivityDate="2014-07-19T00:21:14.773" Title="Solenoid to launch a ping pong ball" Tags="&lt;motor&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4271" PostTypeId="1" CreationDate="2014-07-16T16:52:32.367" Score="0" ViewCount="1836" Body="&lt;p&gt;I am currently building a line-following mobile robot. I've done all my image processing work in C#, and now I am in the control phase. I am looking for a PD controller program written in C# to start with. I've searched a lot but without success. My robot is not an Arduino based, it has a motherboard with a Core i3 CPU, and I am using a Camera not an LDR sensor.&lt;/p&gt;&#xA;" OwnerUserId="5606" LastEditorUserId="158" LastEditDate="2014-07-17T08:22:47.733" LastActivityDate="2014-07-17T09:03:06.807" Title="PD controller in C#" Tags="&lt;control&gt;&lt;algorithm&gt;" AnswerCount="2" CommentCount="1" ClosedDate="2014-08-02T09:32:58.430" ContentLicense="CC BY-SA 3.0" />
  <row Id="4272" PostTypeId="2" ParentId="4271" CreationDate="2014-07-16T17:19:52.293" Score="1" Body="&lt;p&gt;You may take a look at this library running on Arduino in 'standard' C.  The author has a line by line explanation on his blog. Hence, easy to change to other system as needed.  See the blog for the autotune utility too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PID&#xA;&lt;a href=&quot;http://playground.arduino.cc/Code/PIDLibrary&quot; rel=&quot;nofollow&quot;&gt;http://playground.arduino.cc/Code/PIDLibrary&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Full description by author&#xA;&lt;a href=&quot;http://brettbeauregard.com/blog/2011/04/improving-the-beginners-pid-introduction/&quot; rel=&quot;nofollow&quot;&gt;http://brettbeauregard.com/blog/2011/04/improving-the-beginners-pid-introduction/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the way, you need analogue reading (no just on and off) on the line. That is, analogue of 512 out of 1023 menas the sensor is at 50% edge of the line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Advanced use can detect the analogue signal from the sensor diode,&#xA;giving an continuous reading on the &quot;percentage of hitting the&#xA;white/black line&quot;.  (says, n% of voltage is, as tested by experiment,&#xA;is 60% on line and 40% outside the line).  This analogue input can use&#xA;PID control to provide smooth and continuous (no just on and off) and&#xA;provide best optimal drive speed as in the enclosed video.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is 3PI, showing the analogue reading from 5 sensors, note the&#xA;initial spinning for the robot to calibrate through n% of crossing the&#xA;line and analogue reading from sensors.  If 2 sensors reading 50%, the&#xA;line is at the middle between the 2 sensors.&#xA;&lt;a href=&quot;https://www.youtube.com/watch?v=ylyRi1Qlbl0&amp;amp;feature=player_embedded&quot; rel=&quot;nofollow&quot;&gt;https://www.youtube.com/watch?v=ylyRi1Qlbl0&amp;amp;feature=player_embedded&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See page 18 pf 3pi manual  &lt;a href=&quot;http://www.pololu.com/docs/pdf/0J21/3pi.pdf&quot; rel=&quot;nofollow&quot;&gt;http://www.pololu.com/docs/pdf/0J21/3pi.pdf&lt;/a&gt;  for a very clever use of IO pins.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The sensor can be read WITHOUT ADC converter.  This method is widely&#xA;used in mass produced consumer electronic, as i worked for factory,&#xA;where high resolution (16 bits) is needed and the reading speed is ms&#xA;range or slower (1 to 10ms or slower). MCU only has 10 to 12 bits high&#xA;speed ADC and this circuit give higher resolution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fast example&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Product&#xA;&lt;a href=&quot;https://www.youtube.com/watch?v=6ENIiMv7LvM&quot; rel=&quot;nofollow&quot;&gt;https://www.youtube.com/watch?v=6ENIiMv7LvM&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this helps&lt;/p&gt;&#xA;" OwnerUserId="5582" LastActivityDate="2014-07-16T17:19:52.293" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4274" PostTypeId="2" ParentId="4271" CreationDate="2014-07-17T09:03:06.807" Score="4" Body="&lt;p&gt;Your problem is not the &lt;a href=&quot;https://en.wikipedia.org/wiki/PID_controller&quot; rel=&quot;nofollow noreferrer&quot;&gt;P[I]D controller&lt;/a&gt;, but extracting control parameters from your system. A PID controller by itself is something like this (assuming a periodic control task):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/* 1. get current position */&#xA;cur_position = get_current_position();&#xA;&#xA;/* 2. calculate error */&#xA;err = goal_position - cur_position;&#xA;&#xA;/* 3. calculate the output */&#xA;proportional = Kp * err;&#xA;derivative = Kd * (err - last_err);&#xA;integral = Ki * (last_sum + err);&#xA;output = proportional + derivative + integral;&#xA;&#xA;/* 4. keep history */&#xA;last_sum += err;&#xA;last_err = err;&#xA;&#xA;/* 5. apply control output */&#xA;apply_control_output(output);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where &lt;code&gt;last_sum&lt;/code&gt; and &lt;code&gt;last_err&lt;/code&gt; are persistent (they are defined outside the scope of the control loop, e.g. they are global or are a class member or on stack of caller who's calling the control task in a loop). In a PD controller, &lt;code&gt;Ki&lt;/code&gt; is zero.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now steps 2 through 4 are very simple and probably that code runs on any C-derived language without modification. Needless to say, the control parameters &lt;code&gt;Kp&lt;/code&gt;, &lt;code&gt;Kd&lt;/code&gt; and &lt;code&gt;Ki&lt;/code&gt; need to be tuned to your application (which is a problem of its own, but in this case you can just fiddle with it to get a good idea (hint: &lt;code&gt;Ki&lt;/code&gt; is really small)). The problem is thus steps 1 and 5. Step 1 depends on your input and step 5 depends on your output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In step 1, you need to get an image from your camera, process it and understand how far off you are from the line. That would be your position. Note that you may also like to extract the direction of the line, in which case steps 2 through 4 could be done on 2D data! But PID rather sucks anyway and a line-following robot is not a serious application either, so you may not want to bother with that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's take an example.  Imagine you see the following image on your camera:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/qABCO.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One simple way to calculate your position with respect to the line would be to take the distance &lt;code&gt;d&lt;/code&gt; from the center of the image to the line that needs to be followed (or to its tangent if its curved):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/bJgSU.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this case, your &lt;code&gt;cur_position&lt;/code&gt; would be &lt;code&gt;d&lt;/code&gt; (which would be negative if it's on the other side of the line) and your &lt;code&gt;goal_position&lt;/code&gt; would be 0.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a very simplistic solution and likely the robot may move in a weird way, since it doesn't take direction into account. If you think of the robot position as the pair of data containing distance from line and direction of line (its angle with respect to a vertical line), your goal would also be to make that &lt;code&gt;(0, 0)&lt;/code&gt;. This still doesn't take non-smooth lines in consideration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That done, step 5 remains. Step 5 takes the output of the controller and makes the robot follow it. This of course depends on how the robot acts. For example, if your robot has two speed-controllable wheels in the front and a passive omnidirectional one in the back for balance, then you need to tell the motors turning the wheels to maintain what speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, if the &lt;code&gt;output&lt;/code&gt; parameter is positive, it may mean that you are on the right side of the line. What you need would be then to turn left. To do that, you can set a higher speed for the right wheel and a lower speed. The higher the &lt;code&gt;output&lt;/code&gt;, the higher the ratio of speed between the two wheels.&lt;/p&gt;&#xA;" OwnerUserId="158" LastActivityDate="2014-07-17T09:03:06.807" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4276" PostTypeId="2" ParentId="4270" CreationDate="2014-07-18T10:28:14.130" Score="0" Body="&lt;p&gt;Solenoids comes at different size and power.  Big one are in home washing machine to control water drainage, so, can be very powerful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This project bounces steel pin ball. More than likely, it can do ping pong, given choosing appropriate size/force model of solenoids (the seller you mentioned has 2 sizes, as a good start. May be, you can ask the seller to try out for you, before you buy). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;video in &#xA;&lt;a href=&quot;http://pinballchameleon.blogspot.hk/2013/04/the-modern-firepower-pinball-project_24.html#more&quot; rel=&quot;nofollow&quot;&gt;http://pinballchameleon.blogspot.hk/2013/04/the-modern-firepower-pinball-project_24.html#more&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Enlarge 200% to see many solenoids of various sizes&#xA;&lt;a href=&quot;http://pinballchameleon.blogspot.hk/2013_03_01_archive.html&quot; rel=&quot;nofollow&quot;&gt;http://pinballchameleon.blogspot.hk/2013_03_01_archive.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Try Google Image search &quot;pinball machine solenoid&quot;&#xA;&lt;a href=&quot;https://www.google.com/search?safe=off&amp;amp;hl=en&amp;amp;site=imghp&amp;amp;tbm=isch&amp;amp;source=hp&amp;amp;biw=1764&amp;amp;bih=795&amp;amp;q=pinball+machine&amp;amp;oq=pin+ball+&amp;amp;gs_l=img.1.0.0i10l4j0j0i10l2j0i5l3.1434.3287.0.8985.9.9.0.0.0.0.174.751.7j2.9.0....0...1ac.1.49.img..0.9.739.-wtYmiDZYSI#hl=en&amp;amp;q=pinball+machine+solenoid&amp;amp;safe=off&amp;amp;tbm=isch&quot; rel=&quot;nofollow&quot;&gt;https://www.google.com/search?safe=off&amp;amp;hl=en&amp;amp;site=imghp&amp;amp;tbm=isch&amp;amp;source=hp&amp;amp;biw=1764&amp;amp;bih=795&amp;amp;q=pinball+machine&amp;amp;oq=pin+ball+&amp;amp;gs_l=img.1.0.0i10l4j0j0i10l2j0i5l3.1434.3287.0.8985.9.9.0.0.0.0.174.751.7j2.9.0....0...1ac.1.49.img..0.9.739.-wtYmiDZYSI#hl=en&amp;amp;q=pinball+machine+solenoid&amp;amp;safe=off&amp;amp;tbm=isch&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope it helps&lt;/p&gt;&#xA;" OwnerUserId="5582" LastActivityDate="2014-07-18T10:28:14.130" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4277" PostTypeId="1" CreationDate="2014-07-18T10:43:20.293" Score="4" ViewCount="2098" Body="&lt;p&gt;A screw is defined by a six dimensional vector of forces and torques. It can represent any spatial movement of a rigid body (&lt;a href=&quot;https://en.wikipedia.org/wiki/Screw_theory#Basic_concepts&quot; rel=&quot;nofollow&quot;&gt;as written here&lt;/a&gt;). But I don't get the following distinction between screw and wrench: &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The force and torque vectors that arise in applying Newton's laws to a rigid body can be assembled into a screw called a &lt;strong&gt;wrench&lt;/strong&gt;. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It seems to be some kind of contextualisation but in what way?&lt;/p&gt;&#xA;" OwnerUserId="6769" LastEditorUserId="10414" LastEditDate="2021-01-25T16:23:37.233" LastActivityDate="2021-01-25T16:23:37.233" Title="What is the difference between screw and wrench in rigid body motion?" Tags="&lt;dynamics&gt;&lt;theory&gt;&lt;screw-theory&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4278" PostTypeId="2" ParentId="4277" CreationDate="2014-07-18T12:11:05.287" Score="4" Body="&lt;p&gt;I will try to make it as simple as possible. Imagine you have a SCREW, when you WRENCH it, it TWIST forward or backward.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From your wiki link&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The components of the screw define the Plücker coordinates of a line in space and the magnitudes of the vector along the line and moment about this line.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It means that any system can be described as those coordinate system is a screw. For example a normal screw has it axis and it pitch. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A WRENCH is one case of SCREW where the act (force or torque) have the axis and yield a movement (translation or rotation)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can have a look at the slide of &lt;a href=&quot;http://www.dimec.unige.it/PMAR/summer_screws/SS09/PDF/Part1/SS09-Zlatanov.pdf&quot; rel=&quot;nofollow&quot;&gt;the Summer Screw Summer School&lt;/a&gt; for more detail.&lt;/p&gt;&#xA;" OwnerUserId="372" LastEditorUserId="134" LastEditDate="2014-08-02T09:33:44.607" LastActivityDate="2014-08-02T09:33:44.607" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4279" PostTypeId="2" ParentId="4277" CreationDate="2014-07-18T12:27:09.000" Score="1" Body="&lt;p&gt;Summarizing from &lt;a href=&quot;http://www.cds.caltech.edu/~murray/mlswiki/index.php/Main_Page&quot; rel=&quot;nofollow&quot;&gt;Murray, Li, and Sastry&lt;/a&gt; (chapters 3 and 5) there are 3 related things:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Twist: An element of se(3) (which is a bit like the derivative of an element of SE(3), which is the set of translations + rotations)&lt;/li&gt;&#xA;&lt;li&gt;Screw: A translation+rotation (i.e. and element of SE(3))&lt;/li&gt;&#xA;&lt;li&gt;Wrench: Generalized force (combination of linear force and torque)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2014-07-18T12:27:09.000" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4280" PostTypeId="2" ParentId="4270" CreationDate="2014-07-19T00:21:14.773" Score="1" Body="&lt;p&gt;A solenoid would be similar to the spring mechanism that's used in pinball machines.  You may have some trouble actuating it to produce exactly the same amount of force every time, however.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might consider using the solenoid to push the ping pong ball toward a wheel that is rotating at the desired speed, just like a pitching machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/2/24/Pitching_machine.jpg&quot; alt=&quot;pitching machine&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="-1" LastEditDate="2017-03-10T09:42:49.227" LastActivityDate="2014-07-19T00:21:14.773" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4281" PostTypeId="1" AcceptedAnswerId="4284" CreationDate="2014-07-19T01:14:31.850" Score="1" ViewCount="138" Body="&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/J9yMY.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Held and rotated by the knurled ends, one in each hand, the silver spokes rise and fall in order for the assembly to rotate. What is it, some companies' salesmen show tool? Found in an old building, unit has no markings.&lt;/p&gt;&#xA;" OwnerUserId="6772" LastEditorUserId="37" LastEditDate="2017-06-13T11:17:26.453" LastActivityDate="2017-06-13T11:17:26.453" Title="What type of mechanism is this?" Tags="&lt;design&gt;&lt;joint&gt;&lt;identification&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4283" PostTypeId="2" ParentId="4256" CreationDate="2014-07-19T18:13:26.047" Score="0" Body="&lt;p&gt;Normally, the integral term of a PID handles something like the incline.  This takes time to build up error, and as you noticed in your application it is taking some time for the PID to decide to output the proper amount of force when you first encounter the incline.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My guess is that the simplest way to fuse the IMU data would be to use it as a replacement for (or augmentation of) the integral term in your calculation.  Rather than accumulate error over time, the IMU could give you a more instantaneous value.  &lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-07-19T18:13:26.047" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4284" PostTypeId="2" ParentId="4281" CreationDate="2014-07-19T19:51:37.217" Score="2" Body="&lt;p&gt;Totally off topic and not really robotics related but that's an old gearless angle drive.&#xA;Kind of like this...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.cal-vantools.com/p-5-90-degree-gearless-angle-drive38.aspx&quot; rel=&quot;nofollow&quot;&gt;http://www.cal-vantools.com/p-5-90-degree-gearless-angle-drive38.aspx&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="1978" LastActivityDate="2014-07-19T19:51:37.217" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4285" PostTypeId="1" AcceptedAnswerId="4286" CreationDate="2014-07-21T00:04:24.523" Score="3" ViewCount="146" Body="&lt;p&gt;I've successfully done with EKF Localization Algorithm with known and unknown correspondences that are stated in &quot;Probabilistic Robotics&quot;. The results make perfect sense,so I can estimate the position of a robot without using GPS or odometry. Now I've moved to EKF-SLAM with known correspondences in the same book. I don't understand this matrix &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;F_{x,j} = &#xA;\begin{bmatrix}&#xA;1  &amp;amp; 0  &amp;amp; 0 &amp;amp; 0  \cdots  0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \cdots 0 \\&#xA;0  &amp;amp; 1  &amp;amp; 0 &amp;amp; 0  \cdots  0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \cdots 0 \\&#xA;0  &amp;amp; 0  &amp;amp; 1 &amp;amp; 0  \cdots  0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \cdots 0 \\&#xA;0  &amp;amp; 0  &amp;amp; 0 &amp;amp; 0  \cdots  0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \cdots 0 \\&#xA;0  &amp;amp; 0  &amp;amp; 0 &amp;amp; 0  \cdots  0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \cdots 0 \\&#xA;0  &amp;amp; 0  &amp;amp; 0 &amp;amp; \underbrace{0  \cdots  0}_{3j-3} &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp;  \underbrace{0 \cdots 0}_{3N-3j} \\&#xA;\end{bmatrix}&#xA;$$&#xA;What is exactly the bottom of this matrix? The following&#xA;$$&#xA;F_{x,j} = &#xA;\begin{bmatrix}&#xA;0  \cdots  0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \cdots 0 \\&#xA;0  \cdots  0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \cdots 0 \\&#xA;\underbrace{0  \cdots  0}_{3j-3} &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp;  \underbrace{0 \cdots 0}_{3N-3j} \\&#xA;\end{bmatrix}&#xA;$$&#xA;Is it as following (assuming N = 3)&#xA;$$&#xA;F_{x,j} = &#xA;\begin{bmatrix}&#xA;1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\&#xA;0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \\&#xA;0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1\\&#xA;\end{bmatrix}&#xA;$$&#xA;Or &#xA;$$&#xA;F_{x,j} = &#xA;\begin{bmatrix}&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0\\&#xA;\end{bmatrix}&#xA;$$&#xA;where ones' represent a specific landmark. &lt;/p&gt;&#xA;" OwnerUserId="2155" LastActivityDate="2018-06-15T17:19:44.237" Title="sparse matrix in EKF SLAM" Tags="&lt;slam&gt;&lt;ekf&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4286" PostTypeId="2" ParentId="4285" CreationDate="2014-07-21T12:50:24.537" Score="2" Body="&lt;p&gt;It is certainly your second guess, i.e.:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;F_{x,j} = &#xA;\begin{bmatrix}&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0\\&#xA;\end{bmatrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you pay attention, the columns that are repeated (with &lt;code&gt;...&lt;/code&gt;) contain all zeros, both the first column and the last.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If they wanted to show your first guess, they would have written something like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;F_{x,j} = &#xA;\begin{bmatrix}&#xA;1  \cdots  0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \cdots 0 \\&#xA;0  \cdots  0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \cdots 0 \\&#xA;\underbrace{0  \cdots  1}_{N} &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp;  \underbrace{0 \cdots 1}_{N} \\&#xA;\end{bmatrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that now the first element of the first column is 1 and the last element of the last column is also 1, showing that the 1 moves from top to bottom on each column. Note also that the number of columns (previously &lt;code&gt;3j-3&lt;/code&gt; and &lt;code&gt;3N-3j&lt;/code&gt;) are now changed to &lt;code&gt;N&lt;/code&gt; (the number of rows, let's assume) because otherwise the pattern and the number of columns would be inconsistent.&lt;/p&gt;&#xA;" OwnerUserId="158" LastActivityDate="2014-07-21T12:50:24.537" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4287" PostTypeId="1" AcceptedAnswerId="4292" CreationDate="2014-07-21T17:27:39.073" Score="5" ViewCount="948" Body="&lt;p&gt;I am working on estimating a robots pose using Odometry and GPS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My first problem is that all kinematic model i have seen for a differential drive robot proposes using the displacement of the left and right wheels to evaluate the robots next pose. However, in my situation the robot i have only spits out current X and Y pose relative to the starting point of the movement. can i use this as my state estimate&#xA;P = [x,y]T&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P = [x0,y0] + [dx,dy] where dx and dy are change in respective coordinates gotten from the robots odometry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;if the above is posible how do i calculate the state covariance Q of the filter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For GPS, how do i evaluate the covariance R; i have tried to collect multiple reading of latitude and longitude from a fixed point but i dont know if this is righ and i just dont get evaluate the covariance from these data (feeling dumb).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you in anticipation.&lt;/p&gt;&#xA;" OwnerUserId="6781" LastActivityDate="2014-07-23T00:15:41.080" Title="Kalman filter Issue - GPS Odometry Fusion" Tags="&lt;mobile-robot&gt;&lt;kalman-filter&gt;&lt;gps&gt;&lt;odometry&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4288" PostTypeId="1" CreationDate="2014-07-21T21:47:45.857" Score="4" ViewCount="1111" Body="&lt;p&gt;I'm a bit at my wits' end here - I'm trying to build a tilt compensated compass for my autonomous sailboat (&lt;a href=&quot;https://github.com/kolosy/ArduSailor&quot; rel=&quot;noreferrer&quot;&gt;ardusailor&lt;/a&gt;!). I'm using an InvenSense MPU9150. Originally, I used the built-in fusion support on the sensor to get a quaternion, pull the yaw/pitch/roll angles from that, and then use this formula to do the tilt compensation:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;float heading = atan2(-(mz * s_phi - my * c_phi), mx * c_theta + my * s_theta * s_phi + mz * s_theta * c_phi);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where the various s_angle is sin(angle) and c_angle is cos(angle). That didn't work. I tried using a vector-based approach stolen from &lt;a href=&quot;https://github.com/pololu/lsm303-arduino/tree/master/LSM303&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;. That didn't work. Then, I took away the tilt compensation, and just did an uncompensated atan2(Yh,Xh), and that produced very strange result as well. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically, as I rotate the sensor about the z axis, the value rotates between 70 and -10 degrees, completing a full circle (i.e. as i make a 360 degree rotation, it starts at 70, gets to -10, and then back up to 70). 70 is at about 0* magnetic, 10 is at about 180, 0 is at about 70-80.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I see the same behavior from an HMC5883L magnetometer chip as well. The thing is, looking at raw values, I get magnetic values that seem fine, and hard and soft iron offsets are in place:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/a81c6.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;top row is corrected for offsets (using an ellipsoid fit method), bottom is raw. The numbers may look skewed, but they aren't - the scales aren't all the same. Graphs are, in order, x:y, y:z, x:z&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What could this be?&lt;/p&gt;&#xA;" OwnerUserId="6782" LastActivityDate="2014-07-22T14:12:30.643" Title="Tilt-compensated compass - at my wits' end" Tags="&lt;compass&gt;&lt;magnetometer&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4289" PostTypeId="2" ParentId="2631" CreationDate="2014-07-22T03:09:16.000" Score="1" Body="&lt;p&gt;EDIT: Sorry, didn't see that this was such an old question, I'm used to Stack Overflow where the first page of questions spans several minutes instead of several months!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The DJI Naza Flamewheel F450 is a popular kit, I am building one. You can get it at a bunch of different places online, such as &lt;a href=&quot;http://heli-heli.com/items/quad-copters/dji-innovations/dji-flame-wheel-f450-arf-kit-includes-motors-esc-propellers-dji-fw450-detail.htm&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;. It includes the airframe, motors, ESCs, and props, and because they are from the same kit they are pretty much guaranteed to be compatible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will have to source the remaining parts yourself, i.e. the battery, Tx/Rx, and flight controller. Your battery and Tx look fine for the Flamewheel F450 kit, and I can't comment on the Hobbyking FC unit because I have no experience with it (I use the DJI Naza-M Lite).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, don't forget the LiPo battery charger!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this helps, good luck with your build!&lt;/p&gt;&#xA;" OwnerUserId="6784" LastActivityDate="2014-07-22T03:09:16.000" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4290" PostTypeId="2" ParentId="4288" CreationDate="2014-07-22T13:14:38.690" Score="1" Body="&lt;p&gt;You may want to take a look at FreeIMU library that does 'data fusion' that combine raw data from multiple sensors and present user with a much reliable, stable and easy-to-use data in a roll, pitch and yaw (direction as you require) format. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;FreeIMU &lt;a href=&quot;http://www.varesano.net/projects/hardware/FreeIMU&quot; rel=&quot;nofollow&quot;&gt;http://www.varesano.net/projects/hardware/FreeIMU&lt;/a&gt;&#xA;This version from the original author use MPU60X0 chip.  It also has hard and soft iron offsets calibration. You may want to use this version by changing chip which is relatively low cost. Or, use below newer version by community authors uses the newer MPU9150.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(about 60% toward the end) Video showing roll, pitch and yaw as displayed on pc screen &lt;a href=&quot;https://www.youtube.com/watch?v=4Dmbr4XDnSM&quot; rel=&quot;nofollow&quot;&gt;https://www.youtube.com/watch?v=4Dmbr4XDnSM&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are dozens of similar videos. like &lt;a href=&quot;https://www.youtube.com/watch?v=jSUULyOchKY&quot; rel=&quot;nofollow&quot;&gt;https://www.youtube.com/watch?v=jSUULyOchKY&lt;/a&gt; which explain a bit about the working principle, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MPU9150&#xA;&lt;a href=&quot;http://www.youtube.com/redirect?q=http%3A%2F%2Fyoutu.be%2FlwlOZzNJqJc&amp;amp;redir_token=lI8vw1yUDNFjftmQeXUUL33rabN8MTQwNjExNzk3M0AxNDA2MDMxNTcz&quot; rel=&quot;nofollow&quot;&gt;http://www.youtube.com/redirect?q=http%3A%2F%2Fyoutu.be%2FlwlOZzNJqJc&amp;amp;redir_token=lI8vw1yUDNFjftmQeXUUL33rabN8MTQwNjExNzk3M0AxNDA2MDMxNTcz&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=kujLFiehwC4&quot; rel=&quot;nofollow&quot;&gt;http://www.youtube.com/watch?v=kujLFiehwC4&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may want to consider using Arduino MCU board as it is low cost and has plenty examples. The library is in C and in-theory can be ported to other MCU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope it helps&lt;/p&gt;&#xA;" OwnerUserId="5582" LastEditorUserId="5582" LastEditDate="2014-07-22T14:12:30.643" LastActivityDate="2014-07-22T14:12:30.643" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4292" PostTypeId="2" ParentId="4287" CreationDate="2014-07-22T23:45:38.210" Score="2" Body="&lt;p&gt;In regards to your question about differential drive, it sounds as though your robot is using the kinematic model to estimate the position, but this is being done &quot;internally&quot; (i.e., in the embedded on-board software). Whether or not this is okay depends on whether the wheel radii and track width (distance between left and right wheels) it uses are correct. If they aren't (e.g., you changed the wheels), the values it is spitting out will be very inaccurate. Assuming these are approximately correct, instead of the displacement of the left and right wheels, first calculate the translation and rotation since the last measurement, i.e.,&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;translation = sqrt( (dx - dx_prev)^2 + (dy - dy_prev)^2 )&#xA;rotation = dtheta - dtheta_prev&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where &lt;code&gt;dx&lt;/code&gt;, &lt;code&gt;dy&lt;/code&gt;, and &lt;code&gt;dtheta&lt;/code&gt; are your current measurements, and &lt;code&gt;dx_prev&lt;/code&gt;, &lt;code&gt;dy_prev&lt;/code&gt;, &lt;code&gt;dtheta_prev&lt;/code&gt; are the previous measurements. Note that I assumed your robot is reporting the heading (theta) as well. If it doesn't, that means if the robot is turning on the spot, you won't be able to tell because no change in position is occurring.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your new input &lt;code&gt;u&lt;/code&gt; is now&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;u = [translation; rotation]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Use an appropriate kinematic model where this is your input (e.g., change in &lt;code&gt;x&lt;/code&gt; is &lt;code&gt;translation * cos(theta)&lt;/code&gt;, etc.). Setting an appropriate covariance matrix for &lt;code&gt;u&lt;/code&gt; is tricky. I would recommend determining it empirically (i.e., do a series of experiments and decide how much uncertainty you should add to &lt;code&gt;u&lt;/code&gt; based on the results). Start with a guess such as&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Q = [0.005^2, 0; 0, 0.005^2]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and check if the 3-sigma ellipse covers the actual position after the experiment. You can also get fancy and set Q at each time stamp, scaled according to the motion, i.e.,&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Q = [(a*translation)^2 + (b*rotation)^2, 0; 0, (c*translation)^2 + (d*rotation)^2]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where you tune for values of &lt;code&gt;a&lt;/code&gt;, &lt;code&gt;b&lt;/code&gt;, &lt;code&gt;c&lt;/code&gt;, and &lt;code&gt;d&lt;/code&gt;. This allows you (for example), to add more uncertainty if the robot is turning (larger values of &lt;code&gt;c&lt;/code&gt; and &lt;code&gt;d&lt;/code&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For your question about determining the &lt;code&gt;R&lt;/code&gt; matrix, without getting into the details of how GPS works, your best bet is probably once again to do tests. One simple test would be to measure out some places on the ground (so you know their positions). Start by converting your initial latitude to (&lt;code&gt;x&lt;/code&gt;, &lt;code&gt;y&lt;/code&gt;) (see &lt;a href=&quot;https://stackoverflow.com/questions/16266809/convert-from-latitude-longitude-to-x-y&quot;&gt;here&lt;/a&gt;). This will be your origin. Next drive to each of your known positions and calculate the (&lt;code&gt;x&lt;/code&gt;, &lt;code&gt;y&lt;/code&gt;) according to the GPS, and subtract off your initial position. Drive from known position to known position and so on (including revisiting positions) and record your (&lt;code&gt;x&lt;/code&gt;, &lt;code&gt;y&lt;/code&gt;) according to GPS. After this experiment you'll have a list of estimated positions and their corresponding true positions. From this you can use statistics to calculate the average uncertainty, and can set &lt;code&gt;R&lt;/code&gt; appropriately.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Good luck!&lt;/p&gt;&#xA;" OwnerUserId="4320" LastEditorUserId="-1" LastEditDate="2017-05-23T12:37:11.430" LastActivityDate="2014-07-23T00:15:41.080" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4293" PostTypeId="2" ParentId="3071" CreationDate="2014-07-23T01:58:18.757" Score="3" Body="&lt;p&gt;There are many ways to measure the statistical difference between two distributions. For your case, you might consider the &lt;a href=&quot;http://en.wikipedia.org/wiki/Bhattacharyya_distance&quot; rel=&quot;nofollow&quot;&gt;Bhattacharyya distance&lt;/a&gt;. From that page, the Bhattacharyya distance $D_B$ is&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;D_B={1\over 8}(\boldsymbol\mu_1-\boldsymbol\mu_2)^T \boldsymbol\Sigma^{-1}(\boldsymbol\mu_1-\boldsymbol\mu_2)+{1\over 2}\ln \,\left({\det \boldsymbol\Sigma \over \sqrt{\det \boldsymbol\Sigma_1 \, \det \boldsymbol\Sigma_2} }\right),&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $\boldsymbol\mu_i$ and $\boldsymbol\Sigma_i$ are the means and covariances of the distributions, and&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\boldsymbol\Sigma={\boldsymbol\Sigma_1+\boldsymbol\Sigma_2 \over 2}.&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would also like to issue a warning. When calculating the difference between angles (e.g., $\alpha_1 - \alpha_2$ in your case), you have to take care of wrapping issues. For example, for $\alpha_1 = -179$ deg and $\alpha_2 = 179$ deg, their different is not $(-179) - (179) = -358$ deg, but rather it is $2$ deg. If you are only concerned about the relative values of statistical differences (e.g., &quot;which is the smallest&quot;), then consider using the &lt;em&gt;circular distance&lt;/em&gt; ($c$) between the two angles, which is&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;c = \frac{1 - \cos(\alpha_1 - \alpha_2)}{2}.&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This always returns a value $c\in[0,1]$, where $c=1$ is the result when the two angles 180 degrees apart. So if you use the Bhattacharyya distance, the angle part of $\boldsymbol{\mu}$ would be a circular distance. However, if you are looking at lines, rotating a line 180 degrees returns it to its original orientation! That's because the directions of lines are examples of &lt;em&gt;axial data&lt;/em&gt;, and are invariant to rotations of +/- 180 degrees. In this case, just double the angle of the above circular distance; i.e.,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;c = \frac{1 - \cos[2(\alpha_1 - \alpha_2)]}{2}.&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now $c=1$ when the lines are 90 degrees apart!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Good luck!&lt;/p&gt;&#xA;" OwnerUserId="4320" LastActivityDate="2014-07-23T01:58:18.757" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4294" PostTypeId="2" ParentId="2990" CreationDate="2014-07-23T02:12:34.987" Score="3" Body="&lt;p&gt;Yes this is correct, given two assumptions:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Each measurement is independent (i.e., the (Gaussian) distribution of observation $z_i$ is uncorrelated with $z_j$). Usually this is a fair assumption (e.g., measuring the position of landmarks with a laser scanner).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Data association is known. In other words, you &quot;just knew&quot; that your first observation was in fact an observation of landmark 1. Therefore you can just compute the innovation with the predicted observation generated by landmark 1. Not knowing what landmark the observation belongs to is where the double loop comes in. In that case, you need to compare the observation with the predicted observations of all* the other landmarks, and choose the one that is most likely**, using a metric such as the Mahalanobis distance.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;*You can probably speed this up by only comparing it to landmarks that are estimated to be in the field of view of the sensor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;**This is just one method of data association. Others (e.g., joint compatibility) exist.&lt;/p&gt;&#xA;" OwnerUserId="4320" LastActivityDate="2014-07-23T02:12:34.987" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4295" PostTypeId="1" CreationDate="2014-07-23T05:04:39.320" Score="2" ViewCount="124" Body="&lt;p&gt;I'm facing a real weird problem with EKF Localization. The filer gives me wrong error every time the robot is in parallel with a landmark. I've debugged the code many times but failed to solve the problem however I found out where is exactly the problem occurs. The following picture shows the scenario. The robot moves in a circular motion. There are four landmarks. I have indicted in the picture where the filer gives me wrong angle for the estimated state.  As you see, when the robot is in parallel with all landmarks, I got a wrong angle for the estimated robot's pose. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/eEnwn.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is another picture shows how the estimated angle is wrong where the red circle is the estimated robot's pose and the blue one is the actual robot's pose. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/rjlEn.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did also track the problem numerically. What I found out is that the estimated measurement of landmark # 4 is in the opposite direction of the actual measurement of landmark # 4. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;i = 1 &amp;lt;---- landmark 1 &amp;lt;200,0&amp;gt;&#xA;&#xA;est_robot =&#xA;    6.4545&#xA;   21.1119&#xA;    0.1246&#xA;&#xA;Zobs =&#xA;  194.9271&#xA;   -0.2208&#xA;    1.0000&#xA;&#xA;Zpre =&#xA;  194.6936&#xA;   -0.2333&#xA;    1.0000&#xA;&#xA;real_robot =&#xA;    6.2069&#xA;   20.9946&#xA;    0.1188&#xA;&#xA;Mubar =&#xA;    6.2844&#xA;   21.7029&#xA;    0.1201&#xA;&#xA;i = 2 &amp;lt;---- landmark 2 &amp;lt;200,200&amp;gt;&#xA;&#xA;est_robot =&#xA;    6.2844&#xA;   21.7029&#xA;    0.1201&#xA;&#xA;Zobs =&#xA;  263.8102&#xA;    0.5982&#xA;    2.0000&#xA;&#xA;Zpre =&#xA;  263.2785&#xA;    0.6239&#xA;    2.0000&#xA;&#xA;real_robot =&#xA;    6.2069&#xA;   20.9946&#xA;    0.1188&#xA;&#xA;est_robot =&#xA;    6.2901&#xA;   21.0100&#xA;    0.0155&#xA;&#xA;i = 3 &amp;lt;---- landmark 3 &amp;lt;-200,200&amp;gt;&#xA;est_robot =&#xA;    6.2901&#xA;   21.0100&#xA;    0.0155&#xA;&#xA;Zobs =&#xA;  273.0734&#xA;    2.2991&#xA;    3.0000&#xA;&#xA;Zpre =&#xA;  273.1173&#xA;    2.4114&#xA;    3.0000&#xA;&#xA;real_robot =&#xA;    6.2069&#xA;   20.9946&#xA;    0.1188&#xA;&#xA;est_robot =&#xA;    6.2840&#xA;   21.0462&#xA;    0.0259&#xA;&#xA;i = 4 &amp;lt;---- landmark 4 &amp;lt;-200,0&amp;gt;&#xA;&#xA;est_robot =&#xA;    6.2840&#xA;   21.0462&#xA;    0.0259&#xA;&#xA;Zobs =&#xA;  207.2696&#xA;    3.1272 &amp;lt;--- the actual measurement of landmark 4&#xA;    4.0000&#xA;&#xA;Zpre =&#xA;  207.3548&#xA;   -3.0658  &amp;lt;--- this is the problem. (it should be 3.0658)&#xA;    4.0000&#xA;&#xA;real_robot =&#xA;    6.2069&#xA;   20.9946&#xA;    0.1188&#xA;&#xA;est_robot =&#xA;    6.0210&#xA;   20.8238&#xA;   -0.5621&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and this is how I computed the angles. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the actual measurements,&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Zobs = [          sqrt((map(i,1) - real_robot(1))^2 + (map(i,2) - real_robot(2))^2)        ;&#xA;            atan2(map(i,2) - real_robot(2), map(i,1) - real_robot(1)) - real_robot(3);&#xA;                                                                     i];&#xA;&#xA;&#xA;     % add Gaussian noise &#xA;     Zobs(1) = Zobs(1) + sigma_r*randn();&#xA;     Zobs(2) = Zobs(2) + sigma_phi*randn();&#xA;     Zobs(3) = i;&#xA; Zobs(2) = mod(Zobs(2), 2*pi);&#xA;&#xA; if (Zobs(2) &amp;gt; pi) % was positive&#xA;    Zobs(2) = Zobs(2) - 2*pi;&#xA; elseif (Zobs(2) &amp;lt;= -pi) % was negative&#xA;    Zobs(2) = Zobs(2) + 2*pi;&#xA; end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;For the predicted measurements&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;q    = (map(i,1) - est_robot(1))^2 + (map(i, 2) - est_robot(2))^2;&#xA;    Zpre = [                                                             sqrt(q);&#xA;            atan2(map(i,2) - est_robot(2), map(i,1) - est_robot(1)) - est_robot(3);&#xA;                                                                              i];&#xA;&#xA;     if (Zpre(2) &amp;gt; pi) % was positive&#xA;        Zpre(2) = Zpre(2) - 2*pi;&#xA;     elseif (Zpre(2) &amp;lt;= -pi) % was negative&#xA;        Zpre(2) = Zpre(2) + 2*pi;&#xA;     end &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="2155" LastActivityDate="2014-07-31T09:24:11.393" Title="EKF Localization when robot is in parallel with a landmark." Tags="&lt;localization&gt;&lt;ekf&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4296" PostTypeId="1" CreationDate="2014-07-23T13:22:36.933" Score="1" ViewCount="1196" Body="&lt;p&gt;Firstly I'm unsure whether this question belongs here or on another SE site (but I'll wing it for now).&lt;/p&gt;&#xA;&lt;p&gt;I've recently been given the job of connecting up a 'smart camera' to a setup where a robotic arm will pick and place objects from point A to point B. The &lt;em&gt;real&lt;/em&gt; application for the camera is to check if the objects are out of alignment to their supposed positions.&lt;/p&gt;&#xA;&lt;p&gt;However I am curious to see if there is any way I can calculate the distance of an object given that I already know the objects actual size. Naturally the camera will see the object as bigger when closer and smaller when farther away but how can I turn this information into depth/distance from the camera?&lt;/p&gt;&#xA;&lt;p&gt;I have not yet started using the camera. For now it is just an idea. I will assume that I can calculate what percentage of the view frame is taken up by the object.&lt;/p&gt;&#xA;&lt;p&gt;For example if I have an object of uniform shape, I know that from dist1 it takes up 75% of the view frame and from dist2 it takes up 45% of the view frame.&#xA;&lt;img src=&quot;https://i.stack.imgur.com/WiWTh.png&quot; alt=&quot;Basic concept&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;Should this prove to be possible I imagine that it could have a number of different applications. /Anyway any feedback is appreciated. Thanks! ( :&lt;/p&gt;&#xA;" OwnerUserId="1610" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2014-08-22T17:07:12.420" Title="Calculate object distance with camera" Tags="&lt;localization&gt;&lt;calibration&gt;&lt;cameras&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4297" PostTypeId="1" AcceptedAnswerId="4333" CreationDate="2014-07-23T14:14:52.120" Score="4" ViewCount="1292" Body="&lt;p&gt;I am very new two robotics, however I have a working stereo algorithm which I want to combine with a SLAM algorithm. I am developing this system for an other application but I decided integrating it on a robot first and testing it might be a good way to get used to the system and test its behaviour in a realistic environment. (rather than testing it in some kind of software simulator only) However, I want the system to be autonomous and running on-board of the rover. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The system I am talking about will consist of:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;a stereo camera&#xA;a rover with wheels with one motor each &#xA;possibly some kind of sensor that &quot;measures&quot; the movement, e.g. how much the wheels turned&#xA;maybe some distance sensor &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Appart from this it's only software&#xA;the stereo software is already developed, the SLAM algorithm not. Therefore it is currently impossible to say how much RAM it needs. I am currently running the stereo-vision only on an i7 in approx. 1s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now my question:&#xA;as mentioned I have no idea about robotics, and also my electronics knowledge is limited, so I have no idea what I need for this robot when it comes to the processor and the electronics. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I read some stuff about the Raspberry Pi and Arduino boards but I have no idea what to make from this. I am afraid that a Arduino will not be able to handle the computational load of the stereo vision and the SLAM algorithm but I read that Raspberry Pis are not the first choice when interfacing with sensors is needed (in this case my stereo cameras). Also I found the Leika kit which is a robotics kit for the Raspberry Pi. Maybe this would be a good option for me?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe an entirely different system would be even more advisable? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Possibly someone else build an equally complex system before and can give me some advise form his/her experience? &lt;/p&gt;&#xA;" OwnerUserId="1085" LastEditorUserId="1085" LastEditDate="2014-08-01T12:13:04.333" LastActivityDate="2018-06-14T10:43:34.737" Title="Which micro-controler/processor to be used for autonomous stereo vision robot system?" Tags="&lt;arduino&gt;&lt;mobile-robot&gt;&lt;raspberry-pi&gt;&lt;slam&gt;&lt;stereo-vision&gt;" AnswerCount="4" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4298" PostTypeId="2" ParentId="4296" CreationDate="2014-07-23T17:01:05.323" Score="2" Body="&lt;p&gt;Think of it this way, cameras measure angles. Each pixel tells you the angle between the camera's central axis and the object/corner/etc shown at that pixel. So if you know real-world dimensions of the object, and are able to find the pixel locations for points on that object, then yes it is possible to extract the camera distance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, suppose the camera (with focal length $f$) was looking at a ruler of length $l$ with the 0 end at pixel (0,0) and the other end at pixel ($u_x$,0). From trig you get&#xA;$$&#xA;\begin{align}&#xA;  tan(\theta) &amp;amp;= \frac{u_x}{f}&#xA;\\&#xA;  &amp;amp;= \frac{l}{d}&#xA;\\&#xA;  d &amp;amp;= \frac{l}{tan(\theta)}&#xA;\\&#xA;&amp;amp;= \frac{l f}{u_x}&#xA;\end{align}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $d$ is the distance from the camera to the ruler. (someone please double check my math)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that things start to get more complicated when you consider full 3D objects (not each point is the same distance to the camera) and camera rotation relative to the object. But the idea is the same: cameras measure angles.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2014-07-23T17:01:05.323" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4299" PostTypeId="1" AcceptedAnswerId="4349" CreationDate="2014-07-23T23:47:33.803" Score="0" ViewCount="948" Body="&lt;p&gt;I am using the L298N motor driver to drive two HAD1 linear actuators (12V each and a no-load drive current of ~950mA each)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Linear Actuator&lt;/strong&gt;: &lt;a href=&quot;http://www.alibaba.com/showroom/mini-linear-actuator-had1.html&quot; rel=&quot;nofollow&quot;&gt;http://www.alibaba.com/showroom/mini-linear-actuator-had1.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Motor Driver&lt;/strong&gt;: is a L298N dual-h-bridge motor-driver controller board-module for arduino robot&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am also using a current sensor per motor to get feedback of what the motor is doing (only sensors I have available, but I can detect of the motors are moving or stopped). I am using two ACS714 current sensors. The supply voltage for each is 4.5V to 5.5V and Supply Current is 10mA to 13ma:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Current Sensor&lt;/strong&gt;: is an ACS714 current sensor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And Here is the circuit diagram that I made for my actual setup (an Arduino UNO, two current sensors, to linear actuators, and one motor drive):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Circuit Diagram&lt;/strong&gt;: &#xA;&lt;img src=&quot;https://www.dropbox.com/s/ouxfrcutw5lcj6a/Actuator.jpeg?dl=1&quot; alt=&quot;&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Will this setup work? Will I have enough current/power coming out of the 5V of the arduino to power both the L298N logic and the two ACS714 sensors?&lt;/p&gt;&#xA;" OwnerUserId="4269" LastEditorUserId="350" LastEditDate="2014-08-05T01:46:41.497" LastActivityDate="2014-08-05T01:46:41.497" Title="Arduino with two Linear Actuators, two ACS714 Current Sensors, and an L298N Motor Driver setup" Tags="&lt;arduino&gt;&lt;control&gt;&lt;actuator&gt;&lt;current&gt;&lt;circuit&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4301" PostTypeId="2" ParentId="4297" CreationDate="2014-07-24T19:38:14.330" Score="2" Body="&lt;p&gt;Arduinos are slow. They run at 16mhz and don't normally have more than 10 kb of ram (the due has more, but still well under 1 mb. I personally would look into a beaglebone or udoo as they are both a lot faster than a raspberry pi. However, if you don't have much experiance with robotics and your project doesn't require it, I would avoid it&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, your question isn't very directed. You might want to edit it to make it more so (it could be closed as not specific or the likes)&lt;/p&gt;&#xA;" OwnerUserId="1667" LastActivityDate="2014-07-24T19:38:14.330" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4303" PostTypeId="1" CreationDate="2014-07-25T00:25:39.207" Score="1" ViewCount="660" Body="&lt;p&gt;Is it possible to build a quadcopter which can detect obstacles and thereby avoiding them in order to reach its destination?&#xA;If so,how could it avoid the obstacles and how can the destination be set&lt;/p&gt;&#xA;" OwnerUserId="6802" LastActivityDate="2014-07-25T01:45:29.350" Title="autonomous obstacle detecting quadcopter" Tags="&lt;quadcopter&gt;" AnswerCount="1" CommentCount="0" ClosedDate="2014-08-02T09:18:20.543" ContentLicense="CC BY-SA 3.0" />
  <row Id="4304" PostTypeId="2" ParentId="4303" CreationDate="2014-07-25T01:45:29.350" Score="3" Body="&lt;p&gt;This is quite a broad question. I will just skim the surface assuming you were interested in the software aspect, and will describe the software architecture. From the software perspective you need localization, navigation/planning, and control modules at minimum. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The localization determines where the quadcopter and the obstacle are. It reads the positional sensor information, i.e. visual, sonic, GPU. Localization synthesizes the sensor information to produce an internal state of the world - the location and speed of the UAV and its surroundings at any given moment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Navigation/planning takes the internal state and decides what the UAV should do next. There are number of ways to do this, from good-old hard-coding, to motion planning, reinforcement learning, etc. For autonomous obstacle-avoidance, methods like Probabilistic Roadmaps (PRMa)[1] and Rapidly exploring Random Trees (RRTs)[2] are popular and there is tons of work that use these methods. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;After you have a path or a trajectory a controller in a closed-feedback loop sends the torque inputs to the UAVs motors that moves the UAV. The localization observes the next state, planning/navigation optionally adjusts the trajectory, and the controller sends the input again. And this process repeats.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as specifying the goal, the easiest is to provide coordinates, but in general there is no consensus. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to see a movie of quadcopter autonomously avoiding obstacles, check out:&#xA;&lt;a href=&quot;https://www.youtube.com/user/sandraorionnm/&quot; rel=&quot;nofollow&quot;&gt;https://www.youtube.com/user/sandraorionnm/&lt;/a&gt; and take a look at [3].&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[1] L. E. Kavraki, P. ˇSvestka, J. C. Latombe, and M. H. Overmars. Probabilistic roadmaps for path planning in high-dimensional configuration spaces. IEEE Trans. Robot. Automat., 12(4):566–580, August 1996.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[2] J.J. Kuffner and S.M. LaValle. RRT-connect: An efficient approach to singlequery&#xA;path planning. In IEEE International Conference on Robotics and Automation,&#xA;volume 2, pages 995 –1001 vol.2, 2000.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[3] Aleksandra Faust, Ivana Palunko, Patricio Cruz, Rafael Fierro, and Lydia&#xA;Tapia. Automated aerial suspended cargo delivery through reinforcement&#xA;learning. Technical Report TR13-001, Department of Computer Science, University of New Mexico, August 2013&lt;/p&gt;&#xA;" OwnerUserId="6803" LastActivityDate="2014-07-25T01:45:29.350" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4305" PostTypeId="2" ParentId="2687" CreationDate="2014-07-25T19:15:44.980" Score="1" Body="&lt;p&gt;Unfortunately, the basic equations for thrust aren't all that basic when you also want to look at things like motor efficiency, which is partly why all these quadcopter calculators are so popular.  The one at &lt;a href=&quot;http://www.drivecalc.de/&quot; rel=&quot;nofollow&quot;&gt;http://www.drivecalc.de/&lt;/a&gt; is pretty handy, especially if you want to define things like custom motors or batteries.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I made some guesses about your setup and came up with:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;About 0.053 N/W thrust efficiency for that prop&lt;/li&gt;&#xA;&lt;li&gt;About 260 Watts at the shaft for that size motor&lt;/li&gt;&#xA;&lt;li&gt;About 14 Newtons of thrust per motor&lt;/li&gt;&#xA;&lt;li&gt;14 newtons will hold up about 1.4 kg&lt;/li&gt;&#xA;&lt;li&gt;Max weight for a static hover with 4 motors is about 5.6 kg&lt;/li&gt;&#xA;&lt;li&gt;You should probably be about half this for a quadcopter that flies well, so try to get its weight under 2.8 kg&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;If this is your first quad, I'd say that 2.8 kg (6.2 lb) is a little heavy. The bigger they are, the harder they fall.  This adage is definitely true for quadcopters.&lt;/p&gt;&#xA;" OwnerUserId="6807" LastActivityDate="2014-07-25T19:15:44.980" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4306" PostTypeId="2" ParentId="3069" CreationDate="2014-07-26T01:22:46.860" Score="0" Body="&lt;p&gt;That depends on what you mean.  If your question is about output, then the answer is you have 4 degrees of freedom: thrust, pitch, yaw, and roll.  If you question is about the dynamics of the helicopter, then you have to make some assumptions.  Assuming the vehicle is a rigid body is usually a good assumption for answering basic questions about a system, in which case it would have 6 DOF, position in x, y, and z, plus rotation about x, y, and z.  If your question is about inputs, then the answer is also 6 DOF, because you have to measure all 6 DOF if you want to be able to control a quadcopter.  &lt;/p&gt;&#xA;" OwnerUserId="6807" LastActivityDate="2014-07-26T01:22:46.860" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4307" PostTypeId="1" AcceptedAnswerId="4321" CreationDate="2014-07-26T14:11:45.063" Score="1" ViewCount="1368" Body="&lt;p&gt;I always wanted to have a CNC to make PCB quickly at home. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, I got a &lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/B002ARTLUG&quot; rel=&quot;nofollow noreferrer&quot;&gt;7x7 kit&lt;/a&gt; from zentools recently and put it together. I attached a battery powered screw driver to 2nd shaft of the stepper and moved the each axis all the way back and forward before wiring. All 3 axis moves smoothly, I can turn the steppers even by hand. Every piece works smoothly, no mechanical jam.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I decided to use &lt;a href=&quot;https://github.com/grbl/grbl&quot; rel=&quot;nofollow noreferrer&quot;&gt;GRBL&lt;/a&gt; as controller software. Tested the software without the shield or stepper (qv: &lt;a href=&quot;http://cadduino.wordpress.com/2013/11/18/testing-grbl-in-arduino-board-without-the-motors/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Testing GRBL in Arduino Board without the steppers&lt;/a&gt;) I use &lt;a href=&quot;https://github.com/winder/Universal-G-Code-Sender&quot; rel=&quot;nofollow noreferrer&quot;&gt;Universal Gcode Sender&lt;/a&gt; to communicate with GRBL.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I got an &lt;a href=&quot;http://blog.protoneer.co.nz/arduino-cnc-shield/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Arduino CNC Shield&lt;/a&gt; for Arduino UNO, put it together, attached to Arduino UNO, re-tested GRBL, it worked. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I used Reprep's &lt;a href=&quot;http://reprap.org/wiki/Stepper_wiring#.22pair.22_wires_on_6_wire_motors&quot; rel=&quot;nofollow noreferrer&quot;&gt;Stepper wiring&lt;/a&gt; article to connect stepper to the driver, wired 1 stepper to the stepper driver (X axis). Powered the shield with 20V 17.5Amp (350W) DC Regulated Power supply. (It was the power adaptor for an old 17&quot; notebook. Notebook died, I kept the adaptor)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the move 5 steps command (G1 X5) was sent, stepper makes a small move in the direction and then makes a grinding noise. (&lt;a href=&quot;https://www.youtube.com/watch?v=cNiFV6u2nSk&quot; rel=&quot;nofollow noreferrer&quot;&gt;Can be seen on Youtube&lt;/a&gt;) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried switching 1st pair's cables, using another stepper driver (3 drivers), turning the potentiometer to increase the current, but still no luck.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I attached 2 photos of the cnc and the controller and controller unit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried everything I can think of, any suggestions?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/Ubgr5.jpg&quot; alt=&quot;CNC&quot;&gt;&#xA;&lt;img src=&quot;https://i.stack.imgur.com/hu2nb.jpg&quot; alt=&quot;Controller (the DC adapter at the bottom)&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="1898" LastActivityDate="2014-07-30T11:44:37.790" Title="Stepper does not turn" Tags="&lt;stepper-motor&gt;&lt;cnc&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4308" PostTypeId="1" CreationDate="2014-07-26T18:27:01.110" Score="3" ViewCount="1316" Body="&lt;p&gt;While looking at Mecanum wheels, I noticed that there are two different designs that are popular.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One type holds the rollers in between the wheels frame, and the other holds the rollers from the center.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a significant advantage to using one over the other?&lt;/p&gt;&#xA;" OwnerUserId="6811" LastActivityDate="2014-08-06T22:12:51.353" Title="What is the difference between the two different types of Mecanum wheels?" Tags="&lt;wheel&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4309" PostTypeId="2" ParentId="3069" CreationDate="2014-07-27T00:17:00.433" Score="4" Body="&lt;p&gt;I think that it is important to recall that a rigid body in space has 6 Dof without considering quantum or relativistic effects ;). So if you use the newton equations, written in an inertial frame of reference, to describe the hole motion of a quadcopter you will get two set of &#xA;equations.&#xA;First the position $x \in \mathbb{R}^3$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;m\ddot{x}  = F&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $F$ is the sum of all external forces, here will take place the action of the rotor's blades. Second, we have the equations for the orientation of the quadcopter and, in my opinion, they are a quite complex issue. If we write the moment of inertia $I$ w.r.t. the centre of mass of the quadcopter and in our inertial frame of reference, we can write&#xA;$$&#xA;I\dot{\omega} = \omega \times I \omega + M&#xA;$$&#xA;where $\omega \in \mathbb{R}^3$ is the angular velocity and $M$ is the sum of all external moments, all of them computed w.r.t. the centre of mass of the quadcopter. Note that in our second equation the euler angles $\psi$ does not apper. In fact, the dynamic equation for the orientation of a rigid body cannot be easily written in an explicit form w.r.t. the euler angles, because the appear in non linear form in $I$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now if we call $u\in \mathbb{R}^4$ our control imput, i.e., the velocity of the 4 blades, we have that the dynamic equations of our system is&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\left\{ \matrix{m \ddot{x} &amp;amp;=&amp;amp; F(u) \cr I \dot\omega &amp;amp;=&amp;amp; \omega \times I \omega +M(u)} \right.&#xA;$$&#xA;Where, F and M are in general non linear forms of the blade's angular velocities. I think that a this level it will be clear that our system is described by 6 parameters: the position that lives in $\mathbb R^3$ (but really the position bellows to the affine space constructed from $\mathbb R^3$ ) and the three euler angles that are a minimal representation of the rotation group $\mathcal S \mathcal O(3)$ that is a lie group with three degrees of freedom.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Until now we have a system completely described by 6 paramenters and 4 control inputs. So we have 6 DOF!. More over a physicist or mathematician could say that we have 6+4=10 DOF because the position of the motors are also parameter of our system, but engineers say that they are the control input so we manually set its values.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But what if I want to write my system in the more control-engineering shape  $\dot x = f(t,x,u)$?&lt;/p&gt;&#xA;" OwnerUserId="6814" LastActivityDate="2014-07-27T00:17:00.433" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4310" PostTypeId="2" ParentId="4277" CreationDate="2014-07-27T00:32:02.667" Score="0" Body="&lt;p&gt;I strongly recommend a patient lecture of the chapters related to rigid body kinematics and dynamics  of the book by Goldstein: classical mechanics. It will clear all our doubts.&lt;/p&gt;&#xA;" OwnerUserId="6814" LastActivityDate="2014-07-27T00:32:02.667" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4311" PostTypeId="2" ParentId="4265" CreationDate="2014-07-27T01:34:55.963" Score="1" Body="&lt;p&gt;I will explain how to determinate the &quot;normal&quot; three dimensional workspace and then extrapolate to orientation. I hope to be useful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let $q$ the position of your robotic arm motors, so its value describe completely the position of your manipulator at each time. First we suppose that the motors of our robot have no limits so, abusing of the notation, we write $q \in \mathcal Q$, i.e., the configuration space and the joint's velocities $ \dot q \in \mathbb R^n$ for all $\mathcal Q$. Now we call $p = [\matrix{x^\top \psi^\top}]^\top$ the column vector with position and the euler's angles. Now, the differential direct kinematics reads&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\dot p = J(q) \;\dot q&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where the jacobian $J$ has to parts&#xA;$$&#xA;J=\pmatrix{J_x \cr J_\psi}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This equation can be readed as &quot;for infinitesimal changes in the joint's positions, give me the infinitesimal changes in the end-effector's positions/orientation&quot;. In fact velocity deals with infinitesimal displacement in infinitesimal time. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The limits of the operations space $\Omega \in \mathbb R^3$ of a manipulator are the points where no infinitesimal changes of the joints positions gives infinitesimal changes in space positions. In other words, at these points it is not possible to achieve displacements in, at least, one direction.  This means that it the joint configurations $\bar{q}$ is in the limit of hte workspace if&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\mbox{Rank}\;( J_x(\bar{q})) &amp;lt; 3&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;because there is at least one direction of the three dimensional space $\mathbb R^3$ that is outside the co-domain of the linear mapping given by the matrix $J_x(\bar q)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The same reasoning can be applied to orientation. We looks for points in $\mathcal Q$ where infinitesimal changes in the joint's positions give no change in some orientation parameter, say an euler angle. The problem of using the previous formula as $\mbox{Rank}\; J_\psi$ is that the matrix $J_\psi$ could have a rank less than 3 because a representations singularity. That can be overrided using another  minimal orientation representation like quaternions, or simply changing the used euler angles in the singular points.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now if each motor have its limit we write  $q_i \in [q_{i}^0, q_i^1]$. We call $\partial \mathcal Q $ the set of all configurations $q$ for which at least one component is in its limit.  We have that for $ q \in \partial \mathcal Q $ there is at least one $i$ for which $\dot q_i \in \mathbb R^+$ XOR $\dot q_i \in \mathbb R^-$, i.e., for the joint $q_i$, when it is at its upper limit, necessarily $\dot q \le 0$, and, when it is at its lower limit, necessarily $\dot q \ge 0$. For the limits of the workspace $\Omega \subset \mathbb R^3$ we have that the formula $\mbox{Rank}\;J_x &amp;lt; 3$ cannot be used in $\partial \Omega$, because at these points the domain of $J_x$ is not a vector space. At the points  $\bar q \in \partial \mathcal Q$  there is one direction that is forbidden for $\dot {\bar q}$, the mapping of that directions $J_x \dot{\bar q}$ is also a forbidden direction if and only if it is linearly independent of the mapping of all possible velocities $J_x \dot q_j$   in the three-dimensional space, then it is a limit of the workspace. In other words, a forbidden joint velocity maps into a forbidden end-effector displacement if and only if, there is not another allowed infinitesimal joint displacement that maps into a displacement in that direction. The same reasoning can be applied to orientation, taking into account the representations singularities. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, your software shout do this:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;in $\mathcal Q$ just seek for the values of $q$ where $\mbox{Rank}\;J_\psi &amp;lt; 3$ taking into account the representation singularities.&lt;/li&gt;&#xA;&lt;li&gt;for each point in $\partial \mathcal Q$ you have to identify the forbidden velocity, say $\dot z$ and take its mapping $v = J_\psi \dot z$. Now construct the matrix $J'_\psi$ removing the $i$ column of each joint that lies in its limits. If $v^\top (J'_\psi) =0 $ then the direction is a limit in the orientation. Always taking into account the representations singularities!&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="6814" LastEditorUserId="6814" LastEditDate="2014-07-27T03:01:09.330" LastActivityDate="2014-07-27T03:01:09.330" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4312" PostTypeId="1" CreationDate="2014-07-27T08:11:20.430" Score="9" ViewCount="29014" Body="&lt;p&gt;I am looking for a cheapest possible GPS setup with a centimeter precision without much HW hacking. I am not able to produce my PCB or do any soldering (though I would do that if there is no other way) so a kind of a easy-to-assemble setup would be welcome. I know about the &lt;a href=&quot;http://swiftnav.com/piksi.html&quot; rel=&quot;noreferrer&quot;&gt;$900 Piksi thing&lt;/a&gt; but that is still too expensive for me. It seems like cm precision should be possible for much less - like employing a 50 USD raw GPS sensor with an antenna and ordinary PC with RTKLIB software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not sure if it is better to use two GPS sensor setup for RTK (one base station and one for rover) or whether I can get the corrective DGPS data elsewhere (my region is Czech Republic - there seems to be &lt;a href=&quot;http://czepos.cuzk.cz/&quot; rel=&quot;noreferrer&quot;&gt;national grid&lt;/a&gt; here allowing to stream correction data for reasonable cost).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My application will be in a passenger car so I will not be limited with power source - no low power needed although that would be nice. I will be using the position readings within OpenCV - so I need to get the data into C/C++ code. The application is data collection so I can use raw GPS post-processing.&lt;/p&gt;&#xA;" OwnerUserId="1021" LastEditorUserId="1021" LastEditDate="2015-12-29T13:42:36.377" LastActivityDate="2018-01-21T22:23:06.113" Title="Low-cost centimeter accurate satellite positioning (GNSS/GPS)" Tags="&lt;gps&gt;" AnswerCount="5" CommentCount="1" FavoriteCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="4313" PostTypeId="1" AcceptedAnswerId="4314" CreationDate="2014-07-27T16:41:27.927" Score="6" ViewCount="531" Body="&lt;p&gt;Is integration over not constant dt (∆time) a possible thing? Let's say you have a PID loop with differentiating frequency, can the integral part of it still work? (Assuming you know the dt from the last iteration)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could I just use a variable dt (∆time) in my calculation and the PID principle would still function correctly?&lt;/p&gt;&#xA;" OwnerUserId="1337" LastEditorUserId="1337" LastEditDate="2014-07-27T20:00:44.790" LastActivityDate="2014-08-03T06:41:52.543" Title="PID Integration over not constant dt (∆time)" Tags="&lt;quadcopter&gt;&lt;pid&gt;&lt;real-time&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4314" PostTypeId="2" ParentId="4313" CreationDate="2014-07-27T19:54:10.760" Score="2" Body="&lt;p&gt;Short answer: yes, as long as you adjust for the real dt you are fine&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Longer answer: In reality, we are always using discrete time approximations of continuous time concepts of derivative and integral. So a varying dt just means the accuracy of your approximation is varying over time, but that's ok.  Examples of situations where you &lt;em&gt;might&lt;/em&gt; run into problems are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;You are on the edge of stability and some of the slower timesteps&#xA;are too slow &lt;/li&gt;&#xA;&lt;li&gt;You dt doesn't change randomly and happens to&#xA;interact with important system frequencies&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2014-07-27T19:54:10.760" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4315" PostTypeId="2" ParentId="4313" CreationDate="2014-07-27T19:54:59.347" Score="1" Body="&lt;p&gt;Normally, it would best to fix sampling time via hardware timer interrupt. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case this cannot be done (like using software-only looping), it will work as long as you calculate,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;normalized_error = (latest_reading - set_point) / (latest_time_stamp - previous_time_stamp)&lt;/p&gt;&#xA;" OwnerUserId="5582" LastActivityDate="2014-07-27T19:54:59.347" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4316" PostTypeId="1" CreationDate="2014-07-28T05:54:51.490" Score="1" ViewCount="44" Body="&lt;p&gt;I want to build a small cylindrical arm, with a main 360º angular servo on the longitudinal axis, and a secondary angular servo with variable speed in a trasversal axis that rotates with the main angular one. The secondary needs to receive data and power from a slip ring across the main servo, since it must be able to rotate freely and must not be binded by wirings. The width of the cylindrical arm must be below 0.4 cm&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've reviewed the market for off-the-shelf servos and there are a few that could fit the bill for the main servo, I know where to obtain the slip ring required, but it beats me where to obtain the secondary servo, since the space limitations demand that it is really small (&amp;lt; 0.2 cm) and the smallest I've been able to find on internet are 0.5 cm&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any suggestions are greatly welcome!&lt;/p&gt;&#xA;" OwnerUserId="544" LastActivityDate="2014-07-28T05:54:51.490" Title="Compact design - building from off-the-shelf components" Tags="&lt;servomotor&gt;" AnswerCount="0" CommentCount="3" ClosedDate="2014-08-06T17:51:32.063" ContentLicense="CC BY-SA 3.0" />
  <row Id="4317" PostTypeId="2" ParentId="4312" CreationDate="2014-07-28T07:12:12.700" Score="2" Body="&lt;p&gt;You are already mentioning that &lt;a href=&quot;http://www.rtklib.com/&quot; rel=&quot;nofollow&quot;&gt;RTKLIB&lt;/a&gt; and a raw sensor would be the solution. Looking at the list of supported protocols in rtklib, there is a mention of the ublox modules. The LEA6T modules seem to fit and are not very expensive. There is also a simple break out board &lt;a href=&quot;http://www.csgshop.com/product.php?id_product=127&quot; rel=&quot;nofollow&quot;&gt;available&lt;/a&gt; which should fit your requirements of not creating hardware.&lt;/p&gt;&#xA;" OwnerUserId="127" LastActivityDate="2014-07-28T07:12:12.700" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4318" PostTypeId="1" AcceptedAnswerId="4334" CreationDate="2014-07-28T14:33:16.217" Score="7" ViewCount="3605" Body="&lt;p&gt;I'm trying to build a robot with a differential drive powered by two DC Motors. First I implemented a PID Controller to control the velocity of each motor independently. Estimated the TF using the MATLAB's System Identification Toolbox, of the open loop system by the acquiring the velocity of each wheels encoder in function of the PWM signal applied by an Arduino microcontroller. All went well and i successfully dimensioned the PID gains for this controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I'm trying to accomplish now is to control the exact (angular) position of the DC Motor. I thought in cascading a PID controller in the input of the other already implemented. So this way, I can give a position to the first controller, which will be capable of generate an output reference to the second (velocity) controller so it generates the appropriate PWM value signal to drive the DC Motor accordingly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Will it work? Is that a good approach? Or should I try to implement a different controller which outputs the PWM signal in response to a position reference signal?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many thanks for your attention and I hope somebody can help me with these doubts.&lt;/p&gt;&#xA;" OwnerUserId="6817" LastActivityDate="2015-07-07T03:03:14.740" Title="Cascading PID DC Motor Position &amp; Velocity Controllers" Tags="&lt;arduino&gt;&lt;control&gt;&lt;microcontroller&gt;&lt;pid&gt;&lt;wheeled-robot&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4319" PostTypeId="5" CreationDate="2014-07-28T16:14:07.623" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2014-07-28T16:14:07.623" LastActivityDate="2014-07-28T16:14:07.623" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4320" PostTypeId="4" CreationDate="2014-07-28T16:14:07.623" Score="0" Body="A stepper motor (or step motor) is a brushless DC electric motor that divides a full rotation into a number of equal steps. The motor's position can then be commanded to move and hold at one of these steps without any feedback sensor (an open-loop controller), as long as the motor is carefully sized to the application. (Wikipedia, 2014)" OwnerUserId="6784" LastEditorUserId="6784" LastEditDate="2014-08-02T09:17:13.613" LastActivityDate="2014-08-02T09:17:13.613" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4321" PostTypeId="2" ParentId="4307" CreationDate="2014-07-28T16:44:16.063" Score="1" Body="&lt;p&gt;After reviewing the Polulu Stepper Driver manual, I realized I was wiring stepper wires in wrong order.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The controller pin labels are: 1A, 1B, 2A, 2B. The controller card's manual was saying 'use letters as pair' but it suppose to say 'use numbers as pair'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Everything works perfectly after correcting the wires.&lt;/p&gt;&#xA;" OwnerUserId="1898" LastEditorUserId="1898" LastEditDate="2014-07-30T11:44:37.790" LastActivityDate="2014-07-30T11:44:37.790" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4322" PostTypeId="2" ParentId="4318" CreationDate="2014-07-28T16:51:32.683" Score="1" Body="&lt;p&gt;I'm a little confused, are you trying to control each wheel's exact position or the overall position of the robot. For the former, a cascaded structure makes sense where the robot position control loop defines desired velocities for each motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the latter (which sounds a little strange to me), you should just be able to treat the velocity as the 'D' part of your position controller, and not do a separate velocity controller. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{align}&#xA;  u = - k_p (p - p^d) - k_d (v - v^d) - k_i \int_0^t (p(t) - p^d(t)) dt&#xA;\end{align}&#xA;$$&#xA;where $p$ and $v$ are the measure position and velocity respectively, and $\cdot^d$ indicates the desired value.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2014-07-28T16:51:32.683" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4323" PostTypeId="1" CreationDate="2014-07-28T17:09:53.970" Score="1" ViewCount="541" Body="&lt;p&gt;I am currently working on an exoskeleton.  The exoskeleton is going to help kids with cerebral palsy learn to walk 4 years sooner than traditional therapy.  Currently we are using 2 Ame 226-3003 with the roboclaw 2x60A motor controller controlled by an Arduino mega.  The Ame 226-3003 motors are not powerful enough.  In addition the Ame 226-3003 has a worm gear thus the motor cannot be moved when the motor is turned off.  Our position feedback system is a gear attached to the shaft of the motor which spins a gear on a potentiometer.  The two gears have a 1:1 ratio.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to better understand the project, please see the video: &#xA;&lt;a href=&quot;https://www.youtube.com/watch?v=NL_aCwJSRiE&amp;amp;feature=youtu.be&quot; rel=&quot;nofollow&quot;&gt;https://www.youtube.com/watch?v=NL_aCwJSRiE&amp;amp;feature=youtu.be&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Ame 226-3003 catalog page: &#xA;&lt;a href=&quot;http://www.amequipment.com/wp-content/uploads/2013/02/801-1071-web.pdf&quot; rel=&quot;nofollow&quot;&gt;http://www.amequipment.com/wp-content/uploads/2013/02/801-1071-web.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We need a new drive system:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;more powerful than the Ame 226-3003 motor.  We do not have an exact torque spec but we believe any drive system that is 70-100% more powerful than the Ame 226 - 3003.  &lt;/li&gt;&#xA;&lt;li&gt;We like the rpm range of the Ame 226-3003.&lt;/li&gt;&#xA;&lt;li&gt;The drive system must be able to spin freely when the motor is not in use.  &lt;/li&gt;&#xA;&lt;li&gt;We need a way to get position feedback, the potentiometer system we are using seems to work, however it adds to much extra hardware(more stuff to break), (ie) the gear on the potentiometer and the gear on the shaft have to mesh constantly and we have to zero the potentiometer every time we put the leg together so the potentiometer doesn't over spin.  * We would prefer to have an optical encoder inside the motor.&lt;/li&gt;&#xA;&lt;li&gt;We need to have the drive system be at a right angle.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I need help designing a drive system that will meet the requirements.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think I might have found a motor that will work:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The amp flow G43-500&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.ampflow.com/standard_motors.htm&quot; rel=&quot;nofollow&quot;&gt;http://www.ampflow.com/standard_motors.htm&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I like the G43-500 because it can run at 24 v, thus it will take less amps than 12v. Will that motor get the job done?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need to gear this down to around 80rpm.  What type of gear box would work best?&lt;/p&gt;&#xA;" OwnerUserId="6818" LastEditorUserId="350" LastEditDate="2014-08-05T01:18:38.643" LastActivityDate="2014-08-05T01:18:38.643" Title="Exoskeleton Drive System Help" Tags="&lt;motor&gt;&lt;control&gt;&lt;microcontroller&gt;&lt;motion-planning&gt;&lt;encoding&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2014-08-06T17:51:07.690" ContentLicense="CC BY-SA 3.0" />
  <row Id="4324" PostTypeId="2" ParentId="4323" CreationDate="2014-07-28T17:36:14.970" Score="0" Body="&lt;p&gt;For your question on position feedback, this brand, among others, are used in actual commercial/industrial systems. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Has small and big size.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Absolute gives actual angle, says 256 steps per 360 degrees. This may best suits you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Incremental is to give, says, 500 pulses per revolution. However, you need other sensor to sensor the 'starting angle'. May not suits you, in this case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.ia.omron.com/products/category/sensors/rotary-encoders/incremental/index.html&quot; rel=&quot;nofollow&quot;&gt;http://www.ia.omron.com/products/category/sensors/rotary-encoders/incremental/index.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.ia.omron.com/products/category/sensors/rotary-encoders/absolute/index.html&quot; rel=&quot;nofollow&quot;&gt;http://www.ia.omron.com/products/category/sensors/rotary-encoders/absolute/index.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For man-rated system, safety is very important, especially when powerful motor is used.  You may want to use some sort of force sensor to ensure motor auto stop in case of hardware/software error/ equipment failure, etc. so as to protect the human.  Case noise etc. cause errors. Optical isolation may be more safe.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope it helps.&lt;/p&gt;&#xA;" OwnerUserId="5582" LastActivityDate="2014-07-28T17:36:14.970" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="4325" PostTypeId="2" ParentId="2729" CreationDate="2014-07-28T23:05:35.077" Score="3" Body="&lt;p&gt;&lt;a href=&quot;https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=8&amp;amp;ved=0CEUQFjAH&amp;amp;url=http%3A%2F%2Fwww.atlantis-press.com%2Fphp%2Fdownload_paper.php%3Fid%3D3899&amp;amp;ei=-NTWU5nGGIn4oATI-IDoAg&amp;amp;usg=AFQjCNG--tGKOUrLqMtCceDOxBRP1zPGXQ&amp;amp;sig2=wb-SmSWG_-mTdZMFJTEfoA&amp;amp;bvm=bv.71954034,d.cGU&quot; rel=&quot;nofollow&quot;&gt;This paper&lt;/a&gt; seems to agree with you on the fact that 6 DOF arms exist that are not analytically solvable using inverse kinematics, but it also implies there are arm structures that can be analytically solved for, so I would recommenced sticking to those. Most 6 DOF robot arms don't have their last 3 axes coincident in one point, but they are still incredibly precise. Analytical solutions must exist for standard 6 DOF robotic arms. &lt;/p&gt;&#xA;" OwnerUserId="1667" LastActivityDate="2014-07-28T23:05:35.077" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4326" PostTypeId="1" AcceptedAnswerId="4535" CreationDate="2014-07-29T22:23:41.050" Score="6" ViewCount="253" Body="&lt;p&gt;When installing a servo or other actuator, I measure the force needed to perform whatever action is needed and find an actuator that can generate &lt;em&gt;more&lt;/em&gt; than the necessary force. However, I recently wondered if there's a rule of thumb or guideline for &lt;em&gt;how much&lt;/em&gt; overhead is useful, before it becomes a waste.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a (perhaps oversimplified) example, say I have a lever to lift something, and the force needed is 100 Newtons. An actuator that can manage 100 N maximum will have problems with this and stall, with any sort of friction or other imperfections. I would use an actuator that can produce 150 or 200 N - whatever is available and fits the design and budget. After testing, it may become apparent that 200 is overkill, 120 is sluggish, but 150 is good. Other than trial and error, is there a way to measure this, or a rule of approximation?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I realize that variables in the mechanics and construction can significantly alter what force might is needed to be considered ideal, but is there a commonly accepted value for simple applications? Something like &quot;If you need x force, install an actuator with x + 20% force.&quot;&lt;/p&gt;&#xA;" OwnerUserId="5713" LastEditorUserId="5713" LastEditDate="2014-07-31T07:16:57.777" LastActivityDate="2017-10-24T17:10:30.747" Title="Is there a rule of thumb for actuator torque overhead?" Tags="&lt;actuator&gt;&lt;force&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4327" PostTypeId="1" CreationDate="2014-07-29T23:16:37.127" Score="1" ViewCount="54" Body="&lt;p&gt;I want to build a closet with ejectable drawers. On the top should be 4 buttons, each eject opening one of the four drawers of the closet. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am looking for ideas on how to accomplish this. What kind of springs, slider mechanisms perhaps, and other materials to use? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any examples?&lt;/p&gt;&#xA;" OwnerUserId="6824" LastActivityDate="2014-07-31T13:29:21.047" Title="Best technique to built an ejectable drawer?" Tags="&lt;motion&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2014-08-02T09:26:47.963" ContentLicense="CC BY-SA 3.0" />
  <row Id="4329" PostTypeId="1" AcceptedAnswerId="4331" CreationDate="2014-07-31T09:21:59.710" Score="3" ViewCount="9491" Body="&lt;p&gt;For my robotic projects I need some aluminium parts. Currently I am looking for a way to build a chassis including simple gear box. So I need relatively high precision. Which options do I have to machine aluminium without investing in expensive tools?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is what I could think of so far.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Design parts in CAD and send them to a third party company for fabrication. The problem with this is that hobby projects almost never need large quantities and piece production can be still expensive.&lt;/li&gt;&#xA;&lt;li&gt;Buy cheap tools to work aluminium by hand. I don't know which tools would fit this task best. Moreover, the results might be inaccurate, which is a problem for designs with moving parts.&lt;/li&gt;&#xA;&lt;li&gt;Find someone with a CNC who let's me machine my parts. This would most likely result in very slow prototyping cycles though.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;A method that I can do at home with not too expensive tools would be perfect, but I'm looking forward to every solution.&lt;/p&gt;&#xA;" OwnerUserId="1054" LastActivityDate="2014-08-05T21:20:13.257" Title="How to machine aluminium on a low budget?" Tags="&lt;cnc&gt;&lt;chassis&gt;" AnswerCount="4" CommentCount="6" ClosedDate="2014-08-06T17:50:51.717" ContentLicense="CC BY-SA 3.0" />
  <row Id="4330" PostTypeId="2" ParentId="4295" CreationDate="2014-07-31T09:24:11.393" Score="1" Body="&lt;p&gt;It seems to me that you did not consider the fact that angles are not just real numbers but cyclic ($+ \pi = - \pi$).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What I found out is that the estimated measurement of landmark # 4 is in the opposite direction of the actual measurement of landmark # 4. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No. The two angles $3.1272$ and $-3.0658$ are rather close and thus these numbers look perfectly fine. The angle difference is $0.09 \equiv 5.17^{\circ}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When computing the difference between two angles, you need to make sure the results lie in $[-\pi, +\pi]$ (e.g. as described  &lt;a href=&quot;https://stackoverflow.com/questions/2320986/easy-way-to-keeping-angles-between-179-and-180-degrees&quot;&gt;here&lt;/a&gt;).&lt;/p&gt;&#xA;" OwnerUserId="4531" LastEditorUserId="-1" LastEditDate="2017-05-23T12:37:11.430" LastActivityDate="2014-07-31T09:24:11.393" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4331" PostTypeId="2" ParentId="4329" CreationDate="2014-07-31T11:47:04.923" Score="3" Body="&lt;p&gt;In recent years, there is a surge in &lt;strong&gt;low-cost desktop-size&lt;/strong&gt; home/DIY/High School level CNC, milling machine, router and 3D printers (common 3D motions parts, just the 'head' differs).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hundreds of companies do sell assembled unit and/or kits. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do not have hands-on experience on this myself and cannot offer solid help. But since many people make/buy/sell them, it sure live up to expectation (software, speed, accuracy) at the DIY/home/hi school level. People does use metal, plastic and even wood and wide range of price and performance&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Examples, randomly picked up for illustration, are&#xA;&lt;a href=&quot;http://jason-webb.info/wp-content/uploads/2012/01/cnc-mill.gif&quot; rel=&quot;nofollow&quot;&gt;http://jason-webb.info/wp-content/uploads/2012/01/cnc-mill.gif&lt;/a&gt;&#xA;&lt;a href=&quot;http://jason-webb.info/2012/01/cnc-machine-first-thoughts-and-project-overview/&quot; rel=&quot;nofollow&quot;&gt;http://jason-webb.info/2012/01/cnc-machine-first-thoughts-and-project-overview/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="5582" LastEditorUserId="5582" LastEditDate="2014-07-31T17:37:04.737" LastActivityDate="2014-07-31T17:37:04.737" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4332" PostTypeId="2" ParentId="4327" CreationDate="2014-07-31T13:29:21.047" Score="2" Body="&lt;p&gt;Assuming you need only to eject the drawer automatically and can close it back manually, I would suggest using compressed spring which would push out the drawer if there is no resistance. &#xA;A hook or similar mechanism holds the spring when the drawer is pushed back in. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This mechanism would save you use of motors, and thus you won't use electricity. The drawer would function even in case of power outage.&lt;/p&gt;&#xA;" OwnerUserId="1582" LastActivityDate="2014-07-31T13:29:21.047" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4333" PostTypeId="2" ParentId="4297" CreationDate="2014-08-01T21:44:16.387" Score="6" Body="&lt;p&gt;Stereo vision and SLAM are pretty heavy algorithms, both in terms of the processing power and RAM required. You can forget about running this on a little microcontroller like an Arduino. These run at tens of MHz, and have only a few KB RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the &lt;em&gt;very least&lt;/em&gt; you'll need something running at hundreds of MHz with hundreds of MBs of RAM. You didn't say exactly what i7 you were using, but these typically run at several GHz clock speed, and would have several GB RAM installed. On this machine, your stereo vision took a whole second to process. On a &lt;a href=&quot;http://beagleboard.org/black&quot; rel=&quot;noreferrer&quot;&gt;Beaglebone&lt;/a&gt;, you might expect this to take tens of seconds at best.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I recommend using a small laptop computer to process the vision, and something like an Arduino to interface the laptop to the rest of the robot. The laptop can talk to the Arduino over the USB serial port, which should have ample bandwidth for that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is quite a common way to prototype a robot:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/nM5KV.jpg&quot; alt=&quot;Laptop Robot&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2014-08-01T21:44:16.387" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4334" PostTypeId="2" ParentId="4318" CreationDate="2014-08-01T22:10:27.923" Score="3" Body="&lt;p&gt;I have done this myself, controlling the exact position of a brushless DC motor as its velocity ramps up and down. And I did it using a position controller only. Sounds obvious, but it worked extremely well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The integral term of the controller is key to this. Since you want the position error to be as close to zero as possible the whole time, but you need a large output from the controller to drive the motor, most of this comes from the I term.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other thing you need to add is a feed forward term, which feeds some of the demanded acceleration to the output. This will give the controller the extra power it needs to track rapid velocity changes. We could call this an FPID controller. &lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2014-08-01T22:10:27.923" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4336" PostTypeId="1" CreationDate="2014-08-02T06:04:09.607" Score="0" ViewCount="1244" Body="&lt;p&gt;I want to create a robot that will navigate on a desired path!&#xA;That path can be a straight line or a circular path with a given radius.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I will use 3 or 4 omni wheel drive platform and for positioning,&#xA;I am using this research paper which perform dead-reckoning using mouse sensors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.google.co.in/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;cad=rja&amp;amp;uact=8&amp;amp;ved=0CBsQFjAA&amp;amp;url=https%3A%2F%2Fcourses.cit.cornell.edu%2Fee476%2FFinalProjects%2Fs2009%2Fncr6_wjw27%2Fncr6_wjw27%2Fdocs%2Fdead_reckoning_with_mouse_sensors.pdf&amp;amp;ei=5nvcU42dG4mdugSIooBY&amp;amp;usg=AFQjCNGUXJ_pM78JFv-N1wEq9OjSiUmQtA&amp;amp;sig2=aX-6u7jQK3wwtEeLbKbIaQ&amp;amp;bvm=bv.72197243,d.c2E&quot; rel=&quot;nofollow&quot;&gt;Dead-Reckoning using Mouse Sensors&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've understood that I will get x, y and θ positions, which are actual positions of robot.&#xA;These can be used to calculate the error and then using PID to compensate the error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, to find the error, I must have the desired position of the robot at that moment!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, the Robot is at (0,0) and it needs to move in a circular path of equation&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ x^2 + y^2 - 10y = 0 $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, I want to calculate the position at t = 2 sec, how to do that?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If someone has already done similar stuff, please post the link. I am not able to find any resource on web!&lt;/p&gt;&#xA;" OwnerUserId="4284" LastEditorUserId="350" LastEditDate="2014-08-05T01:15:47.240" LastActivityDate="2014-08-05T01:15:47.240" Title="Position Control of an Omni Wheel Drive Robot" Tags="&lt;mobile-robot&gt;&lt;pid&gt;&lt;kinematics&gt;&lt;wheeled-robot&gt;&lt;motion&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4337" PostTypeId="2" ParentId="4336" CreationDate="2014-08-02T07:31:49.537" Score="0" Body="&lt;p&gt;This excellent course covers a lot of your question. Processor presented well in talking and also actual demo on real hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also has software stimulator for student to test out without real hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As course now finished, not sure if you can log in or need to wait until next run.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.coursera.org/course/conrob&quot; rel=&quot;nofollow&quot;&gt;https://www.coursera.org/course/conrob&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;also, I never used omni wheel, would you mind advise formula, pointer,tutorial,paper on how to convert wheel rotation to speed and angle of path. Also, if possible, can I have 10 to 20, photo of different omni wheel setup. First time to see your paper using 90 degree gear to allow longer motor than straight 120 degree delta format usually see. excellent idea.&lt;/p&gt;&#xA;" OwnerUserId="5582" LastEditorUserId="5582" LastEditDate="2014-08-02T07:59:04.957" LastActivityDate="2014-08-02T07:59:04.957" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4338" PostTypeId="2" ParentId="4336" CreationDate="2014-08-02T11:41:22.913" Score="1" Body="&lt;p&gt;Generally speaking, you need to define how long you want a full revolution to take. From that, you know what the desired angle is at each timestep and can calculate the desired position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note this breaks down to cos and sin waves in both $x$ and $y$ for ellipses in general.&#xA;$$&#xA;\begin{align}&#xA;  x^d - x_c &amp;amp;= a_x \cos \left ( \frac{2 \pi}{p} t \right )&#xA;  \\&#xA;  y^d - y_c &amp;amp;= a_y \sin \left ( \frac{2 \pi}{p} t \right )&#xA;\end{align}&#xA;$$&#xA;where $x^d$ and $y^d$ are the desired respective positions, $(x_c, y_c)$ is the center of the circle, $a_x$ and $a_y$ define the ellipse size ($a_x = a_y = $radius for a pure circle), $p$ is the period in seconds for a full revolution, and $t$ is the time in seconds.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2014-08-02T11:41:22.913" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4339" PostTypeId="2" ParentId="1427" CreationDate="2014-08-02T17:54:27.560" Score="0" Body="&lt;p&gt;You can easily remove A7105 module from your transmitter and connect it to Arduino (take care because it uses 3.3v levels).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can get this library for Arduino based TX module:&#xA;&lt;a href=&quot;http://www.cloud-rocket.com/2014/07/reverse-engineering-wltoys-v929v911protocol/&quot; rel=&quot;nofollow&quot;&gt;http://www.cloud-rocket.com/2014/07/reverse-engineering-wltoys-v929v911protocol/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="6840" LastActivityDate="2014-08-02T17:54:27.560" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4340" PostTypeId="1" AcceptedAnswerId="4341" CreationDate="2014-08-02T18:00:09.710" Score="0" ViewCount="802" Body="&lt;p&gt;the matlab code is used to detect red colored object, but i want to control a bot to move towards the detected object. just need a simple algorithm or idea, controlling the servo i will be able to do it.    &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/x0Jvm.png&quot; alt=&quot;Detailed Diagram&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;%get snapshot&#xA;data = imread('image.jpg');&#xA;% Now to track red objects in real time&#xA;% we have to subtract the red component &#xA;% from the grayscale image to extract the red components in the image.&#xA;diff_im = imsubtract(data(:,:,1), rgb2gray(data));&#xA;%Use a median filter to filter out noise&#xA;diff_im = medfilt2(diff_im, [3 3]);&#xA;% Convert the resulting grayscale image into a binary image.&#xA;diff_im = im2bw(diff_im,0.18);&#xA;&#xA;% Remove all those pixels less than 300px&#xA;diff_im = bwareaopen(diff_im,300);&#xA;&#xA;% Label all the connected components in the image.&#xA;bw = bwlabel(diff_im, 8);&#xA;&#xA;% Here we do the image blob analysis.&#xA;% We get a set of properties for each labeled region.&#xA;stats = regionprops(bw, 'BoundingBox', 'Centroid');&#xA;&#xA;% Display the image&#xA;imshow(data)&#xA;&#xA;hold on&#xA;&#xA;%This is a loop to bound the red objects in a rectangular box.&#xA;for object = 1:length(stats)&#xA;    bb = stats(object).BoundingBox;&#xA;    bc = stats(object).Centroid;&#xA;    rectangle('Position',bb,'EdgeColor','r','LineWidth',2)&#xA;    plot(bc(1),bc(2), '-m+')&#xA;    a=text(bc(1)+15,bc(2), strcat('X: ', num2str(round(bc(1))), '    Y: ', num2str(round(bc(2)))));&#xA;    set(a, 'FontName', 'Arial', 'FontWeight', 'bold', 'FontSize', 12, 'Color', 'yellow');&#xA;end&#xA;&#xA;&#xA;&#xA;hold off&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="1799" LastActivityDate="2014-08-05T15:09:17.873" Title="Matlab for moving a robot towards the detected block" Tags="&lt;mobile-robot&gt;&lt;microcontroller&gt;&lt;wheeled-robot&gt;&lt;robotc&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4341" PostTypeId="2" ParentId="4340" CreationDate="2014-08-02T19:30:05.163" Score="-1" Body="&lt;p&gt;Image X and Y will reflect x and Y coordinates on the floor. Lens has distortion. Use calibration (if opencv), if high accuracy needed (may not need in this case).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Original answer was mis-understood:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Height and Width is distance (far, smaller image) then PID to control speed, slow down when near&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Left, Central, Right of the block is angle of block as reference to vehicle coordinate frame and calculate the motion angle&lt;/p&gt;&#xA;" OwnerUserId="5582" LastEditorUserId="5582" LastEditDate="2014-08-05T15:09:17.873" LastActivityDate="2014-08-05T15:09:17.873" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="4342" PostTypeId="2" ParentId="4312" CreationDate="2014-08-03T02:57:03.943" Score="2" Body="&lt;p&gt;Depending on your actual project, you can choose several options.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DGPS accurate to 0.5 to 2 meters for real time application, meaning get corrected position now. Needs one GPS receiver and one data stream receiver, wireless broadcast and internet/cellularphone, feeding real time correction data (from reference station) to the GPS receiver.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;RTK is real time. Same setup as DGPS. Normally, need professional/survey grade (not consumer grade) GPS receiver. The data stream format for RTK is different from DGPS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Post processing mean getting accurate position afterward. Record data from GPS receiver that send out raw data (only higher grade unit does this), save to file. Back to office, use software to process the data against recorded 'data stream' from a reference station.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can own your reference station by buying your own reference station receiver. Some countries/companies operate this as a service, named, CORS, continuously operated reference stations, at free or fee-based.  Through international co-operation, IGS operates this on international scale. Data accuracy, coverage area, how-to-get-data, fee vary by huge extend. You need to find out what you want, can have and willingness to pay. Some countries offer best money can buy service, free of charge, as public service.&lt;/p&gt;&#xA;" OwnerUserId="5582" LastActivityDate="2014-08-03T02:57:03.943" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4343" PostTypeId="2" ParentId="2657" CreationDate="2014-08-03T04:51:20.190" Score="2" Body="&lt;p&gt;Yes, of course it 'can be crushed' - (imagine I'm standing in front of a ginormous hydraulic press, with an evil grin on my face). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The sensor deforms under pressure. When it deforms far enough it will reach its elastic limit and fail.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The solution is to arrange to transfer the load from the sensor to a stand when the load exceeds the range (and before it exceeds the elastic limit and cracks). For a piezo sensor, this could be as simple as a pin that stops the anvil motion before it destroys the sensor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the transient is applied and removed rapidly, but all other changes in force are slow, you could simply put a shock absorber in parallel with the sensor. The shock would take the load during the overpulse.&lt;/p&gt;&#xA;" OwnerUserId="6843" LastEditorUserId="350" LastEditDate="2014-08-05T01:49:57.543" LastActivityDate="2014-08-05T01:49:57.543" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4344" PostTypeId="2" ParentId="4329" CreationDate="2014-08-03T06:10:51.703" Score="4" Body="&lt;p&gt;Actually, you can perform most milling operations with a file, a micrometer, and patience.&lt;/p&gt;&#xA;" OwnerUserId="6843" LastActivityDate="2014-08-03T06:10:51.703" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4345" PostTypeId="2" ParentId="4313" CreationDate="2014-08-03T06:41:52.543" Score="0" Body="&lt;p&gt;Indeed I d also go for an interrupt method. As this method allows you to execute code, do something etc.. on a very arbitrary base. Which I think youll ,due to the non constant dt&lt;/p&gt;&#xA;" OwnerUserId="6844" LastActivityDate="2014-08-03T06:41:52.543" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4346" PostTypeId="1" AcceptedAnswerId="4347" CreationDate="2014-08-03T11:45:57.823" Score="0" ViewCount="638" Body="&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/J61he.jpg&quot; alt=&quot;Curve&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am able to locate centroids of each blocks, but i am unable to join two blocks with a line segment by avoiding the obstacle as shown in the figure. Please need help how do i achieve this using matlab.&lt;/p&gt;&#xA;" OwnerUserId="1799" LastEditorUserId="110" LastEditDate="2016-07-06T18:11:30.863" LastActivityDate="2016-07-06T18:11:30.863" Title="how to plot a line between two centroids in matlab" Tags="&lt;computer-vision&gt;&lt;motion-planning&gt;&lt;navigation&gt;&lt;matlab&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4347" PostTypeId="2" ParentId="4346" CreationDate="2014-08-03T17:18:32.680" Score="0" Body="&lt;p&gt;Sorry I do not know. But following course has your needed info &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some course can register while not running. Some need wait for run time. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Low-level motion (PID, point a to b) &lt;a href=&quot;https://www.coursera.org/course/conrob&quot; rel=&quot;nofollow&quot;&gt;https://www.coursera.org/course/conrob&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;High level path planning &lt;a href=&quot;https://www.edx.org/course/tumx/tumx-autonavx-autonomous-navigation-1658&quot; rel=&quot;nofollow&quot;&gt;https://www.edx.org/course/tumx/tumx-autonavx-autonomous-navigation-1658&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;part 1 and of of this, &lt;a href=&quot;https://courses.edx.org/courses/SNUx/SNU446.345.1x/1T2014/info&quot; rel=&quot;nofollow&quot;&gt;https://courses.edx.org/courses/SNUx/SNU446.345.1x/1T2014/info&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fly &lt;a href=&quot;https://www.edx.org/course/tumx/tumx-autonavx-autonomous-navigation-1658&quot; rel=&quot;nofollow&quot;&gt;https://www.edx.org/course/tumx/tumx-autonavx-autonomous-navigation-1658&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="5582" LastActivityDate="2014-08-03T17:18:32.680" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4348" PostTypeId="1" CreationDate="2014-08-03T20:56:45.680" Score="1" ViewCount="399" Body="&lt;p&gt;There seems to be consensus here that the BeagleBone Black has 1ms+ latency while toggling gpio pins due to the fact that gpio is handled outside of the cpu. Are the uart/i2c/spi lines equaly slow, or are they significantly faster?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've seen references to people talking to the gpio &lt;a href=&quot;https://stackoverflow.com/questions/13124271/driving-beaglebone-gpio-through-dev-mem&quot;&gt;more directly&lt;/a&gt;. Could this decrease uart/i2c/spi latencies as well?&lt;/p&gt;&#xA;" OwnerUserId="1667" LastEditorUserId="-1" LastEditDate="2017-05-23T12:37:11.430" LastActivityDate="2014-08-03T20:56:45.680" Title="BeagleBone uart/spi/i2c latency" Tags="&lt;i2c&gt;&lt;beagle-bone&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4349" PostTypeId="2" ParentId="4299" CreationDate="2014-08-03T22:34:35.747" Score="1" Body="&lt;p&gt;Yes, that looks like it will work. Keep in mind that the arduino io pins aren't powering any logic. Most Arduinos can provide more than 500 mA from their 5v pin assuming that they are connected to a power supply other than usb (not that you want to draw much current from it). The io pins on atmega328 based boards can provide 40 mA, so powering anything more than an led from them is generally not a good idea.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The one thing I would worry about is that the ACS714 is rated at 30 amps, and it has a resolution of 66 mV/amp. The atmega328's 10bit adc has a theoretical resolution of 4mV. While this sounds like it should be enough, I personally doubt the adc would be reliably accurate below 39 mV when noise is taken into account (3 LSBs). This doesn't take thermal drift and other factors into account. It would still probably work fine, but don't expect much from the current sensors. &lt;/p&gt;&#xA;" OwnerUserId="1667" LastActivityDate="2014-08-03T22:34:35.747" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4350" PostTypeId="2" ParentId="712" CreationDate="2014-08-03T22:44:18.820" Score="2" Body="&lt;p&gt;The recently open-sourced &lt;a href=&quot;http://www.coppeliarobotics.com&quot; rel=&quot;nofollow&quot;&gt;V-REP simulator&lt;/a&gt; may suite your needs. I found it more approachable than Gazebo, and it can run on Windows, OSX, and Linux. Their tutorials are fairly straight forward. There are a ton of different ways to interface with it programmatically (including with ROS). It looks like there is even a &lt;a href=&quot;http://www.coppeliarobotics.com/helpFiles/en/hexapodTutorial.htm&quot; rel=&quot;nofollow&quot;&gt;tutorial for making a hexapod&lt;/a&gt;, which you could probably use as a starting point if they don't already have a quadruped example available. Unfortunately, I believe the simulator is tied directly with the UI rendering, which I believe is not necessarily the case with Gazebo.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, your program would have to use one of the many ways to interface with V-REP, and then feed the performance of a particular gait, determined from some sensor in V-REP, into a machine learning algorithm (perhaps something from OpenCV as @WildCrustacean mentioned). You'd then have to come up with a translation from the gait description used by the simulated robot to something used to command actual motors on your Arduino.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, you could make your own simulator using an existing physics engine, rendering it with a graphics library. Bullet and OGRE, respectively, could be used for this purpose, if you like C++. There are tons of others for other programming languages.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would also look into how researchers who work on gait generation do their simulations. There might be an existing open source project dedicated to it.&lt;/p&gt;&#xA;" OwnerUserId="181" LastEditorUserId="181" LastEditDate="2014-08-14T00:16:49.377" LastActivityDate="2014-08-14T00:16:49.377" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4352" PostTypeId="2" ParentId="4346" CreationDate="2014-08-04T14:56:11.390" Score="2" Body="&lt;p&gt;Have you tried the &lt;code&gt;line()&lt;/code&gt; function, which plots a straight line on a figure?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You do something like&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;imshow(myImage);&#xA;hold on&#xA;line(X, Y);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Check &lt;code&gt;help line&lt;/code&gt; for details.&lt;/p&gt;&#xA;" OwnerUserId="1115" LastEditorUserId="1115" LastEditDate="2014-08-05T17:54:24.800" LastActivityDate="2014-08-05T17:54:24.800" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4353" PostTypeId="2" ParentId="4329" CreationDate="2014-08-04T21:32:44.207" Score="3" Body="&lt;p&gt;As John Williams points out you can find desktop metal milling machines that are reasonably priced.  However if you want to work with metal make sure the machine you're buying is designed for that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are a few major differences between metal cutting and machines designed for wood or for additive processes (3D printers):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The cutting forces with metal (even with a soft metal like Aluminium) are very high.  If you do not have a stiff enough frame the cutting tool will simply bounce off the surface of the metal (chatter) and will result with very poor cutting, extra heat, and fast dulling of the tool.  If you look at the design of metal mills they are generally very solid hunks of metal (steel).&lt;/li&gt;&#xA;&lt;li&gt;The rotational speed of a metal working tool is going to be much slower than e.g. a wood tool.  A router designed to cut wood may run at 10K RPM which is way too fast for metal.  It may be able to take very light cuts off aluminium but the cutting tool will dull very quickly and the router itself is not designed to take the forces of cutting metal and will also not live for very long.&lt;/li&gt;&#xA;&lt;li&gt;Metal cutting often requires lubrication/cooling that isn't used with wood.&lt;/li&gt;&#xA;&lt;li&gt;There are many different Aluminium alloys with somewhat different properties.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Depending on what you are trying to build you may not need the entire spectrum of machining capabilities.  E.g. if you're just trying to locate some objects in 2D you can get a plate and drill holes in it with reasonable accuracy without needing any fancy milling equipment.  You can also sometimes substitute adjustability to accuracy/precision, the simplest example is drilling a large hole and using a caliper or micrometer to measure the position before tightening your bolts.&lt;/p&gt;&#xA;" OwnerUserId="1584" LastActivityDate="2014-08-04T21:32:44.207" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4354" PostTypeId="2" ParentId="2192" CreationDate="2014-08-05T02:05:59.337" Score="1" Body="&lt;p&gt;There are a variety of &lt;a href=&quot;http://www.digikey.com/product-search/en?pv345=88&amp;amp;FV=fff4001e%2Cfff801dd&amp;amp;mnonly=0&amp;amp;newproducts=0&amp;amp;ColumnSort=0&amp;amp;page=1&amp;amp;quantity=0&amp;amp;ptm=0&amp;amp;fid=0&amp;amp;pageSize=100&quot; rel=&quot;nofollow&quot;&gt;IR proximity sensors&lt;/a&gt; that you can buy.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could also adapt &lt;a href=&quot;http://playground.arduino.cc/Main/PanasonicIrSensor&quot; rel=&quot;nofollow&quot;&gt;this technique using a Panasonic IR sensor with an Arduino&lt;/a&gt;, and use &lt;a href=&quot;http://en.wikipedia.org/wiki/Successive_approximation_ADC&quot; rel=&quot;nofollow&quot;&gt;successive approximation&lt;/a&gt; -- adjusting the IR LED resistance -- to make a guess at the range.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-08-05T02:05:59.337" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4355" PostTypeId="2" ParentId="3069" CreationDate="2014-08-05T02:24:04.740" Score="2" Body="&lt;p&gt;I think the term you are looking for is &lt;a href=&quot;http://en.wikipedia.org/wiki/Holonomic_(robotics)&quot; rel=&quot;nofollow&quot;&gt;Holonomic&lt;/a&gt;.  The important distinction that you've missed is between &quot;total degrees of freedom&quot; and &quot;controllable degrees of freedom&quot; (which is what most roboticists mean when they refer to DOF).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your quadcopter is non-holonomic; it can achieve 6 degrees of freedom, but only by planning maneuvers that make use of its 4 controllable degrees of freedom.  &lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-08-05T02:24:04.740" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4356" PostTypeId="2" ParentId="2687" CreationDate="2014-08-05T02:30:09.937" Score="8" Body="&lt;p&gt;You could probably calculate this value, but the sensible thing to do would be to just measure it directly.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just turn it upside-down and put it on a kitchen scale &lt;a href=&quot;https://www.youtube.com/watch?v=2f_XM6l6YGQ&quot; rel=&quot;noreferrer&quot;&gt;as shown in this video&lt;/a&gt;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=2f_XM6l6YGQ&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dr6Tr.png&quot; alt=&quot;Measuring thrust with a scale&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-08-05T02:30:09.937" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4357" PostTypeId="1" CreationDate="2014-08-05T03:03:44.453" Score="0" ViewCount="97" Body="&lt;p&gt;I'm looking for some direction on how to create a device that does the following:&#xA;Imagine you have a yoga mat, I want a device that can roll it up and unroll it without a human intervening in the rolling process.&#xA;I reliable this is a robotics forums but there doesn't appear to be a section for mechanical engineering so I'm posting my question here.&lt;/p&gt;&#xA;" OwnerUserId="6850" LastActivityDate="2014-12-06T20:22:12.843" Title="Device to roll a mat" Tags="&lt;motor&gt;&lt;mechanism&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4358" PostTypeId="2" ParentId="4357" CreationDate="2014-08-05T06:34:06.657" Score="1" Body="&lt;p&gt;Some inspiration from this leading robot&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=MeBBVAKv5zI&quot; rel=&quot;nofollow&quot;&gt;PR2 Autonomously Folding A Tshirt&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.google.com/search?q=pr2%20robot%20folding%20laundry&amp;amp;safe=off&amp;amp;tbm=isch&amp;amp;tbo=u&amp;amp;source=univ&amp;amp;sa=X&amp;amp;ei=0XngU8vYBtfp8AWzuIDgCg&amp;amp;ved=0CD4QsAQ&amp;amp;biw=1313&amp;amp;bih=853&quot; rel=&quot;nofollow&quot;&gt;PR2 Handling other tasks too&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="5582" LastActivityDate="2014-08-05T06:34:06.657" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4359" PostTypeId="1" CreationDate="2014-08-05T07:44:51.363" Score="1" ViewCount="362" Body="&lt;p&gt;Need help to choose &lt;strong&gt;desk top, low cost, DIY/High school grade laser cutter&lt;/strong&gt; for making base plate for DIY robots, about maximum A4 paper size, as this photo.  Idea, comment, advises, even if only partially cover some and not all questions, are welcome.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/wBfiY.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;What power is needed to cut Acrylic 3 to 5mm thick. Many sellers at 40 to 60 watts range. What can these do?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;How cut thickness depends on cut speed? To what extend can I choose slow speed to cut thicker sheet.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Does cut thickness depends on color/clear acrylic? It is CO2 laser. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Some units have options, like air blower and honeycomb bottom plate. What are their functions? what options are useful for this case.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Which CAD 2D drawing software is best supported by these range of products?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Apart from main function of cutting flat acrylic plate, some has additional Z axis motor to rise/lower work piece for engrave/photo/line_letter marking on 3D objects. What software is needed to support these 3D operation.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="5582" LastEditorUserId="5582" LastEditDate="2014-08-05T12:59:19.797" LastActivityDate="2014-08-05T12:59:19.797" Title="DIY Laser cutter for small Acrylic robot baseplate" Tags="&lt;laser&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4360" PostTypeId="1" AcceptedAnswerId="4361" CreationDate="2014-08-05T10:54:00.240" Score="5" ViewCount="1172" Body="&lt;p&gt;I am currently trying to parametrize the low-level gains of a robotic arm. This arm uses a classical PID for each joint.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am trying to use a method based on computation rather than a trial-and-error/tweaking approach. The method I use considers each joint independently and assumes the system driven by the PID is linear. Hence I infer a transfer function, a characteristic polynomial, poles and this gives me gains $K_p$, $K_i$, and $K_d$ for each joint.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, computed as I did, these gains depend on the natural angular-frequency. For example:&#xA;$$&#xA;K_p = 3 a w^2&#xA;$$&#xA;where $a$ is the inertia and $w$ is the natural angular-frequency.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hence my question: &lt;strong&gt;how shall I compute $w$, the natural angular-frequency for my system&lt;/strong&gt;? Is this an enormous computation involving the geometry and other complex characteristics of the robot, and that only a computer can do or are there simple assumptions to be made which can already give a rough result for $w$?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I guess this is a complex computation and this is one of the reasons why PID gains are most often found by trial-and-error rather than from computation. Though I am looking for some more details on the subject to help me understand what is possible and what is not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Kind regards,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Antoine&lt;/p&gt;&#xA;" OwnerUserId="763" LastEditorUserId="110" LastEditDate="2014-12-29T16:34:07.867" LastActivityDate="2014-12-29T23:04:43.693" Title="Natural frequency computation (for PID gains computations)" Tags="&lt;control&gt;&lt;pid&gt;&lt;robotic-arm&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4361" PostTypeId="2" ParentId="4360" CreationDate="2014-08-05T12:19:38.777" Score="4" Body="&lt;p&gt;For a rough calculation of natural frequency, you could create an &lt;a href=&quot;http://en.wikipedia.org/wiki/Bode_plot&quot; rel=&quot;nofollow&quot;&gt;bode plot&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Starting at low frequencies, command a sin wave and measure the amplitude of the output motion (which will be a phase-shifted sin wave). Plotting the output amplitude on a log-scale, if you're lucky the response will be flat for a while, turn relatively quickly, and then start decaying in a straight line (again, make sure it is a log-log plot). If you extend the 2 asymptotic lines, the early horizontal and the later decaying, the point at which they intersect is the natural frequency.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, I am doubtful that you will get a good result. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;First, it assumes a second order linear system which is sometimes a good approximation and sometimes not. &lt;/li&gt;&#xA;&lt;li&gt;Second, it can sometimes be hard and sometimes dangerous to measure the response especially at higher frequencies. &lt;/li&gt;&#xA;&lt;li&gt;Lastly, mathematical tuning techniques like these only work well for simple, isolated systems. A robotic arm is anything but: movement at the wrist joint significantly affects the elbow joint creating a complex coupling. At best, the mathematical tuning will give you a starting point from which you will need to manually tune.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2014-08-05T12:19:38.777" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4362" PostTypeId="1" CreationDate="2014-08-05T14:59:46.357" Score="2" ViewCount="1448" Body="&lt;p&gt;I have decided to pursue a career in automation and robotic. At the moment, I am being torn between Mechanical and Electrical Engineering. I know that both of them relate to my choices of career, and at the moment, I think that I like them equally. I hope you guys can help me solve my dilemma by using your insights/experiences to assist me with the following questions:   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;1/ From your experiences and opinions, which of the two engineering fields is generally more crucial and challenging, especially in an automation/robotics project?&lt;br&gt;&#xA;2/ Which will see an increase in demand and importance in the near future? Which of them might become outdated/obsolete or at least develop at a slower rate compare to the other?(I have a feeling that EE has a slight edge over this matter; however, I am not so sure)&#xA;3/ Which of the fields is more versatile? Which is more physical demanding (I am actually quite frail)&lt;br&gt;&#xA;4/ Which is generally easier to self-study? Robotics is obviously an incredibly broad and complex field and I have prepared to step outside of my comfort zone and do lots of studying by myself to achieve my goals and passion.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I could probably come up with a few more questions; however, I am sure that you guys got the gist of my puzzle. Thank you very much and I apologize if there is any grammatical error.&lt;/p&gt;&#xA;" OwnerUserId="6856" LastActivityDate="2014-10-06T20:20:07.930" Title="Mechanical or electrical engineering for robotic and automation?" Tags="&lt;beginner&gt;&lt;automatic&gt;" AnswerCount="3" CommentCount="2" ClosedDate="2014-10-27T10:02:37.553" ContentLicense="CC BY-SA 3.0" />
  <row Id="4363" PostTypeId="2" ParentId="4362" CreationDate="2014-08-05T15:23:26.053" Score="0" Body="&lt;p&gt;How about make a self reflection on &lt;/p&gt;&#xA;&#xA;&lt;p&gt;a) which one you like from the heart, only yourself can answer this &lt;strong&gt;hard&lt;/strong&gt;&#xA;    question &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;b) which earn more, this is easy. can check Government labor&#xA;department statistic and prediction &#xA;&#xA;c) are you able and confident in learning it, try tasting from looking at MOOC&#xA;courses&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Hope this help, welcome and best wishes&lt;/p&gt;&#xA;" OwnerUserId="5582" LastActivityDate="2014-08-05T15:23:26.053" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="4364" PostTypeId="1" AcceptedAnswerId="4411" CreationDate="2014-08-05T17:03:24.343" Score="8" ViewCount="12282" Body="&lt;p&gt;I'm going through the textbook Robot Modeling and Control, learning about the DH convention and working through some examples. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have an issue with the following example. Given below is an image of the problem, and the link parameter table which I tried filling out myself. I got the same answers, except I believe there should be a parameter d1 representing the link offset between frames 1 and 2. This would be analogous to the d4 parameter. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/jc3Ax.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If anyone could explain why I might be wrong, or confirm that I have it right, that would be great. I hate it when it's me against the textbook lol. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cheers.&lt;/p&gt;&#xA;" OwnerUserId="6858" LastEditorUserId="110" LastEditDate="2015-02-20T21:49:15.307" LastActivityDate="2020-04-23T22:45:36.600" Title="Denavit-Hartenberg parameters for SCARA manipulator" Tags="&lt;forward-kinematics&gt;&lt;dh-parameters&gt;" AnswerCount="5" CommentCount="2" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4366" PostTypeId="1" CreationDate="2014-08-05T17:07:54.400" Score="3" ViewCount="361" Body="&lt;p&gt;I've seen in a lot of places some methods of tuning a PID controller. Most of them will say that one should apply a step input to the system and based on that response you can tune the PID parameters following some rule of thumb. But what about a system which one of its pole is at origin? In other words, a step response on a system like that will have an infinitely increasing ramp in the output (theoretically).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An example:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;let's say we have a spinning wheel (fixed at center) and all we can control is the amount of torque applied to make it spin. If we can read its position (angle) and we want to design a PID controller to set its position (more or less like a step-motor). How can that be done? Note that a step input in this case will be a constant torque and this will make the wheel spin faster and faster. How should one proceed?&lt;/p&gt;&#xA;" OwnerUserId="4437" LastActivityDate="2014-08-27T19:23:30.457" Title="PID in a system with pole at origin" Tags="&lt;pid&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4367" PostTypeId="2" ParentId="4329" CreationDate="2014-08-05T21:20:13.257" Score="3" Body="&lt;p&gt;Look for a makerspace in your area, in boston there is &lt;a href=&quot;http://artisansasylum.com/site/&quot; rel=&quot;nofollow&quot;&gt;http://artisansasylum.com/site/&lt;/a&gt;&#xA;they have various CNC machines, laser cutters, Etc. which with some simple low cost training you are allowed to use. &lt;/p&gt;&#xA;" OwnerUserId="6859" LastActivityDate="2014-08-05T21:20:13.257" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4368" PostTypeId="2" ParentId="2373" CreationDate="2014-08-06T09:11:27.863" Score="3" Body="&lt;p&gt;Wow, walls, mazes, casting rays. Does anyone have &lt;a href=&quot;http://en.wikipedia.org/wiki/Wolfenstein_3D&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wolfenstein&lt;/a&gt;/&lt;a href=&quot;http://en.wikipedia.org/wiki/Doom_(video_game)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Doom&lt;/a&gt; deja vu?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/TH1Qv.jpg&quot; alt=&quot;Doom&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back in the day, these games had to solve similar problems, calculating the intersection between lines (of fire or movement) and the walls of the map. For Wolfenstein, it was fairly easy because the map was arranged in a grid, and they used &lt;a href=&quot;http://en.wikipedia.org/wiki/Ray_casting&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ray Casting&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For Doom, it was a little harder, since there was no grid. So they used something called a &lt;a href=&quot;https://en.wikipedia.org/wiki/Binary_space_partitioning&quot; rel=&quot;nofollow noreferrer&quot;&gt;Binary Space Partitioning Tree&lt;/a&gt; (BSP Tree):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/GGjOZ.png&quot; alt=&quot;BSP Tree&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This recursively divides the map in a way that makes it easy to perform geometrical queries on it. In computer graphics, this would usually mean rendering the surfaces in such a way that there was no overlap, but it could also mean performing efficient collision detection.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The BSP Tree works well if your walls are defined by nice large lines/planes. However, if your walls consist of thousands point cloud samples or something, then the tree will be inappropriate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the case of point cloud (or tiny line cloud) data, I would recommend a &lt;a href=&quot;http://en.wikipedia.org/wiki/Quadtree&quot; rel=&quot;nofollow noreferrer&quot;&gt;quadtree&lt;/a&gt;. Again, this divides space recursively in such a way that you can easily find the set of points that are close to your robot, or close to some line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/psJVI.png&quot; alt=&quot;Quadtree&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2014-08-06T09:11:27.863" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4369" PostTypeId="1" AcceptedAnswerId="4374" CreationDate="2014-08-06T13:06:13.740" Score="1" ViewCount="1193" Body="&lt;p&gt;I've been working on my two-wheeled mobile robot I've been trying to perfect my obstacle avoidance algorithm which is Artificial Potential Field method . Also i use Arduino Uno kit . The basic concept of the potential field approach is to compute a artificial potential field in which the robot is attracted to the target and repulsed from the obstacles. The artificial potential field is used due to its computational simplicity. the mobile robot applies a force generated by the artificial potential field as the control input to its driving system . the Artificial Potential Field method in its computations depends on the distance between robot and goal or target and the distance between robot and obstacles that effected the robot (which could easily get for ultrasonic senors)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I applied the Artificial potential field method in Matlab environment / simulation and it is done successfully , really what I need in the simulation is to get the current position of mobile robot and position of goal as x, y coordinates (to compute the distance between robot and goal) and the obstacles positions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The output of the Artificial potential field is the desired angle to avoid obstacle and reach to the goal , the method give the robot the angle the pointed to the goal then the robot goes toward that angle and if the robot face an obstacle in his way (got from sensor reading) the Artificial potential field will update the angle to avoid the obstacle and then re-give the robot the angle that pointed to the goal and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The question is how could I apply the Artificial potential field method in real would? what should I get? is it easy to do that or it is impossible? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I had Rover 5 with two normal DC motors and two encoders (incremental rotary encoder) per each wheel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any Help or suggestion on the topic will be highly appreciated please.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt; Based on the response from Shahbaz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The case is very simple, but first, there is something to know that I constrained with some limitations that I couldn't overstep them, one of them is that the real world should be exactly as simulation for example in the simulation I consisted that robot started with (0,0) on coordinates  x, y axis and I should put the goal point for example (10,20)  and feed this point in the Artificial potential field method and then compute distance between  robot and goal (so I don't need any technique to determine the position of goal) and I don't know if I could applied that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second constraint is that I should use the encoders of wheels to determine the current position of mobile robot and its orientation depending on a calculation formula (something like this &lt;a href=&quot;http://rossum.sourceforge.net/papers/DiffSteer/&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;) even if that will be inaccurate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I had a Rover 5 with two normal DC motors and two encoders (incremental rotary encoder) per each wheel, each encoder has four wires I don't know how to deal with them yet, and how could I translate the pulses of encoders or how to work out the x.y position of your robot based on the shaft encoder data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am still searching for ….&lt;/p&gt;&#xA;" OwnerUserId="6791" LastEditorUserId="158" LastEditDate="2014-08-07T09:09:06.117" LastActivityDate="2014-08-18T16:29:37.850" Title="Artificial Potential Field navigation" Tags="&lt;mobile-robot&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4370" PostTypeId="1" AcceptedAnswerId="4372" CreationDate="2014-08-06T13:10:57.310" Score="2" ViewCount="76" Body="&lt;p&gt;I've been going through Syskit tutorials at rock-robotics.org. In the tutorials e.g. &lt;a href=&quot;http://rock-robotics.org/stable/documentation/system_management_tutorials/200_first_composition.htm&quot; rel=&quot;nofollow&quot;&gt;First composition&lt;/a&gt;, there are two different components declared with:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; add Controldev::JoystickTask, :as =&amp;gt; &quot;cmd&quot;&#xA; add RockTutorial::RockTutorialControl, :as =&amp;gt; &quot;rock&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I was wondering how could I add an additional &lt;code&gt;RockTutorialControl&lt;/code&gt; into the composition, so that the instantiation would then create two separate instances of the same component?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've tried something like&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;add RockTutorial::RockTutorialControl, :as =&amp;gt; &quot;foo&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;but this apparently isn't the way to go. &lt;code&gt;syskit instanciate&lt;/code&gt; command shows only one instance of RockTutorialControl, but gives two roles to it (rock and foo). What is the meaning of &quot;role&quot; in this context?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've noticed that the tutorial explains how to make multiple instances of the same component when we're declaring our components as &lt;a href=&quot;http://rock-robotics.org/stable/documentation/system_management_tutorials/800_devices.html&quot; rel=&quot;nofollow&quot;&gt;Devices&lt;/a&gt;. But how to do this with components that should not be concerned as devices?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BR,&#xA;Mathias&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was my first question to StackExchange, and I don't know what's the policy for adding additional information to the original question, but here we go:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems that both the deployment and configuration need to be different when there are two instances of the same component. I did a small scale testing with two components:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;using_task_library 'foobar_user'&#xA;using_task_library 'foobar_proxy'&#xA;&#xA;module FooModule&#xA;  class FooControl &amp;lt; Syskit::Composition&#xA;&#xA;  add FoobarUser::Task, :as =&amp;gt; &quot;producer&quot; &#xA;  add FoobarProxy::Task, :as =&amp;gt; &quot;proxy&quot;&#xA;  add FoobarUser::Task, :as =&amp;gt; &quot;consumer&quot; &#xA;&#xA;  producer_child.connect_to proxy_child&#xA;  proxy_child.connect_to consumer_child&#xA;  end&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where &lt;code&gt;FoobarUser::Task&lt;/code&gt; has an input &amp;amp; output port of /std/string. &lt;code&gt;FoobarProxy::Task&lt;/code&gt; has corresponding i&amp;amp;o ports. &lt;code&gt;FoobarUser::Task&lt;/code&gt; has also two configurations called 'default' and 'other'. It also has two deployments 'foo_depl' and 'bar_depl'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to create a &quot;pipeline&quot; where data flows producer ==&gt; proxy ==&gt; consumer, I made define line:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;define 'conf_and_depl', FooModule::FooControl.use('producer' =&amp;gt; FoobarUser::Task.use_conf('other').prefer_deployed_tasks(/foo_depl/), 'consumer' =&amp;gt; FoobarUser::Task.use_conf('default').prefer_deployed_tasks(/bar_depl/))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and then instanciated the network with &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;syskit instanciate scripts/03-nwtest.rb conf_and_depl_def!&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The component instanciation failed if either &lt;code&gt;use_conf&lt;/code&gt; or &lt;code&gt;prefer_deployed_tasks&lt;/code&gt; clause was left out. In both cases the produced error was &quot;cannot deploy the following tasks... ...multiple possible deployments, choose one with #prefer_deployed_tasks&quot;. &lt;/p&gt;&#xA;" OwnerUserId="6865" LastEditorUserId="6865" LastEditDate="2014-08-06T21:10:58.623" LastActivityDate="2014-08-07T12:06:41.443" Title="rock/syskit: How to add multiple instances of same component into a network" Tags="&lt;rock&gt;&lt;syskit&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4371" PostTypeId="1" CreationDate="2014-08-06T14:03:52.203" Score="3" ViewCount="270" Body="&lt;p&gt;I am willing to use a universal robot arm (UR10) in a path following mode. i.e. I have a desired trajectory for the robot's effector and I would like the effector to follow it as close as possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://media1.limitless.dk/UR_Tech_Spec/UR10_GB.pdf&quot; rel=&quot;nofollow&quot;&gt;The specs here&lt;/a&gt; give a repeatability of +-0.1mm. This is not written but &lt;em&gt;I guess&lt;/em&gt; this is the &lt;strong&gt;static precision&lt;/strong&gt; (after the robot had enough time to converge to the position). Now what about the &lt;strong&gt;dynamic precision&lt;/strong&gt; (i.e. max position error while performing the desired trajectory)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know more than me on this matter?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Kind regards,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Antoine.&lt;/p&gt;&#xA;" OwnerUserId="763" LastActivityDate="2014-08-13T12:05:08.457" Title="Dynamic tracking precision of UR5/10" Tags="&lt;dynamics&gt;&lt;errors&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4372" PostTypeId="2" ParentId="4370" CreationDate="2014-08-06T14:14:34.970" Score="0" Body="&lt;p&gt;This is what syskit should do,&#xA;in the end syskit decides about the amount of modules.&#xA;If you simply add the Requirement a second time syskit recognizes that they can be merged together and removes during instanciation the second one. (to be more precise it merges them together).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You have to add different confiugations and/or build up connections that differ from the usage of the first one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this clarifies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Best,&#xA;Matthias&lt;/p&gt;&#xA;" OwnerUserId="4508" LastActivityDate="2014-08-06T14:14:34.970" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4373" PostTypeId="2" ParentId="2373" CreationDate="2014-08-06T14:36:12.813" Score="1" Body="&lt;p&gt;The term you are looking for is &quot;&lt;a href=&quot;http://en.wikipedia.org/wiki/Viewing_frustum&quot; rel=&quot;nofollow noreferrer&quot;&gt;frustrum&lt;/a&gt;&quot;, and the algorithm you want is &quot;&lt;a href=&quot;https://groups.csail.mit.edu/graphics/classes/6.837/F98/Lecture17/lecture17.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;frustrum culling&lt;/a&gt;&quot;.&#xA;&lt;a href=&quot;https://groups.csail.mit.edu/graphics/classes/6.837/F98/Lecture17/lecture17.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://groups.csail.mit.edu/graphics/classes/6.837/F98/Lecture17/hierfrustumculling.gif&quot; alt=&quot;frustrum culling&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Check out &lt;a href=&quot;https://gamedev.stackexchange.com/q/14713&quot;&gt;this answer for how one would implement culling in a 2D game&lt;/a&gt;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If performance is still an issue, remember that you don't need to consider all 400 &quot;possible wall coordinates&quot; every time.  If you try to determine your exact position in a single step, you're trying to outsmart the particle filter; you don't need to do this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Think of it this way: your robot is not randomly teleporting from place to place -- it's in one position now, and it will be in a very similar position at the next time step or sensor reading.  Just evaluate as many coordinates as you can in the available time (for each particle), then do it again; your particles will doing the work.  Obviously, you will converge faster if you can evaluate more coordinates at each step... but there are diminishing returns to adding more accuracy to each particle.  This simulation shows that using only 20-ish measurements will still give you decent results:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/RUyeA.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/RUyeA.gif&quot; alt=&quot;particle filter&quot;&gt;&lt;/a&gt;&lt;br&gt;&#xA;&lt;sub&gt;(source: &lt;a href=&quot;http://www.cs.washington.edu/robotics/mcl/animations/global-floor.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;washington.edu&lt;/a&gt;)&lt;/sub&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd imagine your code looks like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;foreach particle&#xA;    foreach coordinate&#xA;        foreach segment&#xA;            see if a ray through coordinate intersects segment&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You may want to try structuring it like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;while there is still time before the next sensor measurement&#xA;    pick a coordinate that's far away from the coordinates that have been tried already&#xA;    foreach particle&#xA;        foreach segment_in_frustrum&#xA;            see if a ray through coordinate intersects segment_in_frustrum&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="350" LastEditorUserId="15160" LastEditDate="2019-02-26T10:31:38.560" LastActivityDate="2019-02-26T10:31:38.560" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="4374" PostTypeId="2" ParentId="4369" CreationDate="2014-08-06T15:09:23.950" Score="2" Body="&lt;p&gt;From the algorithm's point of view, there is really no difference between the real world and the simulation. The difficult part is to give the correct information to the algorithm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For that, you need to look at what information your algorithm requires:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Your current position&lt;/li&gt;&#xA;&lt;li&gt;Goal's position&lt;/li&gt;&#xA;&lt;li&gt;All obstacles' position&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The question is therefore how to get these information. The answer is that it really really depends. There are numerous ways for each and they all depend on what your robot can do, what facilities it has available, what control you have over the environment, whether the environment is static or not etc.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Your location&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;For example, outdoors you could use GPS to locate yourself, while indoors you may be looking for &lt;a href=&quot;https://en.wikipedia.org/wiki/Simultaneous_localization_and_mapping&quot; rel=&quot;nofollow&quot;&gt;SLAM&lt;/a&gt;. You could possibly get information from a camera installed in the ceiling, or various other methods (search for &lt;code&gt;robot localization&lt;/code&gt;).&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Goal's location&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;You could find the goal with the ceiling camera if you have one, you could try to find it by exploration (i.e. set a random goal, go there and in the meantime scan for the real goal e.g. with a camera.  If goal not found, go to another random goal), or you could try other methods, e.g. by having the goal send a signal whose direction and strength would be picked up by the robot.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Obstacles' positions&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;You could again find the obstacles with a ceiling camera, you could find nearby ones (not all of them) with sonar, laser etc, or in case of a static environment simply have a predefined map.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Once you have these information, you can use your algorithm just as before and get the direction you need to go to. You still need to control the robot accordingly. Since you already know about encoders, I assume you know how to make your robot turn to the correct angle given your current angle (which is something you possibly calculated when looking for your current location).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;I have a couple of suggestions though.  If you already know all the obstacles and the goal's position, then you have better algorithms for navigation.  Your algorithm would get stuck in a situation like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;               ----&#xA;            --/&#xA;          -/&#xA; goal    |           You&#xA;          -\&#xA;            --\&#xA;               -----&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where the algorithm would tell you to go straight to the wall until all potentials cancel out and you reach a stable point where no direction is preferable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the case when you have all the information about the environment, you can enlarge the obstacles (in your model) by half of your robot's size (i.e. maximum distance from your center, or whichever point you consider your position to be, to your outer layer), which means you can assume your robot to be a point and the obstacles larger. Then you can use an algorithm such as &lt;a href=&quot;https://en.wikipedia.org/wiki/A*&quot; rel=&quot;nofollow&quot;&gt;A*&lt;/a&gt; to find the best path to your goal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you &lt;em&gt;don't&lt;/em&gt; have all information of the environment, you can still use A*, but just add information to the map as you find new obstacles and recalculate your path.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively, if you don't have all information of the environment and you like to continue with your Potential Field algorithm, you can avoid having information regarding &lt;em&gt;all&lt;/em&gt; obstacles and run your algorithm with only those that you know of. Again, as your robot explores, you add more information about the obstacles. This really doesn't change the behavior much since potential is inversely related to distance squared, so the farther objects have very little effect on the potential field at your current position.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Update based on your edit:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding your first point, it's ok. That simplifies things, so all you need is to store the map of your environment (goal position, obstacle positions etc) in whatever way you feel comfortable in your robot (i.e. in a way that you can feed it to your algorithm).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding your second point, you seem to already have the formula, so only thing that remains is the third point, which is converting the signals from the encoder into position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For that, let's take a look at this very general algorithm:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;current_position = (0, 0)&#xA;for ever&#xA;    current_position = calculate(current_position, delta_encoder_1, delta_encoder_2)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;which means start from (0, 0) and on every update, get a new position based on how much each encoder has changed (since last update). The &lt;code&gt;calculate&lt;/code&gt; function is effectively the calculations in the link you provided.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To get &lt;code&gt;delta_encoder_1&lt;/code&gt; and &lt;code&gt;delta_encoder_2&lt;/code&gt;, you need to consult the datasheet of your encoders. What you get is a series of pulses that you need to detect. Perhaps the most reliable way would be through interrupts, for example by interrupts on the rising edge of a signal arriving from the encoder:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;current_position = (0, 0)&#xA;for ever&#xA;    current_position = calculate(current_position, delta_encoder_1, delta_encoder_2)&#xA;    delta_encoder_1 = 0&#xA;    delta_encoder_2 = 0&#xA;&#xA;interrupt_on_encoder_1&#xA;    if condition for an encoder step forwards&#xA;        delta_encoder_1 += 1&#xA;    else if condition for an encoder step backwards&#xA;        delta_encoder_1 -= 1&#xA;&#xA;interrupt_on_encoder_2&#xA;    if condition for an encoder step forwards&#xA;        delta_encoder_2 += 1&#xA;    else if condition for an encoder step backwards&#xA;        delta_encoder_2 -= 1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This means that the interrupts take care of updating &lt;code&gt;delta_encoder_*&lt;/code&gt; based on the shape of the pulse, which is something you should get from the datasheet of the encoders. Note the race condition between the interrupts and were the application resets &lt;code&gt;delta_encoder_*&lt;/code&gt; values (If you don't know what is a race condition, since you already accept inaccurate position calculation, then don't worry about it).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, if you still have doubts, I strongly recommend asking a separate question specifically regarding how to get meaningful data out of your specific encoders.&lt;/p&gt;&#xA;" OwnerUserId="158" LastEditorUserId="158" LastEditDate="2014-08-07T09:26:42.130" LastActivityDate="2014-08-07T09:26:42.130" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4375" PostTypeId="2" ParentId="4308" CreationDate="2014-08-06T22:12:51.353" Score="3" Body="&lt;p&gt;The first type of Mecanum wheel has the rollers held at both ends.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/LhIJE.jpg&quot; alt=&quot;Metal Mecanum Wheel&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This type has a greater load capability, but they have a disadvantage. When they are traveling sideways and meet an inclined plane, the metal rim can collide with the plane.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second type of Mecanum wheel has the rollers held in the middle&#xA;&lt;img src=&quot;https://i.stack.imgur.com/51d72.jpg&quot; alt=&quot;Mecanum Wheel&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This has lower load capability, because the wheels are cantilevered. However, it is much better at dealing with obstacles and inclined planes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/YI97x.png&quot; alt=&quot;Mecanum Wheel Colision&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2014-08-06T22:12:51.353" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4377" PostTypeId="2" ParentId="4370" CreationDate="2014-08-07T12:06:41.443" Score="0" Body="&lt;p&gt;There are basically two types of components in a network from the point of view of syskit, functional components and device drivers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Functional components behave as pure functions. It means that two components whose inputs are connected to the same source and that have the same configuration should produce the exact same output. Most components are like this, and that's how syskit works: it is able to find out which components are identical and merge them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Devices are there to provide entry/exit points for the data, i.e. they tell syskit that the component is not functional but pulls, push or both pushes and pulls data from &quot;the outside world&quot;. In a robot, these are provided by hardware which is where the name comes from. Note that for instance a random generator would also need to be declared as a device even though there is no real &quot;device&quot; below.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to force syskit to instanciate the same component twice even though they have the same input connections, you therefore have to either make them device drivers and tie them to different devices, or assign different configurations. Note that they can be dummy configurations, i.e.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;--- name:default&#xA;# Real configuration goes there&#xA;--- name:foo&#xA;# Empty dummy configuration to force double-instance&#xA;--- name:bar&#xA;# Empty dummy configuration to force double-instance&#xA;&#xA;define 'foo', Composition.use(Component.use_conf('foo', 'default'))&#xA;define 'bar', Composition.use(Component.use_conf('bar', 'default'))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;About the deployments&lt;/strong&gt;: what I have described so far is how two components get merged or not. Another issue is that, once two instances of the same component model end up in the final network, they have to be deployed. Since they are from the same component model, syskit cannot choose for you (see P.S. below for more details). There is actually a tutorial on that later on in the tutorial series you are currently doing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S.: actually syskit &lt;strong&gt;could&lt;/strong&gt; choose for you. The issue then is that you would not be able to easily understand what each component does when you look at rock-display. Indeed, the same component instance (let's say task1) could have different rols in the same network, depending on e.g. the order in which syskit would have assigned the tasks. Looking at a running system in rock-display and/or at logs with rock-replay would be hell. An integration of Syskit and Rock live display / log tools would solve that nicely, but we're not there yet.&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2014-08-07T12:06:41.443" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4379" PostTypeId="1" CreationDate="2014-08-08T05:00:06.583" Score="2" ViewCount="933" Body="&lt;p&gt;I am trying to control the servo motor operation by torque control by interfacing the sensor to an avr , which will continuously monitor the torque value from the sensor and control the torque according to the given set point .Is it possible to make such a setup? If yes how?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="6879" LastActivityDate="2015-01-17T01:49:13.167" Title="Torque control and monitoring of servo" Tags="&lt;torque&gt;&lt;servomotor&gt;&lt;avr&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4380" PostTypeId="1" CreationDate="2014-08-08T05:21:59.510" Score="1" ViewCount="115" Body="&lt;p&gt;I need to pop out a needle like object(toothpick,matchstick,etc) from a hole in a&#xA;surface and push it back in automatically.I need to make a array of such needles in which each needle's position can be controlled individually.The objects aren't supposed to be oscillated continuously, instead they are to be locked in one of the two positions-either above the surface or inside it.&#xA;I am trying to search a mechanism to achieve this.This can be easily done with a simple DC servo motor, but the problem is I have to do this in very limited space-about 6 such objects in base area of 3 cm x 3 cm.Moreover the power source would be DC +5 V&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So far I have thought of creating small electromagnets with springs,but still not sure about it.Any inputs will be appreciated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/ibpBC.png&quot; alt=&quot;just a image to depict what I am trying to achieve&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="6880" LastActivityDate="2014-08-08T12:56:58.657" Title="Mechanism to oscillate a needle like object in vertical motion" Tags="&lt;mechanism&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4381" PostTypeId="2" ParentId="4380" CreationDate="2014-08-08T12:56:58.657" Score="2" Body="&lt;p&gt;You might consider a Bistable Solenoid. This is a solenoid where the plunger locks into position at either end of its stroke, so that the current only needs to flow to change the state of the solenoid. Usually the locking mechanism is a simple magnet, so the electric field of the solenoid can overcome it to cause the plunger to move.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/SNMoe.png&quot; alt=&quot;Bistable Solenoid&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The diagram shows a cross section through the design. The solenoid is at the bottom. Run the current one way, and the plunger magnet is pushed to the top, where it sticks to the steel tube. Stop the current, and the plunger stays in position. Reverse the current, and the plunger will be pulled back down.&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2014-08-08T12:56:58.657" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4383" PostTypeId="2" ParentId="3218" CreationDate="2014-08-08T20:37:38.943" Score="1" Body="&lt;p&gt;I've cleaned the bearings of residue using dimethoxymethane aerosol and lubricated them with PTFE-based oil lubricant. It works pretty well now.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More details &lt;a href=&quot;http://lab.whitequark.org/notes/2014-07-08/cnc3020t-poor-positioning-accuracy/&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="5705" LastActivityDate="2014-08-08T20:37:38.943" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4384" PostTypeId="1" CreationDate="2014-08-09T10:20:01.277" Score="0" ViewCount="1177" Body="&lt;p&gt;I am designing a robot in real world and i want to plot everything in X,Y (Cartesian) coordinates &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I just want to use the encoders of wheels to determine the current position of mobile robot and its orientation depending on a specific calculation formula (like this &lt;a href=&quot;http://rossum.sourceforge.net/papers/DiffSteer/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://rossum.sourceforge.net/papers/DiffSteer/&lt;/a&gt; ) even if that will lead to inaccurate calculations .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Actually , I found out this formula below to compute x, y coordinates from encoder data but I still confused in some sides of this formula &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/QbN00.jpg&quot; alt=&quot;enter image description here&quot;&gt;&#xA;&lt;img src=&quot;https://i.stack.imgur.com/Pl42O.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I had a Rover 5 chassis form Dagu with two normal DC motors and two encoders (incremental rotary encoder) per each wheel, how could I translate the pulses of encoders or how to work out the x.y position of the robot based on the shaft encoder data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I deduced some of values from Rover 5 chassis :&lt;/p&gt;&#xA;&#xA;&lt;p&gt;cm = conversion factor that translates encoder pulses into linear wheel displacement&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Dn = nominal wheel diameter (in mm)&#xA;:&#xA;&lt;strong&gt;&lt;em&gt;about 20 Cm&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ce = encoder resolution (in pulses per revolution)&#xA;:&#xA;&lt;strong&gt;&lt;em&gt;Encoder resolution: 1000 state changes per 3 wheel rotations&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;n = gear ratio of the reduction gear between the motor (where the encoder is attached) and the&#xA;drive wheel.&#xA;:&#xA;&lt;strong&gt;&lt;em&gt;Gearbox ratio: 86.8:1&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In Rover 5 chassis there are 4 small wires with female headers. RED is +5V for the encoder , BLACK is 0V (ground) , WHITE is signal A , YELLOW is signal B . The important wires in each encoder are signal A and signal B ,so &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How to get values of NL , NR  in the formula above from signal A &amp;amp; signal B ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is the value of NL is the direct value from  wire signal A or signal B ? the same question for NR . &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks a lot&lt;/p&gt;&#xA;" OwnerUserId="6791" LastEditorUserId="187" LastEditDate="2014-11-09T14:36:07.780" LastActivityDate="2015-01-03T17:32:32.630" Title="translation the shaft encoder data" Tags="&lt;wheeled-robot&gt;&lt;quadrature-encoder&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4385" PostTypeId="1" CreationDate="2014-08-09T16:00:06.077" Score="1" ViewCount="5594" Body="&lt;p&gt;I wonder if this would be a competitive robot compared with one made with a traditional approach using a microcontroller and infrared sensors. I suppose that raspberry can perform an edge detection to tell the dynamic of the line far away, much more that the infrared sensor, but how fast can the raspberry do this process? should be a relative simple process in terms of computational requirements , an edge detection in a high contrast arena. Probably the bigger issue would be get the relative position of the robot respect to the line, may be a combination of the camera with some infrared sensors would work better, and what about the size? the robot will be significantly bigger when is used a camera and a raspberry for the control.&lt;/p&gt;&#xA;" OwnerUserId="6891" LastActivityDate="2017-09-12T23:24:00.437" Title="it's worth to make a line follower using a raspberry pi and a web cam?" Tags="&lt;raspberry-pi&gt;&lt;line-following&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4386" PostTypeId="2" ParentId="4384" CreationDate="2014-08-09T22:35:52.377" Score="2" Body="&lt;p&gt;&lt;strong&gt;Encoders&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These are quadrature encoders.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Quadrature encoders have two sensors that look at a rotating wheel with black and white bins alternating in regular intervals (or magnetic sensors looking at alternating magnets).&#xA;These two sensors are shifted relative to each other, so that when one looks at a center of one bin, the other is precisely at the edge between two bins.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, when the wheel spins, you will get a change on the sensors' outputs for every time one of them crosses the bin boundary. If you have $n$ bins, the value will change $2n$ times per rotation.&#xA;At any time at most one of the A or B values will change, and you can calculate direction of rotation from the pattern.&#xA;Also, if your microcontroller is not fast enough and misses a tick, you can detect this as both A and B changing value at once.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, to get $N_L$ you will have to monitor the A and B signals from the left encoder and keep count of the changes. +1 for change in one direction, -1 for change in the other direction.&#xA;The same goes for $N_R$, only this time you do it with the right side encoder.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;concerning the $c_m$ factor, you have specified that there are 1000 state changes per three wheel rotations. That means that your $c_m$ is wheel perimeter times $\frac{3}{1000}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some more information about quadrature encoders is here: &lt;a href=&quot;http://letsmakerobots.com/node/24031&quot; rel=&quot;nofollow&quot;&gt;http://letsmakerobots.com/node/24031&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Calculating $x$ and $y$&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I believe it is more precise to replace equations (1.7a) and (1.7b) with&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$x_i = x_{i - 1} + \Delta{U_i} \cos (\theta_{i - 1} + \frac{\Delta\theta_i}{2})$$&#xA;$$y_i = y_{i - 1} + \Delta{U_i} \sin (\theta_{i - 1} + \frac{\Delta\theta_i}{2})$$&lt;/p&gt;&#xA;" OwnerUserId="482" LastActivityDate="2014-08-09T22:35:52.377" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4387" PostTypeId="2" ParentId="4385" CreationDate="2014-08-10T01:59:30.373" Score="5" Body="&lt;p&gt;This may be overkill, but &lt;a href=&quot;http://web.mit.edu/Misti/mit-brazil/forum/Triantafyllou.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;some of the past work I was involved in&lt;/a&gt; was trying to detect a vertical line (a pipe) in the camera's field of vision, and navigate relative to it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://web.mit.edu/Misti/mit-brazil/forum/Triantafyllou.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/CZuDHm.png&quot; alt=&quot;Detecting a pipe with computer vision&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The process was as follows:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Pick a threshold value, and split the image into black and white&lt;/li&gt;&#xA;&lt;li&gt;Perform &lt;a href=&quot;http://en.wikipedia.org/wiki/Canny_edge_detector&quot; rel=&quot;nofollow noreferrer&quot;&gt;Canny edge detection&lt;/a&gt; on the image&lt;/li&gt;&#xA;&lt;li&gt;Use a &lt;a href=&quot;http://en.wikipedia.org/wiki/Hough_transform&quot; rel=&quot;nofollow noreferrer&quot;&gt;Hough transform&lt;/a&gt; to find the strongest lines in the image, and consider those to be the boundaries of the vertical strip you're looking for&lt;/li&gt;&#xA;&lt;li&gt;Adjust for the perceived width (indicating distance -- you won't need this) and angle of the vertial strip in the image&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;We &lt;a href=&quot;https://github.com/ifreecarve/SGMOOS/blob/master/Instruments/iVision/HoughPipeFollow.cpp&quot; rel=&quot;nofollow noreferrer&quot;&gt;used OpenCV to do this&lt;/a&gt;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;We didn't get very good results at full camera resolution; The very pixellated lines in the image above were from downsampling the source video frame (by a factor of 3 in both directions, I think... so 1/9 the number of pixels to worry about).  This allowed us to process frames fast enough for it to be useful.  Also, the point of the initial threshold step was to speed up the Canny process -- fewer lines to find.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2016-02-01T16:19:02.400" LastActivityDate="2016-02-01T16:19:02.400" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="4388" PostTypeId="2" ParentId="4369" CreationDate="2014-08-10T17:38:02.067" Score="0" Body="&lt;p&gt;Oussamma Khatib's potential field algorithms suffer from local minima/maxima finding problems vice global minima/maxima.  As such you will get trapped in &quot;box canyons&quot; where the potential field cannot escape.  You need to add extra algorithms on top of potential fields to avoid local minima paths.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did my Master's thesis on artificial neural networks that avoid local minima and find global ones.  But there are lots of others to choose from:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;em&gt;Non-learning artificial neural network approach to motion planning for the Pioneer robot&lt;/em&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;DOI: 10.1109/IROS.2003.1250614&lt;/li&gt;&#xA;&lt;li&gt;Available at &lt;a href=&quot;http://dx.doi.org/10.1109/IROS.2003.1250614&quot; rel=&quot;nofollow&quot;&gt;IEEE (paywal)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Also available at &lt;a href=&quot;http://www.academia.edu/1169595/Motion_Planning_of_an_Autonomous_Mobile_Robot_Using_Artificial_Neural_Network&quot; rel=&quot;nofollow&quot;&gt;academia.edu (non-paywall)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6804" LastEditorUserId="37" LastEditDate="2014-08-18T16:29:37.850" LastActivityDate="2014-08-18T16:29:37.850" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4390" PostTypeId="2" ParentId="2192" CreationDate="2014-08-11T04:54:41.707" Score="1" Body="&lt;p&gt;The range of the sensor is not the only characteristic you need to be concerned about.  Where are you planning to use the sensor? With what kind of reflective surfaces? Indoor? Outdoor? Both?  Against natural surfaces or sharp highly reflective like glass?   What shape of detected surface are you interested in - some return conical areas ahead.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could use a passive infrared PIR sensor and a histogram algorithm for your rough area change detection.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A laser might be better for a linear range finding.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Perhaps some extra information on what you are trying to detect would help the answer.  Sorry for the half-answer but perhaps that inquiry will reveal a better solution.&lt;/p&gt;&#xA;" OwnerUserId="6804" LastActivityDate="2014-08-11T04:54:41.707" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4392" PostTypeId="1" AcceptedAnswerId="6492" CreationDate="2014-08-12T00:11:03.587" Score="3" ViewCount="1210" Body="&lt;p&gt;So far I have done EKF Localization (known and unknown correspondences) and EKF SLAM for only known correspondences that are stated in &lt;a href=&quot;http://www.probabilistic-robotics.org&quot; rel=&quot;nofollow&quot;&gt;Probabilistic Robotics&lt;/a&gt;. Now I moved to EKF SLAM with unknown correspondences. In the algorithm in page 322, &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;16. &amp;nbsp; &amp;nbsp; $\Psi_{k} = H^{k} \bar{\Sigma}[H^{k}]^{T} + Q$&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;17. &amp;nbsp; &amp;nbsp; $\pi_{k} = (z^{i} - \hat{z}^{k})^{T} \Psi^{-1}_{k}(z^{i} - \hat{z}^{k})$&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;18. &amp;nbsp; &amp;nbsp; $endfor$&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;19. &amp;nbsp; &amp;nbsp; $\pi_{N_{t+1}} = \alpha$&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;20. &amp;nbsp; &amp;nbsp; $j(i) = \underset{k}{argmin} \ \ \pi_{k}$&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;21. &amp;nbsp; &amp;nbsp; $N_{t} = max\{N_{t}, j(i)\}$&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I don't understand the line 19. In the book page 323, The authors state &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Line 19 sets the threshold for the creation of a new landmark: A new landmark is created if the Mahalanobis distance to all existing landmarks in the map exceeds the value $\alpha$. The ML correspondence is then selected in line 20. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;what is $\alpha$ in line 19 and how is it computed? Also, what is the Mahalanobis distance? I did research about Mahalanobis distance but still I can't understand its role in EKF SLAM. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Edit: &#xA;I found another book in my university's library &lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/B00BEZNHGY&quot; rel=&quot;nofollow&quot;&gt;Robotic Navigation and Mapping with Radar&lt;/a&gt; The authors state &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The Mahalanobis distance measure in SLAM is define as&#xA;  $d^{2}_{M}(z^{j}_{k}, \hat{z}^{i}_{k})$, which provides a measure on&#xA;  the spatial difference between measurement $z^{j}_{k}$ and predicted&#xA;  feature measurement $\hat{z}^{i}_{k}$, given by  $$ d^{2}_{M}(z^{j}_{k}, \hat{z}^{i}_{k}) = (z^{j}_{k} - \hat{z}^{i}_{k})^{T} S^{-1}_{k}(z^{j}_{k}, \hat{z}^{i}_{k}) $$ This&#xA;  value has to be calculated for all possible $(z^{j}_{k}, \hat{z}^{i}_{k})$ combinations, for which  $$ d_{M}(z^{j}_{k},\hat{z}^{i}_{k}) \leq \alpha $$ Often referred to as a validation gate.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Leave me to the same question what is $\alpha$?&lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="2155" LastEditDate="2014-08-12T21:52:53.407" LastActivityDate="2018-06-15T17:13:34.447" Title="EKF SLAM and Mahalanobis distance?" Tags="&lt;slam&gt;&lt;ekf&gt;&lt;mapping&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4393" PostTypeId="1" CreationDate="2014-08-12T10:09:53.147" Score="1" ViewCount="162" Body="&lt;p&gt;Regarding my project work, I have to write an algorithm for mobile robot planning. For that, I have chosen Genetic algorithm. Is it good for mobile robot path planning? If it is, then where can I start from and get some guidelines?&lt;/p&gt;&#xA;" OwnerUserId="6903" LastEditorUserId="1445" LastEditDate="2014-08-13T13:17:58.637" LastActivityDate="2014-08-13T21:18:36.990" Title="Is a Genetic alogorithm suitable for mobile robot path planning?" Tags="&lt;mobile-robot&gt;&lt;navigation&gt;&lt;algorithm&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4394" PostTypeId="1" AcceptedAnswerId="4397" CreationDate="2014-08-12T19:33:27.200" Score="3" ViewCount="6180" Body="&lt;p&gt;I am trying to make a line follower robot and I need help regarding the type of dc motor to use.&#xA;So we have a single shaft BO Motor and a double shaft BO Motor. Can anyone help me understand what is the difference between the two?&#xA;Here's the link for &#xA;Single Shaft BO Motor:&#xA;&lt;a href=&quot;http://www.evelta.com/industrial-control/motors-and-accessories/100-rpm-l-type-single-shaft-bo-motor&quot; rel=&quot;nofollow&quot;&gt;http://www.evelta.com/industrial-control/motors-and-accessories/100-rpm-l-type-single-shaft-bo-motor&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Double Shaft BO Motor:&#xA;&lt;a href=&quot;http://www.evelta.com/industrial-control/motors-and-accessories/100-rpm-l-type-double-shaft-bo-motor&quot; rel=&quot;nofollow&quot;&gt;http://www.evelta.com/industrial-control/motors-and-accessories/100-rpm-l-type-double-shaft-bo-motor&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="6907" LastEditorUserId="350" LastEditDate="2014-08-13T20:51:55.173" LastActivityDate="2014-08-13T20:51:55.173" Title="Single-shaft vs Double-shaft motors" Tags="&lt;motor&gt;&lt;line-following&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4395" PostTypeId="1" AcceptedAnswerId="4400" CreationDate="2014-08-12T19:37:10.910" Score="2" ViewCount="777" Body="&lt;p&gt;Simply, I had Rover 5 with 2 DC motors and 2 quadrature encoders, I just want to use encoders to measure the distance of travelling for each wheel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To start with, I just want to determine the total counts per revolution. I read the article about quadratic encoder from &lt;a href=&quot;http://letsmakerobots.com/node/24031&quot; rel=&quot;nofollow&quot;&gt;this broken link&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In Rover 5, each encoder has four wires: red (5V or 3.3V), black(Ground), yellow (Signal 1) and white (Signal 2). I connected each wire in its right place on Arduino Uno board, using the circuit:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;rotary encoder ChannelA attached to pin 2 &lt;/li&gt;&#xA;&lt;li&gt;rotary encoder ChannelB attached to pin 3&lt;/li&gt;&#xA;&lt;li&gt;rotary encoder 5V attached to 5V&lt;/li&gt;&#xA;&lt;li&gt;rotary encoder ground attached to ground &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;For one encoder, I test the code below to determine the total counts or ticks per revolution, the first program by using loop and second by using an interrupt.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately while I run each program separately, rotating the wheel 360 degree by hand, the outputs of these two programs was just &quot;gibberish&quot; and I don't know where is the problem . Could anyone help?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Arduino programs posted below.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First program:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;// Constants&#xA;const int  ChanAPin = 2;    // pin for encoder ChannelA&#xA;const int  ChanBPin = 3;    // pin for encoder ChannelB&#xA;&#xA;// Variables&#xA;int encoderCounter = -1;   // counter for the number of state changes&#xA;int ChanAState = 0;         // current state of ChanA&#xA;int ChanBState = 0;        // current state of ChanB&#xA;int lastChanAState = 0;     // previous state of ChanA&#xA;int lastChanBState = 0;    // previous state of ChanB&#xA;&#xA;void setup() {&#xA;  // initialize the encoder pins as inputs:&#xA;  pinMode(ChanAPin, INPUT);&#xA;  pinMode(ChanBPin, INPUT);&#xA;  // Set the pullup resistors&#xA;  digitalWrite(ChanAPin, HIGH);&#xA;  digitalWrite(ChanBPin, HIGH);&#xA;&#xA;  // initialize serial communication:&#xA;  Serial.begin(19200);&#xA;  Serial.println(&quot;Rotary Encoder Counter&quot;);&#xA;}&#xA;&#xA;void loop() {&#xA;  // read the encoder input pins:&#xA;  ChanAState = digitalRead(ChanAPin);&#xA;  ChanBState = digitalRead(ChanBPin); &#xA;  // compare the both channel states to previous states&#xA;  if (ChanAState != lastChanAState || ChanBState != lastChanBState) {&#xA;    // if the state has changed, increment the counter&#xA;      encoderCounter++;&#xA;      Serial.print(&quot;Channel A State = &quot;);&#xA;      Serial.println(ChanAState);&#xA;      Serial.print(&quot;Channel B State = &quot;);&#xA;      Serial.println(ChanBState);      &#xA;      Serial.print(&quot;State Changes = &quot;);&#xA;      Serial.println(encoderCounter, DEC);&#xA;    // save the current state as the last state, &#xA;    //for next time through the loop&#xA;    lastChanAState = ChanAState;&#xA;    lastChanBState = ChanBState;    &#xA;  }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The second program (with interrupt)&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;static long s1_counter=0;&#xA;static long s2_counter=0;&#xA;&#xA;void setup()&#xA;{&#xA;  Serial.begin(115200);&#xA;&#xA;  attachInterrupt(0, write_s1, CHANGE); /* attach interrupt to pin 2*/&#xA;  attachInterrupt(1, write_s2, CHANGE); /* attach interrupt to pin 3*/&#xA;  Serial.println(&quot;Begin test&quot;);&#xA;}&#xA;&#xA;void loop()&#xA;{&#xA;}&#xA;&#xA;void write_s1()&#xA;{&#xA;  s1_counter++;&#xA;  Serial.print(&quot;S1 change:&quot;);&#xA;  Serial.println(s1_counter);&#xA;}&#xA;&#xA;void write_s2()&#xA;{&#xA;  s2_counter++;&#xA;  Serial.print(&quot;S2 change:&quot;);&#xA;  Serial.println(s2_counter);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="6909" LastEditorUserId="37" LastEditDate="2016-05-06T12:02:54.483" LastActivityDate="2016-05-06T12:02:54.483" Title="Counts of Quadrature Encoder" Tags="&lt;mobile-robot&gt;&lt;quadrature-encoder&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4396" PostTypeId="1" CreationDate="2014-08-12T23:11:25.600" Score="2" ViewCount="913" Body="&lt;p&gt;I am migrating from a differential drive design to a skid steering design for my robot, and I want to know how easy would it be to use the NavStack with skid steering. Would there be any problems in terms of localization and things like that?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I let two wheels on the same side of my robot (two on left side and two on the right side) maintain same velocity and acceleration, would the unicycle model of a differential drive robot still apply for skid steering?&lt;/p&gt;&#xA;" OwnerUserId="4269" LastActivityDate="2014-11-26T19:23:21.033" Title="ROS NavStack with Skid Steering robots" Tags="&lt;ros&gt;&lt;navigation&gt;&lt;differential-drive&gt;&lt;driver&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4397" PostTypeId="2" ParentId="4394" CreationDate="2014-08-13T02:36:42.413" Score="1" Body="&lt;p&gt;A &quot;double shaft motor&quot; has &quot;two shafts&quot; that exit the motor case.&#xA;If you turn the motor on so the shaft spins and keep the motor case rigidly bolted in one position, there is one place where you can stand and see one shaft sticking out of the motor and pointed directly at you and turning clockwise.&#xA;Meanwhile, there is another position someone else can stand on the opposite side of the motor; that person sees the shaft sticking out of the motor and turning counterclockwise.&#xA;(Some people prefer to think of those two shafts as two ends of a single shaft -- they have a good point, since both shafts are part of a single rigid cylinder of metal).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/t3kCO.jpg&quot; alt=&quot;a photo of a double shaft motor with gears on both output shafts&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(double shaft motor &lt;a href=&quot;http://www.myrcstation.com/webshaper/store/viewProd.asp?pkProductItem=5797&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.myrcstation.com/webshaper/store/viewProd.asp?pkProductItem=5797&lt;/a&gt; )&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A &quot;single shaft motor&quot; has a shaft that only sticks out in one direction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Often the only difference between some &quot;double shaft motor&quot; and a closely related &quot;single shaft motor&quot; is how far out the &quot;other&quot; shaft sticks out.&#xA;Often there is a hole in the case of a single shaft motor, where the other shaft would have stuck out, if it were a double shaft motor.&#xA;In the single-shaft version of that motor, you can typically you can see, through that hole, the end the shaft turning -- but the shaft doesn't stick out far enough to do anything useful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Often people put some sort of drive wheel on one shaft of a double shaft motor, and put a position-measuring encoder on the other shaft.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most applications only require a single shaft motor.&#xA;Often such single-shaft applications work fine with a double shaft motor (with the unused shaft not connected to anything).&#xA;So when I see that it's the same price either way, I generally choose a double shaft motor -- that way I can use that motor in both single-shaft applications and double-shaft applications.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;.... battery operated (BO) motor ...&lt;/p&gt;&#xA;" OwnerUserId="187" LastActivityDate="2014-08-13T02:36:42.413" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4398" PostTypeId="1" AcceptedAnswerId="4401" CreationDate="2014-08-13T03:00:14.923" Score="2" ViewCount="1211" Body="&lt;p&gt;I'm trying to understand the core differences between the two topics.  Is one simply a newer term?  Connotations of automobile vs automation?  Something with a screen vs without?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've only ever heard the term &lt;code&gt;computer vision&lt;/code&gt; (tagged).&lt;/p&gt;&#xA;" OwnerUserId="718" LastActivityDate="2014-08-13T09:15:13.700" Title="Machine Vision vs Computer Vision?" Tags="&lt;computer-vision&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4399" PostTypeId="1" CreationDate="2014-08-13T03:46:36.717" Score="2" ViewCount="5736" Body="&lt;p&gt;Need to buy a DIY/High School grade laser cutter/engraver  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;How much laser power&lt;/strong&gt; is needed for &lt;strong&gt;wood, acrylic (3 to 6mm thick), cutting and decorative engraving?&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What parameters I need to take care in selecting suitable machines?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/vWbbY.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/l8otO.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="5582" LastEditorUserId="5582" LastEditDate="2014-08-13T12:31:08.420" LastActivityDate="2014-08-13T12:31:08.420" Title="What laser power for cutting and engraving wood and Acrylic robot baseplates?" Tags="&lt;laser&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4400" PostTypeId="2" ParentId="4395" CreationDate="2014-08-13T03:46:57.327" Score="2" Body="&lt;p&gt;You're likely getting something analogous to &quot;&lt;a href=&quot;http://www.opencircuits.com/Debouncing_Microcontroller_Inputs&quot; rel=&quot;nofollow&quot;&gt;contact bounce&lt;/a&gt;&quot;.&#xA;When you slowly rotate the wheel,&#xA;there are regions where channel A is Lo for a while,&#xA;then channel A is Hi for a while.&#xA;While it would be nice if the Arduino only saw one low-to-high transition&#xA;between those regions,&#xA;often a encoder will oscillate a few or a dozen times&#xA;during the brief period when the encoder is balanced on the edge of the transition.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Have you noticed that the original code always increments the counter, never decrements it?&#xA;If you had code that&#xA;handled both forward rotation (clockwise; incrementing the counter) and reverse rotation (counterclockwise; decrementing the counter),&#xA;it would automatically fix the &quot;bounce&quot; problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One popular approach: while B is low, low-to-high transitions on A increment the count,&#xA;while high-to-low transitions decrement the count.&#xA;Then if A bounces a few extra times while B is low --&#xA;instead of a crisp Lo-Hi (+1), it does Lo-Hi-Lo-Hi-Lo-Hi (+1, -1, +1, -1, +1) --&#xA;we still get the correct final count.&#xA;In either case the final result is one count more.&#xA;(While B is high, low-to-high transitions on A decrement the count, etc.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A quick Google search&#xA;&lt;a href=&quot;https://www.google.com/search?q=arduino+quadrature+encoder+library&quot; rel=&quot;nofollow&quot;&gt;https://www.google.com/search?q=arduino+quadrature+encoder+library&lt;/a&gt;&#xA;shows many quadrature encode libraries for the Arduino.&#xA;Many of them are reviewed at&#xA;&lt;a href=&quot;http://playground.arduino.cc/Main/RotaryEncoders&quot; rel=&quot;nofollow&quot;&gt;http://playground.arduino.cc/Main/RotaryEncoders&lt;/a&gt;&#xA;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could you maybe try one of those libraries and tell us how well it worked (or didn't work) ?&lt;/p&gt;&#xA;" OwnerUserId="187" LastActivityDate="2014-08-13T03:46:57.327" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4401" PostTypeId="2" ParentId="4398" CreationDate="2014-08-13T09:15:13.700" Score="4" Body="&lt;p&gt;These are two different things which share a lot in common.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Simply spoken the CV's task is to perform automatic image processing and then display it to humans.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The MV has to do similar things but you do not get an image as result, you get data.&#xA;For example: &quot;There are 6 apples in this image&quot; or &quot;The image shows that the product has a malfunction&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sources:&#xA;&lt;a href=&quot;http://www.visiononline.org/vision-resources-details.cfm/vision-resources/Computer-Vision-vs-Machine-Vision/content_id/4585&quot; rel=&quot;nofollow&quot;&gt;http://www.visiononline.org/vision-resources-details.cfm/vision-resources/Computer-Vision-vs-Machine-Vision/content_id/4585&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="6911" LastActivityDate="2014-08-13T09:15:13.700" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4402" PostTypeId="2" ParentId="4399" CreationDate="2014-08-13T09:18:51.563" Score="1" Body="&lt;p&gt;For such results the laser should have a power of 2-3Watts&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can have a look at different projects like this here at kickstarter:&#xA;&lt;a href=&quot;https://www.kickstarter.com/projects/1537608281/lazerblade-the-affordable-laser-cutter-engraver&quot; rel=&quot;nofollow&quot;&gt;https://www.kickstarter.com/projects/1537608281/lazerblade-the-affordable-laser-cutter-engraver&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="6911" LastActivityDate="2014-08-13T09:18:51.563" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4403" PostTypeId="2" ParentId="4393" CreationDate="2014-08-13T09:30:47.650" Score="0" Body="&lt;p&gt;This question is pretty general.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is an online course available at edx:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://courses.edx.org/courses/TUMx/AUTONAVx/2T2014&quot; rel=&quot;nofollow&quot;&gt;https://courses.edx.org/courses/TUMx/AUTONAVx/2T2014&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where they explain different possible solutions and their implementations.&#xA;This course is pretty good&lt;/p&gt;&#xA;" OwnerUserId="6911" LastActivityDate="2014-08-13T09:30:47.650" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4404" PostTypeId="2" ParentId="4371" CreationDate="2014-08-13T12:05:08.457" Score="1" Body="&lt;p&gt;I've got two Universal Robots guys in the room with me here, so I asked them this question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the robot's performing a Trajectory move (e.g. linear move) then the dynamic precision is the same as the static precision (±0.1mm). The robot would need to be set up correctly, and know the weight of its payload, so it can correctly balance itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the robot's performing a Joint move, where you simply command each joint to move to a certain angle, then precision is obviously irrelevant, since the trajectory is unknown.&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2014-08-13T12:05:08.457" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4405" PostTypeId="1" CreationDate="2014-08-13T15:37:34.517" Score="1" ViewCount="189" Body="&lt;p&gt;While I am reading and collecting information about rotary encoders , I faced some troubles about the meaning of some expressions concerned with encoder ,which make me to be confused and stray,  these expressions or words are :&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-Count per revolution (rotation) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;-Pulse per revolution&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-Tick per revolution&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-Transitions per revolutions &lt;/p&gt;&#xA;&#xA;&lt;p&gt;-Number of transitions&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-Number of state changes&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I thought the transition is same as state changes which means change from high to low or low to high , but what about the others what is the diffenece among them (count , tick ,pulse ,transition .... etc)? and what the relationship between transitions and pulse ? Could anyone clarify that , please&lt;/p&gt;&#xA;" OwnerUserId="6909" LastActivityDate="2014-09-12T21:07:56.203" Title="Expression used with Rotary Encoders" Tags="&lt;mobile-robot&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4406" PostTypeId="2" ParentId="4393" CreationDate="2014-08-13T20:48:59.650" Score="2" Body="&lt;p&gt;The short answer is no -- genetic algorithms are not good for path planning.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The longer answer is that while a genetic algorithm is very likely capable of solving a path planning problem, it's a very inefficient way to do so.  Genetic Algorithms are preferred in problems where there are many input variables and the interaction between those variables is complicated.  (A popular example of a Genetic Algorithm problem is the &lt;a href=&quot;http://en.wikipedia.org/wiki/Evolved_antenna&quot; rel=&quot;nofollow&quot;&gt;antenna shape that was &quot;evolved&quot; to produce the proper radiation pattern&lt;/a&gt;.)  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Rather than trying to maximize the &quot;fitness&quot; of a set of inputs (as Genetic Algorithms do), in path planning you are trying to minimize the &quot;cost&quot; of getting to your end state -- finding a set of movements (the length of which is unknown at the start) to accomplish that goal.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If, on the other hand, you were trying to find an algorithm that could help a robot learn &lt;em&gt;how to move&lt;/em&gt;, then the evolutionary approach is fine.  The example that comes to my mind is the &lt;a href=&quot;http://www.news.cornell.edu/stories/2006/11/cornell-robot-discovers-itself-and-adapts-injury&quot; rel=&quot;nofollow&quot;&gt;robot from Cornell that can teach itself to limp when it stops being able to walk&lt;/a&gt; (&lt;a href=&quot;http://creativemachines.cornell.edu/papers/Biomimetics05_Lipson.pdf&quot; rel=&quot;nofollow&quot;&gt;PDF of some of their work is here&lt;/a&gt;).  &lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-08-13T20:48:59.650" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4407" PostTypeId="2" ParentId="4405" CreationDate="2014-08-13T20:58:58.920" Score="2" Body="&lt;p&gt;A quadrature encoder has two output channels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;b&gt;Pulses per revolution&lt;/b&gt;&lt;br&gt;&#xA;Looking at &lt;em&gt;one&lt;/em&gt; output channel of the encoder, the number of pulses per revolution is the number of rising edges per revolution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;b&gt;Counts per revolution&lt;/b&gt;&lt;br&gt;&#xA;Combining the two encoder outputs, and counting every rising and falling edge gives the number of counts per resolution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CPR = 4 x PPR&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/70jj8.jpg&quot; alt=&quot;Quadrature Encoder Signal&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for Transitions and State Changes per revolution, I would guess that these are equivalent to Counts.&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2014-08-13T20:58:58.920" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4408" PostTypeId="2" ParentId="4393" CreationDate="2014-08-13T21:18:36.990" Score="0" Body="&lt;p&gt;My feeling is that a genetic algorithm wouldn't be a good way to do path planning. GAs are better at searching crazy multi-dimensional discontinuous spaces. On the other hand, path planning for a mobile robot just isn't that hard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You didn't say what kind of robot this was going to be, but for 2D mobile robots, there are already several excellent path planning algorithms around, like &lt;a href=&quot;http://en.wikipedia.org/wiki/A*_search_algorithm&quot; rel=&quot;nofollow&quot;&gt;A*&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My preferred robot path planning method starts with something like A* to generate a first path through the map. Then I would convert that into a piecewise linear path, and use an iterative algorithm on the path to straighten it out, and adjust the velocity, acceleration and jerk along the path to optimise it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Having said that, people clearly are using &lt;a href=&quot;https://duckduckgo.com/?q=genetic%20algorithm%20robot%20path%20planning&quot; rel=&quot;nofollow&quot;&gt;GAs for path planning&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2014-08-13T21:18:36.990" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4409" PostTypeId="1" CreationDate="2014-08-14T09:43:14.157" Score="8" ViewCount="1507" Body="&lt;p&gt;I recently spent some work on my quadcopter firmware.&#xA;The model is stabilizing its attitude relatively well now.&#xA;However I noticed, that it is changing its altitude sometimes (maybe pressure changes, wind or turbulence).&#xA;Now I want to get rid of these altitude drops and found not much literature.&#xA;My approach is using the accelerometer:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Calculates the current g-force of the z-axis&lt;/li&gt;&#xA;&lt;li&gt;if the g-force is &gt; 0.25 g and longer than 25 ms, then I feed the accelerometer term (cm per s²) into the pid&lt;/li&gt;&#xA;&lt;li&gt;the output is sent to the motors&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The model now reacts when it is falling down with an up-regulation of the motors.&#xA;However, I am not sure, whether it is smart to feed the current acceleration into the regulator and I currently wonder, whether there is a smarter method to deal with sudden and smaller changes in altitude.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Current code: &lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;# define HLD_ALTITUDE_ZGBIAS 0.25f&#xA;# define HLD_ALTITUDE_ZTBIAS 25&#xA;&#xA;const float fScaleF_g2cmss = 100.f * INERT_G_CONST;&#xA;int_fast16_t iAccZOutput = 0; // Accelerometer&#xA;&#xA;// Calc current g-force&#xA;bool bOK_G;&#xA;float fAccel_g = Device::get_accel_z_g(m_pHalBoard, bOK_G); // Get the acceleration in g&#xA;&#xA;// Small &amp;amp; fast stabilization using the accelerometer&#xA;static short iLAccSign = 0; &#xA;if(fabs(fAccel_g) &amp;gt;= HLD_ALTITUDE_ZGBIAS) {&#xA;  if(iLAccSign == 0) {&#xA;    iLAccSign = sign_f(fAccel_g);&#xA;  }&#xA;&#xA;  // The g-force must act for a minimum time interval before the PID can be used&#xA;  uint_fast32_t iAccZTime = m_pHalBoard-&amp;gt;m_pHAL-&amp;gt;scheduler-&amp;gt;millis() - m_iAccZTimer;&#xA;  if(iAccZTime &amp;lt; HLD_ALTITUDE_ZTBIAS) {&#xA;     return; &#xA;  }&#xA;&#xA;  // Check whether the direction of acceleration changed suddenly&#xA;  // If so: reset the timer&#xA;  short iCAccSign = sign_f(fAccel_g);&#xA;  if(iCAccSign != iLAccSign) {&#xA;    // Reset the switch if acceleration becomes normal again&#xA;    m_iAccZTimer = m_pHalBoard-&amp;gt;m_pHAL-&amp;gt;scheduler-&amp;gt;millis();&#xA;    // Reset the PID integrator&#xA;    m_pHalBoard-&amp;gt;get_pid(PID_ACC_RATE).reset_I();&#xA;    // Save last sign&#xA;    iLAccSign = iCAccSign;&#xA;    return;&#xA;  }&#xA;&#xA;  // Feed the current acceleration into the PID regulator&#xA;  float fAccZ_cmss = sign_f(fAccel_g) * (fabs(fAccel_g) - HLD_ALTITUDE_ZGBIAS) * fScaleF_g2cmss;&#xA;  iAccZOutput = static_cast&amp;lt;int_fast16_t&amp;gt;(constrain_float(m_pHalBoard-&amp;gt;get_pid(PID_ACC_RATE).get_pid(-fAccZ_cmss, 1), -250, 250) );&#xA;} else {&#xA;  // Reset the switch if acceleration becomes normal again&#xA;  m_iAccZTimer = m_pHalBoard-&amp;gt;m_pHAL-&amp;gt;scheduler-&amp;gt;millis();&#xA;  // Reset the PID integrator&#xA;  m_pHalBoard-&amp;gt;get_pid(PID_ACC_RATE).reset_I();&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="4080" LastEditorUserId="4080" LastEditDate="2014-08-19T12:33:26.247" LastActivityDate="2016-03-12T04:58:17.697" Title="Quadcopter: Stabilization along the z-axis (for holding altitude)" Tags="&lt;quadcopter&gt;&lt;multi-rotor&gt;" AnswerCount="2" CommentCount="8" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4410" PostTypeId="1" CreationDate="2014-08-14T13:34:55.597" Score="1" ViewCount="273" Body="&lt;p&gt;I have started in the programming stage of my project , and my first step is to made and test the odometry of my Rover 5 robot on Arduino Uno by using encoders to determine position and orientation .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wrote this code and I don’t know if that code right or there are some mistakes,  because I am novice to Arduino and Robotic field so I need for some suggestions and corrections if  there were . &lt;/p&gt;&#xA;&#xA;&lt;p&gt;thanks a lot&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Arduino codes posted below.&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#define encoder1A  0       //signal A of left encoder  (white wire)&#xA;#define encoder1B  1      //signal B of left encoder  (yellow wire)&#xA;#define encoder2A  2      //signal A of right encoder  (white wire)&#xA;#define encoder2B  3      //signal B of right encoder  (yellow wire)&#xA;&#xA;volatile int encoderLeftPosition = 0;      // counts of left encoder&#xA;volatile int encoderRightPosition = 0;     // counts of right encoder&#xA;&#xA;float  DIAMETER  = 61  ;         // wheel diameter (in mm)&#xA;float distanceLeftWheel, distanceRightWheel, Dc, Orientation_change;&#xA;float ENCODER_RESOLUTION = 333.3;      //encoder resolution (in pulses per revolution)  where in Rover 5,  1000 state changes per 3 wheel rotations&#xA;&#xA;int x = 0;           // x initial coordinate of mobile robot&#xA;int y = 0;           // y initial coordinate of mobile robot&#xA;float Orientation  = 0;       // The initial orientation of mobile robot&#xA;float WHEELBASE=183  ;       //  the wheelbase of the mobile robot in mm&#xA;float CIRCUMSTANCE =PI * DIAMETER  ;&#xA;&#xA;void setup()&#xA;{&#xA;  pinMode(encoder1A, INPUT);&#xA;  digitalWrite(encoder1A, HIGH);       // turn on pullup resistor&#xA;  pinMode(encoder1B, INPUT);&#xA;  digitalWrite(encoder1B, HIGH);       // turn on pullup resistor&#xA;  pinMode(encoder2A, INPUT);&#xA;  digitalWrite(encoder2A, HIGH);       // turn on pullup resistor&#xA;  pinMode(encoder2B, INPUT);&#xA;  digitalWrite(encoder2B, HIGH);       // turn on pullup resistor&#xA;  attachInterrupt(0, doEncoder, CHANGE);       // encoder pin on interrupt 0 - pin 3&#xA;  Serial.begin (9600);&#xA;}&#xA;&#xA;void loop()&#xA;{&#xA;  distanceLeftWheel = CIRCUMSTANCE * (encoderLeftPosition / ENCODER_RESOLUTION);       //  travel distance for the left and right wheel respectively&#xA;  distanceRightWheel = CIRCUMSTANCE * (encoderRightPosition / ENCODER_RESOLUTION);     // which equal to pi * diameter of wheel * (encoder counts / encoder resolution )&#xA;  Dc=(distanceLeftWheel + distanceRightWheel) /2 ;            // incremental linear displacement of the robot's centerpoint C&#xA;  Orientation_change =(distanceRightWheel - distanceLeftWheel)/WHEELBASE;    // the robot's incremental change of orientation , where b is the wheelbase of the mobile robot ,&#xA;  Orientation = Orientation + Orientation_change ;          //  The robot's new relative orientation&#xA;  x = x + Dc * cos(Orientation);                            // the relative position of the centerpoint for mobile robot&#xA;  y = y + Dc * sin(Orientation);&#xA;}&#xA;&#xA;void doEncoder(){&#xA;  //  ---------- For Encoder 1 (Left)  -----------&#xA;  if (digitalRead(encoder1A) == HIGH) {   // found a low-to-high on channel A&#xA;    if (digitalRead(encoder1B) == LOW) {  // check channel B to see which way&#xA;                                             // encoder is turning&#xA;      encoderLeftPosition = encoderLeftPosition - 1;         // CCW&#xA;    }&#xA;    else {&#xA;      encoderLeftPosition = encoderLeftPosition + 1;         // CW&#xA;    }&#xA;  }&#xA;  else                                        // found a high-to-low on channel A&#xA;  {&#xA;    if (digitalRead(encoder1B) == LOW) {   // check channel B to see which way&#xA;                                              // encoder is turning&#xA;     encoderLeftPosition = encoderLeftPosition + 1;          // CW&#xA;    }&#xA;    else {&#xA;      encoderLeftPosition = encoderLeftPosition - 1;          // CCW&#xA;    }&#xA;  }&#xA;  //  ------------ For Encoder 2 (Right)-------------&#xA;  if (digitalRead(encoder2A) == HIGH) {   // found a low-to-high on channel A&#xA;    if (digitalRead(encoder2B) == LOW) {  // check channel B to see which way  encoder is turning&#xA;      encoderRightPosition = encoderRightPosition - 1;         // CCW&#xA;    }&#xA;    else {&#xA;      encoderRightPosition = encoderRightPosition + 1;         // CW&#xA;    }&#xA;  }&#xA;  else                                        // found a high-to-low on channel A&#xA;  {&#xA;    if (digitalRead(encoder2B) == LOW) {   // check channel B to see which way  encoder is turning&#xA;     encoderRightPosition = encoderRightPosition + 1;          // CW&#xA;    }&#xA;    else {&#xA;     encoderRightPosition = encoderRightPosition - 1;          // CCW&#xA;    }&#xA;  }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="6909" LastEditorUserId="158" LastEditDate="2015-03-06T16:24:25.980" LastActivityDate="2015-06-07T10:31:31.653" Title="Programming the Odometry of Rover 5" Tags="&lt;mobile-robot&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2015-06-15T11:29:30.263" ContentLicense="CC BY-SA 3.0" />
  <row Id="4411" PostTypeId="2" ParentId="4364" CreationDate="2014-08-14T14:09:51.260" Score="9" Body="&lt;p&gt;You are right he made a mistake there. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is probably one of many typos in this preprint of &lt;strong&gt;Mark Spong&lt;/strong&gt;. You should rather turn to other good books, such as the mathematically more elegant book of Richard Murray,Zexiang Li and Sankar Sastry, &lt;strong&gt;A Mathematical Introduction to Robotics Manipulation&lt;/strong&gt; (MLS94). The mathematics they use is consistent in other of their books such as Yi Ma, etal &lt;strong&gt;An Invitation to 3D-Vision&lt;/strong&gt;. &lt;strong&gt;screw theory&lt;/strong&gt; and &lt;strong&gt;Lie group theory&lt;/strong&gt; instead of Denavit and Hartenberg's minimal approach are used in the book. It is much more superior than the D-H approach, and is widely adopted in the academia (the industry is another story). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, a bonus is that the book MLS94 is completely free to download (under an agreement with the publisher CRC press). It also did a terrific job in systematic treatment from kinematics to dynamics to control.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Edit: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I shamelessly refer to one of our not-so-recent &lt;a href=&quot;https://ieeexplore.ieee.org/abstract/document/7551163/&quot; rel=&quot;nofollow noreferrer&quot;&gt;publication&lt;/a&gt; on robot kinematics calibration, in which you may find additional information on how one may switch between screw representation and DH parametrization of joint axes. The point is, one can easily deal with parametrization singularity of DH parameters if he/she looks at the problem from a geometric (differential geometry of Lie groups) aspect.&lt;/p&gt;&#xA;" OwnerUserId="6918" LastEditorUserId="6918" LastEditDate="2018-04-24T11:48:01.517" LastActivityDate="2018-04-24T11:48:01.517" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4412" PostTypeId="2" ParentId="4366" CreationDate="2014-08-15T02:13:51.823" Score="2" Body="&lt;p&gt;There shouldn't be any reason a standard pid couldn't function in the example you gave. As long the position is being sampled at a reasonably high rate. If the pid in your system was only updated at .5 hz then the pid might have a problem keeping the wheel from over accelerating. However, if that's the fastest your system can sample the pid algorithm then I suggest stop using an under-clocked 4040 (or a MC14500 for that matter). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/Y8kxR.png&quot; alt=&quot;Example&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now let's say you had this system, and you wanted to balance it upright. A bare pid wouldn't work so well here because it would overshoot near the top and not apply enough torque when perpendicular to the ground. The solution would be to realize that the torque required to hold it in place would be cos(&lt;em&gt;angle to ground&lt;/em&gt;) * &lt;em&gt;mass at end&lt;/em&gt;. If you had your theoretical system always apply that much torque, then applying a pid on top of that could work quite well (if T = cos(&lt;em&gt;θ&lt;/em&gt;) * M + x where T is the applied torque then altering x will produce the same acceleration no matter what *θ is).&lt;/p&gt;&#xA;" OwnerUserId="1667" LastActivityDate="2014-08-15T02:13:51.823" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4413" PostTypeId="1" AcceptedAnswerId="4416" CreationDate="2014-08-15T18:30:02.483" Score="1" ViewCount="85" Body="&lt;p&gt;I want to power my Arduino Uno and I know I can do that either by connecting it with USB to PC or with DC power supply.But I want to connect it with a battery source(kindly see the image below) and I know its a silly question but how do I do it? The battery connector is not the regular DC jack but the one that's found in RC toys. So how do I power my Arduino with that battery? &#xA;And also how do I connect it with a DC power supply adapter to charge it once its discharged? Please also mention the specifications of the DC power supply adapter that is to be used while charging this battery.&#xA;&lt;img src=&quot;https://i.stack.imgur.com/IFA2O.jpg&quot; alt=&quot;Battery Image&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="6907" LastActivityDate="2014-08-16T19:12:16.133" Title="Arduino Power Supply" Tags="&lt;arduino&gt;&lt;battery&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4414" PostTypeId="1" CreationDate="2014-08-15T19:37:22.813" Score="-2" ViewCount="96" Body="&lt;p&gt;I'm new to robotics. I would like to know if 56 output lines can be taken from an arduino or raspberry pi?&lt;/p&gt;&#xA;" OwnerUserId="6925" LastActivityDate="2014-08-18T05:51:56.200" Title="Motor control using arduino/raspberry pi" Tags="&lt;arduino&gt;&lt;raspberry-pi&gt;" AnswerCount="1" CommentCount="3" ClosedDate="2014-08-26T16:04:55.973" ContentLicense="CC BY-SA 3.0" />
  <row Id="4415" PostTypeId="1" AcceptedAnswerId="4460" CreationDate="2014-08-16T04:15:14.337" Score="12" ViewCount="2504" Body="&lt;p&gt;Does anyone know of a robotics developer environment ideal for testing AI programs for drones (e.g. quadrocopters, planes, helicopters, etc.)? I would like something like Microsoft Robotics Developer Studio that includes a virtual environment (such as an outdoor environment with gravity, wind, etc.) to test out flight dynamics. I would like the options to add sensors to the virtual drone, such as gps, altimeter, gyros, etc. that the AI program can then use to steer the drone.&lt;/p&gt;&#xA;" OwnerUserId="6927" LastActivityDate="2017-12-25T17:42:25.033" Title="Virtual Testing Environment for Drones" Tags="&lt;quadcopter&gt;&lt;artificial-intelligence&gt;&lt;machine-learning&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="4416" PostTypeId="2" ParentId="4413" CreationDate="2014-08-16T07:45:18.670" Score="4" Body="&lt;p&gt;There are two main ways to power an Arduino: with 5 volts and with 6.5 to 12. Since your case falls under the 6.5 to 12 option there are two main ways you can get power into an arduino. The barrel jack can be plugged into a 6.5/12v source which works well. I have a habit of chopping the connectors off wall warts then I use the power supplies for other things (or sentence them to a life collect dust). If you take this route make sure the center pin is being fed positive voltage and the outside is ground. &#xA;The easier option here is probably to feed your 6.5/12v into the pin labeled vin. It is right next to one of the grounds, and is electrically connected to the barrel jack. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your battery's JST connector is the right size you might be able to use .1 inch headers to plug it into your arduino (unlikely but possible). Otherwise I suggest you buy a JST breakout board. You said that you want to be able to take out and charge your battery which rules out soldering stuff to it. Unless you want to put a barrel jack on your battery, I suggest investing in a JST breakout. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The battery it's self looks like a LiPo (lithium-ion polymer) or Li-ion (lithium-ion), which means that you need to buy a charger for it. Lithium batteries have a bad habit of exploding when mistreated, so DIY chargers are for the suicidal. Just from the picture it looks like a Li-ion , but that's just a guess. You should really figure out what type of battery it is before going further with it. When you do figure out what type it is, buy a charger for it. &lt;/p&gt;&#xA;" OwnerUserId="1667" LastEditorUserId="1445" LastEditDate="2014-08-16T19:12:16.133" LastActivityDate="2014-08-16T19:12:16.133" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4419" PostTypeId="2" ParentId="4414" CreationDate="2014-08-18T05:51:56.200" Score="2" Body="&lt;p&gt;From the Arduinos only the &quot;DUE&quot; will work.&#xA;It has 54 Digital IOs and 2 Analog Outputs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The newest raspberry has &quot;only&quot; 40 IOs, so it won't fit your specs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another possibility would be the &quot;BeagleBone Black&quot; with up to 69 IOs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.raspberrypi.org/product/model-b-plus/&quot; rel=&quot;nofollow&quot;&gt;http://www.raspberrypi.org/product/model-b-plus/&lt;/a&gt; &lt;br&gt;&#xA;&lt;a href=&quot;http://elinux.org/Beagleboard:BeagleBoneBlack&quot; rel=&quot;nofollow&quot;&gt;http://elinux.org/Beagleboard:BeagleBoneBlack&lt;/a&gt; &lt;br&gt;&#xA;&lt;a href=&quot;http://arduino.cc/en/pmwiki.php?n=Main/ArduinoBoardDue&quot; rel=&quot;nofollow&quot;&gt;http://arduino.cc/en/pmwiki.php?n=Main/ArduinoBoardDue&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="6911" LastActivityDate="2014-08-18T05:51:56.200" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4420" PostTypeId="1" AcceptedAnswerId="4421" CreationDate="2014-08-19T21:08:30.477" Score="3" ViewCount="93" Body="&lt;p&gt;Sebastian Thrun says in his paper on Particle Filters that - no model however detailed fails to represent the complexity of even the simplest of robotic environment. What does he means by this? Can someone please elaborate?&lt;/p&gt;&#xA;" OwnerUserId="6943" LastEditorUserId="127" LastEditDate="2014-08-21T11:41:17.207" LastActivityDate="2014-08-21T11:41:17.207" Title="Why models are not perfect to represent robotic environments?" Tags="&lt;localization&gt;&lt;theory&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4421" PostTypeId="2" ParentId="4420" CreationDate="2014-08-20T07:01:47.903" Score="4" Body="&lt;p&gt;A model of the environment in this context is an abstraction of the real world, which should be adequate for the task of the robot. For example, if you have a robot that needs to navigate an office building, you can make the abstraction that your model only needs to be in two dimensions. Further, for the task of navigation you could discretize your space in a regular grid, and just model if cells of your grid are occupied by dense matter (e.g. walls, chairs, people) or by light matter (air) above the ground. This environment representation (model) is usually called a map. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What Thrun refers to is likely that your model only records particular aspects of your environment. Its an abstraction. This is good, to make it manageable from a computational and representational aspect. However, and this is in my opinion the key of the statement, its limited in the real world. For the office building example given above, you can easily come up with examples where the models breaks. How do you represent for example a table. A robot of a certain height may actually go underneath. How do you represent the temporal aspects. A chair might be at another position at another time. All possible to manage, but you will always find exceptions to your chosen abstraction in the real world. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Interesting in this context is for example the work from Brooks. He postulated to use the world itself as a model instead of a using abstractions that ultimately fail to represent the world adequately.&lt;/p&gt;&#xA;" OwnerUserId="127" LastActivityDate="2014-08-20T07:01:47.903" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4422" PostTypeId="2" ParentId="2758" CreationDate="2014-08-20T18:46:20.090" Score="5" Body="&lt;p&gt;Aside from getting the final result as a composition of matrix multiplication, which helps a lot indeed, one crucial aspect of DH convention is the possibility of describing a rototranslation in terms of &lt;strong&gt;4&lt;/strong&gt; variables only for each link (namely, the link length, twist, offset, and the joint angle), in place of the canonical &lt;strong&gt;6&lt;/strong&gt; (i.e. 3 for translation and 3 for rotation).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To sum up, given that in DH we can conveniently assign the location of the subsequent reference frames complying with the specified standard, we are thus able to compact the representation: e.g. for a anthropomorphic manipulator equipped with 7 degrees-of-freedom, we can deal  just with 7*4=28 independent variables/parameters instead of 7*6=42.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastActivityDate="2014-08-20T18:46:20.090" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4423" PostTypeId="2" ParentId="4420" CreationDate="2014-08-20T21:31:40.603" Score="1" Body="&lt;p&gt;Something I've heard said many times (by a WHOI scientist, I think) is that&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The problem with models is that they work.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In other words, the only things that can go wrong in a model are &lt;em&gt;the things you put into the model ahead of time&lt;/em&gt;.  Your model may give you perfect results, but in the real world any number of strange things can go wrong; the world is a very complicated place.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Watch this &lt;a href=&quot;https://www.youtube.com/watch?v=yNu33w8Fmm4&quot; rel=&quot;nofollow&quot;&gt;entertaining presentation by Katy Levinson&lt;/a&gt; for a few examples.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-08-20T21:31:40.603" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4424" PostTypeId="1" CreationDate="2014-08-21T06:28:49.697" Score="4" ViewCount="392" Body="&lt;p&gt;I'm looking for a research paper or series of papers that compare the performance of various simultaneous localization and mapping algorithms for rovers in a variety of real world environments.  In particular, i'm looking for computational speed, accuracy (compared to the real world environment) and memory &amp;amp; power efficiency metrics.  Is there a journal that regularly publishes experimental performance comparisons?&lt;/p&gt;&#xA;" OwnerUserId="2295" LastEditorUserId="2295" LastEditDate="2014-09-10T16:12:43.090" LastActivityDate="2014-09-17T13:21:19.437" Title="Comprehensive comparison of SLAM algorithms" Tags="&lt;slam&gt;&lt;reference-request&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4425" PostTypeId="2" ParentId="4424" CreationDate="2014-08-21T06:47:12.327" Score="3" Body="&lt;p&gt;The &lt;a href=&quot;http://www.journalfieldrobotics.org/Home.html&quot; rel=&quot;nofollow&quot;&gt;Journal of Field Robotics&lt;/a&gt; is likely the closest to what you are asking for. Its one of the highest ranked journals in robotics, and requires the articles to have a significant part of field experiments. I don't recall a comprehensive SLAM survey article, though. &lt;/p&gt;&#xA;" OwnerUserId="127" LastActivityDate="2014-08-21T06:47:12.327" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4426" PostTypeId="1" CreationDate="2014-08-21T14:42:20.340" Score="0" ViewCount="1659" Body="&lt;p&gt;I'm working on a quadcopter. I'm reading the accelerometer and gyro data out from the MPU6050 and using complementary filter to calculate the roll and pitch values. When the quad is on the floor, and the motors are turned on the roll values are: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;-4.88675227698&#xA;-5.07656137566&#xA; 7.57363774442&#xA;-3.53006785613&#xA; 4.44833961261&#xA;-2.64380479638&#xA;-3.70460025582&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It is very messy. After minus five there is plus seven. I would like to filter out this too high/low values programmatically but I have no idea how to do it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT:&#xA;At this moment I think the solution is the Low-pass filter. I'll let you know if it is successful or not.&lt;/p&gt;&#xA;" OwnerUserId="6951" LastEditorUserId="350" LastEditDate="2014-08-27T19:13:46.360" LastActivityDate="2014-08-27T19:15:15.467" Title="How to filter vibration programatically?" Tags="&lt;quadcopter&gt;&lt;accelerometer&gt;&lt;gyroscope&gt;" AnswerCount="2" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="4427" PostTypeId="1" CreationDate="2014-08-21T19:37:33.237" Score="0" ViewCount="131" Body="&lt;p&gt;What free of charge Robot Magazine, Journal, Newsletter or similar publication are available?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Either geared toward technical professionals or the general public.&lt;/p&gt;&#xA;" OwnerUserId="5582" LastEditorUserId="15160" LastEditDate="2019-01-15T00:50:50.013" LastActivityDate="2019-01-15T00:50:50.013" Title="Free of charge Robot Magazine, Journal, Newsletter or similar" Tags="&lt;publications&gt;" AnswerCount="1" CommentCount="5" ClosedDate="2014-08-26T16:04:17.993" ContentLicense="CC BY-SA 3.0" />
  <row Id="4430" PostTypeId="1" CreationDate="2014-08-24T06:07:43.070" Score="1" ViewCount="43" Body="&lt;p&gt;The aim is to guide a bot from Source &lt;code&gt;S&lt;/code&gt; to Goal &lt;code&gt;G&lt;/code&gt; while passing through all the checkpoints &lt;code&gt;@&lt;/code&gt; (in any order).  &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;########&#xA;#@....G#&#xA;##.##@##&#xA;#..@..S#&#xA;#@.....#&#xA;########&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;One way to solve it would be to select one checkpoint as goal from current state and then guide the bot to it. Then select the next checkpoint as goal and current checkpoint as source and guide the bot to its new goal. Eventually guide it to the state &lt;code&gt;G&lt;/code&gt; from the last checkpoint.&lt;br/&gt;&lt;br/&gt;But this technique relies heavily on the order of checkpoints traversed.&lt;br/&gt;&lt;br/&gt; I would like to know if a good heuristic can be found to decide which checkpoint to go to next?&lt;/p&gt;&#xA;" OwnerUserId="6971" LastActivityDate="2014-08-24T11:41:47.497" Title="What would be a good heuristic to solving this?" Tags="&lt;artificial-intelligence&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4431" PostTypeId="2" ParentId="4426" CreationDate="2014-08-24T08:06:43.300" Score="1" Body="&lt;p&gt;I faced similar problem , &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My solution was:- &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;1- Record raw data for mpu6050 (6 DOF) , the chip should stay stable&#xA;with no move&lt;/li&gt;&#xA;&lt;li&gt;2- Apply kalman filter ( one dimensional on each data type , we are&#xA;not trying to fuse data here .. ok :) )&lt;/li&gt;&#xA;&lt;li&gt;3-Now you have a noiseless raw data that represents that the status&#xA;with no move or (vibration)&lt;/li&gt;&#xA;&lt;li&gt;4-Calculate the standard deviation for each type of data i.e&#xA;(standard deviation for X axis, Y axis ... ) , you can also calcualte&#xA;the standard deviation for multiple trials and finding the mean or&#xA;average for them&lt;/li&gt;&#xA;&lt;li&gt;5-Say we got 25 as standard deviation for X accelerator axis , you&#xA;will put a condition  &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;&lt;pre&gt;&lt;code&gt;if(current_reading - previous_reading &amp;gt;&#xA;   standard_devaition)  { accept this data as it doesn't represent&#xA;   vibration  }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="6973" LastActivityDate="2014-08-24T08:06:43.300" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4432" PostTypeId="2" ParentId="4430" CreationDate="2014-08-24T11:41:47.497" Score="2" Body="&lt;p&gt;This type of problem is called the travelling salesman problem, which is a heavily studied problem. The &lt;a href=&quot;http://en.wikipedia.org/wiki/Travelling_salesman_problem&quot; rel=&quot;nofollow&quot;&gt;wikipedia entry&lt;/a&gt; lists a few heuristics in the middle.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2014-08-24T11:41:47.497" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4433" PostTypeId="2" ParentId="4366" CreationDate="2014-08-24T14:23:44.143" Score="2" Body="&lt;p&gt;Usually, what happens in practice is that you barely have access to the commanded torque. Instead, you can control electrical quantities, such as voltage and/or current, that in a electrical motor can be readily related to the torque applied to the shaft. This is to say that further dynamics appear in the response and thus the PID should be aware of them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, a DC electrical motor is well described by the following transfer function:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;F(s)=\frac{\theta(s)}{V(s)}=\frac{K}{s\cdot(1+\tau s)},&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $V$ is in the input voltage and $\theta$ is the measured angular position of the motor shaft. To a certain extent, by neglecting the elasticity of the gearbox, one can also apply the same plant model to a system where $\theta$ refers to the joint encoder measurements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can see, there is still a pole in the origin, but this is not a real problem for the identification. So, before tuning the PID, it is always a good rule to understand what kind of system we are dealing with to then ground whatever approach we have in mind on the basis of the knowledge we have of such a system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To come back to the point, the unknown parameters $K$ and $\tau$ account for the DC gain and the dynamical properties of the system, respectively. To find good values for $K$ and $\tau$ you can consider relying on a &lt;em&gt;least-squares&lt;/em&gt; identification method (in its batch or recursive implementations) or even on the &lt;a href=&quot;http://control.ee.ethz.ch/~apnoco/Lectures/EKF.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;Extended-Kalman-Filter&lt;/em&gt; estimator&lt;/a&gt; (EKF).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The EKF technique can be profitably applied to the state-space system whose transfer function is $F(s)$, augmented of two further states representing the evolution of $K$ and $\tau$ which is in turn implicitly assumed to be constant (i.e. with null derivatives).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given the template $F(s)$ of your system, you can then inject proper input signals (e.g. step-wise, chirp, pulse trains), measure the output angular position, go through the identification methods and determine good representative values of the free parameters. Once done with that, put the model to test by assessing its performance when stimulated by signals you did not employ in identification (e.g. by varying both the input amplitude and input waveform).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Particular care should be taken for estimating the working area where the system behaves linearly and where your model is supposed to generate good response profiles (e.g. check if the actuator intrinsic nonlinearities have an impact or not). If you experience significant deviations between the measurements and the predictions, then you have to refine the model (e.g. increase model order, introduce dead-time ...).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What's the reason why we struggle to find a good representation of the plant? Because, of course, the model provides us with an easy way to tackle the PID tuning problem. You can resort to simulation, to well-established rules available in literature or even to simple considerations as below.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;em&gt;P&lt;/em&gt; design may turn out from the requirement of tracking a reference signal whose frequency content is limited to the band $\omega_c$. Therefore, we have to equate $\left|F(j\omega_c)\right|$ to 1, hence:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\left|\frac{K_PK}{j\omega_c(1+j\tau \omega_c)}\right|=1,&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;from which we get:&#xA;$$&#xA;K_P=\frac{\omega_c}{K}\sqrt{1+\left(\tau \omega_c\right)^2},&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $K_P$ is the proportional gain.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since the system is already equipped with an integrator (i.e. the pole in the origin), we don't need the integral part of the PID, thanks to the so-called internal model principle. Nonetheless, for disturbance rejection purpose, one can design the &lt;em&gt;I&lt;/em&gt; part under some mild conditions as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;K_I=\omega_{dr}K_P-\frac{\omega_{dr}^2\left(1-\tau \omega_{dr}\right)}{K},&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $K_I$ is the integral gain and $T_{dr}=3/\omega_{dr}$ is the time period wherein a step-wise disturbance is required to be canceled out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For instance, the &lt;a href=&quot;https://robotics.stackexchange.com/a/4412/6941&quot;&gt;scenario&lt;/a&gt; described by &lt;a href=&quot;https://robotics.stackexchange.com/users/1667/daweim0&quot;&gt;daweim0&lt;/a&gt; will definitely require the integral gain to have zero steady-state error while counteracting the gravity component. The feed-forward term will be very helpful too.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2014-08-27T19:23:30.457" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4434" PostTypeId="2" ParentId="2148" CreationDate="2014-08-24T16:26:36.440" Score="3" Body="&lt;p&gt;Complex systems of differential equations governing a physical phenomenon under study are solved by means of a computer &lt;strong&gt;always&lt;/strong&gt; in a discrete way, meaning that the differential equations are integrated step-wise with the integration steps decided according to some smart set of rules. This does happen therefore also within &lt;em&gt;Simulink&lt;/em&gt; and even when you select &lt;strong&gt;continuous&lt;/strong&gt; mode from the Solver panel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What does really matter when you switch to &lt;strong&gt;discrete&lt;/strong&gt; mode is that you plug in the simulation the fact that you use a &lt;strong&gt;real-time&lt;/strong&gt; device (e.g. typically a controller) to deal with your task.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In simulation (e.g. in Simulink) you can even disregard the fact that you have such devices and focus on how the physical phenomena take place and evolve over time. However, whenever you have to implement the simulated controller you came up with into a real embedded system working under real-time constraints (e.g. the C++ code running on the Linux aboard your quadcopter), then you have to carry out the discretization stage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A discretized system is not an exact copy of its continuous ancestor of course, depending the differences on the transformation you applied (e.g. Tustin, forward Euler formulas). Roughly speaking, the continuous mode gives us a more informative perspective on a system than its discrete counterpart, since it embeds all the behaviors the system can expose in the limit of the sample time approaching zero. Nevertheless, a code written for a machine cannot handle explicitly the notion of such a limit and will certainly make some approximations which may or may not be valid for your problem. Thus, always remember: never be happy about your results! Even if you enable &lt;em&gt;continuous&lt;/em&gt; mode, the outcome might turn to be a too coarse estimation of what is going on in reality.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Simulink and other modern environments allow users to:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;focus on the physics and controller design (continuous mode);&lt;/li&gt;&#xA;&lt;li&gt;focus on the design of controllers to be deployed in real embedded devices (discrete mode);&lt;/li&gt;&#xA;&lt;li&gt;evaluate the overall performance of the controller along with the plant (hybrid mode), where the controller is discrete and the plant is meant to run at much faster frequency (practically continuous).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;As result, a typical work flow could be the following:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Continuous mode: simulate the plant given the set of its differential equations.&lt;/li&gt;&#xA;&lt;li&gt;Continuous mode: design a controller for such a plant by optimizing some merit costs.&lt;/li&gt;&#xA;&lt;li&gt;Discrete mode: discretize the controller and validate the final performance.&lt;/li&gt;&#xA;&lt;li&gt;Discrete mode: deploy the controller's law in the embedded unit.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;If you are not interested in code deployment or in assessing the effects of discretization, but you'd like rather to simulate the physics, you could stay &quot;continuous&quot;. Conversely, if you deal with systems that are intrinsically discrete, the suggestion is of course to start already in discrete mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Philosophically speaking, &lt;em&gt;continuous vs. discrete&lt;/em&gt; can represent a sort of dualism in engineering like the much more famous &lt;em&gt;wave vs. particle&lt;/em&gt; dualism in nature: a continuous signal must be sampled to be handled by a digital machine, but a discrete signal remains physically continuous because sharp transitions link the digital levels. Even a switching state can be seen as a very quick voltage transition. It depends on the level of details we are interested in.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2014-08-24T20:23:15.633" LastActivityDate="2014-08-24T20:23:15.633" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4435" PostTypeId="1" CreationDate="2014-08-24T17:32:07.617" Score="6" ViewCount="182" Body="&lt;p&gt;I am currently studying the &lt;a href=&quot;http://infoscience.epfl.ch/record/175537/files/2069.pdf&quot;&gt;FREAK&lt;/a&gt; descriptor and I read the article published by its designers. It states that the aim was to mimic the retinal topology, and one of the advantages that could be gained is the fact that retinal receptive fields overlap, which increases the performance. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I thought about it a lot, and the only explanation I was able to come up with is the fact that, looking at this problem from an implementation point of view, a receptive field is the ensemble of an image patch centred around a pixel, plus the standard deviation of the Gaussian filter applied to this patch. The size of the receptive field represents the value of the standard variation. The bigger the size is, the more pixels will be taken into consideration when Gaussian filtering, and so we &quot;mix&quot; more information in a single value. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But  this guess of mine is very amateurish, I would appreciate it if someone could give an explanation from what goes on in the field of image processing-computer vision-neuroscience.&lt;/p&gt;&#xA;" OwnerUserId="6976" LastEditorUserId="350" LastEditDate="2014-08-27T19:11:21.697" LastActivityDate="2014-09-07T12:32:28.497" Title="computer vision using the FREAK local features descriptor - why overlapping fields?" Tags="&lt;computer-vision&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4436" PostTypeId="2" ParentId="2422" CreationDate="2014-08-24T19:14:18.427" Score="5" Body="&lt;p&gt;In robotics the &lt;em&gt;configuration space&lt;/em&gt; is &lt;strong&gt;exactly&lt;/strong&gt; the &lt;em&gt;joint space&lt;/em&gt; of the manipulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Differently, to indicate the space where the forward kinematic law maps the joints configuration into, we use the terms &lt;em&gt;task space&lt;/em&gt; and &lt;em&gt;operational space&lt;/em&gt;, equivalently.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastActivityDate="2014-08-24T19:14:18.427" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4437" PostTypeId="2" ParentId="2948" CreationDate="2014-08-24T20:10:29.907" Score="1" Body="&lt;p&gt;I have to say that $G(s)$ seems to represent quite a strange physical system with a settling time of &lt;strong&gt;15.8 hours&lt;/strong&gt;, especially compared with the requirement. There might have been some mistakes in identifying the system, maybe? The known term of the denominator is out of scale. Perhaps the data you collected to identify the model are not correctly scaled.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway, with those P-I-D parameters you mentioned I got the following close-loop system $sys_1$:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;sys_1(s)=\frac{0.1612 s^3 + 1.109 s^2 + 6.86 s + 0.5914}{1.161 s^3 + 1.201 s^2 + 6.86 s + 0.5914},&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;which is a bit different from $G_cl(s)$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To get a over-damped response with settling time lower than 1 second, it suffices to use a simple proportional controller with $P=0.3695$, obtaining:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;sys_2=\frac{ 4.046 s + 0.3538}{s^2 + 4.138 s + 0.3538}.&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See below the step responses of $sys_1$ and $sys_2$ close-loop systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/i1e1i.png&quot; alt=&quot;Step response&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="6941" LastActivityDate="2014-08-24T20:10:29.907" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4438" PostTypeId="2" ParentId="2251" CreationDate="2014-08-25T07:00:47.910" Score="14" Body="&lt;p&gt;The Rao-Blackwellized Particle Filter (RBPF) as you say in your question performs a marginalization of the probability distribution of your state space. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The particle filter uses sampling to represent the multivariate probability distribution of your state space. Using samples to represent a distribution is firstly only an approximation, and secondly not very efficient in most cases. The higher the dimension of the state, the more particles you require. One trick introduced by Doucet et al. is to marginalize out a subset of the state space, which can be handled in a more efficient way by using a Gaussian representation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These figures from my &lt;a href=&quot;http://nbn-resolving.de/urn:nbn:de:gbv:46-00103537-17&quot; rel=&quot;noreferrer&quot;&gt;thesis&lt;/a&gt; might help to visualize the concept. Let's say you have a joint distribution over $X$ and $Y$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/Qjyrw.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;instead of sampling jointly over $X$ and $Y$, we can marginalize $Y$ and represent it as a Gaussian distribution. In this way we just need to sample over $X$,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/DOXp4.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;which is much more efficient. Note that each sample now represent a distribution over $Y$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This marginalization is very popular in SLAM. The reason is that jointly sampling over position and map is impractical. The RBPF idea has been made popular in FastSLAM, realizing that marginalizing the maps from the joint distribution makes the problem tractable. As in the example above, each particle there represents a pose, correspondences and a map. So there is one map per particle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the difference between an RBPF and a regular particle filter is that the RBPF samples over a subspace of the probability distribution of the state, and represents the rest using a different statistic. I have another related &lt;a href=&quot;https://stats.stackexchange.com/q/47847/19731&quot;&gt;question&lt;/a&gt; on the math background of the Rao-Blackwellization part.&lt;/p&gt;&#xA;" OwnerUserId="127" LastEditorUserId="-1" LastEditDate="2017-04-13T12:44:19.087" LastActivityDate="2014-08-25T07:16:44.897" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4439" PostTypeId="1" CreationDate="2014-08-25T09:23:44.590" Score="1" ViewCount="192" Body="&lt;p&gt;I'm usig RPI and Servoblaster to control servos. I've set the &lt;code&gt;--step-size to 2 us&lt;/code&gt;, but I'd like to decrease it to 1us. I've tried to set the &lt;code&gt;step-size to 1us&lt;/code&gt;, but the Servoblaster displays: Invalid step-size specified. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've also tried to set the pulse width in micoseconds like &lt;code&gt;echo 1=1140us &amp;gt; /dev/servolaster&lt;/code&gt;. It works, but it's unpredictabe (step size is set to 2us):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;echo 1=1140us &amp;gt; /dev/servoblaster - motor starts spinnig&#xA;echo 1=1142us &amp;gt; /dev/servoblaster - motor **smoothly** speeds up&#xA;echo 1=1144us &amp;gt; /dev/servoblaster - motor's speed has not changed&#xA;echo 1=1146us &amp;gt; /dev/servoblaster - motor smoothly speeds up (OK, assume that it can be changed by +/- 4)&#xA;BUT:&#xA;echo 1=1150us &amp;gt; /dev/servoblaster - motor's speed has not changed - why??&#xA;echo 1=1152us &amp;gt; /dev/servoblaster - motor speeds up, but **fastly**&#xA;echo 1=1156us &amp;gt; /dev/servoblaster - motor **smoothly** speeds up&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Motor: Turnigy aerodrive 2830-11, ESC: Turnigy Multistar 30A&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any idea?&lt;/p&gt;&#xA;" OwnerUserId="6951" LastActivityDate="2014-08-25T09:23:44.590" Title="Raspberry Pi finer servo control" Tags="&lt;raspberry-pi&gt;&lt;otherservos&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4440" PostTypeId="1" CreationDate="2014-08-26T10:42:33.863" Score="1" ViewCount="119" Body="&lt;p&gt;I have known map of the environment (2d occupancy grid map). I am trying to find if anything changed in environment using 2d laser while navigating by using maximum likelihood of laser with known map. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is how to know &lt;em&gt;which measurements are corresponding to changes&lt;/em&gt;. My environment is not static and has some changes which is differs from known map. Now i am trying to find which objects newly came into the environment or moved out of the environment using laser.&lt;/p&gt;&#xA;" OwnerUserId="714" LastEditorUserId="714" LastEditDate="2014-08-26T10:53:03.077" LastActivityDate="2015-03-09T19:32:11.633" Title="Finding changes in environment using 2d laser" Tags="&lt;slam&gt;&lt;mapping&gt;&lt;laser&gt;&lt;occupancygrid&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4441" PostTypeId="2" ParentId="4427" CreationDate="2014-08-26T13:27:13.370" Score="1" Body="&lt;p&gt;Some of the open access robotics journals (free access)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) &lt;a href=&quot;http://www.intechopen.com/journals/international_journal_of_advanced_robotic_systems&quot; rel=&quot;nofollow noreferrer&quot;&gt;International Journal of Advanced Robotic Systems&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/edGUk.jpg&quot; alt=&quot;International Journal of Advanced Robotic Systems&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) &lt;a href=&quot;http://www.roboticsproceedings.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Robotics: Science and Systems&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/4d81H.jpg&quot; alt=&quot;Robotics: Science and Systems&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="714" LastEditorUserId="714" LastEditDate="2014-08-27T18:01:01.657" LastActivityDate="2014-08-27T18:01:01.657" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4442" PostTypeId="1" AcceptedAnswerId="4445" CreationDate="2014-08-27T06:35:10.940" Score="7" ViewCount="1212" Body="&lt;p&gt;I have a robotic simulator that enables a 6 wheel rover to perform spot turn.&#xA;To prepare the rover to spot turn, I have to arrange/align the wheels in such a fashion:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;front side&amp;gt;&#xA;//    \\&#xA;||    ||&#xA;\\    //&#xA;&amp;lt;rear side&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;What is the technical name of it? Circular wheel arrangement? Circular alignment? &lt;/p&gt;&#xA;" OwnerUserId="1167" LastEditorUserId="1167" LastEditDate="2014-08-28T22:25:15.847" LastActivityDate="2014-09-08T17:37:52.633" Title="What is the technical name when robot wheels are aligned to perform spot turn?" Tags="&lt;mobile-robot&gt;&lt;wheeled-robot&gt;&lt;wheel&gt;" AnswerCount="4" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4444" PostTypeId="2" ParentId="4442" CreationDate="2014-08-27T07:51:57.657" Score="3" Body="&lt;p&gt;Differential drive&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/SLOYB.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Left and right wheels drive clockwise and anticlockwise, at same speed, for robot to rotate with reference to central point between wheels&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may want to let front and back pairs of wheel free spinning (if gear ration small, open electric circuit will do) and only drive the central 2 wheels. Or, you need to model all six wheels, may be some skidding for spot turning.&lt;/p&gt;&#xA;" OwnerUserId="5582" LastEditorUserId="5582" LastEditDate="2014-08-27T08:06:07.960" LastActivityDate="2014-08-27T08:06:07.960" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4445" PostTypeId="2" ParentId="4442" CreationDate="2014-08-27T18:59:06.977" Score="4" Body="&lt;p&gt;I'm not aware of any technical name for the alignment of the wheels except -- literally -- &lt;strong&gt;&quot;steering&quot;&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.rehab.research.va.gov/jour/99/36/1/brienza.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/v0AtB.gif&quot; alt=&quot;Pivot points&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Spot turns in theory are no different than any other turn.  You simply align the axis of each wheel with the radial lines coming from a single pivot point.  If that point is underneath the vehicle, you will be doing a spot turn (a.k.a. point turn, a.k.a. pivot turn).  If the point is not underneath the vehicle, you will be doing a regular arcing turn like you'd do in a car or bicycle or similar.&lt;br&gt;&#xA;&lt;a href=&quot;http://www.hemmings.com/hcc/stories/2013/09/01/hmn_feature15.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vaTlcm.png&quot; alt=&quot;ackerman angles&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even if not all the wheels have adjustable angles, you're still orienting all the wheels to the same point.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2014-09-08T17:37:52.633" LastActivityDate="2014-09-08T17:37:52.633" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4446" PostTypeId="2" ParentId="4426" CreationDate="2014-08-27T19:15:15.467" Score="0" Body="&lt;p&gt;Essentially you are talking about a low-pass filter on your output.  Kalman filtering is probably your best option for accuracy, but simply calculating a moving average should go a long way toward quieting the noise in your input.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-08-27T19:15:15.467" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4447" PostTypeId="1" CreationDate="2014-08-27T19:28:23.813" Score="4" ViewCount="2321" Body="&lt;p&gt;I've seen several examples of SLAM algorithms (&lt;a href=&quot;http://en.wikipedia.org/wiki/EKF_SLAM&quot; rel=&quot;nofollow noreferrer&quot;&gt;EKF SLAM&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/GraphSLAM&quot; rel=&quot;nofollow noreferrer&quot;&gt;Graph SLAM&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/SEIF_SLAM&quot; rel=&quot;nofollow noreferrer&quot;&gt;SEIF SLAM&lt;/a&gt;) written in terms of the &lt;a href=&quot;https://robotics.stackexchange.com/questions/3101/velocity-model-motion-in-matlab-probabilistic-robotics&quot;&gt;velocity motion model&lt;/a&gt;.  I have yet to see an example of any SLAM algorithm utilizing the &lt;a href=&quot;https://www.cs.princeton.edu/courses/archive/fall11/cos495/COS495-Lecture5-Odometry.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;odometry motion model&lt;/a&gt;.  I wonder if there is an inherent advantage to using the velocity motion model over the odometry model for this problem.  Does it have something to do with the fact that odometry sensor information comes &lt;strong&gt;after&lt;/strong&gt; the motion has already taken place, whereas velocity control commands are executed &lt;strong&gt;before&lt;/strong&gt; motion?&lt;/p&gt;&#xA;" OwnerUserId="2295" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2014-08-28T21:39:29.137" Title="Is there any advantage to velocity motion models over odometry motion models for SLAM?" Tags="&lt;slam&gt;&lt;motion&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4449" PostTypeId="1" CreationDate="2014-08-27T23:54:46.607" Score="3" ViewCount="505" Body="&lt;p&gt;I'm trying to understand the role of landmarks in SLAM algorithms.  I've glanced over a few books concerning landmark based SLAM algorithms and I've come up with a rudimentary understanding which I believe is &lt;strong&gt;flawed&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;How I think SLAM works:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I understand it, landmarks are a set of points in a map whose locations are known &lt;strong&gt;a priori&lt;/strong&gt;.   Furthermore, the number of landmarks in a map is fixed.  The number of landmarks detected at any one time may change, but the number of landmarks that exist in the map remains static at all times.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My understanding is that SLAM algorithms exploit the fact that these points are both &lt;strong&gt;uniquely identifiable&lt;/strong&gt; and &lt;strong&gt;known a priori&lt;/strong&gt;.   That is, when a robot senses a landmark, it knows exactly which landmark it detected and thus knows the exact location of that landmark.  Thus, a slam algorithm uses the (noisy) distance to the detected landmarks (with known location) to estimate its position and map.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Why I think I'm wrong&lt;/em&gt;&lt;/strong&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my &lt;em&gt;naive&lt;/em&gt; understanding, the usefulness of SLAM would be limited to controlled environments (i.e. with known landmarkds) and completely useless in unknown environments with no a priori known landmarks.  I would presume that some sort of feature detection algorithm would have to dynamically add landmarks as they were detected.  However, this fundamentally changes the assumption that the number of given landmarks must be static at all times.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know I'm wrong in my understanding of feature based SLAM, but I'm not sure which of my assumptions is wrong:  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do feature based SLAM algorithms assume a static number of landmarks?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do the landmarks need to be known a priori?  Can they be detected dynamically?  And if so, does this fundamentally change the algorithm itself?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there special kinds of SLAM algorithms to deal with unknown environments with an unknown total number of landmarks in it?&lt;/p&gt;&#xA;" OwnerUserId="2295" LastActivityDate="2014-08-29T18:09:46.420" Title="Assumptions about the nature of landmarks in SLAM algorithms" Tags="&lt;slam&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4450" PostTypeId="2" ParentId="2860" CreationDate="2014-08-28T00:38:29.787" Score="2" Body="&lt;p&gt;I am assuming that you are referring to the high school competition Vex? As you probably know there is a 18x18 inch area limit for the robot. The starting position must remain within this limit but there is no limit to how far it can reach, whether or not it becomes unstable and breaks is a different matter. I haven't used pneumatics in 2 years so I forget the default length but Length shouldn't be a big factor to be concerned with.&lt;/p&gt;&#xA;" OwnerUserId="6999" LastActivityDate="2014-08-28T00:38:29.787" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4451" PostTypeId="2" ParentId="4447" CreationDate="2014-08-28T07:01:09.647" Score="4" Body="&lt;p&gt;I can't think of a reason why a velocity model (based on control commands)&#xA;would be superior to an odometry model (which uses the actual wheel speeds). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The lecture notes from Freiburg on &lt;a href=&quot;http://probabilistic-robotics.informatik.uni-freiburg.de/ppt/motion-models.ppt&quot; rel=&quot;nofollow&quot;&gt;motion models&lt;/a&gt; imply the same:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;Odometry-based models are used when systems are equipped with wheel&#xA;  encoders. &lt;/li&gt;&#xA;  &lt;li&gt;Velocity-based models have to be applied when no wheel&#xA;  encoders are given.&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The timing does not have an influence here. If any, it would affect the latency, but even that I would think is not the case. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The better your model, the better your prediction. Having actual measurements in the model provide you with additional information to improve the model. One thing which is very commonly performed is to use an IMU to estimate the rotational part of your motion model.&lt;/p&gt;&#xA;" OwnerUserId="127" LastActivityDate="2014-08-28T07:01:09.647" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4452" PostTypeId="2" ParentId="4449" CreationDate="2014-08-28T07:11:17.547" Score="1" Body="&lt;p&gt;You are right in your assumption that your understanding is wrong. SLAM stands for Simultaneous Localisation and Mapping. The map can be anything that associates locations with things that are at those locations. One example of a map is where you have landmarks for which the positions are known.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you assume that you already have this map. This is not a SLAM problem anymore. Its just localisation. Wanting to know where you  (or your agent) is within this map.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The nature of a landmark or feature based SLAM is that the location, number and identification of features is usually not known. This is why you do mapping. The result of your algorithm is then the estimated position of those features that you have detected and the estimated position of yourself. &lt;/p&gt;&#xA;" OwnerUserId="127" LastActivityDate="2014-08-28T07:11:17.547" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4453" PostTypeId="2" ParentId="2937" CreationDate="2014-08-28T13:25:30.440" Score="1" Body="&lt;p&gt;The zero in the transfer function has an anticipatory effect that you can easily see as an overshoot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, since the zero is in the left half of the s-plane, you can consider the pole-zero cancellation as a suitable technique to get rid of that zero.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastActivityDate="2014-08-28T13:25:30.440" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4454" PostTypeId="2" ParentId="4449" CreationDate="2014-08-28T15:17:24.823" Score="1" Body="&lt;p&gt;The technique you're looking for is called &lt;strong&gt;landmark extraction&lt;/strong&gt;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The magic of SLAM comes from being able to automatically decide what counts as a landmark among the &quot;&lt;a href=&quot;http://en.wikipedia.org/wiki/Feature_vector&quot; rel=&quot;nofollow&quot;&gt;features&lt;/a&gt;&quot; that the sensors pick up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the early days of SLAM, this was fairly simple: just count every geometric feature detected by the sensors as its own landmark.  This is not scalable, but it academically proved the functionality of SLAM.  As you'd expect, you need to have enough landmarks to get good navigation.  But from a practical standpoint, you need to keep the CPU/memory usage within reason.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keeping that balance is an open problem -- there are many papers that focus solely on how to get landmarks from features quickly / space-efficiently / in a domain-specific way.  The &lt;a href=&quot;http://ocw.mit.edu/courses/aeronautics-and-astronautics/16-412j-cognitive-robotics-spring-2005/projects/1aslam_blas_repo.pdf&quot; rel=&quot;nofollow&quot;&gt;SLAM for Dummies&lt;/a&gt; whitepaper from MIT has some good introductory text on that topic.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2014-08-29T18:09:46.420" LastActivityDate="2014-08-29T18:09:46.420" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4455" PostTypeId="2" ParentId="4447" CreationDate="2014-08-28T15:28:13.573" Score="0" Body="&lt;p&gt;One obvious example of where velocity motion models work better is in robots that don't operate on land: UAVs and AUVs, for instance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thinking about whether the information comes before (as in the case of the velocity command) or after (as in the case of the odometry) the motion is a red herring -- it doesn't matter.  You are creating a position estimate partly based on what you see and partly based on how you think you moved.  Each of those involve uncertainty, so you just need to characterize that uncertainty properly.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In terms of accuracy, sometimes it's more appropriate to consider exact wheel motion, and sometimes it's more appropriate to consider vehicle momentum; it all depends on the vehicle.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-08-28T15:28:13.573" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4456" PostTypeId="1" AcceptedAnswerId="4466" CreationDate="2014-08-28T18:14:01.937" Score="4" ViewCount="2148" Body="&lt;p&gt;How are several channels multiplexed down to a single physical wire? If two channels are transmitting the same value in the same frame, wont there be an overlap of the pulses?&lt;/p&gt;&#xA;" OwnerUserId="7000" LastActivityDate="2019-02-07T17:23:28.647" Title="Pulse Position Modulation as used in RC controls" Tags="&lt;rcservo&gt;&lt;pwm&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4457" PostTypeId="2" ParentId="4442" CreationDate="2014-08-28T19:06:23.367" Score="5" Body="&lt;p&gt;Looks like wikipedia calls it &lt;a href=&quot;http://en.wikipedia.org/wiki/Steering#Active_four-wheel_steering&quot; rel=&quot;noreferrer&quot;&gt;Active Four-Wheel Steering&lt;/a&gt;. Although, what you're talking about is the left and right side steering opposite of each, whereas Active Four-Wheel Steering in automobile usually refers to the front and rear steering opposite of each other, I still think your case can still be considered Active Four-Wheel Steering the way it is defined there: &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In an active four-wheel steering system, all four wheels turn at the same time when the driver steers.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This is similar to crab steering, but with crab steering all the wheels turn in the SAME direction at the same angle so the vehicle can travel in a straight line at an angle. &lt;/p&gt;&#xA;" OwnerUserId="5695" LastActivityDate="2014-08-28T19:06:23.367" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4458" PostTypeId="2" ParentId="4447" CreationDate="2014-08-28T21:39:29.137" Score="2" Body="&lt;p&gt;Through my reading of this book &quot;&lt;a href=&quot;http://www.probabilistic-robotics.org/&quot; rel=&quot;nofollow&quot;&gt;Probabilistic Robotics&lt;/a&gt;&quot; chapter 5 pp. 120,121. It seems what you thought is right. And this is the reason the authors mentioned. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Many commercial mobile robots (e.g. differential drive, synchro drive)&#xA;  are actuated by independent transnational and rotational velocities,&#xA;  or are best thought of being actuated in this way. The second model&#xA;  assumes that one has access to odometry information. Most commercial&#xA;  bases provide odometry using kinematic information (distance traveled,&#xA;  angle turned). The resulting probabilistic model for integrating such&#xA;  information is somewhat different from the velocity model. In&#xA;  practice, odometry models tend to be more accurate than velocity&#xA;  models, for the simple reason that most commercial robots do not&#xA;  execute velocity commands with the level of accuracy that can be&#xA;  obtained by measuring the revolution of the robot's wheels. However,&#xA;  odometry is only available after executing a motion command. Hence it&#xA;  cannot be used for motion planning.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Hope this helps. &lt;/p&gt;&#xA;" OwnerUserId="2155" LastActivityDate="2014-08-28T21:39:29.137" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4459" PostTypeId="2" ParentId="4442" CreationDate="2014-08-28T22:36:50.437" Score="2" Body="&lt;p&gt;There is no &quot;term&quot; for this arrangement of wheels, just like there is no term for this arrangement:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; //    //&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;other than &quot;turning right&quot;&lt;/p&gt;&#xA;" OwnerUserId="7001" LastActivityDate="2014-08-28T22:36:50.437" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4460" PostTypeId="2" ParentId="4415" CreationDate="2014-08-28T22:46:48.940" Score="10" Body="&lt;p&gt;For testing simple algorithms, you might be able to get by with a 2D simulator. There are a few out there that I am aware of:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Stage: &lt;a href=&quot;http://playerstage.sourceforge.net/index.php?src=stage&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://playerstage.sourceforge.net/index.php?src=stage&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;STDR: &lt;a href=&quot;http://stdr-simulator-ros-pkg.github.io/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://stdr-simulator-ros-pkg.github.io/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Stage is an older, but useful, simulator which has integration with ROS (http: //wiki.ros.org/stage_ros) which will allow you to write code to interact with and manipulate robots in C++/Python.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;STDR is a newer 2D simulator which also has ROS bindings.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want a full 3D simulator I can think of three, which again are not AI or quadrotors specific, that might meet your needs:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Gazebo: &lt;a href=&quot;http://gazebosim.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://gazebosim.org/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;MORSE: &lt;a href=&quot;https://www.openrobots.org/wiki/morse/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.openrobots.org/wiki/morse/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;V-REP: &lt;a href=&quot;http://www.coppeliarobotics.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.coppeliarobotics.com/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Gazebo is the 3D counter part to Stage and has ROS support, and it has been used with quadrotors (&lt;a href=&quot;http://www.ros.org/news/2012/03/announcement-of-hector-quadrotor-stack.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.ros.org/news/2012/03/announcement-of-hector-quadrotor-stack.html&lt;/a&gt;), though it has no out-of-the-box support for them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MORSE is based on blender and its game engine, it has ROS and YARP and Raw socket support.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;V-REP is a free for education simulator with support for many languages and platforms, including Windows and C#, if that is your kind of thing.&lt;/p&gt;&#xA;" OwnerUserId="5573" LastEditorUserId="9720" LastEditDate="2017-12-20T13:54:10.577" LastActivityDate="2017-12-20T13:54:10.577" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4461" PostTypeId="2" ParentId="4456" CreationDate="2014-08-29T04:46:52.473" Score="1" Body="&lt;p&gt;Multiple PWM channels generally aren't shoved into a single wire (Or I've never heard of it). If you need to send multiple data channels over the same wire then using a higher level protocol (such as UART or SPI) would be the way to go. While PWM is technically digital, it isn't like other digital protocols where data can be shoved in and expected to come out perfect on the other side. It's more like an analog signal where readings are subject to noise and infinite precision is not possible. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, it wouldn't matter if two channels are sending the same value or not. The way servo PWM works only the longer pulse would survive (Assuming the pulses are synchronized. If they weren't unusable garbage would most likely come out). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: &#xA;As for pulse positioning, it might be possible to multiplex 2 signals depending on how they were constructed. From what I have read ppm requires either a clock pulse or a external clock, but in theory it should be possible to multiplex. Keep in mind that there won't be any real way to differentiate between the pulses sent, and both sources will need to share the same clock. &lt;/p&gt;&#xA;" OwnerUserId="1667" LastEditorUserId="1667" LastEditDate="2014-09-02T20:08:25.087" LastActivityDate="2014-09-02T20:08:25.087" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4463" PostTypeId="1" CreationDate="2014-08-29T18:46:41.717" Score="4" ViewCount="3872" Body="&lt;p&gt;I'm a newbie in RC field..I am planning to construct my first Tricopter ever.  Can anyone help me to find the power rating to select the motor for a tricopter?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am at the beginning stage of construction.  Arm length of frame: 50cm each.  I need a thrust of about 2Kg -- nearly 666 gms for each motor.&lt;/p&gt;&#xA;" OwnerUserId="7005" LastEditorUserId="350" LastEditDate="2014-09-01T02:23:19.393" LastActivityDate="2014-09-15T07:11:01.663" Title="Choosing motor for a tricopter" Tags="&lt;motor&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4465" PostTypeId="1" AcceptedAnswerId="4470" CreationDate="2014-08-29T23:27:54.503" Score="1" ViewCount="103" Body="&lt;p&gt;I have a big miss conception between Yaw and attitude ? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Isn't both represent &quot;how far is the quad from earth ?&quot; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also if you could post how to calculate them from IMU (gyro +accele + magent ) &lt;/p&gt;&#xA;" OwnerUserId="6842" LastActivityDate="2014-08-31T00:55:05.040" Title="What's the difference between Yaw and Attitude in Quad Rotor" Tags="&lt;imu&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4466" PostTypeId="2" ParentId="4456" CreationDate="2014-08-30T02:13:24.050" Score="3" Body="&lt;p&gt;Many (perhaps most) radio control transmitters multiplex all the &quot;RC PWM&quot; channels into a single physical wire, using a system called &quot;RC PPM&quot; (radio-control pulse position modulation).&#xA;&lt;a href=&quot;http://www.futaba-rc.com/faq/faq-pcm1024.html&quot; rel=&quot;nofollow&quot;&gt;(a)&lt;/a&gt; &lt;a href=&quot;http://books.google.com/books?id=EcbjKvhgPLsC&amp;amp;q=pulse%20position%20modulation&quot; rel=&quot;nofollow&quot;&gt;(b)&lt;/a&gt; &lt;a href=&quot;http://www.hobbytronics.co.uk/decode-rc-control-ppm&quot; rel=&quot;nofollow&quot;&gt;(c)&lt;/a&gt; &lt;a href=&quot;http://books.google.com/books?id=EWZumms67AUC&amp;amp;q=pulse%20position%20modulation&quot; rel=&quot;nofollow&quot;&gt;(d)&lt;/a&gt; &lt;a href=&quot;http://pages.cs.wisc.edu/~bolo/rc/radio_types.html&quot; rel=&quot;nofollow&quot;&gt;(e)&lt;/a&gt; &lt;a href=&quot;http://adamone.rchomepage.com/guide1.htm&quot; rel=&quot;nofollow&quot;&gt;(f)&lt;/a&gt; &lt;a href=&quot;http://www.495thsquadron.org/PDF_Files/UnderstandingRC.pdf&quot; rel=&quot;nofollow&quot;&gt;(g)&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Often this &quot;PPM&quot; signal is transferred from the a student's RC transmitter through the buddy box wire to the teacher's RC transmitter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &quot;combined signal&quot; -- the &quot;RC PPM signal&quot; -- looks something like this&#xA;(based on diagram from &lt;a href=&quot;http://www.min.at/prinz/?x=entry:entry130320-204119&quot; rel=&quot;nofollow&quot;&gt;Richard J. Prinz&lt;/a&gt;):&#xA;&lt;a href=&quot;http://blog.ncode.ca/?tag=remote-control&quot; rel=&quot;nofollow&quot;&gt;(h)&lt;/a&gt; &lt;a href=&quot;http://www.avrfreaks.net/index.php?name=PNphpBB2&amp;amp;file=printview&amp;amp;t=75692&amp;amp;start=0&quot; rel=&quot;nofollow&quot;&gt;(i)&lt;/a&gt; &lt;a href=&quot;http://users.belgacom.net/TX2TX/tx2tx/english/tx2txgb1.htm&quot; rel=&quot;nofollow&quot;&gt;(j)&lt;/a&gt; &lt;a href=&quot;http://rcarduino.blogspot.com/2012/11/how-to-read-rc-receiver-ppm-stream.html&quot; rel=&quot;nofollow&quot;&gt;(k)&lt;/a&gt; &lt;a href=&quot;http://www.rcgroups.com/forums/showthread.php?t=1654104&amp;amp;page=2&quot; rel=&quot;nofollow&quot;&gt;(l)&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Sync    1       2     3     4        5    6    7   8   Sync...&#xA;---+ +----+ +------+ +-+ +-------+ +--+ +--+ +--+ +-+ +----...&#xA;   | |    | |      | | | |       | |  | |  | |  | | | |&#xA;   | |    | |      | | | |       | |  | |  | |  | | | |&#xA;   | |    | |      | | | |       | |  | |  | |  | | | |&#xA;   +-+    +-+      +-+ +-+       +-+  +-+  +-+  +-+ +-+&#xA;    *      *        *   *         *    *    *    *   *&#xA;&#xA; * - low separator pulse, always 0.5 ms&#xA; 1..8 - high &quot;RC PWM pulse&quot; for channels 1..8      0.5 – 1.5 ms&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The long &quot;sync pulse&quot; between frames is typically at least 5 ms long.&#xA;All the other pulses are no more than 2 ms long.&#xA;Most transmitters have a fixed frame rate somewhere in the range of 40 Hz to 200 Hz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the pilot moves the positions of the joysticks on the transmitter,&#xA;the width of the corresponding &quot;RC PWM pulse&quot; for that channel&#xA;will grow proportionally longer or shorter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The corresponding radio control receiver decodes the radio signal to a RC PPM signal on a single physical wire.&#xA;Often the receiver includes either a &lt;a href=&quot;http://en.wikipedia.org/wiki/4000_series#4017_decade_counter&quot; rel=&quot;nofollow&quot;&gt;4017 decade counter&lt;/a&gt; or a 4015 shift register --&#xA;that chip decodes the RC PPM signal at its CLK input into to several independent &quot;RC PWM&quot; outputs. The various &lt;a href=&quot;https://en.wikipedia.org/wiki/Servo_(radio_control)&quot; rel=&quot;nofollow&quot;&gt;RC servos&lt;/a&gt; are connected to those outputs with standard 3-pin connectors with 0.1&quot; spacing.&#xA;The RC PWM signal on the &quot;signal&quot; wire of the 3-wires coming out of the servo&#xA;has a pulse width that typically varies from 1.0 ms to 2.0 ms (proportional to the position of the joystick),&#xA;but only one pulse for each frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(The standardized &quot;RC PWM&quot; works differently enough from the PWM used to control DC motor speeds that some people say that RC PWM signals &quot;are not really PWM signals&quot;&#xA;&lt;a href=&quot;http://www.microchip.com/forums/m450082.aspx&quot; rel=&quot;nofollow&quot;&gt;(m)&lt;/a&gt; &lt;a href=&quot;http://www.technobots.co.uk/discus/messages/7/387.html?1225050483&quot; rel=&quot;nofollow&quot;&gt;(n)&lt;/a&gt; &lt;a href=&quot;http://www.rcgroups.com/forums/showthread.php?t=1318288&quot; rel=&quot;nofollow&quot;&gt;(o)&lt;/a&gt; &lt;a href=&quot;http://www.cmucam.org/boards/8/topics/2877?r=2882#message-2882&quot; rel=&quot;nofollow&quot;&gt;(p)&lt;/a&gt; &lt;a href=&quot;http://www.pololu.com/blog/16/electrical-characteristics-of-servos-and-introduction-to-the-servo-control-interface&quot; rel=&quot;nofollow&quot;&gt;(q)&lt;/a&gt;. Alas,&#xA;none of those people give any suggestions as to what we &lt;em&gt;should&lt;/em&gt; call these signals, so I call them &quot;RC PWM signals&quot; for lack of a better name.&#xA;Perhaps I should call them &lt;a href=&quot;http://www.mitchr.me/SS/batteriesRequired/RCcontrolTheory/&quot; rel=&quot;nofollow&quot;&gt;&quot;RC control signals&quot;&lt;/a&gt; ?).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If two transmitters are transmitting at the same time, then yes, there will be an overlap of pulses.&#xA;However, people at RC flying parks are very careful to assign each pilot (and the transmitter and receiver he uses) a different &quot;frequency channel&quot;, so that the receiver in each airplane can easily pick out the signal from its own transmitter and ignore the radio signals from every other transmitter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A 6-channel receiver uses only one &quot;frequency channel&quot;, but it has 6 output channels (6 servo channels), i.e., it has 6 rows of output pins for up to 6 servos to plug into -- typically one channel each for pitch(elevator), roll(aileron), yaw(rudder), throttle, and some optional AUX channels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;During a single RC frame, the a 6-channel receiver cycles through every every servomotor, putting one &quot;RC PWM&quot; pulse at a time on each of its 6 outputs.&#xA;Only one of its outputs is ever active at any one time -- there is no overlap of its pulses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With a typical 50 Hz 6-channel transmitter,&#xA;when all the control sticks are pushed to turn all the servos all the way counterclockwise, the receiver spits out&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;a 1 ms pulse on channel 1, then -- as soon as that finishes -- a 1 ms pulse on channel 2, for all 6 channels -- a total of 6 ms -- and the (relatively long) sync pulse is however long it needs to be to fill out the rest of the 20 ms frame.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;When all the control sticks are pushed to turn all the servos all the way clockwise, the receiver spits out&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;a 2 ms pulse on channel 1, then -- as soon as that finishes -- a 2 ms pulse on channel 2, for all 6 channels -- a total of 12 ms -- and the (much shorter) sync pulse is however long it needs to be to fill out the rest of the 20 ms frame.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="187" LastEditorUserId="187" LastEditDate="2014-09-03T15:53:08.960" LastActivityDate="2014-09-03T15:53:08.960" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4467" PostTypeId="1" AcceptedAnswerId="4481" CreationDate="2014-08-30T07:25:00.390" Score="1" ViewCount="528" Body="&lt;p&gt;it's been while since I started reading about INS, orientation and so for quadrotors . &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I faced the following terms : AHRS - Attitude - Yaw,Pitch and Roll - MARG sensors&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know for example how to calculate Yaw,Pitch and Roll , but does it related to Attitude ? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What's Attitude  any way and how it get calculated ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;AHRS &quot;Attitude and heading reference system&quot; does it formed from Yaw,Pitch and Roll ? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;MARG(Magnetic, Angular Rate, and Gravity) ? how it's related to other terms ? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What about INS ( Inertial Navigation Systems ) ? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My questions here are about these concepts, and there meaning , how they cooperate with each other , how they got calculated and which sensors suits for what ?&lt;/p&gt;&#xA;" OwnerUserId="6842" LastActivityDate="2014-09-01T03:05:57.690" Title="Need to clear some concepts: AHRS - Attitude - Yaw,Pitch and Roll - MARG sensors -INS" Tags="&lt;navigation&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4468" PostTypeId="2" ParentId="2056" CreationDate="2014-08-30T13:12:14.373" Score="1" Body="&lt;p&gt;I had problems with this as well using a Pro Micro. Testing with a Mega instead and it worked no problem, using (57600) for Serial and (38400) for Serial1. I did try Serial1 as well as BTSerial with the Pro Micro, to no avail but didn't test with BTSerial on the Mega.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's no pin 11 on the Pro Micro, so I used&lt;/p&gt;&#xA;&#xA;&lt;p&gt;SoftwareSerial BTSerial(10, 14);&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For whatever reason, after trying with the Mega, it now works with the Pro Micro using John's code above, which is pretty much the same as the code I originally used (and which worked on the Mega).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have found that Serial.println commands in the &quot;void setup&quot; section don't work on the Pro Micro but do on the Mega, so don't think it's not working just because you don't see those in Serial Monitor. In the &quot;void loop&quot; section they work fine though. It didn't make any difference using a command to wait for Serial to be ready, like so:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;   Serial.begin(57600);&#xA;   while (!Serial) {&#xA;     ; // wait for serial port to connect. Needed for Leonardo only&#xA;   }&#xA;&#xA;   Serial.println(&quot;Goodnight moon!&quot;);&#xA;&#xA;   // set the data rate for the SoftwareSerial port&#xA;   Serial1.begin(38400);&#xA;   Serial.println(&quot;Ready&quot;);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="7008" LastActivityDate="2014-08-30T13:12:14.373" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4469" PostTypeId="1" AcceptedAnswerId="4475" CreationDate="2014-08-30T16:43:36.747" Score="2" ViewCount="563" Body="&lt;p&gt;I read somewhere that in the case of photoshop for example, the size refers to the number of pixels an image contains, but resolution involves the pixel's size, I don't know whether this definition goes for all the other fields. In computer vision, what's the difference between image size and image resolution?&lt;/p&gt;&#xA;" OwnerUserId="6976" LastActivityDate="2014-09-02T13:30:20.010" Title="image size vs image resolution" Tags="&lt;computer-vision&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4470" PostTypeId="2" ParentId="4465" CreationDate="2014-08-31T00:55:05.040" Score="2" Body="&lt;p&gt;I think you're confusing two words that are spelled almost identically:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Altitude:  (with an L) is the distance from the vehicle to the earth.  It is given in terms of meters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Attitude:  (with a T) refers to the orientation of the vehicle with respect to a reference frame.  It is usually given in terms of roll, pitch, and yaw, which are all essentially angles of rotation along the x, y, or z axis.&lt;/p&gt;&#xA;" OwnerUserId="2295" LastActivityDate="2014-08-31T00:55:05.040" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4472" PostTypeId="1" AcceptedAnswerId="4491" CreationDate="2014-08-31T11:08:01.753" Score="2" ViewCount="551" Body="&lt;p&gt;I am new to Embedded, starting with &lt;strong&gt;AVR programming using C&lt;/strong&gt;. I am working on &lt;strong&gt;Mac OS 10.9.4&lt;/strong&gt;, so far I am using &lt;strong&gt;avrdude&lt;/strong&gt; and &lt;strong&gt;xCode&lt;/strong&gt; as IDE. It works very well, for now I am testing my code using &lt;strong&gt;Proteus&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But now I want to burn my &lt;strong&gt;.hex&lt;/strong&gt; to &lt;strong&gt;AVR ATMega16&lt;/strong&gt; board. I have &lt;strong&gt;USBasp&lt;/strong&gt;, which I am able to connect and it lights up the board. Now after searching on the internet, I think Mac is not detecting my board. I have checked &lt;strong&gt;/dev&lt;/strong&gt; directory, but no usb device found. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I am not sure what to next, how to make Mac detect my board and burn my .hex on it. I've found this: &lt;a href=&quot;http://www.fischl.de/usbasp/&quot; rel=&quot;nofollow&quot;&gt;http://www.fischl.de/usbasp/&lt;/a&gt; but no idea how to use this or its required or not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So question stand is: &lt;strong&gt;how to make Mac detect AVR board using USBasp and burn program to it?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;FYI: I've installed &lt;strong&gt;CrossPack&lt;/strong&gt; on Mac. &lt;/p&gt;&#xA;" OwnerUserId="1395" LastActivityDate="2014-09-03T07:04:05.247" Title="how to make Mac detect AVR board using USBasp and burn program to it?" Tags="&lt;usb&gt;&lt;embedded-systems&gt;&lt;avr&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4473" PostTypeId="2" ParentId="2939" CreationDate="2014-08-31T13:29:14.750" Score="2" Body="&lt;p&gt;What you seem to be concerned about is the well known nonminimum-phase effect of the zero $s_0=0.05548/0.311$ in the right half of the s-plane.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should first ask yourself whether this lag has a physical interpretation in the context of your system. Many physical systems expose such a dynamics, but here it might also depend on how you carried out the identification.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, to properly account for such a lag, if it really exists and is not introduced by the identification process, you should make use of proper techniques. For example, look &lt;a href=&quot;https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;cad=rja&amp;amp;uact=8&amp;amp;ved=0CB8QFjAA&amp;amp;url=http%3A%2F%2Fdigitool.library.colostate.edu%2Fwebclient%2FDeliveryManager%3Fpid%3D88646&amp;amp;ei=OzwDVPjXI4aN7Abl2IDQCA&amp;amp;usg=AFQjCNHDwLUAFgKeq1qyaPIbjuMP9o35eQ&amp;amp;sig2=F-5vNha3Bgg9Emlu8MryPg&amp;amp;bvm=bv.74115972,d.ZGU&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2014-08-31T15:16:35.850" LastActivityDate="2014-08-31T15:16:35.850" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4474" PostTypeId="1" AcceptedAnswerId="4500" CreationDate="2014-08-31T16:47:15.497" Score="1" ViewCount="627" Body="&lt;p&gt;I am trying to build a servo-controlled water valve.  Max pressure 150 psi , valve size 1/2&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone recommend a suitable 1/4-turn valve, either ceramic, ball valve, or anything else that is &lt;em&gt;easy&lt;/em&gt; to turn, even under pressure? It must require very little torque to turn, so a standard servo can rotate it with a small lever attached.&lt;/p&gt;&#xA;" OwnerUserId="7011" LastEditorUserId="134" LastEditDate="2014-09-03T18:38:18.193" LastActivityDate="2014-09-04T11:32:17.323" Title="Servo controlled valve" Tags="&lt;otherservos&gt;&lt;valve&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="4475" PostTypeId="2" ParentId="4469" CreationDate="2014-08-31T17:52:10.587" Score="1" Body="&lt;p&gt;Image size and image resolution generally have the same meaning in most cases. They usually refer to the dimensions of a 2D image, measured in pixels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Image size can refer to the dimensions of a printed image.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In other contexts, image resolution can refer to an image's &lt;em&gt;spatial resolution&lt;/em&gt;, which is a measure of the number of independent pixel values per unit length measured in a world coordinate frame. For example, in satellite imagery, we can measure the quality of a lens by determining its spatial resolution from its images of the earth.&lt;/p&gt;&#xA;" OwnerUserId="4474" LastActivityDate="2014-08-31T17:52:10.587" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4476" PostTypeId="1" CreationDate="2014-08-31T17:55:45.847" Score="1" ViewCount="94" Body="&lt;p&gt;I have just built my first quadcopter, and have run into a bit of a snag. When I plug in the power, I only get one beep and a red blink from the &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__21977__hobbyking_multi_rotor_control_board_v3_0_atmega328_pa_.html&quot; rel=&quot;nofollow&quot;&gt;flight control board&lt;/a&gt;, and nothing else happens. When I turn on the controller, however, a red light turns on on the reciever. Otherwise, nothing else happens. From what I can tell, I have plugged in everything correctly, and am not sure how to proceed.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__21977__hobbyking_multi_rotor_control_board_v3_0_atmega328_pa_.html&quot; rel=&quot;nofollow&quot;&gt;flight control board&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://hobbyking.com/hobbyking/store/uploads/116867307X7478X23.pdf&quot; rel=&quot;nofollow&quot;&gt;Flight Control Board manual (PDF)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.hobbyking.com/hobbyking/store/__25365__Turnigy_Multistar_30_Amp_Multi_rotor_Brushless_ESC_2_4S.html&quot; rel=&quot;nofollow&quot;&gt;ESC's&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I do not have a connection from the power distribution board to the flight control board, because I am assuming that it gets its power from the ESC's.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is &lt;a href=&quot;http://www.youtube.com/watch?v=csnYH_eq-Xk&quot; rel=&quot;nofollow&quot;&gt;the video I used to figure out how to build a quad&lt;/a&gt;.  (side- note about the video: I have not cut the ESC's cords as done in the guide, seemed like a silly step, also I have seen other applications where they were not cut)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have not updated the firmware on the board, i have put it in out of the box&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/uploads/116867307X7478X23.pdf&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt; is the board's user manual (PDF)&lt;/p&gt;&#xA;" OwnerUserId="4222" LastEditorUserId="4222" LastEditDate="2014-09-04T02:07:18.323" LastActivityDate="2014-09-04T02:07:18.323" Title="Quadcopter one beep and blink problem" Tags="&lt;control&gt;&lt;quadcopter&gt;" AnswerCount="0" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="4477" PostTypeId="1" AcceptedAnswerId="4479" CreationDate="2014-08-31T20:27:26.573" Score="0" ViewCount="1868" Body="&lt;p&gt;How to calculate attitude from IMU ? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, mathematical equations &lt;/p&gt;&#xA;" OwnerUserId="6842" LastEditorUserId="134" LastEditDate="2014-09-03T18:39:34.367" LastActivityDate="2014-09-03T18:39:34.367" Title="How to calculate Altitude from IMU?" Tags="&lt;imu&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4478" PostTypeId="2" ParentId="4467" CreationDate="2014-08-31T20:45:07.823" Score="0" Body="&lt;p&gt;Summarized from wikipedia:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;IMU&lt;/strong&gt;:  (inertial measurement unit) is just a sensor that provides raw data to help determine velocity, acceleration, and orientation.  It is usually some combination of an accelerometer, gyroscope, and a magnetometer.  I emphasize that the IMU only provides raw data, and not necessarily the true information that you want.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;MARG&lt;/strong&gt;: is a general term for the kind of data obtained from an IMU:  magnetic (magnetometer), angular rate (gyroscope), and gravity (accelerometer).  A MARG sensor is an IMU that obtains all three of these pieces of data.  But generally speaking, IMU's may also provide other data such as temperature and pressure (both can be used to help determine altitude).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;AHRS&lt;/strong&gt;:  combines an IMU with some sort of processor that produces the useful information that you really need (i.e. roll, pitch, yaw, etc...).  This is usually done by means of a (extended) kalman filter.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;INS&lt;/strong&gt;:  is a complete system that enables you to determine and monitor the movement of an object over time, using the processed MARG data from that object.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To understand the relation between attitude and &quot;roll, pitch and yaw&quot;, refer to my other answer:  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/4465/whats-the-difference-between-yaw-and-attitude-in-quad-rotor/4470#4470&quot;&gt;What&amp;#39;s the difference between Yaw and Attitude in Quad Rotor&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2295" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2014-08-31T20:51:21.757" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4479" PostTypeId="2" ParentId="4477" CreationDate="2014-08-31T21:00:43.383" Score="1" Body="&lt;p&gt;Altitude is usually determined from pressure and temperature sensors of an IMU.  You can see a formula &lt;a href=&quot;http://hyperphysics.phy-astr.gsu.edu/hbase/kinetic/barfor.html&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, you must realize that raw data from a sensor is NEVER RELIABLE.  Sensors do not always give a correct reading.  Instead, they give you a value somewhat close to the true value, but with some random &quot;noise&quot; added to it.  So, instead of just using the data that you obtain from the sensor, you should always filter out the noise using some form of kalman filter.  &lt;/p&gt;&#xA;" OwnerUserId="2295" LastActivityDate="2014-08-31T21:00:43.383" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4480" PostTypeId="2" ParentId="4477" CreationDate="2014-09-01T02:21:26.130" Score="1" Body="&lt;p&gt;An aircraft's &lt;a href=&quot;http://en.wikipedia.org/wiki/Flight_dynamics_(fixed-wing_aircraft)&quot; rel=&quot;nofollow&quot;&gt;attitude&lt;/a&gt; can be calculated from an IMU, but a full-fledged &lt;a href=&quot;http://en.wikipedia.org/wiki/Attitude_and_heading_reference_system&quot; rel=&quot;nofollow&quot;&gt;Attitude and Heading Reference System (AHRS)&lt;/a&gt; needs a bit more data -- magnetometers and GPS sensors can help.  Your question is a little vague as to what you're hoping to accomplish.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is &lt;a href=&quot;http://www.camelsoftware.com/firetail/blog/c/imu-maths/&quot; rel=&quot;nofollow&quot;&gt;an article describing some of the code you need in order to do this&lt;/a&gt; with &lt;a href=&quot;http://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation&quot; rel=&quot;nofollow&quot;&gt;quaternions&lt;/a&gt;, but in general there's not much I can suggest besides searching for &quot;IMU attitude estimation&quot;.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-09-01T02:21:26.130" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4481" PostTypeId="2" ParentId="4467" CreationDate="2014-09-01T03:05:57.690" Score="1" Body="&lt;p&gt;When talking about vehicles (such as aircraft), &lt;strong&gt;attitude&lt;/strong&gt; is just a fancy word for &quot;orientation&quot;: the combination of yaw, pitch, and roll.  These would be easy to calculate if the plane was just standing still; you'd use a compass to get the yaw, and a &lt;a href=&quot;http://en.wikipedia.org/wiki/Plumb_bob&quot; rel=&quot;nofollow&quot;&gt;plumb bob&lt;/a&gt; to measure the pitch and roll.  However, the acceleration or deceleration of the aircraft would severely alter these measurements.  &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.sensorwiki.org/doku.php/sensors/gyroscope&quot; rel=&quot;nofollow&quot;&gt;Gyroscopes measure angular velocity&lt;/a&gt; but can't measure position, velocity, or acceleration.  (Fortunately, they aren't affected by it either.)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.sensorwiki.org/doku.php/sensors/accelerometer&quot; rel=&quot;nofollow&quot;&gt;Accelerometers&lt;/a&gt; can measure the force on an object (either real forces like gravity or perceived forces like centrifugal force).  This measurement is often integrated to estimate velocity, or double-integrated to estimate position (both of which become increasingly inaccurate with time).&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.sensorwiki.org/doku.php/sensors/compass_magnetoresistive&quot; rel=&quot;nofollow&quot;&gt;Magnetometers&lt;/a&gt; measure the magnitude and direction of magnetic fields.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Regarding the other terms: IMUs produce some subset of MARG data (some have more sensors than others).  MARG data is used by an AHRS system to compute attitude (roll, pitch, yaw).  MARG data (optionally combined with other sensor data) is used by an INS system to compute both attitude and position.  &lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-09-01T03:05:57.690" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4482" PostTypeId="2" ParentId="4469" CreationDate="2014-09-01T13:45:57.643" Score="1" Body="&lt;p&gt;In the photoshop sense, image resolution refers to the quality of the printed image: how much physical space each image pixel will take up when it is printed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the computer vision sense, it's reversed: how many pixels that each unit of physical space takes up when it is captured by the camera.  (This measurement is entirely dependent on the distance between the camera and the subject.)&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2014-09-02T13:30:20.010" LastActivityDate="2014-09-02T13:30:20.010" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4483" PostTypeId="2" ParentId="3137" CreationDate="2014-09-01T21:10:15.140" Score="6" Body="&lt;p&gt;A quadcopter contains (among other things) two separate and independent algorithms: an attitude estimation algorithm, and a control algorithm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The attitude estimation algorithm computes information about the orientation of the quadcopter: the roll, pitch and yaw angles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The control algorithm is responsible for driving the motors so that the orientation of the quadcopter matches what the pilot (or the autopilot software) expects. This algorithm is what would read the estimated quadcopter angles (from the attitude estimation algorithm) and change the motors speed to attempt to match the desired angles. PIDs are a well-suited and common control algorithm for quadcopters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Gimbal lock is a phenomenon which may happen in the attitude estimation algorithm. It has nothing to do with the control algorithm. As such you don't need ESCs, motors or propellers to test for gimbal lock: you could modify your code to display your roll, pitch and yaw angles, and test that the correct values are calculated as you manually move your quadcopter around. You might be able to do this with the quadcopter tethered to your computer, via Bluetooth, or using other methods depending on your platform.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the angles are calculated correctly you don't need to worry about quaternions. If they are not calculated correctly, quaternions &lt;em&gt;might&lt;/em&gt; help you. The attitude estimation algorithm shall output 3 angles for the control algorithm to use, however it might use a different internal representation such as quaternions or 3x3 matrices. In that case it would still convert the attitude information to angles so as to provide usable data to the control algorithm. Generally speaking quaternions are unintuitive but computationally efficient. This makes them well suited for slow platforms such as Arduino. Matrices or angles may be an easier choice for faster hardware. If you need me to elaborate on one solution or the other please let me know, but it would be quite premature for me to give details at this stage as I am not convinced you need to implement quaternions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally if the angles are calculated correctly the way to make your quadcopter loop is to control the angular rate rather than the angle. If your sticks represent the quadcopter angle there is no way to make it do a full loop: try to visualise the sticks position as the quadcopter loops and you should understand why. However if the sticks control the angular rate then you can control the speed at which it loops.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Good luck with your project!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: For the sake of simplicity I have not mentioned the theoretical option to manipulate the data as matrices or quaternions both in the attitude estimation algorithm and the control algorithm. I have never seen a quadcopter implementing such algorithms.&lt;/p&gt;&#xA;" OwnerUserId="4249" LastActivityDate="2014-09-01T21:10:15.140" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4486" PostTypeId="1" CreationDate="2014-09-02T12:56:57.797" Score="7" ViewCount="3141" Body="&lt;p&gt;I am trying to create a simulation of a robot with &lt;a href=&quot;https://en.wikipedia.org/wiki/Ackermann_steering_geometry&quot; rel=&quot;noreferrer&quot;&gt;Ackerman steering&lt;/a&gt; (the same as a car). For now I'm assuming that it's actually a 3-wheeled robot, with two wheels at the back, and one steering wheel at the front:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/DqbhM.png&quot; alt=&quot;Steering robot&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Knowing the wheel velocity, and the steering angle &lt;strong&gt;a&lt;/strong&gt;, I need to be able to update the robot's current position and velocity with the new values at time t+1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The obvious way to do this would be to calculate the position of the centre of rotation, where the axles of the wheels would meet, however, this leads to an undefined centre of rotation when &lt;strong&gt;a&lt;/strong&gt; = 0. This means that the model doesn't work for the normal case of the robot just driving in a straight line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there some other model of Ackerman steering which works over a reasonable range of &lt;strong&gt;a&lt;/strong&gt;?&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2017-09-21T19:59:57.797" Title="Ackerman steering model" Tags="&lt;mobile-robot&gt;&lt;simulation&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4487" PostTypeId="1" CreationDate="2014-09-02T15:48:46.543" Score="2" ViewCount="309" Body="&lt;p&gt;Im trying to develop a system that autonomously navigates a large outside space, where accuracy is vital (GPS is too inaccurate). There are a number of options but have largely been used inside, has anyone tried these or used anything else?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;WiFi triangulation,&#xA;Dead reckoning,&#xA;RFID landmarks&lt;/p&gt;&#xA;" OwnerUserId="7023" LastEditorUserId="134" LastEditDate="2014-09-03T18:40:35.100" LastActivityDate="2015-01-07T23:20:22.733" Title="Relative Navigation Systems" Tags="&lt;navigation&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4488" PostTypeId="1" CreationDate="2014-09-02T16:33:32.477" Score="2" ViewCount="467" Body="&lt;p&gt;I'm currency a Web programmer and I'm very passionate by robotics and specialty for Artificial Intelligence. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have already make some C++ program for Microship and Arduino for little robots and other Lisp codes (example for labyrinth path search) but I think it's not really applicable for projects further. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have read a lots for artificial neural network to create artificial mind, but it's very theoretical and I have no idea to reproduce that on code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Someone have a idea to help me, a specific language, or just a C++ library ? &#xA;If you have some links, articles, or other tutorials I take it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank a lots !&lt;/p&gt;&#xA;" OwnerUserId="7022" LastEditorUserId="7022" LastEditDate="2014-09-03T20:14:48.047" LastActivityDate="2014-09-03T20:14:48.047" Title="What's the most adapted programming language for Robotic and principally AI?" Tags="&lt;artificial-intelligence&gt;&lt;programming-languages&gt;" AnswerCount="2" CommentCount="2" ClosedDate="2014-09-03T18:40:02.993" ContentLicense="CC BY-SA 3.0" />
  <row Id="4489" PostTypeId="1" CreationDate="2014-09-02T17:40:58.030" Score="1" ViewCount="1067" Body="&lt;p&gt;Simply , how can I calibrate IMU unit ? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I read some papers about this topic and was wondering if there are any standard methods.&lt;/p&gt;&#xA;" OwnerUserId="6842" LastEditorUserId="2295" LastEditDate="2014-09-02T22:27:56.630" LastActivityDate="2014-09-03T18:37:41.307" Title="How to calibrate an IMU unit?" Tags="&lt;imu&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4490" PostTypeId="2" ParentId="4488" CreationDate="2014-09-02T22:22:36.313" Score="1" Body="&lt;p&gt;Python has become increasingly popular in the computational sciences, but I'm not sure how widespread is its use in AI, machine learning, or robotics.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I do know is that one popular choice is to use the open source &lt;a href=&quot;http://www.ros.org&quot; rel=&quot;nofollow&quot;&gt;Robot Operating System (ROS)&lt;/a&gt; to interface code with hardware.  While it is not a programming language per se, it interfaces with lots of codes written generally in C++ and Python.&lt;/p&gt;&#xA;" OwnerUserId="2295" LastActivityDate="2014-09-02T22:22:36.313" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4491" PostTypeId="2" ParentId="4472" CreationDate="2014-09-03T07:04:05.247" Score="1" Body="&lt;p&gt;After reading AVR and CrossPack docs, I've found really easy to do this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For AVR development environment setup, do the following thing:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Install &lt;a href=&quot;https://developer.apple.com/xcode/&quot; rel=&quot;nofollow&quot;&gt;xCode&lt;/a&gt; on your Mac, choose latest version.&lt;/li&gt;&#xA;&lt;li&gt;Now install &lt;a href=&quot;http://www.obdev.at/crosspack/&quot; rel=&quot;nofollow&quot;&gt;CrossPack&lt;/a&gt;.   &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;This will do all the environment setup. CrossPack installs required libs to support USBasp as well. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To create project using xCode:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Create new project&lt;/li&gt;&#xA;&lt;li&gt;Select xAVR project on next screen&lt;/li&gt;&#xA;&lt;li&gt;Next set MCU you are using, Programmer to USBAsp, Frequency as needed.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;There you go, try a first first time build it may fail, but try again it will work smooth. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can use &lt;strong&gt;AVR DUDE&lt;/strong&gt; directly from Terminal:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;avrdude -c usbasp -p &amp;lt;partno&amp;gt; -P usb -v&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="1395" LastActivityDate="2014-09-03T07:04:05.247" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4492" PostTypeId="1" AcceptedAnswerId="4493" CreationDate="2014-09-03T09:25:52.203" Score="8" ViewCount="3838" Body="&lt;p&gt;I am having some trouble understanding how to practically use the speed-torque curve of a DC motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I understand that the gradient of the speed-torque curve is defined by the design of the motor, the exact position of the curve depending on the voltage applied. So if the voltage is changed the speed-torque curve is also changed but remains parallel to the initial curve before the voltage was changed. See figure below.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/eIjJF.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my intuitive guess is that when using the motor at a given desired operation point (desired speed and desired torque), the corresponding speed-torque curve &lt;em&gt;Cd&lt;/em&gt; has a gradient specified in the data sheet of the motor and passes through the operation point. This curve &lt;em&gt;Cd&lt;/em&gt; is obtained at a corresponding voltage &lt;em&gt;Vd&lt;/em&gt;. See diagram below.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/wlmxm.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my next guess is that in order to have the motor operate at this desired operation point, you have to set the voltage applied to the motor to &lt;em&gt;Vd&lt;/em&gt;, and apply a current &lt;em&gt;Id&lt;/em&gt; (computed using the torque and the torque constant).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now from what I read this is not what is done in DC motor controllers. These seem to only drive the motor using current and some sort of PWM magic as is shown in the following diagram by maxon.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/rRxj2.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyone knows why voltage is not used in DC motor control and only current is? I do not understand how you can set the speed if you do not modify the voltage? And what is PWM useful for?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have looked for hours over the internet and could not find anything relevant.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Antoine.&lt;/p&gt;&#xA;" OwnerUserId="763" LastActivityDate="2014-09-03T10:53:43.070" Title="DC motor control - speed-torque curve" Tags="&lt;motor&gt;&lt;control&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4493" PostTypeId="2" ParentId="4492" CreationDate="2014-09-03T10:53:43.070" Score="5" Body="&lt;p&gt;The problem is that you cannot control both the voltage and the current. You apply a voltage, and the motor draws whatever current it wants (subject to your ability to supply that current). Alternatively, you make a current controller which automatically adjusts the voltage to maintain the desired current.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An analogy would be pushing an object through honey. Voltage is equivalent to the force you're applying, and current is equivalent to the speed of the object.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The object moves at a speed which depends on how hard you're pushing, and the dimensions of the object. You cannot choose to push gently and quickly, and you cannot choose to push really hard and slowly. If you want the object to move at a certain speed, you have no choice but to adjust the amount of force you apply until it moves at that speed. If it's moving too fast, you reduce the force. Too slow, and you increase the force.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is how a motor is controlled. PWM 'magic' is just a way to control the voltage that doesn't cause the voltage controller to get really hot. (The alternative is a linear voltage source, which will get really hot).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before we get into what's happening in the motor controller, it would be worth looking at a different graph:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/yDxYC.gif&quot; alt=&quot;Motor current torque graph&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here we can see that the torque produced by the motor is purely a function of the current flowing through the windings, and it's pretty linear. If you want to produce a certain torque at the motor, all you need to do is look up on the graph for the current required, then tell your current controller to deliver this current. It does this by constantly measuring the actual current, and adjusting the voltage at the motor (using PWM magic). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now we have a very nice situation for our robot's controller. Assuming a world with no friction, motor torque is proportional to acceleration. If you can control the acceleration, then you can easily control the velocity and position of the motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The motor position controller knows the trajectory it needs from the motor, and can calculate how much torque it needs at every point during this trajectory (because it knows the acceleration at every point in the trajectory). It's also looking at the actual position of the motor, which won't quite be correct because of friction, and uses that position error to adjust the amount of torque it wants. It then converts the torque demand into a current demand, and gives that to the current controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And there you have a servo.&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2014-09-03T10:53:43.070" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="4494" PostTypeId="2" ParentId="4489" CreationDate="2014-09-03T15:08:02.040" Score="2" Body="&lt;p&gt;Inertial sensor assemblies suffer from a number of error sources, including offsets, scale factor errors and limited frequency response. With multi-axis sensors, you also need to account for alignment errors among the axes and cross-axis coupling. In addition, most of these errors are temperature-dependent.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How you deal with these errors depends very much on your application. Designers of advanced systems evaluate each of them and determine which ones can be dealt with manual calibration (e.g., axis alignment), and which ones are dynamic enough that they need be be dealt with in the Kalman filter (e.g., offsets and scale factors), adding additional terms to the system model to account for them.&lt;/p&gt;&#xA;" OwnerUserId="851" LastEditorUserId="134" LastEditDate="2014-09-03T18:37:41.307" LastActivityDate="2014-09-03T18:37:41.307" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4495" PostTypeId="2" ParentId="2807" CreationDate="2014-09-03T15:25:12.930" Score="2" Body="&lt;p&gt;Robotic path planning is a field unto itself.  There are people doing research on integrating optimal nonlinear model based predictive control with path planning, but those tools aren't really ready for prime-time yet.  A good place to get acquainted with this field would be to skim through Steven Lavalle's free path planning book:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://planning.cs.uiuc.edu/&quot; rel=&quot;nofollow&quot;&gt;http://planning.cs.uiuc.edu/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After that you should have some idea what sort of algorithm you want to learn more about, hunt for existing code, implement your own code, etc...&lt;/p&gt;&#xA;" OwnerUserId="2743" LastActivityDate="2014-09-03T15:25:12.930" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4496" PostTypeId="1" AcceptedAnswerId="4519" CreationDate="2014-09-03T15:27:34.707" Score="3" ViewCount="543" Body="&lt;p&gt;I have a 7 DOF arm that I am controlling with joint velocities computed from the Jacobian in the standard way.  For example:&#xA;$$&#xA;{\Large J} = \begin{bmatrix} J_P \\J_O&#xA;\end{bmatrix}&#xA;$$&#xA;$$&#xA;J^{\dagger} = J^T(JJ^T)^{-1}&#xA;$$&#xA;$$&#xA;\dot{q}_{trans} = J^{\dagger}_P v_{e_{trans}}&#xA;$$&#xA;$$&#xA;\dot{q}_{rot} = J^{\dagger}_O v_{e_{rot}}&#xA;$$&#xA;$$&#xA;\dot{q} = \dot{q}_{trans} + \dot{q}_{rot}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, when specifying only translational velocities, the end-end effector also rotates.  I realized that I might be able to compute how much the end-effector would rotate from the instantaneous $\dot{q}$, then put this through the Jacobian and subtract out its joint velocities.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I would do this instead of using the passed in $v_{e_{rot}}$:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;v_{e_{rot}} =  R(q) - R(q+\dot{q}_{trans})&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where $R(q)$ computes the end-effector rotation for those joint angles.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this OK to do, or am I way off base?  Is there a simpler way?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am aware that I could also just compute the IK for a point a small distance from the end-effector with no rotation, then pull the joint velocities from the delta joint angles.  And that this will be more exact.  However, I wanted to go the Jacobian route for now because I think it will fail more gracefully.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A side question, how do I compute $R(q) - R(q+\dot{q}_{trans})$ to get global end-effector angular velocity?  My attempts at converting a delta rotation matrix to Euler angles yield wrong results.  I did some quick tests and implemented the above procedure to achieve pure end-effector rotation while maintaining global position.  (This is easier because $T(q) - T(q+\dot{q}_{rot})$ is vector subtraction.)  And it did kind of work.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-09-07T11:31:35.733" Title="How to get pure end-effector translation through Jacobian?" Tags="&lt;kinematics&gt;&lt;robotic-arm&gt;&lt;jacobian&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4497" PostTypeId="2" ParentId="4488" CreationDate="2014-09-03T17:22:15.300" Score="0" Body="&lt;p&gt;I am a programmer for my schools robotics team. We use Robot C. Very similar to Java but with slight syntax differences. Specifically i work with Vex Robotics. One part of the code controls Autonomous (non user controlled) programming. Check it out!&lt;/p&gt;&#xA;" OwnerUserId="6999" LastActivityDate="2014-09-03T17:22:15.300" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4498" PostTypeId="1" CreationDate="2014-09-03T18:27:38.853" Score="1" ViewCount="76" Body="&lt;p&gt;We are working on a project where we want to sound an alarm if somebody is messing around with our Robot (e.g., the Robot is being shaken abruptly or the cameras/LIDARs are blocked).&#xA;I am using &quot;loud speakers&quot; (4.1 x 3 inch 10 Watts 8 ohm speakers), but they are not loud enough.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any small speakers or alarm systems small enough, but loud enough (closed to a car alarm) that you would recommend? &#xA;Ideally something that I can just plug into the robots computer, or interface with through a microcontroller. Either one would be fine.&lt;/p&gt;&#xA;" OwnerUserId="4269" LastActivityDate="2014-09-04T23:42:50.807" Title="Robot Loud Alarm" Tags="&lt;microcontroller&gt;&lt;ros&gt;&lt;navigation&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="4499" PostTypeId="2" ParentId="4487" CreationDate="2014-09-04T09:30:35.060" Score="2" Body="&lt;p&gt;I would look at the System &quot;PIKSI&quot; from Swift Navigation&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It uses one fixed GPS modul and one which is carried on your Robot.&#xA;Your accuracy is about 5 centimeters, which is pretty good for a GPS based system&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I haven't tried it yet, so I cannot share experience, but I think it is worth a try.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are some links:&lt;br&gt;&#xA;&lt;a href=&quot;http://swiftnav.com/piksi.html&quot; rel=&quot;nofollow&quot;&gt;http://swiftnav.com/piksi.html&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&quot;https://www.kickstarter.com/projects/swiftnav/piksi-the-rtk-gps-receiver&quot; rel=&quot;nofollow&quot;&gt;https://www.kickstarter.com/projects/swiftnav/piksi-the-rtk-gps-receiver&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="6911" LastEditorUserId="6911" LastEditDate="2014-12-08T22:20:42.323" LastActivityDate="2014-12-08T22:20:42.323" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4500" PostTypeId="2" ParentId="4474" CreationDate="2014-09-04T09:54:59.313" Score="1" Body="&lt;p&gt;It is pretty common to take a simple and cheap solenoid valve and use a PWM at the input&lt;/p&gt;&#xA;&#xA;&lt;p&gt;TI  has a pretty nice driver (DRV102) which uses a analog input and provides enough power to switch the most valves. I don't even need a MCU, just a variable resistor is enought&#xA;Then just take a cheap valve and the job is done&lt;/p&gt;&#xA;" OwnerUserId="6911" LastEditorUserId="6911" LastEditDate="2014-09-04T11:32:17.323" LastActivityDate="2014-09-04T11:32:17.323" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4501" PostTypeId="2" ParentId="4463" CreationDate="2014-09-04T10:05:30.000" Score="4" Body="&lt;p&gt;This depends on what you want to do with your copter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hovering:                              100-150 Watt/kg &lt;br&gt;&#xA;ScaleFlight:                           200-300 Watt/kg &lt;br&gt;&#xA;Some chilling acrobatic flight:        350-400 Watt/kg &lt;br&gt;&#xA;3D acrobatics                          500+ Watt/kg &lt;br&gt;&#xA;Hardcore 3D                            1000 Watt/kg &lt;br&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just take the real weight of your copter, calculate the total power and divide it by 3 (in your case)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also have a source for this but i know only a German one:&#xA;&lt;a href=&quot;http://www.heli-planet.de/index.php?section=auslegung_von_e_motoren&quot; rel=&quot;nofollow&quot;&gt;http://www.heli-planet.de/index.php?section=auslegung_von_e_motoren&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="6911" LastEditorUserId="6911" LastEditDate="2014-09-15T07:11:01.663" LastActivityDate="2014-09-15T07:11:01.663" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4502" PostTypeId="2" ParentId="1985" CreationDate="2014-09-04T10:27:43.667" Score="2" Body="&lt;p&gt;I think it is necessary to define what a landmark actually is. The other answer just defines them as markers and gives some examples. Something more formal and distinctive would be the following:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Landmarks are features which can easily be re-observed and distinguished from the environment. They are used by the robot to find out where it is (to localize itself).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Landmarks should be easily re-observable. Individual landmarks should be distinguishable from each other. Landmarks should be plentiful in the environment. Landmarks should be stationary.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This would for example exclude a simple pixel to act as a landmark, since in the real world it corresponds to an object which will become more or less pixels depending on distance. A blob would be more suitable since we just rely on finding a closed shape of a certain color (again with some threshold because colors change depending on lightening conditions and angle). In the real world the blob would be some orange sticker attached to the wall for example.&lt;/p&gt;&#xA;" OwnerUserId="7037" LastActivityDate="2014-09-04T10:27:43.667" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4503" PostTypeId="2" ParentId="4487" CreationDate="2014-09-04T10:59:11.913" Score="0" Body="&lt;p&gt;I have tried using &lt;a href=&quot;http://www.decawave.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Decawave's&lt;/a&gt; &lt;a href=&quot;http://www.decawave.com/products/dw1000&quot; rel=&quot;nofollow noreferrer&quot;&gt;DW1000&lt;/a&gt; chips. You can now get these on &lt;a href=&quot;http://www.decawave.com/products/dwm1000-module&quot; rel=&quot;nofollow noreferrer&quot;&gt;little boards&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/pSgsC.jpg&quot; alt=&quot;DW1000 board&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These can measure the distance between each other by measuring the time of flight of an Ultra-Wideband message. The precision is about 10cm, and the trueness depends on a lot of factors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You have a few as base stations, and one or more on each robot. By triangulation, you can work out the location of the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can report that the chips are insanely complex to program, and the example code they provide is a huge hairball that looks like it was written by an intern. However, they do work, and the other benefit is that you can put a data payload in the messages, so they solve your communications problems too.&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2014-09-04T10:59:11.913" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4504" PostTypeId="1" CreationDate="2014-09-04T15:21:18.723" Score="2" ViewCount="163" Body="&lt;p&gt;I am bulding a quadcopter using these compenents:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Microcontroller: Tiva C Lanchpad (ARM Cortex M4 - 80 MHz), but&#xA;running at 40MHz in my code&lt;/li&gt;&#xA;&lt;li&gt;MPU 9150 - Sensorhub TI&lt;/li&gt;&#xA;&lt;li&gt;ESC - Hobbywing Skywalker 40A&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I use the sample project comp_dcm from Tivaware and use that angles for my PID which running at 100Hz&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I test PID Control on 2 motors, but the motors oscillate as in the video i found on youtube from one guy!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=k1Ks1e67bwI&quot; rel=&quot;nofollow&quot;&gt;Quadcopter  Unbalance&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7038" LastEditorUserId="350" LastEditDate="2014-09-16T18:52:26.207" LastActivityDate="2014-09-16T18:54:32.703" Title="Quadcopter cannot balance!" Tags="&lt;quadcopter&gt;" AnswerCount="2" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="4505" PostTypeId="2" ParentId="2807" CreationDate="2014-09-04T21:16:39.093" Score="2" Body="&lt;p&gt;Please see Lavalle's book for more details, in the meantime some basic terminology....&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A path is a sequence of robot poses. A trajectory is sequence of time-pose pairs. Path planning creates a path, and control methods (classical, optimal, adaptive, etc) produce trajectories. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, when you plan your route from home to work, you come up with roads that you would take. That's your path, and you just did path planning. When you embark on the journey, you are at the particular place and the particular time. That's your trajectory. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A difference is in the toolset you used to produce path and trajectories. You planned the path based on the goal and the physical size of your car. You created a trajectory by following the path (reducing the error) and by pushing gas and brake pedals, and turning the steering wheel. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this helps.&lt;/p&gt;&#xA;" OwnerUserId="6803" LastActivityDate="2014-09-04T21:16:39.093" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4506" PostTypeId="2" ParentId="4362" CreationDate="2014-09-04T21:30:28.327" Score="3" Body="&lt;p&gt;As others mentioned, you should look into CS. In the broad strokes:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ME - build physical robots, + tangible, - might be physically demanding, - can be costly (need parts)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EE - build circuits, low level control, + less physically demanding, + tangible (now you have robot that does something), - can be costly (might need whole robots) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;CS - build robot's &quot;brain&quot;, + not physically demanding, + cheap for simulation, - less tangible (you need EE/ME folks if you want to see your algorithms on the physical robot), - experiments are expensive (for the same reason). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, robotics is multi-disciplinary field and all three are closely related with blurred lines between them. Try all and see what clicks. &lt;/p&gt;&#xA;" OwnerUserId="6803" LastActivityDate="2014-09-04T21:30:28.327" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4507" PostTypeId="2" ParentId="4498" CreationDate="2014-09-04T23:42:50.807" Score="1" Body="&lt;p&gt;If you don't mind a hacky solution then opening one of &lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/B003DWH4KG&quot; rel=&quot;nofollow&quot;&gt;these&lt;/a&gt; might be the best way to go. Just replace the button with a FET (or standard transistor) and be on your way. &#xA;If you wan't a more traditional/better looking solution, then the best thing I can recommend is getting a larger speaker/amplifier. It looks like one can buy car horns, but that would probably take more wiring than necessary. &#xA;If I were in your position, I would go with the electronic whistle. &lt;/p&gt;&#xA;" OwnerUserId="1667" LastActivityDate="2014-09-04T23:42:50.807" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4509" PostTypeId="2" ParentId="4435" CreationDate="2014-09-05T15:11:22.770" Score="4" Body="&lt;p&gt;Interesting question! Thanks for introducing me to FREAK!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The paper just says that overlapping fields &quot;increases redundancy&quot;, my interpretation is that like most detectors, FREAK is essentially scrolling a detection window over the image. If you arbitrarily break the image into non-overlapping windows then there's a good chance you'll break a useful image patch into multiple pieces. Visual examples are better than wordy explanations. Let's assume I have a smiley-detector and I'm running it on the image below. The strongest response from my smiley-detector will come from the blue window, but if I had broken the image into non-overlapping windows (the red regions) then instead of one strong face descriptor, I'd have four crappy face descriptors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/72XCN.png&quot; alt=&quot;Smiley detector example&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I said, I don't know the details of FREAK, but in general for scrolling-window-type detectors that's the reason to have overlapping windows.&lt;/p&gt;&#xA;" OwnerUserId="7043" LastActivityDate="2014-09-05T15:11:22.770" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4510" PostTypeId="1" CreationDate="2014-09-05T16:38:42.470" Score="1" ViewCount="47" Body="&lt;p&gt;What are the parameters which should be selected to choose camera for lane detection system.What parameters should be kept in mind (like picture quality,frame rate,cost e.t.c). Which camera will suit best to my application.&lt;/p&gt;&#xA;" OwnerUserId="7048" LastActivityDate="2014-09-12T01:02:44.530" Title="which type of camera should be used for detecting road lanes for good processing in matlab" Tags="&lt;cameras&gt;" AnswerCount="1" CommentCount="0" ClosedDate="2014-09-26T17:12:40.620" ContentLicense="CC BY-SA 3.0" />
  <row Id="4511" PostTypeId="1" CreationDate="2014-09-05T18:41:50.313" Score="6" ViewCount="4683" Body="&lt;p&gt;Using the Adafruit 9DoF module I Need to convert the Accel + Magneto + Gyro into Euler Angles for a motion capture application. Any hints on where to start?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Managed to get X,Y,Z when the IMU is facing upward but when that orientation changes the axes dont behave normally that is because i am not using Euler angles. So Any hints to any reference where to start?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Euler Compass App is an example of what I am trying to get to.&#xA;Get Pitch,Yaw, Roll for the IMU module irrespective to how its kept.&lt;/p&gt;&#xA;" OwnerUserId="7049" LastActivityDate="2014-09-17T10:10:47.573" Title="Euler Angles from 9DOF IMU" Tags="&lt;imu&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4512" PostTypeId="2" ParentId="4435" CreationDate="2014-09-05T19:56:42.537" Score="6" Body="&lt;p&gt;As a neuroscientist/engineer who teaches vision in a physiology course for engineers, but who hasn't read any of the FREAK docs, I'd point people to the works of David Marr, or maybe Kuffler.  I found a nice review at &lt;a href=&quot;http://www.cs.cmu.edu/afs/cs/academic/class/15883-f13/slides/cns_lee_lecture1.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Introduction to visual computation and&#xA;the primate visual system - 11MB PDF&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Retinal receptive fields (or more properly, ganglion cell receptive fields, where ganglion cells are the output layer of the retina) have a center-surround topology, where the outer portions of the receptive fields behave opposite to the central part of the visual field.  Thus, a point of light shined on the center of the field might excite the ganglion cell, and if shined on the periphery of the field it might inhibit the same cell.   This image (mostly images from a physiology text by Purves) shows this idea in a couple of ways, and also shows an interesting illusion that results from this center-surround antagonism in the lower right (the center bar is a constant shade of grey).&#xA;&lt;img src=&quot;https://i.stack.imgur.com/9X9kB.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This arrangement (approximately a difference of gaussians) has the benefit of increasing the dynamic range of the ganglion cell, and it also enhances the edges in images received by the retina.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The output from the ganglion cells projects fairly directly to the lateral geniculate nucleus, and from there to the visual cortex of the brain.  There, the roughly circular receptive fields of the ganglion cells can be joined up in interesting ways to respond to lines of contrast.  This is one of the reasons why overlapping fields can be so powerful.  From there, you can use overlapping &quot;line&quot; fields to detect x's, +'s, and so on, with increasing complexity.&#xA;&lt;img src=&quot;https://i.stack.imgur.com/Rwo8e.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="378" LastEditorUserId="2438" LastEditDate="2014-09-07T12:32:28.497" LastActivityDate="2014-09-07T12:32:28.497" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4513" PostTypeId="1" AcceptedAnswerId="4517" CreationDate="2014-09-05T21:33:11.617" Score="7" ViewCount="1185" Body="&lt;p&gt;I am trying to implement a particle filter for a robot in Java. This robot is having a range sensor. The world has 6 obstacles - 3 in the top and 3 in bottom. I am calculating the distance of the robot from each obstacle's center and then performing the same activity for each particle. Then, i calculate the difference between the robot and particles. The particles for which the difference with robot measured distance are small, i give them higher probability in resampling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, the problem with this approach as told by my friend is that I am assuming that I already know the locations of the obstacles, which make this all process useless. How should I approach it rather in a sense that I don't know the obstacles. How can the particle filter be implemented then? How will the particle filter work in case i don't know the obstacles location? An example of process would be great help. Thanks&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/VQ8tz.jpg&quot; alt=&quot;Screenshot of my application&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="6943" LastActivityDate="2014-09-09T20:12:21.290" Title="Whats the logic to implement a particle filter for a robot with range sensor?" Tags="&lt;localization&gt;&lt;particle-filter&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4514" PostTypeId="1" AcceptedAnswerId="4515" CreationDate="2014-09-06T10:01:58.103" Score="2" ViewCount="1176" Body="&lt;p&gt;i saw this maze, and tried to apply pledge algorithm on it. But i am not able to solve this maze using this algorithm. what am i missing?&#xA;i want to ask, what i am doing wrong?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PLEDGE ALGORITHM:&#xA;in both cases we don't get to exit.&#xA;&lt;img src=&quot;https://i.stack.imgur.com/rvcN1.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;you can read about these algorithms at:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Maze_solving_algorithm&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://en.wikipedia.org/wiki/Maze_solving_algorithm&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.astrolog.org/labyrnth/algrithm.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.astrolog.org/labyrnth/algrithm.htm&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7052" LastEditorUserId="7052" LastEditDate="2014-09-06T10:52:04.520" LastActivityDate="2014-09-06T10:52:04.520" Title="Pledge algorithm for maze solving robots" Tags="&lt;mobile-robot&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4515" PostTypeId="2" ParentId="4514" CreationDate="2014-09-06T10:39:32.060" Score="2" Body="&lt;p&gt;I can't quite see how you're doing the right-hand wall following. When I do it, this is what I get:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/NlnVg.png&quot; alt=&quot;Right hand wall following&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the Pledge algorithm, it's working. It found an exit to the maze! It just so happens that the exit is the same as the start. If you want it to find the other exit, you'll have to block off the top exit after you enter the maze.&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2014-09-06T10:39:32.060" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4516" PostTypeId="1" CreationDate="2014-09-06T13:52:36.440" Score="0" ViewCount="61" Body="&lt;p&gt;What are the most basic skills and components needed for creating a robot which gets two &quot;yes&quot; or &quot;no&quot; inputs with two push buttons, and goes down the defined flowchart and plays the relevant audio file each time it gets an input.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;a flowchart like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;____question 1_____________&#xA;|                         |&#xA;Yes                       No&#xA;|                         |&#xA;question 2___             question 3______&#xA;|           |             |              |&#xA;Yes         No            Yes            No&#xA;|           |             |              |&#xA;question 4  question 5    question 6     question 7&#xA;...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="7053" LastActivityDate="2014-09-07T02:54:26.583" Title="How can one create a robot which respondes to input following a flowchart?" Tags="&lt;microcontroller&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4517" PostTypeId="2" ParentId="4513" CreationDate="2014-09-06T18:07:06.223" Score="6" Body="&lt;p&gt;Your question addresses three very different problems, all of which are hard with complicated research-type algorithms.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;Localization:&lt;/strong&gt; When you have a known map of the environment and an unknown robot position. The most common algorithm for this is &lt;a href=&quot;https://en.wikipedia.org/wiki/Monte_Carlo_localization&quot;&gt;Monte Carlo Localizataion&lt;/a&gt;. This is a particle filter exactly like what you're describing.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Mapping:&lt;/strong&gt; When the robot wakes up in an unknown environment and has to build a map. Usually mapping algorithms assume that you know the location of the robot, ie from GPS or similar. I've never done pure mapping so I don't know any algorithms, but a quick google should find them.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;SLAM:&lt;/strong&gt; When you combine the two problems, an unknown environment and an unknown location the problem is called &lt;em&gt;simultaneous localization and mapping (SLAM)&lt;/em&gt;. This is very hard. There are good algorithms and good software packages to do it, but they are all still experimental and only work for certain types of environments / sensors. I highly highly recommend that you use an existing package rather than implementing SLAM yourself because it can take months of research work to tune all the parameters. I have no idea if there are SLAM packages for Java, but &lt;a href=&quot;https://www.openslam.org/&quot;&gt;openslam.org&lt;/a&gt; has a great list of state-of-the-art SLAM algorithms. Personally I've used GMapping quite a bit and I trust it not to crash my $25k robot. Be aware that you are treading in research waters.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Sorry for giving you such a long answer to a short question. My suggestion would be to assume that you know the locations of the obstacles and do a simple &lt;a href=&quot;https://en.wikipedia.org/wiki/Monte_Carlo_localization&quot;&gt;Monte Carlo Particle Filter&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="7043" LastEditorUserId="7043" LastEditDate="2014-09-06T18:12:23.403" LastActivityDate="2014-09-06T18:12:23.403" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4518" PostTypeId="2" ParentId="4516" CreationDate="2014-09-07T02:54:26.583" Score="1" Body="&lt;p&gt;It would really be more of a programming problem than an actual robotics one. Either way, you would be programming this logic into it anyways. Basically, it would be a series of if/then statements that would get you to where you need to go.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;//ask question here and get input (button press)&#xA;if( the button pressed was yes){&#xA;&#xA;    //ask the next question, and get more input, repeat this process&#xA;}else{&#xA;    //do the other button's side of the flowchart&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Using this method, you would be able to setup your flowchart's logic flow perfectly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternately, you could also use a switch/case, to get the same effect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have no idea what I'm talking about, then be more specific as to how you are controlling this thing&lt;/p&gt;&#xA;" OwnerUserId="4222" LastActivityDate="2014-09-07T02:54:26.583" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4519" PostTypeId="2" ParentId="4496" CreationDate="2014-09-07T11:31:35.733" Score="2" Body="&lt;p&gt;You don't need the positional IK to solve this problem. All that is required is, that your Jacobian is &lt;em&gt;invertible&lt;/em&gt;, i.e. keep away from sinuglar joint configurations. Consider, how the end effector's velocity is formed:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{bmatrix}&#xA;v_{trans} \\&#xA;v_{rot}&#xA;\end{bmatrix} = J(\boldsymbol{q})\cdot \boldsymbol{\dot{q}}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, if I understand correctly, you want to solve the above equation with $v_{rot} = 0$ for $\boldsymbol{\dot{q}}$:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\boldsymbol{\dot{q}} = J(\boldsymbol{q})^{-1}\begin{bmatrix} v_{trans} \\ 0 \end{bmatrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind that -- in general -- you cannot nicely separate the joints in those joints which command translation and those which command rotation of the end effector. After all, how joints are mapped to the end effector's position and angle is determined by the mechanism's structure, which dictates the Jacobian's structure (and its singularites). For example, an arm with only rotational joints (like a typical industrial robot) needs to move all its motors in some kind of &quot;compensating&quot; way to produce pure end effector translation.&lt;/p&gt;&#xA;" OwnerUserId="422" LastActivityDate="2014-09-07T11:31:35.733" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4520" PostTypeId="1" CreationDate="2014-09-08T23:20:25.963" Score="2" ViewCount="592" Body="&lt;p&gt;I am trying to build low cost and precise outdoor positioning. I explored &lt;a href=&quot;http://navspark.mybigcommerce.com/ns-raw-carrier-phase-raw-measurement-output-gps-receiver/&quot; rel=&quot;nofollow&quot;&gt;NS-RAW&lt;/a&gt; with RTKLIB - this would be doable but probably will need either a base station to get the correction data for rover or external correction data which may be a hassle. The action radius with own base station is quite limited too. This solution is not really straightforward while you have to deal with either in-house or streamed correction data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am wondering whether one would be able to substantially improve the accuracy of an ordinary (uncorrected) GPS+GLONASS device (maybe one found in a common smartphone) with stereo visual odometry. Today's consumer GNSS chips seem to have reasonably stable accuracy in the 5m range. The &lt;a href=&quot;http://www.cvlibs.net/software/libviso/&quot; rel=&quot;nofollow&quot;&gt;VISO 2&lt;/a&gt; library has a &lt;a href=&quot;http://www.cvlibs.net/datasets/kitti/eval_odometry_detail.php?&amp;amp;result=3efc7160bd72636a4b031854f4aef473121b868f&quot; rel=&quot;nofollow&quot;&gt;translation error of about 3% on 500m distance&lt;/a&gt;. The idea is to use the visual odometry for &quot;smoothing&quot; the rough GPS track. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The question is how this can be technically done in terms of SW. The input would be two tracks - one from GPS device and the other VISO 2 library. I think I need a kind of filter that will fuse the sensor data to get greater precision.&lt;/p&gt;&#xA;" OwnerUserId="1021" LastEditorUserId="1021" LastEditDate="2014-09-11T09:01:20.477" LastActivityDate="2014-09-11T09:01:20.477" Title="Correcting GPS track with visual odometry (sensor fusion)" Tags="&lt;computer-vision&gt;&lt;gps&gt;&lt;sensor-fusion&gt;&lt;odometry&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4521" PostTypeId="2" ParentId="4513" CreationDate="2014-09-09T13:42:13.067" Score="3" Body="&lt;p&gt;If you don't know the location of the obstacles and want to apply your filter, I see two solutions:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;ul&gt;&#xA;&lt;li&gt;Do a quick mapping using a simple algorithm easy to implement like the Occupancy Grid Algorithm (with this you localize the obstacles relatively to your robot)&lt;/li&gt;&#xA;&lt;li&gt;Apply your particles filter&lt;/li&gt;&#xA;&lt;li&gt;Move the robot&lt;/li&gt;&#xA;&lt;li&gt;Relocalize your robot using odometry&lt;/li&gt;&#xA;&lt;li&gt;Correct odometry errors by using another sensor measurements if possible&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Using a SLAM algorithm to simultaneously Localize and Map obstacles. The SLAM algorithms are more robust to sensors and odometry errors than the Occupancy Grid Algorithm but are more difficult to implement and need generally more CPU consumption.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;N.B: you must understand that there is no &quot;optimal&quot; solution since this problem still a very active research domain in robotics, the two solutions have advantages and drawbacks.&#xA;Consider also the speed of your processor or microcontroller.&lt;/p&gt;&#xA;" OwnerUserId="7064" LastEditorUserId="7043" LastEditDate="2014-09-09T20:12:21.290" LastActivityDate="2014-09-09T20:12:21.290" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4522" PostTypeId="2" ParentId="4487" CreationDate="2014-09-09T18:33:38.353" Score="0" Body="&lt;p&gt;You can fuse Laser mesurements (which are very precise) with GPS mesurements to navigate and localize the obstacles. I think this is the solution used by google car, but be careful: Laser finders can be very expensive.&lt;/p&gt;&#xA;" OwnerUserId="7064" LastActivityDate="2014-09-09T18:33:38.353" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4523" PostTypeId="1" CreationDate="2014-09-09T20:07:25.653" Score="6" ViewCount="285" Body="&lt;p&gt;I know that there is an extended kalman filter approach to simultaneous localization and mapping.  I'm curious if there is a SLAM algorithm that exploits the &lt;strong&gt;&lt;em&gt;ensemble&lt;/em&gt;&lt;/strong&gt; kalman filter.  A citation would be great, if at all possible.&lt;/p&gt;&#xA;" OwnerUserId="2295" LastEditorUserId="2295" LastEditDate="2014-09-10T01:05:40.797" LastActivityDate="2016-01-04T20:23:14.350" Title="Ensemble Kalman Filter SLAM" Tags="&lt;kalman-filter&gt;&lt;slam&gt;&lt;reference-request&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4524" PostTypeId="2" ParentId="4504" CreationDate="2014-09-10T02:39:40.277" Score="4" Body="&lt;p&gt;A couple possibilities come to mind,&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;PIDs need tuning, this is &lt;em&gt;relatively&lt;/em&gt; simple (entire books have been written on it)&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Basically, set the I and D terms to 0 and slowly move up the P term till it oscillates and turn it down again to just below that point&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Your code is running too slowly (this can cause all kinds of odd errors)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2014-09-10T02:39:40.277" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4525" PostTypeId="2" ParentId="4326" CreationDate="2014-09-10T02:43:46.077" Score="3" Body="&lt;p&gt;I always add 100-120% overhead (normally this just means the next bigger unit than &lt;em&gt;exactly&lt;/em&gt; what I need) but also this comes with experience, a motor that can just barely lift your load will do so very slowly.&lt;/p&gt;&#xA;" OwnerUserId="7066" LastEditorUserId="7066" LastEditDate="2017-10-24T17:10:30.747" LastActivityDate="2017-10-24T17:10:30.747" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4526" PostTypeId="1" AcceptedAnswerId="4534" CreationDate="2014-09-10T02:59:34.720" Score="2" ViewCount="434" Body="&lt;p&gt;I am tuning PID for quadcopter, the problem i have is that with different base Throttle, i seems that i have to adjust different PID gains in order for the quadcopter to balance! &lt;/p&gt;&#xA;" OwnerUserId="7038" LastActivityDate="2014-10-15T06:50:11.000" Title="PID Tuning Quadcopter Problem" Tags="&lt;pid&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4528" PostTypeId="2" ParentId="4440" CreationDate="2014-09-10T11:25:20.780" Score="1" Body="&lt;p&gt;Let's asume that our 2D occupancy grid map is called G. &lt;br /&gt;&#xA;Programmatically, G is a 2D array of float numbers between -1 and 1 called evidences.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, to update the map, we need to :&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;read the new laser mesurements&lt;/li&gt;&#xA;&lt;li&gt;calculate the distances of obstacles from the robot&lt;/li&gt;&#xA;&lt;li&gt;re-calculate the evidence values of G, and then&lt;/li&gt;&#xA;&lt;li&gt;replace the old values by the new evidence values.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;If we want to find the changes in the environment, we can simply store the old values of G in a temporary array before re-calculating the new evidence values (step 3).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore, the changes can be found by substracting the two arrays : C = G - old_G. &lt;br /&gt;&#xA;In this case: C is a 2D array representing the differences between the two grid maps, so 0 values of C represent no changes in the environement, while other values represent either new or moved objects.&lt;/p&gt;&#xA;" OwnerUserId="7064" LastActivityDate="2014-09-10T11:25:20.780" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4530" PostTypeId="2" ParentId="1750" CreationDate="2014-09-10T16:53:01.633" Score="1" Body="&lt;p&gt;I too posted the same question here..:) To calculater the output power required check this link: &lt;a href=&quot;http://www.wired.com/2014/05/modeling-the-thrust-from-a-quadcopter/&quot; rel=&quot;nofollow&quot;&gt;http://www.wired.com/2014/05/modeling-the-thrust-from-a-quadcopter/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The same power can be applied to tricopter also..&lt;/p&gt;&#xA;" OwnerUserId="7005" LastActivityDate="2014-09-10T16:53:01.633" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4531" PostTypeId="1" CreationDate="2014-09-10T16:56:39.163" Score="3" ViewCount="925" Body="&lt;p&gt;I am planning to buy an ESC for my tricopter setup. What is the purpose of programming an ESC? I am cost effective and is it really necessary that I should necessarily buy a programming card to program my ESC for my model?&lt;/p&gt;&#xA;" OwnerUserId="7005" LastEditorUserId="350" LastEditDate="2014-09-16T18:50:40.937" LastActivityDate="2014-09-16T18:50:40.937" Title="Purpose of programming an ESC" Tags="&lt;esc&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4532" PostTypeId="2" ParentId="4531" CreationDate="2014-09-10T20:20:27.667" Score="2" Body="&lt;p&gt;An Electronic Speed Controller can be used in various situations, and rather than make 20 different speed controllers for every different situation, they make one which is programmable. The options you have vary depending on the ESC you buy, but typical ones include:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Battery types (NiMh, LiPo)&lt;/li&gt;&#xA;&lt;li&gt;Different battery voltages&lt;/li&gt;&#xA;&lt;li&gt;Cut-off voltages&lt;/li&gt;&#xA;&lt;li&gt;Whether or not it should use active breaking&lt;/li&gt;&#xA;&lt;li&gt;What to do when it's told to reverse&lt;/li&gt;&#xA;&lt;li&gt;PWM frequency&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/h21d5.jpg&quot; alt=&quot;ESC Programming Card&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's annoying to have to buy a programming card, but this is one way they keep down the cost of the ESC. Rather than have all of these buttons and LEDs on every ESC, you just pay for them once.&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2014-09-10T20:20:27.667" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4533" PostTypeId="1" CreationDate="2014-09-10T21:58:56.923" Score="0" ViewCount="1101" Body="&lt;p&gt;I am looking for a 12V Dual Motor Controller that can supply at least 5A per channel for two 12V motors, and that can be used with an arduino. Do you know of any product with those specs?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="4269" LastActivityDate="2014-09-14T06:39:53.503" Title="12V Arduino Dual Bridge to supply at least 5A" Tags="&lt;arduino&gt;&lt;motor&gt;&lt;ros&gt;&lt;h-bridge&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ClosedDate="2014-09-26T17:13:07.473" ContentLicense="CC BY-SA 3.0" />
  <row Id="4534" PostTypeId="2" ParentId="4526" CreationDate="2014-09-10T22:06:12.553" Score="3" Body="&lt;p&gt;Well, the optimal PID parameters are an estimation that should do best at all situations. It's possible that you just need to find better PID parameters. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But it could also be a hardware problem:&#xA;It helps to let the quad hover a bit and figure out if it's drifting in a specific direction - That should point you to the culprit, or at least to the culprit 'leg'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The issues to check, in my opinion, will be:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;ESC calibration isn't the same on all motors - The ESCs do not&#xA;react the same to the same throttle level. Recalibrating the ESCs&#xA;(preferably at the same time) should fix that. &lt;/li&gt;&#xA;&lt;li&gt;The props could be unbalanced - Check that the props are in a good condition and         don't have any deformations.&lt;/li&gt;&#xA;&lt;li&gt;Maybe one of the ESCs is acting up? Try&#xA;    measuring the current usage of each ESC changing the throttle from&#xA;    low to high. It should be about the same on every motor.&lt;/li&gt;&#xA;&lt;li&gt;Check for loose stuff on the quad - Things tend to&#xA;    resonate in different throttle levels causing the quad to change its&#xA;    behaviour.&lt;/li&gt;&#xA;&lt;li&gt;Try switching between parts. I'd go with switching ESC between sides and checking if it makes a difference in the drift direction.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Lastly, it could be (not likely however) a problem in the PID implementation. Which flight controller are you using?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;ESC calibration&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ESCs translate the signal coming from your receiver (PWM signal usually) to 3-phase voltage given to the motor. PWM signal is basically a square wave with changing duty cycle.&#xA;&lt;img src=&quot;https://i.stack.imgur.com/nibGx.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The duty cycle (D.C.) is really just the value the receiver receives from the RC Transmitter (the remote). Since each receiver &amp;amp; transmitter are different, the received value isn't always going from 0% to 100%. It can sometimes go from 20% to 90%, or in worse cases 40% to 60%, etc. Usually low D.C. means low channel value (low throttle in our case), but Futaba tend to reverse that (high D.C. = low channel value). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what you need to do is to calibrate your ESCs to know the dynamic range of your throttle (how much D.C is low and how much is high). Check the ESC manual - it should explain how to do that. Usually it's something like:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Put throttle all the way up&lt;/li&gt;&#xA;&lt;li&gt;Connect power to ESC&lt;/li&gt;&#xA;&lt;li&gt;Wait for 3 beeps (or something)&lt;/li&gt;&#xA;&lt;li&gt;Lower throttle until lowest value&lt;/li&gt;&#xA;&lt;li&gt;Wait for 3 beeps&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;But it differs from ESC to ESC&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: Ran into a another explanation:&#xA;&lt;a href=&quot;https://robotics.stackexchange.com/questions/4531/purpose-of-programming-an-esc&quot;&gt;Purpose of programming an ESC&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="6944" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2014-09-11T08:04:30.997" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="4535" PostTypeId="2" ParentId="4326" CreationDate="2014-09-10T22:08:21.883" Score="5" Body="&lt;p&gt;When selecting an actuator, you need to consider not just the force but also the power.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Power = force x speed&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The faster you need to lift the lever, the more power you'll need. Companies like Maxon provide detailed graphs showing exactly how much torque you can expect at various speeds for their motors. Other companies may just state the motor's wattage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/WatDr.png&quot; alt=&quot;Maxon torque graph&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will also need to consider acceleration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Force = mass x acceleration&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you're lifting your lever, you need to add its weight and the force required for acceleration. If you want to maintain maximum acceleration right up to the maximum speed, then the total power is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;power = (weight + mass x acceleration) x maxspeed&lt;/p&gt;&#xA;&#xA;&lt;p&gt;or:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;power = mass x (9.8+acceleration) x maxspeed&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next check the efficiency of the gears. Again, companies like Maxon specify the gear efficiency, so divide your calculated power by the gear efficiency. If you're unsure of the efficiency, then assume it's about 60% efficient.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lastly, you need to estimate how efficient the rest of your mechanism is. A tendon driven robot might be only 50% efficient in its power transmission, whereas attaching your lever directly to the motor shaft will be 100% efficient.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After all that, if you allow another 20% - 50% power on top of that, you should be OK.&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2014-09-10T22:08:21.883" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4536" PostTypeId="1" CreationDate="2014-09-11T06:57:23.030" Score="5" ViewCount="769" Body="&lt;p&gt;I'm building a control system with a Parrot AR 2.0 drone where I have access to thrust controls for up/down (z), left/right (y), forward/backwards (x), turn left and turn right (yaw) through a Ruby library on my computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The goal of the system is to keep the drone a particular distance from and parallel to a wall while moving in the up/down and left/right directions. We have added two sonar distance sensors to the left and right forward props. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main problem I am having is figuring out how the two distance sensors equal a yaw reading (ψ) so I can feed that into the PID and then take action on thrust to the turn left or right for correction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe just getting some help with the conversion from two distances to the yaw angle would be a big help, but any thoughts on the PID are greatly appreciated too since it is my first time working with it.&lt;/p&gt;&#xA;" OwnerUserId="7073" LastActivityDate="2014-09-11T09:48:05.000" Title="Yaw angle calculation for drone PID from two distance sensors" Tags="&lt;sensors&gt;&lt;quadcopter&gt;&lt;pid&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4537" PostTypeId="2" ParentId="4536" CreationDate="2014-09-11T09:48:05.000" Score="2" Body="&lt;p&gt;This sounds like pretty simple geometry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/ExLTp.png&quot; alt=&quot;Quadcopter Yaw&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The two ultrasonic sensors are reporting distances L1 and L2. The Yaw angle can then be calculated:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;a = atan( (L1-L2) / W )&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2014-09-11T09:48:05.000" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4538" PostTypeId="2" ParentId="4533" CreationDate="2014-09-11T11:02:23.630" Score="1" Body="&lt;p&gt;This one may be a nice board for you&#xA;&lt;a href=&quot;http://www.pololu.com/product/2502&quot; rel=&quot;nofollow&quot;&gt;http://www.pololu.com/product/2502&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;they say it is unavailable, but you may find something..&lt;/p&gt;&#xA;&#xA;&lt;p&gt;or just take two of them:&#xA;&lt;a href=&quot;http://www.pololu.com/product/1451&quot; rel=&quot;nofollow&quot;&gt;http://www.pololu.com/product/1451&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="6911" LastActivityDate="2014-09-11T11:02:23.630" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4540" PostTypeId="1" CreationDate="2014-09-11T16:48:28.160" Score="3" ViewCount="184" Body="&lt;p&gt;I have &lt;a href=&quot;http://www.allsensor.in/ProductDetails.aspx?CID=qcj0eWfX11k%3d&amp;amp;Counter=0&amp;amp;SEOType=BSuwhmB9Ll4%3d&amp;amp;PID=OlyqUUQ3npg%3d&amp;amp;CType=ZgDIC937E8s%3d&quot; rel=&quot;nofollow&quot;&gt;an RSL Line Sensor&lt;/a&gt; which is designed to distinguish black and white lines. It detects white surface and gives me digital &lt;em&gt;1&lt;/em&gt; as output, with &lt;em&gt;0&lt;/em&gt; in case of black, but the surface needs to be close to it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As it uses infra-red-sensors, I wanted to use this sensor as a proximity sensor, to tell me if there is a white surface &lt;em&gt;near&lt;/em&gt; it. Is it possible to do this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think the only problem here is that we need to increase it's range of giving &lt;em&gt;1&lt;/em&gt;. Currently, it gives &lt;em&gt;1&lt;/em&gt; only when white surface is too close to the sensors. I want 1 even if the white surface is there at a bit more distance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also there is an adjustable screw there to adjust something, under which POT is written. I am working with an Arduino.&lt;/p&gt;&#xA;" OwnerUserId="7052" LastEditorUserId="37" LastEditDate="2014-10-09T16:53:42.493" LastActivityDate="2015-06-06T23:29:50.187" Title="Can we use this line sensor as a proximity sensor?" Tags="&lt;arduino&gt;&lt;mobile-robot&gt;&lt;sensors&gt;" AnswerCount="2" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="4541" PostTypeId="2" ParentId="4510" CreationDate="2014-09-12T01:02:44.530" Score="0" Body="&lt;p&gt;This depends on several things, mostly what your processing the images with, if you have a 1080p camera running at 60hz and your using a raspberry pie, that is clearly overkill. I would recommend you benchmark your platform of choice to come up with your ideal resolution to fps, and based on that select your resolution. The other factor will be focal length, witch  determines how wide an image your camra picks up (see the &lt;a href=&quot;http://en.wikipedia.org/wiki/Angle_of_view#Lens_types_and_effects&quot; rel=&quot;nofollow&quot;&gt;wikipedia article&lt;/a&gt;) having a lower focal length will allow you to pick up objects more to the left or right, but the only downside will be he bigger it is the less pixels your tracking target will pick up witch can become a problem as your resolution drops.&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2014-09-12T01:02:44.530" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4542" PostTypeId="1" CreationDate="2014-09-12T10:39:54.960" Score="1" ViewCount="110" Body="&lt;p&gt;How to compute the angular and linear velocities Quaternions? I am new to this area and although I have studied the algebra I am unable to understand how to compute the velocities.&lt;/p&gt;&#xA;" OwnerUserId="7077" LastEditorUserId="11582" LastEditDate="2016-07-19T01:58:26.080" LastActivityDate="2016-07-19T01:58:26.080" Title="Velocity derivatives using Quaternions" Tags="&lt;kinematics&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ClosedDate="2014-12-01T09:40:03.850" ContentLicense="CC BY-SA 3.0" />
  <row Id="4545" PostTypeId="1" AcceptedAnswerId="4606" CreationDate="2014-09-12T19:18:33.887" Score="1" ViewCount="6017" Body="&lt;p&gt;I'm currently building a hexapod bot, composed with an &lt;a href=&quot;http://arduino.cc/en/Main/arduinoBoardMega&quot; rel=&quot;nofollow&quot;&gt;Arduino Mega&lt;/a&gt; board and an &lt;a href=&quot;http://www.lynxmotion.com/p-395-ssc-32-servo-controller.aspx&quot; rel=&quot;nofollow&quot;&gt;USB SSC-32&lt;/a&gt; (from &lt;a href=&quot;http://www.lynxmotion.com/&quot; rel=&quot;nofollow&quot;&gt;Lynxmotion&lt;/a&gt;).&#xA;But now I want add a PS3 wireless controller to move my hexapod, I have made some search but nothing realy interesting. Maybe the &lt;a href=&quot;http://www.servoshock.com/&quot; rel=&quot;nofollow&quot;&gt;Servoshock module&lt;/a&gt; but it seems works only with the ServoshockShield, a kind of Arduino card with Servo output. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Can I use the ServoShock module alone ? &lt;/li&gt;&#xA;&lt;li&gt;Can I connect it with Rx/Tx port of the Arduino Mega board ?&lt;/li&gt;&#xA;&lt;li&gt;Do you have other solution for me ? Board with documentation and sources codes ?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Thank you all&lt;/p&gt;&#xA;" OwnerUserId="7022" LastEditorUserId="7022" LastEditDate="2014-09-21T18:59:36.987" LastActivityDate="2014-10-22T00:17:17.357" Title="How to control an Arduino Board with wireless PS3 controler?" Tags="&lt;arduino&gt;&lt;wireless&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4546" PostTypeId="1" CreationDate="2014-09-13T06:54:06.830" Score="0" ViewCount="1539" Body="&lt;p&gt;I am designing a badminton robot but i am very confused about mechanisms needed for a badminton robot and various calculations needed for millisecond response.I am also confused about calculations needed about the forces needed and efficient angles needed for hitting the shuttlecock.Please suggest me some ideas or suggestions needed for construction of badminton robot.&lt;/p&gt;&#xA;" OwnerUserId="4090" LastActivityDate="2015-04-18T03:47:09.140" Title="What are the calculations for a badminton robot and mechanisms?" Tags="&lt;sensors&gt;&lt;design&gt;&lt;mechanism&gt;&lt;actuator&gt;&lt;servomotor&gt;" AnswerCount="2" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="4548" PostTypeId="2" ParentId="2987" CreationDate="2014-09-14T04:33:33.447" Score="1" Body="&lt;p&gt;I've figured out the problem a while ago. It turns out to be a power supply problem. I'm using a computer power supply (Antec HCG 850M) with the under voltage &amp;amp; over current protections removed, so it doesn't trip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There was also another huge problem I didn't mention. The motor was randomly stopping and starting several times a second.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then I saw that the electronic speed controller I'm using only had a 330uF filter capacitor. It was also was very hot to touch, despite being a low resistance, electrolytic polymer capacitor. After replacing it with a similar 1000uF capacitor, the problems are gone.&lt;/p&gt;&#xA;" OwnerUserId="710" LastActivityDate="2014-09-14T04:33:33.447" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4549" PostTypeId="2" ParentId="1927" CreationDate="2014-09-14T05:53:51.590" Score="0" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I don't know how to calculate toque in this kind of vertical setup.&#xA;  All information i found on the web always lead me to the torque&#xA;  calculation for motor driving wheels(which is simply the tangential&#xA;  force multiply the moment arm).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The torque is the tangential force multiplied by the moment arm, no matter what the orientation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Say you are trying to spin up something like a 0.5 kg bicycle wheel that is 1 m in diameter.&#xA;At 1 rpm, the tread has a linear velocity of pi&lt;em&gt;r&lt;/em&gt;(1 revolution/60 seconds) =~= 0.026 m/s.&#xA;To get this up to speed from a standing start in, say, 1/60 of a second requires an acceleration of every particle of the rim of a = velocity/time =~= (0.026 ms/s)/( 1/60 second ) =~= 1.6 m/s^2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since practically all of the mass of a bicycle wheel is at the rim, the moment arm of that 1 m diameter wheel is 0.5 m. (Other kinds of objects have more mass nearer the center; for the same total weight and diameter, they have lower &lt;a href=&quot;http://en.wikipedia.org/wiki/moment_of_inertia&quot; rel=&quot;nofollow noreferrer&quot;&gt;moment of inertia&lt;/a&gt; and so require less torque).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, as always, F = ma, so in this case F = (0.5 kg)(1.6 m/s^2) = 0.8 kg*m/2^2 = 0.8 N.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, as always, the torque is the tangential force multiplied by the moment arm, or in this case t = r&lt;em&gt;F = (0.5 m)&lt;/em&gt;(0.8 N) = 0.4 Nm = 40 Ncm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The actual torque required would be somewhat more to overcome static friction, dynamic friction, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you were willing to gradually bring it up to speed over a longer time, then you would require less torque.&#xA;(Lots of standard NEMA 17 motors can easily supply 20 Ncm of &lt;a href=&quot;http://reprap.org/wiki/stepper_torque&quot; rel=&quot;nofollow noreferrer&quot;&gt;torque&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once it is up to speed, the motor only needs to supply enough torque to overcome the dynamic friction in order to maintain that speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Motors are generally designed to supply torque, not handle heavy radial-thrust loads.&#xA;If the stuff you want to turn is unbalanced,&#xA;spinning it at high speeds causes radial forces (&quot;centrifugal force&quot;, aka &quot;unbalanced washing-machine effect&quot;).&#xA;As OricTosh pointed out,&#xA;this has no effect on the torque required from the motor or the energy required to turn it;&#xA;but you may need to either&#xA;(a) add more weight on the other side to balance it, or&#xA;(b) add a &lt;a href=&quot;http://en.wikipedia.org/wiki/bearing_(mechanical)&quot; rel=&quot;nofollow noreferrer&quot;&gt;bearing&lt;/a&gt; or two to support those radial forces, or&#xA;both;&#xA;to prevent those loads from pushing the motor rotor &quot;sideways&quot; enough to cause damage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Motors are generally designed to supply torque, not to handle heavy axial-thrust loads.&#xA;If you have a heavy load on a vertical axis, you might need to&#xA;support that load with a &#xA;&lt;a href=&quot;http://en.wikipedia.org/wiki/thrust_bearing&quot; rel=&quot;nofollow noreferrer&quot;&gt;thrust bearing&lt;/a&gt;&#xA;(perhaps on the &quot;other&quot; end of a double-shaft motor --&#xA;&lt;a href=&quot;https://robotics.stackexchange.com/questions/4394/single-shaft-vs-double-shaft-motors&quot;&gt;Single-shaft vs Double-shaft motors&lt;/a&gt;&#xA;)&#xA;to prevent the load from pushing the axle through the motor enough to cause damage.&lt;/p&gt;&#xA;" OwnerUserId="187" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2014-09-14T05:53:51.590" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4550" PostTypeId="2" ParentId="4533" CreationDate="2014-09-14T06:39:53.503" Score="0" Body="&lt;p&gt;Yes, there are several products that can independently drive two DC motors at 12 V and 5 A, which can be used with an Arduino.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.opencircuits.com/motor_driver&quot; rel=&quot;nofollow noreferrer&quot;&gt;OpenCircuits has a list of motor drivers&lt;/a&gt;, some of which meet your criterial.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.sparkfun.com/categories/179&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sparkfun carries many motor drivers&lt;/a&gt; that meet your criteria, including the &quot;Monster Moto Shield&quot;, the &quot;T'Rex Robot/Motor Controller&quot;, and several Pololu drivers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.robotpower.com/catalog/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Robot Power carries many motor drivers&lt;/a&gt; that meet your criteria.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Have you heard that shopping questions are &lt;a href=&quot;https://robotics.stackexchange.com/help/on-topic&quot;&gt;off-topic&lt;/a&gt; on this site?&lt;/p&gt;&#xA;" OwnerUserId="187" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2014-09-14T06:39:53.503" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4553" PostTypeId="2" ParentId="4546" CreationDate="2014-09-15T12:10:48.903" Score="6" Body="&lt;p&gt;In short, what you are trying to do is well beyond the capabilities of top robotics research labs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, here is a short list of general areas you need to look into:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Robotic arm dynamics (to swing the racket)&lt;/li&gt;&#xA;&lt;li&gt;Vision processing to track the shuttle&lt;/li&gt;&#xA;&lt;li&gt;Shuttle dynamics to predict shuttle path (this is not well studying so you would most likely have to create new math here)&lt;/li&gt;&#xA;&lt;li&gt;Nonlinear control control the arm as well as algorithms to move the robot where it needs to go.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Note that a wheeled robot will probably not do well because it can't move side-to-to.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2014-09-15T12:10:48.903" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4554" PostTypeId="1" CreationDate="2014-09-15T12:11:22.003" Score="2" ViewCount="183" Body="&lt;p&gt;I have to use kinect for an application. However,  the final work must be mobile: it means no computer. Consequently, I thought using a microcontroller to handle data from kinect. But is it possible? My job is mesuring some points of a body (axis X, Y, Z) and get back these coordinates. I don't know if I'm enough accurate. &lt;/p&gt;&#xA;" OwnerUserId="7090" LastEditorUserId="350" LastEditDate="2014-09-16T18:17:31.197" LastActivityDate="2014-10-16T21:27:08.357" Title="Using kinect for medical application but without computer. Is it possible?" Tags="&lt;microcontroller&gt;&lt;kinect&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4555" PostTypeId="1" AcceptedAnswerId="4564" CreationDate="2014-09-15T13:51:32.273" Score="2" ViewCount="190" Body="&lt;p&gt;I have made a RC robot from a wheelchair and I'm planning to attach a snow plow. I'm wondering if there is any mechanism that would be able to lift the plow when reversing. &#xA;I have only 2 channel transmitter so I can't control the plow's movement through it so I was thinking of some mechanical lift that triggers when reversing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do you guys know about something I could use for it?&#xA;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="7091" LastActivityDate="2015-04-15T07:00:52.023" Title="Reverse lift mechanism" Tags="&lt;wheeled-robot&gt;&lt;mechanism&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4557" PostTypeId="2" ParentId="4540" CreationDate="2014-09-15T18:41:47.573" Score="0" Body="&lt;p&gt;The sensors which you using as got just an comparator with a variable resistor to adjust the threshold to differentiate black and white line... Sensors with filters can you configured to find the distance from an obstacle which can be used as a proximity sensors .. Anyways proximity sensors are IR based sensors (you can verify using phones camera)... &lt;/p&gt;&#xA;" OwnerUserId="7096" LastActivityDate="2014-09-15T18:41:47.573" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4558" PostTypeId="1" AcceptedAnswerId="4691" CreationDate="2014-09-15T21:34:28.627" Score="2" ViewCount="827" Body="&lt;p&gt;I have a big problem trying to stabilize a quadrotor with a PD controller.&#xA;The model and the program has been written in C++ and the model dynamic has been taken from this source in internet: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Well, in my code I wrote the model like in the eq. system ( see eq. 3.30 on page 21):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/* Calculate the acceleration about all 6 axis */&#xA;body_pos_current_.x_dot_2 =  ( thrust_.total / masse_ ) * ( sin( body_ang_current_.theta ) * cos( body_ang_current_.phi ) * cos( body_ang_current_.psi ) + sin( body_ang_current_.psi ) * cos( body_ang_current_.phi ) );&#xA;body_pos_current_.y_dot_2 =  ( thrust_.total / masse_ ) * ( sin( body_ang_current_.theta ) * sin( body_ang_current_.psi ) * cos( body_ang_current_.phi ) - cos( body_ang_current_.psi ) * sin( body_ang_current_.phi ) * cos( body_ang_current_.psi ) );&#xA;body_pos_current_.z_dot_2 =  ( thrust_.total / masse_ ) * ( cos( body_ang_current_.theta ) * cos( body_ang_current_.phi ) ) - 9.81;&#xA;&#xA;body_ang_current_.phi_dot_2   = ( torque_.phi   / Jxx_ );&#xA;body_ang_current_.theta_dot_2 = ( torque_.theta / Jyy_ );&#xA;body_ang_current_.psi_dot_2   = ( torque_.psi   / Jzz_ );&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where &lt;code&gt;body_ang_current.&amp;lt;angle&amp;gt;&lt;/code&gt; and &lt;code&gt;body_pos_current_.&amp;lt;position&amp;gt;&lt;/code&gt; are structures defined in a class to store position, velocities and accelerations of the model given the 4 motor velocities about all 3 axis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\large \cases{ &#xA; \ddot X = ( \sin{\psi} \sin{\phi} + \cos{\psi} \sin{\theta} \cos{\phi}) \frac{U_1}{m}  \cr&#xA; \ddot Y = (-\cos{\psi} \sin{\phi} + \sin{\psi} \sin{\theta} \cos{\phi}) \frac{U_1}{m} \cr&#xA; \ddot Z = (-g + (\cos{\theta} \cos{\phi}) \frac{U_1}{m} \cr&#xA; \dot p  = \frac{I_{YY} - I_{ZZ}}{I_{XX}}qr - \frac{J_{TP}}{I_{XX}} q \Omega + \frac{U_2}{I_{XX}} \cr&#xA; \dot q  = \frac{I_{ZZ} - I_{XX}}{I_{YY}}pr - \frac{J_{TP}}{I_{YY}} p \Omega + \frac{U_3}{I_{YY}} \cr&#xA; \dot r  = \frac{I_{XX} - I_{YY}}{I_{ZZ}}pq - \frac{U_4}{I_{ZZ}}&#xA;}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once I get the accelerations above I m going to integrate them to get velocities and positions as well:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/* Get position and velocities from accelerations */&#xA;body_pos_current_.x_dot = body_pos_current_.x_dot_2 * real_duration + body_pos_previous_.x_dot;&#xA;body_pos_current_.y_dot = body_pos_current_.y_dot_2 * real_duration + body_pos_previous_.y_dot;&#xA;body_pos_current_.z_dot = body_pos_current_.z_dot_2 * real_duration + body_pos_previous_.z_dot;&#xA;&#xA;body_ang_current_.phi_dot   = body_ang_current_.phi_dot_2   * real_duration + body_ang_previous_.phi_dot;&#xA;body_ang_current_.theta_dot = body_ang_current_.theta_dot_2 * real_duration + body_ang_previous_.theta_dot;&#xA;body_ang_current_.psi_dot   = body_ang_current_.psi_dot_2   * real_duration + body_ang_previous_.psi_dot;&#xA;&#xA;body_pos_current_.x = 0.5 * body_pos_current_.x_dot_2 * pow( real_duration, 2 ) + ( body_pos_previous_.x_dot * real_duration ) + body_pos_previous_.x;&#xA;body_pos_current_.y = 0.5 * body_pos_current_.y_dot_2 * pow( real_duration, 2 ) + ( body_pos_previous_.y_dot * real_duration ) + body_pos_previous_.y;&#xA;body_pos_current_.z = 0.5 * body_pos_current_.z_dot_2 * pow( real_duration, 2 ) + ( body_pos_previous_.z_dot * real_duration ) + body_pos_previous_.z;&#xA;&#xA;body_ang_current_.phi   = 0.5 * body_ang_current_.phi_dot_2   * pow( real_duration, 2 ) + ( body_ang_previous_.phi_dot   * real_duration ) + body_ang_previous_.phi;&#xA;body_ang_current_.theta = 0.5 * body_ang_current_.theta_dot_2 * pow( real_duration, 2 ) + ( body_ang_previous_.theta_dot * real_duration ) + body_ang_previous_.theta;&#xA;body_ang_current_.psi   = 0.5 * body_ang_current_.psi_dot_2   * pow( real_duration, 2 ) + ( body_ang_previous_.psi_dot   * real_duration ) + body_ang_previous_.psi;&#xA;&#xA;/* Copy the new value into the previous one (for the next loop) */&#xA;body_pos_previous_.x = body_pos_current_.x;&#xA;body_pos_previous_.y = body_pos_current_.y;&#xA;body_pos_previous_.z = body_pos_current_.z;&#xA;&#xA;body_pos_previous_.x_dot = body_pos_current_.x_dot;&#xA;body_pos_previous_.y_dot = body_pos_current_.y_dot;&#xA;body_pos_previous_.z_dot = body_pos_current_.z_dot;&#xA;&#xA;body_ang_previous_.phi   = body_ang_current_.phi;&#xA;body_ang_previous_.theta = body_ang_current_.theta;&#xA;body_ang_previous_.psi   = body_ang_current_.psi;&#xA;&#xA;body_ang_previous_.phi_dot   = body_ang_current_.phi_dot;&#xA;body_ang_previous_.theta_dot = body_ang_current_.theta_dot;&#xA;body_ang_previous_.psi_dot   = body_ang_current_.psi_dot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The model seems to work well but, as like reported in many papers, is very unstable and needs some controls.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first approach for me was to create a controller (PD) to keep the height constant without moving the quadcopter, but just putting a value (for example 3 meter) and see how it reacts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here the small code I tried:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/* PD Controller */&#xA;double e = ( 3.0 - body_pos_current_.z );  // 3.0 is just a try value!!!&#xA;thrust_.esum = thrust_.esum + e;&#xA;thrust_.total = 1.3 * e + 0.2 * real_duration * thrust_.esum;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The problem, as you can see here in this video, is that the copter starts falling down into the ground and not reaching the desired altitude (3.0 meters).&#xA;Then it comes back again again like a spring, which is not damped.&#xA;I tried already many different value for the PD controller but it seems that it doesn't affect the dynamic of the model.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another strange thing is that it goes &lt;em&gt;always&lt;/em&gt; to a negative point under the ground, even if I change the desired height (negative or positive).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What s wrong in my code? &#xA;Could you me please point to some documents or code which is understandable and well documented to start?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt;&#xA;Many thanks to your suggestion.&#xA;Hi was really surprise to know, that my code had lots of potential problems and was not very efficient. So I elaborate the code as your explanation and I implementers a RK4 for the integration. After I ve read those articles: &lt;a href=&quot;http://gafferongames.com/game-physics/integration-basics/&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;http://buttersblog.com/runge-kutta/&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt; I got an idea about RK and its vantage to use it in simulations and graphics PC.&#xA;As an example I rewrote again the whole code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/* Calculate the acceleration about all 6 axis */&#xA;pos_.dVel.x =  ( ( thrust_.total / masse_ ) * ( -sin( body_position_.angle.theta ) * cos( body_position_.angle.phi ) * cos( body_position_.angle.psi ) - sin( body_position_.angle.phi ) * sin( body_position_.angle.psi ) ) );&#xA;pos_.dVel.y =  ( ( thrust_.total / masse_ ) * ( sin( body_position_.angle.phi ) * cos( body_position_.angle.psi ) - cos( body_position_.angle.phi ) * sin( body_position_.angle.theta ) * sin( body_position_.angle.psi ) ) );&#xA;pos_.dVel.z =  ( ( thrust_.total / masse_ ) * ( -cos( body_position_.angle.phi ) * cos( body_position_.angle.theta ) ) - 9.81 );&#xA;&#xA;pos_.dOmega.phi   = ( torque_.phi   / Jxx_ );&#xA;pos_.dOmega.theta = ( torque_.theta / Jyy_ );&#xA;pos_.dOmega.psi   = ( torque_.psi   / Jzz_ );&#xA;&#xA;/* Get position and velocities from accelerations */&#xA;body_position_ = RKIntegrate( body_position_, real_duration );&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;which is much more clear and easy to debug. Here some useful functions I implemented:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;QuadrotorController::State QuadrotorController::evaluate( const State &amp;amp;initial, const Derivative &amp;amp;d, double dt ) {&#xA;&#xA;State output;&#xA;output.position.x = initial.position.x + d.dPos.x * dt;&#xA;output.position.y = initial.position.y + d.dPos.y * dt;&#xA;output.position.z = initial.position.z + d.dPos.z * dt;&#xA;&#xA;output.velocity.x = initial.velocity.x + d.dVel.x * dt;&#xA;output.velocity.y = initial.velocity.y + d.dVel.y * dt;&#xA;output.velocity.z = initial.velocity.z + d.dVel.z * dt;&#xA;&#xA;output.angle.phi   = initial.angle.phi   + d.dAngle.phi   * dt;&#xA;output.angle.theta = initial.angle.theta + d.dAngle.theta * dt;&#xA;output.angle.psi   = initial.angle.psi   + d.dAngle.psi   * dt;&#xA;&#xA;output.omega.phi   = initial.omega.phi   + d.dOmega.phi   * dt;&#xA;output.omega.theta = initial.omega.theta + d.dOmega.theta * dt;&#xA;output.omega.psi   = initial.omega.psi   + d.dOmega.psi   * dt;&#xA;&#xA;return output;&#xA;&#xA;};&#xA;&#xA;QuadrotorController::Derivative QuadrotorController::sampleDerivative( double dt, const State &amp;amp;sampleState ) {&#xA;&#xA;Derivative output;&#xA;&#xA;output.dPos = sampleState.velocity;&#xA;output.dVel.x = pos_.dVel.x;&#xA;output.dVel.y = pos_.dVel.y;&#xA;output.dVel.z = pos_.dVel.z;&#xA;&#xA;output.dAngle = sampleState.omega;&#xA;output.dOmega.phi   = pos_.dOmega.phi;&#xA;output.dOmega.theta = pos_.dOmega.theta;&#xA;output.dOmega.psi   = pos_.dOmega.psi;&#xA;&#xA;return output;&#xA;&#xA;};&#xA;&#xA;QuadrotorController::State QuadrotorController::RKIntegrate( const State &amp;amp;state, double dt ) {&#xA;&#xA;const double C1 = 0.0f;&#xA;const double C2 = 0.5f, A21 = 0.5f;&#xA;const double C3 = 0.5f, A31 = 0.0f, A32 = 0.5f;&#xA;const double C4 = 1.0f, A41 = 0.0f, A42 = 0.0f, A43 = 1.0f;&#xA;&#xA;const double B1 = 1.0f/6.0f, B2 = 1.0f/3.0f, B3 = 1.0f/3.0f, B4 = 1.0f/6.0f;&#xA;&#xA;Derivative k1 = sampleDerivative( 0.0f, state );&#xA;Derivative k2 = sampleDerivative( C2 * dt, evaluate( state, k1 * A21, dt ) );&#xA;Derivative k3 = sampleDerivative( C3 * dt, evaluate( state, k1 * A31 + k2 * A32, dt ) );&#xA;Derivative k4 = sampleDerivative( C4 * dt, evaluate( state, k1 * A41 + k2 * A42 + k3 * A43, dt ) );&#xA;&#xA;const Derivative derivativeSum = k1 * B1 + k2 * B2 + k3 * B3 + k4 * B4;&#xA;&#xA;return evaluate( state, derivativeSum, dt );&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Now I m really lost because...because the simulated qudrotor has the same behavior as before. Nevertheless I ve implemented the same PD algorithm as discussed in the paper, it stabilize on Z (height) but it get really crazy due to unstable behavior. &#xA;So... I dunno what is wrong in my code and my implementation. And above all I cannot find any source in internet with a good self explaned dynamic model for a quadrotor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regards&lt;/p&gt;&#xA;" OwnerUserId="7097" LastEditorUserId="7097" LastEditDate="2014-09-16T21:31:42.337" LastActivityDate="2014-10-08T12:31:44.287" Title="PD Algorithm for a Quadrotor [Simulation]" Tags="&lt;control&gt;&lt;quadcopter&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4559" PostTypeId="2" ParentId="4558" CreationDate="2014-09-16T01:40:22.270" Score="0" Body="&lt;p&gt;I don't have any recommended reading for you. However I see a lot of potential problems here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, and probably most obvious, there could be a bug. I don't see anything immediately wrong in the code you have provided but then there is a lot there. You could improve the code by decomposing it further. For instance, make a simple function to do the integration for a scalar value and use it instead of re-writing it for every variable. On that note you would be well served to change your integration to RK4 if you want to do anything more than hover.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another possible problem could be with your time step. If it's too large you will get odd behavior. Given what you are seeing I'm guessing this is actually the problem. But that really is a guess because there isn't really enough to go on here even though you have clearly attempted to provide a good explanation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Still another problem could be one of numeric stability. The cos and sin functions in your equations are sensitive around certain values. For instance cos is troublesome around 0 and the output can fluctuate wildly with only small perturbations of the input. Given that you are only trying to hover I suspect this is not actually the problem. Even still seeking out a good numerical computing library is a good idea.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem could also be with the gains. In fact, if you're using a reasonable time step I suspect this is most likely the problem given the behavior you're seeing. Unfortunately PD control on a quadrotor isn't ideal because the system is non-linear and the guarantees for PID controllers only apply to linear time invariant systems. As such the best way to find gains for the system is to hand tune them. You would be well served to linearize the system and apply LQR control instead.&lt;/p&gt;&#xA;" OwnerUserId="177" LastActivityDate="2014-09-16T01:40:22.270" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4560" PostTypeId="2" ParentId="4554" CreationDate="2014-09-16T06:26:43.740" Score="1" Body="&lt;p&gt;There MCU which provide enough calculation power. I'd say &quot;the bigger, the better&quot;. For example a ARM-CORTEX M4&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is enough with you just want to extract some coordinates&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The protocol of the kinect is pretty simple (&lt;a href=&quot;http://openkinect.org/wiki/Protocol_Documentation&quot; rel=&quot;nofollow&quot;&gt;http://openkinect.org/wiki/Protocol_Documentation&lt;/a&gt;). You can easily implement a communication between the Kinect and the MCU&lt;/p&gt;&#xA;" OwnerUserId="6911" LastActivityDate="2014-09-16T06:26:43.740" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4561" PostTypeId="2" ParentId="4558" CreationDate="2014-09-16T08:19:52.670" Score="0" Body="&lt;p&gt;Well I saw in the first line an error.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;body_pos_current_.x_dot_2 =  ( thrust_.total / masse_ ) * ( sin( body_ang_current_.theta ) * cos( body_ang_current_.phi ) * cos( body_ang_current_.psi ) + sin( body_ang_current_.psi ) * cos( body_ang_current_.phi ) );&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I think it should be:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;body_pos_current_.x_dot_2 =  ( thrust_.total / masse_ ) * ( sin( body_ang_current_.theta ) * cos( body_ang_current_.phi ) * cos( body_ang_current_.psi ) + sin( body_ang_current_.psi ) * sin( body_ang_current_.phi ) );&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Last cos() changed to sin(), then it should represent the same as the formula&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not sure if this solve your problem, there may be other code-errors i didn't noticed on the first glance&lt;/p&gt;&#xA;" OwnerUserId="6911" LastEditorUserId="6911" LastEditDate="2014-09-16T08:30:35.330" LastActivityDate="2014-09-16T08:30:35.330" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4562" PostTypeId="1" AcceptedAnswerId="4563" CreationDate="2014-09-16T09:08:32.490" Score="2" ViewCount="270" Body="&lt;p&gt;While reading the paper &lt;a href=&quot;http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=6289431&amp;amp;abstractAccess=no&amp;amp;userType=inst&quot; rel=&quot;nofollow&quot;&gt;&quot;Multirotor Aerial Vehicles: Modeling, Estimation, and Control of Quadrotor&quot; by Mahony, Kumar and Corke&lt;/a&gt;, I stumbled across the following equations for a non-linear attitude observer, which I would like to implement, but I believe there is something wrong.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\dot{\hat{R}} := \hat{R} \left( \Omega_{IMU} - \hat{b} \right)_\times - \alpha \\&#xA;\dot{\hat{b}} := k_b \alpha \\&#xA;\alpha := \left( \frac{k_a}{g^2}((\hat{R}^T \vec z) \times a_{IMU}) + \frac{k_m}{|^Am|^2} ((\hat{R}^T {^Am}) \times m_{IMU}) \right)_\times + k_E \mathbb{P}_{so(3)} (\hat{R} R_E^T)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where $\hat{R}$ and $\hat{b}$ are etimates of orientation and gyroscope bias, $\Omega_{IMU}, a_{IMU}, m_{IMU}, R_E^T$ are measurements and $k_X$ are scalar gains, which may be set to 0 for measurements that are not evailable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now $\dot{\hat{R}}$ and $\alpha$ need to be matrices $\in \mathbb{R}^{3\times 3}$ due to their definitions. $\hat{b}$ and thus $\dot{\hat{b}}$ need to be vectors $\in \mathbb{R}^3$. But then what is the correct version of the second equation $\dot{\hat{b}} := k_b \alpha$?&lt;/p&gt;&#xA;" OwnerUserId="4531" LastActivityDate="2014-09-16T12:19:21.650" Title="Non-linear complementary filter on so3: Corrected equations?" Tags="&lt;control&gt;&lt;quadcopter&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4563" PostTypeId="2" ParentId="4562" CreationDate="2014-09-16T12:19:21.650" Score="2" Body="&lt;p&gt;I've implemented this algorithm before but I found a different paper easier to read. Try find the paper by Hamel and Mahoney (with Hamel listed as the first author). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;From that paper, which I don't have available at the moment, I believe the first equation should was&#xA;$$&#xA;\begin{align}&#xA;\dot{\hat{R}} &amp;amp;= \hat{R} \left ( \Omega_{IMU} - \hat{b} - \alpha \right )_\times&#xA;\end{align}&#xA;$$&#xA;but in that paper $\alpha$ ($\omega$ in the paper) was a vector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another thing to look at for the equations you have listed is if the second equation shouldn't have the operator transforming $\alpha$ from its skew-symmetric matrix form to a vector on $\mathbb{R}^3$.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2014-09-16T12:19:21.650" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4564" PostTypeId="2" ParentId="4555" CreationDate="2014-09-16T18:24:44.003" Score="3" Body="&lt;p&gt;I assume that your 2 channels control forward/backward and left/right.  But even if the 2 channels control forward/backward in each wheel (differential-drive style), it should still be possible to do what you are suggesting &lt;em&gt;electrically&lt;/em&gt; instead of mechanically.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should be able to read the input signal to the motors, decide whether those signals are commanding a &quot;reverse&quot; movement, and trigger your snow plow lift motor accordingly.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-09-16T18:24:44.003" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4565" PostTypeId="2" ParentId="4504" CreationDate="2014-09-16T18:54:32.703" Score="0" Body="&lt;p&gt;It looks like your I term is turned up too high.  This can cause the system to overcompensate before it has even started to return to equilibrium.  &lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-09-16T18:54:32.703" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4566" PostTypeId="2" ParentId="2729" CreationDate="2014-09-16T20:07:07.370" Score="2" Body="&lt;p&gt;The problem of inverse kinematics to a general &lt;em&gt;6&lt;/em&gt;-degrees-of-freedom serial robot was considered hard for a long time. Nevertheless it was solved and the solution in &lt;a href=&quot;http://mechanicaldesign.asmedigitalcollection.asme.org/article.aspx?articleid=1443664&quot; rel=&quot;nofollow&quot;&gt;Raghavan and Roth (1993)&lt;/a&gt; is a widely acknowledged method, and improvements have also been made since (see e.g., Husty, Pfurner and Schröcker (2007)).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although they provides a strategy to solve the inverse kinematics analytically, they do not give the solutions in closed form. All methods stop at a point where a single equation in one unknown variable, but a polynomial of degree &lt;em&gt;16&lt;/em&gt; is obtained. The solutions to the remaining five variables are expressed in terms of this unknown, which can be found once the polynomial is solved numerically.  Further, this polynomial is of degree &lt;em&gt;16&lt;/em&gt; only in the worst case scenario, where all the joints are rotary. Any further simplification in the architecture only reduce the degree of this polynomial.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These methods use advanced mathematical techniques to solve the problem, which are beyond the scope of this space but a simplified outline of the steps followed in Raghavan and Roth (1993) can be seen in &lt;a href=&quot;http://www.mecheng.iisc.ernet.in/~asitava/NPTEL/module3.pdf&quot; rel=&quot;nofollow&quot;&gt;slides 82-91 of this article&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="7103" LastActivityDate="2014-09-16T20:07:07.370" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4567" PostTypeId="2" ParentId="2135" CreationDate="2014-09-16T20:57:25.620" Score="3" Body="&lt;p&gt;Absolutely not! If the geometric method yields a solution, so should the algebraic method or any other method for that matter, if done correctly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem posed here is the inverse kinematics of a 2R serial robot. This is a trivial example solved in many books in different ways.  I would recommend &lt;a href=&quot;http://www.ed.iitm.ac.in/~sandipan/files/serialkinematicsv2.pdf&quot; rel=&quot;nofollow&quot;&gt;this article&lt;/a&gt; for an exposition on obtaining the solution to this problem (and more) in different ways.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The question of defining a &quot;&lt;em&gt;better&lt;/em&gt;&quot; method is better left alone and depends on the problem at hand. Algebraic methods are more generic and can be applied to any mechanism, whereas geometric methods are easy to visualize and so seem simple but are prone to errors as the mechanism at hand gets complicated (imagine solving spatial robots of more than &lt;em&gt;3&lt;/em&gt;-degrees of freedom or a general 6R robot geometrically!).&lt;/p&gt;&#xA;" OwnerUserId="7103" LastEditorUserId="7103" LastEditDate="2015-10-04T14:32:33.030" LastActivityDate="2015-10-04T14:32:33.030" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4568" PostTypeId="1" AcceptedAnswerId="4570" CreationDate="2014-09-16T21:46:37.263" Score="0" ViewCount="103" Body="&lt;p&gt;I'm trying to make a Quadcopter from scratch, I have a fair amount of experience with adruinos, and I'm trying to understand how to necessary systems work, and I can't seem to figure out what PID means, is it a method of regulating pitch and roll? like a stabilizer? I think from what I've read that its a system that detects orientation of the craft and tries to correct it&lt;/p&gt;&#xA;" OwnerUserId="7104" LastActivityDate="2014-09-17T04:06:42.557" Title="What is a PID as is related to quadcopters" Tags="&lt;arduino&gt;&lt;quadcopter&gt;&lt;microcontroller&gt;&lt;pid&gt;&lt;beginner&gt;" AnswerCount="1" CommentCount="0" ClosedDate="2014-10-23T10:10:36.637" ContentLicense="CC BY-SA 3.0" />
  <row Id="4569" PostTypeId="1" CreationDate="2014-09-17T01:57:10.480" Score="0" ViewCount="1061" Body="&lt;p&gt;I'd like to slice and dice floor tile into pieces so I can arrange it in geometric patterns. I have CAD designs for the parts. Would any consumer grade CNC machine be capable of doing the job?&lt;/p&gt;&#xA;" OwnerUserId="7105" LastActivityDate="2014-09-17T05:47:17.850" Title="Are consumer grade CNC machines capable of cutting tile?" Tags="&lt;cnc&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4570" PostTypeId="2" ParentId="4568" CreationDate="2014-09-17T04:06:42.557" Score="0" Body="&lt;p&gt;The term PID itself refers to Proportional plus Integral plus Derivative control, which is a very common control technique. The IMU (inertial measurement unit) measures the orientation of the quadrotor, and the roll/pitch/yaw values are used in the PID controller to calculate motor commands.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2014-09-17T04:06:42.557" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4571" PostTypeId="2" ParentId="4569" CreationDate="2014-09-17T05:47:17.850" Score="1" Body="&lt;p&gt;The answer is no!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even if you ask: Is any professional CNC machine, build for metal/plastics/wood cutting, capable of cutting tile?&#xA;The answer is still no!&#xA;You can try it. It will work in the beginning but the machine will be destroyed soon.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Stone cannot be cut, except soapstone. Stone machining consist of crushing/cracking/grinding, cutting is impossible. Most common milling machines are build for cutting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;During the stone milling process there won't be any chips only &quot;stone dust&quot;&#xA;There are parts of your machine which are able to protect all the moving parts of your machine from cutting chips.&#xA;These parts have to be designed to provide protection against very small particles like dust. Usually they aren't, so the dust will come into your spindles, guides and gears and in the end it will damage them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to work with your milling machine for a long time then I would rather not recommend it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can do it. Then you definitely need water for the &quot;cutting&quot; process ( this will decrease the amount of dust) and very hard tools (diamond tools are recommended).&lt;/p&gt;&#xA;" OwnerUserId="6911" LastActivityDate="2014-09-17T05:47:17.850" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4572" PostTypeId="2" ParentId="4511" CreationDate="2014-09-17T10:10:47.573" Score="1" Body="&lt;p&gt;Using this reference&#xA;&lt;a href=&quot;https://github.com/ptrbrtz/razor-9dof-ahrs/tree/master/Arduino/Razor_AHRS&quot; rel=&quot;nofollow&quot;&gt;RAZOR 9DOF DCM Algorithms&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DCM Sorts it problem. :) Solution works as good as the EUler Compass on the PlayStore.&#xA;If anyone is working on it, convert the Adruino code to C++ and use your own interfacing libs. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Works like a charm.&lt;/p&gt;&#xA;" OwnerUserId="7049" LastActivityDate="2014-09-17T10:10:47.573" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4573" PostTypeId="1" CreationDate="2014-09-17T13:06:42.957" Score="2" ViewCount="118" Body="&lt;p&gt;I am trying to calculate likelihood of laser scan($Z$) at give pose($x$) with known map ($m$) using beam based model&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$P\left(z_t|x_t,m \right)=\prod_{i=1}^{n}P'\left(z_i|x_t,m \right)$    &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My scan has 360 rays i.e $n=360$, When i calculate $P\left(z_t|x_t,m \right)$ it becomes zero as multiplication all propabilities $&amp;lt;1.$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In &lt;a href=&quot;https://github.com/ros-planning/navigation/blob/b384cac812381a9313d7cdc9be9eb272c4fccb38/amcl/src/amcl/sensors/amcl_laser.cpp#L168&quot; rel=&quot;nofollow&quot;&gt;ROS amcl&lt;/a&gt; they are using ad-hoc which works better like&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$P\left(z_t|x_t,m \right)+=\sum_{i=1}^{n}P'\left(z_i|x_t,m \right)*P'\left(z_i|x_t,m \right)*P'\left(z_i|x_t,m \right)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;later they normalise it with number of particle to get weight of each particle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My query is how to get probability normalised and not zero with &lt;em&gt;single calculation&lt;/em&gt; &lt;em&gt;(i.e image in case of single particle)&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="714" LastActivityDate="2014-09-25T08:24:49.547" Title="Laser Beam based model probability in case of single particle" Tags="&lt;mobile-robot&gt;&lt;slam&gt;&lt;laser&gt;&lt;probability&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4574" PostTypeId="2" ParentId="4424" CreationDate="2014-09-17T13:21:19.437" Score="3" Body="&lt;p&gt;This might be useful  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=6719348&amp;amp;tag=1&quot; rel=&quot;nofollow&quot;&gt;An evaluation of 2D SLAM techniques available in Robot Operating System&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="714" LastActivityDate="2014-09-17T13:21:19.437" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4575" PostTypeId="1" CreationDate="2014-09-17T16:20:36.137" Score="3" ViewCount="362" Body="&lt;p&gt;I would like to create an Infinite-horizon, continuous-time LQR with a cost functional defined as&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$J = \int_{0}^\infty \left( e^T Q e + u^T R u \right) dt$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where e is the states' error $x-x_d$, but I have trouble concluding to the appropriate Ricatti equation since $x_d$ is a function of time therefore leading to a term of $\dot x_d$ . Is this problem solvable? Any ideas?&lt;/p&gt;&#xA;" OwnerUserId="7107" LastActivityDate="2014-11-21T18:25:16.447" Title="Use linear quadratic regulator to minimize output error" Tags="&lt;control&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4576" PostTypeId="2" ParentId="2224" CreationDate="2014-09-17T19:02:33.933" Score="1" Body="&lt;p&gt;Someone I know has tested the Kinect on the Udoo and it works fairly well on the quad core Udoo, the resources might be tighter on the dual core. You can install the debs for everything you need in ROS, including the freenect packages, from &lt;code&gt;.deb&lt;/code&gt; binaries. Just follow the guide here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://wiki.ros.org/hydro/Installation/UDOO&quot; rel=&quot;nofollow&quot;&gt;http://wiki.ros.org/hydro/Installation/UDOO&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then you can install the debs with this command:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ sudo apt-get install ros-hydro-freenect-launch&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Afterwards you should be able to plugin the Kinect and run this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ roslaunch freenect_launch freenect.launch&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In another terminal you can do something like this to make sure it is working:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ rostopic hz /camera/rgb/image_raw&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Some tips to using the Kinect and the freenect drivers in ROS on a resource constrained system like the Udoo:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Use nodelets (wiki.ros.org/nodelet)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;freenect_camera&lt;/code&gt; provides a &lt;code&gt;nodelet&lt;/code&gt; version and if you write your code as &lt;code&gt;nodelet&lt;/code&gt;'s you can run them in the same process and save a lot of processing due to IPC.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If you need a simulated laserscan and the Kinect is level with the ground, use &lt;code&gt;depthimage_to_laserscan&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;depthimage_to_laserscan&lt;/code&gt; is more efficient than &lt;code&gt;pointcloud_to_laserscan&lt;/code&gt; because then you don't need to convert the images from the Kinect into a point cloud first. (Both of these come in &lt;code&gt;nodelet&lt;/code&gt; form as well)&lt;/p&gt;&#xA;" OwnerUserId="5573" LastActivityDate="2014-09-17T19:02:33.933" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4577" PostTypeId="1" CreationDate="2014-09-17T23:03:08.817" Score="1" ViewCount="694" Body="&lt;p&gt;I purchased a &lt;a href=&quot;http://www.pololu.com/product/2503&quot; rel=&quot;nofollow&quot;&gt;Pololu Dual MC33926 Motor Driver Shield for Arduino&lt;/a&gt;, and for some reason I cannot read current from the motor controller. On the Serial.println() it just prints weird data (garbage), and when I use ROS (Robot Operating System) I only see -0.0 (minus zero) value for both motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All I've done is plug the shield on my Arduino UNO R3 model, and run the demo that comes with the sample library --&#xA;&lt;a href=&quot;http://github.com/pololu/dual-mc33926-motor-shield&quot; rel=&quot;nofollow&quot;&gt;http://github.com/pololu/dual-mc33926-motor-shield&lt;/a&gt; .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I fix this issue?&lt;/p&gt;&#xA;" OwnerUserId="4269" LastEditorUserId="187" LastEditDate="2014-09-20T19:09:09.933" LastActivityDate="2019-08-11T17:45:17.840" Title="Can't Read current on Pololu Dual MC33926 Motor Driver Shield for Arduino" Tags="&lt;arduino&gt;&lt;ros&gt;&lt;actuator&gt;&lt;stepper-driver&gt;&lt;current&gt;" AnswerCount="3" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4578" PostTypeId="1" CreationDate="2014-09-18T03:31:40.667" Score="1" ViewCount="316" Body="&lt;p&gt;Some friends and I are interested in working on a robot. I know little to nothing about robotics, but do have a lot of experience with programming. Before we start, I am hoping that I can find some development kits or libraries that will help aid the goals of the robot. Which are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Robot needs to move from point A to point B. While moving, it needs to detect rocks (approx. 1 foot diameter) on ground. It needs to detect rocks that are big enough to stop it, turn away from them, and proceed. &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In theory, we will want to detect the kinect's angle via the accelerometers, and use that data to obtain Cartesian coordinates of the ground from the kinect's sensors. Later, we will want a way to assemble a 'map' in the robot's memory so that it can find better paths from A to B.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Right now we aren't concerned with the motors on the robot - only the vision element. Ie, I am not really interested in software that interfaces with the motors of the robot, only only something that interfaces with the kinect. &lt;/p&gt;&#xA;" OwnerUserId="7109" LastActivityDate="2014-12-21T03:28:05.120" Title="kinect - development kit to aid obstacle-avoiding robot?" Tags="&lt;computer-vision&gt;&lt;kinect&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4579" PostTypeId="1" CreationDate="2014-09-18T04:29:47.843" Score="4" ViewCount="238" Body="&lt;p&gt;Actually , I have been since two weeks looking for convinced and final solution for my problem , actually I am completely lost , I am working on mobile robot (Rover 5) with 2 motors , 2 encoders . the controller that designed to the robot needs to know the odometery of mobile robot (X ,Y, Heading Angle ) , actually I am trying to function the encoders for this purpose , getting X ,Y, Heading Angle by measuring the traveled distance by each wheel , so to get the X ,Y, Heading Angle values , I should compute a accurate readings without missing any counts or ticks as could as possible .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem now is :&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the code in the attachment , while I am testing the encoders counts , I noticed that there is a difference between counts of encoders even when they spin in the same constant speed (PMW) , the difference increases as the two motors continue . so I thought that is the main cause of inaccurate odometery results .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the output of the code (in the attachment also) the first two columns are right and left motors speed , the third &amp;amp; forth columns are right and left encoder counts , the fifth column is the difference between two encoders count , as you could see ,that even when the speed of two motors are approximately the same (each motor feed up with 100 PWM) there is a difference in the encoder counts and as you could see that the difference become big and big as the motors continuing spin .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One thing I thought that sending the same PWM value to two different motors will almost never produce the exact same speed , so I think that I should detect the absolute motion of the motors and adjust the power to get the speed/distance , but when I test the speed of motors after feed them with 100 PWM at same time , the two speeds were almost identical , but I noticed that there is a difference between counts of two encoders even when the motors spin in the same constant speed .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Actually , I don't know where is the problem , Is it in the code ? Is it in the hardware ? or what ? I am completely lost , I need for patient someone to help.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/* Encoder-ino.ino&#xA;*/&#xA;#define encoder0PinA 2&#xA;#define encoder0PinB 4&#xA;#define encoder1PinA 3&#xA;#define encoder1PinB 5&#xA;&#xA;volatile int encoder0Pos = 0;&#xA;volatile int encoder1Pos = 0;&#xA;int WR=100;  // angular velocity of right wheel  &#xA;int WL=100;  // angular velocity of right wheel                       &#xA;&#xA;&#xA;&#xA;long newposition;&#xA;long oldposition = 0;&#xA;unsigned long newtime;&#xA;unsigned long oldtime = 0;&#xA;long vel;&#xA;&#xA;&#xA;long newposition1;&#xA;long oldposition1 = 0;&#xA;unsigned long newtime1;&#xA;unsigned long oldtime1 = 0;&#xA;long vel1;&#xA;&#xA;&#xA;&#xA;int ENA=8;    // SpeedPinA connected to Arduino's port 8  &#xA;int ENB=9;    // SpeedPinB connected to Arduino's port 9 &#xA;&#xA;int IN1=48;    // RightMotorWire1 connected to Arduino's port 48&#xA;int IN2=49;    // RightMotorWire2 connected to Arduino's port 49&#xA;&#xA;int IN3=50;    // RightMotorWire1 connected to Arduino's port 48&#xA;int IN4=51;    // RightMotorWire2 connected to Arduino's port 49&#xA;&#xA;&#xA;void setup() {&#xA; pinMode(ENA,OUTPUT);&#xA; pinMode(ENB,OUTPUT);&#xA; pinMode(IN1,OUTPUT);&#xA; pinMode(IN2,OUTPUT);&#xA; pinMode(IN3,OUTPUT);&#xA; pinMode(IN4,OUTPUT);&#xA;&#xA; digitalWrite(ENA,HIGH);    //enable motorA&#xA; digitalWrite(ENB,HIGH);    //enable motorB&#xA;  pinMode(encoder0PinA, INPUT); &#xA;  pinMode(encoder0PinB, INPUT);&#xA;  pinMode(encoder1PinA, INPUT); &#xA;  pinMode(encoder1PinB, INPUT);  &#xA;// encoder pin on interrupt 0 (pin 2)&#xA;attachInterrupt(0, doEncoderA, CHANGE);  &#xA;&#xA;// encoder pin on interrupt 1 (pin 3)&#xA;&#xA;attachInterrupt(1, doEncoderB, CHANGE);  &#xA;  Serial.begin (9600);&#xA;}&#xA;&#xA;void loop(){ &#xA;&#xA;    int rightPWM;&#xA;  if (WR &amp;gt; 0) {&#xA;    //forward&#xA;  digitalWrite(IN1,LOW);&#xA;  digitalWrite(IN2,HIGH);&#xA;&#xA;  }  else if (WR &amp;lt; 0){&#xA;    //reverse&#xA;  digitalWrite(IN1,HIGH);&#xA;  digitalWrite(IN2,LOW);&#xA;  }&#xA;&#xA;  if (WR == 0) {&#xA;   rightPWM = 0;&#xA;   analogWrite(ENA, rightPWM);&#xA;  } else {&#xA;    rightPWM = map(abs(WR), 1, 100, 1, 255);&#xA;    analogWrite(ENA, rightPWM);&#xA;  }&#xA;&#xA; int leftPWM;&#xA;&#xA;  if (WL &amp;gt; 0) {&#xA;     //forward&#xA;  digitalWrite(IN3,LOW);&#xA;  digitalWrite(IN4,HIGH);&#xA;  }  else if (WL &amp;lt; 0) {&#xA;     //reverse&#xA;  digitalWrite(IN3,HIGH);&#xA;  digitalWrite(IN4,LOW);}&#xA;&#xA;  if (WL == 0) {&#xA;    leftPWM = 0;&#xA;    analogWrite(ENB, leftPWM);&#xA;  } else {&#xA;    leftPWM = map(abs(WL), 1, 100, 1, 255);&#xA;    analogWrite(ENB, leftPWM);&#xA;  }&#xA;&#xA;&#xA;// to determine the speed of motors by encoders &#xA;&#xA; newposition = encoder0Pos;&#xA; newtime = millis();&#xA; vel = (newposition-oldposition) * 1000 /(long)(newtime-oldtime);&#xA; oldposition = newposition;&#xA; oldtime = newtime;&#xA;&#xA; newposition1 = encoder1Pos;&#xA; newtime1 = millis();&#xA; vel1 = (newposition1-oldposition1) * 1000 /(long)(newtime1-oldtime1);&#xA; oldposition1 = newposition1;&#xA; oldtime1 = newtime1;&#xA;&#xA;Serial.print (vel);&#xA;Serial.print (&quot;\t&quot;);&#xA;Serial.print (vel1);&#xA;Serial.print (&quot;\t&quot;);&#xA;Serial.print (encoder0Pos*-1); &#xA;Serial.print(&quot;\t&quot;); &#xA;Serial.print (encoder1Pos*-1); &#xA;Serial.print(&quot;\t&quot;); &#xA;Serial.println ((encoder0Pos*-1) -( encoder1Pos*-1)); &#xA;}&#xA;&#xA;&#xA;&#xA;// 1 encoder counts&#xA;&#xA;void doEncoderA(){&#xA;  // look for a low-to-high on channel A&#xA;  if (digitalRead(encoder0PinA) == HIGH) { &#xA;    // check channel B to see which way encoder is turning&#xA;    if (digitalRead(encoder0PinB) == LOW) {  &#xA;      encoder0Pos = encoder0Pos + 1;         // CW&#xA;    } &#xA;    else {&#xA;      encoder0Pos = encoder0Pos - 1;         // CCW&#xA;    }&#xA;  }&#xA;  else   // must be a high-to-low edge on channel A                                       &#xA;  { &#xA;    // check channel B to see which way encoder is turning  &#xA;    if (digitalRead(encoder0PinB) == HIGH) {   &#xA;      encoder0Pos = encoder0Pos + 1;          // CW&#xA;    } &#xA;    else {&#xA;      encoder0Pos = encoder0Pos - 1;          // CCW&#xA;    }&#xA;  }&#xA;}&#xA;&#xA;&#xA;&#xA;// 2 encoder counts&#xA;&#xA;void doEncoderB(){&#xA;  // look for a low-to-high on channel B&#xA;  if (digitalRead(encoder1PinB) == HIGH) {   &#xA;   // check channel A to see which way encoder is turning&#xA;    if (digitalRead(encoder1PinA) == HIGH) {  &#xA;      encoder1Pos = encoder1Pos + 1;         // CW&#xA;    } &#xA;    else {&#xA;      encoder1Pos = encoder1Pos - 1;         // CCW&#xA;    }&#xA;  }&#xA;  // Look for a high-to-low on channel B&#xA;  else { &#xA;    // check channel B to see which way encoder is turning  &#xA;    if (digitalRead(encoder1PinA) == LOW) {   &#xA;      encoder1Pos = encoder1Pos + 1;          // CW&#xA;    } &#xA;    else {&#xA;      encoder1Pos = encoder1Pos - 1;          // CCW&#xA;    }&#xA;  }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;the result:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;0   0   0   0   0&#xA;0   0   0   0   0&#xA;0   0   0   0   0&#xA;0   0   0   0   0&#xA;0   0   0   0   0&#xA;0   0   0   0   0&#xA;0   0   0   0   0&#xA;0   0   0   0   2&#xA;-181    -90 3   2   1&#xA;-111    -55 5   4   1&#xA;-187    -187    9   8   2&#xA;-176    -235    12  12  1&#xA;-200    -200    16  16  1&#xA;-250    -250    21  21  1&#xA;-250    -250    26  26  1&#xA;-210    -210    31  31  1&#xA;-238    -285    36  36  1&#xA;-315    -263    41  41  1&#xA;-300    -200    47  46  2&#xA;...&#xA;-227    -272    184 182 3&#xA;-285    -285    190 187 4&#xA;-260    -217    195 193 3&#xA;-238    -285    201 199 3&#xA;...&#xA;-250    -250    1474    1473    2&#xA;-250    -250    1480    1479    0&#xA;-208    -291    1485    1485    1&#xA;-304    -260    1491    1492    1&#xA;-240    -240    1498    1498    1&#xA;-260    -260    1504    1505    0&#xA;-250    -291    1510    1511    1&#xA;-280    -240    1516    1517    1&#xA;-260    -260    1523    1523    1&#xA;...&#xA;-250    -250    2953    2948    5&#xA;-250    -291    2959    2955    6&#xA;-250    -250    2965    2961    6&#xA;-291    -250    2971    2967    5&#xA;-250    -291    2978    2973    5&#xA;-304    -250    2985    2980    8&#xA;-320    -250    2992    2986    8&#xA;...&#xA;-320    -240    3085    3075    10&#xA;-291    -291    3092    3082    12&#xA;-269    -230    3099    3089    11&#xA;-250    -291    3105    3095    11&#xA;-280    -280    3112    3102    11&#xA;-269    -230    3118    3108    12&#xA;-250    -291    3125    3115    11&#xA;...&#xA;-291    -250    3607    3587    19&#xA;-115    -269    3610    3594    17&#xA;-240    -240    3617    3601    18&#xA;-375    -291    3625    3607    19&#xA;-269    -269    3632    3614    20&#xA;-291    -250    3638    3620    20&#xA;-240    -280    3645    3627    20&#xA;-280    -240    3652    3633    18&#xA;-200    -280    3657    3640    19&#xA;-269    -230    3664    3647    19&#xA;-333    -291    3674    3653    23&#xA;-400    -280    3682    3659    23&#xA;-280    -240    3688    3666    24&#xA;-240    -280    3695    3673    24&#xA;...&#xA;-230    -269    4677    4644    32&#xA;-208    -291    4681    4651    32&#xA;-280    -240    4690    4657    35&#xA;-320    -280    4696    4664    34&#xA;-240    -240    4703    4670    34&#xA;-291    -291    4710    4677    34&#xA;-269    -230    4716    4683    34&#xA;-240    -280    4723    4690    34&#xA;-280    -240    4727    4697    32&#xA;-160    -280    4736    4703    35&#xA;-416    -291    4745    4709    38&#xA;-346    -230    4753    4716    39&#xA;...&#xA;-360    -240    6240    6190    51&#xA;-375    -291    6247    6197    51&#xA;-269    -269    6253    6203    52&#xA;-291    -250    6261    6210    53&#xA;...&#xA;-192    -269    6428    6374    56&#xA;-240    -280    6436    6380    57&#xA;-291    -250    6443    6387    57&#xA;-269    -269    6449    6394    57&#xA;...&#xA;-269    -269    7763    7687    78&#xA;-240    -280    7770    7694    78&#xA;-291    -250    7776    7700    76&#xA;-192    -269    7781    7707    76&#xA;...&#xA;-269    -230    8263    8179    84&#xA;-250    -291    8269    8186    85&#xA;-240    -240    8276    8192    88&#xA;-384    -269    8286    8199    88&#xA;-250    -291    8292    8206    88&#xA;-269    -230    8299    8212    87&#xA;-291    -291    8305    8219    88&#xA;-240    -240    8310    8225    85&#xA;...&#xA;-160    -120    8359    8276    83&#xA;-125    -166    8362    8280    82&#xA;-115    -115    8365    8283    83&#xA;-80 -120    8367    8285    82&#xA;-125    -83 8370    8288    82&#xA;-83 -125    8371    8290    82&#xA;-43 -43 8373    8291    81&#xA;-83 -83 8374    8293    82&#xA;-45 -90 8375    8294    81&#xA;-43 -43 8376    8296    81&#xA;-43 -43 8377    8296    81&#xA;-43 -43 8378    8297    81&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="6909" LastEditorUserId="9860" LastEditDate="2016-05-06T00:06:57.650" LastActivityDate="2016-05-06T00:06:57.650" Title="Quadrature Encoder Counts" Tags="&lt;mobile-robot&gt;&lt;wheeled-robot&gt;&lt;quadrature-encoder&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4580" PostTypeId="1" AcceptedAnswerId="4584" CreationDate="2014-09-18T04:58:21.613" Score="3" ViewCount="695" Body="&lt;p&gt;I'm currently designing a linear camera slider, that will be used to hold camera equipment weighing just about 15 Kgs including all of the lenses and monitors and everything else.&lt;/p&gt;&#xA;&lt;p&gt;For those who don't know what a camera slider is, it's a linear slider on top of which a camera is mounted and then the camera is slided slowly to create some nice footage &lt;a href=&quot;https://www.youtube.com/watch?v=hLvP2Dr2FWQ&quot; rel=&quot;nofollow noreferrer&quot;&gt;like this&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;The problem&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Now, looking at the commercially available camera sliders out there, there seems to be two ways in which the motor maybe mounted on these sliders:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Motor mounted on the side:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/6TMcu.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Motor mounted directly on the carriage:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/PE1PW.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;I would like to know which option would be optimal - Performance-wise (this slider maybe used vertically too, to create bottom to top slide shots), efficiency-wise and&#xA;which one of these two will be resistant to motor vibration (these motors vibrate a lot, the effects of which may sometimes leak into the produced footage).&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Additional Questions&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Motor mounted on the carriage directly &lt;em&gt;maybe, just maybe&lt;/em&gt; more efficient, but it also has to carry it's own weight in addition to the 15kg camera load?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Pulling force is greater than pushing force (I have no idea why, would be great if someone explained why, atleast in this case?), so a motor mounted in the end should be able to lift vertically with ease?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Does a belt setup as shown in the first figure above really dampen the motor vibrations? Will/won't the motor vibrating on the end get amplified (because, the whole setup will be attached to a single tripod in the exact center of the slider)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Which design will be less stressful for the motor, taking inertia into consideration for both cases?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Which one of these designs will be best suitable for vertical pulling of load against gravity?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Manufacturers use both designs interchangeably, so it's hard to predict which design is better than which.&lt;/p&gt;&#xA;&lt;p&gt;Any help would be much appreciated!&lt;/p&gt;&#xA;&lt;p&gt;Please note, this question has been migrated from the Stackexchange Physics (and Electrical) forum by me because the mods thought it would be appropriate here.&lt;/p&gt;&#xA;" OwnerUserId="7110" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2014-09-18T18:39:10.763" Title="Linear slider motor mount location - Pros/cons" Tags="&lt;control&gt;&lt;design&gt;&lt;stepper-motor&gt;&lt;motion&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4581" PostTypeId="2" ParentId="4577" CreationDate="2014-09-18T08:46:02.983" Score="4" Body="&lt;p&gt;When there is miscommunications between the microcontroller and a chip, assuming the electronics are not damaged, there could be a couple of things that can go wrong. Of course, further diagnosis is required. Typical things that could go wrong are (generally, not just in your particular case):&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Connections: Is the chip connected to the correct power supply? Is it soldered correctly? Did you connect the right pins together?&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A &lt;a href=&quot;https://en.wikipedia.org/wiki/Multimeter&quot; rel=&quot;nofollow noreferrer&quot;&gt;tester (multimeter)&lt;/a&gt; along with the datasheets are helpful to verify that the connections are alright.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Bus requirements: Are all requirements of the bus fulfilled? Some buses (e.g. &lt;a href=&quot;https://en.wikipedia.org/wiki/CAN_bus&quot; rel=&quot;nofollow noreferrer&quot;&gt;CAN&lt;/a&gt;) need terminating resistors. Some have limitations on the the length.&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The microcontroller datasheets usually have information and even useful example pictures that show how the bus must be connected.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Noise: Assuming no external noise, on high frequencies the bus has to meet other criteria. For example &lt;a href=&quot;https://en.wikipedia.org/wiki/Microstrip#Bends&quot; rel=&quot;nofollow noreferrer&quot;&gt;90 degree bends cause reflection&lt;/a&gt;.&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;An oscilloscope helps here. If there are reflections, you would see noise over your signal. If the noise makes the signal go as far as reaching the middle voltage (between logical 0 and 1), there is a good chance the hardware would misread the bit. This is especially bad on the clock bus, if any.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Configuration: Are the pins and peripherals of the microcontroller correctly configured?&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Read the datasheets very carefully and pay attention to every single line. Don't take one line &quot;notes&quot; lightly, they often contain information that if missed would make the peripheral not work. Look at the errata of the microcontroller as well for possible hardware bugs.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Since your bus is UART, I'd say number 2 and 3 are likely not an issue. After checking the connections, I would verify that the configuration is ok. As &lt;a href=&quot;https://robotics.stackexchange.com/questions/4577/cant-read-current-on-pololu-dual-mc33926-motor-driver-shield-for-arduino#comment7183_4577&quot;&gt;kinkilla commented&lt;/a&gt;, it could very well be that you configured the wrong baud rate for your bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you still cannot figure out what the problem is, it is best to attach an oscilloscope and see what signals are actually on the wires.  There are very good oscilloscopes that are expensive (but you may have access to if your lab or work environment has one), but there are also very cheap ones that attach to the computer with USB and all the software runs there. The cheap ones cannot measure with as much detail as the expensive ones, but with UART speeds that is not at all an issue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, you can check with oscilloscope what signal is on the wire. If the signal has a bad shape and is coming from a chip you didn't configure (so we can assume it should work correctly out of the box), it could be that the bus is shorted with another or the microcontroller is badly configured (so there are more than one person driving the bus. If the signal is coming from the microcontroller, there could be similar reasons as well as bad configuration. If the signal is ok, then you are receiving it badly. If the bus is correctly connected to the microcontroller, then the cause is most likely the configuration of the microcontroller.&lt;/p&gt;&#xA;" OwnerUserId="158" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2014-09-18T08:46:02.983" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4583" PostTypeId="1" CreationDate="2014-09-18T17:56:02.300" Score="7" ViewCount="6262" Body="&lt;p&gt;It need not be as effective as lidar or it may have some disadvantages when compared with lidar.   What are the probable alternatives?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit:&#xA;I'm intending to use it outdoors for navigation of autonomous vehicle. Is there any low cost LIDAR or is there any alternative sensor for obstacle detection?&lt;/p&gt;&#xA;" OwnerUserId="6746" LastEditorUserId="6746" LastEditDate="2014-09-22T15:02:16.820" LastActivityDate="2019-01-17T06:29:15.060" Title="What are some low cost alternatives for lidar?" Tags="&lt;sensors&gt;&lt;navigation&gt;&lt;cameras&gt;&lt;sonar&gt;&lt;lidar&gt;" AnswerCount="7" CommentCount="1" FavoriteCount="1" ClosedDate="2019-01-17T10:28:17.397" ContentLicense="CC BY-SA 3.0" />
  <row Id="4584" PostTypeId="2" ParentId="4580" CreationDate="2014-09-18T18:39:10.763" Score="1" Body="&lt;p&gt;Performance-wise, first version wins as the motor's own weight is not added to the payload for motion. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Efficiency-wise, it depends on the elasticity and material properties of the drive belt, versus the material of the powered roller surface, gripping force of rollers, and other energy loss factors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The belt drive will be far more vibration-damped: Note the spring-loaded tensioning pin through which the belt passes in the top photo. This will flex and absorb a lot of the vibration - acting like a low-pass filter for mechanical energy. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;With regard to &quot;these motors vibrate a lot&quot;: If vibration reduction is important, a stepper motor might be the worst possible choice. Use a linear encoder on the slider for closed-loop position feedback, and drive the unit using a BLDC motor - effectively making a linear servo out of the whole thing. BLDCs are much less vibration prone: Note the smoothness of rotation of a CDROM drive main motor. Of course, for meaningful traversal speeds, the BLDC would be geared down significantly, with the side effect of even more vibration reduction. For that matter, even a brushed DC motor with suitable gearing down would work great, again with the linear encoder.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The first version will require slightly less power, and will suffer marginally less inertia effects: The motor in the photograph shown most likely weighs under 1 Kg, that will add to the payload weight for movement energy as well as starting and stopping inertia. However, the flexing drive belt will eat up some (maybe a lot) of the improvement in efficiency.&lt;/li&gt;&#xA;&lt;li&gt;Pulling versus pushing force, not sure how that applies. The first uses a closed loop belt with tensioner, i.e. pulling force is all that applies. The second uses rotation-translation, no pushing there either.&lt;/li&gt;&#xA;&lt;li&gt;A belt drive with a spring loaded tensioner will significantly damp vibration of the motor, except in the odd chance of the motor hitting a resonant harmonic frequency of the belt assembly (can't quite see that happening).&lt;/li&gt;&#xA;&lt;li&gt;Lower inertia = lower stress on motor. So clearly the first version is better, see above.&lt;/li&gt;&#xA;&lt;li&gt;For vertical pulling, a belt drive instinctively feels safer: Dust getting between rollers and slide, or the powered rollers wearing out, may cause the entire assembly to slide down under gravity. Of course, this safety is illusory, as the drive belt could break too. Adding an auto-brake design to protect against slippage or breakage (like some elevators have) just adds complication. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="109" LastActivityDate="2014-09-18T18:39:10.763" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4585" PostTypeId="2" ParentId="4583" CreationDate="2014-09-18T20:58:41.267" Score="1" Body="&lt;p&gt;Depending on what your actual use case is, you might be able to use &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Stereo cameras: Needs more processing power on board, usually smaller field of view &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Kinect&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;There are some kickstarter projects that promise some low cost alternatives as well. &lt;a href=&quot;https://www.kickstarter.com/projects/1108292587/99-lidar-project&quot; rel=&quot;nofollow&quot;&gt;Example&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7000" LastActivityDate="2014-09-18T20:58:41.267" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4586" PostTypeId="2" ParentId="4583" CreationDate="2014-09-19T04:05:15.153" Score="2" Body="&lt;p&gt;Your cheapest option will probably be to use a ultrasonic sensor on a stepper, by advancing the server one step and reading the distance. The only downside to this will be the resolution you can get, which will be depend on your ultrasonic sensor. Another thing to consider is that ultrasonic waves don't work well on curved surfaces so the accuracy could decrease if you were detecting say a ball.&lt;/p&gt;&#xA;" OwnerUserId="7116" LastActivityDate="2014-09-19T04:05:15.153" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="4587" PostTypeId="1" AcceptedAnswerId="4737" CreationDate="2014-09-19T18:50:58.900" Score="1" ViewCount="230" Body="&lt;p&gt;I need two state linear actuator. You can have a look at the picture to understand what I mean. &lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;Don't care about the hand !&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Qh9s1.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Qh9s1.jpg&quot; alt=&quot;mit inform project&quot;&gt;&lt;/a&gt;&lt;br&gt;&#xA;&lt;sub&gt;(source: &lt;a href=&quot;https://www.robaid.com/wp-content/gallery/mit/mit-inform-system-1.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;robaid.com&lt;/a&gt;)&lt;/sub&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need to electrically move the things like this squares up and down. Bidirectional linear actuators are needed.&#xA;What is the cheapest and tiniest actuator (or sth else) that I can use to move this squares up and down. There are just two states ('up','down'). Don't care how much higher a square rises, when it is up.&lt;/p&gt;&#xA;" OwnerUserId="7120" LastEditorUserId="15160" LastEditDate="2019-02-27T13:16:23.643" LastActivityDate="2019-02-27T13:16:23.643" Title="Two State Linear Actuator" Tags="&lt;actuator&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="4589" PostTypeId="1" AcceptedAnswerId="4598" CreationDate="2014-09-20T18:03:04.427" Score="1" ViewCount="217" Body="&lt;p&gt;I am implementing a particle filter in Java. The problem with my particle filter implementation is that the particles suddenly go away from the robot i.e the resampling process is choosing particles which are away from robot more than those which are near.It is like particles chase the robot, but always remain behind it. I am trying to find the root cause, but to no luck. Can anyone please help me where I am going wrong?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am adding all the imp. code snippets and also some screenshots in consecutive order to make it more clear. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Tul8Vm.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Tul8Vm.jpg&quot; alt=&quot;1&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/t04Wz.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/t04Wzm.jpg&quot; alt=&quot;2&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/5EZJZ.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/5EZJZm.jpg&quot; alt=&quot;3&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/bNqBV.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/bNqBVm.jpg&quot; alt=&quot;4&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/tibqD.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tibqDm.jpg&quot; alt=&quot;5&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Details:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am using a range sensor which only works in one direction i.e. its fixed and tells the distance from the obstacle in front. If there is no obstacle in its line of vision, then it tells the distance to boundary wall. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Code:&#xA;Calculating Range&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/*&#xA; * This method returns the range reading from the sensor mounted on top of robot. &#xA; * It uses x and y as the actual position of the robot/particle and then creates Vx and Vy as virtual x and y.&#xA; * These virtual x and y loop from the current position till some obstruction is there and tell us distance till there.&#xA; */&#xA;&#xA;private int calculateRange(double x, double y, double Vx, double Vy, int counter, int loop_counter)&#xA;{&#xA;    while(robotIsWithinBoundary(Vx, Vy))&#xA;    {&#xA;        int pace = 2;&#xA;        Vx += pace* Math.sin(Math.toRadians(robot_orientation));&#xA;        Vy += pace* Math.cos(Math.toRadians(robot_orientation));&#xA;        counter++;&#xA;        Line2D line1 = new Line2D.Double(x,y,Vx,Vy);&#xA;        if(line1.intersects(obst1))&#xA;        {&#xA;            //System.out.println(&quot;Distance to obst1:&quot;+counter);&#xA;            loop_counter++;&#xA;            break;&#xA;        }&#xA;        if(line1.intersects(obst2))&#xA;        {&#xA;            //System.out.println(&quot;Distance to obst2:&quot;+counter);&#xA;            loop_counter++;&#xA;            break;&#xA;        }&#xA;&#xA;    }&#xA;    return counter;&#xA;}&#xA;&#xA;/*&#xA; * This method tells us whether the robot/particle is within boundary or not.&#xA; */&#xA;private boolean robotIsWithinBoundary(double x, double y)&#xA;{&#xA;    boolean verdict = true;&#xA;    if(x&amp;gt;680||x&amp;lt;0)&#xA;    {&#xA;        verdict = false;&#xA;    }&#xA;    if(y&amp;lt;0||y&amp;gt;450)&#xA;    {&#xA;        verdict = false;&#xA;    }&#xA;    return verdict;&#xA;}   /*&#xA; * This method returns the range reading from the sensor mounted on top of robot. &#xA; * It uses x and y as the actual position of the robot/particle and then creates Vx and Vy as virtual x and y.&#xA; * These virtual x and y loop from the current position till some obstruction is there and tell us distance till there.&#xA; */&#xA;private int calculateRange(double x, double y, double Vx, double Vy, int counter, int loop_counter)&#xA;{&#xA;    while(robotIsWithinBoundary(Vx, Vy))&#xA;    {&#xA;        int pace = 2;&#xA;        Vx += pace* Math.sin(Math.toRadians(robot_orientation));&#xA;        Vy += pace* Math.cos(Math.toRadians(robot_orientation));&#xA;        counter++;&#xA;        Line2D line1 = new Line2D.Double(x,y,Vx,Vy);&#xA;        if(line1.intersects(obst1))&#xA;        {&#xA;            //System.out.println(&quot;Distance to obst1:&quot;+counter);&#xA;            loop_counter++;&#xA;            break;&#xA;        }&#xA;        if(line1.intersects(obst2))&#xA;        {&#xA;            //System.out.println(&quot;Distance to obst2:&quot;+counter);&#xA;            loop_counter++;&#xA;            break;&#xA;        }&#xA;&#xA;    }&#xA;    return counter;&#xA;}&#xA;&#xA;/*&#xA; * This method tells us whether the robot/particle is within boundary or not.&#xA; */&#xA;private boolean robotIsWithinBoundary(double x, double y)&#xA;{&#xA;    boolean verdict = true;&#xA;    if(x&amp;gt;680||x&amp;lt;0)&#xA;    {&#xA;        verdict = false;&#xA;    }&#xA;    if(y&amp;lt;0||y&amp;gt;450)&#xA;    {&#xA;        verdict = false;&#xA;    }&#xA;    return verdict;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Calculating Weights&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/*&#xA; * This method calculates the importance weights for the particles based on the robot_range which is &#xA; * the reading of the range sensor for the robot.&#xA; */&#xA;private double measurementProbability(int index)&#xA;{&#xA;    double probability=1;&#xA;    double particle_x_position=particleListX.get(index);&#xA;    double particle_y_position=particleListY.get(index);&#xA;    double particle_Vx=particle_x_position;&#xA;    double particle_Vy=particle_y_position;&#xA;    int range_counter=0;&#xA;    int loop_counter=0;&#xA;&#xA;    int distance = calculateRange(particle_x_position, particle_x_position, particle_Vx, particle_Vy ,range_counter, loop_counter); &#xA;    probability *= calculateGaussianDistance(distance, senseNoise, robot_range);&#xA;    //System.out.println(probability);          &#xA;    return probability;&#xA;}&#xA;&#xA;private double calculateGaussianDistance(double mu, double sigma, double x )&#xA;{&#xA;    double gDistance=Math.exp(-(((Math.pow((mu - x),2))/(Math.pow(sigma,2)) / 2.0) / (Math.sqrt(2.0 * Math.PI * (Math.pow(sigma,2))))));&#xA;    return gDistance;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Resampling&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/*&#xA; * This method provides a resampled particle back to the list. It chooses a particle randomly &#xA; * from the list based on the weights with replacement.&#xA; */&#xA;private int giveResampledParticle()&#xA;{&#xA;    int index = randomInteger(0, n-1);&#xA;    double sample =0.0;&#xA;    double maxWeight = maximumWeight();&#xA;&#xA;    sample += randomDouble(0, maxWeight);&#xA;    while(sample &amp;gt; particleListProbability.get(index))&#xA;    {&#xA;        sample -= particleListProbability.get(index);&#xA;        index = (index +1) % n;&#xA;    }&#xA;    return index;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="6943" LastEditorUserId="350" LastEditDate="2014-09-22T18:21:11.720" LastActivityDate="2014-09-22T18:21:11.720" Title="Particles not behaving correctly in the implementation of particle filter" Tags="&lt;localization&gt;&lt;particle-filter&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4590" PostTypeId="2" ParentId="4579" CreationDate="2014-09-20T20:01:38.930" Score="2" Body="&lt;p&gt;Good job writing a test program that shows lots of data -- that's an excellent first step in figuring out what's going on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With two physical motors, there is always going to be at least a little internal difference between them -- slightly different internal winding resistance, slightly different internal bearing friction -- which is often negligible compared to differences in the external loads applied to them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So when driving two DC motors with exactly the same PWM, the actual physical rotation speed is always going to be slightly different.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's why many robot setup manuals have a &quot;Calibration for Straight Line Travel&quot; procedure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sometimes people walk in circles, perhaps for similar reasons. &lt;a href=&quot;http://news.nationalgeographic.com/news/2009/08/090820-walk-in-circles-video-ap.html&quot; rel=&quot;nofollow&quot;&gt;(a)&lt;/a&gt; &lt;a href=&quot;http://scienceblogs.com/notrocketscience/2009/08/20/do-lost-people-really-go-round-in-circles/&quot; rel=&quot;nofollow&quot;&gt;(b)&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&quot;robots that have a separate motor for each wheel is that driving in a&#xA;  perfectly straight line  can be difficult. If the motors run at just&#xA;  slightly different speeds, your robot will tend to drive in a large&#xA;  circle  when you want it to go straight. The NXT is able to overcome&#xA;  this problem by using motors with rotation  sensors built in, allowing&#xA;  you to synchronise them.&quot;&#xA;  -- Ross Crawford. &lt;a href=&quot;http://bricxcc.sourceforge.net/nbc/doc/NBC_tutorial.pdf&quot; rel=&quot;nofollow&quot;&gt;&quot;Programming Lego Robots&quot;&lt;/a&gt;. p. 30&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;After working with robots for a while, you'll figure out ways of debugging a problem.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Y cable test&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;If I were you I would run a Y cable test:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;make a test Y cable so the A output of a single quadrature encoder is connected to &lt;em&gt;both&lt;/em&gt; your Arduino encoder0PinA pin and encoder1pinA pin (2 and 3), and likewise for the B pins.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;With that Y cable, you know that what the Arduino sees as encoder0 and what the Arduino sees as encoder1 are spinning at exactly the same physical speed, since it's the same physical encoder.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That test helps me narrow down the problem:&#xA;If a Y cable test with your test program still shows encoder0Pos and encoder1Pos are diverging,&#xA;then there's a software problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand,&#xA;if a Y cable test with your test program shows encoder0Pos and encoder1Pos are always identical to each other,&#xA;then the divergence you saw in the 2-motor test may be normal.&#xA;We expect from normal physical variations from one motor to another to lead to slightly different speeds when driven by exactly the same PWM.&#xA;The data you gave shows the difference in speed to be less than 1%.&#xA;That is excellent matching.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Swap testing&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Often when one system acts differently from another allegedly &quot;identical&quot; system, people swap one small part of the system back and forth to see if the problem &quot;follows&quot; the thing that was swapped or if it stays behind.&#xA;Currently the &quot;slow&quot; one is the one plugged into encoder1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I were you, I might do a series of tests something like&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&quot;If ... your robot is not going straight, try swapping the wheels and see if it deviates into the other direction. That would indicate a small difference in wheel size. Adjust wheel size accordingly.&quot; -- &lt;a href=&quot;http://www.lejos.org/nxt/nxj/api/lejos/robotics/navigation/DifferentialPilot.html&quot; rel=&quot;nofollow&quot;&gt;Lejos: DifferentialPilot&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Unplug everything connected to motor0 and motor1, swap them, and plug them back in. Then test: Is motor1 still the slow one, or is motor0 now the slow one?&lt;/li&gt;&#xA;&lt;li&gt;Unplug everything connected to the motor0 driver circuit, swap it with the motor1 driver circuit, and then plug them back in. Then test: is the motor1 driver circuit still associated with the slow one, or is the motor0 driver circuit now the slow one?&lt;/li&gt;&#xA;&lt;li&gt;etc.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="187" LastActivityDate="2014-09-20T20:01:38.930" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4591" PostTypeId="1" CreationDate="2014-09-20T20:47:04.037" Score="0" ViewCount="819" Body="&lt;p&gt;I am trying to write a simple program where the robot(Lego NXT2) will follow a blue line.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#pragma config(Sensor, S1,     ,               sensorCOLORBLUE)&#xA;//!!Code automatically generated by 'ROBOTC' configuration wizard               !!//&#xA;&#xA;task main()&#xA;{&#xA;    while(true)&#xA;    {&#xA;        if(SensorValue[S1] == sensorCOLORBLUE)&#xA;        {&#xA;            motor[motorB] = 0;&#xA;            motor[motorC] = -50;&#xA;        }&#xA;        else&#xA;        {&#xA;            motor[motorB] = -50;&#xA;            motor[motorC] = 0;&#xA;        }&#xA;    }&#xA;    wait1Msec(1);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I am using an nxt color sensor and the problem is that only 1 motor is moving. I know that none of the motors are broken either because I tested them out.&#xA;Can somebody help me diagnose my problem?&lt;/p&gt;&#xA;" OwnerUserId="7125" LastEditorUserId="158" LastEditDate="2014-10-24T16:43:26.223" LastActivityDate="2017-03-09T15:48:05.533" Title="Robotc color sensor error" Tags="&lt;sensors&gt;&lt;robotc&gt;" AnswerCount="3" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4592" PostTypeId="1" AcceptedAnswerId="4597" CreationDate="2014-09-21T12:16:38.743" Score="4" ViewCount="2611" Body="&lt;p&gt;Simply, when to use brushless dc motor and when to use Servo Motor ? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;what are the differences , specially when adding an encoder to the dc motor you can have the position and it will be similar to Servo Motor ? &lt;/p&gt;&#xA;" OwnerUserId="6973" LastActivityDate="2019-06-15T11:33:06.307" Title="For robot wheel control : Brushless DC motor or Servo Motor?" Tags="&lt;motor&gt;&lt;brushless-motor&gt;&lt;servomotor&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4593" PostTypeId="2" ParentId="3071" CreationDate="2014-09-21T12:22:35.297" Score="0" Body="&lt;p&gt;This is might not be an answer but check out this book &lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/B00BEZNHGY&quot; rel=&quot;nofollow&quot;&gt;Robotic Navigation and Mapping with Radar &lt;/a&gt; page 126.  They discuss  the Mahalanobis distance better than what stated in Probabilistic Robotics. Also, they mention why this method also known as the Nearest Neighbor (NN) is not a good solution in some situations and they state another solutions. &lt;/p&gt;&#xA;" OwnerUserId="2155" LastActivityDate="2014-09-21T12:22:35.297" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4594" PostTypeId="2" ParentId="4591" CreationDate="2014-09-21T17:18:44.947" Score="1" Body="&lt;p&gt;Someone who owns a Lego NXT2 system may be able to check your code and provide a good answer.&lt;/p&gt;&#xA;&lt;p&gt;Meanwhile, load some of the color sensor programs from the following links, run them with the sensor pointed at known colors, and edit your question to report whether your color sensor is working properly.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;code&gt;Color Range Block v1.0&lt;/code&gt; from &lt;a href=&quot;http://www.teamhassenplug.org/NXT/NXTGAdditions.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;teamhassenplug.org&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;G1-FindColor, G2-SumoColor&lt;/code&gt;, etc from     &lt;a href=&quot;http://www.nxtprograms.com/NXT2/multi-bot/color.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;nxtprograms.com&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Also see &lt;a href=&quot;http://www.philohome.com/colcomp/cc.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;philohome.com&lt;/a&gt;'s  “Color Sensors Showdown” page.&lt;/p&gt;&#xA;" OwnerUserId="478" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2014-09-21T17:18:44.947" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4595" PostTypeId="1" AcceptedAnswerId="4646" CreationDate="2014-09-21T20:33:06.203" Score="5" ViewCount="598" Body="&lt;p&gt;I am on a robotics team that plans to compete in a competition where one of the rules is that no sort of sonic sensor is allowed to be used. I guess that limits it to some sort of EM frequency right?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ideally, my team is looking for a simple beacon system, where beacon A  would be attached to the robot, while beacon B would be attached to a known point on the competition space. Then, beacon A can give information about how far away B is. After some searching, I could only turn up laser rangefinders that required pointing at the target. I am a CS student, so I'm not familiar with the terminology to aid searches.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another nice property would be if the beacons also gave the angle of beacon A in beacon B's field of view, although this is not necessary, since multiple beacons could be used to obtain this information.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We have an Xbox 360 Kinect working, and able to track things and give distances, but it looses accuracy over distance quickly (the arena is about 6 meters long), and this beacon should be as simple as possible. We ONLY need it for a relative position of our robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Alternate Solution:&lt;/em&gt;&lt;/strong&gt;&#xA;Another way to solve this would be for an omni-directional beacon to only give angle information, two of these could be used to triangulate, and do the job just as well.&lt;/p&gt;&#xA;" OwnerUserId="7131" LastActivityDate="2016-08-26T10:34:20.047" Title="Do simple, non-sonic, omni-directional rangefinding beacons exist?" Tags="&lt;localization&gt;&lt;electronics&gt;&lt;laser&gt;&lt;rangefinder&gt;" AnswerCount="4" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4597" PostTypeId="2" ParentId="4592" CreationDate="2014-09-22T04:27:38.557" Score="7" Body="&lt;p&gt;Let's try and clear things up a little bit...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&quot;RC Servo&quot; motors&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These can be found in radio controlled cars and airplanes to e.g. turn the wheel or actuate various controls in the airplane.  They are pretty cheap brushed DC motors, with gears and some sort of crude feedback mechanism.  They typically convert an input voltage into a position within a given range. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/XuGxQ.jpg&quot; alt=&quot;Exploded Servo&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&quot;Exploded Servo&quot; by oomlout - Exploded Servo. Licensed under Creative Commons Attribution-Share Alike 2.0 via Wikimedia Commons&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Brushless DC motors&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Brushed motors rely on &quot;brushes&quot; for commutation to drive current through the rotating motor coils.  In a brushless motor in contrast the coils are fixed and potentially some sort of feedback mechanism is used to control the current through those coils to rotate the motor.  Brushless motors can also be run open loop (e.g. stepper motors).  The DC is a bit of a misnomer as the motors themselves run on AC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Brushless DC Servo aka &quot;Servo Motor&quot;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These would be typically found in applications such as industrial robots or CNC machines.  They come in a very wide range of sizes and power.  They are a combination of a BLDC motor with a rotary encoder, a hall effect sensor or both.  They are meant to be used with a closed-loop controller.  Pretty much any type of motor can be used in a closed loop servo but since those are more commonly used in that sort of application the term &quot;servo motor&quot; stuck.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/2QzoA.jpg&quot; alt=&quot;Brushless servo motors&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&quot;3417 09 Servogetriebe&quot; by SEW-EURODRIVE GmbH &amp;amp; Co KG. Original uploader was Sewmecm at de.wikipedia - Transferred from de.wikipedia; transferred to Commons by User:Brackenheim using CommonsHelper.(Original text : SEW-EURODRIVE GmbH &amp;amp; Co KG). Licensed under Creative Commons Attribution-Share Alike 3.0 via Wikimedia Commons&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;For driving a robot wheel you could consider:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A DC brush motor with no rotor position feedback (cheapest).&lt;/li&gt;&#xA;&lt;li&gt;A DC brush motor with feedback and some sort of controller.&lt;/li&gt;&#xA;&lt;li&gt;A brushless DC motor with electronic speed control (such as the one you'd find in a quadcopter).  These are quite different than the industrial BLDCs mentioned above and I won't go into the details.  They can be had relatively cheaply due to the popularity of all these &quot;toys&quot; and are pretty high performance.&lt;/li&gt;&#xA;&lt;li&gt;A more industrial BLDC/encoder combination with a closed loop controller.  Those would probably be the most expensive option.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="1584" LastEditorUserId="1584" LastEditDate="2014-09-22T04:39:05.897" LastActivityDate="2014-09-22T04:39:05.897" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4598" PostTypeId="2" ParentId="4589" CreationDate="2014-09-22T09:14:29.483" Score="2" Body="&lt;p&gt;Your function &lt;code&gt;calculateRange()&lt;/code&gt; uses a variable &lt;code&gt;robot_orientation&lt;/code&gt; which I cannot see from your code snippets that it is set or changed. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would expect something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;double particle_orientation = particleListOrientation.get(index);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;inside your function &lt;code&gt;measurementProbability()&lt;/code&gt; and then call &lt;code&gt;calculateRange()&lt;/code&gt; with that additional parameter.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;private int calculateRange(double x, double y, double robot_orientation)&#xA;{&#xA;    double Vx = x, double Vy = y;&#xA;    int pace = 2;&#xA;    int counter = 0;&#xA;    while(robotIsWithinBoundary(Vx, Vy))&#xA;    {&#xA;        Vx += pace* Math.sin(Math.toRadians(robot_orientation));&#xA;        Vy += pace* Math.cos(Math.toRadians(robot_orientation));&#xA;        counter++;&#xA;        Line2D line1 = new Line2D.Double(x,y,Vx,Vy);&#xA;        if(line1.intersects(obst1))&#xA;        {&#xA;            break;&#xA;        }&#xA;        if(line1.intersects(obst2))&#xA;        {&#xA;            break;&#xA;        }&#xA;&#xA;    }&#xA;    return counter*pace;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="7133" LastEditorUserId="7133" LastEditDate="2014-09-22T12:13:04.083" LastActivityDate="2014-09-22T12:13:04.083" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4599" PostTypeId="1" AcceptedAnswerId="5173" CreationDate="2014-09-22T16:17:19.073" Score="4" ViewCount="1865" Body="&lt;p&gt;In EKF-SLAM (based-feature map) once the robot senses a new landmark, it is augmented to state vector. As a result, the size of the state vector and the covariance matrix are expanded. My question is about the uncertainty of the new landmark and its correlation with other pairs of the covariance matrix. How should I assign them? When I assign them to be zero, the error of the estimation this landmark won't change as time goes. If I assign them with very large value, the estimation is getting better every time the robot reobserves this landmark however, the error approaches to fixed value not to zero. I assume the problem id with assigning the uncertainty. Any suggestions?&lt;/p&gt;&#xA;" OwnerUserId="2155" LastActivityDate="2015-04-13T18:29:11.950" Title="the uncertainty of initializing new landmark in EKF-SLAM" Tags="&lt;slam&gt;&lt;ekf&gt;&lt;errors&gt;&lt;mapping&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4601" PostTypeId="2" ParentId="4599" CreationDate="2014-09-22T17:51:06.933" Score="1" Body="&lt;p&gt;I don't have experience with SLAM specifically, but I do have a lot of EKF experience so here's my input.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Stick with your second approach. It is normal for the error to approach a non-zero steady-state value. This number can be calculated analytically for nominal cases, but I don't remember the math right now and would probably be too complicated anyhow once you start to include the covariances with all the other landmarks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Don't worry too much about what specific value you should initialize the covariance to. In the simplest case, just set the variance to some nominal value based on your sensor noise level and use 0 covariance with the other landmarks. Over time the EKF update steps should adjust things to their &quot;proper&quot; values (assuming your initial values were at least in the ballpark).&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2014-09-22T17:51:06.933" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4602" PostTypeId="2" ParentId="4545" CreationDate="2014-09-22T18:31:16.963" Score="0" Body="&lt;p&gt;I don't have experience connecting a PS3 controller to an Arduino board, but if you can work out a computer-arduino connection then you can use &lt;a href=&quot;http://www.pygame.org/news.html&quot; rel=&quot;nofollow&quot;&gt;PyGame&lt;/a&gt; to read the state of all the buttons and axes.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-09-22T18:31:16.963" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4603" PostTypeId="2" ParentId="4583" CreationDate="2014-09-22T22:49:52.483" Score="1" Body="&lt;p&gt;&lt;a href=&quot;http://hackaday.com/2014/01/23/lidar-with-leds-for-under-100/&quot; rel=&quot;nofollow&quot;&gt;http://hackaday.com/2014/01/23/lidar-with-leds-for-under-100/&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This could be a good alternative to lidar. I dont know if it is commercially available.&lt;/p&gt;&#xA;" OwnerUserId="7137" LastActivityDate="2014-09-22T22:49:52.483" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4604" PostTypeId="2" ParentId="4583" CreationDate="2014-09-23T01:41:45.870" Score="2" Body="&lt;p&gt;I don't have enough reputation to comment, but I'll add my 2cents in an answer. Basically you're limited to lidar mapping if you want any decent fidelity. Stereoscopic imaging via OpenCV in one distribution or another will be processing intensive and will take too long for any type of real-time navigation unless you're just shredding things computationally or you don't care about time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I honestly wouldn't even consider sonar modules unless you're wanting to ONLY use them for very very near obstacle detection with low fidelity (as the other user said: curved surfaces don't play nicely with ultrasonic waves). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hacking a couple of Kinects may be the best option, but you're range-limited to a closer distance than a decent lidar module. You can spend thousands on lidar modules that have a pretty phenomenal range. I should also add that there are probably people that have hacked Kinects as well to do the same task and you could even possibly rotate one around to map out complete surroundings so long as you have a computer hooked up to it to map it out and retain the point clouds that you generate.&lt;/p&gt;&#xA;" OwnerUserId="7138" LastActivityDate="2014-09-23T01:41:45.870" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4605" PostTypeId="2" ParentId="3125" CreationDate="2014-09-23T05:53:32.653" Score="3" Body="&lt;p&gt;You seem to have described something similar to the UR-5 from universal robotics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are a couple of videos worth watching to give an idea of how they are used:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=2ZaLxTAVyBQ&quot; rel=&quot;nofollow&quot;&gt;A Company Called OTV Plastic&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=5K5VYm8z4nY&quot; rel=&quot;nofollow&quot;&gt;Brief glimpse of a couple dozen applications&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's plenty more videos out there too (including BMW's factories where they use the UR-5), but I just joined this StackExchange site so I can't post more than 2 links. Many of these applications use different attachments than the 3 fingered hand you describe, but this should still give you a good idea.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anywhere the production line has a place where an object needs to repetitively be grabbed and moved or repositioned, your robot could be used. It could be used for packing products at the end of the assembly line. Depending on accuracy and repeatability, it could be used for assembling small parts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The nice thing about being programmed as you described is that it doesn't take a dedicated programmer on staff when the robot needs to be re-purposed for another job. And of course the safety features are nice because standard industrial robots need to work in a space that is separated from human workers to avoid injury risk.&lt;/p&gt;&#xA;" OwnerUserId="7139" LastActivityDate="2014-09-23T05:53:32.653" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4606" PostTypeId="2" ParentId="4545" CreationDate="2014-09-23T06:40:14.950" Score="1" Body="&lt;p&gt;If you want to do this on your own, you need additional hardware:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A arduino with an USB-Host (Mega will not work) or an shield which provides the USB-Host&lt;/li&gt;&#xA;&lt;li&gt;A Bluetooth dongle&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;On your Arduino you will have to run the &lt;a href=&quot;https://github.com/felis/USB_Host_Shield_2.0/tree/master/examples/Bluetooth/PS3BT&quot; rel=&quot;nofollow&quot;&gt;PS3BT&lt;/a&gt;&#xA;You have to know the MAC adress of your BT-dongle. This can be obtained in two ways:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Most simple: It is written on the dongle itself&lt;/li&gt;&#xA;&lt;li&gt;Or you have to run the script and the MAC should be displayed over SerialMonitor&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;If you have the address then you have to comment the line 19 in the code and uncomment line 20. Additionally you have to enter your MAC address in the line 20.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then unplug the dongle from the arduino, plug in the PS3 controller via USB and reset the arduino. The controller will be paired with the dongle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now plug in the dongle again and pair the controller (pressing the playstation button). It should work from here on. The script just prints the inputs from the controller to the serial monitor. Then you just have to implement all the rest of your code.&lt;/p&gt;&#xA;" OwnerUserId="6911" LastEditorUserId="6911" LastEditDate="2014-09-24T05:14:40.660" LastActivityDate="2014-09-24T05:14:40.660" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="4607" PostTypeId="1" CreationDate="2014-09-23T07:31:19.133" Score="2" ViewCount="127" Body="&lt;p&gt;For my quadcopter, i turn on the quadcopter while letting it stable on the ground. But i see that the Roll, Pitch fluctuate with the max difference being 15 degree. When i protect the sensor with soft material, then i observe the max difference is around 6 degree. Is this fluctuation for the quadcopter? By the way, i use complementary filter and DCM with scaling factor being 0.8 gyro and 0.2 accel&#xA;Thanks in advance!&lt;/p&gt;&#xA;" OwnerUserId="7038" LastActivityDate="2014-09-24T09:39:59.620" Title="Quadcopter Roll, Pitch Fluctuation" Tags="&lt;quadcopter&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4608" PostTypeId="1" AcceptedAnswerId="4624" CreationDate="2014-09-23T08:48:34.900" Score="7" ViewCount="130" Body="&lt;p&gt;I'm trying to control a plane via roll  using PID controller , &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I had a problem finding the transfer function thus I used the following method :- &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Fix the plane in an air tunnel &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;change the motor that controls the roll in fixed steps and check the&#xA;  roll &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;thus I will have a table of roll/motor degree &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;next is to deduce the nonlinear function using wolfram alpha or&#xA;  approximation neural network  .&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Is this a correct method or should I try another method ? &lt;/p&gt;&#xA;" OwnerUserId="6973" LastEditorUserId="6973" LastEditDate="2014-09-25T09:23:06.230" LastActivityDate="2014-09-29T14:57:41.897" Title="Deducing single wing plane transfer function Aka Transfer function estimation through set of points" Tags="&lt;pid&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4609" PostTypeId="1" AcceptedAnswerId="4616" CreationDate="2014-09-23T08:53:09.560" Score="4" ViewCount="288" Body="&lt;p&gt;I've been using mpu6050 IMU unit ( gyro + accelerometer  ) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found that I can set acc range to +/- 2g or 4g till 16 g &lt;/p&gt;&#xA;&#xA;&lt;p&gt;and same for gyro +/- 250 deg/sec , 500 deg/sec and so &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that they are low cost and full noise , so which settings to the range are best to ensure higher accuracy ? &lt;/p&gt;&#xA;" OwnerUserId="6973" LastActivityDate="2014-09-24T10:22:45.653" Title="Is increasing gyro , accelerometer sensor range is good or bad ? how does it affect the accuracy" Tags="&lt;sensors&gt;&lt;imu&gt;&lt;accelerometer&gt;&lt;gyroscope&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4610" PostTypeId="1" CreationDate="2014-09-23T17:25:28.867" Score="9" ViewCount="5636" Body="&lt;p&gt;I am trying to compute forward kinematics of the Kuka youBot using DH convention: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.youbot-store.com/youbot-developers/software/simulation/kuka-youbot-kinematics-dynamics-and-3d-model&quot;&gt;http://www.youbot-store.com/youbot-developers/software/simulation/kuka-youbot-kinematics-dynamics-and-3d-model&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The arm joint 1 and arm joint 5 are revolute and rotate about the world z-axis (pointing to the sky)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the other 3 joints are all revolute and rotate about x-axis, let's say (points horizontally)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DH convention says the &quot;joint distance&quot; is along the &quot;common normal&quot;. But unless I am mistaken, the only common normal is the y-axis, and that is also horizontal, meaning there is no joint distance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was thinking I would use link offset for joint1 - joint2, but then I ran into a problem with joint4 - joint5. Link offset is supposed to be along the previous z-axis, and in that case it would point horizontally out to nowhere. But link distance STILL doesn't work either, because that is the common normal distance, and as established the common normal is x-axis, also horizontal. So now I feel very screwed. I am sure there is a simple solution but I can't see it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I guess the question is, how do I use the DH convention for the links between 1-2 and 4-5, when the joint rotational axes are perpendicular?&lt;/p&gt;&#xA;" OwnerUserId="7142" LastEditorUserId="110" LastEditDate="2015-02-15T17:55:53.940" LastActivityDate="2015-11-04T09:00:02.323" Title="Forward Kinematics/D-H parameters for perpendicular joint axes" Tags="&lt;kinematics&gt;&lt;forward-kinematics&gt;&lt;dh-parameters&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4611" PostTypeId="2" ParentId="4607" CreationDate="2014-09-23T18:51:24.873" Score="0" Body="&lt;p&gt;What imu combination do you use to measure the roll and pitch? Do you use a fusion algorithm to correct for drift? Personally I think the drift values that you report are far to big.&lt;/p&gt;&#xA;" OwnerUserId="7137" LastActivityDate="2014-09-23T18:51:24.873" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4612" PostTypeId="1" CreationDate="2014-09-24T05:29:45.113" Score="4" ViewCount="1006" Body="&lt;p&gt;I am designing a experiment of controlling 6 small wind turbines wirelessly. For each wind turbine, I need to measure power time series (or voltage or current time series) from the generator, and control blade pitch angle, yaw angle, and generator load (using variable resistance). The control input will be all PWM signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am planning to put an Arduino UNO with a ZigBee wireless module to each wind turbine, making it measure the power time series and transmit to the central node, as well as receive the control input from the central node and command the control input to servo motors. The central node will be additional Arduino UNO.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are my questions:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it possible for each Arduino to send time series signal to central node wirelessly without interference with other Arduino? (6 wind turbines transmitting time series to a central server). If it is possible, How can I implement such network ? recommending a source for learning would be also greatly helpful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Interface between the central node and the computer software: The algorithm in the computer need to process the received power time series and determine the optimum control input for 6 wind turbines. Then these control input should be transmitted to wirelessly to 6 wind turbines. In such case, what is the good option to interface the algorithm and the Arduino connected to the computer? Currently the algorithm is written in Matlab. I heard there is the sketch interfacing Arduino and Matlab, is it efficient enough for such project?&lt;/p&gt;&#xA;" OwnerUserId="7143" LastActivityDate="2014-09-24T09:37:42.303" Title="Controlling multiple Arduinos wirelessly" Tags="&lt;arduino&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4613" PostTypeId="2" ParentId="4612" CreationDate="2014-09-24T06:09:56.043" Score="2" Body="&lt;p&gt;Well first answer is &quot;yes&quot;&#xA;The ZigBee-Standard allows multiple slaves in one network. The master or coordinator can send the specific xbees or send broadcasts...&#xA;you have to figure out which one is easier. both methods are possible...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;the interface will be a problem. The zigbees are connected with the uart interface to your arduino but the arduino uno uses the same interface to the computer (if you use the usb-port)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You need there two different uart interfaces on your board (arduino mega or arduino due)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are two possible ways to interface matlab with your arduino.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;using the matlab interface &lt;a href=&quot;http://www.mathworks.de/de/help/supportpkg/arduinoio/examples/getting-started-with-matlab-support-package-for-arduino-hardware.html?prodcode=ML&quot; rel=&quot;nofollow&quot;&gt;matlab interface&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;exporting simulink code directly to the board (this can run on it's own)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This depends on the computation power which is needed. If you export the simulink code, then i strongly recommend buying the due, 'cause of his great computation power&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to read more about the matlab interface &lt;a href=&quot;http://playground.arduino.cc/Interfacing/Matlab&quot; rel=&quot;nofollow&quot;&gt;link&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="6911" LastActivityDate="2014-09-24T06:09:56.043" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4614" PostTypeId="2" ParentId="4612" CreationDate="2014-09-24T09:37:42.303" Score="2" Body="&lt;p&gt;For your problem , &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yes every arduino can connect the central node without connecting to the other Arduino &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I recommend to use a good high speed Arduino version for the central node like Due or Teensy &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also for communication handling I prefer to check out Arduino Wireless Sensor Network systems like &lt;a href=&quot;https://code.google.com/p/arduinode/&quot; rel=&quot;nofollow&quot;&gt;https://code.google.com/p/arduinode/&lt;/a&gt; or this www.youtube.com/watch?v=dsiae9x2Ckk &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For Computer Interface , a good GUI application using C# or python with Serial communication module to handle requests from /to central Node, you can also use Processing to handle such a case &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: I'm sure you are using Xbee module not &quot;Zigbee&quot; ...... &lt;/p&gt;&#xA;" OwnerUserId="6973" LastActivityDate="2014-09-24T09:37:42.303" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4615" PostTypeId="2" ParentId="4607" CreationDate="2014-09-24T09:39:59.620" Score="3" Body="&lt;p&gt;Very nice question , &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Kindly check EMF and make sure to isolate the MPU9150 from any EMF and Make sure that it's temperature is Stable and change in the temperature will lead to huge drift in reading regardless the filter you are using &lt;/p&gt;&#xA;" OwnerUserId="6973" LastActivityDate="2014-09-24T09:39:59.620" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4616" PostTypeId="2" ParentId="4609" CreationDate="2014-09-24T10:22:45.653" Score="2" Body="&lt;p&gt;The smaller the range, the more sensitive the device will be. So, in that sense, a smaller range is better. However, the downside of a smaller range is that movement of the robot will be more likely to exceed the range of the sensor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should select the smallest range which you're sure will never be exceeded by normal operation of your robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or, the smallest range within which you want the robot to be under control. I.E. the range might be exceeded during a crash, but at that point control is pretty irrelevant.&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2014-09-24T10:22:45.653" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4618" PostTypeId="2" ParentId="3125" CreationDate="2014-09-24T15:00:08.910" Score="1" Body="&lt;p&gt;It sounds like you have a solution in search of a problem...  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Autonomy, online path planning, and general object classification have been slow (if at all) to be used in manufacturing.  The reason is because in manufacturing you know exactly which parts are coming down the line, where they will be and when.  You also have almost complete control over the environment, colors, lighting, keeping humans away, etc.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That being said, some companies are trying to make inroads to the light-manufacturing area.  Universal Robotics mentioned by Warren is one company, Rethink Robotics (&lt;a href=&quot;http://www.rethinkrobotics.com/&quot; rel=&quot;nofollow&quot;&gt;http://www.rethinkrobotics.com/&lt;/a&gt;) is another.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-09-24T15:00:08.910" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4620" PostTypeId="2" ParentId="4610" CreationDate="2014-09-25T01:24:51.277" Score="0" Body="&lt;p&gt;This &lt;a href=&quot;https://www.youtube.com/watch?v=rA9tm0gTln8&quot; rel=&quot;nofollow&quot;&gt;YouTube video&lt;/a&gt; by TekkotsuRobotics does a great job at explaining how to specify DH parameters, including what to do when you have parallel axes of rotation.  Also note that different textbooks have slightly different notations regarding which joint and link the parameters apply to.  So you should stick with the convention of your professor, school, textbook, etc.  This paper: &quot;&lt;a href=&quot;http://profesores.usfq.edu.ec/laurents/IME440/DETC2005-85460_DenavitHartenberg.pdf&quot; rel=&quot;nofollow&quot;&gt;Lipkin 2005: A Note on Denavit-Hartenberg Notation in Robotics&lt;/a&gt;&quot; explains the 3 main DH parameter conventions and how they differ.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-09-25T01:24:51.277" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4621" PostTypeId="2" ParentId="4486" CreationDate="2014-09-25T07:59:26.340" Score="1" Body="&lt;p&gt;This problem is not specific to Ackerman steering but comes up with any model if you try to describe its motion as following a circle of certain radius: A straight line is equivalent to a circle with radius $r \to \infty$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is usually not a big problem, though: Just write down the equations of motion. If you want to evaluate these for driving straight, you will find a term that evaluates to &quot;$\frac{0}{0}$&quot; in this case (i.e. an &lt;a href=&quot;http://en.wikipedia.org/wiki/Indeterminate_form&quot; rel=&quot;nofollow&quot;&gt;indeterminate form&lt;/a&gt;). You can still compute the limit using &lt;a href=&quot;http://en.wikipedia.org/wiki/L%27H%C3%B4pital%27s_rule&quot; rel=&quot;nofollow&quot;&gt;L'Hôpital's rule&lt;/a&gt; and come up with a numerically sane equation for this special case.&lt;/p&gt;&#xA;" OwnerUserId="4531" LastActivityDate="2014-09-25T07:59:26.340" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4622" PostTypeId="2" ParentId="4573" CreationDate="2014-09-25T08:24:49.547" Score="1" Body="&lt;p&gt;When you have to multiply so many (often low) probability values or in this case probability densities, you are bound to get in trouble because of limited floating-point accuracy. It is advisable to instead sum up their logarithms, since this will give you a more accurate result.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\log p\left(z_t|x_t,m \right)=\sum_{i=1}^{n} \log p'\left(z_i|x_t,m \right)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you try to compute the probability $p\left(z_t|x_t,m \right)$ by exponentiating its logarithm above, you will most likely still get 0. But in a particle filter, you can arbitrarily scale the measurement model likelihoods (weights are later normalized anyway), which corresponds to adding the same constant to the logarithms above for each particle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What amcl does is a dirty hack that seems to work well but has no probabilistic foundation as far as I can tell.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;My query is how to get probability normalised and not zero with single calculation (i.e image in case of single particle)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Use logarithms as shown above, but check whether you really need the actual probability (density), since it will be dangerously close to 0.&lt;/p&gt;&#xA;" OwnerUserId="4531" LastActivityDate="2014-09-25T08:24:49.547" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4623" PostTypeId="2" ParentId="4608" CreationDate="2014-09-25T10:44:32.740" Score="2" Body="&lt;p&gt;I'm not an expert concerning aerodynamics, but I guess you are using kind of aileron to get the right roll. &lt;br&gt; So your setpoint is the roll (in degrees or something similar) and your input is the motor position (in degrees, too). &lt;br&gt; Your method was only about measuring the open-loop gain. &lt;br&gt; This won't help you in designing the PID.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now you have a Look-up-table with lot of different values. You can just look up your motor position for your target roll, BUT you cannot control the roll, therefor you need to measure the complete step-answer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IF you set your motor to a specific position your plane will not have the target roll instantaneously. The plane will roll other a period of time. This period of time may be short but it is measurable and you are interested (as a control designer) to see how the system reacts in this dynamic state.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should change your method! &lt;br&gt;&#xA;One possible solution (there are others) is identifying the system with the step-answer&#xA;You just need to measure your roll in degrees as a function of time, when you turn your motor from 0 to a specific position.&#xA;Then you can carry on with mathematica or matlab &lt;/p&gt;&#xA;" OwnerUserId="6911" LastActivityDate="2014-09-25T10:44:32.740" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4624" PostTypeId="2" ParentId="4608" CreationDate="2014-09-25T14:45:58.317" Score="6" Body="&lt;p&gt;You're correct that measurement and modeling is the right way to go about this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For your PID to work properly, you need to be able to make a somewhat linear conversion of error (desired roll vs actual roll) into corrective force (in this case, provided by the &lt;a href=&quot;http://en.wikipedia.org/wiki/Flight_control_surfaces&quot; rel=&quot;nofollow&quot;&gt;control surfaces&lt;/a&gt; -- the &lt;a href=&quot;http://en.wikipedia.org/wiki/Aileron&quot; rel=&quot;nofollow&quot;&gt;aileron&lt;/a&gt; angle, influenced by air speed and other factors). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The $k_d$ term of your PID should account for the inertia of the plane in rolling from side to side, so don't worry about that in your measurements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you &lt;em&gt;should&lt;/em&gt; measure in your wind tunnel tests is the torque on the longitudinal axis of the plane, in response to airspeed (in both X and Y axes, if you have on-board sensors for that) and aileron angle.  That will provide data on the following relationship:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\tau_{actual} = f(\theta_{\text{aileron}}, \text{airspeed}_x, \text{airspeed}_y, \text{[other measurable factors]})&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You are going to approximate the inverse of that function -- finding $\theta_{\text{aileron}}$ given $\tau_{desired}$.  Whether you do that with a neural network, wolfram alpha, multivariate regression, or a  good knowledge of physics is up to you.  In the end, you want to produce a modeling function in this form:&#xA;$$&#xA;\theta_{\text{aileron}} = f(\tau_{desired}, \text{airspeed}_x, \text{airspeed}_y, \text{[other measurable factors]})&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PID will give you $\tau_{desired}$, and your sensors will give you the other factors to plug into this function.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2014-09-29T14:57:41.897" LastActivityDate="2014-09-29T14:57:41.897" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4625" PostTypeId="1" AcceptedAnswerId="4626" CreationDate="2014-09-25T14:48:03.043" Score="10" ViewCount="3949" Body="&lt;p&gt;I was playing the old &quot;confuse the cat with a flash-light&quot; game, when I thought that I might like to program a confuse-a-cat robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Something, probably with tracks, which can right itself if he flips it over, and which I can program to move randomly around a room, turning at walls, making an occasional sound or flashing a light.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since I am on a &lt;strong&gt;&lt;em&gt;very&lt;/em&gt;&lt;/strong&gt; tight budget, I wondered if there is some cheap kit which I can program ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Arduino, Raspberry Pi, any platform, so long as it is programmable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance for your help&lt;/p&gt;&#xA;" OwnerUserId="7148" LastActivityDate="2017-07-06T19:23:11.110" Title="Seeking dirt cheap, wheeled, programmable robot" Tags="&lt;mobile-robot&gt;" AnswerCount="5" CommentCount="1" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4626" PostTypeId="2" ParentId="4625" CreationDate="2014-09-25T15:38:56.937" Score="5" Body="&lt;p&gt;You haven't define what's the limit of your budget.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, for cheap programmable robots you can use: the &lt;a href=&quot;https://www.dfrobot.com/product-65.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;DFRobot 2WD Mobile Platform&lt;/a&gt; and interface it with an Arduino Uno. You can also use a &lt;a href=&quot;https://www.pololu.com/product/975&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pololu 3pi Robot&lt;/a&gt; or even a &lt;a href=&quot;http://www.picaxe.com/Hardware/Robot-Kits/PICAXE-20X2-Microbot/&quot; rel=&quot;nofollow noreferrer&quot;&gt;PICAXE Microbot&lt;/a&gt; which is already equiped with a front bumper&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Look a this for more kits: &lt;a href=&quot;http://www.intorobotics.com/47-programmable-robotic-kits/&quot; rel=&quot;nofollow noreferrer&quot;&gt;47 Programmable Robotic Kits&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7064" LastEditorUserId="-1" LastEditDate="2017-07-06T19:23:11.110" LastActivityDate="2017-07-06T19:23:11.110" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4627" PostTypeId="1" CreationDate="2014-09-25T16:34:37.253" Score="2" ViewCount="17741" Body="&lt;p&gt;I had a Doyusha Nano Spider R/C mini-copter, it's controlled by a 4ch joystick 2.4 Ghz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I look for a low cost method to control it from the computer. The software is not a problem, but how can I transform the WIFI or the Bluetooth signal of the computer to an R/C signal compatible with the mini-copter receptor?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or is there another solution that is low cost?&lt;/p&gt;&#xA;" OwnerUserId="7064" LastEditorUserId="350" LastEditDate="2014-09-29T15:01:19.290" LastActivityDate="2016-10-25T22:12:11.870" Title="Control a 2.4 Ghz AR Drone from the computer" Tags="&lt;control&gt;&lt;quadcopter&gt;&lt;wireless&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="2" ClosedDate="2016-10-27T14:16:17.150" ContentLicense="CC BY-SA 3.0" />
  <row Id="4630" PostTypeId="2" ParentId="4625" CreationDate="2014-09-25T19:44:12.910" Score="8" Body="&lt;p&gt;Did you say &lt;em&gt;dirt&lt;/em&gt;?  May I recommend a &lt;a href=&quot;http://hackingroomba.com&quot;&gt;Roomba&lt;/a&gt;?&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It has wheels and tracks.&lt;/li&gt;&#xA;&lt;li&gt;A cat wouldn't be able to flip it over.&lt;/li&gt;&#xA;&lt;li&gt;It already knows how to move randomly around a room, turning at walls.&lt;/li&gt;&#xA;&lt;li&gt;It already makes sounds and has some LEDs.  You should be able to hack how they behave.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=mk4XB2wZqF4&quot;&gt;Some cats like Roombas.  Others are highly indifferent to them.&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bonus: it can pick up cat hair.&lt;/p&gt;&#xA;" OwnerUserId="7153" LastActivityDate="2014-09-25T19:44:12.910" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4631" PostTypeId="2" ParentId="4625" CreationDate="2014-09-25T20:30:41.770" Score="4" Body="&lt;p&gt;Dirty cheap robot:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Try seeking in Aliexpress/Ebay/your local e-store something called 2WD robot chassis. &#xA;For about ~14-16 usd you will get two wheels and two engines and quite good basic platform for further development. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then you will have to add:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Arduino or clone (cheaper) ~8-9 usd&lt;/li&gt;&#xA;&lt;li&gt;Driver shield or H-bridge (H bridge or transistors are much cheaper but you will have to learn how to use them. It's not wasted time if you want to pursue robotics hobby) ~6-7usd for cheapest&lt;/li&gt;&#xA;&lt;li&gt;Ultrasonic sensor 2 usd&lt;/li&gt;&#xA;&lt;li&gt;6x battery holder 1 usd&lt;/li&gt;&#xA;&lt;li&gt;Breadboard and dupont cables (jumpers) 6 usd&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;You will get complete kit for ~40 usd total. If you will add about 20 usd for arduino kit that will be more than enough to start. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Start here and search for suitable elements&#xA;&lt;a href=&quot;http://www.aliexpress.com/wholesale?SearchText=arduino&amp;amp;catId=&amp;amp;initiative_id=SB_20140925122631&quot; rel=&quot;nofollow&quot;&gt;http://www.aliexpress.com/wholesale?SearchText=arduino&amp;amp;catId=&amp;amp;initiative_id=SB_20140925122631&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7155" LastActivityDate="2014-09-25T20:30:41.770" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4632" PostTypeId="1" CreationDate="2014-09-25T19:43:58.097" Score="7" ViewCount="9796" Body="&lt;p&gt;Sorry I am asking a mechanical question here, but, after all, where else people have experience with using motors? If there is a better forum for this, please do guide me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Everywhere I've seen online, the stepper motor DYJ48 is used in tutorials, to rotate on its own, or, at most, to spin a clothes pin attached to it. I am trying to get Arduino to work for my 10 year old kid. He's got the motor rotating, now what? How does he attach anything to it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Don't laugh, I made him a wheel out of a raw potato. He is happy with it now. Where can I find any guidance as to what to do next?&lt;/p&gt;&#xA;" OwnerUserId="7157" OwnerDisplayName="Таня Т." LastActivityDate="2019-02-28T23:14:33.657" Title="What mechanical parts can be attached to DYJ48 stepper motor?" Tags="&lt;arduino&gt;&lt;motor&gt;" AnswerCount="6" CommentCount="17" ContentLicense="CC BY-SA 3.0" />
  <row Id="4633" PostTypeId="2" ParentId="4632" CreationDate="2014-09-25T19:57:53.173" Score="5" Body="&lt;p&gt;You can drill a hole to match the shaft into whatever it is and either fix it with a setscrew against the flat or glue it. Or you could glue a brass tube (hobby shop) to the shaft if you can find one that fits. The shaft is 5mm diameter, as venny says. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course it's easier if you have access to a small lathe (such as Sherline or one of the small Chinese ones). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you need to allow for misalignment between shafts it's better to buy or make a shaft coupler such as these helical style ones: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/8kY8F.jpg&quot; alt=&quot;http://www.ebay.com/itm/Flexible-Coupling-Motor-Shaft-Coupler-3mm-X-5mm-/220977869760&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are other types (some of which have a bit of backlash). You can also use a collar with setscrews, but the shaft on that motor is a bit stubby and that type of coupler allows for almost no shaft misalignment so it would jam easily (and the motor is not very powerful). The kind with backlash generally has a bit of flexible material such as urethane rubber sandwiched between two interlocking sets of fingers. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I made a sky tracking drive using one of these cr*p motors and I just drilled out the center of a standard gear (from Stock Drive) a bit to get a slip fit and used the grub screw to secure it. The shaft is pretty stubby so it's hard to get something secured to it unless it fits very tightly or is a clamp or collet-style fixing. In my case, the gear drives a nut that works on a leadscrew. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;BTW, you might find the robotics SE useful in this kind of thing. I've not looked at it once, but those folks run into this sort of thing regularly. &lt;/p&gt;&#xA;" OwnerUserId="6721" OwnerDisplayName="Spehro Pefhany" LastActivityDate="2014-09-25T21:07:15.207" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4634" PostTypeId="2" ParentId="4632" CreationDate="2014-09-25T20:03:21.870" Score="4" Body="&lt;p&gt;The diameter of the shaft is 5mm, it sould be possible to use a 5mm propeller collet commonly used on RC airplanes, like this one:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/GdP67.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/GdP67.jpg&quot; alt=&quot;pic&quot;&gt;&lt;/a&gt;&lt;br&gt;&#xA;&lt;sub&gt;(source: &lt;a href=&quot;http://www.hobbyexpress.com/images_products/1199_large.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;hobbyexpress.com&lt;/a&gt;)&lt;/sub&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Tightening the nut secures the attached object and at the same time it clamps the collet to the shaft.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The shaft should be inserted fully into the clamp, to grip also the non-flattened portion to provide good stability.&lt;/p&gt;&#xA;" OwnerDisplayName="venny" LastEditorUserId="15160" LastEditDate="2019-02-28T23:14:33.657" LastActivityDate="2019-02-28T23:14:33.657" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="4635" PostTypeId="1" AcceptedAnswerId="4638" CreationDate="2014-09-26T11:03:50.670" Score="5" ViewCount="4077" Body="&lt;p&gt;I am trying to make a simple robot with few functionality for someone, one of these functionality is inflating a balloon inside the robot, I know how to control a compressor using Arduino but the problem is that the requested task is bit different here:&#xA;There must be an air exit and it must be controllable through arduino, so he can inflate the balloon to a certain pressure, and depress the air from another exit if needed (I don't know if it is possible to have a depression through the same pressure-in valvle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think that it can be done somehow using a solenoid 3/2 valve or something but I am bit unfocused these days and I need some hints.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any thoughts?&lt;/p&gt;&#xA;" OwnerUserId="7162" LastActivityDate="2020-05-10T07:21:47.417" Title="12V compressor and air pressure control" Tags="&lt;arduino&gt;&lt;wheeled-robot&gt;&lt;mechanism&gt;&lt;industrial-robot&gt;&lt;valve&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4636" PostTypeId="2" ParentId="4627" CreationDate="2014-09-26T20:31:19.893" Score="4" Body="&lt;p&gt;The simplest way to do this, is to buy a more advanced PPM transmitter that has a trainer port, and use &lt;a href=&quot;http://www.endurance-rc.com/pctx.php&quot; rel=&quot;noreferrer&quot;&gt;this PCTx device&lt;/a&gt; to control it from your PC through USB. They provice a simple library and some sample code to get your started. The control signals go from your &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;software -&amp;gt; through the PCTx device -&amp;gt; PPM transmitter -&amp;gt; over RF to your copter&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Compatible transmitters are listed on that link.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not familiar with your particular brand of mini-copter, but im assuming it uses standard 4 channel RC-PPM control signals. If it doesn't, the above solution will not work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can also, if you are so inclined roll out your own PC based PWM transmitter. This would involve writing software to implement the PPM signal, which can get a bit involved. You might even need some sort of an oscilloscope or a signal analyzer to debug issues. Some people have created Arduino based solutions. Examples:&#xA;&lt;a href=&quot;http://flitetest.com/articles/custom-arduino-2-4ghz-rc-transmitter&quot; rel=&quot;noreferrer&quot;&gt;1&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Again, the assumption is that your copter uses standard RC-PWM. If it doesn't you'll have to first figure out what protocol it uses and then try to emulate that using software and an RF Tx module.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since your copter receives 2.4Ghz radio signals, there is no drop-in solition to directly use WiFi or Bluetooth.&lt;/p&gt;&#xA;" OwnerUserId="7000" LastEditorUserId="7000" LastEditDate="2014-09-26T20:42:45.043" LastActivityDate="2014-09-26T20:42:45.043" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="4638" PostTypeId="2" ParentId="4635" CreationDate="2014-09-27T03:18:07.073" Score="4" Body="&lt;p&gt;Whether a single 3-way, 2-position pneumatic valve (typically with a work port, an input port, and an exhaust port ‒ see page 3 of &lt;a href=&quot;http://www.nationalpneumatic.com/img/PDF/Anglais/Technical%20notes/TOPRING/Topring-Understanding-air-control-valves.pdf&quot; rel=&quot;nofollow&quot;&gt;nationalpneumatic.com's pdf about valves&lt;/a&gt;) will suffice depends on information not given in the question.  For example, if you can turn the compressor on or off at will, and if it will hold pressure when off, you can attach the balloon to the work port, the compressor to the input port, and leave the exhaust port open (or put an exhaust silencer or rate control on the exhaust port).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If, however, you are using a reservoir and need three settings – balloon fill, balloon hold, and balloon exhaust – you will need to use either a 5-way, 3-position valve with center off (see eg &lt;a href=&quot;http://www.youtube.com/watch?v=vY_bguSNgSc&quot; rel=&quot;nofollow&quot;&gt;youtube.com about Closed Center Valves&lt;/a&gt;), or a pair of 3-2 or 5-2 valves.  (The 5-2 valves would be used as overqualified 3-2 valves, with extra ports either blocked or left open as necessary.)  Using two 3-2 valves X and Y, on valve X attach the balloon to the work port and leave the exhaust port open (or silenced, etc).  Connect X's input port to Y's work port.  Connect Y's  input port to the compressor, and block Y's exhaust port.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The  “&lt;a href=&quot;http://www.robotshop.com/en/viair-12v-120-psi-air-compressor.html&quot; rel=&quot;nofollow&quot;&gt;VIAIR 12V 120 psi Air Compressor&lt;/a&gt;” mentioned in a comment is an oilless single-piston compressor.  As well as being sold at the robotshop.com site, it is marketed as part of a roughly twice-as-expensive air system, on &lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/B002915HVK&quot; rel=&quot;nofollow&quot;&gt;Amazon&lt;/a&gt; and &lt;a href=&quot;http://www.suspensionconnection.com/10000-compressor.html&quot; rel=&quot;nofollow&quot;&gt;other sites&lt;/a&gt;.  A single 3-way, 2-position pneumatic valve should work ok for balloon air control if used per paragraph 1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Somewhat-less-expensive compressors that will work ok for initial experiments or for light duty production include Harbor Freight models &lt;a href=&quot;http://www.harborfreight.com/12v-100-psi-high-volume-air-compressor-61788.html&quot; rel=&quot;nofollow&quot;&gt;61788&lt;/a&gt;, &lt;a href=&quot;http://www.harborfreight.com/12v-100-psi-high-volume-air-compressor-69284.html&quot; rel=&quot;nofollow&quot;&gt;69284&lt;/a&gt;, and &lt;a href=&quot;http://www.harborfreight.com/12-volt-250-psi-compact-air-compressor-4077.html&quot; rel=&quot;nofollow&quot;&gt;4077&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="478" LastEditorUserId="478" LastEditDate="2014-10-11T06:16:18.513" LastActivityDate="2014-10-11T06:16:18.513" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4639" PostTypeId="1" CreationDate="2014-09-27T18:15:04.713" Score="1" ViewCount="79" Body="&lt;p&gt;I recently built a self-driving vehicle-type robot for a competition, and am looking to sell sensors (GPS, INS, etc.) used in order to have money for the next project. Is ebay where people tend to go looking for used sensors and hardware?&lt;/p&gt;&#xA;" OwnerUserId="7166" LastActivityDate="2014-09-27T23:51:14.110" Title="Where do roboticists look for used sensors/hardware?" Tags="&lt;sensors&gt;&lt;otherservos&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2014-10-23T10:10:26.587" ContentLicense="CC BY-SA 3.0" />
  <row Id="4641" PostTypeId="2" ParentId="4639" CreationDate="2014-09-27T23:51:14.110" Score="1" Body="&lt;p&gt;I generally use ebay for selling and buying individual used sensors or other bits. I've also used gumtree when I had stuff to clear but wasn't looking for money for it. Ebay has quite detailed search/categorising which I think makes it more appropriate for technology stuff. &lt;/p&gt;&#xA;" OwnerUserId="4258" LastActivityDate="2014-09-27T23:51:14.110" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4642" PostTypeId="1" CreationDate="2014-09-28T04:02:00.223" Score="5" ViewCount="271" Body="&lt;p&gt;I have a project that requires me to be able to accurately and repeatedly rotate an object 120 degrees.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The object is small and lightweight (let's say several grams). The axis does not necessarily have to always spin the same direction. It simply needs to be able to stop reliably at 0, +/- 120, and +/-240 degrees from the origin.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have VERY limited experience with motors and robotics, but my understanding is that a servo motor will be my best bet for accuracy (if that incorrect, please let me know).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since I know next to nothing about these motors, the spec sheets list a lot of specs which don't mean all that much to me. I'm hoping to learn, but in the mean time, what specifications do I need to be focusing on for these requirements?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It doesn't need to be high speed. When I say accurate, it doesn't have to be absolutely perfect to the micrometer, but I would like it to be able to run through a loop of stopping at 0, 120, and 240 hundreds of times without visually noticeable variance - the more precise the better though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To be more specific about the accuracy. Let's say the object being rotated will have a flat surface on the top at each of those 3 stopping points.  Upon inspection the surface needs to appear level each and every time through hundreds of cycles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could these requirements be met by a servo that might be used in building a quadricopter, or am I going to be looking for something higher grade than that?&lt;/p&gt;&#xA;" OwnerUserId="7139" LastEditorUserId="7139" LastEditDate="2014-09-30T21:49:46.183" LastActivityDate="2014-09-30T21:49:46.183" Title="Finding a light load high precision servo motor" Tags="&lt;servomotor&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4643" PostTypeId="2" ParentId="4595" CreationDate="2014-09-29T15:36:05.403" Score="2" Body="&lt;p&gt;You could use AR markers attached to each robot or in known locations around the room. In fact, this is how it is typically done in research for indoor, multi-robot systems. The libraries for recognizing and extracting range / angle information from AR markers are well developed, and included in the Robot Operating System. Now, you won't need to actually &lt;em&gt;use&lt;/em&gt; ROS to drive your robot, maybe just to read the AR Markers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The requirements are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Omni-directional AR Markers, which are typically barcodes affixed (wrapped around) poles on top of the robot. Check out Keith Leung's work &lt;a href=&quot;http://asrl.utias.utoronto.ca/~kykleung/&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;, which does exactly what you want.  Note, his research is on multi-robot SLAM, which is &lt;em&gt;not&lt;/em&gt; what you want, but those markers on top of the robots are &lt;em&gt;exactly&lt;/em&gt; what I'd use.&lt;/li&gt;&#xA;&lt;li&gt;Camera (Kinect will do, it has one, you know)&lt;/li&gt;&#xA;&lt;li&gt;A laptop with some processing power&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://ros.org&quot; rel=&quot;nofollow&quot;&gt;ROS&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;In particular the &lt;a href=&quot;http://wiki.ros.org/ar_pose&quot; rel=&quot;nofollow&quot;&gt;ar_pose library&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="163" LastActivityDate="2014-09-29T15:36:05.403" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4644" PostTypeId="2" ParentId="4595" CreationDate="2014-09-30T08:13:52.313" Score="1" Body="&lt;p&gt;An extremely cheap method would be to use IR leds mounted on your beacon and an omni-directional IR sensor array on your robot (just a few remote control leds arranged around your robot) The beacon will be glowing like a neon sign in IR and a simple brightness detection algorithm will give you a direction. Move 10cm, take another reading, etc.&lt;/p&gt;&#xA;" OwnerUserId="7180" LastActivityDate="2014-09-30T08:13:52.313" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4646" PostTypeId="2" ParentId="4595" CreationDate="2014-09-30T21:09:50.933" Score="3" Body="&lt;p&gt;Yes, there is such a system available today, &lt;a href=&quot;http://www.decawave.com/products/dwm1000-module&quot; rel=&quot;nofollow noreferrer&quot;&gt;ScenSor from DecaWave&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/PjuqZ.jpg&quot; alt=&quot;Decawave ScenSor&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These tags can measure their distance from base stations using the time of flight of radio packets.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They have an precision of about 10cm, I.E. successive samples are randomly distributed in a 10cm diameter cloud around the true location. Also, the radio signal needs a clear line of sight from the tags to the base stations. Any obstacles will cause a slight delay in the signal, giving a slight error in the readings. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, if you combine enough tags and base stations, plus odometry from your robot, you can get pretty good precision indeed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One caveat: The chips on the modules are very complex to use, and the example source code provided by Decawave is a nearly indecipherable mess, so expect to put a lot of time and effort into getting these to work.&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2014-09-30T21:09:50.933" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4647" PostTypeId="2" ParentId="4642" CreationDate="2014-09-30T21:31:15.397" Score="2" Body="&lt;p&gt;Since you didn't state your accuracy requirements in terms of degrees, I assume you want it to be accurate enough to the eye.  Pretty much any RC servo motor will do the job.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/TOkNM.jpg&quot; alt=&quot;Servo&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These can easily support a few grams weight.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All you need to do is provide it with the control signal to tell it which angles to go to, and the simplest way to do that is with something like an &lt;a href=&quot;http://www.arduino.cc&quot; rel=&quot;nofollow noreferrer&quot;&gt;Arduino&lt;/a&gt;, or &lt;a href=&quot;http://www.cypress.com/?rID=92146&quot; rel=&quot;nofollow noreferrer&quot;&gt;PSoC4 development board&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2014-09-30T21:31:15.397" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4648" PostTypeId="1" CreationDate="2014-10-01T01:09:36.117" Score="2" ViewCount="663" Body="&lt;p&gt;I am planning to control multiple Dynamixel servos (MX28T or MX-64T) wirelessly using Arduino Mega. Since this servo uses serial communication, I need an additional serial port to interface with Xbee module. Although it seems to be very common application controlling these servos wirelessly based on Arduino, I could't find any of them in web. I found the two very well constructed libraries.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://code.google.com/p/slide-33/downloads/list&quot; rel=&quot;nofollow&quot;&gt;https://code.google.com/p/slide-33/downloads/list&lt;/a&gt;. This library is for MX28T servo, which is the same servo I am trying to use, but it uses UNO;therefore, I cannot interface with Xbee.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.pablogindel.com/informacion/the-arduinodynamixel-resource-page/&quot; rel=&quot;nofollow&quot;&gt;http://www.pablogindel.com/informacion/the-arduinodynamixel-resource-page/&lt;/a&gt;. This library use UART1 (serial1) to interface with servo (AX-12) motors. Therefore, I can connect Xbee module to UART0. But, the problem is that this library is outdated and not compatible with MX64-T servo anymore.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my question is here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any one who has experience in controlling Dynamixel MX24T, MX64T servo series using Xbee module simultaneously? If you have experience, please share with me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it possible for Arduino Mega can interface with Xbee module using Serial1 (i.e., RX18 TX19)? If it can, I might be able to use the library1 without any modification.&lt;/p&gt;&#xA;" OwnerUserId="7143" LastEditorUserId="350" LastEditDate="2014-10-02T18:16:47.390" LastActivityDate="2015-01-03T03:49:28.423" Title="Controlling Dynamixel servo wirelessly using Arduino Mega" Tags="&lt;serial&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4649" PostTypeId="2" ParentId="4595" CreationDate="2014-10-01T02:13:22.890" Score="1" Body="&lt;p&gt;Another idea is to use polarized light beacons.  If you have a few light sources polarized at different angles, then you can use some simple light sensors (or cameras) similarly polarized.  If the beacons are at known world locations, you should be able to figure out your location through triangulation or trilateration.  the polarization lets you distinguish between the different light sources.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This robot competition uses polarized light beacons to designate the goal areas: &lt;a href=&quot;http://www.botlanta.org/cube-quest&quot; rel=&quot;nofollow&quot;&gt;http://www.botlanta.org/cube-quest&lt;/a&gt;.  And here is some detail on the beacons they use: &lt;a href=&quot;http://www.botlanta.org/contests/cube-quest/beacon-details&quot; rel=&quot;nofollow&quot;&gt;http://www.botlanta.org/contests/cube-quest/beacon-details&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-10-01T02:13:22.890" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4650" PostTypeId="1" CreationDate="2014-10-01T10:15:11.337" Score="2" ViewCount="1820" Body="&lt;p&gt;I'm currently programming an app for a robot and I'd like to make him map a zone and then make him move autonomously from one point to another.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have to solve a SLAM problem, but the biggest matter is that I can't use landmarks to find myself in the environment. The robot just has the abilities to move, and to make distance measurements over -120/+120 degrees using a sonar.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't find any simply explained algorithm that permits me to solve this SLAM problem with the no-landmark limitation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Have you any idea ?&lt;/p&gt;&#xA;" OwnerUserId="7191" LastEditorUserId="350" LastEditDate="2014-10-02T18:17:18.917" LastActivityDate="2014-10-06T14:48:31.793" Title="SLAM without landmarks using sonar" Tags="&lt;slam&gt;&lt;sonar&gt;" AnswerCount="3" CommentCount="0" ClosedDate="2014-10-23T10:10:09.147" ContentLicense="CC BY-SA 3.0" />
  <row Id="4651" PostTypeId="2" ParentId="4650" CreationDate="2014-10-01T10:24:50.850" Score="0" Body="&lt;p&gt;Have you considered to use grid maps?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A particle filter based SLAM with grid maps can be found here:&#xA;&lt;a href=&quot;https://www.openslam.org/gmapping.html&quot; rel=&quot;nofollow&quot;&gt;https://www.openslam.org/gmapping.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7133" LastActivityDate="2014-10-01T10:24:50.850" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4653" PostTypeId="2" ParentId="4650" CreationDate="2014-10-01T22:14:12.107" Score="1" Body="&lt;p&gt;I asked this question before in &lt;a href=&quot;https://robotics.stackexchange.com/questions/1985/slam-without-landmarks&quot;&gt;here&lt;/a&gt; when I had no idea what SLAM problem actually is. I realized later this question was a sign indicates that I have no idea about the problem. The word SLAM is an acronym for Simultaneous Localization And Mapping which indicates that the environment must be part of the problem or in other words the robot needs to navigate an  unknown environment and concurrently localizes its pose in this map. If you don't want to include the landmarks or the environment, then you don't need SLAM at all. The problem then decreases to a kinematic problem in which the robot moves in an empty space and you hope to determine its pose in this empty map. If this is the case, then you need odometry info or just use GPS. As you can see, odometry is an accumulated error problem if the noise is presented. GPS doesn't work in an indoor environment. I highly recommend you to read this book &lt;a href=&quot;http://www.probabilistic-robotics.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Probabilistic Robotics&lt;/a&gt;. This is the only book that I know covers the problem in depth with providing a complete algorithm for constructing SLAM with a given model. &lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2014-10-01T22:14:12.107" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4654" PostTypeId="2" ParentId="4648" CreationDate="2014-10-02T00:48:50.090" Score="1" Body="&lt;p&gt;The &#xA;&lt;a href=&quot;http://forum.arduino.cc/index.php/topic,93561.0.html&quot; rel=&quot;nofollow&quot;&gt;&quot;arduino mega + xbee pro shield&quot;&lt;/a&gt;&#xA;thread describes how to tweak the xbee pro shield&#xA;so you can connect whichever Arduino Mega serial port you want to it&#xA;(Serial1: RX1 and TX1; or Serial3: RX3 and TX3, or etc.).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Brief summary:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;de-solder solder jumper 2 and solder jumper 3.&lt;/li&gt;&#xA;&lt;li&gt;flip the switch to &quot;DLINE&quot; (away from &quot;UART&quot;)&lt;/li&gt;&#xA;&lt;li&gt;(Now the TX and RX pins on the xbee aren't actually connected to anything).&lt;/li&gt;&#xA;&lt;li&gt;Connect the TX on the xbee to any RX of your choice on the Arduino Mega (perhaps RX3).&lt;/li&gt;&#xA;&lt;li&gt;Connect the RX on the xbee to the TX of your choice on the Arduino Mega (perhaps TX3).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;While I haven't used Dynamixel servos (yet),&#xA;I have used the Arduino Mega to communicate with other devices over several of its UART serial ports more-or-less simultaneously,&#xA;so I am confident that the Arduino Mega can control Dynamixel servos and communicate over Xbee modules simultaneously.&lt;/p&gt;&#xA;" OwnerUserId="187" LastEditorUserId="187" LastEditDate="2014-11-04T02:26:31.367" LastActivityDate="2014-11-04T02:26:31.367" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4656" PostTypeId="1" AcceptedAnswerId="4662" CreationDate="2014-10-02T08:51:46.213" Score="2" ViewCount="366" Body="&lt;p&gt;This is for a battle robot in the hobby-weight class (5.44 Kg max)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to drive the robot using  2 cordless drill motors rated at 14.4 volts. I have 4S LIPOs which means I have 4 x 3.7 volts or 14.8 volts. So far so good. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is that I bought 2 ESCs and only afterwards noticed that they are rated for 2-3S (or max of 11.1 volts).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my question is am I likely to damage the ESC if I use my 4S LIPOs instead of 3S LIPOs?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or should I just buy 3S LIPOs and live with the reduced performance?&lt;/p&gt;&#xA;" OwnerUserId="7198" LastEditorUserId="350" LastEditDate="2014-10-02T17:59:32.523" LastActivityDate="2014-10-02T17:59:32.523" Title="Over-voltage on a brushed electronic speed controller" Tags="&lt;motor&gt;&lt;esc&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4657" PostTypeId="1" CreationDate="2014-10-02T09:02:30.283" Score="1" ViewCount="1541" Body="&lt;p&gt;This is for a Hobby-weight (5.44 Kg) battle robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I bought two ESCs for my drive motors but the ESCs do not have a reverse function (or brake for that matter).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any simple way I can achieve this through maybe either: &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;The R/C settings (setting middle position of joystick as stopped, top-wards as forward and bottom-wards as reverse?) &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Or could I maybe achieve this using Arduino? I have a card with relay switches that I can use with the Arduino so am not worried about high voltage or current but I am worrying it could get messy..&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I could just buy two new ESCs with the above features but they cost quite a bit more than the ones I already have so I would prefer to try a few tricks first - if there are any!&lt;/p&gt;&#xA;" OwnerUserId="7198" LastEditorUserId="350" LastEditDate="2014-10-02T17:59:58.993" LastActivityDate="2015-05-05T22:03:05.963" Title="Adding reverse function to a brushed motor electronic speed controller" Tags="&lt;motor&gt;&lt;esc&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4658" PostTypeId="1" AcceptedAnswerId="4660" CreationDate="2014-10-02T09:22:53.663" Score="0" ViewCount="85" Body="&lt;p&gt;Newbie to robotics here! &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I bought a 5S LIPO but now realise that it is overkill. And these things are expensive!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, given that (as far as I know) the pack is apparently made up of individual cells of 3.7 volts each, is there any way in which I could somehow (safely) separate out the cells to get a 3S and a 2S or even single 1S cells?&lt;/p&gt;&#xA;" OwnerUserId="7198" LastEditorUserId="350" LastEditDate="2014-10-02T18:07:35.523" LastActivityDate="2015-11-29T08:58:08.913" Title="Can a 5S LIPO battery be changed to a 3S and a 2S?" Tags="&lt;battery&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4659" PostTypeId="2" ParentId="4658" CreationDate="2014-10-02T10:08:59.230" Score="1" Body="&lt;p&gt;Yes theoretically you can split 5S lipo in indivisual cells as 5S represents it is pack of 5 cells connected in Series.(S in 5S denote connection in series). But practically you have to be extremely cautious while doing this as lipos are dangerous to handle and even more dangerous when you are splitting them apart.&lt;/p&gt;&#xA;" OwnerUserId="2118" LastActivityDate="2014-10-02T10:08:59.230" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4660" PostTypeId="2" ParentId="4658" CreationDate="2014-10-02T11:05:42.213" Score="1" Body="&lt;p&gt;If you open a Lipopack it looks basically like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ODR9k.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ODR9k.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There you can see the single cells with some cables attached to them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to open a lipo pack you have to cut the packaging with knife....&#xA;This is more or less everything you have to do. You will have 5cells which wired in series. just cut the cables to divide them in 3-2 and then you have to solder two cables.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is one Thing you have to careful with: Try to not damage the cells with the knife, because lithium is an alkali metal and these metals react violently with the oxygen in the air. At the end the cell will ignite itself (it won't explode, don't worry) and the fumes may be dangerous.&lt;/p&gt;&#xA;" OwnerUserId="6911" LastEditorUserId="11178" LastEditDate="2015-11-29T08:58:08.913" LastActivityDate="2015-11-29T08:58:08.913" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4661" PostTypeId="2" ParentId="4657" CreationDate="2014-10-02T11:13:36.853" Score="1" Body="&lt;p&gt;If your ESC does not provide reverse functionality, it will never do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &quot;reverse&quot; mode can be achieved in general by swapping any two motor cables. I would do this with the arduino setup in combination with your R/C settings.&#xA;Arduino can easily get the RC information from a receiver. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now it depends on your relays, you may achieve it with 2 relays, but if the relays are not the right ones you need 4 of them&lt;/p&gt;&#xA;" OwnerUserId="6911" LastActivityDate="2014-10-02T11:13:36.853" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4662" PostTypeId="2" ParentId="4656" CreationDate="2014-10-02T11:17:23.663" Score="3" Body="&lt;p&gt;Well over voltage at an ESC usually results in an instant magic smoke. I would never recommend this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have enough reserve power you can use the 3S version. If you are not sure or do not have enough power reserve then you should buy 4s ESCs.&lt;/p&gt;&#xA;" OwnerUserId="6911" LastActivityDate="2014-10-02T11:17:23.663" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4663" PostTypeId="1" AcceptedAnswerId="4906" CreationDate="2014-10-02T14:20:44.360" Score="3" ViewCount="52" Body="&lt;p&gt;How can I periodically estimate the states of a discrete &lt;a href=&quot;http://en.wikipedia.org/wiki/LTI_system_theory&quot; rel=&quot;nofollow&quot;&gt;linear time-invariant system&lt;/a&gt; in the form $$\dot{\vec{x}}=\textbf{A}\vec{x}+\textbf{B}\vec{u}$$ &#xA;$$\vec{y}=\textbf{C}\vec{x}+\textbf{D}\vec{u} $$if the measurements of its output $y$ are performed in irregular intervals? (suppose the input can always be measured).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;My initial approach was to design a &lt;a href=&quot;http://en.wikipedia.org/wiki/State_observer&quot; rel=&quot;nofollow&quot;&gt;Luenberger observer&lt;/a&gt; using estimates $\hat{\textbf{A}}$, $\hat{\textbf{B}}$, $\hat{\textbf{C}}$ and $\hat{\textbf{D}}$ of the abovementioned matrices, and then update it periodically every $T_s$ seconds according the following rule:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If there has been a measurement of $y$ since the last update: $$\dot{\hat{x}}=\hat{\textbf{A}}\hat{x}+\hat{\textbf{B}}\hat{u}+\textbf{L}(y_{measured}-\hat{\textbf{C}}\hat{x})$$&#xA;  If not:&#xA;  $$\dot{x}=\hat{\textbf{A}}\hat{x}+\hat{\textbf{B}}\hat{u}$$&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(I have omitted the superscript arrows for clarity)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I believe that there may be a better way to do this, since I'm updating the observer using an outdated measurement of $y$ (which is outdated by $T_s$ seconds in the worst case).&lt;/p&gt;&#xA;" OwnerUserId="799" LastEditorUserId="350" LastEditDate="2014-10-02T17:59:06.243" LastActivityDate="2015-01-03T17:51:30.520" Title="How to periodically estimate states of a LTI if the output is measured irregularly?" Tags="&lt;control&gt;&lt;sensor-fusion&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4664" PostTypeId="2" ParentId="4657" CreationDate="2014-10-02T18:06:11.613" Score="1" Body="&lt;p&gt;To enable reverse, a popular design is to use an &lt;a href=&quot;http://en.wikipedia.org/wiki/H_bridge&quot; rel=&quot;nofollow noreferrer&quot;&gt;H-bridge&lt;/a&gt; (essentially a circuitry version of manually flipping the polarity of the wires) placed between your ESC and the motor.  According to &lt;a href=&quot;https://electronics.stackexchange.com/a/103040/45292&quot;&gt;this answer&lt;/a&gt;, H-bridges are a normal part of an ESC output stage -- that your ESC appears to lack.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although it could be built with relays, it may be better for your ESC and/or motors to select an appropriate semiconductor-based H-bridge.  There are ICs available specifically for this purpose.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="-1" LastEditDate="2017-04-13T12:33:08.317" LastActivityDate="2014-11-06T16:20:27.933" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4665" PostTypeId="2" ParentId="4658" CreationDate="2014-10-03T08:11:30.330" Score="1" Body="&lt;p&gt;Like others said yes it is possible. I made it few times when i needed less height(stacked cells side-by-side), but &lt;strong&gt;SAFELY&lt;/strong&gt; no. The only safely method would be to buy 2 or 3 s battery! You can damage your self. &lt;/p&gt;&#xA;" OwnerUserId="7201" LastEditorUserId="7201" LastEditDate="2014-10-05T20:25:56.597" LastActivityDate="2014-10-05T20:25:56.597" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4669" PostTypeId="2" ParentId="4625" CreationDate="2014-10-03T11:21:38.583" Score="2" Body="&lt;p&gt;As another person said, you can buy cheap basic motorised platforms from such Chinese sites.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I use banggood.com myself and get loads of stuff from there; H-bridges, ESCs, motors, components, sensors, bench power supplies, oscilloscopes etc. basically anything except batteries which are a problem here since we live in Europe and there are a lot of safety standards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For instance here is a motor and wheel assembly for 3 dollars: &lt;a href=&quot;http://www.banggood.com/Robot-Smart-Car-Wheel-Deceleration-DC-Motor-For-Arduino-Smart-Car-p-907973.html?currency=USD&quot; rel=&quot;nofollow&quot;&gt;http://www.banggood.com/Robot-Smart-Car-Wheel-Deceleration-DC-Motor-For-Arduino-Smart-Car-p-907973.html?currency=USD&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And here is a whole kit for 10 dollars. &lt;a href=&quot;http://www.banggood.com/Smart-Robot-Car-Chassis-Kit-Speed-Encoder-Battery-Box-For-Arduino-p-915324.html&quot; rel=&quot;nofollow&quot;&gt;http://www.banggood.com/Smart-Robot-Car-Chassis-Kit-Speed-Encoder-Battery-Box-For-Arduino-p-915324.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for reliability, I can confirm that everything I order arrives safely and payment can be made through paypal so is pretty much safe also. The only catch is the basic delivery period (free shipping!) takes up to 27 days. Some items offer expedited shipping for a charge and that gets a bit weird because sometimes it is just a couple of dollars and the item arrives in a few days.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mind you I would not trust my life to anything sourced from such places because quality is not always the best (for instance an imitation Arduino may have some parts not perfectly aligned), but for fun stuff its great. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I would highly recommend it. Hope that helps! &lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the way if you want to make it more fun you might want to incorporate a laser (make sure it points downwards just ahead of the vehicle. In that way the cat will tend to spring at the spot rather than the vehicle!) if you want to do this for free, get an old DVD drive (not CD) and dismantle it to get the 3 lead diode. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Say hi to your cat for me. :-)&lt;/p&gt;&#xA;" OwnerUserId="7198" LastActivityDate="2014-10-03T11:21:38.583" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4670" PostTypeId="2" ParentId="4546" CreationDate="2014-10-03T19:30:06.300" Score="1" Body="&lt;p&gt;I like questions like this because more experienced engineers have a knee-jerk reaction of &quot;it's not possible&quot;. It's easy to figure out ways something couldn't work, the hard thing is to figure out how to make it work anyway. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, this is a very difficult problem, but I actually think it's possible. You'll have to accept some trade offs though. To move the robot, I would suggest omnidirectional wheels. They'll let you move in all directions, yet retain speed. To swing the racket, a full 6 degree of freedom robot arm is much too expensive, complicated, and heavy to build or buy. But you don't need a real robot arm, you need to swing a racket. Something as simple as a large solenoid behind a plate could work, or you could attach a linear actuator to the racket and use a catapult-like movement to hit the shuttlecock. It's not going to look like a humanoid robot, and it may only be able to hit the shuttlecock in one way (ie not impart spin), but it could at least change the direction in which it hits by angling itself right before making contact. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Tracking the shuttlecock and identifying it can be done in one step with a depth sensor like a Kinect. Basically, you'll be looking for the smallish thing that's getting close to you really fast. You can filter out everything that's not white and is beyond a certain distance to help with this. This is a significant programming task, but there is lots of example code and support for the Kinect and for doing simple color filtering. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The really hard part will be actually getting to the shuttlecock in time. Badminton is a fast game, and this theoretical robot is not going to be able to move as fast as a person. But, I think it's feasible to be able to get to shots that are high and slow (ie a tall parabola). That will give enough time to move and make tracking the shuttlecock easier, since there won't be many other objects in the sky to act as false positives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I would say that this task is not &quot;well beyond the capabilities of the top robotics research labs&quot;. It is not any easy task by any means and it's not going to be as good at Badminton as you're probably picturing in your head, but it can be done. Heck, we have entire teams of robots &lt;a href=&quot;https://www.youtube.com/watch?v=acrS0kPY-J8&quot; rel=&quot;nofollow&quot;&gt;that play soccer&lt;/a&gt;, why not Badminton?  &lt;/p&gt;&#xA;" OwnerUserId="7204" LastActivityDate="2014-10-03T19:30:06.300" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4672" PostTypeId="1" CreationDate="2014-10-04T16:00:47.793" Score="1" ViewCount="100" Body="&lt;p&gt;How could I compute the shortest path between point a and b using wave planner?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't see how using the wave planner would give me the shortest; it would just give me a path! As far as I can tell, I would only be able to give a random path to the destination, but nothing else than that.&lt;/p&gt;&#xA;" OwnerUserId="7206" LastEditorUserId="158" LastEditDate="2014-10-06T08:24:32.607" LastActivityDate="2014-12-22T01:51:51.850" Title="Shortest path using wave planner?" Tags="&lt;theory&gt;&lt;mapping&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4674" PostTypeId="1" CreationDate="2014-10-05T00:53:10.407" Score="3" ViewCount="103" Body="&lt;p&gt;I know that some DC motors produce a lot of torque but only actually move at a very slow rate, while others do the exact opposite. I know that I need some sort of balance between torque and the RPM's of the motor for use in a underwater thruster, but I am not sure what I should favor more, torque or RPM's? Also, it would be great if someone could suggest a motor at or below the $300 range for a UROV.&lt;/p&gt;&#xA;" OwnerUserId="7210" LastActivityDate="2015-05-06T01:03:05.077" Title="What should I be looking for in a DC motor that will be used in a UROV thruster?" Tags="&lt;motor&gt;&lt;torque&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4675" PostTypeId="1" AcceptedAnswerId="4676" CreationDate="2014-10-05T19:30:35.140" Score="6" ViewCount="6619" Body="&lt;p&gt;I have a question regarding the implementation of a quadrotor's position controller. &#xA;In my Matlab model the quadrotor takes 4 inputs: a desired altitude ($Z_{des}$) and desired attitude angles($\Phi_{des}$, $\Theta_{des}$, $\Psi_{des}$) which reflects the motion described by the differential equations of the model (see last picture). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/fzk2D.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fzk2D.png&quot; alt=&quot;theoretical loop controller for a quadrotor&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here an insight into the implemented Matlab dynamic model. As you can see it has a structure like an inner loop controler:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/IGZaA.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/IGZaA.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway...it &quot;hovers&quot; perfectly on the starting point. (perfect graphs :) )&#xA;Now I just need to go over and implement a sort of position controller to let the quadrotor to get from a start to a goal point, defined as usual through 3 coordinates $[X_d, Y_d, Z_d]$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's tricky because I don't have the same space state variables as input and output of the system. So the controller must take a vector of three coordinates and be able to output 3 different angles to get there. The only exception is the height because it will be simply bypassed by the controller and doesn't need another calculation loop. A different story is for the three angles... &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My first idea was to simply create a feedback between the position given at the output of the simulated system and the desired position as in the figure above.&#xA;But that rises another question: my quadrotor model solves the following equation system:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\large \cases{ &#xA; \ddot X = ( \sin{\psi} \sin{\phi} + \cos{\psi} \sin{\theta} \cos{\phi}) \frac{U_1}{m}  \cr&#xA; \ddot Y = (-\cos{\psi} \sin{\phi} + \sin{\psi} \sin{\theta} \cos{\phi}) \frac{U_1}{m} \cr&#xA; \ddot Z = (-g + (\cos{\theta} \cos{\phi}) \frac{U_1}{m} \cr&#xA; \dot p  = \frac{I_{YY} - I_{ZZ}}{I_{XX}}qr - \frac{J_{TP}}{I_{XX}} q \Omega + \frac{U_2}{I_{XX}} \cr&#xA; \dot q  = \frac{I_{ZZ} - I_{XX}}{I_{YY}}pr - \frac{J_{TP}}{I_{YY}} p \Omega + \frac{U_3}{I_{YY}} \cr&#xA; \dot r  = \frac{I_{XX} - I_{YY}}{I_{ZZ}}pq - \frac{U_4}{I_{ZZ}}&#xA;}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;that means that they expect (as in the matlab model above) the desired angles and height. &#xA;But now I need right the inverse: given a desired position calculate the right angles!!! &#xA;For the direction is the solution really simple, since I can write something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Psi = atan2( (yd - yactual), (xd - xactual) );&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where y and x lies on the horizontal plane. This is not so simple for the other two angles. So what can I do at this point? Just &quot;invert&quot; the given equations to get the desired angles?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another idea could be to implement a simple PD or PID controller. This is much more easier given the fact that I can experiment very quickly using Simulink and get very good results. But the problem is here again: how get I the desired angles from a desired position?&lt;/p&gt;&#xA;" OwnerUserId="7097" LastEditorUserId="350" LastEditDate="2014-10-07T17:48:06.677" LastActivityDate="2021-04-30T03:32:58.533" Title="Position Controller for a Quadrotor" Tags="&lt;pid&gt;&lt;quadcopter&gt;" AnswerCount="2" CommentCount="7" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4676" PostTypeId="2" ParentId="4675" CreationDate="2014-10-05T21:45:43.777" Score="5" Body="&lt;p&gt;By far, the most common solution to this problem is to use 2 separate controllers. The inner loop controller is what you already have: it tracks angle and height commands.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The outer loop controller assumes that the angles are tracked perfectly and treats angles as inputs, rather than separate states. So it takes the position error and converts it to a desired roll/pitch (via PID, just like any other system where you use a controller to calculate desired system inputs), and those desired angles are passed into the inner loop controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Make sense?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to get more complicated, your outer loop controller can define a desired acceleration. Using a bit more complicated math you can turn that into desired angles. This is theoretically cleaner but in practice you're still just tuning PID loops so the actual benefit may not justify the time and effort.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;------------ EDIT -----------&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To elaborate. The outer loop looks something like this. (for simplicity assume yaw=0)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{align}&#xA;\hat{\phi}^d &amp;amp;= k_{p,y} (y-y^d) + k_{d,y} (v_y - v_y^d) + k_{i,y} \int_0^t (y-y^d) dt&#xA;\\&#xA;\hat{\theta}^d &amp;amp;= -k_{p,x} (x-x^d) = k_{d,x} (v_x - v_x^d) - k_{i,x} \int_0^t (x-x^d) dt&#xA;\end{align}&#xA;$$&#xA;where $\hat{\phi}^d$ is the desired roll angle and $\hat{\theta}^d$ is the desired pitch angle. When yaw $\ne$ 0 you combine the two. Something like&#xA;$$&#xA;\begin{align}&#xA;\phi^d &amp;amp;= \cos(\psi) \hat{\phi}^d - sin(\psi) \hat{\theta}^d&#xA;\\&#xA;\theta^d &amp;amp;= \sin(\psi) \hat{\phi}^d + cos(\psi) \hat{\theta}^d&#xA;\end{align}&#xA;$$&#xA;where $\psi$ is the yaw angle (FYI, I might have the signs wrong there)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, in the inner loop you have your existing controller.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastEditorUserId="2669" LastEditDate="2014-10-08T20:02:57.863" LastActivityDate="2014-10-08T20:02:57.863" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="4677" PostTypeId="1" AcceptedAnswerId="4684" CreationDate="2014-10-05T22:12:32.103" Score="6" ViewCount="40163" Body="&lt;p&gt;I would like to estimate the &lt;strong&gt;yaw&lt;/strong&gt; angle from &lt;strong&gt;accelerometer&lt;/strong&gt; and &lt;strong&gt;gyroscope&lt;/strong&gt; data. For &lt;em&gt;roll&lt;/em&gt; and &lt;em&gt;pitch&lt;/em&gt; estimate I've used the following trigonometric equations:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;roll  = atan2(Ax,Az)  * RAD_TO_DEG&#xA;pitch = atan2(Ay,Az)  * RAD_TO_DEG&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and a simpified version of the &lt;strong&gt;Kalman Filter&lt;/strong&gt; to consider also angular rates. The roll and pitch estimates are &lt;em&gt;accurate&lt;/em&gt; (accelerometer values need to be filtered in presence of chassis vibrations).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/5XwmO.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to get the &lt;strong&gt;Yaw&lt;/strong&gt; angle I'm using the following equation:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;yaw = atan2(Ax,Ay)  * RAD_TO_DEG;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;but the it doesn't work. Do you have any advice?&lt;/p&gt;&#xA;" OwnerUserId="6970" LastEditorUserId="350" LastEditDate="2014-10-07T17:51:37.027" LastActivityDate="2015-03-30T12:38:37.640" Title="How to estimate yaw angle from tri-axis accelerometer and gyroscope" Tags="&lt;sensors&gt;&lt;quadcopter&gt;&lt;kalman-filter&gt;&lt;imu&gt;&lt;accelerometer&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="4678" PostTypeId="2" ParentId="4677" CreationDate="2014-10-05T23:01:06.010" Score="5" Body="&lt;p&gt;Assuming your vehicle is roughly horizontal to the ground, you won't be able get a good estimate of yaw from the accelerometer. Consider the nominal case: when your accelerometer is pointing straight down (Ax=0, Ay=0, Az=g) the reading will never change as you change yaw angle. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Normally, to get yaw angle vehicles use a magnometer (measure earth's magnetic field) or cameras and track the scene.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2014-10-05T23:01:06.010" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="4679" PostTypeId="1" CreationDate="2014-10-06T10:48:01.987" Score="1" ViewCount="694" Body="&lt;p&gt;I use MPU9150, also use DCM and Complimentary filter to compute roll, pitch and yaw. However, my Yaw is not so smooth. How can I solve that problem?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I looked at the datasheet of MPU9150, but I didn't see anything related to sampling frequency of magnetometer like gyro and accel.&lt;/p&gt;&#xA;" OwnerUserId="7038" LastEditorUserId="158" LastEditDate="2014-10-06T14:12:24.047" LastActivityDate="2014-10-06T14:12:24.047" Title="MPU9150 - Yaw angle Drift" Tags="&lt;quadcopter&gt;" AnswerCount="0" CommentCount="9" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4680" PostTypeId="2" ParentId="4650" CreationDate="2014-10-06T14:48:31.793" Score="0" Body="&lt;p&gt;There are SLAM methods that do use landmarks and others that do not. If your sensor allows you to easily find and and identify landmarks (e.g. using cameras you can easily detect interest points and identify these using feature descriptors) it can be beneficial to do so. But in many cases (e.g. laser scanners, sonar) &lt;em&gt;reliably&lt;/em&gt; detecting and identifying landmarks is nearly impossible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The current state of the art in SLAM are graph-based methods and while I am not aware of an existing system using sonar sensors, the straight-forward approach which is widely used with laser scanners would be:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Use a pose graph representation and store sonar measurements at key poses. &lt;/li&gt;&#xA;&lt;li&gt;Use the odometry of your robot to add measurement edges between consecutive nodes.&lt;/li&gt;&#xA;&lt;li&gt;Can you use your robot's sonar array for registration/scan matching (even with rather inaccurate results)? Also add the resulting relative pose edges to your pose graph.&lt;/li&gt;&#xA;&lt;li&gt;From time to time: Perform pose graph optimization. After that you might want to create an occupancy grid map using sonar scans corresponsing to nodes with their corrected pose.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;For 2D laser scanners, this is described in more detail in &lt;a href=&quot;https://www.willowgarage.com/sites/default/files/spa2d.pdf&quot; rel=&quot;nofollow&quot;&gt;this paper&lt;/a&gt; and implemented in &lt;a href=&quot;http://wiki.ros.org/karto&quot; rel=&quot;nofollow&quot;&gt;karto&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4531" LastActivityDate="2014-10-06T14:48:31.793" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4681" PostTypeId="2" ParentId="4362" CreationDate="2014-10-06T20:20:07.930" Score="0" Body="&lt;p&gt;Have a look at the research being done at your university. Stop by some professors offices, and ask them what &lt;em&gt;their&lt;/em&gt; degree has offered in terms of robotics. Of course, a bunch of us on stackexchange are probably in favor of CS, but I can tell you from attending conferences that roboticists come in all flavors, and CS-type problems are being solved by people of all backgrounds. In fact, a lab here at my university specializes in building new types of robot actuators or chassis, and strangely &lt;em&gt;all of their students are in CS&lt;/em&gt; as is the professor. &lt;/p&gt;&#xA;" OwnerUserId="163" LastActivityDate="2014-10-06T20:20:07.930" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4682" PostTypeId="1" AcceptedAnswerId="4683" CreationDate="2014-10-06T23:11:39.717" Score="2" ViewCount="348" Body="&lt;p&gt;I'm building an autonomous sail boat (ripped out the guts of an RC sail boat and replaced with my own mainboard etc.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The controller board I have can accommodate both an MPU9150 and an HMC5883. Is there any advantage is using both magnetometers for a tilt-compensated heading? I'm thinking that I could compute the unit vector with soft/hard iron offsets removed for both, and then average  the two vectors to get one slightly better one?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not sure if it would yield a better result though.&lt;/p&gt;&#xA;" OwnerUserId="6782" LastEditorUserId="350" LastEditDate="2014-10-07T17:31:25.047" LastActivityDate="2014-10-14T08:25:04.017" Title="Is there an advantage to multiple magnetometers for heading computation" Tags="&lt;sensors&gt;&lt;sensor-fusion&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4683" PostTypeId="2" ParentId="4682" CreationDate="2014-10-07T17:37:13.617" Score="1" Body="&lt;p&gt;A brief google search turned up &lt;a href=&quot;http://www.researchgate.net/publication/224154968_New_method_for_magnetometers_based_orientation_estimation/links/09e4150c991ca2aabb000000&quot; rel=&quot;nofollow&quot;&gt;this paper on using multiple magnetometers&lt;/a&gt;.  Depending on how far out at sea you expect to deploy this sailboat, you may want to consider a fallback mode where if the 2 compasses diverge by a certain amount then you consider one of them to be malfunctioning (since the average would be very inaccurate).&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2014-10-07T17:45:23.967" LastActivityDate="2014-10-07T17:45:23.967" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4684" PostTypeId="2" ParentId="4677" CreationDate="2014-10-07T17:58:38.747" Score="3" Body="&lt;p&gt;Gyroscopes will only give you the rate of change of the yaw angle, not the absolute yaw angle.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unless you plan to set the yaw angle initially and have it drift further and further into garbage values (as you integrate the rate of change), you'll need another sensor to provide periodic updates on your actual yaw.  This could be a magnetometer (compass), or a GPS, or a pair of GPSes, or &lt;a href=&quot;https://robotics.stackexchange.com/q/550/350&quot;&gt;some other method of finding your heading&lt;/a&gt;, which would provide input to a correction algorithm (e.g. &lt;a href=&quot;http://www.x-io.co.uk/open-source-imu-and-ahrs-algorithms/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sebastian Madgwick's filter&lt;/a&gt;).&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2015-03-30T12:38:37.640" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4685" PostTypeId="2" ParentId="4674" CreationDate="2014-10-07T18:09:24.113" Score="1" Body="&lt;p&gt;The engine's ideal torque and RPM characteristics are dependent on what propeller you use.  In general, if you know about how large of a propeller you want (relative to the size of your vehicle), you should be able to work backwards from there to find the ideal motor torque/RPM to support that. There will be a few options, based on possible variations on the number of blades, attack angle, etc of the propeller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://engineering.dartmouth.edu/epps/openprop/&quot; rel=&quot;nofollow noreferrer&quot;&gt;OpenProp&lt;/a&gt; may help you if you're approaching it from a very theoretical angle. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://robotics.stackexchange.com/q/1346/350&quot;&gt;This question about upgrading motors on the Sea Perch ROV&lt;/a&gt; also has some insight that you might find relevant. &lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2014-10-07T18:09:24.113" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4686" PostTypeId="2" ParentId="4357" CreationDate="2014-10-07T18:17:00.207" Score="0" Body="&lt;p&gt;Could you start the rolling with some sort of scraping action, and use rollers to control it from there?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example: &lt;a href=&quot;http://www.youtube.com/watch?v=5xhbctEcAAA#t=90&quot; rel=&quot;nofollow&quot;&gt;http://www.youtube.com/watch?v=5xhbctEcAAA#t=90&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The challenge would be making sure you stay oriented left/right to the mat being rolled.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-10-07T18:17:00.207" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4687" PostTypeId="1" CreationDate="2014-10-07T19:56:13.933" Score="0" ViewCount="487" Body="&lt;p&gt;I am looking to write and test my own control algorithms for tricopter flight. I am looking for a simulator that can simulate a tricopter but at the level of receiving simulated PWM and returning simulated gyro, compass and other sensor readings. Ideally it would also have graphics for visualization (need not be fancy). Ultimately, I want to port this to a real tricopter but at the moment I would just like to simulate it. Any suggestions for free simulators that are low level as I described? &lt;/p&gt;&#xA;" OwnerUserId="7221" LastActivityDate="2015-01-07T18:14:50.090" Title="tricopter simulation to test control algorithms" Tags="&lt;control&gt;&lt;quadcopter&gt;&lt;simulator&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4688" PostTypeId="1" CreationDate="2014-10-07T21:06:29.147" Score="1" ViewCount="751" Body="&lt;p&gt;I have the formulas to derive the RPM's of each wheel from the robot's linear velocity.&#xA;Now, I am trying to do the same thing for the acceleration (mainly angular acceleration).&#xA;For linear acceleration I am always assuming that the linear velocity of the wheels is the same as the robots when the robot is moving on a straight line...according to physics. Am I right?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But angular acceleration seems more complicated, specially when the robot is following a curved path (not necessarily turning in place).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any readings or ROS packages that deal with this acceleration issue?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="4269" LastActivityDate="2014-10-07T21:06:29.147" Title="Acceleration formula for a differential steering robot" Tags="&lt;ros&gt;&lt;wheeled-robot&gt;&lt;differential-drive&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4689" PostTypeId="1" AcceptedAnswerId="4690" CreationDate="2014-10-08T08:59:27.827" Score="0" ViewCount="36" Body="&lt;p&gt;I'm looking for a way to transport balls (diameter 50mm) 220 mm up with over a slope with a length of 120 mm. Currently I'm considering the usage of a belt system but I cannot seem to find a good belt system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because of space constraints within my robot, normally I would probably take a nylon belt and jam nails trough it to make little slots and then use that. However this would result in considerable reduction in available space as it means that I have to also take into account the extra space required for the nails on the way back. This means that ideally there would be a way to reduce the space used by the nails on the way back.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anybody have a good solution for this?&lt;/p&gt;&#xA;" OwnerUserId="7226" LastEditorUserId="158" LastEditDate="2014-10-08T10:41:13.237" LastActivityDate="2014-10-15T14:36:45.970" Title="Short distance ball transport" Tags="&lt;kinematics&gt;&lt;manipulator&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4690" PostTypeId="2" ParentId="4689" CreationDate="2014-10-08T10:27:35.790" Score="1" Body="&lt;p&gt;If you wanna stick to the belt system, then cut circular holes into the belt with a diameter of ~30mm. The ball will not fall through and can be transported upwards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;if you don't need much control over the ball, then you can &quot;shoot&quot; it with air pressure or a mechanical construction; something like a racket .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have enough place at the beginning of the slope, you could use a pneumatic actuator to push the ball.&lt;/p&gt;&#xA;" OwnerUserId="6911" LastEditorUserId="6911" LastEditDate="2014-10-08T11:42:47.507" LastActivityDate="2014-10-08T11:42:47.507" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4691" PostTypeId="2" ParentId="4558" CreationDate="2014-10-08T12:31:44.287" Score="1" Body="&lt;p&gt;At the end I discovered &lt;a href=&quot;http://ctms.engin.umich.edu/CTMS/index.php?example=Introduction&amp;amp;section=SimulinkModeling&quot; rel=&quot;nofollow noreferrer&quot;&gt;Simulink&lt;/a&gt; and the possibility to write a non linear system with it.&#xA;Simply take the differential equations in the paper and put them as they are in simulink. Really strightforward.&#xA;After I ve written a PID controller for my system it seems to work really good.&lt;/p&gt;&#xA;&lt;p&gt;The ide a linearized system to implement was good but for some reason didn t have the expected reaction during simulation.&lt;/p&gt;&#xA;&lt;p&gt;Anyway many thanks to all explanations and the suggestions that other people gave me.&lt;/p&gt;&#xA;&lt;p&gt;Regards&lt;/p&gt;&#xA;" OwnerUserId="7097" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2014-10-08T12:31:44.287" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4693" PostTypeId="1" CreationDate="2014-10-08T15:27:27.177" Score="1" ViewCount="736" Body="&lt;p&gt;I'd like to track my run in an indoor tennis court. GPS won't be available so I was thinking researching for other solutions:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Accelerometer: I concluded it's a no go because while playing tennis the player makes a lot of movements that include spinning his body that can alter the data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then I thought that a 3/4 point IR system might help but again from what I've understood it's hard for the IR system to track the movement since they won't be able to focus on the player.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my final thought went to radio systems but I couldn't find any info and it's also hard for me to see a theoretical solution at least on how I can mesure the movement/speed of the player.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So here is my question: Is there any existing system that is able to track random movement of an object (athlete) and give info like speed and distance? is there anywhere resources about how such a system might be achieved or at least the exact technology used for it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any suggestions and ideas are greatly appreaciated.&lt;/p&gt;&#xA;" OwnerUserId="7231" LastEditorUserId="7231" LastEditDate="2014-10-09T11:10:04.350" LastActivityDate="2014-11-15T08:02:45.683" Title="is it possible to track movement on a tennis court?" Tags="&lt;arduino&gt;&lt;kinematics&gt;&lt;movement&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4695" PostTypeId="2" ParentId="4693" CreationDate="2014-10-08T20:33:36.273" Score="1" Body="&lt;p&gt;Well the IR tracking system can work, but I think you need to place the camera at the ceiling.&#xA;Usually the distance between player and camera at the ceiling of a tennis-hall (height 8+m I guess) stays about the same.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using IMU-Data is a bad idea cause of the really complex movement&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT1:&#xA;For implementing the IR-Tracking (in this case a pretty simple one) you need an IR camera.&#xA;Use a 25$ playstation camera and modify it: &lt;a href=&quot;http://www.maximumpc.com/article/features/build_your_own_multitouch_surface_computer?page=0,2&quot; rel=&quot;nofollow&quot;&gt;http://www.maximumpc.com/article/features/build_your_own_multitouch_surface_computer?page=0,2&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then place a IR Led at your head or at another position which can be seen pretty good by the camera.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm actually not sure if there is any fitting software, but writing such stuff is pretty straight forward.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you look now at a picture of this cam. It will be all black except one mega-bright spot&lt;/p&gt;&#xA;&#xA;&lt;p&gt;OpenCV will be able to communicate with the camera easily and get some images. Then you can use some simple object tracking (or also called blob detection) in opencv to get the position&#xA;You will get your x/y position. You can perform some basic trigonometry to improve the result but basically the x/y position correlate with a real life postion (the camrera is not moving and you will have most of the time the same vertical distance between you and the camera)  &lt;br&gt;&#xA;Now it's just a pretty straight logging.&#xA;For the velocity just multiply the distance you moved between two frames with the frame rate.&lt;/p&gt;&#xA;" OwnerUserId="6911" LastEditorUserId="6911" LastEditDate="2014-10-09T12:04:44.987" LastActivityDate="2014-10-09T12:04:44.987" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="4697" PostTypeId="2" ParentId="4693" CreationDate="2014-10-09T01:52:25.177" Score="0" Body="&lt;p&gt;You should look into motion capture systems.  These systems use fixed infrared cameras to track retro-reflective markers on the object.  They got their popularity from tracking humans for the movies.  But are very handy in robotics.  Most of the fancy research being done with quadcopters relies on these systems.  For rigid bodies, you can get sub-millimeter accuracy at hundreds of hz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The price is probably out of the question for a personal project, but if you are doing this as part of a school or lab, then it may be a good investment.  Vicon (&lt;a href=&quot;http://www.vicon.com/&quot; rel=&quot;nofollow&quot;&gt;http://www.vicon.com/&lt;/a&gt;) is probably the most well known company.  Another is NaturalPoint (&lt;a href=&quot;https://www.naturalpoint.com/optitrack/&quot; rel=&quot;nofollow&quot;&gt;https://www.naturalpoint.com/optitrack/&lt;/a&gt;).&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-10-09T01:52:25.177" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4698" PostTypeId="1" CreationDate="2014-10-09T02:34:35.870" Score="0" ViewCount="130" Body="&lt;p&gt;I want to communicate the Tiva C ARM Cortex M4 to sensorhub from TI which has multiple sensors with different I2C addresses such as MPU9150, BMP180, Temperature Sensors...&#xA;With a single I2C slave, i can communicate to it successfully, but if my project involves interface Microcontroller with both MPU9150 and BMP180, then i get stuck.&#xA;Anybody suggest me the process of commnunication in this case?&lt;/p&gt;&#xA;" OwnerUserId="7038" LastActivityDate="2014-10-09T02:34:35.870" Title="Interface multiple I2C slaves to microcontroller" Tags="&lt;i2c&gt;" AnswerCount="0" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4699" PostTypeId="1" CreationDate="2014-10-09T11:34:57.697" Score="7" ViewCount="4251" Body="&lt;p&gt;I want to build a simple obstacle avoider robot, but this time I want it to be self-recharging so I am building a dock for this purpose, so I want it to be able to locate the dock and go for it when battery voltage is lower than a fixed value.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am having trouble to chose the right components for locating the dock, I think I am going to use an IR emitter on the dock so the robot can head toward it when battery is low (let's forget about the orientation problem for the moment, but if you have any thoughts about it that will be helpful) but I am not sure if the robot is able to detect the IR LED (or whatever) from a long distance (over 10 meter)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it possible to use this solution for this distance? If not, what do you suggest?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(If there is a simple ready solution to buy that's ok, let's say I have no budget limit)&lt;/p&gt;&#xA;" OwnerUserId="7162" LastActivityDate="2015-08-21T14:28:34.930" Title="Robot docking for self-recharging" Tags="&lt;sensors&gt;&lt;localization&gt;&lt;wheeled-robot&gt;&lt;battery&gt;&lt;wireless&gt;" AnswerCount="4" CommentCount="3" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4701" PostTypeId="1" AcceptedAnswerId="4826" CreationDate="2014-10-09T21:24:42.240" Score="3" ViewCount="319" Body="&lt;p&gt;I have a basic question because I'm trying to understand right now a concept that I thought it was obvious.&#xA;Looking at this &lt;a href=&quot;http://youtu.be/JJSgUNfZqgU?t=3m10s&quot; rel=&quot;nofollow&quot;&gt;video&lt;/a&gt; he is going to feedback the variable state &lt;strong&gt;&lt;em&gt;x&lt;/em&gt;&lt;/strong&gt; with the input of the system, which is a force &lt;strong&gt;&lt;em&gt;f&lt;/em&gt;&lt;/strong&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, if I'm correct it is only possibile to feedback variables which share the same units, so I expect to drive a meter through an input variable which is a meter and the difference will be then feed into the PID. Is the example in the video just to show up how to use simulink?&#xA;Or I m wrong? &lt;/p&gt;&#xA;" OwnerUserId="7097" LastActivityDate="2014-10-25T14:46:42.423" Title="A general question about PID Controller" Tags="&lt;pid&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4702" PostTypeId="1" CreationDate="2014-10-09T21:46:04.693" Score="1" ViewCount="433" Body="&lt;p&gt;I am trying to make a nerf sentry gun to shoot my co workers. I am building it more or less from scratch and have come to the part where I need to come up with plans to assemble it. I am looking for advice on how to mount the mg995 servos to allow them to tilt and pan. I originally thought about having a base with a metal rod through the middle and use a gear to control the pan functionality. The idea is it would mimic a skateboard truck with a gear that would turn the rod through the middle and pivot the shooting mechanism. Another idea was to have the metal plate sit on top of the servo and use one of the attachments to attach it to the top plate. The problems I see behind this is the attachment is just a small piece of plastic and over a short period of time I could see this wearing out especially if the shooting mechanism is not centered perfectly. I also need to come up with a solution to make it tilt but I think I have an idea for this to simply use a rod with a gear to turn the pvc pipe barrel. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/B00D3ZXU2O&quot; rel=&quot;nofollow&quot;&gt;Here are the servo's I am using&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sorry if this is the wrong forum for the question but I was unsure where else to look for some expert advice. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT 1&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For anyone intersted I found an example of someone doing almost exactly the same thing with blueprints. I am going a slightly simpler / cheaper route and mounting the servo to the bottom of the spinning plate between the lazy susan plate I ordered. This way I don't have to buy the gears which are rather expensive and without the gears it may reduce some of the torque.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://projectsentrygun.freeforums.org/build-progress-gladiator-ii-paintball-sentry-t130.html&quot; rel=&quot;nofollow&quot;&gt;http://projectsentrygun.freeforums.org/build-progress-gladiator-ii-paintball-sentry-t130.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7240" LastEditorUserId="37" LastEditDate="2018-08-15T15:19:55.120" LastActivityDate="2018-08-15T15:19:55.120" Title="Advice on mounting a servo for a nerf sentry gun" Tags="&lt;mechanism&gt;&lt;servomotor&gt;" AnswerCount="0" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="4703" PostTypeId="2" ParentId="4701" CreationDate="2014-10-10T03:48:29.500" Score="3" Body="&lt;p&gt;Keep in mind that the PID gains themselves can have units too. So if you have a position error, multiplied by a gain of the appropriate units, you can get a force.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{align}&#xA;e &amp;amp;= x - x^d&#xA;\\&#xA;u_f &amp;amp;= -k_p e - k_d \dot{e}&#xA;\end{align}&#xA;$$&#xA;If $x$ and $e$ have units of [m] and $u_f$ needs to have units of [N], then we get $k_p$ with units of [N/m] and $k_d$ with units of [N/(m/s)]&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2014-10-10T03:48:29.500" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4704" PostTypeId="1" AcceptedAnswerId="4709" CreationDate="2014-10-10T06:39:11.547" Score="2" ViewCount="1274" Body="&lt;p&gt;I have this idea or a very curious question in my mind. I am no where near professional though, but i would like it to be answered. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;We all know how wind turbines can be used to generate electricity. So is it possible to create a quadcoptor that will start with some minimal power by small battery but in time will sustain and keep its system on by self generating electricity and keep on rotating its rotors on its own without other external supply? &lt;/p&gt;&#xA;" OwnerUserId="7241" LastActivityDate="2019-05-03T13:32:26.243" Title="Self Powered Quadcoptor" Tags="&lt;quadcopter&gt;" AnswerCount="3" CommentCount="11" ContentLicense="CC BY-SA 3.0" />
  <row Id="4705" PostTypeId="1" AcceptedAnswerId="4712" CreationDate="2014-10-10T13:15:14.760" Score="0" ViewCount="42" Body="&lt;p&gt;I am currently building a hobby-weight (5.44kg) robot and will be using 2 x 14.4 cordless driller motors for my wheels. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The thing is I keep reading about high amperages when working with r/c models such as quadcopters BUT when I connect my cordless driller motor to my bench power supply and monitor current draw it never rises above 3.2 Amps even when I try to stop the motor by hand. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course in the arena in the event of a stand off I have plastic wheels which will slip so I am not too concerned about stall currents. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am now left wondering whether I have mis-calculated or whether people make a lot of fuss about high currents for nothing. or do these currents only perhaps really apply to brush-less motors?&lt;/p&gt;&#xA;" OwnerUserId="7198" LastActivityDate="2014-10-11T08:13:41.557" Title="Amperage on brushed motors" Tags="&lt;motor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4706" PostTypeId="1" AcceptedAnswerId="4711" CreationDate="2014-10-10T13:24:26.300" Score="2" ViewCount="1029" Body="&lt;p&gt;I am currently building a hobby-weight robot (5.44kg) and will be using 2 x 14.4v cordless drill brushed motors to drive my wheels. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have read somewhere that due to &quot;induced currents&quot; when I turn the motor off (or reverse it presumably?) I should protect it by using a diode or a capacitor across the terminals. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which should I use (capacitor or diode) and what are the parameters I need to consider for these components (voltage or current)? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some answers to a similar question discussed capacitors but not diodes. Are diodes relevant?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would I seriously damage the cordless drill (presumably quite tough) motor if I did nothing?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And don't motor controllers have any form of inbuilt protection for the motors anyway?&lt;/p&gt;&#xA;" OwnerUserId="7198" LastActivityDate="2014-10-11T08:08:29.583" Title="Diode or capacitor across terminals of brushed motor" Tags="&lt;motor&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4707" PostTypeId="1" AcceptedAnswerId="4708" CreationDate="2014-10-10T13:34:09.170" Score="1" ViewCount="119" Body="&lt;p&gt;I am building a Hobby-weight robot and my weapon of choice is a spinning disk at the front.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As regards the disk I was thinking of buying commercial (grinder-type) disks and change type of disk depending on the &quot;enemy's&quot; chassis construction material. So for instance I would have an aluminum cutting disk if the enemy's chassis is made of aluminum and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First question is therefore; do such disks do the job in practise (or break, fail to cut?)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Secondly, should I use a brushed or brush-less motor for the disk? I actually have ESCs for both but sort of feel a brushed motor will give me more torque while a brush-less motor might give me more speed. So which is more important speed or torque? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do know - from my uncle who uses metal lathes - that machines that cut metal usually spin at a slower speed (drills, cutting wheels etc)- indeed he likes to say that metal working machines are safer than wood-working ones partially for this reason. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I am a newbie and really would like to have an effective weapon if possible and breaking or not-cutting disks do not make such a weapon!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also is it normal practise to use one battery for everything (drive and weapon) or have two separate batteries?&lt;/p&gt;&#xA;" OwnerUserId="7198" LastEditorUserId="110" LastEditDate="2015-04-20T12:51:07.437" LastActivityDate="2015-04-20T12:51:07.437" Title="Spinning disk Weapon" Tags="&lt;motor&gt;&lt;battle-bot&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4708" PostTypeId="2" ParentId="4707" CreationDate="2014-10-10T14:46:07.250" Score="1" Body="&lt;p&gt;Well grinding machines in general use really high cutting speeds, so a very high revolution speed.&#xA;At a metal lathe it is pretty easy to get the force of your tool onto the workpiece. In a robo-fight it's actually not that easy, so i suggest very high speed.&#xA;More like an angle grinder&lt;/p&gt;&#xA;" OwnerUserId="6911" LastActivityDate="2014-10-10T14:46:07.250" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4709" PostTypeId="2" ParentId="4704" CreationDate="2014-10-10T23:01:10.890" Score="1" Body="&lt;p&gt;A quadcopter flies because the propellers put the air into motion, which generates a lift. This relies on the air flow around the propellers being relatively unobstructed. As you might imagine it would not fly if you obstructed the propellers with pieces of cardboard for instance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Wind turbines generate electricity from the wind. If you measured the wind speed before and after the turbine you would see that the wind speed has decreased after passing through the turbine. As such they do obstruct the air flow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's imagine a system with a quadcopter propeller and a wind turbine just underneath it. Because the turbine reduces the wind speed coming out of the whole system, it also reduces the quadcopter lift. To make things worse, the conservation of energy tells us that in an ideal system you can only collect as much energy as what is required to create the lift you lost. In a real system you collect &lt;strong&gt;less&lt;/strong&gt; energy than the lift you lost. So not only would you reduce the lift, you would also collect less energy than what is required to produce the wasted lift.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I'm afraid the answer is a no. Sorry.&lt;/p&gt;&#xA;" OwnerUserId="4249" LastActivityDate="2014-10-10T23:01:10.890" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4710" PostTypeId="2" ParentId="4704" CreationDate="2014-10-11T03:06:36.137" Score="3" Body="&lt;h2&gt;Generating electricity by rotation of rotors&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Yes, electric power generators and electric motors are often similar enough to do both tasks -- converting electrical energy to mechanical energy at one time (such as on takeoff), and converting mechanical energy to electrical energy at some other time (such as during landing).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any system that takes (mechanical) energy out of the wind and converts it to electrical energy is a &lt;a href=&quot;http://en.wikipedia.org/wiki/wind_turbine&quot; rel=&quot;nofollow noreferrer&quot;&gt;wind turbine&lt;/a&gt;.&#xA;Pretty much all commercial wind turbines are mounted on top of a rigid tower.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Generating electricity in the air without a rigid tower&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;A few &lt;a href=&quot;http://en.wikipedia.org/wiki/airborne_wind_turbine&quot; rel=&quot;nofollow noreferrer&quot;&gt;airborne wind turbines&lt;/a&gt; have been demonstrated.&#xA;They convert some of the energy of the wind into electrical energy, and simultaneously use the wind (or balloons) to stay aloft.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All airborne wind turbines that I've seen so far have one or two steel cables tethering them to a winch on the ground.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Airborne wind turbines can potentially produce more electric power at lower cost than wind turbines on a tower.&#xA;The cost is lower because a kilometer of steel cable that can support a few tons of tension from the wind is much simpler and lower cost than a 220 meter tower that can resist a ton of bending force from the wind.&#xA;The electric power is (potentially) higher because airborne wind turbines can fly higher than a tower, where the wind usually blows faster (has more mechanical energy) than it does closer to the ground.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other parts of airborne wind turbines are much more complicated than putting wind turbines on a tower.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Generating electricity in the air without any connection to the ground&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Many airplanes have a &lt;a href=&quot;http://en.wikipedia.org/wiki/ram_air_turbine&quot; rel=&quot;nofollow noreferrer&quot;&gt;ram air turbine&lt;/a&gt; that can generate electricity in the air.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While one might think that the first law of thermodynamics (conservation of energy) might make it impossible to generate more electrical energy with a ram air turbine than the energy is consumed keeping the airplane in the air, a careful analysis shows that there's no physical law that makes it impossible to generate electricity in the air without any connection to the ground.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, it seems to me that it would be more difficult than keeping a glider in the air, which is already tricky enough.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In principle, gliders can stay aloft indefinitely by extracting energy from the wind (typically from updrafts).&#xA;In practice &lt;a href=&quot;http://en.wikipedia.org/wiki/flight_endurance_record&quot; rel=&quot;nofollow noreferrer&quot;&gt;Charles Atger&lt;/a&gt; managed to keep a glider in the air 56 hours 15 minutes in 1952.&#xA;The FAI stopped recognizing new glider flight-time endurance records after that due to safety concerns.&#xA;Occasionally &lt;a href=&quot;http://en.wikipedia.org/wiki/cloud_suck&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;cloud suck&quot;&lt;/a&gt; updrafts put far more energy into a glider than is safe.&#xA;In principle a ram air turbine could convert some of that excess energy into electrical energy.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Quadrotors generating electric power&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;EDIT:&#xA;In response to comments that mathematically &quot;prove&quot; that quadrotors use up more electric power just staying airborne than they could possibly generate, let me point out that&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;&quot;If it happens, it must be possible.&quot;&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See the 4-rotor (and therefore quadrotor, right?) flying machine photographs in&#xA;&lt;a href=&quot;http://inhabitat.com/top-secret-google-x-buys-airborne-wind-turbine-company-makani-power/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Google X Buys Airborne Wind Turbine Company Makani Power&lt;/a&gt;; &lt;a href=&quot;http://www.google.com/makani/technology/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Makani technology&lt;/a&gt;, &lt;a href=&quot;https://plus.google.com/+makani/photos&quot; rel=&quot;nofollow noreferrer&quot;&gt;Makani photos&lt;/a&gt;, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In particular,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/KNwqt.jpg&quot; alt=&quot;Wing 7 generating power&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;A composite image of Wing 7 generating power autonomously during crosswind flight. Photo by Andrea Dunlap, composite work by Anita Tirapelle.&quot; --&#xA;&lt;a href=&quot;https://plus.google.com/+makani/photos/photo/5672410613505989778?pid=5672410613505989778&amp;amp;oid=111579908374957776413&quot; rel=&quot;nofollow noreferrer&quot;&gt;(Wing 7 generating power)&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/mnlV8.jpg&quot; alt=&quot;Wing 7 on the ground&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://plus.google.com/+makani/photos/photo/5696078333974767394?pid=5696078333974767394&amp;amp;oid=111579908374957776413&quot; rel=&quot;nofollow noreferrer&quot;&gt;(Wing 7 on the ground)&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="187" LastEditorUserId="187" LastEditDate="2014-10-21T15:51:41.097" LastActivityDate="2014-10-21T15:51:41.097" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4711" PostTypeId="2" ParentId="4706" CreationDate="2014-10-11T08:08:29.583" Score="1" Body="&lt;p&gt;The motor's aren't so much at risk here, poorly designed motor drivers are. The purpose of the diodes is to drain the exces energy generated (by disconnecting the motor) to the battery of your robot. When an electric motor is running by means of external power and that power is removed, it starts acting like a generator. If it can't deliver the power it is generating to something, the voltage over the motor terminals will keep rising until something releases it's magic smoke. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you look at the direction of the diodes in the attached image, you will see that the diodes enable the motor to drain it's exces power to the battery, thus saving your driver. By the way, the round things with the arrow in them, are the switches, they are called MOSFETs. &#xA;&lt;img src=&quot;https://i.stack.imgur.com/657xc.png&quot; alt=&quot;adsf&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The cap over the motor terminals is there to short out high frequency noise generated by power supply, the motor itself or something else. Make sure the cap is bipolar if you use one, otherwise it will blow if you reverse the motor. The size doesn't have to be huge, use something like 100nF.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What motor driver are you using? If you could provide me with a type, I can tell you whether or not you need the diodes, a small cap is always a good idea. &lt;/p&gt;&#xA;" OwnerUserId="1520" LastActivityDate="2014-10-11T08:08:29.583" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4712" PostTypeId="2" ParentId="4705" CreationDate="2014-10-11T08:13:41.557" Score="1" Body="&lt;p&gt;The stall amps are dependent on your type of motor, there are motors with stall currents into the 100's of amps, and some into a few milli amps. 3.2 Amps isn't a lot, but it isn't impossibly little either. The motor's used by quadcopters are brushless, they generally are way higher powered, into hundreds of watt's and more. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Make sure your power supply isn't current limited to 3.2 A. You are probably fine with a motor driver capable of something like 4A. &lt;/p&gt;&#xA;" OwnerUserId="1520" LastActivityDate="2014-10-11T08:13:41.557" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4713" PostTypeId="1" AcceptedAnswerId="4714" CreationDate="2014-10-11T11:36:21.880" Score="3" ViewCount="548" Body="&lt;p&gt;In a lab build I'm doing, I'm stuck at this problem, so I am fishing for suggestions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm creating a turn-table type setup where I need to make readings (with a nanotube-tip probe I've already designed, similar to an AFM probe) on the very edge/circumference of a 10 cm radius disk (substrate).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The current hurdle is: I need to get the substrate disk to move circularly in steps of 0.1 mm displacement -- meaning, I occasionally need to STOP at certain 0.1mm-increment positions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What would be a way I can achieve this, assuming an accurate feedback system (with accuracy of say ~0.1 mm, e.g., with quadrature optical encoders) is available if needed for closed-loop control?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Specs of commonly sold steppers don't seem to allow this kind of control. I'm at the moment trying to study how, e.g. hard disks achieve extreme accuracies (granted they don't have such large disks).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Certainly, direct-drive like I'm currently building (see below image) probably doesn't help!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/P24mX.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="1588" LastEditorUserId="1588" LastEditDate="2014-10-11T12:53:23.867" LastActivityDate="2014-10-17T23:52:51.057" Title="Rotate (and stop) a large disk in very tiny increments" Tags="&lt;motor&gt;&lt;stepper-motor&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4714" PostTypeId="2" ParentId="4713" CreationDate="2014-10-11T12:15:26.693" Score="4" Body="&lt;p&gt;You can use stepper motors easily:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given the 20cm diameter, this is around 63cm circumfence. Your target stepsize is around 0,1mm. This means the motor should do around 6300 steps per revolution.&#xA;If you take a common stepper motor, which has a step size of around 1,8° per step. So the motor performs 200steps/per revolution. your target is 6300. &#xA;Now we know the motor should have (6300/200) around 32times more accuracy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you have 2 different options: &lt;br&gt;&#xA;1. Use a gearbox with minimum ratio of 1:32&#xA;&lt;br&gt; Advantage: Still lot of force &lt;br&gt;&#xA;Disadvantage: It is pretty slow&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2 Use some Stepper magic and let him microstepping. There are drivers with around 128 times microstepping.&#xA;&lt;br&gt; advantage: Still decent velocity&#xA;&lt;br&gt; disadvante: looses most of this force.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could also combine this two methods... This is no problem at all.&lt;/p&gt;&#xA;" OwnerUserId="6911" LastActivityDate="2014-10-11T12:15:26.693" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="4715" PostTypeId="1" CreationDate="2014-10-11T13:20:08.290" Score="1" ViewCount="143" Body="&lt;p&gt;I am new to Morse and robotics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This code control the robot by giving the linear and angular velocity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the scene description&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;from morse.builder import *&#xA;robot = ATRV()&#xA;motion = MotionVW()&#xA;motion.add_stream('socket')&#xA;robot.append(motion)&#xA;&#xA;semanticL = SemanticCamera()&#xA;semanticL.translate(x=0.2, y=0.3, z=0.9)&#xA;robot.append(semanticL)&#xA;&#xA;semanticR = SemanticCamera()&#xA;semanticR.translate(x=0.2, y=-0.3, z=0.9)&#xA;robot.append(semanticR)&#xA;&#xA;motion.add_stream('socket')&#xA;semanticL.add_stream('socket')&#xA;semanticR.add_stream('socket')&#xA;&#xA;env = Environment('land-1/trees')&#xA;env.set_camera_location([10.0, -10.0, 10.0])&#xA;env.set_camera_rotation([1.0470, 0, 0.7854])&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and this is the control script&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;import pymorse&#xA;with pymorse.Morse() as simu:&#xA;    simu.robot.motion.publish({&quot;v&quot;: 3, &quot;w&quot;: -1})&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The robot moves well. But when I remove the semantic cameras from the scene description the robot do not move. I am confused, they are just sensor, why the robot don't move ?&lt;/p&gt;&#xA;" OwnerUserId="7249" LastActivityDate="2014-10-11T13:20:08.290" Title="control a robot with pymorse on MORSE simulator question" Tags="&lt;mobile-robot&gt;&lt;sensors&gt;&lt;control&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4716" PostTypeId="1" CreationDate="2014-10-11T15:25:41.753" Score="1" ViewCount="1224" Body="&lt;p&gt;I am currently building a hobby-weight (5.44kg) robot. The weapon will be a vertical spinning disk at the front. It will probably be a commercial one from the hardware store or I could maybe get one made.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have 2 cordless drill motors to drive my wheels so I should be ok there, but I am still lost where it comes to what motor I should get for my weapon. I am now inclined to think it should be brush-less although I am still open to other opinions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone please recommend a good motor (in-line brush-less) or brushed motor that will give me the speed and strength I need for the weapon?&lt;/p&gt;&#xA;" OwnerUserId="7198" LastEditorUserId="110" LastEditDate="2015-04-20T12:50:02.647" LastActivityDate="2015-04-20T12:50:02.647" Title="Motor for weapon for Hobbyweight" Tags="&lt;motor&gt;&lt;battle-bot&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="4717" PostTypeId="1" CreationDate="2014-10-12T13:09:35.813" Score="2" ViewCount="90" Body="&lt;p&gt;I want to analyze a traffic scene. My source data is a point cloud like &lt;a href=&quot;http://jankucera.blogspot.cz/2014/09/reprojecting-stereo-images-to-3d-point.html&quot; rel=&quot;nofollow&quot;&gt;this one&lt;/a&gt; (see images at the bottom of that post). I want to be able to detect objects that are on the road (cars, cyclists etc.). So first of all I need know where the road surface is so that I can remove or ignore these points or simply just run a detection above the surface level.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What are the ways to detect such road surface? The easiest scenario is a straight and flat road - I guess I could try to registrate a simple plane to the approximate position of the surface (I quite surely know it begins just in front of the car) and because the road surface is not a perfect plane I have to allow some tolerance around the plane.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More difficult scenario would be a curvy and wavy (undulated?) road surface that would form some kind of a 3D curve... I will appreciate any inputs.&lt;/p&gt;&#xA;" OwnerUserId="1021" LastEditorUserId="1021" LastEditDate="2014-10-12T13:19:46.430" LastActivityDate="2017-04-09T15:37:30.970" Title="Detect road surface in a traffic scene point cloud" Tags="&lt;mobile-robot&gt;&lt;wheeled-robot&gt;&lt;computer-vision&gt;&lt;algorithm&gt;&lt;stereo-vision&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4721" PostTypeId="1" CreationDate="2014-10-13T15:37:11.880" Score="3" ViewCount="5110" Body="&lt;p&gt;I am building an autonomous robot using PID control algorithm. So, far I have implemented PID using online resources/references. I am testing for stabilizing an axis of the quad copter. However, I am not successful to stabilize even one axis.&#xA;Description: My input for the PID is an angle value i.e the orientation of the quad copter measured by AHRS (a Gyroscope that measures angles) and the motors take integer values as speeds. What I am doing is,&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;motor_right_speed = base_speed + adjusted_value;&#xA;motor_left_speed = base_speed - adjusted_value;&#xA;adjusted_value += PID_output;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Where ajusted_value is a buffer that accumulates or subtracts the PID output value based on either PID output is +ve or -ve.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also tried,&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;motor_right_speed = base_speed + PID_output;&#xA;motor_left_speed = base_speed - PID_output;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Both don't seem to be working.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have tested using a wide range of P gain values (from very small to very large), but the quad copter only oscillates; it does not self-correct. Your help with suggestions would be greatly appreciated. Thanks!&lt;/p&gt;&#xA;" OwnerUserId="7262" LastEditorUserId="350" LastEditDate="2014-10-14T22:31:03.373" LastActivityDate="2014-11-21T09:29:39.127" Title="How to convert PID outputs to appropriate motor speeds for a quad copter" Tags="&lt;quadcopter&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4722" PostTypeId="1" AcceptedAnswerId="4821" CreationDate="2014-10-13T16:12:58.430" Score="6" ViewCount="57" Body="&lt;p&gt;I am looking for some figures surrounding the specs of brushless motors and their relative efficiency (in power usage terms) for multi-copter use. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are 4 basic specs for motors themselves:&#xA; - Motor width (EG 28mm)&#xA; - Motor height (EG 30mm)&#xA; - &quot;KV&quot; - RPM per volt supplied (EG 800KV)&#xA; - wattage (eg 300w)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This would then be a 28-30 800kv 300w motor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What i am looking for is a chart containing:&#xA; - Motor spec&#xA; - pack voltage (eg 14.8v)&#xA; - Amps drawn @ various % throttle (10% to 100% say)&#xA; - static thrust from various propellers (11x5, 12x6 etc etc)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does such information exist?&#xA;I know its a BIT subjective as prop and motor designs vary slightly, but a baseline would be a start.&lt;/p&gt;&#xA;" OwnerUserId="7263" LastActivityDate="2014-10-24T21:38:48.417" Title="Brush-less motor specs vs efficiency for multi-copters" Tags="&lt;brushless-motor&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4723" PostTypeId="1" CreationDate="2014-10-13T16:38:20.800" Score="2" ViewCount="141" Body="&lt;p&gt;I've got my hands on this laser range scanner but seem to have some problem receiving any output from it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't find any guide on  how to set it up on the internet, so I was wondering if it is even possible to set it up for mac or shall i do it using Linux and ROS ?&lt;/p&gt;&#xA;" OwnerUserId="7264" LastEditorUserId="-1" LastEditDate="2014-10-23T10:12:50.010" LastActivityDate="2014-10-23T10:12:50.010" Title="Hokuyo URG-04LX-UG01 and Mac compatibility issues" Tags="&lt;communication&gt;&lt;laser&gt;&lt;rangefinder&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4724" PostTypeId="1" CreationDate="2014-10-13T18:18:27.403" Score="1" ViewCount="498" Body="&lt;p&gt;I am working on a project but I lack advanced programming knowledge, especially about genetic algorithms. I am developing a prototype using WEBOTS 7.4.3 for the simulation. The project is to use genetic algorithms to evolve the gait of a biped robot. I have developed a physical model, but I am still uncertain about the motor choice. For the algorithm part, I find it hard to understand how to set the algorithm parameters and how to determine the fitness function. Could you please suggest a fitness function?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you for your help and efforts.&lt;/p&gt;&#xA;" OwnerUserId="7265" LastEditorUserId="4249" LastEditDate="2014-10-14T20:14:46.703" LastActivityDate="2014-10-14T20:14:46.703" Title="biped walking using Genetic Algorithm" Tags="&lt;algorithm&gt;&lt;machine-learning&gt;&lt;legged&gt;" AnswerCount="1" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="4725" PostTypeId="1" AcceptedAnswerId="4731" CreationDate="2014-10-13T19:16:28.143" Score="1" ViewCount="32" Body="&lt;p&gt;I have been going through a code base for multi agent motion planning. And I came across a recursive tree building algorithm for the agents. I haven't been able to figure out the algorithm. Does anyone know what it is called? Or any other similar kinds of algorithms so I could read more about it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is what I got from the code: &#xA;The node of the tree is as follows - &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt;   struct AgentTreeNode {&#xA;&amp;gt;     int begin;&#xA;&amp;gt;     int end;&#xA;&amp;gt;     float minX, maxX, minY, maxY;&#xA;&amp;gt;     int left;&#xA;&amp;gt;     int right;   };&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Each node has a max and min value for x and y. And also a begin, end, left and right value. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then the tree is split either horizontally or vertically based on which limits are longer (x or y). And an optimal value is found and agents are split. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then these split agents are recursively build again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you very much. &lt;/p&gt;&#xA;" OwnerUserId="7266" LastActivityDate="2014-10-14T07:50:30.193" Title="Recursive Tree Representation for Multi Agent Robots?" Tags="&lt;multi-agent&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4726" PostTypeId="1" CreationDate="2014-10-13T19:28:40.340" Score="0" ViewCount="1493" Body="&lt;p&gt;I have the following code for the ros turtlesim: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; #include &amp;lt;ros/ros.h&amp;gt;&#xA;#include &amp;lt;std_msgs/String.h&amp;gt; &#xA;#include &quot;geometry_msgs/Twist.h&quot;&#xA;#include &amp;lt;stdio.h&amp;gt;     &#xA;#include &amp;lt;stdlib.h&amp;gt;     &#xA;#include &amp;lt;time.h&amp;gt;       &#xA;void disruptcb(geometry_msgs::Twist msg) {&#xA;    ros::NodeHandle pubHandle;&#xA;    ros::Publisher publisher = pubHandle.advertise&amp;lt;geometry_msgs::Twist&amp;gt;(&quot;turtle1/cmd_vel&quot;, 1000);&#xA;    ros::Rate loop_rate(2);&#xA;&#xA;        double dist1=(rand()%100);&#xA;        double dist2=(rand()%100);&#xA;        std::cout&amp;lt;&amp;lt;dist1&amp;lt;&amp;lt;std::endl;&#xA;        dist1=dist1;&#xA;        dist2=dist2; &#xA;        msg.linear.x+=dist1;&#xA;        msg.angular.z+=dist2; &#xA;        std::cout&amp;lt;&amp;lt;msg&amp;lt;&amp;lt;std::endl;&#xA;        ROS_INFO(&quot;hello&quot; );&#xA;        publisher.publish(msg);&#xA;&#xA;}&#xA;int main(int argc,char** argv){&#xA;    srand(time(NULL));&#xA;    ros::init(argc,argv, &quot;things_going_wrong&quot;);&#xA;    ros::NodeHandle nh;&#xA;    ros::Subscriber sub = nh.subscribe(&quot;/ros_1/cmd_vel&quot;,1000,&amp;amp;disruptcb);&#xA;    ros::spin(); &#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;the idea behind this code is to introduce a random error to then practice error recovery in my code but this node does not appear to do anything at all. I do know that my other nodes are running but this one just doesn't appear to do anything, it doesn't exit it just hangs. Anybody know how to fix this?&lt;/p&gt;&#xA;" OwnerUserId="7226" LastEditorUserId="7226" LastEditDate="2014-10-13T19:44:25.807" LastActivityDate="2014-10-14T07:38:25.283" Title="ros node does not seem to do anything" Tags="&lt;ros&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4728" PostTypeId="2" ParentId="4721" CreationDate="2014-10-13T23:00:01.603" Score="0" Body="&lt;p&gt;I have been there before :) First double check that everything else is working. My IMU was not working in flight at first, but I didn't realise it because I only ever had tested it with the motors off. The vibrations made my algorithm go crazy. The sensors built-in low-pass filter helped.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next a gyro measures angular rates, not angles. So you can know the speed at which you are turning around an axis, but not the angle itself. You could integrate the angular rate and get the angle, but the gyro drift would soon send you back down on the ground. In order to achieve angular stabilisation you need an accelerometer. And if you needed to maintain a precise heading you would need a magnetometer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This said with just a gyro you can stabilise the angular rate in what some call the &quot;manual&quot; mode. Piloting in this mode requires skills but it's not impossible to learn. For this the input of the PID is an angular rate, and the output is a difference to apply between opposed motors (based on your pseudo-code I'm assuming you have a + configuration, X is is not much more complicated).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The correct formula to stabilise the roll rate only is the second one you used: &lt;strong&gt;motor_right_speed = base_speed + PID_output; motor_left_speed = base_speed - PID_output;&lt;/strong&gt; You want to be careful about making sure the output remains within the motors bounds. My experience is that PD controllers work the best for roll/pitch stabilisation (leave the I term null). Start at 0 for all the constants, raise P until the quad oscillates slightly, then increase D until the oscillations from P dampen. Repeat until D cannot compensate the oscillations and use the last stable pair of constants. In order for this to work you have to use a test rig. If you try to stabilise only 1 anglular rate in flight you will crash.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would recommend not assuming the problem is with the PID: based on what you said it's not unlikely the issue is somewhere else. In any case try to isolate the different units of your program and test them independently. It's much harder to debug a whole system than its separate components. Good luck, you'll be happy when it works!&lt;/p&gt;&#xA;" OwnerUserId="4249" LastActivityDate="2014-10-13T23:00:01.603" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4729" PostTypeId="2" ParentId="4583" CreationDate="2014-10-14T01:57:38.463" Score="1" Body="&lt;p&gt;I think the &lt;a href=&quot;http://en.wikipedia.org/wiki/Time-of-flight_camera&quot; rel=&quot;nofollow&quot;&gt;time-of-flight cameras&lt;/a&gt; would suffice for your application and are cheaper than laser scanners (which are much more precise).&lt;/p&gt;&#xA;" OwnerUserId="7268" LastActivityDate="2014-10-14T01:57:38.463" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4730" PostTypeId="2" ParentId="4726" CreationDate="2014-10-14T07:38:25.283" Score="2" Body="&lt;p&gt;I have tried your code. When publishing a message on &lt;code&gt;&quot;/ros_1/cmd_vel&quot;&lt;/code&gt; your &lt;code&gt;disruptcb&lt;/code&gt; will be called.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;rostopic pub /ros_1/cmd_vel geometry_msgs/Twist '{linear: {x: 1, y: 2, z: 3}, angular: {x: 1,y: 2,z: 3}}'&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But I can't connect to your outcome message &lt;code&gt;&quot;turtle1/cmd_vel&quot;&lt;/code&gt;. Try to advertise it inside the main function:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ros::Publisher* publisher;&#xA;void disruptcb(geometry_msgs::Twist msg) {&#xA;    ...&#xA;    publisher-&amp;gt;publish(msg);&#xA;}                   &#xA;int main(int argc,char** argv){&#xA;    ros::init(argc,argv, &quot;things_going_wrong&quot;);&#xA;    ros::NodeHandle nh;&#xA;    ros::Subscriber sub = nh.subscribe(&quot;/ros_1/cmd_vel&quot;,1000,&amp;amp;disruptcb);&#xA;    publisher = new ros::Publisher(nh.advertise&amp;lt;geometry_msgs::Twist&amp;gt;(&quot;turtle1/cmd_vel&quot;, 1000));&#xA;    ros::spin();&#xA;    delete publisher;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then outcome message will also be observed:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;rostopic echo /turtle1/cmd_vel&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="7133" LastActivityDate="2014-10-14T07:38:25.283" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4731" PostTypeId="2" ParentId="4725" CreationDate="2014-10-14T07:50:30.193" Score="1" Body="&lt;p&gt;It sounds like a &lt;a href=&quot;https://en.wikipedia.org/wiki/K-d_tree&quot; rel=&quot;nofollow&quot;&gt;KD-tree&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it is a KD-tree, the four floats seem a little redundant, bounding boxes can be calculated on the fly when traversing the tree, you only need to record the splitting plane in the node.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would guess that begin and end describe range of indices of agents belonging to the current node and left and right are indices of left and right subtree of the current node.&lt;/p&gt;&#xA;" OwnerUserId="482" LastActivityDate="2014-10-14T07:50:30.193" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4732" PostTypeId="2" ParentId="4682" CreationDate="2014-10-14T08:25:04.017" Score="1" Body="&lt;p&gt;Not really. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;With careful planning, experimentation and testing to minimize effect of servo motor magnetic field affecting the sensor (by placing sensor as far away as possible and mathematically iron compensation via angle table), one should be able to achieve accuracy of a few degrees, which should be sufficient for the said application.  (This excludes the case of sensor error detection via multiple sensors)&lt;/p&gt;&#xA;" OwnerUserId="5582" LastActivityDate="2014-10-14T08:25:04.017" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4733" PostTypeId="2" ParentId="4724" CreationDate="2014-10-14T14:12:21.070" Score="2" Body="&lt;p&gt;If you're only trying to walk forward the fitness function could be the distance covered by the biped. If you're also trying to control the heading, you could define a slightly more complex function which correlates the covered distance and the heading input.&lt;/p&gt;&#xA;" OwnerUserId="4249" LastActivityDate="2014-10-14T14:12:21.070" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4734" PostTypeId="1" CreationDate="2014-10-14T16:10:29.943" Score="2" ViewCount="1057" Body="&lt;p&gt;It would be easy to understand if you imagine a robotic vacuum cleaner. (For some models) It goes back to a specific place automatically to recharge. Like this, I want to make a robot which automatically goes to the place where a specific signal(like infrared ray) is emitting. &#xA;Following is the scenario that i've imagined.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1.Set the IR emitter in a specific place of a room. It always emits Infrared ray.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2.I connect 4 IR receiver to my 4WD robot car - front, left, right, and back side.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3.They receive IR from the emitter. I earn the distance from the emitter to each receiver with the intensity of IR.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;4.With these values, Arduino find out which receiver is closest from the emitter and choose the direction to go.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I could't know this will be possible. Because IR is a kind of light ray, so I can't get the distance with the difference of arrival time(like Ultrasonic). I searched several kinds of IR sensors, but they were only for sensing the possibility of collision. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my question is these..&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Can I get the distance and the direction from IR emitter to my arduino device with an IR receiver? &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If I can, then how many IR receivers do I need? And if I can't, what can I use to substitute IR emitters and receivers?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I guess IR can be interrupted because of sunlight or other light. So I guess I need some daylight filter. Do you think it's essential?? &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="7270" LastActivityDate="2015-01-13T00:31:11.070" Title="Can I make an automatically-parking robot car with IR sensor?" Tags="&lt;arduino&gt;&lt;sensors&gt;&lt;wheeled-robot&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4735" PostTypeId="2" ParentId="4734" CreationDate="2014-10-14T17:35:41.860" Score="0" Body="&lt;p&gt;You can use time of flight to calculate the distance of an object using infrared; this is very commonly done. Some good, cheap IR sensors are sold by Sharp. You'll have to linearize the output to compute the actual distance as shown here: &lt;a href=&quot;http://www.acroname.com/articles/linearizing-sharp-ranger.html&quot; rel=&quot;nofollow&quot;&gt;http://www.acroname.com/articles/linearizing-sharp-ranger.html&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can operate the IR emitter used to find the parking spot at a different frequency than the IR emitters used for computing distances and then band-pass filter both to make sure there is no interference.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should be able to drive towards the parking spot with just a single IR, turning in order to maximize the signal strength. Two would probably work better, where you turn in order to make the IR intensity on both equal (these would be placed in the front of the vehicle, probably similar to where headlights would be placed).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I believe the Sharp IR rangers already do some filtering, but I'm not sure as to what extent. In terms of sunlight, there's a ton of discussion about this topic if you just google it.&lt;/p&gt;&#xA;" OwnerUserId="1960" LastActivityDate="2014-10-14T17:35:41.860" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4736" PostTypeId="2" ParentId="4734" CreationDate="2014-10-14T22:28:59.007" Score="1" Body="&lt;p&gt;If you use several IR receivers (say, 9 of them) spaced out over a $90^\circ$ arc at regular intervals, you will have constructed a makeshift sensor for detecting the angle of a remote IR emitter.  Between that and moving (and/or rotating) known distances with your vehicle, you should be able to &lt;a href=&quot;http://en.wikipedia.org/wiki/Triangulation&quot; rel=&quot;nofollow&quot;&gt;triangulate&lt;/a&gt; the location of the nearest IR source.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-10-14T22:28:59.007" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4737" PostTypeId="2" ParentId="4587" CreationDate="2014-10-14T22:37:57.820" Score="0" Body="&lt;p&gt;What you are looking for is called a solenoid.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-10-14T22:37:57.820" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4738" PostTypeId="1" AcceptedAnswerId="4742" CreationDate="2014-10-15T00:50:16.347" Score="0" ViewCount="43" Body="&lt;p&gt;I am simulating a wheeled robot of six-wheels and can be independently steered, like MER-Opportunity.&#xA;The wheeled robot can perform throttling forward, &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;||---|| &amp;lt;--wheel orientation&#xA;||   ||&#xA;||---||&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;crab-motion, &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;//---// &amp;lt;--wheel orientation when heading is 45&#xA;//   //&#xA;//---//&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and turning on the spot.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;//---\\ &amp;lt;--wheel orientation&#xA;||   ||&#xA;\\---//&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;My question is: &lt;strong&gt;&lt;em&gt;Is it correct to say that I have 2 motion primitives?&lt;/em&gt;&lt;/strong&gt; Throttling forward is basically crab-motion with heading zero.&lt;/p&gt;&#xA;" OwnerUserId="1167" LastActivityDate="2014-10-15T14:27:04.593" Title="Wheeled Robot Motion Primitives: Is throttling forward and crab motion considered as one?" Tags="&lt;wheeled-robot&gt;&lt;motion&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4740" PostTypeId="2" ParentId="4526" CreationDate="2014-10-15T06:50:11.000" Score="2" Body="&lt;p&gt;I found the reason, in my original code, i just use one stage PID.&#xA;The right one should comprise of 2 cascaded PIDs: rate PID and stablized PID&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/wBGwx.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="7038" LastActivityDate="2014-10-15T06:50:11.000" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4741" PostTypeId="1" CreationDate="2014-10-15T09:47:25.880" Score="3" ViewCount="1364" Body="&lt;p&gt;I am writing a kinematics library in Go as part of my final year project. I am working with Product of Exponentials method and have successfully implemented the Forward Kinematics part of this. I need help with the Inverse Kinematics. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I understand the theoretical aspect of it. I would like a numerical example where actual numbers are used for the Paden-Kahan subproblems as the ones dealt in &lt;a href=&quot;http://www.cds.caltech.edu/~murray/books/MLS/pdf/mls94-complete.pdf&quot; rel=&quot;nofollow&quot;&gt;&quot;A Mathematical Introduction to Robotic Manipulation - Murray,Li and Sastry&quot; [freely-available online PDF]&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I specifically need help with knowing what should p,q be when trying to solve the inverse kinematics. The book just says given, a point p,q around the axis of rotation of the joint. But how do you know these points in practice, like when the robot is actually moving, how do you keep track of these points? For these reasons I need a numerical example to understand it. &lt;/p&gt;&#xA;" OwnerUserId="3905" LastEditorUserId="110" LastEditDate="2015-02-15T18:08:10.433" LastActivityDate="2015-02-15T18:08:10.433" Title="Numerical-Example for Paden-Kahan subproblems?" Tags="&lt;inverse-kinematics&gt;&lt;product-of-exponentials&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4742" PostTypeId="2" ParentId="4738" CreationDate="2014-10-15T14:27:04.593" Score="1" Body="&lt;p&gt;While I am not really sure what you exactly mean by &quot;motion primitive&quot;, having the ability to do the &quot;crab-motion&quot; enables you to translate regardless of your orientation and without changing it (assuming 180 degrees of steering) which would not be the case if you had only one pair of steerable wheels (like in cars, remember the parallel parking problem).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note however that this is still non-holomonic motion system unless the wheels are omniwheels (you cannot rotate and translate independently).&lt;/p&gt;&#xA;" OwnerUserId="4017" LastActivityDate="2014-10-15T14:27:04.593" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4743" PostTypeId="2" ParentId="4689" CreationDate="2014-10-15T14:36:45.970" Score="0" Body="&lt;p&gt;You don't need to modify or mutilate a belt in any way to be able to use it as a ball elevator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Simply place the belt upside-down &lt;em&gt;above&lt;/em&gt; the balls, and and use it to roll the balls uphill.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/thumb/3/30/BallBearing.gif/120px-BallBearing.gif&quot; alt=&quot;ball bearing animation&quot;&gt; &amp;lt;-- similar to what's happening in this part of the animation&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this case, the inner ring represents your belt and the outer ring represents the ramp.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="-1" LastEditDate="2017-03-10T09:42:49.263" LastActivityDate="2014-10-15T14:36:45.970" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4744" PostTypeId="2" ParentId="4699" CreationDate="2014-10-15T14:46:37.410" Score="0" Body="&lt;p&gt;It will be up to you to pick an IR LED (or a set of them) that provide enough power to differentiate from ambient light.  Unless I'm reading your question incorrectly, there should be no issue with putting many LEDs at the docking station to multiply the power.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind that you can always flash the source LED(s) at a known frequency or in some more complicated pattern to make that signal separable from other light sources.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-10-15T14:46:37.410" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4745" PostTypeId="1" AcceptedAnswerId="4746" CreationDate="2014-10-15T15:33:14.460" Score="1" ViewCount="706" Body="&lt;p&gt;I've just started taking a robotics course and I am having a little problem.&#xA;I need to rotate the $O_i-1$ coordinate system into a position, where $X_i-1$ will be parallel with $X_i$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The transformation matrix is given, but I have no idea how I can figure out this transformation matrix from the picture that can be found below.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Actually, I know why the last vector is [0 0 0 1] and the previous vector is [0 0 1 0], but I can't figure out why the first vector is [$\cos q_i$ $\sin q_i$ 0 0] and the second [$-\sin q_i$ $\cos q_i$ 0 0].&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/s3BlX.png&quot; alt=&quot;The picture&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="7277" LastEditorUserId="350" LastEditDate="2014-10-16T20:25:06.807" LastActivityDate="2018-03-11T10:30:49.600" Title="How do I get this transformation matrix?" Tags="&lt;robotic-arm&gt;&lt;industrial-robot&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4746" PostTypeId="2" ParentId="4745" CreationDate="2014-10-15T17:18:18.270" Score="1" Body="&lt;p&gt;This is a standard rotation matrix with pure rotation about the Z axis.  See for more info: &lt;a href=&quot;http://en.wikipedia.org/wiki/Rotation_matrix&quot; rel=&quot;nofollow&quot;&gt;http://en.wikipedia.org/wiki/Rotation_matrix&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-10-15T17:18:18.270" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4748" PostTypeId="2" ParentId="4713" CreationDate="2014-10-15T18:25:15.210" Score="2" Body="&lt;p&gt;Why do you need to have the motor at the axis? Wouldn't it be much easier to have &lt;del&gt;several&lt;/del&gt; at least one motors at the edge of the disc and the disc would lie on wheels (the smaller the more accurate)? There could still be a pivot in the middle but just with ball bearings instead of a motor. If the surfaces are clean this should be accurate and by far easier to build. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If this is incomprehensible I'll do a drawing. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;[I'd have preferred for this to be a comment, but lack the reputation and wanted to be helpful]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: Here have crappy drawings; I hope they bring the general idea across though. &#xA;It would be quite important to have a force pulling (or pressing if it is convenient to have something above the disc) the disc down so that you have more friction; then normal rubber wheels would be enough I think (with the benefit of having smooth motion). &#xA;I'm not sure what you mean by skate bearings as wheels; the wheels should have friction in contact with the disc. The non-motorized wheels (to support the disc) could have ball bearings as hubs. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;On a side note, the design you proposed in the question is quite likely to cause the disc to wobble even if there is a only a slight misalignment or vertical force on the disc. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It might also be advisable to mount all those things on a material that doesn't change volume too much based on temperature/humidity. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/MxTBh.jpg&quot; alt=&quot;seen from above, the disc is transparent&quot;&gt;&#xA;&lt;img src=&quot;https://i.stack.imgur.com/KUsPt.jpg&quot; alt=&quot;seen from the side, the non-motorized wheel is transparent&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="6773" LastEditorUserId="6773" LastEditDate="2014-10-17T23:52:51.057" LastActivityDate="2014-10-17T23:52:51.057" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4749" PostTypeId="1" CreationDate="2014-10-15T20:04:14.523" Score="1" ViewCount="43" Body="&lt;p&gt;I was wondering if there was a good book or paper that surveys current techniques in local navigation? The earliest one I could find was from 2005 and I was hoping to find something more recent. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have worked with certain approaches such as the dynamic window approach and the velocity obstacles approach. I'm hoping for some book or paper to give me a broader perspective to the problem of local navigation which I believe has been fairly robustly solved by a number of autonomous driving companies. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you. &lt;/p&gt;&#xA;" OwnerUserId="7266" LastActivityDate="2014-10-15T20:04:14.523" Title="Survey for Local Navigation" Tags="&lt;navigation&gt;&lt;motion-planning&gt;" AnswerCount="0" CommentCount="3" ClosedDate="2014-10-23T10:10:58.980" ContentLicense="CC BY-SA 3.0" />
  <row Id="4750" PostTypeId="1" CreationDate="2014-10-15T20:44:35.093" Score="2" ViewCount="628" Body="&lt;p&gt;Im currently designing a robot for my undergraduate project. One of the task of this robot is to follow the wall. For the purpose I'm using a PID control system, where the reference is given from a ultrasonic sensor. So my problem here is im having a hard time tuning the PID. I know i can find the P coefficient pretty easily by plotting the desired set point range vs desired motor output speed. Even then the robot is not so stable, so i though of adding DI part of PID. But how do find out roughly the values of these coefficients without just trying out random values (manual tuning)? Thank you so much. Much appreciated.&lt;/p&gt;&#xA;" OwnerUserId="7278" LastActivityDate="2014-10-15T20:44:35.093" Title="PID Control Tuning" Tags="&lt;motor&gt;&lt;control&gt;&lt;pid&gt;" AnswerCount="0" CommentCount="4" ClosedDate="2014-10-23T10:10:49.177" ContentLicense="CC BY-SA 3.0" />
  <row Id="4751" PostTypeId="2" ParentId="4717" CreationDate="2014-10-15T23:34:27.377" Score="2" Body="&lt;p&gt;RANSAC is usually used to segment planes from the point cloud (see: &lt;a href=&quot;http://www.pointclouds.org/documentation/tutorials/planar_segmentation.php&quot; rel=&quot;nofollow&quot;&gt;http://www.pointclouds.org/documentation/tutorials/planar_segmentation.php&lt;/a&gt;). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As an alternative, when you detect objects that are on the road you could neglect surfaces/points for which the curvature is close or equal to zero. However, this requires you to have some way to get the curvature information, for example, normals (see: &lt;a href=&quot;http://pointclouds.org/documentation/tutorials/normal_estimation.php&quot; rel=&quot;nofollow&quot;&gt;http://pointclouds.org/documentation/tutorials/normal_estimation.php&lt;/a&gt;).&lt;/p&gt;&#xA;" OwnerUserId="7280" LastActivityDate="2014-10-15T23:34:27.377" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4752" PostTypeId="2" ParentId="1170" CreationDate="2014-10-15T23:56:58.913" Score="5" Body="&lt;p&gt;This is more of a Linux than a Gazebo problem. You can just add this line &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;export GAZEBO_MODEL_PATH=[...]/models:$GAZEBO_MODEL_PATH&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;to your &lt;em&gt;~/.bashrc&lt;/em&gt; file.&lt;/p&gt;&#xA;" OwnerUserId="7280" LastActivityDate="2014-10-15T23:56:58.913" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4753" PostTypeId="2" ParentId="3144" CreationDate="2014-10-16T00:00:25.020" Score="2" Body="&lt;p&gt;Introductory robotics books should cover this, for example: Introduction to Robotics: Mechanics and Control by J. Craig.&lt;/p&gt;&#xA;" OwnerUserId="7280" LastActivityDate="2014-10-16T00:00:25.020" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4754" PostTypeId="1" AcceptedAnswerId="4760" CreationDate="2014-10-16T03:06:56.800" Score="6" ViewCount="4340" Body="&lt;p&gt;I've build a simple wheeled robot based on two continuous servos, controlled by Raspberry Pi running ROS-groovy, with a smart phone mounted on top to provide additional sensors.  I'd like to situate the bot in a room and have it move to various points on command.  I don't have laser ranger finder but do have a good ultrasonic ranger finder and kinect sensors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What are the typical ROS setup for this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The idea I'm thinking is to personally (e.g. manually) map my room using kinect and use this map using only the ultrasonic range finder sensors and IMU in the lightweight robot.  Would this be possible?&lt;/p&gt;&#xA;" OwnerUserId="7282" LastActivityDate="2014-10-17T16:28:48.303" Title="Build a ROS robot with SLAM without laser" Tags="&lt;localization&gt;&lt;ros&gt;&lt;slam&gt;&lt;raspberry-pi&gt;&lt;ultrasonic-sensors&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4755" PostTypeId="1" AcceptedAnswerId="4817" CreationDate="2014-10-16T05:51:47.650" Score="3" ViewCount="571" Body="&lt;p&gt;By watching this &lt;a href=&quot;http://youtu.be/rA9tm0gTln8&quot; rel=&quot;nofollow&quot;&gt;video&lt;/a&gt; which explains how to calculate the classic Denavit–Hartenberg parameters of a kinematic chain, I was left with the impression that the parameter $r_i$ (or $a_i$) will always be positive. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this true? If not, could you give examples where it could be negative? &lt;/p&gt;&#xA;" OwnerUserId="7040" LastEditorUserId="110" LastEditDate="2015-02-15T17:56:37.453" LastActivityDate="2019-10-15T09:57:41.283" Title="Parameter $r$ of Denavit-Hartenberg" Tags="&lt;forward-kinematics&gt;&lt;dh-parameters&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4757" PostTypeId="2" ParentId="3144" CreationDate="2014-10-16T20:29:40.703" Score="5" Body="&lt;p&gt;For these sorts of problems, I always like to attempt to solve them myself. And they're surprisingly simple when you think about them geometrically. Parallel mechanisms are especially easy because each part of the mechanism can be considered separately, and each part is very simple.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The base part (at the top of the image) contains three servo motors. Think about one motor. When the end effector (blue triangle) is in some position, what angle does the motor need to be?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/TCNYQ.png&quot; alt=&quot;Parallel Mechanism&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Imagine a sphere centered on one corner of the end effector triangle. The radius of the sphere is the length of the arm attached to that corner. Now imagine the servo arm swinging, tracing out a circle. Where does this circle intersect the sphere?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a pretty simple problem to solve. Think of the servo arm sweeping out a plane. That plane intersects the sphere:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/E1h9z.png&quot; alt=&quot;Parallel Mechanism&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;... &lt;a href=&quot;https://en.wikipedia.org/wiki/Circle_of_a_sphere&quot; rel=&quot;noreferrer&quot;&gt;creating a circle&lt;/a&gt;. Now the problem is just the intersection of two circles. Find the two intersection points, and choose the one that makes most sense (the one that  puts the servo arm into its possible angle range.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Added: For an intuitive explanation of inverse kinematics for serial manipulators, that avoids horrible Denavit-Hartenberg parameters, try my old &lt;a href=&quot;http://freespace.virgin.net/hugo.elias/models/m_ik2.htm&quot; rel=&quot;noreferrer&quot;&gt;Inverse Kinematics Article&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="40" LastEditorUserId="40" LastEditDate="2014-10-16T20:38:18.103" LastActivityDate="2014-10-16T20:38:18.103" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4758" PostTypeId="2" ParentId="4554" CreationDate="2014-10-16T21:27:08.357" Score="0" Body="&lt;p&gt;There are some microcontrollers which can act as a USB host, E.G. &lt;a href=&quot;http://www.nxp.com/documents/data_sheet/LPC4357_53_37_33.pdf&quot; rel=&quot;nofollow&quot;&gt;NXP LPC4357&lt;/a&gt;. However, microcontrollers tend to have very little RAM. The LPC4357 for example has only 136kB. If you use all of this to store an image, you'd only be able to store a resolution of 373x373 pixels!  The USB host stack and other code are probably going to need quite a bit too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My advice would be to use a small computer which can do the job, E.G. &lt;a href=&quot;http://jonmacey.blogspot.co.uk/2012/07/raspberry-pi-and-kinect.html&quot; rel=&quot;nofollow&quot;&gt;Raspberry Pi&lt;/a&gt;. These tend to have many megabytes of RAM, they run Linux and you can get drivers for them. They aren't big (compared to a Kinect), and fairly low power.&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2014-10-16T21:27:08.357" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4759" PostTypeId="1" AcceptedAnswerId="4765" CreationDate="2014-10-16T21:50:43.743" Score="1" ViewCount="83" Body="&lt;p&gt;So, I am designing a rover that will navigate to a rock, and then calculate the height of the rock. Currently, my team's design involves using an ultrasonic rangefinder and lots of math. I was interested in what sensors you would use to solve this problem, or how you would go about it? Assume that the rover has already located the rock. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additional Info: We are using an Arduino Uno to control our rover. It is completely autonomous.&lt;/p&gt;&#xA;" OwnerUserId="7292" LastActivityDate="2014-10-17T09:57:05.763" Title="How to find the height of a rock with a rover?" Tags="&lt;arduino&gt;&lt;wheeled-robot&gt;&lt;algorithm&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4760" PostTypeId="2" ParentId="4754" CreationDate="2014-10-16T22:25:44.933" Score="5" Body="&lt;p&gt;A kinect mounted on your robot is enough for mapping and localization. There are a few different packages that will work:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://wiki.ros.org/rgbdslam&quot; rel=&quot;nofollow&quot;&gt;rgbdslam&lt;/a&gt; can create a 3d map using a kinect&lt;/li&gt;&#xA;&lt;li&gt;You can use &lt;a href=&quot;http://wiki.ros.org/depthimage_to_laserscan&quot; rel=&quot;nofollow&quot;&gt;depthimage_to_laserscan&lt;/a&gt; to take in a depth image from the kinect and output a laser scan message which you can then use with &lt;a href=&quot;http://wiki.ros.org/gmapping&quot; rel=&quot;nofollow&quot;&gt;gmapping&lt;/a&gt; for mapping, and the &lt;a href=&quot;http://wiki.ros.org/navigation&quot; rel=&quot;nofollow&quot;&gt;nav stack&lt;/a&gt; to navigate your robot.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;If you have a ring of ultrasonic rangers on your robot, you can use those for gmapping and navigation, though the kinect will certainly work better.&lt;/p&gt;&#xA;" OwnerUserId="2226" LastEditorUserId="2226" LastEditDate="2014-10-17T16:28:48.303" LastActivityDate="2014-10-17T16:28:48.303" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4761" PostTypeId="1" CreationDate="2014-10-17T05:41:02.710" Score="0" ViewCount="41" Body="&lt;p&gt;I'm building camera device which is able to take pictures of paragliders in mid air.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To let the camera know where the glider is I thought about using GPS data from the pilot's smartphone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is: What are possible ways to transmit the GPS data to the groundstation and which can be considered a good solution?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I thought about sending the data to a server via some mobile network, but a direct communication solution would be preferable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The pilot has mid-air pretty good mobile reception and the maximum distance between pilot and ground station is around 3km.&lt;/p&gt;&#xA;" OwnerUserId="6911" LastEditorUserId="6911" LastEditDate="2014-10-17T05:47:47.110" LastActivityDate="2014-10-17T10:12:31.280" Title="Sending a smartphone's GPS wireless" Tags="&lt;gps&gt;&lt;communication&gt;&lt;wireless&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4762" PostTypeId="1" AcceptedAnswerId="4768" CreationDate="2014-10-17T08:12:09.320" Score="1" ViewCount="248" Body="&lt;p&gt;I am a web developer. I am fascinated by Quadrocopters and i am trying to learn how to build one and basically i am trying to jump into robotics fields. I don't have much electric circuit and electronics knowledge so i did some research on how to build and what type of knowledge you would require to develop such flying machine. So i started learning basics of electronics from &lt;a href=&quot;http://www.ibiblio.org/kuphaldt/electricCircuits/&quot; rel=&quot;nofollow&quot;&gt;Lessons In Electric Circuits by Tony R. Kuphaldt&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The books are very interesting but i could not find a technique so that i can implement what i learn from the books. Basically i am just going through the stuffs, and understanding them little by little. What i want to know is that what is the right way and effective way to learn electronics and electric circuit from your experience and i should i do now so that i can increase my learning speed so that i can achieve my goal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While i was researching i came across topics such as mathematical modelling and modelling the quadrocopters first and them implementing them on real. How can i gain such knowledge to model something mathematically and implement such in real life? How much math and what areas of mathematics do i need to learn and how can i learn such? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now you have idea what i want to learn and achieve. Can you please suggest me a road map or steps i need to take to gain such knowledge and skill to develop myself, so that in near future i would be able to build such flying machines on my own. &lt;/p&gt;&#xA;" OwnerUserId="7241" LastActivityDate="2016-10-16T16:56:06.847" Title="Learning Materials for Beginners in Robotics and Quadrocopters" Tags="&lt;quadcopter&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="3" ClosedDate="2016-10-17T09:57:34.357" ContentLicense="CC BY-SA 3.0" />
  <row Id="4763" PostTypeId="2" ParentId="4761" CreationDate="2014-10-17T08:49:01.780" Score="1" Body="&lt;p&gt;I can't comment yet (reputation limitation) so I've had to make a few assumptions...&#xA;Option one:&#xA;Write an app for the smartphone that communicates with a server (over mobile data) that the ground station is also in contact with - when the ground station indicates an image has been taken, the server through the app instructs the phone to transmit it's GPS location.&#xA;Option two:&#xA;This still requires an app to be written but this time it would pass the gps data to an attached arduino device with an RF module that communicates with the ground station Radio Frequency Module.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are alternatives to communicating with the ground station but still achieving the same result.&#xA;An arduino device interfaced with the smartphone logs the gps data with a timestamp which is matched up with the timestamp that the ground station records when it takes an image.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: It should be noted however that options one and two approaches require that a particular camera is assigned to a particular paraglider - as there is no way to know &lt;em&gt;which&lt;/em&gt; paraglider the camera took an image of to know which smartphone to retrieve the gps data from.&lt;/p&gt;&#xA;" OwnerUserId="7185" LastEditorUserId="7185" LastEditDate="2014-10-17T10:12:31.280" LastActivityDate="2014-10-17T10:12:31.280" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4764" PostTypeId="1" CreationDate="2014-10-17T09:44:35.683" Score="0" ViewCount="133" Body="&lt;p&gt;Instantaneous rate of change of displacement is given by,&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;v(t) = (s(t + dt) - s(t))/dt, where dt tends to 0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;while average rate of change of displacement is given by, &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;v(t) = (s(t[n]) - s(t[n-1]))/(t[n] - t[n-1])&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The first one gives the slope or derivative of a displacement function at a particular instant of time and thus varies with time. I was wondering how is it going to help me calculate the velocity of my robot's end effector, which is the foot of the leg of the robot(bipedal). If i make a reading of the position of the robot every 1ms to keep the approximation as accurate as possible, my instantaneous velocity would be zero wouldn't it? Since my robot wouldn't have moved anywhere in 1ms time. Agreed, 't' would increment as t+dt, dt == 0.001s. Then v(t) would be v(0.001) = s(0.002) - s(0.001) which is zero, because there is no displacement in that small time frame, right? Am I doing something wrong here? Or on the other hand, do I just use average rate of change?&#xA;I have this question, since, if there is a manipulator, in my case the foot of my robot, and it's trajectory is given by a 3x3 homogenous matrix,&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[{c(t),-s(t), 0},&#xA; {s(t), c(t), 0},&#xA; {  0,    0,  1}], where c,s are cos(theta) and sin(theta)respectively,&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;if on paper, this is differentiated, this would give me a spatial/body velocity matrix as &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[{0, -d(theta)/dt, 0},&#xA; {d(theta)/dt,  0, 0},&#xA; {    0,        0, 0}]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So how do I compute this differentiation in code. I just need something of the sort of a pseudocode.&lt;/p&gt;&#xA;" OwnerUserId="3905" LastEditorUserId="3905" LastEditDate="2014-10-17T14:56:57.263" LastActivityDate="2014-10-17T14:56:57.263" Title="Which is more useful? Instantaneous rate of change of displacement or Average rate of change of displacement?" Tags="&lt;mobile-robot&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4765" PostTypeId="2" ParentId="4759" CreationDate="2014-10-17T09:57:05.763" Score="0" Body="&lt;p&gt;Given the scales we are talking about I think the lumberjack technique would not work. Lumberjacks walk away from a tree until they visually measure an angle of 45 degrees between the bottom and the top of the tree: at that point they are standing at a distance from the tree which is equal to its height, and which they can measure easily walking back to the tree. It only works because the lumberjack is small in comparison to the tree so model approximations such as &quot;the eyes of the lumberjack are at ground level&quot; or &quot;the ground is perfectly horizontal&quot; hold true enough to not impact the final result too much. I don't think it would work well enough on a rover and a 7&quot; rock. Note that if you wanted to go this route anyway you could implement it with a camera or a laser rangefinder, and you could use any angle and trigonometry formulas.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because the rock is small I would use a mechanical trick. Maybe use a pole with a sonar pointing down that you would place directly above the rock. You could use a pendulum to make sure it's vertical even if the rover is on uneven ground. Or you could develop a device like a forklift that you would place above the rock and progressively lower until you hit the rock. You would then know the height based on the position of the stepper/servo driving the lifting part.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's the way I would go with this challenge, I encourage others to post their answers if they have different ideas because there might be plenty of other interesting solutions!&lt;/p&gt;&#xA;" OwnerUserId="4249" LastActivityDate="2014-10-17T09:57:05.763" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4766" PostTypeId="1" AcceptedAnswerId="4770" CreationDate="2014-10-17T11:04:26.970" Score="7" ViewCount="1984" Body="&lt;p&gt;I'm building a robot that uses a beaglebone black, however I have several different usb devices that I want to connect to it (microphone, usb sound device and some other things). Now I have heard that the usb output of the beaglebone doesn't power more then 0.1A. So the combined draw of these usb devices is likely to exceed this by a fair margin. So I started looking for powered usb hubs to use instead. However these tend to be powered by 220V and my robot currently only has a 12V power supply and a converter to 5V for the beaglebone. Which given the size expense and inefficiency of converting power to 220 from 12V and then back again doesn't seem very good. Is there a good method for fixing this? &lt;/p&gt;&#xA;" OwnerUserId="7226" LastEditorUserId="7226" LastEditDate="2014-10-17T11:55:16.053" LastActivityDate="2021-01-27T18:58:08.687" Title="how to power extra usb devices for beaglebone black" Tags="&lt;power&gt;&lt;usb&gt;&lt;beagle-bone&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4767" PostTypeId="2" ParentId="4764" CreationDate="2014-10-17T12:05:25.770" Score="2" Body="&lt;p&gt;You are confusing continuous time concepts and discrete time concepts. The instantaneous velocity is a continuous time concept and doesn't directly apply to systems where time is measured discretely, e.g. every 1 ms. If you have a system where dt is very small, what you call average velocity is an approximation of the instantaneous velocity. To my knowledge, for real systems there is no practical way to directly measure instantaneous velocity so this approximation is the best we can do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the example you give of measuring displacement every 1ms is really a discrete time example. Also, your intuition is off: if you have non-zero velocity then no matter how small dt is (except dt=0) there will be a change in real position. Depending on how good your measurement system is, though, you may not be able to measure that change.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2014-10-17T12:05:25.770" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4768" PostTypeId="2" ParentId="4762" CreationDate="2014-10-17T13:30:28.333" Score="1" Body="&lt;p&gt;I was in a very similar situation about a year ago, and I now have a flying aircraft. Below is what worked for me, but many other routes are possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First I purchased an almost ready to fly quadcopter kit from a well-known manufacturer. I only had do a bit of soldering, assemble the frame, configure the flight controller, and bind the transmitter. While this step may not seem necessary, it allowed me to develop a basic understanding of how the system works as a whole. I had no prior RC knowledge. It also allowed me to learn how to fly, and to have realistic expectations about how a well-tuned quadcopter should behave.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then I got an Arduino and basic sensors. At this point I was not sure I would end up building my very own quadcopter. I just wanted some toys to play with and see what I could do without spending too much money. I am a hobbyist programmer so the C++ part was not a problem. You are a web developer so you will have to learn how to program real software ;-) This step allowed me to confirm I could connect a microcontroller and a few sensors without blowing up the house. Eventually I ended up with a working inertial measurement unit (IMU), combining gyroscope accelerometer and magnetometer data into an accurate representation of the device orientation in space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It then became clear that building a quadcopter was a realistic target. I spent a little more money to purchase motors, propellers, ESCs, a radio receiver (I already had the transmitter from my first quadcopter) and a few wooden sticks for the frame. With some more programming efforts I eventually got everything to fit in together nicely.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The whole process took me about a year and I'm still working on it. It's worth noting that along the way I also learnt about a few unnecessary things, like servo motors, barometers, and sonars. I did not mean to take the fastest route. If like me you have a day job and a life this is at least a 6 months long project. In order to keep me motivated I posted my steps on a &lt;a href=&quot;http://robokitchen.tumblr.com&quot; rel=&quot;nofollow&quot;&gt;blog&lt;/a&gt; and I only set myself realistic targets: I did not start thinking I would build a quadcopter, instead I thought I would learn the Arduino basics and refined my goals as I progressed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I went to uni (10 years ago) and I had a basic level in physics, mathematics, and electronics. The difficult skills I had to learn were 3D vector geometry and controller theory. 3D geometry is for the IMU. I used quaternions because Arduino requires optimisations for speed. Matrices and a better microcontroller is probably a more reasonable choice. Controller theory is to implement and tune the PID controllers which drive the motors so as to keep the aircraft level. These are all skills that you can learn online. I never bought a book for this project. I also didn't model my quadcopter mathematically like you seem to suggest.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is my experience, I hope it is helpful to you. I'm sure the challenges will be different for you anyway. If I had to summarise I would urge you to purchase some components/parts and see what you can do with them because learning quadcopters is more about practice than theory. Good luck!&lt;/p&gt;&#xA;" OwnerUserId="4249" LastEditorUserId="10596" LastEditDate="2016-10-15T18:15:38.347" LastActivityDate="2016-10-15T18:15:38.347" CommentCount="0" CommunityOwnedDate="2014-10-17T13:30:28.333" ContentLicense="CC BY-SA 3.0" />
  <row Id="4769" PostTypeId="2" ParentId="1277" CreationDate="2014-10-17T18:03:11.017" Score="1" Body="&lt;p&gt;I've wanted to do something similar, so hearing of your experiences would be great. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The best thing I think would be to get a colorimeter, and build a calibration table into your code. Since paint can vary by manufacturer or medium additive (possibly even output levels if the tubes clog some), you could have the robot print its own test pattern. This would also calibrate to the resolution of the color mixer, since you might not have 255 distinct and evenly spaced levels of paint release per color.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's say your magenta was stepped with a screw thread attached to a stepper motor. If this thread only had an obscure number of 82 turns to adjust paint release levels, with higher output in the middle of the curve, then the test pattern would show the result of 82 different output levels of your magenta.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using a colorimeter under diffused ambient lighting, you can determine what colors are output by which flow settings. Then, create a lookup table in your program to do the translation. To increase color resolution, you could even account for premixed colors (shades of brown, green, gray, etc). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let me know how it goes&lt;/p&gt;&#xA;" OwnerUserId="7297" LastActivityDate="2014-10-17T18:03:11.017" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4770" PostTypeId="2" ParentId="4766" CreationDate="2014-10-17T21:20:29.607" Score="3" Body="&lt;p&gt;Yes this is pretty easy to solve, you just need basic soldering skills.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just open the cables of your additional USB-devices, you will see 4 wires. 2 of them are for the data, just leave them. The other two are for powersupply, just connect them to your 5V power supply. But make sure you have to right ones, otherwise your device will start producing magic smoke.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 90% of all cases the wires are colored, so you can see what is the use of a specific wire. But dont trust this, especially if you use cheap equipment. Better measure them.&lt;/p&gt;&#xA;" OwnerUserId="6911" LastEditorUserId="6911" LastEditDate="2014-10-18T17:45:22.023" LastActivityDate="2014-10-18T17:45:22.023" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4771" PostTypeId="1" AcceptedAnswerId="4819" CreationDate="2014-10-18T10:06:22.577" Score="1" ViewCount="689" Body="&lt;p&gt;I'm trying to track a simple robot (e.g. arduino, raspberry pi, even toys) in a room using fixed location kinect sensor(s) and cameras at different parts of the room.  How might one usually use to do this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit 1:  More specifically, I want to know the position (and if possible, orientation) of an moving object in the room using one or more cameras or depth sensors.  I'm new to the area, but one idea might be to use blob or haar to detect the moving object and get its location from kinect depth-map, and I'm trying to find what package I can use for that end.  But for navigation to work I'd have to pre-map the room manually or with kinect.  I can put some sensors on this tracked moving object, e.g. IMU, sonar, but not a kinect.  I am allowed full PCs running ROS/opencv/kinect sdk in the environment, and I can wirelessly communicate with the tracked object (which is presently a raspberry pi running ROS groovy on wheels)&lt;/p&gt;&#xA;" OwnerUserId="7282" LastEditorUserId="7282" LastEditDate="2014-10-21T01:39:17.203" LastActivityDate="2014-10-24T11:07:47.923" Title="tracking robot in a room" Tags="&lt;arduino&gt;&lt;computer-vision&gt;&lt;kinect&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4772" PostTypeId="2" ParentId="4766" CreationDate="2014-10-18T14:20:39.310" Score="2" Body="&lt;p&gt;Use a self-powered hub. Look at the power adapter from the mains (220v). In almost all instances, it is converting 220vac to 5vdc (sometimes 5vdc and rarely 12vdv).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cut the power adapter cable to the hub in half after determining which half of the cable pair  is negative and which is positive (see picture below). Often it's as obvious as the red wire is positive, but ALWAYS CHECK WITH YOUR MULTIMETER.  Splice the hub power cable into your existing 5vdc or 12vdc power and plug into your hub.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using a hub is preferable to injecting the external 5V into your BeagleBoard because there is less chance for the magic smoke to be forced out by a bad connection, improper voltage, or polarity. Also higher power to all devices is usually achieved by letting the hub handle the power negotiations from the bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/UkaRp.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="4545" LastEditorUserId="4545" LastEditDate="2014-10-27T04:11:17.240" LastActivityDate="2014-10-27T04:11:17.240" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4774" PostTypeId="2" ParentId="3139" CreationDate="2014-10-18T17:47:27.000" Score="8" Body="&lt;p&gt;Craig uses the &lt;a href=&quot;https://en.wikipedia.org/wiki/Denavit%E2%80%93Hartenberg_parameters#Modified_DH_parameters&quot; rel=&quot;noreferrer&quot;&gt;modified DH parameters&lt;/a&gt;, while Spong uses the &lt;a href=&quot;https://en.wikipedia.org/wiki/Denavit%E2%80%93Hartenberg_parameters#Four_parameters&quot; rel=&quot;noreferrer&quot;&gt;classic DH parameters&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The difference between them are the locations of the coordinates system attachment to the links: in the modified DH, the coordinates of frame $O_{i}$ is put on axis $i$, while in the classic DH convention the coordinates of frame $O_{i}$ is put on axis $i+1$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update (2014.10.26)&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Reading Craig's book again, I noted that the modified DH matrix is also different because of the order of the applied transformations. I edited the Wikipedia link with the different DH matrix.&lt;/p&gt;&#xA;" OwnerUserId="7040" LastEditorUserId="7040" LastEditDate="2014-10-26T02:23:12.587" LastActivityDate="2014-10-26T02:23:12.587" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4775" PostTypeId="1" CreationDate="2014-10-18T19:35:26.993" Score="2" ViewCount="76" Body="&lt;p&gt;We are working on a project which requires us to detect and hit a ball. We are trying to accomplish the task by detecting the position of ball by processing the input from a camera. The problem is that we are required to do this in very bright lights. The bright lights are making it difficult to detect the white colored ball.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Is there a way we can write the code such that it automatically reduces the intensity of lights in the image?&lt;/li&gt;&#xA;&lt;li&gt;Is there an &lt;strong&gt;efficient&lt;/strong&gt; way to extract only the V component from the HSV image?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;We have very limited experience with image processing so any alternative approach to detecting the object will also be helpful&lt;/p&gt;&#xA;" OwnerUserId="7304" LastEditorUserId="7304" LastEditDate="2014-10-22T14:00:08.010" LastActivityDate="2014-10-23T17:11:27.863" Title="Image processing in bright lights" Tags="&lt;computer-vision&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4776" PostTypeId="2" ParentId="4716" CreationDate="2014-10-18T20:12:58.520" Score="1" Body="&lt;p&gt;I would start by looking at cordless power tools that do the job you want. It sounds like you want a lot of speed and power for cutting through another robot. Well, you want a cordless saw:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/jjPQn.jpg&quot; alt=&quot;Cordless saw&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Don't forget the mount the motor so that when the saw hits the enemy, it throws the enemy upwards, and pushes your robot down. For this saw, it means having the motor on the right of your robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Added: OK, so you have a 5.44k weight limit. Well, there are a few smaller cordless saws available, like the &lt;a href=&quot;http://www.makita.com/en-us/Modules/Tools/ToolDetails.aspx?Name=SH01W&quot; rel=&quot;nofollow noreferrer&quot;&gt;Makita SH01W&lt;/a&gt; which weighs 1.5kg. By taking off some of the casing, you might get that down to 1.25kg. I wouldn't bother with a drill motor for the saw, as it wouldn't be fast enough. A saw really needs that kinetic energy to stop it getting stuck.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you find yourself over the weight limit, and can't get under it, then you could go for a brushless motor. These have a better power:weight ratio than brushed motors, so you could save another 500g perhaps. But the downside is that you now have to spend time attaching it securely to the saw's gearbox. OK if you have the time, skill and equipment. But something to bear in mind.&lt;/p&gt;&#xA;" OwnerUserId="40" LastEditorUserId="40" LastEditDate="2015-01-17T20:52:31.753" LastActivityDate="2015-01-17T20:52:31.753" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4778" PostTypeId="2" ParentId="3139" CreationDate="2014-10-18T22:36:06.927" Score="3" Body="&lt;p&gt;You should read this paper: &quot;&lt;a href=&quot;https://web.archive.org/web/20121119091715/http://profesores.usfq.edu.ec:80/laurents/IME440/DETC2005-85460_DenavitHartenberg.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Lipkin 2005: A Note on Denavit-Hartenberg Notation in Robotics&lt;/a&gt;&quot;.  It explains the &lt;strong&gt;3&lt;/strong&gt; main DH parameter conventions and how they differ.&lt;/p&gt;&#xA;" OwnerUserId="110" LastEditorUserId="23472" LastEditDate="2019-10-15T09:57:52.520" LastActivityDate="2019-10-15T09:57:52.520" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="4779" PostTypeId="2" ParentId="2970" CreationDate="2014-10-19T20:19:51.543" Score="0" Body="&lt;p&gt;Well, the torque produced by a DC motor is proportional to the current running through it. Simply attach a DC motor to the end of the pipe, and control the current somehow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem with this is that the torque is all in one direction. If you need to test your system in both directions, then you'll also need some way to reverse the direction of the current.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other problem is that a DC motor's torque isn't perfectly constant as it rotates. If you need perfectly constant and controllable torque, then you'll the following will solve both problems:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Couple the motor to the pipe using a torque sensor. Use a PID controller to allow you to control the torque. This way you can control the torque accurately and very dynamically.&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2014-10-19T20:19:51.543" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4780" PostTypeId="2" ParentId="2897" CreationDate="2014-10-20T04:15:37.050" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;the Slave Address is 0x1D (if my SAO=1, which I believe is referring to the I2C bus being on channel 1 on my raspberrypi v2)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;SA0 is actually a pin on the chip (pin 7 by the datasheet). Changing it's value allows you to specify the address, helping to avoid address clashes. So it depends on how you've connected that pin in your circuit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the datasheet:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The MMA8452Q's standard slave address is a choice between the two sequential addresses 0011100 and 0011101. The &#xA;  selection is made by the high and low logic level of the SA0 (pin 7) input respectively&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If you have SA0 already set to '1' then it's probably worth looking at the values from all the data registers: 0x01 to 0x06. If the device is outputting low values it's possible the MSBs will be 0.&lt;/p&gt;&#xA;" OwnerUserId="7300" LastActivityDate="2014-10-20T04:15:37.050" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4782" PostTypeId="1" CreationDate="2014-10-20T08:39:31.207" Score="1" ViewCount="267" Body="&lt;p&gt;I am constructing a 5.44Kg Hobby-weight battle robot and one of the safety rules is that the robot must have a power switch that turns off power to the motors (and weapon).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The robot has three sub-systems; the drive motors (one battery), the weapon (another battery) and some lighting (a small 9 volt battery).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have read that since all these will be connected to the same receiver it is important to have all the electronics sharing a common ground for everything to work properly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I know that usually it is the &quot;live&quot; wire that is connected to the switch, but I was thinking of hitting two birds with one stone and connecting all the ground wires (rather than the live wires) to the switch. In this way I still turn off power and also have a common ground. In terms of safety (shorts) etc I am not too concerned because I am using XT 60 connectors and have been careful to use only female plugs for the power leads (so no prongs are visible).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems to me that it should work and still be safe enough especially since I am not dealing with mains voltage levels here, but on the other hand I don't want to look stupid.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does this way of connecting to the switch make sense or am I violating some unwritten law? Is this normal practice? Would it effect the circuitry in any way to have the grounds connected together?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was also thinking of using a switch from a PC power supply; as far as I know this is rated for reasonably high currents. In my case I will have 3 cordless motors, each of which might be drawing up to 5 amps when under load, so say 15 amps in all. Has anyone out there ever used such switches or did you buy high current ones? In that case what should I ask for?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="7198" LastEditorUserId="110" LastEditDate="2015-04-20T12:52:56.507" LastActivityDate="2015-04-20T12:52:56.507" Title="Power switch and common ground on a battle robot" Tags="&lt;control&gt;&lt;power&gt;&lt;battle-bot&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4783" PostTypeId="2" ParentId="4782" CreationDate="2014-10-20T10:02:22.017" Score="1" Body="&lt;p&gt;I can say:&quot;Yes it works&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any recommendation not doing this? I cannot say, but it works. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem you may get is with a weak design. You have to be sure, that there is not any switch/sensor/relay/wire which is able to bypass the main switch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not sure whether the PC-switch will work, because a computer usually has a power consumption of less then 1000W. This means a current of around 5Amps (10Amps for the US).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you draw around 20Amps, this may exceed the capability of the switch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suggest using an EMO switch.They usually can handle currents of 50Amps+ and it you know what to do with something went wrong. Just Smash it.&lt;/p&gt;&#xA;" OwnerUserId="6911" LastActivityDate="2014-10-20T10:02:22.017" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4784" PostTypeId="1" AcceptedAnswerId="4785" CreationDate="2014-10-20T10:45:30.827" Score="0" ViewCount="2222" Body="&lt;p&gt;I'm trying to import the tutorial robot given at &lt;a href=&quot;http://gazebosim.org/tutorials?tut=build_robot&amp;amp;cat=build_robot&quot; rel=&quot;nofollow&quot;&gt;this link&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However this gives the following error: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Error [Param.cc:181] Unable to set value [1,0471975511965976] for key[horizontal_fov]&#xA;Error [Param.cc:181] Unable to set value [0,100000001] for key[near]&#xA;Error [parser_urdf.cc:2635] Unable to call parseURDF on robot model&#xA;Error [parser.cc:278] parse as old deprecated model file failed.&#xA;Error [parser_urdf.cc:2635] Unable to call parseURDF on robot model&#xA;Error [parser.cc:278] parse as old deprecated model file failed.&#xA;&#xA;&#xA;Error [parser.cc:278] parse as old deprecated model file failed.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This sugest something is wrong with parsing but does not actually point towards any line of my code (the example is only 103 lines long). &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    &amp;lt;link name='chassis'&amp;gt;&#xA;      &amp;lt;pose&amp;gt;0 0 .1 0 0 0&amp;lt;/pose&amp;gt;&#xA;      &amp;lt;collision name='collision'&amp;gt;&#xA;        &amp;lt;geometry&amp;gt;&#xA;          &amp;lt;box&amp;gt;&#xA;            &amp;lt;size&amp;gt;.4 .2 .1&amp;lt;/size&amp;gt;&#xA;          &amp;lt;/box&amp;gt;&#xA;        &amp;lt;/geometry&amp;gt;&#xA;      &amp;lt;/collision&amp;gt;&#xA;&#xA;      &amp;lt;visual name='visual'&amp;gt;&#xA;        &amp;lt;geometry&amp;gt;&#xA;          &amp;lt;box&amp;gt;&#xA;            &amp;lt;size&amp;gt;.4 .2 .1&amp;lt;/size&amp;gt;&#xA;          &amp;lt;/box&amp;gt;&#xA;        &amp;lt;/geometry&amp;gt;&#xA;      &amp;lt;/visual&amp;gt;&#xA;&#xA;      &amp;lt;collision name='caster_collision'&amp;gt;&#xA;        &amp;lt;pose&amp;gt;-0.15 0 -0.05 0 0 0&amp;lt;/pose&amp;gt;&#xA;        &amp;lt;geometry&amp;gt;&#xA;          &amp;lt;sphere&amp;gt;&#xA;          &amp;lt;radius&amp;gt;.05&amp;lt;/radius&amp;gt;&#xA;        &amp;lt;/sphere&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;&#xA;      &amp;lt;surface&amp;gt;&#xA;        &amp;lt;friction&amp;gt;&#xA;          &amp;lt;ode&amp;gt;&#xA;            &amp;lt;mu&amp;gt;0&amp;lt;/mu&amp;gt;&#xA;            &amp;lt;mu2&amp;gt;0&amp;lt;/mu2&amp;gt;&#xA;            &amp;lt;slip1&amp;gt;1.0&amp;lt;/slip1&amp;gt;&#xA;            &amp;lt;slip2&amp;gt;1.0&amp;lt;/slip2&amp;gt;&#xA;          &amp;lt;/ode&amp;gt;&#xA;        &amp;lt;/friction&amp;gt;&#xA;      &amp;lt;/surface&amp;gt;&#xA;    &amp;lt;/collision&amp;gt;&#xA;&#xA;    &amp;lt;visual name='caster_visual'&amp;gt;&#xA;      &amp;lt;pose&amp;gt;-0.15 0 -0.05 0 0 0&amp;lt;/pose&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;sphere&amp;gt;&#xA;          &amp;lt;radius&amp;gt;.05&amp;lt;/radius&amp;gt;&#xA;        &amp;lt;/sphere&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;    &amp;lt;/visual&amp;gt;&#xA;  &amp;lt;/link&amp;gt;&#xA;  &amp;lt;link name=&quot;left_wheel&quot;&amp;gt;&#xA;    &amp;lt;pose&amp;gt;0.1 0.13 0.1 0 1.5707 1.5707&amp;lt;/pose&amp;gt;&#xA;    &amp;lt;collision name=&quot;collision&quot;&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;cylinder&amp;gt;&#xA;          &amp;lt;radius&amp;gt;.1&amp;lt;/radius&amp;gt;&#xA;          &amp;lt;length&amp;gt;.05&amp;lt;/length&amp;gt;&#xA;        &amp;lt;/cylinder&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;    &amp;lt;/collision&amp;gt;&#xA;    &amp;lt;visual name=&quot;visual&quot;&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;cylinder&amp;gt;&#xA;          &amp;lt;radius&amp;gt;.1&amp;lt;/radius&amp;gt;&#xA;          &amp;lt;length&amp;gt;.05&amp;lt;/length&amp;gt;&#xA;        &amp;lt;/cylinder&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;    &amp;lt;/visual&amp;gt;&#xA;  &amp;lt;/link&amp;gt;&#xA;&#xA;  &amp;lt;link name=&quot;right_wheel&quot;&amp;gt;&#xA;    &amp;lt;pose&amp;gt;0.1 -0.13 0.1 0 1.5707 1.5707&amp;lt;/pose&amp;gt;&#xA;    &amp;lt;collision name=&quot;collision&quot;&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;cylinder&amp;gt;&#xA;          &amp;lt;radius&amp;gt;.1&amp;lt;/radius&amp;gt;&#xA;          &amp;lt;length&amp;gt;.05&amp;lt;/length&amp;gt;&#xA;        &amp;lt;/cylinder&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;    &amp;lt;/collision&amp;gt;&#xA;    &amp;lt;visual name=&quot;visual&quot;&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;cylinder&amp;gt;&#xA;          &amp;lt;radius&amp;gt;.1&amp;lt;/radius&amp;gt;&#xA;          &amp;lt;length&amp;gt;.05&amp;lt;/length&amp;gt;&#xA;        &amp;lt;/cylinder&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;    &amp;lt;/visual&amp;gt;&#xA;  &amp;lt;/link&amp;gt;&#xA;  &amp;lt;joint type=&quot;revolute&quot; name=&quot;left_wheel_hinge&quot;&amp;gt;&#xA;    &amp;lt;pose&amp;gt;0 0 -0.03 0 0 0&amp;lt;/pose&amp;gt;&#xA;    &amp;lt;child&amp;gt;left_wheel&amp;lt;/child&amp;gt;&#xA;    &amp;lt;parent&amp;gt;chassis&amp;lt;/parent&amp;gt;&#xA;    &amp;lt;axis&amp;gt;&#xA;      &amp;lt;xyz&amp;gt;0 1 0&amp;lt;/xyz&amp;gt;&#xA;    &amp;lt;/axis&amp;gt;&#xA;  &amp;lt;/joint&amp;gt;&#xA;&#xA;  &amp;lt;joint type=&quot;revolute&quot; name=&quot;right_wheel_hinge&quot;&amp;gt;&#xA;    &amp;lt;pose&amp;gt;0 0 0.03 0 0 0&amp;lt;/pose&amp;gt;&#xA;    &amp;lt;child&amp;gt;right_wheel&amp;lt;/child&amp;gt;&#xA;    &amp;lt;parent&amp;gt;chassis&amp;lt;/parent&amp;gt;&#xA;    &amp;lt;axis&amp;gt;&#xA;      &amp;lt;xyz&amp;gt;0 1 0&amp;lt;/xyz&amp;gt;&#xA;    &amp;lt;/axis&amp;gt;&#xA;  &amp;lt;/joint&amp;gt;&#xA;  &amp;lt;/model&amp;gt;&#xA;&amp;lt;/sdf&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This is on ubuntu 14.04. Is there any hint at what I'm doing wrong or what information can I provide to better come to a solution &lt;/p&gt;&#xA;" OwnerUserId="7226" LastEditorUserId="7226" LastEditDate="2014-10-20T11:11:21.337" LastActivityDate="2019-12-27T23:42:17.233" Title="gazebo import robot gives error" Tags="&lt;simulator&gt;&lt;gazebo&gt;&lt;simulation&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4785" PostTypeId="2" ParentId="4784" CreationDate="2014-10-20T11:19:53.037" Score="0" Body="&lt;p&gt;I found the solution, I should just have looked better at the tutorial as I missed a few lines of code. &lt;/p&gt;&#xA;" OwnerUserId="7226" LastActivityDate="2014-10-20T11:19:53.037" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4787" PostTypeId="1" CreationDate="2014-10-20T12:58:31.927" Score="4" ViewCount="265" Body="&lt;p&gt;I'm currently developing a SLAM software on a robot, and I tried the Scan Matching algorithm to solve the odometry problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I read this article :&#xA;&lt;a href=&quot;http://webdiis.unizar.es/~montesan/web/pdfs/minguez06TRO.pdf&quot; rel=&quot;nofollow&quot;&gt;Metric-Based Iterative Closest Point Scan Matching&#xA;for Sensor Displacement Estimation&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found it really well explained, and I strictly followed the formulas given in the article to implement the algorithm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can see my implementation in python there :&#xA;&lt;a href=&quot;https://github.com/pierrolelivier/SLAMScanMatching/blob/master/ScanMatching.py&quot; rel=&quot;nofollow&quot;&gt;ScanMatching.py&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem I have is that, during my tests, the right rotation was found, but the translation was totally false. The values of translation are extremely high.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do you have guys any idea of what can be the problem in my code ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Otherwise, should I post my question on StackOverflow or on the Mathematics Stack Exchange ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ICP part should be correct, as I tested it many times, but the Least Square Minimization doesn't seem to give good results.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The parts that might be problematic are the function getAXX() to getBX() (starting at line 91).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you noticed, I used many decimal.Decimal values, cause sometimes the max float was not big enough to contain some values.&lt;/p&gt;&#xA;" OwnerUserId="7191" LastActivityDate="2019-03-31T17:01:37.863" Title="Scan Matching finds right rotation but false translation" Tags="&lt;slam&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4788" PostTypeId="2" ParentId="4775" CreationDate="2014-10-20T13:04:37.283" Score="2" Body="&lt;p&gt;First, you need to identify whether your camera is up to the task or not. If the camera, seeing the very bright lights, just gives you a complete &quot;white&quot; for all different colors, there is absolutely nothing you can do in software to compensate for it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, the first step is to adjust your camera. If you don't want to get in the coding yet, just take a photo of your bright lights with that camera, open it with &lt;a href=&quot;http://www.gimp.org/&quot; rel=&quot;nofollow&quot;&gt;gimp&lt;/a&gt; for example and reduce its brightness. If you as a human can start to distinguish the colors, then you can also do that in software. If reducing brightness simply gives you gray color, then the color information is simply lost at the time the camera took the photo.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Take this with a grain of salt though, as taking a photo with the camera and a video are different things.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Solution 1:&lt;/strong&gt; If your camera is controllable, you might be able to change settings on it to reduce the sensor exposures to light before producing the image/video. This completely solves your problem, because then it's as if you are not in bright lights any more.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Solution 2:&lt;/strong&gt; &lt;strong&gt;If you can distinguish colors, even if barely&lt;/strong&gt;, then you can process the image by your own software and reduce the brightness. For this, you need to convert the format of the image received by your camera to &lt;a href=&quot;https://en.wikipedia.org/wiki/HSL_and_HSV&quot; rel=&quot;nofollow&quot;&gt;HSL&lt;/a&gt; and then reduce the Lightness before converting it back to the format your image processing algorithm understands. If your camera outputs &lt;a href=&quot;https://en.wikipedia.org/wiki/RGB_color_model&quot; rel=&quot;nofollow&quot;&gt;RGB&lt;/a&gt; for example, you can search for &quot;RGB to HSL&quot; on the internet for code in many languages freely available.&lt;/p&gt;&#xA;" OwnerUserId="158" LastActivityDate="2014-10-20T13:04:37.283" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4789" PostTypeId="1" CreationDate="2014-10-21T03:13:41.683" Score="1" ViewCount="85" Body="&lt;p&gt;I have been working with the Velocity Obstacles concept. Recently, I came across a probabilistic extension of this and couldn't understand the inner workings. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Source: Recursive Probabilistic Velocity Obstacles for Reflective Navigation &lt;a href=&quot;http://www.morpha.de/download/publications/FAW_ASER03_Kluge.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.morpha.de/download/publications/FAW_ASER03_Kluge.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/20jll.png&quot; alt=&quot;Shape Uncertainty Formulation&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What does the equation at the bottom and the top mean? Vij is the relative velocity of agent i to agent j. ri &amp;amp; ci and rj &amp;amp; cj are their respective radius and centers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Update:&#xA;What does inf(ri + rj) and sup(ri + rj) mean? Does it mean that I should define a function that goes from 1 to 0 from inf to sup? And if not, then how do I calculate the value of PCC at any given point?&lt;/p&gt;&#xA;" OwnerUserId="7266" LastEditorUserId="7266" LastEditDate="2014-10-21T17:37:02.803" LastActivityDate="2014-10-21T17:37:02.803" Title="Probabilistic Velocity Obstacles" Tags="&lt;probability&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4790" PostTypeId="2" ParentId="4545" CreationDate="2014-10-22T00:17:17.357" Score="1" Body="&lt;p&gt;The ServoShock module works by itself, you just have to wire the connections.  If you use the shield, it's plug and play.  You can pull the button/axes states and write servo position outputs using the SPI bus, there's a Arduino library at the ServoShock documentation page at www.servoshock.com.&lt;/p&gt;&#xA;" OwnerUserId="7319" LastActivityDate="2014-10-22T00:17:17.357" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4791" PostTypeId="2" ParentId="4578" CreationDate="2014-10-22T02:13:54.747" Score="1" Body="&lt;p&gt;You should start here &#xA;&lt;a href=&quot;http://wiki.ros.org/gmapping&quot; rel=&quot;nofollow&quot;&gt;http://wiki.ros.org/gmapping&lt;/a&gt;&#xA;Or if you are unfamiliar with ROS, start doing the beginner tutorials.&#xA;After that set up your Robot and install ROS on it.&#xA;gmapping will automatically build a map of your room as you move the robot around.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally after having a map file, all you need is to set up the navigation&#xA;&lt;a href=&quot;http://wiki.ros.org/navigation&quot; rel=&quot;nofollow&quot;&gt;http://wiki.ros.org/navigation&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There you will see the robot in your map and can tell it to go to any point inside that map.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It will use the global map of your room for global path planning and then if it encounters an obstacle on the way it will detect it using the kinect (or any other sensors like sonar or PSD) and replan a new path.&lt;/p&gt;&#xA;" OwnerUserId="4429" LastActivityDate="2014-10-22T02:13:54.747" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4793" PostTypeId="1" AcceptedAnswerId="4813" CreationDate="2014-10-22T08:43:18.130" Score="5" ViewCount="584" Body="&lt;p&gt;I'm reading this &lt;a href=&quot;http://www-lar.deis.unibo.it/people/cmelchiorri/Files_Robotica/FIR_05_Dynamics.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;pdf&lt;/a&gt;. The dynamic equation of one arm is provided which is &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;l \ddot{\theta} + d \dot{\theta} + mgL sin(\theta) = \tau&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\theta$ : joint variable. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\tau$ : joint torque&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$m$ : mass&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$L$ : distance between centre mass and joint. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$d$ : viscous friction coefficient&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$l$ : inertia seen at the rotation axis. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/CvrSY.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to use P (proportional) controller for now. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\tau = -K_{p} (\theta - \theta_{d})&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My Matlab code is &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;clear all&#xA;clc&#xA;&#xA;t = 0:0.1:5;&#xA;&#xA;x0 = [0; 0];&#xA;&#xA;[t, x] = ode45('ODESolver', t, x0);&#xA;&#xA;e = x(:,1) - (pi/2); % Error theta1&#xA;&#xA;plot(t, e);&#xA;title('Error of \theta');&#xA;xlabel('time');&#xA;ylabel('\theta(t)');&#xA;grid on&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;For solving the differential equation &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;function dx = ODESolver(t, x)&#xA;&#xA;dx = zeros(2,1);&#xA;%Parameters:&#xA;&#xA;m  = 2;&#xA;d  = 0.001;&#xA;L  = 1;&#xA;I = 0.0023;&#xA;g  = 9.81;&#xA;&#xA;T = x(1) - (pi/2);&#xA;&#xA;&#xA;dx(1) = x(2);&#xA;&#xA;q2dot = 1/I*T - 1/I*d*x(2) - 1/I*m*g*L*sin(x(1));&#xA;&#xA;dx(2) = q2dot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The error is &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/TIUNE.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is why the error is not approaching zero as time goes? The problem is a regulation track, so the error must approach zero. &lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="350" LastEditDate="2014-10-27T02:18:35.630" LastActivityDate="2018-07-12T12:54:37.893" Title="Proportional controller error doesn't approach zero" Tags="&lt;control&gt;&lt;dynamics&gt;&lt;manipulator&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4794" PostTypeId="1" AcceptedAnswerId="4799" CreationDate="2014-10-22T11:09:38.287" Score="0" ViewCount="462" Body="&lt;p&gt;I bought 2 brushed motor controllers from China to use with my hobby-weight battle robot  (&lt;a href=&quot;http://www.banggood.com/ESC-Brushed-Speed-Controller-For-RC-Car-Truck-Boat-320A-7_2V-16V-p-915276.html&quot; rel=&quot;nofollow&quot;&gt;http://www.banggood.com/ESC-Brushed-Speed-Controller-For-RC-Car-Truck-Boat-320A-7_2V-16V-p-915276.html&lt;/a&gt;). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;These are intended for use with my 2 cordless drill motors which will be driving the left and right wheel respectively. The robot will therefore be steered in &quot;tank mode&quot; by varying the speed and direction of rotation of the 2 motors using the two joysticks on my Turnigy 9x transmitter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is: I have seen videos on youtube where people calibrate brushless motor controllers (ESCs) using some system of pushing the joystick on a standard transmitter forward and listening to tones and then doing the same for reverse and so on. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However when I asked the suppliers about a similar procedure for these brushed controllers, all they could say is that they did not need calibration. The exact words were &quot;It seems that you're talking about transmitter for copters,but this ESC is for RC car or boat. You pull the trigger, it goes forward, you push the trigger, it reverse. And you don't need to calibrate it, just plug it, then it can work.&quot;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My transmitter is not one of those gun shaped ones used for cars. So am I in trouble with these controllers or should they work correctly out of the box as the supplier seems to be implying?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may fairly ask why have I not just tried this out and the simple answer is that my LIPO charger has not yet arrived and I therefore cannot power anything up as yet. &lt;/p&gt;&#xA;" OwnerUserId="7198" LastActivityDate="2014-10-22T11:54:06.803" Title="Motor controller calibration" Tags="&lt;motor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4796" PostTypeId="1" AcceptedAnswerId="4811" CreationDate="2014-10-22T11:15:52.033" Score="1" ViewCount="1047" Body="&lt;p&gt;I bought 2 brushed motor controllers from China to use within my hobby-weight battle robot (&lt;a href=&quot;http://www.banggood.com/ESC-Brushed-Speed-Controller-For-RC-Car-Truck-Boat-320A-7_2V-16V-p-915276.html&quot; rel=&quot;nofollow&quot;&gt;http://www.banggood.com/ESC-Brushed-Speed-Controller-For-RC-Car-Truck-Boat-320A-7_2V-16V-p-915276.html&lt;/a&gt;). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;These are intended for use with my 2 cordless drill motors which will be driving &#xA;the left and right wheel respectively. The robot will therefore be steered in &#xA;&quot;tank mode&quot; by varying the speed and direction of rotation of the 2 motors using &#xA;the two joysticks on my Turnigy 9x transmitter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am seeking to refine the model and make it easier to operate so does anyone know of a way in which I can somehow synchronize the motors to get a single joystick steering system?  My transmitter has 9 available channels so if this is part of a solution then I am fine with it. I also have an Arduino available if needs be. &lt;/p&gt;&#xA;" OwnerUserId="7198" LastEditorUserId="350" LastEditDate="2014-10-23T17:12:25.877" LastActivityDate="2014-10-23T17:19:18.103" Title="Changing tank drive (differential) mode to single joystick drive mode" Tags="&lt;motor&gt;&lt;differential-drive&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4797" PostTypeId="1" CreationDate="2014-10-22T11:21:40.287" Score="0" ViewCount="90" Body="&lt;p&gt;I bought 2 brushed motor controllers from China for my hobby-weight battle robot (&lt;a href=&quot;http://www.banggood.com/ESC-Brushed-Speed-Controller-For-RC-Car-Truck-Boat-320A-7_2V-16V-p-915276.html&quot; rel=&quot;nofollow&quot;&gt;http://www.banggood.com/ESC-Brushed-Speed-Controller-For-RC-Car-Truck-Boat-320A-7_2V-16V-p-915276.html&lt;/a&gt;). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;These are intended for use with my 2 cordless drill 14.4v motors which will be driving the left and right wheel respectively.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I will be using 4S LIPOs which (when fully charged) have a voltage of 16.8V. Can someone put my mind at rest that the .8 volt excess is unlikely to damage the controller (which is rated for 7.2v - 16v)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also is the fact that the motor controllers are rated for 320Amp likely to damage my motors? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am to be honest not very clear on current and how this is drawn from a LIPO battery. For instance would connecting a LIPO directly to my motor result in a massive discharge or does the motor just &quot;take what it needs&quot; in terms of current? Can someone maybe kindly point me to an article which casts some light on the subject or even more kindly explain it to me here?&lt;/p&gt;&#xA;" OwnerUserId="7198" LastActivityDate="2014-12-24T22:27:10.117" Title="Risk of overloading motor controller" Tags="&lt;motor&gt;&lt;battery&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4798" PostTypeId="1" CreationDate="2014-10-22T11:31:58.503" Score="1" ViewCount="546" Body="&lt;p&gt;I am building a drone using the raspberry pi and I am using 6*PID controllers to control the speed and the value for each angle, can I use a recurrent neural network (RNN) or other neural network to stabilize the angles. If so what can the training data be? What type of neural network (NN) is best suited for this kind of application?&lt;/p&gt;&#xA;" OwnerUserId="7321" LastEditorUserId="350" LastEditDate="2014-10-23T16:43:36.167" LastActivityDate="2014-10-23T16:43:36.167" Title="RNN instead of a PID controller" Tags="&lt;pid&gt;&lt;raspberry-pi&gt;&lt;artificial-intelligence&gt;" AnswerCount="0" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="4799" PostTypeId="2" ParentId="4794" CreationDate="2014-10-22T11:54:06.803" Score="0" Body="&lt;p&gt;The calibration in other ESCs is used to compensate for different ranges of the input that different transmitters/receivers produce -- if you push the throttle all the way forward, your system will generate some width of PWM pulses. This might not be identical to full throttle on other system, so you can calibrate to use the full range of the ESC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It should definitely not be critical to calibrate the range.&lt;/p&gt;&#xA;" OwnerUserId="482" LastActivityDate="2014-10-22T11:54:06.803" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4800" PostTypeId="2" ParentId="4796" CreationDate="2014-10-22T11:55:55.047" Score="1" Body="&lt;p&gt;It depends on what transmitter you use, but I would try to find settings for channel mixing on it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should mix +throttle input to +left and +right output and + turn to -right and +left.&lt;/p&gt;&#xA;" OwnerUserId="482" LastActivityDate="2014-10-22T11:55:55.047" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4804" PostTypeId="1" CreationDate="2014-10-22T15:22:57.847" Score="0" ViewCount="198" Body="&lt;p&gt;As far as i understand, AHRS use orientation reference vectors to detect orientation error. And we can use magnetometer to correct yaw drift. But i see from my ak895 magnetometer that the data is not so stable, it kind of fluctuates continuously.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can we use this data for AHRS algorithm?&lt;/p&gt;&#xA;" OwnerUserId="7038" LastEditorUserId="350" LastEditDate="2014-10-23T16:59:53.343" LastActivityDate="2014-10-23T16:59:53.343" Title="AHRS Algorithm Question" Tags="&lt;quadcopter&gt;" AnswerCount="0" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="4808" PostTypeId="1" AcceptedAnswerId="4809" CreationDate="2014-10-23T04:28:46.350" Score="1" ViewCount="304" Body="&lt;p&gt;Based on the wiki page of ESC, the ESC generally accepts a nominal 50 Hz PWM servo input signal whose pulse width varies from 1 ms to 2 ms&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Electronic_speed_control&quot; rel=&quot;nofollow&quot;&gt;http://en.wikipedia.org/wiki/Electronic_speed_control&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For our project, we integrate a flight controller for our UAV, Naza m-lite and we want to implement position control. We already have localization and we can control the quadrotor by applying servo width to roll, pitch, yaw and thrust throttle. Since the ESC only accepts 50 Hz, will the PID controller work at only 50 Hz?&lt;/p&gt;&#xA;" OwnerUserId="2089" LastActivityDate="2014-10-23T16:56:14.743" Title="Is the input of ESC really limited at 50 Hz and will the PID controllers work properly?" Tags="&lt;pid&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4809" PostTypeId="2" ParentId="4808" CreationDate="2014-10-23T16:56:14.743" Score="1" Body="&lt;p&gt;First things first: the information on wikipedia refers to ESCs in general, and not a specific one.  You should consult the datasheet on your particular ESC model to make sure that it does in fact use 50 Hz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You also seem to have a misconception about how the PID controller and ESC are coupled together; in fact, the PID controller can work at whatever frequency it wants.  The output of the PID will be some value, and in order to send that value to the ESC you will need to convert it to a &lt;a href=&quot;http://en.wikipedia.org/wiki/Pulse-width_modulation&quot; rel=&quot;nofollow&quot;&gt;pulse-width modulated (PWM)&lt;/a&gt; signal on the frequency that the ESC uses for input.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-10-23T16:56:14.743" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4810" PostTypeId="2" ParentId="4775" CreationDate="2014-10-23T17:11:27.863" Score="1" Body="&lt;p&gt;You may be getting ahead of yourself; this seems to be a mostly photography-based question.  It sounds like you have a setup like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;light source -&amp;gt; scene with ball -&amp;gt; camera -&amp;gt; computer -&amp;gt; ball-hitting program&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You should be troubleshooting this from left to right, starting with the light source (which it sounds like you already did -- it can't be changed).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The next step would be to see if you can change the scene itself -- use a different ball color to hopefully get more contrast.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If that's not possible, see if the camera settings can be adjusted to make the ball easier to see (in other words, look through the camera yourself to see whether the image is OK).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And if the camera can't be improved, then you'd be stuck with writing some image pre-processing code to somehow turn up the contrast to the point where you can see the ball.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-10-23T17:11:27.863" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4811" PostTypeId="2" ParentId="4796" CreationDate="2014-10-23T17:19:18.103" Score="3" Body="&lt;p&gt;In order to do this, you need to have something on the robot that can intercept your &quot;single joystick&quot; signal from the remote control and translate it to left/right wheel speeds.  Your arduino might be able to serve this purpose, with the appropriate shield.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For that calculation, check out &lt;a href=&quot;https://robotics.stackexchange.com/q/2011/350&quot;&gt;this question on calculating left and right motor speeds based on desired throttle and direction&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2014-10-23T17:19:18.103" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4812" PostTypeId="2" ParentId="4797" CreationDate="2014-10-23T17:26:06.610" Score="0" Body="&lt;p&gt;No, you should not exceed the voltage rating of the controller -- it's there for a reason.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the motor itself is rated for 16.8 VDC (or more) then there is no problem connecting it directly to the battery.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have questions about electronics specifically, you should post them on the &lt;a href=&quot;https://electronics.stackexchange.com/&quot;&gt;stackexchange site for electronics&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="-1" LastEditDate="2017-04-13T12:33:08.317" LastActivityDate="2014-10-23T17:26:06.610" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4813" PostTypeId="2" ParentId="4793" CreationDate="2014-10-23T17:29:45.680" Score="9" Body="&lt;p&gt;If you're only using proportional force, then at some point it will be balanced by the force of gravity -- your error will converge on that balance, not zero.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To compensate for the mass of the arm, you'll need to add an &lt;em&gt;integral force&lt;/em&gt; term.  This will increase over time to counterbalance the constant force of gravity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See also: &lt;a href=&quot;https://robotics.stackexchange.com/a/515&quot;&gt;this answer on the integral term&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2018-07-12T12:54:37.893" LastActivityDate="2018-07-12T12:54:37.893" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="4814" PostTypeId="2" ParentId="4782" CreationDate="2014-10-23T17:46:49.207" Score="1" Body="&lt;p&gt;It shouldn't be a problem; when working on cars, it's customary to disconnect the negative terminal of the battery.  This is because the entire chassis of the car is connected to that terminal -- if you were taking off the positive terminal first and your wrench came in contact with any part of the chassis, you'd short something out.  So it's not a terrible idea in terms of positive/negative.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based on your setup however, you would need to be very careful that the wiring between the switch (attached to a common ground) and the 3 batteries that it connects to will be protected from ever coming in contact with any other ground points (like the frame).  If that happens, the switch will effectively be bypassed and you'll have an out-of-control robot on your hands.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may want to look for relay-based kill switches if you need to switch a lot of current.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-10-23T17:46:49.207" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4815" PostTypeId="1" CreationDate="2014-10-23T21:14:33.420" Score="1" ViewCount="238" Body="&lt;p&gt;The beaglebone black which I work on has only 2 i2c busses. Say for some crazy reason, i need to use 8 i2c busses. I dont want to chain any of the devices. The idea is to have every device's SDA line separated and use a shared SCL line so i can use the same clock and have as many SDA lines as i want. Since the SCL clock is hardware controlled there wont be any major issues here. The GPIO can do around 2.5mhz of switching so I am happy with that. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If that works out, i can spawn 8 threads to talk on 8 i2c Lines making my solution faster!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do you think its doable? I would like to hear from you guys as this idea of using 1SCL and GPIO as SDA just popped in my head and i thought of sharing it with you guys. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cheers!&lt;/p&gt;&#xA;" OwnerUserId="7049" LastActivityDate="2014-11-24T09:35:53.147" Title="Using i2c's SCL and GPIO pins as SDA" Tags="&lt;i2c&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4816" PostTypeId="2" ParentId="1538" CreationDate="2014-10-24T00:17:09.163" Score="3" Body="&lt;p&gt;Scott-Russell type mechanism. For weeks I was trying to come up with a solution for that exact problem for a engineering project mine. Look it up.&lt;/p&gt;&#xA;" OwnerUserId="7332" LastActivityDate="2014-10-24T00:17:09.163" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4817" PostTypeId="2" ParentId="4755" CreationDate="2014-10-24T02:43:10.437" Score="1" Body="&lt;p&gt;I think this is true.  Although I don't have a formal proof.  I haven't read the original Denavit–Hartenberg paper, but this paper: &quot;&lt;a href=&quot;https://web.archive.org/web/20121119091715/http://profesores.usfq.edu.ec:80/laurents/IME440/DETC2005-85460_DenavitHartenberg.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Lipkin 2005: A Note on Denavit-Hartenberg Notation in Robotics&lt;/a&gt;&quot; explains the 3 main DH parameter conventions and how they differ.  It breaks down each of the 4 parameters into vector forms.  Specifically:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;a_2 = \vec{{O}_1 {O}_2} \cdot {x}_2&#xA;$$&lt;/span&gt;&#xA;Where &lt;span class=&quot;math-container&quot;&gt;$\vec{{O}_1 {O}_2}$&lt;/span&gt; is the vector between the two frames.  The dot product &lt;em&gt;can&lt;/em&gt; be negative, but only if the angle is greater than 90 degrees.  But because of the strict way you construct the frames, I don't think that can happen.&lt;/p&gt;&#xA;" OwnerUserId="110" LastEditorUserId="23472" LastEditDate="2019-10-15T09:57:41.283" LastActivityDate="2019-10-15T09:57:41.283" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="4818" PostTypeId="2" ParentId="4815" CreationDate="2014-10-24T08:55:02.643" Score="4" Body="&lt;p&gt;Unless your I2C hardware components have the ability to use an external clock to drive the clock line of the buses (none that I've heard of), you wouldn't be able to do this by hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You &lt;em&gt;could&lt;/em&gt; do this by manually driving the buses. This is called &lt;a href=&quot;https://en.wikipedia.org/wiki/I%C2%B2C#Example_of_bit-banging_the_I.C2.B2C_Master_protocol&quot; rel=&quot;nofollow&quot;&gt;bit-banging&lt;/a&gt;. If you do that, you can carefully craft your software driving GPIO pins that act as I2C buses and manage all 8 buses in parallel. You would most likely want to do the bit banging by interrupts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can have your piece of software having 8 (global) variables (of a &lt;code&gt;struct&lt;/code&gt;) that tell if and what needs to be written to each I2C and if and how much needs to be read as response. Regardless of hardware I2C or software-emulated, this step is actually necessary anyway.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your bit-banging piece of software, here are some things to look out for:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If at least one bus needs to read/write data, drive the clock.&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If parallel threads want to write to the variables, make sure to write them in the correct order and take care of synchronization.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;For example: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/* bus 3 wants to write and read something */&#xA;i2c_data[3].address = some_address;&#xA;memcpy(i2c_data[3].to_write, whatever, 10);&#xA;i2c_data[3].expect_to_read = 5;&#xA;atomic_set(i2c_data[3].new_data);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where &lt;code&gt;new_data&lt;/code&gt;, a flag that the I2C emulation software checks for to know if there is something new to do, is written last and atomically.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;If any of the buses wants to start or stop, generate their respective start or stop condition and make sure there is enough setup and hold time before you continue clocking.&lt;/li&gt;&#xA;&lt;li&gt;If any bus results in a NACK, make sure to at least note it, if not stopping that particular bus.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Of course, this is to make 8 parallel unrelated I2C buses. If your application needs to talk with 8 of the same kind of device, then your bit-banging software would be simpler, since they all start and stop at the same time, even if their data and ACKs are managed separately.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Note that the I2C emulation software is not replicated per thread, but is one managing all of them at the same time.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;While I'm always up for using the hardware in ways beyond most people's wildest imagination to get it to do something better or faster, I'd advise you to study your problem a bit more, do some calculations to make sure you actually want to do this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Emulating hardware through software is very error-prone and slower by an order, there are very many edge cases and needs thorough testing. In short, it's a time-consuming job. Being slower than hardware also means that there is a point where it starts to become beneficial and you need to find that point. Since you have 8 devices and 2 I2C hardware components, you can attach 4 devices to each bus and you need to study if your implementation would actually be faster than that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may also think of changing your hardware. A &lt;a href=&quot;http://www.cypress.com/psoc/&quot; rel=&quot;nofollow&quot;&gt;Cypress PSoC&lt;/a&gt; for example lets you put as many components as you want (and there is space and resources on the chip) so for example you could put 4 I2C buses (if 8 wasn't possible) and attach 2 devices to each bus. With a PSoC and knowledge in verilog, you can also write your own 8-device I2C bus component implemented in hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively, you could also think of changing your bus. I2C is a very strict protocol designed to ensure error handling with each byte as well as prevent component cross-talk. You might not need that much restriction and for example you could check the data with CRC so you may not care for intermediate errors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could use an SPI bus, which is much simpler and thus easier to emulate. As a bonus, you don't need to be working with an open-drain data bus (as in I2C) which means you can get to speeds that are &lt;em&gt;much&lt;/em&gt; higher than I2C. Common support for I2C buses go up to 400Kbps (newer ones go higher) but common devices supporting SPI bus can easily go up to 4Mbps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, talking serially to 8 devices on an SPI bus @4Mbps could indeed be faster than talking to 8 devices in parallel on I2C buses @400Kbps (depending on the protocol). Again, this is something you would need to assess to see which option is more beneficial to you.&lt;/p&gt;&#xA;" OwnerUserId="158" LastEditorUserId="158" LastEditDate="2014-11-24T09:35:53.147" LastActivityDate="2014-11-24T09:35:53.147" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4819" PostTypeId="2" ParentId="4771" CreationDate="2014-10-24T11:07:47.923" Score="1" Body="&lt;p&gt;With fixed cameras, background subtraction will get you 90% of the way there.  (Assuming you don't have lots of other moving things around your room).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should consider tagging your robot with color blobs like they do for &lt;a href=&quot;https://www.google.com/search?q=robocup%20ssl&amp;amp;tbm=isch&quot; rel=&quot;nofollow&quot;&gt;RoboCup SSL&lt;/a&gt;.  Color segmentation is easy, and can be made to be &lt;a href=&quot;http://www.cs.cmu.edu/~trb/papers/wirevision00.pdf&quot; rel=&quot;nofollow&quot;&gt;very fast&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But then you need to write some custom code to recover the pose of your robot.  If you put more standard fiducials on the robot like &lt;a href=&quot;http://www.artag.net/&quot; rel=&quot;nofollow&quot;&gt;ARTags&lt;/a&gt;, then you get this pose directly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But then you need potentially large and ugly fiducials on the robot.  If you go with a motion capture system like &lt;a href=&quot;http://www.vicon.com/&quot; rel=&quot;nofollow&quot;&gt;Vicon&lt;/a&gt; or &lt;a href=&quot;https://www.naturalpoint.com/optitrack/&quot; rel=&quot;nofollow&quot;&gt;OptiTrack&lt;/a&gt;, you only need put some small IR retroreflective markers on the robot.  Then you get the pose of your robot with mm accuracy at hundreds of Hz.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-10-24T11:07:47.923" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4820" PostTypeId="1" CreationDate="2014-10-24T12:32:44.920" Score="0" ViewCount="52" Body="&lt;p&gt;I have just sized the DC motors I want to use (corresponding to my robot and its intended applications - my figures include a 50% uncertainty factor to account for friction in reducers and other losses). Now I need to actually choose the exact motors I want to buy from the manufacturer (I am targeting maxon motors as I am not an expert and want no problem). I have a few down to earth questions about linking the mechanical needs to the electrical characteristics:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Maxon states a &quot;nominal voltage&quot; in the characteristic sheets. Is that the voltage you should apply to the motor? This may be a dumb question but I have followed the full maxon e-learning course and read about other tutorials on the web and I could not find this information anywhere. Can anyone who knows about motors confirm?&lt;/li&gt;&#xA;&lt;li&gt;As far as I understand, the nominal torque corresponds to the maximum torque the motor can sustain continuously. So I guess, as a rule of thumb, I should find a motor with a nominal torque = my max torque (after reduction), or around. Right?&lt;/li&gt;&#xA;&lt;li&gt;Also I chose a motor reference (310005 &lt;a href=&quot;http://www.maxonmotor.com/maxon/view/catalog/&quot; rel=&quot;nofollow&quot;&gt;found here&lt;/a&gt;) which has a stated power of 60W, as the nominal voltage is 12V, I was expecting to have a nominal current of 5A, but it states 4A. Where am I wrong?&lt;/li&gt;&#xA;&lt;li&gt;The motor I chose has nominal speed = 7630rpm - nominal torque = 51.6mNm. My needs are max speed = 50.42rpm / max torque = 10620 mNm. This means a reduction factor of 151 for speed and 206 for torque. Should I choose a gear closer to 151 or 206?&lt;/li&gt;&#xA;&lt;li&gt;What is the &quot;rated torque&quot; mentioned when choosing a gear? I know my input torque (torque on the motor side) and my output torque (torque on the system side), does that correspond to any of these two?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I have followed some theoretical and practical courses on the web but I find it hard to find answers to my down to earth question...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Antoine.&lt;/p&gt;&#xA;" OwnerUserId="763" LastEditorUserId="763" LastEditDate="2014-10-24T12:52:22.380" LastActivityDate="2014-10-24T12:52:22.380" Title="Choosing motor characteristics" Tags="&lt;motor&gt;" AnswerCount="0" CommentCount="3" ClosedDate="2014-10-27T16:24:42.713" ContentLicense="CC BY-SA 3.0" />
  <row Id="4821" PostTypeId="2" ParentId="4722" CreationDate="2014-10-24T12:46:31.660" Score="1" Body="&lt;p&gt;You can use the &lt;a href=&quot;http://www.ecalc.ch/xcoptercalc.php?ecalc&amp;amp;lang=en&quot; rel=&quot;nofollow&quot;&gt;eCalc Multicopter Calculator&lt;/a&gt;. You select a set of motors, propellers and battery size and the program will output lots of data: Thrust, Motor efficiency at hover, Current and Voltage at hover, Motor efficiency at maximum power, Current and Voltage at maximum power, etc.&lt;/p&gt;&#xA;" OwnerUserId="7181" LastActivityDate="2014-10-24T12:46:31.660" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4822" PostTypeId="2" ParentId="2933" CreationDate="2014-10-24T19:03:05.600" Score="1" Body="&lt;p&gt;Yes it supports Java 8 Embedded.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which basically is Java 8 SE without any graphical library support (because the RoboRio is headless).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beta teams using Java are currently using Java 8 Embedded for Arm as the JVM on the RoboRio, and Eclipse as the IDE with WPILib provided plugins for project development.&lt;/p&gt;&#xA;" OwnerUserId="7338" LastActivityDate="2014-10-24T19:03:05.600" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4823" PostTypeId="2" ParentId="4722" CreationDate="2014-10-24T21:38:48.417" Score="1" Body="&lt;p&gt;The programm you are searching for is &lt;a href=&quot;http://www.drivecalc.de/&quot; rel=&quot;nofollow&quot;&gt;http://www.drivecalc.de/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They have all the common motors with lot of data... some &quot;special&quot; motors you won't find there&lt;/p&gt;&#xA;" OwnerUserId="6911" LastActivityDate="2014-10-24T21:38:48.417" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4824" PostTypeId="1" CreationDate="2014-10-25T07:08:24.947" Score="2" ViewCount="197" Body="&lt;p&gt;We are using Naza-M-Lite for our flight controller without GPS. The localization is obtained through our RGB-D camera sensor. We are able to teleoperate and even implement PID controllers for Roll, Pitch, Yaw and Throttle channels for our quadrotor. However, we do not know the plant model because what we are inputting from Arduino to the Naza-M-Lite are servo PWM ranging from 1000 to 2000. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;For throttle:   1500 altitude hold, 2000 maximum throttle, 1000&#xA;  minimum throttle&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;For Pitch, Roll, Yaw: 1500 maintain 0 angle, 2000 and 1000 moves the&#xA;  quadrotor towards its respective axes.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;However, even at 1500 on every channel, the quadrotor drifts, maybe due to flying indoors and the wind pushes the quadrotor. Once it gains momentum, it drifts. We are having trouble tuning this because we do not know the relationship of the output is to the position. If the output were velocity, it would have been easier. But as in our case, it is not. Is there a way to find the plant model of the Naza-M-Lite and how can we tune this?&lt;/p&gt;&#xA;" OwnerUserId="2089" LastEditorUserId="7066" LastEditDate="2015-06-10T03:08:53.057" LastActivityDate="2015-12-07T06:17:32.410" Title="Implementing a position control for UAV through a flight controller. Plant model is unknown" Tags="&lt;localization&gt;&lt;pid&gt;&lt;quadcopter&gt;&lt;uav&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4825" PostTypeId="2" ParentId="4793" CreationDate="2014-10-25T11:10:04.943" Score="7" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I would like to use P (proportional) controller for now.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Just a proportional controller will never make your error stay at 0. Your system is not damped and a proportional controller acts like an undamped spring. Look at the controller equation that you wrote:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;τ=−K(θ−θd)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;and compare it to a spring equation:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;F=Kx or F=K(x1-x2)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Your controller is acting like a spring, putting torque on the joint proportionally to it's deviation from the reference. You must use at least a PI (proportional and integrating) controller to get rid of the oscillation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The integrating part of the controller is what makes the oscillations go away and make the steady state error approach 0. It will make your system a bit slower, but you'll have to tune the controller to behave the way you want, faster response means typically more overshoot and vice versa.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you really need to use a P controller, you have to include a damper on the system.&lt;/p&gt;&#xA;" OwnerUserId="7337" LastActivityDate="2014-10-25T11:10:04.943" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4826" PostTypeId="2" ParentId="4701" CreationDate="2014-10-25T14:46:42.423" Score="0" Body="&lt;p&gt;On the video you've linked the reference(x desire) is distance and the feedback variable is also distance, what is different is the input to the system which is force. The magic happens inside the PID where the fine tuning of the gains, which are commonly regarded as abstract values, makes the system behave the way you want. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you can only compare variables of the same units to input the error to the PID, the PID will take care of calculating the right value no matter what units the input to the system is in. &lt;/p&gt;&#xA;" OwnerUserId="7337" LastActivityDate="2014-10-25T14:46:42.423" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4827" PostTypeId="1" AcceptedAnswerId="4839" CreationDate="2014-10-26T12:03:32.700" Score="1" ViewCount="170" Body="&lt;p&gt;I am trying to create a model for the &lt;a href=&quot;http://en.wikipedia.org/wiki/Nao_(robot)&quot; rel=&quot;nofollow noreferrer&quot;&gt;NAO [robot]&lt;/a&gt;'s motors. The figure below shows the step response for the knee motor. Afaik the NAO internally uses a pid controller to control the motor. I have no control over the pid or it's parameters. Thus I would like to treat the motor including pid as a black box. Theoretically it should be possible to model &lt;em&gt;pid+motor&lt;/em&gt; as a $pt_2$ system, i.e. a second order lti system.&#xA;A $pt_2$ system is defined by the following differential equation:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$T^2\ddot{y}(t) + 2dT\dot{y}(t)+y(t) = Ku(t)$$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried fitting a $pt_2$ model but was unable to find good parameters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any idea what model to use for this kind of step response?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;edit&lt;/strong&gt;:&#xA;I tried modifying the equation to add a maximum joint velocity like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$T^2\ddot{y}(t) + (\frac{2dT\dot{y}(t) + m - |2dT\dot{y}(t) - m|}{2})+y(t) = Ku(t)$$ &#xA;where $m$ is the maximum velocity. The fraction should be equivalent to $min(2dT\dot{y}(t), m)$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However I am not sure if this is the correct way to introduce a maximum joint velocity. The optimizer is unable to find good parameters for the limited velocity formula. I am guessing that is because the min() introduces an area where parameter changes do not cause any optimization error changes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/V6QWu.png&quot; alt=&quot;Step response image&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="1052" LastEditorUserId="1052" LastEditDate="2014-10-27T14:28:00.147" LastActivityDate="2014-10-27T14:42:21.053" Title="NAO motor model identification" Tags="&lt;motor&gt;" AnswerCount="1" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="4828" PostTypeId="1" AcceptedAnswerId="4852" CreationDate="2014-10-26T13:21:06.700" Score="2" ViewCount="1172" Body="&lt;p&gt;I have just sized the DC motors I want to use (corresponding to my robot and its intended applications - my figures include a 50% uncertainty factor to account for friction in reducers and other losses). Now I need to actually choose the exact motors I want to buy from the manufacturer (I am targeting maxon motors as I am not an expert and want no problem). I have a few down to earth questions about linking the mechanical needs to the electrical characteristics, among them:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Question #1:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maxon (or the other manufacturers) states a &quot;nominal voltage&quot; in the characteristic sheets. Is that the voltage you should apply to the motor? This may be a dumb question but I have followed the full maxon e-learning course and read about other tutorials on the web and I could not find this information anywhere. Can anyone who knows about motors confirm?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have followed some theoretical and practical courses on the web but I find it hard to find answers to my down to earth question...&lt;/p&gt;&#xA;" OwnerUserId="763" LastEditorUserId="350" LastEditDate="2014-10-27T02:30:19.490" LastActivityDate="2014-10-28T10:20:55.253" Title="Is the nominal voltage of a motor the voltage to apply to the motor?" Tags="&lt;motor&gt;&lt;brushless-motor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4829" PostTypeId="1" AcceptedAnswerId="4918" CreationDate="2014-10-26T13:29:40.147" Score="3" ViewCount="12760" Body="&lt;p&gt;I have just sized the DC motors I want to use (corresponding to my robot and its intended applications - my figures include a 50% uncertainty factor to account for friction in reducers and other losses). Now I need to actually choose the exact motors I want to buy from the manufacturer (I am targeting maxon motors as I am not an expert and want no problem). I have a few down to earth questions about linking the mechanical needs to the electrical characteristics, among them:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Question #2:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as I understand, the nominal torque corresponds to the maximum torque the motor can sustain continuously. So I guess, as a rule of thumb, I should find a motor with a nominal torque = my max needed torque (after reduction), or around. Right?&lt;/p&gt;&#xA;" OwnerUserId="763" LastEditorUserId="37" LastEditDate="2018-08-15T15:20:04.850" LastActivityDate="2018-08-15T15:20:04.850" Title="Choosing DC motor: max needed torque vs nominal torque" Tags="&lt;motor&gt;&lt;servomotor&gt;&lt;brushless-motor&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4830" PostTypeId="1" CreationDate="2014-10-26T13:38:04.677" Score="3" ViewCount="186" Body="&lt;p&gt;I have just sized the DC motors I want to use (corresponding to my robot and its intended applications - my figures include a 50% uncertainty factor to account for friction in reducers and other losses). Now I need to actually choose the exact motors I want to buy from the manufacturer (I am targeting maxon motors as I am not an expert and want no problem). I have a few down to earth questions about linking the mechanical needs to the electrical characteristics, among them:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Question #3:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I chose a motor reference (310005 maxon reference &lt;a href=&quot;http://www.maxonmotor.com/maxon/view/catalog/&quot; rel=&quot;nofollow&quot;&gt;found here&lt;/a&gt;) which has a stated power of 60W, as the nominal voltage is 12V, I was expecting to have a nominal current of 5A, but it states 4A. Where am I wrong? &lt;/p&gt;&#xA;" OwnerUserId="763" LastEditorUserId="37" LastEditDate="2018-08-15T15:20:13.337" LastActivityDate="2018-08-15T15:20:13.337" Title="Stated power for a motor does not equal nominal voltage x current?" Tags="&lt;motor&gt;&lt;servomotor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4831" PostTypeId="1" AcceptedAnswerId="4841" CreationDate="2014-10-26T13:43:17.317" Score="2" ViewCount="374" Body="&lt;p&gt;I have just sized the DC motors I want to use (corresponding to my robot and its intended applications - my figures include a 50% uncertainty factor to account for friction in reducers and other losses). Now I need to actually choose the exact motors I want to buy from the manufacturer (I am targeting maxon motors as I am not an expert and want no problem). I have a few down to earth questions about linking the mechanical needs to the electrical characteristics, among them:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Question #4:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The motor I chose (maxon brushed DC: 310005 &lt;a href=&quot;http://www.maxonmotor.com/maxon/view/catalog/&quot; rel=&quot;nofollow&quot;&gt;found here&lt;/a&gt;) has nominal speed = 7630rpm - nominal torque = 51.6mNm. My needs are max speed = 50.42rpm / max torque = 10620 mNm. This means a reduction factor of 151 for speed and 206 for torque. Should I choose a gear closer to 151 or 206?&lt;/p&gt;&#xA;" OwnerUserId="763" LastEditorUserId="37" LastEditDate="2018-08-15T15:20:22.720" LastActivityDate="2018-08-15T15:20:22.720" Title="Selecting a gear reduction: torque vs speed" Tags="&lt;motor&gt;&lt;servomotor&gt;&lt;brushless-motor&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4832" PostTypeId="1" CreationDate="2014-10-26T13:49:18.390" Score="1" ViewCount="147" Body="&lt;p&gt;I have just sized the DC motors I want to use (corresponding to my robot and its intended applications - my figures include a 50% uncertainty factor to account for friction in reducers and other losses). Now I need to actually choose the exact motors I want to buy from the manufacturer (I am targeting maxon motors as I am not an expert and want no problem). I have a few down to earth questions about linking the mechanical needs to the electrical characteristics, among them: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Question #5:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the &quot;rated torque&quot; mentioned when choosing a gear? I guess it is related to the maximum torque the gear can support... But now, I know my input torque (torque on the motor side) and my output torque (torque on the system side), does that correspond to any of these two?&lt;/p&gt;&#xA;" OwnerUserId="763" LastEditorUserId="37" LastEditDate="2018-08-15T15:20:36.787" LastActivityDate="2018-08-15T15:20:36.787" Title="How does the &quot;rated torque&quot; for a gear relate to the maximum torque?" Tags="&lt;motor&gt;&lt;servomotor&gt;&lt;brushless-motor&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4836" PostTypeId="1" AcceptedAnswerId="4854" CreationDate="2014-10-27T08:12:41.757" Score="4" ViewCount="2996" Body="&lt;p&gt;My yaw angle varies from -180 degree to 180 degree. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;                                        -170 170&#xA;                                   -135            135&#xA;                                 -90                  90&#xA;                                      45           45&#xA;                                          10 -10   &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If my current heading is about 170 degree, then the wind makes it rotate to the left at about -170 degree, then how can PID control it to make it rotate back to the right at 170 degree.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since, for PID   &lt;code&gt;ERROR = SETPOINT - INPUT&lt;/code&gt;&#xA;In my case, &lt;code&gt;SETPOINT = 170&lt;/code&gt;, and &lt;code&gt;INPUT = -170&lt;/code&gt;, the the &lt;code&gt;ERROR = 170 - (-170) = 340&lt;/code&gt;.&#xA;So instead of moving to the right and apply &lt;code&gt;PWM = 20&lt;/code&gt;, it rotate to the left and apply &lt;code&gt;PWM = 340&lt;/code&gt; and come back to the desired position, which is 170 degree?&lt;/p&gt;&#xA;" OwnerUserId="7038" LastEditorUserId="350" LastEditDate="2014-10-28T19:25:34.313" LastActivityDate="2018-09-04T17:56:21.457" Title="How to control PID Yaw" Tags="&lt;pid&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4837" PostTypeId="2" ParentId="4836" CreationDate="2014-10-27T09:56:57.767" Score="3" Body="&lt;p&gt;While the books give general formulas, you need to have enough understanding to adjust them based on your specific application. The textbook definition of error is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;error = goal - position&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where &lt;code&gt;position&lt;/code&gt; is your current state and &lt;code&gt;goal&lt;/code&gt; is the state you wish you were at. While this definition is ok for a cartesian space, in others, as you have observed, is not the best thing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With your own system, where the &lt;code&gt;goal&lt;/code&gt; and &lt;code&gt;position&lt;/code&gt; are angles, you have in fact infinite possible values for &lt;code&gt;error&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$goal = 2k'\pi+\alpha$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$position = 2k''\pi + \beta$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and therefore:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$error = 2k\pi + (\alpha - \beta)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your case, the &lt;code&gt;error&lt;/code&gt; could be 340, 700, 1060, -20, -380 etc. Clearly, depending on what value you choose for the &lt;code&gt;error&lt;/code&gt; (all of which are correct), the controller behaves differently. If you choose 1060 over 340 for example, the controller thinks it's much farther from the &lt;code&gt;goal&lt;/code&gt; and therefore tries to get to it in much more of a hurry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You would usually want the minimum movement to reach your &lt;code&gt;goal&lt;/code&gt;, so from the values above you would want to choose -20. That's quite easy. Simply choose the value of &lt;code&gt;error&lt;/code&gt; in the range $[-\pi, \pi)$ (or $[-180, 180)$ if you want). That would have the minimum absolute value among the infinite choices.&lt;/p&gt;&#xA;" OwnerUserId="158" LastEditorUserId="158" LastEditDate="2014-10-28T17:33:02.883" LastActivityDate="2014-10-28T17:33:02.883" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4838" PostTypeId="2" ParentId="4836" CreationDate="2014-10-27T11:25:00.860" Score="0" Body="&lt;p&gt;Shahbaz has the perfect explanation, the PID controller will not solve your problem by itself, what you have to do is figure out a piece of code that reads the angle and the reference, calculates the shortest distance from the reference to the current position and inputs it to the PID controller with the correct sign(+ or -). You can calculate the shortest distance by determining if where you want to go is less or more than 180º from where you are. The math would be simpler if you worked with angles between 0º and 360º because you wouldn't have to deal with negative angles.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;                      |Ref|---&amp;gt;|&quot;piece of code&quot;|---&amp;gt;|PID|---&amp;gt;|Plant|-----&amp;gt;&#xA;                                      ^                               |&#xA;                                      |_______________________________|&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="7337" LastEditorUserId="7337" LastEditDate="2014-10-27T12:17:35.727" LastActivityDate="2014-10-27T12:17:35.727" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4839" PostTypeId="2" ParentId="4827" CreationDate="2014-10-27T14:30:39.377" Score="0" Body="&lt;p&gt;Try something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;if(angle'&amp;gt; max)&#xA;    angle'=max&#xA;else if(angle'&amp;lt; min)&#xA;    angle'=min&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Try 0.1 (and -0.1) for the max velocity of the servo, I came up with that value from the graph you showed.&lt;/p&gt;&#xA;" OwnerUserId="7337" LastEditorUserId="7337" LastEditDate="2014-10-27T14:42:21.053" LastActivityDate="2014-10-27T14:42:21.053" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4840" PostTypeId="1" CreationDate="2014-10-27T16:08:28.820" Score="1" ViewCount="188" Body="&lt;p&gt;I'm working on a robotics platform and we need an on-board Ubuntu machine to run ROS image recognition.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know of a good set of computer hardware that has&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;NO screen&lt;/li&gt;&#xA;&lt;li&gt;NO keyboard&lt;/li&gt;&#xA;&lt;li&gt;Built-in battery (for charging separate from the robot)&lt;/li&gt;&#xA;&lt;li&gt;Quite a bit of compute power (i5+, 4+ GB ram)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I thought about using a laptop, but the keyboard and screen are a lot of extra weight/volume I don't want to carry around. Something like an Intel NUC is appealing, but has no battery.&lt;/p&gt;&#xA;" OwnerUserId="7343" LastActivityDate="2014-10-27T16:28:14.710" Title="A robotics computer with graphics card, lots of computation power, battery, no screen, no keyboard?" Tags="&lt;driver&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2014-10-27T16:40:56.467" ContentLicense="CC BY-SA 3.0" />
  <row Id="4841" PostTypeId="2" ParentId="4831" CreationDate="2014-10-27T16:11:59.557" Score="1" Body="&lt;p&gt;If you choose 151 you'll get the speed but won't get the torque, if you choose 206 you'll get the torque but won't get the speed. You can either play with your needs to be able to use that motor or use another higher torque/speed motor.&lt;/p&gt;&#xA;" OwnerUserId="7337" LastActivityDate="2014-10-27T16:11:59.557" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4842" PostTypeId="2" ParentId="4840" CreationDate="2014-10-27T16:28:14.710" Score="1" Body="&lt;p&gt;Yes the Gigabyte Brix or the Intel NUC are the platforms you're searching for:&#xA;&lt;a href=&quot;http://www.gigabyte.com/products/list.aspx?s=47&amp;amp;ck=104&quot; rel=&quot;nofollow&quot;&gt;http://www.gigabyte.com/products/list.aspx?s=47&amp;amp;ck=104&lt;/a&gt;&#xA;&lt;a href=&quot;http://www.intel.com/content/www/us/en/nuc/overview.html&quot; rel=&quot;nofollow&quot;&gt;http://www.intel.com/content/www/us/en/nuc/overview.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've looked extensively for computer for robots 2 months ago, I don't know if there is anything new since, but I don't know of any small computers with internal battery. You might have to make the power circuit yourself, or ask someone to make it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ARM processors/computers are getting better everyday but you wont find anywhere near the support you'll find on an Intel based computer. Intel is tried and tested, plug and play.&lt;/p&gt;&#xA;" OwnerUserId="7337" LastActivityDate="2014-10-27T16:28:14.710" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4843" PostTypeId="1" CreationDate="2014-10-27T17:32:09.113" Score="1" ViewCount="198" Body="&lt;p&gt;I am trying to localize an object in a point cloud using ROS, PCL. For that I capture the scene and model using Asus xtion pro sensor. I use &lt;a href=&quot;http://felixendres.github.io/rgbdslam_v2/&quot; rel=&quot;nofollow noreferrer&quot;&gt;RGBDSLAMv2&lt;/a&gt; for capturing the model. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then I use &lt;a href=&quot;http://docs.pointclouds.org/1.0.1/classpcl_1_1_iterative_closest_point_non_linear.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;ICP (nonlinear version)&lt;/a&gt; to find the transform from the model to each cluster of the cloud. The cluster with the lowest score is chosen as the best matching cluster. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pseudocode:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Segment the point cloud into different clusters. ([Using euclidean clustering][3])&#xA;for each cluster i&#xA;     Source: 3dmodel. Target: current cluster&#xA;     Perform [ICP (nonlinear version)][2].&#xA;     score[i] = icp.getFitnessScore()&#xA;     T[i] = icp.getFinalTransformation()&#xA;end for&#xA;matchingCluster = cluster with minimum score&#xA;finalT = T[matchingCluster]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;However, I am not able to find the correct transformation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are the screenshots of the results I got:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/RJGZB.png&quot; alt=&quot;Scene of objects&quot;&gt;&#xA;&lt;img src=&quot;https://i.stack.imgur.com/sjwz5.png&quot; alt=&quot;3d model captured using RGBDSLAM&quot;&gt;&#xA;&lt;img src=&quot;https://i.stack.imgur.com/UWwys.png&quot; alt=&quot;overlay of scene and model&quot;&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The red colored object is the transformed model overlayed onto the scene. The yellow object represents the original model in the coordinate system of the scene.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, my concern is why there is no proper transformation? Am I missing something? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second, I see that the object model and scene are in different coordinate system. So the model appears inverted when presented in the scene's coordinate system. Is there a way in which I can transform the model upright before running ICP?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks :)&lt;/p&gt;&#xA;" OwnerUserId="658" LastEditorUserId="658" LastEditDate="2014-10-28T21:01:48.380" LastActivityDate="2014-10-28T21:01:48.380" Title="How to change the orientation of an object w.r.t a scene?" Tags="&lt;computer-vision&gt;&lt;kinect&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4844" PostTypeId="2" ParentId="4396" CreationDate="2014-10-27T18:38:33.160" Score="1" Body="&lt;p&gt;Yes and no.  I think it depends on your needs, and what other sensors you have.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Remember that even diff drive robot wheels slip a little.  And you can never measure the diameter of the wheel accurate enough.  This is why dead-reckoning doesn't work well over long distances.  And why you need other sensors to correct for these errors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I haven't used the entire ROS Navigation Stack, but I have used parts of it with a skid steer robot.  (In my case I used a Hokuyo, robot_pose_EKF, laser_scan_matcher, and costmap_2d nodes among other custom nodes.)  My setup was enough for the robot to maintain a reasonable 2D location if it didn't drive too far.  But after a long time of driving around, the location and orientation would be way off.  I don't think doing any sort of SLAM mapping would have worked for me.  I found that the ICP algorithm in the laser_scan_matcher was critical to correcting the odometry errors when the robot would turn.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I should mention that I did not have an IMU to feed into the EKF, but i think that would have improved results greatly.  The diameter of my wheels was also way off.  (I would drive a meter, but the robot would think it was only 0.8 or so.)  So if you have better odometry, a laser, and an IMU, then you might be ok.  But i don't know what your application is...&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-10-27T18:38:33.160" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4845" PostTypeId="2" ParentId="718" CreationDate="2014-10-27T19:20:56.190" Score="0" Body="&lt;p&gt;I tried using convex hull method, I found the convex hull of both the regions in 3D. Then, found the amount of intersection they have. If it is significantly high, then one object is lying inside the other. If it is not, then it may be on top of it, or may not be. So I tested that by finding the 2D convex hulls of both the object regions, found the intersection. This gave me if one object lies on top of the other.&lt;/p&gt;&#xA;" OwnerUserId="658" LastActivityDate="2014-10-27T19:20:56.190" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4846" PostTypeId="2" ParentId="284" CreationDate="2014-10-27T21:17:27.847" Score="1" Body="&lt;p&gt;I think your best bet would be regular hobby servos, if they don't have enough torque, use multiple servos in parallel on the same joint. A good option would be the Dynamixel servos from Robotis but they are more expensive than hobby servos, and you would have to hack the communication protocol as they are controlled by ttl/rs232/rs485, or use a usb2dynamixel(or usb2ax) converter. The advantages are their torque, speed and precision.&lt;/p&gt;&#xA;" OwnerUserId="7337" LastActivityDate="2014-10-27T21:17:27.847" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4847" PostTypeId="1" AcceptedAnswerId="4848" CreationDate="2014-10-27T22:17:31.727" Score="3" ViewCount="390" Body="&lt;p&gt;I'm really willing to understand and implement such a controller (sliding mode) for a quadrotor.&#xA;I've found &lt;a href=&quot;http://waset.org/Publication/modeling-and-control-of-a-quadrotor-uav-with-aerodynamic-concepts/7686&quot; rel=&quot;nofollow&quot;&gt;this interesting document explaining that topic&lt;/a&gt;.&#xA;If you scroll down until page 381 (don't be scared, the document is just 6-7 pages) you can find the following height control law (equation .19):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;U_1 = \frac{m}{\cos{\phi}\cos{\theta}}[c_1(\dot z_r - \dot z) + \ddot z_r + \epsilon_1  sgn(s_1) + k_1 s_1 + g]&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The explanation of most of the term should be quite easy, but let's focus on the variable &lt;em&gt;z&lt;/em&gt;, the height (or altitude if absolute) of the quadrotor. Anyway the control law &quot;pretends&quot; not only the goal height &lt;em&gt;z&lt;/em&gt; (through $s_{1}$) but even the vertical speed $\dot z_{r}$ and vertical acceleration $\ddot z_{r}$ (&lt;em&gt;r&lt;/em&gt; means here &lt;em&gt;reference&lt;/em&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now...to me is not clear whether those variables the setpoints are, that must be reached once the quadrotor reaches its predefined height or they just symbolize an abstract mathematical formalism but are going to be most of the time Zero (because I want to reach the target height with $z = z_{r}$ but $\dot z_{r} = \ddot z_{r} = 0$)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;?!?!?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope my question is clear. Even if this I put in the title &quot;sliding control&quot; I think it may be helpful for other type of controllers.&#xA;Regards&lt;/p&gt;&#xA;" OwnerUserId="7097" LastEditorUserId="350" LastEditDate="2014-10-28T20:21:22.707" LastActivityDate="2014-10-28T20:21:22.707" Title="Understanding a sliding mode controller for quadrotors" Tags="&lt;quadcopter&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4848" PostTypeId="2" ParentId="4847" CreationDate="2014-10-27T23:46:58.440" Score="2" Body="&lt;p&gt;What you say ($\dot{z}_r$ = 0, $\ddot{z}_r=0$) is true in only the most basic systems. As a trivial counter example, consider systems where the desired height is moving: then it should be obvious that $\dot{z}_r$ and $\ddot{z}_r$ will be non-zero.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even for systems with $z_r = const$, if you want to improve performance you need to start thinking about $\dot{z}_r$ and $\ddot{z}_r$. Imaging you've just changed the set point so $|z-z_r| &amp;gt;&amp;gt; 0$. Your quad can't instantly jump so it will take some time during which $\dot{z}$ will necessarily be non-zero. If you define a profile, with conistent $z_r$, $\dot{z}_r$, and $\ddot{z}_r$ you get much better overall control than just leaving $\dot{z}_r=0$ and $\ddot{z}_r=0$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To be clear, this doesn't uniquely define $\dot{z}_r$ and $\ddot{z}_r$. That is for the system designer to decide. For best performance, just make sure the system is consistent, i.e. $\frac{d}{dt} z = \ddot{z}_r$ and $\frac{d^2}{dt^2} z_r = \ddot{z}_r$&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2014-10-27T23:46:58.440" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4850" PostTypeId="2" ParentId="3016" CreationDate="2014-10-28T09:03:52.913" Score="1" Body="&lt;p&gt;It looks like you have NaN/Inf entries in the data. Try PCL's removeNaNFromPointCloud before applying the algorithm.&lt;/p&gt;&#xA;" OwnerUserId="911" LastActivityDate="2014-10-28T09:03:52.913" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4851" PostTypeId="2" ParentId="4627" CreationDate="2014-10-28T10:03:10.693" Score="1" Body="&lt;p&gt;In my university lab we hacked the radio controller with an arduino that receives the inputs from the computer and outputs to the controller. The arduino only substitutes the joysticks. So we still use the 2.4GHz controller to control the drone but matlab is sending control signals to the arduino which sends them to the original 2.4GHz controller, which sends them to the drone. It works! We've can control the drones position within 3cm in a 3x3x3[m] area just by using a PID controller and a stereo camera as the sensor. And this was done in a 20€ plastic quadcopter.&lt;/p&gt;&#xA;" OwnerUserId="7337" LastActivityDate="2014-10-28T10:03:10.693" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4852" PostTypeId="2" ParentId="4828" CreationDate="2014-10-28T10:20:55.253" Score="0" Body="&lt;p&gt;To control the power of a DC motor you control the voltage applied to it. So no, it's not the &quot;only&quot; voltage you can apply to the motor. The nominal value is a reference so we know what to what specs the motor was engineered. You can input more than the nominal voltage to get more power but it may for example get a bit hotter than it is supposed to, as it wasn't designed to work continuously at a higher voltage. You won't kill a 12V motor by making it work at 20V for 2 minutes, specially Maxon motors which are very well built. &lt;/p&gt;&#xA;" OwnerUserId="7337" LastActivityDate="2014-10-28T10:20:55.253" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4853" PostTypeId="1" CreationDate="2014-10-28T11:52:18.143" Score="3" ViewCount="282" Body="&lt;p&gt;I want to build a robotic vacuum. I have a 400W 24V vacuum motor that I want to switch on automatically at a set time every night. The batteries I will be using will be 2x12V 80aH deep cycle gel batteries connected in series. I want the Arduino to switch the motor on and off. So my first real question I guess is will the 5V supplied from the Arduino be able to switch on a motor that big? The second question is a mosfet the answer? My apologies I'm pretty new to all this but love it..&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can I control a 400W motor with 24V 16A batteries with an Arduino board and a mosfet? What type of mosfet would I use?&lt;/p&gt;&#xA;" OwnerUserId="7353" LastEditorUserId="37" LastEditDate="2014-11-02T18:47:59.510" LastActivityDate="2014-11-06T14:43:55.120" Title="Controlling a 400W motor with 24V 16A batteries with an arduino board" Tags="&lt;arduino&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4854" PostTypeId="2" ParentId="4836" CreationDate="2014-10-28T19:58:54.747" Score="3" Body="&lt;p&gt;The problem is here:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Since, for PID   &lt;code&gt;ERROR = SETPOINT - INPUT&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This is only true for linear systems.  In your system, your error never exceeds $180^\circ$ no matter how many times you rotate -- modular arithmetic is affecting your calculation.  (For the PID to work properly for angles, you would need to keep track of the &lt;em&gt;absolute&lt;/em&gt; yaw value, which would indicate how many rotations you've done in one direction or the other.  That would only be relevant to cases where the error corresponds to the amount of &quot;twist&quot; in a rope or cable that connects 2 rotating elements.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The simple solution is to say &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ABS_ERROR = SETPOINT - INPUT&#xA;if ABS_ERROR &amp;lt; 180&#xA;    ERROR = ABS_ERROR&#xA;else&#xA;    ERROR = ABS_ERROR - 360&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;However, this could result in some instability if your system has a lot of momentum (large $K_d$ term).  So a more correct solution would account for whether &lt;code&gt;ABS_ERROR&lt;/code&gt; combined with that momentum should take the &quot;long way&quot; around instead of attempting to stop, change directions, and rotate the &quot;shorter&quot; distance.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-10-28T19:58:54.747" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4855" PostTypeId="1" AcceptedAnswerId="4856" CreationDate="2014-10-28T20:54:56.997" Score="1" ViewCount="77" Body="&lt;p&gt;I am trying to implement a monte carlo localization/particle filter localization with a simple range sensor. The range sensor only sees in the direction the robot is heading and returns back any obstacle in its line of sight. If there is no obstacle, then the sensor returns back the distance to the boundary wall i.e. there is no maximum range for sensor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, the problem is that i am not able to locate the robot's position. Now, I am feeling is it cause the sensor is not powerful enough. Is it feasible to do localization with such a sensor or should I change the sensor type?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please tell me what you guys think?&lt;/p&gt;&#xA;" OwnerUserId="6943" LastActivityDate="2014-10-28T21:05:18.813" Title="Is a simple range sensor described below sufficient to implement particle filter localization?" Tags="&lt;localization&gt;&lt;particle-filter&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4856" PostTypeId="2" ParentId="4855" CreationDate="2014-10-28T21:05:18.813" Score="2" Body="&lt;p&gt;To be clear, this is a single-point range sensor, correct? It is possible to do Monte Carlo localization with such a sensor, but it will take a &lt;em&gt;very&lt;/em&gt; long time to converge if it does so at all, and will be easily confused. Each additional point you can add when you're doing localization will improve performance, so if you can get a few more of these sensors, you'll do better.&lt;/p&gt;&#xA;" OwnerUserId="2226" LastActivityDate="2014-10-28T21:05:18.813" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4857" PostTypeId="1" AcceptedAnswerId="4861" CreationDate="2014-10-29T03:48:43.470" Score="3" ViewCount="154" Body="&lt;p&gt;A motor needs to spin n*360 degrees. On top of the motor there are distance sensor which scan the room. I.e. lidar. What options do I have for implementing a continous rotation while having cables which are in the way?&lt;/p&gt;&#xA;" OwnerUserId="745" LastEditorUserId="745" LastEditDate="2014-12-01T16:42:02.200" LastActivityDate="2014-12-03T20:44:29.227" Title="Continous rotation with cables" Tags="&lt;motor&gt;&lt;chassis&gt;" AnswerCount="4" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4858" PostTypeId="2" ParentId="4857" CreationDate="2014-10-29T04:11:28.410" Score="1" Body="&lt;p&gt;This is a problem I've thought a lot about, but haven't yet come up with a good solution.  The only ideas I've had thus far are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Custom turntable&lt;/strong&gt;: if it's only a few wires, a custom turntable could have a brush/copper contact system.  This might have a problem with noise, however.&lt;/li&gt;&#xA;&lt;li&gt;Create a &lt;strong&gt;separate control system&lt;/strong&gt; for the head (include battery, microcontroller, etc.) and wirelessly connect to the main robot.  This is probably what I'd do if I were making a really big/expensive robot, but for small sizes or budgets it's just not feasible.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Avoid the issue&lt;/strong&gt;: Don't spin more than +/-180 degrees at any time, and simply oscillate back and forth really fast.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="314" LastActivityDate="2014-10-29T04:11:28.410" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4859" PostTypeId="2" ParentId="231" CreationDate="2014-10-29T09:42:36.710" Score="1" Body="&lt;p&gt;To be able to a hard number you would need to have a mathematical model your craft and analyse it. There are two options to get a model of a system:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1)You come up with a mathematical representation of the quadcopter via free body diagrams;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2)You build a gig to test the quadcopter without any control system and use identification theory to find a model;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then you'll have to linearize your model, a quadcopter is inherently non linear. Make a bode plot of the system, the frequency you need is about twice the highest frequency of your system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the the &quot;pro&quot; way of doing it. If you don't want to go through all this, use a value like what user65 and yoos have suggested (read my comment on yoos answer) and iterate until you get what you want. You also don't want the sample time to be too high, because you'll start having problems when the control system responds to noise.&lt;/p&gt;&#xA;" OwnerUserId="7337" LastActivityDate="2014-10-29T09:42:36.710" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4861" PostTypeId="2" ParentId="4857" CreationDate="2014-10-29T10:07:08.017" Score="5" Body="&lt;p&gt;There is also ready to use commercial solution from Adafruit, called &quot;slip ring&quot; &lt;a href=&quot;http://www.adafruit.com/products/736&quot;&gt;http://www.adafruit.com/products/736&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only problem is the max speed, which is only 300rpm, but probably you won't get any better with a custom solution.&lt;/p&gt;&#xA;" OwnerUserId="7360" LastActivityDate="2014-10-29T10:07:08.017" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4862" PostTypeId="2" ParentId="4829" CreationDate="2014-10-29T10:29:00.343" Score="1" Body="&lt;p&gt;No. The nominal (or rated) torque is a torque that motor delivers at nominal speed. The motor is the most efficient at that point. When you take a look at any DC motor characteristics, you will see that the more torque you get, the smaller is the speed (and bigger is the current). Maximum torque is when the motor is stopped (stalled).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You shouldn't stall the motor for too long (more than couple of seconds), because it can burn, as it receives maximum current then. However, as long as you don't stall the motor, it is completely safe to operate with loads bigger than nominal torque.&lt;/p&gt;&#xA;" OwnerUserId="7360" LastActivityDate="2014-10-29T10:29:00.343" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4863" PostTypeId="1" CreationDate="2014-10-29T10:34:39.137" Score="1" ViewCount="503" Body="&lt;p&gt;I have robot vision system which consists of conveyor with encoder, two cameras (gigabit eth and usb) and simple illuminator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need to trigger cameras and illuminator when encoder reaches position interval.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm considering using real time operating system for this task:&#xA;Encoder, illuminator and cameras connected to PC and vision system application runing on it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Which real-time solution you can reccomend for this problem?&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm considering using Beckhoff TwinCAT software which turns normal operating system into RT. &lt;/p&gt;&#xA;" OwnerUserId="7362" LastActivityDate="2014-11-09T13:56:28.727" Title="Real time operating system for robotics vision" Tags="&lt;computer-vision&gt;&lt;real-time&gt;" AnswerCount="3" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4864" PostTypeId="2" ParentId="4863" CreationDate="2014-10-29T10:49:21.290" Score="1" Body="&lt;p&gt;EtherCAT as you have noticed is a actually a good option for real-time data transfer, but if by &quot;normal operating system&quot; you mean Windows, that's a bad choice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can get a Linux implementation of EtherCAT master from IgH (&lt;a href=&quot;http://www.etherlab.org/en/ethercat/index.php&quot; rel=&quot;nofollow&quot;&gt;http://www.etherlab.org/en/ethercat/index.php&lt;/a&gt;) which needs a real-time operating system, such as Linux patched with RTAI, Xenomai or RT-preempt.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you are able to acquire your data periodically, you can use the many freely available software packages under most GNU/Linux distributions to process them.&lt;/p&gt;&#xA;" OwnerUserId="158" LastActivityDate="2014-10-29T10:49:21.290" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4866" PostTypeId="1" AcceptedAnswerId="4868" CreationDate="2014-10-29T13:26:35.813" Score="2" ViewCount="3358" Body="&lt;p&gt;Ok apologies for those who think my questions are not direct enough as I got warned about this. I am really new to this and I will try to keep this one direct enough for the forum. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For obvious reasons I cannot test this out without damaging something so would prefer to learn from the experience of others.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a &quot;Turnigy Trackstar 1/10 17.0T 2400KV Brushless&quot; motor which I will be using for my weapon (spinning disk). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Relevant specs of the motor are:&#xA;Kv: 2400&#xA;Max Voltage: 21v&#xA;Max current:24amps&#xA;Watts: 550&#xA;Resistance: 0.0442Ohms&#xA;Max RPM: 50000&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I will use this with an ESC with the following specs:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Constant Current: 30A&#xA;Burst Current: 40A&#xA;Battery: 2-4S Lipoly / 5-12s NiXX&#xA;BEC: 5v / 3A&#xA;Motor Type: Sensorless Brushless&#xA;Size: 54 x 26 11mm&#xA;Weight: 32g&#xA;Programming Functions:&#xA;Battery Type: Lipo /NiXX&#xA;Brake: On / Off&#xA;Voltage Protection: Low / Mid / High&#xA;Protection mode: Reduce power / Cut off power&#xA;Timing: Auto / High / Low&#xA;Startup: Fast / Normal / Soft&#xA;PWM Frequency: 8k / 16k&#xA;Helicopter mode: Off / 5sec / 15sec (Start up delay)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the motor stalls, I know the current draw will increase drastically. So my questions are:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;In the case that the motor stalls (my disk gets stuck in the opponent etc), then what gets damaged? The motor, the ESC, both? And how long before this happens? &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Would I have time to turn the r/c switch off before irrevocable damage occurs (once I am obviously observing the action?). Notes. I will be using an on/off switch on the r/c to just turn the motor on and off (so no proportional speed increase etc), plus I will be using an 11.1 volt battery even though the motor is rated for a 21 volt maximum.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="7198" LastActivityDate="2014-10-29T20:25:13.493" Title="What happens when a brush-less motor stalls?" Tags="&lt;brushless-motor&gt;&lt;esc&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4868" PostTypeId="2" ParentId="4866" CreationDate="2014-10-29T14:09:32.640" Score="3" Body="&lt;p&gt;Your equipment will be fine as long as the stall periods aren't too big(like 5 minutes). I think the first thing to fail is the ESC as you're using half the voltage the motor is rated for. You also have to take into account that the battery can also heat up and fail, as if you would short circuit the battery. But as I said, if it's not for long periods of time you won't have a problem.&lt;/p&gt;&#xA;" OwnerUserId="7337" LastActivityDate="2014-10-29T14:09:32.640" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4869" PostTypeId="2" ParentId="4853" CreationDate="2014-10-29T18:19:40.223" Score="1" Body="&lt;p&gt;Since you don't need to &quot;control&quot; the motor beyond simply turning it on and off (i.e., you don't need to adjust the speed and you don't need to run it in reverse), I think what you are describing is a &lt;a href=&quot;http://en.wikipedia.org/wiki/Solid-state_relay&quot; rel=&quot;nofollow&quot;&gt;solid state relay (SSR)&lt;/a&gt;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;SSRs are usually made using MOSFETs, and given that you are &quot;pretty new to all this&quot;, you should consider buying the SSR as a component instead of building your own.  Or, depending on price, just buy a mechanical relay.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'll need to look for an SSR that's rated for &quot;inductive loads&quot; (i.e. your motor).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\frac{400\text{ Watts}}{24 \text{Volts}} = 16.666 \text{ Amps}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you want something that has an input voltage of 5V (for the arduino to be able to control it), and it should be rated for a 24+ Volt and 17+ Amp inductive load.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-10-29T18:19:40.223" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4870" PostTypeId="2" ParentId="4866" CreationDate="2014-10-29T20:25:13.493" Score="2" Body="&lt;p&gt;Motors stalling can take many amps as you have found out. In the electrical industry three types of overload cut out are available. fuse, trip, auto resetting trip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A more suttle way is to monitor the motor amps and if an overload happens limit out the power to the motor. For example current limitors&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the motor windings have them (very rear) thermistors are incorperated into the motor windings. If the windings get hot the trip operates, but when the windings cool then the motor runs again. Nice if your saw jams and gets free. Try the motor and try again. When the windings cool down the saw can cut again. Thermistors can be fastened to the battery to give data feedback on temprature.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There may be a way to give a few second of power boost, a very large capacitor on the main power bus, say a full farad electrolitic. However the motor control transitors can fry/burn if the motor is jammed. Big power audio ampliphoiers in cars use these large caps.&lt;/p&gt;&#xA;" OwnerUserId="7368" LastActivityDate="2014-10-29T20:25:13.493" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4872" PostTypeId="1" AcceptedAnswerId="4876" CreationDate="2014-10-30T03:44:56.003" Score="0" ViewCount="127" Body="&lt;p&gt;My problem is that when i hold my sensors (MPU9150) so that +y axis is downward, and y axis is on the horizontal plane, i expect that pitch = 90 degree,  and roll = 0 degree, but actually pitch = 90 degree, and roll = 160 degree. However, when roll = 90 degree and pitch = 0 degree (That is what i expect). Do you know what cause my problem?&#xA;Thanks&lt;/p&gt;&#xA;" OwnerUserId="7038" LastActivityDate="2014-10-30T12:05:35.470" Title="Roll, Pitch Calculation Problem!" Tags="&lt;quadcopter&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4873" PostTypeId="1" CreationDate="2014-10-30T08:07:05.540" Score="2" ViewCount="346" Body="&lt;p&gt;Which of the following simulators is the best choice for simulating a swarm of AUVs working together to perform a mission? Please clarify your reason and if you know any better choice, I would greatly appreciate it if you kindly help me. Please consider the need for doing Hardware-In-The-Loop(HIL) simulation. &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Webots&lt;/li&gt;&#xA;&lt;li&gt;V-REP&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://savage.nps.edu/AuvWorkbench/&quot; rel=&quot;nofollow&quot;&gt;AUV Workbench&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Gazebo&lt;/li&gt;&#xA;&lt;li&gt;UWSim&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://homepages.laas.fr/afranchi/robotics/?q=node/120&quot; rel=&quot;nofollow&quot;&gt;SwarmSimX&lt;/a&gt; &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;In addition, notice that capability to connect to the middle-wares like ROS is really important. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other option is using a game engine like Blender but I think it needs a lot of developing effort and is time-consuming! Would you recommend this approach be used? If not, why not? And what would you recommend instead?&lt;/p&gt;&#xA;" OwnerUserId="7371" LastActivityDate="2014-10-30T20:19:46.053" Title="Choosing suitable simulator for a swarm of AUVs" Tags="&lt;mobile-robot&gt;&lt;ros&gt;&lt;simulator&gt;&lt;auv&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ClosedDate="2014-11-02T18:52:02.203" ContentLicense="CC BY-SA 3.0" />
  <row Id="4874" PostTypeId="1" CreationDate="2014-10-30T08:23:37.017" Score="2" ViewCount="204" Body="&lt;p&gt;Working with a swarm of robots, collaboration between the nodes is really important(either for the goal of simulation or real-word operation). Middle-wares are the frameworks for this special purpose. I know some of the relevant middle-wares like ROS(general-purpose but popular) or uMVS(that is basically design for AUVs). Now, I have two questions:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Do you know any other choice for the above mentioned purpose? &lt;/li&gt;&#xA;&lt;li&gt;What criteria should I consider for choosing a middle-ware suitable for my purpose?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Thank you.&lt;/p&gt;&#xA;" OwnerUserId="7371" LastActivityDate="2015-04-09T13:33:17.790" Title="What middle-ware do you recommend for a swarm of AUVs?" Tags="&lt;mobile-robot&gt;&lt;ros&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4875" PostTypeId="1" CreationDate="2014-10-30T11:27:09.220" Score="0" ViewCount="192" Body="&lt;p&gt;I have a &lt;a href=&quot;http://smart-prototyping.com/GY-31-TCS230-TCS3200-Color-Sensor-Recognition-Module-for-Arduino.html&quot; rel=&quot;nofollow&quot;&gt;GY-31 Light sensor&lt;/a&gt; and I am trying to make a skittle sorting machine. There is a little wheel skittles can drop into then they are turn to 90 degrees read by the light sensor then dropped out the bottom. The problem is the code seems to get stuck after reading the light sensor (it still flows through but won't execute the moving of the servo). As soon as I take out the ReadSensor line the servo works like normal. Do I have to dispose of the Color Sensor some how?&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;Servo.h&amp;gt;&#xA;#include &amp;lt;MD_TCS230.h&amp;gt;&#xA;#include &amp;lt;FreqCount.h&amp;gt;&#xA;&#xA;#define  S2_OUT  2&#xA;#define  S3_OUT  3&#xA;MD_TCS230  CS(S2_OUT, S3_OUT);&#xA;&#xA;Servo myservo;  // create servo object to control a servo &#xA;                // a maximum of eight servo objects can be created &#xA;&#xA;void setup() &#xA;{ &#xA;  myservo.attach(11);  // attaches the servo on pin 9 to the servo object &#xA;  Serial.begin(57600);&#xA;  Serial.println(&quot;[TCS230 Simple BLOCKING Example]&quot;);&#xA;  Serial.println(&quot;Move the sensor to different color to see the value&quot;);&#xA;  Serial.println(&quot;Note: These values are being read in without sensor calibration&quot;);&#xA;  Serial.println(&quot;and are likely to be far from reality&quot;);&#xA;&#xA;  CS.begin();&#xA;  CS.setFilter(TCS230_RGB_X);&#xA;  CS.setFrequency(TCS230_FREQ_HI);&#xA;  CS.setSampling(100); &#xA;} &#xA;&#xA; void readSensor()&#xA;{&#xA;  uint32_t v;&#xA;  v = CS.readSingle();&#xA;  Serial.print(&quot;Simple value = &quot;);&#xA;  Serial.println(CS.readSingle());&#xA;&#xA;}&#xA;&#xA;void loop() &#xA;{ &#xA;  Serial.println(&quot;Start&quot;);&#xA;  myservo.write(0);&#xA;  delay(1000);&#xA;  myservo.write(90);&#xA;  delay(1000);&#xA; readSensor();&#xA;  myservo.write(180);&#xA;  delay(1000);&#xA;} &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="7373" LastEditorUserId="187" LastEditDate="2014-10-31T01:22:49.953" LastActivityDate="2014-10-31T01:22:49.953" Title="Arduino Lightsensor Blocking Code" Tags="&lt;arduino&gt;&lt;sensors&gt;&lt;rcservo&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4876" PostTypeId="2" ParentId="4872" CreationDate="2014-10-30T12:05:35.470" Score="1" Body="&lt;p&gt;For the most common definition of roll, pitch, yaw used in UAVs, when pitch=90deg you encounter what's called &lt;a href=&quot;http://en.wikipedia.org/wiki/Gimbal_lock&quot; rel=&quot;nofollow&quot;&gt;gimbal Lock&lt;/a&gt;. Basically, when pitch=90deg you have infinite combinations of roll and yaw that will give you the same physical result.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2014-10-30T12:05:35.470" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4877" PostTypeId="2" ParentId="2504" CreationDate="2014-10-30T13:42:02.577" Score="2" Body="&lt;p&gt;I agree with all of Tvaṣṭā's questions above.  It would be nice to have answers to these, but I will try to provide an answer regardless.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To calculate the (geometric) Jacobian, you don't really need all those D-H parameters.  See this question for an explanation how to calculate the Jacobian: &#xA;&lt;a href=&quot;https://robotics.stackexchange.com/questions/3032/jacobian-of-abb-irb140-robot&quot;&gt;jacobian of Abb irb140 robot&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Inverse-kinematics using the Jacobian doesn't sound right.  Remember that the Jacobian describes the mapping between joint velocities and end-effector velocities, and that this relationship is configuration dependant.  So you can use the Jacobian to determine joint velocities to move your end-effector along a given vector.  But not really to move the end-effector to some other point in the workspace, far from the current configuration.  Typically IK solvers will give you a number of solutions for a target pose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That being said, you might want to check out this page by another user:&#xA;&lt;a href=&quot;http://freespace.virgin.net/hugo.elias/models/m_ik2.htm&quot; rel=&quot;nofollow&quot;&gt;http://freespace.virgin.net/hugo.elias/models/m_ik2.htm&lt;/a&gt; on gradient based methods.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, I would highly recommend using a kinematics library such as &lt;a href=&quot;http://openrave.org/&quot; rel=&quot;nofollow&quot;&gt;OpenRave&lt;/a&gt;, &lt;a href=&quot;http://www.orocos.org/kdl&quot; rel=&quot;nofollow&quot;&gt;Orocos KDL&lt;/a&gt;, ROS &lt;a href=&quot;http://moveit.ros.org/&quot; rel=&quot;nofollow&quot;&gt;MoveIt!&lt;/a&gt; among others.  These libraries will do the heavy math stuff for you, give you advanced controls, and get you up and running much quicker.  &lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-10-30T13:42:02.577" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4878" PostTypeId="2" ParentId="1163" CreationDate="2014-10-30T15:05:29.363" Score="0" Body="&lt;p&gt;First of all if you want to do it yourself using an Arduino then I would recommend using the Arduino Nano to save on weight. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you don't want to rely on noises (as used by some battery monitors) then you could program the Arduino to trigger something off, maybe a visible LED or some other physical thing on the quadcopter. Or it could simply gently reduce power to all motors so that the quad lands slowly and safely.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could also consider the use of telemetry (i.e. sending back information from the quadcopter) if your r/c transmitter supports it. This will give you a real time reading of the battery voltage as well as temperature etc. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many r/c transmitters also allow you to set a simple timer on the transmitter which you would set based on ground testing to know when approximately you should bring the quadcopter back to base.This is the least technical of the solutions but apparently works well if you allow a bit of safety leeway to compensate for variations due to varying flight conditions.&lt;/p&gt;&#xA;" OwnerUserId="7198" LastActivityDate="2014-10-30T15:05:29.363" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4879" PostTypeId="2" ParentId="1581" CreationDate="2014-10-30T15:19:55.193" Score="0" Body="&lt;p&gt;Or you could just do what I have done and scavenge two DC motors plus gearboxes from used cordless drillers. Mine are from 14.4v drillers and I am operating them using 3S LIPOs (11.1v). The LIPOs are not that expensive if you buy them rated at say 2200mAh (more current capacity = more cost). You don't even need a very high &quot;C&quot; rating. 20 &quot;C&quot; would probably do fine. But of course since you have no weight limitation you could easily use the Nicd batteries that came with the cordless driller itself, plus you get a free charger too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will need to remove the chuck (unscrew the centre screw within the chuck by turning in the opposite direction as it is a reverse thread, and then put an allen key in the chuck, unscrew it all the way, and hit the key hard counter clockwise and the chuck will come off)  and then remove the little ball-bearings and insert (self-tap them) grub screws in the holes where the bearings were in order to block the clutch. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then if you wish you can just put the chuck back on and attach any shaft and wheel! You can easily get controllers for the motors and connect them to an r/c receiver.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The point is that these motors and gearbox combos are made for a good torque and speed compromise and are quite hardy in use. They are of course brushed and in my experience won't draw much over maybe 10 Amps each and that only if stalled.&lt;/p&gt;&#xA;" OwnerUserId="7198" LastActivityDate="2014-10-30T15:19:55.193" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4880" PostTypeId="1" CreationDate="2014-10-30T18:41:03.330" Score="2" ViewCount="3132" Body="&lt;p&gt;I want programme my very own G-code generator for my final year electrical engineering project. I know that there are many open source G-code generators out there, but I need a G-code generator which generates a G-codes for custom circuit designs drawn by the user and pass the G-code serially to my 2 axis CNC machine. So currently I'm working on a Qt based GUI where I draw .dxf format circuit diagrams and electrical components (like resistors, capacitors) and when I press a &quot;Generate G-code&quot; push button I should generate a text file with nice set of G-codes for my designed diagram.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the problem here is, how do I generate the G-code? Is there any specific algorithm to follow or adapt? I tried googling for G-code generator algorithm but I couldn't find any helpful stuff.&lt;/p&gt;&#xA;" OwnerUserId="7278" LastEditorUserId="37" LastEditDate="2014-11-02T18:50:52.230" LastActivityDate="2014-11-02T18:50:52.230" Title="Programming a G-code Interpreter" Tags="&lt;cnc&gt;&lt;circuit&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4881" PostTypeId="2" ParentId="4873" CreationDate="2014-10-30T20:19:46.053" Score="1" Body="&lt;p&gt;We are using for the AUV-Avalon a simulation called Mars&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://rock-robotics.org/master/documentation/simulation/index.html&quot; rel=&quot;nofollow&quot;&gt;http://rock-robotics.org/master/documentation/simulation/index.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately there is no ROS integration, but a Rock integration.&#xA;Rock supports HIL in general.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For AUVs there are multiple integrations available which are collected in the mars-core package &lt;a href=&quot;https://github.com/rock-simulation/orogen-mars_core&quot; rel=&quot;nofollow&quot;&gt;https://github.com/rock-simulation/orogen-mars_core&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mars does not provide hydrodynamic calculation, but the mars-core package provide a fossen-based model for auv motion-simulation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The documentation therefore is (unfortunately) not finished yet but you can take a look to: &lt;a href=&quot;https://gitorious.org/rock-tutorials/orogen-auv_simulation&quot; rel=&quot;nofollow&quot;&gt;https://gitorious.org/rock-tutorials/orogen-auv_simulation&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main advantage is the same interface for simulated and real systems. Rock also provides a lot of (auv) tooling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But in the end the question is what exactly do you want to simulation, mission-planning, sensors, motion estimation. I think you have to specify this to find a good answer.&lt;/p&gt;&#xA;" OwnerUserId="4508" LastActivityDate="2014-10-30T20:19:46.053" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4882" PostTypeId="2" ParentId="4830" CreationDate="2014-10-31T19:20:21.997" Score="1" Body="&lt;p&gt;Take a look at this sample characteristic: &lt;a href=&quot;http://homepages.which.net/~paul.hills/Motors/ScottMotorCharacteristic.gif&quot; rel=&quot;nofollow&quot;&gt;http://homepages.which.net/~paul.hills/Motors/ScottMotorCharacteristic.gif&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nominal current and voltage are given for the point of maximum efficiency (or close to) of the motor, but this is not the point of maximum power. Power of the motor is given by &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;P=I*V&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It does not rise linearly, because the slower the motor rotates (because of greater load) and the greater is the current, the smaller is the voltage drop on the motor (caused by back EMF). As you can see on the characteristic, maximum of that function comes somewhere in the middle.&lt;/p&gt;&#xA;" OwnerUserId="7360" LastActivityDate="2014-10-31T19:20:21.997" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4883" PostTypeId="2" ParentId="4880" CreationDate="2014-10-31T19:20:25.347" Score="2" Body="&lt;p&gt;I assume you know (or can figure out) how to parse the line objects in the dxf file, and can convert them to straight line operations in g-code.  So the basic problem is how to order the operations to minimize time (which is the same as unnecessary travel).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This sounds like a variant of the &lt;a href=&quot;http://en.wikipedia.org/wiki/Travelling_salesman_problem&quot; rel=&quot;nofollow&quot;&gt;Travelling Salesman Problem&lt;/a&gt;.  Except instead of visiting nodes, you traverse edges (the lines in your circuit).  So there is probably no efficient solution to the problem.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I assume that once you are tracing a line, you don't want to stop until the line ends.  This is to avoid unnecessary pen-up, pen-down operations.  I guess a &lt;a href=&quot;http://en.wikipedia.org/wiki/Greedy_algorithm&quot; rel=&quot;nofollow&quot;&gt;greedy&lt;/a&gt; solution would probably be fine.  I envision the algorithm to be something like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;given a list of lines with endpoints:&#xA;&#xA;0. if list is empty: end&#xA;1. Pick a line and endpoint, go there, pen down.  &#xA;   (you might want to use a heuristic here such as pick the closest point to where you are).&#xA;2. go to other endpoint, delete line from list&#xA;3. search through list of lines and find a new line with same endpoint.  &#xA;   (you might want to use a heuristic here to continue going straight if you can).&#xA;  if you found one: goto 2&#xA;  else: pen up, goto 0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-10-31T19:20:25.347" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4884" PostTypeId="2" ParentId="1946" CreationDate="2014-10-31T20:41:02.550" Score="0" Body="&lt;p&gt;There is no the most appropriate SLAM algorithm. You use based on what you have. Every approach has pros and cons. People use cameras because they are so cheap in comparison with Laser sensors. Laser sensors  are extremely expensive however they are so accurate and give more info about the map than cameras.  No matter what kind of sensors you use, the ultimate goal of SLAM is to build a map and estimate the robot in this map. Another problem arises when the sensors are used which is the noise. So to filter the measurements, you need a filter. The most common filter used in SLAM is Extended Kalman filter, hence the name EKF-SLAM. Another one is Particle Filter PF.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;EKF SLAM which uses odometry to measure the robot's initial position&#xA;  in the map and as well as landmarks which helps the robot's position&#xA;  to be more accurate.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This is actually incorrect. EKF is an optimal estimator. It has nothing to do with odometry. Odometry works as a sensor based on accumulating previous data. As you can see, odometry is an error-prone because it accumulates the noise beside the robot's pose. GPS doesn't work in an indoor environment. This is why SLAM is needed. Given an accurate sensor, say laser, EKF-SLAM for example, the robot is able to estimate its pose in an unknown environment whether indoor or outdoor. Even though cameras are very cheap, the image manipulation is so heavy. Also, a single camera doesn't give the distance to a beacon or landmark. &lt;/p&gt;&#xA;" OwnerUserId="2155" LastActivityDate="2014-10-31T20:41:02.550" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4885" PostTypeId="1" CreationDate="2014-10-31T21:28:07.940" Score="4" ViewCount="5094" Body="&lt;p&gt;I&#xA; suppose who know &lt;a href=&quot;http://wiki.ros.org/ROS/Tutorials&quot; rel=&quot;nofollow&quot;&gt;ROS&lt;/a&gt; and how it works (at least most of you)&#xA;I have some question regarding the implementation of a quadrotor in that&#xA; framework.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;3D movements:&lt;/strong&gt; A quadrotor has 6DOF and moves in a 3D &#xA;environment. Looking at the various ROS packages I could not find any &#xA;package that allows to drive a &quot;robot&quot; in the 3D space. The package &#xA;&lt;strong&gt;/move_base&lt;/strong&gt; for instance allows only 2D. Make sense to use this &#xA;package for such a project? I thought to use 2D navigation projecting &#xA;the &quot;shadow&quot; of a quadrotor on the ground...&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;MoveIt:&lt;/strong&gt; it seems a real interesting and promising package, but I&#xA;read that it is for robotic arms and not expressly indicate for &#xA;quadrotor. Maybe one can use the possibility to create a virtual &#xA;floating joints in &lt;strong&gt;MoveIt&lt;/strong&gt; to let the quadrotor any movement in a 3D &#xA;environment...that's ok, but I cannot understand whether is &quot;too much&quot; &#xA;and not useful for a flying robot.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Trajectories:&lt;/strong&gt; The possibility to create a 3D trajectory in the &#xA;space seems to be not a standard package of ROS. I found &lt;strong&gt;Octomap&lt;/strong&gt; &#xA;which allows the creation of 3D maps from sensor datas. Very interesting&#xA;and for sure very useful. But...I don't think it could be useful for &#xA;creating 3D trajectories.  Should I in that case create an extra package&#xA;to compute 3D trajectories to be feed into the quadrotor? Or there &#xA;already something like that?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;There is already an existing project &lt;em&gt;hector_quadrotor&lt;/em&gt; which seems to &#xA;acclaim a good success ans it is very considered in the field. Most &#xA;people refer to that project when speaking or answering question &#xA;regarding quadrotors in ROS. I saw many times that project...since &#xA;weeks. And due to the total lack of documentation I didn't try anymore &#xA;to understand how it works. Really too difficult. &#xA;Another interesting project, ArDrone, has comments in the source &#xA;code...in Russian!!! @_@&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could you me give any good suggestions? Or point me in the right direction &#xA;please?&#xA;It would help me to understand how to focus my searches and which &#xA;package I can/cannot use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt; my goal is to let the quadrotor flying and using gmapping to localize itself. I've heard and read al lot of stuff about that but I found all this tutorials very hard to understand. I cannot get a &lt;em&gt;global&lt;/em&gt; vision of the software and sometime I run in problems like: &quot;is there a package for this task, or should I invent it from scratch?&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="7097" LastEditorUserId="7097" LastEditDate="2014-11-04T18:40:53.087" LastActivityDate="2018-05-28T10:34:17.460" Title="Developing a Quadrotor using ROS" Tags="&lt;ros&gt;&lt;quadcopter&gt;" AnswerCount="4" CommentCount="2" FavoriteCount="1" ClosedDate="2018-05-28T10:25:13.343" ContentLicense="CC BY-SA 3.0" />
  <row Id="4886" PostTypeId="2" ParentId="4880" CreationDate="2014-10-31T23:29:30.820" Score="2" Body="&lt;p&gt;This is not a trivial problem to solve. Assuming your DXF file contains various primitives like tracks and pads drawn out, you need to create an algorithm which draws cuts &lt;em&gt;around&lt;/em&gt; them, to end up with a PCB something like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/A8nKP.jpg&quot; alt=&quot;CNC cut PCB&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is known as PCB isolation routing, and is in itself is non-trivial because (I assume) the tracks and pads will overlap in places, and so the algorithm has to be sure not to cut all the way around every primitive, but to cut around them in so far as to avoid cutting through any of them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/CS5Iv.gif&quot; alt=&quot;CNC cut PCB toolpaths&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are two ways you can approach this problem:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Vector:&lt;/strong&gt; The 'best' way is to solve it using vectors. Calculate the set of lines and arc segments around each primitive, calculate where they intersect neighboring lines or arcs, and trim them to length so that they form a continuous loop around the copper net. This is the 'best' because the lines and arcs naturally translate into a simple set of G-Codes. However, it can be a pain to program, and you'll be working out lots of linear algebra, and dealing with a ton of tricky edge cases.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Bitmap:&lt;/strong&gt; This way produces more bloated G-Code, but is easier to program. Simply render the image of your PCB at high resolution. But for each primitive, draw it wider by the width of the cutting tool, Then write an algorithm which follows the edges around the copper nets, generating G-Code commands as it goes. If you're smart, you can reduce the number of G-Code lines produced by detecting movement in straight lines, and only generating a G-Code command when you turn a corner. If you're &lt;em&gt;really&lt;/em&gt; smart, you might even be able to &lt;a href=&quot;http://forskningsavd.se/category/projects/&quot; rel=&quot;nofollow noreferrer&quot;&gt;detect arcs&lt;/a&gt; too:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/MMhVc.jpg&quot; alt=&quot;Bitmap to vector conversion&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might want to go the next step and cut out the dead copper to have a PCB like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/CcM91.jpg&quot; alt=&quot;CNC cut PCB&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is only a little harder, and involves offsetting your cutting paths, trimming them against each other, offsetting again, etc. Then finally joining up all of the concentric loops into one continuous path. This example image is not from a PCB, but it's the same principle:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/2AA9B.gif&quot; alt=&quot;CNC pocketing toolpath&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Having written several similar programs, I can tell you from experience that it's not trivial. But it's also not impossibly hard. You'll have to decide how much time you have to spare on this problem. If you have less than a week (though I suggest at least two weeks), then I suggest you try out one of the many source code repositories out there which do this.&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2014-10-31T23:29:30.820" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4888" PostTypeId="1" CreationDate="2014-11-01T20:50:02.667" Score="1" ViewCount="150" Body="&lt;p&gt;The robot should go around 2 boxes and stop at the starting point after tracing a 8 figure pattern. With micro-controllers, i guess it can be easily done using sensors or navigation algorithms. Please suggest how can be one made without them.&lt;/p&gt;&#xA;" OwnerUserId="7384" LastActivityDate="2014-11-01T20:50:02.667" Title="How to make a robot following a virtual eight figure pattern without using microcontrollers?" Tags="&lt;mobile-robot&gt;" AnswerCount="0" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4890" PostTypeId="1" AcceptedAnswerId="4895" CreationDate="2014-11-02T14:16:46.433" Score="0" ViewCount="189" Body="&lt;p&gt;I'm reading a book about a hypothetical economy in which robots work for us because they eventually became able to do everything we do (&quot;Our work here is done, visions of a robot economy&quot; by Nesta).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was wondering though: is it theoretically possible for a human brain (an extremely complex  artificial intelligence the way I and many others see it) to comprehend itself in its deepest details and produce an artifical intelligence which is exactly identical? It sounds unlikely. If not then, how close can we get?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is not a philosophic question, the ideal answer would be a rigorous demonstration based on metrics simplifying the problem to be able to answer it, however objective answers with valid arguments are always interesting, too.&lt;/p&gt;&#xA;" OwnerUserId="7390" LastEditorUserId="7390" LastEditDate="2014-11-03T11:42:31.430" LastActivityDate="2014-11-03T18:42:26.963" Title="Will AIs ever be as advanced as the human brain?" Tags="&lt;artificial-intelligence&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="1" ClosedDate="2014-11-16T19:33:10.567" ContentLicense="CC BY-SA 3.0" />
  <row Id="4891" PostTypeId="1" CreationDate="2014-11-03T06:47:22.240" Score="0" ViewCount="528" Body="&lt;p&gt;My quadcopter can lift off the ground, but it kinds of circles around. Here is my video&#xA;&lt;a href=&quot;https://www.youtube.com/watch?v=Rxjpwhbgiw0&quot; rel=&quot;nofollow&quot;&gt;https://www.youtube.com/watch?v=Rxjpwhbgiw0&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyone helps me?&lt;/p&gt;&#xA;" OwnerUserId="7038" LastActivityDate="2014-11-11T14:03:55.043" Title="Quadcopter Hovering Problem" Tags="&lt;quadcopter&gt;" AnswerCount="4" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4892" PostTypeId="2" ParentId="4890" CreationDate="2014-11-03T11:21:13.880" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Will AIs ever be as advanced as the human brain?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Unless the humans destroy themselves before that point, or lose interest in the subject whatsoever, then yes of course AI will be as advanced as the human brain. Even more advanced I would say.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before you comment, let me point out two things out&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Technologically speaking&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The brain is a machine. It is complex, but it's still is a machine. Theoretically, you could build artificial neurons, look at someone's brain and position the your artificial neurons similarly. Then teach your baby robot like you would teach your child.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Whether that's practical or not is another question. Whether there is a better way to produce human-like intelligence is yet another question. Whether human-like intelligence is actually a good kind of intelligence is again, another question.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Predicting the future&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Now here's the real answer to your question (and yes, your question &lt;em&gt;is&lt;/em&gt; philosophical). Take the following question:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Will X ever happen?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The answer to such a question is:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Unless X is physically or mathematically impossible, then yes it will happen.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Why is that? Because it's a prediction that is not bounded by time. Any such prediction is utterly worthless, yet you cannot say it's wrong. Why? Let's say I make a prediction: &quot;One day, humans will grow a third arm&quot;. Now let's say N years pass. Has my prediction happened?&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Yes: I was right,&lt;/li&gt;&#xA;&lt;li&gt;No: It will happen in the future.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;(for arbitrary large N). That said, it is impossible for anyone to say my prediction is wrong no matter how many years pass and it still doesn't happen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your question is the same. Will AI become great? Sure why not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Incidentally, adding deadlines to predictions is what made people like &lt;a href=&quot;https://en.wikipedia.org/wiki/Nostradamus&quot; rel=&quot;nofollow&quot;&gt;Nostradamus&lt;/a&gt; a man everyone would laugh at now, and not adding deadlines to predictions is what makes many religious figures still not regarded as frauds by many)&lt;/p&gt;&#xA;" OwnerUserId="158" LastActivityDate="2014-11-03T11:21:13.880" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4895" PostTypeId="2" ParentId="4890" CreationDate="2014-11-03T18:42:26.963" Score="1" Body="&lt;p&gt;There are many things that humans can do that computers have never been able to do.&#xA;Every year people manage to get computers and robots to do something they have never done before.&#xA;Those builders and programmers are usually surprised at how much code and hardware it required to get it to work, and long it took to build and debug that code and hardware.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;is it theoretically possible for a human brain ... to comprehend&#xA;  itself in its deepest details and produce an artificial intelligence&#xA;  which is exactly identical?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If you are asking if it's possible for a single human brain, simply through introspection, to figure out enough about what's going on inside to build an artificial intelligence that is exactly like that same single human brain (at some point in time), the answer is no.&#xA;We now know that human brains do a lot of work in the visual system and other areas that is completely inaccessible to conscious introspection.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the reason we know this is because there are other ways to learn something about what is going on in there.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If not then, how close can we get?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As of 2014, no one knows.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many of the tasks that were once thought of as &quot;higher-level&quot; thinking can now be done by computers -- symbolic mathematics, chess, music composition, writing stories &lt;a href=&quot;http://homes.chass.utoronto.ca/~sousa/BRUTUS_rev.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;(a)&lt;/a&gt; &lt;a href=&quot;http://www.sciencedaily.com/releases/1998/03/980312075430.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;(b)&lt;/a&gt;, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And yet -- many other tasks that were once thought of as &quot;simple&quot; still cannot be reliably done by computers -- distinguishing photos of cats from photos of dogs &lt;a href=&quot;http://en.wikipedia.org/wiki/CAPTCHA&quot; rel=&quot;nofollow noreferrer&quot;&gt;(c)&lt;/a&gt;, much less remembering a human's name when seeing what that human's face looks like today (slightly older than any other time that human has ever been seen), etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I personally suspect that it is unlikely humans will build a machine that &quot;thinks like a human&quot;, and even less likely that humans will build a machine that thinks like some particular human.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And yet I think it is very important for researchers to continue to &lt;em&gt;try&lt;/em&gt; to do that, because -- whether they eventually discover some insurmountable barrier, or else (against my expectations) build a machine that actually does think like a human -- either way, I think we will find out some very interesting things about what it means to be human.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a secondary benefit, it is a goal that is highly likely to, as a side effect, produce machines that will do other very useful things, long before the question is resolved one way or the other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/s74yQ.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;a small part of&#xA;&lt;a href=&quot;http://debategraph.org/Stream.aspx?nid=75&amp;amp;vt=bubble&amp;amp;dc=focus&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;Navigating 50 years of philosophical debate -- Robert Horn's seven 'Can Computers Think?' debate maps&quot;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="187" LastActivityDate="2014-11-03T18:42:26.963" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4897" PostTypeId="1" CreationDate="2014-11-03T20:02:51.523" Score="5" ViewCount="640" Body="&lt;p&gt;I have a project in mind for a robot which is able to recognize surfaces, and thought about including the following sensors:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;a temperature sensor&lt;/li&gt;&#xA;&lt;li&gt;a colour sensor, or a complex of electronic components to determine a colour&lt;/li&gt;&#xA;&lt;li&gt;and a texture sensor, or, as above, a complex of components to fulfill the purpose&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Now, I did some research on finding a(preferably small) texture sensor for soldering into an electronic circuit, similar to those little temperature sensors one can buy.&#xA;I already thought that &quot;small&quot; would probably turn out to be not small at all before I searched.&#xA;But my research has been fruitless.&#xA;Not just fruitless like in &quot;I can't find exactly what I want.&quot; but fruitless like in &quot;I cannot find anything similar to what I want.&quot;...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most things that turned up either were scientific papers about whole devices, or whole devices for purchase.&#xA;Some company even choose &quot;Structure Sensor&quot; as the name of their iPad-compatible 3D scanner, which made the search utterly depressing as every second article I found is about buying some pre-built iPad device.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All I need is the electronic component, nothing else.&#xA;So hope that any of you people can spare me some research time and recommend me a company/site/whatever which sells such texture sensors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Btw., I do know that surface sensors are probably a bit way more complex than temperature sensors, and my hope for getting what I want is low, but just because I cannot find something, ot does not mean that it doesn't exist.)&lt;/p&gt;&#xA;" OwnerUserId="7402" LastEditorUserId="7402" LastEditDate="2014-11-04T00:43:45.013" LastActivityDate="2014-11-07T05:13:42.733" Title="Are there surface texture sensors for integration in circuits?" Tags="&lt;sensors&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4898" PostTypeId="2" ParentId="4897" CreationDate="2014-11-03T21:01:36.897" Score="3" Body="&lt;p&gt;Texture sensing is hard.  Can you be more specific on your requirements?  I think texture is typically inferred from dynamics.  For example, holding your finger still on a texture doesn't give you much information.  You have to move your finger around on the surface to start to feel what the texture is like.  You are probably feeling the friction from sheer forces, and vibrations in your finger.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might want to check out this paper: &#xA;&lt;a href=&quot;http://www.mit.edu/~kimo/publications/microgeometry/&quot; rel=&quot;nofollow&quot;&gt;Microgeometry Capture using an Elastomeric Sensor&lt;/a&gt;.  They have a &quot;portable&quot; version which is is an 8 inch long, 3 inch diameter tube.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some more robot tactile sensors: &lt;a href=&quot;http://www.takktile.com/&quot; rel=&quot;nofollow&quot;&gt;Takktile&lt;/a&gt;, &lt;a href=&quot;http://www.syntouchllc.com/&quot; rel=&quot;nofollow&quot;&gt;SynTouch&lt;/a&gt;, &lt;a href=&quot;http://optoforce.com/&quot; rel=&quot;nofollow&quot;&gt;OptoForce&lt;/a&gt;.  They each use different sensing modalities and will have different characteristics in terms of normal forces, sheer forces, and dynamic range.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-11-03T21:01:36.897" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4899" PostTypeId="2" ParentId="4863" CreationDate="2014-11-03T22:39:34.677" Score="0" Body="&lt;p&gt;Which type of real-time are you seeking for? Hard-, soft- or near- RT?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm asking because I believe it's likely that near-RT fits your application, depending of course on the speed of the conveyor and the system responsiveness you require.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Near-RT does not need large implementation effort: for instance, on Windows you can easily reach up to 100 Hz computation linking against &lt;a href=&quot;http://wiki.icub.org/yarpdoc/index.html&quot; rel=&quot;nofollow&quot;&gt;yarp&lt;/a&gt;, which is a C++ lightweight library already integrated with OpenCV for vision processing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that 100 Hz should be suitable for dealing with the normal camera frame rate (i.e. 33 Hz)&lt;/p&gt;&#xA;" OwnerUserId="6941" LastActivityDate="2014-11-03T22:39:34.677" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4900" PostTypeId="1" CreationDate="2014-11-03T22:44:21.353" Score="1" ViewCount="1022" Body="&lt;p&gt;I have a simple RRR manipulator where one motor controls the base rotation, and the other two allow movement in a plane extending forward from the base and upwards/downwards. Are there any standard ways to ensure the angle of the end effector remains constant?&lt;/p&gt;&#xA;&lt;p&gt;My current solution uses explicit trigonometric expressions based on distance between joints, but if there is a better way to solve it to include restraints I'd be open to suggestions.&lt;/p&gt;&#xA;&lt;h3&gt;Edit&lt;/h3&gt;&#xA;&lt;p&gt;The manipulator is essentially like the image below, but with an additional base rotation. This allowed for the inverse kinematics to be simplified. As a reference here is the site &lt;a href=&quot;http://www.hessmer.org/uploads/RobotArm/Inverse%2520Kinematics%2520for%2520Robot%2520Arm.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.hessmer.org/uploads/RobotArm/Inverse%2520Kinematics%2520for%2520Robot%2520Arm.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/K8kGd.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;&#xA;" OwnerUserId="7267" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2015-02-07T07:46:58.777" Title="Inverse Kinematics Constant End Effector Angle" Tags="&lt;inverse-kinematics&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4901" PostTypeId="1" AcceptedAnswerId="11139" CreationDate="2014-11-04T07:22:30.183" Score="7" ViewCount="2300" Body="&lt;p&gt;I previously used the Ziegler method to tune the parameters of my PID controller to control my robot's position. I then implemented fuzzy logic for self-tuning the parameters. &#xA;I have two inputs to the fuzzy logic controller; one is the position error and the error rate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that my problem might be due to not understanding the effect of each parameter very well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is that I am confused in setting up the fuzzy rules. When do I need to use high and low values for Kp, Kd and Ki to achieve the best tuning? Is it that Kp must be very low when the error is almost zero (hence, the robot is at the desired position)? The same question applies for all of the three parameters.&lt;/p&gt;&#xA;" OwnerUserId="2533" LastActivityDate="2019-01-24T20:23:52.140" Title="How to tune the PID parameters using Fuzzy Logic?" Tags="&lt;control&gt;&lt;pid&gt;&lt;tuning&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4902" PostTypeId="1" CreationDate="2014-11-04T08:41:15.250" Score="0" ViewCount="3046" Body="&lt;p&gt;I am making a self balancing scooter which runs off 2 x 12V SLA batteries connected in series to make 24V. Everything works as expected except for the power supply which makes me pull most of the hair in my head for 2 weeks now. Hope someone could help.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 2 24V motors run off the batteries directly. Now for my scooter, I need a +12V line for the half bridge drivers, and a +5V line for the signal part. For +12V I am using a LM2576-12 hooked to the batteries (+24) and for the +5V signal I am using a LM2596 ADJ, also hooked directly to the batteries (or is it supposed to be hooked to the output of LM2576-12 for better performance??).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is that, when the motors are under load this power supply system makes the microcontroller hang (or reset I am not too sure, since everytime I have to try to turn off the power switch immediately, because the motor keeps running with whatever value they are fed with right before this happens), usually within 1 minute of riding, which is very dangerous when someone is onboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have read and re-read the datasheet of LM2576 and LM2596 many times, and have tried many settings, from recommended to different values of capacitor and inductor. For the diode, I am using the SS34.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I guess its not because of electromagnetic interference, since while I do have the PCB located near the motors, the PCB is actually put inside a homemade Faraday cage which is grounded (Battery -), and the motor cases are also grounded. Plus that the microcontroller only hangs when motors are under load (i.e. me on board), especially when I go from forward to backward.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The motor controller is self made, using 8 x AUIRF2804S MOSFETs. I also put 4 x 1000uF caps between the motors and the +24V.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would anyone be so kind to throw some light. What would a power supply for this kind of application is supposed to be?&lt;/p&gt;&#xA;" OwnerUserId="7403" LastEditorUserId="7403" LastEditDate="2014-11-04T09:00:06.780" LastActivityDate="2014-11-06T16:05:54.063" Title="LM2576 and LM2596 regulator make microcontroller hang" Tags="&lt;motor&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4903" PostTypeId="1" AcceptedAnswerId="6736" CreationDate="2014-11-04T12:40:48.647" Score="0" ViewCount="1638" Body="&lt;p&gt;I am planning to control my bicycle derailleur with an electronic circuit, the advantages being multiple but not topic of this question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The actuation would be performed by placing the assembly very close to the derailleur (but not on it) and by winding the usual steel cable around a spool placed on axis of a gear, and by using a motor to turn the gear. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This question concerns the alternatives for the spool self-locking mechanism (and eventually the kind of motor to use).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the literature I found &lt;a href=&quot;http://nabilt.github.io/diy_eshift/&quot; rel=&quot;nofollow&quot;&gt;http://nabilt.github.io/diy_eshift/&lt;/a&gt; and other similar ones that directly modify the derailleur with a stepper motor, and then are forced to keep the stepper motor powered up all the time to keep some torque on the shaft. I consider this inefficient, therefore I require a self-locking system to be able to remove power.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I come up with two ideas:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;worm gear operated by a DC motor, where the steel cable is wound around the gear. This system is self-locking or almost self-locking, according to the gear ratio: the gear cannot (easily) drive the worm.&lt;/li&gt;&#xA;&lt;li&gt;a motor driving normal gears with an appropriate reduction factor, but with an additional friction element, whose friction force is greater than the strength of the spring mounted on the derailleur (sorry if I mixed the technical terms). This is what normal bicycles already have: the friction along the cable and in the element placed n the handle is high and keeps the derailleur in place.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Both system would be assisted by a position-sensitive element (a trimmer?) to detect the actual position of the gear and/or of the derailleur, all configured in a closed feedback loop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't consider additional options for the gear such as this one: &lt;a href=&quot;http://www.agma.org/assets/uploads/publications/10FTM17_Kapelevich.pdf&quot; rel=&quot;nofollow&quot;&gt;http://www.agma.org/assets/uploads/publications/10FTM17_Kapelevich.pdf&lt;/a&gt; that consists of parallel-axis gears, whose teeth are however shaped in a manner to achieve self-locking without the need of a low-efficiency worm system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From my point of view, I cannot see any clear advantage of worm gear vs friction except for:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the worm gear may allow me to build a more compact assembly, thanks to the two axes being perpendicular&lt;/li&gt;&#xA;&lt;li&gt;speed vs torque: worm gears reduce the torque requirements, but the motor has to spin a lot and I cannot wait 3 seconds for each gear change.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Concerning the choice of the motor type (this is not the main question though), I think that:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;a worm gear allows me to easily use a DC motor, since torque requirements are low and I don't need to detect the position of the shaft. Moreover, DC motors increase torque with decreasing speed, while stepper motors have the maximum torque defined by the stepping frequency.&lt;/li&gt;&#xA;&lt;li&gt;DC are more compact and cheaper, important if I decide to offer this assembly as a kit and not unique, personal prototype.&lt;/li&gt;&#xA;&lt;li&gt;I am working with 5V supply and I fear most easy-to get DC motors (old printers, scrap electronics) work on 12V, with a significant reduction of the available torque when operated at 5V.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I was looking for a &quot;mechanics&quot; section in Stack Exchange but I couldn't find it, so I opted for Robotics instead of Electronics.&lt;/p&gt;&#xA;" OwnerUserId="7405" LastActivityDate="2015-03-07T00:50:36.127" Title="Self-locking actuator: Friction versus worm gear" Tags="&lt;brushless-motor&gt;&lt;stepper-motor&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4904" PostTypeId="1" CreationDate="2014-11-04T13:46:33.250" Score="0" ViewCount="124" Body="&lt;p&gt;I am new to robotics, and would like to build a smaller robotic arm than in manufacturing facilities.&#xA;I want a small robotic material handlers that can pick up or handle small objects around 12&quot;x12&quot;x12&quot; objects. Essentially a small robotic assembly line in my garage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any kits I can purchase that deals with robotic assembly lines?&#xA;I was wondering has anyone dealt with this before any suggestions on this?&lt;/p&gt;&#xA;" OwnerUserId="7407" LastActivityDate="2014-11-04T15:19:41.083" Title="Is there build your own garage robotic assembly lines out there?" Tags="&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="0" ClosedDate="2014-11-16T19:33:47.697" ContentLicense="CC BY-SA 3.0" />
  <row Id="4905" PostTypeId="2" ParentId="4904" CreationDate="2014-11-04T15:19:41.083" Score="1" Body="&lt;p&gt;There are a number of kickstarter campaigns for small low-cost robot arms.  It is interesting that there is a &lt;a href=&quot;https://www.kickstarter.com/projects/1984252088/robot-army-starter-kit&quot; rel=&quot;nofollow&quot;&gt;delta robot&lt;/a&gt;, a &lt;a href=&quot;https://www.kickstarter.com/projects/535786699/flxarm-low-cost-precision-robotic-arm&quot; rel=&quot;nofollow&quot;&gt;scara arm&lt;/a&gt;, and a &lt;a href=&quot;https://www.kickstarter.com/projects/ufactory/uarm-put-a-miniature-industrial-robot-arm-on-your&quot; rel=&quot;nofollow&quot;&gt;parallelogram arm&lt;/a&gt;.  However, I doubt they come with much software.  So you will probably have to do a lot of the controls yourself.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-11-04T15:19:41.083" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4906" PostTypeId="2" ParentId="4663" CreationDate="2014-11-04T16:49:10.203" Score="1" Body="&lt;p&gt;This problem can be conveniently addressed in the context of multi-rate Kalman estimation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See for example &quot;&lt;a href=&quot;http://www.researchgate.net/publication/223050722_Multi-rate_Kalman_filtering_for_the_data_fusion_of_displacement_and_acceleration_response_measurements_in_dynamic_system_monitoring&quot; rel=&quot;nofollow&quot;&gt;Multi-rate Kalman filtering for the data fusion of displacement and acceleration response measurements in dynamic system monitoring&lt;/a&gt;&quot; (Section 4).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Essentially, you have to establish a time sample $T_s$ lower than the minimum time interval you can expect from two consecutive measurements. Then, you always perform the Kalman time update step each $T_s$ instant, whereas the measurement update is run only upon fresh data.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastActivityDate="2014-11-04T16:49:10.203" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4907" PostTypeId="2" ParentId="4891" CreationDate="2014-11-04T17:26:10.513" Score="1" Body="&lt;p&gt;The first thing that comes to my mind is an error associated with the sensors, have you tuned the sensors? It seems that the sensor is reading an angle when the craft is level which makes it correct continuously when it's level. &lt;/p&gt;&#xA;" OwnerUserId="7337" LastActivityDate="2014-11-04T17:26:10.513" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4908" PostTypeId="2" ParentId="3098" CreationDate="2014-11-04T17:27:04.190" Score="0" Body="&lt;p&gt;Kalman framework can be adapted to deal with joint state and delay estimation: see &lt;a href=&quot;http://www.diva-portal.org/smash/get/diva2:483306/FULLTEXT01.pdf&quot; rel=&quot;nofollow&quot;&gt;this paper&lt;/a&gt; as an example.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Don't forget to consider the &lt;a href=&quot;http://en.wikipedia.org/wiki/Smith_predictor&quot; rel=&quot;nofollow&quot;&gt;Smith Predictor&lt;/a&gt;, which will help you design the linear regulator as the system was without delays.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastActivityDate="2014-11-04T17:27:04.190" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4909" PostTypeId="2" ParentId="4885" CreationDate="2014-11-04T17:39:01.047" Score="0" Body="&lt;p&gt;&lt;a href=&quot;http://www.ros.org/news/2010/08/robots-using-ros-cityflyer-ccnys-asctec-quadrotors.html&quot; rel=&quot;nofollow&quot;&gt;CCNY&lt;/a&gt; seems to have a pretty good UAV ROS library.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might also want to try your question on ROS's question/answer site: &lt;a href=&quot;http://answers.ros.org&quot; rel=&quot;nofollow&quot;&gt;http://answers.ros.org&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-11-04T17:39:01.047" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4910" PostTypeId="2" ParentId="4891" CreationDate="2014-11-04T19:05:20.707" Score="1" Body="&lt;p&gt;Sorry but...it is normal... you are flying in ground effect so it is normal that it is very hard to keep it stable in one point (I suppose you are driving it with some controllers).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Give more power and lift on about 0.5 m or something like that and see what happen. &#xA;To avoid destroying your quadrotor I can suggest you to put a cable (or better a spring) from the ceiling of your garage to the C.G. of the quadrotor to keep it balanced. At worse you destroy one propeller..&lt;/p&gt;&#xA;" OwnerUserId="7097" LastEditorUserId="7097" LastEditDate="2014-11-04T21:48:36.113" LastActivityDate="2014-11-04T21:48:36.113" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4911" PostTypeId="1" CreationDate="2014-11-04T21:54:24.287" Score="1" ViewCount="82" Body="&lt;p&gt;I am a software engineer and also a poultry farmer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I periodically have to manipulate my poultry in such a way as to grab their head and hold them for a brief period, approximately 10 - 30 seconds.  This is an extremely labor-intensive process and it occurred to me that I might be able to use robotics to do the same task.  I am a software engineer so I know very little about robotics and am hoping that someone can point me in the right direction.  Can someone please refer me to companies and/or robotic systems that might be able to help me with this task?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I currently load the poultry into cages specifically designed for this process.  I am thinking that these cages could still be used as they keep the birds from running and make it much easier to capture their heads.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I recently read about a Raspberry PI that had a port of Deep Belief image recognition SDK and thought this might be a promising start.&lt;/p&gt;&#xA;" OwnerUserId="7411" LastEditorUserId="158" LastEditDate="2014-11-05T14:10:32.357" LastActivityDate="2014-11-07T04:03:25.873" Title="Robot to manipulate poultry" Tags="&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4912" PostTypeId="2" ParentId="150" CreationDate="2014-11-05T00:37:13.210" Score="0" Body="&lt;p&gt;To expand on the Tracked-ROV/toilet-bowl answer, the same could be achieved without the complexity of the airgun cartridge, if the motor is positioned high enough in the chamber:   As the water enters, it compresses the air trapped above, depending on the height of the chamber, depth of ROV (and density of the fluid), at some point the pressures will equalise and prevent further fluid ingress.&lt;/p&gt;&#xA;" OwnerUserId="7413" LastActivityDate="2014-11-05T00:37:13.210" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4913" PostTypeId="1" CreationDate="2014-11-05T04:31:06.663" Score="0" ViewCount="60" Body="&lt;p&gt;I am using PID controller to stabilize quadcopter. Its working well on the jig. But when I removed jig it went up and hit ceiling. I analyzed my data and from which I come to the conclusion that at static poisition my gyro sensor is outputing +-6deg/sec but when I start motors (without being control in) gyro rate jupms to +-30deg/sec. This increase in rate due to vibrational noise is causing quadcopter to liftup without beign my intension. Any suggestions to get rid from this vibrational noise? &lt;/p&gt;&#xA;" OwnerUserId="7415" LastActivityDate="2015-01-05T17:55:51.077" Title="Gyro rate gets increase problem" Tags="&lt;sensors&gt;" AnswerCount="2" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="4914" PostTypeId="1" AcceptedAnswerId="4915" CreationDate="2014-11-05T08:30:21.340" Score="0" ViewCount="517" Body="&lt;p&gt;I am a complete beginner at this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have an arbitrary map as a PNG file (black and white, only). And I'm supposed to draw a robot at a position(x,y) and then I'm supposed to simulate the robot taking a laser-scan measurement for an opening angle of 130 degrees, separation of each scan-line is 2 degrees. So, obviously: each laser scanline is supposed to be obstructed by black pixels in the PNG map, while the other lines just keep on going for an n distance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've attempted drawing scanlines around the object, but I'm running into issues when it comes to getting each line to be obstructed by the black-lines. To my mind, it requires a completely different approach.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any helpful advice on how to get started would be greatly appreciated.&lt;/p&gt;&#xA;" OwnerUserId="7416" LastActivityDate="2014-11-07T20:26:46.937" Title="Robotics simulation from PNG map" Tags="&lt;python&gt;&lt;mapping&gt;&lt;simulation&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4915" PostTypeId="2" ParentId="4914" CreationDate="2014-11-05T11:23:34.593" Score="1" Body="&lt;h2&gt;Using scanlines&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;A naive approach could be something like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;for (angle = 0; angle &amp;lt; 360; angle += precision)&#xA;    draw_line_from_robot(robot, angle)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;which tries to draw many lines from the robot, reaching out to as far as it can. You could use &lt;a href=&quot;https://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Bresenham's line algorithm&lt;/a&gt; for example and as you draw your line, make sure you don't hit a black pixel. When you do, simply stop and try the next angle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This approach has a couple of problems. Take this map for example:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/sxo8w.png&quot; alt=&quot;The map&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And the following map with a few lines drawn:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/wjcNF.png&quot; alt=&quot;Scanlines&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can see the first problem here. As you get farther from the robot, you get gaps in the scanlines. You could get precision higher, but you could also change your algorithm a bit to make sure you cover every surrounding pixel:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;for (i = 0; i &amp;lt; x; ++i)&#xA;    draw_line_from_robot_to_destination(robot, i, 0)&#xA;    draw_line_from_robot_to_destination(robot, i, y - 1)&#xA;&#xA;for (i = 1; i &amp;lt; y - 1; ++i)&#xA;    draw_line_from_robot_to_destination(robot, 0, i)&#xA;    draw_line_from_robot_to_destination(robot, x - 1, i)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This way, you are sure to cover all pixels. However, there is a second problem. &lt;em&gt;a lot&lt;/em&gt; of pixels close to the robot are being redrawn over and over again.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;A better way&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Given these limitations (either not covering all pixels, or being highly inefficient), I'm going to propose a different algorithm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can use &lt;a href=&quot;https://en.wikipedia.org/wiki/Breadth-first_search&quot; rel=&quot;nofollow noreferrer&quot;&gt;breadth-first search&lt;/a&gt; on the pixels of the image (as if it was a graph) starting from the robot. Additionally, keep a &lt;a href=&quot;https://en.wikipedia.org/wiki/Binary_search_tree&quot; rel=&quot;nofollow noreferrer&quot;&gt;binary-search tree&lt;/a&gt; of disjoint angle-ranges visible to the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, let's talk about what the binary-search tree does for you. In the beginning, the tree holds only one node:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;                       [0, 360)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;which means the robot can see from angle 0 to 360.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's say at some point you meet an obstacle, at angle &lt;code&gt;x&lt;/code&gt;. You need to block the view of the robot by a certain range, which is blockable by a pixel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/G5IUP.png&quot; alt=&quot;Blocked view&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the picture above, gray pixels are just to show the distance between the robot and the blocked pixel. The green pixel is the robot and the black is the obstacle. The $\alpha$ and $\beta$ are easily calculated. Assuming the block to be at:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\alpha = arctan(b_x - r_x + 0.5, b_y - r_y - 0.5)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\beta = arctan(b_x - r_x - 0.5, b_y - r_y + 0.5)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The computed, you reduce the blocked range from your tree and get a new tree:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;                       [0, a)&#xA;                           \&#xA;                           (b, 360)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If later you decide to reduce $[\gamma, \delta]$ from your tree, where they are below $\alpha$, you would get:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;                       (d, a)&#xA;                       /    \&#xA;                   [0, g)   (b, 360)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If you want to reduce $[\epsilon, \alpha]$ from the tree, you get:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;                       (d, e)&#xA;                       /    \&#xA;                   [0, g)   (b, 360)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You get the idea!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what's the final algorithm?&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/* this is a BFS */&#xA;init_tree(range_tree)&#xA;insert_queue(Q, robot_pos)&#xA;mark_visited(robot_pos)&#xA;&#xA;while (!empty(Q))&#xA;    pos = queue_pop(Q);&#xA;    for (all neighbors of pos, n)&#xA;        if (n is outside the map or visited before)&#xA;            continue&#xA;        if (n is black)&#xA;            remove_blocked_view(range_tree, robot_pos, n)&#xA;        else if (visible_in_ranges(range_tree, robot_pos, n))&#xA;            mark_visited(n)&#xA;            insert_queue(Q, n)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In the end, the pixels that you have visited are the visible pixels from the robot. In the above algorithm, &lt;code&gt;remove_blocked_view&lt;/code&gt; is the algorithm I described above, and &lt;code&gt;visible_in_ranges&lt;/code&gt; is a simply binary-search tree lookup that tells whether the angle from &lt;code&gt;robot_pos&lt;/code&gt; to &lt;code&gt;n&lt;/code&gt; ($arctan(n_x - r_x, n_y - r_y)$) is in the tree or not.  If it is in the tree, the pixel is visible. If it is not, then it's not visible.&lt;/p&gt;&#xA;" OwnerUserId="158" LastEditorUserId="158" LastEditDate="2014-11-05T14:06:31.540" LastActivityDate="2014-11-05T14:06:31.540" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4916" PostTypeId="2" ParentId="4874" CreationDate="2014-11-05T12:28:13.400" Score="2" Body="&lt;p&gt;To your first question if there is something other:&#xA;We are using for AUV control the middleware framework work named rock:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.rock-robotics.org&quot; rel=&quot;nofollow&quot;&gt;http://www.rock-robotics.org&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main problem in general is the weak communication between AUVs.&#xA;You have really limited bandwidths available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your question in unclear which kind of information do you wand to exchange (and how). I know currently no framework which supports data-exchange on real-low bandwidths. The Communication between AUVs is a special case, and should not be fullfilled by a framework.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you plan to do multi-agent setups (where is client is autonomous after the start) the framework plays no special rule, since there is no communication between the vehicles.&lt;/p&gt;&#xA;" OwnerUserId="4508" LastActivityDate="2014-11-05T12:28:13.400" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4918" PostTypeId="2" ParentId="4829" CreationDate="2014-11-05T15:53:27.653" Score="0" Body="&lt;p&gt;The other answer is not quite right.  Nominal (rated) torque is the torque at which the motor can run continuously without overheating.  This is not the same as the torque at maximum efficiency.  A well designed motor will have its rated torque slightly higher than the torque at max. efficiency.  Maximum torque of a DC motor is the stall torque.  &lt;/p&gt;&#xA;" OwnerUserId="3866" LastActivityDate="2014-11-05T15:53:27.653" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4919" PostTypeId="2" ParentId="4897" CreationDate="2014-11-05T20:58:38.277" Score="8" Body="&lt;p&gt;You might try a simple microphone. They're available in tiny surface mount packages:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/gSIkD.jpg&quot; alt=&quot;SMD microphone&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'll need to rub it across the surface, and you should be able to recognise different surface textures by the sound they make.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/Pz6zC.jpg&quot; alt=&quot;Surface sounds&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do a &lt;a href=&quot;http://en.wikipedia.org/wiki/Fourier_transform&quot; rel=&quot;nofollow noreferrer&quot;&gt;Fourier transform&lt;/a&gt; on it, and you should be able to tell something about the scale of the surface textures.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might not want to rub the microphone itself on the surface. Rather rub something else, and listen to the sound. Try dropping a blob of silicone rubber over the hole, and let it set. When the silicone rubs on a surface, the vibrations should transmit fairly efficiently into the microphone.&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2014-11-05T20:58:38.277" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4920" PostTypeId="2" ParentId="4853" CreationDate="2014-11-06T14:43:55.120" Score="1" Body="&lt;p&gt;If you only want to turn it on and off, a mechanical relay is a simpler and cheaper solution. You will need a common transistor to turn on and off the relay, which in turn turns on and off the motor. Just google &quot;arduino relay transistor&quot;.&lt;/p&gt;&#xA;" OwnerUserId="7403" LastActivityDate="2014-11-06T14:43:55.120" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4921" PostTypeId="2" ParentId="3159" CreationDate="2014-11-06T15:35:26.453" Score="2" Body="&lt;p&gt;I had this problem when using the Brown ROS Create drivers.  I never found the source of the issue but I did notice that if I powered the Create with a fresh set of AA's, using the Create AA-battery adapter, the problem occurred rarely if ever.  As the AA's charge ran down, the problem would occur more frequently.  It might be a silly and inefficient workaround but perhaps try it.  The AA battery adapter that I'm referring to is shown on page 9 of the Create manual (&lt;a href=&quot;http://www.irobot.com/filelibrary/create/Create%20Manual_Final.pdf&quot; rel=&quot;nofollow&quot;&gt;http://www.irobot.com/filelibrary/create/Create%20Manual_Final.pdf&lt;/a&gt;).&lt;/p&gt;&#xA;" OwnerUserId="5715" LastActivityDate="2014-11-06T15:35:26.453" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4922" PostTypeId="2" ParentId="4874" CreationDate="2014-11-06T15:44:51.973" Score="1" Body="&lt;p&gt;Communication between swarms of AUVs is an open problem, because you are trying to build a reliable communications network out of unreliable links.  Between the time that I did an undergraduate thesis on this (multiple cooperating AUVs) and the present day, there are currently no middlewares that address this issue -- all of them assume flawless communication between nodes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In other words, you are trying to simultaneously arrange the nodes in a way that will allow them to communicate, and communicate to find how to arrange the nodes for the purposes of the mission.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-11-06T15:44:51.973" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4923" PostTypeId="2" ParentId="4913" CreationDate="2014-11-06T15:46:19.647" Score="1" Body="&lt;p&gt;You could probably use a low pass filter to eliminate the vibrational noise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should also correct the drift in your gyro measurement using some form of altitude sensor.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-11-06T15:46:19.647" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4924" PostTypeId="2" ParentId="4903" CreationDate="2014-11-06T16:01:24.843" Score="0" Body="&lt;p&gt;It sounds like what you're looking for is a &lt;a href=&quot;http://en.wikipedia.org/wiki/Ratchet_(device)&quot; rel=&quot;nofollow noreferrer&quot;&gt;pawl&lt;/a&gt;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Ratchet_(device)&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/thumb/b/b7/Ratchet_Drawing.svg/320px-Ratchet_Drawing.svg.png&quot; alt=&quot;ratchet and pawl&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This would allow you to passively lock the gear, and when you wanted to loosen the tension on the cable you would just use a solenoid to disengage the pawl. &lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="-1" LastEditDate="2017-03-10T09:42:49.277" LastActivityDate="2014-11-06T16:01:24.843" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="4925" PostTypeId="2" ParentId="4902" CreationDate="2014-11-06T16:05:54.063" Score="1" Body="&lt;p&gt;It sounds like the main problem is that you are powering your control electronics and power electronics off the same battery.  The battery voltage will drop when it's under load, and that drop seems to be browning out the control circuitry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's not impossible to power both pieces from the same power source, but it would be a very good idea to isolate the root cause of your issue before you go about trying to fix that.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-11-06T16:05:54.063" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="4927" PostTypeId="2" ParentId="4897" CreationDate="2014-11-06T21:19:56.170" Score="2" Body="&lt;p&gt;This is a complete shot in the dark, but what about the sensor from an optical mouse? I mean--they are always coupled with a processor that just gives you displacement in the x and y directions, but if you interface directly with the sensor, it's essentially a low resolution camera that focuses immediately in front of it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt; This link might help: &lt;a href=&quot;http://spritesmods.com/?art=mouseeye&quot; rel=&quot;nofollow&quot;&gt;http://spritesmods.com/?art=mouseeye&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7431" LastEditorUserId="7431" LastEditDate="2014-11-07T05:13:42.733" LastActivityDate="2014-11-07T05:13:42.733" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4928" PostTypeId="1" AcceptedAnswerId="4931" CreationDate="2014-11-07T00:07:12.160" Score="0" ViewCount="629" Body="&lt;p&gt;My and a friend are hacking together a Nespresso Coffee pod dispenser. We have our heart set on a particular design after thinking up countless ways of dispensing a single pod. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The design has a single flavour of pods in a vertical tube so they tend to fall down. One or more latches around the base of the tube stop any pods from falling out. Releasing the latch for 45ms will allow the pod through (10mm fall, well past the lip of the pod) while catching the next one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The latch is the problem component. I haven't yet found a suitable product off the shelf. Ideally, the solution would be compact and cheap (&amp;lt; $5). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are some of the latch ideas to date (most of which are considered linear in motion):&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Solenoid - Seems over-kill and tend to be &gt; 5 dollars each&lt;/li&gt;&#xA;&lt;li&gt;Ultrasonic Motor - Can't find any&lt;/li&gt;&#xA;&lt;li&gt;Linear Actuator - Usually around 50 dollars and quite bulky&lt;/li&gt;&#xA;&lt;li&gt;Piezoelectric Actuator - Mostly tuned for nM scale precision, and are hard to come by.&lt;/li&gt;&#xA;&lt;li&gt;Rotating disk with release notch, driven by stepper motor - still &gt; $5 and moderately bulky.&lt;/li&gt;&#xA;&lt;li&gt;Rotating latch with string attached to rack and pinion powered by electric motor - Don't think it's a simple enough solution.&lt;/li&gt;&#xA;&lt;li&gt;Rotating cam - how a gumball machine works (I suspect). (This was also suggested in an answer, but would involve both a mechanical and electronic motor component, not as simple as option [5])&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I have a 3D printer, so I am open to mechanical solutions - a custom latch with crude electromagnet for example.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/Jo6qG.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note the desired size of the latch (Yellow), holding pods (Orange) in a tube (Black). Yes, motors can work, but they would be quite bulky. I'm not after the obvious solution, but a clever one, or one which finds the suitable product.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(I understand that with only one latch on one side, the pods will not sit perfectly vertical, and the latch would need to be higher up.)&lt;/p&gt;&#xA;" OwnerUserId="7427" LastEditorUserId="7427" LastEditDate="2014-11-08T11:14:18.703" LastActivityDate="2014-11-09T19:38:06.483" Title="Simplest and cheapest way to create a spring back latch" Tags="&lt;mechanism&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4929" PostTypeId="2" ParentId="4911" CreationDate="2014-11-07T04:03:25.873" Score="1" Body="&lt;p&gt;Georgia Tech Research Institute (GTRI) does research on automated poultry processing (&lt;a href=&quot;http://foodtech.gatech.edu/robotics-automation.html&quot; rel=&quot;nofollow&quot;&gt;http://foodtech.gatech.edu/robotics-automation.html&lt;/a&gt;).  You might start there. &lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-11-07T04:03:25.873" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4930" PostTypeId="1" CreationDate="2014-11-07T09:18:00.210" Score="1" ViewCount="290" Body="&lt;p&gt;I have sorted out all the internals for my robot (drive systems and weaponry) and now I need to put it all together in a chassis which will be about 40 cm wide by 35 cm long by 7 cm high. I have examined different options, including Perspex, Acrylic and Polycarbonate as well as aluminum, in a number of thicknesses. However I have excluded Perspex and Acrylic because, unlike Polycarbonate, they tend to shatter if bent.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So now it is down to Polycarbonate and/or Aluminum.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So here is the problem, up for discussion or a solution.. but first I must point out (a) that the overall weight limitation in turn imposes chassis weight limitations (b) that this is my first ever robot wars entry, and (c) I am likely to be up against cutting and tearing devices. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I already have the weights of the different materials in hand, so all of the following options are possible in terms of weight.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Option 1: Do it all in 6 mm Polycarbonate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Option 2: Combine a thin (2 mm aluminum) outer shell with an underlying 3 mm polycarbonate one to get a good mix of the properties of both (rigid and hard, thin and heavy + flexible and strong, thick and light. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Option 3: As Option 2 but the other way round - 3mm Polycarbonate on the outside and 2 mm Aluminum on the inside.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Should I go with Option 1, 2, 3 or something else altogether that maybe I am not seeing? (Note: having it all in 3 mm aluminum is not possible as it will be too heavy - I checked)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Should I have the aluminum on the outside as a heavy duty shell or on the inside as a &quot;last resort&quot; layer? (Note: In my mind these layers would be held together with nuts and bolts with washers to spread any impact loads; but even here should the nuts and bolts be tightened for rigidity or left slightly loose for impact absorption?)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any advice, especially from people seasoned in the art of robot warfare please?&lt;/p&gt;&#xA;" OwnerUserId="7198" LastActivityDate="2014-11-07T09:18:00.210" Title="Chassis materials for Hobby-weight (5.44Kg) battle robot" Tags="&lt;wheeled-robot&gt;&lt;chassis&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4931" PostTypeId="2" ParentId="4928" CreationDate="2014-11-07T09:27:46.027" Score="3" Body="&lt;p&gt;What about using a simple RC-servo with a rotating cam that holds one pod.&#xA;When rotating down It would drop the pod it is holding. When rotating up, it would lift the whole stack for one pod height and allow the bottom pod to drop into the cam's holding space.&#xA;&lt;img src=&quot;https://i.stack.imgur.com/ogzDG.png&quot; alt=&quot;drawing&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="482" LastActivityDate="2014-11-07T09:27:46.027" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4932" PostTypeId="2" ParentId="4914" CreationDate="2014-11-07T20:21:01.543" Score="0" Body="&lt;p&gt;If I understand the problem correctly, this is very straightforward. Given a set of grid points that can be either filled or unfilled, a point of origin, and a set of scan angles, you want to find the distance of the closest filled point for any scan angle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To do this optimally, you will need to find an algorithm that can give you the full set of points that would be covered by your scan angles, up to distance n.  For now, we can skip that -- the rest of the algorithm is the same.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;x_o, y_o    = get_origin_point()&#xA;theta_o     = get_center_angle_of_desired_scan_direction()&#xA;n           = get_max_sensor_distance()&#xA;sweep_angle = 130&#xA;beam_width  = 2   &#xA;num_bins    = sweep_angle / beam_width&#xA;&#xA;# initialize the array of scanned lines to the maximum sensor distance&#xA;scan_results = []&#xA;for angle in range(bins):&#xA;    scan_results[angle] = n&#xA;&#xA;# iterate over all points in the grid&#xA;for (x, y) in all_points:&#xA;&#xA;    if not point_is_filled(x, y): continue&#xA;&#xA;    # distance from scanner&#xA;    r = math.hypot(x - x_o, y - y_o)     &#xA;    if n &amp;lt; r: continue&#xA;&#xA;    # the angle of this point relative to scanner&#xA;    theta = math.atan2(y - y_o, x - x_o) &#xA;&#xA;    # the corresponding scan line bin this angle is in&#xA;    bin = (theta - theta_o - (sweep_angle / 2)) / beam_width&#xA;    if bin &amp;lt; 0 or num_bins &amp;lt;= bin: continue&#xA;&#xA;    # update value if this point is closer than what was already sensed&#xA;    scan_results[bin] = min(scan_results[bin], r)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2014-11-07T20:26:46.937" LastActivityDate="2014-11-07T20:26:46.937" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4933" PostTypeId="1" AcceptedAnswerId="4935" CreationDate="2014-11-08T02:29:03.630" Score="2" ViewCount="197" Body="&lt;p&gt;I scavenged a 4 terminal power switch (Legion EPS 21) from some electronic device (don't remember what it was) and it has the following markings on it:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Legion EPS21&#xA;10A 250VAC TV-5&#xA;8A/128A 250V &amp;micro;T85 &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/TNYkzqQ.jpg&quot; alt=&quot;Legion EPS21&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to use this as the main power switch for my robot which will have nothing higher than 12 volts and a &quot;normal&quot; total Amperage (i.e. with all the motors in it running) of around 25 Amps, but of course if a motor stalls then the current will rise much higher. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;First of all I cannot understand how the same switch can be rated for different amperages. I cannot find any datasheets for this switch that might help nor any reference to the standards (TV-5 and &amp;micro;T85). So I would like to know if this can handle 128 Amps at 12 Volts. If it helps at all, the wires currently connected to the terminals are quite thick and have &quot;18 AWG 600 volts&quot; written on them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Secondly I would like to ask whether I need to cater for normal running amperage levels or for stall current levels, which are obviously much higher. Although people talk about stall currents running over 100 Amps in some cases - which quite frankly cause me some concern - I cannot seem to be able to find any such switches on any robot component websites, so I am starting to think that it is the &quot;normal&quot; level of current I should plan for and not the &quot;stall&quot; one. Am I right in this?&lt;/p&gt;&#xA;" OwnerUserId="7198" LastEditorUserId="350" LastEditDate="2014-11-09T19:34:55.497" LastActivityDate="2014-11-09T19:34:55.497" Title="Power switch standards and suitability for purpose" Tags="&lt;current&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4934" PostTypeId="1" CreationDate="2014-11-08T05:36:05.200" Score="-2" ViewCount="66" Body="&lt;p&gt;After seeing the movie, &lt;i&gt;I, Robot&lt;/i&gt;, I got this question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If Asimov's 3 Laws (actually implementing law 1 automatically implements the other 2) are perfectly implemented on a quantum computer that controls an army of humanoid robots, and it  decides that taking complete control over the politics and economics via revolution is the best way to ensure human happiness, shouldn't it be allowed to proceed peacefully to ensure minimal loss of life? Isn't the hero's decision to destroy the computer fundamentally wrong? &lt;/p&gt;&#xA;" OwnerUserId="7437" LastActivityDate="2014-11-18T17:05:34.990" Title="Perfect implementation of Asimov's 3 Laws" Tags="&lt;theory&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4935" PostTypeId="2" ParentId="4933" CreationDate="2014-11-08T06:14:45.313" Score="3" Body="&lt;p&gt;First, regarding why “the same switch can be rated for different amperages”, the current-rating of a switch depends on switched voltage and current because switching a high voltage or current typically produces a more energetic arc than does switching a low voltage or current.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The switch you referred to, with its “Legion EPS21 10A 250VAC TV-5 8A/128A 250V μT85” markings, is rated at switching a maximum of 10A in a 250VAC circuit, and is rated at 8A normal current, 128A surge, and is rated for use at temperatures no higher than 85° C.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;See eg &lt;a href=&quot;http://www.alps.com/prod/info/E/HTML/Switch/Power/SDKZ/SDKZ_common.html&quot; rel=&quot;nofollow&quot;&gt;alps.com&lt;/a&gt; for a table of UL, CSA, and IEC Safety Standards markings.  The 8A/128A mark is a VDE, SEMKO, or BS (ie, German, Swedish, or British) Load Life Test  rating, comparable to the UL or CSA (ie, American or Canadian) TV8 Load Life Test  rating for DPST switches.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you used that switch in a 12VDC circuit carrying 25A, you'd have no guarantees about how it would work.  It might fail open or closed, after working for 1 or 1000 operations; it might catch fire; it might work ok.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you operated it during a motor-stall event to switch a hundred or so amps, I'd expect it to fail after one or two such uses, with contacts either welded together or melted off.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 18 AWG wires attached to it are rated at 7 to 10A.  They wouldn't burn out carrying 25A, but would run warm.  If you consult a wire-size table (eg at &lt;a href=&quot;http://www.powerstream.com/Wire_Size.htm&quot; rel=&quot;nofollow&quot;&gt;powerstream.com&lt;/a&gt; or &lt;a href=&quot;http://www.stayonline.com/reference-circuit-ampacity.aspx&quot; rel=&quot;nofollow&quot;&gt;stayonline.com&lt;/a&gt;) you will see that 12 AWG is a workable size of wire for 25A, while 10 AWG would provide a bigger safety margin.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using a 12V contactor or automotive relay (controlled by a small switch like the example) is an alternative to using a big switch.  (Eg, see &lt;a href=&quot;https://www.google.com/search?hl=en&amp;amp;site=imghp&amp;amp;tbm=isch&amp;amp;source=hp&amp;amp;biw=1169&amp;amp;bih=612&amp;amp;oq=+12V+contactor+or+automotive+relay+&amp;amp;gs_l=img.12...1826.1826.0.3103.1.1.0.0.0.0.75.75.1.1.0....0...1ac..58.img..1.0.0.qfanuMsiQpo&amp;amp;q=12V%20contactor%20or%20automotive%20relay&quot; rel=&quot;nofollow&quot;&gt;contactor and relay pictures&lt;/a&gt; at Google Images.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Edit:&lt;/em&gt; If a surge or stall is brief (eg a few hundredths of a second; I don't know the actual UL specs on surge duration) and the switch is not operated during it, the switch should survive.  But if the switch is opened during a motor stall, arcing will occur.  Typically, most of the energy inductively stored in the motor windings will dump into the arc, and the switch contacts will vaporize.&lt;/p&gt;&#xA;" OwnerUserId="478" LastEditorUserId="478" LastEditDate="2014-11-08T21:22:40.320" LastActivityDate="2014-11-08T21:22:40.320" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4936" PostTypeId="2" ParentId="4900" CreationDate="2014-11-08T16:27:01.347" Score="1" Body="&lt;p&gt;You want the angle of link 2 to stay constant relative to the global frame?  I think that your arm is so simple what you are doing is probably best.  I wonder if you need trig though.  To keep link 2 at a constant world angle, i think you can use this equation:&#xA;$$&#xA;\Delta \theta_1 = - \Delta \theta_2&#xA;$$&#xA;So every time you move one joint by some amount, you should move the other joint the same amount but in the opposite direction.  &lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-11-08T16:27:01.347" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4937" PostTypeId="1" AcceptedAnswerId="4938" CreationDate="2014-11-09T03:21:32.053" Score="3" ViewCount="239" Body="&lt;p&gt;QT has native bluetooth support, but can it be used to communicate with the Lego NXT robot?&lt;/p&gt;&#xA;" OwnerUserId="7441" LastActivityDate="2014-11-09T04:38:55.240" Title="Can I use QT to communicate with a Lego NXT robot?" Tags="&lt;nxt&gt;&lt;robotc&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4938" PostTypeId="2" ParentId="4937" CreationDate="2014-11-09T04:38:55.240" Score="3" Body="&lt;p&gt;Sure it can. The NXT provides a bluetooth serial port, so you don't actually have to do anything with bluetooth in Qt. All of the Bluetooth stuff will be handled by your OS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead, to communicate to the NXT from Qt, you will need to open the serial port for reading and writing, then send commands to the NXT over this connection. You can find out more about the available commands using the &lt;a href=&quot;http://www.lego.com/en-us/mindstorms/downloads/software/nxt-hdk/&quot; rel=&quot;nofollow&quot;&gt;NXT Hardware Developer Kit&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="7442" LastActivityDate="2014-11-09T04:38:55.240" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="4939" PostTypeId="1" AcceptedAnswerId="4941" CreationDate="2014-11-09T06:59:39.330" Score="7" ViewCount="6137" Body="&lt;p&gt;I'm working on a diy quadcopter build from scratch and have bought a 4pack ESC from Castel Creations.While i currently have my quad up and running(sort of), from what i've read on the various sources and forums on the internet, i am not able to/ not recommended to use different ESCs together on the same quad.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As i bought my ESCs together as a 4 pack, and am not able to buy any replacements unless i were to switch out all 4 of them, this has me worried in the eventual case of a spoilt ESC in the future.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From what i can gleam from various posts on the internet, it seems to have something to do with the rate at which ESCs communicate with the flight controller.If so, can i not simply buy a esc programmer and program all of them to communicate at the same rate?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've asked the dude at my local hobby shop, and he said that i cannot/should not be using different escs from different brands or even the same brand but different models( i.e 35v &amp;amp; 20V ) ESCs together.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would really appreciate it if someone were to clarify what exactly is the issue with using different ESCs together on the same quadcopter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S If it helps, i'm currently using the APM 2.6 as my flight controller on a WFLY transmitter and a f450 frame.&lt;/p&gt;&#xA;" OwnerUserId="7444" LastActivityDate="2016-05-06T11:29:59.507" Title="Why can't i use different ESCs together on a multirotor?" Tags="&lt;quadcopter&gt;&lt;microcontroller&gt;&lt;electronics&gt;&lt;esc&gt;&lt;multi-rotor&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4940" PostTypeId="2" ParentId="4863" CreationDate="2014-11-09T13:56:28.727" Score="1" Body="&lt;p&gt;Whether you actually require a realtime system is unclear.  The only component for which realtime would be relevant is the computer vision application, and it sounds like you haven't written it yet -- you don't know if it will work without realtime.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All the hardware components you listed are agnostic toward the hard- soft- or non-realtime nature of the OS they will connect to.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should implement the vision system first, and see if its performance is adequate.  If not, only then should you start looking for more real-time OS options -- at that point, you'll have a more solid grasp of the performance requirements.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-11-09T13:56:28.727" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4941" PostTypeId="2" ParentId="4939" CreationDate="2014-11-09T15:52:25.473" Score="3" Body="&lt;p&gt;Ideally, when you raise the collective all the way up, all the ESCs put out their max power and the quadcopter goes straight up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Different ESCs will end up producing different maximum thrusts; and also will ramp up (and down) differently with sudden changes in control signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you probably already know, if one rotor of a multirotor vehicle has more (or less) thrust than the others, the vehicle will flip over.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://en.wikipedia.org/wiki/Ardupilot&quot; rel=&quot;nofollow&quot;&gt;ArduPilotMega (APM)&lt;/a&gt; or other &lt;a href=&quot;http://www.opencircuits.com/multi-rotor&quot; rel=&quot;nofollow&quot;&gt;electronic stabilization system&lt;/a&gt; will try to compensate for differences in thrust to keep it right side up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ESCs don't need to be exactly the same.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The more different the ESCs are from each other, the longer it will take to tune the stabilization system.&#xA;The more different the ESCs are from each other, the harder the stabilization system has to work in flight to keep the multirotor vehicle right-side up; and the more the vehicle will wobble in flight.&lt;/p&gt;&#xA;" OwnerUserId="187" LastActivityDate="2014-11-09T15:52:25.473" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4942" PostTypeId="2" ParentId="4928" CreationDate="2014-11-09T19:38:06.483" Score="1" Body="&lt;p&gt;Since you don't need any position control (i.e., it needs to be either latched or unlatched), the simplest option that will serve your needs is a solenoid.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;All of the other mechanisms you listed would require some degree of position control, not to mention the extra complexity.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-11-09T19:38:06.483" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4943" PostTypeId="1" CreationDate="2014-11-09T21:06:32.907" Score="1" ViewCount="488" Body="&lt;p&gt;Well, I wanted to use some very small servos for a project and the smallest I could find there these: &#xA;&lt;a href=&quot;https://www.hobbyking.com/hobbyking/store/uh_viewItem.asp?idProduct=33401&quot; rel=&quot;nofollow&quot;&gt;https://www.hobbyking.com/hobbyking/store/uh_viewItem.asp?idProduct=33401&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But Danny Choo (a Japanese blogger) started a business with robotic dolls some time ago and I remember him mentioning somewhere on his site that he uses servos in his dolls.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://farm4.staticflickr.com/3836/14271013147_41a0820560_o.jpg&quot; alt=&quot;servo in doll&quot;&gt;&#xA;(also this pic, containing doll nudity: &lt;a href=&quot;https://farm4.staticflickr.com/3889/14502508165_fde682636b_o.jpg&quot; rel=&quot;nofollow&quot;&gt;https://farm4.staticflickr.com/3889/14502508165_fde682636b_o.jpg&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is about 60cm in height and therefore the servo in my first link is obviously too big, to e.g. fit inside the arm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was wondering what kind of servo(or motor in general if it's not a servo in the end) he is using that is so tiny it can fit in there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone here have any idea?&lt;/p&gt;&#xA;" OwnerUserId="7402" LastEditorUserId="350" LastEditDate="2014-11-11T22:14:45.727" LastActivityDate="2015-05-11T12:05:21.300" Title="What servos does this robot use?" Tags="&lt;motor&gt;&lt;servomotor&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4944" PostTypeId="1" CreationDate="2014-11-09T23:48:18.033" Score="1" ViewCount="25" Body="&lt;p&gt;I'm stumped. I've been looking through all of the Qt classes and I'm so completely and utterly lost. There are only three examples of bluetooth use in Qt, but none of them work for me. I just need a program that can talk with NXT and analyze an image from a webcam.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Has anybody gotten this to work before?&lt;/p&gt;&#xA;" OwnerUserId="7441" LastActivityDate="2014-11-09T23:48:18.033" Title="Does anyone have a working example of using Qt to communicate with NXT?" Tags="&lt;nxt&gt;&lt;troubleshooting&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4945" PostTypeId="2" ParentId="4943" CreationDate="2014-11-10T01:42:30.820" Score="1" Body="&lt;p&gt;The first image shows some tiny gear motors.  They look kind of like this one &lt;a href=&quot;https://solarbotics.com/product/gm18/&quot; rel=&quot;nofollow&quot;&gt;https://solarbotics.com/product/gm18/&lt;/a&gt; from solarbotics, but smaller.  Solarbotics also has some smaller geared pager motors you should look into.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Toys like this almost definitely use a custom motor and gearbox.  When you tell the far-east manufacturer that you want to produce X million, they take your specs, and shop it around to their motor and gearbox houses.  Then they get a completely custom motor and gearbox for dirt cheap.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't think i've ever seen a standard &quot;hobby&quot; servo in a mass manufactured product.  they are too big and expensive.  After all, a servo is just a motor with some type of angular feedback so a little bit of code can drive (i.e. servo) the motor to a desired angle.  In a product, you want more control over where to put the sensing, and you can integrate the drive electronics with the rest of your system.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-11-10T01:42:30.820" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4946" PostTypeId="1" CreationDate="2014-11-10T06:09:58.643" Score="3" ViewCount="86" Body="&lt;p&gt;I have a camera mounted on a rotational joint. I need to calibrate the extrinsics of this camera. I can fix the camera at an estimated angle (facing the ceiling). Then I want to get the real angle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For that I track key-points in the ceiling while moving my robot forward. Supposing that odometry is perfect, I will see a difference between real key-points shift and estimated shift from the odometry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I thought about using &lt;a href=&quot;https://en.wikipedia.org/wiki/Levenberg%E2%80%93Marquardt_algorithm&quot; rel=&quot;nofollow&quot;&gt;Levenberg Marquardt&lt;/a&gt; to find the optimal solution which is the angle and of my camera in the robot frame but what would my equation look like?&lt;/p&gt;&#xA;" OwnerUserId="4429" LastEditorUserId="4429" LastEditDate="2014-11-12T02:04:25.200" LastActivityDate="2016-10-30T04:40:41.777" Title="Joint angle correction using LM" Tags="&lt;cameras&gt;&lt;odometry&gt;&lt;joint&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4948" PostTypeId="1" AcceptedAnswerId="4950" CreationDate="2014-11-10T11:44:53.050" Score="4" ViewCount="821" Body="&lt;p&gt;How does the submarine prevent water flow through the screw mechanism? The mechanism rotates the screw so there should be a little gap, how come the water doesn't come through this gap in to the submarine?&lt;/p&gt;&#xA;" OwnerUserId="7453" LastEditorUserId="7453" LastEditDate="2014-11-10T13:17:10.667" LastActivityDate="2014-11-10T21:01:19.720" Title="Submarine screw and the isolation from the water" Tags="&lt;motor&gt;&lt;design&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2014-11-16T19:33:38.657" ContentLicense="CC BY-SA 3.0" />
  <row Id="4949" PostTypeId="1" AcceptedAnswerId="5084" CreationDate="2014-11-10T14:18:39.563" Score="5" ViewCount="61" Body="&lt;p&gt;I've been reading about hierarchical reinforcement learning (HRL) and it's applications. A well-written literature review on the subject can be found &lt;a href=&quot;http://people.cs.umass.edu/~mahadeva/papers/hrl.pdf&quot;&gt;here&lt;/a&gt;. However, I was wondering if research has ever been done where an HRL system has been implemented on an individual robot? &lt;a href=&quot;https://mindmodeling.org/cogsci2014/papers/221/paper221.pdf&quot;&gt;This paper&lt;/a&gt; seems to imply that it has been, by saying that the delivery task that it models &quot;is commonly used in HRL, both in computational and experimental settings&quot;. However, my Google Scholar searches haven't turned up any fruit as to what this real-world experimental setting might be. Help would be appreciated for finding either model-based or model-free implementation of hierarchical reinforcement learning in a robot.&lt;/p&gt;&#xA;" OwnerUserId="6991" LastActivityDate="2015-01-01T18:20:39.570" Title="Has hierarchical learning been embodied in a robot before?" Tags="&lt;machine-learning&gt;&lt;reinforcement-learning&gt;&lt;reference-request&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4950" PostTypeId="2" ParentId="4948" CreationDate="2014-11-10T21:01:19.720" Score="4" Body="&lt;p&gt;A variety of techniques are used for propeller shaft sealing.  One of the most common is a &quot;packing gland&quot; or &quot;stuffing box&quot;, as in illustration below from a &lt;a href=&quot;http://www.dieselduck.info/machine/04%20auxiliary/stuffing_box.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;dieselduck.info&lt;/a&gt; web page which has details of using such seals. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/qEeY4.jpg&quot; alt=&quot;packing gland&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also see &lt;a href=&quot;http://www.boatus.com/boattech/casey/stuffing-box.asp&quot; rel=&quot;nofollow noreferrer&quot;&gt;boatus.com&lt;/a&gt;, which describes how much leakage to allow, and when to repack.  Two or three drops of leakage per minute is recommended; the leakage helps lubricate the shaft where it passes through the seal. Leakage gets pumped out of the vessel as necessary.&#xA;For some submarines, high leakage rates occur.  For example, &lt;a href=&quot;http://en.wikipedia.org/wiki/Collins-class_submarine#Propulsion_system&quot; rel=&quot;nofollow noreferrer&quot;&gt;wikipedia &lt;/a&gt; notes that&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Propeller shaft seals were a significant problem on Collins and Farncomb.  Although designed to allow for a leak of 10 litres per hour, during trials it was found that the seals would regularly misalign and allow hundreds of litres per hour into the boat – during one deep diving test the flow rate was measured at approximately 1,000 litres a minute.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Other kinds of propeller shaft seals (oil or grease filled, gas filled, with carbon plates, o-rings, etc) may leak less or not at all. (&lt;a href=&quot;http://www.shaftseal.com/en/categories&quot; rel=&quot;nofollow noreferrer&quot;&gt;1&lt;/a&gt;, &lt;a href=&quot;https://www.physicsforums.com/threads/how-do-you-seal-a-rotor-underwater.323819/&quot; rel=&quot;nofollow noreferrer&quot;&gt;2&lt;/a&gt;).  &lt;/p&gt;&#xA;" OwnerUserId="478" LastActivityDate="2014-11-10T21:01:19.720" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4951" PostTypeId="2" ParentId="4891" CreationDate="2014-11-11T13:42:07.400" Score="0" Body="&lt;p&gt;Have you tried removing the white blocks under the propellers? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I understand that you use them as somewhere to safely land, but they seem a bit far from aerodynamic. A quadrotor flies because of the air it gets to move under it, but you are placing a white box just in the middle of the way of that air.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The sound that quadrotor makes just to move a few cm from the ground should be a hint. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The blocks are a good idea, in my opinion, but they should be placed somewhere else, try and move them towards the centre, far from the propellers influence. Make them a bit smaller if you have to, but let the air flow free. Cut them to a more rounded shape if you will. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have some doubts about my answer, no better way of proving me wrong (or right) than running your own wind test. Get some smoke (anyway you want) go through the propellers, fix the quadrotor to ground and record the results of how the air flows around the blocks. The smoother (a perfect straight line being the best) the lines of air are, the better the flight can be. A vortex means a low pressure under your vehicle, which is the opposite of what you want. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Good luck! Please, show us the results.&lt;/p&gt;&#xA;" OwnerUserId="6912" LastActivityDate="2014-11-11T13:42:07.400" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4952" PostTypeId="2" ParentId="4891" CreationDate="2014-11-11T14:03:55.043" Score="0" Body="&lt;p&gt;You are flying in the near of ground so the &lt;a href=&quot;https://en.wikipedia.org/wiki/Ground_effect_(aerodynamics)&quot; rel=&quot;nofollow&quot;&gt;Ground effect&lt;/a&gt; applies. Test flight in an altitude of min. 0.5 meter height. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also if this doesn't help, then there could be that there is a bit more weight on one side of the multicopter, to counteract it set an integral (I) value for the P&lt;strong&gt;I&lt;/strong&gt;D controller of the Multicopter. The I value will help the Quadrotor to remain in the required position (horizontal while hover).&lt;/p&gt;&#xA;" OwnerUserId="7464" LastActivityDate="2014-11-11T14:03:55.043" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4953" PostTypeId="1" AcceptedAnswerId="5052" CreationDate="2014-11-11T17:14:04.983" Score="2" ViewCount="98" Body="&lt;p&gt;How would i go about measuring and quantifying the performance of an ESC? I am looking to measure the response rate(in Hz) of an ESC, as well as it's performance(i.e how fast it starts and stops, as well as how much it increases/decreases the motor's speed per tick).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm assuming that i can manually program an ESC and it's response rate with a programming card/module that is compatible with said ESC, but i would still not be able to measure the exact performance of the ESC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would appreciate any and all inputs and suggestions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S This question is linked/asked in conjunction with a previous question of mine here on the Robotics StackExchange here   &lt;a href=&quot;https://robotics.stackexchange.com/questions/4939/why-cant-i-use-different-escs-together-on-a-multirotor&quot;&gt;Why can&amp;#39;t i use different ESCs together on a multirotor?&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7444" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2014-12-27T22:05:42.043" Title="Measuring the performance and response rate of ESCs" Tags="&lt;sensors&gt;&lt;quadcopter&gt;&lt;electronics&gt;&lt;esc&gt;&lt;multi-rotor&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4954" PostTypeId="1" CreationDate="2014-11-11T22:58:18.767" Score="1" ViewCount="1439" Body="&lt;p&gt;I wish to start my vending business, but none of the existing vending machines fit my needs.&#xA;So, I need to choose the &quot;brains&quot; to my vending machine under current development.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The user experience of my vending machine will be:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;User change their products on touchscreen display (firegox open rails application running in the &quot;brains&quot;), insert moneys, after that products will be returned to the user and notification (json query) will be send to it saas.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There are requirements:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Popular (I want to use a widely used computer for better support)&lt;/li&gt;&#xA;&lt;li&gt;Debian-like or CentOs like system (easy to develop rails apps on them)&lt;/li&gt;&#xA;&lt;li&gt;Big count of GPIOs&lt;/li&gt;&#xA;&lt;li&gt;Working with touch-screen and large display (at least 15&quot;)&lt;/li&gt;&#xA;&lt;li&gt;Working with mdb protocol (for currency detector needs)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;So, I need your hints. It seems that BeagleBone is more powerful then Raspberry Pi, but there is one problem: It doesn't support many of the video outputs. Is there any solution to make good video output on BeagleBone? Do other such computers exist?&lt;/p&gt;&#xA;" OwnerUserId="7467" LastEditorUserId="158" LastEditDate="2014-11-13T17:25:23.867" LastActivityDate="2014-12-15T18:30:58.373" Title="Raspberry Pi vs BeagleBone Black Rev C on vending machine" Tags="&lt;raspberry-pi&gt;&lt;beagle-bone&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4955" PostTypeId="1" CreationDate="2014-11-12T02:24:54.817" Score="2" ViewCount="132" Body="&lt;p&gt;I am using the wheels and motors of an RC toy car as a simple robotics platform. The car has 2 motors, one drives the back wheels, the other steers the front wheels. The steering motor is stalled by design when steering, it is blocked at a fixed angle by the plastic chassis. It draws 0.85 A when stalled (i.e. anytime when steering).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Due to this marvel of toy engineering I have to use an oversized motor driver IC (L293B – 1A continuous) and this motor draws about 3W of power (0.85A x 3.6V). I’m using this IC to control the other (“normally rotating”) motor as well, which appears to be the same type: 0.85A stall current, around 100mA no-load, and 250-400mA at normal loads. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Testing with various series resistors I have found out that 0.3A are sufficient to turn the steering wheels and keep them in position. Using a resistor might allow me to use a driver IC with a lower Amp rating (L293D – 0.6 A), however the same energy is still wasted, only as heat. While this is not a serious issue with this toy setup, I am planning to build bigger robots with significantly more power, so energy conservation and current control will be important in the long run, and motors may also stall accidentally.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking into DC motor current limiting, I’ve found the following approaches:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Series resistor – simple, cheap, bidirectional, wastes energy, dissipates heat&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Current source with 2-3 transistors and sensing resistor – relatively simple, however I’ve only found unidirectional circuits, which would get shorted when switching motor direction. Is there a way to use this method bidirectionally? (and/or with a 2-channel H-bridge IC?  - I cannot place it before the ICs common supply, because the 2 motors draw different currents). &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Chopper circuits/PWM – Will this reliably protect the IC from overload? Is it energy-efficient? &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Are there other other methods I am unaware of? Something on the principles of switching supplies?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Would it be simpler in my application to use 2 separate drivers/h-bridges and place a voltage divider between them, so that a lower voltage is provided for the inefficient stalling motor and more to the one that moves the robot?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;So how do the above  methods compare in terms of efficiency and simplicity of design? What is the preferred method in robotics/other DC motor applications?  Also, is it standard practice to limit DC motor current, or a motor is most efficient if allowed to draw as much current as it needs? Is it acceptable to use a DC motor that is mechanically stalled by design, or is this only used in cheap crap toy cars?&lt;/p&gt;&#xA;" OwnerDisplayName="user7471" LastActivityDate="2015-04-08T04:20:48.020" Title="Comparison of the efficiency of DC motor current limiting / control methods?" Tags="&lt;motor&gt;&lt;power&gt;&lt;driver&gt;&lt;current&gt;&lt;h-bridge&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4956" PostTypeId="1" CreationDate="2014-11-12T03:56:55.407" Score="2" ViewCount="314" Body="&lt;p&gt;I've read about various robots using a 2D lidar system for SLAM ( such as at IGCV, &lt;a href=&quot;http://www.igvc.org/&quot; rel=&quot;nofollow&quot;&gt;http://www.igvc.org/&lt;/a&gt; ) but I'm wondering how good exactly does the sensor have to be? Specifically: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What accuracy is necessary? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What field of view is necessary? Is it enough just to have lidar scanning forward in a 90 degree sweep?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What angular resolution is needed?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I realize that probably with super clever software you could probably do SLAM with a couple ultrasonic sensors, but using standard packages for software navigation what's a reasonable minimum value for these parameters? (and any other important ones I've forgotten) &lt;/p&gt;&#xA;" OwnerUserId="7473" LastActivityDate="2014-11-12T21:17:28.380" Title="What kind of lidar is necessary for SLAM?" Tags="&lt;slam&gt;&lt;navigation&gt;&lt;lidar&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4957" PostTypeId="2" ParentId="2680" CreationDate="2014-11-12T12:28:26.037" Score="1" Body="&lt;p&gt;&lt;a href=&quot;http://www.societyofrobots.com/robot_arm_calculator.shtml&quot; rel=&quot;nofollow&quot;&gt;http://www.societyofrobots.com/robot_arm_calculator.shtml&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please check the above link for calculating torque.&lt;/p&gt;&#xA;" OwnerUserId="7474" LastActivityDate="2014-11-12T12:28:26.037" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4958" PostTypeId="1" AcceptedAnswerId="4963" CreationDate="2014-11-12T14:15:19.460" Score="1" ViewCount="49" Body="&lt;p&gt;In my possession I have an &lt;a href=&quot;http://www.inovatic-ict.com/didactic-equipment/emoro-kits-overview/emoro-usb-classic.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Inovatic USB Interface&lt;/a&gt;. (In Detail: UI-8x8 v1.1 2009) I would like to program it to do some simple stuff and things. I am familiar with C# Programming but from what i have heard its not possible to program this interface with C#.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What it looks like:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ZsJAf.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZsJAfs.jpg&quot; alt=&quot;Interface from the top&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/X1OZD.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/X1OZDs.jpg&quot; alt=&quot;The USB port on the Interface&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/zbern.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zberns.jpg&quot; alt=&quot;The USB Cable used to connect the Interface to the computer&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Where can I find the Drivers for this Interface?  I have checked the Inovatic website but they only have the v1.0 version of the drivers and I'm pretty sure that I need v1.1 !&lt;/li&gt;&#xA;&lt;li&gt;How can i program it? What language do i use?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="7475" LastEditorUserId="350" LastEditDate="2014-11-12T21:26:10.290" LastActivityDate="2014-11-13T06:18:43.487" Title="How to program an Inovatic USB interface?" Tags="&lt;microcontroller&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4959" PostTypeId="1" CreationDate="2014-11-12T15:58:13.213" Score="1" ViewCount="1317" Body="&lt;p&gt;I am computer programmer and it's really been long since I have done electronics. I need help on connecting my servos to an Arduino to power my robotic arm. &lt;a href=&quot;http://jjshortcut.wordpress.com/2010/04/19/my-mini-servo-grippers-and-completed-robotic-arm/&quot; rel=&quot;nofollow noreferrer&quot;&gt;This&lt;/a&gt; is the robotic arm that I am trying to build.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have come up with the connections as shown in the below diagram with my basic knowledge and browsing the internet. I have omitted the signal wires for clarity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/CEFam.png&quot; alt=&quot;Robot Arm Power Connection&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I would like to know is &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Will this work?&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Is this a good/decent design? I think it isn't as I have 4 battery packs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to have a single power source that would save me the trouble of maintaining so many batteries. To do this I have thought of using a voltage regulator but I am concerned about how this would perform if one servo starts drawing too much load. It might suck up all most the power leaving very little for the other servos.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Any suggestions would be greatly helpful.&lt;/p&gt;&#xA;" OwnerUserId="7477" LastEditorUserId="158" LastEditDate="2014-11-14T10:09:10.640" LastActivityDate="2014-11-14T10:09:10.640" Title="Connecting multiple servos to a robotic arm" Tags="&lt;arduino&gt;&lt;robotic-arm&gt;&lt;otherservos&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4960" PostTypeId="1" AcceptedAnswerId="4971" CreationDate="2014-11-12T18:45:01.713" Score="2" ViewCount="386" Body="&lt;p&gt;When I put stereo camera on a moving platform and sync the cameras, what kind of delay between the cameras is tolerable? This would probably depend on the motion, but are there some guidelines?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any practitioner guides on how to build a moving stereo system?&lt;/p&gt;&#xA;" OwnerUserId="7481" LastEditorUserId="158" LastEditDate="2014-11-13T14:16:45.330" LastActivityDate="2015-01-06T23:22:49.107" Title="Stereo vision on a moving vehicle" Tags="&lt;stereo-vision&gt;" AnswerCount="1" CommentCount="11" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4961" PostTypeId="2" ParentId="4956" CreationDate="2014-11-12T20:49:43.787" Score="2" Body="&lt;p&gt;I know this is not a specific answer, but I have found that the more range and field-of-view the better.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a gut feeling that if you can trade these off for accuracy and resolution, then you should go with more range.  For example, if you could have 100 degrees FOV at some angular resolution, or 200 degrees FOV at half the angular resolution, then go with 200 degrees. &lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-11-12T20:49:43.787" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4962" PostTypeId="2" ParentId="4956" CreationDate="2014-11-12T21:17:28.380" Score="1" Body="&lt;p&gt;There are no constraints on accuracy, because SLAM deals in probabilities.  Better sensors mean better mapping (and better performance), but there are no baseline requirements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For your question to have a meaningful answer, you would need to know how accurate you'd like your map to be, how long you'd want to spend exploring the space, and what level of confidence you'd like the map to have.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-11-12T21:17:28.380" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4963" PostTypeId="2" ParentId="4958" CreationDate="2014-11-13T06:18:43.487" Score="2" Body="&lt;h2&gt;Drivers&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The only link they have to download drivers is on &lt;a href=&quot;http://www.inovatic-ict.com/didactic-equipment/download.html&quot; rel=&quot;nofollow&quot;&gt;their download page&lt;/a&gt;. Unfortunately the link to the EMoRo USB drivers returns a 404 error. I have attempted to send a message to the company to let them know.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for the version of the driver, the only way you'll know if the v1.0 driver will work is if you try it. Since nothing else is available at the moment, you should try working with the driver you have and see if you have any problems relating to that.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Programming Tools&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;According to the page you linked in your question:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The kit is designed for users who wish to program the robot with a flowchart or in the Basic programming language... Advanced users can program the robot in Bascom-AVR or AVR C and they can build their own autonomous robot. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So you can either use their flow-chart programming environment, you can use Bascom-AVR (which is BASIC for AVR microcontrollers), or you can program it in C. It looks like Inovatic's &lt;a href=&quot;http://www.inovatic-ict.com/didactic-equipment/download.html&quot; rel=&quot;nofollow&quot;&gt;download page&lt;/a&gt; has IDEs and compilers available to download for free to use any of these options.&lt;/p&gt;&#xA;" OwnerUserId="1490" LastActivityDate="2014-11-13T06:18:43.487" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4964" PostTypeId="2" ParentId="3178" CreationDate="2014-11-13T10:26:05.113" Score="3" Body="&lt;p&gt;This is a picture of my own PID-like regulator of the form:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;out = feed + MaxMin(DiffMax, DiffMin, // limit the difference, add feed (can be removed)&#xA;  + P*(E=setp-feed)                   // proportional factor, error calculation&#xA;  + (A = MaxMin(AccuMax, AccuMin, A   // limit for accumulator&#xA;  + I*E - D*(feed-prev)))             // joined integrator and derivator&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The big difference&lt;/strong&gt; from regular PID regulators is &lt;strong&gt;in the way of using the accumulator for both I and D&lt;/strong&gt; - which is a bit similar to that &lt;em&gt;leaking integrator&lt;/em&gt; mentioned by ryan0270 (I was experimenting with similar thing as well). The derivator will decrease the accumulator (which can be limited as well to prevent windup and big value when set-point is greatly changed).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/malh3.png&quot; alt=&quot;PID regulator with accumulated derivator&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;blue = output / control signal (force, input to boiler)&lt;br&gt;&#xA;white = feedback (regulated value, actual temperature)&lt;br&gt;&#xA;green/yellow = set-point (desired value)&lt;br&gt;&#xA;red = state of accumulator (centered like being +50%)&lt;br&gt;&#xA;navy/dark blue = proportional part&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have designed it for temperature regulation, but it seems to be equally good for your problem. My &lt;strong&gt;fade&lt;/strong&gt; factor of the system is simulating the temperature dissipation / error of equitherm regulator. Your gravity and variable small weights seems similar to me. The integrator can compensate for this, but would normally overshoot and cause oscillation. Derivator applied on the shared accumulator prevents that - it reduces the accumulated error by the change made.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Proportional is strongest at the beginning (startup acceleration), Integrator comes next (error-correcting acceleration) and &lt;strong&gt;Derivator will slow it last&lt;/strong&gt; (like a brake - preventing the overshoot by reducing the accumulator).&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Regulator step:&lt;/h3&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;//  regulator step&#xA;    float diff = setp - feed&#xA;    float accu = 0&#xA;    if pA &amp;amp;&amp;amp; !isnan(diff)&#xA;    //  integrator&#xA;        accu = *pA + I*diff&#xA;    //  derivator&#xA;        if pV&#xA;            accu += D*(*pV - feed)&#xA;            *pV = feed&#xA;    //  accu limits&#xA;        if accu &amp;gt; aMax; accu = aMax&#xA;        if accu &amp;lt; aMin; accu = aMin&#xA;    //  store back&#xA;        *pA = accu&#xA;//  proportional&#xA;    diff = P*diff + accu&#xA;//  diff limits&#xA;    if diff &amp;gt; dMax; diff = dMax&#xA;    if diff &amp;lt; dMin; diff = dMin&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;h3&gt;Full code:&lt;/h3&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;math.h&amp;gt;&#xA;#include &quot;mem/config.h&quot;&#xA;#include &quot;device/analog.h&quot;&#xA;&#xA;__packed struct PID&#xA;    byte    type&#xA;    char    name[9]&#xA;    word    period&#xA;    Timer   tmr&#xA;    byte    feed, setp&#xA;    word    flags&#xA;    ANALOG  output&#xA;    float   vals[9]&#xA;&#xA;enum&#xA;    fP          = 1&amp;lt;&amp;lt;0&#xA;    fI          = 1&amp;lt;&amp;lt;1&#xA;    fD          = 1&amp;lt;&amp;lt;2&#xA;    fDiffMax    = 1&amp;lt;&amp;lt;4&#xA;    fDiffMin    = 1&amp;lt;&amp;lt;5&#xA;    fAccuMax    = 1&amp;lt;&amp;lt;6&#xA;    fAccuMin    = 1&amp;lt;&amp;lt;7&#xA;&#xA;void devPid()&#xA;    PID *pid = (PID *)xpointer(DevAddr)&#xA;    if !pid-&amp;gt;tmr.reached(pid-&amp;gt;period*10u)&#xA;        return&#xA;    pid-&amp;gt;tmr.start()&#xA;&#xA;//  inputs&#xA;    float feed = 0.0f&#xA;    float setp = 0.0f&#xA;    if pid-&amp;gt;feed &amp;lt; ainCount&#xA;        feed = getxf(ains[pid-&amp;gt;feed] + AIN_value)&#xA;    if pid-&amp;gt;setp &amp;lt; ainCount&#xA;        setp = getxf(ains[pid-&amp;gt;setp] + AIN_value)&#xA;&#xA;//  PID factors (multiplicators)&#xA;    float P = 0.0f&#xA;    float I = 0.0f&#xA;    float D = 0.0f&#xA;//  difference limits (output-feedback)&#xA;    float dMax = INFINITY&#xA;    float dMin = -INFINITY&#xA;//  accumulator limits (anti-windup)&#xA;    float aMax = INFINITY&#xA;    float aMin = -INFINITY&#xA;&#xA;//  flags and pointers&#xA;    word flags = pid-&amp;gt;flags&#xA;    float __packed* pf = pid-&amp;gt;vals&#xA;    float __packed* pA = null   // accumulator&#xA;    float __packed* pV = null   // previous feed&#xA;&#xA;//  parse variable object part&#xA;    if flags &amp;amp; fP&#xA;        P = *pf++&#xA;    if flags &amp;amp; fI&#xA;        I = *pf++&#xA;        pA = pf++&#xA;        if flags &amp;amp; fD&#xA;            D = *pf++&#xA;            pV = pf++&#xA;    if flags &amp;amp; fDiffMax&#xA;        dMin = -(dMax = *pf++)&#xA;        if flags &amp;amp; fDiffMin&#xA;            dMin = *pf++&#xA;    if flags &amp;amp; fAccuMax&#xA;        aMin = -(aMax = *pf++)&#xA;        if flags &amp;amp;fAccuMin&#xA;            aMin = *pf++&#xA;&#xA;//  regulator step&#xA;    float diff = setp - feed&#xA;    float accu = 0&#xA;    if pA &amp;amp;&amp;amp; !isnan(diff)&#xA;    //  integrator&#xA;        accu = *pA + I*diff&#xA;    //  derivator&#xA;        if pV&#xA;            accu += D*(*pV - feed)&#xA;            *pV = feed&#xA;    //  accu limits&#xA;        if accu &amp;gt; aMax; accu = aMax&#xA;        if accu &amp;lt; aMin; accu = aMin&#xA;    //  store back&#xA;        *pA = accu&#xA;//  proportional&#xA;    diff = P*diff + accu&#xA;//  diff limits&#xA;    if diff &amp;gt; dMax; diff = dMax&#xA;    if diff &amp;lt; dMin; diff = dMin&#xA;&#xA;//  final output&#xA;    ainSet(DevAddr + offsetof(PID,output),&#xA;      feed + diff)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You can tune it a bit and use the error, accumulator and feedback-change to detect the steady state to power it off.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h3&gt;Add-on&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;I have been experimenting with it a bit more - used the regulator with erroneous non-linear 7bit DAC (custom-made of few resistors and opto-transistors) with erroneous main regulation (basic conversion peformed very bad in high values) and observed the behaviour (good ADC was used as feedback). The regulator performed really well and quickly ended with 1-bit oscillation (which is inevitable). I have further enhanced my simulation with this gained knowledge and here is the picture:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/o1WuA.png&quot; alt=&quot;PID regulation with digital granularity&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="7485" LastEditorUserId="7485" LastEditDate="2014-11-13T17:29:15.857" LastActivityDate="2014-11-13T17:29:15.857" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4965" PostTypeId="1" AcceptedAnswerId="4975" CreationDate="2014-11-13T17:15:47.467" Score="0" ViewCount="88" Body="&lt;p&gt;I am new to robotics. I want to make a robot using Arduino Uno R3. I need to use Gear Motor 9 for that &lt;a href=&quot;https://solarbotics.com/product/gm9/&quot; rel=&quot;nofollow&quot;&gt;here is the link&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is that motor needs 50mA current. But arduino only outputs only 40mA current. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to supply the motors with another power source and use a switch to connect both the circuits. Can you please tell me what type of switch I can use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in Advance. &#xA;P.S. Sorry if I used any wrong technical terms&lt;/p&gt;&#xA;" OwnerUserId="7487" LastActivityDate="2014-11-14T20:21:31.073" Title="How to use gear motor 9 with Arduino" Tags="&lt;arduino&gt;&lt;motor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4966" PostTypeId="1" CreationDate="2014-11-13T18:10:05.423" Score="0" ViewCount="27" Body="&lt;p&gt;I have a two-wheeled (two DC motors) robot that needs to follow the wall beside the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The issue is that the DC motors spin at different rates (because they are not identical, of course), so the robot does not go straight when the same voltage is provided to each motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I use IR distance sensors (and op-amps) to keep the distance from the wall constant?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(the robot must travel parallel to the wall)&lt;/p&gt;&#xA;" OwnerUserId="7488" LastActivityDate="2014-11-13T18:10:05.423" Title="Keeping two wheeled wall following robot straight" Tags="&lt;two-wheeled&gt;" AnswerCount="0" CommentCount="3" ClosedDate="2014-11-16T19:34:02.183" ContentLicense="CC BY-SA 3.0" />
  <row Id="4967" PostTypeId="1" AcceptedAnswerId="4968" CreationDate="2014-11-13T18:03:27.313" Score="3" ViewCount="660" Body="&lt;p&gt;I have a two-wheeled (two DC motors) robot that needs to follow the wall beside the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The issue is that the DC motors spin at different rates (because they are not identical, of course), so the robot does not go straight when the same voltage is provided to each motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I use IR distance sensors (and op-amps) to keep the distance from the wall constant?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(the robot must travel parallel to the wall)&lt;/p&gt;&#xA;" OwnerUserId="7488" OwnerDisplayName="Jaysbays" LastActivityDate="2014-11-13T20:30:53.153" Title="Keeping two wheeled wall following robot straight" Tags="&lt;motor&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4968" PostTypeId="2" ParentId="4967" CreationDate="2014-11-13T18:11:45.017" Score="3" Body="&lt;p&gt;You can use the principle of proportional error control.&#xA;Do the IR sensors have an analog output? If so, you can build an entirely analog control loop using op amps.  If not, it's probably easier to use a microcontroller to do the control digitally, with a pair of motor controllers to handle the output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Either way, you want to arrange that the commanded motor speeds are as follows:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ V_1 = V_{nom} + k_p (d - d_{nom}) $$&#xA;$$ V_2 = V_{nom} - k_p (d - d_{nom}) $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where $V_1$ and $V_2$ are the commanded motor speeds or voltages, k_p is the proportional gain (this can be adjusted to trade off responsiveness and residual error against stability), d is the measured distance from the wall and d_nom is the nominal distance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More complicated control loops could involve integral and derivative terms; the latter could be implemented by using distance sensors at the front and rear of the vehicle so that their difference is proportional to the rate of approach or closure.  But I think a simple proportional controller as describe should work just fine.&lt;/p&gt;&#xA;" OwnerUserId="7489" OwnerDisplayName="pericynthion" LastEditorUserId="7489" LastEditDate="2014-11-13T18:35:36.123" LastActivityDate="2014-11-13T18:35:36.123" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4969" PostTypeId="2" ParentId="4967" CreationDate="2014-11-13T18:56:19.110" Score="0" Body="&lt;p&gt;Looks like you could use PI or PID regulator (see &lt;a href=&quot;https://robotics.stackexchange.com/a/4964/7485&quot;&gt;my answer there&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The P-regulator (proportional) suggested by pericynthion should work, but you have to tune it well and won't be same for another similar robot if the difference changes. PI regulator can compensate on-the-fly and deduce the error. D-part can be used for fine-tuning.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Use the distance (measured by IR-sensor) as a feed for PID regulator and desired distance as the input. Output will be the difference of the regulation for the two motors (actually the Kp from the answer you got from pericynthion).&lt;/p&gt;&#xA;" OwnerUserId="7485" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2014-11-13T18:56:19.110" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4970" PostTypeId="2" ParentId="4967" CreationDate="2014-11-13T20:30:53.153" Score="0" Body="&lt;p&gt;What I suggest to you is to use a PI or PID regulator for each motor like pericynthion said, but I'm afraid is not sufficient to keep your robot stright, so you need to keep the the two wheels at the same speed and synchronized, for example you can implement odometery in your UC.&lt;/p&gt;&#xA;" OwnerUserId="7491" LastActivityDate="2014-11-13T20:30:53.153" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4971" PostTypeId="2" ParentId="4960" CreationDate="2014-11-13T21:19:42.063" Score="1" Body="&lt;p&gt;The guidelines is quite simple math. You are right the sync precision requirement is a function of speed - the faster you go the better the sync has to be to give you the same distance difference between the two cameras. Example: 100 km/h is 27.7 m/s - 100ms sync will give you difference of 2.7 meters of distance from one camera to other. 10ms will give you 27cm, 1ms 2.7cm etc. If you have a very slow moving vehicle 100ms can be OK. But I think no stereo algorithm (3D reconstruction, visual odometry) can produce good results with bad input data so you want to do your math before starting to see where the sync should be.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you can analyze your stereo in post you can fix the sync in post-processing (more FPS will give you better sync possibility). If you need real-time then you can not fix in post and your requirement for hardware is higher.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For real time stereo processing I think you want the stereo sync to be as good as possible within your budget (of course depending on vehicle speed). The best is two identical cameras with wired external trigger (remote shutter) - you wire both cameras to the same HW trigger button. If you dont need high FPS you can use commodity (relatively cheap) consumer cameras with remote shutter (few point&amp;amp;shoot cameras may have it, ultrazooms or DSLRs will too), but these usually save to SD card which is not very convenient for real-time processing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An USB camera is better for real time as you can stream the images directly into your code (C++ etc.). &quot;Industrial&quot; cameras are usually USB, they have quite high FPS and external trigger - &lt;a href=&quot;http://www.e-consystems.com/1MP-USB3-Globalshutter-Camera.asp&quot; rel=&quot;nofollow&quot;&gt;See3CAM_10CUG by e-con Systems&lt;/a&gt; is the cheapest one probably, other more expensive brands are &lt;a href=&quot;http://www.theimagingsource.com/en_US/products/cameras/&quot; rel=&quot;nofollow&quot;&gt;The Imaging Source&lt;/a&gt; or &lt;a href=&quot;http://www.ptgrey.com/&quot; rel=&quot;nofollow&quot;&gt;Point Grey&lt;/a&gt;. These can usually do from about 10 to many FPS with external trigger depending on model.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I use 2 separate cams. The first camera is software triggered, but when its sensor is exposed it hardware triggers the 2nd camera.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This is a wrong solution - you want to trigger both the same way in order for them to behave the same - see the remote shutter above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Going back to the root of your question:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;what kind of delay between the cameras is tolerable?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As I said above this translates into &quot;what distance difference between left and right stereo frames is tolerable for stereo vision?&quot; To be honest, even though I did some stereo matching I have no experience with sync precision here (I used synced dastasets), but as I said I can imagine the results will get worse linearly with the distance delta. Would be interesting to do some tests in this field...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Something like &quot;spherical resolution&quot; (number of image horizontal/vertical pixels divided by your lens field-of-view) will probably play a big role - the lower the spherical resolution the lower the sync precision needs because you could not recognize the details anyways. There will be some (probably not very difficult) math behind this.&lt;/p&gt;&#xA;" OwnerUserId="1021" LastEditorUserId="1021" LastEditDate="2015-01-06T23:22:49.107" LastActivityDate="2015-01-06T23:22:49.107" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4972" PostTypeId="1" AcceptedAnswerId="5176" CreationDate="2014-11-14T04:54:13.397" Score="2" ViewCount="1787" Body="&lt;p&gt;To determine an outdoor location I think that I need to measure the angles between at least 3 beacons and take into account the order I sweep the beacons.  Is this a workable solution to get positional accuracy of about 30cm in a house block sized area?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Rewrite of question, note no distance measurement is suggested only angle measurements.&#xA;I am proposing that it might be possible to have a minimum of 3 local rf beacons and a robot device that sweeps an antenna through a circle identifying the angles between these beacons and to use this information and the order that the beacons are seen to find an absolute location.  I tried to prove this geometrically and it seems that with the 3 beacons there is 2 unique solutions without knowing the order and 1 solution if the order is known.  There would (I believe) be no need to try to find the distance to the beacons.  My question is, could this be implemented for a reasonable cost with some nRF24L01 based transcievers and some sort of rotating antenna?&lt;/p&gt;&#xA;" OwnerUserId="7492" LastEditorUserId="7492" LastEditDate="2014-11-15T07:10:00.437" LastActivityDate="2014-12-17T14:46:50.963" Title="Can triangulation by measuring angles to 3 beacons to find location work over a large outdoor area" Tags="&lt;localization&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4974" PostTypeId="2" ParentId="4959" CreationDate="2014-11-14T09:37:08.753" Score="1" Body="&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;It's will work depending on the characteristics of your batteries and servo motors (draw current and voltage). If you draw more current than the battery capacity you'll damage your batteries (overload or overdischarge) and probably your servos. I suggest to you to use NIMH battery they are more reliable than the AAA batteries&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Why you want to use single porwer ssource, 4 batteries pack in parallel are more reliable for your servos. If one servo drawing to much current, its will effect one battery and the other servos they are safe. In the other case (one sngle battery), the others servos may damaged by the failing servo. If you use one single battery, you need the arduino to control the current and voltage of the servos and BMS to your battery.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="7491" LastActivityDate="2014-11-14T09:37:08.753" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4975" PostTypeId="2" ParentId="4965" CreationDate="2014-11-14T20:21:31.073" Score="0" Body="&lt;p&gt;This motor is based on a simple DC motor. Don't be mistaken, it will draw much more than 50ma when running with even small load, just look at it's datasheet. In case you want to control the motor's speed, you will need some kind of DC motor driver, which you could build (look up H-bridge) or buy, and than use PWM technique to control it. In case you want just to turn it on and off, the simplest solution would be a relay controlled by arduino's digital output and connected in series with your additional power supply and the motor.  &lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2014-11-14T20:21:31.073" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4976" PostTypeId="2" ParentId="4972" CreationDate="2014-11-15T00:46:09.547" Score="1" Body="&lt;p&gt;The theoretical answer is: yes. The pragmatic answer is: no.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you know the location (xyz coordinate) of the three beacons in your inertial (fixed) reference frame, then all that is needed to determine the location of the device you would like to track is the straight-line distance from your device to each of the three beacons. More correctly, the distance information would narrow down the position of your device to exactly two locations. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depending on the transmission technology of your beacons (RF, sonar, light), and the surrounding environment, it may or may not be practical to calculate the straight-line distance. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is difficult with both sonar and RF to get reliable distance calculations because of reflections from the surrounding environment. Distance calculations using time-of-flight are very reliable and accurate. However, you need line-of-sight. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Take a look at this technology. It is the closest that I have encountered for practical location over a large area: &lt;a href=&quot;http://www.ubisense.net/en/&quot; rel=&quot;nofollow&quot;&gt;http://www.ubisense.net/en/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7502" LastActivityDate="2014-11-15T00:46:09.547" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4977" PostTypeId="2" ParentId="4954" CreationDate="2014-11-15T03:02:03.270" Score="2" Body="&lt;p&gt;I would recommend sticking to Raspberry Pi for few reasons:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Popularity - Raspberry gives 30,900,000 results in Google and Beagle Bone Black only 1,900,000.&lt;/li&gt;&#xA;&lt;li&gt;Raspi have Raspian - Debian for ARM&lt;/li&gt;&#xA;&lt;li&gt;Raspberry could easily drive even 32' or more HD display. Beagle has some limitations on resolution. &lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Raspberry will work with MDB protocol if you buy some hardware (MDB to RS232) Example here: &lt;a href=&quot;http://www.waferstar.com/en/MDB-PC.html&quot; rel=&quot;nofollow&quot;&gt;http://www.waferstar.com/en/MDB-PC.html&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Future proof - you could use compute module if you wish to make your product modular. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Reasons for Beagle Bone Black&#xA;3. Pin count - 96 vs 40 for Raspberry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think that you design with using web browser only to connect to Ruby on Rails application could be too much for embedded design because this could be achieved with Tkinter for Python or similar &lt;a href=&quot;http://visualruby.net/&quot; rel=&quot;nofollow&quot;&gt;http://visualruby.net/&lt;/a&gt; if you want to use Ruby language. &lt;/p&gt;&#xA;" OwnerUserId="7155" LastActivityDate="2014-11-15T03:02:03.270" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4979" PostTypeId="2" ParentId="4693" CreationDate="2014-11-15T08:02:45.683" Score="0" Body="&lt;p&gt;For this project, as well as others like mine (I'll mention after), I would also consider Low Energy Bluetooth or BTLE.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It would be using radio signals like you said.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to see how I, or a cat, or anyone spends there time. Working from home I spend most my day in the house and mostly at the desk or behind the computer screen. But it would be interesting to collect, analyze and visualize this information.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Two methods:&#xA;1) Just set up a few fixed-point broadcasting &quot;towers&quot; with the Arduino on the user as a receiver, recording tower_ID and tower_amplitude and simply triangulate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) Set up the user / tennis player / cat as the broadcaster and each tower as a receiver.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each can be ideal for different situations. Consider how long the User must wear the device, how heavy it can be and thus how much power it can carry.&#xA;^ My bet would be that method 1 would require more sophistication and thus a larger arduino / shield / power combination to be worn on the User (Tennis player) / Person (Me) / Cat (not me).&#xA;^^ Not so good for tennis or action sports, but not a big deal for me lounging around the house in my sweat pants ([See Loss Of Regimen in TheOatMeal blog about working from home post] for lolz)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the second method you could use a cheap BTLE transmitter that is lightweight (most the weight of these are made up of the watch battery used to power them) about the size and weight of a 3 stacked quarters.&#xA;The receiver towers could then be designed with power systems that don't require the cost of reduced weight.&#xA;The Second method would, however, require a little extra post data munging since you would need to reconcile data from multiple source inputs rather than method 1's use of a single source with multiple inputs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am still digging around with the project myself having just started researching today and won't get around to designing later this month.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please feel free to contact me with any ideas, suggestions or questions &#xA;@&#xA;&lt;a href=&quot;http://www.jeradacosta.com&quot; rel=&quot;nofollow&quot; title=&quot;Personal Website of Jerad Acosta&quot;&gt;My Personal Website&lt;/a&gt; or &lt;a href=&quot;https://www.linkedin.com/in/jeradacosta&quot; rel=&quot;nofollow&quot; title=&quot;Jerad Acosta LinkedIn&quot;&gt;LinkedIn&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My website / blog is way over due for a make-over and update of past and current projects. But in the coming months I will post projects such as the Brain-Computer-Interface I used to control a synthesizer with, a tactile interface which gave users texture feedback from interacting with digital objects (such as feeling a smooth surface in a picture of granite or a rigid or bumpy surface from accord pictures or programmed game objects with meta data read by the Arduino controlled feedback system build into and around a mouse)&lt;/p&gt;&#xA;" OwnerUserId="7504" LastActivityDate="2014-11-15T08:02:45.683" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4980" PostTypeId="1" CreationDate="2014-11-15T17:00:08.310" Score="0" ViewCount="70" Body="&lt;p&gt;This is all hypothetical. If it was possible, it would have been done by now.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I realise that this area has been touched upon in many sci-fi movies but I wondered that if it was even feasible, how could it be achieved?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that it would raise a lot of ethical questions, I don't doubt that but I'm interested in the science.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What would a robot's brain have to be like to function like a human brain? For example, for it to have emotion (e.g. love, empathy), learn new things and remember them, make all those connections that a human brain does?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks to all who reply!&lt;/p&gt;&#xA;" OwnerUserId="7507" LastActivityDate="2014-11-17T16:45:15.967" Title="Could a robot be programmed to be human?" Tags="&lt;mobile-robot&gt;&lt;humanoid&gt;" AnswerCount="1" CommentCount="0" ClosedDate="2014-11-17T11:57:49.347" ContentLicense="CC BY-SA 3.0" />
  <row Id="4982" PostTypeId="2" ParentId="4980" CreationDate="2014-11-16T13:08:58.453" Score="1" Body="&lt;p&gt;The correct question is &quot;Will humans ever be able to know everything about themselves?&quot; In order to transfer an &lt;strong&gt;exact&lt;/strong&gt; copy of A to B you first have to have full knowledge about A especially when it comes to things as complex as the way humans live and think. If at some point in the future humans manage to unravel all the mysteries of the human body and mind, then and only then they will be able to program an machine to behave in the exact same way. Of course this is also restricted by the technologies that one has at his/her disposal. When it come to brute computation power computers already have the upper hand. However when it comes to associative thinking humans are the winners. Another question is if such a thing is necessary/desired? It has been suggested by psychologist that the more human-like a machine looks like, the more troubled people feel in its presence.&lt;/p&gt;&#xA;" OwnerUserId="7347" LastEditorUserId="7347" LastEditDate="2014-11-17T16:45:15.967" LastActivityDate="2014-11-17T16:45:15.967" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4983" PostTypeId="1" AcceptedAnswerId="5051" CreationDate="2014-11-16T16:06:20.860" Score="2" ViewCount="523" Body="&lt;p&gt;I am a newbie in this drone field. I am curious to know what type of rotation and translation a dualcopter can achieve ? By rotation and translation i mean can it be able to roll, pitch and yaw like quadcopters?&#xA;If not, in any copter what makes them to roll pitch and yaw? Furthermore are there any dualcopter design that have movable wings that will rotate the rotors itself or do up and down motion while flying?&lt;/p&gt;&#xA;" OwnerUserId="7241" LastActivityDate="2015-09-20T08:47:41.403" Title="DualCopter Degree Of Freedom" Tags="&lt;quadcopter&gt;&lt;multi-rotor&gt;" AnswerCount="3" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="4984" PostTypeId="2" ParentId="1730" CreationDate="2014-11-16T18:23:22.273" Score="1" Body="&lt;p&gt;It is very easy to conceive the direct kinematics, which has a closed form anyway. Just read this nice &lt;a href=&quot;http://www.cim.mcgill.ca/~paul/Delta9Af.pdf&quot; rel=&quot;nofollow&quot;&gt;paper&lt;/a&gt;. Don't just read crappy tutorial and wikipages, try read some papers.&lt;/p&gt;&#xA;" OwnerUserId="6918" LastActivityDate="2014-11-16T18:23:22.273" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4985" PostTypeId="2" ParentId="4542" CreationDate="2014-11-16T18:37:14.623" Score="2" Body="&lt;p&gt;The best way is of course to get yourself familiar with geometric algebra first. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Lounesto, Pertti. Clifford algebras and spinors. Vol. 286. Cambridge university press, 2001.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;After that, everything can be derived by yourself. But I guess most people here only like quick and dirty approaches. Use this book instead:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Kuipers, Jack B. Quaternions and rotation sequences. Vol. 66. Princeton: Princeton university press, 1999.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;straightly answers your question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to have more geometric sense of the algebra manipulations, John McCarthy's couldn't have done it better.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;McCarthy, J. Michael. Introduction to theoretical kinematics. MIT press, 1990.&#xA;McCarthy, J. Michael, and Gim Song Soh. Geometric design of linkages. Vol. 11. Springer, 2010.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="6918" LastActivityDate="2014-11-16T18:37:14.623" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4986" PostTypeId="1" CreationDate="2014-11-16T21:47:30.217" Score="1" ViewCount="274" Body="&lt;p&gt;given the following differential equation 2°ODE in the following form:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\ddot{z}=-g + ( cos(\phi) cos(\theta))U_{1}/m $&lt;/p&gt;&#xA;&#xA;&lt;p&gt;found in many papers (&lt;a href=&quot;http://e-collection.library.ethz.ch/eserv/eth:7848/eth-7848-01.pdf&quot; rel=&quot;nofollow&quot;&gt;example&lt;/a&gt;) and describing the dynamic model of a quadrotor (in this case I'm interested as an example only for the vertical axis $Z$) , I get the movement about $Z$ after integrating the variable $\ddot{z}$ two times. As control input I can control $U_{1}$, which represents the sum of all forces of the rotors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A Backstepping Integrator (as in many of papers already implemented) defines a tracking error for the &lt;em&gt;height&lt;/em&gt; $e_{z} = z_{desired} - z_{real}$ and for the &lt;em&gt;velocity&lt;/em&gt; $\dot{e}_{z} = \dot{z}_{desired} - \dot{z}_{real}$ to build virtual controls.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Through the virtual controls one can &lt;em&gt;find&lt;/em&gt; the needed valueof $U_{1}$ to drive the quadrotor to the desired height (see the solution later on)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But wait...as said above I need to track both: &lt;em&gt;position error&lt;/em&gt; and &lt;em&gt;velocity error&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I asked myself, how can I transform such equation and the corresponding virtual controls to track only the velocity??&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my code I need to develop an interface to another package which accepts only velocity inputs and not position information.&#xA;I should be able to drive my quadrotor to the desired position using only velocity informations, tracking the error for the z displacement it not allowed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The solution for the more general case looks like:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$U_{1}=(m/(cos(\phi)cos(\theta))*(e_{z} + \ddot{z}_{desired} + \alpha_{1}^{2}\dot{e}_{z} - \alpha_{1}^{2}e_{z} + g + \alpha_{2}\dot{e}_{z})$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;for  $\alpha_{1}, \alpha_{2} &amp;gt; 0$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I could simply put brutal the $\alpha_{1} = 0$ for not tracking the position on Z but I think that is not the correct way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe could you please point me in the right direction?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regards&lt;/p&gt;&#xA;" OwnerUserId="7097" LastActivityDate="2015-11-26T15:45:53.073" Title="Backstepping Integrator: changing the virtual control" Tags="&lt;control&gt;&lt;quadcopter&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4987" PostTypeId="1" AcceptedAnswerId="5002" CreationDate="2014-11-17T03:14:44.307" Score="0" ViewCount="286" Body="&lt;p&gt;I have a robot simulation that simulates Mars Exploration Rover with six steerable wheels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case of the following steering configuration&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;// --- //  front wheels &#xA;//     //  middle wheels &#xA;// --- //  rear wheels&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I'd say the heading of the rover with respect of the rover's body is about 45 to the right.&#xA;&lt;strong&gt;My question is what is the right approach of calculating heading with respect of the rover body?&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do I simply sum the steering angles of steering actuators and divide it by the total number of the steering actuators? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Additional Note:&lt;/strong&gt;&#xA;Assuming no slippage on a perfectly flat plane.&lt;/p&gt;&#xA;" OwnerUserId="1167" LastEditorUserId="1167" LastEditDate="2014-11-19T22:48:47.720" LastActivityDate="2014-11-23T09:32:31.450" Title="How do I determine the heading of a six wheeled robot?" Tags="&lt;wheeled-robot&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4988" PostTypeId="2" ParentId="4934" CreationDate="2014-11-17T03:34:28.860" Score="1" Body="&lt;p&gt;I disagree that implementing law 1 automatically implements the other 2.  Law 1 only states that a robot may not injure a human.  Nothing in that law implies that the robot must obey people or protect itself.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suggest you read the original iRobot series of short stories.  They do a much better job of illustrating the different ways these 3 laws can lead to counter-intuitive robot behavior due to the logic leading to a paradox or inconsistency based on the current circumstance.  What you will learn is that Asimov based his stories around these rules to create convenient and interesting plots, not to actually provide a road-map for how robots should be built.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-11-17T03:34:28.860" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4990" PostTypeId="1" AcceptedAnswerId="4993" CreationDate="2014-11-17T08:45:51.183" Score="1" ViewCount="3106" Body="&lt;p&gt;I am looking for open source implementations of an EKF for 6D pose estimation (Inertial Navigation System) using at minimum an IMU (accelerometer, gyroscope) + absolute position (or pose) sensor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This seems to be such a recurring and important problem in robotics that I am surprised I cannot find a few reference implementations. Does everyone just quickly hack together his own EKF and move on to more interesting things? Is that not rather error-prone?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would ideally like a well-tested implementation that can serve as a reference for fair evaluation of possible improvements. &lt;/p&gt;&#xA;" OwnerUserId="4531" LastEditorUserId="6973" LastEditDate="2014-11-17T11:56:52.460" LastActivityDate="2014-11-20T13:54:48.463" Title="Open source implementations of EKF for 6D pose esimation" Tags="&lt;kalman-filter&gt;&lt;ekf&gt;&lt;pose&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4991" PostTypeId="1" CreationDate="2014-11-17T18:09:16.567" Score="0" ViewCount="43" Body="&lt;p&gt;With the lego NXT Mindstorm kit I would like to have a rotating carousel that has &quot;perfect&quot; movement. This carousel has baskets and therefore it has quite a bit of inertia. I would like to find a method to calculate the perfect time to slow it down--taking into account motor friction, and momentum etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is some data I've collected:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/3TvpX.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The motor power is the power to the motor. The break time was the time it took to stop from the time that the motor power was set to 0. The over-turn dist was amount of rotation in degrees that the motor continued to rotate after the power was set to 0.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a specific method or approach to optimize the motors movement so movement can be precisely rotated to &lt;strong&gt;X&lt;/strong&gt; degrees?&lt;/p&gt;&#xA;" OwnerUserId="7441" LastActivityDate="2014-11-17T18:23:58.610" Title="Seamless motor movement" Tags="&lt;motor&gt;&lt;motion&gt;&lt;motion-planning&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4992" PostTypeId="2" ParentId="4991" CreationDate="2014-11-17T18:23:58.610" Score="1" Body="&lt;p&gt;Do you have any feedback from the motor (it's speed or position)? In this case you should consider using a closed loop control here like &lt;a href=&quot;http://en.wikipedia.org/wiki/PID_controller&quot; rel=&quot;nofollow&quot;&gt;PID&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2014-11-17T18:23:58.610" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="4993" PostTypeId="2" ParentId="4990" CreationDate="2014-11-17T21:57:39.123" Score="2" Body="&lt;p&gt;I believe this should tick all your boxes:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://wiki.ros.org/robot_localization&quot; rel=&quot;nofollow&quot;&gt;http://wiki.ros.org/robot_localization&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's a ROS node for 6D pose estimation that has the following features:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Fusion of an arbitrary number of sensors. The nodes do not restrict the number of input sources. If, for example, your robot has multiple IMUs or multiple sources of odometry information, the state estimation nodes within robot_localization can support all of them.&lt;/li&gt;&#xA;&lt;li&gt;Support for multiple ROS message types. All state estimation nodes in robot_localization can take in nav_msgs/Odometry, sensor_msgs/Imu, geometry_msgs/PoseWithCovarianceStamped, or geometry_msgs/TwistWithCovarianceStamped messages.&lt;/li&gt;&#xA;&lt;li&gt;Per-sensor input customization. If a given sensor message contains data that you don't want to include in your state estimate, the state estimation nodes in robot_localization allow you to exclude that data on a per-sensor basis.&lt;/li&gt;&#xA;&lt;li&gt;Continuous estimation. Each state estimation node in robot_localization begins estimating the vehicle's state as soon as it receives a single measurement. If there is a holiday in the sensor data (i.e., a long period in which no data is received), the filter will continue to estimate the robot's state via an internal motion model.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;It has both an EKF implementation (ekf_localization_node) and a UKF (ukf_localization_node). Feel free to ask questions on the &lt;a href=&quot;http://answers.ros.org/questions/&quot; rel=&quot;nofollow&quot;&gt;ROS Answers&lt;/a&gt; site.&lt;/p&gt;&#xA;" OwnerUserId="2176" LastEditorUserId="2176" LastEditDate="2014-11-20T13:54:48.463" LastActivityDate="2014-11-20T13:54:48.463" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="4994" PostTypeId="1" CreationDate="2014-11-17T22:03:26.900" Score="0" ViewCount="1474" Body="&lt;p&gt;My lab is interested in a good all-terrain UGV that can also be used indoors. We are particularly interested in the Clearpath Husky, Clearpath Jackal, and the Robotnik Summit XL (or XL HL), though we would welcome any other suggestions. Does anyone happen to have experience with more than one of these, and can speak to their pros and cons?&lt;/p&gt;&#xA;" OwnerUserId="2176" LastActivityDate="2020-09-07T12:46:52.600" Title="Best UGV platform?" Tags="&lt;ugv&gt;&lt;platform&gt;" AnswerCount="2" CommentCount="2" ClosedDate="2017-01-19T08:56:17.563" ContentLicense="CC BY-SA 3.0" />
  <row Id="4995" PostTypeId="2" ParentId="4379" CreationDate="2014-11-18T00:47:43.933" Score="1" Body="&lt;p&gt;Yes, torque control of a motor with an AVR microcontroller is possible.  In fact, torque control of a joint is common practice in robotics.  This is a good example of a &lt;a href=&quot;http://en.wikipedia.org/wiki/Feedback&quot; rel=&quot;nofollow&quot;&gt;feedback loop&lt;/a&gt;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are many ways to measure the torque of a motor.  An expensive way is to use an off-the-shelf strain gauge based force/torque sensor on the output.  A cheaper way is to just us a rotary spring and measure the angle before and after the spring.  If you have a brushed or brushless motor that you are controlling yourself, the motor's torque is proportional to the current draw.  there are ways to measure this electronically as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for control, you will probably use some variant of &lt;a href=&quot;http://en.wikipedia.org/wiki/PID_controller&quot; rel=&quot;nofollow&quot;&gt;PID control&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-11-18T00:47:43.933" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4996" PostTypeId="1" CreationDate="2014-11-18T05:20:06.873" Score="0" ViewCount="304" Body="&lt;p&gt;I am looking into building a nano quadcopter, But as i watch more resources and videos i get more confused, regarding some of the things that i hope would be answered here. I am in very basic level of expertise here, i haven't built any robots or quadcopters to be exact.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What i want to know is, when i program a quadcopter say using intel edison chip, how do i power the quadcpter? i could not find that small size battery to move the propellers and start the chip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further more what is the procedure i should follow while developing a nano or small quadcopter, i saw a link on instructable that uses python on raspberry pi and then that raspberry pi control the arduino to control the robot. Can it be done only by using raspberry pi itself? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am getting confused and i would like to know if i have to make small or nano quadcopter what should i be doing to get started?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most of the latest chip support linux and high level programming language like python, so i hope i can go about programming the entire quadcopter using python or similar high level language and i don't suppose i have to stick with c langauge now. If i am wrong please help me understand the matter, there is high chance that i could be wrong.&lt;/p&gt;&#xA;" OwnerUserId="7241" LastActivityDate="2015-10-14T12:19:17.337" Title="Nano Quadcopters Microcontroller and battery" Tags="&lt;arduino&gt;&lt;quadcopter&gt;&lt;raspberry-pi&gt;&lt;python&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="4997" PostTypeId="2" ParentId="4994" CreationDate="2014-11-18T06:47:26.773" Score="1" Body="&lt;p&gt;TL;DR: the Clearpth Husky is a solid machine that &lt;strong&gt;will&lt;/strong&gt; pull it's weight, but expect to get a few laughs from their complete lack of quality control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can speak to the Clearpath Husky since my lab has two of them and I've worked with them quite a bit. It's a solid vehicle, great for mounting sensors on, works well indoors and outdoors. On the software side, it comes pre-installed with ROS, and has out-of-the-box for all the sensors it ships with (unless they mounted the IMU sideways...). That said I have had really bad experiences with Clearpath (and have heard similar stories from other labs). Their robots are clearly made to look good in a photograph, but on closer inspection, especially when you pop open the panels, it tells a different story. The battery only lasts about 1 hour when new and degrades to 20 mins within a year; there are stress fractures around the sheet metal bends, covered up by paint; when we opened the panels we found structural bolts with no nuts on them, they were just sitting loose in the hole; and the wiring / soldering job looked like it was done by a complete amature (I mentor FIRST Robotics and I would not have accepted that from even my grade 10's) This was especially bad on their Kingfisher USV boat which we bought this summer (which incidentally was delivered 3 months late) where the layout of the electronics was so bad that we had to mash in a GPIO header in order to get the door back on.&lt;/p&gt;&#xA;" OwnerUserId="7043" LastActivityDate="2014-11-18T06:47:26.773" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="4998" PostTypeId="1" CreationDate="2014-11-18T14:52:26.523" Score="2" ViewCount="170" Body="&lt;p&gt;What's an appropriate tool for simulating a car driving in a simple closed-loop racetrack? I'm trying to implement the control logic for an autonomous vehicle, and I'd like to be able to first simulate the behaviour before testing on a physical platform. The target environment is mostly 2D, but there are some 3D obstacle like small ramps and arches, so I can't use a strictly 2D simulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've looked at some robotics simulators, as listed &lt;a href=&quot;https://stackoverflow.com/questions/2533321/robotics-simulator&quot;&gt;here&lt;/a&gt;, but they seem like overkill and none of them seemed designed to model outdoor environments. I've done a little work with Gazebo, and I can't find any guide of texturing the ground/sky/background.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All I really need is some way apply a texture map to the ground and sky, create a handful of obstacles, and then to calculate a camera feed as a simple two-wheeled chassis moves along a mostly 2D course. However, I need the video input to be as realistic as possible because I don't have access to the real world racetrack. I need to be able to test and train the control logic in the simulator, and then load that logic onto the real mobile platform and have it navigate the course.&lt;/p&gt;&#xA;" OwnerUserId="740" LastEditorUserId="-1" LastEditDate="2017-05-23T12:37:11.430" LastActivityDate="2014-12-19T15:06:28.503" Title="Good 3D simulator for outdoor autonomous navigation" Tags="&lt;navigation&gt;&lt;simulator&gt;&lt;cameras&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="4999" PostTypeId="2" ParentId="2936" CreationDate="2014-11-18T15:17:49.880" Score="1" Body="&lt;p&gt;Distributed cooperative coverage algorithms for robots sounds like an area of active research.  I suggest looking at some academic papers.  Here are a few to get you started:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://cdn.intechopen.com/pdfs-wm/12637.pdf&quot; rel=&quot;nofollow&quot;&gt;Multirobot Cooperative Model applied to Coverage of Unknown Regions&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.ri.cmu.edu/pub_files/pub2/butler_zack_2000_2/butler_zack_2000_2.pdf&quot; rel=&quot;nofollow&quot;&gt;Cooperative Coverage of Rectilinear Environments&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-11-18T15:17:49.880" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5000" PostTypeId="2" ParentId="4934" CreationDate="2014-11-18T17:05:34.990" Score="0" Body="&lt;p&gt;Sorry, but this is not an answer. I couldn't fit my response to 'Ben' in the comments.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am only asking about perfect logic, as even near-perfect logic could lead to a contradiction. Here's my proof of law 1 implementing law 2 and 3:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the system is almost convinced that it knows better about your good than yourself, it will use law 1 to do so. If it is not sure, it will ask you before proceeding (if any negative risk is involved). If it has no decision to take, it will remain inactive but thinking, until you give it an order. In most cases, it wouldn't know better than you and will obey, otherwise it will use the 1st law to refuse to do so.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As law 2 is already implemented by law 1, law 3 also follows from law 1:&#xA;As it knows it is more beneficial to you when it is in existence than when it is not, it will protect itself for your good only, again according to law 1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am assuming that 'harm' in law 1 refers to mental harm also, only then preventing harm becomes synonymous to doing good (as even a slight discomfort or annoyance would get interpreted as 'harm').&lt;/p&gt;&#xA;" OwnerUserId="7437" LastActivityDate="2014-11-18T17:05:34.990" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5001" PostTypeId="1" CreationDate="2014-11-18T17:25:29.953" Score="0" ViewCount="141" Body="&lt;p&gt;When I look at my toy gyroscope (I have never seen the inside of a motorized gyroscope), the central flywheel is suspended within the various gymbals and needs a lot of freedom of movement.  It's hard to see how an electric motor in the flywheel hub could be supplied with power.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How do &quot;real&quot; gyroscopes maintain angular velocity in their flywheel?&lt;/p&gt;&#xA;" OwnerUserId="7522" LastActivityDate="2014-11-18T19:36:07.920" Title="How does power get to the flywheel in a motorized gyroscope?" Tags="&lt;gyroscope&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5002" PostTypeId="2" ParentId="4987" CreationDate="2014-11-18T18:33:37.003" Score="2" Body="&lt;p&gt;A vehicle like this that can move in any direction regardless of orientation is called &quot;holonomic&quot;.  This decoupling is a little counter-intuitive because we are used to cars, which always move in the direction they are pointing (kinda, see: &lt;a href=&quot;http://en.wikipedia.org/wiki/Ackermann_steering_geometry&quot; rel=&quot;nofollow&quot;&gt;ackerman steering&lt;/a&gt;).  But aircraft and boats deal with this all the time.  The terminology they use is: &lt;strong&gt;heading&lt;/strong&gt; is the direction the craft's nose is pointing, and &lt;strong&gt;course&lt;/strong&gt; is the direction of travel.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So in your example, I'd say the robot's heading is North (or 0 degrees), and it's course is 45 degrees to the right.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course this is assuming there is no wheel slippage.  In which case i don't think there is a formal method because wheel slippage is something people try to avoid.  And since wheel slippage is un-sensed, you need to determine your course with external sensors.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-11-18T18:33:37.003" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5003" PostTypeId="2" ParentId="5001" CreationDate="2014-11-18T19:36:07.920" Score="1" Body="&lt;p&gt;Well, since there is no information about the specific gyro, you are talking about, one can think of providing power through some kind of &lt;a href=&quot;http://en.wikipedia.org/wiki/Slip_ring&quot; rel=&quot;nofollow&quot;&gt;slip rings&lt;/a&gt; or simpier &lt;a href=&quot;http://en.wikipedia.org/wiki/Brush_(electric)&quot; rel=&quot;nofollow&quot;&gt;brush&lt;/a&gt; contacts.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2014-11-18T19:36:07.920" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5004" PostTypeId="2" ParentId="4255" CreationDate="2014-11-18T20:41:21.513" Score="0" Body="&lt;p&gt;This project looks promising &lt;a href=&quot;http://gazebosim.org/&quot; rel=&quot;nofollow&quot;&gt;http://gazebosim.org/&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="2663" LastActivityDate="2014-11-18T20:41:21.513" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5005" PostTypeId="2" ParentId="4721" CreationDate="2014-11-19T01:05:56.720" Score="2" Body="&lt;p&gt;I would recommend to double check the algorithm and make sure that is able to output negative values. You should post your pid code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The approach you are using is a simple and quite effective control strategy in which the knowledge of the model is not required to get the job done. By 'knowledge of the model' I mean the system of equations that describes the dynamics of your quadcopter in space. You just need the reference value, the filtered measurement (the estimated angle) and three coefficients. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your project you want your &lt;strong&gt;roll and yaw angle&lt;/strong&gt; &lt;strong&gt;to be 0&lt;/strong&gt;, at least in hovering mode right. Let's consider as a measured variable y(t), the roll angle theta(t) at time t (the pitch angle phi will be another one). So y(t) = theta(t).&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;First of all, &lt;strong&gt;make sure that your estimated angles are accurate&lt;/strong&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Then define the control error as the difference between the desired position, y_des = 0, and the actual measurement at time t, y(t). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;e(t) = y_des - y(t)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to understand the effect of each coefficient, (Kp,Kd and Ki) we need to look at the control formula. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/ereLM.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The control input u(t) is the sum of three different terms:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The proportional term is described by the &lt;strong&gt;Kp gain&lt;/strong&gt; which tells the control how &lt;strong&gt;intense should the response be compared to the error&lt;/strong&gt;. What does it mean? If at time t, the quad is 3 degree away from your setpoint (e(t)=3) then apply a torque Kp times that value to get it back the correct position. If the value is to high you will pass your set point and you will notice oscillations around the 0 value. The steady state error will decrease with increasing gain, but the tendency towards oscillation will also increase. You can't get good results only with this term.  &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The derivative term is characterized by the &lt;strong&gt;Kd gain&lt;/strong&gt;. In the formula, this coefficient is multiplied by the derivative of the error. In other words, this gain tells the controller how fast should it react to &lt;strong&gt;changes in error's values&lt;/strong&gt;. If you are going away from your set point,  the error's derivative will be different than zero and positive (or negative) so apply a torque proportionally to this value. The derivative action will not help if the sample time is too large.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The integral term is described by the &lt;strong&gt;Ki gain&lt;/strong&gt;. This coefficient &lt;strong&gt;weights the contribution of how long does the quadcopter remains in a state of error&lt;/strong&gt;. If you are testing the control only on one axis and you are using a too low Proportional gain, Kp, you will notice that the quad won't be able to reach the 0 degree reference value and will be &quot;stuck&quot; at a certain angle. Adding Ki != 0 will help by providing an extra torque value after an interval of time. The Ki gain will determine this extra torque value.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Here is example using arduino. &lt;strong&gt;(This is a basic code and what's above is pub version of the explanation)&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  // Roll PID&#xA;  errorRoll = abs(SetpointRoll - estimatedKalmanRoll); //distance away from setpoint&#xA;  if(errorRoll&amp;lt;thresholdRoll)&#xA;  {  &#xA;    //we're close to setpoint, use conservative tuning parameters&#xA;    myRollPID.SetTunings(consKpRoll, consKiRoll, consKdRoll);&#xA;  }&#xA;  else&#xA;  {&#xA;     //we're far from setpoint, use other parameters&#xA;     myRollPID.SetTunings(aggKpRoll, aggKiRoll, aggKdRoll);&#xA;  }&#xA;&#xA;  myRollPID.Compute(); // This computes rollpid   &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Same thing for pitch, yaw and altitude&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  // computes motor IN based on roll, pitch, yaw Pid OUT and throttle value&#xA;  motorA = thr + rollpid - yawpid;&#xA;  motorB = thr + pitchpid + yawpid;&#xA;  motorC = thr - rollpid - yawpid;&#xA;  motorD = thr - pitchpid + yawpid&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Check &lt;a href=&quot;https://robotics.stackexchange.com/questions/2964/quadcopter-pid-output?rq=1&quot;&gt;this&lt;/a&gt; answer as well. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this helps,&#xA;Ciao.&lt;/p&gt;&#xA;" OwnerUserId="6970" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2014-11-21T09:29:39.127" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5007" PostTypeId="2" ParentId="4994" CreationDate="2014-11-19T03:31:13.583" Score="1" Body="&lt;p&gt;You might also try the CoroBot by CoroWare.  It can be used outdoors, but is much smaller than the Husky.&lt;/p&gt;&#xA;&lt;p&gt;Edit: Unfortunately, CoroWare seems to be out of business now.&lt;/p&gt;&#xA;" OwnerUserId="110" LastEditorUserId="110" LastEditDate="2020-09-07T12:46:52.600" LastActivityDate="2020-09-07T12:46:52.600" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="5009" PostTypeId="2" ParentId="4699" CreationDate="2014-11-19T10:44:01.287" Score="0" Body="&lt;p&gt;Have a look at the &lt;a href=&quot;http://wiki.ros.org/kobuki/Tutorials/Testing%20Automatic%20Docking#How_it_works&quot; rel=&quot;nofollow noreferrer&quot;&gt;second part&lt;/a&gt; of the page, &lt;a href=&quot;http://wiki.ros.org/kobuki/Tutorials/Testing%20Automatic%20Docking&quot; rel=&quot;nofollow noreferrer&quot;&gt;Testing Automatic Docking&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here they explain how it works with Kobuki turtlebots.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Kobuki's docking station has 3 IR (Infrared) emitters. The emitted IR&#xA;  lights cover three regions in front of the docking station: left,&#xA;  central and right, each divided in two sub-fields: near and far. Each&#xA;  beam encodes this information, so the robot knows at any moment in&#xA;  which region and sub-field he is. Also, as regions and fields are&#xA;  independently identified, they can be overlap on its borders.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/26rMn.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/26rMn.png&quot; alt=&quot;IR emitters&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Kobuki has 3 IR receivers. When the robot is placed within the field&#xA;  of the docking station, and at least one IR receiver is facing toward&#xA;  it, the robot will catch the signal and stream it to the controller&#xA;  netbook. The information is available on&#xA;  &lt;code&gt;/mobile_base/sensors/dock_ir&lt;/code&gt; topic, in the form of&#xA;  &lt;code&gt;kobuki_msgs/DockInfraRed&lt;/code&gt; messages.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/AM8Cu.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/AM8Cu.png&quot; alt=&quot;IR receivers&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2187" LastEditorUserId="9176" LastEditDate="2015-08-21T14:28:34.930" LastActivityDate="2015-08-21T14:28:34.930" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5010" PostTypeId="2" ParentId="4998" CreationDate="2014-11-19T14:16:45.637" Score="1" Body="&lt;p&gt;This sounds similar to work my colleague did on high-speed vehicle control.  He used &lt;a href=&quot;http://torcs.sourceforge.net/&quot; rel=&quot;nofollow&quot;&gt;TORCS&lt;/a&gt; (The Open Race Car Simulator).  See &lt;a href=&quot;http://www.irobot.com/dynamo/simulated-high-speed-vehicle-control.php&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt; project page for a video, screenshots, and the published paper of his work.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-11-19T14:16:45.637" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5011" PostTypeId="1" CreationDate="2014-11-19T16:36:53.333" Score="2" ViewCount="559" Body="&lt;p&gt;How can I write a linear state space model for a 4 wheel mobile robot with Ackerman steering in terms of error. I want the robot to follow a line. The robot is rear wheel drive &lt;/p&gt;&#xA;" OwnerUserId="7532" LastActivityDate="2015-02-17T20:03:35.763" Title="Linear State space model for mobile robot" Tags="&lt;mobile-robot&gt;&lt;line-following&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5012" PostTypeId="2" ParentId="5011" CreationDate="2014-11-19T18:24:00.697" Score="3" Body="&lt;p&gt;Read and understand &lt;a href=&quot;http://planning.cs.uiuc.edu/node658.html&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt;. Refer to other sections of that site, if needed.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2014-11-19T18:24:00.697" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5013" PostTypeId="2" ParentId="5011" CreationDate="2014-11-19T18:26:18.307" Score="3" Body="&lt;p&gt;I know this is not exactly what you wanted, but you should look into the &lt;a href=&quot;http://www.ri.cmu.edu/pub_files/pub3/coulter_r_craig_1992_1/coulter_r_craig_1992_1.pdf&quot; rel=&quot;nofollow&quot;&gt;Pure Pursuit&lt;/a&gt; algorithm for line following.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-11-19T18:26:18.307" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5014" PostTypeId="1" AcceptedAnswerId="5019" CreationDate="2014-11-19T19:12:06.347" Score="1" ViewCount="395" Body="&lt;p&gt;My friend and I are building the upper body of a humanoid robot for our M.Sc thesis project. There are 24 DC motors in this robot. The thing I want to know is &lt;strong&gt;what is the best way to command these motors simultaneously?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The design I had in mind is for each motor to have its own micro for position and velocity control and then one master micro to command and control the slave micros. &lt;strong&gt;If this is the best way to go how does the master micro command slave ones simultaneously?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another question I have is what is the best micro for the robot to go with between ARM and PIC? I want the master micro to receive its command from a PC. Any help would be appreciated.&lt;/p&gt;&#xA;" OwnerUserId="7533" LastEditorUserId="158" LastEditDate="2015-02-07T12:43:48.897" LastActivityDate="2015-02-07T12:43:48.897" Title="control circuit of a humanoid robot (something like iCub or Asimo)" Tags="&lt;control&gt;&lt;microcontroller&gt;&lt;communication&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5015" PostTypeId="2" ParentId="3026" CreationDate="2014-11-19T20:22:20.070" Score="2" Body="&lt;p&gt;You might want to start by checking out &lt;a href=&quot;http://www.cs.utexas.edu/~aim/&quot; rel=&quot;nofollow&quot;&gt;AIM - Autonomous Intersection Management&lt;/a&gt; by the University of Texas at Austin.  It is a simple 2D simulator, but sounds like it has the features you need.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, you might want to search for civil engineering traffic simulators.  I'm sure there are a bunch of them.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;One more option, you can use something like &lt;a href=&quot;http://cs.gmu.edu/~eclab/projects/mason/&quot; rel=&quot;nofollow&quot;&gt;MASON&lt;/a&gt; a multi-agent simulation toolkit to code your own simulator with multiple intelligent agents.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-11-19T20:22:20.070" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5016" PostTypeId="1" AcceptedAnswerId="5024" CreationDate="2014-11-19T21:53:17.480" Score="1" ViewCount="119" Body="&lt;p&gt;I am looking to buy a laser distance meter and to connect it to a motor and a 3g cellular to control both the motor and to mesure the distance. I will appriciate your advice on how to do so. thanks&lt;/p&gt;&#xA;" OwnerUserId="7534" LastActivityDate="2014-11-21T14:36:34.277" Title="remote control laser meter" Tags="&lt;laser&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2014-11-25T17:50:54.530" ContentLicense="CC BY-SA 3.0" />
  <row Id="5017" PostTypeId="2" ParentId="4983" CreationDate="2014-11-20T05:30:23.853" Score="3" Body="&lt;p&gt;A quick google search yields this video of an RC dual copter that looks like it is able to control its pitch, roll and yaw: &#xA;&lt;a href=&quot;https://www.youtube.com/watch?v=_cwCHgmDbz0&quot; rel=&quot;nofollow&quot;&gt;https://www.youtube.com/watch?v=_cwCHgmDbz0&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Skip to 5:50 for the part where he actually flies it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for quadcopters, there is a well known video circulating on the internet of a presentation given at a TED conference by Raffaello d'Andrea of ETH Zurich about quadcopters in which he clips opposing rotors of a quadcopter and demonstrates that he is still able to control the height of the quadcopter using a specialized control algorithm. The video can be found here. &lt;a href=&quot;https://www.youtube.com/watch?v=w2itwFJCgFQ&quot; rel=&quot;nofollow&quot;&gt;https://www.youtube.com/watch?v=w2itwFJCgFQ&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In it, he mentions that &quot;we relinquish control of yaw (z axis rotation), but roll, pitch and acceleration can still be controlled with algorithms that exploit this new configuration.&quot; I'm not sure if you're looking into a control algorithm like this because the craft continuously rotates during flight.&lt;/p&gt;&#xA;" OwnerUserId="7537" LastActivityDate="2014-11-20T05:30:23.853" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5018" PostTypeId="2" ParentId="4987" CreationDate="2014-11-20T08:26:10.423" Score="3" Body="&lt;p&gt;Where your robot will go will depend on where the axes of the wheels intersect.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If all the axes are identical, it can turn around any point on the axes, or go straight, perpendicular to the axes.&lt;/li&gt;&#xA;&lt;li&gt;If all the axes intersect in one point, the robot will travel on a circle around that point.&lt;/li&gt;&#xA;&lt;li&gt;If the axes are parallel, it will go only straight, perpendicular to the axes. &lt;/li&gt;&#xA;&lt;li&gt;If the axes intersect in multiple points it can't go anywhere without sliping.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="482" LastActivityDate="2014-11-20T08:26:10.423" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5019" PostTypeId="2" ParentId="5014" CreationDate="2014-11-20T10:27:04.107" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;what is the best way to command these motors simultaneously?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Like all engineering questions, the answer is &lt;strong&gt;it depends&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, for some general things to keep in mind read &lt;a href=&quot;https://robotics.stackexchange.com/q/3110/158&quot;&gt;this answer&lt;/a&gt; even though it's about ROS, but some of the same principles apply.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In short, one particular factor deciding between one-micro-handles-all and dividing motors among slave micros is how powerful each micro is. If one micro &lt;em&gt;could&lt;/em&gt; handle all, it's kind of overkill to use many micros. On the other hand, distributing the control means you could use cheaper micros and probably be more energy efficient. You may also save on wiring, depending on where the motors are located. Note that the slave micros don't necessarily have to control &lt;em&gt;one&lt;/em&gt; motor, but they could control a couple of related motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you go with master-slave architecture, first you need to understand what motors are meaningless without the other. I.e. what motors need to be perfectly coordinated. The motors driving the fingers come to mind.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, it would make sense to have one micro driving the finger motors, and one micro for each other joint. That means a failure in one micro disables a joint or the whole hand. In the former case, redundancy in the arm compensates for the lost degree of freedom and in the later case, well if you have two fingers and one of them is not working or both are not working, then there's really no difference. If you have more fingers, then of course you need to assess the possibilities and decide between more micros or better coordination.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The master micro is of course connected to the slaves through bus(es); SPI, I2C or otherwise. The master would have to query the slaves periodically for information (such as the current state of the motors), do the control calculations and send instructions to the slaves to drive the motors. What needs to be transferred and the frequency really really depends on the type of the motor, the maximum speed of your robot, the internal safety features of the robot and various other things.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That is probably what you would want with a lower level control. On the PC, what you would probably want is a more higher level control. So you tell the robot arm to go to some &lt;code&gt;(Position, Orientation)&lt;/code&gt; and the master micro would take care of the details of how much and how fast each motor exactly has to move at every period.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If this is the best way to go how does the master micro command slave ones simultaneously&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Of course, you cannot achieve perfect simultaneous-ness. However, with a &lt;em&gt;fast-enough&lt;/em&gt; bus, the master micro may be able to tell all the slaves what to do with a delay that is acceptable. If you have multiple buses, by driving the buses inside interrupt service routines, you could send commands on different buses in parallel which further reduces the delay.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, don't fret it so much. You would likely have to make your robot slow because you cannot guarantee you can stop in time in a dangerous situation. There are actually two main reasons for this.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;You most likely don't have enough information from the robot to decide safe vs unsafe situation. If you cover your robot with robot skin and be able to process all the data on the slave or master micros, you may be able to gather enough information, but chances are that you probably don't do this.&lt;/li&gt;&#xA;&lt;li&gt;Your PC connection and processes are probably not real-time and depend on other non-real-time sensors and processes (such as cameras and image processing). That means that you don't have any guarantee that you can in fact respond in a timely manner.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Since you have to make your robot slow (to minimize the damage in case of collision, both to the robot and to nearby humans), then your control loop likely has a much larger period than your bus communications have. Therefore, in comparison, the delay between controlling different motors (through different slaves) is likely to be negligible.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Another question I have is what is the best micro for the robot to go with between arm and pic?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I have to say that this is a bad question. Each of ARM and PIC have a wide variety of microcontrollers with a varying features and powers. That question is like asking &quot;should I buy a Mazda or a Honda?&quot; You really need to look for what features you want and how much you want to pay for it. You need to take into account what compilers you would have access to and what libraries are available. You need to look for what speed the micro can have, whether it has an FPU, whether it has interrupts on events you are interested in, whether it has enough pins to drive all you need to drive, whether it can support as many buses as you would like etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the answer is to look at as many datasheets as you can and see for yourself what matches your ideals best.&lt;/p&gt;&#xA;" OwnerUserId="158" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2014-11-20T10:27:04.107" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5020" PostTypeId="1" CreationDate="2014-11-20T14:16:13.280" Score="-3" ViewCount="169" Body="&lt;p&gt;Please give me guidance how should I proceed to know about SLAM algorithm? I am following some youtube videos but those are not so much helpful for me..... &lt;/p&gt;&#xA;" OwnerUserId="7540" LastActivityDate="2014-11-21T06:02:36.920" Title="I am new in robotics....I want to know about SLAM algorithm....How should I proceed?" Tags="&lt;computer-vision&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2014-11-25T17:50:26.527" ContentLicense="CC BY-SA 3.0" />
  <row Id="5022" PostTypeId="2" ParentId="5020" CreationDate="2014-11-21T06:02:36.920" Score="2" Body="&lt;p&gt;You should approach it as you would any subject in which you'd like to learn more.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Start by clarifying for yourself:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;why do you want to know more about SLAM algorithms&lt;/li&gt;&#xA;&lt;li&gt;how much time do you want to put into the subject&lt;/li&gt;&#xA;&lt;li&gt;how do you learn best -- listening to a speaker, reading a text, writing some code and observing how it works, having a discussion with others&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Based on your objectives then it is possible to come up with a learning plan to progress through the subject.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Understand the basics, read the wikipedia article, look at a presentation... SLAM stands for Simultaneous Localization and Mapping.  Understand what localization and mapping are independently, then why you'd want to do that simultaneously and why it is difficult.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;read &quot;simultaneous localization and mapping&quot; on wikipedia&lt;/li&gt;&#xA;&lt;li&gt;google &quot;introduction to robotics slam&quot; and follow some links, such as the pdf from ai robotics school&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Build up the pre-requisite knowledge if you don't have it.  If you were confused watching some youtube videos such as this Intro Course maybe you need to back up and watch the first 12 lectures first.&#xA;&lt;a href=&quot;https://www.youtube.com/watch?v=xoULHsN3bjQ&quot; rel=&quot;nofollow&quot;&gt;https://www.youtube.com/watch?v=xoULHsN3bjQ&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you feel like you already have all the basics, then I guess trying to apply it in practice would be a good way to learn more about the different algorithms.  You can probably shortcut a bit by using existing robot platforms like LEGO Mindstorms or a TurtleBot running ROS or whatever you have available to you.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;google &quot;slam lego&quot;&lt;/li&gt;&#xA;&lt;li&gt;google &quot;slam ros&quot; or &quot;intro to navigation ros&quot; and read more about gmapping&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;When you get stuck, back up and dig into part of the subject in more depth and repeat.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Good luck.&lt;/p&gt;&#xA;" OwnerUserId="6819" LastActivityDate="2014-11-21T06:02:36.920" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5023" PostTypeId="1" CreationDate="2014-11-21T09:46:39.427" Score="0" ViewCount="370" Body="&lt;p&gt;We estimate position of robot in localization and SLAM. My intuition says we get better position estimation in localisation than in SLAM because we have better sensor model likelihoods in localization because of given complete environment than in SLAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to know the difference in accuracy of estimated position in localization and SLAM.&lt;/p&gt;&#xA;" OwnerUserId="714" LastEditorUserId="350" LastEditDate="2014-12-01T20:26:55.210" LastActivityDate="2014-12-02T19:07:10.193" Title="Is the accuracy of estimated position in localization better than estimated position in SLAM?" Tags="&lt;localization&gt;&lt;slam&gt;&lt;particle-filter&gt;" AnswerCount="3" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="5024" PostTypeId="2" ParentId="5016" CreationDate="2014-11-21T14:36:34.277" Score="1" Body="&lt;p&gt;It sounds like all you need is a single beam distance measurement.  There are lots of devices like the &lt;a href=&quot;http://www.boschtools.com/products/tools/Pages/BoschProductDetail.aspx?pid=DLR130K&quot; rel=&quot;nofollow&quot;&gt;Bosch laser distance meter&lt;/a&gt;.  But i don't think they have the range you want, and also probably no computer interface.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;SICK makes a 2D laser scanner that used to be standard in robotics.  (You can see many of these mounted atop the DARPA Grand Challenge cars for example).  I think the standard used to be the LMS200 series, but it looks that has been replaced by the &lt;a href=&quot;https://www.mysick.com/eCat.aspx?go=FinderSearch&amp;amp;Cat=Row&amp;amp;At=Fa&amp;amp;Cult=English&amp;amp;FamilyID=344&amp;amp;Category=Produktfinder&amp;amp;Selections=50696,34243&quot; rel=&quot;nofollow&quot;&gt;LMS500 series&lt;/a&gt;.  These work outdoors, have ranges up to 80 meters, and are easily interfaced with a computer.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-11-21T14:36:34.277" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5025" PostTypeId="2" ParentId="4575" CreationDate="2014-11-21T16:29:38.603" Score="2" Body="&lt;p&gt;I am not familiar with an infinite-horizon formulation for time-varying LQR, but I can supply an answer for a finite-horizon formulation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a finite-horizon formulation the Ricccati equation for a time-varying LQR problem (i.e. the equilibrium point $x_d$ changes with time) is called the &quot;Differential Riccati Equation&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Derivation:&lt;/strong&gt; Lets assume you want to implement a LQR controller that stabilizes the system: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\dot{x} = f(x,u)$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;around some trajectory $\left(x_d(t),u_d(t)\right)$. If you linearize the system around this trajectory you get:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;\begin{align}\dot{\bar{x}} &amp;amp;= A(t)\bar{x}(t)+B(t)\bar{u}(t)-\dot{x}_d \\ &amp;amp;\approx A(t)\bar{x}(t)+B(t)\bar{u}(t)\end{align}&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $$\bar{x}(t) = x(t)-x_d(t)$$ $$\bar{u}(t) = u(t)-u_d(t)$$&#xA;and&#xA;$$A(t) = \frac{\partial f}{\partial x}|_{(x,u)=(x_d,u_d)}$$ $$B(t) = \frac{\partial f}{\partial u}|_{(x,u)=(x_d,u_d)}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The approximation made in the equation for $\dot{\bar{x}}$ introduces an error into your control law, but yields a tractable problem. The magnitude of the error will depend on the problem, but this approach works in many applications (see reference at end for an example).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now we want to solve the LQR problem for a finite-horizon cost function given by:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\int_{0}^T \left( \bar{x}^T Q \bar{x} + \bar{u}^T R \bar{u} \right) dt,~~~\text{where}~~Q=Q^T\geq 0,~\text{and} ~R=R^T&amp;gt;0$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We chose a quadratic cost-to-go function of the form:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ J(\bar{x},t) = \bar{x}(t)^TS(t)\bar{x}(t),~~~\text{where}~~S(t)=S(t)^T&amp;gt;0$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;such that the Hamilton-Jacobi-Bellman condition for the optimality of our chosen $J(\bar{x},t)$ becomes:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$0 = \min_{\bar{u}}\left[ \bar{x}^T Q \bar{x} + \bar{u}^T R \bar{u} + \frac{\partial J}{\partial \bar{x}}\left(A(t)\bar{x}(t)+B(t)\bar{u}(t)\right) + \frac{\partial J}{\partial t} \right] $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The control law that minimizes this expression is found by solving for $\bar{u}$ in &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$0 = \frac{\partial}{\partial \bar{u}}\left[ \bar{x}^T Q \bar{x} + \bar{u}^T R \bar{u} + \frac{\partial J}{\partial \bar{x}}\left(A(t)\bar{x}(t)+B(t)\bar{u}(t)\right) + \frac{\partial J}{\partial t} \right]$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hence, the $\bar{u}$ that minimizes the cost-to-go $J(\bar{x},t)$ is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\bar u(t) = -R^{-1}B^T(t)S(t)\bar{x}(t)$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If we insert this expression for $\bar{u}$ into the Hamilton-Jacobi-Bellman condition, we get:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$0 = Q-S(t)B(t)R^{-1}(t)B^T(t)S(t) + S(t)A(t)+A^T(t)S(t)+\dot{S}(t)$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This equation is called the &lt;strong&gt;Differential Riccati equation&lt;/strong&gt;, and it consists of the standard LQR algebraic Riccati equation and an additional time-dependent term $\dot{S}(t)$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You solve for $S(t)$, and consequently $\bar{u}(t)$ and $J(\bar{x},t)$, by setting $S(T) = 0$ and solving the differential equation:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$-\dot{S}(t) = Q-S(t)B(t)R^{-1}(t)B^T(t)S(t) + S(t)A(t)+A^T(t)S(t)$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;backwards in time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Reference: Section 3.A in &lt;a href=&quot;http://groups.csail.mit.edu/robotics-center/public_papers/Tedrake09a.pdf&quot; rel=&quot;nofollow&quot;&gt;http://groups.csail.mit.edu/robotics-center/public_papers/Tedrake09a.pdf&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="7542" LastEditorUserId="7542" LastEditDate="2014-11-21T18:25:16.447" LastActivityDate="2014-11-21T18:25:16.447" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5027" PostTypeId="2" ParentId="4672" CreationDate="2014-11-22T01:03:33.407" Score="1" Body="&lt;p&gt;According to this website &lt;a href=&quot;http://www.cs.tufts.edu/comp/150IR/labs/wavefront.html&quot; rel=&quot;nofollow&quot;&gt;http://www.cs.tufts.edu/comp/150IR/labs/wavefront.html&lt;/a&gt;&#xA;It shows a method of converting the zero to number and calculating the fastest distance.I am assuming you mean wavefront instead of wave planning&lt;/p&gt;&#xA;" OwnerUserId="7552" LastActivityDate="2014-11-22T01:03:33.407" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5028" PostTypeId="1" AcceptedAnswerId="5030" CreationDate="2014-11-22T11:22:41.293" Score="0" ViewCount="1566" Body="&lt;p&gt;I'm trying to devise a system to lift a 10kg weight a distance of 1.4m vertically, and allow it to move in/out a distance of 30cm. I'd like the motions to be able to occur simultaneously if possible. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm thinking for the vertical motion I can use a suspended climber system. However I am unsure as to how I devise a system for the horizontal motion (in the horizontal plane I need nothing to protrude - only when the device is told to extend, so a horizontal suspended climber system isn't a possible solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm thinking I will need to use 2 electric motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also - I'd like to mount it to the side of a car - so lightweight and low power draw is a must.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know if there is anything available that will do this? Or suggest how I could combine a couple of systems to make this work?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any information is appreciated.&lt;/p&gt;&#xA;" OwnerUserId="7554" LastEditorUserId="37" LastEditDate="2014-11-25T17:59:02.767" LastActivityDate="2014-11-25T17:59:02.767" Title="Trying to design a mechanical system with vertical and horizontal movement" Tags="&lt;mechanism&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5029" PostTypeId="2" ParentId="5023" CreationDate="2014-11-23T00:11:24.560" Score="1" Body="&lt;p&gt;Localization has the goal of identifying where a robot is within an environment.  Whether you have an accurate representation of the environment already or not is the distinction you are trying to compare.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems the accuracy of your position would be contingent on the accuracy of the mapping you can build.  In a fixed indoor environment with few obstacles and high definition sensors like LIDAR it would seem you could create a very accurate map and the difference in accuracy between the approaches would be null since both maps would be the same.  The complexity of the operations to get there is different, but the accuracy seems like it would be the same.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are in a complex and changing environment it would be a different story.  The map you had cached using localization alone may no longer be accurate for path planning or navigation you would get from a SLAM approach.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you trust your map and you trust your sensors (dead reckoning, odometry, gps) as to where the robot is in the environment than I suppose it follows SLAM would not yield any additional accuracy.&lt;/p&gt;&#xA;" OwnerUserId="6819" LastActivityDate="2014-11-23T00:11:24.560" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5030" PostTypeId="2" ParentId="5028" CreationDate="2014-11-23T00:37:17.387" Score="0" Body="&lt;p&gt;I haven't seen anything specific to your specifications, but it seems like you'd want to look into servo motors that meet your needs:&#xA;&lt;a href=&quot;http://www.jameco.com/jameco/workshop/howitworks/how-servo-motors-work.html&quot; rel=&quot;nofollow&quot;&gt;http://www.jameco.com/jameco/workshop/howitworks/how-servo-motors-work.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and look for inspiration from automated storage and retrieval systems or perhaps a gripper arm that can extend horizontally but fold down vertically to avoid protruding.  Maybe not the best example for what you want but maybe it'll get you headed in the right directions from this vertical lift example from a robotics competition: &lt;a href=&quot;http://www.youtube.com/watch?v=ioilEy1I8lY&quot; rel=&quot;nofollow&quot;&gt;http://www.youtube.com/watch?v=ioilEy1I8lY&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="6819" LastActivityDate="2014-11-23T00:37:17.387" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5031" PostTypeId="1" AcceptedAnswerId="5066" CreationDate="2014-11-23T02:52:06.307" Score="2" ViewCount="590" Body="&lt;p&gt;I'm building a quadcopter using Raspberry Pi. There is the Pi Camera connected to the Raspberry Pi which is streaming the captured video. I can connect to this stream via Wi-Fi on my notebook (Linux) by using the console command &quot;nc&quot; and then show it by &quot;mplayer&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I want to do though is avoid the console commands and connect to this stream directly through my Java application. The reason is I want to do some image processing operations with this video so I need to have it in my application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there anyone able to help me?&lt;/p&gt;&#xA;" OwnerUserId="7551" LastEditorUserId="37" LastEditDate="2014-11-25T17:54:28.827" LastActivityDate="2016-10-22T09:52:38.873" Title="Connect to video stream with Java app instead of console and mplayer" Tags="&lt;quadcopter&gt;&lt;raspberry-pi&gt;&lt;cameras&gt;&lt;linux&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="2" ClosedDate="2016-10-24T10:24:14.707" ContentLicense="CC BY-SA 3.0" />
  <row Id="5032" PostTypeId="2" ParentId="4542" CreationDate="2014-11-23T09:28:18.627" Score="1" Body="&lt;p&gt;When I studied the relationship between the rotation matrix and quaternion, I have found a literature, here is &lt;a href=&quot;http://www.euclideanspace.com/physics/kinematics/angularvelocity/QuaternionDifferentiation2.pdf&quot; rel=&quot;nofollow&quot;&gt;the link&lt;/a&gt;. I think it will instruct you how to compute the velocity derivatives using quaternions.&lt;/p&gt;&#xA;" OwnerUserId="7446" LastActivityDate="2014-11-23T09:28:18.627" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5033" PostTypeId="2" ParentId="4987" CreationDate="2014-11-23T09:32:31.450" Score="0" Body="&lt;p&gt;What I see you have a reference problem , &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suggest installing AHRS (Attitude Heading and Reference System) system over your Robot, &#xA;this will indicate the direction of your robot heading and will sense the rotation of the body , &lt;/p&gt;&#xA;&#xA;&lt;p&gt;for being simper you can use 1 Axis Magnetometer that will act as compass which will show only body heading , &lt;/p&gt;&#xA;&#xA;&lt;p&gt;if you used 6 DOF (Degree of freedom) system it will show heading and body rotation , &lt;/p&gt;&#xA;&#xA;&lt;p&gt;check this :- &lt;a href=&quot;http://www.youtube.com/watch?v=lwlOZzNJqJc&quot; rel=&quot;nofollow&quot;&gt;6 DOF AHRS using MPU 6050 , A low cost&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="6973" LastActivityDate="2014-11-23T09:32:31.450" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5034" PostTypeId="1" AcceptedAnswerId="5035" CreationDate="2014-11-23T13:53:04.547" Score="0" ViewCount="385" Body="&lt;p&gt;I am building the upper body of a humanoid robot for my M.Sc thesis project with 24 DC motors and multiple sensors (something like i-cub or Nao). I have basic knowledge of communication protocols and I have worked with micros before but I have no knowledge and experience on working with ROS. The question I have is whether or not it is worthy and practical for me to learn ROS and use this for my robot or should I stick with what I already know.&lt;/p&gt;&#xA;" OwnerUserId="7533" LastEditorUserId="7383" LastEditDate="2014-11-25T17:55:44.720" LastActivityDate="2014-11-25T17:55:44.720" Title="Control circuit of humanoid robot: is it worth to learn and use ROS?" Tags="&lt;microcontroller&gt;&lt;ros&gt;&lt;humanoid&gt;" AnswerCount="1" CommentCount="0" ClosedDate="2014-11-25T17:43:17.220" ContentLicense="CC BY-SA 3.0" />
  <row Id="5035" PostTypeId="2" ParentId="5034" CreationDate="2014-11-23T14:22:34.247" Score="3" Body="&lt;p&gt;ROS is good for when you start writing code to run on a PC.  It lets you write independent modules that interface through standard messages and service calls.  Furthermore, it has a large user base with lots of off-the-shelf tools, drivers, and higher-level behaviors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What ROS is not good for is inter-microcontroller communication.  (ROS's communication is Ethernet based).  The overhead required for a microcontroller to &quot;talk&quot; ROS is not worth it in my opinion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what I would recommend (what I have done numerous times in the past), is to write your own inter-microcontroller communication using whatever you are comfortable with.  Then the micros will need to interface with a computer.  This can be some embedded thing like a Gumstix, RaspberryPi, etc.  Or it can be over a serial or bluetooth link to a standard PC.  In either case, you define that protocol as well.  Now on the PC, you write a ROS node to expose the functionality of your hardware.  For a very custom robot, you will probably have to define your own messages for control as well as sensor feedback.  But then you can start to interface with all of the ROS ecosystem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of the first things i do is to create a &lt;a href=&quot;http://wiki.ros.org/urdf&quot; rel=&quot;nofollow&quot;&gt;URDF&lt;/a&gt; file.  Then write a node to publish the &lt;a href=&quot;http://docs.ros.org/api/sensor_msgs/html/msg/JointState.html&quot; rel=&quot;nofollow&quot;&gt;joint_state message&lt;/a&gt; to interface with the &lt;a href=&quot;http://wiki.ros.org/robot_state_publisher&quot; rel=&quot;nofollow&quot;&gt;robot_state_publisher&lt;/a&gt;.  Now you have an excellent 3d visualization of your robot in &lt;a href=&quot;http://wiki.ros.org/rviz&quot; rel=&quot;nofollow&quot;&gt;rviz&lt;/a&gt;.  From there, you can &lt;a href=&quot;http://wiki.ros.org/rviz/DisplayTypes/Map&quot; rel=&quot;nofollow&quot;&gt;overlay maps&lt;/a&gt;, display sensor data, and &lt;a href=&quot;http://wiki.ros.org/rviz/DisplayTypes/InteractiveMarker&quot; rel=&quot;nofollow&quot;&gt;interact&lt;/a&gt; with the robot in power full ways.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-11-23T14:22:34.247" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5036" PostTypeId="1" CreationDate="2014-11-23T14:42:25.150" Score="2" ViewCount="50" Body="&lt;p&gt;My native language is not English, so I don't know all the specific terms you may expect me to use. I apologize for that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/XEKxY.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway, I have a motor and three connecting rods (in French, &lt;em&gt;bielles&lt;/em&gt;). So point C will have a circular trajectory and A, thanks to the sliding pivot (&lt;em&gt;pivot glissant&lt;/em&gt;, I really hope I am using the right translations), should have a perfectly vertical trajectory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is, how could I calculate the force F? I need this to emboss a piece of paper.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks a lot for your attention!&lt;/p&gt;&#xA;" OwnerDisplayName="user7558" LastActivityDate="2014-12-02T13:54:25.287" Title="Calculating the force of this system" Tags="&lt;force&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5037" PostTypeId="1" CreationDate="2014-11-23T19:15:12.523" Score="-2" ViewCount="209" Body="&lt;p&gt;I am using &lt;a href=&quot;http://www.pololu.com/file/0J563/L3GD20.pdf&quot; rel=&quot;nofollow&quot;&gt;L3GD20&lt;/a&gt; and I am trying to implement a kalman filter for it on the stm32f3 discovery board. I have though a few questions about that:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;After the filter gave me the values, do I have to make an average between them and those of the original model or should I use them as they are?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;According to &lt;a href=&quot;http://academic.csuohio.edu/simond/courses/eec644/kalman.pdf&quot; rel=&quot;nofollow&quot;&gt;this document&lt;/a&gt;, we don't use the original state space vectors in the filter, so how could we have &quot;correct&quot; space state estimated values?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="7557" LastEditorUserId="7383" LastEditDate="2014-11-25T17:55:01.080" LastActivityDate="2014-11-27T19:13:37.757" Title="Kalman filter model values or state space original value? Which values to use?" Tags="&lt;kalman-filter&gt;&lt;gyroscope&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5039" PostTypeId="1" AcceptedAnswerId="5040" CreationDate="2014-11-24T03:27:09.467" Score="3" ViewCount="1644" Body="&lt;p&gt;I am making a robot that is supposed to roam inside my house and pick up trash using openCV. I plan to send information from my arduino mega to my arduino nano connected to window pc using radio transceivers. I also plan to send video feed from raspberry pi camera over WiFi to the windows PC. The windows PC then uses openCV and processes other information from the sensors and sends command back to arduino mega.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have right now:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Arduino mega&lt;/li&gt;&#xA;&lt;li&gt;raspberry pi + usb camera + wifi dongle&lt;/li&gt;&#xA;&lt;li&gt;Xbox 360 kinect &lt;/li&gt;&#xA;&lt;li&gt;wheel encoders&lt;/li&gt;&#xA;&lt;li&gt;sonar distance sensor&lt;/li&gt;&#xA;&lt;li&gt;arduino nano&lt;/li&gt;&#xA;&lt;li&gt;windows PC&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I want to know how to keep track of the robot like the room it is. I think what I am trying to do is SLAM, but I just need to make the map once because the rooms don't change much. I am open to ideas.  Cost is a factor.&lt;/p&gt;&#xA;" OwnerUserId="7552" LastEditorUserId="350" LastEditDate="2014-12-01T20:16:21.127" LastActivityDate="2014-12-01T20:16:21.127" Title="Best localization method?" Tags="&lt;arduino&gt;&lt;mobile-robot&gt;&lt;localization&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5040" PostTypeId="2" ParentId="5039" CreationDate="2014-11-24T17:02:46.610" Score="1" Body="&lt;p&gt;Looking at your hardware, only the wheel encoders are suitable for environment-independent localization, which is not enough in most cases. The localization method using the wheel encoders called &quot;&lt;b&gt;odometry&lt;/b&gt;&quot;. The other sensors you have are suited more for known environments and map-based navigation. The camera could be used for markers detection and mapping, the distance sensor can be used for matching the location to a map (&lt;b&gt;Particle Filter&lt;/b&gt; is the thing). In any case, I would add some inertial sensors(gyro, accelerometer or integrated IMU) to your system, to improve the localization performance.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2014-11-24T17:02:46.610" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="5041" PostTypeId="1" AcceptedAnswerId="5042" CreationDate="2014-11-25T07:05:32.580" Score="1" ViewCount="739" Body="&lt;p&gt;I am trying to integrate bluetooth in a project with MSP430 so to be able to communicate between it and my PC. Doing a search on eBay I found the following item:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;HC-05 06 Transceiver Bluetooth Module Backboard Interface Base Board Serial&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/vQfu3.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are also a lot of other bluetooth modules that appear to be a lot more expensive and their boards are populated with IC's that this one doesn't have. So I am wondering if this is what I need or it has another use.&lt;/p&gt;&#xA;" OwnerUserId="7383" LastActivityDate="2014-11-27T03:07:26.303" Title="Bluetooth integration with MSP430" Tags="&lt;arduino&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5042" PostTypeId="2" ParentId="5041" CreationDate="2014-11-25T16:13:21.293" Score="2" Body="&lt;p&gt;This module has a simple serial interface that can be hooked directly to the MCU's UART pins, and provide seamless wireless serial communication with a paired device or computer with virtual Bluetooth serial port. If this is the intention, it would be the right choice.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2014-11-25T16:13:21.293" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5044" PostTypeId="1" CreationDate="2014-11-26T05:09:17.213" Score="1" ViewCount="386" Body="&lt;p&gt;Is there a &quot;cape&quot; to make wiring sensors into a Beaglebone Black easier?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Whenever I read some guide for wiring a sensor into the Beaglebone (like &lt;a href=&quot;http://beagleboard.org/support/BoneScript/Ultrasonic_Sensor/&quot; rel=&quot;nofollow&quot;&gt;this one&lt;/a&gt;) it always recommends attaching wires directly to GND, +V and signal pins, which is horribly messy and unmaintainable. Even for small projects, you end up having several wires connected to the same GND/5V+ pins, so if you need to replace or repair something, you end up disrupting the wiring for every other component in your project.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most Arduino guides assume this bad practice too, but at least I've found various &lt;a href=&quot;http://sandboxelectronics.com/wp-content/uploads/2014/01/SLD-000010.main_-399x399.jpg&quot; rel=&quot;nofollow&quot;&gt;&quot;GVS&quot; shields&lt;/a&gt; to help organize groups of GND/5V/Signal pins so I can attach individual sensor cables.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there anything similar for the Beaglebone? I can't find anything appropriate Googling &quot;breakout&quot; or &quot;IO&quot; cape. I could only find one &lt;a href=&quot;http://beagleboard.org/project/BBB-GVS/&quot; rel=&quot;nofollow&quot;&gt;GVS cape&lt;/a&gt;, but it's less than ideal, since it only exposes 5 5V GPIO pins, and everything else it exposes as 3.3V or 1.8V which are incompatible with most peripherals.&lt;/p&gt;&#xA;" OwnerUserId="740" LastActivityDate="2014-11-26T05:09:17.213" Title="Wiring 5V sensors to Beaglebone Black" Tags="&lt;beagle-bone&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5045" PostTypeId="1" AcceptedAnswerId="5048" CreationDate="2014-11-26T19:22:13.987" Score="5" ViewCount="740" Body="&lt;p&gt;I am using &lt;a href=&quot;http://www.pololu.com/file/0J563/L3GD20.pdf&quot; rel=&quot;nofollow&quot;&gt;this gyroscope&lt;/a&gt; in order to measure the rotation of my robot around the z axis.&#xA;I want to implement a kalman filter in order to improve the values.&#xA;What i came with since now is this space model:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA; θ(k+1)=θ(k)+dt*θ'(k)+w(k) &#xA;$$&#xA;$$&#xA; y(k)=θ(k)+z(k)&#xA;$$&#xA;where $θ$ is the angle, $θ'$ is the angular rate given by the gyro and $w$ is the noise. (I hold up my gyro and measured 50 values while it was steady and find out that the variance is equal to 0.0002).&#xA;What i want to ask:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;is what i did is correct?&lt;/li&gt;&#xA;&lt;li&gt;How can i find out $z(k)$? .According to the data sheet noise density is equal to 0.03 dps/sqrt(hz),how can i use this information to find out $z(k)$ and correct $w(k)$ if it is wrong.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="7557" LastEditorUserId="350" LastEditDate="2014-12-01T19:55:54.853" LastActivityDate="2014-12-01T19:55:54.853" Title="How to choose the state space model for 1 axis gyroscope to implemnt a good kalman filter" Tags="&lt;kalman-filter&gt;&lt;gyroscope&gt;&lt;noise&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5046" PostTypeId="2" ParentId="5041" CreationDate="2014-11-27T03:07:26.303" Score="1" Body="&lt;p&gt;I suspect what you really want is a complete MCU Bluetooth module, something like the one pictured below:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/Sepk3.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(via&#xA;Erich Styger&#xA;&lt;a href=&quot;http://mcuoneclipse.com/2014/03/30/getting-bluetooth-working-with-jy-mcu-bt_board-v1-06/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;Getting Bluetooth Working with JY-MCU BT_BOARD V1.06&quot;&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I look carefully at the above complete MCU Bluetooth module, I see 2 circuit boards soldered together:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the RF module, a green PCB with a gold meandering Bluetooth antenna on it and the RF integrated circuits (ICs), and&lt;/li&gt;&#xA;&lt;li&gt;the interface board, a blue PCB with convenient header pins and a handful of small parts.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In the original question, I only see the blue interface board, without a RF module or even an antenna. As far as I can tell, that interface board is useless without a RF module attached to it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My understanding is that it is impossible for Bluetooth or any other radio communication system to work without an antenna.&lt;/p&gt;&#xA;" OwnerUserId="187" LastActivityDate="2014-11-27T03:07:26.303" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5047" PostTypeId="1" AcceptedAnswerId="5056" CreationDate="2014-11-27T10:49:49.730" Score="2" ViewCount="696" Body="&lt;p&gt;I originally asked this &lt;a href=&quot;https://math.stackexchange.com/questions/891093/work-out-center-of-a-partial-circle&quot;&gt;here&lt;/a&gt; but I am struggling to take the concepts, particularly &quot;Circumcenter&quot;, discussed there and apply it in my context. So here it is in my context...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a small robot that can &quot;see&quot; (via a camera) a partial arc (from a birds-eye view)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore I know the height and the width of the square and therefore the width and height of the arc, I am sure there must be a way of approximating the circles centre?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What would be the quickest (not necessarily the most accurate) way of helping my robot find the centre.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my head these are the steps of the problem:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;Break up the arc into evenly spaced vectors ?&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;Work out the angle between the vectors&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Use this information to complete the circle ?&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;Work out radius of circle &lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Find the center of the circle&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Basically I would love some input on this problem because I think i know&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;?&lt;/li&gt;&#xA;&lt;li&gt;Dot Product&lt;/li&gt;&#xA;&lt;li&gt;?&lt;/li&gt;&#xA;&lt;li&gt;Add up the lengths of all the vectors to get circumference and then divide by pi, then divide by 2 (or divide by Tau : ) ) &lt;/li&gt;&#xA;&lt;li&gt;I &lt;strong&gt;think&lt;/strong&gt; this is where circumcentre comes in&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Basically I feel I have some pieces of the puzzle but I am not sure how they fit together. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am currently using python with OpenCV and you may have guessed, I am not great at understanding math unless its expressed in algebraic formula or code. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are some illustrive pictures to reference:&#xA;&lt;img src=&quot;https://i.stack.imgur.com/4Fmyj.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ts26N.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="7582" LastEditorUserId="-1" LastEditDate="2017-04-13T12:19:24.817" LastActivityDate="2014-12-01T10:07:10.607" Title="Find Centre Of Circle, when robot can &quot;see&quot; a partial arc" Tags="&lt;computer-vision&gt;&lt;navigation&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5048" PostTypeId="2" ParentId="5045" CreationDate="2014-11-27T18:50:48.180" Score="2" Body="&lt;p&gt;Assuming the angular velocity is constant (i.e. $\dot{\theta}_{k+1} = \dot{\theta}_{k}$) It seems to me the state vector should look like this &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\underbrace{&#xA;\begin{bmatrix}&#xA;\theta_{k+1} \\&#xA;\dot{\theta}_{k+1}&#xA;\end{bmatrix}}_{\textbf{x}_{k+1}}&#xA;=&#xA;\underbrace{&#xA;\begin{bmatrix}&#xA;1 &amp;amp; \Delta t \\&#xA;0 &amp;amp; 1&#xA;\end{bmatrix}&#xA;}_{F}&#xA;\begin{bmatrix}&#xA;\theta_{k} \\&#xA;\dot{\theta}_{k}&#xA;\end{bmatrix}&#xA;+&#xA;w_{k+1}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{align*}&#xA;y_{k+1} &amp;amp;= h(\textbf{x}_{k+1}) + z_{k+1} \\&#xA;        &amp;amp;= &#xA;\underbrace{&#xA;\begin{bmatrix}&#xA;0 &amp;amp; 1&#xA;\end{bmatrix}}_{H}&#xA;\begin{bmatrix}&#xA;\theta_{k+1} \\ &#xA;\dot{\theta}_{k+1}&#xA;\end{bmatrix}&#xA;+&#xA;z_{k+1}&#xA;\end{align*}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $w_{k+1}$ is the process noise not the sensor noise (be careful). You could assume it to be zero if you think there is no noise affects your state vector and the noise only comes from the sensor (i.e. $z_{k+1}$) and it must be Gaussian noise with zero mean and known variance (i.e. $\mathcal{N}(0, \sigma^{2})$). Once you get the matrices and the noise parameters, applying Kalman filter is straightforward. Hope this helps&lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="2155" LastEditDate="2014-11-27T18:55:57.130" LastActivityDate="2014-11-27T18:55:57.130" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5049" PostTypeId="2" ParentId="5037" CreationDate="2014-11-27T19:13:37.757" Score="3" Body="&lt;p&gt;To apply Kalman filter successfully, you need two requirements namely the system must be linear (i.e. both the motion and observation models) and the noise to be Gaussian with zero mean and some variance besides the models must be specified accurately. Kalman filter is a time domain recursive filter. Meeting these requirements, Kalman filter is one of the best filters to go, so you don't need to average the filtered data. This answers your first question.  For the second question, I didn't read the attached pdf, Kalman filter estimates your state vector. I don't understand what do you mean by saying &quot;we don't use the original state space vectors&quot;?  &lt;/p&gt;&#xA;" OwnerUserId="2155" LastActivityDate="2014-11-27T19:13:37.757" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5050" PostTypeId="2" ParentId="5031" CreationDate="2014-11-27T19:51:41.960" Score="0" Body="&lt;p&gt;You should check it out OpenCV (open computer vision) it suport bindings for java and stream and it has very powerfull image processing tools! Hope it helps... &lt;a href=&quot;https://stackoverflow.com/questions/15835424/opencv-2-4-4-java-grab-webcam-picture-stream-osx&quot;&gt;OpenCV java stream &lt;em&gt;stackoverflow&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerDisplayName="user7586" LastEditorUserId="-1" LastEditDate="2017-05-23T12:37:11.430" LastActivityDate="2014-11-27T19:51:41.960" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="5051" PostTypeId="2" ParentId="4983" CreationDate="2014-11-27T21:15:38.843" Score="4" Body="&lt;p&gt;A dualcopter, of the form you are talking about, can control all roll, pitch, yaw and it's altitude.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To do so, it employs two rotors running in opposite directions to cancel any torque. This would give the copter the ability to control its altitude and yaw (by changing the relative speeds of both the rotors).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the rest, such a copter usually employs rotors which can tilt forward and backward, therefore, when you want to move forward, both the rotors tilt forward, and both tilt backwards if you want to move backwards. They usually tilt in opposite directions rather than changing their relative speeds for yaw control which gives it a better yaw authority.&lt;/p&gt;&#xA;" OwnerUserId="7588" LastActivityDate="2014-11-27T21:15:38.843" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5052" PostTypeId="2" ParentId="4953" CreationDate="2014-11-27T21:25:50.097" Score="0" Body="&lt;p&gt;After reading your other question, I reason that the one quantity you can look at is the rpm of your motor at different input values.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To measure this, you may use a tachometer and give your ESC an input from your transmitter and then record your tachometer readings for several inputs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I myself user different esc's on one of my tricopter's, reason being, the ones I purchased earlier are no longer available. It flies fine as the flight controller compensates for any differences, but you may notice erratic behaviour while flying aggressively.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On a different note, you could also open up the esc and look at the hardware used. Almost all esc's use an avr running at the same speed, so if you flash the same firmware in them, they would operate the same, given that the rest of the hardware is identical.&lt;/p&gt;&#xA;" OwnerUserId="7588" LastActivityDate="2014-11-27T21:25:50.097" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5053" PostTypeId="1" AcceptedAnswerId="5061" CreationDate="2014-11-27T23:44:16.430" Score="5" ViewCount="4610" Body="&lt;p&gt;I was looking at the Pixhawk specs and noticed that it has 2 different IMUs- Invensense and STM. Is it for redundancy or does it have any other higher purpose?&lt;/p&gt;&#xA;" OwnerUserId="7587" LastActivityDate="2016-03-16T01:25:37.933" Title="Why does the Pixhawk have 2 IMUs" Tags="&lt;uav&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5054" PostTypeId="2" ParentId="5047" CreationDate="2014-11-27T23:49:35.427" Score="0" Body="&lt;p&gt;I would recommend the following steps:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Get slope of the arc (say m1,m2) at 2 random points on the arc (say p1,p2)&lt;/li&gt;&#xA;&lt;li&gt;Get slopes orthogonal to m1,m2 using m1*m1_oth = -1&lt;/li&gt;&#xA;&lt;li&gt;Use new slopes and point p1,p2 to get 2 lines&lt;/li&gt;&#xA;&lt;li&gt;Point of intersection of the lines is your center.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I believe this should not be computationally intensive. Haven't tried it though.&lt;/p&gt;&#xA;" OwnerUserId="7587" LastActivityDate="2014-11-27T23:49:35.427" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5055" PostTypeId="2" ParentId="1753" CreationDate="2014-11-29T18:33:36.677" Score="1" Body="&lt;p&gt;(I know it's old but I still feel I need to add my solution)&lt;br&gt;&#xA;I have a similar issue, multiple units sending data and need a way to know what unit it is. I create a random unitId and save it in eeprom. If needed I can read it on serial port or by activating one at a time and check on the receiver side.&lt;br&gt;&#xA;I guess I could easily write a small sketch to write a specific unitId if that was needed.&lt;br&gt;&#xA;Code I have in setup()&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;long unitId;&#xA;...&#xA;Setup(){&#xA; long notunitId;&#xA; ..&#xA; pinMode(RESET_PIN, INPUT_PULLUP);&#xA; unitId = (long)EEPROM.read(0) &amp;lt;&amp;lt; 24 | (long)EEPROM.read(1) &amp;lt;&amp;lt; 16 | (long)EEPROM.read(2) &amp;lt;&amp;lt; 8 | (long)EEPROM.read(3);&#xA;  notunitId = (long)EEPROM.read(4) &amp;lt;&amp;lt; 24 | (long)EEPROM.read(5) &amp;lt;&amp;lt; 16 | (long)EEPROM.read(6) &amp;lt;&amp;lt; 8 | (long)EEPROM.read(7);&#xA;  if (digitalRead(RESET_PIN) == LOW) {&#xA;    Serial.println(&quot;Force generation of a new unitId&quot;);&#xA;    unitId = notunitId = 4711;&#xA;  }&#xA;  if (unitId == -notunitId) {&#xA;    Serial.print(&quot;unitId from eeprom: &quot;);&#xA;    Serial.print(unitId, HEX);&#xA;  } else {&#xA;    randomSeed(analogRead(7)*analogRead(6)*analogRead(5)+micros());&#xA;    unitId = random();&#xA;    notunitId = -unitId;&#xA;    EEPROM.write(0, unitId &amp;gt;&amp;gt; 24 &amp;amp; 0xFF);&#xA;    EEPROM.write(1, unitId &amp;gt;&amp;gt; 16 &amp;amp; 0xFF);&#xA;    EEPROM.write(2, unitId &amp;gt;&amp;gt; 8  &amp;amp; 0xFF);&#xA;    EEPROM.write(3, unitId     &amp;amp; 0xFF);&#xA;    EEPROM.write(4, notunitId &amp;gt;&amp;gt; 24 &amp;amp; 0xFF);&#xA;    EEPROM.write(5, notunitId &amp;gt;&amp;gt; 16 &amp;amp; 0xFF);&#xA;    EEPROM.write(6, notunitId &amp;gt;&amp;gt; 8  &amp;amp; 0xFF);&#xA;    EEPROM.write(7, notunitId     &amp;amp; 0xFF);&#xA;&#xA;    Serial.print(&quot;Generated new unitId: &quot;);&#xA;    Serial.print(unitId, HEX);&#xA;  }&#xA;  Serial.println();&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And in loop I then just add unitId to the message wherever needed.&lt;/p&gt;&#xA;" OwnerUserId="7605" LastEditorUserId="17715" LastEditDate="2017-07-31T12:12:38.767" LastActivityDate="2017-07-31T12:12:38.767" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5056" PostTypeId="2" ParentId="5047" CreationDate="2014-11-30T14:45:33.153" Score="3" Body="&lt;p&gt;First you need to understand the math, then you need to know how to program it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So let's begin with the math. This is high school material, so I go through it quickly.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;The math&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Any two points you take on a circle make a line (of course). The &lt;a href=&quot;https://en.wikipedia.org/wiki/Bisection#Line_segment_bisector&quot; rel=&quot;nofollow noreferrer&quot;&gt;line bisector&lt;/a&gt; of that line passes through the center of the circle. If you have two of such line bisectors that are not parallel, they collide at the center of the circle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason that this happens is quite trivial, but if you don't know it, just accept it at this point.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/X5UzT.png&quot; alt=&quot;Theory&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, the line segments don't need to be far apart for their line bisectors to collide at the center of the circle. They could cross each other or they could share a point as one of their ends. In short, any pair of lines are ok as long as they are not parallel. Sharing one end point and having the other end point different can ensure that this is the case.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;The programming&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;To do the programming, first you need three points on the circle (arc).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These three points don't need to be spaced out evenly. The more points you have and the farther they are from each other can increase your precision. Let's stick to three points at the moment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can you find three points? That's quite simple. Run three horizontal lines through your image and record where you cross the arc. There would be at least three collisions, but there could also be more.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/aQIeg.png&quot; alt=&quot;Choosing points on the arc&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now choose three as you like, preferably the two farthest points and one that is closest to the middle. Then find their bisectors and see where they collide.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/ahs3Q.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And that's it! You have your center.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a bonus, if you find more points and have the time, you can increase your precision by calculating more candidate points for the center and simply average them. That would give you a smaller computation error. In the figure below, that would be the average of the points identified by the arrows:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/eI6Bc.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that these points should have theoretically coincided, but due to computational error are a bit offset.&lt;/p&gt;&#xA;" OwnerUserId="158" LastEditorUserId="158" LastEditDate="2014-12-01T10:07:10.607" LastActivityDate="2014-12-01T10:07:10.607" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5057" PostTypeId="2" ParentId="4591" CreationDate="2014-11-30T15:30:44.443" Score="0" Body="&lt;p&gt;According to &lt;a href=&quot;http://ch.mathworks.com/help/supportpkg/legomindstormsnxt/ref/legomindstormsnxtcolorsensor.html&quot; rel=&quot;nofollow&quot;&gt;this page&lt;/a&gt; the sensor basically gives you three integers corresponding to the intensity of red/green/blue light. The larger the number, the brighter the incoming light. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The error I suspect is that SensorValue[S1] actually is a value from 0 to 255 and the chance that you get &lt;strong&gt;exactly&lt;/strong&gt; the number sensorCOLORBLUE is very small. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, such an output means, that you can adjust the thresholds you want to be recognized as blue very nicely in software: for example by saying if the blue value is the highest of those 3, you have a blue line and act accordingly. Example (pseudo) code would be something like this:  &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;if ( (sensor_output_blue &amp;gt; sensor_output_red) &amp;amp;&amp;amp; (sensor_output_blue &amp;gt; sensor_output_green) {&#xA;    //react to blue&#xA;    //for example by turning left&#xA;} else {&#xA;    //react to red or green&#xA;    //for example by turning right (ie. in opposite direction)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If using all three colors at the same time is inconvenient, you can do something similar using only the brighness of blue: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;if (sensor_output_blue &amp;gt; threshold_blue) {&#xA;    //react to blue&#xA;} else {&#xA;    //react to the other colors&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="6773" LastEditorUserId="6773" LastEditDate="2014-11-30T15:44:44.480" LastActivityDate="2014-11-30T15:44:44.480" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5058" PostTypeId="1" CreationDate="2014-11-30T20:25:53.730" Score="3" ViewCount="681" Body="&lt;p&gt;Suppose I have a robot arm with $n$ linkages of fixed length and equal density whose motion constrained within a 2D plane.  I want the end effector to reach a particular pose $(x^*,y^*,\theta^*)$.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that in general, there can be multiple solutions that can reach this pose.  For my particular application, I'm interested in a solution that minimizes the maximum torque exerted over any joint under the influence of the weights of all the linkages, combined.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a way I can reformulate the inverse kinematics problem as a minimization problem over the joint loads?  Can I formulate my objective function to be differentiable (i.e. so that I can use traditional optimization techniques)?  Would this yield an unique solution (in a least squares sense) for the 2D planar motion problem?&lt;/p&gt;&#xA;" OwnerUserId="2295" LastEditorUserId="350" LastEditDate="2014-12-01T19:26:56.717" LastActivityDate="2014-12-06T18:49:16.387" Title="2D Robot Arm Inverse Kinematics with minimum joint loads" Tags="&lt;inverse-kinematics&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5059" PostTypeId="1" AcceptedAnswerId="7531" CreationDate="2014-12-01T06:33:03.253" Score="9" ViewCount="1778" Body="&lt;p&gt;I am working with a position-controlled manipulator. However, I want to implement a torque-controlled method on this robot. Is there any way to convert a torque command to a position command?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I try to find research papers on this but I have no idea where I should start or which keywords I should use in searching. Do you have any suggestion?&lt;/p&gt;&#xA;" OwnerUserId="7610" LastActivityDate="2017-05-20T13:17:07.467" Title="Implementing a torque-controlled method on a position-controlled robot" Tags="&lt;robotic-arm&gt;&lt;industrial-robot&gt;&lt;manipulator&gt;" AnswerCount="4" CommentCount="9" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5060" PostTypeId="2" ParentId="1946" CreationDate="2014-12-01T06:34:25.040" Score="3" Body="&lt;p&gt;I assume that your target environment is indoors as you use RGB-D camera.&#xA;When you want to use it with quadrotor, you need high update rate for accurate pose estimation. Some packages that you can look at are&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://vision.in.tum.de/data/software/dvo&quot; rel=&quot;nofollow&quot;&gt;http://vision.in.tum.de/data/software/dvo&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://wiki.ros.org/demo_rgbd&quot; rel=&quot;nofollow&quot;&gt;http://wiki.ros.org/demo_rgbd&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/ccny-ros-pkg/ccny_rgbd_tools&quot; rel=&quot;nofollow&quot;&gt;https://github.com/ccny-ros-pkg/ccny_rgbd_tools&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next, if you want to use only RGB camera + IMU, you must look at this &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://wiki.ros.org/ethzasl_ptam&quot; rel=&quot;nofollow&quot;&gt;http://wiki.ros.org/ethzasl_ptam&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;M. Li and A. I. Mourikis, “High-precision, consistent EKF-based visual–inertial odometry,” Int. J. Rob. Res., vol. 32, pp. 690–711, 2013.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There might be many others but these might be some starting points...&lt;/p&gt;&#xA;" OwnerUserId="7283" LastEditorUserId="350" LastEditDate="2014-12-01T19:31:10.013" LastActivityDate="2014-12-01T19:31:10.013" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5061" PostTypeId="2" ParentId="5053" CreationDate="2014-12-01T11:42:51.890" Score="9" Body="&lt;p&gt;Generally engineers implement dual, triple or more sensors with the same function for one or more of the following reasons: &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Reliability: the system should be reliable. Several values can be fetched from several sensor. A voter decides the output(final) value. Boing 777 has 6 sensors for each function. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Safety and critical systems: if one sensor fails, there should be another one which can replace it.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Power consumption: some sensor consume more power because of their higher precision. Using two sensor with different precisions can make a big difference on power consumption. The sensor with high precision is turned on whenever high precision sampling is needed. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Frequency analysis: if you sample from a sensor at 1200Hz and another external frequency with same value is applied then you will get a dc-offset because of the two frequencies interfering with each other. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;In case of Pixhawk, I think the main reason is frequency analysis. There are strong vibrations during flight. &lt;/p&gt;&#xA;" OwnerUserId="745" LastActivityDate="2014-12-01T11:42:51.890" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5062" PostTypeId="1" CreationDate="2014-12-01T12:03:36.833" Score="2" ViewCount="122" Body="&lt;p&gt;I am new to robotics, and ime looking for a &amp;lt;12v motor that can be used to power a car-like robot.I will have two of these, so I can turn on-spot. Furthermore I want them not to require a gearbox, so I can just attach them to the wheels. I don't really know where to start looking for one. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have heard servos have built in gearboxes, but don't they only have 180 degree rotation?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So does any body know a motor like I described in paragraph 1, or at least point me in the right direction? &lt;/p&gt;&#xA;" OwnerUserId="7612" LastEditorUserId="7613" LastEditDate="2014-12-05T00:34:03.803" LastActivityDate="2014-12-05T00:34:03.803" Title="What motors should I use that do not require gearboxes? This is a car like robot" Tags="&lt;motor&gt;" AnswerCount="2" CommentCount="2" ClosedDate="2014-12-15T11:26:19.037" ContentLicense="CC BY-SA 3.0" />
  <row Id="5063" PostTypeId="2" ParentId="5062" CreationDate="2014-12-01T12:21:44.343" Score="3" Body="&lt;p&gt;Without knowing more about your robot nobody can help size your motor. We would need to know things like weight, desired top speed, desired acceleration, where you plan to drive it (indoor vs outdoor) etc. &lt;a href=&quot;http://www.societyofrobots.com/mechanics_dynamics.shtml&quot; rel=&quot;nofollow&quot;&gt;Here&lt;/a&gt; is a good starting point tutorial at Society of Robots that covers how to size a motor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That same site also has nice explanations of the different kinds of motors &lt;a href=&quot;http://www.societyofrobots.com/actuators.shtml&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;. &lt;/p&gt;&#xA;" OwnerUserId="5695" LastActivityDate="2014-12-01T12:21:44.343" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5064" PostTypeId="2" ParentId="5058" CreationDate="2014-12-01T16:22:54.787" Score="5" Body="&lt;p&gt;Kawato M. Developped the technique called the &lt;code&gt;Minimum Commanded Torque&lt;/code&gt; and &lt;code&gt;Minimum Commanded Torque Change&lt;/code&gt; to optimize joint torques (see article from &lt;a href=&quot;http://www.cns.atr.jp/~kawato/Ppdf/kaneko05.pdf&quot; rel=&quot;nofollow&quot;&gt;Kaneko Y., Kawato M. and al., 2005&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A similar approach in the kinematics domain is the &lt;code&gt;Minimum Jerk (MJ)&lt;/code&gt; model. It have been proven to be the domain in which humans plan movements, see article from Flash &lt;a href=&quot;http://www.jneurosci.org/content/5/7/1688.full.pdf&quot; rel=&quot;nofollow&quot;&gt;T. and Hogan N., 1985&lt;/a&gt; (not to mention it is also simpler to plan trajectories in the kinematics domain). Details of implementation can be found on &lt;a href=&quot;http://www.shadmehrlab.org/book/minimum_jerk/minimumjerk.htm&quot; rel=&quot;nofollow&quot;&gt;Shadmehr R. website&lt;/a&gt;. It consist of 5th degree polynomials combined together and minimize the jerk (derivative of acceleration) over the whole trajectory, thus minimizing acceleration changes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MJ in the articular coordinate system yield a unique trajectory in the articular space, that depends on the choice of the configuration for the robot at the intermediate passage points.&#xA;MJ model in the Cartesian coordinate system yield a unique trajectory in the Cartesian space, thus multiple possible solution in the articular space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using traditional optimization techniques with the MJ model is possible. Using the Resolved Motion Rate (RMR) technique after having computed the result of a pure MJ trajectory, the optimization function is&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$z_{MJ}= \frac{1}{2}(q-q_{MJ})^TK^TK(q-q_{MJ})$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;with $z_{MJ}$ the function to minimize, $K$ the gain coefficients, $q$ the articular position, and $q_{MJ}$ the MJ articular position. Computing the gradient $h$ of such function will allow you to find $\Delta \theta$ (see &lt;a href=&quot;http://www.professeurs.polymtl.ca/luc.baron/doc/r14.pdf&quot; rel=&quot;nofollow&quot;&gt;Huo, L. and Baron, L., 2008&lt;/a&gt;, for similar technique for joint limit avoidance).&lt;/p&gt;&#xA;" OwnerUserId="7613" LastEditorUserId="7613" LastEditDate="2014-12-06T18:49:16.387" LastActivityDate="2014-12-06T18:49:16.387" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5065" PostTypeId="2" ParentId="4857" CreationDate="2014-12-01T18:00:40.183" Score="1" Body="&lt;ul&gt;&#xA;&lt;li&gt;For fast rotations, you can turn to &lt;strong&gt;transmitting information using wireless protocols or light&lt;/strong&gt;. e.g. a turret with laser for detection purpose, can have its own separate circuit and power on a rotating plane, while information is sent using a LED to its base that have a light receiver.&lt;/li&gt;&#xA;&lt;li&gt;For slow rotations, use a &lt;a href=&quot;https://en.wikipedia.org/wiki/Slip_ring&quot; rel=&quot;nofollow&quot;&gt;&lt;strong&gt;Slip Ring&lt;/strong&gt;&lt;/a&gt;. Be careful as this solution is not very good for long-lasting devices, as the mechanism deteriorate with time.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="7613" LastActivityDate="2014-12-01T18:00:40.183" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5066" PostTypeId="2" ParentId="5031" CreationDate="2014-12-01T19:53:01.217" Score="0" Body="&lt;p&gt;Alternatively, you could embrace the console commands instead of avoiding them, and still have it interact with your java program.  This would have the advantage of continuing to deliver the video stream to the notebook even if the java program fails.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd look at &lt;a href=&quot;http://linux.die.net/man/3/mkfifo&quot; rel=&quot;nofollow&quot;&gt;mkfifo&lt;/a&gt;, which will make a special file on your system that the java program could open for processing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To put data into that file, use the &lt;a href=&quot;http://linux.die.net/man/1/tee&quot; rel=&quot;nofollow&quot;&gt;tee&lt;/a&gt; command to copy the input data from STDIN to both STDOUT and the FIFO file you created.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;e.g. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;bash# mkfifo /path/to/myOutputFifo&#xA;bash# nc | tee /path/to/myOutputFifo | mplayer&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then, point your java program at &lt;code&gt;/path/to/myOutputFifo&lt;/code&gt; for input.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-12-01T19:53:01.217" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5067" PostTypeId="2" ParentId="5023" CreationDate="2014-12-01T20:31:47.193" Score="0" Body="&lt;p&gt;Your intuition is good.  SLAM and a-priori map localization both use (roughly) the same technique for localization, but your SLAM position is only as good as the confidence you have in your map.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With an a-priori map, the confidence in the map is 100%.  &lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-12-01T20:31:47.193" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5068" PostTypeId="1" CreationDate="2014-12-02T00:02:58.540" Score="1" ViewCount="169" Body="&lt;p&gt;I am looking to build an adaptable robotic arm with under-actuated three (or four) fingered hands. Before I start shelling out money, I want to test my prototypes in a simulator which would ideally&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;allow me to try out various actuators, and also possibly a tactile sensor (like a pressure sensitive resistor or a pressure sensitive conductive sheet). &lt;/li&gt;&#xA;&lt;li&gt;simulate different environments and tasks like gripping various shapes, sizes, weights etc.&lt;/li&gt;&#xA;&lt;li&gt;be able to talk to an external learning/inference programs for the adaptive part (which, I think, goes under the name 'Dexterous Manipulation Planning' tasks), with sensory feedback from tactile sensors within the simulator and also camera input from a separate module.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What are my options for such a simulator, including those that only&#xA;  partially address my requirements above?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;A bit about my background: I dont have any recent experience in building electronics hardware projects, although I have experienced it as part of my labs during electronics engineering under-graduation, a field that I have left a long time back. I am just a wannabe hobbyist now.&lt;/p&gt;&#xA;" OwnerUserId="7616" LastEditorUserId="7616" LastEditDate="2014-12-03T03:11:46.180" LastActivityDate="2014-12-03T03:11:46.180" Title="Simulator for an adaptive, under-actuated robotic gripper" Tags="&lt;robotic-arm&gt;&lt;motion-planning&gt;&lt;simulator&gt;&lt;planning&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5071" PostTypeId="1" CreationDate="2014-12-02T01:28:29.907" Score="3" ViewCount="10822" Body="&lt;p&gt;Sharp IR range finders are pretty popular sensors, but I usually see them externally mounted and directly exposed to the environment which makes them prone to being damaged or getting crufty.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a few that I'd like to use on an outdoor rover, and I'd like to cover them with some sort of transparent case to protect them dirt and impacts in the environment. What type of plastics would be completely transparent to these sensors, and where would I buy simple sheets of it?&lt;/p&gt;&#xA;" OwnerUserId="740" LastActivityDate="2014-12-02T09:03:42.147" Title="Plastic that's transparent to IR range sensors" Tags="&lt;sensors&gt;&lt;rangefinder&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5072" PostTypeId="2" ParentId="5071" CreationDate="2014-12-02T04:19:12.747" Score="6" Body="&lt;p&gt;First you need to know the wavelength of the sensor. According to the sharp sensors datasheet for GP2Y0A21YK, the cover should efficiently transmit light throughout the wavelength range of the LED(λ = 850 nm ± 70 nm).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second you need to find the exact material which can transmits the wavelength of the sensor. Some transparent plastics such as acrylic glass are used where there is need to transmit IR-light or visible light. Poly(methyl methacrylate) (PMMA) passes infrared light of up to 2,800 nm and blocks IR of longer wavelengths up to 25,000 nm. Colored PMMA varieties allow specific IR wavelengths to pass while blocking visible light (for remote control or heat sensor applications, for example). A company called ePlastics has a variety of &lt;a href=&quot;http://www.eplastics.com/Plexiglass_Acrylic_Sheet_Infrared_Transmitting&quot; rel=&quot;noreferrer&quot;&gt;plexiglas for different wavelengths&lt;/a&gt;. But there are several other suppliers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: Sometime IR-range sensor don't function properly under direct sunlight.&#xA;Further reading: &lt;a href=&quot;http://www.plasticgenius.com/2011/05/infrared-and-ultraviolet-transmission.html&quot; rel=&quot;noreferrer&quot;&gt;http://www.plasticgenius.com/2011/05/infrared-and-ultraviolet-transmission.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="745" LastEditorUserId="745" LastEditDate="2014-12-02T04:40:58.393" LastActivityDate="2014-12-02T04:40:58.393" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5073" PostTypeId="2" ParentId="5068" CreationDate="2014-12-02T04:39:04.710" Score="1" Body="&lt;p&gt;For designing you can use Solidworks. And for simple simulation use Solidworks Simulation with Solidworks Motion Analysis. You can import/export data from/to MatLab or various other programs. Sensors and actuator can be placed on arbitrary points to sense the stress, displacement, etc. Use solidworks to test and improve the design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another very good simulator is &lt;a href=&quot;http://www.cyberbotics.com/overview&quot; rel=&quot;nofollow&quot;&gt;Webots 8&lt;/a&gt;. Check out their movies section as there is a gripper similar to what you are looking for.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are various other softwares for simulation according to &lt;a href=&quot;http://www.robotcafe.com/dir/Software/Simulators/&quot; rel=&quot;nofollow&quot;&gt;this link&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="745" LastEditorUserId="745" LastEditDate="2014-12-02T04:47:37.550" LastActivityDate="2014-12-02T04:47:37.550" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5074" PostTypeId="1" AcceptedAnswerId="7963" CreationDate="2014-12-02T08:21:54.363" Score="3" ViewCount="234" Body="&lt;p&gt;I'm trying to pull analog input from a beaglebone black using &lt;a href=&quot;http://www.linux.com/learn/tutorials/787511-how-to-get-analog-input-on-the-beaglebone-black&quot; rel=&quot;nofollow&quot;&gt;this tutorial&lt;/a&gt;. However when I go to &lt;code&gt;/sys/devices&lt;/code&gt; there is no &lt;code&gt;cape-bone-iio&lt;/code&gt;. I have spoken with several other programmers and one of them suggested that the cape-bone does not work with the newer versions of Linux. However downgrading could have negative impact on the rest of the project. Is there any other solution?&lt;/p&gt;&#xA;" OwnerUserId="7226" LastEditorUserId="9176" LastEditDate="2015-06-27T15:47:32.463" LastActivityDate="2015-08-29T23:44:55.207" Title="Ubuntu ARM lacking /sys/devices/cape-bone-iio" Tags="&lt;beagle-bone&gt;&lt;linux&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5075" PostTypeId="2" ParentId="5071" CreationDate="2014-12-02T09:03:42.147" Score="7" Body="&lt;p&gt;FWIW, I once needed to create a plexiglass window/shell for a near-IR camera. Most CCD and CMOS sensors are sensitive in the near IR range (e.g. around 850nm), which is where &lt;a href=&quot;https://robotics.stackexchange.com/a/5072/7620&quot;&gt;@user3095849&lt;/a&gt; suggested your sensor sits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I went to a local plexiglass supplier and asked for samples of various sheets (they often have lots of leftover pieces) and simply tried them with my sensor.&lt;br&gt;&#xA;This was actually simpler than looking for data-sheets for the materials the supplier had.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Interestingly, many of the colored plexiglass sheets were completely transparent in IR. I ended up using one that appears a completely opaque black.&lt;/p&gt;&#xA;" OwnerUserId="7620" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2014-12-02T09:03:42.147" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5076" PostTypeId="2" ParentId="5036" CreationDate="2014-12-02T09:55:56.683" Score="1" Body="&lt;p&gt;I have tried to analyze the system, and the process is shown in the picture.&lt;br&gt;&#xA;The mechanism is called as Slider Crank Mechanisms, Please open the website (&lt;a href=&quot;http://ocw.metu.edu.tr/pluginfile.php/6885/mod_resource/content/1/ch7/7-2.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;kinematics&lt;/a&gt;) for some other analysis. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/7Rvwt.png&quot; alt=&quot;enter image description here&quot;&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$(1)~\tau = F_1 . l_{DC} . sin \alpha \implies F_1 = \dfrac{\tau}{l_{DC} . sin \alpha}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$(2)~F_1 = F_2$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$(3)~F_2 . cos \beta = F \implies F = F_2 . cos \beta = F_1 . cos \beta = \dfrac{\tau . cos \beta}{l_{DC} . sin \alpha}$&lt;/p&gt;&#xA;" OwnerUserId="7446" LastEditorUserId="158" LastEditDate="2014-12-02T13:54:25.287" LastActivityDate="2014-12-02T13:54:25.287" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5079" PostTypeId="1" AcceptedAnswerId="5091" CreationDate="2014-12-02T15:23:05.973" Score="2" ViewCount="1710" Body="&lt;p&gt;Let's first start of by explaining that I do not have a decent background in electronics and interfacing with them, so maybe this is a stupid question. I am currently trying to connect an old Harvard 33 syringe pump (&lt;a href=&quot;http://www.harvardapparatus.com/webapp/wcs/stores/servlet/product_11051_10001_44004_-1_HAI_ProductDetail___&quot; rel=&quot;nofollow noreferrer&quot;&gt;website&lt;/a&gt;, &lt;a href=&quot;http://www.instechlabs.com/Support/manuals/HA33Manual.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;PDF manual&lt;/a&gt;) to a computer, with the goal of controlling things like pump rates and direction. For this purpose, I connected the instrument to my computer using a D-sub/USB conversion dongle. I then connected to the dongle with PySerial without issues. However, whenever I try to send commands or request the instrument's output, for example &lt;code&gt;write(&quot;RUN\r&quot;)&lt;/code&gt;, the instrument does not do anything at all. Requesting data (&lt;code&gt;read(100)&lt;/code&gt;) returns only a couple of &lt;code&gt;\x00&lt;/code&gt;. I suspect I am communicating with the dongle itself rather than the pump. When the pump is turned off or unplugged, I get exactly the same results!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could anyone explain to me why my method does not work?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My Python code for reference:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;import serial # PySerial module&#xA;&#xA;# open the connection&#xA;ser = serial.Serial(&quot;/dev/ttyUSB0&quot;, baudrate=9600, bytesize=8, stopbits=2, timeout=1)&#xA;print ser # returns [Serial&amp;lt;id=0x1cc7610, open=True&amp;gt;(port='/dev/ttyUSB0', baudrate=9600, bytesize=8, parity='N', stopbits=2, timeout=1, xonxoff=False, rtscts=False, dsrdtr=False)]&#xA;&#xA;# see if the connection is truly open&#xA;print ser.isOpen() # prints True&#xA;&#xA;# run the pump motor&#xA;ser.write(&quot;RUN\r&quot;)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Additional observations:&lt;/strong&gt; when the instrument is plugged in but the above code is not running, the pump does all sorts of things at random (move one way, stop, move the other way, etc.). This behaviour is much less pronounced but still present when the code runs (and 'locks' the channel or something?). This seems to suggest that the reference voltages (logical high and low) are not properly set at 2-5V and 0-0.5V respectively&lt;/p&gt;&#xA;" OwnerUserId="7624" LastEditorUserId="7624" LastEditDate="2018-04-06T19:31:54.133" LastActivityDate="2018-04-06T19:31:54.133" Title="Communicating with syringe pump using PySerial" Tags="&lt;control&gt;&lt;usb&gt;&lt;rs232&gt;" AnswerCount="4" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5080" PostTypeId="2" ParentId="5079" CreationDate="2014-12-02T15:33:03.267" Score="2" Body="&lt;p&gt;&lt;code&gt;ser.write&lt;/code&gt; is always returning number of bytes written. It is not the response to your command. In order to get the response, you need to perform a &lt;code&gt;read&lt;/code&gt; command.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2014-12-02T15:33:03.267" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5081" PostTypeId="2" ParentId="5079" CreationDate="2014-12-02T15:34:52.333" Score="2" Body="&lt;p&gt;I don't know how it would be specifically in Python, but generally speaking, when you open a file, you get a handle which you may possibly write to or read from. Again, generally speaking, the &lt;code&gt;read&lt;/code&gt; and &lt;code&gt;write&lt;/code&gt; system calls return the number of bytes they have read or written.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your case, you are writing &lt;code&gt;&quot;VER\r&quot;&lt;/code&gt; to serial port. You get 4 because all four characters are sent. The &lt;code&gt;write&lt;/code&gt; function is not responsible for waiting and retrieving a result for you. In short, it's not an API that's specifically designed to talk with your specific device.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I imagine you should call &lt;code&gt;ser.read&lt;/code&gt; to read from the serial port.&lt;/p&gt;&#xA;" OwnerUserId="158" LastActivityDate="2014-12-02T15:34:52.333" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="5082" PostTypeId="1" CreationDate="2014-12-02T16:43:42.873" Score="1" ViewCount="661" Body="&lt;p&gt;I'm currently flying a f450 Quadcopter using a APM 2.6 flight controller.While i am able to get the quad off the ground and relatively steady horizontally(via the use of trims).However, i am unable to get the quad to hover no matter what i do.I've tried using trims on throttle,but i am still unable to get it hover.On my transmitter (WFLY WFT06II), where the throttle has &quot;ticks&quot;, i am currently stuck between too little lift and too much lift, where i push the throttle up by 1 &quot;tick&quot; and the quad goes from slowly decending to ascending, and vice versa.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any way i can get my quad to hover ( with my hands off the throttle if possible), as currently, evern with me trying to fly it, i can never get it to hover vertically as it alternates between ascending and descending whenever i fiddle with the throttle.&lt;/p&gt;&#xA;" OwnerUserId="7444" LastActivityDate="2015-01-19T01:15:30.703" Title="Unable to hover my quadcopter" Tags="&lt;quadcopter&gt;&lt;multi-rotor&gt;&lt;radio-control&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5083" PostTypeId="2" ParentId="5082" CreationDate="2014-12-02T17:00:15.833" Score="1" Body="&lt;p&gt;This would be a hack, but you could add a small amount of weight to it so the tick that makes the quad ascend slightly would now be the hover tick. &lt;/p&gt;&#xA;" OwnerUserId="5695" LastActivityDate="2014-12-02T17:00:15.833" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5084" PostTypeId="2" ParentId="4949" CreationDate="2014-12-02T17:23:45.640" Score="1" Body="&lt;p&gt;HRL has been embodied in a robot in multiple cases.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://perso.ensta-paristech.fr/~stulp/publications/pdfs/stulp11hierarchical.pdf&quot; rel=&quot;nofollow&quot;&gt;In a reaching, shelving robot&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://pdf.aminer.org/001/049/971/acquisition_of_stand_up_behavior_by_a_real_robot_using.pdf&quot; rel=&quot;nofollow&quot;&gt;In a robot learning how to stand-up&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.elen.ucl.ac.be/Proceedings/esann/esannpdf/es2013-19.pdf&quot; rel=&quot;nofollow&quot;&gt;In robot navigation.&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;However, how HRL applied in each of these cases varies. The first uses HRL to manipulate Dynamic Movement Primitives, while the second, older method focuses moreso on learning state space values.&lt;/p&gt;&#xA;" OwnerUserId="6991" LastActivityDate="2014-12-02T17:23:45.640" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5085" PostTypeId="2" ParentId="5023" CreationDate="2014-12-02T19:07:10.193" Score="1" Body="&lt;p&gt;There is no meaning of this kind of comparison. It is evident that the localization will be more accurate than SLAM. Let's see why. SLAM is usually constructed by using probabilistic methods as follows &#xA;$$&#xA;p( x_{t}, m | z,u)&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One seeks to solve the aforementioned conditional probability where $x$ is the state vector, $m$ is the map, $z$ is the observations and $u$ is the control input. For localization, also by using probabilistic methods is as follows &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;p( x_{t} | z,u, m)&#xA;$$&#xA;You will notice the $m$ in localization is provided which means the true location of the map is known with absolute certainty. This is not the case in SLAM in which we need to estimate the map $m$ which means the absolute certainty is not provided (i.e. impossible to access to the true location of the map). In SLAM, more work need to be done to filter this noise. As you can see, loosely speaking, localization is a simplified version of the SLAM where we assume the map is given. This is why the authors of &quot;Probabilistic Robotics&quot; started the discussion with localization before SLAM. That being said, SLAM is more realistic than localization.  &lt;/p&gt;&#xA;" OwnerUserId="2155" LastActivityDate="2014-12-02T19:07:10.193" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5086" PostTypeId="2" ParentId="5059" CreationDate="2014-12-03T14:41:21.587" Score="0" Body="&lt;p&gt;Many robotics textbooks should have descriptions on control algorithms for arm.  Typically, you will wrap position or velocity control around torque control.  You can use PID control for this, but i think there are other methods.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-12-03T14:41:21.587" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5087" PostTypeId="2" ParentId="5062" CreationDate="2014-12-03T15:00:55.263" Score="1" Body="&lt;p&gt;There are many places to buy raw motors, or motors with integrated gear boxes:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://solarbotics.com/catalog/motors-servos/&quot; rel=&quot;nofollow&quot;&gt;solarbotics&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.pololu.com/category/22/motors-and-gearboxes&quot; rel=&quot;nofollow&quot;&gt;Pololu&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.robotshop.com/en/motors-actuators.html&quot; rel=&quot;nofollow&quot;&gt;RobotShop&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.trossenrobotics.com/robot-parts.aspx&quot; rel=&quot;nofollow&quot;&gt;Trossen Robotics&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.robotmarketplace.com/store.html&quot; rel=&quot;nofollow&quot;&gt;Robot Marketplace&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Note that you can run most DC motors at a large range of voltages.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yes, most hobby servos are not continuous rotation.  But you can modify them (or buy them modified) to be continuous rotation.  But there are many other better options than hobby servos.  Dynamixels are nice and versatile for example.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I mentioned in the comment, you typically don't use a motor without a gearbox because it spins too fast, and doesn't have enough torque.  That is why so many motors have integrated gearboxes.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you provide info on your robot size, weight, wheel size, required speed, etc. (perhaps in another question), I'm sure we will be able to help you pick a motor and gearbox combination for your application.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-12-03T15:00:55.263" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5088" PostTypeId="2" ParentId="5082" CreationDate="2014-12-03T15:27:58.907" Score="0" Body="&lt;p&gt;What you are trying to accomplish is impossible in any practical sense; you are trying to perfectly balance the weight of your quadcopter with the force from the thrusters -- without any sensor input.  99.99999% of the possible values you could set for your throttle are either too high or too low, and the correct value may change over time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To make your quadcopter maintain a constant height, you will need to look at PID control.  For that, you will need some form of altitude sensor and possibly an accelerometer (depending on what sort of accuracy you need).&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2014-12-03T15:27:58.907" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5089" PostTypeId="2" ParentId="5079" CreationDate="2014-12-03T15:33:40.727" Score="2" Body="&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;First, ensure that your wiring is consistent with the wiring diagram on p. 24-25.  I've seen similar &quot;random&quot; behavior when the grounds are not connected properly.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Before attempting to programmatically talk to the pump, try it manually.  I use &lt;a href=&quot;http://logmett.com/index.php?/download/tera-term-485-freeware.html&quot; rel=&quot;nofollow&quot;&gt;TeraTerm&lt;/a&gt; to talk to my Harvard 33 during testing - but any like terminal software will do (even Hyperterminal).  First, check the pump's address (p. 16) - is it correct? If so, issue a &quot;VER&quot; command a few times.  &lt;strong&gt;Note that the pump's Remote LED becomes illuminated once the pump chain command is established.  If the LED does not illuminate, your serial commands will not work.&lt;/strong&gt; If the &lt;code&gt;VER&lt;/code&gt; command works, then move on to setting run modes.  When I use the pump, I issue the following sequence before attempting to run the pump: &lt;code&gt;PAR ON, MOD PRO, DIA A 26.600, DIR INF&lt;/code&gt;. A meaningful sequence of configuration commands is key: the pump has a &lt;em&gt;bit&lt;/em&gt; of intelligence and will respond appropriately to erroneous and/or conflicting commands.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If the pumped responded positively to those commands, attempt to run the configured syringe: &lt;code&gt;RAT A 1.0000 MM&lt;/code&gt; and then &lt;code&gt;RUN&lt;/code&gt;.  If that works, you can issue the stop command: &lt;code&gt;STP&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If the pump checks out manually, &lt;em&gt;then&lt;/em&gt; proceed to programmatic use.  When doing so, take extra care to follow the formatting rules for rates, etc.  The interpretation of the  &lt;em&gt;ffffff&lt;/em&gt; rate and diameter specifications is inflexible, and the rules must be followed exactly (see p.18 for example).  Note that the pump also has a strict set of rules for command usage during operation (i.e. don't issue a &lt;code&gt;DIA&lt;/code&gt; command while the pump is running).  Likewise, note that the pump chain commands are ignored if the device is in SET mode (p. 16).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;When looking for return characters, keep in mind how mind-boggling slow 9600 baud actually is.  You'll likely have to set up a polling routine to handle the pump's response.  As shown on p.16, the response should lead with a '\r' and end with a '\n'.  For example: you might set up a loop to wait until the '\n' char is seen once a command has been issued.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Likewise, be prepared to parse and handle the pump's command responses: &lt;code&gt;?&lt;/code&gt;, &lt;code&gt;NA&lt;/code&gt;, and &lt;code&gt;OOR&lt;/code&gt; (p.20). &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Good luck!&lt;/p&gt;&#xA;" OwnerUserId="532" LastEditorUserId="532" LastEditDate="2014-12-03T16:02:05.027" LastActivityDate="2014-12-03T16:02:05.027" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5090" PostTypeId="2" ParentId="5059" CreationDate="2014-12-03T16:15:14.113" Score="1" Body="&lt;p&gt;Robotic arm are basically controlled using torque input to reach a position reference. Most common control techniques for such robot are &lt;code&gt;computed torque&lt;/code&gt; (also called &lt;code&gt;inverse dynamics approach&lt;/code&gt;), and &lt;code&gt;P-D controller with gravity compensation&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can find all the information you need on the bible of robot modeling and control, &lt;code&gt;Robot Modeling and Control, Spong W. and al., 2005&lt;/code&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS: searching papers about that subject is a very bad idea since this is no new controller that you are looking for, this is well established control techniques.&lt;/p&gt;&#xA;" OwnerUserId="7613" LastActivityDate="2014-12-03T16:15:14.113" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5091" PostTypeId="2" ParentId="5079" CreationDate="2014-12-03T17:35:36.107" Score="1" Body="&lt;p&gt;Thank you for directly linking to the manual -- that makes answering questions like this much quicker.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I connected the instrument to my computer using a D-sub/USB conversion&#xA;  dongle.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I'm assuming that you've already figured out that the thing that &lt;em&gt;looks&lt;/em&gt; like a standard 9-pin D-sub connector on the Harvard Model 33 is completely incompatible with standard RS-232, and you have (or can make) something that looks like the proper cable between a PC and the pump.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first thing I would do is &quot;beep out&quot; the cable:&#xA;The cable should have a DB9 female on one end, and a RJ11 plug on the other end,&#xA;and connections as shown on in Appendix D and Appendix F (p. 24-25) of the manual.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as I can tell, for your application, you don't wan't &lt;em&gt;anything&lt;/em&gt; plugged in to the &quot;I/O&quot; D-sub connector on the back of the pump.&#xA;Instead, you want the RJ-11 plug end of your cable plugged into the &quot;Port #1&quot; RJ-11 socket on the back of the pump; and the DB9 female end of your cable plugged into the male DB-9 connector on the USB-to-RS232 dongle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Throwback1986 has many good tips.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Requesting data (read(100)) returns only a couple of \x00.&#xA;  ...&#xA;  Could anyone explain to me why my method does not work?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;These pumps are designed to be connected in a chain,&#xA;and they are designed to &lt;em&gt;ignore&lt;/em&gt; commands sent to other pumps in a chain.&#xA;Also, they ignore commands sent while the pump is in setting mode (see p. 16).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I might run a script like this to see which (if any) address the pump is responding to:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;# communicate with a Harvard 33 syringe pump&#xA;# http://robotics.stackexchange.com/questions/5079/communicating-with-syringe-pump-using-pyserial&#xA;# pump website: http://www.harvardapparatus.com/webapp/wcs/stores/servlet/product_11051_10001_44004_-1_HAI_ProductDetail___&#xA;# pump manual: http://www.instechlabs.com/Support/manuals/HA33Manual.pdf&#xA;# WARNING: untested code&#xA;&#xA;import serial # PySerial module: http://pyserial.sf.net/&#xA;&#xA;# open the connection&#xA;ser = serial.Serial(port=&quot;/dev/ttyUSB0&quot;, baudrate=9600, stopbits=STOPBITS_TWO, timeout=0.5)&#xA;print ser&#xA;&#xA;# see if the connection is truly open&#xA;print ser.isOpen()&#xA;&#xA;# See if the pump is at address 0:&#xA;# try to get the software version of that pump&#xA;# using the VER command from p. 19 of the manual&#xA;command_string = &quot;VER\r&quot;&#xA;ser.write( command_string )&#xA;response = ser.read(100)&#xA;print &quot;version: %r.&quot; % response&#xA;&#xA;# guess every possible address 0 to 99&#xA;for guessed_address in range (0, 100):&#xA;    # request prompt&#xA;    prompt_request = &quot;%d\r&quot; % guessed_address&#xA;    ser.write( prompt_request )&#xA;    response = ser.read(100)&#xA;    print &quot;prompt: %r.&quot; % response&#xA;&#xA;    # try to get the software version of that pump&#xA;    # using the VER command from p. 19 of the manual&#xA;    command_string = &quot;%dVER\r&quot; % guessed_address&#xA;    ser.write( command_string )&#xA;    response = ser.read(100)&#xA;    print &quot;version: %r.&quot; % response&#xA;&#xA;print &quot;All done.&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Does this script show any &quot;interesting&quot; responses?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I had this pump in front of me, I would follow the &quot;Configuring the Pump Chain&quot; process on p. 14 to figure out the current pump address and baud rate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does the pump display &quot;b:9600&quot; on the pump's front LED display when I do that?&#xA;Does the pump display &quot;Adr:00&quot; on the pump's front LED display when I do that?&#xA;If not, I would go through the &quot;Configuring the Pump Chain&quot; on p. 14 to get that set.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I might try getting pyserial to communicate through that USB dongle to and from some other device, perhaps a simple loop-back wire,&#xA;just to make sure that pyserial works with that USB dongle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Good luck!&lt;/p&gt;&#xA;" OwnerUserId="187" LastActivityDate="2014-12-03T17:35:36.107" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5092" PostTypeId="2" ParentId="4996" CreationDate="2014-12-03T18:02:59.390" Score="2" Body="&lt;p&gt;If you are just starting out with quadcopters, it might be better if you buy an off-the-shelf quadcopter first.  Then hack it for your needs while learning the ropes.  (i.e. you wouldn't build a car, bike, computer, etc. from scratch if you've never taken one apart, hacked it, and completely understand what every piece is for.  so why do this with a robot?)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not sure, but i kind of doubt you will be able to do some of the low-level flight controls in Python.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-12-03T18:02:59.390" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5094" PostTypeId="2" ParentId="4857" CreationDate="2014-12-03T20:44:29.227" Score="2" Body="&lt;p&gt;If your number &lt;em&gt;n&lt;/em&gt; is small enough then there are simpler and more durable ways to hook things up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Car steering wheel style: these wheels turn ~ 5 times from steering lock to lock,  I understand they use coiled flat flex cable that coils around the steering shaft with 90degree bends/turns on the ends to mate to connectors on the steering wheel and the static point of the steering column. If you have the volume this is neat, tidy and simple.  Try scavenging cables from inkjet printers, heads for some low friction stuff.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have a long distance between the rotating part and the farthest no rotating part, try stuffing excess cable in a tube between the two place. No special connectors necessary.  Some cables can take a lot of turns before kinking to the point of damage if set up this way.  I have heard this is the easiest way to get power from a wind generator down a pole to ground; it works because random wind patterns usually cancel the twists out and regular maintenance takes care of biases.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both of these only work for small &lt;em&gt;n&lt;/em&gt; with little construction fuss.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Have fun building your toys!&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;   Albert.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="7627" LastActivityDate="2014-12-03T20:44:29.227" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5095" PostTypeId="1" CreationDate="2014-12-03T22:43:12.587" Score="5" ViewCount="541" Body="&lt;p&gt;We want our wheeled robot to follow a (rather short) trajectory. We wrote an LQR controller, which works well in simulation. However, our robot offers two problems:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1.) The reported state information does not seem to be very accurate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2.) Its motion seems to underly some random deviations. We did not succeed in establishing a good model to predict the robots motion with a given control input.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it possible to manage these problems with the LQR controller? If yes, how?&lt;/p&gt;&#xA;" OwnerUserId="7630" LastActivityDate="2014-12-04T19:20:32.330" Title="following a trajectory with LQR controller" Tags="&lt;control&gt;&lt;wheeled-robot&gt;&lt;kinematics&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5096" PostTypeId="2" ParentId="5095" CreationDate="2014-12-04T00:07:09.317" Score="1" Body="&lt;p&gt;It depends on the actual source of problems. If you just have a lot of noise in your state estimate you can improve things a bit by adjusting weights to be less aggressive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the problem is that your state estimate is consistently far off you can't do anything until you fix your estimator. Quite often in vehicle control this is actually the biggest challenge.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2014-12-04T00:07:09.317" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5097" PostTypeId="1" CreationDate="2014-12-04T05:47:47.033" Score="5" ViewCount="65" Body="&lt;p&gt;Suppose we need to detect the occurrence of a special event in a large area(e.g. a city). If we need that each point being visited every h hours, how could we find the optimal number of robots for cooperative surveillance? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Notice that there is no control center!&lt;/p&gt;&#xA;" OwnerUserId="7371" LastActivityDate="2014-12-04T11:01:12.253" Title="optimal number of robots for cooperative surveillance" Tags="&lt;multi-agent&gt;&lt;swarm&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5098" PostTypeId="2" ParentId="5097" CreationDate="2014-12-04T11:01:12.253" Score="5" Body="&lt;p&gt;Let's say your environment is a weighted graph. The weight of each edge shows the distance. Edges ($E$) could be roads and nodes ($V$) could be junctions. Let's further assume that each robot has velocity $v$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You say each &quot;point&quot; needs to be surveyed every $h$ hours. I assume that means each point in the city, which means each point in every road and junction. Since this is a city, we can also assume that the graph is connected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a final assumption, let's say that the junctions have zero dimension.  That is a single point in the junction is taken as the graph node and the distances from the edges of the roads to that point are added to that roads weight (road length). This implies that there is no time spent in a node and all time is spent walking the edges.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Lower Bound&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;First, let's find a lower bound to the number of robots. If we sum the weights of the edges, we get the total distance that needs to be travelled. The minimum number of robots required is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$N_{min} = \bigg\lceil \dfrac{\sum_{i \in E} w_i}{h \times v} \bigg\rceil$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it was possible for the robots to travel the edges without travelling on each road more than once, then this lower bound is the actual number required. Think of it this way. Imagine the city is like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;              X----------X&#xA;             /            \&#xA;            /              \&#xA;           /                \&#xA;          X                  X&#xA;           \                /&#xA;            \              /&#xA;             \            /&#xA;              X----------X&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And imagine each edge is 1Km, and the speed of the robots ($v$) is 0.7Km/h. Imagine $h$ is two hours. Each robot can to travel $h \times v = 2 \times 0.7 = 1.4Km$ in that two hours. Now if you place robots at regular intervals around the loop and they all go for example clock-wise, then just as the 2 hours limit is getting expired on a point, another robot should arrive at that point. This means that the robots should be placed at 1.4Km intervals. Simply dividing the circumference of the loop by 1.4 (and taking the ceiling) gives the number of required robots.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: An &lt;a href=&quot;https://en.wikipedia.org/wiki/Eulerian_path&quot;&gt;Eulerian graph&lt;/a&gt; is essentially a twisted loop and for such graphs the formula above gives the exact number of required robots. Unfortunately, a city is far from an Eulerian graph.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Upper Bound&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;This is a harder problem. However, here is an idea.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, let's solve the problem for another simple case. Imagine the graph is just a line:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;     X--------X------------------X-------X----X-----------X&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then, the robots can't circle around anymore, but they have to &quot;patrol&quot;. That means they have to use half of their time going one way and the other half coming back. In other words, the number of robots needed becomes:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$N_{min} = \bigg\lceil \dfrac{\sum_{i \in E} w_i}{(h/2) \times v} \bigg\rceil$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another point of view could be robots that loop this path by going to one end and coming back to the other end in which case the number of robots would be:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$N_{min} = \bigg\lceil \dfrac{2 \times \sum_{i \in E} w_i}{h \times v} \bigg\rceil$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which is exactly the same as patrolling the path.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, here is an algorithm that gives an upper bound to the number of needed robots.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; 1. do&#xA; 2.   G' = G with marked edges removed&#xA; 3.   if loop L exists in G'&#xA; 4.     put robots looping in L&#xA; 5.     mark edges of L&#xA; 6.   else&#xA; 7.     find a random unexpandable path P in G'&#xA; 8.     find the shortest path P' in G that connects both ends of P&#xA; 9.     create a loop L by combining P and P'&#xA;10.     N1 = number of robots needed to patrol P&#xA;11.     N2 = number of robots needed to loop in L&#xA;12.     if N1 &amp;lt; N2&#xA;13.       put robots patrolling P&#xA;14.       mark edges of P&#xA;15.     else&#xA;16.       put robots looping in L&#xA;17.       mark edges of L&#xA;18. while unvisited edges remain&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Notes:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At 3, we try to extract out Eulerian loops out of the graph for which we know the optimal answer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At 7, we try to get paths as long as possible out of the graph and have robots patrolling them. Make sure the path is expanded as far as possible. That is, if there is an unmarked edge connected to any end of the path, just augment the path with that edge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The purpose for 8 and 9 is that, having robots patrolling the found path may be far from optimal. In fact, if we allow the robots to move from one end of the path to the other end via the edges that are possible already marked, then perhaps we find a loop which results in a smaller number of robots. 10 and 11 calculate the number of robots for the two possible cases and 12 decides which one was better.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is an example. Imagine the following graph:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;              X----------X&#xA;             /            \&#xA;            /              \&#xA;           /                \&#xA;          X                  X&#xA;           \                /&#xA;            \              /&#xA;             \            /&#xA;              X----------X&#xA;             /            \&#xA;            /              \&#xA;           /                \&#xA;          X                  X&#xA;           \                /&#xA;            \              /&#xA;             \            /&#xA;              X----------X&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;First, we find a loop and mark it. Imagine this is the top loop:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;              X**********X&#xA;             *            *&#xA;            *              *&#xA;           *                *&#xA;          X                  X&#xA;           *                *&#xA;            *              *&#xA;             *            *&#xA;              X**********X&#xA;             /            \&#xA;            /              \&#xA;           /                \&#xA;          X                  X&#xA;           \                /&#xA;            \              /&#xA;             \            /&#xA;              X----------X&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Now we are left with this path:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;              X          X&#xA;             /            \&#xA;            /              \&#xA;           /                \&#xA;          X                  X&#xA;           \                /&#xA;            \              /&#xA;             \            /&#xA;              X----------X&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;We can either patrol the path with a larger number of robots, or make a loop with an edge previously visited and have fewer robots travelling it. In the end, two loops is better.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The algorithm could have also found a different solution. For example, the first loop could have been the outer loop:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;              X**********X&#xA;             *            *&#xA;            *              *&#xA;           *                *&#xA;          X                  X&#xA;           *                *&#xA;            *              *&#xA;             *            *&#xA;              X----------X&#xA;             *            *&#xA;            *              *&#xA;           *                *&#xA;          X                  X&#xA;           *                *&#xA;            *              *&#xA;             *            *&#xA;              X**********X&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;After which we are left with the center edge as a path:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;              X----------X&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And obviously, it's better to have robot(s) patrolling it than to create a very large loop out of the visited edges.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is interesting to note that in this case, the shortest path &lt;code&gt;P'&lt;/code&gt; as in the algorithm above is in fact this path itself. As a result, the loop is essentially robots that loop between the ends of this path (rather than patrolling only their specific portion of the path). The optimal number of robots in either way is the same as mentioned before.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Optimal Number&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;I really don't know. It is possible (but I haven't proven anything) that this problem doesn't even belong to $P$, so there may not be any useful solution for it at all (again, I may be wrong).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you find that the &quot;Upper Bound&quot; algorithm doesn't provide small enough number of robots, for example by examining the graph yourself and find obvious optimizations, you could also always try optimization algorithms (such as &lt;a href=&quot;https://en.wikipedia.org/wiki/Genetic_algorithm&quot;&gt;genetic algorithms&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Notice that there is no control center!&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Mind you, my solution is to calculate the paths each robot needs to circle in (or patrol) offline and then program the robots to keep to their path forever. This doesn't address problems such as a robot breaking and others having to cover for it for example.&lt;/p&gt;&#xA;" OwnerUserId="158" LastActivityDate="2014-12-04T11:01:12.253" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5099" PostTypeId="1" AcceptedAnswerId="5102" CreationDate="2014-12-04T12:41:32.373" Score="3" ViewCount="366" Body="&lt;p&gt;I am looking for possible ISO standards for robot safety specifically for software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have come across &lt;a href=&quot;http://www.eu-robotics.net/cms/upload/euRobotics_Forum/ERF2014_presentations/day_2/Industrial_HRC_-_ERF2014.pdf&quot; rel=&quot;nofollow&quot;&gt;this presentation&lt;/a&gt; that mentions many ISO standards and it's not very clear which exactly applies to software. The most probable ones are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;ISO 10218-1&lt;/li&gt;&#xA;&lt;li&gt;ISO 13849-1 / IEC 62061&lt;/li&gt;&#xA;&lt;li&gt;IEC 61508&lt;/li&gt;&#xA;&lt;li&gt;ISO/TS 15066&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The safety related to software seems to be categorized as Level 4 and Level 6 in the presentation above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would appreciate if anyone with knowledge in this area could point me to the right standard. They are quite expensive so I could simply go through them all to see which one applies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a side note, some standards like C have their standard &quot;draft&quot; freely available. Could there be free copies of drafts for those standards too?&lt;/p&gt;&#xA;" OwnerUserId="158" LastActivityDate="2014-12-05T11:33:08.767" Title="Robot safety standards for software" Tags="&lt;software&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5100" PostTypeId="2" ParentId="5095" CreationDate="2014-12-04T19:20:32.330" Score="2" Body="&lt;p&gt;It is possible under limited conditions. The &lt;a href=&quot;http://en.wikipedia.org/wiki/Linear-quadratic_regulator&quot; rel=&quot;nofollow&quot;&gt;Linear-quadratic regulator (LQR) controller&lt;/a&gt; assumes that the system under control has linear dynamics and that the transition and observation models are deterministic. While in practice it works if these conditions are violated, the more extreme the violation the more likely it is to fail.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An alternative is the &lt;a href=&quot;http://en.wikipedia.org/wiki/Linear-quadratic-Gaussian_control&quot; rel=&quot;nofollow&quot;&gt;Linear-quadratic-gaussian controller&lt;/a&gt; because it allows for noise in the motions and percepts. A challenge with using LQG is that you must have model of the noise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More specifically, assume you have the following dynamical model:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\dot{\mathbf{x}}(t) = A\mathbf{x}(t) + B\mathbf{u}(t) + \mathbf{v}(t), \mathbf{v}(t) \sim \mathcal{N}(0, M) \\&#xA;\mathbf{y}(t) = C\mathbf{x}(t) + \mathbf{w}(t), \mathbf{w}(t) \sim \mathcal{N}(0, N)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $\mathbf{x}(t)$, and $\mathbf{u}(t)$ represent the state of the system and the control applied to at it at time $t$ respectively, $A$, $B$, and $C$ represent the natural dynamics, the control dynamics, and the observation dynamics respectively, and finally $\mathbf{v}(t)$ and $\mathbf{w}(t)$ represent noise of the motion and observation models respectively and are zero mean gaussian distributions with covariances $M$ and $N$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to use LQG you need to know $A$, $B$, $C$, $M$, and $N$ as well as the initial state of the system, i.e. $\mathbf{x}(0)$.&lt;/p&gt;&#xA;" OwnerUserId="177" LastActivityDate="2014-12-04T19:20:32.330" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5101" PostTypeId="2" ParentId="1246" CreationDate="2014-12-04T21:17:54.407" Score="0" Body="&lt;p&gt;I know it's not &lt;em&gt;software out of the box&lt;/em&gt; but if you are into programming, I suggest you to look into the gaming library GLFW3. It's the best library that is used in games and OpenGL, and you have many functions for &lt;a href=&quot;http://www.glfw.org/docs/latest/group__input.html&quot; rel=&quot;nofollow&quot;&gt;controlling all input devices&lt;/a&gt;. It also has bindings for your &lt;a href=&quot;http://www.glfw.org/download.html&quot; rel=&quot;nofollow&quot;&gt;favorite language&lt;/a&gt; &lt;em&gt;probably&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerDisplayName="user7586" LastEditorUserId="158" LastEditDate="2014-12-09T12:58:23.820" LastActivityDate="2014-12-09T12:58:23.820" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5102" PostTypeId="2" ParentId="5099" CreationDate="2014-12-05T07:27:07.140" Score="3" Body="&lt;p&gt;I believe the EN 61508 is the most important one from the software point of view.&#xA;But it is not only valid for robots. This is one of the most important standard for industrial development. It defines the safety of a system, that it has to be free of &quot;unjustifyable risks&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are all the requirements for:&#xA; - rts&#xA; - redundancy (including redundant software)&#xA; - SIL&#xA; - software development process and documentation&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More detailed: &lt;br&gt;&#xA;61508-1 is pretty general &lt;br&gt;&#xA;61508-2 is lot about electronics, including programmable electronic parts &lt;br&gt;&#xA;61508-3 is the main part about software &lt;br&gt;&#xA;61508-4 has nothing to do with software, just some acronym's and the rest of the overhead you need to understand the rest&lt;br&gt;&#xA;61508-5 How to calculate SIL &lt;br&gt;&#xA;61508-6 Examples of Part 2 and 3 &lt;br&gt;&#xA;61508-7 Another genral part about application&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From this standard lot of other standards are inherit: &lt;br&gt;&#xA;61511 for process industry &lt;br&gt;&#xA;60335 for home &lt;br&gt;&#xA;60601 for medical applications &lt;br&gt;&#xA;62061 for industrial tools &lt;br&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For source I have some university scripts, unfortunatly they are in german:&lt;br&gt;&#xA;&lt;a href=&quot;http://ext02.fh-kaernten.at/rts/intern/downloads/RTS/RTS1/Sicherheitsnormen.pdf&quot; rel=&quot;nofollow&quot;&gt;about 61508&lt;/a&gt; &lt;br&gt;&#xA;&lt;a href=&quot;http://ext02.fh-kaernten.at/rts/intern/downloads/RTS/RTS1/SIL.pdf&quot; rel=&quot;nofollow&quot;&gt;general info about SIL&lt;/a&gt; &lt;br&gt;&lt;/p&gt;&#xA;" OwnerUserId="6911" LastEditorUserId="6911" LastEditDate="2014-12-05T11:33:08.767" LastActivityDate="2014-12-05T11:33:08.767" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5103" PostTypeId="1" AcceptedAnswerId="6361" CreationDate="2014-12-05T09:37:54.860" Score="1" ViewCount="69" Body="&lt;p&gt;I'm connecting an arduino to a &lt;a href=&quot;http://www.dfrobot.com/wiki/index.php?title=SPI_LCD_Module_%28SKU:DFR0091%29&quot; rel=&quot;nofollow&quot;&gt;lcd screen&lt;/a&gt; using the following &lt;a href=&quot;http://www.dfrobot.com/image/data/DFR0091/LCD12864RSPI%20v1.0.zip&quot; rel=&quot;nofollow&quot;&gt;library&lt;/a&gt;. For the display code I have written a simple piece of code that should display 2 picture os eyes (1 angry one friendly) and switching at regular intervals, however the display keeps showing me weird pixels around the borders that shouldn't be there, by making it show the same eyes twice this can be fixed however as long as I have both eyes being used it runs into trouble. Here is my code: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    void setup()&#xA;    {&#xA;      LCDA.initDriverPin(2,7,10); &#xA;      LCDA.Initialise(); // INIT SCREEN  &#xA;      delay(100);&#xA;    }&#xA;    void loop(){&#xA;      LCDA.CLEAR(); //empty screen &#xA;      delay(100);//wait for command to finish &#xA;&#xA;      LCDA.DrawFullScreen(eyes);&#xA;      delay(5000); //wait 5 seconds with eyes on the screen &#xA;&#xA;      LCDA.CLEAR();//clear screen&#xA;      delay(100);//wait for command to finish &#xA;      LCDA.DrawFullScreen(angry); //show me the angry face &#xA;      delay(5000);//wait 5 seconds with angry face on screen &#xA;    }&#xA;&#xA;/*------------------------------------------------------------------------------&#xA;; DFrobot bitmap - size 128x64 pixels, black/white image&#xA;------------------------------------------------------------------------------*/ &#xA;unsigned char eyes[]={&#xA;0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x02 ,0xE0 ,0x00 ,0x00 ,0x00 ,0xF8 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x1E ,0xF8 ,0x00 ,0x00 ,0x00 ,0xFE ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x3E ,0xF8 ,0x00 ,0x00 ,0x02 ,0xFE ,0x80 ,0x00 ,0x00 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0xFE ,0xFC ,0x00 ,0x00 ,0x06 ,0xFE ,0xC0 ,0x00 ,0x00 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0xFE ,0xFE ,0x00 ,0x00 ,0x0E ,0xFE ,0xF0 ,0x00 ,0x00 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x00 ,0x02 ,0xFE ,0xFE ,0x00 ,0x00 ,0x0E ,0xFE ,0xF8 ,0x00 ,0x00 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x00 ,0x0E ,0xFE ,0x7E ,0x00 ,0x00 ,0x1E ,0xC6 ,0xFC ,0x00 ,0x00 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x00 ,0x1E ,0xF8 ,0x3E ,0x00 ,0x00 ,0x1E ,0x80 ,0xFE ,0x00 ,0x00 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x00 ,0x3E ,0xF0 ,0x1E ,0x80 ,0x00 ,0x3E ,0x80 ,0xFE ,0x00 ,0x00 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x00 ,0x3E ,0xC0 ,0x1E ,0x80 ,0x00 ,0x3E ,0x00 ,0x7E ,0xC0 ,0x00 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x00 ,0x7E ,0x80 ,0x1E ,0x80 ,0x00 ,0x3E ,0x00 ,0x3E ,0xC0 ,0x00 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x00 ,0xFE ,0x00 ,0x0E ,0xC0 ,0x00 ,0x3E ,0x00 ,0x0E ,0xE0 ,0x00 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x00 ,0xFE ,0x00 ,0x0E ,0xC0 ,0x00 ,0x7E ,0x00 ,0x0E ,0xE0 ,0x00 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x00 ,0xFC ,0x00 ,0x06 ,0xC0 ,0x00 ,0x7E ,0x00 ,0x06 ,0xF0 ,0x00 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x02 ,0xFC ,0x00 ,0x06 ,0xE0 ,0x00 ,0xFE ,0x00 ,0x02 ,0xF8 ,0x00 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x02 ,0xF8 ,0x00 ,0x06 ,0xE0 ,0x00 ,0xFE ,0x00 ,0x02 ,0xF8 ,0x00 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x06 ,0xF0 ,0x00 ,0x06 ,0xE0 ,0x00 ,0xFC ,0x00 ,0x00 ,0xFC ,0x00 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x0E ,0xE0 ,0x00 ,0x02 ,0xE0 ,0x00 ,0xFC ,0x00 ,0x00 ,0xFE ,0x00 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x0E ,0xE0 ,0x00 ,0x02 ,0xE0 ,0x00 ,0xFC ,0x00 ,0x00 ,0xFE ,0x00 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x1E ,0xC0 ,0x00 ,0x02 ,0xE0 ,0x00 ,0xF8 ,0x00 ,0x00 ,0x3E ,0x00 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x1E ,0xC0 ,0x00 ,0x02 ,0xE0 ,0x00 ,0xF8 ,0x00 ,0x00 ,0x3E ,0x80 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x1E ,0x80 ,0xFE ,0xC2 ,0xE0 ,0x00 ,0xF8 ,0x7E ,0xF0 ,0x1E ,0x80 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x3E ,0x00 ,0xFE ,0xF2 ,0xE0 ,0x00 ,0xF8 ,0xFE ,0xF8 ,0x1E ,0x80 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x3E ,0x02 ,0xFE ,0xFA ,0xE0 ,0x00 ,0xF8 ,0xFE ,0xF8 ,0x1E ,0xC0 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x3E ,0x06 ,0xF2 ,0xFE ,0xF0 ,0x00 ,0xFA ,0xFC ,0xFC ,0x1E ,0xC0 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x7E ,0x0E ,0xC0 ,0xFE ,0xF0 ,0x00 ,0xFE ,0xC0 ,0x7E ,0x0E ,0xC0 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x7E ,0x0E ,0x80 ,0x7E ,0xF0 ,0x00 ,0xFE ,0xC0 ,0x3E ,0x0E ,0xC0 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x7E ,0x1E ,0xFE ,0x3E ,0xF0 ,0x00 ,0xFE ,0x8E ,0xFE ,0x0E ,0xC0 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0xFC ,0x1E ,0xEE ,0x9E ,0xF0 ,0x00 ,0xFE ,0xBE ,0xFE ,0x0E ,0xE0 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0xFC ,0x1E ,0x82 ,0xDE ,0xF0 ,0x00 ,0xFE ,0xBC ,0x6E ,0x86 ,0xE0 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0xFC ,0x3E ,0x82 ,0xDE ,0xF0 ,0x00 ,0xFE ,0xB8 ,0x2E ,0xC6 ,0xE0 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0xFC ,0x3E ,0x80 ,0xDE ,0xF0 ,0x00 ,0xFE ,0xB0 ,0x2E ,0xC6 ,0xF0 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0xF8 ,0x3C ,0x3E ,0x5E ,0xE0 ,0x00 ,0xFE ,0x9E ,0x8E ,0xC2 ,0xF0 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0xF8 ,0x3C ,0x7E ,0x9E ,0xE0 ,0x00 ,0xFE ,0xBE ,0xD6 ,0xC2 ,0xF0 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0xF0 ,0x7C ,0x7E ,0xDE ,0xE0 ,0x00 ,0xFE ,0xBE ,0xC6 ,0xE2 ,0xF8 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0xF0 ,0x7C ,0xFE ,0xDE ,0xE0 ,0x00 ,0xFE ,0xFE ,0xF6 ,0xE2 ,0xFC ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0xF0 ,0x7A ,0xFE ,0xDE ,0xE0 ,0x00 ,0xFE ,0xFE ,0xF6 ,0xE2 ,0xFC ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0xF0 ,0x7A ,0xFE ,0xDE ,0xE0 ,0x00 ,0xFE ,0xFE ,0xF2 ,0xE0 ,0xFC ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0xF0 ,0x7A ,0xFE ,0xDE ,0xE0 ,0x00 ,0xFE ,0xFE ,0xF2 ,0xE0 ,0xFC ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0xF0 ,0x7A ,0xFE ,0xDE ,0xE0 ,0x00 ,0xFE ,0xFE ,0xF2 ,0xE0 ,0xFC ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0xF0 ,0x7A ,0xFE ,0xDE ,0xE0 ,0x00 ,0xFE ,0xFE ,0xF2 ,0xE0 ,0xFC ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0xF0 ,0x7A ,0xFE ,0xDE ,0xE0 ,0x00 ,0xFE ,0xFE ,0xF2 ,0xE0 ,0xFC ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x02 ,0xF0 ,0x7A ,0xFE ,0xFE ,0xE0 ,0x00 ,0xFE ,0xFE ,0xFA ,0xE0 ,0xFC ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x02 ,0xF0 ,0x7A ,0xFE ,0xFE ,0xE0 ,0x00 ,0xFE ,0xFE ,0xFA ,0xE0 ,0xFC ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x02 ,0xF0 ,0x7A ,0xFE ,0xFE ,0xE0 ,0x00 ,0xFE ,0xFE ,0xFA ,0xE0 ,0xFC ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x02 ,0xE0 ,0x7A ,0xFE ,0xFE ,0xE0 ,0x00 ,0xFE ,0xFE ,0xFA ,0xE0 ,0xFC ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x02 ,0xE0 ,0x7E ,0xFE ,0xFE ,0xE0 ,0x00 ,0xFE ,0xFE ,0xFA ,0xE0 ,0xFC ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x02 ,0xFC ,0x7E ,0xFE ,0xFE ,0xE0 ,0x00 ,0xFE ,0xFE ,0xFE ,0xC0 ,0xFC ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x02 ,0xFE ,0x3E ,0xFE ,0xFE ,0xE0 ,0x00 ,0xFE ,0xFE ,0xFE ,0xCE ,0xFC ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x02 ,0xFE ,0xFE ,0xFE ,0xFE ,0xC0 ,0x00 ,0x7E ,0xFE ,0xFE ,0xFE ,0xFC ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x02 ,0xFE ,0xFE ,0xFE ,0xFE ,0xC0 ,0x00 ,0x7E ,0xFE ,0xFE ,0xFE ,0xFC ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0xFE ,0xFE ,0xFE ,0xFE ,0xC0 ,0x00 ,0x7E ,0xFE ,0xFE ,0xFE ,0xF8 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x3E ,0xFE ,0xFE ,0xFE ,0xC0 ,0x00 ,0x3E ,0xFE ,0xFE ,0xFE ,0x80 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x06 ,0xFE ,0xFE ,0xFE ,0x80 ,0x00 ,0x3E ,0xFE ,0xFE ,0xFC ,0x00 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x00 ,0x3E ,0xFE ,0xE0 ,0x00 ,0x00 ,0x00 ,0xFE ,0xFE ,0x80 ,0x00 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 &#xA;};&#xA;unsigned char angry[]={&#xA;0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 &#xA;,0x00 ,0x30 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 &#xA;,0x00 ,0x7C ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x02 ,0x00 ,0x00 &#xA;,0x00 ,0x7E ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x0E ,0x80 ,0x00 &#xA;,0x00 ,0x7E ,0xC0 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x3E ,0x80 ,0x00 &#xA;,0x00 ,0x1E ,0xE0 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0xFE ,0x80 ,0x00 &#xA;,0x00 ,0x06 ,0xF8 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0xFE ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0xFE ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x06 ,0xF8 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0xFE ,0x80 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x1E ,0xE0 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x3E ,0xC0 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x7E ,0xE0 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0xFE ,0xF0 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0xFE ,0xF8 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0xFE ,0xFC ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x02 ,0xFE ,0xFC ,0x00 ,0x00 &#xA;,0x00 ,0x02 ,0xFC ,0xFE ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x0E ,0xF6 ,0xFE ,0x00 ,0x00 &#xA;,0x00 ,0x06 ,0xF0 ,0x7E ,0x80 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x3E ,0xE0 ,0xFE ,0x00 ,0x00 &#xA;,0x00 ,0x0E ,0xE0 ,0x1E ,0xE0 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x7E ,0x80 ,0x7E ,0x80 ,0x00 &#xA;,0x00 ,0x1E ,0xC0 ,0x1E ,0xF8 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0xFE ,0x00 ,0x3E ,0xC0 ,0x00 &#xA;,0x00 ,0x3E ,0xE0 ,0x1E ,0xFE ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x06 ,0xFE ,0x00 ,0x7E ,0xE0 ,0x00 &#xA;,0x00 ,0x3E ,0xF0 ,0x0C ,0xFE ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x1E ,0xF2 ,0x00 ,0xE6 ,0xE0 ,0x00 &#xA;,0x00 ,0x7E ,0x30 ,0x04 ,0x3E ,0xC0 ,0x00 ,0x00 ,0x00 ,0x00 ,0x3E ,0xC2 ,0x8E ,0xE2 ,0xF0 ,0x00 &#xA;,0x00 ,0x7C ,0x30 ,0x0C ,0x0E ,0xF0 ,0x00 ,0x00 ,0x00 ,0x00 ,0xFE ,0x00 ,0x9E ,0x82 ,0xF0 ,0x00 &#xA;,0x00 ,0xFC ,0x3E ,0x1C ,0x06 ,0xFC ,0x00 ,0x00 ,0x00 ,0x02 ,0xFE ,0x02 ,0x98 ,0x00 ,0xF8 ,0x00 &#xA;,0x00 ,0xF8 ,0x3E ,0x18 ,0x00 ,0xFE ,0x00 ,0x00 ,0x00 ,0x06 ,0xF8 ,0x02 ,0x18 ,0x00 ,0xF8 ,0x00 &#xA;,0x00 ,0xF8 ,0x06 ,0x18 ,0x02 ,0xFE ,0x80 ,0x00 ,0x00 ,0x1E ,0xE0 ,0x06 ,0x18 ,0x00 ,0xF8 ,0x00 &#xA;,0x00 ,0xF0 ,0x02 ,0x18 ,0xFE ,0x1E ,0xE0 ,0x00 ,0x00 ,0x7E ,0xC0 ,0x06 ,0x78 ,0x00 ,0xFC ,0x00 &#xA;,0x00 ,0xF0 ,0x02 ,0x18 ,0xFE ,0x0E ,0xF8 ,0x00 ,0x00 ,0xFE ,0x66 ,0x8C ,0xF0 ,0x00 ,0x7C ,0x00 &#xA;,0x00 ,0xF0 ,0x02 ,0xFE ,0x80 ,0x02 ,0xFC ,0x00 ,0x02 ,0xFC ,0x7E ,0xC6 ,0xC0 ,0x00 ,0x7C ,0x00 &#xA;,0x00 ,0xF0 ,0x00 ,0xFE ,0x00 ,0x00 ,0xFE ,0x00 ,0x0E ,0xFC ,0x38 ,0xE6 ,0xC0 ,0x00 ,0x7C ,0x00 &#xA;,0x00 ,0xF0 ,0xE0 ,0xFE ,0x80 ,0x00 ,0xFE ,0xC0 ,0x3E ,0xFC ,0x00 ,0x76 ,0xE0 ,0x00 ,0x7C ,0x00 &#xA;,0x00 ,0xF0 ,0xFA ,0xFE ,0x80 ,0x00 ,0xFE ,0xF0 ,0xFE ,0xFC ,0x00 ,0x3E ,0xF6 ,0x80 ,0x7C ,0x00 &#xA;,0x00 ,0xF0 ,0xBA ,0xFE ,0xF0 ,0x00 ,0xF6 ,0xF0 ,0xFE ,0x78 ,0x00 ,0x3E ,0xFE ,0xE0 ,0x3C ,0x00 &#xA;,0x00 ,0xF0 ,0x8E ,0xFE ,0xF8 ,0x00 ,0xF0 ,0xF0 ,0xF8 ,0x7C ,0x00 ,0x1E ,0xFC ,0xF8 ,0xFC ,0x00 &#xA;,0x00 ,0xFC ,0x86 ,0xFE ,0x98 ,0x00 ,0xF0 ,0x60 ,0x60 ,0x7C ,0x70 ,0x1E ,0xF8 ,0x3E ,0xFC ,0x00 &#xA;,0x00 ,0xFE ,0x82 ,0xFE ,0x9C ,0x00 ,0xF0 ,0x00 ,0x00 ,0x7C ,0x7C ,0xFE ,0xF8 ,0x06 ,0x7C ,0x00 &#xA;,0x00 ,0xFE ,0x80 ,0xFE ,0x8E ,0xE0 ,0xF0 ,0x00 ,0x00 ,0x7C ,0x6E ,0xFE ,0xF0 ,0x00 ,0x7C ,0x00 &#xA;,0x00 ,0xF0 ,0x00 ,0xFE ,0x06 ,0xF0 ,0xF0 ,0x00 ,0x00 ,0x7C ,0x76 ,0x9E ,0xF8 ,0x00 ,0x7C ,0x00 &#xA;,0x00 ,0xF8 ,0x00 ,0xFE ,0x80 ,0x3A ,0xF0 ,0x00 ,0x00 ,0x7E ,0x30 ,0x0E ,0xFC ,0x00 ,0xFC ,0x00 &#xA;,0x00 ,0xF8 ,0x02 ,0x82 ,0x00 ,0x1E ,0xE0 ,0x00 ,0x00 ,0x3E ,0xF0 ,0x06 ,0xEC ,0x00 ,0xF8 ,0x00 &#xA;,0x00 ,0xFC ,0x06 ,0x02 ,0x00 ,0x0E ,0xE0 ,0x00 ,0x00 ,0x3E ,0xE0 ,0x06 ,0x0C ,0x00 ,0xF8 ,0x00 &#xA;,0x00 ,0xFC ,0x06 ,0x02 ,0x80 ,0x06 ,0xE0 ,0x00 ,0x00 ,0x3E ,0xC0 ,0x02 ,0x0C ,0x00 ,0xF8 ,0x00 &#xA;,0x00 ,0x7E ,0x06 ,0x00 ,0x80 ,0x0E ,0xC0 ,0x00 ,0x00 ,0x1E ,0x80 ,0x06 ,0x0C ,0x02 ,0xF0 ,0x00 &#xA;,0x00 ,0x7E ,0x06 ,0x00 ,0x80 ,0x1E ,0xC0 ,0x00 ,0x00 ,0x1E ,0x80 ,0x0E ,0x0C ,0x02 ,0xF0 ,0x00 &#xA;,0x00 ,0x3E ,0x3E ,0x00 ,0xC0 ,0x1E ,0x80 ,0x00 ,0x00 ,0x0E ,0xC0 ,0x1C ,0x0C ,0x06 ,0xE0 ,0x00 &#xA;,0x00 ,0x3E ,0xBC ,0x00 ,0xC0 ,0x3E ,0x80 ,0x00 ,0x00 ,0x0E ,0xE0 ,0x38 ,0x0C ,0x0E ,0xE0 ,0x00 &#xA;,0x00 ,0x1E ,0xE0 ,0x00 ,0xC0 ,0xFE ,0x00 ,0x00 ,0x00 ,0x06 ,0xF0 ,0x70 ,0x0E ,0x1E ,0xC0 ,0x00 &#xA;,0x00 ,0x0E ,0xF0 ,0x00 ,0xC0 ,0xFE ,0x00 ,0x00 ,0x00 ,0x02 ,0xFC ,0x60 ,0x06 ,0xFE ,0x80 ,0x00 &#xA;,0x00 ,0x06 ,0xFC ,0x00 ,0xF6 ,0xFC ,0x00 ,0x00 ,0x00 ,0x00 ,0xFE ,0x60 ,0x00 ,0xFE ,0x00 ,0x00 &#xA;,0x00 ,0x02 ,0xFE ,0x00 ,0xFE ,0xF8 ,0x00 ,0x00 ,0x00 ,0x00 ,0xFE ,0xE0 ,0x06 ,0xFE ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0xFE ,0xFA ,0xFE ,0xF0 ,0x00 ,0x00 ,0x00 ,0x00 ,0x7E ,0xFE ,0xFE ,0xFC ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0xFE ,0xFE ,0xFE ,0xE0 ,0x00 ,0x00 ,0x00 ,0x00 ,0x3E ,0xFE ,0xFE ,0xF8 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x3E ,0xFE ,0xFE ,0x80 ,0x00 ,0x00 ,0x00 ,0x00 ,0x0E ,0xFE ,0xFE ,0xE0 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x0E ,0xFE ,0xFE ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x02 ,0xFE ,0xFE ,0x80 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0xFE ,0xF0 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x7E ,0xFC ,0x00 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 &#xA;,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 &#xA;};&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;each time I re upload the image it changes the way the noise patterns look suggesting this is some kind of overflow problem. However changing the last byte of the bitmaps creates lines at the bottom of the screen, right where the noise is on one of the images. Note that with different images this noise can very much &quot;cut&quot; into the images even creating not active pixels (0's) rather then just set ones. Suggesting that the images themselves to at least fit the display. &lt;/p&gt;&#xA;" OwnerUserId="7226" LastEditorUserId="7226" LastEditDate="2014-12-05T10:46:26.937" LastActivityDate="2015-01-16T18:00:53.870" Title="arduino -lcd screen has weird noise with multiple pictures" Tags="&lt;arduino&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5104" PostTypeId="1" CreationDate="2014-12-05T11:32:58.147" Score="2" ViewCount="350" Body="&lt;p&gt;I need to simulate robotic cell where cartesian robot trims a PCB arriving on conveyor, picks it up with vacuum cup and and places in another device. After receiving signal from device the robot would pick it up and place on another belt. I want to make the cartesian robot myself using servomotors and control cell using a PLC. Would there be software that can simulate all this? I would also need to integrate sensors and possibly machine vision.&lt;/p&gt;&#xA;" OwnerUserId="7637" LastEditorUserId="10596" LastEditDate="2016-09-28T10:53:42.937" LastActivityDate="2018-08-20T01:00:54.777" Title="Robotic cell simulation software, PLC" Tags="&lt;computer-vision&gt;&lt;simulation&gt;&lt;manufacturing&gt;&lt;plc&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ClosedDate="2018-08-20T13:32:05.280" ContentLicense="CC BY-SA 3.0" />
  <row Id="5105" PostTypeId="2" ParentId="5104" CreationDate="2014-12-05T16:07:19.563" Score="0" Body="&lt;p&gt;Yes, this is possible to do.  Check out some of these robotics &lt;a href=&quot;https://stackoverflow.com/questions/2533321/robotics-simulator&quot;&gt;simulators&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="110" LastEditorUserId="-1" LastEditDate="2017-05-23T12:37:11.430" LastActivityDate="2016-09-28T10:54:01.753" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5106" PostTypeId="1" CreationDate="2014-12-05T18:11:32.317" Score="5" ViewCount="36" Body="&lt;p&gt;The rubber hand illusion (&lt;a href=&quot;http://en.wikipedia.org/wiki/Multisensory_integration#Rubber_hand_illusion&quot;&gt;Wikipedia&lt;/a&gt;) involves touching both a fake arm and a subject's real arm simultaneously. This causes the subject to feel that the fake arm belongs to him. Normally a human delivers both touches, so the timing is approximate. I want to vary the latency between the fake touch and real touch precisely (~5 ms at minimum) to probe how close they need to be to create the illusion. What can I use to touch a human and fake hand lightly at variable but precise times?&lt;/p&gt;&#xA;" OwnerUserId="7638" LastActivityDate="2014-12-09T11:42:31.493" Title="How do I set up a rubber hand experiment with precise latency?" Tags="&lt;research&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5107" PostTypeId="2" ParentId="4913" CreationDate="2014-12-06T17:30:14.403" Score="0" Body="&lt;p&gt;I recommend you to use a kalman filter if you want to remove the noise without  disfiguring the usefull part of the gyroscope's signal.&lt;/p&gt;&#xA;" OwnerUserId="7557" LastActivityDate="2014-12-06T17:30:14.403" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5108" PostTypeId="1" AcceptedAnswerId="5146" CreationDate="2014-12-06T17:48:15.140" Score="0" ViewCount="908" Body="&lt;p&gt;I'm looking to buy a micromouse (i.e. a small single-board unit with wheels and IR sensors that can move around freely). I've done a lot of searching but have only found resources relating to building one from components bought separately. However, I'm more of a programmer than an electrician so I fear I would struggle with this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anybody know where to buy one of these in the UK? (PICAXE does some suitable stuff but they're BASIC only unfortunately). My budget is about £60.&lt;/p&gt;&#xA;" OwnerUserId="7636" LastActivityDate="2015-01-12T08:23:44.083" Title="Looking for a cheap(ish) micromouse that I can program with C/C++" Tags="&lt;arduino&gt;&lt;mobile-robot&gt;&lt;wheeled-robot&gt;&lt;micromouse&gt;" AnswerCount="2" CommentCount="1" ClosedDate="2015-01-21T12:06:26.297" ContentLicense="CC BY-SA 3.0" />
  <row Id="5109" PostTypeId="1" AcceptedAnswerId="5113" CreationDate="2014-12-06T18:13:58.557" Score="0" ViewCount="46" Body="&lt;p&gt;I have a requirement to transmit some sensor data through wireless to a distance of 2 kilometers. I am a newbie to these technologies and concepts. Can anyone help me by providing some pointers to start with this. &lt;/p&gt;&#xA;" OwnerUserId="7640" LastActivityDate="2014-12-07T03:48:40.003" Title="Regarding Long distance wireless communication" Tags="&lt;wireless&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5110" PostTypeId="1" AcceptedAnswerId="5117" CreationDate="2014-12-06T18:50:48.653" Score="1" ViewCount="1955" Body="&lt;p&gt;I want to calibrate my compass, which is installed on a board which inherits a GPS module. Because the GPS antenna is up-side-down the compass is 180° inverted. The easiest way to correct the problem would be to invert the rotation matrix 180°. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However I got interested how a general approach to calibrate a compass would look like. I found some approaches like &lt;a href=&quot;http://www.varesano.net/blog/fabio/freeimu-magnetometer-and-accelerometer-calibration-gui-alpha-version-out&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt;. They seem to collect magnetometer readings an project them on a sphere. But what is actually the point in this? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does someone know how a general calibration algorithm of a 3D magnetometer looks like?&lt;/p&gt;&#xA;" OwnerUserId="4080" LastActivityDate="2014-12-08T07:49:30.503" Title="3D Magnetometer calibration algorithm" Tags="&lt;calibration&gt;&lt;compass&gt;&lt;magnetometer&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5111" PostTypeId="1" CreationDate="2014-12-06T20:40:40.183" Score="2" ViewCount="2497" Body="&lt;p&gt;I have a 7dof robotic arm and a set of end effector trajectories in cartesian space I need it to follow. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How do I deal with the redundancy in the arm when planning to follow these trajectories both with and without obstacle avoidance?&lt;/p&gt;&#xA;" OwnerUserId="304" LastEditorUserId="350" LastEditDate="2014-12-11T19:57:40.303" LastActivityDate="2014-12-11T19:57:40.303" Title="redundant arm path planning and trajectory following" Tags="&lt;robotic-arm&gt;&lt;motion-planning&gt;&lt;c++&gt;&lt;planning&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5113" PostTypeId="2" ParentId="5109" CreationDate="2014-12-07T03:48:40.003" Score="0" Body="&lt;p&gt;This sounds like a question for the Electronics Stack Exchange.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://electronics.stackexchange.com/questions/75325/long-distance-wireless-communication&quot;&gt;&quot;Long distance wireless communication&quot;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://electronics.stackexchange.com/questions/113188/long-distance-communication&quot;&gt;&quot;Long distance communication&quot;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://electronics.stackexchange.com/questions/1149/wireless-communication-over-long-distances&quot;&gt;&quot;Wireless communication over long distances&quot;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://electronics.stackexchange.com/questions/102408/zigbee-communication-outdoors-at-long-distance-around-1-1-5-km&quot;&gt;&quot;Zigbee communication outdoors at long distance ( around 1 - 1.5 km)&quot;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="187" LastEditorUserId="-1" LastEditDate="2017-04-13T12:33:08.317" LastActivityDate="2014-12-07T03:48:40.003" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5115" PostTypeId="2" ParentId="5108" CreationDate="2014-12-07T19:20:15.027" Score="1" Body="&lt;p&gt;I think you'll be hard-pressed to find a Micromouse off the shelf besides PICAXE.  If you want one that's a bit more advanced, I'd recommend putting the robot together yourself.  I would encourage you to try out the electronics on a project like this, they aren't too bad to figure out and there are lots of resources online.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some recommendations:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;An arduino-nano is capable for such a task, look into AVR-GCC for programming.&lt;/li&gt;&#xA;&lt;li&gt;NEMA-17 sized stepper motors will supply enough power, Pololu is a good site to find these motors and matching wheels/controllers.  &lt;/li&gt;&#xA;&lt;li&gt;I've seen people use Sharp IR's before, this will simplify some of the electronics.  &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This is a difficult project but very rewarding!  Best of luck.&lt;/p&gt;&#xA;" OwnerUserId="7647" LastActivityDate="2014-12-07T19:20:15.027" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5116" PostTypeId="1" AcceptedAnswerId="5120" CreationDate="2014-12-08T03:31:19.333" Score="4" ViewCount="6034" Body="&lt;p&gt;I've built a quadcopter and a rig to safely test it on. I'm working on the PID for controlling the roll pitch and yaw. I understand how a PID works on a more simple plant like say a robot with wheels and I'm just really in the dark ( i believe ) with controlling and stabilizing a quad.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question, how do I make these sensor readings effectively alter the motors' throttle? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Firstly, my approach is based on this model,  &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;CW motors    A,C&#xA;CCW motors   D,B&#xA;&#xA;           Front&#xA;           +1 pitch&#xA;          C   D&#xA;-1 roll    \-/     +1 roll   right&#xA;           /-\&#xA;          B   A&#xA;           -1 pitch&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;My IMU calculates the roll and pitch as a value between +-1.0 where being perfect balance will read as 0.0.  Now a degree of +-1.0 means approximately 90 degrees from the original axis.&lt;br&gt;&#xA;A normal input to the pitch to go forward would be something like 0.33, meaning tilt 30 degrees forward.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now my motors take some value between 0 and 100. Originally I thought this would mean i would have to modify my motor values like so. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;c = throttle - roll + pitch + yaw&#xA;d = throttle + roll + pitch - yaw&#xA;b = throttle - roll - pitch - yaw&#xA;a = throttle + roll - pitch + yaw&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Finally, I'm taking those floating point numbers, from the IMU and computing them like with this method, which appears to be the normal way as far as I've found.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;RollPId.Compute( steering.roll - gyro.roll );  &#xA;// pid_t is either #define pid_t float    or double, I know its a reserved type but, a pre-processor definition will change that before it would matter. &#xA;pid_t Compute(pid_t input) {&#xA;        uint64_t now = millis();&#xA;        if( ( now - last_time ) &amp;gt;= sample_time ) {&#xA;            pid_t error      = set_point - input;&#xA;            error_sum        += error;&#xA;            pid_t d_error    = error - error_last;&#xA;&#xA;            *output = kp * error + ki * error_sum + kd * d_error;&#xA;&#xA;            error_last = error;&#xA;            last_time  = now;&#xA;        }&#xA;    }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I don't know where to go from here? Also I have angular rate calculated from my IMU i just haven't encountered a solution that called for it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT. Below is a graph of roughly 300 readings (20ms apart) so roughly six seconds where i hold it in one hand and roll it roughly 45degrees right. with kp=1 ki=0 kd=0&lt;br&gt;&#xA; &lt;img src=&quot;https://i.stack.imgur.com/8TKkr.png&quot; alt=&quot;IMU and PID output&quot;&gt; &lt;/p&gt;&#xA;" OwnerUserId="7649" LastEditorUserId="7649" LastEditDate="2014-12-09T05:45:31.793" LastActivityDate="2020-10-25T09:21:51.267" Title="How to find a solution for quadcopter PID control" Tags="&lt;quadcopter&gt;&lt;pid&gt;&lt;design&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5117" PostTypeId="2" ParentId="5110" CreationDate="2014-12-08T07:49:30.503" Score="2" Body="&lt;p&gt;We always need a reference for calibration to which we calibrate our sensor. For example in case of 3D accelerometer we use gravity as a reference which is assumed vertically downwards at a place. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For magnetometer calibration we use Earth's magnetic field  as   a reference. But we dont know the direction of resultant magnetic field vector at the place unlike gravity in case of accelerometer. Hence we need to implement sphere fitting calibration method in order to calibrate our magnetometer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This method is explained in this &lt;a href=&quot;https://chionophilous.wordpress.com/2012/09/01/implementing-the-gauss-newton-algorithm-for-sphere-fitting-1-of-3/&quot; rel=&quot;nofollow&quot;&gt;blogpost&lt;/a&gt; as well as this &lt;a href=&quot;http://www.sailboatinstruments.blogspot.in/2011/08/improved-magnetometer-calibration.html&quot; rel=&quot;nofollow&quot;&gt;blogpost&lt;/a&gt;. You can also download a &lt;a href=&quot;https://sites.google.com/site/sailboatinstruments1/home&quot; rel=&quot;nofollow&quot;&gt;tool&lt;/a&gt; which can calibrate if you feed the data. You can also have a look at implementation in C &lt;a href=&quot;https://sites.google.com/site/sailboatinstruments1/c-language-implementation&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="2118" LastActivityDate="2014-12-08T07:49:30.503" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5118" PostTypeId="1" AcceptedAnswerId="5145" CreationDate="2014-12-08T10:46:27.147" Score="1" ViewCount="2208" Body="&lt;p&gt;I am building a collision avoidance system for my robot. As a part of this system I am using a pan and tilt kit &lt;/p&gt;&#xA;&#xA;&lt;p&gt;(&lt;a href=&quot;http://www.robotshop.com/en/lynxmotion-pan-and-tilt-kit-aluminium2.html&quot; rel=&quot;nofollow&quot;&gt;http://www.robotshop.com/en/lynxmotion-pan-and-tilt-kit-aluminium2.html&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My aim is to pan the sensor attached to this kit, and thus plan the route the robot should take.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to pan this sensor, I need to know the angle the kit has panned, and need to be able to call upon that angle at point in time. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically the sensor keeps panning, and at a point in time when certain conditions are met, it stops panning. When those conditions are met, I need to be able to extract the angle the sensor is panned at.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The servo being used on is: &lt;a href=&quot;http://www.robotshop.com/en/hitec-hs422-servo-motor.html&quot; rel=&quot;nofollow&quot;&gt;http://www.robotshop.com/en/hitec-hs422-servo-motor.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If someone could help me find a way to extract this information that would be helpful. I did read somewhere that the servo could be hacked and changed into a closed loop system where the effective angle would be shown, but that option is not viable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="7650" LastEditorUserId="37" LastEditDate="2017-01-10T10:49:41.527" LastActivityDate="2017-01-10T10:49:41.527" Title="Finding the position of a servo" Tags="&lt;mobile-robot&gt;&lt;sensors&gt;&lt;rcservo&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5119" PostTypeId="2" ParentId="5111" CreationDate="2014-12-08T19:42:39.427" Score="0" Body="&lt;p&gt;Do you mean you have an &lt;em&gt;end-effector&lt;/em&gt; trajectory?  Because typical arm planners (such as the one in &lt;a href=&quot;http://openrave.org/&quot; rel=&quot;nofollow&quot;&gt;OpenRAVE&lt;/a&gt;) output joint space trajectories.  So they tell you how to move each joint, even for 7 DoF arms.  If so, you should clarify the question because I think when you say you have a trajectory for your robot arm, it is assumed it is a joint space trajectory.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-12-08T19:42:39.427" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5120" PostTypeId="2" ParentId="5116" CreationDate="2014-12-08T19:57:24.223" Score="2" Body="&lt;p&gt;The forces used to control the quad act around its center of mass, causing it to pitch, roll or yaw. Changes in the roll angle are induced by contrary variation of speeds in propellers A and C. Same effect with motors B and D can produce a change in the pitch angle and you will get lateral translation. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;First of all, make sure that your IMU gives you an &lt;strong&gt;accurate estimated angle&lt;/strong&gt;. Have you validated these angles while motors were spinning?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, define the control error as the difference between the desired angular position, &lt;code&gt;y_des = 0°&lt;/code&gt; for example, and the actual measurement at time t, &lt;code&gt;y(t)&lt;/code&gt;. The &lt;code&gt;y(t)&lt;/code&gt; value is the one computed by your IMU so that &lt;code&gt;y(t)€[-1;1]&lt;/code&gt;. The error equation for your roll angle will be:&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;E_roll(t) = roll_des - roll(t)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The input to you Roll pid controller should be the error &lt;code&gt;E_roll(t)&lt;/code&gt;. And use the output, &lt;code&gt;rollPid&lt;/code&gt;, in your equation to adjust motor angular velocities as shown below. These speed alterations contribute to the generation of torques in each of the three axis.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;a = throttle + rollpid - yawpid; &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;b = throttle + pitchpid + yawpid;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;c = throttle - rollpid - yawpid; &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;d = throttle - pitchpid + yawpid;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;How do you feed your pid and what does &lt;code&gt;steering.roll - gyro.roll&lt;/code&gt; is? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;From the informations provided by your model description, I don't understand how your axis are oriented in space. Use the equations above if you are using the following reference system&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/fqRpm.png&quot; alt=&quot;Body reference system&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For more details about the pid action see this &lt;a href=&quot;https://robotics.stackexchange.com/questions/4721/how-to-convert-pid-outputs-to-appropriate-motor-speeds-for-a-quad-copter/5005#5005&quot;&gt;link&lt;/a&gt;, and &lt;a href=&quot;https://robotics.stackexchange.com/questions/2964/quadcopter-pid-output?rq=1&quot;&gt;this&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this helps.&lt;/p&gt;&#xA;" OwnerUserId="6970" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2014-12-08T20:07:00.603" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="5121" PostTypeId="5" CreationDate="2014-12-08T20:23:50.090" Score="0" Body="&lt;p&gt;The &lt;a href=&quot;http://www.irobot.com/create&quot; rel=&quot;nofollow noreferrer&quot;&gt;iRobot Create&lt;/a&gt; is a programmable robot based on the Roomba vacuuming robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Users can program it using the &lt;a href=&quot;http://www.irobot.com/~/media/MainSite/PDFs/About/STEM/Create/create_2_Open_Interface_Spec.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Create 2 Open Interface&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There have been two versions of Create:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;iRobot Create, released in 2007. This robot was based on the Roomba Discovery series robots. It is all-white.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;iRobot Create 2, released in 2014. This robot is based on the Roomba 650 robot and includes a green faceplate marked with safe places to drill into the robot to mount additional hardware.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Additionally, all iRobot Roomba vacuums in the 500 series and higher feature the ability to respond to the same iRobot Open Interface as Create 2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/702We.png&quot; alt=&quot;Create 2 Robot&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="4373" LastEditorUserId="4373" LastEditDate="2015-03-03T16:16:22.083" LastActivityDate="2015-03-03T16:16:22.083" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5122" PostTypeId="4" CreationDate="2014-12-08T20:23:50.090" Score="0" Body="The iRobot Create is a programmable robot based on the Roomba vacuuming robot. Users can program it using the iRobot Open Interface." OwnerUserId="4373" LastEditorUserId="4373" LastEditDate="2014-12-15T11:21:28.707" LastActivityDate="2014-12-15T11:21:28.707" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5123" PostTypeId="2" ParentId="5111" CreationDate="2014-12-09T06:48:29.010" Score="1" Body="&lt;p&gt;To solve the redundancy problem, you can use the Resolved Motion Rate technique. It consist of finding the articular position using the iterative equation&#xA;$$\Delta \theta = J^\dagger T \Delta x + J^\dagger (I-T) h$$&#xA;With&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;$J^\dagger$ the pseudoinverse of the jacobian matrix,&lt;/li&gt;&#xA;&lt;li&gt;$T$ the projector that defines the null space of the task to accomplish,&lt;/li&gt;&#xA;&lt;li&gt;$\Delta x$ the difference in cartesian position between $x(t_{i-1})$ and $F(\theta(t_i))$ ($F(.)$ being the forward kinematics),&lt;/li&gt;&#xA;&lt;li&gt;h being the opposite of the gradient of the cost function to minimize.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Typically, we have the cost function $z(\theta)$ and the inverse of the gradient $h = - \nabla z$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can find more information and examples on the article from &lt;a href=&quot;http://www.professeurs.polymtl.ca/luc.baron/doc/r14.pdf&quot; rel=&quot;nofollow&quot;&gt;Huo L. and Baron L.&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7613" LastActivityDate="2014-12-09T06:48:29.010" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5124" PostTypeId="2" ParentId="4900" CreationDate="2014-12-09T07:01:53.663" Score="0" Body="&lt;p&gt;For a RRR planar manipulator, typical state variables would be $x$,$y$ and $\theta$, the two first ones being the position of the end effector in the 2D plane, and $\theta$ the orientation of the end effector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/Hwvem.jpg&quot; alt=&quot;enter image description here&quot;&gt;&#xA;(please note, altough in the picture the articular positions are nammed $\theta_1$, $\theta_2$ and $\theta_3$, we will here use $q_1$, $q_2$, and $q_3$ for clarity)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The expression of $\theta$ with regards to the articular positions $q_1, q_2, q_3$ is&#xA;$$\theta = q_1 + q_2 + q_3$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To ensure kinematically that $\theta(t)=\theta_d=Cste$, $\dot{\theta}(t)=0$ and $\ddot{\theta}(t)=0$, you simply need to impose it as constant for the resolution of the inverse kinematics and its derivatives.&lt;/p&gt;&#xA;" OwnerUserId="7613" LastActivityDate="2014-12-09T07:01:53.663" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5125" PostTypeId="2" ParentId="5118" CreationDate="2014-12-09T07:14:00.803" Score="0" Body="&lt;p&gt;Servos use potentiometers to get information about the output shaft position and makes the internal feedback loop. In order to retreive the servo position, you will need to open and extract the output value of the potentiometer in order to use it for your own purpose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/LcVBb.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will need to solder a cable to the output of the potentiometer and connect it to your own circuit. You will get an analog signal relative to the position of the servo. Position can be found using the relation&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\theta = \theta_0 + \frac{V_{out}}{V_{max}}$$&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;$0 \leq \theta \leq 360°$&lt;/li&gt;&#xA;&lt;li&gt;$V_{max}$ is the maximum voltage at the potentiometer end. Usually, it is $V_{DD}$, the voltage of the servo.&lt;/li&gt;&#xA;&lt;li&gt;$\theta_0$ is the initial position and depends on the servo.&lt;/li&gt;&#xA;&lt;li&gt;If used with a microcontroller, you will need an ADC input (analog input).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="7613" LastActivityDate="2014-12-09T07:14:00.803" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5126" PostTypeId="1" CreationDate="2014-12-09T11:05:41.143" Score="0" ViewCount="192" Body="&lt;p&gt;I can't open parameter list with APM Planner.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Moreover I can't find anyone with same problem.&#xA;I run it on Ubuntu/trusty 14.04&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It does not see files with any extensions including &lt;code&gt;param&lt;/code&gt; and &lt;code&gt;txt&lt;/code&gt; downloaded from internet or created with my version of APM Planner.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any ideas how can I fix it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/nZXI0.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;PS&lt;/strong&gt; &lt;code&gt;ls -la&lt;/code&gt; from terminal&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;user@laptop:~/apmplanner2/parameters$ ls -la&#xA;total 16&#xA;drwxrwxr-x 2 user user 4096 Dec  9 12:57 .&#xA;drwxrwxr-x 7 user user 4096 Dec  9 21:05 ..&#xA;-rw-rw-r-- 1 user user 6881 Dec  9 12:57 paramter.param&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I have &lt;code&gt;param&lt;/code&gt;, &lt;code&gt;txt&lt;/code&gt; files in Downloads folder also.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;PS&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/XRgAA.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="25" LastEditorUserId="25" LastEditDate="2014-12-13T10:46:58.210" LastActivityDate="2014-12-13T10:46:58.210" Title="APM Planner on Linux/Ubuntu &quot;open from file&quot; not working" Tags="&lt;ardupilot&gt;" AnswerCount="0" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="5127" PostTypeId="2" ParentId="5106" CreationDate="2014-12-09T11:42:31.493" Score="2" Body="&lt;p&gt;What you want is a real-time system. Generally, you can do this either in a standalone or a hosted environment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Standalone, otherwise known as bare-metal, means you write your code for a specific hardware, e.g. a microcontroller. That way, you have complete control of what executes and at what intervals, so you can be very precise. You can hardly go wrong with any microcontroller for such a simple task, so just choose one you like most.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hosted environments means programming under a real-time operating system. There are a handful of those, but of course I would advocate free software. There are a couple of extensions for Linux that can make it real-time (RTAI, Xenomai, RT-Linux and others) and you can get precisions of even microseconds, which should be enough for your task.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Setting up a real-time Linux with proper configuration can be tricky, but once done the programming is easier and debugging tools are available. On the other hand, you can start programming a microcontroller right away and if you are experienced, not much more difficult than hosted either.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the end it's your choice. If you feel comfortable with microcontrollers, I'd recommend a standalone application for your task.&lt;/p&gt;&#xA;" OwnerUserId="158" LastActivityDate="2014-12-09T11:42:31.493" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5130" PostTypeId="1" CreationDate="2014-12-10T02:29:58.897" Score="0" ViewCount="222" Body="&lt;p&gt;As already mentioned the PID output values that correspond to the error from the desirable error and current error has no units. Let's say we are using only the proportional part of the PID. Is it better to map the output of the PID values to the corresponding thrust values on each motor, or is it better to increase the Proportional coefficient &lt;code&gt;Kp&lt;/code&gt; until the output values correspond to the proper thrust value to the motors? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example if my desired angle is 0 and the angle that the sensor is reading is 40 degrees the difference is multiplied by &lt;code&gt;Kp&lt;/code&gt; and the output is added or subtracted from the current thrust depending on the motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I increase &lt;code&gt;Kp&lt;/code&gt; too much, then the quadcopter is oscillating and not listening to the controller command that I am sending for the desired degrees from the joystick. If I map the values then it is listening to the joystick commands and not oscillating so much. Why is this happening? Isn't mapping the PID output values to bigger values the same as increasing &lt;code&gt;Kp&lt;/code&gt;?&lt;/p&gt;&#xA;" OwnerUserId="7657" LastEditorUserId="158" LastEditDate="2014-12-10T11:31:42.217" LastActivityDate="2015-01-18T17:08:34.193" Title="PID for Quadcopters" Tags="&lt;arduino&gt;&lt;pid&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="5131" PostTypeId="2" ParentId="5111" CreationDate="2014-12-10T15:27:17.980" Score="3" Body="&lt;p&gt;To expand on Alexandre's answer:&lt;br&gt;&#xA;Controlling the arm with the Jacobian along an end-effector trajectory is one way to do it.  However, this will not give you obstacle avoidance.  Although you could manually check for collisions at each time step, but i imagine this could get ugly.  Additionally, this is a gradient technique, so you will be constrained to the arm configurations close to the current one.  But if you do want to go this route, I find the notation in the book: &lt;a href=&quot;https://www.google.com/shopping/product/18328483085519729280&quot; rel=&quot;nofollow&quot;&gt;Robotics: Modelling, Planning and Control&lt;/a&gt; by Bruno Siciliano, Lorenzo Sciavicco, Luigi Villani, Giuseppe Oriolo a little easier to understand / use:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\dot{q}=J^{\dagger}v_{e}+(I-J^{\dagger}J)\dot{q_o}&#xA;$$&#xA;where:&#xA;$$&#xA;J^{\dagger} = J^T(JJ^T)^{-1}&#xA;$$&#xA;is the right-pseudo-inverse of the Jacobian.  (This is needed because you are under-constrained and have more joints than the 6 DoF space of end-effector motion).  There are other ways to get the pseudoinverse, but this method works well for arm Jacobians.  $J$ is obviously the Jacobian, which changes based on the arm configuration, so it is really $J(q)$, and must be recalculated when the arm moves. $v_e$ is the end-effector velocity vector.  The first three elements are the Cartesian translation velocity in the global frame, and the last three are rotational velocities.  $I$ is the identity matrix.  $\dot{q}$ is the joint velocities, and $\dot{q_o}$ are joint velocities to move the arm in its null space (again, which you have since you are under-constrained).  I have never found this very useful, so I usually zero it out which greatly simplifies the equation.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To use this formulation, you will need a linear algebra package, which there are many available, and you will also need to calculate the geometric Jacobian of your arm.  This is a topic for another question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;NOTE: I typically only use this method for small motions or when i know the arm is in no danger of collision.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To expand on my other answer:&lt;br&gt;&#xA;I think the more standard way to solve this problem is to use an arm planner.  These planners will have some model of the environment which constitutes obstacles.  You give the planner start and goal arm configurations (i.e. joint angles), and it figures out how to best move the arm between them while avoiding obstacles.  Note that you will typically have start and goal end-effector poses.  and because you have a redundant arm, there are many arm configurations that can satisfy them.  So you must first do some IK and find the configuration that is best for you based on some heuristic.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some notable arm planners / toolkits:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://openrave.org/&quot; rel=&quot;nofollow&quot;&gt;OpenRave&lt;/a&gt; - Typically Linux based, but i believe can be cross complied.&lt;/li&gt;&#xA;&lt;li&gt;ROS &lt;a href=&quot;http://moveit.ros.org/&quot; rel=&quot;nofollow&quot;&gt;MoveIt!&lt;/a&gt; - again, ROS is typically Linux based, but i think has some limited cross-compile support, but i am not sure about MoveIt.&lt;/li&gt;&#xA;&lt;li&gt;Matlab &lt;a href=&quot;http://www.petercorke.com/Robotics_Toolbox.html&quot; rel=&quot;nofollow&quot;&gt;Robotics Toolkit&lt;/a&gt; - matlab based, so works on Windows, but is not C++.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.orocos.org/&quot; rel=&quot;nofollow&quot;&gt;Orocos&lt;/a&gt; - Typically Linux based, but i believe can be cross complied.  Not sure if it has arm planning actually.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://rll.berkeley.edu/trajopt/doc/sphinx_build/html/&quot; rel=&quot;nofollow&quot;&gt;Trajopt&lt;/a&gt; - no Windows support&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Underneath these most of these libraries is a planner such as RRT.  If you want to do planning yourself, you should check out:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://ompl.kavrakilab.org/&quot; rel=&quot;nofollow&quot;&gt;OMPL&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://sbpl.net/&quot; rel=&quot;nofollow&quot;&gt;SBPL&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Having said all that, answering your questions specifically:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The planner will handle the arm's redundancy without issue.  (besides increasing the search space)&lt;/li&gt;&#xA;&lt;li&gt;There are many planner algorithms.  Too many to list here.  For example, &lt;a href=&quot;http://ompl.kavrakilab.org/planners.html&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt; is the list of planners available in OMPL.   But if you use an off the shelf planner, it will output a trajectory in joint space which is easy to follow with standard control techniques.  &lt;/li&gt;&#xA;&lt;li&gt;Libraries and some &quot;do it yourself&quot; code listed above&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-12-10T15:27:17.980" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5132" PostTypeId="1" CreationDate="2014-12-10T22:22:53.277" Score="4" ViewCount="1732" Body="&lt;p&gt;I'm attempting to build a heavy platform on the Create 2 but am worried about weight on the platform.  What is the maximum weight for the platform and is there an optimum?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have an old create and want to know if any of my existing cables and accessories can be used with the new Create 2? &lt;/p&gt;&#xA;" OwnerUserId="7658" LastEditorUserId="110" LastEditDate="2014-12-13T07:26:19.580" LastActivityDate="2018-07-18T13:28:41.067" Title="What is the maximum payload weight for create 2/can I use old create accessories with the Create 2?" Tags="&lt;mobile-robot&gt;&lt;irobot-create&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5133" PostTypeId="1" CreationDate="2014-12-11T02:11:22.353" Score="1" ViewCount="210" Body="&lt;p&gt;What aged children is the Create 2 appropriate for?  What is prerequisite knowledge?  Is this an appropriate first robot kit for a child?&lt;/p&gt;&#xA;" OwnerUserId="7659" LastActivityDate="2014-12-11T14:42:50.807" Title="What is recommended prerequisite knowledge to get kid started with Create 2?" Tags="&lt;irobot-create&gt;" AnswerCount="1" CommentCount="0" ClosedDate="2015-01-04T19:56:09.183" ContentLicense="CC BY-SA 3.0" />
  <row Id="5134" PostTypeId="2" ParentId="4741" CreationDate="2014-12-11T02:32:29.960" Score="1" Body="&lt;p&gt;I'm working through this book right now at that particular section. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking at the example on page 105 / section 3.3, with the elbow manipulator, it looks like once you define appropriate points q_w and p_b, you express them in the base frame S (as is every other quantity so far from the preceeding section). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So here's what I would do. Try q_w = (0, l1+l2, l0), p_b = (0, 0, l0). Solve the full problem with these points. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then try plugging in test thetas and end effector poses g1 to verify that the model works (i.e. compute both forward and inverse kin on sample points). I'm fairly confident that the above points are expressed in the base frame S, but feel free to do this additional testing to create a numerical example. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this helps. &lt;/p&gt;&#xA;" OwnerUserId="6858" LastActivityDate="2014-12-11T02:32:29.960" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5136" PostTypeId="2" ParentId="5132" CreationDate="2014-12-11T13:49:22.323" Score="6" Body="&lt;p&gt;Assuming that you keep the payload in the bin or near the top of the robot, 9 kg is a safe amount of max payload weight on a flat floor. Create doesn't dynamically balance, so having the weight in both a statically and a dynamically stable location is important. We've also provided files for printing a bin with a caster, in the case that you find your robot is constantly doing wheelies. :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Almost all existing cables and accessories should be supported in both directions, as long as they use the 7-pin serial connector. One of our goals was to allow current parts and accessories to stay useful! Unfortunately, there is no 25-pin payload connector, so any accessories which used that will not work. Finally, the original Create's dock is not compatible. The good news is that the Create 2 will avoid its predecessor's dock, and we ship every Create 2 with a new-style dock.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please note that I am an iRobot employee, but the postings on this site are my own and don't necessarily represent iRobot's positions, strategies, or opinions.&lt;/p&gt;&#xA;" OwnerUserId="7665" LastEditorUserId="7665" LastEditDate="2018-07-18T13:28:41.067" LastActivityDate="2018-07-18T13:28:41.067" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="5137" PostTypeId="2" ParentId="5133" CreationDate="2014-12-11T14:42:50.807" Score="1" Body="&lt;p&gt;The short answer is &quot;probably not&quot;.  The long answer depends on the abilities of you and your child.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Create 2 allows you to plug the robot into a computer via USB and interact with it through serial commands.  Many 3rd parties have created interfaces for this, some of which are in Python, (for example &lt;a href=&quot;http://code.google.com/p/pyrobot/&quot; rel=&quot;nofollow&quot;&gt;PyRobot&lt;/a&gt;).  Your child may be able to handle this depending on grade level.  This is probably the lowest bar to entry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you take a look at the Create 2 &lt;a href=&quot;http://www.irobot.com/About-iRobot/STEM/Create-2/Projects.aspx&quot; rel=&quot;nofollow&quot;&gt;sample projects&lt;/a&gt;, you should be able to get a feel for the prerequisite knowledge required for other (perhaps more interesting) projects.  For example, can your child solder and hook up an Arduino?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That being said, as a robotics scientist, my 5.5 year old son has been around robots and technology from a very young age.  I plan on doing some Create projects with him.  Although I fully expect to do all the work.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-12-11T14:42:50.807" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5138" PostTypeId="1" AcceptedAnswerId="5144" CreationDate="2014-12-11T15:21:00.867" Score="2" ViewCount="6951" Body="&lt;p&gt;I have an arduino uno and a BeagleBone black and would like them to talk with eachother. Both the beagleBone and the arduino have their own 5V power supplies so no need for power to be transferred over usb. The used communication line we would like to use is the direct serial line. Preferably in such a way that the arduino can just call Serial.read() in order to get the bytes it needs (there won't be many). How do I get this to work on the BeagleBoneBlack? I suspect we can call the serial.write somewhere inside the BBB(we mainly program in C++). But how do we achieve this? &lt;/p&gt;&#xA;" OwnerUserId="7226" LastActivityDate="2014-12-13T05:04:17.403" Title="Connecting an Arduino uno with a beaglebone black over USB" Tags="&lt;arduino&gt;&lt;serial&gt;&lt;usb&gt;&lt;c++&gt;&lt;beagle-bone&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5140" PostTypeId="1" CreationDate="2014-12-12T09:44:29.783" Score="3" ViewCount="795" Body="&lt;p&gt;What is the best yet simple to use angular position sensor? I am building a robotic hand and I want to implement this sensor at the joints of the fingers. I don't need a module, just an analogue output.&#xA;Thank you.&lt;/p&gt;&#xA;" OwnerUserId="7533" LastActivityDate="2014-12-26T00:00:55.110" Title="Simple yet effective angular position sensor to be used in robotic hand" Tags="&lt;sensors&gt;&lt;hall-sensor&gt;" AnswerCount="4" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5142" PostTypeId="2" ParentId="5140" CreationDate="2014-12-12T18:20:15.067" Score="2" Body="&lt;p&gt;Potentiometers are great for this kind of thing. Its what servos use to move to specific angles. They offer a linear resistance change that could be used to change an analog voltage that you measure, then angles map directly to that voltage.&lt;/p&gt;&#xA;" OwnerUserId="4522" LastActivityDate="2014-12-12T18:20:15.067" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5144" PostTypeId="2" ParentId="5138" CreationDate="2014-12-13T05:04:17.403" Score="3" Body="&lt;h2&gt;Beaglebone USB&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;When you plug a USB cable between the USB B plug of the Arduino Uno and the USB A plug of the Beaglebone Black, the Beaglebone should be able to talk and listen to it the same way any other Linux distribution talks and listens to any other CDC class USB peripheral.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the Beaglebone, a CDC class USB peripheral can be read an written to through &quot;/dev/ttyUSB0&quot; or &quot;/dev/ttyACM0&quot; or something similar.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;# warning: untested code&#xA;import serial&#xA;serial_port = serial.Serial( port=&quot;/dev/ttyUSB0&quot;, baudrate=9600, timeout=1 )&#xA;while True:&#xA;    serial_port.write(&quot;Hey.&quot;)&#xA;    print hex(ord(serial_port.read()))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://recursive-labs.com/blog/2012/06/20/ez430chronos-beaglebone/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;EZ430 Chronos and the BeagleBone&quot;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://rimuboddy.blogspot.com/2013/03/usb-serial-gps-reader-with-pyserial.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;USB (serial) GPS Reader with pyserial, Redis, Ubuntu 12.10 on Beaglebone&quot;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The Arduino uses Serial.read() and Serial.write().&#xA;Any of the &lt;a href=&quot;http://arduino.cc/en/reference/serial&quot; rel=&quot;nofollow noreferrer&quot;&gt;Arduino serial demo scripts&lt;/a&gt; that read and write to the Arduino serial monitor when the USB cable is plugged into a &quot;big&quot; computer&#xA;should work just fine when that same cable is plugged into a Beaglebone instead.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Beaglebone UARTs&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;p.s.:&#xA;You may find it easier to wire one of &lt;a href=&quot;http://beaglebone.cameon.net/home/serial-ports-uart&quot; rel=&quot;nofollow noreferrer&quot;&gt;the six BeagleBone UARTs&lt;/a&gt; directly to the Arduino UART (&quot;&lt;a href=&quot;http://hipstercircuits.com/enable-serialuarttty-on-beaglebone-black/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Enable serial/UART/tty on BeagleBone Black&lt;/a&gt;&quot;; &quot;&lt;a href=&quot;https://stackoverflow.com/questions/21148655/python-pyserial-with-auto-rts-through-half-duplex-rs-485-breakout-board-using-be&quot;&gt;Python PySerial ... using Beaglebone Black&lt;/a&gt;&quot;),&#xA;rather than trying to stick the more complicated USB in the middle somewhere.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://bradsmc.blogspot.com/2013/05/example-serial-communication-between.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;Serial Communication between an Arduino &amp;amp; a Beaglebone Black&quot;&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://learn.adafruit.com/setting-up-io-python-library-on-beaglebone-black/uart&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;Adafruit: setting up IO Python Library on BeagleBone Black: UART&quot;&lt;/a&gt; &lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.gigamegablog.com/2012/01/22/beaglebone-coding-101-using-the-serial-and-analog-pins/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;Beaglebone Coding 101: Using the Serial and Analog Pins&quot;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="187" LastEditorUserId="-1" LastEditDate="2017-05-23T12:37:11.430" LastActivityDate="2014-12-13T05:04:17.403" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5145" PostTypeId="2" ParentId="5118" CreationDate="2014-12-13T07:41:31.230" Score="2" Body="&lt;p&gt;Servos are by definition, in the position you told them to go (or in a fault condition). This is the difference between a servo and a stepper. You tell a stepper to move 1 step at a time and do not know if it did or not. A servo on the other hand will continue trying to get to the position you asked.  For hobby Servos, you are setting a pulse width / duty cycle in some part of the code.  You can assume that IS the servo position for all intents and purposes. The standard servo's low value is 1000, high value 2000, and obviously 1500 in the center position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Taken from &lt;a href=&quot;https://www.ini.uzh.ch/~tobi/wiki/doku.php?id=dig:servos&quot; rel=&quot;nofollow noreferrer&quot;&gt;Servo motors and controlling them with PWM&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They have one really great feature: the interface to control them is super simple, just the pulse width of a digital pulse sent to the motor at a rate from 50-200Hz. The pulse rate is not that important. The important thing is the pulse width. The range of the pulse width is from 1-2ms. 1.5ms is the middle servo position and 1 or 2 ms are the end positions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You cannot control the torque, rate, or anything else; as soon as the servo's electronics detects the pulse width (which can require several pulses) it tries to get the servo to the new position as quickly as possible. You also cannot sense the servo's position, current or anything else; control is open-loop as far as the servo is concerned; all control is handled inside the servo.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/nKcpq.gif&quot; alt=&quot;Servo PWM control&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Just as a warning, most modern servos DO NOT use potentiometers. Today, most use optical encoders for positional sensing, so reading an analog signal is going to be difficult (impossible). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;High end servos such as the &lt;a href=&quot;http://hitecrcd.com/products/servos/discontinued-servos-servo-accessories/hsr-5990tg-hmi-ultra-premium-robot-servo/product&quot; rel=&quot;nofollow noreferrer&quot;&gt;HiTech&lt;/a&gt; do provide feedback (positional) information.&lt;/p&gt;&#xA;" OwnerUserId="274" LastEditorUserId="274" LastEditDate="2014-12-13T07:48:28.747" LastActivityDate="2014-12-13T07:48:28.747" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5146" PostTypeId="2" ParentId="5108" CreationDate="2014-12-13T07:58:31.633" Score="1" Body="&lt;p&gt;Try a &lt;a href=&quot;http://www.pololu.com/product/975&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pololu 3Pi&lt;/a&gt;. They were going for 50usd during black friday. Normally $99.  You can use arduino IDE to program it using Wiring, a C/C++ like language.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You would probably have to add IR sensors yourself, either via the expansion board, or re-wire the existing line detectors&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the moment, Hobby Robots are still only reachable by those with soldering skills. But that will be changing in the next few years.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/K3Emz.jpg&quot; alt=&quot;3Pi&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="274" LastActivityDate="2014-12-13T07:58:31.633" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5147" PostTypeId="2" ParentId="5053" CreationDate="2014-12-13T08:20:06.153" Score="0" Body="&lt;p&gt;The particulars you are asking about are;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ST Micro L3GD20 3-axis 16-bit gyroscope&#xA;ST Micro LSM303D 3-axis 14-bit accelerometer / magnetometer&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Invensense MPU 6000 3-axis accelerometer/gyroscope&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The MPU 600 provides a stand alone I2C bus for attaching a remote magnetometer, to get it away from current and metal. But it also requires external clocking for accuracy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why someone would choose to use 2 different brands, I am not sure. It may be that one is used for INS and the other to transmit telemetry data at a different rate. The MPU 6000/6050 is known for its ease of use as it can do math processing on board, i.e. &lt;a href=&quot;http://www.spiked3.com/?p=1731&quot; rel=&quot;nofollow&quot;&gt;Output ready to use quaternions&lt;/a&gt;. &lt;/p&gt;&#xA;" OwnerUserId="274" LastActivityDate="2014-12-13T08:20:06.153" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5148" PostTypeId="1" CreationDate="2014-12-13T12:01:13.210" Score="0" ViewCount="206" Body="&lt;p&gt;I am new to robotics. I want to understand how gears state is preserved as the gears turned to same positions repetitively. &#xA;I have a bevel gear and a step motor connected to one gear. This gear will turn 45*n = degrees. That is to say there are 8 states gears will stay in. The problem here is there will be force on the gear, which is not connected to motor, in any direction. That force must not change worm position even in micrometers. I think there should be a locking mechanism. Is there any applications of that you can give example of?&lt;/p&gt;&#xA;" OwnerUserId="7120" LastEditorUserId="7120" LastEditDate="2014-12-13T22:04:55.787" LastActivityDate="2015-01-17T04:49:22.563" Title="Step Motor and Bevel gear calibration" Tags="&lt;stepper-motor&gt;&lt;stability&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5149" PostTypeId="1" CreationDate="2014-12-13T20:25:43.687" Score="0" ViewCount="347" Body="&lt;p&gt;I' m looking for a trajectory generator (the algorithm doesn't matter, since I m going to write it using C++ ) that generates a trajectory (a parametric curve in space) defined point by point which is going lately to be feed into my quadrotor drivers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm honest: I don't know where to start.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;Reading&lt;/strong&gt; the following interesting &lt;a href=&quot;https://robotics.stackexchange.com/a/2260/7097&quot;&gt;answer&lt;/a&gt;. But the problem here is: the trajectory has a PD controller with it. My quadrotor should take just a parametric curve as input.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://ompl.kavrakilab.org/OMPL_Primer.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;strong&gt;OMPL&lt;/strong&gt;&lt;/a&gt;: this library seems very powerful and interesting. It let the user to define a planner which many different algorithms. The problem is that it is not well documented, good examples and explanations are missing and till now I could'nt find anything related to quadrotors, which does use that library. There is an example for a quadrotor, which doesn't find my expectations and I cannot figure out, how to implement it in my package. I don't want just copy and paste code that I don't understand.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;B-Spline and Bezier Curve&lt;/strong&gt;...and the whole family of parametric curves. I found very interesting libraries in internet that implement those algorithm directly C++. The problem here is: I can define some points in space, generate a spline that contains them and interpolate points for the PID controller in the quadrotor. The basic idea is like a dog chasing a rabbit. A point is generated from the start point of the spline and regularly sent to the quadrotor. The latter flies behind the point, trying to reach it until a goal point has been reached. What is the problem here?!? In this case I can only generate a curve based on geometric properties and not considering the &lt;strong&gt;dynamic&lt;/strong&gt; and the &lt;strong&gt;kinematic&lt;/strong&gt; of the quadrotor (which I would consider for a future project). The rabbit runs and has a tighter curve radius than the dog, which could result in a strange behavior of the quadrotor.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I'd like same good tips to point to the right direction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which kind of trajectory planner are usually developed fr such an application?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&#xA;Regards&lt;/p&gt;&#xA;" OwnerUserId="7097" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2014-12-18T23:06:23.850" Title="Defining a trajectory for a quadrotor" Tags="&lt;mobile-robot&gt;&lt;ros&gt;&lt;quadcopter&gt;&lt;movement&gt;" AnswerCount="0" CommentCount="17" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5150" PostTypeId="1" AcceptedAnswerId="5151" CreationDate="2014-12-14T06:52:43.117" Score="1" ViewCount="1751" Body="&lt;p&gt;After a lot of learning, I'm launching a reballing business and I feel the need to have a realtime plot of the temperatures involved (ideally 3 or 4) and I have an arduino uno and a few K type thermocouples, I was researching the subject and saw a lot of different approachs, most of them use arduinos to send serial data to a pc port, then from there they process it with phyton, other guys matlab, some use ms excel plus a free add on in vb for apps. etcetera, and now after some reading I feel overwhelmed by all the different methods, so I wonder, perhaps I'm already losing perspective here? may be there is a simple method I can use and KISS way of get it done? thank you.&lt;/p&gt;&#xA;" OwnerUserId="7682" LastActivityDate="2014-12-21T16:10:18.767" Title="what is the easiest method to plot a temperature in my pc?" Tags="&lt;arduino&gt;&lt;sensors&gt;&lt;microcontroller&gt;&lt;electronics&gt;" AnswerCount="4" CommentCount="1" ClosedDate="2015-01-04T19:56:21.070" ContentLicense="CC BY-SA 3.0" />
  <row Id="5151" PostTypeId="2" ParentId="5150" CreationDate="2014-12-14T08:07:53.693" Score="0" Body="&lt;p&gt;Looking for a open (free) source alternative is it normal to feel overwhelmed since the programs, that you can use, are really many.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Personally when I need to plot soma data coming from Arduino or Teensy on my PC I go through one of those ways:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;If I want to use a programming tool &lt;a href=&quot;https://processing.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Processing&lt;/a&gt; could be really easily implemented to show what you want. It has the same language as Arduino and the same environment. Take a look in the examples. There you can find a program that suits your needs. Since the language is the same as Arduino you have a very high portability and reconfigurability;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If I don't want to program anything, but just plot some values without loosing time, then I use &lt;a href=&quot;http://www.scilab.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Scilab&lt;/a&gt;. You don't need a license like Matlab, and fr plotting you have a lot of tools. This could be the way you want to go. In the Scilab package configuration there is package that listens to the serial port. You just need to write a small script to save in a array and then plot them. To open a serial port you need just three functions, really &lt;a href=&quot;https://stackoverflow.com/questions/15527818/how-to-make-scilab-open-a-serial-communication-with-dev-ttyacm0-usb-port-in-lin&quot;&gt;strightforward&lt;/a&gt;. I used it for controlling a robotic arm. I've formatted my PC due to a hardware failure, so I m sorry I cannot send you an already created script made by myself;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;There are other options like gplot, octave or &lt;a href=&quot;http://homepages.ihug.com.au/~npyner/Arduino/GUIDE_2PLX.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;exceel&lt;/a&gt;. But if you don't want to spend more time and need a very fast solution I would go for the step #2;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Regards&lt;/p&gt;&#xA;" OwnerUserId="7097" LastEditorUserId="-1" LastEditDate="2017-05-23T12:37:11.430" LastActivityDate="2014-12-14T08:17:24.120" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5152" PostTypeId="1" CreationDate="2014-12-14T10:19:56.993" Score="3" ViewCount="472" Body="&lt;p&gt;I am trying to control an omni wheel robot which has 4 motors using 2 joysticks, plus there are some actuation switches which I want to control too. I am using arduino mega and a pair of bluetooth wireless module(HC-05).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This bluetooth modules works on serial communication. How should I program arduino to send both the analog values provided by the joystick and the input from the switch continuously?&lt;/p&gt;&#xA;" OwnerUserId="7684" LastEditorUserId="110" LastEditDate="2015-04-14T16:55:38.180" LastActivityDate="2015-04-14T16:55:38.180" Title="To control an omni wheel robot wirelessly using bluetooth and arduino" Tags="&lt;arduino&gt;&lt;serial&gt;&lt;communication&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5155" PostTypeId="2" ParentId="5130" CreationDate="2014-12-14T19:18:58.497" Score="1" Body="&lt;p&gt;I think you have inadvertently created a controller using a Ki only term.&#xA;It appears that your Kp term is used by summing it onto the current (last cycles) output. This is effectively creating an integral output.&#xA;You need to directly output the Kp term and sum it with a separate Ki term if needed.&lt;/p&gt;&#xA;" OwnerUserId="7680" LastEditorUserId="7680" LastEditDate="2014-12-19T16:10:47.173" LastActivityDate="2014-12-19T16:10:47.173" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5156" PostTypeId="1" AcceptedAnswerId="5159" CreationDate="2014-12-14T20:35:26.207" Score="2" ViewCount="645" Body="&lt;p&gt;For a school project I am looking to track the sun with +/- 0.1 degree accuracy for use with a parabolic dish reflector. Say we need a final output torque of about 20Nm, what kind of gearing/motors and feedback would you guys use to accomplish this? The sun position will be found with a solar positioning algorithm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am pretty new to this all but from my research stepper motors seem the easiest but brushless DC motors, from what I have read, can yield better results with smoother tracking. I am confused how you even use regular brushless dc motors to achieve precision positioning. I am aware of encoders but I don't really understand why the BLDC are preferred for this particular application, and how one would implement them.. Any ideas that can help kick start my researching?&lt;/p&gt;&#xA;" OwnerDisplayName="user7690" LastActivityDate="2016-07-16T04:24:29.703" Title="Sun tracking with +/- 0.1degree accuracy?" Tags="&lt;motor&gt;&lt;brushless-motor&gt;&lt;stepper-motor&gt;&lt;servomotor&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5157" PostTypeId="2" ParentId="5150" CreationDate="2014-12-14T22:05:12.000" Score="0" Body="&lt;p&gt;Do you &lt;em&gt;need&lt;/em&gt; to use the Arduino?  Because if all I wanted to do was get temperature readings on the computer, I would use an off-the-shelf data acquisition device.  For example &lt;a href=&quot;http://labjack.com/&quot; rel=&quot;nofollow&quot;&gt;LabJack&lt;/a&gt;, &lt;a href=&quot;http://www.phidgets.com/&quot; rel=&quot;nofollow&quot;&gt;Phidgets&lt;/a&gt;, something from &lt;a href=&quot;http://www.ni.com/data-acquisition/&quot; rel=&quot;nofollow&quot;&gt;National Instruments&lt;/a&gt;, or any number of others.  There also seems to be a large number of dedicated USB temperature sensors that are not too expensive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These may be more expensive than something completely custom with an Arduino, but will be the simplest and most straight forward.   (Because you don't have to write code in 2 places.)  That is unless you are already very comfortable with the Arduino.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the PC side, there are probably almost as many ways to accomplish this as there are languages.  It is hard to give advice without more background info on your requirements and personal capabilities.  (Windows or Linux, do you want a nice GUI or bare bones, do you want to store historical data, do you want it to be a desktop widget or regular application, what level of programmer are you, etc.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should use the tools you are most comfortable with.  For example i know people who would do this on Linux in a few lines of bash script with gnuplot.  And others who would use matlab on Windows.  Personally, I'd probably go with Python and &lt;a href=&quot;http://matplotlib.org/&quot; rel=&quot;nofollow&quot;&gt;matplotlib&lt;/a&gt;.  &lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-12-14T22:05:12.000" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5159" PostTypeId="2" ParentId="5156" CreationDate="2014-12-15T07:02:13.513" Score="1" Body="&lt;p&gt;If you look a stepper motors they have not an infinite resolution: They have a fixed stepwidth, which can be break down by modulating the input signals with sin waves, but you  &lt;a href=&quot;http://www.micromo.com/microstepping-myths-and-realities&quot; rel=&quot;nofollow&quot;&gt;loose torque&lt;/a&gt;. &lt;br&gt;&#xA;So you say you need 20Nm torque. Which is a lot for a standalone stepper, therefor you need one with a gearbox. I suggest you buy a stepper with 0.5Nm, which is a pretty common value for a powerful stepper. Take a gearbox with 1:100. This means one revolution on your device's side mean 100 revolutions on your stepper's side. Therrefor you have a theoretical torque of 50Nm, which is a pretty good value for a 20Nm load. &lt;br&gt;&#xA;I assume your stepper has the standard resolution of 200Steps/Revolution. Now with the gearbox you  have a resolution of 20kSteps/Revolution or 0.018° per step. &lt;br&gt;&#xA;I won't suggest using microstepping for this setup, Because you already have enought resolution and you will only loose torque. &lt;br&gt;&#xA;The huge Problem now is the method how you &quot;control&quot; the stepper. You basically have two posibilities: Open and Closed Loop. Most of the time you use a stepper in openloop, because he usually does one step if you tell him to do one step. BUT you can &quot;loose&quot; step, which is caused by a to high load-torque. So open loop is not the best but the simplest solution. In closed loop you simply use an encoder on the stepper motor and control it. In your setup you don't have any dynamically changing loads, but this is your decision.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For BLCD it is basically the same. You will need a gearbox, too. There are gearless BLDC with this high torque, but they are not reasonable for this project (~5k$). The BLDC has no restriction is resolution, but it needs an encoder and a control loop. Unfortunatly I cannot tell a lot about typical values for BLDC.&lt;/p&gt;&#xA;" OwnerUserId="6911" LastActivityDate="2014-12-15T07:02:13.513" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5160" PostTypeId="2" ParentId="5152" CreationDate="2014-12-15T07:17:16.027" Score="1" Body="&lt;p&gt;The simplest solution is throwing all values into a comma seperated string:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;use the the standard strcat():&lt;br&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; char data[256];&#xA; chat temp[16];&#xA; data[0]=0;&#xA; temp[0]=0;&#xA;&#xA; itoa(analogRead(A1),temp,10); &#xA; strcat(data,temp);&#xA; strcat(data,&quot;,&quot;);&#xA; itoa(analogRead(A2),temp,10);&#xA; strcat(data,temp);&#xA; strcat(data,&quot;,&quot;);&#xA; itoa(analogRead(A3),temp,10);&#xA; strcat(data,temp);&#xA; strcat(data,&quot;,&quot;);&#xA; itoa(analogRead(A4),temp,10);&#xA; strcat(data,temp);&#xA; strcat(data,&quot;,&quot;);&#xA; itoa(digitalRead(5),temp,10);&#xA; strcat(data,temp);&#xA; strcat(data,&quot;,&quot;);&#xA; itoa(digitalRead(6),temp,10);&#xA; strcat(data,temp);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="6911" LastActivityDate="2014-12-15T07:17:16.027" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5161" PostTypeId="2" ParentId="2885" CreationDate="2014-12-15T10:44:17.217" Score="3" Body="&lt;p&gt;The original T-slot frame system, was developed in the 80's by &lt;a href=&quot;http://www.item24.de/en.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;item GmbH&lt;/a&gt; and was quickly developed into the &lt;a href=&quot;http://catalog.item24us.com/en/index.php?cat=c1001009411_MB-Building-Kit-for-Mechanical-Engineering.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;MB Building Kit System&lt;/em&gt;&lt;/a&gt;, hence I've always known it as &lt;em&gt;item bar&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since then though, there have been many other manufacturers producing similar systems. Examples include &lt;a href=&quot;http://www13.boschrexroth-us.com/framing_shop/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Bosch Rexroth&lt;/a&gt; (as mentioned by &lt;a href=&quot;https://robotics.stackexchange.com/users/1584/guy-sirton&quot;&gt;Guy Sirton&lt;/a&gt;), &lt;a href=&quot;http://www.8020.net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;80/20&lt;/a&gt; (&lt;a href=&quot;https://robotics.stackexchange.com/a/2886/37&quot;&gt;Andrew Capodieci's suggestion&lt;/a&gt;), &lt;a href=&quot;http://uk.rs-online.com/web/b/flexlink/&quot; rel=&quot;nofollow noreferrer&quot;&gt;FlexLink&lt;/a&gt; and many others, but &lt;em&gt;item&lt;/em&gt; is still one of the most popular and well respected, especially in Europe.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, as &lt;a href=&quot;https://robotics.stackexchange.com/users/187/david-cary&quot;&gt;David Cary&lt;/a&gt; says there are also people producing micro versions of T-slot systems, such as &lt;a href=&quot;http://openbuildspartstore.com/v-slot/?sort=featured&quot; rel=&quot;nofollow noreferrer&quot;&gt;OpenRail/VSlot&lt;/a&gt;, &lt;a href=&quot;http://www.makerbeam.eu/&quot; rel=&quot;nofollow noreferrer&quot;&gt;MakerBeam&lt;/a&gt; and &lt;a href=&quot;http://www.openbeamusa.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;OpenBeam&lt;/a&gt; etc.&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2014-12-16T11:32:47.653" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5162" PostTypeId="2" ParentId="5156" CreationDate="2014-12-15T13:37:56.600" Score="1" Body="&lt;p&gt;Well, the sun moves pretty slowly across the sky.  So your best bet is to get a motor and gear it down heavily.  I'd say the type of motor doesn't matter as much as your sensing and control loop.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;you definitely want to put an encoder directly on your dish.  This will eliminate errors from the gear train backlash.  i think you will want a 12 bit encoder or better.  this will give you slightly better than 0.1 degree accuracy.  (360 / 2^12 = 0.087 degrees per count).&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-12-15T13:37:56.600" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5163" PostTypeId="2" ParentId="4954" CreationDate="2014-12-15T18:30:58.373" Score="1" Body="&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/y2Rwb.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Check out the new Raspberry Pi Compute module, it was created for things like this. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And you can begin development on a regular raspberry pi in the meantime.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I personally believe the Raspberry Pi is completely years ahead of everything else goes as far as maturity and suitability for use in production, as evidenced by this new compute card targeted at embedded system, above and beyond just prototyping.&lt;/p&gt;&#xA;" OwnerUserId="274" LastActivityDate="2014-12-15T18:30:58.373" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5164" PostTypeId="1" CreationDate="2014-12-15T22:42:36.633" Score="1" ViewCount="2249" Body="&lt;p&gt;I'm trying to add a new message to the MAVLink interface. Following &lt;a href=&quot;http://dev.ardupilot.com/wiki/code-overview-adding-a-new-mavlink-message/&quot; rel=&quot;nofollow&quot;&gt;this page&lt;/a&gt;, there are the steps I took:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Added the message to ardupilotmega.xml. Right at the end of the file:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;message name=&quot;TESTING_TESTING_TESTING&quot; id=&quot;182&quot;&amp;gt;&#xA;  &amp;lt;description&amp;gt;A testing message&amp;lt;/description&amp;gt;&#xA;  &amp;lt;field type=&quot;int16_t&quot; name=&quot;placeholder&quot;&amp;gt;Does nothing. Simply a placeholder&amp;lt;/field&amp;gt;&#xA;&amp;lt;/message&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Regenerated the mavlink messages headers using &lt;code&gt;./libraries/GCS_MAVLink/generate.sh&lt;/code&gt;. It worked okay and the new headers appeared.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Then I added a function to the GCS class to make sure I'm sending on the right channel:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void GCS_MAVLINK::send_testing_testing_testing()&#xA;{&#xA;    mavlink_msg_testing_testing_testing_send(chan, 0);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Now it's time to send the message, I added my own function to the scheduler (on last priority). I made sure the function is called by sending text first and seeing it on the mission planner console. Here is the function I added:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;static void a_testing_loop(void)&#xA;{&#xA;    for (uint8_t i=0; i&amp;lt;num_gcs; i++) &#xA;    {&#xA;        if (gcs[i].initialised)&#xA;        {&#xA;            // gcs[i].send_text_P(SEVERITY_HIGH,PSTR(&quot;Testing String&quot;));&#xA;            gcs[i].send_testing_testing_testing();&#xA;        }&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;My message, however, isn't received on the mission planner end. It might have been received and ignored by the mission planner, but anyway it doesn't appear on the console window (even with 'Mavlink Message Debug' on)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there configuration to be made to the Mission Planner for it to receive new messages? Or am I sending the message wrong?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, is there a way to filter out messages from the console when using 'Mavlink debug mode'?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm using SITL for testing&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(I don't have enough reputation - But this should be under the tag 'mavlink')&lt;/p&gt;&#xA;" OwnerUserId="6944" LastEditorUserId="1488" LastEditDate="2015-04-26T15:08:23.893" LastActivityDate="2017-06-16T15:58:00.980" Title="How to send a new Mavlink message from Ardupilot?" Tags="&lt;ardupilot&gt;&lt;mavlink&gt;" AnswerCount="0" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5167" PostTypeId="2" ParentId="613" CreationDate="2014-12-16T07:32:18.020" Score="5" Body="&lt;p&gt;All very good answers, but as a physics teacher I am concerned about some incorrect equivalences here that can only lead to confusion. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;One form of [energy][1], eg [chemical potential energy][2], can be converted into other forms of energy (eg [electric potential energy][3], [kinetic energy][4], [sound energy][5], [thermal energy][6]). In the [SI system][7], which is by far the easiest to understand and most coherent, energy is a scalar physical quantity that is measured in [joules][8]. [Voltage][9] is not the same as energy. Voltage is measured in [volts][10]. One volt is defined as one joule per [coulomb][11]. Hence, energy (measured in joules) can never be converted into volts (measured in joules per coulomb).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The [Electromotive forces][12] (EMFs) in any electromechanical system (of which the electric motor is merely one example) are measured in volts. The [electric currents][13] are measured in [amperes][14]. [Electric charge][15] is measured in coulombs. One coulomb is one ampere second, ie the charge that flows past a point in a current of one ampere for one second.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What one needs to know for any electromechanical system is the [electrical impedance][16] of the electrical part of the system, and the [inertia][17] or [moment of inertia][18] of the mechanical part of the system. One also needs to know the net external [torque][19] driving the complete system at any moment. (When there is no torque per se (because there is no [moment][20]), then one needs to know only the net external [force][21] acting through the [centre of mass][22]).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At any moment, the electrical impedance, Z, of any electrical system is the square root of the square of the system's [electrical reactance][23], X, plus the square of the system's [electrical resistance][24], R. The system's electrical reactance is the difference between the [inductive reactance][25], X(L), and the [capacitive reactance][26], X(C), where X = X(L) - X(C)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(NB, initially, I tried to Wikilink each of the twenty-six key concepts in my answer, but the system has informed me that I am not allowed to include more than two links until I have at least ten points.)&lt;/p&gt;&#xA;" OwnerUserId="7698" LastActivityDate="2014-12-16T07:32:18.020" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5169" PostTypeId="1" AcceptedAnswerId="5170" CreationDate="2014-12-16T17:41:21.373" Score="0" ViewCount="41" Body="&lt;p&gt;I am reading the following research paper regarding Trajectory tracking of mobile robots.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=5415188&quot; rel=&quot;nofollow&quot;&gt;http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=5415188&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are two things at the start of the paper that i do not understand.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) The author derives equation(14) as the state space model of the system in which he considers the error as the state. Can anyone please elaborate on why he is using the error as the state space model of the system and not the Vx, Vy, and w(Omega, angular speed) of the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) Why does the author linearize the system around the reference trajectory?&lt;/p&gt;&#xA;" OwnerUserId="7702" LastActivityDate="2014-12-16T18:31:34.110" Title="Error as a State space" Tags="&lt;mobile-robot&gt;&lt;wheeled-robot&gt;&lt;differential-drive&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5170" PostTypeId="2" ParentId="5169" CreationDate="2014-12-16T18:31:34.110" Score="0" Body="&lt;p&gt;FYI, most people (including myself) can't see that paper because we don't have IEEE memberships.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based on your question, though, the error is often considered the state because that is what you really care about in control/estimation algorithms: you want to control the robot so the error is zero. This is true whether the reference trajectory is static or dynamic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For 2), it's hard to say without looking at the paper, but the reference trajectory is a logical point of linearization because you assume that your controller is good and the robot is close the the reference trajectory. This way you can linearize and design controllers in advance, i.e. when you don't know the true state so the reference trajectory is the only information you can use.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2014-12-16T18:31:34.110" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5171" PostTypeId="1" AcceptedAnswerId="5206" CreationDate="2014-12-16T19:07:39.473" Score="5" ViewCount="11122" Body="&lt;p&gt;I'm interested in quadcopters/multi-rotors and want to eventually code my own flight controller ala an APM and/or Pixhawk. I've got a little experience in programming (i.e i know about if/else/else if conditionals), and have done a little programming with PHP, though it was procedural code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I currently have a quadcopter that i built/assembled myself that is running on a f450 frame, using a APM 2.6 flight controller,so i have a reasonable grasp of how a quad works, and i would like to take it a step further and make my own adjustments to the code base, with the eventual aim of coding my own flight controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've had a look at the code base, but am still unable to get a grasp of what the code is actually doing....yet. How would i go about learning how to code a flight controller?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm thinking that i would have to learn C++ &amp;amp; OOP first, but how familiar/proficient would i have to be with C++ before i can reasonably attempt to edit the code base?Also, what else would i need to learn apart from C++ &amp;amp; OOP?I am looking at setting a 6 month timeframe/deadline for me to do this, would it be possible?&lt;/p&gt;&#xA;" OwnerUserId="7444" LastActivityDate="2021-04-17T09:50:01.423" Title="How would i go about learning to code a flight controller?" Tags="&lt;arduino&gt;&lt;quadcopter&gt;&lt;microcontroller&gt;&lt;multi-rotor&gt;" AnswerCount="4" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5172" PostTypeId="2" ParentId="5171" CreationDate="2014-12-16T20:13:48.717" Score="4" Body="&lt;p&gt;Controlling a flying robot (or anything else) is a very complex subject (well, people are doing PhD on it..). I can recommend &lt;a href=&quot;https://www.edx.org/course/autonomous-navigation-flying-robots-tumx-autonavx-0&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt; free online course on the subject (I have taken it myself). It will give you a little taste of what it is.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastEditorUserId="7493" LastEditDate="2015-05-27T16:28:53.130" LastActivityDate="2015-05-27T16:28:53.130" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="5173" PostTypeId="2" ParentId="4599" CreationDate="2014-12-16T21:22:20.227" Score="7" Body="&lt;p&gt;You can use the Jacobians of the inverse observation model to initialize the new row/column of the covariance matrix. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Suppose your observation model is $g(\mathbf{x})$, which maps your state $\mathbf{x}$ to a predicted observation $\hat{\mathbf{z}}$. The inverse observation model $g^{-1}(\mathbf{x}, \tilde{\mathbf{z}})$ maps an observation $\tilde{\mathbf{z}}$ to a new entry of your state. For example, if $\tilde{\mathbf{z}}$ is a range and bearing measurement, $g^{-1}$ might determine the global $(x,y)$ coordinates of a newly observed landmark given your current state estimate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let $\mathbf{P}$ be the covariance of your state and let $\mathbf{G}_x$ and $\mathbf{G}_z$ be the Jacobians of $g^{-1}$ with respect to $\mathbf{x}$ and $\tilde{\mathbf{z}}$. Then the updated state and covariance matrix after adding the new entry is&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\mathbf{x}\gets \begin{bmatrix} \mathbf{x} \\ g^{-1}(\mathbf{x}, \tilde{\mathbf{z}}) \end{bmatrix}, \qquad \mathbf{P}_{k+1} = \begin{bmatrix} \mathbf{P}_k &amp;amp; \mathbf{P}_k\mathbf{G}_x^\top \\ \mathbf{G}_x\mathbf{P}_k &amp;amp; \mathbf{G}_x\mathbf{P}_k\mathbf{G}_x^\top + \mathbf{G}_z\mathbf{R}_k\mathbf{G}_z^\top \end{bmatrix}$,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $\mathbf{R}_k$ is the variance (1D) or covariance $\mathbf{z}$.&lt;/p&gt;&#xA;" OwnerUserId="4320" LastEditorUserId="4320" LastEditDate="2015-04-13T18:29:11.950" LastActivityDate="2015-04-13T18:29:11.950" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5174" PostTypeId="2" ParentId="5140" CreationDate="2014-12-17T06:52:35.133" Score="2" Body="&lt;ul&gt;&#xA;&lt;li&gt;A &lt;strong&gt;potentiometer&lt;/strong&gt; linked to the output gear of your motor controlling the joint is the simplest position sensor. This is typically what is done inside cheap servomotors.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/LcVBb.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will get an analog signal relative to the position of the output gear. Position can be found using the relation&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\theta = \theta_0 + \frac{V_{out}}{V_{max}}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With $V_{max}$ the maximum voltage at the potentiometer end, $\theta_0$ the initial position. Precision depends on the quality of the potentiometer.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Magnetic encoder&lt;/strong&gt; is a bit more complicated, but more precise. Magnetic encoder IC allow you to get position regarding the magnetic field induced by a magnet fixed to your joint. Precision usually is of 2000 tics per joint turn. Check out &lt;a href=&quot;http://letsmakerobots.com/node/18615&quot; rel=&quot;nofollow noreferrer&quot;&gt;this project&lt;/a&gt; for example.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="7613" LastEditorUserId="7613" LastEditDate="2014-12-17T17:20:55.730" LastActivityDate="2014-12-17T17:20:55.730" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5176" PostTypeId="2" ParentId="4972" CreationDate="2014-12-17T07:24:16.320" Score="1" Body="&lt;p&gt;You haven't said whether you need 2D or 3D positioning, but if you have only 3 beacons you will need to stick to 2D.  Let's assume you know the XY position of the beacons and that the robot's sensor and the beacon emitters are at about the same height.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Geometrically, yes it can be done, with some limitations.  Take a pair of beacons B1 and B2; suppose your robot sees them as A12 degrees apart.  Now imagine that the beacons are pins stuck in a corkboard, and you have a cardboard triangle with one corner A12 degrees wide.  You can press the cardboard between the pins and rotate while keeping the triangle edges against the pins. - marking where the point lies.  Interestingly, this forms a circular arc between the pins (actually two arcs, forward and backward.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now conceptually draw the equivalent with B2 and B3 and angle B23 - more circular arcs, which will intersect.  And for good measure use B3 and B1 and angle B31 - it doesn't really give you more information, but it acts as an error check.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'll find a few places where these arcs intersect.  You can reduce the ambiguities using the order of the beacons as you scan (eg: clockwise sequence).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Besides the ambiguities, sometimes the arcs intersect close to right angles and give a sharp intersction point, but other times they are closer to tangent with each other which means that small errors in the angle result in large errors in position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, your proposed implementation is not going to work very well.  The antennas for a nRF24L01 are not going to give a very sharp directionality.  The patterns will almost certainly have multiple irregular but somewhat broad lobes that give you only a very loose sense of direction with additional ambiguities - and multipath reception will make that worse.  If there are any obstacles that absorb RF, that will make it worse.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have unobstructed line of sight, you could do better with optical sensors - that's the appoach I've played with, on paper.  Actually my original inspiration was how to tell where a photo was taken if it shows several towers on hillsides.  If you can determine the location of each tower, and you can calibrate the camera's pixels with angles, then this becomes the same problem as you raise - but with far better angular resolution.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For robotics in a smaller space, you could use visible or infrared emitters and a camera on the robot; there is some complication in spinning the camera and combining several less-than-360 degree views to get large angles, but the geometry issue is the same.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And if you have more than 3 beacons, you can improve your accuracy: they are less likely to all be obscured, some combinations will more likely have good intersection angles, you can remove many of the ambiguities, and you can average multiple solutions using different triplets to reduce the errors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I recall working out the circular arcs traced by the tip of the triangle algebraically some while ago (I was expecting something more complex and loved that it came out so beautifully simple), but I don't have that proof handy and would have to recreate it.  However if you know that the location arc is circular, it's easy to compute the center and radius of the arcs from the location of two beacons and the angle between them.&lt;/p&gt;&#xA;" OwnerUserId="7707" LastEditorUserId="7707" LastEditDate="2014-12-17T07:33:57.827" LastActivityDate="2014-12-17T07:33:57.827" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5177" PostTypeId="2" ParentId="5171" CreationDate="2014-12-17T11:55:37.427" Score="3" Body="&lt;p&gt;The course suggested by @Eugene Sh is a good one to understand in depth the relevant details. If you have general idea about how an aircraft (fixed wing) operates it will be actually helpful to you. Refer &lt;a href=&quot;http://press.princeton.edu/titles/9632.html&quot; rel=&quot;nofollow&quot;&gt;Small Unmanned Aircraft:Theory and Practice&lt;/a&gt; by Randal Beard, one of the pioneers in aerial vehicle research and T.Mclain. This is about fixed wing aircraft, but the navigation and guidance principles are same for both fixed wind and quad/tri-copters. This book is written in a very simple language with minimal equations. Will be very good for testing out some of your guidance strategies&lt;/p&gt;&#xA;" OwnerUserId="4075" LastActivityDate="2014-12-17T11:55:37.427" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5178" PostTypeId="1" CreationDate="2014-12-17T14:09:59.727" Score="7" ViewCount="4568" Body="&lt;p&gt;I've got an industrial sewing machine (think &quot;can sew with thread that looks like string, and has no trouble pounding through 20 layers of Sunbrella fabric&quot;); it's got a 1 HP motor to power it. (I've got a smaller machine as well, w/ a 1/2 or 3/4 HP motor, which I might work on first.) The motor is a &quot;clutch motor&quot; which is always on, and a foot-pedal engages a clutch, so unless you &quot;slip the clutch&quot;, you're basically always sewing fast or stopped. I'd like better control. In particular, I'd like to &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Be able to stop with the needle &quot;up&quot;&lt;/li&gt;&#xA;&lt;li&gt;Be able to stop with the needle &quot;buried&quot; (i.e., most of the way down)&lt;/li&gt;&#xA;&lt;li&gt;Be able to press a button to move forward exactly one stitch&lt;/li&gt;&#xA;&lt;li&gt;Be able to adjust -- probably with a knob -- the top speed of the motor&lt;/li&gt;&#xA;&lt;li&gt;Have the motor off when I'm not actually sewing&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The 1 HP motor is probably overkill for what I'm doing. I don't suppose I've ever used more than about 1/4 HP even on the toughest jobs. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd appreciate any comments on my thinking so far: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;From what I've read, it looks as if a DC motor is the way to go (max torque at zero speed, which is nice for that initial &quot;punch through the material&quot; thing, and the ability to &quot;brake&quot; by shorting the + and - terminals). Brushless would be nice...but expensive. And I have a nice DC treadmill motor, and if I drive it at about 12-24V, it'll give me more or less the right speed; adjusting pulleys will do the rest. Such DC motors are powered (in electric lawnmowers, for instance) by running AC through a diode bridge rectifier to produce pulsating DC, and I've got such a bridge rectifier handy. I also have an old autotransformer that I can use to get 24VAC pretty easily. Thus I can get 24V pulsating DC to drive the thing ... but that may or may not be a good idea. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've also got an Arduino and the skills to program it, and several years of electronics tinkering, and some RC experience...but no experience handling larger DC motors like this one. I've been told the magic words &quot;H-bridge&quot;, and found this &lt;a href=&quot;http://www.ebay.com/itm/SX8847-240W-H-bridge-Motor-Driver-Module-SPI-Smart-Car-4WD-Arduino-USA-/111337627980?pt=LH_DefaultDomain_0&amp;amp;hash=item19ec3d614c&quot;&gt;motor driver&lt;/a&gt; which certainly seems as if it'll allow me to turn on/off the motor, and regulate the voltage going to the motor. I don't know whether, when presented with pulsating DC at the input, it'll still work. Any thoughts on this? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also can't tell -- there doesn't seem to be a handy datasheet or instruction page -- whether this thing can do braking. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For position sensing, there are lots of places I can get information -- either from the needle baror the handwheel of the sewing machine, so I'm not too concerned about that part. To give a sense of the problem, a typical stitching speed is something like 1000 stiches per minute, so if I'm just sensing whether the needle is in the top 1/4 of its travels or the bottom quarter, we're talking about something on the order of 10-50Hz, which doesn't &lt;em&gt;sound&lt;/em&gt; like a challenging control scenario. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I guess my questions are these:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Will pulsating DC work with a controller like the one I've cited? &lt;/li&gt;&#xA;&lt;li&gt;Would I be better off with an RC motor-controller? I can't seem to find one designed for the 24V range that can handle 50 amps, unless it's for a brushless motor, which I don't have. And I &lt;em&gt;think&lt;/em&gt; that I want one that has braking ability as well. And I worry that with an RC controller, the software in the controller may prevent me from making the motor stop at a particular position. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Any comments/suggestions appreciated. (BTW, I'm happy with mathematics and with reading data sheets, and I've read (a few years ago) about half of &quot;The Art of Electronics&quot;, just so you have an idea of the level of answer that's appropriate.) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To answer @jwpat's questions:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;I got my voltage value by saying that the motor is rated for (I think) 130V, and is 2.5HP (yikes), but turns at something like 6700 RPM. (&lt;a href=&quot;https://www.youtube.com/watch?v=olxeXGonOIk&quot;&gt;Here's&lt;/a&gt; one that looks just like mine).  Dividing by 5 or 6, I got &quot;about 24 V&quot; to give me about 1400 RPM. (I'm at the office; the motor's at home, so I can't tell you the exact part number, alas.) I honestly don't think that the no-load vs load condition is a big deal, because I can wangle a factor of 2 with pulleys. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The sewing machine is a &lt;a href=&quot;https://www.youtube.com/watch?v=exn_9WF6iqo&quot;&gt;Juki 562&lt;/a&gt; &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Current motor/clutch are similar to &lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/B002L6KA92&quot;&gt;this&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Sorry for the lack of detail here, &lt;/p&gt;&#xA;" OwnerUserId="7709" LastEditorUserId="7709" LastEditDate="2014-12-17T19:44:20.863" LastActivityDate="2015-12-31T09:14:34.637" Title="I want to control a sewing machine motor; need help with choices" Tags="&lt;motor&gt;&lt;control&gt;&lt;power&gt;" AnswerCount="2" CommentCount="9" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5179" PostTypeId="2" ParentId="4972" CreationDate="2014-12-17T14:46:50.963" Score="0" Body="&lt;p&gt;There's a lovely theorem in mathematics: given three points $A, B, C$ on a circle, the angle $BAC$ subtended at $A$ by the arc $BC$ is exactly half the angle subtended by the arc $BC$ from the circle's center (i.e., the &quot;angle between $B$ and $C$, as seen from the circle center&quot;). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus as @Zeph observes, knowing the angle between any pair of towers places you on a circle of a particular radius that contains these towers at a certain angular distance from each other on the circle... but there are two such circles. If you know the &lt;em&gt;signed&lt;/em&gt; angle (i.e., &quot;As I sweep counterclockwise, I see $B$ and then $C$, with the angle between them less than 180&quot;), then you actually know which of the two circles you're on. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you look in Bowditch's &lt;em&gt;American Practical Navigator&lt;/em&gt;, you'll find that this technique has been known for some time. (Closely related: &quot;doubling the angle on the bow&quot;). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The sensitivity of the computed position to angular noise is not pretty. If your three towers are very far apart (hundreds of miles), but distributed at 120 degrees angles around the center of your region of interest, then the angles measured from any point in your region will be very close to 120...so determining the exact location will be tough. If, at the other extreme, your three beacons are very near the center of your region, then the three angles will again tend to be almost equal from all points of view, so the computed position will be very sensitive to angle again. In the ideal case -- which is probably to have the beacons placed on a circle that's perhaps twice the size of your region of interest -- you can probably do OK...but you'll do hugely better if you put 15 beacons out there, and use something like a Kalman filter to update your position estimate at each moment. Greg Welch at UNC did something like this for tracking in virtual reality systems, back in about 1991 or 1992, I believe, but I could be off by a year or two. &lt;/p&gt;&#xA;" OwnerUserId="7709" LastActivityDate="2014-12-17T14:46:50.963" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="5180" PostTypeId="1" CreationDate="2014-12-17T17:13:35.897" Score="2" ViewCount="382" Body="&lt;p&gt;I've just made a radio frequency remote control using PIC microcontroller and I want to do something useful with it. I am thinking of a robot that gets things for you while you are at bed but here comes the question: How am I going to have the PIC determine the location of the remote control calling for it? It can't really be done using a GPS module because it will all be in the house.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What options do I have?&lt;/p&gt;&#xA;" OwnerUserId="7711" LastEditorUserId="158" LastEditDate="2014-12-18T13:37:55.977" LastActivityDate="2015-11-25T03:25:54.810" Title="making a robot that knows your location" Tags="&lt;microcontroller&gt;&lt;localization&gt;" AnswerCount="4" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5181" PostTypeId="2" ParentId="5148" CreationDate="2014-12-18T04:00:43.097" Score="1" Body="&lt;p&gt;A complete answer isn't possible without details of your requirements for rotation rates, torque, tolerance, budget, mechanical layout, allowances for calibration or adjustment, and directions of motion.  That said, I will mention some relevant topics for gungor to study.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, read about &lt;em&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Backlash_%28engineering%29&quot; rel=&quot;nofollow&quot;&gt;backlash&lt;/a&gt;&lt;/em&gt;.  Here's a brief overview from wikipedia:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In mechanical engineering, backlash, sometimes called lash or play, is clearance or lost motion in a mechanism caused by gaps between the parts. It can be defined as &quot;the maximum distance or angle through which any part of a mechanical system may be moved in one direction without applying appreciable force or motion to the next part in mechanical sequence&quot;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Next, read about &lt;em&gt;anti-backlash mechanisms&lt;/em&gt;.  An article in &lt;a href=&quot;http://machinedesign.com/technologies/methods-minimize-gear-backlash&quot; rel=&quot;nofollow&quot;&gt;machinedesign.com&lt;/a&gt; has an overview of some common methods, including use of precision gears; adjusting positions of gears (either manually or automatically) for minimum lash; and special designs.  With so little context given in the question, one can't say which technique would be best.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also consider using limit switches or an encoder.  A set of eight or sixteen switches could be installed and calibrated so that different combinations of switch readings correspond to go and nogo rotations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A &lt;a href=&quot;http://en.wikipedia.org/wiki/Rotary_table&quot; rel=&quot;nofollow&quot;&gt;rotary table&lt;/a&gt; or an indexing fixture would allow precise and solid positioning, but can be expensive, heavy, and in some forms difficult to use in automated systems.  However, if you use a machinist's indexing or dividing plate with a multiple of eight holes, repetitive rotary positioning accurate to a few arcseconds (comparable to a few microns at a radius of a few cm) is easy to achieve.&lt;/p&gt;&#xA;" OwnerUserId="478" LastActivityDate="2014-12-18T04:00:43.097" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5182" PostTypeId="1" CreationDate="2014-12-18T21:23:11.710" Score="0" ViewCount="170" Body="&lt;p&gt;I have followed the tutorial for razor IMU and it worked perfectly when the IMU is directly connected to the PC. Currently, i am trying to interface the 9 dof razor imu with the arduino uno by simply connect the rx to tx and tx to rx. Sadly, it doesn't work! So, i am just wondering, has anyone done this before? or can anybody give me some hints? Much appreciated! &lt;/p&gt;&#xA;" OwnerUserId="7722" LastActivityDate="2014-12-18T23:03:22.670" Title="interfacing arduino uno with 9 dof razor imu" Tags="&lt;arduino&gt;&lt;imu&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5183" PostTypeId="2" ParentId="5182" CreationDate="2014-12-18T23:03:22.670" Score="1" Body="&lt;p&gt;Yes, I've already experience.&#xA;Check please the baud rate of Arduino. it must match that of the board. Pay attention to the connection 5V and ground. I mean...check them with a &lt;a href=&quot;http://www.northerntool.com/images/product/2000x2000/163/163100_2000x2000.jpg&quot; rel=&quot;nofollow&quot;&gt;Voltmeter&lt;/a&gt; !!!!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After that try to connect only the Arduino to your PC and be sure it echoes all ASCII Charachter you send to it (for this you find a ton of progrs in net). It everything goes wonderful and you are sure is everything ok, try just to forwarding the raw data from the board to the PC. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Only if those steps don't show any sign of life have you a broken board or something like that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let us know &lt;/p&gt;&#xA;" OwnerUserId="7097" LastActivityDate="2014-12-18T23:03:22.670" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5184" PostTypeId="2" ParentId="5180" CreationDate="2014-12-18T23:19:07.943" Score="1" Body="&lt;p&gt;For closed spaces (like a robot in a factory moving pieces from A to B) it is usually the best solution to put some beacons on walls, carpet, edge, doors, etc.. and doing a localisation based on fixed markers or beacons. Here get you an idea: &lt;a href=&quot;https://parasol.tamu.edu/wafr06/papers/p45.pdf&quot; rel=&quot;nofollow&quot;&gt;https://parasol.tamu.edu/wafr06/papers/p45.pdf&lt;/a&gt;&#xA;but I strongly suggest you to read the following &lt;a href=&quot;http://www.robotee.com/EBooks/Introduction_to_Autonomous_Mobile_Robots.pdf&quot; rel=&quot;nofollow&quot;&gt;book&lt;/a&gt;&#xA;.&#xA;Forget Voronoi, potential fields and EKF or Markov probabilistic methods. The way you want to go is triangulation between fixed markers. Usually you need at least 3 of them, preferably 4. It is not really difficult as you can image. It is enough to mount a light emitter on your robot, put some &lt;a href=&quot;https://www.google.de/search?q=reflecting%20beacon&amp;amp;client=ubuntu&amp;amp;hs=JUR&amp;amp;channel=fs&amp;amp;source=lnms&amp;amp;tbm=isch&amp;amp;sa=X&amp;amp;ei=tF-TVPLUC-LQygOOkoLICQ&amp;amp;ved=0CAgQ_AUoAQ&amp;amp;biw=1600&amp;amp;bih=805#channel=fs&amp;amp;tbm=isch&amp;amp;q=reflective%20strip&quot; rel=&quot;nofollow&quot;&gt;reflecting strips&lt;/a&gt; on the wall and write a program to read the intensity of the light reflected from the marker and the angle. Some of them are in Infrared light spectrum, so you don't see anything. If I find the book, where I read about this, I ll tell you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or you can use a solenoid under the carpet..a line follower just to get the idea. The idea with the reflective strips is the most commons in industry where a robot must move in a given space but on medium-long distance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A GPS does in reality the same...with 4 satellites&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regards&lt;/p&gt;&#xA;" OwnerUserId="7097" LastEditorUserId="7097" LastEditDate="2014-12-19T08:10:42.397" LastActivityDate="2014-12-19T08:10:42.397" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5185" PostTypeId="2" ParentId="5150" CreationDate="2014-12-19T08:41:02.713" Score="0" Body="&lt;p&gt;&lt;a href=&quot;http://www.pyqtgraph.org/&quot; rel=&quot;nofollow&quot;&gt;Pyqtgraph&lt;/a&gt; for python is made with OpenGl and its blazing fast compare to &lt;a href=&quot;http://matplotlib.org/&quot; rel=&quot;nofollow&quot;&gt;Mathplotlib&lt;/a&gt; or other that are using processor to draw... I was really happy with Pyqtgraph, and it is made for ploting real time plots.&lt;/p&gt;&#xA;" OwnerDisplayName="user7586" LastActivityDate="2014-12-19T08:41:02.713" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5187" PostTypeId="2" ParentId="4699" CreationDate="2014-12-19T14:06:15.430" Score="0" Body="&lt;p&gt;There is a simple off-the-shelf solution.  The &lt;a href=&quot;http://www.irobot.com/create&quot; rel=&quot;nofollow&quot;&gt;iRobot Create&lt;/a&gt; is a hackable Roomba and maintains all of its original code and behaviors.  One of which is &quot;seek dock&quot;.  Although i think the max distance it can sense the dock is probably around 1 or 2 meters.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-12-19T14:06:15.430" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5188" PostTypeId="1" CreationDate="2014-12-19T16:27:59.870" Score="1" ViewCount="68" Body="&lt;p&gt;Are any commercially available compound vision sensors available?&#xA;Not a simple 8 sensor system using photo-diodes but a genuine sensor that can provide a &gt;32x32 compound matrix. Would some form of reduction in the granularity of a megapixel camera be a better option? The real purpose is to reduce processing time to a minimum, while extracting the maximum basic information. &lt;/p&gt;&#xA;" OwnerUserId="7680" LastEditorUserId="7680" LastEditDate="2014-12-28T10:07:05.193" LastActivityDate="2015-06-09T23:08:25.600" Title="Compound vision system or Megapixel camera reduction" Tags="&lt;computer-vision&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5189" PostTypeId="1" CreationDate="2014-12-19T22:05:53.827" Score="2" ViewCount="5449" Body="&lt;p&gt;I'm looking for an arduino compatible depth sensor NOT for water. What I need is a sensor very similar to an Xbox kinect (but much smaller) that will tell me what is in front of the sensor and also the shape of the object. For example, if I place a cylindrical water bottle in front of the sensor I would like to be able to figure out how far away the bottle is and also the shape of the object (in 2d, I don't need to know whether it is actually a cylinder only the general shape). The sensor only needs to be accurate at most 1 meter away. Does this exist and if so where can I purchase one. If it does not exist wholly what pieces do I need to buy to put it together? Thanks.&lt;/p&gt;&#xA;" OwnerUserId="7730" LastActivityDate="2015-05-23T21:53:56.230" Title="Arduino depth sensor" Tags="&lt;arduino&gt;&lt;sensors&gt;&lt;kinect&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5190" PostTypeId="2" ParentId="5082" CreationDate="2014-12-20T01:03:17.550" Score="0" Body="&lt;p&gt;Ian's comment is spot on. To maintain a constant altitude, you need to know what altitude you are at. For aircraft this is based on a pressure sensor. This is generalized at 14.696 psi for 0 ft altitude. For quad copters this is probably impractical. An ultra sonic sensor pointing at the ground or accelerometers tuned to minimize drift in altitude is more practical if you are relying on visual feedback for adjustment. &lt;/p&gt;&#xA;" OwnerUserId="7680" LastActivityDate="2014-12-20T01:03:17.550" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5191" PostTypeId="2" ParentId="235" CreationDate="2014-12-21T03:41:17.503" Score="2" Body="&lt;p&gt;Vince has it right, it is a designers choice. Depends on the application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Moving the mass away from the center point of rotation will increases the moment of inertia. Which means it will resist influences from external forces more.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This includes both environmental disturbances and self generated motion command updates. One of these is not wanted, and the other is wanted. This leaves us with the trade off in design decision. What you choose will be application specific.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you choose to have a responsive craft that is quick an aerobatic, it will come at the cost of the controller continuously fighting external disturbances. There will be a limit to how fast it can respond (bandwidth), and consequently will be more unstable given large, or rapidly varying disturbances.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Conversely, if you want inherent open loop stability, it will come at the cost your craft being slow to implement it's own desired motion updates.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am doing my first build at the moment. I want to start with high controller bandwidth given the mountain environment I am in. My current conundrum is, do I put the battery on top or below. I really want it below. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Primarily because I am going to be changing things up down there when I start adding peripheral components to interact with the environment. It makes sense to wire up the computer with all fixed parts on top and then it's done, permanently.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But this does leave me with two issues. One doesn't want to get into the inconsistent delayed response that yoos brought up that will occur when something is dangling on a string. I can synch up the battery but it is quite a bit of effort each time for both axis'. Maybe I just need to invest in a better battery strap than my 1 dollar Chinese Velcro.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The real thing bothering me right now is risk, the idea of an unstable battery being exposed. I've got the heli-style Tarrot landing gear, and in a big fall I don't see it doing much to protect the battery.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my question to expand this discussion here is: What are people doing in terms of top or bottom? I like the idea of it being up above, but that leads to numerous different awkward other placement problems down the road.&lt;/p&gt;&#xA;" OwnerUserId="7733" LastActivityDate="2014-12-21T03:41:17.503" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5192" PostTypeId="1" AcceptedAnswerId="5198" CreationDate="2014-12-21T04:51:41.787" Score="0" ViewCount="623" Body="&lt;p&gt;When I use a standard manual vacuum, I often notice that I have to pass over a spot several times because a single pass does not necessarily catch all the dirt.  My eyes/brain can easily perceive this information visually, but I don't know how an autonomous robot vacuum can detect whether a pass over a patch of dirt was successful or not.  What kind of sensor/action can I use to determine if the robot vacuum successfully picked up the dirt from a particular patch?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would prefer to avoid a visual camera if at all possible because it would necessarily have to be mounted above the robot and thereby limit the range of reachable locations.  Is there some other low-cost sensor that can accomplish the same task that can be placed low to the ground?&lt;/p&gt;&#xA;" OwnerUserId="2295" LastEditorUserId="2295" LastEditDate="2014-12-21T05:53:54.040" LastActivityDate="2014-12-29T01:09:20.210" Title="Alternatives to cameras for a dirt sensor for an autonomous vacuum robot?" Tags="&lt;sensors&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5193" PostTypeId="1" AcceptedAnswerId="6702" CreationDate="2014-12-21T05:14:58.733" Score="1" ViewCount="427" Body="&lt;p&gt;I know that Occupancy Grid Mapping requires the assumption that the robots' pose is always known when generating a map.  However, I also know that in reality, position and orientation usually treated as uncertain in practical applications.  Assuming that my target mapping environment is inside a home, is there a way I can overcome inherent robot pose uncertainty in a real world application of Occupancy Grid Mapping without resorting to implementing a SLAM?  That is, what is a low-cost way to increase the certainty about my pose?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or is Occupancy Grid Mapping only useful in theory and not in practice?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Update&lt;/em&gt;&lt;/strong&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is clear to me, from the responses given, that occupancy grid mapping is just one possible way to represent a map, not a method in and of itself.  The heart of what I really want to know is:  &lt;strong&gt;&lt;em&gt;Can mapping be done without also solving the localization problem at the same time (i.e. SLAM) in real life applications?&lt;/em&gt;&lt;/strong&gt;   &lt;/p&gt;&#xA;" OwnerUserId="2295" LastEditorUserId="2295" LastEditDate="2015-03-02T05:31:21.207" LastActivityDate="2016-09-01T13:14:01.400" Title="Can mapping be done in real life applications without also solving the localization problem at the same time (i.e. SLAM)?" Tags="&lt;slam&gt;&lt;mapping&gt;&lt;occupancygrid&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5194" PostTypeId="2" ParentId="5150" CreationDate="2014-12-21T16:10:18.767" Score="0" Body="&lt;p&gt;&lt;a href=&quot;http://www.datplot.com/&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;DatPlot&quot;&gt;DatPlot&lt;/a&gt; is an absolutely fantastic tool for plotting data and browsing through it, and I use it heavily when I want to quickly visualise and browse some data. I think it perfectly fills in a gap that exists between spreadsheets (such as excel) and general purpose computing packages (such as MATLAB, Scilab etc), in that it's great for exploring the data (zooming in and out, panning, selecting - which is something that spreadsheets utterly lack in my experience), and at the same time very simple and dedicated to one task (unlike MATLAB, scilab) and hence is quick to download install and use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/utMtt.png&quot; alt=&quot;DatPlot&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously, you're still going to have to get the temperature data into your PC. If you have an off the shelf data logger, then great. Otherwise, in my opinion, an Arduino (or other microcontroller) would be a very simple solution - just get it to regularly sample your sensor and then send temperature (and optionally time) via the serial port. You can then use a program such as &lt;a href=&quot;http://realterm.sourceforge.net/&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;RealTerm&quot;&gt;RealTerm&lt;/a&gt; (don't be overwhelmed by the UI) to automatically capture what's being sent via the serial port and save it to a file that you can then directly open in DatPlot. In RealTerm, the Capture tab allows you to just dump whatever is coming from the serial port directly to a file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/uSHxX.png&quot; alt=&quot;RealTerm&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="7738" LastActivityDate="2014-12-21T16:10:18.767" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5196" PostTypeId="1" CreationDate="2014-12-22T16:48:59.383" Score="0" ViewCount="186" Body="&lt;p&gt;I want to use brushless for my line follower.&lt;br&gt;&#xA;The problem is most ESCs don't accept more than 400-500 updates/s due to the characteristic of steering signal.&lt;br&gt;&#xA;Is there a way to overcome this with a custom flash or am I out of luck?&lt;/p&gt;&#xA;" OwnerUserId="7743" LastActivityDate="2015-03-03T02:14:12.010" Title="Is there a brushless motor controller accepting over 500 updates/s?" Tags="&lt;brushless-motor&gt;&lt;esc&gt;&lt;line-following&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5197" PostTypeId="2" ParentId="5189" CreationDate="2014-12-22T20:20:28.777" Score="1" Body="&lt;p&gt;I am not sure the Arduino has the &quot;horse power&quot; for this.  You might be better off going with a RaspberryPi, BeagleBone, or some other embedded board that can run a real operating system...  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For 2D depth sensors, the main contenders are &lt;a href=&quot;http://www.sick.com/us/en-us/home/products/product_portfolio/laser_measurement_systems/Pages/measure_and_detect.aspx&quot; rel=&quot;nofollow&quot;&gt;SICK&lt;/a&gt; and &lt;a href=&quot;http://www.hokuyo-aut.jp/02sensor/07scanner/utm_30lx.html&quot; rel=&quot;nofollow&quot;&gt;Hokuyo&lt;/a&gt;.  The interface for these is typically USB.  But i know older model SICKs used RS232 which might actually work with an 8 bit microcontroller.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other types of depth sensors that typically play nicer with microcontrollers are &lt;a href=&quot;http://www.robotshop.com/en/ultrasonic-range-finders.html&quot; rel=&quot;nofollow&quot;&gt;ultrasonic rangers&lt;/a&gt;, and &lt;a href=&quot;https://www.sparkfun.com/categories/139&quot; rel=&quot;nofollow&quot;&gt;infrared proximity sensors&lt;/a&gt;.  However, these have a much wider beam, are much more noisy, and can adversely interact with each other if you try to make an array out of them.  (For example, an ultrasonic pinger will hear the response of the one next to it if they are turned on at the same time.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lastly, another option that is not Arduino compatible, but is cheap and might work with your system depending on what you want to do, is to use a camera and a laser line for structured light.  You can do some image processing and determine the depth to the line.  This paper: &quot;&lt;a href=&quot;http://www.stanford.edu/~ellenrk7/Papers/icra09-3dSensingMobileManipulation.pdf&quot; rel=&quot;nofollow&quot;&gt;High-Accuracy 3D Sensing for Mobile Manipulation: Improving Object Detection and Door Opening&lt;/a&gt;&quot; has more info.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-12-22T20:20:28.777" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5198" PostTypeId="2" ParentId="5192" CreationDate="2014-12-22T20:27:31.713" Score="1" Body="&lt;p&gt;If you want a robotic vacuum, and are not dead-set on building the base platform, you can always buy a Roomba and hack it.  The &quot;Open Interface&quot; of the &lt;a href=&quot;http://www.irobot.com/create&quot; rel=&quot;nofollow&quot;&gt;Create&lt;/a&gt; works with any model Roomba.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And yes, the Roomba has piezoelectric-based dirt detection.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2014-12-22T20:27:31.713" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5199" PostTypeId="1" CreationDate="2014-12-22T22:55:14.053" Score="0" ViewCount="55" Body="&lt;p&gt;I am struggling to find good links to the use of &lt;a href=&quot;http://matthias-rolf.blogspot.com/p/goal-babbling.html?m=1&quot; rel=&quot;nofollow&quot;&gt;goal babbling&lt;/a&gt; in SLAM applications. Has this technique been used as a method for optimizing movement in a SLAM environment?&lt;/p&gt;&#xA;" OwnerUserId="7680" LastEditorUserId="2295" LastEditDate="2014-12-23T01:13:16.750" LastActivityDate="2014-12-23T01:13:16.750" Title="SLAM Goal Babbling" Tags="&lt;localization&gt;&lt;slam&gt;&lt;motion-planning&gt;&lt;mapping&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5201" PostTypeId="1" AcceptedAnswerId="6847" CreationDate="2014-12-23T01:50:38.637" Score="3" ViewCount="2876" Body="&lt;p&gt;How can I power a wheel but let it spin freely when not under power?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I saw the question &lt;a href=&quot;https://robotics.stackexchange.com/questions/2/how-can-i-modify-a-low-cost-hobby-servo-to-run-freely&quot;&gt;How can I modify a low cost hobby servo to run &amp;#39;freely&amp;#39;?&lt;/a&gt; but I'm more interested in knowing if there is some sort of gearbox that disengages ( moves to 'neutral' ) when no torque is being applied to it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Two ideas that come to mind are:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;A drive gear on a spring loaded arm with a nominal amount of resistance before engaging. Perhaps when under power it would first use power to move in one direction, then it would engage with another gear, but without power the spring would return it to a non-engaged position&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A centrifugal clutch - although I'd like something that works at low RPMs as well&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The idea is to create a small bot that can move up and down a track, but if someone interacts with it when not under power it will just roll and won't damage the gearbox.&lt;/p&gt;&#xA;" OwnerUserId="7747" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2015-03-22T13:49:19.170" Title="How can I power a wheel but let it spin freely when not under power?" Tags="&lt;motor&gt;&lt;power&gt;&lt;rcservo&gt;&lt;radio-control&gt;" AnswerCount="1" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5202" PostTypeId="2" ParentId="2832" CreationDate="2014-12-23T05:29:47.400" Score="0" Body="&lt;p&gt;According to the &lt;a href=&quot;http://www.servodatabase.com/servo/towerpro/mg995&quot; rel=&quot;nofollow&quot;&gt;specs&lt;/a&gt;, that is a 4.8V servo. Do NOT run it at 8 volts unless you are doing a smoking light show.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Get some sort of step down like &lt;a href=&quot;http://www.ebay.com/itm/DC-DC-Boost-Buck-adjustable-step-down-Up-Converter-XL6009-Module-Solar-Voltage/400597430280&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt; and set the voltage to 5V max.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you have the voltage correct the rule of thumb is max 1 amp per servo at heavy load. How many of your servos will be at heavy load? Your batteries will need to deliver that, and is specified as a 'C' rating.  A C rating of 1 means 1 times the mah, so 2 LiPos in series (for approx 7.4V even though it will be stepped down) is still 2200mah = 2.2 amps Most Batteries today have a minimum C of 15 or so. I would imagine 12 lightly loaded servos will not exceed 2.2 amps, but with a C rating of 15, you have up to 30 amps available, the step down is rated at 4amps, so you might need a beefier version of it (but I doubt it).&lt;/p&gt;&#xA;" OwnerUserId="274" LastActivityDate="2014-12-23T05:29:47.400" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5203" PostTypeId="1" CreationDate="2014-12-23T14:20:46.313" Score="1" ViewCount="475" Body="&lt;p&gt;I have the quadcopter in the photo below. It has rotate &lt;code&gt;theta&lt;/code&gt; degrees about the &lt;code&gt;-y&lt;/code&gt; axis. I want to get the &lt;code&gt;x&lt;/code&gt; and &lt;code&gt;z&lt;/code&gt; components in the local frame for the weight &lt;code&gt;W&lt;/code&gt; which always points along the vertical downward.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/1TuVk.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We simply have:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Wx = W sin(theta); Wz = W cos(theta);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Suppose that &lt;code&gt;W = 4N&lt;/code&gt; and &lt;code&gt;theta = 30 deg&lt;/code&gt;, then:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Wx = -4 * sin(-30) = 2N;   Wz = -4 * cos(-30) = -3.464N&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The negative sign in the angle was put because the rotation is about the &lt;code&gt;-y&lt;/code&gt; axis (counterclockwise).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;Wz&lt;/code&gt; seems correct as it is pointing towards the negative local &lt;code&gt;z&lt;/code&gt; axis but &lt;code&gt;Wx&lt;/code&gt; is 2 which seems wrong because according to the diagram it is supposed to be -2 indicating that it point towards the negative local &lt;code&gt;x&lt;/code&gt; axis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What's wrong with my simple calculation?&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;EDIT:&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Using rotation matrices, we have the following rotation matrix when pitching (rotating about &lt;code&gt;y axis&lt;/code&gt;):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/ki1Ck.png&quot; alt=&quot;Rotation Matrix&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This matrix is used to transform vectors from inertial frame &lt;code&gt;Xn,Yn,Zn&lt;/code&gt; to local frame &lt;code&gt;Xb,Yb,Zb&lt;/code&gt;. To find the components of the weight &lt;code&gt;W&lt;/code&gt;, we can multiply this matrix by &lt;code&gt;W&lt;/code&gt;. Doing so, we get the same result:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Wx = W sin(theta); Wz = W cos(theta);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="2533" LastEditorUserId="2533" LastEditDate="2014-12-25T06:00:33.800" LastActivityDate="2014-12-26T13:19:45.523" Title="Simple vector problem, Weight vector components &amp; sine and cosine of rotation?" Tags="&lt;quadcopter&gt;&lt;frame&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5204" PostTypeId="2" ParentId="5203" CreationDate="2014-12-23T14:58:24.920" Score="2" Body="&lt;p&gt;You've written your equations as if the weight vector you drew was positive, but then used a negative weight vector in your calculation. If you flipped $W$ around in your drawing you'd get&#xA;$$&#xA;\begin{align}&#xA;W_x &amp;amp;= -W \sin(\theta)&#xA;\\&#xA;W_z &amp;amp;= W \cos(\theta)&#xA;\end{align}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;** edit **&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To expand, a more consistent approach is use to proper vector math. In this case you need apply a rotation to your weight vector (&lt;em&gt;edited to correctly go from global to local frame&lt;/em&gt;)&#xA;$$&#xA;\begin{align}&#xA;W_L &amp;amp;= [0~0~-mg]^T&#xA;\\&#xA;R_{LG} &amp;amp;= \begin{bmatrix}&#xA;\cos(-\theta) &amp;amp; 0 &amp;amp; -\sin(\theta) \\&#xA;0 &amp;amp; 1 &amp;amp; 0 \\&#xA;\sin(-\theta) &amp;amp; 0 &amp;amp; \cos(\theta)&#xA;\end{bmatrix}&#xA;\\&#xA;W_L = R_{LG} W_G &amp;amp;= \begin{bmatrix}&#xA;mg\sin(\theta) \\&#xA;0 \\&#xA;mg \cos(\theta)&#xA;\end{bmatrix}&#xA;\end{align}&#xA;$$&lt;/p&gt;&#xA;" OwnerUserId="2669" LastEditorUserId="2669" LastEditDate="2014-12-26T13:19:45.523" LastActivityDate="2014-12-26T13:19:45.523" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="5206" PostTypeId="2" ParentId="5171" CreationDate="2014-12-23T23:50:31.460" Score="2" Body="&lt;p&gt;Seeking proficiency in C++ or in OOP in general would either have to be a result of obtaining the necessary knowledge in order to browse through the code-base of the flight controllers that you mentioned, or with the eventual goal that this is what you would use when implementing your own flight controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first thing is familiarizing yourself with the syntax and semantics of the language(s) used in the implementation of the flight controllers that you're interested in adjusting.  The tricky part is actually determining what the code is doing.  It helps if the code base is well documented and that the code is developed in a concise manner.  For example, the functions and variables are named appropriately so that their purpose is clearly understood.  Otherwise be prepared to follow through the logic of the code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you have that down, one of the efficient ways when trying to decipher what the code is doing is to start from the beginning.  Look for where the program starts when the flight controller is first turned on or is commanded to start executing whatever it needs to execute.  Also what sort of initialization is it doing.  Another thing is what sort of communication protocols that might be in play if the flight controller were to communicate with others.  And then just work from there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ignoring the details for now, the sole purpose of a flight controller is really to monitor and control the whole system and possibly relay any information to others perhaps a ground station of something.  This means having the knowledge of the sort of hardware/sensors/etc. that you need and need to be physically present in order to obtain the required data  and make sense of it.  Based on the data this will determine how the quadcopter should behave/maneuver.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for wanting to implement your own flight controller it depends on what you are seeking.  Are you looking to take the existing flight controllers and replace the program installed in its entirety or are you looking to design and build your own flight controller platform and then create your own flight controller code.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;For the first case, look at the related documentation/datasheets of the flight controller at interest.  In particular see if it's possible to make your own adjustments to the flight controller code.&lt;/li&gt;&#xA;&lt;li&gt;For the second case, you might want to look into embedded systems development.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="4210" LastActivityDate="2014-12-23T23:50:31.460" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5207" PostTypeId="2" ParentId="5140" CreationDate="2014-12-24T05:13:16.297" Score="2" Body="&lt;p&gt;Probably a simple and cost-effective solution would be to use a &lt;a href=&quot;http://www.digikey.com/us/en/ph/SpectraSymbol/flex_sensor.html&quot; rel=&quot;nofollow&quot;&gt;flex sensor&lt;/a&gt;.  Essentially you can determine the amount of flex subjected on the sensor using resistance, much like a potentiometer. &lt;/p&gt;&#xA;" OwnerUserId="4210" LastActivityDate="2014-12-24T05:13:16.297" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5208" PostTypeId="1" CreationDate="2014-12-24T18:01:09.777" Score="2" ViewCount="92" Body="&lt;p&gt;I have found a continous control in the following form:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;u(s) = \left( K_{p} + \frac{K_{i}}{s} + K_{d} \frac{N}{1 + \frac{N}{s}} \right)e(s)&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;but since I need it to &quot;convert&quot; in a digital control I need something like:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;y_{k} = y_{k-1} + q_{0}e_{k-1} + q_{2}e_{k-2}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;or everything that I can use in a digital way.&#xA;Is there any algorithm to achieve such transformation?&#xA;Actually the problem is the term $N$ in the equation. At first I thought that it was a simply PID controller but the N term is far from my understanding&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you very much and happy Christmas!!&lt;/p&gt;&#xA;" OwnerUserId="7097" LastEditorUserId="7097" LastEditDate="2014-12-25T18:51:16.900" LastActivityDate="2014-12-30T20:48:13.423" Title="The algorithm for the following analog controller =&gt; digital controller?" Tags="&lt;control&gt;&lt;pid&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5209" PostTypeId="1" CreationDate="2014-12-24T20:35:33.883" Score="3" ViewCount="1921" Body="&lt;p&gt;I want to make a robot arm where a joint is powerful enough to lift 8 kg up at a distance of 1 meter. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This requires torque $tau = r*F = r*m*g$ = about 80 nm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So now I am trying to find the requisite parts to put this together, i.e. motor + gears and then controller. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems that I will require a very high gear ratio to make this happen. For example this motor: &lt;a href=&quot;http://www.robotshop.com/ca/en/banebots-rs-550-motor-12v-19300rpm.html&quot; rel=&quot;nofollow&quot;&gt;http://www.robotshop.com/ca/en/banebots-rs-550-motor-12v-19300rpm.html&lt;/a&gt; has stats:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;stall torque = 70.55 oz-in = 0.498 nm&#xA;no load roation speed = 19300 rpm&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To get my required torque, I need a gear ratio of 80/0.498 = about 161:1 (and the max speed drops to about 120 rpm).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My questions:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) Do my calculations so far seem correct? It seems a bit suspect to me that an $8 motor with some gears can cause a 17.5lbs dumbbell to rotate about a circle of radius 1m twice a second (I'm barely that strong). This type of torque would be awesome for my application, but perhaps I'm missing something in the calculations and being too optimistic (e.g. efficiency).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) Is it safe to operate a motor at such a high gear ratio? Gears are small, and I'm worried they'll easily crack/break/wear down quickly over time. Does anyone know of example gears that I should consider for this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you very much for any help, cheers.&lt;/p&gt;&#xA;" OwnerUserId="6858" LastEditorUserId="110" LastEditDate="2015-01-19T02:27:46.797" LastActivityDate="2015-01-19T02:27:46.797" Title="How high of a gear ratio can a motor have?" Tags="&lt;motor&gt;&lt;robotic-arm&gt;&lt;gearing&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5210" PostTypeId="2" ParentId="4797" CreationDate="2014-12-24T22:27:10.117" Score="1" Body="&lt;p&gt;Yes the motor just takes what it needs.&#xA;The 320 A rating means it will survive that current if the motor requires it.&lt;/p&gt;&#xA;" OwnerUserId="7757" LastActivityDate="2014-12-24T22:27:10.117" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5212" PostTypeId="2" ParentId="5208" CreationDate="2014-12-25T09:41:35.043" Score="1" Body="&lt;p&gt;You should take a look at the &lt;a href=&quot;http://en.wikipedia.org/wiki/Bilinear_transform&quot; rel=&quot;nofollow&quot;&gt;Tustin transformation&lt;/a&gt; to get the bilinear mapping between s-domain and z-domain. You'll also find examples therein.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you're provided with the description of your transfer function in z-domain, it's straightforward to derive the formula in discrete time domain.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given&#xA;$$&#xA;\frac{Y}{U}=\frac{b_0+\ldots+b_{m-1}z^{-(m-1)}+b_mz^{-m}}{a_0+\ldots+a_{n-1}z^{-(n-1)}+a_nz^{-n}},&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;you'll obtain&#xA;$$&#xA;y_k=\frac{b_0u_k+\ldots+b_mu_{k-m} - a_1y_{k-1}-\ldots-a_ny_{k-n}}{a_0}.&#xA;$$&lt;/p&gt;&#xA;" OwnerUserId="6941" LastActivityDate="2014-12-25T09:41:35.043" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5213" PostTypeId="2" ParentId="5209" CreationDate="2014-12-25T12:57:15.110" Score="1" Body="&lt;p&gt;One problem I can see is, that you are using stall torque (at 0 rpm) and no load rotation speed (at 0 Nm). If you want the motor to still turn, it will have lower torque than this, and lower RPM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, running the motor at (or close to) stall for long time will probably overheat it (it's gonna draw 85A (that is about 1KW) and dissipate it all as heat).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't have much experience with this, but for a first version I would guess you can get 50% of the stall torque and 50% of the no load rpm continually (or maybe 40%?). Then you could test it and go for different motor in second iteration.&lt;/p&gt;&#xA;" OwnerUserId="482" LastActivityDate="2014-12-25T12:57:15.110" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5214" PostTypeId="1" AcceptedAnswerId="5266" CreationDate="2014-12-25T14:08:15.743" Score="3" ViewCount="1420" Body="&lt;p&gt;First of all please see this video : &lt;a href=&quot;http://www.youtube.com/watch?v=n0dkn4ZIQVg&quot; rel=&quot;nofollow&quot;&gt;http://www.youtube.com/watch?v=n0dkn4ZIQVg&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think there is ony one stepper motor -or servo- working in the mechanisim. But as you can see each flip counter works alone and separately.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is not like classical counter mechanism like this : &lt;a href=&quot;http://www.youtube.com/watch?v=rjWfIiaOFR4&quot; rel=&quot;nofollow&quot;&gt;http://www.youtube.com/watch?v=rjWfIiaOFR4&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How does it works?&lt;/p&gt;&#xA;" OwnerUserId="7761" LastActivityDate="2015-02-01T04:26:15.117" Title="How does Fliike Smiirl counter mechanism work" Tags="&lt;mechanism&gt;&lt;stepper-motor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5215" PostTypeId="2" ParentId="5209" CreationDate="2014-12-25T23:49:36.110" Score="2" Body="&lt;p&gt;It's quite possible for an $8 motor with enough gearing to move a mass as you describe. It's also possible to have gear ratios much more than a hundred. However:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Check that the gears you're using are rated for the torque you need.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;What speed of rotation do you need? This defines the motor &lt;em&gt;power&lt;/em&gt; you need (something people often forgot to think about). Power is usually the first thing you should consider when choosing a motor.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;power(W) = force(N) x speed(m/s)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, how quickly do you need the weight to travel?&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;3&quot;&gt;&#xA;&lt;li&gt;The higher the gear ratio, the lower the efficiency of the gears. If the manufacturer doesn't specify the efficiency, then assume 50%, in which case, you'll need a motor of at least twice the power.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="40" LastActivityDate="2014-12-25T23:49:36.110" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5216" PostTypeId="2" ParentId="5140" CreationDate="2014-12-26T00:00:55.110" Score="3" Body="&lt;p&gt;Another popular rotary sensor is the ratiometric Hall effect sensor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Use a device like the &lt;a href=&quot;http://www.allegromicro.com/en/Products/Magnetic-Linear-And-Angular-Position-Sensor-ICs/Linear-Position-Sensor-ICs/~/media/Files/Datasheets/A1324-5-6-Datasheet.ashx&quot; rel=&quot;nofollow noreferrer&quot;&gt;A1324&lt;/a&gt;. It's a 3-pin device which gives an analog voltage proportional to the magnetic field strength. For a magnet, you have two options:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A diametrically polarised ring magnet mounted on the steering column. The sensor should sit at the circumference of the magnet, facing the centre.&lt;/li&gt;&#xA;&lt;li&gt;An axially polarised button magnet. Mount it on the steering column with its diameter colinear with the rotation axis.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/uPXf4.png&quot; alt=&quot;Hall effect sensors&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As the magnet rotates, the output of the sensor changes sinusoidally. If you get the strength of the magnet just right, you can have very nearly a 5v output swing. However, since the output is sinusoidal, you won't be able to measure more than about 120º with good resolution.&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2014-12-26T00:00:55.110" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5217" PostTypeId="2" ParentId="5209" CreationDate="2014-12-26T01:55:52.863" Score="7" Body="&lt;p&gt;Your calculation of about 80 N⋅m torque for lifting 8 kg with a 1 m lever arm is ok; more precisely, the number is 8 kg ⋅ 9.81 m/s² ⋅ 1 m = 78.48 N⋅m.  As mentioned in other answers, you will need to scale up to account for gear inefficiency.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A simple calculation based on work shows that the Banebots RS-550 DC motor mentioned in the question is not powerful enough to spin the mass at 120 rpm in a vertical plane, geared down only 161:1.  From $W = f\cdot s$, with $f = 78.48 N⋅m$ and $s=2 m$, we require 156.96 joules to raise the mass 2 m.  Figures for most-efficient operation from &lt;a href=&quot;http://www.robotshop.com/ca/en/banebots-rs-550-motor-12v-19300rpm.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;the Banebots page&lt;/a&gt; show 120 watts (12 VDC ⋅ 10 A) power and 17250 rpm.  Supposing efficiency is 85 to 90%, the motor will take from $156.96/(120\cdot 0.90) = 1.45$ to  $156.96/(120\cdot 0.85) = 1.53$ seconds (ie, about 1.5 seconds) to deliver enough power to lift the mass 2 m, giving $60/(1.5⋅2) = 20$ rpm. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As noted in a previous answer, the RS-550's torque value of 0.498 N⋅m that is shown in &lt;a href=&quot;http://www.robotshop.com/ca/en/banebots-rs-550-motor-12v-19300rpm.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;the Banebots page&lt;/a&gt; is stall torque.  Following is a typical small-DC-motor diagram showing current (red), speed (blue), power (yellow), and efficiency (green) versus torque.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/cSqi4.jpg&quot; alt=&quot;typical small-DC-motor speed/torque/power/efficiency diagram&quot;&gt; &lt;em&gt;From: &lt;a href=&quot;http://www.johnsonelectric.com/en/resources-for-engineers/automotive-applications/motion-technology/pmdc-motor.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;JohnsonElectric.com PMDC Motors (permanent magnet DC brushed motors)&lt;/a&gt; webpage&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can see that speed is zero at highest torque, and since (as noted in &lt;a href=&quot;http://en.wikipedia.org/wiki/Torque#Relationship_between_torque.2C_power.2C_and_energy&quot; rel=&quot;nofollow noreferrer&quot;&gt;wikipedia&lt;/a&gt;) mechanical power is given by $P = \tau\cdot\omega$, where $\tau$ is torque and $\omega$ is &lt;a href=&quot;http://en.wikipedia.org/wiki/Angular_velocity&quot; rel=&quot;nofollow noreferrer&quot;&gt;angular velocity&lt;/a&gt; in radians per second, ie $2\cdot\pi\cdot n$ at $n$ rpm, delivered power and efficiency also are zero at highest torque.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To compute actual values of torque, speed, current, power, and efficiency for this motor at various operating points, use the &lt;a href=&quot;http://en.wikipedia.org/wiki/Brushed_DC_electric_motor#Torque_and_speed_of_a_DC_motor&quot; rel=&quot;nofollow noreferrer&quot;&gt;Basic DC motor equations&lt;/a&gt; given in wikipedia's &lt;a href=&quot;http://en.wikipedia.org/wiki/Brushed_DC_electric_motor&quot; rel=&quot;nofollow noreferrer&quot;&gt;Brushed DC electric motor&lt;/a&gt; article.  Most of the parameters needed for the calculations are given in &lt;a href=&quot;http://www.robotshop.com/ca/en/banebots-rs-550-motor-12v-19300rpm.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;the Banebots RS-550 motor page&lt;/a&gt;, which apply when the motor is powered by 12VDC.  Other required parameters can be calculated; for example, motor resistance is about $12V/85A = 0.14\Omega$, based on stall current.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the 8 kg mass you mention always is attached to the arm, you probably should use a counterweight, a gas lift tube, or a spring to compensate for it, so that whatever motor you use will not have to do as much work.  Or, if the 8 kg mass is an item being placed into a workcell, operated on, and then removed, you might use two arms, linked such that weight of an item being placed is offset by that of an item being removed. &lt;/p&gt;&#xA;" OwnerUserId="478" LastActivityDate="2014-12-26T01:55:52.863" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5218" PostTypeId="1" CreationDate="2014-12-26T06:01:11.593" Score="-3" ViewCount="136" Body="&lt;p&gt;I will be beginner need a help-I want to gain knowledge about robotics so it need a basic theoretical knowledge what is the best way to start?&lt;/p&gt;&#xA;" OwnerUserId="7763" LastActivityDate="2014-12-26T10:58:00.910" Title="I want to be a guy of robotics" Tags="&lt;beginner&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ClosedDate="2015-01-04T19:57:17.577" ContentLicense="CC BY-SA 3.0" />
  <row Id="5219" PostTypeId="2" ParentId="5218" CreationDate="2014-12-26T10:52:35.807" Score="3" Body="&lt;p&gt;Not too long ago I was a beginner myself so please let me give you my two cents worth of advice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First of all, some background. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are different types of robots you can build and the way they are controlled can be different too. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Essentially you have the robots that you build yourself out of bits and pieces and then you have kits you can buy and assemble. On top of that your robot can be radio controlled or it can have sensors and inbuilt programming that will make it react to its environment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you really need to better define what you mean when you say you need &quot;knowledge about robotics&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you decide to go the first route (build your own robot), it will be harder and will take longer but you are likely to learn far more in the process. It might also be cheaper especially if you use recycled parts, but I stand to be corrected on this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Radio controlled robots bring their own challenges but are far easier to operate than autonomous ones (which use sensors and programming). Radio controlled robots are also easier to build, but they lack that certain something (call it sophistication?) and the challenge with these robots is definitely skewed towards the actual building of the robot hardware. If you go with an autonomous  kit robot, then you get to delve into the programming and sensors and it is more intellectually challenging. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Essentially if you want to make the robot autonomous then you need a microcontroller such as Arduino, which is essentially a microprocessor with input and output ports, so that you can read values from sensors and send out signals to operate servos, motors, lights and so on. This is how you would for instance get the robot to follow a line drawn on the ground. Many kit robots come with this microcontroller already installed so if you prefer to avoid the hassle of making your own robot this might be the best way to go. Plus of course you often get instruction manuals, user forums for that particular model and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However if you do choose to make your own first robot then you should make sure it is a small one. In terms of cost, the microcontroller boards and the sensors you use with them are often very cheap (see also below), but expense grows with size, as in more material being required, larger motors/servos, larger batteries, and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As an aside, in terms of materials, unless you are into wood work, I would recommend either aluminum or polycarbonate for the chassis parts. Polycarbonate in particular is extremely light and strong and can easily be cut into shape with hand tools. Its more expensive than aluminum so your best bet is to go for 3mm thick variety. Do not be scared at the bendability of the material - it won't break even if bent 180 degrees. NB. Make sure the shop does not give you Acrylic instead as this WILL BREAK! Another advantage of Polycarbonate is that it is transparent so it makes lining up holes and such like a breeze! Of course Aluminum is quite good too and you can buy it in various sizes and shapes (such as angle brackets) so it might be useful to explore that way forward also - 2.5mm to 3mm thick aluminum should be fine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyhow, once you have decided what you want to do, then you can start to gather the resources and supporting knowledge you require. In other words you need to plan before you build anything. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;First of all, there are lots of free resources online so please save your money to use on the actually hardware. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Download e-books - there are many of these easily available online. In some cases if a book is really good you might want to buy the paper version but don't get carried away.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For instance this site is quite good: &lt;a href=&quot;http://it-ebooks.info&quot; rel=&quot;nofollow&quot;&gt;http://it-ebooks.info&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then there are many forums out there as well as you tube videos. Plenty of people willing to help too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another tip is to explore Chinese vendors because parts will often be far cheaper (although sometimes of lower quality).  But the cheapness means you can experiment without worrying about damaging anything. I buy a lot of my kit from www.banggood.com.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some last points. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have found that there are no clear boundaries in this hobby. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Whilst building my first robot, I got engaged with battery technology, Radio control channel mixing (followed a you tube video), motor controllers and motors. I converted cordless driller motors to use with my robot (followed a you tube video), scavenged printers to make the wheel shafts out of. I had to delve into (and buy) power supplies, watt meters, silicon-coated cables, different types of connectors, and umpteen other things I had never encountered before. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I visited metal working shops to get aluminum blocks cut and shaped. I also needed to go to  hardware stores to buy materials for my chassis, negotiated discounts for offcuts etc etc. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which brings me to the most important thing of all - I talked to people everywhere and more importantly I listened! &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That in fact is the number one thing you need to do. You will of course still make mistakes but at least in this way you will avoid making too many. Also note that some mistakes can be expensive and some mistakes can even be dangerous. LIPO batteries for instance need careful handling and require special chargers. So do not just barge ahead and think &quot;these are toys and can't hurt me&quot;. Yes they can, especially if they involve large motors, high currents and moving parts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I suggest you start by collecting some ebooks using the site I listed. Then after reading bits and pieces here and there, decide on what you want to do exactly, then make a plan for your first robot and get going. And keep asking questions as you go. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And finally remember if it is not fun to do, then don't do it! Good luck.&lt;/p&gt;&#xA;" OwnerUserId="7198" LastEditorUserId="7198" LastEditDate="2014-12-26T10:58:00.910" LastActivityDate="2014-12-26T10:58:00.910" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5220" PostTypeId="1" CreationDate="2014-12-26T15:31:03.920" Score="1" ViewCount="268" Body="&lt;p&gt;Help! I have recently installed leJOS NXJ on to my NXT brick, and soon after my batteries died. I inserted new ones, and now I cant start my brick up. When I press the startup button(orange) it makes a clicking sound and when I let go it stops. I have tried reflashing the brick with both leJOS NXJ and the NXT software and both programs say something along the lines of &quot;unable to locate brick.&quot; Any suggetions?&lt;/p&gt;&#xA;" OwnerUserId="7766" LastActivityDate="2014-12-27T00:04:25.183" Title="Clicking NXT Brick" Tags="&lt;mindstorms&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5221" PostTypeId="2" ParentId="5220" CreationDate="2014-12-27T00:04:25.183" Score="1" Body="&lt;p&gt;The clicking indicates the brick is waiting for firmware download.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Double check device manager and it should also be listed there as waiting firmware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Use either the LEGO software or another utility (eg RobotC, LeJOS) to download the firmware of your choice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Big if -&gt;  If the device does not show up as Nxt Waiting firmware in device manager, there may be some conflict with USB drivers often installed with Arduino.  It is a mess at the moment and there are no simple solutions. Keep Uninstalling (Arduino first), rebooting, re-installing (phantom drivers) until the NXT shows up as waiting firmware.&lt;/p&gt;&#xA;" OwnerUserId="274" LastActivityDate="2014-12-27T00:04:25.183" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5223" PostTypeId="1" AcceptedAnswerId="5244" CreationDate="2014-12-27T15:51:52.693" Score="1" ViewCount="78" Body="&lt;p&gt;As far as i can tell, the markov assumption is quite ubiquitous in probabilistic methods for robotics and i can see why.  The notion that you can summarize all of your robot's previous poses with its current pose makes many methods computationally tractable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm just wondering if there are any classic examples of problems in robotics where the markov assumption cannot be used at all.  Under what circumstances is the future state of the robot necessarily dependent on the current and at least some past states?   In such non-markovian cases, what can be done to alleviate the computational expense?  Is there a way to minimize the dependence on previous states to the previous $k$ states, where $k$ can be chosen as small as desired?&lt;/p&gt;&#xA;" OwnerUserId="2295" LastEditorUserId="2295" LastEditDate="2014-12-27T19:41:37.037" LastActivityDate="2014-12-30T10:37:42.640" Title="Non-markovian problems/approaches in robotics" Tags="&lt;probability&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5224" PostTypeId="1" CreationDate="2014-12-27T19:03:58.787" Score="2" ViewCount="428" Body="&lt;p&gt;What is a good website for buying 1.5V continuous motors? I'm looking to build a clockwork robot but I cannot find a motor small enough to fit inside my power box and I don't want to mount it outside of the box. I have a 1&quot; by .75&quot; space that the motor needs to fit into. I have found a few websites but they look sketchy and none of them have good reviews.&lt;/p&gt;&#xA;" OwnerUserId="7769" LastActivityDate="2014-12-31T23:07:36.277" Title="Nano sized electric motors" Tags="&lt;motor&gt;&lt;brushless-motor&gt;&lt;motion&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5225" PostTypeId="2" ParentId="5224" CreationDate="2014-12-27T19:14:02.867" Score="1" Body="&lt;p&gt;&lt;strong&gt;Pager motors&lt;/strong&gt; will most likely do the trick. You can find some on &lt;a href=&quot;http://www.robotshop.com/en/solarbotics-tiny-pager-motor-tpm2.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Robotshop&lt;/a&gt; for example, with correct specs. This one is manufactured by &lt;a href=&quot;https://solarbotics.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Solarbotics&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/2U6LF.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="7613" LastActivityDate="2014-12-27T19:14:02.867" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5226" PostTypeId="1" CreationDate="2014-12-27T23:26:10.787" Score="-3" ViewCount="123" Body="&lt;p&gt;I know that this isn't a programming question, but it is robotics so I thought you could all be flexible since it's my first question?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway. I love making robots using robot kits that come with instructions. It's always fun to use afterwards because of the controllers I build with it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is that I can't find anymore robots. They are all either too expensive, not what I'm looking for, or both.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anybody give me links to some good robot kits?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My price limit is £30 - £40.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are the three robot kits I have built. I need kits that are like these:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Robot Arm: &lt;a href=&quot;http://www.amazon.co.uk/gp/aw/d/B002HXTONC/ref=mp_s_a_1_9?qid=1419721030&amp;amp;sr=8-9&amp;amp;pi=AC_SX110_SY165&quot; rel=&quot;nofollow&quot;&gt;http://www.amazon.co.uk/gp/aw/d/B002HXTONC/ref=mp_s_a_1_9?qid=1419721030&amp;amp;sr=8-9&amp;amp;pi=AC_SX110_SY165&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Remote Control Robot Beetle: I can't post more than two links. Go to maplins and type in the name of the robot and you'll find it. It's a rover version of the robot arm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3-in-1 All Terrain Robot Kit: &lt;a href=&quot;http://www.maplin.co.uk/p/3-in-1-atr-all-terrain-robot-n12dp&quot; rel=&quot;nofollow&quot;&gt;http://www.maplin.co.uk/p/3-in-1-atr-all-terrain-robot-n12dp&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't want to program this robot. I want it to be like it is in the examples above. Buy the kit, read the instructions, then build it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you all in advance!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS. Any further information will be given if asked for.&lt;/p&gt;&#xA;" OwnerUserId="7770" LastActivityDate="2014-12-30T21:32:34.033" Title="I need more robots" Tags="&lt;control&gt;" AnswerCount="4" CommentCount="4" FavoriteCount="1" ClosedDate="2015-01-04T19:57:52.400" ContentLicense="CC BY-SA 3.0" />
  <row Id="5227" PostTypeId="1" AcceptedAnswerId="6422" CreationDate="2014-12-28T03:52:07.077" Score="1" ViewCount="181" Body="&lt;p&gt;I am reading some theories related to rigid body motion from the book &quot;A Mathematical Introduction to Robotic Manipulation&quot; by Prof. Richard Murray. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am focusing on chapter 2, Sec 4 to derive some formulation. According to his introduction of chapter &quot;we present a modern approach treatment of the theory of screws based on linear algebra and matrix groups&quot;. I myself feel rather understandable and comprehensive explanation from this approach. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, his scope in this chapter is limited in inertia coordinate frame where he refers to as spatial frame and moving frame as body frame. Is there any other references that treat the topic in the reversed order? spatial as moving/non-inertia frame and the other one is inertia frame?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you!&lt;/p&gt;&#xA;" OwnerUserId="1282" LastEditorUserId="10414" LastEditDate="2021-01-25T16:23:33.433" LastActivityDate="2021-01-25T16:23:33.433" Title="theory on rigid body motion in robotics book" Tags="&lt;control&gt;&lt;screw-theory&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5228" PostTypeId="2" ParentId="5226" CreationDate="2014-12-28T10:00:03.507" Score="2" Body="&lt;p&gt;The 3 &quot;robots&quot; above are not really robots. They are more like diy toys. A robot is fully autonomous. A robot that is controlled by someone is called a machine. I highly suggest you buy an arduino, some motors and sensors. Then you can truly make your own robot and there are plenty of instructions online for arduino robot and you can copy the code if you don't want to program.&lt;/p&gt;&#xA;" OwnerUserId="7552" LastActivityDate="2014-12-28T10:00:03.507" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5229" PostTypeId="1" CreationDate="2014-12-28T14:01:01.533" Score="0" ViewCount="65" Body="&lt;p&gt;In the dynamic model of the robot, it is obvious that we found the torques as functions of the angular acceleration of the joint as well as the linear acceleration of the link center of mass along the three axies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is regarding the values of these accelerations. In general, step motors specifications do not give the acceleration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you&lt;/p&gt;&#xA;" OwnerUserId="7773" LastActivityDate="2014-12-31T13:20:11.473" Title="How can I replace acceleration in the dynamic model of the robot?" Tags="&lt;torque&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5230" PostTypeId="2" ParentId="1066" CreationDate="2014-12-28T22:34:32.793" Score="0" Body="&lt;p&gt;Eventually, @alecive came up with an elegant solution he published here: &lt;a href=&quot;http://dx.doi.org/10.1109/ICRA.2014.6907178&quot; rel=&quot;nofollow&quot;&gt;http://dx.doi.org/10.1109/ICRA.2014.6907178&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="6941" LastActivityDate="2014-12-28T22:34:32.793" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5231" PostTypeId="2" ParentId="2807" CreationDate="2014-12-28T23:44:11.097" Score="2" Body="&lt;p&gt;Besides the clear &lt;a href=&quot;https://robotics.stackexchange.com/a/4505/6941&quot;&gt;answer&lt;/a&gt; that helps distinguish planning from control, I would stress the point that classical approaches based on pole placement (e.g. PID) and optimal control techniques (e.g. LQR) respond to different design requirements:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The former methods are more oriented to vary the transient dynamics of the closed-loop system (faster/slower response) so as they allow for a principled way to reject disturbances; hence, key features are: frequency analysis, transient response, steady-state errors, robustness margins, ease of gain tuning.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The latter methods focus much more on meeting some given integral goals, that is to comply for example with objectives such as maximum level of control effort or final displacement attained in the minimum time that are all computed over the whole trajectory; thus, key features are: bounds on control output, state feedback, performance on the whole.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;However, pole placement techniques are preferable for the difficulties encountered in LQR design of setting up proper cost functions, as described in &lt;a href=&quot;http://en.wikipedia.org/wiki/Linear-quadratic_regulator#General_description&quot; rel=&quot;nofollow noreferrer&quot;&gt;wikipedia&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2014-12-29T00:34:42.890" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5232" PostTypeId="2" ParentId="2925" CreationDate="2014-12-29T00:31:37.400" Score="2" Body="&lt;p&gt;While a simple &lt;em&gt;D&lt;/em&gt; controller is merely useless for the reasons outlined by ryan0270 in his &lt;a href=&quot;https://robotics.stackexchange.com/a/2928/6941&quot;&gt;answer&lt;/a&gt;, there are cases where a simple &lt;em&gt;I&lt;/em&gt; controller does perform perfectly well. It pretty much depends on the characteristics of the system we have to control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Real Example Case&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Stabilize the head motion of a humanoid robot by sending counter-velocity commands to the neck while we can sense velocity disturbances by means of a IMU device that are caused by the movements of the torso (or whatever disturbances, e.g. the robot can walk).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It comes out that the velocity response of the group &lt;em&gt;Head+IMU&lt;/em&gt; when solicited by a velocity step can be described by the following second order under-damped process:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;G(s)=\frac{0.978}{1+2 \cdot 0.286 \cdot 0.016s+(0.016s)^2}e^{-0.027s}.&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore, the goal is to design a controller that provides a sufficient counter-action in the following classical disturbance rejection diagram:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/BhesR.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A &lt;em&gt;I-only&lt;/em&gt; controller with gain $K_I=11$ (discrete controller running @ 100 Hz) suffices to accomplish the job making the closed-loop system &lt;em&gt;Type I&lt;/em&gt; and performing great in real experiments. No need for &lt;em&gt;P&lt;/em&gt; then.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is shown in the plot below, where three system responses are drawn for three corresponding controllers counteracting a step-wise velocity disturbance. The proportional part starts becoming helpful only for very tiny value of the gain &lt;em&gt;P&lt;/em&gt;. The integral part is dominant, doing almost all the task.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/6AbTM.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2014-12-29T11:39:03.053" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5233" PostTypeId="2" ParentId="5226" CreationDate="2014-12-29T01:06:52.640" Score="0" Body="&lt;p&gt;I will agree with the other answer, what you are calling a robot is a stretch. A robot by definition is a computer operated complex machine. In my mind, the complex part of the definition also excludes an arduino for the most part.  Following a line or wall is not complex, and arduinos seldom do more than that. But an arduino is often the best pre-complex step for beginners.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also strongly believe a robot is 99% software.  If you build it, and do not program it, you do not have a robot. You have a pile of electrical components. It is unable to perform ANY task, and can not be called a robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Search eBay for Arduino Smart Car.  And learn to program it, before moving on to &lt;a href=&quot;http://www.spiked3.com/?page_id=1691&quot; rel=&quot;nofollow noreferrer&quot;&gt;real robots&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/aTtEf.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="274" LastEditorUserId="274" LastEditDate="2014-12-30T21:32:34.033" LastActivityDate="2014-12-30T21:32:34.033" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5234" PostTypeId="2" ParentId="5192" CreationDate="2014-12-29T01:09:20.210" Score="1" Body="&lt;p&gt;A low power laser shining across the floor surface at a glancing angle will show a bright glitter of light off of any specks of dirt. A photo-sensor could be arranged to see the sparkle, and order a 'redo' of any area that glittered more than a given threshold...a threshold that would have to be determined experimentally, but should work for most floors.&#xA;Alternately, the same idea could be applied to the air flow just inside the vacuum nozzle, and the vacuum only moving on after the dirt particle pickup dropped below a certain threshold. This might make for a very slow moving machine, though.&lt;/p&gt;&#xA;" OwnerUserId="2402" LastActivityDate="2014-12-29T01:09:20.210" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5235" PostTypeId="2" ParentId="5226" CreationDate="2014-12-29T08:40:35.943" Score="1" Body="&lt;p&gt;To be honest I don't think that one can begin his experience in robotics without programming or having some electronics skills.&#xA;There is (to my knowledge) no &lt;em&gt;out-of the box&lt;/em&gt; solution to get started. Of course...you could start with some &lt;a href=&quot;https://solarbotics.com/product/k_sv/&quot; rel=&quot;nofollow&quot;&gt;sumovore&lt;/a&gt; robots or something like that, but you will soon discover that after building up the robot according to its instructions you have nothing else to do. You leave the robot running around without the possibility &lt;em&gt;to get directly involved in realizing robots o robotic system&lt;/em&gt; (I hope you understand what I mean).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can tell you that most of people doesn't start with robots directly. Most of them are coming from the IT, electronics, mechanical fields. But the first important thing is to learn to program and to have skills in electrics (I mean: not literally soldering your circuit, but understand how sensors works and what they are capable for, the protocols used... its a MUST).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given your budget I strongly suggest you to buy an Arduino. You will spend a lot of time learning to program small applications and have a lot of fun. Furthermore you can buy some motor drivers, servomotors and start moving things, or simply to check datas coming from sensors (see &lt;a href=&quot;https://learn.adafruit.com/category/learn-arduino&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt; for many possibilities). The possibilities you have with Arduino are really a lot, you will never get bored. Then, once you are confident with what you want to do, you can move on and program small robots, robotic arm, etc... With such a &lt;a href=&quot;http://www.amazon.de/Anf%C3%A4ngerset-Mikrocontroller-Breadboard-Starterset-Starterkit/dp/B00CR1FAS2/ref=sr_1_1?ie=UTF8&amp;amp;qid=1419842526&amp;amp;sr=8-1&amp;amp;keywords=arduino&quot; rel=&quot;nofollow&quot;&gt;kit&lt;/a&gt; you will have a lot of fun for the next 6 month.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Enjoy!&lt;/p&gt;&#xA;" OwnerUserId="7097" LastEditorUserId="7097" LastEditDate="2014-12-30T10:21:12.363" LastActivityDate="2014-12-30T10:21:12.363" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5236" PostTypeId="2" ParentId="2915" CreationDate="2014-12-29T12:14:09.250" Score="1" Body="&lt;p&gt;I think your confusion stems from the fact that you don't make any difference between adding pole/zero as cascade to a generic system (i.e. no loop) and adding pole/zero to a PID controller in a loop. In a loop, the behavior of phase lead/lag does matter a lot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, just to be precise, an integrator adds up a very particular pole (in the origin), while the derivative part adds up not only a zero (in the origin) but also a high-frequency pole to make D feasible.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2018-12-15T18:44:56.203" LastActivityDate="2018-12-15T18:44:56.203" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="5237" PostTypeId="2" ParentId="5229" CreationDate="2014-12-29T12:30:32.180" Score="2" Body="&lt;p&gt;Probably I'm missing your point, but the fundamental dynamics equation of a manipulator describes physical relations among quantities irrespective of the particular electronics/mechanics running underneath.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If there is a rotating shaft with a joint mounted on it then there is always an acceleration. In a stepper, velocity and acceleration might be significantly discontinuous due to the nature of the actuation, but they can be still computed/measured/estimated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This harsh behavior of such fundamental dynamic quantities is one of the reasons why DC motors (+ circuitry) are preferable over steppers, with the cost of higher expense.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Moreover, to complete the reply, a stepper is usually employed in a open-loop configuration, which motivates its cost effective choice. Therefore, if the datasheet does not provide the user with a model of how the stepper will accelerate/decelerate under some given input conditions, then we are somehow forced to measure with a dedicated equipment what is happening at the joint side (e.g. see this &lt;a href=&quot;http://link.springer.com/content/pdf/10.1007%2Fs40435-014-0093-6.pdf&quot; rel=&quot;nofollow&quot;&gt;paper&lt;/a&gt;) to be able to retrieve information about the ongoing dynamics. Clearly, this goes against the initial idea of cost saving and in this respect other solutions are more effective, as previously said.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further, it is well known that feed-forward models themselves are inaccurate description of the reality, thus feedback is always required, especially in dynamics context.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To conclude, my opinion is that steppers in a open-loop scheme are inadequate for dynamics control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the way, here's recapped for your convenience the model of the stepper: &lt;a href=&quot;http://it.mathworks.com/help/physmod/elec/ref/steppermotor.html&quot; rel=&quot;nofollow&quot;&gt;link&lt;/a&gt;. You have a matlab block for that you could employ to experiment; the model is the same cited in the paper above. In principle, if you find estimates for all those electrical and mechanical quantities, you can consider going open-loop.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2014-12-31T13:20:11.473" LastActivityDate="2014-12-31T13:20:11.473" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5238" PostTypeId="1" AcceptedAnswerId="6491" CreationDate="2014-12-29T13:29:54.537" Score="0" ViewCount="1668" Body="&lt;p&gt;I would like to implement the joint compatibility branch and bound technique &lt;a href=&quot;http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=976019&amp;amp;tag=1&quot; rel=&quot;nofollow&quot;&gt;in this link&lt;/a&gt; as a method to carry out data association. I've read the paper but still confused about this function $f_{H_{i}} (x,y)$. I don't know exactly what they are trying to do. They compared their approach with The individual compatibility nearest neighbor (ICNN). In the aforementioned method we have this function $f_{ij_{i}} (x,y)$. This function simply the inverse measurement function or what they call it in their paper the implicit measurement function. In Laser sensor, given the observations in the polar coordinates, we seek via the inverse measurement function to acquire their Cartesian coordinates. In ICNN, every thing is clear because we have  this function $f_{ij_{i}} (x,y)$, so it is easily to acquire the Jacobian $H_{ij_{i}}$ which is &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;H_{ij_{i}} = \frac{\partial f_{ij_{i}}}{\partial \textbf{x}}&#xA;$$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example in 2D case and 2D laser sensor,  $\textbf{x} = [x \ y \ \theta]$ and the inverse measurement function is &#xA;$$&#xA;m_{x} = x + rcos(\phi + \theta) \\&#xA;m_{y} = y + rsin( \phi + \theta )&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $m_{x}$ and $m_{y}$ are the location of a landmark and &#xA;$$&#xA;r = \sqrt{ (m_{x}-x)^{2} + (m_{y}-y)^{2}} \\&#xA;\phi = atan2\left( \frac{(m_{y}-y)}{(m_{x}-x)} \right) - \theta&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using &lt;code&gt;jacobian()&lt;/code&gt; in Matlab, we can get $H_{ij_{i}}$. Any suggetions?&lt;/p&gt;&#xA;" OwnerUserId="2155" LastActivityDate="2015-03-02T22:13:42.860" Title="joint compatibility branch and bound (JCBB) data association implementation" Tags="&lt;slam&gt;&lt;ekf&gt;&lt;mapping&gt;&lt;data-association&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5239" PostTypeId="2" ParentId="4360" CreationDate="2014-12-29T15:47:19.617" Score="3" Body="&lt;p&gt;Rough estimates of the resonant angular frequency $\hat{\omega}_i$ for joint $i$ can be always guessed from the current configuration of the manipulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let focus on joint $i$ and consider all downstream joints $\left \{j:i&amp;lt;j \le n \right \}$, where $n$ is the number of DOFs of manipulator. Put the angular positions $\theta_j$ of these latter joints in such a way to determine somehow a worst case estimate (see below) of &lt;em&gt;moment of inertia&lt;/em&gt; $\hat{I}_i^{\text{max}}$ computed with respect to joint $i$; that is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\hat{I}_i^{\text{max}}= \max_{\mathbf{\theta} \in \mathbb{R}^{n-i}} I_i(\mathbf{\theta}).&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, by neglecting the internal dynamics and friction components:&#xA;$$&#xA;\hat{\omega}_i=\sqrt\frac{\hat{k}_i}{\hat{I}_i^{\text{max}}},&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $\hat{k}_i$ represents an estimate of the stiffness of the downstream structure. See this &lt;a href=&quot;http://en.wikipedia.org/wiki/Torsion_spring#Torsional_harmonic_oscillators&quot; rel=&quot;nofollow&quot;&gt;link&lt;/a&gt; for further details.&#xA;Here, $\hat{I}_i^{\text{max}}$ can be retrieved through simple geometrical inspections, and also by resorting to tools such as the &lt;a href=&quot;http://en.wikipedia.org/wiki/Parallel_axis_theorem&quot; rel=&quot;nofollow&quot;&gt;Huygens–Steiner theorem&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Importantly, since it comes out that $\hat{\omega}_i$ is inversely proportional to $\hat{I}_i^{1/2}$, we then try to maximize $\hat{I}_i$ in order to account for the worst impact (i.e. lower $\hat{\omega}_i$) on the control design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, the validity of such an approach remains limited, but yet worth being pursued, particularly considering that you're not forced to experiment on the real manipulator to get the Bode plot.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2014-12-29T23:04:43.693" LastActivityDate="2014-12-29T23:04:43.693" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5240" PostTypeId="1" CreationDate="2014-12-29T17:09:47.257" Score="1" ViewCount="421" Body="&lt;p&gt;I am cautiously moving forward with my new iRobot Create 2, planning on using a Raspberry Pi with ROSberry installed to control the Create 2. Discovered a problem with the pin out specs between the iRobot Roomba Open Interface (OI) Specification and the Create 2 Serial to 3.3V Logic document. Here is the discrepancy (marked by DISCREPANCY):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PIN ((OI)) Serial to 3.3V&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Vpwr Roomba battery voltage&lt;/li&gt;&#xA;&lt;li&gt;Vpwr Roomba battery voltage&lt;/li&gt;&#xA;&lt;li&gt;RXD  Roomba TX DISCREPANCY&lt;/li&gt;&#xA;&lt;li&gt;TXD  Roomba RX DISCREPANCY&lt;/li&gt;&#xA;&lt;li&gt;BRC  Ground DISCREPANCY&lt;/li&gt;&#xA;&lt;li&gt;GND  Ground&lt;/li&gt;&#xA;&lt;li&gt;GND  Roomba BRC DISCREPANCY&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The discrepancy is with pins 3,4,5 &amp;amp; 7.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Don't want to fry my Raspberry Pi, any clarification and/or help appreciated.&lt;/p&gt;&#xA;" OwnerUserId="7780" LastActivityDate="2014-12-30T17:09:28.283" Title="iRobot Create 2 discrepancy betweenOpen Interface Specifications and Create 2 Serial to 3.3V Logic" Tags="&lt;raspberry-pi&gt;&lt;irobot-create&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5242" PostTypeId="2" ParentId="5240" CreationDate="2014-12-29T23:40:03.063" Score="0" Body="&lt;p&gt;I helped work on the create 2. I will have to double check on pins 5 and 7 but pins 3 and 4 are correct. The RX of the Create needs to connect to the TX of the pi. The same goes for the TX on the Create connecting to the RX on the pi.&lt;/p&gt;&#xA;" OwnerUserId="7781" LastActivityDate="2014-12-29T23:40:03.063" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5243" PostTypeId="2" ParentId="5226" CreationDate="2014-12-30T10:00:33.003" Score="1" Body="&lt;p&gt;I agree with most of what has been said here, but would like to make the point that getting into robotics is a journey and that people can follow different paths to get there!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Specifically we shouldn't undervalue the need for assembly skills (soldering, materials, etc) or knowledge of supporting areas (Battery technologies, motors and controllers, use of multi-meter, generic electronic components, materials and their properties, etc). Playing with &quot;kits&quot; can give you some of these skills and it is even better if you make your own &quot;machine&quot; from scratch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For instance I have just completed my battle robot - which is radio controlled - and not autonomous and technically therefore not a robot (sigh). However the point is that I have learnt so much during the process that I certainly would not discount the experience. And it has been so much fun too. (Let us please not discount the fun element in all this!) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suppose it is much the same for our friend and his kit &quot;robots&quot;. And so many others. including those who came to robotics from IT or from Electronics. They enjoy the journey and before they know it, they are at their destination..&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for the recommendations to start with Arduino, I agree 100%.  Its cheap plus you can get a lot of cheap kit for it (especially from China, try www.banggood.com) and start to get to grips with sensors and programming which will come in very useful for your next project. &lt;/p&gt;&#xA;" OwnerUserId="7198" LastEditorUserId="7198" LastEditDate="2014-12-30T10:06:03.690" LastActivityDate="2014-12-30T10:06:03.690" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5244" PostTypeId="2" ParentId="5223" CreationDate="2014-12-30T10:37:42.640" Score="3" Body="&lt;p&gt;Memory of the past is required whenever failures and/or inadequacy arise in the perception layer of the robot thus affecting significantly its current representation of the world, forcing eventually to apply some sort of backtracking strategies.&lt;/p&gt;&#xA;&lt;p&gt;Quoting &lt;em&gt;S.D Whitehead and Long-Ji Lin&lt;/em&gt; in their paper &amp;quot;&lt;a href=&quot;http://www.sciencedirect.com/science/article/pii/000437029400012P&quot; rel=&quot;nofollow noreferrer&quot;&gt;Reinforcement learning of non-Markov decision processes&lt;/a&gt;&amp;quot;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;These non-Markov tasks are commonly referred to as &lt;em&gt;hidden state tasks&lt;/em&gt;, since they occur whenever it is possible for a relevant piece of information to be &lt;em&gt;hidden&lt;/em&gt; (or missing) from the agent’s representation of the current situation.&lt;/p&gt;&#xA;&lt;p&gt;Hidden state tasks arise naturally in the context of autonomous learning robots. The&#xA;simplest example of a hidden state task is one which occurs when the agent’s sensors&#xA;are inadequate for the task at hand. Suppose a robot is charged with the task of sorting&#xA;blocks into bins according to their color, say Bin-l for red, Bin-2 for blue. If the robot’s sensors are unable to distinguish red from blue, then for any given block it can do no better than guess a classification. If there are an equal number of blocks of each&#xA;color, then guessing can do no better than chance. On the other hand, if the robot can detect color, it can easily learn to achieve 100% performance. The former case corresponds to a non-Markov decision problem, since relevant information is missing&#xA;from the agent’s representation. The latter case is Markov since once a color sense is&#xA;available the information needed to achieve optimal performance is always available.&#xA;In general, if a robot’s internal representation is defined only by its immediate sensor&#xA;readings, and if there are circumstances in which the sensors do not provide all the&#xA;information needed to uniquely identify the state of the environment with respect to the&#xA;task, then the decision problem is non-Markov.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2014-12-30T10:37:42.640" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5246" PostTypeId="2" ParentId="1110" CreationDate="2014-12-30T15:15:58.607" Score="1" Body="&lt;p&gt;A very effective and elegant approach is the resort to the so-called &lt;strong&gt;Potential Fields&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Essentially, each robot of the swarm generates a repulsive potential field which is tuned to be limited in the space around it (pretty much as a charged particle), so as any specific target is responsible for an attractive field, which in turn can reach farther distances.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, the single moving robot accumulates the field in the space location where it is by summing all the contributions in sign. The resulting potential will be the driving force to be integrated for yielding the final motion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To make things work easily, the negative fields must be set very strong but limited in the space around robot mates. However, the designer can have fun choosing the potential shapes and playing with tuning parameters.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastActivityDate="2014-12-30T15:15:58.607" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5247" PostTypeId="2" ParentId="5240" CreationDate="2014-12-30T16:55:52.413" Score="1" Body="&lt;p&gt;I am sorry that there is confusion. My personal opinion is that 7-pin mini-DIN connectors are confusing. Unfortunately, multiple vendors have different pin numberings, and things are further confused as some vendors choose to preserve numberings across the M-F boundary, while some do not (they have 1 mate with 2, 3 with 4, and, 5 with 7). This is the case, in this tutorial.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The pin numbering in the OI manual is for the female connector in the Create. The pin numbering in the Create 2 Serial to 3.3V Logic document is for the male connector on a cable. On the cable end, we chose to keep the pin numbering convention of a wire-ended cable that we use in a lot of the tutorials, which is made by a vendor named Tensility (part number 10-00543). Unfortunately, their pin numbering is the mirror of that on the Create. (There is a note to this effect on the bottom of the second column on the first page -- &quot;Note that the Tensility cable uses the opposite pin numbering convention as Roomba.&quot;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you use this cable, and follow the color scheme in the tutorial, you'll be in good shape (one more gotcha is that there are two black wires, one of which is connected to the shell. A multimeter will help you figure out which one).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are just pushing wires into the Create connector itself, without a connector, (which I do not recommend,) use the diagram in the OI manual; it is drawn as if you were looking down upon the female receptacle pins in the robot. Be aware that TX on the Create should go to RX on the Pi (with a level shift), and vice versa!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Happy hacking!&lt;/p&gt;&#xA;" OwnerUserId="7665" LastEditorUserId="7665" LastEditDate="2014-12-30T17:09:28.283" LastActivityDate="2014-12-30T17:09:28.283" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5248" PostTypeId="1" CreationDate="2014-12-30T19:17:22.893" Score="2" ViewCount="299" Body="&lt;p&gt;The hole is a slightly too big for the motor's shaft. I thought about hot gluing them together.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.dropbox.com/s/d9hfdbmi342n12t/2014-12-30%2013.38.01.jpg?dl=0&quot; rel=&quot;nofollow&quot;&gt;Link to picture here&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2237" LastEditorUserId="2237" LastEditDate="2014-12-30T20:20:11.183" LastActivityDate="2014-12-30T21:08:31.890" Title="How to attach a motor to a blade?" Tags="&lt;motor&gt;&lt;quadcopter&gt;&lt;multi-rotor&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5249" PostTypeId="2" ParentId="5248" CreationDate="2014-12-30T21:08:31.890" Score="1" Body="&lt;p&gt;Which piece is the robot? This is not a robotics question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have to assume since you are asking a question that shows a lack of fundamental mechanical understanding, that for its intended use, precision is not a requirement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In that case, wrap the motor shaft with some tape until you have the tightness you are looking for.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A more appropriate  fix would be some form of &lt;a href=&quot;http://www3.towerhobbies.com/cgi-bin/wti0001p?&amp;amp;I=LXZ897&amp;amp;P=7&quot; rel=&quot;nofollow noreferrer&quot;&gt;adapter&lt;/a&gt;.&#xA;&lt;img src=&quot;https://i.stack.imgur.com/787Vz.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For any real application, the propellor size is almost certainly incorrect for that motor. A &lt;a href=&quot;http://www3.towerhobbies.com/cgi-bin/wti0001p?&amp;amp;I=LXCKYE&amp;amp;P=0&quot; rel=&quot;nofollow noreferrer&quot;&gt;gear reduction unit&lt;/a&gt; is needed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/EP090.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="274" LastActivityDate="2014-12-30T21:08:31.890" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5250" PostTypeId="1" AcceptedAnswerId="5257" CreationDate="2014-12-31T07:05:23.643" Score="0" ViewCount="61" Body="&lt;p&gt;I have an application that needs a XBee and another module to be turned on and off digitally via a microcontroller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Setup is 2 XBee's and an application board is connected to the Microcontroller. On PowerON I need 1 Xbee and the Microcontroller to come on and do its routines. After the uC gets the signal from the Xbee (wirelessly from a baseStation) the board has to turn on the other XBee and application board. And when the operation is over, the XBee and Board is to be powered back down. I dont want to put them in sleep or low power state, just power both those devices off. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was thinking of using a relay. But i cannot find a 3.3v 1A SMD Equivalent system. I am looking for a SMD type of footprint to go on a very compact board. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What options do i have?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The XBee needs around 1A Power and the Application board 500mA.&lt;/p&gt;&#xA;" OwnerUserId="7049" LastActivityDate="2014-12-31T22:37:01.390" Title="Need a Relay Alternative" Tags="&lt;power&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5251" PostTypeId="1" AcceptedAnswerId="5254" CreationDate="2014-12-31T13:08:57.283" Score="3" ViewCount="1681" Body="&lt;p&gt;I've develop a quadrotor (only simulation on my PC using ROS) and the feedback controller resumes more or less the following structure:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/9FyeR.png&quot; alt=&quot;Picture 1&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where you can think that process is the dynamic movement of the quadrotor (motion equations), the inner loop is the &lt;em&gt;attitude controller&lt;/em&gt; (it just sets the orientation about all 3 axis) and the outer loop is the &lt;em&gt;position controller&lt;/em&gt; that takes care where the quadrotor actually is. Why are they separated? Because in many papers I found out that the attitude controller (pitch, roll, yaw) need to run at higher frequency then any other controller in the system. The &lt;em&gt;position controller&lt;/em&gt; instead needs to run at lower frequency.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The following picture is a better explanation of my description. Don't be scared...it is more simpler than one could think:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/Qf7Pd.png&quot; alt=&quot;Picture 2&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I did it as in the paper. &lt;strong&gt;BUT&lt;/strong&gt; I discovered that my quadrotor was really unstable and I spent days and days trying to correct the gains of the controller without getting a stable system. My intuition said to me that maybe they are running at wrong frequency, so I put a different frequency values for the position controller being sure it is not a multiply of the main frequency (something like 1000Hz and 355 Hz for example.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lately I removed the timer in my program (C++) and let the &lt;em&gt;position controller&lt;/em&gt; run at the same frequency as the &lt;em&gt;attitude controller&lt;/em&gt; just because I run out of ideas and suddenly worked everything nice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So here is my question. What should I consider when my system has an outer/inner controllers? How to be aware of that?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regards and happy new year!!!&lt;/p&gt;&#xA;" OwnerUserId="7097" LastActivityDate="2014-12-31T19:30:52.817" Title="Feedback controller: Is there any influence between outer and inner loop when running at different frequencies?" Tags="&lt;control&gt;&lt;quadcopter&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5252" PostTypeId="2" ParentId="5251" CreationDate="2014-12-31T14:05:36.123" Score="2" Body="&lt;p&gt;As short answer, the design of nested controllers proceeds normally from the inner/faster loop to the outer/slower loop. Hence, the outer controller is required to stabilize the &quot;equivalent plant&quot; composed of the actual plant along with the inner controller. In this stabilization design, of course, the frequency of the outer controller plays an important role. Generally speaking, therefore, it's not a matter of equating the two sample frequencies. Multi-rate controllers are quite widespread indeed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To choose the sampling rate $f_s$ one should observe the following thumb rule:&#xA;$$&#xA;10\cdot f_c&amp;lt;f_s&amp;lt;40\cdot f_c,&#xA;$$&#xA;where $f_c$ is the cross-over frequency of the system to control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Motivations for this consideration can be found in this &lt;a href=&quot;http://ecee.colorado.edu/shalom/Emulations.pdf&quot; rel=&quot;nofollow&quot;&gt;article&lt;/a&gt; (page 6).&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2014-12-31T14:23:00.037" LastActivityDate="2014-12-31T14:23:00.037" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5254" PostTypeId="2" ParentId="5251" CreationDate="2014-12-31T19:24:43.373" Score="1" Body="&lt;p&gt;In short, there is no particular need for synchronization of inner and outer loops. The inner loop should run &quot;fast enough&quot; to control attitude dynamics and the outer loop should run &quot;fast enough&quot; to control translation dynamics. In my last quad the inner loop ran at 200Hz and the outer loop ran at a variable rate from 50Hz-100hz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typically, you shouldn't be trying to &quot;tune&quot; the loop frequencies. Once they are fast enough there is no further benefit to be had. In your case, I would carefully check the code to see what the inner loop controller is doing between outer loop controller updates. In most setups, it will just remember the last command from the outer loop and control to that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To elaborate on the rationale for separate inner/outer loop controllers ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you noticed in papers, for quadrotors it is very common to have a separate inner loop (attitude) and outer loop (translation). One strong motivation for this has been the relative ease of attitude control and state estimation. The attitude subsystem is fully actuation and can be aggressively controlled for tight command tracking. Equally important, state estimation is generally quite accurate using a small 9-axis IMU (gyro + accel + mag).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When implemented correctly, this allows the outer loop to assume that it's attitude commands are tracked very tightly. The system now &lt;strong&gt;looks&lt;/strong&gt; like a system where attitude acts like a traditional input. In this case, the translation subsystem also becomes fully actuated. For this to work, the inner loop typically needs to run much faster than translation dynamics. Conversely, this means the translation dynamics are relatively slow so the outer loop controller doesn't need to run very fast.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The biggest limitation for the outer loop is how quickly and accurately you can estimate the translation state. For fully autonomous systems, This is typically slow and not very accurate so you can't act aggressively.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One final note, from a control theory point of view most of the inner+outer loop controllers don't have stability guarantees; I've seen only one paper where they went through the effort for a similar control architecture. There are also several papers where they create advanced algorithms with stability analysis but those typically aren't work the effort to implement.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastEditorUserId="2669" LastEditDate="2014-12-31T19:30:52.817" LastActivityDate="2014-12-31T19:30:52.817" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5255" PostTypeId="1" AcceptedAnswerId="5305" CreationDate="2014-12-31T20:48:44.860" Score="1" ViewCount="191" Body="&lt;p&gt;I'm trying to understand the source code of ArduPlane. The MAVLink message is decoded using a set of &lt;code&gt;_MAV_RETURN_????&lt;/code&gt; functions, e.g. &lt;code&gt;_MAV_RETURN_float&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I grep recursively for &lt;code&gt;_MAV_RETURN_float&lt;/code&gt;, I could not find where it is defined. I wonder if I'm missing anything.  &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;&lt;br&gt;&#xA;Here is the source code of Ardupilot, including ArduPlane.&lt;br&gt;&#xA;&lt;a href=&quot;https://github.com/diydrones/ardupilot&quot; rel=&quot;nofollow&quot;&gt;https://github.com/diydrones/ardupilot&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7580" LastEditorUserId="7580" LastEditDate="2015-01-02T20:17:33.247" LastActivityDate="2015-01-06T04:40:00.670" Title="Where is the function _MAV_RETURN_ defined?" Tags="&lt;ardupilot&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="5256" PostTypeId="2" ParentId="5196" CreationDate="2014-12-31T22:10:52.877" Score="0" Body="&lt;p&gt;Here are some off the shelf ESCs which claim to give 400Hz + update rate&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1000Hz&#xA;&lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__39708__Afro_ESC_30Amp_Multi_rotor_Motor_Speed_Controller_SimonK_Firmware_.html&quot; rel=&quot;nofollow&quot;&gt;http://www.hobbyking.com/hobbyking/store/__39708__Afro_ESC_30Amp_Multi_rotor_Motor_Speed_Controller_SimonK_Firmware_.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;600Hz &#xA;&lt;a href=&quot;http://www.amain.com/next-level-30-amp-multi-rotor-esc-w-simonk-firmware/p265104&quot; rel=&quot;nofollow&quot;&gt;http://www.amain.com/next-level-30-amp-multi-rotor-esc-w-simonk-firmware/p265104&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;499Hz&#xA;&lt;a href=&quot;http://www.helipal.com/storm-multirotor-30a-opto-esc.html&quot; rel=&quot;nofollow&quot;&gt;http://www.helipal.com/storm-multirotor-30a-opto-esc.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Normally SimonK firmware should give you some scope to play around for your requirements. You can refer following links&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/sim-/tgy&quot; rel=&quot;nofollow&quot;&gt;https://github.com/sim-/tgy&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.rcgroups.com/forums/showthread.php?t=1513678&quot; rel=&quot;nofollow&quot;&gt;http://www.rcgroups.com/forums/showthread.php?t=1513678&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2118" LastActivityDate="2014-12-31T22:10:52.877" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5257" PostTypeId="2" ParentId="5250" CreationDate="2014-12-31T22:37:01.390" Score="1" Body="&lt;p&gt;XBee sleep mode is supposed to be less than 10uA, so (if you can get it working) then use that. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A P-FET on the high side can be used to turn off anything, you'll need to drive it with a signal transistor to switch it from the mcu - e.g. &lt;a href=&quot;http://forum.arduino.cc/index.php?topic=112521.msg845816#msg845816&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt; or google for &lt;em&gt;FET high side switch&lt;/em&gt;.&lt;/p&gt;&#xA;" OwnerUserId="1321" LastActivityDate="2014-12-31T22:37:01.390" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5258" PostTypeId="2" ParentId="5224" CreationDate="2014-12-31T23:07:36.277" Score="1" Body="&lt;p&gt;Maxon motors are quality motors for industrial automation, their catalog is here - &lt;a href=&quot;http://www.maxonmotor.com/maxon/view/catalog/&quot; rel=&quot;nofollow&quot;&gt;http://www.maxonmotor.com/maxon/view/catalog/&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 320173 fits in your dimensions ( assuming the 0.75&quot; is diameter ) and is nominally 1.8V. New ones are around a hundred times more expensive than the cheap pager motors, but rated at 2W rather than 50mW.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can get Maxon motors second hand on ebay (the ones I got were for N-gauge model locomotives- they were 12mm diameter x 19mm 12V 1.2W - the 118429 but with a easily removed gearbox on ebay as 139885 ), though you're probably better sizing the machine around the motor you can afford rather than trying to get a particular model.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Though I'm not sure why a clockwork robot needs an electric motor - surely it would be an electric robot! &lt;/p&gt;&#xA;" OwnerUserId="1321" LastActivityDate="2014-12-31T23:07:36.277" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5259" PostTypeId="1" CreationDate="2015-01-01T06:56:56.473" Score="1" ViewCount="224" Body="&lt;p&gt;I've been working on a quad copter for awhile now, recently I've finished the interface for PID tuning and its leading me to question several design decisions. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The quad uses a RaspberryPi as its pilot, the entire loop takes less than 20ms. IMU data is gathered, the throttle speeds are calculated, and then finally sent to an Arduino(micro) over an SPI interface. Where they are &lt;code&gt;analogWrite(...)&lt;/code&gt;, to each ESC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can a quadcopter fly with a loop that slow? 20ms = 50Hz? &lt;/p&gt;&#xA;" OwnerUserId="7649" LastActivityDate="2015-01-03T18:04:33.473" Title="Is my quadcopter loop fast enough?" Tags="&lt;arduino&gt;&lt;quadcopter&gt;&lt;raspberry-pi&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5260" PostTypeId="1" AcceptedAnswerId="5263" CreationDate="2015-01-01T09:39:37.983" Score="5" ViewCount="2240" Body="&lt;p&gt;At first happy new 2015!!!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm looking for my next simulator development: a Tanker is flying at constant speed (350 Knots) (no acceleration, no change of altitude or direction). The Tanker is approached from behind by a UAV which needs to refuel or transfer data through a wire. The UAV knows the direction, the speed and &lt;em&gt;relative position&lt;/em&gt; from the tanker in order to approach it smoothly. It knows that at about 5 m from the tanker is the contact successful.&#xA;Here a picture I found on internet but it is clear more than thousand words:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/XR2Rv.jpg&quot; alt=&quot;Bild 1&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To achieve the task I thought to implement a &quot;simple&quot; PID which controls the position and the velocity, but for this I have in my mind two different designs approaches:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;Solution one&lt;/strong&gt;: the motion equation of my system provide the position $x,y,z$ and velocity $Vx, Vy, Vz$ of the UAV (to simplify things I will consider just $x$ but of course $y,z$ must be eventually considered too). Those are feedback with the desired position (5m) and velocity (350 Knots) of the tanker. The feedback line is separated for each state and PIDs are working quite indipendently as in the following picture:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/q6VbZ.png&quot; alt=&quot;PID 1&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;please note that to simplify things I never considered the acceleration.&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;&lt;strong&gt;Solution two&lt;/strong&gt;: this is the most tricky one and I was yesterday thinking about it all the time. In this case &lt;strong&gt;only one state&lt;/strong&gt; vector is going to be feedback to the desired setpoints. In this case I would feedback only the velocity then integrate it and feed the result into the second PID. Maybe the following picture is clearer:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/OEcFF.png&quot; alt=&quot;PID 2&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But here I'm not really sure if the second idea is conceptually wrong or could be affordable. I'm pretty sure that the first one is working and leads to good result, but I was wondering if the second one is affordable or is not recommended for a control design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regards&lt;/p&gt;&#xA;" OwnerUserId="7097" LastEditorUserId="6941" LastEditDate="2015-01-02T12:44:20.730" LastActivityDate="2015-01-02T14:49:08.123" Title="The aerial refueling problem: sketch of a feedback controller" Tags="&lt;control&gt;&lt;pid&gt;&lt;uav&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5261" PostTypeId="1" AcceptedAnswerId="5272" CreationDate="2015-01-01T13:28:36.387" Score="1" ViewCount="2014" Body="&lt;p&gt;So I'm in the process of building my robot and it has encoders on every wheel measuring speed and position and a compass sensor measuring heading.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have 3 seperate PID loops at the moment, I can either control the robots speed or I can control the robots position or I can make it follow a heading using a line following type algorithm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I am completely stuck on how to merge these control loops, how do I control the robots heading AND its speed. So I can say to it, &quot;go at 20 degrees at 3m/s&quot; or &quot;go at 45degrees for 5 metres then stop&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Really I would like to be able to control all 3, heading speed and position so I could say &quot;go at 20 degrees for 10 metres at a speed of 5m/s&quot; however I have no idea how to merge the loops.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the end of the day there are 3 inputs (heading, speed and position) and 1 output (PWM to motors) so do I need to use some kind of MISO control scheme, if so which one? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've looked at cascaded control but that only accepts 1 set point where I want to set 3 different set points. Maybe some kind of state machine? I'm so stuck!!&lt;/p&gt;&#xA;" OwnerUserId="2053" LastActivityDate="2015-01-03T06:42:36.067" Title="How to program parallel PID control loops? So I can give my robot multiple set points to follow" Tags="&lt;motor&gt;&lt;sensors&gt;&lt;control&gt;&lt;pid&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5263" PostTypeId="2" ParentId="5260" CreationDate="2015-01-01T21:23:55.360" Score="4" Body="&lt;p&gt;Both the solutions you proposed do suffer from unwanted interaction among the two PIDs. You're basically trying to assign two simultaneous goals - i.e. final relative position along with terminal non null speed - when the system has only one input variable, let's say the &quot;&lt;em&gt;thrust&lt;/em&gt;&quot; driving the UAV dynamics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The correct scheme should be the one depicted below:&#xA;&lt;img src=&quot;https://i.stack.imgur.com/yQ0xT.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There exists only one PID providing the driving force to the system, which is fed by the error between the modeled dynamics of the Tanker (plus the relative offset) and the current UAV position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A typical outcome is plotted here for the plant $m\ddot{x}=-d\dot{x}+u$, where $m=10$, $d=0.1$ $x(0)=(0,0)'$, and the controller's parameters are $P=22.608$, $I=0.874$, $D=51.891$, $N=10.413$ (PID in parallel form).&#xA;&lt;img src=&quot;https://i.stack.imgur.com/DDlzP.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As it is visible in the graph, the unique goal of the UAV is to catch up the increasing position of the flying Tanker; the fact that eventually also the terminal speed turns to be equal to the desired one comes out exclusively as positive consequence of the good position tracking performance. When you track a position very well, then you also track how it changes over time (i.e. its velocity).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Take-home message about hierarchical control loops: when the designer opts for a combination of inner and outer loops with two nested PIDs, he can only assign as set-point the final position for the outer loop, whereas the inner PID is tuned to have some given performance of dynamic behavior but not to get any steady-state velocity.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2015-01-02T14:49:08.123" LastActivityDate="2015-01-02T14:49:08.123" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5264" PostTypeId="2" ParentId="5261" CreationDate="2015-01-01T23:33:17.217" Score="1" Body="&lt;p&gt;Try to gather some basic knowledge on the argument by reading papers about the control of the &lt;strong&gt;unicycle&lt;/strong&gt;; here's &lt;a href=&quot;http://users.isr.ist.utl.pt/~jag/publications/08-JETC-RCarona-vcontrol.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;one&lt;/a&gt; of them. This article has pretty much everything you need.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A somehow related &lt;a href=&quot;https://robotics.stackexchange.com/questions/5260/the-aerial-refueling-problem-scratch-of-a-feedback-controller&quot;&gt;question&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2015-01-01T23:33:17.217" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5265" PostTypeId="2" ParentId="5196" CreationDate="2015-01-02T00:52:33.137" Score="1" Body="&lt;p&gt;The thing i was looking for turned out to be the KISS ESC:&#xA;&lt;a href=&quot;http://flyduino.net/KISS-ESC-2-4S-18A-v11_1&quot; rel=&quot;nofollow&quot;&gt;http://flyduino.net/KISS-ESC-2-4S-18A-v11_1&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It has an update speed of op to 2000Hz due to it's own control method called oneshot125.&lt;/p&gt;&#xA;" OwnerUserId="7743" LastActivityDate="2015-01-02T00:52:33.137" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5266" PostTypeId="2" ParentId="5214" CreationDate="2015-01-02T03:58:26.990" Score="2" Body="&lt;p&gt;As far as I can tell, you are asking how a &lt;a href=&quot;http://en.wikipedia.org/wiki/split-flap_display&quot; rel=&quot;nofollow&quot;&gt;&quot;split-flap display&quot;&lt;/a&gt; on things like the &#xA;&lt;a href=&quot;http://en.wikipedia.org/wiki/Flapit&quot; rel=&quot;nofollow&quot;&gt;Flapit&lt;/a&gt;, the &lt;a href=&quot;http://www.wired.com/2013/08/lets-make-sure-everyone-knows-how-popular-you-are-with-the-smiirl-fliike/&quot; rel=&quot;nofollow&quot;&gt;Smiirl Fliike&lt;/a&gt;, etc. works.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;flip clocks&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Some &lt;a href=&quot;http://en.wikipedia.org/wiki/flip_clock&quot; rel=&quot;nofollow&quot;&gt;flip clocks&lt;/a&gt; -- &lt;a href=&quot;http://www.instructables.com/id/Cool-Exposed-Retro-Flip-Clock/&quot; rel=&quot;nofollow&quot;&gt;&quot;Retro Flip Clock&quot;&lt;/a&gt;, etc. -- use a single motor and a &lt;a href=&quot;https://www.youtube.com/watch?v=rjWfIiaOFR4&quot; rel=&quot;nofollow&quot;&gt;&quot;carry gear mechanism&quot;&lt;/a&gt; so they can only count forward and backward (or in some cases only forward) in sequential order.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;general flip displays&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The video you show seems to spin the 100s digit, the 10s digit, and the 1 digit independently of the other digits,&#xA;like split-flap displays indicating arrivals and departures at airports and railway stations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suspect it is possible to have a mechanism with a total of one or two motors to independently select one at a time of a large number of letter/digit flip sections, and then flip that section an appropriate number of times, perhaps something like the way the &lt;a href=&quot;https://en.wikipedia.org/wiki/Armatron&quot; rel=&quot;nofollow&quot;&gt;Armatron&lt;/a&gt; somehow managed to control a bunch of joints with a total of one single motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, in practice,&#xA;my understanding is that such displays typically have a dedicated motor for each letter/digit.&#xA;For example, &lt;a href=&quot;http://www.jave.de/blog2/?p=111&quot; rel=&quot;nofollow&quot;&gt;Markus' split-flap display&lt;/a&gt; (via &lt;a href=&quot;http://hackaday.com/2011/01/03/driving-an-8-digit-split-flap-display/&quot; rel=&quot;nofollow&quot;&gt;&quot;Driving an 8-digit split flap display&quot;&lt;/a&gt; ), &lt;a href=&quot;http://unknowndomain.co.uk/category/design/split-flap-display/&quot; rel=&quot;nofollow&quot;&gt;Tom Lynch's split-flap display&lt;/a&gt; (via &lt;a href=&quot;http://hackaday.com/2014/10/04/split-flap-display-if-cant-find-it-built-it/&quot; rel=&quot;nofollow&quot;&gt;&quot;Split flap display: if you can’t find it, built it&quot;&lt;/a&gt; ), the &lt;a href=&quot;http://www.wired.com/2013/12/this-exhibit-turns-old-school-travel-schedule-boards-into-art/#slideid-317641&quot; rel=&quot;nofollow&quot;&gt;&quot;Signal-to-noise&quot; mechanism&lt;/a&gt;, etc. each use a dedicated motor for each letter/digit section.&lt;/p&gt;&#xA;" OwnerUserId="187" LastActivityDate="2015-01-02T03:58:26.990" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5267" PostTypeId="1" CreationDate="2015-01-02T05:26:33.623" Score="0" ViewCount="177" Body="&lt;p&gt;I have some questions regarding building a gearbox for a motor to create a robot actuator. Given my desired motor and loads, I've determined that a gear ratio in the 400-700 range is adequate for my application. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is my motor choice for reference: &lt;a href=&quot;http://www.robotshop.com/ca/en/banebots-rs-550-motor-12v-19300rpm.html&quot; rel=&quot;nofollow&quot;&gt;http://www.robotshop.com/ca/en/banebots-rs-550-motor-12v-19300rpm.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are my questions:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) Mounting gears to a motor: if I have a motor with a shaft diameter of 0.12in (3.2mm), what size gear bore should I use, and how do I attach a gear to the shaft in practice? I'm not that mechanically inclined (yet). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) Say I build a gearbox of ratio 625:1, as such: &lt;a href=&quot;https://www.youtube.com/watch?v=lF-4qVBWy88&quot; rel=&quot;nofollow&quot;&gt;https://www.youtube.com/watch?v=lF-4qVBWy88&lt;/a&gt; I have no idea of how &quot;durable&quot; such a set up would be. For my application, I am looking at moving an 8kg mass from 0.6 meters away, coming out to a total torque of 47 newton meters. How can I tell if the gears will break or not? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For reference, these are the gears I'm looking at (and I'm pretty sure they're the same ones in the video): &lt;a href=&quot;http://www.vexrobotics.com/276-2169.html&quot; rel=&quot;nofollow&quot;&gt;http://www.vexrobotics.com/276-2169.html&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;3) Assuming those gears above were to fail, what type of gear material would be recommended for my load application of max 47nm? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;4) What efficiencies can one expect from gears of different types? I've been assuming 50% conservatively as another answer mentioned. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you for any help, and please let me know if anything was unclear.&lt;/p&gt;&#xA;" OwnerUserId="6858" LastEditorUserId="110" LastEditDate="2015-01-18T13:23:45.613" LastActivityDate="2015-01-18T13:23:45.613" Title="Questions on gears for a robot actuator" Tags="&lt;motor&gt;&lt;robotic-arm&gt;&lt;torque&gt;&lt;gearing&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="1" ClosedDate="2015-01-21T12:13:49.323" ContentLicense="CC BY-SA 3.0" />
  <row Id="5268" PostTypeId="2" ParentId="4946" CreationDate="2015-01-02T14:21:24.827" Score="1" Body="&lt;p&gt;I assume you're provided with the following quantities:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The &lt;a href=&quot;http://en.wikipedia.org/wiki/Camera_resectioning#Intrinsic_parameters&quot; rel=&quot;nofollow&quot;&gt;intrinsic parameters&lt;/a&gt; of the &lt;em&gt;pinhole camera model&lt;/em&gt; in the conventional matrix format $\Pi \in \mathbb{R}^{3\times4}$.&lt;/li&gt;&#xA;&lt;li&gt;$n$ 3-D stationary points $P_i=(x_i,y_i,z_i)'$ you can track in the environment that are given in the fixed reference frame $O$ used by the odometry, whose projections in the camera image plane are $\pi_i(t_j)$. The camera is supposed to be rigidly attached to a moving robot (we keep the joint fixed), thus $\pi_i$ varies with the observations taken at discrete time instants $t_j$.&lt;/li&gt;&#xA;&lt;li&gt;$n$ 2-D points $p_i(t_j)$ estimated within the image plane by the tracking algorithm at the discrete instants $t_j$.&lt;/li&gt;&#xA;&lt;li&gt;The homogeneous transformation $H(x(t_j),\theta+\delta\theta) \in \mathbb{R}^{4\times4}$ describing the location of the camera frame mounted on the robot with respect to the root frame $O$, as provided by the odometry. $H$ depends on the location $x$ (comprising the translation and the rotation of the base) that varies over time so as the joint angle $\theta+\delta\theta$ which is kept fixed, instead, representing $\theta$ the initial estimate of the joint angle and $\delta\theta$ the unknown offset to be sought.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;We aim then at minimizing the following cost function:&#xA;$$&#xA;E=\frac{1}{2}\sum_{i=1}^{n} \sum_{t_j} \left\| p_i(t_j)-\tilde{\pi}_i(t_j) \right\|^2,&#xA;$$&#xA;where&#xA;$$&#xA;\pi_i(t_j)=\Pi\cdot H^{-1}(x(t_j),\theta+\delta\theta)\cdot P_i.&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It turns out that $\pi_i \in \mathbb{R}^3$ and specifically $\pi_i=\lambda_i\cdot(u_i,v_i,1)'$, so that we can set $\tilde{\pi}_i=(u_i,v_i)'$ to be used in $E$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The unknowns are $\delta\theta$ and $P_i$; the total number of key-points $n$ can be kept low (around 4$\div$5 non-coplanar points) as we benefit from the significantly higher number of observations at discrete instants $t_j$. The form of the cost function $E$ is suitable for the &lt;em&gt;LM&lt;/em&gt; algorithm since the expression for the gradient $J$ is easy to be retrieved (we know how to write down $H$).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A possible knowledge of the locations of the key-points $P_i$ specified in $O$ can be conveniently put inside $E$ to speed up convergence.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2015-01-03T13:26:15.033" LastActivityDate="2015-01-03T13:26:15.033" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5270" PostTypeId="2" ParentId="4577" CreationDate="2015-01-02T22:11:02.747" Score="0" Body="&lt;p&gt;Sensitivity of the sensor is approx. 525 mV/A. I was trying the same motor Driver - MC33926 and when there was a very low load of the motor, the 0 as the output was correct, because it was drawing very small current.&lt;/p&gt;&#xA;" OwnerUserId="7804" LastActivityDate="2015-01-02T22:11:02.747" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5271" PostTypeId="2" ParentId="5267" CreationDate="2015-01-03T04:50:16.190" Score="1" Body="&lt;p&gt;Why not just BUY a gear motor.  These things are basically the motor you linked to with a reduction gearbox attached.&#xA;Here is a motor with a 380:1 reduction&#xA;&lt;a href=&quot;http://www.pololu.com/product/1590&quot; rel=&quot;nofollow&quot; title=&quot;gear motor&quot;&gt;gear motor&lt;/a&gt;  These come is any reduction ratio you need.&lt;/p&gt;&#xA;" OwnerUserId="2609" LastEditorUserId="2609" LastEditDate="2015-01-03T17:34:03.457" LastActivityDate="2015-01-03T17:34:03.457" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5272" PostTypeId="2" ParentId="5261" CreationDate="2015-01-03T05:06:35.743" Score="1" Body="&lt;p&gt;What you need to do is make a LAYERED control system.  At the bottom layer is the motor speed PID controller.    It will constantly read two parameters &quot;target speed&quot; and &quot;count to stop at&quot;.  There is one of these for each wheel.  The Wheel-PID runs the wheel at the desired speed until the encoder count matchers the stop count.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next you have a heading PID.  It's output is the &quot;target speed&quot; for each of the wheels.  It it needs to go more to the left it increases the speed of the right wheels and reduces the left wheel speed.  This servos the robot to the desired heading.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The next level outputs the desired heading and the &quot;stop at&quot; encoder count.  It knows what heading to go to in order to get to the desired location and how to avoid obstacles and it can set the target speed based on maybe how close the robot is to the location.  It get the current location be integrating the path actually traveled.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You were right when you said &quot;cascade&quot;.  One PID's output is the next one's input.  But it need not be one to one&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But as you move upward perhaps &quot;PID&quot; is not the right method?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also you will find you need to combine sensor data when two sensors give the same information like wheel encodes and a compass.  You can use a Kalman filter to combine this data.&lt;/p&gt;&#xA;" OwnerUserId="2609" LastEditorUserId="2609" LastEditDate="2015-01-03T06:42:36.067" LastActivityDate="2015-01-03T06:42:36.067" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5273" PostTypeId="2" ParentId="5261" CreationDate="2015-01-03T05:12:23.943" Score="0" Body="&lt;p&gt;As you noted, there is only one output (the motor's desired PWM) when all is said and done. All three loops may contribute to this output, but how should this be managed? The simplest method is to average all 3 commanded inputs to form a single PWM value, $PWM=(heading+speed+position)/3$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, this method assumes that all command forms are equally valued. Is heading more important? Then weight it more: $(alpha * heading)+(beta * speed)+(gamma * position)$, where $alpha+beta+gamma = 1$ and $alpha &amp;gt; beta$ and $alpha &amp;gt; gamma$. &lt;/p&gt;&#xA;" OwnerUserId="532" LastActivityDate="2015-01-03T05:12:23.943" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5274" PostTypeId="2" ParentId="1232" CreationDate="2015-01-03T06:47:32.523" Score="0" Body="&lt;p&gt;As said above, you start out by telling each wheel to move at the same speed and then the PID makes sure they are running at that speed.  But this will NOT be perfect.  You need to keep checking for and correcting errors   (1) periodically read and compare the two wheel encoder counts and make one wheel go slightly faster if needed to get the counts equal. and (2) encoders NEVER are perfect you you need an accelerometer and a compass.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You are looking at a Kalman filter.  if you want to combine encoder, compass and accelerometer data to give you the heading.  &lt;/p&gt;&#xA;" OwnerUserId="2609" LastActivityDate="2015-01-03T06:47:32.523" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5275" PostTypeId="2" ParentId="2837" CreationDate="2015-01-03T06:52:52.563" Score="0" Body="&lt;p&gt;I have the same kind of system.  It is a wheel encoder with just one sensor.  I get just 20 counts per wheel revolution.   It is easy to use.  The software that sets the motor direction also sets a global variable to either +1 or -1.  Then when the interrupt handler gets the signal &quot;tick&quot; it ADDS the global variable to the current count.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In short with one encoder you have to just remember the direction you told the wheel to go.  This only works if the motor is strong or if there is a lot of friction in the system.  It fails if there can be uncommanded wheel motion.&lt;/p&gt;&#xA;" OwnerUserId="2609" LastActivityDate="2015-01-03T06:52:52.563" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5276" PostTypeId="1" CreationDate="2015-01-03T09:50:56.117" Score="2" ViewCount="1473" Body="&lt;p&gt;A friend and colleague of mine who studies robotics says that bipedal robots present much greater challenges for stability and locomotion than those with more legs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So why is there so much effort to develop bipedal robots?  Are there any practical advantages?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, I see the advantage of having arm-like free appendages, but it seems like 4 legs and 2 arms would generally be a better design.&lt;/p&gt;&#xA;" OwnerUserId="7805" LastEditorUserId="110" LastEditDate="2015-01-04T02:14:18.713" LastActivityDate="2015-01-04T06:28:04.770" Title="Why Make Bipedal Robots?" Tags="&lt;mobile-robot&gt;&lt;design&gt;&lt;legged&gt;" AnswerCount="5" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="5277" PostTypeId="2" ParentId="5276" CreationDate="2015-01-03T10:57:06.023" Score="2" Body="&lt;p&gt;I would say:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Compactness of the structure: imagine humanoid robots that are required to operate in household environment: two-legged robots might have less difficulties in navigating among tables and chairs standing very close each other.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Energy consumption: of course the power needed increases proportionally with the number of legs.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Human likeness: an aspect that we don't have to neglect if one day we want to have robots among us, both for social reasons and technological reasons. Regarding the latter, generally speaking, copying the human body entails a number of benefits for robots that are designed to act in human context: this applies equivalently to the robot upper-body (e.g. manipulation) and to its lower-body (e.g. locomotion).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="6941" LastActivityDate="2015-01-03T10:57:06.023" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="5278" PostTypeId="2" ParentId="5276" CreationDate="2015-01-03T12:46:47.787" Score="2" Body="&lt;p&gt;In addition to the reasons given by Ugo, studying humanoid robots in general helps in the medical field too.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Trying to understand what sensors/systems robots need helps us understand what sensors/systems we use&lt;/li&gt;&#xA;&lt;li&gt;If we can make a fully functioning humanoid robot, then individual parts such as an arm or a leg can be converted to a better functioning prosthetic limb for people.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;And one more reason I can think of&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Why study anything hard? All the subproblems worked on by individual researchers can be easily applied to other types of robots.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2015-01-03T12:46:47.787" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5279" PostTypeId="1" AcceptedAnswerId="5280" CreationDate="2015-01-03T15:03:36.820" Score="1" ViewCount="449" Body="&lt;p&gt;I would like to control the position and velocity of a DC motor like this &lt;a href=&quot;http://www.ebay.co.uk/itm/ZY-MY-1016-Electric-Motor-24v-200w-Brushed-E-Bike-Scooter-24-Volt-200-Watt-Chain-/171573828523?pt=LH_DefaultDomain_0&amp;amp;hash=item27f298dbab&quot; rel=&quot;nofollow&quot;&gt;one&lt;/a&gt; (ZY MY 1016 - 24V - 10A - 200W). The motor comes with a 13 TOOTH SPROCKET and the diameter of the shaft is 6mm. It's not possible to apply an encoder to the back of the motor (see &lt;a href=&quot;http://i.ebayimg.com/00/s/NDIzWDU1MA==/z/0NYAAOxyDo1TjvN6/$_12.JPG?set_id=880000500F&quot; rel=&quot;nofollow&quot;&gt;picture&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The angular velocity in the description is 2750 RPM, which encoder do you recommend?  &lt;/p&gt;&#xA;" OwnerUserId="6970" LastActivityDate="2015-01-03T17:22:10.927" Title="Which encoder should I use with a 24V Dc motor and 6mm shaft?" Tags="&lt;motor&gt;&lt;quadrature-encoder&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5280" PostTypeId="2" ParentId="5279" CreationDate="2015-01-03T15:29:44.453" Score="1" Body="&lt;p&gt;Any of them. Which ones have you looked at?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I googled, and the first one that came up was a smaller pololu unit for a micro robot,&#xA;&lt;img src=&quot;https://i.stack.imgur.com/vbqDL.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But you know what? They all work the same and are fairly simple to build / adapt.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You probably can locate a hall effect sensor at the 13 tooth sprocket.&#xA;&lt;a href=&quot;http://www.sensorsmag.com/sensors/position-presence-proximity/understanding-integrated-hall-effect-rotary-encoders-1254&quot; rel=&quot;nofollow noreferrer&quot;&gt;Understanding Integrated Hall Effect Rotary Encoders&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other than that, this sounds like a shopping question, you might get lucky and find someone who has used a 6mm shaft encoder and can recommend it, but that is not a robotics question.&lt;/p&gt;&#xA;" OwnerUserId="274" LastActivityDate="2015-01-03T15:29:44.453" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5281" PostTypeId="2" ParentId="5276" CreationDate="2015-01-03T15:38:01.243" Score="1" Body="&lt;p&gt;Really simple;  Bipedal robots are designed to operate in environments made for ..... bipedal people.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A swimming bipedal robot is probably not a good idea.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since climbing stairs, stepping over curbs, sitting in vehicles, opening doors and reaching into cabinets are all environment issues due to a design for humans, you can save a lot of contingency planning by using a bipedal model.  Yes, it requires some complex math that evolution gave the human bipeds, but the big picture is that in the end, it is much simpler than alternatives.&lt;/p&gt;&#xA;" OwnerUserId="274" LastActivityDate="2015-01-03T15:38:01.243" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5282" PostTypeId="1" AcceptedAnswerId="5289" CreationDate="2015-01-03T15:52:44.317" Score="2" ViewCount="767" Body="&lt;p&gt;I'm attempting to customise some code for my DIY pentacopter frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To that end, i've modified the some existing code, and saved it under AP_MotorPenta.cpp and AP_MotorsPenta.h . I'm currently trying to upload the code onto my flight controller, but am currently unable to do so due to the following problems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Problems&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unable to upload to my APM 2.6    ( #1)&#xA;Unable to select my pentacopter frame.    (#2)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Problem (#1)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've saved my customised files in the AP_Motors library, and have compiled the Arducopter 3.2 code in ArduPilot-Arduino-1.0.3-gcc-4.8.2-windows , after which i upload it using mission planner. However, when i am uploading the hex file, i get the following error &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&quot;Uploaded Succeeded, but verify failed : exp E2 got 60 at 245760&quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;However, when i try uploading it directly from the modified Arduino IDE, i get a series of warnings , followed by the messages&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;avrdude:verification error, first mismatch at byte 0x3c000 0x60 !=&#xA;  0xe2 avrdude: verification error; content mismatch&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;followed by the message &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&quot; avrdude done.Thank you. &quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Does this mean that the uploading of the firmware to my flight controller is successfull? Also, is there any difference between uploading via mission planner and the modified Arduino IDE?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Problem #2&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the mission planner, originally there is the option to choose one of several frames, (i.e Quad/HexaOcto) etc. After uploading my firmware, how would i go about selecting my penta frame for use?Also is there any further thing that i would have to do?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apologies in advance if the questions are rather inane, as i have little programming experience to speak of.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would really appreciate any help i can get.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance !&lt;/p&gt;&#xA;" OwnerUserId="7444" LastActivityDate="2015-01-03T18:27:52.533" Title="Uploading edited code for Arducopter" Tags="&lt;arduino&gt;&lt;quadcopter&gt;&lt;microcontroller&gt;&lt;ardupilot&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5283" PostTypeId="1" AcceptedAnswerId="5299" CreationDate="2015-01-03T16:36:27.340" Score="3" ViewCount="2351" Body="&lt;p&gt;I am planning to develop a monocular visual odometry system. Is there any indoor dataset available to the public, along with the ground truth, on which I can test my approach?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: I am already aware of the KITTI Vision Benchmark Suite which provides stereo data for outdoor vehicles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If anyone has access to the datasets used in the following paper [SVO14], it would be even more great: &lt;a href=&quot;http://rpg.ifi.uzh.ch/docs/ICRA14_Forster.pdf&quot; rel=&quot;nofollow&quot;&gt;http://rpg.ifi.uzh.ch/docs/ICRA14_Forster.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7807" LastActivityDate="2017-01-11T11:08:35.497" Title="Public dataset for monocular visual odometry" Tags="&lt;computer-vision&gt;&lt;odometry&gt;" AnswerCount="4" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5284" PostTypeId="2" ParentId="5279" CreationDate="2015-01-03T17:15:30.190" Score="1" Body="&lt;p&gt;I doubt you will be able to simply by something an attach it.  How to make an encoder will depend on how this motor is used.  Are you doing a chain, gears?  You will need to design the rotation sensor into the rest of the power transmission system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you do is place a disk of some kind, plastic or metal and then you make a hole or slot in the disk and your sensor detects the slot.  The simplest sensors to use are these IR LED/photo transistors.   They are cheap and very reliable even in bright light.  I use them with a black plastic disk.  But test your disk material first.  Some that looks black is transparent in IR.  Metal is best.&lt;br&gt;&#xA;&lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/B00843JUJM&quot; rel=&quot;nofollow&quot;&gt;IR sensor&lt;/a&gt;   To use them you need to add two resisters and 5V power.  330R for a current limiter on the LED side and a 10K load resister on the transistor side.  Those values are not critical. I connect this to a interrupt pin on an Arduino.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your case you might drill a hole in the sprocket gear and mount an IR sensor where it can &quot;see&quot; the hole.  The sensor come with different slot widths.  I'd pick a width abut twice the thickness of the disk&lt;/p&gt;&#xA;" OwnerUserId="2609" LastEditorUserId="2609" LastEditDate="2015-01-03T17:22:10.927" LastActivityDate="2015-01-03T17:22:10.927" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5285" PostTypeId="2" ParentId="4384" CreationDate="2015-01-03T17:32:32.630" Score="0" Body="&lt;p&gt;You seem to have gotten the correct formula.  But continue to study them until you understand how they are derived, don't just copy.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;One thing I can add this that odometer only works for a short distance.  A few meters and not even that if outdoors running over rocks and grass.  You need some other kind of sensor and then combine the data.  One of those 9DOF compass/accelerometer/gyros work well can now you can get them for $5 or $6 on a breakout board.  Use this and the wheel data and you are better off.  &lt;/p&gt;&#xA;" OwnerUserId="2609" LastActivityDate="2015-01-03T17:32:32.630" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5286" PostTypeId="2" ParentId="5276" CreationDate="2015-01-03T17:40:03.840" Score="1" Body="&lt;p&gt;What you are asking is &quot;why build something that is hard to make when there are easy to make solutions?&quot;  Simple answer: &quot;because you learn more when you do something that is hard.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also if yu want a robot that can function in a world with humans then if is best if the robot is in the shape of a human.  We have constructed out world based on our shape and size.  Doors and stairs and walkway paths and the with of isles in the super market and a million other things are build for use by humans.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;We could argue that today &quot;everything&quot; is wheel chair accessible so why not build a robot that looks like a powered wheel chair?  OK sounds good until you try siting in a wheel chair for a full day and see how much better walking works.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But really you build the robot based on the task it has to do.  Most don't move at all and are bolted to the concrete floor.&lt;/p&gt;&#xA;" OwnerUserId="2609" LastActivityDate="2015-01-03T17:40:03.840" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5287" PostTypeId="2" ParentId="5259" CreationDate="2015-01-03T18:04:33.473" Score="2" Body="&lt;p&gt;As a rules of thumb, 50Hz is good.  But you need to look at your rates.  What is for example the maximum rate of rotation about &quot;Z&quot; or &quot;yaw&quot;?   If the aircraft can spin at 50 revolutions per second then obviously a 50Hz loop is not going to work.   Divide the 50Hz loop rate by the rates of movements about each axis&lt;/p&gt;&#xA;" OwnerUserId="2609" LastActivityDate="2015-01-03T18:04:33.473" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5288" PostTypeId="2" ParentId="2453" CreationDate="2015-01-03T18:17:58.267" Score="0" Body="&lt;p&gt;You have an Arduino in the list of parts but no software.  Are you writing your own?  This would be a big job.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are building this from scratch including the software one big mistake would be to simply build the whole thing then try to fly it outdoors.  NO.  Fist build some small part and test it, then some other small part.   For example the arduino and software.  Run it on your desk with a USB cable plugging in to the PC and just print motor commands and sensor inputs to the screen or log files.   Build a jig to test one motor what you measure current with a meter and RPP with an IR sensor.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You are developing an aircraft and you do that in a series of tiny &quot;baby steps&quot;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you just want a quad copter then buy a quad copter.  If you want a design project then buy parts but expect a long process, especially with the software development.&lt;/p&gt;&#xA;" OwnerUserId="2609" LastActivityDate="2015-01-03T18:17:58.267" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5289" PostTypeId="2" ParentId="5282" CreationDate="2015-01-03T18:27:52.533" Score="0" Body="&lt;p&gt;You say &quot;I have little programming experience to speak of.&quot;  I'd fix this problem before going further.  You questions tell be you don't know how to use even the basic Arduino IDE.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Have you gotten the example sketches in the IDE to work?  Staring with the blinking LED example?  Sorry if this is an insulting question butI don't know, you don't say what you CAN do&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now to your question. &quot;Uploaded Succeeded, but verify failed&quot; means that when the code was loaded and the read back to verify  the loading as accurate.  This failed.  So you can't be sure the correct code is loaded in the Arduino.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;We don't know why this failed.  I would put the copter and related software aside and verify you can load code into the Aduino and verify it.  Just write some big sketch that nearly fills memory.&lt;/p&gt;&#xA;" OwnerUserId="2609" LastActivityDate="2015-01-03T18:27:52.533" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5290" PostTypeId="2" ParentId="1290" CreationDate="2015-01-03T18:42:13.097" Score="0" Body="&lt;p&gt;I don't understand the purpose of the array?  Why do you need to store the angle values?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why not just to this?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;elbow.write(Serial.read());&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That said the over all design has a big problem.  It is very easy to get out of sync if a byte is dropped.  Better to write out six byte blocks with the first two bytes of each block being a unique sync word.  Use some impossible value like x00ff.   Then you wait for a sync word and then read the next four bytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other more complex but better method is to have a checksum at the end of the block, verify the block is correct and only then write out the angles.   Using both a sync word AND a checksum makes it nearly bomb proof.  A written you data can have errors and you would never be able to know.&lt;/p&gt;&#xA;" OwnerUserId="2609" LastActivityDate="2015-01-03T18:42:13.097" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5291" PostTypeId="2" ParentId="4699" CreationDate="2015-01-03T19:22:47.627" Score="2" Body="&lt;p&gt;You can detect an IR LED from quite some distance.  This is how TV remote controls work.  A tiny battery operated LED can send data even when not aimed directly at the TV.  The trick is to modulate the LED with some high frequency then the receiver uses an analog filter to pass only that frequency.  This filters out room light (which is close to DC.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Homing in on an IR LE is just like those line following robots.  You have a row of IR receivers each with a narrow angle of view and turn the robot so the center receiver gives the brightest signal.  This works in the easy case that the room is clear of obstacles.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have not done this but I think a cheap video camera (web cam) would work well. A blinking IR LED would be easy to detect, then star the robot so as to keep the blinking LED centered.  But you'd need a computer able to run openCV or the like.  An Arduino could handle a row of IR phototransistors but not a camera.&lt;/p&gt;&#xA;" OwnerUserId="2609" LastActivityDate="2015-01-03T19:22:47.627" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5292" PostTypeId="1" AcceptedAnswerId="5294" CreationDate="2015-01-03T21:50:03.293" Score="0" ViewCount="208" Body="&lt;p&gt;I am trying to design a robot to lift tote-crates and transport them around in a localized area. I want to be able to carry 3 tote-creates at a time.  This robot needs to be able to pickup the creates. I only want the robot to carry three at a time so keep is small and mobile. I was thinking of a design with a central lift that could carry the crates. What would you suggest as a simple ingenious way to create this robot? &lt;/p&gt;&#xA;" OwnerUserId="7810" LastEditorUserId="110" LastEditDate="2015-08-14T13:18:52.593" LastActivityDate="2015-08-14T13:18:52.593" Title="Lifting Robot To Lift Small Crates" Tags="&lt;design&gt;&lt;wheeled-robot&gt;&lt;mechanism&gt;" AnswerCount="1" CommentCount="3" ClosedDate="2015-08-14T18:42:24.233" ContentLicense="CC BY-SA 3.0" />
  <row Id="5293" PostTypeId="1" CreationDate="2015-01-04T00:14:42.917" Score="3" ViewCount="92" Body="&lt;p&gt;I'm absolutely fascinated by the notion of a driverless car.  I know there is a lot involved with it and there are many different approaches to the problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To narrow the scope of this question to something reasonable for the SE network, i'm curious to know if there is a common sequence of subproblems that every driverless car needs to solve at each timestep to make an autonomous car possible for real life, point to point transportation possible.  I imagine that once the starting point and target destination on a given map are set, a self driving follows an algorithm that loops through certain operations to solve certain problems along the way.  I'm more interested in knowing what those problems are specifically at a high level, rather than detailed algorithms to solve them.  Do all self driving cars solve the same subproblems along the way?&lt;/p&gt;&#xA;" OwnerUserId="2295" LastEditorUserId="2295" LastEditDate="2015-01-04T00:21:35.587" LastActivityDate="2015-01-04T03:35:54.767" Title="How do self driving cars really work?" Tags="&lt;automatic&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5294" PostTypeId="2" ParentId="5292" CreationDate="2015-01-04T03:23:03.893" Score="1" Body="&lt;p&gt;The simplest way?  Every crate has its own wheels and motor.  In other words one robot  per crate.  I bet that in some cases this is lower cost.  It certainly lowest the design complexity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other design is a &quot;travel lift&quot;.  These are used on boat and lumber yards.  You would build a smaller version.  It is the shape of an inverted &quot;U&quot; with four wheels. It looks like an overhead crane, the kind the runs on an overhead I-bean track but the I beam is on wheels.  Then you place three lifts on you mobile I-beam track.  The robot could stores three crates, if the I-beam where longer it could store more.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You crate ned a handle that a lift can capture.  A magnet might help to initially align the parts and then close a mechanical latch. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;like the one robot per crate idea as being fool proof simple. &lt;/p&gt;&#xA;" OwnerUserId="2609" LastActivityDate="2015-01-04T03:23:03.893" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5295" PostTypeId="2" ParentId="5293" CreationDate="2015-01-04T03:35:54.767" Score="2" Body="&lt;p&gt;The basic algorithm is called &quot;SLAM&quot;.  If you google &quot;SLAM Algorithm&quot; you will get about a million hits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It can NOT depend on a stored map.  That can't work because the most important objects are not the roads and intersections but the OTHER cars and pedestrians and that box the just fell of the truck and the traffic cones that close off a lane.  In fact MOST things the car has to deal with are very transient.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other thing that SLAM does in localize the car.  It has to continuously solve the &quot;where am I?&quot; question by looking around.   GPS can give an absolute position but a car want RELATIVE location, like &quot;I am 16 inches from the curb.&quot; so it needs to be able to see the curb.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A conventional map is good only for high level route planning.  Same with GPS, it is only good for high level thinking.  To actually drive you have to scan the environment and make a &quot;map&quot; of all the moving and non-moving objects in real time.   Again notice the most important things on your map are MOVING OBJECTS.   &lt;/p&gt;&#xA;" OwnerUserId="2609" LastActivityDate="2015-01-04T03:35:54.767" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="5296" PostTypeId="2" ParentId="5276" CreationDate="2015-01-04T06:19:32.047" Score="0" Body="&lt;p&gt;I find it quite astonishing that I was actually pondering on this particular type of matter regarding bipedal robots, or more specifically humanoids, very recently.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Humanoids, given that their physical structure extensively resembles that of a human, are more suitable in operating in environments where humans would normally operate in.  This alone has the potential to alleviate the tasks that would otherwise seem redundant and repetitive but also situations where it would be too dangerous for humans to work in.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Intrinsically, our environment is filled with objects that have been specifically designed for us to interact with. Whether it's the faucet in your sink, the knob at the door or the hand-drill, all these items have been designed for us to easily manipulate.  Ideally if we want robots to operate in such an environment and utilize our tools, the robot would have to be built in a way that would allow it to accomplish such a feat in an efficient manner.  Consequently the most viable robot that can satisfy these stipulations are humanoids.&lt;/p&gt;&#xA;" OwnerUserId="4210" LastEditorUserId="4210" LastEditDate="2015-01-04T06:28:04.770" LastActivityDate="2015-01-04T06:28:04.770" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5297" PostTypeId="2" ParentId="5283" CreationDate="2015-01-04T17:37:55.153" Score="0" Body="&lt;p&gt;I am not sure if there are monocular odometry datasets there, (I think it is mostly for standard 2D laser based SLAM), but you should check out &lt;a href=&quot;http://radish.sourceforge.net/&quot; rel=&quot;nofollow&quot;&gt;radish&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-01-04T17:37:55.153" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5299" PostTypeId="2" ParentId="5283" CreationDate="2015-01-05T14:31:32.253" Score="2" Body="&lt;p&gt;I found a monocular dataset captured from a Micro Aerial Vehicle (MAV), and it has been been made available here:&#xA;&lt;a href=&quot;http://projects.asl.ethz.ch/sfly/org/doku.php?id=mav%20datasets&quot; rel=&quot;nofollow&quot;&gt;http://projects.asl.ethz.ch/sfly/org/doku.php?id=mav%20datasets&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case the url stops worksing in the future, I am adding the name of the publication that came along with this dataset:&#xA;&quot;A Benchmarking Tool for MAV Visual Pose Estimation&quot;&#xA;Int. Conf. Control, Automation, Robotics and Vision&#xA;Singapore, 7-10th December 2010&lt;/p&gt;&#xA;" OwnerUserId="7807" LastActivityDate="2015-01-05T14:31:32.253" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5300" PostTypeId="1" AcceptedAnswerId="5309" CreationDate="2015-01-05T15:10:16.597" Score="0" ViewCount="104" Body="&lt;p&gt;Power Block Designing noob here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a beaglebone 2x XbeePro(s) and another 500mAh device connected to the board i am building a PCB Around.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need some advice on weather to use Linear Voltage Regulation vs Switching mode regulation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Secondly if i am using linear voltage regulation setup do I need multiple regulators for the different devices? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My plan is to use A 2S 1000mAh Battery -&gt; Fuse -&gt; 2x 1.5A LM1084's in parallel output feed to the beaglebone and a LM3940 for both the XBees. Or its better to have each XBee on its on LM3940 drawing power from a seperate LM1084?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Linear Regulators tend to get hot on full load, hows the performance of Switching mode regulators ?&lt;/p&gt;&#xA;" OwnerUserId="7049" LastEditorUserId="7049" LastEditDate="2015-01-05T15:22:53.857" LastActivityDate="2015-01-06T13:52:26.997" Title="Linear or Switching Power Supply for a Embedded Project" Tags="&lt;power&gt;&lt;battery&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5302" PostTypeId="1" CreationDate="2015-01-05T22:27:22.787" Score="2" ViewCount="1514" Body="&lt;p&gt;I've seen lots of examples on how to communicate from Arduino to the computer, but the few that talked about computer to Arduino communications were very hard to understand.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is: &lt;em&gt;What code can I use to control my arduino Uno with my keyboard&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;if it helps, I'm trying to set up a WASD steering behavior.&lt;/p&gt;&#xA;" OwnerUserId="7672" LastEditorUserId="478" LastEditDate="2015-01-07T16:22:55.407" LastActivityDate="2015-01-27T15:40:21.790" Title="Code control your arduino with keyboard" Tags="&lt;arduino&gt;&lt;programming-languages&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5303" PostTypeId="2" ParentId="5302" CreationDate="2015-01-05T23:11:34.210" Score="2" Body="&lt;p&gt;&lt;a href=&quot;http://playground.arduino.cc/Main/PS2Keyboard&quot; rel=&quot;nofollow&quot;&gt;http://playground.arduino.cc/Main/PS2Keyboard&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The extended version &lt;a href=&quot;http://playground.arduino.cc/Main/PS2KeyboardExt2&quot; rel=&quot;nofollow&quot;&gt;http://playground.arduino.cc/Main/PS2KeyboardExt2&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This example will show you how to read data from keyboard.The library will let you process keys in real time.From there simple if statement can be used to get the desired effect.I hope that the links will answer any other questions you have.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope I have helped but,these question will be better answered in the arduino section vs the robotics section.Comment for any clarification needed.&lt;/p&gt;&#xA;" OwnerUserId="7552" LastActivityDate="2015-01-05T23:11:34.210" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="5305" PostTypeId="2" ParentId="5255" CreationDate="2015-01-06T04:40:00.670" Score="1" Body="&lt;p&gt;Macros(_MAV_RETURN_??) for uin8_t, int8_t and char are defined at &lt;a href=&quot;https://github.com/diydrones/ardupilot/blob/master/libraries/GCS_MAVLink/include/mavlink/v1.0/protocol.h#L236&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/diydrones/ardupilot/blob/master/libraries/GCS_MAVLink/include/mavlink/v1.0/protocol.h#L236&lt;/a&gt; onwoards. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However for datatype with more that 8 bits, they have written inline function _MAV_RETURN_## using 'Token Pasting Operator' which handles rest 16bit, 32bit and 64bit datatypes handled by mavlink including float. This function is written at &lt;a href=&quot;https://github.com/diydrones/ardupilot/blob/master/libraries/GCS_MAVLink/include/mavlink/v1.0/protocol.h#L242&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/diydrones/ardupilot/blob/master/libraries/GCS_MAVLink/include/mavlink/v1.0/protocol.h#L242&lt;/a&gt; onwards&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You an read more about Token Pasting Operator (##) in following links&#xA;&lt;a href=&quot;https://stackoverflow.com/questions/216875/in-macros&quot;&gt;https://stackoverflow.com/questions/216875/in-macros&lt;/a&gt;&#xA;&lt;a href=&quot;https://gcc.gnu.org/onlinedocs/cpp/Concatenation.html#Concatenation&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://gcc.gnu.org/onlinedocs/cpp/Concatenation.html#Concatenation&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2118" LastEditorUserId="-1" LastEditDate="2017-05-23T12:37:11.430" LastActivityDate="2015-01-06T04:40:00.670" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="5308" PostTypeId="2" ParentId="5267" CreationDate="2015-01-06T12:18:23.403" Score="2" Body="&lt;p&gt;This is not directly answering all your questions, but if you are starting out with mechanical stuff I highly recommend reading pretty much all this guy's web site. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.etotheipiplusone.net/&quot; rel=&quot;nofollow&quot;&gt;http://www.etotheipiplusone.net/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In particular, take a look at his battle robot stuff. There is some gold in there!&#xA;If you want a more condensed version, he wrote another great article on building stuff fast and on the cheap. It's on Instructables, but don't hold that against it...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.instructables.com/id/How-to-Build-your-Everything-Really-Really-Fast/&quot; rel=&quot;nofollow&quot;&gt;http://www.instructables.com/id/How-to-Build-your-Everything-Really-Really-Fast/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, there is some more great stuff in here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://web.mit.edu/2.75/fundamentals/FUNdaMENTALS.html&quot; rel=&quot;nofollow&quot;&gt;http://web.mit.edu/2.75/fundamentals/FUNdaMENTALS.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2178" LastActivityDate="2015-01-06T12:18:23.403" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="5309" PostTypeId="2" ParentId="5300" CreationDate="2015-01-06T13:52:26.997" Score="3" Body="&lt;p&gt;A linear regulator has a major drawback: it dissipates the power it doesn't deliver. Using the well-known 7805, the output voltage is 5V, your input shall be at least 7V to allow a good regulation (2V dropout voltage), if your load requires 1A, your 7805 dissipates 1A * 2V = 2W. This makes your Linear regulator hot. The best efficiency you may expect from a 7805 is 70% (and, to the best of my knowledge, a linear regulator doesn't exceed 80%).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Switching regulators are non linear. For a switching regulator, 80% is a poor efficiency (but sometimes acceptable for very cheap designs), &lt;a href=&quot;http://en.wikipedia.org/wiki/Voltage_regulator&quot; rel=&quot;nofollow&quot;&gt;power efficiency is usually around 90%&lt;/a&gt; under full charge, and may come up to 99% when large amounts of energy are involved, with an expensive design. For little loads, efficiency may drop to 60%, due to the power consumption of the regulator itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, in my opinion, you should use switching regulator, for a better power efficiency and lower heat dissipation. If you need a single voltage, try to use only one regulator: it's cheaper, and avoid the little load situation. If you want to design a low power application, you'll probably have to choose a more sophisticated design, but it's probably not the case, as you use a beaglebone, which prevents you to manage each processor power supply independently.&lt;/p&gt;&#xA;" OwnerUserId="7634" LastActivityDate="2015-01-06T13:52:26.997" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="5310" PostTypeId="1" AcceptedAnswerId="6505" CreationDate="2015-01-06T19:09:02.560" Score="4" ViewCount="1186" Body="&lt;p&gt;I'm working on a project requiring HD (Stereo) Video Processing. Most of High Resolution (5MP+) Sensors use MIPI-CSI interface. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I managed to get a board with an Exynos5 SoC. The SoC Itself has 2 MIPI-CSI2 interfaces, the problem is that the pins to those interfaces are not exposed and It's (almost) impossible to reach them. So I decided to use the USB3.0 Buses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is when I get to Significant bandwidth (~5.36 Gibibits/s per sensor), I don't think USB3.0 will work out. &lt;code&gt;Bandwidth = Colordepth*ColorChannels*PixelCount*FPS&lt;/code&gt; but this could be solved with a Compressed stream (via a coprocessor)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was thinking that Cypress' CYUSB306X chip was a good candidate for the job, but one of the problems is that I can't do BGA Soldering by hand nor have been able to find a BGA Soldering Service in Switzerland.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any Ideas on other interfaces I could implement or other coprocessors with MIPI-CSI2 Interface?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just a final remark, space and weight are important as this is supposed to be mounted on a drone.&lt;/p&gt;&#xA;" OwnerUserId="2281" LastEditorUserId="478" LastEditDate="2015-01-08T18:05:16.207" LastActivityDate="2017-04-19T08:35:20.240" Title="Interfacing high-resolution image sensors with ARM Board" Tags="&lt;cameras&gt;&lt;usb&gt;&lt;stereo-vision&gt;" AnswerCount="2" CommentCount="11" FavoriteCount="1" ClosedDate="2017-04-19T09:57:16.460" ContentLicense="CC BY-SA 3.0" />
  <row Id="6310" PostTypeId="1" AcceptedAnswerId="6318" CreationDate="2015-01-07T09:22:25.490" Score="1" ViewCount="50" Body="&lt;p&gt;I am planning to use 2.4Ghz XBeePro 63mW Devices for a project that requires a coverage area of around 1.5-2km. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When i go to select an antenna there are various options like Circular,Virtical, Horizontal polarized etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which antenna would give a coverage for a field? I cant have it directional (one point to another point). By devices will be moving around on a field. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What type of polarization is recommended for this kind of a setup? My Base XBee will be on a elevation of around 40m from the ground so i have a clear line of sight for all the moving modules. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are going to be around 20-30moving modules streaming data at around 2-5readings per second. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A +12dBi Antenna should suffice the application? And what about polarization? &lt;/p&gt;&#xA;" OwnerUserId="7049" LastActivityDate="2015-01-08T20:33:22.043" Title="What type of Antennas to use for XBeePRo 2.4Ghz" Tags="&lt;battery&gt;&lt;wireless&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6311" PostTypeId="2" ParentId="5267" CreationDate="2015-01-07T16:55:56.027" Score="2" Body="&lt;p&gt;I doubt you will find a solution in the price range you are looking for. But I will answer your questions as best I can.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) You need match the gear to the bore, ideally within a thousandths of an inch. A .12in in shaft simply will not work with even a .125. Especially, at any reasonable speed. If you have matching shaft and bore, a setscrew could be used or a notched shaft with a setscrew.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) At 47 Nm those gears would be as soft as butter. Additionally, your shaft would twist off instantly. For reference, look at these gears &lt;a href=&quot;http://qtcgears.com/products/gears/spur_alloy_steel_kmsg.php&quot; rel=&quot;nofollow&quot;&gt;http://qtcgears.com/products/gears/spur_alloy_steel_kmsg.php&lt;/a&gt;. These are steel and by the ratings, 2 inch gear with 1/2 inch shaft would be the minimum.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3) Steel or an extremely large plastic gear. Remember, larger gear -&gt; larger lever arm -&gt; less force.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;4) Spur gears are fairly efficient (best guess, 75% to 90%). However, if you have a bunch of reductions these compound quickly. Your guess of 50% is probably fine. Also, remember that high gear ratios greatly reduce speed and motors slow down when they are loaded. The combination may be too slow for the application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One thing you have not considered is acceleration of that mass. If you just have to hold the weight, that's one thing. If you have to move it, you have inertia to worry about. If you know the acceleration you could calculate this but I would use a minimum of twice the mass for calculations. Partly for the inertia and partly for an additional safety factor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lastly, many people would use a linear actuator in this case. You could use the actuator to lift the bar and create rotation if you desire the &quot;arm&quot; design. Google &quot;engine hoist&quot; to see what I mean.&lt;/p&gt;&#xA;" OwnerUserId="8834" LastEditorUserId="8834" LastEditDate="2015-01-07T17:18:15.640" LastActivityDate="2015-01-07T17:18:15.640" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6312" PostTypeId="2" ParentId="4687" CreationDate="2015-01-07T18:14:50.090" Score="2" Body="&lt;p&gt;I have developed a framework that compiles both as an AVR program to run directly on Multiwii board and also having the option to test the algorithms as a desktop 3D app. The 3d app is based on the irrlicht game engine. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It can be found here: &lt;a href=&quot;https://github.com/mkschreder/bettercopter&quot; rel=&quot;nofollow&quot;&gt;https://github.com/mkschreder/bettercopter&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8835" LastActivityDate="2015-01-07T18:14:50.090" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6313" PostTypeId="1" AcceptedAnswerId="6316" CreationDate="2015-01-07T22:36:33.790" Score="7" ViewCount="5205" Body="&lt;p&gt;I'm building a quadcopter for my final year project. I have a set of equations describing attitude and altitude but they involve $I_{xx}$, $I_{yy}$ and $I_{zz}$. None of the papers I have read describe how these are calculated. they simply choose it before their simulation. Can anyone help?&lt;/p&gt;&#xA;" OwnerUserId="8838" LastEditorUserId="350" LastEditDate="2015-01-16T18:12:56.667" LastActivityDate="2015-01-16T18:12:56.667" Title="How do you calculate the moment of inertia of a Quadcopter?" Tags="&lt;quadcopter&gt;&lt;kinematics&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6314" PostTypeId="1" AcceptedAnswerId="6330" CreationDate="2015-01-08T15:02:47.410" Score="1" ViewCount="2636" Body="&lt;p&gt;I'm trying to get an arduino to talk with a beaglebone black. &#xA;I have followed &lt;a href=&quot;http://hipstercircuits.com/enable-serialuarttty-on-beaglebone-black/&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt; tutorial for getting ttyO4 open on the BBB and used the following command on to set the serial line correctly: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;wiring is set up according to &lt;a href=&quot;http://www.instructables.com/id/How-to-make-a-BeagleBone-and-an-Arduino-communicat/&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt; tutorial. &#xA;    stty -F /dev/ttyO4 cs8 9600 ignbrk -brkint -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke noflsh -ixon -crtscts&lt;/p&gt;&#xA;&#xA;&lt;p&gt;next data is sent using the following method: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;echo s123 &amp;gt; /dev/ttyO4&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;the arduino uses the followingvoid loop(){&#xA; code to check for serial communication:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;SPI.h&amp;gt;&#xA;&#xA;void setup(){ //////////////SETUP///////////////////////&#xA;  Serial.begin(9600);&#xA;}&#xA;void loop(){&#xA;      if(Serial.available()&amp;gt;=4){&#xA;         digitalWrite(12, HIGH);&#xA;         delay(1000);               // wait for a second&#xA;         digitalWrite(12, LOW);   // turn the LED on (HIGH is the voltage level)&#xA;         delay(1000);               // wait for a second&#xA;         digitalWrite(12, HIGH);&#xA;         byte b1,b2,b3,b4; &#xA;         b1=Serial.read();&#xA;         }&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;However it seems no message is received. It does not give any error either. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As an alternative I have also tried a variant of the code suggested in the wiring tutorial resulting in the following code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;import sys&#xA;from bbio import *&#xA;&#xA;&#xA;Serial2.begin(9600)&#xA;for arg in sys.argv:&#xA;    print arg&#xA;    Serial2.write(arg)&#xA;    delay(5)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;called with &lt;code&gt;pyton test s123&lt;/code&gt; this printed s123 but the arduino remained silent. &#xA;Edit I have now also tried to exactly follow the wiring tutorial so that gave me the following sketch: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;char inData[20]; // Allocate some space for the string&#xA;char inChar=-1; // Where to store the character read&#xA;byte index = 0; // Index into array; where to store the character&#xA;&#xA;void setup() {&#xA;  Serial.begin(9600);&#xA;  pinMode(13, OUTPUT);   // digital sensor is on digital pin 2&#xA;  digitalWrite(13, HIGH);&#xA;  delay(2000);&#xA;  digitalWrite(13, LOW);&#xA;  delay(500);&#xA;}&#xA;&#xA;&#xA;void loop()&#xA;{&#xA;  Serial.write(&quot;A&quot;);&#xA;  digitalWrite(13, HIGH);&#xA;  delay(100);&#xA;  digitalWrite(13, LOW);&#xA;  delay(100);&#xA;  if (Comp(&quot;A&quot;)==0) {&#xA;      digitalWrite(13, HIGH);&#xA;      delay(1000);&#xA;      digitalWrite(13, LOW);&#xA;      delay(500);&#xA;  }&#xA;}&#xA;&#xA;char Comp(char* This) {&#xA;    while (Serial.available() &amp;gt; 0) // Don't read unless&#xA;                                   // there you know there is data&#xA;    {&#xA;        if(index &amp;lt; 19) // One less than the size of the array&#xA;        {&#xA;            inChar = Serial.read(); // Read a character&#xA;            inData[index] = inChar; // Store it&#xA;            index++; // Increment where to write next&#xA;            inData[index] = '\0'; // Null terminate the string&#xA;        }&#xA;    }&#xA;&#xA;    if (strcmp(inData,This)  == 0) {&#xA;        for (int i=0;i&amp;lt;19;i++) {&#xA;            inData[i]=0;&#xA;        }&#xA;        index=0;&#xA;        return(0);&#xA;    }&#xA;    else {&#xA;        return(1);&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and on the BBB we turn on the echo script with&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/PyBBIO/examples$ sudo python serial_echo.py&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The effect remains that there is no error but also no data delivery. &lt;/p&gt;&#xA;" OwnerUserId="7226" LastEditorUserId="7226" LastEditDate="2015-01-09T08:49:46.197" LastActivityDate="2015-01-10T20:56:36.813" Title="Communicating between a beaglebone black and an arduino using ttyO4" Tags="&lt;arduino&gt;&lt;control&gt;&lt;serial&gt;&lt;communication&gt;&lt;beagle-bone&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6315" PostTypeId="1" AcceptedAnswerId="6369" CreationDate="2015-01-08T16:31:38.217" Score="4" ViewCount="298" Body="&lt;p&gt;I am building an estimator that solves for the camera pose relative to a reference frame which contains a known set of features and edges. Currently, the system works with an unscented kalman filter with four known points (red leds) in the reference frame. I am now hoping to improve robustness by adding edges to the model as well as robust features. I would like to add additional points that are uncovered by some opencv feature finding function (fast,cornerHarris,...).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So far I found the paper &quot;Fusing Points and Lines for High Performance Tracking&quot; and &quot;Robust Extended Kalman Filtering For Camera Pose Tracking Using 2D to 3D Lines Correspondences&quot; which seem to detail how to fuse edge and feature matching for pose estimation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a strategy to populate the known set of edges and features when it is impractical to measure them with a ruler/tape measure? My first thought is to start with a small known set of features, my red leds, then run some slam algorithm and keep all features/edges that have some minimum certainty.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks a bunch!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have misunderstood the RANSAC algorithm. This is not appropriate for my application. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For those interested, I am hoping to use a similar approach to the one presented in the following paper.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Youngrock Yoon, Akio Kosaka, Jae Byung Park and Avinash C. Kak. &quot;A New Approach to the Use of Edge Extremities for Model-based Object Tracking.&quot; International Conference on Robotics and Automation, 2005.&lt;/p&gt;&#xA;" OwnerUserId="8842" LastEditorUserId="8842" LastEditDate="2015-01-13T23:10:26.067" LastActivityDate="2015-07-13T03:08:58.340" Title="Pose estimation, how to populate set of known edges and points?" Tags="&lt;kalman-filter&gt;&lt;computer-vision&gt;&lt;pose&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6316" PostTypeId="2" ParentId="6313" CreationDate="2015-01-08T16:37:50.713" Score="5" Body="&lt;p&gt;You can calculate the moment of inertia of a pendulum by measuring the period of oscillation for small amplitudes. Suspend the quad by one arm and give it a little push and time the period. It does work better for larger aircraft, measuring the period of a quad-pendulum will be tricky. Maybe get a video of the aircraft with a high framerate so you can get a more accurate measurement than just a stopwatch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.boundless.com/physics/textbooks/boundless-physics-textbook/waves-and-vibrations-15/periodic-motion-123/the-physical-pendulum-432-1488/&quot; rel=&quot;nofollow&quot;&gt;https://www.boundless.com/physics/textbooks/boundless-physics-textbook/waves-and-vibrations-15/periodic-motion-123/the-physical-pendulum-432-1488/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also having an accurate solidworks model or cad model should have the moments of inertial in some properties list.&lt;/p&gt;&#xA;" OwnerUserId="8842" LastEditorUserId="8842" LastEditDate="2015-01-08T18:47:01.233" LastActivityDate="2015-01-08T18:47:01.233" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="6318" PostTypeId="2" ParentId="6310" CreationDate="2015-01-08T20:20:53.593" Score="0" Body="&lt;p&gt;Circular polarized is intended to reduce unwanted reflections. The only concern is you use the same polarization on everything.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;On quads, cloverleaf patterns were very common, 3 leaf on the transmitters, 4 leaf on the receiver, but there was little consequence using the opposite, or both the same. Just a tad bit of performance enhancement. 5 leaf (aka mad mushroom) was the best receiver, noticeably.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was my experience around 1.5km, should be good 2km.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/E9Miz.jpg&quot; alt=&quot;mad mushroom&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.readymaderc.com/store/index.php?main_page=product_info&amp;amp;products_id=1535&quot; rel=&quot;nofollow noreferrer&quot;&gt;ReadyMade RC&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BTW that is a 1.5db antenna and was adequate, more gain = more noise. It also is not RP, so you would need an adapter (rp-non rp) of some sort. (rp is reverse pin, it indicates if the sender or receiver are male or female). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are those XBees frequency hopping? Or do they depend on non-point to point for mesh networks?  I'm not familiar with that model nor have I used XBees for swarms. I assume you already looked into all that.&lt;/p&gt;&#xA;" OwnerUserId="274" LastEditorUserId="274" LastEditDate="2015-01-08T20:33:22.043" LastActivityDate="2015-01-08T20:33:22.043" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6319" PostTypeId="2" ParentId="6314" CreationDate="2015-01-09T20:23:39.957" Score="0" Body="&lt;p&gt;The code shown below fixes one problem with the code in the original post: pin 12 was not declared as an output pin.   By default, arduinos start up with all IO pins set as inputs.  Given this, the &lt;code&gt;digitalWrite(12, ...)&lt;/code&gt; calls in OP's &lt;code&gt;loop()&lt;/code&gt; do nothing more than turn off and on the  input pullup setting on pin 12. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In other words, arduino serial reception may be working ok in your setup, but the indication mechanism ‒ blinking an LED or whatever via pin 12 ‒ was not working.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note, in tests I ran, I wired from digital pin 12 on a Funduino mega (clone of an arduino mega) to the base of a transistor that switches power to an LED.  Sending the board a string of &lt;em&gt;k&lt;/em&gt; characters via the arduino-ide serial monitor caused the LED to flash &lt;em&gt;k&lt;/em&gt; times (or &lt;em&gt;k-3&lt;/em&gt; the first time, due to the &lt;code&gt;Serial.available()&amp;gt;=4&lt;/code&gt; test).&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;SPI.h&amp;gt;&#xA;&#xA;void setup(){   /////////SETUP///////////////&#xA;  Serial.begin(9600);&#xA;  pinMode(12, OUTPUT);&#xA;}&#xA;void loop(){&#xA;  if(Serial.available()&amp;gt;=4){&#xA;    digitalWrite(12, HIGH);&#xA;    delay(500);        // wait halfsecond&#xA;    digitalWrite(12, LOW); // turn the LED on (HIGH is the voltage level)&#xA;    delay(500);        // wait halfsecond&#xA;    digitalWrite(12, HIGH);&#xA;    byte b1,b2,b3,b4; &#xA;    b1=Serial.read();&#xA;  }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="478" LastActivityDate="2015-01-09T20:23:39.957" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6322" PostTypeId="1" AcceptedAnswerId="6365" CreationDate="2015-01-10T08:32:31.583" Score="0" ViewCount="207" Body="&lt;p&gt;After working for a long time on my Arduino Due, I needed a better and more powerful prototyping platform for my future projects. For which, I have placed an order for NVIDIA Jetson Tegra K1 board which runs on linux and supports CUDA based development. Being a newbie to Linux, I have no idea where to start from and what to do for getting started with code execution on the Jetson board. Please suggest the initial steps required and from where can I get familiar to Linux environment...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you&lt;/p&gt;&#xA;" OwnerUserId="8850" LastActivityDate="2015-01-13T14:48:22.887" Title="Getting started with Jetson Tegra K1" Tags="&lt;linux&gt;" AnswerCount="1" CommentCount="5" ClosedDate="2015-01-16T17:33:37.480" ContentLicense="CC BY-SA 3.0" />
  <row Id="6323" PostTypeId="1" CreationDate="2015-01-10T11:36:28.660" Score="2" ViewCount="388" Body="&lt;p&gt;I'm currently thinking of extending the battery life of my quad by powering each motor and ESC individually. I  will be using 1 dedicated battery for each motor, and 1 dedicated battery for the flight controller itself, bringing the total to 5 batteries for the entire quad.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My thinking is that by powering each motor with a dedicated battery, given a power draw/consumption, the flight-time of my quad will be increased by 4x as each motor will have 4x the capacity to draw from. Putting the problem of weight aside, would this be a feasible idea?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, i am currently using just 1 battery to power all motors, and as such, i only have to plug in the single battery and i can calibrate my ESCs. How would i calibrate my ESCs if i am using dedicated batteries for my APM 2.6 and each motors?Would i be able to get away with powering my APM using the BEC on my ESCs?&lt;/p&gt;&#xA;" OwnerUserId="7444" LastActivityDate="2018-08-15T15:05:18.970" Title="Powering a multirotor with dedicated batteries for each motor" Tags="&lt;quadcopter&gt;&lt;power&gt;&lt;battery&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6325" PostTypeId="1" CreationDate="2015-01-10T13:45:52.120" Score="11" ViewCount="3274" Body="&lt;p&gt;I am confused by what precisely the term &quot;Indirect Kalman Filter&quot; or &quot;Error-State Kalman Filter&quot; means.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The most plausible definition I found is in Maybeck's book [1]:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;As the name indicates, in the total state space (direct) formulation, total states&#xA;  such as vehicle position and velocity are among the state variables in the filter,&#xA;  and the measurements are INS accelerometer outputs and external source&#xA;  signals. In the error state space (indirect) formulation, the errors in the INS-&#xA;  indicated position and velocity are among the estimated variables, and each&#xA;  measurement presented to the filter is the difference between INS and external&#xA;  source data.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;20 years later Roumeliotis et al. in [2] write:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The cumbersome modeling of the specific vehicle and its interaction with a dynamic environment is avoided by selecting gyro modeling instead. The gyro signal appears in the system (instead of the measurement) equations and &lt;strong&gt;thus the formulation of the problem requires an Indirect&lt;/strong&gt; (error-state) Kalman filter approach.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I cannot understand the bold part, since Lefferts et al. in [3] write much earlier:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;For autonomous spacecraft the use of inertial reference units as a model&#xA;  replacement permits the circumvention of these problems.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;And then proceed to show different variants of EKFs using gyro modeling that are clearly direct Kalman Filters according to Maybeck's definition: The state only consists of the attitude quaternion and gyro bias, not error states. In fact, there is no seperate INS whose error to estimate with an error-state Kalman filter. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my questions are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Is there a different, maybe newer definition of indirect (error-state) Kalman Filters I am not aware of?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;How are gyro modeling as opposed to using a proper dynamic model on the one hand and the decision whether to use a direct or indirect Kalman filter on the other hand related? I was under the impression that both are independent decisions.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;[1] Maybeck, Peter S. Stochastic models, estimation, and control. Vol. 1. Academic press, 1979.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[2] Roumeliotis, Stergios I., Gaurav S. Sukhatme, and George A. Bekey. &quot;Circumventing dynamic modeling: Evaluation of the error-state kalman filter applied to mobile robot localization.&quot; Robotics and Automation, 1999. Proceedings. 1999 IEEE International Conference on. Vol. 2. IEEE, 1999.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[3] Lefferts, Ern J., F. Landis Markley, and Malcolm D. Shuster. &quot;Kalman filtering for spacecraft attitude estimation.&quot; Journal of Guidance, Control, and Dynamics 5.5 (1982): 417-429.&lt;/p&gt;&#xA;" OwnerUserId="4531" LastActivityDate="2018-10-30T19:42:02.317" Title="Ambiguous definition of Error-State (Indirect) Kalman Filter" Tags="&lt;localization&gt;&lt;kalman-filter&gt;&lt;navigation&gt;&lt;errors&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6327" PostTypeId="1" AcceptedAnswerId="6337" CreationDate="2015-01-10T15:09:06.450" Score="0" ViewCount="303" Body="&lt;p&gt;I am trying to build a &lt;em&gt;hexapod&lt;/em&gt; with camera interfacing using a &lt;strong&gt;beaglebone black&lt;/strong&gt; for college project. I'm not sure what &lt;strong&gt;power supply&lt;/strong&gt; to give so it can power up to &lt;em&gt;bot,&lt;/em&gt; having in mind that it should be &lt;strong&gt;portable (mobile)&lt;/strong&gt; and it should power about &lt;em&gt;18 servo motors&lt;/em&gt; along with the &lt;em&gt;camera&lt;/em&gt;, &lt;em&gt;wifi&lt;/em&gt; and the &lt;em&gt;processor&lt;/em&gt;. Your help is needed very badly as i'm nearing the &lt;em&gt;deadline&lt;/em&gt; for the project.&lt;/p&gt;&#xA;" OwnerUserId="8855" LastEditorUserId="110" LastEditDate="2015-01-12T14:24:32.957" LastActivityDate="2015-01-12T14:24:32.957" Title="beaglebone black power supply for hexapod" Tags="&lt;power&gt;&lt;otherservos&gt;&lt;beagle-bone&gt;&lt;hexapod&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2015-01-21T12:16:13.083" ContentLicense="CC BY-SA 3.0" />
  <row Id="6328" PostTypeId="1" AcceptedAnswerId="6338" CreationDate="2015-01-10T15:15:58.930" Score="0" ViewCount="1312" Body="&lt;p&gt;I'm trying to build a hexapod with beaglebone in the linux environment (Im thinking of using Ubuntu). What is the &lt;strong&gt;best language&lt;/strong&gt; to use for &lt;strong&gt;coding purpose&lt;/strong&gt; to make &lt;em&gt;robot controls, camera and wifi integration&lt;/em&gt; etc.&lt;/p&gt;&#xA;" OwnerUserId="8855" LastActivityDate="2015-01-12T14:32:44.997" Title="language to code Beaglebone" Tags="&lt;control&gt;&lt;programming-languages&gt;&lt;beagle-bone&gt;&lt;linux&gt;" AnswerCount="4" CommentCount="3" ClosedDate="2015-01-21T12:17:26.097" ContentLicense="CC BY-SA 3.0" />
  <row Id="6329" PostTypeId="2" ParentId="6328" CreationDate="2015-01-10T19:51:55.293" Score="1" Body="&lt;p&gt;You're going to want to do this using ros. This will allow you to use both python and cpp. I would reccomend doing all control and estimation in cpp and and camera stuff in python. Ros also works on networks of computers so you will be able to communicate with other linux machines running ros on the same network.&lt;/p&gt;&#xA;" OwnerUserId="8842" LastEditorUserId="8842" LastEditDate="2015-01-11T16:59:27.713" LastActivityDate="2015-01-11T16:59:27.713" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6330" PostTypeId="2" ParentId="6314" CreationDate="2015-01-10T20:56:36.813" Score="1" Body="&lt;p&gt;In this answer, I will outline some techniques for diagnosing &lt;a href=&quot;http://en.wikipedia.org/wiki/RS-232&quot; rel=&quot;nofollow&quot;&gt;RS232&lt;/a&gt;-style serial communication problems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a two-way serial communication link between two devices to work, at the most basic level we need a connection from  TxD on device 1 to RxD on device 2 and a connection from  TxD on device 2 to RxD on device 1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Voltage or current level conversions may be needed; for example, if device 1 uses -12 V for mark and +12 V for space while device 2 uses +3.3 V for mark and 0 V for space, voltage inversion/scaling/shifting is an obvious requirement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the OP's case, 3.3 V at the Beaglebone needs to be translated to or from 5.0 V at the Arduino.  Note that Arduinos with an 8 MHz crystal can operate at 3.3 V and may have a 3.3 V regulator rather than a 5 V regulator.   Use of 3.3 V on the Arduino would allow dropping out the voltage converter board shown in the OP, ie would remove one possible problem source.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have a 3.3 V power supply, you can attach that to Arduino Vcc, but don't attach more than one power source at once.  Ie, if you attach 3.3 V to Vcc, don't plug in a USB cord, and don't hook +RAW or the power jack to anything.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The RS232 standard provides several control lines [eg request to send (RTS), clear to send (CTS), data terminal ready (DTR), and data set ready (DSR)] which could be discussed in a comprehensive treatise on diagnosing RS232 problems but won't be discussed at any length here.  A &lt;a href=&quot;http://beaglebone.cameon.net/home/serial-ports-uart&quot; rel=&quot;nofollow&quot;&gt;Beaglebone Serial ports / UART&lt;/a&gt; webpage on beaglebone.cameon.net shows pin numbers for control lines, eg:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;           RX      TX     CTS     RTS     Device&#xA;UART4    P9_11   P9_13   P8_35   P8_33   /dev/ttyO4 &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It may be necessary to jumper CTS high or low.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To recap:  We need to connect TxD, RxD on device 1 to RxD, TxD on device 2.  To make that connection, we need to identify the TxD and RxD pins on each device.  Beaglebone and Arduino devices may have several sets of TxD, RxD pairs.  One of the best, quickest, and most-certain ways to check if you are using the correct pair (eg, TX0,RX0 instead of TX1,RX1 on an Arduino Mega, or UART4 instead of UART3 or UART5 on a Beaglebone) and have properly enabled it is to run a program that continuously sends a pattern of data to TxD, and verify with an oscilloscope, logic analyzer, logic probe, or LED that the expected data pattern appears at the expected pin.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are using a scope, the program should send a simple and steady stream of data at a reasonably high datarate, like 9600 bps.  Eg, run a program like &lt;code&gt;while 1: send 'U'&lt;/code&gt; and check that your TxD pin is toggling at the right rate and other pins aren't.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are using an LED, make it not too bright (eg, 2KΩ-20KΩ dropping resistor) so you can look closely at the light; make it red or amber so it will light up ok on 3.3 V; use a low datarate (300 bps) so you can see flickering bits; and use a repetition pattern obvious to the eye; eg:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;while 1:&#xA;   send '@'*60    # Ie, send a string of 60 @ signs&#xA;   wait 1 sec&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;On the Beaglebone, if you don't find any output on Tx4, revise your test program to output on Tx0 (which I think is automatically enabled and available in userspace) and use that to verify that your test program and probe are working.  If it works ok on Tx0 but not on Tx4, look for additional web information about enabling  Beaglebone serial ports and making them available to the user.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After you have verified that output works on some TxD pins with no voltage shifter attached, attach the shifter and repeat the test.  If successful, also test the outputs of the voltage shifter.  Then attach RxD of the other device to shifter output and verify that the desired data pattern is arriving at that RxD pin.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are using a scope, you'll have seen whether voltages are correct (ie 0 and +3.3 or +5.0) at each stage of each connection.  If you are using an LED probe, you may be able to tell if voltage at one point is more than at another; but you might also try running data patterns with more zeroes (eg long strings of &lt;code&gt;\0&lt;/code&gt;), or more ones (long strings of &lt;code&gt;0x7F&lt;/code&gt; or &lt;code&gt;0xFF&lt;/code&gt; characters) and using a voltmeter to estimate voltages.&lt;/p&gt;&#xA;" OwnerUserId="478" LastActivityDate="2015-01-10T20:56:36.813" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6331" PostTypeId="1" AcceptedAnswerId="6332" CreationDate="2015-01-11T15:25:34.317" Score="1" ViewCount="460" Body="&lt;p&gt;How would one go about passing power through a motor?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's say we have some basic robot which has a motor that slowly spins a limb, on each end of that limb, there is a motor which again spins a limb. Because the first motor is always going to be spinning, any wires would twist and eventually break, so a wired approach wouldn't work. The same goes for the subsequent motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that dc motors use brushes to get past this, but how is this generally solved in engineering/robotics? This must be a problem that has come up before, and there must be a solution to it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any ideas? :)&lt;/p&gt;&#xA;" OwnerUserId="7767" LastActivityDate="2015-01-16T17:41:54.280" Title="Passing power through a motor" Tags="&lt;motor&gt;&lt;stepper-motor&gt;&lt;power&gt;" AnswerCount="4" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6332" PostTypeId="2" ParentId="6331" CreationDate="2015-01-11T16:42:32.407" Score="6" Body="&lt;p&gt;It is called a slip ring.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/KVWCu.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It works the same as a brushed motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See &lt;a href=&quot;http://www.robotshop.com/en/slip-ring-flange-736.html&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt; for a robotic oriented one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Larger versions handle power, and cost more.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also near field technologies such as those used to wirelessly charge your electric toothbrush, and more recent wireless cell phone chargers, are potential solutions&lt;/p&gt;&#xA;" OwnerUserId="274" LastActivityDate="2015-01-11T16:42:32.407" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6333" PostTypeId="2" ParentId="6325" CreationDate="2015-01-11T19:13:54.883" Score="6" Body="&lt;p&gt;Hi and welcome to the wide, ambiguous, sometimes confusing world of research. But seriously, looking at 20 years of papers will sometimes produce these confusions.&#xA;Let's look at what's going on. In the first reference, what they are saying is:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;An INS/Gyro is nice, but has an error in it. That error changes (drifts) over time. Therefore, the error in the INS is really a part of the state of the system.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The markov assumption used in the Kalman filter assumes that the current estiamte encapsulates all of the state of the system, and all of the &lt;em&gt;previous&lt;/em&gt; states of the system. The update step of the EKF/FK assumes that the sensors measure the state of the system directly, and &lt;em&gt;without bias&lt;/em&gt;. However, an INS &lt;em&gt;has&lt;/em&gt; a bias (the error), and that bias changes. So our &lt;em&gt;measurable&lt;/em&gt; state (the measurement from the INS / Gyro) is &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$z(t)=x^\star(t) + b^\star(t)+n$$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;for bias vector $b^\star$ and noise $n$. Vector $b^\star$, unfortunately, is unknown, time-varying, and not zero-mean. Vector $n$ is assumed to be zero-mean noise (e.g., unbiased). So if we &lt;em&gt;knew&lt;/em&gt; $b^\star(t)$, we could subtract it from $z$ to get an unbiased measurement of the state. This is useful. So an estimate of $b^\star(t)$ is kept as part of the state.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An error-state kalman filter makes a &lt;em&gt;new&lt;/em&gt; state vector,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ &#xA;\begin{bmatrix}&#xA;x(t) \\&#xA;b(t)&#xA;\end{bmatrix}&#xA;=&#xA;\begin{bmatrix}&#xA;x(t)^\star \\&#xA;b(t)^\star&#xA;\end{bmatrix}&#xA;+n&#xA;$$&#xA;where again $x^\star$ is the true state and $b^\star$ is the true bias.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ok, moving on to reference two, they seem to say that the gyro signal (which has measurements of the form $z(t)=x^\star + b(t) + n$ again) is used instead of assuming the gyro is measuring the state directly. That fits with what I know about Prof Roumeliotis' research as well as the definition of error-state KF and ref 1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now ref 3 is worded slightly bad. I wasn't able to acquire a PDF to review quick. What I think it means is they are using the common assumption that a good model of the system dynamics are not available for a &lt;em&gt;prediction&lt;/em&gt; (or propagation) step. Instead, they are assuming that the INS measurements are a decent estimate of the system's state, and then using &lt;em&gt;other&lt;/em&gt; sensors to update the estimate of the state. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is akin to &lt;a href=&quot;https://robotics.stackexchange.com/a/134/163&quot;&gt;using odometry instead of modelling how control inputs produce a change of state in a wheeled robot&lt;/a&gt;. Yes, the forward-propogated estimate will have the bias of the INS in it, but the measurements should correct it. In fact, the introduction to that paper states the same thing we've summarized here, that bias in gyro should be a part of the system to be estimated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is sort of a high-level summary, which is the best I can do at this point. If there are specific concerns, I can edit as needed. &lt;/p&gt;&#xA;" OwnerUserId="163" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2015-01-13T16:28:03.903" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6334" PostTypeId="1" AcceptedAnswerId="6335" CreationDate="2015-01-12T02:54:50.400" Score="16" ViewCount="8980" Body="&lt;p&gt;Reading some papers about visual odometry, many use inverse depth. Is it only the mathematical inverse of the depth (meaning 1/d) or does it represent something else. And what are the advantages of using it?&lt;/p&gt;&#xA;" OwnerUserId="4429" LastEditorUserId="350" LastEditDate="2015-01-16T17:50:23.603" LastActivityDate="2020-03-24T13:08:49.097" Title="What is inverse depth (in odometry) and why would I use it?" Tags="&lt;slam&gt;&lt;computer-vision&gt;&lt;odometry&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="6335" PostTypeId="2" ParentId="6334" CreationDate="2015-01-12T03:38:28.440" Score="14" Body="&lt;p&gt;Features like the sun and clouds and other things that are very far off would have a distance estimate of inf. This can cause a lot of problems. To get around it, the inverse of the distance is estimated. All of the infs become zeros which tend to cause fewer problems.&lt;/p&gt;&#xA;" OwnerUserId="8842" LastActivityDate="2015-01-12T03:38:28.440" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6336" PostTypeId="2" ParentId="6328" CreationDate="2015-01-12T04:39:04.477" Score="1" Body="&lt;p&gt;Ubuntu is fine if you are familiar with it, if you start having jitter issues you can add the real time mods to the kernel but that is almost certainly not a problem you will face. Adafruit has some decent python libraries for the beagle bone black at &lt;a href=&quot;https://github.com/adafruit/adafruit-beaglebone-io-python&quot; rel=&quot;nofollow&quot;&gt;https://github.com/adafruit/adafruit-beaglebone-io-python&lt;/a&gt;. Genrally it is best to prototype in the easiest language you can get away with as it is less frustrating and faster, but that is somewhat personal option. &lt;/p&gt;&#xA;" OwnerUserId="8858" LastActivityDate="2015-01-12T04:39:04.477" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6337" PostTypeId="2" ParentId="6327" CreationDate="2015-01-12T04:48:55.633" Score="2" Body="&lt;p&gt;18 servos is a lot of power no matter their size but you are going to need to be more specific with what kind of servos you are talking about. That said, this &lt;a href=&quot;https://robotics.stackexchange.com/questions/416/what-is-the-best-way-to-power-a-large-number-27-servos-at-5-v?rq=1&quot;&gt;What is the best way to power a large number (27) servos at 5 V?&lt;/a&gt; is a good answer to your question. &lt;/p&gt;&#xA;" OwnerUserId="8858" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2015-01-12T04:48:55.633" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6338" PostTypeId="2" ParentId="6328" CreationDate="2015-01-12T09:16:17.953" Score="1" Body="&lt;p&gt;As one user has said, &lt;a href=&quot;http://wiki.ros.org/ROS/Installation&quot; rel=&quot;nofollow&quot;&gt;ROS&lt;/a&gt; is a very good framework for robotics platforms that supports python and c++. I highly recommend downloading the VirtualBox image of ROS and giving it a try, it takes about 5 minutes excluding download.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ROS will give you a communication framework between machines on a network, and also between subsystems on the robot (mobility, state estimation, vision, etc). Included in ROS is the Computer Vision library OpenCV which may interest you if you are using a camera to sense some state or parameter. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition to ROS, I can recommend &lt;a href=&quot;http://mathworks.com/products/simulink/?refresh=true%20*Simulink*&quot; rel=&quot;nofollow&quot;&gt;Simulink&lt;/a&gt; for your algorithmic development. Simulink is a simulation environment with very useful pre-validated libraries. After simulating and validating your module, you can compile it into C/C++, then put that into ROS so that your I/O is handled by ROS.&#xA;I use this for almost all kinematic or dynamic systems because it speeds up development significantly, although I avoid doing any I/O directly in Simulink.&lt;/p&gt;&#xA;" OwnerUserId="8859" LastActivityDate="2015-01-12T09:16:17.953" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6339" PostTypeId="1" AcceptedAnswerId="6370" CreationDate="2015-01-12T10:41:26.060" Score="3" ViewCount="228" Body="&lt;p&gt;I'm not sure if this is the correct forum for this question about Automatic Control, but I'll try to post it anyway.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, I've just started to learn about Control Systems and I have some troubles understanding Bode plots. My textbook is really unstructured and the information I find on the Internet always seem a little bit too advanced for a beginner like me to grasp, so I hope you can help me to understand this. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to know what the information we find in the Bode plot can tell us about how the corresponding step responses behave. I know that a low phase margin will give an oscillatory step response and that the crossover frequency decide the rise time. But how can we see if the step response has a statical error in the Bode plot and what does the phase graph of the Bode plot actually mean?&lt;/p&gt;&#xA;" OwnerUserId="8860" LastActivityDate="2015-01-14T01:46:42.233" Title="Understanding the Bode Plot" Tags="&lt;control&gt;&lt;automatic&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6340" PostTypeId="2" ParentId="5302" CreationDate="2015-01-12T10:50:27.690" Score="0" Body="&lt;p&gt;This is probably not an answer you are looking for but it helps simplifying the problem. You need first to pick up the right tools to achieve this simple project. First of all, you need a way to detect a keyboard event. In C/C++, there are many APIs for this purpose. For example, GLUT is an old friendly API for this stuff. For this simple project, I recommend using it because it is very simple. After that you need another API for supporting serial communication protocol which allows you to send and receive data from COM port. Windows supports serial communication. If you know C/C++ then this is a piece of cake. Since you didn't mention which language you are using, you might not get a code for your problem. &lt;/p&gt;&#xA;" OwnerUserId="2155" LastActivityDate="2015-01-12T10:50:27.690" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6341" PostTypeId="1" AcceptedAnswerId="6342" CreationDate="2015-01-12T11:53:02.410" Score="1" ViewCount="88" Body="&lt;p&gt;I plan to use the &lt;a href=&quot;http://cds.linear.com/docs/en/datasheet/lt1157.pdf&quot; rel=&quot;nofollow&quot;&gt;LT1157&lt;/a&gt; in my application PCB to act as a switch control from a micro controller side to control the On/Off state of 2 module boards which will be connected in the PCB. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;1st Load is 5V 1A.&lt;/li&gt;&#xA;&lt;li&gt;2nd Load is 3.3V 500mA.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The LT1157 will get a 5V input at the V&lt;sub&gt;s&lt;/sub&gt; terminal. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know how much voltage is required to be used at the IN1 and IN2 pins? The datasheet doesn't say how much voltage can be used here. I am guessing it will be 5V, but can it do logic level with 3.3V? My microcontroller board gives an output of 3.3V and not 5V so I'll have to make a logic Level converter before feeding the pins IN1 and IN2 if it's not 3.3V tolerant. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please confirm, if anyone has used this IC before. &lt;/p&gt;&#xA;" OwnerUserId="7049" LastEditorUserId="9176" LastEditDate="2015-07-03T04:30:12.293" LastActivityDate="2015-07-03T04:30:12.293" Title="LT1157 Logic Level Question" Tags="&lt;circuit&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6342" PostTypeId="2" ParentId="6341" CreationDate="2015-01-12T12:16:32.007" Score="3" Body="&lt;p&gt;The answer is on page 2 of the datasheet. The minimum &quot;Input High Voltage&quot; is listed as &quot;70% × VS&quot;. Therefore, if you supply voltage (VS) is 5V, the minimum specified input voltage would be 3.5V. This value is for operation over the entire specified temperature range.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It MAY work with 3.3V inputs (probably unreliably), but it would be better to convert the inputs to 5V logic. If your application will allow you to use a low-side driver, you could power the LT1157 from 3.3V and use a low-side driver to switch power for your 5V load (similar to the &quot;Mixed 3.3V and 12V High- and Low-Side Switching&quot; example in the datasheet.&lt;/p&gt;&#xA;" OwnerUserId="1844" LastActivityDate="2015-01-12T12:16:32.007" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6343" PostTypeId="2" ParentId="6328" CreationDate="2015-01-12T14:32:44.997" Score="0" Body="&lt;p&gt;Ubuntu is a pretty common distribution so it should be pretty easy to work with.  However, Ubuntu is targeted for desktops, so I'd recommend using a light-weight flavor for the Beaglebone.  For example &lt;a href=&quot;http://xubuntu.org/&quot; rel=&quot;nofollow&quot;&gt;Xubuntu&lt;/a&gt; or &lt;a href=&quot;http://lubuntu.net/&quot; rel=&quot;nofollow&quot;&gt;Lubuntu&lt;/a&gt;.  But I also know that installation on a board like this can be a pain, so i'd try to find some standard image if possible.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-01-12T14:32:44.997" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6344" PostTypeId="2" ParentId="6331" CreationDate="2015-01-12T14:48:06.383" Score="1" Body="&lt;p&gt;If you do have actual limbs that won't do continuous rotation, you can typically get away with &quot;service loops&quot;.  Which is a fancy word for a loop of extra wire that still allows the joint to move through its range.  Putting hard stops in the joint help prevent wire breakage, but are not necessary.  You can even have the joint rotate past 360 degrees depending on how much extra wire you use.  But you should keep track of the joint position and limit rotation through software.  There are many ways to do service loops that are neat and tidy and don't have wire hanging all over.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To further have a clean look, you can also have a hollow shaft and pass the wires down the middle of the axis.  The wires can still twist up, but much less wire is required.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other fancy ideas are optical slip rings.  Instead of mechanical brushes which can introduce electrical noise in the signals, these bridge the gap with IR light.  Of course this won't transfer power.  To transfer power, you can use inductive coupling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think most robots simply use service loops.  Because slip rings are expensive.  So they are only used where continuous rotation is needed.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-01-12T14:48:06.383" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6345" PostTypeId="1" CreationDate="2015-01-12T14:56:21.873" Score="3" ViewCount="802" Body="&lt;p&gt;I'm building a robot which is actually a rotating ball. All my circuitry will be inside this ball. I'm using a Raspberry Pi as the brains. Apart from Raspberry Pi, I've an H-bridge IC (L298N), a 6-axis Accelerometer + Gyroscope (MPU6050), and probably some more additional digital components. These will work with a 5V or 3.3V supply. Another set of components are electromechanical devices like a 9kg torque servo and 2 1000RPM DC motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Here are my questions:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Everything will work on battery. I can get a 3.3V and 5V supply from a 9V battery using L1117-3.3V and 7805 regulators respectively. I know that it's not at all reliable to share the power source of the control circuitry with high load devices like motors and servos. Should I have a dedicated separate supplies for electromechanical components and the control circuitry?&lt;/li&gt;&#xA;&lt;li&gt;Servo will run on 6V supply and motor will run on a 12V supply. How should I go about this one? Again, separate batteries for servo and motors?&lt;/li&gt;&#xA;&lt;li&gt;Can of this work on a single high capacity battery, somewhat like 10000mAh?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Here are some of my calculations:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Servo current (6V):&lt;/em&gt;&lt;/strong&gt; &lt;strong&gt;at no load:&lt;/strong&gt; ~450mA, &lt;strong&gt;at around 6kg load:&lt;/strong&gt; ~800mA&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Motor current (12V):&lt;/em&gt;&lt;/strong&gt; &lt;strong&gt;at no load:&lt;/strong&gt; ~500mA, &lt;strong&gt;at around 6kg load:&lt;/strong&gt; ~950mA&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;RaspberryPi and other digital circuitry (5V + 3.3V):&lt;/em&gt;&lt;/strong&gt; ~600mA (that includes an Xbee)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus, the overall current at a 6kg load (with two motors) comes around ~3.3A&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It would be really awesome if this thing gets done with a maximum of 2 batteries. Else, it may get messy while placing the batteries inside the ball. Space is limited!&lt;/p&gt;&#xA;" OwnerUserId="8861" LastEditorUserId="110" LastEditDate="2015-01-12T15:04:12.623" LastActivityDate="2015-01-12T22:53:14.727" Title="Battery system for a robot with a RaspberryPi or microcontroller" Tags="&lt;motor&gt;&lt;power&gt;&lt;otherservos&gt;&lt;battery&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6346" PostTypeId="5" CreationDate="2015-01-12T17:41:08.677" Score="0" Body="&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/9T9Mh.jpg&quot; alt=&quot;http://www.coppeliarobotics.com/pageImages/robots.jpg&quot;&gt;&#xA;(Image from v-rep)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a pretty comprehensive list of robotics simulators lifted from &lt;a href=&quot;http://stackoverflow.com/questions/2533321/robotics-simulator&quot;&gt;this&lt;/a&gt; old (and closed) StackExchange question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;A list of some robot simulators:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://playerstage.sourceforge.net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Player Project&lt;/a&gt;  (&lt;a href=&quot;http://playerstage.sourceforge.net/index.php?src=stage&quot; rel=&quot;nofollow noreferrer&quot;&gt;Stage&lt;/a&gt; is a 2D simulator, &lt;a href=&quot;http://gazebosim.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Gazebo&lt;/a&gt; is a 3D simulator with physics engine, opensource)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://morse.openrobots.org&quot; rel=&quot;nofollow noreferrer&quot;&gt;MORSE&lt;/a&gt; (general purpose indoor/outdoor 3D simulator)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.microsoft.com/robotics/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Microsoft Robotics Studio&lt;/a&gt; (simulator + control interface)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.theodorstorm.se/index/2866.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;KiKS&lt;/a&gt; (Matlab plugin, only for Khepera + control interface) &lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.mobotsoft.com/?page_id=9&quot; rel=&quot;nofollow noreferrer&quot;&gt;MobotSim&lt;/a&gt; (for point-like robots, more of algorithm implementation ) &lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Karel_(programming_language)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Karel&lt;/a&gt; (Pascal/Logo like)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.peekabot.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Peekabot&lt;/a&gt; &lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.mrpt.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;MRPT&lt;/a&gt; &lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://carmen.sourceforge.net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Carmen&lt;/a&gt; &lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.cyberbotics.com/index.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;Webots&lt;/a&gt; (closed source) &lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://simbad.sourceforge.net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Simbad&lt;/a&gt; (2D/3D simulator in Java and Jython)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://robocode.sourceforge.net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Robocode&lt;/a&gt; (A Java/ .NET suit)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://rossum.sourceforge.net/sim.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Rossum's Playhouse&lt;/a&gt; (C/C++ suit)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.coppeliarobotics.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;V-REP&lt;/a&gt; (3D, source available, Lua scripting, APIs for C/C++, Python, Java, Matlab, URBI, 2 physics engines, full kinematic solver, etc.)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://openrave.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;OpenRAVE&lt;/a&gt; (C and Python interfaces, 3D, optional physics engine integration)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.petercorke.com/Robotics_Toolbox.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Robotics Toolbox&lt;/a&gt; (Matlab toolbox)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Some references on robot simulators:&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.springerlink.com/content/v57531724h624440/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Development environments for autonomous mobile robots: A survey&lt;/a&gt; &lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.ibm.com/developerworks/linux/library/l-robotools/?ca=dgr-lnxw09OSRoboticToolkits&quot; rel=&quot;nofollow noreferrer&quot;&gt;Open source robotics toolkits&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.linuxfordevices.com/c/a/Linux-For-Devices-Articles/Updated-review-of-robotics-software-platforms/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Updated review of robotics software platforms&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://homepages.laas.fr/slemaign/wiki/doku.php?id=simulateursexistants&quot; rel=&quot;nofollow noreferrer&quot;&gt;Existing Simulators - webpage@laas.fr&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.robobyte.net/drupal/content/open-robotics-software-resources&quot; rel=&quot;nofollow noreferrer&quot;&gt;List at Asaf Matan's website&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Typically, a simulator will either be for mobile navigation, or manipulation.  Although more and more these are converging.&lt;/p&gt;&#xA;" OwnerUserId="110" LastEditorUserId="110" LastEditDate="2015-01-13T16:32:25.247" LastActivityDate="2015-01-13T16:32:25.247" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6347" PostTypeId="4" CreationDate="2015-01-12T17:41:08.677" Score="0" Body="Robotics simulators represent the world in software.  They range in complexity from the simple and only operate in a top-down 2D world, or very complex with photo-realistic rendering and physics modeling.  " OwnerUserId="110" LastEditorUserId="110" LastEditDate="2015-01-13T16:32:33.417" LastActivityDate="2015-01-13T16:32:33.417" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6348" PostTypeId="1" AcceptedAnswerId="6349" CreationDate="2015-01-12T19:54:05.230" Score="1" ViewCount="179" Body="&lt;p&gt;I'm studying for a test in Automatic Control and I have some troubles understanding sensitivity functions and complementary sensitivity functions. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's one assignment from an old exam that sais&#xA;&quot;Someone suggests that you should reduce perturbations and measurement noise simultaneously. Explain why this is not possible.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The correct answer sais:&#xA;&quot;Since the sensitivity and complementary sensitivity transfer functions add up to 1, i.e. $S+T=1$, one cannot improve both the output disturbance and measurement error suppression at the same time.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't really understand this answer and my textbook is not to much help either, so I would appreciate alot if someone could explain how they got to this answer? Also, is the sensitivity function always representing the perturbations in the system and the complementary sensitivity function the measurement noise? My textbook seem to imply this, but I'm really not sure if this is always true.&lt;/p&gt;&#xA;" OwnerUserId="8860" LastActivityDate="2015-01-12T20:55:02.713" Title="What Does the Sensitivity Function Mean?" Tags="&lt;control&gt;&lt;noise&gt;&lt;automatic&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6349" PostTypeId="2" ParentId="6348" CreationDate="2015-01-12T20:11:26.100" Score="3" Body="&lt;p&gt;The text is saying that system perturbations and measurement noise look identical to the controller. That is, a controller will react in the same fashion to both system perturbations and noise in the measurement. By increasing perturbation rejection, you also make the system  more susceptible to noise from your sensors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The sensitivity function is the ability to reject system perturbations. The complementary sensitivity function is the ability to filter noise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://lorien.ncl.ac.uk/ming/robust/sensfunc.pdf&quot; rel=&quot;nofollow&quot;&gt;http://lorien.ncl.ac.uk/ming/robust/sensfunc.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8842" LastEditorUserId="8842" LastEditDate="2015-01-12T20:55:02.713" LastActivityDate="2015-01-12T20:55:02.713" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6351" PostTypeId="1" AcceptedAnswerId="6362" CreationDate="2015-01-12T21:36:46.953" Score="3" ViewCount="119" Body="&lt;p&gt;Our goal is to drive an autonomous robot with a differential locomotion system using two identical electric motors and an Arduino Uno (1 for each wheel). From our understanding, over time the motors can lose accuracy and may result in one motor rotating more than the other.&#xA;Is there a way to account for possible error in the speeds of the motors so that the robot can end up in a very precise location?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Our thoughts were to have an indicator which would allow us to count the number of rotations of each motor and compensate if a noticeable difference began to appear.&lt;/p&gt;&#xA;" OwnerUserId="8864" LastActivityDate="2015-01-16T12:18:55.357" Title="Accounting for error in multiple electric motors" Tags="&lt;arduino&gt;&lt;mobile-robot&gt;&lt;two-wheeled&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6352" PostTypeId="2" ParentId="6345" CreationDate="2015-01-12T22:53:14.727" Score="2" Body="&lt;p&gt;You are right that there &lt;strong&gt;are&lt;/strong&gt; issues in having an &quot;unclean&quot; power supply running into your RaspberryPi. If you are drawing tons of power, things get very hairy very fast. However, there &lt;em&gt;are&lt;/em&gt; ways to &quot;convert&quot; and &quot;clean&quot; a supply to isolate the voltage (and therefore making it suitable for input to the Raspberry Pi). How much cleaning will depend on your specific motors and use case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While you can use a single battery for &lt;em&gt;everything&lt;/em&gt;, I would only recommend it if you have some very good switching DC to DC converters, as you'll lose a ton of power in the conversion otherwise. Most regulators (including the one you mention for the 3.3VDC) &quot;burn off&quot; the extra voltage to get the voltage you want. So, in your case of converting 12VDC to 6VDC and drawing on order of an amp would mean you would be &lt;em&gt;burning&lt;/em&gt; 6 Watts (which would be converted to heat).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is fine for electronics like the Raspberry Pi, but not so fine for powering motors.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;My recommendation therefore is either 1) Get a High efficiency DC to DC switching converter or 2) Have two separate voltage supplies, +6VDC and +12VDC.&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;As far as powering the Raspberry Pi, there is a better solution:&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Powering the Raspberry Pi&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Unless you have specific electronics that need +5VDC, there is no advantage to supplying +5VDC to the Pi. Instead, I recommend directly powering +3.3VDC to the Pi via a Voltage regulator w/ some protection electronics. You can do this either by hacking the board, or by supplying +3.3VDC to both the +5VDC &amp;amp; +3.3VDC of the GPIO header (bypassing the on-board voltage regulator). Details on how to do so are here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.daveakerman.com/?page_id=1294&quot; rel=&quot;nofollow&quot;&gt;http://www.daveakerman.com/?page_id=1294&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;WARNING&lt;/strong&gt; this puts your Raspberry Pi at risk if you don't do a good job conditioning your input power!! There are a myriad of ways to clean up power, but at a minimum you should look up &quot;flyback diode&quot; and plan to use one in conjunction to a largish capacitor for each motor driver.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this helps...&lt;/p&gt;&#xA;" OwnerUserId="1723" LastActivityDate="2015-01-12T22:53:14.727" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6353" PostTypeId="2" ParentId="6351" CreationDate="2015-01-13T00:03:32.123" Score="3" Body="&lt;p&gt;You're describing an encoder. It will give you a signal every time the wheel turns a some amount of degrees. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.bot-thoughts.com/2011/03/avc-bot-wheel-encoders.html&quot; rel=&quot;nofollow&quot;&gt;http://www.bot-thoughts.com/2011/03/avc-bot-wheel-encoders.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8842" LastActivityDate="2015-01-13T00:03:32.123" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6354" PostTypeId="2" ParentId="6351" CreationDate="2015-01-13T01:31:31.657" Score="0" Body="&lt;p&gt;This is a classic robotics problem not only will motors not rotate at the same speed given the same power, but one wheel might slip more than the other. This is why you almost always see precise robots with some sort of external reference, be it a camera, gps, line sensor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;An encoder will tell you whenever the shaft you attach it to has moved x degrees where x is dependent on the encoder. &lt;a href=&quot;https://en.wikipedia.org/wiki/Rotary_encoder&quot; rel=&quot;nofollow&quot;&gt;https://en.wikipedia.org/wiki/Rotary_encoder&lt;/a&gt; be careful of the difference between an absolute encoder and a relative one. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: apparently I am being down voted because you are all assuming robots are driven on hard surfaces. Most commercial grade robots are not &lt;a href=&quot;http://www.popsci.com/disney-designs-robot-draw-pictures-sand&quot; rel=&quot;nofollow&quot;&gt;http://www.popsci.com/disney-designs-robot-draw-pictures-sand&lt;/a&gt; &lt;a href=&quot;http://www.irobot.com/For-the-Home/Vacuum-Cleaning/Roomba.aspx&quot; rel=&quot;nofollow&quot;&gt;http://www.irobot.com/For-the-Home/Vacuum-Cleaning/Roomba.aspx&lt;/a&gt; &lt;a href=&quot;http://www.robomow.com/en-USA/&quot; rel=&quot;nofollow&quot;&gt;http://www.robomow.com/en-USA/&lt;/a&gt; &lt;a href=&quot;http://www.nasa.gov/mission_pages/msl/&quot; rel=&quot;nofollow&quot;&gt;http://www.nasa.gov/mission_pages/msl/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8858" LastEditorUserId="8858" LastEditDate="2015-01-14T15:27:54.120" LastActivityDate="2015-01-14T15:27:54.120" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="6355" PostTypeId="1" AcceptedAnswerId="6359" CreationDate="2015-01-13T01:49:07.980" Score="4" ViewCount="404" Body="&lt;p&gt;Background:&#xA;I am new to PID, for my first PID project I am using a simple P-Loop and 300 degree linear potentiometers for position feedback. I am using the roboclaw 2x60A motor controller.  The motor controller has 64 speeds between.  Sometimes the potentiometers can vary as much as +-4 degrees when not in motion.  I am using an Arduino mega with a 10bit ADC to control the motors.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My Question:&#xA;How can I filter or reduce the variance in the potentiometers?  In addition, it takes a certain amount of time for the motors to react to the command, and it seems to throw off the P loop.  How do I account for the latency, in my program?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Example:&#xA;For this example the P loop was run every 33-36 milliseconds.&#xA;I will tell the motor to go to 250 deg/sec, and it will go to 275 deg/sec, the P loop then reacts by lowering the value sent to the motor however the speed then increase to 400 deg/sec and then the P loop lowers the value again, then the speed will drop to 34 deg/sec.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks so much for any help,&#xA;Joel&lt;/p&gt;&#xA;" OwnerUserId="6818" LastEditorUserId="6818" LastEditDate="2015-01-17T19:54:21.653" LastActivityDate="2015-01-17T19:54:37.580" Title="Dealing with position inaccuracy and latency in PID Loop" Tags="&lt;arduino&gt;&lt;motor&gt;&lt;pid&gt;&lt;software&gt;&lt;avr&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6356" PostTypeId="1" AcceptedAnswerId="6357" CreationDate="2015-01-13T02:10:59.060" Score="1" ViewCount="250" Body="&lt;p&gt;I am completely new to this site and robotics, but I have experience in programming, and programming microcontrollers.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to create a grid of &quot;pixels&quot;, where each &quot;pixel&quot; is a metal or wooden dowel that is programmed to push in and out, like a piston.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm imagining a lot of pixels, maybe 40x40, where each could be quite small in diameter (1/4&quot;).  The Arduino would have control over the linear movement - up and down - of each pixel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could anyone point me in the right direction for accomplishing this?&lt;/p&gt;&#xA;" OwnerUserId="8865" LastEditorUserId="37" LastEditDate="2018-08-15T15:20:44.997" LastActivityDate="2018-08-15T15:20:44.997" Title="How do I achieve this? Grid of dowels powered by piston-like movement" Tags="&lt;arduino&gt;&lt;mechanism&gt;&lt;servomotor&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6357" PostTypeId="2" ParentId="6356" CreationDate="2015-01-13T03:37:10.280" Score="1" Body="&lt;p&gt;You may want to consider mastering the art of controlling an LED matrix first.   Then, replace the LED's with some sort of actuator (motor, servo, or other mechanism) at each node of the matrix that performs the up and down motion that you seek.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It sounds simple, but there are other details to consider.  Particularly, you'll probably need more power to drive the actuators than you would for LED's.  This, of course, depends on the actuators that you choose.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are probably more factors to consider beyond what i've mentioned (e.g. Cost, precision, sensor feedback, etc...), but the first step would best be learning how to control an LED matrix.  I may even advise to look into using shift registers rather than multiplexing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for achieving vertical motion of the dowels with an actuator, there are a number of ways to do it.  The easiest may be using a rack and pinion or a closed loop pulley with an actuator attached at one end. &lt;/p&gt;&#xA;" OwnerUserId="2295" LastEditorUserId="2295" LastEditDate="2015-01-13T04:05:33.280" LastActivityDate="2015-01-13T04:05:33.280" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="6358" PostTypeId="2" ParentId="6339" CreationDate="2015-01-13T07:14:23.283" Score="0" Body="&lt;p&gt;Well to answer your question, I hope this correct, I won't consider myself as an expert:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically to see if there is a statical, you need the phase graph. Each differentiating element in the system will boost the final phase by 90°, each integrating element decrease the phase by 90°.&#xA;&lt;br&gt;&lt;br&gt;&#xA;Just look at the highest frequency and take the phase, usually this value is a multiple of 90°. &lt;br&gt;&#xA;If it's negative the system is allover integrating and there is no statical error.&#xA;&lt;br&gt;&lt;br&gt;&#xA;Systems are usually represented with a complex frequency (The Laplace's &quot;s&quot;). You are allowed to substitude the s with j*omega, where omega is the frequency and j is the imaginary number. &lt;br&gt;&#xA;Just insert your frequency and then a complex number remains. Complex numbers can be expressed in exponential form. This representation has a gain and an angle. This two values are plotted in the bode plots.&lt;/p&gt;&#xA;" OwnerUserId="6911" LastActivityDate="2015-01-13T07:14:23.283" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6359" PostTypeId="2" ParentId="6355" CreationDate="2015-01-13T09:24:54.113" Score="3" Body="&lt;p&gt;Having only the proportional term of the PID regulator will most definitely leave you with oscillations. If you think about it, it's quite similar to a linear harmonic oscillator F=k*x (formula for spring motion). Adding a derivative term should damp out those oscillations. If after waiting for the system to stabilize you see it stabilized with some offset and not the value you've instructed it to, you'll need to add integral term as well in order to remove that constant error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for the shaky ground, try separating logic power supply from the motors' power supply, and using optocouplers where possible. It's a common problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regards,&#xA;Damjan&lt;/p&gt;&#xA;" OwnerUserId="4017" LastActivityDate="2015-01-13T09:24:54.113" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6360" PostTypeId="2" ParentId="6331" CreationDate="2015-01-13T09:35:12.107" Score="1" Body="&lt;p&gt;While others have provided you with proper solutions, there's also a cheap hack :)&#xA;You can use audio connectors (I've seen people use them for &quot;persistence of vision&quot; display applications): &lt;img src=&quot;https://i.stack.imgur.com/ll6Y4.jpg&quot; alt=&quot;3.5mm audio&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="4017" LastActivityDate="2015-01-13T09:35:12.107" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6361" PostTypeId="2" ParentId="5103" CreationDate="2015-01-13T11:58:27.227" Score="1" Body="&lt;p&gt;Because these pictures were saved in SRAM rather then in flash memory they took up so much space that the arduino ran out of memory causing various types of noise to appear(along side a few other problems such as random crashes/reboots). By moving them out of SRAM and into flash memory the problem was solved. &lt;/p&gt;&#xA;" OwnerUserId="7226" LastEditorUserId="7226" LastEditDate="2015-01-16T18:00:53.870" LastActivityDate="2015-01-16T18:00:53.870" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6362" PostTypeId="2" ParentId="6351" CreationDate="2015-01-13T13:25:25.583" Score="1" Body="&lt;p&gt;&quot;Is there a way to account for possible error in the speeds of the motors so that the robot can end up in a very precise location?&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other answers describe the approximate solution (encoders). It depends on what you define 'precise' as. For an Arduino budget project, it is probably precise enough. But typically, say you direct your Arduino robot to move in a 1 meter square, you can expect it to be off by several cm when it returns to the start point. That is usually fine for an Arduino robot, but imagine something 100 times bigger (a car) being off by 100 times as much, now you have problems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This problem is overcome by adding additional sensors. Each one can add additional accuracy until required precision is reached.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A gyro helps by giving more accurate short term turning information, as encoders depends on mechanical solutions that have slippage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A compass works by giving more long term heading information, but is subject to disturbances.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A GPS, if available, can provide periodic 'corrections' to overall location information.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A SLAM algorithm, often laser range finder based, can triangulate on detected objects to help improve accuracy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lately the use of images, especially stereo, can also provide triangulation information. This is often referred to as optical odometry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All of these additional measurements, separate or in some combination, is 'fused'. Very often with some form of a Kalman filter. The filter helps prioritize which signals to use dynamically.&lt;/p&gt;&#xA;" OwnerUserId="274" LastEditorUserId="274" LastEditDate="2015-01-13T13:40:53.043" LastActivityDate="2015-01-13T13:40:53.043" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6363" PostTypeId="5" CreationDate="2015-01-13T14:44:07.430" Score="0" Body="&lt;p&gt;All Roombas support a common serial interface and can be &quot;hacked&quot; for custom robotics projects.  However, &lt;a href=&quot;https://www.irobot.com&quot; rel=&quot;nofollow noreferrer&quot;&gt;iRobot&lt;/a&gt; also sells the &lt;a href=&quot;https://robotics.stackexchange.com/tags/irobot-create/info&quot;&gt;Create&lt;/a&gt; which is specifically targeted for robotics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/3TFGW.jpg&quot; alt=&quot;Roomba on rug&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="110" LastEditorUserId="15160" LastEditDate="2019-12-09T10:51:19.650" LastActivityDate="2019-12-09T10:51:19.650" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6364" PostTypeId="4" CreationDate="2015-01-13T14:44:07.430" Score="0" Body="The Roomba is a consumer-grade autonomous vacuuming robot sold by iRobot." OwnerUserId="110" LastEditorUserId="15160" LastEditDate="2019-12-09T10:51:54.780" LastActivityDate="2019-12-09T10:51:54.780" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6365" PostTypeId="2" ParentId="6322" CreationDate="2015-01-13T14:48:22.887" Score="0" Body="&lt;p&gt;I would recommend looking into ROS. It's a communications protocol that allows for easy communication between two pieces of code. It works with python and cpp and handles all the  building and compiling. There are a ton of ROS libraries, called packages, which the community has put together and maintains. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It looks like ros indigo has been successfully built in using the jetson tk1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://wiki.ros.org/indigo/Installation/UbuntuARM&quot; rel=&quot;nofollow&quot;&gt;http://wiki.ros.org/indigo/Installation/UbuntuARM&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are some ros tutorials that cover all of the basics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://wiki.ros.org/ROS/Tutorials&quot; rel=&quot;nofollow&quot;&gt;http://wiki.ros.org/ROS/Tutorials&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="8842" LastActivityDate="2015-01-13T14:48:22.887" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6366" PostTypeId="1" AcceptedAnswerId="7136" CreationDate="2015-01-13T18:11:37.700" Score="2" ViewCount="388" Body="&lt;p&gt;Has anyone used the XBee WiFI modules? Done a range check on them?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With my laptop i get a range of around 400m on industrial level Accesspoints on a football field, well how good are these devices ? If i get a SMA Connector version and use a higher gain antenna am I looking at ranges from 250-500m ? (Talking 18-22dBi gains here).&lt;/p&gt;&#xA;" OwnerUserId="7049" LastEditorUserId="350" LastEditDate="2015-01-16T17:31:44.000" LastActivityDate="2015-05-03T15:47:58.180" Title="How can I improve the range of an XBee S6B?" Tags="&lt;wifi&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6367" PostTypeId="1" CreationDate="2015-01-13T19:35:23.367" Score="2" ViewCount="4211" Body="&lt;p&gt;I have data from an accelerometer that measures X,Y,Z acceleration and data from a gyroscope that measure pitch, roll and yaw. How would I combine this data to find robot location and orientation in 2D or 3D space? &lt;/p&gt;&#xA;" OwnerUserId="1310" LastActivityDate="2015-01-20T10:12:20.790" Title="How to combine an accelerometer and a gyroscope to find robot location and orientation in 2D/3D space" Tags="&lt;localization&gt;&lt;accelerometer&gt;&lt;algorithm&gt;&lt;gyroscope&gt;" AnswerCount="4" CommentCount="0" ClosedDate="2015-01-21T12:12:27.540" ContentLicense="CC BY-SA 3.0" />
  <row Id="6368" PostTypeId="2" ParentId="6367" CreationDate="2015-01-13T19:45:03.103" Score="2" Body="&lt;p&gt;Look into nonlinear filters, particularly the unscented kalman filter (ukf). Using a ukf to fuse the data from a gyroscope and accelerometer will allow you to estimate orientation. However, these two sensors alone will not be capable of estimating position. You will need some sort of sensor that measures distance or position. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For information on the ukf, look into Probabilistic Robotics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/0262201623&quot; rel=&quot;nofollow&quot;&gt;http://www.amazon.com/Probabilistic-Robotics-Intelligent-Autonomous-Agents/dp/0262201623/ref=sr_1_1?ie=UTF8&amp;amp;qid=1421178247&amp;amp;sr=8-1&amp;amp;keywords=probabilistic+robotics&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Response to comment-&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Imagine you are trying to estimate the position of a car that is traveling down a straight road. To estimate the position of the car, you are given a picture of the car's speedometer every second. You can get an idea of how far the car has traveled using this information but you will not know for certain. If there is any bias in the speedometer, your guess of the total distance traveled will be way off. To really know the car's position, you need to be able to measure it directly.&lt;/p&gt;&#xA;" OwnerUserId="8842" LastEditorUserId="8842" LastEditDate="2015-01-14T00:42:44.787" LastActivityDate="2015-01-14T00:42:44.787" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6369" PostTypeId="2" ParentId="6315" CreationDate="2015-01-13T21:49:59.943" Score="0" Body="&lt;p&gt;First some terminology, finding camera pose is known in computer vision as external camera calibration. Since you mentioned Kalman filter, I assume you need to need to &quot;update&quot; the so-called external parameters of the camera continously (i.e. the camera is moving). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the camera moves in front of the reference frame you might use the usual chessboard pattern as a calibration rig. If however the camera moves about the reference frame, you might want to use other object and test robust feature detectors (like SIFT)  but you have to make sure your object doesn't have symmetrics that might lead to ambiguities..&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case you don't have control over the envionment, there are the so-called automatic calibraiton methods (see reference). The problem with this approach is that you have the assumption that the features you find in your envionment belongs to rigid bodies (on Mars you can make such assumption safely ;) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;References:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;SIFT &lt;a href=&quot;http://en.wikipedia.org/wiki/Scale-invariant_feature_transform&quot; rel=&quot;nofollow&quot;&gt;http://en.wikipedia.org/wiki/Scale-invariant_feature_transform&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;OpenCV Camera Calibration &lt;a href=&quot;http://docs.opencv.org/trunk/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html&quot; rel=&quot;nofollow&quot;&gt;http://docs.opencv.org/trunk/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Carrera et al, &quot;SLAM-Based Automatic Extrinsic Calibration of a Multi-Camera Rig&quot;, 2011&lt;/li&gt;&#xA;&lt;li&gt;Miksch et al, &quot;Automatic Extrinsic Camera Self-Calibraiton Based on Homography and Epipolar Geometry&quot;, 2010&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="1289" LastActivityDate="2015-01-13T21:49:59.943" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6370" PostTypeId="2" ParentId="6339" CreationDate="2015-01-14T01:46:42.233" Score="1" Body="&lt;p&gt;I assume you are talking about a Bode plot of a &lt;a href=&quot;http://en.wikipedia.org/wiki/Transfer_function&quot; rel=&quot;nofollow&quot;&gt;transfer function&lt;/a&gt; response, which relates the input of a system to the output in the frequency domain. One way of measuring such a response would be to input a sinusoidal signal of one particular frequency, and measure the amplitude and phase shift of the output. So the input will have the following form,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;x_{in}(t) = A \sin(\omega t).&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The output will always also be a sinusoidal signal of the same frequency, assuming that the dynamics of the system are linear, so no $\dot{x}=x^2$, but possibly with a different amplitude and phase. So the output will have the following form,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;x_{out}(t) = B \sin(\omega t + \phi).&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The amplitude would actually be the ratio of $B/A$ and $\phi$ would be the phase shift.&#xA;There are more efficient ways of measuring a transfer function, however I think this helps explain the meaning of the Bode plot of a transfer function in the frequency domain.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Usually a logarithmic scale is used for the frequency axis of a Bode plot, just as the amplitude (usually with decibel). A linear scale usually used for the phase information. A transfer function usually expressed in complex values instead of amplitude and phase, since that information can also be extracted from complex numbers. When you want to find the response of a system, you can just multiply the transfer function by the frequency domain of the input signal (when you have amplitude and phase separate, you can multiply the amplitudes and add the phases).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The frequency domain of a step function has a constant nonzero amplitude and constant phase for all frequencies. If you would multiply this by the transfer function you would basically get the transfer function back (possibly scaled) as the frequency domain of the output signal. Since all sinusoidal signals oscillate around zero, therefore you can find the offset from zero (I assume you mean this by statical error) by looking at the amplitude of the output at 0 Hz.&lt;/p&gt;&#xA;" OwnerUserId="1487" LastActivityDate="2015-01-14T01:46:42.233" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6371" PostTypeId="1" CreationDate="2015-01-14T05:19:29.417" Score="3" ViewCount="2273" Body="&lt;p&gt;I am starting with a project using Arducopter. I am a person familiar with arduino, but seeing the arducopter for the first time. Commands codes and everything is completly different compared to normal Arduino programming. I am not getting any help or commandlist for specific purposes in arducopter. Any body can help me in leading to any links which can help me out..&lt;/p&gt;&#xA;" OwnerUserId="8873" LastActivityDate="2017-12-14T05:15:10.947" Title="Basic programming in arducopter" Tags="&lt;arduino&gt;&lt;ardupilot&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6372" PostTypeId="2" ParentId="6371" CreationDate="2015-01-14T05:27:12.453" Score="3" Body="&lt;p&gt;You should start with &lt;a href=&quot;http://dev.ardupilot.com/&quot; rel=&quot;nofollow&quot;&gt;http://dev.ardupilot.com/&lt;/a&gt;&#xA;You can find articles that will make you familarize with code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively you can look at Aeroquad(&lt;a href=&quot;https://github.com/AeroQuad/AeroQuad&quot; rel=&quot;nofollow&quot;&gt;https://github.com/AeroQuad/AeroQuad&lt;/a&gt;) which runs quadcopter on Arduino &lt;/p&gt;&#xA;" OwnerUserId="2118" LastActivityDate="2015-01-14T05:27:12.453" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6373" PostTypeId="2" ParentId="6367" CreationDate="2015-01-14T05:35:20.147" Score="2" Body="&lt;p&gt;Unfortunately I cannot comment. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can, but it will most likely be very inaccurate.&#xA;If you use an accelerometer output to calculate displacement by double integration, any error will be compounding. Because you have no way to offset this error, over time it will become so large that the position value is meaningless.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other issue is if you are moving at constant velocity the accelerometer will report 0m/s/s, so double integration with respect to time will give a displacement of 0, making the robot appear stationary.&lt;/p&gt;&#xA;" OwnerDisplayName="user7824" LastEditorDisplayName="user7824" LastEditDate="2015-01-15T01:21:47.977" LastActivityDate="2015-01-15T01:21:47.977" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6374" PostTypeId="1" AcceptedAnswerId="6376" CreationDate="2015-01-14T11:54:54.653" Score="2" ViewCount="1726" Body="&lt;p&gt;I have the following code: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void NewCore::spin(){&#xA;    ros::Rate rate(10);&#xA;&#xA;    int first =1;&#xA;    while(ros::ok()){&#xA;&#xA;        if (first){         &#xA;            askMath();first=0;}&#xA;        ros::spinOnce();&#xA;        rate.sleep();&#xA;    }&#xA;}&#xA;&#xA;int main(int argc, char **argv){&#xA;&#xA;    ros::init(argc, argv, &quot;newCore&quot;);&#xA;    NewCore nc;&#xA;    nc.init();&#xA;&#xA;    nc.spin();&#xA;}&#xA;&#xA;void NewCore::init(){&#xA;&#xA;    mngrSub = handle.subscribe&amp;lt;std_msgs::String&amp;gt;(&quot;/tawi/core/launch&quot;, 10, &amp;amp;NewCore::launchCallback, this);&#xA;    mngrPub = handle.advertise&amp;lt;std_msgs::String&amp;gt;(&quot;/tawi/core/launch&quot;, 100);&#xA;&#xA;    mathSub = handle.subscribe&amp;lt;std_msgs::String&amp;gt;(&quot;/display&quot;, 10, &amp;amp;NewCore::launchCallback, this);&#xA;    serSub = handle.subscribe&amp;lt;std_msgs::String&amp;gt;(&quot;/tawi/arduino/serial&quot;, 100,&amp;amp;NewCore::serialCallback,this);&#xA;    mathPub = handle.advertise&amp;lt;std_msgs::String&amp;gt;(&quot;/questions&quot;, 100);&#xA;&#xA;    ballPub = handle.advertise&amp;lt;std_msgs::Int16&amp;gt;(&quot;/tawi/core/ballcount&quot;, 100);&#xA;    nmbrPub = handle.advertise&amp;lt;std_msgs::Int16&amp;gt;(&quot;/tawi/core/number&quot;, 100);&#xA;}&#xA;&#xA;void NewCore::askMath(){&#xA;    ROS_INFO(&quot;addition1d&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&quot;);&#xA;    std_msgs::String question;&#xA;    question.data = &quot;1digitAddition&quot;;&#xA;    mathPub.publish(question);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(code that isn't interesting has been removed)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Running this causes the following output to appear: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ rosrun glados newCore &#xA;[ INFO] [1421236273.617723131]: addition1d&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;However if I have the following code on during launch:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ rostopic echo /questions &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;then it does not show me an initial message being sent.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Changing&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;        if (first){         &#xA;            askMath();first=0;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;into &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;            askMath();first=0;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;does appear to work but it then sends a message every cycle rather then just the one at the start. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anybody know what is wrong here? &lt;/p&gt;&#xA;" OwnerUserId="7226" LastEditorUserId="158" LastEditDate="2015-01-14T13:04:31.670" LastActivityDate="2015-01-14T20:35:44.550" Title="ros send message on startup doesn't seem to work" Tags="&lt;ros&gt;&lt;c++&gt;" AnswerCount="2" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="6375" PostTypeId="2" ParentId="230" CreationDate="2015-01-14T13:54:29.803" Score="-2" Body="&lt;p&gt;yes,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;find the download here: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://answers.ros.org/question/200504/raspbian-jessie-ros-indigo-download-image/&quot; rel=&quot;nofollow&quot;&gt;http://answers.ros.org/question/200504/raspbian-jessie-ros-indigo-download-image/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;including framebuffer driver for C-Berry TFT display&lt;/p&gt;&#xA;" OwnerUserId="8874" LastActivityDate="2015-01-14T13:54:29.803" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6376" PostTypeId="2" ParentId="6374" CreationDate="2015-01-14T14:59:52.267" Score="3" Body="&lt;p&gt;I experimented a bit and here's what I think happens.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you run&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ rostopic echo /questions&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;/questions&lt;/code&gt; topic doesn't exist before you run the program. Maybe you cheat it by first running your programming, running this command and then running your program again, but this assertion is still true. So at the point when you run your program, &lt;code&gt;rostopic&lt;/code&gt; is not subscribed to any topic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know internally how this is handled by &lt;code&gt;roscore&lt;/code&gt; and &lt;code&gt;rostopic&lt;/code&gt;, but somewhere along the line, this is what's happening as the observed behavior of &lt;code&gt;rostopic&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;forever&#xA;&#xA;    /* establish connection */&#xA;    while not subscribed to topic&#xA;        try to subscribe&#xA;        if failed&#xA;            sleep a bit&#xA;&#xA;    /* intercept messages */&#xA;    while topic still exists&#xA;        wait for message&#xA;        print message&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This means that &lt;code&gt;rostopic&lt;/code&gt; (or more likely &lt;code&gt;roscore&lt;/code&gt; on its behalf) waits for a topic to become available and subscribes to it.  It then proceeds to print incoming messages.  If the topic becomes unavailable, &lt;code&gt;rostopic&lt;/code&gt; (or again more likely &lt;code&gt;roscore&lt;/code&gt; on its behalf) goes back to waiting for the topic to become available again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, here's what happens when this runs in parallel with your code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    rostopic                       you&#xA;&#xA;  wait for topic&#xA;      sleep&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;  wait for topic&#xA;      sleep&#xA;&#xA;                                  start&#xA;                                ros::init&#xA;                             advertise topic&#xA;                          publish first message&#xA;&#xA;&#xA;subscribe to topic&#xA; wait for message&#xA;      sleep&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;As you can see, your program publishes its first message immediately after advertising the topic. The unsuspecting &lt;code&gt;rostopic&lt;/code&gt; program is not yet aware of this advertisement so is not actually subscribed to the topic yet. You publish the first message before &lt;code&gt;rostopic&lt;/code&gt; gets a chance to subscribe to the topic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can verify this simply by putting a relatively large sleep after you advertise the topics and before you publish to them, i.e. between &lt;code&gt;nc.init()&lt;/code&gt; and &lt;code&gt;nc.spin()&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;To address your real problem (as stated and responded in the comments), which is to understand when the node has started up and use this as a trigger for further actions, I'd advise to consider another strategy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Generally, you would want to make sure a node is up to make sure the other nodes that depend on it can run correctly. However, this doesn't mean that the original node has to be run just before the depending nodes. It could in theory be run long before them, or since ROS doesn't run in real-time and as you have observed, the timing between when topics are advertised, subscribed and the messages going around are quite unpredictable. Add network to this and they are really unpredictable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So instead, you could devise a mechanism to query whether your node is available or not. This is simply done with a ROS service. You would essentially do all the necessary startup and then put up a service that always returns true. Any node that needs to ensure this node is available before proceeding can poll this service and as soon as a call to this service succeeds, you know the node is running.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As an added bonus, this means that you don't have to take this node down (and all depending nodes) just because you need to restart one of the depending nodes.&lt;/p&gt;&#xA;" OwnerUserId="158" LastEditorUserId="158" LastEditDate="2015-01-14T16:31:50.317" LastActivityDate="2015-01-14T16:31:50.317" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6378" PostTypeId="2" ParentId="5178" CreationDate="2015-01-14T17:37:17.820" Score="1" Body="&lt;p&gt;I can't comment due to reputation but if you go to page 11/38 of &lt;a href=&quot;http://www.st.com/web/en/resource/technical/document/datasheet/CD00268302.pdf&quot; rel=&quot;nofollow&quot;&gt;http://www.st.com/web/en/resource/technical/document/datasheet/CD00268302.pdf&lt;/a&gt; you can see how to free wheel(break). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The chip is rated to 28V at 8.9A, but those are ratings in perfect conditions, you are probably pretty safe to go to 28V but because the board you mention is not heat synced I doubt it can support more than 5A. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A large motor with a large load may not run at half voltage full duty cycle (half power). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since the module is rated to 270W and 1 hp = 745.699872 watts that module is hugely under powered for a 1hp motor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My experience is that motor power is not particularly linear so &quot;Dividing by 5 or 6, I got &quot;about 24 V&quot; to give me about 1400 RPM. &quot; is not a really valid way of doing it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Tl;dr. I would buy a much much large H-bridge. For that much power you will probably have to go to discrete MOSFETS and a H-bridge controller. &lt;/p&gt;&#xA;" OwnerUserId="8858" LastActivityDate="2015-01-14T17:37:17.820" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6379" PostTypeId="2" ParentId="6374" CreationDate="2015-01-14T20:35:44.550" Score="1" Body="&lt;p&gt;This thread might also be helpful:&#xA;&lt;a href=&quot;http://answers.ros.org/question/9665/test-for-when-a-rospy-publisher-become-available/&quot; rel=&quot;nofollow&quot;&gt;http://answers.ros.org/question/9665/test-for-when-a-rospy-publisher-become-available/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The question is specifically about python, but i think the root cause is ROS specific, not language specific.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-01-14T20:35:44.550" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6380" PostTypeId="2" ParentId="6367" CreationDate="2015-01-15T05:23:15.063" Score="2" Body="&lt;p&gt;&lt;a href=&quot;http://www.mouser.com/applications/sensor_solutions_mems/&quot; rel=&quot;nofollow&quot;&gt;Here's&lt;/a&gt; a pretty good overview of what holmeski is saying, and using multiple sensors in general for different applications. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;FWIW DARPA is, and has been looking into inertial sensors with enough precision to get useful positional tracking. It's called &quot;Micro-PNT&quot; for &quot;position navigation and timing&quot; and the idea is to not need a GPS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, here's some more info &lt;a href=&quot;http://www.darpa.mil/Our_Work/MTO/Programs/Micro-Technology_for_Positioning,_Navigation_and_Timing_%28Micro-PNT%29.aspx&quot; rel=&quot;nofollow&quot;&gt;directly from the DARPA site&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Quoting, &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;The micro-PNT initiatives seek to increase the dynamic range of inertial sensors, reduce long-term drift in clocks and inertial sensors, and to develop miniature chips providing position, orientation, and time information. &quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The bottom line general answer is, current inertial sensors generate too much uncertainty to be used standalone, and sensor fusion has it's own set of limitations.&lt;/p&gt;&#xA;" OwnerUserId="4169" LastActivityDate="2015-01-15T05:23:15.063" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6381" PostTypeId="2" ParentId="6367" CreationDate="2015-01-15T07:54:44.063" Score="-2" Body="&lt;p&gt;&lt;strong&gt;Its possible.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did the same in my graduation project. What you need is:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Controlled movement over your machine, that you can command the machine to move 1 meter forward or 50cm back etc.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You need to train your system to learn from accelerometer data according to those controlled movements.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Train on different surfaces and also calculate the time elapsed in one particular move.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;After some training your machine will understand that what does it means to move 1 meter forward or backward.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Believe me, it works like magic. My project was 3D semantic analysis and map reconstruction using autonomous agents, and I have not used GPS at all. I hope this will help you and somehow will also motivate you because its possible. :-)&lt;/p&gt;&#xA;" OwnerUserId="1672" LastEditorUserId="158" LastEditDate="2015-01-20T10:12:20.790" LastActivityDate="2015-01-20T10:12:20.790" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6382" PostTypeId="1" AcceptedAnswerId="6393" CreationDate="2015-01-15T15:12:04.873" Score="6" ViewCount="3945" Body="&lt;p&gt;I'm in the early stages of working with a simple robot arm, and learning about the Jacobian and inverse kinematics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From my understanding, the Jacobian can be used to determine the linear and angular velocity of the end effector, given the angular velocity of all joints in the arm. Can it also be used to determine the Cartesian position of the end effector, given the angles and/or positions of the joints?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Furthermore, suppose that I want to determine the required angular velocities of the joints, in order to bring about a desired linear velocity of the end effector. Can this be done by simply inverting the Jacobian and plugging in the desired parameters?&lt;/p&gt;&#xA;" OwnerUserId="8880" LastActivityDate="2015-01-30T21:05:33.050" Title="Can a Jacobian be used to determine required joint angles for end effector velocity/position?" Tags="&lt;kinematics&gt;&lt;inverse-kinematics&gt;&lt;forward-kinematics&gt;&lt;manipulator&gt;&lt;jacobian&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6383" PostTypeId="1" AcceptedAnswerId="6384" CreationDate="2015-01-15T19:46:06.627" Score="1" ViewCount="50" Body="&lt;p&gt;I've made many PCBs at home but still there are some mistakes. I tried ironing, drawing methods but it doesn't work very well. I use eagle CAD for design PCBs. Please help me. &lt;/p&gt;&#xA;" OwnerUserId="8882" LastActivityDate="2015-01-15T20:09:05.413" Title="PCB making at home" Tags="&lt;design&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="1" ClosedDate="2015-01-21T12:11:55.107" ContentLicense="CC BY-SA 3.0" />
  <row Id="6384" PostTypeId="2" ParentId="6383" CreationDate="2015-01-15T20:09:05.413" Score="2" Body="&lt;p&gt;A slightly better method for home-made PCBs is to &lt;a href=&quot;https://en.wikipedia.org/wiki/Printed_circuit_board_milling&quot; rel=&quot;nofollow&quot;&gt;mill the copper off&lt;/a&gt; of a two sided PCB.  Google pcb milling for many machines and services.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another crazy idea that will probably get more affordable in the coming years is to use a 3D printer that can extrude conductive and non-conductive materials.  &lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-01-15T20:09:05.413" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6386" PostTypeId="1" AcceptedAnswerId="6388" CreationDate="2015-01-16T13:15:34.337" Score="0" ViewCount="64" Body="&lt;p&gt;For a high school project I will be building a robot that will draw an image on a whiteboard for you based on what instructions you give. To accomplish this a motor will move the pen on each axis similar to how a 3rd printer moves but without the Z axis. As far as code goes I'm fine but I was wondering if anyone could give me an insight on how to go about building the robot (i.e. what motors, best system for moving on axises etc) All help is appreciated thanks&lt;/p&gt;&#xA;" OwnerUserId="8888" LastActivityDate="2015-01-16T16:25:08.047" Title="Robotics advice needed" Tags="&lt;motor&gt;&lt;mechanism&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6387" PostTypeId="2" ParentId="6386" CreationDate="2015-01-16T13:55:47.453" Score="0" Body="&lt;p&gt;What you are asking about is commonly referred to as a turtle robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See &lt;a href=&quot;http://en.wikipedia.org/wiki/Turtle_%28robot%29&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wiki&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are a lot of kits, and looking at them will give you some idea as to how to build. Google after reading the Wiki.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/IIqkW.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One example I have seen does it very nicely, &lt;a href=&quot;http://www.robotnav.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Robot Navigation.&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The thing is to reach that level of accuracy requires a gyro and math skills that may be out of reach of High School, but it is certainly worth looking into. Many High School projects succeeded.&lt;/p&gt;&#xA;" OwnerUserId="274" LastActivityDate="2015-01-16T13:55:47.453" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6388" PostTypeId="2" ParentId="6386" CreationDate="2015-01-16T16:03:33.613" Score="1" Body="&lt;p&gt;The alternate method is to move the pen as you suggested (or the board if you have room) instead of the robot. This is called a &lt;a href=&quot;http://www.instructables.com/id/Low-Cost-Hobby-Servo-XY-Table/&quot; rel=&quot;nofollow&quot;&gt;XY Table.&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To do this, you would need a set of stepper motors, some sort of linear rail system for movement, and a hardware controller board.  The software will need to include acceleration and deceleration (and perhaps motion planning) to achieve smooth results. Coarse results can be achieved by simple instructions, as you mentioned. If you do not wish to write your own software, a &lt;a href=&quot;https://www.google.com/webhp?#q=3d%20print%20control%20board&quot; rel=&quot;nofollow&quot;&gt;board designed for 3D printing&lt;/a&gt; would work as is, and you would just need to learn &lt;a href=&quot;https://code.google.com/p/dxf2gcode/&quot; rel=&quot;nofollow&quot;&gt;G-Code&lt;/a&gt; to send to it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Overall, I think typically the cost exceed the turtle bot approach, but the program can be simplier. Just be aware that steppers, can and do fail to step, if the mechanics bind in some way, thus precision of construction is critical.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An alternate of this alternate, is inverse kinematics where the pen is moved by a non XY motion.  Again, the math can be complicated, but success has been &lt;a href=&quot;https://www.youtube.com/watch?v=G3GtdstjT7U&quot; rel=&quot;nofollow&quot;&gt;accomplished&lt;/a&gt; by those younger than high school (well sorta).&lt;/p&gt;&#xA;" OwnerUserId="274" LastEditorUserId="274" LastEditDate="2015-01-16T16:25:08.047" LastActivityDate="2015-01-16T16:25:08.047" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6389" PostTypeId="2" ParentId="6331" CreationDate="2015-01-16T17:41:54.280" Score="2" Body="&lt;p&gt;The device you are looking for is broadly known as a slip ring, but since you are trying to power other motors through it you should be aware that a slip ring is not electrically identical to a wire.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depending on the amount of current you are trying to send, the slight variations in impedance that your slip ring will produce as it spins can damage some motor controllers.  There is no real way (that I'm aware of) to find out whether this will happen to you... until it happens.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2015-01-16T17:41:54.280" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6390" PostTypeId="2" ParentId="6323" CreationDate="2015-01-16T18:10:54.880" Score="5" Body="&lt;p&gt;There are a few ways to read your question, but in general what you are suggesting is a bad idea.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only reason to do it would be in the extreme case where splitting a large battery into several smaller batteries would help you find space for them in a tightly-packed chassis, and even then it might be more trouble than it's worth -- quadrupling the number of connections that might fail.  If you're considering putting a battery on each arm (close to each motor), &lt;a href=&quot;https://robotics.stackexchange.com/q/235/350&quot;&gt;be aware that it does not provide an advantage&lt;/a&gt;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Electrically, your best bet would be to connect all 4 batteries in parallel -- essentially making your own multicell battery, no different than others you could buy off the shelf.  If there's a compelling reason for you to avoid the off-the-shelf option, you haven't mentioned it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you &lt;em&gt;don't&lt;/em&gt; connect all 4 batteries together, you're losing the ability to supply more current to one motor by supplying less to another (e.g. when you want to accelerate your pitch or roll). Worse, you're introducing the possibility (actually, the certainty) that one motor would lose power before the others.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2015-01-19T18:15:51.443" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6393" PostTypeId="2" ParentId="6382" CreationDate="2015-01-16T19:15:08.687" Score="6" Body="&lt;p&gt;Yes, the Jacobian relates the joint velocities to end-effector velocity through this equation:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\mathbf{v}_e = \mathbf{J}(\mathbf{q}) \dot{\mathbf{q}}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where $\mathbf{q}$ is the joint angles, $\dot{\mathbf{q}}$ is the joint velocities, and $\mathbf{v}_e$ is the end-effector velocity.  As you can see, the Jacobian, $\mathbf{J}$, is configuration dependant.  So plug in some joint angles and velocities then you will get the velocity of the end-effector.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To get the Cartesian position of the end-effector, given the joint angles, you use the &lt;em&gt;direct kinematics function&lt;/em&gt; also called &lt;em&gt;forward kinematics&lt;/em&gt;.  There are various methods to do this.  Geometric analysis if your arm is simple enough e.g. a planar 2 link arm.  Product-of-exponentials is another method. But the Denavit-Hartenberg method is probably the most widely used.  I am not going to go into the details of this here.  But basically you will get a transformation matrix for each joint: $\mathbf{A}_i^{i-1}(q_i)$.  That when you plug in the joint angle, you get the pose of joint $i$ relative to joint $i-1$.  These can be combined in a recursive fashion to get the pose of the end-effector relative to the base of the arm:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\mathbf{T}_n^0(\mathbf{q})=\mathbf{A}_1^{0}(q_1) \mathbf{A}_2^{1}(q_2) ... \mathbf{A}_n^{n-1}(q_n)&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that you can differentiate $\mathbf{T}_n^0(\mathbf{q})$ to get the &lt;em&gt;analytical Jacobian&lt;/em&gt;.  But people typically use the &lt;em&gt;geometric Jacobian&lt;/em&gt; which is not as hard to compute.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now to compute the required joint velocities to achieve a desired end-effector velocity, you must invert the Jacobian.  But this only works if the number of DOFs equals the number of dimensions of your space:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\dot{\mathbf{q}} = \mathbf{J}^{-1}(\mathbf{q}) \mathbf{v}_e&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Note that there are some arm configurations (such as singularities) where the Jacobian will not be invertable.)  If you have more DOFs, you are under-constrained.  (i.e. there is more than one solution).  Typically, people use the &lt;em&gt;right pseudo-inverse&lt;/em&gt; of the Jacobian which locally minimizes the norm of joint velocities.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\dot{\mathbf{q}}=\mathbf{J}^{\dagger}\mathbf{v}_{e}&#xA;$$&#xA;where:&#xA;$$&#xA;\mathbf{J}^{\dagger} = \mathbf{J}^T(\mathbf{J}\mathbf{J}^T)^{-1}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that J is still dependant on q, but (q) is dropped for clarity.&lt;/p&gt;&#xA;" OwnerUserId="110" LastEditorUserId="110" LastEditDate="2015-01-30T21:05:33.050" LastActivityDate="2015-01-30T21:05:33.050" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6395" PostTypeId="1" CreationDate="2015-01-17T10:14:54.520" Score="0" ViewCount="495" Body="&lt;p&gt;I've been searching the internet for an answer to this question, but I haven't come across anything that will help me. Basically, we have a Meka Humanoid Robot in our lab, which has a shell head in which a PointGrey USB 3.0 camera is embedded. I use the &lt;a href=&quot;http://wiki.ros.org/pointgrey_camera_driver&quot; rel=&quot;nofollow&quot;&gt;pointgrey_camera_driver&lt;/a&gt;  for obtaining the images from the camera. The head has 2 degrees of freedom (up/down, left/right). I am intending to use this camera with the ar_pose package to detect and track AR tags on objects. I understand that camera's must be calibrated for effective use (forgive me, I don't know much about camera) which I do with the camera_calibration package.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is: Since this camera is &quot;mobile&quot; meaning since the head can move so does the camera, how would I go about calibrating it? Currently, I have the head fixed at a position and I've calibrated the camera in that position and got the parameters in the yaml file which I can load for rectification. In particular, if the head moves does the calibration file that I obtained in the previous position become invalid? If so, as asked before, how would I calibrate this camera for all of its possible field's of view (which can be obtained by moving)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This camera has different video modes and in the mode I'm using I can get a frame rate of 21Hz (i.e. after driver is launched I get 21Hz for rostopic hz /camera/image_raw). However, when I rectify the image using image_proc, I get a frame rate of only about 3Hz on rostopic hz /camera/image_rect_color. Is this normal? Is there a way for me to increase this frame rate?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please let me know if any more information is required.&#xA;Thanks for your help!&lt;/p&gt;&#xA;" OwnerUserId="8900" LastActivityDate="2015-01-19T01:11:08.333" Title="Mobile Camera Calibration and rectification frame rate" Tags="&lt;ros&gt;&lt;cameras&gt;&lt;calibration&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6396" PostTypeId="2" ParentId="6395" CreationDate="2015-01-17T11:17:35.967" Score="1" Body="&lt;p&gt;When you refer to &amp;quot;camera calibration&amp;quot; I assume you mean the estimation of the camera/lens principal point, focal lengths and distortion coefficient; these are called the &lt;em&gt;intrinsic parameters&lt;/em&gt;. From a calibration you can also determine the &lt;strong&gt;extrinsic parameters&lt;/strong&gt; (camera position and orientation) at the time the image was taken. From what I can understand you do not need the extrinsics.&lt;/p&gt;&#xA;&lt;p&gt;Your questions:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;how would I calibrate this camera for all of its possible field's of view (which can be obtained by moving)?&lt;/p&gt;&#xA;&lt;p&gt;if the head moves does the calibration file that I obtained in the previous position become invalid?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;If your camera and lens are constant-zoom and not auto-focus (as many Point Grey research cameras are, unsure what lens you're using) then you can simply calibrate the camera once and you are done. The intrinsics will not change and remain valid.&lt;/p&gt;&#xA;&lt;p&gt;I always calibrate using the MATLAB &lt;a href=&quot;http://www.vision.caltech.edu/bouguetj/calib_doc/&quot; rel=&quot;nofollow noreferrer&quot;&gt;CALTECH camera calibration toolbox&lt;/a&gt;, however there are less time-consuming automated software such as &lt;a href=&quot;http://downloads.agisoft.ru/lens/doc/en/lens.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Agisoft Lens&lt;/a&gt; (I can't find the official website for some reason). As a standard I usually calibrate using at least 21 images (the 21 is from wisdom from a lecturer). When you get the values it is very important to save ALL the values as you do not want to recalibrate twice, one calibration may take up to an hour if you are quick.&lt;/p&gt;&#xA;&lt;p&gt;If your camera is not constant-zoom or is auto-focus then your camera intrinsics change almost constantly, I have never tried to work with such a camera due to its difficulty.&lt;/p&gt;&#xA;&lt;p&gt;EDIT:&#xA;When the &amp;quot;field of view&amp;quot; (please read &lt;a href=&quot;https://en.wikipedia.org/wiki/Field_of_view#Machine_vision&quot; rel=&quot;nofollow noreferrer&quot;&gt;definition&lt;/a&gt;) changes the focal length or zoom has changed, which will invalidate the intrinsics acquired from camera calibration. &lt;strong&gt;Simply changing the pose of the camera will not invalidate the intrinsic parameters acquired from calibration&lt;/strong&gt;.&lt;/p&gt;&#xA;" OwnerUserId="8859" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2015-01-19T01:11:08.333" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6397" PostTypeId="2" ParentId="6355" CreationDate="2015-01-17T19:54:37.580" Score="0" Body="&lt;p&gt;Update:&#xA;After more debugging I have traced the variance in the potentiometer to a shaky ground in the Roboclaw 2x60a motor controller.  When I connect the ground to the Roboclaw the potentiometers vary by +-4 through +-6 degrees when the ground is not connected to the Roboclaw the pots vary by +- 1 sometimes rarely +- 2.  I have tried using the arduino as a logic battery and it doesn't help.&lt;/p&gt;&#xA;" OwnerUserId="6818" LastActivityDate="2015-01-17T19:54:37.580" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6398" PostTypeId="1" AcceptedAnswerId="6399" CreationDate="2015-01-17T21:38:32.953" Score="0" ViewCount="667" Body="&lt;p&gt;Background:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am using an Arduino Mega connected to a RoboClaw 2x60A motor driver.  I asked &lt;a href=&quot;https://robotics.stackexchange.com/questions/6355/dealing-with-position-inaccuracy-and-latency-in-pid-loop&quot;&gt;this question&lt;/a&gt; about the system, but I have since narrowed the scope of the problem.  I tried adding a bunch of different size capacitor between the 5v and gnd, when the RoboClaw is switched off then a 470 micro farad capacitor seems to eliminate all noise but when I turn on the RoboClaw no capacitance valued I tried, (4.7,10,100,220,320,470,540,690,1000,1100)microfarads seems to eliminate any noise.  I even tried hooking up a 12v battery with a 5v regulator to the logic battery on the RoboClaw and connecting it to the ground on the Arduino.  Then I tried using a separate battery for the pots and connecting the AREF to the +5v on the battery.&lt;br&gt;&#xA;No matter what I try when the roboclaw is on the potentiometer value will vary as much as +-6 degrees.  I found the degrees using:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;map(analogRead(A0),0,1023,0,300) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition I took a bunch of data and graphed it and found that if I took 25 instantaneous data points and averaged them together it would help significantly reduce the variance.  I chose 25 because it take 2.9 ms, 100 worked really well but it took 11 ms.  To help explain the averageing of analog read, here is my code:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;unsigned int num = 0;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;for (int i = 0; i&amp;lt;25; i++){&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;num+=analogRead(A0);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;}&lt;/p&gt;&#xA;&#xA;&lt;p&gt;potReading = num/25;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My Question:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is my next step in eliminating this noise?  Is there a formula I can use to find a better capacitance value? Should I try putting capacitors on each potentiometer between 5V and gnd?  Any other IC I should try to help with this?  On my previous question someone mentioned optocouplers, what size would work best and where in the circuit do they go?  Is there code I can write to help eliminate the size of the variance beyond what I have written?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks so much for any help,&#xA;Joel&lt;/p&gt;&#xA;" OwnerUserId="6818" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2015-01-19T20:02:47.060" Title="Eliminating Electrical Noise from my motor driver" Tags="&lt;arduino&gt;&lt;motor&gt;&lt;electronics&gt;&lt;noise&gt;&lt;driver&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6399" PostTypeId="2" ParentId="6398" CreationDate="2015-01-18T05:21:09.507" Score="1" Body="&lt;p&gt;First off, you should probably replace all electrical connections between the motor driver and other circuitry with optocouplers (I hope you aren't using the analog interface). Then, make sure that the power supplies are completely isolated. You should probably keep the grounds tied together with a 500k or one meg resistor the keep them form varying hugely. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you still get problems you could try shielding the motor driver and cables. I've never had rf interference problems with arduino(s), but it might be worth a try.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, if nothing else, make sure that the power cables aren't daisy-chained. If you have to drive them off the same battery, make sure that you are using a star configuration. You should also probably &lt;strong&gt;try a ferrite choke&lt;/strong&gt; on the power supply line if you don't separate the power supplies. &lt;/p&gt;&#xA;" OwnerUserId="1667" LastActivityDate="2015-01-18T05:21:09.507" CommentCount="12" ContentLicense="CC BY-SA 3.0" />
  <row Id="6401" PostTypeId="2" ParentId="2250" CreationDate="2015-01-19T16:31:14.533" Score="2" Body="&lt;p&gt;Aside from somewhat rare cases, there is &lt;strong&gt;no recipe&lt;/strong&gt; for solving Inverse Kinematics (IK) of &lt;strong&gt;specific manipulators&lt;/strong&gt; that are equipped with a number of degrees of freedom (DOF) greater than or equal to 6. Even for DOF&amp;lt;6, roboticists tend to apply numeric methods rather than filling sheets of paper to come up with geometric solutions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is to say that the question &quot;&lt;strong&gt;can you point me at IK algorithms for this robot?&lt;/strong&gt;&quot; is wrongly posed, because we just have generic IK algorithms, meaning that such a methodology is not tightly linked to any particular robot. However, in my opinion, also asking &quot;&lt;strong&gt;can you tell me something about IK?&lt;/strong&gt;&quot; is not valid in the SE context, given that the discipline is so broad and needs to be the matter of a careful study. You have to read a book and understand all the details behind, even the smallest; we have plenty of online resources available for that.&#xA;Answers to the latter question can be also derived by browsing SE (look &lt;a href=&quot;https://robotics.stackexchange.com/questions/299/how-can-the-inverse-kinematics-problem-be-solved&quot;&gt;here&lt;/a&gt;), even though they represent quite a shallow view on the problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway, a quick search gives the following result about experimenting a specific IK method (just one out of the large variety of available techniques) with the SMART-3: &lt;a href=&quot;https://www.google.it/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=4&amp;amp;ved=0CC4QFjAD&amp;amp;url=http%3A%2F%2Ftwiki.di.uniroma1.it%2F~andrea%2FTesi%2FMaurizioDiPietro-Origami3D%2Farticoli%2Fik%2FSingularity-Robust%2520Second-Order%2520Kinamatic%2520Control%2520of%2520Robot%2520Man.ps&amp;amp;ei=oCm9VOG9L5bbapylgqAN&amp;amp;usg=AFQjCNHZjn1jnW0Jy_AhpaCXPyI2IOb4TA&amp;amp;sig2=zQN8kdvM1LYH8JRGEpTbSw&amp;amp;bvm=bv.83829542,d.d2s&amp;amp;cad=rja&quot; rel=&quot;nofollow noreferrer&quot;&gt;link&lt;/a&gt;. This resource might be also introductory to the IK theory.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2015-01-19T16:54:54.570" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6402" PostTypeId="2" ParentId="6398" CreationDate="2015-01-19T20:02:47.060" Score="0" Body="&lt;p&gt;I bought &lt;a href=&quot;https://www.adafruit.com/products/1083&quot; rel=&quot;nofollow&quot;&gt;this ADC breakout board&lt;/a&gt; I will use a battery for this and put optocouplers on the i2c lines to completely separate the ADC circuit from the rest of the circuits.  And it gives me a little better resolution on the potentiometers.&lt;/p&gt;&#xA;" OwnerUserId="6818" LastActivityDate="2015-01-19T20:02:47.060" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6403" PostTypeId="2" ParentId="2250" CreationDate="2015-01-19T23:27:08.030" Score="4" Body="&lt;p&gt;To expand on Ugo's answer, some libraries that implement these general IK algorithms:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://openrave.org/&quot; rel=&quot;nofollow&quot;&gt;OpenRave&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;ROS &lt;a href=&quot;http://moveit.ros.org/&quot; rel=&quot;nofollow&quot;&gt;MoveIt!&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Matlab &lt;a href=&quot;http://www.petercorke.com/Robotics_Toolbox.html&quot; rel=&quot;nofollow&quot;&gt;Robotics Toolkit&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.orocos.org/&quot; rel=&quot;nofollow&quot;&gt;Orocos&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;For people just starting out with kinematics, I highly suggest using one of these powerful libraries.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-01-19T23:27:08.030" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6404" PostTypeId="2" ParentId="2250" CreationDate="2015-01-20T02:31:16.493" Score="1" Body="&lt;p&gt;Like Ugo, I think it is doubtful that you will find a &quot;plug and play&quot; IK implementation for a commercial robot. There are several approaches to IK, one method that I know of for robotic arms is based on Denavit-Hartenberg parameters which allows you to very deliberately setup a transformation matrix representation of the arm. With these matrices, you can implement forward and inverse kinematics as &lt;a href=&quot;http://www-scf.usc.edu/~csci545/slides/Lect5_Forward-InverseKinematicsII_Short.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;outlined here&lt;/a&gt;. Unfortunately for you, a 6-axis robot arm is pretty tough for having &quot;no idea about robotics&quot;. For robotic arms with a high degree of freedom, the IK problem is complicated by the fact that there can be two solutions for many of the joints, the &quot;elbow up&quot; and the &quot;elbow down&quot; solution. Thus numerical methods are typically needed. This will probably require a lot of learning to get it working for your robot. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did a quick search and found additional StackExchange discussion on this &lt;a href=&quot;https://robotics.stackexchange.com/questions/299/how-can-the-inverse-kinematics-problem-be-solved&quot;&gt;topic that may be useful&lt;/a&gt;. &lt;/p&gt;&#xA;" OwnerUserId="4169" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2015-01-20T02:31:16.493" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6405" PostTypeId="1" AcceptedAnswerId="6414" CreationDate="2015-01-20T08:57:02.873" Score="5" ViewCount="2329" Body="&lt;p&gt;I would like to know the simple difference between kinematic, dynamic and differential constraints in robotic motion planning.&lt;/p&gt;&#xA;" OwnerUserId="8916" LastActivityDate="2015-01-21T13:26:16.510" Title="Difference between kinematic, dynamic and differential constraints" Tags="&lt;motion-planning&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6406" PostTypeId="1" AcceptedAnswerId="6407" CreationDate="2015-01-20T09:04:22.627" Score="4" ViewCount="998" Body="&lt;p&gt;I would like to know the difference between state space and control space in relation to motion planning. I would like a simpler explanation.&lt;/p&gt;&#xA;" OwnerUserId="8916" LastEditorUserId="8916" LastEditDate="2015-01-20T10:15:43.910" LastActivityDate="2015-01-20T13:33:26.633" Title="State space and control space" Tags="&lt;motion-planning&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6407" PostTypeId="2" ParentId="6406" CreationDate="2015-01-20T13:33:26.633" Score="4" Body="&lt;p&gt;The state space is the space of possible values that the state can take. For any given system it depends on which variables you are taking into account. For instance it is common to consider the 2D position $(x, y)$ and the orientation $\theta$ of the system. For this example the state space consists of three dimensions where $x$ and $y$ could conceivable come from either $\mathbb{R}$ or some bounded subset depending on the problem and $\theta \in [0, 2\pi)$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similarly the control space consists of the possible control values that can be applied to the system. For example if you using torque control on a pendulum then it would be the torques your motor can produce. Usually a bounded, and in practice a discrete, subset of $\mathbb{R}$.&lt;/p&gt;&#xA;" OwnerUserId="177" LastActivityDate="2015-01-20T13:33:26.633" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6408" PostTypeId="1" AcceptedAnswerId="6411" CreationDate="2015-01-20T18:41:46.057" Score="-3" ViewCount="164" Body="&lt;p&gt;I'm fairly new to 3D printing. I'm considering motherboards I might use to control my printer. I'm hoping to find a board that I can easily control using either:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;ReplicatorG&lt;/li&gt;&#xA;&lt;li&gt;MatterControl&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I like these programs because they seem reasonably current, mature and straight-forward for beginners.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is &lt;strong&gt;can I control a Rambo V1.2 board from either of these programs?&lt;/strong&gt; These programs don't include explicit support for the RAMBo as far as I can see, but maybe I'm missing how printing software works at this point?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h1&gt;What is a RAMBo?&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;The RAMBo V1.2 board is a creative-commons/open source design. It integrates an Arduino, Stepper-Motor drivers, Heater &amp;amp; Fan controls, Power Management and more.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An example implementation looks like this:&#xA;&lt;img src=&quot;https://i.stack.imgur.com/bJ6KR.jpg&quot; alt=&quot;RepRap Rambo V1.2G&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For more background info on what a RAMBo board is, you may read about it on the &lt;a href=&quot;http://reprap.org/wiki/Rambo&quot; rel=&quot;nofollow noreferrer&quot;&gt;RepRap community wiki&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="8919" LastEditorUserId="8919" LastEditDate="2015-01-21T19:40:35.030" LastActivityDate="2015-01-21T19:40:35.030" Title="Can ReplicatorG or MatterControl drive a RepRap RAMBo motherboard?" Tags="&lt;3d-printing&gt;&lt;reprap&gt;" AnswerCount="1" CommentCount="11" FavoriteCount="1" ClosedDate="2015-01-21T18:08:29.337" ContentLicense="CC BY-SA 3.0" />
  <row Id="6409" PostTypeId="1" CreationDate="2015-01-20T20:08:06.023" Score="-2" ViewCount="150" Body="&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=27HkxMo6qK0&quot; rel=&quot;nofollow&quot;&gt;ATLAS Gets an Upgrade&lt;/a&gt; - the new video of the Atlas robot is out so I'm curious about the IDE with which they are coding this thing.&lt;/p&gt;&#xA;" OwnerUserId="8920" LastEditorUserId="9176" LastEditDate="2015-07-03T04:30:02.337" LastActivityDate="2015-07-03T04:30:02.337" Title="The IDE using for programming the Atlas robots" Tags="&lt;dynamics&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6411" PostTypeId="2" ParentId="6408" CreationDate="2015-01-20T22:16:44.940" Score="0" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;These programs don't include explicit support for the RAMBo as far as&#xA;  I can see&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Turns out the reason for that is because Host software has evolved to declare support for specific firmware interfaces. The industry as evolved so that &lt;a href=&quot;http://reprap.org/wiki/List_of_Firmware&quot; rel=&quot;nofollow&quot;&gt;there are several popular firmwares available&lt;/a&gt;. These firmwares they tend to support various motherboard designs including the RAMBo and RAMPS specs (RAMBo is a refinement of RAMPS). Some even support very early RepRap boards such as the Gen3 through Gen6 boards as were found on early MakerBots, for example.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h1&gt;The Answer&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;YES, MatterControl will drive a RAMBo board, provided it's flashed with a supported firmware. &lt;a href=&quot;http://reprap.org/wiki/List_of_Firmware#Marlin&quot; rel=&quot;nofollow&quot;&gt;Marlin&lt;/a&gt;, for example, is a firmware that MatterControl supports.&lt;/p&gt;&#xA;" OwnerUserId="8919" LastEditorUserId="8919" LastEditDate="2015-01-21T19:21:26.417" LastActivityDate="2015-01-21T19:21:26.417" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6412" PostTypeId="1" CreationDate="2015-01-21T11:20:24.537" Score="1" ViewCount="1208" Body="&lt;p&gt;I  have a BeagleBoneBlack and would like to use it to control a servo for my robot. I'm mostly programming in ros and as such am looking preferably for a c++ solution. Is there an easy way of controlling a servo on a BBB running ubuntu 14.04 on the kernal 3.8? Most tutorials I have tried referred to files I did not have so I'm unsure.&lt;/p&gt;&#xA;" OwnerUserId="7226" LastEditorUserId="37" LastEditDate="2018-08-15T15:20:54.620" LastActivityDate="2018-08-15T15:20:54.620" Title="How do I control a servo using a beaglebone black running ubuntu" Tags="&lt;ros&gt;&lt;servomotor&gt;&lt;c++&gt;&lt;beagle-bone&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6413" PostTypeId="2" ParentId="4610" CreationDate="2015-01-21T13:12:11.740" Score="2" Body="&lt;p&gt;The Denavit-Hartenberg parameters $(r,\alpha,d,\theta)$ (according to &lt;a href=&quot;http://en.wikipedia.org/wiki/Denavit%E2%80%93Hartenberg_parameters&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;) actually depicts rigid displacement of a directed point-line (i.e. a line with a particular point selected on it, where the origin of the local frame is located) in space, bearing in mind that coordinate frames are set up in such a way that $r,\alpha$ is about x-axis and $d,\theta$ is about the z-axis. In other words, consider the problem of moving the ith joint axis to coincide with the (i+1)th joint axis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem of D-H convention lies in the choice of this particular point on the axis line. When the two adjacent axes are no in parallel, the points on each are chosen as the foot of their common perpendicular. However, when two adjacent axes are in parallel, there is no unique way of picking the particular point on the axis line. Sometimes, it is referred to as parametric discontinuity in the sense the mapping $(r,\alpha,d,\theta)\mapsto\text{line location}$ is no longer one to one, and you may choose parameter $d$ arbitrarily. Besides, it is also cumbersome to deal with prismatic joint. It is true, as the other answer said, there are different conventions of D-H parameters, which added to the difficulties.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think this is why you should use screw or twist coordinate in the first place. There are 6 numbers in the twist coordinate, obeying 2 constraints. But they are extremely easy to work with both mentally and computationally (probably with the help of dual vector representation). A good source for this much better convention can be found in the book &lt;strong&gt;A Mathematical Introduction to Robotic Manipulation&lt;/strong&gt; (free &lt;a href=&quot;http://www.cds.caltech.edu/~murray/mlswiki/images/0/02/Mls94-complete.pdf&quot; rel=&quot;nofollow&quot;&gt;online&lt;/a&gt;). Just go through ch2 and ch3 and you will realize how easy it is work with than the D-H convention, and most importantly it is free of all the problems and limitations of D-H convention.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would take the chance to advocate embracing the twist coordinate convention. It is much easier to work with, geometrically more intuitive, analytically error-proof and computationally efficient (note that it is easy to bring the whole thing into a &lt;a href=&quot;http://en.wikipedia.org/wiki/Geometric_algebra&quot; rel=&quot;nofollow&quot;&gt;geometric algebra&lt;/a&gt; framework which the CG community finds much pleasure with). &lt;/p&gt;&#xA;" OwnerUserId="6918" LastActivityDate="2015-01-21T13:12:11.740" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6414" PostTypeId="2" ParentId="6405" CreationDate="2015-01-21T13:26:16.510" Score="7" Body="&lt;p&gt;Kinematic constraints involves only constraint on the motion (kinematics means the study of motion without considering the force that causes it), which may involve configuration variables and their time derivatives (including higher order derivatives). In particular, no inertial parameters are involved in the constraint. The constraint is geometric in nature, since it restricts the free motion in your configuration space (or state space if there is some constraint on the velocity) to a submanifold defined by the constraints. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the constraints involve no time derivative of the configuration variables, it is sometimes called a holonomic constraint. Your robot is constrained to move on a submanifold (or a hypersurface if it pleases you). In this case, you have a reduced number of independent configuration variables, or to say the robot has a reduced number of degrees of freedom&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the constraints involve time derivative of the configuration variables, it is called a differential constraint. It is very tricky in this situation, since some differential constraints might actually come from time differentiation of holonomic constraints, in which case we say it is integrable. Integrable differential constraints are in fact holonomic constraints and should be treated as one. Nonintegrable differential constraints are also called nonholonomic constraints. It may or may not reduce the robot's degrees of freedom, depending on certain reachability conditions (similar to a controllability condition).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A dynamic constraint, conceivably, is one involving not only kinematics but also inertias, forces, dampings, stiffness, etc. Usually, up to second order configuration variables are involved (third order may be involved in the case of vibration analysis, trajectory generation, etc).&lt;/p&gt;&#xA;" OwnerUserId="6918" LastActivityDate="2015-01-21T13:26:16.510" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6415" PostTypeId="2" ParentId="6412" CreationDate="2015-01-21T15:44:37.137" Score="2" Body="&lt;p&gt;It's python but easy to install: &lt;a href=&quot;https://learn.adafruit.com/setting-up-io-python-library-on-beaglebone-black/pwm&quot; rel=&quot;nofollow&quot;&gt;https://learn.adafruit.com/setting-up-io-python-library-on-beaglebone-black/pwm&lt;/a&gt;. Otherwise you can fopen files in the device tree and write to them, or you can open /dev/mem and directly access the registers for the PWM drivers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I strongly recommend using the first method it is far easier than the third and basically the same as the second just far more tested and probably well written. &lt;/p&gt;&#xA;" OwnerUserId="8858" LastActivityDate="2015-01-21T15:44:37.137" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6416" PostTypeId="2" ParentId="6409" CreationDate="2015-01-21T19:25:57.097" Score="2" Body="&lt;p&gt;That definitely looks like Sublime to me...I'm pretty confident I can see Sublime's signature navigation window in the top right.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That being said...#VIM4Life&lt;/p&gt;&#xA;" OwnerUserId="1960" LastActivityDate="2015-01-21T19:25:57.097" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6417" PostTypeId="1" CreationDate="2015-01-21T22:53:21.783" Score="4" ViewCount="4497" Body="&lt;p&gt;As far as i can tell, both LQR and PID controllers can both be applied to the cart-pole (inverted pendulum) problem.  What are the pros/cons to using one controller over the other for this particular problem?  Are there any reasons/situations where I should prefer one over the other for this problem?&lt;/p&gt;&#xA;" OwnerUserId="2295" LastEditorUserId="2295" LastEditDate="2015-01-22T01:51:35.187" LastActivityDate="2015-09-16T20:47:56.813" Title="Comparing LQR and PID controllers for inverted pendulum problem" Tags="&lt;control&gt;&lt;pid&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6418" PostTypeId="1" CreationDate="2015-01-21T23:23:55.920" Score="4" ViewCount="152" Body="&lt;p&gt;I am hoping someone might be able to nudge me in the right direction (apologies for the long post but wanted to get all the information I have gained so far down.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically I am after a solution to record the path my vessel took under water for later analysis…like a bread crumb trail.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Requirements:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ideally have a range of at least 30meters however if there were no other options I would accept down to 10meters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Working fresh and salt water.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The vessel is (25cm x 8cm) so size and power consumption are a factors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It would be traveling roughly parallel to the sea bed at variable distances from the sea bed (range of 0-30 meters)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does not need to be super accurate, anything less than 5 meters would be fine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Measurement speed range of 0 – 4 mph.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Measure direction the object was moving in (i.e. forwards, sideways, backwards)…I am planning to use a compass to ascertain N, S, E, W heading.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Options I have discounted:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Accelerometers:&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This was my initial thinking but in doing some reading it seems they are not suited to my needs (unless you spend loads of money, and then the solution would end up being too heavy anyway).&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Optical Flow:&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Looks too new (from a consumer perspective) / complicated. I don’t know what its range would be like. Also requires additional sonar sensor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Current favorites:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Sonar:&#xA;&lt;a href=&quot;http://www.alibaba.com/product-detail/1mhz-waterproof-transducer-underwater-ultrasonic-sensor_1911722468.html&quot; rel=&quot;nofollow&quot;&gt;http://www.alibaba.com/product-detail/1mhz-waterproof-transducer-underwater-ultrasonic-sensor_1911722468.html&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Simplest use is distance from object, however can use doppler effect to analyse speed of a moving object.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;40m range, nice!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Presumptions:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I fired this at an angle to the seabed I could deduce the speed the floor was ‘moving’ below which would give me the speed of my vessel?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am also presuming that I could interpret direction of movement from the data?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I presume that the sensor would need to be aimed at an angle of around 45 degrees down to the seabed?&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Laser Rangefinder:&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Although it works differently to the Sonar the premise of use looks the same, and thus I have the same queries with this as I do with the Sonar above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Presume if I mounted the sensor behind high quality glass (to waterproof it) then performance would not be impacted that much.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a lot more costly so if it does not give me any advantage over sonar I guess there is no point.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Water Flow Meter:&#xA;&lt;a href=&quot;http://www.robotshop.com/en/adafruit-water-flow-sensor.html&quot; rel=&quot;nofollow&quot;&gt;http://www.robotshop.com/en/adafruit-water-flow-sensor.html&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Super low cost and simple compared with the other options, I would potentially use a funnel to increase water pressure if it needs more sensitivity at low speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would then just need to calibrate the pulses from the sensor to a speed reading.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Significant limitations of this is it would be registering a speed of 0 if the vessel was simply drifting with the current….its speed over the seabed that I am interested in.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Current favorite option is sonar (with the option of using water flow meter as second data source)…however are my sonar presumptions correct, have I missed anything?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any better ideas?&lt;/p&gt;&#xA;" OwnerUserId="8929" LastActivityDate="2016-05-11T13:07:29.363" Title="Tracking Landspeed Underwater" Tags="&lt;sonar&gt;&lt;laser&gt;&lt;underwater&gt;&lt;rangefinder&gt;&lt;acoustic-rangefinder&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6419" PostTypeId="2" ParentId="6418" CreationDate="2015-01-22T01:01:36.717" Score="2" Body="&lt;p&gt;Another sensor that you should investigate is &lt;a href=&quot;http://en.wikipedia.org/wiki/Ultra-short_baseline&quot; rel=&quot;nofollow&quot;&gt;ultra-short baseline&lt;/a&gt; (USBL).  I have used the &lt;a href=&quot;http://www.tritech.co.uk/product/usbl-tracking-system-micronnav&quot; rel=&quot;nofollow&quot;&gt;MicronNav&lt;/a&gt; with success in the past.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You mentioned accelerometers, but what I think you really meant is an &lt;a href=&quot;http://en.wikipedia.org/wiki/Inertial_navigation_system&quot; rel=&quot;nofollow&quot;&gt;inertial navigation system&lt;/a&gt;.  These fuse data from accelerometers, gyros, compass, and optionally GPS for a more accurate dead-reckoning.  I have used the  &lt;a href=&quot;http://www.vectornav.com/products/vn200-smd&quot; rel=&quot;nofollow&quot;&gt;VectorNav&lt;/a&gt; in the past for an autonomous surface craft.&lt;/p&gt;&#xA;" OwnerUserId="110" LastEditorUserId="110" LastEditDate="2016-05-11T13:07:29.363" LastActivityDate="2016-05-11T13:07:29.363" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6420" PostTypeId="2" ParentId="6418" CreationDate="2015-01-22T01:14:30.170" Score="0" Body="&lt;p&gt;I do not work with AUVs however I have read a few navigation papers for AUVs, one promising off-the-shelf navigation system is the Doppler Velocity Log (DVL). I am unsure as to how expensive it is but I can imagine it is quite costly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As Ben has said accelerometers alone will not be of much use, but an INS might be able to. I have used the VectorNav before in GPS and magnetometer-denied environments. If you can't get GPS signal then it can still give you accurate orientation estimates but probably unusable position estimates. Iron interference will also be an issue that can be solved by mounting. The VectorNav 100 (oldest model) starts from upwards of $1000USD.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are not from a robotics background, and are not capable of producing your own navigation system, this problem will be difficult to solve unless you are willing to spend a lot of money.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I were to approach this problem in a GPS-denied environment I would use a cheap IMU (accelerometer + gyro + compass), a depth-meter, flow-meter and visual odometry (provided you can see the floor). These different sensors would all need to be fused together using a data-fusion filter such as an (Extended) Kalman Filter.&#xA;The aim would be to keep a very accurate orientation estimate while using the flow meter and visual odometry to accurately know the forward speed of the vehicle. There are still no 'correcting' measurements to the position, so the solution will always drift depending on the conditions. &lt;/p&gt;&#xA;" OwnerUserId="8859" LastActivityDate="2015-01-22T01:14:30.170" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6421" PostTypeId="2" ParentId="6418" CreationDate="2015-01-22T07:41:46.823" Score="1" Body="&lt;p&gt;So this is really a hard task. Estimating the position of a AUV is still a large challenge even in research.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are sensors like as DVL (Doppler Velocity Log) available that can estimate the speed over ground. These sensors working okay, but they only estimating the speed. These devices are precise enough for your use case BUT these devices are to large and to heavy. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sonar systems like a USBL System requires additional infrastructure outside the vehicle, and of the shelf systems are to heavy too as i assume. They smallest ones like the TritechNav system have roughly the size of a coke-can. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Accelerometer are to imprecise, forget this approach.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have the background and the resources to develop a smaller device i would to for the following solution:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Use a INS Sensor for orientation Estimation (Like Mti Xsens or similar products)&lt;/li&gt;&#xA;&lt;li&gt;Depth-Sensor (i have good experience with sensortechnics)&lt;/li&gt;&#xA;&lt;li&gt;Use a Fossen-Based motion model for motion prediction&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Develop a distance estimator with the transducer you mentioned&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;You can simply send a Chirp-Ping to you base station and wait for the response&lt;/li&gt;&#xA;&lt;li&gt;if you implement this on a real time capable µC you can calculate the distance based on the time until you received the pong from the base-station&lt;/li&gt;&#xA;&lt;li&gt;(You need to assume a fixed speed-of-sound-in water but for you use case this should be fine&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Feed the estimation from the motion-model+imu + distance estimation to fixed ground station in a particle filter.&lt;/li&gt;&#xA;&lt;li&gt;You can add the flow-meter or GPS (when surfaces) to correct your estimations&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;We played around with parts of such a setup, and have had good results, the most tricky part is to develop a good electronic for signal processing of the ping/pong system.&lt;/p&gt;&#xA;" OwnerUserId="4508" LastActivityDate="2015-01-22T07:41:46.823" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6422" PostTypeId="2" ParentId="5227" CreationDate="2015-01-22T15:42:15.363" Score="0" Body="&lt;p&gt;You are probably new to the business. Richard's book follows standard approach in mechanics textbook with an emphasis on coordinate invariance (a notion commonly popped up in Lie group theory). The two most important references of this book is Greenwood's classical dynamics and John McCarthy's Introduction to theoretical kinematics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The advantage of Richard's approach is that you can just use any coordinate system, inertial or moving. In fact, if you really understand the book up to certain level, you will realize that instantaneously there is no difference between the two at all: when you use body fixed coordinate frame to compute the kinematics or dynamics, you are actually referring to an inertial frame which at that moment coincides with the body frame (we usually say, a copy). So there is no so called reverse order whatsoever. The true reversion happens only when you switch the roles of the base and the end-effector (a notion usually only used in mechanism synthesis).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later when you move on to dynamics, you will see everything computed in body frame. The tricky part is that in classical dynamics, laws of physics only respects inertial frame, or in other words, invariant under the 10 dimensional Galilean transformation. So the restatement of Newton's laws for example, has to be made first in inertial frame, and then transformed to body frame. So on the one hand, equation of motions should start within a inertial frame, but on the other hand, it is eventually transformed into body frame. You may ask why?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A 'High-Big-Up' answer may process as follows. It is a common knowledge that there is no bi-invariant Riemannian metric on $SE(3)$. This means the notion of &quot;error&quot; on $SE(3)$ for example, is not consistent under arbitrary change of inertial and/or body frames (and so it also affects the curvature and hence dynamics). For the past 40 or so years, people satisfy themselves with left or right invariant metric instead. The philosophy behind this is that if they can choose some preferred inertial or body frame, then only right- or left-invariance is good enough (in terms of consistency) for engineering applications. The inertia tensor written in body frame for example, serves as a left-invariant (i.e. invariant under change of inertial frame) metric for a single rigid body, is chosen based on the fact that there is actually a preferred body frame, namely the one located at the center of mass with axes aligned with the principal axes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nevetheless, the equation of motion has a coordinate invariant form (something like $M\dot V-ad_V^T(MV)=F$), though the Riemmanian metric might be different under change of coordinate frames. The reason is that Newton's second law is geometric in nature: $M\nabla_VV=F$, i.e. essentially a geodesic equation. This is the beauty of the matrix Lie group machinery: elegance in analytic derivation. But it is not necessarily computationally efficient. These days people are moving on to geometric algebra. But Lie theory is inevitable anyway, and is equivalent to Richard's matrix approach under proper linear representations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hopes my mumbo jumbo didn't kill the fun of the book.&lt;/p&gt;&#xA;" OwnerUserId="6918" LastActivityDate="2015-01-22T15:42:15.363" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6423" PostTypeId="1" CreationDate="2015-01-22T22:18:30.913" Score="2" ViewCount="3100" Body="&lt;p&gt;I am trying to implement a particle filter in MATLAB to filter a robot's movement in 2D but I'm stuck at the weight function. My robot is detected by a camera via two points, so a single measure is a quadruple (&lt;code&gt;xp1&lt;/code&gt;, &lt;code&gt;yp1&lt;/code&gt;, &lt;code&gt;xp2&lt;/code&gt;, &lt;code&gt;yp2&lt;/code&gt;) and states are the usual (&lt;code&gt;x&lt;/code&gt;,&lt;code&gt;y&lt;/code&gt;,&lt;code&gt;alpha&lt;/code&gt;) to detect its pose in 2D. As far as my understanding goes I should assign a weight to each particle based on its likelihood to be in that particle position with regards to the current measurement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also have the measure function to calculate an expected measurement for a particle, so basically I have, for each instant, the actual measurement and the measurement that a single particle would have generated if it were at the actual state. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming all noises are Gaussian, how can I implement the weight function? I kind of noticed the &lt;code&gt;mvnpdf&lt;/code&gt; function in MATLAB, but I can't actually find a way to apply it to my problem.&lt;/p&gt;&#xA;" OwnerUserId="8931" LastEditorUserId="-1" LastEditDate="2015-06-02T12:44:38.703" LastActivityDate="2015-10-05T14:13:01.707" Title="Particle filter weight function" Tags="&lt;mobile-robot&gt;&lt;wheeled-robot&gt;&lt;particle-filter&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6428" PostTypeId="1" AcceptedAnswerId="6494" CreationDate="2015-01-23T15:38:08.377" Score="1" ViewCount="41" Body="&lt;p&gt;Is there a sensor that will produce a sinusoidal signal phase locked to a high RPM (7000 RPM) shaft? I am attempting to build a coaxial helicopter based on the architecture described in &lt;a href=&quot;http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=6696528&quot; rel=&quot;nofollow&quot;&gt;this paper&lt;/a&gt; which requires increasing and decreasing drive torque once per revolution, and I would like to do this modulation in hardware.&lt;/p&gt;&#xA;" OwnerUserId="8938" LastActivityDate="2015-02-01T00:46:33.060" Title="Sensor that will produce a sinusoid phase locked to a high RPM Shaft" Tags="&lt;sensors&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6429" PostTypeId="1" CreationDate="2015-01-23T16:58:51.847" Score="1" ViewCount="142" Body="&lt;p&gt;I have stumbled upon an equation (&lt;a href=&quot;https://i.stack.imgur.com/hv64E.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://i.stack.imgur.com/hv64E.png&lt;/a&gt;), where the probability of an occupancy grid map cell is calculated. My teacher insists that it's possible to approximate the algorithmic complexity of this long equation, but I'm not so sure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The description of the factors used in this equation are described &lt;a href=&quot;http://roboticsclub.org/redmine/projects/colonyscout/repository/revisions/master/raw/docs/Research/nps424A.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; on page 11 (item 26). With keeping in mind that this calculates occupancy probabilities of a 2 dimensional array from sensor measurements, is it really possible to approximate the algorithmic complexity of actually calculating occupancy with this equation in BigO by just taking a look at it and not delving much deeper into the details? &lt;/p&gt;&#xA;" OwnerUserId="8939" LastActivityDate="2015-04-25T07:32:23.683" Title="Grid mapping probability calculation algorithmic complexity" Tags="&lt;algorithm&gt;&lt;probability&gt;&lt;occupancygrid&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6430" PostTypeId="1" AcceptedAnswerId="6432" CreationDate="2015-01-23T17:35:22.643" Score="1" ViewCount="4562" Body="&lt;p&gt;This is not a robotics question, but this Stack Exchange is the closest I could find to mechanical engineering. Please refer me to a better place to ask this, if one exists. Hopefully someone might just know this.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;I got a pull-back car for my boy at McDonalds, and it has two gears. It starts slow, then speeds up after about two seconds. It's impressive to me, especially given the inherent cheapness of toys sold by McDonalds. It feels solidly built as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I couldn't find anything related to this concept. The &lt;a href=&quot;http://en.wikipedia.org/wiki/Pullback_motor&quot; rel=&quot;nofollow&quot;&gt;wiki on pullback motors&lt;/a&gt; does not include any information on multiple gears.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any ideas on how this works? &lt;/p&gt;&#xA;" OwnerUserId="8941" LastEditorUserId="8941" LastEditDate="2015-01-24T20:53:45.517" LastActivityDate="2015-11-30T20:58:08.860" Title="How does a two-gear pull-back car toy work?" Tags="&lt;mechanism&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6431" PostTypeId="2" ParentId="4239" CreationDate="2015-01-23T20:47:55.437" Score="1" Body="&lt;p&gt;A controlled process might vary over time (due to e.g. slack, wear and tear ...), causing the need for refining the controller. If the aim is not to rely on heuristics (e.g. Zigler-Nichols) - and that is a good intention - then what one should do is first to come up with a model that is representative of the plant and second use such a model to tune the PID. The recipe is pretty much described &lt;a href=&quot;http://it.mathworks.com/company/newsletters/articles/tuning-a-pid-controller-when-a-plant-model-is-not-available.html?refresh=true&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What makes the identification difficult in this context is the fact that we are dealing with a closed-loop system, meaning that the plant is under the control of our by now &quot;weakly&quot; tuned PID. In this scenario we have to be careful, since we cannot blindly adopt standard identification techniques as in the more usual open-loop framework.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In literature there exist &lt;em&gt;direct&lt;/em&gt;, &lt;em&gt;indirect&lt;/em&gt; and &lt;em&gt;joint input-output&lt;/em&gt; methods for &lt;strong&gt;closed-loop identification&lt;/strong&gt;. An enlightening reading is &quot;&lt;a href=&quot;http://photon.isy.liu.se:81/research/pub-db-supplemental/phd/566/main.pdf&quot; rel=&quot;nofollow&quot;&gt;Closed-loop Identication.&#xA;Methods, Theory, and Applications&lt;/a&gt;&quot;. To any rate, the &lt;em&gt;Prediction Error Estimation&lt;/em&gt; (&lt;strong&gt;PEM&lt;/strong&gt;) turns to be a viable and simple solution to this end: we have just to record the output of our PID as &lt;strong&gt;the process input&lt;/strong&gt; so as the output of the plant as &lt;strong&gt;the process output&lt;/strong&gt; and then use some sort of ARX, ARMAX, Output-Error black box identification approaches and we will end up with an &lt;em&gt;unbiased&lt;/em&gt; estimation of the plant dynamics. It can be demonstrated indeed that the estimation is valid and informative as it would have been carried out in open-loop fashion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once we have a good estimate of the plant, we can design the PID controller relying on diverse techniques, such as &lt;a href=&quot;http://scl.hanyang.ac.kr/scl/database/papers/IFAC/2008/data/papers/0036.pdf&quot; rel=&quot;nofollow&quot;&gt;&lt;strong&gt;dominant pole placement&lt;/strong&gt;&lt;/a&gt;, &lt;a href=&quot;http://ece.gmu.edu/~gbeale/ece_720/limits-on-st-01.pdf&quot; rel=&quot;nofollow&quot;&gt;&lt;strong&gt;loop shaping&lt;/strong&gt;&lt;/a&gt;, in order to meet some given performance and robustness requirements.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastActivityDate="2015-01-23T20:47:55.437" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6432" PostTypeId="2" ParentId="6430" CreationDate="2015-01-23T22:48:02.703" Score="2" Body="&lt;p&gt;These types of low cost 2 speed transmission almost always are based on some gyroscopic effect on a simple gear train.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You are right, even knowing how they work, I could not find any described on the internet. Very surprising.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Look at this image;&#xA;&lt;img src=&quot;https://i.stack.imgur.com/stRmW.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Imagine as the speed increases, the lower block will rise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So now you have to imagine it attached to a shifting lever (or gears themselves).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/i68qA.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Combine the 2 concepts and  you have automatic 2 speed gear shifting. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In practicality, it is usually less costly to use infinitely variable transmissions for the same effect on anything of decent size / value.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/hPMGc.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="274" LastActivityDate="2015-01-23T22:48:02.703" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6433" PostTypeId="2" ParentId="6428" CreationDate="2015-01-24T01:41:05.437" Score="0" Body="&lt;p&gt;It seems like an AC motor connected to the shaft would act as a generator with the frequency of the sine wave matched to the rpm. I'm not sure if this is what you are looking for.&lt;/p&gt;&#xA;" OwnerUserId="7757" LastActivityDate="2015-01-24T01:41:05.437" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6434" PostTypeId="1" AcceptedAnswerId="6451" CreationDate="2015-01-24T13:25:51.940" Score="0" ViewCount="829" Body="&lt;p&gt;Hello i am building a differential drive robot which is equipped with quadrature encoders on both of the motors. My aim is to be able to predict the heading (yaw angle) of the robot using a kalman filter. I am using an MPU 9150 imu. As of now m just interested in yaw angle and not the roll/pitch. As i understand, i will be needing the z-axis of gyro to be fused with the magnetometer data in order to properly estimate the heading angle. My problem is how do i implement the bias and covariance required for the kalman filter to work. Gyroscope would be my process and magnetometer data would be my update step yeah?. From the datasheet i have found the Angular random walk of my gyroscope to be 0.3 degrees/second for 10 Hz motion bandwidth and a constant bias of 20 degrees/second at room temperature. If i am not mistaken i should include the bias in my state prediction equation?. Also how do i get the covariance matrix Q. &lt;/p&gt;&#xA;" OwnerUserId="8946" LastActivityDate="2015-01-26T14:04:40.927" Title="differential robot yaw estimation using kalman filter" Tags="&lt;kalman-filter&gt;&lt;imu&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6435" PostTypeId="2" ParentId="6434" CreationDate="2015-01-24T19:33:20.903" Score="0" Body="&lt;p&gt;I think the bias gets removed before Kalman, ie the measured Heading Change, which is the result of magnetometer/accelerometer combination minus bias. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As such both are part of the update step. The only variance would be the random walk, and you can simplify Kalman significantly by not using matrix, if you are only interested in 2D.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;gyroMeasured = meanGyroZValue(5,4) - GyroOffset;&#xA;&#xA;// predict&#xA;tachoPredicted = tachoUpdated + dt * gyroMeasured;&#xA;varianceFilterPredicted = varianceFilterUpdated + varianceGyro;&#xA;&#xA;// heading must be between 0 and 2*PI&#xA;tachoPredicted = NormalizeAngle(tachoPredicted);&#xA;&#xA;// Kalman gain&#xA;kalmanGain = varianceFilterPredicted /&#xA;(varianceFilterPredicted + varianceTacho);&#xA;&#xA;// update&#xA;tachoUpdated = tachoPredicted + kalmanGain * (tachoMeasured - tachoPredicted);&#xA;varianceFilterUpdated = varianceFilterPredicted +&#xA;kalmanGain * (varianceTacho - varianceFilterPredicted);&#xA;&#xA;RobotH = NormalizeAngle(tachoUpdated);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I think this is close to correct, but I am new at Kalman.&lt;/p&gt;&#xA;" OwnerUserId="274" LastActivityDate="2015-01-24T19:33:20.903" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6436" PostTypeId="1" AcceptedAnswerId="6443" CreationDate="2015-01-24T22:02:07.737" Score="2" ViewCount="150" Body="&lt;p&gt;A time has come for my robot to get some more permanent computer than my laptop balanced on top of it.&#xA;I have selected a mini itx board that can be powered directly from battery and some components that go with it including a wifi card and now I'm thinking about the antenna I will need.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Constraints I have identified so far:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The robot's body is a closed aluminium box, so I think this rules out keeping the antenna inside.&lt;/li&gt;&#xA;&lt;li&gt;The robot is intended to work outdoors, so it needs to be waterproof.&lt;/li&gt;&#xA;&lt;li&gt;Vibrations might be an issue.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;And the questions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;What parameters should I watch when selecting an antenna?&lt;/li&gt;&#xA;&lt;li&gt;Is it ok to use indoor stick antenna and seal the mounting point with hot glue?&lt;/li&gt;&#xA;&lt;li&gt;Does it change anything if the antenna will be sticking out of largish sheet of alluminium?&lt;/li&gt;&#xA;&lt;li&gt;The robot will also have GPS, is it possible that the two will interact badly under some circumstances?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="482" LastActivityDate="2015-01-25T18:42:33.353" Title="Choosing a WiFi antenna for outdoor robot" Tags="&lt;mobile-robot&gt;&lt;wifi&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6437" PostTypeId="1" CreationDate="2015-01-24T22:35:51.363" Score="2" ViewCount="2094" Body="&lt;p&gt;I'm building a robot and powering it with a Raspberry Pi. I am looking at &lt;a href=&quot;http://www.adafruit.com/products/1566&quot; rel=&quot;nofollow&quot;&gt;this battery pack&lt;/a&gt;, but I am flexible with which one to use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My problem is that I need to be able to charge the robot while it is still on, and apparently that is not good for a single battery pack to be charging while being used (they seemed to say so in the video). Am I wrong? Otherwise, how could I go about charging the robot while keeping the Raspberry Pi running?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt;: This is my first robot (other than my lego NXT kit), so I don't have any prior experience with robot batteries.&lt;/p&gt;&#xA;" OwnerUserId="8949" LastEditorUserId="8949" LastEditDate="2015-01-25T13:28:39.367" LastActivityDate="2015-03-26T20:29:32.507" Title="How to provide power to a robot/raspberry pi?" Tags="&lt;mobile-robot&gt;&lt;battery&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6438" PostTypeId="2" ParentId="6437" CreationDate="2015-01-25T01:46:08.923" Score="0" Body="&lt;p&gt;I have an idea i used before.I got nimh battery around 7.2v. I used a usb module regulator that takes raw regulated or unregulated voltage and converts into 5v upto 3a &lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/B00M2NH1H8&quot; rel=&quot;nofollow&quot;&gt;usb port&lt;/a&gt; I then charged it with constant current that was parallel with the battery and USB module via high power solar panels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I will update this as I get more Information.&lt;/p&gt;&#xA;" OwnerUserId="7552" LastActivityDate="2015-01-25T01:46:08.923" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6441" PostTypeId="2" ParentId="6429" CreationDate="2015-01-25T06:37:36.600" Score="1" Body="&lt;p&gt;The referenced picture of an equation is this:&#xA;&lt;img src=&quot;https://i.stack.imgur.com/hv64E.png&quot; alt=&quot;picture of equation&quot;&gt;&#xA;and in latex it is:&#xA;\begin{equation}\tag{26}&#xA;  p(z_t|m,c_t) = \frac{1}{\sqrt{2\pi\sigma^2}} e^{-\frac{1}{2}\left\{&#xA;    c_{t,*}\log{\frac{z^2_{max}}{2\pi\sigma^2}} + &#xA;    \sum_{k=1}^{K_t}c_{t,k}\frac{(z_t-d_{t,k})^2}{\sigma^2} +&#xA;    c_{t,0}\frac{(z_t-z_{max})^2}{\sigma^2}&#xA;  \right\}}&#xA;\end{equation}&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a single $p(z_t|m,c_t)$ calculation, the algorithmic complexity of computation is O($K_t$) if it is the case that $K_t$ values of $c_{t,k}$ need to be examined, or is O(1) if the index of the  non-zero $c_{t,k}$ or $c_{t,*}$ value that is non-zero is given.  (The &lt;a href=&quot;http://roboticsclub.org/redmine/projects/colonyscout/repository/revisions/master/raw/docs/Research/nps424A.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;referenced paper at roboticsclub.org&lt;/a&gt; stiputates that only one of the $K_t+2$ possible $c_{t,k}$ values is non-zero.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To see this, note that every value used in the equation is a constant, or a parameter specified or given, or an index of summation.  Each of the values used requires time O(1) to obtain.  The summation takes O(1) or O($K_t$) time to compute, as noted above.  The logarithms, squares and square roots, and all the other arithmetic operations take O(1) time (assuming use of fixed-length operands and arithmetic, eg double-precision values and operations).  A fixed-length sequence of O(1) operations takes O(1) time.&lt;/p&gt;&#xA;" OwnerUserId="478" LastActivityDate="2015-01-25T06:37:36.600" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6442" PostTypeId="1" CreationDate="2015-01-25T18:23:57.187" Score="0" ViewCount="249" Body="&lt;p&gt;I'm developing my fligth controller board on Tiva Launchpad for quadcoper and while calibrating PID I discovered an unexpected behaviour: sometimes quadcopter seems to experience random angle errors. While trying to investigate it, I've figured out that my code if fairly trying to compensate tham, as soon as they appear - but do not cause them. Even more - i've discovered that such behaviour appears only when two (or more) motors are adjusted, while one motor system shows pretty good stabilisation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is code for PMW output for different motors:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;torque[0] = (int16_t)(+ angles_correction.pitch - angles_correction.roll) + torque_set;&#xA;torque[1] = (int16_t)(+ angles_correction.pitch + angles_correction.roll) + torque_set;&#xA;torque[2] = (int16_t)(- angles_correction.pitch + angles_correction.roll) + torque_set;&#xA;torque[3] = (int16_t)(- angles_correction.pitch - angles_correction.roll) + torque_set;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and here is recorded angles for system with one motor and two motors:&#xA;&lt;img src=&quot;https://i.stack.imgur.com/7CJIU.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To be sure that it's not the algorithm problem, while recording this angles only Integral part of PID was non-zero, so angles were not even stabilised.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is - could esc noise each other (in my quad they are quite close to each other - just few sentimeters away) to cause such behaviour?&#xA;Thanks a lot!&lt;/p&gt;&#xA;" OwnerUserId="8945" LastActivityDate="2016-03-06T16:04:35.770" Title="Quadcopter multiple ESC angles glitch" Tags="&lt;quadcopter&gt;&lt;pid&gt;&lt;esc&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6443" PostTypeId="2" ParentId="6436" CreationDate="2015-01-25T18:42:33.353" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;What parameters should I watch when selecting an antenna?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The biggest one is going to be the application, does it need to operate outside? in pouring rain? does it need to be omnidirectional? &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Is it ok to use indoor stick antenna and seal the mounting point with hot glue?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Generally this will work just fine depending on how harsh the environment, outside on a sunny day? will probably be just fine, outside 24/7 in all weather? you will probably need something rated for ingress and UV exposure.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Does it change anything if the antenna will be sticking out of largish sheet of aluminum?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No It might cause minor interference, just be sure the antenna is isolated form the enclosure.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The robot will also have GPS, is it possible that the two will interact badly under some circumstances?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Nope they use different signal bands so they will not interfere, however placing the GPS receiver inside a medal box could cause many issues&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2015-01-25T18:42:33.353" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6444" PostTypeId="2" ParentId="6437" CreationDate="2015-01-25T19:46:14.200" Score="1" Body="&lt;p&gt;&lt;a href=&quot;http://www.adafruit.com/products/1944&quot; rel=&quot;nofollow&quot;&gt;This&lt;/a&gt; appears to be exactly what I need. It is a chargeable PowerBoost. It can charge a LiIon or LiPoly battery while it is being used to run a raspberry pi. I can then add several of these circuits to keep multiple things running. (So a powerboost for the pi, one for the servo controller, one for each powered USB hub, etc.) I can charge them using a power strip.&lt;/p&gt;&#xA;" OwnerUserId="8949" LastActivityDate="2015-01-25T19:46:14.200" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6445" PostTypeId="1" AcceptedAnswerId="6448" CreationDate="2015-01-25T21:24:17.763" Score="1" ViewCount="368" Body="&lt;p&gt;My set up consists of a brushed motor (ex cordless drill type) connected to a motor controller which is in turn connected to a LIPO battery and an r/c receiver. All my cables are fitted with XT 60 connectors except for the cable that goes to the receiver which is a 3 wire pin (usual white, red and black).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The above set up is one of a pair which I am using in my battle robot. The motors are connected to drive wheels, left and right respectively. the problem is the motors are turning in opposing directions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For some reason I neglected to switch the polarity of the wires of one  motor at the time I attached the XT 60 connectors and I really am not looking forward to re-soldering.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my question is whether there is any fast way of reversing the direction of rotation without soldering?  For instance can the R/C transmitter (a turnigy 9x without any modding)be programmed to switch up for down (hence forward for reverse)? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or can I maybe switch the pin connector going into the receiver (I don't think so because the ground is probably common, but worth asking just in case I guess). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any ideas or should I just get soldering?&lt;/p&gt;&#xA;" OwnerUserId="7198" LastActivityDate="2015-01-26T07:14:22.340" Title="Ways of reversing motor direction easily" Tags="&lt;motor&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6446" PostTypeId="1" AcceptedAnswerId="6450" CreationDate="2015-01-25T21:45:11.597" Score="2" ViewCount="355" Body="&lt;p&gt;Just to give a bit a context, here are the equations I'm using for the Angular accelerations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;φ** =(1/Jx)τφ&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and&lt;/p&gt;&#xA;&#xA;&lt;p&gt;θ** =(1/Jy)τθ&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my plant gains would be &lt;/p&gt;&#xA;&#xA;&lt;p&gt;φ**/τφ =(1/Jx) along x axis&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and&lt;/p&gt;&#xA;&#xA;&lt;p&gt;θ**/τθ =(1/Jy) along y axis&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The basic PID structure is &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Gain=Kp(Desired-measured)+Ki(integral(Desired-measured))+Kd(Differential(Desired-measured)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lets just say my plant gain for angular accl around x axis is φg and my PID gain is Pg. To obtain a controller, do I do&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(φg)(Pg)=open loop gain=L&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and for closed loop L/(1+L). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is, am I right about what I'm doing and do I upload the algorithm in time domain form or frequency domain form (Silly question as frequency domain is for analysis but my only control experience is purely theory and entirely focused on analysis using root locus and nyquist)&lt;/p&gt;&#xA;" OwnerUserId="8838" LastActivityDate="2015-02-25T11:00:32.783" Title="How do you design Quadcopter PID algorithm?" Tags="&lt;arduino&gt;&lt;control&gt;&lt;pid&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6447" PostTypeId="1" AcceptedAnswerId="6455" CreationDate="2015-01-26T02:33:23.200" Score="5" ViewCount="1083" Body="&lt;p&gt;All-most all SLAM back-end implementation compute chi2 estimates. Chi2 computation is usually used to compute the best-fitness score of model to the data.&#xA;How it is related to optimization framework for SLAM?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Rgds&#xA;Nitin&lt;/p&gt;&#xA;" OwnerUserId="8955" LastEditorUserId="163" LastEditDate="2015-01-26T18:24:58.600" LastActivityDate="2015-01-26T19:27:23.883" Title="role of chi2 in SLAM back-end optimization" Tags="&lt;slam&gt;&lt;theory&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6448" PostTypeId="2" ParentId="6445" CreationDate="2015-01-26T07:14:22.340" Score="3" Body="&lt;p&gt;Yes, the Turnigy 9x and just about every RC transmitter can reverse channels. Look for Servo setup, reverse.  Step 9.1 in &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/uploads/529892926x11510x49.pdf&quot; rel=&quot;nofollow&quot;&gt;9x manual&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This assumes your left and right motors are on different channels. If you used a v-tail mixer to obtain turtle drive, you will have to experiment with it's set-up instead (9.17).&lt;/p&gt;&#xA;" OwnerUserId="274" LastActivityDate="2015-01-26T07:14:22.340" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6449" PostTypeId="2" ParentId="6423" CreationDate="2015-01-26T08:33:39.203" Score="1" Body="&lt;p&gt;I suggest you to read the book &quot;Probabilistic Robotics&quot; by Sebastian Thrun et al.&#xA;A simple test you can do is writing a weighting function as a product of Gaussians centered in the x,y of the particle and evaluated in the measurement points. You can use monodimensional Gaussians and multiply all together.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;E.g.,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;weight_particle_i = exp( (x_measure - x_particle_i)^2/sigma_x^2)*exp( (y_measure - y_particle_i)^2/sigma_y^2)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where the sigma represents the uncertainty in your measures&lt;/p&gt;&#xA;" OwnerUserId="8957" LastActivityDate="2015-01-26T08:33:39.203" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6450" PostTypeId="2" ParentId="6446" CreationDate="2015-01-26T10:34:38.513" Score="0" Body="&lt;p&gt;Microcontrollers and software in general is not in continuous time but discrete time.&#xA;So you need to use the discretized version of the PID and use it in discrete time (iterations) domain.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are curious about quadropters, I would suggest to check coursera or edx website. There was some time ago a nice quadropter course made by university of Munich if I am right ;).&lt;/p&gt;&#xA;" OwnerUserId="8957" LastActivityDate="2015-01-26T10:34:38.513" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6451" PostTypeId="2" ParentId="6434" CreationDate="2015-01-26T14:04:40.927" Score="0" Body="&lt;p&gt;There are indeed many ways to implement an (Extended) Kalman Filter for IMU data. You might or not include the bias, depending if you want also to calibrate the sensor within the KF framework itself.&#xA;w(t) is the noise and you do not make it, it is just for demonstration there and you might use it to implement fake sensor data to test your algorithm.&#xA;Just an general advice, if you wrap the angles between [pi, -pi] or other way, remember to compute always the minimum difference between the two angles (when you are computing the innovation vector) or you will get some nasty surprises.&lt;/p&gt;&#xA;" OwnerUserId="8957" LastActivityDate="2015-01-26T14:04:40.927" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6452" PostTypeId="1" AcceptedAnswerId="6456" CreationDate="2015-01-26T14:25:51.703" Score="1" ViewCount="1405" Body="&lt;p&gt;** If there's a better stack exchange site for this, let me know--the mechanical engineering one is closed so I'm not sure where else is appropriate **&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do mechanical systems have fuses? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In an electrical system, like a charging circuit for example, we prevent large loads from damaging the system with fuses and circuit breakers. These will disconnect the inputs from the outputs if the load get too high. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do mechanical systems have a similar mechanism? Something that would prevent gears or linkages from breaking when the load gets too high by disconnecting the input from the output?&lt;/p&gt;&#xA;" OwnerUserId="181" LastActivityDate="2015-01-26T23:44:13.460" Title="Fuses for mechanical systems" Tags="&lt;mechanism&gt;" AnswerCount="4" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6453" PostTypeId="2" ParentId="6452" CreationDate="2015-01-26T16:37:43.110" Score="1" Body="&lt;p&gt;I'm not a mechanical engineer, but I would imagine the analogous piece to an electrical fuse would be a piece connecting input and output that would easily break if too much pressure is exerted on it. This would be analogous to old fuses that literally burned when too much current passed them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want a more modern fuse, you need a system that measures the load and detaches the input from output if too high, with the ability to connect it back again (by a human). My wife (mechatronics engineer) says you &lt;em&gt;can use magnetic and force torque sensor&lt;/em&gt;.&lt;/p&gt;&#xA;" OwnerUserId="158" LastActivityDate="2015-01-26T16:37:43.110" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6454" PostTypeId="2" ParentId="6452" CreationDate="2015-01-26T16:51:14.963" Score="1" Body="&lt;p&gt;A tendon does act as a mechanical fuse, breaking up when moving parts it connects undergo unaffordable stress, overcoming its elasticity limit.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastActivityDate="2015-01-26T16:51:14.963" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6455" PostTypeId="2" ParentId="6447" CreationDate="2015-01-26T17:04:59.260" Score="5" Body="&lt;p&gt;Specifically, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Chi-squared_distribution&quot; rel=&quot;noreferrer&quot;&gt;Chi-Square Distribution&lt;/a&gt;(or Chi2, $\chi^2$, or equivalently $\chi^2_1$)  is used to model the probability of the absolute value of the deviation of the measurement from it's expected value. This calculation is vital to tackle the &lt;a href=&quot;https://en.wikipedia.org/wiki/Measurement_uncertainty&quot; rel=&quot;noreferrer&quot;&gt;measurement origin uncertainty&lt;/a&gt; problem. It can also be used to determine the &quot;correctness&quot; of a multi-hypothesis estimate using a similar idea, but I won't touch on that specifically.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that the $\chi^2_k$ distribution has $k$ degrees of freedom. Why $\chi^2_k$? Any time you assume &lt;a href=&quot;https://en.wikipedia.org/wiki/Normal_distribution&quot; rel=&quot;noreferrer&quot;&gt;Gaussian&lt;/a&gt; (e.g., $\mathcal{N}(0,1)$) measurement noise, you will encounter the $\chi^2_1$ distribution because the &lt;a href=&quot;https://en.wikipedia.org/wiki/Norm_%28mathematics%29&quot; rel=&quot;noreferrer&quot;&gt;two-norm&lt;/a&gt; squared of a $n$-dimensional vector of $\mathcal{N}(0,1)$ variables is equivalent to a $\chi_{n}^2$ pdf. [see: &lt;a href=&quot;https://en.wikipedia.org/wiki/Chi-squared_distribution#Applications&quot; rel=&quot;noreferrer&quot;&gt;Applications of Chi-squared&lt;/a&gt;].&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In SLAM it is commonly used to model the probability of a certain landmark providing a certain measurement.  &lt;/p&gt;&#xA;" OwnerUserId="163" LastEditorUserId="163" LastEditDate="2015-01-26T19:27:23.883" LastActivityDate="2015-01-26T19:27:23.883" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6456" PostTypeId="2" ParentId="6452" CreationDate="2015-01-26T17:30:30.297" Score="2" Body="&lt;p&gt;You are looking for a clutch.  It is loaded device that 'gives' when the torque exceeds its set amount.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/qQqRE.jpg&quot; alt=&quot;LEGO Clutch&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.eurobricks.com/forum/index.php?showtopic=41562&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here&lt;/a&gt; is a LEGO clutch you can see how it works.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/W1dAw.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="274" LastActivityDate="2015-01-26T17:30:30.297" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6457" PostTypeId="2" ParentId="6423" CreationDate="2015-01-26T17:37:52.940" Score="3" Body="&lt;h3&gt;A little background.&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;You need to weight each particle by the liklihood of the particle being correct. The probability the particle is correct is given by the probability that it is correct &lt;em&gt;given the measurements&lt;/em&gt;. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Note that the &quot;weight&quot; (which is a terrible term) is simply the probability of the particle &lt;em&gt;being correct&lt;/em&gt;. Therefore, each particle is really an estimate, and each estimate has some probability of being correct.&lt;/li&gt;&#xA;&lt;li&gt;Let $x$ be the state. There are a bunch of (say $N$) state estimates ($x_i$ for $i=1...N$), i.e., particles&lt;/li&gt;&#xA;&lt;li&gt;Let $z$ be your measurement&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;By Bayes rule:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$p(x|z) = \frac{p(z|x)\cdot p(x)}{p(z)}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which means, the probability of the particle being &quot;correct&quot; given the measurement is given by the probability that the measurement &quot;makes sense&quot; given the particle's estimate, times the probability that the particle was correct to begin with.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The denominator is commonly written using the &lt;a href=&quot;https://en.wikipedia.org/wiki/Law_of_total_probability&quot; rel=&quot;nofollow noreferrer&quot;&gt;law of total probability&lt;/a&gt; so the above becomes:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$p(x_i|z) = \frac{p(z|x_i)\cdot p(x_i)}{\sum_{j=1}^N p(z|x_j)p(x_j)}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can re-weight each particle using the above. Explicitly,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$w_i\gets \frac{p(z|x_i)\cdot w_i}{\sum_{j=1}^N p(z|x_j)\cdot w_j}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, let's go over your problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You said you have a tuple $(x_1,y_1,x_2,y_2)$, but that's not correct, you have &lt;em&gt;two&lt;/em&gt; measurements of the $(x,y)$ value for the robot's position. You need to do &lt;em&gt;two&lt;/em&gt; updates of each particle. (&lt;strong&gt;EDIT&lt;/strong&gt;: It seems the three-dimensional state of the robot was derived from these two points. I misunderstood so ignore that)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, first calculate $p(z|x_i)$ for each particle $x_i$. In a two dimensional state, this is done as follows:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;for all $x_i$, calculate $p_i \gets p(z|x_i)$ &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;E.G., In matlab: &lt;code&gt;pi=chi2pdf( norm(z-xi), 2))&lt;/code&gt;. See: &lt;a href=&quot;http://www.mathworks.com/help/stats/chi2pdf.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;chi2pdf&lt;/a&gt; and &lt;a href=&quot;http://www.mathworks.com/help/matlab/ref/norm.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;norm&lt;/a&gt;. You may want to see &lt;a href=&quot;https://robotics.stackexchange.com/q/6447/163&quot;&gt;this question&lt;/a&gt; if you don't understand this step.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Now, let $D\gets\sum_{i=1}^N p(z|x_i)\cdot w_i$ using the above values of $p_i$ and previous values of $w_i$ for each particle.&lt;/li&gt;&#xA;&lt;li&gt;Then, let the &lt;em&gt;new&lt;/em&gt; value of each particle be: $w_i\gets\frac{p_i\cdot w_i}{D}$.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;For a complex discussion of why this works, what about it isn't so great, and so on, you'll want to read some literature. Thrun's Probablistic Robotics is a great resource. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: I should mention that commonly $p(z|x_i)$ is calculated not using CHI2PDF but instead by the EKF linearization of $z=h(x_i)$. That's beyond scope. Furthermore, the uncertainty in the robot position is not included. Using an EKF for each particle will address this but that's a different framework (sort of).&lt;/p&gt;&#xA;" OwnerUserId="163" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2015-10-05T14:13:01.707" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6458" PostTypeId="2" ParentId="6452" CreationDate="2015-01-26T23:44:13.460" Score="1" Body="&lt;p&gt;For “Something that would prevent gears or linkages from breaking when the load gets too high”, look for  &lt;em&gt;&lt;a href=&quot;https://www.google.com/search?hl=en&amp;amp;site=imghp&amp;amp;tbm=isch&amp;amp;source=hp&amp;amp;biw=1075&amp;amp;bih=600&amp;amp;q=shear+pin&amp;amp;oq=shear+pin&amp;amp;gs_l=img.3..0l10.2373.3993.0.4430.9.9.0.0.0.0.112.852.7j2.9.0.msedr...0...1ac.1.61.img..0.9.847.lIztnQY_HeA&quot; rel=&quot;nofollow&quot;&gt;shear pins&lt;/a&gt;&lt;/em&gt; and &lt;em&gt;sacrificial &lt;a href=&quot;http://www.amazon.co.uk/JR-PROPO-Sacrificial-Servo-Gear/dp/B00AJMII1C#productDetails&quot; rel=&quot;nofollow&quot;&gt;gears&lt;/a&gt;, links&lt;/em&gt;, &lt;em&gt;&lt;a href=&quot;http://www.flpflightteam.co.uk/~flpfligh/?p=2280&quot; rel=&quot;nofollow&quot;&gt;arms&lt;/a&gt;&lt;/em&gt;, etc.  Typically a shear key, shear pin, etc is far less expensive than the components it protects.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A shear pin (ie, a transverse pin linking a gear to a shaft) typically is made of softer material (eg, plastic, aluminum, or mild steel) than the drive train parts it protects.  Or it may have shear zones that are cut down to a smaller diameter than the rest of the pin.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Drive &lt;a href=&quot;https://en.wikipedia.org/wiki/Key_%28engineering%29&quot; rel=&quot;nofollow&quot;&gt;keys&lt;/a&gt; (eg, square keys, Woodruff keys, and less frequently Scotch keys) also are sometimes used as shear elements.  &lt;/p&gt;&#xA;" OwnerUserId="478" LastActivityDate="2015-01-26T23:44:13.460" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6459" PostTypeId="1" CreationDate="2015-01-27T07:10:34.407" Score="0" ViewCount="64" Body="&lt;p&gt;what's the quickest way to calculate a relative coordinate of a frame, as shown in the code below. The Kuka robot language this &quot;:&quot; is referred to as the geometric operator. &#xA;I would like to perform this calculation in matlab, scilab, smathstudio or java, could you please advise on which library to use and/or how to proceed?&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Frame TableTop=[x1 y1 z1 a1 b1 c1]&#xA;Frame RelCoord=[x2 y2 z2 a2 b2 c2]&#xA;&#xA;Frame AbsCoord= TableTop:RelCoord&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="8963" LastEditorUserId="8963" LastEditDate="2021-02-03T02:16:31.740" LastActivityDate="2021-02-03T02:16:31.740" Title="Relative frame calculation" Tags="&lt;robotic-arm&gt;&lt;programming-languages&gt;&lt;kuka&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6460" PostTypeId="2" ParentId="6423" CreationDate="2015-01-27T12:28:10.133" Score="1" Body="&lt;p&gt;Thanks for all the replies (I'm the op with a new account so I can't comment your single replies).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;@Mallo: thanks for the input, I was actually basing my work on that book ;) I ended up doing something very similar to what you have described.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;@Josh: &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&quot;You said you have a tuple &lt;code&gt;(x1,y1,x2,y2)&lt;/code&gt;, but that's not correct...&quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;well, no. I was correct, let me explain better: the robot is identified by camera reading TWO points on it, therefore the measurement consist of FOUR coordinates and to generate the particle's weight I have the particle to examine (which is a &lt;code&gt;(x,y,orientation)&lt;/code&gt;) and a measurement. I then apply the measure equations to the particle and confront the &quot;should-be&quot; measure generated by the particle with the actual measurement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, weight is actually the appropriate term because they are just proportional to likelihood but they still need to be normalized (but it isn't necessary).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the future readers that is what I ended up doing:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;generate particle measure&lt;/li&gt;&#xA;&lt;li&gt;calculate euclidean distance between particle's supposed measure and actual measure, which is accomplished in MATLAB with the &lt;code&gt;pdist&lt;/code&gt; function.&lt;/li&gt;&#xA;&lt;li&gt;calculate the pdf of the distance for a standard gaussian (mean = 0 and sigma = 1), which is accomplished in MATLAB with &lt;code&gt;normpdf(distance, 0, 1)&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="8932" LastActivityDate="2015-01-27T12:28:10.133" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6461" PostTypeId="2" ParentId="5302" CreationDate="2015-01-27T15:40:21.790" Score="0" Body="&lt;p&gt;I did similar thing using bluetooth module. I connected the bluetooth module to board, for board it was serial1 port, I paired my computer with the bluetooth module and used this library to communicate from PC. &lt;a href=&quot;https://code.google.com/p/java-simple-serial-connector/&quot; rel=&quot;nofollow&quot;&gt;https://code.google.com/p/java-simple-serial-connector/&lt;/a&gt;. &lt;/p&gt;&#xA;" OwnerUserId="6801" LastActivityDate="2015-01-27T15:40:21.790" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6462" PostTypeId="1" CreationDate="2015-01-27T16:35:39.497" Score="1" ViewCount="857" Body="&lt;p&gt;I have a BBB and it works quite well however when I power it over the Barrel connector or over the vdd pins rather then use the usb connection it doesn't automatically boot. When I put the barrel connector and usb in at the same time and then remove the usb it continues running. This is running on ubuntu arm. I have tested that the power supply is between 4.95 and 5.04 V and is capable of sustaining this to just over 1 Ampere&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit it appear the BBB does boot when supplied with 4.7 V lab power supply at ~0.4A power consumption. So that suggest something is wrong with the power supply. But how do I test it seeing I was able to verify that it can supply 1A at 5V.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This power supply works by feeding a 12V battery into a step down to convert it down to 5V if that matters.&#xA;power-supply power linux beaglebone-black beagleboard&lt;/p&gt;&#xA;" OwnerUserId="7226" LastEditorUserId="7226" LastEditDate="2015-01-27T17:06:19.000" LastActivityDate="2015-03-30T06:09:50.023" Title="beaglebone black doesn't autoboot when powered over jack or vdd pins" Tags="&lt;beagle-bone&gt;&lt;linux&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6463" PostTypeId="1" CreationDate="2015-01-27T19:31:21.453" Score="0" ViewCount="238" Body="&lt;p&gt;A Co-worker said he remembered a 2011(ish) ICRA (ish)  paper which used just a touch/bump sensor and odometry to do SLAM. I can't find it - I've paged thru the ICRA and IROS agendas and paper abstracts for 2010-2012, no joy. I found a couple of  interesting papers but my coworker says these aren't the ones he remembered.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Foxe 2012 &lt;a href=&quot;http://staffwww.dcs.shef.ac.uk/people/C.Fox/fox_icra12.pdf&quot; rel=&quot;nofollow&quot;&gt;http://staffwww.dcs.shef.ac.uk/people/C.Fox/fox_icra12.pdf&lt;/a&gt;&#xA;Tribelhorn a &amp;amp; Dodds 2007:  &lt;a href=&quot;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.507.5398&amp;amp;rep=rep1&amp;amp;type=pdf&quot; rel=&quot;nofollow&quot;&gt;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.507.5398&amp;amp;rep=rep1&amp;amp;type=pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Background - I'm trying to make a Lego Mindstorms bot navigate and map our house. I also have a IR sensor, but my experience with these is that they are really noisy, and at best can be considered an extended touch sensor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regards, &#xA; Winton&lt;/p&gt;&#xA;" OwnerUserId="8969" LastEditorUserId="10950" LastEditDate="2016-04-29T18:08:16.003" LastActivityDate="2016-04-29T18:08:16.003" Title="Single Touch Based Sensor and Odometry SLAM in Noisy Rectilinear Environment" Tags="&lt;slam&gt;" AnswerCount="4" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6464" PostTypeId="2" ParentId="6463" CreationDate="2015-01-27T19:48:24.290" Score="0" Body="&lt;p&gt;As a step up from pure IR, check out &lt;a href=&quot;http://www.parallax.com/product/28044&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.parallax.com/product/28044&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/EaYtp.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But otherwise neat project. Sorry I don't have any info on the paper you seek, but the idea sounds reasonable, albeit slow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem you will probably run into, is that SLAM is used to improve odometry, by looking at multiple object distances at once, and you are depending on odometry to supply a single object input to SLAM, so I am not sure how good your map will be. But if there is a paper explaining how to do, then very cool.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To some extent, SLAM tries to deal with noise, so with a lot of filter tuning, you might get some results with just the IR on a servo.  The math on this will be pretty intense as far as CPU power goes, so it might be pushing the NXT, ie you need to do many iterations of each landmark using least squares fit algorithms (trig intensive) for ICP (iterative closest point) SLAM.  Other algorithms each have their own pros and cons as usual.&lt;/p&gt;&#xA;" OwnerUserId="274" LastEditorUserId="274" LastEditDate="2015-01-27T19:56:50.993" LastActivityDate="2015-01-27T19:56:50.993" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6465" PostTypeId="2" ParentId="6463" CreationDate="2015-01-27T20:49:08.470" Score="0" Body="&lt;p&gt;I remember a robot with whiskers in icra 2012&#xA;Here the link&#xA; &lt;a href=&quot;http://www.researchgate.net/publication/236166849_Tactile_SLAM_with_a_biomimetic_whiskered_robot&quot; rel=&quot;nofollow&quot;&gt;http://www.researchgate.net/publication/236166849_Tactile_SLAM_with_a_biomimetic_whiskered_robot&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8957" LastActivityDate="2015-01-27T20:49:08.470" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6467" PostTypeId="1" CreationDate="2015-01-28T18:30:25.583" Score="0" ViewCount="2580" Body="&lt;p&gt;I am studying electronics engineering. I am fond of robots since my childhood. I have small doubt i.e. if I want to get placed in&#xA;robotics and automation based company ,what should I must study(reference books/softwares etc) perticularly for cracking an interview ? In simple words,as Electronics Engineer what other specific skills (like embedded C programming etc) should I go through?&lt;/p&gt;&#xA;" OwnerUserId="8976" LastEditorUserId="8976" LastEditDate="2015-02-05T02:14:47.253" LastActivityDate="2015-02-05T02:14:47.253" Title="Help for Cracking Robotics Interview" Tags="&lt;control&gt;&lt;microcontroller&gt;&lt;electronics&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6468" PostTypeId="2" ParentId="6462" CreationDate="2015-01-29T04:43:37.333" Score="3" Body="&lt;p&gt;Why do so many people keep &lt;a href=&quot;http://www.smpstech.com/undest.htm&quot; rel=&quot;nofollow&quot;&gt;&quot;Underestimating the complexity of power supply design&quot;&lt;/a&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm sure that you already know that &lt;em&gt;every&lt;/em&gt; digital electronic device pulls a very brief (transient) surge of power when it is first plugged in and turned on -- at much higher current and power levels than the steady-state current and steady-state power during normal operation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm guessing that your 12V to 5V power supply limits its output current.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Switching-mode power supplies, such as the one on the BeagleBone that converts that 5V to the even lower voltage used by its CPU, often &lt;a href=&quot;http://www.smpstech.com/latch000.htm&quot; rel=&quot;nofollow&quot;&gt;interact badly (latch up)&lt;/a&gt; with current-limited power supplies during the start-up transient.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Have you looked at the &lt;a href=&quot;http://beagleboard.org/support/faq&quot; rel=&quot;nofollow&quot;&gt;BeagleBoard FAQ&lt;/a&gt;, which says &quot;The power adapter is required to provide 5V ... at least 2A (or 10W) is recommended&quot;?&lt;/p&gt;&#xA;" OwnerUserId="187" LastActivityDate="2015-01-29T04:43:37.333" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6469" PostTypeId="1" AcceptedAnswerId="6470" CreationDate="2015-01-29T05:54:56.640" Score="3" ViewCount="1089" Body="&lt;p&gt;I read up on the wheels of Curiosity, and also about the suspension. But is there a name for the steering? It looks similar in nature to the front landing gear on an airplane, but searching those terms didn't turn up and answer. I've attached a picture with the area of interest highlighted. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Image: Gene Blevins/Reuters)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/hD8ca.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="4169" LastEditorUserId="127" LastEditDate="2015-01-29T07:54:41.780" LastActivityDate="2018-10-23T09:28:05.197" Title="Is there a name for the steering style/wheel actuation used on Curiosity?" Tags="&lt;wheeled-robot&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6470" PostTypeId="2" ParentId="6469" CreationDate="2015-01-29T07:31:01.677" Score="2" Body="&lt;p&gt;Rocker-bogie is the suspension. The steering is &lt;a href=&quot;http://en.wikipedia.org/wiki/Ackermann_steering_geometry&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ackermann&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/8vKjJ.png&quot; alt=&quot;Ackermann steering geometry&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="274" LastEditorUserId="10327" LastEditDate="2018-10-23T09:28:05.197" LastActivityDate="2018-10-23T09:28:05.197" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="6471" PostTypeId="1" CreationDate="2015-01-29T08:51:20.417" Score="3" ViewCount="7398" Body="&lt;p&gt;I am working on my final project by autonomous Quadcopter. my tasks are to make a quadcopter  which should do object avoidance and it should auto land using ultrasonic sensors.&#xA;any possible ans to it, how should i connect HC-sr04 ultrasonic sensor to my APM 2.6 board?&#xA;Even APm 2.6 has a port I2C.&lt;/p&gt;&#xA;" OwnerUserId="8978" LastActivityDate="2017-05-27T01:43:28.720" Title="How to connect HC-sr04 ultrasonic sensor to APM 2.6?" Tags="&lt;quadcopter&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6474" PostTypeId="2" ParentId="1985" CreationDate="2015-01-29T21:30:36.077" Score="1" Body="&lt;p&gt;I just posted a similar question, trying to locate a paper than a co-worker remembered (ICRA? 2011? Not from Mudd nor the Foxe paper). I'd second @JustSomeHelp -- they need to be distinguishable. So a bump sensor alone won't help as you'll basically have (in naive form), one landmark that keeps getting different locations. That's going to end badly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Clearly though, the recti-linear assumption is super helpful -- there's a 99 paper that address this. However I've not yet found a canonical approach to doing it&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Z. J. Butler, A. A. Rizzi, and R. L. Hollis. Contact sensor-based coverage&#xA;of rectilinear environments. In Proc. of IEEE Int’l Symposium&#xA;on Intelligent Control, 1999.&lt;/p&gt;&#xA;" OwnerUserId="8969" LastActivityDate="2015-01-29T21:30:36.077" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6475" PostTypeId="1" CreationDate="2015-01-30T02:48:48.607" Score="0" ViewCount="4481" Body="&lt;p&gt;I wanna know how much does &lt;a href=&quot;http://mobilerobots.com/ResearchRobots/PioneerP3DX.aspx&quot; rel=&quot;nofollow&quot;&gt; Pioneer P3DX &lt;/a&gt;cost? nothing mentioned in the website and I don't want to fill out the form regarding this matter. &lt;/p&gt;&#xA;" OwnerUserId="2155" LastActivityDate="2015-01-30T21:08:21.413" Title="what is the price of Pioneer P3DX" Tags="&lt;mobile-robot&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2015-03-03T16:17:04.093" ContentLicense="CC BY-SA 3.0" />
  <row Id="6476" PostTypeId="1" AcceptedAnswerId="6477" CreationDate="2015-01-30T05:57:22.960" Score="0" ViewCount="59" Body="&lt;p&gt;I am looking to build some custom hardware (nothing too fancy, just some motors, cameras and the like), and I need it to be controlled by my laptop (its going to have to do a non-trivial amount of image processing).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a way to attach $n$ motors to a laptop where $n&amp;lt;10$ via USB/e-SATA? It seems like something that should be very easy to solve, but I can't seem to find it anywhere.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not looking to get an Arduino/Raspberry Pi, really just connect the motors, and be able to control them individually. I am comfortable adding more power from a second source to supplement the USB power.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ideas?&lt;/p&gt;&#xA;" OwnerUserId="8985" LastActivityDate="2015-01-30T18:06:20.127" Title="How to run custom hardware from a laptop" Tags="&lt;motor&gt;&lt;usb&gt;" AnswerCount="2" CommentCount="0" ClosedDate="2015-03-03T16:17:38.200" ContentLicense="CC BY-SA 3.0" />
  <row Id="6477" PostTypeId="2" ParentId="6476" CreationDate="2015-01-30T06:40:22.970" Score="0" Body="&lt;p&gt;The hardware you are looking for are the controllers from the canadian company Phidgets (&lt;a href=&quot;http://www.phidgets.com/&quot; rel=&quot;nofollow&quot;&gt;http://www.phidgets.com/&lt;/a&gt;) &lt;br&gt;&#xA;They have lot of different sensor, actors and communication interfaces connected to a PC/Laptop with USB. The &quot;physical Widgets&quot; are pretty easy to use, because you get a relatively good API along with the boards.&lt;br&gt;&#xA;The disadvantage of them: They cost a lot compared to the workaround solutions with arduino/ras-pi/mbed/beaglebone&lt;/p&gt;&#xA;" OwnerUserId="6911" LastActivityDate="2015-01-30T06:40:22.970" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6478" PostTypeId="1" CreationDate="2015-01-30T14:47:49.127" Score="2" ViewCount="478" Body="&lt;p&gt;What does this sentence mean :&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;The chassis maintains the average pitch angle of both rockers.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Put in other words, &quot; the pitching angle of the chassis is the average of the pitch angles of the two rocker arms&quot; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is a pitching angle in this context? &#xA;Please explain both pitching angles.&lt;/p&gt;&#xA;" OwnerUserId="1989" LastActivityDate="2019-03-11T12:59:08.290" Title="Rocker bogie suspension system - pitch angle" Tags="&lt;mobile-robot&gt;&lt;wheeled-robot&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6482" PostTypeId="2" ParentId="6476" CreationDate="2015-01-30T18:06:20.127" Score="1" Body="&lt;p&gt;Other possible source of electronics for such applications are &lt;a href=&quot;https://www.pololu.com/&quot; rel=&quot;nofollow&quot;&gt;pololu&lt;/a&gt;, &lt;a href=&quot;http://www.adafruit.com/&quot; rel=&quot;nofollow&quot;&gt;adafruit&lt;/a&gt;, and &lt;a href=&quot;https://www.sparkfun.com/&quot; rel=&quot;nofollow&quot;&gt;sparkfun&lt;/a&gt;. All three of them offer all sorts of motor controllers, servo controllers, sensor interface boards, etc.&lt;/p&gt;&#xA;" OwnerUserId="1075" LastActivityDate="2015-01-30T18:06:20.127" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6484" PostTypeId="2" ParentId="6467" CreationDate="2015-01-30T18:19:50.630" Score="0" Body="&lt;p&gt;Consider looking into SCADA systems. Factory automation and industrial controls are often based on SCADA technologies and protocols.&lt;/p&gt;&#xA;" OwnerUserId="1075" LastActivityDate="2015-01-30T18:19:50.630" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6485" PostTypeId="2" ParentId="5193" CreationDate="2015-01-30T20:18:03.143" Score="0" Body="&lt;p&gt;I wonder if your question is stated in the right way. You can have a mapping problem, then your aim is to create the most likely map given the assumption that your poses are good. You can do it incrementally and then it is an incremental mapping. Occupancy grid is more a representation that you choose, a special kind of discrete map. You can update the values inside this data structure by using an incremental approach. However it seems that you also want to localise yourself. Then or you first do a map assuming the robot is odometry is good enough and then you use that static map for localisation, or you do some sort of refinement every now and then, or you do slam.&#xA;At least this is my opinion.&lt;/p&gt;&#xA;" OwnerUserId="8957" LastActivityDate="2015-01-30T20:18:03.143" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6486" PostTypeId="2" ParentId="6475" CreationDate="2015-01-30T21:08:21.413" Score="1" Body="&lt;p&gt;&lt;a href=&quot;http://blog.seattletimes.nwsource.com/techtracks/2006/12/p3dx_robot_is_not_40k.html&quot; rel=&quot;nofollow&quot;&gt;http://blog.seattletimes.nwsource.com/techtracks/2006/12/p3dx_robot_is_not_40k.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to this it is closer to 4000 dollars. If you are really interested just fill the form.I filled it out when they give me a price I will update this.&lt;/p&gt;&#xA;" OwnerUserId="7552" LastActivityDate="2015-01-30T21:08:21.413" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6488" PostTypeId="1" CreationDate="2015-01-31T08:38:53.010" Score="1" ViewCount="39" Body="&lt;p&gt;Hello I'm a new rc enthusiast, &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is anyone interested in rc's controlled through xbox remotes? The project is to use an xbox one or xbox 360 remote to either hijack a dx3e or dx3c remote or create a transmitter compatible with the spectrum receiver out of the xbox remotes. I've seen applications that use wifi but I'm not sure thats the route I'm looking for. From what I've read there is limited range and signal loss through the wifi network plus It may create a lag larger than what would be desirable in racing. The rc is a losi scte short course race truck. I'm not to savvy with electronic jargon but will study and learn what I can. Thanks for your thoughts.  &lt;/p&gt;&#xA;" OwnerUserId="8999" LastActivityDate="2015-03-02T20:07:14.470" Title="Creating an xbox remote that replaces spectrum dx3c or dx3e without wifi" Tags="&lt;brushless-motor&gt;" AnswerCount="1" CommentCount="0" ClosedDate="2015-03-03T16:16:45.167" ContentLicense="CC BY-SA 3.0" />
  <row Id="6489" PostTypeId="2" ParentId="1246" CreationDate="2015-01-31T08:44:10.140" Score="0" Body="&lt;p&gt;I found a web site that uses wifi if that would help with the quadcopter. endurance-rc.com They have some neat applications. I've put in an inquiry through their email chain. &lt;/p&gt;&#xA;" OwnerUserId="8999" LastActivityDate="2015-01-31T08:44:10.140" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6490" PostTypeId="2" ParentId="6488" CreationDate="2015-01-31T17:08:33.523" Score="0" Body="&lt;p&gt;Look at using the trainer port. The 3C and 3E do not have them, but 4channel aircraft radios will.  You can send PWM to that trainer port to achieve the functionality you seek.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course you can take the more difficult step of wiring in replacements for the radios internal joysticks, but that is a destructive mod, ie the radio can not be used stock again.&lt;/p&gt;&#xA;" OwnerUserId="274" LastEditorUserId="274" LastEditDate="2015-01-31T19:42:10.203" LastActivityDate="2015-01-31T19:42:10.203" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6491" PostTypeId="2" ParentId="5238" CreationDate="2015-01-31T21:30:15.347" Score="2" Body="&lt;p&gt;Suppose you have three measurements (1, 2, and 3) and four landmarks (a, b, c, d). The &lt;em&gt;joint compatibility&lt;/em&gt; is a measure of how well a subset of the measurements associates with a subset of the landmarks. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, what is the joint compatibility of (1b, 2d, 3c)? First we construct the &lt;em&gt;implicit measurement functions&lt;/em&gt; $f_{ij_i}$ for each correspondence ($f_{1b_1}$, $f_{2d_2}$, $f_{3c_3}$). The &lt;em&gt;joint implicit function&lt;/em&gt; $f_{\mathcal{H}_i}$ is simply the vector of the implicit measurement functions; i.e.,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;f_{\mathcal{H}_i} := \begin{bmatrix} f_{1b_1} \\ f_{2d_2} \\ f_{3c_3}\end{bmatrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This function is linearized in (5) in the linked paper (this requires the Jacobians  of $f_{\mathcal{H}_i}$ with respect to the state and measurement). Equation (9) calculates the covariance of $f_{\mathcal{H}_i}$ and (10) uses this covariance, along with expected value of $f_{\mathcal{H}_i}$ (that is, $h_{\mathcal{H}_i}$) to calculate the joint compatibility (or more specifically, the joint Mahalanobis distance) of this particular set of associations. The Mahalanobis distance forms a chi-square distribution, and the confidence of the association is checked against a threshold (which is dependent on the dimension of the distribution; in this case, it is three).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I described above is how you check a single set of associations. The real trick is how to check &quot;all&quot; (you don't usually need to check all of them) of the possible associations and pick the one that (a) has the maximum likelihood, AND (b) maximizes the number of associations. The reason why you want to maximize the number of associations is because (from the paper):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;&quot;The probability that a spurious pairing is jointly compatible with all the pairings of a given hypothesis decreases as the number of pairings in the hypothesis increases.&quot;&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &quot;branch and bound&quot; part of JCBB is how you efficiently traverse through the search space to find the best set of associations.&lt;/p&gt;&#xA;" OwnerUserId="4320" LastActivityDate="2015-01-31T21:30:15.347" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6492" PostTypeId="2" ParentId="4392" CreationDate="2015-01-31T22:10:14.777" Score="5" Body="&lt;p&gt;The value of $\alpha$ is just some threshold Mahalanobis distance. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's say you have four entries in your map. You take a measurement, then you calculate four predicted measurements (one for each map entry). You can calculate the Mahalanobis distance between your measurement and each of your predictions. You now have four Mahalanobis distances. The landmark that produced the smallest Mahalanobis distance is most likely the landmark that you have measured. However, what if this Mahalanobis distance is really large? Well then it's likely that your measurement actually was of a new, previously unmapped landmark. The value of $\alpha$ is simply the threshold Mahalanobis distance where you decide whether your smallest Mahalanobis distance is indeed a measurement of a landmark in your map, or it is actually a new landmark.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you decide it is a new landmark (the smallest Mahalanobis distance was larger than the threshold), you need to add it to your state. This step is not shown in the algorithm you posted. See &lt;a href=&quot;https://robotics.stackexchange.com/a/5173/4320&quot;&gt;my answer to another question&lt;/a&gt; on how to do that.&lt;/p&gt;&#xA;" OwnerUserId="4320" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2015-01-31T22:10:14.777" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6493" PostTypeId="1" AcceptedAnswerId="6499" CreationDate="2015-01-31T22:16:57.810" Score="2" ViewCount="975" Body="&lt;p&gt;I decided to work on a 2 wheeled robot position mapping problem. For that I have 2 DC motors with encoders from pololu.&#xA;I have the following two questions:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Do I need to know the model of each motor in order to tune a controller?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;What are the steps/approach used to get a good mapping (let's say 1 mm maximum error)?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="7557" LastEditorUserId="10327" LastEditDate="2016-03-02T20:07:44.800" LastActivityDate="2016-03-02T20:07:44.800" Title="2 wheeled, 2 motor robot control" Tags="&lt;pid&gt;&lt;wheeled-robot&gt;&lt;odometry&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6494" PostTypeId="2" ParentId="6428" CreationDate="2015-02-01T00:46:33.060" Score="1" Body="&lt;p&gt;Perhaps a hall effect sensor would work for your application?&#xA;&lt;a href=&quot;http://reprap.org/wiki/MagServo&quot; rel=&quot;nofollow&quot;&gt;(a)&lt;/a&gt;&#xA;&lt;a href=&quot;http://www.eeweb.com/company-blog/melexis/360-through-shaft-position-sensor-solution&quot; rel=&quot;nofollow&quot;&gt;(b)&lt;/a&gt;&#xA;&lt;a href=&quot;http://archives.sensorsmag.com/articles/0306/20/main.shtml&quot; rel=&quot;nofollow&quot;&gt;(c)&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="187" LastActivityDate="2015-02-01T00:46:33.060" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6495" PostTypeId="1" CreationDate="2015-02-01T03:01:06.153" Score="0" ViewCount="1100" Body="&lt;p&gt;How can I send a jpeg image to a microcontroller via USART?&lt;/p&gt;&#xA;" OwnerUserId="9002" LastEditorUserId="158" LastEditDate="2015-02-01T10:13:46.273" LastActivityDate="2016-02-29T18:22:13.897" Title="How can I send a jpeg image to a microcontroller via USART?" Tags="&lt;electronics&gt;&lt;embedded-systems&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6497" PostTypeId="2" ParentId="6493" CreationDate="2015-02-01T07:08:26.747" Score="0" Body="&lt;p&gt;You say that you are trying a &quot;position mapping problem&quot;, I think by this you mean that you want to track the position and orientation relative to the starting location of the robot. This is known as relative localisation. A mapping problem is quite different.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unless the terrain you are on is high-friction and flat with good wheel contact, and your mechanics in your robot are very high tolerance, I think it will not be possible to get any kind of accuracy close to 1mm for say a 2m path.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to try anyway here are the answers to your questions:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) Do you need to know the &lt;strong&gt;Dynamic Model&lt;/strong&gt; of the motors? Yes, if you want very high accuracy. In addition you will need the dynamic model of the entire robot's mobility system; all in all this is a difficult task. I would try this without the dynamic model first, using only a kinematic model. You can have a PID controller on each of the motors to achieve closed-loop speed control using the encoders.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) The only sensor measurements you have available to you are encoders on the wheels, which cannot observe the absolute position of the robot, but can estimate the velocity (plus noise). Such an approach (without absolute measurements of position/orientation) is known as Dead Reckoning, and is subject to drift in the estimate as the robot continues to move. As such, if your path is infeasibly short (5-10cm), you could in theory achieve a 1mm accuracy, however moving another 5-10cm will increase your error further.&lt;/p&gt;&#xA;" OwnerUserId="8859" LastActivityDate="2015-02-01T07:08:26.747" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6498" PostTypeId="2" ParentId="6495" CreationDate="2015-02-01T10:42:21.960" Score="0" Body="&lt;p&gt;You can use mavlink image transmission protocol. You can find more information in link below&#xA;&lt;a href=&quot;http://qgroundcontrol.org/mavlink/image_transmission_protocol&quot; rel=&quot;nofollow&quot;&gt;http://qgroundcontrol.org/mavlink/image_transmission_protocol&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can also implement any ftp protocol and send packets via usart&lt;/p&gt;&#xA;" OwnerUserId="2118" LastActivityDate="2015-02-01T10:42:21.960" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6499" PostTypeId="2" ParentId="6493" CreationDate="2015-02-01T20:07:26.840" Score="1" Body="&lt;p&gt;As Gouda mentioned, you cannot get any reasonable accuracy without knowing exactly how the control inputs translate to wheel movement. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a very hard problem: Imagine knowing only that approximately 6 volts are being applied to each motor, but not knowing anything about the efficiency of the motors in converting this to torque, the friction of the gears which translate that torque to the wheel, or the friction of the wheels and the floor in translating that torque to movement. This goes on an on. I have &lt;em&gt;never&lt;/em&gt; heard of this working, or even being attempted. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead, encoders are used to measure the effect of the control inputs on the wheels, but counting how much the wheel rotates. This is called using odometry to estimate the path of the robot, and was answered &lt;a href=&quot;https://robotics.stackexchange.com/a/134/163&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="163" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2015-02-01T20:07:26.840" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6500" PostTypeId="1" CreationDate="2015-02-02T01:46:44.797" Score="2" ViewCount="3497" Body="&lt;p&gt;Given a DH matrix for a set of joints, how would you convert the data into homogeneous transformation matrices for each joint? I've looked online, but can't find a good tutorial.&lt;/p&gt;&#xA;" OwnerUserId="9009" LastEditorUserId="110" LastEditDate="2015-02-15T17:55:21.430" LastActivityDate="2015-02-15T17:55:21.430" Title="DH Matrix to homogeneous transformation matrix for each joint" Tags="&lt;kinematics&gt;&lt;joint&gt;&lt;dh-parameters&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6501" PostTypeId="2" ParentId="6500" CreationDate="2015-02-02T05:07:20.700" Score="1" Body="&lt;p&gt;Slide 34 of &lt;a href=&quot;http://www.aeromech.usyd.edu.au/MTRX4700/Course_Documents/material/lectures/L2_Kinematics_Dynamics_2013.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;University of Sydney Experimental Robotics MTRX4700&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thumbnail image:&#xA;&lt;img src=&quot;https://i.stack.imgur.com/uVWQo.jpg&quot; alt=&quot;DH Parameter transformation&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="8859" LastActivityDate="2015-02-02T05:07:20.700" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6502" PostTypeId="2" ParentId="6500" CreationDate="2015-02-02T09:38:53.773" Score="0" Body="&lt;p&gt;In addition to the answer posted by Gouda, I would like to point out that there are different versions of D-H parameter convention. Gotta be careful which one you refer to. Also, in the computation, only 2 cylindrical motions are needed to define the homogeneous matrix, meaning you can combine the translation and rotation along the same axis:&#xA;$$&#xA;\begin{bmatrix}&#xA;c_{\theta_i} &amp;amp; -s_{\theta_i} &amp;amp; 0 &amp;amp; 0 \\&#xA;s_{\theta_i} &amp;amp; c_{\theta_i} &amp;amp; 0 &amp;amp; 0\\&#xA;0 &amp;amp; 0 &amp;amp; 1 &amp;amp; d_i\\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1&#xA;\end{bmatrix}\begin{bmatrix}&#xA;1 &amp;amp; 0 &amp;amp; 0 &amp;amp; a_i\\&#xA;0 &amp;amp; c_{\alpha_i} &amp;amp; -s_{\alpha_i} &amp;amp; 0 \\&#xA;0 &amp;amp; s_{\alpha_i} &amp;amp; c_{\alpha_i} &amp;amp; 0 \\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1&#xA;\end{bmatrix}&#xA;$$&#xA;In other words, DH paramters work as if it is a 4-DoF serial robot with two cylindrical joints. This is not a nice way to parameterize the relative location of ith joint axis w.r.t. (i-1)th (singularity exists). Multiplying with four matrices is just a waster of time.&lt;/p&gt;&#xA;" OwnerUserId="6918" LastActivityDate="2015-02-02T09:38:53.773" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6503" PostTypeId="2" ParentId="6500" CreationDate="2015-02-02T16:15:49.067" Score="0" Body="&lt;p&gt;You should read this paper: &quot;&lt;a href=&quot;http://profesores.usfq.edu.ec/laurents/IME440/DETC2005-85460_DenavitHartenberg.pdf&quot; rel=&quot;nofollow&quot;&gt;Lipkin 2005: A Note on Denavit-Hartenberg Notation in Robotics&lt;/a&gt;&quot;.  It explains the &lt;strong&gt;3&lt;/strong&gt; main DH parameter conventions and how they differ.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-02-02T16:15:49.067" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6504" PostTypeId="2" ParentId="6495" CreationDate="2015-02-02T19:34:55.720" Score="1" Body="&lt;p&gt;You can use UART Camera's that has inbuilt JPEG compression to capture JPEG images and send images to Microcontroller using UART. Here is an example of JPEG UART Camera :  &lt;a href=&quot;http://www.watterott.com/en/JPEG-Color-Camera-UART-Interface&quot; rel=&quot;nofollow&quot;&gt;http://www.watterott.com/en/JPEG-Color-Camera-UART-Interface&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8995" LastActivityDate="2015-02-02T19:34:55.720" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6505" PostTypeId="2" ParentId="5310" CreationDate="2015-02-03T02:37:08.867" Score="3" Body="&lt;p&gt;I would like to suggest you to use Beaglebone Black , it is smaller than size compared to Raspberry pie. It is just the size of a credit card. And has a faster processor of 1 GHz and has an inbuilt 3D graphics Accelerator. There is already a Cape Board for BBB that supports HD Video sensors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update :&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And if you want to use OpenCL then I would suggest you to take a look at PowerVR SGX540 GPU boards such as &lt;a href=&quot;http://shop.imgtec.com/uk/product/mips-creator-ci20/&quot; rel=&quot;nofollow&quot;&gt;MIPS® Creator CI20&lt;/a&gt; and &lt;a href=&quot;http://pandaboard.org/content/pandaboard-es&quot; rel=&quot;nofollow&quot;&gt;Pandaboard ES&lt;/a&gt; which support OpenCL but again for the size would be larger than BBB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other Possible Boards:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Arndale Octa Board&lt;/li&gt;&#xA;&lt;li&gt;ODROID-XU3&lt;/li&gt;&#xA;&lt;li&gt;Samsung Chromebook&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="8995" LastEditorUserId="8995" LastEditDate="2015-02-03T09:21:47.000" LastActivityDate="2015-02-03T09:21:47.000" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6506" PostTypeId="2" ParentId="2096" CreationDate="2015-02-03T10:24:39.617" Score="2" Body="&lt;p&gt;I hope you have already done &lt;a href=&quot;http://www.openrobots.org/morse/doc/1.2/dev/armature_creation.html&quot; rel=&quot;nofollow&quot;&gt;Armature creation&lt;/a&gt;. If not you need to do that first. Components in MORSE are either robots, sensors or actuators. Robots are mainly containers for sensors and actuators. Assuming you already have an initial simulation environment called mysim, you can create a new sensor with:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ morse add sensor &amp;lt;name&amp;gt; mysim&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;or, for actuators:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ morse add actuator &amp;lt;name&amp;gt; mysim&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Also I guess you are using Python. You need to implement a sub-class of &lt;strong&gt;morse.core.sensor.Sensor&lt;/strong&gt;, respectively of &lt;strong&gt;morse.core.actuator.Actuator&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;from morse.core.sensor import Sensor&#xA;&#xA;class MyImageSensor(Sensor):&#xA;&#xA;    _name = &quot;MyImageSensor&quot;&#xA;    _short_descr = &quot;A custom Image Sensor&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You can know more on &lt;a href=&quot;http://www.openrobots.org/morse/doc/1.2/dev/adding_component.html&quot; rel=&quot;nofollow&quot;&gt;how to add more components&lt;/a&gt; from here. Also please note that Armature Pose sensor must be added as a child of the armature you want to sense. You can see an example source code &lt;a href=&quot;http://www.openrobots.org/morse/doc/1.2/_modules/morse/sensors/armature_pose.html&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt; .  &lt;/p&gt;&#xA;" OwnerUserId="8995" LastActivityDate="2015-02-03T10:24:39.617" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6507" PostTypeId="2" ParentId="6467" CreationDate="2015-02-03T17:21:07.867" Score="4" Body="&lt;p&gt;As a professional robotics engineer (with an Electrical and Computer Eng bachelors, although I focused more on the CE side), this depends entirely on what aspect of a robotic system you'd like to work on. Robots are interdisciplinary systems by definition, and you will always need a team with a broad skill-set to build one. That being said, there are places on that team for people who become experts in a single discipline as well as people who have a working knowledge in all areas of robotics. If you find that you love to work on something specific: such as small embedded systems that are operating with limited CPU power via a microcontroller, then learning C and understanding Assembly (and how to use your knowledge of it to optimize C code) would be ideal. Another example where EE skills are very applicable is in buliding the sensors that generate data to drive autonomous tasks, such as a stereo camera, LIDAR, RADAR, IMU, gyroscope, GPS, proximity sensors, etc. Again, you would be focused on one area of hardware development, and not really building robotic systems. You'd be building a component used in a robotic system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My passion, and what I often work on, is at a higher systems level. For example, I work on Unmanned Ground Vehicles (UGVs), and these can have multiple motherboards installed with state-of-the-art processors (a platform I currently work on has 2 i7 quad core CPUs). As a result, I'm running Ubuntu and developing in C++. If working on larger systems like UAVs, autonomous cars, etc. interests you, then I would highly recommend C++. For advanced autonomy tasks like building perception systems for 3D reconstruction from a stereo camera and path planners that model vehicle dynamics and do forwards physics simulations, everything I've written has been in C++. The only time I've used C at work (and I never needed to optimize Assembly for my purposes) was when I wrote low-level control code for the drive-by-wire system on a UGV, which was developed on a Raspberry Pi. In fact, most of what I developed here was still in C++, but I was provided with some libraries written in C to interface with a custom daughterboard for the Raspberry Pi (that one of our EE experts designed) which interfaced with the actuators and sensors installed on the vehicle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Specifically for an interview, I would suggest showing the passion that you have for your work. In my experience, it's very difficult to judge a person's technical capabilities in a single interview, especially for students who are in the process of learning their trade. If you show that you love what you're doing (bonus points if you can show that you code/design PCBs/etc in your spare time), then most employers will latch onto your enthusiasm and come to the conclusion that you have great potential because you are the type of person that will learn quickly. In this respect, you become an investment that the employers are happy to make. If you had years of experience in the work force, that's when I would start to think about what you know, instead of what you can learn and become on the job.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: Forgot to mention, developing your own side projects with ROS and OpenCV would give you some fantastic experience for some more advanced software-related robotics skills. You can of course build your own mechanical platform and integrate whatever sensors/electronics you'd like for a full interdisciplinary experience from which you'd learn a lot. For example, go build a robot from scratch that can follow a yellow object you hold in front of it, like a dog and a bone!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.ros.org/&quot; rel=&quot;nofollow&quot;&gt;http://www.ros.org/&lt;/a&gt;&#xA;&lt;a href=&quot;http://opencv.org/&quot; rel=&quot;nofollow&quot;&gt;http://opencv.org/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="1960" LastEditorUserId="1960" LastEditDate="2015-02-03T19:48:59.703" LastActivityDate="2015-02-03T19:48:59.703" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6508" PostTypeId="1" AcceptedAnswerId="6521" CreationDate="2015-02-03T18:03:17.887" Score="6" ViewCount="2559" Body="&lt;p&gt;I would like to build a motorized robot with stereo vision that sends visual input to a PC over wifi for processing. A Raspberry Pi would have been perfect for the task if it would be possible to connect 2 cameras. The Pi 2 would be powerful enough for two USB webcams (with minimum 8fps) I guess, but the shared USB seems to be a bottleneck (2 cameras + wifi dongle).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What other options are there to send input from 2 cameras and control a motor (or an arduino)?&lt;/p&gt;&#xA;" OwnerUserId="8953" LastActivityDate="2017-02-28T12:00:25.173" Title="Low power computer for stereo vision" Tags="&lt;computer-vision&gt;&lt;cameras&gt;" AnswerCount="6" CommentCount="6" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6510" PostTypeId="1" AcceptedAnswerId="6535" CreationDate="2015-02-03T20:18:50.893" Score="2" ViewCount="397" Body="&lt;p&gt;I am wondering what the use is of two PID loops to control a quadcopter. One PID for stability control and another PID for rate control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why can't you just use one PID per axis to control a quadcopter where you take the current and desired angle as input and motor power as the output?&lt;/p&gt;&#xA;" OwnerUserId="9014" LastActivityDate="2015-02-06T09:51:21.890" Title="Multiple PIDs in quadcopter" Tags="&lt;quadcopter&gt;&lt;pid&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6511" PostTypeId="1" AcceptedAnswerId="6834" CreationDate="2015-02-03T21:26:42.290" Score="5" ViewCount="2467" Body="&lt;p&gt;I've noticed that the industrial robot arms have very smooth, fast, and strong movement.  Does anyone know what type of servos they use.  I'm trying to build my own and don't want to have the jerky movement that is seen in a lot of DIY robot arms?  Thanks. &lt;/p&gt;&#xA;" OwnerUserId="9015" LastActivityDate="2019-08-12T08:15:11.323" Title="What type of servos are used in industrial robot arms like Universal Robot UR5?" Tags="&lt;robotic-arm&gt;&lt;otherservos&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6515" PostTypeId="1" AcceptedAnswerId="6545" CreationDate="2015-02-04T10:27:08.773" Score="1" ViewCount="4147" Body="&lt;p&gt;I am going to start a new project consisting in implementing an autonomous driving RC car.&#xA;The car as it is now, has a camera installed on each side of the car, i.e. 4 cameras in total. They are connected to a board which is able to read and process the video input.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have been researching about obstacle detection using a single camera (without stereo cameras, e.g. &lt;a href=&quot;https://robotics.stackexchange.com/questions/1348/single-camera-vision-and-mapping-system&quot;&gt;Single camera vision and mapping system&lt;/a&gt; ) and although it seems possible it also seems quite complex. Modifying the cameras set-up is not an option. I already have some video processing algorithms, like dense optical flow, which might help me, but I am not sure whether I might me able to implement the system in the time I have (4 months). I also don't know how reliable would be the final solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the first approach is not feasible, as an alternative option I also could install distance sensors in the car to detect obstacles. It seems that usually the most preferred choice is to use ultrasonic sensors. I would need to install them and I would not take advantage of the cameras, but it seems that the final complexity would be lower.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is the first approach feasible? What are the pros and cons of each approach? If I implemented the second option, how many sensor would I need?&lt;/p&gt;&#xA;" OwnerUserId="9013" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2019-07-25T07:04:17.057" Title="Computer vision with single camera vs. distance sensors for obstacle detection" Tags="&lt;sensors&gt;&lt;computer-vision&gt;&lt;ultrasonic-sensors&gt;" AnswerCount="4" CommentCount="3" FavoriteCount="4" ClosedDate="2019-07-25T10:35:15.393" ContentLicense="CC BY-SA 3.0" />
  <row Id="6516" PostTypeId="1" AcceptedAnswerId="6550" CreationDate="2015-02-04T12:25:44.397" Score="1" ViewCount="403" Body="&lt;p&gt;I have a project where I need a motor that can turn some number of rotations which will spool up a cable attached to a spring-closed device to open it up. When power is disconnected, the spring closure will cause the spool to unwind and the device to close.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the closed position, no power is available. (i.e. The closure mechanism needs to be 100% passive.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to keep this open for some time, I will need a motor that is capable of being stalled for long periods without having the windings burn up. I know some motors can do this, such as the motors they use on spring closed HVAC dampers, but I don't know how to find them or if there's a particular name I should be using to find them. I know I could probably do this with a stepper motor, but that seems overkill for the application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only requirements are higher torque to open this mechanism, no gearing that prevents the motor from spinning when power is disconnected, and the ability to be stalled.&lt;/p&gt;&#xA;" OwnerUserId="9022" LastActivityDate="2015-03-10T16:36:11.430" Title="Stallable motor - 100% duty cycle higher torque motor that can be stalled without burning up" Tags="&lt;motor&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6517" PostTypeId="2" ParentId="6515" CreationDate="2015-02-04T13:01:58.490" Score="1" Body="&lt;p&gt;Using a single camera it's not possible to measure distance. At best you can say that object B is twice as far away as object A, but you still don't know if object A is 1m or 10m away. The only way to resolve this is to add extra information e.g. from another calibrated camera, a distance sensor, or knowing the size of some things in the scene.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depending on the obstacles you are expecting, sonar is probably your best bet since it's straightforward and simple to use. It won't detect as many obstacles as vision can but given your time constraints I would recommend using it.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2015-02-04T13:01:58.490" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6518" PostTypeId="2" ParentId="6515" CreationDate="2015-02-04T13:30:04.683" Score="0" Body="&lt;p&gt;You need the depth information, that is the distance, for the obstacle avoiding.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;well, actually I'm wondering if your camera is a RGBD camera but you don't know. It is quite strange there is only a single camera in each side of your car.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Besides RGBD camera, another option is using two camera to find the distance like this:&lt;img src=&quot;https://i.stack.imgur.com/72ktW.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Optical flow will not help you, it is used to detect moving objects while in your camera everything will be moving.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So from my point, you can not take advantage of the cameras in your project.&#xA;Ultrasonic is a cheap and easy way for obstacle avoiding.&#xA;Or you can try some IR sensor. And if you want a higher accuracy, buy a laser rangefinder&lt;/p&gt;&#xA;" OwnerUserId="4514" LastActivityDate="2015-02-04T13:30:04.683" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6519" PostTypeId="2" ParentId="6510" CreationDate="2015-02-04T13:44:32.683" Score="0" Body="&lt;p&gt;I'm not quite old in quadcopter, but from my understanding, you can, but it is quite annoying.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We set up the PID control loops as position control loop and speed control loop because these are two ways we want and we will control the quadcopter.&#xA;For example, I want my quadcopter rotate 3 rad/s in yaw then stop or fly 5 meters away in y axis then stop. So I just set the reference signal as 3 in speed control loop and 5 in position control loop. That is enough. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But if we want to do the same thing with PID control for every axis, you need to calculate how these three inputs are and when to change them in order to make quadcopter stop. That is not quite convenient.&lt;/p&gt;&#xA;" OwnerUserId="4514" LastActivityDate="2015-02-04T13:44:32.683" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6520" PostTypeId="2" ParentId="4885" CreationDate="2015-02-04T14:04:12.223" Score="2" Body="&lt;p&gt;What you need to implement is the high-level algorithm. ROS is just a platform for you to handle data communication, don't put your eye only on ROS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From my experience, using &lt;a href=&quot;https://github.com/epsilonorion/roscopter&quot; rel=&quot;nofollow noreferrer&quot;&gt;ROS on ARM&lt;/a&gt;, with SLAM and localization:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://scholar.google.com.hk/citations?view_op=view_citation&amp;amp;hl=en&amp;amp;user=u8Q0_xsAAAAJ&amp;amp;citation_for_view=u8Q0_xsAAAAJ:u5HHmVD_uO8C&quot; rel=&quot;nofollow noreferrer&quot;&gt;Autonomous multi-floor indoor navigation with a computationally constrained MAV&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.ra.cs.uni-tuebingen.de/publikationen/2013/schauwecker_icuas2013.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;On-Board Dual-Stereo-Vision for Autonomous Quadrotor Navigation&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.inf.ethz.ch/personal/pomarc/pubs/HengICRA11.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Autonomous Obstacle Avoidance and Maneuvering on a Vision-Guided&#xA;MAV Using On-Board Processing&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;and &lt;a href=&quot;https://github.com/uzh-rpg/rpg_svo&quot; rel=&quot;nofollow noreferrer&quot;&gt;one amazing demo&lt;/a&gt; in the ICRA last year.&lt;/p&gt;&#xA;" OwnerUserId="4514" LastEditorUserId="37" LastEditDate="2018-05-28T10:33:01.273" LastActivityDate="2018-05-28T10:33:01.273" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6521" PostTypeId="2" ParentId="6508" CreationDate="2015-02-04T16:55:50.993" Score="5" Body="&lt;p&gt;You probably are asking too much of inexpensive components.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The raspberry Pi does not have 2 camera connections, but its brother, the Pi Compute board does.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/htHOP.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://makezine.com/2014/11/03/stereo-depth-perception-with-raspberry-pi/&quot; rel=&quot;noreferrer&quot;&gt;http://makezine.com/2014/11/03/stereo-depth-perception-with-raspberry-pi/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even then, you will have to write optimized GPU Code in assembler to get anything near acceptable performance if you try to do it all on the Pi.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I doubt there will be any cpu cycles left to do anything else.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For now I believe the best inexpensive solution remains the Kinect. I've seen some recent new products described, but no news of how they work for robotics (Intel RealSense, Creative Senz3D). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Wait for something new or spend more money or use the Kinect.&lt;/p&gt;&#xA;" OwnerUserId="274" LastActivityDate="2015-02-04T16:55:50.993" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6522" PostTypeId="1" AcceptedAnswerId="6524" CreationDate="2015-02-04T19:31:18.033" Score="2" ViewCount="510" Body="&lt;p&gt;We implemented a PID controller for our quadcopter which allows us to fly from point A to B. The precise position of the quadcopter is measured using an external tracking system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now that we can fly from A to B, we would like to implement a controller to fly more complex trajectories with multiple set points. E.g. from A to B to C or flying in a circle using sample points.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We tried to use our regular PID controller for this but this of course doesn't work well since the PID controller forces the quadcopter to stabalize at any set point. We would like to have a controller that allows the quadcopter to fly a trajectory fairly smoothly. I think this has to be a controller that takes into account multiple set points in the trajectory at the same time so that it can already slow down/speed up based on the trajectory that is ahead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can someone point me to some controllers / algorithms that I can look at to realize this? Do I need a completely different controller to do this or will it be an adapted version of the PID controller that I have now?&lt;/p&gt;&#xA;" OwnerUserId="9024" LastEditorUserId="350" LastEditDate="2015-02-04T21:36:37.083" LastActivityDate="2015-02-04T21:36:37.083" Title="PID controller for trajectory with mutliple setpoints" Tags="&lt;quadcopter&gt;&lt;pid&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6523" PostTypeId="1" CreationDate="2015-02-04T20:18:18.857" Score="1" ViewCount="1141" Body="&lt;p&gt;In order to identify the dynamics of my DC motor, I am trying to command it with Xcos using the Arduino tool box. The problem that I am facing is how to give the motor an input command such that I get some given angle position as output. I can only control the input voltage to the motor via PWM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have been thinking about converting the angle to voltage but I can't figure it out.&#xA;Can somebody help me?&lt;/p&gt;&#xA;" OwnerUserId="7557" LastEditorUserId="6941" LastEditDate="2015-02-05T14:53:43.360" LastActivityDate="2015-02-05T14:53:43.360" Title="Building an open loop controller for a simple DC motor position problem" Tags="&lt;arduino&gt;&lt;motor&gt;&lt;control&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6524" PostTypeId="2" ParentId="6522" CreationDate="2015-02-04T20:26:13.753" Score="1" Body="&lt;p&gt;The most common way to address this is to actually change the setpoint sent to the controller over time. For example, to get from point A to point B in T seconds, you would do&#xA;$$&#xA;\begin{align}&#xA;x^d(t) &amp;amp;=  t p_B + (T-t) p_A&#xA;\end{align}&#xA;$$&#xA;where $x^d$ is the desired position sent to the controller, $p_A$ and $p_B$ are the two setpoints, and $t$ is time (assume $t=0$ at the start of the maneuver). For best control it is also good to define a desired velocity:&#xA;$$&#xA;\begin{align}&#xA;v^d &amp;amp;= \frac{||p_B - p_A||}{T}&#xA;\end{align}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This process in general is called trajectory generation.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2015-02-04T20:26:13.753" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6525" PostTypeId="2" ParentId="6523" CreationDate="2015-02-04T22:07:08.720" Score="1" Body="&lt;p&gt;You would need to construct a model of the motor's performance, and use that model to solve for the input that would give you the output you wanted.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the simplest case, you could measure the motor's acceleration and deceleration -- the position of the motor over time -- and end up with 2 functions.  Then you'd find the right amount of time to spend applying voltage so that the predicted position (after coming to a stop) is closest to your target position. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In graphical terms, you'd have a velocity-vs-time graph of acceleration that slopes up, and a velocity-vs-time graph of deceleration that slopes down.  If you overlay them, they should cross.  Now slide the deceleration graph left or right until the &lt;strong&gt;area&lt;/strong&gt; underneath the 2 lines is equal to the position that you want.  The point where they intersect indicates the time where you should stop applying voltage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Without a position sensor, the quality of your result is only as good as the quality of your model.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2015-02-04T22:07:08.720" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6526" PostTypeId="1" AcceptedAnswerId="6538" CreationDate="2015-02-04T22:44:40.590" Score="2" ViewCount="75" Body="&lt;p&gt;Apologies if this is a stupid question, but if I have a 3-axis magnetometer, and I calculate the vector magnitude as&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sqrt(magX * magX + magY * magY + magZ * magZ)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;...then should I not always get the same value, regardless of the sensor's orientation? Mine is all over the place, and I feel as though I'm missing something obvious.&lt;/p&gt;&#xA;" OwnerUserId="2176" LastActivityDate="2015-02-05T21:15:44.060" Title="3-axis Magnetometer Question" Tags="&lt;imu&gt;&lt;magnetometer&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6527" PostTypeId="2" ParentId="6523" CreationDate="2015-02-04T23:43:56.877" Score="1" Body="&lt;p&gt;Why do you want to go for an open-loop approach when you have position and velocity feedback at your disposal? In fact, only &lt;strong&gt;closed-loop controllers&lt;/strong&gt; can provide desirable properties such as &lt;strong&gt;convergence&lt;/strong&gt;, &lt;strong&gt;robustness&lt;/strong&gt;, resilience to &lt;strong&gt;uncertainties&lt;/strong&gt; in the model.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is no static relation between voltage and angle position, simply because at steady-state a constant voltage yields a constant motor speed. Therefore, it's only how you vary the voltage over time that has influence in terms of final angle position (the integral of the speed), as &lt;a href=&quot;https://robotics.stackexchange.com/users/350/ian&quot;&gt;Ian&lt;/a&gt; has tried to &lt;a href=&quot;https://robotics.stackexchange.com/a/6525/6941&quot;&gt;explain&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Under some wide conditions the relation between the voltage and the position can be described by a transfer function with two real poles: one in the origin and one negative pole accounting for the mechanical response of the motor (we can neglect the fastest electrical pole). The transfer function is simple and can be suitably identified by injecting special voltage waveforms (e.g. step-wise, train of pulses, chirps) and measuring back the position profiles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once the model is found, you have then to come up with a methodology to shape the input voltage $V$ in order to reach for the target position $\theta_d$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In closed-loop it is very easy to select $V=PID(\theta_d-\theta)$, where $\theta$ is the position read from the encoder and $PID(\cdot)$ stands for the &lt;em&gt;Proportional-Integral-Derivative&lt;/em&gt; control function, which ensures converge towards $\theta_d$ for a given set of control gains, so as robustness of the control action against variation of model parameters. In its simplest form, $PID(\cdot)$ can be just a multiplication by a coefficient $K$. In short, you are pretty sure that you reach the target.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By contrast, in open-loop you need to design a sort of input shaping of the voltage with resort to e.g. trapezoidal waveforms or other graphical methods (see Ian's answer), given the target to attain. Importantly, you have no guarantee that you will get on the target at the end, because of the uncertainties in the model that open-loop cannot compensate for.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2015-02-04T23:43:56.877" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6529" PostTypeId="2" ParentId="446" CreationDate="2015-02-05T13:01:38.873" Score="0" Body="&lt;p&gt;Holding torque has nothing to do with driving the amount of torquelead screws. The holding torque rating is only for when the Axis is in stationary position holding.  What you want it to maximize your stepper driver amperage with a stepper that has the same or a little less amp rating&lt;/p&gt;&#xA;" OwnerUserId="9028" LastActivityDate="2015-02-05T13:01:38.873" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6531" PostTypeId="1" AcceptedAnswerId="6539" CreationDate="2015-02-05T14:12:21.383" Score="1" ViewCount="198" Body="&lt;p&gt;I am designing a pan-tilt camera mount using standard hobby servos.    Many existing designs use the servo shaft as a revolute joint, as opposed to simply a torque producing element.  As a revolute joint the servo mechanism is subject to different torques and forces.  Is using a servo shaft as a revolute joint recommended practice or should a bearing be used?&lt;/p&gt;&#xA;" OwnerUserId="9030" LastActivityDate="2015-02-05T21:58:17.377" Title="Using hobby servo as axle" Tags="&lt;rcservo&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6532" PostTypeId="1" AcceptedAnswerId="6546" CreationDate="2015-02-05T14:27:03.177" Score="1" ViewCount="1932" Body="&lt;p&gt;I am beginner in Robotics .I have taken admission for Electronics engineering one year back as we don't have specifically Robotics Engineering Branch in my Country.Now I am suffering from questions like what is the scope of Electronics( &lt;strong&gt;not Electrical&lt;/strong&gt;) Engineering in Robotics/ Automation?I am &lt;strong&gt;unable to distinguish between the role of Electronics engineer and Computer Engineer&lt;/strong&gt; in Robotics &lt;strong&gt;as in both cases programming is required&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Also,if I don't like to do programming(coding),are there any other options to stick to Robotics / Automation field as per my branch(Electronics Engineering ) is concerned?&lt;/strong&gt;. &lt;/p&gt;&#xA;" OwnerUserId="9025" LastEditorUserId="9025" LastEditDate="2015-02-05T17:20:51.927" LastActivityDate="2017-03-29T11:44:05.123" Title="What is the scope of Electronics Engineering in Robotics/Automation?" Tags="&lt;control&gt;&lt;electronics&gt;&lt;embedded-systems&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6533" PostTypeId="2" ParentId="6478" CreationDate="2015-02-05T15:45:49.860" Score="2" Body="&lt;p&gt;The &amp;quot;pitch angle&amp;quot; or &amp;quot;pitching angle&amp;quot; refers to whether the chassis is level.  An angle of 0 degrees would be perfectly flat, 90 degrees would be perfectly vertical.  So if the vehicle's left side went up a 30 degree incline while the right side stayed flat, the chassis should tilt up 15 degrees.&lt;/p&gt;&#xA;&lt;p&gt;To achieve this, the two sides of the rocker-bogie suspension are connected by a simple differential.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.alicesastroinfo.com/2012/07/mars-rover-rocker-bogie-differential/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/NfkPA.gif&quot; alt=&quot;rocker bogie suspension&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&#xA;&lt;sub&gt;(source: &lt;a href=&quot;http://www.alicesastroinfo.com/wp-content/uploads/2012/07/MSL-c-anim-200.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;alicesastroinfo.com&lt;/a&gt;)&lt;/sub&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.alicesastroinfo.com/2012/07/mars-rover-rocker-bogie-differential/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/igD7k.jpg&quot; alt=&quot;detail&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&#xA;&lt;sub&gt;(source: &lt;a href=&quot;http://www.alicesastroinfo.com/wp-content/uploads/2012/07/MER-txt-640.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;alicesastroinfo.com&lt;/a&gt;)&lt;/sub&gt;&lt;/p&gt;&#xA;&lt;p&gt;See also &lt;a href=&quot;https://robotics.stackexchange.com/a/1241/350&quot;&gt;this answer which includes an image of the differential bar on the curiosity rover&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2019-03-11T12:59:08.290" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="6534" PostTypeId="2" ParentId="6469" CreationDate="2015-02-05T16:21:29.837" Score="2" Body="&lt;p&gt;The wheels simply pivot.  In terms of the mechanism, they've just placed the center of rotation for the wheel's steering through the center point of the wheel itself.  There is no special name for this; &lt;a href=&quot;https://robotics.stackexchange.com/q/4442/350&quot;&gt;the practice of steering just means that all the wheels are oriented toward a single point&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The actuation is done by &lt;a href=&quot;http://mars.nasa.gov/msl/mission/rover/wheelslegs/&quot; rel=&quot;nofollow noreferrer&quot;&gt;10 servo motors&lt;/a&gt;, one per wheel for driving and one per corner-wheel for steering.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2015-02-05T16:21:29.837" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6535" PostTypeId="2" ParentId="6510" CreationDate="2015-02-05T16:30:17.197" Score="1" Body="&lt;p&gt;Because it is an under-actuated system. You can not directly control the linear velocity with only one PID. To move in the 3D space you need to control the linear velocity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the first loop uses the angular velocity (or the attitude itself) as control inputs to control the linear velocity, while the second loop uses the torques or rpms of the fans (real commands) to achieve that angular velocity: backstepping-like effect. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this comment helpful?&lt;/p&gt;&#xA;" OwnerUserId="5620" LastEditorUserId="5620" LastEditDate="2015-02-06T09:51:21.890" LastActivityDate="2015-02-06T09:51:21.890" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6536" PostTypeId="1" CreationDate="2015-02-05T16:35:17.927" Score="2" ViewCount="270" Body="&lt;p&gt;I'm not entirely sure if this is the right area to post this question, but looking at the other subjects on StackExchange, this seems to be the best fit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am a complete beginner to hydraulic systems, and I've wanted to learn more about this area. I'm designing a hydraulic system that involves using hydraulics to push/pull objects using pistons. I have looked at what the basic requirements are for a hydraulic system, but there is one thing that escapes me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I come from an electronic background, and I noticed that the hydraulic pumps (for example, this one) seem to lack a motor to drive the fluid. Am I wrong? If not, I've been looking everywhere for a motor that can/should be attached to said pump, but I cannot seem to find anywhere that sells them. Is it just a simple DC motor (with correct specs), or should there be a specific motor designed for hydraulic pumps?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking around, I came across this, but looking through the specs, I don't see a power requirement, and being used to seeing power consumption in datasheets, I'm not even sure it is a motor!&lt;/p&gt;&#xA;" OwnerUserId="9033" LastActivityDate="2016-11-08T00:13:28.420" Title="Motor for a hydraulic pump in a hydraulic system" Tags="&lt;motor&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6537" PostTypeId="2" ParentId="6515" CreationDate="2015-02-05T17:16:58.890" Score="1" Body="&lt;p&gt;If you are going to be operating on strictly flat surfaces, single camera optical flow can be used, although it's not an optimal solution. By knowing the camera intrinsics and extrinsics, you can predict expected optical flow for features that lay on the ground, and any grouping of flow vectors that violate that potentially indicate obstacles that rise above the ground. You won't get range information or scale information, however.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is not an ideal method at all - just something that is possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See &lt;a href=&quot;http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.33.1606&quot; rel=&quot;nofollow&quot;&gt;http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.33.1606&lt;/a&gt; for details.&lt;/p&gt;&#xA;" OwnerUserId="9032" LastActivityDate="2015-02-05T17:16:58.890" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6538" PostTypeId="2" ParentId="6526" CreationDate="2015-02-05T21:15:44.060" Score="1" Body="&lt;p&gt;I don't think it would make a difference what the orientation is. I would recommend maybe using hall effect sensors instead of a 3 axis magnetometer if ALL else fails. That would be a last resort though because they are probably not going to give you the kind of accuracy and precision you are looking for. &lt;/p&gt;&#xA;" OwnerUserId="9034" LastActivityDate="2015-02-05T21:15:44.060" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6539" PostTypeId="2" ParentId="6531" CreationDate="2015-02-05T21:58:17.377" Score="1" Body="&lt;p&gt;A bearing should be used, as it is a basic principle of mechanical engineering, but many times it is not.  It is often avoided as a cost benefit result, hobby servos are cheap.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Servos themselves may have bearings and even metal gears.  Brackets are available that have opposing bearing blocks. You have to decide if it worth the costs or is a mechanical necessity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/Qdp9N.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="274" LastActivityDate="2015-02-05T21:58:17.377" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6540" PostTypeId="2" ParentId="6536" CreationDate="2015-02-06T00:30:50.113" Score="1" Body="&lt;p&gt;In general, hydraulic pumps are sold without motors, although some suppliers (eg &lt;a href=&quot;http://www.hydraproducts.co.uk/hydraulic-calculators/output-power.aspx&quot; rel=&quot;nofollow&quot;&gt;hydraproducts.co.uk&lt;/a&gt;) sell complete systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hydraulic pumps typically are driven by gas or diesel engines, or by large AC motors, which often are more affordable and more available than comparable DC motors.  See &lt;a href=&quot;http://hydraulicspneumatics.com/other-technologies/chapter-22-fluid-power-formula&quot; rel=&quot;nofollow&quot;&gt;hydraulicspneumatics.com&lt;/a&gt; for fluid power formulas that will allow computing the size of motor required.  For example, one of the smallest hydraulic pumps available at &lt;a href=&quot;http://www.surpluscenter.com/Hydraulics/Hydraulic-Pumps/Vane-Pumps/0-20-CU-IN-CRS-V10-1P1P-1C20-VANE-PUMP-9-8532-1.axd&quot; rel=&quot;nofollow&quot;&gt;surpluscenter.com&lt;/a&gt; delivers  “3.6 GPM @ max. RPM”,   “2500 PSI cont.”, and works at RPMs from 600 up to 4800.  From the power formula “Horsepower to drive a pump @ 85% efficiency [is] HP = GPM x PSI x 0.000686”, it needs a motor giving about 6.2 HP (4.6 KW) at 4800 RPM.  A slower, less powerful motor would support either less flow or lower pressure.&lt;/p&gt;&#xA;" OwnerUserId="478" LastActivityDate="2015-02-06T00:30:50.113" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6541" PostTypeId="1" CreationDate="2015-02-06T05:53:15.653" Score="6" ViewCount="1523" Body="&lt;p&gt;I will be using at least one programmable real-time unit (PRU) to send pulses to a stepper motor driver but before I begin, I am trying to lay out the structure of my programs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am using this library &lt;a href=&quot;http://processors.wiki.ti.com/index.php/PRU_Linux_Application_Loader_API_Guide#prussdrv_map_prumem&quot; rel=&quot;nofollow&quot;&gt;PRU Linux API&lt;/a&gt; &#xA;for loading assembly code into the PRU instruction memory but there doesn't seem to be much documentation other then whats at that wiki and the source:&#xA;&lt;a href=&quot;https://github.com/beagleboard/am335x_pru_package/tree/master/pru_sw&quot; rel=&quot;nofollow&quot;&gt;github-pru-package&lt;/a&gt;h&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My c program will be calculating the position of the sun using an algorithm and executing the assembly/writing a pulse count to the PRU(s) data memory so they can just switch on/off a gpio at my desired frequency and for the number of pulses required to turn a stepper the appropriate number of steps. I am not even sure if this is an acceptable method but I am pretty new at this and it seems like a simple way to accomplish my task&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My Questions regarding the library functions are:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Is there a significant performance difference between using &lt;code&gt;prussdrv_map_prumem&lt;/code&gt; or &lt;code&gt;prussdrv_pru_write_memory&lt;/code&gt; to give the PRU(s) access to the pulse count?&lt;/li&gt;&#xA;&lt;li&gt;Would it be better halt the PRU assembly program after has completed the tasks for each pulse count then re-execute it with new values, or keep the PRU program running and poll for a new pulse count to be written in?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I plan to send a pulse count every 10 seconds or so.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any suggestions on revisiting the whole structure and logic are welcome as well.&lt;/p&gt;&#xA;" OwnerDisplayName="user7690" LastEditorUserId="9720" LastEditDate="2016-07-01T13:17:00.417" LastActivityDate="2017-08-26T19:10:40.957" Title="BeagleBone - PRU questions" Tags="&lt;c&gt;&lt;beagle-bone&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6544" PostTypeId="1" AcceptedAnswerId="6547" CreationDate="2015-02-06T14:52:52.943" Score="1" ViewCount="99" Body="&lt;p&gt;For example, I have a brush-less outrunner with 14 poles and 12 stator windings. It has three connectors. Can this motor be controlled in a way that it performs a single step of 30 degrees (360/12)?&lt;/p&gt;&#xA;" OwnerUserId="1054" LastActivityDate="2015-02-06T19:28:22.517" Title="What's the smallest rotation a brush-less motor can perform?" Tags="&lt;motor&gt;&lt;brushless-motor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6545" PostTypeId="2" ParentId="6515" CreationDate="2015-02-06T15:37:57.837" Score="3" Body="&lt;p&gt;Honestly, I don't think you should use the cameras just because you have them. The ultrasonic sensor is a way simpler and more effective solution. There are ways to tell depth with one camera, but they are far from effective in most cases. If you want to try it, I would say play around it when you don't have a deadline if you're interested in the learning experience. As far as whether you could get it working in 4 months or not, it depends on how familiar you are with this kind of application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you really want to use the cameras, it might be easier to get another camera and mount it so that it's facing forward somehow, either on top of the car or somewhere else. This might be more effort than it's worth, though. I would go this route if you really want to use cameras for personal reasons.&lt;/p&gt;&#xA;" OwnerUserId="4198" LastActivityDate="2015-02-06T15:37:57.837" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6546" PostTypeId="2" ParentId="6532" CreationDate="2015-02-06T17:32:56.073" Score="2" Body="&lt;p&gt;Robotics can be currently broken down in three main components: &lt;strong&gt;mechanics&lt;/strong&gt;, &lt;strong&gt;electronics&lt;/strong&gt; and then ... comes the fuzzy part, that is where there was used to be just &lt;strong&gt;computer science&lt;/strong&gt; while in the recent past we see that many contributions are capitalized by people of diverse expertises, ranging from machine learning to even psychology (because robotics is getting a technology that can be enjoyed by a broader audience).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An &lt;strong&gt;electronic engineer&lt;/strong&gt; is usually required to design the embedded boards that control the robot actuation, gather data from the sensors and exchange such information over the bus connecting the distributed system. His duty is thus mostly to deal with the &lt;strong&gt;hardware design&lt;/strong&gt; of the boards so as the coding of the &lt;strong&gt;firmware&lt;/strong&gt;, which is the special software (often written in C/C++) running on the boards that performs the activities outlined above on a regular basis (scheduling). This is the classical scenario.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nonetheless, as an electronic engineer normally gets graduated with a solid background also in those disciplines that stand at higher level with respect to the world of physical boards (i.e. system identification, control theory, signal processing ...), he can apply his knowledge and develop it further (perhaps with a master and/or PhD) to problems and topics such as motor coordination, autonomous learning, grasping, vision processing, navigation, that all belong somehow to that third fuzzy area. In this zone of the &quot;mind&quot;, being able to code software is somehow mandatory, whereas for the &lt;strong&gt;bodyware&lt;/strong&gt; of the robot, you can focus just on the electronic design and neglect the firmware.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2015-02-10T17:45:39.920" LastActivityDate="2015-02-10T17:45:39.920" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6547" PostTypeId="2" ParentId="6544" CreationDate="2015-02-06T17:36:20.413" Score="1" Body="&lt;p&gt;Any stepper motor can be microstepped. If you microstep, you can theoretically go as crazy as you want, but as you increase the number of microsteps, although you increase your resolution, you decrease the accuracy of the step. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.linengineering.com/contents/stepmotors/pdf/Product_Guides/Lin_RG_StepMotorBasics.pdf&quot; rel=&quot;nofollow&quot;&gt;http://www.linengineering.com/contents/stepmotors/pdf/Product_Guides/Lin_RG_StepMotorBasics.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.micromo.com/microstepping-myths-and-realities&quot; rel=&quot;nofollow&quot;&gt;http://www.micromo.com/microstepping-myths-and-realities&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In regards to the original question, the smallest angle you can rotate is 8.57 degrees with a 14 pole 12 stator configuration. You can find a detailed explanation of this system here: &lt;a href=&quot;http://www.aerodesign.de/peter/2001/LRK350/index_eng.html&quot; rel=&quot;nofollow&quot;&gt;http://www.aerodesign.de/peter/2001/LRK350/index_eng.html&lt;/a&gt; by clicking on the link for &quot;Why does the Torquemax rotate so slowly and so forcefully&quot; and scrolling down.&lt;/p&gt;&#xA;" OwnerUserId="1960" LastEditorUserId="1960" LastEditDate="2015-02-06T19:28:22.517" LastActivityDate="2015-02-06T19:28:22.517" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="6548" PostTypeId="2" ParentId="6532" CreationDate="2015-02-06T23:04:14.323" Score="0" Body="&lt;p&gt;That is a broad question, more philosophical than anything useful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is the same as asking what does it take to make a fish dinner?  A fisherman will reply bait and a pole.  The chef will talk about iron skillets and seasonings. Someone eating the fish wants a knife and fork with white wine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My goal in life at the moment is to drive hobby robotics to the point there is NO electrical engineer required, because you just buy off the shelf parts. Whether or not I achieve that remains to be seen, but I can happily say I see more and more of it every day.  Will it carry through to big business?  When was the last time you saw a custom computer being used? Yeah, a few still exist, but it certainly is not the norm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That being said, my opinion (not fact) is that robotics is more about implementing software, using readily available already designed and available components.  Designing hardware for specialized applications and new products is also a part of SOME robotics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you desire to work with electronics, and avoid programming why would you want to limit yourself to robotics in a learning context? In any case, you can always seek a job with a robotics company, just like a machinist or even a chemist might; I have never heard a machinist say &quot;I only want to learn robot machining.&quot; Sounds silly doesn't it?&lt;/p&gt;&#xA;" OwnerUserId="274" LastEditorUserId="274" LastEditDate="2015-02-06T23:11:13.353" LastActivityDate="2015-02-06T23:11:13.353" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6550" PostTypeId="2" ParentId="6516" CreationDate="2015-02-07T01:25:31.723" Score="1" Body="&lt;p&gt;The current required to open the device is greater than the current required to keep the device from closing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A motor is a piece of wire conducting commutated DC. While it is stalled, it is just DC. &#xA;A reduction gear can increase the torque applied (further reducing the force and current required to open and hold open) without interfering with the automatic close function, because a standard DC motor should provide little, or no, &quot;Detent Torque&quot; like a stepper.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Try this:&lt;br&gt;&#xA;-Calculate Iholding using Ohm's law to limit the power dissipated by the stalled motor.&lt;br&gt;&#xA;-I(&quot;RMS&quot;)lifting will be less since the DC is being commutated.&lt;br&gt;&#xA;-The power limit is arbitrary; the wires will un-solder at &gt;300F.&lt;br&gt;&#xA;-The power limit should allow the motor enough current to open the device.&lt;br&gt;&#xA;-If it doesn't, add a reduction gear.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An example using a &lt;a href=&quot;https://www.sparkfun.com/products/11696&quot; rel=&quot;nofollow&quot;&gt;motor's&lt;/a&gt; &lt;a href=&quot;http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Robotics/M260.pdf&quot; rel=&quot;nofollow&quot;&gt;datasheet&lt;/a&gt;:&lt;br&gt;&#xA;1.0V &amp;lt; Vin &amp;lt; 3.0V (This motor can supposedly tolerate 12V, no problem)&lt;br&gt;&#xA;&quot;locked-rotor current&quot; = stall current&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Working backwards with V = 3.0V and I = 0.8A, using Ohm's law:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;E = I * R  &#xA;R = E / I  &#xA;R = 3.0V / 0.8A = approximately 3.75ohms&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;With Vin = 3.0V, using Ohm's law:  &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;E = I * R  &#xA;I = E / R  &#xA;I = 3.0V / 3.75ohm = 0.8A&#xA;P = I * E  &#xA;P = 0.8A * 3.0V = 2.4W&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Same motor with Vin = 1.0V, using Ohm's law: (it will turn slower)  &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;E = I * R  &#xA;I = E / R  &#xA;I = 1.0V / 3.75ohm = 0.26A&#xA;P = I * E  &#xA;P = 0.26A * 1.0V = 0.26W&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Same motor with Vin = 3.0V and 5ohm series resistor, using Ohm's law:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;E = I * R  &#xA;I = E / R  &#xA;I = 3.0V / (3.75ohm + 5ohm) = 0.34A&#xA;EdropAcrossR = 0.34A * 5ohm = 1.7V&#xA;EdropAcrossMotor = 0.34A * 3.75ohm = 1.28V  &amp;lt;= above no-load start voltage&#xA;P = I * E  &#xA;Pr = 0.34A * 1.7V = 0.58W  &#xA;Pmotor = 0.34A * 1.28V = 0.44W  &#xA;&#xA;Double-check:&#xA;Ptotal = 0.58W + 0.44W = 1.02W  &#xA;Ptotal = Itotal * Etotal  &#xA;Etotal = Ptotal / Itotal  &#xA;Etotal = 1.02W / 0.34A = 3.0V&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="9044" LastEditorUserId="9044" LastEditDate="2015-02-07T21:00:43.813" LastActivityDate="2015-02-07T21:00:43.813" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6551" PostTypeId="2" ParentId="4955" CreationDate="2015-02-07T02:50:37.507" Score="1" Body="&lt;p&gt;Of the choices you presented, PWM + BJT/FET is most efficient. An H-Bridge is a prime example of that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-BJT's dissipate heat in proportion to their &quot;on-ness&quot;&lt;br&gt;&#xA;-FET's dissipate heat based on their (very low) on-state resistance, plus a small loss during the actual switching.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By PWM'ing, you are approximating an analog voltage in proportion to the BJT/FET duty-cycle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In practice, you will want to employ (non-plastic) feedback. With feedback, all of your motors know when they have done what you told them, and will correct themselves without having to be told again. Current-sense resistors, PIDs, steppers, servos, encoders are a few examples you should explore. The simplest method would be to have the motor or assembly activate a switch when it has reached the intended limit of its' range.&lt;/p&gt;&#xA;" OwnerUserId="9044" LastActivityDate="2015-02-07T02:50:37.507" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6552" PostTypeId="2" ParentId="1324" CreationDate="2015-02-07T03:02:04.253" Score="1" Body="&lt;p&gt;I cannot comment yet; this is a supplement to ronalchn's answer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using an opto-isolator between the logic output and the motor control input 100% isolates the two circuits from each other and makes [multiply-]split-supplies trivial.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DGND &gt; Digital &gt; Opto &amp;lt; Analog &amp;lt; AGND&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Under extreme demands, a second opto could engage an entirely different set of batteries, charged to a higher voltage. You would want to be careful not to turn both on at the time time...&lt;/p&gt;&#xA;" OwnerUserId="9044" LastEditorUserId="9044" LastEditDate="2015-02-07T03:07:06.683" LastActivityDate="2015-02-07T03:07:06.683" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6553" PostTypeId="1" CreationDate="2015-02-07T07:04:26.937" Score="2" ViewCount="159" Body="&lt;p&gt;I know some languages like PHP, C/C++ and Java but I'm not expert in these languages. I want to create an Artificial Intelligent Robot that can do these Task;&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;able to communicate with Computer (USB, Bluetooth or other)&lt;/li&gt;&#xA;&lt;li&gt;able to perform some specific task&lt;/li&gt;&#xA;&lt;li&gt;present a  Visual interface (finding path, speed and others)&lt;/li&gt;&#xA;&lt;li&gt;Access its Micro Controller device and attached devices&lt;/li&gt;&#xA;&lt;li&gt;and so on..  (editor note: solve world hunger?) &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Can any one please suggest which programming language will be good for programing this type of robot. I have heard about C/C++ and Assembler and ROBOTC and LABVIEW but I am unable to decided which language to use for my project.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sorry for my bad English!&lt;/p&gt;&#xA;" OwnerUserId="9048" LastEditorUserId="9048" LastEditDate="2015-02-07T09:56:07.380" LastActivityDate="2015-02-11T15:35:16.390" Title="Create Artificial Integelent Robot Ability to communicate with Computer : Which language i should use" Tags="&lt;microcontroller&gt;&lt;artificial-intelligence&gt;&lt;robotc&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ClosedDate="2015-03-03T16:17:32.650" ContentLicense="CC BY-SA 3.0" />
  <row Id="6554" PostTypeId="2" ParentId="6553" CreationDate="2015-02-07T10:53:28.887" Score="0" Body="&lt;p&gt;This question is a little bit like &quot;I want to talk to people, which language should I learn?&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The answer is: Almost any. C, C++, Java, Python and many many more will all enable you to do the things you mentioned.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That being said, it depends on what are your more detailed requirements. Microcontrollers are often programmed in C, or assembly (and sometimes different languages). C++ offers high performance, but the development is a little bit more complex. Python is easy to learn and use, but programs written in it can be a little slow. Lisp is (or was?) sometimes used for AI ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are learning your first programming language, I would recommend Python, or getting an &lt;a href=&quot;https://en.wikipedia.org/wiki/Arduino&quot; rel=&quot;nofollow&quot;&gt;Arduino&lt;/a&gt; and using Processing. Good luck :-)&lt;/p&gt;&#xA;" OwnerUserId="482" LastActivityDate="2015-02-07T10:53:28.887" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6555" PostTypeId="2" ParentId="6553" CreationDate="2015-02-07T20:55:05.283" Score="0" Body="&lt;p&gt;Depends a lot on the task, your robot should perform. Communication via USB or Bluetooth works equally well in all languages. Moreover, I doubt you'll need Assembler for your task. My general advice would be to use Python if your robot platform supports that or, for computation heavy tasks, C/C++. By the way, I think those languages are also most widespread in the robotics industry.&lt;/p&gt;&#xA;" OwnerUserId="1054" LastActivityDate="2015-02-07T20:55:05.283" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6558" PostTypeId="2" ParentId="6536" CreationDate="2015-02-08T18:02:12.350" Score="0" Body="&lt;p&gt;In the automotive field water pumps for cooling the combustion engine have been mechanically driven by a belt linked to the engine. The same should be true for hydraulic pumps. Now there is a trend to use brushless DC motors (BLDC, also called electronically commutated) because their speed can be chosen independent of the combustion engine's speed. They also consume much less power. I would consider looking into BLDCs as motors, if they fit the hydraulic power required for your application, i.e. motor electric power = hydraulic power. I would pick a slightly bigger motor, with maybe 1.2 times the hydraulic power. Also, dependent on the hydraulic actuator you want to drive, make sure the motor torque at rated speed matches what is required by the actuator. &lt;/p&gt;&#xA;" OwnerUserId="9052" LastActivityDate="2015-02-08T18:02:12.350" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6560" PostTypeId="1" CreationDate="2015-02-08T23:46:58.663" Score="1" ViewCount="453" Body="&lt;p&gt;I'm trying to understand how an electronic musical instrument (called an e-chanter) works (imagine a recorder or other wind instrument, but with the holes replaced with metal contacts, and the sound played electronically, so no air is needed).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically, there are several metal contacts, as shown in this link: &lt;a href=&quot;http://www.echanter.com/home/howto-build#TOC-WIRES-SCREW-SENSORS&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.echanter.com/home/howto-build#TOC-WIRES-SCREW-SENSORS&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They each appear to be wired only directly to one pin of the arduino:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/OemtM.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OemtM.png&quot; alt=&quot;E-chanter circuit diagram&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't figure out for the life of me how this works.  Can anyone explain it, are the fingers being used as some kind of ground or what on earth is going on.  I have a physics background so can understand some technical info, but just can't fathom how on earth this magic works.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you very much&lt;/p&gt;&#xA;" OwnerUserId="9054" LastEditorUserId="15160" LastEditDate="2019-01-14T01:02:08.037" LastActivityDate="2019-01-14T01:02:08.037" Title="Don't understand how sensor works, metal wired directly to I/O pin of arduino" Tags="&lt;arduino&gt;&lt;sensors&gt;" AnswerCount="4" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6562" PostTypeId="2" ParentId="4409" CreationDate="2015-02-09T10:47:25.033" Score="1" Body="&lt;p&gt;Cannot comment yet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would add a gyro and use a complementary or Kalman filter. Accelerometers are &lt;strong&gt;right, on average&lt;/strong&gt;, but &lt;em&gt;wrong, right now&lt;/em&gt;. Gyros are &lt;strong&gt;right, right now&lt;/strong&gt;, but are &lt;em&gt;wrong, on average&lt;/em&gt;. The filter weights the two inputs based on how wrong they are and outputs a value somewhere between &lt;strong&gt;right&lt;/strong&gt; and &lt;strong&gt;right now&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/mI8h7.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="9044" LastEditorUserId="9044" LastEditDate="2015-02-09T11:43:50.327" LastActivityDate="2015-02-09T11:43:50.327" CommentCount="11" ContentLicense="CC BY-SA 3.0" />
  <row Id="6563" PostTypeId="2" ParentId="6560" CreationDate="2015-02-09T11:43:45.707" Score="0" Body="&lt;p&gt;The DIY article is not written very well. It seems the author is using &quot;screw sensors&quot;, which I can only imagine is a DIY type of mechanical-switch-type sensor, where the screws complete the circuit to the Digital IO (DIO) pins.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think it would be something like:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;0V or 3.3/5V ------&gt; switch (sensor) ------&gt; Arduino Pin&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Usually an open switch in this configuration would produce a floating input to the arduino, however many (if not all) Arduinos have an inbuilt pull-up resistor to the DIO pins. Taking advantage of this it is simple to differentiate between the default pull-up (HIGH) state and a ground (LOW) state using only the ground signal being toggled by a switch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I looked in the arduino source and it confirms that there are multiple switch-type sensors and a single analog pressure sensor.&lt;/p&gt;&#xA;" OwnerUserId="8859" LastActivityDate="2015-02-09T11:43:45.707" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6564" PostTypeId="1" CreationDate="2015-02-09T12:15:02.377" Score="0" ViewCount="406" Body="&lt;p&gt;I am trying to derive the analytical Jacobian for a system that is essentially the equations of motion of a body (6 degrees of freedom) with gyro and accelerometer measurements.&#xA;This is part of an Extended Kalman Filter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The system state is given by:&#xA;$&#xA;\mathbf{x} = \left(&#xA;\begin{array}{c}&#xA;\mathbf{q}\\&#xA;\mathbf{b_\omega}\\&#xA;\mathbf{v}\\&#xA;\mathbf{b_a}\\&#xA;\mathbf{p}\\&#xA;\end{array}&#xA;\right)&#xA;$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $q$ is the quaternion orientation of the body expressed in the global frame, $b_\omega$ and $b_a$ are the biases in the gyro and accelerometer respectively (expressed in the body frame) and $v$ and $p$ are the velocity and position of the body expressed in the global frame. All vectors are [3x1] except $q$ which is [4x1] in $[w,x,y,z]^\top$ format, and $R$ (below) which is [3x3].&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The equations of motion $\frac{dx}{dt}=\dot{x}$ (t is time) are:&#xA;$$&#xA;\dot{\mathbf{q}} = \frac{1}{2}\mathbf{q} \otimes &#xA;\left(&#xA;\begin{array}{c}&#xA;0\\&#xA;\hat{\omega}\\&#xA;\end{array}&#xA;\right) \\&#xA;\dot{\mathbf{b_\omega}} = 0 \\&#xA;\dot{\mathbf{v}} = R^\top (\hat{\mathbf{a}} + [\hat{\mathbf{\omega}}\times]R \mathbf{v})+ g \\&#xA;\dot{\mathbf{b_a}} = 0 \\&#xA;\dot{\mathbf{p}} = \mathbf{v}&#xA;$$&#xA;Second-order terms are ignored. $\hat{a} = a - b_a$ and $\hat{\omega} = \omega - b_\omega$ are the corrected accelerometer and gyro biases ($a$ and $\omega$ are known) and are expressed in the body frame. $R$ is the rotation matrix (DCM) formed from $q$ and $g$ is the gravity vector $[0,0,9.81]^\top$. These equations have been validated against an aerospace engineering software library.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need the jacobian $F = \frac{d\dot{x}}{dx}$ but I cannot find this jacobian in any texts (I do find the error-state jacobian eg &lt;a href=&quot;http://www-users.cs.umn.edu/~stergios/papers/IROS07-IMUCam.pdf&quot; rel=&quot;nofollow&quot;&gt;this paper&lt;/a&gt;).&#xA;I am struggling with doing this myself because I don't know how to handle the quaternion norm constraints. I also am concerned about the validity of a solution given through numerical differentiation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help or explanation would be greatly appreciated. This is going towards an open-source robot localisation project.&lt;/p&gt;&#xA;" OwnerUserId="8859" LastActivityDate="2015-02-09T12:15:02.377" Title="Jacobian Matrix of 6DOF Body (with IMU)" Tags="&lt;control&gt;&lt;kalman-filter&gt;&lt;jacobian&gt;" AnswerCount="0" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6565" PostTypeId="1" CreationDate="2015-02-09T13:20:22.610" Score="1" ViewCount="160" Body="&lt;p&gt;I am a complete newbie and recently joined a robot team at my school in order to gain some experience. I have been assigned a task of driving a servo using a Pololu Mini Maestro USB Servo Controller. I am using the BeagleBone Black (BBB) with the Python adafruit library. How do I make the BBB communicate with the Servo Controller? If you guys could point me in the right direction, I'd really appreciate that. Right now, I don't even know where to start. Not sure if it matters, but this is the servo I am using: &lt;a href=&quot;https://www.pololu.com/product/1053&quot; rel=&quot;nofollow&quot;&gt;https://www.pololu.com/product/1053&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9057" LastActivityDate="2017-04-06T19:39:00.660" Title="Communicating between a BeagleBone Black and a servo controller" Tags="&lt;motor&gt;&lt;microcontroller&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6566" PostTypeId="1" AcceptedAnswerId="6574" CreationDate="2015-02-09T13:56:32.053" Score="3" ViewCount="516" Body="&lt;p&gt;In my project, I've successfully analyzed the arena and have detected the obstacles using an overhead webcam. I also have computed the shortest path. The path data is transmitted to the robot via Zigbee, based on which it moves to its destination.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is: My robot is not taking accurate turns which would cause error in the rest of path it follows.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could anyone please suggest any methods/techniques for feedback from the robot so as the path is corrected and the robot follows the original path computed without any deviation? (Basically a tracking mechanism to avoid deviation from the original computed path)&lt;/p&gt;&#xA;" OwnerUserId="9059" LastActivityDate="2015-02-14T19:01:32.623" Title="Robot Navigation Feedback using Image Processing" Tags="&lt;computer-vision&gt;&lt;navigation&gt;&lt;motion-planning&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6570" PostTypeId="1" CreationDate="2015-02-10T06:24:10.520" Score="1" ViewCount="497" Body="&lt;p&gt;Bosch, FreeScale, InvenSense, ST and maybe others are releasing 9-dof AHRS platforms containing their own fusion software and outputting &lt;strong&gt;filtered/sane/fused&lt;/strong&gt; data (attitude as quaternion and linear acceleration).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to use these for the quality of their respective company fusion algorithm. And would like to merge GNSS position and velocity data to it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have found multiple examples of heavy (&gt; 20) states Kalman filters merging &lt;strong&gt;raw&lt;/strong&gt; 9-dof IMU data and GNSS position/velocity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I have a hard time finding a &lt;strong&gt;computationally lighter&lt;/strong&gt; version of GPS+AHRS fusion as these new 9-dof AHRS already fuse IMU raw data themselves and this process should'nt be done twice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would you maybe have pointers on the algorithm(s) or type of filter to use ? Thank you.&lt;/p&gt;&#xA;" OwnerUserId="9068" LastEditorUserId="9068" LastEditDate="2015-02-10T06:29:46.463" LastActivityDate="2015-12-04T21:36:47.697" Title="Fusion of GNSS position data and prefused 9-dof AHRS data" Tags="&lt;quadcopter&gt;&lt;kalman-filter&gt;&lt;imu&gt;&lt;gps&gt;&lt;sensor-fusion&gt;" AnswerCount="0" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6571" PostTypeId="1" CreationDate="2015-02-10T07:14:11.070" Score="0" ViewCount="790" Body="&lt;p&gt;Currently I am building a robots with 2 incremental encoders with a optical mice sensor. The reason to install a optical mice sensor is to provide better feedback when slippage happen on the encoders.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wonder if I could apply a kalman filter to get a better distance feedback with these 2 kinds of sensors? Especially when the control input is unknown?(For example I push the car with my hand, but not applying a voltage to the motors)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have read some examples to use kalman filter (gyro+accel / encoder+gps), either one of the variable used is in absolute measurement, while in my case, two feedbacks are dead-reckoning. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help is appreciated =] !!!!!&lt;/p&gt;&#xA;" OwnerUserId="9069" LastActivityDate="2015-02-10T16:58:58.973" Title="Kalman Filter with incremental encoder + optical mice" Tags="&lt;kalman-filter&gt;&lt;quadrature-encoder&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6573" PostTypeId="2" ParentId="6571" CreationDate="2015-02-10T16:58:58.973" Score="1" Body="&lt;p&gt;Using a Kalman filter will definitely work to estimate velocity. However you will not be able to estimate position with accuracy. This is because the position is unobservable with just encoders and an optical flow sensor. You will still be able to estimate position but the uncertainty will be unbounded.&lt;/p&gt;&#xA;" OwnerUserId="8842" LastActivityDate="2015-02-10T16:58:58.973" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6574" PostTypeId="2" ParentId="6566" CreationDate="2015-02-10T17:07:45.440" Score="2" Body="&lt;p&gt;You should feedback on position and heading using the information from the webcam overhead. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you have an list of cells that make up the path that you would like to travel in the order that you would like them visited. Give each cell a property 'traveled' with an initial value of false. Give the robot some slow constant speed with a desired heading that points it to the next untraveled cell. Once the robot gets withing some distance of the cell, mark the cell as traveled and move on to the next one. As long as the robot is moving slow enough compared to the rate you are sending commands, this should get you through the maze.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Good luck!&lt;/p&gt;&#xA;" OwnerUserId="8842" LastEditorUserId="8842" LastEditDate="2015-02-14T19:01:32.623" LastActivityDate="2015-02-14T19:01:32.623" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6575" PostTypeId="1" CreationDate="2015-02-11T01:51:31.283" Score="1" ViewCount="49" Body="&lt;p&gt;Good day!  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am helping my little ones 6 and 7 to develop a robot that can pick up and stack cubes three high as well as gather blocks.  They came up with the design that enables them to pick up three cubes at a time when lined up and then pull up the claw, turn, drive to another cube, place the cubes on the stand still cube and release.&lt;br&gt;&#xA;   Well they got the claw made with two rods connected to gears to motor and the rods reinforced, then they made insect like legs 3 - pairs of two on the rods, with gripper feet pads on the ends of the legs. All of this works as it opens and closes! The problem is that when they try to close the claw on the cubes and pick up all three cubes, the first - closest to motor feet have a nice tight grip, the second - middle feet - have a lighter grip and just barely can lift the block, and third - farthest from motor doesn't even have a grip on the blocks.&lt;br&gt;&#xA;   I think it's because the second and third set of feet are farther from the motor. But how can they evenly disperse the tension load so the claw can pick up all three blocks?&#xA;I tried putting elastics on the feet for better grip and unless we put ten on each foot for the third set and maybe five on the second set it wont work.  Even though it's a quick fix I would like to help them figure it out the proper way of spreading the load so to speak.  We also tried putting a small band on the third set of legs.  The robot could still open and close and that worked for the third set but not the second.  We tried putting a band on the second and third but the legs wouldn't open anymore.  I could use a lighter band but is there another way? We only have one little motor to run it so we can't give all the leg sets it's own motor and even if we did there would be weight issues.&lt;br&gt;&#xA;  THank you in advance!&lt;/p&gt;&#xA;" OwnerUserId="9072" LastEditorUserId="110" LastEditDate="2015-02-17T00:50:28.423" LastActivityDate="2015-04-22T16:03:15.683" Title="How to distribute tension load on a three footed claw?" Tags="&lt;design&gt;&lt;mechanism&gt;&lt;vex&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6576" PostTypeId="1" AcceptedAnswerId="6579" CreationDate="2015-02-11T13:41:23.267" Score="1" ViewCount="104" Body="&lt;p&gt;As a non-native speaker I have a (maybe trivial, but to me not clear) question concerning the verb 'to teach'. Of course, from school (and online dictionaries) I know the past tense of 'teach' is 'taught' not 'teached'. But in robotics 'to teach' has a special meaning (like: 'to make special ponts/orientations known to the (arm-)robot', e.g. by guiding the robot to those points/orientations.) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does it make sense to have a different past tense for 'teach' (i.e. 'teached') in this case ? Maybe a reference were it is used/explained ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(I would say 'No. The past of teach is taught, and that's it.', but some of my colleagues - also not native speakers - have a different opinion.)&lt;/p&gt;&#xA;" OwnerUserId="5638" LastEditorUserId="5638" LastEditDate="2015-02-11T14:42:11.323" LastActivityDate="2015-02-11T17:17:23.067" Title="Robotics jargon question: How to conjugate 'teach'?" Tags="&lt;reference-request&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6579" PostTypeId="2" ParentId="6576" CreationDate="2015-02-11T17:17:23.067" Score="3" Body="&lt;p&gt;If you have paid online or DVD access to Oxford English Dictionary, you can look up the entry for &lt;em&gt;teached&lt;/em&gt;.  Here is its entry from OED1 (1919 vintage, available free online):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Teached ... &lt;em&gt;Obs.&lt;/em&gt; or &lt;em&gt;dial.&lt;/em&gt; = TAUGHT.&#xA;  1639 LO. DIGAY, etc. &lt;em&gt;Lett. conc. Relig.&lt;/em&gt; (1651) 96 By the&#xA;  frequent misapprehension of the teached,..either let slip or supplanted. 1644 G. PLATTES in Hartlib's Legacy (1655)&#xA;  176 The Teachers and the Teached were nothing else but&#xA;  the blind leading of the blind.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That is, OED (which typically is regarded as a definitive reference) in its first release referred to &lt;em&gt;teached&lt;/em&gt; as obsolete or dialectic, and labels it as meaning &lt;em&gt;taught&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;&lt;a href=&quot;https://books.google.com/books?id=mVcJqKs1isUC&amp;amp;pg=PA798&amp;amp;lpg=PA798&amp;amp;dq=teached+or+taught&amp;amp;source=bl&amp;amp;ots=zuw_rJNhvz&amp;amp;sig=T1nJwq74BT9upWTw9JMDTs7yv6A&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=UoTbVJijEoG1ogTajoCQCQ&amp;amp;ved=0CEMQ6AEwBTgK#v=onepage&amp;amp;q=teached%20or%20taught&amp;amp;f=false&quot; rel=&quot;nofollow&quot;&gt;Garner's Modern American Usage&lt;/a&gt;&lt;/em&gt; (2009, Oxford University Press) by Bryan Garner in its &lt;strong&gt;&lt;em&gt;Teach&lt;/strong&gt; &gt; taught &gt; taught&lt;/em&gt; entry states&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;code&gt;*&lt;/code&gt;&lt;em&gt;Teached&lt;/em&gt; is a form that isn't taught anywhere and is no part of STANDARD ENGLISH. But it sometimes appears –&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;and offers some examples of it appearing by mistake in American newspaper articles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://en.wiktionary.org/wiki/teached&quot; rel=&quot;nofollow&quot;&gt;en.wiktionary&lt;/a&gt; entry for &lt;em&gt;teached&lt;/em&gt; labels it as “nonstandard, colloquial, dialectal” and offers some dialectal examples.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In short, use &lt;em&gt;taught&lt;/em&gt;, not &lt;em&gt;teached&lt;/em&gt;.  But note that rather than referring to a robot “replaying a collection of &lt;em&gt;taught&lt;/em&gt; poses”, more often one refers to it “replaying a collection of &lt;em&gt;learned&lt;/em&gt; poses”, making the viewpoint that of the taught instead of of the teacher.&lt;/p&gt;&#xA;" OwnerUserId="478" LastActivityDate="2015-02-11T17:17:23.067" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6581" PostTypeId="1" AcceptedAnswerId="7597" CreationDate="2015-02-12T08:18:32.867" Score="6" ViewCount="12407" Body="&lt;p&gt;Any one can advice me on the ideal perception sensors for pick and place application using a robotic manipulator with ROS support. I have generally looked at things like Kinect and stereo cameras (Bumblebee2) which provide depth that can be used with PCL for object recognition and gripper positioning. Are there any other sensors would be preferred for such application and if not what are the drawbacks of stereo cameras in comparison to Kinect or other sensing capability. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alan&lt;/p&gt;&#xA;" OwnerUserId="9081" LastActivityDate="2017-03-17T18:25:47.193" Title="Stereo camera Vs Kinect" Tags="&lt;sensors&gt;&lt;robotic-arm&gt;&lt;kinect&gt;&lt;stereo-vision&gt;" AnswerCount="3" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6583" PostTypeId="1" AcceptedAnswerId="6584" CreationDate="2015-02-12T15:44:09.123" Score="0" ViewCount="282" Body="&lt;p&gt;We are building a hobby drone(Quad-coptor) with a camera for footage. So to control the quad, i have been suggested(&lt;a href=&quot;http://www.rchelicopterfun.com/helicopter-radios.html&quot; rel=&quot;nofollow&quot;&gt;Web&lt;/a&gt;,&lt;a href=&quot;http://blog.oscarliang.net/choose-rc-transmitter-quadcopter/&quot; rel=&quot;nofollow&quot;&gt;Here&lt;/a&gt;) to use minimum of four channels.For power and for turning etc., So which means i need one channel for every separate task to be done. For eg., if i want to rotate the camera, then i suppose i need the 5th channel and so on..&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now my question would be - i have seen a lot of drones(ardrone, walkera) which are controlled by an Android or an iPhone app. So the wifi used to connect the drones is, single channel or multi-channel? If single channel then how can i control different tasks like to control turning of the quad or camera in different axis?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also if i want the GPS location from the quad, do i require to have another transmitter?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am using(Planned to) a Raspberry Pi 2, OpenPilot-CC3D for flight control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S this is my first drone, Kindly show some mercy if i ask/don't understand your comments.&lt;/p&gt;&#xA;" OwnerUserId="9085" LastActivityDate="2017-07-10T06:20:37.293" Title="Is our laptop wifi single channel or multiple channel? This is for controlling a bot" Tags="&lt;quadcopter&gt;&lt;navigation&gt;&lt;radio-control&gt;&lt;wifi&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6584" PostTypeId="2" ParentId="6583" CreationDate="2015-02-12T16:38:51.700" Score="2" Body="&lt;p&gt;You are confused by the &quot;channels&quot; term here. The resource you are linking to is talking about &quot;conventional&quot; remote control, using it's own frequency and it's own protocol, not compatible with WiFi in any way. In this case the term &quot;channel&quot; means just a specific radio frequency the control is operating. When talking about WiFi, the channels are frequencies as well, and their number is varying based on country regulations. But in this case, the channel is MOSTLY selected automatically by the wifi adapter, or manually based on how badly the channels are cluttered by surrounding communications. So in general, if using wifi you do not have to worry about number of channels available, because at any point of time you are using just one. &lt;br&gt;&#xA; As for GPS - the location is read into your hardware, and depending on what do you intend to use it for, can be processed on the robot itself or sent via your selected communication method.&lt;/p&gt;&#xA;" OwnerUserId="7493" LastActivityDate="2015-02-12T16:38:51.700" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6586" PostTypeId="1" CreationDate="2015-02-12T18:02:19.080" Score="2" ViewCount="901" Body="&lt;p&gt;Though, Denavit-Hartenberg notation is commonly used to describe the kinematics of robot manipulator, some researcher prefer the product of exponential instead; and even the claim that it's better.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which one should I use, and which one is generally better; is final solution same for both kinematics and dynamics?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any suggestions?&#xA;&lt;a href=&quot;https://www.researchgate.net/go.Deref.html?url=http%3A%2F%2Fwww.cds.caltech.edu%2F%7Emurray%2Fbooks%2FMLS%2Fpdf%2Fmls94-complete.pdf&quot; rel=&quot;nofollow&quot;&gt;A mathematical introduction to robotic manipulation&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9087" LastEditorUserId="110" LastEditDate="2015-02-15T18:06:37.490" LastActivityDate="2015-04-17T06:10:48.800" Title="Denavit-Hartenberg convention or the product of exponentials formulation, when dealing with the manipulator kinematics?" Tags="&lt;robotic-arm&gt;&lt;industrial-robot&gt;&lt;dh-parameters&gt;&lt;product-of-exponentials&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6587" PostTypeId="1" CreationDate="2015-02-12T20:48:41.283" Score="0" ViewCount="1316" Body="&lt;p&gt;The first time after importing a project into the Eclipse workspace we find that eclipse cannot find the WPILIBj.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On any import line:&lt;code&gt;import edu.wpi.first.wpilibj.*&lt;/code&gt; Eclipse says &quot;unresolved import edu.&lt;/p&gt;&#xA;" OwnerUserId="9088" LastActivityDate="2015-02-22T21:27:46.537" Title="FRC RoboRio Eclipse can't find edu.wpi.first.wpilibj" Tags="&lt;microcontroller&gt;&lt;wheeled-robot&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6589" PostTypeId="2" ParentId="6581" CreationDate="2015-02-13T00:01:20.203" Score="2" Body="&lt;p&gt;The &lt;a href=&quot;http://structure.io/developers&quot; rel=&quot;nofollow&quot;&gt;Structure sensor&lt;/a&gt; is a &quot;3D sensor for mobile devices&quot;. Reading over the details it sounds like a smaller version of Kinect. It has open source drivers, openNI support etc. It's been on my to buy list for awhile but I don't have an immediate application just yet. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the site,&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The magic of 3D depth sensing begins with the ability to capture fast, accurate, dimensions of objects and environments.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I'm am in no way associated with the company that sells the sensor.&lt;/p&gt;&#xA;" OwnerUserId="4169" LastActivityDate="2015-02-13T00:01:20.203" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6590" PostTypeId="1" AcceptedAnswerId="6591" CreationDate="2015-02-13T03:28:43.043" Score="3" ViewCount="3083" Body="&lt;p&gt;In this picture, a sketch of a quadcopter is displayed with rotor's direction of motion.  The magnitude of the rotational velocity is depicted by the thickness of the lines (thicker lines are higher velocity, thinner lines are lower velocity).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/WomRo.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm told this is the correct way to produce turning motion, but my intuition (which is usually wrong) tells me that the two pictures should be reversed.  My argument is  as follows:  For the picture on the left, the two rotors of higher velocity are spinning clockwise.  If the motion of the rotors of greater velocity are clockwise, shouldn't the quadcopter also rotate clockwise?  What am I missing here?&lt;/p&gt;&#xA;" OwnerUserId="2295" LastActivityDate="2020-05-29T20:20:43.920" Title="How do quadcopters turn left and right?" Tags="&lt;quadcopter&gt;&lt;dynamics&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6591" PostTypeId="2" ParentId="6590" CreationDate="2015-02-13T04:06:46.340" Score="8" Body="&lt;p&gt;&lt;a href=&quot;http://youtu.be/-UbKb5Q_qIM?list=PLTBdjV_4f-EKBCUs1HmMtsnXv4JUoFrzg&quot;&gt;This is video&lt;/a&gt; is from an Edx course on Autonomous Quadcopters...It is 10 minutes and goes over the &quot;Flying Principle&quot; of quadrotors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But basically what you are missing is the reactions. The famous Newtown's third law says (paraphrasing) &quot;for every action there is an equal and opposite reaction&quot;. So by spinning the clockwise blades faster, a counter-clockwise reaction is what causes the quadcopter to rotate to the left, and vice versa. This is also why &lt;a href=&quot;http://science.howstuffworks.com/transport/flight/modern/helicopter4.htm&quot;&gt;helicopters have a rear rotor&lt;/a&gt;, it counters the reaction torque of the main rotor. &lt;/p&gt;&#xA;" OwnerUserId="4169" LastActivityDate="2015-02-13T04:06:46.340" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6592" PostTypeId="1" CreationDate="2015-02-13T07:57:49.133" Score="0" ViewCount="1931" Body="&lt;p&gt;I'm an electronics newbie.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The part I'm talking about is &lt;a href=&quot;http://www.ebay.in/itm/221636836855?ssPageName=STRK:MEWNX:IT&amp;amp;_trksid=p3984.m1439.l2649&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;DC 10-50v 12V 24V 48V 3000W 60A amps DC Motor Speed Control PWM HHO Controller&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;My question is, can this type of part be used to control brushless DC motors?&lt;/p&gt;&#xA;" OwnerUserId="9089" LastEditorUserId="158" LastEditDate="2015-02-20T15:50:56.540" LastActivityDate="2015-02-20T15:50:56.540" Title="Can I use a PWM HHO Controller to control a brushless DC motor?" Tags="&lt;arduino&gt;&lt;brushless-motor&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6593" PostTypeId="1" CreationDate="2015-02-13T17:25:16.573" Score="1" ViewCount="135" Body="&lt;p&gt;I'm new in forum and since I made some research the past days I'd like to get some guidance about constructing &amp;amp; programming a Quadcopter from scratch since I'm completely new on a project like that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Quadcopter Frame: Thinking about to construct an aluminum 70cm diameter frame which will weight around 500g. What kind of motors should I get in order the frame with the board,motors etc. will be able to lift?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Board: I'm thinking to use Arduino Uno or Raspberry Pi 2.0 ( With a little bit of research I made I conclude that Raspberry could make my life a little bit easier since you can add wifi on it. The quadcopter will be controlled via a pc/laptop through wifi). What can you suggest and why?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ESC: As far as I've seen in most of similar projects people using ESCs in order to control the motors throttle. Can you avoid that, with programming PIDs that make the same job in order not to use more hardware?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;About PIDs and Code in General: Thinking about to simulate the whole project in Simulik, Matlab and somehow (if it's possible) to convert the Matlab Code into C++ and download it on the chip. What do you think about that?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;About the whole project: I'm trying to minmize the hardware as much as it's possible (use only 4x motors, the board with the chip on it, cables and probably some sensors) in order to minimize the total weight of construction and ofc the price.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's all for a start. I'm gladly waiting for your answers and ideas.&lt;/p&gt;&#xA;" OwnerUserId="9090" LastActivityDate="2015-02-13T18:40:28.210" Title="Guidance &amp; Info about Quadcopter Project" Tags="&lt;quadcopter&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6594" PostTypeId="2" ParentId="6586" CreationDate="2015-02-13T18:08:50.170" Score="3" Body="&lt;p&gt;They are two different ways of getting the same thing. Correctly set D-H parameters will give the exact same kinematics and dynamics as correctly set POE parameters. There are well-defined (although tedious) ways to convert between the two.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So &quot;better&quot; or not purely  is up to user preference. Some people prefer D-H because for many setups they give a unique set of parameters to describe the system. There are some configurations, though, for which D-H parameters are not unique.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The big advantage of POE is you just define the 6-DOF relationship between two joints. Often this ends up being more intuitive than using D-H parameters. The downside is two different people might define that differently. The resulting dynamics are exactly the same, though.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2015-02-13T18:08:50.170" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6595" PostTypeId="2" ParentId="6593" CreationDate="2015-02-13T18:31:12.573" Score="2" Body="&lt;p&gt;I would suggest you to check this post by oscar on &lt;a href=&quot;http://blog.oscarliang.net/build-a-quadcopter-beginners-tutorial-1/&quot; rel=&quot;nofollow&quot;&gt;Building a Quadcopter from scratch&lt;/a&gt;, this mentions all the hardware parts you need to choose while you build a quadcopter. I have personally done a project on Quadcopter using Beaglebone black as a flight controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Quadcopter Frame: 70 cm would be fine for your case. You can use 980kVA motors with a high thrust 12&quot; propellers or a 2200KVA motors with 8&quot; propellers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Board: As per my research I would recommend you to use BeagleBone Black as a board instead of raspberry pi. The problem with running a raspberry Pi for quadcopter is that raspbian is not a real-time OS and there is no inbuilt microcontroller to run realtime application, so you will need an aditional real-time hardware such as a microcontroller connected in serial to give the PWM signal to motor and reading PPM signal from RC receiver. For quadcopters real time operation is very crucial, thats why I would suggest you to use Beaglebone black since it contains SoC 2 Programmable Real Time units (PRU or Microcontroller) you can avoid extra microcontroller hardware . &lt;/p&gt;&#xA;&#xA;&lt;p&gt;ESC : you can use a 30A ESC from hobbyking. Or there are &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__36674__q_brain_4_x_20a_brushless_quadcopter_esc_2_4s_3a_sbec.html&quot; rel=&quot;nofollow&quot;&gt;4 in 1 SBEC from Q-brain&lt;/a&gt;, here instead of buying 4 ESC for 4 motor you just have to buy 1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PID : In the case of PID there are lots of different codes available online. You can even check my code in &lt;a href=&quot;https://github.com/antodoms/beagle-copter&quot; rel=&quot;nofollow&quot;&gt;github&lt;/a&gt; to know how I did it. I have explained some theories about PID in the &lt;a href=&quot;http://antodominic.com/beagle-copter/&quot; rel=&quot;nofollow&quot;&gt;Beagle-copter project Presentation&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="8995" LastEditorUserId="8995" LastEditDate="2015-02-13T18:40:28.210" LastActivityDate="2015-02-13T18:40:28.210" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6596" PostTypeId="1" CreationDate="2015-02-14T03:25:59.310" Score="0" ViewCount="213" Body="&lt;p&gt;I am beginner in Robotics.I want to make serious start from scratch with interest but confused from where to start.So can anyone give some suggestions for 1.As a beginner in robotics ,&lt;strong&gt;are there some simple and basic robots or circuit&#xA;designs which I can make by myself in the home&lt;/strong&gt;(so that I can gain practical knowledge of robots)? 2.or should I first read books (can anyone suggest some good reference  &lt;strong&gt;book names,articles ,links,free on-line  video lecture series&lt;/strong&gt;)?&lt;/p&gt;&#xA;" OwnerUserId="9094" LastEditorUserId="9094" LastEditDate="2015-02-19T14:53:24.147" LastActivityDate="2015-02-19T14:53:24.147" Title="Suggestions for beginer in Robotics" Tags="&lt;beginner&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="4" ClosedDate="2015-03-03T16:16:33.827" ContentLicense="CC BY-SA 3.0" />
  <row Id="6597" PostTypeId="1" AcceptedAnswerId="6605" CreationDate="2015-02-14T07:41:32.773" Score="1" ViewCount="147" Body="&lt;p&gt;I have recently been studying Kalman filters. I was wondering that if sensor model of a robot gives a &lt;strong&gt;unimodal Gaussian&lt;/strong&gt; ( as is assumed for LKF) and the environment is pre-mapped, then the sensor reading can be completely trusted( ie. max value of Kalman gain), removing the need for odometry for localization or target tracking purposes and hence the need for the Kalman filter. Please Clarify.&lt;/p&gt;&#xA;" OwnerUserId="9096" LastActivityDate="2015-02-16T13:35:51.183" Title="Need of Kalman filters in unimodal measurement model" Tags="&lt;kalman-filter&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6598" PostTypeId="2" ParentId="6596" CreationDate="2015-02-14T12:03:58.137" Score="2" Body="&lt;p&gt;Great to know that you are interested in Robotics. To start with robotics you should have a bit knowledge on how to do simple programs in C and if you have knowledge on Electronics and Mechanical then it will really help you out in designing robot parts understand the circuit and all. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a beginner I would suggest you to check out &lt;a href=&quot;http://arduino.cc/en/Tutorial/HomePage&quot; rel=&quot;nofollow&quot;&gt;Arduino Tutorials&lt;/a&gt;, since it is easy to learn and has a large user-base. You will need to buy many components for your robotic projects such as sensors, leds, wires, motors, camera, etc and it can sometimes be costly. Before buying any robotic parts from your nearby stores or other sites you should check the price of the same at these sites &lt;a href=&quot;https://www.adafruit.com/category/&quot; rel=&quot;nofollow&quot;&gt;Adafruit Shop&lt;/a&gt;, &lt;a href=&quot;http://element14.com&quot; rel=&quot;nofollow&quot;&gt;Element14&lt;/a&gt;, &lt;a href=&quot;https://www.sparkfun.com/&quot; rel=&quot;nofollow&quot;&gt;Sparkfun&lt;/a&gt;, &lt;a href=&quot;http://www.robotmarketplace.com/store.html&quot; rel=&quot;nofollow&quot;&gt;Robot Marketplace&lt;/a&gt; and &lt;a href=&quot;http://hobbyking.com/&quot; rel=&quot;nofollow&quot;&gt;Hobbyking&lt;/a&gt; , maybe you will find a better option there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively you can also check these sites to learn Arduino : &lt;a href=&quot;https://learn.adafruit.com/category/learn-arduino&quot; rel=&quot;nofollow&quot;&gt;Adafruit&lt;/a&gt;, &lt;a href=&quot;http://www.ladyada.net/learn/arduino/&quot; rel=&quot;nofollow&quot;&gt;Ladyada&lt;/a&gt;, Sparkfun,&lt;a href=&quot;http://www.raywenderlich.com/tutorials#arduino&quot; rel=&quot;nofollow&quot;&gt;Ray Wenderlich&lt;/a&gt; and &lt;a href=&quot;http://www.instructables.com/howto/arduino/&quot; rel=&quot;nofollow&quot;&gt;Instructables&lt;/a&gt;. Once you are done learning Arduino you can then learn PIC Microcontroller and following that embedded boards such as &lt;a href=&quot;http://www.raspberrypi.org/&quot; rel=&quot;nofollow&quot;&gt;Raspberry Pi&lt;/a&gt; and &lt;a href=&quot;http://beagleboard.org/BLACK&quot; rel=&quot;nofollow&quot;&gt;Beaglebone Black&lt;/a&gt;. By this time you will have good knowledge of how hardware and software works and you can then be able to dig into advances stuffs like Artificial intelligence and Autonomous bots.&lt;/p&gt;&#xA;" OwnerUserId="8995" LastActivityDate="2015-02-14T12:03:58.137" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="6599" PostTypeId="1" CreationDate="2015-02-15T06:32:33.167" Score="2" ViewCount="1802" Body="&lt;p&gt;In robot kinematics, we have $e^{(\theta*twist)}$, where $twist$ is 6*1 vector.  How do I get the 4 by 4 transformation matrix by using product of exponentials?&lt;/p&gt;&#xA;" OwnerUserId="9087" LastEditorUserId="10414" LastEditDate="2021-01-25T16:21:54.543" LastActivityDate="2021-01-25T16:21:54.543" Title="How to get the 4*4 matrix from the twist using product of exponentials, in robot kinematics?" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;forward-kinematics&gt;&lt;product-of-exponentials&gt;&lt;screw-theory&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6600" PostTypeId="2" ParentId="6597" CreationDate="2015-02-15T20:09:50.003" Score="2" Body="&lt;p&gt;No. An example of this is a GPS measurement: It has one mode (the mean), but is uncertain. What this means is, if you receive 100 gps measurements, they will all have similar modes, but will be slightly different due to uncontrollable environmental effects. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The map of the environment has nothing to do with the sensor data of this type.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The mode / mean is often called the &lt;em&gt;estimate&lt;/em&gt;, and for practical purposes with &lt;em&gt;small&lt;/em&gt; noise, yes, you can treat the mean as the true state. But it is never &lt;em&gt;theoretically&lt;/em&gt; correct to do so. Always account for the uncertainty of the system. &lt;/p&gt;&#xA;" OwnerUserId="163" LastEditorUserId="163" LastEditDate="2015-02-15T21:07:17.360" LastActivityDate="2015-02-15T21:07:17.360" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="6601" PostTypeId="1" CreationDate="2015-02-15T21:45:44.773" Score="0" ViewCount="946" Body="&lt;p&gt;I posted a similar question before as I was just getting started with the project but I wasn't specific enough so got a weak response from the SE community. But now I am at a point where I have Python code which is supposed to rotate a servo through Pololu's Maestro Serial servo controller (&lt;a href=&quot;https://www.pololu.com/product/207&quot; rel=&quot;nofollow&quot;&gt;https://www.pololu.com/product/207&lt;/a&gt;). Based on the &quot;Serial Interface&quot; section of the user's guide (&lt;a href=&quot;https://www.pololu.com/product/207/resources&quot; rel=&quot;nofollow&quot;&gt;https://www.pololu.com/product/207/resources&lt;/a&gt;), I sent a sequence of numbers starting with decimal 170 and 12, which are the &quot;first command byte&quot; and the &quot;device number data byte&quot;, respectively. The user guide says that 12 is the default device number, so I tried changing it to 18 because that's how many servos my servo controller can drive. But that doesn't make much difference because the servo doesn't rotate at all. The numbers after that are the same as the example from the user's guide. I am not sure what the 4, 112 and 46 are doing, but the 0 targets the servo port &quot;0&quot; on the servo controller (the port to which my servo is connected). The servo doesn't move, regardless of what sequence of numbers I put in. I have very little experience, so if you guys could point me in the right direction or at least point to some useful resources on the web, I'd be very grateful.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;import serial&#xA;import struct&#xA;import time&#xA;import Adafruit_BBIO.UART as UART&#xA;&#xA;drive_Motor_Port = serial.Serial(port = &quot;/dev/ttyO1&quot;, baudrate=9600)&#xA;drive_Motor_Port.close()&#xA;drive_Motor_Port.open()&#xA;&#xA;drive_Motor_Port.write(chr(170)); # User guide says we must start with OxAA = 170&#xA;drive_Motor_Port.write(chr(18)); # Device number&#xA;drive_Motor_Port.write(chr(04));&#xA;drive_Motor_Port.write(chr(00));&#xA;drive_Motor_Port.write(chr(112));&#xA;drive_Motor_Port.write(chr(46));&#xA;&#xA;time.sleep(5);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="9057" LastActivityDate="2020-05-11T18:55:03.557" Title="Help with code that is supposed to drive a servo controller" Tags="&lt;python&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6602" PostTypeId="2" ParentId="6592" CreationDate="2015-02-15T21:47:17.760" Score="2" Body="&lt;p&gt;Practically all brushless motors require 3 independent power connections, each one at the appropriate frequency and 3 different phases. Those 3 power cables are typically connected to a &lt;a href=&quot;http://en.wikipedia.org/wiki/electronic_speed_control&quot; rel=&quot;nofollow noreferrer&quot;&gt;brushless ESC&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Practically all DC motor speed controllers (including DC electronic speed controllers for brushed DC motors), including the one you link to, only have 2 output power connections. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 2 outputs of a DC motor speed controller are not enough to drive the 3 inputs of a brushless motor&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/g4nUy.jpg&quot; alt=&quot;image of brushless motor, showing the 3 thick cables coming out of the motor&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(photo from &lt;a href=&quot;http://blog.mbuynow.com/rc-hobby-mysteries-what-is-brushless-motor/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;RC Hobby Mysteries: What is Brushless Motor?&quot;&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/bouZM.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(diagram from &lt;a href=&quot;https://www.eskyhelicopters.com/faq/brushless-motors.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;Esky Helicopters FAQ: Brushed vs Brushless Motors&quot;&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DC motor speed controllers -- with 2 output power connections -- work with brushed DC motors that have 2 power connections.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Brushless ESCs -- with 3 output power connections -- work with brushless motors that have 3 power connections.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as I can tell, any other connection between any two of a DC motor speed controller, a brushless ESC, a brushed DC motor, and a brushless motor, won't do anything useful.&lt;/p&gt;&#xA;" OwnerUserId="187" LastActivityDate="2015-02-15T21:47:17.760" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6603" PostTypeId="2" ParentId="6599" CreationDate="2015-02-15T22:17:57.267" Score="4" Body="&lt;p&gt;Actually, the 6x1 vector is sometimes better referred to as the coordinates of the twist. The twist itself is a 4x4 matrix, element of $SE(3)$, found by&#xA;$$&#xA;\begin{align}&#xA;A &amp;amp;= \begin{bmatrix} \widehat{\omega} &amp;amp; v \\ 0 &amp;amp; 0 \end{bmatrix}&#xA;\\&#xA;v &amp;amp;\triangleq -\omega \times q&#xA;\end{align}&#xA;$$&#xA;where $\omega$ is the unit vector pointing along the axis of rotation (for a rotating joint), $\widehat{\omega}$ is the 3x3 skew symmetric matrix derived from $\omega$, and $q$ is any point along the axis of rotation. The matrix exponential is then found by&#xA;$$&#xA;\begin{align}&#xA;e^{A \theta} &amp;amp;= \begin{bmatrix}&#xA;R &amp;amp; (I-R)(\omega \times v) + \omega \omega^T v \theta \\&#xA;0 &amp;amp; 1&#xA;\end{bmatrix}&#xA;\\&#xA;R &amp;amp;= e^{\hat{\omega} \theta} = I + \hat{\omega} \sin\theta + \hat{\omega}^2 (1-\cos\theta)&#xA;\end{align}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a more detailed explanation, see section 3.2 of &lt;a href=&quot;http://www.cds.caltech.edu/~murray/mlswiki/index.php/First_edition&quot; rel=&quot;nofollow&quot; title=&quot;chad&quot;&gt;Murray, Li, and Sastry&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2015-02-15T22:17:57.267" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6604" PostTypeId="1" CreationDate="2015-02-16T10:15:36.703" Score="3" ViewCount="99" Body="&lt;p&gt;What is the most common &lt;strong&gt;ZigBee IP Modules&lt;/strong&gt; to create &lt;strong&gt;full wireless mesh&lt;/strong&gt; mode? &#xA;I know that it should be &lt;em&gt;1) coordinator and 2) router&lt;/em&gt; to &lt;strong&gt;create full-mesh&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I am interesting about what kind of modules it would be better to buy by &lt;strong&gt;comparing price, quality and tutorial material.&lt;/strong&gt; It would be graet if you know some ZigBee modules based on ARM(Cortex) or Atmel MCUs and if you have some additional &lt;strong&gt;tutorial materials to control those modules&lt;/strong&gt; and  understand it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am looking for ZigBee modules only, but &lt;em&gt;NOT XBee&lt;/em&gt;!!!&#xA;because they have difference in organization of network. &#xA;Ex.: &#xA;&lt;strong&gt;&lt;em&gt;First of all,&lt;/em&gt;&lt;/strong&gt; ZigBee Mesh can create own zones to control devices. &#xA;but in &lt;em&gt;Xbee Mesh&lt;/em&gt; which from Digi Comany can create only full mesh and only one big or huge zone to control devices. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Secondly,&lt;/strong&gt; &lt;em&gt;ZigBee&lt;/em&gt; modules - AES encryption. Can lock down network and prevent other nodes from joining.&lt;br&gt;&#xA;&lt;em&gt;Xbee&lt;/em&gt; - AES encryption.** and it is coming soon...&lt;/p&gt;&#xA;" OwnerUserId="9113" LastEditorUserId="9113" LastEditDate="2015-02-16T11:28:07.347" LastActivityDate="2015-02-16T11:28:07.347" Title="choose ZigBee modules for full wireless mesh" Tags="&lt;mobile-robot&gt;&lt;microcontroller&gt;&lt;radio-control&gt;&lt;communication&gt;&lt;wireless&gt;" AnswerCount="0" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6605" PostTypeId="2" ParentId="6597" CreationDate="2015-02-16T13:35:51.183" Score="0" Body="&lt;p&gt;What I think you are asking:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given a map of the environment (e.g., the positions of landmarks), and a sensor that can measure the location of these landmarks, is odometry required when the position of the robot can be uniquely determined from the landmark measurements?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My answer:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In short, yes. If every measurement can be uniquely associated with a large enough set of landmarks, you can get a unique estimate of your position. Note I said &quot;estimate&quot; of your position. Of course there will still be uncertainty of your estimate because your measurement of the landmarks will not be perfect. However, here are a couple reasons having odometry in this situation would be helpful anyway:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;As an initial guess. A lot of data association algorithms work much better if you have a good initial guess. Having odometry here helps increase the likelihood of a good match. It helps you make the correct choice between two possible matches, for example.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;To help deal with infrequent or highly uncertain landmark measurements. There are often situations where your landmark measurements won't be very good for stretches of time. Maybe you briefly were in an unmapped or poorly mapped area. Maybe the environment has changed. Maybe something is interfering with how your sensor is working (e.g., different lighting). If you are not constantly getting good updates based on measurements of the environment, it could lead to unrecoverable errors. Odometry gives you a (dead-reckoning) estimate during this time, making recovery easier when you start to get good landmark measurements again.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In short, you need to ask yourself: Is the map very good? Does it full cover the operational area (i.e., is it possible for the robot to take measurements of things not in the map)? Is it possible the map has changed? Does the sensor work well in different conditions? Is the data association algorithm reliable for different amounts of noise? Will the updates provided by the sensor be frequent enough based on how fast the robot is travelling? Etc.&lt;/p&gt;&#xA;" OwnerUserId="4320" LastActivityDate="2015-02-16T13:35:51.183" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6606" PostTypeId="1" CreationDate="2015-02-16T16:29:09.167" Score="0" ViewCount="36" Body="&lt;p&gt;I am looking for &lt;strong&gt;cheap&lt;/strong&gt; wheeled robot that can be controlled remotely. I do not really care about how (RF, Bluetooth, WiFi, IR, other?), as long as I can control around 10 robots without interference in a small arena (they are always in the line of sight).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to emphasize that I do not need them to be programmable and it is important that they are cheap.&lt;/p&gt;&#xA;" OwnerUserId="9114" LastActivityDate="2015-02-16T16:29:09.167" Title="Cheap wheeled robot without tether (does not need to be programable)" Tags="&lt;control&gt;&lt;wheeled-robot&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6607" PostTypeId="1" AcceptedAnswerId="6608" CreationDate="2015-02-16T17:52:54.913" Score="0" ViewCount="131" Body="&lt;p&gt;I have been asked to write code to implement serial communications with a camera in order to control its pedestal (movable base) as well as set a few dozen other camera options. The catch is that I have to make it usable by ROS. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What would be the best practice to implement this functionality in ROS? I understand  the concept of services, but I think that there should be a better way than creating a different service/file for each option.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks,&#xA;Daniel.&lt;/p&gt;&#xA;" OwnerUserId="9115" LastActivityDate="2015-02-16T21:42:38.353" Title="Best practice to write a ROS service for a serial-communication class with many options" Tags="&lt;ros&gt;&lt;cameras&gt;&lt;serial&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6608" PostTypeId="2" ParentId="6607" CreationDate="2015-02-16T20:54:15.547" Score="0" Body="&lt;p&gt;Why not write a subscription based node? It could take messages from whoever then passes the information on to the camera. From what you've said, it seems like a service wouldn't be necessary.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Response. Yes. Create a new message that has all the necessary fields and a new topic, maybe /camera_parameters. &lt;/p&gt;&#xA;" OwnerUserId="8842" LastEditorUserId="8842" LastEditDate="2015-02-16T21:42:38.353" LastActivityDate="2015-02-16T21:42:38.353" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6613" PostTypeId="1" AcceptedAnswerId="6646" CreationDate="2015-02-17T12:25:39.030" Score="1" ViewCount="237" Body="&lt;p&gt;Note: I'm a firmware developer experienced with sensors and networks, but not much with motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am trying to build a small hobby robot, like a cat-sized spider. I am thinking of using servo motors with position control, so I don't have to use encoders to know where the motor is. Assuming six legs (I know, spiders have eight), with each leg being able to move up-down and left-right, that already translates to 12 motors. If you want to bend a knee, that gets the number to 18.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;18 motors on such a small robot is overkill, isn't it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have thought of a couple of ideas, but not having a strong mechanical background, I cannot tell whether they are doable/sane.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of my ideas is to use a magnet on the end of the limb (the end inside the chassis) and a small permanent magnet above it. The magnets attract each other and this keeps the limb firm under the weight of the robot. A stronger controllable magnet (a coil) would attract the limb even more and let it lift in the air. The following drawing may help:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/XFdlT.png&quot; alt=&quot;magnet to control limb motion&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This would allow the up-down movement of the leg, and a servo would control its left-right movement. However, I fear that such a system would not be strong enough to hold under the weight of the robot, or whether a reasonable coil would be compact enough.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In short, my question is, how can I control six legs each with two or three degrees of freedom with a reasonable number of motors? Is having one motor per degree of freedom the only possibility?&lt;/p&gt;&#xA;" OwnerUserId="158" LastActivityDate="2015-02-22T08:20:27.790" Title="Multiple limbs on small robots" Tags="&lt;mobile-robot&gt;&lt;servomotor&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6616" PostTypeId="2" ParentId="6601" CreationDate="2015-02-17T21:54:47.010" Score="1" Body="&lt;p&gt;According to the &lt;a href=&quot;https://www.pololu.com/file/0J37/ssc03a_guide.pdf&quot; rel=&quot;nofollow&quot;&gt;manual&lt;/a&gt; you link, byte 3 '04' is the command. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Command 4: Set Position, Absolute (2 data bytes)&#xA;  This command allows direct control of the internal servo position variable. Neutral,&#xA;  range, and direction settings do not affect this command. Data 2 contains the lower 7&#xA;  bits, and Data 1 contains the upper bits. The range of valid values is 500 through 5500.&#xA;  Setting a servo position will automatically turn the servo on.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;if the valid values are from 500 to 5500 the values you have in Byte 5 and 6 are out of range, and the manual is not clear as to the effect this will have. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS Doesn't it say byte 1 is supposed to be 128?&lt;/p&gt;&#xA;" OwnerUserId="9091" LastActivityDate="2015-02-17T21:54:47.010" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6617" PostTypeId="1" AcceptedAnswerId="6636" CreationDate="2015-02-17T22:11:10.117" Score="6" ViewCount="2797" Body="&lt;p&gt;I would like to control my 7 DOF robot arm to move along a Cartesian trajectory in the world frame.  I can do this just fine for translation, but I am struggling on how to implement something similar for rotation.  So far, all my attempts seem to go unstable.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The trajectory is described as a translational and rotational velocity, plus a distance and/or timeout stopping criteria.  Basically, I want the end-effector to move a short distance relative to its current location.  Because of numerical errors, controller errors, compliance, etc, the arm won't be exactly where you wanted it from the previous iteration.  So I don't simply do $J^{-1}v_e$.  Instead, I store the pose of the end-effector at the start, then at every iteration I compute where the end-effector &lt;em&gt;should&lt;/em&gt; be at the current time, take the difference between that and the current location, then feed that into the Jacobian.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'll first describe my translation implementation.  Here is some pseudo OpenRave Python:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;# velocity_transform specified in m/s as relative motion&#xA;def move(velocity_transform):&#xA;  t_start = time.time()&#xA;  pose_start = effector.GetTransform()&#xA;  while True:&#xA;    t_now = time.time()&#xA;    t_elapsed = t_now - t_start&#xA;    pose_current = effector.GetTransform()&#xA;    translation_target = pose_start[:3,3] + velocity_transform[:3,3] * t_elapsed&#xA;    v_trans = translation_target - pose_current[:3,3]&#xA;    vels = J_plus.dot(v_trans) # some math simplified here&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The rotation is a little trickier.  To determine the desired rotation at the current time, i use Spherical Linear Interpolation (SLERP).  OpenRave provides a quatSlerp() function which I use.  (It requires conversion into quaternions, but it seems to work).  Then I calculate the relative rotation between the current pose and the target rotation.  Finally, I convert to Euler angles which is what I must pass into my AngularVelocityJacobian.  Here is the pseudo code for it.  These lines are inside the while loop:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;rot_t1 = np.dot(pose_start[:3,:3], velocity_transform[:3,:3]) # desired rotation of end-effector 1 second from start&#xA;quat_start = quatFromRotationMatrix(pose_start) # start pose as quaternion&#xA;quat_t1 = quatFromRotationMatrix(rot_t1) # rot_t1 as quaternion&#xA;&#xA;# use SLERP to compute proper rotation at this time&#xA;quat_target = quatSlerp(quat_start, quat_t1, t_elapsed) # world_to_target&#xA;rot_target = rotationMatrixFromQuat(quat_target) # world_to_target&#xA;v_rot = np.dot(np.linalg.inv(pose_current[:3,:3]), rot_target) # current_to_target&#xA;v_euler = eulerFromRotationMatrix(v_rot) # get rotation about world axes&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then v_euler is fed into the Jacobian along with v_trans.  I am pretty sure my Jacobian code is fine.  Because i have given it (constant) rotational velocities ok.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note, I am not asking you to debug my code.  I only posted code because I figured it would be more clear than converting this all to math.  I am more interested in why this might go unstable.  Specifically, is the math wrong?  And if this is completely off base, please let me know.  I'm sure people must go about this somehow. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So far, I have been giving it a slow linear velocity (0.01 m/s), and zero target rotational velocity.  The arm is in a good spot in the workspace and can easily achieve the desired motion.  The code runs at 200Hz, which should be sufficiently fast enough.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can hard-code the angular velocity fed into the Jacobian instead of using the computed &lt;code&gt;v_euler&lt;/code&gt; and there is no instability.  So there is something wrong in my math.  This works for both zero and non-zero target angular velocities.  Interestingly, when i feed it an angular velocity of 0.01 rad/sec, the end-effector rotates at a rate of 90 deg/sec.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; If I put the end-effector at a different place in the workspace so that its axes are aligned with the world axes, then everything seems works fine.  If the end-effector is 45 degrees off from the world axes, then some motions seem to work, while others don't move exactly as they should, although i don't think i've seen it go unstable.  At 90 degrees or more off from world, then it goes unstable. &lt;/p&gt;&#xA;" OwnerUserId="110" LastEditorUserId="6941" LastEditDate="2015-02-20T19:22:43.623" LastActivityDate="2017-04-25T12:23:55.717" Title="Jacobian-based trajectory following" Tags="&lt;kinematics&gt;&lt;jacobian&gt;" AnswerCount="3" CommentCount="5" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6620" PostTypeId="1" CreationDate="2015-02-18T09:43:01.903" Score="1" ViewCount="2092" Body="&lt;p&gt;I'm wondering about good software/package to draw the robot manipulator and indicate DH parameters and different axes?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any suggestions!&lt;/p&gt;&#xA;" OwnerUserId="9087" LastActivityDate="2015-04-17T06:14:28.810" Title="What is the best software/package to draw the robot manipulator and indicate DH parameters and different axes?" Tags="&lt;robotic-arm&gt;&lt;industrial-robot&gt;&lt;robotc&gt;&lt;simulation&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6622" PostTypeId="1" CreationDate="2015-02-18T10:50:47.020" Score="0" ViewCount="88" Body="&lt;p&gt;A professor in my university is asking me to study robotics with him. By robotics I understand programming a robot to move around, avoid obstacles, figure out a maze, etc.. He sent me some manuals for Khepera II. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I first read the specs, I was surprised by the low specs:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Motorola 68331 CPU @ 25 MHz&lt;/li&gt;&#xA;&lt;li&gt;512 KB RAM&lt;/li&gt;&#xA;&lt;li&gt;512 KB Flash&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;But then I looked at some of the new Arduino boards and they had similar specs.&#xA;So maybe that's OK, I guess the CPU speed and RAM aren't that important if I'm going to control the robot from a normal computer that can handle real time computation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What about the software? I glanced at the manuals and saw only C and assembly code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Khepera I is from 1995 and Khepera II is from 2001. I think robots have advanced much since 2001.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Is using Khepera II adequate for university level learning, considering I can probably give 200-300$ for a newer one?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I ask in terms of hardware of the board, motors and sensors, as well as in the programmability. This question might seem vague. I'm ready to improve it by giving more detail upon request.&lt;/p&gt;&#xA;" OwnerUserId="9126" LastEditorUserId="9126" LastEditDate="2015-02-18T11:08:22.607" LastActivityDate="2015-04-21T21:54:49.027" Title="Is Khepera II still adequate for learning" Tags="&lt;mobile-robot&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6623" PostTypeId="2" ParentId="6596" CreationDate="2015-02-18T15:17:20.990" Score="0" Body="&lt;p&gt;i wanna recommend to you 2 book :&#xA;[1]: Craig, John J. Introduction to robotics: mechanics and control. Addison-Wesley, 1989.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[2]: Spong, Mark W., Seth Hutchinson, and Mathukumalli Vidyasagar. Robot modeling and control. Wiley, 2006.&#xA;First book said simply lesson , you can esaily figure out &#xA;i have studied both of them .&lt;/p&gt;&#xA;" OwnerUserId="5607" LastActivityDate="2015-02-18T15:17:20.990" CommentCount="0" CommunityOwnedDate="2015-02-18T15:17:20.990" ContentLicense="CC BY-SA 3.0" />
  <row Id="6624" PostTypeId="1" CreationDate="2015-02-18T20:14:10.133" Score="0" ViewCount="270" Body="&lt;p&gt;I am looking  for sensors to give me the position of a ball  on a plate in order to make a ball and plate problem  .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What came to my mind is to use image processing but since i never did some serious image processing i don't know if it is a good idea.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Eventually can you please help me to find some 'cheap' sensors in order to get the position of the ball on the plate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you for your attention.&lt;/p&gt;&#xA;" OwnerUserId="7557" LastActivityDate="2015-02-19T04:55:24.450" Title="Ball and plate possible sensors use" Tags="&lt;control&gt;&lt;sensors&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6625" PostTypeId="2" ParentId="6622" CreationDate="2015-02-18T20:51:44.363" Score="0" Body="&lt;p&gt;The only thing that might make a difference for you is if you are less comfortable in programming with C or assembly. &#xA;The principles and techniques you learn will be able to be applied regardless of the underlying hardware and software. &#xA;I was doing some autonomous mobile robotics programming at the University of Connecticut in the early 90's and while there have been changes to servos and sensors the fundamentals are still, well, fundamental.&lt;/p&gt;&#xA;" OwnerUserId="9091" LastActivityDate="2015-02-18T20:51:44.363" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6626" PostTypeId="2" ParentId="6624" CreationDate="2015-02-19T00:37:00.217" Score="1" Body="&lt;p&gt;Image processing is a valid solution to the ball on a plate problem. It will give you a very accurate estimate of the position of the ball. You should be able to do this with a raspberry pi. With regard to sensors, any cheap webcam should do the trick.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The vision processing involved will be trivial if you are familiar with python or c++.&lt;/p&gt;&#xA;" OwnerUserId="8842" LastActivityDate="2015-02-19T00:37:00.217" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6627" PostTypeId="2" ParentId="6620" CreationDate="2015-02-19T02:50:28.477" Score="0" Body="&lt;p&gt;Many kinematics software packages let you easily specify the robot dimensions in an xml format.  You describe the translations and rotations between joints in vectors, quaternions, rotation matrices, etc. and not in DH parameters.  For example: &lt;a href=&quot;http://openrave.programmingvision.com/wiki/index.php/Format:XML&quot; rel=&quot;nofollow&quot;&gt;OpenRave XML format&lt;/a&gt;, and &lt;a href=&quot;http://moveit.ros.org/wiki/URDF&quot; rel=&quot;nofollow&quot;&gt;ROS MoveIt! URDF format&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-02-19T02:50:28.477" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6628" PostTypeId="2" ParentId="6624" CreationDate="2015-02-19T04:27:54.047" Score="2" Body="&lt;p&gt;You might want to look at using a Resistive Touch Panel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/nG2YY.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These are the kinds of touchscreens used on older devices that can only accept a single point of input. They work by returning a resistance of x, and of y, to determine the position on the screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using one of these would require significantly less code, and processing power then using vision processing. The ball could simple sit on this plate, and as it rolls around, you will be able to determine the exact XY coordinate of the ball.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By doing a simple Google search and find hundreds, of all sizes, with or without an LCD attached.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is an example of what I imagine you are trying to do. The position of this ball is measured by a Resistive touch panel. &lt;a href=&quot;https://www.youtube.com/watch?v=j4OmVLc_oDw&quot; rel=&quot;nofollow noreferrer&quot;&gt;YouTube Link&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="539" LastEditorUserId="539" LastEditDate="2015-02-19T04:55:24.450" LastActivityDate="2015-02-19T04:55:24.450" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6629" PostTypeId="2" ParentId="6596" CreationDate="2015-02-19T05:19:39.877" Score="0" Body="&lt;p&gt;Great to see bright new minds interested in the field.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are a student you might want to look into &lt;a href=&quot;http://usfirst.org&quot; rel=&quot;nofollow&quot;&gt;F.I.R.S.T. Robotics&lt;/a&gt;, or &lt;strong&gt;F&lt;/strong&gt;or &lt;strong&gt;I&lt;/strong&gt;nspiration and &lt;strong&gt;R&lt;/strong&gt;ecognition of &lt;strong&gt;S&lt;/strong&gt;cience and &lt;strong&gt;T&lt;/strong&gt;echnology.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is not something you can do yourself at home, but it is a program that I would highly recommend, and you will be able to join any team, need not any prior experiences;the community is about sharing our knowledge with others.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a program based primarily in the US with teams across the world that is dedicated to inspiring young minds in the arts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the main page, you can go to the &lt;code&gt;Programs&lt;/code&gt; section and select a program for more information.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do not know your age, but this may help others as well:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;F.L.L. (Grades 4 to 8)&lt;/li&gt;&#xA;&lt;li&gt;F.T.C. (Grades 7 to 12)&lt;/li&gt;&#xA;&lt;li&gt;F.R.C. (Grades 9 to 12)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;They also have available an event / team finder so you can check it out if you want!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www3.usfirst.org/whats-going-on&quot; rel=&quot;nofollow&quot;&gt;&lt;strong&gt;Event &amp;amp; Team Finder&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="539" LastActivityDate="2015-02-19T05:19:39.877" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6632" PostTypeId="1" CreationDate="2015-02-20T01:14:46.973" Score="0" ViewCount="767" Body="&lt;p&gt;here is what I did on &lt;strong&gt;Ubuntu 14.04 LTS&lt;/strong&gt; running on a Toshiba Satellite, &lt;strong&gt;intel&lt;/strong&gt; i7, &lt;strong&gt;nvidia&lt;/strong&gt; with &lt;strong&gt;usb 3.0 and 2.0 ports&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1, 2, 3 refer to scripts found &lt;a href=&quot;https://github.com/Parth-Mehrotra/Tools/tree/master/InstallScripts&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Setup ros by running this install-ros.sh script&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Setup opencv by running this install-opencv.sh script&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Setup PCL by running this install-pcl.sh script&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Installed  libfreenect2 via the instructions at the master branch&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Made the changes and installed&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Cloned the repository into an empty catkin workspace&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Sourced the respective setup.zsh files from my &lt;strong&gt;/opt/ros/...&lt;/strong&gt; and from the &lt;strong&gt;devel/&lt;/strong&gt; folders.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;At this point, I have encountered no issues&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried running: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;rosrun kinect2_bridge kinect2_bridge&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and I get the following message:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[ERROR] [1424391698.413758209]: [registerPublisher] Failed to contact master at [localhost:11311].  Retrying..&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So I assume I need to run roscore or something like that. So if I run: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;roscore&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;in one terminal and:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;rosrun kinect2_bridge kinect2_bridge&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;in another terminal, I get the following segmentation fault:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[ERROR] [1424393345.496836066]: [registerPublisher] Failed to contact master at [localhost:11311].  Retrying...&#xA;[ INFO] [1424393446.243884489]: Connected to master at [localhost:11311]&#xA;parameter:&#xA;        base_name: kinect2&#xA;           sensor: &#xA;        fps_limit: -1&#xA;       calib_path: /home/parthmehrotra/catkin_ws/src/iai_kinect2/kinect2_bridge/data/&#xA;          use_png: false&#xA;     jpeg_quality: 90&#xA;        png_level: 1&#xA;     depth_method: opengl&#xA;     depth_device: -1&#xA;       reg_method: default&#xA;       reg_devive: -1&#xA;        max_depth: 12&#xA;        min_depth: 0.1&#xA;       queue_size: 2&#xA; bilateral_filter: true&#xA;edge_aware_filter: true&#xA;       publish_tf: false&#xA;     base_name_tf: kinect2&#xA;   worker_threads: 4&#xA;&#xA;[1]    2679 segmentation fault (core dumped)  rosrun kinect2_bridge kinect2_bridge&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I must be overlooking something really trivial. Thanks for taking the time to help me. &lt;/p&gt;&#xA;" OwnerUserId="9131" LastActivityDate="2015-02-20T01:14:46.973" Title="Ros, iai_kinect2 issues" Tags="&lt;ros&gt;&lt;kinect&gt;" AnswerCount="0" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="6636" PostTypeId="2" ParentId="6617" CreationDate="2015-02-20T19:08:12.640" Score="5" Body="&lt;p&gt;The math required to deal with the orientation error (in terms of error with respect to both desired position and desired velocity) is well described in the book of &lt;a href=&quot;http://www.kramirez.net/Robotica/Material/Libros/Robotics%20-%20Modelling,%20Planning%20and%20Control.pdf&quot; rel=&quot;noreferrer&quot;&gt;Sciavicco-Siciliano&lt;/a&gt;. See section 3.7.3 starting from page 137.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm personally employing the axis-angle notation, thus I coded the formula (3.89) given at page 139 with correct results.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In short, given the goal of tracking a 6D trajectory in the Cartesian space both in position and velocity, the inputs are $\left(p_d,\dot{p}_d\right)$ for the translational part and $\left(\theta_d,\omega_d\right)$ for the orientation part (axis-angle). The inputs are meant to be time varying (i.e. $p_d \equiv p_d\left(t\right)$). Then, the dynamics of the error is analyzed (see e.g. section 3.7.1) to come up with a convergence rule whose $\mathbin{K}_P$ and $\mathbin{K}_O$ are the positive definite matrices gains acting on the error itself. These matrices set just the convergence speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I didn't go into your code, but this formula, as different versions of it, makes use of the pseudo-inverse of the Jacobian to allow producing step-by-step the joint velocities required to drive the manipulator towards the target position and orientation of the end-effector with approximately the specified Cartesian speed.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Update&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Following up our discussion below in the comments, to give you a very basic point in the code where to start from, take a glace at &lt;a href=&quot;https://github.com/robotology/icub-main/blob/29dae61660f0736991be94d0e3947a7bc21d5ba9/src/libraries/iKin/src/iKinInv.cpp#L102&quot; rel=&quot;noreferrer&quot;&gt;these lines&lt;/a&gt;. They are part of a method computing the Cartesian error, which is in turn an important piece of our operational space controller we use with the iCub.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Imagine now that &lt;code&gt;ctrlPose==IKINCTRL_POSE_FULL&lt;/code&gt;; all the lines &lt;code&gt;102 =&amp;gt; 118&lt;/code&gt; will be then executed. The first block computes the translational error, while the second block implements the formula (3.84) above that deals with the orientation error in axis-angle notation, where the matrix &lt;strong&gt;Des&lt;/strong&gt; represents the desired orientation transformed in DCM format (Direction-Cosine-Matrix, i.e. the standard rotation matrix) from the axis-angle and the matrix &lt;strong&gt;H&lt;/strong&gt; accounts for the current pose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once the $6 \times 1$ error vector $e$ gets correctly populated - being the last three components the orientation error in axis-angle convention - you can then run the control law:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$&#xA;\dot{q}=J_G^+ \cdot e,&#xA;$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $J_G$ is the $6 \times n$ Geometric Jacobian and $\dot{q}$ the $n \times 1$ vector of joint velocities. In this basic implementation we don't handle the target orientation velocities $\omega_d$, which are zero, neither the target translational velocities $\dot{p}_d$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Moreover, we know that $e=\left[e_P, e_O\right]^T$, but we can also impose $e=\left[K_P \cdot e_P, K_O \cdot e_O\right]^T$ to play with convergence speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The values of $K_P$ and $K_O$ can be even made greater than $I$ to start with but then bear in mind that the pseudo-inverse algorithm is intrinsically unstable due to e.g. singularities in the Jacobian and high values of gain matrices could enhance this problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To mitigate such a downside, one can implement a synergy between the Jacobian pseudo-inverse (very fast but prone to instabilities) and the Jacobian transposed (much slower but intrinsically stable), ending up with the classical &lt;em&gt;Damped-Least-Squares&lt;/em&gt; (DLS) technique, aka Levenberg-Marquardt algorithm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the end, also DLS can suffer from reliability, accuracy and speed issues, especially when you want to control at the same time the translation and the orientation for a very redundant manipulator equipped with many degrees of freedom. That's why I finally came up with the use of a nonlinear optimizer capable of solving the inverse kinematics on the fly. Once the desired pose is known also in the configuration space the design of the controller is extremely facilitated.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2015-02-23T20:48:16.980" LastActivityDate="2015-02-23T20:48:16.980" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="6637" PostTypeId="2" ParentId="6622" CreationDate="2015-02-20T21:21:31.613" Score="1" Body="&lt;p&gt;By using the Motorola, your Prof is getting you understand the fundamentals of what you are doing. If he had specified an Arduido you may have grabbed any bit of code off the net and not really understood the fundamentals. I am sure he knows what he is doing for you.&#xA;The best learning is from the mistakes you make, i.e. timing, memory margins, overuns etc.&lt;/p&gt;&#xA;" OwnerUserId="7680" LastActivityDate="2015-02-20T21:21:31.613" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6639" PostTypeId="1" AcceptedAnswerId="6666" CreationDate="2015-02-20T23:08:47.760" Score="2" ViewCount="574" Body="&lt;p&gt;I have implemented 2D-SLAM using EKF. The map is based-feature in which there is only one landmark for the sake of simplicity. I've read some papers regarding this matter. They plot the $\pm3\sigma$ plus the error. I would like to make sure that I'm doing the right thing. In my project, I have the estimate of the landmark's position and its true values. The true values here are the ones that the sensor measure not the ideal case. For example, the ideal case of the landmark position  is (30,60) but this value is not accessible by any means, therefore I will consider the true values the ones that are coming from the sensor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now the error in the landmark's position in x-axis is formulated as follows &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\text{error}_{x} = \hat{x} - x&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The below picture shows the error in blue color. The red color represents the error bounds which is $\pm 3 \sigma_{x}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is now is this the way people plot the errors in the academics papers because I've seen some papers the bounds doesn't not look like mine. Even though mine decreases monotonically however in some papers it is more curved and it seems more reasonable to me. Any suggestions?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/heEm9.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="2155" LastActivityDate="2015-10-28T11:57:03.453" Title="how to plot $\pm 3 \sigma$ of a landmark in EKF-SLAM" Tags="&lt;slam&gt;&lt;ekf&gt;&lt;simulation&gt;&lt;mapping&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6641" PostTypeId="2" ParentId="6575" CreationDate="2015-02-21T13:53:50.177" Score="2" Body="&lt;p&gt;Tension distribution is easily accomplished using a simple mechanism called a &lt;a href=&quot;https://en.wikipedia.org/wiki/Whippletree_%28mechanism%29&quot; rel=&quot;nofollow&quot;&gt;whiffletree&lt;/a&gt;.&#xA;Classically invented to allow several horses of different strengths to pull evenly on a single load, this also allows a single motor to pull several linkages with the same amount of force.&#xA;It would also allow the mechanism to self-adjust slightly to construction inaccuracy, and also allow the gripper to better adapt to the shape of what its holding.&lt;/p&gt;&#xA;" OwnerUserId="2402" LastActivityDate="2015-02-21T13:53:50.177" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6642" PostTypeId="1" CreationDate="2015-02-21T16:15:33.327" Score="7" ViewCount="318" Body="&lt;p&gt;It is possible to distinguish the properties &quot;time-varying&quot; and &quot;nonautonomous&quot; in dynamical systems regarding Lyapunov stability analysis?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does it make a difference if the system depends explicitly on $t$ or indirectly on $t$ due to a time-varying parameter?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to explain the problem in detail:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let a dynamical system denoted by $\dot x = f$, with state $x$.&#xA;We say that a dynamical system is nonautonomous if the dynamics $f$ depend on time $t$, i.e. $$\dot x = f(t,x).$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For instance the systems $$ \dot x = - t x^2 $$ and $$ \dot x = -a(t)x,$$ are nonautonomous. Let $a(t)$ be a bounded time-varying parameter, i.e. $||a(t)||&amp;lt;a^+$ and strictly positive, i.e. $a(t) &amp;gt; 0$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Particularly, the second example is more likely denoted as a time-varying linear system, but of course it is nonautonomous. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In Lyapunov stability analysis autonomous and nonautonomous systems must be strongly distinguished to make assertions about stability of the system, and the Lyapunov analysis for nonautonomuos systems is much more difficult.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And here for me some questions arise. When i want to analize stability of the second example must i really use the Lyapunov theory for nonautonomous systems? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It follows for the candidate $V = 1/2 x^2$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\dot V = -a(t)x^2,$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;which is negative definite. Is the origin really asymptotically stable, as i suppose, or must i take the nonautomous characteristic into account in this case?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would suppose it makes a difference if a system depends explicitly on $t$ as in the first example or just indirect due to a time-varying parameter, since $t$ approaches infinity, but a parameter does not.&lt;/p&gt;&#xA;" OwnerUserId="9144" LastEditorUserId="110" LastEditDate="2015-02-22T16:24:09.863" LastActivityDate="2017-01-07T14:26:22.643" Title="&quot;Time-varying&quot; and &quot;nonautonomous&quot; dynamical systems and their Lyapunov analysis" Tags="&lt;control&gt;&lt;dynamics&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6643" PostTypeId="1" AcceptedAnswerId="6644" CreationDate="2015-02-21T16:54:04.097" Score="3" ViewCount="249" Body="&lt;p&gt;Is there a way to make a quadcopter maintain steady hovering (no lateral movement, constant altitude) while tilted left or right?  If so, how can i accomplish this? &lt;/p&gt;&#xA;" OwnerUserId="2295" LastActivityDate="2020-04-01T11:58:46.270" Title="Can a quadcopter hover while tilted?" Tags="&lt;quadcopter&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6644" PostTypeId="2" ParentId="6643" CreationDate="2015-02-21T18:48:06.513" Score="6" Body="&lt;p&gt;In a normal quadcopter configuration, if you tilt you will be pointing some of the lift force to the side. The only way to hover at a tilt, then, would be to somehow apply a counter force. A standard quadcopter can't do that itself, so it would need be an external force (tether, wind, etc).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your other options are to use a nonstandard configuration such as actuated motors that let you tilt them individually or adding extra lateral motors.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastEditorUserId="14272" LastEditDate="2020-04-01T11:58:46.270" LastActivityDate="2020-04-01T11:58:46.270" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6645" PostTypeId="2" ParentId="6617" CreationDate="2015-02-21T23:51:01.027" Score="0" Body="&lt;p&gt;So I looked into the quatSlerp function and it seems like you are passing t_elapsed incorrectly. It looked like that argument is supposed to be the the interpolation value, where if t = 0, the rotation returned is the identity, and if t = 1 the rotation returned is the full rotation between first two quaternion arguments passed. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If this code is inside a while loop, and t_elapsed is getting larger than 1, the arm will go unstable. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This doesn't explain why the unstable behavior would be affected by position. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hopefully this isn't what you meant by debugging your code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://openrave.org/docs/latest_stable/coreapihtml/geometry_8h_source.html#l00988&quot; rel=&quot;nofollow&quot;&gt;quatSlerp&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8842" LastActivityDate="2015-02-21T23:51:01.027" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6646" PostTypeId="2" ParentId="6613" CreationDate="2015-02-21T23:56:37.523" Score="1" Body="&lt;p&gt;I do not believe that an actual spider has the degrees of freedom you are considering. Yes, each leg can respond to a stimulus but in the case of ambulatory motion, there is some repetitive motion of the legs. Your example of solenoids, or what I call half-axis may be a solution. Another solution may be to incorporate cams or slow responsive joints. With the slow responsive joints, one can see how the speed of motor motion could cause different leg response... And still another possible solution would have a single motor drive a pair of legs or more... And still even another possible solution is to run two servo motors coupled where the pair can run multiple joints but if the motors are out of &quot;phase&quot; different motions can occur allowing you to mimic more axis motion.  &lt;/p&gt;&#xA;" OwnerUserId="9135" LastActivityDate="2015-02-21T23:56:37.523" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6647" PostTypeId="2" ParentId="6613" CreationDate="2015-02-22T08:20:27.790" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Is having one motor per degree of freedom the only possibility?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There are many ways to use each motor for multiple purposes. My &lt;a href=&quot;https://robotics.stackexchange.com/a/1096/478&quot;&gt;answer to a previous question&lt;/a&gt; has photos of gear trains that perform one function when a motor rotates one way and another when it rotates the other.  You can also use clutches and/or shifters to control what function a motor drives.  It may be possible to use one drive motor and one selector motor for any operation that is done for only one leg at once.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, for a one-off construction, unless you have machine-shop skills and mechanical-design ability, it seems likely that using many copies of a cheap component (RC servos) will cost you less and be more reliable than trying to use motors for multiple purposes.  The necessary mechanical parts (eg solenoids, cams, gear and belt systems) are likely to be low-volume and expensive by comparison, and might save weight but not save money.&lt;/p&gt;&#xA;" OwnerUserId="478" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2015-02-22T08:20:27.790" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6648" PostTypeId="1" CreationDate="2015-02-22T11:35:10.653" Score="1" ViewCount="140" Body="&lt;p&gt;I want to build a automatic agricultural robot for my final year diploma project. The basic idea is to program 8051 to drive the robot in a fixed path in farm for ploughing the farm which i am planning to do by setting a particular distance till which it will go straight and then take a U turn and plough in next lane. Width of the farm will also be set so when it completes full farm it'll stop and go back to starting point. the only catch is to reprogram it as per size of the farm of the person who uses it. So i want to add a number pad with which he can set the length and width of the farm as well as width of each lane as per his needs without professional help. Can this be done using 8051 or should i go for AVR or PIC microcontrollers. I have just started studying programming and interfacing of 8051 so I am not that good in programming. If its possible how do i do it. can someone please help me with circuit diagram for this project. After everything i said i need in my project if i still get an empty port in microcontroller I would love to add a fertilizer sprayer or water irrigation system and a GSM module so that a farmer can simply ask the robot to start working using his mobile phone. As I am making just a prototype i want it to be as small as possible. Suggestions are welcomed.&lt;/p&gt;&#xA;" OwnerUserId="9147" LastActivityDate="2015-05-25T18:00:39.147" Title="Automatic agricultural robot using 8051" Tags="&lt;microcontroller&gt;&lt;wheeled-robot&gt;&lt;electronics&gt;&lt;artificial-intelligence&gt;" AnswerCount="1" CommentCount="0" ClosedDate="2015-06-15T11:25:29.213" ContentLicense="CC BY-SA 3.0" />
  <row Id="6649" PostTypeId="1" CreationDate="2015-02-22T11:59:19.183" Score="6" ViewCount="2038" Body="&lt;p&gt;Consider a tank like robot with a motor driver channel for each side of the robot (two motors on the left and two motors on the right) and an IMU.&#xA;I'm interested in driving the robot in a straight line using the yaw data from the gyro and magnetometer of the IMU, removing the noise caused by slightly different behaving motors, and the possibility to change the desired direction angle. For example some event comes and I want the car to switch the desired direction to +120 degrees and turn while driving.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm using Arduino Uno, MinIMU-9 v3 and two DRV8838 Single Brushed DC Motor Driver from Pololu.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can you please give me some hints and a short pseudo-code example?&#xA;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="9148" LastActivityDate="2017-08-21T02:18:29.163" Title="PID control of tank-like robot and IMU" Tags="&lt;arduino&gt;&lt;pid&gt;&lt;imu&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6650" PostTypeId="1" CreationDate="2015-02-22T12:09:56.450" Score="1" ViewCount="102" Body="&lt;p&gt;I'm a beginner in Robotics. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd like to ask what are the minimum/recommended specs for a microcontroller to run a real-time system such as Linux RTAI?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the popular microcontroller for running Linux RTAI? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you.&lt;/p&gt;&#xA;" OwnerUserId="9149" LastEditorUserId="110" LastEditDate="2015-02-22T16:22:59.363" LastActivityDate="2015-02-26T16:36:07.780" Title="Microcontroller for running Linux RTAI" Tags="&lt;microcontroller&gt;&lt;embedded-systems&gt;&lt;real-time&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6651" PostTypeId="1" AcceptedAnswerId="6660" CreationDate="2015-02-22T14:41:41.583" Score="3" ViewCount="64" Body="&lt;p&gt;With the bee hive collapses, growers are desperate for pollenation options. Is anyone working on swarms of tiny flying robots to augment the bees? They could look for a certain color, poke around inside the flower for a moment, and move on to the next. When they need recharging, they fly back to their hive (&lt;em&gt;the same reason bees fly back&lt;/em&gt;). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, replacing germinators that run the seeds through their digestive systems would be a different problem.&lt;/p&gt;&#xA;" OwnerUserId="9150" LastActivityDate="2015-02-23T19:35:47.487" Title="Are robotic pollenators being designed?" Tags="&lt;mobile-robot&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6652" PostTypeId="1" AcceptedAnswerId="6653" CreationDate="2015-02-22T15:43:34.163" Score="4" ViewCount="13882" Body="&lt;p&gt;How a ROS node written in Python could subscribe to multiple topics and publish to multiple topics?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All examples I found were for a single topic. Is this an event-driven model so subscription to multiple &quot;events&quot; is allowed or it is more like a loop, so it can listen only to one &quot;source&quot; at a time?&lt;/p&gt;&#xA;" OwnerUserId="9154" LastEditorUserId="18870" LastEditDate="2019-01-24T14:51:55.913" LastActivityDate="2019-01-24T14:51:55.913" Title="How to get a python node in ROS subscribe to multiple topics?" Tags="&lt;ros&gt;&lt;python&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6653" PostTypeId="2" ParentId="6652" CreationDate="2015-02-22T16:21:09.103" Score="6" Body="&lt;p&gt;You can follow the example code &lt;a href=&quot;http://wiki.ros.org/rospy/Overview/Publishers%20and%20Subscribers#Subscribing_to_a_topic&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt; and simply add a second subscription like so:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;import rospy&#xA;from std_msgs.msg import String&#xA;&#xA;def callback1(data):&#xA;    rospy.loginfo(&quot;Callback1 heard %s&quot;,data.data)&#xA;&#xA;def callback2(data):&#xA;    rospy.loginfo(&quot;Callback2 heard %s&quot;,data.data) &#xA;&#xA;def listener():&#xA;    rospy.init_node('node_name')&#xA;    rospy.Subscriber(&quot;chatter1&quot;, String, callback1)&#xA;    rospy.Subscriber(&quot;chatter2&quot;, String, callback2)&#xA;    # spin() simply keeps python from exiting until this node is stopped&#xA;    rospy.spin()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;ROS Python nodes are inherently multi-threaded.  When you get each callback, it will be in a separate thread.  So this is an event-driven model.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that this behavior is different than the default behavior for ROS C nodes which are inherently single threaded unless you specifically make them multi-threaded.  &lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-02-22T16:21:09.103" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6655" PostTypeId="2" ParentId="6649" CreationDate="2015-02-22T19:08:57.837" Score="0" Body="&lt;p&gt;You define the powers for motors as: p_left  = p_average + p_differential&#xA;and p_right = p_average - p_differential&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your PID regulator should take the filtered angle as input and provide you with p_differential. As such, it will control the &quot;turning&quot; of the robot.&#xA;When the mentioned event occurs, just change the referential angle.&lt;/p&gt;&#xA;" OwnerUserId="4017" LastActivityDate="2015-02-22T19:08:57.837" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6656" PostTypeId="2" ParentId="6587" CreationDate="2015-02-22T21:27:46.537" Score="2" Body="&lt;p&gt;WPILib dev here. There's no need to recreate the project, although that will fix the problem. Simply right click on the project, click on properties &gt; Java Build Path &gt; Libraries &gt; Add External Jar&#xA;Navigate to the wpilib folder on your computer and find the wpilibj.jar file. Select that file, and clean the project.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This won't fix things if you didn't start out with a wpilibj project because you'll be missing other files like build.properties and build.xml, but if you just lost the wpilibj jar file this will resolve that.&lt;/p&gt;&#xA;" OwnerUserId="9155" LastActivityDate="2015-02-22T21:27:46.537" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6657" PostTypeId="1" AcceptedAnswerId="6658" CreationDate="2015-02-23T02:20:30.407" Score="0" ViewCount="108" Body="&lt;p&gt;I have equations of a dynamic system. I need to figure out what this physical system is. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The equations are:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;\begin{align}&#xA;\dot{x}_1&amp;amp;=bx_1+kx_2+x_3\\&#xA;\dot{x}_2&amp;amp;=x_1\\&#xA;\dot{x}_3&amp;amp;=\alpha (u-x_2)-\beta x_3&#xA;\end{align}&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All I can figure out is that it is maybe a mass-spring-damper system, plus a feedback control, but I am not quite sure about the terms $x_3$ and $\dot{x}_3$. What do these two terms mean?&lt;/p&gt;&#xA;" OwnerUserId="9157" LastEditorUserId="9157" LastEditDate="2015-02-24T01:02:37.837" LastActivityDate="2015-02-24T10:11:50.187" Title="What dynamic system could these equations represent?" Tags="&lt;control&gt;&lt;dynamics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6658" PostTypeId="2" ParentId="6657" CreationDate="2015-02-23T11:28:36.157" Score="2" Body="&lt;p&gt;You're right, it's a second order plant representing the mass-spring-damper system $P\left(s\right)=1/\left(s^2-bs -k\right)$ (stiffness $k$ and damping $b$ should be thus negative) under the closed-loop control action of the compensator $C\left(s\right)$, whose transfer function is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$&#xA;C\left(s\right)=\frac{\alpha}{s+\beta}.&#xA;$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The negative feedback is closed over the position of the mass, while the set-point is given by $u$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We can easily derive these results by applying the &lt;em&gt;Laplace transform&lt;/em&gt; to the system of equations and then substituting $x_1$:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{align}&#xA;s^2x_2&amp;amp;=bsx_2+kx_2+x_3\\&#xA;sx_3&amp;amp;=\alpha (u-x_2)-\beta x_3&#xA;\end{align},&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;from which we obtain the following transfer functions:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{align}&#xA;P\left(s\right)&amp;amp;=\frac{x_2\left(s\right)}{x_3\left(s\right)}=\frac{1}{s^2-bs-k}\\&#xA;C\left(s\right)&amp;amp;=\frac{x_3\left(s\right)}{u\left(s\right)-x_2\left(s\right)}=\frac{\alpha}{s+\beta}&#xA;\end{align},&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;corresponding to the closed-loop system here below:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/CfxJU.jpg&quot; alt=&quot;closed-loop system&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2015-02-24T10:11:50.187" LastActivityDate="2015-02-24T10:11:50.187" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6659" PostTypeId="1" AcceptedAnswerId="7842" CreationDate="2015-02-23T17:35:53.097" Score="4" ViewCount="809" Body="&lt;p&gt;I was watching Sebastian Thrun's video course on AI for robotics (freely available on udacity.com).  In his final chapter on &lt;a href=&quot;http://youtu.be/nLEbJZFm5-E&quot; rel=&quot;nofollow&quot;&gt;GraphSLAM&lt;/a&gt;, he illustrates how to setup the system of equations for the mean path locations $x_i$ and landmark locations $L_j$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://youtu.be/V41eTlGU0gw&quot; rel=&quot;nofollow&quot;&gt;To setup the matrix system&lt;/a&gt;, he imposes each robot motion and landmark measurement constraint twice.  For example, if a robot motion command is to move from x1 by 5 units to the right (reaching x2), i understand this constraint as&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$-x_2+x_1= -5$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, he also imposes the negative of this equation &#xA;$$x_2-x_1=5$$&#xA;as a constraint and superimposes it onto a different equation and i'm not sure why.  In his video course, he briefly mentions that the matrix we're assembling is known as the &lt;a href=&quot;http://youtu.be/U8iFMhtJyek&quot; rel=&quot;nofollow&quot;&gt;&quot;information matrix&quot;&lt;/a&gt;, but i have no why the information matrix is assembled in this specific way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, I tried to read his book Probabilistic Robotics, and all i can gather is that these equations come from obtaining the minimizer of the negative log posterior probability incorporating the motion commands, measurements, and map correspondences, which results in a quadratic function of the unknown variables $L_j$ and $x_i$.  Since it is quadratic (and the motion / measurement models are also linear), the minimum is obviously obtained by solving a linear system of equations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But why are each of the constraints imposed twice, with once as a positive quantity and again as the negative of the same equation?  Its not immediately obvious to me from the form of the negative log posterior probability (i.e. the quadratic function) that the constraints must be imposed twice.  Why is the &quot;information matrix assembled this way?  Does it also hold true when the motion and measurement models are nonlinear?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help would be greatly appreciated.&lt;/p&gt;&#xA;" OwnerUserId="2295" LastEditorUserId="2295" LastEditDate="2015-02-28T00:06:33.317" LastActivityDate="2018-04-09T04:32:14.103" Title="GraphSLAM: why are constraints imposed twice in the information matrix?" Tags="&lt;slam&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6660" PostTypeId="2" ParentId="6651" CreationDate="2015-02-23T19:29:21.977" Score="2" Body="&lt;p&gt;According to Harvard University who are actively working on a &lt;a href=&quot;http://robobees.seas.harvard.edu/&quot; rel=&quot;nofollow&quot;&gt;Robobees&lt;/a&gt; project which has various goals in mind, one of which is autonomous pollination, they see autonomous pollination as being a couple of decades away yet. They admit that the better solution is to remedy the natural problem of Colony Collapse Disorder. I quote from their website:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;One potential application of micro-robotic &quot;insects&quot; might someday be to artificially pollinate crops. However, we do not see robotic pollination as a wise or viable long-term solution to Colony Collapse Disorder. If robots were used for pollination—and we are at least 20 years away from that possibility— it would only be as a stop-gap measure while a solution to CCD is implemented to restore natural pollinators.&lt;/em&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://robobees.seas.harvard.edu/robobees-project-and-colony-collapse-disorder-ccd&quot; rel=&quot;nofollow&quot;&gt;More about that here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="1075" LastEditorUserId="1075" LastEditDate="2015-02-23T19:35:47.487" LastActivityDate="2015-02-23T19:35:47.487" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6661" PostTypeId="1" CreationDate="2015-02-23T20:49:57.767" Score="2" ViewCount="171" Body="&lt;p&gt;I have been using the FreeIMU library successfully but now I want to add an external magnetometer that I can mount away from my motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've figured out how to modify the FreeIMU library to use an external magnetometer and I am getting data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I can't figure out is what I need to change now that my magnetometer orientation has changed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the free IMU it is mounted like this &#xA;&lt;img src=&quot;https://i.stack.imgur.com/iuU4m.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The external compass is mounted like this - upside down - rotated 180° around x&#xA;&lt;img src=&quot;https://i.stack.imgur.com/k2UNg.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am changing the value inside the &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;void HMC58X3::getRaw(int16_t *x,int16_t *y,int16_t *z)&#xA;{&#xA;    *x = cache_x;&#xA;    *y = cache_y;&#xA;    *z = cache_z;&#xA;}&#xA;&lt;/code&gt;&#xA;function as all the other code calls this to get the magnetometer data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So far I have tried:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Changing the sign for the y and z values after I have got them from the magnetometer.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Changing the sign for the y value only&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Changing the sign for the z value only&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Added 180 to both the y and z values&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Subtracting 180 from both the y and z values&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Subtracting 180 from y and adding 180 to Z&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Adding 180 to y and subtracting 180 from z&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Changing nothing&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The calibration GUI gives always gives me strange results, and doing the changes above just rotated/mirrored the magnetometer red and green graphs. I am unable to get rid of the key hole shape.&#xA;&lt;img src=&quot;https://i.stack.imgur.com/VbFrZ.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The red is XY. The green YZ. The blue is ZX. Does the fact that ZX works mean that my issue is with the Y value?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is how it looks using the on board magnetometer.&#xA;&lt;img src=&quot;https://i.stack.imgur.com/IOYoQ.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What should I try next?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&#xA;Joe&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried rotating the external magnetometer so it is in the same orientation as the FreeIMU magnetometer and I still get the same result so I don't think its the difference in orientation that is causing the problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So then I thought maybe its because the FreeIMU is mounted central to the rotation axis and the external magnetometer is mounted about 20cm above. I tested this by rotating only the external magnetometer around itself and I still got the same result. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is all seems strange, do you think its possible that the external magnetometer I have brought is faulty? Any way to confirm it is working properly on its own?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Managed to get circles plotting by changing the gain from 0 to 1. It seem my new magnetometer was being saturated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I just need to work out how to change my values around so the orientation is correct.&lt;/p&gt;&#xA;" OwnerUserId="4212" LastEditorUserId="4212" LastEditDate="2015-02-24T10:33:51.407" LastActivityDate="2015-04-25T11:32:22.957" Title="FreeIMU External Magnetometer" Tags="&lt;quadcopter&gt;&lt;imu&gt;&lt;calibration&gt;&lt;magnetometer&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6662" PostTypeId="1" CreationDate="2015-02-23T22:02:06.780" Score="7" ViewCount="8676" Body="&lt;p&gt;I'm a software researcher, who in my spare time mentors a robotics team, helping on the software side of things. For years, I keep coming back to the same question: How to determine the robots position, and heading during our competitions? We have tried a number of things with varying degrees of success/failure. Encoders on the drive wheels, accelerometers, gyroscopes, etc. I recently bought an IMU with a 3 axis accelerometer, 3 axis gyro, and 3 axis magnetometer, all preprocessed by an Arduino, and outputting the value to a serial port. I thought surely there must be a way to take all these measurements and get a composite view of position and heading. We are using Mecanum wheels on this particular robot, so wheel encoders are not particularly useful. I've looked around and there's a lot of talk about orientation using quaternion with sensor fusion using similar boards, but it very unclear to me how to take the quaternion and the estimation and come up with x,y distance from the starting position? Now, my time window for these measurements is small, ~15 seconds, but I need it to be pretty accurate within that window.  I'm about ready to abandon using the IMU, and try something else. One idea is to use a USB ball mouse to try and track robot motion but I'm certain that the mouse is going to get banged around way too much leading to noise and invalid results. As a side note: The robot is about 2ft x 3ft base weighing in at 120 lbs.  Any thoughts or suggestions appreciated.&lt;/p&gt;&#xA;" OwnerUserId="9161" LastEditorUserId="19515" LastEditDate="2020-07-25T00:36:47.253" LastActivityDate="2020-07-25T00:36:47.253" Title="How to track robot position?" Tags="&lt;imu&gt;&lt;sensor-fusion&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="6664" PostTypeId="2" ParentId="6639" CreationDate="2015-02-23T22:33:37.233" Score="2" Body="&lt;p&gt;Unless I misunderstood what you're trying to show on this plot, you want to essentially plot your estimate (or, in this case, the estimation error) with its 3 standard deviation bounds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you have shown appears to be the bounds computed simply as 0 +/- 3sigma, but what you really want to plot is error +/- 3*sigma.  That is to say, the uncertainty of the estimate is centered around the estimate, not zero.  I found a random image showing how I would plot the estimate and its uncertainty bounds:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_7YSZm5NIAmQ/S_wNkdp6ClI/AAAAAAAAAOU/hEYy4fWR9Rg/s1600/rw_plot.jpg&quot; rel=&quot;nofollow&quot;&gt;http://2.bp.blogspot.com/_7YSZm5NIAmQ/S_wNkdp6ClI/AAAAAAAAAOU/hEYy4fWR9Rg/s1600/rw_plot.jpg&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this makes sense.&lt;/p&gt;&#xA;" OwnerUserId="9162" LastActivityDate="2015-02-23T22:33:37.233" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6665" PostTypeId="2" ParentId="6662" CreationDate="2015-02-23T22:46:03.090" Score="4" Body="&lt;p&gt;I am not allowed to comment, so I have to add a reply. By position, do you mean the location in space (so X, Y coordinates), or orientation (tilt, etc)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If position, you can use the accelerometer values and integrate acceleration to get distance traveled, though this is fairly inaccurate. We have tried to do this for a quadcopter, and the drift due to error is quite large. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can use an accelerometer with a gyroscope together, and a Kalman filter to get a better idea for how far the robot has moved in each direction. &lt;a href=&quot;https://electronics.stackexchange.com/questions/4983/how-to-determine-position-from-gyroscope-and-accelerometer-input&quot;&gt;Here is a previous discussion on this topic.&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The tilt you can calculate directly from accelerometer values (but filter them, even an FIR filter would work ok). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Heading you can get from the gyroscope and/or the magnetometer. The gyroscope detects rotation, so make sure it is somewhere near the center of your robot (or whereever the axis of rotation is). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope that helps. I have to go teach, but I'll come back in an hour and add some more info.&lt;/p&gt;&#xA;" OwnerUserId="9163" LastEditorUserId="-1" LastEditDate="2017-04-13T12:33:08.317" LastActivityDate="2015-02-23T22:46:03.090" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6666" PostTypeId="2" ParentId="6639" CreationDate="2015-02-24T04:12:00.567" Score="3" Body="&lt;p&gt;What you are referring to is plotting the estimate with the uncertainty bounds - in particular the $3\sigma$ ($\pm3$ standard deviations) bounds which corresponds to 99.7% probability that the true state is within this region. The uncertainty bounds can be extracted from the state covariance matrix. &#xA;I think what you are plotting is the residuals of some observation VS expected observation? In this case I think it is also applicable to use the covariance matrix of the residual observation error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For how to extract the standard deviation from the covariance matrix see: &#xA;&lt;a href=&quot;https://stats.stackexchange.com/questions/50830/can-i-convert-a-covariance-matrix-into-uncertainties-for-variables&quot;&gt;https://stats.stackexchange.com/questions/50830/can-i-convert-a-covariance-matrix-into-uncertainties-for-variables&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8859" LastEditorUserId="-1" LastEditDate="2017-04-13T12:44:19.087" LastActivityDate="2015-10-28T11:57:03.453" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6667" PostTypeId="1" CreationDate="2015-02-24T10:14:28.850" Score="1" ViewCount="50" Body="&lt;p&gt;I'm planning to build an omnidirectional platform that will support about 180kg robotic arm. The platform will be equipped in meccanum wheels. I would like to have some kind of suspension to avoid wheels loosing contact with the floor on small bumps (let's say 2cm). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first suspension type I thought about was rocker bogie type, but I'm afraid, that changes of arm center of mass during its movement will introduce too much stress on rocker bogie mechanism. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What other choices would you recommend? Or maybe rocker bogie will be fine after all?&lt;/p&gt;&#xA;" OwnerUserId="7360" LastActivityDate="2015-02-24T10:14:28.850" Title="Heavy omnidirectional platform suspension" Tags="&lt;mobile-robot&gt;&lt;wheeled-robot&gt;&lt;design&gt;&lt;mechanism&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6668" PostTypeId="2" ParentId="6661" CreationDate="2015-02-24T11:20:36.653" Score="2" Body="&lt;p&gt;OK so I managed to solve this by doing a couple of things.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Connect external magnetometer to the same I2C bus as the FreeIMU.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The FreeIMU is 5V and the external magnetometer is 3.3V so I had to use a level shifter to place both devices on the I2C bus.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Change this line &quot;accgyro-&gt;setI2CBypassEnabled(1);&quot; to &quot;accgyro-&gt;setI2CBypassEnabled(0);&quot; to enable the external magnetometer&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Change this line &quot;magn-&gt;calibrate(0, 8);&quot; to magn-&gt;calibrate(1, 8);&quot; to increase the gain and remove saturation (this is what caused the strange &quot;Keyhole&quot; shape on the graph.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Calibrate the sensors.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Change this line&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&quot;AHRSupdate(val[3] * M_PI/180.0, val[4] * M_PI/180.0, val[5] * M_PI/180.0, val[0], val[1], val[2], val[6], val[7], val[8], magn_valid);&quot; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;to &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;AHRSupdate(val[3] * M_PI/180.0, val[4] * M_PI/180.0, val[5] * M_PI/180.0, val[0], val[1], val[2], val[6], -val[7], -val[8], magn_valid);&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;to account for the change in orientation.&lt;/p&gt;&#xA;" OwnerUserId="4212" LastActivityDate="2015-02-24T11:20:36.653" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6669" PostTypeId="2" ParentId="6648" CreationDate="2015-02-24T17:06:59.600" Score="0" Body="&lt;p&gt;Because you want your prototype to be as small as possible, it would be important to pick a &quot;job&quot; for the farmer that is well suited to a small platform. Tillage is going to require lots of horsepower and is, therefore, perhaps not the best match. There is considerable interest currently in weeds, for example. Perhaps give your prototype some boundary within which to work and have it search for weeds? Generally speaking, we find that the perfect rectangular field is less common than might be expected, so I'd keep that in mind as you develop a coverage algorithm.&lt;/p&gt;&#xA;" OwnerUserId="9167" LastActivityDate="2015-02-24T17:06:59.600" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6670" PostTypeId="2" ParentId="2832" CreationDate="2015-02-24T18:33:43.273" Score="0" Body="&lt;p&gt;(I still can't comment, so yet another reply from me.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Servos will typically operate between 4.8V and 6V. Do not directly connect the output of the LiPo battery pack to the power line of your servos (because that is 8.4V when charged). Despite what Spiked3 says, your servo is not 4.8V - the ratings on the &quot;specs&quot; website show torque and speed at 4.8V, but &lt;a href=&quot;http://www.electronicoscaldas.com/datasheet/MG995_Tower-Pro.pdf&quot; rel=&quot;nofollow&quot;&gt;another website&lt;/a&gt; will show the torque/speed ratings taken at 6V. &lt;a href=&quot;http://www.electronicoscaldas.com/datasheet/MG995_Tower-Pro.pdf&quot; rel=&quot;nofollow&quot;&gt;In fact, your servos appear to be rated for 4.8-7.2V&lt;/a&gt;. &lt;strong&gt;I would run at 5-6V.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should get a voltage regulator circuit (or build your own). &lt;a href=&quot;http://www.reuk.co.uk/LM317-High-Current-Voltage-Regulator.htm&quot; rel=&quot;nofollow&quot;&gt;You can make a fairly cheap one using LM317T and a Darlington pair BJT&lt;/a&gt; - this can carry up to about 11A of current. It is very to breadboard if you wanted to prototype it. If you decide to buy one, pay attention to its heat dissipation capabilities.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your servos are fairly beefy (similar to ones in my hexapod), so you should in theory budget at least 1A of stall current for each one. This means that if the servos for some reason &#xA;cannot move or experience so much resistance that they cannot move), you must supply enough current for them to still operate. You should really avoid this situation as they'll start to heat up and will probably burn out, but it's something to consider.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have to power 18 high-torque metal gear servos, so what I ended up doing is splitting this into two power banks - each LiPo then had to power 9 at a time. With that I would need about 9A at stall (though the info I found online about my servos says less). The LM317T circuit + Darlington provides 11A, so I'm good on that front. I ended up adding a fuse on the board just in case, and heatsinks on the transistors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for the battery life - you have 2200mAh batteries (2.2Ah), which means that if your servos drew 2.2A, the batteries would last an hour. With 12 servos, and assuming you split them evenly between the battery packs (6/battery pack) I think you'll get that no problem, but it obviously depends on the situation. The servos draw most current while moving and of course if they are struggling to hold the load.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Last little suggestion: make sure you use thick wire (not normal hook-up wire) in your voltage regulator circuit since you are potentially carrying 10A, and that's a lot.&lt;/p&gt;&#xA;" OwnerUserId="9163" LastActivityDate="2015-02-24T18:33:43.273" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6671" PostTypeId="2" ParentId="6662" CreationDate="2015-02-24T21:24:09.057" Score="5" Body="&lt;p&gt;How to estimate a robot's position depends on how &lt;em&gt;well&lt;/em&gt; you'd like to estimate it. If you just need a rough guess, try odometry, it works OK. For better results, you have to incorporate more sensors. That's an incremental process that involves a lot of sensor fusion, and suddenly, you've built an Extended Kalman Filter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The best way, in my opinion, is to use each sensor to form it's own estimate. Then, take a weighted average of the resulting estimates. The weights correspond to the certainty associated with each estimate. This, in essence is the Kalman Filter. What is missing is how to estimate the certainties. This is the hard part of the KF. Try some ad hoc values as a start. You'd be surprised how well this can work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is addressed as a first-principals question in any major robotics textbook and even here, on this site. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;On this site, we have addressed many questions related to this problem.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://robotics.stackexchange.com/a/386/163&quot;&gt;how to fuse linear and angular data in a KF&lt;/a&gt;. This is probably a good starting point as it also covers the KF / EKF&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/155/how-to-choose-a-good-imu-for-a-wheeled-robot?rq=1&quot;&gt;how to choose a good imu for a wheeled robot&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/2708/multiple-position-estimates-fusion?rq=1&quot;&gt;how to fuse multiple position estimates&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/277/why-do-i-need-a-kalman-filter/279#279&quot;&gt;Why do I need a kalman filter&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/106/what-is-a-suitable-model-for-two-wheeled-robots/134#134&quot;&gt;what is a suitable model for two wheeled robots&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;and many more I've missed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But honestly, these are heavy-handed approaches. You &lt;em&gt;must&lt;/em&gt; understand the basics (estimating position from odometry, for example) to understand the rest. &lt;/p&gt;&#xA;" OwnerUserId="163" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2015-02-27T17:55:14.077" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6672" PostTypeId="1" CreationDate="2015-02-24T21:39:28.613" Score="2" ViewCount="115" Body="&lt;p&gt;I've a 2D sensor which provides a range $r$ and a bearing $\phi$ to a landmark. In my 2D EKF-SLAM simulation, the sensor has the following specifications &#xA;$$&#xA;\sigma_{r} = 0.01 \text{m} \ \ ,\sigma_{\phi} = 0.5 \ \text{deg}&#xA;$$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The location of the landmark in x-axis is 30. EKF imposes the Gaussian noise, therefore the location of the landmark is represented via two quantities namely the mean $\mu_{x}$ and the variance $\sigma_{x}$. In the following graph &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/3ChZN.png&quot; alt=&quot;Graph&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The green is the mean $\mu_{x}$ which is very close to the true location (i.e. 30). The black is the measurements and red is $\mu_{x} \pm 3 \sigma_{x}$. I don't understand why the uncertainty is big while I'm using rather accurate sensor. The process noise for the robot's pose is $\sigma_{v} = 0.001$ which is small noise. I'm using C++. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Edit: for people who ask about the measurements, this is my code &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;r = \sqrt{ (m_{j,y} - y)^{2} + (m_{j,x} - x)^{2}} + \mathcal{N}(0, \sigma_{r}^{2}) \\&#xA;\phi = \text{atan2} \left( \frac{m_{j,y} - y}{m_{j,x} - x} \right) + \mathcal{N}(0, \sigma_{\phi}^{2})&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;std::vector&amp;lt;double&amp;gt; Robot::observe( const std::vector&amp;lt;Beacon&amp;gt;&amp;amp; map )&#xA;{&#xA;    std::vector&amp;lt;double&amp;gt; Zobs;&#xA;&#xA;    for (unsigned int i(0); i &amp;lt; map.size(); ++i)&#xA;    {&#xA;        double range, bearing;&#xA;&#xA;        range = sqrt( pow(map[i].getX() - x,2) + &#xA;                      pow(map[i].getY() - y,2)   );&#xA;&#xA;        // add noise to range&#xA;        range += sigma_r*Normalized_Gaussain_Noise_Generator();&#xA;&#xA;        bearing = atan2( map[i].getY() - y, map[i].getX() - x) - a;&#xA;&#xA;        // add noise to bearing&#xA;        bearing += sigma_p*Normalized_Gaussain_Noise_Generator();&#xA;&#xA;        bearing = this-&amp;gt;wrapAngle(bearing);&#xA;&#xA;&#xA;        if ( range &amp;lt; 1000 ){&#xA;          // store measurements (range, angle) for each landmark. &#xA;          Zobs.push_back(range);&#xA;          Zobs.push_back(bearing);&#xA;          //std::cout &amp;lt;&amp;lt; range &amp;lt;&amp;lt; &quot; &quot; &amp;lt;&amp;lt; bearing &amp;lt;&amp;lt; std::endl;&#xA;        }&#xA;    }&#xA;&#xA;&#xA;    return Zobs;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where &lt;code&gt;Normalized_Gaussain_Noise_Generator()&lt;/code&gt; is ( i.e. $\mathcal{N}(0, 1) )$&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;double Robot::Normalized_Gaussain_Noise_Generator()&#xA;{&#xA;    double noise;&#xA;    std::normal_distribution&amp;lt;double&amp;gt; distribution;&#xA;    noise = distribution(generator);&#xA;&#xA;    return noise;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;For the measurements (i.e. the black color), I'm using the inverse measurement function  given the estimate of the robot's pose and the true measurement in polar coordinates to get the location of a landmark. The actual approach is as follows &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\bar{\mu}_{j,x} = \bar{\mu}_{x} + r \cos(\phi + \bar{\mu}_{\theta}) \\&#xA;\bar{\mu}_{j,y} = \bar{\mu}_{y} + r \sin(\phi + \bar{\mu}_{\theta})&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is how it is stated in the Probabilistic Robotics book. This means that the measurements in the above graph are indeed the predicted measurements not the true ones. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now under same conditions, the true measurements can be obtained as follows&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\text{m}_{j,x} = x + r \cos(\phi + \theta) \\&#xA;\text{m}_{j,y} = y + r \sin(\phi + \theta)&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The result is in the graph below, which means there is no correlations between the true measurements and the robot's estimate. This leads me to the same question - why the uncertainty behaves like that? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/tpPD3.png&quot; alt=&quot;Graph&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="9176" LastEditDate="2015-03-02T12:18:14.650" LastActivityDate="2015-03-02T12:18:14.650" Title="The uncertainty is big while the sensor is rather accurate at measuring a landmark in EKF-SLAM" Tags="&lt;mobile-robot&gt;&lt;slam&gt;&lt;ekf&gt;&lt;noise&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6673" PostTypeId="1" CreationDate="2015-02-24T22:52:42.627" Score="1" ViewCount="402" Body="&lt;p&gt;Most academic papers characterise the rate of rotation along the x axis as φ&quot;=(1/Jx)τφ. As far as I cant tell, this characterises the rate and not the actual angle φ itself and yet the PID controllers academics use to control this takes φsetpoint-φmeasured as its error signal. Should the error signal not be φ&quot;setpoint-φ&quot;measured (using gyro values) instead. Why are they using the euler angle instead of its second derivative to control the rate?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it possible to stabilise a quadcopter using euler angles only?&lt;/p&gt;&#xA;" OwnerUserId="8838" LastActivityDate="2015-04-05T15:44:50.387" Title="Do you have to have a rate controller for a Quadcopter?" Tags="&lt;control&gt;&lt;quadcopter&gt;&lt;pid&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6674" PostTypeId="1" CreationDate="2015-02-25T00:23:05.390" Score="0" ViewCount="3569" Body="&lt;p&gt;I salvaged some parts off my dead Roomba 650, and I'm trying to use the drive motor assembly . I got the pinout of the connector but I don't know what voltage / PWM / other specifications are there for this motor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've attached the picture of the drive motor assembly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help would be appreciated!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you,&#xA;Pratik&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://plus.google.com/photos/+PratikPanchal2011/albums/6119164925515534577/6119164929351874418?authkey=COOW4Njkmr7xQg&amp;amp;pid=6119164929351874418&amp;amp;oid=106454827636977474727&quot; alt=&quot;Drive motor unit&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: The Image is here: &lt;a href=&quot;https://plus.google.com/photos/+PratikPanchal2011/albums/6119164925515534577/6119164929351874418?authkey=COOW4Njkmr7xQg&amp;amp;pid=6119164929351874418&amp;amp;oid=106454827636977474727&quot; rel=&quot;nofollow&quot;&gt;Drive Motor Module&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9168" LastEditorUserId="110" LastEditDate="2015-02-26T02:53:51.193" LastActivityDate="2015-04-26T20:39:47.863" Title="Drive motor voltage / other specifications of Roomba 650" Tags="&lt;motor&gt;&lt;pwm&gt;&lt;irobot-create&gt;&lt;h-bridge&gt;&lt;roomba&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6675" PostTypeId="2" ParentId="6672" CreationDate="2015-02-25T09:21:34.893" Score="1" Body="&lt;p&gt;You don't describe your setup in detail, and some of the units are missing, but my guess is that the $\sigma_\phi$ is mainly responsible for the initial error you are seeing. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\sin( 0.5 ) \times 30 \approx 0.261$&lt;/p&gt;&#xA;" OwnerUserId="127" LastActivityDate="2015-02-25T09:21:34.893" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6677" PostTypeId="2" ParentId="6672" CreationDate="2015-02-25T15:40:35.537" Score="1" Body="&lt;p&gt;Something is wrong with your code. Measurements with Gaussian noise should be within one standard deviation of truth 68% of the time. Somehow, your measurements seem to be correlated with the accuracy of your estimate. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Go through the code or post some here.&lt;/p&gt;&#xA;" OwnerUserId="8842" LastActivityDate="2015-02-25T15:40:35.537" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="6679" PostTypeId="2" ParentId="6673" CreationDate="2015-02-25T18:50:19.573" Score="1" Body="&lt;p&gt;Second derivatives are rarely used to control rates.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is not possible to control a quadrotor without using rates in control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Rates from the gyro are generally not the same as euler angle rates. This is true when roll and pitch are zero, so this may be an okay assumption to make in your case but you should know it is an assumption.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did not say you only need rates. I recommend reading control system design book. Should convert the rates from the gyro into euler angle rates. Use that in the derivative term in you PID controller.&lt;/p&gt;&#xA;" OwnerUserId="8842" LastEditorUserId="8842" LastEditDate="2015-03-06T15:17:33.133" LastActivityDate="2015-03-06T15:17:33.133" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6680" PostTypeId="1" AcceptedAnswerId="6681" CreationDate="2015-02-25T18:52:18.497" Score="-3" ViewCount="85" Body="&lt;p&gt;Can anyone help me, because I am doing a project on robotical surgeries and I would like someone to help me and advise me. I wonder if anyone could give me some data on tests he or she has run in a surgical robot... Thank you for your attention!&#xA;Anything else will be much appreciated!&lt;/p&gt;&#xA;" OwnerUserId="9175" LastEditorUserId="9175" LastEditDate="2015-02-28T12:19:45.950" LastActivityDate="2015-02-28T12:19:45.950" Title="I am doing a project on robotic surgeries! Can anyone help me and give me some details related to this topic?" Tags="&lt;sensors&gt;&lt;robotic-arm&gt;&lt;automatic&gt;" AnswerCount="1" CommentCount="0" ClosedDate="2015-03-03T16:16:54.543" ContentLicense="CC BY-SA 3.0" />
  <row Id="6681" PostTypeId="2" ParentId="6680" CreationDate="2015-02-25T19:41:45.923" Score="1" Body="&lt;p&gt;There is a significant amount of information on this site: (&lt;a href=&quot;http://allaboutroboticsurgery.com/surgicalrobots.html&quot; rel=&quot;nofollow&quot;&gt;http://allaboutroboticsurgery.com/surgicalrobots.html&lt;/a&gt;)&#xA;&lt;BR&gt; That should give you the history and details about the past and current devices. &#xA;Which should hopefully allow you to fine tune your questions to get more detailed specific answers.  Good Luck. -Frank&lt;/p&gt;&#xA;" OwnerUserId="9091" LastActivityDate="2015-02-25T19:41:45.923" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6682" PostTypeId="2" ParentId="6672" CreationDate="2015-02-25T22:22:01.380" Score="1" Body="&lt;p&gt;You may have covariance collapse. You may have such small covariance in your target estimate that the measurements are having almost no effect on the target's estimate. Try artificially inflating it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It would make sense given that it &quot;freezes&quot; when your covariance in your target shrinks. But still, I'm hesitant to say this is &lt;em&gt;the&lt;/em&gt; issue, since the red lines imply decent target estimate uncertainty remains.&lt;/p&gt;&#xA;" OwnerUserId="163" LastActivityDate="2015-02-25T22:22:01.380" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6683" PostTypeId="1" CreationDate="2015-02-26T10:08:51.050" Score="7" ViewCount="16265" Body="&lt;p&gt;What are the major differences between motion planning and trajectory generation in robotics? Can the terms be used interchangeably?&lt;/p&gt;&#xA;" OwnerUserId="1531" LastActivityDate="2017-05-24T04:06:17.093" Title="What is the difference between motion planning and trajectory generation?" Tags="&lt;motion-planning&gt;" AnswerCount="8" CommentCount="0" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6685" PostTypeId="2" ParentId="6683" CreationDate="2015-02-26T19:59:42.713" Score="-1" Body="&lt;p&gt;I would bet that trajectory planning takes the kinematics/dynamics of the vehicle into account. I'm not very confident about that though. &lt;/p&gt;&#xA;" OwnerUserId="8842" LastEditorUserId="8842" LastEditDate="2015-02-26T21:28:00.390" LastActivityDate="2015-02-26T21:28:00.390" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6686" PostTypeId="1" AcceptedAnswerId="7442" CreationDate="2015-02-26T22:05:55.407" Score="3" ViewCount="484" Body="&lt;p&gt;I have the create 2 and have it hooked up to an arduino. Almost all the commands work fine except when retrieving sensor information. If i send a request for packet 18 I get back values that while consistent don't match up, unless I am missing something. So if I press the clean button I get 127 or 11111110 and if i then press spot I get something like 11111010. I might be messing up my endianness but regardless the data isnt formatted how I expected it to be according to the spec sheet. I have 3 create 2s and they all do the same thing. Any ideas? I am using a 2n7000 along with the tutorial from the site but i dont think that has anything to do with the formatting of the byte.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;this is the library I am using: &lt;a href=&quot;https://github.com/DomAmato/Create2&quot; rel=&quot;nofollow&quot;&gt;https://github.com/DomAmato/Create2&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sorry to take so long to get back on this, anyways the data we get is always formatted this way. It is not a baud rate issue since it understands the commands properly.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;        day     hour    minute  schedule    clock   dock    spot    clean&#xA;day     3       x       x       x           x       x       x       x&#xA;hour    6       7       x       x           x       x       x       x&#xA;minute  13      14      15      x           x       x       x       x&#xA;schedule    x   x       x       x           x       x       x       x&#xA;clock   x       x       x       x           x       x       x       x&#xA;dock    27      29      30      x           x       31      x       x&#xA;spot    55      59      61      x           x       62      63      x&#xA;clean   111     119     123     x           x       125     126     127&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Note that the schedule and clock buttons return nothing&lt;/p&gt;&#xA;" OwnerUserId="9177" LastEditorUserId="9177" LastEditDate="2015-03-25T16:16:43.117" LastActivityDate="2015-06-06T18:38:19.847" Title="iRobot Create 2 and Open Interface 2 Spec not syncing up with incoming data" Tags="&lt;arduino&gt;&lt;irobot-create&gt;" AnswerCount="3" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="6687" PostTypeId="2" ParentId="6674" CreationDate="2015-02-27T01:18:00.813" Score="1" Body="&lt;p&gt;The motors get a PWM'd battery voltage which is around 18V.  I assume it is safe to run at that voltage at 100% duty cycle.  I imagine you could run a higher voltage but you run the risk of burning out your brushes.  Lower voltages work fine if your bot is small.  I have successfully run a small Roomba wheel module robot off of 8 AA batteries (about 12V).&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-02-27T01:18:00.813" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6689" PostTypeId="2" ParentId="461" CreationDate="2015-02-27T08:02:03.223" Score="0" Body="&lt;p&gt;I cannot really speak for the zeros of the transfer function, but the &lt;strong&gt;poles of the transfer function&lt;/strong&gt; definitely have a meaningful interpretation.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To understand this interpretation, you have to remember that the system that we want to control is really one of two things: either a &lt;strong&gt;differential&lt;/strong&gt; equation or a &lt;strong&gt;difference&lt;/strong&gt; equation.  In either case, the common approach to solving these equations is to determine their eigenvalues.  More importantly, when the system is linear, the eigenvalues of the differential/difference equation correspond exactly to the poles of the transfer function.  So, by obtaining the poles, you're really obtaining the eigenvalues of the original equation.  It is the eigenvalues of the original equation (in my opinion) that really determine the stability of the system; it just an amazing coincidence that the poles of a linear system are exactly the eigenvalues of the original equation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To illustrate this, consider the two cases separately:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Case 1:  Differential Equation&lt;/strong&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When all eigenvalues of a differential equation have a negative real part, then all trajectories (i.e. all solutions) approach the equilibrium solution at the origin (x=0).  This is because solutions of a &lt;strong&gt;differential&lt;/strong&gt; equation are typically of the form of an exponential &lt;strong&gt;function&lt;/strong&gt; like $x(t)=Ce^{\lambda t}$, where $\lambda$ is the eigenvalue.  Thus, the &lt;strong&gt;function&lt;/strong&gt; $x(t)\rightarrow 0$ as $t\rightarrow \infty$ only if $Re(\lambda)&amp;lt;0$.  Otherwise if $Re(\lambda)\ge 0$, the quantity $e^{\lambda t}$ would very likely blow up to infinity in magnitude or simply not converge to zero.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Case 2:  Difference Equation&lt;/strong&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When all eigenvalues of a difference equation are less than 1 in magnitude, then all trajectories (i.e. all solutions) approach the equilibrium solution at the origin (x=0).  This is because solutions of a &lt;strong&gt;difference&lt;/strong&gt; equation are typically of the form of an exponential &lt;strong&gt;sequence&lt;/strong&gt; like $x_t=C\lambda^t$, where $\lambda$ is the eigenvalue.  Thus, the &lt;strong&gt;sequence&lt;/strong&gt; $x_t\rightarrow 0$ as $t\rightarrow\infty$ only if $|\lambda|&amp;lt;1$.  Otherwise if $|\lambda|\ge 1$, the quantity $\lambda^t$ would blow up to infinity in magnitude or simply not converge to zero.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In either case, the poles of the system function and the eigenvalues of the (homogeneous) differential/difference equation are exactly the same thing!  In my opinion, it makes more sense to me to interpret poles as eigenvalues because the eigenvalues explain the stability condition in a more natural fashion.&lt;/p&gt;&#xA;" OwnerUserId="2295" LastEditorUserId="2295" LastEditDate="2015-02-27T08:09:07.120" LastActivityDate="2015-02-27T08:09:07.120" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6691" PostTypeId="2" ParentId="6686" CreationDate="2015-02-27T14:59:40.640" Score="1" Body="&lt;p&gt;If that example code you posted is what you are running, then I don't think you are using the right baud rate.  The Create2 uses 115200 baud by default.  But the Arduino cannot reliably reproduce this baud, so it is recommended to open the port at 115200, then change the baud down to 19200 for the rest of the comms.  I don't believe this change survives across power cycles.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-02-27T14:59:40.640" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6692" PostTypeId="2" ParentId="6686" CreationDate="2015-02-27T15:44:18.493" Score="1" Body="&lt;p&gt;Without seeing your code and your hardware setup, I'm not sure how much help I can be, but I'll try! The &lt;a href=&quot;http://www.irobot.com/~/media/MainSite/PDFs/About/STEM/Create/LightBot.pdf&quot; rel=&quot;nofollow&quot;&gt;light painting project&lt;/a&gt; on the iRobot site has a &lt;a href=&quot;http://www.irobot.com/~/media/MainSite/Files/About/STEM/Create/NeoPixel_LightBot_26Nov14.zip&quot; rel=&quot;nofollow&quot;&gt;sketch&lt;/a&gt; which monitors the buttons without using a third party library. The function is called waitForButton. I'd encourage you to grab that function in a separate sketch (not forgetting the setup code for the robot in the original sketch) and see if you can get the buttons to work for you. If they work, it's a problem with your code or the third party library. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't have an Arduino to play with right now, but using a USB to Create cable with Python on my laptop, I threw this together for you to test your robots:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#!/usr/bin/env python&#xA;# 27 February 2015&#xA;# Steven Shamlian&#xA;# Released under Poul-Henning Kamp's Beerware license&#xA;&#xA;# A quick and _dirty_ script to test button reads.&#xA;&#xA;import serial, time&#xA;COM_PORT = &quot;COM37&quot; # be sure to change this&#xA;&#xA;ser = serial.Serial(port=COM_PORT, baudrate=115200)&#xA;&#xA;print &quot;Resetting...&quot;&#xA;ser.write('\x07') # put the robot in a known state&#xA;for i in reversed(range(10)):&#xA;    print i,&#xA;    time.sleep(1)&#xA;print&#xA;ser.write('\x80\x83') # put the robot in safe mode&#xA;time.sleep(0.1)&#xA;&#xA;ser.flushInput() # discard everything we've seen so far&#xA;&#xA;print &quot;Press Ctrl+C to quit.&quot;&#xA;&#xA;try:&#xA;    while True:&#xA;        ser.write('\x8e\x12') # request buttons&#xA;        print &quot;Got &quot; + hex(ord(ser.read()))&#xA;        time.sleep(0.25)&#xA;except:&#xA;    pass&#xA;&#xA;ser.close()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="7665" LastEditorUserId="7665" LastEditDate="2015-02-27T16:09:36.693" LastActivityDate="2015-02-27T16:09:36.693" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6693" PostTypeId="2" ParentId="6683" CreationDate="2015-02-27T17:47:49.877" Score="0" Body="&lt;p&gt;Just using the words in the terms. Motion Planning would be the planned motion of a system to achieve a goal, this would have values even for a system at rest. Whereas Trajectory Generation would be the potential trajectories of a system, and when at rest would be zero. I was thinking about a robotic ship mapping the trajectories of itself and a second robotic ship and if a potential collision was indicated, then some motion planning would be required to attempt to avoid the collision. &lt;/p&gt;&#xA;" OwnerUserId="9091" LastActivityDate="2015-02-27T17:47:49.877" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6694" PostTypeId="1" CreationDate="2015-02-27T18:02:01.930" Score="1" ViewCount="2664" Body="&lt;p&gt;The links twist could be obtained, and thus The spatial manipulator Jacobian could be done, but when it comes to the body Jacobian, it is becomes difficult. Moreover, the adjoint transformation relates both Jacobain, but however that is 4*4 while the Jacobian is 6*n; how does it works? as in the picture, he is getting a body jacobian for each link, not one jacobian matrix for the whole robot, I don't know.&#xA;Any help is highly regarded.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/yURZJ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;Like this example&lt;/a&gt; or here for&#xA;&lt;a href=&quot;http://www.cds.caltech.edu/~murray/books/MLS/pdf/mls94-complete.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;full details&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9087" LastEditorUserId="10414" LastEditDate="2021-01-26T12:00:14.397" LastActivityDate="2021-01-26T12:00:14.397" Title="How to find the body jacobain, for each link in a robot manipulator?" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;manipulator&gt;&lt;jacobian&gt;&lt;screw-theory&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6695" PostTypeId="2" ParentId="6683" CreationDate="2015-02-27T19:36:47.603" Score="0" Body="&lt;p&gt;Trajectory generation comes from the robot arm / manipulator community.  Motion planning is essentially the &quot;same&quot; thing in a wider sense used in ground robotics etc.  Both can use kinematics / inverse kinematics, dynamics, fuzzy logic etc. Read papers in both areas and you'll see they are similar algorithms.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What came first and when, good question.  Since researchers were solving identical problems in different domains / applications the terminology drifted.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Trajectories can be any transition of the state space over time.  Rocket into space. Satellite geosynchronous. ICBM hitting Moscow. Robot arm, robot locomotion etc. &lt;/p&gt;&#xA;" OwnerUserId="6804" LastActivityDate="2015-02-27T19:36:47.603" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6696" PostTypeId="1" CreationDate="2015-02-28T18:31:34.230" Score="1" ViewCount="690" Body="&lt;p&gt;Currently I am building a omnidirectional robot with 4 DC Motors with embedded incremental encoder.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, with a constant pwm input, i am not able to control the motor to rotate in a &quot;relatively stable&quot; state, refer to the figure, it can be observed that the linear speed of the motors can varied in 10cm/s range. I believe one possible reason is the PWM signal generated from my Arduino Mega Controller is not good enough.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And my problem is how can I implement a stable PID controller in this case? As the speed of the motor varies even with the same input, I believe extra work like adding a filter is needed?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any advice is appreciated &gt;.&amp;lt; Thank you&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/9FGAU.png&quot; alt=&quot;Velocity feedback (cm/s) against time&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="9069" LastActivityDate="2015-07-20T23:29:38.230" Title="DC Motor PID control with unstable velocity feedback" Tags="&lt;motor&gt;&lt;pid&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6701" PostTypeId="1" CreationDate="2015-03-01T21:25:26.377" Score="7" ViewCount="3292" Body="&lt;p&gt;How do you stream video feed from a camera on a drone? I would think that at high altitudes Wi-Fi won't work. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what would you usually do, and how?&lt;/p&gt;&#xA;" OwnerUserId="9194" LastEditorUserId="9176" LastEditDate="2015-03-03T13:03:13.303" LastActivityDate="2017-05-21T07:25:37.917" Title="Drones and camera streaming" Tags="&lt;quadcopter&gt;&lt;cameras&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6702" PostTypeId="2" ParentId="5193" CreationDate="2015-03-01T22:27:28.007" Score="1" Body="&lt;p&gt;First off, occupancy grid mapping is just one possible representation of a map. I think your question really applies many map representations. Here are my thoughts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Mapping without SLAM&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Whether or not you can build a map from your sensor measurements without fully implementing SLAM depends on a couple things:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Do you have &lt;em&gt;absolute&lt;/em&gt; sensors for localization? For example, you could drive all day, and if GPS is always available, your localization error will not grow. Or if you are indoors, external camera systems (i.e., not on your robot and in known positions) can serve the same purpose. If you do have absolute sensors, the accuracy of your map can only be as accurate as the uncertainty of your absolute localization sensor compounded by the uncertainty of your mapping sensor.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If you only have relative localization sensors (e.g., wheel encoders, IMU, camera mounted on the robot), you will have dead-reckoning error. The error in your pose estimate will grow over time. Then you have to ask yourself: is it growing at a small enough rate that I can produce a good enough map before the pose is too uncertain? Note that this approach is almost never used (you would implement SLAM instead).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In general, you need to answer these questions: What sensors do I have available? How accurate does my map need to be for its application? You asked about a low cost way to improve your pose estimate. Well the lowest cost of them all is to implement SLAM! In particular, if you &quot;close the loop&quot; (i.e., revisit earlier landmarks), you can drastically curtail the effects of dead-reckoning. But to answer your question with an actual sensor, take a look at setting up cheap stationary cameras that can triangulate the pose of the robot.&lt;/p&gt;&#xA;" OwnerUserId="4320" LastActivityDate="2015-03-01T22:27:28.007" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6703" PostTypeId="1" CreationDate="2015-03-02T13:11:32.917" Score="1" ViewCount="117" Body="&lt;p&gt;How do you select the following two angles in the design of a Rocker bogie system:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Angle between two arms of the main rocker, and;&lt;/li&gt;&#xA;&lt;li&gt;Angle between two arms in the bogie.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="1989" LastEditorUserId="9176" LastEditDate="2015-03-03T13:03:07.070" LastActivityDate="2015-03-03T13:03:07.070" Title="Angles in a Rocker bogie system" Tags="&lt;mobile-robot&gt;&lt;wheeled-robot&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6704" PostTypeId="2" ParentId="6701" CreationDate="2015-03-02T16:26:32.327" Score="8" Body="&lt;p&gt;It all depends on the video quality that you require. The short answer is to use a 3G or 4G transmitter, assuming that you are in an area with &lt;em&gt;mobile coverage&lt;/em&gt;, to either a local device (Mobile phone) or a cloud based service.&lt;/p&gt;&#xA;&lt;p&gt;Other options exist, including the use of &lt;em&gt;XBee&lt;/em&gt; networks. XBee networks (depending on the series used and protocol, and whether you employ a regular or pro device) can offer ranges from a couple of dozen meters up to 16Kms or more (using a 900 MHz XBee Pro (in the US), or a 868 MHz XBee Pro (in the EU)). However, the data rate of an XBee will probably not be sufficient to carry video&lt;sup&gt;1&lt;/sup&gt;.&lt;/p&gt;&#xA;&lt;p&gt;However, Wi-Fi &lt;em&gt;can&lt;/em&gt; be used for fairly large distances. The range of a Wi-Fi signal, can range from 300 to 2000 meters, depending on equipment and conditions. The range will varies due to a number of factors:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Power of the transmitter. The bigger the antenna the further the&#xA;signal will radiate, with less attenuation;&lt;/li&gt;&#xA;&lt;li&gt;The antenna used.  In ascending order of power Whip (or wire), Chip,&#xA;PCB, or external (via a U.FL or RPSMA connector);&lt;/li&gt;&#xA;&lt;li&gt;The frequency used. Generally the lower the frequency the further the signal can travel. A 5GHz network has a shorter range than 2.4 GHz;&lt;/li&gt;&#xA;&lt;li&gt;The environment. Nearby trees, buildings, direct line of sight,&#xA;atmospheric conditions, etc. can all negatively affect the range of&#xA;the Wi-Fi signal. A direct line of sight on a clear day is obviously&#xA;a better environment than in a forest on a foggy day.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Don't forget that the quality of the stream will be less than if you were to record directly to an on-board storage (i.e. SD card).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; From &lt;a href=&quot;http://diydrones.com/forum/topics/xbee-for-video-transmission&quot; rel=&quot;noreferrer&quot;&gt;x-bee for video transmission?&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The data rate is a non-starter. Xbee is designed for serial communications at a max of 230kbps. That's too slow for any kind of decent video&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;and&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;2.4 GHz Xbee products as well as 800 MHz products have data rates below 250kbps.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Mind you, this, again, all depends on the video quality that you require. The thread &lt;a href=&quot;http://www.electro-tech-online.com/threads/can-you-use-xbee-to-transmit-video.98276/&quot; rel=&quot;noreferrer&quot;&gt;Can you use XBee to transmit video?&lt;/a&gt; points to a &lt;a href=&quot;https://en.wikipedia.org/wiki/Bit_rate#Video&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia&lt;/a&gt; article, which states:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Video&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;16 kbit/s – videophone quality (minimum necessary for a consumer-acceptable &amp;quot;talking head&amp;quot; picture using various video compression schemes).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Another &lt;a href=&quot;http://www.societyofrobots.com/robotforum/index.php?topic=5463.0&quot; rel=&quot;noreferrer&quot;&gt;thread&lt;/a&gt;, notes that the XBee's 250kps is half duplex, so that actual data rate is only ~125kbps. So, it would depend on the data rate of the camera that you wish to use.&lt;/p&gt;&#xA;" OwnerUserId="9176" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2016-03-24T05:24:34.453" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6705" PostTypeId="1" CreationDate="2015-03-02T18:02:32.010" Score="1" ViewCount="269" Body="&lt;p&gt;I'm looking for ways to detect human presense behind walls in close proximity (around 10 feet) in whatever way possible! Problem is I can't code! (I hope it's ok I'm posting here.) &#xA;I know there are different sensors but they all seem to be for detecting by motion of target humans. &#xA;How do you detect still persons?&#xA;Is there a sound amplification device that magnifies human breathing x 20?&#xA;Or detect body heat?&#xA;Or pick up radiation waves or something off humans?&lt;/p&gt;&#xA;" OwnerUserId="9201" LastEditorUserId="9201" LastEditDate="2015-03-02T18:40:38.980" LastActivityDate="2015-06-12T07:36:32.387" Title="Detect human in proximity?" Tags="&lt;sensors&gt;&lt;sensor-fusion&gt;&lt;ultrasonic-sensors&gt;" AnswerCount="2" CommentCount="0" ClosedDate="2015-06-15T11:25:55.833" ContentLicense="CC BY-SA 3.0" />
  <row Id="6706" PostTypeId="1" CreationDate="2015-03-02T19:08:32.150" Score="1" ViewCount="486" Body="&lt;p&gt;I'm constructing a 2 wheels balancing robot which uses a PID controller.  I've tuned my parameters on numerical simulations based on a continuous inverted pendulum system so that the simulated inverted pendulum balances by controlling the horizontal (linear) cart acceleration $\ddot{x}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now that I've done this, I want to take the next step and turn my PID control commands into electrical commands onto a DC motor to give the desired linear acceleration $\ddot{x}$. However I'm not sure how exactly to do this for my specific robot's motors.  Are there experimental tests should I run to determine how to convert PID commands into DC motor acceleration commands? Or is there a formula to do this based on the motor's specifications?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Update&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The non-linear dynamic equation I'm using is&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$L\ddot{\theta}=gsin(\theta)+\ddot{x}(t)cos(\theta)+Ld(t)$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $\ddot{x}(t)$ is the linear acceleration, $g$ is the acceleration due to gravity, and $\ddot{\theta}$ is the angular acceleration, and $d(t)$ is an external disturbance to the system. To simplify things, I've linearized the equations around $\theta\approx0$, yielding&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$L\ddot{\theta}=g\theta+\ddot{x}(t)+Ld(t)$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've assumed that the only control input is the cart's linear acceleration $\ddot{x}(t)$, and chose this control command as $\ddot{x}(t)=K_1\theta(t) + K_2\int_0^t\theta(t) dt + K_3\dot{\theta}$, where $K_i$ are the PID gains.&lt;/p&gt;&#xA;" OwnerUserId="2295" LastEditorUserId="6941" LastEditDate="2015-03-04T17:04:28.330" LastActivityDate="2015-03-04T17:48:08.090" Title="Converting a linear acceleration command into a DC motor command?" Tags="&lt;motor&gt;&lt;control&gt;&lt;pid&gt;&lt;actuator&gt;&lt;dynamics&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="6707" PostTypeId="2" ParentId="6705" CreationDate="2015-03-03T10:32:32.663" Score="0" Body="&lt;p&gt;The idea and research of through-wall imaging with uwb radar system has been around for many years. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Saw a product demonstration in technology exhibition recently. The display was a 'wave pattern' that needs 'human interpretation', rather than a layman-clear display as in marine radar polar display.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Try search&#xA;&lt;a href=&quot;https://www.google.com/search?q=through-wall%20imaging%20with%20uwb%20radar%20system&amp;amp;safe=off&amp;amp;biw=1252&amp;amp;bih=534&amp;amp;source=lnms&amp;amp;tbm=isch&amp;amp;sa=X&amp;amp;ei=aov1VI-NI-avmAXxw4HoCQ&amp;amp;ved=0CAcQ_AUoAg&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similarly, ground penetration radar has been a more on-going field application product&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Try search&#xA;&lt;a href=&quot;https://www.google.com/search?q=ground%20penetrating%20radar&amp;amp;safe=off&amp;amp;biw=1252&amp;amp;bih=534&amp;amp;source=lnms&amp;amp;tbm=isch&amp;amp;sa=X&amp;amp;ei=b4z1VLKaEITQmwXszoCQBg&amp;amp;sqi=2&amp;amp;ved=0CAgQ_AUoAw&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unlike time-proven and field operational civilian radars (ship, sea-port traffic, airport and weather) where the target signal is significantly stronger than background reflections, human reflection inside a room that is much larger than human body and may have metal objects that reflect strongly, is, in most cases, weaker than background. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If human moves, there is changes, before-and-after the move and can be 'seen' on the 'wave pattern' display by trained operator.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are research paper &lt;a href=&quot;http://macau.uni-kiel.de/receive/dissertation_diss_00010153&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt; use filtering to get weak human breathing motion signal from noisy background.&lt;/p&gt;&#xA;" OwnerUserId="5582" LastEditorUserId="5582" LastEditDate="2015-03-03T16:38:24.277" LastActivityDate="2015-03-03T16:38:24.277" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6708" PostTypeId="1" CreationDate="2015-03-03T12:03:31.487" Score="1" ViewCount="175" Body="&lt;p&gt;I need a computer on the board like raspberry pi for vending machine (I want to replace the original controller). This is list of some requirements:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) It should have pins to connect to the &lt;a href=&quot;http://en.wikipedia.org/wiki/Multidrop_bus&quot; rel=&quot;nofollow&quot;&gt;mdb protocol&lt;/a&gt; &amp;amp; other stuff through gpio.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) Good performance. There will be a display with browser showing rails application running. I've tried a raspberry pi B+, but it's too slow (it can't even run a browser with speed like a laptop pc). So, I want to choose a more powerful system like odroid, wandboard etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3) Custom video output. Sometimes I need to display FullHD(1920x1080), sometimes I need to show at 768x1024 (yes, the computer should simply rotate video output)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;4) I don't want to connect microcomputer to display directly, not through HDMI, DVI or something like this. (This is not required, but very desirable).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please help me choose. Nowadays I try to choose from odroid, wandboard or pandaboard. Are there any other computers? What version of the computer is advisable?&lt;/p&gt;&#xA;" OwnerUserId="7467" LastEditorUserId="1213" LastEditDate="2015-03-05T06:33:06.403" LastActivityDate="2019-05-07T01:17:03.823" Title="I need help with choosing a computer on the board" Tags="&lt;arduino&gt;&lt;raspberry-pi&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6710" PostTypeId="2" ParentId="6708" CreationDate="2015-03-03T14:01:16.400" Score="1" Body="&lt;p&gt;Nevertheless I can only recommend the Nvidia Jetson TK1 board!&#xA;&lt;a href=&quot;https://developer.nvidia.com/jetson-tk1&quot; rel=&quot;nofollow&quot;&gt;https://developer.nvidia.com/jetson-tk1&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Great performance, cheap and with GPIO and HDMI.&#xA;Perfect support for Ubuntu Linux.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BTW: I don't get your point 4)&lt;/p&gt;&#xA;" OwnerUserId="9208" LastActivityDate="2015-03-03T14:01:16.400" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6713" PostTypeId="2" ParentId="6708" CreationDate="2015-03-04T04:27:16.893" Score="0" Body="&lt;p&gt;I recommend&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Nvidia TK1&lt;/li&gt;&#xA;&lt;li&gt;Odroid XU3&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Both have GPIO that you can program. And both have a desktop version Linux (or Android, in Odroid XU3).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Odroid XU3 can set display video size in boot script. I don't know about TK1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your point 4) can be achieved by using VNC. Basically you can use your laptop to view the display from your board. Here is a tutorial for setting VNC:&#xA;&lt;a href=&quot;https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-vnc-on-ubuntu-14-04&quot; rel=&quot;nofollow noreferrer&quot;&gt;VNC Tutorial&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I strongly recommend VNC.&lt;/p&gt;&#xA;" OwnerUserId="9213" LastEditorUserId="15160" LastEditDate="2019-05-07T01:17:03.823" LastActivityDate="2019-05-07T01:17:03.823" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6714" PostTypeId="1" CreationDate="2015-03-04T05:35:23.270" Score="0" ViewCount="63" Body="&lt;p&gt;There is always a way to do this using arduino, rasberry pi etc.  However, in many cases in discussion in forums i've come across things where whole 'logic' can be uploaded to $0.50 chip. Instead of $50 dollar part. DRASTIC change. This defines a line between a one time thing that you made as a hobby, and something you can sell around. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So basically if i want led to get brightest at loud sound and almost off on silence.&#xA;Or with button that switch to 100% on all the time. &lt;/p&gt;&#xA;" OwnerUserId="1892" LastActivityDate="2015-03-05T05:57:11.410" Title="What is the cheapest way to make led sensitive to sound around?" Tags="&lt;design&gt;&lt;circuit&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6715" PostTypeId="1" AcceptedAnswerId="6718" CreationDate="2015-03-04T10:26:19.073" Score="1" ViewCount="1920" Body="&lt;p&gt;I am a total newbie in robotics so please bare with me. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a school project where my team has to design a robot that is capable of picking up 3 golf balls in different sizes at predefined locations. Then it has to drop these balls into their respective holes. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;We are using an arduino chip in our robot. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I thought I could perhaps define a path for the robot, an invisible virtual path you may call. So imagining the platform as Cartesian plane, can I tell the robot go to where I want it to go? For example, go to (5,12)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or do I need some sort of sensors so the robot figures it out by itself. Thanks for your time!  &lt;/p&gt;&#xA;" OwnerUserId="9216" LastActivityDate="2015-03-06T09:01:57.130" Title="Is it possible for a robot to navigate through predefined coordinates?" Tags="&lt;arduino&gt;&lt;sensors&gt;&lt;navigation&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6716" PostTypeId="2" ParentId="6714" CreationDate="2015-03-04T12:08:29.380" Score="1" Body="&lt;p&gt;If the intention is only to have one LED glowing based on surrounding sound, use a condenser micro phone amplifier connect the output to LED, If you are doing some robotic project and already audio out put is available, you can connect LED directly with a voltage divider to avoid over voltage, also you can have an Op-Amp circuit to drive the LED.The solution will be based on  where are you trying to use this? how do you capture the surrounding audio? what kind of surrounding audio are you expecting?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDITED: based on your comment, &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You need a pre-amplifier to capture audio from mic, refer somthing similar to this circuit &lt;a href=&quot;https://electronics.stackexchange.com/questions/71335/how-to-amplify-electret-microphone-to-range-from-0-5v-with-bias-of-2-5v&quot;&gt;https://electronics.stackexchange.com/questions/71335/how-to-amplify-electret-microphone-to-range-from-0-5v-with-bias-of-2-5v&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After this convert Audio to attractive light pattern, for that you can use db level indicator something similar to circuit in following link.&#xA;&lt;a href=&quot;http://bestengineeringprojects.com/electronics-projects/a-versatile-decibel-meter-audio-level-indicator-spectrum-analyser/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://bestengineeringprojects.com/electronics-projects/a-versatile-decibel-meter-audio-level-indicator-spectrum-analyser/&lt;/a&gt; (google for LM3914 circuits or same can be done with series of transistors and diodes, which works based on forward bias threshold voltage)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can also combine this with rotating patterns of leds whose speed is based on audio input, if you google you will find some circuit. I can give some hint, it is possible with 555 and CD4017.&lt;/p&gt;&#xA;" OwnerUserId="9214" LastEditorUserId="-1" LastEditDate="2017-04-13T12:33:08.317" LastActivityDate="2015-03-05T05:57:11.410" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6717" PostTypeId="2" ParentId="6706" CreationDate="2015-03-04T17:43:01.893" Score="1" Body="&lt;p&gt;First comment, the equation you gave for your PID seems a bit weird. The PID normally acts to steer an error, let's say $e_{\theta}=\theta_d-\theta$, to zero, where $\theta_d\left(t\right)$ is your set-point, possibly varying, and $\theta\left(t\right)$ is the current feedback.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If we always assume $\theta_d=0$ - is this your task? -, then you have to consider the right sign for the feedback, i.e. $-\theta$, since usually the PID gains are deemed to be positive. This way though, you'll prevent yourself from having fun while trying to stabilize the pole in non-upright positions (i.e. $\theta_d \neq 0$, wherein the linearization does not hold).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is missing is to make the dynamic equation of linear motion explicit, that is something like $\ddot{x}=f\left(x,u,d_x,t\right)$, where $u$ is the motor torque and $d_x$ are other type of disturbances (e.g. friction forces) acting on the system. You could plug this second equation in the first one coming up with a new PID whose output is directly $u$ and no longer $\ddot{x}$, changing thus the input to the system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might describe the function $f\left(\cdot\right)$ in terms of what you know about the system (e.g. wheels geometry to transform torque into force, motors' parameters to deal with transformation of voltage/current into mechanical torque), providing therefore a &lt;strong&gt;feed-forward term&lt;/strong&gt; to help the PID do its job or even let the PID work alone in the closed-loop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another possibility is to replace the single PID scheme with a cascade of a &lt;strong&gt;inner loop&lt;/strong&gt; where you control $\ddot{x}$ through the first PID (you have somehow to measure/estimate the linear acceleration), and an &lt;strong&gt;outer loop&lt;/strong&gt; that finally controls the angular position of the pole by means of a second PID. Anyway, two PIDs means more gains to fine tune. You may also want to identify $f$ via proper identification techniques.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a side note, one effective way to deal with all the disturbances and uncertainties you have in the real system that are not taken into account in the model is to resort to &lt;strong&gt;sliding mode&lt;/strong&gt; control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, I'd really suggest you to search in literature: there are plenty of methods and models out of the box for you to read and use for such a classical control problem.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2015-03-04T17:48:08.090" LastActivityDate="2015-03-04T17:48:08.090" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6718" PostTypeId="2" ParentId="6715" CreationDate="2015-03-04T18:33:30.337" Score="0" Body="&lt;p&gt;So, this is my first answer here. Hopefully this will help!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The golf balls, given that they are present in predefined locations, seem to be either be on a graph/grid, or at certain distances away from each other on the same plane.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Firstly, for a grid. You need to have line sensors to detect the presence of a grid which is either a junction (basically a complete black line detected by all sensors) or a right-angled turn. In either case the trick is to assign co-ordinates to it and travelling based on these. For example to travel from (0,0) to (0,1) you need to go north by 1 co-ordinate. So starting from (0,0) the bot must follow the line north till it detects a junction. And so on for any co-ordinate. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This link should help:&#xA;&lt;a href=&quot;http://www.robotix.in/tutorials/category/auto/grid&quot; rel=&quot;nofollow&quot;&gt;http://www.robotix.in/tutorials/category/auto/grid&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Secondly, for no grid. Assuming that these golf balls are at certain distances from the starting point, it is possible to create a virtual grid of your own where each co-ordinate is at fixed distances, just like on a grid or graph. In that case, the bot has to follow the same procedures to reach a destination but just by moving for those fixed distances. So it is suggested that your bot has encoders for the dc motors that will help in travelling precisely the distance that you wish to travel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Good Luck!! \m/&lt;/p&gt;&#xA;" OwnerUserId="9219" LastActivityDate="2015-03-04T18:33:30.337" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6719" PostTypeId="2" ParentId="6714" CreationDate="2015-03-04T18:53:44.903" Score="1" Body="&lt;p&gt;I was working on a similar project a while ago. Assuming that you are using an AUX for audio input, the best thing that I have done that seemed to work was using a &lt;strong&gt;TIP-31c NPN Transistor&lt;/strong&gt;. You could also use a TIP-31a/b transistor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's an image on how you could connect the transistor and get the affect you are looking for: &lt;a href=&quot;http://cdn.instructables.com/F7J/0GZT/HH2VYB6L/F7J0GZTHH2VYB6L.LARGE.gif&quot; rel=&quot;nofollow&quot;&gt;http://cdn.instructables.com/F7J/0GZT/HH2VYB6L/F7J0GZTHH2VYB6L.LARGE.gif&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Summarizing the image:&lt;/strong&gt; You want to connect the Base of the transistor to the left or right channel of the AUX, LEDs to the collector and ground the Emitter.  &lt;/p&gt;&#xA;" OwnerUserId="1213" LastActivityDate="2015-03-04T18:53:44.903" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6720" PostTypeId="1" AcceptedAnswerId="6899" CreationDate="2015-03-04T21:36:39.187" Score="2" ViewCount="571" Body="&lt;p&gt;I am attempting to build a Raspberry Pi based quadcopter. So far I have succeeded in interfacing with all the hardware, and I have written a PID controller that is fairly stable at low throttle. The problem is that at higher throttle the quadcopter starts thrashing and jerking. I have not even been able to get it off the ground yet, all my testing has been done on a test bench. I have ruled out bad sensors by testing each sensor individually, and they seem to be giving correct values. Is this a problem with my code, or perhaps a bad motor? Any suggestions are greatly appreciated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is my code so far:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;QuadServer.java:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;package com.zachary.quadserver;&#xA;&#xA;import java.net.*;&#xA;import java.io.*;&#xA;import java.util.*;&#xA;&#xA;import se.hirt.pi.adafruit.pwm.PWMDevice;&#xA;import se.hirt.pi.adafruit.pwm.PWMDevice.PWMChannel;&#xA;&#xA;public class QuadServer {&#xA;    private static Sensor sensor = new Sensor();&#xA;&#xA;    private final static int FREQUENCY = 490;&#xA;&#xA;    private static double PX = 0;&#xA;    private static double PY = 0;&#xA;&#xA;    private static double IX = 0;&#xA;    private static double IY = 0;&#xA;&#xA;    private static double DX = 0;&#xA;    private static double DY = 0;&#xA;&#xA;    private static double kP = 1.3;&#xA;    private static double kI = 2;&#xA;    private static double kD = 0;&#xA;&#xA;    private static long time = System.currentTimeMillis();&#xA;&#xA;    private static double last_errorX = 0;&#xA;    private static double last_errorY = 0;&#xA;&#xA;    private static double outputX;&#xA;    private static double outputY;&#xA;&#xA;    private static int val[] = new int[4];&#xA;&#xA;    private static int throttle;&#xA;&#xA;    static double setpointX = 0;&#xA;    static double setpointY = 0;&#xA;&#xA;    static long receivedTime = System.currentTimeMillis();&#xA;&#xA;    public static void main(String[] args) throws IOException, NullPointerException {&#xA;&#xA;        PWMDevice device = new PWMDevice();&#xA;        device.setPWMFreqency(FREQUENCY);&#xA;&#xA;        PWMChannel BR = device.getChannel(12);&#xA;        PWMChannel TR = device.getChannel(13);&#xA;        PWMChannel TL = device.getChannel(14);&#xA;        PWMChannel BL = device.getChannel(15);&#xA;&#xA;        DatagramSocket serverSocket = new DatagramSocket(8080);&#xA;&#xA;&#xA;        Thread read = new Thread(){&#xA;                public void run(){&#xA;                    while(true) {&#xA;                    try {&#xA;                            byte receiveData[] = new byte[1024];&#xA;                            DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);&#xA;                            serverSocket.receive(receivePacket);&#xA;                            String message = new String(receivePacket.getData());&#xA;                            throttle = (int)(Integer.parseInt((message.split(&quot;\\s+&quot;)[4]))*12.96)+733;&#xA;                            setpointX = Integer.parseInt((message.split(&quot;\\s+&quot;)[3]))-50;&#xA;                            setpointY = Integer.parseInt((message.split(&quot;\\s+&quot;)[3]))-50;&#xA;&#xA;                        receivedTime = System.currentTimeMillis();&#xA;&#xA;                        } catch (IOException e) {&#xA;                            e.printStackTrace();&#xA;                        }&#xA;                    }&#xA;                }&#xA;        };&#xA;        read.start();&#xA;&#xA;        while(true)&#xA;        {&#xA;            Arrays.fill(val, calculatePulseWidth((double)throttle/1000, FREQUENCY));&#xA;&#xA;            double errorX = -sensor.readGyro(0)-setpointX;&#xA;            double errorY = sensor.readGyro(1)-setpointY;&#xA;&#xA;            double dt = (double)(System.currentTimeMillis()-time)/1000;&#xA;&#xA;            double accelX = sensor.readAccel(0);&#xA;            double accelY = sensor.readAccel(1);&#xA;            double accelZ = sensor.readAccel(2);&#xA;&#xA;            double hypotX = Math.sqrt(Math.pow(accelX, 2)+Math.pow(accelZ, 2));&#xA;            double hypotY = Math.sqrt(Math.pow(accelY, 2)+Math.pow(accelZ, 2));&#xA;&#xA;&#xA;            double accelAngleX = Math.toDegrees(Math.asin(accelY/hypotY));&#xA;            double accelAngleY = Math.toDegrees(Math.asin(accelX/hypotX));&#xA;&#xA;            if(dt &amp;gt; 0.01)&#xA;            {&#xA;&#xA;                PX = errorX;&#xA;                PY = errorY;&#xA;&#xA;                IX += errorX*dt;&#xA;                IY += errorY*dt;&#xA;&#xA;                IX = 0.95*IX+0.05*accelAngleX;&#xA;                IY = 0.95*IY+0.05*accelAngleY;&#xA;&#xA;                DX = (errorX - last_errorX)/dt;&#xA;                DY = (errorY - last_errorY)/dt;&#xA;&#xA;                outputX = kP*PX+kI*IX+kD*DX;&#xA;                outputY = kP*PY+kI*IY+kD*DY;&#xA;                time = System.currentTimeMillis();&#xA;            }&#xA;&#xA;            System.out.println(setpointX);&#xA;&#xA;            add(-outputX+outputY, 0);&#xA;            add(-outputX-outputY, 1);&#xA;            add(outputX-outputY, 2);&#xA;            add(outputX+outputY, 3);&#xA;&#xA;            //System.out.println(val[0]+&quot;, &quot;+val[1]+&quot;, &quot;+val[2]+&quot;, &quot;+val[3]);&#xA;            if(System.currentTimeMillis()-receivedTime &amp;lt; 1000)&#xA;            {&#xA;                BR.setPWM(0, val[0]);&#xA;                TR.setPWM(0, val[1]);&#xA;                TL.setPWM(0, val[2]);&#xA;                BL.setPWM(0, val[3]);&#xA;            } else &#xA;            {&#xA;                BR.setPWM(0, 1471);&#xA;                TR.setPWM(0, 1471);&#xA;                TL.setPWM(0, 1471);&#xA;                BL.setPWM(0, 1471);&#xA;            }&#xA;&#xA;        }&#xA;    }&#xA;&#xA;    private static void add(double value, int i)&#xA;    {&#xA;        value = calculatePulseWidth(value/1000, FREQUENCY);&#xA;        if(val[i]+value &amp;gt; 1471 &amp;amp;&amp;amp; val[i]+value &amp;lt; 4071)&#xA;        {&#xA;            val[i] += value;&#xA;        }else if(val[i]+value &amp;lt; 1471)&#xA;        {&#xA;            //System.out.println(&quot;low&quot;);&#xA;            val[i] = 1471;&#xA;        }else if(val[i]+value &amp;gt; 4071)&#xA;        {&#xA;            //System.out.println(&quot;low&quot;);&#xA;            val[i] = 4071;&#xA;        }&#xA;    }&#xA;&#xA;    private static int calculatePulseWidth(double millis, int frequency) {&#xA;        return (int) (Math.round(4096 * millis * frequency/1000));&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Sensor.java:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;package com.zachary.quadserver;&#xA;&#xA;import com.pi4j.io.gpio.GpioController;&#xA;import com.pi4j.io.gpio.GpioFactory;&#xA;import com.pi4j.io.gpio.GpioPinDigitalOutput;&#xA;import com.pi4j.io.gpio.PinState;&#xA;import com.pi4j.io.gpio.RaspiPin;&#xA;import com.pi4j.io.i2c.*;&#xA;import com.pi4j.io.gpio.GpioController;&#xA;import com.pi4j.io.gpio.GpioFactory;&#xA;import com.pi4j.io.gpio.GpioPinDigitalOutput;&#xA;import com.pi4j.io.gpio.PinState;&#xA;import com.pi4j.io.gpio.RaspiPin;&#xA;import com.pi4j.io.i2c.*;&#xA;&#xA;import java.net.*;&#xA;import java.io.*;&#xA;&#xA;public class Sensor {&#xA;    static I2CDevice sensor;&#xA;    static I2CBus bus;&#xA;    static byte[] accelData, gyroData;&#xA;    static long accelCalib[] = new long[3];&#xA;    static long gyroCalib[] = new long[3];&#xA;&#xA;    static double gyroX = 0;&#xA;    static double gyroY = 0;&#xA;    static double gyroZ = 0;&#xA;&#xA;    static double accelX;&#xA;    static double accelY;&#xA;    static double accelZ;&#xA;&#xA;    static double angleX;&#xA;    static double angleY;&#xA;    static double angleZ;&#xA;&#xA;    public Sensor() {&#xA;        //System.out.println(&quot;Hello, Raspberry Pi!&quot;);&#xA;        try {&#xA;            bus = I2CFactory.getInstance(I2CBus.BUS_1);&#xA;&#xA;            sensor = bus.getDevice(0x68);&#xA;&#xA;            sensor.write(0x6B, (byte) 0x0);&#xA;            sensor.write(0x6C, (byte) 0x0);&#xA;            System.out.println(&quot;Calibrating...&quot;);&#xA;&#xA;            calibrate();&#xA;&#xA;            Thread sensors = new Thread(){&#xA;                    public void run(){&#xA;                        try {&#xA;                            readSensors();&#xA;                        } catch (IOException e) {&#xA;                        System.out.println(e.getMessage());&#xA;                    }&#xA;                    }&#xA;            };&#xA;            sensors.start();&#xA;        } catch (IOException e) {&#xA;            System.out.println(e.getMessage());&#xA;        }&#xA;    }&#xA;&#xA;    private static void readSensors() throws IOException {&#xA;        long time = System.currentTimeMillis();&#xA;        long sendTime = System.currentTimeMillis();&#xA;&#xA;        while (true) {&#xA;            accelData = new byte[6];&#xA;            gyroData = new byte[6];&#xA;            int r = sensor.read(0x3B, accelData, 0, 6);&#xA;            accelX = (((accelData[0] &amp;lt;&amp;lt; 8)+accelData[1]-accelCalib[0])/16384.0)*9.8;&#xA;            accelY = (((accelData[2] &amp;lt;&amp;lt; 8)+accelData[3]-accelCalib[1])/16384.0)*9.8;&#xA;            accelZ = ((((accelData[4] &amp;lt;&amp;lt; 8)+accelData[5]-accelCalib[2])/16384.0)*9.8)+9.8;&#xA;            accelZ = 9.8-Math.abs(accelZ-9.8);&#xA;&#xA;            double hypotX = Math.sqrt(Math.pow(accelX, 2)+Math.pow(accelZ, 2));&#xA;            double hypotY = Math.sqrt(Math.pow(accelY, 2)+Math.pow(accelZ, 2));&#xA;&#xA;&#xA;            double accelAngleX = Math.toDegrees(Math.asin(accelY/hypotY));&#xA;            double accelAngleY = Math.toDegrees(Math.asin(accelX/hypotX));&#xA;&#xA;            //System.out.println((int)gyroX+&quot;, &quot;+(int)gyroY);&#xA;&#xA;            //System.out.println(&quot;accelX: &quot; + accelX+&quot; accelY: &quot; + accelY+&quot; accelZ: &quot; + accelZ);&#xA;&#xA;            r = sensor.read(0x43, gyroData, 0, 6);&#xA;            if(System.currentTimeMillis()-time &amp;gt;= 5)&#xA;            {&#xA;                gyroX = (((gyroData[0] &amp;lt;&amp;lt; 8)+gyroData[1]-gyroCalib[0])/131.0);&#xA;                gyroY = (((gyroData[2] &amp;lt;&amp;lt; 8)+gyroData[3]-gyroCalib[1])/131.0);&#xA;                gyroZ = (((gyroData[4] &amp;lt;&amp;lt; 8)+gyroData[5]-gyroCalib[2])/131.0);&#xA;&#xA;                angleX += gyroX*(System.currentTimeMillis()-time)/1000;&#xA;                angleY += gyroY*(System.currentTimeMillis()-time)/1000;&#xA;                angleZ += gyroZ;&#xA;&#xA;                angleX = 0.95*angleX + 0.05*accelAngleX;&#xA;                angleY = 0.95*angleY + 0.05*accelAngleY;&#xA;&#xA;                time = System.currentTimeMillis();&#xA;            }&#xA;            //System.out.println((int)angleX+&quot;, &quot;+(int)angleY);&#xA;            //System.out.println((int)accelAngleX+&quot;, &quot;+(int)accelAngleY);&#xA;        }&#xA;    }&#xA;&#xA;    public static void calibrate() throws IOException {&#xA;        int i;&#xA;        for(i = 0; i &amp;lt; 3000; i++)&#xA;        {&#xA;            accelData = new byte[6];&#xA;            gyroData = new byte[6];&#xA;            int r = sensor.read(0x3B, accelData, 0, 6);&#xA;            accelCalib[0] += (accelData[0] &amp;lt;&amp;lt; 8)+accelData[1];&#xA;            accelCalib[1] += (accelData[2] &amp;lt;&amp;lt; 8)+accelData[3];&#xA;            accelCalib[2] += (accelData[4] &amp;lt;&amp;lt; 8)+accelData[5];&#xA;&#xA;            r = sensor.read(0x43, gyroData, 0, 6);&#xA;            gyroCalib[0] += (gyroData[0] &amp;lt;&amp;lt; 8)+gyroData[1];&#xA;            gyroCalib[1] += (gyroData[2] &amp;lt;&amp;lt; 8)+gyroData[3];&#xA;            gyroCalib[2] += (gyroData[4] &amp;lt;&amp;lt; 8)+gyroData[5];&#xA;            try {&#xA;                Thread.sleep(1);&#xA;            } catch (Exception e){&#xA;                e.printStackTrace();&#xA;            }&#xA;        }&#xA;        gyroCalib[0] /= i;&#xA;        gyroCalib[1] /= i;&#xA;        gyroCalib[2] /= i;&#xA;&#xA;        accelCalib[0] /= i;&#xA;        accelCalib[1] /= i;&#xA;        accelCalib[2] /= i;&#xA;        System.out.println(gyroCalib[0]+&quot;, &quot;+gyroCalib[1]+&quot;, &quot;+gyroCalib[2]);&#xA;    }&#xA;&#xA;    public double readAngle(int axis)&#xA;    {&#xA;        switch (axis)&#xA;        {&#xA;            case 0:&#xA;                return angleX;&#xA;            case 1:&#xA;                return angleY;&#xA;            case 2:&#xA;                return angleZ;&#xA;        }&#xA;&#xA;        return 0;&#xA;    }&#xA;&#xA;    public double readGyro(int axis)&#xA;    {&#xA;        switch (axis)&#xA;        {&#xA;            case 0:&#xA;                return gyroX;&#xA;            case 1:&#xA;                return gyroY;&#xA;            case 2:&#xA;                return gyroZ;&#xA;        }&#xA;&#xA;        return 0;&#xA;    }&#xA;&#xA;    public double readAccel(int axis)&#xA;    {&#xA;        switch (axis)&#xA;        {&#xA;            case 0:&#xA;                return accelX;&#xA;            case 1:&#xA;                return accelY;&#xA;            case 2:&#xA;                return accelZ;&#xA;        }&#xA;&#xA;        return 0;&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have re-written my code in C++ to see if it will run faster but it's still running at about the same speed(about 15 ms per cycle or about 66 Hz).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is my new code in C++:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;wiringPi.h&amp;gt;&#xA;#include &amp;lt;wiringPiI2C.h&amp;gt;&#xA;&#xA;#include &amp;lt;sys/socket.h&amp;gt;&#xA;#include &amp;lt;netinet/in.h&amp;gt;&#xA;&#xA;#include &amp;lt;string.h&amp;gt;&#xA;#include &amp;lt;string&amp;gt;&#xA;#include &amp;lt;iostream&amp;gt;&#xA;#include &amp;lt;unistd.h&amp;gt;&#xA;&#xA;#include &amp;lt;boost/thread.hpp&amp;gt;&#xA;&#xA;#include &amp;lt;time.h&amp;gt;&#xA;&#xA;#include &amp;lt;cmath&amp;gt;&#xA;&#xA;#define axisX 0&#xA;#define axisY 1&#xA;#define axisZ 2&#xA;&#xA;#define kP 20&#xA;#define kI 0&#xA;#define kD 0&#xA;&#xA;#define FREQUENCY 490&#xA;&#xA;#define MODE1 0x00&#xA;#define MODE2 0x01&#xA;#define SUBADR1 0x02&#xA;#define SUBADR2 0x03&#xA;#define SUBADR13 0x04&#xA;#define PRESCALE 0xFE&#xA;#define LED0_ON_L 0x06&#xA;#define LED0_ON_H 0x07&#xA;#define LED0_OFF_L 0x08&#xA;#define LED0_OFF_H 0x09&#xA;#define ALL_LED_ON_L 0xFA&#xA;#define ALL_LED_ON_H 0xFB&#xA;#define ALL_LED_OFF_L 0xFC&#xA;#define ALL_LED_OFF_H 0xFD&#xA;&#xA;// Bits&#xA;#define RESTART 0x80&#xA;#define SLEEP 0x10&#xA;#define ALLCALL 0x01&#xA;#define INVRT 0x10&#xA;#define OUTDRV 0x04&#xA;&#xA;#define BILLION 1000000000L&#xA;&#xA;using namespace std;&#xA;&#xA;double accelCalX = 0;&#xA;double accelCalY = 0;&#xA;double accelCalZ = 0;&#xA;&#xA;double gyroCalX = 0;&#xA;double gyroCalY = 0;&#xA;double gyroCalZ = 0;&#xA;&#xA;double PX;&#xA;double PY;&#xA;&#xA;double IX = 0;&#xA;double IY = 0;&#xA;&#xA;double DX;&#xA;double DY;&#xA;&#xA;double lastErrorX;&#xA;double lastErrorY;&#xA;&#xA;int throttle = 1471;&#xA;&#xA;int sensor = wiringPiI2CSetup(0x68);&#xA;int pwm = wiringPiI2CSetup(0x40);&#xA;&#xA;array&amp;lt;int,4&amp;gt; motorVal;&#xA;&#xA;struct timespec now, then;&#xA;&#xA;int toSigned(int unsignedVal)&#xA;{&#xA;    int signedVal = unsignedVal;&#xA;    if(unsignedVal &amp;gt; 32768)&#xA;    {&#xA;        signedVal = -(32768-(unsignedVal-32768));&#xA;    }&#xA;    return signedVal;&#xA;}&#xA;&#xA;double getAccel(int axis)&#xA;{&#xA;    double X = (toSigned((wiringPiI2CReadReg8(sensor, 0x3B) &amp;lt;&amp;lt; 8)+wiringPiI2CReadReg8(sensor, 0x3C)))/1671.8;&#xA;    double Y = (toSigned((wiringPiI2CReadReg8(sensor, 0x3D) &amp;lt;&amp;lt; 8)+wiringPiI2CReadReg8(sensor, 0x3E)))/1671.8;&#xA;    double Z = (toSigned((wiringPiI2CReadReg8(sensor, 0x3F) &amp;lt;&amp;lt; 8)+wiringPiI2CReadReg8(sensor, 0x40)))/1671.8;&#xA;&#xA;    X -= accelCalX;&#xA;    Y -= accelCalY;&#xA;    Z -= accelCalZ;&#xA;    Z = 9.8-abs(Z-9.8);&#xA;&#xA;    switch(axis)&#xA;    {&#xA;        case axisX:&#xA;            return X;&#xA;        case axisY:&#xA;            return Y;&#xA;        case axisZ:&#xA;            return Z;&#xA;    }&#xA;}&#xA;&#xA;double getGyro(int axis)&#xA;{&#xA;    double X = (toSigned((wiringPiI2CReadReg8(sensor, 0x43) &amp;lt;&amp;lt; 8)+wiringPiI2CReadReg8(sensor, 0x44)))/1671.8;&#xA;    double Y = (toSigned((wiringPiI2CReadReg8(sensor, 0x45) &amp;lt;&amp;lt; 8)+wiringPiI2CReadReg8(sensor, 0x46)))/1671.8;&#xA;    double Z = (toSigned((wiringPiI2CReadReg8(sensor, 0x47) &amp;lt;&amp;lt; 8)+wiringPiI2CReadReg8(sensor, 0x48)))/1671.8;&#xA;&#xA;    X -= gyroCalX;&#xA;    Y -= gyroCalY;&#xA;    Z -= gyroCalZ;&#xA;&#xA;&#xA;    switch(axis)&#xA;    {&#xA;        case axisX:&#xA;            return X;&#xA;        case axisY:&#xA;            return Y;&#xA;        case axisZ:&#xA;            return Z;&#xA;    }&#xA;}&#xA;&#xA;void calibrate()&#xA;{&#xA;    int i;&#xA;    for(i = 0; i &amp;lt; 1500; i++)&#xA;    {&#xA;        accelCalX += (toSigned((wiringPiI2CReadReg8(sensor, 0x3B) &amp;lt;&amp;lt; 8)+wiringPiI2CReadReg8(sensor, 0x3C)))/1671.8;&#xA;        accelCalY += (toSigned((wiringPiI2CReadReg8(sensor, 0x3D) &amp;lt;&amp;lt; 8)+wiringPiI2CReadReg8(sensor, 0x3E)))/1671.8;&#xA;        accelCalZ += (toSigned((wiringPiI2CReadReg8(sensor, 0x3F) &amp;lt;&amp;lt; 8)+wiringPiI2CReadReg8(sensor, 0x40)))/1671.8;&#xA;&#xA;        gyroCalX += (toSigned((wiringPiI2CReadReg8(sensor, 0x43) &amp;lt;&amp;lt; 8)+wiringPiI2CReadReg8(sensor, 0x44)))/1671.8;&#xA;        gyroCalX += (toSigned((wiringPiI2CReadReg8(sensor, 0x45) &amp;lt;&amp;lt; 8)+wiringPiI2CReadReg8(sensor, 0x46)))/1671.8;&#xA;        gyroCalX += (toSigned((wiringPiI2CReadReg8(sensor, 0x45) &amp;lt;&amp;lt; 8)+wiringPiI2CReadReg8(sensor, 0x46)))/1671.8;&#xA;        usleep(1000);&#xA;    }&#xA;&#xA;    accelCalX /= i;&#xA;    accelCalY /= i;&#xA;    accelCalZ /= i;&#xA;    accelCalZ -= 9.8;&#xA;&#xA;    gyroCalX /= i;&#xA;    gyroCalY /= i;&#xA;    gyroCalZ /= i;&#xA;&#xA;    cout &amp;lt;&amp;lt; accelCalX &amp;lt;&amp;lt; &quot; &quot; &amp;lt;&amp;lt; accelCalY &amp;lt;&amp;lt; &quot; &quot; &amp;lt;&amp;lt; accelCalZ &amp;lt;&amp;lt; &quot;\n&quot;;&#xA;}&#xA;&#xA;int calculatePulseWidth(double millis, int frequency) {&#xA;    return (int)(floor(4096 * millis * frequency/1000));&#xA;}&#xA;&#xA;void add(double value, int i)&#xA;{&#xA;    value = calculatePulseWidth(value/1000, FREQUENCY);&#xA;    if(motorVal[i]+value &amp;gt; 1471 &amp;amp;&amp;amp; motorVal[i]+value &amp;lt; 4071)&#xA;    {&#xA;        motorVal[i] += value;&#xA;    }else if(motorVal[i]+value &amp;lt; 1471)&#xA;    {&#xA;        //System.out.println(&quot;low&quot;);&#xA;        motorVal[i] = 1471;&#xA;    }else if(motorVal[i]+value &amp;gt; 4071)&#xA;    {&#xA;        //System.out.println(&quot;low&quot;);&#xA;        motorVal[i] = 4071;&#xA;    }&#xA;}&#xA;&#xA;void getThrottle()&#xA;{&#xA;    int sockfd,n;&#xA;    struct sockaddr_in servaddr,cliaddr;&#xA;    socklen_t len;&#xA;    char mesg[1000];&#xA;&#xA;    sockfd=socket(AF_INET,SOCK_DGRAM,0);&#xA;&#xA;    bzero(&amp;amp;servaddr,sizeof(servaddr));&#xA;    servaddr.sin_family = AF_INET;&#xA;    servaddr.sin_addr.s_addr = htonl(INADDR_ANY);&#xA;    servaddr.sin_port = htons(8080);&#xA;    bind(sockfd,(struct sockaddr *)&amp;amp;servaddr,sizeof(servaddr));&#xA;&#xA;    while(true)&#xA;    {&#xA;        len = sizeof(cliaddr);&#xA;        n = recvfrom(sockfd,mesg,1000,0,(struct sockaddr *)&amp;amp;cliaddr,&amp;amp;len);&#xA;        mesg[n] = 0;&#xA;        string message(mesg);&#xA;        string values[5];&#xA;&#xA;        int valIndex = 0;&#xA;        int lastIndex = 0;&#xA;        for(int i = 0; i &amp;lt; message.length(); i++)&#xA;        {&#xA;            if(message[i] == ' ')&#xA;            {&#xA;                values[valIndex] = message.substr(lastIndex+1, i);&#xA;                lastIndex = i;&#xA;                valIndex++;&#xA;            }&#xA;        }&#xA;        values[valIndex] = message.substr(lastIndex+1, message.length());&#xA;&#xA;        throttle = calculatePulseWidth(((stoi(values[4])*12.96)+733)/1000, FREQUENCY);&#xA;    }&#xA;}&#xA;&#xA;void setAllPWM(int on, int off) {&#xA;    wiringPiI2CWriteReg8(pwm, ALL_LED_ON_L, (on &amp;amp; 0xFF));&#xA;    wiringPiI2CWriteReg8(pwm, ALL_LED_ON_H, (on &amp;gt;&amp;gt; 8));&#xA;    wiringPiI2CWriteReg8(pwm, ALL_LED_OFF_L, (off &amp;amp; 0xFF));&#xA;    wiringPiI2CWriteReg8(pwm, ALL_LED_OFF_H, (off &amp;gt;&amp;gt; 8));&#xA;}&#xA;&#xA;void setPWM(int on, int off, int channel) {&#xA;    wiringPiI2CWriteReg8(pwm, LED0_ON_L + 4 * channel, (on &amp;amp; 0xFF));&#xA;    wiringPiI2CWriteReg8(pwm, LED0_ON_H + 4 * channel, (on &amp;gt;&amp;gt; 8));&#xA;    wiringPiI2CWriteReg8(pwm, LED0_OFF_L + 4 * channel, (off &amp;amp; 0xFF));&#xA;    wiringPiI2CWriteReg8(pwm, LED0_OFF_H + 4 * channel, (off &amp;gt;&amp;gt; 8));&#xA;}&#xA;&#xA;void setPWMFrequency(double frequency) {&#xA;    double prescaleval = 25000000.0;&#xA;    prescaleval /= 4096.0;&#xA;    prescaleval /= frequency;&#xA;    prescaleval -= 1.0;&#xA;    double prescale = floor(prescaleval + 0.5);&#xA;    int oldmode = wiringPiI2CReadReg8(pwm, MODE1);&#xA;    int newmode = (oldmode &amp;amp; 0x7F) | 0x10;&#xA;    wiringPiI2CWriteReg8(pwm, MODE1, newmode);&#xA;    wiringPiI2CWriteReg8(pwm, PRESCALE, (floor(prescale)));&#xA;    wiringPiI2CWriteReg8(pwm, MODE1, oldmode);&#xA;    usleep(50000);&#xA;    wiringPiI2CWriteReg8(pwm, MODE1, (oldmode | 0x80));&#xA;}&#xA;&#xA;void initSensor()&#xA;{&#xA;    wiringPiI2CWriteReg8(sensor, 0x6B, 0x0);&#xA;    wiringPiI2CWriteReg8(sensor, 0x6C, 0x0);&#xA;}&#xA;&#xA;void initPWM()&#xA;{&#xA;    setAllPWM(0, 0);&#xA;    wiringPiI2CWriteReg8(pwm, MODE2, OUTDRV);&#xA;    wiringPiI2CWriteReg8(pwm, MODE1, ALLCALL);&#xA;    usleep(50000);&#xA;    int mode1 = wiringPiI2CReadReg8(pwm, MODE1);&#xA;    mode1 = mode1 &amp;amp; ~SLEEP;&#xA;    wiringPiI2CWriteReg8(pwm, MODE1, mode1);&#xA;    usleep(50000);&#xA;    setPWMFrequency(FREQUENCY);&#xA;}&#xA;&#xA;double millis(timespec time)&#xA;{&#xA;    return (time.tv_sec*1000)+(time.tv_nsec/1.0e6);&#xA;}&#xA;&#xA;double intpow( double base, int exponent )&#xA;{&#xA;    int i;&#xA;    double out = base;&#xA;    for( i=1 ; i &amp;lt; exponent ; i++ )&#xA;    {&#xA;        out *= base;&#xA;    }&#xA;    return out;&#xA;}&#xA;&#xA;int main (void)&#xA;{&#xA;&#xA;    initSensor();&#xA;    initPWM();&#xA;&#xA;    cout &amp;lt;&amp;lt; &quot;Calibrating...&quot; &amp;lt;&amp;lt; &quot;\n&quot;;&#xA;    calibrate();&#xA;&#xA;    boost::thread server(getThrottle);&#xA;&#xA;    clock_gettime(CLOCK_MONOTONIC, &amp;amp;then);&#xA;&#xA;    while(true)&#xA;    {&#xA;        motorVal.fill(throttle);&#xA;&#xA;        clock_gettime(CLOCK_MONOTONIC, &amp;amp;now);&#xA;&#xA;        double dt = (millis(now)-millis(then))/1000;&#xA;&#xA;        then = now;&#xA;&#xA;        double accelX = getAccel(0);&#xA;        double accelY = getAccel(1);&#xA;        double accelZ = getAccel(2);&#xA;&#xA;        double hypotX = sqrt(intpow(accelX, 2)+intpow(accelZ, 2));&#xA;        double hypotY = sqrt(intpow(accelY, 2)+intpow(accelZ, 2));&#xA;&#xA;        double accelAngleX = (180/3.14)*(asin(accelY/hypotY));&#xA;        double accelAngleY = (180/3.14)*(asin(accelX/hypotX));&#xA;&#xA;        double errorX = -getGyro(0);&#xA;        double errorY = getGyro(1);&#xA;&#xA;        PX = errorX;&#xA;        PY = errorY;&#xA;&#xA;        IX += errorX*dt;&#xA;        IY += errorY*dt;&#xA;&#xA;        IX = 0.95*IX+0.05*accelAngleX;&#xA;        IY = 0.95*IY+0.05*accelAngleY;&#xA;&#xA;        DX = (errorX-lastErrorX)*dt;&#xA;        DY = (errorY-lastErrorY)*dt;&#xA;&#xA;        lastErrorX = errorX;&#xA;        lastErrorY = errorY;&#xA;&#xA;        double outputX = kP*PX+kI*IX+kD*DX;&#xA;        double outputY = kP*PY+kI*IY+kD*DY;&#xA;&#xA;        add(outputY, 0);//-outputX+&#xA;        add(outputY, 1);//-outputX-&#xA;        add(outputY, 2);//outputX-&#xA;        add(outputY, 3);//outputX+&#xA;&#xA;        setPWM(0, motorVal[0], 12);&#xA;        setPWM(0, motorVal[1], 13);&#xA;        setPWM(0, motorVal[2], 14);&#xA;        setPWM(0, motorVal[3], 15);&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In addition two of the motors seem like they are lagging when I turn the quadcopter fast in one direction. Also for some strange reason the quadcopter seems less responsive to P gain; I have it at 20 in the C++ version and it is working about the same as when I had it at 1.5 in the java version.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After doing some more testing I have determined that reading from the MPU6050 and writing to the PCA9685 board that I am using to control the ESCs is the source of the delay. Does anybody know how to speed this up?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I managed to speed up my code to about 200 Hz by changing the i2c baud rate, but the quadcopter is still thrashing. I have spent hours trying to tune the pid controller, but it doesn't seem to help at all.&lt;/p&gt;&#xA;" OwnerUserId="9220" LastEditorUserId="9220" LastEditDate="2015-03-07T21:06:25.110" LastActivityDate="2015-03-27T14:17:53.913" Title="Raspberry Pi quadcopter thrashes at high speeds" Tags="&lt;quadcopter&gt;&lt;pid&gt;&lt;raspberry-pi&gt;" AnswerCount="5" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="6721" PostTypeId="1" AcceptedAnswerId="6729" CreationDate="2015-03-05T09:20:25.370" Score="0" ViewCount="326" Body="&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/cpwJd.png&quot; alt=&quot;enter image description here&quot;&gt;I and my team have to design a robot using an arduino chip. The objective of the robot is to grab golf balls at a set of golf pins at different heights and pre-defined locations. We couldn't figure out a possible mechanism that could collect the balls and drop them into the trailer except for a robot arm. However, we don't have experience and time in designing a sophisticated system for the arm like recognizing where the ball is and then grabbing it accordingly. What would a feasible option be compared to a non-sophisticated  robot arm?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note:The robot must be autonomous.&lt;/p&gt;&#xA;" OwnerUserId="9216" LastEditorUserId="9216" LastEditDate="2015-03-06T14:55:52.890" LastActivityDate="2015-05-08T14:03:47.487" Title="How feasible is the idea of operating a robotic arm in a non-sophisticated way?" Tags="&lt;arduino&gt;&lt;control&gt;&lt;robotic-arm&gt;" AnswerCount="4" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6722" PostTypeId="2" ParentId="6721" CreationDate="2015-03-05T09:45:49.697" Score="1" Body="&lt;p&gt;Possible options, &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Use image processing, with opencv you can detect object make the arm to hold the object&lt;/li&gt;&#xA;&lt;li&gt;If you are very good in electronics, make this ball to emit RF signal, the strength of signal will increase as we go close to ball, use this info to track ball. You can refer radio transmitter and receiver circuits.  &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="9214" LastActivityDate="2015-03-05T09:45:49.697" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6725" PostTypeId="2" ParentId="3069" CreationDate="2015-03-06T00:14:16.733" Score="1" Body="&lt;p&gt;You have 6 degrees of freedom. Three translational and three rotational. You have linear movements along the xyz axis and rotations around the xyz axis.&lt;/p&gt;&#xA;" OwnerUserId="8838" LastActivityDate="2015-03-06T00:14:16.733" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6726" PostTypeId="2" ParentId="1209" CreationDate="2015-03-06T00:19:15.703" Score="2" Body="&lt;p&gt;I would suggest that you build a rig that constricts the quadcopter to rotating along just one axis. Either roll or pitch. Then you need to tune the roll/pitch controller independently. I would suggest using zeigler nichols to tune the PIDs. Once you tune roll/pitch you can move onto yaw &lt;/p&gt;&#xA;" OwnerUserId="8838" LastActivityDate="2015-03-06T00:19:15.703" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6727" PostTypeId="2" ParentId="6643" CreationDate="2015-03-06T00:32:46.430" Score="2" Body="&lt;p&gt;No. Once you're quad is tilted you are projecting the thrust of the motors at an angle which is not parallel to the z axis causing your quadcopter to move linearly along the x-y plane.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you must hover while tilted, you can use stepper motors to keep the thrust projecting parallel to the z axis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That would be an unusual quad though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;edit: spelling&lt;/p&gt;&#xA;" OwnerUserId="8838" LastEditorUserId="8838" LastEditDate="2018-06-16T16:13:48.017" LastActivityDate="2018-06-16T16:13:48.017" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6729" PostTypeId="2" ParentId="6721" CreationDate="2015-03-06T08:46:27.703" Score="2" Body="&lt;h1&gt;The platform&lt;/h1&gt;&#xA;&lt;p&gt;When I hear&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Easy to do&lt;/li&gt;&#xA;&lt;li&gt;Quick and dirty&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I always think of a &lt;a href=&quot;https://en.wikipedia.org/wiki/Cartesian_coordinate_robot&quot; rel=&quot;nofollow noreferrer&quot;&gt;Cartesian robot&lt;/a&gt; or a &lt;a href=&quot;https://duckduckgo.com/?q=cartesian%20robot&amp;amp;iax=1&amp;amp;ia=images&quot; rel=&quot;nofollow noreferrer&quot;&gt;three axis XYZ mechanism&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;But &lt;em&gt;why&lt;/em&gt; would you want to use this instead of a more &lt;strong&gt;human&lt;/strong&gt; robot arm ?&lt;/p&gt;&#xA;&lt;p&gt;Multiple reasons :&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Way easier to control : Cartesian is somehow more intuitive that cylindrical coordinate systems. You will not have has much math involved and the development time is going to be that quicker.&lt;/li&gt;&#xA;&lt;li&gt;Easier to make.&lt;/li&gt;&#xA;&lt;li&gt;Very effective. Cartesian robots were once the norm and they still are widely use, there is a reason for that&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Using an arduino to control a Cartesian robot is probably going to be more straightforward and easy to make than a robot arm.&lt;/p&gt;&#xA;&lt;p&gt;In case you still want to use an arm, you should start checking out &lt;a href=&quot;https://en.wikipedia.org/wiki/Denavit%E2%80%93Hartenberg_parameters&quot; rel=&quot;nofollow noreferrer&quot;&gt;Denavit-Hartenberg parameters&lt;/a&gt;. Here is &lt;a href=&quot;http://drstienecker.com/tech-332/8-kinematics-of-industrial-robots/&quot; rel=&quot;nofollow noreferrer&quot;&gt;a pretty good explanation&lt;/a&gt; about them. You can still apply it to a Cartesian robot if you just want to expand your knowledge and understand this. After all, it's only a convention.&lt;/p&gt;&#xA;&lt;h1&gt;Now that we have a likely platform lets dive into your problem.&lt;/h1&gt;&#xA;&lt;p&gt;You want to pick up balls and put them in a trailer. Since you &lt;em&gt;don't have to&lt;/em&gt; do any recognition work (you know all the balls locations) it's one thing off of your shoulders. You only want the robot to go to precise locations, on after the other and do its job.&lt;/p&gt;&#xA;&lt;p&gt;Thus the positions should be hard coded. Or you could simple give a file with different position as an argument.&lt;/p&gt;&#xA;&lt;p&gt;Then, depending on what is the support for the balls (a shelve ? just lying on the floor on the floor ?) you could either grab them with &lt;a href=&quot;https://duckduckgo.com/?q=une+pince&amp;amp;iax=1&amp;amp;ia=images&quot; rel=&quot;nofollow noreferrer&quot;&gt;a clip&lt;/a&gt; (sorry for giving you an image there : Google translate told me the word is &lt;em&gt;a clip&lt;/em&gt; but I'm unsure that's the good word) &lt;strong&gt;or&lt;/strong&gt;, push them of a table to fall into a trailer &lt;strong&gt;or&lt;/strong&gt; use a suction cup... It's time to get creative ;) !&lt;/p&gt;&#xA;&lt;p&gt;[&lt;strong&gt;EDIT&lt;/strong&gt; already]&lt;/p&gt;&#xA;&lt;p&gt;I just though about something else that you could do if the balls are on the floor. Why not a mobile base that rolls around and pick up the balls ? That's another feasible cheap possibility. And there is plenty of documentation on this :).&lt;/p&gt;&#xA;&lt;p&gt;I saw your &lt;a href=&quot;https://robotics.stackexchange.com/questions/6715/is-it-possible-for-a-robot-to-navigate-through-predefined-coordinates&quot;&gt;other question&lt;/a&gt; as well so I'm going to comment the answer there to give you my guess on how to do the actual movement from one point to another.&lt;/p&gt;&#xA;" OwnerUserId="1615" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2015-03-06T08:51:59.500" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6730" PostTypeId="2" ParentId="6715" CreationDate="2015-03-06T09:01:57.130" Score="0" Body="&lt;p&gt;@Darth Hodorus answers is great ! But I just like to add some info about the second option.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would definitely go for it and use &lt;a href=&quot;https://en.wikipedia.org/wiki/Dead_reckoning&quot; rel=&quot;nofollow&quot;&gt;dead-reckoning&lt;/a&gt;. It's easy to do if you got the encoders and you have plenty of tutorial on it =).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'll realize that &lt;strong&gt;the&lt;/strong&gt; major problem of D-R is &lt;em&gt;drift&lt;/em&gt;. So you might have to think of a procedure to calibrate the robot each time. For example, with a Cartesian robot it's &lt;em&gt;as easy as&lt;/em&gt; going to a &lt;em&gt;locked position&lt;/em&gt; (a position where the robot can't move anymore i.e min in X, Y and Z) and define it as the (0,0,0) position. Indeed, you don't need to measure this position as you can &lt;strong&gt;mechanically&lt;/strong&gt; find it. &lt;/p&gt;&#xA;" OwnerUserId="1615" LastActivityDate="2015-03-06T09:01:57.130" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6732" PostTypeId="2" ParentId="6721" CreationDate="2015-03-06T14:42:41.053" Score="2" Body="&lt;p&gt;Can you use something like a leaf rake shape to just pick up all the balls, or even a clam shell of leaf rake type 'hands' once you have the general location? &lt;/p&gt;&#xA;" OwnerUserId="9091" LastActivityDate="2015-03-06T14:42:41.053" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6733" PostTypeId="1" CreationDate="2015-03-06T15:07:50.790" Score="2" ViewCount="474" Body="&lt;p&gt;I'm developing a stabilisation system for an 'off-the-shelf' quadcopter by using an Arduino Mega and an IMU. The IMU is reading the angle of the quad, calculating motor commands by using a PID controller and applying them to the motors. It works well when constrained in a test bed, however in reality, although the quad is straight and level, it's drifting to one side because of its recent motor commands correcting the pitch/yaw. Is there any way I can (without using a vision system) keep the quad in one place without drifting?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've looked into obtaining velocity by integrating the acceleration value, however it's extremely noisy and doesn't give a meaningful reading.&lt;/p&gt;&#xA;" OwnerUserId="9230" LastActivityDate="2015-05-12T20:11:32.150" Title="Minimising lateral drift in a PID (Arduino) controlled quadcopter using a 6DOF IMU" Tags="&lt;arduino&gt;&lt;quadcopter&gt;&lt;pid&gt;&lt;imu&gt;&lt;rcservo&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6734" PostTypeId="2" ParentId="6541" CreationDate="2015-03-06T15:42:04.600" Score="0" Body="&lt;p&gt;I am not familiar with PRU or the PRU Linux API, however, I can give you some general advice.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;ol&gt;&#xA;  &lt;li&gt;Is there a significant performance difference between using prussdrv_map_prumem or prussdrv_pru_write_memory to give the PRU(s) access to the pulse count?&lt;/li&gt;&#xA;  &lt;/ol&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Most likely yes. If I understood correctly, &lt;code&gt;prussdrv_map_prumem&lt;/code&gt; gives you direct access to the PRU memory while &lt;code&gt;prussdrv_pru_write_memory&lt;/code&gt; not only does that through a function call, but also has to decode the function arguments at least to know which memory in particular you are writing to.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To know the performance difference, you can put your write operations in an infinite loop, and then for example each 1000 times toggle a GPIO pin. Measure the difference in toggle times with an oscilloscope to see how long 1000 writes took (note that this includes the constant for loop, counter increment, &lt;code&gt;if&lt;/code&gt; and gpio write as well). This should give you some measure of which method is faster and by how much.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But you should note two things. First, if you are controlling once every 10 seconds, performance is very likely not an issue for you. Second, you should be aware of any peculiarities with writing to the PRU memory. It is possible (again, I don't know PRU and I'm talking in general) that certain actions need to be taken in a certain order for the write to happen correctly. If you call the library-provided write function, you can be sure they took care of those peculiarities. If you plan on direct memory access, read the datasheet to know if there are any peculiarities and what they are. You can also look at the source code of the &lt;code&gt;prussdrv_pru_write_memory&lt;/code&gt; function if available.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;ol start=&quot;2&quot;&gt;&#xA;  &lt;li&gt;Would it be better halt the PRU assembly program after has completed the tasks for each pulse count then re-execute it with new values, or keep the PRU program running and poll for a new pulse count to be written in?&lt;/li&gt;&#xA;  &lt;/ol&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If you are planning on doing something useful every 10 seconds, then it's very very energy inefficient to poll instead of halt. Whenever you can halt and be sure somebody will wake you up, by all means do so.&lt;/p&gt;&#xA;" OwnerUserId="158" LastActivityDate="2015-03-06T15:42:04.600" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6735" PostTypeId="2" ParentId="6733" CreationDate="2015-03-06T18:51:06.743" Score="3" Body="&lt;p&gt;Unfortunately, with just an IMU there's virtually no way for your quad to know that it's drifting so it can't stop it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For outdoor flight you can add a GPS to detect the drift. For indoor flight, many people use vision systems to detect the drift. Depending on how close you are to walls, you could also look at ultrasonic range sensors to detect drift.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2015-03-06T18:51:06.743" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6736" PostTypeId="2" ParentId="4903" CreationDate="2015-03-07T00:50:36.127" Score="0" Body="&lt;p&gt;I suggest the worm gear. In our projects we use worm gear for having reliable locking characteristics without draining the batteries. If your only concern is the operation time, you can simply add one more gear to reduce the torque and increase the speed. In that case, you can use the benefits of a reliable locking system and faster operation. It will come with the expense of having a bigger motor and battery though. Keep in mind that vibrations can have a very bad effect on your friction-based lock.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To detect actual position of your derailleur, I suggest using a &lt;a href=&quot;http://en.wikipedia.org/wiki/Rotary_encoder&quot; rel=&quot;nofollow&quot;&gt;rotary encoder&lt;/a&gt;. I don't think you need to have a second feedback sensor on your gear and it will just overcomplicated the problem.&lt;/p&gt;&#xA;" OwnerUserId="9232" LastActivityDate="2015-03-07T00:50:36.127" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6737" PostTypeId="2" ParentId="6733" CreationDate="2015-03-07T01:03:26.950" Score="3" Body="&lt;p&gt;IMUs have accumulating error and can not be a reliable sensors by themselves if you want to measure velocity or even worse, position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I believe your safest bet would be doing a sensor fusion between an IMU and a vision sensor using feature extraction and Kalman filter. Using only a camera can introduce unpredictable errors specially in featureless environments.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The best resources would be finding monocular SLAM(Simultaneous Localization And Mapping) papers.&lt;/p&gt;&#xA;" OwnerUserId="9232" LastActivityDate="2015-03-07T01:03:26.950" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6738" PostTypeId="2" ParentId="6683" CreationDate="2015-03-07T01:23:53.067" Score="0" Body="&lt;p&gt;There are multiple navigation control level in robotics and there exist multiple names for each one. But in general navigation control has two main parts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1- Path planning or trajectory planning: Generating a path between two points with taking parameters other than robot's dynamics and kinematics into consideration. Such as choosing a collision free path or area sweep optimization.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2- Path tracking or actuation control: Controlling actuators of a robot with taking kinematics and dynamics of the robot into consideration to follow the path generated from path planning with minimal error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These concepts can be used for different platforms such as robotic arms, ground vehicles, aerial vehicles, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You need to confirm the applicability of these definitions based on the context, since there are many instances of misusing these phrases.&lt;/p&gt;&#xA;" OwnerUserId="9232" LastActivityDate="2015-03-07T01:23:53.067" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6739" PostTypeId="1" CreationDate="2015-03-07T04:04:42.760" Score="0" ViewCount="109" Body="&lt;p&gt;We have an epilog laser cutter around here and I was wondering if it would possibly work as a base for a 3d printer? Here is a &lt;a href=&quot;https://www.dropbox.com/sh/ioeveoskrt5qc12/AAD4tfmqiSgii4uiq5jQl1BFa?dl=0&quot; rel=&quot;nofollow&quot;&gt;Dropbox photo album&lt;/a&gt; of the laser cutter. I am thinking I will have to get a new control system but I am unsure if I will be able to use the motor controllers or if they are embedded in the current control's board. I am also unsure if it has fine enough control on the z axis but if not that can be modified.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What would be a good head to look at?&#xA;Any other thoughts?&lt;/p&gt;&#xA;" OwnerUserId="9223" LastActivityDate="2015-07-10T19:59:36.753" Title="Turning an epilog laser into a 3d printer?" Tags="&lt;laser&gt;&lt;3d-printing&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6740" PostTypeId="1" AcceptedAnswerId="6798" CreationDate="2015-03-07T21:31:46.463" Score="1" ViewCount="137" Body="&lt;p&gt;I'm trying to understand how to obtain the Kp, Ki, Kd values after finding a combination of K and a that works for me. Do I just expand the equation and take the coefficients? &lt;/p&gt;&#xA;" OwnerUserId="8838" LastActivityDate="2015-03-14T05:17:13.500" Title="In the PID equation K[((s+a)^2)/s] what values correspond to the PID coefficients Kp, Ki, Kd?" Tags="&lt;control&gt;&lt;pid&gt;&lt;tuning&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6741" PostTypeId="1" AcceptedAnswerId="6743" CreationDate="2015-03-08T00:27:45.220" Score="6" ViewCount="382" Body="&lt;p&gt;I am a newbie in Robotics. As far as I know, there're generally two ways to acquire depth information of a scene. One is the stereo vision method which applies two cameras. The other is the RGBD sensors such as Kinect and Primesense. It seems that both methods are in use currently. However, I do not know what are their advantages against each other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think the Kinect is a perfect solution over stereo vision ignoring its expense. So I have two questions here:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Is there advantages of binocular methods over Kinect besides expense?&lt;/li&gt;&#xA;&lt;li&gt;As I know, both the two methods are confined with a limited distance detection range. In real world applications, we sometimes also need depth data at distance. Is there a method that we can acquire or estimate data information at far distance( not considering  laser-based detectors ).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Further more, my application may be a small flight vehicle. Which method and equipment should I choose? Will the traditional binocular camera be too slow for my application?&lt;/p&gt;&#xA;" OwnerUserId="9241" LastEditorUserId="9241" LastEditDate="2015-03-15T07:34:23.620" LastActivityDate="2015-03-15T07:34:23.620" Title="How many methods can I use to acquire depth data?" Tags="&lt;computer-vision&gt;&lt;stereo-vision&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6742" PostTypeId="2" ParentId="6741" CreationDate="2015-03-08T12:17:34.753" Score="0" Body="&lt;p&gt;I'm not familiar with internals of Kinect, but don't these RGBD devices essentially use stereo vision internally?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regardless, stereo vision needs some software to give you RGBD values (there are most likely libraries already available for free), but those devices have that software already written for their particular technology. In the end, the data you get is similar.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding your second question, the farther the distance between the cameras, the more 3D you can see. So if you go with two cameras, the advantage is that you can always adjust their distance based on how far your target is. Xtion, Kinect and similar technologies are optimized for a very particular scenario (recognizing people in front of the TV withing a couple of meters), so of course they are only suitable if your conditions are similar.&lt;/p&gt;&#xA;" OwnerUserId="158" LastActivityDate="2015-03-08T12:17:34.753" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6743" PostTypeId="2" ParentId="6741" CreationDate="2015-03-08T12:36:02.727" Score="3" Body="&lt;p&gt;Actually kinect sensors are similar to stereo-cameras. They are made up of two devices, an IR emitter and a IR receiver. The emitter projects a light-dots pattern of known shape and size, while the other device receives the actual reflected dots. From the deformation of the pattern is possible to find out depth, but the maths behind it, as far as I know, is the same of stereo triangulation with known correspondences (see &lt;a href=&quot;https://www.youtube.com/watch?v=uq9SEJxZiUg&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt; video as an example).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main disadvantages of kinect when compared to stereo-camera systems are:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;it does not work outdoors&lt;/li&gt;&#xA;&lt;li&gt;it has a range of a few meters (less than 8m). &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Stereo-cameras, on the contrary, work outdoors. Their range depends on the baseline, i.e. the distance between the cameras: the higher it is, the farther are the points that can be triangulated. However, most of commercial stereo-cameras, with baselines of few cm, have an accuracy of a few meters (see for example &lt;a href=&quot;http://vislab.it/products/3dv-stereo-system/&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt; commercial stereo device). &#xA;You can build yourself a stereo-rig to match the accuracy you need, but if you want good accuracy the device will not be cheap if compared to a kinect (depends mostly on the cameras you think to buy) and will cost you time to set up.&#xA;Finally, if you have to triangulate very far points, then you probably need to use a Structure from Motion algorithm (see Wikipedia for a quick definition).&lt;/p&gt;&#xA;" OwnerUserId="2741" LastActivityDate="2015-03-08T12:36:02.727" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6745" PostTypeId="2" ParentId="6720" CreationDate="2015-03-08T18:34:37.143" Score="1" Body="&lt;p&gt;Rasbian on Raspberry pi is not real time OS, when u try to read some value due to some processing factors there is a chance that values are read late and thus the overall real-time control does not occur which is very crucial for a quadcopter project. So it would be better to connect the mpu6050 and pwm out to a microcontroller rather than using Pi. You can use real time OS on Raspberry pi like FreeRTOS and ChibiOS/RT. Or instead attach a real-time hardware to serial port to make it real-time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But for your case the trashing maybe caused due to incorrect PID values. Maybe you for got to put a -ve sign somewhere in the code. Please check this article clearly to know the correct -ve sign placements in code : &lt;a href=&quot;https://ghowen.me/build-your-own-quadcopter-autopilot/&quot; rel=&quot;nofollow&quot;&gt;How to build your own Quadcopter's Flight Controller&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But from my experience I would suggest you to trash Raspberry Pi for Quadcopter project since it might get heavy once u use a separate real-time unit, microcontroller and GPIO extensions for using more PWM pins. So instead of adding all those hardwares I would prefer you to use BeagleBone Back since it has an inbuilt Programmable real-time units that is you can use the 1GHz BBB processor for control logic and also its 2 independent PRU's to read PPM values from RC receiver and send PWM values to ESC's and it also has enough GPIO pins to read PPM and send PWM outputs to upto 12 pins. Check out &lt;a href=&quot;https://erlerobotics.com/blog/erle-brain/&quot; rel=&quot;nofollow&quot;&gt;erle robot Project&lt;/a&gt; which is an Open Hardware/Open Source quadcopter project using BBB running on ROS.&lt;/p&gt;&#xA;" OwnerUserId="8995" LastActivityDate="2015-03-08T18:34:37.143" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6746" PostTypeId="2" ParentId="6541" CreationDate="2015-03-08T19:07:51.253" Score="1" Body="&lt;p&gt;I liked your choice for using BBB for your stepper motor driving project. BBB is the best open source hardware currently available to accelerate your stepper motor speed to upto 200Mhz precision which is like 15 Times faster than what we can get from Arduino or 12MHz Microcontroller. I used PyPruss python Library for my PRU based project where I coded my PRU program in ARM Assembly Language and generated the binary .bin file using PyPruss python Library. Here is an article which best suits for your project &lt;a href=&quot;http://hipstercircuits.com/accelerated-stepper-motors-on-beaglebone/&quot; rel=&quot;nofollow&quot;&gt;Accelerate Stepper Motor on BBB using Pypruss&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can use the same thing using C++ PRU library, here are some example Assembly code which I wrote for my project: &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/antodoms/beagle-copter/blob/master/PruProxy.cpp&quot; rel=&quot;nofollow&quot;&gt;C++ code to send PWM values to the shared memory (Memory shared by processor and PRU's)&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/antodoms/beagle-copter/blob/master/test/PWMout_PRU/Pwmout.p&quot; rel=&quot;nofollow&quot;&gt;Assembly code to read values from shared memory and generate realtime PWM values using PRU&lt;/a&gt; &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Feel free to explore the repository.&lt;/p&gt;&#xA;" OwnerUserId="8995" LastEditorUserId="10596" LastEditDate="2016-09-30T13:19:44.863" LastActivityDate="2016-09-30T13:19:44.863" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6747" PostTypeId="2" ParentId="4540" CreationDate="2015-03-08T21:22:59.900" Score="2" Body="&lt;p&gt;This would not be a good idea. As you can see in the specs of your sensor, it has a maximum range of 50mm. It's going to give you lots of faulty outputs if you try to use it for larger distances. My suggestion is to use a line sensor as a line sensor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Three types of sensors are widely used as proximity sensors:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;IR sensors:&lt;/strong&gt; Omits IR pulses and receives the reflection. The distance is calculated based on triangulation.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;em&gt;Pros&lt;/em&gt;:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Very Affordable.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;em&gt;Cons&lt;/em&gt;:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Not a good option for outdoors, because of high IR level in sunlight.&lt;/li&gt;&#xA;&lt;li&gt;It has a noticeable lower range. For example, &lt;a href=&quot;https://www.sparkfun.com/datasheets/Components/GP2Y0A21YK.pdf&quot; rel=&quot;nofollow&quot;&gt;GP2Y0D21YK&lt;/a&gt; does not see obstacles closer than 10 cm.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Sonar(ultrasonic) sensors:&lt;/strong&gt; Sends sound pulses and receives the echo. The distance is calculated based on time of travel.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;em&gt;Pros&lt;/em&gt;:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Affordable.&lt;/li&gt;&#xA;&lt;li&gt;Can be used in outdoor environment.&lt;/li&gt;&#xA;&lt;li&gt;More accurate than IR sensor with less noise.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;em&gt;Cons&lt;/em&gt;:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Does not work very well with sound absorbing objects.&lt;/li&gt;&#xA;&lt;li&gt;Might see ghost objects, because of receiving response after multiple reflections of the sound wave.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;LiDAR (laser range finder):&lt;/strong&gt; Sends near IR, visible, or UV light pulses and measures the time of travel. The sensors come in one, two, and three dimensional.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;em&gt;Pros&lt;/em&gt;:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Very Accurate.&lt;/li&gt;&#xA;&lt;li&gt;Works with a wide range of surfaces, outdoor or indoor.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;em&gt;Cons&lt;/em&gt;:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Not as affordable as the other two.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="9232" LastActivityDate="2015-03-08T21:22:59.900" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6748" PostTypeId="2" ParentId="6741" CreationDate="2015-03-08T21:56:06.050" Score="1" Body="&lt;p&gt;For gathering depth information and in general for mapping, there is no perfect solution yet. You need to have a good idea about application before choosing a sensor. Try to narrow down your options. Are you going to use it indoor or outdoor? How fast you want the depth measurements (you can use a single camera, but it will take around 10 seconds to generate a good point cloud)? What is the range? How accurate you want it to be (Lidar)? What resolution you need (e.g. 320x240)? What is your processing capabilities? Weight limits? Are you going to have vibration (no Lidar then)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Configuration of stereo-vision sensor directly affects the range and accuracy. You can increase the distance between two cameras to get more reliable measurements for larger distances. It's not too difficult to make your own stereo-vision sensor. The only tricky part is two levels of calibration. One is for flatting the recorded images of each camera and the other is calculating geometric translation relation between two cameras. You can also add more cameras to your system. For example, there is a PointGrey sensor that uses 3 cameras using the same principle used in stereo-vision.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Time-of-flight cameras are generally smaller and lighter. Faster to process and give more information (e.g. color). They are not good options for outdoor or applications requiring long ranges. Emitted light might reflect more than once (does not happen too often like in sonar sensors) and give inaccurate measurements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Speaking of sonars, you might want to look at &lt;a href=&quot;http://en.wikipedia.org/wiki/Side-scan_sonar&quot; rel=&quot;nofollow&quot;&gt;side-scan sonars&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="9232" LastActivityDate="2015-03-08T21:56:06.050" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6749" PostTypeId="2" ParentId="6740" CreationDate="2015-03-08T22:10:20.930" Score="0" Body="&lt;p&gt;The general PID form in Laplace domain is:&#xA;$$&#xA;G(s)=\frac{K_ds^2+K_ps+K_i}{s}&#xA;$$&#xA;The equation you've mentioned has a $Ks^3$ in the numerator. Hence, it cannot be transformed into PID form unless $K=0$, but that does not do you any good I guess.&lt;/p&gt;&#xA;" OwnerUserId="9232" LastActivityDate="2015-03-08T22:10:20.930" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6750" PostTypeId="1" AcceptedAnswerId="6751" CreationDate="2015-03-08T22:58:41.950" Score="5" ViewCount="2193" Body="&lt;p&gt;I'm building a submersible ROV, so I need a way to navigate. So using a compass would help but this brings up the question, does an electronic compass work underwater?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My thoughts are the water might act as a faraday cage, and therefore interfere with the magnetic field. Therefore it might not even work. Maybe a gyroscope might be a better solution.&lt;/p&gt;&#xA;" OwnerUserId="9245" LastActivityDate="2015-03-13T10:00:19.740" Title="Does an electronic compass work underwater" Tags="&lt;sensors&gt;&lt;compass&gt;" AnswerCount="4" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6751" PostTypeId="2" ParentId="6750" CreationDate="2015-03-08T23:11:32.723" Score="4" Body="&lt;p&gt;A compass will work just fine under water, I am an avid scuba diver and a compass is a standard piece of kit for navigating.&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2015-03-08T23:11:32.723" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6752" PostTypeId="2" ParentId="6701" CreationDate="2015-03-08T23:21:36.900" Score="4" Body="&lt;p&gt;Common solutions are from those who fly FPV (First Person View), they use simple analog cameras connected to 900 MHz, 2.4 GHz, and 5 GHz the lower the frequency generally the longer the transmission distance. With a 1 W 900 MHz transmitter with a cloverleaf antenna (a common antenna type), and a 18 dB gain patch antenna directed at your craft you can easily get 5+ miles line of site. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your asking about large commercial UAV systems, e.g. the predator, they use satellites to transmit and receive telemetry and video.&lt;/p&gt;&#xA;" OwnerUserId="7066" LastEditorUserId="9176" LastEditDate="2016-03-24T09:26:21.557" LastActivityDate="2016-03-24T09:26:21.557" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6753" PostTypeId="2" ParentId="2998" CreationDate="2015-03-08T23:25:26.043" Score="2" Body="&lt;p&gt;The reason for this is that when attempting to hold a position between positions, you are not only fighting the torque from your load but that generated by the magnets in your stepper more info &lt;a href=&quot;http://www.micromo.com/microstepping-myths-and-realities&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2015-03-08T23:25:26.043" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6754" PostTypeId="1" CreationDate="2015-03-09T07:28:05.963" Score="1" ViewCount="234" Body="&lt;p&gt;I'm working on the dynamics model of a RRRR articulated robot, I'm following Euler-Lagrange approach and developing my code in m-file in matlab; I'm looking for dynamic model of this form: $$&#xA;D(q) \ddot{q} + C(q,\dot{q})\dot{q}+ g(q) = \tau&#xA;$$&#xA;where $D$ and $C$ are $4 \times4$ matrices and $g$ and $\tau$ (torque) are $4\times1$ vectors; by formulating the kinetic and potential energies;;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is that, I'm getting very long equations, and the term in $D$ matrix are very huge and nonlinear, involving sin and cos; I'm talking about a several pages per equation;&#xA;After I published the code - 7 pages - and the output I got around 45 pages in total;&#xA;I searched &lt;a href=&quot;http://compgroups.net/comp.soft-sys.matlab/very-long-equations-of-motion-simulink/860201&quot; rel=&quot;nofollow&quot;&gt;around&lt;/a&gt; there was some guy he faced the same problem before, but there was no helpful proposal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any Suggestions ?? &lt;/p&gt;&#xA;" OwnerUserId="9087" LastEditorUserId="9087" LastEditDate="2016-05-10T04:50:57.413" LastActivityDate="2017-06-28T16:23:51.497" Title="Why I'm getting very long terms in the inertia matrix (or dynamics model) of the robot using matlab script?" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;dynamics&gt;&lt;matlab&gt;" AnswerCount="4" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6755" PostTypeId="2" ParentId="4410" CreationDate="2015-03-09T08:52:58.727" Score="2" Body="&lt;p&gt;Your code won't work as you expect. The problem is that you use only one external interrupt, when you need two - one for each encode. With only one interrupt you will miss pulses from the second motor (for example when you brake one motor and still rotate the second to make a turn). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you would like even better resolution, you can use two additinal interrupts, so you will have one for each encoder phase. If you are running short on external interrupt lines of uC, check out XOR logic ICs, or even dedicated quadrature decoders. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;BTW. Lenght of the edge of a circle is circumference, not circumstance :)&lt;/p&gt;&#xA;" OwnerUserId="7360" LastActivityDate="2015-03-09T08:52:58.727" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6756" PostTypeId="2" ParentId="6720" CreationDate="2015-03-09T10:11:37.867" Score="1" Body="&lt;p&gt;Actually, Rasbian can be turned into a real time OS. Before switching to ChibiOS and the like, you could give a try to Linux RT patch. There is a simple &lt;a href=&quot;http://docs.emlid.com/Downloads/Real-time-Linux/&quot; rel=&quot;nofollow&quot;&gt;tutorial&lt;/a&gt; how to set up a RT kernel on RPi. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the issue you're observing is caused by the scheduler jitter, the problem might go away.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've managed to run a copter on 100Hz without a significant jitter. &lt;/p&gt;&#xA;" OwnerUserId="7765" LastActivityDate="2015-03-09T10:11:37.867" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6757" PostTypeId="2" ParentId="6741" CreationDate="2015-03-09T16:25:21.700" Score="2" Body="&lt;p&gt;I know you said &quot;not considering laser based detectors,&quot; but I am assuming you are discounting them due to price? There is a &lt;a href=&quot;https://www.sparkfun.com/products/13167&quot; rel=&quot;nofollow&quot;&gt;LIDAR unit&lt;/a&gt; available from sparkfun for less than $100 which claims to have a range to 40m. That's about half the price of a Kinect sensor. AFAIK, this unit only measures range to a single point, I'm not sure how easy it would be to implement it as a rastering scanner.&lt;/p&gt;&#xA;" OwnerUserId="1075" LastActivityDate="2015-03-09T16:25:21.700" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6759" PostTypeId="2" ParentId="6754" CreationDate="2015-03-09T17:11:02.097" Score="3" Body="&lt;p&gt;It really doesn't sound very unexpected for your equations to become this long. Something that might help a little, is using &lt;a href=&quot;http://www.mathworks.com/help/symbolic/sym.html#zmw57dd0e112213&quot; rel=&quot;nofollow&quot;&gt;assumptions&lt;/a&gt; for defining symbolic variables.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;x = sym('x','real');&#xA;y = sym('y','positive');&#xA;z = sym('z','integer');&#xA;t = sym('t','rational');&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="9232" LastActivityDate="2015-03-09T17:11:02.097" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6760" PostTypeId="2" ParentId="6516" CreationDate="2015-03-10T15:33:55.017" Score="2" Body="&lt;p&gt;One simple alternative is to attach the spring in such a way that it doesn't pull the device closed when it is all the way open (see diagram below). In this fashion there is no torque acting on the device, so the motor will not need to be running at this point.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that this will require a small torque back in the original direction in order to close.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/l23aV.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="9137" LastActivityDate="2015-03-10T15:33:55.017" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6761" PostTypeId="2" ParentId="6516" CreationDate="2015-03-10T16:36:11.430" Score="1" Body="&lt;p&gt;One possible option would be a linear solenoid. I would get a push type (Push solenoid's will push a rod out when energized and the builtin spring will auto retract it when the power is removed.)&lt;/p&gt;&#xA;" OwnerUserId="9223" LastActivityDate="2015-03-10T16:36:11.430" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6762" PostTypeId="2" ParentId="6750" CreationDate="2015-03-10T21:41:08.997" Score="0" Body="&lt;p&gt;It actually works very good to a level that you can use fluxgate sensors for &lt;a href=&quot;http://en.wikipedia.org/wiki/Magnetic_anomaly&quot; rel=&quot;nofollow&quot;&gt;magnetic anomaly&lt;/a&gt; mapping. As far as I know, it has been &lt;a href=&quot;http://www.bartington.com/Literaturepdf/Case%20Studies/Mag648%20in%20Underwater%20Glider%20Navigation.pdf&quot; rel=&quot;nofollow&quot;&gt;done for Slocam&lt;/a&gt; (underwater glider) before. The map can be used for relative navigation of underwater systems. In your case, you can &lt;a href=&quot;https://www.researchgate.net/publication/261155923_Study_on_the_Design_and_Algorithm_of_INSMCPDR_Integrated_Navigation_Method_for_Underwater_Glider&quot; rel=&quot;nofollow&quot;&gt;combine a magnetometer and an IMU for underwater navigation&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="9232" LastActivityDate="2015-03-10T21:41:08.997" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6763" PostTypeId="2" ParentId="6720" CreationDate="2015-03-10T21:44:52.927" Score="0" Body="&lt;p&gt;I hope this won't sound too harsh but from my experience building a quadcopter and asking questions here this is exactly the kind of question which won't get you an answer that you'll find helpful. From what you describe there are far too many potential points of failures in your system for the community to contribute effectively. The people who have already commented with PID tuning tips or questions about the speed of your loop are making the huge assumption that everything else you have not talked about works.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would suggest you test the different software modules independently and try to narrow down the problem. I appreciate you said you tested your sensors independently and they worked fine. Is that all you tested? How well does your attitude estimation algorithm work? What's its precision and its response time like? Does it still work when the motors spin (is it vibrations tolerant)? Can you control your motors directly (not through the PID)? What's their response time? Any glitches? What's the structure of your PID controllers: angle stabilisation, rate stabilisation, cascaded rate then angle stabilisation? Chances are you'll find the solution to your problem while answering one of these questions. And even if you don't you would then be able to ask a much more precise and answerable question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Best of luck with your project in any case: quadcopters are hard!&lt;/p&gt;&#xA;" OwnerUserId="4249" LastActivityDate="2015-03-10T21:44:52.927" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6764" PostTypeId="1" AcceptedAnswerId="6803" CreationDate="2015-03-10T23:08:12.563" Score="2" ViewCount="2068" Body="&lt;p&gt;I'm currently calibrating the MPU6050 chip using an arduino mega 2560. I am using the J Rowberg 12c dev libraries. I can get it to print raw accelerometer and gyroscpe values (very unstable, wildly changing values). In the digital motion processing chip library, I can get it to print euler angles, quaternions, real world acceleration and actual acceleration but there is no option to get gyroscope data. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;can I use the DMP library to get gyro data or is it only possible to get raw unprocessed gyro values?&lt;/p&gt;&#xA;" OwnerUserId="8838" LastActivityDate="2015-04-15T01:58:11.030" Title="How do I get MPU 6050 gyroscope data using &quot;MPU6050_6Axis_MotionApps20.h&quot; library" Tags="&lt;arduino&gt;&lt;imu&gt;&lt;accelerometer&gt;&lt;gyroscope&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6765" PostTypeId="1" AcceptedAnswerId="6774" CreationDate="2015-03-11T12:07:48.033" Score="0" ViewCount="497" Body="&lt;p&gt;my question is general so please bear with me. I'm now interested in buying a quadcopter and develop some functions that it does for example an android app to control it, or objects detection. &#xA;So my question is what are the available quadcopters which has a software that allows me to do such things not just a flying toy?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S: I'm asked to buy a kit within 600$ and not build it by myself&lt;/p&gt;&#xA;" OwnerUserId="2525" LastActivityDate="2015-03-12T06:28:28.970" Title="Open Source software for Quadcopters" Tags="&lt;quadcopter&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6766" PostTypeId="2" ParentId="4583" CreationDate="2015-03-11T16:43:04.683" Score="3" Body="&lt;p&gt;This representative sample of what's out there may give you some idea of what's out there at various price points:&#xA;&lt;img src=&quot;https://i.stack.imgur.com/Oqv0H.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, you're talking several thousand dollars for an outdoor unit with 10's to 100's of meter range (as of March 2015). The chart is from a &lt;a href=&quot;http://www.mcgurrin.com/robots/?p=302&quot; rel=&quot;nofollow noreferrer&quot;&gt;blog article&lt;/a&gt; I wrote on the topic. Google used a $70-80K unit on their original vehicles. The 2nd to last item on the chart above, while not as capable as that unit, is advertised as a unit for vehicle automation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sophisticated stereo cameras with image processing may be an alternative, and may be cheaper, but you're still talking significant $, not just a webcam and OpenCV.  &lt;/p&gt;&#xA;" OwnerUserId="58" LastActivityDate="2015-03-11T16:43:04.683" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6767" PostTypeId="1" CreationDate="2015-03-11T17:55:30.530" Score="3" ViewCount="268" Body="&lt;p&gt;I have to measure the frequency of a little circle in rotation. You can image this circle flying in air, because this circle can't touch anything that is not in rotation. So I can't use some simple trick to count the number of complete rotation in an amount of time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I supposed my only chance was to use an accelerometer, a gyroscope, or a magnetometer. The accelerometer can detect the centripetal acceleration, and the gyroscope and the magnetometer with some calculus directly the frequency.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is the high frequency of this circle (can reach up to 50 Hz). Doing some simple calculus we know we need a gyroscope that can measure big angular velocity: 50*360°/s = 18.000°/s. Also the accelerometer need big range of values (the radius of the circle is only 5 cm): w (angular velocity) = (2 * 3,14) / (1/50) = 314 rad/sec acc_centr = w^2 * R = 98596 * 0,05 ~ 5000m/s^2 ~ 500g&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I have seen there are some accelerometer or gyroscope for industrial purposes with enough range, but my question is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How I can understand if a magnetometer can used is this kind of application? Considering there is no magnetic field near the circle, can a magnetometer be used to measure quickly change in inclination? In the datasheet i can read how ofter the sensor can communicate with my arduino, but nothing about how quick the rotation can be.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is the reason that a magnetometer don't have the limits of a gyroscope or an accelerometer?&lt;/p&gt;&#xA;" OwnerUserId="9260" LastEditorUserId="350" LastEditDate="2015-03-12T16:20:19.833" LastActivityDate="2015-04-13T21:32:18.043" Title="Magnetometer to measure high angular velocity in small object" Tags="&lt;electronics&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6768" PostTypeId="2" ParentId="6765" CreationDate="2015-03-11T19:33:39.353" Score="0" Body="&lt;p&gt;On the controller side, the following is a great starting point: &lt;a href=&quot;http://ros.org/&quot; rel=&quot;nofollow&quot;&gt;http://ros.org/&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For drone itself, checkout &lt;a href=&quot;http://diydrones.com/group/rosusergroup&quot; rel=&quot;nofollow&quot;&gt;http://diydrones.com/group/rosusergroup&lt;/a&gt; as they will know how to best integrate the controller with an off-the-shelf drone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cheers,&lt;/p&gt;&#xA;" OwnerUserId="1575" LastActivityDate="2015-03-11T19:33:39.353" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6769" PostTypeId="2" ParentId="6754" CreationDate="2015-03-11T19:37:07.260" Score="2" Body="&lt;p&gt;When working with robotic matrices, such as transforms or dynamics, long-long-long equations are usually expected when everything is numerical. Using a symbolic platform such as MuPad or Maple will allow you to easily simplify the matrices symbolically (usually by using trigonometric identities).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cheers,&lt;/p&gt;&#xA;" OwnerUserId="1575" LastActivityDate="2015-03-11T19:37:07.260" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6770" PostTypeId="2" ParentId="6739" CreationDate="2015-03-11T19:43:37.800" Score="0" Body="&lt;p&gt;Great idea for a repurpose! Check out ReplicatorG or ROS robotic control for the controller side. For the mechanical parts, I've worked with &lt;a href=&quot;http://folger-technologies-llc.myshopify.com/&quot; rel=&quot;nofollow&quot;&gt;http://folger-technologies-llc.myshopify.com/&lt;/a&gt; before, and their support was great.&lt;/p&gt;&#xA;" OwnerUserId="1575" LastActivityDate="2015-03-11T19:43:37.800" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6771" PostTypeId="2" ParentId="5188" CreationDate="2015-03-11T21:17:20.373" Score="1" Body="&lt;p&gt;The following people have used a compound eye for the development of their insect inspired rotor craft to demonstrate panoramic optical flow methods without the use of accelerometers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://iopscience.iop.org/1748-3190/10/2/026003/pdf/1748-3190_10_2_026003.pdf&quot; rel=&quot;nofollow&quot;&gt;&lt;strong&gt;Flying over uneven moving terrain based on optic-flow cues without&#xA;any need for reference frames or accelerometers&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The sensors are described here; &lt;a href=&quot;http://www.curvace.org/&quot; rel=&quot;nofollow&quot;&gt;&lt;strong&gt;Curvace&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Paper here; &lt;a href=&quot;http://www.pnas.org/content/110/23/9267&quot; rel=&quot;nofollow&quot;&gt;&lt;strong&gt;Miniature curved artificial compound eyes&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Video here; &lt;a href=&quot;https://www.youtube.com/watch?feature=player_embedded&amp;amp;v=xKi5wSpslPE&quot; rel=&quot;nofollow&quot;&gt;https://www.youtube.com/watch?feature=player_embedded&amp;amp;v=xKi5wSpslPE&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With a detailed description of the fabrication here;&#xA;&lt;a href=&quot;http://www.pnas.org/content/suppl/2013/05/17/1219068110.DCSupplemental/pnas.201219068SI.pdf&quot; rel=&quot;nofollow&quot;&gt;&lt;strong&gt;Supporting Information&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7680" LastEditorUserId="7680" LastEditDate="2015-03-11T21:50:18.210" LastActivityDate="2015-03-11T21:50:18.210" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6772" PostTypeId="1" AcceptedAnswerId="6778" CreationDate="2015-03-11T23:05:30.440" Score="0" ViewCount="96" Body="&lt;p&gt;I am currently doing a project for school and we are told that we must use a micro controller that ends up controlling some external hardware, now i know the crazyflie is controlling the motors which counts as external hardware but is it a micro controller? My second question is i want to purchase the kit so i can assembly it myself however I saw that you can use an expansion board so you need not solder and also i plan on not buying a remote its possible to control the crazyflie via my iPhone correct? I would appreciate it if someone could answer my questions. Thank you in advance&lt;/p&gt;&#xA;" OwnerUserId="9261" LastActivityDate="2016-09-02T14:15:00.653" Title="Is the crazyflie control board considered a microcontroller" Tags="&lt;quadcopter&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6774" PostTypeId="2" ParentId="6765" CreationDate="2015-03-12T06:28:28.970" Score="0" Body="&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;ROS is not the Jack of all trades when there is a question related to robotics. It is just a frame to help you handle package communication between different nodes(functions).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You can buy a kit of 3D-robotics' quadcopter. Their APM flight controller is an open-sourced control system based on Arduino and you can modify its framework and download it into the quadcopter. All source are available in their &lt;a href=&quot;https://github.com/diydrones/ardupilot&quot; rel=&quot;nofollow&quot;&gt;github&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If you don't want to pay too much attention on low-level development, which means the control control algorithm itself, and you want to develop some applications based on the quadcopter. It is another good choice to try AR.Drone, which provides many APIs.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="4514" LastActivityDate="2015-03-12T06:28:28.970" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6775" PostTypeId="2" ParentId="6560" CreationDate="2015-03-12T06:40:47.190" Score="0" Body="&lt;p&gt;No, the fingers are not working as GND or other things, they just press the switch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The switch inside should look like this: (or exchange switch and R if pin is init as LOW base)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;----- VCC&#xA;   |&#xA;   R&#xA;   |-----pin of Arduino&#xA;   |&#xA;   \ the switch&#xA;   |&#xA;   |&#xA;  _|_  GND&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before you press the switch, the voltage of pin is VCC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After you press the switch, the voltage of the Arduino pin is 0, since there is a resistance R.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Arduino uses a ADC (Analog to Digital Converter) to detect the signal based on the input voltage, then it knows there was a HIGH signal and then it is LOW. So the system do something based on the change.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for the pressure sensor, it works as a sliding rheostat and doesn't go through the ADC, so it is a continuous analog signal which can express the pressure value.&lt;/p&gt;&#xA;" OwnerUserId="4514" LastActivityDate="2015-03-12T06:40:47.190" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6776" PostTypeId="1" AcceptedAnswerId="6786" CreationDate="2015-03-12T08:29:54.090" Score="0" ViewCount="408" Body="&lt;p&gt;I'm very passionate about robots from my childhood.I'm a java developer.&#xA;I love sci-fi movies.I have a little bit knowledge in embedded systems and electronics.&#xA;My ambition is to build a robot like Jarvis (In Iron Man Movie).Which is a voice controlled robot.I would like to implement that in my house as a home automation system.It would take voice as input and take appropriate action.. Please help me to do this. &#xA;Any kind of help is appreciated..&lt;/p&gt;&#xA;" OwnerUserId="9257" LastActivityDate="2015-03-13T07:14:35.640" Title="Iron man Jarvis like robot" Tags="&lt;mobile-robot&gt;&lt;quadcopter&gt;&lt;microcontroller&gt;&lt;mechanism&gt;&lt;embedded-systems&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="6777" PostTypeId="2" ParentId="6560" CreationDate="2015-03-12T16:08:56.473" Score="2" Body="&lt;p&gt;According to &lt;a href=&quot;http://sourceforge.net/projects/echanter/files/&quot; rel=&quot;nofollow noreferrer&quot;&gt;his code&lt;/a&gt;, he seems to be taking advantage of the fact that simply touching the digital input pins with your finger will cause a measurable change in signal:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/* Read the relevant pin registers and construct a single byte 'map'   */&#xA;/* of the pin states. Touched pins will be HIGH, untouched pins LOW    */&#xA;&#xA;&#xA;byte fb = 0;&#xA;byte fmap = 0;  //D2-D7 (bits 2,3,4,5,6,7)&#xA;fmap = PIND &amp;gt;&amp;gt; 2;  // get rid of lowest 2 bytes,  fill top 2 bytes&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In other words, there are no moving parts in his design.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not sure of the exact circuitry that would allow this to work on an the Arduino, but it would be something along the lines of this AC hum touch switch:&#xA;&lt;a href=&quot;http://hackaday.com/2011/02/04/touch-sensors-overview-theory-and-construction/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/SsCN8.jpg&quot; alt=&quot;AC hum touch switch&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Essentially, that the presence of a finger (which is a conductor) creates just enough change in the circuit to flip the digital bit.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2015-03-12T16:08:56.473" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6778" PostTypeId="2" ParentId="6772" CreationDate="2015-03-12T16:10:50.220" Score="2" Body="&lt;p&gt;It sounds like your school intends for you to &lt;em&gt;program&lt;/em&gt; the microcontroller, in which case the crazyflie -- an off-the-shelf product -- would not be sufficient.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2015-03-12T16:10:50.220" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6779" PostTypeId="2" ParentId="6739" CreationDate="2015-03-12T16:16:03.117" Score="1" Body="&lt;p&gt;Anything's possible in the world of fabrication and computers, the question is how much time, effort, and money it will cost you.  If you haven't built a 3D printer from scratch before, then it might not be a good idea to attempt this; you would have no way to tell whether any problems you experience would be caused by your own design or the existing laser cutter components.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2015-03-12T16:16:03.117" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6780" PostTypeId="2" ParentId="6720" CreationDate="2015-03-12T16:33:44.433" Score="1" Body="&lt;p&gt;You are using a PID incorrectly.  You are reading sensor values that in terms of acceleration, but you are using that to correct an error in velocity (without conversion).  Your PID should be reading and controlling the same measurement -- velocity vs velocity, acceleration vs acceleration, or position vs position.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The behavior you are seeing can be explained simply by $$&#xA;a = \frac{dv}{dt}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At low velocities, $dv$ can only be as high as your maximum velocity, so your system appears to work properly within that bound.  But as you increase the maximum velocity, your acceleration can spike much higher.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is simply a logic error in your code played out in physical space.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2015-03-12T16:33:44.433" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6781" PostTypeId="2" ParentId="6750" CreationDate="2015-03-12T16:35:41.440" Score="0" Body="&lt;p&gt;A compass will work fine.  However, you will find that without a way to measure your velocity (speed-over-ground) in both forward and sideways directions, you will have a tough time keeping track of where you are.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2015-03-12T16:35:41.440" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6782" PostTypeId="1" CreationDate="2015-03-12T21:56:39.030" Score="2" ViewCount="1505" Body="&lt;p&gt;I'm trying to send some commands to the Roomba. However is behaving strange.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the manual that I'm using.&#xA;&lt;a href=&quot;http://www.irobot.com/~/media/MainSite/PDFs/About/STEM/Create/create_2_Open_Interface_Spec.pdf&quot; rel=&quot;nofollow&quot;&gt;http://www.irobot.com/~/media/MainSite/PDFs/About/STEM/Create/create_2_Open_Interface_Spec.pdf&lt;/a&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;First of all. I have consulted several manuals, some of them say that the default baudrate is 115200, however it works for me at 57200. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm trying to get a response from the Roomba sending the following comand &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Examples:&#xA;• To turn on iRobot Create’s Play LED only:&#xA;128 132 139 2 0 0&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the Roomba goes crazy and start going around. Any idea what's happening or what I'm not doing? Or what should I do first? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you. &lt;/p&gt;&#xA;" OwnerUserId="9271" LastEditorUserId="110" LastEditDate="2015-03-22T19:20:42.003" LastActivityDate="2015-03-24T21:29:28.420" Title="Sending commands to Roomba from PC" Tags="&lt;irobot-create&gt;&lt;roomba&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6783" PostTypeId="1" CreationDate="2015-03-13T00:41:52.403" Score="1" ViewCount="155" Body="&lt;p&gt;Look at this robot here &lt;a href=&quot;http://www.meccanotec.com/step781b.JPG&quot; rel=&quot;nofollow&quot;&gt;http://www.meccanotec.com/step781b.JPG&lt;/a&gt;&#xA;I can see rods which have a lot of holes and planes which also have holes. This seems to be a way to create flexibility in how the things are connected together to create the final robot. Is there a name for this type of equipment, metals with holes. Where can I get it? I am aware of people using lego blocks to create robots, but am not sure about what these metal rods and plates with holes are.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a free application in which I can design a mechanical structure like the one in the image and add gears and then simulate it to see how it will rotate and bend should a real robot like that be created?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What would be the quickest way to create a robot like this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: Thankyou; Frank and lanyusea. If one wants to do a simulation of the mechanical model, in others words play with the robot on the computer before actually building it (with all those gears in action), which software is most suitable for that purpose?&lt;/p&gt;&#xA;" OwnerUserId="4125" LastEditorUserId="4125" LastEditDate="2015-03-15T18:09:10.080" LastActivityDate="2015-03-15T18:09:10.080" Title="What equipment has been used to design this robot" Tags="&lt;robotic-arm&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6784" PostTypeId="1" CreationDate="2015-03-13T01:09:02.450" Score="1" ViewCount="220" Body="&lt;p&gt;I am talking about robots like this one: &lt;a href=&quot;http://www.meccanotec.com/step781b.JPG&quot; rel=&quot;nofollow&quot;&gt;http://www.meccanotec.com/step781b.JPG&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How would a person know what type of motor to use in design of such a robot? What I want to understand is that stepper motors have different step sizes, different torques among other things. How do we determine what type of stepper motor is most suitable to be used in a given robot?&lt;/p&gt;&#xA;" OwnerUserId="4125" LastActivityDate="2016-08-19T19:17:22.810" Title="How to know what type of stepper motors to use when designing a robot" Tags="&lt;robotic-arm&gt;&lt;stepper-motor&gt;" AnswerCount="2" CommentCount="2" ClosedDate="2016-08-26T10:38:06.890" ContentLicense="CC BY-SA 3.0" />
  <row Id="6785" PostTypeId="2" ParentId="6750" CreationDate="2015-03-13T03:03:35.267" Score="1" Body="&lt;p&gt;Any magnetic compass absolutely &lt;em&gt;will&lt;/em&gt; work underwater. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Several companies (e.g., PNI, OceanServer) build and sell electronic compass modules based on flux-gate technology specifically for underwater applications. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Buoyancy gliders and small AUVs or ROVs usually rely on flux gate compasses to sense heading because they are small, relatively inexpensive, and consume little power. Larger, more expensive vehicles often have a magnetic compass for backup, but use a gyrocompass (RLG or FOG) as the primary orientation sensor because it is more accurate than a magnetic compass and is not susceptible to local magnetic disturbances (like the vehicle's motors or batteries). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The accuracy of your compass is important because if you are trying to navigate by dead reckoning -- or by inertial navigation -- any errors in your orientation estimate make errors in your position estimate grow quickly. To improve the data rate and accuracy of a magnetic compass, and to make it less susceptible to local magnetic disturbances, you can combine angular rates from a gyro with the angles from a compass using a complementary filter or a Kalman filter. But trying to use &lt;em&gt;only&lt;/em&gt; a gyro, you will run into trouble as you integrate to get angle -- over long periods, your integration will drift. That's why the complementary filter solution works -- the magnetic compass is a bit noisy, but stable over the long term, while the gyro is accurate and fast over the short term, but drifts unbounded in the long term.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As Ian mentioned, if you are trying to track your robot's position, you will also need a velocity estimate for dead reckoning. If you are in stationary body of water, like a pool, you can probably get away with &quot;counting propeller turns&quot;, but you would need to calibrate your propeller. In the field, most vehicles will use a &lt;a href=&quot;http://en.wikipedia.org/wiki/Acoustic_Doppler_current_profiler#Bottom_tracking&quot; rel=&quot;nofollow&quot;&gt;Doppler velocity log (DVL)&lt;/a&gt; to measure speed relative to the seafloor. That is an expensive sensor to add, but well worth it if your application requires precision navigation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Refer to &lt;a href=&quot;https://scholar.google.com/scholar?cluster=18101485865476627367&amp;amp;hl=en&amp;amp;as_sdt=0,5&quot; rel=&quot;nofollow&quot;&gt;this article&lt;/a&gt; for a fairly recent survey on underwater navigation technology.&lt;/p&gt;&#xA;" OwnerUserId="9273" LastActivityDate="2015-03-13T03:03:35.267" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6786" PostTypeId="2" ParentId="6776" CreationDate="2015-03-13T07:14:35.640" Score="0" Body="&lt;p&gt;As it has already been pointed out, this is such a broad topic, it's almost impossible to answer it... People do entire doctoral thesis for years on &quot;just&quot; one aspect like speech recognition!!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But here is what you could do:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) get a Raspberry Pi for the brain. You'll have to learn how to use Linux and a programming language like Python&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) get a cheap robotic arm: &lt;a href=&quot;http://www.maplin.co.uk/p/robotic-arm-kit-with-usb-pc-interface-a37jn&quot; rel=&quot;nofollow&quot;&gt;this one&lt;/a&gt; has been reverse-engineered before and you can find all the code on the web to control it with the raspberry pi&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3) add a microphone and a little speaker and use the google Speech API for voice recognition&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you get there, you'll be where most hobbyist can get too easily without needing a lab or expensive equipment. Many people have done very similar projects, just google it, look on YouTube.&lt;/p&gt;&#xA;" OwnerUserId="2603" LastActivityDate="2015-03-13T07:14:35.640" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6787" PostTypeId="1" CreationDate="2015-03-13T09:58:47.600" Score="0" ViewCount="108" Body="&lt;p&gt;I want to make a robotic workshop.. I recruited 10 members to work...  Please give some tips about robotic workshop&lt;/p&gt;&#xA;" OwnerUserId="9275" LastActivityDate="2015-03-31T23:53:37.797" Title="Is it tough to make a robotic workshop of your own" Tags="&lt;irobot-create&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ClosedDate="2015-04-08T12:21:26.047" ContentLicense="CC BY-SA 3.0" />
  <row Id="6789" PostTypeId="2" ParentId="6560" CreationDate="2015-03-13T10:21:17.333" Score="2" Body="&lt;p&gt;Maybe they are using the capacitance of your hand touching the screw?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In &lt;a href=&quot;http://playground.arduino.cc/Code/CapacitiveSensor&quot; rel=&quot;nofollow&quot;&gt;this article&lt;/a&gt; the pin is first pulled low, and then the software measures how long it takes to charge it back up through the pull up resistor. If a finger is touching the sensor, it increases the sensor's capacitance, resulting in longer charging times.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Don't ask me about any details, though -- I just remembered seeing the article a while ago, I don't have any experience with this.)&lt;/p&gt;&#xA;" OwnerUserId="482" LastActivityDate="2015-03-13T10:21:17.333" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6791" PostTypeId="1" CreationDate="2015-03-13T14:25:35.977" Score="1" ViewCount="203" Body="&lt;p&gt;I recently got a LYNX Biped Scout and found that it is really hard to actually come up with a working &quot;Gait&quot; or walking pattern. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Making a servo move is easy, that's not the problem, I previously built a robotic arm from scratch (I have pictures if anyone is interested) and that one can be controlled via Arduino and a few potentiometers as it only has 4 degrees of freedom so it's not too hard to keep track of the different limbs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However the Scout is a different beast entirely. It's a purpose built kit with 12 servos and to control them I'm using the LYNX SSC-32 Sequencer which is distributed freely on their website. The only problem is that making them all move in sequence to produce a convincing walking motion is actually really hard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Has anyone got any patterns for this robot they would be happy to share? &lt;/p&gt;&#xA;" OwnerUserId="9277" LastActivityDate="2016-03-04T18:51:19.470" Title="Does anyone have any walking patterns for a Biped Scout? (LYNXmotion)" Tags="&lt;walk&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2016-03-08T14:24:48.123" ContentLicense="CC BY-SA 3.0" />
  <row Id="6792" PostTypeId="1" CreationDate="2015-03-13T16:12:52.897" Score="1" ViewCount="62" Body="&lt;p&gt;I have a inverted inertia wheel pendulum.&#xA;I suppose that if I have a wheel with larger inertia at its top, the system would be more stable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I prove or disprove my conjecture?&lt;/p&gt;&#xA;" OwnerUserId="8972" LastActivityDate="2015-03-13T20:27:11.217" Title="How can I know which system is easier to control using PID controller?" Tags="&lt;control&gt;&lt;pid&gt;&lt;stability&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6793" PostTypeId="2" ParentId="6783" CreationDate="2015-03-13T16:14:37.270" Score="4" Body="&lt;p&gt;Those are Erector Sets. &#xA;&lt;a href=&quot;http://www.erector.us/&quot; rel=&quot;nofollow&quot;&gt;http://www.erector.us/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They are AWESOME!!&#xA;&lt;a href=&quot;http://en.wikipedia.org/wiki/Erector_Set&quot; rel=&quot;nofollow&quot;&gt;http://en.wikipedia.org/wiki/Erector_Set&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9091" LastActivityDate="2015-03-13T16:14:37.270" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6794" PostTypeId="2" ParentId="6792" CreationDate="2015-03-13T17:44:47.973" Score="2" Body="&lt;p&gt;Linearize the system around the operating point you're interested in. Look at the eigenvalues of the A and B matrices that represents the linearized system. Then compare the eigenvalues using from systems with different wheel sizes.  &lt;/p&gt;&#xA;" OwnerUserId="8842" LastEditorUserId="8842" LastEditDate="2015-03-13T20:27:11.217" LastActivityDate="2015-03-13T20:27:11.217" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6795" PostTypeId="2" ParentId="6767" CreationDate="2015-03-13T17:53:21.887" Score="0" Body="&lt;p&gt;Im not sure what kind of system you're trying to build but I think an encoder type sensor would work best. You could mount some amount of red leds on the edge of the disk and place a light sensor around the disk. This would let you measure the frequency of the disk without dealing with magnetometers. &lt;/p&gt;&#xA;" OwnerUserId="8842" LastActivityDate="2015-03-13T17:53:21.887" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6796" PostTypeId="2" ParentId="6783" CreationDate="2015-03-14T04:50:01.780" Score="2" Body="&lt;p&gt;well, besides Erector Sets, there are several other choices&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The LEGO EV3 &lt;a href=&quot;http://www.lego.com/en-us/mindstorms/products/31313-mindstorms-ev3&quot; rel=&quot;nofollow&quot;&gt;http://www.lego.com/en-us/mindstorms/products/31313-mindstorms-ev3&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and &lt;/p&gt;&#xA;&#xA;&lt;p&gt;MakeBlock &lt;a href=&quot;http://www.makeblock.cc/&quot; rel=&quot;nofollow&quot;&gt;http://www.makeblock.cc/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They both can achieve the same goal.&lt;/p&gt;&#xA;" OwnerUserId="4514" LastActivityDate="2015-03-14T04:50:01.780" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6797" PostTypeId="2" ParentId="6787" CreationDate="2015-03-14T05:02:47.233" Score="0" Body="&lt;p&gt;It is tough if you don't have any knowledge on programming or electronic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are three parts related to Robotics: &#xA;Mechanical part, Hardware part and Software part.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should focus on one or more parts of them. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Usually programming is the key thing. Because you can buy existing equipment(mech or hw) instead of designing your own and build them but you have to program by yourself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if you really know nothing, buy some devices like Arduino and using them to teach MCU/EmbeddedSystem programming.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Advanced, try to design circuit yourself. Either breadboard or designing PCB using Eagle or Altium Designer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More advanced and if possible, design the mechanical part by yourself. Design the  joint and structure by Solidworks and produce what you draw using 3d printer or other ways.&lt;/p&gt;&#xA;" OwnerUserId="4514" LastActivityDate="2015-03-14T05:02:47.233" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6798" PostTypeId="2" ParentId="6740" CreationDate="2015-03-14T05:17:13.500" Score="1" Body="&lt;p&gt;It is in frequency domain instead of time domain.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;G(s)=\frac{K(s+a)^2}{s} = \frac{Ks^2+2Kas+Ka^2}{s}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;according to the Laplace form of the PID controller&#xA;$$&#xA;G(s)=\frac{K_ds^2+K_ps+K_i}{s}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;so &#xA;$$&#xA;K_d = K, K_p = 2Ka, K_i = Ka^2&#xA;$$&lt;/p&gt;&#xA;" OwnerUserId="4514" LastActivityDate="2015-03-14T05:17:13.500" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6799" PostTypeId="2" ParentId="6705" CreationDate="2015-03-14T06:01:43.947" Score="0" Body="&lt;p&gt;A static human is well shielded by a wall.  Very long wave IR may pass a diffuse heat signature. The sound of breathing or exhaled CO2 may locate someone hiding in a wardrobe. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Micropower Impulse Radar or similar modern implementations for occupancy sensors that are used for turning on lights may work through walls a little but I believe they are Doppler based so need to have movement to detect a person.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The following light fitting incorporates a person sensor and they work through doors, operate at 5GHz and have a ~12mm long antenna on a shielded electronics module inside.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.sahkonumerot.fi/4207001/doc/installationinstruction/&quot; rel=&quot;nofollow&quot;&gt;http://www.sahkonumerot.fi/4207001/doc/installationinstruction/&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="9281" LastActivityDate="2015-03-14T06:01:43.947" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6801" PostTypeId="1" CreationDate="2015-03-14T11:58:44.907" Score="1" ViewCount="31" Body="&lt;p&gt;I was studying the basics of legged locomotion and came across the unilateral force and torque constraints at the foot-ground interface.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I understood the implication of the unilateral constraint on the force ( the ground can only push the foot but not pull it) but I am unable to understand what does the unilateral torque constraint translate into physically in this case. Can anyone clarify it?&lt;/p&gt;&#xA;" OwnerUserId="9258" LastActivityDate="2015-03-14T11:58:44.907" Title="Unilateral Torque Constraint on the foot-ground interface" Tags="&lt;mechanism&gt;&lt;motion&gt;&lt;force&gt;&lt;legged&gt;&lt;walk&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6802" PostTypeId="2" ParentId="6767" CreationDate="2015-03-14T21:13:39.457" Score="1" Body="&lt;p&gt;Do you need the sensor to be installed on the circle itself? If so, can you move the accelerometer closer to the center so that less force is applied to it? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might want to look into optical RPM sensors, like &lt;a href=&quot;http://www.monarchinstrument.com/product.php?ID=38&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt;. All you need to do is put a reflective tape on your rotary part so that the sensor can see the reflection once for each cycle.&lt;/p&gt;&#xA;" OwnerUserId="9232" LastActivityDate="2015-03-14T21:13:39.457" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6803" PostTypeId="2" ParentId="6764" CreationDate="2015-03-16T01:39:01.940" Score="3" Body="&lt;p&gt;I went through the header files of the 12cdev lib and I figured it out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;you have to first add the line VectorInt16 gyro; to your motion variables, then you add the line&lt;/p&gt;&#xA;&#xA;&lt;p&gt;mpu.dmpGetGyro(&amp;amp;gyro, fifoBuffer);&lt;/p&gt;&#xA;&#xA;&lt;p&gt;to your outputs.&lt;/p&gt;&#xA;" OwnerUserId="8838" LastActivityDate="2015-03-16T01:39:01.940" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6804" PostTypeId="1" CreationDate="2015-03-16T01:44:11.040" Score="2" ViewCount="198" Body="&lt;p&gt;I am using an Arduino Mega with an MPU6050. I can get gyroscopic data as well as euler angles. The problem is my gyro data keeps going back and forth between 0 and -1 despite me not moving it at all (it stays on -1 the most). What can I do to filter what I assume is noise? I am going to use the gyro data for a quadcopter PID rate controller so I cant really have it telling me I am rotating at -1 deg/sec. That would be catastrophic for the quadcopter&lt;/p&gt;&#xA;" OwnerUserId="8838" LastActivityDate="2015-03-18T07:48:44.780" Title="How can I filter Gyroscopic data?" Tags="&lt;arduino&gt;&lt;imu&gt;&lt;accelerometer&gt;&lt;gyroscope&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6806" PostTypeId="2" ParentId="6804" CreationDate="2015-03-16T08:27:16.983" Score="2" Body="&lt;p&gt;$1^\circ/s$ does not seem to be very catastrophic. The noise seems quite low. More interesting is if your euler angles are stable and drift-free. Then you can control the pitch and roll error based on these estimates. As far as I remember the MPU6050 already does the filtering of gyros and accelerometers for you. &lt;/p&gt;&#xA;" OwnerUserId="127" LastEditorUserId="127" LastEditDate="2015-03-18T07:48:44.780" LastActivityDate="2015-03-18T07:48:44.780" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6807" PostTypeId="1" CreationDate="2015-03-16T11:56:47.960" Score="0" ViewCount="77" Body="&lt;p&gt;I am building a humanoid robot with DC motor actuated fingers. There are 16 brushed DC motors to be position controlled with help of hall effect sensors implanted at the joints of each fingers. I need a developed driver board to control these 16, 3 watt, 12 v,DC motors.&#xA;Also each motor is equipped with an incremental encoder for speed control. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;thank you&lt;/p&gt;&#xA;" OwnerUserId="7533" LastActivityDate="2015-03-17T19:40:38.427" Title="Driver Board to Control 16 Brushed DC Motors" Tags="&lt;motor&gt;&lt;servomotor&gt;&lt;driver&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6808" PostTypeId="1" CreationDate="2015-03-16T13:11:22.867" Score="0" ViewCount="92" Body="&lt;p&gt;Basic question concerning sensor fusion:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A standard 10 DoF IMU, I mean this cheap things for the tinkerer at home, provides 10 values:&#xA;3 Accelerometers&#xA;3 Gyroscope&#xA;3 Magnetic Field Measurements&#xA;1 Pressure sensor (+ 1 Temperature) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that the accel-data provide long term stability, but are useless for short term and the gyroscope is more or less vice versa. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So there are tons of strategies to &quot;marry&quot; this values, but how does the magnetic field measurement fit into this framework?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically the magnetic field measurement should provide an attitude, too. Like the other two sensors combined. I guess this measurement alone is neither reliable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So how do all these sensors fit together?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BR &lt;/p&gt;&#xA;" OwnerUserId="6911" LastActivityDate="2015-06-14T16:15:29.220" Title="Provides a 10 Degree-Of-Freedom IMU reduntant data?" Tags="&lt;imu&gt;&lt;sensor-fusion&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6809" PostTypeId="2" ParentId="6808" CreationDate="2015-03-16T13:20:51.437" Score="1" Body="&lt;p&gt;The magnetometer is an electric compass. If you know the magnetic field that you are operating in, you should be able to tell which direction you're pointing in. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;All three sensors can be fused together to give you an accurate estimate of attitude. This can be done using a nonlinear kalman filter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using only the accelerometer and the gyro, vehicle heading cannot be measured. You can integrate the gyro measurements but you have no way to account for drift. That is what the magnetometer brings to the system.&lt;/p&gt;&#xA;" OwnerUserId="8842" LastEditorUserId="8842" LastEditDate="2015-03-16T14:31:10.797" LastActivityDate="2015-03-16T14:31:10.797" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6810" PostTypeId="1" CreationDate="2015-03-16T14:23:02.993" Score="4" ViewCount="285" Body="&lt;p&gt;I emphasize that my question is about &lt;strong&gt;&lt;em&gt;sampling&lt;/em&gt;&lt;/strong&gt;, not &lt;em&gt;resampling&lt;/em&gt;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm reading the Probabilistic Robotics book by Thrun et al, Chapter 4 on Non-Parametric Filters.  The section on Particle filters has an algorithm which states that for each particle index $m$ (see line 4):  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;sample $x_t^{[m]} \sim p(x_t|u_t,x_{t-1}^{[m]})$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The text's explanation of this step is quoted as:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Line 4. generates a hypothetical state $x_t^{[m]}$ for time t based on&#xA;  the particle $x_{t-1}$ and the control $u_t$.  The resulting sample is&#xA;  index by $m$, indicating that it is generated from the $m$-th particle&#xA;  in $\chi_{t-1}$.  This step involves sampling from the state&#xA;  transition distribution $p(x_t|u_t,x_{t-1})$.  To implement this step,&#xA;  one needs to be able to sample from this distribution.  The set of&#xA;  particles obtained after $M$ iterations is the filter's representation&#xA;  of $\bar{bel}(x_t)$.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If I understand correctly, this step says that the m-th &lt;strong&gt;&lt;em&gt;sampled&lt;/em&gt;&lt;/strong&gt; particle $x_t^{[m]}$ is obtained by advancing the previous m-th particle with control command $u_t$.  I assume that the motion is not deterministic, so the result of this motion is a conditional probability, based on the particle's previous position $u_t$.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I'm confused over how exactly to construct this conditional probability $p(x_t|u_t,x_{t-1}^{[m]})$.  Is this information usually given?  Or is it constructed from the distribution of the other particles?  &lt;/p&gt;&#xA;" OwnerUserId="2295" LastActivityDate="2015-03-18T13:41:34.103" Title="Particle Filter Sampling Step" Tags="&lt;particle-filter&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6812" PostTypeId="2" ParentId="6807" CreationDate="2015-03-17T06:36:09.123" Score="1" Body="&lt;p&gt;Given that the brushed DC motors you are using can output a maximum power of 3 watts and are rated for 12 volts maximum, the max current will be 0.25 amps or 250 milliamps.  So you need to find something that can handle those specs.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the most straightforward approach you have two options.  Either you can opt to use a dedicated driver board (e.g. like the &lt;a href=&quot;http://www.adafruit.com/products/1438&quot; rel=&quot;nofollow&quot;&gt;adafruit motor shield&lt;/a&gt;) or you can use a dedicated IC that can serve the same function but at a fraction of a cost.  Given that you need to control 16 brushed DC motors, the IC route would probably be the most cost-effective.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Personally I have used the &lt;a href=&quot;http://www.ti.com/lit/ds/symlink/sn754410.pdf&quot; rel=&quot;nofollow&quot;&gt;SN754410NE Quad Half-H Driver&lt;/a&gt;.  The interesting thing about this IC driver is you can control 2 DC motors in either direction and with supply voltages of up 36 volts and drive currents of up to 1 amp, which is suitable for your application.  If you're going to control brushless DC motors, then that's a different story.&lt;/p&gt;&#xA;" OwnerUserId="4210" LastActivityDate="2015-03-17T06:36:09.123" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6813" PostTypeId="2" ParentId="6810" CreationDate="2015-03-17T08:54:56.373" Score="4" Body="&lt;p&gt;$p\left(x_t|u_t,x^{[m]}_{t-1}\right)$ should be created from your motion model. See chapter 5 in your book.&#xA;Algorithms can be found in table 5.3 for a velocity model or table 5.6 for a odometry model.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Roughly speaking: If your robot has a speed of 1m/s and it moves straight (which may be your $u_t$) and your update rate is 1Hz, then you could move each particle 1m forward. To respect the fact that nothing is known exactly you could then disturb each position by adding some position noise.&lt;/p&gt;&#xA;" OwnerUserId="7133" LastEditorUserId="7133" LastEditDate="2015-03-18T13:41:34.103" LastActivityDate="2015-03-18T13:41:34.103" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6814" PostTypeId="2" ParentId="6810" CreationDate="2015-03-17T09:00:10.557" Score="1" Body="&lt;p&gt;The new particle should be created from your motion model, basically you select one random possible outcome of the data you measured.&#xA;This is an example for differential drive, the random.gauss calls are resoponsible for the sampling part:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;def update_sample(self, sample, left_ticks, right_ticks):&#xA;    &quot;&quot;&quot; Returns a new sample updated according to measured movement.&quot;&quot;&quot;&#xA;    left_distance = left_ticks * self.left_resolution * random.gauss(1, self.left_sigma)&#xA;    right_distance = right_ticks * self.right_resolution * random.gauss(1, self.right_sigma)&#xA;    forward = (left_distance + right_distance) / 2&#xA;    turn = (right_distance - left_distance) / self.wheel_base&#xA;    alpha = sample.heading + turn / 2&#xA;&#xA;    sample = copy.copy(sample)&#xA;    sample.x += math.cos(alpha) * forward&#xA;    sample.y += math.sin(alpha) * forward&#xA;    sample.heading += turn&#xA;    return sample&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="482" LastActivityDate="2015-03-17T09:00:10.557" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6815" PostTypeId="2" ParentId="6807" CreationDate="2015-03-17T19:40:38.427" Score="0" Body="&lt;p&gt;I've had good experience with pololu motor drivers. They have a decently wide selection of brushed DC motor controllers &lt;a href=&quot;https://www.pololu.com/category/10/brushed-dc-motor-controllers&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;. And in Particular I think &lt;a href=&quot;https://www.pololu.com/product/1110&quot; rel=&quot;nofollow&quot;&gt;this one&lt;/a&gt; would suffice according to your specs. Its one of their light weight controllers and it is still capable of handling up to 3A peak current per motor channel or 1A continually. That seems plenty more than you'd need as your setup only demands 0.25A per motor. A single controller would handle two motor channels so you'd need a few of those.&lt;/p&gt;&#xA;" OwnerUserId="1075" LastActivityDate="2015-03-17T19:40:38.427" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6816" PostTypeId="1" AcceptedAnswerId="6878" CreationDate="2015-03-17T19:42:38.943" Score="1" ViewCount="196" Body="&lt;p&gt;Using the &lt;a href=&quot;http://www.robotappstore.com/files/KB/Roomba/Roomba_SCI_Spec_Manual.pdf&quot; rel=&quot;nofollow&quot; title=&quot;SCI messages&quot;&gt;SCI messages&lt;/a&gt;, I would like to determine the current operating mode or state of a iRobot Roomba 780. Finally, I would like to detect and separate four states: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Cleaning&lt;/li&gt;&#xA;&lt;li&gt;In docking station&lt;/li&gt;&#xA;&lt;li&gt;Returning to docking station&lt;/li&gt;&#xA;&lt;li&gt;Error (e.g. trapped on obstacle)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;What is a fast and reliable way to detect those states using &lt;a href=&quot;http://www.robotappstore.com/files/KB/Roomba/Roomba_SCI_Spec_Manual.pdf&quot; rel=&quot;nofollow&quot; title=&quot;SCI messages&quot;&gt;SCI data&lt;/a&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Roomba SCI Sensor packets &quot;Remote Control Command&quot; and &quot;Buttons&quot; seem to return the currently called commands and not the currently executed ones.&lt;/p&gt;&#xA;" OwnerUserId="9302" LastEditorUserId="9302" LastEditDate="2015-03-31T09:56:24.113" LastActivityDate="2016-01-06T16:48:08.907" Title="Determine current roomba state / operating mode" Tags="&lt;roomba&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6817" PostTypeId="1" AcceptedAnswerId="6825" CreationDate="2015-03-17T21:48:56.893" Score="2" ViewCount="202" Body="&lt;p&gt;Suppose I have a mechanical system which is free to move on a given rail [-5m, 5m] like a motorized cart. The whole system can be mathematically expressed through a &lt;em&gt;linear timeinvariant&lt;/em&gt; system equations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I need to &lt;em&gt;control&lt;/em&gt; &lt;em&gt;only&lt;/em&gt; the position (for example saying the controller: &quot;move to +2.3&quot;) I can simply design a PID controller that, given a set point moves the cart to that position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I need much more and I want to &lt;em&gt;control&lt;/em&gt; the &lt;em&gt;position&lt;/em&gt; &lt;strong&gt;and&lt;/strong&gt; the &lt;em&gt;velocity&lt;/em&gt; of the cart. So I need for example to say: &quot;move to +2.3 with a specific velocity's profile&quot;. Of course the &lt;em&gt;vel = 0&lt;/em&gt; at the end position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Question: how should I design such a controller? Do I need specifically a special type of controller? Or I have a huge choice?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help, graph, link and example is really appreciated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regards&lt;/p&gt;&#xA;" OwnerUserId="7097" LastActivityDate="2015-03-23T20:45:29.730" Title="Basic general question about controllers" Tags="&lt;control&gt;&lt;pid&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6818" PostTypeId="1" AcceptedAnswerId="6856" CreationDate="2015-03-18T01:33:25.630" Score="0" ViewCount="37" Body="&lt;p&gt;Is it possible to remote control a 'robot' relative to the driver with an angle sensor (or any other sensor)?  For example, if the robot starts in this position&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;--------------&#xA;|    Front   |&#xA;|  --------  |&#xA;| |________| |     [robot]&#xA;|    Back    |&#xA;--------------&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and the joystick is in this configuration&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;--------------&#xA;|  Forwards  |&#xA;| [joystick] |&#xA;|  Backwards |&#xA;--------------&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;then if the robot turns around,&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;--------------&#xA;|    Back    |&#xA;|  --------  |&#xA;| |________| |     [robot]&#xA;|    Front   |&#xA;--------------&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;pushing the controller forwards will still make the robot go forward&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;--------------&#xA;|      ^     |&#xA;| [joystick] |&#xA;|  Backwards |&#xA;--------------&#xA;&#xA;--------------&#xA;|      ^     |&#xA;|  --------  |&#xA;| |________| |     [robot]&#xA;|    Front   |&#xA;--------------&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;even though from the robot's POV, he's going backwards&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any ideas/solutions?&lt;/p&gt;&#xA;" OwnerUserId="9303" LastActivityDate="2015-03-23T16:56:35.283" Title="Remote Control Relative to Driver" Tags="&lt;control&gt;&lt;sensors&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6820" PostTypeId="2" ParentId="6782" CreationDate="2015-03-18T04:44:24.457" Score="1" Body="&lt;p&gt;iRobot Create and Rommba does not support the same functionality. A SCI manual for the Roomba could be found here: &lt;a href=&quot;http://www.robotappstore.com/files/KB/Roomba/Roomba_SCI_Spec_Manual.pdf&quot; rel=&quot;nofollow&quot;&gt;Roomba SCI spec&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It works for me by sending plain byte sequence's.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could you add some more information to your question:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;How do you connect to the Roomba physical?&lt;/li&gt;&#xA;&lt;li&gt;How are you sending data to the Roomba logical?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Meta Remark: I would like to use the comment function but do not have enough reputation. &lt;/p&gt;&#xA;" OwnerUserId="9302" LastActivityDate="2015-03-18T04:44:24.457" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6821" PostTypeId="1" CreationDate="2015-03-18T06:10:06.720" Score="1" ViewCount="250" Body="&lt;p&gt;So I was making sure my circuit for an airboat I was working on was safe. And checking a motor, it has 35 amps max current running 11.1v at 1000. (However my ESC has a 30 current, 40 burst amps). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The recommended tested prop for this is a 11x9 3-blade and runs the motor at 20 amps. Doing some quick calculations via on online calculator, it appears to give a value of 5.4lbs of force (way off to the 2.65 lbs measured, but regardless...). When I type in a prop I want (13x6) it gives a thrust value of 7.53 .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, if the motor current is proportional to the thrust, 5.4 lbs / 20 amps = 7.53 / running amps. And therefore the amount of amps the prop would be, in theory a little less than 30 if this is indeed the case. Thus safe for my application. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This would also make sense in physics terms as Power = Current*Voltage which is proportional to thrust, but just need to make sure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So does this thought process work for choosing a prop? My device will  be doing very short runs (less than 25 seconds), so near-boundaries should be safe...&lt;/p&gt;&#xA;" OwnerUserId="9245" LastEditorUserId="9245" LastEditDate="2015-03-18T15:52:33.227" LastActivityDate="2015-03-18T15:52:33.227" Title="Is motor current proportional to thrust?" Tags="&lt;quadcopter&gt;&lt;brushless-motor&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6822" PostTypeId="1" CreationDate="2015-03-18T07:32:23.257" Score="1" ViewCount="313" Body="&lt;p&gt;I want to design a data logger for my quadcopter using the Arduino Mega board. I want to record the roll, pitch and yaw angles each second or 5 seconds, so they can be viewed later after a flight has ended. There's just one thing I don't understand, and that's how to translate the pitch/roll/yaw angles into a pulse of a specific length that the flight controller receives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, when I press the control for the pitch, the transmitter sends out a pulse to the receiver of the drone and the speed of the drones' motors change accordingly for it to pitch either forward or backward. I can tap into these commands between the flight controller and the transmitter, and be able to record the length of the pulse that was sent out. However, what is the link between the pitch angle and the size of the pulse? Basically, how can I convert the pulse that was recorded by the Arduino board and convert it into the pitch angle in degrees? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Generally, for the transmitter I use, a 1500us-pulse means zero pitch; from 1501-2000 means pitch forward, and from 1000-1499 means pitch backwards (of course, the actual values vary slightly, but this is just a general reference for this question). So for instance, if I sent a pulse of 1400us, how would that translate into an angle in degrees? What's the formula to convert it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope I'm clear, and if this question sounds stupid, please excuse me, but I haven't been able to find good information on it!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="9304" LastActivityDate="2015-04-15T17:30:46.767" Title="What is the link between a quadcopter transmitter pulse and the roll/pitch/yaw angles?" Tags="&lt;arduino&gt;&lt;quadcopter&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6824" PostTypeId="1" CreationDate="2015-03-18T12:41:19.707" Score="0" ViewCount="337" Body="&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/9wT10.jpg&quot; alt=&quot;PIV Controller&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How could I tune the above PIV controller? I am trying to get the system to have a settling time of &amp;lt; 1 second, P.O &amp;lt; 15% and zero steady state error.  &lt;/p&gt;&#xA;" OwnerUserId="9307" LastActivityDate="2015-03-30T22:23:35.320" Title="How to tune a PIV controller?" Tags="&lt;control&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6825" PostTypeId="2" ParentId="6817" CreationDate="2015-03-18T19:23:54.657" Score="2" Body="&lt;p&gt;PID would work just fine. Your system can be easily modeled as a linear system and is relatively easy to control. When you want to choose a control method, you need to know the dynamics of your system, computation resources, and how much you wanna go deep into mathematical stuff(one reason why so many people choose PID). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To solve your control problem using PID, you need to define your X and Y as functions of time based on your desired velocity. So you will have:&#xA;$$ X(t), Y(t)$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or in case of moving on a rail, define travel distance as a function of time. Then in each iteration of your control loop you know where the cart was supposed to be and where it really is. The difference is the error that you should put in PID equation. It might not always be so straight forward. In most of multi-output control systems error is a mix of multiple state errors(such as path tracking in 2D with differential wheel robots). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Matlab code below might help you better understand the process. In case you don't have access to Matlab, Octave should be able to run the code too(maybe with some small adjustments).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've assumed that there is a rail that looks like this:&#xA;&lt;img src=&quot;https://raw.githubusercontent.com/BarzinM/PID-on-rails/master/path.png&quot; alt=&quot;Path&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And you want to move on it with a velocity profile like this:&#xA;&lt;img src=&quot;https://raw.githubusercontent.com/BarzinM/PID-on-rails/master/velocity.png&quot; alt=&quot;Velocity&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then follow this example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;clc; clear all; close all&#xA;&#xA;%% Path setup&#xA;path_step = transpose(0:.01:500);&#xA;x_path = path_step/17 + 2*sin(path_step/50);&#xA;y_path = sqrt(path_step) + 5*sin(path_step/10);&#xA;&#xA;position_matrix = [x_path,y_path];&#xA;distance_between_points = diff(position_matrix,1);&#xA;dist_from_vertex_to_vertex = hypot(distance_between_points(:,1), distance_between_points(:,2));&#xA;cumulative_dist_along_path = [0; cumsum(dist_from_vertex_to_vertex,1)];&#xA;&#xA;&#xA;%% Cart setup&#xA;saturation_limit = 4;&#xA;motor_coef = .5;&#xA;motor_model = @(input_command) min(saturation_limit, max(-saturation_limit, input_command * motor_coef)) + .3 * randn(1);&#xA;k_p = 3;&#xA;k_i = 1;&#xA;k_d = .1;&#xA;&#xA;&#xA;%% Simulation and initial conditions setup and array initialization&#xA;time_step = .1;&#xA;sim_time = 100;&#xA;t = transpose(0:time_step:sim_time);&#xA;distance_actual = zeros(size(t));&#xA;err = zeros(size(t));&#xA;&#xA;err_integrated = 0;&#xA;err_derivative = 0;&#xA;distance_actual(1) = 20; % actual starting point&#xA;&#xA;&#xA;%% Desired trajectory following pattern&#xA;velocity = .5 + 2*sin(t/13).^8;&#xA;velocity=[velocity(1:end-100); zeros(100,1)];&#xA;reference_starting_point = 40;&#xA;desired_travel_distances = cumsum(velocity .* time_step,1) + reference_starting_point; &#xA;desired_trajectory = interp1(cumulative_dist_along_path, position_matrix, desired_travel_distances);&#xA;x_pos = desired_trajectory(:,1);&#xA;y_pos = desired_trajectory(:,2);&#xA;&#xA;%% Run simulation&#xA;for sim_step = 1:sim_time/time_step&#xA;    err(sim_step) = desired_travel_distances(sim_step) - distance_actual(sim_step); % calculate error&#xA;    err_integrated = err_integrated + err(sim_step) * time_step;&#xA;    if sim_step&amp;gt;1&#xA;        err_derivative = (err(sim_step) - err(sim_step-1)) / time_step;&#xA;    end&#xA;    u_motor = k_p * err(sim_step) + k_d * err_derivative + k_i * err_integrated; % apply PID magic and calculate control input&#xA;    actual_velocity(sim_step) = motor_model(u_motor); % Send the command to the motor and it will have a new velocity based on that&#xA;    distance_actual(sim_step+1) = actual_velocity(sim_step) * time_step + distance_actual(sim_step); % calculate traveled distance from new&#xA;end&#xA;&#xA;&#xA;%% How good it follows the desired velocity pattern&#xA;figure()&#xA;title('Velocity Profile')&#xA;xlabel('Simulation Step')&#xA;ylabel('Velocity')&#xA;plot(velocity,'LineWidth',3)&#xA;hold on&#xA;plot(actual_velocity, ':')&#xA;hold off&#xA;legend('Desired', 'Actual')&#xA;&#xA;&#xA;%% Error analysis&#xA;figure()&#xA;title('Error')&#xA;xlabel('Simulation Step')&#xA;ylabel('Error')&#xA;plot(err)&#xA;&#xA;&#xA;%% Make an animation&#xA;actual_position = interp1(cumulative_dist_along_path, position_matrix, distance_actual);&#xA;figure()&#xA;title('Simulation')&#xA;xlabel('X')&#xA;ylabel('Y')&#xA;plot(x_path, y_path)&#xA;hold on&#xA;h1 = plot(x_pos(1), y_pos(1), 'rx');&#xA;h2 = plot(actual_position(1, 1), actual_position(1, 2), 'ko');&#xA;legend('Path', 'Desired Position', 'Actual Position')&#xA;disp('Press key ...')&#xA;waitforbuttonpress()&#xA;for sim_step=1:sim_time/time_step&#xA;    delete(h1)&#xA;    delete(h2)&#xA;    clc&#xA;    disp('Time:')&#xA;    t = sprintf('%0.3f', sim_step * time_step);&#xA;    disp(t)&#xA;    h1 = plot(x_pos(sim_step), y_pos(sim_step), 'rx');&#xA;    h2 = plot(actual_position(sim_step, 1), actual_position(sim_step, 2), 'ko');&#xA;    drawnow&#xA;    pause(.05)&#xA;end&#xA;clc&#xA;disp('Finished!')&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="9232" LastEditorUserId="9232" LastEditDate="2015-03-19T04:30:00.090" LastActivityDate="2015-03-19T04:30:00.090" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6826" PostTypeId="1" CreationDate="2015-03-18T22:45:48.897" Score="0" ViewCount="176" Body="&lt;p&gt;i'm working on a building a rover and would like some advice on selecting motors. In particular, i want to understand the difference between precision and planetary gear motors.  My robot will way about 10-15lbs i think and would like it to be responsive and quick. I have two sabertooth 2x12 motor controllers (which can supply up to 12amps). I have been looking at these motors and i am not sure which is better choice for my application.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;These are the two sets of motors i am thinking about.&#xA;&lt;a href=&quot;https://www.servocity.com/html/precision_robotzone_gear_motor.html&quot; rel=&quot;nofollow&quot;&gt;https://www.servocity.com/html/precision_robotzone_gear_motor.html&lt;/a&gt;&#xA;&lt;a href=&quot;https://www.servocity.com/html/3-12v_precision_planetary_gear.html&quot; rel=&quot;nofollow&quot;&gt;https://www.servocity.com/html/3-12v_precision_planetary_gear.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;googling does provide some info on planetary gears, but the application of these two is still is unclear to me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="2171" LastActivityDate="2015-06-14T19:15:37.250" Title="Difference between planetary and precision gear motors" Tags="&lt;mobile-robot&gt;&lt;motor&gt;&lt;gearing&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6827" PostTypeId="2" ParentId="1947" CreationDate="2015-03-19T09:50:50.433" Score="2" Body="&lt;pre&gt;&lt;code&gt;#include &amp;lt;AccelStepper.h&amp;gt;&#xA;&#xA;//AccelStepper Xaxis(1, 2, 5); // pin 2 = step, pin 5 = direction&#xA;AccelStepper Xaxis(1, 12, 6); // pin 3 = step, pin 6 = direction&#xA;&#xA;void setup() &#xA;{&#xA;  Xaxis.setMaxSpeed(4000);&#xA;&#xA;  //Xaxis.setSpeed(10);&#xA;  pinMode (3, INPUT);&#xA;}&#xA;&#xA;void loop() &#xA;{  &#xA;   //Xaxis.runSpeed();&#xA;   if (digitalRead (3) == HIGH)&#xA;   {&#xA;     //Xaxis.stop();&#xA;     Xaxis.setSpeed(20);&#xA;&#xA;     Xaxis.runSpeed();&#xA;   }&#xA;&#xA;   if (digitalRead (3) == LOW)&#xA;   {&#xA;     Xaxis.runSpeed();&#xA;     Xaxis.setSpeed(-10);  // - sign change direction !!!!!&#xA;   }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="9315" LastEditorUserId="110" LastEditDate="2015-04-03T23:36:54.700" LastActivityDate="2015-04-03T23:36:54.700" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6828" PostTypeId="2" ParentId="6694" CreationDate="2015-03-19T10:54:11.913" Score="0" Body="&lt;p&gt;Finally, I got it 'praise to Allah'.&#xA;Actually, I made a mistake on how to find the adjoint (Ad)of the matrix &lt;span class=&quot;math-container&quot;&gt;$ j$&lt;/span&gt; .&#xA;I simply used the adjoint function in matlab, but that wasn't the right approach; the (Ad), has specific formula given by:&#xA;&lt;span class=&quot;math-container&quot;&gt;$ Adj = \begin{bmatrix} R(j)^T &amp;amp; -R(j)^Tp(j) \\ zeros(3) &amp;amp; R(j)^T] \end{bmatrix} $&lt;/span&gt;;&#xA;Where &lt;span class=&quot;math-container&quot;&gt;$ R(j)  $&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$p(j)$&lt;/span&gt; are the rotational part and the position vector of the &lt;span class=&quot;math-container&quot;&gt;$ 4 \times 4$&lt;/span&gt; matrix &lt;span class=&quot;math-container&quot;&gt;$j$&lt;/span&gt;.&lt;/p&gt;&#xA;" OwnerUserId="9087" LastEditorUserId="9087" LastEditDate="2019-11-10T17:51:54.703" LastActivityDate="2019-11-10T17:51:54.703" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6829" PostTypeId="1" AcceptedAnswerId="6830" CreationDate="2015-03-19T11:19:30.690" Score="1" ViewCount="122" Body="&lt;p&gt;There are several robotics datasets for SLAM, like &lt;a href=&quot;https://vision.in.tum.de/data/datasets/rgbd-dataset/file_formats&quot; rel=&quot;nofollow&quot;&gt;this one&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this webpage you can see that the depth image is scaled by a factor of 5000, so that float depth images can be stored in 16 bit png files:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;The depth images are scaled by a factor of 5000, i.e., a pixel value of 5000&#xA;in the depth image corresponds to a distance of 1 meter from the camera, 10000&#xA;to 2 meter distance, etc. A pixel value of 0 means missing value/no data.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I do not understand why this value is chosen. Why not simply 1000, so that there is a conversion of meters to millimeters? &lt;/p&gt;&#xA;" OwnerUserId="9317" LastEditorUserId="9317" LastEditDate="2015-03-19T11:25:39.783" LastActivityDate="2015-03-19T16:02:35.870" Title="Robotics SLAM datasets - scaling factor" Tags="&lt;slam&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6830" PostTypeId="2" ParentId="6829" CreationDate="2015-03-19T16:02:35.870" Score="2" Body="&lt;p&gt;PNG does not support float numbers (afaik). Hence the depth value needs to be encoded as a fixed point value. The fixed point was chosen, I guess, to get a good trade-off between accuracy (0.2 mm) and range (13 m). &lt;/p&gt;&#xA;" OwnerUserId="127" LastActivityDate="2015-03-19T16:02:35.870" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6831" PostTypeId="1" CreationDate="2015-03-19T18:31:12.140" Score="2" ViewCount="322" Body="&lt;p&gt;I am trying to program the create2 irobot using python. there is a script called openinterface.py. where can I download this script?&lt;/p&gt;&#xA;" OwnerUserId="9322" LastEditorUserId="9417" LastEditDate="2015-04-03T09:50:09.013" LastActivityDate="2015-05-03T15:43:50.160" Title="where can I get openinterface.py?" Tags="&lt;software&gt;&lt;irobot-create&gt;&lt;python&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6833" PostTypeId="1" CreationDate="2015-03-19T21:16:55.240" Score="0" ViewCount="1801" Body="&lt;p&gt;I'm following this &lt;a href=&quot;http://beagleboard.org/getting-started&quot; rel=&quot;nofollow&quot;&gt;getting started&lt;/a&gt; tutorial, connected the board to USB and it's detected as mass storage, got the driver installed (Win 64), and at the third step I wasn't able to connect to BeagleBone webserver at 192.168.7.2, anything I did wrong? Please help.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is some troubleshooting info from Getting Started page, I've followed them all. I'm using Chrome, tried the node-webkit based application, not in a Virtual Machine, not using SSH just trying to access the webserver.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;Troubleshooting&lt;/strong&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Do not use Internet Explorer.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;One option to browse your board is to use this node-webkit based&#xA;  application (currently limited to Windows machines):&#xA;  beaglebone-getting-started.zip.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Virtual machines are not recommended when using the direct USB&#xA;  connection. It is recommended you use only network connections to your&#xA;  board if you are using a virtual machine.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;When using 'ssh' with the provided image, the username is 'root' and&#xA;  the password is blank.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Visit beagleboard.org/support for additional debugging tips.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;UPDATE:&#xA;- I tried to install Ubuntu on my machine and connect the BeagleBone, it need not any driver and I can immediately access the webserver after ejecting the mass storage, enabling the 'USB-to-Ethernet Interface'. However in Windows ejecting the mass storage still does nothing. Still trying to make it connect in Windows.&lt;/p&gt;&#xA;" OwnerUserId="9305" LastEditorUserId="9305" LastEditDate="2015-03-19T22:05:25.913" LastActivityDate="2015-03-19T22:05:25.913" Title="Can't connect to BeagleBone Webserver?" Tags="&lt;beagle-bone&gt;" AnswerCount="0" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="6834" PostTypeId="2" ParentId="6511" CreationDate="2015-03-20T03:17:41.073" Score="5" Body="&lt;p&gt;Universal states that they use brush-less DC motors with harmonic drives on their FAQ here &lt;a href=&quot;http://cross-automation.com/blog/universal-robots-top-10-faqs&quot; rel=&quot;noreferrer&quot;&gt;http://cross-automation.com/blog/universal-robots-top-10-faqs&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bigger ones like the KUKA KR5 uses AC servo motors. From the conversation here &lt;a href=&quot;https://support.industry.siemens.com/tf/ww/en/posts/kuka-servo-motor/87265/?page=0&amp;amp;pageSize=10#post344333&quot; rel=&quot;noreferrer&quot;&gt;https://support.industry.siemens.com/tf/ww/en/posts/kuka-servo-motor/87265/?page=0&amp;amp;pageSize=10#post344333&lt;/a&gt; it looks it is a custom version of the Siemens IFK7 synchronous motor series. Many of these high end motors can have holding brakes, better quality bearings and drive mechanisms and very good control systems that prevent them from jerking like a DIY arm. In a DIY robot, joints are typically connected straight to the motor with no drive mechanism and the basic control system does not provide a lot of options for smooth motion. &lt;/p&gt;&#xA;" OwnerUserId="9311" LastActivityDate="2015-03-20T03:17:41.073" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6835" PostTypeId="1" CreationDate="2015-03-20T07:38:16.933" Score="0" ViewCount="1478" Body="&lt;p&gt;I plan to use P8.13 and P8.15 of the beaglebone in a i2c bitbang mode.&#xA;Do i need to use external pull up resistors in my circuit? or can i use the internal pull up which is available on the beaglebone black itself?&lt;/p&gt;&#xA;" OwnerUserId="7049" LastEditorUserId="110" LastEditDate="2015-04-20T12:49:05.660" LastActivityDate="2015-04-20T12:49:05.660" Title="Internal Pullup Sufficient for i2c in beaglebone Black?" Tags="&lt;beagle-bone&gt;&lt;circuit&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6836" PostTypeId="2" ParentId="6835" CreationDate="2015-03-20T08:58:50.507" Score="1" Body="&lt;p&gt;It depends on how big the pull-up resistor is and how fast you want to go with I2C. If Beaglebone designates those pins as usable for I2C, the internal pull-up resistor is most likely sufficient.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Generally, the smaller the pull-up resistor, the faster is the rise of the signal to &lt;code&gt;1&lt;/code&gt;, but when driving a &lt;code&gt;0&lt;/code&gt;, there is also higher consumption. To understand this better, think about the extremes; what would be the behavior if the pull-up resistor is 0? How about infinite?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To be perfectly sure, you need an oscilloscope. With the frequency at which you want to communicate over I2C, drive a square wave over the pin configured with pull-up and check to see if the signal rises &quot;fast enough&quot;.&lt;/p&gt;&#xA;" OwnerUserId="158" LastActivityDate="2015-03-20T08:58:50.507" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6837" PostTypeId="1" AcceptedAnswerId="6865" CreationDate="2015-03-20T13:32:24.290" Score="3" ViewCount="195" Body="&lt;p&gt;I'm looking to build a new (first) quadcopter without the conventional flight controller and radio, with an onboard RPi and applying some newfound knowledge on autonomous control to improve my coding skills.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although, since I've never actually built a quadcopter, I don't actually have any experience in using brushless motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'll be using a RPi B+, so controlling them over I2C was something I looked into. The B+ though only has two I2C interfaces. It also only has two hardware PWM pins and I'm unsure whether software PWM would be enough. I found the Afro SimonK-based ESCs from HobbyKing which have I2C (Intended for the MikroKopter).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've looked around and people have used the Adafruit 16-channel PWM/Servo drivers to control them. Is this an option to look into? Or is there perhaps a better way?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, would be it particularly safe if the RPi is run off the ESC's BEC? It's confusing because, when the ESC is powered on, well, it'll be powered on before the RPi comes up. What do ESCs do when they have bad input?&lt;/p&gt;&#xA;" OwnerUserId="8884" LastActivityDate="2015-03-24T18:14:31.340" Title="Controlling an ESC for Brushless Motors with an RPi" Tags="&lt;quadcopter&gt;&lt;raspberry-pi&gt;&lt;brushless-motor&gt;&lt;esc&gt;&lt;multi-rotor&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6838" PostTypeId="1" AcceptedAnswerId="6840" CreationDate="2015-03-20T17:00:29.473" Score="2" ViewCount="146" Body="&lt;p&gt;I have a task of developing a simulation of an adaptive robot control system but I don't seem too have anyone to discuss my uncertainties with. I want to keep the simulation as simple as possible as I have a very tight deadline and it's only a one off project that most probably will never be used in my life again. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The minimal behaviour that the agent is supposed to exhibit is wall and obstacle avoidance. It can be extended to avoiding small objects and exploring large ones. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've decided to go with a simple feedback control system. &#xA;To begin with I'm struggling to decide how to represent the map of agent's environment. What I mean is, what if I want a wall to be from coordinate [0,0] to [0.5]. I could hard code it, e.g. have a matrix with coordinates of all obstacles but how small units do I make... I.e. what if I have two neighbouring coordinates [0,0.01] and [0,0.02] but the agents gets a 'clear to go' to coordinate [0,0.05]. In this case it doesn't know that it actually is about to walk into a wall. I've heard of something called occupancy grid map but I don't exactly get how it works and how to implement it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another thing that I am struggling with is how do I distinct between a wall and an obstacle? And then, how do I let the agent know how big that obstacle is so that it can either avoid it or explore it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Eh, I'm really puzzled with this project.&#xA;I would really appreciate any thoughts or directions. Thank you. :-)&lt;/p&gt;&#xA;" OwnerUserId="9325" LastEditorUserId="163" LastEditDate="2015-03-21T18:03:39.917" LastActivityDate="2015-03-21T18:03:39.917" Title="Implementation of wall and obstacle avoidance" Tags="&lt;control&gt;&lt;localization&gt;&lt;simulation&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6839" PostTypeId="2" ParentId="4755" CreationDate="2015-03-20T17:39:56.733" Score="1" Body="&lt;p&gt;Parameter &quot;r&quot; or &quot;a&quot; is the link length of a robot's link which is a physical entity. And that can never be negative. &lt;/p&gt;&#xA;" OwnerUserId="9328" LastActivityDate="2015-03-20T17:39:56.733" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6840" PostTypeId="2" ParentId="6838" CreationDate="2015-03-21T17:04:00.937" Score="2" Body="&lt;p&gt;There's a lot of questions here, so I expect pushback from the peanut gallery, but I'll answer what I can.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First off, a wall &lt;em&gt;is&lt;/em&gt; an obstacle, right? There's no difference there other than what words you use to describe &quot;a place a robot cannot go&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So now, we just need a way to &lt;em&gt;store&lt;/em&gt; the locations of obstacles so that we know where the robot can go. This is your map.  One way of storing this map, as you mentioned, is an occupancy grid. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;An occupancy grid (for two dimensional environments, like a floor) is simply an N by M matrix of numbers. In each &quot;cell&quot; we store the probability that an object is present. Cells that contain a zero are known to be clear (unlikely objects). Cells with a 1 are obstacles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here, N and M are the dimensions of the area.  If your workspace is 10 meters by 10 meters, and your robot is small, then a reasonable choice of N and M is 10x10.   This gives you a resolution of one square meter per cell.  For higher resolution, 100x100 would give you a tenth of a meter resolution. Good enough for navigating an iRobot Create, in my experience.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;How&lt;/em&gt; you fill these cells is up to you. If you know that a wall goes from [0,0] to [5,5], for example, you can fill each cell between those two points with ones.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Sidebar&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;So why &lt;em&gt;wouldn't&lt;/em&gt; we use this representation? Well one reason is the space the map takes up. If you are navigating in a hallway, you really only need to know that it is bounded by two lines. So storing the length and position of these lines is enough. That's a small number of variables to represent any length or size of hallway. With an occupancy grid, we'd have to store &lt;em&gt;all of the cells&lt;/em&gt; to understand the configuration of the hallway. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, occupancy grids are probably the most modular, extensible, flexible, etc mapping techniques.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;How to &quot;fill&quot; the cells&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Great question. You'd want to fill all cells that the line touches. To see if a line goes through a certain cell, you can check if the line (ray) collides with the cell (box). Since the box is aligned with the X and Y axes, this is known as the Axis-Aligned Bounding Box intersection problem. &lt;a href=&quot;https://gamedev.stackexchange.com/q/18436&quot;&gt;see this question&lt;/a&gt;. This may not be the best way to &quot;fill&quot; the cells, as you may have to iterate over the whole map. &lt;a href=&quot;https://stackoverflow.com/q/10350258&quot;&gt;here&lt;/a&gt; is a way to find all cells intersected by a line.&lt;/p&gt;&#xA;" OwnerUserId="163" LastEditorUserId="-1" LastEditDate="2017-05-23T12:37:11.430" LastActivityDate="2015-03-21T18:00:59.477" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6841" PostTypeId="2" ParentId="1538" CreationDate="2015-03-22T02:07:53.393" Score="0" Body="&lt;p&gt;To make a 89 degree turn you need a miter gear.  Amazon has a plastic one that is approximately 2 inches (5 cm) across the face This is by Boston Gear GP1632Y Miter Gear, 0.500&quot; Bore, 1:1 Ratio, 20 degree Pressure Angle, 16 Pitch, 32 Teeth, Molded Nylon.  there is another one shown with a 1 inch face and a 14 degree pressure angle and 14 teeth.  Miter gears always need to be purchased in pairs to mesh properly.  This can be used by attaching a small motor or a manual crank to activate the mechanism you are trying to move. &lt;/p&gt;&#xA;" OwnerUserId="9333" LastActivityDate="2015-03-22T02:07:53.393" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6842" PostTypeId="1" CreationDate="2015-03-22T04:35:44.400" Score="1" ViewCount="4502" Body="&lt;p&gt;I have a 4-DOF robot arm system with 4 revolute joints arranged in an open-chain fashion like below:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/wU0VL.png&quot; alt=&quot;4-DOF robotic arm&quot;&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assume that each link’s mass is a point mass located at p_i and each link’s center of mass is at p_i.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I am trying to do is calculate the center of mass Jacobian matrix of the arm.&#xA;I found some related materials online &lt;a href=&quot;http://www.elysium-labs.com/robotics-corner/learn-robotics/biped-basics/com-jacobian/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Center of Mass Jacobian&lt;/a&gt;.But I am still not very sure about how to calculate it. Could anybody give me some hint? Thanks!&lt;/p&gt;&#xA;" OwnerUserId="9157" LastActivityDate="2015-04-24T10:28:03.593" Title="How to calculate the center of mass Jacobian matrix of a robot arm" Tags="&lt;robotic-arm&gt;&lt;jacobian&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6843" PostTypeId="1" CreationDate="2015-03-22T05:30:03.743" Score="2" ViewCount="5902" Body="&lt;p&gt;Been working on a robot recently which uses ultrasonic sensors for an integral part of the navigation.&#xA;While testing the sensors I noticed a strange behaviour, the sensors seem to frequently stop functioning and bring the entire Arduino Mega I'm working with to a stop. The strange part is that these stops seem to be entirely random, on some occasions the sensor will read values consistently (at maybe 20 vals per second) for 10+ seconds, then all of a sudden the sensor will slow to reading only 2-3 values per second with stalls between.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have tested several sensors and different codes for pinging distances yet the problem has persisted.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This leads me to believe the issue is with the arduino mega itself, but I am unsure how to verify this. Any advice?&#xA;Thanks in advance!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS: other pins on the Mega seem to be working fine, i.e. analog pins for IR reflectance sensors and PWM pins for driving 2 DC motors.&lt;/p&gt;&#xA;" OwnerUserId="8864" LastActivityDate="2018-09-27T17:07:24.667" Title="Sporadic sensing rates for hc-sr04 ultrasonic distance sensor" Tags="&lt;arduino&gt;&lt;ultrasonic-sensors&gt;" AnswerCount="4" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6844" PostTypeId="1" CreationDate="2015-03-22T05:57:31.200" Score="1" ViewCount="666" Body="&lt;p&gt;I want to build a quad copter. I want to know how do we calculate thrust or lift generated by using a motor, I am not aware about the capacities of motor. So can you explain how to calculate thrust or lift generated by assuming a motor. And what is the maximum payload that a quad copter can lift for a given thrust. &lt;/p&gt;&#xA;" OwnerUserId="9335" LastActivityDate="2015-03-24T17:48:52.813" Title="aerodynamics of quadcopter" Tags="&lt;quadcopter&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6845" PostTypeId="1" AcceptedAnswerId="6848" CreationDate="2015-03-22T07:47:53.363" Score="0" ViewCount="149" Body="&lt;p&gt;Im looking for a good source for robotic components like sheel/tracked robot chasis, motors, sensors, communication and mechanics. I thought about using raspberry and arduino as platforms for automation, is that an good idea? Im asking as i dont know yet much about the motors/drives uses for powering robots.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Uli&lt;/p&gt;&#xA;" OwnerUserId="9336" LastActivityDate="2015-03-24T23:09:25.947" Title="Recommendation for good source of Robotic Components" Tags="&lt;mobile-robot&gt;&lt;motor&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ClosedDate="2015-04-08T10:29:07.197" ContentLicense="CC BY-SA 3.0" />
  <row Id="6846" PostTypeId="1" CreationDate="2015-03-22T11:59:40.947" Score="0" ViewCount="623" Body="&lt;p&gt;I have an Arduino Mega board and the Adafruit Ultimate GPS Logger + GPS module shield. I have these two connected together using headers and have the entire thing mounted on my drone. Currently, I have a code that I found online and modified slightly to get GPS coordinates in NMEA format and parse them for the information I actually want. I can store these in an SD card.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The thing is, I want to use the Arduino GSM shield to somehow send this data, either from the SD card or directly, to a folder in Dropbox. I have no idea how to do that, if it's possible at all. I just started working with Arduino about a month ago, so I apologize if my question sounds particularly noob-ish.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could anyone on this forum at least guide me on how to approach this problem? Thanks!&lt;/p&gt;&#xA;" OwnerUserId="9304" LastActivityDate="2015-03-22T11:59:40.947" Title="Datalogging from Arduino Mega to Dropbox" Tags="&lt;arduino&gt;&lt;gps&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6847" PostTypeId="2" ParentId="5201" CreationDate="2015-03-22T13:49:19.170" Score="1" Body="&lt;p&gt;You can use a magnetic clutch. When the strain on the horn passes a particular mark, it overpowers the pairs of magnets holding the clutch plates causing it to slip without damaging the gears. You can easily make them, and here is a company selling them &lt;a href=&quot;http://robosavvy.com/store/dagu-magnetic-servo-clutches-for-miniature-servos.html&quot; rel=&quot;nofollow&quot;&gt;http://robosavvy.com/store/dagu-magnetic-servo-clutches-for-miniature-servos.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to use an off the shelf one there are clutches designed for r/c cars that you maybe able to use. There is a description of one here &lt;a href=&quot;http://nitrorc.com/articles/clutch.html&quot; rel=&quot;nofollow&quot;&gt;http://nitrorc.com/articles/clutch.html&lt;/a&gt; and here is a company that sells them &lt;a href=&quot;http://www.bukupower.com/clutch.aspx&quot; rel=&quot;nofollow&quot;&gt;http://www.bukupower.com/clutch.aspx&lt;/a&gt; .These are designed for use with gas vehicles so some modification to your design maybe required. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It may also not be too hard to make a gear train disengagement mechanism you can control using a servo.&lt;/p&gt;&#xA;" OwnerUserId="9311" LastActivityDate="2015-03-22T13:49:19.170" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6848" PostTypeId="2" ParentId="6845" CreationDate="2015-03-22T16:45:29.570" Score="1" Body="&lt;p&gt;Some reputable sources of getting robot parts are:&lt;br/&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.adafruit.com/category/227&quot; rel=&quot;nofollow&quot;&gt;Adafruit&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.robotshop.com/&quot; rel=&quot;nofollow&quot;&gt;Robotshop&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.robotmarketplace.com/store.html&quot; rel=&quot;nofollow&quot;&gt;Robot Marketplace&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.pololu.com/&quot; rel=&quot;nofollow&quot;&gt;Pololu&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.jameco.com/Jameco/robot/robotstore.html&quot; rel=&quot;nofollow&quot;&gt;Jameco Robot Store&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.trossenrobotics.com/robot-parts.aspx&quot; rel=&quot;nofollow&quot;&gt;Trossen Robotics&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/index.asp&quot; rel=&quot;nofollow&quot;&gt;HobbyKing&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;If you need to get specialized electronic parts (e.g. microcontrollers, transistors, etc.) then you might want to look into:&lt;br/&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.digikey.com/&quot; rel=&quot;nofollow&quot;&gt;Digi-Key&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.jameco.com/webapp/wcs/stores/servlet/StoreCatalogDisplay?storeId=10001&amp;amp;catalogId=10001&amp;amp;langId=-1&amp;amp;rfr=1&quot; rel=&quot;nofollow&quot;&gt;Jameco&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.newark.com/&quot; rel=&quot;nofollow&quot;&gt;Newark Element 14&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;These are only to name a few to help you get started.&lt;/p&gt;&#xA;" OwnerUserId="4210" LastActivityDate="2015-03-22T16:45:29.570" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6849" PostTypeId="1" CreationDate="2015-03-22T17:14:33.507" Score="4" ViewCount="3728" Body="&lt;p&gt;I'm trying to do graph optimization with G2O, mainly in order to perform loop closure. However finding minimal working examples online is an issue (I've found &lt;a href=&quot;https://github.com/MiguelAlgaba/KinectSLAM6D/blob/9891798038fe0b693390513d36fb83346988bf91/kinect6DSLAM.cpp&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; project, as well as &lt;a href=&quot;https://github.com/jstueckler/mrsmap/blob/2e1c378b3d22520dcc07f650b35b881fbd3e529a/src/slam/slam.cpp&quot; rel=&quot;nofollow noreferrer&quot;&gt;this one&lt;/a&gt;. The second one though has the form of a library, so one cannot really see how the author uses things.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In contrast to online loop closure, where people update and optimize a graph every time they detect a loop, I'm doing graph optimization only once, after pairwise incremental registration. So in my case, pairwise registration and global, graph-based optimization are two separate stages, where the result of the first is the input for the second.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I already have a working solution, but the way that works for me is quite different from the usual use of g2o:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;As nodes I have identity matrices (i.e. I consider that my pointclouds are already transformed with the poses of the pairwise reg. step) and &lt;/li&gt;&#xA;&lt;li&gt;as edges, I use the relative transformation based on the keypoints of&#xA;the pointclouds (also the keypoints are transformed). So in this case&#xA;I penalize deviations of the relative pose from the identity matrix.&lt;/li&gt;&#xA;&lt;li&gt;As Information matrix (inverse of covariance) I simply use a 6x6&#xA;identity matrix multiplied by the number of found correspondences&#xA;(like &lt;a href=&quot;https://github.com/MiguelAlgaba/KinectSLAM6D/blob/9891798038fe0b693390513d36fb83346988bf91/kinect6DSLAM.cpp&quot; rel=&quot;nofollow noreferrer&quot;&gt;this case&lt;/a&gt;). &lt;/li&gt;&#xA;&lt;li&gt;The result of the graph is an update matrix,&#xA;i.e. I have to multiply with this the camera poses. &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Although this works in many/most cases, it is a quite unusual approach, while one cannot draw the graph for debugging (all nodes are identities in the beginning, and the result after optimization is a 3d path), which means that if something goes wrong getting an intuition about this is not always easy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/XPvL9.png&quot; alt=&quot;enter image description here&quot;&gt; &lt;img src=&quot;https://i.stack.imgur.com/BGnxT.png&quot; alt=&quot;enter image description here&quot;&gt; &lt;img src=&quot;https://i.stack.imgur.com/Kg30b.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I'm trying to follow the classic approach:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The vertices/nodes are the poses of the pairwise registration&lt;/li&gt;&#xA;&lt;li&gt;The edges are the relative transformations based on the keypoints/features of the raw pointclouds (i.e. in the camera frame, not transformed by the poses of the pairwise registration)&lt;/li&gt;&#xA;&lt;li&gt;The output are the new poses, i.e. one simply replaces the old poses with the new ones&lt;/li&gt;&#xA;&lt;li&gt;Drawing the graph in this case makes sense. For example in case of scanning an object with a turntable, the camera poses form a circle in 3d space.&lt;/li&gt;&#xA;&lt;li&gt;I'm trying to form all the edges and then optimize only at one stage (this doesn't mean only 1 LM iteration though).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;However I cannot make things running nicely with the 2nd approach.&#xA;I've experimented a lot with the direction of the edges and the relative transformation that is used as measurement in the edges, everything looks as expected, but still no luck. For simplicity I still use the information matrix as mentioned above, it is a 6x6 identity matrix multiplied with the number of correspondences. In theory the information matrix is the inverse of covariance, but I don't really do this for simplicity (plus, following &lt;a href=&quot;https://github.com/jstueckler/mrsmap/blob/2e1c378b3d22520dcc07f650b35b881fbd3e529a/src/registration/multiresolution_surfel_registration.cpp&quot; rel=&quot;nofollow noreferrer&quot;&gt;this way&lt;/a&gt; to compute the covariance is not very easy).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/Lvmdu.png&quot; alt=&quot;enter image description here&quot;&gt; &lt;img src=&quot;https://i.stack.imgur.com/LfwqV.png&quot; alt=&quot;enter image description here&quot;&gt; &lt;img src=&quot;https://i.stack.imgur.com/DYbgw.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any minimal working examples that I'm not aware of?&#xA;Is there something fundamentally wrong in what I describe above?&#xA;Are any rules of thumb (e.g. the first node in both approaches above is fixed) that I should follow and I might not be aware of them?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Update: More specific questions&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The nodes hold the poses of the robot/camera. It is unclear though at which reference frame they are defined. If it is the world coordinate frame, is it defined according to the camera or according to the object, i.e. first acquired pointcloud? This would affect the accumulation of the pose matrices during incremental registration (before the g2o stage - I try to form and optimize the graph only once at the end, for all the frames/pointclouds).&lt;/li&gt;&#xA;&lt;li&gt;The edge (Src-&gt;Tgt) constraints hold the relative transformation from pointcloudSrc to pointcloudTgt. Is it just the transformation based on the features of the two in the local coordinate frame of pointcloudSrc? Is there and tricky point regarding the direction, or just consistency with the relative transformation is enough?&lt;/li&gt;&#xA;&lt;li&gt;The first node is always fixed. Does the fixed node affect the direction of the edge that departs/ends_up from/at the fixed node?&lt;/li&gt;&#xA;&lt;li&gt;Is there any other tricky point that could hinter implementation?&lt;/li&gt;&#xA;&lt;li&gt;I'm working in millimeter instead of meter units, I'm not sure if this will affect the solvers of g2o in any way. (I wouldn't expect so, but a naive use of g2o that was giving some usable results was influenced)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="9317" LastEditorUserId="9317" LastEditDate="2015-03-25T17:47:44.093" LastActivityDate="2015-06-25T23:10:39.763" Title="Graph optimization with G2O" Tags="&lt;slam&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6850" PostTypeId="2" ParentId="6843" CreationDate="2015-03-22T17:38:39.667" Score="0" Body="&lt;p&gt;Looking at the signal waveform in the datasheet of the &lt;a href=&quot;http://www.micropik.com/PDF/HCSR04.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;HC-SR04 ultrasonic sensor&lt;/a&gt;, we can see that measuring the &quot;echo back&quot; pulse is proportional to the distance between the sensor and the object in front.&#xA;&lt;img src=&quot;https://i.stack.imgur.com/qXspy.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To be able to time this &quot;echo back&quot; pulse, this would require the use of an interrupt and a timer which is ubiquitously found in many microcontrollers.  That is an interrupt will be used to detect the rising edge of the signal to start the timer and the falling edge of the signal to stop the timer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming that you are using the Arduino Mega 2560 (the concepts can also apply to the Arduino Mega as well), browsing through the datasheet of the &lt;a href=&quot;http://www.atmel.com/Images/Atmel-2549-8-bit-AVR-Microcontroller-ATmega640-1280-1281-2560-2561_datasheet.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;ATmega2560 microcontroller&lt;/a&gt; found on the board, the Input Capture Unit elaborated on page 140 will be able to achieve this task.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is very critical that you time this pulse with an interrupt.  The microcontroller can only execute one instruction at a time, so using a regular input/output pin and polling the pins to time this pulse could introduce latency into the system.  For example the code could be executing at some other place in the program and at the same time there is a change in the pulse signal, thus effectively missing the measurement and producing an incorrect result.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you need to do is figure out whether the code you are using is employing the Input Capture Unit.  If not,then see how the Input Capture Unit maps to the header pins of the Arduino Mega 2560 and how to enable the feature in the code (e.g. using an Arduino library, statements, etc.)&lt;/p&gt;&#xA;" OwnerUserId="4210" LastActivityDate="2015-03-22T17:38:39.667" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6852" PostTypeId="1" CreationDate="2015-03-23T05:29:28.577" Score="0" ViewCount="473" Body="&lt;p&gt;I need the specifications for the Create 2. I need it for research purposes. So I think I'm going to need a high computational computer on board.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please suggest some nice configuration. &lt;/p&gt;&#xA;" OwnerUserId="9339" LastEditorUserId="9176" LastEditDate="2016-03-11T06:09:21.817" LastActivityDate="2018-07-18T13:28:23.830" Title="I need the specifications for iRobot Create 2" Tags="&lt;irobot-create&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ClosedDate="2016-03-14T01:38:20.753" ContentLicense="CC BY-SA 3.0" />
  <row Id="6853" PostTypeId="1" CreationDate="2015-03-23T13:45:28.953" Score="0" ViewCount="413" Body="&lt;p&gt;We bought a new Create2 robot and started using it. But when we issue the dock command the robot moves for a bit and does not go back to the base.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The base is not hidden or obstructed and the create2 is just a couple of feet away. we need help to figure out why it does not see the base.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just to clarify that even using the DOCK button on the create2 does not make the create2 go back to the base&lt;/p&gt;&#xA;" OwnerUserId="9322" LastEditorUserId="9322" LastEditDate="2015-03-23T18:08:30.170" LastActivityDate="2015-03-24T21:18:24.883" Title="Dock command does not seem to work" Tags="&lt;irobot-create&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6854" PostTypeId="1" CreationDate="2015-03-23T14:08:57.807" Score="1" ViewCount="93" Body="&lt;p&gt;my name is dylan we are doing a project on irobot create and we would like to know the specifications graph showing the battery discharges in volt per time and my robot is the irobot ceate 1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The battery is the roomba advanced power , it's a 14.4V Nickel metal hybride battery pack and she deliver 3000mah.&lt;/p&gt;&#xA;" OwnerUserId="9340" LastActivityDate="2015-03-23T19:38:55.047" Title="the specifications graph showing the battery discharges in volt per time" Tags="&lt;irobot-create&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6855" PostTypeId="2" ParentId="6852" CreationDate="2015-03-23T14:26:09.880" Score="5" Body="&lt;p&gt;I'm not sure which specifications you're asking about, but the manual is &lt;a href=&quot;http://www.irobot.com/~/media/MainSite/PDFs/About/STEM/Create/create_2_Open_Interface_Spec.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as &quot;nice configuration,&quot; it really depends on what you're up to. A Raspberry Pi 2 can run ROS reasonably well, and is relatively inexpensive. As a bonus, there's a write-up on how to hook up a Pi &lt;a href=&quot;http://www.irobot.com/~/media/MainSite/PDFs/About/STEM/Create/RaspberryPi_Tutorial.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. You could also use a netbook with the supplied Create 2 to USB cable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please note that I am an iRobot employee, but the postings on this site are my own and don't necessarily represent iRobot's positions, strategies, or opinions.&lt;/p&gt;&#xA;" OwnerUserId="7665" LastEditorUserId="7665" LastEditDate="2018-07-18T13:28:23.830" LastActivityDate="2018-07-18T13:28:23.830" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6856" PostTypeId="2" ParentId="6818" CreationDate="2015-03-23T16:56:35.283" Score="0" Body="&lt;p&gt;Sure, as along as you can measure orientation (compass, GPS, whatever). Remember the initial orientation and then before figuring out the direction to command the robot, you just need to rotate the coordinates. So if the joystick (DRIVER) and robot are aligned to start (initial offset 0) and then the robot is pointing, say at 90 degrees, and you command the robot to move in the 180 direction FROM THE DRIVER PERSPECTIVE, you take the 180 minus the current orientation of the robot (90) and issue a command for the robot to move in the 90 degree direction IN IT'S OWN ROTATED COORDINATE SYSTEM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So robot command is driver coordinate command direction minus current robot direction relative to the driver coordinate (which was stored at initiation). Just add one more factor if the robot and driver aren't initially aligned. &lt;/p&gt;&#xA;" OwnerUserId="58" LastActivityDate="2015-03-23T16:56:35.283" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6857" PostTypeId="2" ParentId="6854" CreationDate="2015-03-23T19:38:55.047" Score="6" Body="&lt;p&gt;There are a number of factors that affect battery voltage of NiMH batteries during discharge versus time.  Discharge rate, battery temperature, and battery age are all major contributing factors.  As a result there is no one graph of battery voltage vs. time, there are usually a family of curves.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could characterize the battery you have by measuring the voltage at specific time intervals during a discharge and build the graph yourself.  Be aware that if you change the load current you will need to make a new characterization.  As the battery ages the internal resistance increases so your initial characterization will become progressively inaccurate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How do you plan to use this information?&lt;/p&gt;&#xA;" OwnerUserId="9343" LastActivityDate="2015-03-23T19:38:55.047" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6858" PostTypeId="2" ParentId="6817" CreationDate="2015-03-23T20:45:29.730" Score="2" Body="&lt;p&gt;The best control you can design is &quot;exact feed forward linearization based on differential flatness&quot;. This is a complete approach to design control laws for flat systems. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just PID is not a good idea : you will get overshoot and you do not master precisely position/velocity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Flatness is a generalization on controllability. Hence you are sure that your system can achieve any position/velocity profile provided you remain inside the physical constraints.&lt;/p&gt;&#xA;" OwnerUserId="9344" LastActivityDate="2015-03-23T20:45:29.730" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6859" PostTypeId="1" AcceptedAnswerId="6867" CreationDate="2015-03-24T04:31:32.250" Score="4" ViewCount="6172" Body="&lt;p&gt;I'm trying to implement the tracking problem for this &lt;a href=&quot;https://robotics.stackexchange.com/questions/4793/proportional-controller-error-doesnt-approach-zero&quot;&gt;example&lt;/a&gt; using PID controller. The dynamic equation is &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;I  \ddot{\theta} + d \dot{\theta} + mgL \sin(\theta) = u&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\theta$ : joint variable. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$u$ : joint torque&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$m$ : mass. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$L$ : distance between centre mass and joint. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$d$ : viscous friction coefficient&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$I$ : inertia seen at the rotation axis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\textbf{Regulation Problem:}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this problem, the desired angle $\theta_{d}$ is constant and $\theta(t)$ $\rightarrow \theta_{d}$ and $\dot{\theta}(t)$ $\rightarrow 0$ as $t$ $\rightarrow \infty$. For PID controller, the input $u$ is determined as follows&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;u = K_{p} (\theta_{d} - \theta(t)) + K_{d}( \underbrace{0}_{\dot{\theta}_{d}} -  \dot{\theta}(t) ) + \int^{t}_{0} (\theta_{d} - \theta(\tau)) d\tau&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The result is &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/3EFpL.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and this is my code  &lt;code&gt;main.m&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;clear all&#xA;clc&#xA;&#xA;global error;&#xA;error = 0;&#xA;&#xA;t = 0:0.1:5;&#xA;&#xA;x0 = [0; 0];&#xA;&#xA;[t, x] = ode45('ODESolver', t, x0);&#xA;&#xA;e = x(:,1) - (pi/2); % Error theta&#xA;&#xA;plot(t, e, 'r', 'LineWidth', 2);&#xA;title('Regulation Problem','Interpreter','LaTex');&#xA;xlabel('time (sec)');&#xA;ylabel('$\theta_{d} - \theta(t)$', 'Interpreter','LaTex');&#xA;grid on&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and &lt;code&gt;ODESolver.m&lt;/code&gt; is &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;function dx = ODESolver(t, x)&#xA;&#xA;global error; % for PID controller&#xA;&#xA;dx = zeros(2,1);&#xA;&#xA;%Parameters:&#xA;m = 0.5;       % mass (Kg)&#xA;d = 0.0023e-6; % viscous friction coefficient&#xA;L = 1;         % arm length (m)&#xA;I = 1/3*m*L^2; % inertia seen at the rotation axis. (Kg.m^2)&#xA;g = 9.81;      % acceleration due to gravity m/s^2&#xA;&#xA;&#xA;% PID tuning&#xA;Kp = 5;&#xA;Kd = 1.9;&#xA;Ki = 0.02;&#xA;&#xA;% u: joint torque&#xA;u = Kp*(pi/2 - x(1)) + Kd*(-x(2)) + Ki*error;&#xA;error = error + (pi/2 - x(1));&#xA;&#xA;dx(1) = x(2);&#xA;dx(2) = 1/I*(u - d*x(2) - m*g*L*sin(x(1)));&#xA;&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;$\textbf{Tracking Problem:}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I would like to implement the tracking problem in which the desired angle $\theta_{d}$ is not constant (i.e. $\theta_{d}(t)$); therefore, $\theta(t)$ $\rightarrow \theta_{d}(t)$ and $\dot{\theta}(t)$ $\rightarrow \dot{\theta}_{d}(t)$ as $t$ $\rightarrow \infty$. The input is &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;u = K_{p} (\theta_{d} - \theta(t)) + K_{d}( \dot{\theta}_{d}(t) -  \dot{\theta}(t) ) + \int^{t}_{0} (\theta_{d}(t) - \theta(\tau)) d\tau&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I have two problems namely to compute $\dot{\theta}_{d}(t)$ sufficiently and how to read from &lt;code&gt;txt&lt;/code&gt; file since the step size of &lt;code&gt;ode45&lt;/code&gt; is not fixed. For the first problem, if I use the naive approach which is &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\dot{f}(x) = \frac{f(x+h)-f(x)}{h}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;the error is getting bigger if the step size is not small enough. The second problem is that the desired trajectory is stored in &lt;code&gt;txt&lt;/code&gt; file which means I have to read the data with fixed step size but I'v read about &lt;code&gt;ode45&lt;/code&gt; which its step size is not fixed. Any suggestions!&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Edit:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For tracking problem, this is my code &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;main.m&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;clear all&#xA;clc&#xA;&#xA;global error theta_d dt;&#xA;error = 0;&#xA;&#xA;&#xA;theta_d = load('trajectory.txt');&#xA;&#xA;i    = 1;&#xA;t(i) = 0;&#xA;dt   = 0.1;&#xA;numel(theta_d)&#xA;while ( i &amp;lt; numel(theta_d) )&#xA;   i = i + 1;&#xA;   t(i) = t(i-1) + dt;&#xA;end&#xA;&#xA;x0 = [0; 0];&#xA;options= odeset('Reltol',dt,'Stats','on');&#xA;[t, x] = ode45(@ODESolver, t, x0, options);&#xA;&#xA; e = x(:,1) - theta_d; % Error theta&#xA;&#xA;&#xA;plot(t, x(:,2), 'r', 'LineWidth', 2);&#xA;title('Tracking Problem','Interpreter','LaTex');&#xA;xlabel('time (sec)');&#xA;ylabel('$\dot{\theta}(t)$', 'Interpreter','LaTex');&#xA;grid on&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;ODESolver.m&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;function dx = ODESolver(t, x)&#xA;&#xA;persistent i theta_dPrev&#xA;&#xA;if isempty(i)&#xA;    i = 1;&#xA;    theta_dPrev = 0;&#xA;end&#xA;&#xA;global error theta_d dt ; &#xA;&#xA;dx = zeros(2,1);&#xA;&#xA;%Parameters:&#xA;m = 0.5;       % mass (Kg)&#xA;d = 0.0023e-6; % viscous friction coefficient&#xA;L = 1;         % arm length (m)&#xA;I = 1/3*m*L^2; % inertia seen at the rotation axis. (Kg.m^2)&#xA;g = 9.81;      % acceleration due to gravity m/s^2&#xA;&#xA;&#xA;% PID tuning&#xA;Kp = 35.5;&#xA;Kd = 12.9;&#xA;Ki = 1.5;&#xA;&#xA;if ( i == 49 )&#xA;    i = 48;&#xA;end&#xA;% theta_d first derivative&#xA;theta_dDot  = ( theta_d(i) - theta_dPrev ) / dt;&#xA;theta_dPrev = theta_d(i);&#xA;&#xA;&#xA;% u: joint torque&#xA;u = Kp*(theta_d(i) - x(1)) + Kd*( theta_dDot - x(2)) + Ki*error;&#xA;error = error + (theta_dDot - x(1));&#xA;&#xA;dx(1) = x(2);&#xA;dx(2) = 1/I*(u - d*x(2) - m*g*L*sin(x(1)));&#xA;&#xA;i = i + 1;&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;trajectory's code is &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;clear all &#xA;clc&#xA;&#xA;a = 0:0.1:(3*pi)/2;&#xA;&#xA;file = fopen('trajectory.txt','w');&#xA;&#xA;&#xA;for i = 1:length(a)&#xA;    fprintf(file,'%4f \n',a(i));&#xA;end&#xA;&#xA;fclose(file);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The result of the velocity is &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/Lr1EO.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this correct approach to solve the tracking problem?&lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2015-04-09T14:43:37.373" Title="how to implement tracking problem with PID controller" Tags="&lt;control&gt;&lt;pid&gt;&lt;dynamics&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6861" PostTypeId="2" ParentId="6787" CreationDate="2015-03-24T10:07:18.147" Score="1" Body="&lt;p&gt;I'm going to completely disagree with previous answers stated. Robotics consists of two major parts: 1.Hardware and 2.Software. Mechanical and  electrical are generally subclasses of hardware. Software is a subclass of, you guessed it, software. Software encompasses programming of course, however some argue that it also encompasses algorithm analysis and computational processing. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nonetheless, the difficulty of starting a robotics workshop, as you call it, depends on the skills and backgrounds of the people you recruited. If everyone is a software engineer, you're going to have problems, the same applies for if everyone is a mechanical engineer. The hardest part of robotics comes from  understanding how all the encompassing disciplines and their respective principles come together to function in a single system. You have to be able to look at individual  subsystems and then understand how these subsystems interact with each other to create the main top-level system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway digressing from that tangent, if you are looking for a starting point look at arduino and at raspberry pi. The great thing is that they are open source, so you can look at other projects, make your own, and ask for help here and on their very active respective forums. Look at a website called seedstudio.com it has a large variety of arduino and raspberry pi compatible parts you can order and use for whatever you want.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for programs, for 3d cad user solid works or autodesk inventor. For PCBs eagle or tinycad are good. For programming the arduino ide or visual studio are good. And there's a site called opensourcehardware.com that has all the tutorials on arduino programming and interfacing with digital electronics. I would definitely encourage you to look at those. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Good Luck. &lt;/p&gt;&#xA;" OwnerUserId="9348" LastEditorUserId="9348" LastEditDate="2015-03-31T23:53:37.797" LastActivityDate="2015-03-31T23:53:37.797" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6862" PostTypeId="1" CreationDate="2015-03-24T11:47:46.903" Score="0" ViewCount="1492" Body="&lt;p&gt;I want to measure the real time RPM of the wheels. I think incremental rotary encoder would be good. But i am confused on how to interface it with DC brushless geared motors. From the images i am not quite sure if only one rotary encoder would suffice or do i need any other sensor also with it?&lt;br&gt;&#xA;I am doing my project on arduino uno.  &lt;/p&gt;&#xA;" OwnerUserId="9349" LastActivityDate="2015-04-16T16:15:25.393" Title="How to calculate the real time RPM of motor with rotary encoder?" Tags="&lt;motion&gt;&lt;forward-kinematics&gt;&lt;quadrature-encoder&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6863" PostTypeId="1" CreationDate="2015-03-24T12:31:55.273" Score="1" ViewCount="159" Body="&lt;p&gt;I want to build a cheap robot programmable in Scratch graphical language, that could be employed during lessons in school. Scratch code is interpreted on a PC, so on the robot there should be only the code that receives specific commands (i.e. drive forward) and transmits sensors' measurements. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm looking for a wireless technology that will allow me to exchange information between robot and PC with at least 30Hz rate. It should also allow to work at least 16 robots simultaneously in the same room and have a range of at least 20m. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did tests with BLuetooth, but sometimes there are connectivity issues, and pairing devices can be a hassle in a classroom. I have also tried WiFi modules, but pinging it showed average time of 19ms, but maximum of more than 500ms, so I'm afraid that it won't be able to control linefollower robot for example. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can you point me to some other, preferably cheap (under 10$ per module) wireless technologies? Or maybe my worries about WiFi are exaggerated?&lt;/p&gt;&#xA;" OwnerUserId="7360" LastActivityDate="2015-03-26T01:37:22.407" Title="What wireless technology to use to control robots in classroom?" Tags="&lt;mobile-robot&gt;&lt;radio-control&gt;&lt;wireless&gt;&lt;wifi&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6864" PostTypeId="2" ParentId="6844" CreationDate="2015-03-24T17:43:43.427" Score="1" Body="&lt;p&gt;This is actually quite complex and depends on a fair number of factors. You will need to know the specs of the motor, especially kV, but also its expected current draw and the internal resistance. Obviously, your choice of propellers will also have an effect, and so will your choice of powerplant. It also depends on the ambient air temperature and pressure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are online calculators that can help you in that regard, &lt;a href=&quot;http://www.ecalc.ch/xcoptercalc.php&quot; rel=&quot;nofollow&quot;&gt;this one&lt;/a&gt; lets you pick some common motor models and has a lot of other variables to consider. It offers feedback that includes lifting capabilities, engine efficiency and heat generated by the motors, among other things.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It should also be noted, that the theoretical values from the calculator can be quite different from the actual values you'll see in reality, but its a good starting point for helping you choose suitable equipment.&lt;/p&gt;&#xA;" OwnerUserId="1075" LastEditorUserId="1075" LastEditDate="2015-03-24T17:48:52.813" LastActivityDate="2015-03-24T17:48:52.813" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6865" PostTypeId="2" ParentId="6837" CreationDate="2015-03-24T18:04:28.973" Score="1" Body="&lt;p&gt;Operating an ESC is practically the same as operating a &lt;a href=&quot;http://en.wikipedia.org/wiki/Servo_control&quot; rel=&quot;nofollow&quot;&gt;servo&lt;/a&gt;. The main difference is that instead of the pulse width translating to a position  on the servo, it translates to an output speed. The range of widths is identical with ~1000µs representing the lowest setting and ~2000µs representing full on.  These values can sometimes go beyond (as overshoot), but those are usually considered the 0% and 100% values.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would search for any sort of servo libraries for the RasPi, they will do the trick. Using an additional servo controller though is always an option. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is completely reasonable to use the BEC to power your electronics.&lt;/p&gt;&#xA;" OwnerUserId="1075" LastEditorUserId="1075" LastEditDate="2015-03-24T18:14:31.340" LastActivityDate="2015-03-24T18:14:31.340" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6866" PostTypeId="2" ParentId="6822" CreationDate="2015-03-24T18:14:04.550" Score="2" Body="&lt;p&gt;There isn't exactly a predictable correspondence of the two. I mean, you've already said that 1500us is the mid point. Values above or below that are really just amounts of &lt;em&gt;pressure&lt;/em&gt; to apply to the model in order to move it. The actual angle will depend very much on how you have tuned your PID, but will also be influenced by the wind and the weather. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;All you can really do is log the values of the width of the pulse which you can translate to how far the stick has been moved. Beyond that I wouldn't rely too much on 'angles'.&lt;/p&gt;&#xA;" OwnerUserId="1075" LastActivityDate="2015-03-24T18:14:04.550" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6867" PostTypeId="2" ParentId="6859" CreationDate="2015-03-24T18:21:49.507" Score="2" Body="&lt;p&gt;I've made few changes to your ODESolver:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;The time step requested by ODE45 is not going to match what you have in your file. In your &lt;code&gt;ODESolver()&lt;/code&gt; desired thetas are read one after the other and then the last one is repeated. As a result the desired theta was not a function of $t$. I used &lt;code&gt;interp1()&lt;/code&gt; to fix that.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The time difference between two iteration of ODE45 is not constant so you can't use &lt;code&gt;dt&lt;/code&gt; to calculate the $\Delta{\theta}$. This is fixed by storing the &lt;code&gt;t&lt;/code&gt; in a variable for future reference.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Same goes for calculating the integral part of PID.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Here is the new &lt;code&gt;ODESolver()&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;function dx = ODESolver(t, x)&#xA;persistent theta_dPrev time_prev&#xA;&#xA;if isempty(theta_dPrev)&#xA;    theta_dPrev = 0;&#xA;    time_prev = 0;&#xA;end&#xA;&#xA;global error theta_d dt time_array; &#xA;&#xA;dx = zeros(2,1);&#xA;&#xA;%Parameters:&#xA;m = 0.5;       % mass (Kg)&#xA;d = 0.0023e-6; % viscous friction coefficient&#xA;L = 1;         % arm length (m)&#xA;I = 1/3*m*L^2; % inertia seen at the rotation axis. (Kg.m^2)&#xA;g = 9.81;      % acceleration due to gravity m/s^2&#xA;&#xA;&#xA;% PID tuning&#xA;Kp = 40;%35.5;&#xA;Kd = 10;%12.9;&#xA;Ki = 20;%1.5;&#xA;&#xA;% theta_d first derivative&#xA;theta_desired_current = interp1(time_array,theta_d,t);&#xA;if t==time_prev&#xA;    theta_dDot = 0;&#xA;else&#xA;    theta_dDot  = ( theta_desired_current - theta_dPrev ) / (t-time_prev);&#xA;end&#xA;theta_dPrev = theta_desired_current;&#xA;&#xA;&#xA;% u: joint torque&#xA;u = Kp*(theta_desired_current - x(1)) + Kd*( theta_dDot - x(2)) + Ki*error;&#xA;error = error + (theta_desired_current - x(1))*(t-time_prev);&#xA;&#xA;dx(1) = x(2);&#xA;dx(2) = 1/I*(u - d*x(2) - m*g*L*sin(x(1)));&#xA;&#xA;&#xA;&#xA;time_prev = t;&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I also changed the &lt;code&gt;main.m&lt;/code&gt; to the following:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;clear all; close all; clc;&#xA;&#xA;global error theta_d dt time_array;&#xA;error = 0;&#xA;&#xA;theta_d = load('trajectory.txt');&#xA;% theta_d = sin([1:.1:20]/3);&#xA;&#xA;time_array=0:dt:dt*(numel(theta_d)-1);&#xA;&#xA;&#xA;x0 = [0; 0];&#xA;options= odeset('Reltol',dt,'Stats','on');&#xA;[t_ode, x] = ode45(@ODESolver, [time_array(1),time_array(end)], x0, options);&#xA;&#xA;theta_desired_ode = interp1(time_array,theta_d,t_ode);&#xA; e = x(:,1) - theta_desired_ode; % Error theta&#xA;&#xA;figure(1)&#xA;plot(t_ode, x(:,2), 'r', 'LineWidth', 2);&#xA;title('Velocity','Interpreter','LaTex');&#xA;xlabel('time (sec)');&#xA;ylabel('$\dot{\theta}(t)$', 'Interpreter','LaTex');&#xA;grid on&#xA;&#xA;figure(2)&#xA;plot(t_ode,x(:,1))&#xA;hold on &#xA;plot(t_ode,theta_desired_ode)&#xA;title('Theta','Interpreter','LaTex');&#xA;xlabel('time (sec)');&#xA;ylabel('$\dot{\theta}(t)$', 'Interpreter','LaTex');&#xA;legend('Actual Theta', 'Desired Theta')&#xA;grid on&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="9232" LastEditorUserId="9232" LastEditDate="2015-03-24T19:10:20.423" LastActivityDate="2015-03-24T19:10:20.423" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="6868" PostTypeId="2" ParentId="6859" CreationDate="2015-03-24T18:58:30.480" Score="3" Body="&lt;p&gt;Since both $\theta_d\left(t\right)$ and $\dot\theta_d\left(t\right)$ are references at your disposal, i.e. you have to provide them in some way, why don't you simply play with $\dot\theta_d\left(t\right)$ and then compute $\theta_d\left(t\right)$ accordingly by means of integration? As you might know, integration is a well posed operation compared with the derivative.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, $\dot\theta\left(t\right)$ is a different &quot;beast&quot;. In physical systems you barely have access to it (you'd need ad-hoc sensors for measuring it). Valid alternatives are: Kalman estimation, Savitzky-Golay filtering, use of proper D term in the controller equipped with a high-frequency pole.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2015-03-24T19:09:06.510" LastActivityDate="2015-03-24T19:09:06.510" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6869" PostTypeId="1" CreationDate="2015-03-24T19:35:10.030" Score="0" ViewCount="843" Body="&lt;p&gt;I am trying to work with the create2. In using the &quot;get distance traveled&quot; command (id 142) I am getting back incorrect data. My simple test case logic is&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am working with the Create2_TetheredDrive.py example&#xA;and adding this&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    elif k == 'PLUS' or k == 'MINUS': # Move 200mm forward or backward&#xA;        # reset distance measurement by sending request&#xA;        sendCommandASCII('142 19') &#xA;        # ignore/discard the data returned&#xA;        recv_basic(connection)&#xA;        # set velocity mm/s&#xA;        v = 200;&#xA;        if k=='MINUS':&#xA;            v=-v&#xA;        # start moving&#xA;        cmd = struct.pack(&quot;&amp;gt;Bhh&quot;, 145, v, v)&#xA;        sendCommandRaw(cmd)&#xA;        # pause 1 second&#xA;        time.sleep(1);&#xA;        # stop moving&#xA;        cmd = struct.pack(&quot;&amp;gt;Bhh&quot;, 145, 0, 0)&#xA;        sendCommandRaw(cmd)&#xA;        # get distance traveled&#xA;        sendCommandASCII('142 19') &#xA;        data = recv_basic(connection)&#xA;        dist = struct.unpack('&amp;gt;h',data)&#xA;        print(dist)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I consistently numbers near -25 for moving forward, and +25 for moving backward.&#xA;If I wait for 2 seconds, I get -50 for moving forward, and +50 for moving backward. The documentation says it should return the distance traveled in mm, so these numbers seem to be off by a factor of -8.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyone have any suggestions? Thanks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;p.s. I had to add this function to the example as well&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;def recv_basic(the_socket):&#xA;    the_socket.settimeout(0.1)&#xA;    total_data=[]&#xA;    while True:&#xA;        try:&#xA;            data = the_socket.recv(8192)&#xA;            total_data.append(data)&#xA;        except:&#xA;            break&#xA;    return ''.join(total_data)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="9350" LastActivityDate="2018-07-19T12:50:53.603" Title="Roomba Create 2 problem reading distance traveled" Tags="&lt;irobot-create&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6870" PostTypeId="1" CreationDate="2015-03-24T19:44:10.573" Score="0" ViewCount="480" Body="&lt;p&gt;I teach a university sophomore level MATLAB programming class for engineers, and I am planning on using the create2 for their final project. There is a nice simulator and MATLAB toolbox for the Create, but the toolbox utilizes some of the commands that no longer exist on the Create 2, thus it doesn't work correctly. And of course is doesn't support any of the newer commands. In addition, I want to be able to &quot;cut the cord&quot; so I am using a Raspberry Pi on the Create to pipe data to the serial port, and TCPIP sockets to send the data from a remote computer running MATLAB to the Pi/Create. If anyone is working on a similar configuration, I'd love to trade notes and share the pain.&lt;/p&gt;&#xA;" OwnerUserId="9350" LastActivityDate="2015-03-26T17:40:41.070" Title="Controlling the iRobot Create 2 with MATLAB" Tags="&lt;irobot-create&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6871" PostTypeId="2" ParentId="6853" CreationDate="2015-03-24T21:18:24.883" Score="2" Body="&lt;p&gt;The dock command and pressing the dock button on the robot enable the same behavior. The robot does not go directly to the dock, because it does not know where the dock is. Instead, it drives around until it happens to encounter the dock's infrared beams, which extend about 10 feet in front of the dock. Once Roomba encounters the dock beams, it will line up with the charging base and dock.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you place the robot in front of the dock, facing it, and press the dock button, it should go directly onto the dock. If the robot starts somewhere else, it may take several minutes to find the dock. This is normal.&lt;/p&gt;&#xA;" OwnerUserId="4373" LastActivityDate="2015-03-24T21:18:24.883" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6872" PostTypeId="2" ParentId="6782" CreationDate="2015-03-24T21:29:28.420" Score="1" Body="&lt;p&gt;If your robot communicates at 57600 baud, then it is a Roomba 400 series robot, and you should use the manual that En3rGy posted, not the one for Create 2. That said, the LEDs command (139) is identical in all versions of Create and Roomba, so clearly something else is going on. Try a baud rate of 57600. It's possible that when you send data at 57200, some data corruption is happening as Create tries to interpret it at 57600 baud.&lt;/p&gt;&#xA;" OwnerUserId="4373" LastActivityDate="2015-03-24T21:29:28.420" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6873" PostTypeId="2" ParentId="2787" CreationDate="2015-03-24T21:37:34.993" Score="0" Body="&lt;p&gt;If there is a gap, divot, crease, etc, between plates you might be able to count the number of plates that go past using a tactile micro switch. The holes in the plates used to 'pick' the weight could be used if the plates interface were sufficiently smooth to prevent counting transitions. Of course you would need to know the direction of movement and be able to tell when the completely picked stack was passed. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another alternative might be using a light beam through the pole the weights ride on, which would be blocked by the pin. Though this seems more error prone. &lt;/p&gt;&#xA;" OwnerUserId="9091" LastActivityDate="2015-03-24T21:37:34.993" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6875" PostTypeId="2" ParentId="6845" CreationDate="2015-03-24T23:09:25.947" Score="0" Body="&lt;p&gt;&lt;a href=&quot;http://www.radioshack.com&quot; rel=&quot;nofollow&quot;&gt;Radioshack&lt;/a&gt; is good, although it recently went bankrupt, but a few of their stores are still around. &lt;a href=&quot;http://www.ti.com&quot; rel=&quot;nofollow&quot;&gt;Texas Instruments&lt;/a&gt; is a good source, it's out of Texas and has nearly any electronic components needed.&lt;/p&gt;&#xA;" OwnerUserId="9352" LastActivityDate="2015-03-24T23:09:25.947" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6876" PostTypeId="2" ParentId="2034" CreationDate="2015-03-24T23:55:58.213" Score="1" Body="&lt;p&gt;The printrbot jr was voted the best quality printer for its price in Makezine: 3D printer guide. It is only around $300-500. I use the printrbot jr, and its quality is good most of the time. Since it is made like it is, it can't do well with large overhangs. It builds up layer by layer, so you have to orient it to build up without overhangs. To make a solid gear about 5 inches in diameter and with a height of about 3 inches would take around an hour, since it is difficult to fill solid, but there are settings to make it hollow or even honeycomb, which is sturdy and takes less time. The printrbot jr is also compared to a hot glue gun, since its filament is pushed out so close it spreads out, which makes small holes sometimes get filled in and nice smooth sides a little rough, but it is good with a quick nail file to it. Hope this helps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BTW: if you order a printrbot jr, it comes in two ways, build your self and premade. The premade is an extra $100, but &lt;strong&gt;IT'S WORTH IT!!!&lt;/strong&gt; The build yourself one is insanely difficult to put together and some pieces don't fit.&lt;/p&gt;&#xA;" OwnerUserId="9352" LastActivityDate="2015-03-24T23:55:58.213" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6877" PostTypeId="2" ParentId="6869" CreationDate="2015-03-25T01:06:42.447" Score="2" Body="&lt;p&gt;There are two problems at work here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;First,&lt;/strong&gt; you wrote a function to get data from the robot using sockets, but the robot is being connected to via a pySerial serial object. I wrote a function for you to use instead of recv_basic. I'll be sure to add this helper function and others like it to Create2_TetheredDrive.py when I can. Using this function, running your code gives me a result of around 185-190, which is about what I'd expect (given that the robot has to accelerate and decelerate during that one second; it doesn't immediately get up to speed).&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;# get16Signed returns a 16-bit signed value.&#xA;# Whether it blocks is based on how the connection was set up.&#xA;def get16Signed():&#xA;    global connection&#xA;&#xA;    try:&#xA;        return struct.unpack(&quot;&amp;gt;h&quot;, connection.read(2))[0]&#xA;    except serial.SerialException:&#xA;        print &quot;Lost connection&quot;&#xA;        tkMessageBox.showinfo('Uh-oh', &quot;Lost connection to the robot!&quot;)&#xA;        connection = None&#xA;    except struct.error:&#xA;        print &quot;Got unexpected data from serial port.&quot;&#xA;        return None&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Just add this function and replace your calls to &lt;code&gt;recv_basic(connection)&lt;/code&gt; with &lt;code&gt;get16Signed()&lt;/code&gt; (and also get rid of that call to &lt;code&gt;struct.unpack&lt;/code&gt; as &lt;code&gt;get16Signed&lt;/code&gt; will return an integer) and you should be all set!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Second&lt;/strong&gt;, we found a bug with sensor packets which return values in units of millimeters in robot firmware versions prior to 3.3.0. The affected packets are '19' and '40.' Please see the relevant sections of the &lt;a href=&quot;http://www.irobot.com/~/media/MainSite/PDFs/About/STEM/Create/create_2_Open_Interface_Spec.pdf?la=en&quot; rel=&quot;nofollow noreferrer&quot;&gt;Open Interface Spec&lt;/a&gt; for more details.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Happy hacking!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;Please note that while I'm an iRobot employee, the postings on this site are my own and don't necessarily represent iRobot's positions, strategies, or opinions.&lt;/sup&gt;&lt;/p&gt;&#xA;" OwnerUserId="7665" LastEditorUserId="7665" LastEditDate="2018-07-19T12:50:53.603" LastActivityDate="2018-07-19T12:50:53.603" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6878" PostTypeId="2" ParentId="6816" CreationDate="2015-03-25T03:32:58.903" Score="0" Body="&lt;p&gt;I found a partial answers to my question:&#xA;The &quot;current&quot; sensor message indicates if the roomba is operating (&amp;lt; 0) or in the docking station (&gt; 0).&#xA;Open remains error handling and &quot;searching for docking station&quot;.&#xA;I'll adapt my answers if I get further.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT 2015-05-05:&#xA;The solution which seems to work looks in pseudo code as follows:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;if ( charging_state == 5 ) {&#xA;  return ERROR;&#xA;}&#xA;else if ( charging_state == 2 ) {&#xA;  return CHARGING;&#xA;}&#xA;else {&#xA;  if ( charger_available == 2 ) {&#xA;    return INDOCK;&#xA;  }&#xA;  else {&#xA;    if ( main_brush_current != 0 &amp;amp;&amp;amp; current &amp;lt; 0 ) {&#xA;      return WORKING;&#xA;    }&#xA;    else {&#xA;      return ERROR;&#xA;    }&#xA;  }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The &quot;variables&quot; within the if statements are corresponding sensor messages given in the document, linked by @Andrea.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &quot;return values&quot; indicate the corresponding Roomba states.&lt;/p&gt;&#xA;" OwnerUserId="9302" LastEditorUserId="9302" LastEditDate="2015-04-05T18:28:00.137" LastActivityDate="2015-04-05T18:28:00.137" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6879" PostTypeId="2" ParentId="6842" CreationDate="2015-03-25T09:45:39.013" Score="1" Body="&lt;p&gt;The method you mention from &lt;a href=&quot;http://www.elysium-labs.com/robotics-corner/learn-robotics/biped-basics/com-jacobian/&quot; rel=&quot;nofollow noreferrer&quot;&gt;elysium-labs&lt;/a&gt; is perfectly functional. I try to clarify it a little bit and I give you some C++ like code. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let me start by recapping on jacobian matrix itself: Jacobian matrix relates the joint rates to the linear and angular velocity of the end-effector (EE). In other words, jacobian expresses the contribution of each joint velocity to EE velocity. There are basically two ways of calculating jacobian: Analytically and Geometric. Analytical jacobian is partial derivatives while geometric jacobian is based on geometric interpretation of motion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In theory, you can calculate CoM jacobian by doing partial derivative but this a very tedious task and impossible in practice. So geometric jacobian is the way to go. Lets see the formula for geometric jacobian (no CoM yet!):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/hAhbH.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The upper row shows the contribution of each joint to the end-effector velocity and bottom row for the angular velocity. $P_i$ and $z_i$ are position and orientation of the joint, extracted from Denavit Hartenberg parameters. '$\times$' is cross product operator.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Jacobian.block&amp;lt;3,1&amp;gt;(0,0)   = z0.cross(pEE_L-p0);&#xA;Jacobian.block&amp;lt;3,1&amp;gt;(0,1)   = z1.cross(pEE_L-p1);&#xA;&#xA;Jacobian.block&amp;lt;3,1&amp;gt;(3,0)   = z0;&#xA;Jacobian.block&amp;lt;3,1&amp;gt;(3,1)   = z1;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;.block&amp;lt;3,1&amp;gt;(0,1)&lt;/code&gt; means matrix block of size 3x1 starting from element 0,1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When calculating the CoM jacobian, we do not consider the end-effector. In other words, you must calculate the contribution of each joint movement to the velocity of the center of mass. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, you need to calculate the partial CoM, i.e., the CoM of each kinematic chain w.r.t the base. For example, partial CoM if you consider only $l_1$, then only $l_1, l_2$, then $l_1, l_2, l_3$ and so on. The rational is that $\theta_1$ has a bigger contribution to CoM velocity comparing to $\theta_4$. Now that we have all the necessary information, we calculate the geometric CoM jacobian, similarly to the kinematic jacobian:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Jacobian_CoM.block&amp;lt;3,1&amp;gt;(0,0)  = (partial_coms(3,0)/total_mass) * (z0.cross (R0*(partial_coms.block&amp;lt;3,1&amp;gt;(0,0)-PB)-p0));&#xA;Jacobian_CoM.block&amp;lt;3,1&amp;gt;(0,1)  = (partial_coms(3,1)/total_mass) * (z1.cross (R0*(partial_coms.block&amp;lt;3,1&amp;gt;(0,1)-PB)-p1));&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In the above code, &quot;Note that we had to rotate the partial COM to get it into the base links coordinate frame&quot;, hence $R_0$. Furthermore, &quot;the resultant linear velocity should be scaled by the mass of the partial COM because the COM is the average of the multi-mass system and high velocities on smaller masses play a lesser role on the total velocity of the COM.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my code, I was interested in linear velocity only and that's why CoM jacobian is $3\times n$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A good source for understanding the concept of jacobian, its geometric interpretation, and the notation that I've used in this answer, is &lt;a href=&quot;http://www.dis.uniroma1.it/~deluca/rob1_en/11_DifferentialKinematics.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; set of slides.&lt;/p&gt;&#xA;" OwnerUserId="2523" LastActivityDate="2015-03-25T09:45:39.013" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6880" PostTypeId="1" CreationDate="2015-03-25T11:47:21.950" Score="5" ViewCount="3781" Body="&lt;p&gt;Are there some genaral rules for the robustness between monocular and stereo vision when considering object detection? I am especially interested in the automotive field - considering distance/obstacle/car detection (see video links below).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Someone told me monocular vision is more robust than stereo. I guess this may be true if the monocular algorithm is well written (and especially verified over lots of input data)... but once you input (image) data that has not been verified it may probably provide unexpected results, right? With stereo vision one does not really care about the contents of the image as long as texture/lighting conditions allow stereo matching and the object detection is then done within the point cloud.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I consider following usage:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=LRnQUncmZEo&quot; rel=&quot;nofollow&quot;&gt;Monocular&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=UVdhilv2qmg&quot; rel=&quot;nofollow&quot;&gt;Stereo&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The monocular sample video seems to have sometimes problems detecting the cars in front (the bounding boxes disappear once in a while). The stereo sample seems to be more robust - the car in front clearly is detected in all of sequnce image frames.&lt;/p&gt;&#xA;" OwnerUserId="1021" LastEditorUserId="1021" LastEditDate="2015-03-29T15:13:19.110" LastActivityDate="2015-03-29T15:13:19.110" Title="Monocular vs. stereo computer vision robustness for object detection" Tags="&lt;computer-vision&gt;&lt;stereo-vision&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6881" PostTypeId="2" ParentId="6859" CreationDate="2015-03-25T12:52:21.083" Score="2" Body="&lt;p&gt;You can treat your differential equation as a third order ODE, because of the integral in the PID controller. For this I will denote the integral of $\theta$ as $\Theta$, such that the ODE becomes,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;I\ddot{\theta}+d\dot{\theta}+mgL\sin(\theta)+K_p\left(\theta-\theta_d(t)\right)+K_i\left(\Theta-\int_0^t\theta_d(\tau)d\tau\right)+K_d\left(\dot{\theta}-\dot{\theta}_d(t)\right)=0&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One way you can write this into MATLAB code would be:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;clear all&#xA;clc&#xA;&#xA;% Parameters:&#xA;m = 0.5;       % mass (Kg)&#xA;d = 0.0023e-6; % viscous friction coefficient&#xA;L = 1;         % arm length (m)&#xA;I = 1/3*m*L^2; % inertia seen at the rotation axis. (Kg.m^2)&#xA;g = 9.81;      % acceleration due to gravity m/s^2&#xA;&#xA;% PID tuning&#xA;Kp = 5000;&#xA;Ki = 166667;&#xA;Kd = 50;&#xA;&#xA;% Define reference signal&#xA;syms t&#xA;a = 3 * pi / 10;&#xA;temp = a * t;&#xA;% temp = pi/2 + 0*t;&#xA; r = matlabFunction(temp, 'Vars', t);&#xA; R = matlabFunction(int(temp,t), 'Vars', t);&#xA;dr = matlabFunction(diff(temp), 'Vars', t);&#xA;clear temp t&#xA;&#xA;fun = @(t,x) [x(2); x(3); -m*g*L/I*sin(x(2))-d/I*x(3)] - [0; 0; ...&#xA;    Kp / I * (x(2) -  r(t)) + ...&#xA;    Ki / I * (x(1) -  R(t)) + ...&#xA;    Kd / I * (x(3) - dr(t))];&#xA;&#xA;T = linspace(0, 5, 1e3);&#xA;x0 = [0; 0; 0];&#xA;[t, Y] = ode45(@(t,x) fun(t,x), T, x0);&#xA;&#xA;y = zeros(size(t));&#xA;for i = 1 : length(t)&#xA;    y(i) = r(t(i));&#xA;end&#xA;&#xA;figure&#xA;    subplot(2,1,1)&#xA;    plot(t, y, t, Y(:,2))&#xA;    xlabel('Time [s]')&#xA;    ylabel('Position [rad]')&#xA;    subplot(2,1,2)&#xA;    plot(t, y-Y(:,2))&#xA;    xlabel('Time [s]')&#xA;    ylabel('Position error [rad]')&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="1487" LastActivityDate="2015-03-25T12:52:21.083" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6882" PostTypeId="1" AcceptedAnswerId="6889" CreationDate="2015-03-25T14:38:21.050" Score="2" ViewCount="2487" Body="&lt;p&gt;I'm writing some Quad Copter software and beginning to implement an altitude hold mode. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To enable me to do this I need to get an accurate reading for vertical velocity. I plan to use a Kalman filter for this but first I need to ensure that I'm getting the correct velocity from each individual sensor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have done this but I'm not 100% sure its correct so I was hoping to get some confirmation on here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My first sensor is a Lidar distance sensor, I calculated acceleration and velocity using the following code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;float LidarLitePwm::getDisplacement()&#xA;{&#xA;    int currentAltitude = read();&#xA;    float displacement = currentAltitude - _oldAltitude;&#xA;    _oldAltitude = currentAltitude;&#xA;&#xA;    return displacement; //cm&#xA;}&#xA;&#xA;//Time since last update&#xA;float time = (1.0 / ((float)FLIGHT_CONTROLLER_FREQUENCY / 10.00)); // 50Hz, 0.02s&#xA;&#xA;float lidarDisplacement = _lidar-&amp;gt;getDisplacement();&#xA;_currentLidarVelocity = lidarDisplacement / time;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The second sensor is an accelerometer. I calculated acceleration and velocity using the following code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Imu::Acceleration Imu::getAcceleration()&#xA;{&#xA;    //Get quaternion&#xA;    float q[4];&#xA;    _freeImu.getQ(q);&#xA;&#xA;    //Get raw data&#xA;    float values[9];&#xA;    _freeImu.getValues(values);&#xA;&#xA;    //Extract accelerometer data&#xA;    float acc[3];&#xA;    acc[0]= values[0]; //x&#xA;    acc[1]= values[1]; //y&#xA;    acc[2]= values[2]; //z&#xA;&#xA;    //Gravity compensate&#xA;    _freeImu.gravityCompensateAcc(acc, q);&#xA;&#xA;    //Convert acceleration from G to cm/s/s&#xA;    _acceleration.x = acc[0] * 9.8 * 100;&#xA;    _acceleration.y = acc[1] * 9.8 * 100;&#xA;    _acceleration.z = acc[1] * 9.8 * 100;&#xA;&#xA;    return _acceleration; //cm/s/s&#xA;}&#xA;&#xA;//Time since last update&#xA;float time = (1.0 / ((float)FLIGHT_CONTROLLER_FREQUENCY / 10.00)); // 50Hz, 0.02s&#xA;&#xA;//Get accel&#xA;Imu::Acceleration imuAcceleration = _imu-&amp;gt;getAcceleration();&#xA;&#xA;//Get velocity&#xA;currentZVelocity += imuAcceleration.z * time; //cm/s&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It would be great if someone could confirm if this is correct (or not)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&#xA;Joe&lt;/p&gt;&#xA;" OwnerUserId="4212" LastEditorUserId="4212" LastEditDate="2015-03-26T08:25:16.937" LastActivityDate="2015-03-26T08:25:16.937" Title="Calculating acceleration and velocity" Tags="&lt;sensors&gt;&lt;accelerometer&gt;&lt;lidar&gt;" AnswerCount="1" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="6884" PostTypeId="2" ParentId="6863" CreationDate="2015-03-25T15:14:58.557" Score="1" Body="&lt;p&gt;Unfortunately I don't have enough rep to comment or I would do that instead of a full blown answer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think Rf modules would be the way to go in this situation, I have played around with &lt;a href=&quot;http://halx.co.uk/rf-transmitter-receiver-pair-434mhz-en.html&quot; rel=&quot;nofollow&quot;&gt;&lt;strong&gt;this&lt;/strong&gt;&lt;/a&gt; trans/recv pair before and had pretty good results, however I don't think the range would quite be enough for your setup.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With regards to you mentioning 16 robots communicating at the same time, I would suggest using some kind of &quot;call sign&quot; system, where each message you transmit could be pre-fixed with a letter, or a number to ensure the correct messages are sent to the correct robots and vice versa. If the message does not contain the robots unique call sign, discard message, if it does, process.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could alternatively have each robot transmitting on a different frequency, however I don't know how well this would work, and you would have to get a variable frequency RF module.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sounds interesting though!&#xA;Good luck&lt;/p&gt;&#xA;" OwnerUserId="9298" LastActivityDate="2015-03-25T15:14:58.557" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6885" PostTypeId="2" ParentId="6880" CreationDate="2015-03-25T16:03:59.227" Score="2" Body="&lt;p&gt;Two videos that you provided are not doing the same task. The stereo system is just measuring distance of different points in space (which happens to include a car in that video). It will show any object in front of it but won't classify the object. So, cars or people or trash cans mean the same thing to that algorithm and it will just return the distances.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand the monocular system is doing object classification into two categories of &quot;Car&quot; and &quot;Not Car&quot;. Another part of this algorithm is detecting characteristic lines of a driving lane (two blue lines and the yellow line). The distance of each car is calculated based on relative position of of the car to these detected lines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In conclusion, if you want to do object (cars) detection, you need to use a method similar to what was illustrated in monocular system video. If you only want distance, stereo vision is one of many available methods.&lt;/p&gt;&#xA;" OwnerUserId="9232" LastActivityDate="2015-03-25T16:03:59.227" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="6886" PostTypeId="2" ParentId="6824" CreationDate="2015-03-25T19:09:46.677" Score="1" Body="&lt;p&gt;It may prove useful to generate the closed loop transfer function with the $K$, $C_{1}$, $C_{2}$ and $Gm$ terms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\frac{C(s)}{R(s)} = \frac{G(s)}{1+G(s)H(s)}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It may look something like;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\frac{Gm(C_{1}+K)}{1+Gm(C_{1}+C_{2})}$$ initially&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may also want to convert the Gm transfer function into two 2nd order equations of the form;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\frac{(As - B)}{(s^2 + 2\zeta_1\omega_{n1} s + \omega_{n1} ^2) (s^2 + 2\zeta_2 \omega_{n2} s + \omega_{n2} ^2)}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;by finding the roots of the $Gm$ denominator.&#xA;You could think about creating the partial fractions of this.&#xA;You will then know the natural frequencies $(\omega_{n1} , \omega_{n2} )$ and damping factors $(\zeta_1, \zeta_2)$ of the plant $Gm$. This will give you an idea if the plant is stable and the iteration rate needed for your PI(V) control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The closed loop transfer function above will give you an idea that with $(C_{1}+K)$ and $(C_{1}+C_{2})$ you may like to think about setting $K_p$ negative and greater than the feed forward term $K$, until you get an under damped response. Then adjust the $K_i$ and $K_v$ terms until the required rise time and overshoot are achieved.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$K_p=-190$, $K_i=-19$, and $K_v=-3.5$ will give a fast response but play around for the one you want.&lt;/p&gt;&#xA;" OwnerUserId="7680" LastEditorUserId="7680" LastEditDate="2015-03-30T22:23:35.320" LastActivityDate="2015-03-30T22:23:35.320" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6888" PostTypeId="2" ParentId="6863" CreationDate="2015-03-25T21:24:58.143" Score="2" Body="&lt;p&gt;There is a product from Pololu called &lt;a href=&quot;https://www.pololu.com/product/1336&quot; rel=&quot;nofollow&quot;&gt;the Wixel&lt;/a&gt;. In a classroom environment, when one of them transmits a signal all of the others will receive the message. The radio interconnections between the wixels are essentially just like serial communications.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It wouldn't be too much work to bash together a protocol that can either 'broadcast' to all devices in the room, or 'target' a specific device by including its id in the message. You'd have to program the Wixel's so that when it receives a non-broadcast message that isn't coded to its own ID, it simply ignores the message. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;They are around $20 each or less if bought in bulk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact with a setup like this, the wixels could actually pair up if you want one controller per bot. Even with short bursts of comms there is a possibility of &lt;em&gt;data collision&lt;/em&gt; when two signals go out simultaneously.  In those situations you could look into how such issues are handled in other technologies, &lt;a href=&quot;http://howdoesinternetwork.com/2011/collisions&quot; rel=&quot;nofollow&quot;&gt;such as ethernet&lt;/a&gt;, for example.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you go this route, you might also want to investigate the I2C protocol which also allows numerous devices to communicate all on a common bus. The main difference there though would be that they have a CLK sync line which they can all monitor in order to decide if its their turn to talk or not. There will be no sync line to use over the air. That's where data collisions come in to play. The I2C protocol is really simple and can be learned pretty quickly. I think the same concepts could be applied.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can also tell the Wixel to talk on a different channel. Up to 128 apparently, so you could have a fairly decent number of paired devices.&lt;/p&gt;&#xA;" OwnerUserId="1075" LastEditorUserId="1075" LastEditDate="2015-03-26T01:37:22.407" LastActivityDate="2015-03-26T01:37:22.407" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6889" PostTypeId="2" ParentId="6882" CreationDate="2015-03-26T07:05:57.583" Score="2" Body="&lt;p&gt;I noticed a weird thing in your code -- It looks like you are calculating a first derivative of something labeled altitude in &lt;code&gt;LidarLitePwm::getAcceleration()&lt;/code&gt; (which would be velocity, and not acceleration) and later integrating it to get something labeled velocity and (which would in fact be altitude).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So either your variable and method names are wrong, or you are missing one more derivative in &lt;code&gt;LidarLitePwm::getAcceleration()&lt;/code&gt;. Also it is a litle weird that you are using the &lt;code&gt;time&lt;/code&gt; when integrating acceleration and not when differentiating it. It should be the same in both directions. If you include the time in seconds, your units will be cm/s/s as stated in the comments, if you don't they will be cm/tick/tick.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since it seems that you want to reach velocity as the final product anyway, I would skip calculating the accelerations, rename &lt;code&gt;LidarLitePwm::getAcceleration()&lt;/code&gt; to &lt;code&gt;LidarLitePwm::getVelocity()&lt;/code&gt; and change it to something like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;float LidarLitePwm::getVelocity(float time)&#xA;{&#xA;    int currentAltitude = read();&#xA;    float velocity = (currentAltitude - _oldAltitude) / time;&#xA;    _oldAltitude = currentAltitude;&#xA;&#xA;    return velocity; //cm/s/s&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;... all this assuming that the &lt;code&gt;read()&lt;/code&gt; function returns distance from ground in cm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The accelerometer stuff seems ok.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Btw if you are holding altitude with PID don't you need the altitude rather than velocity?&lt;/p&gt;&#xA;" OwnerUserId="482" LastActivityDate="2015-03-26T07:05:57.583" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6890" PostTypeId="1" AcceptedAnswerId="6902" CreationDate="2015-03-26T15:18:22.297" Score="2" ViewCount="517" Body="&lt;p&gt;I'm trying to select a brushed DC motor for a project. I tried following the advice on &lt;a href=&quot;http://www.scribd.com/doc/38698/Sizing-Electric-Motors-for-Mobile-Robotics&quot; rel=&quot;nofollow noreferrer&quot;&gt;sizing electric motors&lt;/a&gt;, mentioned in &lt;a href=&quot;https://robotics.stackexchange.com/questions/913/are-power-and-torque-required-related-in-some-way&quot;&gt;this question&lt;/a&gt;, but a few details were missing, and I'm unsure if I properly followed the procedure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For my application, I need:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Nm = number of motors = 2&lt;/li&gt;&#xA;&lt;li&gt;Wd = wheel diameter = 12 cm&lt;/li&gt;&#xA;&lt;li&gt;Wp = estimated weight of platform = 5 kg&lt;/li&gt;&#xA;&lt;li&gt;Minc = maximum incline under load = 5 degrees&lt;/li&gt;&#xA;&lt;li&gt;Vmax = maximum velocity under load = 5 km/hr&lt;/li&gt;&#xA;&lt;li&gt;Fpush = maximum pushing force = 1.25 kg&lt;/li&gt;&#xA;&lt;li&gt;Ur = coefficient of rolling friction = 0.015&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;These are my calculations:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Step 1: Determine total applied force at worst case.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Ftotal = Wp * (Ur*cos(Minc) + sin(Minc)) + Fpush = 1.7604933161 kilogram&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Step 2: Calculate power requirement.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Vradps = maximum velocity under load in radians/second = 23.1481481481 radian / second&#xA;&#xA;Pmotor = required power per motor = (Ftotal * Vradps * Wd/2)/Nm = 1.22256480284 kilogram * meter * radian / second&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Step 3: Calculate torque and speed requirement.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Tmotor = required torque per motor = Pmotor/Vradps = 5281.47994829 centimeter * gram = 73.345953832 inch * ounce&#xA;RPMmin = required revolutions per minute per motor = Vradps / 0.104719755 = 221.048532325 rev / minute&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Are my calculations correct? Intuitively, the final &lt;code&gt;Tmotor&lt;/code&gt; and &lt;code&gt;RPMmin&lt;/code&gt; values seem right, but my calculation for &lt;code&gt;Pmotor&lt;/code&gt; doesn't exactly match the one used in the link, which doesn't explicitly do the conversion to radians / second and therefore doesn't result in the proper units.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's my Python script for reproducing the above calculations:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;from math import *&#xA;#http://pint.readthedocs.org/en/0.6/tutorial.html&#xA;from pint import UnitRegistry&#xA;&#xA;ureg = UnitRegistry()&#xA;&#xA;def velocity_to_rpm(v, r):&#xA;    kph = v.to(kilometer/hour)&#xA;    r = r.to(kilometer)&#xA;    d = r*2&#xA;    rpm = (kph / (2*pi*r)) * ((1*hour)/(60.*minute)) * rev&#xA;    return rpm&#xA;&#xA;def velocity_to_radps(v, r):&#xA;    return velocity_to_rpm(v, r).to(radian/second)&#xA;&#xA;# Units&#xA;km = kilometer = ureg.kilometer&#xA;meter = ureg.meter&#xA;newton = ureg.newton&#xA;cm = centimeter = ureg.centimeter&#xA;hr = hour = ureg.hour&#xA;mm = millimeter = ureg.millimeter&#xA;rev = revolution = ureg.revolution&#xA;minute = ureg.minute&#xA;sec = second = ureg.second&#xA;kg = kilogram = ureg.kilogram&#xA;gm = gram = ureg.gram&#xA;deg = degree = ureg.degree&#xA;rad = radian = ureg.radian&#xA;oz = ureg.oz&#xA;inch = ureg.inch&#xA;&#xA;# Conversions.&#xA;km_per_mm = (1*km)/(1000000.*mm)&#xA;hour_per_minute = (1*hour)/(60.*minute)&#xA;minute_per_second = (1*minute)/(60*sec)&#xA;minute_per_hour = 1/hour_per_minute&#xA;gm_per_kg = (1000*gm)/(1*kg)&#xA;cm_per_km = (100000*cm)/(1*km)&#xA;&#xA;# Constraints&#xA;target_km_per_hour = (5*km)/(1*hour) # average walking speed&#xA;estimated_platform_weight = 5*kg&#xA;maximum_incline_degrees = 5*deg&#xA;maximum_incline_radians = maximum_incline_degrees * ((pi*rad)/(180*deg))&#xA;maximum_pushing_force = estimated_platform_weight/4.&#xA;maximum_velocity_at_worst_case = (5*km)/(1*hour)&#xA;rolling_friction = 0.015 # rubber on pavement&#xA;velocity_under_max_load = target_km_per_hour&#xA;number_of_powered_motors = 2&#xA;&#xA;# Variables&#xA;wheel_diameter_mm = 120*mm&#xA;wheel_radius_mm = wheel_diameter_mm/2&#xA;wheel_radius_km = wheel_radius_mm * km_per_mm&#xA;rev_per_minute_at_6v_unloaded = 33*rev/(1*minute)&#xA;rev_per_minute_at_6v_loaded = rev_per_minute_at_6v_unloaded/2.&#xA;mm_per_rev = (wheel_diameter_mm * pi)/(1*rev)&#xA;target_rpm = velocity_to_rpm(target_km_per_hour, wheel_radius_mm)&#xA;target_radps = velocity_to_radps(target_km_per_hour, wheel_radius_mm)&#xA;&#xA;# Calculate total applied force at worst case.&#xA;total_applied_force_worst_case = estimated_platform_weight * (rolling_friction*cos(maximum_incline_radians) + sin(maximum_incline_radians)) + maximum_pushing_force&#xA;print 'Ftotal:',total_applied_force_worst_case&#xA;&#xA;# Calculate power requirement.&#xA;vel_in_radps = velocity_to_radps(velocity_under_max_load, wheel_radius_mm)&#xA;print 'Vradps:',vel_in_radps&#xA;required_power = total_applied_force_worst_case * velocity_to_radps(velocity_under_max_load, wheel_radius_mm) * wheel_radius_mm.to(meter)&#xA;required_power_per_motor = required_power/number_of_powered_motors&#xA;print 'Pmotor:',required_power_per_motor&#xA;&#xA;# Calculate torque and speed requirement.&#xA;required_angular_velocity = velocity_under_max_load/wheel_radius_km * hour_per_minute * minute_per_second * rad #rad/sec&#xA;required_rpm = required_angular_velocity / 0.104719755 * (rev/rad) * (sec/minute)&#xA;required_torque_per_motor = (required_power_per_motor/required_angular_velocity).to(gm*cm)&#xA;print 'Tmotor: %s, %s' % (required_torque_per_motor, required_torque_per_motor.to(oz*inch))&#xA;print 'PRMmin:',required_rpm&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="740" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2015-03-27T19:51:16.337" Title="Verifying motor selection calculations" Tags="&lt;mobile-robot&gt;&lt;motor&gt;&lt;design&gt;&lt;torque&gt;&lt;force&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6892" PostTypeId="2" ParentId="6870" CreationDate="2015-03-26T17:40:41.070" Score="2" Body="&lt;p&gt;The API hasn't changed &lt;em&gt;that&lt;/em&gt; much.  An overview of the changes can be found on the last page of the &lt;a href=&quot;http://www.irobot.com/~/media/MainSite/PDFs/About/STEM/Create/create_2_Open_Interface_Spec.pdf&quot; rel=&quot;nofollow&quot;&gt;OI Spec&lt;/a&gt;.  I am confused as to what might be causing the toolbox to break.  Can you elaborate?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using a RasPI to pipe serial data over TCP/IP to a desktop sounds like an expensive and error-prone way to &quot;cut the cord&quot;.  Using a serial to bluetooth or XBee module will be much easier.  &lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-03-26T17:40:41.070" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6893" PostTypeId="2" ParentId="2110" CreationDate="2015-03-26T19:51:55.550" Score="-1" Body="&lt;p&gt;I have the answer because I´ve the same problem, you can use a PWM but need use a RC low pass filter in the output &lt;a href=&quot;http://www.avdweb.nl/arduino/hardware-interfacing/super-simple-dac.html&quot; rel=&quot;nofollow&quot;&gt;http://www.avdweb.nl/arduino/hardware-interfacing/super-simple-dac.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9365" LastActivityDate="2015-03-26T19:51:55.550" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6894" PostTypeId="2" ParentId="5310" CreationDate="2015-03-26T20:59:31.233" Score="1" Body="&lt;p&gt;you dont need to do the soldering for the cypress processor, there are always sdk boards like &lt;a href=&quot;http://www.cypress.com/?rID=58321&quot; rel=&quot;nofollow&quot;&gt;http://www.cypress.com/?rID=58321&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;or really just get something like &lt;a href=&quot;http://www.e-consystems.com/UltraHD-USB-Camera.asp&quot; rel=&quot;nofollow&quot;&gt;http://www.e-consystems.com/UltraHD-USB-Camera.asp&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;browse e-consystems site and you will find something usefull &lt;/p&gt;&#xA;" OwnerUserId="9366" LastActivityDate="2015-03-26T20:59:31.233" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6895" PostTypeId="1" CreationDate="2015-03-26T23:47:03.370" Score="2" ViewCount="2017" Body="&lt;p&gt;currently im working on a RGB-D SLAM with a Kinect v1 Camera. In the front-end the SLAM estimates the pose with Ransac as an initial guess for the ICP. With the pose estimation i transform the pointcloud to a pointcloud-scene which represents my map.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To smooth the map im trying to implement a graph optimizing algorithm (g2o). &#xA;Until now, there is no graph representation in my frontend, so i started to integrate that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Im trying to build a .g2o file with the following fromat:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;VERTEX_SE3 i x y z qx qy qz qw&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where x, y, z is the translation and qx, qy, qz, qw ist the Rotation in respect to the initial coordinate system. And,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDGE_SE3 observed_vertex_id observing_vertex_id x y z qx, qy, qz, qw inf_11 inf_12 .. inf_16 inf_22 .. inf_66&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Translation and rotation for the edge is the pose estimate that i compute with Ransac and ICP (visual odometry). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now im getting stuck with the information matrix.&#xA;I read the chapter 3.4 &lt;em&gt;THE INFORMATION FILTER&lt;/em&gt; in Thrun's &lt;em&gt;Probabolistic Robotics&lt;/em&gt; and several threads in this forum, such as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/764/the-relationship-between-point-cloud-maps-and-graph-maps&quot;&gt;The relationship between point cloud maps and graph maps&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/1180/information-filter-instead-of-kalman-filter-approach&quot;&gt;information filter instead of kalman filter approach&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the second link, i got this here. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The covariance update&#xA;  $$P_{+} = (I-KH)P$$&#xA;  can be expanded by the definition of K to be&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;$$ P_{+} = P - KHP$$&#xA;  $$ P_{+} = P - PH^T (HPH^T+R)^{-1} HP$$&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Now apply the matrix inversion lemma, and we have:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;$$P_{+} = P - PH^T (HPH^T+R)^{-1} HP$$&#xA;  $$ P_{+} = (P^{-1} + H^TR^{-1}H)^{-1}$$&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Which implies:&#xA;  $$ P_{+}^{-1} = P^{-1} + H^TR^{-1}H$$&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The term $P^{-1}$ is called the prior information,$$H^TR^{-1}H$$ &#xA;  is the sensor information (inverse of sensor variance), and this gives us  $P^{-1}_+$, which is the posterior information. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Could you please point this out for me. &#xA;What data do i need to compute the information matrix? &lt;/p&gt;&#xA;" OwnerUserId="9367" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2019-01-15T15:13:17.967" Title="RGB-D SLAM - Compute Information Matrix" Tags="&lt;slam&gt;&lt;kinect&gt;&lt;matlab&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6896" PostTypeId="1" CreationDate="2015-03-27T08:58:20.987" Score="1" ViewCount="2116" Body="&lt;p&gt;I'm confused about how to compute the error in orientation. All the documents I've read don't explain how to do it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The error in position is simply the difference between the points. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's assume we have the orientation along the effector axis, and we represent the rotation with quaternions. I have two questions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Is describing the orientation with quaternions a good approach?&lt;/li&gt;&#xA;&lt;li&gt;How can we compute the error in orientation with the quaternions to use this in jacobian transpose?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="9370" LastEditorUserId="19515" LastEditDate="2020-07-23T17:42:33.333" LastActivityDate="2020-07-23T17:42:33.333" Title="Jacobian transpose: How to calculate orientation error?" Tags="&lt;inverse-kinematics&gt;&lt;jacobian&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="6897" PostTypeId="2" ParentId="6895" CreationDate="2015-03-27T09:16:57.330" Score="1" Body="&lt;p&gt;From the wiki of the &lt;a href=&quot;https://github.com/RainerKuemmerle/g2o/wiki/File-Format&quot; rel=&quot;nofollow&quot;&gt;g2o file format&lt;/a&gt;:    &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The information matrix or precision matrix which represent the&#xA;  uncertainty of   the measurement error is the inverse of the&#xA;  covariance matrix. Hence, it is symmetric and positive semi-definite.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Unfortunately there is no mentioning of the representation for the covariance matrix for that file format, that I could find. My guess is that it is a compact representation, so either a $6\times6$ matrix using $[x, y, z, \psi, \phi, \theta]$ (euler angles) or $[x, y, z, r_1, r_2, r_3]$ (scaled axis of rotation). &lt;/p&gt;&#xA;" OwnerUserId="127" LastActivityDate="2015-03-27T09:16:57.330" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6898" PostTypeId="2" ParentId="6896" CreationDate="2015-03-27T12:38:07.497" Score="2" Body="&lt;p&gt;The math involved in determining orientation error is described in this thread: &lt;a href=&quot;https://robotics.stackexchange.com/questions/6617/jacobian-based-trajectory-following&quot;&gt;Jacobian-based trajectory following&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="110" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2015-03-27T12:38:07.497" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6899" PostTypeId="2" ParentId="6720" CreationDate="2015-03-27T14:17:53.913" Score="2" Body="&lt;p&gt;So, I figured out that the problem was vibration. I first tried using a running average to smooth the data that I was getting from my MPU, but the delay that it created made it oscillate a lot, so I tried a low pass filter instead, which worked GREAT! Thank you to everyone for your help!&lt;/p&gt;&#xA;" OwnerUserId="9220" LastActivityDate="2015-03-27T14:17:53.913" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6900" PostTypeId="1" CreationDate="2015-03-27T15:23:02.017" Score="0" ViewCount="254" Body="&lt;p&gt;I'm currently working on my first robotics project using the &lt;a href=&quot;http://4tronix.co.uk/store/index.php?rt=product/product&amp;amp;product_id=171&quot; rel=&quot;nofollow&quot;&gt;Initio kit from 4tronix&lt;/a&gt; powered by Raspberry Pi. The setup was fairly simple, and I've been testing it out over the last couple of days. All of the sensors work as expected; however, my motor tests are failing. When I input commands to actually move the robot, I can hear the DC motors running but they're not getting enough power to do anything. In the instructions, it says if this issue is encountered, that the power selection jumper might not be set correctly and provides this diagram:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://onedrive.live.com/redir?resid=3C398965F6E3D4A1!69271&amp;amp;authkey=!AAPxSGXtZsVBWxY&amp;amp;v=3&amp;amp;ithint=photo%2cjpg&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;https://xdteya-ch3301.files.1drv.com/y2mGTgMLv3fnWgVl5wjaInciwhc93ByI8lhDwjzUcpCIQkaDKpugWr-uJoKAalXvf06LRv2nNmqJ3tbryGkGJA5p4EvWG96dlBQ4H_C0Inw0FrOrewIvratJ6_zcX4-BIE-HknIwyKUGQ9bkqpPOSQlqA/pirocon.jpg?psid=1&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For comparison, here's how I have the wiring for the motors setup:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://onedrive.live.com/redir?resid=3C398965F6E3D4A1!69260&amp;amp;authkey=!ABFSrJ5e5ru42Dg&amp;amp;v=3&amp;amp;ithint=photo%2cjpg&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;https://xttdya.dm2302.livefilestore.com/y2mqOa7YTsmXAtHAs-JEDc1px07PIEFjrLVM53pFYpDCuWrgDLZDzL7X7Rwd0nwhCGK4xChoR--yTBYSZnwbhb0RDnXPxRpKLC8Il2eHfHS1x1xCAetDTeE3cvStshsMWMc3VEMpTTnSo-N3cr6n7unXg/robo_pic_crop_one.jpg?psid=1&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not entirely sure what it means to have the power selection jumper being set incorrectly and would greatly appreciate it if someone could explain this to me or point out if they see anything wrong with my setup.&lt;/p&gt;&#xA;" OwnerUserId="9371" LastEditorUserId="350" LastEditDate="2015-07-07T18:34:20.030" LastActivityDate="2016-06-29T21:47:12.093" Title="Low power to motors -- motor power jumper issue" Tags="&lt;mobile-robot&gt;&lt;motor&gt;&lt;raspberry-pi&gt;&lt;first-robotics&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6901" PostTypeId="2" ParentId="6895" CreationDate="2015-03-27T18:06:46.287" Score="3" Body="&lt;p&gt;The information matrix is the inverse of the covariance matrix.  In this case, the covariance is over the variables (x,y,z,qx,qy,qz).  It is assumed that your quaternion is normalized to be unit magnitude.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should be able to get an estimate of the information matrix from the ICP.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general the covariance estimate can be found by the following procedure.  &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Set I = 0 (I will be the information matrix for the system)&lt;/li&gt;&#xA;&lt;li&gt;For each input.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Get the covariance (must be estimated somehow empirically).&lt;/li&gt;&#xA;&lt;li&gt;Invert the covariance to get the information W&lt;/li&gt;&#xA;&lt;li&gt;Calculate the Jacobian J of your error in the output space with respect to the input (see &lt;a href=&quot;http://en.wikipedia.org/wiki/Jacobian_matrix_and_determinant&quot; rel=&quot;nofollow&quot;&gt;http://en.wikipedia.org/wiki/Jacobian_matrix_and_determinant&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;li&gt;Transform the information into the error space via X = J^T * W * J&lt;/li&gt;&#xA;&lt;li&gt;Set I = I + X&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Invert I to get the covariance S of the output&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Edit 2:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The covariance formula that you linked to is the covariance of the points in the point cloud.  For the mapping, you want the covariance estimate for the estimated transform which is not at all the same thing.  It is a little difficult to explain.  Try looking at &lt;a href=&quot;http://en.wikipedia.org/wiki/Non-linear_least_squares&quot; rel=&quot;nofollow&quot;&gt;http://en.wikipedia.org/wiki/Non-linear_least_squares&lt;/a&gt; .  In your case the x_i would be points in P_A, y_i would be points in P_B, f would be the function that transforms points from P_A to P_B (i.e. f(x_i, T) = T(x_i) where T(x) is applying T to x), and beta would be the transform parameters.  In the last equation in the theory section, the J^T&lt;em&gt;W&lt;/em&gt;J term is the estimated information for the parameters.  Inverting this provides a covariance estimate (this is based on the Cramer-Rao lower bound, see &lt;a href=&quot;http://en.wikipedia.org/wiki/Cram%C3%A9r%E2%80%93Rao_bound&quot; rel=&quot;nofollow&quot;&gt;http://en.wikipedia.org/wiki/Cram%C3%A9r%E2%80%93Rao_bound&lt;/a&gt;).  For the typical case of independent measurements, the J^T * W * J term ends up just being a sum of J_i^T * W_i * J_i for each measurement i.&lt;/p&gt;&#xA;" OwnerUserId="9373" LastEditorUserId="9373" LastEditDate="2015-04-15T19:25:15.027" LastActivityDate="2015-04-15T19:25:15.027" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="6902" PostTypeId="2" ParentId="6890" CreationDate="2015-03-27T19:51:16.337" Score="3" Body="&lt;p&gt;I think your Pmotor calculation is correct.  The reason for the difference with the CIRC link is in the P=F*v equation they are referring to the linear velocity.  Your conversion is converting the rotational velocity back into linear velocity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't think the Ftotal calculation is correct because your estimated weight isn't correct.  Kg is a unit of mass, not weight.  To convert to weight, you need to multiply by the gravitational pull of the earth (9.8 m/s^2).  This is also why the units on your power estimate isn't in Watts.  Your torque units should then be N*m or equivalently oz(force)*in.  Note that this is ounce force not the sometimes used ounce mass.  It is important to distinguish between mass and force even though the ounce unit is sometimes abused to ambiguously mean either in one Earth gravity environments.&lt;/p&gt;&#xA;" OwnerUserId="9373" LastActivityDate="2015-03-27T19:51:16.337" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6903" PostTypeId="2" ParentId="6674" CreationDate="2015-03-27T20:37:16.380" Score="1" Body="&lt;p&gt;FYI, iRobot has released the spec for the motor interface here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.irobot.com/~/media/MainSite/PDFs/About/STEM/Create/Create_2_Wheel_Hack.pdf&quot; rel=&quot;nofollow&quot;&gt;http://www.irobot.com/~/media/MainSite/PDFs/About/STEM/Create/Create_2_Wheel_Hack.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-03-27T20:37:16.380" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6904" PostTypeId="2" ParentId="6816" CreationDate="2015-03-27T21:07:30.543" Score="2" Body="&lt;p&gt;The manual you linked to is not for the Roomba 780. You'll want to reference the one on this page: &lt;a href=&quot;http://www.irobot.com/create&quot; rel=&quot;nofollow&quot;&gt;http://www.irobot.com/create&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can tell if the robot is on the dock by checking the &quot;Home Base&quot; bit in the charging sources available packet (#34).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is currently no way to know via the OI if Roomba is trying to find the dock.&lt;/p&gt;&#xA;" OwnerUserId="4373" LastEditorUserId="110" LastEditDate="2016-01-06T16:48:08.907" LastActivityDate="2016-01-06T16:48:08.907" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6905" PostTypeId="1" AcceptedAnswerId="6907" CreationDate="2015-03-28T03:25:08.680" Score="0" ViewCount="441" Body="&lt;p&gt;I've recently been learning about SLAM and have been attempting to implement EKF-SLAM in python. I've been using this &lt;a href=&quot;http://ocw.mit.edu/courses/aeronautics-and-astronautics/16-412j-cognitive-robotics-spring-2005/projects/1aslam_blas_repo.pdf&quot; rel=&quot;nofollow&quot;&gt;great article&lt;/a&gt; as a guide. Some progress has been made, but I'm still confused by certain stages.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Firstly, does the &lt;em&gt;inverse sensor model&lt;/em&gt; have to compute range and bearing, as opposed to cartesian coordinates? Why is this approach used?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Secondly, what format should my robot provide its heading in? Currently I just use a running offset from the origin angle (0), without wrapping it between 0 and 360. Turning right yields positive degrees, and left negative. I ask this as I assume the sensor model expects a certain format.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thirdly, when computing the jacobians for adding new landmarks, (page 35) is Jz simply the absolute rotation of the robot (-540 degrees for example) plus the bearing the landmark was detected at?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And finally, what's the best approach for managing the huge covariance matrix? I'm currently thinking of a good way to 'expand' P when adding new landmarks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's my current implementation: &lt;a href=&quot;http://pastebin.com/r7wUMgY7&quot; rel=&quot;nofollow&quot;&gt;http://pastebin.com/r7wUMgY7&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help would be much appreciated! Thanks.&lt;/p&gt;&#xA;" OwnerUserId="9375" LastActivityDate="2015-03-28T14:41:09.530" Title="SLAM noob here, a few questions regarding EKF-SLAM" Tags="&lt;slam&gt;&lt;ekf&gt;&lt;python&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6906" PostTypeId="1" CreationDate="2015-03-28T11:10:02.893" Score="5" ViewCount="197" Body="&lt;p&gt;i would like to build quad that uses bigger propellers like 15&quot; . My question is what kind of motor shall i use ? Low or high KV? Do all motors support this kind of propellers ? Will they burn because of it ?I found they say CW and CCW motors does that mean you can't set way they spin ? I'm totally new in this so thank you for answer .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.ebay.com/itm/GARTT-ML3508-415KV-Brushless-Motor-For-Multirotor-Quadcopter-Hexa/261535221935?_trksid=p2047675.c100005.m1851&amp;amp;_trkparms=aid%3D222007%26algo%3DSIC.MBE%26ao%3D1%26asc%3D29266%26meid%3Da4bdb746beac401b8a4ca982730d114e%26pid%3D100005%26rk%3D2%26rkt%3D6%26sd%3D261640837515&amp;amp;rt=nc&quot; rel=&quot;nofollow&quot;&gt;okey so given this one it should be able to hold 15&quot; prob since it's in description&lt;/a&gt;&#xA;shall i get 12A ESC since on 15 size prob they used max 8.8 or shall i get 25A ESC cause max continous is 20 ?&lt;/p&gt;&#xA;" OwnerUserId="9377" LastEditorUserId="9377" LastEditDate="2015-03-30T22:28:55.417" LastActivityDate="2015-03-30T22:28:55.417" Title="Quadcopter Propeller size + Motor" Tags="&lt;quadcopter&gt;&lt;brushless-motor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6907" PostTypeId="2" ParentId="6905" CreationDate="2015-03-28T14:41:09.530" Score="1" Body="&lt;p&gt;I've addressed your first two questions below.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Firstly, does the inverse sensor model have to compute range and bearing, as opposed to cartesian coordinates? Why is this approach used?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Given your current state (which includes the pose of the robot and the position of the landmarks), the inverse sensor model predicts what the observation &lt;em&gt;should&lt;/em&gt; be. In other words, if you have a laser scanner that reports the range and bearing of the landmark from your current pose, you want to compare that observation with what the inverse sensor model predicts. The reason why it is not converted to Cartesian coordinates is because the noise of the laser scanner observation is in range and bearing. Usually you want your observation model to generate a prediction whose form is as close to what your physical sensor provides as possible.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Secondly, what format should my robot provide its heading in? Currently I just use a running offset from the origin angle (0), without wrapping it between 0 and 360. Turning right yields positive degrees, and left negative. I ask this as I assume the sensor model expects a certain format.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If the only place the heading is used is in cosines and sines, then it shouldn't matter. However, you need to be careful whenever you take the difference between two angles. For example 179 degrees minus -179 degrees gives 358 degrees. In reality, the difference is -2 degrees, (which is equivalent to 358 degrees if you know it must be wrapped), but an algorithm minimizing the error might think 358 degrees is a large error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, the traditional 2D coordinate system has the angle being report with respect to the x-axis, with x forward, y left and z up. As a result, turning right should &lt;em&gt;decrease&lt;/em&gt; the heading angle.&lt;/p&gt;&#xA;" OwnerUserId="4320" LastActivityDate="2015-03-28T14:41:09.530" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6908" PostTypeId="1" AcceptedAnswerId="6911" CreationDate="2015-03-28T18:17:45.683" Score="1" ViewCount="659" Body="&lt;p&gt;I've recently been learning about SLAM and EKF-SLAM. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've began my implementation in python, but have had trouble managing the updating of P, especially when it comes to adding new landmarks. Currently there is no 'P' but just a few separate matrices that I have to stitch together when needed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My implementation can be seen here: &lt;a href=&quot;http://pastebin.com/r7wUMgY7&quot; rel=&quot;nofollow&quot;&gt;http://pastebin.com/r7wUMgY7&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How best should I manage the large covariance matrix, should I be using one matrix, like the algorithm suggests? Thanks in advance.&lt;/p&gt;&#xA;" OwnerUserId="9375" LastActivityDate="2015-03-29T21:33:56.847" Title="EKF-SLAM, how best to manage the 'P' covariance matrix, programatically" Tags="&lt;slam&gt;&lt;ekf&gt;&lt;python&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6909" PostTypeId="1" AcceptedAnswerId="6912" CreationDate="2015-03-28T18:25:41.363" Score="1" ViewCount="970" Body="&lt;p&gt;I've been working through &lt;a href=&quot;http://ocw.mit.edu/courses/aeronautics-and-astronautics/16-412j-cognitive-robotics-spring-2005/projects/1aslam_blas_repo.pdf&quot; rel=&quot;nofollow&quot;&gt;this informative guide&lt;/a&gt; on EKF-SLAM but I'm having difficulty understanding the jacobians required for the 'landmark update', on page 35.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What exactly is Jxr and Jz taking as input? Is it taking the the current rotation of the robot, plus the addition of the odometry update? IE, the rotation that is now stored in the 'X' state vector. Or are they taking the angle from the Inverse Sensor Model, and if so, what's the 'delta' angle from?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="9375" LastActivityDate="2015-03-29T21:46:13.227" Title="EKF-SLAM Computing the jacobians for landmark updates" Tags="&lt;slam&gt;&lt;ekf&gt;&lt;python&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6910" PostTypeId="1" CreationDate="2015-03-29T11:49:41.033" Score="0" ViewCount="498" Body="&lt;pre&gt;&lt;code&gt;Joint   θi    di    ai-1    αi-1&#xA;1     θ1-90  -d1     0      180&#xA;2      θ2     0      0      -90&#xA;3      θ3     0     a2       0&#xA;4     θ4-90   0     a3       0&#xA;5      θ5     0     0        90&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I am confused about the right way to look for my theta1-theta5.&#xA;Probably from the offset limit of the angles or calculation from x0 to x5 angle rotation or from atan2(x,y).&lt;/p&gt;&#xA;" OwnerUserId="9380" LastEditorUserId="110" LastEditDate="2015-03-29T17:22:42.620" LastActivityDate="2015-05-03T16:56:16.877" Title="How to find theta1 to theta5 after D-H parameter" Tags="&lt;robotic-arm&gt;&lt;dh-parameters&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6911" PostTypeId="2" ParentId="6908" CreationDate="2015-03-29T21:33:56.847" Score="1" Body="&lt;p&gt;You must use one matrix, because you must manage the cross covariances. The best way to add a landmark is to expand the matrix, by copying it into a larger one (with two extra rows for x,y and two extra columns for the same). Then, you have to initialize all the off-diagonal terms using the jacobian matrix.  Similarly, the state vector must be expanded to include the new landmark as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://robotics.stackexchange.com/a/5173/163&quot;&gt;This answer&lt;/a&gt; shows how to initialize a new landmark in this way.  Note the matrix shown there is &lt;em&gt;block&lt;/em&gt; represented. It could in fact be very large.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now how you represent that matrix is up to you. However, keeping many small matrices that you stitch together is no more efficient (cpu or memory) than keeping one large one.&lt;/p&gt;&#xA;" OwnerUserId="163" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2015-03-29T21:33:56.847" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6912" PostTypeId="2" ParentId="6909" CreationDate="2015-03-29T21:46:13.227" Score="2" Body="&lt;h3&gt;The answer&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Specifically, the arguments to this jacobian are the state of the robot.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;The reason&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;It is the jacobian of the measurement function with respect to the landmark state. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you knew the state of the robot and landmark, what function would you use to predict what the measurement would be? If you have a range sensor, it would be the distance between the landmark and robot positions. Take the &lt;a href=&quot;https://en.wikipedia.org/wiki/Jacobian_matrix_and_determinant&quot; rel=&quot;nofollow&quot;&gt;jacobian&lt;/a&gt; of this function, with respect to each of the state variables (robot x, robot y, robot theta, landmark x, landmark y)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In their first example, we're measuring the difference in x and y.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the predicted position of the landmark equals the position of the robot plus the $x$ and $y$ difference (rotated a little by the robot rotations).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the jacobian is $$\begin{bmatrix}&#xA;\frac{d h_1}{dx_r}, \frac{d h1}{dy_r}, \frac{d h1}{d\theta_r}\\&#xA;\frac{d h_2}{dx_r}, \frac{d h2}{dy_r}, \frac{d h2}{d\theta_r}\\&#xA;\end{bmatrix}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here, $h1$ is the function which gives the $x$ coordinate of the landmark, and $h2$ is the function which gives the $y$ coordinate of the landmark. &lt;/p&gt;&#xA;" OwnerUserId="163" LastActivityDate="2015-03-29T21:46:13.227" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="6913" PostTypeId="1" CreationDate="2015-03-29T22:57:53.450" Score="0" ViewCount="372" Body="&lt;p&gt;What is the reduced form of this block diagram? I can't see any solution way :(&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/2qRDH.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="9385" LastEditorUserId="9570" LastEditDate="2015-06-06T04:03:39.037" LastActivityDate="2015-06-06T04:03:39.037" Title="What is the reduced form of this block diagram?" Tags="&lt;control&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6914" PostTypeId="2" ParentId="4677" CreationDate="2015-03-30T04:58:56.663" Score="2" Body="&lt;p&gt;yaw can be measured by rate gyro and magnetometer not with accelerometer because accelerometer values depends on gravity component but on rotation in z axis only there is no change in gravity componets&lt;/p&gt;&#xA;" OwnerUserId="9388" LastActivityDate="2015-03-30T04:58:56.663" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6916" PostTypeId="2" ParentId="6910" CreationDate="2015-03-30T09:11:04.393" Score="1" Body="&lt;p&gt;I am not sure if this answers properly your question, but in this case theta1-theta5 are supposedly your joint variables, i.e. they are the value read from the encoders of your robotic arm. The -90 placed on joint 1 and joint 4 are instead the offset between the encoder readout and the actual joint configuration.&lt;/p&gt;&#xA;" OwnerUserId="1033" LastActivityDate="2015-03-30T09:11:04.393" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6917" PostTypeId="2" ParentId="6906" CreationDate="2015-03-30T11:52:11.637" Score="2" Body="&lt;p&gt;The Information you provide are a bit short.&#xA;This depends a lot on the power of the motors. See my answer on this question: &lt;a href=&quot;https://robotics.stackexchange.com/questions/4463/choosing-motor-for-a-tricopter&quot;&gt;Choosing motor for a tricopter&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you choose some a motor big enought for your application then it won't burn regardless of the prop size. If it is too small, it will burn regardless of the prop size ;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Usually the motor manufactures provide you with a test sheet, something like this: &lt;a href=&quot;http://www.funtobuyonline.com/media/wysiwyg/920_datas.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.funtobuyonline.com/media/wysiwyg/920_datas.jpg&lt;/a&gt; &lt;br&gt;&#xA;Which is one for your motor. This might be japanese (not sure) but the columns are in this case from left to right: &lt;br&gt;&#xA;Voltage,Prop Size, Power, Current, Power, Thrust, RPM, Efficency &#xA;&lt;br&gt;If the Power at 100% exceed the motor specification then the motor will burn... pretty simple&lt;/p&gt;&#xA;" OwnerUserId="6911" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2015-03-30T11:52:11.637" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6918" PostTypeId="1" CreationDate="2015-03-30T12:44:20.310" Score="1" ViewCount="4971" Body="&lt;p&gt;I draw a robotic arm in Solidworks, but I'm not so sure about how to find out the &lt;a href=&quot;http://en.wikipedia.org/wiki/Degrees_of_freedom_%28mechanics%29&quot; rel=&quot;nofollow noreferrer&quot;&gt;DOF&lt;/a&gt;, forward and backward kinematic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://grabcad.com/library/a-robotic-arm-for-maintaince-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FOCb9.png&quot; alt=&quot;A robotic arm for maintaince&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could anyone help me understand how to work out the kinematic solution of this robot arm?&lt;/p&gt;&#xA;" OwnerUserId="9393" LastEditorUserId="37" LastEditDate="2015-03-30T16:52:48.010" LastActivityDate="2015-04-10T12:52:33.407" Title="How do I work out the kinematic solution of a robot arm?" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;automatic&gt;&lt;matlab&gt;" AnswerCount="6" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6921" PostTypeId="2" ParentId="2480" CreationDate="2015-03-30T17:12:00.493" Score="0" Body="&lt;p&gt;Been searching for the nearly exact same thing, probably have to build it myself...bearing-in-track was the only way to allow 3 concentric rings to rotate, spin, and tumble independently of each other.  My design had a &quot;track&quot; for the bearing to travel in also but an additional track on the outside of the inner ring, with a bearing on either side of the spindle. Got me?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Have found nothing of the sort in 12 years of looking.  Any help in this direction will get me exited all over.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;bonkus&lt;/p&gt;&#xA;" OwnerUserId="9398" LastActivityDate="2015-03-30T17:12:00.493" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6922" PostTypeId="1" CreationDate="2015-03-30T17:37:33.600" Score="4" ViewCount="259" Body="&lt;p&gt;I'm working on the control of a quadcopter and I'd like to understand how come controlling the yaw does not increase the overall thrust. My understanding is that the control is carried out through 2 PIDs per axis (roll, pitch and yaw). The output of the last PID is sent as a PWM signal to correct the rotor speeds of the propellers. The mixing looks something like that:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$T_{FrontLeft} = thrust + roll_{pid} + pitch_{pid} + yaw_{pid}$&#xA;$T_{FrontRight} = thrust - roll_{pid} + pitch_{pid} - yaw_{pid}$&#xA;$T_{RearLeft} = thrust + roll_{pid} - pitch_{pid} - yaw_{pid}$&#xA;$T_{RearRight} = thrust - roll_{pid} - pitch_{pid} + yaw_{pid}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All the quadcopter controls seem to work that way from what I could gather. So the basic idea to control yaw is to add $yaw_{pid}$ to the clockwise motors and substract the same amount $yaw_{pid}$ to the counterclockwise motors to make the quadcopter turns clockwise. Which translates into a increase of speed of clockwise motors and a decrease of speed for counterclockwise motors from the same amount.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But we know that each motor produces thrust and torque according to those equations:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$T = C_T\rho n^2 D^4$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$Q = C_Q\rho n^2 D^5$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $T$ is thrust, $Q$ is torque, $C_T$ and $C_Q$ are system dependent constants, $ρ$ is the air density, $n$ is rotor speed, and $D$ is rotor diameter. Which means that the thrust produced by each motor is proportional to the propeller speed squared. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if $n$ is the speed of all propellers before correction, the thrust of the clockwise propellers after correction will be proportional to $(n+\Delta)^2$ and the thrust produced by the counterclockwise propellers to $(n-\Delta)^2$. The total thrust for these 2 propellers will be proportional to:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$(n+\Delta)^2 + (n-\Delta)^2 = 2n^2 + 2\Delta^2$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can see, there is an increase of $2\Delta^2$ in the overall thrust produced by those 2 propellers (and $4\Delta^2$ when we take the 4 propellers into account). Of course, in real life, when we control the yaw the quadcopter does not go up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what am I missing? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;(the same stands for roll and pitch control but since the quadcopter turns around the roll or pitch axis, the total thrust is no longer entirely on the vertical axis and I could imagine that the projection on the vertical axis is not increasing, but that does not work with yaw)&lt;/p&gt;&#xA;" OwnerUserId="9358" LastActivityDate="2015-04-01T20:05:03.857" Title="How is it possible to maintain the total thrust when controlling yaw of a quadcopter?" Tags="&lt;control&gt;&lt;quadcopter&gt;&lt;torque&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6923" PostTypeId="2" ParentId="6922" CreationDate="2015-03-30T19:35:40.320" Score="2" Body="&lt;p&gt;You are correct that theoretically total thrust can not be maintained. However, about hover, it can be assumed that the torque is small and that total thrust can be maintained.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In control, we are usually interested in linear systems. We have more tools and knowledge for dealing with linear systems. In most cases when we are dealing with a nonlinear system we linearize the system around some operating point with the assumption that it will adequately describe the system around that operating point. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this case, people have linearized the nonlinear equations that describe the quadrotor dynamics. These equations drop the $2\Delta^2n$ term. &lt;/p&gt;&#xA;" OwnerUserId="8842" LastEditorUserId="8842" LastEditDate="2015-04-01T20:05:03.857" LastActivityDate="2015-04-01T20:05:03.857" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6925" PostTypeId="2" ParentId="6918" CreationDate="2015-03-31T09:29:40.227" Score="1" Body="&lt;p&gt;This is a huge field you are asking for. I don't know what exactly you are looking for and what is your background. But, initially, I would suggest you first to go through basics. Read some stuff related to Robotics kinematics and representations from DH Parameters, Forward Kinematics and Inverse Kinematics. You define your problem based on that reading and decide what you need to use.&#xA;And by the way, your drawing and labeling does not suffice the proper representation. Please check it first.! &lt;/p&gt;&#xA;" OwnerUserId="9328" LastEditorUserId="9328" LastEditDate="2015-03-31T10:09:11.793" LastActivityDate="2015-03-31T10:09:11.793" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6926" PostTypeId="2" ParentId="6910" CreationDate="2015-03-31T10:20:54.027" Score="1" Body="&lt;p&gt;I don't know about the Robot which you have. But for your α1, try using 0 instead of 180. I think, two parallel Z axis confuses us, but taking 0 for parallel  rotation axes will make difference in values (in case of COS θ).&lt;/p&gt;&#xA;" OwnerUserId="9328" LastActivityDate="2015-03-31T10:20:54.027" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6927" PostTypeId="1" AcceptedAnswerId="6928" CreationDate="2015-03-31T13:40:33.730" Score="4" ViewCount="76" Body="&lt;p&gt;Are events like Robocup advantageous to the development of robotic  advancement? &lt;br&gt;&#xA;Or is it merely entertainment which advances robotics by allowing entry level participation which helps maintain interest? &lt;br&gt;&#xA;Do the DARPA Grand's provide a better vehicle for advancement? (pun intended)   &lt;/p&gt;&#xA;" OwnerUserId="9091" LastActivityDate="2015-03-31T14:14:02.653" Title="How important are events like &quot;Robocup&quot; to the advancement of Robotics in general?" Tags="&lt;design&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6928" PostTypeId="2" ParentId="6927" CreationDate="2015-03-31T14:14:02.653" Score="5" Body="&lt;p&gt;Robotics is a relatively new field of study. Besides technological problems, there are psychological and even moral issues that need to be resolved.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some examples of these non-technological issues include familiarity with and fear of robots, trusting robots and robot rights.  Other issues have to do with popularity. You may be interested in reading &lt;a href=&quot;https://robotics.stackexchange.com/q/790/158&quot;&gt;this similar question asking whether toy robots move technology forwards&lt;/a&gt;. Many of the arguments there hold for any kind of activity including robots. With that in mind, let's focus on the technological aspects only.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With contests for simpler robots, such as Robocup, generally the effect is that the popularity of robotics increases. With more people getting drawn to robotics, the technology is sure to move forwards. In other words, &lt;strong&gt;popularity brings advancements&lt;/strong&gt;, which is true for most if not all scientific fields.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The more complex challenges, like the DARPA challenge surely help advance the technology. However, they are more of a short-term solution than a long-term one. With the DARPA challenge, you attract expert roboticists to create a solution for a complex problem. That's good, but that's just it. With Robocup, you create interest in robotics among many young students. You don't really get anything out of it immediately, but you get a new generation of roboticists that each would go on the rest of their lives inventing new things.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While both kinds of challenges are definitely beneficial, I would say the ones like Robocup have a better shot at advancing robotics towards its goals (pun responded). Imagine if only one type of challenge existed. If there were DARPA challenges only, robotics would advance greatly, but eventually roboticists would die out and there would be no one to pick up where they left. If there were Robocup challenges only, you don't make an instant improvement, but you will have a continuous supply of fresh minds entering the field.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In conclusion, DARPA challenges provide instant solutions, while Robocup contests provide a sustainable source of inventors.&lt;/p&gt;&#xA;" OwnerUserId="158" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2015-03-31T14:14:02.653" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6929" PostTypeId="1" CreationDate="2015-03-31T17:55:58.073" Score="3" ViewCount="349" Body="&lt;p&gt;I'm very new to create 2. I want to send commands using Bluetooth. I have already bought the bluetooth USB radio. What other devices do I need to get or how can I set up sending commands over bluetooth. Any help is appreciated. &#xA;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="9405" LastActivityDate="2015-05-19T17:41:08.533" Title="How to send commands to create 2 over Bluetooth" Tags="&lt;irobot-create&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6931" PostTypeId="1" AcceptedAnswerId="6932" CreationDate="2015-03-31T23:21:23.030" Score="4" ViewCount="2087" Body="&lt;p&gt;If I have a robot path in 2D space, &lt;/p&gt;&#xA;&#xA;&lt;p&gt;i.e. a vector of (x,y) locations, and I need to generate artificial IMU data (simulate them), how would I go about it? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How do I model equations to generate the values given a time frame and positions?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've come across &lt;em&gt;imusim&lt;/em&gt; I'd like to know how to model them and generate using Matlab or something similar.&lt;/p&gt;&#xA;" OwnerUserId="2757" LastActivityDate="2018-07-04T17:50:42.713" Title="Simulate IMU (2D gyro and accelerometer) data" Tags="&lt;imu&gt;&lt;accelerometer&gt;&lt;gyroscope&gt;&lt;simulation&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6932" PostTypeId="2" ParentId="6931" CreationDate="2015-04-01T02:02:17.860" Score="3" Body="&lt;p&gt;This is really simple. First of all, you need to understand how the sensor works. In other words, you need understand whether the measurements is coming from linear or nonlinear model. Second, what is the type of the sensor's noise?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CASE STUDY: &#xA;Let's say you want to simulate DC Voltemeter to measure a battery's voltage of 5 Volt. In an ideal case, the model of the system is &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;V_{b}(k+1) = V_{b}(k)&#xA;$$&#xA;It is just a constant value whether you measure it now or in the future, the value is 5 Volt. In the reality, this is not the case. If you measure it now, you might get 4.9 Volt, later on 5.1 Volt. The measurements vary which means the sensor is noisy. In many cases, the noise is Gaussian with zero mean and some variance (i.e. $\mathcal{N}(0, \sigma^{2}))$. Therefore, the measurement model is &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;Z(k+1) =  V_{b}(k+1) + \delta&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $\delta$ is the measurement noise (i.e. $\mathcal{N}(0, \sigma^{2})$). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To simulate this scenario in Matlab, &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;clear all; clc;&#xA;ideal_value = 5;&#xA;sigma = 0.01;&#xA;real_value = ideal_value + sigma*randn(5,1) &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The output is then &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;real_value =&#xA;    5.0009&#xA;    5.0173&#xA;    4.9939&#xA;    4.9926&#xA;    4.9825&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In reality, there is no way to know the ideal value. If you want to decrease the accuracy of your sensor, you need to increase the value of the $\sigma$. In 2D laser scenario, the input of the sensor is the Cartesian location ($x, y$) and the output is the polar coordinates ($r, \phi$) with some Gaussian noise. Let's say we have a 2D laser sensor that is located in the origin and we have a tree in planar environment. The sensor with update rate 10 Hz provides the range $r$ and the bearing $\phi$ to the tree with some noise in both the range and the bearing.  Therefore the following code simulates the scenario&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;clear all&#xA;clc&#xA;&#xA;tree_x = 4;&#xA;tree_y = 4;&#xA;&#xA;sigma_r = 0.1; % m&#xA;sigma_p = deg2rad(1); % rad&#xA;&#xA;dt = 1/10;&#xA;&#xA;t = 0:dt:0.5;&#xA;for i = 1:numel(t)&#xA;    r(i) = sqrt( tree_x^2 + tree_y^2 ) + sigma_r*randn();&#xA;    p(i) = atan2( tree_y, tree_x ) + sigma_p*randn();&#xA;end&#xA;r &#xA;rad2deg(p) &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The results are&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;r =&#xA;    5.7598    5.7581    5.6356    5.5525    5.6130    5.7552&#xA;p =&#xA;   44.6549   45.6293   44.1343   44.7299   44.5913   44.7023&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="2155" LastEditDate="2018-07-04T17:50:42.713" LastActivityDate="2018-07-04T17:50:42.713" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="6934" PostTypeId="1" CreationDate="2015-04-01T15:28:22.570" Score="1" ViewCount="59" Body="&lt;p&gt;Someone could tell me if there are wearable devices such as glasses, with sensors that can detect eye movement?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In particular, I would need a device like google glass, having a sensor or a camera that is facing the eye, and it can capture the movement, possibly interfaced with a mobile device.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively, are there micro-cameras on the market, which can be connected via Bluetooth or USB to a mobile device?&lt;/p&gt;&#xA;" OwnerDisplayName="user9411" LastEditorUserId="7066" LastEditDate="2015-04-23T07:28:26.560" LastActivityDate="2015-04-23T07:28:26.560" Title="Glasses with eye sensors" Tags="&lt;sensors&gt;&lt;motion&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6935" PostTypeId="2" ParentId="2712" CreationDate="2015-04-01T21:19:39.263" Score="2" Body="&lt;p&gt;The Raspberry Pi B, and in particular the Raspberry Pi B2 are fairly sensitive to having enough current to meet their peek power needs. For most of my apps, I have been using a 1.5A supply, and that has been more than sufficient for the Raspberry Pi B+, however when I started trying to use the Raspberry Pi B2 I needed a peak of 3A to be able to not have it &quot;brown out&quot; and reboot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would recommend upping your available power, and see if it makes a difference.&lt;/p&gt;&#xA;" OwnerUserId="1723" LastActivityDate="2015-04-01T21:19:39.263" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6936" PostTypeId="1" CreationDate="2015-04-01T21:21:50.233" Score="1" ViewCount="1087" Body="&lt;p&gt;I would likte to find the joints positions using joint angles, link lengths etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I define the position of the each joint using DH parameters?&lt;/p&gt;&#xA;" OwnerUserId="9413" LastActivityDate="2015-04-03T20:59:13.337" Title="joint positions of a robot" Tags="&lt;robotic-arm&gt;&lt;joint&gt;&lt;dh-parameters&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6937" PostTypeId="2" ParentId="6936" CreationDate="2015-04-02T00:10:59.143" Score="0" Body="&lt;p&gt;Please see some of the many other similar questions on this site.  For example:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/3032/jacobian-of-abb-irb140-robot/&quot;&gt;jacobian of Abb irb140 robot&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/2250/finding-inverse-kinematics-algorithm-for-a-specific-manipulator&quot;&gt;Finding inverse kinematics algorithm for a specific manipulator&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/4610/forward-kinematics-d-h-parameters-for-perpendicular-joint-axes&quot;&gt;Forward Kinematics/D-H parameters for perpendicular joint axes&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="110" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2015-04-02T00:10:59.143" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6939" PostTypeId="2" ParentId="6929" CreationDate="2015-04-02T13:41:01.013" Score="2" Body="&lt;p&gt;Once you pair your computer's Bluetooth with the dongle on the robot, it should create a virtual serial port.  Then you can talk to the Roomba over this port.  Try out the &lt;a href=&quot;http://www.irobot.com/~/media/MainSite/PDFs/About/STEM/Create/Create_2_Tethered_Driving_2.pdf&quot; rel=&quot;nofollow&quot;&gt;tethered driving tutorial&lt;/a&gt;, except your tether is wireless.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-04-02T13:41:01.013" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6940" PostTypeId="2" ParentId="6859" CreationDate="2015-04-02T14:00:28.490" Score="-3" Body="&lt;p&gt;I think that just PID is not a good approach to solve a tracking problem. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is better to use nonlinear control method that are suitable for that task like &quot;Exact feedforward linearization based on differential flatness&quot;. You can get an overview in the open access paper: &lt;a href=&quot;https://hal.archives-ouvertes.fr/hal-00431712&quot; rel=&quot;nofollow&quot;&gt;https://hal.archives-ouvertes.fr/hal-00431712&lt;/a&gt; and references therein. &lt;/p&gt;&#xA;" OwnerUserId="9418" LastActivityDate="2015-04-02T14:00:28.490" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6941" PostTypeId="2" ParentId="6831" CreationDate="2015-04-02T14:03:10.377" Score="2" Body="&lt;p&gt;It looks like openinterface.py itself is not easily found anymore, but you can probably use instead &lt;a href=&quot;https://code.google.com/p/pyrobot/&quot; rel=&quot;nofollow&quot;&gt;pyrobot&lt;/a&gt;, which is based on openinterface.py. Pyrobot is an interface for Roomba and Create 1, not Create 2, but it should be easy to adapt it to work with the Create 2. The default baud rate needs to be changed from 57600 to 115200, and there are a few functions/sensors that are different between Create 1 and Create 2. The differences are listed on the last page of the &lt;a href=&quot;http://www.irobot.com/~/media/MainSite/PDFs/About/STEM/Create/create_2_Open_Interface_Spec.pdf&quot; rel=&quot;nofollow&quot;&gt;Create 2 Open Interface Specification&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apart from pyrobot, there are several Python wrappers for the Create 1 that you could look into, namely Brian Bingham's &lt;a href=&quot;http://web.eng.hawaii.edu/~bsb/me492_696/pici/getting_started.html&quot; rel=&quot;nofollow&quot;&gt;Pici&lt;/a&gt;, &lt;a href=&quot;http://www.rose-hulman.edu/class/csse/resources/Robotics/&quot; rel=&quot;nofollow&quot;&gt;Rose-Hulman Institute of Technology's pyCreate&lt;/a&gt;, and &lt;a href=&quot;https://code.google.com/p/brown-ros-pkg/downloads/list&quot; rel=&quot;nofollow&quot;&gt;Brown's pyCreate&lt;/a&gt; (in brown-ros-pkg).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: I have since modified the PyRobot code to work with the Create 2, and made it available for download under the name &lt;a href=&quot;http://www.jonathanleroux.org/research/micbots/pyrobot2.py&quot; rel=&quot;nofollow&quot;&gt;PyRobot 2&lt;/a&gt;. This is part of a project called &lt;a href=&quot;http://www.jonathanleroux.org/research/micbots.html&quot; rel=&quot;nofollow&quot;&gt;MICbots&lt;/a&gt; using mobile robots for audio data collection.&lt;/p&gt;&#xA;" OwnerUserId="9417" LastEditorUserId="9417" LastEditDate="2015-05-03T15:43:50.160" LastActivityDate="2015-05-03T15:43:50.160" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6942" PostTypeId="1" CreationDate="2015-04-03T02:01:05.547" Score="1" ViewCount="449" Body="&lt;p&gt;I am trying to set up my stereo vision system on a car. However, I meet several problems and do not know how to solve them.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;How to select the baseline? I want the distance measurement to be far at 30 or 50 meters and near at around 5-10m. Is it possible to choose a baseline that meets my requirement?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I have tried stereo calibration of two cameras and also learned how to compute depth value from disparity map. However I don't know how to compute depth value if the focal lengths of the two cameras are different. It seems all the theorems I can find on the Web only concern cameras of the same focal length. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="9241" LastActivityDate="2015-07-20T21:39:56.330" Title="How to set up binocular cameras on a car?" Tags="&lt;stereo-vision&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6944" PostTypeId="1" AcceptedAnswerId="10851" CreationDate="2015-04-03T09:34:21.310" Score="0" ViewCount="109" Body="&lt;p&gt;So the idea is that there would be one robot acting as overwatch, which would detect all of the obstacles in an area (which are not necessarily static), and then send the data about the obstacles' positions to another robot that would navigate around the obstacles to a goal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My initial thought was to have the overwatch robot be in an elevated position in the centre of the area, then sweep around using an ultrasonic sensor. This way, it could keep track of the obstacles in a set of polar coordinates (distance, angle). But then I realised that this method doesn't account for collinear obstacles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the question is, what is the best way to detect a bunch of non-static obstacles within an area?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a side note, I have seen a system similar to this, where there was a robot detecting obstacles (in that case, a crowd of people) and another robot pathfinding around the obstacles (the people), but I'm unsure exactly how that system was detecting the obstacles.&lt;/p&gt;&#xA;" OwnerUserId="9422" LastActivityDate="2016-10-15T15:52:12.830" Title="Dynamically detect changing obstacles" Tags="&lt;sensors&gt;&lt;computer-vision&gt;&lt;sonar&gt;&lt;ultrasonic-sensors&gt;" AnswerCount="2" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="6945" PostTypeId="1" AcceptedAnswerId="6954" CreationDate="2015-04-03T09:44:16.797" Score="0" ViewCount="102" Body="&lt;p&gt;I have a generic problem to create a controller for the following system:&#xA;$$\ddot{x}(t) = a y(t)$$ &#xA;where $a$ is a constant real value.&#xA;The system could be seen as an equivalent of a mass-spring-damper system, where damper and spring are removed. Also $x(t)$ is the $x$ dimension and $y$ is simply the force moving the mass. &lt;strong&gt;BUT&lt;/strong&gt; in this case I need to drive the force using $x(t)$ and not the contrary.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Transforming according Laplace I get:&#xA;$$ y(t) = \frac{1}{a}\ddot{x}(t)$$&#xA;$$ Y(s) = \frac{1}{a}s^{2}X(s)$$&#xA;$$ G(s) = \frac{Y(s)}{X(s)} = \frac{s^{2}}{a}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Considering that $a = 1$ I implemented a possible example in Simulink. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/wuzjG.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Please not that I put the output given by the scope for showing up the resulting answer of the system.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I have 2 questions:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Is it possible to develop such a system? As far as I know the degree of the numerator should be $=&amp;lt;$ the degree of the denominator. So is the above system possible?&lt;/li&gt;&#xA;&lt;li&gt;Is it possible to create a PID or PD controller to stabilize the output of the system?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Regards&lt;/p&gt;&#xA;" OwnerUserId="7097" LastEditorUserId="7097" LastEditDate="2015-04-03T11:13:24.170" LastActivityDate="2015-04-08T02:04:25.397" Title="Help to dimension the right controller for the following Tranfer Function" Tags="&lt;control&gt;&lt;pid&gt;&lt;matlab&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6946" PostTypeId="1" CreationDate="2015-04-03T13:06:23.123" Score="1" ViewCount="84" Body="&lt;p&gt;I want to make a component that will be a square plate that will behave like it has a motorized hinge on all four sides. That is, it can &quot;open&quot; by pivoting around any one of its four sides. I want it to pivot by up to 45 degrees. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I thought about designing it so that 3 hinges could be detached while one pivots, but I wonder if there's a simpler way to do this. &lt;/p&gt;&#xA;" OwnerUserId="9423" LastActivityDate="2015-04-08T10:54:48.447" Title="Square with hinge on all four sides" Tags="&lt;design&gt;&lt;motion&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6947" PostTypeId="2" ParentId="6934" CreationDate="2015-04-03T19:32:18.993" Score="1" Body="&lt;p&gt;These devices are called gaze trackers. There are &lt;a href=&quot;http://www.gazegroup.org/forum/&quot; rel=&quot;nofollow&quot;&gt;open source libraries&lt;/a&gt; for using webcams and &lt;a href=&quot;http://www.eyetracking-glasses.com&quot; rel=&quot;nofollow&quot;&gt;out of the box solutions&lt;/a&gt; available. Google has many more options. Cheers!&lt;/p&gt;&#xA;" OwnerUserId="163" LastActivityDate="2015-04-03T19:32:18.993" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6948" PostTypeId="2" ParentId="6918" CreationDate="2015-04-03T20:35:02.247" Score="2" Body="&lt;p&gt;The robot you have modeled is a RR:R robot (3 rotational joints) with a sliding base from what I can understand. It is not clear if it has a spherical wrist.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The kinematic solution to such a robot can be given by first splitting the problem in to two parts. One to solve the kinematics for the 3 rotational joints and then computing the axial shift of the end effector axis in accordance with the shift of the base reference coordinates.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can solve the forward kinematics using the Denavit Hartenberg parameter calculation and subsequently calculate the inverse kinematics for your RRR robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The forward kinematic transformation matrix for your RRR robot will only contain the three joint theta angles and the three link lengths. Apply this to calculate joint positions w.r.t the base frame using the transformation matrix for each of the joints to achieve the total transformation matrix for the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I will try post the solution to this soon, but you can look it up in the Robot Modeling and Control by Spong and VIdyasagar (page 68) : &lt;a href=&quot;http://www.fit.hcmup.edu.vn/~hungnv/teaching/Robotics/0471649902_-_Robot_Modeling_and_Control.pdf&quot; rel=&quot;nofollow&quot;&gt;http://www.fit.hcmup.edu.vn/~hungnv/teaching/Robotics/0471649902_-_Robot_Modeling_and_Control.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I find its the best place to learn to apply forward and inverse kinematic solutions for an anthropomorphic robot arm.&lt;/p&gt;&#xA;" OwnerUserId="9321" LastActivityDate="2015-04-03T20:35:02.247" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6949" PostTypeId="2" ParentId="6936" CreationDate="2015-04-03T20:59:13.337" Score="1" Body="&lt;p&gt;Essentially when applying the DH parameter method to compute Forward Kinematics for a robot arm(assuming that it is anthropomorphic robot arm kinematics you are interested in), you are to set reference frames at each joint such that the z axis coincides with the axis of rotation of the joint. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The next step is to find the DH values for the joints w.r.t the base reference frame, i.e the link lengths(L1,L2 etc, also represented frequently as 'a'), the theta angles (of rotation at the joints),d (joint offset distances), and &quot;alpha&quot; angles (joint offset angles).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can find those values by inspecting the frames of the robot once you assign them. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then input those DH parameter values in a transformation matrix that relates the frame of reference to the previous frame of reference, i.e. for Joint 1, it will be T(1 to 0), for Joint 2 T(2 to 1) etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The then final step is to premultiply the transformation matrices &#xA;T(n to 0) = T(1 to 0)* T(2 to 1) * T(3 to 2)...* T(n to n-1) to compute the Total Transformation matrix(T (n to 0) that relates the end effector(nth frame of reference) to the base reference frame. That is your Forward Kinematic solution for the robot arm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A good reference textbook would be Robot Modeling and Control by Spong, Vidyasagar. Look for chapter on Forward Kinematics. See link for the book chapter : &lt;a href=&quot;http://www.fit.hcmup.edu.vn/~hungnv/teaching/Robotics/0471649902_-_Robot_Modeling_and_Control.pdf&quot; rel=&quot;nofollow&quot;&gt;http://www.fit.hcmup.edu.vn/~hungnv/teaching/Robotics/0471649902_-_Robot_Modeling_and_Control.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you can be more specific about the type of robot you are trying to compute kinematics for, I can be more specific with my answer. Hope this helps.&lt;/p&gt;&#xA;" OwnerUserId="9321" LastActivityDate="2015-04-03T20:59:13.337" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6950" PostTypeId="2" ParentId="2480" CreationDate="2015-04-03T23:58:40.520" Score="1" Body="&lt;p&gt;I think you might need two &quot;lazy susans&quot; in the channel.  Shown in green in this image.  And then the rider in the channel does not have to be round.  In fact it is probably best to rigidly attach to one side of the lazy susan.  Now you can put a simple shaft and bearing in the inside ring.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;One more note, if the load is not great, and you don't care about cantilevering the lazy susan, you can get away with only one lazy susan on one side.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/VgwTJ.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-04-03T23:58:40.520" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6951" PostTypeId="2" ParentId="6918" CreationDate="2015-04-04T05:54:08.253" Score="2" Body="&lt;p&gt;If you want to solve it mathematically (not within the SolidWorks), the DOF is the number of independent variables needed to define the configuration of the mechanism. Since you've planar motion in three joints (rotations about one axis) in addition to the slide this will make the DOF is 4 in this case. &#xA;Because your problem is in one plan (Planar robot), you can solve the forward kinematics, by direct projection of the components in the two directions, horizontal and vertical, using the trigonometric functions sin and cosine as we do in the basic physics, and adding the parameter d (for example) for the horizontal component with proper sign to act for the slider movement. As for the backward (inverse) kinematics which will need more investigation, you can also try to solve it algebraically, based on some geometric basics taking the advantage of the simplicity ; in that case you'll take the pose (position and orientation) of the end effector (the tip point), and solve for the three angles, and the slide (d), with some math manipulation you can figure out this. This I'm describing the shortcut to workout your problem. However, if you've more time, and will do more work on kinematics, you can follow one the two approaches:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;The product of exponential method ( which I prefer) you can refer to it in the: A &lt;a href=&quot;http://www.cds.caltech.edu/~murray/books/MLS/pdf/mls94-complete.pdf&quot; rel=&quot;nofollow&quot;&gt;Mathematical Introduction to Robotic Manipulation&lt;/a&gt;, by Murray &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Or you can use the DH convention, the widely used method. The inverse kinematics is a large topic in the robotic literature, you can find a lot about around. However, if you looking to that in the SolidWrok, this is another issue.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="9087" LastActivityDate="2015-04-04T05:54:08.253" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6952" PostTypeId="1" CreationDate="2015-04-04T07:59:27.647" Score="1" ViewCount="806" Body="&lt;p&gt;I'm working on an robot that would be able to navigate through a maze, avoid obstacles and  identify some of the objects in it. I have a monochromatic bitmap of the maze, that is supposed to be used in the robot navigation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am just a first year electrical engineering student, and so need help on how I can use the bmp image. I will be making my robot using the Arduino mega microcontroller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So how should I get started on it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you need me to elaborate on anything kindly say so. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Link: &lt;a href=&quot;http://ceme.nust.edu.pk/nerc/files/theme_ind_2015.pdf&quot; rel=&quot;nofollow&quot;&gt;http://ceme.nust.edu.pk/nerc/files/theme_ind_2015.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9428" LastEditorUserId="134" LastEditDate="2015-04-08T09:53:16.377" LastActivityDate="2015-09-08T18:23:32.657" Title="Using a Bitmap maze image to navigate the maze" Tags="&lt;arduino&gt;&lt;control&gt;&lt;localization&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6953" PostTypeId="1" CreationDate="2015-04-04T08:54:13.237" Score="4" ViewCount="15086" Body="&lt;p&gt;I am using a tri-axis accelerometer and tri-axis gyroscope to measure the linear acceleration of a body. I need to get the orientation of the body in euler form in order to rotate the accelerometer readings from the body frame into the earth frame. Please help I'm so stuck&lt;/p&gt;&#xA;" OwnerUserId="9430" LastActivityDate="2016-10-09T18:33:51.910" Title="How to calculate Euler Angles from gyroscope output?" Tags="&lt;accelerometer&gt;&lt;gyroscope&gt;&lt;frame&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="6954" PostTypeId="2" ParentId="6945" CreationDate="2015-04-04T13:30:18.850" Score="2" Body="&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Nope, the system is not feasible since the causality principle states that the degree of the denominator of the transfer function must be greater or equal to the degree of the numerator, as you have correctly pointed out. The system analysis, indeed, does always proceed in terms of integral blocks (i.e. $1/s$) and not derivatives. In this respect, what is the system you have in mind? Are you 100% sure that you caught all its implications?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Even assuming the double derivatives as a purely ideal system to stabilize - only in simulation -, a PID is unable to cope with the task. Imagine we are at equilibrium, then the system output $y$ is equal to the input $r \neq 0$ and the error $e=r-y$ before the PID is thus zero. However, a constant output means that upstream to the double derivatives we must have a signal $u$ varying as $t^2$. The signal $u$ is also the PID output, while the PID input is $e=0$, as said. You must have then a double integrator in the PID. But this is only a theoretical speculation.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2015-04-04T21:01:00.543" LastActivityDate="2015-04-04T21:01:00.543" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6955" PostTypeId="1" CreationDate="2015-04-04T18:43:35.027" Score="0" ViewCount="232" Body="&lt;p&gt;How to make a robot move using Arduino other than timing to predefined locations? and without the use of sensors?? I want to make my car move to different locations on a board..want to know the possible options without using sensors and encoders??&#xA;And how does cartesian robot work for predefined locations..does it require sensor too?&lt;/p&gt;&#xA;" OwnerUserId="9435" LastEditorUserId="19515" LastEditDate="2020-07-25T00:36:15.430" LastActivityDate="2020-07-25T00:36:15.430" Title="How to make a robot move using Arduino other than timing to predefined locations?" Tags="&lt;arduino&gt;&lt;navigation&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="6956" PostTypeId="1" CreationDate="2015-04-04T18:56:35.347" Score="0" ViewCount="1285" Body="&lt;p&gt;SLAM noob here but trying to implement an algorithm that fuses odometry data and mapping based on wifi signal strengths for a 2D robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;1)&lt;/strong&gt;&#xA;After various readings of different resources,&#xA;I came across this - &lt;a href=&quot;http://www.qucosa.de/fileadmin/data/qucosa/documents/8644/Dissertation_Niko_Suenderhauf.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.qucosa.de/fileadmin/data/qucosa/documents/8644/Dissertation_Niko_Suenderhauf.pdf&lt;/a&gt;&#xA;that explained what sensors are used in mapping and how they are categorized.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are range-bearing sensors (stereo cameras,RGB-d cameras) that provide both distance and angle (range and bearing), from which is easy to locate (x,y) coordinates of landmarks ---&gt; I can develop a map.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But in case I'm using wifi signal strengths (Received signal strengths) etc, in which case it is range-only (meaning, I can only establish from a robot pose(x,y,theta) as to &lt;strong&gt;how far&lt;/strong&gt; this signal is coming from), how am I developing a map at all?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is similar to this - &lt;a href=&quot;https://robotics.stackexchange.com/questions/53/what-algorithm-can-i-use-for-constructing-a-map-of-an-explored-area-using-a-numb&quot;&gt;What algorithm can I use for constructing a map of an explored area using a number of ultrasound sensors?&lt;/a&gt; but not quite same.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even if I were using IMU/GPS, how am I using GPS to develop a map? What is my state space there? If I am getting GPS signals / wifi signals/ radio signals, am I estimating the transmitter/AP's location as the map? or the walls of a room I'm navigating in, as a map?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A lot of SLAM literature talks about &lt;strong&gt;motion model&lt;/strong&gt; and &lt;strong&gt;measurement model&lt;/strong&gt;, the former gives me the pose of the robot quite easily because of the odometry and imu. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The latter though is more for development of a map. Am I right in understanding this? If yes, say &#xA;a] I have walls in a room and I'm using Lidar scanner - &#xA;this still gives me the location of the wall using the number of beams that give me bearing, and the average distance from all the beams.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;b] Or if I have just a single laser scanner, I can still use a camera (distance) and the heading of the robot to calculate the location of wall (the map). &lt;a href=&quot;https://shaneormonde.wordpress.com/2014/01/25/webcam-laser-rangefinder/#more-403&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://shaneormonde.wordpress.com/2014/01/25/webcam-laser-rangefinder/#more-403&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But If I have wireless signal strengths, I have a distance (&lt;strong&gt;distance of the transmitter from which I'm getting the RSS&lt;/strong&gt;, not the distance of the wall) as to where they are coming from. But how am I estimating the location of walls here?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;2)&lt;/strong&gt; What does the term &quot;correspondences&quot; mean in SLAM literature? &lt;/p&gt;&#xA;" OwnerUserId="2757" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2017-04-18T11:51:50.200" Title="using range-only sensors for mapping in SLAM" Tags="&lt;localization&gt;&lt;slam&gt;&lt;artificial-intelligence&gt;&lt;mapping&gt;&lt;wireless&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6957" PostTypeId="1" CreationDate="2015-04-05T00:46:23.963" Score="4" ViewCount="701" Body="&lt;p&gt;I designed a mini quadcopter which is about 4.5x4.5cm(Main Body). The main body is the PCB. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;![enter image description here][1]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It weighs about ~20 grams with the battery. I'm using the MPU6050 with the DMP using the i2cDevLib. I am using raw radians for pitch, roll, and yaw these measures are read from the MPU6050's DMP. The motors are attached to the body using electrical tape(Black thing  around motors). The motors are 8.5mm in diameter and are driven by a n-channel mosfet. The mode of control right now is bluetooth(HC-05 module). The code being used is my own.&#xA;I have a control loop on all axes, the pitch and roll have the same values since the quadcopter is symmetrical. The problem I have is that PID tuning is next to impossible, the best I got was a ~2 second flight ([Video in slow-motion][2]).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At first I was using my own code for the control loop, but it wasn't as effective as the Arduino PID library. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The output of the PID loops are mapped to -90 to 90 on all axes. This can be seen in the code&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;myPID.SetOutputLimits(-90, 90); //Y angle    &#xA;myPID1.SetOutputLimits(-90, 90); // X angle&#xA;myPID2.SetOutputLimits(-90, 90); // Yaw angle&#xA;myPID.SetMode(AUTOMATIC);&#xA;myPID1.SetMode(AUTOMATIC);&#xA;myPID2.SetMode(AUTOMATIC);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;My full code is below, but what do you think the problem is?&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Code&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://pastebin.com/cnG6VXr8&quot; rel=&quot;nofollow&quot;&gt;http://pastebin.com/cnG6VXr8&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9438" LastEditorUserId="9438" LastEditDate="2015-07-07T00:11:12.523" LastActivityDate="2015-08-06T00:12:50.573" Title="Micro Quadcopter PID problem" Tags="&lt;arduino&gt;&lt;quadcopter&gt;&lt;pid&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6959" PostTypeId="2" ParentId="6955" CreationDate="2015-04-05T10:31:23.663" Score="4" Body="&lt;p&gt;Cartesians Robot use sensors. All robot need sensors. Sometime they are external (camera looking at the robot), sometime they are on the robot (IMU). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically what you're asking is : &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;How can an animal without any way to sense the world move from an exact point to another ?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Well, it can't.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why do you wish not to use sensors ? There are very cheap ones out there that could help you with your project. You just need to define this project a little better so you can find the sensor that works for you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Btw, going to predefined location without sensor like &lt;em&gt;encoders&lt;/em&gt;, is not really feasible either. Or a pain. You'll need to calculate an approximate speed from the voltage (and, as someone pointed out, knowing the voltage would need a sensor) you input in the motor and, trust me, it's not going to be very accurate. The drift is going to kill you.&lt;/p&gt;&#xA;" OwnerUserId="1615" LastEditorUserId="1615" LastEditDate="2015-04-06T08:32:45.403" LastActivityDate="2015-04-06T08:32:45.403" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6960" PostTypeId="2" ParentId="6945" CreationDate="2015-04-05T14:26:47.680" Score="0" Body="&lt;p&gt;As far as I can see, what you have there is just a system where you're inputting a scaled acceleration. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{bmatrix}&#xA;\dot{x}(t)\\&#xA;\ddot{x}(t)&#xA;\end{bmatrix} = \begin{bmatrix}0 &amp;amp; 1\\ 0 &amp;amp; 0\end{bmatrix}\begin{bmatrix}x(t)\\\dot{x}(t)\end{bmatrix} + \begin{bmatrix}0\\a\end{bmatrix}y(t)&#xA;$$&#xA;$$&#xA;\dot{x} = Ax + By&#xA;$$&#xA;In classical state space representation. The controllability matrix has full rank, so the system is controllable. That is we need to design some matrix K such that:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\dot{x} = (A-BK)x&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;is stable. For a continuous time system, this means that $(A-BK)$ must have negative real parts on its eigenvalues. Now if:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;K = \begin{bmatrix}k_1 &amp;amp; k_2 \end{bmatrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;then&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;(A-BK) = \begin{bmatrix}0 &amp;amp; 1\\ -ak_1 &amp;amp; -ak_2\end{bmatrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;with eigenvalues&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\lambda_1 = \frac{-ak_2 - \sqrt{a^2k_2^2 - 4ak_1}}{2}&#xA;$$&#xA;$$&#xA;\lambda_2 = \frac{-ak_2 + \sqrt{a^2k_2^2 - 4ak_1}}{2}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here $k_1$ is the P value and $k_2$ is the D value in a PD controller that uses $x(t)$ as the &quot;driving force&quot;. For any given nonzero $a$, they can be be chosen to stabilize the system w.r.t $x$. Note also that: 1) if $k_2=0$ we can't stabilize the system and 2) at any point in time $y(t) = -ak_1x(t) -ak_2\dot{x}(t)$. As $y(t)$ depends on $x(t)$ and $\dot{x}(t)$, both of which go to zero, $y(t)$ goes to zero. Did I understand your question correctly?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/DmXeq.png&quot; alt=&quot;stablesystem&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="9441" LastEditorUserId="6941" LastEditDate="2015-04-05T19:11:04.817" LastActivityDate="2015-04-05T19:11:04.817" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6965" PostTypeId="2" ParentId="6900" CreationDate="2015-04-06T08:53:47.807" Score="1" Body="&lt;p&gt;I had exactly the same problem ; I contacted 4tronix and they said &quot;Use Energiser or Eneloop recharcheable batteries&quot; (I was using Duracells) I did as they said and it worked fine. Mind you I am still not sure what initio.py actually does ....&lt;/p&gt;&#xA;" OwnerUserId="9446" LastActivityDate="2015-04-06T08:53:47.807" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6966" PostTypeId="2" ParentId="6953" CreationDate="2015-04-06T14:08:18.300" Score="3" Body="&lt;p&gt;Look into a complementary filter. It isn't the correct way to go out this but it will give you usable data for attitudes around level. It's also worth mentioning that you will not be able to track yaw. There is no way to account for bias/noise with the two sensors you've listed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;complementary filter:&#xA;&lt;a href=&quot;http://www.pieter-jan.com/node/11&quot; rel=&quot;nofollow&quot;&gt;http://www.pieter-jan.com/node/11&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8842" LastActivityDate="2015-04-06T14:08:18.300" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6969" PostTypeId="1" CreationDate="2015-04-07T12:38:21.547" Score="1" ViewCount="181" Body="&lt;p&gt;I need to make shallow (max 2m) underwater wireless sensor network. Data payload is about 10kB/s. I know that VLF band (~3-30kHz)could be the best solutions for that, but cause of time-to-market I cannot make hardware and software from the ground.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe someone could share own-self experience in this filed. &lt;br&gt;If band 100-900MHz could be enough to send 10kB/s from one device to another - from 2m underwater to over a dozen cm from water surface?&lt;br&gt; Maybe some IC for ultrasonic communication exist?&lt;br&gt; Another ideas?&lt;/p&gt;&#xA;" OwnerUserId="9449" LastEditorUserId="134" LastEditDate="2015-04-08T09:53:43.300" LastActivityDate="2016-05-06T09:50:22.747" Title="Shallow underwater wireless sensor network" Tags="&lt;sensors&gt;&lt;wireless&gt;&lt;communication&gt;" AnswerCount="1" CommentCount="4" ClosedDate="2016-05-06T12:29:08.140" ContentLicense="CC BY-SA 3.0" />
  <row Id="6970" PostTypeId="2" ParentId="6952" CreationDate="2015-04-07T12:52:45.497" Score="2" Body="&lt;p&gt;It sounds like what you have is an &lt;a href=&quot;http://en.m.wikipedia.org/wiki/Occupancy_grid_mapping&quot; rel=&quot;nofollow&quot;&gt;occupancy grid&lt;/a&gt;, which you could simply convert to a 2D array of booleans in memory. Your challenge will be to figure out what grid square you are in at any given time, and (when you are very confident about your location) mark down additional map obstacles as &quot;occupied&quot; on your map.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One way to figure out where you are over time is to use a &lt;a href=&quot;http://en.m.wikipedia.org/wiki/Particle_filter&quot; rel=&quot;nofollow&quot;&gt;particle filter&lt;/a&gt;, and one way to find a path across an occupancy grid is to use &lt;a href=&quot;http://en.m.wikipedia.org/wiki/A*_search_algorithm&quot; rel=&quot;nofollow&quot;&gt;the A* search&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2015-04-07T12:52:45.497" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6972" PostTypeId="2" ParentId="2555" CreationDate="2015-04-07T14:13:48.177" Score="1" Body="&lt;p&gt;If you need realtime imagery, you should look at the many analog cameras and transmitters on the market.  The FPV folks use them all the time and have really worked them out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously you'll have to deal with analog noise and conversion to digital on the other end, but it is the only thing that will give you any real range (0.5km at least) and realtime performance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's one I use: &lt;a href=&quot;http://www.readymaderc.com/store/index.php?main_page=product_info&amp;amp;products_id=266&quot; rel=&quot;nofollow&quot;&gt;http://www.readymaderc.com/store/index.php?main_page=product_info&amp;amp;products_id=266&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8844" LastActivityDate="2015-04-07T14:13:48.177" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6974" PostTypeId="2" ParentId="6956" CreationDate="2015-04-07T23:52:03.403" Score="2" Body="&lt;p&gt;SLAM is so huge topic with a lot of challenging problems. For beginners, I don't really recommend you to read papers. The authors of academic papers assume you know not only the  basics in the field but they assume you know the problem that they handle. What you really need is a book that covers the problem in a complete manner, therefore this &lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/0262201623&quot; rel=&quot;nofollow&quot;&gt;book&lt;/a&gt; is the way to go with. Read the book and do some simulation in Matlab. It answers your questions. The book is really big however you need only to focus on the basics (i.e. focus on EKF-SLAM for the time being). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Chapter 1, 2, 3 ( math prerequisites ) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Chapter 5,6 ( motion and measurement models  )&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Chapter 7 ( Localization problem )&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Chapter 10 ( SLAM problem )&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you are done with these chapters, you should do some simulations and read some academic papers regarding EKF-SLAM. Once you reach this level, you are able to know your path. &lt;/p&gt;&#xA;" OwnerUserId="2155" LastActivityDate="2015-04-07T23:52:03.403" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6975" PostTypeId="2" ParentId="6945" CreationDate="2015-04-08T01:46:49.133" Score="0" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;The system could be seen as an equivalent of a mass-spring-damper&#xA;  system, where damper and spring are removed&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This is correct if you assume $x(t)$ to be the output but you are not. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;y is simply the force moving the mass. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If $y$ is the force, this means it is the input of the system?!&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;BUT in this case I need to&#xA;  drive the force using x(t) and not the contrary&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This is impossible. What  you are saying makes no sense. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is not a dynamic system and your simulink diagram is not correct. Your actual system is an amplifier of the second derivative of a given signal. You have the output as a function of time (i.e. $y(t)$), therefore there is no point of applying transfer function tool. The input of this system is the second derivative of a given signal, thus if the input is the step function which means $x(t) = 1, t \geq 0 $, its second derivative is zero. If you set the input as $x(t) = sin(t)$ and $a=0.5$, the output is &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/MynfO.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and this is the matlab script for the above picture. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;clear all; clc;&#xA;&#xA;dt = 0.0001;&#xA;t = -pi:0.01:2*pi;&#xA;&#xA;x = sin(t); % the input &#xA;% plot(t, x, 'b')&#xA;&#xA;dx = diff(x)./diff(t); % the first derivative of the input &#xA;% hold on &#xA;% plot(t(2:end), dx, 'r')&#xA;&#xA;ddx = diff(dx)./diff(t(2:end)); % the second derivative of the input&#xA;% hold on &#xA;plot(t(3:end), ddx, 'b')&#xA;&#xA;a = 0.5;&#xA;&#xA;% output&#xA;y = 1/a * ddx;&#xA;hold on &#xA;plot(t(3:end), y, 'r')&#xA;&#xA;&#xA;l= legend(['$\ddot{x}(t)$'], 'y(t)');&#xA;set(l,'Interpreter','Latex');&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="2155" LastEditDate="2015-04-08T02:04:25.397" LastActivityDate="2015-04-08T02:04:25.397" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6977" PostTypeId="2" ParentId="6946" CreationDate="2015-04-08T10:54:48.447" Score="1" Body="&lt;p&gt;You could try having four lids on top of each other.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The top lid solid and hinged to the lid below. &lt;/li&gt;&#xA;&lt;li&gt;The second lid a hollow frame hinged to the lid below 90$^{\circ}$ offset &lt;/li&gt;&#xA;&lt;li&gt;The third lid a hollow frame hinged to the lid below 90$^{\circ}$ offset &lt;/li&gt;&#xA;&lt;li&gt;The fourth lid a hollow frame hinged to the box 90$^{\circ}$ offset&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="7680" LastActivityDate="2015-04-08T10:54:48.447" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6979" PostTypeId="1" CreationDate="2015-04-08T13:39:51.550" Score="0" ViewCount="201" Body="&lt;p&gt;I have a my mobile robot and plan to use the dynamic window approach to collision avoidance. I have read &lt;a href=&quot;http://www4.cs.umanitoba.ca/~jacky/Teaching/Courses/74.795-LocalVision/ReadingList/fox97dynamic.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;the paper&lt;/a&gt; ,but have one inequality i can't derive it.&#xA;&lt;img src=&quot;https://i.stack.imgur.com/TbU3x.png&quot; alt=&quot;enter image description here&quot;&gt;&#xA;could you tell me? thanks!&lt;/p&gt;&#xA;" OwnerUserId="7372" LastEditorUserId="7372" LastEditDate="2015-04-09T00:49:54.263" LastActivityDate="2015-04-17T13:39:24.550" Title="Question about dynamic window approach?" Tags="&lt;navigation&gt;&lt;motion-planning&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6980" PostTypeId="1" AcceptedAnswerId="7107" CreationDate="2015-04-08T13:52:44.213" Score="1" ViewCount="659" Body="&lt;p&gt;Since the day I bought it I always use ethernet over USB connection, now I need to use RJ45 LAN cable to connect Beaglebone from my laptop, but my laptop can't even detect LAN connection from it, what could go wrong? Do I need straight or crossover cable? Do I need to configure something first on my BeagleBone?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;UPDATE: Managed to connect it through Crossover cable and assign it IP&#xA;  address by running DHCP server on my laptop.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/X3e16.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;As seen above my laptop assign IP 169.254.223.76, but when I tried to&#xA;  connect to that IP using puTTY it gives me connection refused.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/LUNAe.png&quot; alt=&quot;enter image description here&quot;&gt;&#xA;Please help.&lt;/p&gt;&#xA;" OwnerUserId="9305" LastEditorUserId="9305" LastEditDate="2015-04-08T15:58:12.920" LastActivityDate="2015-04-25T22:54:16.703" Title="Beaglebone not accessible through LAN?" Tags="&lt;beagle-bone&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6982" PostTypeId="1" CreationDate="2015-04-08T13:57:55.587" Score="0" ViewCount="109" Body="&lt;p&gt;I've been implementing an extended kalman filter, following Thrun's Probabilistic Robotics implementation. I believe my correct step may be wrong, as the state appears to be corrected &lt;em&gt;far&lt;/em&gt; too much.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's a screen capture showing the issue &lt;a href=&quot;https://youtu.be/gkSpFK27yvg&quot; rel=&quot;nofollow&quot;&gt;https://youtu.be/gkSpFK27yvg&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note, the bottom status reading is the 'corrected' pose coordinates.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is my correct step:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    def correct(self, reobservedLandmarks):&#xA;    for landmark in reobservedLandmarks:&#xA;        storedLandmark = self.getLandmark(landmark.id)&#xA;&#xA;        z = Point(landmark.dist, math.radians(landmark.angle))&#xA;        h, q = self.sensorModel(storedLandmark)&#xA;&#xA;        inv = np.array([[z.x-h.x], [wrap_radians(z.y-h.y)]])&#xA;&#xA;        JH = np.zeros([2, 3 + (self.landmarkCount*2)])&#xA;        JH[1][2] = -1.0/q&#xA;&#xA;        JH[0][0] = -((self.X[0] - storedLandmark.x) / math.sqrt(q))&#xA;        JH[0][1] = -((self.X[1] - storedLandmark.y) / math.sqrt(q))&#xA;        JH[1][0] = (storedLandmark.y - self.X[1]) / q&#xA;        JH[1][1] = -((storedLandmark.x - self.X[0]) / q)&#xA;&#xA;        JH[0][3+(landmark.id*2)] = -JH[0][0]&#xA;        JH[0][4+(landmark.id*2)] = -JH[0][1]&#xA;        JH[1][3+(landmark.id*2)] = -JH[1][0]&#xA;        JH[1][4+(landmark.id*2)] = -JH[1][1]&#xA;&#xA;        R = np.array([[landmark.dist*self.sensorDistError, 0],[0, self.sensorAngleError]])&#xA;&#xA;        Z = matmult(JH, self.P, JH.T) + R&#xA;        K = matmult(self.P, JH.T, np.linalg.inv(Z))&#xA;&#xA;        self.X = self.X + matmult(K, inv)&#xA;        self.P = matmult((np.identity(self.X.shape[0]) - matmult(K, JH)), self.P)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;h = The range and bearing of state landmark.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;q = (landmark.x - self.X[0])^2 + (landmark.y - self.X[1])^2&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My sensor covariance errors are 1cm per meter, and pi/180 for the bearing. My assumption was that the correction should be relative to the size of the robot's pose error. Which is very small in this example, as it only moved forward less than 30cm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is the kalman gain applied correctly here, and if yes, what other factors would result in this 'over-correcting'?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="9375" LastEditorUserId="9375" LastEditDate="2015-04-08T14:16:07.113" LastActivityDate="2015-04-15T17:23:15.020" Title="EKF over-correcting?" Tags="&lt;slam&gt;&lt;ekf&gt;&lt;python&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6984" PostTypeId="1" CreationDate="2015-04-08T23:44:11.397" Score="0" ViewCount="71" Body="&lt;p&gt;I have a simulated robot moving in a discretized 2D grid world that (for various simplification and time-restriction reasons) has no noise. The problem is how the robot creates its initial map of the world. Algorithms like SLAM and occupancy grid mapping are based on uncertainty, but in this case there is no uncertainty.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I'm wondering if there is a relatively simple algorithm for mapping the environment with noiseless position.&lt;/p&gt;&#xA;" OwnerUserId="9461" LastActivityDate="2015-04-16T15:37:18.100" Title="Mapping algorithm without noise" Tags="&lt;mapping&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6985" PostTypeId="1" CreationDate="2015-04-09T10:19:46.123" Score="2" ViewCount="4174" Body="&lt;p&gt;I recently bought a &lt;a href=&quot;http://plugable.com/products/usb-bt4le&quot; rel=&quot;nofollow noreferrer&quot;&gt;USB 2.0 Bluetooth Adapter&lt;/a&gt;. It claims to have support from Linux kernels of versions 3.4 and higher. I have a &lt;strong&gt;BeagleBone Black&lt;/strong&gt; with &lt;strong&gt;Debian GNU/Linux 7&lt;/strong&gt; image and kernel 3.8. I am developing on BeagleBone Black by hosting it through USB with &lt;code&gt;ssh&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have tried both hot plugging and  plugging in before boot and failed. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, I tried &lt;a href=&quot;http://michaelhleonard.com/enable-bluetooth-on-beaglebone-black/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this tutorial&lt;/a&gt;. However, I cannot find the &lt;code&gt;connman&lt;/code&gt; directory on my BeagleBone Black device. I looked up and assumed I needed to install the &lt;code&gt;connman&lt;/code&gt; package, but my BeagleBone Black has no internet access.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have also tried &lt;code&gt;lsusb -v&lt;/code&gt;, as suggested by an answer of a &lt;a href=&quot;https://stackoverflow.com/questions/18754699/usb-bluetooth-dongle-isnt-recognized-by-beaglebone-black&quot;&gt;similar question&lt;/a&gt; to this, with no luck. The weird thing is, while &lt;code&gt;lsusb&lt;/code&gt; itself prints&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub &lt;br&gt;&#xA;  Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;lsusb -v&lt;/code&gt; only prints&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;then hangs. Information regarding bus 002, which I believe the device is connected to, is not printed. I have to restart the &lt;code&gt;ssh&lt;/code&gt; connection to get back to work. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How should I approach to get the dongle to work on my BeagleBone Black? If the &lt;code&gt;connman&lt;/code&gt; package is sufficient, how do I install it on my BeagleBone Black without internet access. Why does &lt;code&gt;lsusb -v&lt;/code&gt; hang?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help is appreciated!&lt;/p&gt;&#xA;" OwnerUserId="9463" LastEditorUserId="-1" LastEditDate="2017-05-23T12:37:11.430" LastActivityDate="2015-04-10T02:17:06.863" Title="Enable Bluetooth Adapter for BeagleBone Black" Tags="&lt;beagle-bone&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6986" PostTypeId="2" ParentId="6918" CreationDate="2015-04-09T11:28:58.033" Score="1" Body="&lt;p&gt;You should first learn about forward and reverse kinematics&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a really good pdf on this here&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.google.co.uk/url?sa=t&amp;amp;source=web&amp;amp;rct=j&amp;amp;ei=Z2EmVe36BZXnapTAgIgD&amp;amp;url=http://www.cs.cmu.edu/~./15464-s13/lectures/lecture6/IK.pdf&amp;amp;ved=0CDwQFjAH&amp;amp;usg=AFQjCNFvIj48gbaCsqiCgD9c9g6uPibNMA&quot; rel=&quot;nofollow&quot;&gt;https://www.google.co.uk/url?sa=t&amp;amp;source=web&amp;amp;rct=j&amp;amp;ei=Z2EmVe36BZXnapTAgIgD&amp;amp;url=http://www.cs.cmu.edu/~./15464-s13/lectures/lecture6/IK.pdf&amp;amp;ved=0CDwQFjAH&amp;amp;usg=AFQjCNFvIj48gbaCsqiCgD9c9g6uPibNMA&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It requires you to know the fundamentals of vectors and matrices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should also know how to calculate the jacobian etc&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would start by reading this before you attempt any design/programming&lt;/p&gt;&#xA;" OwnerUserId="8838" LastActivityDate="2015-04-09T11:28:58.033" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6987" PostTypeId="1" CreationDate="2015-04-09T11:55:19.467" Score="2" ViewCount="253" Body="&lt;p&gt;I wanted to calculate the amount of thrust generated from the engines. I am using the blade 180 cfx model.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.bladehelis.com/Products/Default.aspx?ProdID=BLH3450#quickSpecs&quot; rel=&quot;nofollow&quot;&gt;http://www.bladehelis.com/Products/Default.aspx?ProdID=BLH3450#quickSpecs&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After some research I have found a way to calculate the thrust using:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;T = ( pi D^2 rho P^2)/2 where P is the Power multiplier and can be calculated using: P= prop constant * (rpm/100)^power factor&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am unable to find the values for the Prop constant and the power factor. Is there a way I can get this information? Or an alternative way to calculate the thrust generated?&lt;/p&gt;&#xA;" OwnerUserId="9457" LastEditorUserId="9457" LastEditDate="2015-04-09T12:26:29.717" LastActivityDate="2018-08-01T23:55:44.920" Title="Calculating thrust generated from electric engines" Tags="&lt;power&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6988" PostTypeId="2" ParentId="6918" CreationDate="2015-04-09T13:08:38.230" Score="1" Body="&lt;p&gt;For people just starting out with robot kinematics, I highly suggest using one of these powerful libraries and not doing the math yourself.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://openrave.org/&quot; rel=&quot;nofollow&quot;&gt;OpenRave&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;ROS &lt;a href=&quot;http://moveit.ros.org/&quot; rel=&quot;nofollow&quot;&gt;MoveIt!&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Matlab &lt;a href=&quot;http://www.petercorke.com/Robotics_Toolbox.html&quot; rel=&quot;nofollow&quot;&gt;Robotics Toolkit&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.orocos.org/&quot; rel=&quot;nofollow&quot;&gt;Orocos&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;These libraries typically let you specify the dimensions and joint configuration of your robot in something more intuitive than DH parameters.  (Translations and rotations in XML for example).  They can quickly and easily give you forward and inverse kinematics solutions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But once you get something up and running.  I then recommend doing some reading on the theory behind all this.  (Other answers listed some good books).  Things will make more sense, and you will be able to do more advanced things.  &lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-04-09T13:08:38.230" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6989" PostTypeId="2" ParentId="4874" CreationDate="2015-04-09T13:33:17.790" Score="1" Body="&lt;p&gt;I don't know if their software can extend to AUVs, but the &lt;a href=&quot;http://mrsl.rice.edu/&quot; rel=&quot;nofollow&quot;&gt;Rice University Multi-Robot Systems Lab&lt;/a&gt; has done very advanced things with robot swarms.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-04-09T13:33:17.790" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6990" PostTypeId="1" CreationDate="2015-04-09T14:54:13.360" Score="2" ViewCount="363" Body="&lt;p&gt;First of all, I am in high school[to tell you that I am a newbie and lack knowledge]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I want to achieve for now is a thing that can differentiate between poly bags[polyethylene] and other stuffs. Or a thing that could detect polyethylene.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have to built a robot and therefore we have only a few method accessible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway any knowledge or suggestion or external links provided by you, about this topic would be welcomed by me.&lt;/p&gt;&#xA;" OwnerUserId="9467" LastActivityDate="2015-12-19T18:21:26.827" Title="Detect polyethylene" Tags="&lt;mobile-robot&gt;&lt;sensors&gt;" AnswerCount="3" CommentCount="15" ContentLicense="CC BY-SA 3.0" />
  <row Id="6991" PostTypeId="2" ParentId="6985" CreationDate="2015-04-09T17:48:26.617" Score="0" Body="&lt;p&gt;You could try this tutorial, you will need internet to download some packages. &lt;a href=&quot;http://www.instructables.com/id/Wireless-Arduino-Control-Using-the-BeagleBone-Blac/step2/Configuring-the-BBB-or-RPi-for-Bluetooth-Operation/&quot; rel=&quot;nofollow&quot;&gt;http://www.instructables.com/id/Wireless-Arduino-Control-Using-the-BeagleBone-Blac/step2/Configuring-the-BBB-or-RPi-for-Bluetooth-Operation/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="1653" LastActivityDate="2015-04-09T17:48:26.617" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="6992" PostTypeId="1" AcceptedAnswerId="6996" CreationDate="2015-04-09T22:05:35.707" Score="1" ViewCount="1105" Body="&lt;p&gt;I was looking for an implementation of a PID controller in Java and I found this one:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://code.google.com/p/frcteam443/source/browse/trunk/2010_Post_Season/Geisebot/src/freelancelibj/PIDController.java?r=17&quot; rel=&quot;nofollow&quot;&gt;https://code.google.com/p/frcteam443/source/browse/trunk/2010_Post_Season/Geisebot/src/freelancelibj/PIDController.java?r=17&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, for what I could understand about it I am using it this way:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;package lol.feedback;&#xA;&#xA;public class dsfdsf {&#xA;&#xA;    public static void main(String[] args) throws InterruptedException {&#xA;        final PIDController pidController = new PIDController(1, 1, 1);&#xA;        pidController.setInputRange(0, 200); // The input limits&#xA;        pidController.setOutputRange(50, 100); // The output limits&#xA;        pidController.setSetpoint(120); // My target value (PID should minimize the error between the input and this value)&#xA;        pidController.enable();&#xA;        double input = 0;&#xA;        double output = 0;&#xA;        while (true) {&#xA;            input = output + 30;&#xA;            pidController.getInput(input);&#xA;            output = pidController.performPID();&#xA;            System.out.println(&quot;Input: &quot; + input + &quot; | Output: &quot; + output + &quot; | Error: &quot; + pidController.getError());&#xA;&#xA;            Thread.sleep(1000);&#xA;        }&#xA;    }&#xA;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But he never stabilizes. He doesn't behave like a PID at all... This is the output I get:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Input: 30.0 | Output: 100.0 | Error: 90.0&#xA;Input: 130.0 | Output: 50.0 | Error: -10.0&#xA;Input: 80.0 | Output: 100.0 | Error: 40.0&#xA;Input: 130.0 | Output: 50.0 | Error: -10.0&#xA;Input: 80.0 | Output: 100.0 | Error: 40.0&#xA;Input: 130.0 | Output: 50.0 | Error: -10.0&#xA;Input: 80.0 | Output: 100.0 | Error: 40.0&#xA;Input: 130.0 | Output: 50.0 | Error: -10.0&#xA;Input: 80.0 | Output: 100.0 | Error: 40.0&#xA;Input: 130.0 | Output: 50.0 | Error: -10.0&#xA;Input: 80.0 | Output: 100.0 | Error: 40.0&#xA;Input: 130.0 | Output: 50.0 | Error: -10.0&#xA;Input: 80.0 | Output: 100.0 | Error: 40.0&#xA;Input: 130.0 | Output: 50.0 | Error: -10.0&#xA;Input: 80.0 | Output: 100.0 | Error: 40.0&#xA;Input: 130.0 | Output: 50.0 | Error: -10.0&#xA;Input: 80.0 | Output: 100.0 | Error: 40.0&#xA;Input: 130.0 | Output: 50.0 | Error: -10.0&#xA;Input: 80.0 | Output: 100.0 | Error: 40.0&#xA;Input: 130.0 | Output: 50.0 | Error: -10.0&#xA;Input: 80.0 | Output: 100.0 | Error: 40.0&#xA;Input: 130.0 | Output: 50.0 | Error: -10.0&#xA;Input: 80.0 | Output: 100.0 | Error: 40.0&#xA;Input: 130.0 | Output: 50.0 | Error: -10.0&#xA;Input: 80.0 | Output: 100.0 | Error: 40.0&#xA;Input: 130.0 | Output: 50.0 | Error: -10.0&#xA;Input: 80.0 | Output: 100.0 | Error: 40.0&#xA;Input: 130.0 | Output: 50.0 | Error: -10.0&#xA;Input: 80.0 | Output: 100.0 | Error: 40.0&#xA;Input: 130.0 | Output: 50.0 | Error: -10.0&#xA;Input: 80.0 | Output: 100.0 | Error: 40.0&#xA;Input: 130.0 | Output: 50.0 | Error: -10.0&#xA;Input: 80.0 | Output: 100.0 | Error: 40.0&#xA;Input: 130.0 | Output: 50.0 | Error: -10.0&#xA;Input: 80.0 | Output: 100.0 | Error: 40.0&#xA;Input: 130.0 | Output: 50.0 | Error: -10.0&#xA;Input: 80.0 | Output: 100.0 | Error: 40.0&#xA;Input: 130.0 | Output: 50.0 | Error: -10.0&#xA;Input: 80.0 | Output: 100.0 | Error: 40.0&#xA;Input: 130.0 | Output: 50.0 | Error: -10.0&#xA;Input: 80.0 | Output: 100.0 | Error: 40.0&#xA;Input: 130.0 | Output: 50.0 | Error: -10.0&#xA;Input: 80.0 | Output: 100.0 | Error: 40.0&#xA;Input: 130.0 | Output: 50.0 | Error: -10.0&#xA;Input: 80.0 | Output: 100.0 | Error: 40.0&#xA;Input: 130.0 | Output: 50.0 | Error: -10.0&#xA;Input: 80.0 | Output: 100.0 | Error: 40.0&#xA;Input: 130.0 | Output: 50.0 | Error: -10.0&#xA;Input: 80.0 | Output: 100.0 | Error: 40.0&#xA;Input: 130.0 | Output: 50.0 | Error: -10.0&#xA;Input: 80.0 | Output: 100.0 | Error: 40.0&#xA;Input: 130.0 | Output: 50.0 | Error: -10.0&#xA;Input: 80.0 | Output: 100.0 | Error: 40.0&#xA;Input: 130.0 | Output: 50.0 | Error: -10.0&#xA;Input: 80.0 | Output: 100.0 | Error: 40.0&#xA;Input: 130.0 | Output: 50.0 | Error: -10.0&#xA;Input: 80.0 | Output: 100.0 | Error: 40.0&#xA;Input: 130.0 | Output: 50.0 | Error: -10.0&#xA;Input: 80.0 | Output: 100.0 | Error: 40.0&#xA;Input: 130.0 | Output: 50.0 | Error: -10.0&#xA;Input: 80.0 | Output: 100.0 | Error: 40.0&#xA;Input: 130.0 | Output: 50.0 | Error: -10.0&#xA;Input: 80.0 | Output: 100.0 | Error: 40.0&#xA;Input: 130.0 | Output: 50.0 | Error: -10.0&#xA;Input: 80.0 | Output: 100.0 | Error: 40.0&#xA;Input: 130.0 | Output: 50.0 | Error: -10.0&#xA;Input: 80.0 | Output: 100.0 | Error: 40.0&#xA;Input: 130.0 | Output: 50.0 | Error: -10.0&#xA;Input: 80.0 | Output: 100.0 | Error: 40.0&#xA;Input: 130.0 | Output: 50.0 | Error: -10.0&#xA;Input: 80.0 | Output: 100.0 | Error: 40.0&#xA;Input: 130.0 | Output: 50.0 | Error: -10.0&#xA;Input: 80.0 | Output: 100.0 | Error: 40.0&#xA;Input: 130.0 | Output: 50.0 | Error: -10.0&#xA;Input: 80.0 | Output: 100.0 | Error: 40.0&#xA;Input: 130.0 | Output: 50.0 | Error: -10.0&#xA;Input: 80.0 | Output: 100.0 | Error: 40.0&#xA;Input: 130.0 | Output: 50.0 | Error: -10.0&#xA;Input: 80.0 | Output: 100.0 | Error: 40.0&#xA;Input: 130.0 | Output: 50.0 | Error: -10.0&#xA;Input: 80.0 | Output: 100.0 | Error: 40.0&#xA;Input: 130.0 | Output: 50.0 | Error: -10.0&#xA;Input: 80.0 | Output: 100.0 | Error: 40.0&#xA;Input: 130.0 | Output: 50.0 | Error: -10.0&#xA;Input: 80.0 | Output: 100.0 | Error: 40.0&#xA;Input: 130.0 | Output: 50.0 | Error: -10.0&#xA;Input: 80.0 | Output: 100.0 | Error: 40.0&#xA;Input: 130.0 | Output: 50.0 | Error: -10.0&#xA;Input: 80.0 | Output: 100.0 | Error: 40.0&#xA;Input: 130.0 | Output: 50.0 | Error: -10.0&#xA;Input: 80.0 | Output: 100.0 | Error: 40.0&#xA;Input: 130.0 | Output: 50.0 | Error: -10.0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Can someone help me tell me what I am missing?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you!&lt;/p&gt;&#xA;" OwnerUserId="9469" LastActivityDate="2015-04-10T21:23:22.133" Title="My PID Controller in Java is not operating correctly" Tags="&lt;control&gt;&lt;pid&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6993" PostTypeId="2" ParentId="6985" CreationDate="2015-04-10T02:17:06.863" Score="1" Body="&lt;p&gt;The actual problem turned out to be that my BeagleBone Black is flawed/damaged. I plugged the Bluetooth Adapter into a plain new BeagleBone Black before powering it, and the Bluetooth Adapter is recognized! Not only does &lt;code&gt;lsusb&lt;/code&gt; prints out the adapter info, but also &lt;code&gt;lsusb -v&lt;/code&gt; does not hang at all. The overall performance of the new board (boot time, compilation time, execution time) is also several times better. I suspect that it was due to the various improper power-off. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case anyone is just as careless, the BeagleBone Black &lt;strong&gt;SHALL&lt;/strong&gt; be powered off by:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Holding down the power button for about 8 seconds then releasing it.&lt;/li&gt;&#xA;&lt;li&gt;Using &lt;code&gt;halt&lt;/code&gt; or &lt;code&gt;shutdown -h now&lt;/code&gt; command in the Userspace.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="9463" LastActivityDate="2015-04-10T02:17:06.863" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6994" PostTypeId="2" ParentId="6918" CreationDate="2015-04-10T12:52:33.407" Score="0" Body="&lt;p&gt;I basically did an application using a very similar, if not identical, robot of this type for my Masters Thesis.   I don't know if it will be of any assistance however here is the link. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://repository.lib.ncsu.edu/ir/bitstream/1840.16/1331/2/etd.pdf&quot; rel=&quot;nofollow&quot;&gt;http://repository.lib.ncsu.edu/ir/bitstream/1840.16/1331/2/etd.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9474" LastActivityDate="2015-04-10T12:52:33.407" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6995" PostTypeId="2" ParentId="6992" CreationDate="2015-04-10T13:01:36.450" Score="1" Body="&lt;p&gt;If a PID loop isn't properly &quot;tuned&quot; then it can result in oscillatory behavior similar to what you are seeing after the first few initial iterations. What I would try first is to change the input value only once (ie pull it out of the while loop) and then see what you get. Doing this would basically be applying what is called a Step input to your system to see how it responds. Since the input does not change after the initial &quot;step&quot;, the resulting output over time allows you to easily determine if your tuning is damped, critically damped, or overdamped. &lt;/p&gt;&#xA;" OwnerUserId="9474" LastActivityDate="2015-04-10T13:01:36.450" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6996" PostTypeId="2" ParentId="6992" CreationDate="2015-04-10T21:23:22.133" Score="3" Body="&lt;p&gt;You have a few problems that I see.  The biggest problem is that your values for P, I, and D and too aggressive.  This is making the PID loop oscillate from hard stop to hard stop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You generally want to take a cautious approach to tuning a PID loop.  Since PID control is feedback based, it is pretty easy to get a positive feedback loop which makes the system diverge.  My preferred approach to tuning is to start with tuning P leaving I and D at 0.0.  With the way your system is defined, a P value of 1.0 will try to remove all the error in a single time step.  I would start with a lower P value and increase it until the system responds quickly without much overshoot.  You might start with 0.1 and increase in small steps until you find something reasonable.  Note, that using the P value alone, you will always have some residual error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After tuning the P value, I would move onto the I value.  The purpose of the I value is to reduce steady state error.  It does this by responding to the accumulation of error over time.  If the steady state error is acceptable, it is possible to not use the I term at all.  Because it is integrating the error over time, it is more powerful than the P value and you will need a smaller constant.  You might start with a value of 0.01 and try increasing it from there.  You should be able to remove the steady state error with just P and I.  Increasing the value of I will add momentum to your system and will tend to increase overshoot.  The implementation you are using calculates the integral error with a simple integration, so the value of I you need will depend on your update rate for an actual physical system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After tuning P and I, then I would move onto D.  The purpose of the D term is to reduce overshoot.  It does this by predicting future reduction in error based on estimating the derivative of the error.  The derivative of the error can be a noisy estimate on some systems, so keep that in mind if you use D.  The value you need for D will depend on the values you are using for P and I.  The implementation you are using calculates the D term based on a simple difference, so the constant you need will also depend on your integration rate for an actual physical system.  Using some D might allow you to be more aggressive with your usage of P and I.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You have some other problems as well.  Your output range is pretty tight around the desired output.  Ideally your input would be 120 which implies your ideal output would be 90.  The value 90 is near the edge of your allowed output range of [50,100].  This is going to make it a bit more difficult on the PID controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The implementation you are using has a bug in the integral error integration.  Integral error has a problem that it can accumulate without bound over time in some situations.  This integral windup can cause very unintuitive outputs from PID systems.  For this reason, all practical PID systems limit the magnitude of the integral error.  The calculation used in the implementation only really works for outputs near 0 I think.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The implementation has:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/* Integrate the errors as long as the upcoming integrator does&#xA;   not exceed the minimum and maximum output thresholds */&#xA;if (((m_totalError + m_error) * m_I &amp;lt; m_maximumOutput) &amp;amp;&amp;amp;&#xA;    ((m_totalError + m_error) * m_I &amp;gt; m_minimumOutput)) {&#xA;    m_totalError += m_error;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;but I think this should be:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/* Integrate the errors as long as the upcoming integrator does&#xA;   not exceed the minimum and maximum output thresholds */&#xA;/* What the output would be if integral error is updated */&#xA;double outputWithI = (m_P * m_error + m_I * (m_totalError + m_error) + m_D * (m_error - m_prevError));&#xA;if ((outputWithI &amp;lt; m_maximumOutput) &amp;amp;&amp;amp;&#xA;    (outputWithI &amp;gt; m_minimumOutput)) {&#xA;    m_totalError += m_error;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The problem with the original implementation is that if the integral term alone doesn't get the output into the correct range then the error isn't integrated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A common alternative approach is to directly limit the magnitude of m_totalError and therefore the total contribution of the I term.  An implementation along these lines might look something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;m_totalError += m_error;&#xA;if (m_totalError &amp;lt; -m_maxTotalErrorMagnitude) {&#xA;    m_totalError = -m_maxTotalErrorMagnitude;&#xA;} else if (m_totalError &amp;gt; m_maxTotalErrorMagnitude) {&#xA;    m_totalError = m_maxTotalErrorMagnitude;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I'm more used to seeing this solution used, although I think either should work.&lt;/p&gt;&#xA;" OwnerUserId="9373" LastActivityDate="2015-04-10T21:23:22.133" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="6997" PostTypeId="2" ParentId="6982" CreationDate="2015-04-10T23:52:55.627" Score="1" Body="&lt;p&gt;I think you have a number of errors:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your R matrix is the covariance of the measurement.  You are using a diagonal matrix which is fine.  The elements along the diagonal should be the variance of each input variable.  It looks like you are passing a deviation instead.  You would need to square those values to turn them into variances.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your Jacobians look wrong.  The matrix terms should be the derivatives of the measurement variables with respect to the state variables.  Your measurement variables are range and bearing, not x and y.  You should end up with some trig functions in your Jacobian matrix due to the rotation of the robot.  The bearings are measured relative to the heading of the robot so you should have a rotation in the measurement function to cancel the rotation of the robot.  The Jacobian for the landmark variables is also more complex as q is not static with changes in self.X.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I looked some more at your Jacobians.  I actually think they are pretty close.  The J[1][2] term should just be -1.0 I think which it sounds like you have already fixed.  I think you might have a sign error in JH[0][0] and JH[0][1].  I was coming up with the negative of the expression you have.  I find calculating the derivatives for the Jacobians to be error prone as I have trouble seeing my own errors for any mistakes I make.  I always try to test my Jacobians with a small test function to make sure I did it right.  This is very easy to do by comparing the analytical Jacobian versus numerical derivatives.  You can trivially calculate the numerical derivatives via (f(x+dx) - f(x))/dx for an appropriate delta dx doing each input variable separately.  Appropriate here means small enough to be a local value and large enough to not run into numerical error.&lt;/p&gt;&#xA;" OwnerUserId="9373" LastEditorUserId="9373" LastEditDate="2015-04-15T17:23:15.020" LastActivityDate="2015-04-15T17:23:15.020" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="6998" PostTypeId="2" ParentId="6957" CreationDate="2015-04-11T00:15:34.507" Score="1" Body="&lt;p&gt;It could be a number of things.  You are clearly in a positive feedback loop.  You can see this with the way the amplitude of the oscillation increases with time in your video.  The most likely problem is that your gain is too high.  You should be able to get flight that doesn't crash quickly with just P control.  I would start with zero I and D and a low P value, then ramp up P value to get reasonable responsiveness without too much overshoot, then increase I to remove steady state error, and throw in a little D if necessary to reduce overshoot.  You probably won't even need D if you back off the aggressiveness of P and I.  Measuring the derivative of the error can also have a lot of noise in it.&lt;/p&gt;&#xA;" OwnerUserId="9373" LastActivityDate="2015-04-11T00:15:34.507" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="6999" PostTypeId="1" AcceptedAnswerId="7000" CreationDate="2015-04-11T02:54:17.493" Score="3" ViewCount="560" Body="&lt;p&gt;Quadcopter frames seem to consistently follow the same X design. For example:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/IpaTl.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/IpaTlm.png&quot; alt=&quot;Quadcopter X Frame&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm curious to know why that is. It certainly seems like the most efficient way to use space but is it the only frame design that would work for quadcopters?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For instance, would a design like this work?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/cMDxM.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/cMDxMm.png&quot; alt=&quot;Quadcopter O Frame&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why or why not?&lt;/p&gt;&#xA;" OwnerUserId="9481" LastEditorUserId="350" LastEditDate="2015-04-15T16:53:17.280" LastActivityDate="2015-05-29T22:34:02.757" Title="Quadcopter frame design" Tags="&lt;quadcopter&gt;&lt;design&gt;&lt;frame&gt;" AnswerCount="5" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7000" PostTypeId="2" ParentId="6999" CreationDate="2015-04-11T04:55:15.130" Score="4" Body="&lt;p&gt;A frame in that configuration or any other witch holds the props in a square without being unbalanced would work, the reason that most people do it with cross bars is because the FC batteries and ESCs must go somewhere. For your proposed solution you would have to balance all of that equipment around the ring running power and control lines all around possible causing interference and inefficiencies. Not to say it doesn't or couldn't work, but it will not be ideal. &lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2015-04-11T04:55:15.130" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7002" PostTypeId="1" AcceptedAnswerId="7103" CreationDate="2015-04-11T17:32:14.280" Score="1" ViewCount="152" Body="&lt;p&gt;I want to submit my gains for the PID regulator via MAVLink. &#xA;Unfortunately, I am not very used to MAVLink and there are several functions which may be used for that purpose (I think). My string is currently JSON formatted and I was directly sending it to the serial port before. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a straight forward way to submit the data like it is (see below) with MAVLink, or is it better not to transfer a JSON string with MAVLink and submit each single value? If yes, what is the function of choice. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So far I noticed that for most of the sensors, there are already MAVLink function defined. For the PID gains I found not so much.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;AP_HAL::UARTDriver *pOut = uartX == UART_C ? hal.uartC : hal.uartA;&#xA;pOut-&amp;gt;printf( &quot;{\&quot;t\&quot;:\&quot;pid_cnf\&quot;,&quot;&#xA;              &quot;\&quot;p_rkp\&quot;:%.2f,\&quot;p_rki\&quot;:%.2f,\&quot;p_rkd\&quot;:%.4f,\&quot;p_rimax\&quot;:%.2f,&quot;&#xA;              &quot;\&quot;r_rkp\&quot;:%.2f,\&quot;r_rki\&quot;:%.2f,\&quot;r_rkd\&quot;:%.4f,\&quot;r_rimax\&quot;:%.2f,&quot;&#xA;              &quot;\&quot;y_rkp\&quot;:%.2f,\&quot;y_rki\&quot;:%.2f,\&quot;y_rkd\&quot;:%.4f,\&quot;y_rimax\&quot;:%.2f,&quot;&#xA;              &quot;\&quot;p_skp\&quot;:%.2f,\&quot;r_skp\&quot;:%.2f,\&quot;y_skp\&quot;:%.4f}\n&quot;,&#xA;              static_cast&amp;lt;double&amp;gt;(pit_rkp), static_cast&amp;lt;double&amp;gt;(pit_rki), static_cast&amp;lt;double&amp;gt;(pit_rkd), static_cast&amp;lt;double&amp;gt;(pit_rimax),&#xA;              static_cast&amp;lt;double&amp;gt;(rol_rkp), static_cast&amp;lt;double&amp;gt;(rol_rki), static_cast&amp;lt;double&amp;gt;(rol_rkd), static_cast&amp;lt;double&amp;gt;(rol_rimax),&#xA;              static_cast&amp;lt;double&amp;gt;(yaw_rkp), static_cast&amp;lt;double&amp;gt;(yaw_rki), static_cast&amp;lt;double&amp;gt;(yaw_rkd), static_cast&amp;lt;double&amp;gt;(yaw_rimax),&#xA;              static_cast&amp;lt;double&amp;gt;(pit_skp), static_cast&amp;lt;double&amp;gt;(rol_skp), static_cast&amp;lt;double&amp;gt;(yaw_skp) );&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="4080" LastEditorUserId="4080" LastEditDate="2015-04-11T21:01:34.957" LastActivityDate="2015-09-22T17:40:23.263" Title="Easiest way to submit a longer non standard character string via MAVLink" Tags="&lt;c++&gt;&lt;mavlink&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7003" PostTypeId="2" ParentId="6953" CreationDate="2015-04-11T17:55:55.383" Score="2" Body="&lt;p&gt;First you need to integrate the output from the gyro to get the actual X, Y and Z angles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;angleX = gyroAngleX + gyroInputX&#xA;angleY = gyroAngleY + gyroInputY&#xA;&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However this value will drift over time so you will need to use a complementary filter or kalman filter. Personally, I would recommend a complementary filter because it is much simpler to implement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First you must find the angle from the accelerometer using a little bit of trigonometry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;accelAngleX = atan2(accelY, accelZ) * 180/M_PI;&#xA;accelAngleY = atan2(-accelX, sqrt(accelY*accelY + accelZ*accelZ)) * 180/M_PI;&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then get the actual angle using this formula.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;angleX = 0.98*angleX + 0.02*accelAngleX&#xA;angleY = 0.98*angleY + 0.02*accelAngleY&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The variables above must be the same variables used when calculating the gyro angle. The &lt;code&gt;0.98&lt;/code&gt; and &lt;code&gt;0.02&lt;/code&gt; can be tuned to get the best output, but they should always add up to one.&lt;/p&gt;&#xA;" OwnerUserId="9220" LastEditorUserId="9220" LastEditDate="2015-04-11T18:01:34.040" LastActivityDate="2015-04-11T18:01:34.040" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7004" PostTypeId="1" AcceptedAnswerId="7006" CreationDate="2015-04-12T00:18:48.990" Score="1" ViewCount="2932" Body="&lt;p&gt;The dominant approach for solving ODE in control systems books is &lt;code&gt;ode45&lt;/code&gt; since the majority of these books use Matlab. I'm not acquainted with how the &lt;code&gt;ode45&lt;/code&gt; works but lately I started reading about Euler's method in this book &lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/0073401064&quot; rel=&quot;nofollow noreferrer&quot;&gt;Numerical Methods for Engineers&lt;/a&gt;. If the step size is very small, then the results are satisfactory. For simulation, one can actually set the step size to be very small value. I've used &lt;code&gt;ode45&lt;/code&gt; in &lt;a href=&quot;https://robotics.stackexchange.com/questions/6859/how-to-implement-tracking-problem-with-pid-controller/6867?noredirect=1#comment9843_6867&quot;&gt;here&lt;/a&gt; for regulation and tracking problems. I faced some difficulties for using &lt;code&gt;ode45&lt;/code&gt; for tracking problem since the step size is not fixed. Now for the same experiment, I've used the Euler's method with step size 0.001 sec. The results are amazing and so friendly in comparison with &lt;code&gt;ode45&lt;/code&gt;. This is a snapshot from the result &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/J5nLD.png&quot; alt=&quot;enter image description here&quot;&gt;   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And this is the code &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;clear all;&#xA;clc;&#xA;&#xA;dt = 0.001;&#xA; t = 0;&#xA;&#xA;% initial values of the system&#xA; a = 0; % angular displacement&#xA;da = 0; % angular velocity &#xA;&#xA;% PID tuning&#xA;Kp = 50;&#xA;Kd = 18.0;&#xA;Ki = 0.08;&#xA;&#xA;error  = 0;&#xA;&#xA;%System Parameters:&#xA;m = 0.5;       % mass (Kg)&#xA;d = 0.0023e-6; % viscous friction coefficient&#xA;L = 1;         % arm length (m)&#xA;I = 1/3*m*L^2; % inertia seen at the rotation axis. (Kg.m^2)&#xA;g = 9.81;      % acceleration due to gravity m/s^2&#xA;&#xA;% Generate Desired Trajectory &#xA;y = 0:dt:(3*pi)/2;&#xA;AngDes = y; % Ang: angle , Des: desired&#xA;AngDesPrev = 0;&#xA;&#xA;for i = 1:numel(y)&#xA;&#xA;   % get the first derviative of the desired angle using Euler method.&#xA;   dAngDes  =  ( AngDes(i) - AngDesPrev )/ dt;&#xA;   AngDesPrev = AngDes(i);&#xA;&#xA;   % torque input&#xA;   u = Kp*( AngDes(i) - a ) + Kd*( dAngDes - da ) + Ki*error;&#xA;   % accumulated error&#xA;   error = error + ( AngDes(i) - a );&#xA;&#xA;   %store the erro&#xA;   E(i) = ( a - AngDes(i) );&#xA;   T(i) = t;&#xA;&#xA;&#xA;   dda = 1/I*(u - d*da - m*g*L*sin(a));&#xA;&#xA;   % get the function and its first dervative&#xA;   da = da + dda*dt;&#xA;    a = a  +  da*dt;&#xA;&#xA;   %store data for furhter investigation &#xA;   A(i) = a;&#xA;   dA(i) = da;&#xA;&#xA;   t = t + dt; &#xA;&#xA;end&#xA;&#xA;plot(T, AngDes, 'b', T, A, 'g', 'LineWidth', 1.0)&#xA;h = legend('$\theta_{d}(t)$', '$\theta(t)$');&#xA;set(h, 'Interpreter','LaTex')&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;My question is why &lt;code&gt;ode45&lt;/code&gt; is preferred in many control books assuming the step size is very small. &lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2015-04-13T15:08:20.183" Title="Euler’s Method Or ode45 for solving ODE for control systems" Tags="&lt;control&gt;" AnswerCount="1" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7005" PostTypeId="2" ParentId="6969" CreationDate="2015-04-12T03:27:29.677" Score="1" Body="&lt;p&gt;There are plenty of solutions for underwater communication. Here is an example - &lt;a href=&quot;http://www.dspcomm.com/products_aquacomm.html&quot; rel=&quot;nofollow&quot;&gt;http://www.dspcomm.com/products_aquacomm.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can also make one using underwater radios that divers use to communicate. Perhaps coupling a pair of them with a voice modem to keep them in the right frequency range might do the trick. Here is an example of a diver comm &lt;a href=&quot;http://www.scuba.com/US/scuba-gear-168/131893/Ocean-Reef-GSM-G.divers-Wireless-Diver-Communication-Unit.html?gclid=CjwKEAjwjKOpBRChjsTyicbFy3QSJADP1gTNEDQ5dheaIjcUQWq4ouOJgy7uYA8azzrWg5KCf6PPrhoCrRbw_wcB&quot; rel=&quot;nofollow&quot;&gt;http://www.scuba.com/US/scuba-gear-168/131893/Ocean-Reef-GSM-G.divers-Wireless-Diver-Communication-Unit.html?gclid=CjwKEAjwjKOpBRChjsTyicbFy3QSJADP1gTNEDQ5dheaIjcUQWq4ouOJgy7uYA8azzrWg5KCf6PPrhoCrRbw_wcB&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of the problems you may encounter when designing or choosing a system is that high frequency which is necessary for high bandwidth communication is more prone to attenuation in water especially salt water. You maybe limited to some few hundred feet range with Ghz range. There are acoustic modems that use sonic waves to communicate which have longer range but do not have a decent bandwidth. &lt;/p&gt;&#xA;" OwnerUserId="9311" LastActivityDate="2015-04-12T03:27:29.677" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7006" PostTypeId="2" ParentId="7004" CreationDate="2015-04-12T04:41:07.623" Score="3" Body="&lt;p&gt;Euler method is horrible for general ODE timestepping because it is globally only first order accurate.  This means that to decrease the error by a factor of 1/2, you'll need to decrease the timestep by half.  Effectively, this also means that you'll need twice as many timesteps to improve your accuracy at the same final timestep.  Furthermore, the error tends to increase quite dramatically as you take more and more timesteps.  This is especially true for more complex systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The system you posted in your code appears to be very well behaved; no extreme oscillations or sharp changes in the gradient of the solution.  It doesn't surprise me that euler and runge-kutta yield nearly the same solution in this case.  I caution you that this is generally not the case for most systems.  I highly discourage the use of forward euler method for general purpose ode timestepping.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Runge-Kutta (ode45) method is more popular because it is fourth order accurate globally (and fifth order locally, hence the numbers 45 in the name).  This means that if you decrease your timestep by 1/2, your error decreases by a factor of 1/16.  The extra accuracy you gain from the 4th order accuracy of runge-kutta far outweighs the extra computational cost.  This is especially true if you need adaptive timestepping, as @fibonatic suggests, because you may not need as many refinement steps if you use a higher order accurate method like runge-kutta.&lt;/p&gt;&#xA;" OwnerUserId="2295" LastEditorUserId="2295" LastEditDate="2015-04-13T15:08:20.183" LastActivityDate="2015-04-13T15:08:20.183" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7007" PostTypeId="2" ParentId="6999" CreationDate="2015-04-12T06:40:44.620" Score="0" Body="&lt;p&gt;As it has been said in other answers it would still work any other configurations. But the X is practical for several reasons:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;having a centre point adding the electronics, battery, etc. These add a lot of weight so it's better to have them in the centre, otherwise your quad will spend a lot of energy trying to remain horizontal.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;when adding a camera, the frame is not in the field of view.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;there is something cool about the X... ;-)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="2603" LastActivityDate="2015-04-12T06:40:44.620" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7008" PostTypeId="1" CreationDate="2015-04-12T16:15:51.493" Score="2" ViewCount="177" Body="&lt;p&gt;When choosing a battery for a robot, should you use a LiPo or LiFePo?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For LiFePo, the pros:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;can deliver higher sustained amps&lt;/li&gt;&#xA;&lt;li&gt;many are built to be drop-in replacements for lead-acid batteries and can use the same charger&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The cons:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;enormously expensive (about $1/watt*hour/kg)&lt;/li&gt;&#xA;&lt;li&gt;lower energy density than LiPo (around 110 watt*hour/kg)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;For LiPo batteries, the pros:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;cheaper (about $0.2/watt*hour/kg)&lt;/li&gt;&#xA;&lt;li&gt;over twice the energy density than LiFePo (around 250 watt*hour/kg)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The cons:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;more complicated and unsafe to charge (see videos of LiPos catching on fire)&lt;/li&gt;&#xA;&lt;li&gt;most can't safely deliver high amps&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Is there anything I'm missing? I see LiFePo batteries used on a lot of larger platforms, probably due to the higher continuous amp rating. I see Ebay flooded with tons of cheap high-capacity Chinese LiPos, but almost none of them have documentation, which probably means they're junk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When should I use LiFePo vs LiPo?&lt;/p&gt;&#xA;" OwnerUserId="740" LastEditorUserId="740" LastEditDate="2015-04-12T16:47:38.670" LastActivityDate="2015-04-12T17:11:08.080" Title="How to decide between LiPo or LiFePo for robot battery" Tags="&lt;battery&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7009" PostTypeId="2" ParentId="7008" CreationDate="2015-04-12T17:11:08.080" Score="3" Body="&lt;p&gt;Lots of robots safely use LiPo batteries, see almost all multicopter setups. There are plenty of batteries designed for the RC market that are capable of high sustained amperage, along with a plethora of pre-made chargers for LiPo batteries and plenty of options of chips designed to be integrated that do all of the charging logic for you as well. What applications are you targeting? It is true that LiPo batteries can be very dangerous if mishandled, but unless there is a pressing reason to use LiFe batteries I would not.&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2015-04-12T17:11:08.080" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7010" PostTypeId="2" ParentId="6508" CreationDate="2015-04-12T17:15:02.697" Score="1" Body="&lt;p&gt;The lowest cost options for stereo vision that I have used are the Nvidia K1 boards (around 200$), with integrated GPU that can be taken advantage of by the OpenCV GPU libraries I can get 30+ fps with 2 720p streams doing just stereo depth mapping.&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2015-04-12T17:15:02.697" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7011" PostTypeId="2" ParentId="4364" CreationDate="2015-04-13T07:06:09.163" Score="1" Body="&lt;p&gt;If the axes zi−1 and zi are parallel,A common method for choosing oi&#xA;is to choose the normal that passes through oi−1 as the xi axis; oi is then the&#xA;point at which this normal intersects zi. In this case, di would be equal to zero.&#xA;Once xi is fixed, yi is determined, as usual by the right hand rule. Since the&#xA;axes zi−1 and zi are parallel, i will be zero in this case.&lt;/p&gt;&#xA;" OwnerUserId="9490" LastActivityDate="2015-04-13T07:06:09.163" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7012" PostTypeId="1" AcceptedAnswerId="7037" CreationDate="2015-04-13T10:53:22.843" Score="2" ViewCount="876" Body="&lt;p&gt;I'm working in a project implementing a vision system. I'm a student and this is the first time I'm doing something like this, it has been a challenge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm using a controller (Netduino+2, .Net MicroFramework) and a camera (CmuCam5 - Pixy) and for now it's working well. I'm communicating with the robot(Fanuc M430iA) using Modbus, and aquiring the data from the camera using I2C. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, the next challenge is using 2 cameras to implement stereo vision and I'm not shure how to achieve that. I'm reading a lot about that and I understand the process and generally how it works, but I think my case is very specific.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My cameras detect the center of an object and give me the coordinates, so, I have that, and that's good. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What do you think it's the more reasonable approach?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(sorry for my english, let me know if I'm not being explicit, I'll edit the question if I see there's not enough information)&lt;/p&gt;&#xA;" OwnerUserId="9492" LastEditorUserId="9492" LastEditDate="2015-04-16T14:08:43.733" LastActivityDate="2015-04-16T15:50:13.660" Title="algorithm Simple Stereo Vision" Tags="&lt;microcontroller&gt;&lt;robotic-arm&gt;&lt;cameras&gt;&lt;stereo-vision&gt;" AnswerCount="3" CommentCount="10" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7013" PostTypeId="2" ParentId="7012" CreationDate="2015-04-13T12:15:57.797" Score="4" Body="&lt;p&gt;The first thing is to make sure that the cameras will get the coordinates of the object at the same time (I don't know if Pixy has a FREX or STROBE signal for synchronization), or that the object is not moving.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, have a look at OpenCV, it has a section on 3D calibration and reconstruction (i.e. find the depth of an object based on the coordinates of two pictures or frames, taken at the same time, from two different (known) angles).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you start with the 2D coordinates and not the whole image, I guess you will have to dig in and adapt the examples (especially for the calibration part), but it might be a good place to start with&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The official doc:&#xA;&lt;a href=&quot;http://docs.opencv.org/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html&quot; rel=&quot;nofollow&quot;&gt;http://docs.opencv.org/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other links worth checking:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://wiki.ros.org/camera_calibration/Tutorials/StereoCalibration&quot; rel=&quot;nofollow&quot;&gt;http://wiki.ros.org/camera_calibration/Tutorials/StereoCalibration&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9494" LastActivityDate="2015-04-13T12:15:57.797" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7014" PostTypeId="1" CreationDate="2015-04-13T20:48:06.597" Score="8" ViewCount="3129" Body="&lt;p&gt;I am a student who is currently working on a computer science project that will require soon computer vision and more specifically stereoscopy (for close depth detection). I am now looking for a great camera to do the job and I found several interesting options:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1- A custom built set of two cheap cameras (i.e. webcam);&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2- The old, classic, economic and proven Kinect;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3- Specialized stereo sensors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found a couple months ago this sensor: &lt;a href=&quot;https://duo3d.com/product/duo-mini-lv1&quot; rel=&quot;noreferrer&quot;&gt;https://duo3d.com/product/duo-mini-lv1&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tought it was interesting because it is small, stereoscopic and brand new (encouraging a fresh USA company). However, if we take apart the additional APIs that come with it, I just don't understand why you would buy this when a Kinect (or &quot;cheap&quot; cameras) are at least 4-5 times less expensive and still have great if not better specifications.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Same applies for this one: &lt;a href=&quot;http://www.ptgrey.com/bumblebee2-firewire-stereo-vision-camera-systems&quot; rel=&quot;noreferrer&quot;&gt;http://www.ptgrey.com/bumblebee2-firewire-stereo-vision-camera-systems&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can someone please explain to me why I would need such a device and if not, why they are needed for some?&lt;/p&gt;&#xA;" OwnerUserId="9497" LastEditorUserId="9497" LastEditDate="2015-04-15T15:41:31.570" LastActivityDate="2015-04-15T20:53:59.937" Title="What main factors/features explain the high price of most industrial computer vision hardware?" Tags="&lt;sensors&gt;&lt;computer-vision&gt;&lt;kinect&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7015" PostTypeId="2" ParentId="6508" CreationDate="2015-04-14T08:33:27.973" Score="1" Body="&lt;p&gt;I'm working in a project where I'm using a Netduino+2 and 2 Cameras (maybe it will be more than that), I'm working with I2C. I can connect all the cameras I want.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know if it is an option for you, because in my case I only need positions. The image processing is on the camera side.&lt;/p&gt;&#xA;" OwnerUserId="9492" LastActivityDate="2015-04-14T08:33:27.973" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7016" PostTypeId="1" AcceptedAnswerId="7041" CreationDate="2015-04-14T09:18:09.897" Score="4" ViewCount="156" Body="&lt;p&gt;I wonder is there any &lt;strong&gt;simple (can be computed in microcontroller level)&lt;/strong&gt; option which is suitable for &lt;strong&gt;3d object perception&lt;/strong&gt; (depth, position, pose or coordinate estimation) of flying robots except &lt;em&gt;LIDAR, stereovision, omnidirectional camera, laser scanner&lt;/em&gt; or any other machine vision based techniques &lt;/p&gt;&#xA;" OwnerUserId="9504" LastActivityDate="2015-04-20T21:44:53.600" Title="Simple way of 3d perception" Tags="&lt;mobile-robot&gt;&lt;sensors&gt;&lt;cameras&gt;&lt;stereo-vision&gt;&lt;lidar&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7017" PostTypeId="2" ParentId="6508" CreationDate="2015-04-14T17:04:16.283" Score="1" Body="&lt;p&gt;If you're working with the K1 and stereovision you might be interested by this &lt;a href=&quot;http://jetsonhacks.com/2015/03/25/stereolabs-zed-camera-3d-depth-sensing-gtc-2015/&quot; rel=&quot;nofollow&quot;&gt;http://jetsonhacks.com/2015/03/25/stereolabs-zed-camera-3d-depth-sensing-gtc-2015/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9506" LastActivityDate="2015-04-14T17:04:16.283" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7018" PostTypeId="1" CreationDate="2015-04-14T17:47:26.970" Score="3" ViewCount="573" Body="&lt;p&gt;My department recently purchased Irobot create 2. We want to recreate the code from the Csharp create 2 driving Tether program to use as a base for our intro to computer science course. Currently the code we are using to talk to the Irobot is &lt;a href=&quot;http://www.robotappstore.com/Knowledge-Base/How-to-program-Roomba-for-NET-developers/23.html&quot; rel=&quot;nofollow&quot;&gt;http://www.robotappstore.com/Knowledge-Base/How-to-program-Roomba-for-NET-developers/23.html&lt;/a&gt;. Not sure if the irobot is getting the commands as well as if the serial port is making a connection. We are using Visual Studio 2012 as the programming environment. Any recommendation and or input would be appreciated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you &lt;/p&gt;&#xA;" OwnerUserId="9508" LastEditorUserId="4377" LastEditDate="2015-05-20T06:12:07.070" LastActivityDate="2015-05-20T06:12:07.070" Title="Irobot create 2 C# connection" Tags="&lt;irobot-create&gt;&lt;roomba&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7019" PostTypeId="2" ParentId="2131" CreationDate="2015-04-15T01:36:32.057" Score="1" Body="&lt;p&gt;The EV3 Color Sensor will work great if you're using the Mindstorms platform, if not it will be a pain it uses a non standard connection style and a not quite standard I2C communication protocol. If you are using an arduino then I would recommend something like &lt;a href=&quot;https://www.sparkfun.com/products/12829&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt; from sparkfun which still uses the I2C bus but will be far easier to integrate into a project. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to use it you will have to profile the color of the lines you want to follow in the exact same conditions that you will use for your robot to get best results. &lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2015-04-15T01:36:32.057" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7020" PostTypeId="2" ParentId="6471" CreationDate="2015-04-15T01:45:17.440" Score="1" Body="&lt;p&gt;The APM has a I2C port on it &lt;a href=&quot;https://www.google.com/url?sa=i&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=images&amp;amp;cd=&amp;amp;cad=rja&amp;amp;uact=8&amp;amp;ved=0CAcQjRw&amp;amp;url=http%3A%2F%2Fcopter.ardupilot.com%2Fwiki%2Fcommon-autopilots%2Fcommon-apm25-and-26-overview%2F&amp;amp;ei=2sAtVYesOMXdoATlx4C4CQ&amp;amp;bvm=bv.90790515,d.cGU&amp;amp;psig=AFQjCNFWMgycMT3FAHOxS9se0XNRCX217A&amp;amp;ust=1429148249748417&quot; rel=&quot;nofollow&quot;&gt;(see here)&lt;/a&gt; &lt;a href=&quot;http://www.dronetrest.com/uploads/db5290/511/c71f4fc7e7f9c775.jpg&quot; rel=&quot;nofollow&quot;&gt;(pinout here)&lt;/a&gt; it operates at 3.3v so you will need a 5v to 3.3v level shifting board like the one sold &lt;a href=&quot;https://www.sparkfun.com/products/12009&quot; rel=&quot;nofollow&quot;&gt;by sparkfun&lt;/a&gt; however the HC-SR04 &lt;a href=&quot;http://www.micropik.com/PDF/HCSR04.pdf&quot; rel=&quot;nofollow&quot;&gt;(datasheet)&lt;/a&gt; does not use I2C, in order to use it over I2C you will need an additional microprocessor such as an arduino to read the data from it and send it to the APM. You could connect it up to the GPIO pins that are available and write some custom drivers for the rangefinder subroutine  but it would be much simpler to simply use a supported ultrasonic sensor &lt;a href=&quot;http://copter.ardupilot.com/wiki/common-optional-hardware/common-rangefinder-landingpage/&quot; rel=&quot;nofollow&quot;&gt;as described on the APM wiki&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2015-04-15T01:45:17.440" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7021" PostTypeId="2" ParentId="2692" CreationDate="2015-04-15T02:20:16.523" Score="1" Body="&lt;p&gt;The 3DR radios by default use 57600 baud, be sure that it is set properly on both the sending and receiving side, this has been the source of many problems for me.&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2015-04-15T02:20:16.523" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7022" PostTypeId="2" ParentId="6442" CreationDate="2015-04-15T02:28:08.777" Score="0" Body="&lt;p&gt;It looks like your PID is oscillating, have you tried turning down the P gains in your controllers? Most PIDs are tuned P first by turning all terms to zero and turning up the P to just above the point where it oscillates then for the I gain adjust it till it &quot;snaps&quot; into position, the D gain can be trickier  to get but you should start there. &lt;a href=&quot;http://blog.oscarliang.net/quadcopter-pid-explained-tuning/&quot; rel=&quot;nofollow&quot;&gt;Here&lt;/a&gt; is a good reference for tuning PIDs on a Multicopter.&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2015-04-15T02:28:08.777" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7023" PostTypeId="2" ParentId="7014" CreationDate="2015-04-15T02:41:23.713" Score="3" Body="&lt;p&gt;So the Kinect uses a set of IR points to determine depth, not true stereoscopy. the DUO M and the Bumbee both use two cameras to achieve this, I am not familiar enough with them to give a good comparison between them and the Kinect but I am familiar with a new product that I have been using for a little bit called the &lt;a href=&quot;https://www.stereolabs.com/&quot; rel=&quot;nofollow&quot;&gt;ZED&lt;/a&gt; It has a detection range of approximately 30M vs the Kinect's 1.2–3.5 m, the ZED can operate outdoors, the Kinect cannot due to it's IR based ranging. However the difference is that the ZED needs significant processing power to do the image processing at a reasonable rate, it uses the GPU functions in OpenCV to accomplish this, I am using it with an nvidia K1 board on a Quadcopter. The advantages I outlined with the ZED hold true for most dual camera stereoscopic  setups.&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2015-04-15T02:41:23.713" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7024" PostTypeId="1" CreationDate="2015-04-15T03:59:11.457" Score="1" ViewCount="519" Body="&lt;p&gt;am 2 weeks old to arduino projects..i had been using timing all this while to control my rover...now, i wanted to shift to using encoders..am facing quite some problems..am using arduino uno and a two amp motor shield..this is code i am trying to use..am using a 8V Li-po battery&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.myduino.com/index.php?route=product/product&amp;amp;product_id=170&amp;amp;search=rover+5&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.myduino.com/index.php?route=product/product&amp;amp;product_id=170&amp;amp;search=rover+5&lt;/a&gt; (link to rover)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.myduino.com/index.php?route=product/product&amp;amp;product_id=131&amp;amp;search=motor+shield&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.myduino.com/index.php?route=product/product&amp;amp;product_id=131&amp;amp;search=motor+shield&lt;/a&gt; (link to motoshield)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;my question is there are four pins coming out of encoders from each side...what i did was connected the red and black to 5V and GND respectively and the white and yellow of the first encoder to pin 2 and the white and yellow of second encoder to pin 3...is what am doing correct??&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and sometimes when i use this code, in the motorshield both the green and red light starts thereby stalling the motor..why does that happen?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;can anyone of you suggest a link to a simple encoder code to make the motors move forward in a straight using feedback..&lt;/p&gt;&#xA;&#xA;&lt;p&gt;thanks&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    // interupt 0 -&amp;gt; pin 2&#xA;    // interupt 1 -&amp;gt; pin 3&#xA;&#xA;    volatile unsigned long positionL = 0;  //vehicle position count from left encoder&#xA;    volatile unsigned long positionR = 0;  //vehicle position count from right encoder&#xA;&#xA;    int motorLa = 5;&#xA;    int dirLa = 4;&#xA;    int motorRa = 7;&#xA;    int dirRa = 6;&#xA;&#xA;    void setup(){&#xA;      pinMode (motorLa, OUTPUT);&#xA;      pinMode (dirLa, OUTPUT);&#xA;      pinMode (motorRa, OUTPUT);&#xA;      pinMode (dirRa, OUTPUT);&#xA;      Serial.begin(9600);&#xA;    }&#xA;&#xA;    void loop(){&#xA;      moveFWD(5300);&#xA;      delay(2000);&#xA;      moveREV(3000);&#xA;      delay(2000);&#xA;      while(1);&#xA;    }&#xA;&#xA;    void encoder1(){&#xA;      positionR++;&#xA;    }&#xA;&#xA;    void encoder2(){&#xA;      positionL++;&#xA;    }&#xA;&#xA;&#xA;void moveFWD(unsigned int x){&#xA;      positionL=0;&#xA;      positionR=0;&#xA;      attachInterrupt(0, encoder1, CHANGE);   &#xA;      attachInterrupt(1, encoder2, CHANGE);&#xA;      digitalWrite(dirLa, LOW); // Left a Forward &#xA;      digitalWrite(dirRa, HIGH); //Right a Forward          &#xA;      while((positionL &amp;lt;= x) || (positionR &amp;lt;= x)){&#xA;&#xA;        if (positionL &amp;gt; positionR){&#xA;          analogWrite(motorLa, 220);&#xA;          analogWrite(motorRa, 255);&#xA;          }  &#xA;&#xA;        else if (positionR &amp;gt; positionL){&#xA;          analogWrite(motorRa, 220);&#xA;          analogWrite(motorLa, 255); // Sets the motor speed at a value of 180            }&#xA;&#xA;        else {&#xA;          analogWrite(motorRa, 255);&#xA;          analogWrite(motorLa, 255); // Sets the motor speed at a value of 180            }        &#xA;&#xA;        Serial.print(positionL); // This prints the current value of positionL in the serial monitor on the computer.&#xA;        Serial.print(&quot;\t&quot;); // This creates a tab on the monitor &#xA;        Serial.print(positionR);&#xA;        Serial.println(); // This creates a new line to print on         &#xA;      }        &#xA;&#xA;      // Stop all motors&#xA;      analogWrite(motorLa, 0);&#xA;      analogWrite(motorRa, 0);&#xA;&#xA;      // Disables the encoders interrupt&#xA;      detachInterrupt(0);&#xA;      detachInterrupt(1);&#xA;    }&#xA;&#xA;void moveREV(unsigned int x){&#xA;      positionL=0;&#xA;      positionR=0;&#xA;      attachInterrupt(0, encoder1, CHANGE);   &#xA;      attachInterrupt(1, encoder2, CHANGE);&#xA;      digitalWrite(dirLa, HIGH); // Left a Forward &#xA;      digitalWrite(dirRa, LOW); //Right a Forward    &#xA;     while((positionL &amp;lt;= x) || (positionR &amp;lt;= x))&#xA;      {&#xA;&#xA;       if (positionL &amp;gt; positionR){&#xA;          analogWrite(motorLa, 20);&#xA;          analogWrite(motorRa, 200);&#xA;        }  &#xA;&#xA;      else if (positionR &amp;gt; positionL){&#xA;          analogWrite(motorRa, 20);&#xA;          analogWrite(motorLa, 200); // Sets the motor speed at a value of 180           }  &#xA;        else{&#xA;          analogWrite(motorLa, 200); // Sets the motor speed at a value of 180           analogWrite(motorRa, 200);&#xA;          }&#xA;       Serial.print(positionL); // This prints the current value of positionL in the serial monitor on the computer.&#xA;        Serial.print(&quot;\t&quot;); // This creates a tab on the monitor &#xA;        Serial.print(positionR);&#xA;        Serial.println(); // This creates a new line to print on  &#xA;        } &#xA;      // Stop all motors&#xA;      analogWrite(motorLa, 0);&#xA;      analogWrite(motorRa, 0);&#xA;&#xA;      // Disables the encoders interrupt&#xA;      detachInterrupt(0);&#xA;      detachInterrupt(1);&#xA;    }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="9435" LastEditorUserId="19021" LastEditDate="2018-01-05T10:45:49.610" LastActivityDate="2018-01-05T10:45:49.610" Title="ROVER 5 with 2 encoders help" Tags="&lt;arduino&gt;&lt;sensors&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7025" PostTypeId="2" ParentId="7014" CreationDate="2015-04-15T14:31:10.117" Score="2" Body="&lt;p&gt;As Mark Omo mentioned, the Kinect is a fundamentally different technology than a simple stereo pair.  There are also other technologies such as a &quot;standard&quot; time-of-flight cameras like the &lt;a href=&quot;http://www.mesa-imaging.ch/home/&quot; rel=&quot;nofollow&quot;&gt;Swiss Ranger&lt;/a&gt; and &lt;a href=&quot;http://www.pmdtec.com/&quot; rel=&quot;nofollow&quot;&gt;PMD&lt;/a&gt;, and infrared stereo with projected texture of the &lt;a href=&quot;http://click.intel.com/intel-realsense-developer-kit.html&quot; rel=&quot;nofollow&quot;&gt;Intel RealSense&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I believe each technology has its own strengths and weaknesses.  For example, standard stereo cameras typically can't get depth information on a single-color featureless plane (like a large wall).  But time-of-flight cameras have no issue with that.  However, time of flight cameras will have trouble with materials that absorb light (like very dark objects) or objects with other interesting optical properties (like snow).  Many optical based sensors will have trouble with clear and colored glass, so you may need to completely change domains and use a &lt;a href=&quot;http://www.chirpmicro.com/&quot; rel=&quot;nofollow&quot;&gt;3D ultrasonic sensor&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Furthermore, all sensors have min and max ranges, however active sensors (like the Kinect and time-of-flight cameras) will typically have smaller max ranges due to power requirements.  Whereas increasing the max range of a stereo pair is as easy as increasing the baseline.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you should pick your sensor based on your target application.  There is no one-size-fits-all 3D sensor.  &lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-04-15T14:31:10.117" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7026" PostTypeId="2" ParentId="6999" CreationDate="2015-04-15T17:07:40.907" Score="3" Body="&lt;p&gt;To answer your questions directly, the X-shape is not the only design that will work.  There are many variations of frame design around a number of rotors that can range from 3 to (in some cases) 8.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.personal-drones.net/wp-content/uploads/2013/10/SFC4410_ASSEMBLED.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/E5iCNm.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since it hasn't been mentioned in the other answers, I want to point out that perhaps the biggest reason for the X shape is to keep the weight in the center, &lt;a href=&quot;https://robotics.stackexchange.com/a/251/350&quot;&gt;which decreases the moment of inertia of the vehicle&lt;/a&gt; -- the vehicle will pitch and roll more easily in response to the thrust.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2015-04-15T17:07:40.907" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="7027" PostTypeId="2" ParentId="6822" CreationDate="2015-04-15T17:30:46.767" Score="1" Body="&lt;p&gt;The pulse you're talking about is &lt;a href=&quot;http://en.wikipedia.org/wiki/Pulse-position_modulation&quot; rel=&quot;nofollow&quot;&gt;pulse position modulation&lt;/a&gt;.  Whether this is being used to set the throttle speed of each of your motors (separately), or to convey some other meaning to your flight controller is unclear from your question (i.e. I'm not sure if the PPM signal is being evaluated as a &quot;desired forward thrust&quot; which is in turn being converted into separate motor signals). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In any case, the pitch angle will depend on the motor speeds (relative to each other) over time, and the motor speeds come from the flight controller (which may or may not be doing its own calculation) and the flight controller gets its data from your transmitter pulse. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you may not be able to log this by looking at your transmitter pulses.  I would instead look into an IMU to directly measure the pitch angles.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2015-04-15T17:30:46.767" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7028" PostTypeId="2" ParentId="6955" CreationDate="2015-04-15T17:40:26.033" Score="1" Body="&lt;p&gt;Without sensors or encoders, there is no way to know where you are.  Without timing, there is no way to guess how far you may have travelled.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Without sensors, encoders, or timing, it is impossible to do what you are asking.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2015-04-15T17:40:26.033" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7029" PostTypeId="2" ParentId="6826" CreationDate="2015-04-15T17:42:37.933" Score="3" Body="&lt;p&gt;&quot;Precision motors&quot; and &quot;planetary gear motors&quot; aren't really describing the same attribute of the motor.  It's like comparing &quot;fine-point pencils&quot; to &quot;red pencils&quot; -- they could be both fine-point and red, either fine-point or red, or neither.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Planetary gears are generally used to convert high RPM at low torque to low RPM at high torque.  Because each rotation of the motor shaft results in a very small movement of the gear system's output shaft, you could also say that planetary gears offer you very fine precision in the output.  It's unclear from these links whether that's the case (and it's possible that both of them are using planetary gears).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Perhaps &quot;precision&quot; is just being used a marketing term.  Are there specific requirements you have for your motors that aren't being shown in these listings?&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2015-04-15T17:42:37.933" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7030" PostTypeId="2" ParentId="7014" CreationDate="2015-04-15T20:53:59.937" Score="1" Body="&lt;p&gt;As others mentioned the Kinect is a different technology which has different trade offs.  Stereo performs better in sunlight than a Kinect and it is easier to adapt the range, particularly if longer range is desired.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason that the stereo modules are more expensive than a couple of web cams is because they are not the same thing.  The technology itself isn't that much more expensive, but it doesn't have the pricing from large commodity volumes.  For the stereo modules, they typically have global shutter cameras.  Almost all web cams are rolling shutter cameras.  The difference is that global shutter cameras expose every pixel at the same time.  Rolling shutter cameras capture each pixel line at different points in time.  Web cams tend to be very bad with motion, particular of the camera.  This doesn't work well for stereo if things are moving for many applications.  Typically people want to get a point cloud or similar from the stereo but if it is captured while the things are moving it won't be consistent.  Stereo modules also have synchronization of the camera captures.  If things are moving, it is important that both cameras capture the images at the same time.  In a lot of stereo modules, this is done by sending a pulse to both cameras to start each capture so that they happen at the same time.  Another factor is that for stereo to work, the cameras need to be in a known position relative to each other.  Typically this means that there is a rigid mount between the cameras that keeps the relative position fixed.  Then this relative position is calibrated.  For some stereo modules this is done at the factory.  This can also be done pretty easily with open source software tools, but if the cameras move relative to each other it has to be redone.  Finally, some stereo modules also have hardware acceleration to do the stereo calculations on the stereo module.  The cheapest alternative is to build your own with 2 global shutter cameras with appropriate lenses that support external triggering and put into your own rigid mount.  It isn't so easy to find the appropriate cheap parts to do this for less than the cost of the cheaper stereo modules.  If nothing is moving when the stereo ranging is desired, than cheaper technologies like web cams become viable again, but that is why the stereo modules cost more than a couple web cams (along with the low volumes needing to cover development expenses).&lt;/p&gt;&#xA;" OwnerUserId="9373" LastActivityDate="2015-04-15T20:53:59.937" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7031" PostTypeId="2" ParentId="6754" CreationDate="2015-04-16T09:47:43.473" Score="4" Body="&lt;p&gt;You can use the 'simplify' command , e.g : a=simplify(A*B) .This command is calculating some trigonometric functions thus making your expression shorter .&lt;/p&gt;&#xA;" OwnerUserId="9407" LastActivityDate="2015-04-16T09:47:43.473" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7033" PostTypeId="2" ParentId="7024" CreationDate="2015-04-16T15:25:23.663" Score="1" Body="&lt;p&gt;I believe your encoders provide incremental &lt;a href=&quot;http://en.wikipedia.org/wiki/Rotary_encoder#Incremental_rotary_encoder&quot; rel=&quot;nofollow&quot;&gt;quadrature&lt;/a&gt;.  Yes, red and black are probably power and ground, (but please consult your data sheet!) and the other two wires provide a pattern of square waves that indicate the direction of motion as well as an incremental count of distance traveled.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typically, microcontrollers provide a quadrature decoder in hardware so you can just read off the distance traveled as a number.  But it isn't too hard to write yourself.  However, you will need 4 interrupts and i believe the Arduino Uno only provides 2.  You could probably poll the I/O lines, as long as the quadrature pulses aren't too short or your code is too slow to keep up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you don't care about the direction.  For example if your gear-train is non-backdrivable.  You can simply use a single quadrature wire under the assumption that the motor is always spinning in the direction you commanded.  You should set up the ISR to trigger on a change.  then increment (or decrement) a variable for distance traveled.  You should probably also record the time so you can turn it into a speed.  Note that this is not a very good way of doing things because of &lt;a href=&quot;http://en.wikipedia.org/wiki/Switch#Contact_bounce&quot; rel=&quot;nofollow&quot;&gt;debouncing&lt;/a&gt;.  Think about if the encoder is right on the edge between two states, it will bounce back and forth between high and low.  Your code will assume each transition is some distance traveled, when in reality no motion occurred.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After you iron out all the encoder business, you need to implement speed control.  Basically, you want both motors to travel at the same measured speed.  I will only describe &lt;a href=&quot;http://en.wikipedia.org/wiki/Proportional_control&quot; rel=&quot;nofollow&quot;&gt;proportional control&lt;/a&gt;, but you may want to add the other terms.  Here is the gist of it:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  float error = target_speed - measured_speed;&#xA;  int control_value = (P * error) + last_control;&#xA;  last_control = control_value&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Note that &lt;code&gt;control_value&lt;/code&gt; is the PWM value to give to the motor.  So you should cap it appropriately.  &lt;code&gt;target_speed&lt;/code&gt; and &lt;code&gt;measured_speed&lt;/code&gt; are in the units of some speed, whatever makes sense for your system.  And &lt;code&gt;P&lt;/code&gt; is the gain.  &lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-04-16T15:25:23.663" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7034" PostTypeId="2" ParentId="7018" CreationDate="2015-04-16T15:27:51.917" Score="2" Body="&lt;p&gt;Please see the last page of the &lt;a href=&quot;http://www.irobot.com/~/media/MainSite/PDFs/About/STEM/Create/create_2_Open_Interface_Spec.pdf?la=en&quot; rel=&quot;nofollow&quot;&gt;Open Interface Spec&lt;/a&gt;.  There are some notable changes between the Create 2 and the old Create.  For example the default baud rate changed.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-04-16T15:27:51.917" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7035" PostTypeId="2" ParentId="6984" CreationDate="2015-04-16T15:37:18.100" Score="1" Body="&lt;p&gt;As Kamek said in a comment, all that needs to be done is to transform the coordinates of the sensor hits to the world frame.  For a 2D grid world, this shouldn't be too hard to do with a little trigonometry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You asked about the &quot;initial&quot; map.  Typically, the robot wakes up and knows nothing about the world or where it is.  So it starts in the middle of an empty map.  Make sure your map is large enough to accommodate your entire grid world even if the robot starts at the edge of the world.  (So if your grid world is (N x N), your map will be (2N x 2N).&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-04-16T15:37:18.100" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7036" PostTypeId="2" ParentId="7012" CreationDate="2015-04-16T15:49:36.147" Score="1" Body="&lt;p&gt;As @Kuzi said, look into OpenCV for the camera calibration and you'll need to either sync your cameras or make sure things aren't moving.  You will probably want to do the camera calibration connecting your sensor to a PC.  Once you get the calibration parameters, then you can use them on your microcontroller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To actually calculate the 3D position of the object, the following steps need to happen:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Get (x,y) position on real image for each camera&lt;/li&gt;&#xA;&lt;li&gt;Convert (x,y) position on real image to (x,y) position on ideal camera.  This uses the intrinsics camera calibration to compensate for lens distortion.  You will be running the distortion correction in reverse so you will probably need an iterative solution like Gauss-Newton&lt;/li&gt;&#xA;&lt;li&gt;Calculate ray through (x,y) position in ideal camera to get ray in camera reference frame.  This is just the ray originating at (0,0,0) and going through (x,y,1).&lt;/li&gt;&#xA;&lt;li&gt;Transform the ray from camera B into the reference frame for camera A using the extrinsics calibration which is just the transform between the cameras&lt;/li&gt;&#xA;&lt;li&gt;Find the intersection of the 2 rays.  Typically, the rays won't quite intersect because of noise.  That means you will actually be finding the location on each ray where the rays get the closest and then probably averaging them.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="9373" LastActivityDate="2015-04-16T15:49:36.147" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7037" PostTypeId="2" ParentId="7012" CreationDate="2015-04-16T15:50:13.660" Score="1" Body="&lt;p&gt;To further explain my comment, I've decided to turn it into an answer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using the law of sines to calculate distance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First mount the cameras on the robot parallel like this ---¦---   ---¦---&lt;/p&gt;&#xA;&#xA;&lt;p&gt;¦ is the lens. Mount them 100mm apart - measuring from the lenses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second find the viewing angle of your camera, in this case 75*.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Third get data from the camera: Cam1 : (50, 50); Cam2 : (10, 50);&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fourth (optional depending on the co-ordinate system used) Normalize the data (transform the co-ordinate system) to center the origin and re-map your co-ordinates.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fifth Calculate your degrees per division - take your viewing angle and the range of the supplied co-ordinate system and calculate how many degrees are represented per division.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sixth multiply this Degrees per division by each of your co-ordinate values. To get the degrees from center line to the object for each camera.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Seventh using the Law of Sines you can calculate the distance from each camera to the object using both of the angles you calculated plus the distance between the camera lenses. Optionally average them to get the distance from the camera mounting mid-point to the object.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are many optimizations that can be applied to this process, especially calibrating the camera lens but that's another question. I would say that errors do creep in and taking multiple readings and averaging the result can improve reliability.&lt;/p&gt;&#xA;" OwnerUserId="7185" LastActivityDate="2015-04-16T15:50:13.660" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7038" PostTypeId="2" ParentId="6979" CreationDate="2015-04-16T16:00:23.200" Score="1" Body="&lt;p&gt;This falls out of the basic equations of motion for a body under &lt;a href=&quot;http://en.wikipedia.org/wiki/Acceleration#Uniform_acceleration&quot; rel=&quot;nofollow&quot;&gt;constant acceleration&lt;/a&gt;.  The simplest thing is to start with this equation:&#xA;$$&#xA;v^2 = v_o^2 + 2ad&#xA;$$&#xA;Where we are starting at some velocity $v$, and decelerating at $a$ (or $\dot{v}$ in your equation) to a stop.  (So $v_o$ = 0).  The distance traveled, $d$, must be less than the distance to the obstacle, $dist(v,w)$.&lt;/p&gt;&#xA;" OwnerUserId="110" LastEditorUserId="110" LastEditDate="2015-04-17T13:39:24.550" LastActivityDate="2015-04-17T13:39:24.550" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7039" PostTypeId="2" ParentId="6862" CreationDate="2015-04-16T16:15:25.393" Score="1" Body="&lt;p&gt;Different encoders will attach to the motor or shaft differently.  Typically, the motor has a small shaft coming out the back of motor for this purpose.  And you buy the motor with the encoder already installed.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Actually, now i see you asked about a &lt;em&gt;brushless&lt;/em&gt; motor.  Typically, these have added hall effect sensors by the manufacturer.  Because you energize the 3 coils of the motor in a specific sequence to spin it, it is easy to use these hall effect sensors as an incremental encoder.  &lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-04-16T16:15:25.393" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7040" PostTypeId="1" CreationDate="2015-04-17T01:06:36.583" Score="3" ViewCount="1235" Body="&lt;p&gt;I would like to compare my results of visual Odometry with the groundtruth provided by the KITTI dataset.&#xA;For each frame in the groundthruth, i have a projection matrix.&#xA;For example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;1.000000e+00 9.043683e-12 2.326809e-11 1.110223e-16 9.043683e-12 1.000000e+00 2.392370e-10 2.220446e-16 2.326810e-11 2.392370e-10 9.999999e-01 -2.220446e-16&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Here the instructions provided by the readme:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Row i represents the i'th pose of the&#xA;  left camera coordinate system (i.e., z&#xA;  pointing forwards) via a 3x4&#xA;  transformation matrix. The matrices&#xA;  are stored in row aligned order (the&#xA;  first entries correspond to the first&#xA;  row), and take a point in the i'th&#xA;  coordinate system and project it into&#xA;  the first (=0th) coordinate system.&#xA;  Hence, the translational part (3x1&#xA;  vector of column 4) corresponds to the&#xA;  pose of the left camera coordinate&#xA;  system in the i'th frame with respect&#xA;  to the first (=0th) frame&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;But I don't know how to produce the same kind of data for me.&#xA;What I have for each frame in my case:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The Tf transformation from the init_camera (the fix one from the (0,0,0)) to the left camera which is moving. So I have the translation vector and the quaternion rotation.&lt;/li&gt;&#xA;&lt;li&gt;The odometry data: the pose and the twist&lt;/li&gt;&#xA;&lt;li&gt;Camera calibration parameters&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;With those data, How I compare with the groundtruth ? So I need to find the projection matrix from the data above but don't know how to do it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can someone help me ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank&lt;/p&gt;&#xA;" OwnerUserId="9522" LastEditorUserId="9522" LastEditDate="2015-04-17T05:55:36.647" LastActivityDate="2015-07-20T23:39:58.317" Title="How to get the projection matrix from odometry/tf data?" Tags="&lt;mobile-robot&gt;&lt;odometry&gt;&lt;stereo-vision&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7041" PostTypeId="2" ParentId="7016" CreationDate="2015-04-17T02:22:21.307" Score="3" Body="&lt;p&gt;The best answer is probably going to be an ultrasonic sensor on a servo, you can get them in a huge range of values, from very close to very far range depending on your application, and varying beam widths depending on your accuracy needs. If you need more than 255 steps you could go with a motor and a encoder but that will be slightly more complex. &lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2015-04-17T02:22:21.307" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7042" PostTypeId="2" ParentId="6987" CreationDate="2015-04-17T02:44:42.543" Score="2" Body="&lt;p&gt;The easiest way to calculate this will probably be by using the &lt;a href=&quot;http://www.ecalc.ch/helicalc.php?ecalc&amp;amp;lang=en&quot; rel=&quot;nofollow&quot;&gt;ecalc&lt;/a&gt; helicopter calculator, they have done all these calculations for you and take into account far more factors in my experience they are very accurate. I know that most props have a Prop Constant in the 1.1 to 1.3 range, but for your specific situation according to ecalc gives a thrust to weight ratio of 2.49:1 for a 190g helicopter giving &lt;a href=&quot;http://www.ecalc.ch/helicalc.php?ecalc&amp;amp;lang=en&amp;amp;cooling=medium&amp;amp;weight=190&amp;amp;calc=auw&amp;amp;elevation=500&amp;amp;airtemp=25&amp;amp;qnh=1013&amp;amp;batteries=lipo_450mah_-_65/100c&amp;amp;s=3&amp;amp;p=1&amp;amp;esc=0&amp;amp;esccont=15&amp;amp;escmax=20&amp;amp;escri=0.01&amp;amp;escweight=25&amp;amp;motor=turnigy&amp;amp;type=35%7Cxk2430-5800&amp;amp;rotor=normal&amp;amp;diameter=360&amp;amp;pitch=15.0&amp;amp;blades=2&amp;amp;rotorteeth=104&amp;amp;motorteeth=13&amp;amp;headspeed=0&quot; rel=&quot;nofollow&quot;&gt;283.1g&lt;/a&gt; of payload capacity or 473g of lift.&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2015-04-17T02:44:42.543" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7043" PostTypeId="1" AcceptedAnswerId="7046" CreationDate="2015-04-17T04:36:31.547" Score="1" ViewCount="619" Body="&lt;p&gt;I'm trying to implement two PIDs for stabilizing quadrotor for position tracking. The inputs are $x_{d}(t), y_{d}(t), z_{d}(t)$ and $\psi_{d}(t)$. For position tracking, usually the small angle assumption is assumed. This assumption allows for acquiring $\theta_{d}$ and $\phi_{d}$. These are the results &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/TOsgv.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The x-axis position is driving me crazy. After alot of attempts for tuning the PIDs, I felt something wrong is going on. Is this a normal behavior for PID controller? Also, what I've noticed is that once $\psi$ reaches to zero, the platform starts oscillating (after 1.5 second in the figure).   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For solving ODEs and computing the derivatives for the velocities, I use Euler methods. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;It is simulation in Matlab. &lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="2155" LastEditDate="2015-04-20T02:49:57.683" LastActivityDate="2015-04-23T15:46:37.800" Title="How to tune the two PIDs for quadrotor" Tags="&lt;pid&gt;&lt;quadcopter&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="7044" PostTypeId="2" ParentId="6586" CreationDate="2015-04-17T06:10:48.800" Score="2" Body="&lt;p&gt;I recently worked with DH parameters to define kinematics of my Dual Arm Robot. As per my knowledge and experience, for kinematics I can say that DH Param will be good to use it since that gives you exact location and orientation (provided the table you made is correct) of each link of the robot. I had to work for collision detection between both the arms of the robot. So using Forward Kinematics, I calculated Cartesian location of each joint and compared all joints of one arm to the other's. You can calculate it with matrix multiplication in a sequence starting from the base of the manipulator to the end. &#xA;At last, you will need to identify the Coordinate axes of Manipulator and the one in your analysis, and take values accordinngly.&#xA;Also, there is a freeware called &lt;strong&gt;&quot;&lt;a href=&quot;http://www.roboanalyzer.com/&quot; rel=&quot;nofollow&quot;&gt;Roboanalyzer&lt;/a&gt;&quot;&lt;/strong&gt; . Use that software, you will understand the application of DH parameters to calculate matrices. Though there are minor flaws, but it is awesome for basic understanding.&lt;br&gt;&#xA;Hope it will help you a bit.&lt;/p&gt;&#xA;" OwnerUserId="9328" LastActivityDate="2015-04-17T06:10:48.800" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7045" PostTypeId="2" ParentId="6620" CreationDate="2015-04-17T06:14:28.810" Score="4" Body="&lt;p&gt;Use &lt;strong&gt;&lt;a href=&quot;http://www.roboanalyzer.com/&quot; rel=&quot;nofollow&quot;&gt;RoboAnalyzer&lt;/a&gt;&lt;/strong&gt;. It will help you understand what you need.&lt;/p&gt;&#xA;" OwnerUserId="9328" LastActivityDate="2015-04-17T06:14:28.810" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7046" PostTypeId="2" ParentId="7043" CreationDate="2015-04-17T15:45:47.387" Score="2" Body="&lt;p&gt;is it real or simulation application?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If simulation there is good examples in matlab codes/models you can look deeper &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If real:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1- filter the sensor data&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2- use tan2 function for angular error calculations&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3- begin PID calculations with all P, I and D constants. if you use just one of them stabilization is not possible. PI or PD control is possible. Be carefefull first constants P&gt;I&gt;D than you can use :&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://sts.bwk.tue.nl/7y500/readers/.%5CInstellingenRegelaars_ExtraStof.pdf&quot; rel=&quot;nofollow&quot;&gt;http://sts.bwk.tue.nl/7y500/readers/.%5CInstellingenRegelaars_ExtraStof.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;or&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.expertune.com/tutor.aspx&quot; rel=&quot;nofollow&quot;&gt;http://www.expertune.com/tutor.aspx&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9504" LastActivityDate="2015-04-17T15:45:47.387" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7047" PostTypeId="2" ParentId="1068" CreationDate="2015-04-17T18:55:44.927" Score="1" Body="&lt;p&gt;I have seen this behaviour using the NxtMMX with the EV3 (while writing the driver for ev3dev). I am fairly certain that this is the speed regulation PID overshooting and then slowing down. In NXC you can use &lt;code&gt;MMX_SetPerformanceParameters&lt;/code&gt; to change the PID parameters and possibly get rid of the overshoot.&lt;/p&gt;&#xA;" OwnerUserId="7442" LastActivityDate="2015-04-17T18:55:44.927" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7048" PostTypeId="1" CreationDate="2015-04-17T21:43:43.603" Score="1" ViewCount="55" Body="&lt;p&gt;I am trying to determine the depth of view for a hypercatadioptric camera (camera lens system and a hyperbolic mirror) based on &lt;a href=&quot;https://i.stack.imgur.com/w7uTa.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;1&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The following illustration seems pretty clear. For an image point $p$, we are looking for a virtual point $p_u$, given the parameters of the optical system. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/w7uTa.png&quot; alt=&quot;Image from [1]&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have troubles finding the right equations in the paper, though. There is &lt;code&gt;the distribution of a virtual point&lt;/code&gt; which seems to be connected to $p_u$, but is not defined anywhere.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My goal is to replicate the diagrams they have later in the paper, like e.g. this one:&#xA;&lt;img src=&quot;https://i.stack.imgur.com/fud50.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which for a mirror (blue) gives the virtual image points of the scene (red).&#xA;I would like to calculate the depth of view, so the area at which the image blur is below a threshold.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/w7uTa.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;1&lt;/a&gt; &lt;a href=&quot;http://oatao.univ-toulouse.fr/3672/1/Zhang_3672.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Zhang, S., Zenou, E.: Optical approach of a hypercatadioptric system depth of&#xA;field. In: 10th International Conference on Information Sciences, Signal Processing&#xA;and their Applications&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="127" LastEditorUserId="127" LastEditDate="2015-04-17T21:51:42.407" LastActivityDate="2015-04-17T21:51:42.407" Title="Depth of view for a hypercatadioptric camera" Tags="&lt;computer-vision&gt;&lt;cameras&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7050" PostTypeId="1" AcceptedAnswerId="7051" CreationDate="2015-04-18T04:43:58.217" Score="7" ViewCount="6576" Body="&lt;p&gt;A few days ago, I just shared my concerns about the price of computer vision hardware on this same exact forum (see &lt;a href=&quot;https://robotics.stackexchange.com/questions/7014/what-main-factors-features-explain-the-high-price-of-most-industrial-computer-vi&quot;&gt;What main factors/features explain the high price of most industrial computer vision hardware?&lt;/a&gt;) and I think a new but related post is needed. So here we go.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are some details to consider regarding the overall scanner I want to build:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Restricted space: my overall scanner can't be larger than 3 feet cube.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Small objects: the objects I will be scanning shouldn't be larger than 1 foot cube.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Close range: the camera would be positioned approximately 1 foot from the object.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Indoor: I could have a dedicated light source attached to the camera (which might be fixed in a dark box)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Here are the stereo cameras/sensors I was looking at (ordered by price):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Two Logitech webcams (no model in particular)&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Cheap&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Harder to setup and calibrate&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Need to create your own API&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Built for: what you want to achieve&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Intel RealSense: &lt;a href=&quot;http://click.intel.com/intel-realsense-developer-kit.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://click.intel.com/intel-realsense-developer-kit.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;$100&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;High resolution: 1080p (maybe not for depth sensing)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Workable minimum range: 0.2 m&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Unspecified FOV&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Built for: hands and fingers tracking&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Kinect 2.0: &lt;a href=&quot;https://www.microsoft.com/en-us/kinectforwindows/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.microsoft.com/en-us/kinectforwindows/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;$150&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Low resolution (for depth sensing): 512 x 424&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Unworkable minimum range: 0.5 m&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Excellent FOV: 70° horizontal, 60° vertical&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Built for: body tracking&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Structure Sensor &lt;a href=&quot;http://structure.io/developers&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://structure.io/developers&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;$380&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Normal resolution with high FPS capability: 640 x 480 @ 60 FPS&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Unspecified minimum range&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Good FOV: 58° horizontal, 45° vertical&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Built for: 3D scanning (tablets and mobile devices)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;ZED Camera: &lt;a href=&quot;https://www.stereolabs.com/zed/specs/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.stereolabs.com/zed/specs/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;$450&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Extreme resolution with high FPS capability: 2.2K @ 15 FPS (even for depth sensing) and 720p @ 60 fps&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Unviable minimum range: 1.5 m&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Outstanding FOV: 110°&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Built for: human vision simulation&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;DUO Mini LX: &lt;a href=&quot;https://duo3d.com/product/duo-minilx-lv1&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://duo3d.com/product/duo-minilx-lv1&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;$595&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Normal resolution with high FPS capability: 640 x 480 @ 60 FPS&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Workable minimum range: 0.25 m (see &lt;a href=&quot;https://stackoverflow.com/questions/27581142/duo-3d-mini-sensor-by-code-laboratories&quot;&gt;https://stackoverflow.com/questions/27581142/duo-3d-mini-sensor-by-code-laboratories&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Phenomenal FOV: 170° (with low distortion)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Built for: general engineering&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Bumblebee2: &lt;a href=&quot;http://www.ptgrey.com/bumblebee2-firewire-stereo-vision-camera-systems&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.ptgrey.com/bumblebee2-firewire-stereo-vision-camera-systems&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Too much expensive (not even worth mentioning)&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Note: All prices are in date of April 18th 2015 and might change overtime.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can see, some have really goods pros, but none seems to be perfect for the task. In fact, the ZED seems to have the best specifications overall, but lacks of minimum range (since it is a large baselined camera designed for long range applications). Also, the DUO Mini LX seems to be the best for my situation, but unlike the ZED which generates really accurate depth maps, this one seems to lack of precision (lower resolution). It might be good for proximity detection, but not for 3D scanning (in my opinion). I could also try to build my own experimental stereo camera with two simple webcams, but I don't know where to start and I don't think I will have enough time to deal with all the problems I would face doing so. I am now stuck in a great dilemma.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are my questions:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;What good resources on the internet give you a good introduction on 3D scanning concepts (theoretically and programmatically)? I will be using C++ and OpenCV (I already worked with both a lot) and/or the API provided with the chosen camera (if applies).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Should you have a static camera capturing a moving object or a moving camera capturing a static object?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Should I use something in conjunction with stereo camera (like lasers)?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Is it profitable to use more than two cameras/sensors?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Are resolution, FPS and global shuttering really important in 3D scanning?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;What camera should I get (it can also be something I didn't mention, in the range of $500 maximum if possible)? My main criteria is a camera that would be able to generate an accurate depth map from close range points.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Thanks for your help!&lt;/p&gt;&#xA;" OwnerUserId="9497" LastEditorUserId="-1" LastEditDate="2017-05-23T12:37:11.430" LastActivityDate="2015-05-01T00:39:51.043" Title="Questions regarding 3D scanning and camera choice" Tags="&lt;sensors&gt;&lt;computer-vision&gt;&lt;kinect&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="9" ClosedDate="2016-02-07T04:35:43.347" ContentLicense="CC BY-SA 3.0" />
  <row Id="7051" PostTypeId="2" ParentId="7050" CreationDate="2015-04-18T06:21:18.493" Score="5" Body="&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;My favorite is the &lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/0596516134&quot; rel=&quot;noreferrer&quot;&gt;Learning OpenCV&lt;/a&gt; book.  It has a fantastic stereo / 3D section that introduces concepts from the ground up.  If you're at a university, you might be able to find the digital version available from the library website.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Depends, especially on how you are going to combine scans into a full 3D pointclound (if you need 360 degree views.)  Overall, moving the camera is usually harder than moving the object in my opinion.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Lasers can help a ton.  Take a look at the &lt;a href=&quot;http://www.makerscanner.com/&quot; rel=&quot;noreferrer&quot;&gt;MakerScanner&lt;/a&gt; from a few years ago (disclaimer, I designed it).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Extra cameras can reduce ambiguities in stereo (from, say, horizontal symmetry).  In such a controlled environment, I doubt it's worth it.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Resolution, yes, depending on your scan technique.  With something like the MakerScanner, you can use sub-pixel interpolation on the laser line to get surprisingly good accuracy, reducing the need for high resolution images.  If you're in a controlled environment, FPS probably isn't much of a concern (ie just scan slower.)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You might consider pairing &lt;a href=&quot;http://gphoto.sourceforge.net/&quot; rel=&quot;noreferrer&quot;&gt;gPhoto2&lt;/a&gt; with a point and shoot camera like &lt;a href=&quot;http://gphoto.sourceforge.net/doc/remote/&quot; rel=&quot;noreferrer&quot;&gt;one of the Cannons on this page&lt;/a&gt;, which can give you incredibly nice images for very little money.  Not much in the way of realtime, but it's unclear to me that you need that.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="8844" LastActivityDate="2015-04-18T06:21:18.493" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7052" PostTypeId="1" CreationDate="2015-04-19T05:53:13.647" Score="1" ViewCount="113" Body="&lt;p&gt;I working on sliding mode control (SMC) of a 4 DoF manipulator, I don't know&#xA;how to select the discontinuity gain matrix, $ K$ , the surface constant (the diagonal gain matrix $\Lambda$  components).&lt;/p&gt;&#xA;" OwnerUserId="9087" LastEditorUserId="9087" LastEditDate="2015-04-25T03:52:31.237" LastActivityDate="2015-04-25T03:52:31.237" Title="How to select the parameters of the Sliding Mode Control of a Robotic Arm?" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;industrial-robot&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7053" PostTypeId="2" ParentId="3079" CreationDate="2015-04-19T15:08:17.647" Score="1" Body="&lt;p&gt;Normally for a control system like this one would have a couple options:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Run the code on a co-processor that feeds data to and from the PLC over serial&lt;/li&gt;&#xA;&lt;li&gt;Run the code on a server that sends data to and from the PLC over ethernet or serial&lt;/li&gt;&#xA;&lt;li&gt;Run the code directly on the PLC if it has a general purpose processor or an integrated FPGA ect...&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Normally for reactors and other high risk systems they have a redundant architecture so you will need to have either two (or more) coprocessors or two (or more) servers running the code. but all this will be directed by the current infrastructure that exists and how it is set up, and the computational requirements of the code. But before anything like this is used in the control loop of something as high risk as a reactor it will have to have some real improvement over the current setup, and be rigorously validated to ensure it works as expected in all situations.&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2015-04-19T15:08:17.647" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7054" PostTypeId="2" ParentId="2696" CreationDate="2015-04-19T15:14:44.610" Score="1" Body="&lt;p&gt;Adrucopter already has it's own &lt;a href=&quot;http://copter.ardupilot.com/wiki/common-simulation/&quot; rel=&quot;nofollow&quot;&gt;HITL simulator&lt;/a&gt;, I would set up your flight system as you expect it to be setup in hardware, and depending on your sensors extend the APM HITL to include them and send the data from them back to the raspberry pi/APM in order to debug not just the operation of the autopilot system but any integration issues on both the hardware and software sides at the same time. I setup a similar system by using the HITL and adding an extension that emulated data from a &lt;a href=&quot;http://charmedlabs.com/default/pixy-cmucam5/&quot; rel=&quot;nofollow&quot;&gt;pixy camera&lt;/a&gt; tracking a virtual object and it worked great!&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2015-04-19T15:14:44.610" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7055" PostTypeId="2" ParentId="6942" CreationDate="2015-04-19T15:25:37.900" Score="1" Body="&lt;p&gt;Why would you use two cameras of different focal lengths? that is just asking for trouble and will add so many issues and much unneeded complexity to the calculation of the depth map. Selecting a baseline set up a relationship between the size of the detected object in pixels and the distance of that object, you want to ensure when you detect the image that there is at least a couple of pixels of separation between the pairs (I shoot for greater than 10) as a rule of thumb I use 1:50 - 1:150 ratio for the ratio between the camera separation to the detection distance for basketball sized objects, but this will vary wildly depending on the cameras and the resolution.&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2015-04-19T15:25:37.900" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7056" PostTypeId="1" AcceptedAnswerId="7101" CreationDate="2015-04-19T16:07:27.550" Score="2" ViewCount="149" Body="&lt;p&gt;I have an omni-directional robot, such as a X-Drive or mecanum Drive that I need to track the position of. I can put encoders on the wheels, but that is all I can do in terms of the sensors. I have no external beacons that I can link to. The issue is that I needed to keep track of X-Y position, including strafing, and my heading. Does anyone have any resources that could help me with this.&lt;/p&gt;&#xA;" OwnerUserId="9530" LastActivityDate="2015-04-24T19:11:08.647" Title="Locating Omni-Directional Robot" Tags="&lt;localization&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7057" PostTypeId="1" AcceptedAnswerId="7082" CreationDate="2015-04-20T05:08:29.827" Score="0" ViewCount="1961" Body="&lt;p&gt;I can't really find &lt;a href=&quot;https://www.google.co.id/?gws_rd=cr,ssl&amp;amp;ei=mIg0VZv5K4-HuASa4oCgBg#q=beaglebone%20esc%20brushless%20motor&quot; rel=&quot;nofollow&quot;&gt;a real straightforward tutorial&lt;/a&gt; for that. There are &lt;a href=&quot;https://www.google.co.id/?gws_rd=cr,ssl&amp;amp;ei=mIg0VZv5K4-HuASa4oCgBg#q=arduino%20esc%20brushless%20motor&quot; rel=&quot;nofollow&quot;&gt;a lot for Arduino&lt;/a&gt; but I only have an original beaglebone, an ESC, and brushless motor with me. Please help.&lt;/p&gt;&#xA;" OwnerUserId="9305" LastActivityDate="2021-03-31T13:00:26.627" Title="How to control Brushless Motor+ESC with BeagleBone?" Tags="&lt;brushless-motor&gt;&lt;beagle-bone&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7059" PostTypeId="1" AcceptedAnswerId="7079" CreationDate="2015-04-20T13:04:03.530" Score="0" ViewCount="86" Body="&lt;p&gt;My question is more on a basic/conceptual level.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm looking into a way to approach an object in map, that I have detected earlier. My robot is localized in a map using SLAM. And object position is 2D point that I recieve from my algorithm. (Object is actually a face picture on a wall). Is there a smart way to approach the point and &quot;look&quot; at it?&lt;/p&gt;&#xA;" OwnerUserId="9537" LastActivityDate="2015-04-21T21:51:01.610" Title="How to approach an object" Tags="&lt;mobile-robot&gt;&lt;mapping&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7061" PostTypeId="2" ParentId="1737" CreationDate="2015-04-20T17:33:18.510" Score="0" Body="&lt;p&gt;Just for completeness -- although you will typically need an external H bridge to drive motors, you can use just the AVR pins directly if you are certain that the current will be low enough (for driving a &lt;em&gt;really tiny&lt;/em&gt; motor, or maybe a LED pair).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The code would look something like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;DDRB |= _BV(PB0) | _BV(PB1); // This sets PB0 and PB1 as output.&#xA;// After setting it as output, both the pins are driven low.&#xA;&#xA;PORTB |= _BV(PB1); // This sets PB1 high and start spinning the motor in one direction&#xA;PORTB ^= _BV(PB0) | _BV(PB1); // This toggles state of both PB0 and PB1 -- change direction of the rotation&#xA;PORTB &amp;amp;= ~(_BV(PB0) | _BV(PB1)); // This sets both pins to low -- stop the motor&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="482" LastActivityDate="2015-04-20T17:33:18.510" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7062" PostTypeId="1" CreationDate="2015-04-20T20:39:21.627" Score="3" ViewCount="638" Body="&lt;p&gt;how to convert the value you get for the angle (packet ID 20) into degrees?&#xA;i am using the create2 robot and when I did not understand the data I am getting back. The documentation it says it's in degrees but what I get back is a huge number like 4864 when I turned the robot just 45 degrees.&lt;/p&gt;&#xA;" OwnerUserId="9322" LastActivityDate="2015-04-24T15:00:39.403" Title="create2 angle (packet ID 20)" Tags="&lt;irobot-create&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7064" PostTypeId="2" ParentId="2945" CreationDate="2015-04-20T22:08:12.993" Score="0" Body="&lt;p&gt;Since the robot is unlikely to visit all the locations you have a sparse data set that you can most simply store in a hash table.  You would have to think of a good way of hashing the x and y locations together.  You need a function hash(x,y) and feed that into a hash table.&lt;/p&gt;&#xA;" OwnerUserId="9536" LastActivityDate="2015-04-20T22:08:12.993" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7065" PostTypeId="2" ParentId="6990" CreationDate="2015-04-20T22:24:09.623" Score="0" Body="&lt;p&gt;You could measure the change of capacitance when you put a sheet of plastic between 2 metal plates but it then does depend on the thickness of the sheet of plastic as well as its type.&lt;/p&gt;&#xA;" OwnerUserId="9536" LastActivityDate="2015-04-20T22:24:09.623" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7066" PostTypeId="1" CreationDate="2015-04-20T22:44:14.693" Score="5" ViewCount="263" Body="&lt;p&gt;I saw a high end robot arm once that I could move and bend it to any form I wanted with no resistance, as if the robot arm didn't have any weight. I'd like to know more about them. What is this class of robot arm design called? Where can I get some more information about its design and applications?&lt;/p&gt;&#xA;" OwnerUserId="9539" LastEditorUserId="110" LastEditDate="2015-04-21T18:04:29.277" LastActivityDate="2015-06-05T01:08:00.633" Title="What is the technology used for no-resistance robot arms?" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;joint&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7067" PostTypeId="1" AcceptedAnswerId="7071" CreationDate="2015-04-21T02:11:00.790" Score="1" ViewCount="82" Body="&lt;p&gt;I want to use a Raspberry Pi to pan a camera mounted on a servo wirelessly from ~100 feet away. What are some good servos and transceivers for this?&#xA;To clarify, there should be no physical connection between the RasPi and servo.&#xA;Do I need an additional RasPi on the servo end?&lt;/p&gt;&#xA;" OwnerUserId="9540" LastEditorUserId="9540" LastEditDate="2015-04-21T02:45:40.797" LastActivityDate="2015-04-21T16:49:50.077" Title="How can I communicate wirelessly between a RasPi and servo?" Tags="&lt;motor&gt;&lt;raspberry-pi&gt;&lt;wireless&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7068" PostTypeId="1" CreationDate="2015-04-21T04:47:00.717" Score="1" ViewCount="58" Body="&lt;p&gt;How is a new team strategy during a robocup competition sent to each player of a robot team? Robots in the Standard Platform League (i.e. SPL), for example, are fully autonomous and there is no connection with non-team members (except pulling from the GameControl).&lt;/p&gt;&#xA;" OwnerUserId="9541" LastEditorUserId="6941" LastEditDate="2016-02-10T10:36:06.453" LastActivityDate="2016-02-10T14:39:38.073" Title="How does the strategy changes in a RobCup soccer competition without connection to outside?" Tags="&lt;soccer&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7069" PostTypeId="1" CreationDate="2015-04-21T06:38:45.257" Score="-2" ViewCount="63" Body="&lt;p&gt;The GMIS (General Machine Intelligence System) from a &lt;a href=&quot;http://www.codeproject.com/Articles/897132/GMIS-Turn-All-Your-Devices-into-Robots&quot; rel=&quot;nofollow&quot;&gt;new article&lt;/a&gt; posted at codeproject.com looks interesting.  Do you think that it could be a breakthrough in the field of robotics&lt;/p&gt;&#xA;" OwnerUserId="9542" LastEditorUserId="110" LastEditDate="2015-04-21T16:43:46.633" LastActivityDate="2015-06-06T06:17:13.503" Title="Is GMIS really a breakthrough?" Tags="&lt;mobile-robot&gt;&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="3" ClosedDate="2015-06-15T11:29:44.950" ContentLicense="CC BY-SA 3.0" />
  <row Id="7070" PostTypeId="1" CreationDate="2015-04-21T12:10:44.547" Score="2" ViewCount="347" Body="&lt;p&gt;currently i am programming for a robotic simulation. I have a Endeffector which aproaches a target, on the way to the target is an Obstacle. Now i redirect my Endeffector, so that it does not hit the target.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When i want to do the same for the whole arm i want to push the arm away from the Obstacle as well. Now i have it working so far that i can redirect the arm. But my calculation for the Jacobian seems to be faulty.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For my setup, and what i need for that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a robotic arm, 7DOF. Let $x_0$ be the closest point on the arm to the obstacle. And $J_0$ the corresponding Jacobian.&#xA;Also i have given the following term:&#xA;$\dot{x_0} = J_0 * \dot{\theta}$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\theta$ are my joint angles. I can calculate the Jacobian for the EndEffector, but do not know on how to calculate it for a point ob the arm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anybody have an Idea on how to calculate the corresponding Jacobian.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cheers&lt;/p&gt;&#xA;" OwnerUserId="9545" LastActivityDate="2015-06-21T13:48:59.253" Title="Jacobian for point on robotic arm" Tags="&lt;robotic-arm&gt;&lt;jacobian&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7071" PostTypeId="2" ParentId="7067" CreationDate="2015-04-21T14:26:22.220" Score="2" Body="&lt;p&gt;No matter what, you will have to have a device physically sending a &lt;a href=&quot;http://en.wikipedia.org/wiki/Pulse-width_modulation&quot; rel=&quot;nofollow&quot;&gt;pulse width modulated&lt;/a&gt; signal to the servo.  It doesn't necessarily have to be a raspberry pi, and honestly you probably shouldn't use one in this case.  Raspberry Pi's do not have a hardware implementation of PWM.  Software PWM is unreliable because of the precise timing needed for the motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would recommend learning some Arduino as well in this case.  You can still have a RPi talking wirelessly via Radio Packet Communication (i.e. XBee, Bluetooth, 802.11, etc.) to the Arduino.  It will just take a little extra learning if you're not familiar with C coding and setting them up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you do want to go the double RPi route.  Look into using these for easy motor control: &lt;a href=&quot;https://www.adafruit.com/products/2327&quot; rel=&quot;nofollow&quot;&gt;Adafruit 16-Channel PWM / Servo HAT for Raspberry Pi - Mini Kit&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a good explanation of software PWM and what can go wrong, watch this:&#xA;&lt;a href=&quot;https://www.youtube.com/watch?v=ddlDgUymbxc&quot; rel=&quot;nofollow&quot;&gt;https://www.youtube.com/watch?v=ddlDgUymbxc&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="1432" LastActivityDate="2015-04-21T14:26:22.220" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7072" PostTypeId="2" ParentId="7067" CreationDate="2015-04-21T15:50:21.693" Score="1" Body="&lt;p&gt;Use rasp-pi, arduino ,servo and transceiver set (like nrf24l01 or XBee)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Wifi: 10-30m&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bluetooth: 10m&lt;/p&gt;&#xA;&#xA;&lt;p&gt;nrf24l01: 15m&lt;/p&gt;&#xA;&#xA;&lt;p&gt;XBee 1mW: 300ft &lt;/p&gt;&#xA;" OwnerUserId="9504" LastActivityDate="2015-04-21T15:50:21.693" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7073" PostTypeId="1" CreationDate="2015-04-21T16:44:07.540" Score="0" ViewCount="512" Body="&lt;p&gt;I have 3 ultrasonic Sensor (HC-SR04), i want to use one of them as transmitter, and the other as receiver, i want to let the first one send ultra Sonic waves and the other receive these waves from the same transmitter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;how can i do that ? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;i tried to send trigger for each ultrasonic and connect them on different pins on PIC, but its now work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;its something like this &lt;a href=&quot;https://www.youtube.com/watch?v=mWgInUW6A8w&quot; rel=&quot;nofollow&quot;&gt;project&lt;/a&gt; but using HC-SR04 &lt;/p&gt;&#xA;" OwnerUserId="9548" LastActivityDate="2015-08-20T20:37:44.310" Title="make hc-sr04 receive from another one" Tags="&lt;microcontroller&gt;&lt;ultrasonic-sensors&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7074" PostTypeId="2" ParentId="7067" CreationDate="2015-04-21T16:49:50.077" Score="2" Body="&lt;p&gt;As TomSchober said,  you will need to send a PWM signal to your servo either way. Tom has already covered Arduino, so I'll make two other suggestions:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Texas Instruments &lt;a href=&quot;http://www.ti.com/tool/ez430-rf2500&quot; rel=&quot;nofollow&quot;&gt;MSP430 with a CC2500&lt;/a&gt; radio (or maybe a newer version of this). It has a 2.4GHz radio with an antenna that you can configure to work as you like. The downside is it is harder to program than, say, an Arduino, but it is definitely doable. The kit is also kind of expensive. If you max out the signal strength, the range is fairly good. If you are interested, I can edit this post with a link to my github code for the radio.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.st.com/web/catalog/tools/FM116/SC959/SS1532/PF254044&quot; rel=&quot;nofollow&quot;&gt;STM32 Discovery&lt;/a&gt; board. You would need to get a bluetooth or a Wi-Fi dongle for it, but it has hardware PWM. It is fairly easy to program - there is lots of application code available through STM, and it is quite inexpensive at about 12-20 dollars per board. You will also get a fairly capable ARM processor that you can use to do lots of fun stuff. The F3 variant that I linked comes with a build in accelerometer and gyro.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The only warning I would have is:&lt;/strong&gt; make sure the servo can get sufficient current from whatever you use to power it. For example, connecting the servo power line of a high-torque servo directly to the STM32 power pins blows the power circuit of the board (&lt;em&gt;cough  cough&lt;/em&gt;) - it is not a particularly hard fix, but still. If your camera is heavy enough and the servo is torque-y enough, I would recommend a separate power supply for the servo.&lt;/p&gt;&#xA;" OwnerUserId="9163" LastActivityDate="2015-04-21T16:49:50.077" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7075" PostTypeId="2" ParentId="7066" CreationDate="2015-04-21T18:03:30.870" Score="1" Body="&lt;p&gt;This capability is called &quot;gravity compensation&quot;.  Simply put, the robot arm only exerts enough torque to cancel out the effects of gravity.  So, any extra force that you exert on the arm allows the arm to be moved easily.  Note that the required torques are highly dependent on the arm's configuration (i.e. joint angles). This is mainly a feature of the software and the control system rather than the hardware (although there is a minimum set of required hardware functionality, see below). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I believe PD control is typically used. Gravity compensation requires a very good model of the arm's kinematic and dynamic properties.  This goes well beyond just the center of masses for each link.  Frictions, inertias, and other non-linear affects are typically taken into account.  (I heard a story from a friend that the friction properties of the arm he was working on changed dramatically as it warmed up, which made controller tuning a nightmare).  The controller must also be tuned very well.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;While this is a software feature, I think it would be difficult to impossible without certain hardware features.  For example you need high precision joint encoders, some manner of joint or motor torque sensing, good resolution torque control, and typically back-drivable motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I believe you can implement a kind of poor-man's gravity compensation without some of these hardware features if you have a good force-torque sensor at the wrist.  The limitation being that the user can only move the arm by touching the force-torque sensor.  Basically, this is zero-force control.  The arm can hold its position with as much torque as it wants, but tries to keep zero force on the sensor.  So if you push the sensor, the arm will move away as if it is weightless.&lt;/p&gt;&#xA;" OwnerUserId="110" LastEditorUserId="9570" LastEditDate="2015-04-23T17:06:43.547" LastActivityDate="2015-04-23T17:06:43.547" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7076" PostTypeId="2" ParentId="6942" CreationDate="2015-04-21T19:23:29.067" Score="1" Body="&lt;p&gt;1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The baseline you want is going to depend on the resolution you want to process the images at.  The minimum range is determined by two things.  First, both cameras have to able to see the object of interest.  Second, there is typically a minimum range due to the processing.  Most stereo algorithms have a maximum disparity that they will search up to.  Since disparity is proportional to inverse distance, a larger maximum disparity gives you a closer minimum range.  Since the maximum disparity is a pixel amount, you can decrease your minimum range by reducing resolution at the cost of accuracy and resolution.  It will also depend on the field of view of your cameras.  You can calculate the minimum range by calculating the ray through f_1(x,y) and the ray through f_2(x+d,y) where f_1 projects a ray through point (x,y) in camera 1 and f_2(u,v) projects a ray through point (u,v) in camera 2 and d is the maximum disparity.  You can usually choose the maximum disparity to search, but it often results in a narrower field of view and usually the computation increases linearly with maximum disparity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maximum range is ill-defined.  A range of infinity corresponds to a disparity of 0.  The disparity is proportional to 1/distance so farther distance provides less range accuracy.  You can never be out of range though.  If you pick a minimal range accuracy, then you could calculate a maximum range.  Typically, a stereo algorithm will achieve disparity accuracy of around 0.25 pixels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For stereo, usually the images are dewarped to correct for lens distortion.  In addition, one camera is warped to be aligned with the other camera such that the axis of the cameras are pointing in the same direction and the camera position differs only in x.  During this process, any differences between the focal lengths of the cameras are also corrected such that the dewarped images have the same effective focal length.&lt;/p&gt;&#xA;" OwnerUserId="9373" LastActivityDate="2015-04-21T19:23:29.067" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7078" PostTypeId="2" ParentId="7040" CreationDate="2015-04-21T20:25:55.730" Score="1" Body="&lt;p&gt;I'm not sure what reference frame the KITTI ground truth data is in, but I'm going to guess the robot frame.  The ground truth data looks to just be a transformation matrix for a homogenous point.  The transform is represented in the form such that P' = T * P where P' is a point in the world coordinate frame, T is the &quot;projection&quot; matrix (I'm not sure, but I don't think this is the right term for this matrix), and P is the point in the robot coordinate frame.  Here the points are represented as [x,y,z,1]^T.  The transformation has the form [R t; 0 1] where R is the rotation of the robot and t is the translation of the robot.  The [0 1] row has been elided in the KITTI data.  To convert this transform to translation + quaternion form, the translation is just the rightmost column.  The quaternion can be found by converting the rotation matrix R to a quaternion.  See &lt;a href=&quot;http://en.wikipedia.org/wiki/Rotation_matrix#Quaternion&quot; rel=&quot;nofollow&quot;&gt;http://en.wikipedia.org/wiki/Rotation_matrix#Quaternion&lt;/a&gt; for formulas for this conversion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ground truth data is probably in the robot reference frame.  To convert it to the camera reference frame, you'll need to use the camera extrinsics.  If the camera extrinsics which maps points from robot space to camera space is E, then the ground truth in the camera frame is E * T * E^(-1) where T is the ground truth in the robot frame.  This is just composing the transforms (robot-&gt;camera) o (robot-&gt;robot) o (camera-&gt;robot).  If the extrinsics is given as the transform from camera space to robot space, then the inverse will be on the left side instead.&lt;/p&gt;&#xA;" OwnerUserId="9373" LastActivityDate="2015-04-21T20:25:55.730" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7079" PostTypeId="2" ParentId="7059" CreationDate="2015-04-21T21:51:01.610" Score="3" Body="&lt;p&gt;I wasn't totally sure what you meant by &quot;&lt;em&gt;draw and arc and check where the arc is on valid map position. Then move the robot there and calculate the angle to rotate the robot&lt;/em&gt;&quot;. Perhaps you mean something like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/IBXKd.png&quot; alt=&quot;Robot Arc Path&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You draw an arc starting at the face, coming straight out of the all (tangent to the face's normal vector), and ending at the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's certainly one way to plan the path, and it works well if there's no obstacle in the way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, my own favourite path planning method is more computationally intensive, but works very well in many cases, handles acceleration and cornering, initial and final direction, and in many cases handles obstacle avoidance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Iterative Finite Element Path Planning&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Start by defining a path as a sequence of points from the face to the robot. The first 2 points should be along the line of the robot's forward travel direction, and the last 2 points should be along the Face's surface normal vector. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/kNbpZ.png&quot; alt=&quot;Robot Finite Element Path&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now we will iteratively adjust the path:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;while(path_is_not_OK())&#xA;{&#xA;    n = number of points of path&#xA;&#xA;    // Loop through all the blue points&#xA;    for(i=2; i&amp;lt;n-2; i++)&#xA;    {&#xA;        // move this point in the direction which reduces acceleration&#xA;&#xA;        prev_velocity = point[i]   - point[i-1]&#xA;        next_velocity = point[i+1] - point[i]&#xA;&#xA;        acceleration = next_velocity - prev_velocity&#xA;&#xA;        point[i-1] -= acceleration * 0.01&#xA;        point[i]   += acceleration * 0.02&#xA;        point[i+1] -= acceleration * 0.01&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I just wrote out that code from memory, so I don't guarantee its correctness.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After some number of iterations (about 50 - 500), you should see a nice smooth path from the robot to the target.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Feel free to add other adjustments into the loop to satisfy other constraints to may have on the path (for example wall or obstacle avoidance).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/7U7lu.png&quot; alt=&quot;Robot Finite Element Path&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2015-04-21T21:51:01.610" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7080" PostTypeId="1" AcceptedAnswerId="7081" CreationDate="2015-04-21T23:16:46.810" Score="0" ViewCount="688" Body="&lt;p&gt;how do you calculate the PID values and stabilise the quadcopter using the on board sensors The gyro accelerometer and magnetometer&lt;/p&gt;&#xA;" OwnerUserId="9551" LastActivityDate="2015-04-22T02:49:47.123" Title="building a quadcopter using STM32F3 Discovery board" Tags="&lt;sensors&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7081" PostTypeId="2" ParentId="7080" CreationDate="2015-04-22T02:49:47.123" Score="0" Body="&lt;p&gt;welcome to the Robotics stack exchange! your question is very broad, so I will try to give you an overview of what you need to do:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;First determine orientation based on information from both the gyroscope and accelerometer. The accelerometer is accurate in the long term while the gyroscope is accurate in the short term, so you will need some kind of sensor fusion algorithm to determine the&quot;true&quot; orientation of the quad. The most popular one is the &lt;a href=&quot;http://en.wikipedia.org/wiki/Kalman_filter&quot; rel=&quot;nofollow&quot;&gt;Kalman Filter&lt;/a&gt; but many others are available to choose from.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The next thing you will want to do is build a simple rate controller where you try to match the rate of rotation on a certain axis to the rate commanded by the controller&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;after you have a rate controller you can build a simple stabilized controller, where instead of commanding the rate you command a certain angle. You take the desired angle and the current angle and based on those values calculate a desired rate to close that gap and then feed that into the rate controller.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You will probably need a RC controller and receiver set, you will need to read the PWM values from the receiver in order to take command input&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://ghowen.me/build-your-own-quadcopter-autopilot/&quot; rel=&quot;nofollow&quot;&gt;Here&lt;/a&gt; is my favorite resource on the matter it helped me when I was making my first flight controller from scratch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Good luck!&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2015-04-22T02:49:47.123" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7082" PostTypeId="2" ParentId="7057" CreationDate="2015-04-22T03:02:19.230" Score="1" Body="&lt;p&gt;You will need to output a &lt;a href=&quot;http://en.wikipedia.org/wiki/Servo_control&quot; rel=&quot;nofollow&quot;&gt;servo PWM signal&lt;/a&gt; with a 20ms period and a pulse width generally between 1 and 2ms depending on your ESC, &lt;a href=&quot;http://beagleboard.org/support/BoneScript/analogWrite/&quot; rel=&quot;nofollow&quot;&gt;Here&lt;/a&gt; is some information about using the PWM output on a beaglebone, and &lt;a href=&quot;https://www.linux.com/learn/tutorials/776799-servo-control-from-the-beaglebone-black&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt; is an article describing controlling a servo with a beaglebone, it is the same as an ESC.&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2015-04-22T03:02:19.230" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="7083" PostTypeId="2" ParentId="7073" CreationDate="2015-04-22T03:20:25.453" Score="1" Body="&lt;p&gt;According to the &lt;a href=&quot;http://www.micropik.com/PDF/HCSR04.pdf&quot; rel=&quot;nofollow&quot;&gt;datasheet&lt;/a&gt; the sensors automatically sends and receives the pulses, you would need to independently control the speakers and microphones I am not aware of any ultrasonic sensors that give you that fine control, you would need to purchase separate ultrasonic transmitters and receivers, and construct the appropriate filtering and amplification circuitry for both. &lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2015-04-22T03:20:25.453" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7087" PostTypeId="2" ParentId="7070" CreationDate="2015-04-22T12:13:40.147" Score="1" Body="&lt;p&gt;If the point is on some intermediate link, you can recompute the Jacobian with only the joints leading up to that link.  See &lt;a href=&quot;https://robotics.stackexchange.com/questions/3032/jacobian-of-abb-irb140-robot&quot;&gt;this post&lt;/a&gt; or your favorite robotics textbook for how to create the Jacobian.&lt;/p&gt;&#xA;" OwnerUserId="110" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2015-04-22T12:13:40.147" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7088" PostTypeId="2" ParentId="7062" CreationDate="2015-04-22T13:33:04.153" Score="2" Body="&lt;p&gt;Well, the &lt;code&gt;Distance&lt;/code&gt; opcode (packet ID 19) has a &lt;a href=&quot;https://robotics.stackexchange.com/questions/6869/roomba-create-2-problem-reading-distance-traveled&quot;&gt;known bug&lt;/a&gt; in it.  So I wouldn't be surprised if this also affects the &lt;code&gt;Angle&lt;/code&gt; packet.  I would recommend using the &lt;code&gt;Left Encoder Counts&lt;/code&gt; and &lt;code&gt;Right Encoder Counts&lt;/code&gt; opcodes (packets 43 and 44) and compute the angle yourself.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The angle is pretty easy to calculate from the distances traveled by each wheel.  &lt;a href=&quot;http://chess.eecs.berkeley.edu/eecs149/documentation/differentialDrive.pdf&quot; rel=&quot;nofollow&quot;&gt;This document&lt;/a&gt; has a good introduction to mobile robot kinematics.  But simply:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\theta = \frac{d_r - d_l}{l}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where $d_r$ and $d_l$ are the distances traveled by the right and left wheels respectively since the last time step.  And $l$ is the wheel base of the robot.  The wheel base, number of encoder ticks per revolution, and wheel diameter can be found in the &lt;a href=&quot;http://www.irobot.com/~/media/MainSite/PDFs/About/STEM/Create/create_2_Open_Interface_Spec.pdf&quot; rel=&quot;nofollow&quot;&gt;OI Spec&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding units, the units for $d_r$, $d_l$, and $l$ shouldn't matter as long as they are all the same.  $\theta$ is in radians.  Picking mm for the lengths is easy because that is what is specified in the spec.  The wheel base is 235.0 mm.  To determine mm traveled from encoder ticks, I find it easiest to think about as a unit conversion using the equation for circle circumference.  If you have $X$ ticks:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;d \text{ (mm)} = X \text{ (ticks)} \begin{bmatrix} \frac{1 \text{ (revolution)}}{508.8 \text{ (ticks)}} \end{bmatrix} \begin{bmatrix} \frac{\pi 72.0 \text{ (mm)}} {1 \text{ (revolution)}} \end{bmatrix}&#xA;$$&lt;/p&gt;&#xA;" OwnerUserId="110" LastEditorUserId="110" LastEditDate="2015-04-24T15:00:39.403" LastActivityDate="2015-04-24T15:00:39.403" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7089" PostTypeId="1" CreationDate="2015-04-22T19:16:02.437" Score="0" ViewCount="392" Body="&lt;p&gt;I was just wondering if it was possible to buy or build a programmable drone with a robotic arm,hand, knife.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to program a drone to harvest crops.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-object recognition from live video stream to server&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-identify and grab objects with arm, make cut if necessary&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-transport produce to collection site&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know this would take much knowlege from many fields but do any you have any forsight into the limitations of doing this other than energy for power.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Estimates on cost of hardware?&lt;/p&gt;&#xA;" OwnerUserId="9564" LastEditorUserId="9564" LastEditDate="2015-04-22T20:31:02.083" LastActivityDate="2015-04-22T23:18:20.390" Title="Programable Drone with robotic arm and hand?" Tags="&lt;robotic-arm&gt;&lt;design&gt;&lt;quadcopter&gt;&lt;dynamic-programming&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7091" PostTypeId="1" CreationDate="2015-04-22T23:05:20.750" Score="2" ViewCount="4697" Body="&lt;p&gt;i am working on my master's thesis about design and construction of universal robotic arm. &#xA;Goal of my work is to design 5 DOF robotic arm. Something like on the picture: &lt;img src=&quot;https://i.stack.imgur.com/RqzaB.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need it to be able to lift a weight about 5kg. It has to move in &quot;action radius&quot; 1m. Rotation speed should be about 1m/s. The conclusion of my work should be like: &quot;You can buy ABB robotic arm or you can but this..it can lift that much, can turn that speed and weighs that much&quot;. Basic construction should be done too. Maybe with some simulation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First of all - i picked really bad master's thesis for me, i know that know.&#xA;Second - i have like month to finish it.&#xA;I would like to ask someone how to proceed. &#xA;I know that first step is to pick servos/actuators/gearboxes, but which one?&#xA;What is realistic weight of the whole arm which should lift another 5 kg of weight? How strong motors should i pick or with what gearboxes? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is anyone able to help me via maybe emails? &lt;/p&gt;&#xA;" OwnerUserId="9567" LastActivityDate="2015-04-24T13:07:35.637" Title="Design and construction of universal robotic arm (5kg, 1m)" Tags="&lt;otherservos&gt;&lt;actuator&gt;&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="7092" PostTypeId="2" ParentId="7089" CreationDate="2015-04-22T23:18:20.390" Score="1" Body="&lt;p&gt;There is no ready to fly model or kit. You should do it yourself arm/hand/knife. But if you use extra blade like propellers you can use it as a harvester. BLDC motors have enough power.&lt;/p&gt;&#xA;" OwnerUserId="9504" LastActivityDate="2015-04-22T23:18:20.390" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7093" PostTypeId="2" ParentId="5189" CreationDate="2015-04-23T09:38:25.147" Score="0" Body="&lt;p&gt;If your trying to get the most for your money I would buy used 1st gen Kinect (you can get them really cheap) and take it apart from it's housing to reduce size and weight.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another option is Asus Xtion which is similar to Kinect only smaller and does not require external power supply.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And you could always just use 2 identical cameras (maybe webcams) for stereo vision.&lt;/p&gt;&#xA;" OwnerUserId="9537" LastActivityDate="2015-04-23T09:38:25.147" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7094" PostTypeId="2" ParentId="7043" CreationDate="2015-04-23T15:46:37.800" Score="2" Body="&lt;p&gt;The controller has a definite performance problem after t=1.5sec. [This can be due to the system model or some other coding error.]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The system (model + controller) behaves smooth until t=1.5sec. It is best to magnify and debug the code at that region. The controller behaves as expected until then. Only the X has no error from T0, which makes assessing the X-axis controller impossible. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another point also worth noting is that, the Y and Z errors should have caused some error in X, but we don't see this. So the simulation model could be simplified (like decoupled in X direction from others maybe?)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Euler angles sometimes cause computational errors in attitudes (for exact zero, or pi or pi/2's). That might be the reason.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For an understanding of the maths behind euler representation singularities, and their solutions, please refer to textbooks or articles, one example is: &#xA;&lt;a href=&quot;http://lairs.eng.buffalo.edu/pdffiles/pconf/C10.pdf&quot; rel=&quot;nofollow&quot;&gt;http://lairs.eng.buffalo.edu/pdffiles/pconf/C10.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9570" LastActivityDate="2015-04-23T15:46:37.800" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7095" PostTypeId="1" CreationDate="2015-04-23T17:04:25.157" Score="1" ViewCount="361" Body="&lt;p&gt;I know there are lots of consumer depth image sensors: kinect, primesense, structure.io, leap motion, ... But I'm looking for something that is more suitable for integration into robot, something without case or with proper mount, compact and available for at least next five years if robot is going to production. Something similar to the sensors used in this drone &lt;a href=&quot;https://www.youtube.com/watch?v=Gj-5RNdUz3I&quot; rel=&quot;nofollow&quot;&gt;https://www.youtube.com/watch?v=Gj-5RNdUz3I&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9572" LastActivityDate="2015-04-29T15:42:54.273" Title="Depth image sensor for integration into robot" Tags="&lt;sensors&gt;&lt;kinect&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7096" PostTypeId="2" ParentId="7066" CreationDate="2015-04-23T17:42:12.660" Score="9" Body="&lt;p&gt;It's called compliance. Gravity compensation by itself is not enough to achieve this, as well it is not mandatory. For example, if reducers with high reduction ratios are used, robot arm will be very stiff to move around.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One way to make robotic arm compliant is to have torque sensors that can measure the differences in expected load (i.e. weight of the arm) and actual load, when you try to move and arm. Then you simply amplify difference enough to help user to move an arm. This is called active compliance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can also compute expected load before hand using knowledge of the arm configuration and inertial parameters. If arm is not moving, this is called gravity compensation, thus when you try to move an arm you do not feel its weight, but only joint stiffness.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To get information of how to compute torques for gravity compensation and how to make robot compliant I recommend this course:&#xA;&lt;a href=&quot;http://see.stanford.edu/see/courseInfo.aspx?coll=86cc8662-f6e4-43c3-a1be-b30d1d179743&quot;&gt;http://see.stanford.edu/see/courseInfo.aspx?coll=86cc8662-f6e4-43c3-a1be-b30d1d179743&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is some more information about compliance:&#xA;&lt;a href=&quot;http://www.eucognition.org/eucog-wiki/Compliant_robots&quot;&gt;http://www.eucognition.org/eucog-wiki/Compliant_robots&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9572" LastActivityDate="2015-04-23T17:42:12.660" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7097" PostTypeId="1" AcceptedAnswerId="7098" CreationDate="2015-04-23T20:01:53.487" Score="0" ViewCount="224" Body="&lt;p&gt;I have a FIRST Robotics spec National Instruments cRIO.  I would like to connect a USB wireless Xbox controller to it in order to control it from a distance with minimal extra hardware (which is why I am not using the more traditional WiFi radio method).  To this point I have been able to find either&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A. A sidecar for the cRIO which allows it to act as a USB host or&lt;/p&gt;&#xA;&#xA;&lt;p&gt;B. A method that does not use NI specific hardware to connect the two together&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If someone who is knowledgeable on the subjects of industrial system and robot control could provide some assistance that would be greatly appreciated, thanks!&lt;/p&gt;&#xA;" OwnerUserId="9573" LastEditorUserId="37" LastEditDate="2015-07-06T11:16:35.883" LastActivityDate="2015-07-06T11:16:35.883" Title="Connecting USB Xbox Controller to National Instruments cRIO" Tags="&lt;control&gt;&lt;industrial-robot&gt;&lt;wireless&gt;&lt;usb&gt;&lt;first-robotics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7098" PostTypeId="2" ParentId="7097" CreationDate="2015-04-24T03:07:23.623" Score="0" Body="&lt;p&gt;So you can line the Xbox controller to the FIRST dashboard software as a joystick, this would be the easiest solution, If you want to attach it directly you could use the serial port on the Crio with a &lt;a href=&quot;http://www.arduino.cc/en/Main/ArduinoUSBHostShield&quot; rel=&quot;nofollow&quot;&gt;USB host shield&lt;/a&gt; and an arduino (similar to &lt;a href=&quot;http://scuola.arduino.cc/courses/lessons/cover/wXd2go1&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt;) and configure the arduino to translate the data to serial and then read it. the second option is to connect the SPI lines on the shield directly to the GPIO on the digital sidecar and use the included SPI interface in the WPI library. Additional modules for the Crio will not be supported in the FIRST configuration, requiring to write your own libraries and FPGA implementation from the ground up to support more than just the offical modules, along with the fact that they are very expensive.&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2015-04-24T03:07:23.623" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7099" PostTypeId="1" CreationDate="2015-04-24T12:54:26.153" Score="0" ViewCount="35" Body="&lt;p&gt;Guys I am making a home automation system very simple one with infrared remote ccontrol of tv remote Now the problem is I wanna buy a some relays to switch 230V AC using my arduino board but can't understand which one to buy I don't want to buy relay module but I wanna buy relay.&lt;/p&gt;&#xA;" OwnerUserId="5602" LastActivityDate="2015-05-01T00:52:14.550" Title="Got Difficulty in reading Specification?" Tags="&lt;arduino&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7100" PostTypeId="2" ParentId="7091" CreationDate="2015-04-24T13:07:35.637" Score="5" Body="&lt;p&gt;To answer your questions about the motors/gearing:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To lift 5Kg at 1 metre distance - the &quot;shoulder&quot; torque needs to be 500 Kg.cm or about 5000 N.cm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is far above the torque of most model servos, so forget them; robots of this sort of performance generally use a specialist motor, much more than 12V and a purpose built gearing arrangement that probably more costly than the motor.  (Often harmonic drives, though a more conventional spur gearing arrangement will work for less performance and more backlash.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Motor power to get a reasonable speed can be calculated from the torque and the rotational speed you're designing for - at least several hundred watts.  This would assumes the arm itself has zero mass by the way, so would be a wild underestimate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Actual weight is impossible to estimate without first making an initial mechanical design; it depends where the other motors are located and how heavy they are, since the robot must lift its own weight.  Robots I've learned on in the past (very old PUMA robots, quite well known) are far heavier than the 5Kg payload you want to lift; maybe 30-50Kg or so for the whole arm and rotation axis?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(This is much more than a month of work, I'm sorry to say.)&lt;/p&gt;&#xA;" OwnerUserId="9578" LastActivityDate="2015-04-24T13:07:35.637" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7101" PostTypeId="2" ParentId="7056" CreationDate="2015-04-24T19:11:08.647" Score="2" Body="&lt;p&gt;First of all, assume that the sensors we have are ideal (e.g. no latency, perfect accuracy, infinite (continuous) data frequency).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then we can know the rotation rate of each of the wheels. and how much they have been turning from T_zero (initial time) until time, T.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;making a few more assumptions, we can arrive at a computed X-Y location:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;wheel sizes do not change with time (because we are trusting the angular position of the wheels to determine the movement in that direction, and we have to assume a radius for the wheel)&lt;/li&gt;&#xA;&lt;li&gt;no slip in the wheels' turning direction.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Given these assumptions, calculations would follow as simple mathematics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depending on the operational scenarios, the validity of the assumptions should be re-considered. This might require some other fixing of coordinates using a secondary sensor-type. For example, in case there is an unnoticed slip of the wheels, the error would simly build up with time, and after some time the solution would be out of tolerances.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I came across &lt;a href=&quot;http://www.idsia.ch/~foerster/2006/1/omnidrive_kiart_preprint.pdf&quot; rel=&quot;nofollow&quot;&gt;this wonderful introduction to Xdrive robots&lt;/a&gt;. Which gives kinematics for their motion schemes, and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It gives another method for calculating the location, using external sensors. But, it is definitely a good article worth reading.&lt;/p&gt;&#xA;" OwnerUserId="9570" LastActivityDate="2015-04-24T19:11:08.647" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7102" PostTypeId="2" ParentId="6649" CreationDate="2015-04-25T05:24:08.343" Score="1" Body="&lt;p&gt;Assume that your motors can drive both forward and back. (which is not a must, but if the vehicle moves only forward, maneuvering will require a lot of space compared to a two-directional drive)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assume that you want to manually control speed, by commanding to all motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;variables:&#xA;r  = gyro yaw rate (can be positive or negative, assume (+) for yaw to left; assume we are interested in +/-10deg per second magnitude)&#xA;H  = heading from magnetometer (0 to 360)&#xA;H_com = commanded (desired) heading&#xA;M_com = speed term (motor power, controlled by the user)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;M_l = left motor power (can be positive or negative)&#xA;M_r = right motor power (can be positive or negative)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;M_l = M_com + Kr * r + Kh * (H_com - H)&#xA;M_r = M_com - Kr * r - Kh * (H_com - H)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Kp and Kh are to be found by analysis or trial and error. &#xA;(H_com-H) is the error term that the controller tries to zeroize, by moving the vehicle(H) to H_com.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Notes: &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;you should add some modulus logic, as you wouldn't want to go 300 degrees when you could only go 60 degrees to the desired heading.&lt;/li&gt;&#xA;&lt;li&gt;at max speeds (max forward, or max rearward), the yaw authority is limited (as motor speeds hit their max), so Kr and Kh may need to be altered to be functions of speed.&lt;/li&gt;&#xA;&lt;li&gt;for controller tuning strategies, &lt;a href=&quot;https://robotics.stackexchange.com/questions/167/what-are-good-strategies-for-tuning-pid-loops&quot;&gt;refer to this question&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="9570" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2015-04-25T05:24:08.343" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7103" PostTypeId="2" ParentId="7002" CreationDate="2015-04-25T15:47:28.800" Score="1" Body="&lt;p&gt;You need to use the mavlink parameter protocol, which is a coordinated set of mavlink messages between the ground control station and the vehicle (a bit trickier than just sending strings over the serial port, unfortunately).  The protocol is documented here: &lt;a href=&quot;http://qgroundcontrol.org/mavlink/parameter_protocol&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://qgroundcontrol.org/mavlink/parameter_protocol&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The following diagrams shows the flow of messages (replace &quot;QGroundControl&quot; with your application and &quot;MAV Component&quot; with your vehicle):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/h60s2.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(You might also want to double check the parameter names for the particular flight controller/vehicle you're using, e.g. here are the parameters for ArduCopter/APM:Copter: &lt;a href=&quot;http://copter.ardupilot.com/wiki/configuration/arducopter-parameters/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://copter.ardupilot.com/wiki/configuration/arducopter-parameters/&lt;/a&gt;)&lt;/p&gt;&#xA;" OwnerUserId="1488" LastActivityDate="2015-04-25T15:47:28.800" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7104" PostTypeId="2" ParentId="3090" CreationDate="2015-04-25T16:27:44.773" Score="0" Body="&lt;p&gt;nikhil's answer is not correct: You definitely don't have to change the ArduCopter code just to get it to stream &lt;code&gt;ATTITUDE&lt;/code&gt; messages (if that were true, how are all the ground control station apps showing the vehicle's changing attitude?)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In ArduCopter, the ATTITUDE message is streamed at a constant rate in Hz that is determined by the value of the &lt;a href=&quot;http://copter.ardupilot.com/wiki/configuration/arducopter-parameters/#extra_data_type_1_stream_rate_to_ground_station_sr0_extra1&quot; rel=&quot;nofollow&quot;&gt;&lt;code&gt;SR0_EXTRA1&lt;/code&gt;&lt;/a&gt; parameter.  I think the default rate is 10 Hz, but you should check the value of that parameter on your vehicle.  You may also want to check the values of &lt;code&gt;SR0_EXTRA2&lt;/code&gt; and &lt;code&gt;SR0_EXTRA3&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="1488" LastEditorUserId="1488" LastEditDate="2015-04-25T16:59:41.893" LastActivityDate="2015-04-25T16:59:41.893" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7105" PostTypeId="1" AcceptedAnswerId="7106" CreationDate="2015-04-25T17:48:37.403" Score="0" ViewCount="597" Body="&lt;p&gt;I have a quadcopter using a MultiWii(Arduino Mega) controller. I am curious if there is any way to connect it with ROS capable RPI. (That I could add to the quad itself).&lt;/p&gt;&#xA;" OwnerUserId="9537" LastActivityDate="2015-04-26T15:04:08.110" Title="Is it possible to use ROS on RPI with controller like MultiWii or similar?" Tags="&lt;arduino&gt;&lt;ros&gt;&lt;quadcopter&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="7106" PostTypeId="2" ParentId="7105" CreationDate="2015-04-25T22:46:23.157" Score="1" Body="&lt;p&gt;Yes! There is something called the &lt;a href=&quot;http://www.emlid.com/shop/navio-plus/&quot; rel=&quot;nofollow&quot;&gt;Navio+&lt;/a&gt; it runs a Linux kernel on the raspberry pi with the real-time extension, and runs Adrucopter on top of that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can also just connect the serial pins directly to the MultiWii and let the rpi do high level control and let the MultiWii do low level control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: &lt;a href=&quot;http://www.multiwii.com/wiki/index.php?title=Multiwii_Serial_Protocol&quot; rel=&quot;nofollow&quot;&gt;Here&lt;/a&gt; is the reference for the MultiWii serial protocol (MSP) it is very powerful allowing you to do everything from sending RC stick commands, to receiving and injecting GPS values.&lt;/p&gt;&#xA;" OwnerUserId="7066" LastEditorUserId="7066" LastEditDate="2015-04-26T15:04:08.110" LastActivityDate="2015-04-26T15:04:08.110" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7107" PostTypeId="2" ParentId="6980" CreationDate="2015-04-25T22:54:16.703" Score="1" Body="&lt;p&gt;You can configure it with a static ip address, and assign your laptop a (different) static ip address. &lt;a href=&quot;http://derekmolloy.ie/set-ip-address-to-be-static-on-the-beaglebone-black/&quot; rel=&quot;nofollow&quot;&gt;Here&lt;/a&gt; is a link to a guide to setting a static ip address.&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2015-04-25T22:54:16.703" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7108" PostTypeId="2" ParentId="7095" CreationDate="2015-04-26T15:23:51.650" Score="1" Body="&lt;p&gt;What kind of processing power are you hoping to carry to do the depth sensing/processing? I would recommend the &lt;a href=&quot;https://www.stereolabs.com/&quot; rel=&quot;nofollow&quot;&gt;ZED camera&lt;/a&gt; when paired with an Nvidia K1 it works great for mobile vision processing, it is not environmentally sealed so it can only operate in good weather. It works from about 2-30m for most applications. if you are looking for bigger objects (like building sized) it can work a little further, around 50m. &lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2015-04-26T15:23:51.650" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7109" PostTypeId="1" CreationDate="2015-04-26T15:29:11.833" Score="1" ViewCount="755" Body="&lt;p&gt;I would like to build a 70cm articulated robotic arm (not a scara one) that can lift between 10kg and 15kg (10kg would be awesome already, this payload includes the weight of the arm+gripper) and moves at 1 m/s (dreaming again :)). The goal is to make it similar to an human arm since I want to control it &quot;remotely&quot;, so the joint should not be able to rotate more than my arm ^^&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I know that I cannot uses servos available (like the overpriced dynamixel ones..)  with that payload. I also already excluded common linear actuators and less common ones like the pneumatic actuators (because of latency).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From what I read arms like the baxter ones uses elastic series actuators, so I guess that I should go that way, but there aren't a lot of details on how that works (getting a lot of 100x100 photos where you see nothing) and I have a lot of questions. &#xA;The only thing I could understand is that it uses 2 motors and a spring.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do they use brushed or brushless motors? DC motors or steppers ? I read that steppers aren't that good to handle collisions and have difficulties when used at their limits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, how is the spring mounted on the motor ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To sum up, I'm collecting any experience, diagrams, intel, or documents that you have on that topic :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS : my budget can't exceed +/- 1500$ for that arm.&lt;/p&gt;&#xA;" OwnerUserId="9582" LastEditorUserId="9582" LastEditDate="2015-04-28T14:48:49.377" LastActivityDate="2015-04-28T14:48:49.377" Title="Building industrial-like robotic arm" Tags="&lt;motor&gt;&lt;robotic-arm&gt;&lt;stepper-motor&gt;&lt;servomotor&gt;&lt;actuator&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7110" PostTypeId="1" CreationDate="2015-04-26T20:01:12.117" Score="1" ViewCount="91" Body="&lt;p&gt;i want to run two HC-SR04 on one PIC16F877A and send the value mesured by the two ultrasonic to serial port.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;this is my code using PIC C Compiler :&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8) &#xA;#define e1 PIN_B6&#xA;#define t1 pin_B7 &#xA;#define e2 pin_B4 &#xA;#define t2 pin_B5 &#xA;int a; &#xA;int distanse(int,int); &#xA;&#xA;void main()&#xA;{&#xA;&#xA;while(1){&#xA;int u1,u2;&#xA;u1=distanse(e1,t1);u2=distanse(e2,t2);&#xA;printf(&quot;%3u&quot;, u1);&#xA;printf(&quot;%3u&quot;, u2);&#xA;delay_ms(1000);&#xA;&#xA;}&#xA;}&#xA;&#xA;int distanse(int e,int t){&#xA;long long counter=0;&#xA;output_bit(t,1);delay_us(10);output_bit(t,0);&#xA;a=input(e);&#xA;while(a==0){a=input(e);}&#xA;while(a==1){counter=counter+1;a=input(e);}&#xA;return counter/3.333333;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;but the computer received random values ! &#xA;what is the problem ?&lt;/p&gt;&#xA;" OwnerUserId="9548" LastActivityDate="2015-05-01T01:07:06.257" Title="read from Ultrasonic HC-SR04" Tags="&lt;microcontroller&gt;&lt;programming-languages&gt;&lt;ultrasonic-sensors&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7111" PostTypeId="1" CreationDate="2015-04-27T12:56:19.337" Score="1" ViewCount="755" Body="&lt;p&gt;I am implementing a Denavit-Hartenberg forward transform for a 3-axes CNC mill. I know that the kinematic for such a machine is trivial and doesn't need DH, but I need to make appliable for other robots too. My implementation does the math correctly(I've verified that with another tool), but the transformation doesn't give me the results I would expect. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I assume that for 3-axes cartesian robot with orthogonal prismatic joints(=CNC mill) the resulting transformation matrix should give me the input parameters(d1-d3) back in its translation vector, but it somehow doesn't. Also, the resulting orientation matrix should have some &quot;nice&quot; values(90, 180, 270, etc.) and no odd ones(0.0528, 0.5987, etc,.). &#xA;Is my assumption wrong?&lt;/p&gt;&#xA;" OwnerUserId="9589" LastActivityDate="2015-05-27T15:29:24.293" Title="DH Forward Kinematics for a Cartesian Robot (CNC Mill)" Tags="&lt;forward-kinematics&gt;&lt;cnc&gt;&lt;dh-parameters&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7112" PostTypeId="1" AcceptedAnswerId="7123" CreationDate="2015-04-27T14:21:05.150" Score="0" ViewCount="248" Body="&lt;p&gt;I'm trying to create a function that allows me to more easily start a motor, but I'm running into a problem, I don't know the type to use for the &lt;code&gt;motorName&lt;/code&gt; argument. I'm using a VEX 269 Motor. Here's the function.&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void runMotor(MotorTypeHere motorName, int speed, int time)&#xA;{&#xA;  startMotor(motorName, speed);&#xA;  wait(time);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I just don't know what type to put for the &lt;code&gt;motorName&lt;/code&gt; argument. What type would it be?&lt;/p&gt;&#xA;" OwnerUserId="9590" LastEditorUserId="9590" LastEditDate="2015-04-27T15:13:31.347" LastActivityDate="2015-04-29T18:16:55.390" Title="What is the RobotC type for motors?" Tags="&lt;robotc&gt;&lt;vex&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7113" PostTypeId="2" ParentId="7109" CreationDate="2015-04-27T14:23:03.013" Score="2" Body="&lt;p&gt;A series elastic actuator is really just a motor/gearbox with passive compliance built in (hence the spring).  A google search finds &lt;a href=&quot;http://ihmc.us/groups/sea/&quot; rel=&quot;nofollow&quot;&gt;http://ihmc.us/groups/sea/&lt;/a&gt; (with links to some specs and information) and an older thesis, &lt;a href=&quot;http://groups.csail.mit.edu/lbr/hrg/1995/mattw_ms_thesis.pdf&quot; rel=&quot;nofollow&quot;&gt;http://groups.csail.mit.edu/lbr/hrg/1995/mattw_ms_thesis.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the motors &amp;amp; gearboxes you use will still have to be pretty high in performance, regardless of whether they have elastic elements.  (Sorry but I think your budget is far too low for this torque requirement.)&lt;/p&gt;&#xA;" OwnerUserId="9578" LastActivityDate="2015-04-27T14:23:03.013" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7114" PostTypeId="2" ParentId="7111" CreationDate="2015-04-27T14:38:10.347" Score="1" Body="&lt;p&gt;Okay, I feel really dumb now. Turns out my sine/cosine functions take radiant as input rather than degrees. As expected, the resulting transform matrix has &quot;nice&quot; values. Since my implementation and the other tool, which I checked the results with, both use rad as input. Consequentially I assumed the math was correct, which was false and resulted in odd numbers. &lt;/p&gt;&#xA;" OwnerUserId="9589" LastActivityDate="2015-04-27T14:38:10.347" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7115" PostTypeId="2" ParentId="7109" CreationDate="2015-04-27T15:43:48.750" Score="2" Body="&lt;p&gt;A &lt;a href=&quot;http://machinedesign.com/springs/exclusive-interview-gill-pratt-how-compliant-actuators-revolutionized-robotics&quot; rel=&quot;nofollow&quot;&gt;machinedesign.com article&lt;/a&gt;,  “Exclusive interview: Gill Pratt on how compliant actuators revolutionized robotics”, includes a close-up picture of an SEA (series elastic actuator) mechanism developed by a &lt;a href=&quot;http://mech.vub.ac.be/multibody_mechanics.htm&quot; rel=&quot;nofollow&quot;&gt;robotics research group at Vrije&lt;/a&gt; in Brussels, and a picture of a Baxter arm, captioned “In the larger red circle is one of Baxter's many compliant actuators, which give the robot a yielding motion that in turn allows for force-feedback control.”  The article suggests using affordable gearmotors, plus SEAs for compliance and energy conservation.  It also mentions some alternatives to SEAs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A &lt;a href=&quot;http://spectrum.ieee.org/automaton/robotics/humanoids/iit-coman-humanoid-robot&quot; rel=&quot;nofollow&quot;&gt;spectrum.ieee.org article&lt;/a&gt;, “This Humanoid Robot Gets Pushed Around But Stays on Its Feet”, describes a robot with numerous SEAs and has close-up pictures of springs in the joints.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Comment 1.&lt;/em&gt; Industrial robots exist that can meet the requirements listed in the question, but they typically cost 10 to 100 times as much as the amount mentioned.  If you can build such an arm for $1500, you probably can make a lot of money selling them!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Comment 2.&lt;/em&gt; I presume you have a particular industrial application in mind for the specified robotic arm.  You may do better asking how to meet the needs of the application instead of asking how to make an arm.  For example, it may be that a light-weight articulated boom could be quickly moved to a target location, then have its joints locked (a locked joint typically can support a larger load than a movable joint) and an overhead support cable tensioned up.  Then the 10-15 kg load would be towed along a line to the end of the boom.&lt;/p&gt;&#xA;" OwnerUserId="478" LastActivityDate="2015-04-27T15:43:48.750" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7116" PostTypeId="1" CreationDate="2015-04-27T20:01:38.920" Score="1" ViewCount="4423" Body="&lt;p&gt;I've read the &lt;a href=&quot;http://www.airspayce.com/mikem/arduino/AccelStepper/classAccelStepper.html&quot; rel=&quot;nofollow&quot;&gt;AccelStepper documentation&lt;/a&gt; on airspayce.com and it seems to be not possible to accelerate a stepper starting with a speed greater 0. Acceleration always starts from speed=0, I tried it with several variations of the code below...&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;AccelStepper.h&amp;gt;&#xA;int onOffPin = 9;&#xA;&#xA;AccelStepper stepper(AccelStepper::DRIVER, 2, 10);&#xA;&#xA;void setup()&#xA;{      &#xA;   stepper.setMaxSpeed(1000);&#xA;   stepper.setSpeed(200);&#xA;   stepper.setAcceleration(100);       &#xA;}&#xA;&#xA;void loop()&#xA;{  &#xA;    //turn motor on&#xA;    digitalWrite( onOffPin, HIGH ); &#xA;&#xA;    // go forwards&#xA;    digitalWrite( onOffPin, HIGH );&#xA;    stepper.move(1300);&#xA;    stepper.runToPosition(); // stepper shall start from speed 200, but it starts from speed 0; &#xA;&#xA;    // Now go backwards&#xA;    stepper.move(-1300);&#xA;    stepper.runToPosition(); &#xA;&#xA;    //turn motor off&#xA;    digitalWrite( onOffPin, LOW ); &#xA;    delay(2000);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I also tried to set the speed in the library's method &lt;code&gt;void AccelStepper::computeNewSpeed()&lt;/code&gt; directly, but I'm not that good in c++ and don't get it to work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anybody any ideas?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2&gt;UPDATE&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I tried to write some custom code in AccelStepper.cpp's method &lt;code&gt;void AccelStepper::computeNewSpeed()&lt;/code&gt; &#xA;My idea was to set the speed manually during acceleration/deceleration if the speed is below my intended value. At first I thought it couldn't be a big deal, but now I see that my cpp skills seems to be not good enough or I don't understand the library quite well. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void AccelStepper::computeNewSpeed()&#xA;{&#xA;    long distanceTo = distanceToGo(); // +ve is clockwise from curent location&#xA;    long stepsToStop = (long)((_speed * _speed) / (2.0 * _acceleration)); // Equation 16 &#xA;&#xA;    //now here goes my modification&#xA;    if (_speed &amp;lt; 200.0 &amp;amp;&amp;amp; _speed &amp;gt;= 0 ){&#xA;       setSpeed(200.0);&#xA;    }&#xA;    //I did no modification below this comment&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This results in a very slow stepper movement..&lt;/p&gt;&#xA;" OwnerUserId="9577" LastEditorUserId="9577" LastEditDate="2015-04-28T19:56:04.903" LastActivityDate="2015-04-28T19:56:04.903" Title="accelerate a stepper using arduino AccelStepper starting with a pre-defined speed" Tags="&lt;arduino&gt;&lt;control&gt;&lt;stepper-motor&gt;&lt;c++&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7117" PostTypeId="2" ParentId="3027" CreationDate="2015-04-27T21:46:45.287" Score="1" Body="&lt;p&gt;I have programmed a quad myself and learned to stay away from the PulseIn function. What it basically does is waiting and constantly reading the pin.&#xA;I believe Arduino UNO has 2 interrupt input pins, try using those.With some receivers it is possible to use OR ports if pulses are sent one after the other, and combine pulses into a CPPM signal. Interrupt handlers don't take too much time, all you need to do is to start and read a timer. Using this technique I got a rate of well over 200Hz&lt;/p&gt;&#xA;" OwnerUserId="9593" LastActivityDate="2015-04-27T21:46:45.287" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7119" PostTypeId="2" ParentId="3027" CreationDate="2015-04-28T09:22:17.743" Score="0" Body="&lt;p&gt;It is related with response time of electronic speed controller units and bldc motors. In discrete time only Ki and Kd have time variable. In a stable system If you change the sample rate you have to change Ki and Kd to companse it. So you can do it conversly. You can change just Ki and Kd constants instead of changing sample rate. both make same effect. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can look this link for relation between PID and sample rate : &lt;a href=&quot;http://support.motioneng.com/downloads-notes/tuning/scaling_pid_param.htm&quot; rel=&quot;nofollow&quot;&gt;http://support.motioneng.com/downloads-notes/tuning/scaling_pid_param.htm&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2015-04-28T11:27:02.553" LastActivityDate="2015-04-28T11:27:02.553" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="7120" PostTypeId="1" CreationDate="2015-04-28T15:11:09.820" Score="1" ViewCount="316" Body="&lt;p&gt;I've looked around but can't find the answer, to what I hope is a simple question. I'm working with a TI-SensorTag, and I want to be able measure the rotation around the unit's Z-axis. Basically I want to attach the tag to a clock pendulum, lie the clock on a table so the tag and clock face point up, and to measure the angular displacement of the pendulum as it swings back and forth. I'm hoping the mental image translated well! &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My understanding is that I can solve for displacement by multiplying my gyroscope readings by my sampling period, but I'm not sure how to compensate for drift. So my questions are: is my approach sound, and is the answer to drift to use the changing x and y accelerations? Or would I need to somehow incorporate the magnetometer readings?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="9598" LastActivityDate="2015-08-31T20:28:20.950" Title="Measuring angular displacement using the TI-SensorTag" Tags="&lt;sensors&gt;&lt;kinematics&gt;&lt;gyroscope&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7121" PostTypeId="1" AcceptedAnswerId="7122" CreationDate="2015-04-28T18:42:13.090" Score="3" ViewCount="1557" Body="&lt;p&gt;I have been working on trying to get the angle of the Create 2. I am trying to use this angle as a heading, which I will eventually use to control the robot. I will explain my procedure to highlight my problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have the Create tethered to my computer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;ol&gt;&#xA;&lt;li&gt;I reset the Create by sending Op code [7] using RealTerm.&#xA;The output is:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;bl-start&lt;br&gt;&#xA;  STR730&lt;br&gt;&#xA;  bootloader id: #x47175347 4C636FFF&lt;br&gt;&#xA;  bootloader info rev: #xF000&lt;br&gt;&#xA;  bootloader rev: #x0001&lt;br&gt;&#xA;  2007-05-14-1715-L&lt;br&gt;&#xA;  Roomba by iRobot!&lt;br&gt;&#xA;  str730&lt;br&gt;&#xA;  2012-03-22-1549-L&lt;br&gt;&#xA;  battery-current-zero 252&lt;/li&gt;&#xA;  &lt;/ol&gt;&#xA;  (The firmware version is somewhere in here, but I have no clue what to look for--let me know if you see it!) &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;I mark the robot so that I will know what the true angle change has been.&lt;/li&gt;&#xA;&lt;li&gt;I then send the following codes [128 131 145 0x00 0x0B 0xFF 0xF5 142 6]. This code starts the robot spinning slowly in a circle and request the sensor data from the sensors in the group with Packet ID 2. The output from the Create seen in RealTerm is 0x000000000000, which makes sense.&lt;/li&gt;&#xA;&lt;li&gt;I wait until the robot has rotated a known 360 degrees, then I send [142 2] to request the angle difference. The output is now 0x00000000005B.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The OI specs say that the angle measurement is in degrees turned since the last time the angle was sent; converting 0x5B to decimal is 91, which is certainly not 360 as expected. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;What am I doing wrong here?&lt;/strong&gt; Is the iRobot Create 2 angle measurement that atrocious, or is there some scaling factor that I am unaware of? are there any better ways to get an angle measurement?&lt;/p&gt;&#xA;" OwnerUserId="9585" LastEditorUserId="9585" LastEditDate="2015-04-28T21:24:15.610" LastActivityDate="2016-04-03T21:11:39.677" Title="iRobot Create 2: Angle Measurement" Tags="&lt;irobot-create&gt;&lt;roomba&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7122" PostTypeId="2" ParentId="7121" CreationDate="2015-04-28T20:31:38.470" Score="2" Body="&lt;p&gt;There is a known bug in the &lt;code&gt;angle&lt;/code&gt; command.  We are still working on a workaround.  In the meantime, please extract the angle yourself by using the left and right encoder counts.  See &lt;a href=&quot;https://robotics.stackexchange.com/questions/7062/create2-angle-packet-id-20&quot;&gt;this question&lt;/a&gt; for detailed equations.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-04-28T20:31:38.470" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="7123" PostTypeId="2" ParentId="7112" CreationDate="2015-04-28T22:02:57.863" Score="1" Body="&lt;p&gt;Looking at some of the docs I see that the startMotor function usually takes values like portN as in:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;startMotor(port8,-32);&#xA;startMotor(port9,128);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and I am also seeing that some code looks like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;motor[port8] = -32;&#xA;motor[port9] = 128;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;so that tells me that since it is an index into an array it must be just simply an &lt;code&gt;int&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt;&#xA;I can see on &lt;a href=&quot;http://help.robotc.net/WebHelpCortex/index.htm#page=ROBOTC_Functions_New/VEX2_Functions_Motors_and_Servos.htm&quot; rel=&quot;nofollow&quot;&gt;this page&lt;/a&gt; that within VEX it is actually a variable of type &lt;code&gt;tMotor&lt;/code&gt;. But it can't work as an index in C unless tMotor is an alias for some sort of int. Ultimately, the best choice would be to use &lt;code&gt;tMotor&lt;/code&gt; in your code.&lt;/p&gt;&#xA;" OwnerUserId="1075" LastEditorUserId="1075" LastEditDate="2015-04-29T18:16:55.390" LastActivityDate="2015-04-29T18:16:55.390" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7124" PostTypeId="1" CreationDate="2015-04-28T22:12:37.907" Score="0" ViewCount="482" Body="&lt;p&gt;I'm working on a project to make a SmartBall that can detect the velocity(km/h) , spin(degrees per second) and flightpath(trajectory) of the ball using Intel Edison with the 9DOF block (LSM9DS0 : 3-axis accelerometer, 3-axis gyroscope, and 3-axis magnetometer) &amp;amp; the battery block, I'm reading values from the 9DOF block by RTIMULib(Library for IMU chips). I've been working on integrating the acceleration data from the accelorometer to get the velocity then get the position, I know that this method is not really accurate as the integration error cumulate very fast but I rely on that my calculations will be done in a very short time (about 3 seconds) then i re-calculate again from the beginning after every kick so that error doesn't cumulate hardly, Also i only need an acceptable accuracy not a very high one. I discovered then that i'm dealing with projectile motion(ball kicking), so after considering this &amp;amp; searching in projectile motion equations i found that i must know the initial velocity and the angle of projection(theta) to be able to get my requirements. my problem that I don't know how to get any of these , I tried different approaches like getting the horizontal distance &amp;amp; getting the height to get their resultant(using pythagoras) then get the angle(assuming it's a right angle) in a very small time at the beggining of the projection , but i still couldn't get the height. The gyroscope outputs roll, pitch &amp;amp; yaw angles related to the sensor orientation but i'm still not using this as i'm assuming that the sensor will be fixed inside the ball so it's orientation will not be the same as the projection angle.Now What I really want is any approach/idea on how to get velocity &amp;amp; flightPath of a projectile using accelorometer and gyroscope data. Hope I made it clear , Any help on how to get my requirements is really appreciated, Thanks so much.&lt;/p&gt;&#xA;" OwnerUserId="9600" LastEditorUserId="9600" LastEditDate="2015-04-29T16:51:25.070" LastActivityDate="2017-05-07T13:29:11.307" Title="Using accelorometer and gyroscope to get velocity, spin &amp; flightpath of a ball in projectile motion" Tags="&lt;gyroscope&gt;" AnswerCount="0" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="7126" PostTypeId="2" ParentId="7095" CreationDate="2015-04-29T15:30:36.477" Score="1" Body="&lt;p&gt;If you want a low cost vision sensor that does all the work for you I sugest you look here -&gt; &lt;a href=&quot;http://www.cmucam.org/projects/cmucam5&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pixy Cam&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From here you can work with two cameras and build your application using stereo vision to achieve 3D. You will have some work, because you have to use some kind of controller (arduino, netduino, whatever), build your own algorithm, build a case, etc... but it's cheap and it works fine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, look here -&gt; &lt;a href=&quot;https://robotics.stackexchange.com/questions/7050/questions-regarding-3d-scanning-and-camera-choice&quot;&gt;Question regarding 3d scanning and camera choice&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9492" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2015-04-29T15:42:54.273" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7127" PostTypeId="2" ParentId="7050" CreationDate="2015-04-29T16:57:12.963" Score="1" Body="&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://pointclouds.org/&quot; rel=&quot;nofollow&quot;&gt;PCL&lt;/a&gt; library has all the functionality you need for 3D scanning, as well as it have the complete GPU pipeline, take a look at &lt;a href=&quot;http://pointclouds.org/documentation/tutorials/using_kinfu_large_scale.php&quot; rel=&quot;nofollow&quot;&gt;kinfu&lt;/a&gt;. Here is some &lt;a href=&quot;http://pointclouds.org/documentation/tutorials/in_hand_scanner.php#in-hand-scanner&quot; rel=&quot;nofollow&quot;&gt;tutorial&lt;/a&gt; regarding 3D scanning. Take a look at &lt;a href=&quot;https://www.youtube.com/watch?v=4g9Hap4rX0k&quot; rel=&quot;nofollow&quot;&gt;MeshLab&lt;/a&gt; too see how to do it manually.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Any approach will work. With object rotating on the platform you potentially has more information of object position, thus making registration step more robust (see tutorial). But anyway all the scanning algorithm steps will be the same.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I don't recommend you to use stereo cameras or single moving camera (structure from motion approach) for 3D scanning. &lt;a href=&quot;http://en.wikipedia.org/wiki/Structured-light_3D_scanner&quot; rel=&quot;nofollow&quot;&gt;Structured light&lt;/a&gt; sensors and &lt;a href=&quot;http://en.wikipedia.org/wiki/Time-of-flight_camera&quot; rel=&quot;nofollow&quot;&gt;time-of-flight&lt;/a&gt; sensors will give you much better results. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;It is possible. Results will probably be marginally better. More data =&gt; better results.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Resolution and FPS - yes. But you need beefier computer to process all the data. Depending on used scanning algorithm global shuttering as well as controlled illumination and exposure are important if you want to achieve submillimeter accuracy or reconstruct texture. But I would not bother about that in the beginning.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Here are some structure light or ToF depth imaging sensors you might consider, including the ones you mentioned. Choose one according to your min/max range requirements, budget, processing power, SDK availability. Currently the easiest to start working with are Primesense/ASUS cameras. ROS/OpenCV/PCL - all of the support these two cameras and Kinect with a little bit of hacking:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/B006UIS53K&quot; rel=&quot;nofollow&quot;&gt;Kinect 1&lt;/a&gt;, &lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/B00KZIVEXO&quot; rel=&quot;nofollow&quot;&gt;2&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/B00KO92DA2&quot; rel=&quot;nofollow&quot;&gt;Primsense Carmine 1.082&lt;/a&gt;, 1.09 or &lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/B00KK2OGC6&quot; rel=&quot;nofollow&quot;&gt;Asus Xtion&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/B00EVWX7CG&quot; rel=&quot;nofollow&quot;&gt;Creative Senz3D&lt;/a&gt; (based on &lt;a href=&quot;http://www.softkinetic.com/Products/DepthSenseCameras&quot; rel=&quot;nofollow&quot;&gt;SoftKinectic&lt;/a&gt; module)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://store.structure.io/store&quot; rel=&quot;nofollow&quot;&gt;Structure.io&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://software.intel.com/en-us/realsense/f200camera&quot; rel=&quot;nofollow&quot;&gt;Intel RealSense&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.pmdtec.com/products_services/reference_design_pico_pico_s.php&quot; rel=&quot;nofollow&quot;&gt;PMD Pico&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.espros.ch/3d-imagers&quot; rel=&quot;nofollow&quot;&gt;ESPROS&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="9572" LastEditorUserId="9572" LastEditDate="2015-05-01T00:39:51.043" LastActivityDate="2015-05-01T00:39:51.043" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7128" PostTypeId="1" CreationDate="2015-04-30T02:38:22.683" Score="2" ViewCount="136" Body="&lt;p&gt;I was wondering how I could determine a robot's distance from a fixed point when the robot itself is constantly changing positions. I can keep encoders on the wheels and can also get data from a gyroscope and an accelerometer.&lt;/p&gt;&#xA;" OwnerUserId="9608" LastEditorUserId="9176" LastEditDate="2015-05-11T08:34:26.893" LastActivityDate="2015-05-11T08:34:26.893" Title="Determining a robot's distance from a certain point when the robot's position is constantly changing" Tags="&lt;localization&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7129" PostTypeId="1" CreationDate="2015-04-30T07:27:15.383" Score="0" ViewCount="295" Body="&lt;p&gt;I'm wondering if there's a feature to &quot;flip&quot; the rotation direction with Dynamixel (I'm using MX-106). For example, if I give +1.57 to the motor, then it interprets it as &lt;code&gt;-1.57&lt;/code&gt;. And the other way around.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm using &lt;a href=&quot;http://wiki.ros.org/dynamixel_motor&quot; rel=&quot;nofollow&quot;&gt;its ROS driver&lt;/a&gt; package that doesn't seem to explicitly claim that there's a feature to do this, although there is &lt;a href=&quot;http://answers.ros.org/question/59872/dynamixel-wheel_mode/?answer=117281#post-id-117281&quot; rel=&quot;nofollow&quot;&gt;a question&lt;/a&gt; where a user reported he was able to do this from source code. But I failed to replicate. So I first wanted to ask about the capability of the device itself since I don't know if the limitation comes from the Dynamixel device or from ROS driver.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;(UPDATE) Usecase of mine is that I have multiple robots where the direction of how Dynamixel is attached is different per robot, and ideally like to flip the motor's direction at driver's level so that I can keep using the same controller software.&lt;/p&gt;&#xA;" OwnerUserId="60" LastEditorUserId="60" LastEditDate="2015-05-04T01:55:44.563" LastActivityDate="2015-05-04T01:55:44.563" Title="(Dynamixel) Inverse rotation direction" Tags="&lt;servomotor&gt;&lt;dynamixel&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7130" PostTypeId="2" ParentId="7120" CreationDate="2015-04-30T09:13:28.917" Score="1" Body="&lt;p&gt;For your application the magnetometer data are the best to use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The accelerometer data are completely useless. The gyro data have the drift problem, but the magnetometer data are the best.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The earth's magnetic field can be seen like some kind of vector field. Any place on the earth is a specific field, which you can calculate on this webpage: &lt;br&gt; &lt;a href=&quot;http://www.ngdc.noaa.gov/geomag-web/#igrfwmm&quot; rel=&quot;nofollow&quot;&gt;http://www.ngdc.noaa.gov/geomag-web/#igrfwmm&lt;/a&gt; &lt;br&gt;&#xA;So basically the vertical component is useless for you application. In addition, you see, that east component is way smaller than the north component. So you can neglect the east component. &#xA;The rest is applying a simple trigonometric operator on the measurement and you are done.&lt;/p&gt;&#xA;" OwnerUserId="6911" LastActivityDate="2015-04-30T09:13:28.917" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7131" PostTypeId="2" ParentId="7128" CreationDate="2015-04-30T10:07:09.493" Score="3" Body="&lt;p&gt;If you know the position of the point at the begin, an easy solution would be to implement &lt;a href=&quot;https://en.wikipedia.org/wiki/Dead_reckoning&quot; rel=&quot;nofollow&quot;&gt;Dead Reckoning&lt;/a&gt; using the encoder value. Knowing the position of the robot at time &lt;em&gt;t&lt;/em&gt;, compare it to its initial position and you can easily find where the fixed point is, in the robot frame (and thus calculate the distance).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then to compensate the drift create by the dead reckoning process, you can use the values given by your IMU (gyro and accelerometer).&lt;/p&gt;&#xA;" OwnerUserId="1615" LastActivityDate="2015-04-30T10:07:09.493" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7132" PostTypeId="2" ParentId="7128" CreationDate="2015-04-30T12:43:52.173" Score="2" Body="&lt;p&gt;In addition to Malc's answer, a simple Dead Reckoning Algorythm might look like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;X_k = X_{k-1} + f(u)&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where:&#xA;$$&#xA;X=\left(\! \begin{array}{c}&#xA;      PosX \\&#xA;      PosY \\&#xA;Heading&#xA;    \end{array} \!\right) \phantom {AAAAA} u=\left(\! \begin{array}{c} EncLeft \\ EncRight \end{array} \!\right)&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$f(u)$ is the change of the state $X$ since the last measurement. To calculate this change you need the Measurement $u$, which is in the most simple version just your Encoder values. In this case the encoder values are already transformed to their respective distance, therefore the unit is in meters or something similar. &lt;br&gt;&#xA;In addition you need your wheelbase $r$ and the SamplingTime $Ts$ of your algorythm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The update of $PosX$ might be:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;PosX_{(k)} =PosX_{(k-1)} + \cos {(Heading_{(k)})} \cdot  \frac{EncLeft_{(k)} +EncRight_{(k-1)}} 2&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similar for $PosY$:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;PosY_{(k)} =PosY_{(k-1)} + \sin {(Heading_{(k-1)})} \cdot  \frac{EncLeft_{(k)} +EncRight_{(k)}} 2&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The change in heading might be expressed with:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;Heading_{(k)}=Heading_{(k-1)}+ \arctan \left(\! \frac{EncLeft-EncRight} r \!\right)&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some Points, like the calculation of the heading, are pretty simplified, but may work in &quot;homemade&quot; application &lt;br&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further improvements might be done with feedback from the IMU sensor.&lt;/p&gt;&#xA;" OwnerUserId="6911" LastActivityDate="2015-04-30T12:43:52.173" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7133" PostTypeId="2" ParentId="7128" CreationDate="2015-04-30T17:24:50.153" Score="1" Body="&lt;p&gt;&lt;a href=&quot;http://chess.eecs.berkeley.edu/eecs149/documentation/differentialDrive.pdf&quot; rel=&quot;nofollow&quot;&gt;This document&lt;/a&gt; has a good overview of mobile robot kinematics which is required to perform dead reckoning.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Adding the IMU provides more information and can correct for drift of the encoders.  But now you need to fuse the data, typically with a kalman or particle filter.  Traditionally, mobile robots will also have a planar laser range finder (LIDAR) sensor such as a &lt;a href=&quot;http://www.robotshop.com/en/hokuyo-urg-04lx-ug01-scanning-laser-rangefinder.html&quot; rel=&quot;nofollow&quot;&gt;Hokuyo&lt;/a&gt;.  By doing &lt;a href=&quot;http://wiki.ros.org/laser_scan_matcher&quot; rel=&quot;nofollow&quot;&gt;incremental scan matching&lt;/a&gt; you can further improve accuracy.  In addition to now being able to map and such.  This is approaching SLAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additionally, determining &quot;ground truth&quot; location is achieved through the use of other sensor modalities.  For example a motion capture system like &lt;a href=&quot;http://www.optitrack.com/&quot; rel=&quot;nofollow&quot;&gt;Optitrack&lt;/a&gt;, or a webcam pointed at the ceiling with &lt;a href=&quot;http://april.eecs.umich.edu/wiki/index.php/AprilTags&quot; rel=&quot;nofollow&quot;&gt;April tags&lt;/a&gt; on it.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-04-30T17:24:50.153" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7134" PostTypeId="2" ParentId="7099" CreationDate="2015-05-01T00:52:14.550" Score="1" Body="&lt;p&gt;For you, the safest option is probly be the &lt;a href=&quot;http://www.powerswitchtail.com/Pages/default.aspx&quot; rel=&quot;nofollow&quot;&gt;Power Switch Tail&lt;/a&gt; It needs no transistors and is very simple, simply set the arduino pin high or low to turn on or off the connected device. Just be careful connecting it to Vacuums and other inductive loads (ie those with motors) as they draw a large current on startup. &lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2015-05-01T00:52:14.550" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7135" PostTypeId="2" ParentId="7110" CreationDate="2015-05-01T01:07:06.257" Score="1" Body="&lt;p&gt;Ultrasonic sensors work by emitting a set of pulses and reading the return signal (&lt;a href=&quot;https://www.teachengineering.org/view_lesson.php?url=collection/umo_/lessons/umo_sensorswork/umo_sensorswork_lesson06.xml&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt; is a better overview), this causes problems when you have more than one as they cannot distinguish between their own sensor and the other. I would suggest putting a 500ms delay after each reading to avoid as much interference as possible while you keep the same read rate.&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2015-05-01T01:07:06.257" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7136" PostTypeId="2" ParentId="6366" CreationDate="2015-05-01T01:22:01.253" Score="1" Body="&lt;p&gt;Depends whether you're talking Point to point or just in a wifi field. According to the &lt;a href=&quot;http://cdn.sparkfun.com/datasheets/Wireless/WiFi/ds_xbeewifis6b.pdf&quot; rel=&quot;nofollow&quot;&gt;datasheet&lt;/a&gt; the transmit power is +16dBm or 40 mW and a maximum sensitivity of -93dBm. According to &lt;a href=&quot;http://www.afar.net/rf-link-budget-calculator/&quot; rel=&quot;nofollow&quot;&gt;my favorite link budget calculator&lt;/a&gt; with 2 of these modules both with 22dBi gain antennas on them you will get around 6 miles (RF line of sight) out of them with a respectable 33dB fade margin. But I suspect you are asking about accessing a standard wifi router, and with a receiving antenna gain of 0dBi (perfictaly omnidirectional) and a sensitivity of -70dBm (crappy ap) you will have a fade margin of around 13dB which would work, and I suspect it would be higher. So, those modules should work for your application, but the best way to find out is to test them. &lt;/p&gt;&#xA;" OwnerUserId="7066" LastEditorUserId="7066" LastEditDate="2015-05-03T15:47:58.180" LastActivityDate="2015-05-03T15:47:58.180" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7137" PostTypeId="1" CreationDate="2015-05-01T04:49:47.053" Score="2" ViewCount="564" Body="&lt;p&gt;I am building a quadcopter using the Arduino Uno with a 6dof accelerometer and gyro. I will be adding a separate 3 axis magnetometer soon for heading. I have successfully implemented the code that reads the data coming in from these sensors and prints them out. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have also checked for bias by averaging 100 measurements. My code calculates the pitch from the accel and pitch from the gyro respectively:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;pitchAccel = atan2((accelResult[1] - biasAccelY) / 256, (accelResult[2] - biasAccelZ) / 256)*180.0 / (PI); &lt;/p&gt;&#xA;&#xA;&lt;p&gt;pitchGyro +=((gyroResult[0] - biasGyroX) / 14.375)*dt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am then using a complementary filter to fuse the two readings together like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;pitchComp = (0.98*pitchGyro) + (pitchAccel*0.02);&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am stuck on how to proceed from here. I am using the same procedure for roll, so I now have readings for pitch and roll from their respective complementary filter outputs. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have read a lot of articles on the DCM algorithm which relates the angles from the body reference frame to the earth reference frame. Should that be my next step here? Taking the pitch and roll readings in the body reference frame and transforming them to the earth reference frame? Repeat the entire procedure for yaw using the magnetometer? If yes, how should I go about doing the transformations? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I understand the math behind it, but I am having a hard time understanding the actual implementation of the DCM algorithm code-wise. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help is appreciated!&lt;/p&gt;&#xA;" OwnerUserId="9618" LastActivityDate="2020-08-19T21:50:06.033" Title="Understanding the various attitude estimation methods" Tags="&lt;arduino&gt;&lt;quadcopter&gt;&lt;accelerometer&gt;&lt;gyroscope&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7138" PostTypeId="1" AcceptedAnswerId="7150" CreationDate="2015-05-01T08:11:07.247" Score="2" ViewCount="453" Body="&lt;p&gt;I'm working on my own ROV project, but I find OpenROV have a &lt;a href=&quot;https://github.com/OpenROV/openrov-software/releases/tag/v2.5.0&quot; rel=&quot;nofollow&quot;&gt;ready to use image&lt;/a&gt; for my BB so want to use that instead of making my own program, and I already deployed the image, but I can't find which three pins find that send PWM signal for ESC's? Please help.&lt;/p&gt;&#xA;" OwnerUserId="9305" LastEditorUserId="9305" LastEditDate="2015-05-02T11:18:44.277" LastActivityDate="2015-05-11T14:22:36.553" Title="Pins in OpenROV that control the motors?" Tags="&lt;mobile-robot&gt;&lt;beagle-bone&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7139" PostTypeId="1" AcceptedAnswerId="7141" CreationDate="2015-05-01T10:38:24.860" Score="1" ViewCount="176" Body="&lt;p&gt;I have a PTU system whose transfer function I need to determine. The unit receives a velocity and position, and move towards that position with the given velocity. What kind of test would one perform for determining the transfer function...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know Matlab provides a method. The problem, though, is that I am bit confused on what kind of test I should perform, and how I should use Matlab to determine the transfer function.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The unit which is being used is a Flir PTU D48E&lt;/p&gt;&#xA;&#xA;&lt;p&gt;---&gt; More about the system &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The input to the system is pixel displacement of an object to the center of the frame. The controller I am using now converts pixel distances to angular distances multiplied by a gain $K_p$. This works fine. However, I can't seem to prove why that it works so well, I mean, I know servo motors cannot be modeled like that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The controller is fed with angular displacement and its position now =&gt; added together give me angular position I have to go to. &#xA;The angular displacement is used as the speed it has to move with, since a huge displacement gives a huge velocity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By updating both elements at different frequency I'm able to step down the velocity such that the overshoot gets minimized. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem here is: if I have to prove that the transfer function I found fits the system, I have to do tests somehow using the &lt;code&gt;ident&lt;/code&gt; function in Matlab, and I'm quite unsure how to do that. I'm also a bit unsure whether the PTU already has a controller within it, since it moves so well, I mean, it's just simple math, so it makes no sense that I'll convert it like that.&lt;/p&gt;&#xA;" OwnerUserId="9620" LastEditorUserId="6941" LastEditDate="2015-05-02T11:27:16.107" LastActivityDate="2015-06-01T13:26:29.343" Title="Determining transfer function of a PTU for visual tracking" Tags="&lt;control&gt;" AnswerCount="1" CommentCount="17" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7140" PostTypeId="1" CreationDate="2015-05-01T12:38:04.897" Score="12" ViewCount="396" Body="&lt;p&gt;What is the difference between &lt;em&gt;Smoothing and Mapping&lt;/em&gt; (SAM) and &lt;em&gt;Simultaneous Localization and Mapping&lt;/em&gt; (SLAM)? These general approaches seem closely related. Can someone describe the differences?&lt;/p&gt;&#xA;" OwnerUserId="9061" LastActivityDate="2015-05-09T15:39:36.940" Title="What is the difference between SAM and SLAM?" Tags="&lt;slam&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7141" PostTypeId="2" ParentId="7139" CreationDate="2015-05-01T12:39:08.743" Score="1" Body="&lt;p&gt;Imagine for a moment that you keep the input velocity fixed throughout the identification experiment, then you might inject into the system a sudden change in the final commanded position set-point while measuring as feedback the current position of your equipment (e.g. joint encoders). You will thus come up with a bunch of profiles of &lt;em&gt;commanded vs. feedback positions&lt;/em&gt; for your identification goal. To this end you can profitably rely on the &lt;code&gt;ident&lt;/code&gt; tool of the &lt;strong&gt;MATLAB System Identification Toolbox&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Explore the system response against different input position steps and remember to validate any result over profiles sets that you did not use during identification.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, you could assume that varying the input velocity will have an impact on the internal controller responsivity, since of course what you're going to model is the whole apparatus made up of the internal actuators, controller, etc. In theory, you should repeat the identification experiment over a range of different input velocities.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;I'll expand hereinafter a little bit further, given the fresh info you provided.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's clear that there is an internal controller that converts your velocity input in a proper signal (usually voltage) actuating the motors. If you don't trust this internal loop, then you have to identify the plant and apply compensation as follows.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Setting&lt;/strong&gt;: identification of a system controlled in velocity. Hence, input $=$ commanded velocity $v$; output $=$ encoder feedback $\theta$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Procedure&lt;/strong&gt;: you inject a chirp in velocity and you collect encoders. You can use &lt;code&gt;ident&lt;/code&gt; to come up with a transfer function of your motor controlled in velocity at &quot;high-level&quot;. This transfer function should resemble a pure integrator but it won't. What makes this difference needs to be compensated with the design of your velocity controller. This procedure has to be repeated for the two axes of the PTU. How to design a proper controller by putting its poles and zeros it's a matter of knowledge you should have; to do that of course you'll exploit the identified transfer function.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: you don't have vision in the loop yet, just position feedback from the encoders. This way you can refine the velocity control of your system, so that in the end, given a target angular position $\theta_d$ where you want to go, you know how to form the proper velocity commands $v$ to send to the device at run-time, while reading back the corresponding encoders $\theta$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then &lt;strong&gt;vision kicks in&lt;/strong&gt;. The vision processing will tell you where the face centroid $p_d$ is with respect to the image center; this information is refreshed continuously at run-time. Then, using the &lt;strong&gt;intrinsic parameters&lt;/strong&gt; of the &lt;a href=&quot;http://en.wikipedia.org/wiki/Pinhole_camera_model&quot; rel=&quot;nofollow&quot;&gt;pinhole model&lt;/a&gt; of your camera, you'll have an estimate of which angular positions this pixel corresponds to.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is not that difficult to determine. Knowing the centroid coordinates $p_d$ and assuming that we know how far the face lies from the camera (let's say &lt;code&gt;1 m&lt;/code&gt; but we don't care about the real distance), that is we know its $z$ component in the camera reference frame, the pinhole model gives us a way to find out the face $x$ and $y$ components in the camera frame. Finally, trigonometry provides you with the delta angles to add up to the current camera encoders that will in turn let you compute the absolute target angular positions. These latter values will represent the angular set-point for the above velocity controller.&lt;/p&gt;&#xA;&#xA;Here comes the math&#xA;&#xA;&lt;p&gt;Given $p_d=\left(u,v\right)$ the face centroid and $z$ the distance of the face from the camera, it holds:&#xA;$$&#xA;\left( \begin{array}{c} x \\ y \\ z \\ 1 \end{array} \right) = \Pi^\dagger \cdot \left( \begin{array}{c} z \cdot u \\ z \cdot v \\ z \end{array} \right),&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $x,y,z$ are the Cartesian coordinates of the face in the camera frame and $\Pi^\dagger$ is the pseudoinverse of the matrix $\Pi \in \mathbb{R}^{3 \times 4}$ containing the intrinsic parameters of your camera (i.e. the focal length, the pixel ratio and the position of the principal point - browse internet for that - there are standard procedures to estimate this matrix). We are not interested in $z$, so that you can put in the above equation whatever value for $z$ you want (say &lt;code&gt;1 m&lt;/code&gt;), but remember to be consistent in the following. Given $u,v$ you get $x,y$ as output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you have $x,y$ you can compute the angular variations $\Delta\phi_p$ and $\Delta\phi_t$ for the &lt;em&gt;pan&lt;/em&gt; and the &lt;em&gt;tilt&lt;/em&gt;, respectively:&#xA;$$&#xA;\Delta\phi_p=\arctan\frac{x}{z} \\&#xA;\Delta\phi_t=-\arctan\frac{y}{z}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, the absolute angular positions used as set-point will be:&#xA;$$&#xA;\phi_p:=\phi_p+\Delta\phi_p \\&#xA;\phi_t:=\phi_t+\Delta\phi_t&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively, we could also identify the whole system with the visual feedback in place of the motor encoders (&lt;em&gt;visual servoing&lt;/em&gt;). Here, the transfer function will tell us the impact of a velocity command directly on the displacement a pixel undergoes. Intuitively, this identification will be more difficult because we put everything together and it's likely that we won't achieve the same performance of the first method.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2015-05-02T12:41:07.167" LastActivityDate="2015-05-02T12:41:07.167" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="7142" PostTypeId="2" ParentId="7140" CreationDate="2015-05-01T16:39:08.477" Score="8" Body="&lt;p&gt;SLAM is the process of locating oneself in a totally unknown environment where you are simultaneously mapping your environment and plotting your position in that environment. SAM is a technique used in SLAM to help keep the map constant by correlating current data with past data to normalize sensor error, It is simply one of many techniques for this purpose.  &lt;/p&gt;&#xA;" OwnerUserId="7066" LastEditorUserId="9321" LastEditDate="2015-05-09T15:39:36.940" LastActivityDate="2015-05-09T15:39:36.940" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7143" PostTypeId="2" ParentId="7137" CreationDate="2015-05-01T16:53:30.387" Score="1" Body="&lt;p&gt;I will shamelessly steal content from another anwser I gave:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;First determine orientation based on information from both the gyroscope and accelerometer. The accelerometer is accurate in the long term while the gyroscope is accurate in the short term, so you will need some kind of sensor fusion algorithm to determine the&amp;quot;true&amp;quot; orientation of the quad. The most popular one is the &lt;a href=&quot;http://en.wikipedia.org/wiki/Kalman_filter&quot; rel=&quot;nofollow noreferrer&quot;&gt;Kalman Filter&lt;/a&gt; but many others are available to choose from.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;You have already done this, I would suggest though looking into more sophisticated estimation techniques like the Kalman filter to improve performance&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The next thing you will want to do is build a simple rate controller where you try to match the rate of rotation on a certain axis to the rate commanded by the controller&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This should probably be your next step&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;after you have a rate controller you can build a simple stabilized controller, where instead of commanding the rate you command a certain angle. You take the desired angle and the current angle and based on those values calculate a desired rate to close that gap and then feed that into the rate controller.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You will probably need a RC controller and receiver set, you will need to read the PWM values from the receiver in order to take command input&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://ghowen.me/build-your-own-quadcopter-autopilot/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here&lt;/a&gt; is my favorite resource on the matter it helped me when I was making my first flight controller from scratch.&lt;/p&gt;&#xA;&lt;p&gt;Good luck!&lt;/p&gt;&#xA;" OwnerUserId="7066" LastEditorUserId="7066" LastEditDate="2020-08-19T21:50:06.033" LastActivityDate="2020-08-19T21:50:06.033" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="7146" PostTypeId="1" AcceptedAnswerId="7147" CreationDate="2015-05-02T20:27:20.423" Score="0" ViewCount="555" Body="&lt;p&gt;I am new to robotics, however I am designing a PID to control the angular velocity (azimuth, elevation) of a couple of Faulhaber motors.&#xA;The input to the PID control is the actual angular velocity, which is not observed though, since it is derived from the position of each motor at time $t$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PID sample period is aprox. &lt;code&gt;30 ms&lt;/code&gt;, whereas the input data rate from the joystick is aprox. &lt;code&gt;300 samples/s&lt;/code&gt;, corresponding to a sample period of &lt;code&gt;3.33 ms&lt;/code&gt;. The joystick input gets transformed into the desired angle speed, that the PID will control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was initially filtering position data using a normal 2D linear &lt;strong&gt;Kalman Filter&lt;/strong&gt;, but the angular velocity is not linear (by formula), hence I switched to &lt;strong&gt;Extended Kalman&lt;/strong&gt; filtering.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My questions are the following:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Is this latter approach that makes use of EKF correct?&lt;/li&gt;&#xA;&lt;li&gt;Which are the parameters that I have to check in order to properly set the update rate of the PID loop?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Thx in advance!&lt;/p&gt;&#xA;" OwnerUserId="9628" LastEditorUserId="6941" LastEditDate="2015-05-03T01:55:56.073" LastActivityDate="2015-05-03T01:55:56.073" Title="Estimating angular speed from position for control purpose" Tags="&lt;pid&gt;&lt;ekf&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7147" PostTypeId="2" ParentId="7146" CreationDate="2015-05-02T21:02:14.193" Score="1" Body="&lt;p&gt;Why did you switch to &lt;strong&gt;EKF&lt;/strong&gt;? &lt;strong&gt;KF&lt;/strong&gt; is standard for estimating the angular rate of a electrical motor, whose transfer function is linear indeed. You might want to consider exploring also the &lt;strong&gt;Savitzky-Golay&lt;/strong&gt; filter as a valid alternative, which is not model based.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Concerning the sample period of the controller, it is normally a good rule to take a frequency separation of one decade, at least, between the rate of the system and the bandwidth of the input signal. Therefore, the actual sample rate of the joystick input is an overkill.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A sample period for the PID of &lt;code&gt;5-10 ms&lt;/code&gt; is usually fine, given the low mechanical cut-off frequency of the motor (higher rates are better, but not required). Then, acquire the joystick at &lt;code&gt;&amp;gt;50 ms&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2015-05-02T21:13:12.743" LastActivityDate="2015-05-02T21:13:12.743" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7148" PostTypeId="1" CreationDate="2015-05-03T09:16:14.947" Score="1" ViewCount="2704" Body="&lt;p&gt;I am trying to exert a desired load of 0.07 N.m on a BLDC motor shaft whose length is 0.750in and diameter is 0.3125in (0.008m). I can go to a machine shop and get a small adjustable cylindrical coupling made for my shaft. But I need it to exert close to desired torque at a speed of 2100 rpm (220 rad/s). I tried doing some calculations, according to the formula &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Torque = speed * mass * (radius)^2&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I solve this equation with T = 0.07 N.m, speed = 220 rad/sec, radius = 0.004 m, I get around 20 kg for mass, which is huge!!!. It is more than the mass of the motor. Can you please suggest a convenient way to load the motor. Thank you.&lt;/p&gt;&#xA;" OwnerUserId="9630" LastEditorUserId="9630" LastEditDate="2015-05-03T15:10:56.083" LastActivityDate="2015-05-04T15:02:11.063" Title="An easy way to exert desired load on a motor shaft?" Tags="&lt;motor&gt;&lt;brushless-motor&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7150" PostTypeId="2" ParentId="7138" CreationDate="2015-05-03T14:44:33.707" Score="3" Body="&lt;h2&gt;OpenROV Cape&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;If I understand things correctly,&#xA;the OpenROV motors are connected to ESCs that are connected to Arduino Digital pins 9, 10, and 11.&#xA;According to the &lt;a href=&quot;http://www.arduino.cc/en/Hacking/PinMapping168&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;ATmega168/328-Arduino Pin Mapping&quot;&lt;/a&gt;, that corresponds to physical pins 15, 16, and 17 respectively on the 28-pin ATmega328 DIP.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/CyLW7.jpg&quot; alt=&quot;enter image description here&quot;&gt;&#xA;A nice diagram on the OpenROV wiki showing a photo of the OpenROV Cape and where to connect the Port, Vertical, and Starboard ESCs to the cape&#xA;(diagram from &lt;a href=&quot;https://forum.openrov.com/t/wiki-buildout/1585&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://forum.openrov.com/t/wiki-buildout/1585&lt;/a&gt; ).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/MD3Gh.jpg&quot; alt=&quot;enter image description here&quot;&gt;&#xA;The Arduino IDE is used to program the ATmega328 in a 28-pin DIP package on the other side of the OpenROV Cape, shown here.&#xA;(photo from &#xA;&lt;a href=&quot;http://www.bluebird-electric.net/artificial_intelligence_autonomous_robotics/open_rov_source_underwater_robots_for_exploration_education.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;Bluebird Marine Systems: OpenROV underwater robots for educational exploration&quot;&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why are there 2 not-quite-the-same Arduino firmware folders,&#xA;&lt;a href=&quot;https://github.com/OpenROV/openrov-software/tree/v2.5.0/arduino/OpenROV&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/OpenROV/openrov-software/tree/v2.5.0/arduino/OpenROV&lt;/a&gt;&#xA;and &lt;a href=&quot;https://github.com/OpenROV/openrov-software-arduino/tree/master/OpenROV&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/OpenROV/openrov-software-arduino/tree/master/OpenROV&lt;/a&gt; ?&#xA;I'm guessing that the &quot;openrov-software-arduino&quot; version is the latest version.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://github.com/OpenROV/openrov-software-arduino/blob/master/OpenROV/Cape.h&quot; rel=&quot;nofollow noreferrer&quot;&gt;OpenROV Cape.h file&lt;/a&gt; defines those pins:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#define PORT_PIN 9&#xA;#define VERTICAL_PIN 10&#xA;#define STARBOARD_PIN 11&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Those definitions are used in the &lt;a href=&quot;https://github.com/OpenROV/openrov-software-arduino/blob/master/OpenROV/Thrusters2X1.cpp&quot; rel=&quot;nofollow noreferrer&quot;&gt;OpenROV Thrusters2X1.cpp file&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Motor port_motor(PORT_PIN);&#xA;Motor vertical_motor(VERTICAL_PIN);&#xA;Motor starboard_motor(STARBOARD_PIN);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The above lines pass the pin numbers to the Motor constructor declared in &lt;a href=&quot;https://github.com/OpenROV/openrov-software-arduino/blob/master/OpenROV/Motor.h&quot; rel=&quot;nofollow noreferrer&quot;&gt;Motor.h&lt;/a&gt;.&#xA;Later the &lt;a href=&quot;https://github.com/OpenROV/openrov-software-arduino/blob/master/OpenROV/Motor.cpp&quot; rel=&quot;nofollow noreferrer&quot;&gt;OpenROV Motor.cpp file&lt;/a&gt; stores those pin numbers and passes them to functions in the &lt;a href=&quot;https://github.com/OpenROV/openrov-software-arduino/blob/master/OpenROV/openrov_servo.cpp&quot; rel=&quot;nofollow noreferrer&quot;&gt;openrov_servo.cpp file&lt;/a&gt; to control the ESCs.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;BeagleBone PWM&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Some of the pins on the BeagleBone are internally connected to a hardware PWM driver.&#xA;Some people have several ESCs or other things controlled by a standard &lt;a href=&quot;http://www.opencircuits.com/Servo_control&quot; rel=&quot;nofollow noreferrer&quot;&gt;RC control signal&lt;/a&gt;, each one driven by one such pin on a BeagleBone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(FIXME: this would be a good place for a link to the part of the OpenROV code that runs on the BeagleBone and sends a message to the Arduino with the desired PWM; can that bit of code can be tweaked to directly drive that desired PWM out the BeagleBone pins?)&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Simon Monk. Adafruit. &lt;a href=&quot;https://learn.adafruit.com/controlling-a-servo-with-a-beaglebone-black/overview&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;Controlling a Servo with a BeagleBone Black&quot;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Ben Martin. &lt;a href=&quot;https://www.linux.com/learn/tutorials/776799-servo-control-from-the-beaglebone-black&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;How to Control a Servo Motor from a BeagleBone Black on Linux&quot;&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://beagleboard.org/support/BoneScript/analogWrite/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;BoneScript: analogWrite&quot;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Meng Cao. &lt;a href=&quot;http://www.egr.msu.edu/classes/ece480/capstone/fall13/group05/meng.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;How to use all the GPIO on Beaglebone Black in Python&quot;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Akkana. &lt;a href=&quot;http://shallowsky.com/blog/hardware/beaglebone-black-gpio.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;GPIO tutorial for the BeagleBone Black&quot;&lt;/a&gt;&#xA;implies that the BeagleBone Black hardware PWM can drive up to 8 pins (?).&lt;/li&gt;&#xA;&lt;li&gt;Justin Cooper. Adafruit. &lt;a href=&quot;https://learn.adafruit.com/setting-up-io-python-library-on-beaglebone-black/pwm&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;Setting up IO Python Library on BeagleBone Black: Using GPIO, PWM and more with Python&quot;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Babak Parvizi. &lt;a href=&quot;http://digital-drive.com/?p=146&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;BeagleBone Black ... Controlling a Servo Using HTML5, JavaScript, and Node.js.&quot;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://briancode.wordpress.com/2015/01/06/working-with-pwm-on-a-beaglebone-black/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;Working with PWM on a BeagleBone Black&quot;&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Saad Ahmad. &lt;a href=&quot;https://github.com/SaadAhmad/beaglebone-black-cpp-PWM&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;beaglebone-black-cpp-PWM&quot;&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;eLinux. &lt;a href=&quot;http://elinux.org/BeagleBoardPWM&quot; rel=&quot;nofollow noreferrer&quot;&gt;BeagleBoardPWM&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Hipstercircuits. &lt;a href=&quot;http://hipstercircuits.com/enable-pwm-on-beaglebone-with-device-tree-overlays/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;Enable PWM on BeagleBone with Device Tree overlays&quot;&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://beaglebone.cameon.net/home/using-pwm-outputs&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;Using the BeagleBone‎: Using PWM outputs&quot;&lt;/a&gt; describes how to drive 6 servos from a white BeagleBone.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="187" LastEditorUserId="187" LastEditDate="2015-05-11T14:22:36.553" LastActivityDate="2015-05-11T14:22:36.553" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7151" PostTypeId="2" ParentId="7148" CreationDate="2015-05-03T15:47:20.967" Score="1" Body="&lt;p&gt;There are a couple ways you could test this with a constant load:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;do what you said by applying a load, you could use a spool 2cm in diameter with a string holding a 1kg mass down giving .09Nm of force (you could fine tune the mass or pulley diameter) this has the advantage of subtly changing components (mass of string/diameter of pulley) allowing you to more thoroughly test your PI controller, but the disadvantage of a limited time of function depending on the length of string and the desired rotation speed (the rotation rate has no effect on the torque unless it is changing and the pulley has a non neginlabal rotational inertia.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You could put vanes on the motor and put them them in a tub of water, which will produce torque but this will be dependent on the rotation speed of the vanes and will be hard to predict and will need to be measured and tested. However this has several advantages, practically unlimited run time and very constant torque at speeds slow enough that nothing weird happens to the water (excessive waves/cavitation ect...) but, this will require experimentation and a test stand setup. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Another option would be to spin a wheel with a brake pad attached with a known or measured coefficient of friction this will allow you to apply precise repeatable force on the wheel by easily adjusting the mass that of the object sitting on top of the wheel. You can calculate it using the following formula, &#xA;&lt;img src=&quot;https://latex.codecogs.com/gif.latex?%5Ctau%20%3Dmg%5Cmu%20r&quot; alt=&quot;formula&quot;&gt; where &lt;img src=&quot;https://latex.codecogs.com/gif.latex?%5Ctau&quot; alt=&quot;tau&quot;&gt; is the torque desired, &lt;img src=&quot;https://latex.codecogs.com/gif.latex?m&quot; alt=&quot;m&quot;&gt; is the mass, &lt;img src=&quot;https://latex.codecogs.com/gif.latex?g&quot; alt=&quot;g&quot;&gt; is the acceleration of gravity &lt;img src=&quot;https://latex.codecogs.com/gif.latex?%5Cmu&quot; alt=&quot;mu&quot;&gt; is the measured or calculated coefficient of kinetic friction and &lt;img src=&quot;https://latex.codecogs.com/gif.latex?r&quot; alt=&quot;r&quot;&gt; is the radius of thew wheel. This all assumes the friction force is directed straight down (e.g. resting on top of the wheel). This is probably the best solution as you can easily vary the friction force and ius is very repeatable and accurate, additionally allowing unlimited run time limited only by the wear of the materials (which  could be non negligible depending on the speed and the materials used.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="7066" LastEditorUserId="-1" LastEditDate="2017-03-10T09:42:49.290" LastActivityDate="2015-05-03T15:47:20.967" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7152" PostTypeId="2" ParentId="6910" CreationDate="2015-05-03T16:50:13.690" Score="1" Body="&lt;p&gt;In the Denavit-Hartenberg parametrization the theta parameters represent the degrees of freedom of your system. If you are using a robotic manipulator then the theta values correspond to your joint angles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would highly recommend that you look into the possibility of using the product-of-exponentials formulation instead. This is an alternative approach to using the Denavit-Hartenberg parametrization. This approach has a number of benefits such as the removal of singularities which are attributed only to your choice of parametrization.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can imagine that some people would be put off from using it as you require a little more mathematical knowledge to fully understand how it works. However, as with many things you can still use it without knowing where it comes from.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you do decide to continue with the D-H parametrization, remember that there are many possible values for your parameters which will result in equivalent models of your system.&lt;/p&gt;&#xA;" OwnerDisplayName="user9092" LastEditorDisplayName="user9092" LastEditDate="2015-05-03T16:56:16.877" LastActivityDate="2015-05-03T16:56:16.877" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7153" PostTypeId="1" CreationDate="2015-05-04T03:47:53.953" Score="1" ViewCount="83" Body="&lt;p&gt;Is it possible to transmit live audio/video feed and at the same time, receive commands through UART using only 1 RF transceiver connected to the Arduino board?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to control the Arduino through serial communication (UART) which can be accomplished by using RF connection to control it from a remote. I also want to transmit live audio and video feed from the Arduino using the same RF transceiver. Is this possible?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found AVCTP, but I'm not sure if it enables serial communication. Also, I don't like to use Bluetooth for some reasons.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance!&lt;/p&gt;&#xA;" OwnerUserId="9633" LastActivityDate="2015-05-06T01:10:30.103" Title="Is it possible to have A/V feed and serial communication on an RF transceiver at the same time on an Arduino?" Tags="&lt;arduino&gt;&lt;microcontroller&gt;&lt;radio-control&gt;&lt;serial&gt;&lt;communication&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7154" PostTypeId="2" ParentId="6471" CreationDate="2015-05-04T08:38:32.980" Score="1" Body="&lt;p&gt;HC04 not need a i2c connection just have vcc, gnd, trig and echo pins. vcc to 5v gnd to gnd trig and echo pins need digital input and output. &lt;/p&gt;&#xA;" OwnerUserId="9504" LastActivityDate="2015-05-04T08:38:32.980" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7155" PostTypeId="2" ParentId="7148" CreationDate="2015-05-04T15:02:11.063" Score="0" Body="&lt;p&gt;You may find the &lt;a href=&quot;http://en.wikipedia.org/wiki/Dynamometer&quot; rel=&quot;nofollow&quot;&gt;wikipedia Dynamometer article&lt;/a&gt; useful.  The “&lt;a href=&quot;http://en.wikipedia.org/wiki/Dynamometer#Types_of_dynamometers&quot; rel=&quot;nofollow&quot;&gt;Types of Dynamometers&lt;/a&gt;” section lists eight kinds of dynamometers.  (Mark Omo's answer corresponds to two or three of the several types.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have several sizes of power resistors available, you could connect a DC generator (or a DC motor used as a generator) to a resistor and use that system as a load on the motor under test.  Resistor substitutions or a  high-wattage rheostat can make the load variable.&lt;/p&gt;&#xA;" OwnerUserId="478" LastActivityDate="2015-05-04T15:02:11.063" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7156" PostTypeId="1" AcceptedAnswerId="7201" CreationDate="2015-05-04T18:17:24.567" Score="0" ViewCount="1284" Body="&lt;p&gt;I have an STM32F3 discovery board. I want to go to the next step and I want to try to use timers in a few configurations. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I calculate variables (such as prescaler, period)? I looked in all datasheets, manuals and didn't find anything that can describe these values as  - Input capture mode, OP, PWM, etc. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think that prescaler is for downgrading a frequency from 1-65575. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if I have f&lt;sub&gt;cpu&lt;/sub&gt;=72MHz and want to generate a signal of frequency=40kHz, am I supposed to do: 72MHz/40kHz=1800? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now should I subtract this prescaler with -1?&lt;/p&gt;&#xA;" OwnerUserId="9634" LastEditorUserId="6941" LastEditDate="2015-07-03T09:36:09.643" LastActivityDate="2015-07-03T09:36:09.643" Title="STM32F3 timers &amp; computing" Tags="&lt;microcontroller&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7158" PostTypeId="1" CreationDate="2015-05-04T19:48:03.610" Score="-1" ViewCount="557" Body="&lt;p&gt;I am trying to use C++ to talk to the Create 2 robot. Does anyone have basic code to write/read from the Create 2 using C++ or C?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am having trouble with converting Create 2 commands (like &lt;code&gt;145&lt;/code&gt;) into one &lt;code&gt;char&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="9322" LastEditorUserId="9176" LastEditDate="2016-05-08T14:08:25.823" LastActivityDate="2016-05-08T14:08:25.823" Title="C++ and Create 2" Tags="&lt;irobot-create&gt;&lt;c&gt;&lt;c++&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7159" PostTypeId="1" CreationDate="2015-05-04T21:51:04.263" Score="2" ViewCount="1409" Body="&lt;p&gt;Do structured light camera sensors like the structure.io, Intel RealSense or Microsoft Kinect work outdoors?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I read these sensors wont work outdoors because of ambient IR light. Can someone provide this with proper references/tests? I mean what degree of IR illumination is needed for the sensor to stop working etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are videos on YouTube that show Microsoft Kinect working outdoors:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=9e4lYzTK6Mo&quot; rel=&quot;nofollow&quot;&gt;Prairie Dog II: UGV Kinect Sensor Outside&lt;/a&gt; - limited outdoors range&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=rI6CU9aRDIo&quot; rel=&quot;nofollow&quot;&gt;Outdoor Kinect Data Collection&lt;/a&gt; - heavy interference with direct sunlight&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;However, the (not yet released) new &lt;a href=&quot;https://software.intel.com/en-us/realsense/devkit&quot; rel=&quot;nofollow&quot;&gt;Intel RealSence R200 specification&lt;/a&gt; says &quot;range up to 3-4 meters indoors, longer range outdoors&quot; while the older F200 says &quot;0.2 meters - 1.2 meters, indoors only&quot;. I am really interested in seeing if the R200 will really work outdoors.&lt;/p&gt;&#xA;" OwnerUserId="1021" LastEditorUserId="1021" LastEditDate="2015-05-05T09:16:22.307" LastActivityDate="2015-05-05T09:16:22.307" Title="Do structured light camera sensors work outdoors?" Tags="&lt;kinect&gt;&lt;cameras&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7162" PostTypeId="2" ParentId="7159" CreationDate="2015-05-04T23:34:03.787" Score="1" Body="&lt;p&gt;I only have experience with the kinect, but it will definitely not work outside no matter what (unless the sun is down) and I have had problems when giving demos near large windows with sun.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Tldr near windows or outside during the day is a nogo&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2015-05-04T23:34:03.787" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7163" PostTypeId="1" AcceptedAnswerId="7480" CreationDate="2015-05-05T01:48:05.680" Score="6" ViewCount="12375" Body="&lt;p&gt;I'm trying to use a dual quaternion &lt;a href=&quot;https://github.com/hengli/camodocal/blob/master/include/camodocal/calib/HandEyeCalibration.h&quot; rel=&quot;noreferrer&quot;&gt;Hand Eye Calibration Algorithm Header&lt;/a&gt; and &lt;a href=&quot;https://github.com/hengli/camodocal/blob/master/src/calib/HandEyeCalibration.cc&quot; rel=&quot;noreferrer&quot;&gt;Implementation&lt;/a&gt;, and I'm getting values that are way off. I'm using a robot arm and an optical tracker, aka camera, plus a fiducial attached to the end effector. In my case the camera is not on the hand, but instead sitting off to the side looking at the arm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The transforms I have are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Robot Base -&gt; End Effector&lt;/li&gt;&#xA;&lt;li&gt;Optical Tracker Base -&gt; Fiducial&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The transform I need is:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Fiducial -&gt; End Effector&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/EPfPTky.png&quot; alt=&quot;HandEyeCalibrationQuestion&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm moving the arm to a series of 36 points on a path (blue line), and near each point I'm taking a position (xyz) and orientation (angle axis with theta magnitude) of Camera-&gt;Fiducial and Base-&gt;EndEffector, and putting them in the vectors required by the &lt;a href=&quot;https://github.com/hengli/camodocal/blob/master/include/camodocal/calib/HandEyeCalibration.h&quot; rel=&quot;noreferrer&quot;&gt;HandEyeCalibration Algorithm&lt;/a&gt;. I also make sure to vary the orientation by about +-30 degrees or so in roll pitch yaw.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I then run estimateHandEyeScrew, and I get the following results, and as you can see the position is off by an order of magnitude. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;[-0.0583, 0.0387, -0.0373] Real&#xA;[-0.185, -0.404, -0.59] Estimated with HandEyeCalib&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the full transforms and debug output:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;# INFO: Before refinement: H_12 =&#xA;-0.443021 -0.223478  -0.86821  0.321341&#xA; 0.856051 -0.393099 -0.335633  0.470857&#xA;-0.266286 -0.891925   0.36546   2.07762&#xA;        0         0         0         1&#xA;Ceres Solver Report: Iterations: 140, Initial cost: 2.128370e+03, Final cost: 6.715033e+00, Termination: FUNCTION_TOLERANCE.&#xA;# INFO: After refinement: H_12 =&#xA;  0.896005   0.154992  -0.416117  -0.185496&#xA; -0.436281    0.13281  -0.889955  -0.404254&#xA;-0.0826716   0.978948   0.186618  -0.590227&#xA;         0          0          0          1&#xA;&#xA;&#xA;expected RobotTipToFiducial (simulation only):   0.168   -0.861    0.481  -0.0583&#xA;expected RobotTipToFiducial (simulation only):   0.461   -0.362    -0.81   0.0387&#xA;expected RobotTipToFiducial (simulation only):   0.871    0.358    0.336  -0.0373&#xA;expected RobotTipToFiducial (simulation only):       0        0        0        1&#xA;&#xA;&#xA;estimated RobotTipToFiducial:   0.896    0.155   -0.416   -0.185&#xA;estimated RobotTipToFiducial:  -0.436    0.133    -0.89   -0.404&#xA;estimated RobotTipToFiducial: -0.0827    0.979    0.187    -0.59&#xA;estimated RobotTipToFiducial:       0        0        0        1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Am I perhaps using it in the wrong way? Is there any advice you can give?&lt;/p&gt;&#xA;" OwnerUserId="304" LastEditorUserId="304" LastEditDate="2015-05-05T19:52:11.163" LastActivityDate="2018-12-06T08:34:34.340" Title="Hand Eye Calibration" Tags="&lt;robotic-arm&gt;&lt;stereo-vision&gt;&lt;calibration&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="7165" PostTypeId="1" CreationDate="2015-05-05T07:03:48.780" Score="3" ViewCount="3891" Body="&lt;p&gt;I'm wondering that, PID control is a linear control technique and the robot manipulator is a nonlinear system, so how it is possible to apply PID control, in this case. I found a &lt;a href=&quot;http://www.slideshare.net/popochis/pid-control-dynamics-of-a-robotic-arm-manipulator-with-two-degrees-of-freedom&quot; rel=&quot;nofollow&quot;&gt;paper&lt;/a&gt; named: PID control dynamics of a robotic arm manipulator with two&#xA;degrees of freedom. on slide share page, is this how we use PID control for robotic arm, is there any name for this approach? and how to remove the ambiguity that PID is linear control technique and the robot is nonlinear system. Any suggestions?&lt;/p&gt;&#xA;" OwnerUserId="9087" LastActivityDate="2017-07-14T19:28:38.193" Title="How to implement PID control for robotic arm?" Tags="&lt;control&gt;&lt;pid&gt;&lt;robotic-arm&gt;&lt;industrial-robot&gt;&lt;dynamics&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7167" PostTypeId="1" AcceptedAnswerId="7172" CreationDate="2015-05-05T13:57:07.377" Score="1" ViewCount="73" Body="&lt;p&gt;I am working on a project that involves speed regulation of a BLDC motor under no-load and load conditions. I wish to use another machine operated as generator, acting as load on the motor, as shown in &lt;a href=&quot;https://www.youtube.com/watch?v=L8gvQIgOiGo&quot; rel=&quot;nofollow&quot;&gt;this video&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The coupling used in this motor/generator arrangement looks handmade out of a rubber tube or somethhing. I am considering using it as an alternative to a flexible coupling. Purchasing an actual flexible coupling is not an option for me. Moreover, I need the coupling on an urgent basis. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is, can this arrangement (or something similar) be used to couple a 15W motor to a similar rating machine, if the rated torque is not exceeding 0.1 N.m?&lt;/p&gt;&#xA;" OwnerUserId="9630" LastEditorUserId="9630" LastEditDate="2015-05-06T14:39:09.477" LastActivityDate="2015-05-06T14:39:09.477" Title="Is this rubber/PVC coupling a good enough for small torque (0.1 N.m)" Tags="&lt;control&gt;&lt;brushless-motor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7168" PostTypeId="2" ParentId="6952" CreationDate="2015-05-05T17:08:50.493" Score="-2" Body="&lt;p&gt;User 9428 &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The task you define is quite easy to solve.&#xA;First see the sample file BMP as uploaded in FAQ Area in NUST NERC Edu Page.&#xA;Its a small file 56 bits by 96 bits of information in it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The question most of students ask and face is how to read the BMP file? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;BMP file or any other file what so ever is never so difficult to read or manage. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you consider it as image you will think about it as image.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is a text file - can any one read a text file simple with a room temperature or student marks obtained. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;its some thing same like that. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;upon investigating you will notice that the image it self is border white out side on all sides&lt;/p&gt;&#xA;&#xA;&lt;p&gt;then the line of black color starts the white path is all covered on all sides and fully with white elements. black color path is all round except two place which are gates to enter and exit ead them in Arduino and note them and mark as S and F - Start and Finish - &lt;/p&gt;&#xA;&#xA;&lt;p&gt;the white lines around are 4 bits by 56 on top &#xA;and 4 bits by 56 bits are lower most line &#xA;black lines are inside start from 5th bit and goes to 8th bit on left side &#xA;wall then on the right side 49th to 52nd bit is black on left side from top to bottom &#xA;ending is again 53rd bit to 56th bit white line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can you code them in Arduino ? quite simple and easy &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This above tell opening and exit Marked as S Start and F Finish&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next like wise read the cells and code them by if and them loop to know they are black or white&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you decode map to Array a 2D array can be manipulated and get all required results to find path and move for motors &lt;/p&gt;&#xA;&#xA;&lt;p&gt;some thing like below &#xA;001110&#xA;011110&#xA;011101&#xA;111111&#xA;111111&#xA;010011&#xA;010111&lt;/p&gt;&#xA;&#xA;&lt;p&gt;each element is coordinate form values &lt;/p&gt;&#xA;&#xA;&lt;p&gt;BMP is converted to Array and tell you in map form to deal as arithmetic problem &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Arduino or any simple micro can do quite comfortably &lt;/p&gt;&#xA;&#xA;&lt;p&gt;the path found is decoded to move &lt;/p&gt;&#xA;&#xA;&lt;p&gt;you find two goals location from image also &lt;/p&gt;&#xA;&#xA;&lt;p&gt;but image is not telling color to pot in them &#xA;the color sensor is easy answer to do that &lt;/p&gt;&#xA;&#xA;&lt;p&gt;reach place and find which color to pot&lt;/p&gt;&#xA;&#xA;&lt;p&gt;when both balls are pot come out of arena or maze&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope you win this &lt;/p&gt;&#xA;&#xA;&lt;p&gt;regards&lt;/p&gt;&#xA;" OwnerUserId="9643" LastEditorUserId="9720" LastEditDate="2015-09-06T23:42:23.233" LastActivityDate="2015-09-06T23:42:23.233" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7170" PostTypeId="2" ParentId="7163" CreationDate="2015-05-05T18:29:32.807" Score="1" Body="&lt;p&gt;The library you are using (and papers it is based on) seem to be for a different use case than what you are doing.  They have a camera rig moving around a world with fiducials pulled out of a SLAM map, whereas you have a static camera and a moving arm holding fiducials.  Fundamentally, yes they are the same, but i wonder if you used a different library that is more suited to a robot arm, if you would have better results.  This is a paper you might consider: &lt;a href=&quot;http://www.willowgarage.com/sites/default/files/calibration.pdf&quot; rel=&quot;nofollow&quot;&gt;Calibrating a multi-arm multi-sensor robot: A Bundle Adjustment Approach&lt;/a&gt;.  I don't know if there is source code.  But it is ROS, so odds are good.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-05-05T18:29:32.807" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7171" PostTypeId="2" ParentId="7158" CreationDate="2015-05-05T19:09:04.870" Score="0" Body="&lt;p&gt;As ott mentioned, you can simply make the type an &lt;code&gt;unsigned char&lt;/code&gt; which is an 8 bit data type.  Here is some code snipits that &lt;em&gt;should&lt;/em&gt; work, but are untested.  This uses the &quot;Drive&quot; example from the OI Spec.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;termios.h&amp;gt;&#xA;#include &amp;lt;unistd.h&amp;gt;&#xA;#include &amp;lt;fcntl.h&amp;gt;&#xA;#include &amp;lt;stdio.h&amp;gt;&#xA;&#xA;unsigned char buff[5] = {137, 255, 56, 1, 244};&#xA;&#xA;fd = open(&quot;/dev/ttyUSB0&quot;, O_RDWR | O_NOCTTY);&#xA;&#xA;struct termios tio;&#xA;bzero(&amp;amp;tio, sizeof(tio));&#xA;tio.c_cflag = B115200 | CS8 | CLOCAL | CREAD;&#xA;tio.c_iflag = IGNPAR;&#xA;tio.c_cc[VTIME]    = 1;&#xA;tio.c_cc[VMIN]     = 0;&#xA;tcflush(fd, TCIFLUSH);&#xA;tcsetattr(fd, TCSANOW, &amp;amp;tio);&#xA;&#xA;int res = write(fd, buff, 5);&#xA;if (res &amp;lt; 0)&#xA;{&#xA;    int err = errno;&#xA;    perror(&quot;write error: &quot;);&#xA;    printf(&quot;\nWARNING: write returned %d, errno: %d\n&quot;, res, err);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-05-05T19:09:04.870" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7172" PostTypeId="2" ParentId="7167" CreationDate="2015-05-06T00:34:14.853" Score="1" Body="&lt;p&gt;Absolutely, I use this method all the time for small robots, and actuators. I can find no information on the formal torque ratings, but I did find in a document called &quot;&lt;a href=&quot;http://www.expert4pvc.com/Documents/PVC_Piping_Systems-PPFA.pdf&quot; rel=&quot;nofollow&quot;&gt;PVC Piping Systems: Helpful tips for Avoiding Problems&lt;/a&gt;&quot; &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The recommended best practice is to use a thread sealant (not a thread lubricant) and to assemble&#xA;  the joint to finger tight plus one and one-half turns, two turns at the most. Finger tight can be&#xA;  defined as: tightened using the fingers, no tools, to a torque of about 1.2 to 1.7 foot-pounds (1.7&#xA;  to 2.3Nm).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I am assuming the pipe can withstand the torque of tightening threads. I suspect that tie pipe can withstand much more torque than that though.&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2015-05-06T00:34:14.853" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="7173" PostTypeId="2" ParentId="7153" CreationDate="2015-05-06T01:10:30.103" Score="2" Body="&lt;p&gt;As I suspect you found out (based on your other question &lt;a href=&quot;https://robotics.stackexchange.com/questions/7169/robot-with-fpv-over-rf-problems&quot;&gt;7169&lt;/a&gt;), doing both over the same RF link will be more truble than it is worth, You could use ip as you sujested but this might turn out to be more truble than it is worth unless your main controller is a raspberry pi or BBB that already has native networking. I am assuming you are talking about a quadrocopter or RC car. For those platforms the standard thing to do is use a setup like &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__22824__2_4GHZ_100mW_Tx_Rx_1_3_inch_CCD_Camera_PAL_520TV_line_.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; or make your own, consisting of a &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__540__543__FPV_Aerial_Video_Telemetry-2_4GHz.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;transmitter/recever&lt;/a&gt; pair, a &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__538__543__FPV_Aerial_Video_Telemetry-Cameras.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;camera&lt;/a&gt; and somhing to view it on. they sell plenty of battery powered monitors. as for telemetry the gold standard as far as I am concerned are the &lt;a href=&quot;https://store.3drobotics.com/products/3dr-radio-915_mhz?taxon_id=34&quot; rel=&quot;nofollow noreferrer&quot;&gt;3dr 900mhz serial modules&lt;/a&gt;, they work great up to about a mile with stock antennas beware you will need a pair to operate.&lt;/p&gt;&#xA;" OwnerUserId="7066" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2015-05-06T01:10:30.103" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7175" PostTypeId="1" AcceptedAnswerId="7192" CreationDate="2015-05-06T06:57:57.783" Score="1" ViewCount="320" Body="&lt;p&gt;I am very new to robotics. but I will be writing algorithm for my robot to move around and gather information from its surroundings and process it. It will also process audio-visual signals. but I am in confusion about which micro-controller to use so it would be performance efficient and consumes less power.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The controller should also be capable of communication with wireless network (internet through wi-fi) and should also support memory integration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also I know to program in Java and C. please suggest which would be the best language to use for programming.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S. I would really like to use a microprocessor as it is highly customizable. Please suggest the best to use&lt;/p&gt;&#xA;" OwnerUserId="9645" LastActivityDate="2015-05-09T13:52:51.953" Title="Need suggestion about which microcontroller/processor and language to be used in my project" Tags="&lt;artificial-intelligence&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7176" PostTypeId="1" CreationDate="2015-05-06T07:50:30.043" Score="0" ViewCount="2079" Body="&lt;p&gt;I have recently been asked to review a raspberry pi hat (from a programming view) that will allow PWM control of upto 16 servos, however I am hoping to use this time to work on a hexapod idea I have been thinking about for a while, which requires a minimum of 18 servo's, and preferably 20 (camera/sensor pan and tilt).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is a relatively cheap and uncomplicated way of extending my control over those extra 4 servo's?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It would appear most servo controller hat/shiels for arduino and raspi are upto 16 servos, and can be extended by buying another shield, are there any other options?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any advice in this subject would be greatly appreciated, preferably dumbed down a bit, and I don't know a great deal about micro controller hardware (more of a software guy)&lt;/p&gt;&#xA;" OwnerUserId="9298" LastEditorUserId="9298" LastEditDate="2015-05-08T09:54:42.690" LastActivityDate="2017-09-25T14:53:30.137" Title="Using 20 Servos at once, with raspberry pi" Tags="&lt;raspberry-pi&gt;&lt;servomotor&gt;&lt;rcservo&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ClosedDate="2017-09-25T16:30:21.447" ContentLicense="CC BY-SA 3.0" />
  <row Id="7177" PostTypeId="1" AcceptedAnswerId="7268" CreationDate="2015-05-06T08:16:40.143" Score="1" ViewCount="140" Body="&lt;p&gt;How can I test whether my gazebo installation works properly or not? I'm trying to &quot;save myworld&quot; and &quot;save as&quot; options but no window is shown.&lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="7066" LastEditDate="2015-05-10T19:18:58.397" LastActivityDate="2015-05-15T09:54:55.737" Title="How to test GAZEBO works properly. Save windows don't show any component" Tags="&lt;gazebo&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7178" PostTypeId="1" AcceptedAnswerId="7220" CreationDate="2015-05-06T08:22:26.253" Score="10" ViewCount="1927" Body="&lt;p&gt;Do we have to build ROS for robotic research/application? What is the main advantage? When or in which situations ROS is mandatory?&lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2016-12-18T00:14:58.617" LastActivityDate="2016-12-19T21:43:45.000" Title="Is ROS (Robot Operating System) mandatory?" Tags="&lt;ros&gt;&lt;simulator&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="7179" PostTypeId="2" ParentId="1232" CreationDate="2015-05-06T08:30:57.857" Score="0" Body="&lt;p&gt;This &lt;a href=&quot;http://arduino.net.ua/upload/information_system_8/1/3/1/item_131/information_items_property_171.pdf&quot; rel=&quot;nofollow&quot;&gt;link&lt;/a&gt; gives a good example without two PID calculation. Also you can implement imu/compass to measure straight path&lt;/p&gt;&#xA;" OwnerUserId="9504" LastActivityDate="2015-05-06T08:30:57.857" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7180" PostTypeId="2" ParentId="1811" CreationDate="2015-05-06T08:45:03.323" Score="0" Body="&lt;p&gt;I'm working on this topic too. I'm trying to obtain sound &#xA;* ultrasonic: there is a lot of applications&#xA;* audible sound difference via multiple microphones like stereo vision or tdoa. also we need robot identification that may be frequency difference&lt;/p&gt;&#xA;" OwnerUserId="9504" LastActivityDate="2015-05-06T08:45:03.323" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7181" PostTypeId="1" AcceptedAnswerId="7182" CreationDate="2015-05-06T10:40:32.930" Score="8" ViewCount="498" Body="&lt;p&gt;Let's say my redundant robot is at an operationnal position $x$. Is the set of all possible joint configuration &quot;continuous&quot;, which would mean that it is possible to explore all the possible configurations without moving the end effector. Is there a way to show that it is true or false? I am using a Kuka LBR robot with 7 dof so maybe there is a specific answer for this one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have been searching it and did not find any result but I will gladly accept any link or answer that you may have.&lt;/p&gt;&#xA;" OwnerUserId="9647" LastEditorUserId="350" LastEditDate="2015-05-15T14:08:05.080" LastActivityDate="2015-05-15T14:08:05.080" Title="Is the geometric inverse problem's solution &quot;continuous&quot; for a redundant robot?" Tags="&lt;control&gt;&lt;inverse-kinematics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7182" PostTypeId="2" ParentId="7181" CreationDate="2015-05-06T14:06:20.923" Score="7" Body="&lt;p&gt;I don't know if there is a formal proof to this, but in general, no the set of all possible joint configurations that correspond to a particular end-effector pose is not continuous.  I think of the set as islands in joint space.  Where each island has some local continuous joint range, but is disconnected from the other islands.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think there are a few reasons for this: joint limits, and kinematic limits, and physical construction.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for joint limits, i think a good example is the &quot;standard&quot; robot roll-pitch-roll wrist like the LBR has.  if these joints have limits, it will not be continuous rotation, which affect the arm's ability to stay at the end-effector pose while the rest of the arm moves through its redundancy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for physical construction, I think a good example is thinking of a planar 3 link arm which is redundant for end-effector 2D position, (with no rotation).  For example:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/FYhwi.png&quot; alt=&quot;Planar 3 link arm image&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For many points, you could find a way to move the joints to keep the end-effector at the same point.  But if the point is too close to the base then unless the links can pass through each other, the links will collide and prevent you from getting to the other configurations.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lastly, as for kinematic constraints.  If you fix the end-effector at a point, you can think of the arm as a &lt;a href=&quot;http://en.wikipedia.org/wiki/Four-bar_linkage&quot; rel=&quot;nofollow noreferrer&quot;&gt;four-bar linkage&lt;/a&gt;.  I can't post an animated gif, but the Wikipedia page has this nice example: &lt;a href=&quot;http://en.wikipedia.org/wiki/File:4_bar_linkage_animated.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://en.wikipedia.org/wiki/File:4_bar_linkage_animated.gif&lt;/a&gt;.  You should consider the arm to be the 3 links: AD, DC, and CB.  The base of the arm is A and the end-effector is B.  (Ignore point E and the large triangle).  Here the arm is exploring the entire local null space of redundant solutions that it can reach.  However, there are is another set of solutions that can be achieved if the arm is flipped horizontally.  (if point C is below the line between A and B.)  Clearly the arm cannot move their with the end-effector constrained to stay at B.  But it is a valid arm configuration.&lt;/p&gt;&#xA;" OwnerUserId="110" LastEditorUserId="110" LastEditDate="2015-05-13T14:39:27.950" LastActivityDate="2015-05-13T14:39:27.950" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7183" PostTypeId="2" ParentId="2224" CreationDate="2015-05-07T00:21:54.483" Score="0" Body="&lt;p&gt;the kinect now is working with the UDOO. I tested it in the UDOO quad.&#xA;Just follow this steps: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.mariolukas.de/2015/04/proof-of-concept-3d-scanner-with-kinect-and-raspberry-pi2/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.mariolukas.de/2015/04/proof-of-concept-3d-scanner-with-kinect-and-raspberry-pi2/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regards&lt;img src=&quot;https://i.stack.imgur.com/8Sx9x.jpg&quot; alt=&quot;Kinect working with the UDOO quad&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="9650" LastActivityDate="2015-05-07T00:21:54.483" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7184" PostTypeId="2" ParentId="7178" CreationDate="2015-05-07T03:56:28.300" Score="2" Body="&lt;p&gt;&quot;ROS&quot; is a relative term, the APM runs full custom code specifically designed for quadrocopter control where a custom ROS might be desirable to keep from crashing, on the other hand the Navio+ runs on a Linux kernel and runs code other than the autopilot, and still manages to keep from crashing. Most ROSs are really a set of functions on top of an existing OS as opposed to writing an os from the ground up. As with anything, it depends.&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2015-05-07T03:56:28.300" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7185" PostTypeId="2" ParentId="7069" CreationDate="2015-05-07T05:18:22.667" Score="1" Body="&lt;p&gt;I did some work on embedding decision trees in a hash table.  That worked extremely well.  I could embed many facets of the English language into it such as context sensitive spelling, in only a few seconds, using only a few megabytes. You could also embed complex patterns of movement into it very easily.  It basically ends up as so called feature hashing.  For example in 3 dimensions (x,y,z) you would create a hash function with 3 inputs h(x,y,z). This is a form of dimensional reduction and also data compression.  I took it slightly further and feed in only a few bits of information at a time into the hash function  for even better results and better generalization.&lt;br&gt;&#xA;It is clear to me that you could fit everything the human mind can do into 100 Gigabytes or less.  That means that a current mid-scale supercomputer with 300 Tbytes of SDRAM has 3000 times the capacity of the human mind and is much, much faster.  A few years ago the general consensus among computer scientists was that you would see human level AI around 2020.  I would agree, however their view was based on extreme hardware requirements.  My view is that the hardware is already there, it is just a code issue. Hopefully it won't really change anything. That it will only be like adding 1 million people to the human population, in terms of increased ability to do things.   &lt;/p&gt;&#xA;" OwnerUserId="9536" LastActivityDate="2015-05-07T05:18:22.667" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7186" PostTypeId="1" CreationDate="2015-05-07T09:43:51.497" Score="0" ViewCount="592" Body="&lt;p&gt;I'm looking to find a way to operate a small servo using a 4-20ma linear analog signal generated by a PLC in an industrial setting. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The purpose of this is to allow for automation for a task that currently is done by manually turning and adjusting a potentiometer with removable dial. Basically, I'm trying to ghetto together an oldschool Motor Operated Potentiometer (MOP) so it can be removed quickly and easily without affecting the operation of the original process.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've spent hours looking for servo controllers/encoders that are capable of this, but I haven't been able to find any. Any way I could get pointed in the right direction would be fantastic. Surely such a thing must exist!&#xA;Thanks so much!&lt;/p&gt;&#xA;" OwnerUserId="9652" LastActivityDate="2015-05-07T10:29:14.017" Title="What would I need to control a DC servo using a 4-20ma linear analog signal?" Tags="&lt;rcservo&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7187" PostTypeId="2" ParentId="7186" CreationDate="2015-05-07T10:29:14.017" Score="1" Body="&lt;p&gt;The most simple way, is to let the current run over a shunt and just use the voltage as input signal. Voltage controlled motorcontrollers exist like &quot;sand at the sea&quot; &lt;br&gt;&#xA;Basically you loose the safety feature of the current signal to detect cable break. So far industrial application you need a more sophisticated approach. If you do not this feature anyway then you should be fine with the shunt.&#xA;I use for a similar application I use e48-127 Ohm resistors. I get output signal between 0.5 and 2.5 volts.&lt;/p&gt;&#xA;" OwnerUserId="6911" LastActivityDate="2015-05-07T10:29:14.017" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7188" PostTypeId="1" CreationDate="2015-05-07T10:53:51.450" Score="0" ViewCount="315" Body="&lt;p&gt;I have a 2-link, 2 degree of freedom robotic arm, that only measures linear acceleration at each link(through an accelerometer), and rotational velocity on each joint (through a gyroscope).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that through using the Jacobian matrix, I can compute link velocity and acceleration from joint angles, and through the inverse of the matrix I can compute joint velocities from joint angles and link acceleration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I am not sure if I can compute joint angles using only the link linear and rotational acceleration? I am aware that the joint angle could be estimated by integrating the joint velocities (and applying some sort of filter), but is there an algebraic way this can be computed? It doesn't seem likely to me. &lt;/p&gt;&#xA;" OwnerUserId="9653" LastEditorUserId="110" LastEditDate="2015-05-09T11:49:40.390" LastActivityDate="2015-06-08T12:45:14.200" Title="Can a Jacobian matrix be used to derive joint angles from end-effector linear and rotational velocity (without a filter)?" Tags="&lt;robotic-arm&gt;&lt;accelerometer&gt;&lt;gyroscope&gt;&lt;jacobian&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7189" PostTypeId="1" CreationDate="2015-05-07T13:59:23.117" Score="1" ViewCount="315" Body="&lt;p&gt;I noticed that the create2 does not always provide sensor data while it's moving. Am I supposed to stop the robot, request sensor data then start it again? or am I missing something? it seems to work most of the time but once in a while I get no data back. I am trying to make it move from one point to another by starting it and then reading distance to see how far it travels every .1 seconds but sometimes it I just keeping getting no data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I noticed this using python and C code as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am using the USB port with the bit rate they recommend (115200).&lt;/p&gt;&#xA;" OwnerUserId="9322" LastEditorUserId="37" LastEditDate="2015-05-15T10:27:29.560" LastActivityDate="2015-05-15T10:27:29.560" Title="create2 reading sensor date does not always work" Tags="&lt;irobot-create&gt;" AnswerCount="0" CommentCount="7" FavoriteCount="1" ClosedDate="2015-06-03T13:45:05.597" ContentLicense="CC BY-SA 3.0" />
  <row Id="7190" PostTypeId="1" AcceptedAnswerId="7191" CreationDate="2015-05-07T17:54:34.690" Score="3" ViewCount="1743" Body="&lt;p&gt;I'm searching for a &lt;strong&gt;cheap (under 100$) and efficient&lt;/strong&gt; 3D sensor, which detects obstacles and moving objects, for robot applications like quadrotor navigation, swarm robotics, etc. Can you suggest a sensor that can be either a commercial product or a &quot;do it yourself&quot; project?&lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="9176" LastEditDate="2015-05-09T19:52:04.370" LastActivityDate="2015-05-09T19:52:04.370" Title="Cheap and efficient 3D sensor?" Tags="&lt;mobile-robot&gt;&lt;sensors&gt;&lt;swarm&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7191" PostTypeId="2" ParentId="7190" CreationDate="2015-05-07T23:16:02.340" Score="5" Body="&lt;p&gt;Honestly it depends what you want, I will cover some options from cheapest to most expensive&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Ultrasonic sensor on a servo 5-50$ depending on the model. It can be fairly accurate with around 1cm accurcy and 255 steps on a full circle, but it can have poor performance in dusty environments and can have poor results with curved items.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Ir distance sensor, 10-100$ depending on model. More accurate than ulatrosonic sensor (around .5cm accuracy). Preforms better with round objects, sensitive to dust, but can be placed in clear enclosures to protect them.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;1d lidar/laser raingefinder on servo, 80-300$ &lt;a href=&quot;http://pulsedlight3d.com/&quot; rel=&quot;noreferrer&quot;&gt;some&lt;/a&gt; &lt;a href=&quot;http://www.lightware.co.za/shop/en/rangefinders-and-altimeters/7-sf02f.html&quot; rel=&quot;noreferrer&quot;&gt;examples&lt;/a&gt; they work over longer ranges and collect data faster potentially allowing two axis collection to get a &quot;3d&quot; point cloud, but are more expensive and will require a more sophisticated controller to take advantage of them.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;inexpensive 2d lidar sensor (possibly on a servo for 3d capture) &lt;a href=&quot;http://www.robotshop.com/en/rplidar-360-laser-scanner.html&quot; rel=&quot;noreferrer&quot;&gt;example&lt;/a&gt; alloes for true 2d capture and can be moved up and down to allow for a 3d point cloud, more expensive and required even more procssing power probably no less than a Raspberry Pi or Intel Edison&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Stereoscopic cameras, 400$+ my favorite is the &lt;a href=&quot;https://www.stereolabs.com/&quot; rel=&quot;noreferrer&quot;&gt;ZED&lt;/a&gt; these provide &quot;true&quot; 3d and can be fairly accurate at around 10 centimeters but give you a real 3d point cloud in addition to being cameras that you can use to do object recognition and detection on, the only problem is that they require significant horsepower no less than an Nvidia k1 which could restrict some mobile applications&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;True LIDAR sensors, 1000$+ allowing for very robust 2d point clouds  &lt;a href=&quot;http://www.robotshop.com/en/hokuyo-urg-04lx-ug01-scanning-laser-rangefinder.html&quot; rel=&quot;noreferrer&quot;&gt;example&lt;/a&gt; and are designed to be oscillated up and down to provide full 3d mapping, they can ve very expense up to 10k+ and will require an embedded computer to run&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;True 3d LIDAR sensors, 50,000$+ dollars are very accurate and can provide immense amounts of data but are very expensive heavy and require lots of processing power in order to use&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;If you provide more specifics on your application I can give a more specific answer.&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2015-05-07T23:16:02.340" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7192" PostTypeId="2" ParentId="7175" CreationDate="2015-05-08T02:26:30.733" Score="1" Body="&lt;p&gt;It sounds like you are the perfect candidate for the &lt;a href=&quot;https://www.raspberrypi.org/products/raspberry-pi-2-model-b/&quot; rel=&quot;nofollow&quot;&gt;Raspberry PI!&lt;/a&gt; It is an awesome microcomputer that can do plenty of things, has a great community of support and tons of add on boards that can do everything you might need including &lt;a href=&quot;http://www.adafruit.com/product/2348&quot; rel=&quot;nofollow&quot;&gt;driving motors for a robot&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2015-05-08T02:26:30.733" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7193" PostTypeId="2" ParentId="7176" CreationDate="2015-05-08T02:32:29.950" Score="1" Body="&lt;p&gt;I would suggest something like the adafruit &lt;a href=&quot;http://www.adafruit.com/product/2327&quot; rel=&quot;nofollow&quot;&gt;Adafruit 16-Channel PWM / Servo HAT for Raspberry Pi&lt;/a&gt; You can stack as many as you want to get as many outputs as you need.&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2015-05-08T02:32:29.950" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7194" PostTypeId="1" AcceptedAnswerId="7196" CreationDate="2015-05-08T12:47:27.793" Score="1" ViewCount="225" Body="&lt;p&gt;I'm a complete beginner in robotics with background in programming...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I started thinking about a robot project yesterday and want to order some motors to test with. I saw the specs for the motors, torque etc, and I think I remember enough physics from high school to do simple calculations. For example, if the motor rotates an arm, then given the torque and the length of the arm, how much could it lift? Also, if it doesn't lift it straight up, but at an angle, I could with a bit of thinking tweak the calculations a bit... If there would be several joints attached to each other, the calculations would be more complex, but I could then probably create a program in node.js, for example, to be able to experiment with different values.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I would assume that these kinds of calculations would be very common when designing robots. So I would assume there are already programs for these types of calculations created. I don't know exactly what I mean with &quot;these types of calculations&quot;, because I don't know yet what I don't know, so would like to ask which programs are there that you guys use for making calculations when you design your robots?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Preferable they should be open source...&lt;/p&gt;&#xA;" OwnerUserId="9658" LastActivityDate="2015-05-08T18:18:06.360" Title="Beginner question about software for calculations" Tags="&lt;robotic-arm&gt;&lt;mechanism&gt;&lt;software&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7196" PostTypeId="2" ParentId="7194" CreationDate="2015-05-08T13:35:27.843" Score="3" Body="&lt;p&gt;For your first example, Max-Weight = Torque/arm-length. Going beyond that, there are several software applications and API's out there that can be a big help for these kinds of calculations (matlab or pyODE to name a couple), but they will be pretty useless without a decent understanding of what you are computing. A good resource to learn about the mechanics involved can be found &lt;a href=&quot;http://www.engineeringtoolbox.com/mechanics-t_52.html&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;. Check out the &lt;em&gt;Statics&lt;/em&gt; link on the left for details on the physics of forces, and then check out the &lt;em&gt;Dynamics&lt;/em&gt; link to learn how the forces correlate to motion.&lt;/p&gt;&#xA;" OwnerUserId="9137" LastActivityDate="2015-05-08T13:35:27.843" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7197" PostTypeId="2" ParentId="6721" CreationDate="2015-05-08T14:03:47.487" Score="0" Body="&lt;p&gt;While I still like the rake idea, parallel slots wider than the support pegs, I worry it would push the pink ball instead of retrieve it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My second thought is a simple suction device that retrieves the balls and drops them into a funnel in the bot. Though there might be concerns with the mass of a golf ball.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Collect all 6 without worrying about the fencing. &#xA;Travel to the smallest hole, open the gate on the funnel and let them pour. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sensors: &#xA;Golf ball detection to direct the suction. (Chroma?Known Ball Color, Shape?Round, Dead Reckoning?Known positions)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finding the target hole, positioning the funnel output over the hole&#xA;Fall back to a lower value hold if timer is running too low. &lt;/p&gt;&#xA;" OwnerUserId="9091" LastActivityDate="2015-05-08T14:03:47.487" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7198" PostTypeId="1" AcceptedAnswerId="8074" CreationDate="2015-05-08T15:23:38.450" Score="2" ViewCount="207" Body="&lt;p&gt;I am planning a tank like robot for hobby purpose. I have control engineering background, however I never applied on robotics. &#xA;I would like to test different control theory, namely MPC. I saw a lot of publications regarding the kinematics and inverse kinematics of such a robot, however I am wondering if somebody can point out regarding the dynamics modelling of such a system,taking into account the forces, mass etc?&lt;/p&gt;&#xA;" OwnerUserId="1431" LastEditorUserId="1431" LastEditDate="2015-05-10T15:27:02.800" LastActivityDate="2015-12-15T22:42:19.323" Title="Dynamic model of a tank like robot" Tags="&lt;wheeled-robot&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7199" PostTypeId="1" CreationDate="2015-05-08T16:00:23.410" Score="0" ViewCount="145" Body="&lt;p&gt;given my control system &#xA;&lt;img src=&quot;https://i.stack.imgur.com/fXjuI.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have found the region of the complex space that satisfies my specifications, determining poles position in 0.5 +- 0.2i. &#xA;&lt;img src=&quot;https://i.stack.imgur.com/McX5p.png&quot; alt=&quot;enter image description here&quot;&gt;&#xA;Now I want to find the gains that fix the desider pole (with matlab), but I have not understand well how to do it: anyone can suggest me an example on how to do that, with or without matlab?&#xA;Thanks&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: in the first image the sum blocks are +-, not ++&lt;/p&gt;&#xA;" OwnerUserId="9662" LastEditorUserId="9662" LastEditDate="2015-05-08T16:51:42.480" LastActivityDate="2021-01-08T21:50:01.867" Title="Pole placement gains tuning" Tags="&lt;control&gt;&lt;pid&gt;&lt;tuning&gt;&lt;matlab&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7200" PostTypeId="2" ParentId="7194" CreationDate="2015-05-08T18:18:06.360" Score="4" Body="&lt;p&gt;For most applications, I think the calculation you describe is good enough when selecting hardware.  You want your arm to be able to have some lift capacity at the worst case, which is when the arm is fully extended.  Note that you should also take into account the weight of the arm itself which is typically non-negligible.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That being said, yes, there are fancy ways to do this math.  The arm's Jacobian is a matrix that relates joint velocities $\dot{q}$ to end-effector velocity $v_e$ .  Note that the Jacobian itself is a function of the current joint angles $q$:&#xA;$$&#xA;v_e = J(q)\dot{q}&#xA;$$&#xA;It should come as no surprise that the concepts of force and velocity are linked.  In fact, they are orthogonal.  This is called the kineto-statics duality.  This image shows a planar 2 link arm at a number of different configurations.  At each configuration, the velocity manipulability ellipsoid is shown.  The arm can move quickly where the ellipse is long.  There is also a force manipulability ellipsoid (not shown) that is the same except rotated 90 degrees.  In the force manipulability ellipsoid, the arm is strong (and slow) where the ellipse is long.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/xmpiI.jpg&quot; alt=&quot;http://www.kyoto-u.ac.jp/en/research/forefronts/archives/images/rakuyu6-a2.jpg/image&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Jacobian can represent this too:&#xA;$$&#xA;\tau=J^T(q)\gamma_e&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where $\tau$ is the vector of joint torques, and $\gamma_e$ is the end-effector forces.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Calculating the Jacobian is beyond the scope of this thread.  You should get yourself a good textbook or robotics software library to help.  (Searching around on this site should provide some good starting points).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, &lt;a href=&quot;https://engineerjau.wordpress.com/2013/05/04/advanced-robotics-manipulability-ellipsoids/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this page&lt;/a&gt; seems to have a good discussion of manipulability ellipsoids.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-05-08T18:18:06.360" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="7201" PostTypeId="2" ParentId="7156" CreationDate="2015-05-08T18:45:31.000" Score="1" Body="&lt;p&gt;&lt;a href=&quot;http://www.st.com/web/en/resource/technical/document/datasheet/DM00058181.pdf&quot; rel=&quot;nofollow&quot;&gt;http://www.st.com/web/en/resource/technical/document/datasheet/DM00058181.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's use this datasheet as an example.&#xA;Page 18 holds what is known as the clock tree. It shows with what frequency every component ticks with. So let's try following it.&#xA;You have your crystal oscillator working on some frequency (or some internal clock). You multiply it by PLL multiplication factor. PLL is used to make a higher frequency signal from a lower one. You then divide by AHB prescaler. You then divide by APB1 or APB2 prescaler (depending on which timer you're using) and then multiply by 2 if APB prescaler is something other than 1. What we have now is the clock timer module &quot;sees&quot;. Now it divides that clock with timer prescaler and it increments (or decrements) the counter with that frequency. Once it reaches a set point it will throw the interrupt.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;AHB and APB registers are usually set in the project settings of your programming environment. For timer prescaler register refer to the datasheet of your MCU.&lt;/p&gt;&#xA;" OwnerUserId="4017" LastActivityDate="2015-05-08T18:45:31.000" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7203" PostTypeId="1" CreationDate="2015-05-08T19:24:35.360" Score="6" ViewCount="176" Body="&lt;p&gt;I teach FTC robotics to high school students, and while I'm a proficient programmer and can teach them coding fairly well, my mechanical skills are a bit soft.  I'm looking for good sources for myself and the students to go through that gets a little more in depth than &quot;this is a gear, this is a chain, this is gear ratio, etc.,&quot; but maybe not quite the level of building professional / industrial robots.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've used the Vex Robotics Curriculum as a starting reference - &lt;a href=&quot;http://curriculum.vexrobotics.com/curriculum&quot;&gt;http://curriculum.vexrobotics.com/curriculum&lt;/a&gt; - but it doesn't go through some more advanced topics (for example, how to drive a single gear / drive shaft with multiple motors to achieve more power without having to gear down and lose speed.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any good intermediate sources like this?  Do I need to just bit the bullet and get a college level mechanics text?&lt;/p&gt;&#xA;" OwnerUserId="9664" LastActivityDate="2015-05-10T05:00:40.313" Title="Education sources for robot building?" Tags="&lt;mechanism&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7204" PostTypeId="2" ParentId="7203" CreationDate="2015-05-09T02:37:43.557" Score="1" Body="&lt;p&gt;I feel that depending on the student's level of knowledge on entry to your program, the VEX curriculum might be sufficient, as it goes in depth on how torque is applied, systems with mutabal gears etc. I don't necessarily think that directly teaching concepts like &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;how to drive a single gear / drive shaft with multiple motors to achieve more power without having to gear down and lose speed&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;as they can be inferred from the sections on compound gears, and torque. The VEX curriculum also goes in depth on systems building and integration, in my opinion much more useful and basic concepts that can be hard to master in high school, especially when building the elements separately and then integrating them i.e. having a team build the drive and another building the actuator, This opposed to having the group just &quot;build it&quot; which inevitably leads to a very small group of people dominating the process . &lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2015-05-09T02:37:43.557" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7205" PostTypeId="2" ParentId="7188" CreationDate="2015-05-09T11:49:26.647" Score="1" Body="&lt;p&gt;Joint angles can be determined by looking at the gravity vector of each accelerometer.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The paper &lt;a href=&quot;http://ai.stanford.edu/~ang/papers/iros10-LowCostAccelerometers.pdf&quot; rel=&quot;nofollow&quot;&gt;Low-cost Accelerometers for Robotic Manipulator Perception&lt;/a&gt; by Morgan Quigley, Reuben Brewer, Sai P. Soundararaj, Vijay Pradeep, Quoc Le, and Andrew Y. Ng describes exactly what you are attempting to accomplish.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-05-09T11:49:26.647" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7206" PostTypeId="1" AcceptedAnswerId="7209" CreationDate="2015-05-09T12:03:26.127" Score="0" ViewCount="44" Body="&lt;p&gt;I am trying to build a quadcopter from scratch. I have selected few parts but I have no idea whether the quadcopter will come together and fly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would appreciate your feedback on whether the parts I have selected are compatible (&lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__15205__Hobby_King_30A_ESC_3A_UBEC.html&quot; rel=&quot;nofollow&quot;&gt;UBEC&lt;/a&gt;, &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__15193__HobbyKing_Donkey_ST3007_1100kv_Brushless_Motor.html&quot; rel=&quot;nofollow&quot;&gt;Motor&lt;/a&gt;). If not, I would appreciate suggestions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The frame for my quadcopter is in the X configuration and I am making my own. I am expecting the average weight of the quad to be around 800g. I hope the motors and prop combination can hover it well.&lt;/p&gt;&#xA;" OwnerUserId="9667" LastEditorUserId="158" LastEditDate="2015-05-09T15:39:29.213" LastActivityDate="2015-05-09T21:12:10.243" Title="Building my first quadcopter" Tags="&lt;multi-rotor&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7207" PostTypeId="2" ParentId="7203" CreationDate="2015-05-09T12:09:12.070" Score="1" Body="&lt;p&gt;I'm using Springer &lt;strong&gt;Handbook of Robotics&lt;/strong&gt; written by &lt;strong&gt;Bruno Siciliano&lt;/strong&gt; (Editor) is a great source and I think easy to understand. It includes almost all contents about robotics. Also you can look video courses from &lt;a href=&quot;https://www.coursera.org/course/conrob&quot; rel=&quot;nofollow&quot;&gt;&lt;strong&gt;coursera&lt;/strong&gt;&lt;/a&gt; and &lt;a href=&quot;https://www.edx.org/course/autonomous-mobile-robots-ethx-amrx&quot; rel=&quot;nofollow&quot;&gt;&lt;strong&gt;edx&lt;/strong&gt;&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="9504" LastActivityDate="2015-05-09T12:09:12.070" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7208" PostTypeId="2" ParentId="7175" CreationDate="2015-05-09T13:52:51.953" Score="2" Body="&lt;p&gt;Raspberry Pi 2 will give you lot of options to play with in robotics field, ardunio would be nice addon with it. Another nice option would be ODROID , you can setup it up with ROS. &#xA;Now regarding the language, C would be good.&lt;/p&gt;&#xA;" OwnerUserId="9556" LastActivityDate="2015-05-09T13:52:51.953" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7209" PostTypeId="2" ParentId="7206" CreationDate="2015-05-09T21:12:10.243" Score="0" Body="&lt;p&gt;So generally for Quadcopter design you want the hover throttle (the point where the weight is balanced with the thrust produced) should be 50%. So if you look at the product page for the motor you posted you will see some measured thrust values&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;10x4.7 - 11.1v - 21A - 1150g Thrust&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;9050 - 11.1v - 18A - 900g Thrust&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;1060 (3 blade) - 11.1v - 23A - 1200g Thrust&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;with a 9x4.5 prop  your going to get a hair less than the rated thrust for a 9050 (9x5) prop, with four motors you will probably get around 3000g of thrust or, based on a 800g frame a 26% hover throttle, as you can see the motor is capping out at 18A meaning you could go with a 20A esc to save weight. This data is based on a 3s battery so with a hover current draw of 18A*4*.26=18.7A you could get around 7mins of flight time with a 2.2Ah battery (2.2Ah/18.75A)&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;4 x motors 304g&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;4 x props 36g&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;4 x 30A esc 128g&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;1 x &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/uh_viewItem.asp?idProduct=21346&quot; rel=&quot;nofollow&quot;&gt;2.2Ah 3S battery&lt;/a&gt; 163g&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;this is already 632g pretty close to 800g this is without a flight controller or misc connectors receiver frame etc... is it possible? yes but expect it to be a little heavier.&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2015-05-09T21:12:10.243" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7210" PostTypeId="1" CreationDate="2015-05-10T00:12:15.777" Score="2" ViewCount="218" Body="&lt;p&gt;I saw a video of a robot used in special education with children on the autism spectrum (&lt;a href=&quot;https://www.youtube.com/watch?v=FQcjfebQXgQ&quot; rel=&quot;nofollow&quot;&gt;https://www.youtube.com/watch?v=FQcjfebQXgQ&lt;/a&gt;).  My son isn't autistic, he has Tourette Syndrome, ADHD, executive function problems, and OCD.  A robot could be quite helpful for him.  Where can I buy one?  I don't need it to look like a human being.  It just needs to be interactive and reasonable cute.  As my son is getting ready for bed, he needs someone to talk him through his steps, give him positive feedback, and ask questions like &quot;Okay, you're in your pajamas.  Great!  What else do you need to do to get ready for bed?&quot;  And the robot would have a mental list (preprogrammed) of everything that's needed (brush teeth, wash face, put on eczema ointment, put dirty clothes in hamper).  My son is 12 and would like to get ready by himself -- without Mama or Papa -- but he gets sidetracked when he's in his room on his own.  The robot doesn't need to be able to &quot;see&quot; him brushing his teeth.  He just needs to be able to hear my son saying, &quot;I brushed my teeth.&quot;  Because when the two of them together decide he has made it through his routine, then they can call me in, and I'll check, and then we'll do our bedtime reading.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's an example of what I have in mind.  There are other situations where I could imagine a robot being helpful for him.&lt;/p&gt;&#xA;" OwnerUserId="9671" LastActivityDate="2015-05-10T00:51:52.643" Title="recommendation of robot for special education" Tags="&lt;artificial-intelligence&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7211" PostTypeId="2" ParentId="7210" CreationDate="2015-05-10T00:51:52.643" Score="1" Body="&lt;p&gt;Honestly, this would be extremely complex to program and I am not aware of any off the shelf solutions. Somewhere you might start is using somthing like &lt;a href=&quot;http://jasperproject.github.io/&quot; rel=&quot;nofollow&quot;&gt;jasper&lt;/a&gt; to implment some simple procudures, you could even put it along with its microphone and speaker in a cute case.&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2015-05-10T00:51:52.643" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7212" PostTypeId="1" CreationDate="2015-05-10T01:28:06.013" Score="0" ViewCount="385" Body="&lt;p&gt;I have a stepper motor which has an internal controller. &#xA;I would like to determine them both, but don't know how i should approach the problem. &#xA;the system receives a input velocity and position, and moves toward that position using that velocity. The input could also just be a velocity. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The plant is a Pan and tilt unit, which has 2 stepper motors. I Tried with ident but only got a fit of 5 %...  My input was a noisy signal, and output  was the position it writes out. &lt;/p&gt;&#xA;" OwnerUserId="9659" LastActivityDate="2015-05-10T01:28:06.013" Title="estimate transfer function of stepper motor?" Tags="&lt;control&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7214" PostTypeId="2" ParentId="7203" CreationDate="2015-05-10T05:00:40.313" Score="3" Body="&lt;h2&gt;Books&lt;/h2&gt;&#xA;&lt;p&gt;FIRST and VEX are fairly large competitions, so it should come as no surprise that people have literally written books on how to participate.  My favorite book aimed at FTC is &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/1492763950&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;FTC Robotics: Tips, Tricks, Strategies, and Secrets&lt;/a&gt;.  They've made several editions of this book; although it's not a structured curriculum, it is a great guide and a must have for a team.&lt;/p&gt;&#xA;&lt;p&gt;If you're looking for &lt;em&gt;inspiration&lt;/em&gt;, but not necessarily a guidebook, the FIRST Robotics: Behind the Design books (editions for &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/1592533663&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;Aim High&lt;/a&gt; and &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/1592534112&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;Rack 'N' Roll&lt;/a&gt;), which document the designs of world-championship bots from those years.  It's not detailed enough of a description to &lt;em&gt;copy&lt;/em&gt; their work, per se, but they do present some very interesting concepts.&lt;/p&gt;&#xA;&lt;p&gt;Some non-FTC/VEX specific books can be helpful, too.  For instance, I found &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/0071408509&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;Building Robot Drive Trains&lt;/a&gt; to be a helpful book, and should be reachable by any highschooler with a working knowledge of trig.  A detailed-but-good book is &lt;a href=&quot;http://www.amazon.com/Constructing-Robot-Bases-Tab-Electronics/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Constructing Robot Bases&lt;/a&gt; that describes different methods of chassis construction.  Some of it is not so applicable because it assumes you have access to any and all materials.&lt;/p&gt;&#xA;&lt;h2&gt;Online Curriculum/Classes&lt;/h2&gt;&#xA;&lt;p&gt;You've already found the VEX curriculum; another great resource are the CMU curricula.  Since I'm VEX-centric, I know about the &lt;a href=&quot;http://education.rec.ri.cmu.edu/products/cortex_video_trainer/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Cortex Video Trainer&lt;/a&gt;.  I'm sure there's something similar for the TETRIX platform.&lt;/p&gt;&#xA;&lt;p&gt;Another answer mentioned Coursera's &lt;a href=&quot;https://www.coursera.org/course/conrob&quot; rel=&quot;nofollow noreferrer&quot;&gt;Control of Mobile Robotics&lt;/a&gt; course from Georgia Tech.  This is an &lt;em&gt;incredible&lt;/em&gt; course (I took it my senior year in high school, and have actually met the professor who created it), but a working knowledge of the basics of differential equations is pretty much a requirement to understand &lt;em&gt;all&lt;/em&gt; of it... so that's most likely out of reach of &lt;em&gt;most&lt;/em&gt; high schoolers.  Some of the early videos could be helpful to your programmers, but it doesn't discuss construction/design at all.  I can't speak to the edx course (I haven't taken it, but might now that I've heard of it), but I'd assume it's probably in the same vein of prerequisites.&lt;/p&gt;&#xA;&lt;h2&gt;Team Websites&lt;/h2&gt;&#xA;&lt;p&gt;One of the best ways to learn how to build competition robots is to read blogs and websites made by competitors.  For a taste of blatant self-promotion, &lt;a href=&quot;http://wp.robodesigners.com/wordpress/?page_id=198&quot; rel=&quot;nofollow noreferrer&quot;&gt;my team's website&lt;/a&gt; has a series of tutorials on how to certain VEX components.  Xander Soldaat's blog, &lt;a href=&quot;http://botbench.com/blog/about/&quot; rel=&quot;nofollow noreferrer&quot;&gt;BotBench&lt;/a&gt;, is &lt;em&gt;&lt;strong&gt;the&lt;/strong&gt;&lt;/em&gt; source for a lot of ROBOTC related content.  Find out who won the World Championships for FTC last year, and look up their websites; the best teams often share their secrets.&lt;/p&gt;&#xA;" OwnerUserId="314" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2015-05-10T05:00:40.313" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7215" PostTypeId="1" AcceptedAnswerId="7252" CreationDate="2015-05-10T18:31:48.040" Score="4" ViewCount="2420" Body="&lt;p&gt;Over the past few weeks, I have been attempting to interface the iRobot Create 2 with an Arduino Uno. As of yet, I have been unable to read sensor values back to the Arduino. I will describe by hardware setup and my Arduino code, then ask several questions; hopefully, answers to these questions will be helpful for future work with the Create 2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Hardware:&lt;/strong&gt;&#xA;The iRobot Create 2 is connected to the Arduino Uno according to &lt;a href=&quot;http://www.irobot.com/~/media/MainSite/PDFs/About/STEM/Create/Arduino_Tutorial.pdf?la=en&quot; rel=&quot;nofollow noreferrer&quot;&gt;the suggestions given by iRobot&lt;/a&gt;. Instead of the diodes, a DC buck converter is used, and the transistor is not used because a software serial port is used instead of the UART port.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Software:&lt;/strong&gt;&#xA;The following is the code that I am implementing on the Arduino. The overall function is to stop spinning the robot once the angle of the robot exceeds some threshold. A software serial port is used, which runs at the default Create 2 Baud rate.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;SoftwareSerial.h&amp;gt;&#xA;int rxPin=3;&#xA;int txPin=4;&#xA;int ddPin=5; //device detect&#xA;int sensorbytes[2]; //array to store encoder counts&#xA;int angle;&#xA;const float pi=3.1415926;&#xA;#define left_encoder (sensorbytes[0])&#xA;#define right_encoder (sensorbytes[1])&#xA;SoftwareSerial Roomba(rxPin,txPin);&#xA;&#xA;void setup() {&#xA;  pinMode(3, INPUT);&#xA;  pinMode(4, OUTPUT);&#xA;  pinMode(5, OUTPUT);&#xA;  pinMode(ledPin, OUTPUT);&#xA;  Roomba.begin(19200);&#xA;&#xA;  // wake up the robot&#xA;  digitalWrite(ddPin, HIGH);&#xA;  delay(100);&#xA;  digitalWrite(ddPin, LOW);&#xA;  delay(500);&#xA;  digitalWrite(ddPin, HIGH);&#xA;  delay(2000);&#xA;&#xA;  Roomba.write(byte(128));  //Start&#xA;  Roomba.write(byte(131));  //Safe mode&#xA;  updateSensors();&#xA;&#xA;  // Spin slowly&#xA;  Roomba.write(byte(145));&#xA;  Roomba.write(byte(0x00));&#xA;  Roomba.write(byte(0x0B));&#xA;  Roomba.write(byte(0xFF));&#xA;  Roomba.write(byte(0xF5));  &#xA;}&#xA;&#xA;void loop() {&#xA;    updateSensors();&#xA;    // stop if angle is greater than 360 degrees&#xA;    if(abs(angle)&amp;gt;2*pi){&#xA;      Roomba.write(173);&#xA;      delay(100);&#xA;    }&#xA;}&#xA;&#xA;void updateSensors() {&#xA;  // call for the left and right encoder counts&#xA;  Roomba.write(byte(148));&#xA;  Roomba.write(byte(2));&#xA;  Roomba.write(byte(43));&#xA;  Roomba.write(byte(44));&#xA;  delay(100);&#xA;&#xA;  // load encoder counts into an array&#xA;  int i = 0;&#xA;  while(Roomba.available()) {&#xA;    int c = Roomba.read();&#xA;    sensorbytes[i] = c;&#xA;    i++;&#xA;  }&#xA;  angle=((right_encoder*72*pi/508.8)-(left_encoder*72*pi/508.8))/235;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Questions:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Am I loading the sensor values into the array correctly?&lt;/strong&gt; This same code works when a bump and run program is implemented, but that requires knowing only one bit rather than two bytes.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;How many bytes can be read over the serial connection at a time?&lt;/strong&gt; A previous post (&lt;a href=&quot;https://robotics.stackexchange.com/questions/2530/help-sending-serial-command-to-roomba/2537#2537&quot;&gt;Help sending serial command to Roomba&lt;/a&gt;) highlights that one byte can be sent at a time. Does this imply that the reverse is true? If so, would a solution be to use a char array to read the values instead and then to append two chars to form an signed int?&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Is serial communication synchronization a problem?&lt;/strong&gt; I am assuming that synchronization is not a problem, but is it possible for the bytes to be split on the nibble boundaries? This would present a problem because there is not a nibble datatype. &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="9585" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2016-01-07T14:33:01.590" Title="Arduino-Create 2: Reading Sensor Values" Tags="&lt;arduino&gt;&lt;irobot-create&gt;&lt;roomba&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7216" PostTypeId="1" AcceptedAnswerId="7217" CreationDate="2015-05-10T19:59:33.537" Score="1" ViewCount="113" Body="&lt;p&gt;I want to move a robot to a certain distance say 1 meter.&#xA;What are the different ways that i can implement to do so?&#xA;For example I can measure the circumference of the wheel and assign time of rotation to move it. what are other techniques to achieve this?&lt;/p&gt;&#xA;" OwnerUserId="9060" LastActivityDate="2015-05-10T20:07:48.730" Title="What are the different ways to control distance to be covered by a robot?" Tags="&lt;wheeled-robot&gt;&lt;movement&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7217" PostTypeId="2" ParentId="7216" CreationDate="2015-05-10T20:07:48.730" Score="2" Body="&lt;p&gt;There are far too many to list them all here but I can list the most common ones:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;As you said base the movement off the motor RPM, and the diameter of the wheels and move for a period of time. This is not normally very accurate and can result in the robot &quot;leaning&quot; one way or another.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Use potentiometers to directly measure the wheel rotation and bring the robot to a halt when the desired distance is reached, this can be more accurate&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Measure an external reference with somthing e.g. ultrasonic sensor, camera, lidar etc. this can have varying degrees of accuracy depending on the specific setups but can be very good&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Use an optical flow sensor to measure the ground movement under you e.g. laser mouse sensor , this can have varying degrees of accuracy but generally very good &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Use a ball mouse in the same fashion, generally less accurate, and needs a very flat smooth surface. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;What specific application do you have in mind?&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2015-05-10T20:07:48.730" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7219" PostTypeId="1" AcceptedAnswerId="7236" CreationDate="2015-05-11T03:42:25.527" Score="1" ViewCount="807" Body="&lt;p&gt;I was having problems reading sensor information from my Irobot Create 2 and sent an email asking for help from the Irobot staff. They were super helpful and gave me an answer(the next day!!!) that helped push along my project. I was requesting data from the create2 to print to the screen so I could figure out how to write a code that would read the data. I started with this section of code that was not working for me (I trimmed some of the code off that controlled other functions):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;from Tkinter import *&#xA;from subprocess import call&#xA;import datetime&#xA;import serial&#xA;import ttk&#xA;import struct&#xA;import thread&#xA;&#xA;port = '/dev/ttyUSB0' #sets the com port for Atlas&#xA;baud = 115200 #sets the baud rate&#xA;connection = serial.Serial(port, baud) #starts the serial communication&#xA;&#xA;#program to read communication from create2&#xA;def program2(threadName):&#xA;    while True:&#xA;        x = connection.read()&#xA;        print x&#xA;&#xA;#program to write to create2    &#xA;def program1(threadName):&#xA;    atlas = Tk() #starts a new GUI for atlas control&#xA;    atlas.geometry('1000x500') #sets the size of the control window&#xA;    atlas.title('Atlas Control Panal') #sets the name of the control window&#xA;&#xA;    def sendCommandASCII(command):#used to send a command to the create2&#xA;    cmd = &quot;&quot;&#xA;    for v in command.split():&#xA;        cmd += chr(int(v))&#xA;&#xA;    sendCommandRaw(cmd)&#xA;&#xA;    def sendCommandRaw(command):#used to send a command to the create2&#xA;    global connection&#xA;&#xA;    try:&#xA;        if connection is not None:&#xA;            connection.write(command)&#xA;        else:&#xA;            tkMessageBox.showerror('Not connected!', 'Not connected to a robot!')&#xA;            print &quot;Not connected.&quot;&#xA;    except serial.SerialException:&#xA;        print &quot;Lost connection&quot;&#xA;        tkMessageBox.showinfo('Uh-oh', &quot;Lost connection to the robot!&quot;)&#xA;        connection = None&#xA;&#xA;    def test():#sets a test command up to check connection&#xA;        global buttonpress&#xA;        buttonpress='test'&#xA;        sendCommandASCII('142 7')&#xA;&#xA;    #makes a button on the GUI that starts the test command&#xA;    button1 = Button(atlas, text = 'test mode', command=test)&#xA;    button1.place(x=600, y=400)&#xA;    button1.config(width=10, height=5)&#xA;&#xA;    atlas.mainloop() #runs the GUI as a loop to keep the window open.&#xA;&#xA;#runs the read and the write program at the same time&#xA;try:&#xA;    thread.start_new_thread(program1, (&quot;program1&quot;,))&#xA;    thread.start_new_thread(program2, (&quot;program2&quot;,))&#xA;except Exception, e:&#xA;    print str(e)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;They told me that the code was actually working fine but I was trying to print out the value of the sensor packet without parsing it in any way. They then recommended I change the code in program2 to this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;while True:&#xA;&#xA;    def toHexFromByte(val):&#xA;        return hex(ord(val))[2:}.rjust(2, '0').upper()&#xA;&#xA;    x = connection.read()&#xA;    for b in x:&#xA;        print toHexFromByte(b)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;this works beautifully and prints to the screen if the bumper is pressed or a wheel drops. My question is how to deal with responses that are longer than one byte (ie Packet ID: 22 for voltage)? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I try Packet ID: 22 it prints to screen and it sends the high byte of 3F and a low byte of D7. I can manually combine them to get 3FD7 and convert it to a decimal of 16.343 Volts but I would like to figure a way to print to screen the the voltage by having my program do this for me. Many of the sensors send data in 2 bytes and I need a way to make sure that it is combined automatically. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Robb &lt;/p&gt;&#xA;" OwnerUserId="9676" LastActivityDate="2015-05-11T22:45:49.440" Title="Issue with multiple bytes from Irobot Create 2" Tags="&lt;irobot-create&gt;&lt;python&gt;&lt;roomba&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7220" PostTypeId="2" ParentId="7178" CreationDate="2015-05-11T10:13:59.580" Score="18" Body="&lt;p&gt;I'm back to a computer!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Like I said in &lt;a href=&quot;https://robotics.stackexchange.com/questions/7178/is-ros-robot-operating-system-mandatory#comment10216_7178&quot;&gt;this comment&lt;/a&gt;, ROS is generally not mandatory. ROS is one platform among many, famous mostly due to Willow Garage giving away free robots at some point in time to whoever wrote the most ROS modules. That said, it's not the best platform possible, and is certainly nothing overly special. Particularly, the said contest resulted in a lot of low-quality modules just to get the numbers higher.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Over time, the quality of the ROS modules have got better and there are a lot of them as well. Using ROS therefore, you have the benefit of reusing a lot of what's already done. You can read &lt;a href=&quot;http://answers.ros.org/question/33811/why-choose-ros/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; some reasons why you may want to use ROS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With that in mind, you should look out for the side effects as well.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Distributed Control&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;With ROS, you have many nodes that talk with each other through the network. This is sometimes good and easy, but generally results in a wildly varying delay in reception of messages. As a result, you would have to have a large control delay to make sure all messages arrive, which means you cannot react fast to events, which in turn means you have to move your robot at slower speeds so as not to miss those events.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Believe it or not, people actually do robot control through ROS (&lt;a href=&quot;http://moveit.ros.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;MoveIt!&lt;/a&gt; is the name of the relevant set of components). Slow. Unsafe. But easy!&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Non-Real-time&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Even when not distributed, ROS is not a real-time platform. That means you are at complete discretion of the Linux kernel to schedule your tasks at any time it sees fit. This is ok for some applications, but not ok for others. So you need to look at your own requirements. Do you need to have a &lt;em&gt;guarantee&lt;/em&gt; that your task would finish within a known time frame? If so, you need a real-time system.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Hosted Runtime Environment&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Another point to consider is that, while ROS is a general protocol of communication, it's essentially only supported for hosted environments. &lt;em&gt;Hosted&lt;/em&gt; means the code runs on top of a kernel, as opposed to &lt;em&gt;freestanding&lt;/em&gt; which means the code directly controls the hardware (e.g., on a microcontroller).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your robotics application is run close to hardware, and therefore you would require a program that runs on a microcontroller, ROS is of no help to you.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Platform Lock-in&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Last but not least, developing for ROS results in a platform lock-in. This means that if in the future, for one reason or another, you decide to base your work on another robotic platform, such as OROCOS, YARP, etc, that would be excruciating.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You would also be somewhat locked to Linux. Linux is the best, no doubt, but one day you may end up having to support another system, such as QNX, VxWorks etc, and you would have problems there as well.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;If you are writing for microcontrollers, then forget about ROS. If you are writing high-level modules, I highly recommend writing portable code. For example, say you have developed a new sensor, and you want to write a module that acquires data from this sensor, which is connected to your computer via the CAN bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you could do in this situation is to write an independent library, with functions that are able to work with your sensor and acquire data. You could even think of spawning a thread in the library that acquires and enqueues data periodically.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you have this helper library, you are free to write a CLI, GUI, ROS module, OROCOS module, YARP module, connect to Matlab, or whatever else you want to use to interact with your sensor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Final note: what I've said here is generally applicable to all robotics platforms and not just ROS.&lt;/p&gt;&#xA;" OwnerUserId="158" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2015-05-11T12:40:44.660" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7221" PostTypeId="1" AcceptedAnswerId="7223" CreationDate="2015-05-11T10:24:33.383" Score="3" ViewCount="2428" Body="&lt;p&gt;I would like to know what are the differences between Positioning and Localization Systems. In most review papers they are used interchangeably. Are they the same?&#xA; For example:&#xA;GPS(Global Positioning system): gives coordinates of receiver and&#xA;SLAM(Simultaneous localization and mapping): constructing or updating a map of an unknown environment&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is difference :&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Positioning:&lt;/strong&gt; only gives information about receiver coordinates.No information about enviorement&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Localization:&lt;/strong&gt; gives information about receiver coordinates and also enviorement. positioning is a subtopic of localization&lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2015-05-11T10:38:20.223" LastActivityDate="2015-05-11T11:01:53.093" Title="What is the difference between Positioning and Localization Systems" Tags="&lt;localization&gt;&lt;slam&gt;&lt;gps&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="7223" PostTypeId="2" ParentId="7221" CreationDate="2015-05-11T11:01:53.093" Score="5" Body="&lt;p&gt;In my opinion, the main difference is :&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Positioning : gives information about the robot coordinates. It gives raw data that you can use.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Localization : it is the process of the robot (or other actor) locating itself (or the robot) on the map. Here a &quot;method is applied&quot; to locate the robot. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Positioning gives you the coordinates. Localization is determining the place of those coordinate on the map.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most of the time the difference boil down to &quot;do you have the position information directly available&quot; (positioning) or &quot;do you need to determine it on a map using other data you got&quot; (localization).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bear in mind that it is very often context dependent and that the two terms are nowadays used with very similar meaning. See &lt;a href=&quot;https://gis.stackexchange.com/questions/106785/difference-between-positioning-and-localization&quot;&gt;this link for more info&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="1615" LastEditorUserId="-1" LastEditDate="2017-04-13T12:34:16.087" LastActivityDate="2015-05-11T11:01:53.093" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7224" PostTypeId="2" ParentId="4943" CreationDate="2015-05-11T11:28:23.117" Score="0" Body="&lt;p&gt;I'm currently building an humanoid and I was starting from a ball join base so, I have done a lot a research onn how to mechanise them until I found &lt;strong&gt;&lt;em&gt;Danny Choo&lt;/em&gt;&lt;/strong&gt; who give us a brilliant couple of solution. So I do the exact same things than you and &lt;strong&gt;&lt;em&gt;Danny Choo&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I source the majority of my components from aliexpress since there is a lot for an humanoid. And I found that tiny motors for a ridiculous amount of cost.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;that is what you are looking for, for the arm :&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://fr.aliexpress.com/item/10PCS-DC-3V-6V-9V-micro-Planetary-gear-motor-Variable-Speed-Gearmotor-micro/32239559111.html&quot; rel=&quot;nofollow&quot;&gt;http://fr.aliexpress.com/item/10PCS-DC-3V-6V-9V-micro-Planetary-gear-motor-Variable-Speed-Gearmotor-micro/32239559111.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;some other results here &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://fr.aliexpress.com/w/wholesale-planetary.html?initiative_id=SB_20150511024702&amp;amp;site=fra&amp;amp;groupsort=1&amp;amp;SortType=price_asc&amp;amp;shipCountry=fr&amp;amp;SearchText=planetary&quot; rel=&quot;nofollow&quot;&gt;http://fr.aliexpress.com/w/wholesale-planetary.html?initiative_id=SB_20150511024702&amp;amp;site=fra&amp;amp;groupsort=1&amp;amp;SortType=price_asc&amp;amp;shipCountry=fr&amp;amp;SearchText=planetary&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://fr.aliexpress.com/w/wholesale-planetary.html?initiative_id=SB_20150511024702&amp;amp;site=fra&amp;amp;groupsort=1&amp;amp;SortType=price_asc&amp;amp;shipCountry=fr&amp;amp;SearchText=planetary&quot; rel=&quot;nofollow&quot;&gt;http://fr.aliexpress.com/w/wholesale-planetary.html?initiative_id=SB_20150511024702&amp;amp;site=fra&amp;amp;groupsort=1&amp;amp;SortType=price_asc&amp;amp;shipCountry=fr&amp;amp;SearchText=planetary&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Solarbotic is really expensive, too much, the prices are insane, I never bought anythings to that seller for that reason.&#xA;you rather try aliexpress and buy your items directly from china where it is build, you could experiments some huge delay as the goods travel by boat. be aware of exchanges taxes shipping cost etc...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind that you should add some postion sensor and electronic and programming to have a working servo. you should apreciate that : &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://fr.aliexpress.com/item/Plastic-motor-crown-gear-white-eleven-kinds-of-standard-module-0-5-for-DIY/32229478401.html&quot; rel=&quot;nofollow&quot;&gt;http://fr.aliexpress.com/item/Plastic-motor-crown-gear-white-eleven-kinds-of-standard-module-0-5-for-DIY/32229478401.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I didn't found a sensor to do the job yet.&#xA;before buying try to know how much tork you need and how much you'll get from the motor.&lt;/p&gt;&#xA;" OwnerUserId="9677" LastEditorUserId="9677" LastEditDate="2015-05-11T12:05:21.300" LastActivityDate="2015-05-11T12:05:21.300" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7225" PostTypeId="1" AcceptedAnswerId="7237" CreationDate="2015-05-11T14:24:02.547" Score="2" ViewCount="269" Body="&lt;p&gt;I have a requirement for a motor that pulls a piece of rope until the rope is taught. However I'm at a loss as to how to achieve this, I'm sure it must've been done before but I'm not sure how to best describe this in a way that would get me more results. I wondered if there are any sensors or pre-established methods for sensing resistance to motion in electrical motors?&lt;/p&gt;&#xA;" OwnerUserId="7185" LastActivityDate="2015-05-15T13:46:55.377" Title="Robotic winch force sensor" Tags="&lt;motor&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7226" PostTypeId="1" CreationDate="2015-05-11T16:27:16.100" Score="0" ViewCount="52" Body="&lt;p&gt;I am at the moment trying to identify a system using frequency sweep. I have been using Mathematica and have created a frequency sweep as such.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;g[t_] := 0.799760*Sin[2 Pi (3 t/333.3 + 1) t];&#xA;Plot[g[t], {t, 0, 1000000000000000000000000000000}]&#xA;g[#] &amp;amp; /@ Range[0, 5, 0.001]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The max frequency is 10 Hz, I sample the data using 1000 Hz. But at what rate should I input it to the system, and what rate should I read from it?&lt;/p&gt;&#xA;" OwnerUserId="9678" LastEditorUserId="9176" LastEditDate="2015-05-26T13:05:24.217" LastActivityDate="2015-05-27T11:54:22.093" Title="At what frequency should I input and read values?" Tags="&lt;control&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7229" PostTypeId="1" AcceptedAnswerId="7246" CreationDate="2015-05-11T17:30:20.397" Score="3" ViewCount="2317" Body="&lt;p&gt;This post is a follows from an earlier post (&lt;a href=&quot;https://robotics.stackexchange.com/questions/7121/irobot-create-2-angle-measurement&quot;&gt;iRobot Create 2: Angle Measurement&lt;/a&gt;). I have been trying to use the wheel encoders to calculate the angle of the Create 2. I am using an Arduino Uno to interface with the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I use the following code to obtain the encoder values. A serial monitor is used to view the encoder counts.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void updateSensors() {&#xA;  Roomba.write(byte(149)); // request encoder counts&#xA;  Roomba.write(byte(2));&#xA;  Roomba.write(byte(43));&#xA;  Roomba.write(byte(44));&#xA;  delay(100); // wait for sensors &#xA;  int i=0;&#xA;  while(Roomba.available()) {&#xA;    sensorbytes[i++] = Roomba.read();  //read values into signed char array&#xA;  }&#xA;&#xA;  //merge upper and lower bytes&#xA;  right_encoder=(int)(sensorbytes[2] &amp;lt;&amp;lt; 8)|(int)(sensorbytes[3]&amp;amp;0xFF);&#xA;  left_encoder=int((sensorbytes[0] &amp;lt;&amp;lt; 8))|(int(sensorbytes[1])&amp;amp;0xFF);&#xA;&#xA;  angle=((right_encoder*72*3.14/508.8)-(left_encoder*72*3.14/508.8))/235;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The code above prints out the encoder counts; however, when the wheels are spun backwards, the count increases and will never decrement. Tethered connection to the Create 2 using RealTerm exhibits the same behavior; &lt;strong&gt;this suggests that the encoders do not keep track of the direction of the spin.&lt;/strong&gt; Is this true? &lt;/p&gt;&#xA;" OwnerUserId="9585" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2018-09-15T05:34:05.880" Title="iRobot Create 2: Encoder Counts" Tags="&lt;irobot-create&gt;&lt;roomba&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7233" PostTypeId="2" ParentId="7219" CreationDate="2015-05-11T20:25:21.287" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Many of the sensors send data in 2 bytes and I need a way to make sure that it is combined automatically.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Robb,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have been working on a project and have faced a similar problem. The best way that I have found to combine individual bytes has been to use bit shifting to concatenate the bytes into a single variable. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am using Arduino to interface with the Create 2, and I am trying to work with the encoder counts of each wheel, which are two bytes signed. I load an integer array with the bytes individually, and then, I join them as follows:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;right_encoder=(array[0] &amp;lt;&amp;lt; 8)|(array[1]);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;array[0] is the high byte, and array[1] is the low byte. The bit shifting shifts the high byte by 8 bits, which makes room for the low byte. The low byte is then 'or'ed with the shifted high byte, which finalizes the concatenation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously, the syntax will look different for you, but the idea is the same.&lt;/p&gt;&#xA;" OwnerUserId="9585" LastActivityDate="2015-05-11T20:25:21.287" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7234" PostTypeId="1" CreationDate="2015-05-11T20:51:48.603" Score="2" ViewCount="187" Body="&lt;p&gt;Lately I've been interested in comparing the energy density of &lt;a href=&quot;http://www.estesrockets.com/rockets/engines/standard/1613-c6-3&quot; rel=&quot;nofollow&quot;&gt;model rocket engines&lt;/a&gt; to lithium polymer batteries (attached to motors and propellers) for propelling things upwards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To get a feel for this, I decided to compare an Estes C6-5 motor to a 3DR Iris + quadcopter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Estes C6-5 has initial mass of 25.8g, and produces 10 N s total impulse. So, the &quot;Impulse density&quot; is about 10 N s / 25.8g = 0.38 N s g^-1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3DR Iris+ weighs 1282g without battery. 3.5ah battery weighs 250g and will power hover for about 20 minutes (so about 10.5a draw). Thrust produced to hover on Earth is 9.8N kg^-1 * 1.532 kg = 14.7N. &quot;Impulse density&quot; is 14.7N * 1200s / 250g = 70.6 N s g^-1 .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, according to my math here, the LiPo is about 0.38/70.6 = 186 times more energy dense than the model rocket engine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, the model rocket engine will lose 12.48g of propellant by the end of the flight so it will be effectively a little lighter, but that's not going to affect things by a factor of 100.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does this seem right to you? Am I missing anything?&lt;/p&gt;&#xA;" OwnerUserId="1473" LastEditorUserId="1473" LastEditDate="2015-05-12T13:39:04.687" LastActivityDate="2017-10-17T20:54:28.887" Title="Are LiPo really 100 times more energy dense than model rockets?" Tags="&lt;quadcopter&gt;&lt;rocket&gt;&lt;lithium-polymer&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7235" PostTypeId="1" AcceptedAnswerId="7348" CreationDate="2015-05-11T21:21:28.737" Score="7" ViewCount="3732" Body="&lt;p&gt;The quadrotor system is  multi-ODEs equations. The linearized model is usually used especially for position tracking, therefore one can determine the desired x-y positions based on the roll and pitch angles. As a result,  one nested loop which has inner and outer controllers is needed for controlling the quadrotor. For implementation, do I have to put &lt;code&gt;while-loop&lt;/code&gt; inside &lt;code&gt;ode45&lt;/code&gt; for the inner attitude controller? I'm asking this because I've read in a paper that the inner attitude controller must run faster (i.e. 1kHz) than the position controller (i.e. 100-200 Hz). In my code, both loops run at 1kHz, therefore inside &lt;code&gt;ode45&lt;/code&gt; there is no &lt;code&gt;while-loop&lt;/code&gt;. Is this correct for position tracking? If not, do I have to insert &lt;code&gt;while-loop&lt;/code&gt; inside &lt;code&gt;ode45&lt;/code&gt; for running the inner loop? Could you please suggest me a pseudocode for position tracking?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To be more thorough, the dynamics equations of the nonlinear model of the quadrotor is provided  &lt;a href=&quot;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.149.4367&amp;amp;rep=rep1&amp;amp;type=pdf&quot;&gt;here&lt;/a&gt;, if we assume the small angles, the model is reduced to the following equations &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{align}&#xA;\ddot{x}      &amp;amp;= \frac{U_{1}}{m} ( \theta \cos\psi + \phi \sin\psi) \\&#xA;\ddot{y}      &amp;amp;= \frac{U_{1}}{m} ( \theta \sin\psi - \phi \cos\psi) \\&#xA;\ddot{z}      &amp;amp;= \frac{U_{1}}{m} - g   \\&#xA;\ddot{\phi}   &amp;amp;= \frac{l}{I_{x}} U_{2} \\&#xA;\ddot{\theta} &amp;amp;= \frac{l}{I_{y}} U_{3} \\&#xA;\ddot{\psi}   &amp;amp;= \frac{1}{I_{z}} U_{4} \\&#xA;\end{align}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The aforementioned equations are linear. For position tracking, we need to control $x,y,$ and $z$, therefore we choose the desired roll and pitch (i.e. $\phi^{d} \ \text{and} \ \theta^{d}$)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{align}&#xA;\ddot{x}^{d} &amp;amp;= \frac{U_{1}}{m} ( \theta^{d} \cos\psi + \phi^{d} \sin\psi) \\&#xA;\ddot{y}^{d} &amp;amp;= \frac{U_{1}}{m} ( \theta^{d} \sin\psi - \phi^{d} \cos\psi) \\&#xA;\end{align}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore, the closed form for the desired angles can be obtained as follows&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{bmatrix}&#xA;\phi_{d} \\&#xA;\theta_{d} &#xA;\end{bmatrix}&#xA;=&#xA;\begin{bmatrix}&#xA;\sin\psi &amp;amp; \cos\psi \\&#xA;-\cos\psi &amp;amp; \sin\psi &#xA;\end{bmatrix}^{-1}&#xA;\left( \frac{m}{U_{1}}\right) &#xA;\begin{bmatrix}&#xA;\ddot{x}^{d} \\&#xA;\ddot{y}^{d}&#xA;\end{bmatrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My desired trajectory is shown below&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/QDujZ.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The results are &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/UKJKc.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And the actual trajectory vs the desired one is &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/9hbl9.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My code for this experiment is &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;%%&#xA;%######################( Position Controller )%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&#xA;&#xA;clear all;&#xA;clc;&#xA;&#xA;dt = 0.001;&#xA; t = 0;&#xA;&#xA;% initial values of the system&#xA; x = 0;&#xA;dx = 0;&#xA; y = 0;&#xA;dy = 0;&#xA; z = 0;&#xA;dz = 0;&#xA;&#xA;   Phi = 0;&#xA;  dPhi = 0;&#xA; Theta = 0;&#xA;dTheta = 0;&#xA;   Psi = pi/3;&#xA;  dPsi = 0;&#xA;&#xA;&#xA;%System Parameters:&#xA;m  = 0.75;      % mass (Kg)&#xA;L  = 0.25;      % arm length (m)&#xA;Jx = 0.019688; % inertia seen at the rotation axis. (Kg.m^2)&#xA;Jy = 0.019688; % inertia seen at the rotation axis. (Kg.m^2)&#xA;Jz = 0.039380; % inertia seen at the rotation axis. (Kg.m^2)&#xA;g  = 9.81;      % acceleration due to gravity m/s^2&#xA;&#xA;errorSumX = 0;&#xA;errorSumY = 0;&#xA;errorSumZ = 0;&#xA;&#xA;errorSumPhi   = 0;&#xA;errorSumTheta = 0;&#xA;&#xA;pose = load('xyTrajectory.txt');&#xA;&#xA;DesiredX = pose(:,1);&#xA;DesiredY = pose(:,2);&#xA;DesiredZ = pose(:,3);&#xA;&#xA;dDesiredX = 0;&#xA;dDesiredY = 0;&#xA;dDesiredZ = 0;&#xA;&#xA;DesiredXpre = 0;&#xA;DesiredYpre = 0;&#xA;DesiredZpre = 0;&#xA;&#xA;dDesiredPhi = 0;&#xA;dDesiredTheta = 0;&#xA;DesiredPhipre = 0;&#xA;DesiredThetapre = 0;&#xA;&#xA;&#xA;&#xA;for i = 1:6000&#xA;&#xA;   % torque input&#xA;   %&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;( Ux )&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&#xA;   Kpx = 50; Kdx = 8; Kix = 0; &#xA;   Ux = Kpx*( DesiredX(i) - x  ) + Kdx*( dDesiredX - dx ) + Kix*errorSumX;&#xA;&#xA;   errorSumX = errorSumX + ( DesiredX(i) - x );&#xA;&#xA;     dDesiredX = ( DesiredX(i) - DesiredXpre ) / dt;&#xA;   DesiredXpre = DesiredX(i);&#xA;&#xA;   %&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;( Uy )&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&#xA;   Kpy = 100; Kdy = 10; Kiy = 0; &#xA;   Uy = Kpy*( DesiredY(i) - y  ) + Kdy*( dDesiredY - dy ) + Kiy*errorSumY;&#xA;&#xA;&#xA;   errorSumY = errorSumY + ( DesiredY(i) - y );&#xA;&#xA;     dDesiredY = ( DesiredY(i) - DesiredYpre ) / dt;&#xA;   DesiredYpre = DesiredY(i);&#xA;&#xA;&#xA;&#xA;   %&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;( U1 )&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&#xA;   Kpz = 100; Kdz = 20; Kiz = 0; &#xA;   U1 = Kpz*( DesiredZ(i) - z ) + Kdz*( dDesiredZ - dz ) + Kiz*errorSumZ; &#xA;&#xA;   errorSumZ = errorSumZ + ( DesiredZ(i) - z );&#xA;&#xA;      dDesiredZ = ( DesiredZ(i) - DesiredZpre ) / dt;&#xA;   DesiredZpre = DesiredZ(i);&#xA;&#xA;   %#######################################################################&#xA;   %#######################################################################&#xA;   %#######################################################################&#xA;   % Desired Phi and Theta&#xA;   R = [  sin(Psi),cos(Psi); &#xA;         -cos(Psi),sin(Psi)];&#xA;&#xA;&#xA;   DAngles = R\( (m/U1)*[Ux; Uy]);&#xA;&#xA;&#xA;   %Wrap angles&#xA;   DesiredPhi   = wrapToPi( DAngles(1) ) /2;&#xA;   DesiredTheta = wrapToPi( DAngles(2) );&#xA;&#xA;&#xA;   %&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;( U2 )&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&#xA;   KpP = 100; KdP = 10; KiP = 0;&#xA;   U2 = KpP*( DesiredPhi - Phi ) + KdP*( dDesiredPhi - dPhi )  + KiP*errorSumPhi;&#xA;&#xA;   errorSumPhi = errorSumPhi + ( DesiredPhi - Phi );&#xA;&#xA;     dDesiredPhi = ( DesiredPhi - DesiredPhipre ) / dt;&#xA;   DesiredPhipre = DesiredPhi;&#xA;&#xA;&#xA;   %--------------------------------------&#xA;   %&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;( U3 )&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&#xA;&#xA;   KpT = 100; KdT = 10; KiT = 0;&#xA;   U3 = KpT*( DesiredTheta - Theta ) + KdP*( dDesiredTheta - dTheta ) + KiT*errorSumTheta;&#xA;&#xA;    errorSumTheta = errorSumTheta + ( DesiredTheta - Theta );&#xA;&#xA;     dDesiredTheta = ( DesiredTheta - DesiredThetapre ) / dt;&#xA;   DesiredThetapre = DesiredTheta;&#xA;&#xA;&#xA;&#xA;   %--------------------------------------&#xA;   %&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;( U4 )&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&#xA;   KpS = 80; KdS = 20.0; KiS = 0.08;&#xA;   U4 = KpS*( 0 - Psi ) + KdS*( 0 - dPsi );&#xA;&#xA;&#xA;   %###################( ODE Equations of Quadrotor )###################&#xA;   %===================( X )=====================&#xA;   ddx = (U1/m)*( Theta*cos(Psi) + Phi*sin(Psi) );&#xA;&#xA;    dx = dx + ddx*dt;&#xA;     x =  x +  dx*dt;&#xA;   %===================( Y )=====================&#xA;   ddy = (U1/m)*( Theta*sin(Psi) - Phi*cos(Psi) );&#xA;&#xA;    dy = dy + ddy*dt;&#xA;     y =  y +  dy*dt;&#xA;&#xA;   %===================( Z )=====================&#xA;   ddz = (U1/m) - g;&#xA;&#xA;    dz = dz + ddz*dt;&#xA;     z =  z +  dz*dt;&#xA;&#xA;   %===================( Phi )=====================&#xA;   ddPhi = ( L/Jx )*U2;&#xA;&#xA;    dPhi = dPhi + ddPhi*dt;&#xA;     Phi =  Phi +  dPhi*dt;&#xA;&#xA;   %===================( Theta )=====================&#xA;   ddTheta =  ( L/Jy )*U3;&#xA;&#xA;    dTheta =  dTheta + ddTheta*dt;&#xA;     Theta =   Theta +  dTheta*dt;&#xA;&#xA;   %===================( Psi )=====================&#xA;   ddPsi =  (1/Jz)*U4;&#xA;&#xA;    dPsi = dPsi + ddPsi*dt;&#xA;     Psi =  Psi +  dPsi*dt;&#xA;&#xA;   %store the erro&#xA;     ErrorX(i)   = ( x - DesiredX(i) );&#xA;     ErrorY(i)   = ( y - DesiredY(i) );&#xA;     ErrorZ(i)   = ( z - DesiredZ(i) );&#xA;%    ErrorPhi(i)   = ( Phi - pi/4 );&#xA;%    ErrorTheta(i) = ( Theta - pi/4 );&#xA;     ErrorPsi(i)   = ( Psi - 0 );&#xA;&#xA;&#xA;   X(i) = x;&#xA;   Y(i) = y;&#xA;   Z(i) = z;&#xA;&#xA;   T(i) = t;&#xA;&#xA;%    drawnow &#xA;%    plot3(DesiredX, DesiredY, DesiredZ, 'r')&#xA;%    hold on&#xA;%    plot3(X, Y, Z, 'b')&#xA;   t = t + dt; &#xA;&#xA;&#xA;end&#xA;&#xA;&#xA;Figure1 = figure(1);&#xA;set(Figure1,'defaulttextinterpreter','latex');&#xA;%set(Figure1,'units','normalized','outerposition',[0 0 1 1]);&#xA;&#xA;subplot(2,2,1)&#xA;plot(T, ErrorX, 'LineWidth', 2)&#xA;title('Error in $x$-axis Position (m)')&#xA;xlabel('time (sec)')&#xA;ylabel('$x_{d}(t) - x(t)$', 'LineWidth', 2)&#xA;&#xA;subplot(2,2,2)&#xA;plot(T, ErrorY, 'LineWidth', 2)&#xA;title('Error in $y$-axis Position (m)')&#xA;xlabel('time (sec)')&#xA;ylabel('$y_{d}(t) - y(t)$', 'LineWidth', 2)&#xA;&#xA;subplot(2,2,3)&#xA;plot(T, ErrorZ, 'LineWidth', 2)&#xA;title('Error in $z$-axis Position (m)')&#xA;xlabel('time (sec)')&#xA;ylabel('$z_{d} - z(t)$', 'LineWidth', 2)&#xA;&#xA;&#xA;subplot(2,2,4)&#xA;plot(T, ErrorPsi, 'LineWidth', 2)&#xA;title('Error in $\psi$ (m)')&#xA;xlabel('time (sec)')&#xA;ylabel('$\psi_{d} - \psi(t)$','FontSize',12);&#xA;grid on &#xA;&#xA;&#xA;Figure2 = figure(2);&#xA;set(Figure2,'units','normalized','outerposition',[0 0 1 1]);&#xA;&#xA;figure(2)&#xA;plot3(X,Y,Z, 'b')&#xA;grid on&#xA;&#xA;hold on &#xA;plot3(DesiredX, DesiredY, DesiredZ, 'r')&#xA;&#xA;pos = get(Figure2,'Position');&#xA;set(Figure2,'PaperPositionMode','Auto','PaperUnits','Inches','PaperSize',[pos(3),pos(4)]);&#xA;print(Figure2,'output2','-dpdf','-r0');&#xA;&#xA;legend('actual', 'desired')&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The code of the desired trajectory is &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;clear all; clc;&#xA;&#xA;fileID = fopen('xyTrajectory.txt','w');&#xA;&#xA; angle = -pi; radius = 5; z = 0; t = 0;&#xA;&#xA;for i = 1:6000&#xA;    if ( z &amp;lt; 2 ) &#xA;        z = z + 0.1;&#xA;        x = 0; &#xA;        y = 0;&#xA;    end&#xA;    if  ( z &amp;gt;= 2 )&#xA;        angle = angle + 0.1;&#xA;        angle = wrapToPi(angle);&#xA;        x = radius * cos(angle);&#xA;        y = radius * sin(angle);&#xA;        z = 2;&#xA;    end&#xA;&#xA;    X(i) = x;&#xA;    Y(i) = y;&#xA;    Z(i) = z;&#xA;&#xA;    fprintf(fileID,'%f \t %f \t %f\n',x, y, z); end&#xA;&#xA;fclose(fileID); plot3(X,Y,Z) grid on&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="2155" LastEditDate="2015-05-16T23:23:58.183" LastActivityDate="2017-01-20T17:32:33.497" Title="how to implement and code inner and outer PD controllers for quadrotor for position tracking" Tags="&lt;quadcopter&gt;&lt;matlab&gt;&lt;microcontroller&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7236" PostTypeId="2" ParentId="7219" CreationDate="2015-05-11T22:45:49.440" Score="1" Body="&lt;p&gt;The program shown below illustrates two ways of determining result size, and a method that reads the right number of bytes to combine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first method suggested in the program below is to define &lt;code&gt;singleSet&lt;/code&gt;, a set containing the packet numbers of sensors that return single-byte results.  [The function &lt;code&gt;resultSize()&lt;/code&gt; as shown uses &lt;code&gt;return ord(sizesList[sensor]) - ord('0')&lt;/code&gt;; a method depending on &lt;code&gt;singleSet&lt;/code&gt; would instead say &lt;code&gt;return 1 if sensor in singleSet else 2&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second method shown is slightly more adaptable than the first, and if extended would allow treatment of large packets #0-#6.  With a bit more work it could accomodate packets #100-#107.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the output from the program:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; 7  8  9 10 11 12 13 14 15 16 17 18 21 24 32 34 35 36 37 38 45 52 53 58&#xA; 1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1&#xA;&#xA; 0  1  2  3  4  5  6 19 20 22 23 25 26 27 28 29 30 31 33 39 40 41 42 43 44 46 47 48 49 50 51 54 55 56 57&#xA;26 10  6 10 14 12 52  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2&#xA;&#xA; 1  16      54  0x36         54.000&#xA; 1  17      71  0x47         71.000&#xA; 1  18      88  0x58         88.000&#xA; 2  19   27002  0x697a    27002.000&#xA; 2  20   35740  0x8b9c    35740.000&#xA; 1  21     173  0xad        173.000&#xA; 2  22   48847  0xbecf       48.847&#xA; 2  23   57585  0xe0f1       57.585&#xA; 1  24       3  0x3           3.000&#xA; 2  25    5157  0x1425        5.157&#xA; 2  26   13895  0x3647       13.895&#xA; 2  27   22633  0x5869    22633.000&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Here is the program itself.  Replace the call to dummy routine &lt;code&gt;connectionread()&lt;/code&gt; with your &lt;code&gt;connection.read()&lt;/code&gt; call.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#!/usr/bin/env python&#xA;# re: Combining bytes from Create2 sensor inputs &#xA;# http://robotics.stackexchange.com/questions/7219/issue-with-multiple-bytes-from-irobot-create-2&#xA;&#xA;singleSet = set((7,8,9,10,11,12,13,14,15,16,17,18,21,24,&#xA;                 32,34,35,36,37,38,45,52,53,58))&#xA;&#xA;sizesList = 'J:6:&amp;gt;&amp;lt;d1111111111112212212222222121111122222212222221122221'&#xA;&#xA;def resultSize(sensor):&#xA;    if sensor &amp;lt; 59:       # Sensor groups &amp;gt; 58 not handled&#xA;        return ord(sizesList[sensor]) - ord('0')&#xA;    else: return -1&#xA;&#xA;# The next 11 lines print debugging / demo  output&#xA;for i in singleSet:  print '{:&amp;gt;2}'.format(i),&#xA;print&#xA;for i in singleSet:  print '{:&amp;gt;2}'.format(sizesList[i]),&#xA;print; print&#xA;&#xA;for i in range(len(sizesList)):&#xA;    if i not in singleSet: print '{:&amp;gt;2}'.format(i),&#xA;print&#xA;for i in range(len(sizesList)):&#xA;    if i not in singleSet: print '{:&amp;gt;2}'.format(resultSize(i)),&#xA;print; print&#xA;&#xA;# Routine to scale a sensor result and return real result&#xA;def scaleResult(sensor, r):&#xA;    if sensor in (22,23,25,26,54,55,56,57):&#xA;        return r/1000.0&#xA;    else:&#xA;        return r&#xA;&#xA;# Dummy routine in place of connection.read()&#xA;crv = 37&#xA;def connectionread():&#xA;    global crv;&#xA;    crv = (crv+17)%255&#xA;    return crv&#xA;&#xA;# Routine to query a sensor, read one or two bytes, and return result&#xA;def readResult(sensor):&#xA;    if 6 &amp;lt; sensor &amp;lt; 59:         # Work on basic sensors, not groups&#xA;        valu = 0&#xA;        for i in range(resultSize(sensor)):&#xA;            valu = (valu&amp;lt;&amp;lt;8) | connectionread()&#xA;        return valu&#xA;    else:&#xA;        return -1&#xA;&#xA;# Some test cases&#xA;for i in range(16,28):&#xA;    r = readResult(i)&#xA;    print '{:&amp;gt;2} {:&amp;gt;3} {:&amp;gt;7}  {:8}  {:9.3f}'.format(resultSize(i), i, r, hex(r), scaleResult(i, r))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;There are of course dozens of ways to address the issue, and the two shown above are two of the simpler ones.  If you are going to create a large software suite, you might instead use a more sophisticated approach, in which you would set up a record for each kind of packet, with each record containing packet number and name, some brief id, size, scale, and units.  For example, packet 25 would have a record like (25, 'Battery Charge', 'B_Ch', 2, 1000m 'Ah').  Records would be stored in a &lt;code&gt;dict&lt;/code&gt; indexed by packet number.  Records could also include group-packets membership information.&lt;/p&gt;&#xA;" OwnerUserId="478" LastActivityDate="2015-05-11T22:45:49.440" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7237" PostTypeId="2" ParentId="7225" CreationDate="2015-05-11T23:02:33.850" Score="4" Body="&lt;p&gt;There are two ways that I can think of measuring this:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Motor current, as the resistance to motion increases the current increases linearly, you could measure the desired torque and the current and simply pull until this is met&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You could have a tensioner wheel with a potentiometer to measure when the rope is taut.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/GEPtd.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2015-05-11T23:02:33.850" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7239" PostTypeId="2" ParentId="7234" CreationDate="2015-05-12T09:30:00.657" Score="1" Body="&lt;p&gt;I think the main difference is that the energy in the rocket engine is (probably, I'm not a rocket scientist) far less effectively used than the one of the LiPo. Also, the actual weight of the fuel in the rocket engines might be way lower than the weight of the engine (so your masses are not consistent, one is only the battery/&quot;fuel&quot;, one includes the motor).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It would be interesting comparing the weight of a LiPo/Motor/Quadcopter with a Rocket engine with similar thrust, to see how size effects play into this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a &quot;similar&quot; comparison of a zippo vs a phone battery, look &lt;a href=&quot;https://what-if.xkcd.com/128/&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="9685" LastActivityDate="2015-05-12T09:30:00.657" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7240" PostTypeId="2" ParentId="7215" CreationDate="2015-05-12T18:52:04.217" Score="2" Body="&lt;p&gt;NBCKLY, have you been able to connect and send commands to the Create 2 with your Arduino?&lt;/p&gt;&#xA;&lt;p&gt;Did you put the Create into 19200 Baud mode as referenced in page 4 of the &lt;a href=&quot;http://www.irobot.com/%7E/media/MainSite/PDFs/About/STEM/Create/iRobot_Roomba_600_Open_Interface_Spec.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;OI Specifications&lt;/a&gt;&lt;sup&gt;1&lt;/sup&gt;?&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Method 1: While powering off Roomba, continue to hold down the Clean/Power button after the light has turned off. After about 10 seconds, Roomba plays a tune of descending pitches. Roomba will communicate at 19200 baud until the processor loses battery power or the baud rate is explicitly changed by way of the OI.&lt;/p&gt;&#xA;&lt;p&gt;Method 2: Use the Baud Rate Change pin (pin 5 on the Mini-DIN connector) to change Roomba’s baud rate. After turning on Roomba, wait 2 seconds and then pulse the Baud Rate Change low three times. Each pulse should last between 50 and 500 milliseconds. Roomba will communicate at 19200 baud until the processor loses battery power or the baud rate is explicitly changed by way of the OI.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; iRobot® Create® 2 Open Interface (OI) Specification&lt;/p&gt;&#xA;" OwnerUserId="4377" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2016-01-07T14:33:01.590" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7241" PostTypeId="2" ParentId="6733" CreationDate="2015-05-12T20:11:32.150" Score="1" Body="&lt;p&gt;If you are constrained to using an IMU without external sensors, then you would have to play with the platform to increase its stability. This could possibly be achieved by implementing a dihedral angle to all the prop-arms. So that natural disturbances would be naturally taken care of.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;About using acceleration, it's a worthwile idea to try. You could try implementing a stability augmentation controller loop based on your acceleration data (without integrating it). This can be simply done-- similar to pitch/roll correction- by tilting the vehicle against the direction of the acceleration (e.g. if the vehicle is accelerating towards the right, tilt the vehicle a little bit to the left). This technique depends a lot on your acceleration data quality, and may not be practical at all.&lt;/p&gt;&#xA;" OwnerUserId="9570" LastActivityDate="2015-05-12T20:11:32.150" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7242" PostTypeId="1" CreationDate="2015-05-12T20:52:44.157" Score="4" ViewCount="1137" Body="&lt;p&gt;How would you guys recommend making a variable ballast system for an underwater robot? I was thinking about this problem earlier and I was trying to figure out if there was a way to make one that didn't require a tank of compressed air. &lt;/p&gt;&#xA;" OwnerUserId="9688" LastActivityDate="2015-05-16T15:56:43.870" Title="Underwater ROV Variable Ballast" Tags="&lt;underwater&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7243" PostTypeId="1" AcceptedAnswerId="7259" CreationDate="2015-05-13T07:45:45.023" Score="4" ViewCount="4100" Body="&lt;p&gt;I am looking for a library for disparity map / stereo vision computation. These are my requirements:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;C++&lt;/li&gt;&#xA;&lt;li&gt;Multi-platform (Linux, Windows, OSX)&lt;/li&gt;&#xA;&lt;li&gt;(preferrable but not mandatory) not CUDA based&lt;/li&gt;&#xA;&lt;li&gt;Suited for robotics (e.g. it should work even if the images are not perfectly rectified and the cameras are not perfectly calibrated)&lt;/li&gt;&#xA;&lt;li&gt;Suitable for tracking purposes (20fps or more)&lt;/li&gt;&#xA;&lt;li&gt;Performing even with low-res images (e.g. 320x240px)&lt;/li&gt;&#xA;&lt;li&gt;Open Source&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="1033" LastActivityDate="2015-05-14T13:55:30.113" Title="Fast C++ library for stereo vision/disparity computation" Tags="&lt;computer-vision&gt;&lt;stereo-vision&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ClosedDate="2015-05-20T06:09:14.767" ContentLicense="CC BY-SA 3.0" />
  <row Id="7244" PostTypeId="1" AcceptedAnswerId="7643" CreationDate="2015-05-13T12:13:30.507" Score="8" ViewCount="103" Body="&lt;p&gt;I have been looking at CCD and CMOS sensors and cameras to decide which one to use in the process of automatic control of a printing process. By now I am getting the grips on almost all the essential numbers and abbreviations but there remains a problem with shutters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I understand that there are different types of shutters, both mechanical and electronic, and I can understand how they work. My problem concerns shutter speed. If I use a mechanical shutter, well then the maximum shutter speed depends on that particular element in the assembly, but how does it work for electronic shutters? I have never read &quot;Max shutter speed&quot; in any specs. The only thing I usually see floating around are frames per second. But those do usally not pass a limit of about 120 fps. Depending on how the sensor it is built one could think that the maximum shutter speed therefore is 1/120 or 1/240 if it uses half frames.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can this be right? It seems really slow. I will be faced with the task of recording crisp and clear images of paper which moves at about 17 m/s. That is never possible with shutter speeds that slow. Will I be forced to use a mechanical shutter or am I misunderstanding something?&lt;/p&gt;&#xA;" OwnerUserId="9692" LastActivityDate="2015-07-08T06:46:13.173" Title="Conceptual problem regarding electronic shutters" Tags="&lt;computer-vision&gt;&lt;cameras&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7245" PostTypeId="1" AcceptedAnswerId="7373" CreationDate="2015-05-13T13:06:05.360" Score="1" ViewCount="696" Body="&lt;p&gt;I am investigating a possible business opportunity in which quadcopters perform high-precision nutritional delivery via a burrito medium. I have never used a burrito, but I have read on the internet that they typically weigh 600-700 grams (1). This is much too heavy for commercially available platforms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How many quadcopters would it take to lift a single burrito?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(1): &lt;a href=&quot;https://www.facebook.com/chipotle/posts/390817319252&quot; rel=&quot;nofollow&quot;&gt;https://www.facebook.com/chipotle/posts/390817319252&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9694" LastEditorUserId="9694" LastEditDate="2015-05-13T13:43:37.700" LastActivityDate="2015-05-29T16:39:18.527" Title="How many quadcopters would it take to lift a burrito?" Tags="&lt;quadcopter&gt;&lt;distributed-systems&gt;" AnswerCount="4" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7246" PostTypeId="2" ParentId="7229" CreationDate="2015-05-13T13:39:49.883" Score="1" Body="&lt;p&gt;This is true.  The encoders on the Create are square-wave, not quadrature.  Therefore, they rely on the commanded direction to figure out which way the wheel is spinning.  When driving forward, they count up, and when driving backward they count down as expected.  But if you move the wheel when the robot is not moving, or move the wheel opposite the commanded direction, you will get incorrect results.  The latest OI Spec available at &lt;a href=&quot;http://www.irobot.com/create&quot; rel=&quot;nofollow&quot;&gt;www.irobot.com/create&lt;/a&gt; has a small discussion of this in the section for Opcode 43 on page 30.  This was only recently updated, and contains a number of notes regarding gotchas like this.  So you may want to re-download.&lt;/p&gt;&#xA;" OwnerUserId="110" LastEditorUserId="110" LastEditDate="2016-01-06T20:50:06.350" LastActivityDate="2016-01-06T20:50:06.350" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7247" PostTypeId="2" ParentId="7245" CreationDate="2015-05-13T13:58:01.527" Score="0" Body="&lt;p&gt;It all depends on the payload of your quadcopter. For example I use the Ascending Technologies Hummingbirds quadcopters, which have a payload of 200 grams. You will need 4 of them. Now if you go for heavier quadrotors with payloads of more than a kilogram then you only need one. This is obviously the best solution as attaching several quadcopters together is hazardous.&lt;/p&gt;&#xA;" OwnerUserId="9695" LastActivityDate="2015-05-13T13:58:01.527" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7248" PostTypeId="2" ParentId="18" CreationDate="2015-05-13T15:00:05.300" Score="0" Body="&lt;p&gt;You might want to read &lt;a href=&quot;http://www.nt.ntnu.no/users/skoge/prost/proceedings/npc07/DTU/dtu10.pdf&quot; rel=&quot;nofollow&quot;&gt;&quot;A Tool for Kalman Filter Tuning&quot;&lt;/a&gt; by&#xA;Bernt M. Åkesson, et. al.  It describes the autocovariance least-squares (ALS) method.  &lt;/p&gt;&#xA;" OwnerUserId="9696" LastActivityDate="2015-05-13T15:00:05.300" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7249" PostTypeId="1" AcceptedAnswerId="7250" CreationDate="2015-05-13T16:15:00.170" Score="1" ViewCount="401" Body="&lt;p&gt;iPhone contains&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Gyroscope&lt;/li&gt;&#xA;&lt;li&gt;GPS&lt;/li&gt;&#xA;&lt;li&gt;Two photo and video cameras&lt;/li&gt;&#xA;&lt;li&gt;Self-sufficient battery that outlives the motor battery&lt;/li&gt;&#xA;&lt;li&gt;Wifi&lt;/li&gt;&#xA;&lt;li&gt;Backup connectivity (cellular, bluetooth)&lt;/li&gt;&#xA;&lt;li&gt;Programmable computer&lt;/li&gt;&#xA;&lt;li&gt;Real-time image processing capabilities and face detection&lt;/li&gt;&#xA;&lt;li&gt;General purpose IO (with something like &lt;a href=&quot;http://redpark.com/lightning-serial-cable-l2-db9v/&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;and old models are available very cheap.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the main benefit of having a separate dedicated flight controller and camera on hobbyist rotorcraft rather than a general purpose device like the iPhone?&lt;/p&gt;&#xA;" OwnerUserId="7501" LastActivityDate="2015-05-28T22:34:50.520" Title="Quadcopter - is iPhone the ultimate flight controller?" Tags="&lt;quadcopter&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7250" PostTypeId="2" ParentId="7249" CreationDate="2015-05-13T17:53:42.350" Score="4" Body="&lt;p&gt;Speaking from experience, smartphones (android in my case) do work as flight controllers but they have significant drawbacks&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The operating system gets in the way. You don't have root access and can't kill off unnecessary processes.&lt;/li&gt;&#xA;&lt;li&gt;The cameras are decent, but somewhat narrow field-of-view. Dual cameras  are not setup to enable stereo vision and even trying to use both at the same time overheats the phone quickly.&lt;/li&gt;&#xA;&lt;li&gt;Camera placement is fixed relative to the body (problem if you want to look forward rather than down)&lt;/li&gt;&#xA;&lt;li&gt;IMU sensors are really cheap which leads to noisy signals&lt;/li&gt;&#xA;&lt;li&gt;Everything is thermally connected and not well cooled, so sensors exhibit significant drift.&lt;/li&gt;&#xA;&lt;li&gt;You still need extra processors. Most motors talk over PWM or i2c so you need a board to receive commands from the phone and translate.&lt;/li&gt;&#xA;&lt;li&gt;WIFI range is smaller than most RC transmitter/receiver pairs.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Like I said, you can make it work but it is not optimal.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastEditorUserId="2669" LastEditDate="2015-05-13T20:49:48.410" LastActivityDate="2015-05-13T20:49:48.410" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7251" PostTypeId="1" CreationDate="2015-05-13T19:42:23.767" Score="3" ViewCount="411" Body="&lt;p&gt;I think I have just found another bug - there was one that was mentioned in another post about the &lt;a href=&quot;https://robotics.stackexchange.com/questions/7062/create2-angle-packet-id-20&quot;&gt;angle&lt;/a&gt; and &lt;a href=&quot;https://robotics.stackexchange.com/questions/6869/roomba-create-2-problem-reading-distance-traveled&quot;&gt;distance&lt;/a&gt;. This one is about reading the encoder's counts. I was using them as a workaround for the other bugs but what I found in one instance is that the counts I was reading from the right encoder were incorrect. I was reading in a loop sleeping for 100msec while turning the create2. Here is part of the counts where it definitely shows a problem:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;32767&#xA;-32763&#xA;32766&#xA;-32768&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This kept on going until I stopped. It seems that it has a problem when it reaches the max.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Has anyone else ran into this or can explain or provide another workaround? &lt;/p&gt;&#xA;" OwnerUserId="9322" LastEditorUserId="110" LastEditDate="2015-05-15T16:44:36.777" LastActivityDate="2015-05-15T16:44:36.777" Title="Is there a bug in the Encoder Counts packets 43&amp;44?" Tags="&lt;irobot-create&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7252" PostTypeId="2" ParentId="7215" CreationDate="2015-05-13T20:47:20.650" Score="3" Body="&lt;p&gt;As it turns out, &lt;strong&gt;I was not loading the sensor values into the array properly.&lt;/strong&gt; &lt;strong&gt;It seems that data is transmitted one byte at a time&lt;/strong&gt;, so the sensorbytes array needed to be an array of 4 elements rather than two. Once this was corrected, the correct encoder counts could be determined by joining the upper and lower bytes of the encoder counts from each wheel using the following scheme:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;// highbyte is shifted left eight bits, lowbyte is added to highbyte    &#xA;// encoder_count=highbyte&amp;lt;&amp;lt;8+lowbyte&#xA;left_encoder=sensorbytes[0]&amp;lt;&amp;lt;8+sensorbytes[1];&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This scheme made sure that the resulting left_encoder was a signed int rather than an unsigned int had the word() function been used. The revised updateSensors() code can be found in this post: &lt;a href=&quot;https://robotics.stackexchange.com/questions/7229/irobot-create-2-encoder-counts/7246?iemail=1&amp;amp;noredirect=1#7246&quot;&gt;iRobot Create 2: Encoder Counts&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Serial communication synchronization was not a problem.&lt;/strong&gt; I suspect that this sort of thing is handled behind the scenes and does not need to be programmed at the high level that I am working on.&lt;/p&gt;&#xA;" OwnerUserId="9585" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2015-05-13T20:47:20.650" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7253" PostTypeId="2" ParentId="7251" CreationDate="2015-05-13T21:07:51.157" Score="1" Body="&lt;p&gt;Jack,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have been working on determining the angle from the encoders. I recall running up against a similar problem to the one that you are facing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First off, unless you are spinning the wheels &lt;em&gt;really&lt;/em&gt; fast, the encoders should not give readings like that (508.8 counts per revolution means that you would be spinning the wheels ~130 revolutions in 100 ms--practically light speed for the Create 2). For this reason, I suspect that there is something odd going on inside the Create 2. &lt;strong&gt;I would suggest resetting the Create 2 using Op code [7]&lt;/strong&gt;, then trying again; this fixed my problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you try again, you should do the following:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Connect to a computer and setup using RealTerm, or some other simlar program.&lt;/li&gt;&#xA;&lt;li&gt;Reset the Create 2 with [7].&lt;/li&gt;&#xA;&lt;li&gt;Send the following string of commands: [128 131 149 2 43 44]. This will print the encoder counts of each wheel each time you send the commands.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;If this does not work, try taking out the battery and putting it back in, then repeating steps 1 and 3 above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition, there are some things that you should keep in mind. From an earlier post (&lt;a href=&quot;https://robotics.stackexchange.com/questions/7229/irobot-create-2-encoder-counts/7246?iemail=1&amp;amp;noredirect=1#7246&quot;&gt;iRobot Create 2: Encoder Counts&lt;/a&gt;) and the updated OI specs, the encoders are square wave and do not keep track of the direction of spin directly, so you should see only positive increases in the encoder count, regardless of spin direction.&lt;/p&gt;&#xA;" OwnerUserId="9585" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2015-05-13T21:07:51.157" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7254" PostTypeId="1" CreationDate="2015-05-13T22:41:32.497" Score="0" ViewCount="83" Body="&lt;p&gt;I'm a robotics student but very new to this field.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can you suggest any websites which provide projects/helpful info that I can learn from?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="9700" LastActivityDate="2015-05-14T20:19:49.240" Title="Cool robotics projects" Tags="&lt;mobile-robot&gt;" AnswerCount="2" CommentCount="1" ClosedDate="2015-05-20T06:08:26.567" ContentLicense="CC BY-SA 3.0" />
  <row Id="7255" PostTypeId="2" ParentId="7254" CreationDate="2015-05-13T23:22:38.143" Score="1" Body="&lt;p&gt;I would suggest looking into computer vision. Computer vision is frequently used to allow robots to perceive their surroundings.  All you need is a webcam and some time to spend &lt;a href=&quot;http://docs.opencv.org/doc/tutorials/tutorials.html&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;!  Opencv is an open source computer vision library that is commonly used with robotics. The tutorials will walk you through all the code and explain what is going on.&lt;/p&gt;&#xA;" OwnerUserId="8842" LastActivityDate="2015-05-13T23:22:38.143" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7256" PostTypeId="1" AcceptedAnswerId="7258" CreationDate="2015-05-14T04:19:23.603" Score="3" ViewCount="887" Body="&lt;p&gt;I'm looking to build a sensor which will detect the level of liquid in a tube.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It does not have to be precisely accurate, just detect whether the level is approximately above a certain height.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/4USD9.jpg&quot; alt=&quot;tube&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The liquid level can be seen in the red oval&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/VwvhD.jpg&quot; alt=&quot;level&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I thought about monitoring this with a webcam and using opencv to detect the liquid level. but this seemed a bit overkill. Especially if I have to have a dedicated PC to process the images.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Surely there's a simpler solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Perhaps a component I can attach to a raspberry PI or arduino board ... &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not very familiar with laser sensors so I don't know what is suitable. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As long as it's reliable ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I should add that the tube contains toluene which is flammable, and it is vacuum sealed. So we can't just drill into it. Some kind of optical/laser sensor might be  OK, as long as it can recognise a clear liquid. &lt;/p&gt;&#xA;" OwnerUserId="1831" LastEditorUserId="1831" LastEditDate="2015-05-14T23:32:41.867" LastActivityDate="2015-05-15T19:19:35.903" Title="Sensing the level of a liquid in a tube" Tags="&lt;arduino&gt;&lt;sensors&gt;&lt;raspberry-pi&gt;&lt;laser&gt;" AnswerCount="3" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7257" PostTypeId="2" ParentId="7256" CreationDate="2015-05-14T07:45:06.707" Score="0" Body="&lt;p&gt;You have to look at pressure sensor usually used in washing machines market.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Usually are components or amplifier where you can connect your tube directly, and it will give you an output proportional to the pressure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First googled &lt;a href=&quot;http://www.pace-sci.com/low-pressure.htm&quot; rel=&quot;nofollow&quot;&gt;LINK&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All sensor catalogue &lt;a href=&quot;http://www.allsensors.com/catalog-pdf/PC-0001_Rev_E1.pdf&quot; rel=&quot;nofollow&quot;&gt;LINK&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9702" LastActivityDate="2015-05-14T07:45:06.707" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="7258" PostTypeId="2" ParentId="7256" CreationDate="2015-05-14T08:07:36.733" Score="3" Body="&lt;p&gt;If you look in the industry, they usually use capacitive proximity sensors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This sensors can be adjusted easily to sense behind the glass. In addition I can tell you, that this measurement is highly reliable. Usually they start around 70$, but you find also some cheaper DIY-solutions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another possibility is the use floating styrofoam with a magnet on top of the liquid. Just place a reed-relay at the side of your tube and you got the position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The disadvantages of the listed solutions are that they provide only digital measurements. You get only information like this: The liquid is higher or lower than X cm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For analog measurements refer to LPs' solution or work with the weight of your device and calculate then the height of your liquid.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt;:&#xA;concerning the edit of the questions, You should really consider the capacitive proximity sensors, which are usually used for such applications, because you do not need to modify the tube at all.&lt;/p&gt;&#xA;" OwnerUserId="6911" LastEditorUserId="6911" LastEditDate="2015-05-15T19:19:35.903" LastActivityDate="2015-05-15T19:19:35.903" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7259" PostTypeId="2" ParentId="7243" CreationDate="2015-05-14T11:47:14.243" Score="3" Body="&lt;p&gt;I'll try to answer this question on my own, but feel free to add more information on that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We tried OpenCV's standard disparity function, but it fell short mainly because of item #4. Further, it is very slow (running at 1fps with images at 640x480px even on powerful machines). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Recently, we are doing some tests with &lt;a href=&quot;http://www.cvlibs.net/software/libelas&quot; rel=&quot;nofollow&quot;&gt;&lt;strong&gt;libelas&lt;/strong&gt;&lt;/a&gt; and it seems promising. It is more robust, faster and it generally works better.&lt;/p&gt;&#xA;" OwnerUserId="1033" LastEditorUserId="6941" LastEditDate="2015-05-14T12:08:06.827" LastActivityDate="2015-05-14T12:08:06.827" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7260" PostTypeId="2" ParentId="7243" CreationDate="2015-05-14T13:55:30.113" Score="0" Body="&lt;p&gt;I just learned about &lt;a href=&quot;http://www.cvlibs.net/software/libviso/&quot; rel=&quot;nofollow&quot;&gt;libviso&lt;/a&gt;.  I didn't compare to all of your requirements, but it looks pretty good.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-05-14T13:55:30.113" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7262" PostTypeId="2" ParentId="7254" CreationDate="2015-05-14T20:19:49.240" Score="0" Body="&lt;p&gt;I would suggest a new field named as soft robotics. This brings new horizons to robotics. Take a look &lt;a href=&quot;http://softroboticstoolkit.com/&quot; rel=&quot;nofollow&quot;&gt;http://softroboticstoolkit.com/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9504" LastActivityDate="2015-05-14T20:19:49.240" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7263" PostTypeId="2" ParentId="7256" CreationDate="2015-05-14T20:30:25.217" Score="1" Body="&lt;p&gt;Here's a few ideas:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Insert two bare wires as probes and measure the resistance between them. The resistance should drop dramatically once the liquid touches both sensors.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Insert a sonar into one end that points directly into the tube. This method should give you a simple measurement of how far the surface of the fluid is from the sensor. I'm not sure how well a sonar works inside a tube as there will be echoes and such to consider, but some experimentation might lead to good results.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Seal the tube at one end with a cork and put a barometer on the inside. The rising level of fluid will compress the air and register different &quot;altitudes&quot; on the barometer.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Maybe its possible to use an IR beam through the tube if you can apply a dye to the fluid.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="1075" LastActivityDate="2015-05-14T20:30:25.217" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="7265" PostTypeId="1" AcceptedAnswerId="7267" CreationDate="2015-05-15T00:09:24.500" Score="0" ViewCount="73" Body="&lt;p&gt;I'm in charge of a module to control the smoothness with which a platform should move; the platform already implements a closed-loop control on its own but this firmware is closed and I do not have access to source code.&#xA;It is therefore requested that a closed loop control should implemented on top of that PID, in a superior layer, above a module that already implements a closed loop control, so i have several question:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;It's conceptually correct implement a PID control in an upper layer to closed loop control that implements it?&lt;/li&gt;&#xA;&lt;li&gt;What features may be loose in the lower close loop?&lt;/li&gt;&#xA;&lt;li&gt;Maybe loop control closed negatively be influenced by the PID that implements the top layer?&lt;/li&gt;&#xA;&lt;li&gt;Estimate The angular speed, yaw and pitch, based on the position of the motors using Kalman filters can generate values too far from the actual values reported&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="9628" LastEditorUserId="350" LastEditDate="2015-05-15T14:16:29.117" LastActivityDate="2015-05-15T15:31:32.990" Title="PID over another module that implements a PID control?" Tags="&lt;pid&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7266" PostTypeId="1" AcceptedAnswerId="7282" CreationDate="2015-05-15T01:42:32.263" Score="1" ViewCount="858" Body="&lt;p&gt;I have a quadcopter built, and I need to be able to make it to autonomously follow a route and avoid obstacles where possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My general plan is to have an array of sensors on a pre-defined &quot;front&quot;. The quadcopter will only go forward. Generally I'd like to make  it so that if the sensors pointing at a higher angle detect something getting closer as the bot moves forward, the quadcopter will stop, descend until the distance to that detected object decreases, and then continues forward. Similarly, I'd like the opposite event to happen if the sensors pointing at a lower angle detect something getting closer to the quadcopter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm thinking of having something like 9 small infrared distance detectors (pointing up, forward, down || left, forward, right), basically a 3x3 matrix.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would anyone have any ideas of the feasibility of this? I'd like to use a raspberry pi, but it will probably also need an additional board to read in the values from its sensors. In addition, I have no idea which sensors to use, or if infrared can even work. Any suggestions are more than welcome.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was also thinking about ultrasonic sensors, but having 9 of them could get cluttered, and I'd worry about their short range when a crash means death for the quadcopter. I also fear they would cause interference with each other.&lt;/p&gt;&#xA;" OwnerUserId="9053" LastEditorUserId="9053" LastEditDate="2015-05-15T23:13:53.730" LastActivityDate="2017-07-06T03:53:56.787" Title="How can I make a quadcopter avoid obstacles using infrared?" Tags="&lt;mobile-robot&gt;&lt;quadcopter&gt;&lt;sensors&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7267" PostTypeId="2" ParentId="7265" CreationDate="2015-05-15T07:02:51.640" Score="2" Body="&lt;p&gt;It is not uncommon to have nested (or hierarchical) control loops in a controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Usually the two different loops control two different variables, not the same one. Furthermore, it is assumed that the inner loop is faster then the outer one. &#xA;If you write the differential equation of the plant, you can easily understand why: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ \dot{x} = f(x, \xi)$$&#xA;$$ \dot{\xi} = g(x, \xi, u)$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You have the control $u$ which (directly) influences only the evolution of $\xi$ but you want to control $x$; you can think of designing a two-loop control system: an outer loop controlling $x$ and a second (inner) loop controlling $\xi$. The assumption  here is that $\xi$ will converge to the desired value faster than $x$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This should answer your 1,2,3) questions. &#xA;About the 4th one, it probably depends on how you implemented the Kalman Filter.&lt;/p&gt;&#xA;" OwnerUserId="790" LastEditorUserId="790" LastEditDate="2015-05-15T15:31:32.990" LastActivityDate="2015-05-15T15:31:32.990" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7268" PostTypeId="2" ParentId="7177" CreationDate="2015-05-15T09:54:55.737" Score="1" Body="&lt;p&gt;&quot;Save World as&quot; is broken on Gazebo 5.1.0 . &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can either install the experimental version of Gazebo 6 using the &lt;code&gt;gazebo6-prerelease&lt;/code&gt; package (assuming you are on Ubuntu) or wait for the fix to be released in Gazebo 5.2.0 . &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The relevant bug on Gazebo issue tracker is:&#xA;&lt;a href=&quot;https://bitbucket.org/osrf/gazebo/issue/1593/world-save-as-broken-on-gazebo-510&quot; rel=&quot;nofollow&quot;&gt;https://bitbucket.org/osrf/gazebo/issue/1593/world-save-as-broken-on-gazebo-510&lt;/a&gt; .&lt;/p&gt;&#xA;" OwnerUserId="9691" LastActivityDate="2015-05-15T09:54:55.737" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7269" PostTypeId="2" ParentId="7245" CreationDate="2015-05-15T10:30:25.537" Score="0" Body="&lt;p&gt;Only one; there are many models of quadcopters available that can lift this amount. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://youtube.com/watch?v=LkbUWlCTt9I&quot; rel=&quot;nofollow&quot;&gt;OFM GQuad-8 can lift 6kg&lt;/a&gt;, for instance.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2015-05-15T10:30:25.537" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7270" PostTypeId="1" CreationDate="2015-05-15T10:39:27.773" Score="-1" ViewCount="67" Body="&lt;p&gt;These are the specifications of the motor:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;25000RPM no load speed at 12V&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;No Load Current - 1A, Stall Current - 10A&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;0.36Kgcm torque&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;What is the definition of load current and load speed? Which battery would be most suitable to power this motor?&lt;/p&gt;&#xA;" OwnerUserId="9715" LastEditorUserId="9176" LastEditDate="2015-05-16T22:48:30.087" LastActivityDate="2015-05-16T22:48:30.087" Title="What is load current and load speed? Which battery is best suitable for this motor?" Tags="&lt;motor&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2015-05-20T06:09:05.903" ContentLicense="CC BY-SA 3.0" />
  <row Id="7271" PostTypeId="1" AcceptedAnswerId="7272" CreationDate="2015-05-15T12:22:50.210" Score="0" ViewCount="141" Body="&lt;p&gt;As the title states, is there any way to make a following drone that tracks a GPS unit, and follows/orients camera to that? Similar to &lt;a href=&quot;https://www.lily.camera/&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9716" LastEditorUserId="9716" LastEditDate="2015-05-15T12:28:14.810" LastActivityDate="2015-05-15T13:39:55.760" Title="How would I implement a following drone with a camera using GPS?" Tags="&lt;cameras&gt;&lt;gps&gt;&lt;line-following&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7272" PostTypeId="2" ParentId="7271" CreationDate="2015-05-15T13:39:55.760" Score="1" Body="&lt;p&gt;I assume that you will have GPS on your drone in addition to the GPS unit you will want to track.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will make heavy use of the &lt;a href=&quot;http://www.movable-type.co.uk/scripts/latlong.html&quot; rel=&quot;nofollow&quot;&gt;Haversine formula&lt;/a&gt;, which will tell you the bearing between 2 lat/lon (GPS) coordinates.  This will come in handy in the following ways:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Using the current and previous coordinates from the target's GPS, you know what direction the target is moving.&lt;/li&gt;&#xA;&lt;li&gt;Using the drone's coordinates and target's coordinates, you know what direction to aim the camera.  &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Once you know where the target is and what your orientation should be to it, you can calculate the drone's desired position based on the desired following distance.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2015-05-15T13:39:55.760" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7273" PostTypeId="2" ParentId="7225" CreationDate="2015-05-15T13:46:55.377" Score="0" Body="&lt;p&gt;If you know how much force should be on the rope, you could simply mount the winch against a spring that takes that same amount of force to compress.  Then, just use a limit switch to detect when the spring has been compressed. &lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2015-05-15T13:46:55.377" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7274" PostTypeId="2" ParentId="7242" CreationDate="2015-05-15T14:06:06.547" Score="2" Body="&lt;p&gt;Variable ballast on ROVs in practice is usually limited to just the really big ones, for several reasons:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;In general, you only need to vary your ballast when you're trying to get an exact amount of buoyancy at great depth -- when that amount would be different than at the surface (due to compression of various components)&lt;/li&gt;&#xA;&lt;li&gt;The pressure housing required adds a lot of size and weight&lt;/li&gt;&#xA;&lt;li&gt;The power required for the pump or compressor is significant&lt;/li&gt;&#xA;&lt;li&gt;It requires more maintenance&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;That's not to say it can't be done on a small scale, for slight adjustments to ballast.  &lt;a href=&quot;http://my.fit.edu/~swood/GliderThesisFinal.pdf&quot; rel=&quot;nofollow&quot;&gt;Underwater gliders use variable ballast as &quot;buoyancy engines&quot;&lt;/a&gt;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depending on your specific application, you might get away with one of the following alternatives:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Descending with a dropweight, then shedding it at the desired depth (repeat for rapid ascent)&lt;/li&gt;&#xA;&lt;li&gt;Having a canister of lead shot, and dropping the balls in a controlled fashion until you have reached the desired buoyancy -- useful if you are going to collect samples&lt;/li&gt;&#xA;&lt;li&gt;Use more powerful motors and actively compensate for buoyancy&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2015-05-16T15:56:43.870" LastActivityDate="2015-05-16T15:56:43.870" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7275" PostTypeId="2" ParentId="7270" CreationDate="2015-05-15T14:25:47.153" Score="2" Body="&lt;p&gt;Here's how to read the information you found:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The motor you are describing will draw the least amount of current when there is no load (1A), and the most amount of current when it is stalled (10A).  Think of it this way: when the motor can't turn (being stalled), it's at its maximum load -- you can't make it turn slower than zero$^*$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The load speed will depend on what the motor is trying to do.  As you noted, if there is no load it will be spinning at 25,000 RPM.  This can go all the way down to zero, depending on circumstances.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Whichever battery you use should be able to supply just over 10A peak current, if you want to get the maximum performance from this motor.  &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;$*$ In practice, you can make a motor run backwards (such as if it was spinning one way and you slammed it into reverse), and this can make it draw more than the stall current.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2015-05-16T18:43:33.407" LastActivityDate="2015-05-16T18:43:33.407" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7277" PostTypeId="1" CreationDate="2015-05-15T19:43:28.570" Score="1" ViewCount="74" Body="&lt;p&gt;Let's assume I have the following situation, and need to find (x,y). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/Iql5h.jpg&quot; alt=&quot;beacony triangle&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it possible? There does not appear to be more than one solution to the system, but my trigonometry is a bit rusty.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I feel like I need one more distance.&lt;/p&gt;&#xA;" OwnerUserId="9719" LastEditorUserId="478" LastEditDate="2015-05-15T20:31:58.457" LastActivityDate="2015-05-16T18:33:36.337" Title="Assuming I have the angle with respect to two beacons, and know the distance between them, can I localize myself?" Tags="&lt;kinematics&gt;&lt;inverse-kinematics&gt;" AnswerCount="4" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7278" PostTypeId="1" AcceptedAnswerId="7561" CreationDate="2015-05-15T20:10:53.803" Score="9" ViewCount="460" Body="&lt;p&gt;I'm working on a project where I need to model a system that is essentially comprised of a series of ball-and-socket joints attached to a base, which is attached in turn to a prismatic joint (rail). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've read Roy Featherstone's &lt;em&gt;Rigid Body Dynamics Algorithms&lt;/em&gt; cover-to-cover, and I've also read the &lt;em&gt;Dynamics&lt;/em&gt; section from the &lt;em&gt;Springer Handbook of Robotics&lt;/em&gt; (also written by Featherstone). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It took me a long time to get acclimated to using his &quot;spatial vector&quot; and &quot;spatial matrix&quot; notation, but after re-creating all of his notation by hand as an exercise it works out to just be a nice way of concatenating 3x3 and 3x1 matrices and vectors into 6x6 and 6x1 matrices and vectors. The maths he invents to perform operations can be a bit tedious to read as he hijacks some standard notation, but overall everything is very compact, very easy to implement in MATLAB. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;My problem is this:&lt;/strong&gt; How do I add actuators to the model? He walks through explicitly configuring the joint definitions, link definitions, etc., but when it comes to actuators or applied forces he says something like, &quot;Just add a $\tau_a$ here and Bob's your uncle!&quot; - it's not discussed at all. In the &lt;em&gt;Handbook of Robotics&lt;/em&gt; he suggests introducing a false acceleration to the fixed base to add the gravitational force term, but doesn't show how to add it in local coordinates nor does he mention how to add the actuator input. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help would be greatly appreciated. I've considered starting over with a different book, but it's going to be a great expense of my time to re-acclimate myself to a different set of notation. I'd like to move forward with this, but I feel like I'm just a few inches shy of the finish line. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="10414" LastEditDate="2021-01-25T16:24:15.820" LastActivityDate="2021-01-25T16:24:15.820" Title="Adding an Actuator or Force to a (Featherstone) Articulated Rigid Body Model" Tags="&lt;dynamics&gt;&lt;actuator&gt;&lt;joint&gt;&lt;screw-theory&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7279" PostTypeId="2" ParentId="7277" CreationDate="2015-05-15T20:22:22.160" Score="0" Body="&lt;p&gt;&lt;strong&gt;Note: this answer is based on the criteria from the original question, before edits were made to it.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the orange spots are robots and the green spots are beacons, you can see that all three locations satisfy your criteria: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;angle between two beacons from robot's point of view and &lt;/li&gt;&#xA;&lt;li&gt;distance between the two beacons.  &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I think you can see that there are many such solutions when you only know those two variables. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But add a third beacon, and you might be on to something.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/6hVgZ.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Addendum:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you know true headings of beacon 1 and beacon 2 and not just the angle between them, then you have a different equation and one that has a single solution.&lt;/p&gt;&#xA;" OwnerUserId="1075" LastEditorUserId="1075" LastEditDate="2015-05-15T22:08:57.457" LastActivityDate="2015-05-15T22:08:57.457" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7280" PostTypeId="2" ParentId="7277" CreationDate="2015-05-15T21:03:31.213" Score="2" Body="&lt;p&gt;If we assume that the origin of the reference frame is the left beacon, then it holds:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{cases} \tan\theta_1=\frac{x}{y} \\&#xA;\tan\theta_2=\frac{d-x}{y} \end{cases}.&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We finally derive the following relations:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{cases} x=\frac{d\cdot\tan\theta_1}{\tan\theta_1+\tan\theta_2} \\&#xA;y=\frac{d}{\tan\theta_1+\tan\theta_2} \end{cases}.&#xA;$$&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2015-05-16T08:54:52.070" LastActivityDate="2015-05-16T08:54:52.070" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7281" PostTypeId="2" ParentId="7277" CreationDate="2015-05-15T21:09:59.537" Score="0" Body="&lt;p&gt;Octopus's answer assumes you only know D and θ₁ + θ₂.  If that's all you know, then many points are possible solutions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, your diagram shows θ₁, θ₂ separately, as if they are true headings to the beacons.  If that is so, and if you know the (x,y) locations of the beacons, then it is possible to solve for your unknown location.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Suppose B₁=(x₁,y₁) and B₂=(x₂,y₂) are the locations of the two beacons, and B₀=(x₀,y₀) is the unknown location.  Equations of the lines B₀B₁ and B₀B₂ are x-x₁=(y-y₁)tanθ₁ and x-x₂=(y-y₂)tanθ₂, respectively, supposing your headings are relative to the y-axis.  At point B₀ we have x₀-xᵢ=(y₀-yᵢ)tanθᵢ so x₀ = (y₀-y₁)tanθ₁-x₁ =  (y₀-y₂)tanθ₂-x₂ giving y₀(tanθ₁-tanθ₂) = y₁tanθ₁-y₂tanθ₂+x₁-x₂ whence y₀ = (y₁tanθ₁-y₂tanθ₂+x₁-x₂)/(tanθ₁-tanθ₂).  Then back-substitute to get x₀.&lt;/p&gt;&#xA;" OwnerUserId="478" LastEditorUserId="478" LastEditDate="2015-05-15T21:22:17.587" LastActivityDate="2015-05-15T21:22:17.587" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7282" PostTypeId="2" ParentId="7266" CreationDate="2015-05-16T02:04:39.070" Score="0" Body="&lt;p&gt;Ultrasonic sensors will in my experience give you better range and accuracy than infrared, unless specifically dealing with many smooth, or sound dampening surfaces. You can poll them one at a time in order to not cause interference, and use some that use I2C (like &lt;a href=&quot;http://www.maxbotix.com/SelectionGuide/indoor-uav.htm#uav&quot; rel=&quot;nofollow&quot;&gt;these&lt;/a&gt;), then you could directly attach them to the raspberry pi to poll the values. What flight controller are you using? for most you could simply send direction data over the GPIO. &lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2015-05-16T02:04:39.070" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7283" PostTypeId="2" ParentId="483" CreationDate="2015-05-16T14:13:51.537" Score="0" Body="&lt;p&gt;Although it depends on the vehicle mission, these are also worth thinking about power-architecture (not implementation):&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;If your robot has a payload (that is not used for moving or controlling the robot), try to have a separate power source for the payload.&lt;/li&gt;&#xA;&lt;li&gt;Isolate the motors, through a separate battery if required. So that even if the motors die, your camera or other systems would still be able to function.&lt;/li&gt;&#xA;&lt;li&gt;If you will send the robot out of eye sight make sure you have at least some beacon to later find it when the batteries die out. Today, I heard that an RC model got lost (power outage or some other fatal error). If it had a beacon, it could have been saved.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="9570" LastActivityDate="2015-05-16T14:13:51.537" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7284" PostTypeId="2" ParentId="7277" CreationDate="2015-05-16T18:33:36.337" Score="0" Body="&lt;p&gt;+1 &lt;a href=&quot;https://robotics.stackexchange.com/a/7280/350&quot;&gt;Ugo's answer&lt;/a&gt;.  To show the process a bit more:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We have two ways to calculate $y$:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;y = \frac{x}{\tan{\theta_1}} = \frac{d-x}{\tan{\theta_2}}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So we can use this equality (ignoring $y$ completely for the moment) to solve for $x$.  We start by cross multiplying:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{align}&#xA;x \tan{\theta_2} &amp;amp; = (d - x) \tan{\theta_1} \\&#xA;x \tan{\theta_2} &amp;amp; = d \tan{\theta_1} - x \tan{\theta_1} \\&#xA;x \tan{\theta_1} + x \tan{\theta_2} &amp;amp; =  d \tan{\theta_1} \\&#xA;x (\tan{\theta_1} + \tan{\theta_2}) &amp;amp; =  d \tan{\theta_1} \\&#xA;x &amp;amp; = \frac{d \tan{\theta_1}}{\tan{\theta_1} + \tan{\theta_2}}&#xA;\end{align}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And since we know that $y = \frac{x}{\tan{\theta_1}}$ we plug in the equation we have for $x$ (which conveniently cancels the $\tan{\theta_1}$ term) to get:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;y = \frac{d}{\tan{\theta_1} + \tan{\theta_2}}&#xA;$$&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2015-05-16T18:33:36.337" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7286" PostTypeId="2" ParentId="7235" CreationDate="2015-05-17T09:41:44.497" Score="0" Body="&lt;p&gt;Your pseudocode for PD like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Kp Kd&#xA;erroSum=errorSum+(desired-actual);&#xA;ddesired=(desired-predesired)/dt;&#xA;desiredpre=desired;&#xA;PD= Kp*(desired-actual)+Kd*(ddesired-dactual)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Try to apply this:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;previosuerror=0&#xA;Kp Kd&#xA;error=(desired-actual); //for angles use atan2(sin(desired),cos(actual)) neglect sign  &#xA;derivative=(previouserror-error)/dt; &#xA;previouserror=error;&#xA;P=Kp*error;&#xA;D=Kd*derivative;&#xA;PD=P+D;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Reference: first 3 module of &lt;a href=&quot;https://class.coursera.org/conrob-001&quot; rel=&quot;nofollow&quot;&gt;https://class.coursera.org/conrob-001&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2015-05-18T08:42:24.787" LastActivityDate="2015-05-18T08:42:24.787" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="7287" PostTypeId="1" AcceptedAnswerId="7293" CreationDate="2015-05-18T03:56:34.447" Score="9" ViewCount="12188" Body="&lt;p&gt;In terms of robotics, what are the differences between odometry and dead-reckoning? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I read that odometry uses wheel sensors to estimate position, and dead-reckoning also uses wheel sensors, but &quot;heading sensors&quot; as well. Can someone please elaborate on this point for me?&lt;/p&gt;&#xA;" OwnerUserId="9726" LastEditorDisplayName="user10072" LastEditDate="2017-04-22T18:07:35.803" LastActivityDate="2017-04-23T07:03:10.503" Title="Odometry vs Dead-reckoning" Tags="&lt;odometry&gt;&lt;deduced-reckoning&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="7288" PostTypeId="1" AcceptedAnswerId="7296" CreationDate="2015-05-18T08:03:22.760" Score="2" ViewCount="435" Body="&lt;p&gt;I've posted a &lt;a href=&quot;https://robotics.stackexchange.com/questions/7235/how-to-implement-and-code-inner-and-outer-pd-controllers-for-quadrotor-for-posit&quot;&gt;question&lt;/a&gt; regarding this matter that I couldn't solve. I'm reading this &lt;a href=&quot;ftp://213.176.96.142/ieee8966173d-c305-20140930104826.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;paper&lt;/a&gt;, the authors state &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Linear $x$ and $y$ Motion Control: From the mathematical model one can see&#xA;  that the motion through the axes $x$ and $y$ depends on $U_{1}$. In fact $U_{1}$ is&#xA;  the total thrust vector oriented to obtain the desired linear motion.&#xA;  If we consider $U_{x}$ and $U_{y}$ the orientations of $U_{1}$ responsible for the&#xA;  motion through x and y axis respectively, we can then extract from&#xA;  formula (18) the roll and pitch angles necessary to compute the&#xA;  controls $U_{x}$ and $U_{y}$ ensuring the Lyapunov function to be negative&#xA;  semi-definite ( see Fig. 2).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The paper is very clear except in the linear motion control. They didn't explicitly state the equations for extracting the angles. The confusing part is when they say &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;we can then extract from&#xA;  formula (18) the roll and pitch angles necessary to compute the&#xA;  controls $U_{x}$ and $U_{y}$&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;where formula (18) is&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;U_{x} = \frac{m}{U_{1}} (\cos\phi \sin\theta \cos\psi + \sin\phi \sin\psi) \\&#xA;U_{y} = \frac{m}{U_{1}} (\cos\phi \sin\theta \sin\psi - \cos\phi \cos\psi) \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems to me that the roll and pitch angles depend on $U_{x}$ and $U_{y}$, therefore we compute the roll and pitch angles based on the $U_{x}$ and $U_{y}$ to control the linear motion. &lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2015-05-18T18:28:38.123" Title="Linear Motion Control for quadrotor (clarification)" Tags="&lt;control&gt;&lt;quadcopter&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7289" PostTypeId="2" ParentId="7287" CreationDate="2015-05-18T08:56:19.207" Score="5" Body="&lt;p&gt;Dead-reckoning systems are based on estimating position relative to sensors. These sensors can be accelerometers, gyroscopes, whell encoders, infrared sensors, cameras etc. which have to placed on body of robot. So we can calculate displacement or coordinates. Odometry is a sub topic of dead-reckoning and based on wheel displacement calculations. &lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2015-05-18T09:01:53.260" LastActivityDate="2015-05-18T09:01:53.260" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7291" PostTypeId="1" CreationDate="2015-05-18T11:09:59.750" Score="1" ViewCount="482" Body="&lt;p&gt;I am working on a project about robot soccer vision. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How I utilize two webcams as a stereo vision in matlab for robot soccer matters?&lt;/p&gt;&#xA;" OwnerUserId="9729" LastEditorUserId="350" LastEditDate="2015-05-18T21:55:14.720" LastActivityDate="2015-10-22T01:15:05.450" Title="Stereo vision in Matlab" Tags="&lt;stereo-vision&gt;&lt;matlab&gt;&lt;soccer&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2015-10-23T09:31:07.530" ContentLicense="CC BY-SA 3.0" />
  <row Id="7293" PostTypeId="2" ParentId="7287" CreationDate="2015-05-18T13:36:36.053" Score="12" Body="&lt;p&gt;Deduced reckoning is figuring out where you are after starting from a known position, by using your speed, direction and time.  (It's effectively integration of velocity, if you want the calculus/mathematical version).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At sea you would know your direction from a compass, speed by any one of various means, and important complications like the wind speed and direction would be estimated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Odometry is really just doing the same thing on the ground, instead of at sea.  Instead you count your &quot;footsteps&quot; as an estimate of your walking speed.  A wheeled vehicle would instead count wheel revolutions, that's equivalent to counting footsteps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Odometry isn't very accurate on its own as wheel slippage, carpet &quot;springiness&quot; and uneven floors can affect accuracy.  A separate heading sensor can help with accurate headings at least, though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For an old (1996!) but detailed account of odometry, I like Borenstein's &quot;Where am I&quot; technical report, which has a lot of outdated information but a still-good description of odometry and its inaccuracies.  It's linked from this page:&#xA;&lt;a href=&quot;http://www-personal.umich.edu/~johannb/mypapers.htm&quot;&gt;http://www-personal.umich.edu/~johannb/mypapers.htm&lt;/a&gt;&#xA;(Beware it's quite a large download.)&lt;/p&gt;&#xA;" OwnerUserId="9578" LastActivityDate="2015-05-18T13:36:36.053" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7294" PostTypeId="1" AcceptedAnswerId="7306" CreationDate="2015-05-18T17:05:50.670" Score="1" ViewCount="831" Body="&lt;p&gt;I've been toying around with the idea of automating the process of testing aquarium water for certain chemicals. Very briefly, salt water aquariums (reefs, specifically) require almost-daily testing for 3-4 chemicals (calcium, alkalinity, ammonia, phosphate). This is typically done by hand, using &lt;a href=&quot;http://www.bulkreefsupply.com/aquarium-monitors-controllers/testing/salifert.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;various kits&lt;/a&gt;. There are two main types &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;you combine several powders with a fixed amount of aquarium water, and then compare the color the mixture turns with a chart&lt;/li&gt;&#xA;&lt;li&gt;you combine several liquids together with the aquarium water, and then add another liquid until the mixture turns a color. you then record how much of the final liquid you had to add for the color change to occur (titration).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Both methods are straightforward, but tedious. To maintain an aquarium well, you really do need daily readings of all of those metrics, which easily adds up to 30 minutes+ daily.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So - I'd like to be able to automate the process. The biggest question is, how do I reliably dispense the materials needed? We're talking in gram and milliliter UoM here. The kits come with plastic syringes and spoons of correct volume for the powders. I need a way to measure out and dispense both of these, and a way to queue up several days worth (refilling daily defeats the purpose).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any ideas?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Edit&lt;/em&gt; this is different from &lt;a href=&quot;https://robotics.stackexchange.com/questions/1259&quot;&gt;How to measure and dispense a finite amount of powder or liquid&lt;/a&gt; because of the units of measure involved. I need to be able to reliably dispense ~ 1g +/- 5% of a powder, or 1ml +/- 5% of liquid.&lt;/p&gt;&#xA;" OwnerUserId="6782" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2015-05-19T15:51:19.523" Title="Dispensing precise quantities of liquid and powder" Tags="&lt;electronics&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2015-05-20T06:08:54.223" ContentLicense="CC BY-SA 3.0" />
  <row Id="7295" PostTypeId="1" CreationDate="2015-05-18T18:14:38.517" Score="0" ViewCount="1004" Body="&lt;p&gt;Well, I will start directly in my problem. I'm working on a project and I only have 10 days left.&#xA;The idea is simple, a wheeled robot with 3 ultrasonic sensors to avoid obstacles.&#xA;I've developed a code and it's working fine.&#xA;I'm using: Arduino Uno, L293D driver for the 2 dc motors, 3 HC-SR04 ultrasonic sensors and the Newping library.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've made some kind of a shield where I soldered common points for gnd and 5V in order to connect the L293 ic and the sensors pins easily. The problem is that the ultrasonic sensors only functioned once in the expected behavior! After that they were always sending the zero result and sometimes a number is showed when i disconnect the sensor! &#xA;Is it a power problem? I'm using the usb cable to power the arduino and the sensors (motors are powered using 2 Li-po batteries)&#xA;kindly provide me with guidance&lt;/p&gt;&#xA;" OwnerUserId="2525" LastEditorUserId="350" LastEditDate="2015-05-18T21:33:01.150" LastActivityDate="2015-05-23T17:52:39.100" Title="Help with ultrasonic sensors on obstacles avoiding robot" Tags="&lt;arduino&gt;&lt;power&gt;&lt;ultrasonic-sensors&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7296" PostTypeId="2" ParentId="7288" CreationDate="2015-05-18T18:22:20.817" Score="2" Body="&lt;p&gt;I reckon that the equations you raised in your previous &lt;a href=&quot;https://robotics.stackexchange.com/questions/7235/how-to-implement-and-code-inner-and-outer-pd-controllers-for-quadrotor-for-posit&quot;&gt;post&lt;/a&gt;, in the assumption of small angles, already give us the intuition that $U_1$ is used to keep the height $z$ as desired, so that what is left to us to control the linear displacement $x$ and $y$ of the quadcopter is the roll $\phi$ and pitch $\theta$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore, your last equation to find out the desired $\phi_d$ and $\theta_d$ as function of linear acceleration $\ddot{\hat{x}}_d$ and $\ddot{\hat{y}}_d$ is correct.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, then, you'll impose some tracking behavior such as the one I've seen in your script that relates the linear acceleration with the displacement error, something like the well known impedance control law: $\ddot{\hat{x}}_d=K_p\left(x_d-x\right)+K_d\dot{x}$. Note how $\ddot{\hat{x}}_d \neq \frac{d^2x_d}{dt^2}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this case it is evident how you don't employ the yaw $\psi$ for the linear displacement: it's simply kept constant. It is usually used for more complicated maneuvers indeed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the small angle assumption does no longer hold, then you're forced to rely on the Eq.(6) described in the &lt;a href=&quot;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.149.4367&amp;amp;rep=rep1&amp;amp;type=pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;paper&lt;/a&gt; you cited, which still doesn't change too much the story.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know how familiar you're with Simulink, but it'd be much easier to simulate this system by means of it.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2015-05-18T18:28:38.123" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7297" PostTypeId="1" AcceptedAnswerId="7624" CreationDate="2015-05-18T19:18:40.413" Score="1" ViewCount="166" Body="&lt;p&gt;Suppose I have perfect AI to control robotic arm. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What characteristics should it fulfill to be able to take such common tools as screwdriver and linesman's and disassemble and then assemble conventional notebook computer?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there such models available?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is seems to me, that such arms as OWI-535 are only toys, i.e. they can just relocate lightweight objects and that's all. Am I right?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also suppose that my AI can look at assembly area with multiple HD cameras and can perfectly &quot;understand&quot; what is sees.&lt;/p&gt;&#xA;" OwnerUserId="9723" LastEditorUserId="9723" LastEditDate="2015-07-03T07:12:09.523" LastActivityDate="2015-09-01T07:47:25.337" Title="Arm to disassemble and assemble notebook at home?" Tags="&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7298" PostTypeId="2" ParentId="7295" CreationDate="2015-05-18T20:15:58.120" Score="0" Body="&lt;p&gt;You can convert &lt;a href=&quot;http://arduino.net.ua/upload/information_system_8/1/3/1/item_131/information_items_property_171.pdf&quot; rel=&quot;nofollow&quot;&gt;Line follower PID robot&lt;/a&gt; to obstacle avoiding robot. At page 18 write new 3 sensor values instead of 5 line sensors (i assume that you can reduce number sensor and convert follower to avoider)&lt;/p&gt;&#xA;" OwnerUserId="9504" LastActivityDate="2015-05-18T20:15:58.120" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="7299" PostTypeId="2" ParentId="7287" CreationDate="2015-05-18T21:44:32.620" Score="0" Body="&lt;p&gt;You may have misread (or else your book misrepresented) the definition odometry; it is not a direct measurement of position, just distance travelled.  Odometry may say that you travelled a mile, but whether you ended up a mile away or right back where you started will depend on other aspects of your movement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By combining odometry with other measurements, the process of estimating your position -- &quot;dead reckoning&quot; -- becomes more accurate.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2015-05-18T21:44:32.620" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7300" PostTypeId="2" ParentId="5180" CreationDate="2015-05-18T21:53:56.307" Score="1" Body="&lt;p&gt;It sounds like you want to find an RF transmitter using the robot that receives the signal, which is difficult to do with the degree of accuracy that you would probably need.  The strength of a signal (whether optical, auditory, or RF) in a real-world environment varies due to interference.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not only that, you'd have to assume that the robot could move directly toward the signal at all times.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The most robotics-oriented way to do this would be to have the transmitter report its position, then have the robot navigate to that position.  This requires both the transmitter and the robot to be able to measure their position.  Features such as the ability to move through rooms of a house or avoid obstacles would require additional time and energy to implement.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2015-05-18T21:53:56.307" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7302" PostTypeId="2" ParentId="7295" CreationDate="2015-05-18T23:08:57.893" Score="0" Body="&lt;p&gt;This is a little trick with the HC-SR04s.&#xA;Power it on, so its in the broken state.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Flick the wire mesh piece.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason might be it doesn't reset itself. These components might be cheap clones and not the real ones, and some of the clones have this problem. Then when you flick it, it resets the depressed component.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More info here:&#xA;&lt;a href=&quot;http://forum.arduino.cc/index.php?topic=55119.0&quot; rel=&quot;nofollow&quot;&gt;http://forum.arduino.cc/index.php?topic=55119.0&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9188" LastActivityDate="2015-05-18T23:08:57.893" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7303" PostTypeId="2" ParentId="483" CreationDate="2015-05-19T00:29:23.127" Score="2" Body="&lt;p&gt;You asked for examples of existing robots. I once built a 6 wheeled rover robot with the following components:&#xA; - 2 homemade paperclip touch sensors&#xA; - 2 Arduino Unos&#xA; - a 3.3V digital compass&#xA; - a 5V radio transmitter&#xA; - 6 Vex Motor Controller 29's&#xA; - 6 DC motors, Stall current @ 2 amps, 6V&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;To avoid using complicated electrical stuff&lt;/strong&gt; (no messing with capacitors or linear voltage regulators), we had 2 batteries, 1 for the &quot;brain&quot;, 1 for the body.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 6 DC motors were powered by a LIPO battery, 5000mAh 7.4V 20C 2cell. The Vex Motor Controller 29's have 3 wires, 1 for data, and Vcc and Ground. It basically converts the motor into a servo. So we had the data wires from the motor controllers go to the Arduino PWM ports (11, 10, 9, 6, 5, 3), and the Vcc's go to the positive terminal of the LIPO, and the negatives to the common ground.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Arduino Unos, compass, and radio transmitter were powered by 4 AA batteries. The 4 AA batteries fed into the master Arduino, then distributed out to everything else via the 3.3V, 5V, and Vin ports (Arduino Uno has built in 3.3V and 5V linear regulators). So the 3.3V went to the compass, the 5V went to the radio beacon, the Vin went to the slave Arduino.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;2 separate batteries is simple.&lt;/strong&gt; There is no need to worry about back EMF from motors, no need for capacitors or adding voltage regulators.&lt;/p&gt;&#xA;" OwnerUserId="9188" LastActivityDate="2015-05-19T00:29:23.127" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7305" PostTypeId="2" ParentId="483" CreationDate="2015-05-19T14:16:18.240" Score="0" Body="&lt;p&gt;Robotics is usually a business of various trade-offs, so there is no ultimate solution for power management, as every robot is different. For example, separate battery for motors mentioned by others sometimes may be a good solution, but sometimes cannot be used due to size/weight constraints. There are however some general tips there can be utilized in many designs:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Never use same power source for electronics and motors/servos. Even if your motors are 5V, use separate voltage regulator for electronics, and separate power for motors.&lt;/li&gt;&#xA;&lt;li&gt;Do not use linear regulators for driving servos/motors. Use DC/DC converters instead. Motors can draw huge amounts of current. Linear regulators usually have poor efficiency, so much of a power will go to a waste in form of heat dissipated on a regulator.&lt;/li&gt;&#xA;&lt;li&gt;Keep high-current circuits away from other electronics, especially from analog ones.&lt;/li&gt;&#xA;&lt;li&gt;Consider using hardware or/and software filters if you want reliable and precise ADC readings.&lt;/li&gt;&#xA;&lt;li&gt;Use capacitors! They are your biggest friends when it comes to fighting interference. As a rule of thumb, you can assume that each IC should have at least one 100n capacitor between each VCC and GND pins pair. &lt;/li&gt;&#xA;&lt;li&gt;If you many boards distributed all around your robot, consider adding a separate voltage regulator for each board. It will cut out any interference acquired by power cables. &lt;/li&gt;&#xA;&lt;li&gt;Check out dedicated power management ICs. They can be really clever, signalling power failures, protecting your circuits from reverse polarity, over and under voltage and many, many more.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="7360" LastActivityDate="2015-05-19T14:16:18.240" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7306" PostTypeId="2" ParentId="7294" CreationDate="2015-05-19T15:51:19.523" Score="3" Body="&lt;p&gt;So here's a system commmonly used in portioning substances, but I don't know what it's called for you to look it up (sorry). I've included two pictures, one for reference for us to call things by the same name, and another for displaying principle of operation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A portioner is a disc or other shape that has a hole. The hole is sized to contain the correct quantity of the substance you are trying to portion. Think of it like a measuring spoon. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The portioner goes into a portioner housing, which allows a hopper to attach. It also allows the material contained in the portioner to be released. The hopper allows you to hold as much stock as you would like. One sample, a day, a week - the size of the hopper is up to you. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as operation, the disc is configured with its hole aligned towards the hopper. When you want the required quantity of material, you just move the disc to align its hole with the outlet of the portioner housing. The material contained in the hole of the disc falls out. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that I've drawn this as a vertical-rotating system, but you could just as easily have a horizontal-translating system. This would look like a cigar cutter. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;:EDIT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To be clear, this setup works with any units of measure. It's as big or as small as you need it to be. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/n43qA.png&quot; alt=&quot;Parts&quot;&gt;&#xA;&lt;img src=&quot;https://i.stack.imgur.com/dxGdS.png&quot; alt=&quot;Operation&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-05-19T15:51:19.523" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7308" PostTypeId="1" CreationDate="2015-05-19T21:45:14.853" Score="2" ViewCount="532" Body="&lt;p&gt;I have 2 of these 12v motors and a 12v battery&#xA;&lt;a href=&quot;http://www.enigmaindustries.com/Motors/Bosch_EV_Warrior.htm&quot; rel=&quot;nofollow&quot;&gt;http://www.enigmaindustries.com/Motors/Bosch_EV_Warrior.htm&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to know what the best solution for controlling this motor with an Arduino Uno would be.&#xA;Does the motor controller need to have a maximum current of 100A?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I though of a 100A transistor connected to the pwm pin of arduino, and then, control the motor with pwm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is voltage regulator better than pwm?&lt;/p&gt;&#xA;" OwnerUserId="9741" LastEditorUserId="7066" LastEditDate="2015-07-24T16:38:43.083" LastActivityDate="2015-07-24T16:38:43.083" Title="How to control a dc motor" Tags="&lt;motor&gt;&lt;esc&gt;&lt;pwm&gt;&lt;microcontroller&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7310" PostTypeId="2" ParentId="5180" CreationDate="2015-05-20T03:33:32.413" Score="-2" Body="&lt;p&gt;If you know the first location, you can use a laser mouse.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;{URL redacted}&lt;/p&gt;&#xA;" OwnerUserId="9746" LastEditorUserId="134" LastEditDate="2015-05-20T06:10:37.183" LastActivityDate="2015-05-20T06:10:37.183" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7311" PostTypeId="1" AcceptedAnswerId="7312" CreationDate="2015-05-20T08:25:30.970" Score="1" ViewCount="96" Body="&lt;p&gt;I want to make a compact (actuators motors and sensors are all in one) soft robot. Actuators can be pneumatic or dielectric. I need suggestions about manufacturating. I'm open to new ideas.&lt;/p&gt;&#xA;" OwnerUserId="9748" LastEditorUserId="37" LastEditDate="2020-01-08T14:45:20.247" LastActivityDate="2020-01-08T14:45:20.247" Title="How can i make a compact soft robot" Tags="&lt;actuator&gt;&lt;manufacturing&gt;&lt;soft-robotics&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7312" PostTypeId="2" ParentId="7311" CreationDate="2015-05-20T08:43:57.433" Score="2" Body="&lt;p&gt;I think dielectric mechanism like piezo are suitable for compact designs.&#xA;These might be usefull&#xA;&lt;a href=&quot;http://en.wikipedia.org/wiki/Piezoelectric_motor&quot; rel=&quot;nofollow&quot;&gt;http://en.wikipedia.org/wiki/Piezoelectric_motor&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.google.com/patents/US4812698&quot; rel=&quot;nofollow&quot;&gt;https://www.google.com/patents/US4812698&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9504" LastActivityDate="2015-05-20T08:43:57.433" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7315" PostTypeId="1" AcceptedAnswerId="7328" CreationDate="2015-05-20T13:01:31.440" Score="2" ViewCount="349" Body="&lt;p&gt;Currently designing a spherical wrist, I want to manipulate a 300gr payload.&#xA;the design has a 200mm span, so I'm guessing at a 1.1Nm (considering the weight of structure &amp;amp; motors).&#xA;&lt;img src=&quot;https://i.stack.imgur.com/WTicB.png&quot; alt=&quot;spherical wrist&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've looked at Maxon, Faulhaber, but can't find any motor+gearbox+encoder under a 100gr.&#xA;Any suggestion ?&lt;/p&gt;&#xA;" OwnerUserId="9750" LastActivityDate="2015-05-21T12:43:44.497" Title="2Nm small motor" Tags="&lt;motor&gt;&lt;actuator&gt;&lt;torque&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7316" PostTypeId="1" AcceptedAnswerId="7326" CreationDate="2015-05-20T13:24:15.110" Score="3" ViewCount="6464" Body="&lt;p&gt;I'm looking into CCTV, and am interested in minimising costs by having a motion tracking camera cover an area that would otherwise utilise multiple cameras.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is already something like this on the market manufactured by a company called NightWatcher (I think).  However, it does not track, it merely senses using 3 PIR's and points the camera in 1 of 3 positions. Ping ponging between them if the subject is between sensors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I like the idea of this, but not the drawbacks, and was wondering if there was anything I could do with an arduino or similar to achieve a better result.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I stumbled across this, but am not entirely sure about it. Also this is for outside application, and that thread is for indoor (if that makes a difference).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://robotics.stackexchange.com/a/1397/9751&quot;&gt;https://robotics.stackexchange.com/a/1397/9751&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just in case I have mislead you, I want to have a unit where sensors detect movement and then a camera to face that position.&lt;/p&gt;&#xA;" OwnerUserId="9751" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2017-12-09T05:57:45.100" Title="How can I make a motion tracking camera?" Tags="&lt;cameras&gt;" AnswerCount="3" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="7317" PostTypeId="1" AcceptedAnswerId="7318" CreationDate="2015-05-20T14:45:29.673" Score="1" ViewCount="448" Body="&lt;p&gt;I'd like to buy a small Vacuum Lifter so that I can move playing cards around with robotics. But my &quot;google-fu&quot; is failing me. I don't really know what search terms to look for... or what webpages to look to find this kind of component.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In essence, I want an electronic version of a &lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/B001U35OJI&quot; rel=&quot;nofollow&quot;&gt;Vacuum Pen&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't really know where to search for this kind of component. I've found pneumatic valves and other complicated machinery... but ideally I'd want a self-contained electronic vacuum pen. Since I'm only planning to move playing cards around.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyone have an idea where to look for something like this? Thanks.&lt;/p&gt;&#xA;" OwnerUserId="9754" LastActivityDate="2015-05-21T00:29:55.650" Title="Vacuum Lifter: Moving Playing Cards" Tags="&lt;robotic-arm&gt;&lt;actuator&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7318" PostTypeId="2" ParentId="7317" CreationDate="2015-05-20T15:03:33.763" Score="3" Body="&lt;p&gt;Vacuum gripper - I think. Perhaps something like the lynxmotion version, which generates the vacuum with a motorised syringe:&#xA;&lt;a href=&quot;http://www.lynxmotion.com/p-788-vacuum-gripper-kit.aspx&quot; rel=&quot;nofollow&quot;&gt;http://www.lynxmotion.com/p-788-vacuum-gripper-kit.aspx&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively - a flat electrostatic gripper can be used for paper handling but it involves a high voltage on one side of a plate, covered by a thin plastic sheet.  A bit of research would be needed to get one working though:&#xA;&lt;a href=&quot;http://mechatronics.org/r&amp;amp;d/rob/eag/electroadhesion.pdf&quot; rel=&quot;nofollow&quot;&gt;http://mechatronics.org/r&amp;amp;d/rob/eag/electroadhesion.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9578" LastActivityDate="2015-05-20T15:03:33.763" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7320" PostTypeId="1" AcceptedAnswerId="7321" CreationDate="2015-05-20T22:30:54.867" Score="-2" ViewCount="54" Body="&lt;p&gt;i want to make 3d position and position change estimation from photos taken from flying robot. I need suggestions for fast photo matching. &lt;/p&gt;&#xA;" OwnerUserId="9504" LastActivityDate="2015-05-21T00:13:28.270" Title="Position estimation from photo fingerprinting" Tags="&lt;localization&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7321" PostTypeId="2" ParentId="7320" CreationDate="2015-05-21T00:13:28.270" Score="3" Body="&lt;p&gt;What you're looking for is called an optical flow system: a camera that by recognizing the movement of patterns can estimate the movement of the camera target relative to the camera.  You can implement your own optical flow algorithm through the use of &lt;a href=&quot;http://robots.stanford.edu/cs223b05/notes/CS%20223-B%20T1%20stavens_opencv_optical_flow.pdf&quot; rel=&quot;nofollow&quot;&gt;OpenCV&lt;/a&gt;, a popular computer vision library.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, it's more likely that you'll want to use existing sensors with SoCs for optical flow built in, such as those found in optical mice. An example commonly used with quadcopters is this &lt;a href=&quot;http://copter.ardupilot.com/wiki/common-optional-hardware/common-optical-flow-sensors-landingpage/common-mouse-based-optical-flow-sensor-adns3080/&quot; rel=&quot;nofollow&quot;&gt;ADNS3080 breakout board&lt;/a&gt;, or &lt;a href=&quot;https://store.3drobotics.com/products/px4flow&quot; rel=&quot;nofollow&quot;&gt;this one&lt;/a&gt; from 3DRobotics.  Good luck!&lt;/p&gt;&#xA;" OwnerUserId="4238" LastActivityDate="2015-05-21T00:13:28.270" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7322" PostTypeId="2" ParentId="7317" CreationDate="2015-05-21T00:29:55.650" Score="1" Body="&lt;p&gt;This 12V vaccum pump from Sparkfun may be of interest to you: &lt;a href=&quot;https://www.sparkfun.com/products/10398&quot; rel=&quot;nofollow&quot;&gt;link&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to drive this pump you could either:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Use an HBridge motor driver for both forwards and reverse variable speed control.  This would allow you to release your playing cards with some force, but it may not be necessary.&lt;/li&gt;&#xA;&lt;li&gt;If you think you could get away with just stopping the pump to let go of a card, you could simply use a Mosfet to variably control the pump with only a sucking ability and no blowing.&lt;/li&gt;&#xA;&lt;li&gt;If you don't expect to require variable speed control, you could use a relay to very simply open and close a 12V circuit with the motor.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Good luck.&lt;/p&gt;&#xA;" OwnerUserId="4238" LastActivityDate="2015-05-21T00:29:55.650" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7323" PostTypeId="2" ParentId="6990" CreationDate="2015-05-21T00:38:49.900" Score="1" Body="&lt;p&gt;You might be able to do something with &lt;a href=&quot;http://en.wikipedia.org/wiki/Hyperspectral_imaging&quot; rel=&quot;nofollow&quot;&gt;hyperspectral imaging&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-05-21T00:38:49.900" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7324" PostTypeId="2" ParentId="7316" CreationDate="2015-05-21T06:35:15.377" Score="2" Body="&lt;p&gt;Basically you need to solve 3 different problems: &lt;br&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Find the right camera setup and recording strategy&#xA;I'm not an expert in this field so I won't say anything to this&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second get the information about a person on the camera. Basically to follow a person in the picture you have to know that there is a person in the picture. So you need something like a machine vision (Let computer decide whether there is a person or not). If you know there is a person you can get there position in the picture easily&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The last problem is that you need a motor which moves the camera around. For this application a simple hobby servo motor is sufficient. The motor needs a small controller and some &quot;strategy&quot; how the motor let the camera follow the person.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My first approach to this problems would use a raspberry pi because of two reasons: &lt;br&gt;&#xA;It provides the ability to control small servo motors &lt;br&gt;&#xA;It can perform simple machine vision tasks&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The raspberry is able to use the opencv library easily and there tons of projects how to do people recognition with opencv on the internet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the end of the day you will get a pixel value from the recognition algorithm. This value will tell you, that there is a person in the picture and where.&#xA;You just need to rotate the camera so far that the person is in the center of your image. This is pretty simple done by using a proprtional controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first problem I see, which you will encounter with this implementation is how the camera will behave when there are 2 or more people in the field of view. But there you can find a solution, too.&lt;/p&gt;&#xA;" OwnerUserId="6911" LastActivityDate="2015-05-21T06:35:15.377" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7325" PostTypeId="2" ParentId="7315" CreationDate="2015-05-21T07:56:34.657" Score="1" Body="&lt;p&gt;Use a servomotor like some Dynamixal, the MX 28AR meets your listed requirements pretty good.&#xA;More then 2Nm torque with 77g weight.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are other models from dynamixal or other suppliers.&lt;/p&gt;&#xA;" OwnerUserId="6911" LastActivityDate="2015-05-21T07:56:34.657" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7326" PostTypeId="2" ParentId="7316" CreationDate="2015-05-21T11:23:48.843" Score="1" Body="&lt;p&gt;You can do all this with the right software, no sensors required (or the sensors could be other cameras).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The technique you're looking for is known as &lt;a href=&quot;http://en.wikipedia.org/wiki/Background_subtraction#Using_frame_differencing&quot; rel=&quot;nofollow&quot;&gt;Frame Differencing&lt;/a&gt; - it basically means taking a frame of camera footage and using it as a masking filter on the next frame, this reveals the pixels which have changed in the current frame, these are usually pixels representing observed objects which have moved.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This gives you motion detection and can be done with fairly low resolution 'sensor' cameras, which then tell your main high resolution camera which way to face.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 'ping-pong' effect would be mitigated by always having the motion target in the center of the main camera's view and only using the interpreted data from the sensor cameras to calculate the object's position.&lt;/p&gt;&#xA;" OwnerUserId="7185" LastActivityDate="2015-05-21T11:23:48.843" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7327" PostTypeId="1" AcceptedAnswerId="7335" CreationDate="2015-05-21T12:04:58.903" Score="3" ViewCount="557" Body="&lt;p&gt;Folks at programmers stack exchange asked me ask here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to communicate with an arduino and sent integers it. I code this program in C++. I initialy used bulk_transfer(), but it sends only char data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This in the API reference for libusb:&#xA;&lt;a href=&quot;http://libusb.org/static/api-1.0/group__syncio.html&quot; rel=&quot;nofollow&quot;&gt;http://libusb.org/static/api-1.0/group__syncio.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the prototype of bulk_transfer()&lt;/p&gt;&#xA;&#xA;&lt;p&gt;int     libusb_bulk_transfer (struct libusb_device_handle *dev_handle, unsigned char endpoint, unsigned char *data, int length, int *transferred, unsigned int timeout)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can see, &lt;em&gt;data&lt;/em&gt; is an unsigned char pointer, that is, a pointer to a buffer containing &lt;em&gt;length&lt;/em&gt; unsigned chars. I can successfully transcieve strings. How do I transfer integers with sign?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Currently I am thinking about a system in which the arduino asks for the digit by sending a character and my program sends the number as reply followed by the sign, which is requested next. Is this solution viable? Or should I transfer the integer as a string? Is there a better way?&lt;/p&gt;&#xA;" OwnerUserId="8981" LastEditorUserId="478" LastEditDate="2015-05-22T16:40:45.913" LastActivityDate="2015-06-22T14:01:45.427" Title="How to transfer signed integers with libusb?" Tags="&lt;arduino&gt;&lt;communication&gt;&lt;usb&gt;&lt;c++&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7328" PostTypeId="2" ParentId="7315" CreationDate="2015-05-21T12:43:44.497" Score="3" Body="&lt;h1&gt;First&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;I would like to caution your choice of motor torque. I don't know how you generated the drawing of your wrist, but CAD packages like Inventor or Solidworks can easily generate masses and moments of inertia if you select the correct material. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For looking solely at &lt;em&gt;holding&lt;/em&gt; torque, the torque required to &lt;strong&gt;not move&lt;/strong&gt;, you need a torque that supports the load's weight at the distance from the joint to the center of mass of the load as well as the arm's weight between the joint and the load (and associated motors, gearboxes, etc.) at the distance from the joint to the center of mass of the arm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\tau_{holding} = x_{center.of.mass_{load}} (m_{load} g) + x_{center.of.mass_{arm}} (m_{arm} g)&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $\tau_{holding}$ is the holding torque, in Nm, $x$ is the distance from the joint axis to the respective center of mass, &lt;strong&gt;in meters&lt;/strong&gt;, $m$ is the mass of the respective component, &lt;strong&gt;in kg&lt;/strong&gt;, and $g$ is the gravitational constant; $9.81 m/s^2$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;em&gt;accelerating&lt;/em&gt; torque, or torque required to &lt;strong&gt;move&lt;/strong&gt; your part, depends on the moment of inertia. If you're not actuating at the center of mass of both the arm and the load (you're not; you can't!) then you need the parallel axis theorem to find the moment of inertia at the joint. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;I_{end.effector} = I_{load} + m_{load} x^2_{center.of.mass_{load}} + I_{arm} + m_{arm} x^2_{center.of.mass_{arm}}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where inertias $I$ are in $kg-m^2$, and again, $m$ is in kg and $x$ is in meters. :EDIT: When I say end effector here, I'm referring to the everything after the wrist joint, up to and including the load. When I talk about the &quot;arm&quot; in this context, I mean all of the robot after the wrist joint, excluding the load. The center of mass of the 'arm' is the center of mass of the linkage(s) between the wrist joint and the load. :\EDIT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The torque required to accelerate the load is then given by:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\tau_{accelerating} = I_{end.effector} \alpha_{desired}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where torque $\tau$ is in Nm and angular acceleration $\alpha$ is in &lt;strong&gt;$rad/s$&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you don't care about a particular acceleration you can rearrange the above equation to determine what your acceleration will be, given a particular moment of inertia and motor torque:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ &#xA;\alpha_{achievable} = \frac{\tau_{motor}}{I_{end.effector}}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your end effector (the robot arm between the wrist and the load) had no moment of inertia through its center of mass (it was just a point mass), the moment of inertia through the wrist joint would reduce to $mx^2$. This is also true of the load. However, because it and the load are both real objects, they will have size, which also implies they will have a nonzero moment of inertia through their centers of mass. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;All of this is to say, &lt;em&gt;if you don't account for moments of inertia, you may find that your wrist is incapable of accelerating your load&lt;/em&gt;. If it can't accelerate, it won't be able to position well if at all. &lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Second&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;I would like to caution your choice of units. 'gr' is the symbol for &lt;em&gt;grain&lt;/em&gt;, which is a unit of mass, like gram, but one grain is equal to approximately 0.065 grams. If you mean gram, 'g' is the (SI) symbol you should use. If you would like to avoid confusion between the gram symbol and the gravitational constant, you should use kilograms instead 'kg'. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most equations are predicated on SI base units, which means kilograms and meters, not grams and millimeters. If you would like to express precision to the millimeter or gram level, use trailing zeros as trailing zeros after a decimal are considered &lt;a href=&quot;http://en.wikipedia.org/wiki/Significant_figures&quot; rel=&quot;nofollow&quot;&gt;significant figures&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Third&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;To your question, I would suggest using servomotors for positioning unless you need to have positive feedback that you have reached your destination or unless you're trying to do some form of external PID control on the joint. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that all servos run on some sort of internal PID control with internal position feedback. You don't get access to their position encoder (potentiometer, typically), but they DO run closed-loop and can be expected to reach the position you've requested &lt;strong&gt;provided they have sufficient torque, see the First note above&lt;/strong&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you DO need position feedback (CNC quality control or something else), you could search &lt;a href=&quot;http://www.digikey.com/product-search/en/sensors-transducers/encoders/1966131?stock=1&quot; rel=&quot;nofollow&quot;&gt;Digikey&lt;/a&gt; for encoders to get exactly what you need or you could search for 'rotary encoders' online. I have experience with rotary encoders for larger applications, but at a glance the miniature offerings from &lt;a href=&quot;http://www.nemicon.com/hollow.htm&quot; rel=&quot;nofollow&quot;&gt;Nemicon&lt;/a&gt; and &lt;a href=&quot;http://www.usdigital.com/products/encoders&quot; rel=&quot;nofollow&quot;&gt;US Digital&lt;/a&gt; look nice. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are looking specifically for a gearbox and motor (search: gearmotor), then &lt;a href=&quot;https://www.pololu.com/category/22/motors-and-gearboxes&quot; rel=&quot;nofollow&quot;&gt;Pololu&lt;/a&gt; has some nice miniature offerings. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a final note, I'm not affiliated with any of the companies I've linked to. I have offered them as examples of what you may be interested in and what they're called; sometimes the hardest part of finding something is figuring out what to put into the search box.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-05-21T12:43:44.497" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7329" PostTypeId="2" ParentId="6843" CreationDate="2015-05-21T20:22:44.050" Score="4" Body="&lt;p&gt;You said, &lt;em&gt;&quot;on some occasions the sensor will read values consistently (at maybe 20 vals per second)&quot;&lt;/em&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;20 values per second is 20Hz. This means that you are polling every 50ms. In the datasheet linked in the other response, it says,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;&quot;we suggest to use over 60ms measurement cycle, in order to prevent trigger signal to the echo signal&quot;&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the operation discussion it says the your 10$\mu$s pulse starts the &quot;sonic burst&quot;, after which the sensor raises the echo bit. You are watching for that echo bit to return to zero; time raised determines distance. What it appears that you are doing is polling the sensor too frequently. The trigger signal causes another sonic burst, which raises the echo pulse a second time. This could overlap the first pulse, resulting in a signal that stays high. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your &lt;em&gt;&quot;maybe 20 vals per second&quot;&lt;/em&gt; could also be the reason for your intermittent issue; if you're not using a dedicated timer (interrupt) to initiate the polling, then you're at the mercy of whatever other logic you have running on the microcontroller. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could (good solution) use an interrupt to trigger the polling and to measure the signal length, or you could (bad solution) add some meaningless math calculations in your code in an attempt to increase the time between sensor function calls. Bad solution is bad, but it could be handy to help troubleshoot. You're looking for a value of about 10Hz; 15Hz is right on the border of instability for the sensor. Of course, if you could reliably count on polling to go off at a precise interval &lt;strong&gt;cough interrupt cough&lt;/strong&gt; then borderline cases are very manageable. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-05-21T20:22:44.050" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7330" PostTypeId="2" ParentId="7308" CreationDate="2015-05-22T01:29:02.773" Score="3" Body="&lt;p&gt;Yes, as this motor is rated for 100amps stall at 12V you should probably be using a motor controller capable of supplying that amount of current.  Regarding how to drive the motor, the following may be of use:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A voltage regulator cannot be used to drive a motor.  What it does is convert a certain voltage to another voltage, for example 5v to 12v.  It does not provide variable speed control.&lt;/li&gt;&#xA;&lt;li&gt;A transistor rated for 100amps at 12V would be sufficient to drive one of these motors, however you would only have one direction of control (for example, turning clockwise but not counterclockwise).  This may be OK for your application, it also may not be.  You could easily hook up the transistor to a PWM pin of your Arduino for control.&lt;/li&gt;&#xA;&lt;li&gt;If you want dual directional control of your motor, you will need a DC brushed motor driver, or HBridge.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Good luck with your project.  Just a note, if you don't have very much experience I don't recommend messing with such high currents: issues with unsafe wiring due to lack of experience could be very dangerous and expensive.  I'd recommend starting smaller and working upwards.&lt;/p&gt;&#xA;" OwnerUserId="4238" LastActivityDate="2015-05-22T01:29:02.773" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7331" PostTypeId="1" CreationDate="2015-05-22T17:55:01.407" Score="1" ViewCount="499" Body="&lt;p&gt;Lately, if you notice I have posted some questions regarding position tracking for nonlinear model. I couldn't do it. I've switched to linear model, hope I can do it. For regulation problem, the position control seems working but once I switch to tracking, the system starts oscillating. I don't know why. I have stated what I've done below hope someone guides me to the correct path. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The linear model of the quadrotor is provided &lt;a href=&quot;http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=6915128&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; which is &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{align}&#xA;\ddot{x}    &amp;amp;= g \theta \ \ \ \ \ \ \ \ \ \ (1)\\&#xA;\ddot{y}    &amp;amp;= - g \phi \ \ \ \ \ \ \ \ \ \ (2)\\&#xA;\ddot{z}    &amp;amp;= \frac{U_{1}}{m} - g \\&#xA;\ddot{\phi} &amp;amp;= \frac{L}{J_{x}} U_{2} \\&#xA;\ddot{\theta} &amp;amp;= \frac{L}{J_{y}} U_{2} \\&#xA;\ddot{\psi} &amp;amp;= \frac{1}{J_{z}} U_{2} \\&#xA;\end{align}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this &lt;a href=&quot;http://link.springer.com/article/10.1007%2Fs10846-012-9789-z&quot; rel=&quot;nofollow noreferrer&quot;&gt;paper&lt;/a&gt;, the position control based on PD is provided. In the aforementioned paper, from (1) and (2) the desired angles $\phi^{d}$ and $\theta^{d}$ are obtained, therefore, &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{align}&#xA;\theta^{d}  &amp;amp;= \frac{\ddot{x}^{d}}{g}  \\&#xA;\phi^{d}    &amp;amp;= - \frac{\ddot{y}^{d}}{g}&#xA;\end{align}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{align}&#xA;\ddot{x}^{d} &amp;amp;= Kp(x^{d} - x) + Kd( \dot{x}^{d} - \dot{x} ) \\&#xA;\ddot{y}^{d} &amp;amp;= Kp(y^{d} - y) + Kd( \dot{y}^{d} - \dot{y} ) \\&#xA;U_{1} &amp;amp;= Kp(z^{d} - z) + Kd( \dot{z}^{d} - \dot{z} ) \\&#xA;U_{2} &amp;amp;= Kp(\phi^{d} - \phi) + Kd( \dot{\phi}^{d} - \dot{\phi} ) \\&#xA;U_{3} &amp;amp;= Kp(\theta^{d} - \theta) + Kd( \dot{\theta}^{d} - \dot{\theta} ) \\&#xA;U_{4} &amp;amp;= Kp(\psi^{d} - \psi) + Kd( \dot{\psi}^{d} - \dot{\psi} ) \\&#xA;\end{align}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;with regulation problem where $x^{d} = 2.5 m, \ y^{d} = 3.5 m$ and $z^{d} = 4.5 m$, the results are &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/qBlCa.png&quot; alt=&quot;enter image description here&quot;&gt;&#xA;&lt;img src=&quot;https://i.stack.imgur.com/65V5T.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now if I change the problem to the tracking one, the results are messed up. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/bu5an.png&quot; alt=&quot;enter image description here&quot;&gt;&#xA;&lt;img src=&quot;https://i.stack.imgur.com/kaSZr.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the last paper, they state &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;A saturation function is needed to ensure that the reference roll and&#xA;  pitch angles are within specified limits&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZdUZJ.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, the max value for $\phi$ and $\theta$ are not stated in the paper but since they use Euler angles, I believe $\phi$ in this range $(-\frac{\pi}{2},\frac{\pi}{2})$ and $\theta$ in this range $[-\pi, \pi]$&#xA;I'm using Euler method as an ODE solver because the step size is fixed. For the derivative, Euler method is used. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is my code &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;%######################( PD Controller &amp;amp; Atittude )%%%%%%%%%%%%%%%%%%%%&#xA;&#xA;clear all;&#xA;clc;&#xA;&#xA;dt = 0.001;&#xA; t = 0;&#xA;&#xA;% initial values of the system&#xA; x = 0;&#xA;dx = 0;&#xA; y = 0;&#xA;dy = 0;&#xA; z = 0;&#xA;dz = 0;&#xA;&#xA;   Phi = 0;&#xA;  dPhi = 0;&#xA; Theta = 0;&#xA;dTheta = 0;&#xA;   Psi = pi/3;&#xA;  dPsi = 0;&#xA;&#xA;&#xA;%System Parameters:&#xA;m = 0.75;      % mass (Kg)&#xA;L = 0.25;      % arm length (m)&#xA;Jx = 0.019688; % inertia seen at the rotation axis. (Kg.m^2)&#xA;Jy = 0.019688; % inertia seen at the rotation axis. (Kg.m^2)&#xA;Jz = 0.039380; % inertia seen at the rotation axis. (Kg.m^2)&#xA;g  = 9.81;      % acceleration due to gravity m/s^2&#xA;&#xA;errorSumX = 0;&#xA;errorSumY = 0;&#xA;errorSumZ = 0;&#xA;&#xA;errorSumPhi   = 0;&#xA;errorSumTheta = 0;&#xA;&#xA;pose = load('xyTrajectory.txt');&#xA;&#xA;% Set desired position for tracking task&#xA;DesiredX = pose(:,1);&#xA;DesiredY = pose(:,2);&#xA;DesiredZ = pose(:,3);&#xA;&#xA;% Set desired position for regulation task&#xA;% DesiredX(:,1) = 2.5;&#xA;% DesiredY(:,1) = 5;&#xA;% DesiredZ(:,1) = 7.2;&#xA;&#xA;&#xA;dDesiredX = 0;&#xA;dDesiredY = 0;&#xA;dDesiredZ = 0;&#xA;&#xA;DesiredXpre = 0;&#xA;DesiredYpre = 0;&#xA;DesiredZpre = 0;&#xA;&#xA;dDesiredPhi = 0;&#xA;dDesiredTheta = 0;&#xA;DesiredPhipre = 0;&#xA;DesiredThetapre = 0;&#xA;&#xA;&#xA;&#xA;for i = 1:6000&#xA;&#xA;   % torque input&#xA;   %&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;( Ux )&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&#xA;   Kpx = 90; Kdx = 25; Kix = 0.0001; &#xA;&#xA;&#xA;   errorSumX = errorSumX + ( DesiredX(i) - x );&#xA;&#xA;   % Euler Method Derivative&#xA;     dDesiredX = ( DesiredX(i) - DesiredXpre ) / dt;&#xA;   DesiredXpre = DesiredX(i);&#xA;&#xA;&#xA;   Ux = Kpx*( DesiredX(i) - x  ) + Kdx*( dDesiredX - dx ) + Kix*errorSumX;&#xA;   %&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;( Uy )&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&#xA;   Kpy = 90; Kdy = 25; Kiy = 0.0001; &#xA;&#xA;&#xA;   errorSumY = errorSumY + ( DesiredY(i) - y );&#xA;&#xA;   % Euler Method Derivative&#xA;   dDesiredY = ( DesiredY(i) - DesiredYpre ) / dt;&#xA;   DesiredYpre = DesiredY(i);&#xA;&#xA;&#xA;   Uy = Kpy*( DesiredY(i) - y  ) + Kdy*( dDesiredY - dy ) + Kiy*errorSumY;&#xA;   %&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;( U1 )&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&#xA;   Kpz = 90; Kdz = 25; Kiz = 0; &#xA;&#xA;&#xA;   errorSumZ = errorSumZ + ( DesiredZ(i) - z );&#xA;&#xA;      dDesiredZ = ( DesiredZ(i) - DesiredZpre ) / dt;&#xA;   DesiredZpre = DesiredZ(i);&#xA;&#xA;   U1 = Kpz*( DesiredZ(i) - z ) + Kdz*( dDesiredZ - dz ) + Kiz*errorSumZ;&#xA;   %#######################################################################&#xA;   %#######################################################################&#xA;   %#######################################################################&#xA;   % Desired Phi and Theta&#xA;&#xA;&#xA;   %disp('before')&#xA;   DesiredPhi   = -Uy/g;&#xA;   DesiredTheta =  Ux/g;&#xA;&#xA;&#xA;&#xA;   %&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;( U2 )&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&#xA;   KpP = 20; KdP = 5; KiP = 0.001;&#xA;&#xA;&#xA;   errorSumPhi = errorSumPhi + ( DesiredPhi - Phi );&#xA;&#xA;&#xA;   % Euler Method Derivative&#xA;      dDesiredPhi = ( DesiredPhi - DesiredPhipre ) / dt;&#xA;   DesiredPhipre  = DesiredPhi;&#xA;&#xA;&#xA;   U2 = KpP*( DesiredPhi - Phi ) + KdP*( dDesiredPhi - dPhi )  + KiP*errorSumPhi;&#xA;&#xA;   %--------------------------------------&#xA;   %&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;( U3 )&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&#xA;&#xA;   KpT = 90; KdT = 10; KiT = 0.001;&#xA;    errorSumTheta = errorSumTheta + ( DesiredTheta - Theta );&#xA;&#xA;   % Euler Method Derivative&#xA;      dDesiredTheta = ( DesiredTheta - DesiredThetapre ) / dt;&#xA;   DesiredThetapre = DesiredTheta;&#xA;&#xA;&#xA;   U3 = KpT*( DesiredTheta - Theta ) + KdP*( dDesiredTheta - dTheta ) + KiT*errorSumTheta;&#xA;   %--------------------------------------&#xA;   %&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;( U4 )&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&#xA;   KpS = 90; KdS = 10; KiS = 0; DesiredPsi = 0; dDesiredPsi = 0;&#xA;   U4 = KpS*( DesiredPsi - Psi ) + KdS*( dDesiredPsi - dPsi );&#xA;&#xA;&#xA;   %###################( ODE Equations of Quadrotor )###################&#xA;   ddx = g * Theta;&#xA;    dx = dx + ddx*dt;&#xA;     x =  x +  dx*dt;&#xA;   %=======================================================================  &#xA;   ddy = -g * Phi;&#xA;    dy = dy + ddy*dt;&#xA;     y =  y +  dy*dt;&#xA;   %=======================================================================&#xA;   ddz = (U1/m) - g;&#xA;    dz = dz + ddz*dt;&#xA;     z =  z +  dz*dt;&#xA;   %=======================================================================  &#xA;   ddPhi = ( L/Jx )*U2;&#xA;    dPhi = dPhi + ddPhi*dt;&#xA;     Phi =  Phi +  dPhi*dt;&#xA;   %=======================================================================  &#xA;   ddTheta =  ( L/Jy )*U3;&#xA;    dTheta =  dTheta + ddTheta*dt;&#xA;     Theta =   Theta +  dTheta*dt;&#xA;   %=======================================================================  &#xA;   ddPsi =  (1/Jz)*U4; &#xA;    dPsi = dPsi + ddPsi*dt;&#xA;     Psi =  Psi +  dPsi*dt;&#xA;   %=======================================================================  &#xA;   %store the erro&#xA;   ErrorX(i)   = ( x - DesiredX(i) );&#xA;   ErrorY(i)   = ( y - DesiredY(i) );&#xA;   ErrorZ(i)   = ( z - DesiredZ(i) );&#xA;   ErrorPsi(i)   = ( Psi - 0 );&#xA;&#xA;&#xA;   X(i) = x;&#xA;   Y(i) = y;&#xA;   Z(i) = z;&#xA;&#xA;   T(i) = t;&#xA;&#xA;   t = t + dt; &#xA;&#xA;&#xA;end&#xA;&#xA;&#xA;Figure1 = figure(1);&#xA;set(Figure1,'defaulttextinterpreter','latex');&#xA;&#xA;&#xA;subplot(2,2,1)&#xA;plot(T, ErrorX, 'LineWidth', 2)&#xA;title('Error in $x$-axis Position (m)')&#xA;xlabel('time (sec)')&#xA;ylabel('$x_{d}(t) - x(t)$', 'LineWidth', 2)&#xA;&#xA;subplot(2,2,2)&#xA;plot(T, ErrorY, 'LineWidth', 2)&#xA;title('Error in $y$-axis Position (m)')&#xA;xlabel('time (sec)')&#xA;ylabel('$y_{d}(t) - y(t)$', 'LineWidth', 2)&#xA;&#xA;subplot(2,2,3)&#xA;plot(T, ErrorZ, 'LineWidth', 2)&#xA;title('Error in $z$-axis Position (m)')&#xA;xlabel('time (sec)')&#xA;ylabel('$z_{d} - z(t)$', 'LineWidth', 2)&#xA;&#xA;&#xA;subplot(2,2,4)&#xA;plot(T, ErrorPsi, 'LineWidth', 2)&#xA;title('Error in $\psi$ (m)')&#xA;xlabel('time (sec)')&#xA;ylabel('$\psi_{d} - \psi(t)$','FontSize',12);&#xA;grid on &#xA;&#xA;&#xA;Figure2 = figure(2);&#xA;set(Figure2,'units','normalized','outerposition',[0 0 1 1]);&#xA;&#xA;figure(2)&#xA;plot3(X,Y,Z, 'b')&#xA;grid on&#xA;&#xA;hold on &#xA;plot3(DesiredX, DesiredY, DesiredZ, 'r')&#xA;&#xA;pos = get(Figure2,'Position');&#xA;set(Figure2,'PaperPositionMode','Auto','PaperUnits','Inches','PaperSize',[pos(3),pos(4)]);&#xA;print(Figure2,'output2','-dpdf','-r0');&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;For the trajectory code&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;clear all;&#xA;clc;&#xA;&#xA;fileID = fopen('xyTrajectory.txt','w');&#xA;&#xA; angle = -pi;&#xA;radius = 3;&#xA;z = 0;&#xA;t = 0;&#xA;&#xA;for i = 1:6000&#xA;    if ( z &amp;lt; 2 ) &#xA;        z = z + 0.1;&#xA;        x = 0; &#xA;        y = 0;&#xA;    end&#xA;    if  ( z &amp;gt;= 2 )&#xA;        angle = angle + 0.1;&#xA;        angle = wrapToPi(angle);&#xA;        x = radius * cos(angle);&#xA;        y = radius * sin(angle);&#xA;        z = 2;&#xA;    end&#xA;&#xA;    X(i) = x;&#xA;    Y(i) = y;&#xA;    Z(i) = z;&#xA;&#xA;    fprintf(fileID,'%f \t %f \t %f\n',x, y, z);&#xA;end&#xA;&#xA;fclose(fileID);&#xA;plot3(X,Y,Z)&#xA;grid on&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="2155" LastEditDate="2015-05-22T19:32:37.793" LastActivityDate="2015-07-23T08:11:26.303" Title="position control for linear model of quadrotor (problem with tracking task)" Tags="&lt;control&gt;&lt;quadcopter&gt;&lt;matlab&gt;" AnswerCount="1" CommentCount="11" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7332" PostTypeId="2" ParentId="7073" CreationDate="2015-05-22T18:42:05.950" Score="0" Body="&lt;p&gt;The sensor have trig and echo pins. Simular to your video, you can do that as pen is transmiter and others are receiver. Send from trigger pen (dont listen from echo)and count signals from transciver inputs(dont send any signal from trig). &lt;/p&gt;&#xA;" OwnerUserId="9504" LastActivityDate="2015-05-22T18:42:05.950" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7333" PostTypeId="1" CreationDate="2015-05-23T12:00:00.100" Score="3" ViewCount="1446" Body="&lt;p&gt;I'm new to robotics and this is my first time building a quadcopter.  I'm unable to work out why I keep losing ESCs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most recently in testing, I've managed to calibrate all 4 ESCs and accurately control the speed of all 4 motors.  But after neatly securing them to the frame, 1 motor didn't work.  I recalibrated the ESCs again and, when running them again, the motor still didn't work.  However, the other 3 motors continued to run at first, but also suddenly just stopped altogether.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Research suggested that ESCs have a cut-off voltage, indicating that my battery might be too flat, so I immediately looked to recharging it. To my surprise, the (still very new) battery appeared to have bulged out, indicating that it had been damaged.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further research suggested that the size of the battery I was using is insufficient for the amount of current drawn by the motors.  So, without any PWM applied, I reconnected a new fully charged battery in the hope of listening for any beeps to diagnose, and one ESC immediately coughed up a huge puff of smoke.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before all of this happened, I only managed to get 2 of the ESCs to run their motors.  Despite several attempts at tweaking PWM signals and calibrating them, I ended up replacing the other 2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unless there's some obvious reason for my ESCs to keep dying on me, I can only assume that these specific ESCs are badly made and I should ask for my money back.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These are the components I'm using:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.raspberrypi.org/products/raspberry-pi-2-model-b/&quot; rel=&quot;nofollow&quot;&gt;Raspberry Pi 2 Model B&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.adafruit.com/product/815&quot; rel=&quot;nofollow&quot;&gt;Adafruit 16-Channel 12-bit PWM/Servo Driver - I2C interface - PCA9685&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://rctimer.com/product-1324.html&quot; rel=&quot;nofollow&quot;&gt;RCTimer Mini ESC 40A OPTO BLHeli Firmware (Oneshot125, Support 2-6S)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://rctimer.com/product-112.html&quot; rel=&quot;nofollow&quot;&gt;RCTimer 2208-8 2600kV Outrunner Brushless Motor&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.gensace.de/recommend-products/gens-ace-2200mah-11-1v-25c-3s1p-lipo-battery-pack.html&quot; rel=&quot;nofollow&quot;&gt;Gens ace 2200mAh 11.1V 25C 3S1P Lipo Battery Pack&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The Raspberry Pi is powered through its micro USB interface by a &lt;a href=&quot;https://www.pololu.com/product/2564&quot; rel=&quot;nofollow&quot;&gt;5V Step-Up Voltage Regulator&lt;/a&gt; connected to a &lt;a href=&quot;https://www.robotics.org.za/index.php?route=product/product&amp;amp;path=59_144&amp;amp;product_id=1042&quot; rel=&quot;nofollow&quot;&gt;5000mAh 3.7V LiPo battery&lt;/a&gt;.  The PWM Controller is powered to its Vcc pin by the GPIO1 (3.3V) pin from the Raspberry Pi, that also happens to power other &lt;a href=&quot;https://www.pololu.com/product/2470&quot; rel=&quot;nofollow&quot;&gt;sensors&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the time (when all 4 motors worked), I was able to accurately control them at either 50Hz or 400Hz with 1-2 millisecond duty cycles.&lt;/p&gt;&#xA;" OwnerUserId="9770" LastEditorUserId="9176" LastEditDate="2015-05-26T13:05:35.283" LastActivityDate="2017-08-15T05:33:15.647" Title="Why do my ESCs stop working?" Tags="&lt;quadcopter&gt;&lt;power&gt;&lt;esc&gt;&lt;pwm&gt;" AnswerCount="3" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7334" PostTypeId="1" CreationDate="2015-05-23T12:38:01.593" Score="0" ViewCount="1659" Body="&lt;p&gt;I am using DC motors to build a robotic arm.  I want to make the base shoulder (which rotates and lifts) more stable and stronger.  How should I design this using DC motors?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also I would like to put the motor for the elbow in the base for efficiency.  Which design best suits this? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;&#xA;I am building a robotic arm for a payload of approx. 1-2 kg and using DC high torque motors. In this model, I am using only a shoulder with a gripper. The gripper is self made by me weighing approximately 400 grams. I want to have a proper design and material choice so that the shoulder part remains less heavy and more stable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition to this I want to operate the movement of the gripper, i.e. the up and down motion, by using the motor in the base part. What should be my design and better alternative?&lt;/p&gt;&#xA;" OwnerUserId="9771" LastEditorUserId="9176" LastEditDate="2015-05-26T13:05:05.690" LastActivityDate="2015-05-26T18:20:45.400" Title="Mechanical design for base of robotic arm" Tags="&lt;robotic-arm&gt;&lt;design&gt;" AnswerCount="1" CommentCount="4" ClosedDate="2015-06-03T13:34:02.490" ContentLicense="CC BY-SA 3.0" />
  <row Id="7335" PostTypeId="2" ParentId="7327" CreationDate="2015-05-23T13:51:15.990" Score="3" Body="&lt;p&gt;What you are looking for is called &lt;a href=&quot;https://en.wikipedia.org/wiki/Serialization&quot; rel=&quot;nofollow&quot;&gt;serialization&lt;/a&gt;. Serialization is the process of creating a string (a serial stream of data) (not necessarily NUL-terminated) from arbitrary data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The issue serialization addresses is the fact that the same data are represented in different computers differently. For example, take this &lt;code&gt;struct&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;struct A&#xA;{&#xA;    unsigned int x;&#xA;    unsigned long y;&#xA;};&#xA;&#xA;struct A a = { 0x12345678, 0x1020304050607080LLU };&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This would be laid out in memory in a 32-bit little-endian CPU like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;lowest address           highest address&#xA;       +--+--+--+--+--+--+--+--+&#xA;       |78|56|34|12|80|70|60|50|&#xA;       +--+--+--+--+--+--+--+--+&#xA;        \____ ____/ \____ ____/&#xA;             V           V&#xA;             x           y&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;On a 32-bit big-endian CPU like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;lowest address           highest address&#xA;       +--+--+--+--+--+--+--+--+&#xA;       |12|34|56|78|50|60|70|80|&#xA;       +--+--+--+--+--+--+--+--+&#xA;        \____ ____/ \____ _____/&#xA;             V           V&#xA;             x           y&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;On a 64-bit little-endian CPU like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;lowest address                    highest address&#xA;+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+&#xA;|78|56|34|12|??|??|??|??|80|70|60|50|40|30|20|10|&#xA;+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+&#xA; \____ ____/ \____ ____/ \__________ __________/&#xA;      V           V                 V&#xA;      x         padding             y&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;On a 16-bit big-endian microcontroller like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;lowest address           highest address&#xA;       +--+--+--+--+--+--+--+--+&#xA;       |56|78|??|??|50|60|70|80|&#xA;       +--+--+--+--+--+--+--+--+&#xA;        \_ _/ \_ _/ \____ ____/&#xA;          V     V        V&#xA;          x  padding     y&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In the above, &lt;code&gt;??&lt;/code&gt; means irrelevant values where the compiler has introduced padding to align &lt;code&gt;long&lt;/code&gt;. The values given to &lt;code&gt;a.x&lt;/code&gt; and &lt;code&gt;a.y&lt;/code&gt; are intentionally too large to fit in some architectures just so that in this example you could identify what byte belongs to what.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now the issue is that if you simply give the byte-representation of this struct from one computer to another, for example by simply transmitting over the network, the other computer is not guaranteed to see the same data. Imagine if in the example above, the 64-bit computer sends the representation to the 16-bit microcontroller, the &lt;code&gt;x&lt;/code&gt; value would have the wrong byte order, and &lt;code&gt;y&lt;/code&gt; value would be garbage taken from the padding in the original struct. If the 16-bit microcontroller sends the representation to the 64-bit computer, the &lt;code&gt;x&lt;/code&gt; value would be half garbage, and the &lt;code&gt;y&lt;/code&gt; value would be read outside the actual buffer sent, which is anything that happens to be there, such as your password.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now that you understand the problem, you need to learn how to serialize your data.  If you are interfacing with a system where serialization is already in place, of course you need to follow its rules.  However, if you are designing your system, you are free to do it however you like!  First, it's a good idea to define a fixed size for your data.  For example, in the example above, we could have defined &lt;code&gt;struct A&lt;/code&gt; like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;struct A&#xA;{&#xA;    uint32_t x;&#xA;    uint64_t y;&#xA;};&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Doing this, now you know that &lt;code&gt;x&lt;/code&gt; for example is always going to need 4 bytes to transfer, and you should expect to extract 4 bytes on the other side to reconstruct &lt;code&gt;x&lt;/code&gt;.  Note that, you still can't send the memory representation of this &lt;code&gt;struct&lt;/code&gt; from one computer to another because both the paddings could be different and the byte order.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next, you need to think about in which order you want to send the bytes. Let's say you want to send them in big-endian. You may also need to think about floating point numbers. How are you going to represent them? One possibility is to send them as two numbers: what comes before the &lt;code&gt;.&lt;/code&gt; and what comes after it. How would you handle sign? This all depends on your application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, let's serialize &lt;code&gt;struct A&lt;/code&gt; with the assumption that it is going to be presented in big-endian. The code is very simple, you simply put the bytes in the order you define in a string and send it:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;size_t serialize_struct_A(struct A *data, unsigned char *buf, size_t buf_len)&#xA;{&#xA;    size_t len = 0;&#xA;&#xA;    /* we need 12 bytes for struct A, so buffer should have enough size */&#xA;    if (buf_len &amp;lt; 12)&#xA;        return 0;&#xA;&#xA;    /* you can either be lazy and specify each byte */&#xA;    buf[len++] = data-&amp;gt;x &amp;gt;&amp;gt; 24 &amp;amp; 0xFF;&#xA;    buf[len++] = data-&amp;gt;x &amp;gt;&amp;gt; 16 &amp;amp; 0xFF;&#xA;    buf[len++] = data-&amp;gt;x &amp;gt;&amp;gt; 8 &amp;amp; 0xFF;&#xA;    buf[len++] = data-&amp;gt;x &amp;amp; 0xFF;&#xA;&#xA;    /* or calculate simple formulas to do it in a loop */&#xA;    for (int i = 56; i &amp;gt;= 0; i -= 8)&#xA;        buf[len++] = data-&amp;gt;y &amp;gt;&amp;gt; i &amp;amp; 0xFF;&#xA;&#xA;    /* len should be 12 now! */&#xA;    return len;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Now we know for sure that &lt;code&gt;buf&lt;/code&gt; contains the following regardless of the CPU architecture:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;lowest address                    highest address&#xA;+--+--+--+--+--+--+--+--+--+--+--+--+&#xA;|12|34|56|78|10|20|30|40|50|60|70|80|&#xA;+--+--+--+--+--+--+--+--+--+--+--+--+&#xA; \____ ____/ \__________ __________/&#xA;      V                 V&#xA;      x                 y&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;We could transfer this, e.g., with libusb like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;unsigned char a_serialized[12];&#xA;&#xA;size_t len = serialize_struct_A(&amp;amp;a, a_serialized, sizeof a_serialized);&#xA;if (len == 0)&#xA;    { /* error, my buffer was too small */ }&#xA;&#xA;int ret = libusb_bulk_transfer(dev, endpoint, a_serialized, len, &amp;amp;transferred, timeout);&#xA;if (ret != 0)&#xA;    { /* error */ }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;On the other side, when you receive the buffer, you can deserialize it. Again, the code is simple:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;int deserialize_struct_A(struct A *result, unsigned char *buf, size_t buf_len)&#xA;{&#xA;    size_t cur = 0;&#xA;&#xA;    /* we need 12 bytes for struct A, so we should have received this much */&#xA;    if (buf_len &amp;lt; 12)&#xA;        return -1;&#xA;&#xA;    *result = (struct A){0};&#xA;&#xA;    /* again, either the lazy way */&#xA;    result-&amp;gt;x |= buf[cur++] &amp;lt;&amp;lt; 24;&#xA;    result-&amp;gt;x |= buf[cur++] &amp;lt;&amp;lt; 16;&#xA;    result-&amp;gt;x |= buf[cur++] &amp;lt;&amp;lt; 8;&#xA;    result-&amp;gt;x |= buf[cur++];&#xA;&#xA;    /* or the compact way */&#xA;    for (int i = 56; i &amp;gt;= 0; i -= 8)&#xA;        result-&amp;gt;y |= buf[cur++] &amp;lt;&amp;lt; i;&#xA;&#xA;    return 0;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So far, we dealt with unsigned numbers. How would you handle signed numbers? 2's complement representation is quite ubiquitous, so one could think of sending the signed number as if it were unsigned, relying on the fact that the sender and the receiver both use 2's complement representation.  If you cannot rely on this, there are a variety of things one could do.  One simple way would be to use an extra byte for the sign:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;size_t serialize_int32_t(int32_t data, unsigned char *buf, size_t buf_len)&#xA;{&#xA;    size_t len = 0;&#xA;&#xA;    /* we need 5 bytes for int32_t, so buffer should have enough size */&#xA;    if (buf_len &amp;lt; 5)&#xA;        return 0;&#xA;&#xA;    if (data &amp;lt; 0)&#xA;    {&#xA;        buf[len++] = 1;&#xA;        data = -data;&#xA;    }&#xA;    else&#xA;        buf[len++] = 0;&#xA;&#xA;    buf[len++] = data &amp;gt;&amp;gt; 24 &amp;amp; 0xFF;&#xA;    buf[len++] = data &amp;gt;&amp;gt; 16 &amp;amp; 0xFF;&#xA;    buf[len++] = data &amp;gt;&amp;gt; 8 &amp;amp; 0xFF;&#xA;    buf[len++] = data &amp;amp; 0xFF;&#xA;&#xA;    /* len should be 5 now! */&#xA;    return len;&#xA;}&#xA;&#xA;int deserialize_int32_t(int32_t *result, unsigned char *buf, size_t buf_len)&#xA;{&#xA;    size_t cur = 0;&#xA;    int sign;&#xA;&#xA;    /* we need 5 bytes for int32_t, so we should have received this much */&#xA;    if (buf_len &amp;lt; 5)&#xA;        return -1;&#xA;&#xA;    *result = 0;&#xA;&#xA;    /* again, either the lazy way */&#xA;    sign = buf[cur++];&#xA;    *result |= buf[cur++] &amp;lt;&amp;lt; 24;&#xA;    *result |= buf[cur++] &amp;lt;&amp;lt; 16;&#xA;    *result |= buf[cur++] &amp;lt;&amp;lt; 8;&#xA;    *result |= buf[cur++];&#xA;&#xA;    if (sign)&#xA;        *result = -*result;&#xA;&#xA;    return 0;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;There are a variety of optimizations that are possible.  For example, if you are sure that the architectures on both end are big-endian and therefore the memory layout for integers are identical, you could just transfer the memory representation, for example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; /* serialize */&#xA; *(uint32_t *)(buf + len) = data-&amp;gt;x;&#xA; len += 4;&#xA;&#xA; /* deserialize */&#xA; data-&amp;gt;x = *(uint32_t *)(buf + len);&#xA; len += 4;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Another optimization could be the following.  If you have multiple signed integers that you want to send with the method above, you could use one bit for the sign instead of one byte, then pack all those sign bits together in one or more bytes that are not necessarily placed directly before the number.  Or, if you are sure that a 4-byte number is always between 0x7FFFFFFF and -0x7FFFFFFF, you can use the most significant bit to store the sign with the rest of the bits showing the absolute value of the integer (this is called a sign and value method of representation for signed integers).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line is that you need to be able to lay out your numbers byte by byte and be able to recover them on the other side of the communication. How you do that entirely depends on yourself.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Note: the code snippets above are not tested!&lt;/p&gt;&#xA;" OwnerUserId="158" LastActivityDate="2015-05-23T13:51:15.990" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7336" PostTypeId="2" ParentId="7333" CreationDate="2015-05-23T14:19:38.747" Score="2" Body="&lt;p&gt;I use those RCtimer ESCs and they have always worked great for me, generally thease (and most) ESCs will be looking for 50Hz pwm with a period between 1-2ms, though generally you will not damage them by altering the pwm output. I would recommended cutting the 5v supply on each ESC as they can act funny and even damage themselves  when they are all tied to each other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your battery should be fine, I would recommended being careful when using it in a bench setup to monitor it's voltage never letting it drop below 3.0v/cell under load (i.e. 9v) and never below 3.2v unloaded per cell (i.e. 9.6v)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To troubleshoot I would connect the motors one at a time to a known working ESC then connect the ESCs one at a time to a known working motor to see if they work, and then one at a time connect known working ESC motor pairs to be sure they work, then add the pairs one at a time to see if it stops working at a certain number of ESC/motor connections&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2015-05-23T14:19:38.747" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="7337" PostTypeId="2" ParentId="7295" CreationDate="2015-05-23T17:52:39.100" Score="2" Body="&lt;p&gt;Well.. It was a power issue! I'm using one of the arduino replicas and the 5v pins is only outputting 4.5v instead of 5. The problem was solved by providing an external power source. I don't find it cool to power robots externally but this is the only way in my case.&lt;/p&gt;&#xA;" OwnerUserId="2525" LastActivityDate="2015-05-23T17:52:39.100" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7338" PostTypeId="2" ParentId="5189" CreationDate="2015-05-23T21:53:56.230" Score="1" Body="&lt;p&gt;Arduino or other microcontrollers is not enough for image or video processing. So you can try it with scanners (like LIDAR) or &lt;strong&gt;sensor arrays like this &lt;a href=&quot;https://coolarduino.wordpress.com/2014/08/10/virtual-touch-screen-3d-ultrasonic-radar/&quot; rel=&quot;nofollow&quot;&gt;link&lt;/a&gt;&lt;/strong&gt;. The &lt;a href=&quot;https://coolarduino.wordpress.com/2014/08/10/virtual-touch-screen-3d-ultrasonic-radar/&quot; rel=&quot;nofollow&quot;&gt;link&lt;/a&gt; contains only 4 sensors but you can increase the number of sensor for increase measuring angle( angle of HC SR04 is 15 degree) &lt;/p&gt;&#xA;" OwnerUserId="9504" LastActivityDate="2015-05-23T21:53:56.230" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7339" PostTypeId="1" AcceptedAnswerId="7340" CreationDate="2015-05-24T04:25:54.070" Score="1" ViewCount="458" Body="&lt;p&gt;I'd like to create a camera slider similar to &lt;a href=&quot;http://www.davidhunt.ie/motorised-time-lapse-rail-with-raspberry-pi/2/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this one&lt;/a&gt;.&#xA;&lt;img src=&quot;https://i.stack.imgur.com/9aq9s.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only part I'm not sure on is how to setup the camera drive.  It looks like I can buy a similar &lt;a href=&quot;https://www.servocity.com/html/xl_timing_belt___foot.html#.VWFNmWRVhHx&quot; rel=&quot;nofollow noreferrer&quot;&gt;timing belt here&lt;/a&gt;, but I'm not sure how to set up the servo to drive the slider.  Particularly how to keep the belt in contact with the drive pulley. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My fabrication skills are very limited so I need a simple or out of the box solution.&lt;/p&gt;&#xA;" OwnerUserId="112" LastActivityDate="2015-05-24T19:55:13.087" Title="Driving a non-circular timing belt" Tags="&lt;otherservos&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7340" PostTypeId="2" ParentId="7339" CreationDate="2015-05-24T05:47:42.747" Score="2" Body="&lt;p&gt;As can be seen in the following two photos from pages 1 and 3 of &lt;a href=&quot;http://www.davidhunt.ie/motorised-time-lapse-rail-with-raspberry-pi/2/&quot; rel=&quot;nofollow noreferrer&quot;&gt;David Hunt's article mentioned in question&lt;/a&gt;, the timing belt forms a U-bend as it passes the motor's drive pulley.   Sets of bearings support the back of the belt on each side of the drive pulley.  It looks like the centerline of the drive pulley is in line with the rest of the belt.  A deeper U than is shown probably would be a good idea.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As is clear from descriptions and the circuits shown on &lt;a href=&quot;http://www.davidhunt.ie/motorised-time-lapse-rail-with-raspberry-pi/3/&quot; rel=&quot;nofollow noreferrer&quot;&gt;page 3 of David Hunt's article&lt;/a&gt;, the drive motor is an ordinary DC motor operated open-loop rather than being operated as a servo motor.  For example, the description says “Sending a pulse of 12v for 150ms to the motor drives the dolly about 3mm”.  To move the platform 10 inches, one would pulse the motor 80 times.  If you sent one 150 ms pulse every 45 seconds, the platform would move about 10 inches in an hour.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/FY9DY.jpg&quot; alt=&quot;upper view of bare drive&quot;&gt;&#xA;&lt;img src=&quot;https://i.stack.imgur.com/bfET3.jpg&quot; alt=&quot;lower view of drive pulley&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Edit re “Is there any advantages to using the &quot;DC open loop motor&quot; vs a servo?” :&lt;/em&gt;  Generally, using a plain DC motor or gearmotor will be less expensive than using a servomotor.  Servomotors typically have an encoder built in or attached on (see pictures at &lt;a href=&quot;http://www.tigertek.com/servo-motor-resources/incremental-absolute-encoders.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;tigertek.com&lt;/a&gt; or &lt;a href=&quot;http://www.orientalmotor.com/technology/articles/servo-motor-overview.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;orientalmotor.com&lt;/a&gt;, for example) and typically are driven by servoamplifiers.  (Hobby or RC servos can be controlled without using a separate servoamplifier.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If high-speed or high-accuracy positioning are required, a servo probably would be a better choice than a non-servoed motor.  But otherwise, using a plain motor or gearmotor costs less and leaves you with more latitude for choice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding stepper motors vs servomotors or plain DC motors, (1) stepper motors will cost more per watt of power output, (2) stepper motors generally rotate slower, (3) stepper motors typically need more-complex driving sequences. &lt;/p&gt;&#xA;" OwnerUserId="478" LastEditorUserId="478" LastEditDate="2015-05-24T19:55:13.087" LastActivityDate="2015-05-24T19:55:13.087" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7341" PostTypeId="2" ParentId="7331" CreationDate="2015-05-24T06:39:06.423" Score="1" Body="&lt;p&gt;In your code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;for i = 1:6000&#xA;    if ( z &amp;lt; 2 ) &#xA;        z = z + 0.1;&#xA;        x = 0; &#xA;        y = 0;&#xA;    end&#xA;    if  ( z &amp;gt;= 2 )&#xA;        angle = angle + 0.1;&#xA;        angle = wrapToPi(angle);&#xA;        x = radius * cos(angle);&#xA;        y = radius * sin(angle);&#xA;        z = 2;&#xA;    end&#xA;&#xA;    X(i) = x;&#xA;    Y(i) = y;&#xA;    Z(i) = z;&#xA;&#xA;    fprintf(fileID,'%f \t %f \t %f\n',x, y, z);&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;there is a &lt;em&gt;jump&lt;/em&gt; when the altitude reachs 2. The x coordinates goes in only one single step from the value 0 to the value stored in the variable &lt;em&gt;radius&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please arrange your code and let the generation of a much more soft trajectory in your code, in which you have more interpolated points between the position 0 and the radius. As a general rule, you must not have too much distance between two contiguous points. In the case of a quadrotor the fact that those points too far away are, leads to a very huge &lt;em&gt;pitch&lt;/em&gt; and/or &lt;em&gt;roll&lt;/em&gt; angle (the quadrotor tries to do its best to reach the next point in a very small time, so it accelerates suddenly by setting a very steep angle). This causes the asin function to not work properly, since the arguments are not anymore in the wanted function's domain ($]-1,1[$)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An example could be:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;for i = 1:6000&#xA;    if ( z &amp;lt; 2 ) &#xA;        z = z + 0.1;&#xA;        x = 0; &#xA;        y = 0;&#xA;    end&#xA;    if  ( z &amp;gt;= 2 )&#xA;        angle = angle + 0.1;&#xA;        angle = wrapToPi(angle);&#xA;        x = ( i / 6000 ) * radius * cos(angle);&#xA;        y = ( i / 6000 ) * radius * sin(angle);&#xA;        z = 2;&#xA;    end&#xA;&#xA;    X(i) = x;&#xA;    Y(i) = y;&#xA;    Z(i) = z;&#xA;&#xA;    fprintf(fileID,'%f \t %f \t %f\n',x, y, z);&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;regards&lt;/p&gt;&#xA;" OwnerUserId="7097" LastEditorUserId="7097" LastEditDate="2015-05-24T06:46:01.167" LastActivityDate="2015-05-24T06:46:01.167" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7342" PostTypeId="2" ParentId="2021" CreationDate="2015-05-24T15:48:48.283" Score="1" Body="&lt;p&gt;have a look to my Java Mavlink Library : &lt;a href=&quot;https://code.google.com/p/mavlinkjava/&quot; rel=&quot;nofollow&quot;&gt;https://code.google.com/p/mavlinkjava/&lt;/a&gt; It can be used on Android, Windows, Linux and Java RT JVM from IS2T.&#xA;Guillaume&lt;/p&gt;&#xA;" OwnerUserId="9778" LastActivityDate="2015-05-24T15:48:48.283" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7344" PostTypeId="1" AcceptedAnswerId="7355" CreationDate="2015-05-25T05:56:29.237" Score="1" ViewCount="298" Body="&lt;p&gt;There is too many 2d position estimation with one camera. Is there any 3d position estimation application or technique with one camera? If there is no application or technique why?&lt;/p&gt;&#xA;" OwnerUserId="9504" LastActivityDate="2015-05-26T09:31:14.683" Title="Image based 3d position estimation with one camera" Tags="&lt;localization&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7346" PostTypeId="2" ParentId="6649" CreationDate="2015-05-25T07:27:02.097" Score="0" Body="&lt;p&gt;Do you have, or can you add encoders to the motors? If you do, I would advise to try to use them as a first step. Encoders allow you to control speed of the motors in terms of their actual rotation speed not PWM. If robot still doesn't drive straight, you can try to apply &lt;a href=&quot;http://www-personal.umich.edu/~johannb/Papers/paper60.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;UMBmark&lt;/a&gt; method to correct it. For me it yields very satisfying results, although I have not tried it with tank-link platforms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If encoders are not the option, you can try IMU. Remember, that it is also subject to errors, so filtering its readings will be crucial here. You can get heading either reading magnetometer directly, or by integrating gyro readings. To use both, you should use Kalman Filter - some reading &lt;a href=&quot;https://robotics.stackexchange.com/questions/277/why-do-i-need-a-kalman-filter&quot;&gt;here&lt;/a&gt;, or &lt;a href=&quot;http://www.joansola.eu/JoanSola/eng/course.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, just insert heading calculated by KF to regular PID controller, so that the bigger is the error between desired and actual heading, the bigger is speed difference between left and right wheels. &lt;/p&gt;&#xA;" OwnerUserId="7360" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2015-05-25T07:27:02.097" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7347" PostTypeId="2" ParentId="7344" CreationDate="2015-05-25T10:13:50.660" Score="3" Body="&lt;p&gt;It is possible to use one camera for 3d position estimation but it is significantly more difficult.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depth/distance data must be obtained to generate the 3d representation and several techniques have been developed to this end such as rapidly moving the camera to a known, fixed secondary position to capture a second image for processing or mounting a fixed mirror in the camera view to provide the offset image.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However the reliability and complexity of these methods haven't led to their widespread uptake. Arguably the IR CMOS sensor in the Kinect is not a 'camera' and this system uses a 'point cloud' projection and interpretation method to obtain it's depth data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Overall the simplified two camera approach has historically been the most cost effective and the maths behind the processing algorithms came from sound processing and radar signal interpretation, distance and range finding.&lt;/p&gt;&#xA;" OwnerUserId="7185" LastEditorUserId="7185" LastEditDate="2015-05-25T13:36:17.067" LastActivityDate="2015-05-25T13:36:17.067" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7348" PostTypeId="2" ParentId="7235" CreationDate="2015-05-25T14:05:21.793" Score="4" Body="&lt;p&gt;As extension to this &lt;a href=&quot;https://robotics.stackexchange.com/a/7296/6941&quot;&gt;answer&lt;/a&gt;, I'd like to share with the community a &lt;strong&gt;&lt;a href=&quot;http://www.mathworks.com/matlabcentral/fileexchange/51076-displacement-control-of-a-quadcopter&quot; rel=&quot;nofollow noreferrer&quot;&gt;Simulink model&lt;/a&gt;&lt;/strong&gt; implementing the system described above. It does not represent a solution for the code reported by &lt;a href=&quot;https://robotics.stackexchange.com/users/2155/croco&quot;&gt;CroCo&lt;/a&gt; but it may give a better insight and, as such, it might be helpful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The system is depicted below:&#xA;&lt;img src=&quot;https://i.stack.imgur.com/zyBuq.png&quot; alt=&quot;system&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In red we have the blocks running at $1\,\text{KHz}$, which deal with the &lt;strong&gt;attitude&lt;/strong&gt; control, whereas in green are shown those blocks that allow tracking the &lt;strong&gt;linear displacement&lt;/strong&gt; and run at $100\,\text{Hz}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As side note, since we have to ensure that the &quot;&lt;em&gt;small angles&lt;/em&gt;&quot; assumption remains valid throughout the simulation, the &lt;strong&gt;take-off&lt;/strong&gt; phase (i.e. reaching the desired height $z_d$) needs to be almost complete before commencing the &lt;strong&gt;displacement tracking&lt;/strong&gt; of the $x_d\left(t\right)$ and $y_d\left(t\right)$ time-varying linear coordinates (a circle of radius $5\,\text{m}$ in the model). Further, for the same reason, the desired circular trajectory must start from the quadcopter's initial position $\left(x\left(0\right),y\left(0\right)\right)$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depending on the controllers' gains, we can get quite nice tracking results:&#xA;&lt;img src=&quot;https://i.stack.imgur.com/Nv0Df.png&quot; alt=&quot;results&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first top three diagrams shows the $x$, $y$ and $z$ components (green), respectively, while following the targets (blue). The last plot reports on the roll (blue), pitch (green) and yaw (red). Time is expressed in seconds, displacements are in meters and angles are in degrees.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2015-06-02T13:22:49.083" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7349" PostTypeId="1" CreationDate="2015-05-25T14:23:35.447" Score="1" ViewCount="226" Body="&lt;p&gt;I've already made an Arduino device which detects the trigger event, but now I want it to trigger the recording and storage of video when this event occurs.  If the camera could be wirelessly triggered a few feet away from the Arduino unit, that would be optimal, but I can settle for running wires if need be.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm looking for suggestions because I'm on a limited budget for this project. I want to avoid reinventing the wheel and ordering parts which I can't get to work with an Arduino.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm considering the use of this camera.&#xA;&lt;a href=&quot;https://www.sparkfun.com/products/11418&quot; rel=&quot;nofollow&quot;&gt;https://www.sparkfun.com/products/11418&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is my first Arduino project.  Any help is very welcome.&lt;/p&gt;&#xA;" OwnerUserId="9787" LastActivityDate="2015-09-23T05:45:48.253" Title="Arduino triggers a camera to start recording" Tags="&lt;arduino&gt;&lt;wireless&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2015-09-26T01:30:59.497" ContentLicense="CC BY-SA 3.0" />
  <row Id="7350" PostTypeId="2" ParentId="7344" CreationDate="2015-05-25T15:43:41.947" Score="4" Body="&lt;p&gt;One camera gives you no depth information, so you have to have some information about the scene before you start (a priori).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The most common way to handle this is with structured light, where you project a known pattern and evaluate deviations from the pattern. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-05-25T15:43:41.947" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7351" PostTypeId="2" ParentId="7344" CreationDate="2015-05-25T19:30:43.443" Score="2" Body="&lt;p&gt;There is one really simple solution: take a snapshot of the scene, move to the side a few centimetres and take another snapshot. Alternatively, move forward with the camera pointed to one side. Now you have two images and can process them as though you have two cameras or one stereoscopic pair. The only problem I can see with this method is that any parts of the scene that have moved will cause some issues, but it probably wouldn't be too hard to filter those parts of the scene out.&lt;/p&gt;&#xA;" OwnerUserId="1075" LastActivityDate="2015-05-25T19:30:43.443" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7352" PostTypeId="2" ParentId="7333" CreationDate="2015-05-25T19:56:17.780" Score="1" Body="&lt;p&gt;It doesn't seem like those motors are well matched to your battery. They recommend a 2or3 cell LiPo (7.2V or 11.1V) while you are using a 1 cell LiPo (3.6V). I think you'll find most motors will recommend 2 or 3 cells. With only 1 cell you won't likely get enough lift for a multirotor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also as a side note, your ESCs should be set to have no cut-off when using it on a multirotor. If your ESCs cut a motor off it will result in a crash, guaranteed. Multirotor ESCs usually disable any sort of cut-off (ie. set the cut-off voltage to 0V).&lt;/p&gt;&#xA;" OwnerUserId="1075" LastEditorUserId="1075" LastEditDate="2015-05-25T20:02:01.060" LastActivityDate="2015-05-25T20:02:01.060" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7353" PostTypeId="2" ParentId="6601" CreationDate="2015-05-25T22:09:15.297" Score="2" Body="&lt;p&gt;Have you figured out yet that these two devices use incompatible protocols?:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Pololu Mini Maestro 18-Channel USB Servo Controller &lt;a href=&quot;https://www.pololu.com/product/1354&quot; rel=&quot;nofollow&quot;&gt;https://www.pololu.com/product/1354&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Pololu 8-channel Micro Serial Servo Controller &lt;a href=&quot;https://www.pololu.com/product/207&quot; rel=&quot;nofollow&quot;&gt;https://www.pololu.com/product/207&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I'm guessing that you're using a Pololu Mini Maestro 18-Channel USB Servo Controller, connected to UART1 of a Beaglebone Black,&#xA;following the instructions at&#xA;&lt;a href=&quot;https://learn.adafruit.com/setting-up-io-python-library-on-beaglebone-black/uart&quot; rel=&quot;nofollow&quot;&gt;&quot;Setting up IO Python Library on BeagleBone Black: UART&quot;&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I were you, here are the first few things I'd do to debug the problem of &quot;servo doesn't move&quot;:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;I would print out the pinout and pin labels of the hardware on paper -- see &lt;a href=&quot;https://www.pololu.com/docs/0J40/1.b&quot; rel=&quot;nofollow&quot;&gt;&quot;Mini Maestro Pinout and Components&quot;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Is the ground of the Maestro connected to the ground of the BeagleBone?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;To rule out power interference, does it work any better when I hook it up to a test jig with an independent, overkill power supply for each part?&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;5V, at least 2A, power to the BeagleBone barrel connector&lt;/li&gt;&#xA;&lt;li&gt;5V to 16 V, at least 500 mA, power to the Pololu Maestro (see &lt;a href=&quot;https://www.pololu.com/docs/0J40/7.a&quot; rel=&quot;nofollow&quot;&gt;&quot;Powering the Maestro&quot;&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;li&gt;5V to 16 V, at least 2A, power to the servos (check servo datasheet for details)&lt;/li&gt;&#xA;&lt;li&gt;(In particular, trying to run all 3 using the power from a single laptop USB port is unlikely to work).&lt;/li&gt;&#xA;&lt;li&gt;See &lt;a href=&quot;https://www.pololu.com/docs/0J40/7.a&quot; rel=&quot;nofollow&quot;&gt;&quot;Powering the Maestro&quot;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Check power between VCC and GND on the Maestro board; between VCC and GND on the 3-wire servo cable, and between VCC and GND on the Beaglebone -- ideally check that voltage with an o'scope while the test program is running, but even a multimeter is enough to diagnose some problems.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Are the LEDs blinking the way that the &lt;a href=&quot;https://www.pololu.com/docs/0J40/1.c&quot; rel=&quot;nofollow&quot;&gt;&quot;Indicator LEDs&quot;&lt;/a&gt; section of the manual says they should?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I might consider disconnecting the Beaglebone entirely, and trying to get an Arduino to control the Maestro over the &quot;serial&quot; pins -- see &lt;a href=&quot;https://www.pololu.com/docs/0J40/5.h.5&quot; rel=&quot;nofollow&quot;&gt;&quot;Arduino library&quot;&lt;/a&gt;. That would at least distinguish between a problem in the Beaglebone software vs a problem in the power supply hardware.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Next I would try disconnecting the Beaglebone entirely, and seeing if I could get a servo to turn with the Maestro Control Center running on my Linux laptop (or a Windows laptop or a Mac OSX laptop), as described in &lt;a href=&quot;https://www.pololu.com/docs/0J40/3.b&quot; rel=&quot;nofollow&quot;&gt;&quot;Installing Linux Drivers and Software&quot;&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If I could get a laptop to make the servos turn with USB control, I would use that laptop with USB control to reset the Maestro to the default settings, as described in &lt;a href=&quot;https://www.pololu.com/docs/0J40/3.c&quot; rel=&quot;nofollow&quot;&gt;&quot;Using the Maestro without USB&quot;&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;After getting a servo to move while that servo is connected to a Maestro which is in turn connected to a USB cable to a laptop, and resetting everything to the default settings, I would disconnect the USB cable and re-connect the GND and other pins between the Maestro and the Beaglebone -- see &lt;a href=&quot;https://www.pololu.com/docs/0J40/7.c&quot; rel=&quot;nofollow&quot;&gt;&quot;Connecting to a Microcontroller&quot;&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Then I would try to make a program on the Beaglebone as close as possible to the example code ( &lt;a href=&quot;https://www.pololu.com/docs/0J40/5.h.3&quot; rel=&quot;nofollow&quot;&gt;PIC18F4550&lt;/a&gt;, etc. ):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;import serial&#xA;import struct&#xA;import time&#xA;import Adafruit_BBIO.UART as UART&#xA;# warning: untested code&#xA;def main():&#xA;    drive_Motor_Port = serial.Serial(port = &quot;/dev/ttyO1&quot;, baudrate=9600)&#xA;    drive_Motor_Port.close()&#xA;    drive_Motor_Port.open()&#xA;    while True:&#xA;        # move to position 1000 us (typical minimum for servos)&#xA;        drive_Motor_Port.write(chr(0xAA)) # User guide says we must start with OxAA.&#xA;        drive_Motor_Port.write(chr(0x0c)) # &quot;The Pololu Protocol device number is 12&quot; -- https://www.pololu.com/docs/0J40/3.c&#xA;        drive_Motor_Port.write(chr(0x04)) # command 4: set target&#xA;        drive_Motor_Port.write(chr(0x00)) # channel&#xA;        # target position 0x1f20 = 1000 us&#xA;        drive_Motor_Port.write(chr(0x20))&#xA;        drive_Motor_Port.write(chr(0x1f))&#xA;        time.sleep(2)&#xA;        #&#xA;        # move to position 1500 us (typical neutral for servos)&#xA;        drive_Motor_Port.write(chr(0xAA)) # User guide says we must start with OxAA.&#xA;        drive_Motor_Port.write(chr(0x0c)) # &quot;The Pololu Protocol device number is 12&quot; -- https://www.pololu.com/docs/0J40/3.c&#xA;        drive_Motor_Port.write(chr(0x04)) # command 4: set target&#xA;        drive_Motor_Port.write(chr(0x00)) # channel&#xA;        # target position 0x2e70 = 1000 us&#xA;        drive_Motor_Port.write(chr(0x70))&#xA;        drive_Motor_Port.write(chr(0x2e))&#xA;        time.sleep(2)&#xA;&#xA;main()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="187" LastActivityDate="2015-05-25T22:09:15.297" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7354" PostTypeId="2" ParentId="7349" CreationDate="2015-05-26T03:28:50.103" Score="1" Body="&lt;p&gt;Sticking with SparkFun, here are some fairly east to use, fairly cheep parts that can help accomplish what I believe you are trying to do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It would appear as if triggering the camera is a simple as a digital pulse from the Arduino - next step is to figure out when to make that pulse.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are looking to build a remote control device, might I suggest something as simple as SF's 434MHz transmitter / receiver pair?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.sparkfun.com/products/10534&quot; rel=&quot;nofollow&quot;&gt;Transmitter&lt;/a&gt;&lt;br/&gt;&#xA;&lt;a href=&quot;https://www.sparkfun.com/products/10532&quot; rel=&quot;nofollow&quot;&gt;Receiver&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The transmitter would be your remote control device, which would send a broadcast on button press. The receiver on the camera wold pick up this broadcast, and trigger the camera.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now these modules are serial communication, so you would need an Arduino on the remote to command the transmitter - but you could easily build your own small remote for pretty cheap if you opt to buy just an &lt;a href=&quot;https://www.sparkfun.com/products/9061&quot; rel=&quot;nofollow&quot;&gt;ATMEGA328&lt;/a&gt;, the processor of the Arduino.&lt;/p&gt;&#xA;" OwnerUserId="539" LastActivityDate="2015-05-26T03:28:50.103" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7355" PostTypeId="2" ParentId="7344" CreationDate="2015-05-26T09:31:14.683" Score="1" Body="&lt;p&gt;take an image than take with little zoom out. crop two specific points from first and match (tepmlate)from second. than calculate difference this gives relation between two images than you can compute depth with camera angle.&lt;/p&gt;&#xA;" OwnerUserId="9748" LastActivityDate="2015-05-26T09:31:14.683" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7356" PostTypeId="2" ParentId="7334" CreationDate="2015-05-26T18:20:45.400" Score="2" Body="&lt;p&gt;We built a robot arm similar to the model in the following link.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.3ders.org/articles/20131113-make-your-own-3d-printed-trainable-robotic-arm.html&quot; rel=&quot;nofollow&quot;&gt;http://www.3ders.org/articles/20131113-make-your-own-3d-printed-trainable-robotic-arm.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We used 3D-printer to print all the links so the link mass is small but strong enough. BTW we only used cheap servos but the arm moved not bad so I think the high torque motors are okay. I suggest you start with a 3 DOF arm and if you want any design reference you can search on grabcad.com. There are plenty of great design models. Have fun!&lt;/p&gt;&#xA;" OwnerUserId="9795" LastActivityDate="2015-05-26T18:20:45.400" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7357" PostTypeId="2" ParentId="7226" CreationDate="2015-05-27T11:54:22.093" Score="1" Body="&lt;p&gt;&lt;a href=&quot;http://en.m.wikipedia.org/wiki/Nyquist_frequency&quot; rel=&quot;nofollow&quot;&gt;Nyquist sampling theory&lt;/a&gt; says you are &lt;strong&gt;required&lt;/strong&gt; to sample at least 2x the &lt;em&gt;highest frequency of interest&lt;/em&gt; in order to prevent &lt;a href=&quot;http://en.m.wikipedia.org/wiki/Aliasing&quot; rel=&quot;nofollow&quot;&gt;aliasing&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You want to sweep (chirp) the system, so for inputs to the system you want to provide the samples at a rate greater than or equal to twice the highest frequency of interest. For your sweep the highest frequency is 10Hz, so you have to sample at least 20Hz, but some extra margin is generally desirable, so I would go for 25Hz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding outputs, the sampling rate is a different story. You haven't said what the system is or what you're expecting, so nobody here can comment on an appropriate output sampling rate. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, your input could be a PWM signal to a servo - input needs to be very fast, but the output (servo motion) is generally very slow by comparison. Or you could be sending a sync to a high speed process, where the process output is happening significantly faster than the input. In terms of actuators, two motors of otherwise similar construction but with different numbers of poles will operate at different speeds given the same inputs. Same goes for gearing, etc. etc. You have to identify a frequency of interest in the output to know what to choose as a sampling rate. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-05-27T11:54:22.093" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7358" PostTypeId="1" CreationDate="2015-05-27T20:18:18.983" Score="3" ViewCount="667" Body="&lt;p&gt;Are there good low cost cameras that are frequently used in robotics?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am assuming there are cameras that are good fit for robotics ...&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Works well with OpenCV&lt;/li&gt;&#xA;&lt;li&gt;PC Windows support - USB2/USB3 (GigE, USB3 vision cameras seem pricey)&lt;/li&gt;&#xA;&lt;li&gt;Good image sensing performance&lt;/li&gt;&#xA;&lt;li&gt;Adjustable focus - manual or motorized (fine focus control would be great)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Do IP cameras make good cameras for Robotic vision projects?&lt;/p&gt;&#xA;" OwnerUserId="9311" LastActivityDate="2015-05-28T14:47:27.733" Title="Suggestion for a camera" Tags="&lt;computer-vision&gt;&lt;cameras&gt;" AnswerCount="1" CommentCount="5" ClosedDate="2015-06-07T11:26:33.870" ContentLicense="CC BY-SA 3.0" />
  <row Id="7359" PostTypeId="1" AcceptedAnswerId="7360" CreationDate="2015-05-28T00:07:30.850" Score="1" ViewCount="243" Body="&lt;p&gt;I would like to make a robotic system which takes as input a video feed, runs some GPU-based image recognition on the video, and outputs commands to a set of motors. The goal is to have the motors react to the video with as little latency as possible, hopefully of the order of 10s of ms. Currently I have a GTX 770m on a laptop running Ubuntu 14.04, which is connected to the camera and doing the heavy image processing. This takes frames at 30Hz and will output motor commands at the same frequency.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After a few days of looking around on the web for how to design such a system, I'm still at a loose end whether (a) it is even feasible (b) if so, what the best approach is to interface the laptop with the motors? The image processing must run on Linux, so there is no leeway to change that part of things.&lt;/p&gt;&#xA;" OwnerUserId="3840" LastActivityDate="2015-05-30T10:51:22.983" Title="Interfacing GPU image processing with motor control at 30+Hz" Tags="&lt;control&gt;&lt;real-time&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7360" PostTypeId="2" ParentId="7359" CreationDate="2015-05-28T01:01:37.830" Score="0" Body="&lt;p&gt;So I mainly use a ZED camera with a Nvidia K1, using the provided plugins for OpenCV GPU compute and I get a processing time of around 16-20ms for low res images (e.g. 640x480, or 1024x768) and use this to control a flight controller, using a uart interface, I assume your motors take pwm input, as for controlling the motors I would suggest somthing like the &lt;a href=&quot;https://www.pololu.com/product/1350&quot; rel=&quot;nofollow&quot;&gt;polou maestro&lt;/a&gt; to control them. Can you give more information on your application? why do you have these image processing requirements?&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2015-05-28T01:01:37.830" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7361" PostTypeId="1" CreationDate="2015-05-28T05:26:24.440" Score="2" ViewCount="219" Body="&lt;p&gt;I am learning and I am interested robotics, but also I need to update my web development skills so the question is - is there any idea for good web application that could be connected with robotics - service robots, industrial robots etc. Maybe there already is some open source ongoing web application projects for robotics in which I can make contribution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="809" LastActivityDate="2015-05-30T10:43:06.233" Title="idea for web application in robotics" Tags="&lt;design&gt;&lt;software&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="0" ClosedDate="2015-06-07T11:25:32.550" ContentLicense="CC BY-SA 3.0" />
  <row Id="7362" PostTypeId="2" ParentId="7361" CreationDate="2015-05-28T11:22:39.293" Score="3" Body="&lt;p&gt;web based robotic simulator will be a good project. You can do simulators like &lt;a href=&quot;http://gazebosim.org/&quot; rel=&quot;nofollow&quot;&gt;gazebo&lt;/a&gt; and &lt;a href=&quot;https://www.openrobots.org/wiki/morse/&quot; rel=&quot;nofollow&quot;&gt;morse&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="9504" LastActivityDate="2015-05-28T11:22:39.293" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7363" PostTypeId="1" AcceptedAnswerId="7364" CreationDate="2015-05-28T11:37:49.893" Score="7" ViewCount="2377" Body="&lt;p&gt;What is the difference between Multiple robots and swarm robots? What is the key point? Also what is multi agent systems? Do multi agent systems works only for computer simulations or games? These terms are used similar applications.&lt;/p&gt;&#xA;" OwnerUserId="9748" LastActivityDate="2015-05-28T16:08:46.233" Title="What is the difference between Multiple robots and swarm robots?" Tags="&lt;simulation&gt;&lt;multi-agent&gt;&lt;swarm&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7364" PostTypeId="2" ParentId="7363" CreationDate="2015-05-28T12:26:52.320" Score="9" Body="&lt;p&gt;These concepts are similar in the sense that they require multiple robots that communicate/cooperate. Apart from that, their application, and thus their design and implementation differ.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Swarm Robots&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Swarm robots are designed after ants, bees and such creatures. The idea therefore is not just about multiple robots cooperating, but it's about &lt;em&gt;many&lt;/em&gt; robots, each of which is very simple.  With swarm robots, &lt;strong&gt;you would expect each robot to be too stupid to possibly even know why it's doing something&lt;/strong&gt; (i.e., what is the ultimate goal).  Their simple function however, would result in a complex algorithm when a bunch of robots are doing it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To recap, &lt;strong&gt;with swarm robots, each robot is unable to do anything meaningful&lt;/strong&gt;. The desired behavior emerges only when there are many of them. Usually, the robots all look the same.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Multi-Agent Systems&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;In multi-agent systems, you have multiple agents, which could be either computer programs or robots, &lt;strong&gt;each of which is able to do some meaningful part of a task&lt;/strong&gt;.  It is possible that without having all the agents, the ultimate goal cannot be reached, but parts of it perhaps could still be done.  Think of multi-agent systems as a society of humans. Each of us have a profession and we thrive together, but we are not useless on our own.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To recap, a multi-agent system consists of entities (e.g., robots) that are each specialized for a certain task. They cooperate to achieve the ultimate goal, but individually they are also able to do some things.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Multiple Unrelated Robots&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;You mentioned multiple robots. That's not something that relates to a specific methodology (as opposed to e.g., swarm robots). I'm going to thus talk about multiple unrelated robots.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is not unthinkable to imagine unrelated robots cooperating at some point in time. In such a case, &lt;strong&gt;each robot has its own goal, or is part of its own swarm, or is a member of its own multi-agent system, etc.&lt;/strong&gt; Based on circumstances, the robots may meet and they may interact. One simple case is the robots avoiding crash while each goes on about its business.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this case, there is really no common algorithm, design, methodology or whatever. It's just individual robots who happen to meet.&lt;/p&gt;&#xA;" OwnerUserId="158" LastEditorUserId="158" LastEditDate="2015-05-28T16:08:46.233" LastActivityDate="2015-05-28T16:08:46.233" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="7365" PostTypeId="2" ParentId="7358" CreationDate="2015-05-28T14:47:27.733" Score="1" Body="&lt;p&gt;I personally love the ZED as I do a lot of work with stereo vision and come with opencv modules built for them, but they are quite pricy, I find that most higher end webcams work great with openCV, IP cams are a poor choice in my experience with unpredictable latency (you may not care about this), built in compression which can mess with openCV and they are much more expensive than a comparable webcam.&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2015-05-28T14:47:27.733" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7366" PostTypeId="2" ParentId="7363" CreationDate="2015-05-28T15:17:48.397" Score="2" Body="&lt;p&gt;&lt;em&gt;In addition to @Shahbaz&lt;/em&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to &lt;a href=&quot;http://www.springer.com/us/book/9783540239574&quot; rel=&quot;nofollow&quot;&gt;this book&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Multiple Mobile Robot Systems is main topic and swarm robotics is a sub topic&#xA;both of them motivated from&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;the task complexity is too high for a single robot to accomplish&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;the task is inherently distributed&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;building several resource-bounded robots is much easier than having a single powerful robot&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;multiple robots can solve problems faster using parallelism&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;the introduction of multiple robots increases robustness through redundancy&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Swarm Robots: Historically, some of the earliest work in multirobot&#xA;systems dealt with large numbers of &lt;strong&gt;homogeneous&lt;/strong&gt; robots, called swarms. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;This means multi robot systems can be homogeneous and heteregeneous but swarm systems have to homegeneous.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Multi agent systems is a computerized systems composed of multiple interacting intelligent agents within an environment. But also it can be robot.&lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2015-05-28T15:34:07.210" LastActivityDate="2015-05-28T15:34:07.210" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7368" PostTypeId="2" ParentId="7245" CreationDate="2015-05-28T22:23:13.357" Score="0" Body="&lt;p&gt;Almost all 300 class quadcopters (300mm diagonally from motor centre to motor centre) will be able to accomplish this.  For a quadcopter to lift more you will want bigger props, and lower KV motors.   Bigger props will allow better flight times and more thrust, but will decrease the responsiveness of the craft.  This is because it is harder to spin up and slow down bigger props, this can be fix by using a 3S mutirotor with CP (collective pitch) rotors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a quadcopter that is for aerial photography, it is designed to life a relatively heavy DSLR camera and gimbal.&#xA;&lt;img src=&quot;https://i.stack.imgur.com/mi4vO.jpg&quot; alt=&quot;young woman beside large quadcopter&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a quadcopter that is designed for FPV (First Person View) racing, only designed to hold small cameras.&#xA;&lt;img src=&quot;https://i.stack.imgur.com/3L2Is.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="9553" LastActivityDate="2015-05-28T22:23:13.357" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7369" PostTypeId="2" ParentId="7249" CreationDate="2015-05-28T22:34:50.520" Score="0" Body="&lt;p&gt;Using a smart-phone may have advantages, but anything that can be accomplished using other traditional flight controllers.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Some advantages&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Easier to implement&lt;/li&gt;&#xA;&lt;li&gt;Relatively cheap&lt;/li&gt;&#xA;&lt;li&gt;Relatively user-friendly&lt;/li&gt;&#xA;&lt;li&gt;Usually a built in way to recover the craft in the event of a flyaway (caused by what is doing the flight controls)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Some disadvantages&lt;/strong&gt;   &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Limited to the operating system's abilities and quarks&lt;/li&gt;&#xA;&lt;li&gt;Without rooting the device you may not be able to kill a process that is not responding&lt;/li&gt;&#xA;&lt;li&gt;Not as customizable as using an opens-ource flight controller&lt;/li&gt;&#xA;&lt;li&gt;latency caused by running a full operating system&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Smart-phones are fragile and ca&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://oddcopter.com/flight-controllers/&quot; rel=&quot;nofollow&quot;&gt;Here&lt;/a&gt; is a list of common flight controllers and their capabilities.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="9553" LastActivityDate="2015-05-28T22:34:50.520" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7370" PostTypeId="2" ParentId="7234" CreationDate="2015-05-28T22:41:25.447" Score="2" Body="&lt;p&gt;The short answer is &quot;Yes&quot;, Rocket motors are less energy dense because they are built to expend that energy more quickly, while Lithium Ion Polymer batteries are designed to work longer.  However saying that they are &quot;100 times&quot; cannot always be correct.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reasoning being that not all Lithium Ion Polymer batteries are made equal.   You have different C rates, cell density (affects C AND mAh), and different mAh.   For example the Zippy 3S 20C/40C 3000 mAh battery weighs about the same as the Mutistar 3S 10C/20C 5200mAh.  In general it would be correct to say that LiPo batteries store more energy than model rocket engines, this because of the different run times of the two fuel sources.  A capacitor may discharge more voltage and amperage than a battery, but the battery can generally run longer.&lt;/p&gt;&#xA;" OwnerUserId="9553" LastEditorUserId="9553" LastEditDate="2015-05-29T13:23:46.150" LastActivityDate="2015-05-29T13:23:46.150" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7371" PostTypeId="2" ParentId="6999" CreationDate="2015-05-28T22:49:48.010" Score="0" Body="&lt;p&gt;Any frame design that:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Is not too heavy&lt;/li&gt;&#xA;&lt;li&gt;Does not flex too much&lt;/li&gt;&#xA;&lt;li&gt;keeps the motors the same distance apart when measured diagonally(to use default x or + motor layouts)&lt;/li&gt;&#xA;&lt;li&gt;can fit all required equipment&lt;/li&gt;&#xA;&lt;li&gt;allows the flight controller board to be mounted in the centre&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;There are many other frame designs like the V-tail or dead cat that require you to use different motor mix settings.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also you may want to look into H frame designs, they are relatively simple, and easy to repair.&lt;/p&gt;&#xA;" OwnerUserId="9553" LastActivityDate="2015-05-28T22:49:48.010" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7373" PostTypeId="2" ParentId="7245" CreationDate="2015-05-29T16:33:37.550" Score="1" Body="&lt;p&gt;One.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's my quadcopter lifting a burrito, and lowering it using an onboard winch, in 2013. Built from the cheap commercially available X-aircraft x650v4 kit, except I replaced the ESCs and the flight controller (I think that's an APM 1.0 on there).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A rule of thumb in multirotor design is that you should be able to hover at 50% throttle. This means that a quadcopter which can fly well at 1kg total weight will actually be able to get off the ground at around 2kg, but you'll have lost almost any ability to control attitude or position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The winch is built from a servo and a fishing reel. Happy to provide more details.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://youtu.be/wGwa2DG2Cs0&quot; rel=&quot;nofollow&quot;&gt;https://youtu.be/wGwa2DG2Cs0&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="1473" LastEditorUserId="1473" LastEditDate="2015-05-29T16:39:18.527" LastActivityDate="2015-05-29T16:39:18.527" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7374" PostTypeId="2" ParentId="1974" CreationDate="2015-05-29T17:04:42.613" Score="0" Body="&lt;p&gt;This is a new interpretation of Grey Walter's Tortoise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/William_Grey_Walter&quot; rel=&quot;nofollow&quot;&gt;http://en.wikipedia.org/wiki/William_Grey_Walter&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Try a BEAM robotics approach of a very simple control system that reacts to &#xA;nearing obstacle by steering the opposite direction.  Look at a subsumption / augemented finite state machine (&lt;a href=&quot;http://people.csail.mit.edu/brooks/papers/AIM-1091.pdf&quot; rel=&quot;nofollow&quot;&gt;enter link description here&lt;/a&gt;) to layer the higher goal of driving onto near term obstacle avoidance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a solved problem. But I caution you to consider bumper switches as well in case the reflectant geometry misses nearby objects to give you another layer of safety.&lt;/p&gt;&#xA;" OwnerUserId="6804" LastActivityDate="2015-05-29T17:04:42.613" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7375" PostTypeId="2" ParentId="7244" CreationDate="2015-05-29T21:47:03.003" Score="0" Body="&lt;p&gt;I believe that in the electronic world, the main determinant will be processing power. Your speed (or fps) will be limited by two factors:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;the length of exposure required for a given ISO setting and lighting levels&lt;/li&gt;&#xA;&lt;li&gt;between each exposure, the electronics will need to process the data from the sensor and store it&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The amount of time it takes for those two things to happen at once will dictate your framerate. So, its not really a specification of the sensor itself, but depends on the supporting electronics and software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Technically speaking, the sensor itself doesn't have an ISO setting, rather that depends on the software and it is about &lt;em&gt;SNR&lt;/em&gt; or &lt;em&gt;signal to noise ratio&lt;/em&gt; (see this &lt;a href=&quot;http://cdn.metricmarketing.ca/www.machinevision.ca/files/Support_Documents_and_Downloads/Camera_Sensitivity-v2_4.pdf?this=that&quot; rel=&quot;nofollow&quot;&gt;article&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another thing to consider when filming your high speed scenes is that a CMOS sensor will use a rolling shutter. This can give some strange stroboscopic effects because of the way it only gathers info from one part of the sensor at a time and &lt;em&gt;rolls&lt;/em&gt; through all of the rows (or columns) in the sensor successively.  CCD may be the better choice to minimise that artifact.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's a couple videos that demonstrate the effect of rolling shutters in CMOS cameras:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=pVcuntWruuY&quot; rel=&quot;nofollow&quot;&gt;&lt;em&gt;A strange effect&lt;/em&gt;&lt;/a&gt; &lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=LVwmtwZLG88&quot; rel=&quot;nofollow&quot;&gt;&lt;em&gt;curious stroboscopic effect&lt;/em&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="1075" LastActivityDate="2015-05-29T21:47:03.003" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7376" PostTypeId="2" ParentId="6999" CreationDate="2015-05-29T22:28:39.630" Score="0" Body="&lt;p&gt;Those two designs you posted are identical as far as the placement of propellers goes, so yes, they would both work, and with exactly the same flight electronics. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second ring design though, uses approximately twice as much material for the frame hence it will be heavier, while in practice you'd probably want to minimize the weight of the airframe. There doesn't seem to be a convenient place to mount a central flight computer, but I'm sure a little creativity could lead to a ring design that is practical.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's a slightly different configuration for a quadcopter (called V-tail) that seems to be gaining popularity. It would need slightly different logic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/2sC2f.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="1075" LastEditorUserId="1075" LastEditDate="2015-05-29T22:34:02.757" LastActivityDate="2015-05-29T22:34:02.757" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7378" PostTypeId="1" AcceptedAnswerId="7382" CreationDate="2015-05-30T05:21:43.700" Score="0" ViewCount="617" Body="&lt;p&gt;Are there electric motors, which apply force not in rotational motion, but in longitudinal motion?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They should have electromagnetic design and no gears and worms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Such motors would be great for linear actuators. They could transfer both force and feedback.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the name of such devices?&lt;/p&gt;&#xA;" OwnerUserId="9723" LastActivityDate="2015-05-30T15:22:05.067" Title="Electric piston (longitudinal electric motor)?" Tags="&lt;motor&gt;&lt;actuator&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7379" PostTypeId="2" ParentId="7361" CreationDate="2015-05-30T10:43:06.233" Score="2" Body="&lt;p&gt;There are the awesome &quot;ROS Robot Web Tools&quot; &lt;a href=&quot;http://robotwebtools.org/&quot; rel=&quot;nofollow&quot;&gt;http://robotwebtools.org/&lt;/a&gt; that give your ROS enabled robot a web interface.&#xA;We use it as high-level interface for many of our service robots, as we can then use a tablet computer to control them and don't have to care about the Tablet OS (Apple vs. MS vs. Android...)&lt;/p&gt;&#xA;" OwnerUserId="9208" LastActivityDate="2015-05-30T10:43:06.233" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7380" PostTypeId="2" ParentId="7359" CreationDate="2015-05-30T10:51:22.983" Score="0" Body="&lt;p&gt;Did you have a look into &lt;strong&gt;Orocos&lt;/strong&gt; &lt;a href=&quot;http://www.orocos.org/&quot; rel=&quot;nofollow&quot;&gt;http://www.orocos.org/&lt;/a&gt; ? &#xA;Compared with ROS it has the huge advantage of real time capability.&#xA;That would be my choice to implement complicated real time controllers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my work (&lt;a href=&quot;http://www.gpu-voxels.org&quot; rel=&quot;nofollow&quot;&gt;http://www.gpu-voxels.org&lt;/a&gt;) I am also using a GPU for 3D collision avoidance calculations on our robots, but I am using our own &lt;strong&gt;MCA2&lt;/strong&gt; &lt;a href=&quot;http://www.mca2.org&quot; rel=&quot;nofollow&quot;&gt;http://www.mca2.org&lt;/a&gt; framework for the real time stuff. Our actuators are all controlled via CANOpen interfaces.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;30 Hz should be no problem at all! We run some motor controllers with 100 Hz and more. Andy my GPU (NVidia TITAN) processes 3D pointclouds of multiple Kinect cameras at 30Hz.&#xA;So 2D image processing should be possible, even on a Laptop GPU.&lt;/p&gt;&#xA;" OwnerUserId="9208" LastActivityDate="2015-05-30T10:51:22.983" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7382" PostTypeId="2" ParentId="7378" CreationDate="2015-05-30T15:22:05.067" Score="1" Body="&lt;p&gt;There are &lt;a href=&quot;http://en.m.wikipedia.org/wiki/Solenoid&quot; rel=&quot;nofollow&quot;&gt;solenoids&lt;/a&gt;, which are electromagnetic linear actuators, and there are &lt;a href=&quot;http://en.wikipedia.org/wiki/Linear_variable_differential_transformer&quot; rel=&quot;nofollow&quot;&gt;linear voltage differential transformers LVDTs&lt;/a&gt;, which are electromagnetic linear position sensors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't think you could use one for positioning and sensing because solenoids operate &lt;a href=&quot;http://www.ledex.com/solenoid-applications/ac-vs-dc-solenoids.html&quot; rel=&quot;nofollow&quot;&gt;primarily on DC&lt;/a&gt; while LVDTs operate on AC. Additionally, solenoid positioning is generally poor and they do not output a position but rather a force, like pneumatics or hydraulics. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hydraulics can utilize the fact that their working fluid is essentially incompressible for position control - i.e., proportional control until position is reached then just shut inlet and outlet valves, but &quot;compressible&quot; actuators such as pneumatics and solenoids have a SIGNIFICANTLY more difficult time achieving performance even remotely on par with hydraulics. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Controllers for pneumatic positioning exist, as I'm sure they do for solenoids as well, but solenoids are primarily used for on/off switching. Anything more advanced and you're looking at an expensive position controller. LVDTs are also expensive. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any particular reason a regular geared linear actuator is insufficient? &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-05-30T15:22:05.067" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="7383" PostTypeId="1" AcceptedAnswerId="7393" CreationDate="2015-05-30T21:50:40.870" Score="3" ViewCount="778" Body="&lt;p&gt;I'm working with a 4DOF Parallel-Mechanism arm. I'm interested in writing planners for this arm (PRM or RRT) in the configuration space, but I'm not sure how to identify obstacles/collisions. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When writing planners for mobile robots in a 2d workspace, it was easy to define and visualize the workspace and obstacles in which the planner/robot was operating. This website (&lt;a href=&quot;http://www.cs.unc.edu/~jeffi/c-space/robot.xhtml&quot; rel=&quot;nofollow&quot;&gt;link&lt;/a&gt;) shows a great example of visualizing the workspace and configuration space for a 2DOF arm, but how can I do this for higher dimensions?&lt;/p&gt;&#xA;" OwnerUserId="9817" LastActivityDate="2021-05-05T07:10:45.217" Title="Determine the configuration space for a robotic arm" Tags="&lt;robotic-arm&gt;&lt;motion-planning&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7384" PostTypeId="1" CreationDate="2015-05-30T22:34:07.810" Score="0" ViewCount="40" Body="&lt;p&gt;I'm curious about &lt;a href=&quot;http://www.bbc.com/news/science-environment-32886000&quot; rel=&quot;nofollow&quot;&gt;this alloy&lt;/a&gt; and how they say it can be used as an alternative to a traditional compressor. Can anyone explain how this would work?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My goal is to understand that use case so I can adapt alloys in other robotic projects.  My gut tells me this is perfect for some kinematics, or other mechanisms, but I'm missing some pieces in this puzzle (how would it work?)&lt;/p&gt;&#xA;" OwnerUserId="9818" LastActivityDate="2015-06-01T08:52:34.357" Title="How can a memory alloy be used as an alternative to a compressor found in a refrigerator?" Tags="&lt;kinematics&gt;&lt;mechanism&gt;" AnswerCount="1" CommentCount="0" ClosedDate="2015-06-07T11:24:36.767" ContentLicense="CC BY-SA 3.0" />
  <row Id="7385" PostTypeId="1" AcceptedAnswerId="7390" CreationDate="2015-05-31T00:42:17.830" Score="3" ViewCount="94" Body="&lt;p&gt;&lt;a href=&quot;http://www.123dapp.com/catch&quot; rel=&quot;nofollow&quot;&gt;123D software&lt;/a&gt; can construct a 3D model from photos taken from your phone. It doesn't process the photos in your phone.  Instead, it sends them to the cloud to create 3d model. How can i construct a 3d model like this &lt;strong&gt;(only with one camera)&lt;/strong&gt;? I searched it but i can only find information on laser/procetor scanners (simple and desktop use only). I think 123D uses only IMU sensors and camera &lt;strong&gt;why do they use the cloud&lt;/strong&gt;?  Can a beaglebone or rasperry pi create 3d models like this?&lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="110" LastEditDate="2015-06-04T23:25:16.917" LastActivityDate="2015-06-04T23:25:16.917" Title="3D scanner from Phone Camera" Tags="&lt;computer-vision&gt;&lt;3d-printing&gt;&lt;3d-reconstruction&gt;&lt;3d-model&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7386" PostTypeId="1" AcceptedAnswerId="7402" CreationDate="2015-05-31T12:29:18.387" Score="0" ViewCount="528" Body="&lt;p&gt;I am reading the book &quot;Introduction to Robotics Mechanics &amp;amp; Control&quot;, John J Craig., 3rd Ed., Forward transformation problem Examples 2.2 and 2.4.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ex. 2.2 (Page 29): Frame {B} is rotated relative to frame {A} about X axis by 60 degrees clockwise, translated 20 units along Y axis and 15 units along z axis. Find P in frame {A} where P in frame {b} = [0 8 7]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The book's answer is [0.18.062 3.572].&#xA;But my answer is [0 30.062 11.572].&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ex. 2.4 (Page 33): Vector P1 has to be rotated by 60 degrees clockwise, about X axis and translated 20 units along Y axis, and 15 units along Z axis. If P1 is given by [0 8 7], find P2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Essentially Ex.2.2 and 2.4 are the same problem. However, the Transformation matrix for Ex 2.4, has [0 8 7] as translation vector (The 4th column of T) instead of [0 20 15]. And, the given answer is [0.18.062 3.572].&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not sure if it is just typo, or I am missing some genuine operation. Please let me know your opinion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="658" LastEditorUserId="658" LastEditDate="2015-06-04T15:00:31.537" LastActivityDate="2015-06-04T15:00:31.537" Title="Introduction to Robotics Mechanics &amp; Control, John J Craig., 3rd Ed., Forward transformation problem Examples 2.2 and 2.4" Tags="&lt;forward-kinematics&gt;&lt;books&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7387" PostTypeId="1" CreationDate="2015-05-31T13:47:42.653" Score="2" ViewCount="7370" Body="&lt;p&gt;I'm trying to understand the scan-matching part of &lt;a href=&quot;http://www.sim.informatik.tu-darmstadt.de/publ/download/2011_SSRR_KohlbrecherMeyerStrykKlingauf_Flexible_SLAM_System.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Hector SLAM&lt;/a&gt; (&lt;a href=&quot;http://www.sim.informatik.tu-darmstadt.de/~kohlbrecher/hector_overview/ROS-Workshop%20Darmstadt%202011.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;PPT summary&lt;/a&gt;). It seems a little difficult to understand, in some cases, how is it possible to actually perform the alignment of the scans. &lt;em&gt;Can anyone explain about it?&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my case, I'm working with a simulation. I'm moving my robot in a corridor-like featureless environment (only two walls) and I don't get a map. Nevertheless, if I move in a sinewave motion, I'm able to get a map. Moreover, if I have an additional feature, the algorithm even shows the real path as long as this feature is seen (right part of the image), otherwise it shows a very weird-looking oscillatory path which does not resemble a sinewave at all. Something important to notice is that the width of the map is pretty accurate (real=4m, map's=4.014m), and the length of the movement is also somehow accurate (real=15m, map's= 15.47). I'm using a Hokuyo URG-04LX laser range finder, no odometry, no IMU. I'm running in Ubuntu 14.04 and using ROS Indigo.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/NhCbG.png&quot; alt=&quot;Generated map by algorithm&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I more or less understand how Hector works, but I have no idea about why I'm getting this map and specially trajectory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you.&lt;/p&gt;&#xA;" OwnerUserId="9824" LastActivityDate="2020-10-15T14:29:31.030" Title="Hector SLAM, Matching algorithm" Tags="&lt;localization&gt;&lt;slam&gt;&lt;ros&gt;&lt;mapping&gt;&lt;rangefinder&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7388" PostTypeId="1" AcceptedAnswerId="7405" CreationDate="2015-05-31T14:23:09.897" Score="0" ViewCount="58" Body="&lt;p&gt;This &lt;a href=&quot;http://www-personal.umich.edu/~johannb/Papers/paper64.pdf&quot; rel=&quot;nofollow&quot;&gt;paper&lt;/a&gt; mentioned the fingerprinting/model matching case. But I could not find an image based algorithm. Any suggestion about image based localization&lt;/p&gt;&#xA;" OwnerUserId="9504" LastActivityDate="2015-06-02T15:51:30.423" Title="Fingerprinting/ model matching algorithms for localization" Tags="&lt;mobile-robot&gt;&lt;localization&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7389" PostTypeId="1" CreationDate="2015-05-31T15:36:37.157" Score="0" ViewCount="1517" Body="&lt;p&gt;I wish to build a chess playing robot with robot arm as shown on youtube, can anyone please tell me which robot arm would suit my purpose and whether it can be bought second hand or alternatively anybody willing to sell used chess arm robot? Please help out.&lt;/p&gt;&#xA;" OwnerUserId="9825" LastEditorUserId="7066" LastEditDate="2015-05-31T16:26:45.777" LastActivityDate="2015-06-02T19:49:21.427" Title="ROBOTIC arm for playing chess" Tags="&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="3" ClosedDate="2015-06-07T12:08:44.613" ContentLicense="CC BY-SA 3.0" />
  <row Id="7390" PostTypeId="2" ParentId="7385" CreationDate="2015-05-31T16:25:01.347" Score="2" Body="&lt;p&gt;Creating 3D models with this method is very compute intensive, 123d uses many pictures (at least 20), and examines them for feature points that are common in several pictures and by examining how they change between pictures it can help build up a 3ds point cloud which is then textured using the pictures, this is very resource intensive, and could be done by a beaglebone or raspberry pi, but it would take a very long time. If you wanted to make your own system to 3d scan objects with cameras it is soing to be a lot easier to have an array of them pre calibrated to work in sync to generate models. This is how many professional setups work.&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2015-05-31T16:25:01.347" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7391" PostTypeId="2" ParentId="7387" CreationDate="2015-05-31T17:22:05.337" Score="4" Body="&lt;p&gt;Imagine someone put you in a wheelchair and blindfolded you, then let you reach your arm out and touch a wall. You could tell how far away the wall was, but as long as you were pushed parallel to the wall, how would you know how far you had gone? You can't count steps or see the end of the hall, so you do not have a way to &lt;em&gt;index&lt;/em&gt; your &lt;em&gt;samples&lt;/em&gt; of where the wall is. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a similar way, you have handicapped your robot in the simulation. You state you are using a&lt;a href=&quot;https://www.hokuyo-aut.jp/02sensor/07scanner/urg_04lx.html&quot; rel=&quot;nofollow&quot;&gt;Hokuyo URG 04LX&lt;/a&gt;, and you also state that your hall is 15 meters long. The range on that scanner is 4 meters, so it cannot &quot;see&quot; the end of the hall and cannot use that information to index its scans. You are also not providing any odometry, so it can't guess where to index the scans either. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;SLAM is simultaneous &lt;em&gt;localization&lt;/em&gt; and mapping - if the current &quot;image&quot; (scan) looks just like the previous image, and you provide no odometry, it does not update its position and thus you do not get a map. This is true as long as you move parallel to the wall, which is your problem case. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you advance or retreat from a wall (feature) &lt;strong&gt;within range&lt;/strong&gt;, as you do when you take the sinusoidal path, the images are different from one scan to the next. The algorithm looks for the rotation and translation that yields a &quot;best fit&quot; between those two &lt;strong&gt;different&lt;/strong&gt; images and assumes that the difference between the two was due to motion, updates its estimate of location accordingly, then indexes that scan to the new position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding the path you are shown, I would look for a range issue somewhere, probably in a tangent expression. Always use atan2 instead of atan whenever possible to avoid errors due to quadrant location; (-y)/x and y/(-x) both evaluate to -(y/x) inside an atan expression but those are two totally different angles. :EDIT: See below, but this may also be due to a lack of features. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;RECOMMENDATIONS&lt;/strong&gt;&#xA;Get a scanner that has a range greater than the hall length, OR reduce the hall length, OR start your craft within &quot;sight&quot; of the end of the hall, OR add features such as alcoves/recesses along the hall to give the algorithm a key point with which it can localize and index. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A final note regarding the alcoves: &lt;a href=&quot;https://m.youtube.com/watch?v=j1Q-a5zCmhc&quot; rel=&quot;nofollow&quot;&gt;(In Bruges reference)&lt;/a&gt; they must be spaced closer together than the twice the maximum scan range because the craft is operating in the center of the hall. Distance to wall (squared) + distance to alcove (squared) = max range (squared). You need a new feature to enter the frame before the old feature leaves, so if the max distance to &lt;em&gt;one&lt;/em&gt; alcove is sqrt (max range (squared) - distance to wall (squared)), then the spacing needs to be less than (or equal, if you enjoy pain and borderline cases) double that distance. Finally note that this is assuming your scanner has a 360 degree view and can see the feature behind it until it passes the maximum scanning range. In actuality your scanner has a 240 degree field of view, but I'll let you work that math out on your own. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;:EDIT:&#xA;With a little further reflection, I don't know that a straight, infinitely long wall (which is what you have if both ends are out of range) is sufficient to provide lateral position estimation. This may also help to explain your weird path. As an easy check, try putting it within sight of the end of the hall &lt;em&gt;without&lt;/em&gt; your feature to see if you get the smooth sine you would expect. Then I would add alcoves at the 1x spacing I described above (range^2 - (wall dist)^2) and see if that also fixes it. I would do both of these before hunting through the algorithm for trig out of range errors. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2015-05-31T17:33:40.893" LastActivityDate="2015-05-31T17:33:40.893" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7392" PostTypeId="2" ParentId="7388" CreationDate="2015-05-31T17:29:51.157" Score="1" Body="&lt;p&gt;I'm not sure what you mean by &quot;image based,&quot; but it seems like the term &quot;model matching&quot; is used to describe the notion of using an a-priori map of an environment to localize to. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can build an a-priori map in many ways such as using a lidar, or using detected features from an image. Once you know this global map, your robot can use its sensor data to position itself on the global map by using localization algorithms such as a particle filter or EKF.&lt;/p&gt;&#xA;" OwnerUserId="9817" LastActivityDate="2015-05-31T17:29:51.157" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7393" PostTypeId="2" ParentId="7383" CreationDate="2015-06-01T08:18:22.460" Score="2" Body="&lt;p&gt;This is one of the basic problems in planning robot trajectories:&#xA;The transformation from Configuration-Space to Workspace via direct kinematic is unambiguous, while the inverse way from Workspace to Config-Space is ambivaltent (in all cases where Dim(Config-Space) &gt; Dim(Workspace)).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what almost all planers do (especially the sampling based ones like RRT) is sampling in Config-Space, transforming the sample to Workspace and performing a collision check there. If no collision occurs, add sample to planning-graph.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The same has to be done for longer trajectories in between the samples: Break them down to smaller subtrajectories (&amp;lt; Robot/Endeffector-Size) and do a collision check for each waypoint.&lt;/p&gt;&#xA;" OwnerUserId="9208" LastActivityDate="2015-06-01T08:18:22.460" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7394" PostTypeId="2" ParentId="7384" CreationDate="2015-06-01T08:52:34.357" Score="3" Body="&lt;p&gt;I don't think they're proposing building a compressor for use in refrigeration.  They're proposing a solid-state cooler/heat pump based on the elastocaloric effect:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As the shape memory alloy block is strained, it gets hot.  This heat would be extracted - I guess by blowing air through the device to somewhere outside the refrigerator?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The air flow is then stopped, and the device unloaded and allowed to return to its normal shape.  This causes it to cool.  This part of the cycle will presumably cool the refrigerator casing somehow...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wasn't able to find any physical designs of elastocaloric refrigerators.  However there is a &lt;a href=&quot;http://pmoscon.com/estudos/Efeito%20magnetocalorico.pdf&quot; rel=&quot;nofollow&quot;&gt;book on the magnetocaloric effect,&lt;/a&gt; and chapter 11 shows some basic ideas for how a heat exchanger might work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the way, I think the novelty in the recent research is their material is more reliable - shape memory alloys have been known for a long time, but their recent formulation has a longer life before it begins to break down with repeated stretching and shrinking.&lt;/p&gt;&#xA;" OwnerUserId="9578" LastActivityDate="2015-06-01T08:52:34.357" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7395" PostTypeId="1" AcceptedAnswerId="7396" CreationDate="2015-06-01T10:15:46.587" Score="0" ViewCount="410" Body="&lt;p&gt;I'm relatively new to robotics, and I'm building a project for which I need a simple wireless connection between two circuits such that when the first circuit is switched on, the other circuit gets switched on too. I'm looking to preferably build something like this on my own, but I have no idea about wireless connections. I only know basic wired robotics. I also know C++ programming if that helps. Apologies if such a question has already been asked.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regards,&#xA;Hanit Banga&lt;/p&gt;&#xA;" OwnerUserId="9828" LastActivityDate="2015-06-04T05:30:43.917" Title="Simple wireless connection between two circuits" Tags="&lt;wireless&gt;" AnswerCount="3" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7396" PostTypeId="2" ParentId="7395" CreationDate="2015-06-01T12:02:53.680" Score="2" Body="&lt;p&gt;If the curcuits are placed stationary the most simplistic solution might be using an IR-Led and a reciever. Like the :&lt;br&gt;&#xA;&lt;a href=&quot;http://www.farnell.com/datasheets/1835437.pdf&quot; rel=&quot;nofollow&quot;&gt;http://www.farnell.com/datasheets/1835437.pdf&lt;/a&gt; &lt;br&gt;&#xA;&lt;a href=&quot;http://wwwtest.vishay.com/docs/81007/tsal5100.pdf&quot; rel=&quot;nofollow&quot;&gt;http://wwwtest.vishay.com/docs/81007/tsal5100.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just powerup the Led. The reciever will recognize this light and switches the output.&lt;/p&gt;&#xA;" OwnerUserId="6911" LastActivityDate="2015-06-01T12:02:53.680" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="7397" PostTypeId="1" AcceptedAnswerId="7412" CreationDate="2015-06-01T15:02:23.207" Score="0" ViewCount="1084" Body="&lt;p&gt;I'm looking for some cheap hardware that would offer me results decent enough to continue my experimentation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've been looking into how to obtain hardware for learning about stereo vision and 3D reconstruction, I found two basic ways: - buy 2 cheap webcams and DIY - buy a stereo camera&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For what I understood little variations in distance and inclination can easily compromise the diff map and so the DIY version might end up requiring constant calibrations, however on the other end, so buying &quot;professional&quot; stereo camera range from 500 euro to infinite.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the moment I trying something in between, like the minoru 3d, however the overall performance of the camera looks a bit poor also because it's a 2009 product, however I can't find any more recent product offering a similar solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can you suggest me what would be the best way/product/guide to archive decent results without spending a fortune ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you very much :)&lt;/p&gt;&#xA;" OwnerUserId="9827" LastActivityDate="2015-06-03T13:00:41.903" Title="Selecting hardware: stereo camera for beginners" Tags="&lt;stereo-vision&gt;" AnswerCount="1" CommentCount="0" ClosedDate="2015-06-15T11:24:54.773" ContentLicense="CC BY-SA 3.0" />
  <row Id="7398" PostTypeId="1" CreationDate="2015-06-01T15:20:42.927" Score="0" ViewCount="436" Body="&lt;p&gt;Does anybody know where I can get a matlab toolbox or functions to work with a SICK laser-scanner (Windows OS)? I'm using a SICK-LDRS2110 with ethernet cable, but SOPAS software does not allow me to program recording times and other specific tasks. Any tips are more than welcome! &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="9830" LastActivityDate="2015-06-02T06:13:09.110" Title="Matlab toolbox (Windows) for Sick lasers?" Tags="&lt;laser&gt;&lt;matlab&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7399" PostTypeId="2" ParentId="7398" CreationDate="2015-06-01T15:36:49.847" Score="0" Body="&lt;p&gt;&lt;a href=&quot;http://sicktoolbox.sourceforge.net/&quot; rel=&quot;nofollow&quot;&gt;http://sicktoolbox.sourceforge.net/&lt;/a&gt; but I can't vouch for it; at my company we've coded our own drivers from scratch. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-06-01T15:36:49.847" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7400" PostTypeId="1" CreationDate="2015-06-01T15:52:31.067" Score="1" ViewCount="220" Body="&lt;p&gt;after having been determined my control loops for my quadcopter project, I'm going to determine the motor commands (PWM duty cycle) from the motor forces/torques. I was following the guidelines of &lt;a href=&quot;http://rwbclasses.groups.et.byu.net/lib/exe/fetch.php?media=quadrotor:beardsquadrotornotes.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this document&lt;/a&gt; but when I was trying to do the inverse of the matrix M (page 17) it has determinant equal to 0. The procedure is correct? Anyone can suggest me some other link for doing this conversion? I have searched in the Internet but I haven't found so much about that. Thanks&#xA;The part of the document that I'm referring is the following:&#xA;&lt;img src=&quot;https://i.stack.imgur.com/RsFZb.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="9662" LastActivityDate="2015-06-01T15:52:31.067" Title="Quadcopter force/torques duty cycle conversion" Tags="&lt;control&gt;&lt;quadcopter&gt;&lt;pwm&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7401" PostTypeId="2" ParentId="3200" CreationDate="2015-06-01T15:56:31.900" Score="1" Body="&lt;p&gt;Use the &lt;a href=&quot;http://en.wikipedia.org/wiki/Parallel_axis_theorem&quot; rel=&quot;nofollow&quot;&gt;parallel axis theorem&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\tau=I\alpha \\&#xA;\alpha = \frac{\tau}{I} \\&#xA;I_{new} = I_{from.COM} + mr^2&#xA;$$&#xA;Assuming you want to keep the same acceleration as though you applied the torque at the center of mass, the &lt;em&gt;new&lt;/em&gt; torque you need to apply to create the same angular acceleration from a different location is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\frac{\tau_{COM}}{I_{from.COM}} = \frac{\tau_{new}}{I_{new}}&#xA;$$&#xA;$$&#xA;\tau_{new} = I_{new} \frac{\tau_{COM}}{I_{from.COM}} \\&#xA;\tau_{new} = (I_{from.COM} + mr^2)\frac{\tau_{COM}}{I_{from.COM}}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $\tau_{COM}$ was the torque that had to be applied at the center of mass to get the desired angular acceleration, $I_{from.COM}$ is the moment of inertia through the center of mass, $m$ is the mass of the load, and $r$ is the distance from the center of mass to where you are now rotating the load. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-06-01T15:56:31.900" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7402" PostTypeId="2" ParentId="7386" CreationDate="2015-06-01T18:00:39.427" Score="1" Body="&lt;p&gt;I think I would solve this as I believe you did, where I find a rotation matrix $E$, a translation vector $\overrightarrow {dr}$, and I locate point P in frame B by adding it to the origin of frame B; $\overrightarrow P_{B} = \overrightarrow P + F_B$. Recall that you are &quot;unrotating&quot; &lt;em&gt;from&lt;/em&gt; frame B &lt;em&gt;to&lt;/em&gt; frame A, so you need to transpose the rotation matrix. Assemble the $T$ matrix:&#xA;$$&#xA;E_{A\rightarrow B} = \begin{bmatrix}&#xA;1 &amp;amp; 0 &amp;amp; 0 \\&#xA;0 &amp;amp; cos(-60) &amp;amp; sin(-60) \\&#xA;0 &amp;amp; -sin(-60) &amp;amp; cos(-60)&#xA;\end{bmatrix} \\~\\~\\&#xA;\\&#xA;E_{B\rightarrow A} = E_{A\rightarrow B}^T\\~\\~\\&#xA;\overrightarrow {dr} = \begin{bmatrix}&#xA;0 \\&#xA;20 \\&#xA;15&#xA;\end{bmatrix} \\&#xA;T_{B\rightarrow A}=&#xA;\begin{bmatrix}&#xA;E_{B\rightarrow A} &amp;amp; \overrightarrow {dr} \\&#xA;0 &amp;amp; 1&#xA;\end{bmatrix}&#xA;$$&#xA;Now, multiply $T \overrightarrow {P_B}$ to get $\overrightarrow {P_A}$, which is the same answer you gave in your statement. I believe you did everything correct. I actually drew the problem on a piece of paper to verify the solution. You are also correct that the second problem (2.4) is the same problem, just reworded. Again, try drawing it on a sheet of paper.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-06-01T18:00:39.427" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7404" PostTypeId="2" ParentId="7398" CreationDate="2015-06-02T06:13:09.110" Score="1" Body="&lt;p&gt;I had a look at the protocol specification, which is very well documented and easy to implement. Instead of using the sicktoolbox, I suggest writing your own driver, which meets your recommendations. This gives you more control over the performance, because you can just ignore (for you) useless commands. &lt;/p&gt;&#xA;" OwnerUserId="6911" LastActivityDate="2015-06-02T06:13:09.110" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7405" PostTypeId="2" ParentId="7388" CreationDate="2015-06-02T15:51:30.423" Score="1" Body="&lt;p&gt;For fingerprint matching model, try working with SVM (support vector machines) algorithm, it is a based supervised learning model. For localization purpose you need to match ridges and bifurcation found in fingerprints. &lt;/p&gt;&#xA;" OwnerUserId="9556" LastActivityDate="2015-06-02T15:51:30.423" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7406" PostTypeId="1" CreationDate="2015-06-02T18:33:15.087" Score="1" ViewCount="1805" Body="&lt;p&gt;I just un-boxed and set the &lt;code&gt;Create 2&lt;/code&gt; to charge overnight.&lt;/p&gt;&#xA;&lt;p&gt;How do I program it? Where is the software?&lt;/p&gt;&#xA;" OwnerUserId="9837" LastEditorUserId="19515" LastEditDate="2020-07-27T18:27:37.120" LastActivityDate="2020-07-27T18:27:37.120" Title="How do I Program the Create 2?" Tags="&lt;irobot-create&gt;&lt;programming-languages&gt;" AnswerCount="2" CommentCount="2" ClosedDate="2015-06-15T11:26:27.990" ContentLicense="CC BY-SA 4.0" />
  <row Id="7408" PostTypeId="2" ParentId="7389" CreationDate="2015-06-02T19:49:21.427" Score="1" Body="&lt;p&gt;You can buy one here: &lt;a href=&quot;http://www.robotshop.com/en/robotic-arms.html&quot; rel=&quot;nofollow&quot;&gt;RobotShop&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But an arm can be fun to make!  If you want to build one, there are a lot of sources to read up on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's a general overview &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.societyofrobots.com/robot_arm_tutorial.shtml&quot; rel=&quot;nofollow&quot;&gt;societyofrobots&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 3 general things you need are... &lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) to learn forward kinematics -- this will give you a basis to learn the next step&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) to learn inverse kinematics -- this will give you an understanding of the math used in moving your robotic arm&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3) to decide on a hardward platform -- stick with the big names, something like Arduino or Raspberry Pi.  You'll find tons of code &amp;amp; community resources online.&lt;/p&gt;&#xA;" OwnerUserId="9314" LastActivityDate="2015-06-02T19:49:21.427" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7409" PostTypeId="1" AcceptedAnswerId="7410" CreationDate="2015-06-03T04:22:50.080" Score="1" ViewCount="839" Body="&lt;p&gt;I am doing a line following robot based on opencv. I have my onboard computer(an old pandaboard) running opencv. It will calculate the offset from the required path and communicate it to the arduino via USB. Then it will do PID optimisation on the data, and adjust the speed of the left and right motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To my dismay the communication part is not working, and I've tried hard for a day to fix it with no result. Here is the relavent code running on the pandaboard:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;while(1)&#xA;    {&#xA;&#xA;        r = libusb_bulk_transfer(dev_handle, 131, recieve, 1, &amp;amp;actual, 0);&#xA;        cout&amp;lt;&amp;lt;&quot;r=&quot;&amp;lt;&amp;lt;r&amp;lt;&amp;lt;endl;&#xA;        int a;&#xA;        cin&amp;gt;&amp;gt;a;&#xA;        imgvalue=krish.calc_offset();&#xA;        send[0]=imgvalue&amp;amp;0xff; &#xA;        send[1]=imgvalue&amp;gt;&amp;gt;8;&#xA;&#xA;//make write&#xA;&#xA;        cout&amp;lt;&amp;lt;&quot;Data to send-&amp;gt;&quot;&amp;lt;&amp;lt;imgvalue&amp;lt;&amp;lt;&quot;&amp;lt;-&quot;&amp;lt;&amp;lt;endl; //just to see the data we want to write : abcd&#xA;        cout&amp;lt;&amp;lt;&quot;Writing Data...&quot;&amp;lt;&amp;lt;endl;&#xA;        r = libusb_bulk_transfer(dev_handle, (4 | LIBUSB_ENDPOINT_OUT), send, 2, &amp;amp;actual, 0); //my device's out endpoint was 2, found with trial- the device had 2 endpoints: 2 and 129&#xA;        if(r == 0 &amp;amp;&amp;amp; actual == 2) //we wrote the 4 bytes successfully&#xA;            cout&amp;lt;&amp;lt;&quot;Writing Successful!&quot;&amp;lt;&amp;lt;endl;&#xA;        else&#xA;            cout&amp;lt;&amp;lt;&quot;Write Error&quot;&amp;lt;&amp;lt;endl;&#xA;&#xA;    }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where &lt;code&gt;imgvalue&lt;/code&gt; is the data to be send. This is the code running on the Arduino:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void loop()&#xA;{&#xA;  Serial.write('s');&#xA;  if(Serial.available()&amp;gt;0)&#xA;    Input_tmp = Serial.read();&#xA;  if(Serial.available()&amp;gt;0)&#xA;    Input_tmp = Input_tmp | (Serial.read() &amp;lt;&amp;lt; 8);&#xA;  Input=Input_tmp;&#xA;  myPID.Compute();&#xA;&#xA;// adjust the motor speed&#xA;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;What happens when I run is that it will pause at the libusb read operation as the timeout is zero(infinity). At this point I've tried resetting the arduino, but this doesn't help. So how do I make my program respond to this start byte send my the Arduino? Where did I go wrong?&lt;/p&gt;&#xA;" OwnerUserId="8981" LastActivityDate="2015-06-03T08:09:27.223" Title="Libusb and arduino communication not working" Tags="&lt;arduino&gt;&lt;communication&gt;&lt;usb&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7410" PostTypeId="2" ParentId="7409" CreationDate="2015-06-03T08:09:27.223" Score="2" Body="&lt;p&gt;Did you initialize libusb?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From &lt;a href=&quot;http://libusb.sourceforge.net/api-1.0/group__lib.html#initialize&quot; rel=&quot;nofollow&quot;&gt;the Sourceforge documentation:&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;int libusb_init  (   libusb_context **   context ) &lt;/p&gt;&#xA;&lt;p&gt; Initialize libusb.&lt;/p&gt;&#xA;&lt;p&gt;This function must be called before calling any other libusb function.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Seems like a trivial thing to ask but I didn't see it in your code, but I also don't see anything blatantly wrong with your code.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-06-03T08:09:27.223" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7411" PostTypeId="1" CreationDate="2015-06-03T09:06:54.363" Score="0" ViewCount="862" Body="&lt;p&gt;I want to detect and identify each of the vehicles passing through a gate. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have the live video feed of the gate which I initially thought to process and detect the number plates with the help of OpenCV or any other graphics library freely available. The problem is, the size of number plates may vary very widely, and the language the number plates are written with(Bengali) does not have a good OCR performance at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The next idea was to put a QR code in the windshield of the vehicles. (Yes the vehicles supposed to enter the area are private and enlisted vehicles). But I am not confident that I will be able to detect and identify all the QR codes in real time with 100% accuracy, as the QR codes might get pixelated due to low resolution of video.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So can anyone suggest any other cheap way we can adopt to detect and identify the vehicles? &lt;strong&gt;Can NFC or any other cheap sensors be used&lt;/strong&gt; for this purpose?&lt;/p&gt;&#xA;" OwnerUserId="9842" LastEditorUserId="9842" LastEditDate="2015-06-03T15:23:39.747" LastActivityDate="2015-06-04T05:26:37.833" Title="What is the cheapest way to detect and identify vehicles entering a gate in real time?" Tags="&lt;sensors&gt;&lt;design&gt;&lt;computer-vision&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7412" PostTypeId="2" ParentId="7397" CreationDate="2015-06-03T13:00:41.903" Score="1" Body="&lt;p&gt;I am a huge fan of the &lt;a href=&quot;https://www.stereolabs.com/&quot; rel=&quot;nofollow&quot;&gt;ZED&lt;/a&gt; it is easy to use and comes with pre built modules to use with opencv and some great examples, but at 500$ it might be out of your price range. I have had plenty of success with two cheap webcams, thee best thing to do it mount them on somthing like a metal bar after removing any pivot mechanism, so they will always be aligned.&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2015-06-03T13:00:41.903" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="7413" PostTypeId="2" ParentId="7411" CreationDate="2015-06-03T13:06:51.083" Score="1" Body="&lt;p&gt;I am assuming that it is a narrow gate so all the vehicles come through at around the same point, you could reposition the camera so that it is focused on where the license plate is normally when they come in, but having only done ocr on english I do not know if this will improve detection much, qr codes are much easier to detect, but I would suggest somthing simpler like a 1D qr code (depending on the amount of information to encode) just add some alignment bits to the front and back with data in the middle, you could detect that from further away more easily.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit:&#xA;As you stated you wanted a more robust sensor based approach, I did some digging and &lt;a href=&quot;http://skyrfid.com/RFID_Tag_Read_Ranges.php&quot; rel=&quot;nofollow&quot;&gt;This site&lt;/a&gt; claims wih passive tags you can read out to aroud 40 feet with directional antennas, allowing you to simply put tags on the inside of the windsheild and read them with a directional antenna from above pherphas giving you around 10ft between the antenna and the trucks.&lt;/p&gt;&#xA;" OwnerUserId="7066" LastEditorUserId="7066" LastEditDate="2015-06-03T15:57:07.217" LastActivityDate="2015-06-03T15:57:07.217" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7414" PostTypeId="2" ParentId="7411" CreationDate="2015-06-03T15:06:30.403" Score="0" Body="&lt;p&gt;If you can run OCR okay with your cameras (you cite resolution as problematic for QR code reading), then I would suggest you make bumper stickers. As they are installed on bumpers and not windshields, you can make them (essentially) as large as you need, in whatever character set you need, in whatever contrasting colors you need, and bumpers are all generally the same height and orientation, where windshields can vary a lot more. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-06-03T15:06:30.403" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7415" PostTypeId="1" AcceptedAnswerId="7428" CreationDate="2015-06-03T15:42:08.500" Score="3" ViewCount="638" Body="&lt;p&gt;I'm trying to design two PD controllers to control the roll and pitch angle of my quadcopter and a P controller to control the yaw rate. I give to the system the reference roll, pitch and yaw rate from a smartphone controller (with WiFi).In the case of roll and pitch the feedback for the outer 'P' loop is given by my attitude estimation algorithm, while in the inner 'D' loop there is no reference angle rate, and the feedback is provived by a filtered version of the gyroscope data.&#xA;As far the yaw rate is concerned, is only a P controller, the reference yaw rate is given by the smartphone, and the feedback of the only loop is provived by the smartphone. This is to illustrate the situation. My sampling frequency is 100hz (imposed by the attitude estimation algorithm, that is a Kalman Filter, that I'm using). I have tuned my controller gains with matlab, imposing a rise time of 0.1 seconds and a maximum percent overshoot of 2% with root locus. Matlab is able to found me a solution, but with very large gains (like 8000 for P and 100 for D). I was doing the tuning, using a quadcopter model (for each euler angle) based on the linearized model for quadcopter or instance : $$\ddot \tau_\Phi = I_x\ddot \Phi    -&amp;gt;  G_\Phi(s) = \frac{I_x }{ s^2} $$ only in order to have a 'reasoned' starting point for my gains, and then re-tune it in the reality. (The transfer function above is continous, in my model I have obliviously used the discrete version at 100hz of sampling rate). &#xA;This is to do a premise of my following questions.&#xA;Now, I have to map my controller outputs to duty cycle. Since I'm using a PWM at 25Khz frequency, my period (in the TIM channel configuration) is of 2879.&#xA;I have checked the activation threshold (after which the motor starts move) and the threshold after which it stops increasing its speeds, and the first is 202&#xA;and the second is 2389.&#xA;I was following the very good answer of &lt;a href=&quot;https://robotics.stackexchange.com/questions/2964/quadcopter-pid-output?lq=1&quot;&gt;Quadcopter PID output&lt;/a&gt; but I still have some questions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) As far the throttle mapping is concerned, I have to map it in such a way that the values coming from my smartphone controller (in the interval [0, 100]) are not&#xA;mapped in the whole [202, 2389] interval, but I have to 'reserve' some speed in order to allow the quadcopter to have an angular movement exploiting differences in the 4 motor speeds even with 100% throttle?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) Coming back to the fact that matlab propose me huge gains for my controllers, this leads to the fact that I cannot directly sum the controller output to the duty cycle as stated in the metioned answer (because I will certainly go out of the [202, 2389] bound of my TIM pulse). Doing a proportion will result in altering the gains of the systems, so placing somewhere else the poles of my systems and the procedure done with matlab will became useless, right? So, what I'm doing wrong? I have tried to enforce matlab to bound the gainsm for instance in the [0,100] interval, but in this case it cannot find gains such that my constraints are verified.&#xA;Thank you&lt;/p&gt;&#xA;" OwnerUserId="9662" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2015-06-04T17:06:17.143" Title="Quadcopter PID output and duty cycle conversion" Tags="&lt;control&gt;&lt;quadcopter&gt;&lt;pid&gt;&lt;matlab&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7416" PostTypeId="1" AcceptedAnswerId="7417" CreationDate="2015-06-03T17:43:19.260" Score="-2" ViewCount="87" Body="&lt;p&gt;Currently using Windows 8, what software packages for artificial intelligence programming (robotics branch) are used in today's professional environment as standard. Lots of internet suggestions, but companies seem to keep this a closely guarded secret. And are the internet rumors true? Would switching to Ubuntu offer me more in terms of depth.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Context: Educational field: Computer Science and Artificial Intelligence, current focus (though obviously experience in others) in programming languages stands at c++, C and Python. Looking to build, program and develop a human-like bot (NOT aiming for singularity at this point ;))and am asking this question in order to build my toolbox a little. &lt;/p&gt;&#xA;" OwnerUserId="9848" LastEditorUserId="9848" LastEditDate="2015-06-03T17:56:53.890" LastActivityDate="2015-06-03T19:36:35.357" Title="Artificial Intelligence Software Packages: Professionals, University education is oft' a step behind. What's actually being used?" Tags="&lt;design&gt;&lt;software&gt;&lt;artificial-intelligence&gt;&lt;programming-languages&gt;" AnswerCount="2" CommentCount="2" ClosedDate="2015-06-07T12:08:27.047" ContentLicense="CC BY-SA 3.0" />
  <row Id="7417" PostTypeId="2" ParentId="7416" CreationDate="2015-06-03T19:32:35.333" Score="2" Body="&lt;p&gt;I am not sure which end of the AI work you intended, so this may not apply. If you are working disconnected from hardware one might be better off with straight MATLAB / Octave.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are planning to demonstrate on hardware, the widest robotics control architecture / middleware is ROS which was the DARPA funded Player/Stage / Gazebo. There are many middlewares based on CORBA as the main alternatives. It has interfaces for all your language preferences.  &lt;a href=&quot;http://playerstage.sourceforge.net/&quot; rel=&quot;nofollow&quot;&gt;http://playerstage.sourceforge.net/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ROS has sort of won the OS wars in robotics.  People clung to ACE TAO/ MIRO/ OROCOS / CORBA middlewares until they - mostly - accepted that ORBs are flexible but bloated producing bloated cores. The telling feature of all this collected effort is ROS' widest device driver array for sensors and robot chassis you will find:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://wiki.ros.org/Sensors&quot; rel=&quot;nofollow&quot;&gt;http://wiki.ros.org/Sensors&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It might be better to dual boot that machine to Ubuntu and slowly acclimatize. ROS has native Ubuntu .apts.  I dual-booted my first machine in 2003 and have never looked back. Nor rebooted the Windows partition either... Best of luck!&lt;/p&gt;&#xA;" OwnerUserId="6804" LastActivityDate="2015-06-03T19:32:35.333" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7418" PostTypeId="2" ParentId="7416" CreationDate="2015-06-03T19:36:35.357" Score="0" Body="&lt;p&gt;Most professionals would be researching in particular subfields.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you say:&lt;br&gt;&#xA;Bot, I'll assume robot and not a natural language processing and response system. (You posted in robotics after all.) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Human-Like: &#xA;Looks? Synthetic Skin &lt;br&gt; &#xA;Motion?  mechanical engineering &lt;br&gt; &#xA;Intelligence? Mind? neural networks, planning, machine learning, psychology &lt;br&gt; &#xA;capabilities? data processing &lt;br&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You leave way too many open questions for an intelligent response. &lt;br&gt; &#xA;All of these things are open enough that any tool could lead to an advance, while no particular tool gives you much advantage in all places. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Plus when you go for the singularity, you can program it in Basic, and then it will work its own way forward to reprogram itself fast enough that it wouldn't matter. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope this helps a tiny bit. &lt;/p&gt;&#xA;" OwnerUserId="9091" LastActivityDate="2015-06-03T19:36:35.357" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7419" PostTypeId="2" ParentId="7395" CreationDate="2015-06-03T22:02:23.763" Score="0" Body="&lt;p&gt;First of all do it with IR transmiter and receiver to develop your skills on signal buffering and processing. Than try to do it with fm or am transceiver circuits. Also you can use toy remote control devices 25MHz or 433 MHz. &lt;/p&gt;&#xA;" OwnerUserId="9504" LastActivityDate="2015-06-03T22:02:23.763" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7420" PostTypeId="2" ParentId="7411" CreationDate="2015-06-03T22:14:47.187" Score="1" Body="&lt;p&gt;Different solution, so different answer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're looking for sensor-based, you can do pretty much anything. Passive sensors (RFID tags) are, in my experience, only reliable over very short distances; 1 meter or less. Additionally, RFID tags work best when the reader is located normal to the face of the tag. That is, if you glued the tag to a windshield, a reader on the side of the car is the worst place you could put it. You want the tag &quot;broadside&quot; to the reader to get the best signal strength (again, range is a big issue), which would mean either put the reader 1m in front of the windshield or put the tag on the driver/passenger window. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could do RF, over something like XBEE, or you could do infrared like a TV remote. Anything that's not passive, which again is essentially only RFID, requires power. This means batteries, which could (would) be drained quickly if they are constantly transmitting, or splicing into the vehicle power wiring, which could (would) be costly and time consuming. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What are your requirements? What's your intended range? How many vehicles are you servicing? Do you have a budget? Can you splice in to vehicle wiring? Do you need automation, and if so, what degree of automation?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your question is very open-ended. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;For a sensor-based system, the easiest solution would be a garage door opener or similar.&lt;/strong&gt; This would require a small transmitter in every vehicle, where the driver pushes a button to send a signal to open the gate. You could also just put a keypad at the gate, where the driver has to enter a passcode. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically, any transmitter that could run on batteries should only run intermittently, requiring interaction from the driver. Any transmitter that emits constantly will need vehicle power. I believe that you will find that any passive transmitter is simply not feasible due to the range requirement. Also, RFID readers are &lt;strong&gt;expensive&lt;/strong&gt;, much more so than the garage door openers, but probably less than interfacing with vehicle wiring. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're insistent on a totally passive system, I would look at simply upgrading the security camera. This would provide you the higher resolution you need to do OCR. At that point, see my solution above of bumper stickers if license plate reading is not feasible. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Know that, whatever the system, there will be failures, and you will always need a gate operator on standby to handle the failures (guests, bad transmitter, battery died, dirty sticker, OCR didn't register, etc. etc.)&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-06-03T22:14:47.187" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="7421" PostTypeId="2" ParentId="7411" CreationDate="2015-06-04T05:26:37.833" Score="0" Body="&lt;p&gt;How much work are you looking to put into this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.sparkfun.com/&quot; rel=&quot;nofollow&quot;&gt;sparkfun&lt;/a&gt; offers these lovely transmitters for just \$4/ea and recievers for just \$5 each, paired with an ATTiny you can do just about anything :O&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.sparkfun.com/products/10534&quot; rel=&quot;nofollow&quot;&gt;Transmitter&lt;/a&gt;&lt;br/&gt;&#xA;&lt;a href=&quot;https://www.sparkfun.com/products/10532&quot; rel=&quot;nofollow&quot;&gt;Receiver&lt;/a&gt;&lt;br/&gt;&#xA;&lt;a href=&quot;https://www.sparkfun.com/products/11232&quot; rel=&quot;nofollow&quot;&gt;ATTiny84&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My suggested implementation would be the following:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Near the gate of your complex you would have a receiver paired with an ATTiny, this will be your detector, and you will be getting your data from this node.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In each vehicle, a voltage regulator will step the 12v of the vehicle down to a usable 3.3v, which will power the ATTiny. Once every second or so, power on the transmitter via a transistor, and broadcast a vehicle specific identification for a split second.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This circuit could run at all times (would draw verry little current relatie the the capacity of the vehicle battery), or could be triggered off of the ignition, and will only be broadcasting when the vehicle is running, or maybe even a switch in the cabin - up to you.&lt;/p&gt;&#xA;" OwnerUserId="539" LastActivityDate="2015-06-04T05:26:37.833" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7422" PostTypeId="2" ParentId="7395" CreationDate="2015-06-04T05:30:43.917" Score="0" Body="&lt;p&gt;If you are looking for an implementation that would use a microcontroller, you can opt for RF which allows a much broader range of communication then IR can offer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sparfun offers some transmitters and recievers for use $4/5/ea.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.sparkfun.com/products/10534&quot; rel=&quot;nofollow&quot;&gt;Transmitter&lt;/a&gt;&lt;br/&gt;&#xA;&lt;a href=&quot;https://www.sparkfun.com/products/10532&quot; rel=&quot;nofollow&quot;&gt;Receiver&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="539" LastActivityDate="2015-06-04T05:30:43.917" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7423" PostTypeId="1" AcceptedAnswerId="7448" CreationDate="2015-06-04T07:00:37.823" Score="1" ViewCount="67" Body="&lt;p&gt;I have an application that requires data to be streamed from multiple Bluetooth modules to one host controller. Somewhat like multiple Clients and one Server. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The throughput i am looking at is around 1920-bits per second per module. &#xA;The &lt;a href=&quot;https://www.google.co.in/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;cad=rja&amp;amp;uact=8&amp;amp;ved=0CCwQFjAA&amp;amp;url=http%3A%2F%2Fwww.st.com%2Fweb%2Fen%2Fcatalog%2Fsense_power%2FFM1968%2FCL1976%2FSC1324%2FPF253470&amp;amp;ei=ivZvVbG3DZafugT99oCIBA&amp;amp;usg=AFQjCNE3rd0Y5qAVPf9wHGOxc3klSjLEfg&amp;amp;sig2=kQg3v-7wIdE7NDGiFL688Q&amp;amp;bvm=bv.94911696,d.c2E&quot; rel=&quot;nofollow&quot;&gt;SPBT2632C2A.AT2&lt;/a&gt; module only supports SPP profile in which i can have a single link (One Client One Server). My application needs multiple modules ( Max 5) to send information to one server.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a way to have One Receiving Station and have multiple transmitting module using SPP? (All modules being the SPBT2632C2A), or i need a Different higher end module on the server side which supports multiple SPP Links?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It advisable to look into a module like the BCM2070 and have a driver run system?&lt;/p&gt;&#xA;" OwnerUserId="7049" LastEditorUserId="7049" LastEditDate="2015-06-08T11:41:32.453" LastActivityDate="2015-06-08T11:42:06.850" Title="Many to One Bluetooth Communication Link" Tags="&lt;electronics&gt;" AnswerCount="2" CommentCount="0" ClosedDate="2015-06-15T11:30:49.257" ContentLicense="CC BY-SA 3.0" />
  <row Id="7424" PostTypeId="2" ParentId="7406" CreationDate="2015-06-04T14:03:14.173" Score="1" Body="&lt;p&gt;You can use a Computer, Arduino, Raspberry Pi or other device that can communicate via serial (using a &lt;a href=&quot;http://store.irobot.com/communication-cable-create-2/product.jsp?productId=54235746&amp;amp;cp=3335976&amp;amp;parentPage=family&quot; rel=&quot;nofollow&quot;&gt;Create 2 USB cable&lt;/a&gt; or &lt;a href=&quot;http://www.irobot.com/~/media/MainSite/PDFs/About/STEM/Create/Create_2_Serial_to_USB_Cable_Creation.pdf?la=en&quot; rel=&quot;nofollow&quot;&gt;build your own&lt;/a&gt;) or Bluetooth (if you have a something like the Rootooth or &lt;a href=&quot;http://www.irobot.com/~/media/MainSite/PDFs/About/STEM/Create/Bluetooth_Serial.pdf?la=en&quot; rel=&quot;nofollow&quot;&gt;build your own&lt;/a&gt;) and program that device to connect and interact with the Create 2.&#xA;&lt;a href=&quot;http://www.irobot.com/About-iRobot/STEM/Create-2.aspx&quot; rel=&quot;nofollow&quot;&gt;Please checkout the Create 2 Site at iRobot&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the Create 2 site you will also find the &lt;a href=&quot;http://www.irobot.com/About-iRobot/STEM/Create-2/Projects.aspx&quot; rel=&quot;nofollow&quot;&gt;Getting Started&lt;/a&gt; page that will link you to the Create 2 Open Interface Specification and several example projects. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As Andy mentioned a direct link to the Open Interface Specification is &lt;a href=&quot;http://www.irobot.com/~/media/MainSite/PDFs/About/STEM/Create/iRobot_Roomba_600_Open_Interface_Spec.pdf&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt; as well.&lt;/p&gt;&#xA;" OwnerUserId="4377" LastEditorUserId="110" LastEditDate="2016-01-07T14:38:59.570" LastActivityDate="2016-01-07T14:38:59.570" CommentCount="0" CommunityOwnedDate="2015-06-04T14:03:14.173" ContentLicense="CC BY-SA 3.0" />
  <row Id="7425" PostTypeId="2" ParentId="7406" CreationDate="2015-06-04T14:09:13.037" Score="0" Body="&lt;p&gt;Looking through the links posted by Andy, here are some simple commands I extracted from iRobot's python script:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;if k == 'P':   # Passive&#xA;    self.sendCommandASCII('128')&#xA;&#xA;elif k == 'S': # Safe&#xA;    self.sendCommandASCII('131')&#xA;&#xA;elif k == 'F': # Full&#xA;    self.sendCommandASCII('132')&#xA;&#xA;elif k == 'C': # Clean&#xA;    self.sendCommandASCII('135')&#xA;&#xA;elif k == 'D': # Dock&#xA;    self.sendCommandASCII('143')&#xA;&#xA;elif k == 'SPACE': # Beep&#xA;    self.sendCommandASCII('140 3 1 64 16 141 3')&#xA;&#xA;elif k == 'R': # Reset&#xA;    self.sendCommandASCII('7')&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;They will more then likely have a full command set either provided with the system, or available online - but here are some basic commands.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The connection to the system is made via serial, and it would appear from this script as if ASCII commands are all it takes to get it up and running.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Plug, open a serial terminal, and play.&lt;/p&gt;&#xA;" OwnerUserId="539" LastActivityDate="2015-06-04T14:09:13.037" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7426" PostTypeId="2" ParentId="6495" CreationDate="2015-06-04T14:14:33.387" Score="0" Body="&lt;p&gt;the UART protocol it not really intended for images, each data packet is 11 bits, and can only contain 8 bits of data. This will take a really long time, even for the smallest of images.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am sure there are libraries out these, or you could do it your own.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the side with the jpg file, you should be able to iterate through the memory map of the image, transmitting 8 bits at a time. On the receiving end, you will then need to take and rebuild the raw file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You have not specified an architecture of any kind, so I can not provide further information - but you should really look into compression before you transmit it.&lt;/p&gt;&#xA;" OwnerUserId="539" LastActivityDate="2015-06-04T14:14:33.387" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7427" PostTypeId="2" ParentId="6913" CreationDate="2015-06-04T16:16:53.860" Score="4" Body="&lt;p&gt;Starting with your system and some &lt;a href=&quot;http://www.ijee.ie/articles/Vol18-6/IJEE1332.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;guidelines for block diagram reduction&lt;/a&gt; (PDF):&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Move the pickoff point between G2 and G3 to before G2&lt;/li&gt;&#xA;&lt;li&gt;Combine G2 and G3 into one block (G2G3)&lt;/li&gt;&#xA;&lt;li&gt;Combine G4 with the G2G3 block (G4 + G2G3)&lt;/li&gt;&#xA;&lt;li&gt;Combine G2 and H1 (G2H1)&lt;/li&gt;&#xA;&lt;li&gt;Redraw the rats nest after G1&lt;/li&gt;&#xA;&lt;li&gt;Duplicate the H2 line to give a feedback loop around (G4 + G2G3) and&#xA;a feedback line towards (G2H1)&lt;/li&gt;&#xA;&lt;li&gt;Collapse the (G4 + G2G3) and H2 loop&lt;/li&gt;&#xA;&lt;li&gt;Make room for more work!&lt;/li&gt;&#xA;&lt;li&gt;Move the summing junction located just before G1 to just after G1&lt;/li&gt;&#xA;&lt;li&gt;Move the pickoff point just before the big transfer function to&#xA; just after it (what was the G4 + G2G3 stuff)&lt;/li&gt;&#xA;&lt;li&gt;At this point everything should be easy&lt;/li&gt;&#xA;&lt;li&gt;Collapse summing junctions into summed blocks&lt;/li&gt;&#xA;&lt;li&gt;Collapse feedback loops&lt;/li&gt;&#xA;&lt;li&gt;Collapse feedback loops&lt;/li&gt;&#xA;&lt;li&gt;Collapse feedback loops&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Done! (see the pic below for details) Please check my work; I did everything in paint, but this is the route you should take. Moving summing junctions and pickoff points is key to solving this, as it is in nearly every instance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/4xMoj.png&quot; alt=&quot;Block diagram reduction&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-06-04T16:16:53.860" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7428" PostTypeId="2" ParentId="7415" CreationDate="2015-06-04T17:06:17.143" Score="1" Body="&lt;p&gt;I'm posting this as an answer because it is a bit lengthy for the comments section, and I hope it will point you in the right direction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, you mention an &quot;outer P loop&quot; and an &quot;inner D loop&quot;, which, to me,  would imply that you are performing those two tasks at different rates. This is incorrect for any form of a PID controller (P, PI, PD, etc.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All of your gains, proportional, integral, derivative, should act on the respective error measurement. If you are commanding a speed, proportional error is the difference between command and actual speed. Integral error is the difference between desired and actual position, and derivative error is the difference between reference and actual acceleration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You have the option of either calculation the integral/derivative of your reference speed, the actual speed, and subtracting to get the error, OR you can calculate the integral/derivative of the speed error and use that directly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you have all the error terms, you multiply each by its respective gain and &lt;strong&gt;add all the terms&lt;/strong&gt; to get the control signal. I emphasize add the terms to reinforce that you need all the terms to get the control signal - you shouldn't be calculating one at a faster rate than the other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I believe you are missing is what you had asked about &lt;a href=&quot;https://robotics.stackexchange.com/questions/7400/quadcopter-force-torques-duty-cycle-conversion&quot;&gt;in your other question&lt;/a&gt; - it seems like your Matlab model is missing the transfer function that converts from PWM to speed, and maybe from speed to torque or lift.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would imagine the relationship between PWM and speed is linear - lowest PWM signal gives some minimum speed (y-intercept), up to full speed at 100%. Then, as the paper you linked in your other question suggests, try a constant k1/k2 to get from speed to lift/torque.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://aeroquad.com/attachment.php?attachmentid=10414&amp;amp;d=1421496243&quot; rel=&quot;nofollow noreferrer&quot;&gt;This paper&lt;/a&gt; (PDF) seems to  give the answer you're looking for (on page 8), and &lt;a href=&quot;http://andrew.gibiansky.com/blog/physics/quadcopter-dynamics/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this page&lt;/a&gt; gives a really good derivation of equations of motion. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, back to your specific questions, regarding point 1, you can either operate up to &quot;full throttle&quot; with no modifications, or you can leave a &quot;reserve&quot; (overhead) for maneuvering, or you can have sliding gains to account for a lack of headroom. If you want to rotate, you speed two props up and slow two down. At full throttle, two will slow, but the other two can't go any faster. Maneuvering is cut (for all intents and purposes) in half. You can leave headroom to allow two to speed up, but this restricts your top speed. You could modify gains to (hand waving) slow the two props twice as fast. This makes up for the other two not speeding up at all because you have the same differential. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The choice here is up to you, but because the controller is &quot;watching&quot; craft performance as compared to your commands it shouldn't matter too much. The controller isn't going to slow a pair and speed a pair by a fixed amount, it's going to slow/speed until the desired command inputs have been met. It won't respond quite as quickly as you would expect, though, because...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Point 2 - actuator saturation. This refers to passing a reference that is of such a magnitude that the actuator cannot comply. The output of your controller is the output of your controller. &lt;em&gt;If you have modeled the system well&lt;/em&gt;, then the output should be what you supply as an input to your system. If the actuator saturates, it saturates. This would be something like requesting a speed of 1800rpm from a 1200rpm motor, or a force of 150lb from a 100lb hydraulic cylinder - you are asking the actuator to do something it physically cannot do. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your case the gains may cause the system to saturate - your PWM signal &quot;should be&quot; (per the controller), at 150%, but you can only command 100%. So you truncate to whatever the max is (100%), and send that. When the controller &quot;sees&quot; that the system is responding and approaches the reference command, it will back off on its own. This is the great thing about a controller. The output signal doesn't matter &lt;em&gt;too much&lt;/em&gt; because it's looking for a response as compared to your command, not any kind of absolute. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That is, if you command a yaw rate of 30 deg/second, but you can only accelerate 1 deg/s^2, your controller may saturate your input asking &quot;full throttle&quot;. Once you finally accelerate to the desired yaw rate, the controller will back off &lt;em&gt;on its own&lt;/em&gt; to hold the desired command. Note that the controller will always try to meet the performance goals you specified when choosing the gains; &lt;strong&gt;it is up to you to spec the actuators to meet those performance specs.&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mostly this is to say that, if your gains look like they're too high, you may have either asked for more performance than your craft is capable of delivering or you have not modeled your system correctly. If you're close it will generally work, but if your gains are too far off (your model is too incorrect), then you will wind up with either no response or you will wind up railing the controller, where the controller says, &quot;I'm too slow - Full throttle!&quot; and then a moment later, &quot;I'm too fast, turn it off!&quot;. This is caused by gains that are too high. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can always &lt;a href=&quot;http://sts.bwk.tue.nl/7y500/readers/.%5CInstellingenRegelaars_ExtraStof.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;tune the gains manually to achieve desired performance&lt;/a&gt; (section 4 of this PDF - Zeigler Nichols tuning), but I think you'll find that PID control of a MIMO system is nigh impossible due to coupling between input/output channels. I think you would be happiest with &lt;a href=&quot;http://en.wikipedia.org/wiki/Full_state_feedback&quot; rel=&quot;nofollow noreferrer&quot;&gt;a state feedback controller&lt;/a&gt;, but that's not what you asked about so I'll just post the link and leave it at that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Good luck!&lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2015-06-04T17:06:17.143" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7429" PostTypeId="1" CreationDate="2015-06-05T00:17:47.440" Score="7" ViewCount="2803" Body="&lt;p&gt;I know that is a question that has been asked too many times, but still its not clear to me. I read online that it isn't but some people say that they control their robots under ROS in applications with hard real time constraints. So, because I need some technical arguments (rather than a plain &quot;ros is not real time&quot;) I will be more specific (suppose we have ROS under a RTOS):&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;I read that ROS uses a TCP/IP-based communication for ROS topics and I know that TCP/IP is not reliable. That means I cannot use topics in a real time loop? For instance send a control signal to my system publishing it to a topic, and the system sending me some feedback via a topic?&lt;/li&gt;&#xA;&lt;li&gt;If I have a RTOS (eg Linux+Xenomai) can I build a real time control loop for a robot using ROS, or ROS will be a bottleneck?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Maybe the above are naive or I lack some knowledge, so please enlighten me!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: I define as a hard real time system (eg in 1KHz), the system that can guarantee that we will not miss a thing (if the control loop fails to run every 1ms the system fails).&lt;/p&gt;&#xA;" OwnerUserId="9854" LastEditorUserId="37" LastEditDate="2015-06-12T14:01:09.323" LastActivityDate="2015-06-12T14:01:15.880" Title="Is ROS hard real time safe?" Tags="&lt;ros&gt;&lt;real-time&gt;" AnswerCount="1" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7430" PostTypeId="2" ParentId="7066" CreationDate="2015-06-05T01:08:00.633" Score="0" Body="&lt;p&gt;Besides gravity compensation, some impedance/admittance control can be used to make a robot compliant and regulate the stiffness of the motion. What you actually do is that by using a specific control law you can make the robot to behave as a mass-damper-spring system. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using control theory and measurements from the robots sensors (torque sensors etc) the controller (implemented on a computer) calculates the new torques for the joints and send them to the actuators. These new torques are the result of the control law (a mathematical equation). You can specify a desired value for the inertia (how difficult is to accelerate the robot), the damping coefficient (how difficult is to move the robot with a high velocity) and the spring constant (how &quot;fast&quot; the robot will return to the initial position). If you want just a compliant robot, you may not need the spring constant.&lt;/p&gt;&#xA;" OwnerUserId="9854" LastActivityDate="2015-06-05T01:08:00.633" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7431" PostTypeId="2" ParentId="7165" CreationDate="2015-06-05T01:24:16.467" Score="2" Body="&lt;p&gt;As @acs said, PID control is used for individual joint control.  And you ignore all non-linearities.  And typically this is good enough.  Sure each joint's control isn't completely optimal, but they should be stable.  You can have each joint doing position or velocity control.  Then you can do trajectory control at a higher level.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For whole arm control where you want to take into account non-linearities, you do non-linear control.  &lt;a href=&quot;https://github.com/RobotLocomotion/drake/wiki&quot; rel=&quot;nofollow&quot;&gt;Drake&lt;/a&gt; is one such toolbox that does this.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-06-05T01:24:16.467" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7434" PostTypeId="1" CreationDate="2015-06-05T18:22:31.423" Score="1" ViewCount="133" Body="&lt;p&gt;EDIT: I realised I missed the point of the paper completely (thanks to very-skim reading ;) ). So, this part of it I'm relating to is about how much damping - not how much stiffness - should we display to obtain stability, given a structural stiffness. I changed the question accordingly - what is achievable stiffness of a impedance/admittance controlled robot, given its structural and control stiffnesses? (Stiffness/compliance is, of course, mathematically just one of the terms in total impedance/admittance)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let us consider a haptic device with mechanical and control parts, and mechanical part is not infinitely rigid (compliant). Basically, it would be a robot with impedance or admittance control. I thought perceivable stiffness can be just as simple as serial connection of two stiffnesses - and so the stiffer mechanical structure is, the better it can display control stiffness:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$k = \frac{k_e k_c}{k_e + k_c}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $k_c$ is stiffness control. Still, I cannot find any confirmation to this, although something very similar is stated in Samur's &quot;Performance Metrics for Haptic Interfaces&quot;. I would be very grateful if you could refer me to some sources or just plain prove it wrong or right (:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a paper &lt;a href=&quot;http://web.stanford.edu/class/me327/presentations/6-Shayan-Amin13-WHC-Mechanical.pdf&quot; rel=&quot;nofollow&quot;&gt;(here, p. 728)&lt;/a&gt; I only found stability condition for virtual damping value in relation to virtual stiffness, given structural stiffness.&lt;/p&gt;&#xA;" OwnerUserId="4325" LastEditorUserId="110" LastEditDate="2015-06-30T13:16:19.510" LastActivityDate="2015-06-30T13:16:19.510" Title="What is the achievable stiffness of a impedance/admittance controlled robot (incl. haptic devices), given its structural and control stiffnesses?" Tags="&lt;control&gt;&lt;mechanism&gt;&lt;reference-request&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7435" PostTypeId="2" ParentId="6913" CreationDate="2015-06-05T18:27:05.007" Score="1" Body="&lt;p&gt;From my experience, it is often easier to stop thinking in terms of &quot;block diagrams&quot; and start to think in terms of equations that these block diagrams represent.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I introduce a few new nodes E, A and B:&#xA;&lt;img src=&quot;https://i.stack.imgur.com/3buNG.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now let's write the equations for each of them&#xA;$$&#xA;\begin{align}&#xA;E &amp;amp;= R-C\\&#xA;A &amp;amp;= H_2C+G_1(E+H_1B)\\&#xA;B &amp;amp;= G_2A\\&#xA;C &amp;amp;= G_3B + G_4A\\&#xA;\end{align}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Insert B in A and C gives&#xA;\begin{align}&#xA;E &amp;amp;= R-C\\&#xA;A &amp;amp;= H_2C+G_1(E+H_1G_2A)\\&#xA;C &amp;amp;= (G_3G_2 + G_4)A\\&#xA;\end{align}&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Insert E in A gives&#xA;\begin{align}&#xA;A &amp;amp;= H_2C+G_1(R-C+H_1G_2A) = H_2C+G_1R-G_1C+H_1G_1G_2A \\&#xA;  &amp;amp;= (H_2-G_1)C +G_1R +H_1G_1G_2A  \\&#xA;  &amp;amp;=\frac{(H_2-G_1)C +G_1R}{1-H_1G_1G_2}\\&#xA;C &amp;amp;= (G_3G_2 + G_4)A\\&#xA;\end{align}&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Insert A in C gives&#xA;\begin{align}&#xA;C &amp;amp;= (G_3G_2 + G_4)\frac{(H_2-G_1)C +G_1R}{1-H_1G_1G_2}\\&#xA;(1-H_1G_1G_2)C  &amp;amp;= (G_3G_2 + G_4)(H_2-G_1)C +(G_3G_2 + G_4)G_1R\\&#xA;[(1-H_1G_1G_2)-(G_3G_2 + G_4)(H_2-G_1)]C  &amp;amp;= (G_3G_2 + G_4)G_1R\\&#xA;\end{align}&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And finally&lt;/p&gt;&#xA;&#xA;&lt;p&gt;\begin{align}&#xA;\frac{C}{R} &amp;amp;=\frac{(G_3G_2 + G_4)G_1}{(1-H_1G_1G_2)-(G_3G_2 + G_4)(H_2-G_1)}\\&#xA;&amp;amp;\\&#xA; &amp;amp;= \frac{G_1G_2G_3 + G_1G_4}{1-G_1G_2H_1-G_2G_3H_2 - G_4H_2 + G_1G_2G_3 + G_1G_4}\\&#xA;\end{align}&lt;/p&gt;&#xA;" OwnerUserId="9860" LastActivityDate="2015-06-05T18:27:05.007" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7436" PostTypeId="2" ParentId="7429" CreationDate="2015-06-05T23:43:15.180" Score="5" Body="&lt;p&gt;ROS is not a real-time operating system.  The purpose of ROS was not to be like VXWorx (which is what the Mars Curiosity rover uses).  ROS was developed to be a simple, generic, reusable platform for everyone to contribute to and use.  Developers would be able to add their own abstracted modules, building a rich community of reusable code.  The key here is that ROS is meant to save development time, not to ensure real-time operations.  This addresses your point #6.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Simplest reason ROS is not real-time: the version of Linux it sits on is not real-time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To point 1, the unreliability of TCP/IP is a good point, but in itself, that doesn't mean that a system with TCP/IP cannot be a real-time system.  &quot;Real-time&quot; simply means that 2 guarantees are always made:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) a task is guaranteed to have a completion time - an absolute deadline,&#xA;and&#xA;2) if that deadline cannot be achieved, a warning about this failure will be made.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That should also explain points 2 &amp;amp; 3.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not sure about point 4.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For point 5: Yes, there is a benefit, but for some architectures to be able to accomplish this, we would need a real-time OS slice (also called a base operating layer), and this may be too burdensome for some projects.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope that helps,&#xA;Ryan&lt;/p&gt;&#xA;" OwnerUserId="9314" LastActivityDate="2015-06-05T23:43:15.180" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7438" PostTypeId="1" AcceptedAnswerId="7439" CreationDate="2015-06-06T14:29:31.373" Score="2" ViewCount="496" Body="&lt;p&gt;I'm working on an robot that would be able to navigate through a maze, avoid obstacles and identify some of the objects in it. I have a monochromatic bitmap of the maze, that is supposed to be used in the robot navigation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Up till now, I have converted/read the bitmap image of the maze into a 2D array of bits. However, now I need guidance on how to use that array to plan the path for the robot. I would appreciate if you could share any links as well, because I am new to all this stuff (I am just a 1st year BS electrical engineering student) and would be happy to have a more detailed explanation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you need me to elaborate on anything kindly say so.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would be grateful!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's the image of the maze.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/ahtkQ.png&quot; alt=&quot;Sample Maze Image&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is just a sample image; the robot should be able to work with any maze (image) with similar dimensions. And you are welcome!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you Chuck!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;&#xA;Heres the code for sub2ind in c++. Kindly see if the output is correct:-&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ofstream subtoind;&#xA;subtoind.open(&quot;sub2ind.txt&quot;);&#xA;&#xA;int sub2ind[96][64] = { 0 };&#xA;int ind2subROW[6144] = { 0 };&#xA;int ind2subCOL[6144] = { 0 };&#xA;int linearIndex=0;&#xA;j = 0;&#xA;z = 0;&#xA;&#xA;for (j = 1; j &amp;lt;= 64; j++)&#xA;    {&#xA;        for (z = 1; z &amp;lt;= 96; z++)&#xA;            {&#xA;                    linearIndex = z + (j - 1) * 96;&#xA;                    sub2ind[z-1][j-1] = linearIndex-1;&#xA;                    //ind2subROW[linearIndex-1] = j-1;&#xA;                    //ind2subCOL[linearIndex-1] = z-1;&#xA;            }&#xA;    }&#xA;for (j = 0; j &amp;lt; 96; j++)&#xA;{&#xA;    subtoind &amp;lt;&amp;lt; endl; //correction&#xA;    cout &amp;lt;&amp;lt; endl;&#xA;&#xA;    for (z = 0; z &amp;lt; 64; z++)&#xA;    {&#xA;        subtoind &amp;lt;&amp;lt; sub2ind[j][z] &amp;lt;&amp;lt; &quot; &quot;;&#xA;    }&#xA;}&#xA;subtoind.close();&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Heres the Link to the output file.&#xA;&lt;a href=&quot;https://drive.google.com/file/d/0BwUKS98DxycUSk5Fbnk1dDJnQ00/view?usp=sharing&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://drive.google.com/file/d/0BwUKS98DxycUSk5Fbnk1dDJnQ00/view?usp=sharing&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9429" LastEditorUserId="9429" LastEditDate="2015-06-22T10:35:09.263" LastActivityDate="2015-06-22T10:35:09.263" Title="How to make a directed graph?" Tags="&lt;arduino&gt;&lt;mobile-robot&gt;&lt;localization&gt;&lt;mapping&gt;&lt;planning&gt;" AnswerCount="1" CommentCount="10" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7439" PostTypeId="2" ParentId="7438" CreationDate="2015-06-06T15:25:52.727" Score="1" Body="&lt;p&gt;Use the bits in your array to create a connectivity map, assign distances between points (but it sounds like the map is uniformly sampled), then implement some version of &lt;a href=&quot;http://en.wikipedia.org/wiki/Dijkstra&amp;#39;s_algorithm&quot; rel=&quot;nofollow&quot;&gt;Dykstra's algoritm&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The map you have can be parsed to see which non-wall tiles have neighbors. Use this, with a regular numbering scheme, to establish the connectivity graph. Each location on your map will have a distance associated with each neighbor. Dykstra uses the map and distances to find the shortest path from one point to another. One output is total distance, another output is a list of way points to get from A to B. The way points will be a list of every neighbor along the path, then all you have to do is get the car to move from one point to another. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;:EDIT:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I started this as a comment, but it's too long and this is really more information on the answer, so I put it here. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Matlab has a neat trick where you can &lt;a href=&quot;http://matlabtricks.com/post-23/tutorial-on-matrix-indexing-in-matlab&quot; rel=&quot;nofollow&quot;&gt;access values of a matrix with only one number&lt;/a&gt; (called linear indexing) instead of the usual row/col argument. Your map will be an arbitrary size, like the 64x96 you mention. In it you have a 1 if the craft is allowed there (is a path) and a 0 of the craft is not allowed there (is a wall). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you should be able to display your map matrix, which again is of arbitrary size, and see all of the paths and walls. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now to create to connectivity map (the directed graph, or digraph), you want to cycle through all of the points in your map and see which neighbors are adjacent. Note that the linear indexing I linked to shows that Matlab indexes increasing from the top of col1 to the bottom of col1, then top of col2, etc. Linear indexing is great because it gives each location on your map &lt;em&gt;one number&lt;/em&gt; with which to refer to that position. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's assume your map has N locations, where N is the length x width of your map (N = 64x96 = 6144 in your example). Now your digraph matrix should be NxN, because you're looking for a relationship between any one location on your map and any other location. Let's name your digraph &quot;Digraph&quot; for simplicity. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This setup means that you should be able to call digraph(a,b) and get a value of 1 if $a$ and $b$ are connected and 0 if they are not, where again $a$ and $b$ are linear indices that refer to one location on your arbitrary map. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, for some implementable Matlab code (writing this on the fly on my phone, so please forgive any errors):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Map = load(map.mat);&#xA;nRows = size(Map,1);&#xA;nCols = size(Map,2);&#xA;mapSize = size(Map);&#xA;N = numel(Map);&#xA;Digraph = zeros(N, N);&#xA;&#xA;for i = 1:nRows&#xA;  for j = 1:nCols&#xA;    currentPos = sub2ind(mapSize,i,j);&#xA;    % left neighbor, if it exists&#xA;    if (j-1)&amp;gt; 0&#xA;      destPos = sub2ind (mapSize,i,j-1);&#xA;      Digraph(currentPos,destPos) = Map(currentPos)*Map(destPos);&#xA;    end&#xA;    % right neighbor, if it exists&#xA;    if (j+1)&amp;lt;=nCols&#xA;      destPos = sub2ind (mapSize,i,j+1);&#xA;      Digraph(currentPos,destPos) = Map(currentPos)*Map(destPos);&#xA;    end&#xA;    % top neighbor, if it exists&#xA;    if (i-1)&amp;gt; 0&#xA;      destPos = sub2ind (mapSize,i-1,j);&#xA;      Digraph(currentPos,destPos) = Map(currentPos)*Map(destPos);&#xA;    end&#xA;    % bottom neighbor, if it exists&#xA;    if (i+1)&amp;lt;=nRows&#xA;      destPos = sub2ind (mapSize,i+1,j);&#xA;      Digraph(currentPos,destPos) = Map(currentPos)*Map(destPos);&#xA;    end&#xA;  end&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;A couple things to note here -&#xA;1. This populates the digraph with zeros for every entry of Digraph(a,a). This is a matter of preference, but if you prefer you can set all of those entries to 1 (showing that $a$ is connected to itself) with the command &#xA;Digraph = Digraph + eye(N);&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;&lt;p&gt;If you use 1's and 0's in your map, then Map (currentPos)*Map (destPos) is either 1 if both entries are 1 or 0 if either entry is a 0. That is, it doesn't matter which is the wall, you equally can't move from wall to path or path to wall. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If you just use a regular map you should get a symmetric matrix. The nice thing about a Digraph is that it doesn't &lt;em&gt;need&lt;/em&gt; to be symmetric. That is, you could have wormholes/tunnels/portals/chutes and ladders where one point on the map is connected to some remote point on the map.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Further, these tunnels can be bi-directional (two way), or they can be uni-durectional. That is, Digraph(a,b) could be 1 (path exists) where Digraph(b,a) is zero (path does not exist).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If there are such tunnels, you need to add them by hand after the script above runs. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Just like sub2ind gives you the linear index given conventional subscripts, ind2sub gives you subscripts given the linear index. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Finally, as a note, the Dykstra algorithm should give you a series of way points, but these will all be in linear index form. This is why I point out the ind2sub function above. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Hope this helps. Please feel free to comment if you have any more questions. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;:EDIT EDIT:&lt;/strong&gt;&#xA;Linear indexing is just a way to refer to a matrix location with one value. You can brew your own as follows (again in Matlab form not c++, though they are similar):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;nRows = size(matrixToBeIndexed,1);&#xA;nCols = size(matrixToBeIndexed,2);&#xA;N = numel(matrixToBeIndexed);&#xA;sub2ind = zeros(nRows,nCols);&#xA;ind2subROW = zeros(1,N);&#xA;ind2subCOL = zeros(1,N);&#xA;&#xA;for i = 1:nCols&#xA;  for j = 1:nRows&#xA;    linearIndex = j + (i-1)*nRows;&#xA;    sub2ind(j,i) = linearIndex;&#xA;    ind2subROW(linearIndex) = j;&#xA;    ind2subCOL(linearIndex) = i;&#xA;  end&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In this way you can pass subscripts to sub2ind, now a matrix instead of a function, and get the linear index, and you can pass a linear index to the pair of ind2sub functions to get subscripts. How you want to implement ind2sub is up to you; I would personally use an Nx2 matrix but I wrote it as two separate vectors for clarity. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this helps! &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9918" LastEditDate="2015-06-14T18:58:20.120" LastActivityDate="2015-06-14T18:58:20.120" CommentCount="11" ContentLicense="CC BY-SA 3.0" />
  <row Id="7440" PostTypeId="1" CreationDate="2015-06-06T16:58:18.297" Score="1" ViewCount="325" Body="&lt;p&gt;I'm using the control system toolbox provided by matlab to estimate the gains of my controller: using root locus design I get a graph like this one &lt;img src=&quot;https://i.stack.imgur.com/jaN4D.png&quot; alt=&quot;enter image description here&quot;&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is: what is the x on the x-axis? maybe a pole position at a previous iteration of the optimization procedure that I have run to find a gain value that satisfies my requirements? It shouldn't be the open loop pole position, because my system is formed by two integrators multiplied by a constant (1/inertia). Thanks&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: I add the requested details: I start from the following simulink diagram:&#xA;&lt;img src=&quot;https://i.stack.imgur.com/F3NTm.png&quot; alt=&quot;enter image description here&quot;&gt;&#xA;my trasfer function is $$G_\Theta(s) = \frac{Y(s)}{U(s)} = \frac{\Theta(s)}{\tau_\Theta} =  \frac{1}{I_y s^2}$$ with&#xA;Iy = 0.0054 (another little question, the point in which I'm taking out the torque is correct?)&#xA;and then I select analysis , control design, compensator design. I select Kp and Kd as the gains to be tuned, and I use the root locus for specifying the constraints. Then I click in SISO Design Task, automated tuning, optimize compensator, which automatically tries to find gain values to satisfy my constraints. The white are is the area that satisfies the constraints, and I think that the pink squares are my poles position after having been completed the optimization procedure. This is correct? But in this case, what is the x(pole) shown? Thanks&lt;/p&gt;&#xA;" OwnerUserId="9662" LastEditorUserId="9662" LastEditDate="2015-06-07T09:10:27.030" LastActivityDate="2016-02-02T14:42:55.630" Title="Matlab Control Toolbox root locus" Tags="&lt;control&gt;&lt;matlab&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7442" PostTypeId="2" ParentId="6686" CreationDate="2015-06-06T18:38:19.847" Score="2" Body="&lt;p&gt;The problem was the part we were using. Make sure you use the right transistor. The schedule and clock button still dont produce any output but everything else behaves as it should. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Error = 2n7000 transistor&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Answer = 2n4403&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks to Steve for pointing it out though it doesn't just invert the signal it mutates it into the table I posted in my question.&lt;/p&gt;&#xA;" OwnerUserId="9177" LastActivityDate="2015-06-06T18:38:19.847" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7443" PostTypeId="2" ParentId="7440" CreationDate="2015-06-06T19:01:01.277" Score="1" Body="&lt;p&gt;I can add more detail to this answer later if you can provide your transfer function or block diagram you used to make that plot. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding your question, an X is a pole, so that is what the X on your X-axis is. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Recall that, if you have a plant $G(s)$ ($ G(s)=1/s^2$ in your case), and you have a feedback loop, your transfer function becomes $G(s)/(1 +/- G(s))$, so you do in fact wind up with poles. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you believe you are viewing outdated information on your plot, then be sure to call 'clf;' between plot commands, with a 'figure(N)' command prior to focus plot N if you have multiple plots open. 'clf' clears a figure window. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, as a reminder, double check that what you are plotting is in fact the open loop system if that is that you would like to evaluate. If you are still having trouble, again, post the commands you are using to plot and I'll update this answer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this helps! &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-06-06T19:01:01.277" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7444" PostTypeId="2" ParentId="7423" CreationDate="2015-06-07T07:10:43.817" Score="0" Body="&lt;p&gt;Bluetooth protocol allows 3 bit addressing that means you can connect 8 devices. When i did it with neurosky mindwave head sets to computer data streaming was not enough to get raw data. İ can just get one healty data per second from each headset&lt;/p&gt;&#xA;" OwnerUserId="9504" LastActivityDate="2015-06-07T07:10:43.817" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7445" PostTypeId="1" AcceptedAnswerId="7446" CreationDate="2015-06-07T09:30:42.163" Score="1" ViewCount="501" Body="&lt;p&gt;my question is: in a lot of cases it is possible to find in Internet PD (instead PID) to control the euler angles of quadcopter? Why the integral part is often neglected in this kind of applications? thanks&lt;/p&gt;&#xA;" OwnerUserId="9662" LastActivityDate="2015-06-07T16:44:44.350" Title="Why PD controllers for quadcopter angles control?" Tags="&lt;control&gt;&lt;quadcopter&gt;&lt;pid&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7446" PostTypeId="2" ParentId="7445" CreationDate="2015-06-07T16:44:44.350" Score="1" Body="&lt;p&gt;Because the P term calculates a proportional response to the error, for example if the quad is tilted a little bit then you only correct a little bit o you do not overshoot your target value, the I controller will ramp up the response if it has not lowered fast enough, which in some cases can be good for example if there is wind and the proportional term is not correcting enough, but that too can cause problems with overshooting the error (requiring a negative error for the same time as there was a positive error), the D controller will dampen the P and I controllers as you get closer to the set point by measuring the rate of change of the system and slowing it as it approaches the set point. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using only the P and D controllers can sometimes give better results especially in less demanding environments and can be easier to tune, In my experience this approach works great for multicopters expected to make less aggressive maneuvers where a well tuned PID controller can perform better with very aggressive environments. &lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2015-06-07T16:44:44.350" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7448" PostTypeId="2" ParentId="7423" CreationDate="2015-06-08T11:42:06.850" Score="0" Body="&lt;p&gt;BCM2070 with Microsoft Bluetooth Enumerator!&lt;/p&gt;&#xA;" OwnerUserId="7049" LastActivityDate="2015-06-08T11:42:06.850" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7449" PostTypeId="1" CreationDate="2015-06-08T13:27:05.413" Score="0" ViewCount="184" Body="&lt;p&gt;I've seen that it is possible to use some micro controller to send commands to the Roomba through the SCI but I was more interested in changing the behavior of the roomba operation (e.g: change the priority of the behaviours)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there some IDE for roomba?&lt;/p&gt;&#xA;" OwnerUserId="9875" LastEditorUserId="37" LastEditDate="2018-12-31T10:50:41.883" LastActivityDate="2018-12-31T10:50:41.883" Title="Changing behaviour Roomba 880" Tags="&lt;roomba&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7450" PostTypeId="1" CreationDate="2015-06-08T15:27:37.657" Score="-2" ViewCount="63" Body="&lt;p&gt;Let me know if this should be on Academia instead, but I posted it here to get responses specifically from people active in robotics development.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm currently an undergraduate student completing majors in both mechanical engineering and computer science. I'm still fairly new to the field, but my interest is firmly in electronic and mechanical systems. Next year I can take one of the courses below:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;1. Multivariable Calc.&#xA;2. Linear Algebra&#xA;3. Differential Equations&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I want to take all three and likely will eventually, but for the time being my schedule only allows for one. Therefore, I was wondering if you could explain a little bit about how each is applied to the robotics field and which you believe will be most helpful for me to learn now.Thanks in advance!&lt;/p&gt;&#xA;" OwnerUserId="9137" LastActivityDate="2015-06-08T22:11:18.393" Title="Which math course will be most beneficial?" Tags="&lt;beginner&gt;&lt;theory&gt;" AnswerCount="1" CommentCount="6" ClosedDate="2015-06-15T11:24:32.210" ContentLicense="CC BY-SA 3.0" />
  <row Id="7451" PostTypeId="2" ParentId="7449" CreationDate="2015-06-08T19:17:07.043" Score="1" Body="&lt;p&gt;There is no way to alter behavior priorities or an IDE to alter the software on Roombas. You can use the OI to control and interact with it though using a computer, Arduino, Raspberry Pi, or other serial communication capable device.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See &lt;a href=&quot;https://robotics.stackexchange.com/a/7424/9743&quot;&gt;this answer&lt;/a&gt; for resources on using OI.&lt;/p&gt;&#xA;" OwnerUserId="9743" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2016-03-02T14:56:41.010" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7452" PostTypeId="2" ParentId="7450" CreationDate="2015-06-08T22:11:18.393" Score="1" Body="&lt;p&gt;I went through the Virginia Community College System (VCCS) (not saying which one specifically for myself). In Virginia, if you graduate with &gt;= 3.0 GPA from a Virginia Community College, you are guaranteed admission to any public (Virginia) university. Community colleges here are top notch; I got the most knowledge out of community college courses and grad school courses. Undergraduate classes are pretty terrible. Find a lab at your university that does what you want to do, then work your way to an assistanceship. If you work hard and do good work grad school can be free. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-06-08T22:11:18.393" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7454" PostTypeId="1" CreationDate="2015-06-09T01:16:30.213" Score="0" ViewCount="737" Body="&lt;p&gt;There's an accelerometer in the IMU. The output can then be integrated to estimate the position, at least in theory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But in practice, there's a huge acceleration from gravity, which varies rather randomly across locations. Vibrations etc can be filtered out with low-pass filters, but how do you filter out gravity? Is it simply the case that the vertical vector is ignored when doing any calculations?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My application is, I want to build a quadcopter that could hover in one place even in the presence of (reasonable) winds: the quadcopter ideally would tilt towards random gusts to maintain a certain position. Every single tutorial I could find on the Internet only uses the accelerometer to estimate where down is when stationary, and simply assumes that using the gyroscope to hold the quadcopter level is enough. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also want to use the IMU to estimate altitude if possible, of course as an input to something like a Kalman filter in conjunction with a sonar system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously, for my application GPS is far too slow.&lt;/p&gt;&#xA;" OwnerUserId="9870" LastEditorUserId="9570" LastEditDate="2015-09-13T15:36:13.537" LastActivityDate="2015-12-19T03:01:01.500" Title="How to use an IMU to hover at a fixed location in a quadcopter in the presence of gravity?" Tags="&lt;quadcopter&gt;&lt;imu&gt;" AnswerCount="3" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7456" PostTypeId="1" CreationDate="2015-06-09T09:36:06.313" Score="3" ViewCount="473" Body="&lt;p&gt;Hi I want to implement an human arm robot and a task such as moving a glass between two points  using Robotic Toolbox for Matlab  by Peter Coorke. I'm a student and I'm a newbie in this kind of things so I would find a good reference for solving the inverse kinematics of the human arm and  an algorithm that implements some kind of obstacle avoidance exploiting the redundancy of the manipulator (7dof) using null space motion.  Anyone can suggest me a good reference to follow in this implementation with the toolbox? Thanks&lt;/p&gt;&#xA;" OwnerUserId="9662" LastEditorUserId="9087" LastEditDate="2015-06-14T10:08:09.803" LastActivityDate="2017-09-28T17:59:29.787" Title="Human arm inverse kinematics" Tags="&lt;robotic-arm&gt;&lt;inverse-kinematics&gt;&lt;manipulator&gt;&lt;matlab&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7457" PostTypeId="1" CreationDate="2015-06-09T09:38:23.870" Score="2" ViewCount="106" Body="&lt;p&gt;I couldn't find a sub stackexchange for artificial intelligence, but I think robotics comes close, and so I'm posting here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I recently saw TED talks on &lt;a href=&quot;https://www.ted.com/topics/ai&quot; rel=&quot;nofollow&quot;&gt;AI&lt;/a&gt; and the Google car, with these being the most interesting to me:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.ted.com/talks/hod_lipson_builds_self_aware_robots&quot; rel=&quot;nofollow&quot;&gt;Hod Lipson - Building &quot;self-aware&quot; robots&lt;/a&gt; &lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.ted.com/talks/juan_enriquez_shares_mindboggling_new_science?language=en&quot; rel=&quot;nofollow&quot;&gt;Juan Enriquez - The next species of human&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.ted.com/talks/ray_kurzweil_get_ready_for_hybrid_thinking&quot; rel=&quot;nofollow&quot;&gt;Ray Kurzweil - Get ready for hybrid thinking&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The third one led me to the &lt;a href=&quot;http://en.wikipedia.org/wiki/How_to_Create_a_Mind#Analysis&quot; rel=&quot;nofollow&quot;&gt;'criticism' section&lt;/a&gt; (labeled &lt;code&gt;Analysis&lt;/code&gt; on that wiki article, though it certainly at least partially reads as a criticism section as well) of Kurzweil 'theory' of the brain, namely &lt;a href=&quot;http://en.wikipedia.org/wiki/How_to_Create_a_Mind#Pattern_Recognition_Theory_of_Mind&quot; rel=&quot;nofollow&quot;&gt;&quot;Pattern Recognition Theory of Mind&quot; (PRTM)&lt;/a&gt;.  After some link surfing on the people who have performed analysis of PRTM and their respective academic contributions, I came to learn about &lt;a href=&quot;http://en.wikipedia.org/wiki/Cognitive_architecture&quot; rel=&quot;nofollow&quot;&gt;Cognitive Architecture&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&quot;A cognitive architecture can refer to a theory about the structure of&#xA;  the human mind. One of the main goals of a cognitive architecture is&#xA;  to summarize the various results of cognitive psychology in a&#xA;  comprehensive computer model. However, the results need to be in a&#xA;  formalized form so far that they can be the basis of a computer&#xA;  program. By combining the individual results are so for a&#xA;  comprehensive theory of cognition and the other a commercially usable&#xA;  model arise. Successful cognitive architectures include ACT-R&#xA;  (Adaptive Control of Thought, ACT), SOAR and OpenCog.&quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It appears that there are several interesting architectures, including the 3 mentioned above.  I read a bit about &lt;a href=&quot;http://en.wikipedia.org/wiki/ACT-R&quot; rel=&quot;nofollow&quot;&gt;ACT-R&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Soar_(cognitive_architecture)&quot; rel=&quot;nofollow&quot;&gt;SOAR&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/OpenCog&quot; rel=&quot;nofollow&quot;&gt;OpenCog&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/DUAL_(cognitive_architecture)&quot; rel=&quot;nofollow&quot;&gt;DUAL&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/CHREST&quot; rel=&quot;nofollow&quot;&gt;CHREST&lt;/a&gt;, and &lt;a href=&quot;http://en.wikipedia.org/wiki/CLARION_(cognitive_architecture)&quot; rel=&quot;nofollow&quot;&gt;CLARION&lt;/a&gt;.  The list is not comprehensive.  It also appears that there are two main types of such architectures: &lt;a href=&quot;http://en.wikipedia.org/wiki/Connectionism&quot; rel=&quot;nofollow&quot;&gt;Connectionism&lt;/a&gt; and &lt;a href=&quot;http://ai.eecs.umich.edu/cogarch2/prop/symbolism.html&quot; rel=&quot;nofollow&quot;&gt;Symbolic&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Though I have many questions, my main question is this:&#xA;&lt;strong&gt;What are some quantitative metrics and qualitative properties to measure and compare between the two architecture types?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other questions&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Can all architectures be categorized as one, the other, or some&#xA;combination of the two, or is there a third, fourth, etc? &lt;/li&gt;&#xA;&lt;li&gt;How are two main types alike? How are they different?&lt;/li&gt;&#xA;&lt;li&gt;What are some recommended further readings on this topic. &lt;/li&gt;&#xA;&lt;li&gt;What centres and organizations are leading development in this?&lt;/li&gt;&#xA;&lt;li&gt;What are some of the computer programming languages, related skill-sets, and&#xA;cross-domain knowledge set utilized in R&amp;amp;D and product offerings of&#xA;such systems?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="9883" LastEditorUserId="9883" LastEditDate="2015-06-17T20:00:08.703" LastActivityDate="2015-06-17T20:00:08.703" Title="Cognitive Architectures: how do you perform qualitative and quantitative comparisons?" Tags="&lt;artificial-intelligence&gt;" AnswerCount="0" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7458" PostTypeId="2" ParentId="7454" CreationDate="2015-06-09T15:09:11.173" Score="1" Body="&lt;p&gt;Most flight controllers that I am aware of do not use the IMU for absolute positioning they are only used for attitude estimation and in some cases to try to dampen the effects of external forces (i.e. wind) but it can only be effective at damping these external forces if they are above a certain reasonably detectable level so over the long run you will drift quite a bit but in the short run you can somewhat compensate for the effects of wind. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you need more robust position holding you might be better off using another system in conjunction with the imu like an optical flow sensor and a target dot or good old gps. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is your target application?&lt;/p&gt;&#xA;" OwnerUserId="7066" LastEditorUserId="7066" LastEditDate="2015-12-13T17:08:30.453" LastActivityDate="2015-12-13T17:08:30.453" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7459" PostTypeId="2" ParentId="7449" CreationDate="2015-06-09T16:16:33.623" Score="0" Body="&lt;p&gt;To expand on Jonathan's answer:  While you cannot change code or low-level behavior priorities on the Roomba, the &lt;a href=&quot;http://www.irobot.com/~/media/MainSite/PDFs/About/STEM/Create/iRobot_Roomba_600_Open_Interface_Spec.pdf&quot; rel=&quot;nofollow&quot;&gt;OI Spec&lt;/a&gt; does give you access to some high-level behaviors such as: &quot;Clean&quot;, &quot;Max Clean&quot;, &quot;Spot Clean&quot;, &quot;Dock&quot;, etc.  And it gives you full control of the motors and access to all the sensor data including button presses, schedule, and IR commands received.  So you could write your own &lt;em&gt;new-and-improved&lt;/em&gt; Roomba behaviors if you'd like.&lt;/p&gt;&#xA;" OwnerUserId="110" LastEditorUserId="110" LastEditDate="2016-01-07T14:37:48.637" LastActivityDate="2016-01-07T14:37:48.637" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7460" PostTypeId="1" AcceptedAnswerId="7461" CreationDate="2015-06-09T16:26:21.377" Score="9" ViewCount="43669" Body="&lt;p&gt;I'm looking for an equation (or set of equations) that would allow me to predict (with fair accuracy) how heavy a payload a &lt;a href=&quot;http://en.wikipedia.org/wiki/Quadcopter&quot; rel=&quot;noreferrer&quot;&gt;quadcopter&lt;/a&gt; is capable of lifting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I assume the main variables would be the weight of the copter as well as the size + power of the 4 rotors. What general approach can one use to make such a determination?&lt;/p&gt;&#xA;" OwnerUserId="9888" LastActivityDate="2019-04-14T02:11:06.500" Title="How to calculate quadcopter lift capabilities?" Tags="&lt;quadcopter&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="7461" PostTypeId="2" ParentId="7460" CreationDate="2015-06-09T17:24:52.967" Score="8" Body="&lt;p&gt;Similar answer to this post:&#xA;&lt;a href=&quot;https://robotics.stackexchange.com/questions/4463/choosing-motor-for-a-tricopter&quot;&gt;Choosing motor for a tricopter&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This depends on what you want to do with your copter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hovering: 100-150 Watt/kg &lt;br&gt;&#xA;ScaleFlight: 200-300 Watt/kg &lt;br&gt;&#xA;Some chilling acrobatic flight: 350-400 Watt/kg&lt;br&gt;&#xA;3D acrobatics 500+ Watt/kg&lt;br&gt;&#xA;Hardcore 3D 1000 Watt/kg&lt;br&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just take your motors and your flight style and you got some values for the max weight of your copter&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also have a source for this but i know only a German one: &lt;a href=&quot;http://www.heli-planet.de/index.php?section=auslegung_von_e_motoren&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.heli-planet.de/index.php?section=auslegung_von_e_motoren&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This values are pretty accurate. There are mathmatical ways to calculate the lift of your quadrotor but they are a very theoretical approach. You have to think about the enviorment, the wind, air pressure, reaction speed, controlability.&lt;/p&gt;&#xA;" OwnerUserId="6911" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2015-06-09T18:00:41.117" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="7462" PostTypeId="1" AcceptedAnswerId="7464" CreationDate="2015-06-09T19:47:38.030" Score="4" ViewCount="327" Body="&lt;p&gt;I am interested in building a &lt;a href=&quot;http://en.wikipedia.org/wiki/Quadcopter&quot; rel=&quot;nofollow&quot;&gt;quadcopter&lt;/a&gt; from scratch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because I like to err on the side of caution, I'm considering adding &quot;safety cages&quot; around each propeller/rotor, to hopefully prevent (at least minimize) the chance of the spinning rotor blades coming into contact with someone. Without knowing much about the physics behind how &quot;lift&quot; works, I would have to imagine that cages present two main problems for rotors:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;They add weight to the copter making it harder to lift the same payload; and&lt;/li&gt;&#xA;&lt;li&gt;They're sheer presence/surface area makes it harder for the spinning rotor to generate lift and push down away from the ground&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The former problem should be obvious and self-evident. For the latter problem, what I mean by &quot;surface area&quot; is that I &lt;em&gt;imagine&lt;/em&gt; that the more caging around a spinning rotor, the more difficult it will be to lift effectively. For instance, a spinning rotor might have the ability to generate enough power to lift, say, 2kg. But if we were to construct an entire &lt;em&gt;box&lt;/em&gt; (not cage) around the entire rotors, with 6 sides and no openings, I would imagine its lift capability would drop to 0kg.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So obviously, what I'm interested in is a cage design that provides adequate safety but doesn't &quot;box in&quot; the rotor so much that it causes the rotor to be ineffective or incapable of providing lift. So I'm looking for that optimal tradeoff of safety (boxing/caging around the spinning rotor) and lift performance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would imagine calculating and designing this is a pretty huge undertaking with &lt;em&gt;a lot&lt;/em&gt; of math behind it. I'm just wondering if anyone has already figured all this stuff out, or if anyone knows of a way to model this safety-vs-lift-performance trade off in some way.&lt;/p&gt;&#xA;" OwnerUserId="9888" LastActivityDate="2015-06-10T19:02:06.567" Title="How do safety cages around quadcopter rotors/blades affect lift capabilities?" Tags="&lt;quadcopter&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7463" PostTypeId="1" AcceptedAnswerId="7469" CreationDate="2015-06-10T00:17:51.577" Score="1" ViewCount="336" Body="&lt;p&gt;I'm planning the design of a wrist for a humanoid robot. I would like to choose a design that is sturdy while allowing for dexterity comparable to a human wrist.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One option that was presented to me was to use a &lt;a href=&quot;http://en.wikipedia.org/wiki/Stewart_platform&quot; rel=&quot;nofollow&quot;&gt;Stewart platform&lt;/a&gt;. This setup appears to correctly recreate all possible movements of the human hand. My immediate concern is that this platform will use a total of six actuators which will require additional power and computational requirements. I don't want to commit to this design until I am certain that there isn't a better alternative.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is a Stewart platform a good choice for replicating the dexterousness of the human wrist? If not, what is a better solution?&lt;/p&gt;&#xA;" OwnerUserId="9874" LastActivityDate="2015-06-10T14:29:44.547" Title="Stewart platform as robotic wrist joint" Tags="&lt;robotic-arm&gt;&lt;design&gt;&lt;actuator&gt;&lt;joint&gt;&lt;humanoid&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7464" PostTypeId="2" ParentId="7462" CreationDate="2015-06-10T01:45:09.343" Score="5" Body="&lt;p&gt;To what degree are you looking to cage the fans? &lt;a href=&quot;http://en.wikipedia.org/wiki/IP_Code&quot; rel=&quot;nofollow&quot;&gt;IP code gives some grades for fan protection&lt;/a&gt;, which may help you decide or even find some stock guards. Level 'A' protects against striking by the back of the hand, 'B' protects against striking a finger. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You are correct that the math is complicated; it's more than simply a reduction in diameter - flow around the grating will have a huge impact, especially at the flow rates for the fans. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would suggest you decide what level of protection you want, purchase the guard for one fan, then setup a test rig where you can weight a fan assembly. Add weights until you can &lt;em&gt;just&lt;/em&gt; keep the rig grounded. Add the guard, then remove weight until again, the rig is &lt;em&gt;just&lt;/em&gt; grounded. This will give you a percentage reduction in thrust capacity. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think you will find this method of empirical testing will be faster, easier, and more accurate than mathematical calculations, because you will find it difficult to get the model of the fan guard correct. Even if you could, assuming the guard is close to the blades, there will be an interaction between the fan blades and guard that is dependent on the blade shape.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This answer assumes you don't have access to ANSYS, LS-DYNA, or any other high power CFD tools, but even still empirical testing will be faster unless you already have experience with those tools and a library of blade and guard parts. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, regarding the performance-safety tradeoff - safety is up to you to quantify. Performance impacts of adding guards can be quantified as I've described above. Once you have quantified how much safety matters to you (this is usually done with a &lt;a href=&quot;http://en.m.wikipedia.org/wiki/Failure_mode_and_effects_analysis&quot; rel=&quot;nofollow&quot;&gt;failure mode analysis&lt;/a&gt;), then the tradeoff should become clear. Quantifying safety is usually one of the hardest problems for every engineering project. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2015-06-10T19:02:06.567" LastActivityDate="2015-06-10T19:02:06.567" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="7465" PostTypeId="2" ParentId="4824" CreationDate="2015-06-10T03:12:25.727" Score="2" Body="&lt;p&gt;What is your final desired result? You will certainly want to switch to a different Flight controller like the &lt;a href=&quot;https://store.3drobotics.com/products/3dr-pixhawk&quot; rel=&quot;nofollow&quot;&gt;Pixhawk&lt;/a&gt; it will allow you mutch finer control and allow you to reprogam it at will to implment whatver it is that you are trying to do. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Normally a quadrocopter will drift a certain amount, you would want some kind of external position input depending on the accuracy of the hold you require, GPS for a couple meters, optical flow with a target dot for a couple inches&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2015-06-10T03:12:25.727" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7466" PostTypeId="2" ParentId="7463" CreationDate="2015-06-10T06:38:37.587" Score="2" Body="&lt;p&gt;Bear in mind a Stewart platform has six degrees of freedom - yes it does reproduce the main motions of the human wrist, but it adds extra ones such as the ability to change its overall length.  There is (I would guess) additional complexity in building one - finding suitable compact actuators and linkages, additional work to control its path, perhaps robustness.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your objective is just to get a simple arm working, I would look for a more conventional three axis design.  However the Stewart platform idea does add extra features - those extra degrees of freedom - and might be seen as a more novel concept.&lt;/p&gt;&#xA;" OwnerUserId="9578" LastActivityDate="2015-06-10T06:38:37.587" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7468" PostTypeId="2" ParentId="7460" CreationDate="2015-06-10T14:15:46.720" Score="2" Body="&lt;p&gt;I would go further than TobiasK, even if the order of magnitude is correct.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main characteristic for a drone dynamic is its Thrust/Weight Ratio (TWR). To be able to fly, your TWR shall at least equal 1. To be able to take off, you need TWR&gt;1. In my opinion, TWR=2 gives a fairly dynamic quadcopter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a given propeller, you can get its thrust vs rpm (round per minute) ratio, so you can get the target rpm (if you have 4 motors and want TWR=2, each motor should achieve a thrust equal to half the drone weight). You can also get its torque vs rpm characteristic, and get the mechanic torque you'll get at the target RPM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then you can choose your motor. The target RPM gives you the Kv of your motor. The Kv indicates the amplitude of the &lt;a href=&quot;http://en.wikipedia.org/wiki/Counter-electromotive_force&quot; rel=&quot;nofollow&quot;&gt;back EMF&lt;/a&gt; of your motor, according to its rotation speed. If you use a 3S LiPo battery, your battery may drop done to 9.6V, so, if you want to keep your dynamic during the whole flight, you shall choose a motor that may reach the rpm target at 9.6V. Let's say you need 10k rpm to get your TWR=2, your motor's Kv shall be at least 1040 rpm/V. You should choose your Kv a bit higher, as Kv is given with no load, and the actual speed under load is a bit slower.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The output torque of your motor is proportional to the current you feed in. I looked for &quot;quadcopter motor&quot; on google, and quickly found &lt;a href=&quot;http://www.robotshop.com/en/brushless-motor-1300kv-19a.html&quot; rel=&quot;nofollow&quot;&gt;a motor with 1300Kv and 19A max&lt;/a&gt; (I don't know this motor and can't say if it's good quality or not). 10k rpm divided by 1300 rpm/V gives 7.7V. 7.7V will be the average voltage at the output of your ESC when driving the motor at 10k rpm. The max current is 19A, this means the maximum power at 10k rpm is 7.7*19=146W. This kind of motor has a typical efficiency around 0.7 when on load (if you take a motor with a much higher Kv, you usually decrease its efficiency on load). Therefore, I expect the output mechanical power to be 100W. Mechanical power is speed times torque (checks the units you uses). The max torque has to be higher than your propeller torque at TWR=2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;Hardcore 3D&quot; was mentioned. In my opinion, doing intensive 3D flight with a 5kg drone is insane. I think you should target a total weight under 1kg (400g is good for 3D acrobatics). 3D flight faces an other drawback: propellers are usually optimized to run in one way, and you usually want to use it in both, so you'll either have a much poorer TWR in reverse, or have a poorer efficiency in both way (symmetrical and better than a classical propeller in reverse, nonetheless). &lt;/p&gt;&#xA;" OwnerUserId="7634" LastActivityDate="2015-06-10T14:15:46.720" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7469" PostTypeId="2" ParentId="7463" CreationDate="2015-06-10T14:29:44.547" Score="2" Body="&lt;p&gt;The &quot;best&quot; robot wrist in terms of human analog is probably the &lt;a href=&quot;http://www.anthrobot.com/&quot; rel=&quot;nofollow&quot;&gt;omni-wrist&lt;/a&gt; by Mark Rosheim.  It has a large range of motion, and does not have singularities or gimbal lock that plague other more conventional wrists.  However, it is fairly complicated mechanically, and thoroughly patented i believe.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The book &lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/0471026220&quot; rel=&quot;nofollow&quot;&gt;Robot Evolution: The Development of Anthrobotics&lt;/a&gt; by the same author has a good discussion of human analog robotics design.  &lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-06-10T14:29:44.547" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7470" PostTypeId="1" CreationDate="2015-06-10T18:18:14.670" Score="2" ViewCount="700" Body="&lt;p&gt;Is it possible to apply kinematic decoupling for a 7 DOF 7R manipulator with spherical wrist?  If it is possible, can anyone suggest a reference on how to apply this approach with a redundant manipulator with spherical wrist, or explain why it is not possible? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm working with Robotic Toolbox (matlab) and the numeric algorithm can find the inverse kinematics solution without a problem if I don't specify the orientation.  And I was thinking about solving the problem a second time considering the spherical wrist.  Will this approach work?&lt;/p&gt;&#xA;" OwnerUserId="9662" LastEditorUserId="110" LastEditDate="2015-06-10T20:15:31.587" LastActivityDate="2015-07-16T18:06:14.703" Title="7DOF inverse kinematics spherical wrist" Tags="&lt;inverse-kinematics&gt;&lt;manipulator&gt;&lt;matlab&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7471" PostTypeId="2" ParentId="6957" CreationDate="2015-06-10T19:19:36.150" Score="0" Body="&lt;p&gt;Your derivative term is incorrect. You have:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;dTerm = Kd * (error - last_error);&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Note that this is &lt;em&gt;not&lt;/em&gt; a derivative of the error, this is simply the difference between the previous error and the current error. To get the derivative of the error you need to divide by the sample time. I am not familiar with your platform so I cannot tell you how to get the sample time (loop time, sweep time, etc.), but you need a timer to start and stop every loop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyways, assuming that $t_{elapsed} = dT$, and you can get this from a timer set to count and reset every time your PID code executes, then your sample time is $dT$ and your dTerm needs to become:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;dTerm = Kd * (error - last_error)&lt;strong&gt;/dT&lt;/strong&gt;;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If this isn't the root cause of your control issues it's a major contributing factor. It looks like your PID sections are commented out (not sure why), but I noticed this error everywhere I saw a &quot;dTerm&quot; defined. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this helps!&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-06-10T19:19:36.150" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7472" PostTypeId="1" AcceptedAnswerId="7473" CreationDate="2015-06-10T20:13:05.600" Score="0" ViewCount="11183" Body="&lt;p&gt;I got my hands on a few &lt;a href=&quot;http://www.servodatabase.com/servo/towerpro/sg90&quot; rel=&quot;nofollow&quot;&gt;Tower Pro SG90 9G servos&lt;/a&gt; but cannot find their schematics or datasheet anywhere (besides that link).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have the following concerns:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Looks like they're rated for 4.8V, but will they tolerate a 5V supply?&lt;/li&gt;&#xA;&lt;li&gt;How do I determine the current they require, in amps, mA, etc.?&lt;/li&gt;&#xA;&lt;li&gt;There's 3 wires: brown, red &amp;amp; yellow-orange, what do each of these guys do?&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If I had to &lt;em&gt;guess&lt;/em&gt; I'd say that red is power, another one is direction, and another one is the position to rotate to&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="9888" LastEditorUserId="37" LastEditDate="2015-08-14T11:41:36.023" LastActivityDate="2015-08-14T12:23:35.057" Title="Wiring &amp; driving TowerPro SG90 servos" Tags="&lt;rcservo&gt;&lt;wiring&gt;" AnswerCount="4" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7473" PostTypeId="2" ParentId="7472" CreationDate="2015-06-10T23:04:43.710" Score="1" Body="&lt;p&gt;Regarding the voltage, the &lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/B001CFUBN8&quot; rel=&quot;nofollow&quot;&gt;Amazon listing&lt;/a&gt; for this servo gives the operating voltage range to be 3.0 to 7.2V, so it should accept 5V no problem. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding the current draw, on the &lt;a href=&quot;http://www.amazon.com/ask/questions/Tx1X9IO6TWFSVRF/?source=allQuestionsPage&quot; rel=&quot;nofollow&quot;&gt;user questions section&lt;/a&gt; of the same page, one user stated that these servos drew between 750 - 1000mA when fully loaded. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding the wiring, &lt;a href=&quot;http://pcbheaven.com/wikipages/How_RC_Servos_Works/&quot; rel=&quot;nofollow&quot;&gt;PCB has a great article on servos&lt;/a&gt; that says the wiring would go generally how you would think - red is (+), black or brown is (-), and the other wire is signal. It says that Tower servos use red, black, and white wires. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this helps! &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-06-10T23:04:43.710" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7474" PostTypeId="1" CreationDate="2015-06-11T01:04:08.843" Score="2" ViewCount="6682" Body="&lt;p&gt;I'm aiming to control a motorized joint at a specific speed. To do this, I'm planning on attaching a rotary encoder to do this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'll be controlling the motor with a PID controller. With this PID controller, I need to control the joints based on their velocity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;speed = distance / time&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It would make sense to do something like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;double getCurrentSpeed() {&#xA;    return (currentAngle - lastAngle) / samplingRate;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;However, there's an issue; the encoder doesn't provide a high enough resolution to accurately calculate the speed (the sample rate is too high). I want to have updated data every 5-15 ms (somewhere in that range as my current motors seem to be able to respond to a change in that range)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some more information:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;14 bit precision (roughly 0.0219726562 degrees per &quot;step&quot; of encoder&lt;/li&gt;&#xA;&lt;li&gt;I'd like to be able to calculate as small of speed differences as possible&lt;/li&gt;&#xA;&lt;li&gt;As the motors will be going fairly fast (120+ degrees/second at highly variable speeds and directions), so the feedback has to be accurate and not delayed at all&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So, a couple of ideas:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I can find encoders that I can sample at a very high rate. I was thinking about sampling the time between the changes of the encoder's value. However, this seems finicky and likely to be noise-prone&lt;/li&gt;&#xA;&lt;li&gt;I could do some sort of rolling average, but that would cause the data values to &quot;lag&quot; because the previous values would &quot;hold back&quot; the output of the calculations somewhat and this would play with my PID loop some&lt;/li&gt;&#xA;&lt;li&gt;Noise filter of some sort, although I don't know if that would work given the rapidly changing values of this application&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;However, none of these seem ideal. Is my only option to get a 16 bit (or higher!) encoder? Or is there another method/combination of methods that I could use to get the data I need?&lt;/p&gt;&#xA;" OwnerUserId="824" LastActivityDate="2015-06-11T11:00:59.267" Title="How do I accurately calculate the speed of a rotary encoder at a high sample rate?" Tags="&lt;motor&gt;&lt;pid&gt;&lt;algorithm&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7475" PostTypeId="1" AcceptedAnswerId="7476" CreationDate="2015-06-11T01:46:05.597" Score="3" ViewCount="3351" Body="&lt;p&gt;I'm trying to make an hexapod with 18 servo motors and i'm asking how to control them with a Raspberry Pi. (Never used it). I saw lot's of stuff to control 1, but 18, 20...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Currently I'm working on an &lt;a href=&quot;http://www.arduino.cc/en/Main/arduinoBoardMega&quot; rel=&quot;nofollow&quot;&gt;Arduino Mega&lt;/a&gt;, and a &lt;a href=&quot;http://www.lynxmotion.com/p-395-ssc-32-servo-controller.aspx&quot; rel=&quot;nofollow&quot;&gt;SSC-32&lt;/a&gt; board, but I found the result to slow and jerky.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At this end, I want to add a camera and processing the image, I know an Arduino can't handle that process but a Raspberry Pi can ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank for all information about that subject :) &lt;/p&gt;&#xA;" OwnerUserId="7022" LastActivityDate="2017-08-26T21:47:26.870" Title="Can I control more than 18 servo motor with a Raspberry Pi" Tags="&lt;arduino&gt;&lt;raspberry-pi&gt;&lt;cameras&gt;&lt;servomotor&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7476" PostTypeId="2" ParentId="7475" CreationDate="2015-06-11T10:19:48.273" Score="8" Body="&lt;p&gt;Raspberry Pi has only one hardware PWM channel and Linux distribution it runs is not a &lt;a href=&quot;http://en.wikipedia.org/wiki/Real-time_operating_system&quot; rel=&quot;noreferrer&quot;&gt;real time system&lt;/a&gt;, so software PWM may be very unstable. You are not guaranteed, that your program will be executed at exact frequency you want, so you will have trouble getting precise timing required to drive servos. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you already have Arduino Mega and SSC-32, I would suggest to make all the computations on the RPi, and just send the results to the servo controller via serial. I imagine your system like this: you have a central controller (RPi) that processes images from camera, detects obstacles, calculates positions for robot's legs and sends them to servo controller. These tasks can be done in various intervals - even if you have 100ms delay, nothing bad happens, because real-time part (requiring exact timing like driving servos) is handled by servo controller, which has hardware features that make it much more suitable for such a task.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively, to make system more compact, you could use dedicated &lt;a href=&quot;https://www.adafruit.com/products/2327&quot; rel=&quot;noreferrer&quot;&gt;RPi servo shield&lt;/a&gt;, or make your own basing on chips like &lt;a href=&quot;http://www.nxp.com/documents/data_sheet/PCA9685.pdf&quot; rel=&quot;noreferrer&quot;&gt;PCA9685&lt;/a&gt;, which is PWM driver controlled via I2C. You can chain these chips to control more channels than 16.&lt;/p&gt;&#xA;" OwnerUserId="7360" LastEditorUserId="7360" LastEditDate="2015-06-11T21:53:59.393" LastActivityDate="2015-06-11T21:53:59.393" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="7478" PostTypeId="2" ParentId="7474" CreationDate="2015-06-11T10:49:23.020" Score="1" Body="&lt;p&gt;I think you're getting a little confused - you mention a 14b encoder that you have, then ask if you should get a 16b encoder to sample faster. While resolution and the time it takes to query a device can be somewhat related, the electronic interface has a lot more to do with how quickly you can sample than the sensor resolution. For instance, an I2C protocol requires the master to call the sensor by &quot;name&quot; (address), so the time you spend transmitting that information means you can't sample as quickly as you could with SPI, where you use a chip select and start getting data immediately. Both methods transmit data one bit at a time,  so both take longer than would a sensor with a parallel interface, where you read each bit simultaneously. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;:EDIT: on my phone, pushed enter on accident. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding sampling speed, 120deg/s is 0.6deg/5ms, which means your encoder should increment nearly 30 times (0.02 to 0.6) in that interval. You should always consider filtering the signal, because resolution isn't just some number that's exact. It's better to think of it as wedges. Anywhere in a particular wedge will give you the same reading. This means that, if you were perfectly centered on a bit (wedge), you are likely to get 30 increments per sample, but if you start a little to one side you might get 29 or the other side may give 31. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can generally watch this behavior on a per sample basis - you may get increments of 29 29 29 30 30 31 29 29... You can watch the measurements change slowly because you are essentially strobing a rotating shaft and if you don't hit a multiple of speed exactly you'll get a phase roll. If you don't filter this signal then your robot will think you're actually going those speeds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Every filter is going to, uh, filter your signal, so then it's up to you how to handle that alteration to your signal. I would suggest a simple lag filter as they are effective, exceedingly simple to implement, and &lt;a href=&quot;http://my.execpc.com/~steidl/robotics/first_order_lag_filter.html&quot; rel=&quot;nofollow&quot;&gt;there are really straightforward design guidelines&lt;/a&gt; to help you maintain whatever level of responsiveness you would like. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2015-06-11T11:00:59.267" LastActivityDate="2015-06-11T11:00:59.267" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="7479" PostTypeId="2" ParentId="7475" CreationDate="2015-06-11T17:28:36.327" Score="4" Body="&lt;p&gt;You need a controller like this that can address them individually over I2C.  These can be chained together to control more than you'll likely ever need:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Adafruit 16-Channel 12-bit PWM/Servo Driver - I2C interface - PCA9685&#xA;&lt;a href=&quot;https://www.adafruit.com/products/815&quot; rel=&quot;nofollow&quot;&gt;https://www.adafruit.com/products/815&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How to use them with a Raspberry Pi:&#xA;&lt;a href=&quot;https://learn.adafruit.com/adafruit-16-channel-servo-driver-with-raspberry-pi&quot; rel=&quot;nofollow&quot;&gt;https://learn.adafruit.com/adafruit-16-channel-servo-driver-with-raspberry-pi&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="1432" LastActivityDate="2015-06-11T17:28:36.327" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="7480" PostTypeId="2" ParentId="7163" CreationDate="2015-06-11T23:23:06.283" Score="13" Body="&lt;p&gt;After solving the problem, I created a &lt;a href=&quot;https://www.icloud.com/keynote/AwBUCAESEJ6BPEHy1-J_58iY9QpDxmMaKWYQ8JT4T8wVxHSfiNn7vMJH1IuI3bnUaJeS8H0P8z768Qw95BLoFg2qMCUCAQEEILObYmsh9SaWe-3YhL6v1kNVeciwzjsktabBmlhsO661#Optimal_Hand_Eye_Calibration&quot; rel=&quot;noreferrer&quot;&gt;keynote presentation explaining many details about hand eye calibration&lt;/a&gt; for those that are interested. Practical code and instructions to calibrate your robot can be found at &lt;a href=&quot;https://github.com/jhu-lcsr/handeye_calib_camodocal&quot; rel=&quot;noreferrer&quot;&gt;handeye-calib-camodocal&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've directly reproduced some key aspects answering the question here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/7k4D3.jpg&quot; alt=&quot;Hand Eye Calibration Basics&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/d4nVb.jpg&quot; alt=&quot;Two Common Solutions to Hand Eye Calibration&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/wdOyg.jpg&quot; alt=&quot;AX=XB Hand Eye Calibration Solution&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/zRQ1i.jpg&quot; alt=&quot;AX=ZB Hand Eye Calibration Solution&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Camodocal&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/hengli/camodocal&quot; rel=&quot;noreferrer&quot;&gt;Camodocal&lt;/a&gt; is the library I'm using to solve the problem. It is a well written C++ library that includes hand eye calibration, though documentation is extremely sparse.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Camodocal includes implementations of:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://github.com/hengli/camodocal/blob/master/include/camodocal/calib/HandEyeCalibration.h&quot; rel=&quot;noreferrer&quot;&gt;K. Daniilidis 1999 Hand-Eye Calibration Using Dual Quaternions&lt;/a&gt; (Tested and working)&lt;/li&gt;&#xA;&lt;li&gt;Chessboard camera calibration&lt;/li&gt;&#xA;&lt;li&gt;Stereo Camera Calibration&lt;/li&gt;&#xA;&lt;li&gt;SLAM with multiple non-overlapping cameras and odometry &#xA;designed for a mobile vehicle&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2&gt;Relevant Papers&lt;/h2&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;CamOdoCal: Automatic Intrinsic and Extrinsic Calibration of a Rig with Multiple Generic Cameras and Odometry, In Proc. IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS), 2013.&lt;/li&gt;&#xA;&lt;li&gt;Lionel Heng, Mathias Bürki, Gim Hee Lee, Paul Furgale, Roland Siegwart, and Marc Pollefeys, Infrastructure-Based Calibration of a Multi-Camera Rig, Submitted to IEEE International Conference on Robotics and Automation, 2014.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2&gt;Feeding data into CamOdoCal&lt;/h2&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Each measurement taken at a different time, position, and orientation narrows down the possible transforms that can represent the unknown X&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Record a list of many transforms A and B taken between different time steps, or relative to the first time step&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Rotations are in AxisAngle = UnitAxis&lt;em&gt;Angle format, or [x_axis,y_axis,z_axis]&lt;/em&gt;_angle &#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;||UnitAxis||=1&lt;/li&gt;&#xA;&lt;li&gt;|| AxisAngle || = _angle&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Translations are in the normal [x,y,z] format&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Pass both vectors into EstimateHandEyeScrew()&lt;/li&gt;&#xA;&lt;li&gt;Returns X in the form of a 4x4 transform estimate&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/Cvc75.jpg&quot; alt=&quot;Camodocal Hand Eye Calibration Details&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;ROS Integration&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;There is a package that implements a solver for this using camodocal + ROS called &lt;a href=&quot;https://github.com/jhu-lcsr/handeye_calib_camodocal&quot; rel=&quot;noreferrer&quot;&gt;handeye_calib_camodocal&lt;/a&gt;. It also includes detailed troubleshooting instructions. &lt;/p&gt;&#xA;&#xA;&lt;h2&gt;References&lt;/h2&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Strobl, K., &amp;amp; Hirzinger, G. (2006) . Optimal hand-eye calibration. In 2006 IEEE/RSJ international conference on intelligent robots and systems (pp. 4647–4653), October 2006.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://campar.in.tum.de/Chair/HandEyeCalibration&quot; rel=&quot;noreferrer&quot;&gt;Technical University of Munich (TUM) CAMP lab wiki &lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;K. Daniilidis, “Hand–Eye Calibration Using Dual Quaternions,” Int. Journal of Robs. Research, vol. 18, no. 3, pp. 286–298, June 1999.&lt;/li&gt;&#xA;&lt;li&gt;E. Bayro–Corrochano, K. Daniilidis, and G. Sommer, “Motor–Algebra for 3D Kinematics: The Case of Hand–Eye Calibration,” Journal for Mathem. Imaging and Vision, vol. 13, no. 2, pp. 79–100, Oct. 2000. &lt;/li&gt;&#xA;&lt;li&gt;F. Dornaika and R. Horaud, “Simultaneous Robot–World and Hand– Eye Calibration,” IEEE Trans. on Robs. and Aut., vol. 14, no. 4, pp. 617–622, August 1998. &lt;/li&gt;&#xA;&lt;li&gt;Note: figures and text are from mixed sources including the presentation author, the various papers referenced, and the TUM wiki.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="304" LastEditorUserId="304" LastEditDate="2017-09-06T19:26:34.690" LastActivityDate="2017-09-06T19:26:34.690" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7483" PostTypeId="1" AcceptedAnswerId="7484" CreationDate="2015-06-12T10:04:11.370" Score="0" ViewCount="1148" Body="&lt;p&gt;I need to get coordinates of the specific points from 2D CAD file and transform them so that I could use them to move the robotic arm to those points. The problem is that I only get x y z coordinates and the robotic arm needs x y z Tx Ty Tz coordinates to move to the certain position. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any suggestions?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edited:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My task: I need robotic arm to go through certain points on PCB board and heat soldering paste. I could do it manually by setting points with pendant. But a much easier way would be to get coordinates of those points from CAD file and write a code using PC.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;MOVL MotionSpeedType(0 - linear mm/s, 1 - angular °/s) Speed (0.1 - 1000 mm/s or Max angular &#xA;&#xA;speed) coordinate X Y Z Tx Ty Tz &#xA;&#xA;ToolNo [Type] (move robot in a cartesian coordinates in linear motion)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;this is how code for linear motion to a certain point looks like&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I only could find this &lt;a href=&quot;http://www.motoman.com/motomedia/manuals/docs/160475-1CD.pdf&quot; rel=&quot;nofollow&quot;&gt;manual&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is pendant &lt;a href=&quot;http://www.motoman.com/motomedia/manuals/docs/155490-1CD-R5.pdf&quot; rel=&quot;nofollow&quot;&gt;manual&lt;/a&gt; maybe it will be helpful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am second year student in &quot;Robotics and mechatronics&quot;. I'm currently in a internship at the scientific research institution. I really appreciate your help!&lt;/p&gt;&#xA;" OwnerUserId="9907" LastEditorUserId="9176" LastEditDate="2015-06-26T19:37:10.647" LastActivityDate="2015-06-26T19:37:10.647" Title="How to transform x y z coordinates to Tx Ty Tz?" Tags="&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="7484" PostTypeId="2" ParentId="7483" CreationDate="2015-06-12T13:24:18.883" Score="1" Body="&lt;p&gt;You linked a datasheet but &lt;em&gt;not&lt;/em&gt; the protocol. I would need to see what the parameters x,y...Ty,Tz relate to specifically on the robot to be able to tell you exactly what to put for the rotations. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, I would assume that the rotations specify the end effector pose. Imagine holding a ball with both hands. With the ball in one location (x,y,z), your hands could be on the sides of the ball, or your left hand could be on top and right on bottom, or your left hand could be on bottom and your right on top. In actuality your hands could be anywhere on the ball; the orientation of your hands is called the pose. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Without any knowledge of the protocol, which joints correspond to which command inputs, no knowledge of the controller, and no knowledge of what you're trying to do with this (industrial!) robot, I would say to just put zeros for the Tx,Ty, and Tz parameters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Zeros for all of the rotation parameters &lt;em&gt;should&lt;/em&gt; have the end effector facing in some ordinal direction (straight down, up, forward, etc.). Once you see the &quot;default&quot; orientation, try setting one of the angles to 90 degrees (pi/2 radians). Setting Tx to 90 degrees should cause the end effector to rotate 90 degrees about its x-axis. You can run through all the rotations to identify the primary axes, then use &lt;a href=&quot;https://en.wikipedia.org/wiki/Euler_angles&quot; rel=&quot;nofollow&quot;&gt;Euler angles (presumably)&lt;/a&gt; to specify the pose for the end effector. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But again, this is all assuming the rotations affect the end effector. The rotation parameters could be in &lt;a href=&quot;https://en.wikipedia.org/wiki/Euler_angles&quot; rel=&quot;nofollow&quot;&gt;Euler anglges&lt;/a&gt;, or &lt;a href=&quot;https://en.wikipedia.org/wiki/Euler_angles#Tait.E2.80.93Bryan_angles&quot; rel=&quot;nofollow&quot;&gt;Tait-Bryan angles&lt;/a&gt;, but it's unlikely to be something too exotic. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you could edit your question with more detail about what you're trying to do and link to the user manual or communication protocol I could give more help, but I don't really have any useful information about your problem, so at the moment all I can give are educated guesses. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;:EDIT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking at the &lt;a href=&quot;http://www.motoman.com/motomedia/manuals/docs/155490-1CD-R5.pdf&quot; rel=&quot;nofollow&quot;&gt;pendant manual&lt;/a&gt; you linked, section 2.3.2 describes operation in Cartesian mode, where operations occur relative to the XYZ axes defined at the base of the robot. I would probably use these to define the starting position of a board to be soldered (that is, the location of some indexing location on the board relative to the base of the robot), then switch to the tool coordinates mode described in 2.3.4. From here you could feed it information direct from the 2D file, adding Z up/down motions as necessary to contact or come close to the board, depending on heat source (torch v soldering iron). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Section 2.3.5 covers setting up user coordinates, where it looks like you can define zero-index locations and orientations for workstation planes. The graphic at the top of page 70 looks like what you would be after. The neat trick here is that, if you set up the starting locations correctly, once you go to tool mode everything is in tool coordinates, so you don't have to specify &lt;em&gt;any&lt;/em&gt; rotations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As others have mentioned, Euler angles and such can be tricky. I believe you will commonly find Tait-Bryan angles in an XYZ or ZYX arrangement or Euler angles in an XZX or ZXZ arrangement, but there are dozens of ways that these could be setup. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a final reiteration, you shouldn't really need to worry about those angles. Set everything to zero to see what direction the end effector is pointing. Make adjustments to only one angle until you get &quot;down&quot; relative the board set, then use Cartesian mode to move the tool to the indexing position on the board to be soldered. Define that as the user coordinate, then enter tool mode and feed it X-Y coordinates to do the work. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this helps!&lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2015-06-12T17:59:41.000" LastActivityDate="2015-06-12T17:59:41.000" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7485" PostTypeId="1" AcceptedAnswerId="7488" CreationDate="2015-06-12T13:50:07.280" Score="1" ViewCount="219" Body="&lt;p&gt;I have the following system:&#xA;$$\dot{x} = A(t)x+B(t)u$$&#xA;$$y = x$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$A(t)$ and $B(t)$ are actually scalar, but time-dependent. If they would be constant, I could simulate the system in Matlab using:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;sys = ss(A,B,C,0);&lt;/code&gt;&#xA;&lt;code&gt;lsim(sys,u,t,x0);&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, it would be nice to simulate the system with dynamic state and input matrix. The matrices are based on measurement data, this means I would have for each discrete time step $t_i$ another matrix $A(t_i)$. Any suggestions how to do that?&lt;/p&gt;&#xA;" OwnerUserId="9899" LastEditorUserId="9899" LastEditDate="2015-06-12T14:01:15.723" LastActivityDate="2015-06-12T15:07:50.923" Title="Matlab: System simulation with dynamic state matrix / input matrix" Tags="&lt;dynamics&gt;&lt;matlab&gt;&lt;simulation&gt;" AnswerCount="1" CommentCount="11" ClosedDate="2015-06-15T11:28:44.183" ContentLicense="CC BY-SA 3.0" />
  <row Id="7486" PostTypeId="1" AcceptedAnswerId="7487" CreationDate="2015-06-12T14:32:50.363" Score="0" ViewCount="105" Body="&lt;p&gt;Obviously robotic circuits draw different amounts of power/current. So given the same battery, say, a 9V, then connecting it to 2 different circuits will deplete it at two different rates. Robot/Circuit #1 might drain the battery in 5 minutes. Robot/Circuit #2 might drain the battery in 20 minutes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What ratings do batteries have that allows us to figure out how long it will power a circuit for? &lt;strong&gt;Bonus points:&lt;/strong&gt; does this same rating uphold for solar panels and, in deed, all power supplies (not just batteries)?&lt;/p&gt;&#xA;" OwnerUserId="9888" LastActivityDate="2015-06-12T14:46:54.830" Title="How to determine how long a battery will power a robotic circuit for?" Tags="&lt;power&gt;&lt;battery&gt;&lt;circuit&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7487" PostTypeId="2" ParentId="7486" CreationDate="2015-06-12T14:46:54.830" Score="1" Body="&lt;p&gt;All batteries have &lt;a href=&quot;http://www.dcbattery.com/faq.html#1&quot; rel=&quot;nofollow&quot;&gt;an amp-hour rating&lt;/a&gt; that says how much charge is in the battery. A triple A baterry and a D cell battery are both 1.5V batteries, but the D cell has a much higher amp-hour rating than a triple A. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could use the amp-hour rating directly, but what I find more useful is to get a watt-hour rating. This is more useful as robotic applications tend to use battery packs of various voltage ratings in combination with a voltage regulator. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A battery has a nominal voltage; get the watt-hour rating by multiplying the amp-hour rating by the nominal voltage. Now you can divide this watt-hour rating by the power draw of the robot (in watts) to get the number of hours the battery can power the robot. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can also use this to estimate run time by power ratings for each component before you ever actually build the robot; four 250mW motors total for 1W of power draw. Assuming the &lt;a href=&quot;http://forum.arduino.cc/index.php?topic=264083.0&quot; rel=&quot;nofollow&quot;&gt;Arduino controlling it draws 50mA at 3v3&lt;/a&gt;, the controller draws 165mA. This gives a total power draw of 1.165W (again, estimated). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, a 1000mAh, 7.2V LiPO battery back has (1Ah x 7.2V) = 7.2Wh of capacity. This means that it will run the example circuit for (7.2Wh / 1.165W) = 6.2 hours = 6 hours and 12 minutes. Again, this is an estimate, which may be more or less depending on whether you run the motors at full capacity for the whole time and the efficiency losses in the voltage regulator and other equipment, but it should be generally correct. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding your bonus points, the other devices you've listed aren't power storage devices. They can run indefinitely, provided they're powered. A solar cell doesn't hold a charge, so it can't run anything for any amount of time if there's no sun. If there is sun, it can supply its rated power as long as the sun is out. Note again though rated power - you can't run a 5W robot on a 1W solar cell. Same applies for all other power supplies. The are power &lt;strong&gt;supplies&lt;/strong&gt;, not power &lt;em&gt;reserves&lt;/em&gt; like a battery. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-06-12T14:46:54.830" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7488" PostTypeId="2" ParentId="7485" CreationDate="2015-06-12T15:07:50.923" Score="1" Body="&lt;p&gt;When you say the matrices are based on measurement data, do you mean that &lt;span class=&quot;math-container&quot;&gt;$A(t)$&lt;/span&gt; varies with your state space output &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt;, which should be configured to provide your outputs (measurements), or that you want to actually provide a hard-coded series of parameters (field measurements) to the &lt;span class=&quot;math-container&quot;&gt;$A$&lt;/span&gt; matrix?&lt;/p&gt;&#xA;&lt;p&gt;If you are trying to do the former, have essentially &lt;span class=&quot;math-container&quot;&gt;$A=f(y)$&lt;/span&gt;, where &lt;span class=&quot;math-container&quot;&gt;$y=f(t)$&lt;/span&gt; (because actually &lt;span class=&quot;math-container&quot;&gt;$y=f(x)$&lt;/span&gt;, but &lt;span class=&quot;math-container&quot;&gt;$x=f(t)$&lt;/span&gt; by definition), then you can use ode45. In the function you want to use you can define y = x, then use that to update the parameters in &lt;span class=&quot;math-container&quot;&gt;$A$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;If you want the latter, or the former really, you can always brute force it. Setting up some standards real quick, let's say you have:&lt;/p&gt;&#xA;&lt;p&gt;nSamples, which would be the number of time points in your simulation.&lt;/p&gt;&#xA;&lt;p&gt;Your time step is dT.&lt;/p&gt;&#xA;&lt;p&gt;You have nStates, so &lt;span class=&quot;math-container&quot;&gt;$size(A) = [nStates,nStates]$&lt;/span&gt;. Now assume that your A matrix evolves over time based of field samples (testing, etc.), you should have a bunch of &lt;span class=&quot;math-container&quot;&gt;$A$&lt;/span&gt; matrices, such that you actually have &lt;span class=&quot;math-container&quot;&gt;$size(A) = [nStates,nStates,nSamples]$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Now, try this:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;x = Initial Conditions;&lt;/p&gt;&#xA;&lt;p&gt;for i = 1:nSamples&lt;/p&gt;&#xA;&lt;p&gt;currentA = A[&lt;strong&gt;: , : ,&lt;/strong&gt; i];&lt;/p&gt;&#xA;&lt;p&gt;xDot = currentA * x + B * u;&lt;/p&gt;&#xA;&lt;p&gt;x = x + xDot * dT;&lt;/p&gt;&#xA;&lt;p&gt;y = x;&lt;/p&gt;&#xA;&lt;p&gt;end&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;As before, if you just want to swap out parameters in &lt;span class=&quot;math-container&quot;&gt;$A$&lt;/span&gt; based on &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt; then that's easy to implement too.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;x = Initial Conditions;&lt;/p&gt;&#xA;&lt;p&gt;y = f(x);&lt;/p&gt;&#xA;&lt;p&gt;for i = 1:nSamples&lt;/p&gt;&#xA;&lt;p&gt;A = f(y);&lt;/p&gt;&#xA;&lt;p&gt;xDot = Ax + Bu;&lt;/p&gt;&#xA;&lt;p&gt;x = x + xDot*dT;&lt;/p&gt;&#xA;&lt;p&gt;y = f(x);&lt;/p&gt;&#xA;&lt;p&gt;end&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Again, this is just a brute-force method to implement what lsim does for you. It's just numeric integration.&lt;/p&gt;&#xA;&lt;p&gt;Hope this helps!&lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2015-06-12T15:07:50.923" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7489" PostTypeId="1" AcceptedAnswerId="7490" CreationDate="2015-06-12T15:48:46.350" Score="1" ViewCount="86" Body="&lt;p&gt;Say I have &lt;a href=&quot;http://www.adafruit.com/products/200&quot; rel=&quot;nofollow&quot;&gt;this solar panel&lt;/a&gt; that outputs 6V at 330mA, or ~1.98 Watts. If I connect that to Arduino, which expects a 5V supply at (roughly) 50mA, then the Arduino as a whole requires 5V * .05A = 0.25 Watts to power it. To me, if I understand this correctly, then in perfect weather/sunlight, the solar panel will power Arduino all day long, no problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now let's say we wire up 4 motors to the Arduino, each of which draw 250 Watts. Now the Arduino + 4 motors are drawing ~1.25 Watts. But since the panels are still outputting 1.98 Watts, I would think that (again, under perfect sunlight) the panel would power the Arduino and motors all day long, no problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now we add 4 more motors to the Arduino circuit, for a total of 8 motors. The circuit is now drawing 1.25 Watts + 1 W = 2.25 Watts. I would expect the solar panel to &lt;em&gt;no longer&lt;/em&gt; be capable of powering the circuit, at least properly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My first concern here is: am I understanding these 3 scenarios correctly? If not, where is my understanding going awry?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming I'm more or less on track, my next question is: can solar panels be &quot;daisy chained&quot; together to increase total power output? In the third case above, is there a way to add a second solar panel into the mix, effectively making the two panels output 1.98 Watts * 2 = 3.96 Watts, which would then make them capable of powering the Arduino and its 8 motors (yet again, assuming perfect weather/sunlight conditions)?&lt;/p&gt;&#xA;" OwnerUserId="9888" LastActivityDate="2015-06-12T18:14:15.823" Title="Understanding how solar panels can supply power to robotic circuits" Tags="&lt;power&gt;&lt;circuit&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7490" PostTypeId="2" ParentId="7489" CreationDate="2015-06-12T18:14:15.823" Score="3" Body="&lt;p&gt;Your scenarios are correct. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can connect multiple solar cells together to get &lt;a href=&quot;http://www.instructables.com/id/How-to-Wire-Batteries-in-Series-or-in-Parallel/&quot; rel=&quot;nofollow&quot;&gt;increased current or increased voltage.&lt;/a&gt; Wire them in series (positive to negative) to boost voltage, wire them in parallel (positives to positive) to boost current capacity. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a final note, I would caution running near the maximum capacity of the solar cell. The voltage of the cell will drop as load increases; you can see the &lt;a href=&quot;http://www.voltaicsystems.com/2-watt-panel&quot; rel=&quot;nofollow&quot;&gt;specifications for the cell you're looking at&lt;/a&gt; and see the &quot;open circuit&quot; voltage is 7.0V, while the &quot;peak voltage&quot; is 6.0V. The more load you put on the solar cell the lower the output voltage goes. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you manage to lower the output voltage below the minimum for a voltage regulator (which you should absolutely be using considering the voltage swings), then you will &lt;a href=&quot;https://en.wikipedia.org/wiki/Brownout_(electricity)&quot; rel=&quot;nofollow&quot;&gt;brownout&lt;/a&gt; the voltage regulator. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When this happens you could either have the voltage regulator shutoff (best case scenario). When it turns off it stops drawing power, which reduces the load on the solar cell. When this happens, the reduced load causes the voltage to recover. When this happens the regulator turns back on. You wind up cycling power to your board a LOT and it could damage it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;OR the voltage regulator could try to &quot;hold on&quot; and just pass the lower voltage. At this point you are providing the &lt;a href=&quot;http://www.emersonnetworkpower.com/en-US/Solutions/ByApplication/Pages/What-Causes-Dirty-Power.aspx&quot; rel=&quot;nofollow&quot;&gt;dirty power&lt;/a&gt; directly to your microcontroller. This could do anything from power cycle as described above to flat-out frying your board. There is &lt;a href=&quot;http://forum.arduino.cc/index.php?topic=10489.0&quot; rel=&quot;nofollow&quot;&gt;a thread about brownout detection and handling&lt;/a&gt; over at the Arduino forums if you're interested. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-06-12T18:14:15.823" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="7491" PostTypeId="1" AcceptedAnswerId="7492" CreationDate="2015-06-12T20:22:09.597" Score="0" ViewCount="24" Body="&lt;p&gt;I'm looking for my robotics project to draw its power from one of 3 rechargeable batteries; basically whichever has the most &quot;juice&quot; in it. From the initial research I've already done, I believe I could connect each rechargeable battery (probably LiPo) to a diode, and then wire each of the 3 diodes in series.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, being so new to robotics/electronics, I guess I wanted to bounce this off the community as a sanity check, or to see if there is a better way of achieving this. Again, what I am looking for is a way for the circuit to automagically detect that battery #1 has more power than battery #2, and so it &quot;&lt;em&gt;decides&lt;/em&gt;&quot; to draw power from #1. The instant #1 is depleted or deemed &quot;less powerful&quot; than #2, the #2 battery takes over. Thoughts/criticisms?&lt;/p&gt;&#xA;" OwnerUserId="9888" LastActivityDate="2015-06-12T20:37:18.023" Title="Wiring necessary to route power from any one of several rechargeable batteries" Tags="&lt;power&gt;&lt;battery&gt;&lt;wiring&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7492" PostTypeId="2" ParentId="7491" CreationDate="2015-06-12T20:37:18.023" Score="1" Body="&lt;p&gt;Is there a need to draw from the batteries sequentially? If you wire the &lt;a href=&quot;http://www.batteriesnorthwest.com/batteryschool.cfm?TID=17#ANC17&quot; rel=&quot;nofollow&quot;&gt;batteries in parallel&lt;/a&gt; you drain them all at the same time, so you don't need to worry about swapping dead batteries for fresh. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-06-12T20:37:18.023" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7493" PostTypeId="1" CreationDate="2015-06-13T12:27:51.663" Score="0" ViewCount="158" Body="&lt;p&gt;I have a calibrated stereo camera system that is mounted in a passenger car which means I am able to retrieve a point cloud from my stereo image. However, I need to find how well is the camera aligned with the vehicle - read: if the camera is perfectly facing forwards or not. I guess it will never perfectly face forwards so I need to get the angle (or rather 3D vector) between &quot;perfect forwards&quot; and &quot;actual camera pose&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What came to my mind is to drive the vehicle possibly perfectly forwards and use stereo visual odometry to detect the angle of vehicle movement as seen by camera (which is the vector I am looking for). The &lt;a href=&quot;http://www.cvlibs.net/software/libviso/&quot; rel=&quot;nofollow&quot;&gt;LIBVISO&lt;/a&gt; library for visual odometry can output a 3D vector of movement change from one stereo frame to another which could be used to detect the needed vector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only problem may be to actually be able to drive perfectly forward with a car. Maybe an RTK GPS could be used to check for this or for correction. Will anyone have a suggestion on how to proceed?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The stereo camera I use consists of 2 separate Point Grey USB cameras. Each camera is mounted on a windshield inside the car with a mount like &lt;a href=&quot;http://drzaky-navigace.heureka.cz/truecam-a3-prisavny-drzak/&quot; rel=&quot;nofollow&quot;&gt;this one&lt;/a&gt;. The cameras were calibrated after mounting. The stereo baseline (distance between the cameras) is about 50 cm.&lt;/p&gt;&#xA;" OwnerUserId="1021" LastEditorUserId="1021" LastEditDate="2015-06-14T22:02:52.083" LastActivityDate="2015-06-14T22:02:52.083" Title="Discover vector/angle between stereo camera pose and vehicle body" Tags="&lt;stereo-vision&gt;&lt;odometry&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7494" PostTypeId="1" CreationDate="2015-06-13T15:30:32.667" Score="2" ViewCount="869" Body="&lt;p&gt;I would like to build a mechanical module that acts like a spring with electronically controllable stiffness (spring rate).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For instance, let's imagine a solid, metallic cube, 0.5 m each side. On the top side of the cube, there is a chair sitting on top of a solid mechanical spring. When you sit on the chair, it would go down proportionally to your weight, and inversely proportional to the spring's rate. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I want is that this spring's rate be electronically adjustable in real time, for instance a microcontroller system might increase the spring's rate when it detects a larger weight.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm using this example to best describe what I want to achieve because I'm not a robotics specialist and I don't know the inside terms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there already an electro-mechanic module as the one I'm describing? (obviously nevermind the cube and the chair, it's the spring I'm interested in).&lt;/p&gt;&#xA;" OwnerUserId="4374" LastActivityDate="2015-06-14T03:23:13.803" Title="Spring with electronically adjustable stiffness" Tags="&lt;actuator&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7495" PostTypeId="2" ParentId="7493" CreationDate="2015-06-14T01:20:00.777" Score="1" Body="&lt;p&gt;Sounds to me like you just need a one-shot test to check (stereo) camera alignment. I would just get a sheet of plywood screwed to a frame you can orient to the car. I would do this rather than trying to move the car because car micro motions are a pain. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, with some crude ASCII art:&#xA;O===O L&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where the L is the plywood rig in front of your car. As long as you've taken care to make the rig square you can measure the distance between the edges and key features on the car. This ensures the plywood is square to the front of the car. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;All of this is so you can get a point cloud of a flat sheet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;:EDIT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I had originally said find the normal of the sheet, this is the direction the camera is pointing. After some thought last night, the normal of the sheet is going to be the mirror of the camera orientation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider some more crude ASCII art. Always assuming the plywood is perfectly square and plumb and assuming the camera is pointing down and to the right: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;\ |&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you will get from the camera's point of view is based on the camera's assumption that &lt;em&gt;it&lt;/em&gt; is the one that is always pointed correctly, so it will represent the plywood in the scene with:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;--  \&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The orientation of the plywood as it rotates from the XY plane (assuming Z is distance from the cameras) is in the &lt;em&gt;opposite&lt;/em&gt; direction the camera is rotated from straight ahead because these are two different aspects of the same &lt;a href=&quot;https://en.wikipedia.org/wiki/Rotation_matrix&quot; rel=&quot;nofollow&quot;&gt;rotation matrix&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That is to say, the &lt;em&gt;camera&lt;/em&gt; will be rotated some amount relative to &lt;em&gt;world coordinates&lt;/em&gt; (the car and thus the plywood), expressed by the rotation matrix $E$. The &lt;em&gt;world&lt;/em&gt; (plywood) is rotated relative to the &lt;em&gt;camera&lt;/em&gt; by $E^{-1}=E^T$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cosine terms fall on the diagonal while sine terms are all skew symmetric off-diagonal, so transposing the rotation matrix is equivalent to using a negated rotation angle. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That is, the degree to which the normal of the plywood plane is rotated will be given by some rotation matrix $E'$, where $E'=E^{-1}$ and where $E$ is the rotation matrix of the camera. Using the inverse/transpose property of the rotation matrix, $E(\theta)^{-1}=E(\theta)^T=E(-\theta)=E'$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Phew!&lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2015-06-14T11:25:50.467" LastActivityDate="2015-06-14T11:25:50.467" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="7496" PostTypeId="2" ParentId="7494" CreationDate="2015-06-14T03:23:13.803" Score="3" Body="&lt;p&gt;Like jwpat said, I think the only package you'll find for what you're looking for is active suspension, but good luck getting official support from the manufacturer unless you have some automotive OEM sponsorship. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that jwpat linked to &lt;em&gt;adaptive&lt;/em&gt; suspension parts, which vary damping as mentioned, not &lt;em&gt;active&lt;/em&gt; suspension, which uses an actuator to do things more similar to what you are looking for. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For guidelines on building your own, I would look at available literature on &lt;a href=&quot;http://machinedesign.com/springs/exclusive-interview-gill-pratt-how-compliant-actuators-revolutionized-robotics&quot; rel=&quot;nofollow&quot;&gt;series elastic actuators&lt;/a&gt;, which are essentially linear actuators that drive springs. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Essentially, you use the (linear fixed) spring constant and a desired force to estimate what the spring compression should be (this would be your input), then you use position feedback on the spring to get actual spring compression. Use PID control or whatever else you like to drive the spring compression to yield the desired force. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that you get to pick the force, so if you want the spring to be nonlinear or of varying constants you can just choose what you want. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;All of this assumes what you have asked for is the best solution to your problem. What effect are you going for that you need variable spring constants? Are you looking for a constant force output or some kind of constant displacement? Are you looking for a nonlinear spring or user-selectable springs? More information on your problem will let us give you better help. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hydraulics can also give you what you're looking for, but, even though you asked for electro-mechanical, hydraulics are usually out of the scope of most people's projects. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-06-14T03:23:13.803" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7497" PostTypeId="1" CreationDate="2015-06-13T21:25:12.343" Score="1" ViewCount="1067" Body="&lt;p&gt;I would like to build a small two-wheeled robot similar to the one shown &lt;a href=&quot;http://www.instructables.com/id/Mini-2-wheel-robot-with-IR-sensor-weight-14gr-and-/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to keep the robot small, I intend to use two coreless micro motors like the one shown bellow. The power source would be 2 AAA or AA batteries, in order to reach 3 V. These batteries would represent the bulk of the weight of the robot. The rest of the robot would be virtually weightless.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The specifications of one of such motor are:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Motor diameter: 6 mm&#xA;Motor length: 12 mm&#xA;Output shaft: 0.8 mm&#xA;Output shaft length: 4 mm&#xA;Voltage: 3 V &#xA;Current: 17 mA (stall 120 mA) &#xA;Frequency​​: 22000 RPM &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;My question is if small DC motors of this type have enough torque to even make the robot start moving. I have been unable to find torque info on these kind of motors and I suspect the weight of the robot could be too much for them to handle. Do you know the typical torque of such motor? Is there another type of (cheap) motor more appropriate for this project?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/E7PhAm.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="9918" OwnerDisplayName="Gonçalo Ribeiro" LastEditorUserId="9918" LastEditDate="2015-06-14T14:18:53.870" LastActivityDate="2015-07-19T01:03:42.000" Title="Torque of coreless DC micro motor" Tags="&lt;mobile-robot&gt;&lt;motor&gt;&lt;wheeled-robot&gt;&lt;torque&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="7498" PostTypeId="1" AcceptedAnswerId="7505" CreationDate="2015-06-14T13:30:00.743" Score="1" ViewCount="43" Body="&lt;p&gt;I am combining two position measurements of a ball from two sensors in real time to obtain one triangulated position in x,y,z coordinates. As the data exchange of the measurements carries some latency, the data has to be extrapolated be able to obtain the current position. Due to extrapolation an error appears in the triangulated data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that when the ball is in the air, the velocity of the ball should be constant in x and y directions and the velocity in the z direction should decay with g. The velocities in x and y however oscillate as function of time around a mean value which is the actual x respectively y velocity. The same goes for when I compute the acceleration in the z direction. It oscillates as function of time around g.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given that I know how the ball should behave, i.e. that vx and vy should be constant and that the acceleration in the z direction should be z, how can I impose these conditions to better estimate the triangulated position? &lt;/p&gt;&#xA;" OwnerUserId="9917" LastActivityDate="2015-07-16T03:01:18.493" Title="Measurement and physics model fusion" Tags="&lt;sensor-fusion&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7499" PostTypeId="1" AcceptedAnswerId="7501" CreationDate="2015-06-15T03:56:34.027" Score="0" ViewCount="215" Body="&lt;p&gt;Can I use Bipolar stepper motor driver to drive Unipolar motor in Unipolar configuration ?&lt;/p&gt;&#xA;" OwnerUserId="8856" LastActivityDate="2015-06-15T14:30:53.863" Title="Can I use Bipolar stepper motor driver to drive Unipolar motor in Unipolar configuration?" Tags="&lt;stepper-motor&gt;&lt;stepper-driver&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7501" PostTypeId="2" ParentId="7499" CreationDate="2015-06-15T14:10:44.730" Score="0" Body="&lt;p&gt;It depends on the bipolar motor driver you're using.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A driver chip like the L293D (or various more powerful equivalents) would usually be configured as two full H-bridges to drive two simple DC motors forwards or backwards - or to drive the two coils of a bipolar stepper motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However it can be configured as four half-bridge drivers, to independently drive four coils in simple on/off mode.  So these could be the four coils of a unipolar stepper.  For example there's a description here:&#xA;&lt;a href=&quot;http://mechatronics.mech.northwestern.edu/design_ref/actuators/stepper_drive1.html&quot; rel=&quot;nofollow&quot;&gt;http://mechatronics.mech.northwestern.edu/design_ref/actuators/stepper_drive1.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If on the other hand you are using a ready-made driver that doesn't allow wiring changes, it may not be possible to drive unipolar steppers with it.  So if you have a specific driver in mind, I'd recommend first looking for a datasheet, or manufacturer's advice, to see if this is possible.&lt;/p&gt;&#xA;" OwnerUserId="9578" LastEditorUserId="9578" LastEditDate="2015-06-15T14:30:53.863" LastActivityDate="2015-06-15T14:30:53.863" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7502" PostTypeId="1" CreationDate="2015-06-15T14:14:17.620" Score="9" ViewCount="15404" Body="&lt;p&gt;I am trying to control the velocity+position of a linear actuator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At this moment I am able to control the position or the velocity. But I'm trying to control both. What the control has to do: Let the linear actuator drive to a position i.e. 0 to 100 cm with a constant velocity of 1cm/s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I control the actuator using a PWM signal. And I measure the velocity and position using a position sensor on the shaft.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What kind of control is preferred, PID in cascade?&#xA;If so,what would the code look like.&#xA;Any other kind of control would function better?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT:&#xA;A more describing picture.&#xA;&lt;img src=&quot;https://i.stack.imgur.com/jwmYH.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want a Velocity controlled Position controller.&#xA;Hopefully this will make it clear&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My first try is with a trapezoid wave. Maybe there is an easy way without to much calculation power to change it a s-curbe. Then the accelartion/jerk will be alot smoother.&#xA;        I let the microcontroller calculate 3 different formulas afterwards it will calculate it using loop iteration. This way I can use one PID for the position. The parameters in the following code will fictional:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    AccelerationLoops: 5                            //[Loops]&#xA;Velocity:      100                          //[mm/s]&#xA;DeltaPosition:     7.5                          //[mm]&#xA;Looptime:      5                            //[ms]&#xA;Loopfactor:        1000 / Looptime                  //[-]&#xA;VelocityLoop:      Velocity  /Loopfactor                //[mm/loop]&#xA;VelocityFactor:    VelocityLoop * .5 / AccelerationLoops        //[mm/loop]  (.5 found by integration)&#xA;Loops:         DeltaPosition / VelocityLoop / AccelartionLoops  //[Loops]&#xA;&#xA;----Formula---&#xA;Formula1:      VelocityFactor * x^2&#xA;LastF1:        Last value of Formula1 Formula1(5)&#xA;&#xA;Formula2:      VelocityLoop * x - LastF1&#xA;&#xA;Formula3:      VelocityFactor * (Loops - x)^2 + DeltaPosition)&#xA;&#xA;Using the parameters of above it will generate the following setpoint :&#xA;0   0,00&#xA;1   0,05&#xA;2   0,20&#xA;3   0,45&#xA;4   0,80&#xA;5   1,25&#xA;6   1,75&#xA;7   2,25&#xA;8   2,75&#xA;9   3,25&#xA;10  3,75&#xA;11  4,25&#xA;12  4,75&#xA;13  5,25&#xA;14  5,75&#xA;15  6,25&#xA;16  6,70&#xA;17  7,05&#xA;18  7,30&#xA;19  7,45&#xA;20  7,50&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;A big problem with the code above is that the amount of accelartion loops is a constant. It can not be changed except when you already know the amount of loops it will take.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I will be using two separate arduinos, they will be connected using a CAN-bus connection. Anyway, they won't communicate through it unless the load becomes too high. This will make Master/Slave impossible. Also the system has to be modular: adding another actuator to circuit won't be a problem. The actuator is speed controlled by using a PWM signal. The linear sensor will deliver a 0-10v signal which i will reduce to 0-5v by a simple voltage divider. The loop will be around 5 to 10 ms, will depend on the maximum looptime.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Arduino has a 10-bit(1023) ADC but use of oversampling I will probably try to increase it to 12-bit. To not decrease the reading speed I will decrease the prescaler of the ADC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PWM output is 8-bit(255), I am trying to find a way to further increase. Because I think 255 steps are too low for my application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because the Arduino has limit internal memory, pre calculating all the positions is impossible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you all for the help so far!&lt;/p&gt;&#xA;" OwnerUserId="9921" LastEditorUserId="9921" LastEditDate="2015-06-17T12:56:49.483" LastActivityDate="2016-07-18T19:56:34.117" Title="Control both Velocity and Position (Linear actuator)" Tags="&lt;arduino&gt;&lt;pid&gt;&lt;microcontroller&gt;" AnswerCount="3" CommentCount="8" FavoriteCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="7503" PostTypeId="2" ParentId="7502" CreationDate="2015-06-15T14:54:50.280" Score="2" Body="&lt;p&gt;I'd say this problem is very much similar to &lt;a href=&quot;https://robotics.stackexchange.com/questions/5260/the-aerial-refueling-problem-sketch-of-a-feedback-controller&quot;&gt;The aerial refueling problem: sketch of a feedback controller&lt;/a&gt; whose one possible solution is then explained in &lt;a href=&quot;https://robotics.stackexchange.com/a/5263/6941&quot;&gt;https://robotics.stackexchange.com/a/5263/6941&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;EDIT&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The minimum-jerk position profile (i.e. the s-curve) that lets the system go from the initial position $x_0$ to the desired position $x_d$ in $T$ seconds is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;x\left(t\right)=x_0+\left(x_d-x_0\right) \cdot \left(10\left(\frac{t}{T}\right)^3 - 15\left(\frac{t}{T}\right)^4 + 6\left(\frac{t}{T}\right)^5\right),&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $t \in \left[0,T\right]$ specifies the time granularity, thus the number of set-points.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, $x\left(t\right)$ will be the reference for the position PID.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2015-06-17T13:50:18.823" CommentCount="11" ContentLicense="CC BY-SA 3.0" />
  <row Id="7504" PostTypeId="2" ParentId="7502" CreationDate="2015-06-15T18:15:01.147" Score="-2" Body="&lt;p&gt;I don't think you can control speed and position at the same time - what happens if you don't change the position reference but you have some non-zero speed reference? Did you want the output to stay still or go to the command speed? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think what you are looking for is a software-imposed actuator authority limit. In this case you can just limit the output of the controller. I don't know what your actuator inputs are, but for the controller I would try something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;dT = sampleTime;&#xA;input = positionRef;&#xA;feedback = positionFbk;&#xA;outputLimit = actuatorSpeedLimit;&#xA;&#xA;errorP = input - feedback;&#xA;errorI = errorI + errorP;&#xA;errorD = (errorP - prevError)/dT;&#xA;prevError = errorP;&#xA;&#xA;output = kP * errorP + kI * errorI + kD * errorD;&#xA;&#xA;if abs(output) &amp;gt; outputLimit&#xA;  output = sign(output) * outputLimit;&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Now, as I mentioned, I don't know what your inputs to the actuator are. The model above assumes the output of the PID controller is a reference speed that you pass to the actuator. You cap the speed reference you pass to the actuator giving an electronic form of actuator saturation. The controller will continue to command higher and higher velocities until you reach a position close to the reference position, at which point it will begin to back off. It will back off below the &lt;code&gt;outputLimit&lt;/code&gt; at which point the electronic saturation eases and control resumes like normal. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your actuator uses a position input and it determines its  own speed response, then the actuator probably uses a proportional controller, where the actuator speed it utilizes is given by:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;vActuator = $(1/\tau)$(positionRef - positionFbk);&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where here $\tau$ is the actuator's &lt;a href=&quot;https://en.wikipedia.org/wiki/Time_constant&quot; rel=&quot;nofollow&quot;&gt;time constant&lt;/a&gt;. In this case you can estimate the actuator speed and throttle your position that you pass to the actuator, provided you can &lt;a href=&quot;http://www.facstaff.bucknell.edu/mastascu/eLessonsHTML/SysDyn/SysDyn3TCBasic.htm&quot; rel=&quot;nofollow&quot;&gt;measure or estimate the time constant&lt;/a&gt;. Resuming the above code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;output = kP * errorP + kI * errorI + kD * errorD;&#xA;&#xA;estVelocity = (1/\tau)*(output - feedback);&#xA;&#xA;if abs(estVelocity) &amp;gt; actuatorSpeedLimit&#xA;  output = (\tau) * actuatorSpeedLimit + feedback;&#xA;  output = sign(estVelocity) * output;&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Where again, in this example, your controller output is a position you pass to the actuator instead of a speed you pass to the actuator. You can do the same if you provide an acceleration to the actuator, but I don't think I've ever seen a linear actuator accept an acceleration as an input. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;:EDIT:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Despite the fact that this question has been marked as answered (and I've been downvoted!), I would add that you could split the controls.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You are going for synchronized actuators, so have one actuator use PID to get to a command setpoint and the other actuator use PID to adjust its speed based on the first one. This sets up a master/slave or leader/follower, where the master follows the position reference and the slave follows the master. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As with any other PID controller, you can tune the slave to whatever threshold you want to achieve your desired speed difference tolerance. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2015-06-16T20:02:27.100" LastActivityDate="2015-06-16T20:02:27.100" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="7505" PostTypeId="2" ParentId="7498" CreationDate="2015-06-16T02:57:48.430" Score="2" Body="&lt;p&gt;Kalmnan filters are typically used for sensor fusion. You create a model for what you expect the process to look like, use your sensors as inputs, and the output is the filtered estimate. I'm not going to go over implementation in detail as there is &lt;a href=&quot;http://www.cs.unc.edu/~welch/kalman/&quot; rel=&quot;nofollow&quot;&gt;plenty of information about these filters&lt;/a&gt; available online; I hope this points you in the right direction and if you have a &lt;em&gt;specific&lt;/em&gt; question about it then by all means make a new question and I or someone else here can answer it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm interested in your use of two sensors to triangulate (trilaterate) a ball. How are you using two sensors to fix a 3 dimensional coordinate? &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-06-16T02:57:48.430" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7506" PostTypeId="1" AcceptedAnswerId="7508" CreationDate="2015-06-16T03:44:36.430" Score="1" ViewCount="650" Body="&lt;p&gt;I'm working on an robot that would be able to navigate through a maze, avoid obstacles and identify some of the objects (Boxes in which it has to pot the balls)  in it. I have a monochromatic bitmap of the maze, that is supposed to be used in the robot navigation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Up till now, I have converted/read the bitmap image of the maze into a 2D array of bits. Right now I am writing a code that should convert the 2D array (that represents the maze) into a connectivity map so that I could apply a path planning algorithm on it. Mr. @Chuck has helped me by providing a code in MATLAB. i have converted that code into C++, however the code isn't providing the right output. Kindly see the code and tell me what I am doing wrong.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am sharing the link to the 2D array that has been made, the MATLAB code, and my code in C++ to convert the array into a connectivity map.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Link to the 2D array:-&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://drive.google.com/file/d/0BwUKS98DxycUZDZwTVYzY0lueFU/view?usp=sharing&quot; rel=&quot;nofollow&quot;&gt;https://drive.google.com/file/d/0BwUKS98DxycUZDZwTVYzY0lueFU/view?usp=sharing&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;MATLAB CODE:-&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Map = load(map.mat);&#xA;nRows = size(Map,1);&#xA;nCols = size(Map,2);&#xA;mapSize = size(Map);&#xA;N = numel(Map);&#xA;Digraph = zeros(N, N);&#xA;&#xA;for i = 1:nRows&#xA;  for j = 1:nCols&#xA;    currentPos = sub2ind(mapSize,i,j);&#xA;    % left neighbor, if it exists&#xA;    if (j-1)&amp;gt; 0&#xA;      destPos = sub2ind (mapSize,i,j-1);&#xA;      Digraph(currentPos,destPos) = Map(currentPos)*Map(destPos);&#xA;    end&#xA;    % right neighbor, if it exists&#xA;    if (j+1)&amp;lt;=nCols&#xA;      destPos = sub2ind (mapSize,i,j+1);&#xA;      Digraph(currentPos,destPos) = Map(currentPos)*Map(destPos);&#xA;    end&#xA;    % top neighbor, if it exists&#xA;    if (i-1)&amp;gt; 0&#xA;      destPos = sub2ind (mapSize,i-1,j);&#xA;      Digraph(currentPos,destPos) = Map(currentPos)*Map(destPos);&#xA;    end&#xA;    % bottom neighbor, if it exists&#xA;    if (i+1)&amp;lt;=nRows&#xA;      destPos = sub2ind (mapSize,i+1,j);&#xA;      Digraph(currentPos,destPos) = Map(currentPos)*Map(destPos);&#xA;    end&#xA;  end&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Code in C++:-&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;int **digraph = NULL;&#xA;digraph = new int *[6144];&#xA;&#xA;for (int i = 0; i &amp;lt; 6144; i++)&#xA;{&#xA;    digraph[i] = new int[6144];&#xA;}&#xA;&#xA;for (j = 0; j &amp;lt; 96; j++)&#xA;{&#xA;    for (z = 0; z &amp;lt; 64; z++)&#xA;    {&#xA;        currentPos = sub2ind[j][z];&#xA;        digraph[currentPos][currentPos] = 0; //------NEW ADDITION-----------&#xA;&#xA;    if ((z - 1) &amp;gt;= 0)&#xA;        {&#xA;            destPos = sub2ind[j][z - 1];&#xA;            digraph[currentPos][destPos] = bitarray[j][z] * bitarray[j][z - 1];&#xA;        }&#xA;&#xA;    if ((z + 1) &amp;lt; 64)&#xA;        {&#xA;            destPos = sub2ind[j][z + 1];&#xA;            digraph[currentPos][destPos] = bitarray[j][z] * bitarray[j][z + 1];&#xA;        }&#xA;&#xA;    if ((j - 1) &amp;gt;= 0)&#xA;        {&#xA;            destPos = sub2ind[j - 1][z];&#xA;            digraph[currentPos][destPos] = bitarray[j][z] * bitarray[j - 1][z];&#xA;        }&#xA;&#xA;    if ((j + 1) &amp;lt; 96)&#xA;        {&#xA;            destPos = sub2ind[j + 1][z];&#xA;            digraph[currentPos][destPos] = bitarray[j][z] * bitarray[j + 1][z];&#xA;        }&#xA;    }&#xA;&#xA;}&#xA;&#xA;ofstream connectivityMap;&#xA;connectivityMap.open(&quot;diGraph.txt&quot;);&#xA;&#xA;for (int l = 0; j &amp;lt; 100; l++) // printing only 100 elements&#xA;{&#xA;    for (int k = 0; k &amp;lt; 100; k++)&#xA;    {&#xA;        connectivityMap &amp;lt;&amp;lt; digraph[l][k] &amp;lt;&amp;lt; &quot; &quot;;&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="9429" LastEditorUserId="9429" LastEditDate="2015-06-27T08:59:56.580" LastActivityDate="2015-06-27T08:59:56.580" Title="Converting a 2D array of bits to a connectivity map (Code Debugging)" Tags="&lt;mobile-robot&gt;&lt;localization&gt;&lt;mapping&gt;&lt;planning&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7507" PostTypeId="1" CreationDate="2015-06-16T12:13:15.600" Score="0" ViewCount="33" Body="&lt;p&gt;I want to design some circuits of my own. My area of expertise is in Computer Science Engineering. I have listed out the components which are essential in the circuit. I want a software which can be used to design and simulate circuits for real time projects. Please suggest me the best among them. Thank you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;@AkhilRajagopal&lt;/p&gt;&#xA;" OwnerUserId="9928" LastActivityDate="2015-06-16T14:34:47.303" Title="Circuit Design and Simulation" Tags="&lt;software&gt;&lt;electronics&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2015-06-16T20:45:29.507" ContentLicense="CC BY-SA 3.0" />
  <row Id="7508" PostTypeId="2" ParentId="7506" CreationDate="2015-06-16T13:48:34.953" Score="1" Body="&lt;p&gt;What is the problem you're having with the file?&lt;/p&gt;&#xA;&lt;p&gt;The only two things I notice off the bat are that you aren't outputting an endline character between rows on your output stream and that it looks like you're initializing the digraph variable in an odd manner. As I mentioned previously, it's been a long time since I've used c++, but could you not just call &lt;code&gt;int digraph[6144][6144] = {0};&lt;/code&gt;?&lt;/p&gt;&#xA;&lt;p&gt;For the endline character,&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;for (int l = 0; j &amp;lt; 300; l++) // printing only 300 elements&#xA;{&#xA;    for (int k = 0; k &amp;lt; 300; k++)&#xA;    {&#xA;        connectivityMap &amp;lt;&amp;lt; digraph[l][k] &amp;lt;&amp;lt; &amp;quot; &amp;quot;;&#xA;    }&#xA;//End the line when you're done outputting rows&#xA;connectivityMap &amp;lt;&amp;lt; endl;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Lastly, note that you're only outputting the first 300 columns of the first 300 rows - you're looking at the upper left 300x300 portion of the digraph. &lt;code&gt;digraph[a][b]&lt;/code&gt; will equal 1 if &lt;code&gt;a&lt;/code&gt; and &lt;code&gt;b&lt;/code&gt; are connected; as you have a straightforward map this means it will equal 1 if they are neighbors and neither is a wall.&lt;/p&gt;&#xA;&lt;p&gt;:EDIT:&lt;/p&gt;&#xA;&lt;p&gt;I think I see most of the problems you're having with this.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Here is the map image I made from your map text file. Note that you have a lot of pixels in the map, but it's really a low-resolution map that has been blown up.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/SFPuf.png&quot; alt=&quot;map&quot; /&gt;&lt;/p&gt;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;Here is a map image I made that is functionally equivalent but much smaller in resolution. Instead of having 6144 points, the small map has 84. I'm not sure how the black squares with the white 'X's should be treated, so I counted them as walls, though I think it would probably make more sense if they were paths and your start/end position. You should replace the 0's with 1's in those locations if this is the case.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/eenRZ.png&quot; alt=&quot;small map&quot; /&gt;&lt;/p&gt;&#xA;&lt;ol start=&quot;3&quot;&gt;&#xA;&lt;li&gt;You are getting entries on the diagonal in your digraph because your map is very basic. Point 1 connects to point 2, point 2 to 3, then 3 to 4, etc., so you wind up with 1's (path exists) on the diagonals. Matlab has a function called &lt;code&gt;imwrite&lt;/code&gt; that you can use to generate images from matrices; I used this function to generate the digraph images below.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/xgLo9.png&quot; alt=&quot;Small Digraph&quot; /&gt;&#xA;&lt;img src=&quot;https://i.stack.imgur.com/nizJe.png&quot; alt=&quot;Large Digraph&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;Aside from the scale, the small digraph and large digraph have the same data regarding path connectivity. If you want to avoid keeping such a large, sparse matrix (it's all zeros on the upper/lower triangles because you don't have any paths from start to the middle of the map or start to finish!) then you can check out some of the other methods of map representation in &lt;a href=&quot;https://www.cs.princeton.edu/%7Ers/AlgsDS07/13DirectedGraphs.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this document on creating directed graphs&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Lastly, &lt;a href=&quot;https://drive.google.com/file/d/0B26_5S6Jh4mYWXZ2Sl9mclcxZlU/view?usp=sharing&quot; rel=&quot;nofollow noreferrer&quot;&gt;here's a link to the Matlab script I wrote&lt;/a&gt; to generate the images and digraphs.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2015-06-24T12:50:41.160" CommentCount="20" ContentLicense="CC BY-SA 3.0" />
  <row Id="7509" PostTypeId="2" ParentId="7507" CreationDate="2015-06-16T14:34:47.303" Score="1" Body="&lt;p&gt;I usually use LTspice, which uses the same physical models as the alternatives listed by Chuck. LTSpice models can be directly imported to Eagle, which is somehow state of the art programm to PCB-design.&lt;/p&gt;&#xA;" OwnerUserId="6911" LastActivityDate="2015-06-16T14:34:47.303" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7510" PostTypeId="1" AcceptedAnswerId="7514" CreationDate="2015-06-16T17:43:55.300" Score="1" ViewCount="83" Body="&lt;p&gt;I have a sensor reduction model which gives me a velocity estimate of a suspension system(velocity 1) .&lt;/p&gt;&#xA;&lt;p&gt;This suspension system estimate velocity is used to calculate another velocity(velocity 2) via a transfer function/plant model.&lt;/p&gt;&#xA;&lt;p&gt;Can I use velocity 2 to improve my velocity estimate (velocity 1) through Kalman filtering or through some feedback system.??&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/fF0tc.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;V1 is &amp;quot;estimated&amp;quot; using these two sensors.That is fed into a geroter pump (Fs in diagram) which pumps fluid to manupulate the damper viscous fluid thereby applying resistance to the forces applied to the car body. There is no problem did I have an velocity sensor on the spring.I could measure it accurately but now I only have an estimate. I am trying to make the estimate better.Assume I have a model/plant or transfer function already that gives me the V2 given a V1.&lt;/p&gt;&#xA;" OwnerUserId="9932" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2015-06-16T21:23:31.210" Title="Improving Velocity estimation" Tags="&lt;control&gt;&lt;sensors&gt;&lt;pid&gt;&lt;kalman-filter&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7511" PostTypeId="2" ParentId="7470" CreationDate="2015-06-16T17:58:49.053" Score="3" Body="&lt;p&gt;I believe kinematic decoupling used to be the standard procedure for 6 DOF arms.  (6R with spherical wrist).  Where you would solve the 3 DOF position IK first, then 3 DOF orientation IK.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have a spherical wrist, I don't think there is any reason why you &lt;em&gt;can't&lt;/em&gt; decouple your problem like this.  However, I assume you now have a 4 DOF arm to reach a 3D point.  You have 1 redundancy, so your IK will probably give you a number of solutions.  So you should do your orientation IK on top of all these...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That being said, i don't believe anyone does it like this anymore.  I know at least my kinematics library of choice (&lt;a href=&quot;http://openrave.org/&quot; rel=&quot;nofollow&quot;&gt;OpenRave&lt;/a&gt;) can solve 7 DOF IK problems.  It does so by discretizing the extra DOF(s).  &lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-06-16T17:58:49.053" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7512" PostTypeId="2" ParentId="7502" CreationDate="2015-06-16T18:49:02.883" Score="8" Body="&lt;p&gt;The first thing to realise is that this is not a &lt;em&gt;control&lt;/em&gt; problem, this is a &lt;em&gt;planning&lt;/em&gt; problem. If you conflate the two, you are making life much more complex than it needs to be.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Solution - Motion planning&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The traditional way to achieve what you want is to have two loops. The outer planning/supervisory loop generates &lt;strong&gt;way-points&lt;/strong&gt; for specific points in time, while the lower level PID loop generates the appropriate PWM signals to keep the motor as close as possible to those way-points.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The more way-points you generate, the more closely you can track both velocity and position. Older systems often ran their floating point planning loop at a much lower rate than their integer PID loop, but these days even modest micro-controllers have more than enough compute power to do full trajectory planning of multiple axes at the PID control rate.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Simple example&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;While the example you drew is an &lt;a href=&quot;http://www.roboticsys.com/support/Content/Topics/SCurveMotionProfile.htm&quot; rel=&quot;noreferrer&quot;&gt;s-curve trajectory profile&lt;/a&gt;, it is easier to explain the principles by looking at a simple &lt;a href=&quot;http://www.edn.com/design/integrated-circuit-design/4363569/Implement-trapezoidal-velocity-profiles-in-software&quot; rel=&quot;noreferrer&quot;&gt;trapezoidal profile&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's say you want to move from 0 to 36mm in 9 seconds with cruise  velocity (feed rate) of 6mm/s and an acceleration of 2mm/s/s. You might plan a move in 9 steps as follows:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;\begin{array} {|r|r|}&#xA;\hline&#xA;time        &amp;amp; t &amp;amp; 0 &amp;amp; 1 &amp;amp; 2 &amp;amp; 3 &amp;amp; 4 &amp;amp; 5 &amp;amp; 6 &amp;amp; 7 &amp;amp; 8 &amp;amp; 9\\&#xA;\hline&#xA;acceleration&amp;amp; a &amp;amp; 0 &amp;amp; 2 &amp;amp; 2 &amp;amp; 2 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; -2 &amp;amp; -2 &amp;amp; -2\\&#xA;velocity    &amp;amp; v &amp;amp; 0 &amp;amp; 2 &amp;amp; 4 &amp;amp; 6 &amp;amp; 6 &amp;amp; 6 &amp;amp; 6 &amp;amp; 4 &amp;amp; 2 &amp;amp; 0\\&#xA;position    &amp;amp; d &amp;amp; 0 &amp;amp; 1 &amp;amp; 4 &amp;amp; 9 &amp;amp; 15 &amp;amp; 21 &amp;amp; 27 &amp;amp; 32 &amp;amp; 35 &amp;amp; 36\\&#xA;\hline&#xA;\end{array}&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this case, at time $t=0$ you would inject position $d=1$ into your PID (plus acceleration $a=2$ and velocity $v=1$ if your PID loop has acceleration and velocity feed forward). At $t=1$ you would inject $d=4$ into your PID and so on until at $t=8$ you command the PID to move to the final position $d=36$, then at $t=9$ the system should have stopped moving.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Implementation&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The limitations of your system will limit your implementation.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If you are CPU limited on your micro-controller but have plenty of memory to store path profiles, you may want to pre-calculate the way-points.&lt;/li&gt;&#xA;&lt;li&gt;If you have plenty of CPU, you may want to calculate way-points on the fly.&lt;/li&gt;&#xA;&lt;li&gt;If you are limited in both CPU and memory, you may need to either lower your way-point generation frequency or use &lt;a href=&quot;https://en.wikipedia.org/wiki/Interval_arithmetic&quot; rel=&quot;noreferrer&quot;&gt;integer interval arithmetic&lt;/a&gt; to calculate approximation more quickly.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2&gt;Complications&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;If you find that your actuator jumps between way-points rather than moving smoothly, then you need to either reduce the time between way-points or optimise (tune) your PID loop for your motion (for example, reduce the proportional gain, increase derivative gain and/or increase the velocity/acceleration feed-forward gains). The moment you start using your PID loop to tune for expected motion however, you are making the motion worse for other kinds of move.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I see from comments that you want two linear actuators to match each other. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this case, while the PID loops for each actuator will need to be run independently, the way-point inputs into those PID loops can be shared.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How closely each servo loop follow each other will be determined by how closely they follow the idealised trajectory as defined by the way-points.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your individual PID loops are tuned well enough, and you set sensible limits on &lt;a href=&quot;http://www.newport.com/Control-Theory-Terminology/178319/1033/content.aspx&quot; rel=&quot;noreferrer&quot;&gt;following error&lt;/a&gt;, the overall error between the two actuators should be at most the sum of their following errors, and is likely to be much less on average.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sub&gt;By the way, my experience on this comes from writing the control software for a 2x2m dual gantry cartesian robot. Even though we were accelerating the gantries up to 1m/s at 1g, we rarely had a following error of more than a few hundred microns, &amp;amp; the error between the two ends of the gantry was usually an order of magnitude lower. If we had used s-curve rather than trapezoidal move profiles, our errors would probably have been an order of magnitude lower still, but this was the 90's and micro-controllers had much lower floating point performance, so we went for simple &amp;amp; fast over complex &amp;amp; slow.&lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="37" LastEditDate="2016-07-18T19:56:34.117" LastActivityDate="2016-07-18T19:56:34.117" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7513" PostTypeId="1" CreationDate="2015-06-16T19:16:04.470" Score="2" ViewCount="1796" Body="&lt;p&gt;What are these frequencies used for within the drone technology, and why these values?&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;35 MHz&lt;/li&gt;&#xA;&lt;li&gt;433 MHz&lt;/li&gt;&#xA;&lt;li&gt;868 MHz&lt;/li&gt;&#xA;&lt;li&gt;2.4 GHz&lt;/li&gt;&#xA;&lt;li&gt;5.8 GHz&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="9933" LastEditorUserId="9176" LastEditDate="2015-06-26T19:37:22.063" LastActivityDate="2015-06-26T19:37:22.063" Title="What are the frequencies used for within drones?" Tags="&lt;quadcopter&gt;&lt;wireless&gt;&lt;radio-control&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7514" PostTypeId="2" ParentId="7510" CreationDate="2015-06-16T19:20:26.713" Score="2" Body="&lt;p&gt;If you have transfer function such that &#xA;$$&#xA;\frac{V_2}{V_1} = H \\&#xA;V_2 = H V_1 \\&#xA;$$&#xA;Then wouldn't your estimate of $V_1$ be given by inverting the transfer function?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;V_1 = H^{-1} V_2&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is that you can't use this to measure $V_1$, and here's why:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your measurements are an estimate of $V_1$. &#xA;$$&#xA;V_{est} = f(V_1)&#xA;$$&#xA;You feed that estimate into the pump and get a flow output. &#xA;$$&#xA;V_2 = H V_{est}&#xA;$$&#xA;Now, if you invert the plant, you do &lt;strong&gt;NOT&lt;/strong&gt; get a measurement of $V_1$, you get a measurement of your original estimate. &#xA;$$&#xA;V_{est} = H^{-1} V_2&#xA;$$&#xA;It's like you are trying to draw your own ruler and then use that ruler to see if you drew the ruler correctly. It's a circular definition that's not going to get you anything useful.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-06-16T19:20:26.713" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="7515" PostTypeId="2" ParentId="7513" CreationDate="2015-06-16T21:14:41.080" Score="2" Body="&lt;h2&gt;Spectrum licensing&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;There are only a limited number of frequencies in unlicensed bands which can be used for radio control, and different countries have different licensed bands for different uses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For instance:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;35MHz is available for RC use in many countries in Europe, but other countries use a whole variety of other frequencies below 100MHz.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I found a wealth of information on this at the &lt;a href=&quot;http://www.ukrcc.org/index.html&quot; rel=&quot;nofollow&quot;&gt;UK Radio Control Council&lt;/a&gt; website.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;433MHz is in the &lt;a href=&quot;https://en.wikipedia.org/wiki/ISM_band&quot; rel=&quot;nofollow&quot;&gt;ISM Band&lt;/a&gt; in &lt;a href=&quot;https://en.wikipedia.org/wiki/International_Telecommunication_Union_region&quot; rel=&quot;nofollow&quot;&gt;Region 1&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;That's the &quot;industrial, scientific and medical radio bands&quot; for use in &quot;Europe, Africa, the Middle East west of the Persian Gulf including Iraq, the former Soviet Union and Mongolia&quot;. &lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;868MHz is allowed for &quot;Non-Specific Short Range Devices in Europe&quot; within certain limits.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Finally, both 2.4GHz and 5.8GHz are &lt;a href=&quot;https://en.wikipedia.org/wiki/ISM_band&quot; rel=&quot;nofollow&quot;&gt;ISM Band&lt;/a&gt;s with worldwide availability.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I found much of this information in the &lt;a href=&quot;http://www.ti.com/lit/an/swra048/swra048.pdf&quot; rel=&quot;nofollow&quot;&gt;ISM-Band and Short Range Device Regulatory Compliance Overview&lt;/a&gt; document from Texas Instruments.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Frequency characteristics&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;In terms of actual use, different frequencies have different advantages and disadvantages. So in general:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Lower frequencies require a larger antenna and generally have a lower data rate, but require less power and have fewer line of sight issues.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Higher frequencies have more bandwidth available, so you can get more/wider channels and a higher data rate (see the &lt;a href=&quot;https://en.wikipedia.org/wiki/Shannon%E2%80%93Hartley_theorem#Statement_of_the_theorem&quot; rel=&quot;nofollow&quot;&gt;Shannon Hartley theorem&lt;/a&gt;) and you can can use smaller antenna, but line of sight starts to become a major issue, and you need more power for the same range.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="37" LastEditorUserId="37" LastEditDate="2015-06-17T19:43:36.957" LastActivityDate="2015-06-17T19:43:36.957" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7517" PostTypeId="1" AcceptedAnswerId="7566" CreationDate="2015-06-17T07:52:19.873" Score="0" ViewCount="366" Body="&lt;p&gt;I am trying to understand the implementation of Extended Kalman Filter for &lt;a href=&quot;http://www.doc.ic.ac.uk/~ajd/Publications/davison_iccv2003.pdf&quot; rel=&quot;nofollow&quot; title=&quot;Paper describing MonoSLAM&quot;&gt;SLAM using a single, agile RGB camera.&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The vector describing the camera pose is &#xA;$$&#xA;\begin{pmatrix}&#xA;r^W \\&#xA;q^W  \\&#xA;V^W \\&#xA;\omega^R \\&#xA;a^W \\&#xA;\alpha^R&#xA;\end{pmatrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;$r^W$ :   3D coordinates of camera w.r.t world&lt;/li&gt;&#xA;&lt;li&gt;$q^W$ :   unit quaternion describing camera pose w.r.t world&lt;/li&gt;&#xA;&lt;li&gt;$V^W$ :   linear velocity along three coordinate frames, w.r.t world&lt;/li&gt;&#xA;&lt;li&gt;$\omega$ :   angular velocity w.r.t body frame of camera&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The feature vector set is described as &#xA;$$&#xA;\begin{pmatrix}&#xA;y_1 \\&#xA;y_2  \\&#xA;\vdots \\&#xA;y_n&#xA;\end{pmatrix}&#xA;$$&#xA;where, each feature point is described using XYZ parameters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the EKF acting under an unknown linear and angular acceleration $[A^W,\psi^R] $ , the process model used for predicting the next state is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{pmatrix}&#xA;r^W + V^W\Delta t + \frac{1}{2}\bigl(a^W + A^W\bigr)\Delta t^2 \\&#xA;q^W \bigotimes q^W\bigl(\omega^R\Delta t + \frac{1}{2}\bigl(\alpha^R + \psi^R\bigr)\Delta t^2\bigr)   \\&#xA;V^W + \bigl(a^W + A^W\bigr)\Delta t\\&#xA;\omega^R + \bigl(\alpha^R + \psi^R\bigr)\Delta t \\&#xA;a^W + A^W \\&#xA;\alpha^R + \psi^R&#xA;\end{pmatrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;So far, I'm clear with the EKF steps. Post this prediction step, I'm not clear how to perform the measurement update of the system state.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.doc.ic.ac.uk/~ajd/Scene/Release/monoslamtutorial.pdf&quot; rel=&quot;nofollow&quot;&gt;From this slide&lt;/a&gt;, I was under the impression that we need to initialize random depth particles between 0.5m to 5m from the camera. But, at this point, both the camera pose and the feature depth is unknown.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;I can understand running a particle filter for estimating feature&#xA;depth if camera pose is known. I tried to implement such a concept &lt;a href=&quot;https://github.com/agnivsen/LibMonoSLAM&quot; rel=&quot;nofollow&quot;&gt;in this project: where I read the camera pose from a ground truth file&lt;/a&gt; and keep triangulating the depth of features w.r.t world reference frame&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I can also comprehend running a particle filter for estimating the&#xA;camera pose if feature depths are known.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;But both these parameters are unknown. How do I perform the measurement update?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can understand narrowing down the active search region for feature matching based on the predicted next state of the camera. But after the features are matched using RANSAC (or any other algorithm), how do I find the updated camera pose? We are not estimating homography, are we?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have any idea regarding MonoSLAM (or RGB-D SLAM), please help me out with understanding the EKF steps.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;To be more specific: is there a homography estimation step in the algorithm? how do we project the epipolar line (inverse depth OR XYZ) in the next frame if we do not have any estimate of the camera motion?&lt;/p&gt;&#xA;" OwnerUserId="1949" LastEditorUserId="1949" LastEditDate="2015-06-18T12:29:16.570" LastActivityDate="2015-06-24T04:54:06.237" Title="Need help regarding EKF in MonoSLAM" Tags="&lt;slam&gt;&lt;ekf&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7518" PostTypeId="2" ParentId="6696" CreationDate="2015-06-17T13:04:16.293" Score="0" Body="&lt;p&gt;Have you checked the supply voltage of the sensors? Sometimes PWM can cause problems.&#xA;If that is not the problem try to measure the voltage/current directly on the sensor using a scope. If this is stable something else is wrong in your circuit or arduino&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: think I read it wrong. Is the driver you are using correct? is the signal which the arduino delivers good? Sometimes a pull-up resistor will do the trick.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If everything functions well, the PID values are not chosen correctly. Try using the ziegler and nichols method if this is posssible&lt;/p&gt;&#xA;" OwnerUserId="9921" LastActivityDate="2015-06-17T13:04:16.293" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7519" PostTypeId="1" AcceptedAnswerId="7530" CreationDate="2015-06-17T18:08:41.463" Score="4" ViewCount="847" Body="&lt;p&gt;I have a differential drive robot for which I'm building an EKF localization system.  I would like to be able to estimate the state of the robot $\left[ x, y, \theta, v, \omega \right]$ where $x, y, \theta$ represent the pose of the robot in global coordinates, and $v, \omega$ are the translational and rotational velocities. Every mobile robot Kalman filter example I've seen uses these velocities as inputs to prediction phase, and does not provide a filtered estimate of them. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Q:&lt;/strong&gt; What is the best way to structure a filter so that I can estimate my velocities and use my measured odometry, gyroscope, and possibly accelerometers (adding $\dot{v}$ and $\dot{\omega}$ to my state) as inputs? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;My intuition tells me to use a prediction step that is pure feedforward (i.e. just integrates the predicted velocities into the positions), and then have separate updates for odometry, gyro, and accelerometer, but I have never seen anyone do this before. Does this seem like a reasonable approach?&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="9756" LastActivityDate="2015-06-22T13:56:04.760" Title="Structuring EKF to estimate pose and velocity with odometry inputs" Tags="&lt;localization&gt;&lt;kalman-filter&gt;&lt;gyroscope&gt;&lt;odometry&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7521" PostTypeId="1" CreationDate="2015-06-18T07:43:26.337" Score="2" ViewCount="1413" Body="&lt;p&gt;I have a term project which is controlling a two-link manipulator with harmonic drive installed at each joint.&#xA;To control, i used Computed control method to determine the torque needed for each joints based on the formula: &#xA; $$\tau_i =M(\theta)(\ddot{\theta_i}+K_d\dot{e}+K_pe)+V+G  $$&lt;br&gt;&#xA;To calculate the torque that each motor needs to produce through harmonic drive, i use: &#xA;$$\tau_{motor} =(J_m+J_g)\rho\ddot{\theta_i}+\frac{\tau_i}{\rho\eta_g}$$&#xA;where:&#xA; $\rho$ and $\eta_g$ are gear ratio and efficiency of the harmonic drive. $J_m$ and $J_g$ are the motor and gear inertia, respectively. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;after these calculation, i can see the effect of harmonic drive in the system by comparing input torque from motor in the model with harmonic drive ($\tau_{motor}$) to that torque in the model without harmonic drive ($\tau_i$) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But my professor doesn't agree the formula $\tau_{motor}$ i used. He want me to include the stiffness $k$ of the harmonic drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is &lt;a href=&quot;https://danangcity45.wordpress.com/2015/06/17/computed-torque-control-of-two-link-manipulator/&quot; rel=&quot;nofollow&quot;&gt;what i have done&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P/S: This model which consists of two-link manipulator+harmonic drive at each joint is built in MATLAB.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone suggest me the formula about it? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you so much.&lt;/p&gt;&#xA;" OwnerUserId="9205" LastEditorUserId="9205" LastEditDate="2015-06-23T06:06:47.733" LastActivityDate="2015-06-23T06:06:47.733" Title="Calculate required motor torque through Harmonic Drive" Tags="&lt;actuator&gt;&lt;manipulator&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7522" PostTypeId="1" AcceptedAnswerId="7523" CreationDate="2015-06-18T09:22:09.443" Score="0" ViewCount="1196" Body="&lt;p&gt;I'm attempting to control a small vehicle at relatively slow (.5 m/s - 1 m/s) speeds, but with extreme accuracy (1mm). For the drive system, I'm considering using brushless motors as they have a much greater power / volume ratio than I am able to find with brushed motors, especially at this small size.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I will be using wheels between 1&quot; and 2&quot; diameter, so the RPM I will be looking for is between 150 - 500 RPM at max. This would suggest either driving the motors at a low speed directly, or driving them at a high speed and gearing them down. As I understand it, both setups will give high torques, as brushless motors decrease torque with speed. With brushed motors, it's quite obvious that a gearbox is necessary as otherwise there is no torque in the system, but here the choice isn't as clear, which is why I am asking.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;tl;dr&lt;/strong&gt; Use brushless motors at high speed with gearbox or low speed (ungeared) for high torque / low speed / high precision application?&lt;/p&gt;&#xA;" OwnerUserId="9944" LastActivityDate="2015-06-19T01:09:37.380" Title="Highspeed with gearbox or low speed for brushless motor?" Tags="&lt;motor&gt;&lt;brushless-motor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7523" PostTypeId="2" ParentId="7522" CreationDate="2015-06-18T14:09:04.077" Score="3" Body="&lt;p&gt;Page 7 of &lt;a href=&quot;http://www.beikimco.com/pdf/BLDC%20Product%20Guide.pdf&quot; rel=&quot;nofollow&quot;&gt;this PDF&lt;/a&gt; states that, &quot;A permanent magnet DC brushless motor behaves like any permanent magnet DC brush motor.&quot; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can read more about DC motor operation at &lt;a href=&quot;http://lancet.mit.edu/motors/motors3.html&quot; rel=&quot;nofollow&quot;&gt;this MIT site&lt;/a&gt;. I'm not sure if you've got a typo or what you're trying to say, but your question states, &quot;brushless motors decrease torque with speed,&quot; after you state that using a gearbox and directly controlling the motor at low speed both, &quot;will give high torques.&quot; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're looking to do speed control at a very low percentage of the motor's speed, I would suggest using a gearbox simply because you won't have much headroom to modulate the motor's speed. For example, assume the motor's &lt;a href=&quot;http://www.hobbypartz.com/30p-101-flash-aa-8900kv.html&quot; rel=&quot;nofollow&quot;&gt;top speed is 50,000RPM&lt;/a&gt;. You want to control the motor to 150RPM +/- 10RPM, which means that, if you're going to directly operate those motors at low speed with no gearbox, you need to be able to control the motor speed to within +/- 0.02% of the top speed. This will be hard, and you would probably actually want control within +/-1RPM, or 0.002% of top speed. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you were to use a 100:1 gearbox, then top &lt;em&gt;output&lt;/em&gt; speed becomes 500RPM, which means now you have to control motor speed to +/- 2%, or 0.2% for the +/-1RPM case, which suddenly becomes far more manageable. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The downside to using a gearbox is that they are physical, mechanical devices, meaning that they will have friction, backlash, and other drawbacks. Essentially you wind up paying a percentage of your motor's power for the advantage that speed becomes easier to control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;tl;dr - use gearboxes. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2015-06-19T01:09:37.380" LastActivityDate="2015-06-19T01:09:37.380" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7525" PostTypeId="2" ParentId="7521" CreationDate="2015-06-18T15:22:15.433" Score="2" Body="&lt;p&gt;&lt;a href=&quot;http://www.researchgate.net/profile/Hamid_Taghirad/publication/2428266_Robust_Torque_Control_of_Harmonic_Drive_Systems/links/546f5eba0cf216f8cfa9d93a.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Page 50 of Hamid D Taghirad's 1997 PhD dissertation from McGill University&lt;/a&gt; gives a series of equations for harmonic drive torques, and the top of page 51 gives the following fantastic model for the harmonic drive:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/FhVrK.png&quot; alt=&quot;harmonic drive model&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;WG is the wave generator (input); fs is the flexispline (output); N is the gear ratio, then the springs and dampers are deflection and friction losses at various stages in the harmonic drive. If you neglect the input/output frictional losses ($T_{f1}$, $T_{f2}$, and $T_{f3}$), then you're left with what I believe your professor was looking for,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;I_{drive} \tau_{drive} = -k_{fs}*(\frac{1}{N} \theta_{input} - \theta_{output}) - b_{fs}(\frac{1}{N} \dot{\theta}_{input} - \dot{\theta}_{output})&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where again, fs is the flexispline. Essentially the major components of the drive forces are due to structural damping and springiness of the flexispline deforming while the input rotates. Note that here I'm using the gear ratio as &lt;code&gt;input : output&lt;/code&gt;, as harmonic drives are reducers. If $N = \frac{50}{1}$, then the input divided by the gear ratio gives the reduced input angular position or speed. If you define gear ratio as the inverse of how I've used it then you would multiply by N instead of divide by it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.me.berkeley.edu/ME239/restricted/hardware_help/Harmonic_Drives.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here are some great design tips&lt;/a&gt; for selecting harmonic drives, too, if anyone's interested. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2015-06-18T15:31:57.940" LastActivityDate="2015-06-18T15:31:57.940" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7526" PostTypeId="2" ParentId="2062" CreationDate="2015-06-18T20:59:55.070" Score="1" Body="&lt;p&gt;Sentis' lab at UT Austin has open source code that implements many of the control topics mentioned in his thesis. You can check it out here: &lt;a href=&quot;https://github.com/liangfok/controlit&quot; rel=&quot;nofollow&quot;&gt;https://github.com/liangfok/controlit&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Specifically for the internal forces monitoring, you can checkout: &lt;a href=&quot;https://github.com/liangfok/controlit/blob/b8f3ba056b5329e26b9519c8923c43ae58f0dcd9/controlit_core/include/controlit/VirtualLinkageModel.hpp&quot; rel=&quot;nofollow&quot;&gt;https://github.com/liangfok/controlit/blob/b8f3ba056b5329e26b9519c8923c43ae58f0dcd9/controlit_core/include/controlit/VirtualLinkageModel.hpp&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="97" LastActivityDate="2015-06-18T20:59:55.070" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7527" PostTypeId="2" ParentId="7278" CreationDate="2015-06-18T21:05:33.463" Score="2" Body="&lt;p&gt;If you haven't come across the &lt;a href=&quot;http://rbdl.bitbucket.org/df/d65/modeling_page.html&quot; rel=&quot;nofollow&quot;&gt;Rigid Body Dynamics Library (RBDL)&lt;/a&gt; you might want to look at how they implement it, and/or contact the author Martin Felis.&lt;/p&gt;&#xA;" OwnerUserId="97" LastEditorUserId="37" LastEditDate="2015-06-22T13:42:26.797" LastActivityDate="2015-06-22T13:42:26.797" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7528" PostTypeId="2" ParentId="7519" CreationDate="2015-06-18T21:34:29.877" Score="0" Body="&lt;p&gt;The OpenPilot EKF implementation as described at the OpenPilot Firmware Development &lt;a href=&quot;https://wiki.openpilot.org/display/WIKI/INSGPS+Algorithm&quot; rel=&quot;nofollow&quot;&gt;INSGPS Algorithm&lt;/a&gt; page &lt;em&gt;does&lt;/em&gt; have the velocity vector as part of its state. The linked paper &lt;a href=&quot;https://wiki.openpilot.org/display/WIKI/INSGPS+Algorithm?preview=/2097177/2195479/INSGPSAlg.pdf&quot; rel=&quot;nofollow&quot;&gt;GPS-aided INS Solution for OpenPilot by Dale E. Schinstock, Kansas State University&lt;/a&gt; describes in quite a bit of detail how they've implemented it.&lt;/p&gt;&#xA;" OwnerUserId="9952" LastEditorUserId="37" LastEditDate="2015-06-22T13:56:04.760" LastActivityDate="2015-06-22T13:56:04.760" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7529" PostTypeId="2" ParentId="7497" CreationDate="2015-06-19T00:31:42.807" Score="1" Body="&lt;p&gt;I don't know if you will have enough torque, but if/when you try it out, you might have better luck if you don't put any wheels on there.  The &lt;a href=&quot;https://solarbotics.com/product/k_pp/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Solarbotics Photopopper Photovore&lt;/a&gt;, uses similar un-geared motors and just uses a bit of heat-shrink tubing for a wheel.  (However, it only has a solar cell and capacitor, so is much lighter than your bot).&#xA;&lt;img src=&quot;https://i.stack.imgur.com/kCfV1.jpg&quot; alt=&quot;Solarbotics Photopopper Photovore side view&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-06-19T00:31:42.807" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7530" PostTypeId="2" ParentId="7519" CreationDate="2015-06-19T03:01:39.760" Score="2" Body="&lt;p&gt;Great question!  Your intuition is correct.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would do this:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Put the state $x$, and expected velocities at the current time $t$, $v $ as the vector to estimate.&lt;/li&gt;&#xA;&lt;li&gt;Use estimated velocities to predict next state $$\hat{x}(t+1)=f(x(t),v(t))$$&lt;/li&gt;&#xA;&lt;li&gt;Use odometry measurements from $t$ to $t+1$ to form an estimate of the state. The difference between this and $x$ is your innovation, $y_o$. Fuse with the predicted state. $$\hat{x}'(t+1)=UpdateStep(\hat{x}(t+1),y_o(t+1)$$&lt;/li&gt;&#xA;&lt;li&gt;Use accellerometers to form a second estimate of state, which is also fused. You now have an estimate of the state at $t+1$ using all available information.&#xA;$$\hat{x}''(t+1)=UpdateStep(\hat{x}'(t+1),y_a(t+1)$$&lt;/li&gt;&#xA;&lt;li&gt;Now, the velocities, assuming the filter is running &quot;fast&quot; and you can rely on a &lt;a href=&quot;https://robotics.stackexchange.com/a/134&quot;&gt;constant curvature path&lt;/a&gt; are whatever $v$ and $\omega$ explain the difference in the robot states. Use the difference to provide an estimate of the velocities, which is used to update the velocities in the state of the robot. &#xA;$$\hat{v}(t+1)=UpdateStep(\hat{v}(t+1),GetVelocityEstimate(\hat{x}(t),\hat{x}(t+1))$$&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The design of a filter is very much up to the engineer, and in the end you may want to try several variants to see what works best. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some other variants&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Swap odometry, velocities, and accells to produce the prediction of state. You'll have to see what works better&lt;/li&gt;&#xA;&lt;li&gt;Use a single integration of accellerometers to produce a velocity update &lt;em&gt;before&lt;/em&gt; doing your forward prediction. In effect, you are &quot;daisy chaining&quot; EKFS, one to estimate your velocity, then using that velocity to predict your state, which is updated by other means. This will likely be &lt;strong&gt;much&lt;/strong&gt; simpler and less likely to break.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Good luck!&lt;/p&gt;&#xA;" OwnerUserId="163" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2015-06-19T13:51:54.163" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7531" PostTypeId="2" ParentId="5059" CreationDate="2015-06-19T05:50:02.863" Score="3" Body="&lt;p&gt;We find this recent paper by Andrea Del Prete, Nicolas Mansard, Oscar Efrain Ramos Ponce, Olivier Stasse, Francesco Nori quite interesting: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://hal.archives-ouvertes.fr/hal-01136936/document&quot; rel=&quot;nofollow noreferrer&quot;&gt;Implementing Torque Control with High-Ratio Gear Boxes and without Joint-Torque Sensors&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The authors presented a framework for implementing joint-torque control on position controlled robots.&lt;/p&gt;&#xA;" OwnerUserId="7610" LastEditorUserId="7610" LastEditDate="2017-05-20T13:17:07.467" LastActivityDate="2017-05-20T13:17:07.467" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7533" PostTypeId="1" CreationDate="2015-06-19T11:29:49.400" Score="2" ViewCount="778" Body="&lt;p&gt;Aim: To use multi-threading and inter-process communication(IPC) when coding an autonomous robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Platform: Embedded Linux (Yocto)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Constraints : Limited CPU power.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We are building an Autonomous Underwater Vehicle, to compete in the RoboSub competition. This is the first time I am doing something like this. I intent to use a middleware like ROS, MIRA, YART, MOOS etc. The purpose of using one is that I want to modularise tasks, and divide the core components into subsystems, which should be run parallel(by multi-threading). But I have limited computational power (a dual core omap SoC), and the middleware, while robust should also be very efficient.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need to use a middleware, because I don't want the program to be run on a single thread. My CPU has two cores, and it would be great if I could do some multi-threading to improve performance of the program. The middleware will provide for me the communication layer, so I don't have to worry about data races, or other problems associated with parallel processing. Also I have no prior experience writing multi-threaded programs, and so using parallel processing libraries directly would be difficult. Hence IMO, middlewares are excellent choices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your experience, which is the best one suited for the task. I don't really want to use ROS, because it will be having a lot of features, and I wont be using them. I am a computer science student(under graduate freshman, actually) and don't mind getting my hands dirty with one which has not that much features. That's true if only it will take less toll on the CPU.&lt;/p&gt;&#xA;" OwnerUserId="8981" LastEditorUserId="8981" LastEditDate="2015-06-22T12:52:29.597" LastActivityDate="2015-06-22T12:52:29.597" Title="Which middleware for IPC and multi-threading in a autonomous robot?" Tags="&lt;ros&gt;&lt;communication&gt;&lt;underwater&gt;&lt;operating-systems&gt;" AnswerCount="2" CommentCount="12" ClosedDate="2015-06-22T13:44:27.863" ContentLicense="CC BY-SA 3.0" />
  <row Id="7534" PostTypeId="1" CreationDate="2015-06-19T16:54:13.987" Score="3" ViewCount="140" Body="&lt;p&gt;Has anyone done this with EKF/PID on a small microcontroller? Or know of code snippets to help implementing this?&lt;/p&gt;&#xA;" OwnerUserId="9957" LastActivityDate="2015-06-19T16:54:13.987" Title="On-board monocular odometry for quadcopter stabilization" Tags="&lt;quadcopter&gt;&lt;odometry&gt;&lt;stability&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7535" PostTypeId="1" AcceptedAnswerId="7536" CreationDate="2015-06-19T19:29:02.963" Score="2" ViewCount="5643" Body="&lt;p&gt;I am working on my first hobby project and I'm not very familiar with sensors yet. I am trying to build a system which detects the presence of a person in a small room with a single entrance/exit door.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The idea is when the first person enters the room, the lights turn on and any following person doesn't affect state of the lights. After the last person leaves, the lights should turn off. In a programmatic sense, the lights should turn on when present person count is greater than 0.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have explored my options and found out that infrared sensors are usually used for this type of problem. What I am not sure is how to detect whether person has entered or left, so I would like to ask for some help with this.&lt;/p&gt;&#xA;" OwnerUserId="9958" LastEditorUserId="9176" LastEditDate="2016-02-10T10:34:43.987" LastActivityDate="2019-11-16T13:03:19.120" Title="Detecting the presence of a person in a room" Tags="&lt;sensors&gt;" AnswerCount="4" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7536" PostTypeId="2" ParentId="7535" CreationDate="2015-06-19T19:52:16.443" Score="2" Body="&lt;p&gt;I think that most instances of a project like this use a &lt;a href=&quot;https://www.adafruit.com/products/189&quot; rel=&quot;nofollow&quot;&gt;motion sensor&lt;/a&gt; to detect if people are in the room rather than trying to count the number of people in the room as that would require knowing if someone was entering or leaving the room. The problem with a motion sensor to drive the lights that a person who enters and then becomes still (at a computer, TV, asleep, etc.) can cause the motion sensor to fail to detect a person in the room, causing the lights to turn off. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could try to count people in the room, but, as mentioned, this requires knowing not just that someone passed the threshold but also knowing the direction they were going. This could be done with a really simple &lt;a href=&quot;https://en.wikipedia.org/wiki/Light_curtain&quot; rel=&quot;nofollow&quot;&gt;light curtain&lt;/a&gt; on either side of the door and then watching to see which sensor triggers first. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The light curtain doesn't need to be complicated; you can use one IR transmitter and one IR photocell for each &quot;curtain&quot;. When the received intensity drops below some threshold you trigger an event. Outside then inside is someone entering and vice versa is someone leaving. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can also use &lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/B001QC98RC&quot; rel=&quot;nofollow&quot;&gt;pressure mat&lt;/a&gt;, where again you put one inside and one outside. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Don't forget to take the door into account! If you use IR light curtain you'll have to set up one sensor unit far enough away that the door won't trigger (and thus block) the sensor. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-06-19T19:52:16.443" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7537" PostTypeId="1" CreationDate="2015-06-20T08:26:59.057" Score="2" ViewCount="164" Body="&lt;p&gt;From Introduction to Robotics by J.J. Craig, chapter 2, Page no. 36:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could anyone explain how that equation was derived/formed? I am stuck on this page due to failing to understand where the equation came from. Thank you.&#xA;&lt;img src=&quot;https://i.stack.imgur.com/gy2wV.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="9962" LastActivityDate="2015-06-25T08:22:10.517" Title="Inverting a transform (Reading J Craig's book on Robotics)" Tags="&lt;design&gt;&lt;theory&gt;&lt;books&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7539" PostTypeId="2" ParentId="7537" CreationDate="2015-06-20T13:29:06.517" Score="6" Body="&lt;p&gt;Given that an homogeneous transformation $T \in SE\left(3\right)$ can be expressed as&#xA;$$&#xA;T= \left( \begin{matrix} \mathbf{R} &amp;amp; \mathbf{p} \\ 0 &amp;amp; 1\end{matrix} \right),&#xA;$$&#xA;where $\mathbf{R} \in \mathbb{R}^{3 \times 3}$ is symmetric and $\mathbf{p} \in \mathbb{R}^{3 \times 1}$, then we seek for the inverse $T^{-1}$, such that:&#xA;$$&#xA;T^{-1}=\left( \begin{matrix} \mathbf{A} &amp;amp; \mathbf{b} \\ c &amp;amp; d \end{matrix} \right).&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It must hold:&#xA;$$&#xA;\left( \begin{matrix} \mathbf{A} &amp;amp; \mathbf{b} \\ c &amp;amp; d\end{matrix} \right) \cdot &#xA;\left( \begin{matrix} \mathbf{R} &amp;amp; \mathbf{p} \\ 0 &amp;amp; 1\end{matrix} \right) = \left( \begin{matrix} \mathbf{I}_3 &amp;amp; 0 \\ 0 &amp;amp; 1 \end{matrix} \right).&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore, it follows:&#xA;$$&#xA;\left\{ \begin{matrix} \mathbf{A}\cdot \mathbf{R}=\mathbf{I}_3 \\ \mathbf{A} \cdot  \mathbf{p}+\mathbf{b}=0 \\ c \cdot \mathbf{R}=0 \\ c \cdot \mathbf{p}+d=1 \end{matrix} \right.,&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;whose solution is:&#xA;$$&#xA;\left\{ \begin{matrix} \mathbf{A}=\mathbf{R}^{-1}=\mathbf{R}' \\ \mathbf{b}=-\mathbf{R}'\mathbf{p} \\ c=0 \\ d=1 \end{matrix} \right..&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To sum up:&#xA;$$&#xA;T^{-1}=\left( \begin{matrix} \mathbf{R}' &amp;amp; -\mathbf{R}'\cdot\mathbf{p} \\ 0 &amp;amp; 1 \end{matrix} \right).&#xA;$$&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2015-06-25T08:22:10.517" LastActivityDate="2015-06-25T08:22:10.517" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7540" PostTypeId="2" ParentId="7533" CreationDate="2015-06-20T13:56:52.600" Score="2" Body="&lt;p&gt;Take a look to rock-robotics.org and github.com/auv-avalon we provide a lot of basic tools already but in the end there is no real best middelware.&lt;/p&gt;&#xA;" OwnerUserId="4508" LastActivityDate="2015-06-20T13:56:52.600" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7541" PostTypeId="2" ParentId="7533" CreationDate="2015-06-20T17:02:36.837" Score="2" Body="&lt;p&gt;For maritime robotics, you should definitely take a look at &lt;a href=&quot;https://sites.google.com/site/moossoftware/&quot; rel=&quot;nofollow&quot;&gt;MOOS&lt;/a&gt;.  It is a similar middle-ware to ROS, but was originally developed at the Dept. of Ocean Engineering at MIT with Prof John Leonard.  So it has a heavy maritime bent to it, but can of course be used for terrestrial (or aerial) robotics as well.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-06-20T17:02:36.837" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7542" PostTypeId="1" CreationDate="2015-06-20T17:12:52.280" Score="0" ViewCount="56" Body="&lt;p&gt;I'm no professional. At 29 I just became seriously interested in robotics a few months ago and have been researching everything I can since. Now that I've come to understand how far robotics have truly come I have a desire to try to make my own.&#xA;Granted, I know nothing about coding or programming. I have no idea where to begin. And I know it'll probably, the first time at least, be something small rather than a huge life altering project.&#xA;Thus, if anyone could suggest to me good resources for a beginner I'd massively appreciate it.&lt;/p&gt;&#xA;" OwnerUserId="9965" LastActivityDate="2015-06-22T13:17:13.630" Title="Starter Looking For Advice" Tags="&lt;beginner&gt;" AnswerCount="2" CommentCount="1" ClosedDate="2015-06-22T13:44:47.420" ContentLicense="CC BY-SA 3.0" />
  <row Id="7544" PostTypeId="2" ParentId="7542" CreationDate="2015-06-21T06:30:11.233" Score="1" Body="&lt;p&gt;As a starter too on this field I am still looking for tips too. Recently I found that I could look into instructable to try things and also found that the raspberry is a great ressource for starter (not all of them but a few ones are a good start in even for people learning to code)&lt;br&gt;&#xA;&lt;a href=&quot;https://www.raspberrypi.org/resources/make/&quot; rel=&quot;nofollow&quot;&gt;https://www.raspberrypi.org/resources/make/&lt;/a&gt; (I will love to make the robo butler in there)&lt;br&gt;&#xA;In instructables, this one could help for example : &lt;a href=&quot;http://www.instructables.com/id/Johnny-Five-an-automated-turret/&quot; rel=&quot;nofollow&quot;&gt;http://www.instructables.com/id/Johnny-Five-an-automated-turret/&lt;/a&gt; but there are plenty others.&lt;/p&gt;&#xA;" OwnerUserId="9969" LastActivityDate="2015-06-21T06:30:11.233" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7547" PostTypeId="1" AcceptedAnswerId="7548" CreationDate="2015-06-21T20:12:04.990" Score="2" ViewCount="156" Body="&lt;p&gt;Let's say a PID is implemented and the errors are calculated using the sensor data, but the sensor data lags by certain amount of time because of the overhead. And the lag time is smaller than the sampling period, how well does PID performs? What I am thinking is that PID will calculate errors based on past data, and use that to control. How will using a Kalman filter to estimate the actual sensor data help? &lt;/p&gt;&#xA;" OwnerUserId="9972" LastActivityDate="2015-06-21T21:49:18.353" Title="Lagging sensor data for PID" Tags="&lt;pid&gt;&lt;kalman-filter&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7548" PostTypeId="2" ParentId="7547" CreationDate="2015-06-21T21:49:18.353" Score="2" Body="&lt;p&gt;A discrete controller cannot feel anything that might vary within a sample period, so don't be concerned about it. Even a lag of one sample period is very negligible as seen by the PID and any technique you might consider to compensate for it will be definitely an overkill.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The right question you should ask yourself is: &lt;em&gt;&quot;is my sample period selected correctly according to the characteristics of the plant I want to control?&quot;&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway, for &lt;strong&gt;significant lags&lt;/strong&gt; (i.e. in the order of several sample periods) affecting a system, there exist methods such as the &lt;a href=&quot;https://en.wikipedia.org/wiki/Smith_predictor&quot; rel=&quot;nofollow&quot;&gt;Smith Predictor&lt;/a&gt; that come to help you out.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastActivityDate="2015-06-21T21:49:18.353" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7549" PostTypeId="1" CreationDate="2015-06-22T01:08:39.690" Score="6" ViewCount="4551" Body="&lt;p&gt;This is a question for those of you who have experience using stereo cameras/modules like the ZED, DUO M, Bumblebee cameras, etc. (not TOF cameras). I can't find any sample disparity outputs out there on the internet, and I can't find any information on how they perform. Basically here are a few things I'd like to know to those of you who used any of the cameras mentioned above (and others)&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;What resolution and no. of disparities did you work with? &lt;/li&gt;&#xA;&lt;li&gt;How was the framerate? &lt;/li&gt;&#xA;&lt;li&gt;On what hardware?&lt;/li&gt;&#xA;&lt;li&gt;Did the camera have an ASIC of some sort to produce the disparity maps, or did it require a host?&lt;/li&gt;&#xA;&lt;li&gt;How was the quality?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;For those who used the ZED camera, there is a &lt;a href=&quot;http://youtube.com/watch?v=P-QEnnMHYt0&quot; rel=&quot;noreferrer&quot;&gt;promotional video on youtube&lt;/a&gt;. Are the disparity maps really that good?&lt;/p&gt;&#xA;" OwnerUserId="9970" LastEditorUserId="9176" LastEditDate="2015-06-26T19:37:38.250" LastActivityDate="2016-07-24T02:03:46.847" Title="Question for those who have experience using stereo cameras/module (e.g. ZED, DUO M, Bumblebee, etc.)" Tags="&lt;cameras&gt;&lt;stereo-vision&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7551" PostTypeId="2" ParentId="7521" CreationDate="2015-06-22T07:57:38.947" Score="0" Body="&lt;p&gt;Thank for your nice answer.  But i still have questions.&#xA;Applying this equation to my system, I see that: &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;$\theta_{output}$ and $\dot{\theta}_{output}$ are $\theta_i$ and $\dot{\theta}_i$ I calculated from manipulator. &#xA;However, $\theta_{input}$ and $\dot{\theta}_{input}$ are from motor, but where can i get them($\theta_{input}$ and $\dot{\theta}_{input}$) to determine $\tau_{drive}$?&lt;/li&gt;&#xA;&lt;li&gt;I look at a catalog of a harmonic drive to look for $k_{fs}$ and $b_{fs}$ [for example this HD: &lt;a href=&quot;http://harmonicdrive.de/produkte/media/catalog/category/2014_12_ED_1019640_CobaltLine-2UH_1.pdf&quot; rel=&quot;nofollow&quot;&gt;link&lt;/a&gt;], i only find $k_fs$ but  there are 3 values of stiffness in catalog ($k_1$,$k_2$,$k_3$), which one should i choose? and where can i get $b_{fs}$&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Sorry about this kind of question. I'm a newbie in Harmonic Drive.&lt;/p&gt;&#xA;" OwnerUserId="9205" LastActivityDate="2015-06-22T07:57:38.947" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="7552" PostTypeId="1" AcceptedAnswerId="7553" CreationDate="2015-06-22T10:33:20.577" Score="1" ViewCount="143" Body="&lt;p&gt;I understand the concept of using a pull-up/pull-down resistor when implementing a button/switch with Arduino to avoid a floating state, and in fact I have implemented this quite often.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I am not too sure if a pull-down resistor is necessary in chip-chip or chip-sensor communication.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am connecting a coin acceptor to the Arduino (common ground). The coin acceptor's output pin gives a short pulse each time there is a coin inserted. So far I am connecting the output pin of the coin acceptor directly to an Arduino pin and it works without any problem. Is a pull-down resistor (on this line) usually required as precaution in this case?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also I have the same question when connecting 2 pins of 2 separate Arduino's (also common ground) so that one Arduino can read pulses from the other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance for any experience shared!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Dave&lt;/p&gt;&#xA;" OwnerUserId="7403" LastActivityDate="2015-06-22T11:21:13.330" Title="Pull-down resistor for inter-chip and sensor-to-chip communication" Tags="&lt;arduino&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7553" PostTypeId="2" ParentId="7552" CreationDate="2015-06-22T11:21:13.330" Score="0" Body="&lt;p&gt;To your first questions: This depends of the coin acceptor. If the coin acceptor is switching between ground and Vdd then you do not need the pulldown. If the coin acceptor is switching Vdd and floating then you need it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway if you have some kind of &quot;flying wires&quot; between the arduino and the coin acceptor you should place a pulldown next to the arduino the get a clean signal. The flying wires can &quot;catch&quot; some EMF or act as a capacitor.... Both cases are not good for you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your second question: Basically no, but you should use it when you have long connections between them... Anyway in both cases, it won't hurt, so just place them precautiously.&lt;/p&gt;&#xA;" OwnerUserId="6911" LastActivityDate="2015-06-22T11:21:13.330" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7554" PostTypeId="2" ParentId="7542" CreationDate="2015-06-22T13:17:13.630" Score="0" Body="&lt;p&gt;Buy a Raspberry Pi, and an Arduino. You will be buying a few general purpose items like jumber wires, bread boards, single-core wires(for making circuits on bread board), soldering ion etc. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then you will find tons of projects you can do with the RaspPi and Arduino on the internet to get you started. Pick a project, buy the required sensors, and do it. You shouldn't be just doing the interfacing. Learn the electronics behind the things you use as much as you can. At this point, one thing you can do is to document your works, preferably by starting a blog or something. When you work with arduino, you will learn some arduino  coding, which is pretty simple, and you will get the hand of it easily. Also learn python. A good place for it would be websites like codeacademy, where you can enrol for the course you want. The primary objective of this exercise is to get a general overview about robotics. This would be your gateway to the world of robotics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then you could move to more and more advanced projects, and as you grow, you will finally that 'huge life altering project' you wanted to do will come to your head. Let's hope it does. But definitely you will be gaiining a lot of knowledge and life hacks in life if you go down this lane.&lt;/p&gt;&#xA;" OwnerUserId="8981" LastActivityDate="2015-06-22T13:17:13.630" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7555" PostTypeId="2" ParentId="7535" CreationDate="2015-06-22T20:51:16.613" Score="1" Body="&lt;p&gt;Expanding on the motion sensor idea: you could combine that with a door open/shut sensor or basically just a switch that detects when the door is open. After an open/shut event, you could detect if there is motion or not. If there is, set a flag that a person is in the room. That gets rid of the issue where the person may become motionless.  I'm assuming that the state of person present/absent can only change during the open/shut event and I'm also assuming that if there are people inside the room, at least one of them will likely be moving directly following the open/shut event.&lt;/p&gt;&#xA;" OwnerUserId="1075" LastActivityDate="2015-06-22T20:51:16.613" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7556" PostTypeId="1" CreationDate="2015-06-22T23:50:05.760" Score="0" ViewCount="66" Body="&lt;p&gt;I had a RC Helicopter (with video,picture, and audio taking capabilities) that recently &quot;died&quot; (unrelated to short circuit). The reciever board short circuted, but the board that sent data to micro-sd card and had camera+mic was fine. I can access the data on the micro-sd card through the circuit, with a USB cable. The reciever board sent data via a 4 wire bundle to the camera board to make it take pictures/record audio. Is there any way to still do this from my computer (from the USB), and turn it into a mini spy camera? (Not remotely, jst through a cable)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I got this heli a while back so I don't have the heli number but the camera board number is &lt;code&gt;TX6473 R1&lt;/code&gt;, and the reciever board number is &lt;code&gt;3319B rev.a&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Reciever Board Image&lt;/strong&gt;&#xA;&lt;img src=&quot;https://i.stack.imgur.com/8xeKS.jpg&quot; alt=&quot;Reciever Board Image&quot;&gt;&#xA;&lt;strong&gt;Camera/Data Board Image&lt;/strong&gt;&#xA;&lt;img src=&quot;https://i.stack.imgur.com/eUTFN.jpg&quot; alt=&quot;Camera/Data Board Image&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="9982" LastEditorUserId="9982" LastEditDate="2015-06-23T03:21:50.860" LastActivityDate="2015-06-23T03:21:50.860" Title="Mini Recorder from RC Heli Parts" Tags="&lt;control&gt;&lt;cameras&gt;&lt;circuit&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7557" PostTypeId="1" CreationDate="2015-06-23T02:48:26.670" Score="0" ViewCount="423" Body="&lt;p&gt;I recently got &lt;strong&gt;libfreenect&lt;/strong&gt; running on my mac and was able to test out &lt;code&gt;freenect-glpclview&lt;/code&gt; which uses some of the 3D capabilities of the depth sensor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I noticed that the Kinect would only respond / pick up movement that happened within a range of about 3-6 inches in front of the sensor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I thought this may be because the lights where on so I turned them off. It seemed to get a little better but it still only &quot;works&quot; if something is block the sensor almost completely.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know if this is something that can be solved? I know it's an old sensor but I got it for $20 so I could do some prototyping with it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Notes:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;laser project is ON&lt;/li&gt;&#xA;&lt;li&gt;light starts out blinking then goes solid green&lt;/li&gt;&#xA;&lt;li&gt;when not level light goes red&lt;/li&gt;&#xA;&lt;li&gt;RGB camera works but is a little choppy and sometimes shows tears in the picture.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;freenect-glcplview output (snippet):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[Stream 80] Expected 1908 data bytes, but got 948&#xA;[Stream 80] Expected 1908 data bytes, but got 948&#xA;[Stream 80] Expected 1908 data bytes, but got 948&#xA;[Stream 80] Expected 1908 data bytes, but got 948&#xA;[Stream 80] Expected 1908 data bytes, but got 948&#xA;[Stream 80] Expected 1908 data bytes, but got 948&#xA;[Stream 70] Expected 1748 data bytes, but got 948&#xA;[Stream 70] Expected max 1748 data bytes, but got 1908. Dropping...&#xA;[Stream 70] Expected max 1748 data bytes, but got 1908. Dropping...&#xA;[Stream 80] Expected 1908 data bytes, but got 948&#xA;[Stream 80] Expected 1908 data bytes, but got 948&#xA;[Stream 80] Expected 1908 data bytes, but got 948&#xA;[Stream 80] Expected 1908 data bytes, but got 948&#xA;[Stream 80] Expected 1908 data bytes, but got 948&#xA;[Stream 80] Expected 1908 data bytes, but got 948&#xA;[Stream 80] Expected 1908 data bytes, but got 948&#xA;[Stream 80] Expected 1908 data bytes, but got 948&#xA;[Stream 80] Expected 1908 data bytes, but got 948&#xA;[Stream 80] Expected 1908 data bytes, but got 948&#xA;[Stream 80] Expected 1908 data bytes, but got 948&#xA;[Stream 80] Expected 1908 data bytes, but got 948&#xA;[Stream 80] Expected 1908 data bytes, but got 948&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;freenect-regview output (snippet)&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[Stream 70] Invalid magic 2dc5&#xA;[Stream 70] Invalid magic aaf5&#xA;[Stream 70] Invalid magic dddb&#xA;[Stream 70] Invalid magic 9272&#xA;[Stream 70] Invalid magic 9873&#xA;[Stream 70] Invalid magic 9b8b&#xA;[Stream 70] Invalid magic 59eb&#xA;[Stream 70] Invalid magic 88f1&#xA;[Stream 70] Invalid magic 75ee&#xA;[Stream 70] Invalid magic ffff&#xA;[Stream 80] Expected 1908 data bytes, but got 948&#xA;[Stream 80] Expected 1908 data bytes, but got 948&#xA;[Stream 80] Expected 1908 data bytes, but got 948&#xA;[Stream 80] Lost 1 packets&#xA;[Stream 80] Lost 15244 total packets in 514 frames (29.657587 lppf)&#xA;[Stream 80] Expected 1908 data bytes, but got 948&#xA;[Stream 80] Expected 1908 data bytes, but got 948&#xA;[Stream 80] Expected 1908 data bytes, but got 948&#xA;[Stream 80] Expected 1908 data bytes, but got 948&#xA;[Stream 80] Expected 1908 data bytes, but got 948&#xA;[Stream 80] Invalid magic 3b46&#xA;[Stream 80] Lost 1 packets&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Found this which gives me the idea that this may be a USB issue: &lt;a href=&quot;https://github.com/OpenKinect/libfreenect/issues/84&quot; rel=&quot;nofollow&quot;&gt;Regular receipt of undersized packet&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="9941" LastEditorUserId="9176" LastEditDate="2015-06-27T10:16:26.460" LastActivityDate="2015-06-27T15:22:34.693" Title="Troubleshooting Xbox Kinect 360" Tags="&lt;kinect&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7558" PostTypeId="1" CreationDate="2015-06-23T08:06:40.290" Score="0" ViewCount="501" Body="&lt;p&gt;I'm developing a project consists of an IMU controlled by Arduino through which you can send via a radio module, the data to the PC of the three Euler angles and raw data from the sensors.&#xA;For filtering I used the code made available by SparkFun: Razor AHRS 9 dof&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/ptrbrtz/razor-9dof-ahrs/tree/master/Arduino/Razor_AHRS&quot; rel=&quot;nofollow&quot;&gt;https://github.com/ptrbrtz/razor-9dof-ahrs/tree/master/Arduino/Razor_AHRS&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The code does not provide radio transmissions and is tuned for 50 Hz sampling rate, in fact its parameters are:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;// DCM parameters&#xA;#define Kp_ROLLPITCH (0.02f)&#xA;#define Ki_ROLLPITCH (0.00002f)&#xA;#define Kp_YAW (1.2f)&#xA;#define Ki_YAW (0.00002f)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;in this project data is read every 20ms (50Hz) and records of the sensors are set to the accelerometer odr 50hz and 25 bandwidth. with the gyroscope 50 Hz odr.&#xA;In my project I used a gyroscope different, namely that I used L3G4200D frequency odr starting at 100Hz, I set then registers with the 100Hz. My global data rate is 33Hz max, beacouse the use of a radio, i read the complete date with a frequency of 33Hz.&#xA;How can i tune the &lt;code&gt;Ki&lt;/code&gt; and &lt;code&gt;Kp&lt;/code&gt; of my setup? the &lt;code&gt;Kp&lt;/code&gt; is the period, I have to consider the frequency odr that I set to register in the individual sensors or i have to set the global system sample rate limited to 33Hz by the radio transmission?&lt;/p&gt;&#xA;" OwnerUserId="9983" LastEditorUserId="350" LastEditDate="2015-06-23T13:52:16.357" LastActivityDate="2015-12-23T15:35:32.620" Title="Problems about Complementary Filter IMU tuning" Tags="&lt;arduino&gt;&lt;imu&gt;&lt;gyroscope&gt;&lt;sensor-fusion&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7559" PostTypeId="2" ParentId="7558" CreationDate="2015-06-23T09:20:51.903" Score="0" Body="&lt;p&gt;Yes and no.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I just had a quick view at the code which is somehow hard to read what they are actually doing. &#xA;But in digital Signal processing the Kp value is never normalized to the samplingtime. Instead the Ki is sometimes.... depends on the implementation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For digital Signal processing the integral term is dividing the IntegralValue by the SampleTime of the system to normalize it for 1second. In this implementation I cannot see such an operation. This means for you yes the I-Term has to be adjusted : Multiply by 0.02 and divide by 0.03/0.01&lt;/p&gt;&#xA;" OwnerUserId="6911" LastActivityDate="2015-06-23T09:20:51.903" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7560" PostTypeId="1" CreationDate="2015-06-23T10:50:05.163" Score="1" ViewCount="53" Body="&lt;p&gt;Basically I got system with a sensor and an output. I want to apply a digital implemented feedback controller. The problem in this setup is the sensor. The specifications of the module says that the sampletime of the sensor does change in wide range, depending on the usecase; from 1.3 second to 10 second. But it stays constant until the system is disabled.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My first approach was tuning a digital PID-Controller for the longest sampletime. This works fine. Even if I change the sampletime to the shortest the system stays stable, which was expected because I'm still in ROC.&#xA;The problem now is that the system's response is pretty slow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I design the controller for my fastest samplingrate the results are satisfying but become instable for the slowest samplerate, which can be explained again by the ROC&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I could use some kind of adaptive predefined gains which I change depending on the samplerate but I was wondering if there are  control strategies which are able to handle the sampletime changes?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt; &lt;br&gt;&#xA;To give a better overview I will add some details: &lt;br&gt;&#xA;I'm talking about a heating system which heats with radiation. As a sensor I use a pyrometer module with a samplingrate of up 1kHz. The problem is, that the pyrometer is not able to produce reasonable readings whenever the radiator is turned on. (Yes there are other alternatives to the pyrometer, but they start at $50k and are too expensive). The radiator has to be pulsed to operate it. So to maintain a decent heat up time and steady-state temperature the &quot;duty-cycle&quot; has to be at a decent rate(target is 95%). The minimum &quot;off-time&quot; of the radiator is 0.2 seconds before the measured values are reasonable. So at the end my sensor got an effective sampletime of 1-10seconds (by varying the duty cycle).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The hardware is hard too change, radiator and sensor have been evaluted for months right now. Therefore I try to improve the results by &quot;just&quot; changing the control algorithm.&lt;/p&gt;&#xA;" OwnerUserId="6911" LastEditorUserId="6911" LastEditDate="2015-06-24T06:25:12.180" LastActivityDate="2015-06-24T06:25:12.180" Title="Digital Controller Design for System with variable sample time" Tags="&lt;control&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7561" PostTypeId="2" ParentId="7278" CreationDate="2015-06-23T12:20:02.803" Score="3" Body="&lt;h3&gt;Actuators Forces&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Do I get this right: you have a theoretical model of a rigid multibody system and would like to perform rigid body dynamics computations. You have implemented the model and now would like to compute how the model behaves when driven by an actuator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However what is an actuator for you? Is it simply a force acting at that joint? Is it a DC motor model? Is it a PID controller?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The dynamics algorithms in the book are described in terms of generalized positions $q$, generalized velocities $\dot{q}$, generalized velocities $\ddot{q}$, and generalized forces $\tau$. If you have a prismatic joint whose's translation is described by $q_i$ then the linear force at that joint is described by $\tau_i$. If you have a revolute (hinge) joint whose's rotation is described by $q_j$ then $\tau_j$ represents a torque at that joint.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is up to your understanding of an actuator how $\tau$ is computed. If you simply want to apply forces or torques then put the values into the corresponding values of $\tau$. Once you have that they serve as an input to the forward dynamics algorithms to compute the systems response to the applied forces.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Note beside:&lt;/em&gt; Featherstone uses $\tau^a$ to denote the active loop closure forces. From your model description there does not seem to be any kinematic loops and therefore $\tau^a$ does not apply.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Gravitational Acceleration:&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Featherstone applies the gravitational acceleration at the base and lets it propagate by the algorithms through the tree. This is done in the RNEA, Table 5.1 in the line&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$a_0 = -a_g$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead of doing that you can also modify the line&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$f_i^B = I_i a_i + v_i \times^* I_i v_i$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;to &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$f_i^B = I_i (a_i - {}^iX_0a_g) + v_i \times^* I_i v_i$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;to apply the gravitational effects individually on each body. This introduces additional computations and I do not see any benefits in doing so.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Spatial Algebra vs. Concatenation of 3-D Vectors&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Spatial Algebra is not just concatenation of 3-D vectors. The former expresses rigid body motions at a fixed coordinate frame, whereas the latter is expressed at points that move with the body. As a result spatial accelerations are the time derivatives of spatial velocities. In the classical notation using two 3-D equations this is not the case (Section 2.11 of Featherstone's book):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If a body has a constant angular velocity $\omega$ then all points on that body that are not on the axis of rotation have an acceleration towards the axis of rotation (center of rotation in the planar case). In Spatial Algebra this body has zero spatial acceleration &lt;em&gt;independent of the frame the acceleration is expressed in&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Spatial velocity describes linear and angular velocity of the body point that currently coincides with the origin of the (fixed) reference frame. If that frame is expressed at the center of mass and oriented with the global reference frame then it appears to be a simple concatenation of 3-D linear and angular velocity, however this is only the case for this specific choice of reference frame. Expressed at a different frame you get different values but it still represents the same spatial velocity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Spatial acceleration describes the &lt;em&gt;flow&lt;/em&gt; of the linear and angular velocity of the point that coincides with origin. &quot;Flow&quot; here means how the vector quantities (linear and angular velocity) change over time.&lt;/p&gt;&#xA;" OwnerUserId="9986" LastEditorUserId="9986" LastEditDate="2015-06-23T14:10:12.827" LastActivityDate="2015-06-23T14:10:12.827" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="7562" PostTypeId="2" ParentId="7560" CreationDate="2015-06-23T13:51:13.870" Score="2" Body="&lt;p&gt;If what you are sensing can be modeled easily, you might be able to get away with feeding the sensor into the model and using the output of the model as your sensor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example: assume you want to control the position of a train on a track by controlling the power (-100% to 100%) to its motors.  You have a sensor that can only measure the position once every 10 seconds.  Since you know the power of the motor and the mass of the train, you can create a fairly accurate estimation of where you are even without the sensor.  And every 10 seconds, you are guaranteed that the error of the model will be re-calibrated to 0.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many GPS units use this technique to provide sensor &quot;readings&quot; faster than they receive fixes.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2015-06-23T13:51:13.870" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="7564" PostTypeId="1" AcceptedAnswerId="7569" CreationDate="2015-06-23T17:28:23.257" Score="7" ViewCount="1066" Body="&lt;p&gt;I am building an autonomous underwater robot. It will be used in swimming pools. It should be capable of running in any normal sized pool, not just the pool in which I test. So I cannot rely on a particular design or feature. It has to know it's position in the pool, either with respect to the initial position or with respect to the pool. I have a IMU, which is a &lt;a href=&quot;https://www.pololu.com/product/2468&quot; rel=&quot;noreferrer&quot;&gt;Pololu MiniIMU&lt;/a&gt; but finding the displacement with an IMU is a near impossible task. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What sensor can I use for this task? It should not be very expensive. (below 200$)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Tank size: 25x20x2.5 meters&lt;/p&gt;&#xA;" OwnerUserId="8981" LastEditorUserId="8981" LastEditDate="2015-06-24T15:05:01.640" LastActivityDate="2015-06-28T18:25:38.700" Title="How to localise a underwater robot?" Tags="&lt;sensors&gt;&lt;localization&gt;&lt;sensor-fusion&gt;&lt;underwater&gt;" AnswerCount="4" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7565" PostTypeId="1" CreationDate="2015-06-24T02:58:50.587" Score="0" ViewCount="125" Body="&lt;p&gt;I know that we can use some algorithms like LQR, MPC, or even PID to make the robot follows the trajectory references. In the simulation like MATLAB, I usually specify the trajectory reference by a function. Let say, given a sequence of points generated by a path planning algorithm, then I want to do a real experiment of trajectory tracking over those sequence of points. My question is:&#xA;- How to specify the errors towards the path in real situation. My impression is the generated path by path planning algorithm is uncertain due to the error of the robot sensing. And unlike the line following robot which has a real physical line for the reference, the generated path from path planning is virtual, e.g. it does not exist in the real world. I am really confused about these matter.&lt;/p&gt;&#xA;" OwnerUserId="9995" LastActivityDate="2015-06-24T06:53:01.520" Title="How to determine the trajectory reference on the real robot trajectory tracking" Tags="&lt;mobile-robot&gt;&lt;control&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7566" PostTypeId="2" ParentId="7517" CreationDate="2015-06-24T04:26:08.967" Score="0" Body="&lt;p&gt;I found an answer to this question. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Homography estimation is not needed at all. The  EKF takes care of the problem of depth estimation. If you start with an initial inverse depth estimate of $\rho_0 = 0.1 $ and $\sigma_\rho = 0.5$, the depth estimate would range from [-0.9,1.1]. This depth estimate would be corrected based on the observed values, obtained through feature matching. &lt;a href=&quot;https://www.doc.ic.ac.uk/~ajd/Publications/civera_etal_tro2008.pdf&quot; rel=&quot;nofollow&quot;&gt;Please refer to this paper&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anybody trying to learn this algorithm would do well by going through this publicly available &lt;a href=&quot;http://www-lehre.inf.uos.de/~svalbrec/documents/master_thesis.pdf&quot; rel=&quot;nofollow&quot;&gt;dissertation by Sven Albrecht&lt;/a&gt;. To my understanding, the mathematics involving MonoSLAM can't be elucidated any better than this! &lt;/p&gt;&#xA;" OwnerUserId="1949" LastEditorUserId="1949" LastEditDate="2015-06-24T04:54:06.237" LastActivityDate="2015-06-24T04:54:06.237" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7567" PostTypeId="2" ParentId="7565" CreationDate="2015-06-24T06:53:01.520" Score="2" Body="&lt;p&gt;The error needs &lt;strong&gt;always&lt;/strong&gt; to be computed against some physical quantities that can be measured, otherwise it makes no sense in practical scenarios. It is thus expressed as $e=r-y$, where $r$ is the &lt;strong&gt;reference&lt;/strong&gt; whereas $y$ accounts for the measured &lt;strong&gt;feedback&lt;/strong&gt; (I have used the typical notation of a control scheme).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;strong&gt;feedback&lt;/strong&gt; $y$ can be the outcome of direct measurements provided by the sensors (e.g. the encoders of the wheels of the line-follower robot) or an estimation of different quantities resulting by applying a model to those actual measurements (e.g. the prediction of the 2D position of the robot on the floor given by the integration of the wheels encoders).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similarly, the &lt;strong&gt;reference&lt;/strong&gt; $r$ can also result from a direct observation of the reality (e.g. it can be the line to track as acquired by the robot's sensors) or from a plan designed to attain a task. An example of the latter context is the planning used to move the robot from the initial position A to a target position B in the 2D world. This reference can be a simple line (virtual one) connecting A to B or a more complex path (still virtual) if we are in the presence of obstacles. Here the task is to reach B, not to follow any specific line that exists traced on the floor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From a control standpoint, there is no difference whether $r$ is &quot;real&quot; (i.e. measured) or &quot;virtual&quot; (i.e. planned). The central point is that the reference and the feedback need to be consistent between each other, meaning that they must account for the same physical quantities expressed in the same units: if $y$ is the wheels speed in [deg/s], then $r$ cannot be a spatial position in [m]. &lt;/p&gt;&#xA;" OwnerUserId="6941" LastActivityDate="2015-06-24T06:53:01.520" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7568" PostTypeId="2" ParentId="7564" CreationDate="2015-06-24T07:52:26.950" Score="4" Body="&lt;p&gt;If it's actually underwater, how about a webcam looking at the tile pattern on the floor?  (Could be considered &quot;cheating&quot; as it will obviously fail in a natural lake, for example.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can find a paper using and demonstrating this method is this paper:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://dx.doi.org/10.1109/ROBOT.2003.1241718&quot; rel=&quot;nofollow&quot;&gt;Carreras, Marc, et al. &quot;Vision-based localization of an underwater robot in a structured environment.&quot; Robotics and Automation, 2003. Proceedings. ICRA'03. IEEE International Conference on. Vol. 1. IEEE, 2003.&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9578" LastEditorUserId="6911" LastEditDate="2015-06-26T17:21:20.513" LastActivityDate="2015-06-26T17:21:20.513" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7569" PostTypeId="2" ParentId="7564" CreationDate="2015-06-24T09:21:57.240" Score="6" Body="&lt;p&gt;Localization under water was always a problem in ocean robotics as electromagnetic signals do not propagate very well in water. I think your best localization sensor in that case would be the good old sonar, which works much faster in water. You could have four of them and detect how far are the pool walls on each side then with a triangulation algorithm locate your robot approximately. You can also add one looking down for estimating the depth.&lt;/p&gt;&#xA;" OwnerUserId="4429" LastEditorUserId="4429" LastEditDate="2015-06-28T18:25:38.700" LastActivityDate="2015-06-28T18:25:38.700" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7570" PostTypeId="1" AcceptedAnswerId="7585" CreationDate="2015-06-24T10:31:05.347" Score="1" ViewCount="11494" Body="&lt;p&gt;I'm studying Introduction to robotic and found there is different equations to determine the position and orientation for the end effector of a robot using DH parameters transformation matrix, they are :&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/uVJMt.gif&quot; alt=&quot;1-&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/Z1hv9.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/voRGM.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Example: Puma 560, All joints are revolute&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Forward Kinematics:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given :The manipulator geometrical parameters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Specify: The position and orientation of manipulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Solution:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/1sRQj.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For Step 4:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/z8Ha7.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;for step 3 :Here I'm confused &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here we should calculate the transformation matrix  for each link  and then multiply them to get the position and orientation for the end effector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've seen different articles using one of these equations when they get to this step for the same robot(puma 560)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the difference between them? Will the result be different? Which one should I use when calculating the position and orientation?&lt;/p&gt;&#xA;" OwnerUserId="9998" LastEditorUserId="9998" LastEditDate="2015-06-26T20:47:08.110" LastActivityDate="2019-10-19T12:24:38.317" Title="Homogenous Transformation Matrix for DH parameters" Tags="&lt;dh-parameters&gt;" AnswerCount="4" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7571" PostTypeId="2" ParentId="7564" CreationDate="2015-06-24T10:54:32.233" Score="3" Body="&lt;p&gt;If you cannot use a camera the task is nearly impossible with your money limitations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Professionals use a scanning sonar like the tritech micron and a particle based localization like [3] based on FastSLAM: [1].&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However if you experienced with underwater acoustics you can try to build your own localization system based on the idea of a USBL idea [2] e but you will hard fight with reflections of the basin itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[1] &lt;a href=&quot;https://www.google.de/search?q=FastSLAM:+A+Factored+Solution+to+the+Simultaneous+...&amp;amp;ie=utf-8&amp;amp;oe=utf-8&amp;amp;rls=org.mozilla:en-US:unofficial&amp;amp;client=iceweasel-a&amp;amp;channel=rcs&amp;amp;gws_rd=cr&amp;amp;ei=ZYuKVdjhE4yYsAHK6JiwBA&quot; rel=&quot;nofollow&quot;&gt;https://www.google.de/search?q=FastSLAM:+A+Factored+Solution+to+the+Simultaneous+...&amp;amp;ie=utf-8&amp;amp;oe=utf-8&amp;amp;rls=org.mozilla:en-US:unofficial&amp;amp;client=iceweasel-a&amp;amp;channel=rcs&amp;amp;gws_rd=cr&amp;amp;ei=ZYuKVdjhE4yYsAHK6JiwBA&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[2] &lt;a href=&quot;https://en.wikipedia.org/wiki/Ultra-short_baseline&quot; rel=&quot;nofollow&quot;&gt;https://en.wikipedia.org/wiki/Ultra-short_baseline&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[3] &lt;a href=&quot;https://github.com/auv-avalon/uw_localization&quot; rel=&quot;nofollow&quot;&gt;https://github.com/auv-avalon/uw_localization&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4508" LastEditorUserId="127" LastEditDate="2015-06-25T11:58:19.930" LastActivityDate="2015-06-25T11:58:19.930" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7572" PostTypeId="2" ParentId="7564" CreationDate="2015-06-24T13:15:35.257" Score="4" Body="&lt;p&gt;One of the prime sensors for global localisation on land is GPS. This is not an option underwater because electromagnetic waves get absorbed quickly. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are however alternatives, which provide navigation information which is not so easily available on land.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Large Baseline (LBL) - is a method based on sonar, which works very similar to GPS, just using acoustics instead. For this you need transponders that ping at known intervals. The robot can than calculate its position based on the run length intervals. Because the timings are much easier than with GPS, coming up with your own solution might be feasible.&lt;/li&gt;&#xA;&lt;li&gt;Ultra Short Baseline (USBL) - works the same as the LBL, just that the transponders are very close to each other (usually one device). In this way you get an angle and range measurement. Less accurate, but more compact.&lt;/li&gt;&#xA;&lt;li&gt;Doppler Velocity Log (DVL) - uses the doppler effect in multiple directions to give you the velocity against ground. &lt;/li&gt;&#xA;&lt;li&gt;Pressure Sensor - you can directly get a measurement of your depth in the water column with this. &lt;/li&gt;&#xA;&lt;li&gt;AHRS - based on IMU and Compass, you can get a good estimate of your orientation. &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The bad news is that the sonar based methods are way off in terms of your budget. However, if you are interested in this, it might be feasible to construct a localisation method based on DIY hydrophones. Should definitely be a fun experience. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your alternatives, especially feasible in a pool, is to go optical. You can for example use an external camera to track your robot, or use markers (e.g. &lt;a href=&quot;http://www.uco.es/investiga/grupos/ava/node/26]&quot; rel=&quot;nofollow&quot;&gt;Aruco&lt;/a&gt;) to get a relation to a known position.&lt;/p&gt;&#xA;" OwnerUserId="127" LastActivityDate="2015-06-24T13:15:35.257" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7575" PostTypeId="1" CreationDate="2015-06-24T17:14:15.847" Score="3" ViewCount="684" Body="&lt;p&gt;I am fairly new to the DH-transformation and I have difficulties to understand how it works. Why are not all coordinates (X+Y+Z) incorporated into the parameters? It seems to me that at least one information is useless/goes to the trash, since there is only a, d (translatory information) and alpha, theta(rotatory information). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Example: &#xA;The transition between two coordinate systems with identical orientation(alpha=0, theta=0) but with different coordinates(x1!=x2, y1!=y2, z1!=z2). &#xA;DH only makes use of a maximum of two of these information.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please enlighten me! &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Greetings&lt;/p&gt;&#xA;&#xA;&lt;p&gt;:EDIT: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To clarify which part of the DH-Transform I don't understand, here is an example. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Imagine a CNC-Mill(COS1) on a stand(COS0) without any variable length(=no motion) between COS0-COS1. For some reason I need to incorporate the transformation from COS0-COS1(=T0-1) into the forward transformation of my CNC-Mill. &#xA;&lt;img src=&quot;https://i.stack.imgur.com/csRPG.png&quot; alt=&quot;DH1&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DH-Parameters for T0-1 would be a=5mm, alpha=90°, d=2mm and theta=90°. Assuming this is correct, the dX=10mm information is lost during this process?&#xA;If I recreate the relation between COS0 and COS1 according to the DH-Parameters, I end up like this: &#xA;&lt;img src=&quot;https://i.stack.imgur.com/EAbhr.png&quot; alt=&quot;DH2&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as I understand, on non parallel axis the information is not lost because the measurement of a/d would be diagonal, therefore include either dX/dY, dX/dZ or dY/dZ(pythagorean theorem) in one parameter. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where is the flaw in my logic?&lt;/p&gt;&#xA;" OwnerUserId="9589" LastEditorUserId="9589" LastEditDate="2015-06-29T15:44:17.810" LastActivityDate="2015-06-30T05:46:29.657" Title="DH-Parameters for Forward Kinematics for Translatory Motion only" Tags="&lt;forward-kinematics&gt;&lt;dh-parameters&gt;" AnswerCount="4" CommentCount="6" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7576" PostTypeId="2" ParentId="7575" CreationDate="2015-06-24T17:50:08.217" Score="2" Body="&lt;p&gt;You don't need an explicit declaration for X, Y, and Z because the information is all relative to the previous joint. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a terrific tutorial, see &lt;a href=&quot;https://www.youtube.com/watch?v=rA9tm0gTln8&quot; rel=&quot;nofollow&quot;&gt;this video&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You don't typically use DH parameters to generate a transform from one fixed coordinate to another fixed coordinate; you use them to define &lt;em&gt;joint motions&lt;/em&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your example, you want to recreate the transform from COS0 to COS1. (By the way, &lt;code&gt;cos&lt;/code&gt; is the symbol for &lt;a href=&quot;http://mathworld.wolfram.com/Cosine.html&quot; rel=&quot;nofollow&quot;&gt;cosine&lt;/a&gt; I would suggest using &lt;code&gt;F&lt;/code&gt; for denoting different frames of reference) You use the following DH parameters:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;d = 2mm&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\theta$ = 90 degrees ($\frac{\pi}{2}$)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;r = 5mm&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\alpha$ = -90 degrees ($-\frac{\pi}{2}$)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem here is that, again, DH parameters are for &lt;em&gt;joint motion&lt;/em&gt;, not for fixed locations, so all you are doing is defining the location and orientation of the Z-axis. In DH parameters, the Z-axis is the axis of motion. As mentioned &lt;a href=&quot;https://www.youtube.com/watch?v=rA9tm0gTln8&amp;amp;t=1m2s&quot; rel=&quot;nofollow&quot;&gt;about 1 minute into the video I linked&lt;/a&gt;, &quot;DH parameters are only concerned with the motion of the links, not the physical placement of components.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You are attempting to use DH parameters to locate a physical position where DH parameters are used to define an &lt;strong&gt;axis&lt;/strong&gt; of motion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your confusion comes from the fact that you are misusing the DH parameters. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2015-06-29T20:09:55.357" LastActivityDate="2015-06-29T20:09:55.357" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="7577" PostTypeId="2" ParentId="230" CreationDate="2015-06-24T17:50:16.920" Score="2" Body="&lt;p&gt;There is a project called &lt;a href=&quot;http://wiki.ros.org/ROSberryPi/Setting%20up%20ROS%20on%20RaspberryPi&quot; rel=&quot;nofollow&quot;&gt;ROSpberry Pi&lt;/a&gt;&#xA;you can check out.  And a company in Pasadena called &lt;a href=&quot;https://acrobotic.com/rpi-00005&quot; rel=&quot;nofollow&quot;&gt;Acrobotic&lt;/a&gt; is now selling SD images of ROSpberry pre-installed.&lt;/p&gt;&#xA;" OwnerUserId="10003" LastActivityDate="2015-06-24T17:50:16.920" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7578" PostTypeId="1" CreationDate="2015-06-24T19:28:21.850" Score="1" ViewCount="1168" Body="&lt;p&gt;I recently decided to build a quadricopter from scratch using Arduino and now I'm faced with an orientation estimation problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I bought a cheap 10DOF sensor with 3 axis magnetometer, 3 axis accelerometer, 3 axis gyro and a barometer and the complementary filter that I use to get orientation returns usable but noisy values.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried the Madgwick fusion filter too, but it returns unstable values that diverges from the ones I get with complementary filter. Given that the Madgwick filter implementation is correct, I pass acceleration values measured in Gs, gyro values measured in rps (radians per second) and Magnetometer values measured in uT, while sampling time is the same of my loop cycle. Is there anything I have missed?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any advantage using Kalman filter?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT1:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My problem was due to an wrong choice of sampling time and now seems to work, but convergence is very very slow (i.e. it takes about 3 seconds to reach the right value after a quick flip of the IMU). Rising value of Kp adds to much noise. I also tried to repeat filter update step more than once per cycle but it requires too much time exceeding the sampling time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here some graphs, from top to bottom Complementary filter, Madgwick filter and Madgwick filter with high Kp:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/Rfyh4.png&quot; alt=&quot;Complementary filter: fast but a bit noisy&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/85NdG.png&quot; alt=&quot;Madgwick filter&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/MPTdg.png&quot; alt=&quot;Madgwick filter with high kp value&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT2:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Different values probably are caused by cable plug and unplug. Anyway raw data example from my sensor can be downloaded &lt;a href=&quot;https://drive.google.com/file/d/0B59xb_cEOCa7NUl2OS1UME16SUU/view?usp=sharing&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10004" LastEditorUserId="10004" LastEditDate="2015-06-27T23:52:16.117" LastActivityDate="2015-07-28T03:14:33.943" Title="Orientation parameter for quadcopter with madgwick fusion algorithm" Tags="&lt;arduino&gt;&lt;quadcopter&gt;&lt;kalman-filter&gt;&lt;imu&gt;" AnswerCount="0" CommentCount="12" ContentLicense="CC BY-SA 3.0" />
  <row Id="7579" PostTypeId="2" ParentId="7575" CreationDate="2015-06-25T04:18:53.357" Score="3" Body="&lt;p&gt;In DH, the Z axis always goes along the direction of variability. For a rotational (revolute) joint, that means Z is the axis of rotation. For a translational joint (prismatic) the Z axis is in the direction that the joint can translate. For each direction the robot can be actuated, a coordinate system is needed. So your example of a gantry crane, if that crane can be actuated in 3 directions, then it will take 3 coordinate systems to define said crane.  Then the CNC mill will need 3 as well. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, now taking a step back. Since our hypothetical 3D gantry crane has 3 coordinate systems, and in each coordinate system the Z axis is along the direction of freedom, you can imagine that from a global perspective, X,Y and Z are dealt with. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I made a quick illustration. If you look, you can see that Z2 defines a direction that the crane can be actuated, but it is in X direction of the preceding coordinate system (X1). Z1 also defines a direction of acutation, but it is in the Y direction of the preceding coordinate system (Y0). So from a global perspective, the X,Y,Z are essentially incorporated. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the basis of your question boils down to, &quot;why is only Z used as the axis of actuation?&quot; I don't have an answer for that, other than probably the math would break down somewhere. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/ODMSa.jpg&quot; alt=&quot;enter image description here&quot;&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;More info based on updated description. To transform between two coordinate systems with no variability in between them, all that is required is a homogeneous transform, as shown. Reference for how these matrices are formed can be found &lt;a href=&quot;http://www.ro.feri.uni-mb.si/predmeti/robotizacija/knjiga/homogene.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; on page 65 of the text.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/Ef9Fw.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="4169" LastEditorUserId="4169" LastEditDate="2015-06-29T20:28:20.327" LastActivityDate="2015-06-29T20:28:20.327" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7580" PostTypeId="1" AcceptedAnswerId="7583" CreationDate="2015-06-25T09:41:31.950" Score="4" ViewCount="182" Body="&lt;p&gt;I want to develop an autonomous driving RC car. For detecting obstacles, I plan to mount 3-5 ultrasonic sensors in the front and in the back the car. What is the  minimum necessary combined field of view of the sensors so the car never hits an obstacle? I.e. what is the minimum angle of detection of the combined sensors the car should have to detect any obstacle in its path?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some data about the car: (I don't know whether all the data is relevant)&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Separation between right and left wheel : 19,5 cm&lt;/li&gt;&#xA;&lt;li&gt;Wheelbase (distance between the front and the back wheels):  31,3cm&lt;/li&gt;&#xA;&lt;li&gt;Steering axle: front.&lt;/li&gt;&#xA;&lt;li&gt;Maximum angle of steering: around 30 degrees. The car uses &lt;a href=&quot;https://en.wikipedia.org/wiki/Ackermann_steering_geometry&quot; rel=&quot;nofollow&quot;&gt;Ackermann steering&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="9013" LastEditorUserId="9013" LastEditDate="2015-06-25T10:47:23.170" LastActivityDate="2015-06-25T17:57:34.483" Title="Sensors' field of view in car driving" Tags="&lt;mobile-robot&gt;&lt;sensors&gt;&lt;wheeled-robot&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7582" PostTypeId="2" ParentId="7575" CreationDate="2015-06-25T14:07:16.003" Score="1" Body="&lt;p&gt;I studied DH transformation for industrial robotics exam. In DH procedure you consider only 1DOF joint (eventually decomposing a xDOF joint in x 1DOF with 0 link length) and you set relative z-axis parallel to joint axis and x-axis perpendicular to the plan defined by k-joint axis and k+1-joint axis. In this way you can consider every joint-to-joint transformation as a spin on relative z-axis and a spin on x-axis (the spin is defined as rotation and translation on the same axis and is the only 3D commutative tranformation). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, for each joint you get a transformation matrix that depends on joint variable (rotation or translation on relative z-axis) and on link length and geometry(rotation and/or translation on relative x-axis) . &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The total transformation matrix is the product of all single joint transformation matrix and it depends on all joint variables and on robot geometry&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope that this fast explanation is helpful and I hope that I did not made too many grammatical mistakes!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DH transform is normally used to compute kinematics in robotic arms and it doesn't work for all kind of motion. In some cases it needs a &quot;patch&quot; in order to be usable for some configuration (i.e. adding an auxiliary 0DOF link to include some geometries). In your case I think you should decompose your sistem in two different transformation T0-1 and T1-2 to include every translation. In alternative you can set x-axis parallel to diagonal in order to have only one transformation matrix T0-1&lt;/p&gt;&#xA;" OwnerUserId="10004" LastEditorUserId="10004" LastEditDate="2015-06-30T05:46:29.657" LastActivityDate="2015-06-30T05:46:29.657" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7583" PostTypeId="2" ParentId="7580" CreationDate="2015-06-25T17:57:34.483" Score="4" Body="&lt;p&gt;How fast are you driving the car and are you &lt;a href=&quot;http://www.youtube.com/watch?v=e-7lsyueC08&quot; rel=&quot;nofollow noreferrer&quot;&gt;allowing slip during turning&lt;/a&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From &lt;a href=&quot;https://engineering.purdue.edu/ABE/People/Krutz/Lecture%201&quot; rel=&quot;nofollow noreferrer&quot;&gt;this powerpoint&lt;/a&gt;, the turning radius is given by:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;R = \frac{L}{\delta}&#xA;$$&#xA;where $R$ is the turning radius, $L$ is the wheelbase length, and $\delta$ is the steering angle. Note that the equation is for &lt;em&gt;low speed&lt;/em&gt; driving. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given this equation, you can generate a circle around which the car will traverse. Now you need to specify a reaction/braking time. Multiply the reaction time (seconds) by the average vehicle stopping speed (meters per second) to get how many meters the vehicle will travel in the time it takes to stop. Note that if you're using a linear deceleration the average vehicle stopping speed will be half of your cruising speed. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, the distance around your turning circle is $d = R\theta$, where again, $R$ is the turning radius. This gives your location on the turning circle when you come to a stop to be $\theta = \frac{d}{R}$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, look at the angle the object makes with the axis of your car at that position. This should be the minimum angle you are looking to see an obstacle. Here's a (crude) image for clarity:&#xA;&lt;img src=&quot;https://i.stack.imgur.com/yoqc7.png&quot; alt=&quot;object recognition&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming your 30 degree steering angle is actually +/- 15 degrees, then your steering circle might look something like the above. Given your stopping distance, you need to be able to identify something at least at the red 'X'. This means your forward-looking sensor needs to be at an angle of, in this example, 50 degrees off the center line of your car in order to be able to see it in time to stop without collision.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The faster you are going, the longer it will take to stop, so the farther &quot;around&quot; the turning circle you need to be able to see. As alluded to with the link at the opening of this post, though, RC cars generally have a lot of slip, so you will need to ensure that the car operates at probably a painfully slow speed to ensure the Ackerman steering radius equation above remains valid and to ensure that you don't have slip when braking. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;While it is probably acceptable to assume that performance in reverse is the same as in forward this may or may not actually be the case. Braking times, speed, and slip could all perform differently in reverse than in the forward direction. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, remember that the guidance I've given gives you the &lt;em&gt;minimum&lt;/em&gt; distance for a &lt;em&gt;large&lt;/em&gt; object and assumes instantaneous detection and reaction signalling. That is, you should add a margin to what this gives you. You &lt;em&gt;should&lt;/em&gt; have full sensor coverage between your turning extremes (that is, sensor coverage of +/- 50 degrees in this example) to ensure you don't hit any objects, but as you probably won't hit any RC-scale light poles, people, or other relatively narrow objects, you can probably skate by with a few gaps in your sensor coverage. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-06-25T17:57:34.483" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7584" PostTypeId="2" ParentId="7575" CreationDate="2015-06-25T19:13:51.860" Score="1" Body="&lt;p&gt;To be short and simple, D-H notation uses third axis as the reference to the other 2 through out the calculations. &lt;/p&gt;&#xA;" OwnerUserId="9987" LastActivityDate="2015-06-25T19:13:51.860" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7585" PostTypeId="2" ParentId="7570" CreationDate="2015-06-25T19:25:04.787" Score="0" Body="&lt;p&gt;Given a robotic arm, if you derive homogeneous transformation matrix for it , it will be equal to one of the above mentioned equations. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Those equations are the basic scenarios for reaching the end point, any robotic arm will satisfy one of the three equations .&#xA;The equations simply mean the order of manipulations carried out by the arm.&#xA;A translation along x axis followed by a rotation &#xA;Or &#xA;A rotation followed by a translation .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you observe the equations you can notice that there can be two consecutive translations but not rotations. &#xA;These are the basic scenarios, however for a custom robot the equations can be different &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example,let us consider a robotic arm with a revolute base followed by  prismatic joint, and another revolute joint&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The scenario of this robot is &lt;/p&gt;&#xA;&#xA;&lt;p&gt;rotation-&gt;translation-&gt;rotation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If another robot has a prismatic base, revolute joint, and again a prismatic joint, the equation would look like&lt;/p&gt;&#xA;&#xA;&lt;p&gt;translation-&gt;rotation-&gt;translation&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, it depends on the robotic arm that you are working on. But these are the basic situations to understand that sometimes translation is followed by rotation or vice versa, or two consecutive translations but no consecutive rotations. If you understand these equations, you can build your own using them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additional info:&#xA;After reading back and forth in my robotics and modelling book, i forgot to tell you one thing in DH notation matrices. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Transaltion matrices Trans(z,d), Trans (x,a) are identity matrices with just one vale in the last column.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;1 0 0 0&#xA;0 1 0 0&#xA;0 0 1 d&#xA;0 0 0 1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;1 0 0 a&#xA;0 1 0 0&#xA;0 0 1 0&#xA;0 0 0 1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So, they dont change the overall result even if they are multiplied before or after the rotation matrices. &#xA;I used the second equation to calculate transformation matrix for puma 560 in a java program. It was perfect. &#xA;I hope this clears your confusion, sorry for the delay.&lt;/p&gt;&#xA;" OwnerUserId="9987" LastEditorUserId="9987" LastEditDate="2015-06-30T03:41:23.773" LastActivityDate="2015-06-30T03:41:23.773" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7586" PostTypeId="2" ParentId="7570" CreationDate="2015-06-25T21:02:37.780" Score="1" Body="&lt;p&gt;Without knowing more context, the clearest answer is; the different &quot;versions&quot; represent different end effector configurations. Following the DH approach, you could take a robot in one configuration, assign it the DH parameters, and arrive at a transformation matrix, then rearrange the robot and come up with a new transformation matrix...But both versions could have the same parameters. There is no single solution you should use unless you're using an &quot;off the shelf&quot; robot such as a SCARA manipulator, which has DH solutions already worked out.&lt;/p&gt;&#xA;" OwnerUserId="4169" LastActivityDate="2015-06-25T21:02:37.780" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7587" PostTypeId="2" ParentId="6849" CreationDate="2015-06-25T23:10:39.763" Score="2" Body="&lt;p&gt;&lt;em&gt;The nodes hold the poses of the robot/camera. It is unclear though at which reference frame they are defined. If it is the world coordinate frame, is it defined according to the camera or according to the object, i.e. first acquired pointcloud? This would affect the accumulation of the pose matrices during incremental registration (before the g2o stage - I try to form and optimize the graph only once at the end, for all the frames/pointclouds).&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-&#xA;As far as I can tell, they should be in world coordinate frame indeed. So we start with identity, and incrementally carry on moving as we compute the odometry transformations (if visual odometry is used). So basically Pose_1 = Identity, Pose_2 = Poise_1*T_12, ..., Pose_i = Pose_(i-1)*T_(i-1)i. So that's one way.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&lt;em&gt;The edge (Src-&gt;Tgt) constraints hold the relative transformation from pointcloudSrc to pointcloudTgt. Is it just the transformation based on the features of the two in the local coordinate frame of pointcloudSrc? Is there and tricky point regarding the direction, or just consistency with the relative transformation is enough?&lt;/em&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Say you were in Pose_(i-1) (your previous known pose), and you want to compute the relative transformation between Pose_(i-1) and the current unknown pose Pose_i. Then you get the previous point cloud in coordinate frame of Pose_(i-1), I will call it PC_(i-1), and you also get your current point cloud PC_i and put also with respect to Pose_(i-1).&#xA;More specifically, for all points p belonging to PC_(i-1), you transform them using Pose_(i-1), making p' = Pose_(i-1)*p, same for the points q, obtaining q' = Pose_(i-1)*q.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given these two point clouds we can compute ICP between them&#xA;src_cloud = PC_(i-1)&#xA;tgt_cloud = PC_i&#xA;T_(i-1)i = ICP( src_cloud, tgt_cloud ).inverse();&lt;/p&gt;&#xA;&#xA;&lt;p&gt;--&gt; Note that instead of ICP you could have some other algorithm to align two point clouds, this is just an example.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(we get the inverse of the transform that aligns src_cloud to tgt_cloud because we want the relative motion of the robot/camera, and not the relative motion of the cloud, one is the inverse of the other, just like if you move towards a tree, the tree moves towards you with the same transformation, but inverse).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;The first node is always fixed. Does the fixed node affect the direction of the edge that departs/ends_up from/at the fixed node?&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first node is fixed because of the formulation of the linear system (which the whole graph optimisation equation becomes at the end, you can see g2o paper and also look for &quot;A tutorial on Graph-Based SLAM&quot;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Is there any other tricky point that could hinter implementation?&lt;/em&gt;&#xA;If you read RGBDSLAM code, and RTABMAP code, you will see that they set the information matrix as the identity multiplied by &lt;em&gt;something&lt;/em&gt;. This &lt;em&gt;something&lt;/em&gt; can be a proxy that reflects the inverse variance, you can compute the variance itself (average distance between the  aligned points of the point clouds aligned with T_(i-1)i). You can set it as the identity multiplied by the number of inliers in your aligned procedure of choice, the whole point is that your information matrix must say more or less how much certain you are about the correctness of the transformation T_(i-1)i, or how much information it's bringing to the system, that's the main semantic meaning.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;I'm working in millimeter instead of meter units, I'm not sure if this will affect the solvers of g2o in any way. (I wouldn't expect so, but a naive use of g2o that was giving some usable results was influenced)&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't think it should create problems either, although you should beware of numerical issues such as overflow/underflow, rounding, and such things.&lt;/p&gt;&#xA;" OwnerUserId="10012" LastActivityDate="2015-06-25T23:10:39.763" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7588" PostTypeId="1" AcceptedAnswerId="7589" CreationDate="2015-06-26T07:22:03.090" Score="2" ViewCount="146" Body="&lt;p&gt;I would like to start experimenting with Robots. Is &lt;a href=&quot;http://www.lego.com/nl-be/mindstorms/?domainredir=mindstorms.lego.com&amp;amp;showlanguageselector=true&quot; rel=&quot;nofollow&quot;&gt;Lego Mindstorm&lt;/a&gt; a good start? Should I consider other platforms?&lt;/p&gt;&#xA;" OwnerUserId="10016" LastActivityDate="2015-06-26T20:54:47.423" Title="Is Lego Mindstorm a good start?" Tags="&lt;platform&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ClosedDate="2015-07-06T11:17:47.757" ContentLicense="CC BY-SA 3.0" />
  <row Id="7589" PostTypeId="2" ParentId="7588" CreationDate="2015-06-26T09:31:42.427" Score="5" Body="&lt;p&gt;If you want to focus on the software only, then Mindstorms are a great start. Because you have a fixed platform and do not need to care a lot about the hardware. And if you want to mount some homebrew sensors this is also possible. The mindstorms itself are well documented and the hardware/software interfaces are relatively easy.&lt;br&gt;&#xA;You can do some stuff by using the Lego-NXT Programming IDE or even write your own programms and let them run directly. At the end you can even upload your own OS to the Arm7 and do whatever you want. Just do not forget the Samba (see NXT Hardware SDK) If you have more question to the Lego-Robots, there is SE for this, too. &lt;a href=&quot;https://bricks.stackexchange.com/&quot;&gt;https://bricks.stackexchange.com/&lt;/a&gt; &lt;br&gt;&lt;br&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead of using Lego you can think about buying some Arduino/Raspy based robots, where you might need to get your hands more dirty (from hardware point of view)&lt;/p&gt;&#xA;" OwnerUserId="6911" LastEditorUserId="-1" LastEditDate="2017-04-13T12:47:56.297" LastActivityDate="2015-06-26T09:31:42.427" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7590" PostTypeId="2" ParentId="7588" CreationDate="2015-06-26T19:49:40.957" Score="1" Body="&lt;p&gt;I played quite a lot with the lego mindstorms and indeed they are interesting but I found them quite limited at the ARM level. The other point with them is that when you move to another Core like the raspberry which I find more interesting (but I am a developper) is that you can continue using the lego parts with it.&lt;br&gt;&#xA;So depending where you want to focus on, lego is a good start for all the bricks, sensors and motors but if it is for more programming raspberry will be a good choice.&lt;br&gt;&lt;br&gt;&#xA;Tosbiak gave some link on the lego so I will just complete with a link on raspberry: &lt;a href=&quot;https://www.raspberrypi.org/resources/&quot; rel=&quot;nofollow&quot;&gt;https://www.raspberrypi.org/resources/&lt;/a&gt; (for exemple the butler is quite and interesting robot to make)&lt;/p&gt;&#xA;" OwnerUserId="9969" LastActivityDate="2015-06-26T19:49:40.957" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7591" PostTypeId="2" ParentId="7588" CreationDate="2015-06-26T20:54:47.423" Score="0" Body="&lt;p&gt;In addition to Mindstorms being a good start for software, there are competitions for younger students such as FIRST robotics, and &lt;a href=&quot;http://www.botball.org/&quot; rel=&quot;nofollow&quot;&gt;Botball&lt;/a&gt; where Legos plays a large role(may not be found everywhere though). You learn software, and also how to design a robot to perform a specific task or tasks. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However you will not learn the electronics side thus missing out on a huge part of the experience. While I haven't tested it, I started with a kit similar to this &lt;a href=&quot;http://www.adafruit.com/product/749&quot; rel=&quot;nofollow&quot;&gt;Parallax BOEBot from Adafruit&lt;/a&gt;. It serves as not only an introduction to software, but also the parts involved and assembly. The downside here is that you're not working with Legos and so the ability to reconfigure and build something new is lacking. &lt;/p&gt;&#xA;" OwnerUserId="4169" LastActivityDate="2015-06-26T20:54:47.423" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7592" PostTypeId="1" CreationDate="2015-06-27T04:32:06.333" Score="2" ViewCount="354" Body="&lt;p&gt;I am trying to use Invensense's MPU9250. I am using provided library to read euler angle. When the IMU rotates about one axis, angles about other two axes change too. What could be potential cause to it? &lt;/p&gt;&#xA;" OwnerUserId="9972" LastActivityDate="2015-10-28T18:51:30.880" Title="IMU rotate about one axis, other two angles change too" Tags="&lt;imu&gt;" AnswerCount="2" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="7593" PostTypeId="2" ParentId="7557" CreationDate="2015-06-27T15:22:34.693" Score="1" Body="&lt;p&gt;Well, from the last post in the thread you linked states it's a USB speed issue, then says you need 20 MB/s to do depth and RGB, which means you &lt;strong&gt;cannot&lt;/strong&gt; do it on a USB 1.0 port; you need 2.0 or 3.0.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See &lt;a href=&quot;https://support.apple.com/en-us/HT202875&quot; rel=&quot;nofollow&quot;&gt;this support page&lt;/a&gt; on Apple's site for how to determine the speed of your USB ports. You didn't give the model of your computer, but if it's an older laptop you might have 1.0 ports.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Try checking your port speed and switch to a 2.0 port (or just a different 2.0 port) and see if you have the same issue. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-06-27T15:22:34.693" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7594" PostTypeId="2" ParentId="7549" CreationDate="2015-06-28T00:41:55.740" Score="1" Body="&lt;p&gt;I can't speak for the others, but the Bumblebee2 simply gives you a synchronized pair of images, and some calibration parameters.  You need a host computer to compute the stereo correspondence.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For all stereo cameras, the quality of output and &quot;number of disparities&quot; will greatly depend on the scene.  Stereo matching requires salient features to be found in both images.  So looking at large solid color walls, tabletops, and things like that return very few matches.  However, natural scenes, and scenes with texture and clutter perform much better.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;FYI, the &lt;a href=&quot;http://click.intel.com/intel-realsense-developer-kit.html&quot; rel=&quot;nofollow&quot;&gt;Intel RealSense&lt;/a&gt; gets around some of these limitations by projecting an IR texture in the scene, then doing regular stereo matching.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-06-28T00:41:55.740" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7595" PostTypeId="1" CreationDate="2015-06-28T06:16:26.610" Score="0" ViewCount="1523" Body="&lt;p&gt;I created a program to simple time base delay (in seconds). I have problem:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How to read a interrupt flag from channel 1 etc.?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I use &lt;code&gt;if(__HAL_TIM_GET_FLAG(&amp;amp;htim2, TIM_FLAG_CC1) != RESET)&lt;/code&gt; an error occurs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the interrupt occurred , uC should clear flag and set Blue LED in Discovery Board.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is my program:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Main.c&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/* Includes */&#xA;#include &quot;stm32f3xx_hal.h&quot;&#xA;&#xA;/* Private variables */&#xA;TIM_HandleTypeDef htim2;&#xA;&#xA;/* Private function prototypes */&#xA;void SystemClock_Config(void);&#xA;static void MX_GPIO_Init(void);&#xA;static void MX_TIM2_Init(void);&#xA;&#xA;int main(void)&#xA;{&#xA;&#xA;  /* MCU Configuration----------------------------------------------------------*/&#xA;&#xA;  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */&#xA; HAL_Init();&#xA;&#xA;  /* Configure the system clock */&#xA;  SystemClock_Config();&#xA;&#xA;  /* Initialize all configured peripherals */&#xA;  MX_GPIO_Init();&#xA;  MX_TIM2_Init();&#xA;&#xA;  /* Infinite loop */&#xA;&#xA;  while (1)&#xA;  {&#xA;      HAL_GPIO_WritePin(GPIOE,GPIO_PIN_11,GPIO_PIN_RESET);&#xA;  }&#xA;}&#xA;&#xA;/** System Clock Configuration*/&#xA;&#xA;void SystemClock_Config(void)&#xA;{&#xA;&#xA;  RCC_OscInitTypeDef RCC_OscInitStruct;&#xA;  RCC_ClkInitTypeDef RCC_ClkInitStruct;&#xA;&#xA;  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;&#xA;  RCC_OscInitStruct.HSEState = RCC_HSE_ON;&#xA;  RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;&#xA;  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;&#xA;  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;&#xA;  RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;&#xA;  HAL_RCC_OscConfig(&amp;amp;RCC_OscInitStruct);&#xA;&#xA;  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1;&#xA;  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;&#xA;  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;&#xA;  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;&#xA;  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;&#xA;  HAL_RCC_ClockConfig(&amp;amp;RCC_ClkInitStruct, FLASH_LATENCY_2);&#xA;&#xA;  HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);&#xA;&#xA;  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);&#xA;&#xA;}&#xA;&#xA;/* TIM2 init function */&#xA;void MX_TIM2_Init(void)&#xA;{&#xA;&#xA;  TIM_ClockConfigTypeDef sClockSourceConfig;&#xA;  TIM_MasterConfigTypeDef sMasterConfig;&#xA;  TIM_OC_InitTypeDef sConfigOC;&#xA;&#xA;  htim2.Instance = TIM2;&#xA;  htim2.Init.Prescaler = 7199; //72Mhz/7200 &#xA;  htim2.Init.CounterMode = TIM_COUNTERMODE_UP;&#xA;  htim2.Init.Period = 65535;&#xA;  htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;&#xA;  HAL_TIM_Base_Init(&amp;amp;htim2);&#xA;&#xA;  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;&#xA;  HAL_TIM_ConfigClockSource(&amp;amp;htim2, &amp;amp;sClockSourceConfig);&#xA;&#xA;  HAL_TIM_OC_Init(&amp;amp;htim2);&#xA;&#xA;  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;&#xA;  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;&#xA;  HAL_TIMEx_MasterConfigSynchronization(&amp;amp;htim2, &amp;amp;sMasterConfig);&#xA;&#xA;  sConfigOC.OCMode = TIM_OCMODE_TIMING;&#xA;  sConfigOC.Pulse = 20000; //0.0001[s] * 20000 = 2 [s] DELAY&#xA;  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;&#xA;  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;&#xA;  HAL_TIM_OC_ConfigChannel(&amp;amp;htim2, &amp;amp;sConfigOC, TIM_CHANNEL_1);&#xA;&#xA;  sConfigOC.OCMode = TIM_OCMODE_TIMING;&#xA;  sConfigOC.Pulse = 30000;&#xA;  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;&#xA;  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;&#xA;  HAL_TIM_OC_ConfigChannel(&amp;amp;htim2, &amp;amp;sConfigOC, TIM_CHANNEL_2);&#xA;  HAL_TIM_Base_Start_IT(&amp;amp;htim2);&#xA;&#xA;  HAL_TIM_OC_Start_IT(&amp;amp;htim2,TIM_CHANNEL_1 );&#xA;  //HAL_TIM_OC_Start_IT(&amp;amp;htim2,TIM_CHANNEL_2 );&#xA;}&#xA;&#xA;/** Configure pins as &#xA;        * Analog&#xA;        * Input &#xA;        * Output&#xA;        * EVENT_OUT&#xA;        * EXTI&#xA;     PC9   ------&amp;gt; I2S_CKIN&#xA;*/&#xA;void MX_GPIO_Init(void)&#xA;{&#xA;  GPIO_InitTypeDef GPIO_InitStruct;&#xA;&#xA;  /* GPIO Ports Clock Enable */&#xA;  __GPIOF_CLK_ENABLE();&#xA;  __GPIOC_CLK_ENABLE();&#xA;  __GPIOE_CLK_ENABLE();&#xA;&#xA;  /*Configure GPIO pin : PC9 */&#xA;  GPIO_InitStruct.Pin = GPIO_PIN_9;&#xA;  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;&#xA;  GPIO_InitStruct.Pull = GPIO_NOPULL;&#xA;  GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;&#xA;  GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;&#xA;  HAL_GPIO_Init(GPIOC, &amp;amp;GPIO_InitStruct);&#xA;&#xA; /*&#xA;  * Configure GPIO pin : PE8 BLUE LED&#xA;  */&#xA;&#xA;  GPIO_InitStruct.Pin=GPIO_PIN_8;&#xA;  GPIO_InitStruct.Mode=GPIO_MODE_OUTPUT_PP;&#xA;  GPIO_InitStruct.Pull=GPIO_NOPULL;&#xA;  GPIO_InitStruct.Speed=GPIO_SPEED_HIGH;&#xA;  HAL_GPIO_Init(GPIOE,&amp;amp;GPIO_InitStruct);&#xA;&#xA;  GPIO_InitStruct.Pin=GPIO_PIN_12;&#xA;  GPIO_InitStruct.Mode=GPIO_MODE_OUTPUT_PP;&#xA;  GPIO_InitStruct.Pull=GPIO_NOPULL;&#xA;  GPIO_InitStruct.Speed=GPIO_SPEED_HIGH;&#xA;  HAL_GPIO_Init(GPIOE,&amp;amp;GPIO_InitStruct);&#xA;&#xA;/*&#xA; * COnfigure GPIO pin : PE11 GREEN LED&#xA; */&#xA;&#xA;  GPIO_InitStruct.Pin=GPIO_PIN_11;&#xA;  GPIO_InitStruct.Mode=GPIO_MODE_OUTPUT_PP;&#xA;  GPIO_InitStruct.Pull=GPIO_NOPULL;&#xA;  GPIO_InitStruct.Speed=GPIO_SPEED_HIGH;&#xA;  HAL_GPIO_Init(GPIOE,&amp;amp;GPIO_InitStruct);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;low level implementation:&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)&#xA;{&#xA;  if(htim_base-&amp;gt;Instance==TIM2)&#xA;  {&#xA;    /* Peripheral clock enable */&#xA;    __TIM2_CLK_ENABLE();&#xA;    /* Peripheral interrupt init*/&#xA;    HAL_NVIC_SetPriority(TIM2_IRQn, 0, 0);&#xA;    HAL_NVIC_EnableIRQ(TIM2_IRQn);&#xA;&#xA;  }&#xA;&#xA;}&#xA;&#xA;void TIM2_IRQHandler(void)&#xA;{&#xA;&#xA;  /* USER CODE BEGIN TIM2_IRQn 0 */&#xA;  HAL_GPIO_WritePin(GPIOE,GPIO_PIN_8,GPIO_PIN_SET);&#xA;&#xA;  // HAL_GPIO_TogglePin(GPIOE,GPIO_PIN_12);&#xA;  HAL_TIM_IRQHandler(&amp;amp;htim2); //THis function is implemented by StmCubeMX , WHAT IS THIS?&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So how should my &lt;code&gt;TIM2_IRQHandler&lt;/code&gt; look like? Each channel generate delay in +1 sec. When I am debugging this program, when LED is set the period is equal to 1s (time for set LED). &lt;/p&gt;&#xA;" OwnerUserId="9634" LastEditorUserId="10596" LastEditDate="2016-09-05T13:40:27.743" LastActivityDate="2016-10-05T14:21:53.300" Title="STM32_OC_Timing and IRQHandler" Tags="&lt;microcontroller&gt;&lt;c&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7596" PostTypeId="2" ParentId="3027" CreationDate="2015-06-28T07:57:16.550" Score="0" Body="&lt;p&gt;Your code assumes that the CPU is running at a constant clock. However, in real life it will change, and sometimes even drastically! So it is required to insert a Delta Time (dt) factor to your KI and KD terms in the computations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;i.e.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;(KI_ROLL * (roll_old + roll) *dt) +&#xA;(KD_ROLL * (roll - roll_old) *dt)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(dt = time_now - time_previous)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the way, your Integral term is a &lt;em&gt;wrong one&lt;/em&gt;! As it stands, it's probably destabilizing the whole system. An integral controller should use a Integral_Roll_error variable, which is the addition of errors in time. For example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Integral_Roll_error = Integral_Roll_error + roll - roll_old;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Running fast is important, but running a stable rate is required, especially if you want to be able to analyse your system, or do tests, compare different control logics, to add a Navigation algorithm, or payload control algorithm later on, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Coming back to the question:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&quot;I am having trouble interpreting the system response on varying the constants.&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It would be beneficial to elaborate a little bit more on what sort of funny or difficulties you ran into. Adding some response charts from your tests would probably let the community help many in practical ways.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second question asks about the rate limit of the motor control output command. This depends a lot on what sort of a performance you are expecting. The code is only computing the roll_command. How it is turned to motor commands is a relevant topic. In general, as long as the motor accelerations do not cause harm, you could make them as fast as you could.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The performance requirement of the controller (how fast it should stably bring the system to the desired state, how far it should/could overshoot, what sort of a damping it should have), derives the required motor_rate_limit. For example, lift off could be one of the performance requirements. From a standing position to leving the ground, if it takes 30 seconds, is it acceptable? or if the vehicle is tilted by 60 degrees in 2 seconds, (the lift will drop to half if not compensated), you need more Lift all of a sudden. So angular agility of the vehicle is indirectly affecting the lift_agility of the vehicle, and in turn the motor_control_rates.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;3) At what thrust range or values, should the tuning be performed? Minimum, lift off, or mid-range or is it irrelevant?&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It is relevant. At the limits of thrust, you are not able to accelerate the motors that are already at their maximum. (unless you never allow to go beyond a specific total_Thrust, which is a workaround, by giving up some performance.) So the gains of the controller must be tuned at the maximum, as well as some other points of the operational envelope (forward flight, hover). Reminder: Max thrust and similarly min thrust tests would not be easy to achieve with normal flights.&lt;/p&gt;&#xA;" OwnerUserId="9570" LastEditorUserId="9570" LastEditDate="2015-06-28T08:03:51.537" LastActivityDate="2015-06-28T08:03:51.537" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7597" PostTypeId="2" ParentId="6581" CreationDate="2015-06-28T14:23:52.047" Score="4" Body="&lt;p&gt;The Kinect is certainly a popular choice these days for robotics.  However, time-of-flight, structured light, and stereo cameras all have their own strengths and weaknesses.  These two threads have a good discussion:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/7014/what-main-factors-features-explain-the-high-price-of-most-industrial-computer-vi&quot;&gt;What main factors/features explain the high price of most industrial computer vision hardware?&lt;/a&gt; &lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/7549/question-for-those-who-have-experience-using-stereo-cameras-module-e-g-zed-du&quot;&gt;Question for those who have experience using stereo cameras/module (e.g. ZED, DUO M, Bumblebee, etc.)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I think the simple answer is that stereo requires visual texture in the scene, and you can alter your baseline for different min/max ranges.  TOF cameras might have trouble with certain materials, and can give you false readings when an object is too close to the camera.&lt;/p&gt;&#xA;" OwnerUserId="110" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2015-06-28T14:23:52.047" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7598" PostTypeId="1" CreationDate="2015-06-28T22:45:25.450" Score="1" ViewCount="478" Body="&lt;p&gt;I got an &lt;a href=&quot;http://www.owirobots.com/store/catalog/robotic-arm-kits-and-accessories/owi-535pc-robotic-arm-kit-with-usb-pc-interface-138.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;OWI Robotic arm&lt;/a&gt;, but was slightly disappointed at it having only horizontal position for gripper. What would be the easiest way to extend with gripper/wrist rotation, i.e. 6th degree of freedom? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/9uGgf.jpg&quot; alt=&quot;OWI Robotic arm&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="9896" LastEditorUserId="110" LastEditDate="2015-06-29T13:20:45.630" LastActivityDate="2015-06-29T13:23:36.670" Title="Extend robotic arm with wrist rotation" Tags="&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7599" PostTypeId="2" ParentId="7598" CreationDate="2015-06-28T23:46:59.147" Score="2" Body="&lt;p&gt;Unfortunately you cannot do that. I have a OWI robotic arm too.  I purchased it for my semester project to demonstrate inverse kinematics for 5 DOF. &#xA;Since OWI is designed as a toy to play with, we cannot expect more from it. It just does basic movements to give us an idea how a robotic arm functions. &#xA;If you are looking for a 6DOF arm i suggest you purchase another 6 DOF arm like this arm by &lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/B00R5CCJ2S&quot; rel=&quot;nofollow noreferrer&quot;&gt;DFRobot&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/hMFtZ.jpg&quot; alt=&quot;DFRobot 6 DOF Robotic Arm&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="9987" LastEditorUserId="110" LastEditDate="2015-06-29T13:23:36.670" LastActivityDate="2015-06-29T13:23:36.670" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7600" PostTypeId="1" CreationDate="2015-06-29T09:54:55.333" Score="4" ViewCount="4702" Body="&lt;p&gt;I've got Robotics API library, a demo program and a robot. I want to develop an app for it. The best solution is offline development on some kind of simulator. I'm completely new in such tasks - is there any IDE for this? Or a way do deliver byte-code to machine? Thanks in advance!&lt;/p&gt;&#xA;" OwnerUserId="10029" LastEditorUserId="6890" LastEditDate="2018-09-24T23:30:07.657" LastActivityDate="2020-07-23T00:02:52.790" Title="KUKA Robotics API IDE" Tags="&lt;robotic-arm&gt;&lt;kuka&gt;&lt;dynamic-programming&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7602" PostTypeId="2" ParentId="7595" CreationDate="2015-06-29T16:44:47.307" Score="1" Body="&lt;p&gt;(This really should be a comment, but I don't have enough reputation to comment, my apologies)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not very familiar with this &quot;HAL&quot; version of ST's library, but how I normally do timers with STM32 is the following:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void TIM2_IRQHandler()&#xA;{&#xA;     if (TIM_GetITStatus(TIM2, TIM_IT_CC1) != RESET)&#xA;     {&#xA;          TIM_ClearITPendingBit(TIM2, TIM_IT_CC1);&#xA;&#xA;          // TODO: Your code&#xA;     }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Hopefully that translates to your environment.  In terms of your error, you'll need to be more descriptive about what the error is for us to help you.&lt;/p&gt;&#xA;" OwnerUserId="7647" LastActivityDate="2015-06-29T16:44:47.307" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7603" PostTypeId="2" ParentId="7570" CreationDate="2015-06-29T20:08:22.943" Score="1" Body="&lt;p&gt;I am not sure if this is what is confusing you, but it is definitely something to be aware of when looking at DH parameters from different sources.  You shoudl read this paper: &quot;&lt;a href=&quot;https://web.archive.org/web/20121119091715/http://profesores.usfq.edu.ec:80/laurents/IME440/DETC2005-85460_DenavitHartenberg.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Lipkin 2005: A Note on Denavit-Hartenberg Notation in Robotics&lt;/a&gt;&quot;.  It explains the &lt;strong&gt;3&lt;/strong&gt; main DH parameter conventions and how they differ.  Different people use different conventions.  It makes the parameters and transformation matrices slightly different.  But as long as you stick to one convention, it all works out.  The paper is also a good background reading on DH parameters.&lt;/p&gt;&#xA;" OwnerUserId="110" LastEditorUserId="110" LastEditDate="2019-10-16T00:45:53.397" LastActivityDate="2019-10-16T00:45:53.397" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7604" PostTypeId="2" ParentId="7592" CreationDate="2015-06-30T13:57:17.423" Score="2" Body="&lt;p&gt;Your chip is a MicroElectronicalMechanicalSystem (short MEMS) based Inertial Measurement Unit. These chips itself are analog devices which measure your desired values. For example the gyroscope uses in most cases a moving mass which is inflenced by the coriolisforce of the rotating system. This force leads to a displacement of the mass. This displacement leads to changed capacity in a capacitor, which can be measured. &lt;br&gt;&#xA;If you look at the manufacturing of a semiconductor device you will see that you have tons of different tolerances. If you group up all these different tolerances to specific worst cases you can name these groups &quot;corners&quot;. It's more or less so: &lt;br&gt; you got a transistor with characteristic numbers A, B and C there tolerances +/-a, +/-b and +/-c. e.g. A is set to A-a, B+b and C-0.2*c the transistor switchtime will be the fastest of all possible tolerance combinations. Then you call this the fast corner.  &lt;br&gt;&#xA;You have all these different corners/tolerances and at the end you do not know how your device is placed within all these tolerances. &lt;br&gt; &#xA;Some tolerances have an influence on the physical structure. All the complex internal devices won't be alligned to each other prefectly orthogonal. Furthermore the internal chip has be placed into a package which is far away from perfect. It is within a specific tolerance. All these lead to a non perfect chip. &lt;br&gt; &lt;br&gt;&#xA;In addition an industrial grade IMU start at 2000\$ and end at several million \$ for military-naval navigation /spacehips.&#xA;These high quality IMUs do use MEMS (the 2k\$ industrial ones) but they have complex software compensation algorithms to get rid of the non-perfect chip. &lt;/p&gt;&#xA;" OwnerUserId="6911" LastActivityDate="2015-06-30T13:57:17.423" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7605" PostTypeId="2" ParentId="6463" CreationDate="2015-06-30T14:23:15.443" Score="0" Body="&lt;p&gt;This reminds me of a paper (or perhaps thesis) I read way back in 2006 or 2007, where the author created equivalence classes for robot sensors.  For example a robot with wheel encoders and a bump sensor is theoretically equivalent to a robot with no encoders and only a planar laser range finder.  I forget the rest, but this kind of notion has stuck with me.  Keep in mind this was all for theoretical robots with perfect sensing.  But interesting to think about none the less.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-06-30T14:23:15.443" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7606" PostTypeId="2" ParentId="7600" CreationDate="2015-06-30T14:37:10.427" Score="1" Body="&lt;p&gt;In school (about 8 years ago) I did some work with a Kuka KR 5 sixx robot arm.  I remember there being 2 different APIs.  One was pretty high-level and you could specify joint configurations, waypoints, etc. through XML over TCP at some slow rate (maybe 10 Hz).  They also provided a more powerful low-level interface, but I forget the specifics of that.  I don't remember Kuka allowing you to put code on their control box.  Both of these interfaces were over Ethernet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't think there is any sort of IDE, the way VisualStudio or Arduino have IDEs.  However, I do know that Kuka does have some fancy work-cell simulation and analysis software.  This kind of thing is for laying out large industrial floor plans and optimizing efficiency. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Remember that by far most of the Kuka robots in existence are &quot;programmed&quot; using the control pendant.  People writing &quot;real&quot; code to move the robot is not their normal use-case.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But if Kuka gave you the API, shouldn't you know about this kind of stuff?  Or at least have a contact at Kuka.  Why are you asking us here?  &lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-06-30T14:37:10.427" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7607" PostTypeId="1" CreationDate="2015-06-30T15:02:35.690" Score="0" ViewCount="76" Body="&lt;p&gt;Can ESC in quads be programmed in such a way that only one side has throttle and no throttle at all on the other? This would cause the quad to flip I suppose? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;With that, is there a way we can program the controller to like trigger a switch when we want the quad to flip? Because I was thinking of doing a waterproof quad. So initially, it flies in the air normally with the 4 channel, and then I set it to float on water. After that, I was thinking of maybe triggering a switch on the controller so that this time it's just going to flip and nothing else. After it flips, I would trigger the switch back to normal operation. Is that possible?&lt;/p&gt;&#xA;" OwnerUserId="10042" LastEditorUserId="9176" LastEditDate="2015-07-03T04:29:32.757" LastActivityDate="2015-07-03T04:29:32.757" Title="Can ESC be programmed to run full throttle only on one side of a quadcopter?" Tags="&lt;quadcopter&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7608" PostTypeId="2" ParentId="7607" CreationDate="2015-06-30T15:38:47.527" Score="1" Body="&lt;p&gt;Yes, you can do this, but you don't need a switch to do so; just command the quad copter to &lt;a href=&quot;https://www.youtube.com/watch?t=92&amp;amp;v=VIkqqVr_u9U&amp;amp;t=1m20s&quot; rel=&quot;nofollow&quot;&gt;fly inverted&lt;/a&gt;. That video demos variable pitch rotors specifically, but &lt;a href=&quot;http://hackaday.com/2013/11/26/quadcopters-go-inverted-by-reversing-their-motors/&quot; rel=&quot;nofollow&quot;&gt;those aren't required&lt;/a&gt; for inverted flight. You can &lt;a href=&quot;http://www.rcdronearena.com/2015/05/31/udi-u27-free-loop-quadcopter-launch-price/&quot; rel=&quot;nofollow&quot;&gt;buy off the shelf units&lt;/a&gt; capable of flying upside down for relatively cheap and modify as you see fit. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively, if you're just looking to be able to fly in the air or float, you can just build the quad copter with the &lt;a href=&quot;http://diydrones.com/forum/topics/can-quadcopter-motors-be-mounted-upside-down&quot; rel=&quot;nofollow&quot;&gt;motors pointing down to begin with&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2015-07-01T01:29:48.630" LastActivityDate="2015-07-01T01:29:48.630" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7609" PostTypeId="2" ParentId="2109" CreationDate="2015-06-30T17:20:06.540" Score="1" Body="&lt;p&gt;Partially Observable MDPs actually are very interesting to robotics, and especially for the &lt;strong&gt;partially observable&lt;/strong&gt; part. Sensor signals (laser, sonar, vision, ..) are noisy, some more then others depending on several variables. We cannot trust the sensor signal completely, but we can use them to estimate the real state. The POMDP can thus be used in robotics to do planning with noisy observations. A list of applications is shown by Cassandra [1], a more general overview of planning with uncertainty in robotics is given by Thrun et al. [2], and of course there are lots of examples on the web. The big problem of POMDPs is that finding their optimal solution is intractable (i.e it easily takes too long to compute), but there are several methods which approximate the optimal solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[1] Cassandra, A. R. (1997). A Survey of POMDP Applications. In Uncertainty in Artificial Intelligence (pp. 472–480). Retrieved from &lt;a href=&quot;http://www.cassandra.org/pomdp/papers/applications.pdf&quot; rel=&quot;nofollow&quot;&gt;http://www.cassandra.org/pomdp/papers/applications.pdf&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[2] Thrun, S., Burgard, W., &amp;amp; Fox, D. (2005). Probabilistic Robotics (Intelligent Robotics and Autonomous Agents. The MIT Press.&lt;/p&gt;&#xA;" OwnerUserId="10041" LastActivityDate="2015-06-30T17:20:06.540" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7610" PostTypeId="2" ParentId="7592" CreationDate="2015-06-30T17:37:17.653" Score="1" Body="&lt;p&gt;The drotek website refers to the github link, and in the github page, there's a disclaimer that the code is mostly &lt;strong&gt;broken&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From what I understand from the specs, the rates are user selectable (up to 2000 d/s), and I would expect to see some small changes in the other angles (roll and pitch) if you are rotating by hand around the z-axis, and not translating.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Small changes would be acceptable I guess.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Note: this post was a comment at first, but it was recommended to be changed into an answer, and I did.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="9570" LastActivityDate="2015-06-30T17:37:17.653" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7611" PostTypeId="2" ParentId="7137" CreationDate="2015-06-30T18:02:24.107" Score="0" Body="&lt;p&gt;First the answer to the main question. The readings are the pitch and roll of your sensor, at the inertial frame. As your sensor is certainly not moving in your aircraft in time, you do not have to re-convert into any other frames. The readings are the aircraft pitch-roll-yaw data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Coming to the Pitch computation from accelerations. I don't know if this method works for aircraft that can rapidly move. In &lt;a href=&quot;http://www.freescale.com/files/sensors/doc/app_note/AN3461.pdf&quot; rel=&quot;nofollow&quot;&gt;a reference of a similar application&lt;/a&gt; , it is explained that the accelerometer is assumed NOT TO BE UNDER LINEAR ACCELERATION. The aircraft might experience some turbulence, without pitching, and the &lt;strong&gt;pitch_accel&lt;/strong&gt; calculation would calculate some pitch, which would not be real. Another short note is to use the atan2 function, to arrive at realistic angles of pitch and roll.&lt;/p&gt;&#xA;" OwnerUserId="9570" LastActivityDate="2015-06-30T18:02:24.107" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7612" PostTypeId="1" AcceptedAnswerId="7625" CreationDate="2015-06-30T22:29:27.570" Score="0" ViewCount="874" Body="&lt;p&gt;Recently I've bought a &lt;a href=&quot;http://www.ebay.co.uk/itm/231583577928&quot; rel=&quot;nofollow&quot;&gt;hexapod kit&lt;/a&gt; and 18 TowerPro MG995 servos.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My objective is to apply also the Pi camera, sensors and perhaps a claw...&#xA;So I've been researching and I haven't found a clear answer when comes to the servo control board.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which servo controller board shall I choose to complete my project?&lt;/p&gt;&#xA;" OwnerUserId="10045" LastEditorUserId="9176" LastEditDate="2015-07-03T00:03:02.987" LastActivityDate="2015-07-03T00:03:02.987" Title="Raspberry Pi Hexapod 18DOF, Best servo control board?" Tags="&lt;mobile-robot&gt;&lt;raspberry-pi&gt;&lt;servomotor&gt;&lt;rcservo&gt;&lt;hexapod&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7613" PostTypeId="1" CreationDate="2015-07-02T07:21:22.550" Score="1" ViewCount="53" Body="&lt;p&gt;I have been researching on a cost-effective way to scan an area on a MAV (exploraton) and later use it for CAD/civil purposes(use the point cloud data for CAD) but the major sensors available have their own problems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;kinect&lt;/strong&gt; - can't use outside,high computation power&lt;br&gt;&#xA;&lt;strong&gt;stereo&lt;/strong&gt; - high computation power,somewhat expensive&lt;br&gt;&#xA;&lt;strong&gt;lidar&lt;/strong&gt; - very expensive + not real time + heavy&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need a system(on the MAV/quadrotor) that can work over wifi/wireless, can scan outdoors , not very expensive and that gives data real-time.Please suggest a system that can be as close to the above requirements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also can stereo be operated over wifi? &lt;/p&gt;&#xA;" OwnerUserId="10052" LastEditorUserId="10052" LastEditDate="2015-07-03T11:39:43.637" LastActivityDate="2015-07-03T11:39:43.637" Title="How to efficiently do 3D mapping of an area on a MAV?" Tags="&lt;kinect&gt;&lt;mapping&gt;&lt;stereo-vision&gt;&lt;3d-reconstruction&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7614" PostTypeId="2" ParentId="7613" CreationDate="2015-07-02T08:57:31.353" Score="1" Body="&lt;p&gt;In your case I would suggest using the stereo version because: &lt;br&gt;&#xA;- You already said Kinect is technically not a possible solution because of the sun's IR light&lt;br&gt;&#xA;- A reasonable good lidar sensors costs a fortune even for a 2D version&lt;br&gt;&#xA;- Stereo vision is not expensive. You get 2 webcams for 100$, which is even less then a Kinect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The major problem with the stereo is the computational requirement which is almost impossible to achieve on the UAV. I suggest sending the videostreams to an external computer and analyze the data (and send it back if necessary at all). wifi is able to handle this datarates easily, especially the 5GHz version (802.11n). You might even think about compresing the data with h264 codec, which can be accelerated by specifc chips.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I guess your plan is using it for a SLAM application. This is possible, but you have to keep in mind that the wifi connection is not reliable at all. Maybe a nearby weather radar station is interfering your connection and UAV gets no data update anymore until the connection is reastablished. Anyway a good UAV-software will be able to handle the wifi disconnects.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So relying on this might not the best solution. alternativly you can stack all your computational power directly onto the UAV, like I do it for my research project. Therefore you need a decent UAV which is able to carry a complete motherboard with modern CPU and maybe a GPU; the GPU is a sake for stereovision. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the end (if SLAM is your final goal) you can look at other options like MonoSLAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: This answer does not say you should do this. I got way too less information about your project to give a high quality answer. This is more a collection of thoughts/ideas to your problem, which should help to find a feasable solution.&lt;/p&gt;&#xA;" OwnerUserId="6911" LastActivityDate="2015-07-02T08:57:31.353" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7615" PostTypeId="1" AcceptedAnswerId="7616" CreationDate="2015-07-02T10:28:32.990" Score="0" ViewCount="163" Body="&lt;p&gt;I’m using the BMA020 (&lt;a href=&quot;http://www.elv.de/3-achsen-beschleunigungssensor-3d-bs-komplettbausatz.html&quot; rel=&quot;nofollow&quot;&gt;from ELV&lt;/a&gt;) with my Arduino Mega2560 and trying to read acceleration values that doesn’t confuse me.&#xA;First I connected the sensor in SPI-4 mode. Means&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CSB &amp;lt;-&gt; PB0 (SS)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;SCK &amp;lt;-&gt; PB1 (SCK)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;SDI &amp;lt;-&gt; PB2 (MOSI)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;SDO &amp;lt;-&gt; PB3 (MISO)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also GND and UIN are connected with the GND and 5V Pins of the Arduino board.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the self-written code I use&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;avr/io.h&amp;gt;&#xA;#include &amp;lt;util/delay.h&amp;gt;&#xA;&#xA;#define sensor1     0&#xA;typedef int int10_t;&#xA;&#xA;int TBM(uint8_t high, uint8_t low)&#xA;{   &#xA;    int buffer = 0;&#xA;    if(high &amp;amp; (1&amp;lt;&amp;lt;7)) {&#xA;        uint8_t high_new = (high &amp;amp; 0x7F);&#xA;        buffer = (high_new&amp;lt;&amp;lt;2) | (low&amp;gt;&amp;gt;6);&#xA;        buffer = buffer - 512;&#xA;    }&#xA;    else&#xA;        buffer = (high&amp;lt;&amp;lt;2) | (low&amp;gt;&amp;gt;6);&#xA;&#xA;&#xA;    return buffer;&#xA;}&#xA;&#xA;void InitSPI(void);&#xA;void AccSensConfig(void);&#xA;void WriteByteSPI(uint8_t addr, uint8_t Data, int sensor_select);&#xA;uint8_t ReadByteSPI(int8_t addr, int sensor_select);&#xA;void Read_all_acceleration(int10_t  *acc_x, int10_t *acc_y, int10_t *acc_z, int sensor_select);&#xA;&#xA;&#xA;int main(void)&#xA;{&#xA;    int10_t S1_x_acc = 0, S1_y_acc = 0, S1_z_acc = 0;&#xA;    InitSPI();&#xA;    AccSensConfig();&#xA;    while(1) {&#xA;        Read_all_acceleration(&amp;amp;S1_x_acc, &amp;amp;S1_y_acc, &amp;amp;S1_z_acc, sensor1);&#xA;    }&#xA;}&#xA;&#xA;void InitSPI(void) {&#xA;&#xA;    DDRB |= (1&amp;lt;&amp;lt;DDB2)|(1&amp;lt;&amp;lt;DDB1)|(1&amp;lt;&amp;lt;DDB0);&#xA;&#xA;    PORTB |= (1&amp;lt;&amp;lt;PB0);&#xA;&#xA;    SPCR |= (1&amp;lt;&amp;lt;SPE);&#xA;    SPCR |= (1&amp;lt;&amp;lt;MSTR);  &#xA;    SPCR |= (0&amp;lt;&amp;lt;SPR0) | (1&amp;lt;&amp;lt;SPR1);  &#xA;    SPCR |= (1&amp;lt;&amp;lt;CPOL) | (1&amp;lt;&amp;lt;CPHA);  &#xA;}&#xA;&#xA;void AccSensConfig(void) {&#xA;&#xA;    WriteByteSPI(0x0A, 0x02, sensor1);&#xA;    _delay_ms(100);&#xA;&#xA;    WriteByteSPI(0x15,0x80,sensor1);    //nur SPI4 einstellen&#xA;}&#xA;&#xA;void WriteByteSPI(uint8_t addr, uint8_t Data, int sensor_select) {&#xA;&#xA;    PORTB &amp;amp;= ~(1&amp;lt;&amp;lt;sensor_select);   &#xA;    SPDR = addr;                    &#xA;    while(!(SPSR &amp;amp; (1&amp;lt;&amp;lt;SPIF)));     &#xA;&#xA;    SPDR = Data;                    &#xA;    while(!(SPSR &amp;amp; (1&amp;lt;&amp;lt;SPIF)));     &#xA;&#xA;    PORTB |= (1&amp;lt;&amp;lt;sensor_select);    &#xA;}&#xA;&#xA;uint8_t ReadByteSPI(int8_t addr, int sensor_select)&#xA;{&#xA;    int8_t dummy = 0xAA;&#xA;&#xA;    PORTB &amp;amp;= ~(1&amp;lt;&amp;lt;sensor_select);   &#xA;&#xA;    SPDR = addr;                    &#xA;    while(!(SPSR &amp;amp; (1&amp;lt;&amp;lt;SPIF)));     &#xA;    SPDR = dummy;                   &#xA;    while(!(SPSR &amp;amp; (1&amp;lt;&amp;lt;SPIF)));     &#xA;&#xA;    PORTB |= (1&amp;lt;&amp;lt;sensor_select);    &#xA;&#xA;    addr=SPDR;&#xA;    return addr;&#xA;}&#xA;&#xA;void Read_all_acceleration(int10_t  *acc_x, int10_t *acc_y, int10_t *acc_z, int sensor_select)&#xA;{&#xA;    uint8_t addr = 0x82;&#xA;    uint8_t dummy = 0xAA;&#xA;    uint8_t high = 0;&#xA;    uint8_t low = 0;&#xA;&#xA;    PORTB &amp;amp;= ~(1&amp;lt;&amp;lt;sensor_select);   &#xA;&#xA;    SPDR = addr;&#xA;    while(!(SPSR &amp;amp; (1&amp;lt;&amp;lt;SPIF)));&#xA;&#xA;    SPDR = dummy;           &#xA;    while(!(SPSR &amp;amp; (1&amp;lt;&amp;lt;SPIF)));&#xA;    low = SPDR;     &#xA;    SPDR = dummy;   &#xA;    while(!(SPSR &amp;amp; (1&amp;lt;&amp;lt;SPIF)));&#xA;    high = SPDR;                    &#xA;    *acc_x = TBM(high, low);&#xA;&#xA;    SPDR = dummy;       &#xA;    while(!(SPSR &amp;amp; (1&amp;lt;&amp;lt;SPIF)));&#xA;    low = SPDR;     &#xA;    SPDR = dummy;   &#xA;    while(!(SPSR &amp;amp; (1&amp;lt;&amp;lt;SPIF)));&#xA;    high = SPDR;    &#xA;    *acc_y = TBM(high, low);&#xA;&#xA;    SPDR = dummy;       &#xA;    while(!(SPSR &amp;amp; (1&amp;lt;&amp;lt;SPIF)));&#xA;    low = SPDR; &#xA;    SPDR = dummy;   &#xA;    while(!(SPSR &amp;amp; (1&amp;lt;&amp;lt;SPIF)));&#xA;    high = SPDR;    &#xA;    *acc_z = TBM(high, low);&#xA;&#xA;    PORTB |= (1&amp;lt;&amp;lt;sensor_select);    &#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And now here is what really confuses me. I got 5 of this sensors. One is working with this code perfectly fine. The Data I get is what I expect. I measure earth gravity in z-component if Iay the sensor on the table, if I start turning it I measure the earth gravity component wise in x-, y- and z- direction depending on the angle I turn the sensor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the other 4 sensors I receive data that is different. The values jump from -314 (about -1.2 g) to +160 (about 0.5g). With the same code, the same wires and the same Arduino.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I checked the register settings of all sensors, they are all the same. I checked the wire connection to the first component at the sensors, they are all around 0.3 Ohm. I used an Oscilloscope and made sure CSB, SCK and MOSI work properly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Am I missing something? What causes this similar but wrong behavior of 4 out of 5 sensors?&lt;/p&gt;&#xA;" OwnerUserId="10054" LastActivityDate="2015-07-03T21:55:57.683" Title="Problem with acceleration sensor" Tags="&lt;arduino&gt;&lt;accelerometer&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7616" PostTypeId="2" ParentId="7615" CreationDate="2015-07-02T12:39:14.657" Score="0" Body="&lt;p&gt;&lt;strong&gt;Earlier answer, regarding the self-test&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Section 3.3.2 describes how to do the self test, section 3.4.1 describes how to read the result. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a note about not overwriting bits 5, 6, and 7 of register 14h at the start of chapter 3, so read that and then check that you have scaling set correctly (bits 0 and 1 of register 14h).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As the chips that are suspect all also fail the self test and voltages on the board are normal, I would blame physical damage (were dropped/thrown during shipping, etc) and ask for an RMA for the parts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;A caution&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While the board linked in the question accepts an input voltage of up to 6V, the board features a regulator and level shifters. The chip itself operates at a much lower voltage. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2015-07-03T21:55:57.683" LastActivityDate="2015-07-03T21:55:57.683" CommentCount="12" ContentLicense="CC BY-SA 3.0" />
  <row Id="7617" PostTypeId="1" CreationDate="2015-07-02T14:34:06.300" Score="3" ViewCount="482" Body="&lt;p&gt;I am trying to use 2x UARTs with ChibiOS on the STM32F072RB Nucleo Board. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I initialized UART2 but I am still getting output on UART1 pins, which is totally weird.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &quot;ch.h&quot;&#xA;#include &quot;hal.h&quot;&#xA;&#xA;&#xA;/*&#xA; * UART driver configuration structure.&#xA; */&#xA;static UARTConfig uart_cfg_1 = {&#xA;    NULL,   //txend1,&#xA;    NULL,   //txend2,&#xA;    NULL,   //rxend,&#xA;    NULL,   //rxchar,&#xA;    NULL,   //rxerr,&#xA;    800000,&#xA;    0,&#xA;    0,      //USART_CR2_LINEN,&#xA;    0&#xA;};&#xA;&#xA;static UARTConfig uart_cfg_2 = {&#xA;    NULL,   //txend1,&#xA;    NULL,   //txend2,&#xA;    NULL,   //rxend,&#xA;    NULL,   //rxchar,&#xA;    NULL,   //rxerr,&#xA;    800000,&#xA;    0,&#xA;    0,&#xA;    0&#xA;};&#xA;&#xA;/*&#xA; * Application entry point.&#xA; */&#xA;int main(void) {&#xA;&#xA;  /*&#xA;   * System initializations.&#xA;   * - HAL initialization, this also initializes the configured device      drivers&#xA;   *   and performs the board-specific initializations.&#xA;   * - Kernel initialization, the main() function becomes a thread and the&#xA;   *   RTOS is active.&#xA;   */&#xA;  halInit();&#xA;  chSysInit();&#xA;&#xA;  /*&#xA;   * Activates the serial driver 1, PA9 and PA10 are routed to USART1.&#xA;   */&#xA;  //uartStart(&amp;amp;UARTD1, &amp;amp;uart_cfg_1);&#xA;  uartStart(&amp;amp;UARTD2, &amp;amp;uart_cfg_2);&#xA;&#xA;  palSetPadMode(GPIOA, 9, PAL_MODE_ALTERNATE(1));  // USART1 TX.&#xA;  palSetPadMode(GPIOA, 10, PAL_MODE_ALTERNATE(1)); // USART1 RX.&#xA;  palSetPadMode(GPIOA, 2, PAL_MODE_ALTERNATE(1));  // USART2 TX.&#xA;  palSetPadMode(GPIOA, 3, PAL_MODE_ALTERNATE(1));  // USART2 RX.&#xA;&#xA;  /*&#xA;   * Starts the transmission, it will be handled entirely in background.&#xA;   */&#xA;  //uartStartSend(&amp;amp;UARTD1, 13, &quot;Starting...\r\n&quot;);&#xA;  uartStartSend(&amp;amp;UARTD2, 13, &quot;Starting...\r\n&quot;);&#xA;&#xA;  /*&#xA;   * Normal main() thread activity, in this demo it does nothing.&#xA;   */&#xA;  while (true) {&#xA;    chThdSleepMilliseconds(500);&#xA;    uartStartSend(&amp;amp;UARTD2, 7, &quot;Soom!\r\n&quot;);&#xA;    //uartStartSend(&amp;amp;UARTD1, 7, &quot;Boom!\r\n&quot;);&#xA;  }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The line &lt;code&gt;uartStartSend(&amp;amp;UARTD2, 7, &quot;Soom!\r\n&quot;);&lt;/code&gt; gives output on UART1. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there anything else I need to do?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;mcuconfig.h reads&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#define STM32_UART_USE_USART1               TRUE&#xA;#define STM32_UART_USE_USART2               TRUE&#xA;#define STM32_UART_USART1_IRQ_PRIORITY      3&#xA;#define STM32_UART_USART2_IRQ_PRIORITY      3&#xA;#define STM32_UART_USART1_DMA_PRIORITY      0&#xA;#define STM32_UART_USART2_DMA_PRIORITY      0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="7049" LastEditorUserId="10596" LastEditDate="2016-05-04T12:57:55.030" LastActivityDate="2018-12-21T04:06:31.250" Title="Using 2x UARTs on STM32F072RB" Tags="&lt;microcontroller&gt;&lt;serial&gt;&lt;c&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7619" PostTypeId="2" ParentId="7617" CreationDate="2015-07-02T16:06:14.523" Score="1" Body="&lt;p&gt;Perhaps try UART3? UART2 might be in use for something else as the manual says,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;By default the USART2 communication between the target MCU and ST-LINK MCU is enabled...&quot; on page 23, section 5.8.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.st.com/st-web-ui/static/active/en/resource/technical/document/user_manual/DM00105823.pdf&quot; rel=&quot;nofollow&quot;&gt;Manual for reference&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4169" LastActivityDate="2015-07-02T16:06:14.523" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7622" PostTypeId="1" AcceptedAnswerId="7623" CreationDate="2015-07-02T17:14:42.623" Score="0" ViewCount="50" Body="&lt;p&gt;How does one implement virtual model (continuous) while control system itself is discrete (PLC)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've done this in practice but what about theory, how does one explain this topic to a stranger? (lets say myself)&lt;/p&gt;&#xA;" OwnerUserId="4403" LastEditorUserId="4403" LastEditDate="2015-07-02T17:55:11.143" LastActivityDate="2015-07-02T19:08:16.167" Title="Virtual model in PLC discrete / continuous" Tags="&lt;control&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7623" PostTypeId="2" ParentId="7622" CreationDate="2015-07-02T19:08:16.167" Score="1" Body="&lt;p&gt;You have to discretize the model. This is typically done with a &lt;a href=&quot;https://en.wikipedia.org/wiki/Z-transform&quot; rel=&quot;nofollow&quot;&gt;z-transform&lt;/a&gt;, where&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;z = e^{sT}&#xA;$$&#xA;or&#xA;$$&#xA;s \approx \frac{2}{T} \frac{z-1}{z+1}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $T$ is the sample period. Make the substitution in your CT model, replacing $s$ with the above, then solve it like you would for an ordinary transfer function. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you've done this, divide everything by the highest order of $z$ in the transfer function. Now $z^{-n}$ represents a delay of $n$ samples, so:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;Y(z) = X(z) + X(z) z^{-1}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;becomes&#xA;$$&#xA;Y_n = X_n + X_{n-1}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is very much akin to the &lt;a href=&quot;https://en.wikipedia.org/wiki/Laplace_transform&quot; rel=&quot;nofollow&quot;&gt;Laplace transform&lt;/a&gt;, where you get functions of $s$, where $\frac{1}{s}$ is the integrator and $s$ is the differentiator. Here $z^n$ represents $n$ samples in the future where $z^{-n}$ represents $n$ samples in the past; this is why you must divide by the highest order of z - you can't get future samples.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;Y(s) = X(s) + sX(s)&#xA;$$&#xA;becomes&#xA;$$&#xA;y = x + \dot{x}&#xA;$$&#xA;So, regarding how to explain to someone &lt;strong&gt;how&lt;/strong&gt; to implement a continuous model on a discrete controller, this is it. The Z-transform. &lt;strong&gt;Why&lt;/strong&gt; this works the subject of many text books and much too long of an answer to cover here. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-07-02T19:08:16.167" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7624" PostTypeId="2" ParentId="7297" CreationDate="2015-07-02T20:24:25.017" Score="1" Body="&lt;p&gt;Yes, the &lt;a href=&quot;http://www.owirobots.com/store/index.php&quot; rel=&quot;nofollow&quot;&gt;OWI Robot arm&lt;/a&gt; is just a toy and doesn't have nearly enough accuracy, repeatability, sensor feedback, etc. to be able to do any sort of &quot;real&quot; assembly task.  I'm sure you are aware of industrial arm like Kuka, ABB, etc.  However, these arms are not suited to fine assembly either.  A new class of robot arm is becoming more popular, one that is &quot;human safe&quot; and designed for assembly tasks with some human involvement.  These are things like &lt;a href=&quot;http://www.universal-robots.com/en/products/&quot; rel=&quot;nofollow&quot;&gt;Universal Robotics&lt;/a&gt;, &lt;a href=&quot;http://www.rethinkrobotics.com/sawyer-intera-3/&quot; rel=&quot;nofollow&quot;&gt;Rethink Robotics Sawyer&lt;/a&gt;, and &lt;a href=&quot;http://new.abb.com/products/robotics/yumi&quot; rel=&quot;nofollow&quot;&gt;ABB YuMi&lt;/a&gt;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, even with &quot;perfect AI control&quot;, a robotic arm needs a certain about of good sensor feedback to do anything useful.  One example of this is demonstrated in an old experiment where a woman's hand was completely numbed and she was asked to light a match.  It took about 45 seconds of fumbling with the match before she was successful.  With an un-numbed hand she can light the match in just a few seconds on the first try.  The point being that even with arguably the most powerful computer on the planet (the human brain), without good tactile sensing we are unable to do fine manipulation.  (I was unable to locate the video of said experiment, but it is also mentioned in &lt;a href=&quot;http://www.upenn.edu/pennnews/current/node/3447&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt; article.)&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-07-02T20:24:25.017" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7625" PostTypeId="2" ParentId="7612" CreationDate="2015-07-02T21:14:20.610" Score="0" Body="&lt;p&gt;Servo's are controlled by Pulse Width Modulation (PWM) so you need a PWM controller that has enough pins and power to drive Servos. I'd go with 2 of &lt;a href=&quot;https://www.adafruit.com/products/815&quot; rel=&quot;nofollow&quot;&gt;Adafruit's I2C-based controller&lt;/a&gt; but Pololu has a &lt;a href=&quot;https://www.pololu.com/product/1354&quot; rel=&quot;nofollow&quot;&gt;USB one&lt;/a&gt; that is rather popular.&lt;/p&gt;&#xA;" OwnerUserId="2471" LastActivityDate="2015-07-02T21:14:20.610" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7626" PostTypeId="1" AcceptedAnswerId="7627" CreationDate="2015-07-03T01:21:20.987" Score="1" ViewCount="81" Body="&lt;p&gt;If there are input and the sensor measured outputs. What are the objective methods to compare performance besides looking at inputs and outputs matching or not?&lt;/p&gt;&#xA;" OwnerUserId="9972" LastActivityDate="2015-07-03T02:37:52.163" Title="what are methods to compare PID controller performance?" Tags="&lt;pid&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7627" PostTypeId="2" ParentId="7626" CreationDate="2015-07-03T02:37:52.163" Score="2" Body="&lt;p&gt;Controllers in general are judged typically by 3 criteria -&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Rise_time&quot; rel=&quot;nofollow&quot;&gt;Rise time&lt;/a&gt;, or how quickly the output gets to the input,&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Overshoot_(signal)&quot; rel=&quot;nofollow&quot;&gt;Percent overshoot&lt;/a&gt;, or how much the output oscillates around the input, and&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Settling_time&quot; rel=&quot;nofollow&quot;&gt;Settling time&lt;/a&gt;, or how long it takes the output to stabilize at the same value as the input.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Typically you measure these with a step test - from an initial condition of zero, give an input of 1. The time it takes to get from 10 percent to 90 percent is rise time, settling time is generally how long it takes the output to &lt;em&gt;stay&lt;/em&gt; within 2% or 5% of the input value, and percent overshoot is the farthest beyond the input that the output got. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Allowing some overshoot improves rise time, which means the system responds faster, but at the expense of a longer selling time. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some more explanation, &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because of inertia, rise time and percent overshot are competing goals. What is the fastest way to drive 1000 feet? Go full throttle, of course. If you start slowing down to stop right at 1000 feet, you won't get to the mark as quickly as the person that is still going full throttle with no braking. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Conversely, while the person who doesn't start braking until they hit 1000 feet may have got there first, it will take time, some distance, to stop. They have overshot the 1000 foot mark. If they overshoot by 10 feet then go in reverse as quickly as they can, they get back to the mark, but will probably overshoot again, but not as much as the first time because they travel a shorter distance and thus can't get to the same top speed. This process repeats and is called oscillation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This trade off, getting there quickly vs not overshooting, is typical. All of engineering is defining criteria and then finding the best trade off to meet the established criteria. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-07-03T02:37:52.163" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7631" PostTypeId="2" ParentId="4409" CreationDate="2015-07-04T05:38:36.853" Score="2" Body="&lt;p&gt;Two approaches are possible:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Combine the altitude (GPS or pressure) and vertical acceleration sensors' data to calculate a better geometric altitude, and tune your vertical controller using this feedback in your loop.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Employ a stability augmentation loop for the z-acceleration (in body frame). In this case, if your vehicle swings, as shown on Jon's answer, your vehicle will sense a z-acceleration and will try to correct that. This may not be best practice to work on the z-acceleration in &lt;strong&gt;body frame&lt;/strong&gt;, as it will couple the roll with altitude as the aircraft rolls and moves around. So a trigonometric conversion can be done to convert the a_z data (in body frame) into a_z_inertial (in Inertial frame, e.g. in gravity). It's best to work this on paper (you have both roll and pitch, affecting the result). &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;About the current algorithm:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Filter your accelerations. Try a running average (low pass filter) of your accelerations, to get rid of the noise. It will probably be OK to have a running average of the last 0.2 second, for example.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Do not use cut-off, at all. It makes life non-linear, and it's not good. Let the controller handle all the events, and let it react to the small errors, before they grow high.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="9570" LastEditorUserId="9176" LastEditDate="2016-03-12T04:58:17.697" LastActivityDate="2016-03-12T04:58:17.697" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7633" PostTypeId="1" CreationDate="2015-07-05T17:13:11.003" Score="0" ViewCount="1112" Body="&lt;p&gt;I'm a student who is doing electrical and electronics engineering. I'm currently doing my final project which is a quadcopter. One of my objectives in that is to make a &lt;strong&gt;Electronic Speed Controller (ESC) for the brushless motors&lt;/strong&gt; that are being used. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I made a design for the ESC using proteus and I made the PCB also. I have attached the schematic. I used &lt;strong&gt;PIC16F628A&lt;/strong&gt; for the ESC and wrote a small code in &lt;strong&gt;mikroC&lt;/strong&gt; for the ESC to work when powered up. Unfortunately it didn't work properly. I tried &lt;strong&gt;sensorless control&lt;/strong&gt; of brushless motors without getting any feedback.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can I know how much of current that I should provide for the motor? According to some articles that I read the brushless DC (BLDC) motor requires around 10A at the startup for around 20 ms. I have posted the code also. I used two codes to run the motor. One with PWM and other without PWM (100% duty cycle). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am a rookie to the subject of BLDC motor controlling. I am very grateful if anybody can help me to clear out the doubts and figure out the mistakes in my design to make it work properly. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Below given is the code that I tried. Please help me to figure out the right way to program the chip.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    const delay = 7000;&#xA;&#xA;void main() {&#xA; TRISB = 0x00;&#xA; PORTB = 0x00;&#xA;&#xA; while(1)&#xA; {&#xA;   PORTB = 0x24;&#xA;  delay_us(delay);&#xA;&#xA;  PORTB = 0x36;&#xA;  delay_us(delay);&#xA;&#xA;  PORTB = 0x12;&#xA;  delay_us(delay);&#xA;&#xA;  PORTB = 0x1B;&#xA;  delay_us(delay);&#xA;&#xA;  PORTB = 0x09;&#xA;  delay_us(delay);&#xA;&#xA;  PORTB = 0x2D;&#xA;  delay_us(delay);&#xA; }&#xA;&#xA;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;When I uploaded the above given code and when I set the delay to around 3000 &amp;mu;s, the motor spun but at each time one of the MOSFETs got heated up until I cannot touch it anymore. Here is the &lt;a href=&quot;https://drive.google.com/open?id=0B1...jBROGk4QXFJR3c&quot; rel=&quot;nofollow&quot;&gt;video of this scenario&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the other code (PWM);&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;const delay1 = 2000;&#xA;const delay2 = 1000;&#xA;int count = 0;&#xA;int cnt;&#xA;int arr[6] = {0x24, 0x36, 0x12, 0x1B, 0x09, 0x2D};&#xA;int i = 0;&#xA;int x =  0x32;&#xA;&#xA;&#xA; void init(void)&#xA; {&#xA;  TRISB = 0x00;&#xA; PORTB = 0x00;&#xA; //OPTION_REG = 0x87;&#xA; //INTCON = 0xA0;&#xA; CCP1CON = 0;&#xA; CMCON = 0x07;&#xA; }&#xA;&#xA;&#xA;&#xA;void main() {&#xA;   init();&#xA;   while(1){&#xA;&#xA;   for (cnt = 0; cnt &amp;lt; 10; cnt++)&#xA;       {&#xA;         PORTB = arr[i];&#xA;         delay_us(2);&#xA;         PORTB = 0x07;&#xA;         delay_us(2);&#xA;&#xA;        }&#xA;&#xA;     i++;&#xA;&#xA;         if (i == 6)&#xA;         {&#xA;         i =0;&#xA;         }&#xA;&#xA;   };&#xA;&#xA;&#xA; }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="2374" LastEditorUserId="9176" LastEditDate="2015-07-07T08:31:12.323" LastActivityDate="2015-12-04T14:46:48.970" Title="Brushless DC motor - Electronic Speed Control - Quadcopter" Tags="&lt;quadcopter&gt;&lt;brushless-motor&gt;&lt;esc&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7634" PostTypeId="1" CreationDate="2015-07-05T20:50:43.883" Score="3" ViewCount="1573" Body="&lt;p&gt;I'm new to the robotics and electronics world, but I'm willing to dive into it. I'm a software developer and I want to create a project that uses GPS and Accelerometer data to show as a layer on Google Maps after transferred to PC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My doubt is about which controller to get. In my country, there are generic controllers based on the Atmega328 that are being sold with a massive difference of price from the original Arduino (talking about the UNO model). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Should I start with an original model? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Should I expect to break the controller, fry it, or break any components by connecting them wrong? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would the experience with a generic controller be less exciting than with the original Arduino one?&lt;/p&gt;&#xA;" OwnerUserId="10080" LastEditorUserId="9720" LastEditDate="2015-07-22T16:29:53.733" LastActivityDate="2017-05-03T12:16:48.683" Title="Arduino original or generic for a beginner?" Tags="&lt;arduino&gt;&lt;beginner&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7637" PostTypeId="2" ParentId="7633" CreationDate="2015-07-06T09:47:27.807" Score="1" Body="&lt;p&gt;First thing first: you can't observe your rotor's location at 0 speed, because at 0 speed, you've got no &lt;a href=&quot;https://en.wikipedia.org/wiki/Counter-electromotive_force&quot; rel=&quot;nofollow&quot;&gt;back EMF&lt;/a&gt;. You must make your motor ramp to a speed that allows you to observe it electronically. This is done &lt;a href=&quot;https://en.wikipedia.org/wiki/Open-loop_controller&quot; rel=&quot;nofollow&quot;&gt;open-loop&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To perform your ramp, you need to generate a voltage slightly above the BEMF at the ramping speed. Slightly above means that you probably don't need 100% duty cycle. Using 100% duty cycle on a stalled motor means that you put one phase (10 mOhms) on the output of your power supply (12V ?), so you basically try to put 1000A in your motor. You'll just make either or both your ESC and/or your motor burn.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your motor supplier should indicate the characteristics of your motor. Look for one called Kv (in RPM/V). It allows you to know what duty cycle you should use at each step of your ramp.&lt;/p&gt;&#xA;" OwnerUserId="7634" LastActivityDate="2015-07-06T09:47:27.807" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="7640" PostTypeId="1" CreationDate="2015-07-07T03:13:33.287" Score="1" ViewCount="2547" Body="&lt;p&gt;I have a servo motor with quad optical encoder and I'm trying to control its position and velocity. By controlling both I meant that if I input that the motor should reach 90° at 200rpm then it should. How can I do that? I am using an Arduino Uno. Kindly share some code if possible. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Though I have implemented the PID, I don't think it is correct because I didn't implement the feedforward controller (because I have no idea what that is) and I have not been able to find suitable gains for PID. The gains I find for small steps (or say degree rotation) do not work out well for large steps and vice versa. I have also not used a limit for integral sum (because I don't how much it should be).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am using a Pittman motor.&lt;/p&gt;&#xA;" OwnerUserId="10089" LastEditorUserId="9176" LastEditDate="2015-07-10T07:08:38.517" LastActivityDate="2015-07-13T21:02:06.667" Title="PID gains for motor position and velocity control" Tags="&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7641" PostTypeId="1" CreationDate="2015-07-07T03:52:13.727" Score="3" ViewCount="107" Body="&lt;p&gt;I have some robot software I'm working on (Java on Android) which needs to store a pre-designed map of a playing field to be able to navigate around. The field's not got any fancy 3d structure, the map can be 2d.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've been trying to find a good format to store the maps in.&#xA;I've looked into SVGs and DXFs, but neither one is really designed for the purpose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any file format specifically designed for small, geometric, robotics-oriented maps?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The field I'd be modelling is this one:&#xA;&lt;img src=&quot;https://i.stack.imgur.com/AdJTy.jpg&quot; alt=&quot;FTC playing field&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="9929" LastEditorUserId="9929" LastEditDate="2015-07-11T00:50:26.863" LastActivityDate="2015-07-11T17:18:48.367" Title="Mapping formats for small autonomous robots" Tags="&lt;mapping&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7643" PostTypeId="2" ParentId="7244" CreationDate="2015-07-07T07:18:50.587" Score="2" Body="&lt;p&gt;Shutter speed is a &lt;a href=&quot;https://photo.stackexchange.com/questions/27573/whats-the-difference-between-exposure-and-shutter-speed&quot;&gt;synonym for exposure time&lt;/a&gt;. Exposure time is linked to the frames per second (FPS):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$t_{exposure} + t_{readout} \leq 1 / {FPS}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the answer to your question is: no. FPS is usually the more limiting factor because of the readout speed and the bandwidth to transmit the data. &#xA;The FPS you select provides an upper limit for the exposure time, but not a lower limit. You can make your exposure time much shorter. How short depends on your camera model, but usually much shorter than a millisecond.&lt;/p&gt;&#xA;" OwnerUserId="127" LastEditorUserId="-1" LastEditDate="2017-04-13T12:44:06.350" LastActivityDate="2015-07-08T06:46:13.173" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7644" PostTypeId="1" AcceptedAnswerId="8081" CreationDate="2015-07-07T07:19:56.307" Score="4" ViewCount="278" Body="&lt;p&gt;POMDPs extend MDPs by conceiling state and adding an observation model. A POMDP controller processes either&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;action/observation histories or&lt;/li&gt;&#xA;&lt;li&gt;a bayesian belief state, computed from the observations (&lt;em&gt;belief-MDP&lt;/em&gt; transformation)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In a complex, real-world system like a robot, one usually preprocesses sensory readings using filters (Kalmann, HMM, whatever). The result of which is a belief-state.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am looking for publications that discuss the problem of fitting a (probably more abstract) POMDP model on top of an existing filter-bank. &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Do you have to stick to the belief-MDP, and hand over the filtered belief-state to the controller?&lt;/li&gt;&#xA;&lt;li&gt;Is there any way of using history-based POMDP controllers, like MCTS?&lt;/li&gt;&#xA;&lt;li&gt;How do you construct/find the abstract observations you need to formulate the POMDP model?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="10091" LastEditorUserId="7066" LastEditDate="2015-07-08T05:34:54.227" LastActivityDate="2015-09-17T19:34:16.117" Title="How to use a POMDP-based planner on top of a probabilistic filter" Tags="&lt;kalman-filter&gt;&lt;particle-filter&gt;&lt;planning&gt;&lt;filter&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7645" PostTypeId="1" AcceptedAnswerId="7655" CreationDate="2015-07-07T12:39:49.987" Score="3" ViewCount="1269" Body="&lt;p&gt;I'm searching filter to reduce noise and smooth the signal while dead reckoning with an IMU (6dof gyro+accelerometer). What are the differences/advantages/disadvantages of the following filters:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Kalman&lt;/li&gt;&#xA;&lt;li&gt;Complementary&lt;/li&gt;&#xA;&lt;li&gt;moving average&lt;/li&gt;&#xA;&lt;li&gt;Mahony &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I applied kalman and complementary filters to an IMU and both of them gives time lag to actions with respect to filter parameters. Also kalman filter works slower than moving average and complementary. How can I choose right filter and filter parameters?&lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="350" LastEditDate="2015-07-07T18:18:02.810" LastActivityDate="2015-07-08T17:49:00.813" Title="How do I choose the best filter for dead reckoning with an IMU?" Tags="&lt;mobile-robot&gt;&lt;localization&gt;&lt;kalman-filter&gt;&lt;imu&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7647" PostTypeId="1" CreationDate="2015-07-07T15:47:47.780" Score="4" ViewCount="1451" Body="&lt;p&gt;I am trying to calibrate a monocular camera using ROS with the help of this website: &lt;a href=&quot;http://wiki.ros.org/camera_calibration/Tutorials/MonocularCalibration&quot; rel=&quot;nofollow&quot;&gt;How to Calibrate a Monocular Camera&lt;/a&gt;. When I run &lt;code&gt;rostopic list&lt;/code&gt;, I get:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/left&#xA;/right&#xA;/rosout&#xA;/rosout_agg&#xA;/usb_cam/image&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;When I run &lt;code&gt;rosservice list&lt;/code&gt;, I get:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/cameracalibrator/get_loggers&#xA;/cameracalibrator/set_logger_level&#xA;/rosout/get_loggers&#xA;/rosout/set_logger_level&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Finally, when I run:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;rosrun camera_calibration cameracalibrator.py --size 10x7 --square 0.025 image:=/usb_cam/image camera:=/usb_cam &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It says:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;('Waiting for service', '/usb_cam/set_camera_info', '...')&#xA;Service not found&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I even added the parameter at the end, &lt;code&gt;--no-service-check&lt;/code&gt;, but that just makes the terminal stall indefinitely. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could someone please help me figure out what is going wrong and how I can fix it? Also if it is important, &lt;code&gt;usb_cam&lt;/code&gt; is saved at &lt;code&gt;catkin_ws/src/usb_cam&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="10088" LastEditorUserId="9176" LastEditDate="2015-07-30T23:57:59.787" LastActivityDate="2018-12-17T22:55:53.720" Title="ROS Calibration Camera Problems" Tags="&lt;ros&gt;&lt;cameras&gt;&lt;calibration&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7648" PostTypeId="1" CreationDate="2015-07-07T17:06:46.620" Score="0" ViewCount="1610" Body="&lt;p&gt;Can someone please provide me with a list of sensors on the create 2?  I am hoping to get one soon, but want to be sure it has ultrasonic sensors and not just bump sensors before I do.&lt;/p&gt;&#xA;" OwnerUserId="10093" LastActivityDate="2016-01-07T14:39:30.850" Title="iRobot Create 2 sensors" Tags="&lt;irobot-create&gt;&lt;roomba&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2015-07-24T16:55:17.867" ContentLicense="CC BY-SA 3.0" />
  <row Id="7649" PostTypeId="2" ParentId="7647" CreationDate="2015-07-07T18:12:02.910" Score="0" Body="&lt;p&gt;It looks the answer you seek may have already been &lt;a href=&quot;http://answers.ros.org/question/62778/ros_camera_info-service-not-found-for-usb_cam/&quot; rel=&quot;nofollow&quot;&gt;answered on the ROS website&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Specifically, a bug in the camera driver in that it is not advertising the proper service.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2015-07-07T18:12:02.910" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7650" PostTypeId="2" ParentId="7634" CreationDate="2015-07-07T18:38:28.787" Score="3" Body="&lt;p&gt;If you're just starting out, you should probably use the original Arduino instead of a generic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's say you follow an Arduino example using a generic, and things don't work the way you expect.  How will you know whether your Arduino code (or circuit) is the problem, and not the generic board?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In all actuality, a generic board will probably work fine.  The best choice for you will come down to how confident you can be in troubleshooting.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2015-07-07T18:38:28.787" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7651" PostTypeId="2" ParentId="7647" CreationDate="2015-07-07T19:40:47.583" Score="1" Body="&lt;p&gt;I got the problem fixed, apparently my camera was not &quot;on&quot;, and it only turned on after I ran the .launch test file right before I do the calibration. Also it should be image_raw, not image in the command. &lt;/p&gt;&#xA;" OwnerUserId="10088" LastActivityDate="2015-07-07T19:40:47.583" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7652" PostTypeId="1" AcceptedAnswerId="7657" CreationDate="2015-07-07T21:16:43.993" Score="-1" ViewCount="129" Body="&lt;p&gt;I have a Robotic arm mounted on a car. There's a camera attached to it. Suppose the camera takes the image of a room, and finds that there's something, say an object, that has to be picked up. Say it's 50 feet away from the robot. My question is that how will the robot reach the object in the first place, and secondly, when it has reached the object, how will it know the real world co-ordinates of the object, to pick the object up, using inverse kinematic equations. Any help would be appreciated. Thanks&lt;/p&gt;&#xA;" OwnerUserId="10094" LastActivityDate="2015-07-09T02:01:13.220" Title="How do I control the robotic arm motion?" Tags="&lt;mobile-robot&gt;&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="4" ClosedDate="2015-07-08T16:59:06.413" ContentLicense="CC BY-SA 3.0" />
  <row Id="7653" PostTypeId="2" ParentId="7645" CreationDate="2015-07-08T05:37:24.997" Score="1" Body="&lt;p&gt;I have had much better success with Kalman filters than any other, that is where it can be run fast enough, as the matrix transformations are very resource intensive.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;I use the MPU 6000 (it is integrated into the Pixhawk my favourite FC) in conjunction with the Extended Kalman Filter, due to the linear nature of the systems I work with (quadcopters/planes). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But as holmeski pointed out, just using dead reckoning will not work out so well for any length of time, you will need some more accurate positioning.&lt;/p&gt;&#xA;" OwnerUserId="7066" LastEditorUserId="7066" LastEditDate="2015-07-08T17:49:00.813" LastActivityDate="2015-07-08T17:49:00.813" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7654" PostTypeId="2" ParentId="7641" CreationDate="2015-07-08T07:14:37.340" Score="2" Body="&lt;p&gt;I really don't think the format matters, so I'd suggest you go for what's most convenient to you.  You might want something that can be displayed easily on screen, any bit map format will do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could even use a simple text file with occupied grid squares marked, a really simple example below:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;1111111&#xA;1000001&#xA;1110001&#xA;1000001&#xA;1111111&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="9578" LastActivityDate="2015-07-08T07:14:37.340" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7655" PostTypeId="2" ParentId="7645" CreationDate="2015-07-08T14:31:20.660" Score="1" Body="&lt;p&gt;Some type of Kalman filter is almost always the best solution to an estimation problem involving a dynamic system given your computer can handle the matrix inversion. Generally, Kalman filters optimally combine the previous estimate, the confidence of the previous estimate, sensor measurements, and sensor confidence together for the new state estimate. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The advantage of the complementary filter is its simplicity and ease of implementation.  The complementary filter's disadvantage is its accuracy; it will never behave better than a well tuned Kalman filter. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am unfamiliar with the other filters you've listed :/&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For your system, I would recommend using an extended Kalman filter or an unscented Kalman filter, both are capable of handling the nonlinear equations that you'll need for dead reckoning. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Choosing filter parameters will vary depending on the filter you end up using. I would recommend looking at Optimal State Estimation by Dan Simon which goes over linear and nonlinear Kalman filters as well as choosing filter parameters. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;side note: Dead reckoning is an unobservable system. Your state estimate will slowly drift from truth no matter how accurate your sensors are. This may not be a problem if you're just trying to track motion over a couple of seconds. However, if you're trying to navigate a map using only the two sensors you've listed, you're bound to run into trouble. &lt;/p&gt;&#xA;" OwnerUserId="8842" LastEditorUserId="8842" LastEditDate="2015-07-08T17:47:00.607" LastActivityDate="2015-07-08T17:47:00.607" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7656" PostTypeId="1" CreationDate="2015-07-08T15:22:41.080" Score="0" ViewCount="544" Body="&lt;p&gt;I want to use IR sensors to detect whether my dustbin is full but I want to protect it from outside dust. I am planning to use the IR sensors on Roomba.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;How are they working despite a plastic wall?&lt;/li&gt;&#xA;&lt;li&gt;Also, what is the range of the sensor?&lt;/li&gt;&#xA;&lt;li&gt;Can they detect obstacle at about 25 cm?&lt;/li&gt;&#xA;&lt;li&gt;Why is there a wall between the IR sensors?&lt;/li&gt;&#xA;&lt;li&gt;Is there a reason they are positioned at certain angle?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="10100" LastActivityDate="2016-02-07T04:11:15.007" Title="How does the cliff sensors on ROOMBA work through a glass wall?" Tags="&lt;sensors&gt;&lt;roomba&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7657" PostTypeId="2" ParentId="7652" CreationDate="2015-07-08T15:36:36.067" Score="1" Body="&lt;p&gt;With your question, i assume that you are new to this field. This cannot be solved with one concept. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The mentioned objective requires &lt;a href=&quot;https://en.wikipedia.org/wiki/Simultaneous_localization_and_mapping&quot; rel=&quot;nofollow&quot;&gt;SLAM technique&lt;/a&gt; - Simultaneous localization and mapping . &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using SLAM, the robot can be navigated to any location. A camera is not enough to map an area or a room in your case. You also require depth sensors such as kinect or &lt;a href=&quot;https://www.stereolabs.com/&quot; rel=&quot;nofollow&quot;&gt;Zed&lt;/a&gt;. &#xA;You need to develop a program to reach the object for your robot, depending on the architecture that you are using. Here comes the role of a platform. &#xA;A typical arduino, or a raspberry pi single board computer is enough for your project. You should be very familiar with these platforms to integrate your sensors and play with them. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, once the location is reached and the object is recognized by the sensors, Here comes the Inverse kinematics into the action. &#xA;There is no such thing called &quot;real-world co-ordinates&quot;, until and unless you are dealing with GPS for long range SLAM. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your case,  the co-ordinates of the object are measured in the context of the location of the sensor mounted on your car. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once the parameters of the object are known, you can use IK(inverse kinematics) for your robotic arm to grab it from its position. (Assuming that you know about IK, as you have mentioned in the question)&lt;/p&gt;&#xA;" OwnerUserId="9987" LastEditorUserId="9987" LastEditDate="2015-07-09T02:01:13.220" LastActivityDate="2015-07-09T02:01:13.220" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7658" PostTypeId="2" ParentId="7648" CreationDate="2015-07-08T17:19:14.103" Score="4" Body="&lt;p&gt;The Roomba does not have ultrasonic sensors, but it does have quite a few infrared proximity sensors.  The &lt;a href=&quot;http://www.irobotweb.com/~/media/MainSite/PDFs/About/STEM/Create/iRobot_Roomba_600_Open_Interface_Spec.pdf&quot; rel=&quot;nofollow&quot;&gt;Open Interface Spec&lt;/a&gt; calls it the &quot;light bumper&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Package IDs 46-51 (pages 30 and 31) describe the different light bumper IR sensors.  They return a 12 bit number (0-4095) which will roughly correspond to distance to an object.  However it is highly dependent on the object's material.  The &quot;light bumper&quot; packet (45) contains a binary version of all the light bumper sensors together.  I don't know what threshold is used for this.&lt;/p&gt;&#xA;" OwnerUserId="110" LastEditorUserId="110" LastEditDate="2016-01-07T14:39:30.850" LastActivityDate="2016-01-07T14:39:30.850" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7659" PostTypeId="1" CreationDate="2015-07-08T19:06:00.797" Score="2" ViewCount="329" Body="&lt;p&gt;I am trying to run the &lt;code&gt;cameracalibrator.launch&lt;/code&gt; using PTAM according to this &lt;a href=&quot;http://wiki.ros.org/ethzasl_ptam/Tutorials/camera_calibration&quot; rel=&quot;nofollow noreferrer&quot;&gt;Camera Calibration tutorial&lt;/a&gt;. However, when I do so, I get the following error:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ERROR: cannot launch node of type [ptam/cameracalibrator]: can't locate node [cameracalibrator] in package [ptam]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I source my &lt;code&gt;devel/setup.bash&lt;/code&gt; before I run the code as well and it still does not work. Here is my launch file:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;launch&amp;gt;&#xA;    &amp;lt;node name=&quot;cameracalibrator&quot; pkg=&quot;ptam&quot; type=&quot;cameracalibrator&quot; clear_params=&quot;true&quot; output=&quot;screen&quot;&amp;gt;&#xA;        &amp;lt;remap from=&quot;image_raw&quot; to usb_cam/image_raw&quot; /&amp;gt;&#xA;        &amp;lt;remap from=&quot;pose&quot; to=&quot;pose&quot;/&amp;gt;&#xA;        &amp;lt;rosparam file=&quot;$(find ptam)/PtamFixParams.yaml&quot;/&amp;gt;&#xA;    &amp;lt;/node&amp;gt;&#xA;&amp;lt;/launch&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Here is what I get for &lt;code&gt;rostopic list&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/rosout&#xA;/rosout_agg&#xA;/svo/dense_input&#xA;/svo/image&#xA;/svo/image/compressed&#xA;/svo/image/compressed/parameter_descriptions&#xA;...&#xA;/tf&#xA;/usb_cam/camera_info&#xA;/usb_cam/image_raw&#xA;/usb_cam/image_raw/compressed&#xA;...&#xA;/usb_cam/image_raw/theora&#xA;/usb_cam/image_raw/parameter_descriptions&#xA;/usb_cam/image_raw/parameter_updates&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The path where the &lt;code&gt;cameracalibration.launch&lt;/code&gt; file is &lt;code&gt;catkin_ws/src/ethzasl_ptam/ptam/launch&lt;/code&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not sure why this error keeps coming up because when I run &lt;code&gt;roslaunch ptam cameracalibrator.launch&lt;/code&gt;, it says:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;NODES&#xA;  /&#xA;    cameracalibrator (ptam/cameracalibrator)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So I'm thinking that PTAM does include &lt;code&gt;cameracalibrator&lt;/code&gt;. If someone could please point out my error, that would be really helpful. I've been using this post as a guide, but it's not been helping me much: &lt;a href=&quot;https://stackoverflow.com/questions/16759356/ros-dynamic-config-file&quot;&gt;Ros Dynamic Config file&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As it says in the above link, I tried &lt;code&gt;find . -executable&lt;/code&gt; and I could not find &lt;code&gt;cameracalibrator&lt;/code&gt;. I could only find the below. How do I proceed?&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;./include&#xA;./include/ptam&#xA;./cfg&#xA;...&#xA;./launch&#xA;./src&#xA;./src/ptam&#xA;./src/ptam/cfg&#xA;...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="10088" LastEditorUserId="-1" LastEditDate="2017-05-23T12:37:11.430" LastActivityDate="2019-05-15T16:32:40.567" Title="PTAM CameraCalibrator error" Tags="&lt;ros&gt;&lt;cameras&gt;&lt;calibration&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7660" PostTypeId="1" CreationDate="2015-07-08T20:46:01.027" Score="6" ViewCount="2863" Body="&lt;p&gt;I have a mobile robot which is navigating around a room, I already have the map of the room. I am using the &lt;a href=&quot;http://wiki.ros.org/navigation&quot; rel=&quot;nofollow&quot;&gt;navigation_stack&lt;/a&gt; of ROS. I am using rotary encoders for odometry. I am fusing the data from Rotary encoders and IMU using robot_pose_ekf. I am using amcl for localization and move_base for planning. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, I have to write a Complete coverage Path planning algorithm and I am following &lt;a href=&quot;http://www.ri.cmu.edu/pub_files/pub4/choset_howie_1997_3/choset_howie_1997_3.ps.gz&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt; paper and I would like to ask what is the best way to generate the Boustrophedon path (simple forward and backward motions) in a cell (can be rectangular, trapezium, etc.) with no obstacles? I read a paper where they use different templates and combine them in a certain way to come up with the Boustrophedon path. Is there any other way by which we can generate the boustrophedon path? If someone can suggest how to implement it in ROS, that will be great.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please let me know if you need more information from me. Any help will be appreciated.&lt;/p&gt;&#xA;" OwnerUserId="10101" LastEditorUserId="9176" LastEditDate="2015-07-30T23:57:35.670" LastActivityDate="2015-08-07T01:36:24.187" Title="Implementing a boustrophedon algorithm in a given room with obstacles" Tags="&lt;ros&gt;&lt;navigation&gt;&lt;motion-planning&gt;&lt;coverage&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7661" PostTypeId="2" ParentId="970" CreationDate="2015-07-09T05:43:20.273" Score="0" Body="&lt;p&gt;On a semi related note, is there a possibly of permanent damage to the magnemometer and other chips if they are exposed to a magnetic field of between 1000-2000 uT from a stack of small rare earth magnets? I tried doing that to the 9-DOF IMU from adafruit today as a test and it seems to have permanently altered the bias of the magnetometer.&lt;/p&gt;&#xA;" OwnerUserId="7537" LastActivityDate="2015-07-09T05:43:20.273" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7662" PostTypeId="1" CreationDate="2015-07-09T13:46:45.703" Score="8" ViewCount="9680" Body="&lt;p&gt;What will be the specifications of motors and propellers that can approx produce a thrust of 100kg in a quadcopter?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We are planning to lift a total weight of 50 Kg along with the 20 Kg weight of the quadcopter itself. So at 50% throttle the total thrust produced by it should be 150 Kg with a per motor total thrust of 37.5 kg.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have looked at &lt;a href=&quot;https://robotics.stackexchange.com/a/7468/37&quot;&gt;this answer&lt;/a&gt; to &lt;a href=&quot;https://robotics.stackexchange.com/q/7662/37&quot;&gt;How to calculate quadcopter lift capabilities?&lt;/a&gt; but don't understand how to use this information to work out the specifications of motor and propeller required for my application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The answer given in previous question is limited for small quad &amp;amp; I require the specifications of BLDC motor such as Kv,torque,Imax,V,Power,etc and of Propeller suitable for such motor.&lt;/p&gt;&#xA;" OwnerUserId="10105" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2018-08-11T02:24:29.360" Title="How do I work out the specifications of motors and propellers for a quadcopter?" Tags="&lt;quadcopter&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7663" PostTypeId="2" ParentId="7656" CreationDate="2015-07-09T13:48:16.860" Score="1" Body="&lt;p&gt;You should just use a Roomba 700 or 800 series robot.  These come with a bin full sensor already.  And the &lt;a href=&quot;http://www.irobotweb.com/~/media/MainSite/PDFs/About/STEM/Create/iRobot_Roomba_600_Open_Interface_Spec.pdf&quot; rel=&quot;nofollow&quot;&gt;Open Interface spec&lt;/a&gt; works on Roomba versions 500, 600, 700, and 800.  &lt;/p&gt;&#xA;" OwnerUserId="110" LastEditorUserId="110" LastEditDate="2016-01-07T14:36:45.780" LastActivityDate="2016-01-07T14:36:45.780" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7664" PostTypeId="1" AcceptedAnswerId="7665" CreationDate="2015-07-10T00:59:05.327" Score="3" ViewCount="155" Body="&lt;p&gt;I would like to find an electronic actuator that mimics the characteristics of a hydraulic actuator, in that the position remains fixed without power drain when the actuator is not moving. Which actuators exist that match these criteria?&lt;/p&gt;&#xA;" OwnerUserId="10113" LastEditorUserId="187" LastEditDate="2015-07-11T10:02:11.443" LastActivityDate="2015-07-11T18:57:23.640" Title="What actuator types exist that remain locked in their last position like hydraulic piston?" Tags="&lt;electronics&gt;&lt;actuator&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7665" PostTypeId="2" ParentId="7664" CreationDate="2015-07-10T02:54:46.693" Score="6" Body="&lt;p&gt;Actuators that use a &lt;a href=&quot;https://en.wikipedia.org/wiki/Worm_drive&quot;&gt;worm gear&lt;/a&gt; can't generally be back-driven; these are the same gearing mechanisms that let you twist a guitar string to tune it without the tension being able to back-drive (and thus un-tune) the tuning mechanism. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Worm gears are nice in that they offer generally pretty &lt;em&gt;huge&lt;/em&gt; reductions in speed, with a &lt;em&gt;huge&lt;/em&gt; increase in torque. This leads to them being used in lots of things, one of them being &lt;a href=&quot;https://en.wikipedia.org/wiki/Linear_actuator&quot;&gt;linear actuators&lt;/a&gt;. The worm gear will typically be used to step down the motor from high speed to high torque, which is then used to turn the leadscrew that operates the linear actuator. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, if you're looking for an actuator that's electric that can't be back-driven, you can search for &lt;a href=&quot;https://www.google.com/search?q=worm+gear+actuator&amp;amp;tbm=shop&quot;&gt;worm gear actuators&lt;/a&gt;, or just look for &lt;a href=&quot;https://www.google.com/search?q=linear+actuator&amp;amp;tbm=shop&quot;&gt;linear actuators&lt;/a&gt; as most of them will expressly state if the &lt;em&gt;can&lt;/em&gt; be back-driven. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-07-10T02:54:46.693" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7666" PostTypeId="1" AcceptedAnswerId="7667" CreationDate="2015-07-10T07:19:37.107" Score="0" ViewCount="62" Body="&lt;p&gt;I'm sorry for this question that might not fit in here however, I would like to give it a shot. I've chosen this stack since the question is somehow related to mobile robots. I've came across a paper in Mobile Robot Localization that has cited the following reference, &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;C. Brown, H. Durrant-Whyte, J. Leonard, B. Rao, and B. Steer.  Kalman&#xA;  filter algorithms, applications, and utilities. Technical Report&#xA;  OUEL-1765/89, Oxford U. Robotics Research Group, 1989.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I couldn't find this reference. Nothing show up in Google not even in Google Scholar. In my university which allows me to access to a massive database, also nothing show up. Since this is a technical report, I'm interested to read it to have more appreciation about Kalman Filter. Has anyone came across this reference?&lt;/p&gt;&#xA;" OwnerUserId="2155" LastActivityDate="2015-07-10T07:55:48.843" Title="where to get this reference about Kalman filter, technical report" Tags="&lt;mobile-robot&gt;&lt;localization&gt;&lt;kalman-filter&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7667" PostTypeId="2" ParentId="7666" CreationDate="2015-07-10T07:55:48.843" Score="2" Body="&lt;p&gt;If one of the named researchers is still at that Oxford University group, it can be reasonable to write/email to the researcher explaining your interest and ask if it is possible to obtain a copy - even though it's old. Or if you're shy ask your supervisor if this would be a good idea first.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However it is a very general sounding title, it's possible it doesn't have the precise thing that you're looking for... and many things have been written on the subject since.&lt;/p&gt;&#xA;" OwnerUserId="9578" LastActivityDate="2015-07-10T07:55:48.843" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7668" PostTypeId="2" ParentId="7664" CreationDate="2015-07-10T12:56:04.157" Score="1" Body="&lt;p&gt;Another option is a motor which maintains position with a magnetic field.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many stepper motors fall into a &lt;a href=&quot;https://en.wikipedia.org/wiki/Stepper_motor#Detent_torque&quot; rel=&quot;nofollow noreferrer&quot;&gt;detent position&lt;/a&gt; when power is removed. If you only need whole step positional accuracy and the &lt;a href=&quot;https://en.wikipedia.org/wiki/Cogging_torque&quot; rel=&quot;nofollow noreferrer&quot;&gt;detent torque or cogging&lt;/a&gt; is large enough to hold your load in place, then this may be an option.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the positional accuracy or detent torque is not high enough, then gearing can be applied to improve both at the expense of maximum speed (this is essentially what &lt;a href=&quot;https://robotics.stackexchange.com/a/7665/37&quot;&gt;Chuck is suggesting&lt;/a&gt;, but a worm gear isn't the only option).&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2015-07-10T12:56:04.157" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7670" PostTypeId="1" CreationDate="2015-07-11T06:56:52.220" Score="2" ViewCount="702" Body="&lt;p&gt;From a technical standpoint what are the differences between the Kinect v1 and the Kinect v2 ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm interested both in the hardware equipment and the format of the data.&lt;/p&gt;&#xA;" OwnerUserId="9827" LastEditorUserId="9176" LastEditDate="2015-07-30T23:57:28.390" LastActivityDate="2015-07-30T23:57:28.390" Title="Kinect v1 VS Kinect v2" Tags="&lt;kinect&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7671" PostTypeId="1" AcceptedAnswerId="7673" CreationDate="2015-07-11T07:09:16.273" Score="0" ViewCount="704" Body="&lt;p&gt;As I'm advancing in my project I realized I need better hardware, particularly for video input and processing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From an intuitive feeling sounds like stereo cameras offers a more powerful and flexible solution, on the other hand the Kinect looks like a great out-of-the-box solution for depth sensing and it also takes away a lot of computational complexity as it output directly the depth.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I would like to know what are the upsides and downsides of the 2 solutions and if they have any well known limitation and/or field of application and why.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you &lt;/p&gt;&#xA;" OwnerUserId="9827" LastActivityDate="2015-07-11T17:13:35.437" Title="Kinect VS Stereo cameras" Tags="&lt;kinect&gt;&lt;cameras&gt;&lt;stereo-vision&gt;" AnswerCount="1" CommentCount="5" ClosedDate="2015-07-12T12:07:28.727" ContentLicense="CC BY-SA 3.0" />
  <row Id="7672" PostTypeId="1" CreationDate="2015-07-11T11:55:08.807" Score="2" ViewCount="41" Body="&lt;p&gt;I plan to use the icreate as a platform to carry a tablet, or notebook PC and want to have power for some time so I need more than the 3000 mAh battery. I want all to be powered from same battery system and use same charging source. So I need info as to how to wire in additional 14.4V NiMH batteries in parallel with the existing and how to deal with the additional temperature sensors (I could ignore of course but...). Can the built in power control deal with this? Do I need to upgrade it somehow? I would appreciate suggestions as I do not want a completely separate power system for aux devices. Charging all from standard home base is the goal even though it will take longer. I can deal with adapting the 14.4V to whatever aux devices I add. Thanks.&lt;/p&gt;&#xA;" OwnerUserId="10121" LastEditorUserId="478" LastEditDate="2015-07-11T19:13:19.393" LastActivityDate="2015-07-12T00:06:32.703" Title="Extending iCreate battery power for auxilliary equipment" Tags="&lt;power&gt;&lt;battery&gt;&lt;roomba&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7673" PostTypeId="2" ParentId="7671" CreationDate="2015-07-11T17:13:35.437" Score="3" Body="&lt;p&gt;Kinect:&#xA;Pro:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;cheap&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;already calibrated&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;active system (works also on textureless surfaces)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;dense stereo&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Con:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;defined range (low maximal range)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;does not work good outdoors in direct sunlight&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Stereo:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pro:&#xA;- adjustable (different camera, different baseline possible for different ranges)&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;higher framerate possible&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;works outdoors&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Cons:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;hard to built right (cameras must not move at all)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;higher computational load&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;no dense 3d (does rely on texture)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="23196" LastActivityDate="2015-07-11T17:13:35.437" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7675" PostTypeId="2" ParentId="7670" CreationDate="2015-07-11T17:25:24.283" Score="4" Body="&lt;p&gt;Kinect 1 is a structured Light sensor, Kinect 2 is a Time of Flight camera. &#xA;Structured Light gives you better performance on edges where a ToF camera smoothes the data due to multipath-measurements.  ToF has less problems with ambient light. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is your use case?&lt;/p&gt;&#xA;" OwnerUserId="23196" LastActivityDate="2015-07-11T17:25:24.283" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="7676" PostTypeId="2" ParentId="7664" CreationDate="2015-07-11T18:57:23.640" Score="0" Body="&lt;p&gt;A &lt;a href=&quot;http://en.wikipedia.org/wiki/relay#Latching_relay&quot; rel=&quot;nofollow&quot;&gt;latching relay&lt;/a&gt; remains fixed in its last position when power is disconnected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A &lt;a href=&quot;http://en.wikipedia.org/wiki/stepping_switch&quot; rel=&quot;nofollow&quot;&gt;stepping switch&lt;/a&gt; is a specialized multi-position latching relay.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A &lt;a href=&quot;http://en.wikipedia.org/wiki/circuit_breaker&quot; rel=&quot;nofollow&quot;&gt;circuit breaker&lt;/a&gt;, an &lt;a href=&quot;http://en.wikipedia.org/wiki/earth_leakage_circuit_breaker&quot; rel=&quot;nofollow&quot;&gt;earth leakage circuit breaker&lt;/a&gt;, a &lt;a href=&quot;http://en.wikipedia.org/wiki/residual-current_device&quot; rel=&quot;nofollow&quot;&gt;residual-current circuit breaker&lt;/a&gt;, etc. also remain fixed in its last position when power is disconnected.&lt;/p&gt;&#xA;" OwnerUserId="187" LastActivityDate="2015-07-11T18:57:23.640" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7677" PostTypeId="2" ParentId="7672" CreationDate="2015-07-12T00:06:32.703" Score="1" Body="&lt;p&gt;&lt;a href=&quot;http://www.irobotweb.com/~/media/MainSite/PDFs/About/STEM/Create/BatteryPower_2015.pdf?la=en&quot; rel=&quot;nofollow&quot;&gt;This&lt;/a&gt; project page describes many specifics of the Roomba power system.  I don't think it covers adding additional batteries in parallel, but probably has lots of other helpful information for you.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-07-12T00:06:32.703" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7678" PostTypeId="1" CreationDate="2015-07-12T00:09:41.057" Score="-1" ViewCount="187" Body="&lt;p&gt;What's least complex way to reduce power from a 10V 1.5A battery to 6V 1.5A&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you!&lt;/p&gt;&#xA;" OwnerUserId="10125" LastActivityDate="2015-07-12T00:56:10.027" Title="How to reduce battery power 10v 1.5A to 6v 1.5A" Tags="&lt;battery&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2015-07-12T12:01:46.227" ContentLicense="CC BY-SA 3.0" />
  <row Id="7679" PostTypeId="2" ParentId="7678" CreationDate="2015-07-12T00:56:10.027" Score="1" Body="&lt;p&gt;If your current requirements are indeed over an ampere, &#xA;use a buck converter, that is, switching DC-DC converter.  (For example, search for &lt;code&gt;6V 3A buck&lt;/code&gt; on ebay and you will see a lot of such converters for about $2.50 each, delivered.)  A buck converter's efficiency typically is 85 to 95%.  If you use resistors, your efficiency can be no better than 60%, and regulation will be quite poor:  you will get your desired voltage only at some certain current draw, and higher or lower voltages at other draws.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's a picture of a typical example.  It is labeled as 12V in, but it actually works with input voltages in the range from 8V to over 20V, ie, maintains close to 6V output for output currents up to 3A and input voltages from 8V to over 20V. &#xA;&lt;img src=&quot;https://i.stack.imgur.com/1fDi8.jpg&quot; alt=&quot;6V 3A buck&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="478" LastActivityDate="2015-07-12T00:56:10.027" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7680" PostTypeId="1" CreationDate="2015-07-12T05:05:27.610" Score="-1" ViewCount="48" Body="&lt;p&gt;I am working on a project that requires motion detection and positioning. I've worked substantially with a camera but the issue with this is that I need something sleek, small and not heavy at all. Cameras also tend to rely on luminosity and they don't work well in poorly lit spaces.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need someone who's worked on something like this or who knows the best sensor for this purpose.&lt;/p&gt;&#xA;" OwnerUserId="10126" LastEditorUserId="9176" LastEditDate="2016-03-11T14:21:17.143" LastActivityDate="2016-03-11T14:21:17.143" Title="Arduino compatible sensor for motion detection and positioning" Tags="&lt;arduino&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2015-07-12T12:20:50.343" ContentLicense="CC BY-SA 3.0" />
  <row Id="7681" PostTypeId="2" ParentId="7680" CreationDate="2015-07-12T09:01:31.003" Score="2" Body="&lt;p&gt;&quot;I am working on a project that requires motion detection and positioning&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could a be bit more precise? In the title you just asked for motion detection, now you also want positioning. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What do you want to detect - a door or a fly? At which distance? With which accuracy? At which frame rate?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This would be something to at least detect motion and measure the distance to it: &lt;a href=&quot;https://www.antratek.de/sharp-gp2y0a41sk0f?gclid=CIfMltmd1cYCFcnItAodkQ8ESQ&quot; rel=&quot;nofollow&quot;&gt;Infrared Sensor 4-30 cm - Sharp GP2Y0A41SK0F&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="23196" LastEditorUserId="9176" LastEditDate="2016-03-11T14:21:12.033" LastActivityDate="2016-03-11T14:21:12.033" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7682" PostTypeId="1" CreationDate="2015-07-13T01:02:09.477" Score="-1" ViewCount="511" Body="&lt;p&gt;I have a 2 DOF Robot Arm with a camera attached to it. It takes an Image and there's an object in that image, say a glass. Of course, in order to move the arm to the required position to grasp the object, I have to solve the inverse kinematic equations. In order to solve them, I need the x and y, the coordinates where the arm has to reach to grasp the object. My question is how can I find the x and y of say the midpoint of the object from the image. Thanks &lt;/p&gt;&#xA;" OwnerUserId="10094" LastActivityDate="2015-07-13T09:14:31.530" Title="Object Grasping Robot Arm Control" Tags="&lt;mobile-robot&gt;&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ClosedDate="2015-07-14T17:08:08.653" ContentLicense="CC BY-SA 3.0" />
  <row Id="7683" PostTypeId="2" ParentId="7662" CreationDate="2015-07-13T01:18:11.483" Score="1" Body="&lt;p&gt;The other answer is perfectly adequate but I will run through the calculations for your quadcopter.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Normally the larger the load the lower the KVA (RPM per volt) of the motor required and the higher the voltage required, as lower KVA generally indicates more torque.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The larger the load the larger the prop required, a larger prop will produce more thrust at low RPMs but will require more torque to turn, choosing the right combination is key.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;For large high performance motors, &lt;a href=&quot;http://www.rctigermotor.com/&quot; rel=&quot;nofollow&quot;&gt;Tiger motor&lt;/a&gt; is my favorite (their are plenty of other venders but they are the one I am most familiar with)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;For best performance in this size range I would choose the &lt;a href=&quot;http://www.rctigermotor.com/html/2015/Efficiency-Type_0611/295.html&quot; rel=&quot;nofollow&quot;&gt;U10 range&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;For best controllability you want the quadrocopter to be able to hover at 50% or less of throttle, with your crafts total mass of 70kg and with a desired 4 motor configuration the motor thrust must be at least&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;70kg/4 = 17.5kg or 17400 grams at 50% throttle&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Scrolling down you can see there thrust table and notice the largest thrust at 50% is 3254 grams (U10PLUS KV80@56v with a 30x10.5 prop), or 18% of what you need, you will need to go back to the drawing board, as in order to lift your load you would need 6 motors&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Assuming your frame had to motos regularly spaced your frame would need to be 1.3m in diameter, at hover drawing 1.6kW and at peak over 10kW &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This vehicle would be impracticable to build and fly, what are you hoping to do? 50kg is a tremendous amount of weight, can you tell us specifically what you're doing? we could then give better suggestions of how to accomplish it.&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2015-07-13T01:18:11.483" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="7684" PostTypeId="2" ParentId="7682" CreationDate="2015-07-13T09:14:31.530" Score="2" Body="&lt;p&gt;What you need is to know the position in (x,y) of the object with respect to your robot's arm. That is, you want to measure distance. You have several options:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Use a &lt;a href=&quot;https://en.wikipedia.org/wiki/Fiducial_marker&quot; rel=&quot;nofollow noreferrer&quot;&gt;fiducial marker&lt;/a&gt;. By placing one of these images on your object, you can use an image processing algorithm to detect the marker and use its relative size and orientation to determine where the object is relative to the camera/your robot arm.&#xA;Common ones look like this:&#xA;&lt;img src=&quot;https://i.stack.imgur.com/OUOwz.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Try looking for implementations of algorithms for reading fiducials in either ROS (Robot Operating System) modules or as functions in OpenCV.&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;&lt;p&gt;Use a distance sensor. Some commonly used ones for hobbyists are &lt;a href=&quot;https://www.parallax.com/product/28015&quot; rel=&quot;nofollow noreferrer&quot;&gt;ultrasonic&lt;/a&gt; and &lt;a href=&quot;https://www.sparkfun.com/products/242&quot; rel=&quot;nofollow noreferrer&quot;&gt;infra-red laser range finders&lt;/a&gt;. Place these sensors on your robot arm and have the sensor detect the object by looking for a &quot;bump&quot; in the reading, then calculate the distance to the object.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Use a stereo camera. You'll need to use an image processing algorithm to parse your camera outputs to detect how far away something is. &lt;a href=&quot;https://chrisjmccormick.wordpress.com/2014/01/10/stereo-vision-tutorial-part-i/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Link&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Use a &lt;a href=&quot;http://www.robotshop.com/en/hokuyo-utm-03lx-laser-scanning-rangefinder.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Lidar laser range finder&lt;/a&gt;. These are probably out of your budget, as most of them cost between $1000 and several thousand dollars, but they can be used to generate a 3D map of your environment.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Side note: With only a 2DOF arm, you'll be limited to grasping your object in one of two configurations. (elbow in/out) You might consider using a 3DOF robot arm with a wrist so that you can more easily adjust your grasping angle.&lt;/p&gt;&#xA;" OwnerUserId="7537" LastActivityDate="2015-07-13T09:14:31.530" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7685" PostTypeId="1" AcceptedAnswerId="7690" CreationDate="2015-07-13T10:31:49.377" Score="2" ViewCount="4794" Body="&lt;p&gt;In the scope of my PhD, I would like to build an automated microscopy set-up that should take images of a sample of 2cm by 2cm. This should be done by taking pictures of 500 micrometers by 500 micrometers.&lt;/p&gt;&#xA;&lt;p&gt;Therefore I need to design an XY-stage moving my sample over the optical setup. I would use a Raspberry Pi to steer all the hardware.&lt;/p&gt;&#xA;&lt;p&gt;Could you direct me to material about how to best make an XY-stage ? My questions are about what types of motors to use (stepper?), how many, how to create a good sliding mechanism to avoid jerky steps, etc.&lt;/p&gt;&#xA;&lt;p&gt;Simple links to basic engineering of such set-ups would be more than enough for me to start, as I am a complete layman in this field.&lt;/p&gt;&#xA;&lt;p&gt;EDIT: I have found this &lt;a href=&quot;http://letsmakerobots.com/node/31381&quot; rel=&quot;nofollow noreferrer&quot;&gt;blogpost&lt;/a&gt;. It does what I require, if I get small enough angle step stepper motors.&lt;/p&gt;&#xA;&lt;p&gt;EDIT2: I need a maximal range of motion of 10 cm in both directions. The overall size should not exceed 30x30 cm^2. Step sizes should not exceed 10 microns. I do not care about moving speed. Based upon the design in the link, buying a stepper motor with a 100:1 gear box could allow my very small radial steps (&amp;lt;0.05 deg) which would result in about 5 micron steps, assuming a rotor radius of about 1cm.&#xA;As far as price goes, it should not exceed commercially available options which start at about 5k USD&lt;/p&gt;&#xA;" OwnerUserId="10134" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2015-10-22T11:27:04.947" Title="What is required to build a simple XY-stage?" Tags="&lt;raspberry-pi&gt;&lt;stepper-motor&gt;" AnswerCount="2" CommentCount="9" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7686" PostTypeId="2" ParentId="7640" CreationDate="2015-07-13T17:52:39.573" Score="2" Body="&lt;p&gt;There are different ways to approach this problem, but in a general sense you could try this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You have a PID controller for velocity.  It'll look something like this (untested code):&lt;br/&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&#xA;// PID Controller&#xA;struct PID&#xA;{&#xA;  float kP, kI, kD;&#xA;  float error, integral, derivative, previousError;&#xA;  float dT;&#xA;};&lt;br/&gt;&#xA;int computePID(PID* pid, float error)&#xA;{&#xA;  pid-&gt;error = error;&#xA;  pid-&gt;integral += error*dT;&#xA;  pid-&gt;derivative = (error - pid-&gt;previousError)/dT;&#xA;  pid-&gt;previousError = error;&#xA;&#xA;  return pid-&gt;kP*pid-&gt;error + pid-&gt;kI*pid-&gt;integral + pid-&gt;kD*pid-&gt;derivative;&#xA;}&#xA;&#xA;//Somewhere else&#xA;setArmMotor(computePID(&amp;pid, some_error));&#xA;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;When you tune the constants right, you should be able to run your arm at a constant speed.  However, this is dependent that you have a fairly high resolution encoder, if you don't you won't have much of a way to controlling how fast your motors are spinning.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now to control position, this will depend on your application.  The &quot;easy&quot; solution is to have another PID controller that controls position, where this new controller outputs a velocity instead of a motor power.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want a more &quot;controlled&quot; method of controlling velocity, you can use an acceleration profile.  For instance:&#xA;&lt;img src=&quot;https://i.stack.imgur.com/xwEoU.png&quot; alt=&quot;PID Velocity on an trapezoidal acceleration profile&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The code for this will look something like this:&#xA;&lt;code&gt;&#xA;float time = 0;&#xA;float enterSpeed = 0;&#xA;float maxSpeed = 10;&#xA;float exitSpeed = 0;&#xA;float speed = 0; // This is the variable that your PID's should correct to.&#xA;float acceleration = 1.0;&#xA;float distance = 100;&lt;br/&gt;&#xA;// Acceleration&#xA;while (speed &amp;lt; maxSpeed)&#xA;{&#xA;  speed = acceleration*time + enterSpeed;&#xA;  time+=1;&#xA;  delay(1);&#xA;}&lt;br/&gt;&#xA;// Kinematic Equations to calculate how far we need to maintain top speed for&#xA;float timeToStop = (exitSpeed-maxSpeed) / acceleration;&#xA;float distanceToStop&lt;br/&gt; = maxSpeed * timeToStop + 0.5 * acceleration * timeToStop * timeToStop;&#xA;&lt;br/&gt;// Maintain top velocity&#xA;while (encodersPosition + distanceToStop &gt; distance)&#xA;{&#xA;  speed = maxSpeed;&#xA;}&#xA;&lt;br/&gt;// Deceleration &#xA;time = 0;&#xA;while (speed &gt; exitSpeed)&#xA;{&#xA;  speed = maxSpeed - acceleration * time;&#xA;  time+=1;&#xA;  delay(1);&#xA;}&#xA;&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did a lot of that memory, correct me if I messed up something. There are a lot of edge cases in that profile that isn't checked for, but that's the basic idea.  &lt;/p&gt;&#xA;" OwnerUserId="7647" LastEditorUserId="7647" LastEditDate="2015-07-13T21:02:06.667" LastActivityDate="2015-07-13T21:02:06.667" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="7687" PostTypeId="2" ParentId="7662" CreationDate="2015-07-13T22:36:50.350" Score="1" Body="&lt;p&gt;Not technically a quadcopter, but if you use 6 &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__19964__Turnigy_RotoMax_100cc_Size_Brushless_Outrunner_Motor.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Turnigy RotoMax 100cc&lt;/a&gt; motors, 24 inch props and 150A ESCs you ought to be able to get something close the the specs you are looking at. I used &lt;a href=&quot;http://www.ecalc.ch/xcoptercalc.php?ecalc&amp;amp;lang=en&quot; rel=&quot;nofollow noreferrer&quot;&gt;eCalc&lt;/a&gt; to arrive at these numbers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;some assumptions I made in the calcs:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;your vehicle has 'excellent' motor cooling&lt;/li&gt;&#xA;&lt;li&gt;it uses a 10000mAh 65C/100C 14s LiPo battery&lt;/li&gt;&#xA;&lt;li&gt;it uses 24&quot;x12&quot; props with PConst=1.3 and TConst=1.0&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/CO554.png&quot; alt=&quot;eCalc data&quot;&gt;&#xA;Notice that this vehicle:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;has a drive (motors+ESCs+batteries) that weighs 18.85kg&lt;/li&gt;&#xA;&lt;li&gt;will be able to lift about 68kg (All-up weight + Add. Payload)&lt;/li&gt;&#xA;&lt;li&gt;will fly for about 5-6 minutes&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Please feel free to tweak the parameters to find the vehicle that works best for you.&lt;/p&gt;&#xA;" OwnerUserId="1075" LastActivityDate="2015-07-13T22:36:50.350" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7688" PostTypeId="2" ParentId="6442" CreationDate="2015-07-14T12:22:56.597" Score="1" Body="&lt;p&gt;I don't know that there's enough information here to diagnose anything. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can you get any angle on a quadcopter with only one or two motors running? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What do you mean, &quot;while recording [these] angles &lt;strong&gt;only the integral part of PID was non-zero&lt;/strong&gt;&quot;?? Did you manually set the proportional and derivative errors or gains to zero? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My guesses would be that:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(1) you are supplying power to the motors as though they were a quadcopter when you have the physical configuration in something other than a quadcopter - you can't tune a stabilization algorithm with half of the stabilizers (motors) offline.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(2) don't monkey with the PID controller by turning off random portions and expecting performance to be the same.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(3) in general, I would avoid using the derivative term of a PID controller if at all possible (that is, use a PI controller instead). If noise causes a spike in your sensor reading for one sample then it doesn't add a lot to the P or I terms, but it causes a &lt;em&gt;huge&lt;/em&gt; spike in the D term. Sensor noise may also play a part in your issues, but you can filter the sensor to check. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-07-14T12:22:56.597" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="7689" PostTypeId="2" ParentId="7600" CreationDate="2015-07-15T10:39:31.840" Score="5" Body="&lt;p&gt;If it's your first time, better off try with a simulator to check that your program doesn't break the robot's constraints or security configurations. &#xA;The most powerful simulator I came across is &quot;V-REP&quot;, which is free for educational purposes.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;V-REP is the Swiss army knife among robot simulators: you won't find a&#xA;  simulator with more functions, features, or more elaborate APIs.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The robot simulator V-REP, with integrated development environment, is&#xA;  based on a distributed control architecture: each object/model can be&#xA;  individually controlled via an embedded script, a plugin, a ROS node,&#xA;  a remote API client, or a custom solution. This makes V-REP very&#xA;  versatile and ideal for multi-robot applications. Controllers can be&#xA;  written in C/C++, Python, Java, Lua, Matlab, Octave or Urbi.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;V-REP is used for fast algorithm development, factory automation&#xA;  simulations, fast prototyping and verification, robotics related&#xA;  education, remote monitoring, safety double-checking, etc.&#xA;  &lt;a href=&quot;http://www.coppeliarobotics.com/index.html&quot; rel=&quot;nofollow&quot;&gt;http://www.coppeliarobotics.com/index.html&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;and answering @ben:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I don't think there is any sort of IDE, the way VisualStudio or&#xA;  Arduino have IDEs. However, I do know that Kuka does have some fancy&#xA;  work-cell simulation and analysis software. This kind of thing is for&#xA;  laying out large industrial floor plans and optimizing efficiency.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In fact, KUKA's latest robots &quot;LBR iiwa&quot; come with a sophisticated Eclipse-based IDE called &quot;&lt;a href=&quot;http://www.kuka-lbr-iiwa.com/?post_type=modal&amp;amp;p=479&quot; rel=&quot;nofollow&quot;&gt;KUKA Sunrise.Workbench.&lt;/a&gt;&quot;, you program your 7 DoF robot's arm directly with Java and Kuka's complete API.&#xA;And you still can program the robot with the control pendant (They call them SmartPAD) or C++ by communicating via a UDP interface called FRI (Fast Research Interface Library).&lt;/p&gt;&#xA;" OwnerUserId="10145" LastEditorUserId="10145" LastEditDate="2015-07-15T16:28:18.620" LastActivityDate="2015-07-15T16:28:18.620" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7690" PostTypeId="2" ParentId="7685" CreationDate="2015-07-15T11:47:29.130" Score="3" Body="&lt;p&gt;Simple X-Y stages are well understood and form the basis for the many open source hardware projects for 3D printers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each axis of an XY stage can be made from a pair of 6mm stainless steel rods, three LM6UU 6mm Linear Ball Bearings, a stepper motor (typically a &lt;a href=&quot;http://reprap.org/wiki/NEMA_Motor&quot; rel=&quot;nofollow&quot;&gt;NEMA14/17/23 motor&lt;/a&gt;) and stepper driver electronics. These axes can then be connected to the Digital IO on your Raspberry Pi.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have access to a 3D printer, then many of the components needed to link these elements together can be downloaded and printed out. If you don't, and don't want the expense of getting a bureau to print these parts for you, then they could be fabricated in a workshop by drilling and cutting plastic, metal or even wooden blocks. If you can find appropriate the 3D (as used by 3D printers), you should be able to extract all of the information you need to fabricate them manually.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In terms of driver electronics, I would suggest that you have a look at the &lt;a href=&quot;http://solderpad.com/folknology/dual-stepper-motor-module/&quot; rel=&quot;nofollow&quot;&gt;Open Source dual stepper motor driver&lt;/a&gt; by folknology, as this is a simple double sided PCB design which uses entirely through-hole components (great if you aren't too handy with the surface mount soldering required by many designs).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://letsmakerobots.com/node/31381&quot; rel=&quot;nofollow&quot;&gt;XY Table&lt;/a&gt; blog post you posted by Geir Andersen provides a pretty good example of how to do this. The only thing I would question would be the use of two bearings on the upper stage (one per rod) and what appears to be 4 bearings on the lower stage (two per rod). I would suggest using three on each instead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might assume that you would want each rod to have two bearings each (the symmetry appeals aesthetically), but you get better performance, stability and accuracy by putting two bearings on one rod (usually the one closest to the drive belt) and only one bearing on the other rod, so you effectively have a leader and a follower. This prevents over-constraint, where movement is not smooth because one end is fighting the other (both trying to be 'leaders' keeping the beam perpendicular to the rod).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similarly, only two bearings is under constrained. This is fine when your load and/or speed is low, but doesn't do as well with keeping your beam perpendicular to the rod as a three bearing system would.&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="37" LastEditDate="2015-07-15T11:52:46.510" LastActivityDate="2015-07-15T11:52:46.510" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7691" PostTypeId="1" CreationDate="2015-07-15T13:55:26.137" Score="1" ViewCount="119" Body="&lt;p&gt;Do you use simulators for developing your robot algorithms or do you test directly in your robot?&#xA;I would like to get introduced into the simulators world, but don't know from where to start... can you recommend me one?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regards&lt;/p&gt;&#xA;" OwnerUserId="10147" LastActivityDate="2017-10-12T15:44:08.880" Title="Is anybody using robot simulators?" Tags="&lt;simulator&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ClosedDate="2015-07-15T23:36:31.120" ContentLicense="CC BY-SA 3.0" />
  <row Id="7692" PostTypeId="2" ParentId="7691" CreationDate="2015-07-15T14:32:18.760" Score="7" Body="&lt;p&gt;I test everything in simulation I possibly can before I run on a real robot. I use &lt;a href=&quot;http://www.coppeliarobotics.com/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;V-REP&lt;/a&gt; extensively and have been extremely happy with it. The developers are extremely responsive and there is a free to use version for non-commercial purposes. They also have a great &lt;a href=&quot;https://www.youtube.com/watch?v=gBYqOBdIcaY&quot; rel=&quot;nofollow noreferrer&quot;&gt;demo video outlining the features in V-REP&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've also spent a couple of months using &lt;a href=&quot;http://gazebosim.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;gazebo&lt;/a&gt;, which is completely open source and did work for many of the basics. I moved away from it at the time because they tend to like to take their own path with fun features like new communication protocols and &lt;a href=&quot;http://ignitionrobotics.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;from scratch API implementations&lt;/a&gt; that aren't necessarily critical to actually simulating robots, these libraries unnecessarily re-implement existing libraries that are well written and widely used like &lt;a href=&quot;https://eigen.tuxfamily.org&quot; rel=&quot;nofollow noreferrer&quot;&gt;eigen&lt;/a&gt;. This is based on my interactions on the mailing list and bitbucket, in addition to the experiences of others I know.&lt;/p&gt;&#xA;" OwnerUserId="304" LastEditorUserId="304" LastEditDate="2017-10-12T15:44:08.880" LastActivityDate="2017-10-12T15:44:08.880" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7694" PostTypeId="1" CreationDate="2015-07-16T18:59:31.740" Score="4" ViewCount="649" Body="&lt;p&gt;A robotic arm should pick a cuboid up of a table, rotate it around its vertical axis and put it down on all possible positions. How many degrees of freedom are at least necessary?&#xA;(All coordinates, that should be reached by the robotic arm, are in its workspace. It is not allowed to put the cuboid down and pick it up, once the robot has it )&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The answer is  4 (3 translatory and 1 rotatory).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;But I don’t understand why. I thouhgt that it should be 3.&#xA;2 prismatic joints:  1 to pick the cuboid up,  and another one to move it anywhere on the table.&#xA;1 revolute joint to rotate the cuboid around its vertical axis. =&gt; 2 translatory and 1 rotatory. &lt;/p&gt;&#xA;" OwnerUserId="10154" LastActivityDate="2019-11-20T00:16:45.047" Title="Degree of Freedom" Tags="&lt;robotic-arm&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7695" PostTypeId="2" ParentId="7694" CreationDate="2015-07-16T19:24:12.570" Score="4" Body="&lt;p&gt;The answer is four. The arm needs to be able to move up and down, left and right, forward and backward, and rotate. The robot will need 3 translatory degrees of freedom and 1 rotatory. &lt;/p&gt;&#xA;" OwnerUserId="8842" LastActivityDate="2015-07-16T19:24:12.570" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7696" PostTypeId="2" ParentId="7694" CreationDate="2015-07-16T20:08:37.967" Score="4" Body="&lt;p&gt;You specified that you need to be able to &lt;code&gt;pick a cuboid up [off] a table&lt;/code&gt;&lt;strong&gt;(1 dof)&lt;/strong&gt;, &lt;code&gt;rotate it around its vertical axis&lt;/code&gt; &lt;strong&gt;(1 dof)&lt;/strong&gt;, and &lt;code&gt;put it down on all possible positions&lt;/code&gt; - assuming this means, &lt;em&gt;&quot;put it down at any (x,y) coordinate&quot;&lt;/em&gt;, then you need two more degrees of freedom - one for $x$, one for $y$. Note the implementation may vary - you could use Cartesian (x,y) actuators or you could use Polar (r,$\theta$), but whatever the combination you still wind up with two degrees of freedom. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-07-16T20:08:37.967" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="7698" PostTypeId="1" AcceptedAnswerId="7701" CreationDate="2015-07-17T07:16:18.710" Score="1" ViewCount="822" Body="&lt;p&gt;I measure the voltage ESC drawing while increasing the dc motor speed. Multimeter shows that as long as the speed increases the voltage value decreases. Can anybody explain why this is happening? &lt;/p&gt;&#xA;" OwnerUserId="10090" LastEditorUserId="7066" LastEditDate="2015-07-19T16:58:24.283" LastActivityDate="2015-07-19T16:58:24.283" Title="Voltage rpm relation" Tags="&lt;brushless-motor&gt;&lt;electronics&gt;&lt;esc&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7699" PostTypeId="2" ParentId="7698" CreationDate="2015-07-17T07:28:11.970" Score="0" Body="&lt;p&gt;I think the answer &lt;a href=&quot;http://www.electricaltechnology.org/2013/01/according-to-ohms-law-current-increases_4.html&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt; should be insightful. But basically when the motor is running, you're working under the equation&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P=V*I&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This equation has to stay balanced, so assuming your (P)ower remains a fixed value, then if (V) changes, current (I) has to make and opposite change in order to keep the equation balanced. In this instance, current (I) increases as speed increases, thus you get a related decrease in (V)oltage in order to maintain the balance.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: My answer is flawed because as pointed out in the comments, the assumption of power being fixed is wrong and doesn't make any sense. &lt;/p&gt;&#xA;" OwnerUserId="4169" LastEditorUserId="4169" LastEditDate="2015-07-17T16:25:39.140" LastActivityDate="2015-07-17T16:25:39.140" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7700" PostTypeId="2" ParentId="7694" CreationDate="2015-07-17T07:58:46.743" Score="1" Body="&lt;p&gt;Good answers already, so I just thought I'd address this bit:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;But I don’t understand why. I thought that it should be 3. 2 prismatic joints: 1 to pick the cuboid up, and another one to move it anywhere on the table. 1 revolute joint to rotate the cuboid around its vertical axis. =&gt; 2 translatory and 1 rotatory. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not quite correct: though it seems from your question that only three would be required, in reality you need a fourth to rotate the &quot;gripper&quot; to pick up the item.  UNLESS you have some sort of magnetic pickup, or a specially shaped item like a cylinder - then three might work as a special case, but that would no longer be a general purpose manipulator.&lt;/p&gt;&#xA;" OwnerUserId="9578" LastActivityDate="2015-07-17T07:58:46.743" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7701" PostTypeId="2" ParentId="7698" CreationDate="2015-07-17T09:21:05.380" Score="3" Body="&lt;p&gt;You can't understand this because you don't know what you observe. The electromotive force (EMF) of your motor is proportional to its speed (the ratio is called Kv). So, when the speed of your motor rises, the EMF rises too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What does an ESC ? Basically, it hashes the input voltage to generate the expected output voltage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, what is this decreasing voltage value you observe ? It won't be the output voltage of the ESC, because it's rising, not falling, and, as it is hashed, you probably can't measure it with your multimeter (basic multimeters only measure continuous or sinusoidal signals).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I expect the decreasing voltage to be the input of your ESC. Why would it drop ? Because your driving a motor with a load that rises with speed (typically a propeller), and this requires current. The wires between your battery and your ESC are resistors. Let say you have 50mOhms of resistivity. If you uses 10A, the input voltage of your ESC is 0.5V less than your battery output. Moreover, your battery also have internal resistivity. If you drive more current, the output voltage of your battery drops too.&lt;/p&gt;&#xA;" OwnerUserId="7634" LastActivityDate="2015-07-17T09:21:05.380" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7703" PostTypeId="1" AcceptedAnswerId="7704" CreationDate="2015-07-17T17:29:39.947" Score="2" ViewCount="481" Body="&lt;p&gt;my robotic project is running at every 1ms and the processes are taking about 0.9ms. I am running PID so my max clock rate is 1kHz. About half of the processing time are taken by SPI peripherals, IMU and encoders. Is there any recommendation on how I can run faster PID sampling rate?&lt;/p&gt;&#xA;" OwnerUserId="9972" LastActivityDate="2015-07-17T18:47:14.030" Title="increase PID sampling rate on embedded system" Tags="&lt;pid&gt;&lt;embedded-systems&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7704" PostTypeId="2" ParentId="7703" CreationDate="2015-07-17T18:47:14.030" Score="6" Body="&lt;p&gt;Increasing the sample rate probably isn't going to buy you much if you can't do something useful. That is, if you don't update the control signal (e.g., motor current) at the same high sample rate, then I don't think you're going to gain much. Similarly, if your IMU or other sensors don't update at the higher frequency, polling them at a higher frequency isn't going to get you much either.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You need high frequency feedback, high frequency output, and the headroom to process at those high frequencies. If you could increase the PID sample rate, if you're still relying on the 1kHz process to provide the output then you haven't gained much. However, note that the input frequency doesn't matter &lt;em&gt;too&lt;/em&gt; much; at a bounding &lt;em&gt;very&lt;/em&gt; low frequency input the controller would interpret the reference like a step input, but you still get PID control/stability.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I would suggest is either going with a faster processor or (preferred) splitting PID off into its own processor. Use a &quot;master&quot; to interface with the user, generate a reference signal, then pass that reference off to the PID controller. Doing this frees up the PID controller to handle only the relevant feedback (sensors) and outputs (motors). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, say you are running a quadcopter. The master controller gets the motion control input from the pilot, but also gets periphery input from the pilot, for things such as maybe camera gimbal control, camera control, lighting/display control, audio, heartbeat messages, feedback vehicle parameters to the pilot, etc. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of all of these things, parse the motion refernce (pitch/roll/yaw/thrust etc.) and pass that off to the PID control chip. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now the PID control chip gets the motion reference at the 1kHz input, but the &lt;em&gt;reference&lt;/em&gt; doesn't need to update very quickly. The PID control chip can now focus only on polling the IMU/compass/other sensors, calculating reference-feedback errors, and modifying the outputs. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-07-17T18:47:14.030" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7705" PostTypeId="1" AcceptedAnswerId="7706" CreationDate="2015-07-18T00:32:52.687" Score="2" ViewCount="2573" Body="&lt;p&gt;For my particle filter, I decided to try using the low variance resampling algorithm as suggested in Probabilistic Robotics. The algorithm implements systematic resampling while still considering relative particle weights. I implemented the algorithm in Matlab, almost word-for-word from the text:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;function [state] = lowVarianceRS(prev_state, weight, state_size)&#xA;    state = zeros(1,state_size);    % Initialize empty final state&#xA;    r = rand;                       % Select random number between 0-1&#xA;    w = weight(1);                  % Initial weight&#xA;    i = 1;&#xA;    j = 1;&#xA;&#xA;    for m = 1:state_size&#xA;        U = r + (m - 1)/state_size; % Index of original sample + size^-1&#xA;        while U &amp;gt; w                 % I'm not sure what this loop is doing&#xA;            i = i + 1;&#xA;            w = w + weight(i);&#xA;        end&#xA;        state(j) = prev_state(i);   % Add selected sample to resampled array&#xA;        j = j + 1;&#xA;    end&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;As would be expected given the while loop structure, I am getting an error for accessing weight(i), where i exceeds the array dimensions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To solve this, I was considering circularly shifting my weight array (putting the first index used as the first value in weight, so that I never exceed matrix dimensions). However, I wasn't sure if this would negatively impact the rest of the algorithm, seeing as I'm having trouble understanding the purpose of the U calculation and while loop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could anyone help clarify the purpose of U and the while loop, and whether or not a circular shift is an acceptable fix?&lt;/p&gt;&#xA;" OwnerUserId="10166" LastActivityDate="2015-07-20T20:11:33.833" Title="Low variance resampling algorithm for particle filter" Tags="&lt;mobile-robot&gt;&lt;algorithm&gt;&lt;particle-filter&gt;&lt;probability&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7706" PostTypeId="2" ParentId="7705" CreationDate="2015-07-18T14:12:37.073" Score="1" Body="&lt;p&gt;I misread the text. r should be a random number between 0 and M^-1. Changing this should solve all your problems. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The re-sampling algorithm's purpose is (roughly) to remove particles that have a low probability of representing the system that you're tracking. This is done by stacking the all particles together. Each particle's size is equal to the probability that it represents the system. So the weight of all the particles is 1 or %100. Now M random spots on this range of particles are chosen and the particles that occupiesy those spots are kept. Particles that are not chosen are discarded.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The low variance re-sampling algorithm splits the particle range space into M sections and keeps the particle occupying the rand(0,M^-1) spot at each section. This is what U is, the random spot on the jth section of the probability space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The advantage of the low variance re-sampling algorithm is the ease of implementation and it's robustness. If we randomly choose a spot M times, there is a non zero chance we could get the same particle each time. This could cause huge problems for the filter.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;ignore: &#xA;It looks like your random weight r should have a standard deviation of M^-1. &lt;/p&gt;&#xA;" OwnerUserId="8842" LastEditorUserId="8842" LastEditDate="2015-07-20T20:11:33.833" LastActivityDate="2015-07-20T20:11:33.833" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7708" PostTypeId="1" CreationDate="2015-07-20T16:19:44.973" Score="2" ViewCount="114" Body="&lt;p&gt;I need to make this construction (door is closed by default, door is opened to the top). This is the scheme:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/BL5iw.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Red rectangle on the picture is the aperture, blue rectangle is the door (weight is about 0.5 kg), which moves top when door need to be opened. Green stripe on the picture is the rail for the door.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which electrical engine should I use?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Estimated time of door opening is about 10 seconds, I want to send signal to up the door, it should be drop down when power is lost or I should send a signal to drop it down.&lt;/p&gt;&#xA;" OwnerUserId="7467" LastEditorUserId="9720" LastEditDate="2015-07-21T21:04:02.713" LastActivityDate="2015-08-31T04:48:19.307" Title="How to make door opening to the top" Tags="&lt;design&gt;&lt;electronics&gt;&lt;actuator&gt;" AnswerCount="2" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="7710" PostTypeId="1" AcceptedAnswerId="7716" CreationDate="2015-07-20T18:07:01.117" Score="0" ViewCount="97" Body="&lt;p&gt;I'm looking for an algorithm for formationing multiple robots in 2D simulation. Can you suggest resources about this topic. Also I need suggestions and comments about these topics:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Can I recruit algorithm from optimization algorithms like particle or ant?&lt;/li&gt;&#xA;&lt;li&gt;Is there any way except &quot;go to goal&quot; for each robot&lt;/li&gt;&#xA;&lt;li&gt;Is patter formationing algorithms feasible?&lt;/li&gt;&#xA;&lt;li&gt;Suggestions about a fast way of formationing/ aligning&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Notes:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Im not using a robotics simulator or physics engine for this. &lt;/li&gt;&#xA;&lt;li&gt;Robots are represented as dots.&lt;/li&gt;&#xA;&lt;li&gt;multi robot system is homogeneous&lt;/li&gt;&#xA;&lt;li&gt;every robot can sense obstacles and other robots in a sense range circle around the robot.  &lt;/li&gt;&#xA;&lt;li&gt;number of obstacles and robots can vary from 2 to 100 &lt;/li&gt;&#xA;&lt;li&gt;multi robot system is not a central &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2015-07-20T21:02:55.810" LastActivityDate="2015-07-21T05:53:06.897" Title="Formationing Algorithm for Multiple Robots" Tags="&lt;mobile-robot&gt;&lt;multi-agent&gt;&lt;swarm&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7711" PostTypeId="2" ParentId="7634" CreationDate="2015-07-20T18:40:55.677" Score="0" Body="&lt;p&gt;Many of generics works fine but there are difficulties like FTDI driver, working frequency, regulator voltage differences, etc. I'm still using imitations with many different projects. I couldn't fry any of them. But do not connect over 5 volt.&lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorDisplayName="user9480" LastEditDate="2017-05-01T10:25:35.463" LastActivityDate="2017-05-01T10:25:35.463" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7712" PostTypeId="1" CreationDate="2015-07-20T19:04:37.763" Score="4" ViewCount="277" Body="&lt;p&gt;For a project I am building a Tele-Op Robot using the IRobot's Roomba as my drivetrain. In order for my robot to work, I need an extra castor. IRobot provides .stl and .stp files for me to use and I used them and printed the files. (The file I printed was from this link: &lt;a href=&quot;http://www.irobot.com/~/media/MainSite/PDFs/About/STEM/Create/Create_2_Bin_Modification.pdf&quot; rel=&quot;nofollow&quot;&gt;Create® 2 Bin Modification&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This file is a new part to the drivetrain to allow another caster.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And I downloaded the first link called &quot;&lt;a href=&quot;http://www.irobot.com/~/media/MainSite/Files/About/STEM/Create/c2binbottom.stl&quot; rel=&quot;nofollow&quot;&gt;Full bin bottom with caster mount&lt;/a&gt;&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The piece was great but it made the castor a different height then the wheels. I was wondering if anyone had this file but saved as something different so I can edit it in preferably Solidworks. I was on the phone with IRobot for over 2 hours today and they told me to post here. So please help!!!! :)&lt;/p&gt;&#xA;" OwnerUserId="10180" LastEditorUserId="9176" LastEditDate="2015-07-30T23:57:44.453" LastActivityDate="2015-07-30T23:57:44.453" Title="Prototyping with IRobot roomba" Tags="&lt;irobot-create&gt;&lt;roomba&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7713" PostTypeId="2" ParentId="7712" CreationDate="2015-07-20T20:06:05.113" Score="2" Body="&lt;p&gt;Are you having trouble importing the file? I'm not sure what the problem you're having is. You can edit the file in Solidworks; just import the STL, then edit the file.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-07-20T20:06:05.113" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7714" PostTypeId="2" ParentId="554" CreationDate="2015-07-20T20:38:25.160" Score="0" Body="&lt;p&gt;And how about a little experimenting?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would take the lightest battery i can find and then try adding weights.&#xA;For each weight I would measure the flight time, make a &quot;flight time / mAh&quot; vs &quot;takeoff weight&quot; plot and fit a curve through the data points. Then I'd go to hobbyking and for every battery pack there I'd calculate flight time using my new magical graph. Find maximum and you're done :-)&lt;/p&gt;&#xA;" OwnerUserId="482" LastActivityDate="2015-07-20T20:38:25.160" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7715" PostTypeId="2" ParentId="6696" CreationDate="2015-07-20T23:29:38.230" Score="1" Body="&lt;p&gt;I have used Arduino and the PWM signal worked fine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Have you tried supplying the motors from a DC power source, just to see how they react to a constant DC power signal, not a PWM?&lt;/p&gt;&#xA;" OwnerUserId="10183" LastActivityDate="2015-07-20T23:29:38.230" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7716" PostTypeId="2" ParentId="7710" CreationDate="2015-07-21T05:53:06.897" Score="2" Body="&lt;p&gt;You could have a look at the papers of the &lt;a href=&quot;http://www.eecs.harvard.edu/ssr/projects/progSA/kilobot.html%20Kilobot&quot; rel=&quot;nofollow&quot;&gt;kilobot project&lt;/a&gt;. They have your capabilities so it would be a good starting point. &lt;/p&gt;&#xA;" OwnerUserId="23196" LastActivityDate="2015-07-21T05:53:06.897" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7717" PostTypeId="2" ParentId="7712" CreationDate="2015-07-21T14:15:08.973" Score="3" Body="&lt;p&gt;The caster shaft can potentially not seat right causing canting of the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can you share pictures of your print? I have had good luck with printing the files posted on the iRobot thingiverse page. &lt;/p&gt;&#xA;" OwnerUserId="9420" LastEditorUserId="9720" LastEditDate="2015-07-21T21:06:14.970" LastActivityDate="2015-07-21T21:06:14.970" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7718" PostTypeId="1" CreationDate="2015-07-21T15:54:07.757" Score="2" ViewCount="125" Body="&lt;p&gt;I've been working lately on SLAM algorithms implementing extended kalman filtering to brush up on some localisation techniques and I have been thinking forward to the hardware side of things. Are there embedded chips such a microcontroller that are optimised for large linear algebra operations? What sort of embedded options are the best for processing these sorts of operations?&lt;/p&gt;&#xA;" OwnerUserId="10188" LastActivityDate="2015-07-21T18:09:31.693" Title="Optimal hardware for linear algebra operations" Tags="&lt;slam&gt;&lt;kalman-filter&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7719" PostTypeId="2" ParentId="7718" CreationDate="2015-07-21T18:09:31.693" Score="2" Body="&lt;p&gt;I wouldn't call it an optimal solution but I've been working with some odroid XUs and have been very happy with their behavior. I'm using the Eigen linear algebra library along with ros and opencv.&lt;/p&gt;&#xA;" OwnerUserId="8842" LastActivityDate="2015-07-21T18:09:31.693" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7722" PostTypeId="1" AcceptedAnswerId="7730" CreationDate="2015-07-22T05:25:39.873" Score="5" ViewCount="219" Body="&lt;p&gt;Reaction Control Systems (RCS) on these vehicles are implemented by using small rocket thrusters. For me it looks like these thrusters work in some kind of &quot;pulse&quot; mode. And I can't understand - do they use some optimal control to calculate in advance the required impulse to reach the new desired state of the system OR they use &quot;pulse&quot; mode just for precise magnitude variation of provided thrust (like average voltage in PWM(pulse-width modulation)) in a classic PID control loop?&lt;/p&gt;&#xA;" OwnerUserId="1923" LastActivityDate="2015-07-23T15:27:01.230" Title="What type of control law is used in &quot;Reaction Control System&quot; of Apollo Lunar Module or Space Shuttle?" Tags="&lt;control&gt;&lt;automatic&gt;&lt;rocket&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7723" PostTypeId="1" AcceptedAnswerId="7727" CreationDate="2015-07-22T07:11:51.783" Score="6" ViewCount="5002" Body="&lt;p&gt;I'm learning  to make a 3D simulation in MATLAB based on a model designed from SOLIDWORKS.&#xA;There is an example: &lt;a href=&quot;https://youtu.be/1nSafEJlySs&quot; rel=&quot;nofollow&quot;&gt;SIMULINK+SOLIDWORKS&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The way used here is: &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Create a 3D model in SOLIDWORKS&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Create a xml file applicable to import to MATLAB via SimMechanics Link&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Import the model to MATLAB/SIMULINK. A simulink system is created.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;After these steps, controlling the system will be implemented in &lt;strong&gt;SIMULINK&lt;/strong&gt;.&#xA;But I feel simulink is kind of strict to control. I want to be more flexible, apply any algorithm to the model. And using matlab *.m file to control is more efficient way. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my question is this: Is there any way to do 3D simulation (MATLAB+SOLIDWORKS) by using only *.m file to control, no &lt;strong&gt;SIMULINK&lt;/strong&gt; anymore? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;All model information will be contained in the *m.file. Maybe the step 1 and 2 are inherited, but step 3 is different.&lt;/p&gt;&#xA;" OwnerUserId="9205" LastEditorUserId="9176" LastEditDate="2015-07-30T23:57:18.327" LastActivityDate="2015-07-30T23:57:18.327" Title="MATLAB 3D Simulation with SOLIDWORKS model" Tags="&lt;matlab&gt;&lt;simulation&gt;" AnswerCount="1" CommentCount="10" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7724" PostTypeId="1" CreationDate="2015-07-22T09:50:05.917" Score="5" ViewCount="385" Body="&lt;p&gt;How do I find out around which axis the coordinate system has to rotate, if the rotation matrix is given?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$ {^{a}R_{b} } $ = $ \left(\begin{matrix} 0 &amp;amp; 1 &amp;amp; 0 \\ -1 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 1 \\\end{matrix}\right)$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$ {^{a}R_{c} } $ = $ \left(\begin{matrix} 0 &amp;amp; 0 &amp;amp; 1 \\ 1 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 1 &amp;amp; 0 \\\end{matrix}\right)$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For $ {^{a}R_{b} } $ I thought, that it has to be a rotation around the z-axis, because &#xA;$R(z,\theta) =  \left(\begin{matrix} cos(\theta) &amp;amp; -sin(\theta) &amp;amp; 0 \\ sin(\theta) &amp;amp; cos(\theta) &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 1 \\\end{matrix}\right)$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;the values at the positions $a_{13}, a_{23},a_{33},a_{32},a_{31}$ of $ {^{a}R_{b} } $ and $R(z,\theta)$ are identical.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I solved $cos(\theta) = 0$ =&gt;$\theta = 90° $ =&gt; 90° rotation around z-axis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But how do I solve it, if there is more than 1 rotation, like for $ {^{a}R_{c} } $?  &lt;/p&gt;&#xA;" OwnerUserId="10197" LastEditorUserId="9720" LastEditDate="2015-07-22T16:25:43.897" LastActivityDate="2019-02-23T22:37:07.897" Title="Determine what the rotation axis is given a rotation matrix" Tags="&lt;joint&gt;" AnswerCount="4" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7725" PostTypeId="2" ParentId="7724" CreationDate="2015-07-22T15:41:54.707" Score="0" Body="&lt;p&gt;For starters, the product of rotation matrices are not unique. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Any orientation can be achieved by composing three elemental rotations.&lt;a href=&quot;http://personal.maths.surrey.ac.uk/st/T.Bridges/SLOSH/3-2-1-Eulerangles.pdf&quot; rel=&quot;nofollow&quot;&gt;1&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;To recover a set of rotation angles you'll need to start with the full rotation matrix and then work backwards. Let's look at a 3-2-1 rotation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$ {R_{321} } $ = $ \left(\begin{matrix} &#xA;cos\theta cos\phi &amp;amp; cos\theta sin\psi &amp;amp; -sin\theta \\ &#xA;sin\phi sinθcosψ−cos\phi sinψ &amp;amp; sin\phi sinθsinψ+ cos\phi cosψ &amp;amp; sin\phi cosθ \\ &#xA;cos\phi sinθcosψ+ sin\phi sinψ &amp;amp; cos\phi sinθsinψ−sin\phi cosψ &amp;amp; cos\phi cosθ \\&#xA;\end{matrix}\right)$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;We can now solve for $\theta$. This can be used to solve for $\psi$ and $\phi$. Looking at your $^aR_c$ matrix, we can find the $\theta$ is $-\frac{\pi}{2}$, $\psi$ is $-\frac{\pi}{2}$, and $\phi$ is 0. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;__&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://personal.maths.surrey.ac.uk/st/T.Bridges/SLOSH/3-2-1-Eulerangles.pdf&quot; rel=&quot;nofollow&quot;&gt;More on recovering euler rotations&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="8842" LastActivityDate="2015-07-22T15:41:54.707" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7726" PostTypeId="2" ParentId="7724" CreationDate="2015-07-22T16:01:30.960" Score="2" Body="&lt;p&gt;From the &lt;a href=&quot;https://en.wikipedia.org/wiki/Rotation_formalisms_in_three_dimensions#Rotation_matrix_.E2.86.94_Euler_axis.2Fangle&quot; rel=&quot;nofollow&quot;&gt;Wikipedia article on conversion between the rotation matrix and Euler axis/angle&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given a rotation matrix:&#xA;$$&#xA;\&#xA;R &#xA;= \begin{bmatrix}    &#xA;r_{11} &amp;amp; r_{12} &amp;amp; r_{13}\\&#xA;r_{21} &amp;amp; r_{22} &amp;amp; r_{23}\\&#xA;r_{31} &amp;amp; r_{32} &amp;amp; r_{33}&#xA;\end{bmatrix}&#xA;\\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can get the rotation angle:&#xA;$$&#xA;\theta = \cos^{-1} \left[ 0.5(r_{11} +r_{22} + r_{33} - 1) \right] \\&#xA;n_x = \frac{r_{32} - r_{23}}{2 \sin(\theta)} \\&#xA;n_y = \frac{r_{13} - r_{31}}{2 \sin(\theta)} \\&#xA;n_z = \frac{r_{21} - r_{12}}{2 \sin(\theta)} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, given your first problem:&#xA;$$&#xA;R &#xA;= \begin{bmatrix}    &#xA;0 &amp;amp; 1 &amp;amp; 0\\&#xA;-1 &amp;amp; 0 &amp;amp; 0\\&#xA;0 &amp;amp; 0 &amp;amp; 1&#xA;\end{bmatrix}&#xA;\\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\theta = \cos^{-1} \left[ 0.5(0 +0 +1 - 1) \right] \\&#xA;\theta = 1.57 \mbox{rad} = 90^{\circ} \\&#xA;n_x = \frac{0 - 0}{2 \sin(90^{\circ})} \\&#xA;n_y = \frac{0 - 0}{2 \sin(90^{\circ})} \\&#xA;n_z = \frac{-1 - 1}{2 \sin(90^{\circ})} \\&#xA;n_x = 0 \\&#xA;n_y = 0 \\&#xA;n_z = -1 \\&#xA;$$&#xA;So you can see here that, for your first problem, you rotate 90 degrees about the -z axis, or equivalently, you rotate -90 degrees about the +z axis. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similarly, for your second problem:&#xA;$$&#xA;R &#xA;= \begin{bmatrix}    &#xA;0 &amp;amp; 0 &amp;amp; 1\\&#xA;1 &amp;amp; 0 &amp;amp; 0\\&#xA;0 &amp;amp; 1 &amp;amp; 0&#xA;\end{bmatrix}&#xA;\\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\theta = \cos^{-1} \left[ 0.5(0 +0 + 0 - 1) \right] \\&#xA;\theta = 2.09\mbox{rad} = 120^{\circ} \\&#xA;n_x = \frac{1 - 0}{2 \sin(120^{\circ})} \\&#xA;n_y = \frac{1 - 0}{2 \sin(120^{\circ})} \\&#xA;n_z = \frac{1 - 0}{2 \sin(120^{\circ})} \\&#xA;n_x = 0.577 \\&#xA;n_y = 0.577 \\&#xA;n_z = 0.577 \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here you have an axis of rotation that is x=y=z=0.577 (but could be scaled to, say, x=y=z=1, just for thinking about the nature of the rotation), and then you rotate +120 degrees about that axis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this helps; please comment if I've left something unclear. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-07-22T16:01:30.960" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7727" PostTypeId="2" ParentId="7723" CreationDate="2015-07-22T17:32:34.410" Score="3" Body="&lt;p&gt;I use CAD software to generate 3D models, convert those 3D models to an STL format, then load those STL files to Matlab with the following script:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;function [points,success] = LoadSTL(path)&#xA;% LoadSTL loads an ASCII STL file with units in [mm]. &#xA;% The output is a structure array where each element in the array is &#xA;% a vertex. &#xA;%&#xA;% [points , success] = LoadSTL(path)&#xA;%&#xA;% path = String containing the path and extension of the file to be loaded.&#xA;% points = Matrix of locations where each column is a vertex, rows are x/y/z/1:&#xA;%    points(1,:) = x&#xA;%    points(2,:) = y&#xA;%    points(3,:) = z&#xA;%    points(4,:) = 1&#xA;%           NOTE - every three columns is a new face/facet. &#xA;% success = Bit indicating if the file was successfully opened or not. &#xA;&#xA;success = 0;&#xA;fileID = fopen(path);&#xA;if fileID &amp;lt;0&#xA;    fprintf('File not found at path %s\n',path);&#xA;    return;&#xA;end&#xA;fprintf('Loading Path %s...\n',path);&#xA;fileData = fread(fileID,'*char');&#xA;eol = sprintf('\n');&#xA;stlFile = strsplit(fileData',eol);&#xA;fclose(fileID);&#xA;fprintf('Done.\n')&#xA;pause(0.25);&#xA;clc&#xA;assignin('base' , 'stlFile' , stlFile)&#xA;pointsTracker = 1;&#xA;for i=2:size(stlFile,2)&#xA;    if mod(pointsTracker,100)==0&#xA;        clc&#xA;        fprintf('Parsing file at %s...\n',path);&#xA;        fprintf('Currently logged %d points\n',pointsTracker);&#xA;    end&#xA;&#xA;    testLine = stlFile{i};&#xA;    rawStrip = strsplit(testLine , ' ' , 'CollapseDelimiters' , true);&#xA;    if numel(rawStrip) == 5&#xA;        points(1,pointsTracker) = str2double(rawStrip{1,3})/1000;&#xA;        points(2,pointsTracker) = str2double(rawStrip{1,4})/1000;&#xA;        points(3,pointsTracker) = str2double(rawStrip{1,5})/1000;&#xA;        points(4,pointsTracker) = 1;&#xA;        pointsTracker = pointsTracker + 1;&#xA;    end&#xA;end&#xA;disp('Done.')&#xA;pause(0.25);&#xA;clc;&#xA;&#xA;if mod(size(points,2),3) &amp;gt; 0&#xA;    disp('File format in an unexpected type.')&#xA;    disp('Check the file specified is an STL format file with ASCII formatting.')&#xA;    disp('(Error - number of vertices not a multiple of 3)')&#xA;    disp(numel(points.x))&#xA;    return;&#xA;end&#xA;&#xA;success = 1;&#xA;return;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Once this is done I save the resulting output (points) as a .mat file and load exclusively from that .mat instead of the STL file because the .mat file loads &lt;em&gt;significantly&lt;/em&gt; faster than parsing the STL file every time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you've loaded the file, you can quickly plot the STL file in Matlab with the following command:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;myPlotColor = [0.5 0.5 0.5];&#xA;nFaces = size(points,2)/3;&#xA;patch(...&#xA;    reshape(points(1,:),3,nFaces) , ...&#xA;    reshape(points(2,:),3,nFaces) , ...&#xA;    reshape(points(3,:),3,nFaces) , ...&#xA;    myPlotColor);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;At this point, standard Matlab plot commands work; e.g., &lt;code&gt;axis equal&lt;/code&gt;, &lt;code&gt;hold on&lt;/code&gt;, etc. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, given how to load and display STL files in Matlab plots from an m-file, you can go about doing whatever form of control you want. Transform the CAD file with any 4x4 transform matrix composed of a rotation matrix $R$ and translation vector $s$:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\mbox{transformedPoints} = \begin{bmatrix}&#xA; &amp;amp; R&amp;amp; &amp;amp; s \\&#xA;0 &amp;amp;0 &amp;amp;0&amp;amp; 1 \\&#xA;\end{bmatrix}&#xA;\mbox{points}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Plot the transformed points with the &lt;code&gt;patch&lt;/code&gt; command shown above. As long as you've generated your CAD model such that the origin of your 3D model corresponds with the origin of your mathematical model then any movement/rotation of the mathematical model about its origin can be correctly applied to the CAD model, which can then be displayed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd just like to reiterate that this file loads STL files that are in ASCII format with units in millimeters, and the resulting plot is with units in meters, but of course you can change that with the &lt;code&gt;/1000&lt;/code&gt; scaling during the loading of the file. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-07-22T17:32:34.410" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7728" PostTypeId="1" CreationDate="2015-07-22T18:49:41.460" Score="5" ViewCount="783" Body="&lt;p&gt;I am starting to develop robotics project which involves simulation (and maybe real world programs) of soft-body dynamics (for food processing) and clothes/garment handling (for textile industry or home service robots). It is known that soft-body dynamics and garment handling are two less explored areas of robotics and simulation, therefore I hope to make some development of (contribution to) projects that are involved. The following projects are involed:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Bullet physics engine - for dynamics&lt;/li&gt;&#xA;&lt;li&gt;Gazebo - simulation environment&lt;/li&gt;&#xA;&lt;li&gt;ROS - robot OS, I hope to use Universal Robot UR5 or UR10 arms and some grippers (not decided yet)&lt;/li&gt;&#xA;&lt;li&gt;Orocos - for control algorithms&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Initially I hope use &quot;ROS INDIGO IGLOO PREINSTALLED VIRTUAL MACHINE&quot; (from nootrix.com), but apparently I will have to make updates to the Bullet, Gazeboo, add new ROS stacks and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The question is - how to organize such project? E.g. If I am updating Bullet physics engine with the new soft-body dynamics algorithm then what executable (so) files should I produce and where to put them into virtual machine? The similar question can be asked if I need to update Gazebo. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There seems to be incredibly large number of files. Is it right to change only some of them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sorry about such questions, but the sofware stack seems to be more complex than the robotics itself.&lt;/p&gt;&#xA;" OwnerUserId="809" LastActivityDate="2015-12-23T10:47:40.220" Title="Where to make changes for simulation project Bullet/Gazebo/ROS/Orocos" Tags="&lt;ros&gt;&lt;software&gt;&lt;programming-languages&gt;&lt;dynamics&gt;&lt;gazebo&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7729" PostTypeId="1" CreationDate="2015-07-22T18:56:53.400" Score="4" ViewCount="1081" Body="&lt;p&gt;Vision is important part of robotics and frequently it is unavoidable component of control loop. E.g. many clothes/garment handling algorithms rely on visual cues in deciding how to proceed. The question is - does simulation environments (Gazebo or some others) allow one to design world with robot and garment and simulate not only garment dynamics but &lt;strong&gt;simulate also what robot sees, how robot perceives garment in each simulation step&lt;/strong&gt;? If it is not possible to simulate vision then how to simulate algorithms with vision as component of control loop?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe simulation of vision can be good research theme? Are here some trend or good articles about it? Some initial projects that could be expanded?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Actually - it can be stated as more general question - &lt;strong&gt;is it possible to simulate sensors in Gazebo?&lt;/strong&gt; E.g. food handling (soft-body handling) can involve tactile sensors. In principle Gazebo can calculate deformation and forces of soft-body and format these data as the simulated values of sensor readings. Maybe similar mechanism can be used for simulation of vision as well?&lt;/p&gt;&#xA;" OwnerUserId="809" LastEditorUserId="809" LastEditDate="2015-07-22T19:02:21.940" LastActivityDate="2015-07-27T17:18:12.677" Title="Is it possible to simulate vision (perception) in Gazebo (or other simulators)" Tags="&lt;computer-vision&gt;&lt;simulator&gt;&lt;research&gt;&lt;simulation&gt;&lt;gazebo&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7730" PostTypeId="2" ParentId="7722" CreationDate="2015-07-22T21:39:55.047" Score="5" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;do they use some optimal control to calculate in advance the required impulse to reach the new desired state of the system&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This is a property every stable controlled system has/should have. Figuring out how to get to some other state is the core of control theory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Doing&lt;/em&gt; something in advance is not possible, but &lt;em&gt;knowing&lt;/em&gt; it certainly is.&#xA;Given that the system is controllable an stable, it should be able to follow a given trajectory. It is a lot easier to calculate a trajectory beforehand instead of generating desired states &quot;on the fly&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The great joy of control theory is that it is &lt;s&gt;only boring mathematical formulas and numbers, entirely unaware of what it's actually going on in the &quot;real world&quot;&lt;/s&gt; able to describe very different systems in a common abstract way. So let's substitute the spaceship with a car.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You are standing at the traffic lights. You think about what to do when they turn green. You create a mental image of how the acceleration (and thus velocity and thus position) of the car should change over time.&#xA;In a car, that resembles to how hard you should hit the pedal to the metal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a multiaxes setup in space, there are many angular accelerations to consider, but it's still the same: how should these values change over time?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are infinite solutions, but some are favourable. when you are docking in space for a example, you don't want to rotate much at the end of the motion. You want to have pretty much only translational movement between the two docking parts towards each other at the end of the motion. That's why the most part of possibly necessary rotation should happen at the beginning of the motion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And don't forget that you are in space. finding a trajectory that uses minimal fuel is desirable.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;they use &quot;pulse&quot; mode just for precise magnitude variation of provided thrust (like average voltage in PWM(pulse-width modulation)) in a classic PID control loop?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This is not an OR part, but AND. The &quot;pulse&quot; mode is all they have. You can open or close the valve. But the &quot;pulse&quot; is a controlled system in on itself. They measure all kinds of properties of the tanks like temperature and pressure to estimate what one &quot;pulse&quot; will do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additionally, the computers know the payload and can calculate the model that's being controlled. In a sense, the system is self aware and can adjust its control accordingly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://science.ksc.nasa.gov/shuttle/technology/sts-newsref/sts-rcs.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Check this document on the RCS&lt;/a&gt; which I got a bit of information from.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;An attempt to explain the &quot;it's only a pulse&quot; idea:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You are probably familiar with one very common type of spaceship: microwave ovens. (admittedly, they are bound to some big rock by gravity, but still, they are in space (like everything else), so they are clearly spaceships)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are different kinds of microwave ovens available. They all have the pulsed operation in common.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The simple ones look like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/h7oXq.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It only has two dials: time and power. The power dial adjusts the pulse width and the time dial the overall duration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With this microwave, a lot of the control algorithm is on you. You cannot put different things into the oven, use the same settings and expect proper results. The frozen chicken and the rasins in the image will look different after 5 minutes at full power. You have to dial in the settings that work for the food you put into the oven.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are &quot;smarter&quot; microwaves look like this one, with more dials and buttons:&#xA;&lt;img src=&quot;https://i.stack.imgur.com/ELexV.png&quot; alt=&quot;enter image description here&quot;&gt;&#xA;You can tell it what you put inside and what you want to do with it. The oven will then figure out what to do. It might even vary the settings over time, to get better heat penetration, even cooking, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It could be as smart as to first run some defrosting program, then cooking and finally turn on the grill. As it knows that you placed a frozen chicken of a certain weight into it, it will be able to figure out how to do all that, without overheating during defrosting, drying out while cooking or burning while grilling. Well, at least in theory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can see, even something as primitive as a simple on/off pulse can do rather sophisticated things if wrapped into a good control loop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would it be even better if they could continuously change values of the valve?&#xA;Probably yes, but not by that much as you know from the averaged PWM signal. Additionally an adjustable valve is a more complex part than a simple on/off solenoid valve. Simple stuff fails less often. Stuff failing in space is a &lt;strong&gt;bad&lt;/strong&gt; thing.&lt;/p&gt;&#xA;" OwnerUserId="9860" LastEditorUserId="9860" LastEditDate="2015-07-23T15:27:01.230" LastActivityDate="2015-07-23T15:27:01.230" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7731" PostTypeId="1" AcceptedAnswerId="7732" CreationDate="2015-07-23T01:15:46.730" Score="-1" ViewCount="1298" Body="&lt;p&gt;I'd like to study the capabilities of industrial robot arms. For example, to answer the question how does price vary with precision, speed, reach and strength?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a database of industrial robot arms including information like the price, precision, speed, reach and strength of each model?&lt;/p&gt;&#xA;" OwnerUserId="10203" LastEditorUserId="10203" LastEditDate="2015-07-23T21:45:41.553" LastActivityDate="2015-07-31T16:18:47.297" Title="Comparing industrial robot arms" Tags="&lt;robotic-arm&gt;&lt;industrial-robot&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2015-07-24T16:55:42.573" ContentLicense="CC BY-SA 3.0" />
  <row Id="7732" PostTypeId="2" ParentId="7731" CreationDate="2015-07-23T11:12:31.547" Score="5" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;For example, how does price vary with precision, speed, reach and&#xA;  strength?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The price vary a lot, from a couple of hundreds of bucks to hundreds of thousands of dollars ( &lt;a href=&quot;http://www.gizmag.com/pr2-robot-commercially-available/16306/&quot; rel=&quot;nofollow&quot;&gt;Willow Garage's the one-armrobot PR2 costs \$285,000  and The two-armed  costs  \$400,000 &lt;/a&gt;), it goes up- as you can guess- whenever the robot arm is precise, fast, long, strong, collaborative (i.e. designed to interact with its environment), or have more DoF's (Degrees of Freedom). Also, take into account the flanges, tools, the palette of software they come with, certifications, etc. It really depends.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Is there a database of industrial robot arms including information&#xA;  like the price, precision, speed, reach and strength of each model?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I don't know of such a database, but you can find all these information (except prices, these companies are pretty secretive, they usually reveal it to potential customers. I work on KUKA's robots in my company, I didn't know about their price until our PR told me about the deal) on the Robot's manuals available on the companies' websites.&#xA;If you want to narrow down your choices, check what's available on the applications you want your robot to perform (if the robot will do repetitive work inside a confined space, there's no need to buy an expensive collaborative robot). I think, the big guys in the industry like Kuka, ABB, or Fanuc have a complete range of robots for different applications and at different sizes.&#xA;Check this link out:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://blog.robotiq.com/bid/63528/What-are-the-different-types-of-industrial-robots&quot; rel=&quot;nofollow&quot;&gt;http://blog.robotiq.com/bid/63528/What-are-the-different-types-of-industrial-robots&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10145" LastEditorUserId="10145" LastEditDate="2015-07-31T16:18:47.297" LastActivityDate="2015-07-31T16:18:47.297" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="7735" PostTypeId="1" AcceptedAnswerId="7736" CreationDate="2015-07-24T21:53:10.573" Score="0" ViewCount="81" Body="&lt;p&gt;Is there any way of estimation the battery life from pwm outputs which goes to motors in &lt;strong&gt;microcontroller level&lt;/strong&gt;. I'm planning to estimate path range with this. &lt;em&gt;Microcontroller, sensor and other electronic device should be neglected.&lt;/em&gt; &lt;/p&gt;&#xA;" OwnerUserId="9504" LastActivityDate="2015-07-24T23:29:47.470" Title="Estimation of Battery Life Time From PWM Signals in a Quadrotor" Tags="&lt;quadcopter&gt;&lt;battery&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7736" PostTypeId="2" ParentId="7735" CreationDate="2015-07-24T23:29:47.470" Score="2" Body="&lt;p&gt;Battery life is generally measured in amp hours. From a PWM perspective, you are pulsing current at a constant voltage, so you could estimate current output to be (duty cycle)*(rated current) where rated current is the nominal current draw at your operating voltage. Remember too that P=IV, so you could get a rated current by dividing rated power by operating voltage. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So now that you have an estimate for current draw, you can do a simplistic state of charge estimate called &quot;&lt;a href=&quot;https://en.wikipedia.org/wiki/State_of_charge&quot; rel=&quot;nofollow&quot;&gt;Coulomb counting&lt;/a&gt;&quot;, which is just current integration. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This means that you take your current and multiply it by whatever your sample time interval is, then add it to the previous measurement. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;spentCapacity = spentCapacity + (dutyCycle*maxCurrent)*dT&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In this manner you accumulate how much current you have &quot;spent&quot; and can compare that to how much you started with. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is not super accurate by any means, but if you're interested in a basic setup that will get you in the right ballpark this is it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you go this route, better current measurements are an easy way to improve accuracy, but Texas Instruments makes some &quot;battery fuel gage&quot; chips that are pretty slick too.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-07-24T23:29:47.470" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7737" PostTypeId="1" CreationDate="2015-07-25T01:04:53.927" Score="1" ViewCount="76" Body="&lt;p&gt;I am building a laser gun for pentathlon targets (also doing one).&#xA;I would like to know how build a part of the gun and if I can count on a steady laser if it is attached to a motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The question is about the laser. I want it maybe attached to a small-(servo)motor to try to implement some cheat just for fun. Assuming the motor has a good torque, can I assume that the laser will not move (not the sightliest bit) when the motor is turned off? (I don't have any to test)&#xA;This is for precision shooting, so small vibrations and a moving pointer would be really prejudicial.&#xA;In case it does, what can I do to minimize the problem? Is it all about ordering the motor with the highest torque?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also have a second question which is slightly off-topic, yet related, and robotics people usually have solutions for such problems.&#xA;I also need to build the sights. Here's a gun:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/7iKYW.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7iKYW.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can tell, its sights are a fixed plastic point in the front, and an adjustable large back. There are two bolts, one on each side. One makes the sight higher or lower, and the other makes it point more to the right or left.&#xA;How can such part be built with simple tools?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanls&lt;/p&gt;&#xA;" OwnerUserId="10220" LastEditorUserId="9570" LastEditDate="2015-07-26T15:19:14.687" LastActivityDate="2015-07-26T15:19:14.687" Title="Building parts, and keeping laser alignment steady" Tags="&lt;motor&gt;&lt;stability&gt;&lt;laser&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="7739" PostTypeId="1" CreationDate="2015-07-25T07:32:31.990" Score="4" ViewCount="2367" Body="&lt;p&gt;I'm working on an robot that would be able to navigate through a maze, avoid obstacles and identify some of the objects in it. I have a monochromatic bitmap of the maze, that is supposed to be used in the robot navigation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Up till now I have processed the bitmap image, and converted it into an adjacency list. I will now use the dijkstra's algorithm to plan the path.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However the problem is that I have to extract the entrance point/node and exit node from the bmp image itself for dijkstra's algorithm to plan the path.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The robots starting position will be slightly different (inch or two before the entrance point) from the entrance point of maze, and I am supposed to move to the entrance point using any &quot;arbitrary method&quot; and then apply dijkstra algorithm to plan path from maze's entrance to exit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the way I have to also stop at the &quot;X's&quot; marked in the bmp file I have attached below. These X's are basically boxes in which I have to pot balls. I will plan the path from entrance point to exit point , and not from the entrance to 1st box, then to second, and then to the exit point; because I think the boxes will always be placed at the shortest path.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since the starting position is different from the entrance point, how will I match my robot's physical location with the coordinates in the program and move it accordingly. Even if the entrance position would have been same as starting position there may have been an error. How should I deal with it? Should I navigate only on the bases of the coordinates provided by dijkstra or use ultrasonics as well to prevent collisions? And if we yes, can you give me an idea how should I use the both (ultrasonics, and coordinates)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/DcBwl.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/DcBwl.png&quot; alt=&quot;Sample Maze BMP image&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9429" LastActivityDate="2015-07-25T12:14:01.647" Title="Navigating through a Maze using path-planning (Dijkstra)" Tags="&lt;arduino&gt;&lt;mobile-robot&gt;&lt;localization&gt;&lt;motion-planning&gt;&lt;mapping&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7740" PostTypeId="2" ParentId="7739" CreationDate="2015-07-25T08:17:24.827" Score="1" Body="&lt;p&gt;You will probably want to use a combination of encoders to track the distance that you robot travels as well as ultrasonic sensors to detect the walls of your maze and correct for any minor inaccuracies in your robot's driving.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This sounds somewhat similar to the collegiate Micromouse competition that IEEE and other organizations hold in which small wheeled robots compete to first solve a maze and then run through it in the shortest time possible. If it so happens that the boxes aren't placed in the shortest path, you can find the shortest path between all cells (if I can remember correctly) using the floodfill algorithm (Bellman-Ford) described in the second link.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Links:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Wikipedia article: &lt;a href=&quot;https://en.wikipedia.org/wiki/Micromouse&quot; rel=&quot;nofollow&quot;&gt;https://en.wikipedia.org/wiki/Micromouse&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Algorithms: &lt;a href=&quot;http://www.robotix.in/rbtx09/tutorials/m4d4&quot; rel=&quot;nofollow&quot;&gt;http://www.robotix.in/rbtx09/tutorials/m4d4&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7537" LastActivityDate="2015-07-25T08:17:24.827" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7741" PostTypeId="1" AcceptedAnswerId="7742" CreationDate="2015-07-25T10:25:53.017" Score="-1" ViewCount="85" Body="&lt;p&gt;We can easily compute the rigid robot kinematics and dynamics. There is many resources, simulators and modelling tools about it. But i couldnt find any of these for elastic robots. Can you suggest resources and modelling tools?&lt;/p&gt;&#xA;" OwnerUserId="10223" LastActivityDate="2015-07-28T14:54:52.163" Title="Mathematical Moddeling of Elastic Robots" Tags="&lt;kinematics&gt;&lt;simulator&gt;&lt;dynamics&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="1" ClosedDate="2015-07-30T11:21:20.820" ContentLicense="CC BY-SA 3.0" />
  <row Id="7742" PostTypeId="2" ParentId="7741" CreationDate="2015-07-25T11:21:43.953" Score="0" Body="&lt;p&gt;You can use Finite Element Anlysis (FEA) tools like &lt;a href=&quot;http://www.3ds.com/products-services/simulia/products/abaqus/&quot; rel=&quot;nofollow&quot;&gt;Abaqus&lt;/a&gt;. Also please look &lt;a href=&quot;http://www.ece.msstate.edu/research/robotics/wiki_media/publications/2010/IJRR/Design_and_Kinematic_Modeling_of_Constant_Curvature_Continuum_Robots_-_A_Review.pdf&quot; rel=&quot;nofollow&quot;&gt;this paper&lt;/a&gt;. &lt;/p&gt;&#xA;" OwnerUserId="9504" LastActivityDate="2015-07-25T11:21:43.953" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7743" PostTypeId="2" ParentId="7739" CreationDate="2015-07-25T12:14:01.647" Score="1" Body="&lt;p&gt;The original question, how to plan a path from A to B, is well studied, and the Dykstra algorithm is a good start. However, as you are realizing, Dykstra only establishes a series of waypoints and you are expected to maneuver to those waypoints. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you can be expected to be dropped within a given tolerance of the start coordinates, then you can check physical dimensions to see if that tolerance matters. For example, if each box on your map is 25cm by 25cm in real life and your vehicle is completely contained within a 10cm circle,  you can accept a location mismatch of up to 7.5cm, assuming you do not travel diagonally and you have perfect odometry to &lt;a href=&quot;https://en.wikipedia.org/wiki/Dead_reckoning&quot; rel=&quot;nofollow&quot;&gt;dead reckon&lt;/a&gt; the rest of the map. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, if you don't know the tolerance on position, or if you do but it's so large that it impacts your ability to navigate, but your &lt;strong&gt;heading&lt;/strong&gt; is known,  then you again have an easy fix.  Measure the distance from your actual start location to the nearest wall, then move back/forward until you are in the correct position, then turn 90 degrees and do it again. Return to the original heading, knowing now that you are in the correct starting position, then proceed to maneuver. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The last case is the worst case - your starting position variation is unknown or too large OR your starting heading is unknown. If this is the case you need to determine your location and heading, and this is typically done via an algorithm called &lt;a href=&quot;https://en.wikipedia.org/wiki/Simultaneous_localization_and_mapping&quot; rel=&quot;nofollow&quot;&gt;SLAM - simultaneous localization and mapping&lt;/a&gt;. My only comments here are to point you in the right direction and wish you luck as I have no practical experience with SLAM algorithms. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, to summarize, either:&#xA;1. The starting tolerance is known AND small enough to not matter AND starting heading is known - do nothing =OR=&#xA;2. The starting tolerance is unknown OR too large AND your heading is known - localize with 1D rangefinders =OR=&#xA;3. The starting tolerance is unknown, too large, or your heading is unknown - use a SLAM technique. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-07-25T12:14:01.647" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7744" PostTypeId="2" ParentId="7741" CreationDate="2015-07-25T19:22:25.100" Score="0" Body="&lt;p&gt;You should use multi body simulation &lt;a href=&quot;https://en.m.wikipedia.org/wiki/Multibody_system&quot; rel=&quot;nofollow&quot;&gt;https://en.m.wikipedia.org/wiki/Multibody_system&lt;/a&gt;. There is also modelling software for this. Finite elements are more for structural verification.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For modelling, you could use python's pydy module: &lt;a href=&quot;https://www.pydy.org/&quot; rel=&quot;nofollow&quot;&gt;https://www.pydy.org/&lt;/a&gt;. There are also other open source software tools: &lt;a href=&quot;http://www.cs.rpi.edu/~trink/sim_packages.html&quot; rel=&quot;nofollow&quot;&gt;http://www.cs.rpi.edu/~trink/sim_packages.html&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="9052" LastEditorUserId="9052" LastEditDate="2015-07-27T19:25:24.770" LastActivityDate="2015-07-27T19:25:24.770" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7746" PostTypeId="2" ParentId="7737" CreationDate="2015-07-26T04:52:05.207" Score="1" Body="&lt;p&gt;The two questions are quite unrelated so it would be best to ask two questions. Otherwise responds will probably fall short on one of them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;About Q1: I understand that you are looking at using a servo (RC controlled?) to shift the laser boresight so the laser will shoot a bit up-down or left-right when commanded and, when not commanded, it will shoot normal, all without giving a hint that the laser is moving.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A servo would probably work in this sense, maybe a DC motor + gears could also work; you're not trying to paint art with the laser. Fitting the servo, the RC receiver, and the battery into the gun would be a challenge. And also, because the gun gets heavier, your friend could tell the joke if he touches a second one or if the extra weight is easily recognized.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;About Q2: The question needs more data (material, dimensions, 2d drawings, schematics). Manufacturing is not my expertise.&lt;/p&gt;&#xA;" OwnerUserId="9570" LastEditorUserId="9720" LastEditDate="2015-07-26T11:40:49.030" LastActivityDate="2015-07-26T11:40:49.030" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7749" PostTypeId="2" ParentId="7729" CreationDate="2015-07-27T17:18:12.677" Score="1" Body="&lt;p&gt;While Gazebo - and most other simulators - will allow you to simulate sensors, you have to realize that this the &quot;weak&quot; part of realtime simulators. Making an accurate simulated camera is really difficult. The result would therefore be great to test your integration and basic control algorithm behaviour (for instance that you move right when you should), but very limited to test the vision-based algorithm itself, as well as test fine print of the control laws.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The strategy I follow in these cases is to (1) create a &quot;simulated component simulation&quot; to test the control system in the simulator and (2) use log replay to test the vision component:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Create a &quot;vision component simulator&quot;. This component would output what the vision part of your system should output, but within the simulated environment and WITHOUT processing any image. Add noise / outliers as necessary in the simulated output.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Use a framework that allows you to log data and replay it offline (as Rock or ROS do). You would then have test cases for your vision component that would test its behaviour in way that the simulator could never dream to achieve.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="56" LastActivityDate="2015-07-27T17:18:12.677" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7750" PostTypeId="5" CreationDate="2015-07-27T18:35:39.787" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2015-07-27T18:35:39.787" LastActivityDate="2015-07-27T18:35:39.787" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7751" PostTypeId="4" CreationDate="2015-07-27T18:35:39.787" Score="0" Body="the extended Kalman filter, a filter for nonlinear state estimation." OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2015-07-29T16:27:13.067" LastActivityDate="2015-07-29T16:27:13.067" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7752" PostTypeId="5" CreationDate="2015-07-27T18:36:39.027" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2015-07-27T18:36:39.027" LastActivityDate="2015-07-27T18:36:39.027" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7753" PostTypeId="4" CreationDate="2015-07-27T18:36:39.027" Score="0" Body="electronic speed control/controller, used for DC motor speed control, frequently for RC applications. " OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2015-07-29T16:27:06.433" LastActivityDate="2015-07-29T16:27:06.433" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7755" PostTypeId="2" ParentId="7708" CreationDate="2015-07-27T19:56:48.060" Score="1" Body="&lt;p&gt;Could be done in a number of ways. Your ultimate aim is the linear motion of the door. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could use an elevator style counter-weight mechanism where a cable is strung over a couple of pulleys and a motor rotates one of these pulleys. This is pretty power efficient, doesn't need to take up a lot of physical space and can be done very cheaply.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively you could attach a toothed rack to the side of the door and use a rack and pinion setup but this can be a bit costly since gears are expensive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Either way, the core of your design will most likely be a rotary motor - most likely a servo motor or a stepper motor. Control one of these with an Arduino and you're set. Arduino have online &lt;a href=&quot;https://www.arduino.cc/en/Tutorial/MotorKnob&quot; rel=&quot;nofollow&quot;&gt;documentation&lt;/a&gt; to get you up and running and you can buy stuff from &lt;a href=&quot;https://www.pololu.com/&quot; rel=&quot;nofollow&quot;&gt;Pololu&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="3969" LastActivityDate="2015-07-27T19:56:48.060" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7757" PostTypeId="1" CreationDate="2015-07-28T01:28:12.970" Score="-2" ViewCount="853" Body="&lt;p&gt;&lt;br&gt;&#xA;I am still in high school and am a part of the robotics club that competes in the FTC (First Tech Challenge). I am just about finishing my first Calculus class (Calc 1), and would be ecstatic to be able to apply this someway in a real world example such as robotics. [Besides PID. It seems like only approximations anyways] &lt;br&gt;&lt;br&gt;&#xA;So far, I've only been working with &quot;fabricated&quot; math problems. Would deriving an equation from real life situations be too complicated?&#xA;&lt;br&gt;&#xA;Thank you!&lt;/p&gt;&#xA;" OwnerUserId="10238" LastActivityDate="2015-07-28T11:22:52.843" Title="Calculus in robotics" Tags="&lt;control&gt;&lt;software&gt;" AnswerCount="1" CommentCount="0" ClosedDate="2015-07-30T11:18:11.937" ContentLicense="CC BY-SA 3.0" />
  <row Id="7759" PostTypeId="2" ParentId="7757" CreationDate="2015-07-28T11:22:52.843" Score="1" Body="&lt;p&gt;It all depends on how good you want your system to be and how much effort you're willing to put in. An over-designed robot with good performance can generally be done evaluating the robot on a per-joint basis and usually applying PID control at each joint. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A highly optimized robot with stellar performance will be designed as a system. Here you have to look at:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;kinematics - if this joint turns 20 degrees, how far does that thing move?, &lt;/p&gt;&#xA;&#xA;&lt;p&gt;physics - what is the moment of inertia and equivalent point mass for that thing?,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;dynamics - knowing moment of inertia and how far that thing is moving, what's its relationship between power and acceleration?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;datsheets - is this joint's actuator capable of delivering enough physical power for my desired accelerations? What control signal to this joint achieves a given joint acceleration? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;control theory - knowing now how this joint's rotation affects that thing and what control signal gives me a desired joint acceleration, what should my desired acceleration be to get that thing to do what I want? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that control theory may involve another branch called inverse kinematics, and while basic control theory may involve &quot;just&quot; PID, if you have anything more complicated than a single input single output (SISO) system you will probably wind up doing some more complex control like state-space, which is also capable of handling inter-actuator effects. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Physics and control theory are where you will use most of your calculus, but it is useful to know it for everything else as well so you can see why and when one formula is applicable when another is not. This is usually due to simplifying assumptions used when solving the base differential equation. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-07-28T11:22:52.843" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7760" PostTypeId="1" AcceptedAnswerId="7770" CreationDate="2015-07-28T12:57:17.507" Score="5" ViewCount="6943" Body="&lt;p&gt;Until now I have been programming the robot using Java on KUKA's IDE &quot;KUKA Sunrise.Workbench&quot;, what I want to do is control the robot arm via my C++.Net application (I would use a camera or Kinect to get commands). &#xA;I'm reading the documents provided by Kuka, but as I'm a bit in hurry, I want to understand how a C++ client application (running on my laptop) can send/receive information to/from the robot's controller &quot;KUKA Sunrise Cabinet&quot; (running the server application) via FRI. I still have issues grasping the whole mechanism.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A simple application (Server/Client) source code with explanation (or a schematic) would be more than helpful .&lt;/p&gt;&#xA;" OwnerUserId="10145" LastEditorUserId="10145" LastEditDate="2015-07-28T14:46:58.580" LastActivityDate="2017-06-05T08:27:06.353" Title="Create a simple C++ client Application to control KUKA's Robot-arm LBR iiwa via FRI" Tags="&lt;robotic-arm&gt;&lt;c++&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7761" PostTypeId="2" ParentId="7741" CreationDate="2015-07-28T14:54:52.163" Score="0" Body="&lt;p&gt;I think the vast majority of compliant or &quot;elastic&quot; robots you will find have rigid links, but compliant joints.  I believe robots with flexible links is still a topic of active research.  So your best bet is to look through academic papers.  It is not a simple solution.  I found some old papers to get you started:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.14.1578&quot; rel=&quot;nofollow&quot;&gt;Control Of Flexible Robot Arm&lt;/a&gt; by J.D. Lee, L. S. Hayna, Ben Li Wang, and KwangHornp Tsai.&lt;/li&gt;&#xA;&lt;li&gt;Havlik, S., &quot;Structural compliance of flexible robot arms: analysis, synthesis and control aspects,&quot; Advanced Robotics, 1991. 'Robots in Unstructured Environments', 91 ICAR., Fifth International Conference on , vol., no., pp.1622,1625 vol.2, 19-22 June 1991&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-07-28T14:54:52.163" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7762" PostTypeId="2" ParentId="2687" CreationDate="2015-07-28T15:41:01.850" Score="0" Body="&lt;p&gt;Here is the equation I was able to come up with:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;THRUST (kg) =  ((2.83 x 10-12) * (RPM^2) * (DIAMETER^4) * (((AIR DENSITY) * 23.936) / 29.92) * CF) / 2.2&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where&#xA;*RPM is motor kv multiplied by battery voltage&#xA;*DIAMETER is total length of propellers&#xA;*AIR DENSITY has to be looked up or calculated separately&#xA;*CF changes based on prop type but should just be &quot;1&quot; for your calculations&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this helps&lt;/p&gt;&#xA;" OwnerUserId="10242" LastActivityDate="2015-07-28T15:41:01.850" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7763" PostTypeId="1" AcceptedAnswerId="7943" CreationDate="2015-07-28T16:57:05.820" Score="9" ViewCount="3103" Body="&lt;p&gt;I am specifically interested in DH parameters versus other representations in terms of kinematic calibration.  The best (clearest) source of information I could find on kinematic calibration is in the book &quot;&lt;a href=&quot;https://www.google.com/shopping/product/18328483085519729280&quot; rel=&quot;noreferrer&quot;&gt;Robotics: Modelling, Planning and Control&lt;/a&gt;&quot; by Bruno Siciliano, Lorenzo Sciavicco, Luigi Villani, Giuseppe Oriolo, chapter 2.11.  Which requires a description of the arm in DH parameters, multiplying out the kinematics equation, partial differentiation w.r.t. each DH parameter, then a least-squares fit (with the left pseudo-inverse), then iterate.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there some fundamental reason why DH parameters are used instead of a different representation (like xyz + euler angles).  I understand that there are fewer parameters (4 versus 6 or more), but for a calibration procedure like this I will be taking much more data than unknowns anyway.  All the robotics textbooks i have read just present DH parameters and say &quot;this is what you should use&quot;, but don't really go into &lt;em&gt;why&lt;/em&gt;.  Presumably this argument can be found in the original paper by Denavit, but I can't track it down.&lt;/p&gt;&#xA;" OwnerUserId="110" LastEditorUserId="110" LastEditDate="2015-08-10T13:51:09.790" LastActivityDate="2018-09-02T21:39:29.860" Title="Why do we generally prefer DH parameters over other kinematic representations of robot arms?" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;calibration&gt;&lt;dh-parameters&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="7764" PostTypeId="1" CreationDate="2015-07-28T18:55:23.597" Score="1" ViewCount="327" Body="&lt;p&gt;I have a Blade 180QX quadrotor / quadcopter and I had to move a red wire shoved under the circuit board when I fixed a broken power wire. Now the red wire shown out straight from the circuit board is not in the right configuration - or at least as it was. If I understood what it was for I might know how to place it. Is this a horizon sensor (temperature)?&#xA;Ever since I had to move this wire, the quadrotor goes unstable when flying. The only appreciable change is the wire POSITION.&#xA;The red wire was not attached anywhere else on the board. It was shoved under the circuit board inside the battery holder.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/81yCR.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/81yCR.jpg&quot; alt=&quot;Updated Blade 180QX image with red wire highlighted&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="6804" LastEditorUserId="6804" LastEditDate="2015-07-29T20:34:58.787" LastActivityDate="2016-03-01T13:00:59.720" Title="Blade 180QX :What does this red wire do?" Tags="&lt;quadcopter&gt;" AnswerCount="4" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="7765" PostTypeId="1" AcceptedAnswerId="7767" CreationDate="2015-07-28T21:59:14.000" Score="0" ViewCount="167" Body="&lt;p&gt;&lt;strong&gt;Background:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;6 propeller drone w 20C 3s 6400 mAh 11.1 liPO battery&lt;/li&gt;&#xA;&lt;li&gt;4 propeller drone w 25C 2s 5000 mAh 7.40 liPO battery&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Behavior:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Drone 1 flies with ease&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Drone 2 struggles hover 2-3 inches above ground&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Question:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The microcontroller, all props, ESCs, and motors are the same. I'm thinking the reason the drones are flying so differently is because of the difference in batteries. IF the batteries are the reason, what would be the property that is most responsible for the difference in flight?&lt;/p&gt;&#xA;" OwnerUserId="9941" LastActivityDate="2015-07-29T08:27:37.813" Title="Drone Battery Question" Tags="&lt;battery&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7766" PostTypeId="1" AcceptedAnswerId="7768" CreationDate="2015-07-29T05:00:29.137" Score="0" ViewCount="151" Body="&lt;p&gt;I need to build a conversion/mapping algorithm from a controller (PID etc.) output to the duty cycle in order to command my bldc motor via esc. I couldn't do it yet because l think l dont know the meaning of controller output. Anybody highlights my way?&lt;/p&gt;&#xA;" OwnerUserId="10090" LastActivityDate="2015-07-29T13:10:46.980" Title="Duty cycle mapping" Tags="&lt;arduino&gt;&lt;motor&gt;&lt;esc&gt;&lt;microcontroller&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7767" PostTypeId="2" ParentId="7765" CreationDate="2015-07-29T08:27:37.813" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;h2&gt;Power Law:&lt;/h2&gt;&#xA;  &#xA;  &lt;p&gt;Power = Current x Voltage&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The voltage of the batteries plays a huge difference in whether electronics function properly. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each of them is built to run using a particular voltage - 3.3V, 5V, 6V, 7.2V, 11.1V, 12V, 19V and 24V are some common operating voltages for electronics. Some devices have a &lt;em&gt;voltage regulator&lt;/em&gt; that shift input voltages to a safe level. This allows you to use a higher voltage power supply to power your robot/computer/sensor. For example, the Arduino Uno has a voltage regulator that accepts voltages between 7-30V and converts them to the 5V that the microprocessor runs at.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From a motor standpoint, decreased voltage means lower power output, which means that either your motors won't turn as fast or they won't be able to output as much torque. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The best thing for you to do right now is look up the datasheets online for your quadcopter or the individual components and find out what voltage each of the parts run at.&lt;/strong&gt; If your second quadcopter needs anything higher than 7.2V, then there's your problem. If you have trouble deciphering the datasheets, you're welcome to edit your post to include the links and we'll try to help you understand them.&lt;/p&gt;&#xA;" OwnerUserId="7537" LastActivityDate="2015-07-29T08:27:37.813" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7768" PostTypeId="2" ParentId="7766" CreationDate="2015-07-29T13:10:46.980" Score="0" Body="&lt;p&gt;Usually you would use a PID controller's output as a &quot;substitute&quot; for your (the operator's) output. If you bypassed the PID controller, what signal would you be providing to the ESC? It is easiest to put the input to the PID controller and the feedback to the PID controller in the same units as you would like the output to be. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your case, I would use a input and feedback as speeds in percent, then the output of the PID controller should be speed in percent, which is easy to provide in PWM form. If you try to compare speeds in km/hr or m/s or something else like that, then you wind up having to convert that speed into a percentage anyways because you don't send &quot;2 m/s&quot; to a speed controller, you send a speed setpoint - either in rpm or percentage. Again, whatever units the ESC is using are the units you should be using for your PID control. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-07-29T13:10:46.980" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7770" PostTypeId="2" ParentId="7760" CreationDate="2015-07-29T17:43:23.533" Score="4" Body="&lt;p&gt;I have a library called &lt;strong&gt;&lt;a href=&quot;https://github.com/ahundt/grl&quot; rel=&quot;nofollow&quot;&gt;grl&lt;/a&gt;&lt;/strong&gt; which integrates control of a KUKA iiwa in C++. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Right now the most reliable mechanism I've found for control is to receive state over FRI, then send state via Java. All the tools necessary to do this are integrated into grl.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While I've been able to receive state over FRI nicely, sending FRI commands so the robot drives reliably has proven more complicated. I'm close to a working implementation and I have a few simple test applications that move a single joint correctly. Once the bugs are worked out it should be very easy to use, and I'm hopeful it will work well. For a specific function controlling FRI see &lt;a href=&quot;https://github.com/ahundt/grl/blob/master/test/KukaFRIClientDataDriverTest.cpp&quot; rel=&quot;nofollow&quot;&gt;KukaFRIClientDataDriver.cpp&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately I've found the direct API KUKA provides to be a bit difficult to use as well, so I'm implementing functions that communicate over the underlying protobuf network messages and UDP.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While this isn't a 100% answer, it is a solution that is 90% of the way to completion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; FRI based control using grl is now working with the Sunrise Connectivity Suite 1.7. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is an example of how to use it in the simplest case of &lt;a href=&quot;https://github.com/ahundt/grl/blob/master/test/KukaFRIClientDataDriverTest.cpp&quot; rel=&quot;nofollow&quot;&gt;KukaFRIClientDataDriverTest.cpp&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;// Library includes&#xA;#include &amp;lt;string&amp;gt;&#xA;#include &amp;lt;ostream&amp;gt;&#xA;#include &amp;lt;iostream&amp;gt;&#xA;#include &amp;lt;memory&amp;gt;&#xA;&#xA;#include &quot;grl/KukaFRI.hpp&quot;&#xA;#include &quot;grl/KukaFriClientData.hpp&quot;&#xA;#include &amp;lt;boost/log/trivial.hpp&amp;gt;&#xA;&#xA;&#xA;#include &amp;lt;cstdlib&amp;gt;&#xA;#include &amp;lt;cstring&amp;gt;&#xA;#include &amp;lt;iostream&amp;gt;&#xA;#include &amp;lt;boost/asio.hpp&amp;gt;&#xA;#include &amp;lt;vector&amp;gt;&#xA;#include &amp;lt;iostream&amp;gt;&#xA;&#xA;&#xA;using boost::asio::ip::udp;&#xA;&#xA;#include &amp;lt;chrono&amp;gt;&#xA;&#xA;/// @see https://stackoverflow.com/questions/2808398/easily-measure-elapsed-time&#xA;template&amp;lt;typename TimeT = std::chrono::milliseconds&amp;gt;&#xA;struct periodic&#xA;{&#xA;    periodic():start(std::chrono::system_clock::now()){};&#xA;&#xA;    template&amp;lt;typename F, typename ...Args&amp;gt;&#xA;    typename TimeT::rep execution(F func, Args&amp;amp;&amp;amp;... args)&#xA;    {&#xA;        auto duration = std::chrono::duration_cast&amp;lt; TimeT&amp;gt; &#xA;                            (std::chrono::system_clock::now() - start);&#xA;        auto count = duration.count();&#xA;        if(count &amp;gt; previous_count) func(std::forward&amp;lt;Args&amp;gt;(args)...);&#xA;        previous_count = count;&#xA;        return count;&#xA;    }&#xA;&#xA;    std::chrono::time_point&amp;lt;std::chrono::system_clock&amp;gt; start;&#xA;    std::size_t previous_count;&#xA;};&#xA;&#xA;&#xA;enum { max_length = 1024 };&#xA;&#xA;int main(int argc, char* argv[])&#xA;{&#xA;&#xA;  periodic&amp;lt;&amp;gt; callIfMinPeriodPassed;&#xA;&#xA;  try&#xA;  {&#xA;    std::string localhost(&quot;192.170.10.100&quot;);&#xA;    std::string localport(&quot;30200&quot;);&#xA;    std::string remotehost(&quot;192.170.10.2&quot;);&#xA;    std::string remoteport(&quot;30200&quot;);&#xA;&#xA;    std::cout &amp;lt;&amp;lt; &quot;argc: &quot; &amp;lt;&amp;lt; argc &amp;lt;&amp;lt; &quot;\n&quot;;&#xA;    if (argc !=5 &amp;amp;&amp;amp; argc !=1)&#xA;    {&#xA;      std::cerr &amp;lt;&amp;lt; &quot;Usage: &quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &quot; &amp;lt;localip&amp;gt; &amp;lt;localport&amp;gt; &amp;lt;remoteip&amp;gt; &amp;lt;remoteport&amp;gt;\n&quot;;&#xA;      return 1;&#xA;    }&#xA;&#xA;    if(argc ==5){&#xA;      localhost = std::string(argv[1]);&#xA;      localport = std::string(argv[2]);&#xA;      remotehost = std::string(argv[3]);&#xA;      remoteport = std::string(argv[4]);&#xA;    }&#xA;&#xA;      std::cout &amp;lt;&amp;lt; &quot;using: &quot;  &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &quot; &quot; &amp;lt;&amp;lt;  localhost &amp;lt;&amp;lt; &quot; &quot; &amp;lt;&amp;lt; localport &amp;lt;&amp;lt; &quot; &quot; &amp;lt;&amp;lt;  remotehost &amp;lt;&amp;lt; &quot; &quot; &amp;lt;&amp;lt; remoteport &amp;lt;&amp;lt; &quot;\n&quot;;&#xA;&#xA;    boost::asio::io_service io_service;&#xA;&#xA;    std::shared_ptr&amp;lt;KUKA::FRI::ClientData&amp;gt; friData(std::make_shared&amp;lt;KUKA::FRI::ClientData&amp;gt;(7));&#xA;    std::chrono::time_point&amp;lt;std::chrono::high_resolution_clock&amp;gt; startTime;&#xA;&#xA;    BOOST_VERIFY(friData);&#xA;&#xA;    double delta = -0.0001;&#xA;    /// consider moving joint angles based on time&#xA;    int joint_to_move = 6;&#xA;    BOOST_LOG_TRIVIAL(warning) &amp;lt;&amp;lt; &quot;WARNING: YOU COULD DAMAGE OR DESTROY YOUR KUKA ROBOT &quot;&#xA;                               &amp;lt;&amp;lt; &quot;if joint angle delta variable is too large with respect to &quot;&#xA;                               &amp;lt;&amp;lt; &quot;the time it takes to go around the loop and change it. &quot;&#xA;                               &amp;lt;&amp;lt; &quot;Current delta (radians/update): &quot; &amp;lt;&amp;lt; delta &amp;lt;&amp;lt; &quot; Joint to move: &quot; &amp;lt;&amp;lt; joint_to_move &amp;lt;&amp;lt; &quot;\n&quot;;&#xA;&#xA;    std::vector&amp;lt;double&amp;gt; ipoJointPos(7,0);&#xA;    std::vector&amp;lt;double&amp;gt; offsetFromipoJointPos(7,0); // length 7, value 0&#xA;    std::vector&amp;lt;double&amp;gt; jointStateToCommand(7,0);&#xA;&#xA;    grl::robot::arm::KukaFRIClientDataDriver driver(io_service,&#xA;        std::make_tuple(localhost,localport,remotehost,remoteport,grl::robot::arm::KukaFRIClientDataDriver::run_automatically)&#xA;    );&#xA;&#xA;    for (std::size_t i = 0;;++i) {&#xA;&#xA;        /// use the interpolated joint position from the previous update as the base&#xA;        if(i!=0 &amp;amp;&amp;amp; friData) grl::robot::arm::copy(friData-&amp;gt;monitoringMsg,ipoJointPos.begin(),grl::revolute_joint_angle_interpolated_open_chain_state_tag());&#xA;&#xA;        /// perform the update step, receiving and sending data to/from the arm&#xA;        boost::system::error_code send_ec, recv_ec;&#xA;        std::size_t send_bytes_transferred = 0, recv_bytes_transferred = 0;&#xA;        bool haveNewData = !driver.update_state(friData, recv_ec, recv_bytes_transferred, send_ec, send_bytes_transferred);&#xA;&#xA;        // if data didn't arrive correctly, skip and try again&#xA;        if(send_ec || recv_ec )&#xA;        {&#xA;           std::cout  &amp;lt;&amp;lt; &quot;receive error: &quot; &amp;lt;&amp;lt; recv_ec &amp;lt;&amp;lt; &quot;receive bytes: &quot; &amp;lt;&amp;lt; recv_bytes_transferred &amp;lt;&amp;lt; &quot; send error: &quot; &amp;lt;&amp;lt; send_ec &amp;lt;&amp;lt; &quot; send bytes: &quot; &amp;lt;&amp;lt; send_bytes_transferred &amp;lt;&amp;lt;  &quot; iteration: &quot;&amp;lt;&amp;lt; i &amp;lt;&amp;lt; &quot;\n&quot;;&#xA;           std::this_thread::sleep_for(std::chrono::milliseconds(1));&#xA;           continue;&#xA;        }&#xA;&#xA;        // If we didn't receive anything new that is normal behavior,&#xA;        // but we can't process the new data so try updating again immediately.&#xA;        if(!haveNewData)&#xA;        {&#xA;           std::this_thread::sleep_for(std::chrono::milliseconds(1));&#xA;           continue;&#xA;        }&#xA;&#xA;        /// use the interpolated joint position from the previous update as the base&#xA;        /// @todo why is this?&#xA;        if(i!=0 &amp;amp;&amp;amp; friData) grl::robot::arm::copy(friData-&amp;gt;monitoringMsg,ipoJointPos.begin(),grl::revolute_joint_angle_interpolated_open_chain_state_tag());&#xA;&#xA;&#xA;&#xA;        if (grl::robot::arm::get(friData-&amp;gt;monitoringMsg,KUKA::FRI::ESessionState()) == KUKA::FRI::COMMANDING_ACTIVE)&#xA;        {&#xA;#if 1 // disabling this block causes the robot to simply sit in place, which seems to work correctly. Enabling it causes the joint to rotate.&#xA;            callIfMinPeriodPassed.execution( [&amp;amp;offsetFromipoJointPos,&amp;amp;delta,joint_to_move]()&#xA;            {&#xA;                    offsetFromipoJointPos[joint_to_move]+=delta;&#xA;                    // swap directions when a half circle was completed&#xA;                    if (&#xA;                         (offsetFromipoJointPos[joint_to_move] &amp;gt;  0.2 &amp;amp;&amp;amp; delta &amp;gt; 0) ||&#xA;                         (offsetFromipoJointPos[joint_to_move] &amp;lt; -0.2 &amp;amp;&amp;amp; delta &amp;lt; 0)&#xA;                       )&#xA;                    {&#xA;                       delta *=-1;&#xA;                    }&#xA;            });&#xA;&#xA;#endif&#xA;        }&#xA;&#xA;            KUKA::FRI::ESessionState sessionState = grl::robot::arm::get(friData-&amp;gt;monitoringMsg,KUKA::FRI::ESessionState());&#xA;        // copy current joint position to commanded position&#xA;        if (sessionState == KUKA::FRI::COMMANDING_WAIT || sessionState == KUKA::FRI::COMMANDING_ACTIVE)&#xA;        {&#xA;            boost::transform ( ipoJointPos, offsetFromipoJointPos, jointStateToCommand.begin(), std::plus&amp;lt;double&amp;gt;());&#xA;            grl::robot::arm::set(friData-&amp;gt;commandMsg, jointStateToCommand, grl::revolute_joint_angle_open_chain_command_tag());&#xA;        }&#xA;&#xA;        // vector addition between ipoJointPosition and ipoJointPositionOffsets, copying the result into jointStateToCommand&#xA;        /// @todo should we take the current joint state into consideration?&#xA;&#xA;        //BOOST_LOG_TRIVIAL(trace) &amp;lt;&amp;lt; &quot;position: &quot; &amp;lt;&amp;lt; state.position &amp;lt;&amp;lt; &quot; us: &quot; &amp;lt;&amp;lt; std::chrono::duration_cast&amp;lt;std::chrono::microseconds&amp;gt;(state.timestamp - startTime).count() &amp;lt;&amp;lt; &quot; connectionQuality: &quot; &amp;lt;&amp;lt; state.connectionQuality &amp;lt;&amp;lt; &quot; operationMode: &quot; &amp;lt;&amp;lt; state.operationMode &amp;lt;&amp;lt; &quot; sessionState: &quot; &amp;lt;&amp;lt; state.sessionState &amp;lt;&amp;lt; &quot; driveState: &quot; &amp;lt;&amp;lt; state.driveState &amp;lt;&amp;lt; &quot; ipoJointPosition: &quot; &amp;lt;&amp;lt; state.ipoJointPosition &amp;lt;&amp;lt; &quot; ipoJointPositionOffsets: &quot; &amp;lt;&amp;lt; state.ipoJointPositionOffsets &amp;lt;&amp;lt; &quot;\n&quot;;&#xA;    }&#xA;  }&#xA;  catch (std::exception&amp;amp; e)&#xA;  {&#xA;    std::cerr &amp;lt;&amp;lt; &quot;Exception: &quot; &amp;lt;&amp;lt; e.what() &amp;lt;&amp;lt; &quot;\n&quot;;&#xA;  }&#xA;&#xA;  return 0;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Here is the &lt;a href=&quot;https://github.com/ahundt/grl/blob/master/src/java/grl/src/friCommunication/FRIHoldsPosition_Command.java&quot; rel=&quot;nofollow&quot;&gt;Java side of the application&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;package friCommunication;&#xA;&#xA;import static com.kuka.roboticsAPI.motionModel.BasicMotions.positionHold;&#xA;import static com.kuka.roboticsAPI.motionModel.BasicMotions.ptp;&#xA;&#xA;import java.util.concurrent.TimeUnit;&#xA;import java.util.concurrent.TimeoutException;&#xA;&#xA;import com.kuka.connectivity.fri.FRIConfiguration;&#xA;import com.kuka.connectivity.fri.FRIJointOverlay;&#xA;import com.kuka.connectivity.fri.FRISession;&#xA;import com.kuka.roboticsAPI.applicationModel.RoboticsAPIApplication;&#xA;import com.kuka.roboticsAPI.controllerModel.Controller;&#xA;import com.kuka.roboticsAPI.deviceModel.LBR;&#xA;import com.kuka.roboticsAPI.geometricModel.CartDOF;&#xA;import com.kuka.roboticsAPI.motionModel.controlModeModel.CartesianImpedanceControlMode;&#xA;&#xA;/**&#xA; * Creates a FRI Session.&#xA; */&#xA;public class FRIHoldsPosition_Command extends RoboticsAPIApplication&#xA;{&#xA;    private Controller _lbrController;&#xA;    private LBR _lbr;&#xA;    private String _hostName;&#xA;&#xA;    @Override&#xA;    public void initialize()&#xA;    {&#xA;        _lbrController = (Controller) getContext().getControllers().toArray()[0];&#xA;        _lbr = (LBR) _lbrController.getDevices().toArray()[0];&#xA;        // **********************************************************************&#xA;        // *** change next line to the FRIClient's IP address                 ***&#xA;        // **********************************************************************&#xA;        _hostName = &quot;192.170.10.100&quot;;&#xA;    }&#xA;&#xA;    @Override&#xA;    public void run()&#xA;    {&#xA;        // configure and start FRI session&#xA;        FRIConfiguration friConfiguration = FRIConfiguration.createRemoteConfiguration(_lbr, _hostName);&#xA;        friConfiguration.setSendPeriodMilliSec(4);&#xA;        FRISession friSession = new FRISession(friConfiguration);&#xA;        FRIJointOverlay motionOverlay = new FRIJointOverlay(friSession);&#xA;         try {&#xA;            friSession.await(10, TimeUnit.SECONDS);&#xA;        } catch (TimeoutException e) {&#xA;            // TODO Automatisch generierter Erfassungsblock&#xA;            e.printStackTrace();&#xA;            friSession.close();&#xA;            return;&#xA;        }&#xA;        CartesianImpedanceControlMode controlMode = new CartesianImpedanceControlMode();&#xA;        controlMode.parametrize(CartDOF.X).setStiffness(100.0);&#xA;        controlMode.parametrize(CartDOF.ALL).setDamping(0.7);&#xA;&#xA;        // TODO: remove default start pose&#xA;        // move to default start pose&#xA;        _lbr.move(ptp(Math.toRadians(10), Math.toRadians(10), Math.toRadians(10), Math.toRadians(-90), Math.toRadians(10), Math.toRadians(10),Math.toRadians(10)));&#xA;&#xA;        // sync move for infinite time with overlay ...&#xA;        _lbr.move(positionHold(controlMode, -1, TimeUnit.SECONDS).addMotionOverlay(motionOverlay));&#xA;        //_lbr.moveAsync(ptp(Math.toRadians(-90), .0, .0, Math.toRadians(90), .0, Math.toRadians(-90), .0));&#xA;&#xA;        // TODO: remove default start pose&#xA;        // move to default start pose&#xA;        _lbr.move(ptp(Math.toRadians(10), Math.toRadians(10), Math.toRadians(10), Math.toRadians(-90), Math.toRadians(10), Math.toRadians(10),Math.toRadians(10)));&#xA;&#xA;        // done&#xA;        friSession.close();&#xA;    }&#xA;&#xA;    /**&#xA;     * main.&#xA;     * &#xA;     * @param args&#xA;     *            args&#xA;     */&#xA;    public static void main(final String[] args)&#xA;    {&#xA;        final FRIHoldsPosition_Command app = new FRIHoldsPosition_Command();&#xA;        app.runApplication();&#xA;    }&#xA;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="304" LastEditorUserId="304" LastEditDate="2015-07-31T16:56:54.297" LastActivityDate="2015-07-31T16:56:54.297" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="7771" PostTypeId="2" ParentId="7764" CreationDate="2015-07-29T18:12:20.040" Score="0" Body="&lt;p&gt;Do you have a picture of the other side of the board? Typically, when you have a broken wire like this, either (1) the wire pulls out of a &lt;a href=&quot;https://softsolder.files.wordpress.com/2009/07/cimg2401-tinytrak3-cold-solder-joints.jpg&quot; rel=&quot;nofollow&quot;&gt;cold solder joint and leaves a hole&lt;/a&gt;, or (2) the wire breaks and leaves a little piece of wire embedded in a (good) solder joint. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given the fact that there is so little bare wire exposed, I think that you're in case (2), where I would bet the wire broke off at whatever joint in which it was originally soldered. If this is the case, you should see a little copper-colored bit sticking out of a solder blob or a &lt;a href=&quot;http://imall.itead.cc/media/wysiwyg/PCB/buried_blind_via.jpg&quot; rel=&quot;nofollow&quot;&gt;via in the circuit board&lt;/a&gt;. I don't see this, or the hole from case (1), anywhere on the surface of the board you've shown, which, coupled with the fact that the other end of the wire being under the board, leads me to believe your problem point is on the bottom of the board. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-07-29T18:12:20.040" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7772" PostTypeId="1" AcceptedAnswerId="7776" CreationDate="2015-07-29T19:02:52.247" Score="0" ViewCount="497" Body="&lt;p&gt;I have a 16 Channel Servo Driver board from Adafruit (see &lt;a href=&quot;https://www.adafruit.com/products/815&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;), and I communicate to it via I2C using a Raspberry Pi. The servo board is controlling a &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__36674__q_brain_4_x_20a_brushless_quadcopter_esc_2_4s_3a_sbec.html&quot; rel=&quot;nofollow&quot;&gt;Qbrain&lt;/a&gt; by sending a PWM pulse between 1ms to 2ms and it works great.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Problem is, I'm trying to create a kill switch such that the signal from the servo board would cease, and the ESC would stop because it detects no PWM signal. I have placed a toggle switch that cuts the VCC to the servo board, so technically it should no longer produce any PWM signal, however when the power is cut, the ESC jumps to 100% throttle, I can only assume this is because the ESC believes the signal is 100% duty cycle, but how do I solve this?&lt;/p&gt;&#xA;" OwnerUserId="1999" LastActivityDate="2015-07-30T13:24:18.653" Title="How to cut throttle signal to ESC properly?" Tags="&lt;raspberry-pi&gt;&lt;esc&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7774" PostTypeId="1" AcceptedAnswerId="7775" CreationDate="2015-07-29T20:24:13.467" Score="4" ViewCount="176" Body="&lt;p&gt;The task of the robot is as follows.&#xA;My robot should catch another robot in the arena, which is trying to escape. The exact position of that robot is sent to my robot at 5Hz. Other than that I can use sonsor to identify that robot.&#xA;Is that possible to estimate the next position of other robot using a mathematical model. If so, can anyone recommend tutorials or books to refer..?&lt;/p&gt;&#xA;" OwnerUserId="1851" LastActivityDate="2015-07-29T20:57:07.460" Title="Modeling a robot to find its position" Tags="&lt;arduino&gt;&lt;kalman-filter&gt;&lt;automatic&gt;&lt;probability&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7775" PostTypeId="2" ParentId="7774" CreationDate="2015-07-29T20:57:07.460" Score="6" Body="&lt;p&gt;Assuming a constant update of 5Hz, your sample time is (1/5) = 0.2s. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Get one position of the target, p1. &#xA;Get a second position of the target, p2. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Target speed is the difference in position divided by difference in time:&#xA;$$&#xA;v = (p_2 - p_1)/dT \\&#xA;v = (p_2 - p_1)/0.2&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now predict where they will be in the future, where future is $x$ seconds from now:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;p_{\mbox{future}} = p_2 + v*x&#xA;$$&#xA;where again, $p_2$ is the current point of the target, $v$ is the target's calculated speed, and $x$ is how far in the future you want to predict, in seconds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can do a number of things from here such as filtering a number of samples in the past, you could try curve fitting, etc., but this is a simple method of predicting future location based on known position updates. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you knew more about the path or potential paths your target could take you could optimize the prediction or provide a series of cases, but assuming relatively linear motion this model should hold. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-07-29T20:57:07.460" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="7776" PostTypeId="2" ParentId="7772" CreationDate="2015-07-30T13:24:18.653" Score="0" Body="&lt;p&gt;The problem you have is that you're not sending &lt;em&gt;any&lt;/em&gt; PWM signal, so the ESC is behaving erratically. You could try to do code to correct for this, but you could have any number of issues. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I do any time I need to implement a kill switch like this is to use &lt;a href=&quot;https://www.google.com/search?q=80A+relay+and+socket&amp;amp;tbm=isch&quot; rel=&quot;nofollow noreferrer&quot;&gt;a power relay&lt;/a&gt;. You can drive the relay coil from the microcontroller with a transistor as depicted in my crude schematic below. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this circuit, you have a power switch to turn on the microcontroller board, but then you have to also send HIGH to whatever pin you assign &quot;ESC Enable&quot; in order to close the contacts in the load relay. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, with this setup, you can setup a heartbeat. The transmitter sends a packet that sets a heartbeat bit HIGH in the receiver. The receiver uses an interrupt to poll the heartbeat bit and, if it's HIGH, clears the bit. If it is LOW, then you have the option to either kill power on the spot (set ESC Enable to LOW) or you could wait for N heartbeats to be LOW.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a final note, be sure that you enable, add, configure, etc. a &lt;a href=&quot;http://playground.arduino.cc/CommonTopics/PullUpDownResistor&quot; rel=&quot;nofollow noreferrer&quot;&gt;pulldown resistor&lt;/a&gt; to the ESC Enable pin to ensure that the pin is LOW any time it would otherwise be floating. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/HOZRC.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HOZRC.png&quot; alt=&quot;Load Enable Schematic&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-07-30T13:24:18.653" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="7777" PostTypeId="2" ParentId="1120" CreationDate="2015-07-31T05:41:32.007" Score="1" Body="&lt;p&gt;I've created an AI, which solves given IQ tests. You may test it on &lt;a href=&quot;http://iqsolver.eu&quot; rel=&quot;nofollow&quot;&gt;http://iqsolver.eu&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10258" LastActivityDate="2015-07-31T05:41:32.007" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7778" PostTypeId="1" CreationDate="2015-07-31T12:23:13.187" Score="4" ViewCount="7845" Body="&lt;p&gt;I'm working on a 2-wheeled robot and have connected up a raspberry pi to an L298N motor driver.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm sending the enable pin of a particular motor a software-generated PWM signal at 100Hz with a 50% duty cycle.  I observe with an osciloscope:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;a fairly clean square wave going into the enable pin as expected.&lt;/li&gt;&#xA;&lt;li&gt;a fairly dirty square wave across the output motor terminals.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The motor turns at about 50% speed/torque as expected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I find myself wondering if it would be better to control the speed of the motor by placing a flat lower constant voltage across its terminals, rather than oscillating a square wave.  ie to do 50% speed/torque - instead of oscilating between 0V and 5V - just put a constant 2.5V across the motor terminals.  I wonder if the oscillation is a waste of power/energy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this true?  Or doesn't it make any difference?  Do high-end motor drivers use a variable flat analog voltage to control speed/torque, or do they use a PWM?  If a PWM, does the frequency make any difference?&lt;/p&gt;&#xA;" OwnerUserId="10260" LastActivityDate="2015-08-10T12:37:38.397" Title="Electric Motor Speed Control - PWM vs analog voltage?" Tags="&lt;motor&gt;" AnswerCount="4" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7779" PostTypeId="2" ParentId="7778" CreationDate="2015-07-31T13:39:23.210" Score="2" Body="&lt;p&gt;(I'd prefer this to be a commment but I don't have enough rep ;( )&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Good question!  Here are a few resources that might help:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Look at this for the PWM frequency question: &lt;a href=&quot;https://electronics.stackexchange.com/questions/67663/criteria-behind-selecting-pwm-frequency-for-speed-control-of-a-dc-motor&quot;&gt;https://electronics.stackexchange.com/questions/67663/criteria-behind-selecting-pwm-frequency-for-speed-control-of-a-dc-motor&lt;/a&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;-&gt; Essentially the motor acts as a filter and can average out the pwm wave to create an analog voltage, so you want to look for a frequency that does this best. PWM can also effect the sound of your motors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Look at this for PWM vs Analog: &lt;a href=&quot;https://electronics.stackexchange.com/questions/87103/why-is-pwm-used-to-control-dc-motor-speed-instead-of-using-a-variable-resistance&quot;&gt;https://electronics.stackexchange.com/questions/87103/why-is-pwm-used-to-control-dc-motor-speed-instead-of-using-a-variable-resistance&lt;/a&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;-&gt; It's more efficient to use PWM compared to, say, a resistor in series, as a lot power is dissipated through the resistor. It's also much easier to output a PWM pulse and is typically built into microcontroller's hardware nowadays. &lt;/p&gt;&#xA;" OwnerUserId="7647" LastEditorUserId="-1" LastEditDate="2017-04-13T12:33:08.317" LastActivityDate="2015-07-31T14:39:18.697" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7780" PostTypeId="2" ParentId="7778" CreationDate="2015-07-31T14:40:43.960" Score="2" Body="&lt;p&gt;Essentially, PWM supplies full rated voltage to a component and effectively varies the current supplied by turning the component on and off very quickly. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For some things, like an LED, which has a bias voltage that must be surpassed for the LED to turn on, you &lt;em&gt;must&lt;/em&gt; supply a voltage greater than the bias voltage. If you try to use an analog voltage supplied to the LED as a means of brightness control, you can only dim to a point, where you hit the bias voltage, at which point the LED turns off completely. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For other things, like your motor, there is great cost to generating an analog voltage. How are you intending to do it? A &lt;a href=&quot;https://en.wikipedia.org/wiki/Linear_regulator&quot; rel=&quot;nofollow&quot;&gt;linear regulator&lt;/a&gt; uses essentially a voltage divider to create the analog voltage. This means if you want to supply 50% voltage to your motor, the other 50% of that voltage is being &quot;burned off&quot; by a large resistor in the form of heat. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PWM output is supplying rated voltage to the motor, but the inductance (coil) in the motor creates a &lt;a href=&quot;https://en.wikipedia.org/wiki/Time_constant#Time_constants_in_electrical_circuits&quot; rel=&quot;nofollow&quot;&gt;time constant&lt;/a&gt; in your circuit which is acting like (is, actually) a filter, which is why you are seeing a &quot;dirty&quot; square wave. There is very very little power loss in doing switching (PWM) power supply because the inductance and reactance in the load that causes the filtering effect are both imaginary loads; whatever power they &quot;consume&quot; while the capacitor/inductor is charging is paid back when they discharge; this is why you get the &lt;a href=&quot;http://www.electronics-tutorials.ws/rc/rc_3.html&quot; rel=&quot;nofollow&quot;&gt;shark fin look on a square wave&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, your options are to use PWM to provide a switching power supply directly to the motor, or send a PWM signal to 3rd party power supply to &lt;em&gt;it&lt;/em&gt; can provide a switching power supply to the motor, or use a linear regulator and &lt;a href=&quot;http://www.completepowerelectronics.com/linear-regulator-smps-advantages-disadvantages/&quot; rel=&quot;nofollow&quot;&gt;suffer the consequences&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-07-31T14:40:43.960" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7781" PostTypeId="1" AcceptedAnswerId="7783" CreationDate="2015-07-31T14:41:57.560" Score="9" ViewCount="207" Body="&lt;p&gt;&lt;strong&gt;My Background:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My experience is in solid mechanics and FEA.  So I have zero experience in robotics/controls.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Problem Description&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm developing a control strategy to stabilize a complicated 6-legged dynamical system.  Torques &lt;strong&gt;&lt;em&gt;Ti&lt;/em&gt;&lt;/strong&gt; from each leg's joints will be used to create a net moment &lt;strong&gt;&lt;em&gt;M&lt;/em&gt;&lt;/strong&gt; on the body, stabilizing the system.  This moment &lt;strong&gt;&lt;em&gt;M&lt;/em&gt;&lt;/strong&gt; is known from the pre-determined control strategy.  (Side note: the dynamical solver is of the nonlinear computational type)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Due to my lack of background, I have a fundamental confusion with the dynamical system.  I want to use joint torques &lt;strong&gt;&lt;em&gt;Ti&lt;/em&gt;&lt;/strong&gt; to create this known net moment &lt;strong&gt;&lt;em&gt;M&lt;/em&gt;&lt;/strong&gt; on the body.  This moment &lt;strong&gt;&lt;em&gt;M&lt;/em&gt;&lt;/strong&gt; is a function of the&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;current positions/angles of all the leg segments&lt;/li&gt;&#xA;&lt;li&gt;reaction forces and moments (that cannot be controlled) of each leg&lt;/li&gt;&#xA;&lt;li&gt;controllable joint torques &lt;strong&gt;&lt;em&gt;Ti&lt;/em&gt;&lt;/strong&gt; of each leg&lt;/li&gt;&#xA;&lt;li&gt;time&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;$(*)$ At a given time $(n-1)\Delta$t:&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;--From the control strategy, the desired net moment &lt;strong&gt;&lt;em&gt;M&lt;/em&gt;&lt;/strong&gt; is computed/known&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;--One can read/sense the legs' positions, angles, reaction forces, and reaction moments (say, from well placed sensors), at this time $t = (n-1)\Delta$t.  &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;--From this information, vector algebra easily yields the desired joint torques &lt;strong&gt;&lt;em&gt;Ti&lt;/em&gt;&lt;/strong&gt; required to create the net moment &lt;strong&gt;&lt;em&gt;M&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;$(**)$ At the time $(n)\Delta$t:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;--one applies the previously determined joint torques &lt;strong&gt;&lt;em&gt;Ti&lt;/em&gt;&lt;/strong&gt; (determined at $t=(n-1)\Delta$t) to create the desired moment &lt;strong&gt;&lt;em&gt;M&lt;/em&gt;&lt;/strong&gt; &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;--of course these torques &lt;strong&gt;&lt;em&gt;Ti&lt;/em&gt;&lt;/strong&gt; are applied at the immediate proceeding time step because they cannot be applied instantaneously&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So this is exactly where my fundamental confusion exists.  The torques &lt;strong&gt;&lt;em&gt;Ti&lt;/em&gt;&lt;/strong&gt; were calculated in $(*)$, based on data of angles/positions/reactions in $(*)$, with the objective to create moment &lt;strong&gt;&lt;em&gt;M&lt;/em&gt;&lt;/strong&gt;.  However, these torques &lt;strong&gt;&lt;em&gt;Ti&lt;/em&gt;&lt;/strong&gt; are applied in $(**)$, where the data (angles/positions/reactions) are &lt;strong&gt;now different&lt;/strong&gt; - thus the desired net moment &lt;strong&gt;&lt;em&gt;M&lt;/em&gt;&lt;/strong&gt; can never be created (unless you an magically apply actuation at the instantaneous time of sensing).  Am I understanding the controls problem correctly?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Questions&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Am I understanding the robotics problem correctly?  What are the terms and strategies around this dilemma?&lt;/li&gt;&#xA;&lt;li&gt;Of course I could create the time steps between the sensing and the actuation to be infinitely small, but this would be unrealistic/dishonest.  What is the balance between a realistic time step, but also performs the task well?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="10261" LastEditorUserId="10261" LastEditDate="2015-07-31T15:25:11.227" LastActivityDate="2015-07-31T15:41:39.157" Title="How do I decide the size of the time steps between sensing and control actuation?" Tags="&lt;control&gt;&lt;actuator&gt;&lt;stability&gt;&lt;legged&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7782" PostTypeId="1" CreationDate="2015-07-31T15:15:54.223" Score="2" ViewCount="1313" Body="&lt;p&gt;I saw &lt;a href=&quot;https://www.indiegogo.com/projects/buddy-your-family-s-companion-robot/x/11637197#/story&quot; rel=&quot;nofollow&quot;&gt;Buddy&lt;/a&gt;'s page and want to purchase for my SLAM research. However, I wonder is it possible to program Buddy for SLAM? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to Buddy's spec, they're only few IR's, sonars and a camera. As I know, most SLAM algorithms are implemented with powerful sensors such as RGBD/stereo camera, or even laser range finder.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any pepers mention about IR-based SLAM?&lt;/p&gt;&#xA;" OwnerUserId="10204" LastEditorUserId="37" LastEditDate="2015-10-19T14:06:24.910" LastActivityDate="2015-10-19T14:06:24.910" Title="Is it possible to do SLAM with few IR sensors like Buddy?" Tags="&lt;mobile-robot&gt;&lt;localization&gt;&lt;slam&gt;&lt;mapping&gt;&lt;rangefinder&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7783" PostTypeId="2" ParentId="7781" CreationDate="2015-07-31T15:41:39.157" Score="4" Body="&lt;p&gt;Regarding point 1, yes you are understanding the problem correctly.&lt;/p&gt;&#xA;&lt;p&gt;Regarding points 1 and 2, I believe what you are looking for is the &lt;a href=&quot;https://en.wikipedia.org/wiki/Nyquist%E2%80%93Shannon_sampling_theorem&quot; rel=&quot;nofollow noreferrer&quot;&gt;Nyquist-Shannon sampling theory&lt;/a&gt;. This theory says that your sampling frequency should be greater than 2x your &amp;quot;highest frequency of interest&amp;quot;. This is to prevent aliasing, where you can incorrectly measure a high-frequency signal as low frequency.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/LXPDO.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/LXPDO.png&quot; alt=&quot;From Wikipedia on Aliasing&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The image above is from Wikipedia. So, you have your robot with all its joints and limbs and such - how fast can those limbs move? Your moments and torques will all cause accelerations at the joints; what is the top rotational speed at a joint? Or, put another way, what's the peak moment you would expect and how long would it be applied? You can calculate a speed from that as well.&lt;/p&gt;&#xA;&lt;p&gt;You want to sample your joints fast enough that you can capture the full dynamics of the system. That's the sampling threshold (minimum!) I would set for my own robotics project for &lt;em&gt;sensing&lt;/em&gt;. For &lt;em&gt;control&lt;/em&gt;, &lt;a href=&quot;http://www.ni.com/white-paper/2709/en/&quot; rel=&quot;nofollow noreferrer&quot;&gt;most&lt;/a&gt; , &lt;a href=&quot;http://ai.stanford.edu/manips/publications/pdfs/Vischer_1990.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;reputable&lt;/a&gt; , &lt;a href=&quot;https://books.google.com/books?id=2WQP5JGaJOgC&amp;amp;pg=PA316&amp;amp;lpg=PA316&amp;amp;dq=sampling+frequency+for+control+frequency+of+interest+five+times#v=onepage&amp;amp;q=sampling%20frequency%20for%20control%20frequency%20of%20interest%20five%20times&amp;amp;f=false&quot; rel=&quot;nofollow noreferrer&quot;&gt;sources&lt;/a&gt; , &lt;a href=&quot;https://books.google.com/books?id=hRtn5ZyViMAC&amp;amp;pg=PA102&amp;amp;lpg=PA102&amp;amp;dq=sampling+frequency+for+control+frequency+of+interest&quot; rel=&quot;nofollow noreferrer&quot;&gt;say 5-10 times the frequency of interest.&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Your peak accelerations, from your peak torques and moments, are going to be limited by the mass (moment of inertia) of your limbs. The limbs that limit your accelerations are also going to act as a low-pass filter to keep the system relatively constant between samples such that the fact that you're off by one sample shouldn't matter too much.&lt;/p&gt;&#xA;&lt;p&gt;Hope this helps!&lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2015-07-31T15:41:39.157" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7784" PostTypeId="2" ParentId="7782" CreationDate="2015-07-31T16:41:14.733" Score="2" Body="&lt;p&gt;I did casually search for something like this a year or two ago. &quot;Sparse sensing&quot; or &quot;sensing limited&quot; were the sort of phrases that cropped up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://cs.krisbeevers.com/&quot; rel=&quot;nofollow&quot;&gt;Kris Beevers&lt;/a&gt; has some interesting publications in this sort of area, such as &lt;a href=&quot;http://cs.krisbeevers.com/research/slam_icra06.pdf&quot; rel=&quot;nofollow&quot;&gt;SLAM With Sparse Sensing&lt;/a&gt;. His general approach was to maintain previous sensor readings while changing the direction of the robot, to build up a &quot;scan&quot; comprising several sets of readings. This approach might be sensitive to encoder errors or any other movement inaccuracies during the scan, but still worth investigating.&lt;/p&gt;&#xA;" OwnerUserId="9578" LastActivityDate="2015-07-31T16:41:14.733" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7785" PostTypeId="2" ParentId="172" CreationDate="2015-07-31T18:13:41.867" Score="2" Body="&lt;p&gt;Optical flow sensors (such as those used in computer mouses) are good for this situation. Most will give output in terms of translation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively, you can just use a basic camera and run some optical flow algorithms on the data. This will give you the same basic information. It might be easier when doing it this way, to adapt an algorithm that will offer rotational motion as well as translation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some optical flow ICs do have the ability to give you the image data (eg the ADNS-3080), which you can further analyse for rotational information.&lt;/p&gt;&#xA;" OwnerUserId="1075" LastEditorUserId="1075" LastEditDate="2015-07-31T18:20:45.737" LastActivityDate="2015-07-31T18:20:45.737" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7786" PostTypeId="1" CreationDate="2015-07-31T20:00:51.183" Score="4" ViewCount="651" Body="&lt;p&gt;I am using &lt;a href=&quot;http://openrave.org/docs/latest_stable/openravepy/ikfast/&quot; rel=&quot;nofollow noreferrer&quot;&gt;ikfast&lt;/a&gt; in &lt;a href=&quot;http://openrave.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;OpenRave&lt;/a&gt; for my inverse kinematics.  This is an analytical solver, so if your robot's DOF matches the IK type's DOF, then you get all possible solutions.  But if your robot has more DOFs, then you need to pick some joints to have a constant value.  (However, if you use OpenRave's Python interface it will discretize that joint for you.  i.e. give you a set of solutions for every 0.1 radians of that joint.  But my question holds for either interface.)  I have a 7 DOF anthropomorphic arm with joints: Roll-Pitch-Roll-Pitch-Roll-Pitch-Yaw as seen in this image:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/QIfLq.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QIfLq.png&quot; alt=&quot;7 DOF arm&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The discretized joints are call &quot;free joints&quot; in OpenRave's terminology.  If I let ikfast decide, it picks joint 3 (upper arm roll) to be the free joint.  However, I have been using joint 4 (elbow) to be the free joint because it is easier for me to think about.  But then I realized that perhaps joint 5, 6, or 7 would be better to discretize because they are closer to the end of the chain.  Won't the IK solutions suffer if joints closer to the start of the chain have a large discretization?  Or is OpenRave picking the optimal joint to discretize?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was just wondering if there is some standard practices or known conventions for this sort of thing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Put simply: I want a set of IK solutions for the end-effector at some pose.  I will fix a joint either near the start or end of the kinematic chain.  And what i set it to isn't going to be perfect.  Lets say it is off from some &quot;ideal&quot; position by some epsilon.  Now you can imagine that if i want the hand in-front of the robot, and I pick a bad angle for the shoulder (like straight up for example), the rest of the joints will have a hard time getting the end-effector to the target pose, if at all.  But If I fix the wrist to be at some awkward angle, there is still a good chance of getting the end-effector there, or at lease close.  What kind of trade-offs are there?  Which will have a &quot;better&quot; set of solutions?&lt;/p&gt;&#xA;" OwnerUserId="110" LastEditorUserId="110" LastEditDate="2015-08-02T00:05:32.503" LastActivityDate="2015-08-03T22:00:51.427" Title="Which joints to discretize for IK" Tags="&lt;inverse-kinematics&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7789" PostTypeId="2" ParentId="7786" CreationDate="2015-08-01T01:52:30.713" Score="0" Body="&lt;p&gt;So I have some experience with kinematic models, but I'm by no means an expert. What do you mean you are &quot;discretizing&quot; a joint? From the documentation you linked:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;For chains containing more degrees of freedom (DOF) than the IK type requires, the user can set arbitrary values of a subset of the joints until the number of unknown joints matches the degrees of freedom of the IK type.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This makes sense to me. You have an end effector for which you want six degrees of freedom, so you get enough joints chained together for six degrees of freedom. If you have more than six degrees of freedom, you &lt;strong&gt;fix&lt;/strong&gt; (&quot;set arbitrary values of&quot;) the excess joints, eliminating degrees of freedom until you're left with what &quot;fits&quot; in the IK solver. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what I'm not sure about is what you mean by &quot;discretizing&quot;. As I read their documentation (I couldn't seem to find an in-depth guide at a glance), and as conceptually makes sense to me, you &lt;strong&gt;must fix&lt;/strong&gt; the extra joints, and you must fix them at whatever &quot;arbitrary value&quot; you chose when configuring the IK solver.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For my reasoning on this, consider a thought experiment: You want to model how your hands move when you bend your elbow, and you make the assumption that your hands are out in front of you and your palms are down. Your model shows your hands move in toward your body. Now you run a test, with your palms up. Should you be surprised that your model didn't predict your hands moving toward your face? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It sounds like the IK solver is returning closed solutions to the inverse kinematics. How can you expect it to account for a motion you don't model, or a joint position/location that's incorrect because your &quot;arbitrary value&quot; doesn't match how it's actually configured?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can you link to documentation that shows a procedure for discretizing a joint? I didn't see anything on a preliminary search. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm assuming this is related to &lt;a href=&quot;https://robotics.stackexchange.com/questions/7763/arm-kinematic-calibration&quot;&gt;your other question&lt;/a&gt;, I think my advice from there still stands - measure your physical robot and check that it matches your model. In this case, with the information you gave, I would look squarely at whatever joint you dicretized and check that it is both fixed and in the orientation you gave in the IK model configuration.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2015-08-01T01:52:30.713" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="7791" PostTypeId="1" AcceptedAnswerId="7792" CreationDate="2015-08-01T14:48:42.370" Score="0" ViewCount="201" Body="&lt;p&gt;I try to find out the relation between rpm vs. thrust for a battery+motor+propeller combination. the image shows my setup and also the measurement result. Can anyone explain how l should use this datas (I know Kv.v gives the rpm but my voltage values decreasing because of P=V.I relation etc.) &lt;/p&gt;&#xA;" OwnerUserId="10090" LastEditorUserId="10090" LastEditDate="2015-08-02T12:39:04.357" LastActivityDate="2016-07-04T00:24:51.330" Title="thrust measurement" Tags="&lt;quadcopter&gt;&lt;brushless-motor&gt;&lt;esc&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7792" PostTypeId="2" ParentId="7791" CreationDate="2015-08-01T22:58:17.903" Score="3" Body="&lt;p&gt;Okay I thought I'd move this to an answer because I think this will help clear up some confusion you have. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, if you are trying to plot RPM vs Thrust, then your battery, ESC, power, etc. have &lt;em&gt;nothing to do with RPM vs Thrust&lt;/em&gt;, assuming the battery and ESC are sized correctly to provide adequate current to the motor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's like saying you want to measure a car's gas tank to see how much traction a car has at a given speed. As long as you're getting enough fuel (current) to keep the motor running, the size, shape, capacity, or chemistry of the fuel really doesn't matter. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Secondly, your voltage is &lt;strong&gt;not&lt;/strong&gt; lowering because of P=IV. The only way that would work is if you are consuming constant power throughout the range of motor RPM, and this is absolutely not the case. In actuality, your battery voltage drop is more likely due to the fact that a &lt;em&gt;real&lt;/em&gt; battery is well modeled by an ideal battery and a battery resistor in series, where that resistor represents internal resistance in the battery (generally a few milliOhms). As output current increases, V=IR, so the voltage drop across the internal resistor increases. Because it is in series with the battery, output (terminal) voltage goes down. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a side note, P=IV, and V=IR, so you can combine those two to write $P=I^2 R $, where P now represents the power being &quot;burned off&quot; by internal battery resistance - this is why batteries under heavy load get very hot. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You didn't publish your test procedure, so depending on how long you took to do the test, coupled with battery C rating and capacity, your voltage drop may also be influenced by regular voltage-state of charge curves. Try performing your test in reverse (high speed first) and see if you get the same results. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ultimately, my advice to you is, if you want to know rpm vs thrust, measure those two values and ignore everything else. They shouldn't have any impact. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-08-01T22:58:17.903" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7795" PostTypeId="1" CreationDate="2015-08-03T10:42:37.637" Score="1" ViewCount="53" Body="&lt;p&gt;Can I connect a UDOO board to a PC using a straight-through ethernet cable? Or do I need a cross-over cable?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as I know, most modern devices can use the two interchangeably. However, I am not sure if a UDOO can do that. Anyone with any experience?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you for your help.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(PS: I don't have a UDOO on me at the moment, so I can't test it myself. Couldn't find any information in the documentation either).&lt;/p&gt;&#xA;" OwnerUserId="10273" LastActivityDate="2015-10-02T14:42:51.107" Title="Can I connect a UDOO to a PC using a straight-through ethernet cable or do I need a cross over?" Tags="&lt;embedded-systems&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7796" PostTypeId="1" AcceptedAnswerId="7799" CreationDate="2015-08-03T13:53:02.913" Score="4" ViewCount="4484" Body="&lt;p&gt;Say I had an object with 4 motors/wheels attached (in a fairly standard arrangement).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need to calculate the amount of torque required from the motors to be able to move the object of x kilograms consistently (without skipping any steps) at a velocity of y, travelling up a slope of angle z.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm guessing this would also depend on factors like the grip of the tyre and such?&lt;/p&gt;&#xA;" OwnerUserId="10275" LastEditorUserId="37" LastEditDate="2016-10-24T10:40:55.780" LastActivityDate="2016-10-24T10:40:55.780" Title="Calculating Required Torque" Tags="&lt;motor&gt;&lt;motion&gt;&lt;torque&gt;&lt;wheel&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7797" PostTypeId="2" ParentId="7795" CreationDate="2015-08-03T14:19:09.370" Score="1" Body="&lt;p&gt;It appears that the &lt;a href=&quot;https://en.wikipedia.org/wiki/UDOO&quot; rel=&quot;nofollow&quot;&gt;UDOO&lt;/a&gt; should support &lt;a href=&quot;https://en.wikipedia.org/wiki/Medium-dependent_interface#Auto_MDI-X&quot; rel=&quot;nofollow&quot;&gt;Auto MDI-X&lt;/a&gt;, since the &lt;a href=&quot;http://www.micrel.com/products/lan-solutions/phys/article/2-ksz9031rnx.html&quot; rel=&quot;nofollow&quot;&gt;KSZ9031RNX Gigabit Ethernet Transceiver&lt;/a&gt; it uses supports it. The only question is whether the driver supports setting MDI auto mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even if it doesn't, only one end of an ethernet link needs to be set up to Auto MDI-X, so if the PC end supports it (most do) then you should be able to set auto mode there and the link work with both straight through and cross over cables.&lt;/p&gt;&#xA;" OwnerUserId="37" LastActivityDate="2015-08-03T14:19:09.370" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7798" PostTypeId="2" ParentId="7786" CreationDate="2015-08-03T15:23:59.287" Score="1" Body="&lt;p&gt;Rosen Diankov answered this question for me in &lt;a href=&quot;http://openrave-users-list.185357.n3.nabble.com/ikfast-solver-does-not-find-solutions-tc4027528.html#a4027535&quot; rel=&quot;nofollow&quot;&gt;a separate thread&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;That's an excellent question, and actually very difficult to answer.&#xA;  The general rule of thumb is that the closer it is to the end effector&#xA;  the better, but this is not always the case. For example, there's only&#xA;  one set of 3 intersecting axes and that's the final 3 joints, then&#xA;  choosing a free joint at the end will mean the resulting IK solver&#xA;  cannot exploit the 3 intersecting axis property to simplify the IK.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The only way I've found to truly get the best free joint is to solve&#xA;  for all of them and see which one is better &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-08-03T15:23:59.287" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7799" PostTypeId="2" ParentId="7796" CreationDate="2015-08-03T17:45:07.613" Score="8" Body="&lt;p&gt;This is a standard dynamics problem. Let's use this figure I drew:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/VQ0si.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/VQ0si.png&quot; alt=&quot;Corrected car going up incline.&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some definitions:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{align}&#xA;m &amp;amp; \mbox{, the mass of the vehicle in kg.} \\&#xA;\mu_{\mbox{rolling}} &amp;amp; \mbox{, the rolling friction coefficient of your tires.} \\&#xA;\theta &amp;amp; \mbox{, the incline of the plane in radians.}\\&#xA;g &amp;amp; \mbox{, the gravitational constant, 9.81 } m/s^2 \\&#xA;r_{\mbox{tire}} &amp;amp; \mbox{, the radius of the tire in m.}&#xA;\end{align}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The normal force of the vehicle against the incline is going to be&#xA;$$&#xA;f_{\mbox{normal}} = mg \cos{\theta} \\&#xA;$$&#xA;The normal force is going to play into your frictional force in that &#xA;$$&#xA;f_{\mbox{friction}} = \mu_{\mbox{rolling}} f_{\mbox{normal}} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The force opposing the vehicle, trying to cause it to roll down the slope, is&#xA;$$&#xA;f_{\mbox{opposing}} = m g \sin{\theta} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, keep in mind that the opposing force and the frictional forces are both &lt;em&gt;at the point of contact between the wheel and the surface&lt;/em&gt;. Also note that frictional coefficients are constant for a given force &lt;a href=&quot;http://www.physlink.com/Education/AskExperts/ae140.cfm&quot; rel=&quot;nofollow noreferrer&quot;&gt;regardless of contact surface area&lt;/a&gt;, so as long as all four tires are equal and evenly loaded, you don't need to worry about the per-tire information &lt;strong&gt;yet&lt;/strong&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, you have your forces to overcome; opposing and friction. Now you need to convert those to torques:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\tau = f r_{\mbox{tire}} \sin{\phi} &#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where here I've used $\phi$ to help distinguish between the applied force angle and the incline angle $\theta$. Anyways, the force is being applied at a right angle, $\sin{90} = 1$, so you can leave that term off and you're left with&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{align}&#xA;\tau_{\mbox{ losses}} &amp;amp;= (f_{\mbox{opposing}} + f_{\mbox{rolling friction}}) r_{\mbox{tire}} \\&#xA; &amp;amp;= (mg( \sin{\theta}+\cos{\theta}  \mu_{\mbox{rolling}})) r_{\mbox{tire}} \\&#xA;\end{align}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now your speed comes into play, with the formula:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;P_{\mbox{rotating}} = \tau_{\mbox{applied}} \omega \\&#xA;$$ &#xA;where $P_{\mbox{rotating}}$ is the rotational power output in Watts, $\tau_{\mbox{applied}}$ is the torque applied in Nm, and $\omega$ is the rotational velocity in rad/s. Your vehicle's linear speed, in $\frac{m}{s}$, is given by:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;v = r_{\mbox{tire}} \omega \\&#xA;$$&#xA;so&#xA;$$&#xA;\omega = \frac{v}{r_{\mbox{tire}}} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Putting it all together:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{align}&#xA;P_{\mbox{rotating}} &amp;amp;= (mg (\sin{\theta} + \cos{\theta} \mu_{\mbox{rolling}})) r_{\mbox{tire}} \frac{v}{r_{\mbox{tire}}} \\&#xA; &amp;amp;= v m g(\sin{\theta} +\cos{\theta} \mu_{\mbox{rolling}})) \\&#xA;\end{align}&#xA;$$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, finally, this is the rotating power required to move the entire vehicle. At this point, however many (equally sized and loaded) tires you use needs to contribute a corresponding fraction of this power; 4 tires = each one needs to deliver at least 1/4 of the power given above. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2015-08-23T13:10:25.157" LastActivityDate="2015-08-23T13:10:25.157" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="7800" PostTypeId="2" ParentId="7786" CreationDate="2015-08-03T22:00:51.427" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Which will have a &quot;better&quot; set of solutions?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I could think of some requirements so &quot;better&quot; becomes a measurable value. A better solution:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;exists&lt;/strong&gt;: As you say, fixing a joint in one position can make it difficult for other joints to reach the position, but it could also become impossible. This may or may not be a real problem, but I think keeping the possibility in mind that there might be no solution due to the choice of a fixed joint is important.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;is reached quickly&lt;/strong&gt;: Each actuator has to move a certain distance (angle). Given that some actuators move quicker than others the time it takes to reach the target position can be optimised. It seems desireable to distribute the motion in a way that minimises the overall time it takes to reach the target position.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;is efficient&lt;/strong&gt;: The first joint has to hold all other parts. It might require more torque/force to move it instead of several other joints. Maybe the joint has a built in break/clamping mechanism that allows it to stay steady without power consumption. If it has no break, how much power is required to stay in the target position? Is there a target position that minimises the overall consumed power (due to different power consumption of joints and/or loads they have to hold in that position)? Power is consumed during the motion and while holding the target position. Given that the target position is only held for a certain amount of time, there could be a trade-off between how to move and what target position to reach in terms of overall power consumption.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;is precise&lt;/strong&gt;: How precise is the motion of the joints? Maybe the last joint has a smaller actuator and is more precise than the first joint (or any other) Is precision necessary?&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;is aware of the application&lt;/strong&gt;: Let's not forget that there's a hand at the end of the arm that's supposed to do something. If each joint can apply different amount of force/torque, a certain motion of all the joints might cause a minimum load that the hand can hold. Take your own hand as an example: consider how much force (in x,y,z direction) your hand can hold. Now keep your hand steady and move your arm. The values probably changed.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;happens in minimum/appropriate space&lt;/strong&gt;: Requiring less space to perform a motion is generally desirable. Are there solutions that keep the overall bounding box of the robot small?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;That list is probably incomplete. As you see, there is a lot of maybe, could, should, probably, in this answer. I guess that a lot of these points are not even worth considering, but then you might have an application that does have very strict requirements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depending on the available computational power and time you have for the IK calculation, run the algorithm for every joint. You can then compare different solutions depending on your requirements. Give each requirement a weight so each solution has a certain score, pick the solution with the highest score.&lt;/p&gt;&#xA;" OwnerUserId="9860" LastActivityDate="2015-08-03T22:00:51.427" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7801" PostTypeId="2" ParentId="172" CreationDate="2015-08-04T12:01:21.473" Score="1" Body="&lt;p&gt;Recent advances in monocular vision based SLAM (ORB_SLAM, LSD_SLAM, SVO) have made it possible to determine a camera's pose w.r.t. an arbitrarily scaled and rotated initial frame. If you combine this information with an IMU and EKF system such as the one from ETH (ethzasl_msf) you can obtain a position estimate even when there is no GPS available. Even better, you can combine a number of pose/position/attitude/etc. sensors in the MSF. &lt;/p&gt;&#xA;" OwnerUserId="10280" LastActivityDate="2015-08-04T12:01:21.473" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7802" PostTypeId="1" CreationDate="2015-08-04T17:38:17.147" Score="4" ViewCount="1071" Body="&lt;p&gt;I am trying to implement an EKF-SLAM using the algorithm for unknown correspondences proposed in the book &quot;Probalistic Robotics&quot; by Sebastian Thrun in Table 10.2 . &lt;/p&gt;&#xA;&#xA;&lt;p&gt;By now I understand actually all of the algorithm except of the initialization of new landmarks in the covariance matrix $ P_{new} $. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In that algorithm when a new landmark is detected the procedure is just the same as if a normal measurment update for an already observed landmark is done: the Kalman gain $ K $ is calculated for the new landmark and then the covariance is updated with that Kalman gain and the jacobian $ H $ of that new landmark like this $ P_{new}=  (I  -  K * H) * P$ . &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my understanding a just new observed landmark would not have any effect on the rows and columns that correspond to already mapped landmarks or the robot pose in the covariance matrix. Instead I think that just two rows and columns for x and y should be created with some uncertainity like proposed here: &lt;a href=&quot;https://robotics.stackexchange.com/questions/4599/the-uncertainty-of-initializing-new-landmark-in-ekf-slam&quot;&gt;the uncertainty of initializing new landmark in EKF-SLAM&lt;/a&gt; .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried to split down the calculation of $ P_{new}$ via claculating it blockwise to see if I could somehow come to the same initialization as shown in the link above. But I end up having a different covariance matrix where apparently the new landmark is effecting the rows and columns of the parts of the old covariance, which in my view can't be right.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope I don't understand the pseudo code of the book wrong or I did a mistake in my try to come to the same initialization. Any advice how the initialization of new lnndmarks work in that code or if it actually is the same as in the link will be appreciated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So basically what I am asking is: why would they do a normal Kalman update of the covariance matrix in line 24 of table 10.2 for a new observed landmark? Why is there no explicit case for the initialization of new rows/columns of new observed landmarks in the covariance matrix? It seems to me like they just do a normal measurement update even for a just newly observed landmark.&lt;/p&gt;&#xA;" OwnerUserId="10281" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2015-11-04T04:48:44.887" Title="EKF-SLAM initialize new landmark in covariance matrix" Tags="&lt;mobile-robot&gt;&lt;slam&gt;&lt;ekf&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7803" PostTypeId="1" AcceptedAnswerId="7808" CreationDate="2015-08-04T21:37:12.240" Score="3" ViewCount="3129" Body="&lt;p&gt;I'm using Matlab to suppress low frequency components with a high pass filter. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Objective&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Filter angular velocity measurements affected by high frequency noise and bias in order to get the best estimate of the angular position.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The output when the gyroscope is still looks like this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/y8isi.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/y8isi.png&quot; alt=&quot;Simulated angular velocity&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;First Approach&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The easiest way to remove baseline is to remove the average and can be achieved with Matlab using one line of code.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;yFilt = y - mean(y)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Second Approach&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We can design a high pass filter to attenuate low frequency components. If we analyze the frequency components of the signal we will see one peak at low frequency and &quot;infinite&quot; small components in all frequencies due to Noise. With a second order ButterWorth filter with normalized cutoff freq &lt;code&gt;Wn = 0.2&lt;/code&gt; we will get what we are looking for.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/FVmKM.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FVmKM.png&quot; alt=&quot;First half of DFT in normalized scale&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Filtered data&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ELXzb.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ELXzb.png&quot; alt=&quot;Filtered data&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Tilting the Gyro&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When we tilt the gyroscope the situation changes. With a sampling frequency of 300Hz we get the following plot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/m1XaJ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/m1XaJ.png&quot; alt=&quot;Angular Velocity Wx [deg/sec]&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first half of the dft is shown below in a normalized scale.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/w8mvU.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/w8mvU.png&quot; alt=&quot;First half of DFT in normalized scale&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can find the sample.mat file &lt;a href=&quot;https://drive.google.com/file/d/0BwU34T-_OF2saFVGS0hqMUk0cVE/view?usp=sharing&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first approach works great. I would like to apply the second one to this particular case but here there are other low frequency components that make to job harder.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;How can I apply the second approach based on the High Pass filter to remove the bias?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT 1&lt;/strong&gt; &#xA;You can find more information &lt;a href=&quot;http://userk.co.uk/filtering-matlab-gyroscope-bias/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT 2&lt;/strong&gt;&#xA;How can we filter this signal to remove bias while keeping the angular velocity information (from 110-th to 300-th sample) intact?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If gyroscopes have the bias problem only when they are not experiencing any rotation, then the offset is present only in the first ~110 samples.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the above hypothesis is correct, maybe if we apply high pass filtering only in the first 110 samples and desactivate the filter during rotations of the gyro, the estimated angular position will be more accurate.&lt;/p&gt;&#xA;" OwnerUserId="6970" LastEditorUserId="6970" LastEditDate="2015-08-05T16:37:43.857" LastActivityDate="2017-05-21T01:20:36.133" Title="Gyroscope - How can I remove low frequency component with a high pass filter only?" Tags="&lt;gyroscope&gt;&lt;matlab&gt;&lt;filter&gt;" AnswerCount="2" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="7805" PostTypeId="2" ParentId="172" CreationDate="2015-08-05T06:21:52.033" Score="4" Body="&lt;p&gt;I know this is an old question but I will just add a bit to the currently existing answers. First, this is a very complex problem that everyone is trying to tackle, including google with their &lt;a href=&quot;https://www.google.com/atap/project-tango/&quot; rel=&quot;nofollow&quot;&gt;Tango project&lt;/a&gt;. In general, to localise indoor you either need to rely on your internal sensors, or get assistances from a indoor infrastructure deployed to assist you locating yourself. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Relying on onboard sensors:&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Using sensors like LIDAR/Lasers, cameras, RGBD sensors, IMUs&lt;/li&gt;&#xA;&lt;li&gt;Perform complex algorithmic sensor fusion to perform some sort of accurate iterative localisation. SLAM (Simultaneous Localisation and Map building) is commonly used. I previously developed a method called &lt;a href=&quot;http://playerstage.sourceforge.net/doc/Player-svn/player/group__driver__mricp.html&quot; rel=&quot;nofollow&quot;&gt;MRICP&lt;/a&gt; (Map Reference Iterative Closest Point) to perform a simple, but error prone localisation. Plenty of literature to look at on that front, including the recent monocular and stereoscopic visual odometry which is quite promising (check vi sensor from &lt;a href=&quot;http://skybotix.com/&quot; rel=&quot;nofollow&quot;&gt;skybotix&lt;/a&gt; or &lt;a href=&quot;https://github.com/uzh-rpg/rpg_svo&quot; rel=&quot;nofollow&quot;&gt;svo&lt;/a&gt;). &lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Rely on infrastructure:&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Beacons (bluetooth, ultraband, Wireless ...)&lt;/li&gt;&#xA;&lt;li&gt;Mocap (motion capture cameras: vicon, visualeyez ...)&lt;/li&gt;&#xA;&lt;li&gt;Encoded positioning in light bulbs (philips is recently experimenting with this)&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In general it really depends on what accuracy you are trying to achieve. In mobile robotics, from my experience, you really need to focus on globally consistent maps, and locally accurate positioning. This means you need to roughly know where you are from a high-level topological manner (this room is connected to the other room on the left, vs the next room on the left is 2.323m away), but locally you should have an accurate position estimation (lasers + IMUs can do this accurately).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this helps.&lt;/p&gt;&#xA;" OwnerUserId="642" LastActivityDate="2015-08-05T06:21:52.033" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7806" PostTypeId="2" ParentId="7778" CreationDate="2015-08-05T06:31:13.203" Score="0" Body="&lt;p&gt;Decades ago I saw some modified robots at a University laboratory - the motors used analogue control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Computers used regular DAC chips to output analogue voltages, these were then amplified using some DIY kit audio amplifiers - effectively DC amplifiers as the input capacitors were removed, replaced by links.  The output of the amplifiers fed the motors directly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However I think this was done simply because the parts were readily available at the time. The amplifiers had failry small heatsinks but needed split/bipolar power supplies, and these days the common PWM method perhaps using microcontrollers would be easier and cheaper.&lt;/p&gt;&#xA;" OwnerUserId="9578" LastActivityDate="2015-08-05T06:31:13.203" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7807" PostTypeId="2" ParentId="7659" CreationDate="2015-08-05T13:09:53.317" Score="0" Body="&lt;p&gt;Try to find the node by typing &quot;rosrun ptam&quot; and then hitting the tab key. If it doesn't show up there, most likely there's something wrong with your package path. I am surprised it works with the other launch file. Did you check the difference between the two launch files? From where (which directories) are you launching them?&lt;/p&gt;&#xA;" OwnerUserId="10280" LastActivityDate="2015-08-05T13:09:53.317" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7808" PostTypeId="2" ParentId="7803" CreationDate="2015-08-05T13:19:45.273" Score="2" Body="&lt;p&gt;&lt;strong&gt;:UPDATED:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the last update I'm going to make to this answer because I feel like you are repeatedly redefining your question.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;You have already designed a Butterworth filter that removes the DC offset, but your question title is &lt;em&gt;&quot;How can I remove low frequency component with a high pass filter&quot;&lt;/em&gt;. What is the problem you are having??&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You ask, in what was the &lt;strong&gt;5th edit&lt;/strong&gt; of your question, but you call &quot;Edit 2&quot;, how you can remove the bias while retaining the signal intact. If you have to do it with a filter (which I DO NOT RECOMMEND), then set the cutoff frequency of your filter an order of magnitude (one decade) below your lowest frequency of interest. Refer to a &lt;a href=&quot;https://en.wikipedia.org/wiki/Bode_plot&quot; rel=&quot;nofollow&quot;&gt;Bode plot&lt;/a&gt; of your filter to see how your filter will modify your signal. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I don't recommend a filter because a bias is called &quot;bias&quot; and not &quot;noise&quot;. This is because a bias is a systematic error - a DC bias will exist in all samples, so you &lt;strong&gt;cannot&lt;/strong&gt; &quot;turn on&quot; a filter when you think you are stationary and then &quot;turn off&quot; the filter when you think you are moving - &lt;em&gt;the DC bias will exist in all signals&lt;/em&gt;. This is why I have suggested you &lt;a href=&quot;https://learn.adafruit.com/calibrating-sensors/why-calibrate&quot; rel=&quot;nofollow&quot;&gt;calibrate your sensor&lt;/a&gt;, which is what you should be doing with &lt;strong&gt;every sensor&lt;/strong&gt; you connect to your system anyways. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You have not provided any information about your testing or application, but if what you say at the end of the current version of your question is correct - &lt;code&gt;maybe if we apply high pass filtering only in the first 110 samples and desactivate the filter during rotations of the gyro, the estimated angular position will be more accurate&lt;/code&gt; - then this would imply that you know, &lt;em&gt;in advance&lt;/em&gt;, when the the gyro is rotating and when it is not. If this is the case, you can remove all of the DC bias accurately, with &lt;em&gt;very little&lt;/em&gt; computational cost, by calculating the signal mean during periods when the gyro is stationary and subtracting that mean from the signal when the gyro is in motion. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;As BendingUnit22 pointed out in the comments, the sample data set you have provided is &lt;em&gt;not representative&lt;/em&gt; of the scenario in which you intend to use the filter, which is making it needlessly difficult for everyone trying to contribute to this problem to divine what you're after.&lt;/li&gt;&#xA;&lt;li&gt;I have to assume your insistence on using a filter is academic because it is more difficult to implement, more computationally expensive, and more likely to skew the data you want to use.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;:Original Content Below:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've moved from a comment to an answer in the hopes that I might clarify/point out some problems you might be having. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding the topics you did ask about:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A DC offset in a sensor like an accelerometer or a gyroscope is called a bias - it's the output of the sensor when the input is zero. &lt;/li&gt;&#xA;&lt;li&gt;For devices like this, you actually &lt;em&gt;would&lt;/em&gt; do a calibration process where you would use your line of code &lt;code&gt;yFilt = y - mean(y)&lt;/code&gt;, but you could more appropriately call it &lt;code&gt;biasOffset = y - mean(y)&lt;/code&gt;. Once you've done the initial calibration you store &lt;code&gt;biasOffset&lt;/code&gt; in nonvolatile memory and use that to adjust future input samples. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Regarding the topics you didn't ask about:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Be careful using a high pass filter when your frequencies of interest are low. In your Figure 3, you have a close approximation of 3/4 of a sine wave starting at 110 seconds and running to 150 seconds. That is, it looks like your signal has a period of about (150-110)/(3/4) = 53.3 seconds, corresponding to a frequency of (1/53.3) = 0.0188 Hz, or 0.118 rad/s. Bear in mind that a filter's &quot;cutoff&quot; frequency doesn't actually cut off all frequency content above or below the designate frequency, but rather the cutoff frequency is generally the half-power (-3dB) point. &lt;a href=&quot;http://www.wescottdesign.com/articles/Sampling/sampling.pdf&quot; rel=&quot;nofollow&quot;&gt;Here's a decent discussion&lt;/a&gt; of filters (page 9) from a signal processing/aliasing perspective, but still worth reading. What I'm trying to say is that you could wind up significantly skewing your desired signal if you choose a cutoff frequency that is anywhere near (within an order of magnitude) of your desired signal frequency. &lt;/li&gt;&#xA;&lt;li&gt;Be careful with units. You caught it! You changed the units on Figure 2 from $m/s^2$ to deg/s - it makes a big difference! Where last night it looked like your sensor was accelerating up to 335km/hr, now it looks like it's turning at 1rpm. That's a big difference! &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;:EDIT:&lt;/strong&gt;&#xA;You have since changed the units on Figure 2 (x-axis) from seconds to samples, which, at 300Hz, means you've changed the time scale from 5 minutes to 1 second. Again, a huge difference, but now this means that your 3/4 sine wave-looking section occurs in 40 &lt;em&gt;samples&lt;/em&gt;, not 40 seconds, which at 300Hz means it happens in 0.1333 seconds. Then, a full sine wave happens in a period of 0.1777 seconds, for a frequency of 5.6257Hz. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note, however, that you are using normalized frequency on your last figure, and your signal frequency, 5.6257Hz, divided by your sampling frequency, 300Hz, gives you 0.0188. This again shows that the low frequency signal I'm assuming you're trying to eliminate is, in fact, the signal you want. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a correction, I had previously stated that you didn't provide time data, but in fact you &lt;em&gt;had&lt;/em&gt; provided sampling frequency, which means that you have indirectly provided time data, given the number of samples in the test data you provided. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2015-08-05T18:56:04.630" LastActivityDate="2015-08-05T18:56:04.630" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="7809" PostTypeId="1" AcceptedAnswerId="7812" CreationDate="2015-08-06T00:07:14.997" Score="0" ViewCount="210" Body="&lt;p&gt;I have an arduino, wires, resistors, all of that good stuff. However, I don't have materials to build the structure of the robot. What do you guys recommend? I don't have a place to solder yet so I can't solder but is there a kit or material that you guys recommend? Will it work well with motors and other stuff? Thanks! &lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S. I plan on building a standard driving robot, but I want to be able to make other robots with the same materials/kit. I don't want a kit that only makes one robot, I want a Lego-esque approach to building the structure where I can build whatever I want with it. (Bump2)&lt;/p&gt;&#xA;" OwnerUserId="10290" LastEditorUserId="10290" LastEditDate="2015-08-06T01:45:06.250" LastActivityDate="2015-08-06T01:51:27.883" Title="Robot structure kit or materials" Tags="&lt;arduino&gt;&lt;beginner&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7811" PostTypeId="2" ParentId="7802" CreationDate="2015-08-06T01:46:17.677" Score="0" Body="&lt;p&gt;Unfortunately, the aforementioned book doesn't address initializing the uncertainty of a new landmark, however, it does address initializing the mean of a new landmark though (i.e. by using the inverse measurement function). In this &lt;a href=&quot;http://www.iri.upc.edu/people/jsola/JoanSola/objectes/curs_SLAM/SLAM2D/SLAM%20course.pdf&quot; rel=&quot;nofollow&quot;&gt;link&lt;/a&gt;, the author addresses the issue. See &lt;code&gt;2.3.4 Landmark initialization for full observations&lt;/code&gt; in the pdf. The bottom line is that you should never ever touch the elements of the uncertainty matrix. The proper way to augment the uncertainty of a new landmark is addressed in the aforementioned pdf. &lt;/p&gt;&#xA;" OwnerUserId="2155" LastActivityDate="2015-08-06T01:46:17.677" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7812" PostTypeId="2" ParentId="7809" CreationDate="2015-08-06T01:51:27.883" Score="0" Body="&lt;p&gt;The Vex robotics platform has many structural pieces you can use to build a robot.  It is basically the same as an old school erector set.  It also contains motors and sensors that you could interface with your Arduino.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The most important part is that it has motor controllers so that you can control the motor.  With a standard Arduino you can not drive a motor directly because it would not be able to handle the current.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.vexrobotics.com/vex/products/&quot; rel=&quot;nofollow&quot;&gt;http://www.vexrobotics.com/vex/products/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10291" LastActivityDate="2015-08-06T01:51:27.883" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7814" PostTypeId="2" ParentId="7802" CreationDate="2015-08-06T02:49:20.687" Score="1" Body="&lt;p&gt;I explained exactly how you can add the new row/columns to the covariance matrix &lt;a href=&quot;https://robotics.stackexchange.com/a/5173/4320&quot;&gt;in this answer&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="4320" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2015-08-06T02:49:20.687" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7815" PostTypeId="1" CreationDate="2015-08-06T03:55:44.040" Score="4" ViewCount="698" Body="&lt;p&gt;I am working on a project that needs tracking location and speed of pedestrians/runners/athletes (so not really robotics, but I see a lot of related usage and posts in the robotics domain, and an answer to this question could help with &lt;em&gt;follower&lt;/em&gt; robots). I'm interested in just the 2D location (latitude-longitude).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using just the GPS position has noisy/jump samples and also the degradation due to multi-path near trees etc. From reading about filtering solutions, I understand that sensor fusion that fuses GPS with the data from inertial sensors (INS) helps improve a lot of these issues. Also, this kind of sensor fusion seems to be used in a lot of places -- robotics, wearables, drones etc. Hence I think there might be off the shelf chips/modules/solutions for this, but I couldn't find any.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found a sensor hub from &lt;a href=&quot;http://www.invensense.com/products/motion-tracking/9-axis/mpu-9250/&quot; rel=&quot;nofollow&quot;&gt;Invensense&lt;/a&gt; that integrates the 9 dof inertial sensors and comes with the fusion firmware, but it doesn't seem to have hookups and firmware for fusing GPS and providing filtered latitude-logitude. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, what should I be looking for? Are there any off the shelf chips/modules/solutions that come with the built in sensor fusion Software/firmware for doing GPS+INS fusion? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I understand that it will still need tuning some params as well as some calibration.&lt;/p&gt;&#xA;" OwnerUserId="10293" LastEditorUserId="37" LastEditDate="2015-08-07T10:36:19.550" LastActivityDate="2015-10-08T20:10:45.567" Title="Are there off the shelf solutions for GPS+INS (accelerometer,gyro,magneto) sensor fusion for getting filtered/fused location and speed output?" Tags="&lt;localization&gt;&lt;kalman-filter&gt;&lt;sensor-fusion&gt;&lt;gps&gt;" AnswerCount="1" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7816" PostTypeId="1" CreationDate="2015-08-06T06:38:29.930" Score="-2" ViewCount="529" Body="&lt;p&gt;I want to use a sensor to find displacement with accelerometer.&#xA;How can I use accelerometer to find displacement? I want to use this for a quadcopter.&lt;/p&gt;&#xA;" OwnerUserId="10287" LastEditorUserId="9860" LastEditDate="2015-08-06T14:18:08.623" LastActivityDate="2017-04-04T07:07:28.777" Title="Displacement with accelerometer" Tags="&lt;quadcopter&gt;&lt;imu&gt;&lt;accelerometer&gt;&lt;uav&gt;" AnswerCount="2" CommentCount="2" ClosedDate="2015-12-15T11:46:22.980" ContentLicense="CC BY-SA 3.0" />
  <row Id="7817" PostTypeId="2" ParentId="7778" CreationDate="2015-08-06T09:41:55.653" Score="1" Body="&lt;p&gt;You are partly right, in thinking that high end Motor drives use a better method. But those methods may not be suitable in your small robot application, just because, to get that ease of control with power, you would need more power electronics(- because the circuit necessarily need to have fine control over current/voltage characteristics, plus feedback of output speed and torque).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With PWM, you always have this control, as you can employ duty cycles varying from 1 to 99 to output varying drive behavior. If for instance, you were using an analogue control, (12Volts)&#xA;&lt;em&gt;1. the circuit needs to have fine control over voltage, which increases circuit complexity.&#xA;2. the feedback needs be there to ensure the voltage fed is at par with poer needed.&lt;/em&gt;&#xA;...and I always prefer PWM, because, it gives finer control without adding much complex electronics, and keeping the fed voltage constant.&#xA;Hope this helps&lt;/p&gt;&#xA;" OwnerUserId="10295" LastEditorUserId="10295" LastEditDate="2015-08-10T12:37:38.397" LastActivityDate="2015-08-10T12:37:38.397" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7818" PostTypeId="2" ParentId="7816" CreationDate="2015-08-06T13:32:19.810" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I want to use a sensor to find displacement with accelerometer&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;An accelerometer &lt;strong&gt;is&lt;/strong&gt; a sensor.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How can I use accelerometer to find displacement?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;By integrating twice, because acceleration is defined as the second derivative of position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a numerical calculation, in every step add the new value from the accelerometer to a sum (that's velocity) and add that sum to another sum, which will be the position. Also, the acceleration and velocity must both be multiplied by the change in time before summing.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;velocity += acceleration*dt&#xA;position += velocity*dt&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="9860" LastEditorUserId="15213" LastEditDate="2017-04-04T07:07:28.777" LastActivityDate="2017-04-04T07:07:28.777" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7819" PostTypeId="1" AcceptedAnswerId="7821" CreationDate="2015-08-06T14:47:06.183" Score="4" ViewCount="1772" Body="&lt;p&gt;How quadcopter's arm length affect stability?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As per my view I'll have better control on copter with longer arms but with stresses in arms and also it doesn't affect lift capabilities.&lt;/p&gt;&#xA;" OwnerUserId="9259" LastEditorUserId="9860" LastEditDate="2015-08-07T06:23:40.107" LastActivityDate="2015-08-07T06:23:40.107" Title="Deciding length of quadcopter arms" Tags="&lt;control&gt;&lt;quadcopter&gt;&lt;stability&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7820" PostTypeId="2" ParentId="7816" CreationDate="2015-08-06T17:27:38.150" Score="3" Body="&lt;p&gt;This will depend on what you mean by &quot;displacement&quot; and for how long you want to do this.  Can you supply more details on what your trying to accomplish and why?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As Bending Unit 22 mentioned, you integrate acceleration to get velocity, and then integrate velocity to get position.  The problem with this though that any drift/error/noise on the accelerometer gets doubled integrated and your positional error will grow quadratically, so there is a good chance you'll need additional sensors to correct for this error.  Whether this error matters to you or how you want to compensate for this error will depend on what you're trying to do, providing more information would be helpful!&lt;/p&gt;&#xA;" OwnerUserId="7647" LastActivityDate="2015-08-06T17:27:38.150" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7821" PostTypeId="2" ParentId="7819" CreationDate="2015-08-06T19:46:13.443" Score="3" Body="&lt;p&gt;For the most part, it will increase the gain of the controller.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;doesn't affect lift capabilities.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Adding weight to something that flies always decreases lift capabilities. However, this influence is likely very small.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So here's your quadrocopter with 1 DOF rotating around an axis:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$a\ddot r + b\dot r + c r$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The general differential equation&lt;sup&gt;1&lt;/sup&gt; for a mechanical system. $r$ is the angle of rotation and $a$, $b$ and $c$ are coefficients describing the system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You have probably concluded by now that &lt;sup&gt;1&lt;/sup&gt;this was a blatant lie, for the obvious lack of the other side of the equal sign. that missing side is the load that you apply. This is usually in the form of rotors, producing thrust. For simplicities sake let's assume that this can be modelled as a force $f$. This force is applied at a distance from the center of rotation and that's where the arm length $l$ comes into play:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$a\ddot r + b\dot r + c r = l f$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Transforming into...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$as^2 R + bsR + cR = l F$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;getting the transfer function of the system that we are interested in:&#xA;$$\frac{R}{F}= \frac{l}{as^2 + bs + c}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\frac{R}{F}$ can be understood as &quot;if I add this much $f$, how much $r$ do I get back?&quot; $l$ is basically the gain. It is a constant factor, written a little differently, this becomes more obvious:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\frac{R}{F}= l\cdot\frac{1}{as^2 + bs + c}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;How much $r$ do I get back?&lt;/em&gt; Can be answered as &quot;$l$ times something&quot;. With a bigger $l$ you get more bang for your buck (or more rotation for your force respectively). Which means your motors don't have to &lt;em&gt;go to 11&lt;/em&gt; all the time.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;But what about stability? Stability can be determined from the roots of the denominator, called poles. The question essentially is how does $l$ influence &#xA;$a$, $b$ and $c$ and how does that affect stability?&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;a&lt;/strong&gt; - moment of inertia: While it's unclear how the mass is distributed in the system, one can assume that, based on the general formula, $l$ has a quadratic influence on a, that is $a = a(l^2)$ That means increasing $l$ will increase $a$ a lot &lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;b&lt;/strong&gt; - damping: This is hard to estimate. I guess most of the damping in the system comes from wind resistance. Increasing $l$ will only add little surface to the copter, hence wind resistance will not increase much (if at all). I conclude that $l$ has little to no influence on $b$&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;c&lt;/strong&gt; - spring coefficient: there's certainly an influence, but you want to keep that as minimal as possible by design, because you want to make the arms as stiff as possible. Nobody likes wobbly structures.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Now where &lt;em&gt;are&lt;/em&gt; the poles?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$s_{1/2} = -\frac{b}{2a} \pm\frac{\sqrt{b^2-4ac}}{2a}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The important part for stability is that $s_{1/2}$ has a negative real part. Increasing $a$ due to increasing $l$ certainly reduces the negativity of the term, but it will not change it to be positive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The conclusion of this very rough estimation is that the system will not become unstable when the arm length is increased.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, this is a &lt;strong&gt;very&lt;/strong&gt; handwavy estimate without knowing any of the actual values. If you want more, &lt;a href=&quot;http://sal.aalto.fi/publications/pdf-files/eluu11_public.pdf&quot; rel=&quot;nofollow&quot;&gt;go&lt;/a&gt; &lt;a href=&quot;http://math.ucsd.edu/~mleok/pdf/LeLeMc2010_quadrotor.pdf&quot; rel=&quot;nofollow&quot;&gt;right&lt;/a&gt; &lt;a href=&quot;http://www.control.lth.se/documents/2008/5823.pdf&quot; rel=&quot;nofollow&quot;&gt;ahead&lt;/a&gt; (&amp;lt;- 3 links)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Quadrocopters are a popular topic not just by enthusiast but also academia, so you find a lot of papers about it, giving more insights on more detailed models of the system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think the rough estimate given in this answer is sufficient to explain the influences of the length of the arm.&lt;/p&gt;&#xA;" OwnerUserId="9860" LastEditorUserId="9860" LastEditDate="2015-08-06T20:50:23.157" LastActivityDate="2015-08-06T20:50:23.157" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7822" PostTypeId="2" ParentId="7660" CreationDate="2015-08-07T01:36:24.187" Score="6" Body="&lt;p&gt;I implemented something like this in College:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/Auburn-Automow/au_automow_common/tree/master/automow_planning&quot; rel=&quot;noreferrer&quot;&gt;https://github.com/Auburn-Automow/au_automow_common/tree/master/automow_planning&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically we just passed the vertices of the boustrophedon path as goals to move_base. Here's a video of a bag file being played back:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=R7nLgYquECg&quot; rel=&quot;noreferrer&quot;&gt;https://www.youtube.com/watch?v=R7nLgYquECg&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's the class paper we did for the planner:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/ashgti/elect6350/tree/master/final_project&quot; rel=&quot;noreferrer&quot;&gt;https://github.com/ashgti/elect6350/tree/master/final_project&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe something in there will give you some ideas. In our case we didn't need to do much cell decomposition in the competition, and instead we relied on the obstacle avoidance of move_base, but in our paper we did show our implementation working with more complex scenarios:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/ashgti/elect6350/blob/master/final_project/images/obstacle.pdf&quot; rel=&quot;noreferrer&quot;&gt;https://github.com/ashgti/elect6350/blob/master/final_project/images/obstacle.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The thing I took away from the experience was that move_base is great for eventually getting from point A to point B and avoiding obstacles along the way, but it was very hard to tune it to follow the path our planner had come up with. As you can imagine when mowing grass you want to follow the path as closely as possible, diverging only when absolutely necessary to avoid obstacles. This was hard to accomplish with move_base.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So YMMV, but move_base is at least a starting place. Hopefully some of the stuff I linked will be useful. Good luck!&lt;/p&gt;&#xA;" OwnerUserId="5573" LastActivityDate="2015-08-07T01:36:24.187" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7823" PostTypeId="1" AcceptedAnswerId="7827" CreationDate="2015-08-07T04:34:52.770" Score="2" ViewCount="112" Body="&lt;p&gt;We're building an 6dof joystick, and we need to accurately measure the displacement of our central device. We can easily use a mechanical connection to the edges, but there has been some discussion about what the best way to achieve this is. The range of motion will be fairly small, but accuracy is incredibly important for us.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which sensors are most easily and accurately measured?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My impulse response is that rotational and linear potentiometers are the most reliable, but others have been arguing for using gyros/accelerometers. I've also heard that hall effect sensors can be used to great effect.&lt;/p&gt;&#xA;" OwnerUserId="10297" LastEditorUserId="10297" LastEditDate="2015-08-07T15:34:16.540" LastActivityDate="2015-08-07T15:34:16.540" Title="Which sensor type most accurately measures position?" Tags="&lt;control&gt;&lt;sensors&gt;&lt;accelerometer&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7824" PostTypeId="2" ParentId="7823" CreationDate="2015-08-07T08:17:47.553" Score="0" Body="&lt;p&gt;I have experience with potentiometers and hall effect sensors. Both are easy to use. I am not sure which one is more precise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a robot hand using hall effect sensors to measure finger position. The advantage, compared with potentiometers, is compacter size and non-contact measurement. &lt;/p&gt;&#xA;" OwnerUserId="10299" LastActivityDate="2015-08-07T08:17:47.553" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7825" PostTypeId="1" AcceptedAnswerId="7826" CreationDate="2015-08-07T08:44:40.683" Score="4" ViewCount="82" Body="&lt;p&gt;I'm searching for a (commercial) projector that just projects a single laser point into the world (e.g. using two moving mirrors). However, I'm struggling because I'm not sure what such a thing is called. I either find area projectors that use lasers, party equipment or laser pointers. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the name for such a device? &lt;/p&gt;&#xA;" OwnerUserId="23196" LastEditorUserId="37" LastEditDate="2015-08-07T10:01:22.740" LastActivityDate="2015-08-07T11:11:20.940" Title="What device do I need to project a laser to point at a specific location?" Tags="&lt;laser&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7826" PostTypeId="2" ParentId="7825" CreationDate="2015-08-07T11:11:20.940" Score="7" Body="&lt;p&gt;The underlying mechanism used by high performance laser painting devices is usually a &lt;em&gt;galvo&lt;/em&gt; (Galvanometer scanner, Laser Galvanometer or Mirror Galvanometer).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;High performance galvos, like this one from scanlab are essential to the  laser &lt;a href=&quot;http://www.scanlab.de/en/applications/micromachining&quot; rel=&quot;noreferrer&quot;&gt;micro-machining&lt;/a&gt; (drilling, cutting, marking) industries:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/File:DynAXIS_L.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/L2wI2.jpg&quot; alt=&quot;Scanlab mirror galvanometer from Wikipedia&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Their cost and performance may significantly exceed your requirements however. These are designed to position themselves in microseconds, to sub-micron (near field) accuracy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sub&gt;I have no association with Scanlab, but I worked for many years in the laser micro-machining industry and they are the products I'm most familiar with.&lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="37" LastActivityDate="2015-08-07T11:11:20.940" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7827" PostTypeId="2" ParentId="7823" CreationDate="2015-08-07T13:33:14.283" Score="3" Body="&lt;p&gt;I would use linear or rotary encoders - the difference in terminology, encoder vs. potentiometer, is in the fact that any linear potentiometer could be used as a linear encoder, but not all linear encoders are potentiometers. From the &lt;a href=&quot;https://en.wikipedia.org/wiki/Linear_encoder&quot; rel=&quot;nofollow&quot;&gt;Wikipedia article on linear encoders&lt;/a&gt;: Optical linear encoders, &quot;following interpolation, can provide resolutions as fine as a nanometre.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've worked on full-scale vehicle autonomy projects before, and I can say that, for the same cost, sealed (IP-67) linear potentiometers are far less expensive and easier to attach than are other forms of linear encoders, but you haven't commented on your application so I don't know if water resistance (or cost for that matter) makes a difference for you. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a final note, there is typically a degree of temperature dependence in resistive elements, so again, be sure to take your expected operating conditions into account when making this selection. A resistive element can provide absolute position but will require a range calibration to correlate readings to position, but other forms of absolute linear position indicators typically do not. You may or may not need absolute position, but again, this all depends on your application. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-08-07T13:33:14.283" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7828" PostTypeId="1" AcceptedAnswerId="7962" CreationDate="2015-08-07T17:14:29.157" Score="12" ViewCount="18751" Body="&lt;p&gt;How are the brushless motors in a gimbal assembly designed?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously it doesn't need continual rotation, but it does need accurate control of precise position. I've noticed that the motors in my gimbal don't have the usual magnetic 'snap' positions that my other motors do. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What are the primary design differences in these kinds of motor, if any?&lt;/p&gt;&#xA;" OwnerUserId="1075" LastActivityDate="2015-09-29T00:16:02.047" Title="How is a brushless gimbal motor different from a regular brushless motor?" Tags="&lt;motor&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7829" PostTypeId="1" AcceptedAnswerId="7833" CreationDate="2015-08-07T21:15:51.847" Score="5" ViewCount="7128" Body="&lt;p&gt;I have created a three wheeled omni robot like the diagram below. Now I am unsure of how to program it. I want to use a single joystick so one x and one y value. The values for x and y are between -1 and 1, also the motors can be set anywhere from -1 to 1. How do I use this data to make the robot move based on the joystick without changing orientations? After doing some initial research this seems like a complex problem, but I am hoping there is a formula that I can.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/xDIs0.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xDIs0.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7810" LastEditorUserId="6890" LastEditDate="2018-09-01T22:15:53.180" LastActivityDate="2018-09-01T22:15:53.180" Title="How to program a three wheel Omni?" Tags="&lt;mobile-robot&gt;&lt;wheeled-robot&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7830" PostTypeId="2" ParentId="1270" CreationDate="2015-08-08T03:20:13.373" Score="4" Body="&lt;p&gt;I found that the FFT of the current waveform of the stepper often shows the natural frequency harmonics of the motor+driver system AND that during a stall extra frequency harmonics appear!!! all you need is a fast, bidirectional current to voltage conversion IC and a narrow band pass filter to detect if the extra harmonics are present.&lt;/p&gt;&#xA;" OwnerUserId="10305" LastEditorUserId="7066" LastEditDate="2015-08-09T14:16:20.310" LastActivityDate="2015-08-09T14:16:20.310" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7831" PostTypeId="1" AcceptedAnswerId="7836" CreationDate="2015-08-08T18:27:15.080" Score="2" ViewCount="1023" Body="&lt;p&gt;I'm working on a Python script which reads the data from the &lt;strong&gt;MPU6050&lt;/strong&gt; IMU and returns the angles using sensor fusion algorithms: &lt;strong&gt;Kalman&lt;/strong&gt; and &lt;strong&gt;Complementary&lt;/strong&gt; &lt;strong&gt;filter&lt;/strong&gt;. Here is the implementation:&#xA;Class MPU6050 reads the data from the sensor, processes it. Class Kalman is the implementation of the Kalman filter. The problem is the next: None of the Kalman, neither the Complementary filter returns appropriate angle values from the &lt;strong&gt;Y&lt;/strong&gt; angle. The filters work fine on the &lt;strong&gt;X&lt;/strong&gt; angle, but the &lt;strong&gt;Y&lt;/strong&gt; angle values make no sense. See the graphs below. I've checked the code million times, but still can't figure out where the problem is. &lt;a href=&quot;https://i.stack.imgur.com/1hgV8.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1hgV8.png&quot; alt=&quot;X angle&quot;&gt;&lt;/a&gt; &lt;a href=&quot;https://i.stack.imgur.com/Hugl7.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Hugl7.png&quot; alt=&quot;Y angle&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;class MPU6050():&#xA;    def __init__(self):&#xA;        self.bus = smbus.SMBus(1)&#xA;        self.address = 0x68&#xA;&#xA;        self.gyro_scale = 131.072 # 65535 / full scale range (2*250deg/s)&#xA;        self.accel_scale = 16384.0 #65535 / full scale range (2*2g)&#xA;&#xA;        self.iterations = 2000                    &#xA;&#xA;        self.data_list = array('B', [0,0,0,0,0,0,0,0,0,0,0,0,0,0])&#xA;        self.result_list = array('h', [0,0,0,0,0,0,0])       &#xA;&#xA;        self.gyro_x_angle = 0.0&#xA;        self.gyro_y_angle = 0.0&#xA;        self.gyro_z_angle = 0.0         &#xA;&#xA;        self.kalman_x = Kalman()&#xA;        self.kalman_y = Kalman()&#xA;&#xA;    def init_sensor()...&#xA;&#xA;    def calculate_angles(self):&#xA;        dt = 0.01&#xA;&#xA;        comp_y = 0.0&#xA;        comp_x = 0.0&#xA;        print(&quot;Reading data...&quot;)&#xA;&#xA;        while True:             &#xA;            self.read_sensor_raw()&#xA;&#xA;            gyro_x_scaled = (self.result_list[4] / self.gyro_scale)&#xA;            gyro_y_scaled = (self.result_list[5] / self.gyro_scale)&#xA;            gyro_z_scaled = (self.result_list[6] / self.gyro_scale)&#xA;&#xA;            acc_x_scaled = (self.result_list[0] / self.accel_scale)&#xA;            acc_y_scaled = (self.result_list[1] / self.accel_scale)&#xA;            acc_z_scaled = (self.result_list[2] / self.accel_scale)&#xA;&#xA;            acc_x_angle = math.degrees(math.atan2(acc_y_scaled, self.dist(acc_x_scaled,acc_z_scaled)))&#xA;            acc_y_angle = math.degrees(math.atan2(acc_x_scaled, self.dist(acc_y_scaled,acc_z_scaled)))&#xA;&#xA;            comp_x = 0.95 * (comp_x + (gyro_x_scaled * dt)) + 0.05 * acc_x_angle&#xA;            comp_y = 0.95 * (comp_y + (gyro_y_scaled * dt)) + 0.05 * acc_y_angle&#xA;&#xA;            kalman_y_angle = self.kalman_y.filter(acc_y_angle, gyro_y_scaled, dt)&#xA;            kalman_x_angle = self.kalman_x.filter(acc_x_angle, gyro_x_scaled, dt)&#xA;&#xA;            self.gyro_x_angle += gyro_x_scaled * dt&#xA;            self.gyro_y_angle -= gyro_y_scaled * dt&#xA;            self.gyro_z_angle -= gyro_z_scaled * dt   &#xA;&#xA;            time.sleep(dt) &#xA;&#xA;    def read_sensor_raw(self):&#xA;        self.data_list = self.bus.read_i2c_block_data(self.address, 0x3B, 14)&#xA;&#xA;        for i in range(0, 14, 2):&#xA;            if(self.data_list[i] &amp;gt; 127):&#xA;                self.data_list[i] -= 256&#xA;&#xA;            self.result_list[int(i/2)] = (self.data_list[i] &amp;lt;&amp;lt; 8) + self.data_list[i+1]&#xA;&#xA;    def dist(self, a,b):&#xA;        return math.sqrt((a*a)+(b*b))&#xA;&#xA;class Kalman():&#xA;    def __init__(self):&#xA;     self.Q_angle = float(0.001)&#xA;     self.Q_bias = float(0.003)&#xA;    self.R_measure = float(0.03)&#xA;&#xA;    self.angle = float(0.0)&#xA;    self.bias = float(0.0)&#xA;    self.rate = float(0.0)&#xA;&#xA;    self.P00 = float(0.0)&#xA;    self.P01 = float(0.0)&#xA;    self.P10 = float(0.0)&#xA;    self.P11 = float(0.0)&#xA;&#xA;def filter(self, angle, rate, dt):&#xA;    self.rate = rate - self.bias&#xA;    self.angle += dt * self.rate&#xA;&#xA;    self.P00 += dt * (dt * self.P11 - self.P01 - self.P10 + self.Q_angle)&#xA;    self.P01 -= dt * self.P11&#xA;    self.P10 -= dt * self.P11&#xA;    self.P11 += self.Q_bias * dt&#xA;&#xA;    S = float(self.P00 + self.R_measure)&#xA;&#xA;    K0 = float(0.0)&#xA;    K1 = float(0.0)&#xA;    K0 = self.P00 / S&#xA;    K1 = self.P10 / S&#xA;&#xA;    y = float(angle - self.angle)&#xA;&#xA;    self.angle += K0 * y&#xA;    self.bias += K1 * y&#xA;&#xA;    P00_temp = self.P00&#xA;    P01_temp = self.P01&#xA;&#xA;    self.P00 -= K0 * P00_temp&#xA;    self.P01 -= K0 * P01_temp&#xA;    self.P10 -= K1 * P00_temp&#xA;    self.P11 -= K1 * P01_temp&#xA;&#xA;    return self.angle&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt;&#xA;I've added some information based on @Chuck's answer:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;self.result_list[3]&lt;/code&gt; contains the temperature&lt;/li&gt;&#xA;&lt;li&gt;In my opinion the compl. filter is implemented correctly: &lt;code&gt;gyro_x_scaled&lt;/code&gt; and &lt;code&gt;gyro_y_scaled&lt;/code&gt; are angular velocities, but they are multiplied by &lt;code&gt;dt&lt;/code&gt;, so they give &lt;strong&gt;angle&lt;/strong&gt;. &lt;code&gt;acc_?_scaled&lt;/code&gt; are accelerations, but &lt;code&gt;acc_x_angle&lt;/code&gt; and &lt;code&gt;acc_x_angle&lt;/code&gt; are &lt;strong&gt;angles&lt;/strong&gt;. Check my comment, where the Complementary filter tutorial is.&lt;/li&gt;&#xA;&lt;li&gt;Yes, there was something missing in the Kalman filer, I've corrected it.&lt;/li&gt;&#xA;&lt;li&gt;I totally agree with you, &lt;code&gt;sleep(dt)&lt;/code&gt; is not the best solution. I've measured how much time the calculation takes, and it is about 0.003 seconds. The Y angle filters return incorrect values, even if &lt;code&gt;sleep(0.007)&lt;/code&gt; or &lt;code&gt;sleep(calculatedTimeDifference)&lt;/code&gt; is used.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The Y angle filters still return incorrect values.&lt;/p&gt;&#xA;" OwnerUserId="6951" LastEditorUserId="6951" LastEditDate="2015-08-09T09:44:36.967" LastActivityDate="2017-08-04T09:45:26.813" Title="Complementary and Kalman filter don't work for Y angle" Tags="&lt;kalman-filter&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7832" PostTypeId="1" AcceptedAnswerId="7834" CreationDate="2015-08-08T18:32:13.087" Score="2" ViewCount="366" Body="&lt;p&gt;I am currently working on a pose estimation problem for which I would like to use filtering. To explain the system briefly, it consists of two cameras and each has its own GPS/IMU module. The main assumption is that Camera1 is fixed and stable, whereas camera2 has a noisy pose in 3D. I am using computer vision to obtain the pose (metric translation and rotation) of camera2 w.r.t. camera1, so that I can improve upon the inherent noise of GPS/IMU modules.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem here is that the translation obtained through the vision method is only up to an arbitrary scale, i.e. at any given instant, I can only obtain a unit vector that specifies the &quot;direction&quot; of the translation and not absolute metric translation. The camera based estimation, although accurate, has no idea about how much actual distance is between the cameras, which is why I have the GPS, which gives me position data with some noise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Example: camera 2 is 5 m to the east of camera 1, the pose from my vision algorithm would say [1, 0, 0] ; 1 m north-east to camera 1, it would be something like [0.7, 0.7, 0]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hence, would it be possible to consider the GPS estimate of the metric translation as well as its covariance ellipse, and somehow link it with the normalized camera measurements to obtain a final, more accurate estimate of metric translation? I am not sure what kind of filters would be happy to use a measurement that has no absolute value in it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="10310" LastActivityDate="2015-08-09T00:43:19.363" Title="Kalman filter for estimating position with “direction” measurements" Tags="&lt;kalman-filter&gt;&lt;cameras&gt;&lt;pose&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7833" PostTypeId="2" ParentId="7829" CreationDate="2015-08-08T20:54:06.800" Score="8" Body="&lt;p&gt;The math involved for controlling a holonomic robot is really not too bad.  It is basically just high-school trigonometry and knowing how to set up the problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, lets start with the joystick.  I think the easiest way to deal with joysticks is to convert it's cartesian $(x,y)$ readings into polar $(r,\phi)$ coordinates.  This will allow us to control the holomonic robot much more naturally.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/PW7zX.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/PW7zX.png&quot; alt=&quot;joystick diagram&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The polar coordinates are simply:&#xA;$$&#xA;\phi_{joy} = atan2(Y_{joy}, X_{joy})&#xA;$$&#xA;$$&#xA;r_{joy} = \sqrt{Y_{joy}^2 + X_{joy}^2}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now we can think of this as a vector, where the angle indicates the direction to move, and the length of the vector is the desired speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/PaCP4.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/PaCP4.png&quot; alt=&quot;speed vector&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If we want full speed to be when the joystick is pushed straight forward, we have a little bit of a problem.  If the joystick is pushed diagonally, $r$ will be greater than when it is forward.  Basically $\sqrt{Y_{max}^2 + X_{max}^2} &amp;gt; Y_{max}$. This is because the joystick space is square, whereas we want a circular space.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/tb4TT.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tb4TT.png&quot; alt=&quot;joystick corner problem&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are a number of ways to compensate for this.  Some simple ways are to make diagonal full speed, but this isn't great because straight forward is not full speed anymore.  You could also simply cap the speed, but now your joystick has a large dead zone.  My preferred method is to adaptively scale $r$ depending on where it is in joystick space.  You need to extend the line of where the joystick is currently $(r,\phi)$, to the boundary of the space.  Let's call this $b$.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/yKkzn.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/yKkzn.png&quot; alt=&quot;adaptive scaling&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Computation of this length is simply a matter of a few conditionals (to determine which side of the square you intersect) and some more trigonometry.  This is left as an exercise for the reader.  Now the translational speed is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;speed_t = maxspeed * r_{joy} / b&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where $maxspeed$ is what ever you want the max translational velocity of your robot to be.  Note that your joystick units cancel out here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now to figure out the individual wheel speeds.  This procedure will work for any type of robot with omni-wheels.  (But not mecanum wheels.  Those are different).  3 wheels, 4 wheels, and even odd combinations with different radii from the robot center and wheel diameters.  As long as all the wheel axes converge at a single point.  But lets focus on 3 wheels as in your question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/hzFWX.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hzFWX.png&quot; alt=&quot;kinds of omni-wheel robots&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, number the wheels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/8ELBn.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8ELBn.png&quot; alt=&quot;wheel numbers&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then create a coordinate system.  (i.e. designate the front of your robot).  Now lets call the angle to each wheel axis.  $\alpha_1$, $\alpha_2$, and $\alpha_3$.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/9yB8q.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9yB8q.png&quot; alt=&quot;wheel angles&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And lets set our convention to be positive motor speeds will make the robot spin clockwise. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/KWrqM.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KWrqM.png&quot; alt=&quot;wheel direction convention&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now we overlay our joystick vector on our robot.  We create a right triangle between the motor axis and the joystick vector.  For wheel 1, it will look like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/1LGUx.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1LGUx.png&quot; alt=&quot;wheel 1 computation&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now wheel 1's speed ($M_1$) is simply the length of the line.  To get this quantity, we subtract the angles, then use $sin$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\theta_1 = \alpha_1 - \phi&#xA;$$&#xA;$$&#xA;M_1 = speed_t * sin(\theta_1)&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that this is actually the ground speed that the wheel should have.  So you will probably want to convert it into rotational velocity (rpm for example).  Use the equation for circle circumference, and keep your units straight.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And that's it.  Believe it or not, but the same equation works for all wheels.  This entire procedure is only for translating the robot.  If you want the robot to rotate too then you can simply add some rotation to all 3 motors.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-08-08T20:54:06.800" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7834" PostTypeId="2" ParentId="7832" CreationDate="2015-08-09T00:43:19.363" Score="1" Body="&lt;p&gt;First, a point of terminology - I believe when you say &quot;direction&quot; what you mean is what is commonly called a &lt;a href=&quot;https://en.wikipedia.org/wiki/Course_(navigation)&quot; rel=&quot;nofollow&quot;&gt;heading&lt;/a&gt;. That is, when you say &quot;direction&quot; what you mean is the angle between an arbitrary line from camera 1 (usually straight forward) and the line between camera 1 and camera 2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assume camera 2 starts at a known distance from camera 1 (sufficiently long for a good filtered GPS location, hand placed, etc.) and assume you know the initial heading. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Call the initial distance between camera 1 and camera 2 $a$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now camera 2 moves. Your IMU reports the distance traveled. Call this distance $b$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Camera 1 reports the change in heading between the initial and second location, this is an angle (from the arc tangent of your camera 1 output). Call this angle $B$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now you have an $a$, a $b$, and a $B$. Use the &lt;a href=&quot;https://en.wikipedia.org/wiki/Law_of_sines&quot; rel=&quot;nofollow&quot;&gt;Law of Sines&lt;/a&gt; to calculate the distance between camera 1 and camera 2 - this will be $c$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can now use a basic Kalman filter to filter the IMU distance output to get a better $b$, and thus a better $c$, and you can use another to combine this reading with your noisy GPS position. The method I've described should give you better short term results than the GPS, and the GPS should correct any drift caused by long term error accumulation. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-08-09T00:43:19.363" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7835" PostTypeId="2" ParentId="7831" CreationDate="2015-08-09T03:21:26.540" Score="0" Body="&lt;p&gt;I've never used Python before in my life, but I'm a Matlab wizard and an engineer, so I'll just go through point-by-point and highlight things that look questionable to me. &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;What is self.result_list[3]? The linear accelerations are 0-2, are you sure you meant to skip 3? Gyro accelerations are 4-6.&lt;/li&gt;&#xA;&lt;li&gt;I see what you're doing using linear accelerations to generate a rotational acceleration,  but keep in mind that technique will only generate valid output if there is no true linear acceleration.&lt;/li&gt;&#xA;&lt;li&gt;Your &lt;code&gt;comp_&lt;/code&gt; calculation leaves off a &lt;code&gt;dt&lt;/code&gt; at the end. I'm assuming you want that to be angular velocity, but you are multiplying sample time to only the gyro acceleration and not the accel term - you are adding a velocity and an acceleration and using that as one term. &lt;/li&gt;&#xA;&lt;li&gt;Your Kalman filter doesn't update its covariance matrix correctly. The code to which you linked uses &lt;code&gt;tempP00&lt;/code&gt; and &lt;code&gt;tempP01&lt;/code&gt; to update P00, P01, P10, and P11. You do not, so you are changing P00 and P01 first, then using those new values to update P10 and P11. Refer to step 7 on the site you linked. &lt;/li&gt;&#xA;&lt;li&gt;I would caution against using a dedicated sample time variable like your &lt;code&gt;dt&lt;/code&gt; in conjuction with &lt;code&gt;sleep&lt;/code&gt;. Your loop polls the sensor and does some calculations, all of which requires time. Say that time is 1ms, and your sample time variable is 10ms (0.01s). Because you pause/sleep for 0.01s and THEN do 1ms of communication and processing, your ACTUAL sample time (time between samples) is 11ms, so the sample time you're using for filtering and numeric integration is off by 10%. It's much better to use an interrupt to time sampling than a sleep command. Here it may not be such an issue, but in the future, with longer code or code with logic that has a variable execution time on a per-sample basis, it could have a bigger impact. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;As mentioned I'm no Python user so I can't comment regarding your syntax or execution otherwise. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-08-09T03:21:26.540" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7836" PostTypeId="2" ParentId="7831" CreationDate="2015-08-09T16:26:40.440" Score="1" Body="&lt;p&gt;I've found the answer: a minus sign is needed here: &lt;code&gt;gyro_y_scaled = - (self.result_list[5] / self.gyro_scale)&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Explanation: &lt;code&gt;gyro_y_scaled&lt;/code&gt; is the velocity in rad/sec. If you check the code, especially lines 29-31 on &lt;a href=&quot;http://blog.bitify.co.uk/2013/11/reading-data-from-mpu-6050-on-raspberry.html&quot; rel=&quot;nofollow&quot;&gt;this page&lt;/a&gt;, you can see, there is a minus sign before &lt;code&gt;math.degrees(radians)&lt;/code&gt;, but my implementation has no minus sign before &lt;code&gt;math.degrees(math.atan2(acc_x_scaled, self.dist(acc_y_scaled,acc_z_scaled)))&lt;/code&gt;. In addition, &lt;code&gt;self.gyro_y_angle -= gyro_y_scaled * dt&lt;/code&gt;, there is also minus sign instead of plus. To sum up, the velocity and the angles, mentioned above, had &quot;opposite&quot; values and this is why the filters didn't work. &lt;/p&gt;&#xA;" OwnerUserId="6951" LastEditorUserId="6951" LastEditDate="2015-08-10T06:05:30.660" LastActivityDate="2015-08-10T06:05:30.660" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7837" PostTypeId="1" CreationDate="2015-08-09T17:36:18.923" Score="2" ViewCount="4744" Body="&lt;p&gt;I am trying to build a 2-axis robot arm with pan and tilt mechanism. The gripper/holder will hold an object weighing 300 grams. The total weight of the arm including the motors will be around 2 kg. I have decided to use 180 degree servo motors. The maximum arm reach will be 340 mm. &#xA;what I want to ask is:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;What kind of servos (analog/digital) will be suitable to support the&#xA;total weight (2 kg) and the object weight (300 g)?&lt;/li&gt;&#xA;&lt;li&gt;How do I calculate the required torque?&lt;/li&gt;&#xA;&lt;li&gt;How many servos should I use to make sure that my arm doesn't flip&#xA;over?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Please suggest me if there is a better approach to designing the robot. I am fairly new to electronics and this is the first time I am building a robot.&#xA;Thanks in advance. &lt;/p&gt;&#xA;" OwnerUserId="10313" LastEditorUserId="110" LastEditDate="2016-03-17T19:57:40.043" LastActivityDate="2016-05-16T21:38:38.447" Title="Type of servo and torque calculation required for a 2axis robot arm" Tags="&lt;robotic-arm&gt;&lt;design&gt;&lt;otherservos&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7838" PostTypeId="1" AcceptedAnswerId="8283" CreationDate="2015-08-09T18:11:37.063" Score="4" ViewCount="360" Body="&lt;p&gt;Are there any standards regarding single vs multiple MCU in a robotic system? More specifically, if a single MCU can handle all of the sensor data and actuator controls, is it better to use a single MCU or multiple MCUs in a hierarchical manner? Are there any references/papers regarding this topic? What are the arguments towards one or the other? I am looking for facts, not personal opinions, so pros, cons, standards and such.&lt;/p&gt;&#xA;" OwnerUserId="4017" LastActivityDate="2015-10-18T05:32:55.273" Title="MCU architecture design" Tags="&lt;design&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7840" PostTypeId="2" ParentId="7815" CreationDate="2015-08-09T19:30:38.480" Score="2" Body="&lt;p&gt;There are many GPS+INS fusion units available on the market. The price, weight and size of the units can vary dramatically depending on the GPS positioning accuracy and rate of drift from the INS. The choice of GPS+INS sensor really depends on the requirements of your application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From my own experience, Xsens (&lt;a href=&quot;https://www.xsens.com&quot; rel=&quot;nofollow&quot;&gt;https://www.xsens.com&lt;/a&gt;) make lightweight version that is the size of a matchbox. This is suitable for lightweight robotics applications or human tracking. Their units can also contain barometers and magnetometers for improved position accuracy. However without a good GPS signal, the INS will quickly drift away from the true location so can be problematic when used indoors or in built-up areas.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a low cost option, it might also be worth looking at what cellphones can provide for your application as as they already contain  GPS, INS, Magnetometers, Barometers, Wifi positioning and cellphone positioning.  &lt;/p&gt;&#xA;" OwnerUserId="10315" LastActivityDate="2015-08-09T19:30:38.480" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7841" PostTypeId="1" CreationDate="2015-08-09T23:35:59.070" Score="2" ViewCount="1528" Body="&lt;p&gt;I am young researcher/developer coming from different (non-robotic) background and I did some research on camera localisation and I came to the point, where I can say that I am lost and I would need some of your help.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have discovered that there is a lot of SLAM algorithms which are used for robots etc. As far as I know they are all in unknown environments. But my situation is different.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My problems and idea at the same time is:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;I will be placed in an known room/indoor environment (dimensions would be known)&lt;/li&gt;&#xA;&lt;li&gt;I would like to use handheld camera&lt;/li&gt;&#xA;&lt;li&gt;I can use predefined landmarks if they would help. In my case, I can put some &quot; unique stickers&quot; on the walls at predefined positions if that would help in any way for faster localisation.&lt;/li&gt;&#xA;&lt;li&gt;I would like to get my camera position (with its orientation etc) in realtime(30 Hz or faster).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;For beginning I would like to ask which SLAM algorithm is the right one for my situation or where to start. Or do you have any other suggestions how to get real time camera positions inside of the known room/environment. It must be really fast and must allow fast camera movements. Camera would be on person and not on robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;thank you in advance.&lt;/p&gt;&#xA;" OwnerUserId="10317" LastEditorUserId="10327" LastEditDate="2015-12-10T01:29:16.603" LastActivityDate="2015-12-10T04:20:17.733" Title="Real-time camera localisation in known environment" Tags="&lt;localization&gt;&lt;slam&gt;&lt;real-time&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7842" PostTypeId="2" ParentId="6659" CreationDate="2015-08-10T02:07:27.267" Score="1" Body="&lt;p&gt;After painstakingly trying to find someone on the internet with more experience on this subject to help me out (to no avail), I finally gave up and decided to take matters into my own hands and figure it out myself!   As it turns out, the constraints are imposed twice as a direct result of applying the chain rule for derivatives when obtaining the gradient of the negative log posterior belief function equal to zero (which is equivalent to finding the maximum of the belief).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, there's no easy way to demonstrate this other than going through the math one step at a time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Problem Setup&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To help explain, let me setup an example to work with.  For simplicity, lets assume that the robot moves in only on direction (in this case, the x-direction).  In one dimension, the covariance matrices for motion and sensor data are simply the variances $\sigma^2_{motion}$ and $\sigma^2_{sensor}$.  Again, for simplicity, let's assume that $\sigma^2_{motion}=\sigma^2_{sensor}=1$.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, let's assume that the robot starts at the point $x_0=0$ and then executes two motion commands in this following order:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Move forward by 10 units ($x_1 = x_0 + 10$)&lt;/li&gt;&#xA;&lt;li&gt;Move forward by 14 units ($x_2 = x_1 + 14$)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Let's also assume that the robot world only contains one landmark $L_0$ which lies somewhere in the 1D world of the robot's motion.  Suppose that the robot senses the following distances to the landmark from each of the three positions $x_0, x_1, x_2$:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;At $x_0$:  The robot sensed Landmark $L_0$ at a distance of 9 units ($L_0-x_0=9$)&lt;/li&gt;&#xA;&lt;li&gt;At $x_1$:  The robot sensed Landmark $L_0$ at a distance of 8 units ($L_0-x_1=8$)&lt;/li&gt;&#xA;&lt;li&gt;At $x_2$:  The robot sensed Landmark $L_0$ at a distance of 21 units ($L_0-x_1=8$)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;(These numbers may look a little strange, but just take them as a given for this exercise).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Belief Function&lt;/strong&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, each of the relative motion and measurement constraints contributes a Gaussian function to the &quot;posterior belief&quot; function.  So, with the information assumed above, we can write the belief function as the product of gaussians as follows:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$Belief = C e^{-\frac{(x_0-0)^2}{2\sigma^2}}e^{-\frac{(x_1-x_0-10)^2}{2\sigma^2}}e^{-\frac{(x_2-x_1-14)^2}{2\sigma^2}} * e^{-\frac{(L_0-x_0-9)^2}{2\sigma^2}}e^{-\frac{(L_0-x_1-8)^2}{2\sigma^2}}e^{-\frac{(L_0-x_2-21)^2}{2\sigma^2}}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that $C$ is a constant, but we won't really need to know the exact value of $C$.  Recall that we assume all the variances $\sigma^2=1$, so we obtain&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$Belief = C e^{-\frac{(x_0-0)^2}{2}}e^{-\frac{(x_1-x_0-10)^2}{2}}e^{-\frac{(x_2-x_1-14)^2}{2}} * e^{-\frac{(L_0-x_0-9)^2}{2}}e^{-\frac{(L_0-x_1-8)^2}{2}}e^{-\frac{(L_0-x_2-21)^2}{2}}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Negative Log Posterior&lt;/strong&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Our main goal is to find the values of $x_0,x_1,x_2,L_0$ that maximize this function.  However, we can make some transformations to the &quot;belief&quot; function that enable us to find the maximum very easily.  First, finding the maximum of the $Belief$ is equivalent to finding the maximum of $log(Belief)$, which allows us to exploit the properties of logarithms which gives us:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$log(Belief)= log(C) - \frac{1}{2}(x_0-0)^2-\frac{1}{2}(x_1-x_0-10)^2-\frac{1}{2}(x_2-x_1-14)^2 -\frac{1}{2}(L_0-x_0-9)^2-\frac{1}{2}(L_0-x_1-8)^2-\frac{1}{2}(L_0-x_2-21)^2$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, finding the maximum of a function $f(x)$ is equivalent to finding the minimum of the function $-f(x)$.  So we can restate this problem as finding the minimum of &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$F\equiv-log(Belief)= -log(C) + \frac{1}{2}(x_0-0)^2+\frac{1}{2}(x_1-x_0-10)^2+\frac{1}{2}(x_2-x_1-14)^2 +\frac{1}{2}(L_0-x_0-9)^2+\frac{1}{2}(L_0-x_1-8)^2+\frac{1}{2}(L_0-x_2-21)^2$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Optimization&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To find the minimum, we take the partial derivative of the $F$ function with respect to each of the variables: $x_0, x_1, x_2,$ and $L_0$:  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$F_{x_0}= (x_0 - 0) - (x_1 - x_0 - 10) - (L_0-x_0-9) = 0$&lt;br&gt;&#xA;$F_{x_1}= (x_1 - x_0 - 10) - (x_2-x_1-14)- (L_0-x_1-8) = 0$&#xA;$F_{x_2}= (x_2 - x_1 - 14) - (L_0-x_2-21) = 0$&lt;br&gt;&#xA;$F_{L_0}= (L_0-x_0-9) + (L_0-x_1-8)+ (L_0-x_2-21) = 0$  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Notice that the 1st and second equations impose the first relative motion constraint $x_1=x_0+10$ twice: the first equation with a negative sign as a result of the chain rule for derivatives and the second equation with a positive sign (also as a result of the chain rule).  Similarly, the second and third equation contain the second relative motion constraint, with opposite signs as a result of applying the chain rule for derivatives.  A similar argument can be said for the measurement constraints in their corresponding equations.  There's no inherent explanation for why it MUST necessarily work out this way... It just happens to have this structure in the end after working out the math.  You may notice that only the initial position constraint $(x_0-0)$ is imposed only once because its quadratic term $\frac{1}{2}(x_0-0)^2$ only features a single variable inside the parentheses, so it is impossible for this term to appear in the gradient of $F$ with respect to any other variable other than $x_0$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was not apparent to me just by looking at the structure of the belief function that the gradient takes on this form without working through the details explicitly.  Of course, I've made a number of simplifying assumptions along the way, including avoiding the problem of &quot;data association&quot; and assuming linear expressions for the motion constraints and measurement constraints.  In the more general version of GraphSLAM, we do not necessarily assume this and the algorithm becomes more complicated.  But in the linear case (that is, with linear motion and measurement constraints), the gradients of the negative log posterior belief function leads to imposing the motion and measurement constraints twice (once with a positive sign, once with a negative sign), each of which is also weighted by the corresponding covariance.  There appears to be no inherent or more fundamental reason why it must necessarily work out this way based upon higher principles... It's just a bunch of trivial calculus that happens to work out this structured way.&lt;/p&gt;&#xA;" OwnerUserId="2295" LastActivityDate="2015-08-10T02:07:27.267" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7844" PostTypeId="2" ParentId="230" CreationDate="2015-08-10T10:53:58.413" Score="1" Body="&lt;p&gt;In contrast to what has been said in the other (rather outdated) answers, I've &lt;em&gt;successfully&lt;/em&gt; tried running ROS on either &lt;strong&gt;Raspbian&lt;/strong&gt; or &lt;strong&gt;Ubuntu&lt;/strong&gt; with a &lt;a href=&quot;https://www.raspberrypi.org/products/raspberry-pi-2-model-b/&quot; rel=&quot;nofollow&quot;&gt;Raspberry Pi 2 Model B&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After some back and forth, I'll stick with Ubuntu:&#xA;While I didn't managed to access the Raspberry camera module with Ubuntu, I see major advantages in its superior package management and compatibility with ROS. You need some odd new ROS feature? Just &lt;code&gt;sudo aptitude install&lt;/code&gt; the package and you're all set.&lt;/p&gt;&#xA;" OwnerUserId="10327" LastActivityDate="2015-08-10T10:53:58.413" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7845" PostTypeId="2" ParentId="812" CreationDate="2015-08-10T13:06:17.363" Score="1" Body="&lt;p&gt;I would suggest you to check the HC-SR04 Ultrasonic Sensor that could easily wired and programmed into your robo vehicle. By adjusting the sensor to correctly emit ultrasound on a fixed object and measuring echo/ping from the object, you can judge the distance quite accurately.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/aTwd5.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/aTwd5.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;Another option would be to lay encoder track(alternate black and white zebra-striped track, so you can use an optical eye -an LDR or LED opto sensor to count the contrast changes while traversing through the track).&#xA;&lt;a href=&quot;https://i.stack.imgur.com/arX6r.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/arX6r.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;(I am not so good with photoshop, HTH :) )&lt;/p&gt;&#xA;" OwnerUserId="10295" LastActivityDate="2015-08-10T13:06:17.363" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7847" PostTypeId="2" ParentId="7472" CreationDate="2015-08-10T14:30:48.060" Score="-1" Body="&lt;p&gt;There are datasheets out there, but none seem to be manufacturers' original, which make them no more worth than toilet paper. What signal protocol(s) does it accept, does it hold presets, for example.&lt;/p&gt;&#xA;" OwnerUserId="10328" LastActivityDate="2015-08-10T14:30:48.060" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7848" PostTypeId="2" ParentId="7841" CreationDate="2015-08-10T17:14:28.247" Score="2" Body="&lt;p&gt;As a matter of fact, if the environment is known a priori, then you don't need SLAM. It is a matter of localization problem which is simpler than SLAM in the sense that the map is given, therefore you don't need to estimate the map. In  &lt;a href=&quot;http://www.probabilistic-robotics.org/&quot; rel=&quot;nofollow&quot;&gt;Probabilistic Robotics&lt;/a&gt; book chapter 7, the localization problem is addressed and they use probabilistic methods for the estimation process. They use 2D laser sensor. In your case, the heavy load is the vision part (i.e. extracting meaningful information from frames), other than that, you need an algorithm for the estimation process (e.g. EKF or Partical Filter) and data association algorithm for the process of matching between the observed features and the features in the given map (i.e. assuming your map is of feature-based type).  &lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="2155" LastEditDate="2015-08-10T21:55:21.910" LastActivityDate="2015-08-10T21:55:21.910" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7849" PostTypeId="2" ParentId="361" CreationDate="2015-08-10T17:29:27.480" Score="-1" Body="&lt;p&gt;I am not sure what type of robot you have but i have been doing robocup rescue line for a few years now. I have come to realise that if you want to follow a line well using PID is a good option. Let me expand on this. If you imagine two light sensors on either side of the line you would want them to be of equal value so that the line is in the middle. You can then use the difference between the value of the two sensors to change the turning percentage of the robot. With this technique it is possible to get a robot to follow a line at extraordinary speeds.&lt;/p&gt;&#xA;&lt;p&gt;In terms of making the robot learn to improve its line tracking abilities. What i came up with is start with your initial PID values higher than you want them to be and use a gyroscopic sensor to measure the frequency of oscillation of the robot as it tracks the line. You can from there create your own function to determine how much to lower your values which acts as an automated reinforcement learning parameter.  So if the oscillations are too high or become unstable then you state this set of parameters are bad.&lt;/p&gt;&#xA;" OwnerUserId="10332" LastEditorUserId="10332" LastEditDate="2021-02-18T12:15:10.040" LastActivityDate="2021-02-18T12:15:10.040" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="7850" PostTypeId="1" AcceptedAnswerId="8173" CreationDate="2015-08-10T19:30:38.450" Score="2" ViewCount="761" Body="&lt;p&gt;I want to control a brushless motor with the &quot;EMAX Simon Series 30amp ESC&quot; and Arduino (Leonardo) board. I am really confused how to do that. I can't understand which beep sounds mean what. I have tested many code examples but they weren't useful.  &lt;/p&gt;&#xA;" OwnerUserId="10333" LastEditorUserId="9176" LastEditDate="2015-08-25T19:07:05.487" LastActivityDate="2015-10-02T22:51:05.633" Title="EMAX ESC Simon Series with arduino" Tags="&lt;arduino&gt;&lt;brushless-motor&gt;&lt;esc&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7851" PostTypeId="2" ParentId="7763" CreationDate="2015-08-11T08:38:29.037" Score="4" Body="&lt;p&gt;The link, &lt;a href=&quot;https://robotics.stackexchange.com/questions/2758/what-are-the-advantages-of-using-the-denavit-hartenberg-representation&quot;&gt;What are the advantages of using the Denavit-Hartenberg representation?&lt;/a&gt;, in Paul's &lt;a href=&quot;https://robotics.stackexchange.com/questions/7763/why-do-we-generally-prefer-dh-parameters-over-other-kinematic-representations-of#comment11400_7763&quot;&gt;comment&lt;/a&gt; provides a correct synopsis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additional, practical benefits are:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;DH provides a guaranteed minimal representation. Very good for linear algebra computations, as you want to use the most compact form that's available.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;DH matrices are very straight-forward to solve. Fast computations are often needed for velocities, accelerations, rotations, translations, center of gravity, all variations of Jacobian derivations, essentially all kinematics.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Using DH with a least-squares technique will help in the reduction of error faster, i.e. faster convergence of the estimated states.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;If you keep reading &quot;Robotics: M P C,&quot; you'll see the same style of linear algebra derivations popping up.  The authors derived these equations to all work with the simple DH matrices.  You can use any other representation, but you'll have to re-derive the kinematics.&lt;/p&gt;&#xA;" OwnerUserId="9314" LastEditorUserId="9176" LastEditDate="2018-09-02T21:39:29.860" LastActivityDate="2018-09-02T21:39:29.860" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7852" PostTypeId="1" CreationDate="2015-08-11T13:20:16.787" Score="1" ViewCount="57" Body="&lt;p&gt;Hi there I just found this old Rx &amp;amp; Tx in my loft and need to know weather it is compatible with my APM micro 2.7.2. I already have telemetry but that does not give me manual control. My guess is I need a new Rx because the current one will make a hash of the electronics on the APM. Thanks in advance[![enter image description here][1]][1]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[![enter image descriptere][2]][2]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/IjEby.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/IjEby.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/dDXch.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dDXch.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10343" LastActivityDate="2015-08-11T13:20:16.787" Title="Olf Futaba Rx &amp; Tx with APM micro 2.7.2?" Tags="&lt;quadcopter&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7853" PostTypeId="1" AcceptedAnswerId="7858" CreationDate="2015-08-12T12:01:22.133" Score="4" ViewCount="1127" Body="&lt;p&gt;Could I have your opinions on PID type selection?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/rrB8u.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rrB8u.png&quot; alt=&quot;Plant with a PID controller&quot;&gt;&lt;/a&gt;&#xA;&lt;strong&gt;System description&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Here comes a very simple system: $\mbox{Output}(t) = k * (\mbox{Input}(t) + \mbox{systemVariable}(t))$. $k$ is constant and $\mbox{systemVariable}(t)$ is a system variable which may change according to time.&lt;/li&gt;&#xA;&lt;li&gt;The goal of the whole system is to maintain system output at $0$. It has to be as close to zero as possible. The controller has to compensate the $\mbox{systemVariable}$.&lt;/li&gt;&#xA;&lt;li&gt;The change ($\mbox{systemVariable}$ ) is modeled by a very slow ramp.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Controller description&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;The controller's input is the output of the system. However, the measurements are always noisy, and I modeled Band-Limited White Noise into the measurements.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;After PID controller, the output goes into an integrator, since the PID controller always calculates the &quot;change&quot; of the plant input. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Questions&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;My original thoughts: Add a PID controller with P=1/k is enough. Since every time the controller gets an error $e$, it can be calculated back that the compensation on controller output shall be $e/k$. However, Matlab auto-tuning always give me a PID. Why is that?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;What is the relation between P of PID and measurement noises? If P is large, the system will tend to be rambling largely, due to the noises. If P is small, the system will tend not to converge to the correct value or very slow. How to make the trade-offs? Or how to prevent system from rambling largely and get quick system responses? &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Thanks a lot!&lt;/p&gt;&#xA;" OwnerUserId="5576" LastEditorUserId="9860" LastEditDate="2015-08-12T14:12:00.690" LastActivityDate="2015-08-12T21:32:41.613" Title="How to tune PID for a Y(t) = k*X(t) system?" Tags="&lt;control&gt;&lt;pid&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7854" PostTypeId="2" ParentId="7853" CreationDate="2015-08-12T13:28:02.860" Score="1" Body="&lt;p&gt;I just re-read your question again, and I realized that you are mistaken about the output of the PID controller. The PID controller, like most controllers, provide exactly the signal that should be sent to the plant. You should &lt;strong&gt;NOT&lt;/strong&gt; be integrating the output of the controller. The PID controller does look at the output error (input - output), but it acts on that output error to provide the appropriate plant input to drive that output error to zero (to get the output to equal the input). Again, &lt;strong&gt;DO NOT&lt;/strong&gt; integrate the output. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your only issue with this system is the noise coming off of your feedback, then why not just use a filter and be done with it? You haven't stated what your plant is, so I don't know why your system variable would be a (unbounded?) ramp.  Even if you are going to decide you need a PID controller, you should still use a filter if you are expecting noisy feedback. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding measurement noise and PID, typically in industry the controllers are only PI, not PID, because a noise spike causes a big derivative term to be erroneously added. That is, all other things in equilibrium, $D = (noise/dT)$, where $P = noise$ and $I = noise*dT$. So, assuming you have a small sample time, noise causes usually no problems on the $I$ term, some on the $P$ term, and a lot on the $D$ term. The best way to mitigate noise is to not introduce it. Use a filter!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Matlab auto-tuning is always going to give you PID because it is stupid in that it does not understand how to exploit specific information about your plant. It provides a system capable of controlling any (SISO) plant. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-08-12T13:28:02.860" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="7855" PostTypeId="1" CreationDate="2015-08-12T13:28:10.093" Score="2" ViewCount="260" Body="&lt;p&gt;I am working with an STM32F103C8 which has a flash size of 64kBytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now i am using ChibiOS 2.6 and the build file is a binary file of 82kBytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using ST-Link Utility, the program is getting dumped into the microcontroller's flash. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is how come a 82kB code fits in the 64kB Flash?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How is the size of that .bin calculated? I am attaching a picture of the display. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did a compare ch.bin with device memory and it doesn't report any errors found.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All parts of the code work just fine, i don't see any problems anywhere tried all the features of the code, nothing breaks or behaves abnormally.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could someone please explain this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/IbB5c.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/IbB5c.png&quot; alt=&quot;STM32 ST-Link Image&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7049" LastActivityDate="2016-08-06T02:25:11.083" Title="How is the absolute flash size calculated in a microcontroller?" Tags="&lt;microcontroller&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7856" PostTypeId="2" ParentId="7472" CreationDate="2015-08-12T16:59:59.223" Score="1" Body="&lt;p&gt;The red one is Vcc+ (positive) generally 5-6V, brown is ground and yellow-orange is the signal, usually a pulse-width modulated signal (PWM). The current depends on the load driven. For no load conditions its usually as low as 500mA when fully loaded may require up to 1A.&#xA;Good Luck and cheers&lt;/p&gt;&#xA;" OwnerUserId="7278" LastActivityDate="2015-08-12T16:59:59.223" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7858" PostTypeId="2" ParentId="7853" CreationDate="2015-08-12T21:32:41.613" Score="4" Body="&lt;p&gt;I had problems understanding the diagram and the question. It might be because you didn't explain every step to keep the question short or just because I use some terminology differently so I'd like to go through this slowly. This is not to say that this is the right way to do it, but so that everybody is on the same page. The comments imply that others are also confused. Essentially, I would identify things differently and in control theory giving something a different name can be a major part of the solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was pretty much in WTF? mode until I saw this in the comments: &lt;code&gt;r+PID_output&lt;/code&gt;, which gave me a hint on how this came to be. Well, at least I think.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;The ramp is &lt;em&gt;not&lt;/em&gt; part of the plant&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;No, not even if it is part of the plant. The reason is that adding the ramp makes the plant nonlinear. An LTI system is a &lt;strong&gt;L&lt;/strong&gt;inear &lt;strong&gt;T&lt;/strong&gt;ime &lt;strong&gt;I&lt;/strong&gt;nvariant system. That means (among other things) shifting the input by some amount of time, should only result in a time shifted output, without changing the input value. The ramp breaks that rule.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the sake of some more confusion, $y = mx + n$ is also nonlinear&lt;sup&gt;1&lt;/sup&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I could come up with some gruesome simile about how you'd want to rather choke on your own innards than doing nonlinear control theory, but instead I'd say let's try to do this with linear control theory. It is able to handle the situation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The plant is just $k$, it's transfer function (which can be calculated now, just another benefit of kicking the ramp out) is simply:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ output (t) = input(t) \cdot k \\ Output(s) = Input(s)\cdot k \\ \frac{Output(s)}{Input(s)} = k$$&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Neither noise nor integrator are part of the controller&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;As you say, the noise isn't created in the controller, so why model it there?&#xA;And the mysterious integrator is removed in a &lt;strong&gt;coincidently&lt;/strong&gt; similar way to the ramp. * cough *&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We are left with the bog standard control loop without a sensor. (a sensor will never be present in this answer, the sensor in the image simply has a transfer function of 1)&#xA;&lt;a href=&quot;https://en.wikipedia.org/wiki/File:Feedback_loop_with_descriptions.svg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FvFIU.png&quot; alt=&quot;open loop block diagram&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Finding a suitable controller for the system&lt;/h2&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;$P=\frac{1}{k}$ is enough. Since every time the controller gets an error e, it can be calculated back that the compensation on controller output shall be $\frac{e}{k}$. However, Matlab auto-tuning always give me a PID. Why is that?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's tempting to use the inverse of the transfer function of the system as a controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That would compensate the system exactly, if you are a glas-half-full kind of person. On the other hand, if you are a glas-already-empty-again-damnit-gotta-order-another-one kind of person, it &lt;em&gt;only&lt;/em&gt; compensates the system exactly. The subtle difference is that a model is never exact. With slight inaccuracies in the model due to real world stuff, compensating the system transfer function exactly is not a good idea.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Adding an integral part for good measure is usually a good idea, one reason is stated &lt;a href=&quot;https://en.wikipedia.org/wiki/PID_controller#Integral_term&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The integral term accelerates the movement of the process towards setpoint and eliminates the residual steady-state error that occurs with a pure proportional controller. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;h2&gt;For those about to ramp, we compensate you&lt;sup&gt;2&lt;/sup&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The existence of the ramp cannot be denied. Instead of modelling it as part of the system, let's model it as the disturbance variable as can be seen in the following image named $W$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://ctms.engin.umich.edu/CTMS/index.php?example=Suspension&amp;amp;section=ControlPID&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/idIrE.png&quot; alt=&quot;closed loop block diagram with disturbance&quot;&gt;&lt;/a&gt;&#xA;&lt;em&gt;hint: a click on the image leads you to the source of the image which is an article on how to simulate disturbance transfer functions with matlab&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Two important properties of a system are:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;how quickly it follows a change of the input, which is kinda moot, because that's constant $0$  in your case&lt;/li&gt;&#xA;&lt;li&gt;how quickly it can compensate a disturbance&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;It's usually a trade-off between both. You can compare them by looking at their transfer functions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's a great image showing that on a non English Wikipedia article. This is optional, so feel free to just skip this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Trouble is that the variables used there have different names. The block diagram with controller $G_R(s)$, system $G_S(s)$ and disturbance $D(s)$ looks like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://de.wikipedia.org/wiki/Datei:Control_structure_B.svg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FVO7H.png&quot; alt=&quot;yet another closed loop diagram with disturbance&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The disturbance transfer function is thus given as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\frac{Y(s)}{D(s)}=\frac{G_S(s)}{1+G_R(s)G_S(s)}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ok, ready? Here it comes:&#xA;&lt;a href=&quot;https://de.wikipedia.org/wiki/Datei:Sprungantwort_der_st%C3%B6rgr%C3%B6%C3%9Fe_mit_angriffspunkt_auf_streckeneingang.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7Ajsc.png&quot; alt=&quot;German plot of responses from different transfer functions&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Don't worry if you don't have the Sauerkraut to read it, because I do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are 4 plots displaying unit jumps of disturbance and input and the output responses to these using two different controllers (both PID controllers but different parameters):&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;the $\color{blue}{\text{thin blue}}$ line is the plot of the input $w(t)$ jumping to $1$ at $t = 0$, it's basically just a horizontal line at 1&lt;/li&gt;&#xA;&lt;li&gt;the $\color{green}{\text{thin green}}$ line is the plot of the disturbance $d(t)$ jumping to $1$ at $t = 10$&lt;/li&gt;&#xA;&lt;li&gt;the &lt;strong&gt;$\color{blue}{\text{thick blue}}$&lt;/strong&gt; line is the response of the output controlled by a controller tuned for quickly adopting changes in the input. As you can see it takes the jump of the input rather well without overshooting much. The disturbance however is not compensated quickly. It causes a huge bump in the plot(up to 1.3) which never fully recovers back to 1 (where it should be) within the visible area of the diagram. &lt;strong&gt;You certainly don't want that.&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;the &lt;strong&gt;$\color{red}{\text{thick red}}$&lt;/strong&gt; line shows the response of the output controlled by a controller tuned to quickly compensate disturbances. The response to the input jump is a disaster, but the response to the disturbance jump at $t = 10$ is barely visible. The disturbance jumps from 0 to 1, but the output only climbs to roughly 1.05 because of that. &lt;strong&gt;This is what you want&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The only difference between the two is what PID parameters were used:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\color{blue}{G_R(s) = \frac{0.8(2s+1)(s+1)}{s}}$$&#xA;$$\color{red}{G_R(s) = \frac{10(2s+1)(s+1)}{s}}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's some factor that should be rather big (10 vs. 0.8) in order to compensate disturbance well, let's call this factor $a$:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$G_R(s) = \frac{a(2s+1)(s+1)}{s}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The generic PID controller has the transfer function&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$G_{PID}(s) = K_p + K_i\frac{1}{s} + K_ds$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I conclude that multiplying all 3 PID parameters by some factor improves how well the system can handle disturbance. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your system is different and your disturbance is a ramp instead of a jump. But the example shows how to analyse a system, which should help you tune your controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The disturbance is also what I'd add the noise to.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;The mysterious integrator&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Now that's all nice, but what the heck is this integrator thingy supposed to be? And how is &lt;code&gt;r+PID_output&lt;/code&gt; a hint?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's a feed forward compensation of the disturbance. &lt;code&gt;r+PID_output&lt;/code&gt; is a hint because it contains the &lt;strong&gt;+&lt;/strong&gt;, which indicates that this is supposed to be a feed forward. The problem is that in the block diagram, it is a separate block &lt;strong&gt;after&lt;/strong&gt; the PID controller, which means in the block diagram, it is actually $r \cdot PID_{output}$, which is &lt;strong&gt;not&lt;/strong&gt; how feed forward should be.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The following image shows how a feed forward compensates disturbance: (with yet again differently named variables)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.atp.ruhr-uni-bochum.de/rt1/syscontrol/node88.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XuQU2.gif&quot; alt=&quot;feed forward&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The compensation of the disturbance is indeed added &lt;strong&gt;after&lt;/strong&gt; the controller. As can be seen in the image, it is added via a negative summation node.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As seen above, the controller itself should be able to handle disturbance, because it is tuned to do only that in your use case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A feed forward can take some workload off the controller. If you really think this is neccessary, go ahead and add the feed forward. I would keep it separate from the controller, for better readability, although adding the feed forward will basically just change some parameters of the PID controller.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; &lt;a href=&quot;https://electronics.stackexchange.com/questions/29636/how-i-can-set-up-a-transfer-function-of-y-mxc&quot;&gt;check this proof on electronics.SE&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;2&lt;/sup&gt; with apologies to AC/DC&lt;/p&gt;&#xA;" OwnerUserId="9860" LastEditorUserId="-1" LastEditDate="2017-04-13T12:33:08.317" LastActivityDate="2015-08-12T21:32:41.613" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="7860" PostTypeId="1" CreationDate="2015-08-13T08:41:59.687" Score="3" ViewCount="1316" Body="&lt;p&gt;I need an iRobot Create Serial Cable (one end 7-pin Mini-DIN Connector and the other end is USB) for Turtlebot I.  How can I connect my bot to my PC?&lt;/p&gt;&#xA;" OwnerUserId="10355" LastEditorUserId="110" LastEditDate="2015-08-14T13:16:02.130" LastActivityDate="2015-08-24T11:44:26.090" Title="iRobot Create Serial Cable for Turtlebot I" Tags="&lt;mobile-robot&gt;&lt;irobot-create&gt;&lt;serial&gt;&lt;roomba&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7864" PostTypeId="1" AcceptedAnswerId="7865" CreationDate="2015-08-14T07:47:08.320" Score="9" ViewCount="2830" Body="&lt;p&gt;I know that RC servo motors are designed for precise movement, rather than a D.C. motor's continual rotation. Are most RC servo motors limited to movement within one rotation or can they actually be made to continually rotate? That is to say, is their movement limited to a specific arc? Or does it depend on the type of RC servo motor?&lt;/p&gt;&#xA;&lt;p&gt;I have seen videos of &lt;a href=&quot;https://www.youtube.com/watch?v=EAUcQM5KChc&quot; rel=&quot;nofollow noreferrer&quot;&gt;industrial size steppers rotating constantly&lt;/a&gt;, but, more specifically, I was wondering whether a MG995 can.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/vmpb3m.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vmpb3m.jpg&quot; alt=&quot;MG995 Stepper motor&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I don't own any RC servo motors yet, so I can't actually test it myself. I just want to make sure before I make a purchase. I keep seeing conflicting information, for example the instructable, &lt;a href=&quot;http://www.instructables.com/id/How-to-modify-a-servo-motor-for-continuous-rotatio/&quot; rel=&quot;nofollow noreferrer&quot;&gt;How to modify a RC servo motor for continuous rotation (One motor walker robot)&lt;/a&gt;, implies that a RC servo motor will not continually rotate, else otherwise, why would there be a need to modify it?&lt;/p&gt;&#xA;&lt;h3&gt;Addendum&lt;/h3&gt;&#xA;&lt;p&gt;I have just realised, after &lt;a href=&quot;https://learn.adafruit.com/all-about-stepper-motors/what-is-a-stepper-motor&quot; rel=&quot;nofollow noreferrer&quot;&gt;further digging about&lt;/a&gt; on google, and as HighVoltage points out in &lt;a href=&quot;https://robotics.stackexchange.com/questions/7864/can-stepper-motors-continually-rotate#answer-7865&quot;&gt;their answer&lt;/a&gt;, that I have confused steppers and servos.&lt;/p&gt;&#xA;&lt;p&gt;In addition, I found out &lt;a href=&quot;https://www.youtube.com/watch?v=cnOKG0fvZ4w&quot; rel=&quot;nofollow noreferrer&quot;&gt;how to hack the TowerPro MG995 Servo for continuous rotation&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="9176" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2017-06-28T19:46:04.013" Title="Can RC servo motors continually rotate?" Tags="&lt;stepper-motor&gt;&lt;rcservo&gt;" AnswerCount="3" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="7865" PostTypeId="2" ParentId="7864" CreationDate="2015-08-14T09:11:05.210" Score="12" Body="&lt;p&gt;In a nutshell, servo motors and stepper motors are not technically the same things. The link you posted is only for servos and not stepper motors. A servo motor assembly does not rotate freely like a DC motor. The rotation angles are usually limited, and every servo has a &quot;lock&quot; position where it stays by default. A positive pulse makes it move clockwise, negative makes it move counterclockwise. Even if it needs to stay &quot;locked&quot;, it needs a pulse at a high frequency telling it to stay there. Although the motor by itself is CAPABLE of running continuously, that's not how servos are meant to be used. Hence the need for modifications.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Stepper motors on the other hand, as the name states, move in steps. It moves from one electromagnet to the other, in a slow, precise fashion depending on which one is energized. So if you set a very high number of &quot;steps&quot;, and if your driving waveform is smooth enough, the motor will exhibit a near continuous rotation. Because of all the energizing needed, it needs a special driving circuit as well.&lt;/p&gt;&#xA;" OwnerUserId="10310" LastEditorUserId="10310" LastEditDate="2016-12-01T17:58:45.540" LastActivityDate="2016-12-01T17:58:45.540" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7866" PostTypeId="2" ParentId="7860" CreationDate="2015-08-14T10:44:29.160" Score="2" Body="&lt;p&gt;The iRobot Create and Roomba may have a rather unusual 7-pin mini-din socket for their serial interface, but it is otherwise a fairly standard 5v serial port.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since the original &lt;a href=&quot;http://store.irobot.com/product/index.jsp?productId=2586254&amp;amp;cp=2600082&amp;amp;ab=CMS_AccessNavLP_Create_9_27&amp;amp;parentPage=subcategory&quot; rel=&quot;nofollow noreferrer&quot;&gt;iRobot Create cable&lt;/a&gt; no longer seems to be available, if you already have a USB serial adapter and don't want to buy the new &lt;a href=&quot;http://store.irobot.com/communication-cable-create-2/product.jsp?productId=54235746&amp;amp;cp=3335976&amp;amp;parentPage=family&quot; rel=&quot;nofollow noreferrer&quot;&gt;iRobot Create 2 cable&lt;/a&gt;, then you may want to make your own RS232 iRobot Create cable.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;It is fairly easy to &lt;a href=&quot;http://hackingroomba.com/projects/build-a-roomba-serial-tether/&quot; rel=&quot;nofollow noreferrer&quot;&gt;create your own serial to roomba adapter&lt;/a&gt; with a standard RS232 cable, an 8-pin mini-din cable (the middle pin is just ignored), a MAX232 RS-232 transceiver IC, a 78L05 voltage regulator, an LED, a resistor and a few capacitors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.flickr.com/photos/todbot/95542287/sizes/l/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/C3UMv.jpg&quot; alt=&quot;Roomba mini-DIN-8 to RS-232 DB-9 serial interface parts (cc by-nc)&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can connect it all together with a small piece of prototyping board, and some basic electronics tools.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.flickr.com/photos/todbot/94701997/sizes/l/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZMJdQ.jpg&quot; alt=&quot;Roomba mini-DIN-8 to RS-232 DB-9 serial interface (cc by-nc)&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you have your Roomba serial to RS-232 cable, you just need to add a standard off the shelf USB to RS-232 adapter/cable to complete your connection.&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="37" LastEditDate="2015-08-24T11:44:26.090" LastActivityDate="2015-08-24T11:44:26.090" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7867" PostTypeId="2" ParentId="7864" CreationDate="2015-08-14T11:19:45.773" Score="6" Body="&lt;p&gt;Whether a motor can spin continuously depends how is is constrained by other parts of the system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An &lt;a href=&quot;https://en.wikipedia.org/wiki/Servo_%28radio_control%29&quot; rel=&quot;nofollow&quot;&gt;rc servo&lt;/a&gt; like the &lt;a href=&quot;http://www.servodatabase.com/servo/towerpro/mg995&quot; rel=&quot;nofollow&quot;&gt;MG995&lt;/a&gt; will typically have a motor, a gearbox and a limited travel &lt;a href=&quot;https://en.wikipedia.org/wiki/Potentiometer&quot; rel=&quot;nofollow&quot;&gt;potentiometer&lt;/a&gt; to provide position feedback. It is this final component which prevents the rc-servo from rotating continuously. In the case of the MG995, it can apparently be &lt;em&gt;purchased with 180 or 360 degree rotation for robotics applications&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you remove this constraint, there may still be other constraints. If your motor is controlling the movement of a robot arm for instance, it may be constrained by mechanical end-stops on the joints, or cabling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I once worked for a company which created a robot for &lt;a href=&quot;http://cordis.europa.eu/esprit/src/results/res_area/iim/iim18.htm&quot; rel=&quot;nofollow&quot;&gt;de-heading fish&lt;/a&gt;, this had a shoulder joint which could rotate continuously, picking up each fish from one conveyor, orienting it correctly, presenting it to the cutting discs, dropping the de-headed fish onto another conveyor and then swinging around to pick up the next fish.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to get electrical power and control signals to the joints further down the kinematic chain, it used slip rings on the shoulder joint with some fancy power smoothing and signal correction techniques (slip rings are electrically &lt;em&gt;very noisy&lt;/em&gt;).&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="37" LastEditDate="2015-08-14T18:44:10.170" LastActivityDate="2015-08-14T18:44:10.170" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7868" PostTypeId="2" ParentId="7472" CreationDate="2015-08-14T12:23:35.057" Score="0" Body="&lt;p&gt;According to &lt;a href=&quot;http://www.micropik.com/PDF/SG90Servo.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this datasheet&lt;/a&gt;&lt;sup&gt;(1)&lt;/sup&gt;, the red and brown wires are power and ground, while the orange wire is the &lt;a href=&quot;https://en.wikipedia.org/wiki/Pulse-width_modulation&quot; rel=&quot;nofollow noreferrer&quot;&gt;PWM&lt;/a&gt; control (as &lt;a href=&quot;https://robotics.stackexchange.com/a/7856/37&quot;&gt;Vinokanth Velu suggested&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PWM line expects a pulse every 20ms. If the pulse is 1.5ms wide, the SG90 will move towards the midpoint of its 180 degree travel (position 0). If the pulse is 2ms, then it will move all the way to the right (position 90), while a pulse of 1ms, will move it all the way to the left (position -90).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The deadband determines the minimum move you can specify, 10us (as suggested by this datasheet) would be around 1.8 degrees, 1us (as the &lt;a href=&quot;http://www.towerpro.com.tw/product/sg90-7/&quot; rel=&quot;nofollow noreferrer&quot;&gt;manufacturer specifies&lt;/a&gt;) would be 0.18 degrees.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for how much power it will draw, that depends on what you are asking it to do. Holding position with no force will take very little power, swinging from one extreme to the other and back with the full 1.80 kg-cm force would take significantly more.&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2015-08-14T12:23:35.057" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7869" PostTypeId="2" ParentId="7860" CreationDate="2015-08-14T13:13:49.250" Score="1" Body="&lt;p&gt;The new Create2 cable should work with old Creates and all versions of Roomba.  You can purchase one at the &lt;a href=&quot;http://store.irobot.com/communication-cable-create-2/product.jsp?productId=54235746&quot; rel=&quot;nofollow&quot;&gt;iRobot web store&lt;/a&gt;.  And &lt;a href=&quot;http://www.irobotweb.com/~/media/MainSite/PDFs/About/STEM/Create/Create_2_Serial_to_USB_Cable_Creation.pdf?la=en&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt; are instructions how to make a cable yourself using an FTDI serial to USB converter.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please also see &lt;a href=&quot;http://www.irobot.com/About-iRobot/STEM/Create-2/Projects.aspx&quot; rel=&quot;nofollow&quot;&gt;www.irobot.com/create&lt;/a&gt; for more Roomba and Create hacks.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-08-14T13:13:49.250" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7870" PostTypeId="1" CreationDate="2015-08-15T09:13:03.130" Score="5" ViewCount="1643" Body="&lt;p&gt;I am currently working on a &lt;a href=&quot;https://www.youtube.com/watch?v=oVgBeTJ4OwY&quot; rel=&quot;nofollow noreferrer&quot;&gt;balancing robot project&lt;/a&gt;, which features fairly low-cost sensors such as an 9-Dof IMU with the measurement states&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\textbf{x}_\text{IMU} = \left[a_x, a_y, a_z, g_x, g_y, g_z, m_x,m_y,m_z \right]^\text{T}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Currently I use the accelerometer and gyroscope readings, fused by a complimentary filter to get the angular deviation of the robot's upright (stable) position. The magnetometer values are tilt-compensated and yield the robots orientation with respect to the earth-magnetic field (awful when close to magnetic distortion). Furthermore I have pretty decent rotational encoders mounted on the wheels which deliver information on a wheel's velocity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\textbf{x}_\text{ENC} = \left[v_l,v_r\right]^\text{T}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given these measurements i want to try to get the robots pose (position + heading).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\textbf{x}_\text{ROB} = \left[x,y,\theta\right]^\text{T}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do have minor theoretical knowledge on EKF or KF, but it is not sufficient for me to actually derive a practical implementation. Note that my computational resources are fairly limited (Raspberry Pi B+ with RTOS) and that I want to avoid using ROS or any other non-std libs. Can anybody help me on how to actually approach this kind of problem?&#xA;&lt;a href=&quot;https://i.stack.imgur.com/g0imv.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/g0imv.jpg&quot; alt=&quot;overview&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10374" LastEditorUserId="10374" LastEditDate="2015-08-15T19:13:43.220" LastActivityDate="2015-08-15T19:13:43.220" Title="Simple Sensor Fusion for pose estimation" Tags="&lt;sensors&gt;&lt;kalman-filter&gt;&lt;imu&gt;&lt;sensor-fusion&gt;&lt;odometry&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7871" PostTypeId="2" ParentId="7870" CreationDate="2015-08-15T14:25:48.747" Score="3" Body="&lt;p&gt;So you have acceleration readings from your IMU (linear and angular), and you get velocity readings (linear only) from wheel encoders.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Get velocity from linear and angular accelerations with&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;v = v + a*\mbox{dT}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Get angular velocity from your wheel encoders by exploiting geometry of the vehicle&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\dot{\theta} = \mbox{atan2}((v_r - v_l) , \mbox{wheel base})&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now you have two sources of linear and angular velocities - the IMU and the wheel encoders. Get to linear and angular positions with&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;x = x + v*\mbox{dT}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here I've used $x$ but of course it's just a variable to use for whatever position you're interested in using.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now you have heading and position from the IMU (via linear x and y accelerations and the z gyro), you have heading and position from the wheel encoders, and heading via the magnetometer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would suggest filtering IMU outputs before integration, but you can use whatever filter you want - lag, Kalman, or something more complicated. If computational simplicity is a priority I would highly suggest you check out the &lt;a href=&quot;http://my.execpc.com/~steidl/robotics/first_order_lag_filter.html&quot; rel=&quot;nofollow&quot;&gt;lag filter&lt;/a&gt;. It's basically a complimentary filter using the current sample and previous sample instead of two different sensors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, you can fuse the sensor readings with the complimentary filter. I don't think I can advise you as to which input you should place more emphasis because that will depend primarily on wheel slip (how much you &quot;trust&quot; the wheel encoder).&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-08-15T14:25:48.747" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="7872" PostTypeId="1" AcceptedAnswerId="7873" CreationDate="2015-08-15T16:01:52.207" Score="1" ViewCount="91" Body="&lt;p&gt;I want to conduct the following experiment:&#xA;I want to set up a scene with a kuka lwr4+ arm, a 3D model of an object and a camera overlooking them. I want to find the pose of the object using some pose estimation algorithm and move the arm towards the object. &#xA;In general I want a piece of software or a combination of cooperating software that can do all that without having to reinvent the wheel. Is there anything available?&lt;/p&gt;&#xA;" OwnerUserId="7107" LastActivityDate="2015-08-15T16:13:30.967" Title="Simulation environment for conducting visual servoing experiment" Tags="&lt;software&gt;&lt;simulation&gt;&lt;visual-servoing&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7873" PostTypeId="2" ParentId="7872" CreationDate="2015-08-15T16:13:30.967" Score="0" Body="&lt;p&gt;You could consider taking a look at &lt;a href=&quot;http://gazebosim.org/&quot; rel=&quot;nofollow&quot;&gt;Gazebo Robotic Simulation&lt;/a&gt; and the &lt;a href=&quot;http://www.ros.org/&quot; rel=&quot;nofollow&quot;&gt;Robot Operating System&lt;/a&gt;. Both might require a bunch of work getting used to, but I am sure it is worth the effort.&lt;/p&gt;&#xA;" OwnerUserId="10374" LastActivityDate="2015-08-15T16:13:30.967" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7874" PostTypeId="1" CreationDate="2015-08-15T17:00:49.197" Score="1" ViewCount="587" Body="&lt;p&gt;I am new to the create 2 and I downloaded real term to program, opened an interface to the robot and send numbers with it to the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can only get the drive command to work. I only know how to make the robot go faster, turning around or slower.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to know how to make the other commands work along with making it go left and right.&lt;/p&gt;&#xA;" OwnerUserId="10377" LastEditorUserId="134" LastEditDate="2015-08-17T16:03:40.830" LastActivityDate="2017-11-09T13:12:07.330" Title="What commands make the irobot create 2 go left and right not just forwards and backwards?" Tags="&lt;irobot-create&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7875" PostTypeId="2" ParentId="7874" CreationDate="2015-08-15T17:45:30.180" Score="2" Body="&lt;p&gt;&lt;a href=&quot;http://www.irobot.com/~/media/MainSite/PDFs/About/STEM/Create/create_2_Open_Interface_Spec.pdf&quot; rel=&quot;nofollow&quot;&gt;The documentation&lt;/a&gt; states on page 12:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;A Drive command with a &#xA;  positive velocity and a positive radius makes Room&#xA;  ba drive forward while turning toward the left.  A &#xA;  negative radius makes Roomba turn toward the right. &#xA;   Special cases for the radius make Roomba turn in &#xA;  place or drive straight, as specified below&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The radius value is documented this way:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Radius (-2000 – 2000 mm)   &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;strong&gt;Special cases:&lt;/strong&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Straight = 32768 or 32767 = 0x8000 or 0x7FFF  &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Turn in place clockwise = -1 = 0xFFFF&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Turn in place counter-clockwise = 1 = 0x0001&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Obviously supply different values if you are not trying to achieve any of those special cases, like in the example that follows:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;To drive in reverse at a velocity of -200 mm/s while&#xA;   turning at a radius of 500mm, send the following &#xA;  serial byte sequence:  &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;[137] [255] [56] [1] [244] &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;em&gt;Explanation:&lt;/em&gt; &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Desired value -&gt; two’s complement and convert to hex -&gt; split into 2 bytes -&gt;&#xA;   convert to decimal &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Velocity = -200 = 0xFF38 = [0xFF] [0x38] = [255] [56] &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Radius = 500 = 0x01F4 = [0x01] [0xF4] = [1] [244] &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="9860" LastActivityDate="2015-08-15T17:45:30.180" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7877" PostTypeId="1" CreationDate="2015-08-15T19:04:13.843" Score="1" ViewCount="869" Body="&lt;p&gt;Recently we've encountered Kalman filter algorithm for state estimation in a course of Probabilistic Robotics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After taking several days to try to read Kalman's original paper published in 1960, &lt;a href=&quot;https://www.cs.unc.edu/~welch/kalman/media/pdf/Kalman1960.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;A New Approach to Linear Filtering and Prediction Problems&lt;/a&gt;, it firstly feels a bit difficult to read, and it seems the majority is to show the orthogonal projection is the optimal estimation under certain conditions and solutions to Wiener's problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I did not find the exact algorithm in this original paper as the one in the textbook. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;For example, is there an explanation of &quot;Kalman gain&quot; in this paper ?&lt;/li&gt;&#xA;&lt;li&gt;Does Kalman's paper provide a mathematical derivation of Kalman&#xA;filter algorithm?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6808" LastEditorUserId="20709" LastEditDate="2018-07-09T11:54:56.573" LastActivityDate="2018-07-09T16:10:12.437" Title="Original paper of Kalman filter" Tags="&lt;kalman-filter&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="7879" PostTypeId="1" AcceptedAnswerId="7880" CreationDate="2015-08-16T16:29:05.110" Score="4" ViewCount="138" Body="&lt;p&gt;Can anyone please explain me these lines found on &lt;a href=&quot;http://www.diva-portal.org/smash/get/diva2:796235/FULLTEXT01.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;page 5 of &#xA;&lt;em&gt;Kinematics Equations for Differential Drive and Articulated Steering&lt;/em&gt;&#xA;by &lt;em&gt;Thomas Hellström&lt;/em&gt;&lt;/a&gt;?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Note that plugging in $r$ and $v$ for both left and right wheel result in the same $\omega $ (otherwise the wheels would move relative to each other). Hence, the following equations hold:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;$$&#xA;\begin{align}&#xA;\omega~ \left(R+\frac{l}{2}\right) &amp;amp;= v_r\\&#xA;\omega~ \left(R-\frac{l}{2}\right) &amp;amp;= v_l\\&#xA;\end{align}$$&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;where $R$ is the distance between ICC and the midpoint of the wheel axis, and $l$ is the&#xA;  length of the wheel axis (see Figure 6). &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/M9Y7g.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/M9Y7g.png&quot; alt=&quot;Figure 6&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Figure &#xA;  6&#xA;  .&#xA;  When left and right wheel rotate with different speeds, the robot rotates around&#xA;  a common point denoted ICC&#xA;  My questions are:&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;How do these equations come to be?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Why does $\omega$ have to be same if we want to analyse the behavior after changing the wheel velocity relative to other?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;How do we know about the circle, in which the robot rotates by doing variations in one wheel velocity, surely passes through the center point between two wheels.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="10381" LastEditorUserId="37" LastEditDate="2015-08-17T15:15:17.250" LastActivityDate="2015-08-17T15:15:17.250" Title="Forward kinematics: Why ω should remain same?" Tags="&lt;mobile-robot&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7880" PostTypeId="2" ParentId="7879" CreationDate="2015-08-16T19:02:53.497" Score="1" Body="&lt;p&gt;Recall that for a circle with radius $r$, the circumference $u$ (that is the arc length of the &quot;curve&quot;) is given as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$u = 2 \pi r$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further recall the definition or radians, which is something along the lines of:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If a rope of length $r$ is placed on the circumference of a circle&#xA;  that has the radius $r$, the rope will &quot;cover&quot; a certain angle. This&#xA;  angle is 1 radian.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The following awesome animation from the &lt;a href=&quot;https://en.wikipedia.org/wiki/Radian&quot; rel=&quot;nofollow noreferrer&quot;&gt;wikipedia article on radian&lt;/a&gt; covers this better than my words:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/File:Circle_radians.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4fEl7.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can now see how both are somewhat similar:&#xA;If you multiply the angle $1 rad$ with $2\pi $, you also get a rope length of $2\pi r$. Now this rope length is exactly the same as $u$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We can therefore conclude:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The $2\pi$ in the formula for the circumference $u=2\pi r$ corresponds to the covered angle of the circle. A full circle is $360°$, which is equivalent to $2\pi $. Let's call this angle $\omega$ and write the formula again, with that angle:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$u = \omega r$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Arc_%28geometry%29#Length_of_an_arc_of_a_circle&quot; rel=&quot;nofollow noreferrer&quot;&gt;The wikipedia article about the arc length of a circle&lt;/a&gt; comes to the same conclusion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can calculate any arc length given any angle. For example, half a circle, with an angle of $180° = \pi $ has (obviously) half the circumference:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\frac{u}{2} = \frac{\omega}{2} r$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or one third of a circle has this circumference:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\frac{u}{3} = \frac{\omega}{3} r$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I mixed the terms circumference and arc length within my answer on purpose. If you think of the circumference as a &lt;em&gt;length&lt;/em&gt; you can imagine that it's a distance that you can walk along. More precisely: drive along, because your robot has wheels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each wheel covers a certain distance, $v_r$ and $v_l$ respectively.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If $v_r \neq v_l$, the robot moves on a circle as seen in your image, with center $ICC$ and radius $R$. Each wheel is on its own circle with a different radius:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the left wheel is closer to $ICC$, which means it has a smaller radius $R-\frac{I}{2}$&lt;/li&gt;&#xA;&lt;li&gt;the right wheel is further away from $ICC$, which means it has a bigger radius $R+\frac{I}{2}$&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;If the robot drives around in that circle with center $ICC$ and radius $R$ by an angle of $\omega $, the relationship between the distances travelled by each wheel are the formulas that you found in the book:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{align}&#xA;\omega~ \left(R+\frac{l}{2}\right) &amp;amp;= v_r\\&#xA;\omega~ \left(R-\frac{l}{2}\right) &amp;amp;= v_l\\&#xA;\end{align}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$v_r$ and $v_l$ are the arc lengths of the circle that the wheels are driving on and $\omega$ is the angle that the robot goes around the circle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The important thing to understand:&#xA;&lt;strong&gt;The circle is just a geometric aid to describe the motion of the robot, which exists because it's easier to handle and understand.&lt;/strong&gt; It's really just another way to describe $v_r$ and $v_l$, but those two values are hard to imagine and depending on the wheelbase $l$, they could describe different motions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I give you $v_r = 5$, $v_l = 6$ and $l = 3$, can you easily answer the question whether the robot can do a full turn in a 50 x 50 room? It's kind of hard to tell. But if you had $R$, it's a lot easier.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thinking in terms of a circle is a lot easier than to construct the motion from $v_r$ and $v_l$.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Why ω has to be same if we want to analyse the behavior after changing the wheel velocity relative to other? &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I think you are misunderstanding the text in the book. The book says that $\omega$ is the same for both wheels, given two values for $v_r$ and $v_l$. Of course, &lt;strong&gt;if you change the values of $v_r$ and $v_l$, you will get a different value for $\omega$, but $\omega$ will still be the same for both wheels&lt;/strong&gt;. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How do we know about the circle, in which the robot rotates by doing variations in one wheel velocity, surely passes through the center point between two wheels.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Because that's the way the geometry works out. Both wheels are on circles with different radii ($R\pm \frac{I}{2}$) with the came center $ICC$, but they have a fixed relation to each other, so the center of the robot must be on a circle with radius $R$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just imagine you are in a car driving in a roundabout. If the left side of the car is going in a circle and the right side is going in a circle, why do you think are you not going in a circle? Of course you do. And so does the center of the robot.&lt;/p&gt;&#xA;" OwnerUserId="9860" LastEditorUserId="9860" LastEditDate="2015-08-17T11:59:11.137" LastActivityDate="2015-08-17T11:59:11.137" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7881" PostTypeId="1" CreationDate="2015-08-17T03:55:02.427" Score="4" ViewCount="75" Body="&lt;p&gt;I'm a agricultural engineering student and complete newbie trying to build a simple mechanism attached to a drone that dispenses a &lt;a href=&quot;http://ocp.com.au/wp-content/uploads/2014/07/ISCA+SPLAT+Bloom+MSDS.pdf&quot; rel=&quot;nofollow&quot;&gt;grease-type fluid&lt;/a&gt;. However, since I'm not familiar with the field, I'm having a hard time googling because I don't know the correct terms to search for. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm looking for a mechanism that will remotely push the grease out. The problem is carrying the necessary weight for an hectare (300g to 1,5kg of fluid) and the dispenser mechanism within the drone. So I'm looking for a lightweight dispenser mechanism capable of deliver small amounts of this fluid (3g) distributed on the trees canopy. The grease do not need to be heated as it flows naturally in normal temperatures (like a toothpaste). Both pump or syringe-type arrangement would be fine as long as I can control it remotely.&lt;/p&gt;&#xA;" OwnerUserId="10385" LastEditorUserId="350" LastEditDate="2015-08-20T15:27:50.823" LastActivityDate="2015-08-20T15:27:50.823" Title="How do I dispense a greasy fluid?" Tags="&lt;motor&gt;&lt;quadcopter&gt;&lt;design&gt;&lt;battery&gt;&lt;actuator&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7882" PostTypeId="1" CreationDate="2015-08-17T06:16:34.360" Score="4" ViewCount="2595" Body="&lt;p&gt;Suppose I have a 3 link(1 dimensional) chain in which all the joints are revolutes, the axis of first revolute joint is along Z-axis(global) and axis of second joint is along X-axis(global). The first link is along X-axis(global) and second link is along Z-axis(global).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now in order to use DH representation I introduced a local frame for link 1 at joint 1(z axis along Z and x axis along X) and another frame at joint 2.Here z-axis is along axis of rotation(global X) and here I am clueless how to determine x-axis for joint 2 because the two z axis are intersecting.(standard procedure is to find common normal between two z axis)&lt;a href=&quot;https://i.stack.imgur.com/0EL6h.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0EL6h.png&quot; alt=&quot;3-link chain&quot;&gt;&lt;/a&gt;&#xA;Thanks for your time.&lt;/p&gt;&#xA;" OwnerUserId="10386" LastEditorUserId="9860" LastEditDate="2015-08-17T12:56:00.653" LastActivityDate="2017-10-20T10:24:34.867" Title="How to determine x-axis if the two z-axis are intersecting in Denavit Hartenberg representation" Tags="&lt;robotic-arm&gt;&lt;dh-parameters&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7883" PostTypeId="1" AcceptedAnswerId="7892" CreationDate="2015-08-17T06:36:43.263" Score="2" ViewCount="1522" Body="&lt;p&gt;&lt;em&gt;I try to read IMU sensor data from an Arduino mega 2560 UART with serial receive block of Arduino support package for simulink. The IMU can send binary packets and also nmea packets and I can configure it to any output. When the serial recieve block output is directly used, it displays just the numbers between 0-255. l need help about how to parse the coming data which contains the euler angles that I want to use.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is &lt;strong&gt;binary structure ;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;&lt;strong&gt;s&lt;/strong&gt;&quot;,&quot;&lt;strong&gt;n&lt;/strong&gt;&quot;,&quot;&lt;strong&gt;p&lt;/strong&gt;&quot;,&lt;strong&gt;packet type(PT)&lt;/strong&gt;,&lt;strong&gt;Address&lt;/strong&gt;,&lt;strong&gt;Data Bytes (D0...DN-1)&lt;/strong&gt;,&lt;strong&gt;Checksum 1&lt;/strong&gt;,&lt;strong&gt;Checksum 0&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PT byte specifies whether the packet is a read or a write operation, whether it is a batch operation, and the length of the batch operation (when applicable). The PT byte is also used by the UM7 to respond to commands. The specific meaning of each bit in the PT byte is given below.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Packet Type (PT) byte;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;7 Has Data,&#xA;6 Is Batch,&#xA;5 BL3,&#xA;4 BL2,&#xA;3 BL1,&#xA;2 BL0,&#xA;1 Hidden,&#xA;0 CF&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Packet Type (PT) Bit Descriptions;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;7...Has Data: If the packet contains data, this bit is set (1). If not, this bit is cleared (0). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;6...Is Batch: If the packet is a batch operation, this bit is set (1). If not, this bit is cleared (0) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;5:2..Batch Length (BL): Four bits specifying the length of the batch operation. Unused if bit 7 is cleared. The maximum batch length is therefore 2^4 = 16 &lt;/p&gt;&#xA;&#xA;&lt;p&gt;1...Hidden: If set, then the packet address specified in the “Address” field is a “hidden” address. Hidden registers are used to store factory calibration and filter tuning coefficients that do not typically need to be viewed or modified by the user. This bit should always be set to 0 to avoid altering factory configuration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;0...Command Failed (CF): Used by the autopilot to report when a command has failed. Must be set to zero for all packets written to the UM7.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The address byte specifies which register will be involved in the operation. During a read operation (Has Data = 0), the address specifies which register to read. During a write operation (Has Data = 1), the address specifies where to place the data contained in the data section of the packet. For a batch read/write operation, the address byte specifies the starting address of the operation.&#xA;The &quot;Data Bytes&quot; section of the packet contains data to be written to one or more registers. There is no byte in the packet that explicitly states how many bytes are in this section because it is possible to determine the number of data bytes that should be in the packet by evaluating the PT byte.&#xA;If the Has Data bit in the PT byte is cleared (Has Data = 0), then there are no data bytes in the packet and the Checksum immediately follows the address. If, on the other hand, the Has Data bit is set (Has Data = 1) then the number of bytes in the data section depends on the value of the Is Batch and Batch Length portions of the PT byte.&#xA;For a batch operation (Is Batch = 1), the length of the packet data section is equal to 4*(Batch Length). Note that the batch length refers to the number of registers in the batch, NOT the number of bytes. Registers are 4 bytes long.&#xA;For a non-batch operation (Is Batch = 0), the length of the data section is equal to 4 bytes (one register). The data section lengths and total packet lengths for different PT configurations are shown below.&#xA;The two checksum bytes consist of the unsigned 16-bit sum of all preceding bytes in the packet, including the packet header.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Read Operations;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;To initiate a serial read of one or more registers aboard the sensor, a packet should be sent to the UM7 with the &quot;Has Data&quot; bit cleared. This tells the device that this will be a read operation from the address specified in the packet's &quot;Address&quot; byte. If the &quot;Is Batch&quot; bit is set, then the packet will trigger a batch read in which the &quot;Address&quot; byte specifies the address of the first register to be read.&#xA;In response to a read packet, the UM7 will send a packet in which the &quot;Has Data&quot; bit is set, and the &quot;Is Batch&quot; and &quot;Batch Length&quot; bits are equivalent to those of the packet that triggered the read operation. The register data will be contained in the &quot;Data Bytes&quot; section of the packet.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;here is an Example Binary Communication Code;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;{&#xA;uint8_t Address;&#xA;uint8_t PT;&#xA;uint16_t Checksum;&#xA;uint8_t data_length;&#xA;uint8_t data[30];&#xA;} &#xA;UM7_packet;&#xA;// parse_serial_data.This function parses the data in ‘rx_data’ with length ‘rx_length’ and attempts to find a packet in the data. If a packet is found, the structure ‘packet’ is filled with the packet data.If there is not enough data for a full packet in the provided array, parse_serial_data returns 1. If there is enough data, but no packet header was found, parse_serial_data returns 2.If a packet header was found, but there was insufficient data to parse the whole packet,then parse_serial_data returns 3. This could happen if not all of the serial data has been received when parse_serial_data is called.If a packet was received, but the checksum was bad, parse_serial_data returns 4. If a good packet was received, parse_serial_data fills the UM7_packet structure and returns 0.&#xA;&#xA;uint8_t parse_serial_data( uint8_t* rx_data, uint8_t rx_length, UM7_packet* packet )&#xA;{&#xA;uint8_t index;&#xA;// Make sure that the data buffer provided is long enough to contain a full packet The minimum packet length is 7 bytes&#xA;if( rx_length &amp;lt; 7 )&#xA;  {&#xA;  return 1;&#xA;  }&#xA;// Try to find the ‘snp’ start sequence for the packet&#xA;for( index = 0; index &amp;lt; (rx_length – 2); index++ )&#xA;  {&#xA;  // Check for ‘snp’. If found, immediately exit the loop&#xA;  if( rx_data[index] == ‘s’ &amp;amp;&amp;amp; rx_data[index+1] == ‘n’ &amp;amp;&amp;amp; rx_data[index+2] == ‘p’ )&#xA;    {&#xA;    break;&#xA;    }&#xA;  }&#xA;uint8_t packet_index = index;&#xA;// Check to see if the variable ‘packet_index’ is equal to (rx_length - 2). If it is, then the above loop executed to completion and never found a packet header.&#xA;if( packet_index == (rx_length – 2) )&#xA;  {&#xA;  return 2;&#xA;  }&#xA;// If we get here, a packet header was found. Now check to see if we have enough room left in the buffer to contain a full packet. Note that at this point, the variable ‘packet_index’contains the location of the ‘s’ character in the buffer (the first byte in the header)&#xA;if( (rx_length – packet_index) &amp;lt; 7 )&#xA;  {&#xA;  return 3;&#xA;  }&#xA;// We’ve found a packet header, and there is enough space left in the buffer for at least the smallest allowable packet length (7 bytes). Pull out the packet type byte to determine the actual length of this packet&#xA;uint8_t PT = rx_data[packet_index + 3];&#xA;// Do some bit-level manipulation to determine if the packet contains data and if it is a batch.We have to do this because the individual bits in the PT byte specify the contents of the packet.&#xA;uint8_t packet_has_data = (PT &amp;gt;&amp;gt; 7) &amp;amp; 0x01; // Check bit 7 (HAS_DATA)&#xA;uint8_t packet_is_batch = (PT &amp;gt;&amp;gt; 6) &amp;amp; 0x01; // Check bit 6 (IS_BATCH)&#xA;uint8_t batch_length = (PT &amp;gt;&amp;gt; 2) &amp;amp; 0x0F; // Extract the batch length (bits 2 through 5)&#xA;// Now finally figure out the actual packet length&#xA;uint8_t data_length = 0;&#xA;if( packet_has_data )&#xA;  {&#xA;  if( packet_is_batch )&#xA;    {&#xA;    // Packet has data and is a batch. This means it contains ‘batch_length' registers, each // of which has a length of 4 bytes&#xA;    data_length = 4*batch_length;&#xA;    }&#xA;  else // Packet has data but is not a batch. This means it contains one register (4 bytes)&#xA;    {&#xA;    data_length = 4;&#xA;    }&#xA;  }&#xA;else // Packet has no data&#xA;  {&#xA;  data_length = 0;&#xA;  }&#xA;// At this point, we know exactly how long the packet is. Now we can check to make sure we have enough data for the full packet.&#xA;if( (rx_length – packet_index) &amp;lt; (data_length + 5) )&#xA;  {&#xA;  return 3;&#xA;  }&#xA;// If we get here, we know that we have a full packet in the buffer. All that remains is to pullout the data and make sure the checksum is good. Start by extracting all the data&#xA;packet-&amp;gt;Address = rx_data[packet_index + 4];&#xA;packet-&amp;gt;PT = PT;&#xA;// Get the data bytes and compute the checksum all in one step&#xA;packet-&amp;gt;data_length = data_length;&#xA;uint16_t computed_checksum = ‘s’ + ‘n’ + ‘p’ + packet_data-&amp;gt;PT + packet_data-&amp;gt;Address;&#xA;for( index = 0; index &amp;lt; data_length; index++ )&#xA;  {&#xA;  // Copy the data into the packet structure’s data array&#xA;  packet-&amp;gt;data[index] = rx_data[packet_index + 5 + index];&#xA;  // Add the new byte to the checksum&#xA;  computed_checksum += packet-&amp;gt;data[index];&#xA;  }&#xA;// Now see if our computed checksum matches the received checksum &#xA;// First extract the checksum from the packet&#xA;uint16_t received_checksum = (rx_data[packet_index + 5 + data_length] &amp;lt;&amp;lt; 8);&#xA;received_checksum |= rx_data[packet_index + 6 + data_length];&#xA;// Now check to see if they don’t match&#xA;if( received_checksum != computed_checksum )&#xA;  {&#xA;  return 4;&#xA;  }&#xA;// At this point, we’ve received a full packet with a good checksum. It is already fully parsed and copied to the ‘packet’ structure, so return 0 to indicate that a packet was processed.&#xA;return 0;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="10090" LastEditorUserId="9720" LastEditDate="2015-08-18T18:30:18.937" LastActivityDate="2015-08-25T08:50:44.163" Title="How can I get the values of a IMU from the serial message received in Simulink via UART?" Tags="&lt;arduino&gt;&lt;electronics&gt;&lt;embedded-systems&gt;&lt;matlab&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7884" PostTypeId="1" CreationDate="2015-08-17T10:21:54.497" Score="0" ViewCount="879" Body="&lt;p&gt;I was trying to reproduce &lt;a href=&quot;https://www.youtube.com/watch?v=kOjQRYmeX_o&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; youtube tutorial in V-rep and I came across some problems concerning blob detection. There are some complaints on this matter under the video. I don't believe that blob detection stopped working in recent v-rep versions, but I was unable to make it work (as a new v-rep user myself). Has anyone any idea how to properly implement it? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;More specifically, I have a vision sensor named &lt;code&gt;cam&lt;/code&gt; and I want it to follow a red ball. The vision sensor will detect the position of the ball and I will use it to control the joints that steer the sensor (&lt;code&gt;yaw&lt;/code&gt; and &lt;code&gt;pitch&lt;/code&gt;). My script follows&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;threadFunction=function()&#xA;    yaw=simGetObjectHandle(&quot;yaw&quot;)&#xA;    pitch=simGetObjectHandle(&quot;pitch&quot;)&#xA;    cam=simGetObjectHandle(&quot;cam&quot;)&#xA;    while simGetSimulationState()~=sim_simulation_advancing_abouttostop do&#xA;        result,pack1,pack2=simReadVisionSensor(cam)&#xA;        if result&amp;gt;0 then&#xA;            xtarget=pack2[5]&#xA;            ytarget=pack2[6]&#xA;            simAuxiliaryConsolePrint(out,string.format(&quot;\n x: %0.2f, y: %0.2f&quot;,xtarget,ytarget))&#xA;            simSetJointTargetVelocity(yaw,1*(0.5-xtarget))&#xA;            simSetJointTargetVelocity(pitch,1*(0.5-ytarget))&#xA;        end&#xA;    end&#xA;end&#xA;&#xA;simSetThreadSwitchTiming(2)&#xA;out = simAuxiliaryConsoleOpen(&quot;Debug&quot;,8,1)&#xA;res,err=xpcall(threadFunction,function(err) return debug.traceback(err) end)&#xA;if not res then&#xA;    simAddStatusbarMessage('Lua runtime error: '..err)&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;When I run the simulation I can see that the sensor sees the red ball at some point but &lt;code&gt;result&lt;/code&gt; is always 0 meaning that no detection takes place. &lt;a href=&quot;https://i.stack.imgur.com/tEQhF.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tEQhF.png&quot; alt=&quot;image taken during simulation&quot;&gt;&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is &lt;a href=&quot;https://www.dropbox.com/s/8hchlzjzabjrmoy/visualServoing.ttt?dl=0&quot; rel=&quot;nofollow noreferrer&quot;&gt;my scene&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7107" LastEditorUserId="7107" LastEditDate="2015-08-18T10:42:16.587" LastActivityDate="2015-08-18T22:34:22.117" Title="Using Blob detection in V-Rep" Tags="&lt;simulator&gt;&lt;visual-servoing&gt;" AnswerCount="0" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="7885" PostTypeId="2" ParentId="7882" CreationDate="2015-08-17T13:14:30.437" Score="2" Body="&lt;p&gt;Check out &lt;a href=&quot;https://www.youtube.com/watch?v=rA9tm0gTln8&quot; rel=&quot;nofollow&quot;&gt;this tutorial video on DH Parameters - it's amazing!&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding your question, I believe if you try crossing your z-axes, $z_1 \times z_2$, you'll get the x-axis you're looking for (orthogonal to both axes). Because the two z axes intersect, your $r$ or $a$ value, depending on your notation, will be zero because the new x-axis lies on your previous z-axis.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-08-17T13:14:30.437" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7886" PostTypeId="1" CreationDate="2015-08-17T13:45:54.373" Score="7" ViewCount="1846" Body="&lt;p&gt;I'm trying to calculate the Jacobian for days now. But first some details. Within my Master's Thesis I have to numerically calculate the Jacobian for a tendon-driven continuum Robot. I have all homogeneous transformation matrices as I already implemented the kinematics for this Robot. Due to it's new structure there are no discrete joint variables anymore but rather continuous parameters. Therefore I want to compute the Jacobian numerically.&#xA;It'd be awesome if someone could provide a detailed way how to compute the numerical Jacobian for a 6-DoF rigid-link robot (only rotational joints =&gt; RRRRRR). From that I can transfer it to the continuum robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've already started computing it. Let T be the homogeneous transformation matrix for the Endeffector (Tip)  with&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$T=\begin{bmatrix}R &amp;amp; r \\ 0 &amp;amp; 1 \end{bmatrix} $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;with R = rotational matrix (contains orientation) and $ r = \begin{bmatrix} x &amp;amp; y &amp;amp; z \end{bmatrix}^T$ endeffector position.&#xA;My approach is to compute the first three rows of J by successively increasing the joints, computing the difference to the &quot;original&quot; joint values and dividing it by the increment delta, the joint-space is $ q = \begin{bmatrix} q_1 &amp;amp; q_2 &amp;amp;  q_3 &amp;amp; ... &amp;amp;q_6 \end{bmatrix}T $&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$q_1 = q_1 + \delta$ =&gt; $J(1,1) = (X_{increment} - X_{orig})/\delta$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$q_2 = q_2 + \delta$ =&gt; $J(1,2) = (X_{increment} - X_{orig})/\delta$   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;and so on. I do the same for the y and z coordinates. So I get the first 3 rows of J. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I don't know how to compute the last three rows as they refer to the rotational Matrix R. Since it's a 3x3 matrix and no scalar value I don't know how to handle it. &lt;/p&gt;&#xA;" OwnerUserId="10389" LastEditorUserId="110" LastEditDate="2015-08-29T23:32:44.417" LastActivityDate="2015-08-29T23:32:44.417" Title="How to numerically calculate the Jacobian?" Tags="&lt;jacobian&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7887" PostTypeId="2" ParentId="7881" CreationDate="2015-08-17T15:38:48.133" Score="1" Body="&lt;p&gt;It is difficult to answer your question without more details, but there are a number of design options for &lt;a href=&quot;https://en.wikipedia.org/wiki/Pump&quot; rel=&quot;nofollow noreferrer&quot;&gt;pumps&lt;/a&gt;, the two most obvious being the &lt;a href=&quot;https://en.wikipedia.org/wiki/Metering_pump&quot; rel=&quot;nofollow noreferrer&quot;&gt;Metering pump&lt;/a&gt; and the &lt;a href=&quot;https://en.wikipedia.org/wiki/Peristaltic_pump&quot; rel=&quot;nofollow noreferrer&quot;&gt;Peristaltic pump&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A Metering pump delivers precise amounts of fluid, but relies on seals which may require ongoing maintenance:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/File:Metering_pump_head.PNG&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dOUE4.png&quot; alt=&quot;Metering pump head CC-BY-SA&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Peristaltic pump is more appropriate for a more continuously pumped fluid, but where metered flow might be needed. It does require your fluid to be appropriate for the flexible pipe needed to make it however:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/File:Peristaltic_pump.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Qbijv.gif&quot; alt=&quot;Peristaltic pump CC-BY-SA&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="37" LastActivityDate="2015-08-17T15:38:48.133" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7888" PostTypeId="2" ParentId="150" CreationDate="2015-08-17T15:43:07.423" Score="0" Body="&lt;p&gt;I wanted to create a submerged water pump as part of school science project. I really had a hard time in making a normal DC motor and its shaft in making water proof. i failed miserably. &#xA;Later i came with an idea. I removed the shaft and magnets from the motor . i removed the coil and attached magnet in the shaft. use a small pvc pipe piece and coil it. keep the shaft inside the coiled pvc pipe. Now when you pass AC current in the coil the shaft will rotate. So now you dont have to water proof the rotating shaft but the wire holes made in the wall which is very easy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now coils are water proof and shaft doesnt have any coil and electric circuit to get short. just magnectic field under water.&lt;/p&gt;&#xA;" OwnerUserId="10390" LastActivityDate="2015-08-17T15:43:07.423" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7889" PostTypeId="1" AcceptedAnswerId="7891" CreationDate="2015-08-18T13:08:52.783" Score="3" ViewCount="334" Body="&lt;p&gt;I was wondering whether maybe you could help me with this problem. I have a double pendulum. I have set the origin of cartesian coordinates to be the &quot;head&quot; of the first arm, which is fixed. The end of the second arm is attached to a block that slides along the x-axis. What I want to do is to derive the equations relating the pendulum's angles with the distance from the origin to the block. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, I know how I could go about deriving the equations without the constraint. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$x_1 = L_1cos(a_1)$$&#xA;$$y_1 = L_1sin(a_1)$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where $x_1$ and $y_1$ is where the first arm joins the second arm and $a_1$ is the angle between the horizontal and the first arm. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similarly, I can derive the equations for the end of the second arm &#xA;$x_2 = x_1 + L_2 cos(a_2)$ and $y_2 = y_1 - L_2 sin(a_2)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now then, if I attach a sliding block to the end of my second arm, I don't know whether my equation for $x_2$ would change at all. I don't think it would but  would I have to somehow restrict the swing angles so that the block only moves along the x direction? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Well, basically the problem is finding the equation of $x_2$ if it's attached to a block that only moves along the x- direction. &lt;/p&gt;&#xA;" OwnerUserId="10397" LastEditorUserId="134" LastEditDate="2015-08-18T13:28:08.217" LastActivityDate="2015-08-18T15:04:50.180" Title="Forward kinematics of constrained double pendulum" Tags="&lt;forward-kinematics&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7891" PostTypeId="2" ParentId="7889" CreationDate="2015-08-18T13:58:36.260" Score="2" Body="&lt;p&gt;What you are describing is a &lt;a href=&quot;https://en.wikipedia.org/wiki/Crankshaft&quot; rel=&quot;nofollow noreferrer&quot;&gt;crankshaft&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;if I attach a sliding block to the end of my second arm, I don't know whether my equation for $x_2$ would change at all. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No it wouldn't, because your restraint:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;the second arm is attached to a block that slides &lt;strong&gt;along the x-axis&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;doesn't restrain $x_2$ but $y_2$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;Being on the x axis&quot; basically means $y = 0$, which in your case means $y_2 = 0$, which is where you &quot;lose&quot; the second degree of freedom.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Take a look at the following image:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://de.wikipedia.org/wiki/Datei:Schubkurbel.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/oqSUc.jpg&quot; alt=&quot;crankshaft&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The formula for the relation between $x$ and $\varphi$ in the image is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$x=l_1\cos \varphi + l_2 \sqrt{1-\left(\frac{l_1}{l_2}\right)^2 \sin^2 \varphi}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To get there:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;use the Pythagorean theorem for the second summand in the formula&#xA;for $x_2$ instead of trigonometry&lt;/li&gt;&#xA;&lt;li&gt;replace $y_1$ with its definition&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{align}&#xA;x_2 &amp;amp;= x_1 +  \sqrt{l_2^2 - \underset{\overbrace{l_1\sin\varphi}}{y_1^2}}\\&#xA;\end{align}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The relationship between the two angles can be derived from their shared opposite side in their respective triangles:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$l_1\sin a_1 = l_2\sin a_2$$ &#xA;$$ a_1 = \arcsin \left(\frac{l_2}{l_1}\sin a_2\right)$$ &lt;/p&gt;&#xA;" OwnerUserId="9860" LastEditorUserId="9860" LastEditDate="2015-08-18T15:04:50.180" LastActivityDate="2015-08-18T15:04:50.180" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="7892" PostTypeId="2" ParentId="7883" CreationDate="2015-08-18T20:46:56.367" Score="1" Body="&lt;p&gt;I think there are two issues here - one is that you are referring to your IMU as though you were communicating with it, but in reality you are communicating with the Arduino, not the IMU. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The packet structure has nothing to do with the fact that you are seeing numbers between 0-255 because those numbers appear with communication between the Arduino and Simulink, not between the IMU and the Arduino. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Simulink block only reads one byte - you need to concatenate/parse the data coming back from that block instead of just displaying the data as though it were a uint8 format.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;:EDIT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I use Matlab (command-line scripting) and not Simulink, so I can't say for sure if Simulink does or does not have a parse block, but all serial packets are different so that, coupled with the fact that I didn't see anything after a cursory search, would lead me to believe there is no Simulink block that will do everything for you. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My advice would be to make a Matlab function block and simply paste in the serial parse example that you've shown and modify it until it parses the message you are expecting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Again I would caution you that the serial packet you will receive from the Arduino is &lt;strong&gt;not&lt;/strong&gt; the packet that is coming from the IMU. You need a parser on the Arduino to read the IMU, then you need to transmit the results of that to the PC. You &lt;em&gt;can&lt;/em&gt; just save the entire packet from the IMU and re-broadcast the same packet to the PC, but again, that's something you need to configure on both the Arduino &lt;em&gt;and&lt;/em&gt; the PC. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I could give advice now about an outline for parsing a serial message, but (1) you already have example code and (2) my advice would be to follow the packet structure, which is not defined because it's whatever you want it to be. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2015-08-19T13:13:10.147" LastActivityDate="2015-08-19T13:13:10.147" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7894" PostTypeId="1" CreationDate="2015-08-19T00:13:19.007" Score="3" ViewCount="64" Body="&lt;p&gt;So, I need to know a couple of things about soldering. My primary workspace, robotics and otherwise is a desk with a computer and only a little bit of free space (4ft. by 6 in.). I am wondering if it is safe to solder in such a small area. Also, what level of ventilation do I need to solder safely? My desk is in a normal house room and my desk is write next to an air vent. My house has heating and A/C? Do I need a fan or a fume sucker thing? I plan to only solder a little to get things to stay in my solder less bread board (soldering header pins onto wires and such). So, basically, what are the minimum requirements for soldering safely (space and ventilation). Also, if anyone could point me to some hobby/beginner level soldering must-haves on amazon that would be great, thanks.&lt;/p&gt;&#xA;" OwnerUserId="10290" LastActivityDate="2015-08-19T07:14:44.180" Title="Beginner Soldering question" Tags="&lt;beginner&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7895" PostTypeId="1" CreationDate="2015-08-19T04:56:21.750" Score="5" ViewCount="2274" Body="&lt;p&gt;I've notice the IRobot Create 2 does not respond to the app's commands when it has been sleeping.  If I press the &lt;em&gt;Clean&lt;/em&gt; button and re-run the app then the robot is responsive to the commands.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My initialization sequence (Android/Java) using &lt;a href=&quot;https://github.com/mik3y/usb-serial-for-android&quot; rel=&quot;nofollow&quot;&gt;usb-serial-for-android&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;port.open(connection);&#xA;port.setParameters(115200, 8, UsbSerialPort.STOPBITS_1,UsbSerialPort.PARITY_NONE);&#xA;command(Opcode.START);&#xA;command(Opcode.SAFE);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The physical architecture is IRobot Create 2 connected by IRobot Serial Cable to Google Project Tango Tablet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can my app wake up the Roomba from it's sleep?&lt;/p&gt;&#xA;" OwnerUserId="10403" LastEditorUserId="10403" LastEditDate="2015-08-19T17:49:44.623" LastActivityDate="2018-07-18T13:26:33.373" Title="IRobot Create 2: Powering Up after Sleep" Tags="&lt;irobot-create&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7896" PostTypeId="1" CreationDate="2015-08-19T07:11:43.583" Score="3" ViewCount="1979" Body="&lt;p&gt;I am using 8051 microcontroller and a dc motor.What to do if i have to rotate the motor at any fixed rpm. Let's say 120rpm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And if it is possible by generating pwm,how to do the calculations for the relation between duty cycle and rpm?&lt;/p&gt;&#xA;" OwnerUserId="10405" LastActivityDate="2015-08-21T21:10:16.437" Title="How to rotate a dc motor at a fixed rpm" Tags="&lt;control&gt;&lt;motor&gt;&lt;microcontroller&gt;" AnswerCount="4" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7897" PostTypeId="2" ParentId="7894" CreationDate="2015-08-19T07:14:44.180" Score="3" Body="&lt;p&gt;For occasional light-duty soldering as you describe, no special ventilation arrangement is &lt;em&gt;required&lt;/em&gt; but sometimes a fan or hood is helpful.  For example, I use an open-front plastic cube, 34 cm on each edge, with a fan that draws air into the front and exhausts it through a hole in the back.  Two bright LED floods are mounted in the top of the box.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Piping the exhaust to a window or vent is a good idea if you do much soldering and want to keep smoke from smelling up the area. My fan's flow is low, just enough that smoke from rosin-core solder moves away from me instead of into my face.  It is a 12 V computer fan powered by a 9 V source, so is quiet and low-flow.  Too much flow would make noise and would cool off whatever you are soldering.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The free space mentioned (4ft. by 6 in.) is rather narrow, but is big enough if you have an effective way to keep the soldering iron from falling off the edge, and a way to keep it out of the way of your hands when it is set down.  Burning yourself is more of a safety risk, I think, than is causing a fire.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For “soldering must-haves”, thin solder (about 1 mm or less) is needed for typical electronics soldering.  &lt;a href=&quot;https://www.google.com/search?hl=en&amp;amp;site=imghp&amp;amp;tbm=isch&amp;amp;source=hp&amp;amp;biw=1112&amp;amp;bih=593&amp;amp;q=solder+wick&amp;amp;oq=solder+w&amp;amp;gs_l=img.1.0.0l9j0i10.2177.4188.0.6125.8.8.0.0.0.0.144.662.6j2.8.0....0...1.1.64.img..0.8.660.dBXCp1FonFs&quot; rel=&quot;nofollow&quot;&gt;Solder wick&lt;/a&gt; is good to have if you don't solder perfectly.  (See &lt;a href=&quot;https://www.youtube.com/results?search_query=solder+wick&quot; rel=&quot;nofollow&quot;&gt;solder wick videos&lt;/a&gt; on youtube.)  Tweezers are a good idea.  Occasionally the following are useful:  small metal clips to heat-sink wires or parts, a &lt;a href=&quot;https://www.google.com/search?hl=en&amp;amp;site=imghp&amp;amp;tbm=isch&amp;amp;source=hp&amp;amp;biw=1112&amp;amp;bih=593&amp;amp;q=solder+wick&amp;amp;oq=solder+w&amp;amp;gs_l=img.1.0.0l9j0i10.2177.4188.0.6125.8.8.0.0.0.0.144.662.6j2.8.0....0...1.1.64.img..0.8.660.dBXCp1FonFs#hl=en&amp;amp;tbm=isch&amp;amp;q=third+hand+tool&quot; rel=&quot;nofollow&quot;&gt;“third hand tool”&lt;/a&gt;, a &lt;a href=&quot;https://www.google.com/search?hl=en&amp;amp;site=imghp&amp;amp;tbm=isch&amp;amp;source=hp&amp;amp;biw=1112&amp;amp;bih=593&amp;amp;q=solder+wick&amp;amp;oq=solder+w&amp;amp;gs_l=img.1.0.0l9j0i10.2177.4188.0.6125.8.8.0.0.0.0.144.662.6j2.8.0....0...1.1.64.img..0.8.660.dBXCp1FonFs#hl=en&amp;amp;tbm=isch&amp;amp;q=pcb+vise&quot; rel=&quot;nofollow&quot;&gt;PCB vise&lt;/a&gt;, a magnifying glass (or camera), etc.&lt;/p&gt;&#xA;" OwnerUserId="478" LastActivityDate="2015-08-19T07:14:44.180" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7899" PostTypeId="2" ParentId="7896" CreationDate="2015-08-19T11:33:41.227" Score="0" Body="&lt;p&gt;This would be possible if you had a perfect motor. The speed of a motor is basically fixed by the voltage you apply on it. More precisely, the speed is proportional to the back EMF of the motor, and, with no current, BEMF is equal to the voltage you apply on the motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;No current means no torque, so no mechanical power. If you have current, you'll have loss in the wiring of your motor (which is resistive), on the iron core and in the rotor, due to magnetic hysteresis and Foucault currents in the rotor (iron losses).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, on a real motor, you can't know the exact rotation speed from the voltage you apply on the motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One solution is to put a sensor on the rotor to measure the rotor speed, and put a speed regulator in your 8051.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a more sophisticated solution: if you know the resistance and the iron losses of your motor, by sensing the current in your motor, and knowing the voltage you apply, you can compute the actual speed, and then run you speed regulation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And, finally, a more basic solution, very easier: if your load is always the same (for instance, you have a propeller on your motor), you can measure the speed at different voltage, and rebuild mathematically a conversion law from PWM to speed, and use it to command your motor. If your load is very small, or roughly constant, you may even assume that speed is proportional to the voltage.&lt;/p&gt;&#xA;" OwnerUserId="7634" LastActivityDate="2015-08-19T11:33:41.227" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7900" PostTypeId="2" ParentId="7895" CreationDate="2015-08-19T13:44:24.827" Score="3" Body="&lt;p&gt;Roomba goes to sleep to save power after five minutes of inactivity, as detailed in the OI spec (Aug. 10, 2015) on page 6, under &quot;Passive Mode.&quot; The documentation is not in error where you have quoted it, as Roomba powers on with the OI off (and not in passive, safe, or full). If you want your robot to never fall asleep, put it into FULL. If you want the robot to wake up, instead, simply pulse the BRC pin before communicating, as detailed in the same passage as mentioned above. If you are using a USB to Create cable, one easy way to do this would be to open your serial port with hardware flow control, as the Roomba's BRC is attached to RTS on the computer side, and so when characters are Ready To Send, the BRC will be pulsed. It appears that at least some of the official Create to USB cables do not properly implement this functionality, but making the cable following &lt;a href=&quot;http://www.irobotweb.com/~/media/MainSite/PDFs/About/STEM/Create/Create_2_Serial_to_USB_Cable_Creation.pdf?la=en&quot; rel=&quot;nofollow noreferrer&quot;&gt;the directions on the site&lt;/a&gt; does work. The second version of the Create cable, which has a 0.1&quot; header along with a USB A connector in its overmold, has this error corrected. Please note that I am an iRobot employee, but the postings on this site are my own and don't necessarily represent iRobot's positions, strategies, or opinions.&lt;/p&gt;&#xA;" OwnerUserId="7665" LastEditorUserId="7665" LastEditDate="2018-07-18T13:26:33.373" LastActivityDate="2018-07-18T13:26:33.373" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="7901" PostTypeId="2" ParentId="7896" CreationDate="2015-08-19T14:21:16.183" Score="1" Body="&lt;p&gt;No, you cannot get an exact RPM from PWM, and you probably cannot even get a close RPM from PWM without a &lt;em&gt;good&lt;/em&gt; model of the system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As Jacen notes in their answer, the voltage constant gives motor RPM for a given terminal voltage for an &lt;em&gt;unloaded&lt;/em&gt; motor, but, thanks to friction, the motor is always under load. Worse, because of viscous friction, the load varies with RPM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could try to guess rpm based on voltage (which you could get from PWM duty cycle) and current, but the issue there is that motor output power is a combination of frictional losses, load losses, and &lt;em&gt;acceleration torque&lt;/em&gt;. That is, if you have half voltage and full current, you could be accelerating from a stop to half speed or you could be operating at half speed under heavy load. It is not possible to divine contributions due to load and acceleration from output power alone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, you &lt;em&gt;can&lt;/em&gt; command an exact RPM by simply adding an encoder to the motor. With feedback you can read RPM exactly and implement a simple PID controller to drive output RPM to whatever you desire. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-08-19T14:21:16.183" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7902" PostTypeId="2" ParentId="7896" CreationDate="2015-08-19T15:29:14.740" Score="2" Body="&lt;p&gt;It depends! In case you are going to attach either nothing or a constant load to your motor, one can calculate/approximate a relation between duty cycle and rpm by performing a series of input-output measurements or given the motor parameters $K_{mf}\ J \ L\ R\ b$ &lt;a href=&quot;http://ctms.engin.umich.edu/CTMS/index.php?example=MotorSpeed&amp;amp;section=SystemModeling&quot; rel=&quot;nofollow noreferrer&quot;&gt;(see here)&lt;/a&gt; by analytical derivation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The relation between the motor input voltage $V$ your supply voltage $V_\text{sup}$ and the duty-cycle $\nu \in [0,1]$ is approximately given as&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$V = \nu\, V_{sup}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given the motors transfer-function (Angualr velocity $\omega$):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\dfrac{\omega(s)}{V(s)} = \dfrac{K}{(J\,s+b)\,(L\,s+R)+K^2} $,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;you can calculate the unit-step response of the motor as&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\lim_{s\rightarrow 0}\ \dfrac{1}{s} \dfrac{\omega(s)}{V(s)} \, s = \dfrac{K}{b\, R+K^2}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus your free running motor's verlocity should settle at approximately yield&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\omega = \dfrac{K}{b\, R+K^2}\, \nu \, V_{sup}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However you must be lucky to be given precise motor parameters. Note due to modelling errors (neglecting many disturbances, heat, ...) this is only a rough approximation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I recently did a comparison of a motor's step response to different input voltages (PWM controlled) and the theoretical step response of a modelled DC-Motor:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/71QzU.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/71QzU.png&quot; alt=&quot;Model vs. &amp;quot;real&amp;quot; motor&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, if the load or respectively the torque you're applying at the motor's shaft is not constant, you most certainly will have to implement a control loop, measuring the momentary rpm of the motor, calculating the deviation from the reference velocity and applying a duty-cycle that depends on this deviation. This can be done by using simple controler such as a PI-controler and is extensively discussed in literature. Tuning for the controller parameters can be done by &quot;intelligent trying&quot;, approximative rules (Ziegler-Nichols) or given that you have the parameters of your motor, by numerical optimization techniques.&lt;/p&gt;&#xA;" OwnerUserId="10374" LastEditorUserId="10374" LastEditDate="2015-08-20T06:24:00.687" LastActivityDate="2015-08-20T06:24:00.687" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7903" PostTypeId="1" CreationDate="2015-08-19T16:49:15.033" Score="2" ViewCount="164" Body="&lt;p&gt;I want to create a rotating control mechanism that can turn a surface to face any direction in a sphere. My dad (an electrical engineer) said I can probably do it by connecting two servo motors together. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am looking for a servo motor that can do what I want to do, which is moving the sphere with decent precision (within ~1 degree) but I don't know which kinds of motors are able to handle such precision. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another challenge is that one servo will have to hold the second servo on top. As I understand it, the torque rating determines the maximum amount of force the servo can exert on its load so I can figure out if the servo is strong enough through some math?&lt;/p&gt;&#xA;" OwnerUserId="10412" LastActivityDate="2015-08-20T15:18:24.563" Title="How can I tell if a servo motor is capable of being controlled degree by degree?" Tags="&lt;control&gt;&lt;otherservos&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7904" PostTypeId="2" ParentId="952" CreationDate="2015-08-19T19:18:48.240" Score="3" Body="&lt;p&gt;In the end, I found that the best way to do this was to employ a very simple concept: &lt;a href=&quot;https://en.wikipedia.org/wiki/Flood_fill&quot; rel=&quot;nofollow&quot;&gt;Flood Fill&lt;/a&gt;.  I used a &lt;a href=&quot;https://en.wikipedia.org/wiki/Flood_fill#Alternative_implementations&quot; rel=&quot;nofollow&quot;&gt;stack-based iterative approach&lt;/a&gt; instead of the recursive option, and modified it for physical space by using an A* search to find a path from the current location to the next location in the stack (using only those grid squares that have already been visited, since I'm guaranteed to have a path between them).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The efficiency seems fairly reasonable.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2015-08-19T19:18:48.240" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7905" PostTypeId="2" ParentId="7903" CreationDate="2015-08-19T20:38:22.960" Score="0" Body="&lt;p&gt;I had a very similar problem. I searched several days in internet without success and then I took a wrong decision. I took a &quot;normal&quot; PWM (pulse width modulation) servo and it was extremely imprecise. The position results were not exactly reproducible. Additionally these cheap servos always rotate with the maximum speed which is mostly unuseful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After my project was already finished with the wrong servos I knew that the servos which I need really DO exist. Why didn't I know of them before ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tell you the secret: Use Dynamixel.&#xA;I use the AX-12A which runs at 12V and does precise positioning and allows also to control the speed. And if this would not be enough it also returns to you the current position from 0 to 300 degree! I don't know of any other servo which has this functionality.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Download the detailed datasheet and read it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.D. There is no problem to put one servo on top of the other. You can even put three servos on each other to move in the 3 directions. A short plastic bracket (very hard) to mount one servo directly on top of another comes with the servo, also the screws. You can also order longer brackets of metal.&lt;/p&gt;&#xA;" OwnerUserId="10416" LastEditorUserId="10416" LastEditDate="2015-08-19T20:51:22.857" LastActivityDate="2015-08-19T20:51:22.857" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="7906" PostTypeId="2" ParentId="453" CreationDate="2015-08-20T06:42:24.377" Score="0" Body="&lt;p&gt;You can use an &lt;a href=&quot;http://www.ebay.co.uk/itm/391201790274?_trksid=p2055119.m1438.l2649&amp;amp;ssPageName=STRK%3AMEBIDX%3AIT&quot; rel=&quot;nofollow noreferrer&quot;&gt;RC battery checker&lt;/a&gt;, &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/39992.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/39992.jpg&quot; alt=&quot;Cell capacity Controller&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;to verify the individual cells in a battery pack. These are cheap, for about $3.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If any cell is below 3V on a LiPo battery then it should be considered as dead, or dying, and hence, it should be replaced.&lt;/p&gt;&#xA;" OwnerUserId="9176" LastEditorUserId="9176" LastEditDate="2015-09-22T17:13:01.240" LastActivityDate="2015-09-22T17:13:01.240" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7907" PostTypeId="2" ParentId="7896" CreationDate="2015-08-20T14:39:33.230" Score="1" Body="&lt;p&gt;In the real world, this cannot be calculated.  You have three options, from best to worst:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Measure the actual RPM in real time and make appropriate adjustments to the motor's input power (such as with a PID).&lt;/li&gt;&#xA;&lt;li&gt;Use a stepper motor, control the step rate, and assume that it will never stall.&lt;/li&gt;&#xA;&lt;li&gt;Allow &quot;fixed RPM&quot; to mean &quot;bell curve of acceptable RPMs&quot;.  Then, characterize the motor's commanded speed versus its actual speed, base your calculations on that, and be prepared to do it again when the motor's characteristics inevitably drift (due to load, lubrication, ambient temperature, etc) and cause your RPMs to move out of the acceptable range.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="350" LastActivityDate="2015-08-20T14:39:33.230" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7908" PostTypeId="2" ParentId="7903" CreationDate="2015-08-20T15:18:24.563" Score="1" Body="&lt;p&gt;The measurement you're looking for is called &amp;quot;resolution&amp;quot; -- it will tell you how many positions the motor can be in.  One way to calculate this is based on the number of bits returned by the &lt;a href=&quot;https://en.wikipedia.org/wiki/Rotary_encoder&quot; rel=&quot;nofollow noreferrer&quot;&gt;encoder&lt;/a&gt; (or &lt;a href=&quot;https://en.wikipedia.org/wiki/Resolver_%28electrical%29&quot; rel=&quot;nofollow noreferrer&quot;&gt;resolver&lt;/a&gt;).   &lt;a href=&quot;https://nikhiljgeorge.wordpress.com/2012/08/24/70/&quot; rel=&quot;nofollow noreferrer&quot;&gt;This page has a great introduction to servo motors&lt;/a&gt;, including this bit on resolution:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Resolution&lt;/strong&gt; – this is a measure of the smallest angular movement that the motor can be commanded to make. This is pretty crucial [...]. However, things get quite tricky here, because most hobbys servo motors do not provide their angular resolution ratings – this can be quite infuriating, as servos will be rated as “super accurate”, but nothing more. Resolution is also confusing because in reality there are two resolutions at play here – the &lt;em&gt;Servo Controller Resolution&lt;/em&gt; and the &lt;em&gt;Servo Motor Resolution&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The Servo Controller Resolution is the smallest change to pulse width that the servo controller can make. If the exact pulse width is specified to your servo controller, by a 16 bit number, you should be able to specify &lt;span class=&quot;math-container&quot;&gt;$2^{16}$&lt;/span&gt; distinct pulse widths. If the servo motor that you have, has a rotation range of 180° the controller should be able to command it to move to one of &lt;span class=&quot;math-container&quot;&gt;$2^{16}$&lt;/span&gt; positions, giving you an angular resolution of 0.003°.&lt;/p&gt;&#xA;&lt;p&gt;However in reality, because of the physical design of hobby servos, the servo motor resolution is much coarser than that. Depending on the motor, you should be able to get between 0.5° to 0.3° (an exception is the MX-28 which has a resolution of 0.088°). I.e. it would take a few step changes in the pulse width, before the change in pulse width got large enough for the hobby servo motor to actually detect it and move. Like a bunch of other properties, it turns out that resolution depends on the load that you are trying to move – at larger loads, the resolution of the motor could drop off (though you may be able to counter this by operating the motor at higher voltages – provided you stay within the rated motor voltages).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Depending on the type of servo, the presence of a gear system might work in your favor.  If it takes multiple turns of the motor to get one turn of the output shaft, you will have gained resolution and torque (at the expense of angular velocity).&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2015-08-20T15:18:24.563" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7909" PostTypeId="2" ParentId="7881" CreationDate="2015-08-20T15:27:04.353" Score="0" Body="&lt;p&gt;It sounds like the simplest option would be to put the grease into a pressurized container (e.g. spring-loaded) and control the metering by just opening and closing the valve.  That would mean you just need a &lt;a href=&quot;https://en.wikipedia.org/wiki/Solenoid_valve&quot; rel=&quot;nofollow&quot;&gt;solenoid valve&lt;/a&gt; to control the opening and closing.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2015-08-20T15:27:04.353" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7910" PostTypeId="1" AcceptedAnswerId="7924" CreationDate="2015-08-20T15:47:39.520" Score="5" ViewCount="6413" Body="&lt;p&gt;I'm a software developer not experienced in AI or machine learning, but I'm now interested in developing this kind of software. I want to develop software that recognizes some specific objects, specifically, animals from a video stream (or a sequence of static images).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I saw there's a library called openCV which is often commented in this forum, but what I saw so far is this library is a helper for working with images, I didn't find the &lt;em&gt;object recognition&lt;/em&gt; or &lt;em&gt;self learning&lt;/em&gt; part.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is &lt;em&gt;openCV&lt;/em&gt; a good starting point? better go for some theory first? or there are other already developed libraries or frameworks aimed for object recognition?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt;&#xA;To give some context: I will have ona camera checking a landscape, mostly static but some leaves may move with the wind or some person may step in, and I want to get an alert when some animal is into view, I can reduce the &quot;animals&quot; to only birds (not always I will have a nice bird/sky contrast).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did some work with supervised neural networks some 15 years ago and studied some AI and machine learning theory, but I guess things have improved way too much since then, that's why I was asking for some more practical first steps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you&lt;/p&gt;&#xA;" OwnerUserId="10422" LastEditorUserId="10422" LastEditDate="2015-08-21T14:55:23.217" LastActivityDate="2015-08-23T19:02:42.830" Title="How can I recognize animals in a video stream or static images with openCV or other library/software?" Tags="&lt;computer-vision&gt;" AnswerCount="1" CommentCount="18" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7912" PostTypeId="1" AcceptedAnswerId="7914" CreationDate="2015-08-21T06:42:12.547" Score="2" ViewCount="420" Body="&lt;p&gt;Project Tango Development Kits come with a mini-dock (see picture below).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am controlling the iRobot Create 2 by the mounted Tablet using the USB cable provided plugged into the mini-dock. (see &lt;a href=&quot;https://developers.google.com/project-tango/hardware/tablet#get_started&quot; rel=&quot;nofollow noreferrer&quot;&gt;docs&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The USB 3.0 port on the mini-dock is only functional when the tablet is docked. The port can be used to attach an external memory drive or standard peripherals to the tablet.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I wish to recharge the tablet using the power from the iRobot. The mini dock comes with a port for external charging:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The mini-dock accepts a power adapter for faster charging (not provided). The power adapter output must be 12V, 2A, and the connector must be a barrel plug with 5.5mm outer diameter, 2.1mm inner diameter, center positive.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Ideally the charging would happen only when the iRobot is also charging, but charging all the time is acceptable. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this possible?  If so, how?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/595xX.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/595xX.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10403" LastActivityDate="2015-08-21T17:25:30.743" Title="Powering a Project Tango Tablet with iRobot Create 2" Tags="&lt;irobot-create&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7913" PostTypeId="1" AcceptedAnswerId="7918" CreationDate="2015-08-21T08:05:02.987" Score="1" ViewCount="476" Body="&lt;p&gt;I have a dual (sequential) loop control system controlling the angle of a rotational joint on a robot using an absolute encoder. I have tuned the inner control loop (for the motor) and am now working on tuning the outer loop (for the joint).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Example of a dual loop controller&lt;/em&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/IuDx0.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/IuDx0.png&quot; alt=&quot;dual loop&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I disturb the system the response isn't what I would expect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Kp = 0.4&lt;/em&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/fmBnB.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fmBnB.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Kp = 0.1 Kd = 0.001&lt;/em&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/PBz8Q.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/PBz8Q.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I didn't add a &lt;em&gt;Ki&lt;/em&gt; term because I don't have any steady state error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm confused by the fact that the second overshoot in the first plot is larger than the first one. No matter how I adjust the parameters I can't seem to get rid of the oscillation in the velocity of the joint (seen in the second plot). One limitation I have is if I increase both &lt;em&gt;Kp&lt;/em&gt; and &lt;em&gt;Kd&lt;/em&gt; too high the gearbox of the becomes very noisy because the noise in the encoder signal creates larger adjustments in the position of the motor. I'm working on adding a filter to the output using the method described &lt;a href=&quot;http://controlguru.com/pid-with-controller-output-co-filter/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The code I'm using for the outer loop is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;static float e_prev = 0.0;&#xA;&#xA;e = joint_setpoint - joint_angle;&#xA;e_i += e/0.001; // dt = 0.001s&#xA;e_d = (e - e_prev)/0.001; // dt = 0.001s&#xA;&#xA;e_prev = e;&#xA;&#xA;motor_setpoint += k_p * e + k_i * e_i + k_d * e_d;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I'm beginning to think that the system might not be able to be modeled by a first order equation, but would this change the implementation of the control loop at all? Any advice is appreciated!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ben&lt;/p&gt;&#xA;" OwnerUserId="10384" LastEditorUserId="10384" LastEditDate="2015-08-22T21:12:37.937" LastActivityDate="2015-08-22T21:12:37.937" Title="Non linear control system?" Tags="&lt;pid&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="7914" PostTypeId="2" ParentId="7912" CreationDate="2015-08-21T17:25:30.743" Score="3" Body="&lt;p&gt;Short answer - No, it is not possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;None of the motor drivers will deliver 24W, see &lt;a href=&quot;https://docs.google.com/viewer?url=http%3A%2F%2Fwww.irobotweb.com%2F~%2Fmedia%2FMainSite%2FPDFs%2FAbout%2FSTEM%2FCreate%2FBatteryPower_2015.pdf%3Fla%3Den&quot; rel=&quot;nofollow&quot;&gt;link&lt;/a&gt;.  In addition the power supply that provides charging power to the robot is limited to just over 24W under the best case. See the dock rating on the label (22.5V @ 1.25A).  All of this power is used to charge the robot battery and power the robot electronics to control charging.  Even if you waited until the robot battery was finished charging you would still need to convert the 22.5V to 12V but there is no suitable access to the 22.5V.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will either have to live with charging your Tango independently from the robot or use a lower power computer (Arduino, RasPi, etc.) to control Create 2. &lt;/p&gt;&#xA;" OwnerUserId="9343" LastActivityDate="2015-08-21T17:25:30.743" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7915" PostTypeId="1" AcceptedAnswerId="7916" CreationDate="2015-08-21T18:10:46.970" Score="4" ViewCount="2586" Body="&lt;p&gt;Like the title says.. Will it work? I know about the due 3.3 volt limitations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to build a hexapod with 18 servo's.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The shield I am looking at:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://yourduino.com/sunshop2/index.php?l=product_detail&amp;amp;p=195&quot; rel=&quot;nofollow&quot;&gt;http://yourduino.com/sunshop2/index.php?l=product_detail&amp;amp;p=195&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it isn't compatible. Is there an alternative shield which will work? I can't seem to find much for the due.&lt;/p&gt;&#xA;" OwnerUserId="9346" LastActivityDate="2015-08-27T05:04:10.927" Title="Arduino mega shield v2.0 compatibility with arduino due" Tags="&lt;arduino&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7916" PostTypeId="2" ParentId="7915" CreationDate="2015-08-21T19:54:52.767" Score="4" Body="&lt;p&gt;It should be possible to plug that shield into either a Due or a Mega, with the caveat that the URF01 pins on the shield may interfere with two sockets of the Power header (IOREF and the opening next to it).  (Older Mega's may have a six-pin Power header rather than eight-pin.)  If there's interference you might need to remove a pin or two from the URF01 group.  Here is a picture of a Due overlaid (at 41% transparency) on top of a Mega:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/Zbe7J.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Zbe7J.jpg&quot; alt=&quot;Due at 41% transparency overlaid on Mega&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The overlay is imperfect (due to slight mispositioning, slight scale errors, and camera distortion) but is good enough to show that the shield should plug in.  The shield appears to have a power-indicator LED on it, but aside from that apparently has no electronics to cause problems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The photos that I overlaid came from &lt;a href=&quot;https://www.arduino.cc/en/Main/arduinoBoardMega&quot; rel=&quot;nofollow noreferrer&quot;&gt;arduinoBoardMega&lt;/a&gt; and &lt;a href=&quot;https://www.arduino.cc/en/Main/ArduinoBoardDue&quot; rel=&quot;nofollow noreferrer&quot;&gt;ArduinoBoardDue&lt;/a&gt; or related sites.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The following is from “&lt;a href=&quot;https://blog.arduino.cc/2011/01/05/nice-drawings-of-the-arduino-uno-and-mega-2560/&quot; rel=&quot;nofollow noreferrer&quot;&gt;nice drawings of the arduino uno and mega 2560&lt;/a&gt;” on arduino.cc and should let you measure your Due to see if it matches:  &lt;a href=&quot;https://i.stack.imgur.com/7RdzA.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7RdzA.png&quot; alt=&quot;mega dimensions diagram&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Numbers in the picture above are in mils, that is, in thousandths of an inch.  Numbers in the picture below (from &lt;a href=&quot;http://www.hwkitchen.com/products/arduino-mega-2560/&quot; rel=&quot;nofollow noreferrer&quot;&gt;hwkitchen.com&lt;/a&gt;) are in millimeters.  Note, the picture above is the more-recent R3 version, with 8 pins in the power block, vs the 6 pins in that block in the picture below.  &lt;a href=&quot;https://i.stack.imgur.com/Vly49.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Vly49.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The thread &lt;a href=&quot;http://forum.arduino.cc/index.php?topic=148640.0&quot; rel=&quot;nofollow noreferrer&quot;&gt;shield layout for DUE/Mega&lt;/a&gt; in forum.arduino.cc also may be of interest.  It suggests the Due and Mega have matching pin layouts.  It also gives links to some CAD files for the boards.&lt;/p&gt;&#xA;" OwnerUserId="478" LastEditorUserId="478" LastEditDate="2015-08-27T05:04:10.927" LastActivityDate="2015-08-27T05:04:10.927" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="7918" PostTypeId="2" ParentId="7913" CreationDate="2015-08-22T00:59:46.010" Score="2" Body="&lt;p&gt;If you see integral, think area. Derivative, think slope. Integral error is error &lt;em&gt;times&lt;/em&gt; sample time (plus previous integral error), derivative error is the change in error divided by time. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your derivative error term is correct, but your integral error term is not. This shouldn't be an issue because you aren't using an integral term (even though you should!)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where I would guess your problem lies is with your controller output - you have &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;motor_setpoint += k_p * e + k_i * e_i + k_d * e_d;&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here you have the &lt;code&gt;+=&lt;/code&gt; operator, which indicates that &lt;code&gt;motor_setpoint&lt;/code&gt; is &lt;em&gt;accumulating&lt;/em&gt; the output of your controller. This is incorrect. The output of your PID controller alone is the input to your motor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would guess you might be thinking that you are adding the control signal to your reference, but remember that your reference was already taken into account when calculating the error! &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is, for me at least, the magical aspect of the PID controller. It doesn't care what is between the controller and the output, it just adjusts until there is zero error. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If error is accumulating quickly (integral error is high), the controller &quot;opens up&quot;, but then if error starts to drop quickly (derivative error is high) it will &quot;ease off&quot; to minimize the overshoot. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If anything, I would suggest eliminating the derivative term and using only the PI controller - this is commonly done in industry because the derivative term is highly sensitive to noise. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyways, hopefully this fixes your issue, but if not please at least make the changes and then re-generate  and re-post your plots. If the base controller isn't right we can't divine anything from the plots.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, check out &lt;a href=&quot;https://en.wikipedia.org/wiki/Ziegler%E2%80%93Nichols_method&quot; rel=&quot;nofollow&quot;&gt;Ziegler-Nichols&lt;/a&gt; tuning if you're looking for some professional PID tuning advice. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-08-22T00:59:46.010" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="7919" PostTypeId="1" CreationDate="2015-08-22T07:34:58.890" Score="1" ViewCount="533" Body="&lt;p&gt;The transmission of telemetry data between the ground base station and APM 2.x (Arducopter), using XBee, is not well documented. The only documentation is &lt;a href=&quot;http://copter.ardupilot.com/wiki/common-optional-hardware/common-telemetry-landingpage/common-telemetry-xbee/&quot; rel=&quot;nofollow&quot;&gt;Telemetry-XBee&lt;/a&gt;, but it does not specify what XBee version is used. I have been checking and I guess is version 1 (this one has P2P link and the others not), but I am not sure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to know, what XBee modules people use for flying drones? Do they have problems with the APM connection? How can I control the drone remotely using the XBee link with &lt;a href=&quot;http://qgroundcontrol.org/mavlink/start&quot; rel=&quot;nofollow&quot;&gt;Mavlink&lt;/a&gt; protocol?&lt;/p&gt;&#xA;" OwnerUserId="10433" LastEditorUserId="10433" LastEditDate="2015-08-26T15:55:44.057" LastActivityDate="2016-02-03T09:28:04.247" Title="Telemetry with APM 2.6 and XBee" Tags="&lt;quadcopter&gt;&lt;radio-control&gt;&lt;mavlink&gt;" AnswerCount="0" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="7920" PostTypeId="1" AcceptedAnswerId="7923" CreationDate="2015-08-22T11:36:47.887" Score="3" ViewCount="1036" Body="&lt;p&gt;My 6 joint robot arm structure doesn't meet the requirements for a closed form solution (no 3 consecutive axes intersecting at a point or 3 parallel axes...).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What would be best method to adopt to get solution in 1ms or less? Estimation accuracy of 1mm. I'm assuming the computation is done on an average laptop Intel Core i3, 1.7GHz, 4GB RAM&lt;/p&gt;&#xA;" OwnerUserId="10435" LastEditorUserId="110" LastEditDate="2015-08-24T20:12:35.357" LastActivityDate="2015-09-18T13:37:38.463" Title="Inverse kinematics solution for 6DOF serial arm" Tags="&lt;inverse-kinematics&gt;" AnswerCount="1" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7921" PostTypeId="1" AcceptedAnswerId="7922" CreationDate="2015-08-22T21:36:03.890" Score="1" ViewCount="252" Body="&lt;p&gt;Is it possible to localize a robot without any sensors, odometer and servo motors?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assume robot has dc motors and no obstacles.&lt;/p&gt;&#xA;" OwnerUserId="10440" LastActivityDate="2015-08-22T23:22:00.840" Title="Robot localization without any sensors" Tags="&lt;localization&gt;&lt;mapping&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="7922" PostTypeId="2" ParentId="7921" CreationDate="2015-08-22T23:22:00.840" Score="5" Body="&lt;p&gt;If you know the wheel radius and the speed of the robot, you will be able to calculate its location at any time relatively to its initial position.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;travelled_distance = Speed * time;&#xA;current_position = initial_position + travelled_distance;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This is a simplified 1-dimensional equation than can help you. But keep in mind that without sensors and odometry the localization can't be very accurate.&lt;/p&gt;&#xA;" OwnerUserId="7064" LastActivityDate="2015-08-22T23:22:00.840" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7923" PostTypeId="2" ParentId="7920" CreationDate="2015-08-23T12:43:35.490" Score="2" Body="&lt;p&gt;I don't believe 3 consecutive axes intersecting at a point rules out closed form solutions.  Although i don't have a reference for this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should investigate &lt;a href=&quot;http://openrave.org/&quot; rel=&quot;nofollow&quot;&gt;OpenRave&lt;/a&gt; and &lt;a href=&quot;http://openrave.org/docs/latest_stable/openravepy/ikfast/&quot; rel=&quot;nofollow&quot;&gt;ikfast&lt;/a&gt;.  This will generate library independent optimized C++ code with closed form solutions for a wide variety of kinematic chains and IK types.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found this paper that might be of interest to you:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Luo, R.C.; Tsung-Wei Lin; Yun-Hsuan Tsai, &quot;&lt;a href=&quot;http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=6942608&amp;amp;isnumber=6942370&quot; rel=&quot;nofollow&quot;&gt;Analytical inverse kinematic solution for modularized 7-DoF redundant manipulators with offsets at shoulder and wrist&lt;/a&gt;,&quot; in Intelligent Robots and Systems (IROS 2014), 2014 IEEE/RSJ International Conference on , vol., no., pp.516-521, 14-18 Sept. 2014&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;While it describes a 7 DOF arm, its shoulder and wrist joints don't intersect at a point.  You might gain some insight from their formulation, or perhaps some of their references.&lt;/p&gt;&#xA;" OwnerUserId="110" LastEditorUserId="110" LastEditDate="2015-09-18T13:37:38.463" LastActivityDate="2015-09-18T13:37:38.463" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7924" PostTypeId="2" ParentId="7910" CreationDate="2015-08-23T19:02:42.830" Score="5" Body="&lt;p&gt;Given that you are doing a more &quot;constrained&quot; goal, with a &quot;mostly&quot; static background, I would recommend simply doing a &quot;&lt;strong&gt;background image subtraction&lt;/strong&gt;&quot; method. The &quot;hard part&quot; which has come a long way over the last decade is how you deal with shadows, light changes, and foliage moving. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are tons of resources on this topic, but here is a good one I found after a quick cursory search: &#xA;&lt;a href=&quot;http://www.pyimagesearch.com/2015/05/25/basic-motion-detection-and-tracking-with-python-and-opencv/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.pyimagesearch.com/2015/05/25/basic-motion-detection-and-tracking-with-python-and-opencv/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This should get you to a 80% solution for what you want.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to go deeper, and try to identify specific animals, there are two main approaches you can potentially follow. The easy one is &lt;strong&gt;Template Matching&lt;/strong&gt;, the harder one is creating a &lt;strong&gt;Bayes Classifier&lt;/strong&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In either approach, you would:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Gather a sample set of data (most likely by using the output from above)&lt;/li&gt;&#xA;&lt;li&gt;Either:&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Create templates you would match against&lt;/li&gt;&#xA;&lt;li&gt;Train your classifier to identify the animals you would want&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;A couple of notes:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Template matching out of the box is highly scale and orientation dependent. While you can start with basic template matching, you'll probably quickly want to create a Gaussian pyramid. Here is a good reference: &lt;a href=&quot;https://stackoverflow.com/questions/22480485/image-matching-in-opencv-python&quot;&gt;https://stackoverflow.com/questions/22480485/image-matching-in-opencv-python&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Doing Bayesian Classifiers well is &lt;strong&gt;hard&lt;/strong&gt;, and if you just search on Google Scholar, you'll see a tons of papers on the subject. However, it seems to be the &quot;way to go&quot; for high accuracy. Generally you would combine the base classifier with some other machine learning technique (such as a Markov Model). If you do go this route, I would recommend trying to do something &quot;simpler&quot; than trying to find a whole bird. Instead, I would recommend perhaps identifying a simple feature that would &quot;mean&quot; bird/animal, such as locating an &quot;eye&quot; or &quot;beak&quot;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Hope this helps.&lt;/p&gt;&#xA;" OwnerUserId="1723" LastEditorUserId="-1" LastEditDate="2017-05-23T12:37:11.430" LastActivityDate="2015-08-23T19:02:42.830" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7925" PostTypeId="1" CreationDate="2015-08-24T07:14:14.537" Score="2" ViewCount="103" Body="&lt;p&gt;I would like to locate the position of a stationary autonomous robot in x-y-z axis relative to a fixed starting point.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could someone suggest sensors that would be suitable for this application?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am hoping to move the robot in 3D space and be able to locate it's position wirelessly. The rate of position update is not important as I would like to stop the robot from moving and relay the information wirelessly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The range I am looking for is roughly 2 KM + (the more the better) with accuracy of  +/- 1 CM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any system that could do this? Thanks for your help.&lt;/p&gt;&#xA;" OwnerUserId="10443" LastActivityDate="2015-08-29T08:04:00.190" Title="Positioning Sensor" Tags="&lt;sensors&gt;&lt;imu&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7926" PostTypeId="2" ParentId="7925" CreationDate="2015-08-24T08:30:31.307" Score="1" Body="&lt;p&gt;Differential GPS could be a starting point. But 1 cm will cost a bit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The basic idea is to increase the accuracy of gps. Stationary antennas at known positions allow to measure the error in the gps signal transit times.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A robot can then receive the error from the antennas and use it to improve its gps result.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://de.wikipedia.org/wiki/Differential_Global_Positioning_System&quot; rel=&quot;nofollow&quot;&gt;According to German wikipedia&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Die erreichbare Genauigkeit liegt je nach Qualität des Empfängers und der Korrekturdaten zwischen 0,3 m und 2,5 m für die Lage (x, y) und bei 0,2 m bis 5 m für die Höhe.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;that is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The possible accuracy depending on the quality of the receiver and the correction data lies between 0,3m and 2,5m for the position (x,y) and between 0,2m and 0,5m for the height.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On top of that, the phase shift of the carrier wave can be evaluated to increase accuracy even further:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Hochqualitative Systeme werten zusätzlich die Phasenverschiebung der Trägerwelle aus [...] und erreichen so Genauigkeiten von wenigen Millimetern (± 1 mm bis ± 10 mm pro km Abstand zur Referenzanlage).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;that is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;High quality systems additionally evaluate the phase shift of the carrierwave and allow accuracy of few milimeters (from $\pm 1mm$ up to $\pm 10mm$ per $1km$ distance to the reference station)&lt;/p&gt;&#xA;" OwnerUserId="23196" LastEditorUserId="9860" LastEditDate="2015-08-24T13:58:08.863" LastActivityDate="2015-08-24T13:58:08.863" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="7927" PostTypeId="2" ParentId="7886" CreationDate="2015-08-24T10:26:24.230" Score="3" Body="&lt;p&gt;Well, although, I didn't well understand what have wrote as a solution to the first part (upper) half of the Jacobian, but AFAIK, the manipulator Jacobian is a $6\times n$ matrix, for that let's say $ J$ is the Jacobian thus:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ &#xA;J = \begin{bmatrix} J_v \\ &#xA;J_\omega \end{bmatrix} \\&#xA;$$ &#xA;where both the upper part $ J_v$ and the lower one $ J_\omega$ are $ 3 \times n $ now: $ J_{v_i} = z_{i−1} \times (o_n − o_{i−1}) $ is the upper half of the Jacobian for the joint $ i$ and  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ &#xA;z^0_{i−1} = R^0_{i−1}k \\&#xA;$$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $ R^0_{i-1}$ is the transformation between the two neighboring frames, and $ z^0_0= k = (0, 0, 1)^T$, also $o_i$ is the position vector for the joint $ i$. and the lower part $ \textbf{which you're looking for} $ is simply:&#xA;$$ J_{\omega_i} = z_{i−1}$$ the upper transcript could be ignored.&#xA;All this for $ \textbf{for revolute joint, as your case.}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\textbf{If we have a prismatic joint}$, then:&#xA;$$&#xA;J_{v_i} = z_{i−1}$$ and $$ J_{\omega_i} = 0 \\&#xA;$$&#xA;You may consult &lt;a href=&quot;http://smpp.northwestern.edu/savedLiterature/Spong_Textbook.pdf&quot; rel=&quot;nofollow&quot;&gt;Spong: robot dynamics and control&lt;/a&gt; for more details (ch4). &lt;/p&gt;&#xA;" OwnerUserId="9087" LastEditorUserId="9720" LastEditDate="2015-08-27T17:33:23.523" LastActivityDate="2015-08-27T17:33:23.523" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7928" PostTypeId="1" AcceptedAnswerId="7932" CreationDate="2015-08-24T11:23:36.903" Score="4" ViewCount="3608" Body="&lt;p&gt;My goal is to move robot in certain points as shown in the figure. It's initial position is (x0,y0) and move along other coordinates.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/TbgKo.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/TbgKo.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am able to track robot position using a camera which is connected to pc and camera is located at the top of the arena. I've mounted a ir beacon on the robot, camera find this beacon and locates it's coordinate(in cm) in the arena. Using this coordinate how can I move my robot to another position, say new position (x1,y1)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My robot has arduino mega 2560 with two DC motors, communication between pc and robot is done using bluetooth&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Update:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks @Chuck for the answer, however I still have few doubts regarding turning angle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My robot position setup is as shown in the image.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(xc, yc) is the current position and (xt, yt) is the target position.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/MsCA9.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MsCA9.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I want to align robot in the direction of the target coordinates, I've to calculate atan2 between target and current coordinates. But the angle remains same since it's current position is not changing with respect to the target point. so I assume robot simply makes 360' rotation at current position?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Update:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The path points is as show below in the image, is my initial heading angle assumption is correct? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;'1' is the starting point.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/buKFd.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/buKFd.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Update&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you for your patience and time, I'm still struck at turning, my code goes like this&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;//current points&#xA;float xc = -300;&#xA;float yc = 300;&#xA;&#xA;//target points&#xA;&#xA;float xt = -300;&#xA;float yt = -300;&#xA;&#xA;//turning  angle&#xA;float turnAngle;&#xA;&#xA;void setup() {&#xA;  // pin setup&#xA;  Serial.begin(9600);&#xA;}&#xA;&#xA;void loop() {&#xA;&#xA;  turnAngle = atan2((yt-yc), (xt-xc)); //calculate turning angle&#xA;&#xA;  turnAngle = turnAngle * 180/3.1415; //convert to degrees&#xA;&#xA;  if (turnAngle &amp;gt; 180) {&#xA;    turnAngle = turnAngle-360;&#xA;  }&#xA;&#xA;  if (turnAngle &amp;lt; -180) {&#xA;    turnAngle = turnAngle+360;&#xA;  }&#xA;&#xA;  if (turnAngle &amp;lt; -10) {&#xA;    //turn right&#xA;  }&#xA;&#xA;  if (turnAngle &amp;gt; 10) {&#xA;    //turn left&#xA;  }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Since angle is always -90' robot only makes right turn in loop at current point, since angle is not changing. I think I'm missing something here.&lt;/p&gt;&#xA;" OwnerUserId="10440" LastEditorUserId="10440" LastEditDate="2015-08-25T14:28:26.493" LastActivityDate="2015-08-25T17:31:18.807" Title="Robot path planning" Tags="&lt;arduino&gt;&lt;navigation&gt;" AnswerCount="1" CommentCount="9" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7930" PostTypeId="1" AcceptedAnswerId="7935" CreationDate="2015-08-24T17:02:14.263" Score="0" ViewCount="283" Body="&lt;p&gt;Can i charge a lipo nano tech battery over imax b3 charger. 2650mah 35/70c 3s is the battery&lt;/p&gt;&#xA;" OwnerUserId="10449" LastEditorUserId="10449" LastEditDate="2015-08-25T08:21:53.690" LastActivityDate="2015-08-25T12:56:50.060" Title="Can i charge a lipo nano tech battery over imax b3 charger" Tags="&lt;battery&gt;&lt;lithium-polymer&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="7932" PostTypeId="2" ParentId="7928" CreationDate="2015-08-25T01:03:28.543" Score="4" Body="&lt;p&gt;You have to know your initial heading, let's call it $\theta_0$. So you start at some position, $p_{start}$, and you're trying to get to some end position, $p_{end}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assume starting position and ending positions are given by:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;p_{start} = &amp;lt;x_0 , y_0&amp;gt; \\&#xA;p_{end} = &amp;lt;x_1 , y_1&amp;gt; \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Those positions are absolute, but you are trying to get from one to another, so all you really care about are relative distances. Then, let:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;dX = x_1 - x_0 \\&#xA;dY = y_1 - y_0 \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now you can find the absolute heading $\theta_{0 \rightarrow 1}$ with the arc tangent of $dX$ and $dY$, but the basic $atan{}$ function doesn't handle negative signs correctly because it can't tell if which or both of $dX$ and $dY$ were negative. What you need is &lt;a href=&quot;https://en.wikipedia.org/wiki/Atan2&quot; rel=&quot;nofollow&quot;&gt;atan2&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$atan2{(dY, dX)}$ will give you the absolute heading of $p_{end}$ with respect to $p_{start}$. Now to find how much your vehicle needs to turn, find the difference between your starting heading and the required heading:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\mbox{Turn angle}= \theta_{0 \rightarrow 1} - \theta_0 \\&#xA;\mbox{Turn angle}= atan2{(dY, dX)} - \theta_0 \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With turn angle, I like my vehicles to turn the direction that requires the least movement, so instead of limiting $\mbox{Turn angle}$ to $0&amp;lt;= \mbox{Turn angle} &amp;lt;= 2\pi$, I would limit the angle to $-\pi&amp;lt;= \mbox{Turn angle} &amp;lt;= \pi$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this way you would wind up turning -10 degrees (10 degrees clockwise) instead of +350 (350 degrees CCW). Ultimately you should wind up in the same spot, but -10 looks &quot;right&quot; and +350 looks foolish. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can limit the turn angle with code like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;while turnAngle &amp;gt; 3.1415&#xA;    turnAngle = turnAngle - 2*3.1415:&#xA;end&#xA;while turnAngle &amp;lt; -3.1415&#xA;    turn Angle = turnAngle + 2*3.1415;&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This code runs and doesn't care what multiple of +/-2$\pi$ you're in, it spits out the same angle bounded to within +/-$\pi$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, calculate how far you travel along your new heading with the magnitude of distance between the points:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\mbox{distance} = \sqrt{dX^2 + dY^2} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Remember to set the new absolute heading, $\theta_{0 \rightarrow 1}$, as your current heading then get the next point!&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;:UPDATE: - Numeric Example&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I believe a point of confusion here may be that I didn't state that the absolute heading is relative to the +x-axis. That said, I'll work through OP's problem as shown in the most recent update. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The initial heading $\theta_0$ is in-line with the +x-axis, so $\theta_0 = 0$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;p_{start} = &amp;lt;-300,300&amp;gt; \\&#xA;p_{end} = &amp;lt;-300,-300&amp;gt; \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;dX = x_{end} - x_{start} = (-300) - (-300) \\&#xA;\boxed{dX = 0} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;dY = y_{end} - y_{start} = (-300) - (300) \\&#xA;\boxed{dY = -600} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\theta_{0 \rightarrow 1} = atan2(dY,dX) \\&#xA;\theta_{0 \rightarrow 1} = atan2(-600,0) \\&#xA;\theta_{0 \rightarrow 1} = -1.5708 \mbox{rad} = -90^o&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, the change in heading:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\mbox{Turn Angle} = \theta_{0 \rightarrow 1} - \theta_0 \\&#xA;\mbox{Turn Angle} = -1.5708 - 0 \\&#xA;\mbox{Turn Angle} = -1.5708 = -90^o\\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The distance you need to travel after turning $\mbox{Turn Angle}$ is given by:&#xA;$$&#xA;\mbox{distance} = \sqrt{dX^2 + dY^2} \\&#xA;\mbox{distance} = \sqrt{0^2 + (-600)^2} \\&#xA;\mbox{distance} = \sqrt{(-600)^2} \\&#xA;\mbox{distance} = 600 \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now the new heading $\theta_1$ is equal to the absolute heading between start and end:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\theta_1 = \theta_{0 \rightarrow 1} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or, alternatively, the new heading is equal to the initial heading plus the turn angle, but the turn angle was defined by the difference between $\theta_{0 \rightarrow 1}$ and $\theta_0$, so the equation above is just a shortcut. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, proceed to the next point:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;p_{start} = &amp;lt;-300,-300&amp;gt; \\&#xA;p_{end} = &amp;lt;0,-300&amp;gt; \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;dX = x_{end} - x_{start} = (0) - (-300) \\&#xA;\boxed{dX = 300} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;dY = y_{end} - y_{start} = (-300) - (-300) \\&#xA;\boxed{dY = 0} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\theta_{1 \rightarrow 2} = atan2(dY,dX) \\&#xA;\theta_{1 \rightarrow 2} = atan2(0,300) \\&#xA;\theta_{1 \rightarrow 2} = 0 \mbox{rad} = 0^o&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, the change in heading:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\mbox{Turn Angle} = \theta_{1 \rightarrow 2} - \theta_1 \\&#xA;\mbox{Turn Angle} = 0 - (-1.5708) \\&#xA;\mbox{Turn Angle} = +1.5708 = +90^o \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The distance you need to travel after turning $\mbox{Turn Angle}$ is given by:&#xA;$$&#xA;\mbox{distance} = \sqrt{dX^2 + dY^2} \\&#xA;\mbox{distance} = \sqrt{(300)^2 + (0)^2} \\&#xA;\mbox{distance} = \sqrt{(300)^2} \\&#xA;\mbox{distance} = 300 \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now the new heading $\theta_1$ is equal to the absolute heading between start and end:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\theta_2 = \theta_{1 \rightarrow 2} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This process repeats as you see fit. &lt;/p&gt;&#xA;&#xA;&lt;h2&gt;:Second Update: Code Issues&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;You need to turn (left or right) by the amount &lt;code&gt;turnAngle&lt;/code&gt;. You have not described your physical robot so nobody can tell you exactly how to turn. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You have your code in &lt;code&gt;void loop()&lt;/code&gt;, which makes me think you are running the same code over and over, but you never take the following steps:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;You never declare a starting heading. &lt;/li&gt;&#xA;&lt;li&gt;You fail to define &lt;code&gt;turnAngle&lt;/code&gt; as the &lt;em&gt;difference&lt;/em&gt; between &lt;code&gt;atan2((yt-yc),(xt-xc))&lt;/code&gt; and the starting heading. &lt;/li&gt;&#xA;&lt;li&gt;After you have turned, you fail to set your new heading. &lt;/li&gt;&#xA;&lt;li&gt;You fail to move forward. &lt;/li&gt;&#xA;&lt;li&gt;You fail to update your current position with the target position&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I would suggest modifying your code as follows:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&#xA;&#xA;&lt;h2&gt;Last update&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The wheel base is the distance from the center of the tire to the center of the other tire. Assuming that the motor speeds while turning are the same magnitude but opposite sides (&lt;code&gt;leftMotorSpeed = - rightMotorSpeed&lt;/code&gt;), and the wheels are the same diameter, you can find out how quickly you are turning by using the arc length equation &lt;code&gt;s = L*theta&lt;/code&gt;, so &lt;code&gt;theta = s/L&lt;/code&gt;, where &lt;code&gt;theta&lt;/code&gt; is the rotation, &lt;code&gt;s&lt;/code&gt; is the arc length, and &lt;code&gt;L&lt;/code&gt; is half the wheel base. Then, taking a derivative, $\dot{\theta} = \dot{s}/L$, where $\dot{s}$ is the linear tire speed, given by $\dot{s} = r_\mbox{tire}*v_\mbox{motor}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you can take motor speed and get back to rotation rate, and then numerically integrate that and compare to the $\mbox{Turn Angle}$: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;thetaDot = (rTire * vMotor) / (wheelBase/2);&lt;/code&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;then &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;theta = theta + thetaDot*dT;&lt;/code&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;where &lt;code&gt;dT&lt;/code&gt; is the sample/sweep time on the controller. Finally, use a while loop to turn the motors until the desired angle is reached. Putting it all together:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;//current points&#xA;float xc = -300;&#xA;float yc = 300;&#xA;&#xA;//target points&#xA;&#xA;float xt = -300;&#xA;float yt = -300;&#xA;&#xA;//turning  angle&#xA;float turnAngle;&#xA;&#xA;//***************&#xA;float startingHeading = 0;&#xA;float currentHeading = startingHeading;&#xA;//***************&#xA;&#xA;//***************&#xA;float turnRight = 1;&#xA;float turnLeft = -1;&#xA;float wheelBase = &amp;lt;This is a number you get by measuring your vehicle&amp;gt;&#xA;float tireRadius = &amp;lt;This is a number you get by measuring your vehicle&amp;gt;&#xA;float speedModifier = 0;&#xA;float vRightMotor = 0;&#xA;float vLeftMotor = 0;&#xA;float vMotor = 0;&#xA;float theta = 0;&#xA;float distance = 0;&#xA;//**************&#xA;&#xA;void setup() {&#xA;  // pin setup&#xA;  Serial.begin(9600);&#xA;}&#xA;&#xA;void loop() {&#xA;  //*************&#xA;  destinationHeading = atan2((yt-yc), (xt-xc)); //calculate turning angle&#xA;  destinationHeading = destinationHeading * 180/3.1415; //convert to degrees&#xA;  turnAngle = destinationHeading - currentHeading;&#xA;  //*************&#xA;&#xA;  if (turnAngle &amp;gt; 180) {&#xA;    turnAngle = turnAngle-360;&#xA;  }&#xA;&#xA;  if (turnAngle &amp;lt; -180) {&#xA;    turnAngle = turnAngle+360;&#xA;  }&#xA;&#xA;  //***************&#xA;  if (turnAngle &amp;lt; 0) {&#xA;    speedModifier = turnRight;&#xA;  }&#xA;&#xA;  if (turnAngle &amp;gt; 0) {&#xA;    speedModifier = turnLeft&#xA;  }&#xA;&#xA;  theta = 0;&#xA;  while abs(abs(theta)-abs(turnAngle)) &amp;gt; 0&#xA;    {&#xA;    vRightMotor = speedModifier * &amp;lt;100 percent speed - varies by your application&amp;gt;;&#xA;    vLeftMotor = -speedModifier * &amp;lt;100 percent speed - varies by your application&amp;gt;;&#xA;    &amp;lt;send the vRightMotor/vLeftMotor speed commands to the motors&amp;gt;&#xA;    vMotor = vRightMotor;&#xA;    thetaDot = (tireRadius * vMotor) / (wheelBase/2);` &#xA;    theta = theta + thetaDot*dT;&#xA;    }&#xA;  &amp;lt;send zero speed to the motors&amp;gt;&#xA;&#xA;  currentHeading = destinationHeading;&#xA;  distance = sqrt((xt - xc)^2 + (yt - yc)^2);&#xA;  if (distance &amp;gt; 0) {&#xA;    // go forward&#xA;  }&#xA;  xc = xt;&#xA;  yc = yt;&#xA;  //****************&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2015-08-25T17:31:18.807" LastActivityDate="2015-08-25T17:31:18.807" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="7934" PostTypeId="2" ParentId="7883" CreationDate="2015-08-25T08:50:44.163" Score="-2" Body="&lt;p&gt;&lt;a href=&quot;http://www.chrobotics.com/downloads/ExampleMatlabCode.zip&quot; rel=&quot;nofollow&quot;&gt;http://www.chrobotics.com/downloads/ExampleMatlabCode.zip&lt;/a&gt; read um7 directly from serial&lt;/p&gt;&#xA;" OwnerUserId="10462" LastActivityDate="2015-08-25T08:50:44.163" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7935" PostTypeId="2" ParentId="7930" CreationDate="2015-08-25T12:56:50.060" Score="0" Body="&lt;p&gt;Disclaimer: I have never actually used the B3 so trust this only 90% ;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The iMax B3 is specifically marketed towards 2/3 cell Lipo Batteries and reviews suggest it works ok, so the B3 should be fine to use. As I mentioned in the comments, it can only supply 0.7A for 3 cells, so a 2.65Ah battery is going to take a very long time to charge.  Can the B3 damage the battery?  As long as you dont get faulty hardware (which is true for all chargers), and the fact you certainty won't have overcharging problems, it'll be completely safe.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suggest investing in the iMax B6 as you can charge at a much faster rate and those will last you a decent amount of time (I've had mine for 2 years no problem)&lt;/p&gt;&#xA;" OwnerUserId="7647" LastActivityDate="2015-08-25T12:56:50.060" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7937" PostTypeId="1" CreationDate="2015-08-25T19:18:33.503" Score="3" ViewCount="166" Body="&lt;p&gt;Let's say I would like to use an EKF to track the position of a moving robot. The EKF would not only estimate the position itself but also variables affecting the position estimate, for example IMU biases, wheel radius, wheel slip and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is, i&lt;strong&gt;s it better to use one big EKF (state vector containing all estimated variables) or multiple smaller EKFs (each one responsible for tracking a subset of all variables to be estimated)?&lt;/strong&gt; Or is there no difference?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for the example above, the EKF could be split into one for tracking position, one for estimating wheel radius and slip and one for estimating IMU biases. The position EKF would of course use the estimations output from the other concurrent EKFs and vice versa.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To me it seems it would be easier to tune and test multiple smaller EKFs rather than just one big. Are there any other advantages/disadvantages (execution time, ease of debugging etc.) assuming the resulting estimates are equal in the two approaches (or close enough at least)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks,&#xA;Michael&lt;/p&gt;&#xA;" OwnerUserId="10464" LastActivityDate="2015-10-24T20:40:26.310" Title="Multiple EKFs or one big" Tags="&lt;kalman-filter&gt;&lt;ekf&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7938" PostTypeId="2" ParentId="7937" CreationDate="2015-08-25T20:22:41.170" Score="1" Body="&lt;p&gt;Unless there is some cross-channel noise, like a motor power line causing noise on some sensor signal line, then it won't matter if you do one large filter or a series of small filters because the noise covariance matrix and other matrices should all be &lt;strong&gt;block&lt;/strong&gt; diagonal matrices. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As mentioned in &lt;a href=&quot;https://dsp.stackexchange.com/a/21843&quot;&gt;this post&lt;/a&gt; over at the DSP stack exchange:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In general though your Q matrix will be full, not a diagonal, because there is correlation between the state variables. For example, suppose you are tracking position and velocity in x-axis for a car. Process noise (which Q is modelling) might be things like wind, bumps in the road, and so on. If there is a change in velocity due to this noise, there will also be a change in position. They are correlated, and so the off-diagonal elements will be non-zero for those terms.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So, while there may be correlation between position and velocity for one motor, there should be &lt;em&gt;no&lt;/em&gt; correlation between feedback noise on one motor and feedback noise on the other motor, just like there shouldn't be correlation between motor feedback noise and IMU output, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given this, the fact that noise should not be correlated across various sensed elements, you are free to break the filter down into sub-sections. There shouldn't be any change in computational speed unless you're working with software highly optimized for matrices (read: Matlab), but even then there shouldn't be a noticeable difference in speed unless you're working with a huge (thousands of elements) matrix. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would break the filter down into subsections just for clarity - you're going to have a bigger issue if you fat-finger or misinterpret a section and you don't notice because you're working with some ridiculous 15x15 matrix or similar.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="-1" LastEditDate="2017-04-13T12:47:28.380" LastActivityDate="2015-08-25T20:22:41.170" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7940" PostTypeId="1" AcceptedAnswerId="7941" CreationDate="2015-08-26T06:12:55.920" Score="0" ViewCount="53" Body="&lt;p&gt;I am new in this field, I am looking for some high precision gyroscopes and accelerometers for attitude measurements.The precision requirement is around 0.2~0.5 deg/s dynamic.&#xA;    I have done some digging myself, not a single integrated MEMS sensor can do that without costing too much. So some heavy math is needed but that's fine.I need to make sure the prefect sensors are chosen, the budget is less than 100USD.&#xA;    can any one help, thanks in advanced.&lt;/p&gt;&#xA;" OwnerUserId="10467" LastEditorUserId="6911" LastEditDate="2015-08-26T20:45:14.270" LastActivityDate="2015-08-26T20:45:14.270" Title="recommendation for really high precision attitude measurement sensors" Tags="&lt;sensors&gt;&lt;research&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7941" PostTypeId="2" ParentId="7940" CreationDate="2015-08-26T07:41:54.590" Score="1" Body="&lt;p&gt;A friend of mine is senior developer at Infineon technologies for automotive applications. He told me that the best Inertial-MEMS for the automotive applications (which is basically your price target) are provided by BOSCH.&#xA;After a quick search, I found the SMI130 which has pretty good signal-to-noise ratios. In addition this chip is available for 13$.&lt;/p&gt;&#xA;" OwnerUserId="6911" LastActivityDate="2015-08-26T07:41:54.590" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7942" PostTypeId="1" CreationDate="2015-08-26T13:45:06.630" Score="4" ViewCount="897" Body="&lt;p&gt;I have a mobile robot and I would like it to follow the walls of a room.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A map of the room. &lt;/li&gt;&#xA;&lt;li&gt;Wheel encoders for the odometry.&lt;/li&gt;&#xA;&lt;li&gt;A Kalman filter for fusing data from wheel encoders and IMU. &lt;/li&gt;&#xA;&lt;li&gt;A Hokuyo lidar for localization and obstacle avoidance&lt;/li&gt;&#xA;&lt;li&gt;A Kinect to see obstacles which can not be seen by the Hokuyo. &lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://wiki.ros.org/amcl&quot; rel=&quot;nofollow noreferrer&quot;&gt;Amcl&lt;/a&gt; for localization.&lt;/li&gt;&#xA;&lt;li&gt;A couple of sharp sensors on the side for wall following. &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I am not planning to use the global or local &lt;a href=&quot;http://wiki.ros.org/costmap_2d&quot; rel=&quot;nofollow noreferrer&quot;&gt;costmap&lt;/a&gt; because the localization of the robot is not perfect and the robot might think that it is closer (or further away) to the wall than it actually is and therefore, wall following might fail. So, I am planning to just use the data from Hokuyo lidar and sharp sensors to do wall following and maintain constant distance from the wall (say 10 cm). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, I would like to know what is the best technique for doing wall following in this manner? Also, how can one deal with the issue of open gaps in the wall (like open doors, etc..) while doing wall following using the above approach?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know this is a very general question but any suggestions regarding it will be appreciated. Please let me know if you need more information from me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt;&lt;br&gt;&#xA;I am just trying to do wall following in a given room (I have the vertices of the room in a global reference frame) For example, Lets say I have a map of a room (shown below). I want to make the robot follow the wall very closely (say 10 cm from the wall). Also, if there is an open space (on bottom left), the robot should not go in the adjacent room but should keep on doing wall following in the given room (For this, I have the boundary limits of the room which I can use to make sure the robot is within the given room).&lt;br&gt;&#xA;The approach which I am thinking is to come up with an initial global path (set of points close to the wall) for wall following and then make sure robot goes from one point to the next making sure that it always maintains a certain distance from the wall. If there is no wall, then the robot can just follow the global path (assuming localization is good). I am not sure about its implementation complexity and whether there is a better algorithm/ approach to do something like this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/9lFqg.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9lFqg.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10101" LastEditorUserId="10101" LastEditDate="2015-08-26T15:36:59.343" LastActivityDate="2015-08-27T15:11:56.117" Title="Wall following using hokuyo lidar and sharp IR sensors" Tags="&lt;sensors&gt;&lt;localization&gt;&lt;navigation&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7943" PostTypeId="2" ParentId="7763" CreationDate="2015-08-26T15:26:26.167" Score="7" Body="&lt;p&gt;I have been doing a lot of reading up on kinematic calibration and here is what I found:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From [1]:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;A kinematic model should meet three basic requirements for&#xA;  kinematic-parameter identification:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;1) Completeness: A complete model must have enough parameters to describe any possible deviation of the actual kinematic parameters from the nominal values.   &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;2) Continuity: Small changes in the geometric structure of the robot must&#xA;  correspond to small changes in the kinematic parameters. In&#xA;  mathematics, the model is a continuous function of the kinematic&#xA;  parameters.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;3) Minimality: The kinematic model must include only a&#xA;  minimal number of parameters. The error model for the kinematic&#xA;  calibration should not have redundant parameters.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;While DH parameters are complete and minimal, they are not continuous.  In addition, there is a singularity when two consecutive joints have parallel axes.  From [2]:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Our assumption is that small variations in the position and orientation of two consecutive links can be modeled by small variations of the link parameters.  This assumption is violated if we use the Denavit and Hartenberg link geometry characterization when the two consecutive joints have parallel or near parallel axes.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This has led a number of researchers to propose alternative models.  Namely the Hayati model [2], Veitschegger and Wu’s model [3], Stone and&#xA;Sanderson’s S-model [4], and the &quot;Complete and Parametrically Continuous&quot; (CPC) model [5].&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These models typically involve adding parameters.  Which creates redundancy that has to be dealt with.  Or they are specifically tailored to the geometry of their robot.  Which eliminates generality.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One alternative is the Product of Exponentials formulation [6].  The kinematic parameters of in POE model vary smoothly with changes in joint axes and can handle kinematic singularities naturally.  However, due to the use of joint twists, this method is not minimal.  This led Yang et al. [7] to propose a POE formulation with only 4 parameters per joint which is minimal, continuous, complete, and general.  They do this by choosing joint frames very specifically.  (Which actually vaguely resemble D-H frames).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;[1]: Ruibo He; Yingjun Zhao; Shunian Yang; Shuzi Yang, &quot;Kinematic-Parameter Identification for Serial-Robot Calibration Based on POE Formula,&quot; in Robotics, IEEE Transactions on , vol.26, no.3, pp.411-423, June 2010&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[2]: Hayati, S.A., &quot;Robot arm geometric link parameter estimation,&quot; in Decision and Control, 1983. The 22nd IEEE Conference on , vol., no., pp.1477-1483, - Dec. 1983&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[3]: W. Veitschegger and C. Wu, “Robot accuracy analysis based on kinematics,” IEEE Trans. Robot. Autom., vol. RA-2, no. 3, pp. 171–179, Sep.&#xA;1986.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[4]: H. Stone and A. Sanderson, “A prototype arm signature identification&#xA;system,” in Proc. IEEE Conf. Robot. Autom., Apr. 1987, pp. 175–182.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[5]: H. Zhuang, Z. S. Roth, and F. Hamano, “A complete and parametrically&#xA;continuous kinematic model for robot manipulators,” IEEE Trans. Robot.&#xA;Autom., vol. 8, no. 4, pp. 451–463, Aug. 1992.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[6]: I. Chen, G. Yang, C. Tan, and S. Yeo, “Local POE model for robot kinematic calibration,” Mech. Mach. Theory, vol. 36, no. 11/12, pp. 1215–&#xA;1239, 2001.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[7]: Xiangdong Yang, Liao Wu, Jinquan Li, and Ken Chen. 2014. A minimal kinematic model for serial robot calibration using POE formula. Robot. Comput.-Integr. Manuf. 30, 3 (June 2014), 326-334.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-08-26T15:26:26.167" CommentCount="0" CommunityOwnedDate="2015-08-26T15:26:26.167" ContentLicense="CC BY-SA 3.0" />
  <row Id="7944" PostTypeId="1" CreationDate="2015-08-26T21:07:01.283" Score="4" ViewCount="174" Body="&lt;p&gt;I'm building my first quadcopter, and these are the components I intend to buy:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Motor: &lt;a href=&quot;http://store.fut-electronics.com/collections/brushless-motors/products/brushless-motor-1400-kv&quot; rel=&quot;nofollow&quot;&gt;EMAX BL2212 1400 KV Brushless Outrunner Motor&lt;/a&gt; around 0.9 kg thrust: &lt;/li&gt;&#xA;&lt;li&gt;Flight Controller: &lt;a href=&quot;http://store.fut-electronics.com/collections/sensors-controls/products/multiwii-v2-5-flight-controller&quot; rel=&quot;nofollow&quot;&gt;Multiwii V2.5 Flight Controller&lt;/a&gt; &lt;/li&gt;&#xA;&lt;li&gt;Propellers: I don't know which one to get: &lt;a href=&quot;http://store.fut-electronics.com/collections/propellers&quot; rel=&quot;nofollow&quot;&gt;fut-electronics propellers collection&lt;/a&gt;  &lt;/li&gt;&#xA;&lt;li&gt;GPS: &lt;a href=&quot;http://store.fut-electronics.com/products/skylab-uart-gps-module-skm58-small-form-factror&quot; rel=&quot;nofollow&quot;&gt;Skylab UART GPS Module SKM58&lt;/a&gt;   (Small Form Factor)&lt;/li&gt;&#xA;&lt;li&gt;Radio Communication: &lt;a href=&quot;http://store.fut-electronics.com/collections/telemetry/products/radio-telemetry-915-mhz-3dr&quot; rel=&quot;nofollow&quot;&gt;Radio Telemetry 915 Mhz (3DR)&lt;/a&gt;, is there an affordable alternative to buying a radio telemetry maybe using Wi-Fi?  &lt;/li&gt;&#xA;&lt;li&gt;ESCs: &lt;a href=&quot;http://store.fut-electronics.com/collections/esc/products/4x1-esc-4x25a-speed-controller-for-quadcopter&quot; rel=&quot;nofollow&quot;&gt;4x1 ESC (4x25A) - Speed Controller for Quadcopter&lt;/a&gt; &lt;/li&gt;&#xA;&lt;li&gt;Battery: I don't know &lt;a href=&quot;http://store.fut-electronics.com/collections/battery-chargers&quot; rel=&quot;nofollow&quot;&gt;which one to choose&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;My questions are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Are the components compatible?&lt;/li&gt;&#xA;&lt;li&gt;What battery to choose?&lt;/li&gt;&#xA;&lt;li&gt;If I'm not planning to do GPS planned missions, would the GPS be important for anything else?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;By the way I intend to attach a camera or a smart-phone to it for video capturing I think it is about an extra 200 grams.&lt;/p&gt;&#xA;" OwnerUserId="10476" LastEditorUserId="478" LastEditDate="2015-09-09T04:52:16.603" LastActivityDate="2018-12-12T08:02:30.523" Title="Compatibilty of my setup?" Tags="&lt;quadcopter&gt;&lt;multi-rotor&gt;&lt;uav&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7945" PostTypeId="1" AcceptedAnswerId="7948" CreationDate="2015-08-27T06:28:41.820" Score="3" ViewCount="211" Body="&lt;p&gt;Why are 'cell decomposition' methods in motion planning given the name, &quot;combinatorial&quot; motion planning?&lt;/p&gt;&#xA;" OwnerUserId="8916" LastActivityDate="2015-08-27T13:19:31.947" Title="Why the name &quot;combinatorial&quot;?" Tags="&lt;motion-planning&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7946" PostTypeId="2" ParentId="7942" CreationDate="2015-08-27T06:53:03.213" Score="1" Body="&lt;p&gt;For a first attempt I would suggest constructing an angle histogram. See page 188-191 of this (old but still useful) reference:&#xA;&lt;a href=&quot;http://www-personal.umich.edu/~johannb/Papers/pos96rep.pdf&quot; rel=&quot;nofollow&quot;&gt;http://www-personal.umich.edu/~johannb/Papers/pos96rep.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In other words, construct straight line segments representing parts of the wall from your scan points.  Then identify the nearest wall and estimate its direction from the histogram, or perhaps by directly taking scan points along that region of the wall and making a least squares fit or some other average.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you have an approximate straight line for the wall, it should be possible to produce a turn command for the vehicle to steer itself.&lt;/p&gt;&#xA;" OwnerUserId="9578" LastEditorUserId="9578" LastEditDate="2015-08-27T15:11:56.117" LastActivityDate="2015-08-27T15:11:56.117" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7948" PostTypeId="2" ParentId="7945" CreationDate="2015-08-27T12:50:12.497" Score="0" Body="&lt;p&gt;Let's take a look what &lt;a href=&quot;https://en.wikipedia.org/wiki/Combinatorics&quot; rel=&quot;nofollow&quot;&gt;combinatorics&lt;/a&gt; is all about:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;Combinatorics&lt;/strong&gt; is a branch of mathematics concerning the study of &lt;strong&gt;finite&lt;/strong&gt; or &lt;strong&gt;countable discrete structures&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Cell decomposition (or any graph based motion planning for that matter) operates on some finite structure. That sounds plausible, as choosing from infinitely many options can be a hard thing to do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that the countable discrete structure can contain elements that in some sense represent infinitely many choices. Say for example if each cell is a polygon and you want to find a path from one side to another one, there are infinitely many ways to do this, even if you use a straight line to connect the starting and end point. That's because each side of a polygon is a line and thus consist of infinitely many points that you could start from.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the general structure is still finite, because you have a finite amount of cells.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Aspects of combinatorics include &lt;strong&gt;counting the structures&lt;/strong&gt; of a given &lt;strong&gt;kind and size&lt;/strong&gt; (enumerative combinatorics), &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If they are countable, then they can be counted. It sounds trivial, but it is very important information. If you want to implement cell decomposition, you want to know what kinds of cells to expect and how many there are.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Are there 20 polygons with up to 6 sides each? Or 15000 cells given&#xA;as analytical equations? Your choices for memory, processor and&#xA;algorithms will likely be different for the two above.&lt;/li&gt;&#xA;&lt;li&gt;You might have some concave cells. Maybe you want to decompose them&#xA;further into convex cells. That increases the amount of cells that&#xA;you are dealing with.&lt;/li&gt;&#xA;&lt;li&gt;Some cells could be so small that your robot couldn't even enter&#xA;them. Or could only access them from some sides. It the motion cannot&#xA;happen on some cells, it doesn't make too much sense to include them&#xA;for motion planning.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;deciding when &lt;strong&gt;certain criteria&lt;/strong&gt; can be met, and &lt;strong&gt;constructing&lt;/strong&gt; and &lt;strong&gt;analyzing objects meeting the criteria&lt;/strong&gt; (as in combinatorial designs and matroid theory)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Such criteria could be&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the length of the path&lt;/li&gt;&#xA;&lt;li&gt;the time it takes to travel along the path&lt;/li&gt;&#xA;&lt;li&gt;the necessary turns&lt;/li&gt;&#xA;&lt;li&gt;the width of the smallest passage in the path, if you want to carry that big box for example&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;finding &quot;largest&quot;, &quot;smallest&quot;, or &quot;optimal&quot; objects (extremal combinatorics and combinatorial optimization)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That seems to be the obvious one. It's often desirable to find the shortest path. But the shortest path is not necessarily the quickest one. Parcel delivery services for example calculate their routes by avoiding left turns in big cities. Maybe there's a path that's energetically optimal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If there's a traffic jam on the freeway, what alternative route should people choose? It's likely a good idea to spread the throughput of traffic across many alternative paths, because a single road could not handle the amount of cars from a traffic jam on the freeway.&lt;/p&gt;&#xA;" OwnerUserId="9860" LastActivityDate="2015-08-27T12:50:12.497" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7949" PostTypeId="2" ParentId="7945" CreationDate="2015-08-27T13:19:31.947" Score="0" Body="&lt;p&gt;I'd guess it's because some use is made of the vocabulary (and perhaps even the tools) of the branch of mathematics called &lt;a href=&quot;https://en.wikipedia.org/wiki/Combinatorial_topology&quot; rel=&quot;nofollow&quot;&gt;&quot;combinatorial topology&quot;&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="10308" LastActivityDate="2015-08-27T13:19:31.947" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7950" PostTypeId="1" CreationDate="2015-08-27T18:59:29.473" Score="2" ViewCount="657" Body="&lt;p&gt;Using an IMU (gyro, accelerometer and magnetometer), as found in most smartphones, can I detect the differences between tilting the device, say forward, along different (parallel) axis positions? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To clarify, if the axis of rotation is far from the sensor, the the motion contains a translational component.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can the distance and position of this axis be extracted from the IMU data and if so how?&lt;br&gt;&#xA;Is there some data fusion algorithm that can do all this?&lt;/p&gt;&#xA;" OwnerUserId="7620" LastEditorUserId="7620" LastEditDate="2015-08-29T09:37:43.163" LastActivityDate="2015-09-01T18:58:41.753" Title="Axis of rotation via IMU" Tags="&lt;imu&gt;&lt;accelerometer&gt;&lt;gyroscope&gt;&lt;magnetometer&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7953" PostTypeId="1" CreationDate="2015-08-27T20:19:11.177" Score="8" ViewCount="1844" Body="&lt;p&gt;I have a rig for which I have a pretty good estimate of the static transformation between the camera and a joint based off of the CAD. It has some errors though and I was hoping to fix it by doing a hand eye calibration. So, I started off with generating some data based off of the transformation that I have already. From the papers that I have been reading, they all want to solve the $$AX = XB$$ problem by either converting $A$, $B$ to dual quaternions or simplifying the equation to something like &#xA;$$ n_A = Xn_B $$ where $n_A$, $n_B$ are the eigenvectors corresponding to the eigenvalue of 1 for the $A$ and $B$ rotations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After generating the data, I tested if my data collection was correct and I validated it by checking if $AX = XB$ for all of the $A$s and $B$s that I generated. I used the &lt;a href=&quot;https://github.com/hengli/camodocal&quot; rel=&quot;nofollow&quot;&gt;CamOdoCal&lt;/a&gt; library to try and solve the problem but I got this -&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/hand_eye_calib_node    : &#xA;[ 0.00196822,   -0.457069,    0.889429,    0.143463;&#xA;   -0.999965, -0.00813605, -0.00196822,    -1.74257;&#xA;  0.00813605,   -0.889394,   -0.457069,   0.0270069;&#xA;           0,           0,           0,           1]&#xA;&#xA;----------------------------------------&#xA;&#xA;/hand_eye_calib_node    : Actual transform&#xA;    0         0         1   0.08891&#xA;   -1         0         0 -0.070465&#xA;    0        -1         0   0.07541&#xA;    0         0         0         1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The actual transform is the one that I had based my $A$ and $B$ data on. Then I tried implementing the &lt;a href=&quot;http://ieeexplore.ieee.org/xpl/login.jsp?tp=&amp;amp;arnumber=34770&quot; rel=&quot;nofollow&quot;&gt;Tsai-Lenz&lt;/a&gt; and &lt;a href=&quot;https://hal.inria.fr/inria-00590039/document&quot; rel=&quot;nofollow&quot;&gt;Horaud and Dornaika's Nonlinear optimization techniques&lt;/a&gt; using LM solver but to no avail. I do not get the correct transformation out of any of the solvers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, I was wondering if you could point me to a hand eye calibration library or paper that has worked.&lt;/p&gt;&#xA;" OwnerUserId="9329" LastEditorUserId="350" LastEditDate="2016-01-05T14:48:43.880" LastActivityDate="2016-07-03T17:23:27.513" Title="Hand Eye Calibration Solver" Tags="&lt;kinematics&gt;&lt;calibration&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ClosedDate="2016-07-06T13:28:21.987" ContentLicense="CC BY-SA 3.0" />
  <row Id="7954" PostTypeId="1" AcceptedAnswerId="7985" CreationDate="2015-08-28T05:25:27.173" Score="-2" ViewCount="75" Body="&lt;p&gt;I wanted to know if there is any sort of archive of mechanisms that contains a brief description of mechanisms like there type of motion and forces involved. Not lengthy derivations and other stuff. &lt;/p&gt;&#xA;" OwnerUserId="9591" LastActivityDate="2015-08-31T17:47:33.517" Title="Book on mechanisms" Tags="&lt;mobile-robot&gt;&lt;mechanism&gt;" AnswerCount="1" CommentCount="4" ClosedDate="2015-09-01T10:28:33.420" ContentLicense="CC BY-SA 3.0" />
  <row Id="7956" PostTypeId="2" ParentId="7950" CreationDate="2015-08-28T22:15:23.747" Score="1" Body="&lt;p&gt;Yes, in theory, from the gyro information. The accelerometers will give you orientation information, but won't help you interpret where the axis has been translated to.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind though, that data from the gyros are time based and you will only have accurate information for the moments that you actually sample the data. I believe it will be difficult to get accurate enough info without using a very high sampling rate, but theoretically it is possible.&lt;/p&gt;&#xA;" OwnerUserId="1075" LastActivityDate="2015-08-28T22:15:23.747" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7958" PostTypeId="2" ParentId="7925" CreationDate="2015-08-29T08:04:00.190" Score="0" Body="&lt;p&gt;Feel free to correct me, or add more if you feel the need and have experience implementing this, but I believe instead of blowing tons of money on an ultra-precise Diff. GPS you could purchase a precision altimeter and then use some form of directional transmitter/receiver(laser?) and get your x,y,z from a sensor fusion such as this. Just an outside of the box thought instead of jumping straight to a very expensive GPS.&lt;/p&gt;&#xA;" OwnerUserId="10474" LastActivityDate="2015-08-29T08:04:00.190" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7959" PostTypeId="1" CreationDate="2015-08-29T16:17:41.340" Score="3" ViewCount="2436" Body="&lt;p&gt;I am trying to make line following robot. I am using atmega328p mcu, pololu 10:1 motors, pololu qtr6-rc sensor, 2s li-po. Here is my code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/*&#xA;* LineFollower.c&#xA;*&#xA;* Created: 30.04.2015 16:00:05&#xA;*  Author: Mikk&#xA;*/&#xA;#define F_CPU 20000000         //we're running on 20mHz clock&#xA;&#xA;#define numberOfButtons 1&#xA;&#xA;#define READPORT    PORTC&#xA;#define READDDR     DDRC&#xA;#define READPIN     PINC        // lines connected to PC0 - PC5&#xA;&#xA;#define MAXTICKS    2500&#xA;#define QTRCNT      6&#xA;&#xA;#include &amp;lt;avr/io.h&amp;gt;&#xA;#include &amp;lt;util/delay.h&amp;gt;&#xA;#include &amp;lt;avr/interrupt.h&amp;gt;&#xA;#include &amp;lt;Mikk/Button.h&amp;gt;&#xA;#include &amp;lt;Mikk/QTRRCSensors.h&amp;gt;&#xA;&#xA;int baseSpeed = 70;&#xA;int maxSpeed = 140;&#xA;const float Kp = 8.1;&#xA;const float Kd = 400;&#xA;&#xA;uint8_t mode = 0;                //indicates in which mode program is &#xA;&#xA;uint8_t RmotorSpeed = 0;         //&#xA;uint8_t LmotorSpeed = 0;         //motors&#xA;&#xA;void button(void);&#xA;&#xA;void setMotors(int ml, int mr)&#xA;{&#xA;    if(ml &amp;gt; maxSpeed)             //make sure that speed is not out of range for left motor&#xA;        ml = maxSpeed;&#xA;    if(ml &amp;lt; -maxSpeed)&#xA;        ml = -maxSpeed;&#xA;&#xA;    if(mr &amp;gt; maxSpeed)             //make sure that speed is not out of range for right motor&#xA;        mr = maxSpeed;&#xA;    if(mr &amp;lt; -maxSpeed)&#xA;        mr = maxSpeed;&#xA;&#xA;    if(ml &amp;gt; 0)                    //if left motor speed is positive then drive motor forwards&#xA;        LmotorSpeed = ml;&#xA;    if(ml == 0)                   //if left motor speed is 0 then stop motor&#xA;        LmotorSpeed = 0;&#xA;&#xA;    if(mr &amp;gt; 0)                    //if right motor speed is positive then drive motor forwards&#xA;        RmotorSpeed = mr;&#xA;    if(mr == 0)                   //if right motor speed is 0 then stop motor&#xA;        RmotorSpeed = 0;&#xA;}&#xA;&#xA;void emittersOn(void)            //function for turning emitters on&#xA;{&#xA;    PORTD |= (1 &amp;lt;&amp;lt; PIND0);&#xA;}&#xA;&#xA;void emittersOff(void)           //function for turning emitters off&#xA;{&#xA;    PORTD &amp;amp;= ~(1 &amp;lt;&amp;lt; PIND0);&#xA;}&#xA;&#xA;void LedOn(void)                 //function for turning led on&#xA;{&#xA;    PORTB |= (1 &amp;lt;&amp;lt; PINB5);&#xA;}&#xA;&#xA;void LedOff(void)               //function for turning led off&#xA;{&#xA;    PORTB &amp;amp;= ~(1 &amp;lt;&amp;lt; PINB5);&#xA;}&#xA;&#xA;void stop(void)                 //stop everything&#xA;{&#xA;    LedOff();&#xA;    setMotors(0, 0);&#xA;    emittersOff();&#xA;}&#xA;&#xA;void calibration(void)          //calibration takes about 5 seconds&#xA;{&#xA;    //turn led on&#xA;    LedOn();&#xA;    //turn emitters on&#xA;    emittersOn();&#xA;    // reset minimums and maximums&#xA;    for (int i = 0; i &amp;lt; QTRCNT; i++)&#xA;    {&#xA;        QTRmax[i] = 0;&#xA;        QTRmin[i] = MAXTICKS;&#xA;    }&#xA;    //calibrate sensors&#xA;    for(int i=0; i&amp;lt;250; i++)&#xA;    {&#xA;        calibrateQTRs();&#xA;        _delay_ms(5);&#xA;    }&#xA;    //turn emitters off&#xA;    emittersOff();&#xA;    //turn led off&#xA;    LedOff();&#xA;}&#xA;&#xA;void start(void)&#xA;{&#xA;    //turn led on&#xA;    LedOn();&#xA;&#xA;    //create all necessary variables&#xA;    int power_difference = 0;&#xA;    float error = 0;&#xA;    float lastError = 0;&#xA;    float derivative = 0;&#xA;    int position = 0;&#xA;&#xA;    //turn emitters on&#xA;    emittersOn();&#xA;    _delay_ms(500);               //wait so you can pull your hand away&#xA;    while(mode == 2)&#xA;    {&#xA;        //check for mode change&#xA;        button();&#xA;&#xA;        //read position&#xA;        position = readLine();&#xA;        //make calculations&#xA;        error = position - 2500;&#xA;        derivative = error - lastError;&#xA;&#xA;        //remember last error&#xA;        lastError = error;&#xA;&#xA;        //calculate power_difference of motors&#xA;        power_difference = error/(Kp/100) + derivative*(Kd/100);&#xA;&#xA;        //make sure that power difference is in correct range&#xA;        if(power_difference &amp;gt; baseSpeed)&#xA;            power_difference = baseSpeed;&#xA;        if(power_difference &amp;lt; -baseSpeed)&#xA;            power_difference = -baseSpeed;&#xA;&#xA;        //drive motors&#xA;        if(power_difference &amp;gt; 0)&#xA;            setMotors(baseSpeed+power_difference, baseSpeed-power_difference/2);&#xA;        else if(power_difference &amp;lt; 0)&#xA;            setMotors(baseSpeed+power_difference/2, baseSpeed-power_difference);&#xA;        else if(power_difference == 0)&#xA;            setMotors(maxSpeed, maxSpeed);&#xA;    }&#xA;}&#xA;&#xA;void button(void)&#xA;{&#xA;    char buttonState = 0;&#xA;    //check for current button status&#xA;    buttonState = ButtonReleased(0, PINB, 1, 200);&#xA;    //check if button is pressed&#xA;    if(buttonState) //pin change from low to high&#xA;    {&#xA;        mode++;&#xA;        if(mode == 1) calibration();&#xA;    }&#xA;}&#xA;&#xA;void pwmInit(void)&#xA;{&#xA;    //set fast-PWM mode, inverting mode for timer0&#xA;    TCCR0A |= (1 &amp;lt;&amp;lt; COM0A1) | (1 &amp;lt;&amp;lt; COM0A0) | (1 &amp;lt;&amp;lt; WGM00) | (1 &amp;lt;&amp;lt; WGM01) | (1 &amp;lt;&amp;lt; COM0B1) | (1 &amp;lt;&amp;lt; COM0B0);&#xA;    //set fast-PWM mode, inverting mode for timer2&#xA;    TCCR2A |= (1 &amp;lt;&amp;lt; COM2A1) | (1 &amp;lt;&amp;lt; COM2A0) | (1 &amp;lt;&amp;lt; WGM20) | (1 &amp;lt;&amp;lt; WGM21) | (1 &amp;lt;&amp;lt; COM2B1) | (1 &amp;lt;&amp;lt; COM2B0);&#xA;    //set timer0 overflow interrupt&#xA;    TIMSK0 |= (1 &amp;lt;&amp;lt; TOIE0);&#xA;    //set timer2 overflow interrupt&#xA;    TIMSK2 |= (1 &amp;lt;&amp;lt; TOIE2);&#xA;&#xA;    //enable global interrupts&#xA;    sei();&#xA;    //set timer0 prescaling to 8&#xA;    TCCR0B |= (1 &amp;lt;&amp;lt; CS01);&#xA;    //set timer2 prescaling to 8&#xA;    TCCR2B |= (1 &amp;lt;&amp;lt; CS21);&#xA;}&#xA;&#xA;int main(void)&#xA;{   &#xA;    DDRB |= 0x2A;                 //0b00101010&#xA;    DDRD |= 0x69;                 //0b01101001&#xA;    DDRC |= 0x00;                 //0b00000000&#xA;&#xA;    //clear port d&#xA;    PORTD |= 0x00;&#xA;&#xA;    //enable pull-up resistor&#xA;    PORTB |= (1 &amp;lt;&amp;lt; PINB1);&#xA;&#xA;    initQTRs();&#xA;    pwmInit();&#xA;&#xA;    //blink 2 times indicate that we are ready&#xA;    for(int i=0; i&amp;lt;4; i++)&#xA;    {&#xA;        PORTB ^= (1 &amp;lt;&amp;lt; PINB5);&#xA;        _delay_ms(500);&#xA;    }&#xA;&#xA;    while(1)&#xA;    {&#xA;        button();&#xA;        if(mode == 0) stop();&#xA;        if(mode == 2) start();&#xA;        if(mode &amp;gt;= 3) mode = 0;&#xA;    }&#xA;}&#xA;&#xA;//update OCRnx values&#xA;ISR(TIMER0_OVF_vect)&#xA;{&#xA;    OCR0A = RmotorSpeed;&#xA;}&#xA;ISR(TIMER2_OVF_vect)&#xA;{&#xA;    OCR2A = LmotorSpeed;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And here is my qtr library:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    #ifndef QTRRCSensors&#xA;#define QTRRCSensors&#xA;&#xA;#define SLOW        1&#xA;#define FAST        0&#xA;&#xA;static inline void initQTRs(void) &#xA;{&#xA;    TCCR1B = (1 &amp;lt;&amp;lt; CS11);&#xA;}&#xA;&#xA;uint16_t QTRtime[QTRCNT], QTRmax[QTRCNT], QTRmin[QTRCNT];&#xA;&#xA;static inline void readQTRs(uint8_t forceSlow) {&#xA;    uint8_t lastPin, i, done = 0;&#xA;&#xA;    for (i = 0; i &amp;lt; QTRCNT; i++)                    // clear out previous times&#xA;        QTRtime[i] = 0;&#xA;&#xA;    READDDR |= 0b00111111;                          // set pins to output&#xA;    READPORT |= 0b00111111;                         // drive them high&#xA;&#xA;    _delay_us(10);                                  // wait 10us to charge capacitors&#xA;&#xA;    READDDR &amp;amp;= 0b11000000;                          // set pins to input&#xA;    READPORT &amp;amp;= 0b11000000;                         // turn off pull-up registers&#xA;&#xA;    TCNT1 = 0;                                      // start 16bit timer at 0&#xA;    lastPin = READPIN;&#xA;&#xA;    while ((TCNT1 &amp;lt; MAXTICKS) &amp;amp;&amp;amp; ((done &amp;lt; QTRCNT) || forceSlow))     // if forceSlow, always take MAXTICKS time&#xA;    {&#xA;        if (lastPin != READPIN)                     // if any of the pins changed&#xA;        {&#xA;            lastPin = READPIN;&#xA;            for (i = 0; i &amp;lt; QTRCNT; i++)&#xA;            {&#xA;                if ((QTRtime[i] == 0) &amp;amp;&amp;amp; (!(lastPin &amp;amp; (1&amp;lt;&amp;lt;i))))    // did pin go low for the first time&#xA;                {&#xA;                    QTRtime[i] = TCNT1;&#xA;                    done++;&#xA;                }&#xA;            }&#xA;        }&#xA;    }&#xA;    if (done &amp;lt; QTRCNT)                              // if we timed out, set any pins that didn't go low to max&#xA;        for (i = 0; i &amp;lt; QTRCNT; i++)&#xA;            if (QTRtime[i] == 0)&#xA;                QTRtime[i] = MAXTICKS;&#xA;}&#xA;&#xA;void calibrateQTRs(void) {&#xA;    uint8_t i, j;&#xA;&#xA;    for (j = 0; j &amp;lt; 10; j++) {                      // take 10 readings and find min and max values&#xA;        readQTRs(SLOW);&#xA;        for (i = 0; i &amp;lt; QTRCNT; i++) {&#xA;            if (QTRtime[i] &amp;gt; QTRmax[i])&#xA;                QTRmax[i] = QTRtime[i];&#xA;            if (QTRtime[i] &amp;lt; QTRmin[i])&#xA;                QTRmin[i] = QTRtime[i];&#xA;        }&#xA;    }&#xA;}&#xA;&#xA;void readCalibrated(void) {&#xA;    uint8_t i;&#xA;    uint16_t range;&#xA;&#xA;    readQTRs(FAST);&#xA;&#xA;    for (i = 0; i &amp;lt; QTRCNT; i++) {                  // normalize readings 0-1000 relative to min &amp;amp; max&#xA;        if (QTRtime[i] &amp;lt; QTRmin[i])                 // check if reading is within calibrated reading&#xA;            QTRtime[i] = 0;&#xA;        else if (QTRtime[i] &amp;gt; QTRmax[i])&#xA;            QTRtime[i] = 1000;&#xA;        else {&#xA;            range = QTRmax[i] - QTRmin[i];&#xA;            if (!range)                             // avoid div by zero if min &amp;amp; max are equal (broken sensor)&#xA;                QTRtime[i] = 0;&#xA;            else&#xA;                QTRtime[i] = ((int32_t)(QTRtime[i]) - QTRmin[i]) * 1000 / range;&#xA;        }&#xA;    }&#xA;}&#xA;&#xA;uint16_t readLine(void) {&#xA;    uint8_t i, onLine = 0;&#xA;    uint32_t avg;                                   // weighted total, long before division&#xA;    uint16_t sum;                                   // total values (used for division)&#xA;    static uint16_t lastValue = 0;                  // assume line is initially all the way left (arbitrary)&#xA;&#xA;    readCalibrated();&#xA;&#xA;    avg = 0;&#xA;    sum = 0;&#xA;&#xA;    for (i = 0; i &amp;lt; QTRCNT; i++) {                  // if following white line, set QTRtime[i] = 1000 - QTRtime[i]&#xA;        if (QTRtime[i] &amp;gt; 50) {                      // only average in values that are above a noise threshold&#xA;            avg += (uint32_t)(QTRtime[i]) * (i * 1000);&#xA;            sum += QTRtime[i];&#xA;            if (QTRtime[i] &amp;gt; 200)                   // see if we're above the line&#xA;                onLine = 1;&#xA;        }&#xA;    }&#xA;&#xA;    if (!onLine)&#xA;    {&#xA;        // If it last read to the left of center, return 0.&#xA;        if(lastValue &amp;lt; (QTRCNT-1)*1000/2)&#xA;            return 0;&#xA;&#xA;        // If it last read to the right of center, return the max.&#xA;        else&#xA;            return (QTRCNT-1)*1000;&#xA;&#xA;    }&#xA;&#xA;    lastValue = avg/sum;                            // no chance of div by zero since onLine was true&#xA;&#xA;    return lastValue;&#xA;}&#xA;&#xA;#endif&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I am trying to find Kp constant but when it's 7 then my robot just turns off the line always on the same spot. When Kp is 8 then it follows staright line but wobbles a lot and can't take corners. I also tried to increase Kd 10 to 20 times when my Kp was 8 but it didn't change much. How can I get it working?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is my robot and the track I want to follow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/HfCtL.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HfCtL.jpg&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/o3UxV.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/o3UxV.jpg&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10493" LastEditorUserId="9720" LastEditDate="2015-08-29T19:41:54.893" LastActivityDate="2017-01-22T19:35:30.410" Title="Tuning PD for line follower" Tags="&lt;pid&gt;&lt;line-following&gt;&lt;avr&gt;&lt;tuning&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7961" PostTypeId="2" ParentId="7959" CreationDate="2015-08-29T22:39:57.247" Score="1" Body="&lt;p&gt;Your PID calculation is all wrong. You have:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; //calculate power_difference of motors&#xA;power_difference = error/(Kp/100) + derivative*(Kd/100);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;First,  you need correct error terms. You calculate:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;//make calculations&#xA;error = position - 2500;&#xA;derivative = error - lastError;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I'm assuming here that 2500 is the signal you are expecting if you are exactly centered on the line. Even if this is the case, you should be calculating error as:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;error = reference - output; &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You have, assuming 2500 is the ideal line reading, &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;error = output - reference; &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;which is incorrect. This is flipping the sign on your error term.  You then calculate derivative error as the difference between current and previous error, which is also incorrect. You need the sample time, loop time, sweep time, etc. - the time that elapses between when you calculate the error terms. You can do this with a timer for an exact measurement or you can use a &lt;code&gt;pause&lt;/code&gt; or &lt;code&gt;delay&lt;/code&gt; command at the end of the loop for an approximate measurement. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you have your sample time, your derivative error is calculated by:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;derivativeError = (error - previousError)/sampleTime;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Now your control signal is just proportional gain times error and derivative gain times derivative error. You are dividing by your gains and then dividing those gains each by 100.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where you have:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;power_difference = error/(Kp/100) + derivative*(Kd/100);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You &lt;em&gt;should&lt;/em&gt; have:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;power_difference = error*Kp + derivative*Kd;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Honestly I'm surprised you managed to get it to do anything at all. Putting it all together, I would suggest something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sampleTime = 50;    // 50 ms sample time&#xA;while(mode == 2)&#xA;{&#xA;    //check for mode change&#xA;    button();&#xA;&#xA;    //read position&#xA;    position = readLine();&#xA;    //make calculations&#xA;    error = 2500 - position;&#xA;    derivative = (error - lastError)/sampleTime;&#xA;&#xA;    //remember last error&#xA;    lastError = error;&#xA;&#xA;    //calculate power_difference of motors&#xA;    power_difference = error*Kp + derivative*Kd;&#xA;&#xA;    //make sure that power difference is in correct range&#xA;&#xA;    //drive motor &#xA;    delay (sampleTime)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Adjust sample time down if you find you absolutely need a faster response, but know that the lower you set it the more inaccurate you get because calculation time takes up a proportionally bigger time. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, reset your gains and tune again. Check out &lt;a href=&quot;https://en.wikipedia.org/wiki/Ziegler%E2%80%93Nichols_method&quot; rel=&quot;nofollow&quot;&gt;Ziegler-Nichols&lt;/a&gt; method for some help tuning your controller once you've made the code changes. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-08-29T22:39:57.247" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7962" PostTypeId="2" ParentId="7828" CreationDate="2015-08-29T23:21:06.187" Score="9" Body="&lt;p&gt;I believe this blog has at least part of the answer to your question. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.rcgroups.com/forums/showthread.php?t=2098877&quot; rel=&quot;noreferrer&quot;&gt;Brushless gimbal motor vs. Brushless Motor vs. Servo&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A user here described the comparison as: &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;A brushless gimbal motor is a regular brushless motor but wound for very low speed (ie lots of turns of thin wire) and many do indeed have more poles.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Another post continues:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;They are both low and high speed at the same time. Low speed, in that they never actually&#xA;  complete a full 360 rotation so you wouldn't normally think of measuring their speed in rpm, &#xA;  but high speed in that they need to respond &lt;em&gt;instantly&lt;/em&gt; to sometimes very rapid changes &#xA;  in direction as the aircraft may be getting shook by vibrations and turbulence. &#xA;  That means they're meant to be light and fast, not powerful and slow. &#xA;  These motors are not meant to carry any kind of continuous load.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Generally, I think it can be said that a brushless gimbal motor is one specifically wound to be used in fine control applications. A brushless motor on the other hand might be considered more of a load bearing motor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That being said, most brushless gimbal motors are used in applications that could otherwise be filled by servo motors: finely controlled applications.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope this helps.&lt;/p&gt;&#xA;" OwnerUserId="10474" LastActivityDate="2015-08-29T23:21:06.187" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7963" PostTypeId="2" ParentId="5074" CreationDate="2015-08-29T23:44:55.207" Score="2" Body="&lt;p&gt;I believe I encountered the exact same problem that you are encountering. The short/easy fix is downgrade your kernel. The newer kernel version (later than  3.8.x) for UbuntuARM does not use device tree overlays and stores all of these ADC values in god knows where. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'll also notice that your tutorial is indeed using kernel 3.8.13. One that still involves device tree overlays and stores ADC values in the cape-bone-iio.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While it might not be exactly what you want, on my github I have a step by step approach to getting ADC values (as part of using ROS) on the BBB. This includes how to downgrade your kernel and enable Device Tree Overlays and then where the file locations for these values will be. I would recommend taking a look at it for some guidance towards your specific solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/RACKGNOME/tsn_bbb_ros&quot; rel=&quot;nofollow&quot;&gt;My Github&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The steps for accomplishing this are directly on this page. I cannot post them directly due to a lack of reputation and the number of links the guide entails. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another helpful hint, would be to specifically search for the name Robert C Nelson alongside Beaglebone Black. He has worked extensively with them and is involved in a multitude of blogs and tutorials that might help you find your solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope all of this helps.&lt;/p&gt;&#xA;" OwnerUserId="10474" LastActivityDate="2015-08-29T23:44:55.207" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7964" PostTypeId="1" AcceptedAnswerId="7965" CreationDate="2015-08-30T06:45:19.557" Score="0" ViewCount="334" Body="&lt;p&gt;I am a student of BE taking Mega-Quadcopter as my final year project.Can u please help me with the total hand calculations of the mega-copter i.e its procedure and formulaes? . I wanted to know how to calculate the dimensions of frame,specifications of motor and propeller,the rating of ESC's and the power rating of the batteries and its total no.s.I do not want direct answers but its procedure and formulaes.I want to lift aload of around 20-30 kgs .Please feel free to help.&lt;/p&gt;&#xA;" OwnerUserId="10105" LastActivityDate="2015-08-30T17:04:34.763" Title="Total Hand calculations procedure &amp; formulaes of Mega-Quadcopter" Tags="&lt;quadcopter&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7965" PostTypeId="2" ParentId="7964" CreationDate="2015-08-30T16:41:18.077" Score="0" Body="&lt;p&gt;What is BE? Bachelor of Engineering? I feel like you shouldn't need our help if you're in your senior year of an engineering degree, but briefly:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's all about the specifications. Pick a vertical acceleration you want to achieve, then calculate the total force (thrust) you need with $F=ma$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Divide the total thrust by the number of motors you want to use for the per-motor thrust required. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Define a rotation rate you want to achieve then calculate the torque required to achieve that rate with the torque equation $\tau = I \alpha$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Use the torque from this equation with the per-motor thrust from earlier to determine the motor radial distance with $\tau = r \times F$. This spacing will impact your moment if inertia, so you will have to re-calculate the required torque - this is called iterative design. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Define a top vertical speed, then calculate the required motor power with this speed and the per by $P = F v$. Then define a top rotational speed and calculate the power required for rotating by $P = \tau \cdot \omega$. The actual power you need will be the larger of the two power terms you calculate to ensure you can meet all of your performance specifications. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using the calculated motor power will give you a ballpark to start shopping for motors. Contact sellers and give them your power and thrust requirements to see if they can provide something that meets your needs, but the motors are going to weigh something substantial, so you need to basically re-calculate everything from the moment of inertia down &lt;em&gt;again&lt;/em&gt; to refine your design. Again, iterative design process. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will be better off empirically testing motor/prop combinations than trying to calculate thrust from blade design, but again, your base calculations should give the class of motor you need by output power required. Also, use sales engineers! It's a LOT less work to give a sales engineer your spec and have them do the legwork than to do this testing yourself. Give them your spec, then ask to try their recommendation to verify before purchase. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should find your motor power requirements in line with &lt;a href=&quot;https://robotics.stackexchange.com/a/7461/9720&quot;&gt;this guide&lt;/a&gt; posted by TobiasK. Using the moderate flight estimate of 250W/kg, you're looking at over 6kW just for your payload. When you add an airframe, motors, and batteries, you could be looking at 7.5 to 10kW - this is not a small project! &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2015-08-30T17:04:34.763" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7966" PostTypeId="1" CreationDate="2015-08-30T17:30:04.220" Score="2" ViewCount="55" Body="&lt;p&gt;I recently discovered this ROS-package: &lt;a href=&quot;http://wiki.ros.org/laser_ortho_projector&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://wiki.ros.org/laser_ortho_projector&lt;/a&gt; .&#xA;Which is basically exactly what I need. However I am not using ROS, so I need to do what is been done in this package myself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically the information I have is the range measurement r and the angle theta for every measurement point of a 360 degree laserscan + I have the orientation in roll, pitch, yaw angles of the laserscanner. However yaw is not important for me and could be ignored.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I really can't get my head around how to project those points to the ground plane. I mean it is easy for the measurement point which align with the roll and pitch axes, but I don't know what to do with the points in between.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One solution I thought of is this:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Convert the measurement point (r, theta) in cartesian coordinates (x,y,z) - vector&lt;/li&gt;&#xA;&lt;li&gt;Use rotations matrices: create rotation matrix for rotation around roll axis with roll angle, and adequately for the pitch axis. Multiplay bot matrices and then multiply it with (x,y,z) - vector.&lt;/li&gt;&#xA;&lt;li&gt;Now the orthogonal projection of the of the measurement would be the (x,y,z) - vector with z=0.&lt;/li&gt;&#xA;&lt;li&gt;Convert (x,y) - vector back to polar coordinates (r, theta).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;However, especially step 2 is very complicated, because the rotation matrices change according to the sign of the roll and pitch angles, right?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to note that the absolute value of role and pitch angles will always be &amp;lt; 90°, so there should not be an unambiguity with rotations..&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there an easier (or maybe more elegant) way to solve my problem?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My guess is that this problem must have been solved basically for every robot application which uses a 2D-laserscanner that is not fixed to one axis. &#xA;But I can not find the solution anywhere.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I would be very glad if anyone of you could point me in the right direction.&lt;/p&gt;&#xA;" OwnerUserId="10497" LastEditorUserId="-1" LastEditDate="2016-12-08T14:28:49.670" LastActivityDate="2016-12-08T14:28:49.670" Title="Orthogonal projection of laserscanner data" Tags="&lt;quadcopter&gt;&lt;slam&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7967" PostTypeId="2" ParentId="7966" CreationDate="2015-08-30T18:37:04.553" Score="3" Body="&lt;p&gt;Use the location and attitude measurements of your craft to develop a &lt;a href=&quot;https://en.wikipedia.org/wiki/Transformation_matrix&quot; rel=&quot;nofollow&quot;&gt;4x4 transform matrix&lt;/a&gt;, then take the inverse of that matrix to put the points you measure back in terms of world coordinates. Then, if you want a projection just set the respective measurement to zero. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want a projection on the XY plane, set all Z coordinates to zero, set X to zero for a projection on the YZ plane, etc. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are lots of ways to build the rotation matrix required for the transform matrix. You need to consult your IMU documentation to see how it is interpreting/outputting angle information to build the rotation matrix correctly. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a final note, even if you don't need yaw information don't discard it. Depending on the IMU configuration yaw may not mean what you think it means and thus could have an impact on your transform matrix. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-08-30T18:37:04.553" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7968" PostTypeId="1" CreationDate="2015-08-30T20:02:10.753" Score="1" ViewCount="262" Body="&lt;p&gt;I have built quadcopter but the problem is of balancing. It doesn't goes up. I am using PID technique for balancing. But I am not finding the suitable values for PID tuning. I am using mpu6050 as a sensor. I get the accelerometer values of x and y axis and find the error from them. That is lets say if accel on x is not zero then it error cause it should be zero if balanced. I am using +-2g sensitivity scale of accelerometer. The motors I am using are DJI 920 kva. What values for &lt;code&gt;kp&lt;/code&gt;, &lt;code&gt;ki&lt;/code&gt;, and &lt;code&gt;kd&lt;/code&gt; should I set? I cant set them while in flight cause it completely out of balance.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/3d4Jm.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3d4Jm.jpg&quot; alt=&quot;Quadcopter&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is the design. Completely homemade. I have modified it a little after this photo. An accelerometer is at 2g so at balance z will be 32768/2.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;short PID()&#xA;{&#xA;    short error,v;&#xA;    error = desired-current; &#xA;    //error/=390;&#xA;    integ += error;&#xA;    der = error - perror;&#xA;    x = error; &#xA;    x2 = integ; &#xA;    x3 = der; &#xA;    x* = kp;&#xA;    x2* = ki;&#xA;    x3* = kd; &#xA;    v = kpi;x/=100;&#xA;    v = kii;x2/=1000;&#xA;    v = kdi;x3/=1000;&#xA;    x = x+x2+x3; &#xA;    //x/=390; &#xA;    perror = error;&#xA;    return x;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;There are also few more questions, should I scale error or PID output? Because, the error is ranging from 0 to 16380 at 2g setting, so I am scaling it from 0 to 42. So should I divide error or PID by some value?&lt;/p&gt;&#xA;" OwnerUserId="10449" LastEditorUserId="19515" LastEditDate="2020-07-25T00:36:55.987" LastActivityDate="2020-07-25T00:36:55.987" Title="What PID values should I keep?" Tags="&lt;quadcopter&gt;&lt;pid&gt;&lt;balance&gt;" AnswerCount="3" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="7969" PostTypeId="1" CreationDate="2015-08-30T21:00:57.443" Score="-1" ViewCount="105" Body="&lt;p&gt;I need a basic erector set that the parts will fit with servo motors and dc motors. Preferably below $100. I've looked at &lt;a href=&quot;http://mindsirobotics.com/250-piece-basic-construction-set.html&quot; rel=&quot;nofollow&quot;&gt;Minds-i basic set&lt;/a&gt; and it looks good except I don't know if it will function with my servos without hot glue or extensive modifications. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it matters, I am making a bipedal robot so I don't require any wheels or anything pre-built. I just need a basic set that I can add on to to build a whole bunch of different robots. &lt;/p&gt;&#xA;" OwnerUserId="10290" LastEditorUserId="350" LastEditDate="2015-09-30T16:55:33.280" LastActivityDate="2015-11-29T17:48:12.563" Title="What erector sets will function with normal servo motors?" Tags="&lt;mobile-robot&gt;&lt;rcservo&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7970" PostTypeId="1" CreationDate="2015-08-31T00:20:38.397" Score="2" ViewCount="596" Body="&lt;p&gt;Is there a firmware upgrade for available for the Create 2? I had some issues in March when using these for assigning a University of Tennessee  programming project. We are getting ready to use them again (we have 10 now) and I'd like to get them all updated to the latest firmware.&lt;/p&gt;&#xA;" OwnerUserId="9350" LastActivityDate="2015-10-04T16:05:50.723" Title="Firmware upgrade for iRobot Create 2" Tags="&lt;irobot-create&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7971" PostTypeId="2" ParentId="7969" CreationDate="2015-08-31T02:22:00.227" Score="0" Body="&lt;p&gt;First, you don't need to bump your post with edits. 6 new questions in a day seems to be pretty busy around here. You ask at 6pm on a Sunday - probably nobody was around. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second, I don't think there is a &quot;standard&quot; servo mount, so no kit is going to give you what you're looking for. The mounting pattern varies by manufacturer and model so you need to pick a servo and look for a mount for that particular one. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Third, I'm not sure why you would go for an &lt;a href=&quot;http://mindsirobotics.com/250-piece-basic-construction-set.html&quot; rel=&quot;nofollow&quot;&gt;85 dollar, 240 piece&lt;/a&gt; knock-off LEGO kit when a genuine &lt;a href=&quot;https://shop.education.lego.com/legoed/en-US/catalog/product.jsp?productId=9689&amp;amp;isSimpleSearch=false&amp;amp;ProductLine=Machines-%26-Mechanisms&quot; rel=&quot;nofollow&quot;&gt;204 piece kit is 60 dollars&lt;/a&gt;. Genuine LEGO sets give you guaranteed compatibility with all of their other stuff, like motors, pneumatics, and the mindstorm equipment. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fourth, I don't know why you are willing to invest so much in a kit to mount servos when the basic servo bracket costs between &lt;a href=&quot;https://www.google.com/search?q=servo+mounting+bracket&amp;amp;tbm=shop&quot; rel=&quot;nofollow&quot;&gt;2 and 5 dollars&lt;/a&gt;. For 85 dollars you could buy 15-40 servo brackets.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fifth, if you leave LEGO kits behind and just go for a servo bracket, you can check out other kits that are good for building things. Ironically, your question states you are looking for &quot;a basic erector set&quot;, but you link an 85 dollar, 240 piece generic LEGO kit when you could buy &lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/B000GOF5S2&quot; rel=&quot;nofollow&quot;&gt;an actual 640 piece Erector set&lt;/a&gt; for 80 dollars. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-08-31T02:22:00.227" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7972" PostTypeId="1" AcceptedAnswerId="7973" CreationDate="2015-08-31T04:00:31.323" Score="4" ViewCount="133" Body="&lt;p&gt;I'm not sure if this is the right place to post this but here goes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, as the title states, I'm planning on building a desk that doubles as an air hockey table which has a robot on the other side.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The robot would be mounted on a rail which should be able to go left and right using a linear actuator. It should be able to &quot;attack&quot; the puck using two servos.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The real problem is how should I detect the puck's location?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;My idea:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since the table would have tiny holes in the corners of a every square(0.5inx0.5in), I could fit in a laser on the bottom part of the table, a laser for ever 1in so a 1inx1in square, the same location would be reflected on the &quot;ceiling&quot; of the table but instead of laser diodes, they would be replaced by an ldr. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I'm planning on doing a matrix and reading the signals of the ldr's columns and rows then performing some logic to locate the center of the puck.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;PROBLEMS:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While I don't see any performance flaws in my plan, I see &lt;strong&gt;tons&lt;/strong&gt; of flaws when done imperfectly even to the tiniest bit.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;I have to be exactly accurate regarding the laser diode's position,&#xA;it has to be on the center of the holes, right below the z-axis.&#xA;This should be easy if I'm just going to place 4 or 5. But I'm not.&lt;/li&gt;&#xA;&lt;li&gt;According to my estimations, I'm going to have to use 300-700 laser&#xA;diodes, depending on if I'm planning on putting the lasers only on&#xA;the opponent's side or on the entire board. It would definitely be&#xA;costly. Imagine 300...&lt;/li&gt;&#xA;&lt;li&gt;This isn't really a huge problem, more like a hassle. Wiring 300 of&#xA;these. Forget the pcbs, the project area is just to large.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I have thought of numerous way to lessen these, like using a color sensor to get the x-axis location and a laser situated on a negative x-axis pointing to the positive x-axis to locate the puck's y location, but I'm still comparing ideas.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Advantages:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I could get a 3d-like graphical representation with 3d-like controls (3d-like in reality but technically 2d since the lasers are only plotted in the x and y axis though facing the z-axis). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since this project is going to be my room desk, situated in an automated room, I was thinking of making &quot;desk modes&quot; which should toggle between a game that takes advantage of the lasers and their controls, A control desk for my room, ordinary desk mode, and an air hockey mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;My question: (More like a request)&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone have &lt;em&gt;another&lt;/em&gt; idea regarding how I should be able to locate the puck's x and y location accurately in real time?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: The table is roll-able and stored underneath a loft bed which has an under-area height of 5'4&quot;. Which means I can't go grande on the a vertical solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT #2: Thanks to the helpful people here, I have come to the conclusion of using a camera.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The camera will be that of a smartphone's, I'll create an app that tracks an object by color and a has fixed size comparison to identify the distance of the robot from the puck. The phone will then process this and send signals via bluetooth.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The phone is anchored at the end of the robot's moving part so the camera is reminiscent of those games with a first-person view.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Incoming problems: I'm looking forward to some delay, given the delay in processing.&lt;/p&gt;&#xA;" OwnerUserId="10499" LastEditorUserId="10499" LastEditDate="2015-09-01T07:32:48.893" LastActivityDate="2015-09-01T07:32:48.893" Title="Air hockey with a robot as an opponent" Tags="&lt;sensors&gt;&lt;microcontroller&gt;&lt;design&gt;&lt;electronics&gt;&lt;laser&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7973" PostTypeId="2" ParentId="7972" CreationDate="2015-08-31T04:07:46.443" Score="2" Body="&lt;p&gt;A well lit, perfectly circular object on a contrasting background, like a puck on an air hockey table, is pretty much the ideal use for &lt;a href=&quot;http://youtube.com/watch?v=QkI9AFsBcMk&quot; rel=&quot;nofollow&quot;&gt;webcam object tracking&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A classic air hockey table has a light bar/score indicator across the middle of the table - just put the camera in there looking down. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Check out the OpenCV library and webcam tracking tutorials online. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-08-31T04:07:46.443" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7976" PostTypeId="2" ParentId="7708" CreationDate="2015-08-31T04:48:19.307" Score="1" Body="&lt;p&gt;Using an engine is an exaggeration. Try using a high torque rotary motor, if it isn't enough introduce some gears to increase torque, though the speed might get slower.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But basing on your comment, your door only weighs 500 grams, so a medium torque stepper should do the job, or a medium torque servo motor, or a medium torque dc motor with a limit switch. (By medium, I mean enough to lift more than half a kilo but not necessarily a whole kilo).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given the missing information, I think the  most ideal would be a stepper motor with a pulley-like system. Since you never told us the depth of the aperture and the height of the gap to be created then we can't easily call on a servo.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding the transistor, you might wanna use a transistor to power a relay and not directly power the motor. A transistor might be faster and smaller than the relay but it isn't built to power mechanical systems unlike a relay. Though a relay should be easier to wire.&lt;/p&gt;&#xA;" OwnerUserId="10499" LastActivityDate="2015-08-31T04:48:19.307" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7977" PostTypeId="2" ParentId="7968" CreationDate="2015-08-31T11:20:47.527" Score="1" Body="&lt;p&gt;I'm sorry but it is absolutely impossible to tell you what values you should put based on the information you gave. Actually to give a real answer we would need a complete model of the system (or an approximation at least...). There are some generic models for quadcopters but parameters depend on your own system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to really understand the command of a quadcopter I recommend to read some articles like &lt;a href=&quot;http://andrew.gibiansky.com/downloads/pdf/Quadcopter%20Dynamics,%20Simulation,%20and%20Control.pdf&quot; rel=&quot;nofollow&quot;&gt;this one&lt;/a&gt; (I found it very quickly, maybe some others are better, but it explains how to control a quadcopter with a PID). Or at least watch &lt;a href=&quot;https://youtu.be/wbmEUi2p-nA&quot; rel=&quot;nofollow&quot;&gt;this video&lt;/a&gt; to understand what is a PID controler.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, if you don't want to find a model for your system, the best way to find PID parameters is empirically. You just need to know what are the consequences of each coefficient, and try to adapt them according to your system's behaviour.&#xA;There is a very quick explanation for each coeff :&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;P : is mainly for response speed. Too low = correction will be to slow. Too high : correction will be very fast and oversized, and your system will probably oscillate.&lt;/li&gt;&#xA;&lt;li&gt;I : is mainly used to cancel static error. Too low : your response will never reach the order. Too high : oscillations.&lt;/li&gt;&#xA;&lt;li&gt;D : is... more complex to understand. It will impact your response variation. Look at the video to have a good explanation.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Good luck !&lt;/p&gt;&#xA;" OwnerDisplayName="user10198" LastActivityDate="2015-08-31T11:20:47.527" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7978" PostTypeId="2" ParentId="7972" CreationDate="2015-08-31T11:26:16.050" Score="1" Body="&lt;p&gt;In addition to Chuck's answer: &lt;br&gt;&#xA;I recommend using opencv or any other Computer Vision library. &lt;br&gt;&#xA;But you do not need to go the simple way. Do not place the camera directly above the table. You can place it everywhere you want, in any orientation you want. Because you do know your table, the cameras position and its attitude, you can use some easy trigonometrics to calculate the position of the puck. You know have a 3-Dimentional problem to solve, instead of the 2D Problem, which you have with a straight orientation, But it can be done easily by a computer. It is also possible to place multiple cameras, if they have a bad angle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another possibility (I will just mention this one, I do not recommend it) is using light barriers in the borders of your table, at all four. There are pretty long ones with multiple sensing points (resulotion is about 1 inch). At the end you still need some software which is estimating the current position and velocity of the puck from the information you get from light barrier. The disadvantage is that this light barriers cost a fortune. They easily cost more then a complete airhockey table. If you are interested in this solution look for light barriers used in automation industry for safety purposes in the handling area.&lt;/p&gt;&#xA;" OwnerUserId="6911" LastActivityDate="2015-08-31T11:26:16.050" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="7979" PostTypeId="2" ParentId="7968" CreationDate="2015-08-31T11:30:42.027" Score="2" Body="&lt;p&gt;I asked for your code because I've found people tend to implement PID controllers incorrectly. It doesn't really matter what your gains are, if you're not calculating the error terms correctly and/or you're not applying the gains correctly, you'll probably never get the system to work right. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, as &lt;a href=&quot;https://robotics.stackexchange.com/a/7977/9720&quot;&gt;Arlakt&lt;/a&gt; mentioned, your best bet for PID control with no system model is to try different gains. There are &lt;a href=&quot;https://en.wikipedia.org/wiki/PID_controller#Loop_tuning&quot; rel=&quot;nofollow noreferrer&quot;&gt;several methods for tuning&lt;/a&gt; the PID controller, but all of these methods rely on you to calculate the error terms correctly and apply the gains correctly. &lt;/p&gt;&#xA;&#xA;&lt;h2&gt;:EDIT:&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;You are not calculating your error terms correctly. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You have:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;error = desired-current; &#xA;//error/=390;&#xA;integ += error;&#xA;der = error - perror;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Your &lt;code&gt;integ&lt;/code&gt; error term is not an integral and your &lt;code&gt;der&lt;/code&gt; error term is not a derivative because you have not incorporated a sample time into your calculation. You need:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;integ += error*sampleTime;&#xA;der = (error - perror)/sampleTime;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Later, you have:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;v=kpi;x/=100;&#xA;v=kii;x2/=1000;&#xA;v=kdi;x3/=1000;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Which I am assuming is interpreted as:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;v=kpi;&#xA;x/=100;&#xA;v=kii;&#xA;x2/=1000;&#xA;v=kdi;&#xA;x3/=1000;    &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I do not know why you are dividing your error terms by 100 or 1000, but this is incorrect. I also do not know what &lt;code&gt;v&lt;/code&gt; is; it is not a term used anywhere else in the function and is not returned by the function. &lt;code&gt;kpi&lt;/code&gt;,&lt;code&gt;kii&lt;/code&gt;,&lt;code&gt;kdi&lt;/code&gt; are also not defined. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In any event, your entire PID controller should be:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;short PID()&#xA;{&#xA;short error;&#xA;error = desired-current; &#xA;integ += error*sampleTime;&#xA;der = (error - perror)/sampleTime;&#xA;x=error; &#xA;x2=integ; &#xA;x3=der; &#xA;x*=kp;&#xA;x2*=ki;&#xA;x3*=kd; &#xA;x=x+x2+x3; &#xA;perror = error;&#xA;return x;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;See &lt;a href=&quot;https://robotics.stackexchange.com/questions/7959/tuning-pd-for-line-follower/7961#7961&quot;&gt;this post I wrote yesterday&lt;/a&gt; on nearly identical flaws in a PID controller. In short, get &lt;code&gt;sampleTime&lt;/code&gt; with either a &lt;code&gt;delay&lt;/code&gt;/&lt;code&gt;pause&lt;/code&gt; or by setting/using a timer. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2015-08-31T18:54:39.923" CommentCount="15" ContentLicense="CC BY-SA 3.0" />
  <row Id="7980" PostTypeId="2" ParentId="7895" CreationDate="2015-08-31T14:03:58.003" Score="3" Body="&lt;p&gt;I have been testing &lt;a href=&quot;https://robotics.stackexchange.com/a/7900/37&quot;&gt;Steve’s answer&lt;/a&gt; using the Create cable and Python and have ran into some difficulties.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Enabling hardware flow control when opening the serial port results in nothing happening when sending/receiving data from the Create 2.  Page 4 of the guide says “Flow control: None”.  While I have never used hardware flow control, I suspect the Create 2 is not properly handling the handshake so data is not flowing properly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When enabling hardware flow control did not work at the time of opening the connection, I attempted to make use of the setRTS method.  (Research into this method and setDTR indicate both are implemented in PySerial.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried the following to see if it would wake the Create 2&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;serial_port.setRTS(True)&#xA;time.sleep(1)&#xA;serial_port.setRTS(False)&#xA;time.sleep(1)&#xA;serial_port.setRTS(True)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where the sleep argument of 1 is in seconds.  I also tried the above with the following changes&#xA;toggling False, True, then False&#xA;setting the sleep period to .5&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition, I tried all the above with setDTR().  None of the above worked to wake the Create 2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next I tried to something simpler – trying to keep the Create 2 from falling asleep.  Based on page 6&lt;/p&gt;&#xA;&#xA;&lt;p&gt;“To disable sleep, pulse the BRC pin low periodically before these five minutes expire. Each pulse resets this five minute counter. (One example that would not cause the baud rate to inadvertently change is to pulse the pin low for one second, every minute, but there are other periods and duty cycles that would work, as well.)”&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the Create 2 in Passive mode I tried the following &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;while True:&#xA;    time.sleep(60)&#xA;    serial_port.setRTS(True)&#xA;    time.sleep(1)&#xA;    serial_port.setRTS(False)&#xA;    time.sleep(1)&#xA;    serial_port.setRTS(True)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This had no effect.  I then tried all the permutations as above when trying to wake the Create 2, but none of these had any effect.  I did find a pdf guide detailing how to make your own Create cable that indicates the BRC line should be connected to the RTS on the computer side, but it does not &lt;em&gt;seem&lt;/em&gt; to work.&lt;/p&gt;&#xA;" OwnerUserId="10502" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2015-09-01T10:50:37.013" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7982" PostTypeId="2" ParentId="7968" CreationDate="2015-08-31T16:17:08.770" Score="0" Body="&lt;p&gt;Okay, so developed a flight controller for this project &#xA;&lt;a href=&quot;http://kevinsheridan.info/highly-autonomous-aerial-reconnaissance-robot-proof-of-concept/&quot; rel=&quot;nofollow&quot;&gt;http://kevinsheridan.info/highly-autonomous-aerial-reconnaissance-robot-proof-of-concept/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I spent 4 months trying to figure out &quot;the right pid values&quot;. However in the end it turned out that I was implementing pid incorrectly. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is how to implement it. If you are trying to get the quad to stabilize itself at an angle you need to use TWO Pid controllers per axis. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Requested angle &amp;amp; Angle -&gt; PID1 -&gt; rate + requested rate into PID2-&gt; motors&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically use a pid for rate and for angle feeding into eachother&lt;/p&gt;&#xA;&#xA;&lt;p&gt;have a look at my code: &lt;a href=&quot;http://kevinsheridan.info/highly-autonomous-aerial-reconnaissance-robot-proof-of-concept/haarr-code/low-level-flight-controller-code/&quot; rel=&quot;nofollow&quot;&gt;http://kevinsheridan.info/highly-autonomous-aerial-reconnaissance-robot-proof-of-concept/haarr-code/low-level-flight-controller-code/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="6735" LastEditorUserId="6735" LastEditDate="2015-09-22T13:13:37.663" LastActivityDate="2015-09-22T13:13:37.663" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7983" PostTypeId="1" CreationDate="2015-08-29T04:14:08.933" Score="2" ViewCount="145" Body="&lt;p&gt;I'm building a robotic tea-maker/watchdog robot and have a power problem. I would like to be able to have the robot approach a socket and insert the power cord of a cheap immersion heater (120V, 300W, see links below) to turn the heater on. However, the force and precision required to plug it into the wall is beyond the capabilities of my stepper motors/Arduino. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My solution was a magnetic breakaway power cord like the charger on a Mac but at higher voltage. Deep fat fryers have suitable ones (120V, high power, see links below). However, the problem is I need both sides of the connector, and I can only find the magnetic breakaway power cord, not the opposite side, which would normally be built into the deep fat fryer. I don't fancy buying a whole fryer just to get one little part...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any ideas? Alternatives to a breakaway cord? Anyone know of any (cheap) 120V induction chargers? I'll resort to a mechanical on/off switch and just leave the robot plugged in if I have to, but I was hoping for something a bit sleeker.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Links:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/B000VK0DRY&quot; rel=&quot;nofollow noreferrer&quot;&gt;Immersion heater&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/B00HS5AZJG&quot; rel=&quot;nofollow noreferrer&quot;&gt;Fryer cord&lt;/a&gt; &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerDisplayName="IzBelle" LastEditorUserId="10596" LastEditDate="2016-11-13T19:47:29.180" LastActivityDate="2016-11-13T19:47:57.163" Title="Magnetic, low insertion force connector" Tags="&lt;mobile-robot&gt;&lt;force&gt;&lt;connector&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="7984" PostTypeId="2" ParentId="7983" CreationDate="2015-08-30T11:53:55.397" Score="1" Body="&lt;p&gt;Since you specifically mention Macs, I'll throw this out there; you can find &lt;a href=&quot;http://www.powerbookmedic.com/13-Magsafe-Board-for-Model-A1342-p-17556.html&quot; rel=&quot;nofollow&quot;&gt;replacement ports&lt;/a&gt; for the actual computer online and it probably wouldn't be too hard to figure out the pinout and wire for 120V service instead, jimmying a MagSafe cable of course being also included. Other than that, I haven't seen too many magnetic breakaway cables like those being produced.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given that my MacBook Air charger puts out 3A, the 2.5A you require is within limits, although you might want to put a good smattering of epoxy on the terminals to prevent arc-overs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As to your inductive charging idea, it isn't too hard to build an inductive charging set, although the &quot;isn't too hard&quot; part relies on your immersion heater being of the &quot;dumb&quot; type; that is, a simple resistive heater that is capably powered by DC as easily as it is AC. Here, you'd wire up a primary coil of wire on a &quot;former&quot; for an inductive charging base with some resistance in play to make sure you don't smoke the wire with too high a current. Then, you'd wire the secondary former with a few more turns to account for air-core losses as well as voltage losses due to the primary resistor. Once you had the inductive couple &quot;transformer&quot; wound and drawn up with magnets or what-have-you, you'd bridge-rectify the secondary and install a simple diode clamp or crowbar circuit to limit the voltage across your heater to something safe, in case your inductive couple one day decides to be less lossy than usual.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you'd like I can hand-draw a schematic for that and post it up; not in a eCAD/EDA mood at the moment.&lt;/p&gt;&#xA;" OwnerDisplayName="ecfedele" LastActivityDate="2015-08-30T11:53:55.397" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="7985" PostTypeId="2" ParentId="7954" CreationDate="2015-08-31T17:47:33.517" Score="1" Body="&lt;p&gt;Mechanisms and Mechanical Devices Sourcebook - Nicholas P. Chironis &amp;amp; Neil Sclater, McGraw-Hill, ISBN 0-07-011356-4. The format of this book is more akin to a scrapbook of newspaper clippings, but it is a good visual &quot;food-for-thought&quot; collection spanning several generations of mechanism design for a broad range of applications and industries.&lt;/p&gt;&#xA;" OwnerUserId="10232" LastActivityDate="2015-08-31T17:47:33.517" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7987" PostTypeId="2" ParentId="7950" CreationDate="2015-08-31T18:55:57.523" Score="0" Body="&lt;p&gt;I don't think that you will be able to do this, given the limitations of an IMU. The main limitation being any kind of position or translation data. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;With angluar rotations you have the equations shown in the included image (&lt;a href=&quot;http://hyperphysics.phy-astr.gsu.edu/hbase/rotq.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;image from here&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the IMU, you can get angle $\theta$ and you can get angular velocity $\omega$ through some calculations. But to go from there to radius ($r$-this is want you want I believe) or linear velocity $v$ you would need to know arc length $S$. Unfortunately, this is a piece of translation data and that is difficult (at best) to get. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Overall, it seems quite common for users to try and figure out a way to get any kind of positional/translation information from an IMU, but it just isn't the right tool for that job. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT (More details based on comment):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\theta$ about an axis of rotation is the same no matter how far away (radius $r$) you are from said axis of rotation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You have two equations available for $\theta$,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\theta$ = $\omega$ * $t$ (this you can get with the gyro reading and time)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\theta$ = $S$/$r$ (you can directly read $\theta$ from the accelerometers)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Setting those equations equal,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\omega$ * $t$ = $S$/$r$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now you only have one equation, but two unknowns. That is not solvable without making an assumption or knowing something else about the system. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/PNa4w.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/PNa4w.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4169" LastEditorUserId="4169" LastEditDate="2015-09-01T18:58:41.753" LastActivityDate="2015-09-01T18:58:41.753" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7991" PostTypeId="2" ParentId="7959" CreationDate="2015-09-01T15:29:42.317" Score="0" Body="&lt;p&gt;When looking at PID loop control code, &lt;code&gt;if&lt;/code&gt; statements are always a code smell for me. Every &lt;code&gt;if&lt;/code&gt; statement has the potential to add a discontinuity into the control loop that complicates PID tuning immensely. PID loops work much more predictably when their response is smooth (within the bounds of the limits of the system).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, your two main functions, &lt;code&gt;start&lt;/code&gt; and &lt;code&gt;setMotors&lt;/code&gt; have lots of &lt;code&gt;if&lt;/code&gt;s and thus several potential discontinuities.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;setMotors()&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;If either motor ever gets to max. speed, it is clamped at max. speed without changing the speed of the other motor. If you consider how your robot moves, if one motor is running slower than has been calculated, the other by definition is running faster than it should be for your calculated &lt;em&gt;power difference&lt;/em&gt; and you will be moving in the wrong direction. The only way to avoid this is to tune your system so conservatively that you never ask motors to run at &lt;code&gt;maxSpeed&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This isn't helped by the fact that &lt;code&gt;if (mr &amp;lt; -maxSpeed)&lt;/code&gt; sets &lt;code&gt;mr = maxspeed&lt;/code&gt; rather than &lt;code&gt;mr = -maxspeed&lt;/code&gt; which could be rather unfortunate - driving that motor at max. speed in the &lt;em&gt;opposite&lt;/em&gt; direction. *8')&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, if &lt;code&gt;start&lt;/code&gt; calculates that a motor should be run in reverse you are throwing away that command and leaving it running at whatever speed it was running before! While &lt;code&gt;start&lt;/code&gt; shouldn't do this at the moment, that may not always be the case. If you changed start to better deal with the right angle turn in your track for instance, it could easily require negative speeds for one motor to turn on the spot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This could have serious repercussions for the stability of your robot.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;start()&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Another example of a discontinuity is in &lt;code&gt;start&lt;/code&gt;, where as the absolute value of &lt;code&gt;power_difference&lt;/code&gt; tends towards 0, the both motor speed converges on &lt;code&gt;baseSpeed&lt;/code&gt;, but as soon as &lt;code&gt;power_difference&lt;/code&gt; hits 0, both motors jump to &lt;code&gt;maxSpeed&lt;/code&gt;. Doubling your speed like this can play havoc with with your tuning, and cause you to need to tune much more conservatively to avoid instability.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All it takes is for one motor to respond slightly more aggressively to the command than the other and you have been kicked off in the wrong direction and then your subsequent PID cycles will have to compensate.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Suggestions&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;I would suggest that you try to rework your calculations so that you have a continuum between &lt;em&gt;maxSpeed&lt;/em&gt; through &lt;em&gt;baseSpeed&lt;/em&gt; and &lt;em&gt;0&lt;/em&gt; to &lt;em&gt;-maxSpeed&lt;/em&gt; based on the magnitude of the error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would also start by making sure that you can follow the track slowly with conservative tuning and then ramp up to higher speeds and more aggressive turns as you get more experienced with running your PID loop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See also &lt;a href=&quot;https://robotics.stackexchange.com/a/1527/37&quot;&gt;my answer&lt;/a&gt; to &lt;a href=&quot;https://robotics.stackexchange.com/questions/1524&quot;&gt;Line Follower optimization&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2015-09-01T16:14:58.050" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7992" PostTypeId="1" CreationDate="2015-09-02T00:48:41.040" Score="-1" ViewCount="681" Body="&lt;p&gt;I would like to know how to calculate the distance to each car when I run my application for an autonomous vehicle in real-time. In addition, I want to know how to implement the calculation in C++.&lt;/p&gt;&#xA;&lt;p&gt;You can see in the images we can know the distance for each vehicle but I don't know what code I should use to make all these calculations for every vehicle.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Please check the photo to understand more about what I'm trying to achieve.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/NJ4Nq.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/NJ4Nq.jpg&quot; alt=&quot;autonomous vehicle obstacle detection&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/SEpbP.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/SEpbP.jpg&quot; alt=&quot;autonomous vehicle obstacle detection (2) &quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10507" LastEditorUserId="19515" LastEditDate="2020-07-23T17:42:58.277" LastActivityDate="2020-07-23T17:42:58.277" Title="How to calculate vehicle detection distance?" Tags="&lt;control&gt;&lt;sensors&gt;&lt;localization&gt;&lt;ros&gt;&lt;cameras&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="7993" PostTypeId="1" CreationDate="2015-09-02T03:04:19.127" Score="3" ViewCount="123" Body="&lt;p&gt;I have two Series 1 XBees that won't be in transparent mode because they are in AT command mode when I'm not in X-CTU.  I had asked for help elsewhere and no one had the answer except telling me about flow control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The XBees had been configured properly with the MY and DL settings.  I'm thinking maybe I should shorten the timeout so they supposedly get out of AT command mode but they both stay in AT command mode.  The only time I can get the two Series 1 XBees to talk is under X-CTU.  I need the two Series 1 XBees to automatically be in transparent mode when powered on.  &lt;/p&gt;&#xA;" OwnerUserId="10514" LastEditorUserId="9176" LastEditDate="2015-09-09T04:53:01.583" LastActivityDate="2016-03-15T23:57:08.233" Title="Why can two Series 1 XBees only talk in X-CTU?" Tags="&lt;wireless&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7994" PostTypeId="2" ParentId="5178" CreationDate="2015-09-02T07:04:03.300" Score="0" Body="&lt;p&gt;Well, when you say 'pulsating' it's actually a square wave, it goes up then down. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;We don't usually like those types of wave, that's why we regulated them to make a straight line or at least a line that represents a sine wave(those that move with smooth curves). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The type of current that is running through your circuitry doesn't generally affect what controller you should use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since you said you had experience with r/c then I think you're pretty fond of using r/c devices. Therefore, I don't suggest you use r/c since someone might operate a controller different from yours and accidentally operate your machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might wanna try infared(Its range is a bit more secluded than radio so it has a lesser chance of being operated unintentionally), bluetooth(Pairing), or via the internet(I don't recommend this).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Plus, r/c communication is generally used when ranges are quite too far and directionless, I don't suppose you'd be operating your machine while taking a bath would you?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;About the driver, drivers are usually used to increase the signal current (stepper motors, servo--), not the 'power' current. Since you're using dc, there won't be any signal current-- just those wires that supply power(Though there really are drivers for dc motors, you'd be better off constructing your own circuit if they just turn your dc from on to off and regulate them). I suggest you use relays that could handle your load, maybe 3 relays to handle the back and forth(Only in one speed).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you ever want a motor where you could accurately control the location and even the speed, then look for a stepper motor(This one will use a motor driver---- unless it's a really small powered motor).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Personally, I've never tried under powering with differences like that. It might take a while for your motor to turn (worst case, it might not even turn) since it's waiting for the electricity to travel along its coil. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;All the components should be relatively cheap, the relay would be the most expensive one. Best of luck.&lt;/p&gt;&#xA;" OwnerUserId="10499" LastActivityDate="2015-09-02T07:04:03.300" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="7995" PostTypeId="1" CreationDate="2015-09-02T12:09:45.277" Score="3" ViewCount="434" Body="&lt;p&gt;Having a camera mounted on my robot and looking upwards, I want to estimate the distance of the ceiling as the robot moves and also the position of landmarks observed on the ceiling (lamps for example).&#xA;I know this is a structure from motion problem but I was very confused on how to implement it. This case is a much simpler case than bundle adjustment as the intrinsic calibration of the camera is existing, the camera pose changes just in x and y directions, and the observed thing is a planar ceiling. Odometry might also be available but I would like to start solving it without. Do you know any libraries that offer a good and simple API to do such a thing? preferably based on levenberg-marquardt or similar optimization algorithms taking in more than just two observations. (Python bindings would be nice to have)&lt;/p&gt;&#xA;" OwnerUserId="4429" LastEditorUserId="4429" LastEditDate="2015-09-02T12:21:58.543" LastActivityDate="2015-09-03T22:07:59.623" Title="Ceiling depth with a monocular camera" Tags="&lt;cameras&gt;&lt;3d-reconstruction&gt;" AnswerCount="2" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="7997" PostTypeId="1" CreationDate="2015-09-03T05:15:31.567" Score="5" ViewCount="2203" Body="&lt;p&gt;I've been looking at parts for a beginners robotics kit (I teach at a museum) and have been wondering about servos.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can buy continuous servos with relative position encoders. But I can't find continuous rotation servos with absolute position encoders. Do these exist? If not, why not?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I understand that some forums don't like shopping questions, but I suspect that this part doesn't exist and I'd like to understand why.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, I understand that most servos use a potentiometer as a position encoder and that these don't turn more than 1 rotation, but there are other types of encoders that seem like they would do the job.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks for the help!&lt;/p&gt;&#xA;" OwnerUserId="10519" LastActivityDate="2016-10-27T14:07:53.787" Title="Why can't you buy continuous servos with absolute positioning?" Tags="&lt;otherservos&gt;&lt;quadrature-encoder&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="7998" PostTypeId="1" AcceptedAnswerId="8005" CreationDate="2015-09-03T07:11:50.220" Score="3" ViewCount="348" Body="&lt;p&gt;This is a simple question that I can't seem to find the answer for but when setting up the weave function how exactly does frequency (Hz) determine how fast it moves back and forth? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In other words if I raise frequency will it move quicker or slower and what factors must I consider? &lt;/p&gt;&#xA;" OwnerUserId="10520" LastEditorUserId="9176" LastEditDate="2015-09-09T04:53:39.053" LastActivityDate="2015-09-09T04:53:39.053" Title="Weave Weld Lincoln Electric Mig Robot" Tags="&lt;robotic-arm&gt;&lt;industrial-robot&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="7999" PostTypeId="2" ParentId="7992" CreationDate="2015-09-03T07:30:09.607" Score="1" Body="&lt;p&gt;From the images, I am assuming you do not have a multi camera setup.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, the short answer, based on the information I think you have, you cannot. In an ideal scenario, if you know the calibration parameters of the camera, you could use the distance to a known object to compute the scale factor. But in this case, you do not have a fixed object in each image.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, having said this, you should understand that longitudinal distance computation using single camera systems are generally error prone in the real world.(as you can see from the distance measurements in the images). This can be attributed to the non uniformity of objects as well as varying illumination conditions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A more constrained case would be to track only objects moving in the same direction as the host. In that case, you could try to detect the labe markers(they generally have a uniform width, length and distance between them) and use the principles of similar triangles to compute the distance to the target vehicle.&lt;/p&gt;&#xA;" OwnerUserId="10521" LastActivityDate="2015-09-03T07:30:09.607" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8000" PostTypeId="2" ParentId="7995" CreationDate="2015-09-03T08:44:06.440" Score="1" Body="&lt;p&gt;Not sure if I understood the problem correctly, but I understood that you wish to estimate the height of the observed objects hanging from the ceiling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You have a mono camera but you can take two images from different positions and use them as a stereo pair. You can use OpenCV to do this more easily: &lt;a href=&quot;http://docs.opencv.org/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html&quot; rel=&quot;nofollow&quot;&gt;http://docs.opencv.org/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4017" LastActivityDate="2015-09-03T08:44:06.440" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8001" PostTypeId="1" CreationDate="2015-09-03T09:28:00.010" Score="4" ViewCount="434" Body="&lt;p&gt;Is there any way to add a reset button to the Create2 that would be the equivalent  of temporarily disconnecting the battery? &lt;/p&gt;&#xA;" OwnerUserId="9350" LastActivityDate="2017-08-26T02:38:25.807" Title="Add hardware reset button for Create2" Tags="&lt;irobot-create&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8002" PostTypeId="2" ParentId="8001" CreationDate="2015-09-03T18:24:02.797" Score="2" Body="&lt;p&gt;You could put a &lt;a href=&quot;http://www.allelectronics.com/make-a-store/category/716200/switches-pushbutton/momentary/1.html&quot; rel=&quot;nofollow&quot;&gt;momentary switch&lt;/a&gt; on the battery line. That would &lt;em&gt;actually&lt;/em&gt; temporarily disconnect the battery. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-09-03T18:24:02.797" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8003" PostTypeId="2" ParentId="8001" CreationDate="2015-09-03T20:22:00.920" Score="3" Body="&lt;p&gt;There is no good way to do this by hacking in a switch because the battery goes right into the main PCB, but you do have two other good options.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.irobotweb.com/~/media/MainSite/PDFs/About/STEM/Create/iRobot_Roomba_600_Open_Interface_Spec.pdf&quot; rel=&quot;nofollow&quot;&gt;Send opcode 7&lt;/a&gt;: &quot;This command resets the robot, as if you had removed and reinserted the battery&quot;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://homesupport.irobot.com/app/answers/detail/a_id/8244/~/roomba-docks-too-soon-with-a-fully-charged-battery&quot; rel=&quot;nofollow&quot;&gt;Press and hold the SPOT and DOCK buttons for 10 seconds&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="110" LastEditorUserId="110" LastEditDate="2016-01-07T14:32:13.970" LastActivityDate="2016-01-07T14:32:13.970" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8004" PostTypeId="2" ParentId="7995" CreationDate="2015-09-03T22:07:59.623" Score="1" Body="&lt;p&gt;Most packages utilize stereo images to calculate distances. StereoVision is a python package that can be used to generate 3d point clouds. Also, this will require the use of odometry information.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to utilize information from more than two sequential images, an implementation of extended kalman filter can be utilized. Successive point clouds can be used to update the estimate of the ceiling.&lt;/p&gt;&#xA;" OwnerUserId="10521" LastActivityDate="2015-09-03T22:07:59.623" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8005" PostTypeId="2" ParentId="7998" CreationDate="2015-09-03T23:08:15.410" Score="2" Body="&lt;p&gt;Frequency refers to how quickly something is cycling, and the Hertz (Hz) unit means specifically &quot;cycles per second.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A cycle just refers to any repetitive motion, relative to some arbitrary reference point. The cycle is complete when the object in reference is at the same point moving the same way when it started. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A trip from my house to work and back is one cycle, but the cycle is not 8 hours because I don't go immediately back to work as soon as I get home. Instead, the cycle is actually 24 hours, because I'm not at my house &lt;em&gt;moving toward work&lt;/em&gt; again until the next morning. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could also look at a tire turning relative to a mark on the ground, or you could look at a weld rod relative to a butt joint. The weld rod completes one weave cycle when it starts, goes all the way to one side, goes all the way to the other side, then returns to where it started. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, the frequency in Hertz (Hz) indicates how many times per second the weld rod is going to do this. If you want a fast back-and-forth with less material deposited, you would want a higher frequency. If you want a slower back and forth with more material deposited, you want a lower frequency. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not sure how your welder is configured, but if it's possible to set it to zero that would also disable the weave function because you are indicating that you want the weld rod to go back and forth &quot;zero times per second.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope this gives you a better conceptual understanding of frequency! &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-09-03T23:08:15.410" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8006" PostTypeId="1" CreationDate="2015-09-04T06:53:51.723" Score="-2" ViewCount="69" Body="&lt;p&gt;I am on the project quadcopter. So i have to use PID for stabalizing it. I think i am going wrong because i am adding the pid output to motors thrust. While the motors thrust means to be its acceleraTion. The reason of my previous statment is that when the quad is static in air(not goin up nor below), that time the thrust is enough to cancel gravity, means thrust is negative gravity, that is acceleration. So if i add pid output to thrust that is acceleration of motors, it will be wrong. I have to add pid to speed of motors, which is not visible. My quad is not stabalizing the reason i see is this, that i am adding pid to acc, while it should be added to speed(virtually). What should i do. Should i derivate the pid output and add to thrust? &lt;a href=&quot;https://mbasic.facebook.com/photo.php?fbid=1545278952394916&amp;amp;id=100007384772233&amp;amp;set=a.1447457675510378.1073741830.100007384772233&amp;amp;refid=17&amp;amp;_ft_=top_level_post_id.1545278952394916%3Athid.100007384772233%3A306061129499414%3A69%3A0%3A1443682799%3A-1394728329505289925&amp;amp;__tn__=E&quot; rel=&quot;nofollow&quot;&gt;https://mbasic.facebook.com/photo.php?fbid=1545278952394916&amp;amp;id=100007384772233&amp;amp;set=a.1447457675510378.1073741830.100007384772233&amp;amp;refid=17&amp;amp;&lt;em&gt;ft&lt;/em&gt;=top_level_post_id.1545278952394916%3Athid.100007384772233%3A306061129499414%3A69%3A0%3A1443682799%3A-1394728329505289925&amp;amp;&lt;strong&gt;tn&lt;/strong&gt;=E&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://mbasic.facebook.com/photo.php?fbid=1545281645727980&amp;amp;id=100007384772233&amp;amp;set=a.1447457675510378.1073741830.100007384772233&amp;amp;refid=17&amp;amp;__tn__=E&quot; rel=&quot;nofollow&quot;&gt;https://mbasic.facebook.com/photo.php?fbid=1545281645727980&amp;amp;id=100007384772233&amp;amp;set=a.1447457675510378.1073741830.100007384772233&amp;amp;refid=17&amp;amp;&lt;strong&gt;tn&lt;/strong&gt;=E&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the drawing of my circuit. I am giving the current from one esc to whole of the circuit. Other esc's has only pwm wire connected to circuit.&lt;/p&gt;&#xA;" OwnerUserId="10449" LastEditorUserId="10449" LastEditDate="2015-09-05T07:42:44.230" LastActivityDate="2015-09-05T07:42:44.230" Title="Quadcopter accelerating or not" Tags="&lt;quadcopter&gt;&lt;pid&gt;" AnswerCount="1" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="8007" PostTypeId="2" ParentId="8006" CreationDate="2015-09-04T10:57:51.817" Score="0" Body="&lt;p&gt;The propellers convert a rotary speed into thrust. You should still be controlling the motor speed. The un-modified output of a PID controller should be the input to your plant/system. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-09-04T10:57:51.817" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8008" PostTypeId="1" AcceptedAnswerId="8415" CreationDate="2015-09-04T12:40:56.670" Score="5" ViewCount="1489" Body="&lt;p&gt;I was trying to implement the IBVS algorithm (the one explained in the Introduction &lt;a href=&quot;http://www.irisa.fr/lagadic/visp/documentation/visp-2.10.0/tutorial-ibvs.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;) in MATLAB myself, but I am facing the following problem : The algorithm seems to work only for the cases that the camera does not have to change its orientation in respect to the world frame.For example, if I just try to make one vertex of the initial (almost) square go closer to its opposite vertex, the algorithm does not work, as can be seen in the following image&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/LeVwK.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/LeVwK.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The red x are the desired projections, the blue circles are the initial ones and the green ones are the ones I get from my algorithm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also the errors are not exponentially dereasing as they should.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/lbdoH.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/lbdoH.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What am I doing wrong? I am attaching my MATLAB code which is fully runable. If anyone could take a look, I would be really grateful. I took out the code that was performing the plotting. I hope it is more readable now. Visual servoing has to be performed with at least 4 target points, because else the problem has no unique solution. If you are willing to help, I would suggest you take a look at the &lt;code&gt;calc_Rotation_matrix()&lt;/code&gt; function to check that the rotation matrix is properly calculated, then verify that the line &lt;code&gt;ds = vc;&lt;/code&gt; in &lt;code&gt;euler_ode&lt;/code&gt; is correct. The camera orientation is expressed in Euler angles according to &lt;a href=&quot;http://www.coppeliarobotics.com/helpFiles/en/eulerAngles.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; convention. Finally, one could check if the interaction matrix &lt;code&gt;L&lt;/code&gt; is properly calculated.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;function VisualServo()&#xA;&#xA;    global A3D B3D C3D D3D A B C D Ad Bd Cd Dd&#xA;&#xA;    %coordinates of the 4 points wrt camera frame&#xA;    A3D = [-0.2633;0.27547;0.8956];&#xA;    B3D = [0.2863;-0.2749;0.8937];&#xA;    C3D = [-0.2637;-0.2746;0.8977];&#xA;    D3D = [0.2866;0.2751;0.8916];&#xA;&#xA;    %initial projections (computed here only to show their relation with the desired ones) &#xA;    A=A3D(1:2)/A3D(3);&#xA;    B=B3D(1:2)/B3D(3);&#xA;    C=C3D(1:2)/C3D(3);&#xA;    D=D3D(1:2)/D3D(3);&#xA;&#xA;    %initial camera position and orientation&#xA;    %orientation is expressed in Euler angles (X-Y-Z around the inertial frame&#xA;    %of reference)&#xA;    cam=[0;0;0;0;0;0];&#xA;&#xA;    %desired projections&#xA;    Ad=A+[0.1;0];&#xA;    Bd=B;&#xA;    Cd=C+[0.1;0];&#xA;    Dd=D;&#xA;&#xA;    t0 = 0;&#xA;    tf = 50;&#xA;&#xA;    s0 = cam;&#xA;&#xA;    %time step&#xA;    dt=0.01;&#xA;    t = euler_ode(t0, tf, dt, s0);&#xA;&#xA;end&#xA;&#xA;&#xA;function ts = euler_ode(t0,tf,dt,s0)&#xA;&#xA;    global A3D B3D C3D D3D Ad Bd Cd Dd &#xA;&#xA;    s = s0;&#xA;    ts=[];&#xA;    for t=t0:dt:tf&#xA;        ts(end+1)=t;&#xA;        cam = s;&#xA;&#xA;        % rotation matrix R_WCS_CCS&#xA;        R = calc_Rotation_matrix(cam(4),cam(5),cam(6));&#xA;        r = cam(1:3);&#xA;&#xA;        % 3D coordinates of the 4 points wrt the NEW camera frame&#xA;        A3D_cam = R'*(A3D-r);&#xA;        B3D_cam = R'*(B3D-r);&#xA;        C3D_cam = R'*(C3D-r);&#xA;        D3D_cam = R'*(D3D-r);&#xA;&#xA;        % NEW projections&#xA;        A=A3D_cam(1:2)/A3D_cam(3);&#xA;        B=B3D_cam(1:2)/B3D_cam(3);&#xA;        C=C3D_cam(1:2)/C3D_cam(3);&#xA;        D=D3D_cam(1:2)/D3D_cam(3);&#xA;&#xA;&#xA;        % computing the L matrices&#xA;        L1 = L_matrix(A(1),A(2),A3D_cam(3));&#xA;        L2 = L_matrix(B(1),B(2),B3D_cam(3));&#xA;        L3 = L_matrix(C(1),C(2),C3D_cam(3));&#xA;        L4 = L_matrix(D(1),D(2),D3D_cam(3));&#xA;        L = [L1;L2;L3;L4];&#xA;&#xA;&#xA;        %updating the projection errors&#xA;        e = [A-Ad;B-Bd;C-Cd;D-Dd];&#xA;&#xA;        %compute camera velocity&#xA;        vc = -0.5*pinv(L)*e;&#xA;&#xA;        %change of the camera position and orientation&#xA;        ds = vc;&#xA;&#xA;        %update camera position and orientation&#xA;        s = s + ds*dt;&#xA;&#xA;&#xA;    end  &#xA;    ts(end+1)=tf+dt;&#xA;end&#xA;&#xA;function R = calc_Rotation_matrix(theta_x, theta_y, theta_z)&#xA;&#xA;    Rx = [1 0 0; 0 cos(theta_x) -sin(theta_x); 0 sin(theta_x) cos(theta_x)];&#xA;    Ry = [cos(theta_y) 0 sin(theta_y); 0 1 0; -sin(theta_y) 0 cos(theta_y)];&#xA;    Rz = [cos(theta_z) -sin(theta_z) 0; sin(theta_z) cos(theta_z) 0; 0 0 1];&#xA;&#xA;    R = Rx*Ry*Rz;&#xA;&#xA;end&#xA;&#xA;function L = L_matrix(x,y,z)&#xA;&#xA;    L = [-1/z,0,x/z,x*y,-(1+x^2),y;&#xA;       0,-1/z,y/z,1+y^2,-x*y,-x];&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Cases that work:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;A2=2*A;&#xA;B2=2*B;&#xA;C2=2*C;&#xA;D2=2*D;&#xA;&#xA;A2=A+1;&#xA;B2=B+1;&#xA;C2=C+1;&#xA;D2=D+1;&#xA;&#xA;A2=2*A+1;&#xA;B2=2*B+1;&#xA;C2=2*C+1;&#xA;D2=2*D+1;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Cases that do NOT work:&#xA;Rotation by 90 degrees and zoom out (zoom out alone works, but I am doing it here for better visualization)&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;A2=2*D;&#xA;B2=2*C;&#xA;C2=2*A;&#xA;D2=2*B;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/0Xhde.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0Xhde.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7107" LastEditorUserId="7107" LastEditDate="2015-09-05T16:11:11.247" LastActivityDate="2017-05-10T00:57:11.050" Title="Image Based Visual Servoing algorithm in MATLAB" Tags="&lt;control&gt;&lt;algorithm&gt;&lt;matlab&gt;&lt;visual-servoing&gt;" AnswerCount="4" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8009" PostTypeId="2" ParentId="7997" CreationDate="2015-09-04T14:02:49.293" Score="2" Body="&lt;p&gt;I assume you mean hobby servos, like the one pictured here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gNnrR.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gNnrR.jpg&quot; alt=&quot;Futaba hobby servo&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These were primarily designed for RC planes and cars to actuate control surfaces and steering.  Continuous rotation is not needed.  So a simple and cheap potentiometer is used for absolute position measurement.  Cheap pots like this have a large dead zone.  Their internal construction is something like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/sa1uQ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/sa1uQ.png&quot; alt=&quot;potentiometer internals&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And to prevent the motor from reaching the dead zone there is typically some hard stop or peg on one of the gears.  Due to the prevalence and cheap cost of these hobby servos, people have found ways to hack them and make them continuous rotation.  This typically involves trimming the hard stop and replacing the potentiometer with a pair of regular resistors.  Now to get the servo to spin, you kind of need to trick the control algorithm.  The pair of resistors make the servo think it is always in the middle of its range (for example).  Then you command it to go to some other angle, and it spins at some speed to get there, but since it always thinks it is in the middle, it will spin forever.  So what is normally a position command is now a speed command.  Voila!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now the word &lt;em&gt;servo&lt;/em&gt; actually applies to any motor coupled with a sensor for position feedback with the required control to go to a desired position.  See better definition &lt;a href=&quot;https://en.wikipedia.org/wiki/Servomotor&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.  So by hacking the hobby servo to make it continuous rotation, it is no longer actually a servo.  That is unless you now add your own sensing and code to &lt;em&gt;servo&lt;/em&gt; to your desired position.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But this is a pretty round-about way of getting what you want.  So why not just pick a motor, gear train, and sensing scheme to specifically suit your needs?  But this is rather advanced for beginners.  So you should find some all-in-one &lt;em&gt;real&lt;/em&gt; servos.  Dynamixels are a popular choice.  They are continuous rotation, have real absolution position measurement, are individually addressable, and can be daisychained.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ava1M.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ava1M.jpg&quot; alt=&quot;Dynamixels hobby servo&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And the LEGO NXT and EV3 motors are also real servos.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-09-04T14:02:49.293" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8010" PostTypeId="2" ParentId="7970" CreationDate="2015-09-04T15:37:15.713" Score="1" Body="&lt;p&gt;Yes, iRobot has found and fixed many firmware issues related to Create.   You should e-mail create@irobot.com for assistance.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-09-04T15:37:15.713" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8011" PostTypeId="2" ParentId="8008" CreationDate="2015-09-05T00:20:46.027" Score="0" Body="&lt;p&gt;So, to be perfectly honest, I don't understand the application, but I'm very good with Matlab and controls. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, your code is really hard on the eyes. I'm not sure why you would jump straight to tracking 4 points before you got it working for 1, but that could be part of your application (again:ignorant). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's hard to read mostly because of your naming of so many very similar variables and your inconsistent use of matrix operations. For instance, you define A through D as 3D(1:2)/3D(3) in your main code, but then you define x1,y1,x2...y4 in your euler function despite the fact that they are calculated the same way. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would recommend you consider a structure array. Consider the following:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;point(1).image = point(1).world(1:2)/point(1).world(3);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This does several things for you:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Your variable names become readable. &lt;/li&gt;&#xA;&lt;li&gt;You can use as many or few points as you want - poll how many points you have with &lt;code&gt;numel(points)&lt;/code&gt; and you can add more points with &lt;code&gt;points(end+1)=...&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;You can operate on all of the points with one operation inside a &lt;code&gt;for&lt;/code&gt; loop - &lt;code&gt;points(i).var = ...&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Most importantly&lt;/strong&gt; - you can pass everything to do with your points in and out of your function as a function parameter rather than declaring them as global. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;FINALLY - about your problem, the only thing I can see is at the last step - $v_c = -\lambda L_x e$. I don't see where this is calculated, but as this is a control problem I must assume that $\lambda$ refers to an eigenvalue, which are typically the poles of the system. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The poles dictate system response - a negative pole indicates a stable system, where a positive pole indicates an unstable system. Because your equation shows a &lt;strong&gt;negative&lt;/strong&gt; $\lambda$, I would think that the entire term should be positive for a stable controller. Your term is negative, so that might be the cause of your problem, but again:ignorant. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;SO, sorry for the lecture, but I think you might be finding that messy code is hard to debug. If you could find the derivation of the equation then I'd be happy to take a look at it, but I'm reading/posting from my phone and the TeX equations on that page are microscopic relative to the regular text so it's very hard for me to read. Try flipping the sign on your camera speed and if that doesn't fix try cleaning up your code and see if you've got some transposition error somewhere. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-09-05T00:20:46.027" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8013" PostTypeId="2" ParentId="8001" CreationDate="2015-09-05T12:31:36.833" Score="2" Body="&lt;p&gt;Thanks, I had thought of the momentary switch, but as Ben says the battery configuration makes it hard to get to. The whole purpose of the reset is to avoid the awkward 10 second 2 button sequence. I think I've done that literally 100's of times. Sending the opcode isn't a good solution because we are running these wirelessly and often the reset is because we've lost communications. I have an idea on how to get a switch inline with the battery - I will follow up if it works.&lt;/p&gt;&#xA;" OwnerUserId="9350" LastActivityDate="2015-09-05T12:31:36.833" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8014" PostTypeId="1" CreationDate="2015-09-05T21:46:33.613" Score="0" ViewCount="74" Body="&lt;p&gt;Is there a way I can control my arduino robot from anywhere in the world. The robot goes out of range of my home wifi so my wifi shield can't help. Is there a way to make sure the robot is always on the Internet no matter where it goes? &lt;/p&gt;&#xA;" OwnerUserId="10529" LastActivityDate="2018-01-21T22:00:47.350" Title="Arduino mobile robot" Tags="&lt;arduino&gt;&lt;mobile-robot&gt;&lt;raspberry-pi&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8015" PostTypeId="2" ParentId="8014" CreationDate="2015-09-06T05:05:00.253" Score="1" Body="&lt;p&gt;There are mobile data shields available. Although this won't work absolutely anywhere the robot goes, this solution should provide a way to control the robot at most urban places.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A low tech solution to this problem is to use a dtmf based control. Although this is similar to the previous solution, this solution will enable you to control the robot even in places without a reliable data connection.&lt;/p&gt;&#xA;" OwnerUserId="10521" LastActivityDate="2015-09-06T05:05:00.253" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8017" PostTypeId="2" ParentId="6952" CreationDate="2015-09-06T21:49:01.733" Score="-2" Body="&lt;p&gt;We begin with a image as BMP of 56 x 96 Pixels as on sample demo on NERC page&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The file BMP with name Blue Black BMP gives us the below Matrix &#xA;generated by Arduino Code &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now Row Number 0 is Entry Wall &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;1 (1,1)     1 (1,2)     1 (1,3)     1 (1,4)     1 (1,5)     Now Row Number 1&#xA;0 (2,1)     0 (2,2)     1 (2,3)     0 (2,4)     1 (2,5)     Now Row Number 2&#xA;1 (3,1)     1 (3,2)     0 (3,3)     1 (3,4)     1 (3,5)     Now Row Number 3&#xA;1 (4,1)     1 (4,2)     1 (4,3)     2 (4,4)     1 (4,5)     Now Row Number 4&#xA;1 (5,1)     0 (5,2)     1 (5,3)     1 (5,4)     1 (5,5)     Now Row Number 5&#xA;0 (6,1)     1 (6,2)     1 (6,3)     0 (6,4)     1 (6,5)     Now Row Number 6&#xA;2 (7,1)     0 (7,2)     1 (7,3)     1 (7,4)     1 (7,5)     Now Row Number 7&#xA;1 (8,1)     0 (8,2)     0 (8,3)     1 (8,4)     1 (8,5)     Now Row Number 8&#xA;1 (9,1)     1 (9,2)     1 (9,3)     1 (9,4)     0 (9,5)     Now Row Number 9&#xA;0 (10,1)    1 (10,2)    1 (10,3)    1 (10,4)    0 (10,5)    Now Row Number 10&#xA;0 (11,1)    0 (11,2)    0 (11,3)    0 (11,4)    0 (11,5)    Now Top Wall   11&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Each above is 8 Bits Cell - Given are 5 block 5x8 = 40 bits + 8 bits Left Side + 8 Bits on Right Side 40 + 16 are 56 &#xA;and 10 Rows each 8 bits info 10 x 8 = 80 and one line on top and one below each 8 Bits so 80 + 8 + 8 = 96 bits info &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please feel free to ask any info regarding more on reading images / Image processing on Micros or Fpga&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Well wishes &lt;/p&gt;&#xA;" OwnerUserId="9643" LastEditorUserId="350" LastEditDate="2015-09-08T18:23:32.657" LastActivityDate="2015-09-08T18:23:32.657" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8018" PostTypeId="1" CreationDate="2015-09-07T01:39:58.167" Score="1" ViewCount="524" Body="&lt;p&gt;I'm looking for a complete tutorial textbook for how to build and control a quadrotor (dynamics, control, etc.).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm an engineer with a broad background in programming, mechanics, and control but it's been several years and I'm rusty. I was just wondering if anyone knew of a great &quot;from the ground up&quot; tutorial for quadrotors? I found &lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/0071822283&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt; book which looks interesting but thought I'd ask here too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, assume I've taken a formal course on all necessary topics: system modeling, mechanics, control theory, state estimation, programming, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm looking for a book that assumes the reader is familiar with the topics but also goes step-by-step. For example, instead of just stating &quot;here are the system equations&quot; I'm looking for &quot;let's derive the system equations&quot; (but assumes you are familiar with modeling/kinematics). I'd like to start a quadcopter as a side project but have precious spare time so I'd prefer a single good reference instead of jumping from each individual topic textbook; maybe I'm just being greedy :)&lt;/p&gt;&#xA;" OwnerUserId="10534" LastEditorUserId="10534" LastEditDate="2015-09-07T18:21:05.403" LastActivityDate="2016-01-24T01:37:37.307" Title="Complete Quadrotor Tutorial (Text)Book?" Tags="&lt;quadcopter&gt;" AnswerCount="0" CommentCount="3" FavoriteCount="1" ClosedDate="2016-01-26T00:49:20.203" ContentLicense="CC BY-SA 3.0" />
  <row Id="8019" PostTypeId="1" AcceptedAnswerId="8025" CreationDate="2015-09-07T06:06:49.893" Score="-3" ViewCount="194" Body="&lt;p&gt;Which method is better, in term of accuracy, for detection of indoor localization of a drone. Camera based system or wireless techniques like WLAN or Bluetooth?&lt;/p&gt;&#xA;" OwnerUserId="10536" LastActivityDate="2015-09-08T00:02:46.653" Title="indoor positioning system: which is better?" Tags="&lt;slam&gt;" AnswerCount="2" CommentCount="4" ClosedDate="2015-09-09T18:46:34.637" ContentLicense="CC BY-SA 3.0" />
  <row Id="8021" PostTypeId="2" ParentId="8019" CreationDate="2015-09-07T12:32:30.753" Score="-2" Body="&lt;p&gt;As far as I know, wireless signals are quite less acurate than camera based ones. Probably the best would be IR sensors equipment with cameras, but that's also the most expensive&lt;/p&gt;&#xA;" OwnerUserId="10539" LastActivityDate="2015-09-07T12:32:30.753" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8024" PostTypeId="1" AcceptedAnswerId="8026" CreationDate="2015-09-07T21:24:38.050" Score="5" ViewCount="1094" Body="&lt;p&gt;I want to control the attitude(roll, pitch, yaw) of a vehicle capable of pitching and rolling. To do this I have created a quaternion PID controller. First I take the current attitude of the vehicle converting it to a quaternion Qc and do the same for the desired attitude with the quaternion Qd. I then calculate the input of my PID controller as Qr = Qc' x Qd. The imaginary parts of the quaternions are then fed as force requests on the roll, pitch, yaw axes of the vehicle. I test on a simulator and the control works but becomes unstable in some cases (request for R: 60 P: 60 Y:60). I also want this to work around singularities (i.e. pitch 90)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know why I get this behavior and if so explain (thoroughly) what I'm doing wrong?&lt;/p&gt;&#xA;" OwnerUserId="10542" LastActivityDate="2015-09-08T01:59:51.097" Title="PID quaternion contoller" Tags="&lt;control&gt;&lt;pid&gt;&lt;stability&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8025" PostTypeId="2" ParentId="8019" CreationDate="2015-09-08T00:02:46.653" Score="-1" Body="&lt;p&gt;Definitely camera based options, however, I would go with IR sensors or some even some sound-based sensors if you want a really specific measurement. &lt;/p&gt;&#xA;" OwnerUserId="10498" LastActivityDate="2015-09-08T00:02:46.653" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8026" PostTypeId="2" ParentId="8024" CreationDate="2015-09-08T01:59:51.097" Score="2" Body="&lt;p&gt;You are using one PID controller to try to drive a quaternion? A quaternion by definition represents three degrees of freedom, roll pitch yaw, and a PID controller is Single Input, Single Output (SISO) controller. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You're trying to mask a Multiple Input, Multiple Output (MIMO) system by hiding your three variables in a quaternion. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would suggest maybe you consider using three PID controllers. If you're concerned about singularities, try going for an axis-angle configuration, where two controllers drive the azimuth and elevation of the axis and a third drives the rotation.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-09-08T01:59:51.097" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8027" PostTypeId="1" AcceptedAnswerId="8037" CreationDate="2015-09-08T06:56:50.313" Score="3" ViewCount="127" Body="&lt;p&gt;I'm implementing an extended Kalman filter and I'm facing a problem with showing the covariances to the user.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The covariance matrix estimate contains all the information we have about the current value estimate, but that is too much to display.&#xA;I would like to have a single number that says &quot;our estimate is really good&quot; when close to 0 and &quot;our estimate is not worth much&quot; when large.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My intuitive simple solution would be to average all the values in the covariance estimate matrix (or maybe just the diagonal), except that in my case the values have different units and different ranges.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it possible to do something like this?&lt;/p&gt;&#xA;" OwnerUserId="482" LastEditorUserId="482" LastEditDate="2015-09-08T13:44:08.940" LastActivityDate="2015-09-10T03:47:15.977" Title="How to sumarize Kalman filter covariances for display?" Tags="&lt;kalman-filter&gt;" AnswerCount="3" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8028" PostTypeId="1" AcceptedAnswerId="8030" CreationDate="2015-09-08T10:46:02.267" Score="-2" ViewCount="98" Body="&lt;p&gt;What subjects are involved in robotics. If I want to build robots then what necessary things I need to learn consecutively as a beginner.&lt;/p&gt;&#xA;" OwnerUserId="10546" LastActivityDate="2015-09-08T14:38:04.517" Title="What I need to learn to build robots" Tags="&lt;artificial-intelligence&gt;&lt;embedded-systems&gt;&lt;first-robotics&gt;" AnswerCount="1" CommentCount="0" ClosedDate="2015-09-09T18:48:20.867" ContentLicense="CC BY-SA 3.0" />
  <row Id="8029" PostTypeId="2" ParentId="6442" CreationDate="2015-09-08T14:30:02.663" Score="1" Body="&lt;p&gt;To me, the straightforward explanation seems that you are applying a desired torque, but on multiple motors -- when you use 1 motor you get 1&amp;times; torque, and when you use two motors you are getting 2&amp;times; torque.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd imagine that your code should look more like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;motors_active = 2&#xA;c_p = angles_correction.pitch / motors_active&#xA;c_r = angles_correction.roll / motors_active&#xA;torque[0] = (int16_t)(+ c_p - c_r) + torque_set;&#xA;torque[1] = (int16_t)(+ c_p + c_r) + torque_set;&#xA;torque[2] = (int16_t)(- c_p + c_r) + torque_set;&#xA;torque[3] = (int16_t)(- c_p - c_r) + torque_set;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I'm unsure why all 4 motors are contributing to both pitch and roll (I would have expected pitch and roll axes to be aligned on the quadrotor axes, but technically things will still work if they are 45&amp;deg; rotated).  If that's the case, I assume you've corrected for the rotation in the calculation of &lt;code&gt;angles_correction&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2015-09-08T14:30:02.663" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8030" PostTypeId="2" ParentId="8028" CreationDate="2015-09-08T14:38:04.517" Score="1" Body="&lt;p&gt;To give you an answer that is similarly broad to your question:&#xA;Mechanical engineering, electrical engineering, control theory or computer science are a good start.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To give a more in-depth answer, you would have to tell us a little bit more. For starters, are you interested in robotics as a hobby or study, and what is your background? Is there any specific field of robotics that interests you? &lt;/p&gt;&#xA;" OwnerUserId="10547" LastActivityDate="2015-09-08T14:38:04.517" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8031" PostTypeId="2" ParentId="8027" CreationDate="2015-09-08T15:36:58.183" Score="1" Body="&lt;p&gt;You want to display $\frac{n(n+1)}{2}$ values of a symmetric $n \times n$ matrix, where $n=26$, which means you have 351 values.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It doesn't make too much sense to display all those numeric values. After all you want to display them to a human being, which is unlikely able to oversee all these values if displayed as numbers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then as you say, the values have different units and ranges. that means there's no automatic way of finding the &quot;good&quot; range.&#xA;I suggest running the system for a while, disturbing it, gathering some rough estimates of where the values are and to what peaks they can rise.&#xA;With these values you can provide a rough estimate of &quot;good&quot; and &quot;bad&quot;, somewhat fuzzy if you will.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back to the original problem: displaying all those values. A numerical display is out of the question. And that precision isn't even desired, so why not map the values to colors and display each value as a pixel? Make good green and the red bad. Now the job looks a lot simpler: display some 351 pixels&lt;sup&gt;1&lt;/sup&gt;. It's easy to see when some pixels go red if something goes wrong and what other pixels go &quot;hot&quot; at the same moment. It's also easy to see if some values are generally uncertain, constantly staying in the orange color.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depending on your needs you can expand that debug facility further, allowing the user to only display a subset of the matrix. Or allow closer inspection, displaying the true values behind the colors and/or plot them to see how they change to the &quot;bad&quot; state.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt;of course you can display these values as large as you want. I'd start with a a 10x10px box for each number, resulting in a 260x260px box, which should be big enough to see clearly, yet small enough to add other debugging/observation tools around it.&lt;/p&gt;&#xA;" OwnerUserId="9860" LastActivityDate="2015-09-08T15:36:58.183" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8032" PostTypeId="2" ParentId="8027" CreationDate="2015-09-08T17:22:40.787" Score="1" Body="&lt;p&gt;Yes you can do so by converting the covariance matrix to a gray level image. For example, in the below picture the covariance matrix is represented as a gray image in which the gray intensity represents the correlation between the elements, the darker the stronger correlation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/viwng.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/viwng.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;More information see &lt;a href=&quot;http://www.amazon.ca/Fastslam-Scalable-Simultaneous-Localization-Robotics/dp/3540463992&quot; rel=&quot;nofollow noreferrer&quot;&gt;FastSLAM&#xA;A Scalable Method for the Simultaneous Localization and Mapping Problem in Robotics&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This shows the correlation. To show how the uncertainty of a quantity decreasing, then plot the $x\pm 3\sigma_{x}$ where $x$ the true value not the estimate. You can't describe the entire system with one single value. Averaging has no meaning in this context. In my opinion, pick an element of your state vector and its uncertainty and plot them according to $x\pm 3\sigma_{x}$. EKF is a sub-optimal filter which means converging to the true value might not be possible as the case in KF. This is due to the linearization step, however, EKF is a good choice and generally yields satisfactory results. &lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="2155" LastEditDate="2015-09-08T17:57:54.277" LastActivityDate="2015-09-08T17:57:54.277" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8033" PostTypeId="1" AcceptedAnswerId="8034" CreationDate="2015-09-08T19:56:23.303" Score="-3" ViewCount="143" Body="&lt;p&gt;As far as I know, a robot sends orders as discrete signals. However, isn't computer simulation based on continuous simulation? Do you know if it may happen any important difference when comparing reality to simulation in some cases? I heard that cable-driven robots were quite sensitive.&lt;/p&gt;&#xA;" OwnerUserId="10539" LastActivityDate="2015-09-09T01:02:30.997" Title="continuous vs discrete simulation in robotics" Tags="&lt;control&gt;&lt;simulation&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8034" PostTypeId="2" ParentId="8033" CreationDate="2015-09-09T01:02:30.997" Score="1" Body="&lt;p&gt;Computer simulations are not done in the continuous time domain. Simulator designers approximate continuous simulation by reducing the difference between consecutive discrete time points to such a low level that it &quot;looks like&quot; continuous simulation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are modelling something in a 'pseudo continuous' simulator, the best way to get similar results in a hardware implementation would be to increase the frequency of your control signals.&lt;/p&gt;&#xA;" OwnerUserId="10521" LastActivityDate="2015-09-09T01:02:30.997" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8035" PostTypeId="2" ParentId="8008" CreationDate="2015-09-09T12:10:47.377" Score="-2" Body="&lt;p&gt;This problem is called Chaumette Conundrum and it is a big negative of IBVS. You should try other VS algorithms.&lt;/p&gt;&#xA;" OwnerUserId="10554" LastActivityDate="2015-09-09T12:10:47.377" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8037" PostTypeId="2" ParentId="8027" CreationDate="2015-09-09T14:25:38.750" Score="2" Body="&lt;p&gt;It's tough to say anything about a really large covariance matrix. This is because (presumably) the matrix includes the uncertainty about a whole bunch of features, not just the robot pose. Typically what matters in real life is the uncertainty in the position of the robot (and possibly orientation). So with only three spatial deimensions, you can easily display a 3D covariance ellipse which will tell you the expected position and uncertainty of the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In literature there are several methods for displaying some statistics about an arbitrarily large state space. The most common is some measure of the eigenvalues of the matrix. (For a 2x2 or 3x3 matrix, this is often a covariance ellipse as mentioned above) For an nxn matrix, you can display the blockwise covariances for each feature, which will tell you which features are very, very roughly estimated, &lt;em&gt;or&lt;/em&gt; you can output some function of the covariance itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, the determinant is a common measure of uncertainty used in GPS as the Dillution of Precision. Another common measure is the maximum eigenvalue, though that only really makes sense on a feature-by-feature basis.&lt;/p&gt;&#xA;" OwnerUserId="163" LastActivityDate="2015-09-09T14:25:38.750" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8038" PostTypeId="1" CreationDate="2015-09-09T18:33:52.337" Score="0" ViewCount="188" Body="&lt;p&gt;I have recently built a raspberry pi based quadcopter that communicates with my tablet over wifi. The problem is that it drifts a lot. At first I thought that the problem was vibration, so I mounted the MPU-6050 more securely to the frame. That seemed to help a bit, but it still drifts. I have tried tuning the PID, tuning the complementary filter, and installing a real time OS. Nothing seems to help very much. Below is my code written completely in java. Any suggestions are appreciated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;QuadServer.java:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;package com.zachary.quadserver;&#xA;&#xA;import java.net.*;&#xA;import java.io.*;&#xA;import java.util.*;&#xA;&#xA;import com.pi4j.io.i2c.I2CBus;&#xA;import com.pi4j.io.i2c.I2CDevice;&#xA;import com.pi4j.io.i2c.I2CFactory;&#xA;&#xA;import se.hirt.pi.adafruit.pwm.PWMDevice;&#xA;import se.hirt.pi.adafruit.pwm.PWMDevice.PWMChannel;&#xA;&#xA;public class QuadServer {&#xA;    private final static int FREQUENCY = 490; &#xA;&#xA;    private static final int MIN = 740;&#xA;    private static final int MAX = 2029;&#xA;&#xA;    private static Sensor sensor = new Sensor();&#xA;&#xA;    private static double PX = 0;&#xA;    private static double PY = 0;&#xA;    private static double PZ = 0;&#xA;&#xA;    private static double IX = 0;&#xA;    private static double IY = 0;&#xA;    private static double IZ = 0;&#xA;&#xA;    private static double DX = 0;&#xA;    private static double DY = 0;&#xA;    private static double DZ = 0;&#xA;&#xA;    private static double kP = 1.95; //2.0&#xA;    private static double kI = 10.8; //8.5&#xA;    private static double kD = 0.15; //0.14&#xA;&#xA;    private static long time = System.currentTimeMillis();&#xA;&#xA;    private static double last_errorX = 0;&#xA;    private static double last_errorY = 0;&#xA;    private static double last_errorZ = 0;&#xA;&#xA;    private static double outputX;&#xA;    private static double outputY;&#xA;    private static double outputZ;&#xA;&#xA;    private static int val[] = new int[4];&#xA;&#xA;    private static int throttle;&#xA;&#xA;    static double setpointX = 0;&#xA;    static double setpointY = 0;&#xA;    static double setpointZ = 0;&#xA;&#xA;    static double errorX;&#xA;    static double errorY;&#xA;    static double errorZ;&#xA;&#xA;    static long receivedTime = System.currentTimeMillis();&#xA;&#xA;    private static String data;&#xA;&#xA;    static int trimX = -70;&#xA;    static int trimY = 70;&#xA;&#xA;    public static void main(String[] args) throws IOException, NullPointerException {&#xA;        DatagramSocket serverSocket = new DatagramSocket(40002);&#xA;&#xA;        PWMDevice device = new PWMDevice();&#xA;&#xA;        device.setPWMFreqency(FREQUENCY);&#xA;&#xA;        PWMChannel esc0 = device.getChannel(0);&#xA;        PWMChannel esc1 = device.getChannel(1);&#xA;        PWMChannel esc2 = device.getChannel(2);&#xA;        PWMChannel esc3 = device.getChannel(3);&#xA;&#xA;        /*Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {&#xA;                public void run() {&#xA;                    System.out.println(&quot;terminating&quot;);&#xA;                    try {&#xA;                        esc0.setPWM(0, calculatePulseWidth(MIN/1000.0, FREQUENCY));&#xA;                    esc1.setPWM(0, calculatePulseWidth(MIN/1000.0, FREQUENCY));&#xA;                    esc2.setPWM(0, calculatePulseWidth(MIN/1000.0, FREQUENCY));&#xA;                    esc3.setPWM(0, calculatePulseWidth(MIN/1000.0, FREQUENCY));&#xA;                } catch (IOException e) {&#xA;                    e.printStackTrace();&#xA;                }&#xA;                }&#xA;            }));&#xA;            System.out.println(&quot;running&quot;);*/&#xA;&#xA;&#xA;        Thread read = new Thread(){&#xA;                public void run(){&#xA;                    while(true) {&#xA;                    try {&#xA;                            byte receiveData[] = new byte[1024];&#xA;                            DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);&#xA;                            serverSocket.receive(receivePacket);&#xA;                            String message = new String(receivePacket.getData());&#xA;&#xA;                            data = &quot;&quot;+IX;&#xA;                        addData(IY);&#xA;&#xA;                        addData(sensor.readAccelAngle(0));&#xA;                        addData(sensor.readAccelAngle(1));&#xA;&#xA;                        byte[] sendData = new byte[1024];&#xA;                            sendData = data.getBytes();&#xA;                                InetAddress IPAddress = InetAddress.getByName(&quot;192.168.1.9&quot;);&#xA;                                DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 1025);&#xA;                                serverSocket.send(sendPacket);&#xA;&#xA;                            setpointX = Double.parseDouble(message.split(&quot;\\s+&quot;)[0])*0.7;&#xA;                        setpointY = Double.parseDouble(message.split(&quot;\\s+&quot;)[1])*0.7;&#xA;&#xA;                            throttle = (int)(Integer.parseInt((message.split(&quot;\\s+&quot;)[3]))*12.67)+MIN;&#xA;&#xA;                            kP = Math.round((Integer.parseInt(message.split(&quot;\\s+&quot;)[4])*0.05)*1000.0)/1000.0;&#xA;                            kI = Math.round((Integer.parseInt(message.split(&quot;\\s+&quot;)[5])*0.2)*1000.0)/1000.0;&#xA;                            kD = Math.round((Integer.parseInt(message.split(&quot;\\s+&quot;)[6])*0.01)*1000.0)/1000.0;&#xA;&#xA;                            trimX = (Integer.parseInt(message.split(&quot;\\s+&quot;)[7])-50)*2;&#xA;                            trimY = (Integer.parseInt(message.split(&quot;\\s+&quot;)[8])-50)*2;&#xA;&#xA;                            double accelSmoothing = 0.02;//(Integer.parseInt(message.split(&quot;\\s+&quot;)[8])*0.05)+1;&#xA;                            double gyroSmoothing = 0.04;//(Integer.parseInt(message.split(&quot;\\s+&quot;)[7])*0.01);&#xA;&#xA;                            sensor.setSmoothing(gyroSmoothing, accelSmoothing);&#xA;&#xA;                            //System.out.println(&quot;trimX: &quot;+trimX+&quot; trimY: &quot;+trimY);&#xA;&#xA;                            System.out.println(&quot;kP: &quot;+kP+&quot;, kI: &quot;+kI+&quot;, kD: &quot;+kD+&quot;, trimX: &quot;+trimX+&quot;, trimY: &quot;+trimY);&#xA;&#xA;                        receivedTime = System.currentTimeMillis();&#xA;&#xA;                        } catch (IOException e) {&#xA;                            e.printStackTrace();&#xA;                        }&#xA;                    }&#xA;                }&#xA;        };&#xA;        read.start();&#xA;&#xA;        while(true)&#xA;        {&#xA;            Arrays.fill(val, throttle);&#xA;&#xA;            errorX = sensor.readGyro(0)-setpointX;&#xA;            errorY = -sensor.readGyro(1)-setpointY;&#xA;            errorZ = sensor.readGyro(2)-setpointZ;&#xA;&#xA;            double dt = (double)(System.currentTimeMillis()-time)/1000;&#xA;&#xA;            double accelAngleX = sensor.readAccelAngle(0);&#xA;            double accelAngleY = sensor.readAccelAngle(1);&#xA;&#xA;            if(dt &amp;gt; 0.005)&#xA;            {&#xA;&#xA;                PX = errorX;&#xA;                PY = errorY;&#xA;                PZ = errorZ;&#xA;&#xA;                IX += (errorX)*dt;&#xA;                IY += (errorY)*dt;&#xA;                //IZ += errorZ*dt;&#xA;&#xA;                IX = 0.98*IX+0.02*accelAngleX;&#xA;                IY = 0.98*IY+0.02*accelAngleY;&#xA;&#xA;                DX = (errorX - last_errorX)/dt;&#xA;                DY = (errorY - last_errorY)/dt;&#xA;                //DZ = (errorZ - last_errorZ)/dt;&#xA;&#xA;                last_errorX = errorX;&#xA;                last_errorY = errorY;&#xA;                last_errorZ = errorZ;&#xA;&#xA;                outputX = kP*PX+kI*IX+kD*DX;&#xA;                outputY = kP*PY+kI*IY+kD*DY;&#xA;                outputZ = kP*PZ+kI*IZ+kD*DZ;&#xA;&#xA;                time = System.currentTimeMillis();&#xA;            }&#xA;&#xA;            //System.out.println(IX+&quot;, &quot;+IY+&quot;, &quot;+throttle);&#xA;&#xA;            add(-outputX-outputY-outputZ-trimX+trimY, 0);       //clockwise&#xA;            add(-outputX+outputY+outputZ-trimX-trimY, 1);   //counterClockwise&#xA;            add(outputX+outputY-outputZ+trimX-trimY, 2);    //clockwise&#xA;            add(outputX-outputY+outputZ+trimX+trimY, 3);        //counterclockwise&#xA;&#xA;            //System.out.println(val[0]+&quot;, &quot;+val[1]+&quot;, &quot;+val[2]+&quot;, &quot;+val[3]);&#xA;&#xA;            try {&#xA;                if(System.currentTimeMillis()-receivedTime &amp;lt; 1000)&#xA;                {&#xA;                    esc0.setPWM(0, calculatePulseWidth(val[0]/1000.0, FREQUENCY));&#xA;                    esc1.setPWM(0, calculatePulseWidth(val[1]/1000.0, FREQUENCY));&#xA;                    esc2.setPWM(0, calculatePulseWidth(val[2]/1000.0, FREQUENCY));&#xA;                    esc3.setPWM(0, calculatePulseWidth(val[3]/1000.0, FREQUENCY));&#xA;                } else &#xA;                {&#xA;                    esc0.setPWM(0, calculatePulseWidth(800/1000.0, FREQUENCY));&#xA;                    esc1.setPWM(0, calculatePulseWidth(800/1000.0, FREQUENCY));&#xA;                    esc2.setPWM(0, calculatePulseWidth(800/1000.0, FREQUENCY));&#xA;                    esc3.setPWM(0, calculatePulseWidth(800/1000.0, FREQUENCY));&#xA;                }&#xA;            } catch (IOException e) {&#xA;                e.printStackTrace();&#xA;            }&#xA;&#xA;        }&#xA;    }&#xA;&#xA;    private static void add(double value, int i)&#xA;    {&#xA;        if(val[i]+value &amp;gt; MIN &amp;amp;&amp;amp; val[i]+value &amp;lt; MAX)&#xA;        {&#xA;            val[i] += value;&#xA;        }else if(val[i]+value &amp;lt; MIN)&#xA;        {&#xA;            //System.out.println(&quot;low&quot;);&#xA;            val[i] = MIN;&#xA;        }else if(val[i]+value &amp;gt; MAX)&#xA;        {&#xA;            //System.out.println(&quot;low&quot;);&#xA;            val[i] = MAX;&#xA;        }&#xA;    }&#xA;&#xA;    static void addData(double value)&#xA;    {&#xA;        data += &quot; &quot;+value;&#xA;    }&#xA;&#xA;    private static int calculatePulseWidth(double millis, int frequency) {&#xA;        return (int) (Math.round(4096 * millis * frequency/1000));&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Sensor.java:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;package com.zachary.quadserver;&#xA;&#xA;import com.pi4j.io.gpio.GpioController;&#xA;import com.pi4j.io.gpio.GpioFactory;&#xA;import com.pi4j.io.gpio.GpioPinDigitalOutput;&#xA;import com.pi4j.io.gpio.PinState;&#xA;import com.pi4j.io.gpio.RaspiPin;&#xA;import com.pi4j.io.i2c.*;&#xA;&#xA;import java.net.*;&#xA;import java.io.*;&#xA;&#xA;public class Sensor {&#xA;    static I2CDevice sensor;&#xA;    static I2CBus bus;&#xA;    static byte[] accelData, gyroData;&#xA;    static long accelCalib[] = {0, 0, 0};&#xA;    static long gyroCalib[] = {0, 0, 0};&#xA;&#xA;    static double gyroX;&#xA;    static double gyroY;&#xA;    static double gyroZ;&#xA;&#xA;    static double smoothedGyroX;&#xA;    static double smoothedGyroY;&#xA;    static double smoothedGyroZ;&#xA;&#xA;    static double accelX;&#xA;    static double accelY;&#xA;    static double accelZ;&#xA;&#xA;    static double accelAngleX;&#xA;    static double accelAngleY;&#xA;&#xA;    static double smoothedAccelAngleX;&#xA;    static double smoothedAccelAngleY;&#xA;&#xA;    static double angleX;&#xA;    static double angleY;&#xA;    static double angleZ;&#xA;&#xA;    static boolean init = true;&#xA;&#xA;    static double accelSmoothing = 1;&#xA;    static double gyroSmoothing = 1;&#xA;&#xA;    public Sensor() {&#xA;        try {&#xA;            bus = I2CFactory.getInstance(I2CBus.BUS_1);&#xA;&#xA;            sensor = bus.getDevice(0x68);&#xA;&#xA;            sensor.write(0x6B, (byte) 0x0);&#xA;            sensor.write(0x6C, (byte) 0x0);&#xA;            System.out.println(&quot;Calibrating...&quot;);&#xA;&#xA;            calibrate();&#xA;&#xA;            Thread sensors = new Thread(){&#xA;                    public void run(){&#xA;                        try {&#xA;                            readSensors();&#xA;                        } catch (IOException e) {&#xA;                        e.printStackTrace();&#xA;                    }&#xA;                    }&#xA;            };&#xA;            sensors.start();&#xA;        } catch (IOException e) {&#xA;            System.out.println(e.getMessage());&#xA;        }&#xA;    }&#xA;&#xA;    private static void readSensors() throws IOException {&#xA;        long time = System.currentTimeMillis();&#xA;        long sendTime = System.currentTimeMillis();&#xA;&#xA;        while (true) {&#xA;            accelData = new byte[6];&#xA;            gyroData = new byte[6];&#xA;&#xA;            int r = sensor.read(0x3B, accelData, 0, 6);&#xA;&#xA;            accelX = (((accelData[0] &amp;lt;&amp;lt; 8)+accelData[1]-accelCalib[0])/16384.0)*9.8;&#xA;            accelY = (((accelData[2] &amp;lt;&amp;lt; 8)+accelData[3]-accelCalib[1])/16384.0)*9.8;&#xA;            accelZ = ((((accelData[4] &amp;lt;&amp;lt; 8)+accelData[5]-accelCalib[2])/16384.0)*9.8)+9.8;&#xA;            accelZ = 9.8-Math.abs(accelZ-9.8);&#xA;&#xA;&#xA;            double hypotX = Math.sqrt(Math.pow(accelX, 2)+Math.pow(accelZ, 2));&#xA;            double hypotY = Math.sqrt(Math.pow(accelY, 2)+Math.pow(accelZ, 2));&#xA;&#xA;            accelAngleX = Math.toDegrees(Math.asin(accelY/hypotY));&#xA;            accelAngleY = Math.toDegrees(Math.asin(accelX/hypotX));&#xA;&#xA;            //System.out.println(accelAngleX[0]+&quot; &quot;+accelAngleX[1]+&quot; &quot;+accelAngleX[2]+&quot; &quot;+accelAngleX[3]);&#xA;&#xA;            //System.out.println(&quot;accelX: &quot; + accelX+&quot; accelY: &quot; + accelY+&quot; accelZ: &quot; + accelZ);&#xA;&#xA;            r = sensor.read(0x43, gyroData, 0, 6);&#xA;&#xA;            gyroX = (((gyroData[0] &amp;lt;&amp;lt; 8)+gyroData[1]-gyroCalib[0])/131.0);&#xA;            gyroY = (((gyroData[2] &amp;lt;&amp;lt; 8)+gyroData[3]-gyroCalib[1])/131.0);&#xA;            gyroZ = (((gyroData[4] &amp;lt;&amp;lt; 8)+gyroData[5]-gyroCalib[2])/131.0);&#xA;&#xA;            if(init)&#xA;            {&#xA;                smoothedAccelAngleX = accelAngleX;&#xA;                smoothedAccelAngleY = accelAngleY;&#xA;&#xA;                smoothedGyroX = gyroX;&#xA;                smoothedGyroY = gyroY;&#xA;                smoothedGyroZ = gyroZ;&#xA;&#xA;                init = false;&#xA;            } else {&#xA;                smoothedAccelAngleX = smoothedAccelAngleX+(accelSmoothing*(accelAngleX-smoothedAccelAngleX));&#xA;                smoothedAccelAngleY = smoothedAccelAngleY+(accelSmoothing*(accelAngleY-smoothedAccelAngleY));&#xA;&#xA;                smoothedGyroX = smoothedGyroX+(gyroSmoothing*(gyroX-smoothedGyroX));&#xA;                smoothedGyroY = smoothedGyroY+(gyroSmoothing*(gyroY-smoothedGyroY));&#xA;                smoothedGyroZ = smoothedGyroZ+(gyroSmoothing*(gyroZ-smoothedGyroZ));&#xA;&#xA;                /*smoothedAccelAngleX = accelAngleX;&#xA;                smoothedAccelAngleY = accelAngleY;&#xA;&#xA;                smoothedGyroX = gyroX;&#xA;                smoothedGyroY = gyroY;&#xA;                smoothedGyroY = gyroY;*/&#xA;&#xA;&#xA;                /*smoothedAccelAngleX += (accelAngleX-smoothedAccelAngleX)/accelSmoothing;&#xA;                smoothedAccelAngleY += (accelAngleY-smoothedAccelAngleY)/accelSmoothing;&#xA;&#xA;                smoothedGyroX += (gyroX-smoothedGyroX)/gyroSmoothing;&#xA;                smoothedGyroY += (gyroY-smoothedGyroY)/gyroSmoothing;&#xA;                smoothedGyroZ += (gyroZ-smoothedGyroZ)/gyroSmoothing;*/&#xA;&#xA;            }&#xA;&#xA;            angleX += smoothedGyroX*(System.currentTimeMillis()-time)/1000;&#xA;            angleY += smoothedGyroY*(System.currentTimeMillis()-time)/1000;&#xA;            angleZ += smoothedGyroZ;&#xA;&#xA;            angleX = 0.95*angleX + 0.05*smoothedAccelAngleX;&#xA;            angleY = 0.95*angleY + 0.05*smoothedAccelAngleY;&#xA;&#xA;            time = System.currentTimeMillis();&#xA;&#xA;            //System.out.println((int)angleX+&quot;  &quot;+(int)angleY);&#xA;            //System.out.println((int)accelAngleX+&quot;, &quot;+(int)accelAngleY);&#xA;        }&#xA;    }&#xA;&#xA;    public static void calibrate() throws IOException {&#xA;        int i;&#xA;        for(i = 0; i &amp;lt; 100; i++)&#xA;        {&#xA;            accelData = new byte[6];&#xA;            gyroData = new byte[6];&#xA;            int r = sensor.read(0x3B, accelData, 0, 6);&#xA;            accelCalib[0] += (accelData[0] &amp;lt;&amp;lt; 8)+accelData[1];&#xA;            accelCalib[1] += (accelData[2] &amp;lt;&amp;lt; 8)+accelData[3];&#xA;            accelCalib[2] += (accelData[4] &amp;lt;&amp;lt; 8)+accelData[5];&#xA;&#xA;            r = sensor.read(0x43, gyroData, 0, 6);&#xA;            gyroCalib[0] += (gyroData[0] &amp;lt;&amp;lt; 8)+gyroData[1];&#xA;            gyroCalib[1] += (gyroData[2] &amp;lt;&amp;lt; 8)+gyroData[3];&#xA;            gyroCalib[2] += (gyroData[4] &amp;lt;&amp;lt; 8)+gyroData[5];&#xA;            try {&#xA;                Thread.sleep(1);&#xA;            } catch (Exception e){&#xA;                e.printStackTrace();&#xA;            }&#xA;        }&#xA;        gyroCalib[0] /= i;&#xA;        gyroCalib[1] /= i;&#xA;        gyroCalib[2] /= i;&#xA;&#xA;        accelCalib[0] /= i;&#xA;        accelCalib[1] /= i;&#xA;        accelCalib[2] /= i;&#xA;&#xA;        System.out.println(gyroCalib[0]+&quot;, &quot;+gyroCalib[1]+&quot;, &quot;+gyroCalib[2]);&#xA;        System.out.println(accelCalib[0]+&quot;, &quot;+accelCalib[1]+&quot;, &quot;+accelCalib[2]);&#xA;    }&#xA;&#xA;    public double readAngle(int axis)&#xA;    {&#xA;        switch (axis)&#xA;        {&#xA;            case 0:&#xA;                return angleX;&#xA;            case 1:&#xA;                return angleY;&#xA;            case 2:&#xA;                return angleZ;&#xA;        }&#xA;&#xA;        return 0;&#xA;    }&#xA;&#xA;    public double readGyro(int axis)&#xA;    {&#xA;        switch (axis)&#xA;        {&#xA;            case 0:&#xA;                return smoothedGyroX;&#xA;            case 1:&#xA;                return smoothedGyroY;&#xA;            case 2:&#xA;                return smoothedGyroZ;&#xA;        }&#xA;&#xA;        return 0;&#xA;    }&#xA;&#xA;    public double readAccel(int axis)&#xA;    {&#xA;        switch (axis)&#xA;        {&#xA;            case 0:&#xA;                return accelX;&#xA;            case 1:&#xA;                return accelY;&#xA;            case 2:&#xA;                return accelZ;&#xA;        }&#xA;&#xA;        return 0;&#xA;    }&#xA;&#xA;    public double readAccelAngle(int axis)&#xA;    {&#xA;        switch (axis)&#xA;        {&#xA;            case 0:&#xA;                return smoothedAccelAngleX;&#xA;            case 1:&#xA;                return smoothedAccelAngleY;&#xA;&#xA;        }&#xA;&#xA;        return 0;&#xA;    }&#xA;&#xA;    public void setSmoothing(double gyro, double accel)&#xA;    {&#xA;        gyroSmoothing = gyro;&#xA;        accelSmoothing = accel;&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="9220" LastActivityDate="2018-01-15T16:22:27.370" Title="Raspberry pi quadcopter drifts like crazy" Tags="&lt;pid&gt;&lt;raspberry-pi&gt;&lt;quadcopter&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="8040" PostTypeId="2" ParentId="8038" CreationDate="2015-09-09T19:44:24.897" Score="2" Body="&lt;h2&gt;From your sensor code,&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I'm not sure I understand what your &lt;code&gt;gyroSmoothing&lt;/code&gt; is doing. For one, it's set =1, so it's not doing anything at all currently, but I don't know what it would do at other values either. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further, in looking at the section featuring &lt;code&gt;gyroSmoothing&lt;/code&gt;, you have:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;smoothedGyroN = gyroN;&#xA;smoothedGyroN = smoothedGyroN + (gyroN - smoothedGyroN)/gyroSmoothing;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But, you just set &lt;code&gt;smoothedGyroN = gyroN;&lt;/code&gt;, so you have:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;smoothedGyroN = gyroN;&#xA;smoothedGyroN = smoothedGyroN + &amp;lt;zero&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So, I don't know what the point of writing all of that is. It looks &lt;em&gt;almost&lt;/em&gt; like you're trying to write a &lt;a href=&quot;http://my.execpc.com/~steidl/robotics/first_order_lag_filter.html&quot; rel=&quot;nofollow&quot;&gt;lag filter&lt;/a&gt;, but that's not quite the right form for a lag filter either. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, later you integrate gyro speeds to get angles, except you fail to multiply the z-axis gyro by the sample time:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;angleX += smoothedGyroX*(System.currentTimeMillis()-time)/1000;&#xA;angleY += smoothedGyroY*(System.currentTimeMillis()-time)/1000;&#xA;angleZ += smoothedGyroZ;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Just after that you actually &lt;em&gt;do&lt;/em&gt; implement a lag filter on the X- and Y-axis angles. &lt;/p&gt;&#xA;&#xA;&lt;h2&gt;From your control code,&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;You &lt;em&gt;should&lt;/em&gt; calculate errors as &lt;code&gt;desired - actual&lt;/code&gt;, but instead you have:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;errorX = sensor.readGyro(0)-setpointX;&#xA;errorY = -sensor.readGyro(1)-setpointY;&#xA;errorZ = sensor.readGyro(2)-setpointZ;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So the sign is flipped on your errorX and errorZ - I'm assuming maybe this is why you have &lt;code&gt;-sensor.readGyro(1)&lt;/code&gt; for your errorY? Just flipping signs until it works? Not harassing - I've done it, too. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just after you calculate integral error, you have a complimentary filter between integral error and. . . angular position?? I have no idea why you would do this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;IX = 0.98*IX+0.02*accelAngleX;&#xA;IY = 0.98*IY+0.02*accelAngleY;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The integral error term should be just the integral error term - don't add anything, don't smooth it, nothing. If you find it's jumping all over the place (which, if your system has mass, it shouldn't jump around), but if you find it does jump, then you should filter your sensor feedback. &lt;a href=&quot;https://www.youtube.com/watch?v=kHmvkRoEowc&quot; rel=&quot;nofollow&quot;&gt;Leave the error terms alone&lt;/a&gt;!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, FYI, you have disabled I/D gains on the Z-axis. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't like that you've got an &lt;code&gt;if&lt;/code&gt; statement around your PID controller - I don't know why you would want this, it seems like this would intermittently provide a control signal. I would suggest either adding a &lt;code&gt;delay&lt;/code&gt; at the end of the PID calculations if you want it to run slower (not sure why) or just let it run all the time. You're calculating sample time correctly so I really have no idea what this is for. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you set the motor speed outputs, it looks like you might be adding trim terms incorrectly. I'm not familiar with adding trim terms like this - if I were going to add trim I would do it by adding the trim term to the angle setpoint, not to the motor speed command. That said, you have:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;add(-outputX-outputY-outputZ-trimX+trimY, 0);       //clockwise&#xA;add(-outputX+outputY+outputZ-trimX-trimY, 1);   //counterClockwise&#xA;add( outputX+outputY-outputZ+trimX-trimY, 2);    //clockwise&#xA;add( outputX-outputY+outputZ+trimX+trimY, 3);        //counterclockwise&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In all cases, the sign of &lt;code&gt;trimX&lt;/code&gt; matches &lt;code&gt;outputX&lt;/code&gt;, but &lt;code&gt;trimY&lt;/code&gt; is always the opposite of &lt;code&gt;outputY&lt;/code&gt;. Also, this is probably just my ignorance of Java, but I don't see a variable assignment for your &lt;code&gt;add&lt;/code&gt; statements. You reference &lt;code&gt;var[N]&lt;/code&gt; just below, but I don't see where the add terms get assigned to &lt;code&gt;var&lt;/code&gt;. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-09-09T19:44:24.897" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8043" PostTypeId="1" AcceptedAnswerId="8064" CreationDate="2015-09-10T15:59:27.587" Score="7" ViewCount="2275" Body="&lt;p&gt;I currently have a description of my 22 joint robot in &quot;classic&quot; DH parameters.  However, I would like the &quot;modified&quot; parameters.  Is this conversion as simple as shifting the $a$ and $alpha$ columns of the parameter table by one row?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can imagine, 22 joints is a lot, so I'd rather not re-derive all the parameters if I don't have to.  (Actually, the classic parameters are pulled out of OpenRave with the command: &lt;code&gt;planningutils.GetDHParameters(robot)&lt;/code&gt;.  &lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-09-15T21:11:42.203" Title="How to convert between classic and modified DH parameters?" Tags="&lt;kinematics&gt;&lt;dh-parameters&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8044" PostTypeId="1" CreationDate="2015-09-10T19:03:52.440" Score="5" ViewCount="211" Body="&lt;p&gt;I am taking part in a robotics competition, where the challenge is to create a pair of robots which successfully navigate a series of obstacles. However, the rules state that of the two robots, only one must have a driving actuator. The other must somehow be moved by the other robot, WITHOUT PHYSICAL CONTACT. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I could think of either having sails on the non-driving robot, and moving it with fans on the driving one OR electromangnets on the driving one and permanent magnets with the opposite polarity on the non-driving one. However the problem with both is that efficiency falls off drastically with distance. Thus, I am looking for possible ways to overcome this problem. Thanks :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, the driving robot &lt;strong&gt;has a cable power supply&lt;/strong&gt;, while the non-driving one may &lt;strong&gt;only have batteries&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Rulebook: &lt;a href=&quot;http://ultimatist.com/video/Rulebook2016_Final_website_1_Sep_15.zip&quot; rel=&quot;noreferrer&quot;&gt;http://ultimatist.com/video/Rulebook2016_Final_website_1_Sep_15.zip&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10569" LastEditorUserId="10569" LastEditDate="2015-09-11T13:34:03.147" LastActivityDate="2015-09-16T12:14:40.677" Title="What are the best ways to transmit force through air efficiently?" Tags="&lt;force&gt;" AnswerCount="2" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8045" PostTypeId="1" AcceptedAnswerId="8046" CreationDate="2015-09-10T19:08:13.490" Score="0" ViewCount="99" Body="&lt;p&gt;I am the moment learning about rotation matrices.  It seems confusing how it could be that  $R_A^C=R_A^BR_B^C$ is the rotation from coordinate frame &lt;s&gt;A to C&lt;/s&gt; C to A, and A,B,C are different coordinate frames.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$R_A^C$ must for a 2x2 matrix be defined as &#xA;$$&#xA;R_A^C=&#xA;\left(&#xA;\begin{matrix}&#xA;xa⋅xb  &amp;amp;  xa⋅xb \\&#xA;ya⋅yb &amp;amp;  ya⋅yb&#xA;\end{matrix}&#xA;\right)&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$x_a, y_a and x_b,y_b$ are coordinates for points given in different coordinate frame.&#xA;I don't see how, using this standard, the multiplication stated above will give the same matrix as for $R_A^C$. Some form for clarification would be helpful here.&lt;/p&gt;&#xA;" OwnerUserId="9620" LastEditorUserId="9620" LastEditDate="2015-09-11T06:39:31.010" LastActivityDate="2015-09-11T06:39:31.010" Title="composition of rotation matrices" Tags="&lt;frame&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8046" PostTypeId="2" ParentId="8045" CreationDate="2015-09-10T19:45:58.353" Score="1" Body="&lt;p&gt;I'm not sure what you mean by:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;$R_A^C$ must for a 2x2 matrix be defined as $[xa \cdot xb , xa \cdot xb ; ya \cdot yb , ya \cdot yb]$&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;because I don't know where you are getting the names or formulas from. If you have:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;R_A^B = \left[ \begin{array}{ccc}&#xA;a &amp;amp; b \\&#xA;c &amp;amp; d \end{array} \right] \\&#xA;R_B^C = \left[ \begin{array}{ccc}&#xA;e &amp;amp; f \\&#xA;g &amp;amp; h \end{array} \right] \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then in multiplying the two you get:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;R_A^C = R_A^B R_B^C = \left[ \begin{array}{ccc}&#xA;(ae + bg) &amp;amp; (af + bh) \\&#xA;(ce + dg) &amp;amp; (cf + dh) \end{array} \right] \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A 2x2 rotation matrix has the form:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;R_A^B = R(\alpha) = \left[ \begin{array}{ccc}&#xA;\cos{\alpha} &amp;amp; -\sin{\alpha} \\&#xA;\sin{\alpha} &amp;amp; \cos{\alpha} \end{array} \right] \\&#xA;R_B^C = R(\beta) = \left[ \begin{array}{ccc}&#xA;\cos{\beta} &amp;amp; -\sin{\beta} \\&#xA;\sin{\beta} &amp;amp; \cos{\beta} \end{array} \right] \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you go through two successive rotations:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;R_A^C = R(\alpha + \beta) = R(\alpha)R(\beta) = R_A^B R_B^C \\&#xA;R_A^C = \left[ \begin{array}{ccc}&#xA;(\cos{\alpha} \cos{\beta} + (-\sin{\alpha} \sin{\beta})) &amp;amp; ((-\cos{\alpha} \sin{\beta}) + (-\sin{\alpha} \cos{\beta})) \\&#xA;(\sin{\alpha} \cos{\beta} + \cos{\alpha} \sin{\beta}) &amp;amp; ((-\sin{\alpha} \sin{\beta}) + \cos{\alpha} \cos{\beta}) \end{array} \right] \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using the angle sum identities:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\sin{(\alpha + \beta)} = \sin{\alpha}\cos{\beta} + \cos{\alpha}\sin{\beta} \\&#xA;\cos{(\alpha + \beta)} = \cos{\alpha}\cos{\beta} - \sin{\alpha}\sin{\beta} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can simplify the result of the matrix multiplication:&#xA;$$&#xA;R_A^C = \left[ \begin{array}{ccc}&#xA;(\cos{\alpha} \cos{\beta} + (-\sin{\alpha} \sin{\beta})) &amp;amp; ((-\cos{\alpha} \sin{\beta}) + (-\sin{\alpha} \cos{\beta})) \\&#xA;(\sin{\alpha} \cos{\beta} + \cos{\alpha} \sin{\beta}) &amp;amp; ((-\sin{\alpha} \sin{\beta}) + \cos{\alpha} \cos{\beta}) \end{array} \right] \\&#xA;$$&#xA;$$&#xA;R_A^C = \left[ \begin{array}{ccc}&#xA;(\cos{\alpha} \cos{\beta} - \sin{\alpha} \sin{\beta}) &amp;amp; -(\cos{\alpha} \sin{\beta} + \sin{\alpha} \cos{\beta}) \\&#xA;(\sin{\alpha} \cos{\beta} + \cos{\alpha} \sin{\beta}) &amp;amp; (-\sin{\alpha} \sin{\beta} + \cos{\alpha} \cos{\beta}) \end{array} \right] \\&#xA;$$&#xA;$$&#xA;R_A^C = \left[ \begin{array}{ccc}&#xA;\cos{(\alpha + \beta)} &amp;amp; -\sin{(\alpha + \beta)} \\&#xA;\sin{(\alpha + \beta)} &amp;amp; \cos{(\alpha + \beta)} \end{array} \right] \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And that's how you get $R_A^C = R_A^B R_B^C$. It works out because the matrix multiplication results in angle additions. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-09-10T19:45:58.353" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="8047" PostTypeId="1" CreationDate="2015-09-11T13:51:37.217" Score="0" ViewCount="720" Body="&lt;pre&gt;&lt;code&gt;  // MPU-6050 Short Example Sketch&#xA;// By Arduino User JohnChi&#xA;// August 17, 2014&#xA;// Public Domain&#xA;#include&amp;lt;Wire.h&amp;gt;&#xA;#include &amp;lt;Servo.h&amp;gt;&#xA;Servo firstESC, secondESC,thirdESC,fourthESC; //Create as much as Servoobject you want. You &#xA;const int MPU=0x68;  // I2C address of the MPU-6050&#xA;int speed1=2000,speed2=0,speed3=0,speed4;&#xA;int16_t AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ;&#xA;float integ=0,der=0,pidx=0,kp = .5,ki=0.00005 ,kd=.01,prerror,dt=100;&#xA;void setup(){&#xA;  firstESC.attach(3);    // attached to pin 9 I just do this with 1 Servo &#xA;  secondESC.attach(5);    // attached to pin 9 I just do this with 1 Servo &#xA;  thirdESC.attach(6);    // attached to pin 9 I just do this with 1 Servo &#xA;  fourthESC.attach(9);    // attached to pin 9 I just do this with 1 Servo &#xA;  Wire.begin();&#xA;  Wire.beginTransmission(MPU);&#xA;  Wire.write(0x6B);  // PWR_MGMT_1 register&#xA;  Wire.write(0);     // set to zero (wakes up the MPU-6050)&#xA;  Wire.endTransmission(true);&#xA;  Wire.beginTransmission(MPU);&#xA;  Wire.write(0x1c);  // PWR_MGMT_1 register&#xA;  Wire.write(0&amp;lt;&amp;lt;3);     // set to zero (wakes up the MPU-6050)&#xA;  Wire.endTransmission(true);&#xA;  Serial.begin(9600);&#xA;  firstESC.writeMicroseconds(0);&#xA;  secondESC.writeMicroseconds(0);&#xA;  thirdESC.writeMicroseconds(0);&#xA;  fourthESC.writeMicroseconds(0);&#xA;  firstESC.writeMicroseconds(2000);&#xA;  secondESC.writeMicroseconds(2000);&#xA;  thirdESC.writeMicroseconds(2000);&#xA;  fourthESC.writeMicroseconds(2000);&#xA;  delay(2000);&#xA;  firstESC.writeMicroseconds(700);&#xA;  secondESC.writeMicroseconds(700);&#xA;  thirdESC.writeMicroseconds(700);&#xA;  fourthESC.writeMicroseconds(700);&#xA;  delay(2000);&#xA;}&#xA;void loop(){&#xA;  Wire.beginTransmission(MPU);&#xA;  Wire.write(0x3B);  // starting with register 0x3B (ACCEL_XOUT_H)&#xA;  Wire.endTransmission(false);&#xA;  Wire.requestFrom(MPU,4,true);  // request a total of 14 registers&#xA;  AcX=Wire.read()&amp;lt;&amp;lt;8|Wire.read();  // 0x3B (ACCEL_XOUT_H) &amp;amp; 0x3C (ACCEL_XOUT_L)    &#xA;  AcY=Wire.read()&amp;lt;&amp;lt;8|Wire.read();  // 0x3D (ACCEL_YOUT_H) &amp;amp; 0x3E (ACCEL_YOUT_L) &#xA;  firstESC.writeMicroseconds(0);&#xA;  secondESC.writeMicroseconds(700-(pidx/10));&#xA;  thirdESC.writeMicroseconds(700+(pidx/10));&#xA;  fourthESC.writeMicroseconds(0);&#xA;  PID();&#xA;  //if(Serial.available()) &#xA;    //speed1 = Serial.parseInt(); &#xA;  //Serial.print(&amp;quot;AcX = &amp;quot;); Serial.print(AcX);&#xA;  //Serial.print(&amp;quot; | AcY = &amp;quot;); Serial.print(AcY); &#xA;  //Serial.println();&#xA;  //delay(333);&#xA;}&#xA;&#xA;void PIdD()&#xA;{&#xA;  float error;&#xA;  error = (atan2(AcY,AcZ)*180/3.14);&#xA;  now = millis(); &#xA;  dt = now-ptime;&#xA;  if(error&amp;gt;0)error=180-error;&#xA;  else error = -(180+error); &#xA;  error=0-error;&#xA;  integ = integ+(error*dt) ;&#xA;  der = (error - prerror)/dt ;&#xA;  prerror=error;&#xA;  pidx = (kp*error);&#xA;  pidx+=(ki*integ);&#xA;  pidx+=(kd*der);&#xA;  if(pidx&amp;gt;1000)pidx=1000; &#xA;  if(pidx&amp;lt;-1000)pidx=-1000; &#xA;  ptime = now; &#xA;  }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The above is my program for my quadcopter, but now I have to tune the PID values, that is kp, ki, and kd. My accelome is at 2g. Please point to me what is wrong with the program? Is the error signal not appropriate? Please also give me or help me choose correct PID tuning. My limitation is I always have to connect my Arduino to pc and change kp ki or kd values, that is I have no remote control available currently.&lt;/p&gt;&#xA;" OwnerUserId="10580" LastEditorUserId="19515" LastEditDate="2020-08-08T17:48:28.060" LastActivityDate="2020-08-08T17:48:28.060" Title="What kp, ki, and kd should I keep?" Tags="&lt;quadcopter&gt;&lt;pid&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="1" ClosedDate="2015-09-26T01:37:22.683" ContentLicense="CC BY-SA 4.0" />
  <row Id="8048" PostTypeId="2" ParentId="8047" CreationDate="2015-09-11T15:08:35.320" Score="1" Body="&lt;p&gt;Some things that are wrong in your program are:&#xA;&lt;br&gt;&lt;br&gt;&#xA;You do not calculate your angular displacement properly, leading to a wrong error for the PID controller &lt;br&gt;&#xA;You are only using one PID controller, for stabilization you need at least two &lt;br&gt;&#xA;You just power two motors, why not all four?&#xA;&lt;br&gt;&#xA;You do not use a sampletime (the delay is commented). Your PID is likely to fail, regardless of the parameters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;br&gt; &lt;br&gt;&#xA;&lt;strong&gt;EDIT:&lt;/strong&gt; &lt;br&gt;&#xA;you are trying to implement a digital PID controller. These type of controllers work best, when there is a specific time between the calculation of the controller. This time is usually called sampletime. The better you can keep this time constant the better the controller is able to perform. Usually this sampletime has to be short enought, that the controller is able to &quot;see&quot; distrubances. For your example the controller must be fast enought to see if the quadcopter has been tilted by the wind or similar things.&lt;br&gt;&lt;br&gt; &#xA;So basically for quadcopters you choose a control frequency of 50 Hz. For two reasons: First 20ms is fast enought to see disturbances and react on them. And the other point (a more technical one) ESC cannot be controlled faster then 50Hz, because they need a 20ms control signal (You create them with ESCxxx.WriteMicrosenconds())&#xA;&lt;br&gt; &lt;br&gt;&#xA;The mistake in your implementation is that you do not have this timing factor(it is commented) so the controller is calculating new setpoints as fast as possible. As far as I know Arduinos it should be around 1-10kHz. This frequency is too high for your hardware and it is hard to tell if the timeing stays constant (at least I cannot). The I2C do not have to be constant in time. So your sampling frequency can change from iteration to iteration. This is usually the dead of a PID implementation. We (the team I'm working in in my company) invest a lot of work to keep samplingtime in controller implementation constant. You totally ignored this. &lt;br&gt; &lt;br&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The parameters do not have to be multiplied or divided by any value, because they are not tuned at all. At the end: If you get your parameters tuned and you want to change the samplingtime, then you have to adjust those values. But you do not need to do this, in the untuned case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;br&gt;&lt;br&gt;&#xA;&lt;strong&gt;EDIT2:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Without using a sampletime your system can be &quot;non-controllable&quot; at all. This depends on lot of different factors like used hardware and quality of the electric connections and the ICs. &lt;br&gt;&#xA;Use the sampletime of 20ms and tune your PID Parameter, those values depend on your hardware setup. There are no: Take these values and it's fine.&#xA;You have to tune them and you there are tons of different methods. I recommend you to use an experimental iterative method (it's the best one, if you got no mathematical model or deeper controls knowledge). So guess some parameters and see how the system behaves. If is doing more or less nothing, then increase P. If it seem not controlled and bouncing up and down, then decrease the I. You will find lot of different (and well written) instructions online, which tell you how to tune PID controllers.  &lt;/p&gt;&#xA;" OwnerUserId="6911" LastEditorUserId="6911" LastEditDate="2015-09-12T13:24:10.560" LastActivityDate="2015-09-12T13:24:10.560" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="8050" PostTypeId="1" AcceptedAnswerId="8061" CreationDate="2015-09-12T16:59:39.940" Score="0" ViewCount="653" Body="&lt;p&gt;I don's seem to be able to get any battery power from Create 2. I spliced the original cable it came with, and tried to use the power from red/purple(+) and yellow/orange(-) to power a Raspberry Pi2, with no luck. While the serial-to-USB cable still works, and I am able to command the robot via Python, there seems to be no power coming on the red/purple cables. I tried with a multimeter with no luck, even as I moved the device from passive/safe/full modes. There is no power even when Create 2 is charging/docked.&lt;/p&gt;&#xA;" OwnerUserId="10590" LastActivityDate="2018-07-19T12:51:14.290" Title="iRobot Create 2 serial battery power" Tags="&lt;raspberry-pi&gt;&lt;irobot-create&gt;&lt;serial&gt;&lt;roomba&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8051" PostTypeId="1" CreationDate="2015-09-12T20:26:43.460" Score="3" ViewCount="108" Body="&lt;p&gt;What is the maximum rotational velocity of miniature ball-screw (diameters up to 12mm) for approximately 1000 thrust cycles, and which type/brand would that be, if the speed is limited by the ball return mechanism? The fastest I could find was 4000 rpm at 3000 N thrust, but this was from a datasheet with a big safety margin (millions of cycles).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm looking for either experience and data, or a general method/formula that can be used to find the maximum velocity (and load) as function of cycles or the other way round (similar to those of ball bearings). Suggestions and knowledge about faster types and brands of ballscrews than the ones I have been able to find is welcome as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Some more background information:&lt;/em&gt;&#xA;Ball screws are very interesting transmissions for electrically actuated legged robotics, since they provide a high-geared rotary-to-linear transmission that is accurate, precise, energy efficient and possibly backlash-free. However, the big downside is their limited rotational speed. The maximum rotational velocity is limited by resonance and the ball return mechanism. The former limit is easy to calculate (eigenfrequency calculation), and mostly not problematic for small spindles. However, the latter is a bigger problem. The balls in a ball screw roll through the threaded spindle and have to be recirculated to the other end of the nut. The recirculation limits the rotational velocity of the ballscrews. The corresponding maximum rotational velocities are not calculate-able (for as far as I know) and are provided by manufacturers in catalogues, either directly in rpm or via a so-called $D_n$-value, where the rotational velocity in rpm is $n=D_n/d$ where d is the diameter of the ball screw. But even then, the maximum rotational velocity of ball screws is capped at 4000 rpm or lower according to datasheets (depending on brand and ball return mechanism). The highest permissible rotational velocities I found were those of Steinmeyer ballscrews, at 4000 rpm, using an end-cap-return mechanism. Note that for electrical motors (up to 200W) ideal (maximum power) velocities are higher than 4000 rpm, and even more than twice as high for many brushless motors. It appears however that ball screws can run at higher speeds than what they are specified for in reality, because the specifications hold for many millions of cycles. I can only find a single &lt;a href=&quot;http://ballscrew-tech.com/2012/08/25/ball-screw-speed-ratings/&quot; rel=&quot;nofollow&quot;&gt;unofficial source&lt;/a&gt; where someone claims to have run their ball-screws up to 6000 rpm, and in missiles (one-time-use) up to 7500 rpm. I'm interested in a theory or more experimental data that backs this up.&lt;/p&gt;&#xA;" OwnerUserId="10547" LastEditorUserId="10547" LastEditDate="2015-09-13T09:13:31.870" LastActivityDate="2015-09-13T09:13:31.870" Title="Maximum ball screw speeds" Tags="&lt;driver&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8052" PostTypeId="2" ParentId="7895" CreationDate="2015-09-12T21:54:26.143" Score="2" Body="&lt;p&gt;Steve is right: orange and green wires are swapped in the official Create cable. If you swap the two wires the robot will wake up as soon as BRC is brought to zero. &lt;/p&gt;&#xA;" OwnerUserId="10592" LastActivityDate="2015-09-12T21:54:26.143" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8053" PostTypeId="1" AcceptedAnswerId="8055" CreationDate="2015-09-13T15:23:01.840" Score="3" ViewCount="6253" Body="&lt;p&gt;I am trying to understand how to use, what it requires compute the homogenous transformation matrix. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know 2 points from 2 different frames, and 2 origins from their corresponding frames. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I how transformation matrix looks like, but whats confusing me is how i should compute the (3x1) position vector which the matrix needs.  As i understand is, this vector a origin of the old frame compared to the new frame.  But how to calculate it, the obvious answer (I think) would be to subtract both ($O_{new} - O_{old}$ ), but it does not feel right. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know its a simple question but my head cannot get around this issue, and how can i prove it the right way, with the information i know?&lt;/p&gt;&#xA;" OwnerUserId="9620" LastEditorUserId="9620" LastEditDate="2015-09-13T15:38:01.070" LastActivityDate="2015-09-13T21:17:39.297" Title="How to use the Homogeneous transformation matrix?" Tags="&lt;kinematics&gt;&lt;frame&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8054" PostTypeId="1" CreationDate="2015-09-13T17:53:56.010" Score="1" ViewCount="241" Body="&lt;p&gt;I'm currently undertaking a project to build remote controlled shades from scratch. I currently have every piece figured out except I don't know know much about the motors involved in something like this. I am looking for suggestions on what type of motor to search for. I imagine I need a type that can go forward and back as well as stop when the shade is fully retracted. I don't know what to search for though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help is much appreciated. &lt;/p&gt;&#xA;" OwnerUserId="10598" LastActivityDate="2015-09-16T20:14:11.090" Title="Motor for DIY Remote controlled shades" Tags="&lt;motor&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="8055" PostTypeId="2" ParentId="8053" CreationDate="2015-09-13T21:17:39.297" Score="2" Body="&lt;p&gt;A homogeneous transformation matrix $H$ is often used as a matrix to perform transformations from one frame to another frame, &lt;em&gt;expressed in the former frame&lt;/em&gt;. The translation vector thus includes [x,y(,z)] coordinates of the latter frame expressed in the former. Perhaps that this already answers your question, but below is a more elaborate explanation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The transformation matrix contains information about both rotation and translation and belongs to the special Eucledian group $SE(n)$ in $n$-D. It consists of a rotation matrix $R$ and translation vector $r$. If we permit no shear, the rotation matrix contains only information about the rotation and belongs to the orthonormal group $SO(n)$. We have:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$H=\begin{bmatrix} R &amp;amp; r \\ \bar{0} &amp;amp; 1 \end{bmatrix}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's define  $H^a_b$ the transformation matrix that expresses coordinate frame $\Phi_b$ in $\Phi_a$, expressed in $\Phi_a$. $\Phi_a$ can be your origin, but it can also be an other frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can use the transformation matrix to express a point $p=[p_x\ p_y]^\top$ (vectors) in another frame:&#xA;$$P_a = H^a_b\,P_b$$&#xA;$$P_b = H^b_c\,P_c$$&#xA;with&#xA;$$P = \begin{bmatrix} p \\ 1 \end{bmatrix}$$&#xA;The best part is that you can stack them as follows:&#xA;$$P_a = H^a_b H^b_c\,P_c = H^a_c\,P_c $$ &#xA;Here a small 2 D example. Consider a frame $\Phi_b$ translated $[3\ 2]^\top$ and rotated $90^\circ$ degrees with respect to $\Phi_a$.&#xA;$$H^a_b = \begin{bmatrix}\cos(90^\circ) &amp;amp; -\sin(90^\circ) &amp;amp; 3 \\ \sin(90^\circ) &amp;amp; \cos(90^\circ) &amp;amp; 2 \\ 0 &amp;amp; 0 &amp;amp; 1   \end{bmatrix}=\begin{bmatrix}0 &amp;amp; -1 &amp;amp; 3 \\ 1 &amp;amp; 0 &amp;amp; 2 \\ 0 &amp;amp; 0 &amp;amp; 1   \end{bmatrix}$$&#xA;A point $p_b=[3\ 4]^\top$ expressed in frame $\Phi_b$ is &#xA;$$\begin{bmatrix}p_{a,x} \\ p_{a,y} \\ 1 \end{bmatrix} = \begin{bmatrix}0 &amp;amp; -1 &amp;amp; 3 \\ 1 &amp;amp; 0 &amp;amp; 2 \\ 0 &amp;amp; 0 &amp;amp; 1   \end{bmatrix}\begin{bmatrix}3 \\ 4 \\ 1  \end{bmatrix}=\begin{bmatrix}-1 \\5 \\1 \end{bmatrix} \to p_a = \begin{bmatrix}-1\\5\end{bmatrix}$$&#xA;Try to make a drawing to improve your understanding.&lt;/p&gt;&#xA;" OwnerUserId="10547" LastActivityDate="2015-09-13T21:17:39.297" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8056" PostTypeId="1" CreationDate="2015-09-14T04:13:38.143" Score="0" ViewCount="87" Body="&lt;p&gt;I'm developing a small scale cart-pole balancing robot consisting of two wheels driven by a single motor at the base (essentially like a unicycle, but with two wheels to constrain balance to a one dimensional problem).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not sure what qualities to look for in that motor.  I think the motor should be able to accelerate quickly in directions opposite of motion as dictated by the control system.  However, i'm not sure if this rapid acceleration should correlate with higher torque motors or faster speed motors.  I think higher torque motors would be too slow to react to control commands.  In contrast, fast speed motors may not be able to overcome the momentum of the cart.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any design equations or other calculations i can make based on my robot's dimensions and weight to determine the right specs needed for my robot's motor?  How can i determine the right motor specs for this application without resorting to brute-force trial &amp;amp; error experiments?&lt;/p&gt;&#xA;" OwnerUserId="2295" LastEditorUserId="2295" LastEditDate="2015-09-14T04:26:07.997" LastActivityDate="2015-09-14T08:41:48.627" Title="What factors should i consider when selecting a motor for a free wheeled cart-pole balancing robot?" Tags="&lt;motor&gt;&lt;design&gt;&lt;balance&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8057" PostTypeId="2" ParentId="8056" CreationDate="2015-09-14T08:41:48.627" Score="1" Body="&lt;p&gt;High acceleration from a static (balanced) configuration is &lt;em&gt;only&lt;/em&gt; related to high torque. However, the maximum torque you can deliver decreases as function of speed. So, in the end it depends on both. In theory you could use a tiny motor with a huge gear ratio able to deliver a lot of torque, but it speeds up really quickly, meaning that it will fail coping with larger disturbances.  It is recommended to run some simulations of desired behaviour. Then calculate the required power by multiplying velocity and torque curves of the actuated joint. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Find a motor (brushed) that is able to deliver this power. Depending on a desire for efficiency or size, select a motor based on its nominal power or all the way up to near-maximum mechanical power respectively, or somewhere in between. I would recommend the former for now, as it's an easier approach. Nominal power is often given, or easily calculated by multiplying the nominal velocity and nominal torque. Maximum mechanical power is higher, and approximated by multiplying the no-load speed and stall torque divided by four. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lastly, you will need a transmission to obtain desired torque-velocity characteristics. For instance, if your motor is able to deliver 10 mNm at 1000 rpm, whereas you need 2 Nm at 5 rpm, then use a transmission ratio of $R=2000/10=200$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Update your simulation model by including the motor's reflected inertia $R^2\,I_{rotor}$ and mass to check whether your motor is still capable of delivering sufficient power. If not, then you have to re-iterate motor selection. Also, check your electrical power source and motor controller. Are they capable of delivering the required voltage and current?&lt;/p&gt;&#xA;" OwnerUserId="10547" LastActivityDate="2015-09-14T08:41:48.627" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8058" PostTypeId="1" CreationDate="2015-09-14T14:03:31.910" Score="4" ViewCount="331" Body="&lt;p&gt;Say we have a line-following robot that has a moving obstacle in front, that is a one-dimensional problem. The moving obstacle is defined by its initial state and a sequence of (longitudinal) acceleration changes (the acceleration function is piecewise constant). Let's say the robot can be controlled by specifying again a sequence of acceleration changes and its initial state. However, the robot has a maximum and minimum acceleration and a maximum and minimum velocity. How can I calculate the sequence of accelerations minimizing the time the robot needs to reach a goal. Note that the final velocity must not necessarily be zero.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can you briefly explain how this problem can be addressed or point me to some references where an algorithm is described? Or point out closely related problems?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Furthermore, does the solution depend on the goal position or could the robot just brake as late as possible all the time (avoiding collisions) and still reach any goal in optimal time?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A more formal problem description:&#xA;Given the position of the obstacle $x_B(t) = x_{B,0} + \int_{t_0}^t v_B(t) dt$, and the velocity of the obstacle $v_B(t) = v_{B,0} + \int_{t_0}^t a_B(t) dt$, where $a_B$ is a known piecewise constant function:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$a_B(t) = \begin{cases} a_{B,1} &amp;amp; \text{for } t_0 \leq t &amp;lt; t_1 \\&#xA;a_{B,2} &amp;amp; \text{for } t_1 \leq t &amp;lt; t_2 \\&#xA;\dots &amp;amp; \\&#xA;\end{cases}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and given the initial state of the line-follower $x_{A,0}, v_{A,0} \in \mathbb{R}$ we search for piecewise constant functions $a_A$, where $a_{min} \leq a_A(t) \leq a_{max}$, $v_{min} \leq v_A(t) \leq v_{max}$ and $x_A(t) \leq x_B(t)$ (collision freeness) holds at all times. Reasonable assumptions are e.g. $v_B(t) \geq 0$ and $x_{B,0} \geq x_{A,0}$. Among the feasible solutions I would like to pick those minimizing $\int_{t_0}^{\infty} x_B(t) - x_A(t) dt$ or a similar objective. Approximation algorithms are also ok.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some numbers for those who would like a test input:&#xA;&lt;a href=&quot;http://pastebin.com/iZsm2UhB&quot; rel=&quot;nofollow&quot;&gt;http://pastebin.com/iZsm2UhB&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10605" LastEditorUserId="10605" LastEditDate="2015-09-17T09:21:34.883" LastActivityDate="2015-09-17T09:21:34.883" Title="Optimal-time acceleration sequence of a line-following robot following a moving obstacle" Tags="&lt;mobile-robot&gt;&lt;control&gt;&lt;motion-planning&gt;&lt;line-following&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8059" PostTypeId="2" ParentId="8058" CreationDate="2015-09-14T14:49:29.553" Score="3" Body="&lt;p&gt;Assuming constant accelerations, &quot;stopping&quot; (slowing) distance can be calculated with:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;x = x_0 + v_0 t + \frac{1}{2} a t^2 \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $x_0$ is your initial position, $v_0$ is your initial speed, $a$ is your acceleration, and $t$ is time. Assuming you are trying to get from one constant speed to another constant speed, you can calculate the time required to achieve the speed change with:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;v = v_0 + a t \\&#xA;t = \frac{v - v_0}{a} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You question isn't especially clear to me - do you know the moving obstacle's acceleration profile before the challenge starts? Do you program your line-following robot completely before the start of competition? (i.e., you don't just look at the distance between yourself and the obstacle?)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you know and program everything in advance, then you should have your robot as close to the obstacle as possible any time the obstacle is about to have a positive acceleration and you should leave the correct &quot;stopping&quot; distance between yourself and the obstacle any time the obstacle is about to have a negative acceleration. You have to take the obstacle's slowing and accelerating distances into account as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would start at the end - you know your speed ($0$) and position ($x_{\mbox{end}}$) at the end of the course, and you should be able to calculate the obstacle's position, speed, and acceleration at the end of the course as well, by using the speed and position equations together with the acceleration profile.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming obstacle initial conditions of $x_0 = 0$ and $v_0 = 0$ at $t_0 = 0$, then you can calculate the speed and position after the first acceleration period:&#xA;$$&#xA;x_1 = x_0 + v_0 t + \frac{1}{2} a t^2 \\&#xA;x_1 = x_0 + v_0 (t_1 - t_0) + \frac{1}{2} a (t_1 - t_0)^2 \\&#xA;x_1 = 0 + 0 (t_1 - 0) + \frac{1}{2} a (t_1 - 0)^2 \\&#xA;\boxed{x_1 = \frac{1}{2} a (t_1)^2 \\}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;v = v_0 + at \\&#xA;v = v_0 + a (t_1 - t_0) \\&#xA;v = 0 + a (t_1 - 0) \\&#xA;\boxed{v = a (t_1) \\}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For each segment in the acceleration profile N, you can increment the speeds and positions:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;x_N = x_{N-1} + v_{N-1}(t_N - t_{N-1}) + \frac{1}{2} a_N (t_N - t_{N-1})^2 \\&#xA;v_N = v_{N-1} + a_N (t_N - t_{N-1}) \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep incrementing through the acceleration profile until $x_N &amp;gt;= x_{\mbox{end}}$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, work backwards. This depends in part on the problem definition - you will reach the goal faster if you can &quot;tag&quot; the goal like a baseball player would &quot;tag&quot; home - running over it at full speed. However, you may need to &lt;em&gt;stop&lt;/em&gt; at the goal in order to have &quot;reached&quot; the goal. This is a point you should seek clarification on. In any event, the line follower's $x_N$ should be $x_{\mbox{end}}$ and the $v_N$ should be:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;$v_{\mbox{max}}$, if the obstacle's $v_N$ at that point is higher than the line follower's $V_{\mbox{max}}$, or&lt;/li&gt;&#xA;&lt;li&gt;$v_{\mbox{line follower}}$, if the obstacle's speed is &lt;em&gt;lower&lt;/em&gt; than your $v_{\mbox{max}}$ at that point, or &lt;/li&gt;&#xA;&lt;li&gt;0, if you're required to be stationary at the the target. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;From your end conditions, work backward, trying to put the line-follower as close as possible to the obstacle while always allowing for braking/slowing distances. You can check your answer by incrementing through the positions and velocities again, this time using &lt;em&gt;differential&lt;/em&gt; values:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;x_{N_{\mbox{diff}}} = x_{(N-1)_{\mbox{diff}}} + v_{(N-1)_{\mbox{diff}}} (t_N - t_{N-1}) + \frac{1}{2} a_{N_{\mbox{diff}}} (t_N - t_{N-1})^2 \\&#xA;$$&#xA;$$&#xA;v_{N_{\mbox{diff}}} = v_{(N-1)_{\mbox{diff}}} + a_{N_{\mbox{diff}}}(t_N - t_{N-1})\\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where the differential values are $x_{\mbox{diff}} = x_{\mbox{obstacle}} - x_{\mbox{line follower}}$ and $v_{\mbox{diff}} = v_{\mbox{obstacle}} - v_{\mbox{line follower}}$. With these equations you're looking at the &lt;em&gt;differential&lt;/em&gt; position - the distance &lt;em&gt;between&lt;/em&gt; the obstacle and the line follower - if $x_{\mbox{diff}}$ is ever less than zero you're doing something wrong because it means your line follower is further ahead than your obstacle is!&lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2015-09-14T15:29:58.600" LastActivityDate="2015-09-14T15:29:58.600" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="8060" PostTypeId="2" ParentId="8058" CreationDate="2015-09-14T18:23:38.317" Score="3" Body="&lt;p&gt;The paper “Optimizing Train Speed Profiles to Improve Regeneration Efficiency of Transit Operations” (in &lt;a href=&quot;http://railtec.illinois.edu/articles/Files/Conference%20Proceedings/2014/JRC2014-3795.pdf&quot; rel=&quot;nofollow&quot;&gt;JRC2014-3795.pdf&lt;/a&gt;) by Haichuan Tang et al addresses some of the issues mentioned in the question and sets out a dynamic programming method for solving related problems.  The paper's goals are different than yours, but its method and some of its references may be helpful.&lt;/p&gt;&#xA;" OwnerUserId="478" LastActivityDate="2015-09-14T18:23:38.317" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8061" PostTypeId="2" ParentId="8050" CreationDate="2015-09-14T21:07:46.143" Score="1" Body="&lt;p&gt;First off, there's no guarantee the wire colors in the iRobot cable match the colors in the cable made by Tensility. Step one is to get an ohm meter and see if the colors match the pins you expect. If they do, I wonder if you accidentally blew the resettable fuse? See the discussion at the end of the section entitled External Serial Port Mini-DIN Pinout on &lt;a href=&quot;http://www.irobotweb.com/~/media/MainSite/PDFs/About/STEM/Create/iRobot_Roomba_600_Open_Interface_Spec.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;page 3&lt;/a&gt;. Depending on what you've plugged in, you may have pulled more than 200mA. Wait a bit for the fuse to cool, and then with nothing connected to the robot, (carefully) jam a multimeter between pins 6 and 1 on the connector and see if you get battery voltage. If you do, plug your cable in, with nothing attached to the cable but the voltmeter, and see if you get battery voltage where you'd expect it. If that checks out, put an ammeter between the battery power wires and your Pi, preferably in peak detect mode. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Good luck; I hope you have a multimeter. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;Please note that while I'm an iRobot employee, the postings on this site are my own and don't necessarily represent iRobot's positions, strategies, or opinions.&lt;/sup&gt;&lt;/p&gt;&#xA;" OwnerUserId="7665" LastEditorUserId="7665" LastEditDate="2018-07-19T12:51:14.290" LastActivityDate="2018-07-19T12:51:14.290" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8062" PostTypeId="1" CreationDate="2015-09-14T21:15:21.110" Score="-2" ViewCount="58" Body="&lt;p&gt;These days I'm trying to build IR 40kHz long range receiver. I use ir phototransistor. I don't want to use components like TSOP... I need to make&#xA;daylight filter and intensify filtred signal because out of this sensor I wanna use with some microcontroller. Can someone help me? Any idea? Thanks.&lt;/p&gt;&#xA;" OwnerUserId="8882" LastActivityDate="2015-09-15T10:02:11.923" Title="IR 40kHz receiver" Tags="&lt;sensors&gt;" AnswerCount="1" CommentCount="3" ClosedDate="2015-09-18T09:46:27.557" ContentLicense="CC BY-SA 3.0" />
  <row Id="8063" PostTypeId="2" ParentId="8062" CreationDate="2015-09-15T10:02:11.923" Score="1" Body="&lt;p&gt;IR receiver circuits based on phototransistors were widely used in TV sets before the advent of integrated modules, like TSOP, in late '80s. You can take inspiration from old time TV service manuals. In general the phototransistor is polarized via a &gt;100k resistor on the collector, then you need a high-pass filter with high input impedance to reject the effects of ambient IR sources, amplify, bandpass at about 40 kHz and at last shmitt-trigger to a square wave.&lt;/p&gt;&#xA;" OwnerUserId="10609" LastActivityDate="2015-09-15T10:02:11.923" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8064" PostTypeId="2" ParentId="8043" CreationDate="2015-09-15T21:11:42.203" Score="4" Body="&lt;p&gt;Unfortunately it is not as simple as just shifting the a and alpha columns, as the locations of the frames and the directions of their axes can also change when moving from one DH formulation to another.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can see in the &lt;a href=&quot;https://en.wikipedia.org/wiki/Denavit%E2%80%93Hartenberg_parameters#Modified_DH_parameters&quot; rel=&quot;nofollow&quot;&gt;Wikipedia entry on Modified DH Parameters&lt;/a&gt;, these key differences result in a number of changes to how the overall transformation matrix is built.&lt;/p&gt;&#xA;" OwnerUserId="10414" LastActivityDate="2015-09-15T21:11:42.203" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8065" PostTypeId="1" CreationDate="2015-09-15T21:57:16.003" Score="5" ViewCount="699" Body="&lt;p&gt;I have a GPS module and an IMU (gyro, accelerometer and magnetometer) and I need to build an autonomous navigation system for a quadcopter. It must know its position at any time so that it can track a predefined path. I know that, in order to improve precision, I need to merge both sensors data through a Kalman Filter (or any other technique for that matter, the thing is that the Kalman Filter is way more common according to my research).&#xA;The problem is that I am seriously stuck and I know this might be something very simple but I don't seem to find a solution or at least the answer for some of the most basic questions.&#xA;As a start, I know how to get the position from the accelerometer readings. I have some filters that help eliminate noise and minimize the integration errors. I also have the GPS readings in latitude and longitude. The first question is, during sensor fusion, how can I make both measurements compatible? The latitude and longitude from the GPS won't simply mix with the displacement given by the accelerometer, so what is the starting point for all of this? Should I calculate the displacement from the GPS readings or should I assume a starting latitude and longitude and then update it with the accelerometer prior to applying the filter?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have once developed a simple Kalman Filter in which I could plug the new reading values to obtain the next estimate position of a two wheeled car. Now I have two sources of inputs. How should I merge those two together? Will the filter have two inputs or should I find a function that will somehow get the best estimate (average, maybe?) from the accelerometer and GPS? I am really lost here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do you guys have any examples of code that I could use to learn? It is really easy to find articles full of boxes with arrows pointing the direction in which data must flow and some really long equations that start to get confusing very soon such as those presented on this article: &lt;a href=&quot;http://isas.uka.de/Material/Samba-Papierkorb/vorl2014_15/SI/Terejanu_tutorialUKF.pdf&quot; rel=&quot;noreferrer&quot;&gt;http://isas.uka.de/Material/Samba-Papierkorb/vorl2014_15/SI/Terejanu_tutorialUKF.pdf&lt;/a&gt; (I have no problems with equations, seriously) but I have never seen a real life example of such implementation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help on this topic would be deeply appreciated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you very much.&lt;/p&gt;&#xA;" OwnerUserId="10611" LastActivityDate="2015-10-16T00:25:47.507" Title="Solution for INS and GPS integration" Tags="&lt;kalman-filter&gt;&lt;sensor-fusion&gt;&lt;gps&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8066" PostTypeId="2" ParentId="8065" CreationDate="2015-09-16T00:24:52.537" Score="2" Body="&lt;p&gt;I was in exactly the same boat with my master's thesis; wave-based imaging (sonar and radar) seemed so common that all the papers I read assumed you knew the fundamental concept and they were going to show an advanced technique, or they set out deriving everything from Maxwell's equations! That said, I hope this helps. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Essentially, you have two measurements: one that should be really accurate in the short term, but prone to integration error/drift in the long run (the IMU accelerometer readings); and you have one that should be extremely accurate in the long term but is very noisy in the short term (GPS).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would recommend you look at a &lt;a href=&quot;http://www.pieter-jan.com/node/11&quot; rel=&quot;nofollow&quot;&gt;complimentary filter&lt;/a&gt;, which is an &lt;em&gt;extremely&lt;/em&gt; easy way to combine two measurements. Basically:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;y_{\mbox{est}} = g * y_1 + (1-g) y_2 \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's it. $g$ is a value between 0 and 1 that controls how much weight or &quot;trust&quot; you put in a measurement. $y_1$ would be the more trustworthy input, and $y_2$ would be the less trustworthy input. In your case, maybe try g=0.9 with the IMU as y1 and the GPS as y2. Remember, in the short term - sample to sample - IMU integration should be more accurate. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now you can of course filter individual measurements before, or output after, or both, but try it first with just the raw measurements. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're really into pain and desperately want to use the Kalman filter because it's what all the other academics are doing, &lt;a href=&quot;https://www.mit.bme.hu/system/files/oktatas/targyak/7206/A_comparison_of_complementary_and_kalman_filtering.pdf&quot; rel=&quot;nofollow&quot;&gt;this paper&lt;/a&gt; (PDF) may be of help as it provides a discrete implementation of a fusing Kalman filter. I wouldn't do it, though. If you're doing something tangible it's engineering, and as engineers we want quality, reliable results, whatever the means! The complimentary filter is literally the one line I wrote, it's super easy to debug, minimal processor requirement, it's intuitive, &lt;strong&gt;it works&lt;/strong&gt;, and did I mention easy to debug? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Try looking around online for &quot;complimentary vs Kalman filter&quot;; I'm not the only advocate. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-09-16T00:24:52.537" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8067" PostTypeId="2" ParentId="8044" CreationDate="2015-09-16T02:04:16.967" Score="3" Body="&lt;p&gt;There are very limited options for effectively transmitting force across a distance, other than with projectiles of some kind which won't achieve your goals or be allowed under the rules.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based on the rules as given (which mentions having an arm on the hybrid robot), I would assume that the hybrid robot is expected to extend an arm above the eco robot's track to either &quot;push&quot; or &quot;pull&quot; the robot using wind power or magnetism. This gets around the distance issue, provided you can reliably keep the arm from making contact with the eco robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another possible route to take which may or may not work would be to mimic the various bristle bots that are out there (toothbrush head robots, hexbugs, etc) and vibrate the entire table to cause the eco robot to move forward, although that would require fairly significant levels of vibration and some way of orienting the bristles to steer.&lt;/p&gt;&#xA;" OwnerUserId="10414" LastActivityDate="2015-09-16T02:04:16.967" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8068" PostTypeId="2" ParentId="8044" CreationDate="2015-09-16T12:14:40.677" Score="3" Body="&lt;p&gt;Attach a metal square-shaped frame to the first robot, fill the edges with magnets, take your second robot (should have non actuated free moving wheels, like the ones on chairs) and fill it with opposite magnets on all sides, put it inside that metal square, drive your first robot.&lt;/p&gt;&#xA;" OwnerUserId="4429" LastActivityDate="2015-09-16T12:14:40.677" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8070" PostTypeId="2" ParentId="8054" CreationDate="2015-09-16T13:31:41.730" Score="2" Body="&lt;p&gt;Use a stepper motor, to precisely control the position of the shade, unless you also want to have to use &lt;em&gt;limit switches&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you use a stepper motor, then you can simply calculate the number of rotations required in order to roll the cloth up, or down, sufficiently. Once the number of rotations has been completed, turn off the stepper. In addition, if you use a stepper, you could also have the shade stop half way, two thirds, or whatever proportional open, or closed, that you require, without needing limit switches (or IR switches) along the entire &lt;em&gt;throw&lt;/em&gt; of the shade, to tell you where the shade currently is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you use a geared motor, then you will require limit switches, or something of that ilk, to stop the shade when it reaches either extreme (i.e., fully open and fully closed).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Common stepper motors include the 28BYJ-48&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/uY9XR.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/uY9XR.jpg&quot; alt=&quot;28BYJ-48 stepper motor&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and the Nema variations&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/5YvIc.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/5YvIc.jpg&quot; alt=&quot;Nema stepper motors&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Be sure to chose one with sufficient power (torque) to wind to shade. It shouldn't require too much, but it will depend on the weight of the cloth and the size of the shade.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The stepper motor will need to be controlled by an Arduino (or some other such controller (Raspberry Pi or PIC)), in conjunction with a stepper motor driver (such as a Easy Driver or ULN2003).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Stepper motors are too large a topic to explain here in depth, however the following two tutorials should get you up to speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a very useful video tutorial, &lt;a href=&quot;https://www.youtube.com/watch?v=cYIL5gxRogM&quot; rel=&quot;nofollow noreferrer&quot;&gt;Control a Stepper Motor using an Arduino, a Joystick and the Easy Driver - Tutorial&lt;/a&gt;, that you will find very useful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you decide to use a ULN2003, then the video tutorial, &lt;a href=&quot;https://www.youtube.com/watch?v=B86nqDRskVU&quot; rel=&quot;nofollow noreferrer&quot;&gt;28BYJ-48 Stepper Motor and ULN2003 Driver Intro&lt;/a&gt;, is extremely informative.&lt;/p&gt;&#xA;" OwnerUserId="9176" LastEditorUserId="9176" LastEditDate="2015-09-16T20:14:11.090" LastActivityDate="2015-09-16T20:14:11.090" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8073" PostTypeId="2" ParentId="6417" CreationDate="2015-09-16T20:47:56.813" Score="4" Body="&lt;p&gt;You are correct in claiming that both PID and LQR can be applied to the &lt;em&gt;linearized&lt;/em&gt; form of the cart-pole problem. If you have a look at the answers to the related question Ugo linked to in the comments (specifically Ugo's own answer: &lt;a href=&quot;https://robotics.stackexchange.com/a/5231/10414&quot;&gt;https://robotics.stackexchange.com/a/5231/10414&lt;/a&gt;), you will see the high level differences between PID (and other classic methods) and LQR (and other optimal methods) for control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a more detailed analysis specifically focused on the cart-pole problem, an article was written by Nasir et al which specifically deals with this question, available as a cached PDF on CiteSeerX: &lt;a href=&quot;http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.545.6096&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.545.6096&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="10414" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2015-09-16T20:47:56.813" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8074" PostTypeId="2" ParentId="7198" CreationDate="2015-09-16T21:05:48.220" Score="2" Body="&lt;p&gt;For building a dynamic model from scratch of any differential drive mobile robot (i.e., a tank), the best resource I've found so far is a paper by Dhaouadi and Hatab (&lt;a href=&quot;http://www.omicsgroup.org/journals/dynamic-modelling-of-differentialdrive-mobile-robots-using-lagrange-and-newtoneuler-methodologies-a-unified-framework-2168-9695.1000107.pdf&quot; rel=&quot;nofollow&quot;&gt;PDF link&lt;/a&gt;) titled &quot;Dynamic Modelling of Differential-Drive Mobile Robots using Lagrange and Newton-Euler Methodologies: A Unified Framework&quot;. It even includes some discussion of how to do the dynamic modeling of the actuators.&lt;/p&gt;&#xA;" OwnerUserId="10414" LastActivityDate="2015-09-16T21:05:48.220" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8076" PostTypeId="2" ParentId="1020" CreationDate="2015-09-17T09:39:34.237" Score="2" Body="&lt;p&gt;&lt;a href=&quot;http://anki.com/&quot; rel=&quot;nofollow&quot;&gt;Anki&lt;/a&gt; uses optical sensors in their toy cars to implement line followers. The optical sensors are sensitive in the IR range. The fact that the lines cannot be seen is easily explained: The lines are coated with black color which is transparent in the IR range. Paliogen black L 86 or Paliogen black S 84 by &lt;a href=&quot;http://www.dispersions-pigments.basf.us/p02/USWeb-Internet/pigments/en_GB/content/microsites/pigmentsdispersions/products/Paliogen&quot; rel=&quot;nofollow&quot;&gt;BASF&lt;/a&gt; are such colors. If you place barcodes along the lines you can even get absolute positioning informations from the optical sensors.&lt;/p&gt;&#xA;" OwnerUserId="10605" LastActivityDate="2015-09-17T09:39:34.237" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8077" PostTypeId="1" CreationDate="2015-09-17T10:05:31.237" Score="0" ViewCount="822" Body="&lt;p&gt;I hope you can help me with my project.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm using a skid-steering wheeled mobile robot for autonomous navigation and I'd like to find a way to be able to perform path reconstruction in Matlab.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By using only the robot encoders (installed on the robot) and the yaw rate information (which come from a very accurate IMU sensor mounted on the robot frame), I can successfully do the path reconstruction.&#xA;(I'm using XBOW-300CC sensor)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is that I would like to try to reconstruct the path by using only the IMU yaw rate and the IMU acceleration values for X and Y axis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm able to obtain velocity and distance by integrating two times the IMU acceleration values but my problem is that I don't know how to use this data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do I have to use a rotation matrix to pass from the IMU frame to the robot frame coordinates? &#xA;I'm asking this because I use a rotation matrix for the encoder values which come from the robot encoder.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the moment, I use these equations for robot encoders and IMU yaw rate:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;tetha(i)=(yaw(i)+yaw(i-1))/2*(encoder(i)-encoder(i-1))+tetha(i-1); %trapezoidal integral&#xA;&#xA;Rx=[1 0 0;0 cos(-roll_angle(i)) -sin(-roll_angle(i)); 0 sin(-roll_angle(i)) cos(-roll_angle(i))];&#xA;Ry=[cos(-pitch_angle(i)) 0 sin(-pitch_angle(i)); 0 1 0; -sin(-pitch_angle(i)) 0 cos(-pitch_angle(i))];&#xA;Rz=[cos(-tetha(i)) -sin(-tetha(i)) 0; sin(-tetha(i)) cos(-tetha(i)) 0; 0 0 1];&#xA;R2=Rz*Ry*Rx;&#xA;&#xA;disp=R2 *[encoder_displacement(i) 0 0]';&#xA;X_r(i)=disp(1);&#xA;Y_r(i)=disp(2);&#xA;Z_r(i)=disp(3);&#xA;&#xA;X(i)=x0+sum(X_r(1:i));&#xA;Y(i)=y0+sum(Y_r(1:i));&#xA;Z(i)=z0+sum(Z_r(1:i));&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Do I still have to use R2 matrix?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you a lot&lt;/p&gt;&#xA;" OwnerUserId="10626" LastActivityDate="2015-09-17T14:21:32.840" Title="Mobile Robot path reconstruction by using IMU acceleration and Yaw angle" Tags="&lt;mobile-robot&gt;&lt;kinematics&gt;&lt;imu&gt;&lt;navigation&gt;&lt;matlab&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="8078" PostTypeId="2" ParentId="8077" CreationDate="2015-09-17T12:52:59.520" Score="1" Body="&lt;p&gt;If you aligned the IMU &quot;well&quot;, then this should be a relatively trivial problem. Consider your statement that you can reconstruct the path using only &quot;robot encoders&quot; (wheel encoders?) and the yaw rate. Now, if you have the IMU configured such that the X-axis is the forward/reverse direction, then double-integrating the x-axis accelerometer should duplicate the wheel encoder information. The only information the Y-axis accelerometer should tell you is if the robot is sliding sideways. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have the IMU aligned &quot;poorly&quot; then you could have some projection of the x- and y-axis along the forward/reverse axis, at which point you would need to take the correct projection from each and add them together to get the forward distance. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding rotation matrices, whatever you're doing currently to apply it to the (wheel encoder?) robot encoder should work the same when you convert the acceleration data to distance.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;:EDIT:&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Assuming your yaw angle is a z-axis rotation, your rotation matrix should look like:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;R = \left[ \begin{array}{ccc}&#xA;\cos{\theta} &amp;amp; -\sin{\theta} &amp;amp; 0 \\&#xA;\sin{\theta} &amp;amp; \cos{\theta} &amp;amp; 0 \\&#xA;0 &amp;amp; 0 &amp;amp; 1 \end{array} \right] \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should have some starting heading, $\theta_0$. You also need a starting velocity $v_0$ and a starting position, $p_0$. Now, you get samples at some update rate, where the time between samples, the sample time, is $dT$. So, from physics, you can calculate your new distance and velocity:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;p_N = p_{N-1} + v_{N-1} dT + \frac{1}{2} a_N dT^2 \\&#xA;v_N = v_{N-1} + a_N dT \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $N$ indicates the current sample and $N-1$ indicates the previous sample. In this instance your initial conditions, $p_0$ and $v_0$ are used and you get your first update, $p_1$ and $v_1$ from your first accelerometer reading. I've used $p$ for position instead of $x$ to try to keep the concepts separate - the accelerometer will give you some position, but it doesn't get to be a coordinate until you've reconciled it back to your world coordinates. This is done with the rotation matrix:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\left[ \begin{array}{ccc}&#xA;x_N \\&#xA;y_N \\&#xA;z_N \end{array} \right] = R_{N-1} * \left[ \begin{array}{ccc}&#xA;p_N \\&#xA;0 \\&#xA;0 \end{array} \right] \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here I've shown the $N-1$ rotation matrix, the rotation matrix based on the previous yaw reading (or starting heading, if you're considering the first sample), but your choice of which angle to use (previous sample, current sample, an average, etc.) shouldn't actually make a big difference for the same reason that &lt;a href=&quot;https://en.wikipedia.org/wiki/Trapezoidal_rule&quot; rel=&quot;nofollow&quot;&gt;trapezoidal integration&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Rectangle_method&quot; rel=&quot;nofollow&quot;&gt;rectangular integration&lt;/a&gt; both converge on the same result. As long as the sample time is sufficiently short relative to the motion of your vehicle, any errors accumulated going one direction should generally be canceled out going the other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would say if you wanted the most reasonable yaw estimate, use the average of the previous and current headings:&#xA;$$&#xA;R = (R_{N} + R_{N-1})/2 \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, to summarize, I would try the following:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\theta_N = \mbox{read(yaw)} \\&#xA;a_N = \mbox{read(x-axis IMU)} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\theta_{\mbox{mean}} = (\theta_N + \theta_{N-1})/2 \\&#xA;R = \left[ \begin{array}{ccc} &#xA;\cos{\theta_{\mbox{mean}}} &amp;amp; -\sin{\theta_{\mbox{mean}}} &amp;amp; 0 \\&#xA;\sin{\theta_{\mbox{mean}}} &amp;amp; \cos{\theta_{\mbox{mean}}} &amp;amp; 0 \\&#xA;0 &amp;amp; 0 &amp;amp; 1 \end{array} \right] \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;p_N = p_{N-1} + v_{N-1} dT + \frac{1}{2} a_N dT^2 \\&#xA;v_N = v_{N-1} + a_N dT \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\left[ \begin{array}{ccc}&#xA;x_N \\&#xA;y_N \\&#xA;z_N \end{array} \right] = R * \left[ \begin{array}{ccc}&#xA;p_N \\&#xA;0 \\&#xA;0 \end{array} \right] \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, as a final note, again, I would leave the y-axis accelerometer out of everything because you'll find one of two scenarios:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The IMU is located on the center of rotation of the vehicle, so you don't actually ever get a y-axis acceleration during normal operation, or&lt;/li&gt;&#xA;&lt;li&gt;The IMU is not located on the center of the rotation of the vehicle, so you get a y-axis acceleration any time you turn. In this instance, any y-axis acceleration only indicates rotation, which you already know from the z-axis rotation. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;In both cases, &lt;em&gt;assuming the vehicle isn't sliding sideways&lt;/em&gt;, the y-axis accelerometer isn't providing you any forward/reverse information. It's only providing you either nothing (case 1) or a more obfuscated form of rotation (case 2) that you already get from your yaw angle. So, just leave it off. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2015-09-17T14:21:32.840" LastActivityDate="2015-09-17T14:21:32.840" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="8079" PostTypeId="2" ParentId="1020" CreationDate="2015-09-17T16:44:40.387" Score="0" Body="&lt;p&gt;I have a short answer for your question. This is for a ROS enabled robot only.&#xA;There are many ways to do this, but this is how I have done it. I used ROS and Kuka Youbot. It could be any robot using ROS. It is very helpful to know ROS if you plan to be in robotics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Use ROS &#xA;Then use GMapping to map your environment. Example room or hallway and save the map.&#xA;Then using RVIZ, give the goal position in the map.&lt;/p&gt;&#xA;" OwnerUserId="9627" LastActivityDate="2015-09-17T16:44:40.387" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8080" PostTypeId="1" AcceptedAnswerId="8084" CreationDate="2015-09-17T16:59:08.490" Score="3" ViewCount="110" Body="&lt;p&gt;I'm really in doubt whether it is proper to ask this question here, so I'm apologizing if it is not, I'll delete it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a Roomba robot which has worked for me for more than three years, and now while it is working it is producing some strange sounds, so I've decided to clean it thoroughly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But when I disassembled it down to this point:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/W2ZTR.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/W2ZTR.jpg&quot; alt=&quot;Roomba disassembled&quot;&gt;&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I got stuck with these sort of glass things (marked with the red rectangles at the picture). They are really filthy from the inside and I cannot figure out how to clean them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know how one can remove dust from the inside on these things? May be there are some Roomba creators here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance.&lt;/p&gt;&#xA;" OwnerUserId="10629" LastEditorUserId="10629" LastEditDate="2015-09-17T17:12:14.250" LastActivityDate="2015-09-18T08:37:53.273" Title="Could anyone tell me what are these things in a Roomba robot and how to clean them, please?" Tags="&lt;roomba&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8081" PostTypeId="2" ParentId="7644" CreationDate="2015-09-17T19:34:16.117" Score="4" Body="&lt;p&gt;I have used POMDP like models on top of a localization algorithm (&lt;a href=&quot;http://wiki.ros.org/amcl&quot; rel=&quot;nofollow&quot;&gt;Adaptive Monte Carlo Localization&lt;/a&gt;, from ROS), and a person detector [1][2] to find and follow a person with a humanoid robot. These two algorithms generate the input (observation) for the POMDP model in [1] and [2]. Also in [3] they used a POMDP model with similar input.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As next step we used POMCPs (Partially Observable Monte Carlo Processes [4]) which use Monte Carlo simulations to create a policy because they are able to handle much larger state spaces. &#xA;Having continuous states and observations causes problems when trying to find a policy, since there will be an infinite number of observations possible. We used Monte Carlo processes with continuous states [4], but the observations and actions were discretized to prevent the policy tree from growing too wide. There is however work on the use of continuous observations in POMDP, such as presented in [5]. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other work with POMDP like models on a top level are: [6-8].  &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A. Goldhoorn, A. Sanfeliu and R. Alquézar Mancho. Analysis of methods for playing human robot hide-and-seek in a simple real world urban environment, 1st Iberian Robotics Conference, 2013, Madrid, in ROBOT2013: First Iberian Robotics Conference, Vol 252-3 of Advances in Intelligent Systems and Computing, pp. 505-520, 2014, Springer. &lt;a href=&quot;http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=7041445&quot; rel=&quot;nofollow&quot;&gt;http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=7041445&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;A. Goldhoorn, A. Garrell Zulueta, R. Alquézar Mancho and A. Sanfeliu. Continuous real time POMCP to find-and-follow people by a humanoid service robot, 2014 IEEE-RAS International Conference on Humanoid Robots, 2014, Madrid, Spain, pp. 741-747, IEEE Press. &lt;a href=&quot;http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=7041445&quot; rel=&quot;nofollow&quot;&gt;http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=7041445&lt;/a&gt; &lt;/li&gt;&#xA;&lt;li&gt;Luis Merino, Joaqu\'in Ballesteros, Noé Pérez-Higueras, Rafael Ramón-Vigo, Javier Pérez-Lara, and Fernando Caballero. Robust Person Guidance by Using Online POMDPs. In Manuel A. Armada, Alberto Sanfeliu, and Manuel Ferre, editors, ROBOT2013: First Iberian Robotics Conference, Advances in Intelligent Systems and Computing, pp. 289–303, Springer International Publishing, 2014. &lt;a href=&quot;http://link.springer.com/chapter/10.1007%2F978-3-319-03653-3_22&quot; rel=&quot;nofollow&quot;&gt;http://link.springer.com/chapter/10.1007%2F978-3-319-03653-3_22&lt;/a&gt; &lt;/li&gt;&#xA;&lt;li&gt;D. Silver and J. Veness, “Monte-Carlo planning in large POMDPs,”&#xA;Proceedings of 24th Advances in Neural Information Processing Systems&#xA;(NIPS), pp. 1–9, 2010.&lt;/li&gt;&#xA;&lt;li&gt;J.M. Porta, N. Vlassis, M.T. Spaan and P. Poupart. Point-based value iteration for continuous POMDPs. Journal of Machine Learning Research, 7: 2329-2367, 2006.&lt;/li&gt;&#xA;&lt;li&gt;Pineau, J., Gordon, G., &amp;amp; Thrun, S. (2003). Point-based value iteration: An anytime algorithm for POMDPs. In IJCAI International Joint Conference on Artificial Intelligence (Vol. 18, pp. 1025–1030). Citeseer. Retrieved from &lt;a href=&quot;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.68.1777&amp;amp;rep=rep1&amp;amp;type=pdf&quot; rel=&quot;nofollow&quot;&gt;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.68.1777&amp;amp;rep=rep1&amp;amp;type=pdf&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Ong, S., Png, S., &amp;amp; Hsu, D. (2009). POMDPs for robotic tasks with mixed observability. Proc. Robotics: Science and Systems. Retrieved from &lt;a href=&quot;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.149.3849&amp;amp;rep=rep1&amp;amp;type=pdf&quot; rel=&quot;nofollow&quot;&gt;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.149.3849&amp;amp;rep=rep1&amp;amp;type=pdf&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Schesvold, D., Tang, J., Ahmed, B. M., Altenburg, K., &amp;amp; Nygard, K. E. (2003). POMDP planning for high level UAV decisions: Search vs. strike. In In Proceedings of the 16th International Conference on Computer Applications in Industry and Engineering (pp. 3–6). Citeseer. Retrieved from &lt;a href=&quot;http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.125.9134&quot; rel=&quot;nofollow&quot;&gt;http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.125.9134&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="10041" LastActivityDate="2015-09-17T19:34:16.117" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8082" PostTypeId="1" CreationDate="2015-09-17T20:56:11.993" Score="4" ViewCount="185" Body="&lt;p&gt;I'm a CS student trying to implement a clustering algorithm that would work for a set of robots in an indoor controlled environment. I'm still starting on Robotics and don't have much experiencing in figuring out what will work together.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My plan is to get 6 of these &lt;a href=&quot;https://www.pololu.com/product/3126&quot; rel=&quot;noreferrer&quot;&gt;Zumo robots&lt;/a&gt; and plug in a wifi module like the &lt;a href=&quot;http://www.adafruit.com/products/1491&quot; rel=&quot;noreferrer&quot;&gt;Wifi shield&lt;/a&gt;. Then, I would use this to do inter communication and execute my algorithm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question: Can the wifi module just be plugged in and would it work? If not, how can I go about achieving this task. I see lots of Arduino boards with different names and I'm not sure which works with which, and whether they can be plugged in. Any help would be appreciated.&lt;/p&gt;&#xA;" OwnerUserId="10631" LastActivityDate="2015-10-18T13:09:45.393" Title="Wifi module for Zumo robot" Tags="&lt;arduino&gt;&lt;wifi&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8084" PostTypeId="2" ParentId="8080" CreationDate="2015-09-18T08:37:53.273" Score="5" Body="&lt;p&gt;I don't have one, but I found this article:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.robotreviews.com/chat/viewtopic.php?t=10631&quot; rel=&quot;noreferrer&quot;&gt;http://www.robotreviews.com/chat/viewtopic.php?t=10631&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There they say the &quot;cliff sensors&quot; collect a lot of dust and can be cleaned out with a blast of compressed air. From the article, these sensors detect the floor and prevent the Roomba from wandering off the top stair, or some similar mishap.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If these sensors are dirty, apparently it will keep stopping and beeping, thinking its route is blocked.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you don't have a source of compressed air you can get &quot;canned air&quot; from specialist camera places, but it's expensive. Otherwise, just blowing hard (once per sensor, without getting any spit in there!) may do the trick but be careful not to damage anything...&lt;/p&gt;&#xA;" OwnerUserId="9578" LastActivityDate="2015-09-18T08:37:53.273" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8085" PostTypeId="2" ParentId="8082" CreationDate="2015-09-18T13:01:09.583" Score="1" Body="&lt;p&gt;You will need to determine if the Zumo is Arduino shield pinout compatible. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It appears the Zumo has a compatible microcontroller. This likely means that you would be able to use the Arduino IDE, compiler and libraries to program your robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the Zumo is not pin compatible, you may want to investigate the ESP8266 range of SoCs. They're a microcontroller that can be programmed with the Arduino IDE, and have built in wifi. They're also very light and cheap.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The easiest way to integrate the ESP8266 with the robot may be to use their respective serial connections. When integrating 3rd party components onto your robot ensure that you are using the correct voltage (5V vs 3.3V). If components run on different voltages you may need to use a level shifter.&lt;/p&gt;&#xA;" OwnerUserId="9527" LastActivityDate="2015-09-18T13:01:09.583" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8086" PostTypeId="2" ParentId="5180" CreationDate="2015-09-18T14:00:46.920" Score="0" Body="&lt;p&gt;When you're in a closed area with different obstacles and your accuracy is about a meter things will change comparing outdoor navigation. I suggest someways.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Using IR or Laserpoint in the case of Line Of Sight to the robot.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Using Ultrasound to call Robot, it don't need a LOS but it is invaluable,too.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Using a headquarter to determine your location and Navigate robot to your position. for instance use a receiver in each room. Then you will tell your robot, which room you are and then can navigate your robot to your location.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Professional ways include measuring your signal strength in different directions and then determine the most powerful signal strength and folow that way. It is possible by directional antennas which are currently used in BTS (mobile base stations) to estimate locations.&lt;/p&gt;&#xA;" OwnerUserId="10634" LastActivityDate="2015-09-18T14:00:46.920" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8087" PostTypeId="1" CreationDate="2015-09-18T18:37:15.907" Score="4" ViewCount="3098" Body="&lt;p&gt;Is it safe to give 5v through 5v pin of arduino uno r3 while the USB cable is inserted? I have ESCs connected to it which aren't likely to start in other cases. The 5v and gnd is coming from the BEC circuit of a connected ESC. Please help me. Thanks&lt;a href=&quot;https://i.stack.imgur.com/cBaib.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/cBaib.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10580" LastEditorUserId="1075" LastEditDate="2015-09-22T01:51:46.933" LastActivityDate="2017-09-16T01:44:04.957" Title="Is it safe to give 5v through 5v pin of arduino uno r3 while usb cable inserted" Tags="&lt;arduino&gt;&lt;esc&gt;" AnswerCount="3" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8088" PostTypeId="2" ParentId="8087" CreationDate="2015-09-18T18:54:23.510" Score="0" Body="&lt;p&gt;See &lt;a href=&quot;https://electronics.stackexchange.com/a/65582/76598&quot;&gt;this answer&lt;/a&gt; to similar question on the EE Stack Exchange:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The &lt;a href=&quot;http://arduino.cc/en/Main/arduinoBoardUno&quot; rel=&quot;nofollow noreferrer&quot;&gt;official stance on supplying power&lt;/a&gt; directly to the 5V pin on the Arduino Uno is thus:&lt;/p&gt;&#xA;  &#xA;  &lt;blockquote&gt;&#xA;    &lt;p&gt;Supplying voltage via the 5V or 3.3V pins bypasses the regulator, and can damage your board. We don't advise it.&lt;/p&gt;&#xA;  &lt;/blockquote&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="-1" LastEditDate="2017-04-13T12:33:08.317" LastActivityDate="2015-09-21T20:14:40.143" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="8090" PostTypeId="2" ParentId="8087" CreationDate="2015-09-20T03:16:06.877" Score="0" Body="&lt;p&gt;please see: &lt;a href=&quot;https://dronesandrovs.wordpress.com/?attachment_id=241#main&quot; rel=&quot;nofollow&quot;&gt;https://dronesandrovs.wordpress.com/?attachment_id=241#main&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It looks like it's safe.&lt;/p&gt;&#xA;" OwnerUserId="10642" LastActivityDate="2015-09-20T03:16:06.877" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8094" PostTypeId="1" CreationDate="2015-09-20T08:37:15.360" Score="1" ViewCount="1346" Body="&lt;p&gt;As in this video: &lt;a href=&quot;https://www.youtube.com/watch?v=qce5Vguj5Jg&quot; rel=&quot;nofollow&quot;&gt;https://www.youtube.com/watch?v=qce5Vguj5Jg&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this new version (did not see the learning part in the past versions), with three to four trials, Cubli can learn to balance on a new surface.&lt;/p&gt;&#xA;" OwnerUserId="8933" LastActivityDate="2017-01-07T09:07:16.787" Title="What is the learning (control) algorithm inside Cubli?" Tags="&lt;control&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8095" PostTypeId="2" ParentId="4983" CreationDate="2015-09-20T08:47:41.403" Score="0" Body="&lt;p&gt;Check out this video: &lt;a href=&quot;https://www.youtube.com/watch?v=csfAOCdkCdU&quot; rel=&quot;nofollow&quot;&gt;https://www.youtube.com/watch?v=csfAOCdkCdU&lt;/a&gt; and this relevant one: &lt;a href=&quot;https://www.youtube.com/watch?v=t369aSInq-E&quot; rel=&quot;nofollow&quot;&gt;https://www.youtube.com/watch?v=t369aSInq-E&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8933" LastActivityDate="2015-09-20T08:47:41.403" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8096" PostTypeId="1" CreationDate="2015-09-20T10:26:23.930" Score="0" ViewCount="101" Body="&lt;p&gt;We do some experiments of real time representation of sensor position on TV. In this experiments, we used sensors for collect real time position in 3D at 250Hz and TV for Display the sensor position at 60Hz. Also, we used MATLAB and C++ for programming with OpenGL platform.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In programming, Every iteration dat display on the TV, erase and draw the circle (Object, which is represent real time position on the display). In this program I collect to only 60 points and loose other 190 points in every second, becuase, I think that refresh rate of TV is 60Hz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have gone through the thread &quot;How can I control a fast (200Hz) realtime system with a slow (30Hz) system?&quot;(&lt;a href=&quot;https://robotics.stackexchange.com/questions/807/how-can-i-control-a-fast-200hz-realtime-system-with-a-slow-30hz-system&quot;&gt;How can I control a fast (200Hz) realtime system with a slow (30Hz) system?&lt;/a&gt;), but i don't understand, How to implement two loop on 200Hz and 30Hz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My Question is, How can we implement in MATLAB/C++? So I can store 250 data of sensors as well as 60 points for real time display on the TV.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you help me through pseudo code, I appreciate your help.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank You in advance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please help me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S. Code&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;%Display main window using Psychtoolbox&#xA;&#xA;win=Screen(2,'OpenWindow',[1 1 1])&#xA;&#xA;while (1)&#xA;  % Setup for data collection at 250Hz&#xA;  Error   = calllib('ATC3DG64', 'GetSynchronousRecord',  hex2dec('ffff'), pRecord, 4*numBoards*64);&#xA;  errorHandler(Error);&#xA;  Record = get(pRecord, 'Value');&#xA;&#xA;  %sensor number&#xA;  count=2;&#xA;&#xA;  evalc(['tempPos(1, count) ='  'Record.x' num2str(count - 1)]);&#xA;  evalc(['tempPos(2, count) ='  'Record.y' num2str(count - 1)]);&#xA;  evalc(['tempPos(3, count) ='  'Record.z' num2str(count - 1)]);&#xA;&#xA;  % Record X and Y position of  sensor 2&#xA;&#xA;  if SensorNumAttached(count)&#xA;    % Real time position and minus world origin so that real&#xA;    % time position display on the TV&#xA;    table1(count,1)=(2.54*tempPos(2,count))-X_world_origin;&#xA;    table1(count,2)=(2.54*tempPos(3,count))-Y_world_origin;&#xA;  end &#xA;&#xA;  % Some conversion for the Pixel to centimeter ratio&#xA;  x_center_new = x_center - (x_ratio * table1(2,1));&#xA;  y_center_new = y_center - (y_ratio * table1(2,2));&#xA;&#xA;  % conversiorn for display circle on the TV, is represent the real time poistion of the sensor&#xA;  x1  =round(x_center_new - R_num_data);&#xA;  y1 = round(y_center_new - R_num_data);&#xA;&#xA;  x2 = round(x1 + 2*R_num_data);&#xA;  y2 = round(y1 + 2*R_num_data);&#xA;&#xA;&#xA;  % Display command for TV.      &#xA;  Screen('FrameOval',win,[255 0 0], [x1 y1 x2 y2]);&#xA;  Screen('Flip',win);&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="10647" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2015-09-21T14:23:58.397" Title="How can I control fast real time sensor (250Hz) with slow system display(60Hz)" Tags="&lt;design&gt;&lt;communication&gt;&lt;matlab&gt;&lt;c++&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8097" PostTypeId="2" ParentId="8096" CreationDate="2015-09-20T11:46:07.707" Score="0" Body="&lt;p&gt;I didnt see what is your processing unit (preocessor/ADC/DAC etc.) speed?. If your processor speed less than sensors speed you can try &quot;sampling&quot; or &quot;quantization&quot; techniques. you can look to any signal processing book for further readings. If you have fast processor and slow display unit this is not a problem. Just collect/ buffer your sensor readings for a second (or you can use 1/60 sec for fast display) than show all of them in display unit. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is like controlling analogus systems with digital systems.&lt;/p&gt;&#xA;" OwnerUserId="9504" LastActivityDate="2015-09-20T11:46:07.707" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8098" PostTypeId="2" ParentId="8094" CreationDate="2015-09-20T13:38:16.027" Score="7" Body="&lt;p&gt;You should start by reading their academic papers:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;M. Muehlebach, G. Mohanarajah, and R. D'Andrea, &lt;a href=&quot;http://www.idsc.ethz.ch/content/dam/ethz/special-interest/mavt/dynamic-systems-n-control/idsc-dam/Research_DAndrea/Cubli/cubliCDC13.pdf&quot; rel=&quot;nofollow&quot;&gt;Nonlinear Analysis and Control of a Reaction Wheel-based 3D Inverted Pendulum&lt;/a&gt;, in Proc. Conference on Decision and Control, CDC 2013 (Florence, Italy)&lt;/li&gt;&#xA;&lt;li&gt;M. Gajamohan, M. Muehlebach, T. Widmer, and R. D'Andrea, &lt;a href=&quot;http://www.idsc.ethz.ch/content/dam/ethz/special-interest/mavt/dynamic-systems-n-control/idsc-dam/Research_DAndrea/Cubli/Cubli_ECC2013.pdf&quot; rel=&quot;nofollow&quot;&gt;The Cubli: A Reaction Wheel-based 3D Inverted Pendulum&lt;/a&gt;, in Proc. European Control Conference (Zurich, Switzerland), pp. 268-274, July 2013.&lt;/li&gt;&#xA;&lt;li&gt;M. Gajamohan, M. Merz, I. Thommen, and R. D'Andrea, &lt;a href=&quot;http://www.idsc.ethz.ch/content/dam/ethz/special-interest/mavt/dynamic-systems-n-control/idsc-dam/Research_DAndrea/Cubli/Cubli_IROS2012.pdf&quot; rel=&quot;nofollow&quot;&gt;The Cubli: A Cube that can Jump Up and Balance&lt;/a&gt;, in Proc. IEEE/RSJ International Conference of Intelligent Robots and Systems (Algarve, Portugal), pp. 3722-3727, October 2012.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-09-20T13:38:16.027" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8099" PostTypeId="2" ParentId="8096" CreationDate="2015-09-20T17:36:12.847" Score="1" Body="&lt;p&gt;I'm not entirely sure what you're asking for because your question&#xA;title mentions control but your question body seems to all be about display. You said,&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;My Question is, How can we implement in MATLAB/C++? So I can store 250 data of sensors as well as 60 points for real time display on the TV.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If you want to store samples for display at some particular interval, try the following:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sensorPeriod = 1/250;&#xA;displayPeriod = 1/60;&#xA;displayInterval = floor (displayPeriod/sensorPeriod);&#xA;sensorData = &amp;lt;read sensor&amp;gt;&#xA;sensorHistory(end+1) = sensorData;&#xA;displayData = sensorHistory(1:displayInterval:end);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You can use any integer to select indices of an array in Matlab. The value is optional and if you don't specify it then it defaults to 1. So, for instance, where&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;displayData = data(1:end);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;would put every data point into &lt;code&gt;displayData&lt;/code&gt;, the following:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;displayData = data(1:N:end);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;would take every Nth point and put that into &lt;code&gt;displayData&lt;/code&gt;. Dividing display period by the sample period gives the number of samples that occur between each displayed frame. Take the floor of that to get an integer because Matlab can only handle integer indexing of arrays. &lt;/p&gt;&#xA;&#xA;&lt;h2&gt;:EDIT:&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;As I go through your code, here are things that I notice:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;% Display main window using Psychtoolbox&#xA;&#xA;win=Screen(2,'OpenWindow',[1 1 1])&#xA;&#xA;while (1)&#xA;  % Setup for data collection at 250Hz&#xA;  Error   = calllib('ATC3DG64', 'GetSynchronousRecord',  hex2dec('ffff'), pRecord, 4*numBoards*64);&#xA;  errorHandler(Error);&#xA;  Record = get(pRecord, 'Value');&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This section all appears to look okay, and it appears to me that &lt;code&gt;Record&lt;/code&gt; is the data point you are interested in storing. There is no reference to 'ATC3DG64' or 'pRecord', but there is also no complaint about &lt;em&gt;retrieving&lt;/em&gt; data, so I can only assume this works okay. However, I would like to note that the &lt;a href=&quot;http://www.mathworks.com/help/matlab/ref/calllib.html&quot; rel=&quot;nofollow&quot;&gt;calllib()&lt;/a&gt; function accepts &lt;em&gt;arguments&lt;/em&gt; inside the parenthesis, not &lt;em&gt;outputs&lt;/em&gt;, so I don't see where/how &lt;code&gt;pRecord&lt;/code&gt; ever gets updated. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  %sensor number&#xA;  count=2;&#xA;&#xA;  evalc(['tempPos(1, count) ='  'Record.x' num2str(count - 1)]);&#xA;  evalc(['tempPos(2, count) ='  'Record.y' num2str(count - 1)]);&#xA;  evalc(['tempPos(3, count) ='  'Record.z' num2str(count - 1)]);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I do not know why you are using &lt;a href=&quot;http://www.mathworks.com/help/matlab/ref/evalc.html&quot; rel=&quot;nofollow&quot;&gt;evalc&lt;/a&gt; to do this. That function evaluates an argument and copies the output to a variable, but you don't make an output assignment. Instead you're just converting everything to a string to make Matlab parse the string, when you could just leave everything off and call the functions directly. Also, your string conversion doesn't leave you with a proper indexing for the &lt;code&gt;Record.x&lt;/code&gt; functions. You wind up calling:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;tempPos(1, count) =Record.x 0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;when you probably should be calling&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;tempPos(1, count) =Record.x(0)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If you are using &lt;code&gt;evalc()&lt;/code&gt; to suppress the output, you can always do that with a semicolon at the end of the line. I think you should probably re-write this section of code to the following:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;tempPos(1, count) = Record.x(count-1);&#xA;tempPos(2, count) = Record.y(count-1);&#xA;tempPos(3, count) = Record.z(count-1);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Moving on...&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  % Record X and Y position of  sensor 2&#xA;&#xA;  if SensorNumAttached(count)&#xA;    % Real time position and minus world origin so that real&#xA;    % time position display on the TV&#xA;    table1(count,1)=(2.54*tempPos(2,count))-X_world_origin;&#xA;    table1(count,2)=(2.54*tempPos(3,count))-Y_world_origin;&#xA;  end &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The function &lt;code&gt;SensorNumAttached()&lt;/code&gt; is not a Matlab function, so I don't know what that is checking for. That said, this portion of the code is a little confusing because you switch between indexing the data to the sensor on the columns to indexing on the rows, but otherwise this looks okay. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  % Some conversion for the Pixel to centimeter ratio&#xA;  x_center_new = x_center - (x_ratio * table1(2,1));&#xA;  y_center_new = y_center - (y_ratio * table1(2,2));&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This section of code will not do what you want it to do. This looks like you are trying to update coordinates, but you are combining a relative position with an absolute position. It looks like you are trying to go for:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  x_center_new = &amp;lt;old center&amp;gt; + &amp;lt;difference between old center and new center&amp;gt;;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;When in actuality you have:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  x_center_new = &amp;lt;old center&amp;gt; + &amp;lt;difference between origin and new center&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I may be wrong here, because you never set &lt;code&gt;x_center = x_center_new&lt;/code&gt;, which is either a mistake or it &lt;em&gt;could&lt;/em&gt; be that &lt;code&gt;x_center&lt;/code&gt; is some offset information. I don't think this is the case, though, because there is no &lt;code&gt;x_center(count)&lt;/code&gt;, which means you don't have a distinct &lt;code&gt;x_center&lt;/code&gt; for both sensors. Also of note - you don't reference &lt;code&gt;count&lt;/code&gt; in this code at all, so you're updating both sensor displays with only one (#2's) position information. I would suggest you change this code to be:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  x_center_new = x_ratio * table(count,1);&#xA;  y_center_new = y_ratio * table(count,2);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Moving on. . . &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  % conversion for display circle on the TV, is represent the real time position of the sensor&#xA;  x1  =round(x_center_new - R_num_data);&#xA;  y1 = round(y_center_new - R_num_data);&#xA;&#xA;  x2 = round(x1 + 2*R_num_data);&#xA;  y2 = round(y1 + 2*R_num_data);&#xA;&#xA;&#xA;  % Display command for TV.      &#xA;  Screen('FrameOval',win,[255 0 0], [x1 y1 x2 y2]);&#xA;  Screen('Flip',win);&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;For this section, &lt;code&gt;Screen&lt;/code&gt; is also not a Matlab function, so I'm not sure what it does, and &lt;code&gt;R_num_data&lt;/code&gt; is not defined in the code snippet you provided, so I don't know what that does, either. I would like to reiterate that, by your code, the display here never showed anything for sensor 1 because your &lt;code&gt;x_center_new&lt;/code&gt; used a hard-coded '2' instead of 'count'. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding display, there are two ways that you can go about showing data:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Collect the data in real time, then show the video after the fact. &lt;/li&gt;&#xA;&lt;li&gt;Collect the data and display in real time. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;If you attempt to display in real time, Matlab rendering will almost certainly hamper your data collection as I've found it seems to be generally about 100ms for Matlab to draw a basic scene. Also, if you collect data and display in real time with no bounds on time, you can't pre-allocate the memory for data storage, which can cause the program to run slower. That said, here's some sample code you can throw into your script for display:&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Method 1&lt;/h2&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;nSensors = 2;       % Number of sensors&#xA;nOutputs = 3;       % How many outputs each sensor gives you&#xA;sampleDuration = 1; % Sample time in [s]&#xA;samplePeriod = 1/250; % Sampling period in [s]&#xA;displayPeriod = 1/60; % Display period in [s]&#xA;&#xA;nDataPoints = floor(sampleDuration/samplePeriod);&#xA;&#xA;sensorData = zeros(nOutputs,nSensors,nDataPoints);&#xA;&#xA;count = 2;          % Whatever method you want to select the sensor&#xA;for i = 1:nDataPoints&#xA;  &amp;lt;whatever method you need to get the data&amp;gt;&#xA;  Record = get(pRecord, 'Value');&#xA;  sensorData(1,count,i) = Record.x(count-1);&#xA;  sensorData(2,count,i) = Record.y(count-1);&#xA;  sensorData(3,count,i) = Record.z(count-1);&#xA;&#xA;  &amp;lt;any other things you want to do with the data&amp;gt;&#xA;end&#xA;&#xA;sampleInterval = floor(displayFreq/sampleFreq);&#xA;displayData = nDataPoints(:,:,1:sampleInterval:end);&#xA;&#xA;for i = 1:size(displayData,3)&#xA;   &amp;lt;display 'displayData(:,:,i)'&amp;gt;&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;h2&gt;Method 2&lt;/h2&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;nSensors = 2;       % Number of sensors&#xA;nOutputs = 3;       % How many outputs each sensor gives you&#xA;samplePeriod = 1/250; % Sampling period in [s]&#xA;displayPeriod = 1/60; % Display period in [s]&#xA;&#xA;sensorData = zeros(nOutputs,nSensors,0);&#xA;displayData = zeros(nOutputs,nSensors,0);&#xA;&#xA;frameAdjustment = 0;&#xA;tic;                 % Start a timer&#xA;while 1&#xA;    &amp;lt;whatever method you need to get the data&amp;gt;&#xA;  Record = get(pRecord, 'Value');&#xA;  sensorData(1,count,end+1) = Record.x(count-1);&#xA;  sensorData(2,count,end+1) = Record.y(count-1);&#xA;  sensorData(3,count,end+1) = Record.z(count-1);&#xA;&#xA;  elapsedTime = toc;&#xA;  if elapsedTime + frameAdjustment &amp;gt; displayPeriod&#xA;    frameAdjustment = elapsedTime - displayPeriod;&#xA;    tic;&#xA;    displayData(:,:,end+1) = nDataPoints(:,:,end);&#xA;&#xA;    &amp;lt;display 'displayData(:,:,end)'&amp;gt;&#xA;  end&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Note in the above code that there is a variable, &lt;code&gt;frameAdjustment&lt;/code&gt;. This term can account for the fact that your elapsedTime probably isn't going to sync exactly with your desired frame rate. It remembers how much time you were past the desired display call and calls the next display that much sooner. If the time it takes to display your data is longer than your &lt;code&gt;displayPeriod&lt;/code&gt; then you'll wind up displaying every loop iteration. As mentioned earlier, this could mean that you don't build your &lt;code&gt;sensorData&lt;/code&gt; history at the correct rate. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It looks like maybe the &lt;code&gt;Screen&lt;/code&gt; command could let you bypass the time it takes for Matlab to draw a scene, but I haven't used any third-party Matlab tools so I can't comment on it. Your best bet would be to gather the data first and then display it, but as the designer, it's always up to you. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2015-09-21T14:23:58.397" LastActivityDate="2015-09-21T14:23:58.397" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8100" PostTypeId="1" CreationDate="2015-09-21T09:21:32.540" Score="-1" ViewCount="56" Body="&lt;p&gt;what robotic leg technologies are available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;i'm sorry if this is a basic question i am a software developer looking to get into the field of robotics. i am particularly interested in robotic legs that are similar to those used on Boston Dynamics ATLAS robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;what is the mechanism required that allows it to move its joints so quickly. if you see any videos of many of Boston Dynamics robots they make an engine sound (presumably because it uses an engine), but i cant find any details in the configuration that is being used.&lt;/p&gt;&#xA;" OwnerUserId="10658" LastActivityDate="2015-09-21T10:15:33.383" Title="Robotic legs technologies" Tags="&lt;legged&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2015-09-26T01:35:14.360" ContentLicense="CC BY-SA 3.0" />
  <row Id="8101" PostTypeId="2" ParentId="8100" CreationDate="2015-09-21T10:15:33.383" Score="1" Body="&lt;p&gt;Their &lt;a href=&quot;http://www.bostondynamics.com/robot_Atlas.html&quot; rel=&quot;nofollow&quot;&gt;page for the ATLAS robot&lt;/a&gt; states the joints are hydraulically activated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A number of their other big robots also use hydraulics. For example &lt;a href=&quot;https://en.wikipedia.org/wiki/BigDog&quot; rel=&quot;nofollow&quot;&gt;Big Dog&lt;/a&gt; uses a small motorbike/go-kart engine to run a hydraulic pump which drives cylinders.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Very high budget stuff for an individual developer to get into, I suspect.)&lt;/p&gt;&#xA;" OwnerUserId="9578" LastActivityDate="2015-09-21T10:15:33.383" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8102" PostTypeId="2" ParentId="8087" CreationDate="2015-09-21T20:12:44.500" Score="1" Body="&lt;p&gt;It should be completely safe. Assuming that the 5V BEC on the ESC is not damaged then it &lt;em&gt;is&lt;/em&gt; providing a regulated voltage to your Arduino. Furthermore, the USB port on the Arduino is protected from back current with Zener diodes, thus protecting whatever may be plugged into that port.&lt;/p&gt;&#xA;" OwnerUserId="1075" LastActivityDate="2015-09-21T20:12:44.500" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8103" PostTypeId="1" AcceptedAnswerId="8105" CreationDate="2015-09-22T16:07:28.647" Score="4" ViewCount="1961" Body="&lt;p&gt;I have recently purchased my first ever servo, a cheap unbranded Chinese MG996R servo, for £3.20 on eBay.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/p57Ha.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/p57Ha.jpg&quot; alt=&quot;MG996R clone servo&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am using it in conjunction with a Arduino Servo shield (see below):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/RKe8Z.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/RKe8Z.jpg&quot; alt=&quot;Arduino Servo Shield&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As soon as it arrived, before even plugging it in, I unscrewed the back and ensured that it had the shorter PCB, rather than the full length PCB found in MG995 servos. So, it seems to be a reasonable facsimile of a bona-fide MG996R.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I read somewhere (shame I lost the link) that they have a limited life, due to the resistive arc in the potentiometer wearing out. So, as a test of its durability, I uploaded the following code to the Arduino, which just constantly sweeps from 0° to 180° and back to 0°, and left it running for about 10 to 15 minutes, in order to perform a very simple &lt;em&gt;soak test&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;Servo.h&amp;gt; &#xA;&#xA;const byte servo1Pin = 12;&#xA;&#xA;Servo servo1;                // create servo object to control a servo &#xA;                             // twelve servo objects can be created on most boards&#xA;&#xA;int pos = 0;                 // variable to store the servo position &#xA;&#xA;void setup() &#xA;{ &#xA;  servo1.attach(servo1Pin);  // attaches the servo on pin 9 to the servo object &#xA;  Serial.begin(9600);&#xA;} &#xA;&#xA;void loop() &#xA;{ &#xA;  pos = 0;&#xA;  servo1.write(pos);         // tell servo to go to position in variable 'pos' &#xA;  Serial.println(pos);&#xA;  delay(1000);               // waits 15ms for the servo to reach the position &#xA;&#xA;  pos = 180;&#xA;  servo1.write(pos);         // tell servo to go to position in variable 'pos' &#xA;  Serial.println(pos);&#xA;  delay(1000);               // waits 15ms for the servo to reach the position &#xA;} &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;When I returned, the servo was just making a grinding noise and no longer sweeping, but rather it seemed to be stuck in the 0° position (or the 180°). I picked the servo up and whilst not hot, it was certainly quite warm. A quick sniff also revealed that hot, burning motor windings smell.  After switching of the external power supply and allowing it to cool, the servo began to work again. However, the same issue occurred a little while later. Again, after allowing it to rest, upon re-powering, the servo continues to work.  However, I am reluctant to continue with the soak test, as I don’t really want to burn the motor out, just yet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a common “no-no” of not making servos sweep from extreme to extreme, and one should “play nice” and just perform 60° sweeps, or is the cheapness of the servo the issue here?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am powering the servo from an external bench supply, capable of 3A, so a lack of current is not the issue.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Please note that I also have a follow up question, &lt;a href=&quot;https://robotics.stackexchange.com/questions/8104/should-a-mg996r-servos-extreme-position-change-over-time&quot;&gt;Should a MG996R Servo's extreme position change over time?&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9176" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2015-09-22T17:15:24.697" Title="Overheating/Jamming MG996R servo" Tags="&lt;arduino&gt;&lt;rcservo&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8104" PostTypeId="1" CreationDate="2015-09-22T16:13:59.983" Score="4" ViewCount="183" Body="&lt;p&gt;This question is a follow on from my previous question, &lt;a href=&quot;https://robotics.stackexchange.com/questions/8103/overheating-jamming-servo&quot;&gt;Overheating/Jamming MG996 servo&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have recently purchased my first ever servo, a cheap unbranded Chinese MG996R servo, for £3.20 on eBay.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/p57Ha.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/p57Ha.jpg&quot; alt=&quot;MG996R clone servo&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After mounting the servo horn and the bracket, I realised that I had not mounted the horn in a &lt;em&gt;tout a fait&lt;/em&gt; 0° orientation, rather the angle between the bracket and the servo side was approximately 20°. However, after switching the servo on and off a couple of times, with each time allowing the servo to perform, say, about 10 sweeps each time, I quickly noted that the servo’s extreme positions were changing over time, so that the initial extremes and then the extremes after about 5 on and off cycles, had changed by about 15°, so that now, 0° and 180° the bracket is now parallel with the body of the servo. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was quite surprised at this, as I had assumed that the 0° and 180° positions would be fixed, and not change over time, or vary each time that it was switched on and off.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Seeing as there should be a &lt;em&gt;stop peg&lt;/em&gt; on the gear connected to the potentiometer inside, how is this even possible?&lt;/p&gt;&#xA;" OwnerUserId="9176" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2016-10-06T23:36:20.123" Title="Should a MG996R Servo's extreme position change over time?" Tags="&lt;rcservo&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8105" PostTypeId="2" ParentId="8103" CreationDate="2015-09-22T16:56:25.120" Score="2" Body="&lt;p&gt;You might be driving the servo beyond its limits.  As noted in the pololu.com article “&lt;a href=&quot;https://www.pololu.com/blog/17/servo-control-interface-in-detail&quot; rel=&quot;nofollow&quot;&gt;Servo control interface in detail&lt;/a&gt;”:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If you keep making the pulses wider or narrower, servos will keep moving farther and farther from neutral until they hit their mechanical limits and possibly destroy themselves. This usually isn’t an issue with RC applications since only about half of the mechanical range is ever used, but if you want to use the full range, you have to calibrate for it and be careful to avoid crashing the servo into its limit.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Similarly, the arduino.cc article about &lt;a href=&quot;https://www.arduino.cc/en/Reference/ServoWriteMicroseconds&quot; rel=&quot;nofollow&quot;&gt;Servo.WriteMicroseconds&lt;/a&gt; says (with emphasis I added):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;On standard servos a parameter value of 1000 is fully counter-clockwise, 2000 is fully clockwise, and 1500 is in the middle. [...] some [...] servos respond to values between 700 and 2300. Feel free to increase these endpoints until the servo no longer continues to increase its range. &lt;strong&gt;Note however that attempting to drive a servo past its endpoints (often indicated by a growling sound) is a high-current state, and should be avoided.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I suggest running a calibration, where you drive the servo to different angles, to find out what parameter values are large enough to drive the servo to its extreme positions without overdriving it.&lt;/p&gt;&#xA;" OwnerUserId="478" LastActivityDate="2015-09-22T16:56:25.120" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8106" PostTypeId="1" CreationDate="2015-09-22T17:42:47.440" Score="2" ViewCount="98" Body="&lt;p&gt;I am just starting to explore an idea and I am somewhat of a novice in robotics. I am looking to position a mobile robot as accurately as possible on a concrete slab. This would be during new construction of a building and probably not have many walls or other vertical points for reference. the basic premise behind the robot is to print floor plans straight on to the slab. I will have access to the BIM (building information models, CAD, Revit) files of the building. I want the robot to position itself as accurately as possible on the blank slab using the BIM files as a map. What would be the best avenue to track and adjust positioning of the robot in the open space of a slab? Low frequency, Lidar, wifi? Lastly what sensors would be best?&lt;/p&gt;&#xA;" OwnerUserId="10664" LastActivityDate="2015-09-22T17:42:47.440" Title="2D Positioning of mobile robot" Tags="&lt;mobile-robot&gt;&lt;sensors&gt;&lt;localization&gt;" AnswerCount="0" CommentCount="1" ClosedDate="2015-09-26T01:35:39.390" ContentLicense="CC BY-SA 3.0" />
  <row Id="8107" PostTypeId="1" CreationDate="2015-09-23T03:03:12.967" Score="2" ViewCount="129" Body="&lt;p&gt;Including Q, R, and initial states of x and P.&lt;/p&gt;&#xA;" OwnerUserId="8933" LastActivityDate="2015-09-24T08:39:38.517" Title="Are there systematic ways to tune the Kalman filter in engineering practice?" Tags="&lt;kalman-filter&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8108" PostTypeId="1" AcceptedAnswerId="8110" CreationDate="2015-09-23T09:51:39.470" Score="0" ViewCount="476" Body="&lt;h2&gt;Attempt to clean up:&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I'm trying to use &lt;a href=&quot;http://rctimer.com/product-1127.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this motor&lt;/a&gt; with &lt;a href=&quot;http://www.rctimer.com/product-1279.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this ESC&lt;/a&gt; and an Arduino Uno R3.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typically, I used the PWM pins when I use the Arduino and an ESC, but I can't control the motor even if I use the servo library, and I've also tried sample code from different websites.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ESC has a beep I can't understand. Sometimes it's high-low-high or high for 4 seconds, but I can't find anything on Google. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sometimes the motor spins periodically for a short time, but I don't know why. Some sites recommend using flash or bootloader, but I'd prefer to use Arduino PWM or the servo library. &lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Original post&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Specific ESC is Rctimer Mini ESC16A OPTO SimonK Firmware SN16A ESC..&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can only using ESC(Discussed above..) and RCTimer 1806-1450KV Multi-Rotor BLDC Motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typically, I used PWM pins(3, 9, 10, 11-because similar Signal frequency) when using Arduino-ESC.. but, I can control BLDC Motor even i used to Servo library.. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've been used usual websites example code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just ESC had unknowable beep .. sometime di-ri-di or di(for 4 seconds).. &#xA;I couldn't find that way.. in google (or my country websites)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sometimes, The Motor spins(In a certain value, periodically) for a short time but I don't know why The motor spins&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In google sites, just using flash or Bootloader, but I'll use Arduino PWM or Servo..&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So.. Please! would you please help me?&#xA;Thank you for reading my thread.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/vU9oN.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vU9oN.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/MNUMG.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MNUMG.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10668" LastEditorUserId="9720" LastEditDate="2015-09-23T11:59:59.930" LastActivityDate="2015-09-23T12:07:24.953" Title="How to use specific ESC,BLDC motor through Arduino Uno R3?" Tags="&lt;arduino&gt;&lt;brushless-motor&gt;&lt;esc&gt;&lt;pwm&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8109" PostTypeId="2" ParentId="1858" CreationDate="2015-09-23T11:33:27.420" Score="0" Body="&lt;p&gt;My best guess for this would be that, with a left-handed coordinate system, gravity is positive when you are right side up and negative when you are upside down. As mentioned in my comment, be careful about how you &quot;transform&quot; your coordinate systems - negating &lt;em&gt;all&lt;/em&gt; values just moves you from one octant to another. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-09-23T11:33:27.420" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8110" PostTypeId="2" ParentId="8108" CreationDate="2015-09-23T12:07:24.953" Score="1" Body="&lt;p&gt;An ESC needs to have the throttle limits adjusted before you can use it. While there are many options you can set from a programming menu (see page 4 of &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/uploads/981522291X561242X33.pdf&quot; rel=&quot;nofollow&quot;&gt;this PDF&lt;/a&gt; for reference), the throttle adjustment is pretty straightforward:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Disconnect the battery from the ESC&lt;/li&gt;&#xA;&lt;li&gt;Send and hold a full throttle signal to the ESC&lt;/li&gt;&#xA;&lt;li&gt;Connect the battery to the ESC&lt;/li&gt;&#xA;&lt;li&gt;Wait 2 seconds for a beep-beep (di-di)&lt;/li&gt;&#xA;&lt;li&gt;Send a zero throttle signal to the ESC&lt;/li&gt;&#xA;&lt;li&gt;Hold zero throttle until you hear a long beep&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;If you continue having problems or this doesn't work, check that the battery pack you are using is fully charged and the correct voltage for the ESC you are trying to use.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-09-23T12:07:24.953" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8111" PostTypeId="1" AcceptedAnswerId="8113" CreationDate="2015-09-23T17:12:28.867" Score="9" ViewCount="2731" Body="&lt;p&gt;I'm familiar with using PID to perform closed loop control when there is a single output and a single error signal for how well the output is achieving the desired set-point.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Suppose, however, there are multiple control loops, each with one output and one error signal, but the loops are not fully independent.  In particular, when one loop increases its actuator signal, this changes the impact of the output from other loops in the system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a concrete example, imagine a voltage source in series with a resistor, applying a voltage across a system of six adjustable resistors in parallel.  We can measure the current through each resistor and we want to control the current of each resistor independently by adjusting the resistance.  Of course, the trick here is that when you adjust one resistor's resistance, it changes the overall resistance of the parallel set, which means it changes the voltage drop due to the divider with the voltage source's resistance and hence changes the current through the other resistors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, clearly we have an ideal model for this system, so we can predict what resistance we should use for all resistors simultaneously by solving a set of linear equations.  However, the whole point of closed loop control is that we want to correct for various unknown errors/biases in the system that deviate from our ideal model.  The question then: what's a good way to implement closed loop control when you have a model with this kind of cross-coupling?&lt;/p&gt;&#xA;" OwnerUserId="10670" LastEditorUserId="10670" LastEditDate="2015-09-23T21:40:07.583" LastActivityDate="2015-09-23T21:40:07.583" Title="Multiple control loops with overlapping effects" Tags="&lt;control&gt;&lt;pid&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="8112" PostTypeId="1" CreationDate="2015-09-23T19:13:14.223" Score="0" ViewCount="97" Body="&lt;p&gt;Does anyone out there know where I can get the original iRobot Create?&#xA;The company no longer sells them. &#xA;It was only 2 years ago that it was sold. It is white and its value is the physical design, that it has a large exposed deck for mounting armatures.&#xA;It is preprogrammed to operate in different configurations, eg. spinning, figure 8, following the outline of a wall, etc.&#xA;I have an ongoing art project using this model and as they are in operation everyday, I will eventually need to replace them with new ones.&#xA;To see a video of one of my projects you can go to &lt;a href=&quot;https://vimeo.com/119486779&quot; rel=&quot;nofollow&quot;&gt;https://vimeo.com/119486779&lt;/a&gt;&#xA;I currently have it working in a spinning motion.&lt;/p&gt;&#xA;" OwnerUserId="10671" LastActivityDate="2015-09-24T17:46:15.403" Title="Do you know where to get the original iRobot Create?" Tags="&lt;irobot-create&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="0" ClosedDate="2015-09-26T01:31:25.333" ContentLicense="CC BY-SA 3.0" />
  <row Id="8113" PostTypeId="2" ParentId="8111" CreationDate="2015-09-23T19:38:12.667" Score="9" Body="&lt;p&gt;Typically with a &lt;strong&gt;m&lt;/strong&gt;ultiple &lt;strong&gt;i&lt;/strong&gt;nput, &lt;strong&gt;m&lt;/strong&gt;ultiple &lt;strong&gt;o&lt;/strong&gt;utput (MIMO) system, a control engineer uses a &lt;a href=&quot;https://en.wikipedia.org/wiki/Full_state_feedback&quot;&gt;state feedback controller&lt;/a&gt;. This style of controller leverages a &lt;a href=&quot;https://en.wikipedia.org/wiki/State-space_representation&quot;&gt;state-space model&lt;/a&gt; of the system and generally takes the form:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\dot{x}=\mbox{A}x+\mbox{B}u \\&#xA;y = \mbox{C}x + \mbox{D}u \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $x$ is a vector of states, $u$ is a vector of inputs, $y$ is a vector of outputs, and the time derivative of the states, $\dot{x}$, shows how the states evolve over time, as determined by combinations of states $\mbox{A}$ and inputs $\mbox{B}$. Outputs are also determined by an interaction between states and inputs, but the outputs can be any combination, so the output state and input matrices are different - $\mbox{C}$ and $\mbox{D}$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I won't go into a large amount of detail regarding state feedback controls, but in general, the matrices $\mbox{A} \rightarrow \mbox{D}$ &quot;map&quot; or associate a particular state or input to another state or input. For instance, if you want to model a system of unrelated differential equations, you would get something like:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\dot{x} = \left[ \begin{array}{ccc}&#xA;\dot{x}_1 \\&#xA;\dot{x}_2 \\&#xA;\dot{x}_3 \end{array} \right] = \left[ \begin{array}{ccc}&#xA;k_1 &amp;amp; 0 &amp;amp; 0 \\&#xA;0 &amp;amp; k_2 &amp;amp; 0 \\&#xA;0 &amp;amp; 0 &amp;amp; k_3 \end{array} \right] \left[ \begin{array}{ccc}&#xA;x_1 \\&#xA;x_2 \\&#xA;x_3 \end{array} \right]&#xA;$$&#xA;which represents:&#xA;$$&#xA;\dot{x}_1 = k_1 x_1 \\&#xA;\dot{x}_2 = k_2 x_2 \\&#xA;\dot{x}_3 = k_3 x_3 \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you wanted to add input $u_1$ to the equation for $\dot{x}_1$ and input $u_2$ to $\dot{x}_3$, then you could add a $\mbox{B}u$ term:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\dot{x} = \left[ \begin{array}{ccc}&#xA;\dot{x}_1 \\&#xA;\dot{x}_2 \\&#xA;\dot{x}_3 \end{array} \right] = \left[ \begin{array}{ccc}&#xA;k_1 &amp;amp; 0 &amp;amp; 0 \\&#xA;0 &amp;amp; k_2 &amp;amp; 0 \\&#xA;0 &amp;amp; 0 &amp;amp; k_3 \end{array} \right] \left[ \begin{array}{ccc}&#xA;x_1 \\&#xA;x_2 \\&#xA;x_3 \end{array} \right] + \left[ \begin{array}{ccc}&#xA;1 &amp;amp; 0 \\&#xA;0 &amp;amp; 0 \\&#xA;0 &amp;amp; 1 \end{array} \right] \left[ \begin{array}{ccc}&#xA;u_1 \\&#xA;u_2 \end{array} \right]&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to keep this, but you think that state $x_1$ contributes to how $x_2$ changes, you can add that interaction:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\dot{x} = \left[ \begin{array}{ccc}&#xA;\dot{x}_1 \\&#xA;\dot{x}_2 \\&#xA;\dot{x}_3 \end{array} \right] = \left[ \begin{array}{ccc}&#xA;k_1 &amp;amp; 0 &amp;amp; 0 \\&#xA;\boxed{ k_{x_1 \rightarrow x_2} } &amp;amp; k_2 &amp;amp; 0 \\&#xA;0 &amp;amp; 0 &amp;amp; k_3 \end{array} \right] \left[ \begin{array}{ccc}&#xA;x_1 \\&#xA;x_2 \\&#xA;x_3 \end{array} \right] + \left[ \begin{array}{ccc}&#xA;1 &amp;amp; 0 \\&#xA;0 &amp;amp; 0 \\&#xA;0 &amp;amp; 1 \end{array} \right] \left[ \begin{array}{ccc}&#xA;u_1 \\&#xA;u_2 \end{array} \right]&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you write these out now, you get:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{array} \\&#xA;\dot{x}_1 &amp;amp; = &amp;amp; k_1 x_1 + u_1 \\&#xA;\dot{x}_2 &amp;amp; = &amp;amp; k_{x_1 \rightarrow x_2}x_1 + k_2 x_2 \\&#xA;\dot{x}_3 &amp;amp; = &amp;amp; k_3 x_3 + u_2 \end{array}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can keep building up complexity as your system requires. Once you have a model, for state feedback controls, you need to make sure that the system is &lt;strong&gt;linear&lt;/strong&gt;, in that the system doesn't have trig functions or one state multiplying itself or another state, and make sure that it is &lt;strong&gt;time invariant&lt;/strong&gt;, in that the matrices $\mbox{A} \rightarrow \mbox{D}$ don't change with time - no function of (t) in them. You may be able to make some simplifications, such as a &lt;a href=&quot;https://en.wikipedia.org/wiki/Small-angle_approximation&quot;&gt;small angle approximation&lt;/a&gt; to help get your $\mbox{A}$ matrix into the &lt;strong&gt;LTI&lt;/strong&gt; form required for the next step. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now you can &quot;mask&quot; the entire system into the tidy two equations first shown, hiding the entire $\mbox{A}$ matrix with just the letter 'A', etc. With the &lt;a href=&quot;https://en.wikipedia.org/wiki/Laplace_transform&quot;&gt;Laplace transform&lt;/a&gt; you can (hand-wave) evaluate the uncontrolled, open-loop dynamics of the system. You do this by finding the &lt;a href=&quot;http://demonstrations.wolfram.com/SimulationOfFeedbackControlSystemWithControllerAndSecondOrde/&quot;&gt;poles of the system&lt;/a&gt;, which in term indicate system response. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can also evaluate the system to see if it is &lt;a href=&quot;https://en.wikipedia.org/wiki/Controllability&quot;&gt;controllable&lt;/a&gt;, meaning that you can use your inputs to alter all of the states in a unique manner, and to see if it is &lt;a href=&quot;https://en.wikipedia.org/wiki/Observability&quot;&gt;observable&lt;/a&gt;, meaning that you can actually determine what the values of the states are. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the system is controllable, you can take information about the states, $-\mbox{G}x$, and feed that into the system, using the information you have about the states to drive them to a desired value. Using only the two initial equations for clarity, when you add the control signal to the input you get:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\dot{x} = \mbox{A}x + \mbox{B}(u - \mbox{G}x) \\&#xA;y = \mbox{C}x + \mbox{D}u \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;which becomes:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\dot{x} = \mbox{A}x - \mbox{BG}x + \mbox{B}u \\&#xA;y = \mbox{C}x + \mbox{D}u \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;which can be rearranged as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\dot{x} = [\mbox{A}-\mbox{BG}]x + \mbox{B}u \\&#xA;y = \mbox{C}x + \mbox{D}u \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where before you system response was driven by the $\mbox{A}$ matrix, now it is driven by $\mbox{A-BG}$. You can again evaluate the poles via the Laplace transform, but now you have a gain matrix $\mbox{G}$ you can use to tune the controller, putting the poles wherever you want, which establishes the time response to be whatever you want.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The process continues, with &lt;a href=&quot;https://en.wikipedia.org/wiki/State_observer&quot;&gt;observers&lt;/a&gt; setup to compare the actual system output $y$ with the model's predicted output $\hat{y}$. This is where it's important to note that the outputs don't have to be the same combination of states as you use in the state differential equation - where your states might be a current your output might be a voltage ($R\times I$) so you can make a comparison with a measurable signal on your real system. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Like I said, there is a &lt;em&gt;ton&lt;/em&gt; of information involved with modeling systems and designing state feedback controllers, I just outlined the general process as I believe this is scope you were looking for with your question. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-09-23T19:38:12.667" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8114" PostTypeId="2" ParentId="7983" CreationDate="2015-09-23T23:52:01.780" Score="1" Body="&lt;p&gt;I would suggest that your robot activate a relay which controls power to the heater. This is simpler than solving the original problem of developing the mechanical force to plug it in.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You would use a &quot;power relay&quot;, rated for at least 120Vac and 2.5A, something like &lt;a href=&quot;https://www.digikey.com/product-detail/en/1422037-2/PB1617-ND/2398714&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt;.&#xA;A mobile robot will communicate via internet or local network to a controller which activates a power relay. You will need another small logic board like an ESP8266 to receive communication from your robot and control the relay.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may need a cascade of relays, i.e. controller sends 5Vdc control signal to a 12Vdc relay, which sends a 12Vdc signal to a 120Vac relay, to then power the heater. There may be some prepackaged &quot;power relay controller&quot; out there that already helps accomplish this as well.&lt;/p&gt;&#xA;" OwnerUserId="10672" LastEditorUserId="10596" LastEditDate="2016-11-13T19:47:57.163" LastActivityDate="2016-11-13T19:47:57.163" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8115" PostTypeId="2" ParentId="8107" CreationDate="2015-09-24T08:39:38.517" Score="1" Body="&lt;p&gt;As I understand you are asking for ways to set initial x(the state vector),  initial P (the covariance matrix), the process noise covariance matrix Q and the measurement noise covariance matrix R. For the first two you have to use common sense and any knowledge you have. If you are estimating the position and velocity of a moving vehicle lets say then they should be the initial position of the vehicle and perhaps 0 if you start from stationary. The P matrix can also be calculated based on the uncertainty you have about these initial positions. But you don't have to worry too much about these because they will converge. The R matrix is usually taken from the spec sheet of your sensors and contains the accuracy(variance) of the sensor. This tutorial will help with the estimate of the Q matrix &lt;a href=&quot;http://www.robots.ox.ac.uk/~ian/Teaching/Estimation/LectureNotes2.pdf&quot; rel=&quot;nofollow&quot;&gt;http://www.robots.ox.ac.uk/~ian/Teaching/Estimation/LectureNotes2.pdf&lt;/a&gt;. Finally there is a good way to verify if your estimate of Q is good. Just look at the innovation(z-Hx_pred) and innovation covariance matrix. If the innovation for the states is not within 2 std.devs (as taken for the innovation covariance matrix) then you are underestimating the noise.&lt;/p&gt;&#xA;" OwnerUserId="10542" LastActivityDate="2015-09-24T08:39:38.517" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8116" PostTypeId="1" CreationDate="2015-09-24T15:54:58.987" Score="2" ViewCount="1428" Body="&lt;p&gt;I am trying to build a map containing lamps as landmarks. I drive around with a robot and a monocular camera looking to the ceiling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first step is detect the edges of each observed rectangular lamp and save the position in pixels and also the current position from odometry of the robot. After the lamp disappears from the field of view, there is enough base-line to do a 3D reconstruction based on structure from motion. Once this reconstruction is done there will be uncertainty in the position of the lamps that can be modelled by covariance. Imagine if the robot was driving for a while, its own position estimated from odometry will also have a relatively high incertitude, how can I integrate all of those incertitudes together in the final covariance matrix of the position of each lamp?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I understand well there would be the following covariances:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;noise from camera&lt;/li&gt;&#xA;&lt;li&gt;Inaccurate camera calibration matrix&lt;/li&gt;&#xA;&lt;li&gt;inaccurate result from optimization&lt;/li&gt;&#xA;&lt;li&gt;drift in odometry&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;My goal is to manually do loop closure using for example g2o (graph optimization) and for that I think correct covariances are needed for each point.&lt;/p&gt;&#xA;" OwnerUserId="4429" LastActivityDate="2015-09-28T20:55:26.073" Title="Covariance and optimization" Tags="&lt;slam&gt;&lt;cameras&gt;&lt;3d-reconstruction&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8117" PostTypeId="2" ParentId="8112" CreationDate="2015-09-24T17:46:15.403" Score="1" Body="&lt;p&gt;iRobot is no longer selling original Creates.  So your best bet is a secondary market like eBay.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the new Create 2 has the same API as the original.  (Using the Serial Command Interface, not the command module).  It did remove some of the lesser used functions like scripting, but added and improved many features.  Additionally, it is a more robust robot overall, and it even has a rechargeable battery.  I'd be surprised if the new Create 2 didn't work for your application.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-09-24T17:46:15.403" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8119" PostTypeId="2" ParentId="8116" CreationDate="2015-09-25T14:30:47.077" Score="1" Body="&lt;p&gt;This is the basic slam problem. You have to find out (model) how the uncertainty of the robot affects the uncertainty of the landmarks, and visa-versa. This is done using the cross-correlation terms of the uncertainty. Or, the &lt;em&gt;covariance&lt;/em&gt;. Those four things you referred to as covariances are actually &lt;em&gt;variances&lt;/em&gt;. The covariance describes how the uncertainties in one thing bleed over to create uncertainty in the other things. This sounds terrible, but actually, if you reduce uncertainty in one thing, then the fact that two things &lt;em&gt;co-vary&lt;/em&gt; allows you to reduce uncertainty in two things. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;See, when you discuss covariance of the robot's position, what you mean is something like a 2x2 matrix. The matrix has multiple terms, two variances in the principal x-y directions, and the covariance of the x uncertainty and the y uncertainty. So you're already doing SLAM. Sorta.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you have to do for $N$ lamps in $2D$ space and 1 robot moving in $2D$, is construct the giant $2\times (N+1)$ by $2\times (N+1)$ matrix.  &lt;em&gt;How&lt;/em&gt; to do this is mechanically straightforward, but an intuitive understanding is difficult to build up. I'm sure someone will come along that has a better mechanical answer for you. But until then, you might check out Probabilistic Robotics, by Thrun.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example. Let's say you have one landmark, and one robot. Both are on the line, and so the state is simply their $x$ position. (This greatly simplifies the problem). Then, let's say the robot measures the distance (with direction) to the landmark. The the &lt;em&gt;measurement function&lt;/em&gt; (which describes what the robot measures) is &#xA;$$h=x_l - x_r$$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We'll use the EKF update equations to find the covariance of the robot-landmark state. Note, this will be a $2\times 2$ matrix, given the discussion above. We're not really limited to the EKF update equations. Most estimators use the same equation to estimate the covariance of the state. If you really want to know more about this, read up on the Fisher Information Matrix, which is the gold standard for covariance estimation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back to the topic at hand.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The full state covariance matrix after the robot moves with some uncertain actuation is given by:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ P = F^T P F + G $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and after the measurement, is given by&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ P = \left( P^{-1} + H^T R^{-1} H \right)^{-1} $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here, $R$ is the measurement noise, $H$ is the jacobian of the measurement function with respect to the state, $F$ is the jacobian of the update function (the kinematics) with respect to the state, and $G$ is the noise matrix for the controls.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In our case, &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$H &#xA;=\begin{bmatrix} \frac{\partial h}{x_r}, \frac{\partial h}{x_l} \end{bmatrix}\\&#xA;=\begin{bmatrix} -1, 1 \end{bmatrix}\\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Suppose the robot's position is known up to variance $\sigma_r^2$ and the measurement is corrupted by zero-mean noise with variance $\sigma_s^2$. Then, when the landmark is measured, (assuming a diagonal starting covariance)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ P^{-1} = &#xA;\begin{bmatrix} &#xA;\frac{1}{\sigma_r^2}, 0\\ &#xA;0, \frac{1}{\sigma_l^2}&#xA;\end{bmatrix}&#xA;+&#xA;\begin{bmatrix} -1\\ 1 \end{bmatrix}&#xA;\frac{1}{\sigma_s^2}&#xA;\begin{bmatrix} -1, 1 \end{bmatrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Simplifying,&#xA;$$&#xA;P^{-1}=&#xA;\begin{bmatrix} &#xA;\frac{1}{\sigma_r^2}, 0\\ &#xA;0, \frac{1}{\sigma_l^2}&#xA;\end{bmatrix}+&#xA;\frac{1}{\sigma_s^2}&#xA;\begin{bmatrix} 1, -1\\-1,1 \end{bmatrix}&#xA;$$&#xA;Implying,&#xA;$$&#xA;P=&#xA;\begin{bmatrix} &#xA;\frac{1}{\sigma_r^2} +\frac{1}{\sigma_s^2}&amp;amp; &#xA;-\frac{1}{\sigma_s^2}\\ &#xA;-\frac{1}{\sigma_s^2}&amp;amp; &#xA;\frac{1}{\sigma_l^2}+\frac{1}{\sigma_s^2}&#xA;\end{bmatrix}^{-1}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The previous defines a &lt;em&gt;computational&lt;/em&gt; way to calculate the covariance after a measurement. A similar method using the control function to get the matrix $F$ will get you the update step.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To get this in closed form, just carry the partial derivatives through. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or, a better way:&#xA;In general, the matrix on the right is known as the Fisher Information, with the caveat that the matrix $H$ is not linearized at the true target location. To construct an arbitrary covariance matrix from scratch, you can do so by noting that the FIM has each i,j element given by (assuming gaussian noise), for state vector $x$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{bmatrix}&#xA;\frac{\partial h}{x(i)}\ln \mathcal{L}(x)&#xA;\frac{\partial h}{x(j)}\ln \mathcal{L}(x)&#xA;\end {bmatrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the previous, $\mathcal{L}(\cdot)$ is the liklihood function of the measurements. In this case, a Gaussian.&#xA;This derivation is covered in &lt;a href=&quot;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.58.5090&amp;amp;rep=rep1&amp;amp;type=pdf&quot; rel=&quot;nofollow&quot;&gt;this thesis&lt;/a&gt; and also &lt;a href=&quot;http://josh.vanderhook.info/media/pdf/thesis.pdf&quot; rel=&quot;nofollow&quot;&gt;this one&lt;/a&gt; (with the full disclosure that the second one is mine).&lt;/p&gt;&#xA;" OwnerUserId="163" LastEditorUserId="163" LastEditDate="2015-09-28T20:55:26.073" LastActivityDate="2015-09-28T20:55:26.073" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="8120" PostTypeId="1" AcceptedAnswerId="8121" CreationDate="2015-09-25T21:16:11.547" Score="0" ViewCount="40" Body="&lt;p&gt;I have extremely limited knowledge in the general topic of robotics and therefore this question is a shot in the dark. Please let me know if the topic is unsuitable for the site.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am interested in creating a device that would generate a touchscreen tap. In a nutshell, I would like to replicate on a touchscreen the automated mouse functionality you can obtain with software like AutoHotKey in Windows. Since, without jailbreaking the phone, a software solution is basically impossible, it occurs that one of the first components would be a physical device that simulates a tap. Do any options for such a component exist?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I recognize that there are philosophical implications with creating such a device. I am assuming the entire conversation to be theoretical and solely related to the hardware design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks,&#xA;Alex&lt;/p&gt;&#xA;" OwnerUserId="10680" LastActivityDate="2015-09-26T17:00:16.540" Title="Device to generate screen tap response" Tags="&lt;automatic&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8121" PostTypeId="2" ParentId="8120" CreationDate="2015-09-26T17:00:16.540" Score="1" Body="&lt;p&gt;As I mentioned in &lt;a href=&quot;https://robotics.stackexchange.com/questions/2553/capacitive-touch-input-robot-to-remote-access-ipad&quot;&gt;this other question&lt;/a&gt; on the same topic, it should be easy to put a stylus on a small robot arm.  Note that since you don't need a lot of elevation difference, a &lt;a href=&quot;https://en.wikipedia.org/wiki/Cartesian_coordinate_robot&quot; rel=&quot;nofollow noreferrer&quot;&gt;gantry&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/Delta_robot&quot; rel=&quot;nofollow noreferrer&quot;&gt;Delta&lt;/a&gt;, or &lt;a href=&quot;https://en.wikipedia.org/wiki/SCARA&quot; rel=&quot;nofollow noreferrer&quot;&gt;SCARA&lt;/a&gt; style robot is probably better than a &quot;traditional&quot; robot arm.&lt;/p&gt;&#xA;" OwnerUserId="110" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2015-09-26T17:00:16.540" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8122" PostTypeId="1" AcceptedAnswerId="8123" CreationDate="2015-09-26T17:16:51.937" Score="0" ViewCount="328" Body="&lt;p&gt;A have designed a robot to perform tasks in farms.  But the problem now is I'm not sure on the best way to supply continuous power to my robot.  All the motors are rated at 12V and only Arduino and a few sensors work at 5V or less.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can I continuously charge a 12V lead acid battery with an adapter (comes with the battery) plugged into the AC output of the generator while the robot is operating? Do I have to worry about overcharging the battery?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or should I use the generator's DC output which can supply 12V and up to 8.3Amp. Or is there any other suggestions?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some information about the adapter which are stated on the package:&#xA;1. Built-in over-charge protection device.&#xA;2. Built-in thermal protection device&#xA;3. Output: 6v/12v 2Amp&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the generator that I have: &#xA;&lt;a href=&quot;http://global.yamaha-motor.com/business/pp/generator/220v-60hz/0-1/et950/&quot; rel=&quot;nofollow&quot;&gt;http://global.yamaha-motor.com/business/pp/generator/220v-60hz/0-1/et950/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is my first robot which is quite big that requires a lot of electrical/electronic knowledge to power it. I do not have a lot of experience in this field. So any feedback is greatly appreciated.&lt;/p&gt;&#xA;" OwnerUserId="10691" LastEditorUserId="10691" LastEditDate="2015-09-26T18:27:00.670" LastActivityDate="2015-09-26T18:27:00.670" Title="Powering my robot with 12V battery which is charged by a gas/petrol generator while the robot is operating?" Tags="&lt;electronics&gt;&lt;power&gt;&lt;battery&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8123" PostTypeId="2" ParentId="8122" CreationDate="2015-09-26T17:47:50.293" Score="2" Body="&lt;p&gt;The alternator in a car is constantly charging the 12V battery while the car is running, which is to say battery-wise you shouldn't have any issues. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Several things could be meant when you say the motors are &quot;rated&quot; for 12V. Is that a maximum, minimum, or nominal voltage? I'm assuming they're rated for DC power, but there are some low voltage AC motors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I recall correctly, I &lt;em&gt;think&lt;/em&gt; a vehicle 12V bus could swing from dead battery voltage of 11.8 to a charging voltage of 14.4V, so you should check that you aren't violating any ratings on the motors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the electronics I would use a 5V DC-DC converter. You should consider a 12V-12V DC-DC converter for power conditioning if the generator output is too noisy. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only reason I would consider using a battery is if the generator can't supply the peak current you need or if you have to be able to run some functions without the generator on. Remember that the generator must supply more than the average power draw or you'll always wind up running the batteries dead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lastly, some generators may require a minimum load for proper voltage regulation, so be sure to check. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-09-26T17:47:50.293" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="8124" PostTypeId="1" CreationDate="2015-09-26T18:20:48.563" Score="0" ViewCount="56" Body="&lt;p&gt;I have a system with two inputs (throttle and brake) and one output (speed). How does one design a controller in such a way that the two outputs of the controller (throttle and brake) are never both greater than zero (so that it doesn't accelerate and brake simultaneously)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="4017" LastEditorUserId="187" LastEditDate="2015-09-29T15:09:11.193" LastActivityDate="2015-09-30T18:37:43.357" Title="Two exclusive inputs control" Tags="&lt;control&gt;&lt;automation&gt;" AnswerCount="2" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="8125" PostTypeId="2" ParentId="8124" CreationDate="2015-09-26T21:28:07.543" Score="3" Body="&lt;p&gt;The system is nonlinear for acceleration. If the desired acceleration value is bigger than 0, use the throttle, if smaller than 0, use the break.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other than that, you should be fine using a cascaded control loop with an inner acceleration loop and an outer speed control loop. Despite the fact that it has a discontinuity in the acceleration control loop, you should be able to treat it as a linear one if both break and throttle can be set to arbitrary small values, creating a smooth transition between the use of throttle and break at 0 acceleration.&lt;/p&gt;&#xA;" OwnerUserId="9860" LastActivityDate="2015-09-26T21:28:07.543" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8127" PostTypeId="1" CreationDate="2015-09-27T11:26:30.933" Score="0" ViewCount="514" Body="&lt;p&gt;I have some sensors attached to Arduino Uno r3 and an ESC. I start the Motor attached to ESC through Arduino with no USB connected to laptop. It starts correctly. There is a must that I will have to start the Arduino from non USB supply so that ESC is correctly started, which means that my motor doesn't start with USB connected to PC. Now, how can I get the sensor values to a laptop? If I connect the USB to the PC after starting the motor, will this work?&lt;/p&gt;&#xA;" OwnerUserId="10580" LastEditorUserId="19515" LastEditDate="2020-08-08T17:47:55.567" LastActivityDate="2020-08-08T17:47:55.567" Title="Can I connect the Arduino usb to laptop after the Arduino is started?" Tags="&lt;arduino&gt;&lt;esc&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8128" PostTypeId="1" CreationDate="2015-09-27T15:26:43.933" Score="3" ViewCount="11504" Body="&lt;p&gt;I want to create a virtual quadcopter model, but I am struggling to come up with a satisfying model for the brushless motors &amp;amp; props.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's take an example, based on the great &lt;a href=&quot;http://www.ecalc.ch/xcoptercalc.php?ecalc&amp;amp;lang=en&quot; rel=&quot;nofollow noreferrer&quot;&gt;eCalc tool&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/LbTmc.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/LbTmc.png&quot; alt=&quot;eCalc&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's say I want to know how much current is consumed by the motor in a hovering state. I know the mass of the quad (1500g), so I can easily compute the thrust produced by each motor:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Thrust = 1.5 * 9.81 / 4 = 3.68 N per motor&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.wired.com/2014/05/modeling-the-thrust-from-a-quadcopter/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Thrust is produced by moving a mass of air&lt;/a&gt; at an average speed of &lt;code&gt;V&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Thrust = 0.5 * rho * A * V²&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Where &lt;code&gt;rho&lt;/code&gt; (air density) is 1.225kg/m3 and &lt;code&gt;A&lt;/code&gt; (propeller disk area) is &lt;code&gt;PI * Radius² = 0.073m²&lt;/code&gt; (12&quot; props). So I can compute &lt;code&gt;V&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;V = sqrt(Thrust / 0.5 / rho / A) = 9.07 m/s&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;All right, now I can calculate the &lt;em&gt;aerodynamic&lt;/em&gt; power created by the propeller:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;P = Thrust * V = 3.68 * 9.07 = 33.4 W&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;All right, now I can calculate the &lt;em&gt;mechanical&lt;/em&gt; power actually produced by the motor. I use the &lt;code&gt;PConst&lt;/code&gt; efficiency term from eCalc:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Pmec = Paero * PConst = 33.4 * 1.18 = 39.4W&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Here, eCalc predicts &lt;strong&gt;37.2W&lt;/strong&gt;. It's not too far from my number, I imagine they use more sophisticated hypotheses... Fair enough.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From &lt;a href=&quot;http://www.rcgroups.com/forums/showthread.php?t=587549&quot; rel=&quot;nofollow noreferrer&quot;&gt;this post&lt;/a&gt;, I know that this power is also equal to:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Pmec = (Vin - Rm * Iin) * (Iin - Io)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Where I know &lt;code&gt;Rm&lt;/code&gt; (0.08 Ohms) and &lt;code&gt;Io&lt;/code&gt; (0.9 A). So, finally, my question: How do you calculate &lt;code&gt;Vin&lt;/code&gt; and &lt;code&gt;Iin&lt;/code&gt; from here? Of course, if I knew the rotation speed of the engine I could get &lt;code&gt;Vin&lt;/code&gt; from:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;n = Kv * Vin&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Where &lt;code&gt;Kv = 680 rpm/V&lt;/code&gt;. But unfortunately I don't know the rotation speed...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Note that Vin is assumed to be averaged from the &lt;a href=&quot;https://en.wikipedia.org/wiki/Pulse-width_modulation&quot; rel=&quot;nofollow noreferrer&quot;&gt;pulse-width-modulated&lt;/a&gt; output produced by the ESC)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks for your help!&lt;/p&gt;&#xA;" OwnerUserId="10696" LastEditorUserId="10696" LastEditDate="2015-09-28T15:56:42.070" LastActivityDate="2018-09-03T22:26:11.013" Title="How to calculate the current consumed by a brushless motor on a quadcopter" Tags="&lt;motor&gt;&lt;quadcopter&gt;&lt;brushless-motor&gt;&lt;electronics&gt;&lt;power&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8129" PostTypeId="1" AcceptedAnswerId="8131" CreationDate="2015-09-27T15:48:56.970" Score="6" ViewCount="971" Body="&lt;p&gt;Not sure if this has been asked, but there are lots of simulations of bipedal locomotion algorithms online, some of the evolutionary algorithms converge to very good solutions. So it seems to me that the algorithm part of bipedal locomotion is well-understood.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you can do well on simulations, you should be able to do it well in the real world. You can model delay and noise, you can model servo's response curve.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I don't understand is then why is it still difficult to make a walking robot? Even a robot like the Big Dog is rare.&lt;/p&gt;&#xA;" OwnerUserId="10698" LastActivityDate="2015-09-27T19:22:43.870" Title="Why are bipedal robots difficult?" Tags="&lt;walk&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8130" PostTypeId="1" CreationDate="2015-09-27T16:20:49.177" Score="6" ViewCount="1018" Body="&lt;p&gt;I have built a mobile robot with several ultrasonic sensors to detect obstacles and an infrared sensor to track a line as a path. I have written a simple algorithm to follow the line which works fine, but avoiding obstacles are a problem because the robot doesn't know the layout of the path, so even if it does move around the obstacle, it is not guaranteed that it will find the path line again(unless the line is perfectly straight). Therefore, I think I may need to use a path/motion planning algorithm or find a way to store the layout of the path so that robot could predict where to move and get back to the path line and keep on following after overcoming an obstacle. I would like to hear suggestions or types of algorithms I should focus on for this specific problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Picture might help specifying the problem I'm facing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/pSmil.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/pSmil.png&quot; alt=&quot;path issue&quot;&gt;&lt;/a&gt;&#xA;Thank you.&lt;/p&gt;&#xA;" OwnerUserId="10697" LastEditorUserId="10697" LastEditDate="2015-09-27T23:00:47.170" LastActivityDate="2017-11-19T07:51:07.113" Title="Line following robot path planning" Tags="&lt;motion-planning&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8131" PostTypeId="2" ParentId="8129" CreationDate="2015-09-27T19:22:43.870" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;If you can do well on simulations, you should be able to do it well in the real world.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There's this lovely saying:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In theory, there is no difference between theory and practice.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;And what that implies for practice goes without saying. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;You can model delay and noise, you can model servo's response curve.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;A simulation is only as good as the model it is simulating. We like simple models. We don't like nonlinear things. We don't like to deal with too many variables...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That something works well in a simulation is often a necessary condition to be able to do it in the real world, but it's not necessarily (pun intended) a sufficient one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given all the necessary information doesn't mean it's possible to do it or reasonable to do so. Maybe we know how to do the calculations and have all the input, but cannot do the calculations quick enough with a reasonable sized processor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It appears to me that your reasoning is that because we are able to do it, we should be doing it. There are plenty of other reasons to do (or &lt;strong&gt;not&lt;/strong&gt; do) something aside from the mere possibility of doing it. Maybe it is in fact possible to build a robot with bipedal locomotion. &lt;strong&gt;It's quite possible that the difficulty in actually doing it is in finding a reason to do so.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would that bipedal robot be faster than a robot with wheels? More stable? Would it require less energy? How well would it work on different terrain? Will the money required for further research and testing pay off later in any way?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A lack of benefits or at least lack of obvious benefits is a major difficulty to develop something. Running a computer simulation is one thing, but building a physical robot (and designing one before that) requires funding which requires making rich people interested in finding a solution to the problem.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;some of the evolutionary algorithms converge to very good solutions&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Speaking of evolution, bipedal motion is not exactly the most popular one.&#xA;And it isn't the best one either, because no matter how successful you consider the bipedal homo sapiens, one thing he did was to invent other forms of locomotion superior to his bipedal one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It looks like this is one of those research topics that we'd like to solve so we can claim that we are able to do it, but other technologies (drones fro example) seem to offer more and more obvious advantages.&lt;/p&gt;&#xA;" OwnerUserId="9860" LastActivityDate="2015-09-27T19:22:43.870" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8132" PostTypeId="2" ParentId="8130" CreationDate="2015-09-28T07:23:39.847" Score="4" Body="&lt;p&gt;Line following is a simple reactive behaviour. Before you get into planning to solve the obstacle avoidance problem - which can get quite complex - you should consider simpler solutions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What this simpler solution could be depends a bit on the environment and on your robot. But let me make a suggestion:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;while()&#xA;    follow line&#xA;    if( detect obstacle )&#xA;         turn left (leave line)&#xA;         while( not detect line )&#xA;             keep obstacle within distance d to the right&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The devil is in the implementation and sensor setup, but the principle idea is that you track the contours of your obstacle to get you back to your line.&lt;/p&gt;&#xA;" OwnerUserId="127" LastActivityDate="2015-09-28T07:23:39.847" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="8133" PostTypeId="1" AcceptedAnswerId="8136" CreationDate="2015-09-28T09:40:35.993" Score="2" ViewCount="67" Body="&lt;p&gt;I am reading &quot;Computer Vision: Models, Learning, and Inference&quot; in which author writes at several points (like on page 428-429) that although matrix &lt;strong&gt;A&lt;/strong&gt; seems to have 'n' degree of freedom but since it is ambiguous up to scale so it only has 'n-1' degree of freedom? Can anyone explain what this thing means? Why one degree of freedom is decreased?&lt;/p&gt;&#xA;" OwnerUserId="10536" LastActivityDate="2015-09-28T16:01:09.677" Title="&quot;Ambiguous up to scale&quot; , Explanation required" Tags="&lt;computer-vision&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8136" PostTypeId="2" ParentId="8133" CreationDate="2015-09-28T16:01:09.677" Score="3" Body="&lt;p&gt;I don't have access to the quoted reference, but believe the explanation (stated, for simplicity, in terms of a vector rather than a matrix) below will apply. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider an  $n$-element vector $V$.  In general, there are $n$ degrees of freedom for populating the vector.  However, if scale is unimportant or of no account, that is, if all scalar multiples $a V$ are taken as equivalent, then we might as well scale $V$ so that $||V|| = 1$ (ie has unit length).  In this case, we have at most $n-1$ degrees of freedom, because specifying any $n-1$ elements of a unit length vector forces the value of the remaining element.&lt;/p&gt;&#xA;" OwnerUserId="478" LastActivityDate="2015-09-28T16:01:09.677" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8140" PostTypeId="1" CreationDate="2015-09-29T13:33:17.430" Score="0" ViewCount="219" Body="&lt;p&gt;I'm trying to build a robot that can be sent into rooms/buildings and detect people using nxt and/or Arduino. In addition to this I would like to be able to view what my robot is &quot;seeing&quot; in real-time on my PC as an infrared image. The sensors I've shortlisted for this are:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.generationrobots.com/en/401177-thermal-infrared-nxt-sensor-dexter-industries.html&quot; rel=&quot;nofollow&quot;&gt;Thermal Infrared NXT Sensor from Dexter industries - £44&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.robotshop.com/uk/roboard-rm-g212-thermal-array-sensor.html#reviewBox&quot; rel=&quot;nofollow&quot;&gt;RoBoard RM-G212 16X4 Thermal Array Sensor - £94&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://uk.farnell.com/omron-d6t-mems-thermal-ir-sensor&quot; rel=&quot;nofollow&quot;&gt;Omron D6T MEMS Thermal IR Sensor - £31&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I believe the RoBoard and Omron sensors are capable of thermography, so I was wondering if anyone here has experience with these sensors and give me some advice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was also thinking about using an idea from this project: www.robotc.net/blog/tag/dexter-industries.&lt;br&gt;&#xA;In this case I'd use the data read from the sensor to plot a graph showing different temperatures.   &lt;/p&gt;&#xA;" OwnerUserId="10715" LastEditorUserId="411" LastEditDate="2015-10-19T05:43:03.470" LastActivityDate="2015-10-19T05:43:03.470" Title="&quot;Thermal Imaging&quot; with Arduino and/or Lego Mindstorm NXT 2.0?" Tags="&lt;mobile-robot&gt;&lt;sensors&gt;&lt;nxt&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="8141" PostTypeId="2" ParentId="8128" CreationDate="2015-09-29T13:42:49.047" Score="1" Body="&lt;p&gt;The missing piece was the expression of the pitch speed, which relates the parameter &lt;code&gt;V&lt;/code&gt; with the rotation speed &lt;code&gt;n&lt;/code&gt; and the &lt;code&gt;pitch&lt;/code&gt; of the propeller:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;V = n x pitch x (0.0254 / 60)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(The coefficient passes from in/min to m/s)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Knowing &lt;code&gt;V&lt;/code&gt; and &lt;code&gt;pitch&lt;/code&gt;, I can evaluate &lt;code&gt;n&lt;/code&gt;, then &lt;code&gt;(Vin - Rm * Iin)&lt;/code&gt;, and finally &lt;code&gt;Iin&lt;/code&gt; (since I know everything else).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the way, I also recommend &lt;a href=&quot;http://www.electricrcaircraftguy.com/2014/04/propeller-static-dynamic-thrust-equation-background.html&quot; rel=&quot;nofollow&quot;&gt;this link&lt;/a&gt;, which contains theoretical propeller formulas, corrected empirically.&lt;/p&gt;&#xA;" OwnerUserId="10696" LastActivityDate="2015-09-29T13:42:49.047" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8142" PostTypeId="1" CreationDate="2015-09-29T14:55:08.990" Score="0" ViewCount="610" Body="&lt;p&gt;I am building a sumo-bot and our competitors have thin sticky tires, while we have wider and less sticky tires. The diameter is the same, and the gearbox/motor is the same. Who will win?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS: Sticky tires: &lt;a href=&quot;https://www.pololu.com/product/694&quot; rel=&quot;nofollow&quot;&gt;https://www.pololu.com/product/694&lt;/a&gt; &amp;amp; wide tires: &lt;a href=&quot;https://www.pololu.com/product/62&quot; rel=&quot;nofollow&quot;&gt;https://www.pololu.com/product/62&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="10716" LastActivityDate="2015-09-29T20:27:04.147" Title="High-traction thin tires vs Wide moderate-traction tires? [Sumo-bot]" Tags="&lt;movement&gt;&lt;wheel&gt;&lt;two-wheeled&gt;" AnswerCount="2" CommentCount="2" ClosedDate="2015-10-05T14:17:13.040" ContentLicense="CC BY-SA 3.0" />
  <row Id="8143" PostTypeId="2" ParentId="8127" CreationDate="2015-09-29T16:25:04.797" Score="2" Body="&lt;p&gt;What exactly is the question?&#xA;I'm not sure, so I'll describe one system I have, and hope you find your answer somewhere in this description.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I connect my Arduino USB cable to my laptop all the time, both before and after applying main motor power.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;power&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;&quot;How do I start the Arduino before inserting the USB cable?&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many people find it easier to plug a AC-to-DC adapter into the wall, which sends 7 V to 12 V to a barrel plug, and then they plug that barrel plug into the barrel jack of the Arduino.&#xA;On my system, I connect power to an Arduino shield, and that shield sends that power into the Vin pin of the Arduino board.&#xA;See&#xA;&lt;a href=&quot;http://www.ladyada.net/learn/arduino/lesson0.html#9vpower&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;Arduino Tutorial: Power up!&quot;&lt;/a&gt;; &#xA;&lt;a href=&quot;http://www.forkrobotics.com/2011/11/powering-an-arduino/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;Powering an Arduino&quot;&lt;/a&gt;;&#xA;&lt;a href=&quot;http://forum.arduino.cc/index.php?topic=22132.0&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;If I have my Arduino connected to a 9V DC supply and then connect the Arduino to a computer with a USB cable, what happens exactly?&quot;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As soon as power is connected to the Arduino, the Arduino starts running the setup() function.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;reset&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;&quot;What happens when the Arduino is running off external 12 VDC power, and I later plug in the USB cable? What do I do about that reset?&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On my (unmodified) Arduino, like most Arduinos, plugging in the USB cable resets my Arduino.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are 2 ways to deal with this:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Accept that it's going to reset occasionally. Design the rest of the system to tolerate resets. Or,&lt;/li&gt;&#xA;&lt;li&gt;Add some hardware to prevent that reset.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I prefer the &quot;tolerate resets&quot; approach, because that also makes the system more robust against the inevitable power glitches.&#xA;People who design systems that can't tolerate resets usually end up with a system that can't tolerate power glitches either, so they have to put in some sort of battery backup system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Every time my Arduino resets or powers up, it forgets where it was before and starts my program from the beginning -- the setup() function.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My program does exactly the same thing after it powers up, whether or not the USB cable is plugged into it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My main loop() prints some debug information out its USB port using the &lt;a href=&quot;https://www.arduino.cc/en/Reference/Serial&quot; rel=&quot;nofollow noreferrer&quot;&gt;Serial library&lt;/a&gt;.&#xA;Usually nothing is plugged into that Arduino's USB port, so that information is simply lost, but sometimes I plug in a USB cable to my laptop, and that information shows up in the &lt;a href=&quot;https://learn.adafruit.com/adafruit-arduino-lesson-5-the-serial-monitor/overview&quot; rel=&quot;nofollow noreferrer&quot;&gt;serial monitor window&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My main loop() uses the &lt;a href=&quot;http://playground.arduino.cc/ComponentLib/Servo&quot; rel=&quot;nofollow noreferrer&quot;&gt;Servo library&lt;/a&gt; to repeatedly tell each servo where to go based on the current values in an array.&#xA;(Those values are slowly incremented or decremented elsewhere in my program based on other sensors).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because my setup() function initializes that array to all zeros,&#xA;when I first power up my system, all my servos reset and suddenly snap back to the zero position (centered). Then they start slowly wandering around.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because my setup() function initializes that array to all zeros,&#xA;when I plug in my USB cable after the system is already powered on, all all my servos reset (again) and (again) suddenly snap back to the zero position (centered).&#xA;Then they start moving normally, slowly wandering around, and I start getting data on my laptop serial monitor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For my particular system, this sudden motion is a harmless quirk.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;How do I prevent this reset?&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;If you &lt;em&gt;don't&lt;/em&gt; want your Arduino to reset every time you plug in the USB cable,&#xA;you might want to look at&#xA;&lt;a href=&quot;http://playground.arduino.cc/Main/DisablingAutoResetOnSerialConnection&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;Disabling Auto Reset On Serial Connection&quot;&lt;/a&gt;;&#xA;&lt;a href=&quot;https://arduino.stackexchange.com/questions/439/why-does-starting-the-serial-monitor-restart-the-sketch&quot;&gt;&quot;Why does starting the serial monitor restart the sketch?&quot;&lt;/a&gt;;&#xA;&lt;a href=&quot;https://stackoverflow.com/questions/16224816/preventing-reset-on-serial-monitor-connect&quot;&gt;&quot;Preventing reset on serial monitor connect?&quot;&lt;/a&gt;;&#xA;etc.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;How do I make a system that tolerates reset?&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Many Arduino systems have no long-term state.&#xA;They do exactly the same thing every time through the main loop,&#xA;whether it's the first time through the loop when powered on,&#xA;or it's been running for months.&#xA;A person can design such a system to tolerate reset relatively easily.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to collect data while the USB cable is unplugged,&#xA;then later send that data through the USB port,&#xA;you might consider storing that data on a SD or MMC card&#xA;using the &lt;a href=&quot;https://learn.adafruit.com/adafruit-micro-sd-breakout-board-card-tutorial&quot; rel=&quot;nofollow noreferrer&quot;&gt;Arduino SD library&lt;/a&gt;,&#xA;or perhaps storing that data in EEPROM&#xA;using the &lt;a href=&quot;http://playground.arduino.cc/Code/EEPROMWriteAnything&quot; rel=&quot;nofollow noreferrer&quot;&gt;Arduino EEPROM library&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to send commands to the Arduino while the USB cable is plugged in,&#xA;and you want the Arduino to continue to act on those commands even after the USB cable is plugged back in a second time, you might consider storing the result of those commands in a SD or MMC card or in the Arduino EEPROM using those same libraries.&#xA;Then both immediately after storing, and also in the setup() routine that runs every time the Arduino resets or is re-connected to power, call a function that reads that non-volatile memory and does the appropriate things.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That stored data is part of the &quot;long-term state&quot;,&#xA;so we put it in non-volatile memory.&#xA;The normal volatile SRAM memory is zeroed out every time the Arduino powers up or is reset.&lt;/p&gt;&#xA;" OwnerUserId="187" LastEditorUserId="-1" LastEditDate="2017-05-23T12:37:11.430" LastActivityDate="2015-10-02T14:26:47.047" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="8144" PostTypeId="1" CreationDate="2015-09-29T16:33:46.890" Score="2" ViewCount="1835" Body="&lt;p&gt;I am trying to recharge my 12V lead acid battery with a 12V DC motor.  I am using the battery to power the robot when it climbs. When it descends, I notice that I dont need to apply reverse voltage but the dc motor just backdrives instead. This can act as generator to recharge back the battery, am I right?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that i need to step up the low voltage that is generated by the backdriven motor to 12V needed to recharge the battery. This is the board that I think can do the job:&#xA;&lt;a href=&quot;https://www.pololu.com/product/799&quot; rel=&quot;nofollow&quot;&gt;https://www.pololu.com/product/799&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this all I need to make it work? With this method, should I be concerned about the 3 stages of battery charging: bulk, absorption and float?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please advise. Any feedbacks are greatly appreciated.&lt;/p&gt;&#xA;" OwnerUserId="10691" LastActivityDate="2015-10-30T19:23:32.427" Title="Using DC motor as a generator to recharge battery of my robot" Tags="&lt;mobile-robot&gt;&lt;battery&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8145" PostTypeId="2" ParentId="8142" CreationDate="2015-09-29T18:05:51.587" Score="0" Body="&lt;p&gt;If you measure  weights of the bots and the coefficients of friction for both kinds of wheels when used on the competition surface, and add those numbers to the question, it will be answerable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sliding force of friction = μ times normal force, where μ is the  coefficient of sliding friction.  For example, see &lt;a href=&quot;https://en.wikipedia.org/wiki/Friction#Static_friction&quot; rel=&quot;nofollow&quot;&gt;wikipedia's Friction article&lt;/a&gt;.&#xA;and &lt;a href=&quot;http://regentsprep.org/REGENTS/PHYSICS/PHYS01/FRICTION/DEFAULT.HTM&quot; rel=&quot;nofollow&quot;&gt;regentsprep.org's Friction article&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Note, in computing μ as (maximum force of static friction)/(normal force), the answer to the question will become obvious along the way.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It may be that the sticky wheels will win, at least at first, if the competition surface is fairly smooth or slick; but as the sticky wheels get gunked up, they will work less and less well.  Also, if the surface has a rough texture, the wide wheels with tread are likely to work better from the start.&lt;/p&gt;&#xA;" OwnerUserId="478" LastActivityDate="2015-09-29T18:05:51.587" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8146" PostTypeId="1" AcceptedAnswerId="8149" CreationDate="2015-09-29T20:13:29.110" Score="2" ViewCount="209" Body="&lt;p&gt;I have a small mobile robot with a LidarLite laser range finder attached to a servo. As of now I have the range finder side-sweeping in a 30 degree arc, taking continuous distance readings to the side of the robot (perpendicular to the robots forward motion).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My goal is to have the robot drive roughly parallel to a wall, side-scanning the entire time, and create a 2D map of that wall it is moving past. The 2D topography map is created post processing (I use R for much of my data processing, but I don't know is popular for this kind of work).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From what I know of it, SLAM sounds like a great tool for what I want to do. But I have two issues:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1: I know my robot will not have a consistent speed, and I have no way to predict or measure the speed of my robot. So I have no way to estimate the odometry of the robot.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;2: The robot will also move further and closer to the wall as it proceeds down it's path. So I can not depend on a steady plane of travel from my robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So given that I don't have any odometry data, and my realtive distance to the wall changes over the course of a run, is it possible to use SLAM to create 2D maps?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm looking into stitching algorithms that are used for other applications, and some of these can handle the variances in relative distance, but I was hoping SLAM or some other algorithm could be of use here.&lt;/p&gt;&#xA;" OwnerUserId="10719" LastActivityDate="2015-09-30T07:45:50.997" Title="Using SLAM to create 2D topography" Tags="&lt;slam&gt;&lt;otherservos&gt;&lt;laser&gt;&lt;rangefinder&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8147" PostTypeId="2" ParentId="8142" CreationDate="2015-09-29T20:27:04.147" Score="1" Body="&lt;p&gt;Well, I moved my answer here from the Engineering SE because it looks like your question is probably going to get closed there, just like it got closed at the physics site.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming &lt;em&gt;everything&lt;/em&gt; about the vehicles is the same - &lt;strong&gt;mass especially&lt;/strong&gt;, but also shape, center of gravity, etc., such that the entire problem boils down to tire grip, you will lose. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;See &lt;a href=&quot;https://physics.stackexchange.com/a/154485&quot;&gt;this answer&lt;/a&gt; for more information, but essentially, &lt;em&gt;assuming your vehicle weight is low enough that you're not going to deform the competition surface&lt;/em&gt;, static friction is given by:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;F_{\mbox{friction}} = \mu_{\mbox{static}} P_{\mbox{tire}} A&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $\mu_{\mbox{static}}$ is the static coefficient of friction, $P_{\mbox{tire}}$ is the pressure the tires exert on the ground, and $A$ is the contact surface area. However, because:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;P_{\mbox{tire}} = \frac{F_{\mbox{normal}}}{A}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $F_{\mbox{normal}}$ is the &lt;a href=&quot;https://en.wikipedia.org/wiki/Normal_force&quot; rel=&quot;nofollow noreferrer&quot;&gt;normal force&lt;/a&gt; of the vehicle, you wind up with:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;F_{\mbox{friction}} = \mu_{\mbox{static}} \frac{F_{\mbox{normal}}}{A} A&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;or&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;F_{\mbox{friction}} = \mu_{\mbox{static}} F_{\mbox{normal}}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, again, assuming &lt;em&gt;everything&lt;/em&gt; else about the two robots is the same, and that you're not operating on a surface like mud or something else that will appreciatively deform under the tires, then the traction/friction force will be higher in the vehicle with a higher coefficient of friction. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That is, your tires should start slipping before theirs do, and since &lt;a href=&quot;https://physics.stackexchange.com/a/569&quot;&gt;static friction is greater than dynamic friction&lt;/a&gt;, once your tires start to slip they get a significant &quot;pushing&quot; advantage over you. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="-1" LastEditDate="2017-04-13T12:40:13.570" LastActivityDate="2015-09-29T20:27:04.147" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8149" PostTypeId="2" ParentId="8146" CreationDate="2015-09-30T07:45:50.997" Score="2" Body="&lt;p&gt;One way you can use SLAM in your setup is to stop the robot every 30 cm or so, and perform a sweep with your lidar. You can then use e.g. one of the 2D SLAM packages from &lt;a href=&quot;https://openslam.org/&quot; rel=&quot;nofollow&quot;&gt;openslam&lt;/a&gt;. &#xA;The problem with sweeping while you are moving is that you cannot get any correspondence information from a single range reading. SLAM works by associating features in one reading with the same feature in another reading. By having a single point reading you cannot tell if two readings have the same original scene point or not. If you have two scans on the other hand, scene features like e.g. a bump in the wall can be matched between the readings.&lt;/p&gt;&#xA;" OwnerUserId="127" LastActivityDate="2015-09-30T07:45:50.997" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8150" PostTypeId="1" AcceptedAnswerId="8169" CreationDate="2015-09-30T09:44:49.727" Score="1" ViewCount="880" Body="&lt;p&gt;On many drones are already external magnetometers. Unfortunately, the orientation of such sensors is sometimes unknown. E.g. the sensor can be tilted 180° (pitch/roll) or X° in yaw. I was wondering, whether one could calculate the rotation of the sensor relative to the vehicle by application of the accelerometer and gyrometer?&#xA;Theoretically, the accelerometer yields a vector down and can be used for calculation of the coordinate system. The discrepancy between magnetometer and gyrometer then, may be used for calculation of the correct orientation of the compass. Later the compass should be used for yaw calculation. &#xA;Below is the starting orientation of both sensors (just an example, the orientation of the compass can be anything). Does someone know a good way to figure out the rotation of the compass? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/JbG8H.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JbG8H.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4080" LastActivityDate="2015-10-02T12:39:31.550" Title="Sensor orientation of an external magnetometer" Tags="&lt;magnetometer&gt;&lt;orientation&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="1" ClosedDate="2015-10-05T14:16:47.820" ContentLicense="CC BY-SA 3.0" />
  <row Id="8151" PostTypeId="2" ParentId="1276" CreationDate="2015-09-30T09:57:44.750" Score="0" Body="&lt;p&gt;You need to command your motors by torque, and not speed&lt;/p&gt;&#xA;&#xA;&lt;p&gt;then with n motors, you get n vectors, so you now get 1 vector you regulate according the speed, and you compute the torque for each three motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To control an AC motor by current you need an inverter capable of Field Oriented Control, and for the vectoring an Arduino could be fine&lt;/p&gt;&#xA;" OwnerUserId="10723" LastActivityDate="2015-09-30T09:57:44.750" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8152" PostTypeId="1" CreationDate="2015-09-30T12:06:18.403" Score="2" ViewCount="637" Body="&lt;p&gt;I am stuck in adjusting the PID of my quadcopter, I cant adjust them on the fly because it just get out of control. I am adjusting them while attaching my quadcopter to something.&lt;a href=&quot;https://i.stack.imgur.com/n7gWh.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/n7gWh.jpg&quot; alt=&quot;this is how am I doing&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this method correct. Will the pid values required will be different on the fly or same. Please suggest me how to attach my quad to some thing.&lt;/p&gt;&#xA;" OwnerUserId="10580" LastActivityDate="2017-08-08T16:20:15.513" Title="How Should I tie My quadcopter to some thing, to adjust pid on one axis" Tags="&lt;quadcopter&gt;&lt;pid&gt;&lt;balance&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8153" PostTypeId="1" AcceptedAnswerId="8154" CreationDate="2015-09-30T12:36:53.917" Score="-1" ViewCount="129" Body="&lt;pre&gt;&lt;code&gt;static void set_default_param(DPMTTICParam&amp;amp; param)&#xA;{&#xA;&#xA;    param.overlap = 0.4;&#xA;    param.threshold = -0.5;&#xA;    param.lambda = 10;&#xA;    param.num_cells = 8;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="10507" LastEditorUserId="9860" LastEditDate="2015-09-30T15:45:31.187" LastActivityDate="2015-09-30T15:45:31.187" Title="Can someone explaine to me this code?" Tags="&lt;c++&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="1" ClosedDate="2015-10-01T01:40:52.377" ContentLicense="CC BY-SA 3.0" />
  <row Id="8154" PostTypeId="2" ParentId="8153" CreationDate="2015-09-30T13:21:41.700" Score="0" Body="&lt;p&gt;It seems to belong to this software:&#xA;&lt;a href=&quot;https://github.com/CPFL/Autoware/blob/master/ros/src/computing/perception/detection/lib/image/dpm_ttic/include/dpm_ttic/dpm_ttic.hpp&quot; rel=&quot;nofollow&quot;&gt;https://github.com/CPFL/Autoware/blob/master/ros/src/computing/perception/detection/lib/image/dpm_ttic/include/dpm_ttic/dpm_ttic.hpp&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So - I assume that is just a case where someone is using that software, and it is showing how to set some default parameters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would suggest you ask the developers of that software directly though, if you want to use it.&lt;/p&gt;&#xA;" OwnerUserId="9578" LastActivityDate="2015-09-30T13:21:41.700" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8156" PostTypeId="2" ParentId="8152" CreationDate="2015-09-30T16:38:09.857" Score="3" Body="&lt;p&gt;Since you're trying to adjust the stability, you should make sure that your method of restraint isn't restricting the motion along that axis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, the preferred way to restrain a quadcopter is by connecting strings to the center of the body, above and below.  Here's an example:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=T6w5s0-KdYM&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Yz9j4.png&quot; alt=&quot;Quadcopter restraint&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could also disable the motors on one axis and run a rope under each of the propeller shafts on that axis (sideways) to simulate the lift that those motors would provide while constraining any movement.  &lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2015-09-30T18:04:23.710" LastActivityDate="2015-09-30T18:04:23.710" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="8157" PostTypeId="2" ParentId="8150" CreationDate="2015-09-30T16:45:09.367" Score="0" Body="&lt;p&gt;If you put a strong magnet under the magnetometer, its readings of direction should match the accelerometer reading for gravity.  You could then place the magnet in the other cardinal directions in order to resolve any ambiguity in the orientation you calculate.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2015-09-30T16:45:09.367" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8159" PostTypeId="2" ParentId="8144" CreationDate="2015-09-30T17:58:45.480" Score="1" Body="&lt;p&gt;This question may be more suited to an electrical engineering site, but one thing to consider is that your batteries will have a maximum allowable charge current.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What this means is that if the wheel is turning too quickly, you will need to either limit the current into the charge circuit, or dissipate it some other way (such as in a resistor).  &lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2015-09-30T17:58:45.480" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8161" PostTypeId="2" ParentId="8124" CreationDate="2015-09-30T18:37:43.357" Score="0" Body="&lt;p&gt;This should be straightforward, because the throttle can never provide negative acceleration and the brake can never provide positive acceleration.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It sounds like you want to create a linear mapping from an input acceleration $(a)$ to a throttle and brake output.  If the response of the throttle system for a given velocity $v$ is &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;f(x_{throttle}) = a&#xA;$$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;(where $a &amp;gt; 0$), and the response of the braking system is &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;g(y_{brake}) = a&#xA;$$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;(where ($a &amp;lt; 0$ if $v &amp;gt; 0$ and is 0 otherwise), you will just define the controller in a piecewise fashion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;control_{throttle}(a) = \begin{cases} f^{-1}(a) &amp;amp; a \gt 0 \\ 0 &amp;amp; a \le 0 \end{cases}&#xA;$$&#xA;and&#xA;$$&#xA;control_{brake}(a) = \begin{cases}g^{-1}(a) &amp;amp; a \lt 0 \\ 0 &amp;amp; a &amp;gt; 0  \\ C_{parkingbrake} &amp;amp; a = 0 \end{cases}&#xA;$$&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2015-09-30T18:37:43.357" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8162" PostTypeId="1" CreationDate="2015-09-30T20:21:30.690" Score="0" ViewCount="246" Body="&lt;p&gt;When should you use multiple separate batteries vs a single battery with multiple UBECs?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm trying to design the power system for a small 2-wheeled robot. Aside from the 2 main drive motors, it also has to power an Arduino, a Raspberry Pi and a couple small servos to actuate sensors.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the motors are each rated for 6V with a peak stall current of 2.2A&lt;/li&gt;&#xA;&lt;li&gt;the Arduino uses about 5V@100mA&lt;/li&gt;&#xA;&lt;li&gt;the Raspberry Pi uses about 5V@700mA&lt;/li&gt;&#xA;&lt;li&gt;the servos each use 6V and have a peak stall current of 1.2A.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So the theoretical max current draw would be &lt;code&gt;2.2*2+.1+.7+1.2*2&lt;/code&gt; = 7.6A.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Originally I was planning to use three separate Lipo batteries:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;one 12V using a step-down converter to power the main drive motors for 6V@4.4A peak&lt;/li&gt;&#xA;&lt;li&gt;two 3.7V lipos each with step-up converter (rated for 5v@3A) to handle the servos and logic separately&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Then I discovered &lt;a href=&quot;https://en.wikipedia.org/wiki/Battery_eliminator_circuit&quot; rel=&quot;nofollow&quot;&gt;UBECs&lt;/a&gt;, which sound too good to be true, and they seem to be both cheap (&lt;code&gt;&amp;lt;$10&lt;/code&gt;) and efficient (&lt;code&gt;&amp;gt;90%&lt;/code&gt;) and able to handle my exact volt/current requirements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Should I instead use a single high-current 12V lipo with three UBECs to independently power my drive motors, sensor motors and logic? Or will this still suffer from brown-out and power irregularities if a motor draws too much current?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What am I missing?&lt;/p&gt;&#xA;" OwnerUserId="740" LastActivityDate="2015-10-03T20:33:53.830" Title="When to use multiple batteries vs a UBEC" Tags="&lt;battery&gt;&lt;bec&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8163" PostTypeId="2" ParentId="8162" CreationDate="2015-09-30T20:58:44.090" Score="2" Body="&lt;p&gt;Any quality power device should list its load regulation capability, which is typically in a datasheet as a voltage range coupled with a maximum output current. You can expect normal voltage fluctuations to occur within this band. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, when you include a motor in the scenario, you need to be aware that voltage can spike up/down if you suddenly remove/apply current to the motor because the motor windings act like (are) an inductor. Typically a &lt;a href=&quot;https://en.wikipedia.org/wiki/Flyback_diode&quot; rel=&quot;nofollow&quot;&gt;flyback diode&lt;/a&gt; is used to prevent/limit the spikes caused by motor operation; see &lt;a href=&quot;http://forum.arduino.cc/index.php?topic=50931.0&quot; rel=&quot;nofollow&quot;&gt;this thread&lt;/a&gt; for a schematic of an H-bridge driving a DC motor with flyback diodes. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another thing I would like to point out is that you are adding currents, which could be a troublesome thing to do - while 5V and 6V seem very close, 6V is actually &lt;em&gt;20 percent&lt;/em&gt; more than 5V. I would suggest that you convert your &quot;current&quot;@&quot;voltage&quot; to the &lt;em&gt;power&lt;/em&gt; required by each circuit, then use that power rating to find a suitable supply. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You said:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;the motors are each rated for 6V with a peak stall current of 2.2A&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;the Arduino uses about 5V@100mA&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;the Raspberry Pi uses about 5V@700mA&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;the servos each use 6V and have a peak stall current of 1.2A.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;But I would suggest:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Motors are 6V@2.2A = 13.2W&lt;/li&gt;&#xA;&lt;li&gt;Arduino is 5V@0.1A = 0.5W&lt;/li&gt;&#xA;&lt;li&gt;Raspberry Pi is 5V@0.7A = 3.5W&lt;/li&gt;&#xA;&lt;li&gt;Servos are 6V@1.2A = 7.2W&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Assuming 2 motors and 2 (a couple) servos, your total power requirements are:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{array}{ccc}&#xA;P_{\mbox{req}} &amp;amp; = &amp;amp; (2*13.2) + 0.5 + 3.5 + (2*7.2) \\&#xA;P_{\mbox{req}} &amp;amp; = &amp;amp; 44.8W\\&#xA;\end{array}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now you can take your power requirement and use that for any power converter/battery eliminator. Divide your power requirement by the nominal pack voltage to get your current requirement for a specific battery pack. Divide the current by the battery capacity (in Ah, or remember to convert current requirement to mA) to get the estimated run time on a particular battery pack.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All of this is guidance to help you select a proper BEC, because yes, as long as your battery provides enough current and you can tolerate the voltage swing, it should work fine. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-09-30T20:58:44.090" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8165" PostTypeId="1" CreationDate="2015-09-30T22:44:32.347" Score="0" ViewCount="543" Body="&lt;p&gt;I'm working on project for the Autonomous vehicle, and i want to know what's confidence level means and how can we use confidence level for vehicle detection in OpenCV ?&lt;/p&gt;&#xA;" OwnerUserId="10507" LastEditorUserId="110" LastEditDate="2015-10-16T16:33:04.100" LastActivityDate="2015-10-16T16:33:04.100" Title="what's confidence level? and how can we use it for vehicle detection using OpenCV?" Tags="&lt;opencv&gt;&lt;statistics&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8166" PostTypeId="2" ParentId="8140" CreationDate="2015-10-01T12:23:36.330" Score="1" Body="&lt;p&gt;Since you are using an Arduino a .NET app isn't going to be much help unless you can get the source code and use that as a reference.  .NET can be used on Arduinos but you are probably going to get stuck, because there will be less examples.  (The source code will probably be in either C# or VB and if you can read Arduino C you can read them)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;Do the sensors create an image?&quot;  Yes and no.  From what I can see from the data sheets you have a number of pixels that have analog values.  These values are stored in memory on the sensor and you use I2C to read from that memory.&lt;br&gt;&#xA;There are I2C libraries for an Arduino.  There is probably an I2C library to interface with the memory chip.  There might even be a library to talk to the sensor.  However the most difficult part will be converting the pixel values into something that allows your Robot to 'see' a heat source, this will take some research on how to do it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The sensors have different numbers of pixels.  Having 64 pixels is fine, but how long will it take an Arduino to read 64x16bit numbers over an I2C interface and then evaluate the data and make a decision on which direction to move.  I think you should be looking at a multi-microprocessor system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which sensor is better? Personally I would go with the Omron mounted horizontally.  My reasoning isn't just  the cost, the RoBoard wants 2.5-2.7V and that is going to be harder to regulate than the 4.5-5.5V that the Omron wants when you are running on batteries.  The 1x8 sensor only has a 6 degree vertical angle, but it has much higher resolution that the 4x4.  One possible option might be to have one of each and perform a gross search with the 4x4 and the focus in with the 8x1 sensor.&#xA;You are probably going to want to have the ability to rotate the sensor and pan it vertically to allow the robot to look around the room. Then stich the data together to get the bigger picture. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope that helps&lt;/p&gt;&#xA;" OwnerUserId="10717" LastActivityDate="2015-10-01T12:23:36.330" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8167" PostTypeId="2" ParentId="8150" CreationDate="2015-10-01T19:50:59.287" Score="0" Body="&lt;p&gt;Since the gyros are only good for measuring rotational rates, they are essentially useless at calculating your orientation. The accelerometers, as you say, will calculate exactly your reference plane, but it seems your question is about an arbitrary yaw within that plane.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now this is where the compass becomes important: for measuring the yaw. Since the compass is fixed to the frame, it should be known at design time how its orientation differs from the vehicle's. &lt;/p&gt;&#xA;" OwnerUserId="1075" LastActivityDate="2015-10-01T19:50:59.287" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8168" PostTypeId="1" CreationDate="2015-10-01T21:10:45.877" Score="0" ViewCount="144" Body="&lt;p&gt;For adjusting the pid for quadcopter, how much speed of motors are required before adjusting the pid. Do we need to give so much offset speed so that it cancels weight? I am sure we cant start adjusting pid with zero speed of motors initially.&lt;/p&gt;&#xA;" OwnerUserId="10738" LastEditorUserId="10738" LastEditDate="2015-10-03T11:11:03.430" LastActivityDate="2015-10-03T11:39:10.063" Title="How much offset speed of motors on an axis is required before adjusting pid" Tags="&lt;quadcopter&gt;&lt;pid&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8169" PostTypeId="2" ParentId="8150" CreationDate="2015-10-02T12:39:31.550" Score="1" Body="&lt;p&gt;I'll try to go through your question as best as I can:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I was wondering, whether one could calculate the rotation of the sensor relative to the vehicle by application of the accelerometer and gyrometer?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Without any more information than an accelerometer and a gyro, no, you cannot, because gyros measure velocity and accelerometers measure acceleration, which means that you can only use those to find a position by using a &lt;a href=&quot;https://en.wikipedia.org/wiki/Constant_of_integration&quot; rel=&quot;nofollow noreferrer&quot;&gt;constant of integration&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The constant of integration here would be an initial velocity for the first integration of accelerometer output, and and initial position &lt;strong&gt;and heading&lt;/strong&gt; for the second integration of accelerometer output and gyro output, respectively. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The gyro and accelerometer will only ever give you &lt;em&gt;relative&lt;/em&gt; positions and headings. You would need to find an initial heading to align those outputs to a (literal) global coordinate system, at which point you would be using whatever device you used for initial heading to compare with the magnetometer. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Theoretically, the accelerometer yields a vector down and can be used for calculation of the coordinate system. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I would be careful regarding this - see &lt;a href=&quot;https://robotics.stackexchange.com/q/1858/9720&quot;&gt;Ben's question/comment&lt;/a&gt; regarding his experience that 3-axis accelerometers tend to have a left-handed coordinate system. That is, if you haven't read the datasheet on the accelerometer, you could mis-interpret the orientation of the sensor because it's not using the coordinate system you think it is. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The discrepancy between magnetometer and gyrometer then, may be used for calculation of the correct orientation of the compass. Later the compass should be used for yaw calculation. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I don't know if you're using magnetometer and compass interchangeably here or if you are actually referring to two different devices, but as stated above, a gyro will only ever output a relative heading, so you can't use it to determine any absolute heading. This means that you can't use it to set/test/check the alignment of an absolute output device such as a magnetometer. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Below is the starting orientation of both sensors (just an example, the orientation of the compass can be anything). Does someone know a good way to figure out the rotation of the compass?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I don't know how specific you are trying to get with your measurement, but in general, I would just command the vehicle to point North. If you have a rotationally symmetric vehicle like a quadcopter then you'll have to determine which arm/end of the vehicle is &quot;forward&quot; (should correspond to a &quot;move forward&quot; command) and mark that end. Once the vehicle stops actively maneuvering to reach your heading command you can use a manual/secondary compass to determine true North and mark/compare the difference between that position and &quot;forward&quot; on your vehicle. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you need a more precise measurement or if you can't command an absolute heading, then your only other choice is to try to get access to the electronics. I would look for the magnetometer chip itself, find the &lt;a href=&quot;https://electronics.stackexchange.com/questions/48734/how-do-i-identify-pin-1-on-a-chip-with-no-corner-mark&quot;&gt;orientation of the chip&lt;/a&gt;, then read the datasheet and determine how it senses North. The chip will be soldered to a board which, in turn, will be attached to the vehicle. You can then relate compass orientation to the craft. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2015-10-02T12:39:31.550" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8171" PostTypeId="1" AcceptedAnswerId="8180" CreationDate="2015-10-02T14:20:47.623" Score="4" ViewCount="845" Body="&lt;p&gt;Given a set of robot joint angles (i.e. 7DoF) $\textbf{q} = [q_1, ... , q_n]$ one can calculate the resulting end-effector pose (denoted as $\textbf{x}_\text{EEF}$), using the foward kinematic map. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's consider the vice-versa problem now, calculating the possible joint configurations $\textbf{q}_i$ for a desired end-effector pose $\textbf{x}_\text{EEF,des}$. The inverse kinematics could potentially yield infinitely many solutions or (and here comes what I am interested in) no solution (meaning that the pose is not reachable for the robot).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a mathematical method to distinguish whether a pose in Cartesian space is reachable? (Maybe the rank of the Jacobian) Furthermore can we still find a reachability test in case we do have certain joint angle limitations? &lt;/p&gt;&#xA;" OwnerUserId="10374" LastActivityDate="2015-10-04T13:29:10.667" Title="Robot arm reachability of a pose in Cartesian space" Tags="&lt;mobile-robot&gt;&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;inverse-kinematics&gt;&lt;jacobian&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8173" PostTypeId="2" ParentId="7850" CreationDate="2015-10-02T22:51:05.633" Score="0" Body="&lt;p&gt;When say you say you &quot;want to control a brushless motor with [a] ESC ... and Arduino&quot;, do you mean:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do you want the Arduino to act like the RC receiver in the airplane in the air and make the propeller spin slow, stop, fast, etc.? Or,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do you want the Arduino to act like a person changing settings in the ESC using a programming card on the ground?&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;In the air&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;In the air, the 3 wire cable between the RC receiver and the ESC carries the so-called &lt;a href=&quot;http://www.opencircuits.com/Servo_control&quot; rel=&quot;nofollow&quot;&gt;&quot;RC PWM signals&quot;&lt;/a&gt;.&#xA;The RC receiver sends exactly the same kind of signals to RC servos.&#xA;The ESC neither knows nor cares where these signals come from -- the RC receiver, the Arduino PWM (using the &lt;a href=&quot;https://www.arduino.cc/en/Reference/Servo&quot; rel=&quot;nofollow&quot;&gt;Arduino Servo library&lt;/a&gt;), the &lt;a href=&quot;http://playground.arduino.cc/ComponentLib/Servo&quot; rel=&quot;nofollow&quot;&gt;Arduino Software Servo library&lt;/a&gt; ( periodically calling refresh() in the main loop() ), or some other source.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;On the ground&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The &quot;beep sounds&quot; are really only useful when changing the settings in the ESC on the ground, perhaps with a programming card.&#xA;To learn what the &quot;beep sounds mean&quot;, see the user manual &lt;a href=&quot;http://yinyanmodel.com/EMAX%20User%20Instruction%20for%20Simonk%20Series%20ESC.pdf&quot; rel=&quot;nofollow&quot;&gt;&quot;EMAX User Instruction for SimonK Series ESC&quot;&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Normally this is a one-time setup, so most people do this once manually on the ground.&#xA;&lt;/p&gt;&#xA;" OwnerUserId="187" LastActivityDate="2015-10-02T22:51:05.633" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8174" PostTypeId="2" ParentId="8168" CreationDate="2015-10-03T08:02:11.023" Score="0" Body="&lt;p&gt;This is intended as a comment only and it is based on my limited experience working on this topic. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;PID works based on the error that resulted from the difference between the actual value (from sensor) and the reference value (your goal). This error is calculated and then is fed into the PID controller. Whether or not the speed is zero, that is not the only determining factor as it also depends on your reference point. &lt;/p&gt;&#xA;" OwnerUserId="10691" LastActivityDate="2015-10-03T08:02:11.023" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8175" PostTypeId="2" ParentId="8168" CreationDate="2015-10-03T11:33:18.820" Score="1" Body="&lt;p&gt;For tuning PID controllers (and generally any linear controller) it is a very common practice to go through the following steps:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Let the system reach a &lt;strong&gt;steady-state condition&lt;/strong&gt;, e.g. the quadcopter is stabilized at a given height, thus the motors are spinning with nonzero speed.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Superimpose a specified signal&lt;/strong&gt; (step-wise, sinusoidal waveform ...) to the commands provided to the system, e.g. add up a step to the voltage used to command a given motor.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Measure back the response&lt;/strong&gt; of the system to the injected signal, e.g. acquire the controlled variable of the quadcopter (i.e. position and/or velocity).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Come up with a &lt;strong&gt;linear model&lt;/strong&gt; which best describes such a response. Of course, we have to subtract from the command and the response the terms that contribute to the steady-state.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Use this model to design/tune the PID according to one of the numerous techniques available (e.g. &lt;strong&gt;poles placement&lt;/strong&gt;).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;This approach assumes that the response of the system to the commands variations remains somewhat linear irrespective of the working point. This is generally a reasonable hypothesis, taking into account the fact that a robustly tuned PID is capable of compensating for quite huge nonlinearities in the system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So basically, to answer your question, just double check that the steady-state speed of the motor required to keep the quadcopter stabilized in the air does correspond to a commanded voltage around which it is possible to carry out signal modulation without hitting the voltage limits.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2015-10-03T11:39:10.063" LastActivityDate="2015-10-03T11:39:10.063" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8176" PostTypeId="2" ParentId="8171" CreationDate="2015-10-03T16:11:05.260" Score="2" Body="&lt;p&gt;It depends on how theroetical/practical solution you are looking for. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are considering a theoretical workspace, with no angular limits of your joints (e.g. due to mechanical constraints) then the calculating the inverse kinematics for a Cartesian pose which is out of the workspace would result in complex joint angles (at least one of the 7 joint angles in your case would be complex). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;One solution would be to check whenever you calculate a square root in your IK if the term under the square root is negative. If yes, the cartesian pose is unreachable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For 6 DOF the case is simpler, there it is enough to check if the point is within sphere (again disregarding angular joint limits), however for 7 DOF the additional expression (that is required to solve the IK) might make the point unreachable. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this helped..&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2015-10-03T16:11:05.260" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8177" PostTypeId="2" ParentId="5104" CreationDate="2015-10-03T16:28:31.200" Score="0" Body="&lt;p&gt;A simple PLC is not meant to control a robot. You will at least need OpenPLC Motion Control capabilities for the PLC to control motions. Or you can opt for a motion controller to have better control over the motions. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are thinking of writing PLC code, running on the PLC, and you want to see what happens to motors/drive amplifiers when they receive a certain output, and what happens in your cell, you could use a virtual commissioning tool for example. Those are meant to simulate the plant, connected to a real PLC, and the PLC &quot;has no idea&quot; that the connected systems are just simulated, not real.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2015-10-03T16:28:31.200" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8178" PostTypeId="2" ParentId="6459" CreationDate="2015-10-03T16:36:01.490" Score="1" Body="&lt;p&gt;The operation you mentioned can be mathematically formulated as a matrix multiplication. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You build your homogeneous transformation matrices (4x4) for both frames and multiply them. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;After than you can extract the 6 coordinates from the resulting matrix. Extracting position is easy, take the first three rows of the last column. Extracting rotations can be done in Matlab easily by using the dcm2angles() function. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please not that quaterions might be a better alternative to transformation matrices, but are more complicated to implement.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2015-10-03T16:50:35.227" LastActivityDate="2015-10-03T16:50:35.227" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8179" PostTypeId="2" ParentId="8162" CreationDate="2015-10-03T20:33:53.830" Score="2" Body="&lt;p&gt;There are a few things you should consider when designing your system.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Motors are usually rated for the stall current, but sometimes generate out-of-spec currents. Higher current draw may happen when the motor turns backwards and back-currents occur when switching the motor off.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;When using LiPos with high discharge rate, those currents are usually absorbed by the battery with low voltage fluctuations, due to its low output impedance.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;BECs usually but not always have a low-pass filter. Sometimes those filters are enough to handle spikes, sometimes not. Sometimes those filters also help filtering spikes backward.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;With those in mind, it is usually enough to have separate BECs for logic/application processors and motors. Use a high-current rated battery (usually most LiPos are at least 15C, so a standard 2200mAh is usually enough). Do not chain them and try to avoid connections and wiring before the BECs.&lt;/p&gt;&#xA;" OwnerUserId="10749" LastActivityDate="2015-10-03T20:33:53.830" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8180" PostTypeId="2" ParentId="8171" CreationDate="2015-10-04T08:53:17.853" Score="4" Body="&lt;p&gt;Nowadays we no longer employ exact solutions for the IK problem, simply because the number of degrees of freedom so as the number of constraints the final configuration needs to comply with make the so called geometric approach intractable. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;By contrast, iterative methods are used to converge to the most plausible solution. Therefore, the &lt;strong&gt;reachability is tested at the end of this iterative process&lt;/strong&gt; by comparing - within a given threshold - the target with the pose reached by the end-effector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, one can create beforehand a map of the workspace containing samples of reachable and/or dexterous locations for the manipulator and use it as a sort of rough prediction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;strong&gt;Jacobian embeds a local description&lt;/strong&gt; of the robot, so that it cannot account for any global hint whether the goal can or cannot be attained.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2015-10-04T13:29:10.667" LastActivityDate="2015-10-04T13:29:10.667" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="8181" PostTypeId="1" CreationDate="2015-10-04T13:20:14.980" Score="2" ViewCount="34" Body="&lt;p&gt;In an autonomous mobile robot, we're planning on using digital servo motors to drive the wheels. Servo motors usually don't rotate continuously. However, they can be modified to do so based on many tutorials online which only mention modifying [analog] servo motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is, can the same method(s) or any other ones be used to modify &lt;em&gt;digital&lt;/em&gt; servo motors?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="10282" LastEditorUserId="37" LastEditDate="2015-10-08T10:25:20.473" LastActivityDate="2015-10-08T10:25:20.473" Title="Can digital servo motors be modified for continuous rotation?" Tags="&lt;mobile-robot&gt;&lt;rcservo&gt;" AnswerCount="0" CommentCount="8" ClosedDate="2015-10-05T14:40:02.613" ContentLicense="CC BY-SA 3.0" />
  <row Id="8182" PostTypeId="1" CreationDate="2015-10-04T13:33:04.663" Score="3" ViewCount="334" Body="&lt;p&gt;I am making a Robot goalie, the robot is supposed to detect whether a ball has been thrown in its direction , sense the direction of the ball and then stop it from entering the goal post. A webcam will be mounted on top of the goal post. The robot is required to only move horizontally (left or right), it shouldn't move forwards or backwards. The robot will have wheels, the image processing will be performed by raspberry pi which will then send the required information to a micro controller which will be responsible for moving the robot in the required direction(using servo motors). Which image processing algorithm will be the best to implement this scenario?&lt;/p&gt;&#xA;" OwnerUserId="10752" LastActivityDate="2015-10-04T21:58:57.290" Title="image processing" Tags="&lt;mobile-robot&gt;&lt;computer-vision&gt;&lt;algorithm&gt;&lt;beagle-bone&gt;&lt;first-robotics&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8183" PostTypeId="2" ParentId="8182" CreationDate="2015-10-04T21:58:57.290" Score="5" Body="&lt;p&gt;Ball detection using vision is not extremely difficult, especially if the ball is easy to recognize. There are a lot of tutorials and blogs which give a detailed explanation on how to implement an algorithm to solve this problem:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.instructables.com/id/Raspberry-Pi-Ball-tracking/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Raspberry Pi Ball tracking&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://mechomaniac.com/OpenCVBallTracking&quot; rel=&quot;nofollow noreferrer&quot;&gt;Using OpenCV on the Beagleboard to track an Aibo pink ball&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://opencv-srf.blogspot.com.es/2010/09/object-detection-using-color-seperation.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;OpenCV Tutorial C++ - Color Detection &amp;amp; Object Tracking&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://anikettatipamula.blogspot.com.es/2012/12/ball-tracking-detection-using-opencv.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ball Tracking / Detection using OpenCV&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/questions/21770948/ball-detection-with-opencv&quot;&gt;Ball detection with OpenCV&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://archive2.cra.org/Activities/craw_archive/dmp/awards/2010/Emole/FinalPaper_Emole.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Design of an Image Processing Algorithm For Ball Detection&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.lirtex.com/robotics/fast-object-tracking-robot-computer-vision&quot; rel=&quot;nofollow noreferrer&quot;&gt;Fast Object Tracking – Robot Computer Vision&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;...&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="10041" LastEditorUserId="-1" LastEditDate="2017-05-23T12:37:11.430" LastActivityDate="2015-10-04T21:58:57.290" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8184" PostTypeId="1" CreationDate="2015-10-05T04:08:56.337" Score="3" ViewCount="4175" Body="&lt;p&gt;People at the RepRap &lt;a href=&quot;/questions/tagged/3d-printing&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;3d-printing&amp;#39;&quot; rel=&quot;tag&quot;&gt;3d-printing&lt;/a&gt; project often mention &lt;a href=&quot;http://reprap.org/wiki/CNC_Router&quot; rel=&quot;nofollow noreferrer&quot;&gt;CNC routers&lt;/a&gt; or &lt;a href=&quot;http://reprap.org/wiki/MillStrap&quot; rel=&quot;nofollow noreferrer&quot;&gt;CNC mills&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both kinds of machines almost always have a motorized spindle with stepper motors to move the spindle in the X, Y, and Z directions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the difference between a CNC router versus a CNC mill?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Is there a better place for this sort of question -- perhaps the &lt;a href=&quot;https://woodworking.stackexchange.com/&quot;&gt;Woodworking Stack Exchange&lt;/a&gt;?)&lt;/p&gt;&#xA;" OwnerUserId="187" LastEditorUserId="15160" LastEditDate="2019-05-20T01:02:25.407" LastActivityDate="2019-08-14T02:20:09.573" Title="What is the difference between a CNC router versus a CNC mill?" Tags="&lt;industrial-robot&gt;" AnswerCount="5" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8185" PostTypeId="2" ParentId="8184" CreationDate="2015-10-05T06:23:45.433" Score="3" Body="&lt;p&gt;On a typical CNC router, the work is stationary and the spindle-head moves in x/y/z coordinates.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On a typical CNC mill, the work moves in x/y coordinates (ie, is attached to an x/y table) and the spindle-head moves in the z axis only.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An example of each is shown below (photos from pdjinc.com and hylands.net):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/am7uJ.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/am7uJ.jpg&quot; alt=&quot;CNC router&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/cpUTB.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/cpUTB.jpg&quot; alt=&quot;CNC mill&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="478" LastActivityDate="2015-10-05T06:23:45.433" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8186" PostTypeId="1" CreationDate="2015-10-05T10:58:36.357" Score="2" ViewCount="1446" Body="&lt;p&gt;I'm designing my lawn mower robot, and I am in the perimeter stage. &#xA;The electronic part is done, and works quite good, now comes the software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need an advice on how to deal with the problem of line following. I mean, once the robot is on the line, parallel to the line, that's relatively easy. &#xA;But how to manage the situation when the robot is driving around and approaches the line (wire)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have two sensors, left and right, turned 45° with respect to the forward direction. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The robot could arrive from any angle, so the signal amplitude read from the sensor could be completely random.. &#xA;So I don't understand what to do in order to move it in the right position on the wire...&#xA;What's the usual approach? &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The idea is the same as here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://wiki.ardumower.de/index.php?title=Datei:Ardumower_perimeter.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/UFH2Q.png&quot; alt=&quot;Ardumower perimeter wire&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The wire is all around the yard. on the mower there are 2 sensors, left and right, that sense the signal emitted from the wire, a square wave signal at 34 KHz. The signal amplitude read from the sensors on the mower is about 2 V when it's above the wire.&lt;/p&gt;&#xA;" OwnerUserId="10759" LastEditorUserId="37" LastEditDate="2015-10-05T14:31:55.090" LastActivityDate="2015-10-06T18:27:58.237" Title="Robot wire follower + how to position on wire" Tags="&lt;line-following&gt;&lt;magnetometer&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="8187" PostTypeId="1" CreationDate="2015-10-05T11:16:58.580" Score="2" ViewCount="752" Body="&lt;p&gt;I will have a 5 or 6 DOF arm build with Dynamixel or HerculeX smart servos. I need  to move the gripper along Cartesian trajectory, which I will calculate in my C++ application. I looked at ROS, but the learning curve is pretty steep and it looks like a major overkill for this use case. I don't need a distributed system with all the complexity it brings. Preferably, I would like to call a standalone C++ library or libraries to get the arm actuated. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What are my options? What will be the limitations of not using a full blown robotics framework like ROS or YARP in this case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is how I would like to code it:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;vector&amp;lt;Point&amp;gt; way_points;&#xA;vector&amp;lt;Pose&amp;gt;  way_poses;&#xA;&#xA;compute_Cartesian_trajectory(way_points, way_poses);   // my code&#xA;execute_Cartesian_trajectory(way_points, way_poses);   // library call&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The last line can be spread over several library function calls and intermediate data structures, if needed. The end result should be the gripper physically following Cartesian trajectory given by &lt;code&gt;way_points&lt;/code&gt; and &lt;code&gt;way_poses&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="9166" LastEditorUserId="9166" LastEditDate="2015-10-06T00:54:50.547" LastActivityDate="2015-10-06T16:37:59.213" Title="Is there a simpler way than ROS for 5 DOF Dynamixel arm control" Tags="&lt;robotic-arm&gt;&lt;ros&gt;&lt;motion-planning&gt;&lt;c++&gt;" AnswerCount="2" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="8188" PostTypeId="1" CreationDate="2015-10-05T18:09:20.213" Score="2" ViewCount="570" Body="&lt;p&gt;I am trying to run my 600 series Roomba in a large, open space (1700+sf) and it does not recognize the large, open space and throws the Error 10 code.  It does not recognize an edge of 2 12&quot;-3&quot; either; it will fall off the edge and become stuck.  Any suggestions?&lt;/p&gt;&#xA;" OwnerUserId="10764" LastEditorUserId="110" LastEditDate="2015-10-08T13:24:58.473" LastActivityDate="2015-10-08T13:42:20.187" Title="How can I avoid Roomba Error 10 Code?" Tags="&lt;mobile-robot&gt;&lt;irobot-create&gt;&lt;roomba&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8189" PostTypeId="2" ParentId="8187" CreationDate="2015-10-06T09:20:40.617" Score="2" Body="&lt;p&gt;Cross post on YARP Q&amp;amp;A channel:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/robotology/QA/issues/54&quot; rel=&quot;nofollow&quot;&gt;https://github.com/robotology/QA/issues/54&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="6941" LastActivityDate="2015-10-06T09:20:40.617" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8191" PostTypeId="1" AcceptedAnswerId="8215" CreationDate="2015-10-06T16:33:02.827" Score="2" ViewCount="2987" Body="&lt;p&gt;How do i determine which angle i can negate when gimbal lock occurs. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As i've understood with gimbal lock that it remove one degree of freedom, but how do i determine which degree can be removed when a  value R[1][3]  of a rotation matrix (size 3x3) has the value 1.  Is it the Roll, Pitch or yaw which can be taken out from the equation?&lt;/p&gt;&#xA;" OwnerUserId="9620" LastEditorUserId="9620" LastEditDate="2015-10-07T16:40:54.283" LastActivityDate="2015-10-14T12:20:06.760" Title="rotation matrix to euler angles with gimbal lock" Tags="&lt;motion-planning&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8192" PostTypeId="2" ParentId="8187" CreationDate="2015-10-06T16:37:59.213" Score="2" Body="&lt;p&gt;The library call could be as simple as these two &lt;a href=&quot;http://openrave.org/&quot; rel=&quot;nofollow&quot;&gt;OpenRave&lt;/a&gt; Python lines:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;robot.GetController().SetPath(traj)&#xA;robot.WaitForController(0)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Of course the types would have to match and all that.  You would also have to write a controller plugin, which I have heard can be quite a bit of work.  (These are just Python bindings for the C++ API, but I am not familiar enough with the C++ API and the calls are slightly different).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That being said, I use OpenRave a lot for forward / inverse kinematics and Jacobian stuff.  But wrote my own trajectory follower and robot interface.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should also check out &lt;a href=&quot;http://www.orocos.org/kdl/user-manual&quot; rel=&quot;nofollow&quot;&gt;Orocos KDL&lt;/a&gt;, it seems to have some support for trajectories, but I don't know if will &quot;execute&quot; the trajectory.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-10-06T16:37:59.213" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8193" PostTypeId="2" ParentId="8186" CreationDate="2015-10-06T18:27:58.237" Score="1" Body="&lt;p&gt;There are a lot of possible ways to solve your problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, let's get you off the wrong track: this isn't a simple, line following problem.  For it to be a line following robot, you need to lay track lines under your lawn for every place that you want to mow.  Imagine a grid like a potato masher instead of the one your drew.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem seems to be:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Given a perimeter wire &amp;amp; an autonomous robot, how can I make a robot mow my lawn, and how can it do the job in a relatively efficient manner? (ie: don't take a random walk).&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's what I would do:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) Add a start/stop location to you map. You could use a strong IR emitter and sensor (test it to make sure your robot can see it in bright sunlight).  Add this to your &quot;charging station&quot; and you've killed 2 birds with 1 stone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) Ensure that you're using encoded motors for your wheel motors. I'd take an approach similar to SLAM, but without the on-the-fly mapping.  You can encode your yard as a map, making the code and problem drastically easier.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MIT's &quot;&lt;a href=&quot;http://ocw.mit.edu/courses/aeronautics-and-astronautics/16-412j-cognitive-robotics-spring-2005/projects/1aslam_blas_repo.pdf&quot; rel=&quot;nofollow&quot;&gt;SLAM for Dummies&lt;/a&gt;&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also look into &quot;particle filter localization&quot;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;3) Assume your yard is forever static.  If it's not (if you plant a tree, remove the pool, or get a pile of mud after a storm, etc), we'll get to that in code with obstacle avoidance &amp;amp; with localization.  But for now, we'll start with the simplest case, and we'll build up in difficulty from there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now with these 3 additions, I'd start the robot by hugging to the perimeter line -- this is its one little bit of line following.  Let's start at the home, ie: the &quot;charging station,&quot; and we'll work up the map towards the house.  The root will straddle the perimeter wire.  When the left sensor drops from 2V to zero, you're at the top of the map.  Turn right, follow the line for x-inches or x-centimeters, turn right again, and go down the line blindly. This should work well until you reach the house's left perimeter line.  You'll need to try this out in the yard and see how reliable your encoders are, how little slippage your gears give, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Particle filtering will help your robot as it moves blindly to the next perimeter line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The next issue to tackle is how to get around the pool. The encoded wheels will give you a decent idea of your positioning, so you can simply revert back to line following when you hit the pool perimeter.  Follow the line for x-inches again, and turn.  Unlike your exterior perimeter, your turns here are not 180 degrees.  You'll need to experiment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In lieu of trying to work that out, you can just avoid the pool area.  Mow the easy part of the grid (everywhere that allows for simple 90 and 180 degree turns), and then come back to the pool at the end, where you're more likely to have poor localization.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd also add a sonar sensor at the front for obstacle avoidance. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope this spurs some ideas for you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ryan&lt;/p&gt;&#xA;" OwnerUserId="9314" LastActivityDate="2015-10-06T18:27:58.237" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8194" PostTypeId="1" CreationDate="2015-10-06T20:51:31.083" Score="0" ViewCount="337" Body="&lt;p&gt;I bought this drone frame : q450 glass fiber quadcopter frame 450mm from &lt;a href=&quot;http://hobbyking.com/hobbyking/store/__49725__Q450_V3_Glass_Fiber_Quadcopter_Frame_450mm_Integrated_PCB_Version.html&quot; rel=&quot;nofollow&quot;&gt;http://hobbyking.com/hobbyking/store/__49725__Q450_V3_Glass_Fiber_Quadcopter_Frame_450mm_Integrated_PCB_Version.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm considering buying 4 AX-4005-650kv Brushless Quadcopter Motor's from &lt;a href=&quot;http://hobbyking.com/hobbyking/store/__17922__AX_4005_650kv_Brushless_Quadcopter_Motor.html&quot; rel=&quot;nofollow&quot;&gt;http://hobbyking.com/hobbyking/store/__17922__AX_4005_650kv_Brushless_Quadcopter_Motor.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Will these motor's fit this frame ? How can I determine what motor's will fit the frame ?&lt;/p&gt;&#xA;" OwnerUserId="10630" LastActivityDate="2015-12-08T23:01:17.467" Title="Choosing motors for quadcopter frame" Tags="&lt;quadcopter&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8195" PostTypeId="2" ParentId="474" CreationDate="2015-10-06T23:56:08.393" Score="2" Body="&lt;p&gt;Communication latency is another reason why USB1.1 or USB2.0 is not always a good replacement for RS232. Data on USB1.1 or USB2.0 bus is formatted into 1ms or 125us frames respectively, which forces minimum receive to transmit latency equal to two frame periods (often more in practise). This is an important consideration for modern PC hardware, which usually doesn't have built-in RS232 port and USB/RS232 converter is used instead.&lt;/p&gt;&#xA;" OwnerUserId="9166" LastActivityDate="2015-10-06T23:56:08.393" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8196" PostTypeId="1" CreationDate="2015-10-07T00:12:50.003" Score="2" ViewCount="1429" Body="&lt;p&gt;I am running ROS Indigo on Ubuntu 14.04. I am doing a mono-camera calibration and trying to follow the &lt;a href=&quot;http://wiki.ros.org/camera_calibration&quot; rel=&quot;nofollow&quot;&gt;camera calibration tutorial&lt;/a&gt; on the ROS Wiki.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I give the following command:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;rosrun camera_calibration cameracalibrator.py --size 8x6 --square&#xA;  0.108 image:=/my_camera/image camera:=/my_camera&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I get the following error:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;ImportError: numpy.core.multiarray failed to import Traceback (most&#xA;  recent call last): File&#xA;  &quot;/opt/ros/indigo/lib/camera_calibration/cameracalibrator.py&quot;, line 47,&#xA;  in  import cv2 ImportError: numpy.core.multiarray failed to&#xA;  import&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I thought it was to do with updating &lt;code&gt;numpy&lt;/code&gt; and did a &lt;code&gt;rosdep&lt;/code&gt; update but no difference.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is a possible way to solve this problem?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt;&#xA;I uninstalled and reinstalled ROS completely from scratch. I still get the same error. Should I have to look somewhere outside ROS?&lt;/p&gt;&#xA;" OwnerUserId="10739" LastEditorUserId="9176" LastEditDate="2015-12-25T23:37:01.660" LastActivityDate="2015-12-25T23:37:01.660" Title="Camera Calibration fails to run on ROS" Tags="&lt;ros&gt;&lt;cameras&gt;&lt;calibration&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8197" PostTypeId="2" ParentId="8196" CreationDate="2015-10-07T01:14:07.977" Score="0" Body="&lt;p&gt;Are you doing stereo or mono camera calibration?  Can you post more code? (Please update the question, don't post code in a comment on this answer)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I ask because there's a few things to check. Highlights from the tutorial:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Start by getting the dependencies and compiling the driver.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ rosdep install camera_calibration&#xA;&#xA;$ rosmake camera_calibration&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Make sure that your monocular camera is publishing images over ROS. List the topics to check that the images are published:&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ rostopic list&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This will show you all the topics published, check to see that there is an image_raw topic. The default topics provided by most ROS camera drivers are:&#xA;  /camera/camera_info&#xA;  /camera/image_raw&#xA;  If you have multiple cameras or are running the driver in its own namespace, &lt;em&gt;your topic names may differ&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-10-07T01:14:07.977" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8198" PostTypeId="2" ParentId="8184" CreationDate="2015-10-07T05:35:39.463" Score="1" Body="&lt;p&gt;Generally, the term comes from how the machine derives its cutting power.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A mill generally cuts slow RPM, from 3,000 to 5,000 with a &lt;em&gt;lot&lt;/em&gt; or torque.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A router will usually run 10 times that with 30,000 to 50,000 RPM with much less torque.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The axis movements as mentioned by jwpat7 also apply.&lt;/p&gt;&#xA;" OwnerUserId="539" LastActivityDate="2015-10-07T05:35:39.463" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8199" PostTypeId="1" AcceptedAnswerId="8203" CreationDate="2015-10-07T06:57:29.360" Score="0" ViewCount="50" Body="&lt;p&gt;Background: Introductory robotics competition for college freshmen; Bot has to open 8 jars (with two balls in each of them) in ten minutes and load the balls into a shooting mechanism.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, we were doing this project and we hit upon a challenge that the jar is not opening like we originally intended to. So we decided to get a rack-pinion mechanism and use it for unscrewing the lid. However, it is too large and we are unable to fit the bot in the required dimensions&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The actual question:&lt;/strong&gt; Are there any wires or rigid columns/things which can contract ~1 cm when electricity is passed through it? And what would their price range be? Our budget is also in the list of constraints for the bot&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: We can include a wire of length &amp;lt;1m or a column of length &amp;lt;30 cm. Also, the wire needs to contract only more than 7mm&lt;/p&gt;&#xA;" OwnerUserId="10776" LastEditorUserId="10776" LastEditDate="2015-10-07T07:23:55.540" LastActivityDate="2015-10-07T17:46:49.397" Title="Wires or columns which contract on passing electricity" Tags="&lt;mechanism&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8200" PostTypeId="2" ParentId="7953" CreationDate="2015-10-07T09:54:27.470" Score="0" Body="&lt;p&gt;From your data, it is not obvious where the issue is. Can you give more details?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a commonly used hand eye calibration routine written in Matlab:&#xA;&lt;a href=&quot;http://lazax.com/www.cs.columbia.edu/~laza/html/Stewart/matlab/handEye.m&quot; rel=&quot;nofollow&quot;&gt;http://lazax.com/www.cs.columbia.edu/~laza/html/Stewart/matlab/handEye.m&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Note that you also need to download the helper function &lt;code&gt;quat2rot.m&lt;/code&gt; from the same directory.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It implements the Tsai-Lenz method.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Generally, a common mistake in hand eye calibration is to provide inverse transformations.&#xA;Maybe you re-run your routine with one set of transformations inverted?&lt;/p&gt;&#xA;" OwnerUserId="10777" LastActivityDate="2015-10-07T09:54:27.470" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8201" PostTypeId="2" ParentId="8199" CreationDate="2015-10-07T11:54:41.533" Score="1" Body="&lt;p&gt;Have you looked at linear actuators?  However you might be better with a motor and a pulley.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Have you considered alternatives such as:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Wrap a rubber loop around the edge of the lid, put it tight with a high torque motor, and then twist it off with another motor.&lt;/li&gt;&#xA;&lt;li&gt;Do the rules say you have to open the jars by removing the lids?  If not a arming your robot with a hammer may be an option.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="10717" LastActivityDate="2015-10-07T11:54:41.533" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="8202" PostTypeId="1" AcceptedAnswerId="8236" CreationDate="2015-10-07T14:22:27.490" Score="4" ViewCount="194" Body="&lt;p&gt;I have implemented an EKF on a mobile robot (x,y,theta coordinates), but now I've a problem.&#xA;When I detect a landmark, I would like to correct my estimate only on a defined direction. As an example, if my robot is travelling on the plane, and meets a landmark with orientation 0 degrees, I want to correct the position estimate only on a direction perpendicular to the landmark itself (i.e. 90 degrees).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is how I'm doing it for the position estimate:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I update the x_posterior as in the normal case, and store it in x_temp.&lt;/li&gt;&#xA;&lt;li&gt;I calculate the error x_temp - x_prior.&lt;/li&gt;&#xA;&lt;li&gt;I project this error vector on the direction perpendicular to the landmark.&lt;/li&gt;&#xA;&lt;li&gt;I add this projected quantity to x_prior.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This is working quite well, but how can I do the same for the covariance matrix? Basically, I want to shrink the covariance only on the direction perpendicular to the landmark.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you for your help.&lt;/p&gt;&#xA;" OwnerUserId="10782" LastActivityDate="2015-10-12T12:28:49.830" Title="EKF-SLAM: Shrink covariance matrix on one direction" Tags="&lt;mobile-robot&gt;&lt;slam&gt;&lt;kalman-filter&gt;&lt;ekf&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="8203" PostTypeId="2" ParentId="8199" CreationDate="2015-10-07T17:46:49.397" Score="2" Body="&lt;p&gt;It sounds like you are looking for an artificial muscle.&#xA;I see you've already looked at one type of&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/shape-memory_alloy&quot; rel=&quot;nofollow&quot;&gt;shape-memory alloy&lt;/a&gt;; also called memory metal, memory alloy, muscle wire, Nitinol&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Have you looked at&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://writerofminds.blogspot.com/2014/05/homemade-artificial-muscles-iv.html&quot; rel=&quot;nofollow&quot;&gt;twisted fishing line artificial muscles&lt;/a&gt;?&lt;/li&gt;&#xA;&lt;li&gt;The other types mentioned in the Wikipedia: &lt;a href=&quot;http://en.wikipedia.org/wiki/artificial_muscle&quot; rel=&quot;nofollow&quot;&gt;&quot;artificial muscle&quot;&lt;/a&gt; article?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;It seems more natural to me to use normal rotary motors to rotate the screw-on lid of a typical jar, so I am curious to see how your system works.&#xA;Good luck!&lt;/p&gt;&#xA;" OwnerUserId="187" LastActivityDate="2015-10-07T17:46:49.397" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="8204" PostTypeId="1" AcceptedAnswerId="8205" CreationDate="2015-10-08T03:08:51.853" Score="4" ViewCount="921" Body="&lt;p&gt;The joint velocities are constant and equal to $\dot{\theta}_{2}$ = 1 and $\dot{\theta}_{1}$ = 1. How to  Compute the&#xA;velocity of the end-effector when $\theta_{2} =\pi/2$ and $\theta_{1} = \pi/6$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/d9IWO.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/d9IWO.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10786" LastEditorUserId="2155" LastEditDate="2015-10-08T11:01:10.400" LastActivityDate="2015-10-08T11:01:10.400" Title="velocity of the end-effector" Tags="&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8205" PostTypeId="2" ParentId="8204" CreationDate="2015-10-08T06:31:11.757" Score="7" Body="&lt;p&gt;In velocity kinematic, you can establish a relationship between the velocity of the end-effector and the joint velocities, &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{align}&#xA;x_{2}(t) &amp;amp;= a_{1} \cos\theta_{1}(t) + a_{2} \cos(\theta_{1}(t)+\theta_{2}(t)) \\&#xA;y_{2}(t) &amp;amp;= a_{1} \sin\theta_{1}(t) + a_{2} \sin(\theta_{1}(t)+\theta_{2}(t))&#xA;\end{align}&#xA;$$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $a_{1}$ and $a_{2}$ are the lengths of the links. Now the aim is to acquire $\dot{x}_{2}(t)$ and $\dot{y}(t)_{2}$. This is Matlab code for obtaining the derivatives if you are lazy to do them by hand. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;clear&#xA;clc&#xA;&#xA;syms a1 a2 x y th1 th2 t &#xA;&#xA;th1(t) = symfun(sym('th1(t)'), t);&#xA;th2(t) = symfun(sym('th2(t)'), t);&#xA;&#xA;x = a1*cos(th1(t)) + a2*cos(th1(t) + th2(t));&#xA;y = a1*sin(th1(t)) + a2*sin(th1(t) + th2(t));&#xA;&#xA;dxdt = diff(x,t)&#xA;dydt = diff(y,t)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{align}&#xA;\dot{x}_{2}(t) &amp;amp;= -a_{1} \dot{\theta}_{1}\sin\theta_{1} - a_{2}(\dot{\theta}_{1} + \dot{\theta}_{2}) \sin(\theta_{1}+\theta_{2}) \\&#xA;\dot{y}_{2}(t) &amp;amp;= \ \ \ a_{1} \dot{\theta}_{1}\cos\theta_{1} + a_{2}(\dot{\theta}_{1} + \dot{\theta}_{2}) \cos(\theta_{1}+\theta_{2})&#xA;\end{align}&#xA;$$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now you substitute the given parameters in the aforementioned equations. &lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="2155" LastEditDate="2015-10-08T06:38:58.537" LastActivityDate="2015-10-08T06:38:58.537" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8206" PostTypeId="2" ParentId="8191" CreationDate="2015-10-08T09:45:19.823" Score="2" Body="&lt;p&gt;All rotation matrices can be expressed in Euler angles. Precisely, all 3D rotations can be expressed as 3 subsequent unit axis rotations.&#xA;(Note there are 24 different, equally valid conventions of unit axes to write Euler angles.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For Euler angles, a &quot;gimbal lock&quot; occurs iff the Euler angle representation for a given rotation matrix is not unique, i.e. there are infinite solutions.&#xA;At the same time, the mapping from the rotation matrix to Euler angles is non-smooth.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the case of z-x-z extrinsic Euler angles, this special case is for R[3][3]==0. You could than apply an arbitrary z-rotation before and its inverse after without an effect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Rotation_formalisms_in_three_dimensions#Rotation_matrix_.E2.86.92_Euler_angles_.28z-x-z_extrinsic.29&quot; rel=&quot;nofollow&quot;&gt;https://en.wikipedia.org/wiki/Rotation_formalisms_in_three_dimensions#Rotation_matrix_.E2.86.92_Euler_angles_.28z-x-z_extrinsic.29&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10777" LastActivityDate="2015-10-08T09:45:19.823" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8207" PostTypeId="1" CreationDate="2015-10-08T11:17:09.753" Score="2" ViewCount="204" Body="&lt;p&gt;The question I am asking is that, what is the effect on stability of increasing or decreasing both the sample time and lagging of error signal to PID. Does it helps in stability or degrade it?&lt;/p&gt;&#xA;" OwnerUserId="10580" LastActivityDate="2015-10-09T21:30:44.737" Title="Quadcopter stability vs (PID error signal lag and sample time)" Tags="&lt;quadcopter&gt;&lt;pid&gt;&lt;stability&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8208" PostTypeId="2" ParentId="8188" CreationDate="2015-10-08T13:42:20.187" Score="1" Body="&lt;p&gt;iRobot's &lt;a href=&quot;http://homesupport.irobot.com/&quot; rel=&quot;nofollow&quot;&gt;home robot support page&lt;/a&gt; has a &lt;a href=&quot;http://homesupport.irobot.com/app/answers/detail/a_id/641/p/3721&quot; rel=&quot;nofollow&quot;&gt;list of error codes&lt;/a&gt; and specifies a few different &lt;a href=&quot;http://homesupport.irobot.com/app/answers/detail/a_id/7310/p/3721&quot; rel=&quot;nofollow&quot;&gt;solutions for error code 10&lt;/a&gt;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But simply: if your room is too big, use virtual walls.  And if your wheel is stuck, clear the debris.  &lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-10-08T13:42:20.187" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8209" PostTypeId="1" AcceptedAnswerId="8210" CreationDate="2015-10-08T15:35:47.143" Score="1" ViewCount="38" Body="&lt;p&gt;I saw one old industrial robot(Year 1988) end effector is having 2 DC motor for roll drive. After roll drive, yaw and pitch drives are connected and it has dc motors separately.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But roll drive has two DC motors. Why are they used like this? why not single with higher torque.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All the roll, pitch and yaw motors are same spec. Total 4 DC motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Two DC motor connected to single shaft using gears in roll.&lt;/p&gt;&#xA;" OwnerUserId="7474" LastActivityDate="2015-10-08T18:13:11.597" Title="Two DC motors and single output?" Tags="&lt;industrial-robot&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8210" PostTypeId="2" ParentId="8209" CreationDate="2015-10-08T18:13:11.597" Score="0" Body="&lt;p&gt;Reusing parts is a very important and common concept.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using the same DC motor 4 times means you have to deal with only one motor type. If you choose a 2nd type of motor for the roll, you have to fiddle with the characteristics of two motors. Using a motor with more torque usually means that you need a different drive circuit. From here on the problems are proliferating. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;What if the supplier of the bigger motor stops selling the motor?&lt;/li&gt;&#xA;&lt;li&gt;What if the driver circuit of the bigger motor does not have the&#xA;precision of the smaller ones?&lt;/li&gt;&#xA;&lt;li&gt;What's the price to buy 1 + 2 motors vs. buying 4 of the same kind?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;If you are a company building industrial robots you buy DC motors in bulk. You use few standard motors that your engineers are familiar with. The driver circuits are proven and tested.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you face a higher torque requirement, you simply add another familiar motor. It's not economical to pay somebody finding a better suited motor, which has several possible drawbacks as pointed out above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a company your goal is to sell robots, not to overengineer them.&lt;/p&gt;&#xA;" OwnerUserId="9860" LastActivityDate="2015-10-08T18:13:11.597" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8211" PostTypeId="2" ParentId="8207" CreationDate="2015-10-08T18:28:36.513" Score="1" Body="&lt;p&gt;In general, a system that is &quot;discrete&quot; will always be less stable, the less samples per time, the less stable it will be.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Imagine you are driving a car. You are only allowed to turn the steering wheel every 10 minutes. Can you keep the car on a curvy road this way?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To expand the example to answer your second question: don't drink and drive.&#xA;If your sensors are lagging, your ability to control the car are evidently reduced. &lt;/p&gt;&#xA;" OwnerUserId="9860" LastActivityDate="2015-10-08T18:28:36.513" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8212" PostTypeId="1" CreationDate="2015-10-09T02:42:42.443" Score="2" ViewCount="115" Body="&lt;p&gt;I am attempting to use the data Underwater Simulator (UWSim) provides through the ROS interface to simulate a number of sensors that will be running on a physical aquatic robot. One of the sensors detects the current depth of the robot so, I want to simulate this with the data provided by the UWSim simulated pressure sensor. The Problem is that nowhere in the UWSim wiki or source code can I find any reference to what units UWSim uses to measure pressure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That being said, what units does UWSim use to measure pressure? Additionally, I would appreciate general information about what units UWSim uses for the data provided by it's virtual sensors.&lt;/p&gt;&#xA;" OwnerUserId="10791" LastEditorUserId="10791" LastEditDate="2015-10-14T16:12:08.650" LastActivityDate="2015-10-14T16:12:08.650" Title="UWSim Pressure Sensor Units" Tags="&lt;ros&gt;&lt;simulation&gt;&lt;underwater&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8213" PostTypeId="1" CreationDate="2015-10-09T11:10:48.120" Score="0" ViewCount="1749" Body="&lt;p&gt;I am trying to find a control model for the system of a balancing robot. The purpose of this project is control $\theta_2$ by the 2 motors in the wheels i.e. through the torque $τ$ I started with the dynamic equations and went to find the transfer function. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then I will find the PID gains that will control the robot and keep it balanced with the most optimum response. For the time being I am only interested in finding the transfer function for the dynamic model only.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is an example: &lt;a href=&quot;https://www.youtube.com/watch?v=FDSh_N2yJZk&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=FDSh_N2yJZk&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I am not sure of my result.Here are the free body diagrams for the wheels and the inverted pendulum (robot body) and calculations below: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/mszPX.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/mszPX.png&quot; alt=&quot;Diagram&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Dynamic Equations:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{array}{lcr}&#xA;m_1 \ddot{x}_1 = F_r - F_{12} &amp;amp; \rightarrow &amp;amp; (1)&amp;amp; \\&#xA;m_2 \ddot{x}_2 = F_{12} &amp;amp; \rightarrow &amp;amp;  (2) &amp;amp;\\&#xA;J_1 \ddot{\theta}_1 = F_r r - \tau &amp;amp; \rightarrow &amp;amp; (3) &amp;amp;\\&#xA;J_2 \ddot{\theta}_2 = \tau - mgl\theta &amp;amp; \rightarrow &amp;amp; (4) &amp;amp; \mbox{(linearized pendulum)}\\&#xA;\end{array}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Kinematics:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;x_1 = r\theta_1 \\&#xA;x_2 = r\theta_1 + l\theta_2 \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Equating (1) and (3):&#xA;$$&#xA;m_1 \ddot{x}_1 + F_{12} = F_r \\&#xA;\frac{J_1 \ddot{\theta}_1}{r} + \frac{\tau}{r} = F_r&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yields:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\frac{J_1 \ddot{\theta}_1}{r} - m_1 \ddot{x}_1 + \frac{\tau}{r} = F_{12} \rightarrow (5)&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Equating (5) with (2):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\frac{J_1 \ddot{\theta}_1}{r} - m_1 \ddot{x}_1 + \frac{\tau}{r} - m_2 \ddot{x}_2  = 0 \rightarrow (6) \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using Kinematic equations on (6):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;(J_1 - m_1 r^2 - m_2 r^2) \ddot{\theta}_1 + m_2 l r \ddot{\theta}_2 = -\tau \rightarrow (7) \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Equating (7) with (4):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{array}{ccc}&#xA;\underbrace{(J_1 - m_1 r^2 - m_2 r^2) }\ddot{\theta}_1 &amp;amp;+&amp;amp; \underbrace{(m_2 l r + J_2 ) }\ddot{\theta}_2 &amp;amp;+&amp;amp; \underbrace{m_2 gl}\theta &amp;amp;= 0 \rightarrow (8) \\&#xA;A &amp;amp; &amp;amp;B &amp;amp; &amp;amp; C &amp;amp; \\&#xA;\end{array}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using Laplace transform and finding the transfer function:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\frac{\theta_1}{\theta_2} = -\frac{Bs^2 + C}{As^2} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Substituting transfer function into equation (7):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;(J_1 - m_1 r^2 - m_2 r^2) \frac{\theta_1}{\theta_2}\theta_2 s^2 + m_2 lr\theta_2 s^2 = -\tau \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yields:&#xA;$$&#xA;\frac{θ_2}{τ} = \frac{-1}{(mlr-B) s^2+C}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Simplifying:&#xA;$$&#xA;\frac{θ_2}{τ}=  \frac{1}{J_2 s^2-m_2 gl}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Comments:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-This only expresses the pendulum without the wheel i.e. dependent only on the pendulums properties.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-Poles are real and does verify instability.&lt;/p&gt;&#xA;" OwnerUserId="10793" LastEditorUserId="10793" LastEditDate="2015-10-10T09:25:44.750" LastActivityDate="2015-10-10T09:25:44.750" Title="Balancing Robot Control Model" Tags="&lt;arduino&gt;&lt;control&gt;&lt;pid&gt;&lt;wheeled-robot&gt;" AnswerCount="1" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="8214" PostTypeId="2" ParentId="8213" CreationDate="2015-10-09T11:38:46.667" Score="1" Body="&lt;p&gt;At a glance, you haven't defined your x/y datums so when you have an equation it's hard to tell what you are referencing. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, you give an equation:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;m_2 \ddot{x}_2 = F_{12}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But later, for kinematics, you state what I believe to be correct:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;x_2 = r \theta_1 +l \theta_2&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which could also be stated, per your definition, as&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;x_2 = x_1 + l \theta_2&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, if you take two derivatives of the above, you do not get anything close to the first two dynamic equations. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using the kinematic equation as an example, I would suggest that the acceleration $\ddot{x_2}$ is due to both the acceleration at the base &lt;em&gt;and&lt;/em&gt; due to the rotational acceleration of the pendulum, but again you need to pick a datum and see for yourself. I would suggest:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;m_2 \ddot{x}_2 = F_{12} + l \ddot{\theta}_2&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where again, per your definition, this could be rewritten as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;m_2 \ddot{x}_2 = F_r - m_1 \ddot{x}_1 + l \ddot{\theta}_2&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See now the similarity between this and your kinematic definition? This also couples rotation to the wheel motion. I didn't read any further than the kinematic definitions, so there may be other issues, but try this first, see what you get, then ask more questions if you have them. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2015-10-09T13:49:35.957" LastActivityDate="2015-10-09T13:49:35.957" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8215" PostTypeId="2" ParentId="8191" CreationDate="2015-10-09T14:21:22.120" Score="6" Body="&lt;p&gt;I think you may be misunderstanding the nature of gimbal lock. It sounds like you may be trying to remove an actual term in a &lt;a href=&quot;https://en.wikipedia.org/wiki/Euler_angles#Rotation_matrix&quot; rel=&quot;noreferrer&quot;&gt;rotation matrix calculation &lt;/a&gt;, but this is incorrect because each axis is still able to rotate. What happens with gimbal lock is that one of the rotational degrees of freedom &lt;em&gt;of the object&lt;/em&gt; you are rotating is removed. This happens when two rotational axes become aligned. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/SRwlZ.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/SRwlZ.jpg&quot; alt=&quot;Gimbal lock&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the image on the left, pins that allow the blue and orange rings to rotate are aligned. This means that the blue ring may rotate to allow pitch, the green ring may rotate to allow yaw, but the orange ring does not allow roll. The orange ring is aligned with the blue ring, meaning that it also can only allow pitch motion. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ZHNtX.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZHNtX.gif&quot; alt=&quot;Axis terminology&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The way to achieve roll is to separate the blue and orange rings, as shown on the right image above. To pitch the orange ring moves, and then yaw and roll are movements of the blue and  green rings together. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Notice again that, even in gimbal lock, each ring (each axis) can &lt;em&gt;still&lt;/em&gt; move - no term would be removed from a rotation matrix equation. Instead, the object is &quot;locked&quot; on the roll axis because the physical arrangement is such that there is no way to roll. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2015-10-09T23:17:05.643" LastActivityDate="2015-10-09T23:17:05.643" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8217" PostTypeId="2" ParentId="8184" CreationDate="2015-10-09T21:03:25.897" Score="5" Body="&lt;p&gt;TL;DR CNC routers move the tool while CNC mills move the workpiece, but this is a matter of common usage and not based on hard definitions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A router (in the woodworking sense) is just a rotary tool with a cutting bit.  Woodworkers consider them a very universal tool, because they can be mounted into shop-made fixtures to create a wide range of other tools.  &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;router table&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=9qt5ui3P9QA&quot; rel=&quot;noreferrer&quot;&gt;router lathe&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=uGMTZ9PAXkA&quot; rel=&quot;noreferrer&quot;&gt;copy router&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://woodgears.ca/pantorouter/&quot; rel=&quot;noreferrer&quot;&gt;pantorouter&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;router mills&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;A &quot;mill&quot; typically defines a machine that can feed a workpiece to a rotary cutting bit along several axes.  There are many variations on this concept (e.g. vertical mills, horizontal mills, spiral mills, etc) depending on which axes are used.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Technically speaking, either the workpiece or the cutting tool can move in a milling machine.  But in common usage, when people say &quot;milling machine&quot; they mean &quot;bridgeport-style milling machine&quot; -- a vertical mill with its cutting tool in a fixed position and an X/Y/Z axis table that can move the workpiece.  (A mill made from a router is just a &quot;gantry-style&quot; milling machine.) &lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2015-10-09T21:03:25.897" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8218" PostTypeId="2" ParentId="8207" CreationDate="2015-10-09T21:30:44.737" Score="2" Body="&lt;p&gt;A PID can provide great control, but it's a very unsophisticated technique -- it only understands error and correction.  The longer you wait between measurements, the larger your error will be each time.  (No surprises here, right?  It's the difference between moving 60 miles every hour and moving 1 mile every minute.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The best performance that you can get from a PID happens when it runs (1) as fast as your sensor can supply &lt;em&gt;accurate&lt;/em&gt; measurements, or (2) as fast as your actuator can make accurate adjustments -- whichever is slower.  If your sensor measurements aren't updating between PID ticks, your PID will overcompensate.  If your actuators aren't updating between PID ticks, you will notice that your PID gains only work for a limited range of the output (e.g. it works fine at 75% thrust but goes crazy at 55% or 95%).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding accuracy: it may be necessary to average out individual measurements from a noisy sensor, which sacrifices the sample rate.  If that's the case, there really isn't much you can do here except lower your maximum speed.  You can experiment a bit to see how much averaging is sufficient for your application, but you can't really get around the limitations of the hardware itself.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2015-10-09T21:30:44.737" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="8219" PostTypeId="2" ParentId="8194" CreationDate="2015-10-09T21:40:47.077" Score="1" Body="&lt;p&gt;Those motors have three mounting holes while the frame expects four for the the motors. So you could use an adapter like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/u3MFj.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/u3MFj.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just make sure all the spacings are correct for your motrs and your frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The URL for your frame lists mounting holes that are spaced at 16/19mm. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or alternatively you could look for a motor with holes that are spaced correctly to your frame without having to use adapters. You're probably better off avoiding use of the adapters as they add unnecessary weight, unless you can't find better specced motors.&lt;/p&gt;&#xA;" OwnerUserId="1075" LastActivityDate="2015-10-09T21:40:47.077" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8220" PostTypeId="1" AcceptedAnswerId="8221" CreationDate="2015-10-10T06:31:02.580" Score="1" ViewCount="428" Body="&lt;p&gt;I recently bought a IMU . I am new at this. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question: Does the positioning of the IMU matter? Are there any differences between placing it at the center of the plate or if it is offset from the center?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am still learning about this topic. So any help would be greatly appreciated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="10691" LastActivityDate="2015-10-10T08:14:11.903" Title="Balancing a plate with an IMU offset from the center" Tags="&lt;control&gt;&lt;sensors&gt;&lt;imu&gt;&lt;sensor-fusion&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="8221" PostTypeId="2" ParentId="8220" CreationDate="2015-10-10T08:14:11.903" Score="3" Body="&lt;p&gt;Basically it does not matter. &lt;br&gt;&#xA;But you have to be carefull if the plate is rotating fast, because the rotation of the plate around its center point, with the IMU placed out of center, will cause the accelerometer to measure centrifugal forces.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your task is to stabalize the platform, this won't be an issue for you.&lt;/p&gt;&#xA;" OwnerUserId="6911" LastActivityDate="2015-10-10T08:14:11.903" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8222" PostTypeId="1" AcceptedAnswerId="8258" CreationDate="2015-10-10T16:58:31.950" Score="2" ViewCount="109" Body="&lt;p&gt;I have a sensor that gives R, Theta, Phi (Range, Azimuth and Elevation) As such:&#xA;&lt;a href=&quot;https://imgur.com/HpSQc50&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://imgur.com/HpSQc50&lt;/a&gt;&#xA;I need to predict the next state of the object given the roll, pitch yaw angular velocities given the above information. But the math is really confusing me.&#xA;So far all I've gotten is this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Xvel = (R * AngularYVel * cos(Theta))&#xA;YVel = (R * AngularXVel * cos(Phi))&#xA;ZVel = (R * AngularYVel * -sin(Theta)) + (R * AngularXVel * -sin(Phi))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;i worked this out by trigonometry, so far this seems to predict the pitching about the x axis and yawing about my y axis (sorry i have to use camera axis)&#xA;But i dont know how to involve the roll (AngularZVel)&lt;/p&gt;&#xA;" OwnerUserId="10379" LastActivityDate="2015-10-15T00:18:46.910" Title="3D Angular velocity to 3D velocity to predict next state" Tags="&lt;kalman-filter&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8223" PostTypeId="1" AcceptedAnswerId="8238" CreationDate="2015-10-10T19:36:36.353" Score="-1" ViewCount="5519" Body="&lt;p&gt;I am using the ar_track_alvar package in Indigo to detect AR Tags and determine their respective poses. I am able to run the tracker successfully as I can visualize the markers in RViz. I give the following command to print the pose values&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;rostopic echo /ar_pose_marker&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;and I get the following output indicating that the poses are determined.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;&lt;pre&gt;&lt;code&gt;header: &#xA;  seq: 0&#xA;  stamp: &#xA;    secs: 1444430928&#xA;    nsecs: 28760322&#xA;  frame_id: /head_camera&#xA;id: 3&#xA;confidence: 0&#xA;pose: &#xA;  header: &#xA;    seq: 0&#xA;    stamp: &#xA;      secs: 0&#xA;      nsecs: 0&#xA;    frame_id: ''&#xA;  pose: &#xA;    position: &#xA;      x: 0.196624979223&#xA;      y: -0.238047436646&#xA;      z: 1.16247606451&#xA;    orientation: &#xA;      x: 0.970435431848&#xA;      y: 0.00196992162831&#xA;      z: -0.126455066154&#xA;      w: -0.205573121457&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Now I want to use these poses in another ROS node and hence I need to subscribe to the appropriate ROS message('ar_pose_marker&quot;). But I am unable to get enough information on the web on the header files and functions to use in order to extract data from the published message. It would be great if somebody can point to a reference implementation or documentation on handling these messages. It might be useful to note that ar_track_alvar is just a ROS wrapper and hence people who have used ALVAR outside of ROSmay also give their inputs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried to write code for the above task as suggested by @Ben in the comments but I get an error. The code is as follows&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;ros/ros.h&amp;gt;&#xA;#include &amp;lt;ar_track_alvar_msgs/AlvarMarker.h&amp;gt;&#xA;#include &amp;lt;tf/tf.h&amp;gt;  &#xA;#include &amp;lt;tf/transform_datatypes.h&amp;gt;&#xA;&#xA;void printPose(const ar_track_alvar_msgs::AlvarMarker::ConstPtr&amp;amp; msg)&#xA;{   &#xA;    tf::Pose marker_pose_in_camera_;    &#xA;&#xA;    marker_pose_in_camera_.setOrigin(tf::Vector3(msg.pose.pose.position.x,&#xA;                             msg.pose.pose.position.y,&#xA;                             msg.pose.pose.position.z));&#xA;&#xA;}&#xA;&#xA;int main(int argc, char **argv)&#xA;{&#xA;    ros::init(argc, argv, &quot;pose_subscriber&quot;);&#xA;&#xA;    ros::NodeHandle nh;&#xA;&#xA;    ros::Subscriber pose_sub = nh.subscribe(&quot;ar_pose_marker&quot;, 1000, printPose);&#xA;&#xA;    ros::spin();&#xA;&#xA;    return 0;&#xA;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And I get the following error&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/home/karthik/ws_ros/src/auto_land/src/pose_subscriber.cpp: In function ‘void printPose(const ConstPtr&amp;amp;)’:&#xA;/home/karthik/ws_ros/src/auto_land/src/pose_subscriber.cpp:17:53: error: ‘const ConstPtr’ has no member named ‘pose’&#xA;    marker_pose_in_camera_.setOrigin(tf::Vector3(msg.pose.pose));&#xA;                                                     ^&#xA;make[2]: *** [auto_land/CMakeFiles/pose_subscriber.dir/src/pose_subscriber.cpp.o] Error 1&#xA;make[1]: *** [auto_land/CMakeFiles/pose_subscriber.dir/all] Error 2&#xA;make: *** [all] Error 2&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Any suggestions?&lt;/p&gt;&#xA;" OwnerUserId="10739" LastEditorUserId="10739" LastEditDate="2015-10-13T23:02:59.207" LastActivityDate="2016-09-27T10:48:57.923" Title="Determining pose from ar_track_alvar message in ROS" Tags="&lt;ros&gt;&lt;pose&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8225" PostTypeId="1" CreationDate="2015-10-11T02:32:33.620" Score="2" ViewCount="81" Body="&lt;p&gt;I am doing research on autonomous car and looking for a sensor to be used along with LiDAR laser scanner. Ladybug could be a very good option but the cost!! too expensive. &#xA;Could you please suggest me options for camera sensors with good FOV and which will cost me around $1000. &#xA;Thank you so much!!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-CHIANG CHEN&lt;/p&gt;&#xA;" OwnerUserId="10803" LastActivityDate="2015-10-11T02:32:33.620" Title="choice for camera sensor to be used with LiDAR" Tags="&lt;computer-vision&gt;" AnswerCount="0" CommentCount="1" ClosedDate="2015-10-12T09:55:50.920" ContentLicense="CC BY-SA 3.0" />
  <row Id="8226" PostTypeId="1" AcceptedAnswerId="8237" CreationDate="2015-10-11T05:29:52.497" Score="1" ViewCount="255" Body="&lt;p&gt;I'm working on a project that requires me to build a small vehicle (footprint of ~ 14 x 14 inches, less than 6.5 pounds) that can traverse sand. For the steering system, I was thinking of replicating the way tanks and lawn mowers navigate (ability to do zero-point turns), but I want to do this with four wheels instead of tracks like a tank.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need help with implementing this idea. My preliminary thoughts are to have two motors where each motor power the wheels on one side of the vehicle (I think this would require a gearing system) or to have a motor to power each individual wheel which I'd rather avoid.&lt;/p&gt;&#xA;" OwnerDisplayName="user10804" LastActivityDate="2015-10-12T13:06:00.087" Title="How would I replicate a tank/zero-turn steering system in a small robotic vehicle?" Tags="&lt;mobile-robot&gt;&lt;motor&gt;&lt;wheeled-robot&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8227" PostTypeId="2" ParentId="8226" CreationDate="2015-10-11T06:50:54.117" Score="0" Body="&lt;p&gt;You should just need to reverse the inside wheels.  The problem you might get on sand is the wheels have too much grip, or rather bite the sand too much.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Track systems need torque.  I suspect you might have the same issue with your design, you have to overcome the forces when you try and drag the wheels through the sand.&lt;/p&gt;&#xA;" OwnerUserId="10717" LastActivityDate="2015-10-11T06:50:54.117" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8228" PostTypeId="1" AcceptedAnswerId="8235" CreationDate="2015-10-11T08:00:43.973" Score="0" ViewCount="91" Body="&lt;p&gt;I want to replace the flight module with smart phone because it has all sensors that are required, like gyroscope, magnetometer, etc. Is that possible?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am using an Google Nexus 4 Android (OS model 5.1). I will control using another mobile, I am able write an app, with an Arduino acting as a bridge between smartphone and copter. I am using flight controller &lt;a href=&quot;https://www.openpilot.org/product/coptercontrol/&quot; rel=&quot;nofollow&quot;&gt;OpenPilot CC3D CopterControl&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="10807" LastEditorUserId="9176" LastEditDate="2015-10-17T12:10:01.927" LastActivityDate="2015-10-17T12:10:01.927" Title="Quad Copter flight module can replace with smart phone?" Tags="&lt;arduino&gt;&lt;quadcopter&gt;" AnswerCount="2" CommentCount="1" ClosedDate="2015-10-16T12:59:36.160" ContentLicense="CC BY-SA 3.0" />
  <row Id="8229" PostTypeId="1" CreationDate="2015-10-11T08:04:14.533" Score="3" ViewCount="543" Body="&lt;p&gt;In the past I built some simple robot arms at home, using RC servo motors or stepper motors (till 3dof). I would like to build a new arm with 4dof or 5dof with the steppers. Until now I used Arduino and A4988 stepper drivers and Gcode.&#xA;For calculating inverse kinematics in real time for a 4dof or 5dof I think the Arduino is not enough powerful. So I'm searching for a new tool-chain Gcode Interpreter + inverse kinematics calculation + stepper controller.&#xA;I see LinuxCNC + beaglebone black + cnc cape. Not too expensive for an hobbyist.&#xA;But this is the only possibility I found. There are other possibilities for an hobbyist to implement a 4dof or 5dof robot arm working with the stepper motors?&lt;/p&gt;&#xA;" OwnerUserId="10806" LastActivityDate="2015-12-17T07:15:17.223" Title="4dof or 5dof robot arm with stepper motors tool-chain for an hobbyist" Tags="&lt;stepper-motor&gt;&lt;robotic-arm&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8231" PostTypeId="1" CreationDate="2015-10-11T12:57:22.873" Score="1" ViewCount="149" Body="&lt;p&gt;my quadcopter's settling time is very large, that is it sets its setpoint in very large amount of time, during which it has covered a large distance. But at settle point, when i gives it a jerk or push its returns to settle in normal duration. doesnt over shoots(little). The problem is with the settling time that is when i move the stick front or back it takes huge amount of time. what could be wrong. i have tried giving more P value and I value to PID but then it overshoots and get unstable. This is my PID program. the PID values are given. I read 6 channels from remote using the command pulsein(). which i guess is taking upto 20ms per command.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;kp = 1.32;&#xA;ki= 0.025;&#xA;kd= 0.307;&#xA;void PID() {&#xA;  error = atan2(lx,ly);&#xA;  error *= 1260/22;   &#xA;  error = setpoint1 - error;   &#xA;  now = millis(); &#xA;  dt = now - ptime;&#xA;  ptime = now;&#xA;  dt /= 1000;  &#xA;  integ = integ + (error * dt);&#xA;  der = (error - prerror) / dt;&#xA;  pidy = (kp * error); &#xA;  pidy += (ki * integ);&#xA;  pidy += (kd * der); &#xA;  //Serial.println(error);&#xA;  prerror = error;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;pidy&lt;/code&gt; is added and subtracted to esc speeds respectively.&lt;/p&gt;&#xA;" OwnerUserId="10580" LastEditorUserId="350" LastEditDate="2016-03-09T18:03:03.157" LastActivityDate="2016-03-09T18:03:03.157" Title="my quadcopter settling time is very large" Tags="&lt;arduino&gt;&lt;quadcopter&gt;&lt;pid&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="8232" PostTypeId="2" ParentId="8231" CreationDate="2015-10-11T14:38:23.917" Score="1" Body="&lt;p&gt;Typically when someone refers to settling time, it's time to achieve the desired target within some limit, and is usually in reference to oscillations about the desired target. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have a long time to reach a set position with little or no overshoot, it sounds to me like you have a long &lt;a href=&quot;https://en.wikipedia.org/wiki/Rise_time&quot; rel=&quot;nofollow&quot;&gt;rise time&lt;/a&gt; and that maybe your controller is more damped than you would like.  I would try increasing the proportional gain and/or the integral gain until you get a response that is closer to what you want.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-10-11T14:38:23.917" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8234" PostTypeId="1" CreationDate="2015-10-12T00:41:19.493" Score="0" ViewCount="140" Body="&lt;p&gt;I'm interested in building a quadcopter. The result I'd like to obtain is an autonomous drone. I'd be interested in a GPS to allow it to remain stationary in the air, and also to fly through checkpoints.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can this be done with a flight controller, or does it need to be programmed? I'm not too sure about what flight controllers really are.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could someone offer any materials to help me get towards this goal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks, Jacob&lt;/p&gt;&#xA;" OwnerUserId="10815" LastActivityDate="2016-06-14T15:04:07.493" Title="For a quadcopter: Premade flight controller or custom made?" Tags="&lt;arduino&gt;&lt;quadcopter&gt;" AnswerCount="2" CommentCount="2" ClosedDate="2016-06-14T15:08:17.440" ContentLicense="CC BY-SA 3.0" />
  <row Id="8235" PostTypeId="2" ParentId="8228" CreationDate="2015-10-12T11:31:53.837" Score="2" Body="&lt;p&gt;You need to be a lot more specific in your question so you can get a meaningful answer:  &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;What smart phone are you connecting? Make, model, OS&lt;/li&gt;&#xA;&lt;li&gt;What flight module are you replacing?&lt;/li&gt;&#xA;&lt;li&gt;How will you be controlling the smart phone?&lt;/li&gt;&#xA;&lt;li&gt;Are you able to write an app for the smart phone?&lt;/li&gt;&#xA;&lt;li&gt;What will happen when the smart phone looses its signal?&lt;/li&gt;&#xA;&lt;li&gt;How will you connect the phone to the copter?&lt;/li&gt;&#xA;&lt;li&gt;Why have you tagged this with Arduino?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;If you can provide more info then I can provide a more specific answer than: Maybe.&lt;/p&gt;&#xA;" OwnerUserId="10717" LastActivityDate="2015-10-12T11:31:53.837" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8236" PostTypeId="2" ParentId="8202" CreationDate="2015-10-12T12:28:49.830" Score="0" Body="&lt;p&gt;Here is my solution, that is just an approximation but it is working quite well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Essentially this is what I do:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I store the a priori covariance matrix in $P_{old}$.&lt;/li&gt;&#xA;&lt;li&gt;I execute the normal (uncorrected) update step, and store the covariance matrix in $P_{new}$.&lt;/li&gt;&#xA;&lt;li&gt;Given the direction of the landmark $d$, I compute the parallel component (to this direction $d$) of the axis of the ellipse represented by $P_{old}$. Then, I select the component with maximum length and store it in $a_{par}$.&lt;/li&gt;&#xA;&lt;li&gt;I compute the perpendicular component (to the same direction $d$) of the axis of the ellipse represented by $P_{new}$. Then, I select the component with maximum length and store it in $a_{perp}$.&lt;/li&gt;&#xA;&lt;li&gt;Finally I generate the corrected ellipse from the 2 axis $a_{par}$ and $a_{perp}$ and store the covariance matrix in $P$. &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This is represented in the following example (direction of the landmark $d$ = 0°) figure, where the red ellipse is represented by $P_{old}$, the green ellipse by $P_{new}$, and the blue ellipse is the corrected one represented by $P$, where only the component perpendicular to $d$ has been shrunk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/AqaT7.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/AqaT7.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10782" LastActivityDate="2015-10-12T12:28:49.830" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8237" PostTypeId="2" ParentId="8226" CreationDate="2015-10-12T13:06:00.087" Score="0" Body="&lt;p&gt;Check out the video I linked in my answer to a &lt;a href=&quot;https://engineering.stackexchange.com/a/4210/1633&quot;&gt;similar question at the Engineering SE&lt;/a&gt;. In that answer I said that the problem with trying to use differential steering in a wheeled vehicle is that you have to accept a tremendous amount of slip in order to perform turns. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a wheeled vehicle on a hard surface, like pavement, this means burning tires to make common turns. Tanks don't have this issue because they aren't designed to and typically don't operate on roads, they operate on soil. In that scenario the ground gets torn up instead of the &quot;wheels&quot;(tracks). However, with a tank, there isn't &lt;em&gt;as much&lt;/em&gt; damage to the ground because the tracks distribute the weight of the vehicle over a much larger surface area, reducing the ground pressure it exerts. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem you'll have with a differentially steered wheeled vehicle operating in sand is that you get small points of contact between the tire and terrain due to the circular nature of the tire (point of tangent plus some tire/terrain deformation), and that small point of contact boosts ground pressure. Then, on top of that, you're going to spin tires - you're asking for the vehicle to dig itself in. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your vehicle is light, so if you manage to get some large/oversized tires and run them under-inflated you might be able to get by, but this for me is one of the great joys of engineering: the best, fastest way to get a satisfying answer is to try it. Try what you want to do in the environment you expect to operate. If building a prototype is too costly/time consuming I would choose a different method of locomotion for fear of digging into the sand, but if your actual terrain is &quot;sandy&quot; instead of &quot;sand&quot;, as in by a river, or if the sand is wet or compacted, you might be able to get by.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, that said, if you really want to go this route and weight is an issue, I would use &lt;a href=&quot;http://www.robotmarketplace.com/products/mechanical_main.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;belts or chains&lt;/a&gt; to attach the wheels to the motors. Using a gearbox would be expensive weight-wise and would also probably limit the wheel base you could use. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="-1" LastEditDate="2017-04-13T12:51:48.677" LastActivityDate="2015-10-12T13:06:00.087" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8238" PostTypeId="2" ParentId="8223" CreationDate="2015-10-12T17:39:20.410" Score="1" Body="&lt;p&gt;If you do a &lt;code&gt;rostopic type /ar_pose_marker&lt;/code&gt; you should see something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ar_track_alvar_msgs/AlvarMarker&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then if you do a &lt;code&gt;rosmsg show ar_track_alvar_msgs/AlvarMarker&lt;/code&gt; you should see something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;std_msgs/Header header&#xA;  uint32 seq&#xA;  time stamp&#xA;  string frame_id&#xA;uint32 id&#xA;uint32 confidence&#xA;geometry_msgs/PoseStamped pose&#xA;  std_msgs/Header header&#xA;    uint32 seq&#xA;    time stamp&#xA;    string frame_id&#xA;  geometry_msgs/Pose pose&#xA;    geometry_msgs/Point position&#xA;      float64 x&#xA;      float64 y&#xA;      float64 z&#xA;    geometry_msgs/Quaternion orientation&#xA;      float64 x&#xA;      float64 y&#xA;      float64 z&#xA;      float64 w&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So now you can subscribe to the &lt;code&gt;/ar_pose_marker&lt;/code&gt; topic which is of type &lt;code&gt;ar_track_alvar_msgs/AlvarMarker&lt;/code&gt;.  (Follow the &lt;a href=&quot;http://wiki.ros.org/roscpp/Overview/Publishers%20and%20Subscribers#Subscribing_to_a_Topic&quot; rel=&quot;nofollow&quot;&gt;cpp&lt;/a&gt; or &lt;a href=&quot;http://wiki.ros.org/rospy/Overview/Publishers%20and%20Subscribers#Subscribing_to_a_topic&quot; rel=&quot;nofollow&quot;&gt;python&lt;/a&gt; tutorials for the syntax).  Then in your callback, you can get the pose out of the message by simply doing &lt;code&gt;msg.pose.pose&lt;/code&gt;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind that this is the pose in message format.  It doesn't support the normal mathematical operations that you would expect.  For that, you must convert it to another type such as an &lt;a href=&quot;http://eigen.tuxfamily.org/dox/group__TutorialMatrixClass.html&quot; rel=&quot;nofollow&quot;&gt;Eigen matrix&lt;/a&gt;, &lt;a href=&quot;http://docs.scipy.org/doc/numpy/reference/generated/numpy.matrix.html&quot; rel=&quot;nofollow&quot;&gt;Numpy matrix&lt;/a&gt;, or &lt;a href=&quot;http://docs.ros.org/hydro/api/orocos_kdl/html/classKDL_1_1Frame.html&quot; rel=&quot;nofollow&quot;&gt;KDL Frame&lt;/a&gt;.  &lt;a href=&quot;http://wiki.ros.org/tf_conversions&quot; rel=&quot;nofollow&quot;&gt;tf_conversions&lt;/a&gt; has some code for that.  Or you can use some external library like &lt;a href=&quot;https://bitbucket.org/benkehoe/tfx&quot; rel=&quot;nofollow&quot;&gt;tfx&lt;/a&gt;.  Or just do it yourself.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-10-12T17:39:20.410" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8241" PostTypeId="1" AcceptedAnswerId="8242" CreationDate="2015-10-13T06:38:47.927" Score="2" ViewCount="184" Body="&lt;p&gt;I would like to make a Cartesian robot with maximum speed of up to $1ms^{-1}$ in x/y plane, acceleration $2ms^{-2}$ and accuracy at least 0.1mm. Expected loads: 3kg on Y axis, 4kg on X axis. Expected reliability: 5000 work hours. From what I have seen in 3D printers, belt drive seems not precise enough (too much backlash), while screw drive is rather too slow. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What other types of linear actuators are available? What is used in commercial grade robots, i.e. &lt;a href=&quot;http://www.janomeie.com/products/desktop_robot/jr-v2000_series/index.html&quot; rel=&quot;nofollow&quot;&gt;http://www.janomeie.com/products/desktop_robot/jr-v2000_series/index.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7360" LastEditorUserId="37" LastEditDate="2015-10-13T13:13:52.247" LastActivityDate="2015-10-14T11:53:15.910" Title="Linear actuators in a cartesian robots" Tags="&lt;actuator&gt;&lt;industrial-robot&gt;&lt;cnc&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="8242" PostTypeId="2" ParentId="8241" CreationDate="2015-10-13T13:23:05.007" Score="3" Body="&lt;p&gt;I have worked on a cartesian robot with similar requirements&lt;sup&gt;&amp;dagger;&lt;/sup&gt; as your own, and we selected &lt;a href=&quot;https://en.wikipedia.org/wiki/Linear_motor#Synchronous_motor&quot; rel=&quot;nofollow&quot;&gt;direct drive synchronous linear motors&lt;/a&gt; for our x/y stages. In our case, both axes were around 2m in length, but magnet the tracks have the potential to be as long as you need to build them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;&amp;dagger; Less than an order of magnitude higher at $2/5ms^{-1}$ velocity &amp;amp; $10/20ms^{-2}$ acceleration for x &amp;amp; y stages respectively.&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In our case, we used an &lt;a href=&quot;http://www.aerotech.co.uk/product-catalog/motors/linear-motors/blmfs5-series.aspx?p=%2Fproduct-catalog%2Fmotors.aspx%3Fgclid%3DCjwKEAjw1_KwBRDEz_WvncL4jGwSJAAEym0dQY8gHk1TZOwd_Kj5EWvbQJFpST9NGdjYcHJDtRByYRoCOo3w_wcB&quot; rel=&quot;nofollow&quot;&gt;exposed magnet track linear motor from aerotech&lt;/a&gt;, but for most applications a u-shaped track is more convenient as it contains the high magnetic fields within a more enclosed space. Our cartesain robot had large exposed magnet track surfaces which meant that we had to post warnings regarding letting pacemakers and metal tools getting too close (a screwdriver could be attracted to the magnet track with sufficient force to damage both and anything which got in between, such as your fingers).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are a number of manufacturers making direct drive linear motors (as a &lt;a href=&quot;https://www.google.co.uk/search?q=direct%20drive%20linear%20motors&quot; rel=&quot;nofollow&quot;&gt;google search&lt;/a&gt; will show), and in addition to flat and U-shaped tracks, manufacturers such as &lt;a href=&quot;http://www.micromech.co.uk/dir_products/nippon/motors_shaft.html&quot; rel=&quot;nofollow&quot;&gt;Nippon Pulse&lt;/a&gt; and &lt;a href=&quot;http://www.linmot.com/products/linear-motors/&quot; rel=&quot;nofollow&quot;&gt;LinMot&lt;/a&gt; do cylindrical shaft motors, which might be easier to retrofit to a robot which currently uses a lead-screw linear actuator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The accuracy of these direct drive systems can be very much dependent on tuning. They often suffer from significant &lt;a href=&quot;https://en.wikipedia.org/wiki/Cogging_torque&quot; rel=&quot;nofollow&quot;&gt;cogging effects&lt;/a&gt;, though some manufacturers claim to include &lt;a href=&quot;http://www.kollmorgen.com/en-us/products/motors/direct-drive/direct-drive-linear/&quot; rel=&quot;nofollow&quot;&gt;patented zero and anti-cogging techniques&lt;/a&gt; and often maximum and minimum speeds can be related to how smooth you want the movement to be at those speeds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;As an aside, we also used &lt;a href=&quot;https://en.wikipedia.org/wiki/Air_bearing&quot; rel=&quot;nofollow&quot;&gt;air-bearings&lt;/a&gt; on our X track, which is how we managed high speed and acceleration with a relatively small motor. They were really difficult to tune however and this was complicated by the fact that we had 6 X-carriages on each Y beam (of which there were two, so 14 x/y axes and 16 motors in total).&lt;/sup&gt;&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="37" LastEditDate="2015-10-14T11:53:15.910" LastActivityDate="2015-10-14T11:53:15.910" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8244" PostTypeId="1" AcceptedAnswerId="8246" CreationDate="2015-10-13T16:49:29.270" Score="1" ViewCount="3807" Body="&lt;p&gt;This is a very basic beginner question, I know, but I am having trouble connecting to the Hokuyo UST-10LX sensor and haven't really found much in terms of helpful documentation online.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried connecting the Hokuyo UST-10LX directly to the ethernet port of a Lubuntu 15.04 machine. The default settings of the Hokuyo UST-10LX are apparently:&#xA;ip addr: 192.168.0.10&#xA;netmask: 255.255.255.0&#xA;gateway: 192.168.0.1&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, I tried going to the network manager and setting IPv4 settings manually, to have the ip addr be 192.168.0.9, netmask of 255.255.255.0, and gateway to 192.168.0.1. I also have a route set up to the settings of the scanner.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I then go into the terminal and run:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;rosrun urg_node urg_node _ip_address:=192.168.0.10&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and get this output:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[ERROR] [1444754011.353035050]: [setParam] Failed to contact master at [localhost:11311].  Retrying...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;How might I fix this? I figure it's just a simple misunderstanding on my end, but through all my searching I couldn't find anything to get me up and running :(&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you for the help! :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;HighVoltage pointed out to me that I wasn't running &lt;code&gt;roscore&lt;/code&gt; which was indeed the case. I was actually running into problems before that when I still had &lt;code&gt;roscore&lt;/code&gt; up, and when I tried it again, this was the output of the &lt;code&gt;rosrun&lt;/code&gt; command:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[ERROR] [1444828808.364581810]: Error connecting to Hokuyo: Could not open network Hokuyo:&#xA;192.168.0.10:10940&#xA;could not open ethernet port.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Thanks again!&lt;/p&gt;&#xA;" OwnerUserId="10828" LastEditorUserId="10828" LastEditDate="2015-10-14T13:26:23.767" LastActivityDate="2016-10-30T03:46:28.323" Title="How to connect ethernet based Hokuyo scanner?" Tags="&lt;sensors&gt;&lt;ros&gt;&lt;rangefinder&gt;&lt;linux&gt;" AnswerCount="3" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="8245" PostTypeId="1" AcceptedAnswerId="8264" CreationDate="2015-10-13T20:44:29.350" Score="2" ViewCount="102" Body="&lt;p&gt;I have a dataset that contains position information from tracking a robot in the environment. The position data comes both from a very accurate optical tracking system (Vicon or similar) and an IMU. I need to compare both position data (either integrating the IMU or differentiating the optical tracking data).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main problem is that both systems have different reference frames, so in order to compare I first need to align both reference frames. I have found several solutions; the general problem of aligning two datasets seems to be called &quot;the absolute orientation problem&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My concern is that if I use any of these methods I will get the rotation and translation that aligns both datasets minimizing the error over the whole dataset, which means that it will also compensate up to some extent for the IMU's drift. But I am especially interested in getting a feeling of how much the IMU drifts, so that solution does not seem to be applicable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyone has any pointer on how to solve the absolute orientation problem when you do not want to correct for the drift?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="10832" LastActivityDate="2015-10-15T14:36:30.997" Title="Aligning datasets with drift" Tags="&lt;sensors&gt;&lt;localization&gt;&lt;imu&gt;&lt;calibration&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8246" PostTypeId="2" ParentId="8244" CreationDate="2015-10-14T06:56:33.637" Score="1" Body="&lt;p&gt;Are you sure roscore is running? &quot;Failed to contact master&quot; is usually an issue with roscore not initializing. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If roscore indeed is running but you are still getting the message, check if ROS_MASTER_URI is set to something other than the default. Or run &quot;rosnode list&quot; and paste the output here.&lt;/p&gt;&#xA;" OwnerUserId="10310" LastActivityDate="2015-10-14T06:56:33.637" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8247" PostTypeId="1" AcceptedAnswerId="8252" CreationDate="2015-10-14T08:43:47.833" Score="2" ViewCount="280" Body="&lt;p&gt;Let us assume I have an object O with axis $x_{O}$, $y_{O}$, $z_{O}$, with different orientation from the global frame S with $x_{S}$, $y_{S}$, $z_{S}$ (I don't care about the position).&#xA;Now I know the 3 instantaneous angular velocities of the object O with respect to the same O frame, that is $\omega_O^O = [\omega_{Ox}^O \omega_{Oy}^O \omega_{Oz}^O]$.&#xA;How can I obtain this angular velocity with respect to the global frame (that is $\omega_O^S$)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you!&lt;/p&gt;&#xA;" OwnerUserId="10782" LastActivityDate="2015-10-14T13:59:24.497" Title="Angular velocities and rotation matrices" Tags="&lt;mobile-robot&gt;&lt;imu&gt;&lt;gyroscope&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8248" PostTypeId="2" ParentId="4996" CreationDate="2015-10-14T12:19:17.337" Score="0" Body="&lt;p&gt;If you use a Linux based microprocessor you run the risk of tasks being switched at inopportune moments that's why they used an Arduino in the example, you could also try a ESP3266.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think you would be making a mistake to build a Nano for your first project.  Larger parts are more readily available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To build any project you need to work out the components and get them working, otherwise you are going to overwhelm yourself:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Learn how to program and use Arduino\ESP8266.&lt;/li&gt;&#xA;&lt;li&gt;Learn how to control a motor&lt;/li&gt;&#xA;&lt;li&gt;Learn how to read all the sensors you need&lt;/li&gt;&#xA;&lt;li&gt;Learn how to communicate from the controller to the quadcopter.&lt;/li&gt;&#xA;&lt;li&gt;Learn how to work out how much lift you need.&lt;/li&gt;&#xA;&lt;li&gt;Buy the different motors and batteries you knew you should have brought in the first place.&lt;/li&gt;&#xA;&lt;li&gt;Put it all together.&lt;/li&gt;&#xA;&lt;li&gt;Pray it doesn't crash to badly on its maiden flight.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Hope that helps :)&lt;/p&gt;&#xA;" OwnerUserId="10717" LastActivityDate="2015-10-14T12:19:17.337" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8249" PostTypeId="2" ParentId="8191" CreationDate="2015-10-14T12:20:06.760" Score="0" Body="&lt;p&gt;There is no angle that &lt;em&gt;should&lt;/em&gt; be removed. At a gimbal lock, you are able to express an orientation in an infinite amount of ways if you use a three-angle representation. At a gimbal lock, axes of two angular rotations are aligned. As such, their rotations are no unique solution to a given orientation. It depends on the representation which axes are considered here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'll try to find time later to add a can-in-series example to further clarify this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suggest you never ever look back at three-angle representations, such as pitch-yaw-roll, Euler angles or Tait-Bryan angles. The theory is flawed as it does not make any sense mathematically. It's like trying to flatten a piece of paper over a globe.&lt;/p&gt;&#xA;" OwnerUserId="10547" LastActivityDate="2015-10-14T12:20:06.760" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8250" PostTypeId="1" AcceptedAnswerId="8251" CreationDate="2015-10-14T13:16:26.083" Score="5" ViewCount="542" Body="&lt;p&gt;Let us assume we have a gyro that is perfectly aligned to a global frame ($X,Y,Z$). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;From what I know the gyro data give me the angular rate with respect to the gyro axis ($x,y,z$). So let's say I got $\omega_x,\omega_y,\omega_z$. Since I know that the 2 frames are perfectly aligned I perform the following operations:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;$\theta_X = dt * \omega_x$&lt;/li&gt;&#xA;&lt;li&gt;$\theta_Y = dt * \omega_y$&lt;/li&gt;&#xA;&lt;li&gt;$\theta_Z = dt * \omega_z$ &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;where $\theta_X$ is the rotation angle around $X$ and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is: what is this update like in the following steps? Because this time the measurement that I get are no more directly related to the global frame (rotated with respect to the gyro frame).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you!&lt;/p&gt;&#xA;" OwnerUserId="10782" LastEditorUserId="9720" LastEditDate="2015-10-14T13:24:24.480" LastActivityDate="2015-10-14T13:29:02.963" Title="Gyro measurement to absolute angles" Tags="&lt;imu&gt;&lt;gyroscope&gt;&lt;frame&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8251" PostTypeId="2" ParentId="8250" CreationDate="2015-10-14T13:29:02.963" Score="1" Body="&lt;p&gt;Your first step works because it is implied that your frames are &quot;aligned&quot;, meaning that:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\theta_{X_0} = 0 \\&#xA;\theta_{Y_0} = 0 \\&#xA;\theta_{Z_0} = 0 \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general (as with any integration!), you have some starting angles(initial condition), $\theta_{(X,Y,Z)_0}$, and you proceed to update from there, such that:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\theta_{X_N} = \theta_{X_{N-1}} + \omega_{X_N} dT \\&#xA;\theta_{Y_N} = \theta_{Y_{N-1}} + \omega_{Y_N} dT \\&#xA;\theta_{Z_N} = \theta_{Z_{N-1}} + \omega_{Z_N} dT \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that when your initial conditions are as you use in your example, the $\theta_{N-1}$ terms vanish leaving you with the equations you originally stated. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-10-14T13:29:02.963" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="8252" PostTypeId="2" ParentId="8247" CreationDate="2015-10-14T13:59:24.497" Score="4" Body="&lt;p&gt;If your object $O$ has a different orientation from your global frame $S$, and you know what that difference in orientation is, you can create a 4x4 transform matrix between the two:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;T = \left[ \begin{array}{cc}&#xA; R &amp;amp; s \\&#xA;0 &amp;amp; 1 \end{array} \right]&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $R$ is the 3x3 rotation matrix, $s$ is the 3x1 translation vector, $0$ is a 1x3 row of zeros, and $1$ is just 1. You can transform your (points, angular velocities, etc.) from one frame to another with:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\left[ \begin{array}{c}&#xA;x' \\&#xA;y' \\&#xA;z' \\&#xA;1 \end{array}&#xA;\right] = \left[ \begin{array}{cc}&#xA;R &amp;amp; s \\&#xA;0 &amp;amp; 1 \end{array} \right] \left[ \begin{array}{c}&#xA;x \\&#xA;y \\&#xA;z \\&#xA;1 \end{array} \right]&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you don't care about translation you can just set &#xA;$s = \left[ \begin{array}&#xA;00 \\ &#xA;0 \\&#xA;0 \\ \end{array} \right]$&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-10-14T13:59:24.497" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8253" PostTypeId="2" ParentId="8212" CreationDate="2015-10-14T14:55:53.650" Score="1" Body="&lt;p&gt;I haven't used ROS before, but you could try to determine the pressure units with an experiment!&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Put your sensor in water and take a pressure measurement. &lt;/li&gt;&#xA;&lt;li&gt;Lower the sensor 10.3 meters, or about 34 feet, and take another pressure measurement. &lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Subtract (1) from (2), and look for the correct &quot;ballpark&quot;:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;~1 = bar&lt;/li&gt;&#xA;&lt;li&gt;~14.7 = psi&lt;/li&gt;&#xA;&lt;li&gt;~101 = kPa&lt;/li&gt;&#xA;&lt;li&gt;~1,000 = mbar&lt;/li&gt;&#xA;&lt;li&gt;~101,000 = Pa&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;This test checks the change in pressure when changing depth to a pressure difference of &lt;a href=&quot;https://en.wikipedia.org/wiki/Atmospheric_pressure&quot; rel=&quot;nofollow&quot;&gt;1 atmosphere&lt;/a&gt;. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-10-14T14:55:53.650" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8255" PostTypeId="1" CreationDate="2015-10-14T23:38:45.607" Score="3" ViewCount="482" Body="&lt;p&gt;I'm looking for a &quot;good&quot; algorithm/model for wheeled odometry estimation. We have encoders on the two back wheels of the tricycle robot, and IMU on the controller board. Currently we use MEMS gyro for angular velocity estimation and encoders for linear velocity, then we integrate them to get the pose. But it's hard to calibrate gyro properly and it drifts (due to temperature or just imperfect initial calibration). How can we improve the pose estimation? &lt;strong&gt;Should we consider model that incorporates both encoders and gyro for heading estimation? Model slippage, sensor noise? Is there some nice standard model? Or should we just use more/better gyro?&lt;/strong&gt; Not considering the visual odometry.&lt;/p&gt;&#xA;" OwnerUserId="9572" LastActivityDate="2015-10-15T06:20:19.017" Title="Accurate Wheeled Robot Odometry" Tags="&lt;kalman-filter&gt;&lt;wheeled-robot&gt;&lt;odometry&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8256" PostTypeId="2" ParentId="2315" CreationDate="2015-10-14T23:55:18.103" Score="3" Body="&lt;p&gt;There is an error in your posted equation for the Jacobian $F_J$, so that could be the source of the problem. It should look like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$F_J = \begin{bmatrix}&#xA;1 &amp;amp; 0 &amp;amp; -C \sin \theta \\&#xA;C \frac{\sin \theta \sin \lambda}{\cos^2 \lambda} &amp;amp; 1 &amp;amp; C \frac{\cos \theta}{\cos \lambda} \\&#xA;0 &amp;amp; 0 &amp;amp; 1 \\&#xA;\end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With that new Jacobian I get results that look like:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/N895f.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/N895f.png&quot; alt=&quot;GPS EKF results&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10836" LastActivityDate="2015-10-14T23:55:18.103" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8257" PostTypeId="2" ParentId="8245" CreationDate="2015-10-15T00:01:06.340" Score="0" Body="&lt;p&gt;Use a method to solve the absolute orientation problem so that you have a result for the IMU data that does compensate for drift. Separately, use a dead reckoning method (i.e., integration) to compute the result without compensating for drift. Then you can subtract the first result from the second result and the difference should be the drift you are looking for.&lt;/p&gt;&#xA;" OwnerUserId="10836" LastActivityDate="2015-10-15T00:01:06.340" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8258" PostTypeId="2" ParentId="8222" CreationDate="2015-10-15T00:18:46.910" Score="1" Body="&lt;p&gt;Assuming that you mean to say your frame of reference is rotating with those roll-pitch-yaw rates and you are tracking a stationary object with position defined by $R$, $\theta$, and $\phi$ in the rotating frame, then you need to do this:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Compute the new roll, pitch, and yaw angles given the previous values and the measured rates.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Compute the rotation matrix, $A$, for the new reference frame.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Compute the previous position vector, $p$, for the object, where $p = (R \cos \theta \cos \psi, R \sin \theta \cos \psi, R \sin \psi)$&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Compute the new predicted position vector by rotating the previous one into the new frame (i.e., $p_{new} = A^{-1} p$)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Compute the new predicted $R$, $\theta$, and $\psi$ from the elements of the new predicted position vector ($R_{new} = \sqrt{p_{new,1}^2 + p_{new,2}^2 + p_{new,3}^2}$, etc.)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Note that I am not paying attention to your axes and sign conventions, so you will have to take that into account for your own solution.&lt;/p&gt;&#xA;" OwnerUserId="10836" LastActivityDate="2015-10-15T00:18:46.910" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8259" PostTypeId="2" ParentId="8255" CreationDate="2015-10-15T06:20:19.017" Score="2" Body="&lt;p&gt;First, you can try adding encoders - you don't need to buy anything to do this. Only remember to perform &lt;a href=&quot;http://www-personal.umich.edu/~johannb/Papers/umbmark.pdf&quot; rel=&quot;nofollow&quot;&gt;UMBmark&lt;/a&gt; procedure first. It will allow you to get much more reliable odometry from encoders alone. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If adding encoders is not enough, try to add magnetometer. It will get you absolute heading relative to magnetic north. Unfortunately, these devices are very sensitive to interference from running motors, so try to keep them away.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a last step I would go for a better gyro.&lt;/p&gt;&#xA;" OwnerUserId="7360" LastActivityDate="2015-10-15T06:20:19.017" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8260" PostTypeId="2" ParentId="8244" CreationDate="2015-10-15T06:54:24.177" Score="0" Body="&lt;p&gt;You can also try Snark:&#xA;&lt;a href=&quot;https://github.com/acfr/snark&quot; rel=&quot;nofollow&quot;&gt;https://github.com/acfr/snark&lt;/a&gt;&#xA;which requires&#xA;&lt;a href=&quot;https://github.com/acfr/comma&quot; rel=&quot;nofollow&quot;&gt;https://github.com/acfr/comma&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The name of the application is called hokuyo-to-csv. See --help -v for details.&lt;/p&gt;&#xA;" OwnerUserId="8859" LastActivityDate="2015-10-15T06:54:24.177" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8261" PostTypeId="1" AcceptedAnswerId="8263" CreationDate="2015-10-15T07:33:34.720" Score="5" ViewCount="2311" Body="&lt;p&gt;&lt;em&gt;To avoid wasting your time on this question, you might only want to react on this if you have knowledge of industrial robotic arms specific.&#xA;Common troubleshooting is unlikely to fix this problem or could take too much time.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We've started a project with the Mitsubishi Melfa RV-2AJ robotic arm.&#xA;Everything went fine until the moment we replaced the batteries.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The controller displays: &quot;FAiL&quot; and does not respond to any buttons or commands sent through serial connection.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We did replace the batteries of both the robot and the controller. As it took some time to get the batteries delivered, we've left the robot (and controller) withouth power for the weekend. (Which might have caused this problem)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there anyone with knowledge of Mitsubishi Robotic arms around here?&#xA;I'm kinda hoping it would be a common problem/mistake and anyone with experience on this subject would know about it?&lt;/p&gt;&#xA;" OwnerUserId="9753" LastEditorUserId="9753" LastEditDate="2016-03-31T14:53:03.140" LastActivityDate="2018-11-21T17:30:20.670" Title="Robotic arm [&quot;FAiL&quot;] error display. - Festo / Mitsubishi Melfa RV-2AJ (Controller CR1-571)" Tags="&lt;robotic-arm&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8262" PostTypeId="1" AcceptedAnswerId="8265" CreationDate="2015-10-15T08:32:53.013" Score="3" ViewCount="1722" Body="&lt;p&gt;I am working on a project where I want to run some computer vision algorithms (e.g. face recognition) on the live video stream coming from a flying drone. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are many commercial drones out there that offer video streams, like&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.flyzano.com/mens/&quot; rel=&quot;nofollow&quot;&gt;http://www.flyzano.com/mens/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.lily.camera/&quot; rel=&quot;nofollow&quot;&gt;https://www.lily.camera/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;etc..&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;But none of them seem to give access to the video feed for real-time processing. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another idea is to have the drone carry a smartphone, and do the processing on the phone through the phone's camera. Or just use a digital camera and an arduino that are attached to the drone. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although these ideas are feasible, I would rather access the video-feed of the drone itself. So my question is that are there any drones out there that offer this feature? or can be hacked somehow to achieve this? &lt;/p&gt;&#xA;" OwnerUserId="10843" LastActivityDate="2020-03-16T10:32:12.590" Title="Real-time video processing on video feed from a drone's camera" Tags="&lt;computer-vision&gt;&lt;cameras&gt;" AnswerCount="3" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8263" PostTypeId="2" ParentId="8261" CreationDate="2015-10-15T08:54:52.527" Score="4" Body="&lt;p&gt;After some googling I found that there is an explanation &amp;amp; fix guide, only in German, for this.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;It'll be of use for others having the same problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'll try my very best to translate it a bit, please note that German, not English, is my main language:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;Concerning &quot;FAIL&quot; in the display of the robotcontroller after voltage drop from back-up batteries (general). - KS00527&lt;/strong&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;When the battery voltage is unsufficient to keep the buffer (which&#xA;  holds the settings of the powered-off robot), the display will show&#xA;  the message: &quot;FAIL&quot;.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;To reset this message/state, a RAM data reset is needed. After this&#xA;  reset, all programs and position data in the robotcontroller will be&#xA;  erased and the parameters will be reverted.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;strong&gt;The procedure (RAM data reset) is as following:&lt;/strong&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;Press STOP and RESET at the same time, while the controller is being activated.&lt;/li&gt;&#xA;  &lt;li&gt;The robot controller display would show &quot;|----|&quot;.&lt;/li&gt;&#xA;  &lt;li&gt;Releave the STOP and RESET buttons.&lt;/li&gt;&#xA;  &lt;li&gt;Press RESET untill the display will show &quot;EnG&quot;.&lt;/li&gt;&#xA;  &lt;li&gt;Press START once.&lt;/li&gt;&#xA;  &lt;li&gt;Press RESET until the display shows your Robot type&lt;/li&gt;&#xA;  &lt;li&gt;Press Start once.&lt;/li&gt;&#xA;  &lt;li&gt;The robot controller display would show &quot;rAMc9&quot;.&lt;/li&gt;&#xA;  &lt;li&gt;After ~15-25 sec. (depending on the contents of the RAM?) you'll see a countdown from &quot;100-0&quot;.&lt;/li&gt;&#xA;  &lt;li&gt;The message &quot;ok&quot; will appear on the dispaly.&lt;/li&gt;&#xA;  &lt;li&gt;Finally the robot will automatically reboot. (Didn't happen for us though)&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I believe the procedure might differ a little per controller, but this would get you going.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The original text:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Anzeige FAIL im Display der Robotersteuerung nach Spannungsverlust der&#xA;  Pufferbatterien (General) - KS00527 Wenn die Batteriespannung die&#xA;  Einstellungen der ausgeschalteten Robotersteuerung nicht mehr puffern&#xA;  kann, zeigt das Display nach dem Einschalten die Anzeige FAIL an. Um&#xA;  diese zu beseitigen hilft nur ein RAM Daten Reset. Nach diesem Reset&#xA;  sind alle Programme, Positionsdaten in der Robotersteuerung gelöscht&#xA;  und die Parameter auf Werkseinstellung zurückgesetzt. Die Prozedur ist&#xA;  wie folgt : - Drücken Sie die STOP und RESET Taste gleichzeitig,&#xA;  während der Controller eingeschaltet wird. - Im Display wird ”I- - -&#xA;  -I” angezeigt. - STOP und RESET Taste loslassen - Die Taste RESET so oft drücken bis ”EnG” im Display angezeigt wird. - Drücken Sie einmal&#xA;  die START Taste. - Drücken Sie die Taste RESET oder STOP so oft bis im&#xA;  Display angezeigt wird. - Drücken Sie einmal die START Taste. - Im&#xA;  Display wird nun ”rAMc9” angezeigt. - Nach ca. 15-25 sec (abhängig vom&#xA;  Inhalt des RAM Speichers) sieht man im Display einen Countdown von&#xA;  ”100-0”. - Es erscheint kurz die Meldung ”ok” im Display. -&#xA;  Abschließend bootet der Controller selbsttätig neu.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Source: &lt;a href=&quot;https://eu3a.mitsubishielectric.com/fa/en/service/knowledgebase?m_culture=de&amp;amp;ks=527&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://eu3a.mitsubishielectric.com/fa/en/service/knowledgebase?m_culture=de&amp;amp;ks=527&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;KS00527&lt;/em&gt; of the GERMAN knowledgebase on Mitsubishi (Somehow German people may know things the English aren't allowed to? :D (You can't find it in English))&lt;/p&gt;&#xA;" OwnerUserId="9753" LastEditorUserId="21703" LastEditDate="2018-11-21T17:30:20.670" LastActivityDate="2018-11-21T17:30:20.670" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="8264" PostTypeId="2" ParentId="8245" CreationDate="2015-10-15T10:39:00.237" Score="0" Body="&lt;p&gt;You gave two methods of comparison - &quot;either integrating the IMU or differentiating the optical tracking data&quot;. I'm talking about one basic transform to convert from the vision frame to the global frame and vice-versa.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One transform, that you calculate in advance, that relates one &lt;em&gt;origin&lt;/em&gt; to another &lt;em&gt;origin&lt;/em&gt;. You seem to be talking about methods of best-fit to get good correspondence, but I'm saying to use one fixed, somewhat generic transform. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;All you need to do is shift from one frame to another. This will preserve drift.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;:EDIT: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I may have misunderstood the question, or your particular scenario. I thought that you could just go out and measure the location and orientation of the camera, measure the location and orientation of the robot, and make your own transform. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the event that you can't or don't want to (too time consuming, lots of trials, etc.), then you could &quot;cheat&quot; by exploiting the fact that drift is a slow event, where a very small error is added over a very large number of samples. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you might be able to try is to use the &lt;a href=&quot;http://www.mathworks.com/matlabcentral/fileexchange/26186-absolute-orientation-horn-s-method&quot; rel=&quot;nofollow&quot;&gt;method you already found&lt;/a&gt; and apply that to only the first few samples of your data set. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your robot is in motion from the start of the set, then the first sample should be enough to fix a position and the second sample should fix a heading/rotation. Use the resulting transform you get from only these two samples and apply that transform to all the others. Noise may be an issue, but that seems to be the point of what you're trying to do. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you think it's too noisy or there's too much error, then you could try the algorithm with the first 3 samples, or first 4, or 5, etc. As you've noted, the more samples you include the more this will account for drift, but if you can't physically measure the transform you don't really have any other option. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2015-10-15T14:36:30.997" LastActivityDate="2015-10-15T14:36:30.997" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8265" PostTypeId="2" ParentId="8262" CreationDate="2015-10-15T15:16:56.957" Score="4" Body="&lt;p&gt;This &lt;a href=&quot;http://ardrone2.parrot.com/&quot; rel=&quot;nofollow&quot;&gt; AR.Drone&lt;/a&gt; provides SDK, therefore, you can access the images on real-time. It is fully compatible with Linux. They have examples also for smartphones. I believe android and iPhone. It has two cameras. I've bought it and its price is reasonable. At that time, the price was roughly 272 CAD. Of course, the price is now more expensive than before but I believe it is affordable. You need to know c programming and Makefiles. &lt;/p&gt;&#xA;" OwnerUserId="2155" LastActivityDate="2015-10-15T15:16:56.957" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8267" PostTypeId="2" ParentId="8165" CreationDate="2015-10-16T08:12:52.183" Score="3" Body="&lt;p&gt;Statistical confidence is most often defined in terms of a score that is the &lt;em&gt;number of standard deviations away from the mean&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now let's say you have a set of states (a state vector) used to define an object recognized using image processing in OpenCV (for example, RGB data, HSV data, filter responses, etc.). Given a series of training images for vehicles, you can compute the mean and covariance of their state vectors. If you then consider some new object being tested, you can compute what is known as the &lt;a href=&quot;https://en.wikipedia.org/wiki/Mahalanobis_distance&quot; rel=&quot;nofollow&quot;&gt;Mahalanobis distance&lt;/a&gt; between the new object's state vector and the vehicle state vector. This distance will essentially be the statistical confidence that the new object is a vehicle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, OpenCV has functions available to compute things like the &lt;a href=&quot;http://docs.opencv.org/modules/core/doc/operations_on_arrays.html#calccovarmatrix&quot; rel=&quot;nofollow&quot;&gt;covariance matrix&lt;/a&gt; and the &lt;a href=&quot;http://docs.opencv.org/modules/core/doc/operations_on_arrays.html#mahalanobis&quot; rel=&quot;nofollow&quot;&gt;Mahalanobis distance&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="10836" LastActivityDate="2015-10-16T08:12:52.183" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8268" PostTypeId="2" ParentId="8228" CreationDate="2015-10-16T12:15:52.287" Score="3" Body="&lt;p&gt;A project like this was already thought and working. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was proposed from Vijay Kumar, one of the gurus of quarotor helicopers (that is the name he thinks it is the most appropriate for these objects).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope you will find the following link interesting:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://spectrum.ieee.org/automaton/robotics/aerial-robots/a-smartphone-is-the-brain-for-this-autonomous-quadcopter&quot; rel=&quot;nofollow&quot;&gt;Vijay Kumar: a smartphone as brain for a quadrotor&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=mtTiPnNUKj8&quot; rel=&quot;nofollow&quot;&gt;This is the video&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10852" LastActivityDate="2015-10-16T12:15:52.287" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8270" PostTypeId="2" ParentId="2826" CreationDate="2015-10-16T18:56:07.093" Score="3" Body="&lt;p&gt;Let's assume a constant Kalman filter $x_n = Gx_{n-1}+\omega$ with $\omega \sim \mathrm{N}(0, W)$ and $y_n = Fx_n+ \nu$ with $ \nu \sim \mathrm{N}(0,V)$, and initial state $x_0 \sim \mathrm{N}(m_0, C_0)$, where $C_0$ is the initial state variance. Then, the sequence of state covariance matrices $C_0, C_1, \dots, C_n$ converges to a constant covariance matrix $C &amp;gt; 0$ when $n \to \infty$ if the system is observable, and $C$ is a function of the system and measurement covariance matrices $W$ and $V$, respectively (i.e., depends only on the signal-to-noise ratio). The Kalman gain also converges to a constant matrix. This convergence process occurs in just a few steps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In summary, the state covariance matrix $C_n$ does not reduces indefinitely with time, it reduces until achieve a limiting constant covariance matrix $C&amp;gt;0$. In fact, it is not even sure that $C_n$ will decrease! If $C_0 &amp;lt; C$, the sequence $C_0, C_1, C_2 \dots$ increases until $C$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See the second chapter of the following reference for a proof: &lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/0387947256&quot; rel=&quot;nofollow&quot;&gt;Bayesian forecasting and dynamic models, by West and Harrison&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10855" LastEditorUserId="10855" LastEditDate="2015-10-17T14:12:06.190" LastActivityDate="2015-10-17T14:12:06.190" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8271" PostTypeId="1" AcceptedAnswerId="8275" CreationDate="2015-10-16T20:23:18.090" Score="2" ViewCount="2297" Body="&lt;p&gt;I am planning to build a homemade ROV, and I wanted to know a couple of things about the motors.  First is: Will it be Ok, if I use a brushed DC motor,  instead of a brushless motor, and is there any major disadvantages ? Second : What RPM DC motor should I aim for ? High RPM or low RPM ? Will 600rpm be enough ? The specific motor that I am talking about is    &lt;a href=&quot;http://www.ebay.ca/itm/37mm-12V-DC-600RPM-Replacement-Torque-Gear-Box-Motor-New-/320984491847?hash=item4abc2aa747:m:mEBEQXXpqmNg4-vxmFaZP5w&quot; rel=&quot;nofollow&quot;&gt;http://www.ebay.ca/itm/37mm-12V-DC-600RPM-Replacement-Torque-Gear-Box-Motor-New-/320984491847?hash=item4abc2aa747:m:mEBEQXXpqmNg4-vxmFaZP5w&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Will this be a good motor for the propellers of the ROV.  I am planning to have 4 motors / propellers. Two for upward and downward thrusting,  and 2 for forward and side thrusting. The propellers that I plan to use, are basic plastic 3 blade propellers,  with diameter,  between 40mm and 50mm. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My main question is, what RPM and torque should I aim for when choosing the DC motor ?&lt;/p&gt;&#xA;" OwnerUserId="10857" LastActivityDate="2018-01-09T19:19:11.857" Title="DC Motors for a ROV?" Tags="&lt;motor&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8272" PostTypeId="1" CreationDate="2015-10-16T21:39:18.920" Score="4" ViewCount="1029" Body="&lt;p&gt;I do have a robotic application, where a 7Dof robot arm is mounted on a omnidirectional mobile platform. My overall goal is to get MoveIt! to calculate a sequence of joint movements, such that the robot EEF reaches a desired goal in Cartesian space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to combine a robot platform with a world, the MoveIt! setup assistant lets you assign virtual joints between the &quot;footprint&quot; of the platform and the world it is placed in.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do have two strategies. Either &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;select a planar joint as a virtual joint. (What are the degrees of freedom or respectively the joint information that I can gather from this joint)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;or &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;select a fixed joint and add a (prismatic-x -&gt; prismatic-y -&gt; revolute-z) chain to the robot model.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Are there any significant differences (advantages/ disadvantages) to either of the approaches?&lt;/p&gt;&#xA;" OwnerUserId="10374" LastEditorUserId="110" LastEditDate="2015-10-17T12:12:32.060" LastActivityDate="2019-07-04T09:59:25.113" Title="ROS MoveIt!, virtual joints, planar joints, prismatic joints" Tags="&lt;mobile-robot&gt;&lt;robotic-arm&gt;&lt;ros&gt;&lt;motion-planning&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8273" PostTypeId="1" CreationDate="2015-10-17T02:15:38.930" Score="1" ViewCount="80" Body="&lt;p&gt;I'm using an accelerometer and gyroscope to detect the angle and tilt rate on my two-wheeled cart-pole robot.  Is there an optimal height to place the sensors?  Should I place them closer to the bottom (near the wheels), the middle (near the center of mass), or the top?  Justification for the optimal choice would be appreciated.&lt;/p&gt;&#xA;" OwnerUserId="2295" LastEditorUserId="9176" LastEditDate="2015-10-19T15:35:32.357" LastActivityDate="2015-10-19T15:35:32.357" Title="Where should I put the angle sensor on my cart-pole robot?" Tags="&lt;sensors&gt;&lt;balance&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8274" PostTypeId="2" ParentId="8273" CreationDate="2015-10-17T05:26:00.113" Score="3" Body="&lt;p&gt;The gyroscope placement shouldn't make any difference since the rotation rate will be the same everywhere (assuming your robot is rigid enough).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The accelerometer will pick up the rigid body acceleration of the robot as well as virtual accelerations from centripetal and coriolis effects, plus gravity of course. If you are intending on using the accelerometer to track the gravity vector then you will want to minimize those virtual accelerations by placing the accelerometer closer to the centre of mass. You could potentially take advantage of the centripetal and coriolis effects to help determine the rotation rate, but I would suggest trying the simpler approach first.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that if you place the sensors on a pole that is flexible then you will pick up elastic deformation as well, with the effect getting worse as you place them further up high. (A long-winded way of saying watch out for vibration!)&lt;/p&gt;&#xA;" OwnerUserId="10836" LastActivityDate="2015-10-17T05:26:00.113" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8275" PostTypeId="2" ParentId="8271" CreationDate="2015-10-17T05:47:36.213" Score="2" Body="&lt;p&gt;The main differences between brushed and brushless DC motors are cost, efficiency, and complexity. Brushless motors don't have brushes (surprise!) so they don't wear down as fast as brushed motors and are more efficient. However, brushless motors are more complex both in terms of construction, but also in terms of operation. That makes them more expensive and means more sophisticated electronics and software if you want precise position and torque control. (See &lt;a href=&quot;http://electronicdesign.com/electromechanical/what-s-difference-between-brush-dc-and-brushless-dc-motors&quot; rel=&quot;nofollow&quot;&gt;this page&lt;/a&gt; for more information).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For an ROV thruster you can probably get away with brushed motors but if you have the funding then you might want brushless instead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for the motor specifications, you are really talking about the initial sizing for the ROV itself. From an engineering perspective you will want to figure out what torque, power, and RPM requirements you are expecting based on the propeller design and expected thrust and in-flow, then choose a motor that meets those requirements (maximizing efficiency at the expected operating condition).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you can get access to &lt;a href=&quot;http://ieeexplore.ieee.org/xpl/articleDetails.jsp?reload=true&amp;amp;arnumber=6632937&quot; rel=&quot;nofollow&quot;&gt;this article&lt;/a&gt;, I have included most of the equations you would need in section III-C (page 7).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suggest taking a look at &lt;a href=&quot;http://www.homebuiltrovs.com/rovforum/&quot; rel=&quot;nofollow&quot;&gt;this forum&lt;/a&gt;, you can probably find good suggestions for particular motors, propellers, or complete off-the-shelf thrusters.&lt;/p&gt;&#xA;" OwnerUserId="10836" LastEditorUserId="10836" LastEditDate="2015-10-17T05:53:22.157" LastActivityDate="2015-10-17T05:53:22.157" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="8276" PostTypeId="1" CreationDate="2015-10-17T09:58:30.887" Score="3" ViewCount="92" Body="&lt;p&gt;I'm working on modeling and simulation of robotic arm, after I obtained the mathematical model of the robot, I used that to implement some control techniques, to control the motion of the robot. The dimensions and masses of each links are taken from available kit, basically, it's &lt;a href=&quot;http://www.imagesco.com/kits/robotic-arm.html&quot; rel=&quot;nofollow&quot;&gt;RA02&lt;/a&gt; robot with servo at each joint. After the modeling, different parameters, can be plotted: like the joint angles\speeds\torques ... etc. The point now is that, the value obtained for the joint toque is much more higher that the torque limit of the servo, does it mean my design\modeling is not realizable? Is it necessarily to get close (torque)  value for servo's torque? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any suggestion?&lt;/p&gt;&#xA;" OwnerUserId="9087" LastActivityDate="2015-10-17T21:19:58.970" Title="Should the therotical parameters match the physical setup constraints when modeling a robot?" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;servomotor&gt;&lt;dynamics&gt;&lt;torque&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8277" PostTypeId="1" AcceptedAnswerId="8282" CreationDate="2015-10-17T10:19:06.187" Score="2" ViewCount="1023" Body="&lt;p&gt;The rest of my student team and I are in the process of redesigning an exoskeleton and building it based on an existing one. From the papers that we have been reading there are some references to low, high and zero impedance torque bandwith.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is that? Does it have to do with the control system?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is measured in Hz. Here is a table from one of the papers:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/yqK0d.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/yqK0d.png&quot; alt=&quot;Torque bandwith&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10863" LastEditorUserId="9176" LastEditDate="2015-10-19T16:57:11.707" LastActivityDate="2015-10-19T16:57:11.707" Title="What is torque bandwidth in actuated joints and how does it affect the control systems?" Tags="&lt;control&gt;&lt;design&gt;&lt;mechanism&gt;&lt;joint&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8278" PostTypeId="2" ParentId="8276" CreationDate="2015-10-17T10:52:17.290" Score="3" Body="&lt;p&gt;If your computed torques are out of the range for your robot, then you are no longer modelling your robot but a different one. You can ignore the torque limits as good as the joint angle limits of your robot (i.e. not at all). &#xA;If the required torque is to high, your robot will either be much slower (if you are lucky) or won't be able to reach its goal positions (e.g. if it's just not able to overcome gravity). &lt;/p&gt;&#xA;" OwnerUserId="23196" LastEditorUserId="23196" LastEditDate="2015-10-17T17:00:19.163" LastActivityDate="2015-10-17T17:00:19.163" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8279" PostTypeId="1" CreationDate="2015-10-17T14:06:22.347" Score="1" ViewCount="299" Body="&lt;p&gt;I found not so much literature to the topic, this is why I ask here.&#xA;Does someone know some ways to estimate the drift rate of the gyrometer.&#xA;I was thinking about basically two approaches. &#xA;One would be to use a low pass filter with a low cut-off frequency to estimate the drift of the angular velocity.&#xA;Second would be to use the accelerometer, calculate the attitude dcm and by this also the angular velocity. The difference between the acc angular velocity and gyrometer would be maybe also a drift rate.&#xA;Nevertheless, I am not so sure whether this is a good way to get reliable drift rates :D&lt;/p&gt;&#xA;" OwnerUserId="4080" LastActivityDate="2015-10-17T14:42:14.893" Title="Ways to estimate the drift rate of the gyrometer" Tags="&lt;sensors&gt;&lt;gyroscope&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8280" PostTypeId="2" ParentId="8279" CreationDate="2015-10-17T14:42:14.893" Score="1" Body="&lt;p&gt;If your drift is expected to be a constant bias then you should be able to measure it while the gyroscope is static. Many systems employ a feature that measures the bias for a couple of seconds when the device is powered on so that it can be subtracted from future gyroscope measurements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, if the drift is more of a random walk that wobbles up and down, then you will need something a bit more sophisticated. Your suggestion of using the accelerometer is good but you will need a magnetometer as well if you want to determine the attitude -- the accelerometer won't pick up any rotation if the angular velocity is aligned with the gravity vector. But overall, a sensor fusion approach is almost always better since all of your sensors will have some inherent uncertainty.&lt;/p&gt;&#xA;" OwnerUserId="10836" LastActivityDate="2015-10-17T14:42:14.893" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8281" PostTypeId="2" ParentId="8276" CreationDate="2015-10-17T21:19:58.970" Score="1" Body="&lt;p&gt;I'm not sure which way you're trying to model this; forward or inverse kinematics, but the term you should look for is &quot;saturation&quot;. Saturation means basically that the system can't continue to respond despite a signal being present. For example, a 0-10V sensor being supplied with 11V is saturated because it will only show you 10V. Likewise, your actuators saturate at $\tau_{\mbox{max}}$ despite the fact that you are asking/signalling for more torque. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know how you're simulating this system (Matlab/Simulink or ROS, etc.), but Simulink has a saturation block you can use on your actuators. If you're using other software you can implement saturation yourself: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;torqueMax = &amp;lt;max torque&amp;gt;; &#xA;torque = &amp;lt;control loop output&amp;gt;;&#xA;if abs(torque) &amp;gt; torqueMax&#xA;  torque = sign(torque) * torqueMax;&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You can of course have two different saturation values, one for a maximum limit and one for minimum, you'd just use two &lt;code&gt;if&lt;/code&gt; statements to do the check.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Saturation adds nonlinear elements to your model, which may or may not be acceptable to you. If you don't want to deal with the nonlinearities this introduces, then you should lower your control gains such that your response slows down to the point that you never enter saturation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I won't go into any more detail than to just say that &quot;saturation is a thing&quot; with a brief overview as your question seemed to be more in the scope of asking how to handle control/simulation outputs that exceed physical capability - I gave a code snippet above for that. If you want to read more on the subject there are a ton of articles on &lt;a href=&quot;https://scholar.google.com/scholar?q=actuator+saturation+control+theory&quot; rel=&quot;nofollow&quot;&gt;Google Scholar&lt;/a&gt;. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-10-17T21:19:58.970" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8282" PostTypeId="2" ParentId="8277" CreationDate="2015-10-18T00:41:50.500" Score="5" Body="&lt;p&gt;The torque bandwidth is typically referring to the maximum frequency of motion at which the actuator can provide that torque. So your actuator can provide a peak torque of 100 Nm, as in it can hold up a weight of 100 N held at a torque arm of 1 m. If you want to swing that weight back and forth you could do it at up to 4 Hz, but no faster without damaging or overheating the actuator. However, if you reduce the weight to 2 Nm then you can swing it at 20 Hz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind that this is an oversimplification since if you were swinging a weight back and force the torque will not be constant the entire time. Still, it provides you with an idea of how fast the actuator can respond with different levels of applied torque (the torque is a resistance against the actuator, or rather an &quot;impedance&quot;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note the &quot;zero impedance&quot; bandwidth is the same thing except with no payload weight being held at the end of the actuator torque arm -- the weight of the arm itself &lt;em&gt;is&lt;/em&gt; the payload.&lt;/p&gt;&#xA;" OwnerUserId="10836" LastEditorUserId="10836" LastEditDate="2015-10-18T15:26:11.167" LastActivityDate="2015-10-18T15:26:11.167" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8283" PostTypeId="2" ParentId="7838" CreationDate="2015-10-18T05:32:55.273" Score="1" Body="&lt;p&gt;Although you have asked for facts and not opinions, that's a difficult thing to do. As of now, there are no current standards for much of anything in robotics. The field as a whole is so scattered with many avenues of research. In the end, it all comes down to what makes the most sense for the robot being designed. With that said, I do recall some information regarding this subject in this robotics handbook: &lt;a href=&quot;https://www.cs.cmu.edu/%7Emmv/planning/readings/handbook.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.cs.cmu.edu/~mmv/planning/readings/handbook.pdf&lt;/a&gt; but I'm unaware of any specific papers on this topic - most focus on some specific aspect of robotics or AI, and the controller architecture is just a means to that end.&lt;/p&gt;&#xA;&lt;h2&gt;Single Controller Architecture&lt;/h2&gt;&#xA;&lt;p&gt;For small applications or one-offs, this is a perfectly viable choice. If you know that a single MCU can handle all of the data input and actuator output, then there is nothing wrong with just using one MCU.&lt;/p&gt;&#xA;&lt;h3&gt;Pros&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Fewer Components&lt;/li&gt;&#xA;&lt;li&gt;Fewer (or none) board-board connections&lt;/li&gt;&#xA;&lt;li&gt;Lower Cost&lt;/li&gt;&#xA;&lt;li&gt;Less Power Use (potentially)&lt;/li&gt;&#xA;&lt;li&gt;Less Firmware to maintain/update&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3&gt;Cons&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Not easily expandable (limited I/O / space for code)&lt;/li&gt;&#xA;&lt;li&gt;All components are coupled - removing 1 thing might break other things&lt;/li&gt;&#xA;&lt;li&gt;Not modular - must redesign/reprogram similar systems in the future&lt;/li&gt;&#xA;&lt;li&gt;No redundancy - MCU failure is catastrophic&lt;/li&gt;&#xA;&lt;li&gt;No Fail-safe - Any blocking code stalls all systems&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2&gt;Multi-Controller Architecture&lt;/h2&gt;&#xA;&lt;p&gt;For larger, complex systems or those which will likely be expanded upon or used for research purposes, a multi-controller architecture is the better option. It should also be noted that robot controllers are not only MCUs, but are commonly controller using microprocessors (MPU) as well, as they are capable of processing more data at higher speeds.&lt;/p&gt;&#xA;&lt;h3&gt;Pros&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Modularity - simple systems can be reused (motor drivers, sensor interfaces)&lt;/li&gt;&#xA;&lt;li&gt;Easy to swap to different sensors using documented interfaces&lt;/li&gt;&#xA;&lt;li&gt;Decoupled components - Switching to a different sensor or motor does not affect other systems&lt;/li&gt;&#xA;&lt;li&gt;Multiple controllers could be less expensive than one powerful one&lt;/li&gt;&#xA;&lt;li&gt;Timing - different systems can run at different clock speeds&lt;/li&gt;&#xA;&lt;li&gt;Simple firmware - specific code is less cluttered&lt;/li&gt;&#xA;&lt;li&gt;Well known and easy to implement serial interfaces (SPI, I2C, USB, etc)&lt;/li&gt;&#xA;&lt;li&gt;Able to split control into layers of abstraction&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3&gt;Cons&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;More components to manage&lt;/li&gt;&#xA;&lt;li&gt;More power usage&lt;/li&gt;&#xA;&lt;li&gt;Complicated hardware infrastructure&lt;/li&gt;&#xA;&lt;li&gt;More cables to run&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2&gt;Wrapping Up&lt;/h2&gt;&#xA;&lt;p&gt;It's obvious that the pros of one architecture are the cons of the other, and vice versa. This is to be expected. For complex robotic systems, it is common (not necessarily standard, but typical) to break the problem down into smaller chunks - using small MCU circuits that do very specific things. These can then be grouped together, whatever makes sense to you.&lt;/p&gt;&#xA;&lt;p&gt;For example, there could be one central controller for all motor drivers or distance sensors. Similarly, all of the drivers for one section of a robot could be grouped together, such as a single arm in a humanoid robot. All of these mid-level-controllers are then commanded by a single high-level controller which decides when and why to do things, but doesn't really care how it gets done.&lt;/p&gt;&#xA;&lt;p&gt;On the other hand, for a simple robot using a vary unique structure that is unlikely to be reused, a single central controller is often used.&lt;/p&gt;&#xA;" OwnerUserId="1197" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2015-10-18T05:32:55.273" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8284" PostTypeId="2" ParentId="7782" CreationDate="2015-10-19T08:34:11.260" Score="1" Body="&lt;p&gt;SLAM can be done Using many different way, in this case,&#xA;Yes Buddy can map around him using its sensors : &#xA;RGB camera, IR sensor, Ultra sound Sensor, Encoder.&#xA;The result depend of the algorithme you are using.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We are also working on a 3D camera to allow buddy to have a better input of the world.&lt;/p&gt;&#xA;" OwnerUserId="10872" LastEditorUserId="37" LastEditDate="2015-10-19T14:05:41.703" LastActivityDate="2015-10-19T14:05:41.703" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8286" PostTypeId="1" CreationDate="2015-10-19T10:22:44.913" Score="2" ViewCount="3997" Body="&lt;p&gt;Is it possible to set up communication between an Arduino Uno and an Android phone using a wire that directly connects the Android phone and the Arduino?&lt;/p&gt;&#xA;" OwnerUserId="10807" LastEditorUserId="9176" LastEditDate="2015-10-19T16:57:19.253" LastActivityDate="2015-10-19T16:57:19.253" Title="How to connect an Arduino Uno to an Android phone via USB cable?" Tags="&lt;arduino&gt;&lt;usb&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="8287" PostTypeId="2" ParentId="8286" CreationDate="2015-10-19T15:13:37.040" Score="2" Body="&lt;p&gt;Whilst your question would be better suited to the &lt;a href=&quot;https://arduino.stackexchange.com/questions&quot;&gt;Arduino StackExchange&lt;/a&gt; site, I shall attempt to answer it nevertheless. Below is the method that I have used in the past, however, there are, obviously, more than one way to skin a cat... For example the same question was asked a few years ago on EE.SE, &lt;a href=&quot;https://electronics.stackexchange.com/questions/94272/connect-android-device-to-arduino-uno-via-usb&quot;&gt;Connect Android device to Arduino Uno via USB&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The answer to your question may be found here, &lt;a href=&quot;http://android.serverbox.ch/?p=549&quot; rel=&quot;nofollow noreferrer&quot;&gt;Android USB host + Arduino: How to communicate without rooting our Android tablet or phone&lt;/a&gt;. However there are some pre-requisites for the Android device that you are intending to use:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;You will require an Android device that supports USB host mode as well&#xA;  as the USB host API&lt;/strong&gt;. Most Android 3.1+ tablets will suffice (some may&#xA;  require an USB OTG adapter). Also, the Galaxy Nexus has host mode&#xA;  enabled and matches the requirements (you will need an USB OTG adapter&#xA;  however).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I shall quote the information from the above page, in the case of link death.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This example consists of two parts:&lt;/p&gt;&#xA;  &#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;&lt;strong&gt;The Android application that makes use of the USB API&lt;/strong&gt;&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;  &#xA;  &lt;p&gt;A simple Android&#xA;  app that let’s you regulate the brightness of an LED on the Arduino&#xA;  using a slider. It also features a button to “enumerate” the USB&#xA;  device. &lt;/p&gt;&#xA;  &#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;&lt;strong&gt;Firmware for the Arduino that does some serial I/O with the&#xA;  Android app&lt;/strong&gt; &lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;  &#xA;  &lt;p&gt;Very basic firmware for the Arduino. An interrupt is&#xA;  generated when a new byte is received. The received data controls the&#xA;  brightness of the Arduino’s on-board LED. (implemented via&#xA;  usleep-style software pwm in the main loop).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The Arduino Code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;int main(void) {&#xA;    //initialization&#xA;    initIO();&#xA;    uart_init();&#xA;    sei();&#xA;&#xA;    uint8_t i = 0;&#xA;    volatile uint8_t pause;&#xA;&#xA;    for(;;){//this is the main loop&#xA;        pause = data;&#xA;        PORTB |= (1 &amp;lt;&amp;lt; LED);&#xA;        for(i = 0; i &amp;lt; pause; i++)&#xA;            _delay_us(10);&#xA;        PORTB &amp;amp;= ~(1 &amp;lt;&amp;lt; LED);&#xA;        for(i = 0; i &amp;lt; 255-pause; i++)&#xA;            _delay_us(10);&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The Arduino Interrupt routine:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ISR(USART_RX_vect) {//attention to the name and argument here, won't work otherwise&#xA;    data = UDR0;//UDR0 needs to be read&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The Android  source code is available here: &lt;a href=&quot;http://android.serverbox.ch/wp-content/UsbController.tar.gz&quot; rel=&quot;nofollow noreferrer&quot;&gt;UsbController.tar.gz&lt;/a&gt;*.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;You may need to change the PID value in UsbControllerActivity.java on line 38, if you have an Arduino Uno Rev3 or higher. You can check the VID/PID value with ‘lsusb’ after connecting the Arduino to your computer.&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Most of the code is pretty standard, however, it is worth paying attention to the following &lt;code&gt;UsbRunnable&lt;/code&gt; class:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;private class UsbRunnable implements Runnable {&#xA;    private final UsbDevice mDevice;&#xA;&#xA;    UsbRunnable(UsbDevice dev) {&#xA;        mDevice = dev;&#xA;    }&#xA;&#xA;    @Override&#xA;    public void run() {//here the main USB functionality is implemented&#xA;        UsbDeviceConnection conn = mUsbManager.openDevice(mDevice);&#xA;        if (!conn.claimInterface(mDevice.getInterface(1), true)) {&#xA;            return;&#xA;        }&#xA;        // Arduino USB serial converter setup&#xA;        conn.controlTransfer(0x21, 34, 0, 0, null, 0, 0);&#xA;        conn.controlTransfer(0x21, 32, 0, 0, new byte[] { (byte) 0x80,&#xA;                0x25, 0x00, 0x00, 0x00, 0x00, 0x08 }, 7, 0);&#xA;&#xA;        UsbEndpoint epIN = null;&#xA;        UsbEndpoint epOUT = null;&#xA;&#xA;        UsbInterface usbIf = mDevice.getInterface(1);&#xA;        for (int i = 0; i &amp;lt; usbIf.getEndpointCount(); i++) {&#xA;            if (usbIf.getEndpoint(i).getType() == UsbConstants.USB_ENDPOINT_XFER_BULK) {&#xA;                if (usbIf.getEndpoint(i).getDirection() == UsbConstants.USB_DIR_IN)&#xA;                    epIN = usbIf.getEndpoint(i);&#xA;                else&#xA;                    epOUT = usbIf.getEndpoint(i);&#xA;            }&#xA;        }&#xA;&#xA;        for (;;) {// this is the main loop for transferring&#xA;            synchronized (sSendLock) {//ok there should be a OUT queue, no guarantee that the byte is sent actually&#xA;                try {&#xA;                    sSendLock.wait();&#xA;                } catch (InterruptedException e) {&#xA;                    if (mStop) {&#xA;                        mConnectionHandler.onUsbStopped();&#xA;                        return;&#xA;                    }&#xA;                    e.printStackTrace();&#xA;                }&#xA;            }&#xA;            conn.bulkTransfer(epOUT, new byte[] { mData }, 1, 0);&#xA;&#xA;            if (mStop) {&#xA;                mConnectionHandler.onUsbStopped();&#xA;                return;&#xA;            }&#xA;        }&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;After the USB interface has been claimed the Arduino USB serial&#xA;  converter is initialized by issuing the following control transfers:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;conn.controlTransfer(0x21, 34, 0, 0, null, 0, 0);&#xA;conn.controlTransfer(0x21, 32, 0, 0, new byte[] { (byte) 0x80,&#xA;                0x25, 0x00, 0x00, 0x00, 0x00, 0x08 }, 7, 0);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;  &lt;p&gt;The first call sets the control line state, the second call sets the&#xA;  line encoding (9600, 8N1). For communication, an additional thread is&#xA;  used to send data without blocking the Activity’s main UI thread. By&#xA;  notifying sSendLock of the UsbController the data will be transferred.&#xA;  After submission, the thread will go into “wait” again. This way, even&#xA;  if submission takes more time than expected, the Activity’s main&#xA;  thread will not be blocked and hence the app will not become&#xA;  unresponsive.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="9176" LastEditorUserId="-1" LastEditDate="2017-04-13T12:50:09.580" LastActivityDate="2015-10-19T15:19:12.993" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8288" PostTypeId="1" AcceptedAnswerId="8291" CreationDate="2015-10-19T19:12:04.663" Score="0" ViewCount="33" Body="&lt;p&gt;I have a 1inch square tube that I would like to place a motor into. &lt;img src=&quot;https://i.stack.imgur.com/JvPPH.jpg&quot; alt=&quot;small gear motor inside steel square tube&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The motor I have takes up approximately 1/2 of the available space (roughly 3/4 inch I.D.) I would like to find the largest motor that will fit in the space without having to cobble too much of a housing. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where/how can i find motors by physical dimensions?&lt;/p&gt;&#xA;" OwnerUserId="10875" LastActivityDate="2015-10-20T01:36:17.980" Title="Sourcing motors by physical dimensions" Tags="&lt;motor&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="8289" PostTypeId="1" CreationDate="2015-10-19T20:57:38.953" Score="0" ViewCount="272" Body="&lt;p&gt;I have a Crock Pot with an analog knob and would like to find a way to turn the knob by using and appliance timer. I have no idea where to begin. I need help.&#xA;Thanks&lt;/p&gt;&#xA;" OwnerUserId="10877" LastEditorUserId="110" LastEditDate="2015-10-20T18:00:31.233" LastActivityDate="2016-01-18T20:20:19.860" Title="Crock Pot Knob Turner" Tags="&lt;control&gt;&lt;sensors&gt;&lt;stepper-motor&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="8291" PostTypeId="2" ParentId="8288" CreationDate="2015-10-20T01:36:17.980" Score="1" Body="&lt;p&gt;&lt;a href=&quot;http://www.digikey.com/product-search/en/motors-solenoids-driver-boards-modules/motors-ac-dc/983125&quot; rel=&quot;nofollow&quot;&gt;Digikey&lt;/a&gt; has the ability to sort by physical size (body diameter). I would have thought other sites would offer this as well, but Mouser and Tower Hobbies don't appear to. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-10-20T01:36:17.980" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8292" PostTypeId="1" AcceptedAnswerId="8295" CreationDate="2015-10-20T08:46:38.927" Score="0" ViewCount="425" Body="&lt;p&gt;Currently I am developing a control system for an aircraft of a unique design (something in between a helicopter and a dirigible). At this moment I can model only the dynamics of this vehicle without any aerodynamic effects taken into account. For this I use the following work-flow:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mechanical model in SolidWorks -&gt; MSC ADAMS (Dynamics) &amp;lt;--&gt; MATLAB/Simulink (Control algorithms)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus, the dynamics of the vehicle is modeled in ADAMS and all control algorithms are in MATLAB/Simulink. Unfortunately, ADAMS can not simulate any aerodynamic effects. As a result, I can not design a control system that is capable to fight even small wind disturbances.&lt;/p&gt;&#xA;" OwnerUserId="1923" LastActivityDate="2015-10-20T12:10:59.907" Title="Are there any aerodynamics modeling/simulation software that is capable to consume a SolidWorks model and to interface with MATLAB/Simulink?" Tags="&lt;control&gt;&lt;simulator&gt;&lt;uav&gt;&lt;matlab&gt;&lt;simulation&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8293" PostTypeId="1" AcceptedAnswerId="8297" CreationDate="2015-10-20T11:23:03.210" Score="0" ViewCount="1570" Body="&lt;p&gt;I know how to make a line follower. But in &lt;a href=&quot;https://www.youtube.com/watch?v=5At_u5rnh2U&quot; rel=&quot;nofollow&quot;&gt;this video&lt;/a&gt; what have they done exactly? They are giving the source and destination in the map but how the robot moves based on the instruction given in map?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the procedure to do it? They have mapped the path. Please do watch the video.&lt;/p&gt;&#xA;" OwnerUserId="10882" LastEditorUserId="10882" LastEditDate="2015-10-20T15:58:40.093" LastActivityDate="2015-10-20T16:43:50.357" Title="Advanced Line Following Robot of Maze Solving" Tags="&lt;wheeled-robot&gt;&lt;mapping&gt;&lt;line-following&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="8294" PostTypeId="1" AcceptedAnswerId="8301" CreationDate="2015-10-20T11:31:26.367" Score="0" ViewCount="150" Body="&lt;p&gt;I want a mobile robot to go from a starting position to a goal position. But, I don't want to calculate the pose from encoders. Instead I want to know if there exist such a simulator that provides pose function that makes the work easier, like go_to(x_coordinate, y_coordinate). That means, the robot will automatically calculate its current position and leads itself to the goal position. &lt;/p&gt;&#xA;" OwnerUserId="10881" LastEditorUserId="110" LastEditDate="2015-10-20T18:03:16.013" LastActivityDate="2015-10-20T18:10:01.457" Title="Need a mobile robot simulator that provides easier odometry funtions" Tags="&lt;mobile-robot&gt;&lt;odometry&gt;&lt;simulation&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8295" PostTypeId="2" ParentId="8292" CreationDate="2015-10-20T12:10:59.907" Score="3" Body="&lt;p&gt;Matlab has a package called &lt;a href=&quot;http://www.mathworks.com/products/simscape/&quot; rel=&quot;nofollow&quot;&gt;Simscape&lt;/a&gt; that you can use for modeling physical systems in general. I would just caution you up front that Simscape is almost more like a plugin manager in that it enables other modules and doesn't offer a terrific amount of content on its own. This means you get to buy Simscape, then buy whatever other toolboxes you want that require Simscape. That said, if you're using Solidworks, you/your company is probably no stranger to paying good money for (great) software tools. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you have Simscape, you can purchase/install a package called &lt;a href=&quot;http://www.mathworks.com/products/simmechanics/&quot; rel=&quot;nofollow&quot;&gt;SimMechanics&lt;/a&gt;. This package has the capability to &lt;a href=&quot;http://www.mathworks.com/help/physmod/smlink/ref/linking-and-unlinking-simmechanics-link-software-with-solidworks.html&quot; rel=&quot;nofollow&quot;&gt;interface with Solidworks&lt;/a&gt;; see the videos &lt;a href=&quot;http://www.mathworks.com/videos/importing-and-merging-cad-models-into-simmechanics-68841.html&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;http://www.mathworks.com/videos/importing-a-cad-suspension-assembly-into-simmechanics-89612.html?type=shadow&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt; (the second video is embedded in &lt;a href=&quot;http://www.mathworks.com/products/simmechanics/features.html#importing-cad-models&quot; rel=&quot;nofollow&quot;&gt;this page&lt;/a&gt; in case you have trouble accessing it).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lastly, there's an &lt;a href=&quot;http://www.mathworks.com/help/aeroblks/index.html&quot; rel=&quot;nofollow&quot;&gt;Aerospace Blockset&lt;/a&gt; for Simulink that helps you &lt;a href=&quot;http://www.mathworks.com/help/aeroblks/wind.html&quot; rel=&quot;nofollow&quot;&gt;model wind&lt;/a&gt;, but I'm not an aero guy and haven't used this set, so I can't comment on how useful it may be. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-10-20T12:10:59.907" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8296" PostTypeId="1" AcceptedAnswerId="10194" CreationDate="2015-10-20T13:42:49.827" Score="3" ViewCount="1003" Body="&lt;p&gt;I am planning to use MATLAB and Gazebo for one of my course projects. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However all the tutorials I have seen till now use Gazebo by using a virtual machine which has ROS and Gazebo installed. I have already installed ROS and Gazebo on this machine (OS Ubuntu). I also have MATLAB installed on it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it possible to use the Gazebo on this machine itself with the MATLAB toolbox? &lt;/p&gt;&#xA;" OwnerUserId="10883" LastEditorUserId="9176" LastEditDate="2017-06-08T03:10:42.517" LastActivityDate="2018-05-08T06:02:18.037" Title="Using Gazebo installed on same machine in MATLAB" Tags="&lt;ros&gt;&lt;matlab&gt;&lt;gazebo&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8297" PostTypeId="2" ParentId="8293" CreationDate="2015-10-20T14:30:14.180" Score="1" Body="&lt;p&gt;See &lt;a href=&quot;https://robotics.stackexchange.com/q/7739/9720&quot;&gt;this similar question&lt;/a&gt; and &lt;a href=&quot;https://robotics.stackexchange.com/a/7743/9720&quot;&gt;my answer to it&lt;/a&gt;. The question I linked asks for how to handle an unknown starting position, but it seems similar in that you and the other OP are both asking &quot;how do I go from Dijkstra's algorithm to implementation?&quot; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Essentially, Dijkstra's algorithm only requires to you give a &lt;a href=&quot;https://en.wikipedia.org/wiki/Directed_graph&quot; rel=&quot;nofollow noreferrer&quot;&gt;digraph&lt;/a&gt; with a set of distances or &quot;costs&quot; between the two points. Dijkstra's algorithm gives you the series of &lt;a href=&quot;https://en.wikipedia.org/wiki/Waypoint&quot; rel=&quot;nofollow noreferrer&quot;&gt;waypoints&lt;/a&gt; that will get you/your vehicle from any one arbitrary point to another arbitrary point at the lowest cost, &lt;em&gt;based on the cost information you provided&lt;/em&gt;. If you don't give it correct cost information it won't give you the optimal route; this is akin (actually) a map routing program that might send you on a back road because it only looked at distance and not distance at a given speed limit, or through a downtown area in rush hour because it doesn't account for traffic. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So it is up to you to calculate the distances between points and to know the physical relationship between two points. (read:&lt;a href=&quot;https://en.wikipedia.org/wiki/Course_(navigation)#Aircraft_heading&quot; rel=&quot;nofollow noreferrer&quot;&gt;heading&lt;/a&gt;) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, for example, if you store all of the coordinates for the points in addition to the digraph and distances, you could try:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;currentWaypoint = [x0,y0];&#xA;nextWaypoint = [x1,y1];&#xA;currentHeading = theta0;&#xA;&#xA;nextHeadingAbsolute = atan2( (y1-y0) , (x1-x0) );&#xA;nextHeadingRelative = nextHeadingAbsolute - currentHeading;&#xA;&#xA;driveDistance = sqrt( (x1-x0)^2 + (y1-y0)^2 );&#xA;&#xA;turnRobot(nextHeadingRelative);&#xA;driveRobot(drivieDistance);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This snippet/example assumes that you measure heading as 0 &lt;em&gt;radians&lt;/em&gt; as the +x-axis, with angle increasing in a counter-clockwise direction. You can make any other axis be the zero by adding an offset, and can convert to degrees if you desire. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically you just find the angle between the coordinates relative to the global x/y axes, then subtract your current heading from that. Drive distance would then be along the hypotenuse, which you can calculate using the Pythagorean Theorem.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2015-10-20T14:30:14.180" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="8298" PostTypeId="2" ParentId="8293" CreationDate="2015-10-20T16:43:50.357" Score="1" Body="&lt;p&gt;It looks like there are 3 main components to the demonstration in this video.  &lt;/p&gt;&#xA;&#xA;&lt;h3&gt;1. Creating the map&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Navigation requires a map of the robot's environment -- it looks like this was done manually.  It doesn't matter whether you create the digital map based on the real-world map, or a real-world map based on a contrived digital map.  But the maps must match.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;2. Computing the path&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;As mentioned in &lt;a href=&quot;https://robotics.stackexchange.com/a/8297/350&quot;&gt;Chuck's answer&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Dijkstra's algorithm&lt;/a&gt; can compute a path through a map -- one of many methods of doing so, but probably the most appropriate for this problem.  However, you need a bit more than Dijkstra here; the final path is not just the list of nodes you will travel through, but what direction you need to turn at each node (i.e. how many lines the line sensor will need to cross over) in order to be on the line leading to the next node in the path. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would imagine that the instructions set to the robot are just a simple list of how many paths to rotate over at each intersection.  Like &lt;code&gt;[-1, -1, 1, 1, 0]&lt;/code&gt;.  This assumes a known starting point and orientation.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;3. Following the path&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;This seems like a straightforward application of a line-following robot.  It looks like this robot is also able to detect the intersections.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In their video, they provide a huge piece of manual assistance: placing the robot at a known starting location.  All that the robot does is follow the lines, and at each detected intersection executes a turn according to the list of turns it received as instructions.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2015-10-20T16:43:50.357" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8299" PostTypeId="2" ParentId="8289" CreationDate="2015-10-20T17:04:08.593" Score="2" Body="&lt;p&gt;You might be better served by using a PID &quot;profile controller&quot; -- it would be easier (cheaper) and more accurate than trying to manually control the knob.  These are also called &quot;Ramp/Soak controllers&quot;.  They allow you to set different temperatures for different times.  A solid-state relay model (SSR) would probably be the most appropriate for what you are doing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You would keep your crock pot set on high, put the temperature sensor inside, and let the PID controller do the rest.  It works by cycling the power on and off, trying to maintain the proper temperature during each of the time periods you programmed.  &lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2015-10-20T17:04:08.593" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8300" PostTypeId="2" ParentId="6990" CreationDate="2015-10-20T17:07:11.770" Score="1" Body="&lt;p&gt;Mentioned this as a comment, but getting no response I'm turning it into an answer:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is going to depend very heavily on what the &quot;other stuffs&quot; are. You could probably differentiate between polyethylene and water using a humidity sensor. You could differentiate between polyethylene and iron by using a magnet. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In other words, if you are comparing polyethylene against other materials for which there is an existing sensor, then it might be reasonable to just set up the sensor for each of those other materials and assume that a negative detection for all those sensors is a positive detection of polyethylene.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2015-10-20T17:07:11.770" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8301" PostTypeId="2" ParentId="8294" CreationDate="2015-10-20T18:10:01.457" Score="0" Body="&lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/questions/2533321/robotics-simulator/2556393&quot;&gt;This closed StackOverflow question&lt;/a&gt; has a long list of simulators and some discussion on them.  Some are simple and 2D only, some are 3D and include rigid body physics simulation. &lt;/p&gt;&#xA;" OwnerUserId="110" LastEditorUserId="-1" LastEditDate="2017-05-23T12:37:11.430" LastActivityDate="2015-10-20T18:10:01.457" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8302" PostTypeId="1" AcceptedAnswerId="8306" CreationDate="2015-10-20T21:28:21.337" Score="18" ViewCount="10968" Body="&lt;p&gt;What are the main differences between motion planning and path planning?&#xA;Imagine that the objective of the algorithm is to find a path between the humanoid soccer playing robot and the ball which should be as short as possible and yet satisfying the specified safety in the path in terms of the distance from the obstacles. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which is the better terminology? motion planning or path planning?&lt;/p&gt;&#xA;" OwnerUserId="10886" LastEditorUserId="110" LastEditDate="2015-10-21T17:38:43.163" LastActivityDate="2016-01-04T15:56:49.077" Title="What is the difference between path planning and motion planning?" Tags="&lt;mobile-robot&gt;&lt;motion-planning&gt;&lt;humanoid&gt;" AnswerCount="6" CommentCount="1" FavoriteCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="8303" PostTypeId="2" ParentId="8302" CreationDate="2015-10-20T21:58:11.053" Score="3" Body="&lt;p&gt;There isn't really a difference. &quot;Path planning&quot; might be used more often to simply describe the problem of finding a desired path from one state (or sub-set of states) to another. Whereas &quot;motion planning&quot; might be used to describe the same problem but more specifically the actual commanded motions that the robot uses to track the series of desired states along the path.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, path planning would produce a desired trajectory for a rocket, whereas motion planning would produce the series of commands to the engines, fins, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So for the problem you mention, you need to plan a path for the robot to follow. This then needs to be expanded into trajectories for all of the robot's leg and arm joints. Then you have to convert these trajectories into raw commands to the motors (or whatever control input the robot accepts).&lt;/p&gt;&#xA;" OwnerUserId="10836" LastActivityDate="2015-10-20T21:58:11.053" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8304" PostTypeId="2" ParentId="8302" CreationDate="2015-10-20T22:52:39.753" Score="6" Body="&lt;p&gt;What's the difference between turn-by-turn GPS and driving a car? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;GPS is path planning: high-level commands like, &quot;turn right in 1 mile.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Driving is motion planning, which means following a route established by path planning &lt;em&gt;while at the same time&lt;/em&gt; taking care of the minutia: interfacing with the car, staying in lane, watching for pedestrians, obeying traffic law, merging with other vehicles, changing lanes, etc. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-10-20T22:52:39.753" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8306" PostTypeId="2" ParentId="8302" CreationDate="2015-10-21T03:13:36.183" Score="27" Body="&lt;p&gt;Compare the following two images:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/File:Korea-Jeonju-Jultagi-02.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HC1Kh.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The path planning is somewhat trivial. There's only one path: the rope. The motion planning on the other hand is not that easy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a maze the path planning is hard and motion planning is easy:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/File:Longleat_maze.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/efBl5.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course both planning tasks can be easy or hard at the same time or anything in between.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They are linked to one another in that&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the planned motion should follow the path or follow that path closely&lt;/li&gt;&#xA;&lt;li&gt;the current motion can influence the path planning. If driving in one direction at a high speed, a sudden change in velocity might not be the best idea even if that would be necessary to get on the shortest path. Or the starting pose of a nonholonomic robot, which influences the possible path significantly.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;They are separate in that &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;motion is related to time (change of position over time), but the path itself is not. Even if the motion goes along the path exactly it could have various trajectories for velocity and/or acceleration. Your robot could stop for example to let another robot cross its path, which is a change in motion but not the path itself.&lt;/li&gt;&#xA;&lt;li&gt;motion can be influenced by other things, like wind for example&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Neither list is exhaustive.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Which the terms is better than ? motion planning or path planning ?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There's no &quot;better&quot; term. It depends on what you are describing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For anything that involves moving a physical robot, I'd use &lt;em&gt;motion planning&lt;/em&gt;.&#xA;&lt;strong&gt;How do I get this thing from here to there?&lt;/strong&gt; could be a question you are answering.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the robot itself is abstracted away and you are only planning a path of a point through a maze I'd use &lt;em&gt;path planning&lt;/em&gt;. &lt;strong&gt;What's the shortest path from point A to B?&lt;/strong&gt; could be an example question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But again, both planning tasks are connected. If you ask &lt;strong&gt;What's the shortest &lt;em&gt;possible&lt;/em&gt; path?&lt;/strong&gt; then certainly the geometry and motion capabilities of the robot determine what's &lt;em&gt;possible&lt;/em&gt;. You do both &lt;em&gt;motion and path planning&lt;/em&gt; at the same time. Using either term should be fine here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This holds true for the other cases as well. &lt;strong&gt;Both terms can be used interchangeably&lt;/strong&gt; because the definition of motion and path aren't very clear. (a path implies that a motion happens along it and a motion necessarily happens along a path). You are usually doing both to some degree anyway.&lt;/p&gt;&#xA;" OwnerUserId="9860" LastActivityDate="2015-10-21T03:13:36.183" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8307" PostTypeId="2" ParentId="8302" CreationDate="2015-10-21T15:44:18.683" Score="2" Body="&lt;p&gt;When it comes to robots the terms that are most often used are path planning and trajectory planning. While motion is most commonly used in combination not with planning but with control as in motion control. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In most cases by path planning the spatial aspect of planning is considered, while trajectory planning (again, in most cases) includes the velocity and acceleration components also. For industrial robots and CNC machines the waypoints are given be the programmer while the motion controller (robot controller, CNC) plans and executes the trajectories. Based on the dynamics limitations (of the system or coming from the programmer) the motion controller calculates makes a plan how to reach the next waypoint and to arrive there with a desired velocity and acceleration (zero if you want to remain in the next waypoint)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In an order of event one would normally plan a path in the form of waypoints then plan the trajectories (incl. velocities and accelerations) linking those waypoints. Based on the system which you are using this might be done by your motion controller.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2015-10-21T15:44:18.683" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8309" PostTypeId="2" ParentId="7291" CreationDate="2015-10-22T01:15:05.450" Score="1" Body="&lt;p&gt;This is a pretty broad question but here is how I would approach the problem:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Connect to each camera using the &lt;code&gt;videoinput&lt;/code&gt; function.&lt;/li&gt;&#xA;&lt;li&gt;Calibrate the cameras using a checkerboard pattern -- I am more familiar with using OpenCV to do this, but MATLAB has a &lt;code&gt;cameraCalibrator&lt;/code&gt; function.&lt;/li&gt;&#xA;&lt;li&gt;Analyze the stereo images to get a 3D interpretation of the scene. This is another broad field of study, but you can use &lt;code&gt;disparity&lt;/code&gt; to try and create a complete depth image or pick out particular features using &lt;code&gt;detectSURFFeatures&lt;/code&gt; (along with &lt;code&gt;extractFeatures&lt;/code&gt;) and match them with &lt;code&gt;matchFeatures&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Use the 3D data for high-level planning and control of the robot. This is tied back into how you analyze the images too, i.e., if you want to track particular objects like the ball or other robots, or estimate the relative pose of the opposing net, or generally localize the robot itself based on fiduciary markers or something.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The process of connecting to the cameras, calibrating, and extracting 3D data can be thought of as a work package in terms of getting your system working. However, the fourth item (using the data) is where you need to start so that you know what requirements and limitations to place on the algorithms.&lt;/p&gt;&#xA;" OwnerUserId="10836" LastActivityDate="2015-10-22T01:15:05.450" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8310" PostTypeId="1" AcceptedAnswerId="8311" CreationDate="2015-10-22T07:40:06.647" Score="4" ViewCount="743" Body="&lt;p&gt;I am currently planning on building a robotic arm. The arm's specs are as follows: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;3 'arms' with two servos each (to move the next arm)&lt;/li&gt;&#xA;&lt;li&gt;single servo clamp&lt;/li&gt;&#xA;&lt;li&gt;mounted on revolving turntable&lt;/li&gt;&#xA;&lt;li&gt;turntable rotated by stepper motor&lt;/li&gt;&#xA;&lt;li&gt;turntable mounted on baseplate by ball bearings to allow rotation&lt;/li&gt;&#xA;&lt;li&gt;baseplate mounted on caterpillar track chassis&lt;/li&gt;&#xA;&lt;li&gt;baseplate is smaller in length and width than caterpillar chassis&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;What are the required formulas in determining how much torque each servo must produce, keeping in mind that the arm &lt;em&gt;must&lt;/em&gt; be able to lift weights of up to 1 kilogram? Also, considering that the ball bearings will take the load of the arm, how strong does the stepper have to be (just formulas, no answers)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as overall dimensions are concerned, the entire assembly will be &lt;em&gt;roughly&lt;/em&gt; 255mm x 205mm x 205mm (l x w x h). I have not finalized arm length, but the aforementioned dimensions give a general estimate as to the size. &lt;/p&gt;&#xA;" OwnerUserId="10896" LastActivityDate="2015-10-22T09:40:05.517" Title="What is the required theory behind building a robotic arm?" Tags="&lt;arduino&gt;&lt;robotic-arm&gt;&lt;stepper-motor&gt;&lt;rcservo&gt;&lt;torque&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8311" PostTypeId="2" ParentId="8310" CreationDate="2015-10-22T08:00:39.663" Score="5" Body="&lt;p&gt;There are 2 (or 3, depending on how the planned lifetime of the robot is) thing thats you have to consider.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Static load:&#xA;The motors stall (zero revolution) torques have to be able to hold the weight in the robots most unfavorable pose (usually the arm stretched out). You can determine this by static modelling, that involves only an equilibrium of forces for a given pose (no motion). The motors stall torques have to be at least equal (but larger is recommended) then the torques obtained from the static model.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Dynamic load:&#xA;This is the case where you need to consider both forces and motions. determine the target maximum speed of the robot for its end-effector (tool center point, TCP). Besides your mentioned maximum payload, you will need to know the moment of inertia of your payload (or you can approximate it if you consider that it is e.g. sphere shaped or square shaped). You will also need to approximate the masses and inertia of your linkages (incl. motors). These all are input to the dynamical analysis. The dynamic model calculates the motions of the centers of gravities of all your solids then attaches the necessary forces that act on them and then does a force equilibrium (as in the static model, but completed with &quot;motion forces&quot;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The fastest way to model the dynamics is with a software for dynamic modeling (e.g. SimMechanics package of Matlab). If not you will have to write the equations. I would recommend the Newton-Euler approach since it is the simplest. Here you can find more about it:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.diag.uniroma1.it/~deluca/rob2_en/06_NewtonEulerDynamics.pdf&quot;&gt;http://www.diag.uniroma1.it/~deluca/rob2_en/06_NewtonEulerDynamics.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The static model is a subcase of your dynamic model. If in the dynamic model you set velocities and accelerations to zero you end up with a static model. However, to find the worst case pose for your robot (the one that requires the maximum amount of torque, or produced the highest force on the bearings) is not simple in the dynamic case (when you have motions, not just standstill). You need to find the worst case load pose in order to be sure that the maximum load on the bearings and maximum torque on your motors does not exceed the maximum allowable forces/torques in the datasheet of your motor/bearings Trial and error with large increments, see where the forces peak and investigate that interval with smaller increments. A more complicated approach would be to use an optimization algorithm to find which pose maximizes your torques or reaction forces...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to plan the lifetime of your robot a fatigue analysis will also be required. I assume you do not need this...&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2015-10-22T08:22:17.493" LastActivityDate="2015-10-22T08:22:17.493" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8312" PostTypeId="2" ParentId="8310" CreationDate="2015-10-22T09:40:05.517" Score="2" Body="&lt;p&gt;It sounds like you are developing a robotic manipulator from scratch so I also assume you will be writing software for position control too. Both the design and control depend on not only the &lt;em&gt;dynamics&lt;/em&gt; but also the &lt;em&gt;kinematics&lt;/em&gt; of your robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Kinematics cover the relationships between the joint angles and link lengths (each &quot;arm&quot; is referred to as a &lt;em&gt;link&lt;/em&gt;) so that you can determine the position and orientation (as well as velocities and accelerations) along any part of the robot. One method of modeling the kinematics is to break your set of links into the corresponding series of &lt;a href=&quot;https://en.wikipedia.org/wiki/Denavit%E2%80%93Hartenberg_parameters&quot; rel=&quot;nofollow&quot;&gt;Denavit-Hartenberg parameters&lt;/a&gt;. This is not difficult to do, you just have to familiarize yourself with coordinate frames and determine the coefficients for your particular links.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind that we are always considering the robot states to be the angles of the joints (or extension of any prismatic joint). Given any set of angles we can then use the kinematics to determine the Cartesian positions of the robot components. Same goes for angular rates to Cartesian velocities and angular accelerations to Cartesian accelerations (of course the velocities and accelerations depend on the angles and rates as well).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To get the torques we then look at the dynamics, where we use the kinematics to model the robot motion and then examine the reaction forces and moments between links based on the inertia of the moving masses. Again, this is not actually too difficult and reduces to a series of free-body diagrams that can be solved in series. The torque on each joint is then simply the moment being applied to it projected onto the joint axis of rotation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is known as the &lt;em&gt;computed torque method&lt;/em&gt; whereby we prescribe a trajectory for the manipulator joints over time (angles, angular velocities, and angular accelerations) then use the kinematics to determine the Cartesian motion of the joints and finally solve for the reaction torques in the joints. Essentially we are saying &quot;if the manipulator were to perform this motion, what torques will it need to apply through the motors&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you control the manipulator, you can then input those computed torques for your desired motion and include a layer of feedback control to correct for errors since our model is never perfect. Of course you can use the kinematics and dynamics to approach the problem in different ways, but you'll always need to include them both.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As 50k4 mentioned in the other answer, there are plenty of software packages to help you do this. However, you will most definitely have to understand the underlying principles in order to translate your particular design into the configuration that the software expects (i.e., DH parameters or some other accepted convention). Manipulators can be a bit daunting so take it in stride!&lt;/p&gt;&#xA;" OwnerUserId="10836" LastActivityDate="2015-10-22T09:40:05.517" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8313" PostTypeId="1" AcceptedAnswerId="8316" CreationDate="2015-10-22T10:40:13.363" Score="3" ViewCount="153" Body="&lt;p&gt;As someone who is new and is still learning about robotics, I hope you can help me out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's say I have two systems: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;(a) Inverted Pendulum (unstable system)&lt;/li&gt;&#xA;&lt;li&gt;(b) Pole Climbing Robot (stable system)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;For system (a), I would say that generally, it is a more dynamic system that produces fast motion. So, in order to effectively control it, I would have to derive the Equations of Motions (EOM) and only then I can supply the sufficient input to achieve the desired output. Eventually, the program will implement the EOM which enables the microcontroller to produce the right signal to get the desired output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However for system (b), I assume that it is a stable system. Instead of deriving the EOM, why cant I just rely on the sensor to determine whether the output produced is exactly what I want to achieve? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For unstable system, controlling it is just difficult and moreover, it does not tolerate erratic behavior well. The system will get damaged, as a consequence. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the contrary, stable system is more tolerant towards unpredictable behavior since it is in fact stable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Am I right to think about it from this perspective? What exactly is the need for deriving the EOM of systems (a) and (b) above? What are the advantages?  How does it affect the programming of such systems?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edited:&lt;/strong&gt;&#xA;Some examples of the climbing robot that I'm talking about: &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://i.ytimg.com/vi/gf7hIBl5M2U/hqdefault.jpg&quot; rel=&quot;nofollow&quot;&gt;i.ytimg.com/vi/gf7hIBl5M2U/hqdefault.jpg&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://ece.ubc.ca/~baghani/Academics/Project_Photos/UTPCR.jpg&quot; rel=&quot;nofollow&quot;&gt;ece.ubc.ca/~baghani/Academics/Project_Photos/UTPCR.jpg&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="10691" LastEditorUserId="10691" LastEditDate="2015-10-22T18:12:41.237" LastActivityDate="2015-10-22T18:12:41.237" Title="Is modelling a robot and deriving its Equations of Motions more applicable to a system that is inherently unstable?" Tags="&lt;mobile-robot&gt;&lt;control&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8314" PostTypeId="2" ParentId="7685" CreationDate="2015-10-22T11:27:04.947" Score="0" Body="&lt;p&gt;You mentioned step size of 10 microns...It is not certain that you can achieve this precision with conventional stepper motors and diy hardware. the backlash in the gearbox (especially if multi stage) would exceed your required precision...I would recommend looking into precision piezo actuators...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These come to mind:&#xA;&lt;a href=&quot;http://www.physikinstrumente.com/products.html&quot; rel=&quot;nofollow&quot;&gt;http://www.physikinstrumente.com/products.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To my knowledge they have high precision x-y tables and suitable controller for them that you can interface also form an arduino (or something else, e.g. Matlab). Should be right around your budget, maybe a bit higher... You can also look for different manufacturer for piezo linear actuators...&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2015-10-22T11:27:04.947" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8315" PostTypeId="2" ParentId="8313" CreationDate="2015-10-22T11:46:25.280" Score="1" Body="&lt;p&gt;Interesting question...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a closed loop system you always rely on a sensor to see if the output equals your reference value or not (e.g. is the actual state and desired state the same). If no, your controller acts tries to minimize the difference between desired state and current state. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The input you can give to the inverted pendulum is not the same as your output, what you measure. If it would be, it would not be an inverted pendulum. Infact with the EOM you try to figure out what input should you give to the system to produce the output you expect. In other word how does your input relate to your output (or vice versa).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a tutorial on how to write the EOM:&#xA;&lt;a href=&quot;http://ctms.engin.umich.edu/CTMS/index.php?example=InvertedPendulum&amp;amp;section=SimulinkModeling&quot; rel=&quot;nofollow&quot;&gt;http://ctms.engin.umich.edu/CTMS/index.php?example=InvertedPendulum&amp;amp;section=SimulinkModeling&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not sure what you meen by pole climbing robot, but I assume it is a more complex system consisting of more actuators and so it has a higher level (maybe open loop) control system and then closed loops for all different actuators...&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2015-10-22T11:46:25.280" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8316" PostTypeId="2" ParentId="8313" CreationDate="2015-10-22T15:04:32.397" Score="5" Body="&lt;p&gt;A system is (marginally) stable if &lt;em&gt;all&lt;/em&gt; of the poles are (equal to or) &lt;a href=&quot;https://en.wikibooks.org/wiki/Control_Systems/Stability#Poles_and_Stability&quot; rel=&quot;nofollow&quot;&gt;less than zero&lt;/a&gt;. In general, the poles of a system determine whether a system is stable or not, and the zeros of a system determine the &lt;em&gt;approach&lt;/em&gt; to stability (rise time, settling time, overshoot, etc.) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A PID controller operates with no system model taken into account. A PID controller adds a pole at zero and two zeros to the system; these can be adjusted to tune the system response. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem with trying to use a PID controller on an unstable system is that you need to tune the zeros of the controller to &lt;em&gt;exactly equal to&lt;/em&gt; the unstable poles to achieve pole-zero cancellation. If, for some reason (friction, wear, capacitor aging, vibration, etc.) the controller's zero end up not &lt;em&gt;exactly equal to&lt;/em&gt; the unstable poles, then the unstable poles are no longer cancelled and the system goes unstable again. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In scenarios like this, adding zeros is not the solution. The way to control an unstable pole is to actually &lt;em&gt;place&lt;/em&gt; the (unstable) open-loop poles somewhere else. In this manner you're not trying to control the system by cancelling the poles, you're actually acting to change the fundamental dynamics of the system. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The technique to achieve pole placement is generally &lt;a href=&quot;https://en.wikipedia.org/wiki/Full_state_feedback&quot; rel=&quot;nofollow&quot;&gt;state feedback control&lt;/a&gt;. This requires a system model because (hand-waving) you need to know which poles are unstable and in order to be able to make them stable. Remember, for stability, a positive pole is unstable and a negative pole is stable, from the inverse Laplace tranform of the pole, $e^{\pm pt}$ - the time response either decays or &quot;explodes&quot; exponentially. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, once you have a system model and evaluate which poles need to be moved from the right- to the left-hand plane you can calculate the gains required to do the move et voila, the controller is complete. Note the (hand-waving); this can be a very time-consuming task.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, in conclusion, while you might be able to &quot;skate by&quot; with a PID controller on an unstable system, PID control will never change the pole locations of the underlying system so you will only ever achieve tenuous stability. In order to change the underlying system dynamics, you first need to &lt;em&gt;know&lt;/em&gt; the underlying system dynamics, and that's why you need a system model.  &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2015-10-22T16:36:49.580" LastActivityDate="2015-10-22T16:36:49.580" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="8318" PostTypeId="2" ParentId="8313" CreationDate="2015-10-22T17:29:21.140" Score="2" Body="&lt;p&gt;The inverted pendulum is unstable in the sense that it will diverge away from the upright position if &lt;em&gt;perturbed&lt;/em&gt; (for example, slightly blown by wind or lightly vibrated). On the other hand the &quot;climbing robot&quot; will swing back to its original position if perturbed, so you can say it is stable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You don't need to derive the equations of motion for an unstable system in order to control it if you have sensor feedback of the desired output (just like you said). Instead, you use a feedback control law that compares the sensor reading to your desired output to compute the required control input that reduces that difference. Read about &lt;a href=&quot;https://en.wikipedia.org/wiki/PID_controller&quot; rel=&quot;nofollow&quot;&gt;PID controllers&lt;/a&gt; to get an idea of how that works (it's actually pretty simple).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The advantage to using the equations of motion is that you can &lt;em&gt;predict&lt;/em&gt; the required input to achieve a desired response, and this predicted input is often referred to as &lt;em&gt;feed-forward&lt;/em&gt; control (or &lt;em&gt;open-loop&lt;/em&gt; control). If you combine both feed-forward and feedback control you get a very robust system that applies predicted inputs to achieve a desired output but also implements feedback based on sensors to correct for errors (your equations of motion can never be perfectly accurate).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another benefit of using the equations of motion is that you can account for non-linearities in the system that might otherwise be problematic for a PID controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When it comes to programming, using feedback will be much simpler than using feed-forward since the equations of motion will likely be relatively complex (in general, but not bad for a simple inverted pendulum).&lt;/p&gt;&#xA;" OwnerUserId="10836" LastEditorUserId="10836" LastEditDate="2015-10-22T17:41:17.860" LastActivityDate="2015-10-22T17:41:17.860" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="8319" PostTypeId="1" AcceptedAnswerId="8323" CreationDate="2015-10-22T23:48:40.253" Score="6" ViewCount="832" Body="&lt;p&gt;I would like to filter angular velocity data from a &quot;cheap&quot; gyroscope (60$). These values are used as an input of a nonlinear controller in a quadcopter application. I am not interested in removing the bias from the readings.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt;:&#xA;I'm using a&#xA; l2g4200d gyroscope connected via i2c with an Arduino uno. The following samples are acquired with the arduino, sent via serial and plotted using matlab.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the sensor is steady, the plot shows several undesired spikes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/v2A6F.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/v2A6F.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;How can I filter these spikes?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;1st approach:&lt;/strong&gt; Spikes are attenuated but still present...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's consider the following samples in which a couple of fast rotations are performed. Let's assume that the frequency components of the &quot;fast movement&quot; are the ones I will deal with in the final application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/8LvBD.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8LvBD.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Below, the discrete Fourier transform of the signal in a normalized frequency scale and the second order ButterWorth low pass filter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/SDYpK.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/SDYpK.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With this filter, the main components of the signal are preserved. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Xg5Ft.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Xg5Ft.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although the undesired spikes are attenuated by a factor of three the plot shows a slight phase shift...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/lh0cd.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/lh0cd.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And the spikes are still present. How can I improve this result?&#xA;Thanks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT 2:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1./2. I am using a breakout board from Sparkfun. You can find the circuit with the Arduino and the gyro in this post: &lt;a href=&quot;http://userk.co.uk/gyroscope-arduino/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Can you roll with a L3G4200D gyroscope, Arduino and Matlab?&lt;/a&gt; &#xA;    I have added pullup resistors to the circuit. I would exclude this option because other sensors are connected via the i2c interface and they are working correctly.&#xA;    I haven't any decoupling capacitors installed near the integrated circuit of the gyro. The breakout board I'm using has them (0.1 uF). Please check the left side of the schematic below, &lt;strong&gt;maybe I am wrong&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/4E2KK.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4E2KK.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Motors have a separate circuit and I have soldered all the components on a protoboard.&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;4&quot;&gt;&#xA;&lt;li&gt;&lt;p&gt;The gyro is in the quadcopter body but during the test the motors were turned off.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;That is interesting. The sampling frequency used in the test was 200Hz.  Increasing the update freq from 200 to 400 hz doubled the glitching.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I found other comments on the web about the same breakout board and topic. Open the comments at the bottom of the &lt;a href=&quot;http://forum.bildr.org/viewtopic.php?t=443&quot; rel=&quot;nofollow noreferrer&quot;&gt;page&lt;/a&gt; and Ctrl-F &lt;code&gt;virtual1&lt;/code&gt;&lt;/p&gt;&#xA;" OwnerUserId="6970" LastEditorUserId="6970" LastEditDate="2015-10-23T14:14:34.747" LastActivityDate="2015-12-13T22:41:37.470" Title="Filtering angular velocity spikes of a cheap Gyroscope" Tags="&lt;quadcopter&gt;&lt;gyroscope&gt;&lt;filter&gt;" AnswerCount="3" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="8320" PostTypeId="2" ParentId="1858" CreationDate="2015-10-23T12:40:23.310" Score="1" Body="&lt;p&gt;This is not using a left-handed coordinate system! Check out my crude edits to the diagram.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/kKyvJ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kKyvJ.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note each coordinate system (RGB for XYZ, black for gravity) has the gravity vector aligned in the negative direction of the appropriate axis, while the diagram shows a positive reading. I could have drawn them the other way but the actual acceleration in the absence of gravity would be upwards to produce the same reading. Maybe this is why negating the values works for your application.&lt;/p&gt;&#xA;" OwnerUserId="10836" LastActivityDate="2015-10-23T12:40:23.310" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8321" PostTypeId="2" ParentId="8319" CreationDate="2015-10-23T13:28:07.087" Score="3" Body="&lt;p&gt;You gave the part number and protocol, but&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Can you provide a schematic for how this is installed in a circuit? &lt;/li&gt;&#xA;&lt;li&gt;Are you using the module or an individual chip? &lt;/li&gt;&#xA;&lt;li&gt;Is this all soldered together or is it connected on a breadboard? &lt;/li&gt;&#xA;&lt;li&gt;Is this laying on a table or similar or is it actually in a quadcopter body? Are the quadcopter motors running? &lt;/li&gt;&#xA;&lt;li&gt;What sampling rate are you using?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I ask because the spikes seem too large to be &quot;just&quot; noise. My thoughts on troubleshooting would then be to address whatever the underlying cause of the spikes is rather than trying to filter them out of the output. Potential issues I can think of are related to the questions I'm asking, so for each question I ask I'm thinking it could be:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;It could be either a voltage supply issue or communication line issue. Things to look at on the schematic: (A) Check that the supply voltage is actually within the &lt;a href=&quot;https://www.parallax.com/sites/default/files/downloads/27911-L3G4200D-Gyroscope-Manufacturer-Datasheet.pdf&quot; rel=&quot;nofollow&quot;&gt;2.4 - 3.6V allowable input range&lt;/a&gt; (page 11); (B) Check that &lt;a href=&quot;https://en.wikipedia.org/wiki/Decoupling_capacitor&quot; rel=&quot;nofollow&quot;&gt;decoupling capacitors&lt;/a&gt; are installed and connected to a suitable voltage; (C) Check that &lt;a href=&quot;http://www.ti.com/lit/an/slva689/slva689.pdf&quot; rel=&quot;nofollow&quot;&gt;I2C pullup resistors&lt;/a&gt; are installed; (D) Check what other large equipment (read:motors) are installed in the circuit and check that the power supply is capable of delivering peak current.&lt;/li&gt;&#xA;&lt;li&gt;Again, checking for decoupling capacitors and if everything is soldered correctly; on the module everything could be expected to be soldered correctly, but pullup resistors are not included.&lt;/li&gt;&#xA;&lt;li&gt;Breadboard connections can be noisy, especially at high communication rates. Also, a breadboard connection implies that the system may not be securely attached to anything. &lt;/li&gt;&#xA;&lt;li&gt;While unlikely, a loose chip/module could be experiencing some vibration (maybe from nearby speakers) that could explain the spikes. If the motors are running, this is a lot more likely. In addition, the motors could be &lt;a href=&quot;https://en.wikipedia.org/wiki/Brownout_(electricity)&quot; rel=&quot;nofollow&quot;&gt;browning out&lt;/a&gt; your voltage supply, creating issues for the gyro. &lt;/li&gt;&#xA;&lt;li&gt;This is mostly a curiosity question, but higher communication rates tend to cause/exacerbate issues.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I would guess it's probably a supply voltage issue, either to the chip directly or on the communication line, but again, they're all shots in the dark without more information. &lt;/p&gt;&#xA;&#xA;&lt;h2&gt;:EDIT:&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;From a &lt;a href=&quot;http://forum.bildr.org/viewtopic.php?t=443&quot; rel=&quot;nofollow&quot;&gt;link OP posted&lt;/a&gt;, there was this comment/answer:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What did work was setting it to read both the A8 and the 28 registers, then compare them. If they differ, read them again! Seems to have solved 100% of my glitching. Now I can get on to calibrating in peace.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This, coupled with other users that have similar issues, would leave me to believe it's a defective chip design. If you evaluate the data and the least significant byte is, in fact, always 255 when you get this glitch, then you could always just check for that condition and either ignore that sample or substitute the previous reading for the current reading, or do what is suggested above by 'virtual1' on the other site. I would avoid setting it to zero because this may cause &quot;inverse glitches&quot; if you get that spike while there is actually valid data.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2015-10-23T14:53:21.843" LastActivityDate="2015-10-23T14:53:21.843" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="8322" PostTypeId="1" CreationDate="2015-10-23T13:43:24.963" Score="1" ViewCount="129" Body="&lt;p&gt;First off, sorry if my question is too naive or not related to the forum (this is the best matching one I've found on StackExchange).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have some amount of SIM-cards. I can programmatically access a single SIM-card if it is inserted into a USB-modem. I want to be able to access the specified card in the set. The best way to achieve this I can think of is to create a device that would somehow replace the current card in the modem with one in the set. I can not use several modems for this because I don't really know the amount of cards and I would like to automate this process anyway.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am more of a programmer than an engineer so everything that follows (including the entire concept of switching cards) looks pretty weird to me. There probably is a better solution, but this is the best I've come up with. For now I consider building some sort of conveyor that would move cards and insert the ones I need with some sort of a feed device. This looks like an overkill to me that would be both expensive to build and uneffective to work with.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want an idea of a device that would replace SIM-cards into the modem (or maybe a better solution to the problem). Any disassembly of a modem needed is possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is required to automate receiving SMS from clients that have different contact phones. Unfortunately, a simple redirection of SMS is not an option.&lt;/p&gt;&#xA;" OwnerUserId="10906" LastActivityDate="2015-10-25T19:02:26.853" Title="Need an idea: automated sim card switcher" Tags="&lt;automatic&gt;&lt;automation&gt;" AnswerCount="2" CommentCount="0" ClosedDate="2015-10-26T11:59:51.177" ContentLicense="CC BY-SA 3.0" />
  <row Id="8323" PostTypeId="2" ParentId="8319" CreationDate="2015-10-23T21:39:23.227" Score="1" Body="&lt;p&gt;Did you try out &lt;a href=&quot;https://en.wikipedia.org/wiki/Median_filter&quot; rel=&quot;nofollow&quot;&gt;median filtering&lt;/a&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This nonlinear technique is suitable to counteract the presence of spikes while preserving the high frequency content of the input signal.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastActivityDate="2015-10-23T21:39:23.227" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8324" PostTypeId="2" ParentId="1858" CreationDate="2015-10-23T22:17:46.863" Score="6" Body="&lt;p&gt;The answer is that 3-axis accelerometers &lt;strong&gt;don't&lt;/strong&gt; have a left handed coordinate system just for the gravity. In static condition (i.e. if the accelerometer is not accelerating with respect to any inertial frame) they measure the &lt;strong&gt;opposite&lt;/strong&gt; of gravity acceleration, not the gravity acceleration itself. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In more general terms, the accelerometers measure the difference between the &lt;strong&gt;actual&lt;/strong&gt; acceleration of the sensor with respect to any inertial frame and the gravitational acceleration:&#xA;$$&#xA;a_{accelerometer} = a_{sensorFrame} - g &#xA;$$&#xA;This &quot;acceleration&quot; measured by the accelerometer is sometimes called &lt;a href=&quot;https://en.wikipedia.org/wiki/Proper_acceleration&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;proper acceleration&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This can be easily verified by checking the measure of an accelerometer in free fall: as in that case the &lt;strong&gt;actual&lt;/strong&gt; acceleration of the sensor will be equal to $g$, the accelerometer measure will be $0$. &lt;/p&gt;&#xA;" OwnerUserId="9691" LastActivityDate="2015-10-23T22:17:46.863" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8325" PostTypeId="2" ParentId="7728" CreationDate="2015-10-23T22:26:50.350" Score="1" Body="&lt;p&gt;As far as I know, soft body simulation is not currently supported in Gazebo.&#xA;See &lt;a href=&quot;https://bitbucket.org/osrf/gazebo/issues/1422/soft-body-supoort-in-gazebo&quot; rel=&quot;nofollow&quot;&gt;https://bitbucket.org/osrf/gazebo/issues/1422/soft-body-supoort-in-gazebo&lt;/a&gt; and &lt;a href=&quot;http://answers.gazebosim.org/question/5129/status-of-bullets-soft-body-dynamics-integration/&quot; rel=&quot;nofollow&quot;&gt;http://answers.gazebosim.org/question/5129/status-of-bullets-soft-body-dynamics-integration/&lt;/a&gt; .&lt;/p&gt;&#xA;" OwnerUserId="9691" LastActivityDate="2015-10-23T22:26:50.350" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8326" PostTypeId="2" ParentId="8322" CreationDate="2015-10-23T22:27:50.780" Score="0" Body="&lt;p&gt;Seems pretty challenging! I would suggest a rotating table with the SIM cards (sort of like an old slide projector) that is controlled with a stepper motor or has an encoder or Hall effect sensors so you can position the cards with the reader. On the inside of the ring of cards you could use an actuator to push them into the reader. Getting them back out is probably the harder part since you will need to grab them out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you can mess with the reader then that is good since it will work a lot better if you can make it so your actuator system just holds onto the SIM card the entire time -- push it in, read it, then pull it out without letting go. You can then also make the connection a bit looser if that helps pushing in and pulling out more easily.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another option could be to pull apart the reader some more and set it up so that you press the SIM card up against it instead of inserting into a slot. This would probably make it easier to change cards but you'll have to be more careful about ensuring the &quot;pins&quot; are connected properly.&lt;/p&gt;&#xA;" OwnerUserId="10836" LastActivityDate="2015-10-23T22:27:50.780" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8327" PostTypeId="1" AcceptedAnswerId="8328" CreationDate="2015-10-24T16:21:02.087" Score="1" ViewCount="147" Body="&lt;p&gt;I have the following system here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://imgur.com/UTqswOi&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://imgur.com/UTqswOi&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/mQPXP.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/mQPXP.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically, I have a range finder which gives me $R_s$ in this 2D model. I also have the model rotate about the Centre of Mass, where I have angular values and velocities Beta ($\beta$) and BetaDot ($\dot{\beta}$).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't see, for the life of me, how to figure the formula for the angular velocity in the Range Finder frame. How am I supposed to do this? I have all the values listed in those variables. The object there doesn't move when the vehicle/system pitches. It's stationary.&lt;/p&gt;&#xA;" OwnerUserId="10379" LastEditorUserId="9176" LastEditDate="2015-10-25T14:05:32.253" LastActivityDate="2015-10-25T14:05:32.253" Title="Transforming angular velocity?" Tags="&lt;robotic-arm&gt;&lt;sensor-fusion&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8328" PostTypeId="2" ParentId="8327" CreationDate="2015-10-24T18:09:01.703" Score="3" Body="&lt;p&gt;I think your diagram is missing an angle for the laser angle with respect to the vehicle body -- I'm going to call that angle $\alpha$, see this diagram for clarity:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/hAerL.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hAerL.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since it seems you are tracking an object with your laser, I imagine the point of this is to predict the angular velocity of that object in the vehicle frame. So your laser is scanning in 2D, providing range at a number of angles, and you want to predict what angle the object will be at in the next time step.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In that case, you need to consider to motion of the system to figure out the motion of the target object in the laser frame. Assume the target object has position $\hat{p}$ in the world frame and $\hat{p}_L$ in the laser frame. Although it sounds like this is for a manipulator that is fixed at the base, we will still consider a moving centre of mass with position $p_0$ in the world frame. The position of the target in the world frame is then:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\hat{p} = p_0 + A_{\beta} \begin{bmatrix} L_z \\ -L_y \\ \end{bmatrix} + A_{\beta} R \begin{bmatrix} \cos \alpha \\ -\sin \alpha \\ \end{bmatrix} $ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where $A_{\beta} = \begin{bmatrix} \cos \beta &amp;amp; \sin \beta \\ -\sin \beta &amp;amp; \cos \beta \\ \end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then we differentiate that to get the velocity -- which should be zero assuming your object is stationary in the world frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$0 = \dot{p}_0 + \dot{\beta} J_{\beta} \begin{bmatrix} L_z \\ -L_y \\ \end{bmatrix} + R \dot{\beta} J_{\beta} \begin{bmatrix} \cos \alpha \\ -\sin \alpha \end{bmatrix} + R \dot{\alpha} A_{\beta} \begin{bmatrix} -\sin \alpha \\ -\cos \alpha \end{bmatrix} + \dot{R} A_{\beta} \begin{bmatrix} \cos \alpha \\ -\sin \alpha \end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where $J_{\beta} = \begin{bmatrix} -\sin \beta &amp;amp; \cos \beta \\ -\cos \beta &amp;amp; -\sin \beta \\ \end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This then defines two equations (the z- and y-components of the above equation) in two unknowns ($\dot{R}$ and $\dot{\alpha}$).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, what you really need is to simply find an expression for the &lt;em&gt;predicted&lt;/em&gt; range and laser angle ($\tilde{R}$ and $\tilde{\alpha}$) in terms of your states, the vehicle pose, ($z$,$y$,$\beta$) and target position ($\hat{z}$,$\hat{y}$).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\tilde{R} = \sqrt{\left( \hat{z} - \left( z + L_z \cos \beta \right) \right)^2 + \left( \hat{y} - \left( y + L_y \sin \beta \right) \right)^2}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\tilde{\alpha} = \tan^{-1} \left( \frac{\hat{y} - \left( y + L_y \sin \beta \right)}{\hat{z} - \left( z + L_z \cos \beta \right) } \right) - \beta$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then you can apply this in an EKF according to the chat discussion. Note I have switched the axes labels and sign conventions to something that I am more used to.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/dZLZq.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dZLZq.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/rcCKt.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rcCKt.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10836" LastEditorUserId="10836" LastEditDate="2015-10-25T09:23:39.480" LastActivityDate="2015-10-25T09:23:39.480" CommentCount="14" ContentLicense="CC BY-SA 3.0" />
  <row Id="8329" PostTypeId="1" AcceptedAnswerId="8330" CreationDate="2015-10-25T10:41:43.953" Score="4" ViewCount="884" Body="&lt;p&gt;I try to measure Euler angles from an IMU, but some discontinuities happens during measurement, even in vibrationless environment, as shown in the images below. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can someone explain which type of filter will be the best choice to filter this type discontinuities?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gHMgg.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gHMgg.jpg&quot; alt=&quot;Discontinuities in Euler angle measurement&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/FBnSc.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FBnSc.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/bvIZa.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/bvIZa.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10090" LastEditorUserId="10090" LastEditDate="2015-10-26T08:38:19.673" LastActivityDate="2015-10-26T09:08:50.110" Title="Filtering IMU angle discontinuities" Tags="&lt;sensors&gt;&lt;imu&gt;&lt;matlab&gt;&lt;noise&gt;&lt;filter&gt;" AnswerCount="1" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8330" PostTypeId="2" ParentId="8329" CreationDate="2015-10-25T12:36:32.420" Score="2" Body="&lt;p&gt;Here are my two suggestions for dealing with this problem:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Use a median filter, which replaces each value of your signal with the median of the values in a small window around each one. Here is some pseudo-code, where &lt;code&gt;x&lt;/code&gt; is your original signal, &lt;code&gt;y&lt;/code&gt; is the filtered signal, &lt;code&gt;N&lt;/code&gt; is the number of points in your signal, and &lt;code&gt;W&lt;/code&gt; is the number of points in the median filter window.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;for (k = 1 to N) {&#xA;    y[k] = median of samples x[k-W+1] to x[k]&#xA;}&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are using MATLAB then you can use the function &lt;code&gt;medfilt1&lt;/code&gt; to do this, or the function &lt;code&gt;median&lt;/code&gt; to make your own filter (see &lt;a href=&quot;http://www.mathworks.com/help/signal/ug/remove-spikes-from-a-signal.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt;), whereas if you are using a language like C++ then you may need to write your own functions (see &lt;a href=&quot;https://stackoverflow.com/questions/2114797/compute-median-of-values-stored-in-vector-c&quot;&gt;this&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other option is to simply check the magnitude of the change in the signal and reject any sample whose change is beyond some threshold. Something like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;if (abs(x[k] - y[k-1]) &amp;gt; threshold) {&#xA;    y[k] = x[k-1]&#xA;} else {&#xA;    y[k] = x[k]&#xA;}&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Taking a look at your data, it looked suspiciously like an angle wrapping issue, but around 180 deg instead of 360 deg. The spikes disappear if you double the signal then apply an angle wrap (using MATLAB's &lt;code&gt;wrapToPi&lt;/code&gt; for example). The plot below shows the doubled signal in blue and the doubled signal after wrapping in red.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/KF7Yl.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KF7Yl.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the code I used:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sensorData = dlmread('sensor.txt');&#xA;t = sensorData(:,1);&#xA;x = sensorData(:,2);&#xA;&#xA;x2 = 2*x;&#xA;y = wrapToPi(x2*(pi/180))*(180/pi);&#xA;&#xA;figure&#xA;hold on;&#xA;plot(t,x,'k','linewidth',2);&#xA;plot(t,x2,'b','linewidth',2);&#xA;plot(t,y,'r','linewidth',2);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="10836" LastEditorUserId="-1" LastEditDate="2017-05-23T12:37:11.430" LastActivityDate="2015-10-26T09:08:50.110" CommentCount="14" ContentLicense="CC BY-SA 3.0" />
  <row Id="8331" PostTypeId="1" AcceptedAnswerId="8336" CreationDate="2015-10-25T14:18:45.693" Score="5" ViewCount="3767" Body="&lt;p&gt;I am a beginner at robotics. &#xA;I recently stumbled across this &lt;a href=&quot;https://www.youtube.com/watch?v=iOLFP90DneY&quot; rel=&quot;nofollow&quot;&gt;robotic clock on youtube&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am an electrical engineering student and am interested in submitting it as my minor project.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have studied the basics on forward and inverse kinematics, Greubler's Equation, four bar linkage but this robot seems to be a 5 bar linkage. I want to know how to implement it in a 5 bar linkage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How to use the inverse kinematics solutions described in &lt;a href=&quot;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.456.7665&amp;amp;rep=rep1&amp;amp;type=pdf&quot; rel=&quot;nofollow&quot;&gt;Combined synthesis of five-bar linkages and non-circular gears for precise path&#xA;generation&lt;/a&gt;, to make the robot follow desired trajectory?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have been stuck at this for days... any sort of help would be appreciated.&lt;/p&gt;&#xA;" OwnerUserId="10920" LastEditorUserId="9176" LastEditDate="2015-10-25T18:46:58.830" LastActivityDate="2015-10-26T08:06:59.217" Title="Designing a 5 bar linkage robot: Plot Clock" Tags="&lt;robotic-arm&gt;&lt;beginner&gt;&lt;first-robotics&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8332" PostTypeId="2" ParentId="8322" CreationDate="2015-10-25T19:02:26.853" Score="1" Body="&lt;p&gt;You are hoping to make a jukebox for SIM cards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you can place a reasonable cap on the size of your magazine (say 50) I would use a carousel with the cards attached to the outer perifery.  You would then index the disk and move the relevant SIM card under the contacts (extended from the modem) that would be loaded onto the card (and signal the SIM door closed or power on the modem).  This way you have two very simple motions that you can simply automate with a stepper motor (with timing belt reduction) and a simple hobby type PWM servo actuator.  You would have some index ridges to align the nano, mini or micro SIMs and glue or double sided tape them down.  If you need more capacity you would just replicate the setup.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A more sophisticated setup would be to make an electronic switching arrangement.  You would then permanently load the cards into sockets and use electronics to enable the connection to each one.  Dual sim selectors for mobile phones are common but I expect the system could be made to work on perhaps 8 or 16 and possibly even cascaded two deep with perhaps 64 to 256 loaded cards selected with commands to the control circuit.&lt;/p&gt;&#xA;" OwnerUserId="9281" LastActivityDate="2015-10-25T19:02:26.853" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8333" PostTypeId="1" AcceptedAnswerId="8335" CreationDate="2015-10-25T22:51:39.043" Score="4" ViewCount="237" Body="&lt;p&gt;I'm given an assignment in which I have to design a full state feedback controller by pole placement. The state space system is fully controllable and I've been using Matlab/Simulink to determine the required feedback gain K using the place() command for several sets of poles, however once I use poles that are &quot;too negative&quot;, for example p=[-100,-200,-300,-400,-500], my controlled system starts showing bounded oscillatory behaviour. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it possible that too negative poles can cause marginal stability? And if so, why? I've read that this is only possible when the real part of one or more poles equals 0, which certainly isn't the case here. &lt;/p&gt;&#xA;" OwnerUserId="10922" LastActivityDate="2015-10-27T02:40:38.163" Title="Relation between pole placement and marginal stability?" Tags="&lt;control&gt;&lt;stability&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8334" PostTypeId="2" ParentId="8331" CreationDate="2015-10-26T00:46:11.477" Score="2" Body="&lt;p&gt;Not to completely ignore your direct questions, but I think you are overthinking the problem.  I don't believe any linkage math or even inverse kinematics are required.  The main reason is that the set of actions that the robot must perform (10 different characters at 4 locations) is small and the workspace never changes (a plane that is fixed to the robot).  That's not to say that this isn't a great project, and there should still be some interesting engineering problems to solve.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since hobby servos like these are backdrivable, I think the best thing to do would be for you to simply write each character by hand and record the trajectory.  (Record the joint angles at some time increment and/or when the joints move some distance).  Then simply write some control code to follow this trajectory.  Like i said before, because the robot's workspace is completely fixed, you can get away with doing everything in joint-space.  Going in and out of Cartesian space with FK / IK really doesn't buy you much.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, if you were to make a mobile system that was supposed to write on &lt;em&gt;any&lt;/em&gt; whiteboard surface in it's workspace, then you would start to need some forward / inverse kinematics...&lt;/p&gt;&#xA;" OwnerUserId="110" LastEditorUserId="110" LastEditDate="2015-10-26T02:21:02.677" LastActivityDate="2015-10-26T02:21:02.677" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8335" PostTypeId="2" ParentId="8333" CreationDate="2015-10-26T02:08:23.630" Score="6" Body="&lt;p&gt;You are most likely running into problems with the maximum time step in your simulation. This phenomenon is known as &lt;a href=&quot;https://en.m.wikipedia.org/wiki/Stiff_equation#Motivating_example&quot; rel=&quot;nofollow noreferrer&quot;&gt;stiffness&lt;/a&gt;, where your equations of motion are highly sensitive to the size of the time step in a discrete solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider a simple mass-spring system with mass $m$, spring stiffness $k$, displacement $x$ and velocity $\dot{x}$ for states $q$, and an input force $F$ for the input $u$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$q = \begin{bmatrix} \dot{x} \\ x \end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$A = \begin{bmatrix} 0 &amp;amp; -\frac{k}{m} \\ 1 &amp;amp; 0 \end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$B = \begin{bmatrix} \frac{1}{m} \\ 0 \end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$C = \begin{bmatrix} 0 &amp;amp; 1 \end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$D = 0$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We apply a full-state feedback control law (which ends up being PD control), with:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$u = -Kq$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And use MATLAB's &lt;code&gt;place&lt;/code&gt; function to determine the gain matrix $K$ for desired poles $p$. Package this into a setup script like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;% system coefficients&#xA;k = 1000;               % spring stiffness (N/m)&#xA;m = 1;                  % mass (kg)&#xA;&#xA;% state-space model&#xA;A = [0 (-k/m); 1 0];&#xA;B = [(1/m); 0];&#xA;C = [0 1];&#xA;D = 0;&#xA;&#xA;% desired poles&#xA;p = [-1000, -2000];&#xA;&#xA;% gain matrix&#xA;K = place(A,B,p);&#xA;&#xA;% initial conditions&#xA;x_dot_0 = 0.5;&#xA;x_0 = 0.2;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then create a Simulink model:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/cM2My.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/cM2My.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now if we use poles $p = \begin{bmatrix} -10 &amp;amp; -20 \end{bmatrix}$, we get an acceptable albeit slower response. But when we use poles $p = \begin{bmatrix} -1000 &amp;amp; -2000 \end{bmatrix}$ we find that there is only marginal stability with some steady-state error (although the bandwidth of the steady-state error is small).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is happening because the closed-loop system frequency is so high that there is numerical instability in the simulation caused by the solver's choice of time-step. To get around this, we can switch the maximum time step from &lt;code&gt;auto&lt;/code&gt; to something appropriate like &lt;code&gt;1-e5&lt;/code&gt;. You can do this in the &quot;Solver options&quot; found in the &quot;Simulation -&gt; Model Configuration Parameters&quot; menu (it might be called something a bit different in your version of MATLAB).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the comparison of the low gain result, high gain result with default &lt;code&gt;auto&lt;/code&gt; maximum time-step, and high gain result with maximum time-step of &lt;code&gt;1e-5&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/nzuX7.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/nzuX7.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/N85qS.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/N85qS.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10836" LastEditorUserId="10836" LastEditDate="2015-10-27T02:40:38.163" LastActivityDate="2015-10-27T02:40:38.163" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="8336" PostTypeId="2" ParentId="8331" CreationDate="2015-10-26T08:06:59.217" Score="8" Body="&lt;p&gt;Both the forward kinematics and inverse kinematics aren't too difficult, but always a little tricky for parallel manipulators like this one. Consider the configuration in this diagram.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/4em8U.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4em8U.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The forward kinematics first involve solving for the position of the joint where you hold the pen from each motor joint separately and then equating the two.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\begin{bmatrix} a - b \cos \theta_2 - c \cos \beta \\ a \sin \theta_2 + c \sin \beta \end{bmatrix} = \begin{bmatrix} e \cos \theta_1 + d \cos \alpha \\ e \sin \theta_1 + d \sin \alpha \end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This gives you two equations in two unknowns, $\alpha$ and $\beta$. After you solve for those angles, simply substitute them back into one of the sides of the above equation and you have the position of the pen given the input motor angles $\theta_1$ and $\theta_2$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the inverse kinematics, you start with the known position of your pen (the blue dot in the image), then you compute the lengths of the red lines, $f$ and $g$. Since you know all other lengths you can also solve for the angles in triangles $def$ and $gcb$. From that geometry you can then get the angles $\theta_1$ and $\theta_2$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So then you can turn each of your desired clock characters into an x-y path for the pen, convert the x-y path into $\theta_1$-$\theta_2$ trajectories, and control your motors accordingly. It looks like the entire linkage is then mounted on another joint that pushes the pen away from the surface between characters, but the logic behind that should be pretty easy to implement.&lt;/p&gt;&#xA;" OwnerUserId="10836" LastActivityDate="2015-10-26T08:06:59.217" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8337" PostTypeId="1" CreationDate="2015-10-26T09:03:16.850" Score="4" ViewCount="2324" Body="&lt;p&gt;I am trying to establish the FRI connection for KUKA LBR iiwa. I know how to configure the FRI connection as there are example programs available in the Sunrise.Workbench. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A sample code is given below. My question is 'how to pass' the joint torque values (or joint position or wrench) to the controller using 'torqueOverlay' as mentioned in the code below. Since I could not find any documentation on this, it was quite difficult to figure out. Any sample code with explanation or any clues would be more than helpful.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;JAVA code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;package com.kuka.connectivity.fri.example;&#xA;&#xA;import static com.kuka.roboticsAPI.motionModel.BasicMotions.ptp;&#xA;&#xA;import java.util.concurrent.TimeUnit;&#xA;import java.util.concurrent.TimeoutException;&#xA;&#xA;import com.kuka.connectivity.fri.ClientCommandMode;&#xA;import com.kuka.connectivity.fri.FRIConfiguration;&#xA;import com.kuka.connectivity.fri.FRIJointOverlay;&#xA;import com.kuka.connectivity.fri.FRISession;&#xA;import com.kuka.roboticsAPI.applicationModel.RoboticsAPIApplication;&#xA;import com.kuka.roboticsAPI.controllerModel.Controller;&#xA;import com.kuka.roboticsAPI.deviceModel.LBR;&#xA;import com.kuka.roboticsAPI.motionModel.PositionHold;&#xA;import com.kuka.roboticsAPI.motionModel.controlModeModel.JointImpedanceControlMode;&#xA;&#xA;/**&#xA; * Moves the LBR in a start position, creates an FRI-Session and executes a&#xA; * PositionHold motion with FRI overlay. During this motion joint angles and&#xA; * joint torques can be additionally commanded via FRI.&#xA; */&#xA;public class LBRTorqueSineOverlay extends RoboticsAPIApplication&#xA;{&#xA;    private Controller _lbrController;&#xA;    private LBR _lbr;&#xA;    private String _clientName;&#xA;&#xA;    @Override&#xA;    public void initialize()&#xA;    {&#xA;        _lbrController = (Controller) getContext().getControllers().toArray()[0];&#xA;        _lbr = (LBR) _lbrController.getDevices().toArray()[0];&#xA;        // **********************************************************************&#xA;        // *** change next line to the FRIClient's IP address                 ***&#xA;        // **********************************************************************&#xA;        _clientName = &quot;127.0.0.1&quot;;&#xA;    }&#xA;&#xA;    @Override&#xA;    public void run()&#xA;    {&#xA;        // configure and start FRI session&#xA;        FRIConfiguration friConfiguration = FRIConfiguration.createRemoteConfiguration(_lbr, _clientName);&#xA;        // for torque mode, there has to be a command value at least all 5ms&#xA;        friConfiguration.setSendPeriodMilliSec(5);&#xA;        friConfiguration.setReceiveMultiplier(1);&#xA;&#xA;        getLogger().info(&quot;Creating FRI connection to &quot; + friConfiguration.getHostName());&#xA;        getLogger().info(&quot;SendPeriod: &quot; + friConfiguration.getSendPeriodMilliSec() + &quot;ms |&quot;&#xA;                + &quot; ReceiveMultiplier: &quot; + friConfiguration.getReceiveMultiplier());&#xA;&#xA;        FRISession friSession = new FRISession(friConfiguration);&#xA;        FRIJointOverlay torqueOverlay = new FRIJointOverlay(friSession, ClientCommandMode.TORQUE);&#xA;&#xA;        // wait until FRI session is ready to switch to command mode&#xA;        try&#xA;        {&#xA;            friSession.await(10, TimeUnit.SECONDS);&#xA;        }&#xA;        catch (final TimeoutException e)&#xA;        {&#xA;            getLogger().error(e.getLocalizedMessage());&#xA;            friSession.close();&#xA;            return;&#xA;        }&#xA;&#xA;        getLogger().info(&quot;FRI connection established.&quot;);&#xA;&#xA;        // move to start pose&#xA;        _lbr.move(ptp(Math.toRadians(90), Math.toRadians(-60), .0, Math.toRadians(60), .0, Math.toRadians(-60), .0));&#xA;&#xA;        // start PositionHold with overlay&#xA;        JointImpedanceControlMode ctrMode = new JointImpedanceControlMode(200, 200, 200, 200, 200, 200, 200);&#xA;        PositionHold posHold = new PositionHold(ctrMode, 20, TimeUnit.SECONDS);&#xA;&#xA;        _lbr.move(posHold.addMotionOverlay(torqueOverlay));&#xA;&#xA;        // done&#xA;        friSession.close();&#xA;    }&#xA;&#xA;    /**&#xA;     * main.&#xA;     * &#xA;     * @param args&#xA;     *            args&#xA;     */&#xA;    public static void main(final String[] args)&#xA;    {&#xA;        final LBRTorqueSineOverlay app = new LBRTorqueSineOverlay();&#xA;        app.runApplication();&#xA;    }&#xA;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="10925" LastEditorUserId="9720" LastEditDate="2016-05-24T20:48:13.717" LastActivityDate="2018-12-19T17:30:30.120" Title="KUKA FRI program using JAVA" Tags="&lt;robotic-arm&gt;&lt;programming-languages&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8338" PostTypeId="2" ParentId="4986" CreationDate="2015-10-27T01:01:55.320" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Now I asked myself, how can I transform such equation and the&#xA;  corresponding virtual controls to track only the velocity??&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Actually deriving the tracking error of the velocity is much simpler than its position counterpart. In the same manner of deriving the position, you could derive the velocity. Start from the velocity and ignore the position which means you only need one Lyapunov function. &lt;strong&gt;Note&lt;/strong&gt; with the position, you need two  Lyapunov functions.&lt;/p&gt;&#xA;" OwnerUserId="2155" LastActivityDate="2015-10-27T01:01:55.320" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8340" PostTypeId="1" CreationDate="2015-10-27T19:58:24.890" Score="0" ViewCount="2474" Body="&lt;p&gt;I am trying to Calculate the thrust my 4 quadcopter motors will have.&#xA;I am not sure how to do it. Here are the parts I am Using&lt;/p&gt;&#xA;&#xA;&lt;p&gt;4S 6600mAh 14.8V Lipo Pack &lt;/p&gt;&#xA;&#xA;&lt;p&gt;15x5.5 Prop&lt;/p&gt;&#xA;&#xA;&lt;p&gt;274KV motor max output is 28A&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ESC 35 Amp&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank You&lt;/p&gt;&#xA;" OwnerUserId="10936" LastActivityDate="2015-10-27T21:09:24.660" Title="Trying to calculate the Thrust of my quadcopter motors" Tags="&lt;quadcopter&gt;" AnswerCount="2" CommentCount="1" ClosedDate="2015-10-28T18:55:28.907" ContentLicense="CC BY-SA 3.0" />
  <row Id="8341" PostTypeId="2" ParentId="8340" CreationDate="2015-10-27T20:17:20.327" Score="4" Body="&lt;p&gt;Thrust is a force. You probably have a device in your house to measure force: a scale, so why not determine the thrust empirically?&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Build a little mount to place the prop on a scale securely.&lt;/li&gt;&#xA;&lt;li&gt;Tare the scale&lt;/li&gt;&#xA;&lt;li&gt;start the motor, the reading of the scale will tell you how much thrust the prop produces&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="9860" LastActivityDate="2015-10-27T20:17:20.327" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8342" PostTypeId="2" ParentId="8340" CreationDate="2015-10-27T21:09:24.660" Score="3" Body="&lt;p&gt;Your motors do not develop the thrust, they spin rotors which develop thrust. Practically speaking, it is probably better to create an empirical model (or look-up table) based on measurements of the thrust versus motor voltage -- see Bending Unit 22's answer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, if you really want to predict the thrust, you'll need a model of your rotor. Then you can use &lt;a href=&quot;https://en.wikipedia.org/wiki/Blade_element_momentum_theory&quot; rel=&quot;nofollow&quot;&gt;blade element momentum theory (BEMT)&lt;/a&gt; to estimate the thrust based on the rotor properties -- chord distribution, twist distribution, airfoil lift and drag profiles, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can also reduce the model to a simple equation like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$T = \frac{1}{4 \pi^2} K_T \rho D^4 \omega^2$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where $T$ is the thrust, $\rho$ is the air density, $D$ is the diameter of your rotor, $\omega$ is the rotor angular speed, and $K_T$ is the thrust coefficient defined as a function of the &lt;em&gt;advance ratio&lt;/em&gt;, $\zeta$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$K_T = C_{T1} \zeta + C_{T2}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\zeta = \frac{2 \pi \left( v - v_{\infty} \right)}{\omega D}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The coefficients $C_{T1}$ and $C_{T2}$ are specific to the rotor blade, and $\zeta$ is a function of the relative vehicle speed &lt;em&gt;along the thrust direction&lt;/em&gt; with respect to the surrounding air ($v - v_{\infty}$).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that this simplified model is typically more applicable to underwater propellers, but might work for your quadrotor as well. However, BEMT is the usual approach for modeling rotorcraft thrust.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But to apply any model you will need to know the properties of your rotor, and they can be difficult to find (especially considering the properties are probably not constant along the blade). This is why an empirical method is likely your best option to avoid unnecessary work.&lt;/p&gt;&#xA;" OwnerUserId="10836" LastActivityDate="2015-10-27T21:09:24.660" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8343" PostTypeId="1" CreationDate="2015-10-27T23:16:18.750" Score="1" ViewCount="87" Body="&lt;p&gt;When I send several commands in a row some don't get executed. For example I have a script which starts the roomba driving in a circle and plays the john cena theme song through its speakers but sometimes it will only play the music and not drive. I have noticed that in all the guides there are pauses after every command. Is there any documentation which describes when pauses are needed?&lt;/p&gt;&#xA;" OwnerUserId="10937" LastActivityDate="2015-10-27T23:50:32.250" Title="How much of a pause should there be between messages? (IRobot Create-2)" Tags="&lt;irobot-create&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8344" PostTypeId="2" ParentId="8343" CreationDate="2015-10-27T23:50:32.250" Score="1" Body="&lt;p&gt;The pause between commands depends on how much time you need to wait for your particular commands to execute. For your example, you'll need to wait however much time it takes to drive in a circle before playing your theme song, then after that wait however long it takes to play the song before moving on to the next command. It might be better to take care of the pauses by using some kind of feedback about what the robot is doing instead of pre-programmed pause times. For example, use a loop to keep checking if the wheels are still turning or if the speaker is still playing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The bottom line is that your code is being executed line-by-line with no attention being paid to whether the previous command has finished executing, so just remember to account for that when you design the program.&lt;/p&gt;&#xA;" OwnerUserId="10836" LastActivityDate="2015-10-27T23:50:32.250" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8347" PostTypeId="2" ParentId="8302" CreationDate="2015-10-28T06:44:23.790" Score="2" Body="&lt;p&gt;Just an extract from my answer to a similar question: &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Path planning is the process you use to construct a path from a&#xA;  starting point to an end point given a full, partial or dynamic map.&#xA;  Motion planning is the process by which you define the set of actions&#xA;  you need to execute to follow the path you planned.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I can also add that you can perform navigation with only motion planning, but this requires planning in infinite continuous multidimensional space that has to take into consideration the motion model of the robot (skid-steering, differential, nonholonomic ...) and variation in speed and acceleration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The most common method in robotics is to solve the navigation problem using path planning (pure geometric planning from A to B), then apply motion planning on top to assess the feasibility of the path. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's very unlikely that robots follow an exact motion plan due to the uncertainty in actuation (slippage, velocity control errors accumulate, position errors accumulate ...). This is usually solved by an online high-level planner that monitors the progress along the way and adjusts the motion commands accordingly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The details are much more complex, but I tried to summarise it in a simple way. Hope this helps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ref to my old answer: &lt;a href=&quot;https://stackoverflow.com/a/19749176&quot;&gt;https://stackoverflow.com/a/19749176&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="642" LastEditorUserId="-1" LastEditDate="2017-05-23T12:37:11.430" LastActivityDate="2015-10-28T06:44:23.790" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8348" PostTypeId="1" CreationDate="2015-10-28T08:34:55.107" Score="0" ViewCount="433" Body="&lt;p&gt;I have a STM32F072RB Nucleo Board which has a 64Pin Microcontroller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For my application I chose the sTM32F103RG which has a bigger RAM size and Flash size too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can i Remove an F072R from a Nucleo board put a F103R on top of it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am testing my code with a F103C, but the flash and ram size is not meeting my requirement. I have a F072R Nucleo Board lying around so for a quick developmental test could I swap it for the 103R ? The R series is Pin Compatible!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyone Has done microcontroller swapping before? &lt;/p&gt;&#xA;" OwnerUserId="7049" LastEditorUserId="7049" LastEditDate="2015-10-28T18:30:33.690" LastActivityDate="2015-10-28T18:30:33.690" Title="Changing STM32 Nucleo Board's Microcontroller" Tags="&lt;microcontroller&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8349" PostTypeId="2" ParentId="8348" CreationDate="2015-10-28T09:34:33.123" Score="1" Body="&lt;p&gt;From my experience I would not recommend it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you look into the datasheets:&lt;br&gt;&#xA;&lt;a href=&quot;http://www.st.com/st-web-ui/static/active/en/resource/technical/document/datasheet/DM00090510.pdf&quot; rel=&quot;nofollow&quot;&gt;STM32F0&lt;/a&gt; @ Page 33 &lt;br&gt;&#xA;&lt;a href=&quot;http://www.st.com/st-web-ui/static/active/en/resource/technical/document/datasheet/CD00253742.pdf&quot; rel=&quot;nofollow&quot;&gt;STM32F1&lt;/a&gt; @ Page 28 &lt;br&gt;&#xA;They look quite Pin compatible, but you change not from one chip to a similar one, you change the complete architecture. From a Cortex M0 to a Cortex M3. There are huge differences internally. Including even the Frequency of the CPU, register arangement (I do not know how the mBed chip will like this). The instruction set is extended by the factor of ~3 .&lt;br&gt;&#xA;If I may recommend something change the nucleo board. Maybe a F401RE which uses a Cortex-M4 and is listed as a highperformance module or a L152RE ( a M3 and low performance) both have lot more Flash and Ram then the F072RB. &lt;br&gt; If you want to stick to smaller MCU then take the F091RC, simialar to your board but doubled flash/ram.&lt;/p&gt;&#xA;" OwnerUserId="6911" LastActivityDate="2015-10-28T09:34:33.123" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="8350" PostTypeId="1" AcceptedAnswerId="8351" CreationDate="2015-10-28T11:17:06.630" Score="0" ViewCount="608" Body="&lt;p&gt;I am currently interested in SCARA arm designs and I have few, beginner questions for which I didn't find answers yet. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;1/ While comparing professional arms (made by epson, staubli...) I noticed that the actuator used for the translation on the Z axis is at the end of the arm. On &quot;hobby&quot; arms like the makerarm project on kickstarter they use a leadscrew with the actuator at the beginning of the arm.&#xA;I thought it was smarter to put the actuator handling this DoF at the begining of the arm (because of its weight) and not at the end, but I assume that these companies have more experience than the company behind the makerarm. So I'm probably wrong, but I would like to understand why :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2/ Also I would like to understand what kind of actuators are used in these arms. The flx.arm (also a kickstarter project) seems to be using stepper motors but they also say they are using closed loop control, so they added an encoder on the stepper motors right?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Wouldn't it be better to not use stepper and, for instance, use DC brushless motors or servos instead ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3/ I also saw some of these arms using belts for the 2nd Z axis rotation, what is the advantage ? it only allows to put the actuator at the begining of the arm ?&lt;/p&gt;&#xA;" OwnerUserId="9582" LastActivityDate="2020-04-02T21:07:59.143" Title="differences between SCARA arm design" Tags="&lt;robotic-arm&gt;&lt;design&gt;&lt;actuator&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8351" PostTypeId="2" ParentId="8350" CreationDate="2015-10-28T11:53:18.110" Score="1" Body="&lt;p&gt;1) Yes, you are correct that moving the actuator closer to the joint increases the arm's capabilities. The reason that some arms do not use this configuration is to keep the robot simple. Adding gears, belts, screws, etc. increases complexity and mass, adds extra friction and backlash, and leads to more wear and tear. Another benefit is that it is much easier to estimate the torque/force at the end-effector/tool if there are fewer mechanisms in-between.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) Stepper motors are popular because they have position feedback integrated into the motor. They precisely &quot;step&quot; through discrete movements and so you don't need an encoder. Using stepper motors works well for simple applications where the arm needs to follow trajectories while respecting torque limits on the joints. However, if you want to implement more sophisticated compliance and force control methods then DC motors will work much better.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3) The answer to this is the same as 1), and yes, it allows you to move the actuator closer to the joint.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A particularly interesting manipulator is the &lt;a href=&quot;http://www.barrett.com/products-arm.htm&quot; rel=&quot;nofollow&quot;&gt;Barrett WAM arm&lt;/a&gt;, which has the first 4 DOF's actuated by motors in the base and using a low-friction cable system to transmit the motion. The optional wrist connector adds another 3 DOF's that were contained in the wrist itself. It is not a SCARA configuration, but still might be of interest to you.&lt;/p&gt;&#xA;" OwnerUserId="10836" LastActivityDate="2015-10-28T11:53:18.110" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="8352" PostTypeId="2" ParentId="8348" CreationDate="2015-10-28T13:25:53.817" Score="0" Body="&lt;p&gt;So i Upgraded to a STM32F103RGT7. &#xA;STLink Recognized the device as a F10X Family!.&#xA;I am aware of the architecture change and everything. And yes they are pin compatible. I also saw on STM's website that all the Nucleo board's schematics are the same. And the F072's Board has the Same BoM. &#xA;&lt;a href=&quot;https://i.stack.imgur.com/URfhJ.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/URfhJ.jpg&quot; alt=&quot;STM32F103RGT7&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7049" LastActivityDate="2015-10-28T13:25:53.817" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8354" PostTypeId="1" CreationDate="2015-10-29T14:04:00.127" Score="3" ViewCount="1428" Body="&lt;p&gt;I'm trying to make a quadcopter with Arduino.&#xA;I already have the angles (roll pitch and yaw) thanks to an IMU. They are in degrees and filtered with a complementary filter.&#xA;I want to apply a PID algorithm for each axis but I dont know if the inputs should be angles (degrees) or angular velocities in degrees per second so as to calculate the errors with respect referencies.&#xA;Which will be the difference? Which will be the best way? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, another question about a PID code: I have seen that many people don't include time in their codes. For example, their derivative term is kd×(last error-actual error) instead kd×(last error-actual error)/looptime and something similar with the integrative term. Which is the difference?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you in advanced.&lt;/p&gt;&#xA;" OwnerUserId="10944" LastActivityDate="2016-08-08T23:55:36.107" Title="Need help for a quadcopter PID" Tags="&lt;quadcopter&gt;&lt;pid&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8355" PostTypeId="2" ParentId="8354" CreationDate="2015-10-29T15:30:31.103" Score="0" Body="&lt;p&gt;It depends on what you want to control, either position or velocity. Generally a PID for the position (angles) is implemented, but in case you would be interested in velocity control you can also find some good materials at the voice 'Velocity PID'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding the second question, if the loop time is constant, it can be incorporated in the gain, that is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$k_d$ = $k_d'/T$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So no differences, just a scaling factor.&lt;/p&gt;&#xA;" OwnerUserId="10782" LastActivityDate="2015-10-29T15:30:31.103" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8356" PostTypeId="1" CreationDate="2015-10-29T18:12:00.283" Score="0" ViewCount="839" Body="&lt;p&gt;I am using arduino and L298n motor driving IC to drive 4 12V dc motors (150rpm).&#xA;Also I am using 11.1V LiPo battery (3cell, 3300 mAh, 20C).I have connected two PWM pins of L298n to digital HIGH from arduino.Battery positive terminal is connected to the 12V input of IC.Battey negative terminal and&lt;a href=&quot;https://i.stack.imgur.com/efuZt.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/efuZt.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt; arduino ground is connected to the ground input of IC.Also a 5V input is given from arduino to IC and ground from arduino is connected to other gnd pin which is adjacent to INT3 pin.Motor1 pins from L298n are connected with two motors (connected parallely on right side of bot) and Motor2 pins are connected with other two motors (connected parallely on left side of bot).Appropriate inputs are given to INT1,INT2,INT3,INT4 to drive the bot in forward direction.&lt;strong&gt;But the bot is moving too slowly&lt;/strong&gt;.The voltage measured across motor1 pins is only 5V.I have connected the battery directly to the motors,then it is running very fast.&lt;strong&gt;How to run it fast&lt;/strong&gt;.Please help.....&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/1HtwM.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1HtwM.png&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10945" LastActivityDate="2015-10-30T10:17:55.063" Title="Very low output voltage at the output of L298n?" Tags="&lt;arduino&gt;&lt;motor&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8357" PostTypeId="1" CreationDate="2015-10-29T19:03:02.053" Score="1" ViewCount="42" Body="&lt;p&gt;I am participating in a robotics competition. I am supposed to design and build two robots. Out of these, one &lt;strong&gt;cannot have a driving actuator&lt;/strong&gt; (it can have a steering actuator though, fed by a line following circuit). The other is supposed to drive the non-driving robot through an obstacle course, &lt;em&gt;without touching it&lt;/em&gt;. This is kind of driving me crazy since at one point the separation between the two robots is 60 cm (23 inches).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ways I've considered:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Wind Energy (wont work, need huge sails)&lt;/li&gt;&#xA;&lt;li&gt;Magnetic Repulsion of some sort&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Now repulsion I've spent a lot of time studying. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My solution was to use strong permanent magnets on the non-driving robot (Neodymium,N52) and electromagnets on the driving robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, after doing a huge load of calculations came to the conclusion that not enough force can be transmitted over the distance as magnetic fields fall off too quick.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Rulebook: &lt;a href=&quot;http://ultimatist.com/video/Rulebook2016_Final_website_1_Sep_15.zip&quot; rel=&quot;nofollow&quot;&gt;http://ultimatist.com/video/Rulebook2016_Final_website_1_Sep_15.zip&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am really looking for even a pointer here. Is there a trick somewhere that I am missing?&lt;/p&gt;&#xA;" OwnerUserId="10569" LastActivityDate="2015-10-29T19:03:02.053" Title="How to drive robot without driving actuator?" Tags="&lt;line-following&gt;" AnswerCount="0" CommentCount="3" FavoriteCount="1" ClosedDate="2015-10-31T03:51:46.810" ContentLicense="CC BY-SA 3.0" />
  <row Id="8358" PostTypeId="2" ParentId="8356" CreationDate="2015-10-29T19:51:41.113" Score="1" Body="&lt;p&gt;Try to digitalwrite a high on your pwm pins, i.e.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;digitalWrite(pwmpin1, HIGH);&#xA;&#xA;digitalWrite(pwmpin2, HIGH);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Otherwise, run your motors from an external power supply as they may be requiring a lot of current to run. &#xA;Hope this helps :)&lt;/p&gt;&#xA;" OwnerUserId="10896" LastActivityDate="2015-10-29T19:51:41.113" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8359" PostTypeId="2" ParentId="8356" CreationDate="2015-10-30T09:45:49.883" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;&quot;connected parallely on right side of bot&quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Watch out for this - running two motors in parallel from one motor output doesn't always work as you would expect.  If you try the circuit with just one motor connected for each side of the vehicle, does it work better?&lt;/p&gt;&#xA;" OwnerUserId="9578" LastActivityDate="2015-10-30T09:45:49.883" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8361" PostTypeId="1" AcceptedAnswerId="8362" CreationDate="2015-10-30T15:39:09.417" Score="0" ViewCount="646" Body="&lt;p&gt;I have a 6 DOF arm whose velocities I'm controlling as a function of force applied to the end effector. The software for the robot allows me to input either the desired end effector velocity or the desired joint angular velocities, which I know can be found using the inverse Jacobian.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any benefits of using one scheme over the other? Would, for example, one help avoid singularities better? Does one lead to more accurate control than the other does?  &lt;/p&gt;&#xA;" OwnerUserId="10953" LastEditorUserId="10953" LastEditDate="2015-10-31T16:36:07.520" LastActivityDate="2015-10-31T16:36:07.520" Title="6DOF robot arm: Velocity of end effector vs. joint velocities" Tags="&lt;robotic-arm&gt;&lt;jacobian&gt;&lt;force-sensor&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8362" PostTypeId="2" ParentId="8361" CreationDate="2015-10-30T16:03:33.453" Score="1" Body="&lt;p&gt;In the end, end effector speed is going to be determined by joint speed + kinematics, so I would choose whichever format you want that makes life easier on you. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding singularities, there's no singularity caused by joint velocities, only by joint angular positions. So, if you're trying to avoid singularities but are only controlling based on velocity, then you'll probably need some separate controller or other method to &quot;watch&quot; the trajectory you're on to alter the specific combinations of joint velocities to avoid the singularity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding accuracy of control, again your end effector is located based on the combination of joint angles, so ultimately your joint angle positioning AND end effector positioning are both determined by your ability to encode, read, and control the joint angles. Again, I would go with whichever method is more convenient for you. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-10-30T16:03:33.453" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8363" PostTypeId="1" CreationDate="2015-10-30T19:42:11.633" Score="0" ViewCount="121" Body="&lt;p&gt;This might be a dumb question. I have started to play with this robot with raspberry pi two days ago. I did some simple stuff, like- move around and sensor reading etc. But since yesterday night, It seems like I cannot send any command. The built in clean, dock functions are working perfectly but I cannot do anything using the same python code that I already used before. Its behaving like nothing is going through the Rx.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can you suggest what might go wrong? Thanks&lt;/p&gt;&#xA;" OwnerUserId="10958" LastActivityDate="2015-11-02T17:03:28.383" Title="Cannot command irobot create 2" Tags="&lt;irobot-create&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8365" PostTypeId="1" AcceptedAnswerId="8366" CreationDate="2015-10-31T06:46:08.263" Score="4" ViewCount="91" Body="&lt;p&gt;Im working on a robot that needs image processing to analyze data recieves from cameras. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As i searched for ARM and AVR libraries i found that there is no dip library for these micros and their limited ram is hard for image data process. i want to know is there any hardware that connects to a win or android or... devices and make it possible to that device connect to actuators and sensors?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;thank you or helping.&lt;/p&gt;&#xA;" OwnerUserId="10960" LastActivityDate="2015-10-31T16:24:16.817" Title="using a device with os instead of microcontrollers" Tags="&lt;microcontroller&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8366" PostTypeId="2" ParentId="8365" CreationDate="2015-10-31T16:24:16.817" Score="3" Body="&lt;p&gt;First you are right, Imageprocessing is nothing for MCUs. Mostly because of their limited hardware ressources. But it is simply not the task of those thingys. So the reason you use MCU is the control you have over the system. You can use hunderds of different interrupts, you can manipulate all timers, you have DMAs, tons of different peripherals and response times within few microseconds. The complexity and controlability of those chips can be seen by looking at the documentation of those chips. An actual one, eg out of the STM32F7-Series has 3000 pages documentation of software and registers. &lt;br&gt;&#xA;If you look at image processing, what you need there? Lot of computation power!!! You need no timers, no DMA, no responses within microseconds.&#xA;&lt;br&gt; So why use MCU for imageprocessing? It's just not there business.&#xA;For Imageprocessing you need moderen processors with huge computational power. &lt;br&gt;&#xA;The drawback of modern processors you loose all the nice stuff you like about MCUs. So you cannot control something with high frequencies, you have no access to timer registers,not a lot of peripherial things.&#xA;&lt;br&gt; Given this background and the task to solve a problem with sensors, actors and some conputer vision you can solve this taks with following approaches:&lt;br&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Use dedicated I/O Hardware for normal Computer&lt;/strong&gt; &lt;br&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let your computer vision and all your control algorithms on your computer and use additional hardware to switch IOs use some buses or whatever you have to do. An example hardware would be phidgets, which work with USB; or a PCI card which is directly connected to your computer's bus system.&#xA;This provides the advantage that you only have one system, but your system's realtime capability is not given at all. The OS (Windows or Android) have no realtime capabilities at all. with some tweeks and experience you reach a jitter of 0.5ms. This is basically your idea, you mentioned in the question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Programm MCUs for vision&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Well use MCUs for things they are not made for. If you do not need lot of processing on the images this can be a viable option. Depends on your task and on the setup. Most of the algorithms are available and can be implemented with some time investment. The problem is that your are missing the computational power and the memory. So you are limited in computations per timeframe.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Apply a distributed controller concept&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Take the best of both worlds. Let the MCU and the computer with decent CPU,Memory and OS what they were designed for. The only problem is communication between those modules. But there are solutions, from serial (USB) over TCP/IP(Ethernet) or even SPI. It's just you need to figure out, what are the requirements and what fits them best.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Use a system which combines the best out of each world&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are not a lot modules which are made for such applications but in the time of early development for the IoT there are some. In my personal opinion the best module is the Beaglebone Black. It has some high performance ARM core out of there cortex A series and a DSP coprocessor for the high responsiveness and low jitter. On this DSP you do not have all features you can access on a normal MCU but it maybe sufficent.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As conclusion the distributed controller is the most sophisticated and can be adjusted to meet almost any need. The other methods depend a lot on the requirements. They might be enought or maybe not. For some &quot;I want to try something quick and dirty and i do not care about performance&quot; use some phidgets, they are relatively cheap and are pretty easy to make them work. &lt;/p&gt;&#xA;" OwnerUserId="6911" LastActivityDate="2015-10-31T16:24:16.817" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8368" PostTypeId="1" AcceptedAnswerId="8370" CreationDate="2015-11-02T02:34:14.903" Score="0" ViewCount="897" Body="&lt;p&gt;Given three sets of joint angles in which the end effector is in the same position, is it possible to find the DH parameters?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the robot has 2 DOF in shoulder, 2 DOF in elbow, and 1 dof in wrist, with DH parameters as upper arm length, elbow offset in 1 axis, lower arm length, can this be solved, if so how?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried iterating through DH parameters to minimize position of end effector with forward kinematics, but this doesnt seem to work as DH parameters of 0 for everything makes 0 minimal distance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Reason for this; given a physical robot, no DH parameters are known, and measuring by hand is not accurate.&lt;/p&gt;&#xA;" OwnerUserId="3776" LastActivityDate="2015-11-02T10:08:21.173" Title="Solving for DH Parameters" Tags="&lt;dh-parameters&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8369" PostTypeId="1" CreationDate="2015-11-02T02:43:19.223" Score="1" ViewCount="377" Body="&lt;p&gt;I have Arduino talk with Create 2 via serial interface. But before sending commands to the robot, I have to power it on by manually pushing the power button on the robot. How to make the robot turned on via that mini din 7 port, instead of pushing that power button? &#xA;I notice when plugin iRobot serial-2-USB cable into that port on the robot, the robot is immediately turned on, ready for received the first command (command 128), so apparently there is way to turn on the robot via that port.&lt;/p&gt;&#xA;" OwnerUserId="10972" LastActivityDate="2015-11-02T02:43:19.223" Title="Power on iRobot Create 2 via serial port" Tags="&lt;irobot-create&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8370" PostTypeId="2" ParentId="8368" CreationDate="2015-11-02T05:06:39.460" Score="1" Body="&lt;p&gt;For a 5-DOF manipulator you will have 15 DH parameters. Three sets of joint angles will yield 9 equations, so that will not be enough to determine the parameters. And this is assuming you know the end-effector position, whereas if you are simply trying to use the constraint that all three positions are equal then you will have even fewer equations to work with.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should be able to estimate the $\alpha$ parameters simply by inspecting the robot -- hopefully they are all 0 deg or $\pm$90 deg.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are measuring the end-effector position then you can simply set up as many test points as are necessary to get all of the parameters. This can be done strategically to simplify the process. Start with the outermost link, rotate that joint only, and look at how the end-effector position changes, then you can determine that link's parameters. Then move to the next link and repeat.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively, you can use the forward kinematics in a differential form as would be used to determine end-effector velocity, $\dot{p}$, in terms of joint angle velocities, $\dot{\theta}$, based on the Jacobian, $J$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\dot{p} = J \dot{\theta}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider this relationship in terms of differences in end-effector position related to differences in joint angles:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\Delta p = J \Delta \theta$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The above relationship can then be used to solve for the DH parameters given a series of measured $\Delta p$ and $\Delta \theta$ values using a non-linear least-squares solution.&lt;/p&gt;&#xA;" OwnerUserId="10836" LastEditorUserId="10836" LastEditDate="2015-11-02T10:08:21.173" LastActivityDate="2015-11-02T10:08:21.173" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="8371" PostTypeId="1" CreationDate="2015-11-02T09:31:13.460" Score="1" ViewCount="28" Body="&lt;p&gt;I have 28  pmac motors (3-ph, 230 volt of 0.5 kw, 1.05kw an 1.21kw) in motor control center. Please suggest a time staggered switching scheme in order to avoid tripping due to voltage sag, swell , flicker etc&lt;/p&gt;&#xA;" OwnerUserId="10974" LastEditorUserId="10974" LastEditDate="2015-11-13T08:54:58.187" LastActivityDate="2015-11-13T08:54:58.187" Title="Switching scheme for vector controlled pmac drive" Tags="&lt;power&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8372" PostTypeId="1" CreationDate="2015-11-02T09:31:28.240" Score="0" ViewCount="1030" Body="&lt;p&gt;Can anybody help figure out HD parameters for the case where two links with a revolute joint are in the same plane, thus that the variable angle is 0, but the twist is not 0. This is a simple drawing. I think that x-axis that is perpendicular to both z-axis, points away and goes through the intercection of z-axis. The link length is 0, the twist is a and the offset is d. Whould it be correct?&#xA;Thanks.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/8QJXS.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8QJXS.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/igWtY.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/igWtY.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10975" LastEditorUserId="10975" LastEditDate="2015-11-02T11:32:40.097" LastActivityDate="2015-12-05T19:41:15.763" Title="Denavit Hartenberg parameters" Tags="&lt;dh-parameters&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="8373" PostTypeId="2" ParentId="8363" CreationDate="2015-11-02T17:03:28.383" Score="2" Body="&lt;p&gt;It's possible that you may have switched the baud rate at some point. Try resetting the robot (press dock and spot at the same time for ~10 seconds, or take the battery out and put it back in).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This will cause the baud rate to go back to the default 115,200&lt;/p&gt;&#xA;" OwnerUserId="9743" LastActivityDate="2015-11-02T17:03:28.383" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8375" PostTypeId="1" CreationDate="2015-11-02T18:37:46.247" Score="0" ViewCount="1681" Body="&lt;p&gt;as i dont know that what kind of radiation animals emit. as humans emit IR radiations so PIR sensors help to identify humans. pls suggest me if someone have knowledge about sensors which detects animals.&lt;/p&gt;&#xA;" OwnerUserId="10979" LastActivityDate="2015-11-02T23:43:37.100" Title="can we detects animals through PIR(passive infrared sensors)" Tags="&lt;arduino&gt;&lt;raspberry-pi&gt;&lt;first-robotics&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8376" PostTypeId="1" CreationDate="2015-11-02T19:12:18.330" Score="1" ViewCount="221" Body="&lt;p&gt;I have a quadcopter controlled through KK2.1.5 flight controller. I have been flying with it without problems, but now i am facing a problem. When i start and arm the kk2.1.5, by giving throttle it starts turning towards some direction with acceleration. I double checked the motor pins locations and all other things, they are correct. When i took a look to the gyro bubble of kk2.1.5 it wasnt at mid of the crosshair. I turned the quad off and then on. I check bubble again it was at centre. now again when i gave it throttle it started turning towards some direction. I checked the again, and it wasnt on centre this time too. So at the armed state the gyro bubble moves away from centre by giving throttle. due to which quad overcorrects itself. Now i have understood that the gyro is off centre due to vibration  of the FC. What should i do to antivibrate it. What material should i keep in between so that vibrations are almost zero.&lt;/p&gt;&#xA;" OwnerUserId="10580" LastEditorUserId="10580" LastEditDate="2015-11-03T08:56:27.563" LastActivityDate="2018-12-21T10:46:17.513" Title="kk2.1.5 gyro bubble is not at centre" Tags="&lt;quadcopter&gt;" AnswerCount="0" CommentCount="4" ClosedDate="2018-12-21T13:15:39.303" ContentLicense="CC BY-SA 3.0" />
  <row Id="8377" PostTypeId="2" ParentId="8375" CreationDate="2015-11-02T20:50:07.480" Score="2" Body="&lt;p&gt;Warm blooded mammals and birds should be similar to humans as far as these sensors are concerned, amphibians and reptiles probably not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are some thermal signatures from sensors that are more sophisticated, but in any case should give you an idea of the difference in body temperature from the ambient background temperature, of some parakeets vs a lizard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/EIRBl.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/EIRBl.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/pvTs4.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/pvTs4.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="1075" LastEditorUserId="1075" LastEditDate="2015-11-02T23:43:37.100" LastActivityDate="2015-11-02T23:43:37.100" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8378" PostTypeId="1" CreationDate="2015-11-02T23:48:54.510" Score="1" ViewCount="79" Body="&lt;p&gt;In most papers about IBVS the camera velocity is computed and then used as a pseudo-input for the manipulator. (e.g. &lt;a href=&quot;http://www.irisa.fr/lagadic/pdf/2006_ieee_ram_chaumette.pdf&quot; rel=&quot;nofollow&quot;&gt;this one&lt;/a&gt;) Is there any work in which the dynamic Lagrange model $H(q) \ddot q +C(q,\dot q)\dot q+g(q)=\tau$ of the manipulator is taken into consideration in order to compute the torque required to move the joints accordingly?&lt;/p&gt;&#xA;" OwnerUserId="7107" LastEditorUserId="7107" LastEditDate="2015-11-12T07:01:10.880" LastActivityDate="2015-11-12T07:01:10.880" Title="Torque control in eye-in-hand visual servoing" Tags="&lt;dynamics&gt;&lt;torque&gt;&lt;visual-servoing&gt;" AnswerCount="0" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="8380" PostTypeId="2" ParentId="8372" CreationDate="2015-11-03T08:38:32.243" Score="1" Body="&lt;p&gt;You can use dummy transformations when the DH parameterization cannot get you from one axis to the other. Think of it as two succesive DH transformations where the first one does not have a moving joint. It is just there to get to the other joint the the second DH transformation&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;to complete the answer with reference:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://petercorke.com/doc/rtb_dh.pdf&quot; rel=&quot;nofollow&quot;&gt;http://petercorke.com/doc/rtb_dh.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your previous Z axis is not intersecting the next X axis and/or they are not perpendicular, you will not be able to use one DH transformation matrix from one coordiante system to the other&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="184" LastEditDate="2015-12-05T19:41:15.763" LastActivityDate="2015-12-05T19:41:15.763" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="8381" PostTypeId="2" ParentId="1072" CreationDate="2015-11-03T08:45:20.003" Score="0" Body="&lt;p&gt;Feso has one, you can use it for inspiration&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.festo.com/net/SupportPortal/Files/42084/CyberKite_en.pdf&quot; rel=&quot;nofollow&quot;&gt;https://www.festo.com/net/SupportPortal/Files/42084/CyberKite_en.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2015-11-03T08:45:20.003" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8382" PostTypeId="1" CreationDate="2015-11-03T18:25:08.507" Score="0" ViewCount="4263" Body="&lt;p&gt;I tried this code and it worked:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void loop()&#xA;{&#xA;    int y = 104;&#xA;    int x2 = vertical2.currentPosition();&#xA;    int z2 = y-x2;&#xA;    int x1 = horizontal2.currentPosition();&#xA;    int z1 = y-x1;&#xA;&#xA;    horizontal2.moveTo(z1);&#xA;    horizontal2.run();&#xA;&#xA;    vertical2.moveTo(z2);&#xA;    vertical2.run();&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;However, the problem is that when the above code was placed inside a loop such as &lt;code&gt;if loop&lt;/code&gt;, it was not working. Can anyone help me solve this problem? I am using accelStepper library for the code above.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void loop()&#xA;{&#xA;    int dummy=1;&#xA;    if(dummy==1)&#xA;    {&#xA;        int y = 104;&#xA;        int x2 = vertical2.currentPosition();&#xA;        int z2 = y-x2;&#xA;        int x1 = horizontal2.currentPosition();&#xA;        int z1 = y-x1;&#xA;&#xA;        horizontal2.moveTo(z1);&#xA;        horizontal2.run();&#xA;&#xA;        vertical2.moveTo(z2);&#xA;        vertical2.run();&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="10986" LastEditorUserId="24900" LastEditDate="2020-03-10T23:48:23.467" LastActivityDate="2020-03-10T23:48:23.467" Title="How to make a stepper motor rotate and come to a position of certain degrees (say for 90 degrees) from any initial position?" Tags="&lt;arduino&gt;&lt;stepper-motor&gt;" AnswerCount="3" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="8383" PostTypeId="2" ParentId="6334" CreationDate="2015-11-03T21:49:19.720" Score="3" Body="&lt;p&gt;Davison's paper introducing the method is easy enough to understand:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.doc.ic.ac.uk/~ajd/Publications/civera_etal_tro2008.pdf&quot; rel=&quot;nofollow&quot;&gt;Inverse Depth Parametrization for Monocular SLAM&lt;/a&gt; by Javier Civera, Andrew J. Davison, and J. M. Martınez Montiel &lt;a href=&quot;http://dx.doi.org/10.1109/TRO.2008.2003276&quot; rel=&quot;nofollow&quot;&gt;DOI: 10.1109/TRO.2008.2003276&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10987" LastEditorUserId="37" LastEditDate="2015-11-04T10:56:54.907" LastActivityDate="2015-11-04T10:56:54.907" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8385" PostTypeId="2" ParentId="4610" CreationDate="2015-11-04T09:00:02.323" Score="0" Body="&lt;p&gt;You can find a lot of material on the DH convention. If you are only interested in the youBot, then check thes out:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.kuka-robotics.com/NR/rdonlyres/5E66A5D6-F30F-46BE-B9CF-6820C55FCE91/0/Armtutorial2.pdf&quot; rel=&quot;nofollow&quot;&gt;http://www.kuka-robotics.com/NR/rdonlyres/5E66A5D6-F30F-46BE-B9CF-6820C55FCE91/0/Armtutorial2.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sorry if this is the same what you alredy have, but the link you specified is broken...&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2015-11-04T09:00:02.323" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8387" PostTypeId="1" CreationDate="2015-11-04T12:45:45.643" Score="1" ViewCount="276" Body="&lt;p&gt;I'm trying to implement direct-multiple shooting method to my problem.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Objective function: tf&#xA;constraints       : q&amp;lt;q_max&#xA;                    v&amp;lt;v_max (v=dq/dt)&#xA;                    a&amp;lt;a_max&#xA;                    tau&amp;lt;tau_max (tau=M(q)a+B(q,v)+G(q))&#xA;                    C(q)=r_0-|P-P_0|  (obstacle avoidance)&#xA;&#xA;Initial condition q(0)=q_0 (q_0 is given) &#xA;                  q(t_f)=q_f (q_f is given) and &#xA;                  v(0)= 0&#xA;                  v(t_f)=0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;As I understand from the theory, I have to divide the variables as state variables and control variables.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;State variables are: q and v &#xA;Control variable is: tau&#xA;In each time interval I'll generate cubic splines which are q(t)=a_0+a_1*t+a_2*t^2+a_3*t^3&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Could you help me how I will implement it? I don't understand what is the ODE here and how I should construct the algorithm?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any example about it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;edit to make the equations clear I'll rewrite them here again:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;based on the link&lt;/p&gt;&#xA;&#xA;&lt;p&gt;state variables:&#xA;&lt;code&gt;x1(t) = (q1(t) , ··· ,qn(t))^T&lt;/code&gt; and &lt;code&gt;x2(t) = (q˙1(t) , ··· ,q˙n(t))^T&lt;/code&gt;.  and derivatives of the state variables are equal to &lt;code&gt;x˙(t) = f(x(t) ,u(t))&lt;/code&gt; where f is&#xA;&lt;code&gt;f(x(t), u(t)) = ((q˙1(t), . . . , q˙5(t))^T;&#xA;                  M(x(t))−1· (u(t) − N(x(t)))&lt;/code&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know how to insert cubic polynomials in that equation system and how to solve ODE Will it be like &lt;code&gt;[T,X]=ode45('f', [0 t_f], [q_0 q_f])&lt;/code&gt; &lt;/p&gt;&#xA;" OwnerUserId="10998" LastEditorUserId="10998" LastEditDate="2015-11-05T15:29:00.510" LastActivityDate="2017-03-22T17:58:50.513" Title="Optimal trajectory for manipulators using optimal control" Tags="&lt;manipulator&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8388" PostTypeId="2" ParentId="1579" CreationDate="2015-11-04T22:38:42.913" Score="3" Body="&lt;p&gt;I realize this question is 2 years old, but I have direct recent experience with this.  The way I did this is with 6 rotated cube positions with 1000 points at each position, so a total of 6000 samples.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm assuming Matlab/numpy nomenclature, where NxM means N rows and M columns.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I assume an equation like Ax = B where B is the measured values matrix (6000x4, with right column all ones) and A is the &quot;real&quot; values matrix (also 6000x4, which has six 1000-value sections, with 1000 copies each of [1,0,0,1], [-1,0,0,1],[0,1,0,1], [0,-1,0,1], [0,0,1,1], [0,0,-1,1], corresponding to Xup, Xdown, Yup, Ydown, Zup, Zdown.  x is a 4x4 matrix where the upper left 3x3 components are the gain and cross-axis sensitivities, and the right 3x1 components are the offsets; the bottom row is all zeros.  By using a 4x4 matrix we can do everything in linear math and avoid the separate offset computation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I then let numpy compute x as the least squares division of B/A.  I think in Matlab it would be B\A.  I'm not sure how least squares works in this case, but the result is a 4x4 matrix that minimizes the errors and averages out all the samples.  Conceivably you could also do this with only two positions, where each axis is diagonal to gravity, then upside down from there, and you adjust the expected &quot;ideal&quot; values accordingly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The result is a 4x4 matrix that fixes scale, offset, and cross axis errors, which also means it corrects for any rotation error you have between the sensor and the reference edge hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the python code, assuming numpy:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;def least_squares_fit(A, B):&#xA;    &quot;&quot;&quot;Does least squares fit to find x of Ax = B.  Returns best guess of original distortion&#xA;     matrix x and its inverse.  A is ideal values.  B is distorted values.  Use inverse to&#xA;     correct real data back to ideal data.&quot;&quot;&quot;&#xA;&#xA;    # Need to extend A and B&#xA;    A = np.hstack((A, np.ones(len(A)).reshape(-1, 1)))&#xA;    B = np.hstack((B, np.ones(len(B)).reshape(-1, 1)))&#xA;&#xA;    X, res, rank, s = np.linalg.lstsq(A, B)&#xA;    X = X.T # Not sure why we need T&#xA;    Xi = np.linalg.inv(X)&#xA;    return (np.asmatrix(X), np.asmatrix(Xi), np.sum(res))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="10681" LastEditorUserId="10681" LastEditDate="2017-10-01T00:31:17.173" LastActivityDate="2017-10-01T00:31:17.173" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="8389" PostTypeId="1" AcceptedAnswerId="8390" CreationDate="2015-11-05T04:24:16.707" Score="0" ViewCount="1472" Body="&lt;p&gt;I am currently trying to implement an Inverse Kinematics solver for Baxter's arm using only 3 pitch DOF (that is why the yGoal value is redundant, that is the axis of revolution). I for the most part copied the slide pseudocode at page 26 of &lt;a href=&quot;http://graphics.cs.cmu.edu/nsp/course/15-464/Fall09/handouts/IK.pdf&quot; rel=&quot;nofollow&quot;&gt;http://graphics.cs.cmu.edu/nsp/course/15-464/Fall09/handouts/IK.pdf&lt;/a&gt; .&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;def sendArm(xGoal, yGoal, zGoal):&#xA;    invJacob = np.matrix([[3.615, 0, 14.0029], [-2.9082, 0, -16.32], [-3.4001, 0, -17.34]])&#xA;    ycurrent = 0&#xA;    while xcurrent != xGoal:&#xA;        theta1 = left.joint_angle(lj[1])&#xA;        theta2 = left.joint_angle(lj[3])&#xA;        theta3 = left.joint_angle(lj[5])&#xA;        xcurrent, zcurrent = forwardKinematics(theta1, theta2, theta3)&#xA;        xIncrement = xGoal - xcurrent&#xA;        zIncrement = zGoal - zCurrent&#xA;        increMatrix = np.matrix([[xIncrement], [0], [zIncrement]])&#xA;        change = np.dot(invJacob, increMatrix)&#xA;        left.set_joint_positions({lj[1]: currentPosition + change.index(0)/10}) #First pitch joint&#xA;        left.set_joint_positions({lj[3]: currentPosition + change.index(1)/10}) #Second pitch&#xA;        left.set_joint_positions({lj[5]: currentPosition + change.index(2)/10}) #Third Pitch joint&#xA;&#xA;&#xA;def forwardKinematics(theta1, theta2, theta3):&#xA;    xcurrent = 370.8 * sine(theta1) + 374 * sine(theta1+theta2) + 229 * sine(theta1+theta2+theta3)&#xA;    zcurrent = 370.8 * cos(theta1) + 374 * cos(theta1+theta2) + 229 * cos(theta1+theta2+theta3)         &#xA;    return xcurrent, zcurrent&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Here is my logic in writing this:&#xA;I first calculated the Jacobian 3x3 matrix by taking the derivative of each equation seen in the forwardKinematics method, arriving at:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[370cos(theta1) + 374cos(theta1+theta2) .....   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;0                                               0                      0&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-370sin(theta1)-374sin(theta1+theta2)-......                            ]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to arrive at numerical values, I inputted a delta theta change for theta1,2 and 3 of 0.1 radians. I arrived at a Jacobian of numbers:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[0.954  0.586   .219&lt;/p&gt;&#xA;&#xA;&lt;p&gt;0.0000          0.000         0.0000&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-.178   -.142   -0.0678]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I then input this matrix into a pseudoinverse solver, and came up with the values you see in the invJacob matrix in the code I posted. I then multiplied this by the difference between the goal and where the end effector is currently at. I then applied a tenth of this value into each of the joints, to make small steps toward the goal. However, this just goes into an infinite loop and my numbers are way off what they should be. Where did I go wrong? Is a complete rewrite of this implementation necessary? Thank you for all your help.&lt;/p&gt;&#xA;" OwnerUserId="11004" LastActivityDate="2015-11-05T09:06:48.647" Title="3 DOF Inverse Kinematics Implementation: What's wrong with my code?" Tags="&lt;inverse-kinematics&gt;&lt;python&gt;&lt;joint&gt;&lt;jacobian&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8390" PostTypeId="2" ParentId="8389" CreationDate="2015-11-05T09:00:09.007" Score="1" Body="&lt;p&gt;The (inverse) Jacobi Matrix is pose dependent. It is not constant, it is dependent on pose (joint angles or TCP coords, based on formulation) and so it characterizes a pose not a robot. By implementing it as a constant you basicly assume that the same joint velocity will always cause the same TCP velocity. In reality it is clear that joint positions play an important role in how joint velocities are transformed to the TCP. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I recommend you generate the (inverse) Jacobi matrix in a symbolic form, similarly as your forward kinematics, dependend on variables (joint angles of TCP cooridnates) and write a function that calculates the value of the matrix for each current pose. &#xA;Then recalculate the matrix in every iteration and it should be fine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Furthermore, in this form, if you have a 3x3 matrix, you can easily calculate its inverse, you do not need a pseudoinverse. Later, if you have 7 DOFs you might...&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2015-11-05T09:06:48.647" LastActivityDate="2015-11-05T09:06:48.647" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="8391" PostTypeId="1" CreationDate="2015-11-05T14:17:28.607" Score="0" ViewCount="557" Body="&lt;p&gt;I am having a thesis right now regarding a robot. My research requires the robot to be attached to linear guide rail. A robot has to detect human in a very close range (of about 2 meters distance). What easiest and efficient method or components shall I use?&lt;/p&gt;&#xA;" OwnerUserId="11007" LastActivityDate="2015-11-05T18:05:14.020" Title="What is the easiest and efficient way to detect human in close range distance and make the robot follow it?" Tags="&lt;sensors&gt;&lt;wheeled-robot&gt;&lt;industrial-robot&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2015-11-09T13:57:20.910" ContentLicense="CC BY-SA 3.0" />
  <row Id="8393" PostTypeId="2" ParentId="8391" CreationDate="2015-11-05T15:00:47.047" Score="3" Body="&lt;p&gt;Following a human can be relatively easy, but it depends on your requirements and your sensors on how easy this is. If you use &lt;a href=&quot;http://www.ros.org&quot; rel=&quot;nofollow noreferrer&quot;&gt;ROS&lt;/a&gt; there are some available packages:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://wiki.ros.org/people_tracker&quot; rel=&quot;nofollow noreferrer&quot;&gt;people_tracker&lt;/a&gt; which uses a Kinect.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.ros.org/news/2009/12/person-following-and-detection-in-an-indoor-environment.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Person-following and Detection in an Indoor Environment&lt;/a&gt;: combines a face and leg detector.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://wiki.ros.org/ppl_detection&quot; rel=&quot;nofollow noreferrer&quot;&gt;ppl-detection&lt;/a&gt; also uses a Kinect.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://wiki.ros.org/lidar_tracking&quot; rel=&quot;nofollow noreferrer&quot;&gt;lidar-tracking&lt;/a&gt;: lidar used to track people, but they say it is not robust.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://wiki.ros.org/cyphy_people_mapping&quot; rel=&quot;nofollow noreferrer&quot;&gt;cyphy_people_mapping&lt;/a&gt;: other that uses Kinect. (See their &lt;a href=&quot;http://wiki.ros.org/cyphy_people_mapping?action=AttachFile&amp;amp;do=view&amp;amp;target=people_following.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;paper&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;We [1] use a boosting leg detector [2] which provides the position of potential people using horizontal front and rear range laser sensors.&#xA;A Multiple Hypothesis Tracking For Multiple people [3] keeps the track of the people and assigns them identifiers.&#xA;Since we also want to identify the person for large distances we use &lt;a href=&quot;http://www.hitl.washington.edu/artoolkit/&quot; rel=&quot;nofollow noreferrer&quot;&gt;AR tags&lt;/a&gt; which has as advantage that it is robust and easy to install.&lt;/p&gt;&#xA;&lt;p&gt;So depending on what sensors you have, I think, the easiest way might be to use a leg detection algorithm (using range lasers) or an AR tag (using a camera and tag).&lt;/p&gt;&#xA;&lt;p&gt;[1] A. Goldhoorn, A. Garrell, A. Sanfeliu, and R. Alquézar, “Continuous&#xA;real time pomcp to find-and-follow people by a humanoid service robot,”&#xA;in Proceedings of the IEEE-RAS International Conference on Humanoid&#xA;Robots, 2014, pp. 741–747.&lt;/p&gt;&#xA;&lt;p&gt;[2] K. O. Arras, O. M. Mozos, and W. Burgard, “Using boosted features for&#xA;the detection of people in 2d range data,” in Proceedings of the IEEE&#xA;International Conference on Robotics and Automation (ICRA), 2007, pp.&#xA;3402–3407.&lt;/p&gt;&#xA;&lt;p&gt;[3] S. S. Blackman, “Multiple hypothesis tracking for multiple target&#xA;tracking,” IEEE Aerospace and Electronic Systems Magazine, vol. 19,&#xA;no. 1, pp. 5–18, 2004.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;strong&gt;Other references&lt;/strong&gt;:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;On the &lt;a href=&quot;http://www.robotshop.com/blog/en/how-to-make-a-robot-lesson-7-using-sensors-2-3683&quot; rel=&quot;nofollow noreferrer&quot;&gt;robotshop.com - how to make a robot&lt;/a&gt; guide they propose to use an ultrasonic or infrared distance sensor(s), a camera and GPS:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;... the most appropriate sensors to allow a robot to follow a human may be ultrasonic or infrared distance sensor(s), a camera and GPS. A camera may be used to pick up a specific pattern placed on the shirt of the individual to follow while GPS units mounted on the robot and on the human would help the robot find the human if she cannot be seen visually. Distance sensors would ensure the robot does not get too close to the human. Therefore when choosing sensors to help your robot follow a human, the sensors listed above would be a good starting point.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;On &lt;a href=&quot;http://www.societyofrobots.com/robot_faq.shtml#robot_track_person&quot; rel=&quot;nofollow noreferrer&quot;&gt;societyofrobots.com&lt;/a&gt; promote to use &lt;a href=&quot;https://en.wikipedia.org/wiki/Computer_vision&quot; rel=&quot;nofollow noreferrer&quot;&gt;computer vision&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The most reliable way to do this is using computer vision. If I were to do it, I would do &lt;a href=&quot;http://www.societyofrobots.com/programming_computer_vision_tutorial_pt3.shtml#middle_mass&quot; rel=&quot;nofollow noreferrer&quot;&gt;middle mass detection&lt;/a&gt; on the color red, and wear a bright red shirt. As long as a Ferrari doesn't drive by, your robot will always follow you.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;On &lt;a href=&quot;http://www.norrislabs.com/Projects/RoboStool/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;norrislabs.com&lt;/a&gt; they explain how they made a robotic stool which is able to to follow a person using heat sensing. Which is based on their &lt;a href=&quot;http://www.norrislabs.com/Projects/FollowMeRov/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Follow Me Rover&lt;/a&gt;. They have all the schemas and source code on &lt;a href=&quot;http://www.norrislabs.com/Projects/FollowMeRov/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;their page&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;On &lt;a href=&quot;http://makezine.com/projects/the-stalker-bot/&quot; rel=&quot;nofollow noreferrer&quot;&gt;makezine.com&lt;/a&gt; there is a simple robot &lt;a href=&quot;http://makezine.com/projects/the-stalker-bot/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Stalker Bot&lt;/a&gt; that uses ultrasonic sensors to follow an object.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;In the article &lt;a href=&quot;http://www.ijcaonline.org/research/volume125/number13/bakar-2015-ijca-906165.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;A Study on Techniques of Person Following Robot&lt;/a&gt; they give a nice overview of different detection and tracking techniques and sensors used by several researchers: laser range finders, stereo cameras, Kinect.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="10041" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2015-11-05T18:05:14.020" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8394" PostTypeId="1" CreationDate="2015-11-05T15:14:02.993" Score="0" ViewCount="1753" Body="&lt;p&gt;i am using this sensor to make self balancing robot.At first i have soldered the header(only to vcc,gnd,scl,sda ) on the imu borad at the opposite side where there is no component mounted.then connecting it to arduino uno r3(vcc to vcc 3.3v/5v,gnd to 1 of 3 gnd,scl to scl and sda to sda(first time at those next to AREF, second time A5,A4) ) i uploaded the sketch &lt;a href=&quot;https://github.com/adafruit/Adafruit_ADXL345/blob/master/examples/sensortest/sensortest.pde&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/adafruit/Adafruit_ADXL345/blob/master/examples/sensortest/sensortest.pde&lt;/a&gt; then when i opened the serial monitor i got&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Accelerometer Test&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;FF Ooops, no ADXL345 detected ... Check your wiring!&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;i thought may be i have soldered the header in wrong direction(as in picture and videos at internet,they are so) so i desolder(with solder iron,no other technique) the header,but there were still some solder around the hole which i could not remove.then while checking the continuity between pins with multimiter(in resistance mode) i found the resistance to be 20k(scl-sda),220k(scl-gnd),220k(sda-gnd),between vcc and 3 other pins multimieter shows 1(range 2000k). then i soldered it on opposit side(this time where other components are mounted).the serial monitor still shows same output,and so does the muiltimeter.so where is the problem? is it with soldering ?do i need to disolder the header again and clean left out solder(with Chip Quik type desoldering technique ) on the opposite side(no component mounted)?is there any hope that i won't need to buy it again?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/skSN2.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;picture of opposite side where no component is mounted and this is after desoldering and resoldering&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9554" LastActivityDate="2016-07-04T11:41:26.997" Title="connecting MPU-9250 GY-9250 SENSOR MODULE to arduino uno" Tags="&lt;imu&gt;&lt;accelerometer&gt;&lt;gyroscope&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8398" PostTypeId="2" ParentId="6334" CreationDate="2015-11-06T14:56:33.607" Score="10" Body="&lt;p&gt;The inverse depth parameterisation represents a landmark's distance, d, from the camera exactly as it says, as proportional to 1/d within the estimation algorithm. The rational behind the approach is that, filtering approaches such as the extended Kalman filter (EKF) make an assumption that the error associated with features is Gaussian. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a visual odometry setting the depth of a landmark is estimated by tracking the associated features over some series of frames and then using the induced parallax. However for distant features (relative to the displacement of the camera) the resultant parallax will be small, and importantly the error distribution associated with the depth is highly peaked close to the minimum depth with a long tail (i.e. it is not well modelled via a Gaussian distribution). To see an example should refer to Fig. 7 in Civera et al.'s paper (mentioned by @freakpatrol), or Fig. 4 of &lt;a href=&quot;https://dspace.mit.edu/bitstream/handle/1721.1/78893/Leonard_Efficient%20scene.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Fallon et al. ICRA 2012&lt;/a&gt; &quot;Efficient Scene Simulation for Robust Monte Carlo Localization using an RGB-D Camera&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By representing the inverse depth (i.e. 1/d) this error becomes Gaussian. Furthermore it permits representing very distant points e.g. points at infinity. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The important aspect of the representation used is Civera's paper is explained in Section II B of his paper (see Equation (3)). Here, a landmark is represented relative to the pose (position and orientation) of the first camera from which it is seen. This pose is capture in the first five parameters of Eq (3), whereas the sixth parameter, &lt;span class=&quot;math-container&quot;&gt;$\rho_{i}$&lt;/span&gt;, represents the inverse depth. Eq (4) provides an expression for recovering the world position of the point (i.e. this where the inverse depth gets converted to depth as &lt;span class=&quot;math-container&quot;&gt;$1/\rho_{i}$&lt;/span&gt;)&lt;/p&gt;&#xA;" OwnerUserId="69" LastEditorUserId="24985" LastEditDate="2020-03-24T13:08:49.097" LastActivityDate="2020-03-24T13:08:49.097" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8400" PostTypeId="1" AcceptedAnswerId="8402" CreationDate="2015-11-07T01:41:06.743" Score="2" ViewCount="3809" Body="&lt;p&gt;I've recently been trying to use Gazebo to do some modelling for a couple tasks. I have a robot that's effectively able to locate a ball and get x,y coordinates in terms of pixels using a simple RGB camera from the Kinect. I also have a point cloud generated from the same Kinect, where I hope to find the depth perception of the ball using the X,Y coords sent from the circle recognition from my RGB camera. My plan earlier was to convert the X,Y coordinates from the RGB camera into meters using the DPI of the Kinect, but I can't find any info on it. It's much, much harder to do object recognition using a Point Cloud, so I'm hoping I can stick to using an RGB camera to do the recognition considering it's just a simple Hough Transform. Does anybody have any pointers for me?&lt;/p&gt;&#xA;" OwnerUserId="11004" LastActivityDate="2015-11-08T12:13:00.980" Title="Using an RGB + Depth Camera to locate X,Y,Z coordinates of a ball" Tags="&lt;localization&gt;&lt;computer-vision&gt;&lt;kinect&gt;&lt;cameras&gt;&lt;gazebo&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8402" PostTypeId="2" ParentId="8400" CreationDate="2015-11-07T02:33:37.137" Score="2" Body="&lt;p&gt;The critical part is the registration between depth data and RGB data. If the registration is calibrated properly then you can just extract the depth for the particular target pixel (X,Y), using interpolation for sub-pixel coordinates. See &lt;a href=&quot;https://stackoverflow.com/questions/17012585/how-do-you-map-kinects-depth-data-to-its-rgb-color&quot;&gt;this answer&lt;/a&gt; for help with the registration -- it is a common problem that has already been solved.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you have the depth for the pixel coordinates of interest, you can easily get the Cartesian coordinates relative to the camera using the camera matrix (based on the field of view and image size). Note that you also have to account for distortion in the RGB camera. &lt;a href=&quot;http://docs.opencv.org/2.4/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;This OpenCV documentation page&lt;/a&gt; should help start you off, and there are plenty of resources out there addressing transformation between camera pixel coordinates, camera homogeneous coordinates, and actual world Cartesian coordinates given the pixel depth.&lt;/p&gt;&#xA;" OwnerUserId="10836" LastEditorUserId="-1" LastEditDate="2017-05-23T12:37:11.430" LastActivityDate="2015-11-07T02:33:37.137" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="8403" PostTypeId="1" CreationDate="2015-11-07T03:42:58.217" Score="0" ViewCount="72" Body="&lt;p&gt;How would you vertically tilt a camera 180 degrees using mirrors?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm trying to add a pan/tilt mechanism to a Raspberry Pi's camera. The camera uses one of those flat cables with unstranded wires, and even with a strain gauge, I don't trust it to handle repeated bending, so I'm trying to design a tilt mechanism that allows the camera to be rigidly mounted so no wires move. The tilting also has to happen very quickly, so I'm trying to minimize the amount of mass I need to move.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then I saw the &lt;a href=&quot;http://www.xaxxon.com/oculus&quot; rel=&quot;nofollow&quot;&gt;Oculus&lt;/a&gt; kit that actuates a mirror to effectively tilt a laptop's fixed webcam. I'm trying to extend this idea, but I having trouble working out the mechanics that would allow the tilt to extend to 180 degrees. The layout in the Oculus's mechanism only supports a tilt angle of about 90 degrees, and the mirrors are relatively large. Is it possible to modify this to support 180 degrees?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there other ways to &quot;bend&quot; the view of a camera without having to move the actual camera?&lt;/p&gt;&#xA;" OwnerUserId="740" LastActivityDate="2016-12-26T16:49:24.973" Title="How to tilt a camera 180 using mirrors" Tags="&lt;mechanism&gt;&lt;cameras&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8405" PostTypeId="2" ParentId="8403" CreationDate="2015-11-07T11:47:17.687" Score="1" Body="&lt;p&gt;You could place the camera looking upwards and a mirror above it. &#xA;The mirror is attached to a motor so that it's rotation axis is parallel e.g. to the vertical center line of the camera. If the mirror is parallel to the camera, then you get a camera-selfie, if you rotate it by 45deg, you look to one side and with -45deg you look to the other side. So you just have to move the mirror in a range of 90 deg to be able to look to both directions.  &lt;/p&gt;&#xA;" OwnerUserId="23196" LastActivityDate="2015-11-07T11:47:17.687" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8407" PostTypeId="1" CreationDate="2015-11-07T22:43:36.833" Score="-1" ViewCount="315" Body="&lt;p&gt;Can a one propeller drone work efficiently for a good flight and stable camera footage in a drone flight&lt;/p&gt;&#xA;" OwnerUserId="11017" LastActivityDate="2015-11-08T05:37:40.590" Title="One propeller Drone?How well it works?Hope" Tags="&lt;quadcopter&gt;" AnswerCount="1" CommentCount="9" ClosedDate="2015-11-09T13:56:43.540" ContentLicense="CC BY-SA 3.0" />
  <row Id="8409" PostTypeId="2" ParentId="8407" CreationDate="2015-11-08T05:15:34.927" Score="2" Body="&lt;p&gt;Helicopters are a quasi-single propeller drone, but they require a tail propeller to counter-act the effects of the lift propeller.  Due to newton's third law of motion, the lifting propeller's spin in one direction will cause the the body of the helicopter to spin in the other direction.  Without a tail propeller to overcome this effect, A single motor drone would simply spin out of control.&lt;/p&gt;&#xA;" OwnerUserId="2295" LastEditorUserId="2295" LastEditDate="2015-11-08T05:37:40.590" LastActivityDate="2015-11-08T05:37:40.590" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="8410" PostTypeId="2" ParentId="8400" CreationDate="2015-11-08T12:13:00.980" Score="1" Body="&lt;p&gt;Very common problem which calls for using the &quot;Pointcloud Library&quot; PCL: &lt;a href=&quot;http://www.pointclouds.org&quot; rel=&quot;nofollow&quot;&gt;www.pointclouds.org&lt;/a&gt;&#xA;This datastructures in the library also make it easy to find according 3D-Points when you segmented your RGB image. There are lots of tutorials and a very busy community.&lt;/p&gt;&#xA;" OwnerUserId="9208" LastActivityDate="2015-11-08T12:13:00.980" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8411" PostTypeId="1" CreationDate="2015-11-08T13:22:28.313" Score="0" ViewCount="214" Body="&lt;p&gt;I would like to clarify my self on singularity configurations. If I am moving the robot in joint space only one joint at a time, can I come to a singular configuration? If so how?&#xA;Thanks&lt;/p&gt;&#xA;" OwnerUserId="11026" LastActivityDate="2015-11-08T21:21:51.870" Title="Joint Space Singularities" Tags="&lt;joint&gt;&lt;jacobian&gt;" AnswerCount="1" CommentCount="0" ClosedDate="2015-11-09T13:59:59.443" ContentLicense="CC BY-SA 3.0" />
  <row Id="8414" PostTypeId="2" ParentId="8411" CreationDate="2015-11-08T20:30:42.960" Score="2" Body="&lt;p&gt;Assuming it is a robot with a serial structure:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will always be able to move every joint of the robot in any pose.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However the singularitites still exist, and you can end up in a singular pose, but if you do not have any cartesian space contrains  (and do not even calculate inverse kinematics/inv. jacobi), then from a motion point of view these are not significant.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2015-11-08T21:21:51.870" LastActivityDate="2015-11-08T21:21:51.870" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8415" PostTypeId="2" ParentId="8008" CreationDate="2015-11-08T21:23:59.593" Score="1" Body="&lt;p&gt;You are using a target set of image points that are impossible to achieve. Simply shifting two of the points in one direction within image coordinates does not correspond to a rigid transformation of your 3D set of points. It may make sense for orthographic projections in CAD software, but cameras have perspective so you need to include that in your transformation -- if the plate is rotating towards the camera the shifted points will also move outwards in the vertical direction. Here is a figure to clarify what I mean:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/sXB36.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/sXB36.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The easiest fix is to actually generate a true transformation in 3D (rotation and/or translation), then determine the new pixel coordinates and use that for testing -- this also gives you something against which you can check your solved camera transformation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It also explains why zooming and translation work fine.&lt;/p&gt;&#xA;" OwnerUserId="10836" LastActivityDate="2015-11-08T21:23:59.593" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8417" PostTypeId="1" CreationDate="2015-11-09T11:43:42.283" Score="1" ViewCount="99" Body="&lt;p&gt;For a mod on the Dynamixel RX-24F I need to remove the enclosed PCB. I removed all screws but the PCB doesn't come out easily (without applying more force than I'm comfortable with). It seems to be stuck on the three large solder points in the white area. Has someone experience with this particular servo? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It might be glued/soldered to the case, but I'm not quite certain. Any help is appreciated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Xe6Zu.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Xe6Zu.jpg&quot; alt=&quot;Dynamixel RX-24F PCB&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11035" LastActivityDate="2015-11-09T11:43:42.283" Title="Removing PCB from a Dynamixel RX-24F servo?" Tags="&lt;dynamixel&gt;" AnswerCount="0" CommentCount="4" ClosedDate="2015-11-09T13:59:16.383" ContentLicense="CC BY-SA 3.0" />
  <row Id="8419" PostTypeId="1" AcceptedAnswerId="8431" CreationDate="2015-11-10T01:38:31.510" Score="0" ViewCount="12390" Body="&lt;p&gt;I asked a question similar to this earlier, but I believe I have a new problem. I've been working on figuring out the inverse kinematics given an x,y,z coordinate. I've adopted the Jacobian method, taking the derivative of the forward kinematics equations with respect to their angles and input it into the Jacobian. I then take the inverse of it and multiply it by a step towards the goal distance. For more details, look at &lt;a href=&quot;http://www.seas.upenn.edu/~meam520/notes02/IntroRobotKinematics5.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.seas.upenn.edu/~meam520/notes02/IntroRobotKinematics5.pdf&lt;/a&gt; page 21 onwards. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a better picture, below is something:&#xA;&lt;img src=&quot;https://i.stack.imgur.com/7mVwI.png&quot; alt=&quot;3 DOF Arm&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Below is the code for my MATLAB script, which runs flawlessly and gives a solution in under 2 seconds:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ycurrent = 0; %Not using this  &#xA;xcurrent = 0; %Starting position (x)   &#xA;zcurrent = 0; %Starting position (y)    &#xA;xGoal = .5; %Goal x/z values of (1, 1)   &#xA;zGoal = .5;    &#xA;theta1 = 0.1; %Angle of first DOF    &#xA;theta2 = 0.1; %Angle of second DOF  &#xA;theta3 = 0.1; %Angle of third DOF&#xA;xchange = xcurrent - xGoal %Current distance from goal&#xA;zchange = zcurrent - zGoal&#xA;%Length of segment 1: 0.37, segment 2:0.374, segment 3:0.2295 &#xA;while ((xchange &amp;gt; .02 || xchange &amp;lt; -.02) || (zchange &amp;lt; -.02 || zchange &amp;gt; .02))    &#xA;        in1 = 0.370*cos(theta1); %These equations are stated in the link provided&#xA;        in2 = 0.374*cos(theta1+theta2);&#xA;        in3 = 0.2295*cos(theta1+theta2+theta3);&#xA;        in4 = -0.370*sin(theta1);&#xA;        in5 = -0.374*sin(theta1+theta2); &#xA;        in6 = -0.2295*sin(theta1+theta2+theta3); &#xA;        jacob = [in1+in2+in3, in2+in3, in3; in4+in5+in6, in5+in6, in6; 1,1,1];&#xA;        invJacob = inv(jacob); &#xA;        xcurrent = .3708 * sin(theta1) + .374 * sin(theta1+theta2) + .229 * sin(theta1+theta2+theta3) &#xA;        zcurrent = .3708 * cos(theta1) + .374 * cos(theta1+theta2) + .229 * cos(theta1+theta2+theta3)        &#xA;        xIncrement = (xGoal - xcurrent)/100; &#xA;        zIncrement = (zGoal - zcurrent)/100; &#xA;        increMatrix = [xcurrent; zcurrent; 1]; %dx/dz/phi &#xA;        change = invJacob * increMatrix; %dtheta1/dtheta2/dtheta3  &#xA;        theta1 = theta1 + change(1)  &#xA;        theta2 = theta2 + change(2)  &#xA;        theta3 = theta3 + change(3)&#xA;        xcurrent = .3708 * sin(theta1) + .374 * sin(theta1+theta2) + .229 * sin(theta1+theta2+theta3)  &#xA;        zcurrent = .3708 * cos(theta1) + .374 * cos(theta1+theta2) + .229 * cos(theta1+theta2+theta3)          &#xA;        xchange = xcurrent - xGoal&#xA;        zchange = zcurrent - zGoal&#xA;end        &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Below is my Python code, which goes into an infinite loop and gives no results. I've looked over the differences between it and the MATLAB code, and they look the exact same to me. I have no clue what is wrong. I would be forever grateful if somebody could take a look and point it out.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;def sendArm(xGoal, yGoal, zGoal, right, lj):&#xA;    ycurrent = xcurrent = zcurrent = 0&#xA;    theta1 = 0.1&#xA;    theta2 = 0.1&#xA;    theta3 = 0.1&#xA;    xcurrent, zcurrent = forwardKinematics(theta1, theta2, theta3)&#xA;    xchange = xcurrent - xGoal&#xA;    zchange = zcurrent - zGoal&#xA;    while ((xchange &amp;gt; 0.05 or xchange &amp;lt; -0.05) or (zchange &amp;lt; -0.05 or zchange &amp;gt; 0.05)):&#xA;        in1 = 0.370*math.cos(theta1) #Equations in1-6 are in the pdf I linked to you (inv kinematics section)&#xA;        in2 = 0.374*math.cos(theta1+theta2)&#xA;        in3 = 0.2295*math.cos(theta1+theta2+theta3)&#xA;        in4 = -0.370*math.sin(theta1)&#xA;        in5 = -0.374*math.sin(theta1+theta2)&#xA;        in6 = -0.2295*math.sin(theta1+theta2+theta3)&#xA;        jacob = matrix([[in1+in2+in3,in2+in3,in3],[in4+in5+in6,in5+in6,in6], [1,1,1]]) #Jacobian&#xA;        invJacob = inv(jacob) #inverse of jacobian&#xA;        xcurrent, zcurrent = forwardKinematics(theta1, theta2, theta3)&#xA;        xIncrement = (xGoal - xcurrent)/100 #dx increment&#xA;        zIncrement = (zGoal - zcurrent)/100 #dz increment&#xA;        increMatrix = matrix([[xIncrement], [zIncrement], [1]])&#xA;        change = invJacob*increMatrix #multiplying both matrixes&#xA;        theta1 = theta1 + change.item(0)&#xA;        theta2 = theta2 + change.item(1)&#xA;        theta3 = theta3 + change.item(2)&#xA;        xcurrent, zcurrent = forwardKinematics(theta1, theta2, theta3)&#xA;        xchange = xcurrent - xGoal&#xA;        zchange = zcurrent - zGoal&#xA;        print &quot;Xchange: %f ZChange: %f&quot; % (xchange, zchange)&#xA;    print &quot;Goals %f %f %f&quot; % (theta1, theta2, theta3)&#xA;    right.set_joint_positions(theta1) #First pitch joint&#xA;    right.set_joint_positions(theta2) #Second pitch&#xA;    right.set_joint_positions(theta3) #Third Pitch joint&#xA;&#xA;&#xA;def forwardKinematics(theta1, theta2, theta3):&#xA;    xcurrent = .3708 * math.sin(theta1) + .374 * math.sin(theta1+theta2) + .229 * math.sin(theta1+theta2+theta3)&#xA;    zcurrent = .3708 * math.cos(theta1) + .374 * math.cos(theta1+theta2) + .229 * math.cos(theta1+theta2+theta3)            &#xA;    return xcurrent, zcurrent&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="11004" LastActivityDate="2017-05-27T02:42:42.647" Title="Running my 3 DOF Inverse Kinematics Code: Works in MATLAB, not in Python" Tags="&lt;kinematics&gt;&lt;inverse-kinematics&gt;&lt;matlab&gt;&lt;python&gt;&lt;jacobian&gt;" AnswerCount="2" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="8420" PostTypeId="1" AcceptedAnswerId="8424" CreationDate="2015-11-10T04:42:07.340" Score="2" ViewCount="301" Body="&lt;p&gt;I have two servo motors that I rigged up to use as a telescope remote focuser. The idea is to turn one servo by hand and use the power generated to turn the other, which is geared to a telescope focuser knob. I noticed that when the two servos are electrically connected, it is noticeably harder to turn a servo compared to turning it by itself. I tried changing the polarity of the connection hoping it would help, but it is still harder to turn the servo when they are connected. Does anyone know why this is?&lt;/p&gt;&#xA;" OwnerUserId="11040" LastEditorUserId="37" LastEditDate="2018-08-15T15:21:03.223" LastActivityDate="2018-08-15T15:21:03.223" Title="Why does it require more force to turn a servo if it is electronically connected to another servo?" Tags="&lt;servomotor&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8421" PostTypeId="1" CreationDate="2015-11-10T07:50:00.770" Score="0" ViewCount="298" Body="&lt;p&gt;I want to turn some motors using my raspberry pi. I am able to turn an LED on and off using the 3.3V GPIO pin. For the motors, I tried using a L293D chip as per the instructions on &lt;a href=&quot;http://computers.tutsplus.com/tutorials/controlling-dc-motors-using-python-with-a-raspberry-pi--cms-20051&quot; rel=&quot;nofollow&quot;&gt;this link&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What happened is that the very first time I set the circuit up for one motor, it worked perfectly. But then, I moved the pi a little and the motor has since refused to work. I even bought a new pi and still no luck with the circuit. I then bought a L298N board that fits smugly on top of the GPIO pins of the pi and followed the instructions on the &lt;a href=&quot;https://www.youtube.com/watch?v=JJXzlCK4vnY&quot; rel=&quot;nofollow&quot;&gt;this video&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Still no luck, the motor just won't run with either pi. I am using four AA batteries to power the motor and a connecting the pi to a power supply from the wall. What could possibly be the problem here?&lt;/p&gt;&#xA;" OwnerUserId="11042" LastEditorUserId="158" LastEditDate="2015-11-10T18:45:08.153" LastActivityDate="2016-09-05T14:46:15.613" Title="I can't get motors to turn with Raspberry pi" Tags="&lt;motor&gt;&lt;raspberry-pi&gt;" AnswerCount="4" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8422" PostTypeId="2" ParentId="8420" CreationDate="2015-11-10T10:08:41.457" Score="0" Body="&lt;p&gt;Do I understand correctly that you do not use any external power supply?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You said it yourself, you use one servo to generate power to the other. If it is not connected it is easy to turn since it is not generatrin power (not 100% exact but let's run with this in this case). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you connect the servo, your mechanical energy will be transformed to electrical energy transfered to the other servo and transformed back to mechanical energy. So you still have to generate the energy required by the mchanical system connected to the second servo. If the servos are the same you gain nothing, you might as well turn the mechanical system directly, if they are different you might have to exert less torque on the first motor, then the second one is producing, but the velocity of the second one will be then slower. (similarly to mechanical gears)&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2015-11-10T14:52:37.500" LastActivityDate="2015-11-10T14:52:37.500" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="8423" PostTypeId="2" ParentId="8421" CreationDate="2015-11-10T14:18:17.947" Score="1" Body="&lt;p&gt;If you have changed the Pi and changed the L298N board then I would suspect there is a problem with the motor.  Is it possible to drive the motor without the Pi?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could try replacing the batteries with a second power supply, I'm assuming you have checked the batteries aren't flat :)&lt;/p&gt;&#xA;" OwnerUserId="10717" LastActivityDate="2015-11-10T14:18:17.947" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="8424" PostTypeId="2" ParentId="8420" CreationDate="2015-11-10T14:37:06.087" Score="1" Body="&lt;p&gt;The other servo, being an electrical device, has some finite resistance. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the servos are &lt;em&gt;not&lt;/em&gt; electrically connected, the output of the manually turned servo is an open circuit, meaning that there is infinite resistance and no current flows. Because no current is flowing, the &lt;em&gt;electrical&lt;/em&gt; output power of manually turned servo is &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$P = IV$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $I = 0$, so &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$P = (0)(V) = 0$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you connect another servo, there is now a finite resistance connected to the manually turned servo's leads, so now current may flow. &lt;em&gt;Now&lt;/em&gt; the current is given by&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$V = IR$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$I = V/R$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;so the &lt;em&gt;electrical&lt;/em&gt; output power of the servo is&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$P = IV$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$P = V^2/R$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are two &quot;types&quot; of voltage in a motor when you operate it normally; the applied voltage and a back-voltage, commonly called &lt;a href=&quot;https://en.wikipedia.org/wiki/Counter-electromotive_force&quot; rel=&quot;nofollow&quot;&gt;&quot;back EMF&quot;&lt;/a&gt;. This back EMF is a byproduct of motor motion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The requirements for motor action are:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Current-carrying conductor&lt;/li&gt;&#xA;&lt;li&gt;Applied magnetic field &lt;/li&gt;&#xA;&lt;li&gt;Applied voltage differential on the conductor&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The output of motor action is relative motion between the current-carrying conductor and the magnetic field. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The requirements for generator action are:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Current-carrying conductor&lt;/li&gt;&#xA;&lt;li&gt;Applied magnetic field&lt;/li&gt;&#xA;&lt;li&gt;Relative motion between the conductor and field&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The output of generator action is a voltage differential in the conductor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you can see that if you meet motor action then you get generator action and both happen simultaneously. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you back-drive a motor, you &lt;em&gt;can&lt;/em&gt; get an output voltage at the motor terminals, &lt;strong&gt;if&lt;/strong&gt; you have an applied magnetic field. In some instances, electric vehicles for instance, the motor is created such that the magnetic field is in the form of an electromagnet, called &lt;a href=&quot;https://en.wikipedia.org/wiki/Field_coil&quot; rel=&quot;nofollow&quot;&gt;field windings&lt;/a&gt;. In this version, it is possible to vary the strength of the magnetic field by varying the current in the field windings; this varies the output current of the motor during back-driven operations and produces a variable strength braking effect. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your case, with servo motors, the magnetic field typically comes in the form of permanent magnets in the motor housing. This means that the only way to vary output current (assuming a fixed output resistance) is to vary speed, as this varies the voltage you generate as dictated by the back-EMF constant;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$ V_{\mbox{back EMF}} = K_{\omega} \omega \phi$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $K_{\omega}$ is the back-EMF constant, $\omega$ is the speed at which you are driving the motor, and $\phi$ is the strength of the magnetic field. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking again at the electrical output power of the servo:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$P = V^2/R$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Output power of the servo goes up with voltage squared. Since voltage is proportional to the driving speed of the motor, you can see that output power goes up based on speed squared; if you double the speed at which you drive the servo you quadruple the output power of the servo. This is why the servo gets &quot;very hard&quot; to drive. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There will always be some resistance when you try to drive a servo or motor, even with an open circuit, because they are real devices and thus have mass and inertia. You apply a torque to accelerate the motor:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$ \tau = I\alpha$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $\tau$ is the torque you apply, $I$ is the effective motor inertia, and $\alpha$ is the rate at which you are accelerating the motor shaft. Output power varies with torque and speed:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$P_\mbox{mechanical} = \tau \omega$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;so it requires more power to accelerate an already-moving object than it does to accelerate a stationary object. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, the total power you apply to the servo is given by:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$P = P_{\mbox{mechanical}} + P_{\mbox{backEMF}}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$P = \tau \omega + V^2/R$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$P = I\alpha \omega + (K_{\omega} \omega \phi)^2/R$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$P = (I \alpha)\omega + \frac{(K_\omega \phi)^2}{R}\omega^2 $&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where again, if the back-driven servo is not electrically connected to anything, then $R$ becomes infinitely large and the second term in the above equation becomes zero. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-11-10T14:37:06.087" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="8425" PostTypeId="1" AcceptedAnswerId="8434" CreationDate="2015-11-10T17:32:24.587" Score="0" ViewCount="607" Body="&lt;p&gt;For a quadcopter, what is the relationship between roll, pitch, and yaw in the &lt;strong&gt;earth frame&lt;/strong&gt; and acceleration in the x, y, and z dimensions in the earth frame? To be more concrete, suppose roll ($\theta$) is a rotation about the earth frame x-axis, pitch ($\phi$) is a rotation about the earth frame y-axis, and yaw ($\psi$) is a rotation about the z-axis. Furthermore, suppose $a$ gives the acceleration produced by all four rotors, i.e. acceleration normal to the plane of the quadcopter. Then what are $f, g, h$ in&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$a_x = f(a,\theta,\phi,\psi)$$&#xA;$$a_y = g(a,\theta,\phi,\psi)$$&#xA;$$a_z = h(a,\theta,\phi,\psi)$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $a_x$, $a_y$, and $a_z$ are accelerations in the $x$, $y$, and $z$ dimensions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've seen a number of papers/articles giving the relationship between x,y,z accelerations and attitude, but it's never clear to me whether these attitude angles are rotations in the earth frame or the body frame.&lt;/p&gt;&#xA;" OwnerUserId="11049" LastEditorUserId="11049" LastEditDate="2015-11-10T20:54:25.493" LastActivityDate="2015-11-11T08:16:23.217" Title="Relationship between earth frame attitude and acceleration for a quadcopter" Tags="&lt;quadcopter&gt;&lt;dynamics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8426" PostTypeId="1" CreationDate="2015-11-10T18:26:19.357" Score="0" ViewCount="7259" Body="&lt;p&gt;I am trying to solve a forward kynematics problem for a 3DOF manipulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am working with the Robotics Toolbox for MatLab created by Peter Corke and after calculte the DH parameters and introduce them into MatLab to compute the fordward kynematics the plotted robot is not what it should be.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I guess I made some mistakes calculating the DH parameters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Attached is the file where you can see what are the DH frames calculated for each joint and the DH parameters for each frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyone could give me a clue whether this is the correct answer?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the image with the frames calculated by me.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/I3wow.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/I3wow.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And here the robot I get from Matlab (using the Robotics Toolbox by P.Corke)&#xA;&lt;a href=&quot;https://i.stack.imgur.com/lS4Td.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/lS4Td.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11050" LastEditorUserId="21223" LastEditDate="2019-08-03T23:39:38.057" LastActivityDate="2020-11-28T12:24:43.897" Title="Denavit Hartenberg parameters - 3DOF articulated manipulator" Tags="&lt;robotic-arm&gt;&lt;inverse-kinematics&gt;&lt;forward-kinematics&gt;&lt;robotics-toolbox&gt;" AnswerCount="2" CommentCount="12" ContentLicense="CC BY-SA 3.0" />
  <row Id="8427" PostTypeId="1" CreationDate="2015-11-10T19:06:41.977" Score="2" ViewCount="180" Body="&lt;p&gt;Hello I am trying to build a Quadcopter for a school project and I need to finish quick before our mission trip because I was asked to finish it before then so that I could take it. But I am having a problem figuring out which charger would work with my &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__63431__ZIPPY_Compact_6200mAh_4s_40c_Lipo_Pack.html?gclid=CMqXo9W_hskCFY-VfgodACwH9w&quot; rel=&quot;nofollow&quot;&gt;ZIPPY Compact 6200mAh 4s 40c Lipo Pack&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Here are the specs on the battery&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Capacity: 6200mAh&lt;/li&gt;&#xA;&lt;li&gt;Voltage: 4S1P / 4 Cell / 14.8V&lt;/li&gt;&#xA;&lt;li&gt;Discharge: 40C Constant / 50C Burst&lt;/li&gt;&#xA;&lt;li&gt;Weight: 589g (including wire, plug &amp;amp; case)&lt;/li&gt;&#xA;&lt;li&gt;Dimensions: 158x46x41mm&lt;/li&gt;&#xA;&lt;li&gt;Balance Plug: JST-XH&#xA;Discharge Plug: HXT4mm&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Also I will be running the &lt;a href=&quot;http://www.helipal.com/tarot-t4-3d-brushless-gimbal-for-gopro-3-axis.html?gclid=CJuvxaGj5MgCFYeEfgodtWkOaA&quot; rel=&quot;nofollow&quot;&gt;Tarot T4-3D Brushless Gimbal for GoPro (3-Axis)&lt;/a&gt;&#xA;and if anyone can tell me a good battery to run it off of or maybe it would be better to run it off my main battery.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Thanks in Advance&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="11051" LastActivityDate="2016-02-10T16:38:49.053" Title="What charger to use with my ZIPPY Compact 6200mAh 4s 40c Lipo MultiRotor Battery" Tags="&lt;quadcopter&gt;&lt;battery&gt;&lt;lithium-polymer&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2016-02-11T20:12:21.280" ContentLicense="CC BY-SA 3.0" />
  <row Id="8429" PostTypeId="2" ParentId="8427" CreationDate="2015-11-10T23:24:15.563" Score="2" Body="&lt;p&gt;Buy the imax b6. They're cheap to replace at $26, I would recommend buying the imax b6 with the built-in power supply as it saves you having to buy an extra 12v 5A psu. I own 4 imax b6's and they work wonders.&lt;/p&gt;&#xA;" OwnerUserId="11054" LastActivityDate="2015-11-10T23:24:15.563" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8430" PostTypeId="2" ParentId="8421" CreationDate="2015-11-10T23:26:29.133" Score="0" Body="&lt;p&gt;run a continuity test on the windings using your voltmeter and let us know what the resistance is compared to what the datasheet on your motor states.&#xA;That will give you a clue as to whether your motor is ok or not, if you get no reading, then your motor is gone.&lt;/p&gt;&#xA;" OwnerUserId="11054" LastActivityDate="2015-11-10T23:26:29.133" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8431" PostTypeId="2" ParentId="8419" CreationDate="2015-11-10T23:44:31.400" Score="1" Body="&lt;p&gt;I found out what was wrong. The pdf I linked (as well as many others) state that you need to multiply your inverse jacobian matrix by a &lt;strong&gt;step&lt;/strong&gt; x/y/z distance, but that results in an infinite loop. Multiplying the inverse jacobian matrix by the &lt;strong&gt;overall&lt;/strong&gt; change in distance from x/zcurrent to the goals made the python code work smoothly. I'll keep this question up in case anybody wants to see the code.&lt;/p&gt;&#xA;" OwnerUserId="11004" LastActivityDate="2015-11-10T23:44:31.400" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8432" PostTypeId="1" CreationDate="2015-11-11T01:21:58.883" Score="5" ViewCount="3361" Body="&lt;p&gt;What 2D SLAM implementations (preferably included in ROS) can be used with simple distance sensors like IR or ultrasonic rangefinders?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a small mobile platform equipped with three forward facing ultrasonic sensors (positioned at 45 degrees, straight ahead, and -45 degrees), as well as a 6-DOF accel/gryo and wheel encoders, and I'd like to use this to play around with a &quot;toy&quot; SLAM implementation. I don't want to waste money on a Kinect, much less a commercial laser rangefinder, so methods that require high-density laser measurements aren't applicable.&lt;/p&gt;&#xA;" OwnerUserId="740" LastActivityDate="2017-01-10T10:32:23.660" Title="How to use SLAM with simple sensors" Tags="&lt;slam&gt;&lt;ros&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8433" PostTypeId="2" ParentId="8432" CreationDate="2015-11-11T02:57:39.837" Score="4" Body="&lt;p&gt;The actual implementation of SLAM won't care about whether you are using high fidelity laser range finders or cheaper ultrasonic sensors. Both are providing range measurements with the biggest difference being the uncertainty. Of course ultrasonic sensors work on different principles so there is more to it than that, but both are providing range measurements so you could swap between either one and much of your SLAM algorithm won't change.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The biggest challenge will likely be identifying landmarks or features in the environment that will form the map. With a Kinect or sweeping laser scanner you can pick out and track features relatively easily. However, with only 3 ultrasonic sensors whose field of view is rather wide and are subject to echoes and other complications, you will have a hard time recognizing objects or features in the environment.&lt;/p&gt;&#xA;" OwnerUserId="10836" LastActivityDate="2015-11-11T02:57:39.837" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8434" PostTypeId="2" ParentId="8425" CreationDate="2015-11-11T03:30:41.573" Score="0" Body="&lt;p&gt;The orientation &lt;em&gt;angles&lt;/em&gt; will be provided in the Earth frame (global or world frame is more appropriate). It is pretty much impossible to provide a frame orientation with angles &lt;em&gt;with respect to that same frame&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, given some acceleration $a_b$ in the body frame, you can find the acceleration in the world frame $a_w$ by pre-multiplication with the rotation matrix $R$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$a_w = R a_b$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you assume a typical roll-pitch-yaw sequence, then this will look like:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\begin{bmatrix} a_{w,x} \\ a_{w,y} \\ a_{w,z} \end{bmatrix} = \begin{bmatrix} c_\psi c_\theta &amp;amp; -s_\psi c_\phi + c_\psi s_\theta s_\phi &amp;amp; s_\psi s_\phi + c_\psi s_\theta c_\phi \\ s_\psi c_\theta &amp;amp; c_\psi c_\phi + s_\theta s_\psi s_\phi &amp;amp; -c_\psi s_\phi + s_\theta s_\psi c_\phi \\ -s_\theta &amp;amp; c_\theta s_\phi &amp;amp; c_\theta c_\phi \end{bmatrix} \begin{bmatrix} a_{b,x} \\ a_{b,y} \\ a_{b,z} \end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where $c_x = \cos x$ and $s_x = \sin x$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, you can expand this to specify the x-y-z components of the world frame acceleration as individual equations as you mentioned:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$a_{w,x} = f(a_b, \phi, \theta, \psi)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$a_{w,y} = g(a_b, \phi, \theta, \psi)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$a_{w,z} = h(a_b, \phi, \theta, \psi)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that I am using the convention where $\phi$ is roll (about x-axis), $\theta$ is pitch (about y-axis), and $\psi$ is yaw (about z-axis).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the rotation sequence roll, pitch, yaw is applied, each rotation occurs with respect to a world frame axis. We could get the same final result by applying a yaw, pitch, roll sequence but about each &lt;em&gt;new&lt;/em&gt; axis. This latter method is more intuitive when visualizing roll-pitch-yaw (or rather Euler angle) rotations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a figure to clarify the rotation sequence in case it helps. The world frame is shown in black, the body frame in red-green-blue, and intermediary frames during the &quot;intuitive&quot; rotation sequence are included in grey.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/XNqRc.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XNqRc.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10836" LastEditorUserId="10836" LastEditDate="2015-11-11T08:16:23.217" LastActivityDate="2015-11-11T08:16:23.217" CommentCount="11" ContentLicense="CC BY-SA 3.0" />
  <row Id="8435" PostTypeId="2" ParentId="8426" CreationDate="2015-11-11T10:02:38.883" Score="1" Body="&lt;p&gt;Try these:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Theta = [pi/2, -pi/2, -pi/2];&#xA;D     = [L0,    L2,    L1  ];&#xA;A     = [0,     0,     L3  ];&#xA;Alfa  = [pi/2, -pi/2,  0   ];&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;with&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; T = [cos(theta) -sin(theta)*cos(alpha) sin(theta)*sin(alpha) a*cos(theta); &#xA;      sin(theta) cos(theta)*cos(alpha) -cos(theta)*sin(alpha) a*sin(theta);&#xA;      0          sin(alpha)             cos(alpha)            d;&#xA;      0          0                      0                     1];&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;i added the matrix to make sure the differences do not come from the differences in the DH and modified DH paramters.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2015-11-12T07:48:40.843" LastActivityDate="2015-11-12T07:48:40.843" CommentCount="11" ContentLicense="CC BY-SA 3.0" />
  <row Id="8437" PostTypeId="2" ParentId="8421" CreationDate="2015-11-11T20:27:50.113" Score="-1" Body="&lt;p&gt;The datasheet of the l298n motor clearly states that you need a minimum of 4.5V of Vss,that is logic supply.Try giving it a higher voltage. 3.3V wont work.&lt;/p&gt;&#xA;" OwnerUserId="11048" LastActivityDate="2015-11-11T20:27:50.113" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8438" PostTypeId="1" CreationDate="2015-11-12T08:05:40.633" Score="0" ViewCount="241" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Gu5Sk.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Gu5Sk.jpg&quot; alt=&quot;Solar panel array&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can we achieve this kind of rotation to enable maximum trapping of solar rays during the day?&lt;/p&gt;&#xA;" OwnerUserId="11061" LastEditorUserId="9176" LastEditDate="2015-11-12T15:25:26.827" LastActivityDate="2015-11-13T06:40:33.770" Title="Solar panel set rotation: How to achieve both vertical and horizontal rotation?" Tags="&lt;mobile-robot&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8440" PostTypeId="2" ParentId="8438" CreationDate="2015-11-12T10:16:57.113" Score="3" Body="&lt;p&gt;Your question is very broad... what have you tried already? SE can help with specific issues, but not design an entire sun tracking system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, a simple google for &quot;&lt;a href=&quot;https://www.google.com/search?q=sun%20tracker%20DIY&quot; rel=&quot;nofollow noreferrer&quot;&gt;sun tracker DIY&lt;/a&gt;&quot; should give you some ideas. &lt;a href=&quot;https://robotics.stackexchange.com/questions/8438/solar-panel-set-rotationhow-to-achive-both-vertical-and-horizontal-rotation/8440#comment-13663&quot;&gt;50k4's suggested link&lt;/a&gt; is a very good example of a DIY sun tracking system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically you need to track the Sun, on a daily basis, throughout the year. So a mechanical system with 1 or 2 DOF (degree of freedom) is required to &lt;em&gt;tilt&lt;/em&gt; the panels, along with a mechanism to &lt;em&gt;track&lt;/em&gt; the Sun.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Tilt&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are two types of tilt required - vertical and horizontal:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;For vertical tilt, along the N-S axis, this is easy as it (generally)&#xA;remains constant, and is equal to the latitude of the installation. So&#xA;at the equator the panels are parallel to the ground, angle of tilt&#xA;is 0°; in Paris that angle would be 48.8; at the North Pole the panels would be perpendicular (90°). Obviously there is &lt;em&gt;some&lt;/em&gt; seasonal variation, between the&#xA;solstices, and a vertical tracking system can be added (hence the 2&#xA;DOF). However it is not essential, and it is better to concentrate on&#xA;the horizontal tracking;&lt;/li&gt;&#xA;&lt;li&gt;For horizontal tilt, along the E-W axis, then a 1 DOF arc of 180&#xA;degrees, maximum, is required to track the Sun. So, only one&#xA;servo/actuator, or bank of parallel servos, would be required, per panel or array of panels. &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;How you mount the panels on to the servos is up to you, either:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;One servo/actuator to one panel;&lt;/li&gt;&#xA;&lt;li&gt;One servo/actuator to an array of panels.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Remember the larger the number of panels in the array (2x2, 3x3, 4x4...), the heavier the array will become, the greater its mechanical inertia and the larger the required actuator will be. You could use one actuator for each panel, but then the maintenance required will be greater, as there are more servos to maintain. Also, from a cost perspective, is one big actuator cheaper than 9, or 16, smaller servos?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Tracking&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are a number of ways to actually track the Sun, to keep the panels facing the Sun, including:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The simplest form of tracking would employ a light sensor, mounted in&#xA;the same plane as the panels, that, when maximum light output is&#xA;achieved then  it can be assumed that the panel (sensor) is pointing&#xA;directly at the Sun. One downside is that the sensor, and hence the panel array, would need to be &#xA;constantly shifting orientation, and sampling the light, to ensure that maximum luminosity is achieved.&lt;/li&gt;&#xA;&lt;li&gt;A more complex solution would be to have an array of Solar coordinates over time for&#xA;that specific date, which can be used to control the servos, to simply point the panels in the direction of where the Sun should be at that particular time. However this requires the preparation of tables, and access to an almanac. Although, it would be possible to programmatically derive the coordinates - using a model of the Solar System in Mathematica, for example.&lt;/li&gt;&#xA;&lt;li&gt;Get the angle of the Sun's path for that day, divide that by the number of daylight hours for that date, and you have the required angular velocity of the panel/array. Point the panel to the angle of the Sunrise and then at sunrise start the rotation at the calculated angular velocity. This will keep the panels pointing in roughly the correct orientation, without the requirement for a sensor.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="9176" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2015-11-13T06:40:33.770" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8443" PostTypeId="1" CreationDate="2015-11-12T17:06:05.580" Score="1" ViewCount="134" Body="&lt;p&gt;I am a new learner of iRobot. I am trying to program it to control the movement of the Create 2. After glancing through the existing project, I find most of them are based on sending commands to Roomba through a cable. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there anyway to embed the code in and let the Roomba behave accordingly? If there is not such method, which kind of API tool do you think is easiest for beginner? &lt;/p&gt;&#xA;" OwnerUserId="11066" LastEditorUserId="9176" LastEditDate="2015-11-13T14:34:44.090" LastActivityDate="2016-05-11T16:54:29.333" Title="iRobot Create 2: Can I load the code in instead of connecting cable? (new learner)" Tags="&lt;irobot-create&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8444" PostTypeId="1" AcceptedAnswerId="8447" CreationDate="2015-11-12T17:45:07.417" Score="4" ViewCount="12928" Body="&lt;p&gt;I am working with an iRobot Create 2 and I work with others around me. Whenever I turn the robot on, send it an OI reset command, etc., it makes its various beeps and noises. I would like to not have this happen since I find it a little annoying and I'm sure those who have to work around me would like to have things quiet so they can concentrate on their work. Is there a way to accomplish turning off the beeps (while still being able to easily re-enable them), or am I out of luck?&lt;/p&gt;&#xA;" OwnerUserId="11068" LastEditorUserId="110" LastEditDate="2015-11-13T00:10:50.003" LastActivityDate="2018-07-18T14:27:54.510" Title="Is there a way to turn the sound off of a Roomba?" Tags="&lt;irobot-create&gt;&lt;roomba&gt;&lt;digital-audio&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8446" PostTypeId="2" ParentId="8443" CreationDate="2015-11-12T20:03:39.437" Score="1" Body="&lt;p&gt;Unlike the old Create, there is no way for the new Create2 to store any user program.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Be warned, &lt;em&gt;easiest&lt;/em&gt; is very subjective.  For me, the easiest thing is to write python code and place a small netbook on the robot.  For others, the easiest thing is to write Arduino code and wire that in...  &lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-11-12T20:03:39.437" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8447" PostTypeId="2" ParentId="8444" CreationDate="2015-11-12T20:25:44.737" Score="4" Body="&lt;p&gt;No, there is no software or hardware volume control on the Roomba.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could probably put a potentiometer inline with the speaker wire to manually change the volume.  However, getting to the speaker is a bit of work.  But I believe is totally doable.  You just have to disassemble (and reassemble) lots of the robot.  This would make a great project, be sure to &lt;a href=&quot;http://www.irobot.com/About-iRobot/STEM/Create-2/Submit-a-Project.aspx&quot; rel=&quot;nofollow noreferrer&quot;&gt;submit&lt;/a&gt; it!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S. I just found this page (&lt;a href=&quot;http://www.schneordesign.com/Avi/irobot/roomba_spk1.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.schneordesign.com/Avi/irobot/roomba_spk1.htm&lt;/a&gt;) on how to access the Roomba speaker.  The page is actually about how to fix a broken speaker, but there are step-by-step instructions on how to get to the speaker.  And once you are are there, you can cut a wire for no sound, or add in some resistance for a quieter sound.&lt;/p&gt;&#xA;" OwnerUserId="110" LastEditorUserId="110" LastEditDate="2018-07-18T14:27:54.510" LastActivityDate="2018-07-18T14:27:54.510" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8448" PostTypeId="1" CreationDate="2015-11-12T21:27:57.217" Score="3" ViewCount="630" Body="&lt;p&gt;I am starting to assemble a quadrotor from scratch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Currently, I have this:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Structure;&lt;/li&gt;&#xA;&lt;li&gt;an IMU (accelerometer, gyro, compass);&lt;/li&gt;&#xA;&lt;li&gt;4 ESCs and DC motors;&lt;/li&gt;&#xA;&lt;li&gt;4 propellers;&lt;/li&gt;&#xA;&lt;li&gt;Raspberry Pi to control the system, and;&lt;/li&gt;&#xA;&lt;li&gt;LiPo battery.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I have calibrated the ESCs and the four motors are already working and ready.&#xA;But now I am stuck.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I guess the next step is to dive deeply in the control system, but I am not sure where to begin. I read some articles about the control using PIDs, but I don't know how many should I use, or whether I need to model the quadrotor first to compute kinematic and dynamic of the quadrotor inside the RPi.&#xA;Sorry if the question is too basic!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;More details&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The structure is from a kit. Well, all I have now is the ESCs calibrated, although I do not have documentation of them to adjust the cut off voltage for the LiPo battery. I have been made tests with some Python code I found to have PWM outputs for the motors and to control I2C bus to communicate with IMU. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of my problems now is that I need RPIO library for PWM and the &lt;code&gt;quick2wire-python-api&lt;/code&gt; to work with the I2C libraries from the MIT to control my IMU but as far as I know RPIO works with Python2 and &lt;code&gt;quick2wire&lt;/code&gt; works with Python3 so I don't know how to manage this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So actually, I have no code yet to control the four motors in parallel, only have testing code to test them separately and also with the IMU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;About the IMU, I am still learning how to work with it and how to use the MIT library. The unit includes those sensors:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;ADXL345&lt;/li&gt;&#xA;&lt;li&gt;HMC5883L-FDS&lt;/li&gt;&#xA;&lt;li&gt;ITG3205&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;You can see a picture of the quadrotor below,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/fV5Oy.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fV5Oy.jpg&quot; alt=&quot;Quadrotor&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So as I said before, I would like to know how to handle the control system and how it is implemented inside the Raspberry Pi, and then start to work with the Python code to assemble the motors, the IMU and the control.&lt;/p&gt;&#xA;" OwnerUserId="11050" LastEditorUserId="9176" LastEditDate="2015-11-14T12:13:53.203" LastActivityDate="2016-01-24T02:07:20.647" Title="Quadrotor - Control system, where to begin?" Tags="&lt;control&gt;&lt;pid&gt;&lt;raspberry-pi&gt;&lt;quadcopter&gt;&lt;beginner&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8449" PostTypeId="2" ParentId="1270" CreationDate="2015-11-12T23:40:02.027" Score="3" Body="&lt;p&gt;You need to quantify : &quot;I measured the current through (one of the 4 wires of) my stepper motor, and it's always within a few percent of 0.5 A&quot;. A 'few percent' may be all you need to detect a little extra current during stall (if there is extra current as I would also assume but would need to prove), which can be sensed and compared to normal stepping current.  In some cases 40 uA is major and in some cases 4 mA is major difference. Without measurement parameters from you it is impossible to really advise you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, what exactly is the current for a step versus stall, and is the difference consistent? I would measure all the wires as well...  You are using a unipolar correct? I have used steppers but never bothered to measure current as the steppers I used matched the load requirements and never stalled. So one quick answer is just to get a bigger stepper.&lt;/p&gt;&#xA;" OwnerUserId="10060" LastActivityDate="2015-11-12T23:40:02.027" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8450" PostTypeId="1" CreationDate="2015-11-13T01:54:56.083" Score="0" ViewCount="683" Body="&lt;p&gt;I am working on a robotic application, and I want to control the torque (or current) of brushless DC motors. There are many BLDC speed controllers but I could not find anything related to torque or current. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead of continuously spinning, the motor is actuating a robotic joint, which means I need to control the torque at steady-state, or low-speed, finite rotation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am looking for a low-cost, low weight solution, similar to what &lt;a href=&quot;http://www.mouser.com/new/Texas-Instruments/ti-drv8833c-driver/&quot; rel=&quot;nofollow&quot;&gt;Texas Instruments DRV8833C Dual &#xA;H-Bridge Motor Drivers&lt;/a&gt; does for brushed DC motors.&lt;/p&gt;&#xA;" OwnerUserId="11072" LastEditorUserId="9176" LastEditDate="2015-11-13T14:34:52.017" LastActivityDate="2015-12-30T14:03:24.297" Title="Torque / Current control for BLDC motors" Tags="&lt;brushless-motor&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="8451" PostTypeId="1" CreationDate="2015-11-13T10:14:59.117" Score="0" ViewCount="240" Body="&lt;p&gt;I am computer science student and I have no knowledge on robotics. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my project, I am trying to find controllers for modular robots to make them do specific tasks using evolutionary techniques. For the moment I am doing this in a simulator, but if I want to make physical robots I have to know a priori the components to add to the robot, where do I place them, especially if modules of robot are small (cubes of 5*5*5cm)...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my questions are:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;What are must have components to make physical robot ? (arduino, batteries, sensors, ...)&lt;/li&gt;&#xA;&lt;li&gt;For a small robot how many batteries do I need ?&lt;/li&gt;&#xA;&lt;li&gt;If modules have to communicate with wifi, do I have to put a wifi card on each module?&lt;/li&gt;&#xA;&lt;li&gt;I want to add an IMU. Is its position important, I mean do I have to put it in the middle of the robot ?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Thank you very much.&lt;/p&gt;&#xA;" OwnerUserId="7249" LastEditorUserId="10691" LastEditDate="2015-11-16T09:31:12.253" LastActivityDate="2015-11-16T09:31:12.253" Title="What are hardware components to build a modular robot which consists of several 5x5x5cm modules?" Tags="&lt;arduino&gt;&lt;mechanism&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ClosedDate="2015-11-16T14:09:00.730" ContentLicense="CC BY-SA 3.0" />
  <row Id="8452" PostTypeId="1" CreationDate="2015-11-13T11:24:08.550" Score="-1" ViewCount="41" Body="&lt;p&gt;I would like to put a train on a track and control its movement with high precision left and right using a wireless controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the best way to do it?&lt;/p&gt;&#xA;" OwnerUserId="11017" LastActivityDate="2015-11-13T15:13:58.140" Title="What is the easiest yet precise method one can make a track and a train" Tags="&lt;arduino&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2015-11-16T14:08:08.787" ContentLicense="CC BY-SA 3.0" />
  <row Id="8453" PostTypeId="2" ParentId="8451" CreationDate="2015-11-13T13:12:18.533" Score="2" Body="&lt;p&gt;Its very difficult to answer this question because you haven't asked specific enough questions.  Its very difficult for you to ask specific questions because you don't know the answers to the questions you have.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;That depends on what you want the robot to do, swim, walk, fly or wheels.&lt;/li&gt;&#xA;&lt;li&gt;You need enough batteries to meet the power requirements of your robot for the time you want it to run.  Leave batteries till last.&lt;/li&gt;&#xA;&lt;li&gt;That's your decision.  Do they need Wi-Fi, what about cheaper blue tooth, or could you have on transmitter per robot and all the cubes use wired comms, SPI, Serial or I2C?&lt;/li&gt;&#xA;&lt;li&gt;If the IMU is a cube then it doesn't matter now, you can experiment and move it around based on you results.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Don't limit yourself at this early stage.  You have said you are using an Arduino and then said you want Wi-Fi, what about an ESP8266 instead (I have seen something about mesh computing on them)  There are probably other more suitable processors out there, just leave that cube as &quot;Processor&quot; until you get things a bit firmer.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It sounds a really interesting project&lt;/p&gt;&#xA;" OwnerUserId="10717" LastActivityDate="2015-11-13T13:12:18.533" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8454" PostTypeId="2" ParentId="8452" CreationDate="2015-11-13T15:13:58.140" Score="1" Body="&lt;p&gt;Buy a train set, build it, put the train on it.&lt;br&gt;&#xA;Now take the Train track controller take the speed/direction knob off.&#xA;Buy a remote control car, take the rear wheel off, hook the axel of the car to the train controller and use the RC controller to control your train.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want a more detailed answer then you need to put more detail in your question.&#xA;What model train is it?&#xA;How do you currently control the trains speed and direction?&#xA;What distance does the control need to operate at?&#xA;What is your definition of high precision, a few mm or nanometres?&#xA;What do you mean by best?  Cheapest, easiest, highest precision?&#xA;What is the maximum lag between command and response?&lt;/p&gt;&#xA;" OwnerUserId="10717" LastActivityDate="2015-11-13T15:13:58.140" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8455" PostTypeId="1" CreationDate="2015-11-13T16:46:48.363" Score="1" ViewCount="3104" Body="&lt;p&gt;Can anyone recommend an IR distance sensor that works on black surfaces? I'm looking for something to use as a &quot;cliff&quot; sensor, to help a small mobile robot avoid falling down stairs or off a table, and I thought the &lt;a href=&quot;https://www.pololu.com/product/1132&quot; rel=&quot;nofollow&quot;&gt;Sharp GP2Y0D805Z0F&lt;/a&gt; would work. However, after testing it, I found any matte black surface does not register with the sensor, meaning the sensor would falsely report a dark carpet as a dropoff.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sharp has some other models that might better handle this, but they're all much larger and more expensive. What type of sensor is good at detecting ledges and other dropoffs, but is small and inexpensive and works with a wide range of surfaces?&lt;/p&gt;&#xA;" OwnerUserId="740" LastActivityDate="2015-11-18T10:16:34.147" Title="Small IR distance sensor that works on black surfaces" Tags="&lt;sensors&gt;" AnswerCount="3" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8456" PostTypeId="2" ParentId="8448" CreationDate="2015-11-13T19:48:05.943" Score="2" Body="&lt;p&gt;I would advise against using a Raspberry Pi for your flight control. The Raspberry could be used for higher level decision making algorithms with regards to automation of your vehicle, but the vehicle also needs some real-time algorithms that can react instantaneously to deviations from desired attitude, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason the Raspberry is not the best for this is because it is OS based which means that at any moment in time it could preempt your flight control logic in order to service another request from the OS. This is not what you want. I'm not saying its impossible to do this on an ARM chip but using a Linux based solution would be less than optimal.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are Arduino boards that are ARM based which are not pre-emptive, but then there are also less expensive arduino (AtMel chips) that would have ample processing speed to handle the flight controls.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are several affordable of flight controllers that are available to the hobbyist including:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Naze&lt;/li&gt;&#xA;&lt;li&gt;Ardupilot&lt;/li&gt;&#xA;&lt;li&gt;MultiWii&lt;/li&gt;&#xA;&lt;li&gt;CC3D&lt;/li&gt;&#xA;&lt;li&gt;KK2&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;If you are wanting to write the software yourself, I would suggest buying a MultiWii or CC3D board. Those are basically an arduino with all of the sensors that you would need to control a flying vehicle already attached to the board (accelerometers, gyros, barometer, magnetometer) and with serial ports so you can easily attach GPS, On-screen displays, radio links, etc, etc. Then you only need the basic Arduino developer's kit (opensource) to start coding in C.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can check into other opensource software solutions that will work on some of these boards such as MultiWii, ArduPilot or OpenPilot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would strongly suggest starting with one of these ready-to-go solutions first as you will soon discover that your vehicle will require plenty of attention as far as tuning, balancing and calibrating before it will be airworthy. You might discover that your design isn't well suited to the motors you bought and you might have to buy different kV motors or adjust prop sizes to compensate. Once you know it can fly then you might want to start experimenting with adjusting the code in the existing opensource packages or if you're really bold, build new code from scratch.&lt;/p&gt;&#xA;" OwnerUserId="1075" LastEditorUserId="1075" LastEditDate="2015-11-13T19:53:54.810" LastActivityDate="2015-11-13T19:53:54.810" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8457" PostTypeId="1" AcceptedAnswerId="8460" CreationDate="2015-11-13T22:42:58.407" Score="0" ViewCount="366" Body="&lt;p&gt;I found CAD files for the Create on the &lt;a href=&quot;http://download.ros.org/downloads/turtlebot/&quot; rel=&quot;nofollow&quot;&gt;ROS TurleBot download page&lt;/a&gt; (&lt;a href=&quot;http://download.ros.org/downloads/turtlebot/TurtleBot-Hardware-2011-07-23.zip&quot; rel=&quot;nofollow&quot;&gt;.zip&lt;/a&gt;),&#xA;and shells on the &lt;a href=&quot;https://bitbucket.org/osrf/gazebo_models/src/e024fe922c810f468e2a7ab277750354465478cd/create/?at=default&quot; rel=&quot;nofollow&quot;&gt;gazebo sim page&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any ideas where the files for the Create 2 could be found?&lt;/p&gt;&#xA;" OwnerUserId="11047" LastEditorUserId="11047" LastEditDate="2015-11-16T16:12:51.580" LastActivityDate="2018-07-18T13:40:04.337" Title="Create 2 CAD files" Tags="&lt;design&gt;&lt;irobot-create&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8458" PostTypeId="2" ParentId="8455" CreationDate="2015-11-13T23:08:07.333" Score="3" Body="&lt;p&gt;A surface that appears black doesn't reflect much visible light (it's the absence of visible light reaching your eye that makes it look black), if the surface also doesn't reflect IR light very well, then IR sensors will not work very well (they work by shinning IR light and measuring the intensity of the IR light reflected back). Note you can not tell with certainty whether a surface will reflect infrared by looking at it since you cannot see IR, but if it is the case that your surface isn't reflecting IR, then no IR sensor will work. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Have you considered using an ultrasonic distance sensor (aka ultrasonic rangefinders)? They work using the same principal but with sound (outside of auditory spectrum) instead of light. Or a mechanical sensor?&lt;/p&gt;&#xA;" OwnerUserId="11081" LastActivityDate="2015-11-13T23:08:07.333" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8459" PostTypeId="2" ParentId="8451" CreationDate="2015-11-14T01:42:34.770" Score="0" Body="&lt;p&gt;I agree that this is quite an interesting project. There are several concerns here.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;I think you need to check the dimensions of all the small arduinos to determine whether it can fit in your modules. If not, you probably have to create your own circuit with atmega chip as the controller.&lt;/li&gt;&#xA;&lt;li&gt;The positioning of the IMU is not crucial if you are only concerned about the robot's orientation like yaw, pitch and roll. But if you want to measure angular velocity and angular acceleration, then the positioning is important because you have to take into account the centripetal force effect on the IMU.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="10691" LastActivityDate="2015-11-14T01:42:34.770" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8460" PostTypeId="2" ParentId="8457" CreationDate="2015-11-14T20:16:22.687" Score="2" Body="&lt;p&gt;The CAD you pointed out is for the Turtlebot, and includes electromechanical CAD for that assembly. I only spot-checked a few files, but the only Create-relevant CAD in that package I found was an STL of the robot's outer dimensions. The Create 2 manual should have enough information for someone to produce a solid model of similar precision, but I do not believe iRobot has released a shell for the robot, yet. Maybe you should make one and put it on a site like Thingiverse? There are other designs by iRobot that can be found there for various parts of the robot, like the bin.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt; Please note that I am an iRobot employee, but the postings on this site are my own and don't necessarily represent iRobot's positions, strategies, or opinions. &lt;/sup&gt;&lt;/p&gt;&#xA;" OwnerUserId="7665" LastEditorUserId="7665" LastEditDate="2018-07-18T13:40:04.337" LastActivityDate="2018-07-18T13:40:04.337" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8461" PostTypeId="1" AcceptedAnswerId="8524" CreationDate="2015-11-15T03:36:17.743" Score="5" ViewCount="2610" Body="&lt;p&gt;I'm trying to make artificial muscles using nylon fishing lines (see &lt;a href=&quot;http://io9.com/scientists-just-created-some-of-the-most-powerful-muscl-1526957560&quot; rel=&quot;noreferrer&quot;&gt;http://io9.com/scientists-just-created-some-of-the-most-powerful-muscl-1526957560&lt;/a&gt; and &lt;a href=&quot;http://writerofminds.blogspot.com.ar/2014/03/homemade-artificial-muscles-from.html&quot; rel=&quot;noreferrer&quot;&gt;http://writerofminds.blogspot.com.ar/2014/03/homemade-artificial-muscles-from.html&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So far, I've produced a nicely coiled piece of nylon fishing line, but I'm a little confused about how to heat it electrically.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've seen most people say they wrap the muscle in copper wire and the like, pass current through the wire, and the muscle acuates on the dissipated heat given the wire resistance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have two questions regarding the heating:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) isn't copper wire resistance extremely low, and thus generates very little heat? what metal should I use? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) what circuit should I build to heat the wire (and to control the heating)? Most examples just &quot;attach a battery&quot; to the wire, but afaik that is simply short-circuiting the battery, and heating the wire very inneficiently (and also may damage the battery and it could even be dangerous). So what's a safe and efficient way to produce the heat necessary to make the nylon muscle react? (I've read 150 centigrads, could that be correct?) for example with an arduino? or a simple circuit in a breadboard?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;thanks a lot!&lt;/p&gt;&#xA;" OwnerUserId="7812" LastActivityDate="2016-03-27T23:36:57.787" Title="Electronic circuit for heating nylon fishing line muscle" Tags="&lt;arduino&gt;&lt;electronics&gt;&lt;actuator&gt;" AnswerCount="5" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8462" PostTypeId="1" CreationDate="2015-11-15T14:10:59.987" Score="2" ViewCount="146" Body="&lt;p&gt;I want to build an automatic sliding window shutter and need help&#xA;with part selection and dimensioning.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some assumptions: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;window width 1.4 m&lt;/li&gt;&#xA;&lt;li&gt;sliding shutter weight 25 kg&lt;/li&gt;&#xA;&lt;li&gt;max speed 0.07 m/s&lt;/li&gt;&#xA;&lt;li&gt;max acceleration 0.035 m/s^2&lt;/li&gt;&#xA;&lt;li&gt;pulley diameter 0.04m.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Leaving out friction I need a motor with about 0.02 Nm of torque and a rated speed of 33 rpm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I would like to use:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://electromen.com/en/products/item/motor-controllers/dc-motor-below-10A/EM-140A&quot; rel=&quot;nofollow&quot;&gt;motor controller&lt;/a&gt; with soft-start and jam protection,&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.maedler.de/product/1643/1331/1979/1349/stirnrad-kleingetriebemotoren-sf-24-v-bis-2-nm&quot; rel=&quot;nofollow&quot;&gt;dc motor 24V&lt;/a&gt;,&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.maedler.de/product/1643/1616/986/zahnriemenraeder-t25-fuer-riemenbreite-10-mm-aus-aluminium&quot; rel=&quot;nofollow&quot;&gt;Pulleys and timing belts&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Would you suggest other components or a different setup?&#xA;How do I connect motor and pulleys (clamping set?)?&#xA;Do I need additional &lt;a href=&quot;https://www.maedler.de/product/1643/1629/stehlager&quot; rel=&quot;nofollow&quot;&gt;bearings&lt;/a&gt; because of the radial load?&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;M=P&#xA;M=B=P&#xA;M=P=B&#xA;M=B=P=B&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(M motor, P pulley, B bearing, = shaft)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If so I have to extend the motor shaft. What would I use for that (clamp collars, couplings?)?&#xA;What width do I need for the belts? Which belt profile (T, AT, HDT) should I use?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The construction I am aiming for resembles the one which can be seen on page 6 (pdf numbering) &lt;a href=&quot;http://www.baier-gmbh.de/media/docs/schiebeladen/Schiebeladen-e.pdf&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="11091" LastEditorUserId="11091" LastEditDate="2016-02-07T11:09:41.487" LastActivityDate="2016-03-08T11:36:34.557" Title="Automatic sliding window shutter" Tags="&lt;motor&gt;&lt;design&gt;&lt;microcontroller&gt;&lt;automation&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8463" PostTypeId="1" AcceptedAnswerId="8464" CreationDate="2015-11-15T14:33:34.007" Score="0" ViewCount="229" Body="&lt;p&gt;I have a 3D point in space with it's XYZ Coordinates about some Frame A. I need to calculate the new XYZ coordinates, given the angular velocities of each axis at that instant of time about Frame A&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was referring to my notes, but I'm a little confused. This is what my notes say:&#xA;&lt;a href=&quot;https://imgur.com/yJD8OUi&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://imgur.com/yJD8OUi&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can see, i can calculate the angular velocity vector w given my angular velocities. But I'm not sure how this translates to how to calculate my new XYZ position! How can i calculate the RPY values this equation seems to need from my XYZ, and how can i calculate my new position from there&lt;/p&gt;&#xA;" OwnerUserId="10379" LastActivityDate="2015-11-16T05:46:40.623" Title="Angular velocity to translational velocity" Tags="&lt;mobile-robot&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8464" PostTypeId="2" ParentId="8463" CreationDate="2015-11-15T22:06:19.957" Score="1" Body="&lt;p&gt;Overall, you simply need to rotate each point in your cloud using the rotation matrix $R$. That rotation matrix will be the latest rotation matrix for your vehicle/sensor. You can compute the rotation matrix based on the current values for roll, pitch, and yaw according to the following:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$R = \begin{bmatrix} c_\psi c_\theta &amp;amp; c_\psi s_\theta s_\phi - s_\psi c_\phi &amp;amp; c_\psi s_\theta c_\phi + s_\psi s_\phi \\ s_\psi c_\theta &amp;amp; s_\psi s_\theta s_\phi + c_\psi c_\phi &amp;amp; s_\psi s_\theta c_\phi - c_\psi s_\phi \\ -s_\theta &amp;amp; c_\theta s_\phi &amp;amp; c_\theta c_\phi \end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where $\psi$ is yaw, $\theta$ is pitch, and $\phi$ is roll.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To get the latest roll, pitch, yaw angles you will need to integrate the current roll, pitch, yaw angle &lt;em&gt;rates&lt;/em&gt;. Typically, you will be measuring the &lt;em&gt;body angular rates&lt;/em&gt; using an IMU, but these rates are (a) not in the world frame and (b) not in roll, pitch, yaw form.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, you need to transform the body-frame angular rates into world-frame angular rates. To do that, simply pre-multiply the body rates by the current rotation matrix:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\omega_o = R \omega_b$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where $\omega_o = \begin{bmatrix} \omega_{o,x} \\ \omega_{o,y} \\ \omega_{o,z}\end{bmatrix}$ are the world-frame angular rates and $\omega_b = \begin{bmatrix} \omega_{b,x} \\ \omega_{b,y} \\ \omega_{b,z}\end{bmatrix}$ are the body-frame angular rates.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now that you have the angular rates about each axis in the world frame, you can use that equation you linked to in your question to convert to roll, pitch, yaw rates:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\begin{bmatrix} \omega_{o,x} \\ \omega_{o,y} \\ \omega_{o,z}\end{bmatrix} = \begin{bmatrix} c_\psi c_\theta &amp;amp; -s_\psi &amp;amp; 0 \\ s_\psi c_\theta &amp;amp; c_\psi &amp;amp; 0 \\ -s_\theta &amp;amp; 0 &amp;amp; 1 \end{bmatrix} \begin{bmatrix} \dot{\phi} \\ \dot{\theta} \\ \dot{\psi} \end{bmatrix} $&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\omega_o = E \omega_{rpy}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that you are starting with $\omega_o$ and finding $\omega_{rpy}$, so that means you need the inverse of $E$, and you'll need to watch for singularities (when $\cos \theta = 0$).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\omega_{rpy} = E^{-1} \omega_o$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then integrate the rates to get new roll, pitch, yaw angles, where $\tau$ is your time step:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\phi_{k+1} = \phi_k + \dot{\phi}_k \tau$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\theta_{k+1} = \theta_k + \dot{\theta}_k \tau$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\psi_{k+1} = \psi_k + \dot{\psi}_k \tau$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Those new roll, pitch, yaw values give you a new rotation matrix. Then just rotate the points in your point cloud accordingly. Keep in mind that you want to predict the new point cloud in the body frame as your question states. This rotation matrix takes vectors in the body frame and defines them in the world frame, so you need to do the opposite, which just means using the inverse of the rotation matrix.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, for a point $p_{o,i}$ in the world frame, its coordinates in the body frame $p_{b,i}$ are defined by:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$p_{b,i} = R^{T} p_{o,i}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where the transpose $R^T$ is the same as the inverse $R^{-1}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also note that my equations might look a bit confusing since I am only including the time step index $k$ when showing the forward integration of roll, pitch, yaw angles. You'll be using the rotation matrix from the &lt;em&gt;previous&lt;/em&gt; time step to convert the angular rates in the &lt;em&gt;current&lt;/em&gt; time step to the world frame, then updating the roll, pitch, yaw rates and angles, and then computing the rotation matrix for the &lt;em&gt;current&lt;/em&gt; time step in order to transform your point cloud (unless this is part of a graph-based solution).&lt;/p&gt;&#xA;" OwnerUserId="10836" LastEditorUserId="10836" LastEditDate="2015-11-16T05:46:40.623" LastActivityDate="2015-11-16T05:46:40.623" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8465" PostTypeId="2" ParentId="8262" CreationDate="2015-11-16T00:27:53.173" Score="3" Body="&lt;p&gt;I bought an AR done 2.0 for my research.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I used Labview to process the realtime video feed from either the bottom camera of the drone or the front camera.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can read more details on how to setup the 3rd party free library to use Labview to control and to receive realtime sensors data and video feed as well:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://sine.ni.com/nips/cds/view/p/lang/en/nid/211837&quot; rel=&quot;nofollow&quot;&gt;AR Drone Toolkit for LabVIEW - LVH&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11036" LastActivityDate="2015-11-16T00:27:53.173" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8466" PostTypeId="1" AcceptedAnswerId="8467" CreationDate="2015-11-16T00:37:19.083" Score="1" ViewCount="42" Body="&lt;p&gt;I'm a researcher in a lab that's starting work on some larger humanoid/quadruped robots as well as a quadcopter. Currently, we have several power supplies that have a max rating of 30V/30A and our modified quadcopter easily maxes out the current limit with only half of its propellers running. It seems like most power supplies are meant for small electronics work and have fairly low current limits. I think that I want to look for power supplies that are able to provide between 24-48V and higher than 30A for an extended period of time. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;1.) Is this unreasonable or just expensive? &#xA;2.) Do most labs just connect PSUs in series to get higher voltages?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks for the input.&lt;/p&gt;&#xA;" OwnerUserId="7537" LastActivityDate="2015-11-16T07:14:41.357" Title="Sizing high current power supplies for large robots" Tags="&lt;quadcopter&gt;&lt;power&gt;&lt;humanoid&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8467" PostTypeId="2" ParentId="8466" CreationDate="2015-11-16T07:14:41.357" Score="0" Body="&lt;p&gt;1) A powersupply with 1kW is definetly not enought for lab tests with mobile robots, especially with quadrotors. If you do naive fallacy your quadrotor is limited to around 4 kg. Take the main frame with the motors, place a decent 2D or even 3D scanner on it and a CPU which can handle some data, and the quadrotor will be more than 4kg. I have seen quadrotors with peak power of around 10kW. I recommend using a power supply which can provide a bit more then the power which is needed to hover the quadrotor (rule of thumb: 250Watt/kg).&lt;br&gt; The mobile robot should use less then the quadrotor in most cases. &lt;br&gt;&lt;br&gt;&#xA;2)Connect them in series for more Voltage... sure no problem at all. &lt;br&gt;But connecting them in parallel for more current...Don't do this the current flowing across the PSU can fry them easily.&lt;/p&gt;&#xA;" OwnerUserId="6911" LastActivityDate="2015-11-16T07:14:41.357" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8468" PostTypeId="2" ParentId="8455" CreationDate="2015-11-16T07:33:17.873" Score="3" Body="&lt;p&gt;Ultrasonic sensors have a deadband of about 2-5 cm, so wouldn't be useful for close-range sensing. Also ultrasonics work best with hard, solid surfaces. Carpet, clothing, drapes, cushions, etc. will absorb much of the ultrasonic pulse and are likely to result in a faulty reading with the target appearing much further away than it really is. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The key for any sort of &quot;cliff sensor&quot; is that you are looking for a change in measurement by a significant value from previous measurements. I've built robots before that are programmed to avoid table edges and were using IR sensors. The heuristic for avoiding a table edge or stairway isn't to look for a specific value but a large change. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;//assuming distance is measured in raw sensor values vs. cm or inches. &#xA;if ( abs(cur_distance - last_distance) &amp;gt; 100)  &#xA;{&#xA;&#xA; //do some avoidance logic here&#xA;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This will work even if the sensors return weak or off-scale measurements when passing over a dark surface. &lt;/p&gt;&#xA;" OwnerUserId="11097" LastActivityDate="2015-11-16T07:33:17.873" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8469" PostTypeId="2" ParentId="8461" CreationDate="2015-11-16T14:18:00.433" Score="0" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;1) isn't copper wire resistance extremely low, and thus generates very little heat? what metal should I use? &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes plain copper wire does have very low resistance, so I guess you would need a power supply which has a low voltage and high current to do this. (And a suitable high current controller to do the actual switching, unless you're starting with just a manual switch.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively you could perhaps look at nichrome wire which has a higher resistance and is commonly used for lots of heating wires.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Whichever heating wire you use, beware of hot wire touching the nylon directly and cutting or otherwise damaging it. I assume these &quot;muscles&quot; work by heating the nylon to some specified, fairly low temperature but I haven't seen any real detail about how they arrange the heating...&lt;/p&gt;&#xA;" OwnerUserId="9578" LastActivityDate="2015-11-16T14:18:00.433" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8471" PostTypeId="1" CreationDate="2015-11-16T17:30:45.033" Score="1" ViewCount="310" Body="&lt;p&gt;I have a preliminary design for a legged robot that uses compliant elements in the legs and in parallel with the motors for energy recovery during impact as well as a pair of flywheels on the front and back that will oscillate back and forth to generate angular momentum. I'd like to create a dynamic simulation of this robot in order to be able to test a few control strategies before I build a real model. What simulation package should I be using and why? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have heard good things about MSC Adams, namely that it is slow to learn, but has a lot of capability, including integration with matlab and simulink. I have also heard about the simmechanics toolbox in matlab, which would be nice to use since I already am decent with CAD and know the matlab language. I am not yet familiar with simulink, but have used Labview before.&lt;/p&gt;&#xA;" OwnerUserId="7537" LastActivityDate="2016-01-14T14:05:17.320" Title="Dynamic simulation of compliant elements in quadruped robot" Tags="&lt;mobile-robot&gt;&lt;design&gt;&lt;dynamics&gt;&lt;matlab&gt;&lt;simulation&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8474" PostTypeId="1" AcceptedAnswerId="8478" CreationDate="2015-11-16T22:39:26.837" Score="1" ViewCount="1841" Body="&lt;p&gt;Is kinematic decoupling of a 5DOF revolute serial manipulator also valid?&#xA;The three last joints is a spherical joint. Most literatures only talks about decoupling of 6DOF manipulators.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance,&#xA;Oswald&lt;/p&gt;&#xA;" OwnerUserId="11104" LastActivityDate="2015-11-18T08:49:50.567" Title="Kinematic decoupling" Tags="&lt;kinematics&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8475" PostTypeId="1" AcceptedAnswerId="8479" CreationDate="2015-11-16T23:21:18.300" Score="2" ViewCount="1892" Body="&lt;p&gt;I have a &lt;a href=&quot;http://store.amequipment.com/218-series-gearhead-motor-64mm-12v-right-hand-p-354.html&quot; rel=&quot;nofollow&quot;&gt;motor&lt;/a&gt; with a stall current of up to 36A. I also have a &lt;a href=&quot;http://pololu.com/product/705&quot; rel=&quot;nofollow&quot;&gt;motor controller&lt;/a&gt; which has a peak current rating of 30A. Is there any way I could reduce the stall current or otherwise protect the motor controller?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I realize the &quot;right&quot; solution is to just buy a better motor controller, but we're a bit low on funds right now.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I thought of putting a resistor in series with the motor and came up with a value of 150mΩ, which would reduce the maximum current draw to 25A (given the 12V/36A=330mΩ maximum impedance of the motor). Is there any downside to doing this? Would I be harming the performance of the motor beyond reducing the stall torque?&lt;/p&gt;&#xA;" OwnerUserId="11105" LastEditorUserId="11105" LastEditDate="2015-11-16T23:39:40.697" LastActivityDate="2015-11-17T09:59:08.110" Title="How can I reduce a motor's maximum current draw?" Tags="&lt;motor&gt;&lt;microcontroller&gt;&lt;current&gt;" AnswerCount="2" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="8476" PostTypeId="2" ParentId="8474" CreationDate="2015-11-16T23:45:37.223" Score="2" Body="&lt;p&gt;Kinematic decoupling really depends on the configuration of your particular manipulator. When you decouple the wrist, it is typically so that you can take any given end-effector pose and determine the required wrist configuration separately before determining the required arm configuration that puts the wrist-connecting joint at the required location.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typically, the wrist needs to be able to provide the 3 DOF necessary to achieve any &lt;em&gt;orientation&lt;/em&gt; for this to be possible. The position of the innermost wrist joint itself is then the desired position for the end of the rest of the manipulator (3 or 4 other DOF). If your wrist provides 3 DOF with a spherical configuration as you mention, then it meets this requirement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, if you only have 5 DOF then that means you are underactuated for full 6 DOF end-effector space -- you could come up with an end-effector pose that is impossible to achieve. On the other hand, if you are constraining yourself to work with end-effector poses that you know are possible, then decoupling the wrist will work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Decoupling the wrist just makes it easier to analyze the inverse kinematics since you can solve for the wrist joint angles separately. In general, the technique could be applied to a wrist that is constrained to planar motion or pan-tilt type rotation only, as long as the desired end-effector pose is achievable.&lt;/p&gt;&#xA;" OwnerUserId="10836" LastEditorUserId="10836" LastEditDate="2015-11-17T09:36:55.527" LastActivityDate="2015-11-17T09:36:55.527" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8477" PostTypeId="2" ParentId="8475" CreationDate="2015-11-17T06:06:23.307" Score="1" Body="&lt;p&gt;Heat is an important problem with a series resistor used to limit stall current.  Wattage of I amperes through R Ω is I²R, so 7.35 watts of heat are produced at the motor's nominal 7 A operating current, and 93.75 W at a 25 A stall current.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can avoid some loss at the 7 A level by using an inexpensive &lt;a href=&quot;https://www.bulbamerica.com/products/ushio-100w-ja-series-12v-h1-100-aircraft-bulb?CAWELAID=120150920000391645&amp;amp;CAGPSPN=pla&amp;amp;catargetid=120150920001260210&amp;amp;cadevice=c&amp;amp;gclid=CILWo_yqlskCFRKRfgodruUD5g&quot; rel=&quot;nofollow&quot;&gt;light bulb&lt;/a&gt; as a resistor.  The filament's resistance increases approximately as the square of current (more accurately, as the 1/.55 power; see page 3 of &lt;em&gt;A Primer on Driving Incandescent Lamps&lt;/em&gt; via &lt;a href=&quot;http://www.allegromicro.com/SearchResults.aspx?q=driving+incandescent+lamp&amp;amp;x=0&amp;amp;y=0&quot; rel=&quot;nofollow&quot;&gt;PDF link at allegromicro.com&lt;/a&gt; ).  For example, a 100 W, 4 V light bulb will drop about 3.75 volts at 25 A, vs. about 0.37 V at 7 A, for a loss of only 2.6 W instead of the 7.35 W a fixed .15 Ω resistor would be dissipating at those currents.  However, in general light bulbs are more fragile than fixed-resistance power resistors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Various motor starters are available that shut off in case of overload.  Typically, in case of overload a small resistor heats up a bimetallic strip – somewhat like a thermostatic action – causing it to open a contact.  Different resistors can be used to select different opening currents.  See eg a &lt;a href=&quot;http://www.practicalmachinist.com/vb/transformers-phase-converters-and-vfd/how-do-heaters-work-magnetic-motor-starter-147808/&quot; rel=&quot;nofollow&quot;&gt;practicalmachinist.com thread about heaters&lt;/a&gt;.  More-modern motor starters may use Hall-effect sensors. &lt;/p&gt;&#xA;" OwnerUserId="478" LastActivityDate="2015-11-17T06:06:23.307" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8478" PostTypeId="2" ParentId="8474" CreationDate="2015-11-17T08:00:05.073" Score="0" Body="&lt;p&gt;UPDATE Based on the comment below that the answer is not correct:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Kinematic decoupling divides the inverse kinematics problem into two parts. Coordinates of the wrist center point are calculated and based on those all the joint angles behing the wrist center point have to be determined. If this is possible, kinematic decoupling can be applied in you case. In other words if you can calculate a number of coordinates of the wrist center point that fully determines all joint angles behind your wrist center point than ... there you have it... kinematic decoupling works for you...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The original answer:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Yes, kinematic decoupling will work under 1 condition. You have to be able to determine the XYZ coordinates of your wrist center point (where the wrist axes intersect eachother) from the desired end effector coordinates. If the IK is solvable or not for the given input (i.e. the pose can be reached) is not a question of the kinematic decoupling but a question of the inverse kinematics&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I may have been to fast in assuming XYZ, other coordiantes might be OK, depending on how many joints are there behind the wrist, XY could be enough. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have 5 DOF and have the desired TCP coordinates (X, Y, A, B, C) you cannot calculate XYZ of the wrist center point, but not calcualting XYZ may be ok, if the coordinates you can calculate are enough to determine all joint angels before the wrist center point., So if you have X and Y of the wrist center point, and 2 joint before the wirst center point, if the X and Y coordaintes fully determine the q1 and q2 angles, kinematic decoupling can be used to write the IK equations.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2015-11-18T08:49:50.567" LastActivityDate="2015-11-18T08:49:50.567" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="8479" PostTypeId="2" ParentId="8475" CreationDate="2015-11-17T09:53:01.347" Score="1" Body="&lt;p&gt;First of all the link you posted states that your motor driver carrier board has built-in overcurrent protection...so...where is the problem? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it does not have:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Put a fuse in series with the motor that will protect the controller (you can find slow fuses that allow higher current for short time). Then implment a current control loop with output saturation, basicly you give the pwm to the motor based on current (in mechanical terms it will be a torque controller with a maximum torque as a parameter). That way you have the fuse as a fallback safety and operationally if everything works finewith the current controller you can be sure that the fuse will not be used. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I assume you need velocity controll or position control for the motor, that is no problem, just use cascading control loops where the inner loop in is a current (torque controller) the middle loop is a velocity controller and the outer loop is a position controller, &lt;a href=&quot;http://www.globalspec.com/reference/13556/179909/chapter-7-2-6-control-paradigms-some-applications&quot; rel=&quot;nofollow&quot;&gt;like this&lt;/a&gt;. It is the way industrial drive amplifiers for motion control work...&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2015-11-17T09:59:08.110" LastActivityDate="2015-11-17T09:59:08.110" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8480" PostTypeId="1" CreationDate="2015-11-17T15:39:31.967" Score="5" ViewCount="92543" Body="&lt;p&gt;I'm reading from Astrom &amp;amp; Murray (2008)'s &lt;em&gt;Feedback Systems: An introduction for scientists and engineers&lt;/em&gt; about the difference between feedback and feedforward.  The book states:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Feedback is reactive: there must be an error before corrective actions are taken.  However, in some circumstances, it is possible to measure a disturbance before the disturbance has influenced the system.  The effect of the disturbance is thus reduced by measuring it and generating a control signal that counteracts it.  This way of controlling a system is called &lt;em&gt;feedforward&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The passage makes it seem that feedback is reactive, while feedforward is not.  I argue that because feedforward control still uses sensor values to produce a control signal, it is still &lt;em&gt;reactive&lt;/em&gt; to the conditions that the system finds itself in.  So, how can feedforward control possibly be any different from feedback if both are forms of reactive control?  What really separates the two from each other?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A illustrative example of the difference between the two would be very helpful.&lt;/p&gt;&#xA;" OwnerUserId="2295" LastActivityDate="2020-04-15T23:09:25.277" Title="What's the difference between feedback and feedforward control?" Tags="&lt;control&gt;" AnswerCount="6" CommentCount="0" FavoriteCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="8481" PostTypeId="2" ParentId="8480" CreationDate="2015-11-17T16:22:46.097" Score="5" Body="&lt;p&gt;It is arguable what is called reactive and what is not... however what is measured by sensors and what information the controller possesses is not arguable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In feedback control, the system's outputs are measured and if they do not match the desired output (reference) the controlled parameter is recalculated. If the input does not change, these differences usually come from disturbances. The controller has a feedback from the system's output which quantifies &quot;how far&quot; it is from the desired state, regardless of what causes this difference.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In feedforward control, the disturbances are measured and the controlled parameter is calculated based on some mathematical (or logical) model. There is no feedback to see if the system is really in the desired state or &quot;how far&quot; it is from the desired state. If disturbances that are not measured cause the system's outputs to differ from the desired one, the controller will not react.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So to formulate it with &quot;reactive&quot; I would say that feedback control is reactive since it reacts to changes in the system's output while feedforward is proactive since it acts before the system's output change. The important factor in control theory is the controlled system output; that is probably why reactive is defined from the point of view of the change in the system's output. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Feedforward also reacts to something, but this something is not the system's output so from the point of view of the system's output it is not reactive. In feedforward control, the system's output can change without any reaction from the controller while in feedback control any change in the system output will provoke a reaction of the controller. Since the important aspect is the system's output and the feedforward controller does not react to changes in the output it can be considered a non-reactive control method.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Illustration from &lt;a href=&quot;https://en.wikipedia.org/wiki/Feed_forward_(control)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia&lt;/a&gt;, (a) open loop, (b) feedforward, (c) feedback&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/qjTGV.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qjTGV.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="16979" LastEditDate="2020-04-15T23:09:25.277" LastActivityDate="2020-04-15T23:09:25.277" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="8482" PostTypeId="2" ParentId="8471" CreationDate="2015-11-17T16:54:03.060" Score="2" Body="&lt;p&gt;Matlab Simulink has a blockset called Simmechanics. It is very well suited for robotic simulation (it is ment for multibody mechanics simulations). It is a bit tricky to set it up for mobile robots (get the force reaction from the ground) but you can find demos and examples to do that. Like &lt;a href=&quot;http://www.ntu.edu.sg/home/mffyap/web/docs/buggy.pdf&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Compliance is however more tricky. If you want to simulate it exaclty, you will need to used a Finite Element Analysis software (e.g Ansys, CosmosWorks for SolidWorks, ...). If you are fine with very very rough approximations of the compliance simulation you can set up additional joints in SimMechanics with a spring damper actutation which will act as a comliant joint. Like &lt;a href=&quot;http://www.mathworks.com/company/newsletters/articles/modeling-flexible-bodies-in-simmechanics-and-simulink.html&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have never worked with Adams, but I assume in your case it does not offer any additional functionality when compared to SimMechanics. However it might be easier to implement mobile robots in Adams. I do not know if Adams can also do finite element simulations. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am a bit worried about simulating the oscillations with any multibody simulations tool. Normally in multibody simultations a sample time of 1ms is enough. In your case the sample time will very much influence how precisly the oscilations will be simulatied and a 1 ms sample time might make your model unusable (if you have 1khz oscilations, you would have 1 sample from each oscillation, which is unusable).Pease make sure to colerate the sample time with the oscilations, as a rule of thumb I would recommend 10 samples per oscilation (I think the Nyquist theorem recommends at least 2)&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2015-11-17T16:54:03.060" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8483" PostTypeId="1" CreationDate="2015-11-17T18:05:25.400" Score="1" ViewCount="87" Body="&lt;p&gt;The title pretty much says it all.  I'm on a team that is currently building a robotic arm for the capstone project of my engineering degree, our design is similar to the &lt;a href=&quot;http://i.ebayimg.com/00/s/MTYwMFgxNjAw/z/M80AAOSwFAZTujbJ/$_35.JPG&quot; rel=&quot;nofollow&quot;&gt;Dobot&lt;/a&gt; (5 degrees of freedom). We purchased our 6 servomotors, and each one requires 2A at 6V.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;From my preliminary research, I haven't been able to find a power source that could satisfy this.  We'd rather not purchase six individual AC/DC power source for each servo, and we've heard that these can introduce problems, as they aren't necessarily voltage-regulated.  Another suggestion we've received is to buy a computer power source, and modify it to output our the voltage and amperage we need. This raises some concerns, since our professor running the course might find this dangerous.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We'd like some input into how we can power our servos effectively, without going overboard on costs (we are students, after all).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="11109" LastEditorUserId="37" LastEditDate="2018-08-15T15:21:13.243" LastActivityDate="2018-08-15T15:21:13.243" Title="Powering 6 servomotors requiring 6V and 2A each" Tags="&lt;servomotor&gt;&lt;power&gt;&lt;robotic-arm&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8484" PostTypeId="2" ParentId="8483" CreationDate="2015-11-17T19:13:31.440" Score="0" Body="&lt;p&gt;Working with a low voltage power supply, which is not modified/hacked is way less dangerous then a robot arm with 120Watt. This guy will hurt you more. Anyway your idea with the power supply of a computer is a pretty economic one. Sure there are 6Volt AC/DC Converters on the market. They just cost a bit in a 120Watt version. But the question which remains is how to get the 6Volt out of the 12Volt power supply? &lt;br&gt;&#xA;My suggestion: Use basic LM350 chips. Those little guys provide you with an adjustable voltage and up to 3amps. Place one curcuitry before each motor and you are fine. These chips are not voltage controlled. You adjusted them with a resistor at one pin. There are other chips which are voltage controlled (also for 6volt) but I can't remeber their names right now. With this setup you have to buy parts for around 10USD (I assumed you will find an old computer power supply). &lt;br&gt;&lt;/p&gt;&#xA;" OwnerUserId="6911" LastActivityDate="2015-11-17T19:13:31.440" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8485" PostTypeId="2" ParentId="8461" CreationDate="2015-11-17T20:19:08.830" Score="2" Body="&lt;p&gt;As far as how to heat the nylon muscles, one of the articles that you have linked to provides a number of methods for doing so. The two most promising from an experimental perspective are submersing the muscle in water or a flow of air, which you then heat/cool (e.g. with a pool pump or hair dryer), or using silver-coated nylon sewing threads, which integrates the heating element and nylon together.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as a circuit for simply heating a wire (like the second option above), I have personally had pretty good success with shape memory alloys by using high-power DC/DC converters to generate a low voltage/high current signal, which can be switched on and off using high current MOSFETs controlled by logic-level outputs (e.g., from an Arduino).&lt;/p&gt;&#xA;" OwnerUserId="10414" LastActivityDate="2015-11-17T20:19:08.830" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8486" PostTypeId="1" AcceptedAnswerId="8506" CreationDate="2015-11-17T21:42:27.633" Score="3" ViewCount="1363" Body="&lt;p&gt;I'm currently in a (risky) project that involves me building the fastest quad I can afford.&lt;/p&gt;&#xA;&lt;p&gt;I'm trying to get something close to this &lt;a href=&quot;https://www.youtube.com/watch?v=xQon7OD5CnY&quot; rel=&quot;nofollow noreferrer&quot;&gt;extremely fast warpquad&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;After reading a lot about quadcopters, as I know I can buy all this and it should fit together and fly without any problem.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Motors: Multistar Elite 2306-2150KV&#xA;ESC: Afro Race Spec Mini 20Amp&#xA;Quanum neon 250 carbon racing frame(I love how it looks)&#xA;6Inch Props&#xA;CC3D flight controller&#xA;4S 1400mah 40-80C Battery&#xA;Any 6ch radio&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;My questions are:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Am I wrong or missing something? as I had only read about it (thinking this is a common build for racer quad).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Will this overheat (bad consequences) if I let it drain the full battery at 100% throttle?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Will this fly at least 4 minutes under the previous conditions?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Should I get a higher C-rating battery?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;As I can't find better motors of that size, is the only way to improve its speed by putting a 6S battery? and what would happen if I do it?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Should I put the 6inch props or 4inch? I know 4inch should get faster rpm changes but will it be noticeable at these sizes?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;And in general, any tips to make it faster will be welcome.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="11111" LastEditorUserId="19515" LastEditDate="2020-07-27T18:28:32.060" LastActivityDate="2020-07-27T18:28:32.060" Title="How to build a fast quadcopter?" Tags="&lt;quadcopter&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8487" PostTypeId="1" AcceptedAnswerId="8488" CreationDate="2015-11-17T22:27:25.110" Score="2" ViewCount="142" Body="&lt;p&gt;I am working with a Create 2 and I am executing a simple sequence like (in pseudocode):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;create serial connection from Macbook to Create&#xA;&#xA;start the OI with by sending the 128 code&#xA;&#xA;send a pause-stream command (just to be safe)&#xA;&#xA;initiate the data streaming with ids: [29, 13]&#xA;&#xA;every 0.5 seconds for 15 seconds:&#xA;    poll the streamed sensor data and print it&#xA;&#xA;send a pause-stream command before shutdown&#xA;&#xA;send a 128 to put the robot in &quot;passive mode&quot; (I have also tried 173)&#xA;&#xA;close the serial connection&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The outcome when I run the above program repeatedly is that it works the first time, I see sensor data (that seems to not change or be reactive) printing to the screen, but on future runs no serial can be read and the program crashes (because I am throwing an exception because I want to get this problem ironed out before getting to far along with other things). If I unplug and replug my USB cable from my Macbook, then the program will work for another run, and then fall back into the faulty behavior.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do not experience this issue with other things like driving the robot, I am able to run programs of similar simplicity repeatedly. If I mix driving and sensor streaming, the driving works from program run to program run, but the data streaming crashes the program on the subsequent runs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have noticed that if I want to query a single sensor, I need to pause the stream to get the query response to come through on the serial port, and then resume it. That is why I am so inclined to pause/restart the stream.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Am I doing something wrong, like pausing the stream too often? Are there other things I need to take care of when starting/stopping the stream? Any help would be appreciated!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt;&#xA;I should note that I am using Python and pyserial. I should also note, for future readers, that the iRobot pushes its streamed data to the laptop every 15ms where it sits in a buffer, and the data sits there until a call to serial.read() or to serial.flushInput(). This is why it seemed that my sensor values weren't updating when I read/polled every half second, because I was reading old values while the current ones were still buried at the back of the buffer. I worked around this issue by flushing the buffer and reading the next data to come in.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT 2:&lt;/strong&gt;&#xA;Sometimes the above workaround fails, so if I detect the failure, I pause the stream, re-initialize the stream, and read the fresh data coming in. This seems to work pretty well. It also seems to have solved the issue that I originally asked the question about. I still don't know &lt;em&gt;exactly&lt;/em&gt; why it works, so I will still accept @Jonathan 's answer since I think it is good practice and has not introduced new issues, but has at least added the benefit of the robot letting me know that it has started/exited by sounding tones.&lt;/p&gt;&#xA;" OwnerUserId="11068" LastEditorUserId="11068" LastEditDate="2015-11-19T19:35:17.563" LastActivityDate="2015-11-19T19:35:17.563" Title="Is there a way to disconnect and reconnect from a Create 2 that was streaming sensor readings without having to unplug/replug my USB-serial cable?" Tags="&lt;mobile-robot&gt;&lt;irobot-create&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8488" PostTypeId="2" ParentId="8487" CreationDate="2015-11-18T00:39:14.467" Score="1" Body="&lt;p&gt;I usually do this to disconnect and I've had no issues with it to date:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;128 // To put in passive mode&#xA;173 // To stop OI&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If you only do 128 or 173 on their own, I could see it potentially having issues since it may not exit OI depending on what mode you were in. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do not request the stream to be paused, though I can't imagine that hurting.&lt;/p&gt;&#xA;" OwnerUserId="9743" LastEditorUserId="9743" LastEditDate="2015-11-18T01:48:36.297" LastActivityDate="2015-11-18T01:48:36.297" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8489" PostTypeId="2" ParentId="3160" CreationDate="2015-11-18T02:07:40.507" Score="2" Body="&lt;p&gt;There are two ways to do this without using ROS(and indeed the ROS drivers are in fact, wrapping the commands that are sent to the Create base). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the original(ca. 2007) Create, you might want to see if you can find a &quot;Command Module&quot; on eBay or something. This has an ATMEGA 168 AVR in it with a USB/serial connection and the pins coming off the ATMEGA connected to several DB-9 connectors.(These are NOT serial ports). You write C code to program the AVR, which talks to the Create through its DB-25 connector. &#xA;This tends to involve a lot of bit-masks and bit-shifting since some of the AVR pins are connected to the motors, bumpers, etc. of the Create. If you're not experienced in low-level programming in C or Assembly, this would not be the most productive way for you to control it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;OR&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can send OIS commands to the Create via the DIN-8 connector. This involves sending a series of bytes to the Create through a USB/Serial cable which tell it what to do. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope that helps you some.&lt;/p&gt;&#xA;" OwnerUserId="11097" LastActivityDate="2015-11-18T02:07:40.507" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8490" PostTypeId="2" ParentId="8461" CreationDate="2015-11-18T05:49:13.547" Score="1" Body="&lt;p&gt;For a heating element you &lt;em&gt;want&lt;/em&gt; lower resistance -- remember $V = I R$, so high resistance means lower current, and that in turn means lower power for the same applied voltage since $P = \frac{V^2}{R}$. Resistive heating (or &lt;a href=&quot;https://en.wikipedia.org/wiki/Joule_heating&quot; rel=&quot;nofollow&quot;&gt;Joule heating&lt;/a&gt;) is therefore best achieved with lower resistance elements rather than higher resistance elements (see &lt;a href=&quot;http://www.explainthatstuff.com/heating-elements.html&quot; rel=&quot;nofollow&quot;&gt;this explanation&lt;/a&gt;). As pointed out in Andy's answer, the preferred metal for resistive heating is nichrome. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, you might be able to get away with using copper wire if you put it in series with two resistors (one on each end). You want to select resistors so that the voltage across the copper wire heating segment is high enough to generate the heat you want but not so high that you draw too much current.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Take a look at an AWG wire chart to figure out the maximum current for your copper wire gauge, and use that as a ballpark for starting a design. Of course make sure your resistors are also rated for their expected power based on the current.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Considering a circuit with a DC source (say a battery), a resistor, your heating element wire (which is just a resistor too), and another resistor, you have the following equation for the voltage:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$V_{applied} = 2 V_R + V_H$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where $V_{applied}$ is the voltage of your power supply or battery, $V_R$ is the voltage across each of the two resistors, and $V_H$ is the voltage across the copper wire heating element. Since all the components are in series, we can write:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$V_{applied} = \left( 2 R + R_H \right) I$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where $R$ is the resistor resistance, $R_H$ is the heating element resistance, and $I$ is the current.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, if you know your applied voltage and your heating element resistance (easy to compute for a given length of copper wire), you can find the necessary resistor resistance $R$ for a desired current.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$R = \frac{1}{2} \left( \frac{V_{applied}}{I} - R_H \right)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That desired current will be chosen so that you don't exceed the limit of the wire -- hopefully that gets hot enough. Then select resistors that have the necessary resistance and are rated for the applied power:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$P_R = I^2 R$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This has all been suggested assuming that you can regulate the applied voltage as you desire. In order to do that you'll want some kind of switch and I also suggest using an Arduino as you mention and as pointed out by Brandon J DeHart.&lt;/p&gt;&#xA;" OwnerUserId="10836" LastActivityDate="2015-11-18T05:49:13.547" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8491" PostTypeId="1" AcceptedAnswerId="8494" CreationDate="2015-11-18T08:27:48.370" Score="0" ViewCount="150" Body="&lt;p&gt;Given two robot arms with TCP (Tool Center Point) coordinates in the world frame is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$X_1 = [1, 1, 1, \pi/2, \pi/2, -\pi/2]$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$X_2 = [2, 1, 1, 0, -\pi/2, 0]$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The base of the robots is at:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$Base_{Rob1} = [0, 0, 0, 0, 0, 0]$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$Base_{Rob2} = [1, 0, 0, 0, 0, 0]$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(The coordinates are expressed as successive transformations, X-translation, Y-translation, Z-translation, X-rotation, Y-rotation, Z-rotation. None of the joint axes are capable or continuous rotations.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How many degrees does the TCP of robot 2 have to rotate to have the same orientation as the TCP of robot one?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is the calculation &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\sqrt{(\pi/2 - 0)^2 + (\pi/2 - (-\pi/2))^2 + (-\pi/2 - 0)^2}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;wrong? If yes, please specify why.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;UPDATED:&#xA;is the relative orientation of the two robots [π/2,π/2,−π/2]−[0,−π/2,0]=[π/2,π,−π/2]? but the euclidean distance cannot be applied to calculate angular distance?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In other words:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;While programming the robot, and tool frame is selected for motion, to match the orientation of the other one, i would have to issue a move_rel($0, 0, 0, \pi/2, \pi, -\pi/2$) command, but the executed motion would have magnitude of $\pi$?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;While programming the robot, and world frame is selected for motion, to match the orientation of the other one, i would have to issue a move_rel($0, 0, 0, \pi, 0, 0$) command, and the executed motion would have magnitude of $\pi$?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="110" LastEditDate="2015-11-18T17:59:33.453" LastActivityDate="2015-11-18T17:59:33.453" Title="Relative orientation of two robots" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;geometry&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8493" PostTypeId="2" ParentId="8455" CreationDate="2015-11-18T10:16:34.147" Score="0" Body="&lt;p&gt;The problems with the Sharp sensor you've listed are: it's infra red only, and it's a digital on/off signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you're hoping to detect a ledge or cliff, perhaps you could use an analogue sensor instead. Looking over the side of the ledge, we might reasonably expect the light level to change in some way, unless the room is in complete darkness - so if you suddenly detect a change in light level, you might be near the edge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note this may be affected by patterned carpets/tabletops though, or even by people switching the room lights... the only way is to try it and see.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another possibility is to abandon visual sensors and use something that gently touches the floor - a flexible feeler like a cat's whisker, or a lever going down to a smooth roller or slider. But this could get tangled if there's clutter in the environment, such as loose wires or the edge of a rug.&lt;/p&gt;&#xA;" OwnerUserId="9578" LastActivityDate="2015-11-18T10:16:34.147" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8494" PostTypeId="2" ParentId="8491" CreationDate="2015-11-18T10:21:12.513" Score="1" Body="&lt;p&gt;Applying the rotation sequence (x-y-z) that you specify, your first robot tool will have the following rotation matrix:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$R_1 = \begin{bmatrix} 0 &amp;amp; 0 &amp;amp; -1 \\ 0 &amp;amp; -1 &amp;amp; 0 \\ -1 &amp;amp; 0 &amp;amp; 0 \end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While your second robot tool will have the following rotation matrix:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$R_2 = \begin{bmatrix} 0 &amp;amp; 0 &amp;amp; -1 \\ 0 &amp;amp; 1 &amp;amp; 0 \\ 1 &amp;amp; 0 &amp;amp; 0 \end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a figure to clarify, where the subscript 0 refers to the world coordinate frame, 1 refers to robot 1, and 2 refers to robot 2. Coordinate frames are shown with the x-axis in red, y-axis in green, and z-axis in blue -- grey lines show the world-frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/wnm24.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wnm24.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are actually infinite solutions that would rotate you from frame 1 to frame 2, but the simplest would be to rotate about the world frame x-axis by 180 degrees.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We can get that mathematically by looking at the rotation necessary to transform frame 2 to frame 1:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$R_1 = R_{2\rightarrow 1} R_2$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$R_{2 \rightarrow 1} = R_1 R^T_2$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$R_{2 \rightarrow 1} = \begin{bmatrix} 1 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; -1 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; -1 \end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which can be treated as a rotation about the x-axis by angle $\phi$:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$R_{2 \rightarrow 1} = \begin{bmatrix} 1 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; \cos \phi &amp;amp; -\sin \phi \\ 0 &amp;amp; \sin \phi &amp;amp; \cos \phi \end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where $\cos \phi = -1$ and $\sin \phi = 0$. This leads to the solution:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\phi = n \pi$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where $n$ is any odd integer. The smallest rotation is when $n = 1$ or $n = -1$, which corresponds to 180 degree rotation about the x-axis in either direction to bring you from frame 2 to frame 1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, if you consider the angle error to simply be the same as a Euclidean distance, then you get the following (evaluating the formula you give in your question):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\varepsilon = \pi \sqrt{\frac{3}{2}}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So why is that different? It's because &lt;em&gt;translation&lt;/em&gt; takes place in $\mathcal{R}^3$ space while &lt;em&gt;rotation&lt;/em&gt; takes place in $\mathcal{S}^3$ space. Euclidean distance is applicable in $\mathcal{R}^3$ space, but not $\mathcal{S}^3$ space. Rotations are non-linear and order matters, meaning most of the concepts applicable to translation are not applicable to rotation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In some cases you can use the Euclidean distance in angular coordinates to approximate the angular error between two points, but only when the angle errors are small -- essentially linearizing the trigonometric relations $\cos \theta \approx 1$ and $\sin \theta \approx \theta$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You cannot take two sets of Euler angles, subtract them, and use that difference as the set of Euler angles defining the rotation transformation between the two frames defined by the original angles. For example, given your defined sets of angles resulting in the difference $\begin{bmatrix} \frac{\pi}{2} &amp;amp; \pi &amp;amp; -\frac{\pi}{2} \end{bmatrix}$, those new Euler angles would yield the following rotation matrix:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$R = \begin{bmatrix} 0 &amp;amp; 0 &amp;amp; -1 \\ 1 &amp;amp; 0 &amp;amp; 0\\ 0 &amp;amp; -1 &amp;amp; 0 \end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But we already know that the rotation matrix is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$R = \begin{bmatrix} 1 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; -1 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; -1 \end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once again, you simply cannot apply linear mathematics to rotations. The rotation angles give you rotation matrices, and those matrices multiply. The new rotation matrix will itself have a set of corresponding angles, and those angles are not simply the difference between the original sets. The closest you can get to what you are talking about is by using &lt;a href=&quot;https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation&quot; rel=&quot;nofollow noreferrer&quot;&gt;quaternions&lt;/a&gt;, where subsequent rotations can be &quot;added&quot; and &quot;subtracted&quot; but again using non-linear mathematics.&lt;/p&gt;&#xA;" OwnerUserId="10836" LastEditorUserId="10836" LastEditDate="2015-11-18T12:06:43.467" LastActivityDate="2015-11-18T12:06:43.467" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8495" PostTypeId="2" ParentId="8480" CreationDate="2015-11-18T11:27:09.383" Score="10" Body="&lt;p&gt;In the simple models and block diagrams of control systems you will find in basic textbooks, they will show you a single diagram with a feedback section which uses measurements of the target parameter and a feedforward section which does not use the target paremeter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/aNnWC.png&quot;&gt;&#xA;&lt;br&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Be ready to relax that definition when you get to the real world.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Treat it as terminology that helps you talk about a subset of a control system rather than a mathematical absolute. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In simple control, the feedback portion of your control system is that which uses measurements of the parameter you are trying to control in its calculations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But don't forget that we use the term for systems in general. A microphone pointed at a speaker causes the system to evolve in a predictable way and we say that feedback is causing the loud noise. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So when we talk about feedback we are talking about how some characteristic of a system influences the evolution of that system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When we talk about the feedback portion of a specific control system, we are focusing the conversation on the target parameter we are measuring and trying to control. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Feedforward control is unrelated. At least that's the best way to start discussing it. In feedforward control, we are creating some model of the system and using that to change the target parameter to what we want. If we have a perfect model of the system then we know exactly what inputs to the actuation we need to change the target parameter. There's no need to measure the target parameter. So in simple theory, feedforward control is control that does not need to use measurements of the target parameter. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But then things get messy. Creating good models is hard and we often use some sort of learning or system identification to create the model and update the model as things change. This will use measurements of the target parameter. Is it feedback? Yes. Do we call this feedback control? No.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additionaly disturbances are always difficult to predict and if we can measure some or all of them we can improve the model for feedforward control. Are these measurements feedback? Yes. Do we call this feedback control? No.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hopefully that gives you a little more understanding. I don't know Astrom &amp;amp; Murray's book, but I can see on google that quote comes from the introduction chapter. I expect that they will give you a more nuanced understanding of feedback and feedforward later.&lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="14272" LastEditDate="2018-01-03T01:18:11.700" LastActivityDate="2018-01-03T01:18:11.700" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8496" PostTypeId="2" ParentId="2434" CreationDate="2015-11-18T11:56:50.817" Score="0" Body="&lt;p&gt;If you don't want to use prepared components, your best bet is using materials that benefit from economies of scale. Find one that suits you (it could be wood boards, steel pipe for plumbing or conduit, steel L or C sections, Aluminum extrusions for architecture, or plastic pipe) and then find where your local builders or tradespeople dump or recycle old material. You should be able to get it for cheap or free.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will need to learn how to work with the materials you choose; but that is a basic requirement for trying to save money in this way. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A hand saw, a file/rasp, and a drill should be enough to get you started for tools. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind that this puts you on a journey of learning to craft some type of material rather than experiment with 3D printing. If the 3D printing part is what's important to you, fundraise or work extra hours until you can buy a kit or a prebuilt printer.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2015-11-18T11:56:50.817" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8497" PostTypeId="2" ParentId="8483" CreationDate="2015-11-18T12:26:03.240" Score="3" Body="&lt;p&gt;Search aliexpress for '6V switching power supply'. You should find 5Amp or 10Amp ones for $10-$20. Silver boxes with holes in them. You can find them on ebay as well (usually the same chinese vendors as aliexpress).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will need to add your own AC plug.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind that you will probably not be using 12Amps because not all motors will be at full torque at the same time.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2015-11-18T12:26:03.240" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8498" PostTypeId="2" ParentId="8486" CreationDate="2015-11-18T16:19:09.453" Score="0" Body="&lt;p&gt;We lack of information to answer:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The max speed of your drone will be limited by your Thrust/Weight Ratio (not really, the maneuverability is, but your max speed is limited by the max thrust minus the hovering thrust, but I assume you want your quadrotor to be maneuverable) and the aerodynamic drag of your drone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any motor characteristic looks &lt;a href=&quot;http://www.philohome.com/nxtmotor/nxtmotor.htm&quot; rel=&quot;nofollow&quot;&gt;like this one&lt;/a&gt;. See efficiency vs torque and power vs torque. The is a peak efficiency and a peak power at 2 different torque.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you wanted a long flight time, you would choose propellers with low torque, to use the motor at peak efficiency (but propellers with low torque may have a decreased figure of merit).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you want max speed, you should choose propeller with higher torque, to use the motor at max power.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, what is the speed/torque of the motor at max power ? We don't know, we need to know know load current and internal resistance of the motor. This would also allow us to get the torque constant of the motor, to check that current doesn't exceed 20A at max power. Btw, if you use a 6S battery, you'll just have more speed and torque. The motor may break due to over-speed, but it's more likely to overheat and burn, due to over-current.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What's the torque vs speed characteristic of your propeller ? I have no idea, I just know it's a 6 inch propeller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Amateur drone design is very hard because parts sellers provide no spec. We can't do any serious engineering study without quantified data as input. Amateur drone community seems to work with a &quot;buy, try, and share experience&quot; methodology.&lt;/p&gt;&#xA;" OwnerUserId="7634" LastActivityDate="2015-11-18T16:19:09.453" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8499" PostTypeId="1" AcceptedAnswerId="8509" CreationDate="2015-11-18T18:41:32.657" Score="0" ViewCount="113" Body="&lt;p&gt;I have a robotic arm and a camera in eye-in-hand configuration. I know that there is a relationship between the body velocity $V$ of the camera and the velocities $\dot s$ in the image feature space that is $\dot s=L(z,s) V$ where $L$ is the interaction matrix. I was wondering if one can find a mapping (a so called diffeomorphism) that connects the image features' vector $s$ with the camera pose $X$. All I was able to find is that it is possible to do that in a structured environment which I don't fully understand what it is.&lt;/p&gt;&#xA;" OwnerUserId="7107" LastEditorUserId="7107" LastEditDate="2015-11-18T19:11:04.843" LastActivityDate="2015-11-19T04:04:24.240" Title="Mapping between camera pose and image features in visual servoing" Tags="&lt;mapping&gt;&lt;visual-servoing&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8500" PostTypeId="1" AcceptedAnswerId="8508" CreationDate="2015-11-18T18:59:54.263" Score="5" ViewCount="2027" Body="&lt;p&gt;I am not quite sure if I quite understand the difference between these two concepts, and why there is a difference between these two concept. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yesterday I was trying to compute the jacobian needed for an inverse kinematics, but the usual input I provided my transformation in the Forward kinematics being the Points P and xyz could not be applied, The transformation matrix was given a state vector Q, at which the the Tool position could be retrieved... &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not sure if understand the concept quite well, and can't seem to the google the topics, as they usually  include terminologies which makes the concepts too simple (Angle calc and so on.. )&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know it might be pretty much to ask, but what form of input is needed to compute the jacobian ?, and what and why is there a difference between forward and inverse kinematics?.. &lt;/p&gt;&#xA;" OwnerUserId="9620" LastActivityDate="2018-03-16T14:33:46.063" Title="Forward kinematic and inverse kinematic... When to use what?" Tags="&lt;inverse-kinematics&gt;&lt;forward-kinematics&gt;&lt;jacobian&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8501" PostTypeId="1" AcceptedAnswerId="8505" CreationDate="2015-11-18T19:03:28.317" Score="3" ViewCount="1233" Body="&lt;p&gt;&lt;strong&gt;Note before I start:&lt;/strong&gt; I have not actually put anything together yet, i'm still just planning, so any changes that require a shape change or anything like that are accepted.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm working on making a walking robot with my arduino and 3d printing all the pieces I need. It will have four legs, but since it needs to be mobile, I didn't want the power supply to be huge. I've decided it would be best if I can get each leg to only require 1 servo, at 5V each. I know how to get the leg to move back and forth, but i want to be able to lift it in between; before it brings the leg forward, it needs to lift up the foot.&#xA;The only thing I can think of is the rotation maybe locking some sort of gear.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When a motor begins rotating clockwise, how can I have it power a short motion to move an object toward itself, and when it begins moving counterclockwise to power the same object a short distance away from itself?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The servos I am using have 180* of rotation, so they don't go all the way around in a loop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;also: don't know if it will be important or not, but because of the peculiar construction of the foot, it would be best if it was lifted straight up, rather than up at an angle, but it isn't 100% necessary. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any robots that already do this? if so, I'm unaware of them. Thanks for your time.&lt;/p&gt;&#xA;" OwnerUserId="7672" LastActivityDate="2015-11-25T01:17:48.600" Title="Lifting robotic leg with only one servo" Tags="&lt;mechanism&gt;&lt;motion-planning&gt;&lt;servomotor&gt;&lt;legged&gt;&lt;gearing&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8502" PostTypeId="2" ParentId="8500" CreationDate="2015-11-18T20:05:47.943" Score="8" Body="&lt;p&gt;Forward kinematics uses joint angles (with known link lengths) to compute the tool position and orientation.  Inverse kinematics uses tool position and orientation, to compute joint angles.  Note:  if your device has prismatic links (the length changes) then those are used just like joint angles in the above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To compute the Jacobian, start with the forward kinematics:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$X = f(q)$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here $q$ is a vector of joint angles, and $X$ is the vector of tool position/orientation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Jacobian is the partial derivative of $X$ with respect to $q$.  It maps joint velocities to tool positional and angular velocities.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastEditorUserId="9176" LastEditDate="2015-11-19T16:27:24.233" LastActivityDate="2015-11-19T16:27:24.233" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8503" PostTypeId="2" ParentId="8501" CreationDate="2015-11-18T21:18:29.857" Score="3" Body="&lt;p&gt;Going forward, a &lt;a href=&quot;https://en.wikipedia.org/wiki/Klann_linkage&quot; rel=&quot;nofollow&quot;&gt;Klann linkage&lt;/a&gt; has a near-vertical leg drop action.  (See the legs at left in the wikipedia &lt;a href=&quot;https://en.wikipedia.org/wiki/Klann_linkage#Illustrations&quot; rel=&quot;nofollow&quot;&gt;animated GIF&lt;/a&gt;.)&#xA;It has a near-vertical leg lift action if running in reverse.  (See the legs at right in the illustration.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note, this linkage and some other &lt;a href=&quot;https://en.wikipedia.org/wiki/Leg_mechanism&quot; rel=&quot;nofollow&quot;&gt;leg mechanism linkages&lt;/a&gt; use a rotary crank; ie, rather than using a 180° back-and-forth motor, they use a motor that turns continuously in one direction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also see &lt;a href=&quot;https://en.wikipedia.org/wiki/Jansen&amp;#39;s_linkage&quot; rel=&quot;nofollow&quot;&gt;Jansen's linkage&lt;/a&gt; and the source links from wikipedia.&lt;/p&gt;&#xA;" OwnerUserId="478" LastActivityDate="2015-11-18T21:18:29.857" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8504" PostTypeId="2" ParentId="8480" CreationDate="2015-11-18T21:42:05.183" Score="0" Body="&lt;p&gt;Think of your controller as having several components:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;a (mathematical) model of the system, &lt;/p&gt;&#xA;&#xA;&lt;p&gt;a measurement subsystem for detecting errors, &lt;/p&gt;&#xA;&#xA;&lt;p&gt;a method to input commands to the system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The feedback controller uses the measured errors, computes changes to the inputs in order to squash those errors, and sends those inputs to the system.  The idea is that all of the dynamics affecting a system won't be known in advance - friction values change, disturbances are encountered, payloads are not constant, etc.  So we measure the error and eliminate it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The feedforward controller usually wraps around the feedback controller.  Although there are many types, they all generally estimate what the system's response will be for those changed inputs computed above.  They then further &quot;nudge&quot; the inputs to account for the predicted additional errors in order to prevent those modeled errors from occurring.  A good example is when the system knows that the payload changes when a device picks something up - the current to the motors can be increased to account for the additional torque required without waiting for the system to begin moving (too slowly) and seeing the errors occur.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2015-11-18T21:42:05.183" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8505" PostTypeId="2" ParentId="8501" CreationDate="2015-11-18T23:51:02.617" Score="2" Body="&lt;p&gt;The linkages suggested by jwpat7 are great, and I would probably prefer to use something like that. But, if you want something &lt;em&gt;really&lt;/em&gt; simple, then you might be able to get away with a four-bar linkage &lt;a href=&quot;https://www.youtube.com/watch?v=RsFnbChKVXU&quot; rel=&quot;nofollow noreferrer&quot;&gt;like this type of thing&lt;/a&gt;. Although it does depend on continuous rotation, so maybe not appropriate for your application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With a servo-motor that rotates back-and-forth, you may be able to build a mechanism similar to what I show in the figure below. The gears (shown in blue) are all free to rotate, but input from the motor will actually rotate the entire leg and foot together until hitting a mechanical stop (some limiting tab that prevents the leg from rotating further). At this point, the input motor will then transfer power by rotating the gears so that only the foot moves.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/uVUi0.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/uVUi0.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This will work when there is less torque resistance from rotating the entire leg and foot together compared to rotating the foot with respect to the leg -- assuming the inertia of the foot is small this will always work when the leg is simply moving in free space. However, if you are touching the ground (which I assume a legged robot will be...), then this might get tricky. It would then become a matter of adding more resistance to the gear transmission so that the leg still rotates until hitting the stop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another option would be to use some kind of cam, so that when the main input rotation reaches a given point, another arm is lifted by the cam surface to rotate only the foot. If you aren't sure what I mean then check out &lt;a href=&quot;https://www.youtube.com/watch?v=KRnTXvjTeIA&quot; rel=&quot;nofollow noreferrer&quot;&gt;this video&lt;/a&gt; for inspiration.&lt;/p&gt;&#xA;" OwnerUserId="10836" LastEditorUserId="10836" LastEditDate="2015-11-21T16:24:55.947" LastActivityDate="2015-11-21T16:24:55.947" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8506" PostTypeId="2" ParentId="8486" CreationDate="2015-11-19T00:19:11.877" Score="3" Body="&lt;p&gt;There is a handy online Calculator I use to answer such questions. I tried with the data you provided (and had to lookup specs on your motors). I can offer the following insights, but I am only guessing about your model's all-up weight.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If we assume it is roughly 800g with 6x3 props:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;max speed: ~66km/h &lt;/li&gt;&#xA;&lt;li&gt;additional payload: 934g (of course this will affect top speed)&lt;/li&gt;&#xA;&lt;li&gt;mixed flight time: 3.9min&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Everything seems within spec with this data (ie. nothing will burn up, overheat, or be over or under driven)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It probably won't fly at all with 4 inch props (no matter what pitch).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your flight time is quite low, you might consider a larger battery.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The calculator I used is &lt;a href=&quot;http://www.ecalc.ch/xcoptercalc.php?ecalc&amp;amp;lang=en&quot; rel=&quot;nofollow&quot;&gt;eCalc&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I strongly recommend spending some time with a calculator like that and trying experiments by adjusting only 1 dimension at a time, say motors or battery or props to see what effect it will have on the model before settling on your particular setup. I think that choosing the best motors is always the hardest choice as there are a lot of variants. The calculator has a lot of predefined motor specs by brand/model so you can try different motors quickly. Not all brands are covered though so its good to have access to your motors actual specs if necessary.&lt;/p&gt;&#xA;" OwnerUserId="1075" LastActivityDate="2015-11-19T00:19:11.877" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8507" PostTypeId="2" ParentId="8499" CreationDate="2015-11-19T01:21:39.513" Score="0" Body="&lt;p&gt;Look up Camera Space Manipulation, which uses the pinhole camera model to map image space and physical space coordinates.  It is not too difficult to do.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A structured environment is one in which objects which occupy the environment are known, and can be modelled.   It is much easier to program mobility, and to identify objects, in a structured environment.   For example, if you know that a particular circular object has a given diameter, you can use that object's elliptical shape in camera space to determine viewing angle, and dimensions to determine distance between the circle and the camera.  But if you don't know the model of that object, you can't be sure if it is a circle viewed from an angle, or an ellipse viewed head-on.   Therefore unstructured environments are much more difficult for relating camera space coordinates and physical coordinates.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastEditorUserId="11125" LastEditDate="2015-11-19T02:42:58.790" LastActivityDate="2015-11-19T02:42:58.790" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8508" PostTypeId="2" ParentId="8500" CreationDate="2015-11-19T02:45:54.480" Score="8" Body="&lt;p&gt;Let me give you a mathematician's perspective on the difference between the two kinds problems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Forward kinematics&lt;/strong&gt; asks the question: &lt;em&gt;given a certain input (i.e. control command), what will be the output (i.e. robot configuration, pose, etc.)&lt;/em&gt;. &lt;strong&gt;Inverse kinematics&lt;/strong&gt; asks the reverse question: &lt;em&gt;given a certain desired output, what is the necessary input&lt;/em&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Inverse problems are usually much harder to solve (e.g. ill-conditioned or otherwise ill-posed) than forward problems&lt;sup&gt;1&lt;/sup&gt;. This is true not only of kinematics, but also dynamics and a wide range of computational problems as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider the following analogy. Let's assume we are given a basic algebraic function $f(x)=x^3-5x+1$.  Forward kinematics is like asking to find $f(2)$.  It's easy to do because the equation is already given and all we need to do is substitute the input to get the output. Kinematic equations are also this way:  designed to convert inputs into outputs easily. Inverse kinematics is like asking to solve the equation $f(x)=2$. It's not as easy to find the answer.  Going backwards to find the input that gives a specific output is non-trivial.  An answer may not even exist. If it does exist, it may not be unique. You may require additional information (e.g. regularization) to obtain a unique solution with desirable characteristics.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Often, it's &lt;em&gt;impossible to solve inverse kinematics analytically&lt;/em&gt;. This is especially for true for &lt;em&gt;serial arm linkages&lt;/em&gt;. This means that you will need a numerical method to solve a system of non-linear equations of the form $F(X)=0$.  Borrowing from calculus, we can use Newton's method. In higher dimensional spaces, Newton's method requires formulating the Jacobian (or at least the approximate Jacobian) of $F(X)$.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Notes&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sub&gt;&#xA;1. For parallel arms (such as a Delta arm or Stewart platform), the difficulty is reversed (i.e. inverse kinematics is straightforward, whereas forward kinematics is more tricky). In general, one of the two problems (either forward or inverse) will always be harder to solve than the other.&#xA;&lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="2295" LastEditorDisplayName="user10072" LastEditDate="2018-03-16T14:33:46.063" LastActivityDate="2018-03-16T14:33:46.063" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8509" PostTypeId="2" ParentId="8499" CreationDate="2015-11-19T02:47:42.647" Score="1" Body="&lt;p&gt;Image features are connected to the camera pose through two steps: (1) the relationship between the feature pixel coordinates and its homogeneous coordinates in the camera reference frame, and (2) the relationship between the camera reference frame and the world frame. Take a look at this figure, where the world frame is denoted with subscript 0 and the camera frame is denoted with subscript C. A feature is shown as a blue dot, with position $p$ in the world frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/1E7or.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1E7or.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The camera has a particular field of view (shown with a pyramid in the image), which relates the pixels coordinates to the relative position of the feature in the camera reference frame, $\tilde{p}$, through the camera projection matrix:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\begin{bmatrix} I \\ J \\ 1 \end{bmatrix} = \begin{bmatrix} k_x &amp;amp; 0 &amp;amp; C_x \\ 0 &amp;amp; k_y &amp;amp; C_y \\ 0 &amp;amp; 0 &amp;amp; 1 \end{bmatrix} \begin{bmatrix} X \\ Y \\ 1 \end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where $I$ and $J$ are the pixel coordinates of the feature in the image, and the camera is defined with parameters $k_x$, $k_y$, $C_x$ and $C_y$ (based on the field of view and output image size). The &lt;em&gt;homogeneous coordinates&lt;/em&gt;, $X$ and $Y$ are defined based on the relative position of the feature in the camera frame:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\tilde{p} = \begin{bmatrix} \tilde{x} \\ \tilde{y} \\ \tilde{z} \end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$X = \frac{\tilde{x}}{\tilde{z}}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$Y = \frac{\tilde{y}}{\tilde{z}}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That relative position of the feature is then related to the actual position of the feature (in the world frame) as well as the camera pose, according to:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$p = R_C \tilde{p} + p_C$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where $R_C$ is the rotation matrix defining the camera orientation and $p_C$ is the position of the camera.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One thing I have not discussed is lens distortion, which must be accounted for before using this approach but can be treated separately. Note that the &lt;a href=&quot;http://docs.opencv.org/2.4/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;OpenCV Camera Calibration and 3D Reconstruction&lt;/a&gt; page provides a more detailed explanation.&lt;/p&gt;&#xA;" OwnerUserId="10836" LastEditorUserId="10836" LastEditDate="2015-11-19T04:04:24.240" LastActivityDate="2015-11-19T04:04:24.240" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="8510" PostTypeId="1" CreationDate="2015-11-19T08:37:51.460" Score="2" ViewCount="499" Body="&lt;p&gt;I understand that most of the self-driving cars solutions are based on Lidar and video SLAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But what about robots reserved for indoor usage? Like robot vacuums and industrial AGVs? I see that Lidar is used for iRobot and their latest version uses VSLAM. AGVs also seem to use Lidar.&lt;/p&gt;&#xA;" OwnerUserId="11130" LastEditorUserId="9176" LastEditDate="2015-11-19T17:56:48.290" LastActivityDate="2015-11-23T11:35:26.727" Title="What are the approaches for indoor robot positioning?" Tags="&lt;slam&gt;&lt;lidar&gt;" AnswerCount="3" CommentCount="2" ClosedDate="2015-11-30T17:41:58.327" ContentLicense="CC BY-SA 3.0" />
  <row Id="8511" PostTypeId="1" CreationDate="2015-11-19T10:03:59.037" Score="0" ViewCount="930" Body="&lt;p&gt;OK, let's say we have a tech request for a robotic system for peeling potatoes, and a design is as follows:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;One &quot;arm&quot; for picking up a potato and holding it, rotating when needed.&lt;/li&gt;&#xA;&lt;li&gt;Another &quot;arm&quot; for holding a knife-like something which will peel the skin from the potato.&lt;/li&gt;&#xA;&lt;li&gt;Arm picks up a potato from first container, holds it over trash bin while peeling, then puts peeled potato in second container.&lt;/li&gt;&#xA;&lt;li&gt;For simplicity a human rinses peeled potatoes, no need to build automatic system for it.&lt;/li&gt;&#xA;&lt;li&gt;In first iteration even 100% spherical peeled potatoes are OK, but ideally would be good to peel as little as possible, to minimize the wastes.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Question:&lt;/strong&gt;&#xA;I know that we're very, very far away from building such a system. Nevertheless, what are the purely &lt;strong&gt;technical&lt;/strong&gt; difficulties which needs to be solved for such a robot to be built? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's assume we stick to this design and not invent something radically different, like solving the problem with chemistry by dissolving the skin with something. I know that the problem of peeling the potatoes is currently being solved by other means - mainly by applying friction and a lot of water.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This question is not about it. I am asking specifically about the problems to be solved with the two-arms setup using the humanlike approach to peeling.&lt;/p&gt;&#xA;" OwnerUserId="11131" LastEditorUserId="11131" LastEditDate="2015-11-19T13:55:45.297" LastActivityDate="2015-11-19T13:55:45.297" Title="What engineering problems needs to be solved to build a potato-peeling robot?" Tags="&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="6" ClosedDate="2015-11-30T17:44:12.687" ContentLicense="CC BY-SA 3.0" />
  <row Id="8512" PostTypeId="1" CreationDate="2015-11-19T11:39:07.487" Score="1" ViewCount="295" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/IpAjs.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/IpAjs.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/nzqzu.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/nzqzu.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hi,&#xA;Here I have added 2 options for connecting encoder on shaft.&#xA;Motor, gearhead and shaft is connected using coupling. But where will be best place for encoder (To avoid backlash from coupling and gearhead).&#xA;whether through hollow encoder is available? (see option 1).&#xA;I dont know which one will be best for this kind of system. &#xA;Which one is widely using arrangements?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Options 3&lt;/strong&gt; is Encoder will be placed before the motor.&lt;/p&gt;&#xA;" OwnerUserId="7474" LastActivityDate="2015-11-19T12:44:56.710" Title="How to connect absolute encoder on the rotating shaft. Please see the three options?" Tags="&lt;motor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8513" PostTypeId="2" ParentId="8512" CreationDate="2015-11-19T12:44:56.710" Score="1" Body="&lt;p&gt;Most gear motors with integrated encoders have them placed on the motor shaft, which allows for much finer angle resolution at the output but does not account for backlash. I think this is what you mean by option 3.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both options 1 and 2 are basically the same thing, with the only difference being that option 2 will account for any elasticity (twisting) in the shaft. Backlash will be measured with both options 1 and 2, since you are measuring the actual angle of the shaft. However, with option 3 you will be measuring the motor shaft angle and therefore need to multiply by the gear ratio to get the output angle -- plus backlash and elasticity will not be measured.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, yes you can get hollow shaft encoders, such as &lt;a href=&quot;http://www.dynapar.com/technology/hollow-shaft-encoder/&quot; rel=&quot;nofollow&quot;&gt;this one&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="10836" LastActivityDate="2015-11-19T12:44:56.710" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="8514" PostTypeId="2" ParentId="8511" CreationDate="2015-11-19T13:47:38.970" Score="4" Body="&lt;p&gt;There are many difficulties to overcome.  As others have shown, this problem seems like it is well-suited for fixed automation rather than robotics.  I spent considerable time working on telerobotics in the 1980s, and you will be encountering many of the same issues we dealt with then.  Here are a few off the top of my head:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;presenting potatoes to the arm individually (or worse, trying to pick them from a bulk collection of potatoes)&lt;/li&gt;&#xA;&lt;li&gt;protecting from the starches, juices, dirt, and other contaminants that will be thrown around during the peeling process&lt;/li&gt;&#xA;&lt;li&gt;peeling potatoes that have bulges&lt;/li&gt;&#xA;&lt;li&gt;peeling potatoes that have concave and convex sections&lt;/li&gt;&#xA;&lt;li&gt;ensuring growing eyes don't interfere with the cutting&lt;/li&gt;&#xA;&lt;li&gt;repositioning the potato so you can peel the ends that you were holding when the main part of the potato was peeled&lt;/li&gt;&#xA;&lt;li&gt;change in friction characteristics between gripping the skin and gripping the already-peeled section &lt;/li&gt;&#xA;&lt;li&gt;dealing with the size differences (both in gripping and in cutting)&lt;/li&gt;&#xA;&lt;li&gt;controlling the force between the blade and the potato skin (you can't just program positions because of the size variability)&lt;/li&gt;&#xA;&lt;li&gt;sizing the cutting blade:  too large and you will either miss indented sections, or remove too large of the outdented sections; too small and your process time will suffer&lt;/li&gt;&#xA;&lt;li&gt;coordinating between the robot and the blade: how do you ensure your force is correct?  That is probably easiest to do at the blade.  But this means the position of the blade will change as it responds to varying forces, so the wrist might need to account for that.&lt;/li&gt;&#xA;&lt;li&gt;stability of your grasp (while leaving enough open space for the blade)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2015-11-19T13:47:38.970" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8515" PostTypeId="2" ParentId="8289" CreationDate="2015-11-19T19:18:24.730" Score="1" Body="&lt;p&gt;If your analog knob just turns a potentiometer, then you can replace that device with a digital potentiometer (for example, this:  &lt;a href=&quot;http://www.microchip.com/wwwproducts/Devices.aspx?product=MCP4161&quot; rel=&quot;nofollow&quot;&gt;http://www.microchip.com/wwwproducts/Devices.aspx?product=MCP4161&lt;/a&gt;).  You need to make sure the Ohm range of your analog potentiometer is covered by the capabilities of the digital potentiometer.  They are typically controlled via commands from a microcontroller.  You can also see if you can find a voltage-controlled resistor (varistor) that covers the range you need.  I've never tried to do that with a varistor, though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your analog knob is like the one on my crock pot, then it really isn't analog.  It's a four-position switch.  You can use any little control card with digital outputs to replace that.  Be careful, though, you might need to throw relays in between your digital output and the signal lines, depending on the characteristics of the device that receives the output of the knob.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2015-11-19T19:18:24.730" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8516" PostTypeId="1" AcceptedAnswerId="8517" CreationDate="2015-11-20T03:37:29.850" Score="1" ViewCount="9011" Body="&lt;p&gt;I've calculated a DH Parameter matrix, and I know the top 3x3 matrix is the Rotation matrix. The DH Parameter matrix I'm using is as below, from &lt;a href=&quot;https://en.wikipedia.org/wiki/Denavit%E2%80&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Denavit%E2%80&lt;/a&gt;&lt;a href=&quot;https://i.stack.imgur.com/ZJ2LC.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZJ2LC.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Above is what I'm using. From what I understand I'm just rotating around the Z-axis and then the X-axis, but most explanations from extracting Euler angles from Rotation matrixes only deal with all 3 rotations. Does anyone know the equations? I'd be very thankful for any help.&lt;/p&gt;&#xA;" OwnerUserId="11004" LastActivityDate="2016-09-11T12:28:55.350" Title="Getting pitch, yaw and roll from Rotation Matrix in DH Parameter" Tags="&lt;kinematics&gt;&lt;forward-kinematics&gt;&lt;dh-parameters&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8517" PostTypeId="2" ParentId="8516" CreationDate="2015-11-20T04:17:52.730" Score="3" Body="&lt;p&gt;In general, Euler angles (or specifically roll-pitch-yaw angles) can be extracted from &lt;em&gt;any&lt;/em&gt; rotation matrix, regardless of how many rotations were used to generate it. For a typical x-y-z rotation sequence, you end up with this rotation matrix where $\phi$ is roll, $\theta$ is pitch, and $\psi$ is yaw:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$R = \begin{bmatrix} c_\psi c_\theta &amp;amp; c_\psi s_\theta s_\phi - s_\psi c_\phi &amp;amp; c_\psi s_\theta c_\phi + s_\psi s_\phi \\ s_\psi c_\theta &amp;amp; s_\psi s_\theta s_\phi + c_\psi c_\phi &amp;amp; s_\psi s_\theta c_\phi - c_\psi s_\phi \\ -s_\theta &amp;amp; c_\theta s_\phi &amp;amp; c_\theta c_\phi \end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that $c_x = \cos x$ and $s_x = \sin x$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To get roll-pitch-yaw angles out of any given numeric rotation matrix, you simply need to relate the matrix elements to extract the angles based on trigonometry. So re-writing the rotation matrix as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$R = \begin{bmatrix} R_{11} &amp;amp; R_{12} &amp;amp; R_{13} \\ R_{21} &amp;amp; R_{22} &amp;amp; R_{23} \\ R_{31} &amp;amp; R_{32} &amp;amp; R_{33} \end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And then comparing this to the above definition, we can come up with these expressions to extract the angles:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\tan \phi = \frac{R_{32}}{R_{33}}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\tan \theta = \frac{-R_{31}}{\sqrt{R_{32}^2 + R_{33}^2}}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\tan \psi = \frac{R_{21}}{R_{11}}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you actually solve for these angles you'll want to use an &lt;code&gt;atan2(y,x)&lt;/code&gt; type of function so that quadrants are appropriately handled (also keeping the signs of the numerators and denominators as shown above).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that this analysis breaks down when $\cos \theta = 0$, where there exists a singularity in the rotation -- there will be multiple solutions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also note that your question is referring to the rotation transformation &lt;em&gt;between&lt;/em&gt; two joints ($^{n-1}R_n$), which is indeed composed of an x-axis and z-axis rotation, but the actual rotation of that joint with respect to the base will be different ($^0R_n$) and composed of all the rotations for joints 1 to $n$. I point this out because $^{n-1}R_n$ &lt;em&gt;can&lt;/em&gt; be decomposed back into the relevant x-axis ($\alpha$) rotation and z-axis ($\theta$) rotation, whereas $^0R_n$ is better suited to roll-pitch-yaw -- especially for the end-effector.&lt;/p&gt;&#xA;" OwnerUserId="10836" LastActivityDate="2015-11-20T04:17:52.730" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8519" PostTypeId="1" CreationDate="2015-11-20T11:28:20.157" Score="1" ViewCount="94" Body="&lt;p&gt;My work has an older Fanuc robot ( Arc Mate 100-iBe RJ3iB, Fanuc AWE2 teach pendant with  Powerwave 355M) and the old operator/programmer has left. I have taken over his job and cant find out how to turn down the voltage and wire feed speed because it occasionally burns through parts. I tried manually putting in voltage and wire feed speed but it seems it will only accept the previous weld schedules 1-8 and if i mess with them that will affect other programs using those. I just need someone to please point me in the right direction. &#xA;P.S. Typed on phone , sorry if sloppy.&lt;/p&gt;&#xA;" OwnerUserId="10520" LastEditorUserId="10520" LastEditDate="2015-11-21T08:54:36.987" LastActivityDate="2015-11-21T08:54:36.987" Title="Fanuc Robot &quot;Heat&quot; control" Tags="&lt;industrial-robot&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8520" PostTypeId="2" ParentId="8510" CreationDate="2015-11-20T16:29:04.947" Score="0" Body="&lt;p&gt;That's about it for mainstream robots. Lasers, Cameras, Inertial Measurement Units (IMUs), and odometry or kinematic updates. &lt;/p&gt;&#xA;" OwnerUserId="163" LastActivityDate="2015-11-20T16:29:04.947" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8522" PostTypeId="1" CreationDate="2015-11-21T15:56:55.807" Score="0" ViewCount="420" Body="&lt;p&gt;I'm working on a robotic hand and I would like to simulate different joints and tendon insertion points before starting to actually build it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've been googling and found things like Solidworks and Autodesk, that seem very costly for a hobbyst like me but also I don't quite fully understand their capabilities (just CAD? 3D modelling but not simulation? Simulation but not interactive?). I've also found things like FreeCAD which seem to me somehow abandoned or just for CAD and not for simulation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another requirement would be interactivity of the simulation, not just rendering.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't have a problem with commercial software, but I'm looking for a reasonable cost for a hobbyst, not an engineering company.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a software out there that meets all this requirements? Or should I use several programs each for a specific purpose?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="7812" LastActivityDate="2015-11-25T01:41:49.917" Title="Recommendation for 3D mechanism modeling and simulation software" Tags="&lt;design&gt;&lt;mechanism&gt;&lt;software&gt;&lt;simulator&gt;&lt;3d-model&gt;" AnswerCount="0" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="8524" PostTypeId="2" ParentId="8461" CreationDate="2015-11-21T19:33:00.850" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;what metal should I use?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Copper wire works better than nichrome wire, according to&#xA;&lt;a href=&quot;http://writerofminds.blogspot.com/2014/05/homemade-artificial-muscles-iv.html&quot; rel=&quot;nofollow&quot;&gt;Homemade Artificial Muscles IV&lt;/a&gt;.&#xA;That says&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Nichrome is used in places like your toaster mainly because it can get&#xA;  very hot without melting or oxidizing. But I don't need or want the&#xA;  heating elements in my artificial muscles to be red-hot. I would like&#xA;  to be able to use them in low-voltage systems, say 5-6V. The amount of&#xA;  resistive heat you can get out of a wire is proportional to the amount&#xA;  of power you pump into it. And since P = V^2/R, increasing resistance&#xA;  when voltage is fixed will decrease your power. All else being equal&#xA;  (same power supply, same length and diameter of wire, same&#xA;  environment), a copper wire will produce more heat, faster, than a&#xA;  nichrome wire. Copper also has better thermal conductivity than&#xA;  nichrome, meaning it will cool more quickly after the power is turned&#xA;  off.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;To answer your question,&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;1) isn't copper wire resistance extremely low,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not the kind of copper wire used in artificial muscles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Common copper in-wall power cables are often 10 AWG copper wire, with a resistance of about 3 milliohms per meter, which is extremely low.&#xA;Common wire-wrap wire (30 AWG copper wire) has a resistance of 339 milliohms per meter, which is two orders of magnitude more resistance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;People who build artificial muscles use much thinner strands of copper, which have much more resistance per meter -- often a single strand pulled from &lt;a href=&quot;http://en.wikipedia.org/wiki/litz_wire&quot; rel=&quot;nofollow&quot;&gt;litz wire&lt;/a&gt; or &lt;a href=&quot;http://en.wikipedia.org/wiki/tinsel_wire&quot; rel=&quot;nofollow&quot;&gt;tinsel wire&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;and thus generates very little heat?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Power supplies are typically designed to set a fixed voltage.&#xA;Once the voltage has been fixed, a &lt;em&gt;lower&lt;/em&gt; load resistance generates &lt;em&gt;more&lt;/em&gt; heat.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, when you wire up your heater circuit, every element of the circuit -- the heater strand itself, as well as the wire from each end of the heater strand back to the power supply -- has the current through it.&#xA;Because of conservation of electrons, the same number of electrons per second go through each element.&#xA;For a given current, a &lt;em&gt;higher&lt;/em&gt; load resistance generates &lt;em&gt;more&lt;/em&gt; heat.&#xA;Therefore, you want the connection wire between your power supply and the heater strand to be much lower resistance and therefore much thicker than the heater strand, so heater strand is the only element that gets noticeably warmer than ambient temperature.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;2) what circuit should I build to heat the wire (and to control the&#xA;  heating)? Most examples just &quot;attach a battery&quot; to the wire, but afaik&#xA;  that is simply short-circuiting the battery, and heating the wire very&#xA;  inneficiently (and also may damage the battery and it could even be&#xA;  dangerous). So what's a safe and efficient way to produce the heat&#xA;  necessary to make the nylon muscle react? (I've read 150 centigrads,&#xA;  could that be correct?) for example with an arduino? or a simple&#xA;  circuit in a breadboard?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, short-circuiting a battery with a very low load resistance can damage the battery.&#xA;To prevent the internal resistance of the battery from heating up the battery enough to cause damage,&#xA;Use heater wires that have much higher resistance than the internal resistance of the battery.&#xA;Or in other words,&#xA;Pick a battery or other power source with an internal resistance much lower than the load resistance of the heater wires.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://writerofminds.blogspot.com/2014/05/homemade-artificial-muscles-iv.html&quot; rel=&quot;nofollow&quot;&gt;Homemade Artificial Muscles IV&lt;/a&gt; article says&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I'm powering it with a 3V wall wart, and it is drawing 1.17 A.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;which implies that the total load about 2.5 Ohms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(I expect the heater strand is about 2 Ohms of resistance,&#xA;every connection has about 0.1 Ohms of resistance,&#xA;and the total resistance of all the hook-up wires and the stuff inside the wall wart is maybe around 0.1 Ohms of resistance).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lots of power supplies (wall warts, batteries, etc.) can easily supply 3V at well over 2 A without getting noticeably warm, much less hot enough to cause any damage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The article&#xA;&lt;a href=&quot;http://www.sciencefriday.com/articles/how-to-make-an-artificial-muscle-out-of-fishing-line/&quot; rel=&quot;nofollow&quot;&gt;&quot;How to Make an Artificial Muscle Out of Fishing Line&quot;&lt;/a&gt;&#xA;suggests&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&quot;it’s best to stay below 150 °C or 300 °F ...&quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The article&#xA;&lt;a href=&quot;http://www.sciencemag.org/content/343/6173/868.figures-only&quot; rel=&quot;nofollow&quot;&gt;&quot;Artificial Muscles from Fishing Line and Sewing Thread&quot;&lt;/a&gt;&#xA;says that they got maximum contraction &quot;at ~130°C&quot;,&#xA;and most of their tests cycled the temperature of their artificial muscles &quot;between 25° and 95°C&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An Arduino could easily indirectly control a MOSFET or a relay that could handle a few amps of current.&#xA;(The high current would go through a circuit that includes only that switching element and the heating strand and the power supply and the thick connector wires between them.&#xA;Directly sending over an amp (1 A) through an Arduino or a solderless breadboard would damage those boards).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you can't get a circuit working after searching the internet for &quot;Arduino relay&quot; or &quot;Arduino mosfet&quot; circuits, come back and ask a separate question.&lt;/p&gt;&#xA;" OwnerUserId="187" LastActivityDate="2015-11-21T19:33:00.850" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8525" PostTypeId="1" AcceptedAnswerId="8529" CreationDate="2015-11-21T20:51:02.850" Score="2" ViewCount="113" Body="&lt;p&gt;I'm building quadcopter from scratch, software is implemented on STM32F4 microcontroller. Frequency of main control loop equals 400Hz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've though everything is almost finished but when i've mounted everything and started calibration of PIDs i faced a problem.&#xA;It was impossible to adjust PID parameters properly.&#xA;So i started test with lower power (not enough to fly) and i've managed quite fast adjust PID for roll but when i've increased power problems with control came back.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After that i've done more measurements.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/2Bix8.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2Bix8.jpg&quot; alt=&quot;Roll angle with engines off&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/y2878.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/y2878.jpg&quot; alt=&quot;Roll angle with engines on but without blades from complementary filter&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I didn't make test with blades but probably this is even worse and that is why i cannot calibrate it.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If problem is due to vibration how can i fix it?&lt;/li&gt;&#xA;&lt;li&gt;If something else is cause of that symptom, what is it?&lt;/li&gt;&#xA;&lt;li&gt;Can i solve this through better controls and data fusion algorithms?&#xA;Now i use complementary filter for acc and gyro sensors data fusion in roll and pitch.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="10599" LastActivityDate="2015-11-23T03:18:44.137" Title="Quadrocopter problem with stability" Tags="&lt;control&gt;&lt;imu&gt;&lt;accelerometer&gt;&lt;gyroscope&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8526" PostTypeId="1" CreationDate="2015-11-22T09:44:55.160" Score="1" ViewCount="1203" Body="&lt;p&gt;I am new to robotics,&#xA;I will be controlling DC motors from Android device through USB&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For this I have selected L298N motor controller(After watching YouTube videos )&#xA;And got some DC motors&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have no idea how do I connect this to Android device via USB cable&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Help appreciated&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ref:&#xA;&lt;a href=&quot;https://www.bananarobotics.com/shop/L298N-Dual-H-Bridge-Motor-Driver&quot; rel=&quot;nofollow&quot;&gt;https://www.bananarobotics.com/shop/L298N-Dual-H-Bridge-Motor-Driver&lt;/a&gt;&#xA;&lt;a href=&quot;https://youtu.be/XRehsF_9YQ8&quot; rel=&quot;nofollow&quot;&gt;https://youtu.be/XRehsF_9YQ8&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS: All I know is programming android&lt;/p&gt;&#xA;" OwnerUserId="11146" LastEditorUserId="11146" LastEditDate="2015-11-22T11:22:20.960" LastActivityDate="2017-12-02T21:02:38.660" Title="Which USB interface for Android device I can use for motor driver" Tags="&lt;motor&gt;&lt;usb&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8527" PostTypeId="1" CreationDate="2015-11-22T13:46:28.340" Score="1" ViewCount="123" Body="&lt;p&gt;I have a small bot(around 4-5kg with wheels) which is to be pushed without contact by another bot. I plan to do this using a bru and a propeller. I am having problems selecting the right combination. Please help me with these questions:-&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Should the bldc be high kv or low kv(will i need high rpm or low rpm)&lt;/li&gt;&#xA;&lt;li&gt;What is the  ideal propeller to use with the motor so that i can create enough thrust to get the 'small' bot in motion and keep it in motion?&lt;/li&gt;&#xA;&lt;li&gt;What are the other criteria i should keep in mind while selecting.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="11147" LastActivityDate="2015-11-22T13:46:28.340" Title="Which brushless dc and propeller to choose?" Tags="&lt;brushless-motor&gt;" AnswerCount="0" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="8528" PostTypeId="2" ParentId="8526" CreationDate="2015-11-22T13:59:21.163" Score="3" Body="&lt;p&gt;What you want cannot be simply done by using an Android device and a USB cable. You will need a micro controller to process the instruction sent from your mobile device and then control the motor movement. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The android device will communicate to the arduino using say Bluetooth(although there are many other alternatives you can select), the arduino will process your instruction sent over bluetooth and then as per your logic it will drive the motor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To control L298N a single motor using L298N you will use the input terminals 1&amp;amp;2. These will be connected to your micro controller. The motor terminals will be connected to the Output 1 &amp;amp; 2. &#xA;Check this image of a micro controller being connected to a motor driver.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/JVb1s.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JVb1s.jpg&quot; alt=&quot;MCU -&amp;gt; Motor Driver -&amp;gt; Motors&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;L298N is usually used for motors which have a higher current requirement, thus you will also have to look for alternate power supply arrangements too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S. If your motors don't require a lot of power you may consider using L293D which is simpler to use than L298N.&lt;/p&gt;&#xA;" OwnerUserId="11147" LastActivityDate="2015-11-22T13:59:21.163" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8529" PostTypeId="2" ParentId="8525" CreationDate="2015-11-22T22:48:48.143" Score="2" Body="&lt;p&gt;You have far too much vibration reaching your sensors. Mount the board you're using with vibration damping mounts, this should solve most of your problem. An easy way to do this is to attach each corner of your board to the frame using a small but thick piece of double stick squishy foam[1]. The board will now act as a spring mass damper attached to your frame. By making the pieces of foam narrower you will increase the cutoff frequency of the system. Here is a link to an arducopter page talking about vibration damping to solve this problem[2].&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While a complementary filter may be suitable for your application, the correct tool for estimating attitude is a kalman filter capable of handling nonlinear system dynamics and measurement dynamics. The pixhawk uses an extended kalman filter to estimate attitude[3]. It may be overkill for your system depending on how far you want your quad to deviate from level hover.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[1]&lt;a href=&quot;http://hobbyking.com/hobbyking/store/__26457__anti_vibration_foam_orange_latex_190mm_x_140mm_x_6mm.html&quot; rel=&quot;nofollow&quot;&gt;http://hobbyking.com/hobbyking/store/__26457__anti_vibration_foam_orange_latex_190mm_x_140mm_x_6mm.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[2]&lt;a href=&quot;http://copter.ardupilot.com/wiki/common-vibration-damping/&quot; rel=&quot;nofollow&quot;&gt;http://copter.ardupilot.com/wiki/common-vibration-damping/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[3]&lt;a href=&quot;https://pixhawk.org/firmware/apps/attitude_estimator_ekf&quot; rel=&quot;nofollow&quot;&gt;https://pixhawk.org/firmware/apps/attitude_estimator_ekf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8842" LastEditorUserId="8842" LastEditDate="2015-11-23T03:18:44.137" LastActivityDate="2015-11-23T03:18:44.137" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8530" PostTypeId="2" ParentId="8510" CreationDate="2015-11-23T09:50:44.170" Score="1" Body="&lt;p&gt;Dead Reckoning: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Robot moves and counts its steps (or better said the rotation of its wheels), it tends to drift with longer distances. Can be made robuster by fusing information from an IMU (acceleration plus rotation speed) Needs an exact position initialization, especially the rotation angle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Montecarlo localization: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using a known map, the robot compares what it observed using its lidar and tries to fit it to the map, the result is a probabilistic state estimation that tends to converge as the robot moves. It needs an expensive lidar. Can be done with a kinect though. Needs a rough position initialization most of the times.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Purely visual methods: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Observe environment with a camera and find features that belong to one specific position. Not very scalable and needs a lot of computing power. Most of the time not very accurate positioning, but can be used as position initialization for other algorithms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is also plenty of other methods that require an additional infrastructure like installing bluetooth beans all over the building, or using Wifi routers if they are already there. Many companies also offer solution with magnetic wires installed under the floor that robots can detect. RFID tags are also another cheap solution but not so accurate. Another classical approach is using &lt;a href=&quot;http://www.uco.es/investiga/grupos/ava/node/26&quot; rel=&quot;nofollow&quot;&gt;AR markers&lt;/a&gt; combined with a monocular camera, a cheap localization system with a high accuracy.&lt;/p&gt;&#xA;" OwnerUserId="4429" LastActivityDate="2015-11-23T09:50:44.170" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8531" PostTypeId="2" ParentId="8510" CreationDate="2015-11-23T11:35:26.727" Score="0" Body="&lt;p&gt;For drone tracking my institute uses the commercial system &lt;a href=&quot;http://www.optitrack.com/motion-capture-robotics/&quot; rel=&quot;nofollow&quot;&gt;OptiTrack&lt;/a&gt;. It uses cameras and special markers placed on the robot and/or other objects to localize them. They have a high precision:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;OptiTrack’s drone and ground robot tracking systems consistently produce positional error less than 0.3mm and rotational error less than 0.05°. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Therefore this system is also used as a &lt;a href=&quot;https://en.wikipedia.org/wiki/Ground_truth&quot; rel=&quot;nofollow&quot;&gt;ground truth&lt;/a&gt; to compare and verify other localization algorithms.&lt;/p&gt;&#xA;" OwnerUserId="10041" LastActivityDate="2015-11-23T11:35:26.727" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8532" PostTypeId="2" ParentId="7558" CreationDate="2015-11-23T14:39:05.893" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;the &lt;code&gt;Kp&lt;/code&gt; is the period&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No it's not, Kp is a proportional gain. If your sampling times are very stable, then it becomes possible to modify gains because of the associative properties of multiplication and division. For a PID controller:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\mbox{Controller Output = Proportional Term + Integral Term + Derivative Term} \\&#xA;$$&#xA;$$&#xA;\mbox{Controller Output} = k_P*e_P + k_I*e_I + k_D*e_D \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $e_P$, $e_I$, and $e_D$ are the proportional, integral, and derivative error terms, as defined by:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;e_{P_k} = \mbox{reference - output} \\&#xA;e_{I_k} = e_{I_{k-1}} + e_{P_k}*dT \\&#xA;e_{D_k} = e_{P_k}/dT \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that there is no $dT$ term in the proportional error equation! So you do not tune the proportional gain for any given sample time. $k_P$ should always be the same $k_P$. If the starting errors are all set to zero, then the first sample ($k = 1$) for integral and derivative gains should look like the following:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;e_{I_1} = e_{I_{0}} + e_P*dT \\&#xA;e_{I_1} = 0 + e_P*dT \\&#xA;e_{D_1} = e_P/dT \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here, because derivative gain never &quot;remembers&quot; any previous states, it should be clear that you can move the sample rate into the gain as follows:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\mbox{Derivative Term} = k_D*eD \\&#xA;\mbox{Derivative Term} = k_D*(e_P/dT) \\&#xA;\boxed{\mbox{Derivative Term} = (k_D/dT)*e_P} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the integral error, &lt;em&gt;because the initial error is set to zero&lt;/em&gt;, try writing out the first few samples to get the pattern:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;e_{I_1} = 0 + e_{P_1}*dT \\&#xA;e_{I_1} = e_{P_1}*dT \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;e_{I_2} = e_{I_1} + e_{P_2}*dT \\&#xA;e_{I_2} = e_{P_1}*dT + e_{P_2}*dT \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;e_{I_3} = e_{I_2} + e_{P_3}*dT \\&#xA;e_{I_3} = e_{P_1}*dT + e_{P_2}*dT + e_{P_3}*dT \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And so again, &lt;em&gt;if the sample rate is constant&lt;/em&gt;, you can simplify:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;e_{I_N} = \left( \Sigma_{i=1}^N  e_{P_i} \right) *dT&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which gives:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\mbox{Integral Term} = k_I * e_I \\&#xA;\mbox{Integral Term} = k_I * \left( \left( \Sigma_{i=1}^N  e_{P_i} \right) *dT \right) \\&#xA;\boxed{ \mbox{Integral Term} = \left( k_I *dT \right) * \left( \Sigma_{i=1}^N  e_{P_i} \right) }\\&#xA;$$&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-11-23T14:39:05.893" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8533" PostTypeId="2" ParentId="5059" CreationDate="2015-11-24T09:26:34.720" Score="0" Body="&lt;p&gt;Check out this paper by Oussama Khatib, Peter Thaulad, Taizo Yoshikawa and Jaeheung Park from the Stanford Artificial Intelligence Laboratory:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://ieeexplore.ieee.org/xpl/login.jsp?tp=&amp;amp;arnumber=4543450&amp;amp;url=http%3A%2F%2Fieeexplore.ieee.org%2Fiel5%2F4534525%2F4543169%2F04543450.pdf%3Farnumber%3D4543450&quot; rel=&quot;nofollow&quot;&gt;Torque-position transformer for task control of position controlled robots&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="11160" LastEditorUserId="37" LastEditDate="2015-11-30T17:34:41.000" LastActivityDate="2015-11-30T17:34:41.000" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8539" PostTypeId="1" CreationDate="2015-11-25T10:50:45.600" Score="1" ViewCount="557" Body="&lt;p&gt;Say I have a motor and I want it to spin at exactly 2042.8878 revolutions per minute.  Say I have a very precise sensor to detect the RPM of the motor to a resolution of 1/1000th of a revolution per minute.  &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Can I produce a PWM signal which can match the speed to that degree of &#xA;precision?  &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;What variables in the signal parameters would I have to adjust to get the precision if possible?  &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Would I have to use additional circuitry between the motor and the driver?  &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Would I have to design the signal/circuitry around the specific specifications of the motor?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Should I just use a stepper motor?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This is assuming I am using a microcontroller to measure the motor's speed and adjust the signal in real-time to maintain a certain speed.&lt;/p&gt;&#xA;" OwnerUserId="11171" LastActivityDate="2015-11-26T08:31:11.130" Title="How can I increase the resolution of a PWM signal?" Tags="&lt;motor&gt;&lt;microcontroller&gt;&lt;stepper-motor&gt;&lt;pwm&gt;&lt;stepper-driver&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8540" PostTypeId="2" ParentId="8539" CreationDate="2015-11-25T13:58:04.093" Score="1" Body="&lt;p&gt;The PWM signal should not be the limiting factor in achieving the accuracy you seek.  For some applications, PWM signals are chopped &gt; 100 kHz, so, given the correct DSP or microcontroller output to create the PWM, you will have as much control over the power going into the motor as you need.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most of the motion control system I've built have had PWM amplifiers between the microcontroller and the motor.  If you don't have those amplifiers, then yes, you will need to put additional circuitry between your controller and your motor.  You can get these off-the-shelf, or you can chop a power FET (often using another FET to get the speed) based off of a variable duty-cycle pulsed signal.  It is this chopping signal that you will adjust to drive more, or less, power into your motor.  If your system's load varies greatly, you may need to put a control loop around this signal so you can keep it stable.  See Brian's references about speed control of motors.  Loops similar to those position and speed control loops would be used to dampen the rate of change of your PWM driver.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think you need to look at your specifications, though.  If your sensor has a shaft rotation resolution of 1/1000 rpm, how will you ever control the shaft to a speed of XXXX.YYYY (1/10,000 rpm accuracy)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a continuous-rotation application, a stepper might be a better solution.  It is brushless for long life, easy to control, and has its own type of feedback.  But you need to be sure to get enough pulses per revolution to get the accuracy you're looking for.  If you have a 512 pulse/rev stepper, that is only ~ 30k pulses/min.  With that you can barely achieve a speed accuracy of 1/10k.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2015-11-25T13:58:04.093" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8541" PostTypeId="2" ParentId="8539" CreationDate="2015-11-25T14:00:32.373" Score="3" Body="&lt;p&gt;You won't ever get 'exactly' 2042.8878 RPM, so going with your measurement accuracy I will assume you mean 2042.8878 +/- 0.0005 RPM. This is approximately an error of 1 part in 4 million. So let's assume you can set up a timer which counts up to around 4 million and resets, and use that for the PWM. Assuming a two pole motor, 2042 RPM is 34 electrical rotations per second, and you would want to PWM it at with about ten PWM cycles per electrical rotation, so your PWM timer needs to increment (4 million * 10 * 34 ) times per second, equivalent to 1.4 GHz. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are microcontrollers with that sort of clock frequency, so it is not downright impossible. You'd also have to do the PID control to calculate what the value should be, and doing that to one part in 4 million will take a time to settle. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Stepper motors typically don't run that fast - torque drops to zero around 1200 RPM, though some specialist steppers can run faster ( see SteveO's comment below ).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Brushless motors would require commutation through six phases, and ideally have a several PWM cycles per phase, so would need around six times the timer frequency and so be out the range of simple PWM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can also dither the PWM so of the ten per phase energised you stretch n to give one more digit; this would reduce the clock required by a factor of 10 so may make it practical, but it's not trival to control to that level of accuracy.&lt;/p&gt;&#xA;" OwnerUserId="1321" LastEditorUserId="1321" LastEditDate="2015-11-25T23:14:58.190" LastActivityDate="2015-11-25T23:14:58.190" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="8544" PostTypeId="1" CreationDate="2015-11-25T16:38:52.647" Score="1" ViewCount="128" Body="&lt;p&gt;Not sure if I am posting this question in the correct community, as it relates primarily to reinforcement learning. Apologies early on if this is not so.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In reinforcement learning many algorithms exist for 'solving' the cart-pole problem; that of balancing a mass on the edge of a stick, connected to a cart on a hinge, which has 1 DoF. There is TD learning, Q-learning and many other on and off-policy methods. There is also the more recent, model-based policy search method &lt;a href=&quot;http://mlg.eng.cam.ac.uk/pilco/&quot; rel=&quot;nofollow&quot;&gt;PILCO&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I am really wondering, I suppose is more of a physics question: is there a need for active control? Why is it not possible to find the one point for the cart, which prevents the mass to move, even incrementally, left or right as it sits atop the pole? Why does it always 'fall'?&lt;/p&gt;&#xA;" OwnerUserId="11175" LastActivityDate="2015-11-25T17:12:03.327" Title="Pole-balancing / inverted-pendulum; is there a need for active control?" Tags="&lt;control&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8545" PostTypeId="2" ParentId="8544" CreationDate="2015-11-25T17:05:48.753" Score="5" Body="&lt;p&gt;Your question might be better suited to another forum, but is definitely important for robotics in general. You are basically talking about &lt;em&gt;unstable equilibrium&lt;/em&gt;, where there does exist a point where the pole is balanced, but any small perturbation (random unforeseen input like wind or vibration) will cause it to diverge away from that balance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is one reason why active control is necessary. But even if the pole were a regular pendulum hanging down (with a &lt;em&gt;stable equilibrium&lt;/em&gt; point), you still might want active control to stop it from swinging around too much. In the end, active control is what you need if you want to change the system dynamics -- whether that means going from unstable to stable or just improving the response for desired performance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you consider this in the context of reinforcement learning, you can think about active control as the input you still need for certain actions to account for effects that cannot be modelled. For example, driving a car involves learned actions that you simply just &quot;do&quot; without any real active control, like moving your eyes to look in the rear-view mirror. However, it also involves lots of active control to react to the changing environment (otherwise you could drive around blind-folded).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Take a look at combined feedback and feed-forward control, where the former is the active control and the latter representative of learned inputs.&lt;/p&gt;&#xA;" OwnerUserId="10836" LastEditorUserId="10836" LastEditDate="2015-11-25T17:12:03.327" LastActivityDate="2015-11-25T17:12:03.327" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8546" PostTypeId="1" AcceptedAnswerId="8553" CreationDate="2015-11-26T01:23:16.723" Score="2" ViewCount="2129" Body="&lt;p&gt;I am currently applying path planning to my robotic arm (in Gazebo) and have chosen to use an RRT. In order to detect points of collision, I was thinking of getting a Point Cloud from a Kinect subscriber and feeding it to something like an Octomap to have a collision map I could import into Gazebo. However, there is no Gazebo plugin to import Octomap files and I do not have enough experience to write my own. The next idea would be to instead feed this point cloud to a mesh generator (like Meshlab) and turn that into a URDF, but before starting I'd rather get the input of somebody far more experienced. Is this the right way to go? Keep in mind the environment is static, and the only things moving are the arms. Thank you. Below is just a picture of an octomap.&lt;a href=&quot;https://i.stack.imgur.com/B8OEZ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/B8OEZ.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11004" LastActivityDate="2015-11-27T03:45:30.400" Title="Modelling Point Clouds for Collision Detection in Gazebo" Tags="&lt;robotic-arm&gt;&lt;localization&gt;&lt;slam&gt;&lt;kinect&gt;&lt;gazebo&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8547" PostTypeId="2" ParentId="8539" CreationDate="2015-11-26T08:20:51.547" Score="0" Body="&lt;p&gt;Using a hardware PWM system based on a comparison-voltage source, a triangle-wave generator, and a comparator, you can set as many different output levels as your comparison-voltage source can generate.  A charge-transfer system like that diagrammed below can be used to develop almost arbitrarily many different levels.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/ieSuW.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ieSuW.jpg&quot; alt=&quot;hardware PWM system&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In operation, the voltage on C1 supplies one input to a comparator, via a unity-gain buffer.  A triangle wave oscillator supplies the other input, generating a PWM signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The voltage on C1 is set by turning on, turning off, or setting to high-impedance one or more of digital inputs D1...D3, then turning on D4 for a controlled interval, to slightly raise or lower the voltage on C1.  For example, suppose C1 = 0.1 μF and V&lt;sub&gt;C1&lt;/sub&gt; = 2 V.  Turning on D4 for 1 ms with D1 on will raise V&lt;sub&gt;C1&lt;/sub&gt; by .21 V; turning on D4 for 4 μs with D3 on will raise V&lt;sub&gt;C1&lt;/sub&gt; by 8 μV.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to control to about 1 part in 4 million using this method in simplest form, then R3 may need to be larger.  But of course slightly more involved alternative schemes can get by with smaller resistors.  For example, if R2 is 10 MΩ and R3 is 10.01 MΩ, you could raise V&lt;sub&gt;C1&lt;/sub&gt; by a few nV by turning on D2 high for a fraction of a microsecond, then returning it to high impedance and turning on D3 low for the same length of time, or could lower V&lt;sub&gt;C1&lt;/sub&gt; by doing vice versa; or could turn on both briefly high, then one briefly low, etc.  Another approach is to have D4 trigger a one-shot that closes S1 for a few nanoseconds, rather than depending on use of a fast microcontroller clock.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you actually use a system like this, write a program that computes voltage rates of change for all combinations of your digital inputs, at various voltages on C1.  Also analyze the system for stability.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note, D4 is controlling a JFET switch S1 to isolate C1 from leakage that could occur through D1-D3 if S1 were left out.  For example, the Atmega328 data sheet shows a max leakage of 1 μA on typical inputs in high impedance state, which is about a million times the leakage of a good JFET.  However, typical leakages of Atmega inputs – rather than max leakages – might be much less.  One could run experiments to see if S1 is indeed necessary.&lt;/p&gt;&#xA;" OwnerUserId="478" LastEditorUserId="478" LastEditDate="2015-11-26T08:31:11.130" LastActivityDate="2015-11-26T08:31:11.130" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8548" PostTypeId="2" ParentId="4986" CreationDate="2015-11-26T15:45:53.073" Score="0" Body="&lt;p&gt;Proces of integration is associated with error accumulation even with more advanced algorythms like &lt;a href=&quot;https://en.wikipedia.org/wiki/Runge%E2%80%93Kutta_methods&quot; rel=&quot;nofollow&quot;&gt;RK4&lt;/a&gt;. You need another sensor to avoid that and use sensor fusion algorytm (complementary filter or Kalman Filter) to merge the data. You can use sonar to detact distance to the groudn or barometer and differentiatite it to get velocity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you get that use regulator to control it's velocity, diference in velocity bacame your error.&lt;/p&gt;&#xA;" OwnerUserId="10599" LastActivityDate="2015-11-26T15:45:53.073" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8549" PostTypeId="1" AcceptedAnswerId="8550" CreationDate="2015-11-26T16:36:51.750" Score="0" ViewCount="2130" Body="&lt;p&gt;Is it possible to decouple a 5DOF manipulator? &#xA;This question I asked earlier and I believe I got the right answers but I never show the drawings of the manipulator and now I'm hesitating during setup of the DH parameters for Forward Kinematics. See drawing depicted here.&lt;a href=&quot;https://i.stack.imgur.com/fUCIF.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fUCIF.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/QiEgK.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QiEgK.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11104" LastEditorUserId="110" LastEditDate="2015-12-02T20:28:53.390" LastActivityDate="2015-12-02T20:28:53.390" Title="DH parameters and Kinematic Decoupling" Tags="&lt;kinematics&gt;&lt;forward-kinematics&gt;&lt;dh-parameters&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8550" PostTypeId="2" ParentId="8549" CreationDate="2015-11-26T17:28:15.410" Score="1" Body="&lt;p&gt;The first manipulator shown is a typical articulated arm without the final roll about the tool axis.  Just use the DH parameters for a Puma but set joint 6 = 0.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know of any shortcuts for the second manipulator other than working out the DH parameters directly.  However, DH seems like overkill for this design.  DH allows you to handle things like joint twists and other offsets, which your manipulator does not have.  Rather than that, would you consider using simple rotation matrices and a vector loop to describe the end effector position and orientation with respect to the global coordinate system?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/WNzfF.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/WNzfF.png&quot; alt=&quot;5DOF with coordinate systems&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this picture I show your link lengths $L_1$, $L_2$, and $L_3$, along with coordinate systems $0$ through $5$. I left the $\hat Y$ axes out for clarity, but they follow the right-hand rule.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your positional vector loop is $$\vec P_t = L_1 \hat Z_1 + L_2 \hat X_2 + L_3 \hat Z_5$$&#xA;where $\vec P_t$ represents the position of the center of your tool tip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now find the rotation matrices to define the unit vectors $\hat Z_1$, $\hat X_2$, and $\hat Z_5$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I will use $_x^{x+1}R$ for the rotation matrix between coordinate systems $x$ and $x+1$, and $\theta_i$ to represent the $i$th joint angle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$_0^1R = \begin{bmatrix}&#xA;\cos \theta_1&amp;amp;-\sin \theta_1&amp;amp;0\\&#xA;\sin \theta_1&amp;amp;\cos \theta_1&amp;amp;0\\&#xA;0&amp;amp;0&amp;amp;1&#xA;\end{bmatrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$_1^2R = \begin{bmatrix}&#xA;\cos \theta_2&amp;amp;-\sin \theta_2&amp;amp;0\\&#xA;0&amp;amp;0&amp;amp;1\\&#xA;-\sin \theta_2&amp;amp;-\cos \theta_2&amp;amp;0&#xA;\end{bmatrix}&#xA;$$&#xA;(notice $\hat Y_2$ should point &quot;down&quot;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$_2^3R = \begin{bmatrix}&#xA;0&amp;amp;0&amp;amp;1\\&#xA;-\sin \theta_3&amp;amp;-\cos \theta_3&amp;amp;0\\&#xA;\cos \theta_3&amp;amp;-\sin \theta_3&amp;amp;0&#xA;\end{bmatrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$_3^4R = \begin{bmatrix}&#xA;\sin \theta_4&amp;amp;-\cos \theta_4&amp;amp;0\\&#xA;0&amp;amp;0&amp;amp;1\\&#xA;-\cos \theta_4&amp;amp;-\sin \theta_4&amp;amp;0&#xA;\end{bmatrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$_4^5R = \begin{bmatrix}&#xA;0&amp;amp;0&amp;amp;1\\&#xA;\cos \theta_5&amp;amp;-\sin \theta_5&amp;amp;0\\&#xA;\sin \theta_5&amp;amp;\cos \theta_5&amp;amp;0&#xA;\end{bmatrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now find the unit vectors needed for your vector loop (all with respect to the global coordinate system $0$).  $\hat Z_1$ is the third column from $_0^1R$:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\hat Z_1 = \left( \begin{array}&#xA;{c}0\\&#xA;0\\&#xA;1&#xA;\end{array} \right)&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\hat X_2$ is the first column from $_0^2R$, which you find by multiplying $_0^1R _1^2R$:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$_0^2R = \begin{bmatrix}&#xA;\cos \theta_1 \cos \theta_2&amp;amp;-\cos \theta_1 \sin \theta_2&amp;amp; -\sin \theta_1\\&#xA;\sin \theta_1 \cos \theta_2&amp;amp;-\sin \theta_1 \sin \theta_2&amp;amp; \cos \theta_1\\&#xA;-\sin \theta_2&amp;amp;-\cos \theta_2&amp;amp;0&#xA;\end{bmatrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\hat X_2 = \left( \begin{array}&#xA;{c}\cos \theta_1 \cos \theta_2\\&#xA;\sin \theta_1 \cos \theta_2\\&#xA;-\sin \theta_2&#xA;\end{array} \right)&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a similar way you can find $\hat Z_5$:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\hat Z_5 = \left( \begin{array}&#xA;{c}\sin \theta_4 (\cos \theta_1 \sin \theta_2 \sin \theta_3 - \sin \theta_1 \cos \theta_3) - \cos \theta_1 \cos \theta_2 \cos \theta_4\\&#xA;\sin \theta_4 (\sin \theta_1 \sin \theta_2 \sin \theta_3 + \cos \theta_1 \cos \theta_3) - \sin \theta_1 \cos \theta_2 \cos \theta_4\\&#xA;\cos \theta_2 \sin \theta_3 \sin \theta_4 + \sin \theta_2 \cos \theta_4&#xA;\end{array} \right)&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Plugging values for the link lengths, and unit vectors, into your vector loop equation gets you the tool tip position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the upper left $3x3$ submatrix of your 4x4 DH matrix, you just use $_0^5R$ (assuming the coordinate system definitions are the same).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now back to your wrist partitioning question.  You can use the same technique to compute the origin of the $4$ coordinate system ($L_1 \hat Z_1 + L_2 \hat X_2$).  Rotations $\theta_3$, $\theta_4$ and $\theta_5$ do not affect the position of this point, which is often referred to as the wrist center.  Those three joints can then orient the tool with respect to the $4$ coordinate system.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastEditorUserId="11125" LastEditDate="2015-11-27T17:56:12.073" LastActivityDate="2015-11-27T17:56:12.073" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="8551" PostTypeId="2" ParentId="6683" CreationDate="2015-11-26T19:50:13.050" Score="0" Body="&lt;p&gt;You can use motion planning and path planning interchangeably. Both of these terms represent a geometric concept. But a trajectory has a higher level compared to a path. It contains the geometric concept of a path but it also encompasses a velocity or even an acceleration profile.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider the geometric path the Google Maps gives you when you give it two different points. Google Maps solves a motion/path planning problem based on your travel type, i.e. Car, Bus, Bicycle. But it does not tell you how fast or slow you should go. But for the driver-less cars, after finding a geometric path, you should also find a profile of velocity and acceleration that the car must follow. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Usually the geometric part is considered as a path/motion planning problem while generating the trajectory from a geometric path and following it is considered a controls systems problem.&lt;/p&gt;&#xA;" OwnerUserId="2389" LastActivityDate="2015-11-26T19:50:13.050" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8553" PostTypeId="2" ParentId="8546" CreationDate="2015-11-27T03:18:52.970" Score="1" Body="&lt;p&gt;For the most part I was able to get this done. The only difference I chose was to use the Point Cloud library's triangular mesh generator instead of Meshlab's mesh generator mainly because Meshlab's generator is interactive. Below is the image of the Kinect (on top of the Baxter) taking a picture of the shelf, and a picture of the STL put together from the PointCloud the Kinect took.&lt;a href=&quot;https://i.stack.imgur.com/2qp64.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2qp64.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/CbpMx.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/CbpMx.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The code I used is as below:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;ros/ros.h&amp;gt;&#xA;#include &amp;lt;sensor_msgs/PointCloud2.h&amp;gt;&#xA;#include &amp;lt;pcl_conversions/pcl_conversions.h&amp;gt;&#xA;#include &amp;lt;pcl/point_cloud.h&amp;gt;&#xA;#include &amp;lt;pcl/point_types.h&amp;gt;&#xA;#include &amp;lt;pcl/io/pcd_io.h&amp;gt;&#xA;#include &amp;lt;pcl/kdtree/kdtree_flann.h&amp;gt;&#xA;#include &amp;lt;pcl/features/normal_3d.h&amp;gt;&#xA;#include &amp;lt;pcl/surface/gp3.h&amp;gt;&#xA;#include &amp;lt;pcl/io/vtk_io.h&amp;gt;&#xA;#include &amp;lt;pcl/io/vtk_lib_io.h&amp;gt;&#xA;#include &amp;lt;pcl/io/io.h&amp;gt;&#xA;int n = 0;&#xA;void &#xA;cloud_cb ()&#xA;{&#xA; // Load input file into a PointCloud&amp;lt;T&amp;gt; with an appropriate type&#xA;  pcl::PointCloud&amp;lt;pcl::PointXYZ&amp;gt;::Ptr cloud (new pcl::PointCloud&amp;lt;pcl::PointXYZ&amp;gt;);&#xA;  pcl::PCLPointCloud2 cloud_blob;&#xA;  pcl::io::loadPCDFile (&quot;mesh.pcd&quot;, cloud_blob);&#xA;  pcl::fromPCLPointCloud2 (cloud_blob, *cloud);&#xA;  //* the data should be available in cloud&#xA;&#xA;  // Normal estimation*&#xA;  pcl::NormalEstimation&amp;lt;pcl::PointXYZ, pcl::Normal&amp;gt; n;&#xA;  pcl::PointCloud&amp;lt;pcl::Normal&amp;gt;::Ptr normals (new pcl::PointCloud&amp;lt;pcl::Normal&amp;gt;);&#xA;  pcl::search::KdTree&amp;lt;pcl::PointXYZ&amp;gt;::Ptr tree (new pcl::search::KdTree&amp;lt;pcl::PointXYZ&amp;gt;);&#xA;  tree-&amp;gt;setInputCloud (cloud);&#xA;  n.setInputCloud (cloud);&#xA;  n.setSearchMethod (tree);&#xA;  n.setKSearch (20);&#xA;  n.compute (*normals);&#xA;  //* normals should not contain the point normals + surface curvatures&#xA;&#xA;  // Concatenate the XYZ and normal fields*&#xA;  pcl::PointCloud&amp;lt;pcl::PointNormal&amp;gt;::Ptr cloud_with_normals (new pcl::PointCloud&amp;lt;pcl::PointNormal&amp;gt;);&#xA;  pcl::concatenateFields (*cloud, *normals, *cloud_with_normals);&#xA;  //* cloud_with_normals = cloud + normals&#xA;&#xA;  // Create search tree*&#xA;  pcl::search::KdTree&amp;lt;pcl::PointNormal&amp;gt;::Ptr tree2 (new pcl::search::KdTree&amp;lt;pcl::PointNormal&amp;gt;);&#xA;  tree2-&amp;gt;setInputCloud (cloud_with_normals);&#xA;&#xA;  // Initialize objects&#xA;  pcl::GreedyProjectionTriangulation&amp;lt;pcl::PointNormal&amp;gt; gp3;&#xA;  pcl::PolygonMesh triangles;&#xA;&#xA;  // Set the maximum distance between connected points (maximum edge length)&#xA;  gp3.setSearchRadius (0.025);&#xA;&#xA;  // Set typical values for the parameters&#xA;  gp3.setMu (2.5);&#xA;  gp3.setMaximumNearestNeighbors (100);&#xA;  gp3.setMaximumSurfaceAngle(M_PI/4); // 45 degrees&#xA;  gp3.setMinimumAngle(M_PI/18); // 10 degrees&#xA;  gp3.setMaximumAngle(2*M_PI/3); // 120 degrees&#xA;  gp3.setNormalConsistency(false);&#xA;&#xA;  // Get result&#xA;  gp3.setInputCloud (cloud_with_normals);&#xA;  gp3.setSearchMethod (tree2);&#xA;  gp3.reconstruct (triangles);&#xA;&#xA;  // Additional vertex information&#xA;  std::vector&amp;lt;int&amp;gt; parts = gp3.getPartIDs();&#xA;  std::vector&amp;lt;int&amp;gt; states = gp3.getPointStates();&#xA;pcl::io::savePolygonFileSTL(&quot;mesh.stl&quot;, triangles);&#xA;}&#xA;&#xA;void saveFile(const sensor_msgs::PointCloud2::ConstPtr&amp;amp; input)&#xA;{&#xA;if(n &amp;lt;= 1)&#xA;{&#xA; pcl::PCLPointCloud2::Ptr pcl_input_cloud(new pcl::PCLPointCloud2);&#xA;     pcl_conversions::toPCL(*input, *pcl_input_cloud);&#xA;    pcl::io::savePCDFile(&quot;mesh.pcd&quot;, *pcl_input_cloud);&#xA;n++;&#xA;    cloud_cb();&#xA;    }&#xA;&#xA;    return; &#xA;}&#xA;&#xA;int&#xA;main (int argc, char** argv)&#xA;{&#xA;  // Initialize ROS&#xA;  ros::init (argc, argv, &quot;my_pcl_tutorial&quot;);&#xA;  ros::NodeHandle nh;&#xA;    ros::Rate loop_late(1);&#xA;  // Create a ROS subscriber for the input point cloud&#xA;  ros::Subscriber sub = nh.subscribe(&quot;/cameras/kinect/depth/points&quot;, 1, saveFile);&#xA;&#xA;    while(n&amp;lt;=1)&#xA;    {&#xA;    ros::spinOnce();&#xA;    loop_late.sleep();&#xA;    }&#xA;return 0;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Most of the code is copied exactly from &lt;a href=&quot;http://pointclouds.org/documentation/tutorials/greedy_projection.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://pointclouds.org/documentation/tutorials/greedy_projection.php&lt;/a&gt; . I'll have to find a way to get a better 3D reconstruction of the shelf considering there are gaps in the levels.&lt;/p&gt;&#xA;" OwnerUserId="11004" LastEditorUserId="11004" LastEditDate="2015-11-27T03:45:30.400" LastActivityDate="2015-11-27T03:45:30.400" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8555" PostTypeId="1" AcceptedAnswerId="8557" CreationDate="2015-11-27T13:51:11.517" Score="1" ViewCount="2108" Body="&lt;p&gt;In order to perform a cyclic task, I need a trajectory planning algorithm. This trajectory should minimize jerk and jounce.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I search for trajectory planning algorithms, I get many different options, but I haven't found one which satisfies my requirements in terms of which values I can specify. An extra complicating factor is that the algorithm should be used online in a system without too much computing power, so mpc algorithms are not possible...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The trajectory I am planning is 2D, but this can be stripped down to 2 trajectories of 1 dimention each. There are no obstacles in the field, just bounds on the field itself (minimum and maximum values for x and y)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Values that I should be able to specify:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Total time needed (it should reach its destination at this specific&#xA;time) &lt;/li&gt;&#xA;&lt;li&gt;Starting and end position&lt;/li&gt;&#xA;&lt;li&gt;Starting and end velocity&lt;/li&gt;&#xA;&lt;li&gt;Starting and end acceleration&lt;/li&gt;&#xA;&lt;li&gt;Maximum values for the position.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Ideally, I would also be able to specify the bounds for the velocity, acceleration, jerk and jounce, but I am comfortable with just generating the trajectory, and then checking if those values are exceeded.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which algorithm can do that?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So far I have used fifth order polynomials, and checking for limits on velocity, acceleration, jerk and jounce afterwards, but I cannot set the maximum values for the position, and that is a problem...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you in advance!&lt;/p&gt;&#xA;" OwnerUserId="11185" LastEditorUserId="11185" LastEditDate="2015-11-30T10:05:02.023" LastActivityDate="2015-11-30T16:57:33.257" Title="Which trajectory planning algorithm for minimizing jerk" Tags="&lt;control&gt;&lt;algorithm&gt;" AnswerCount="2" CommentCount="10" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8556" PostTypeId="1" AcceptedAnswerId="8558" CreationDate="2015-11-27T19:45:01.913" Score="2" ViewCount="2171" Body="&lt;p&gt;I'm building a line following robot. I have made different chassis designs. The main prototype I'm using is a rectangle base. At one side motors are placed. On the other side of the rectangle caster wheel is placed in the middle. Look at the following image.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/e89HK.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/e89HK.png&quot; alt=&quot;Robot Design Prototype&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By varying the values of &lt;code&gt;distance&lt;/code&gt;, I have seen that the stability of the robot is varying rapidly. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm driving the robot using &lt;code&gt;PID&lt;/code&gt;. I have seen that for some chassis designs it is very hard(sometimes impossible) to calculate correct constant values. And for some chassis it is very easy. By the word &lt;strong&gt;stability&lt;/strong&gt; I meant this. I have a feeling that the robot dimensions, &lt;code&gt;distance&lt;/code&gt; values and that stability has a relationship..&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there an equation or something that can be used to estimate the value of the &lt;code&gt;distance&lt;/code&gt; when the width of the robot is known..?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other than that is there a relationship between robot weight and diameter of the wheel or robot dimensions and the diameter..?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks for the attention!!&lt;/p&gt;&#xA;" OwnerUserId="1851" LastEditorUserId="1851" LastEditDate="2015-11-27T20:24:14.597" LastActivityDate="2017-06-19T11:39:46.117" Title="Length and Width of a Line Following Robot" Tags="&lt;arduino&gt;&lt;motor&gt;&lt;pid&gt;&lt;line-following&gt;" AnswerCount="1" CommentCount="12" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8557" PostTypeId="2" ParentId="8555" CreationDate="2015-11-27T20:19:06.680" Score="4" Body="&lt;p&gt;This might not be the right answer for your problem, but it may give you some idea how you might solve this problem: &lt;br&gt; At the company, I'm working for, we have lot of issues concerning jerk and acceleration of rotary arms. Our approach is we use motion specified by a position-velocity diagram (User-Input). According to this profiles we calculate an acceleration (assuming infinite jerk). Next step is to calculate a jerk according to a so-called jerk-percentage. This is parameter we use to say how much time of the acceleration there is jerk. See &lt;a href=&quot;http://support.motioneng.com/Software-MPI_04_00/Topics/diff_mtn_types.htm&quot; rel=&quot;nofollow&quot;&gt;this link&lt;/a&gt; where this concept is explained more in detail (only the first 3 paragraphs are related to this topic). &lt;br&gt; Anyway at the moment we have still infinite jounce (this has no influence on our application anymore). I suggest go a step further. Use the same concept, call it jounce percentage, and minize it this way. &lt;br&gt; At the end you have a simple path finding process, where you only need to identify position, time and velocity. The rest is simple calculation, which can be performed even on a 30year old 8-bit PIC&lt;/p&gt;&#xA;" OwnerUserId="6911" LastActivityDate="2015-11-27T20:19:06.680" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8558" PostTypeId="2" ParentId="8556" CreationDate="2015-11-27T22:59:52.103" Score="5" Body="&lt;p&gt;Actually, the caster wheel has ideally no effect on the kinematics of the vehicle. In reality there will be some resistance from the caster wheel that does impact the vehicle motion, but we can still ignore it for the sake of designing a control law.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based on the extended discussion in the comments, your sensor can be used to measure the &lt;em&gt;lateral error&lt;/em&gt; of the robot with respect to the line it is following. Consider the diagram below, where the robot position is depicted with a dark blue circle and its direction of motion is the red arrow (with constant speed $v$). The lateral error is $e$ (perpendicular distance to the line), while the heading error is $\alpha$ (angle of the velocity with respect to the line).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/XPuXI.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XPuXI.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you care about is having a control law that controls the robot heading so that an appropriate value of $\alpha$ causes $e$ to be minimized. To do that, consider the &lt;em&gt;error dynamics&lt;/em&gt; of $e$:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\dot{e} = v \sin \alpha$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which can be extended to:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\ddot{e} = v \dot{\alpha} \cos \alpha$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If we ignore the fact that the line direction may be changing (valid for most cases similar to roads), then the rate of change of the heading error is approximately the rate of change of the robot heading (turn rate $\omega$):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\dot{\alpha} \approx \omega$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\ddot{e} = v \omega \cos \alpha$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now comes the tricky part. What we really want to do is minimize the error $e$ by controlling the turn rate $\omega$, but the above equation is non-linear and we prefer to design control laws with linear systems. So let's make up a new control input $\eta$ that is related to $\omega$:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\eta = v \omega \cos \alpha$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then we can make a feedback control law for $\eta$. I'll go straight to the answer and then follow it up with the details if you are interested...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The feedback controller can be a full PID as shown below:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\eta = -K_p e - K_d \dot{e} - K_i \int e dt$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And then we calculate the necessary turn rate $\omega$:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\omega = \frac{\eta}{v \cos \alpha}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Normally you might do this by using a measurement of $\alpha$, but since you are only measuring $e$ you could just assume that term is constant and use:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\omega = \frac{\eta}{v}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which is really just using a PID control law for $\omega$ based on $e$ but now with the factor $\frac{1}{v}$ in the gains.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With $\omega$ known, you can compute the necessary wheel speed differential as follows (based on your variable names, and where $b$ is the width between wheels):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;midSpeed + value&lt;/code&gt; $ = \frac{1}{2} \omega b + v$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$v = $ &lt;code&gt;midSpeed&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;value&lt;/code&gt; $= \frac{1}{2}\omega b$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Overall, you are computing $\omega$ using a PID control law as a function of lateral error $e$ (coming from your sensor). You then compute &lt;code&gt;value&lt;/code&gt; from the value for $\omega$ and use it to determine the left and right wheel speeds.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Now, read on for more details regarding the error dynamics and linearized control system:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We can write out the system dynamics like this, where we consider $z$ to be the vector of the error states.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$z = \begin{bmatrix} \dot{e} \\ e \end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\dot{z} = \begin{bmatrix} 0 &amp;amp; 0 \\ 1 &amp;amp; 0 \end{bmatrix} z + \begin{bmatrix} 1 \\ 0 \end{bmatrix} \eta$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are familiar with linear control theory then you can start to see how this is a convenient form where we can make a feedback control law with input $\eta$ as a function of the error:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\eta = -\begin{bmatrix} K_d &amp;amp; K_p \end{bmatrix} z$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\dot{z} = \begin{bmatrix} 0 &amp;amp; 0 \\ 1 &amp;amp; 0 \end{bmatrix} z - \begin{bmatrix} 1 \\ 0 \end{bmatrix} \begin{bmatrix} K_d &amp;amp; K_p \end{bmatrix} z$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\dot{z} = \begin{bmatrix} -K_d &amp;amp; -K_p \\ 1 &amp;amp; 0 \end{bmatrix} z$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This closed-loop system has the following characteristic equation:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$s^2 + K_d s + K_p = 0$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which results in the poles (this is a PD control law, not PID):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$p = -\frac{1}{2}K_d \pm \sqrt{\frac{1}{4}K_d^2 - Kp}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if you wanted a critically damped system with no oscillations around the line, you could choose one of the gains and use the following relationship to get the other (start with smaller gains and tune until you get the response you want):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$K_p = \frac{1}{4}K_d^2$&lt;/p&gt;&#xA;" OwnerUserId="10836" LastEditorUserId="10836" LastEditDate="2015-11-28T10:56:01.937" LastActivityDate="2015-11-28T10:56:01.937" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8559" PostTypeId="1" CreationDate="2015-11-28T16:16:20.390" Score="0" ViewCount="70" Body="&lt;p&gt;so i'm really interested in robotics.. I'm not really a robot expert as i have no experience on creating one. I just like them.  Anyway, I am always wondering if its possible to build a robot that can transfer itself to different devices and still function. I mean, if you want that robot to transfer itself(THE DATA that making it function or whatever you call it) to your laptop so you can still use it while you are away or anything.. Does creating one require advanced computing and knowledge? Is it kind of creating a artificial intelligence?. When it think of this i would always thought of J.A.R.V.I.S since he can go to Stark Suit and communicate with him.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Translated into robotics terminology by a roboticist:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Is it possible to create software for controlling robot hardware that can transfer itself to different devices and still function. Could it transfer itself to your laptop and collaborate with you using information it gathered while it was in it's robot body? &#xA;  Does creating software like this require advanced knowledge and computing? Is software like this considered to be artificial intelligence?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I am serious about this question sorry to bother or if anyone will be annoyed./ &lt;/p&gt;&#xA;" OwnerUserId="11189" LastEditorUserId="184" LastEditDate="2015-12-01T02:54:17.427" LastActivityDate="2015-12-01T02:54:17.427" Title="Is it possible to design robot software or AI to function in different devices?" Tags="&lt;mobile-robot&gt;" AnswerCount="2" CommentCount="1" ClosedDate="2015-11-30T17:40:01.790" ContentLicense="CC BY-SA 3.0" />
  <row Id="8560" PostTypeId="2" ParentId="8559" CreationDate="2015-11-28T16:38:45.127" Score="2" Body="&lt;p&gt;This already happens when a commercial robot product comes off of the assembly line! The robot software is the same for each robot and is copied over.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some robots work using similar computer processors as your laptop so you could just copy the files over and use them in a simulator of some kind. Many of us use &lt;a href=&quot;http://www.ros.org/&quot; rel=&quot;nofollow&quot;&gt;ROS&lt;/a&gt; (Robot Operating System), which is useful for code that works on multiple different robots.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, you usually want a robot to perform very specific tasks, and the robot itself will typically have a physical configuration that doesn't change. That doesn't mean you can't develop systems that work with various configurations. There are examples of &lt;em&gt;modular robots&lt;/em&gt; that can reconfigure themselves -- and this means software or AI that can handle varying configurations. &lt;a href=&quot;http://modlabupenn.org/structure-synthesis/&quot; rel=&quot;nofollow&quot;&gt;Here is one example that builds new robots out of foam&lt;/a&gt;. This is kind of like the idea of &lt;a href=&quot;https://en.wikipedia.org/wiki/Cross-platform&quot; rel=&quot;nofollow&quot;&gt;cross-platform software&lt;/a&gt; that is intended to work on different devices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is just so much easier to make one reliable system for one robot such as a ground vehicle, and another entirely separate system that is reliable for flying a UAV. Trying to make one system that can control both of those vehicles equally well is very difficult, and in most cases it is not worth the risk and disadvantages.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Possibly what you are referring to is a general artificial intelligence that can &quot;hack&quot; into different systems and control them even though it is not designed for it. Otherwise it is just a matter of including various inputs and outputs as you want -- think of something like an automated building management system, controlling thermostats, elevators, door locks, etc., each one of those items is like a separate robot but they are all controlled by one central computer.&lt;/p&gt;&#xA;" OwnerUserId="10836" LastEditorUserId="10836" LastEditDate="2015-11-30T09:34:52.510" LastActivityDate="2015-11-30T09:34:52.510" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8561" PostTypeId="1" AcceptedAnswerId="8564" CreationDate="2015-11-28T23:38:17.973" Score="0" ViewCount="41" Body="&lt;p&gt;I see there are things like glass and mirror in Autodesk Inventor Professional 2016 but is there a possibility to have Venetian mirror? So that from one side it would look like a mirror and from the other side it would look like a transparent glass?&lt;/p&gt;&#xA;" OwnerUserId="11192" LastActivityDate="2015-11-29T14:09:33.813" Title="Is Venetian mirror possible in Autodesk Inventor?" Tags="&lt;design&gt;&lt;mechanism&gt;&lt;3d-printing&gt;&lt;3d-model&gt;&lt;visualization&gt;" AnswerCount="1" CommentCount="10" ClosedDate="2015-11-30T17:36:12.707" ContentLicense="CC BY-SA 3.0" />
  <row Id="8562" PostTypeId="1" AcceptedAnswerId="8568" CreationDate="2015-11-29T09:31:09.707" Score="4" ViewCount="130" Body="&lt;p&gt;I'm currently working on Humanoid robot. I've solved the Forward &amp;amp; Inverse Kinematic relations of the robot, and they turn out to be fine. Now I want to move onto Walking. I've seen tons of algorithms &amp;amp; research papers but none of them make the idea clear. I understand the concept of ZMP &amp;amp; what the method tries to do, but I simply can't get my head around all the details that are required to implement it in a real robot. Do I have to plan my gait &amp;amp; generate the trajectories beforehand, solve the joint angles, store them somewhere &amp;amp; feed it to the motors in real-time? or Do I generate everything at run-time(a bad Idea IMO)? Is there a step-by-step procedure that I can follow to get the job done? or Do I have to crawl all my way through those Research papers, which never make sense(at least for me).&lt;/p&gt;&#xA;" OwnerUserId="10094" LastEditorUserId="10094" LastEditDate="2015-11-30T18:19:21.027" LastActivityDate="2015-12-01T10:01:45.927" Title="Humanoid balancing" Tags="&lt;mobile-robot&gt;&lt;stability&gt;&lt;humanoid&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8563" PostTypeId="2" ParentId="8354" CreationDate="2015-11-29T13:05:00.530" Score="0" Body="&lt;p&gt;Making a quad with arduino is very difficult task. You will have to consider the delay taken by the reciever. For that you will have to use interupts to to collect the signals with out disturbing to process. And as you asked the input error will always be angles. You will have to change raw values to angles. And also before using pid, you will have to use the gyro values. You will have to use them in manner such that if angle of quad is disturbed in one axis then increase speed proportionaled to gyro out in that axis to react to the change. After that you will use pid. With out that. Its impossible. Ita my experience.&lt;/p&gt;&#xA;" OwnerUserId="10738" LastActivityDate="2015-11-29T13:05:00.530" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8564" PostTypeId="2" ParentId="8561" CreationDate="2015-11-29T14:09:33.813" Score="1" Body="&lt;p&gt;Surface properties like that are really only for cosmetic purposes so it is unlikely any CAD program has that option. However, you may be able to get the appropriate effect by assigning particular &lt;em&gt;faces&lt;/em&gt; either glass or mirror texture.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based on your added comments, I think the best option is simply to capture images or animation frames with whatever proper surface setting is needed for the required view angle. Then you can stitch the separate animation frames together to make it seem as though the component has the look you want.&lt;/p&gt;&#xA;" OwnerUserId="10836" LastActivityDate="2015-11-29T14:09:33.813" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8567" PostTypeId="2" ParentId="8559" CreationDate="2015-11-30T09:12:27.547" Score="0" Body="&lt;p&gt;The short answer is yes, totally possible, though not done that often in practice. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Creating an AI that thinks like a human (and does what it's human partners or masters want like J.A.R.V.I.S) is something we can't do yet. The current research in that direction does require advanced knowledge and skills. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to know more about some detail add a comment about what you are curious about and I'll try to answer.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2015-11-30T09:12:27.547" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8568" PostTypeId="2" ParentId="8562" CreationDate="2015-11-30T09:40:02.063" Score="3" Body="&lt;p&gt;Keep in mind that the ZMP is a simplification. In practice with walking robots the support polygon is constantly changing so it can be tough to keep the ZMP inside. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pregenerated (offline) trajectories will only work in very specific conditions (flat ground, no disturbances), and only if you can model your support polygon well. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, everything you learn as you try to make your robot walk with offline trajectories will be useful going forward. &lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="184" LastEditDate="2015-12-01T10:01:45.927" LastActivityDate="2015-12-01T10:01:45.927" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8569" PostTypeId="2" ParentId="8450" CreationDate="2015-11-30T13:14:44.957" Score="1" Body="&lt;p&gt;You did not exactly specify the application you are working on, however, the fact that you have limited angular displacement range, and not continuous rotations, does not necessarily mean that you need torque control. If you are interested in positions instead of velocity, you will need position control, and you do not necessarily need also torque control. (e.g. if you want to do gravity compensation though a torque feed forward method, you will need a torque controller, but you would not need something like that for hobby applications)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your application is simple and does not require high speed precise trajectories, because of simplicity, I would recommend trying position control without a torque control. For this, you could use the velocity controllers well known for BLDCs (as the ones you mentioned, might also come with overload protection) and add an external position loop around it. Your COTS velocity controller will get an input from the outer position controller, implemented on a microcontroller (or similar device, depending on what you use). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The position controller will have to get position feedback of some kind.There are more ways to get angular position feedback, depending on budget and application. Encoders are commonly used, but if high precision is not needed, you might be able to get away with using a potentiometer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The control rule can be a simple proportional controller at first (PID later), generating the input for the velocity controller. If the difference between the desired position and the actual position (measured by the angular displacement sensor of your choice) is large the velocity controller will get a large input (the said difference multiplied by a constant, which you have to play around with). If there is no difference between the actual and the desired angle then zero velocity is required. Your position controller will generate an output, compatible with your velocity controller (e.g. PWM signals to the velocity controller), that tells the velocity controller how fast and in which direction should the motor move to reach the desired position.  Depending on your application this simple approach could be enough.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to start from scratch, you can build your own position/velocity/torque controller, &lt;a href=&quot;http://www.atmel.com/images/doc7827.pdf&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt; is an example of how it can be implemented on Atmel micro controllers, &lt;a href=&quot;http://ww1.microchip.com/downloads/en/appnotes/00857a.pdf&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt; for Microchip. Both documentations recommend motor driver ICs, I think all IC can be considered light weight.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If this is a hobby like project, you might be interested in R/C servos e.g. &lt;a href=&quot;http://www.robotis.com/xe/dynamixel_en&quot; rel=&quot;nofollow&quot;&gt;Dynamixel&lt;/a&gt; which have all the functionality you require, position control, built in. The ones I linked are quire capable (incl. torque control, modifiable PID gains), but be aware of their stall torque limitations.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2015-11-30T13:22:36.687" LastActivityDate="2015-11-30T13:22:36.687" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8570" PostTypeId="1" AcceptedAnswerId="8584" CreationDate="2015-11-30T15:22:13.327" Score="0" ViewCount="486" Body="&lt;p&gt;I have a task that involves implementing robot behaviour that will follow wall and avoid obstacles along it's path. The robot must stay at desired distance from the wall but also stick to it so it should not loose sight of it. Robot is sensing it's surrounding with ultrasonic sensor that is oscillating from left to right and filling an array of small length (10 values) with detected distances (every 10 degrees). From this reading I would like to calculate heading vector that will result in robot path similar to one shown in bottom picture:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Black(walls), red(obstacles), blue(robot), green(desired path)&lt;/strong&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/YtVGG.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/YtVGG.png&quot; alt=&quot;Path example&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9537" LastActivityDate="2015-12-01T17:58:52.000" Title="Calculate robot heading to follow wall and avoid obstacles" Tags="&lt;wheeled-robot&gt;&lt;navigation&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8571" PostTypeId="2" ParentId="8555" CreationDate="2015-11-30T16:57:33.257" Score="1" Body="&lt;p&gt;I don't think I have heard of an algorithm specifically for minimizing jerk and definitely none for jounce.  However, here are some semi-recent academic articles and papers that may be of interest to you.  They all minimize acceleration in different ways, and you may be able to be extend for jerk and jounce.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;IEEE SPECTRUM article: &lt;a href=&quot;http://spectrum.ieee.org/automaton/robotics/industrial-robots/robots-with-smooth-moves-are-more-efficient&quot; rel=&quot;nofollow&quot;&gt;Robots With Smooth Moves Are Up to 40% More Efficient&lt;/a&gt; profiling the &lt;a href=&quot;http://www.areus-project.eu/smooth-robot-movements-reduce-energy-consumption-by-up-to-40-percent/&quot; rel=&quot;nofollow&quot;&gt;AREUS project&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;RSS 2012: &lt;a href=&quot;http://www.tobiaskunz.net/pubs/KunzRSS12-Trajectories.pdf&quot; rel=&quot;nofollow&quot;&gt;Time-Optimal Trajectory Generation for Path Following with Bounded Acceleration and Velocity&lt;/a&gt; by Tobias Kunz and Mike Stilman.  Video &lt;a href=&quot;http://www.golems.org/projects/traj.html&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;HUMANOIDS 2015: &lt;a href=&quot;http://www.neil.dantam.name/papers/kingston2015lc3.pdf&quot; rel=&quot;nofollow&quot;&gt;Kinematically Constrained Workspace Control via Linear Optimization&lt;/a&gt; by Zachary K. Kingston, Neil T. Dantam, and Lydia E. Kavraki.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-11-30T16:57:33.257" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8575" PostTypeId="1" CreationDate="2015-12-01T04:22:28.337" Score="2" ViewCount="1695" Body="&lt;p&gt;I'm currently developing a 6 dof robotic arm. The arm is vibrating when it stop moving and I want to reduce it. Another thing is that arm is so heavy (because there is a projector inside it, lol) and I have to use spring between joints. So, can anyone tell me 1. how to select springs because my supervisor told me that proper selection of springs can reduce vibration? 2. how do I tune the PID parameters? All the joints are dynamixel servos and their PID parameters are tunable. I read article about tuning for a single servo. How do I tune these parameters for the whole arm?&lt;/p&gt;&#xA;" OwnerUserId="11208" LastEditorUserId="110" LastEditDate="2015-12-01T14:40:31.617" LastActivityDate="2015-12-02T19:32:55.487" Title="PID tuning for 6 dof robotic arm" Tags="&lt;control&gt;&lt;pid&gt;&lt;robotic-arm&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8578" PostTypeId="2" ParentId="8575" CreationDate="2015-12-01T12:03:54.680" Score="1" Body="&lt;p&gt;Springs (no matter the combination) are not going to reduce the vibration. (there are exceptions because real springs lose energy but I don't think it applies to your case.) Damping could reduce the vibration, but that means you are throwing away energy and it sounds like you need all you can get to move that heavy projector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind that PID does not work as well when the load on the joints change, which is what happens in an arm. Depending on the angle of the joints, sometimes gravity will increase or decrease the apparent load in a way that makes the PID gains not work well at that angle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Increasing the D gain of your PID will help. However for an arm you should be using a trajectory generator to set the target position to intermediate points between the start and end position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another issue you might be having is that you probably have the extra projector support springs arranged to help lift the projector to the position you will use most often. This means you will have asymmetric force gradients on the arm with gravity creating one force and the spring creating another. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So...&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Use the single servo PID tuning approach for each servo, one at a time, with the joint axis of the servo of interest vertical and the other joints in a position that puts the projector closest to where you normally want it. Leave the projector support spring on. (the goal is to eliminate the influence of gravity when tuning the PID)&lt;/li&gt;&#xA;&lt;li&gt;Set up the arm for normal use and increase the D gain on the joints that are vibrating too much until it's ok (or until you get a high frequency vibration). I predict that the arm performance will not be good when you do this and you should do the next step.&lt;/li&gt;&#xA;&lt;li&gt;Add a trajectory generator to your control. With this you should be able to set an accelleration that gives you better performance than step 2 but might be a little slow.&lt;/li&gt;&#xA;&lt;li&gt;Switch to torque control, do your own PID calculaton and add feedforward control for gravity compensation and support spring compensation.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;All of the above should help regardless if the vibration is from motor, mechanism, or control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Starting with actuators that are properly sized for the application would be best but it sounds like that is not an option for you. &lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2015-12-01T12:03:54.680" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="8579" PostTypeId="1" AcceptedAnswerId="8581" CreationDate="2015-12-01T12:36:14.390" Score="0" ViewCount="503" Body="&lt;p&gt;I have a motor with an encoder. When I set the speed of the motor it should change its speed so that encoder readings per second should fit an equation $y = ax^2 + bx + c$ where &lt;code&gt;x&lt;/code&gt; is &lt;code&gt;speed&lt;/code&gt; value that is given to the motor and &lt;code&gt;y&lt;/code&gt; is the encoder readings per second that should get with motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Encoder reading is counted in every &lt;code&gt;1ms&lt;/code&gt; and if it is not equal to the value of the encoder output should get from motor (it is calculated using the equation), the PWM input to the motor should vary in-order to get desired encoder output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to control this value using a &lt;code&gt;PID&lt;/code&gt; controller but I'm confused in writing equations. Any help would be appreciated..&lt;/p&gt;&#xA;" OwnerUserId="1851" LastActivityDate="2015-12-01T22:18:53.303" Title="Change PWM values according to encoder output" Tags="&lt;motor&gt;&lt;pid&gt;&lt;pwm&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8580" PostTypeId="1" AcceptedAnswerId="8583" CreationDate="2015-12-01T12:55:21.780" Score="0" ViewCount="84" Body="&lt;p&gt;I'm shopping for my first Arduino with a specific goal in mind. I need to attach 3 standard servo motors, an ArduCam Mini 2MP camera, and several LEDs. I'm trying to figure out power requirements. I assume that USB power won't be sufficient. I'm looking at 12V AC-to-DC outlet adapters and I noticed that Amps vary from ~500MA to 5A. I don't want to use batteries.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What would you recommend as minimum amperage for this setup? Is there a maximum amperage for Arduino boards? I don't want to plug it in and burn it out. If I plug in both the USB cable and a power adapter at the same time, is power drawn from both cables?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="11211" LastActivityDate="2015-12-01T21:50:06.267" Title="Arduino Power Adapters" Tags="&lt;arduino&gt;&lt;power&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8581" PostTypeId="2" ParentId="8579" CreationDate="2015-12-01T14:35:01.613" Score="0" Body="&lt;p&gt;$$y_d = a x^2 + b x + c$$ is your model, where I am using $y_d$ to represent the &lt;em&gt;desired&lt;/em&gt; value of your control variable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using the measured value of your encoder $y_m$, define an error value $y_e$  $$y_e = y_d - y_m$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your PID controller can then be implemented as &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$${PWM}_{dc} = k_p y_e + k_i \int y_e dt + k_d \frac{dy_e}{dt}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here I am using ${PWM}_{dc}$ to be the duty cycle of your PWM signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if you have a mapping showing what PWM duty cycles will achieve which $x$ speeds (perhaps a lookup table?) you can use ${PWM}_{dc}$ to find the value of $x$ to command.  Otherwise, go ahead and substitute your $x$ in place of my ${PWM}_{dc}$ and assume the mapping between these two variables is linear.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastEditorUserId="11125" LastEditDate="2015-12-01T22:18:53.303" LastActivityDate="2015-12-01T22:18:53.303" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="8583" PostTypeId="2" ParentId="8580" CreationDate="2015-12-01T17:45:41.230" Score="0" Body="&lt;p&gt;The three “standard servo motors” – presumably standard-size hobby RC servos – will be the main load on your power supply, unless your LEDs are high-power devices.  Pololu.com's &lt;a href=&quot;https://www.pololu.com/blog/16/electrical-characteristics-of-servos-and-introduction-to-the-servo-control-interface&quot; rel=&quot;nofollow&quot;&gt;electrical characteristics of servos...&lt;/a&gt; web page has some guidelines you probably should read.  Some excerpts:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;... A standard servo will have a stall current around one amp, a micro servo will need a few hundred milliamps, and a giant servo can draw ten amps or more. ... quiescent currents are tricker to estimate ... typically, the current should be in the few dozen to one or two hundred milliamp range&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;For your three servos, a 5V 2A power supply is reasonable, supposing you never stall more than one servo at once and that stall times are brief (a few seconds at most).  If you were to stall all three servos at the same time on a 2A PS, and the Uno were powered by the same supply, it probably would reset or otherwise misbehave.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Figure 35 to 50 mA for the Uno, and perhaps 50 mA for the ArduCam Mini 2MP camera (125 mW at 3V, IIUC), and 15 to 25 mA per LED.  Note, for indicator LEDs (vs illumination) many high brightness LEDs work ok at sub-milliamp currents; for example, on some of my Arduino nano boards I've replaced the PWR indicator's 1KΩ dropping resistor with 20KΩ and it's adequately bright.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In brief, allow two to three amps for the servos and perhaps a fourth of an amp for the rest.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Arduino will draw only the current it needs, as long as it's powered via USB or its Vin pin or DC socket.  Several Arduino models (eg Uno, Mega2560, Nano) have a FET or diode automatic power-selection network, typically allowing them to be powered by USB at the same time as by Vin pin or DC socket.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you wish to connect a 5V PS to an Arduino's +5V line (which can be done), first review the “gotcha's” at &lt;em&gt;&lt;a href=&quot;http://www.rugged-circuits.com/10-ways-to-destroy-an-arduino/&quot; rel=&quot;nofollow&quot;&gt;10 ways to destroy an arduino &lt;/a&gt;&lt;/em&gt; at rugged-circuits.com.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Edit:&lt;/em&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a 12V adapter, hook into the Vin pin or DC socket.  On an Uno, there's a diode after the DC socket and in this case using the socket is preferable to using Vin.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With 12V into the Uno's +5V regulator (typically a NCP1117ST50T3G), you probably won't draw more than 0.3–0.5 A from the  +5V line without overheating the regulator.  A 9V supply, dropping 3V less across the regulator, dissipates 1.5 W less power in it at 0.5 A than does a 12V supply, with consequently less heating.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An &lt;a href=&quot;https://www.arduino.cc/en/Main/ArduinoBoardUno&quot; rel=&quot;nofollow&quot;&gt;Uno page at arduino.cc&lt;/a&gt; says:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The board can operate on an external supply from 6 to 20 volts. If supplied with less than 7V, however, the 5V pin may supply less than five volts and the board may become unstable. If using more than 12V, the voltage regulator may overheat and damage the board. The recommended range is 7 to 12 volts. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Note that hooking a 5V PS to the +5V bypasses the regulator entirely.  The earlier link (&lt;em&gt;10 ways...&lt;/em&gt;) recommends against this in certain cases.  The Uno page at arduino.cc advises against it:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;5V. This pin outputs a regulated 5V from the regulator on the board. The board can be supplied with power either from the DC power jack (7 - 12V), the USB connector (5V), or the VIN pin of the board (7-12V). Supplying voltage via the 5V or 3.3V pins bypasses the regulator, and can damage your board. We don't advise it.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Options include: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Power Arduino and low-current devices via USB or via a 9V 3-5 W adapter; use a higher-current, eg 2A or 10 W,  5V adapter for servos.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;With a 5 A or 60 W, 12V adapter, connect +12 to Vin or DC socket; also attach one or more inexpensive adjustable 2-amp LM2596-based buck regulators like &lt;a href=&quot;http://www.ebay.com/itm/LM2596S-ADJ-DC-DC-Buck-Regulator-Power-Module-3A-Adjustable-5V-12V-24V-/191095436739?hash=item2c7e2cf5c3:g:27IAAOxydUJTMqQv&quot; rel=&quot;nofollow&quot;&gt;1&lt;/a&gt;, &lt;a href=&quot;http://www.ebay.com/itm/DC-DC-Buck-Step-Down-Converter-Module-LM2596-Voltage-Regulator-Led-Voltmeter-/160995621268?hash=item257c163994:g:uUsAAMXQQQZRyqOI&quot; rel=&quot;nofollow&quot;&gt;2&lt;/a&gt;, or &lt;a href=&quot;http://www.ebay.com/itm/LM2596-LED-Voltage-Regulator-DC-DC-Buck-Step-Down-Converter-Module-Voltmeter-/331701453975?hash=item4d3af28497:g:ihkAAOSw5ZBWPMuc&quot; rel=&quot;nofollow&quot;&gt;3&lt;/a&gt; to the +12, dial the outputs in to +5, and use them to power the servos, with the Arduino ground common with the regulator grounds.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="478" LastEditorUserId="478" LastEditDate="2015-12-01T21:50:06.267" LastActivityDate="2015-12-01T21:50:06.267" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="8584" PostTypeId="2" ParentId="8570" CreationDate="2015-12-01T17:58:52.000" Score="2" Body="&lt;p&gt;It sounds like you want some sort of &lt;a href=&quot;http://www.cs.cmu.edu/~motionplanning/lecture/Chap2-Bug-Alg_howie.pdf&quot; rel=&quot;nofollow&quot;&gt;bug algorithm&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the pseudo-code for what you want is simple:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;while not at goal:&#xA;    if there is a wall in front:&#xA;        turn right a little&#xA;    else if there is a wall on the left:&#xA;        drive straight a little&#xA;    else:&#xA;        turn left a little&#xA;stop&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Of course tuning this thing can be tricky.  For example, you probably don't want to turn in place when you see no wall.  You should drive forward and left in an arc.  The specifics of which depend on your robot and environment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, because you have a spinning ultrasonic sensor, you should not drive the robot too fast.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that the pseudo code really only needs a single sensor on the left of the robot and in front of the robot.  But since you have an array of range values, you can potentially do something more sophisticated, although more complicated.   For example, use the few range readings on the left side of the robot to determine the distance and angle of the wall relative to the robot, and act accordingly.  &lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-12-01T17:58:52.000" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8585" PostTypeId="1" CreationDate="2015-12-02T02:23:27.170" Score="0" ViewCount="504" Body="&lt;p&gt;I'd like to get rgb and depth data from a kinect, and I found a little tutorial here: &lt;a href=&quot;http://wiki.ros.org/cv_bridge/Tutorials/ConvertingBetweenROSImagesAndOpenCVImagesPython&quot; rel=&quot;nofollow&quot;&gt;http://wiki.ros.org/cv_bridge/Tutorials/ConvertingBetweenROSImagesAndOpenCVImagesPython&lt;/a&gt;. It's fine, but what I'd like is to be able to get the data on demand, and not as whenever the callback is triggered, assuming I won't try to get the data faster than it can be available. I'd appreciate any help - do go easy on the ROS jargon, I'm still learning...Thanks.&lt;/p&gt;&#xA;" OwnerUserId="11216" LastActivityDate="2018-06-04T14:15:39.767" Title="ROS and Kinect data without callbacks" Tags="&lt;ros&gt;&lt;kinect&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8586" PostTypeId="1" CreationDate="2015-12-02T03:37:53.753" Score="0" ViewCount="1466" Body="&lt;p&gt;Good day to all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;First of all, I'd like to clarify that the intention of this question is not to solve the localization problem that is so popular in robotics.&lt;/strong&gt; However, the purpose is to gather feedbacks on how we can actually measure the speed of the robot with external setup. The purpose is to be able to compare the speed of the robot detected by the encoder and the actual speed, detected by the external setup.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am trying to measure the distance traveled and the speed of the robot, but the problem is it occasionally experiences slippage. Therefore encoder is not accurate for this kind of application. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I could mark the distance and measure the time for the robot to reach the specified point, but then I would have to work with a stopwatch and then transfer all these data to Excel to be analyzed. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there other ways to do it? It would be great if the external setup will allow data to be automatically sent directly to a software like Matlab. My concern is more on the hardware side. Any external setup or sensors or devices that can help to achieve this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="10691" LastEditorUserId="10691" LastEditDate="2015-12-02T05:21:12.930" LastActivityDate="2015-12-02T06:19:29.990" Title="How can I measure the actual speed and distance traveled of the robot with an external setup?" Tags="&lt;mobile-robot&gt;&lt;control&gt;&lt;wheeled-robot&gt;" AnswerCount="1" CommentCount="8" ClosedDate="2015-12-02T14:14:22.247" ContentLicense="CC BY-SA 3.0" />
  <row Id="8587" PostTypeId="2" ParentId="8585" CreationDate="2015-12-02T04:52:20.560" Score="3" Body="&lt;p&gt;You should simply use the callback method since you can have an object in your code that is always updated with the latest measurement. Then you can simply poll the measurement in that object whenever you want (say in some while loop running at a given rate). I notice you are linking to help related to using Python, whereas I am more familiar with coding ROS nodes in C++. If you were doing that then your code might look something like:&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include...&#xA;&#xA;class KinectSubscriber {&#xA; ...&#xA;}&#xA;&#xA;int main(...) {&#xA; ...&#xA; KinectSubscriber MyKinectSub;&#xA; ...&#xA; while (ros::ok()) {&#xA;  ...&#xA;  data = MyKinectSub.data;&#xA;  ...&#xA; }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Of course you don't have to access the data at each iteration of the loop, you could use some conditional statements so that the data is polled only under certain circumstances.&lt;/p&gt;&#xA;" OwnerUserId="10836" LastEditorUserId="10041" LastEditDate="2015-12-02T16:54:24.923" LastActivityDate="2015-12-02T16:54:24.923" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8588" PostTypeId="2" ParentId="8586" CreationDate="2015-12-02T06:19:29.990" Score="2" Body="&lt;p&gt;There are a couple good options depending on the scale of your project for capturing a ground truth. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For large scale outside (cars or agricultural vehicles) &lt;a href=&quot;http://www.swiftnav.com/piksi.html&quot; rel=&quot;nofollow&quot;&gt;RTK GPS&lt;/a&gt; can be had for a very reasonable price.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For small scale you can probably make a poor-mans motion capture with OpenCV, ping-pong balls, and a few global shutter cameras (preferred if you can afford it) or even webcams.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have both no time and no money, make a grid on the floor with a builders chalk line, attach a marker (ping-pong ball on a stick) near to the floor (avoid abbe error), and take a video from above. Your pose estimates will be more precise than the stopwatch estimates you were thinking of.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Make sure to estimate and include the measurement error of your ground truth in the report. &lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2015-12-02T06:19:29.990" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8589" PostTypeId="2" ParentId="8585" CreationDate="2015-12-02T07:54:50.217" Score="2" Body="&lt;p&gt;Until you learn more about ROS the best approach is to use a callback. You can copy the data to a &lt;a href=&quot;https://docs.python.org/2/reference/simple_stmts.html#the-global-statement&quot; rel=&quot;nofollow&quot;&gt;global variable&lt;/a&gt; and use that in your main program if it helps you reason about the data flow better.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are trying to do this to reduce network congestion, your best bet is to change the driver parameters to reduce the framerate or resolution. For the openni_camera package the parameters &lt;a href=&quot;http://wiki.ros.org/openni_camera#openni_camera.2BAC8-fuerte.Parameters&quot; rel=&quot;nofollow&quot;&gt;are here&lt;/a&gt;. Other solutions exist but require either modifying the ROS drivers or not using ROS at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a side note; if you don't have a specific reason to use ROS, don't use it. It will save some headaches and your program will be faster and simpler besides. &lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2015-12-02T07:54:50.217" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8590" PostTypeId="1" CreationDate="2015-12-02T13:55:13.517" Score="0" ViewCount="393" Body="&lt;p&gt;I have one sharp sensor and I have to use it to measure the height of a block (6cm - 12 cm). How can I accomplish this ?&#xA;Actually it is to be connected to a robot which will move near the box and determine its height.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;About GP2Y0A21YK0F:&#xA;&lt;a href=&quot;http://www.sharpsma.com/webfm_send/1489&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.sharpsma.com/webfm_send/1489&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The robot is like this: &lt;a href=&quot;https://i.imgur.com/8qT8zeQ.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://i.imgur.com/8qT8zeQ.jpg&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2pyYc.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2pyYc.jpg&quot; alt=&quot;Robot picture &quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If possible please suggest a solution that doesn't require moving the sensor.&#xA;But any method will do fine.&lt;/p&gt;&#xA;" OwnerUserId="11221" LastEditorUserId="478" LastEditDate="2015-12-02T20:25:41.743" LastActivityDate="2015-12-02T20:25:41.743" Title="How can I measure the height of an object with a single sharp sensor (GP2Y0A21YK0F)?" Tags="&lt;mobile-robot&gt;&lt;first-robotics&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8591" PostTypeId="2" ParentId="8590" CreationDate="2015-12-02T14:00:33.473" Score="1" Body="&lt;p&gt;Can you explain more about how the robot is to measure the height? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It would seem to me like you could put the sensor at the top of a mast of known height $h$, looking down. Then the robot drives up to the block until the sensor feedback registers some distance other than $h$ (plus or minus some margin for noise, etc.) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you are in position, the height of the block is&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;h_{\mbox{block}} = h_{\mbox{mast}} - \mbox{sensor output}&#xA;$$&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-12-02T14:00:33.473" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8592" PostTypeId="1" AcceptedAnswerId="8594" CreationDate="2015-12-02T15:05:25.103" Score="2" ViewCount="1466" Body="&lt;p&gt;I have the following problem:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given 3 points on a surface, I have to adjust a manipulator end-effector (i.e. pen) on a Baxter Robot, normal to that surface.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the three points I easily get the coordinate frame, as well as the normal vector. My question is now, how can I use those to tell the manipulator its supposed orientation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Baxter Inverse Kinematics solver takes a $(x,y,z)$-tuple of Cartesian coordinates for the desired position, as well as a $(x,y,z,w)$-quaternion for the desired orientation. What do I set the orientation to? My feeling would be to just use the normal vector $(n_1,n_2,n_3)$ and a $0$, or do I have to do some calculation?&lt;/p&gt;&#xA;" OwnerUserId="11222" LastEditorUserId="11222" LastEditDate="2015-12-02T19:42:37.703" LastActivityDate="2015-12-10T17:57:32.187" Title="Manipulator end-effector orientation with quaternions" Tags="&lt;inverse-kinematics&gt;&lt;orientation&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8593" PostTypeId="2" ParentId="8575" CreationDate="2015-12-02T19:13:06.130" Score="3" Body="&lt;p&gt;I think the vibrations of the mechanical structure are due to the mechanical structures natural frequency. The dynamixel servos you mentioned are quite performant and have a acceleration and deceleration. This means that it has an abrupt stop when it reaches its setpoint, and this &quot;shock&quot; excites the mechanical structure at its natural frequency. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could set the PID controller of the dynamixel servos softer with a large settling time without any overshot. This might help.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To tune the PID you can follow the &lt;a href=&quot;https://en.wikipedia.org/wiki/Ziegler%E2%80%93Nichols_method&quot; rel=&quot;nofollow&quot;&gt;Ziegler-Nichols&lt;/a&gt; method. The order of tuning should be backwards, from end-effector to base.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another solution (and actually this would be my recommendation): &#xA;You can leave the PID controllers of the servos as they are and do a &lt;a href=&quot;http://www.diag.uniroma1.it/~deluca/rob1_en/13_TrajectoryPlanningJoints.pdf&quot; rel=&quot;nofollow&quot;&gt;trajectory planning&lt;/a&gt;. Instead of reducing the performance of the controllers (i.e. instead of making them soft), generate the reference values, the setpoints of the controllers, in a smooth manner, where you control the changes in position, velocity and acceleration, and those are not implicitly set by the controller. They will still be influenced by the controllers, but their effect will be greatly reduced. If you plan the trajectories smoothly (continuous acceleration, no sudden changes) the mechanical structure (at its natural frequency) will not be excited anymore. You will lose some dynamical performance but you will gain smooth motions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The spring can help your servos if they do not have enough torque. It may effect the frequency of the vibrations but will not eliminate these in most cases. Dampers can be used to reduce vibrations, if your spring is actually a spring-damper it can eliminate vibrations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To dimension a spring you have to determine what is the maximum torque required by the mechanical system in one given axis. You compare that with the maximum torque of your motor. if it is larger, so you need more torque than you have, you can use this difference to dimension a spring. The spring exerts a force, which is then converted to a torque using the perpendicular distance. This perpendicular however changes with the motion of the joint. So the design variables, spring constant, perpendicular distance (distance and angle of attack) will effect how much torque the spring will exert for every position of the joint. The same way the mechanical torque requirements of the robot will change for every position of the joint. The motor torque will not change. So...the torque coming form the spring plus the torque coming from the motor will have to be smaller than the required torque for every possible position of the joint. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since you mentioned a projector:&#xA;Please keep in mind that a small motion at the projector level will produce a large motion at the projected image. So you will have to have very smooth motions in order to not excite the mechanical structure. Or you could use a more robust mechanical structure, which is not that easy to excite.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Backlash can also be compensated to some degree. You can find more about it &lt;a href=&quot;http://serv.yanchick.org/Books/%D0%9C%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%B0%D0%BB%D1%8B%20%D0%BA%D0%BE%D0%BD%D1%84%D0%B5%D1%80%D0%B5%D0%BD%D1%86%D0%B8%D0%B9/ecc03/pdfs/548.pdf&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2015-12-02T19:32:55.487" LastActivityDate="2015-12-02T19:32:55.487" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8594" PostTypeId="2" ParentId="8592" CreationDate="2015-12-02T19:15:50.253" Score="3" Body="&lt;p&gt;As Brian indicated in a comment, you simply need to convert your rotation matrix (or Euler angles) into a quaternion.  &lt;a href=&quot;http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm&quot; rel=&quot;nofollow&quot;&gt;Maths - Conversion Matrix to Quaternion&lt;/a&gt; is my favorite site for geometric conversions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Quaternions are a great representation and have a number of benefits over other representations, so you should definitely read up on them.&lt;/p&gt;&#xA;" OwnerUserId="110" LastEditorUserId="37" LastEditDate="2015-12-10T17:57:32.187" LastActivityDate="2015-12-10T17:57:32.187" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8595" PostTypeId="1" AcceptedAnswerId="9461" CreationDate="2015-12-03T02:32:55.290" Score="4" ViewCount="272" Body="&lt;p&gt;It's unclear as to how one goes about integrating Occupancy Grid mapping and Monte Carlo localization to implement SLAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming &lt;strong&gt;Mapping&lt;/strong&gt; is one process, &lt;strong&gt;Localization&lt;/strong&gt; is another process, and some motion generating process called &lt;strong&gt;Exploration&lt;/strong&gt; exist. Is it necessary to record all data as sequenced or with time stamps for coherence? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's Motion: $U_t$, Map: $M_t$, Estimated State: $X_t$, Measurement: $Z_t$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;so..&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;each &lt;strong&gt;Estimated state&lt;/strong&gt;, $X_t$, is a function of the &lt;strong&gt;current motion&lt;/strong&gt;, $U_t$, &lt;strong&gt;current measurement&lt;/strong&gt;, $Z_t$, and &lt;strong&gt;previous map&lt;/strong&gt;, $M_{t-1}$;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;each &lt;strong&gt;confidence weight&lt;/strong&gt;, $w_t$, of estimated state is a function of &lt;strong&gt;current measurement&lt;/strong&gt;, $Z_t$,  &lt;strong&gt;current estimate state&lt;/strong&gt;, $X_t$, and &lt;strong&gt;previous map&lt;/strong&gt;, $M_{t-1}$;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;then each &lt;strong&gt;current map&lt;/strong&gt;, $M_t$ is a function of &lt;strong&gt;current measurement&lt;/strong&gt;, $Z_t$, &lt;strong&gt;current estimated state&lt;/strong&gt;, $X_t$,  and &lt;strong&gt;previous map&lt;/strong&gt;, $M_{t-1}$.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So the question is, is there a proper way of integrating mapping and localization processes? Is it something you record with timestamp or sequences? Are you suppose to record all data, like FullSLAM, and maintain full history. &#xA;How can we verify they are sequenced at the same time to be referred to as &lt;strong&gt;current&lt;/strong&gt; (i.e. measurement) and &lt;strong&gt;previous&lt;/strong&gt; (measurement).&lt;/p&gt;&#xA;" OwnerUserId="4137" LastEditorUserId="4137" LastEditDate="2015-12-03T11:46:19.737" LastActivityDate="2016-03-22T06:29:14.540" Title="In order to integrate MCL and Occupancy Grid to implement Grid-based FastSLAM, do you have to record all data?" Tags="&lt;slam&gt;&lt;occupancygrid&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8596" PostTypeId="1" CreationDate="2015-12-03T12:27:31.393" Score="2" ViewCount="64" Body="&lt;p&gt;I've implemented a model of a ball-on-plate plant and am controlling it over a network. Below is the open loop output when excited by successive sinusoidal inputs with increasing frequencies. I know that the plant is open loop unstable, and it is cool that this figure so nicely captures the instability. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I'd like to know is if there is other information that I can glean about the plant from the relationship between the input and the output state.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(The state is clipped at 3.1 units.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/qWBlU.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qWBlU.png&quot; alt=&quot;Green reference signal and blue observed system state&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11229" LastActivityDate="2015-12-03T15:11:22.270" Title="What can this picture/data tell?" Tags="&lt;control&gt;&lt;balance&gt;&lt;distributed-systems&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="8597" PostTypeId="2" ParentId="8596" CreationDate="2015-12-03T15:11:22.270" Score="1" Body="&lt;p&gt;The natural frequency of your system is obvious from your graph.  From that you can get a relationship between mass and stiffness (using a second order model).  If you look at the growth in amplitude of your natural frequency (use a high-pass filter to remove the input signal) you should see the rate of growth in the characteristic frequency.  That is related to the system damping ratio.  A text on vibration (&lt;em&gt;e.g.,&lt;/em&gt; &lt;a href=&quot;http://www.newport.com/Fundamentals-of-Vibration/140234/1033/content.aspx&quot; rel=&quot;nofollow&quot;&gt;http://www.newport.com/Fundamentals-of-Vibration/140234/1033/content.aspx&lt;/a&gt;) can help with the specific parameters.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2015-12-03T15:11:22.270" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8598" PostTypeId="1" AcceptedAnswerId="8599" CreationDate="2015-12-03T17:58:28.307" Score="0" ViewCount="621" Body="&lt;p&gt;What kind of systems can be used to make a torso lifting system like the one used by this robot (the black part) :&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/r6okd.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/r6okd.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Rack and pinion&lt;/li&gt;&#xA;&lt;li&gt;lead screw&lt;/li&gt;&#xA;&lt;li&gt;scissor lift&lt;/li&gt;&#xA;&lt;li&gt;can a triple tree help ? &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;What are the pro and cons of each system ?&#xA;How do they ensure stability ?&#xA;And finally, is there a way to draw current when lowering instead of drawing current when lifting ?&lt;/p&gt;&#xA;" OwnerUserId="9582" LastActivityDate="2015-12-04T13:46:17.480" Title="Comparison of lifting systems" Tags="&lt;mechanism&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8599" PostTypeId="2" ParentId="8598" CreationDate="2015-12-03T19:22:52.897" Score="4" Body="&lt;p&gt;So this is summary...Open to discussions or edits...&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;| Mechanism          | Precision | Friction | Max length | Max force |&#xA;|--------------------| ----------|----------|------------|-----------|&#xA;| rack and pinion    | low       | high     | unlimited  | high      |&#xA;| lead screw         | high      | mid      | limited    | high      |&#xA;| ball screw         | high      | low      | limited    | high      |&#xA;| scissor lift       | mid       | low      | limited    | high      |&#xA;| linear direct drive| high      | low      | unlimited  | mid       |&#xA;| 4-bar mechanism    | high      | low      | limited    | high      |&#xA;|--------------------|-----------|----------|------------|-----------|&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It may worth noting:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;that the scissor and 4-bar mechanisms have a non-linear dependency between input and output velocity&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;not all 4 bar mechanism's motions are linear&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;the scissor mechanism (if designed like &lt;a href=&quot;https://en.wikipedia.org/wiki/Scissors_mechanism#/media/File:TL_2000_scissor_lift.jpg&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt;) provides a good lateral stiffness, all others would need some form of &lt;a href=&quot;http://www.skf.com/my/products/linear-motion/linear-guides-and-tables/index.html&quot; rel=&quot;nofollow&quot;&gt;linear motion guide&lt;/a&gt; to cope with lateral forces that bend the structure. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;You can use a spring (mech/pneu/hydro) to invert the direction of effort, or a simple counterweight.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may want to use a non-backdrivable gearbox to drive these (not the linear direct drive of course)...&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2015-12-04T10:52:14.570" LastActivityDate="2015-12-04T10:52:14.570" CommentCount="15" ContentLicense="CC BY-SA 3.0" />
  <row Id="8600" PostTypeId="1" CreationDate="2015-12-03T22:19:21.353" Score="0" ViewCount="561" Body="&lt;p&gt;I am trying to get depth data from a Kinect in a ROS project. It currently looks like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/I02fY.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/I02fY.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To arrive at this, I've done:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;depth_sub = rospy.Subscriber(&quot;/camera/depth/image&quot;, Image, depth_cb)&#xA;...&#xA;def depth_cb(data):&#xA;    img = bridge.imgmsg_to_cv2(data, &quot;32FC1&quot;)&#xA;    img = np.array(img, dtype=np.float32)&#xA;    img = cv2.normalize(img, img, 0, 1, cv2.NORM_MINMAX)&#xA;    cv2.imshow(&quot;Depth&quot;, img)&#xA;    cv2.waitKey(5)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I also launch openni.launch from the openni_launch package, which publishes the depth data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also get this weird warning from the node (can be seen in the image):&#xA;    ComplexWarning: Casting complex values to real discards the imaginary part.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But as I understand it the data type is an array of 32-bit floats. Yet some of the values appear as &lt;code&gt;nan&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like a depth image that directly corresponds to a RGB image array of the same size. I will be doing some tracking in the RGB space, and using the tracked coordinates (X,Y) from that to index into the depth array. Thanks. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;edit:&lt;/strong&gt;&#xA;Turns out, &lt;code&gt;/camera/depth/image&lt;/code&gt; is published as an array of uint8s, but the actual data is 32bit floats (which is not listed anywhere, had to hunt it down in other people's code). Thus an array of 480x640 uint8s, interpreted as 32bit floats, in effectively &quot;quartered&quot; in the number of data points. Which could explain how the image is 4 times smaller (and hence accessing datapoints out of bounds = nan?), but not why there are two of them.&lt;/p&gt;&#xA;" OwnerUserId="11216" LastEditorUserId="11216" LastEditDate="2015-12-04T22:33:52.920" LastActivityDate="2015-12-04T22:33:52.920" Title="ROS + kinect depth data duplication" Tags="&lt;ros&gt;&lt;kinect&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8601" PostTypeId="1" AcceptedAnswerId="8603" CreationDate="2015-11-28T09:07:21.703" Score="2" ViewCount="4969" Body="&lt;p&gt;I have a robotic system I'm controlling with Arduino, is there an heuristic way to determine a proper sampling time for my PID controller? Considering I have some other things to compute on my sketch that require time, but of course a good sampling time is crucial.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically I have a distance sensor that needs to detect at a constant rate an object that is moving, sometimes slow, sometimes fast. I don't have a good model of my system so I can't actually tell the physical frequency of the system.&lt;/p&gt;&#xA;" OwnerUserId="11196" OwnerDisplayName="Gian Mauro Musso" LastActivityDate="2015-12-04T11:37:24.643" Title="Choosing a proper sampling time for a PID controller" Tags="&lt;pid&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8602" PostTypeId="2" ParentId="8600" CreationDate="2015-12-04T07:06:11.987" Score="1" Body="&lt;p&gt;I hope I am understanding your issue right.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &quot;complex&quot; error looks like an encoding issue: depth data does not contain any complex numbers. Try removing the CV_32FC1, let it fallback to &quot;passthrough&quot; mode, i.e., it will use whatever the default type is. OpenCV constructs its matrices in a weird way sometimes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are you using the Kinect V1 or V2? Neither Kinect has the same resolution on both color and depth camera, so can you tell me a little bit more about what issue you're having when you say &quot;I would like a depth image that directly corresponds to a RGB image array of the same size&quot;?&lt;/p&gt;&#xA;" OwnerUserId="10310" LastActivityDate="2015-12-04T07:06:11.987" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="8603" PostTypeId="2" ParentId="8601" CreationDate="2015-12-04T07:36:13.213" Score="2" Body="&lt;p&gt;In order to properly sample a system you need to be sampling at least as fast as the Nyquist rate, which is twice as fast as the response rate of the system, preferably faster. You can do a lot of math to find out how fast is fast enough (I suggest Ogata), or go with the rule of thumb, 5-10x the system frequency. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since you are detecting the rate that an object is moving, you need to sample it fast enough to see it move no more than the minimum you care about. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As an example, lets say your maximum rate is 100mm/s, and you want an accuracy of 1mm. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this case, to see the object move no more than 1mm, you would need to sample at 2 x (max speed / accuracy) = 2 x (100mm/s / 1mm) or 200Hz minimum, and preferably you would be sampling at 500-1000Hz per the rule of thumb.&lt;/p&gt;&#xA;" OwnerUserId="11239" LastEditorUserId="37" LastEditDate="2015-12-04T11:37:24.643" LastActivityDate="2015-12-04T11:37:24.643" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8604" PostTypeId="2" ParentId="8598" CreationDate="2015-12-04T13:46:17.480" Score="1" Body="&lt;p&gt;Regarding the lift mechanism, I suggest you look at the semiconductor wafer-handling robots.  You can see the insides of one version here:  &lt;a href=&quot;https://www.ifixit.com/Teardown/Hine+Design+Inc.+Automated+Wafer+Handling+Unit+Teardown/1651&quot; rel=&quot;nofollow&quot;&gt;https://www.ifixit.com/Teardown/Hine+Design+Inc.+Automated+Wafer+Handling+Unit+Teardown/1651&lt;/a&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In that robot they used a lead screw vertical drive mechanism along with (it looks like) two cylindrical shafts for stability and linearity.  When I've built systems using parallel rails or shafts, it is very difficult to keep them collinear, so we would usually fix both ends of one rail, and only one end of the second rail.  The other end could float over a small range.  That way we would prevent binding due to misalignment issues.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That industry has made vertical lift mechanisms for robots out of everything from pneumatics, to linear motors, to ball screws, and more.  All of their designs require compactness and cleanliness, so some of the designs are very clever.  You can search for patents by companies such as Genmark, PRI Automation, Brooks Automation, Applied Materials, KLA Tencor, Hine Design, and Adept to find good examples.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2015-12-04T13:46:17.480" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8605" PostTypeId="1" CreationDate="2015-12-04T16:36:09.273" Score="3" ViewCount="1325" Body="&lt;p&gt;How mechanically robust are LiPo batteries? How much force or acceleration can they maximally withstand before failure? What is their (mechanical) shock resistance?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For some electrical components used in robots, such as IMU's, it can be found in datasheets that they can suffer mechanical failure if accelerated or loaded beyond given values. For IMU's, this is typically somewhere between $2000g$ and $10000g$ (where $1g = 9.81 m/s^2$).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm wondering if similar values are known for LiPo batteries, since they are known to be vulnerable components. But, is there any quantification known for their claimed vulnerability?&lt;/p&gt;&#xA;" OwnerUserId="10547" LastActivityDate="2018-06-16T20:55:56.533" Title="Mechanical robustness/shock resistance LiPo batteries" Tags="&lt;battery&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8606" PostTypeId="2" ParentId="8605" CreationDate="2015-12-04T19:15:12.367" Score="4" Body="&lt;p&gt;Typically, with LiPo batteries, they don't have a hard case. The hazard comes when the battery internals get dented, which causes the battery to short out internally. LiPo batteries can dump enough current when shorted  to &lt;a href=&quot;https://www.youtube.com/watch?v=wUFxlf4fXjo&quot; rel=&quot;nofollow&quot;&gt;cause a fire and/or explode when shorted.&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The deformation that causes a dent in the battery is generally caused by a high local pressure, the same way you might crack the screen of your phone if your car keys press against it in your pocket. Actually, I would bet this is the reason that a lot of &lt;a href=&quot;https://www.google.com/search?&amp;amp;q=cell%20phone%20catches%20fire%20in%20pocket&quot; rel=&quot;nofollow&quot;&gt;cell phones catch fire in people's pants&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So anyways, pressure is force over some area ($P = F/A$). The force may be cause by acceleration or shock, as $F=ma$. In this instance, then, catastrophic damage would depend on how the battery hit more so than the actual shock rating. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That is, if the battery hit on the corner, then the contact area is small, so the pressure is high, so the battery may deform. If the battery hits on its face/back/etc., then the area is large, so the pressure is low, so the battery may not deform. Again, this is how you could drop your phone on its back on the floor and the screen is fine, or you drop it on its corner and the screen cracks. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;All of this is to say that I would imagine battery manufacturers would probably &lt;em&gt;not&lt;/em&gt; shock rate a LiPo battery because the outside of a typical LiPo cell is so soft that the impact orientation would play a very large role in whether or not  the battery fails. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're concerned about battery damage then I would consider packing the battery in a hard shell. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-12-04T19:15:12.367" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="8607" PostTypeId="1" CreationDate="2015-12-04T21:31:19.257" Score="7" ViewCount="18520" Body="&lt;p&gt;Are there any Open source implementations of GPS+IMU sensor fusion (loosely coupled; i.e. using GPS module output and 9 degree of freedom IMU sensors)? -- kalman filtering based or otherwise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did find some open source implementations of IMU sensor fusion that merge accel/gyro/magneto to provide the raw-pitch-yaw, but haven't found anything that includes GPS data to provide filtered location and speed info.&lt;/p&gt;&#xA;" OwnerUserId="10293" LastEditorUserId="10293" LastEditDate="2015-12-04T22:13:37.543" LastActivityDate="2020-04-25T09:24:39.263" Title="Open source implementations for GPS+IMU sensor fusion?" Tags="&lt;kalman-filter&gt;&lt;imu&gt;&lt;sensor-fusion&gt;&lt;gps&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8609" PostTypeId="2" ParentId="8607" CreationDate="2015-12-04T23:03:43.317" Score="3" Body="&lt;p&gt;ROS has a package called robot_localization that can be used to fuse IMU and GPS data. This package implements Extended and Unscented Kalman filter algorithms.&#xA;The package can be found &lt;a href=&quot;http://wiki.ros.org/robot_localization&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="128" LastActivityDate="2015-12-04T23:03:43.317" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8610" PostTypeId="2" ParentId="8605" CreationDate="2015-12-05T01:20:48.803" Score="2" Body="&lt;p&gt;as @Chuck points out, LiPo cell are sensitive to thermal runaway triggered by mechanical rupture or deformation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An example of a manufactures shock spec can be found &lt;a href=&quot;http://nkon.nl/sk/k/NCR18650BL-specification.pdf&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;. (They test for a drop onto concrete).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mechanical failure from impact depends on so many factors that I don't think you will find specifications more specific than the one above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For pure acceleration (vibration in a rocket launch or a sensor in a centrifuge for instance) they should perform pretty well. The electrolyte is a paste... &lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2015-12-05T01:20:48.803" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8611" PostTypeId="1" AcceptedAnswerId="8630" CreationDate="2015-12-05T03:59:25.180" Score="0" ViewCount="26" Body="&lt;p&gt;I have an R.C car and there is a program in my computer in which I can code the car to perform movements.I would like to have an application with a visual design.Where it shows the cars path.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there available software code for this? Saves me lots of time.&lt;/p&gt;&#xA;" OwnerUserId="11017" LastActivityDate="2015-12-07T13:03:02.470" Title="IPhone controlled RC car" Tags="&lt;software&gt;&lt;research&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2015-12-07T15:27:30.050" ContentLicense="CC BY-SA 3.0" />
  <row Id="8612" PostTypeId="1" CreationDate="2015-12-05T10:33:37.963" Score="1" ViewCount="60" Body="&lt;p&gt;How can one control a combustion engine using a remote control.&#xA;Or how would you make a car controlled using a remote.&lt;/p&gt;&#xA;" OwnerUserId="11017" LastActivityDate="2015-12-08T21:26:22.480" Title="Combustion engine controlled with a remote" Tags="&lt;robotic-arm&gt;&lt;first-robotics&gt;" AnswerCount="1" CommentCount="3" ClosedDate="2016-07-21T18:03:35.203" ContentLicense="CC BY-SA 3.0" />
  <row Id="8613" PostTypeId="2" ParentId="8612" CreationDate="2015-12-05T17:27:10.390" Score="2" Body="&lt;p&gt;I will assume that you going to make everything from scratch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For computing unit I would recomend to use STM32 microcontroller (use Discovery or Nucleo  board) however if you have never programmed before Arduino would be simple but a bit less powerful.&#xA;For testing when transmiter with big range is needless you can use bluetooth module (HC-05) this will allow you to control from your laptop and see all needed feedback.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depending on mechanical steering system you have choosen you need different solutions but assuming that you going to use &lt;a href=&quot;https://en.wikipedia.org/wiki/Ackermann_steering_geometry&quot; rel=&quot;nofollow&quot;&gt;Ackermann steering geometry&lt;/a&gt; you need one servomotor for controlling stering weels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my projects always i've been using electrical engines but according to my general knowledge about combustion engines, you have to control throttle so this give you need for one more servomotor. Encoder on shaft could give good feedback information. If you want know speed of your car you need encoder on at least one wheel&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For start this is good idea to build it with full remote control but later if you become more aware of sotware and mechanics you can implement sensors and algorythms for better sterability or some autonomous maneuvers. &lt;/p&gt;&#xA;" OwnerUserId="10599" LastActivityDate="2015-12-05T17:27:10.390" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="8615" PostTypeId="2" ParentId="8607" CreationDate="2015-12-06T01:58:21.543" Score="6" Body="&lt;p&gt;Yes. The px4 software for the pixhawk autopilot has an extended kalman filter that uses an accelerometer, a gyroscope, gps, and mag.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A paper describing the a smaller ekf which only estimates attitude &lt;a href=&quot;https://web.archive.org/web/20150326184615/https://pixhawk.org/firmware/apps/attitude_estimator_ekf&quot; rel=&quot;nofollow noreferrer&quot;&gt;can be found on archive.org&lt;/a&gt; and code for the full ekf can be found on &lt;a href=&quot;https://github.com/priseborough/InertialNav&quot; rel=&quot;nofollow noreferrer&quot;&gt;github&lt;/a&gt; with further information &lt;a href=&quot;https://web.archive.org/web/20140730022711/https://pixhawk.org/firmware/apps/ekf_att_pos_estimator&quot; rel=&quot;nofollow noreferrer&quot;&gt;on archive.org&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="8842" LastEditorUserId="37" LastEditDate="2020-04-25T09:24:39.263" LastActivityDate="2020-04-25T09:24:39.263" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8617" PostTypeId="1" CreationDate="2015-12-06T11:21:06.597" Score="2" ViewCount="148" Body="&lt;p&gt;I am preparing for an exam in neural networks. As an example for self-organizing maps they showed the inverted pendulum problem where you want to keep the pole vertical:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/CK9VU.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/CK9VU.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now the part which I don't understand:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;$$f(\theta) = \alpha \sin(\theta) + \beta \frac{\mathrm{d} \theta}{\mathrm{d} t}$$&#xA;  Let $x= \theta$, $y=\frac{\mathrm{d} \theta}{\mathrm{d} t}$, $z=f$.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Solution with SOM:&lt;/p&gt;&#xA;  &#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;three-dimensional surface in $(x,y,z)$&lt;/li&gt;&#xA;  &lt;li&gt;adapt two-dimensional SOM to surface&lt;/li&gt;&#xA;  &lt;li&gt;Method of control&#xA;  &#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;For a given $(x,y)$ find neuron $k$ for wich $w_k = [w_{k1}, w_{k2}, w_{k2}, w_{k3}]$&lt;/li&gt;&#xA;  &lt;li&gt;$f(\theta)$ is then $w_{k3}$&lt;/li&gt;&#xA;  &lt;/ul&gt;&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I guess we use the SOM to learn the function $f$. However, I would like to understand where $f$ comes from / what it means in this model.&lt;/p&gt;&#xA;" OwnerUserId="11257" LastEditorUserId="2295" LastEditDate="2015-12-06T15:52:52.673" LastActivityDate="2015-12-06T19:12:35.080" Title="What is $\alpha \sin(\theta) + \beta \frac{d \theta}{d t}$ in the inverted pendulum problem?" Tags="&lt;control&gt;&lt;stability&gt;&lt;machine-learning&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8618" PostTypeId="1" CreationDate="2015-12-06T15:50:31.833" Score="-1" ViewCount="1091" Body="&lt;p&gt;I want to build robots, and right now I aim to work with Arduino boards&#xA;I know that they are compatible with c and c++, so was wondering which language is better for robotics in general?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know how to write in java, and the fact that c++ is object oriented makes it look like a better choice for me&lt;/p&gt;&#xA;&#xA;&lt;p&gt;does c have any advantages over c++?&lt;/p&gt;&#xA;" OwnerUserId="11259" LastEditorUserId="184" LastEditDate="2015-12-07T06:42:54.970" LastActivityDate="2015-12-07T06:42:54.970" Title="Does C have advantages over C++ in robotics?" Tags="&lt;arduino&gt;&lt;c++&gt;&lt;c&gt;" AnswerCount="2" CommentCount="2" ClosedDate="2015-12-07T12:23:18.373" ContentLicense="CC BY-SA 3.0" />
  <row Id="8619" PostTypeId="2" ParentId="8617" CreationDate="2015-12-06T19:12:35.080" Score="8" Body="&lt;p&gt;The function $f$ comes from the equation of motion for the inverted pendulum problem (&lt;em&gt;inverted pendulum alone&lt;/em&gt;, not including the motion of the wheeled platform). If you consider your figure but ignore the side-to-side motion of the cart, then the equilibrium of moments about the hinge is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\sum M = m g l \sin \theta - b\frac{d \theta}{dt} $&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where $m$ is the mass of the black point mass at the tip of the pendulum and $b$ is the linear damping coefficient (due to friction at the hinge).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The sum of moments is equal to the inertial reaction (equivalent of $F = ma$):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\sum M = m l^2 \frac{d^2 \theta}{dt^2}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Equating these two leads to the equation of motion for the inverted pendulum:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\frac{d^2 \theta}{dt^2} = \frac{g}{l} \sin \theta - \frac{b}{m l^2} \frac{d \theta}{dt}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Substituting $\alpha = \frac{g}{l}$ and $\beta = -\frac{b}{m l^2}$, we then recover the form of the function $f$ in your question:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\frac{d^2 \theta}{dt^2} = \alpha \sin \theta + \beta \frac{d \theta}{dt}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(It should again be stressed that this analysis does not include the side-to-side motion of the cart.)&lt;/p&gt;&#xA;" OwnerUserId="10836" LastActivityDate="2015-12-06T19:12:35.080" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8621" PostTypeId="1" CreationDate="2015-12-06T22:00:22.547" Score="3" ViewCount="3349" Body="&lt;p&gt;I am the moment trying to compute the transformation matrix for robot arm, that is made of 2 joints (serial robot arm), with which I am having some issues. L = 3, L1 = L2 = 2, and q = ($q_1$,$q_2$,$q_3$) = $(0 , \frac{-\Pi}{6},\frac{\Pi}{6})$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based on this information I have to compute the forward kinematic, and calculate the position of each joint. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Problem here is though, how do I compute the angle around x,y,z.. for the transformation matrix.  Using sin,cos,tan is of course possible, but what do their angle corresponds? which axis do they correspond to?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/EIBNn.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/EIBNn.png&quot; alt=&quot;Sketch of the robot&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried using @SteveO answer to compute the $P_0^{tool}$ using the method he provided in his answer, but I somehow mess up something, as the value doesn't resemble the answer given in the example.. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/zcDfO.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zcDfO.png&quot; alt=&quot;Mathmatica calculation&quot;&gt;&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="11263" LastEditorUserId="9620" LastEditDate="2015-12-07T15:51:21.763" LastActivityDate="2016-01-17T20:55:11.990" Title="Forward kinematic computing the transformation matrix" Tags="&lt;kinematics&gt;&lt;forward-kinematics&gt;&lt;orientation&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8622" PostTypeId="2" ParentId="8621" CreationDate="2015-12-06T22:47:54.523" Score="7" Body="&lt;p&gt;Start with coordinate systems.  I've drawn one example.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/it3Dp.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/it3Dp.png&quot; alt=&quot;Original robot with coordinate systems&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my analysis, if all $q_i = 0$ then the manipulator would point straight up.  You can choose other coordinate frames to get the same result.  Build your rotation matrices from the coordinate systems you set up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The rotation matrix from coordinate system $0$ to coordinate system $1$ is&#xA;$$_0^1R = \begin{bmatrix}&#xA;\cos q_1&amp;amp;-\sin q_1&amp;amp;0\\&#xA;\sin q_1&amp;amp;\cos q_1&amp;amp;0\\&#xA;0&amp;amp;0&amp;amp;1&#xA;\end{bmatrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The mapping from coordinate system $1$ to coordinate system $2$ is&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$_1^2R = \begin{bmatrix}&#xA;-\sin q_2&amp;amp;-\cos q_2&amp;amp;0\\&#xA;\cos q_2&amp;amp;-\sin q_2&amp;amp;0\\&#xA;0&amp;amp;0&amp;amp;1&#xA;\end{bmatrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And the mapping from system $2$ to $3$ is&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$_2^3R = \begin{bmatrix}&#xA;\cos q_3&amp;amp;-\sin q_3&amp;amp;0\\&#xA;\sin q_3&amp;amp;\cos q_3&amp;amp;0\\&#xA;0&amp;amp;0&amp;amp;1&#xA;\end{bmatrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Notice that all of the joint angles are taken as positive rotations around the $z$ axis.  I'm not sure from your problem statement or drawing if that is your intention.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So to compute the position of point $p$ with respect to the global $0$ coordinate system, apply the vector loop&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ \vec p = L \vec y_1 + L_1 \vec x_2 + L_3 \vec x_3$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\vec y_1$ is the second column from $_0^1R$.  $\vec x_2$ is the first column from $_0^2R$, and $\vec x_3$ is the first column from $_0^3R$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You compute $_0^2R$ by multiplying $_0^1R _1^2R$, and $_0^3R$ is $_0^2R _2^3R$.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastEditorUserId="11125" LastEditDate="2015-12-06T23:03:46.900" LastActivityDate="2015-12-06T23:03:46.900" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="8623" PostTypeId="2" ParentId="8618" CreationDate="2015-12-06T22:58:38.473" Score="1" Body="&lt;p&gt;As the comments indicate, the answer is really based on what you want to do with the programs you write.  There are a lot of benefits to the object oriented capabilities of C++.  But the inheritance, overloading, &lt;em&gt;etc.,&lt;/em&gt; does come with a performance penalty.  C++ compilers optimize quite well, and for most tasks you will be fine with that - especially since you already know java.  But if you need to do fast, low-level tasks, you will never beat the efficiency of pure C unless you write assembly code directly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do you want to write low-level communication, data acquisition, or control code?  Then choose C.  Do you want to write user applications that run on top of the low-level driver stuff?  Then C++ would be easier for a java programmer.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2015-12-06T22:58:38.473" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8625" PostTypeId="2" ParentId="8618" CreationDate="2015-12-07T05:37:47.497" Score="0" Body="&lt;p&gt;Most microcontrollers have good C++ compilers now. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most C idioms can be written in C++.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Templates, function overloading, and structure member functions allow one to write modular, readable code without classes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Interfacing to other libraries can be done with extern &quot;C&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Much high-level software (image processing, ROS, etc) is written in C++.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you pick one systems language for robotics work, pick C++.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are working close to the metal, you must learn and understand what C++ is doing behind the scenes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only advantage C has is that there's lots of legacy code using C, especially OS code, and occasionally there is obscure or old hardware without a C++ compiler.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2015-12-07T05:37:47.497" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8627" PostTypeId="2" ParentId="8196" CreationDate="2015-12-07T06:43:27.013" Score="0" Body="&lt;p&gt;Did you try updating numpy directly? rosdep does not care about pip packages.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sudo pip install numpy -U&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="10310" LastActivityDate="2015-12-07T06:43:27.013" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8628" PostTypeId="2" ParentId="8621" CreationDate="2015-12-07T08:57:15.973" Score="4" Body="&lt;p&gt;In your forward kinematics transformation matrix (4x4, incl. also translation, of just 3x3) the orientation of the end-effector is expressed relative to the base (or world) coordinate system. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;SteveO described very well how to obtain the 3x3 rotation matrix, similarly you can obtain also the 4x4 transformation matrix&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have the matrix you have to choose how do you want to express the coordinates. Commonly in robotics euler angles are used, with successive rotations about the axes of a coordinate system. After choosing the &lt;a href=&quot;https://en.wikipedia.org/wiki/Euler_angles&quot; rel=&quot;nofollow&quot;&gt;Euler angles&lt;/a&gt;, you also have to choose which is the succession of the rotation. In robotics in many cases the rotations are successive (intrinsic) rotations. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;After choosing hwo do you want to express the orientation you can build up the orientation matrix from your rotations(e.g. X-Y-Z, then you multiply $R_{TCP} = R(\phi_x) * R(\phi_y) * R(\phi_z) $). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The orientation of your TCP expressed in function of your joints is $R_{joints}=R_{joints}(q1, q2, q3)$ or $^3_0R$ in the notation used by SteveO. Both of the matrices express the same orientation but in a different way, so $R_{TCP}=R_{joints}$ the joint angles are known in forward kinematics, so you can calculate the orientation angles. Please note that if you are using Matlab the &lt;code&gt;dcm2angle()&lt;/code&gt; function does exactly this.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2015-12-07T16:58:09.530" LastActivityDate="2015-12-07T16:58:09.530" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8630" PostTypeId="2" ParentId="8611" CreationDate="2015-12-07T13:03:02.470" Score="0" Body="&lt;p&gt;You'd probably have more success with Android, i.e. NXT Remote Control took me 30 seconds to find.&lt;/p&gt;&#xA;" OwnerUserId="10717" LastActivityDate="2015-12-07T13:03:02.470" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8631" PostTypeId="1" AcceptedAnswerId="8633" CreationDate="2015-12-07T17:43:47.353" Score="0" ViewCount="2063" Body="&lt;p&gt;Hi I'm using &quot;minImu 9&quot; 9 DOF IMU (gyro, accelerometer and compass) sensor and it gives pitch roll and yaw values with a slope on desktop (no touch, no vibration, steady). Y axis is angle in degree and X axis is time in second. X axis length is 60 seconds. How can fix this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pitch&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/D0fH9.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/D0fH9.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Roll&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/7hI8v.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7hI8v.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yaw&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gr6XY.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gr6XY.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note1: &lt;a href=&quot;https://github.com/pololu/minimu-9-ahrs-arduino&quot; rel=&quot;nofollow noreferrer&quot;&gt;minIMU code&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2015-12-08T07:05:49.753" LastActivityDate="2015-12-08T23:57:01.430" Title="IMU sensor and compensation" Tags="&lt;sensors&gt;&lt;imu&gt;&lt;sensor-fusion&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8632" PostTypeId="2" ParentId="8631" CreationDate="2015-12-07T19:12:42.520" Score="0" Body="&lt;p&gt;if you're using a complementary filter, it's likely you have a bias in your gyroscope. take an average of 100 measurements when the imu isn't moving and subtract that from future measurements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How does removing the average change the behavior of the complimentary filter?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What do the measurements look like before and after the biases have been removed?&lt;/p&gt;&#xA;" OwnerUserId="8842" LastEditorUserId="8842" LastEditDate="2015-12-08T23:57:01.430" LastActivityDate="2015-12-08T23:57:01.430" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8633" PostTypeId="2" ParentId="8631" CreationDate="2015-12-07T19:27:53.247" Score="1" Body="&lt;p&gt;MEMS gyros all have a problem with drift due to temperature. This can be worked around using several techniques, and higher cost parts generally have some amount of compensation built in. However, in my experience even the most expensive gyros need some individual calibration or sensor fusion techniques to deal with drift.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Taking a look at this sensor package, the 3 axis gyro is not calibrated for temperature, but does include a temperature sensor. This is pretty common in low cost gyros. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As an aside, I would not consider this part an IMU since it does no sensor fusion or calibration between the gyro, temperature sensor, accelerometer and magnetometer. This is reflected in its price.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway, what that means is you will need to come up with a way to deal with the gyro drift yourself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The best technique is going to depend on your application and budget, but here are some approaches to look at:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Buy a better IMU: Depending on your budget, this may be the simplest solution. Expect to spend between $50-$100.00 for such a device.&lt;/li&gt;&#xA;&lt;li&gt;Have an operational calibration process: In this case, you would measure the drift rate of each axis every time you knew it was not in motion, keeping it updated in a moving average and apply that as an offset to the measured rate. This is a simple solution if you have a way of knowing that the sensor is not moving and that will happen regularly during operation.&lt;/li&gt;&#xA;&lt;li&gt;Calibrate the offset for temperature: If you have access to a precision thermal chamber, you can pre-calculate the drift rate vs temperature function and update it on the fly. This works best if combined with an occasional stopped calibration.&lt;/li&gt;&#xA;&lt;li&gt;Implement a Complementary or Kalman filter to process the data. This is described in the answers to &lt;a href=&quot;https://stackoverflow.com/questions/1586658/combine-gyroscope-and-accelerometer-data&quot;&gt;https://stackoverflow.com/questions/1586658/combine-gyroscope-and-accelerometer-data&lt;/a&gt; and can be combined with 2 and 3.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="11239" LastEditorUserId="-1" LastEditDate="2017-05-23T12:37:11.430" LastActivityDate="2015-12-07T19:43:40.920" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8634" PostTypeId="2" ParentId="6683" CreationDate="2015-12-07T20:17:12.540" Score="0" Body="&lt;p&gt;you can referred to this link, it is useful:&#xA;&lt;a href=&quot;http://www.ene.ttu.ee/elektriajamid/oppeinfo/materjal/AAR0040/03_Robotics.pdf&quot; rel=&quot;nofollow&quot;&gt;http://www.ene.ttu.ee/elektriajamid/oppeinfo/materjal/AAR0040/03_Robotics.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11273" LastActivityDate="2015-12-07T20:17:12.540" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8635" PostTypeId="2" ParentId="6683" CreationDate="2015-12-07T20:56:18.050" Score="0" Body="&lt;p&gt;In many contexts these terms can be interchangeable, however they can also refer to specific things. Here's a glossary to help figure that out:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;State (rigid body mechanics)&lt;/strong&gt; - Position and velocity at a given moment in time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Motion&lt;/strong&gt; - The change of state at any instant in time of a body (or bodies).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Trajectory&lt;/strong&gt; - The state of a body or bodies over a period of time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Path&lt;/strong&gt; - The position of a body or bodies over a period of time without worrying about velocity or higher order terms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Planning&lt;/strong&gt; - Calculating how to compose and sequence a set of primitives in a way that takes a body from an initial state to a final state while respecting a set of constraints (avoiding obstacles or burning minimal fuel for instance).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Generation&lt;/strong&gt; - Used generically but can often refer to the phase of planning when you know all the variables and are just calculating the trajectory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So motion planning and trajectory planning are interchanged a lot. Trajectory generation can be a sub-task of motion planning in some contexts.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2015-12-07T20:56:18.050" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8636" PostTypeId="1" AcceptedAnswerId="8637" CreationDate="2015-12-08T09:33:10.837" Score="3" ViewCount="320" Body="&lt;p&gt;I'm trying to implement a PID controller by myself and I've a question about the sum_error in I control. Here is a short code based on the PID theory.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void pid()&#xA;{&#xA;  error = target - current;&#xA;&#xA;  pTerm = Kp * error;&#xA;&#xA;  sum_error = sum_error + error * deltaT ;&#xA;  iTerm = Ki * sum_error;&#xA;&#xA;  dTerm = Kd * (error - last_error) / deltaT;&#xA;  last_error = error;&#xA;&#xA;  Term = K*(pTerm + iTerm + dTerm);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Now, I start my commands:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Phase 1, If at t=0, I set target=1.0, and the controller begins to drive motor to go to the target=1.0,&#xA;Phase 2, and then, at t=N, I set target=2.0, and the controller begins to drive motor to go to the target=2.0&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is, in the beginning of phase 1, the error=1.0, the sum_error=0, and after the phase 1, the sum_error is not zero anymore, it's positive. And in the beginning of phase 2, the error=1.0 (it is also the same with above), but the sum_error is positive. So, the iTerm at t=N is much greater than iTerm at t=0.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It means, the curves between phase 2 and phase 1 are different!!!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But to end-user, the command 1, and the command 2 is almost the same, and it should drive the same effort.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Should I set the sum_error to zero or bound it? Can anyone tell me how to handle the sum_error in typical?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any comment will be much appreciated!!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Kevin Kuei&lt;/p&gt;&#xA;" OwnerUserId="11274" LastActivityDate="2015-12-08T20:34:42.810" Title="sum_error in PID controller" Tags="&lt;pid&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8637" PostTypeId="2" ParentId="8636" CreationDate="2015-12-08T09:57:49.627" Score="2" Body="&lt;p&gt;I would recommend implementing&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Integral_windup&quot; rel=&quot;nofollow&quot;&gt;anti-windup&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;an averaging (or other) filter for the derivative term (spanning across 2-3-4 timesteps&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://homepages.uni-regensburg.de/~erc24492/PID-Regler/AVR221/IAR/doxygen/pid_8c.html&quot; rel=&quot;nofollow&quot;&gt;Here&lt;/a&gt; is a referece implementation from Atmel in C with integrator reset.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: &#xA;Please consider Chucks questions in the comments and his answer, since anti windup prevents unwanted error accumulation only in the case when the system is not able to execute the desired set-point. &lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2015-12-08T20:34:42.810" LastActivityDate="2015-12-08T20:34:42.810" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8638" PostTypeId="2" ParentId="8636" CreationDate="2015-12-08T14:26:57.250" Score="2" Body="&lt;p&gt;First, please respond to the questions I ask in the comments on your question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You mention that the device to be controlled is a motor. Bear in mind that rotating power is $P = \tau \omega$, or torque times speed, so you won't get the same response at high speed that you get at low speed because motor torque typically declines with increasing speed. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not sure if this is the cause of your differing responses or not, but I believe it would have a large impact &lt;em&gt;unless&lt;/em&gt; you're just using &quot;1.0&quot; and &quot;2.0&quot; as placeholders for some other value, or they are literally 1 and 2 and are very close together percentage-wise in terms of the entire speed band of the motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding wind-up, mentioned in 50k4's answer, I wouldn't think it would be an issue unless your process is saturating, which is to say that it shouldn't be an issue unless your motor is hitting some physical limits that would prevent it from responding, like a current limit or something similar. Note however that if you &lt;em&gt;are&lt;/em&gt; getting to the point where your response is saturating that you are also likely operating at a point where motor power is limited and thus you are unlikely to get the same response curves no matter what actions you take to tune a standard PID controller. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ultimately, if I were you, I would evaluate the errors and determine if there is a problem with your error accounting or if you are realizing the physical limitations of a motor. Keep in mind that the &lt;em&gt;entire point&lt;/em&gt; of the integral term is to accumulate error - this will speed control response if it is &quot;taking too long&quot;. Accumulated error before settling is both normal and desirable &lt;em&gt;as long as&lt;/em&gt; the controller output is still able to effect change in the system. Only when the system becomes unresponsive: linear actuators at an end stop; motors at top speed; motor drivers at a current limit; etc., will wind-up become an issue. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would output integral error, set the motor setpoint to 1.0, then wait until integral error is (effectively) zero, then change the setpoint to 2.0. If the output response is still inconsistent, then you have a problem with the physical limitations of the system (increasing torque required at higher speeds). If you get consistent responses then you are entering &quot;Phase 2&quot; at time &quot;t=N', which is still inside the response time for Phase 1. As the controller is still actively responding it will naturally generate a different response. At that point, consider waiting longer to enter Phase 2 or increasing the gains on your controller to achieve a settled response by time &quot;t=N&quot;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a final comment, the last line of your code has &quot;Term = &lt;strong&gt;k&lt;/strong&gt; * (&lt;code&gt;error terms&lt;/code&gt;)&quot;. If you are doing everything else correctly (generally, have your sampling time correct), then you should leave $k=1$, or just use the sum of the PID terms as the controller output.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-12-08T14:26:57.250" CommentCount="12" ContentLicense="CC BY-SA 3.0" />
  <row Id="8642" PostTypeId="1" AcceptedAnswerId="8650" CreationDate="2015-12-09T20:22:49.593" Score="4" ViewCount="291" Body="&lt;p&gt;Why is there a discontinuity in the quaternion representation of my device orientation?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm using a &lt;a href=&quot;http://www.pnicorp.com/products/sentral-mm/&quot; rel=&quot;nofollow noreferrer&quot;&gt;SENtral+PNI RM3100+ST LSM330&lt;/a&gt; to track orientation. I performed the following test:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Place the device in the center of a horizontal rotating plate (&quot;lazy susan&quot;).&lt;/li&gt;&#xA;&lt;li&gt;Pause for a few seconds.&lt;/li&gt;&#xA;&lt;li&gt;Rotate the plate 360° clockwise.&lt;/li&gt;&#xA;&lt;li&gt;Pause for a few seconds.&lt;/li&gt;&#xA;&lt;li&gt;Rotate the plate 360° clockwise again.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I got this output, which appears discontinuous at sample #1288-1289.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/B4BQA.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/B4BQA.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sample #1288 has  &lt;code&gt;(Qx,Qy,Qz,Qw) = (0.5837, 0.8038, 0.0931, 0.0675)&lt;/code&gt;, but sample #1289 has &lt;code&gt;(Qx,Qy,Qz,Qw) = (0.7079, -0.6969, -0.0807, 0.0818)&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Plugging in the formulas on page 32 of &lt;a href=&quot;http://www.pnicorp.com/wp-content/uploads/Sentral-MandM-Technical-Datasheet_rG.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this document&lt;/a&gt;, this corresponds to a change in orientation from &lt;code&gt;(Heading, Pitch, Roll) = (108°, 0°, 142°)&lt;/code&gt; to &lt;code&gt;(Heading, Pitch, Roll) = (-89°, 0°, 83°)&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://i.imgur.com/ZQLhDVg.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;graph of (Heading, Pitch, Roll)&lt;/a&gt; is also not continuous mod 90°.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does this output make sense? I did not expect a discontinuity in the first plot, since the unit quaternions are a covering space of SO(3). Is there a hardware problem, or am I interpreting the data incorrectly?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt; The sensor code is in &lt;a href=&quot;http://pastebin.com/raw/sT2F7f5g&quot; rel=&quot;nofollow noreferrer&quot;&gt;central.c&lt;/a&gt; and &lt;a href=&quot;http://pastebin.com/raw/qu8RFx4z&quot; rel=&quot;nofollow noreferrer&quot;&gt;main.c&lt;/a&gt;. It is read with this &lt;a href=&quot;http://pastebin.com/raw/7QXJ00cq&quot; rel=&quot;nofollow noreferrer&quot;&gt;Python script&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="11289" LastEditorUserId="11289" LastEditDate="2015-12-19T19:45:33.907" LastActivityDate="2015-12-19T19:45:33.907" Title="Discontinuity in device orientation" Tags="&lt;sensors&gt;&lt;calibration&gt;&lt;orientation&gt;" AnswerCount="3" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8643" PostTypeId="2" ParentId="8642" CreationDate="2015-12-09T22:33:21.103" Score="-1" Body="&lt;p&gt;yaw has a range of +/- 180 degrees. There is going to be a discontinuity when you reach that limit. &lt;/p&gt;&#xA;" OwnerUserId="8842" LastActivityDate="2015-12-09T22:33:21.103" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8644" PostTypeId="1" CreationDate="2015-12-10T03:43:50.360" Score="4" ViewCount="355" Body="&lt;p&gt;I found this website &lt;a href=&quot;http://robotbasic.org/&quot; rel=&quot;nofollow&quot;&gt;http://robotbasic.org/&lt;/a&gt; and it talks about a language used for programming things related to robotics, and I want to make sure whether or not it's worth investing any time or energy into compared to other languages before I just wipe it from my browser bookmarks for good. Nowadays, are there better languages and methods for going about the same things that it talks about? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I mean, the site looks pretty old, like something from the late 90s or pre-2010, plus I never heard of it anywhere except for this site, so I wonder if it's just not relevant any more if it ever was.&lt;/p&gt;&#xA;" OwnerUserId="11294" LastActivityDate="2016-11-16T10:28:43.297" Title="Is RobotBASIC outdated?" Tags="&lt;control&gt;&lt;software&gt;" AnswerCount="3" CommentCount="1" ClosedDate="2016-11-16T10:35:21.717" ContentLicense="CC BY-SA 3.0" />
  <row Id="8645" PostTypeId="2" ParentId="8592" CreationDate="2015-12-10T03:50:47.713" Score="2" Body="&lt;p&gt;I'm not familiar with your device, but here are a few tips that might help...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since the device is using a quaternion to describe an orientation, they must also specify some base coordinate frame against which that rotation applies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The w term in a quaternion is the cosine of the half-angle of desired rotation around the (x,y,z) vector component. If you don't care about the angle of rotation, then w can be anything (subject to normalization requirements), including 0.&lt;/p&gt;&#xA;" OwnerUserId="11291" LastActivityDate="2015-12-10T03:50:47.713" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8646" PostTypeId="2" ParentId="7841" CreationDate="2015-12-10T03:55:29.047" Score="2" Body="&lt;p&gt;The problem you want to solve is definitely a SLAM problem and not just simply localization (or maybe we can consider it SLAm since the mapping part is not as heavy). The reason for this is that you will need to do some kind of mapping for initialization when you set up the environment. Of course you could set up the environment with markers or known features and carefully position them so that you know the map immediately, but that process is a lot harder than most people imagine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based on your question and the comments you've provided in CroCo's answer (which, by the way, is still a decent answer but I would like to expand), I see two paths that you can take which shouldn't be too difficult given all the resources available out there:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Vision-based: Use &lt;a href=&quot;https://www.google.ca/search?q=fiducial+markers&amp;amp;safe=off&amp;amp;source=lnms&amp;amp;tbm=isch&amp;amp;sa=X&amp;amp;ved=0ahUKEwilvrrXp9DJAhXvq4MKHRKLBMsQ_AUIBygB&amp;amp;biw=1536&amp;amp;bih=692&quot; rel=&quot;nofollow&quot;&gt;fiduciary markers&lt;/a&gt; (QR codes or typical black and white checker patterns like you see on crash-test dummies), then locate these markers using computer vision feature recognition algorithms (&lt;a href=&quot;http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_feature2d/py_table_of_contents_feature2d/py_table_of_contents_feature2d.html&quot; rel=&quot;nofollow&quot;&gt;OpenCV can do this easily using something like SURF&lt;/a&gt;). You can perform the initial mapping by using a &lt;a href=&quot;http://www2.informatik.uni-freiburg.de/~stachnis/pdf/grisetti10titsmag.pdf&quot; rel=&quot;nofollow&quot;&gt;graph-based SLAM&lt;/a&gt; approach (not real-time, record a bunch of data and crunch it all at once), then do localization only in real-time using a simplified &lt;a href=&quot;https://en.wikipedia.org/wiki/Bundle_adjustment&quot; rel=&quot;nofollow&quot;&gt;bundle adjustment&lt;/a&gt; approach (with just one single image and enough visible features).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;LiDAR-based: Rely generally on &lt;a href=&quot;https://en.wikipedia.org/wiki/Iterative_closest_point&quot; rel=&quot;nofollow&quot;&gt;ICP registration&lt;/a&gt; with your reference point cloud (pre-built map) and a fresh scan from the sensor. Note that to do this you need to use a scanner on your stick instead of a camera. It will be almost impossible to build the map with laser scan data and then localize inside it with a camera. I say &quot;almost&quot; because there does exist a body of research that relies on monocular cameras for generating 3D data from 2D images (&lt;a href=&quot;https://en.wikipedia.org/wiki/Photometric_stereo&quot; rel=&quot;nofollow&quot;&gt;shape from shading&lt;/a&gt;, for example), but that is going to be a much bigger challenge than I suspect you want to tackle.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Another interesting option is to use something like the X-Box Kinect (v1 or v2) so that you can get both 2D camera data and 3D scanning at the same time. With that approach you can then identify features in the camera images but have them linked to 3D coordinates in the scan data. &lt;a href=&quot;https://www.youtube.com/watch?v=AMLwjo80WzI&quot; rel=&quot;nofollow&quot;&gt;Here&lt;/a&gt; is an example of the Kinect being used for indoor SLAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some of the challenges you will encounter will be motion blur and even rolling shutter issues if you are using a fast-moving camera point-of-view. Your problem could be solved simply by considering a new image, identifying the features in that image, and then simple camera 3D reconstruction (again using &lt;a href=&quot;http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_calib3d/py_table_of_contents_calib3d/py_table_of_contents_calib3d.html&quot; rel=&quot;nofollow&quot;&gt;OpenCV's camera reconstruction tools&lt;/a&gt; would be recommended).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also suggest checking into using &lt;a href=&quot;http://www.ros.org/&quot; rel=&quot;nofollow&quot;&gt;ROS&lt;/a&gt;, which provides a lot of the components for solving your problem already built and ready for implementation using a variety of different sensors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another thing that you haven't mentioned (and is alluded to in CroCo's answer) is that you can use an IMU (integrated accelerometer, gyroscope, and possibly magnetometer) to provide motion estimates of the camera itself. This is not sufficient alone but can make real-time pose estimation much easier (actually, most of us would consider it crucial). With the use of an IMU and camera/scanner data, you can then use an EKF or particle filter as has been suggested.&lt;/p&gt;&#xA;" OwnerUserId="10836" LastEditorUserId="10836" LastEditDate="2015-12-10T04:20:17.733" LastActivityDate="2015-12-10T04:20:17.733" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8647" PostTypeId="2" ParentId="8642" CreationDate="2015-12-10T07:58:25.027" Score="0" Body="&lt;p&gt;You are right, the quaternion should be without discontinuities. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It could be a bad implementation of your algorithm, but I believe your discontinuity may come from the magnetometer in your setup. Magnetometers have to be &lt;a href=&quot;http://www.vectornav.com/support/library/magnetometer&quot; rel=&quot;nofollow&quot;&gt;calibrated&lt;/a&gt; properly in order to map the magnetic field reading to an orientation. If it is not, it can lead to effects where small changes in the actual orientation of the device lead to large changes in the interpretation of the orientation from the magnetic reading.&lt;/p&gt;&#xA;" OwnerUserId="127" LastActivityDate="2015-12-10T07:58:25.027" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8648" PostTypeId="2" ParentId="8644" CreationDate="2015-12-10T12:40:26.650" Score="-1" Body="&lt;p&gt;In an ideal case always the right tool is used for the right job. In many cases however the best among the accessible/known tools is used. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There has to be a purpose why robotbasic was created, and it might still be the best tool for that specific niche purpose. After taking a short look at the website, this purpose was not to me clearly described. It seems as a general tool for everithing, but for that purpuse it is, to my knowledge, not generally used or known.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I find it a bit confusing that it uses an operating system called &lt;a href=&quot;http://robotbasic.org/6.html&quot; rel=&quot;nofollow&quot;&gt;RROS&lt;/a&gt;, which it not the well known &lt;a href=&quot;http://www.ros.org/&quot; rel=&quot;nofollow&quot;&gt;ROS&lt;/a&gt;, however the names are very similar.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2015-12-10T12:40:26.650" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8650" PostTypeId="2" ParentId="8642" CreationDate="2015-12-10T17:04:22.050" Score="1" Body="&lt;p&gt;Something's not right, either with your test, your conversion, or with the device itself. If you look at your graph of heading, pitch, and roll, you can see that heading rotates through 360 degrees, which is expected, but roll changes almost 180 degrees in one direction, then 180 degrees back. If your device is loose and rolling around on the turntable then maybe that's correct, but otherwise you've got something else going on. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Can you provide your initialization code?&lt;/strong&gt; Notice that you can't just power-on this device an use it - from &lt;a href=&quot;http://www.pnicorp.com/wp-content/uploads/Sentral-MandM-Technical-Datasheet_rG.pdf&quot; rel=&quot;nofollow&quot;&gt;page 16 of the manual&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; It is necessary to set the MagRate, AccelRate, AND GyroRate registers to non-zero values for the SENtral algorithm to function properly and to obtain reliable orientation and scaled sensor data. If a [Sensor]Rate register is left as 0x00 after power-up, or is changed to 0x00, this effectively disablesthat sensor within the SENtral algorithm. Also, the CalStatus, MagTransient, and AlgorithmSlow bits become undefined.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Are you getting any errors?&lt;/strong&gt; Page 17, step (d) states you are to read the event register and then process the bits in the priority order specified in Figure 4-3 (at the top of that page), which means you are to check and act on an error bit &lt;em&gt;before&lt;/em&gt; checking the sensor data available bits. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, &lt;strong&gt;Can you provide your sensor read code?&lt;/strong&gt; Your sample data with the discontinuity shows values in the range of -1 to 1, but Page 19 clearly states that Full Scale Output for the quaternions are 0-1, or $\pm \pi$. All of your data appears to be bounded at +1 on the high end, which makes me believe that you are not operating at the $\pm \pi$ band, so maybe you are reconstructing the bytes incorrectly upon receipt. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-12-10T17:04:22.050" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8652" PostTypeId="2" ParentId="4885" CreationDate="2015-12-11T00:44:44.460" Score="0" Body="&lt;p&gt;To control the UAV Quadrotor, you can use &lt;a href=&quot;http://wiki.ros.org/mavros&quot; rel=&quot;nofollow&quot;&gt;MAVROS&lt;/a&gt; y you have any autopilot which support &lt;a href=&quot;https://en.wikipedia.org/wiki/MAVLink&quot; rel=&quot;nofollow&quot;&gt;MAVLink&lt;/a&gt; protocol (i.e AR. parrot, navio+, etc). I'm working to control the uav in a simulatior in mavproxy and now I can takeoff, arming, change mode and move it, the issue I found is rotation on yaw angle. I hope this help you.&lt;/p&gt;&#xA;" OwnerUserId="11306" LastEditorUserId="37" LastEditDate="2015-12-11T14:36:53.910" LastActivityDate="2015-12-11T14:36:53.910" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8654" PostTypeId="1" AcceptedAnswerId="8656" CreationDate="2015-12-11T03:22:28.620" Score="0" ViewCount="836" Body="&lt;p&gt;My professor gave us an assignment in which we have to find the cubic equation for a 3-DOF manipulator. The end effector is resting at A(1.5,1.5,1) and moves and stops at B(1,1,2) in 10 seconds. How would I go about this? Would I use the Jacobian matrix or would I use path planning and the coefficient matrix to solve my problem. I'm assuming coefficient matrix but I am not given the original position in angle form. I was only taught how to use path planing when the original angles are given.&lt;/p&gt;&#xA;" OwnerUserId="11308" LastActivityDate="2015-12-14T08:56:40.863" Title="Finding cubic polynomial equation for 3 joints" Tags="&lt;motion-planning&gt;&lt;inverse-kinematics&gt;&lt;motion&gt;&lt;jacobian&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="8656" PostTypeId="2" ParentId="8654" CreationDate="2015-12-11T07:35:06.580" Score="2" Body="&lt;p&gt;I guess you want to find a cubic polynomial for the end effector. You have 3 coordinates for your points A and B, from your question is not clear if they are $x,y,z$ or $x,y,\theta$. Anyway, I'll show here the procedure for $x$, and you can repeat it for the other two coordinates.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given the cubic parametric form $x = a_0+a_1 t + a_2 t^2 + a_3 t^3$ ($*$), you want to find the parameters $a_i$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;At $t=0$ you know that $x = 1.5$, so from ($*$) $a_0 = 1.5$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At $t=10$ you know that $x = 1$, so from ($*$) $a_0+10a_1 + 100a_2 + 1000a_3 = 1$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's differentiate the polynomial: $\dot{x} = a_1 + 2a_2 t + 3a_3 t^2$ ($**$).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At $t=0$ you know that $\dot{x} = 0$ (rest condition), so from ($**$) $a_1 = 0$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At $t=10$ you know that $\dot{x} = 0$ (stop condition), so from ($**$) $a_1 + 20a_2 + 300a_3 = 0$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you have:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$a_0 = 1.5$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$a_1 = 0$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$a_0+10a_1 + 100a_2 + 1000a_3 = 1 \Rightarrow 1.5 + 100a_2 + 1000a_3 = 1$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$a_1 + 20a_2 + 300a_3 = 0 \Rightarrow 20a_2 + 300a_3 = 0$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the last equation you get $a_2 = -15a_3$, substituting in the second last you get $a_3 = 0.001$, and substituting $a_3$ back you get $a_2 = -0.015$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you have all the $a_i$ coefficients to replace in $(*)$ and you can get the solution $x(t) = 1.5 - 0.015t^2 + 0.001t^3$. You can do the same for the other 2 coordinates changing the initial and final conditions.&lt;/p&gt;&#xA;" OwnerUserId="10782" LastEditorUserId="10782" LastEditDate="2015-12-14T08:56:40.863" LastActivityDate="2015-12-14T08:56:40.863" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8657" PostTypeId="1" AcceptedAnswerId="8660" CreationDate="2015-12-11T10:15:07.393" Score="2" ViewCount="364" Body="&lt;p&gt;Good day,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am currently working on a project using Complementary filter for Sensor fusion and PID algorithm for motor control. I viewed a lot of videos in youtube as well as consulted various blogs and papers with what to expect with setting the P gain to high or too low.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P Gain too low&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;easy over correction and easy to turn by hand&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;P Gain too high&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;oscillates rapidly&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I have a sample video of what I think a high P gain (3 in my case) looks like. Do this look like the P gain is too high?  &lt;a href=&quot;https://youtu.be/8rBqkcmVS1k&quot; rel=&quot;nofollow&quot;&gt;https://youtu.be/8rBqkcmVS1k&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the video:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I noticed that the quad sometimes corrects its orientation immediately after turning few degrees (4-5 deg). However, it does not do so in a consitent manner.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It also overcorrects.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason behind my doubt is because the quadcopter doesn't react immediately to changes. I checked the complementary filter. It updates (fast) the filtered angle reading from sudden angular acceleration from the gyro as well as updates the long term filtered angle changes from the accelerometer (albeit slowly). If I am right, is the the P gain is responsible for compensating the &quot;delay&quot;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The formula I used in the complementary filter is the following:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;float alpha = 0.98;&#xA;float pitchAngleCF=(alpha)*pitchAngleCF+gyroAngleVelocityArray.Pitch*deltaTime)+(1-alpha)*(accelAngleArray.Pitch);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Here is a video for a P gain of 1: &lt;a href=&quot;https://youtu.be/rSBrwULKun4&quot; rel=&quot;nofollow&quot;&gt;https://youtu.be/rSBrwULKun4&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your help would be very appreciated :)&lt;/p&gt;&#xA;" OwnerUserId="11311" LastActivityDate="2016-01-10T15:05:21.873" Title="P gain tuning for quadcopter (Is my perception for a P-gain too high correct?)" Tags="&lt;quadcopter&gt;&lt;pid&gt;&lt;sensor-fusion&gt;&lt;tuning&gt;&lt;filter&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8660" PostTypeId="2" ParentId="8657" CreationDate="2015-12-11T12:38:01.173" Score="1" Body="&lt;p&gt;:EDIT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've edited out most of the content I had previously written because your code &lt;em&gt;does&lt;/em&gt; work (except for the mis-matched parenthesis), but it threw me off because this is not really a complimentary filter. You have a hodge-podge here that is confusing to look at initially.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First you have a &lt;a href=&quot;http://my.execpc.com/~steidl/robotics/first_order_lag_filter.html&quot; rel=&quot;nofollow&quot;&gt;lag filter&lt;/a&gt; on the accelerometer output:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;alpha = 0.98;&#xA;filteredAccelerometer = alpha*filteredAccelerometer + (1-alpha)*rawAccelerometer;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then, instead of doing proper numeric integration on the gyro, which would look something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;gyroAngle = gyroAngle + gyroAngleVelocityArray.Pitch*deltaTime;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You instead are substituting in the filtered accelerometer measurement as the &quot;accumulated&quot; angle:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;gyroAngle = filteredAccelerometer + gyroAngleVelocityArray.Pitch*deltaTime;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and you are calling all of this a &quot;complimentary filter&quot;, such that:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;pitchAngleCF = alpha*pitchAngleCF + (1-alpha)*angleAccelArray.Pitch + gyroAngleVelocityArray.Pitch*deltaTime;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;However, this isn't really a complimentary filter because there's &quot;option&quot; or &quot;setting&quot; to blend the gyro and accelerometer outputs. I would suggest converting both sensors to a common unit (degres, for instance), then using the complimentary filter to combine the two measurements, then filter &lt;em&gt;that&lt;/em&gt; if you find that anything needs filtering. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, following your schema:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;accelVelocityArray.Pitch = accelVelocityArray.Pitch + accelAccelArray.Pitch*deltaTime;&#xA;accelAngleArray.Pitch = accelAngleArray.Pitch + accelVelocityArray.Pitch*deltaTime;&#xA;&#xA;gyroAngleArray.Pitch = gryoVelocityArray.Pitch*deltaTime;&#xA;&#xA;alpha = 0.95;&#xA;pitchCF = alpha*gyroAngleArray.Pitch + (1-alpha)*accelAngleArray.Pitch;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;THIS&lt;/em&gt; is the output of a complimentary filter. Now if you find that your craft is not responsive enough you can increase &lt;code&gt;alpha&lt;/code&gt; (take more of the reading from the gyro), or if you find that there is too much drift you can decrease &lt;code&gt;alpha&lt;/code&gt; (take more of the reading from the accelerometer). If you find that the reading is too noisy, then you can put this through a &lt;em&gt;lag filter&lt;/em&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;beta = 0.9;&#xA;filteredPitch = beta*pitchCF + (1-beta)*filteredPitch;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;NOW you adjust &lt;code&gt;beta&lt;/code&gt; to determine how smooth you want the &lt;em&gt;combined&lt;/em&gt; pitch reading to be. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope this clarifies things for you. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, regarding your actual question, I don't think it's possible to give a quality answer with the (lack of) data you have provided. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is true that, for a real system with inertia, if you set the proportional gain too high the system will oscillate. However, it is not clear if you are only using a proportional gain (if you have kI and kD set to zero). Also, because the craft is tethered and you are holding it, it's not clear if the craft is responding to its own controller or if it's responding to the external forces (you and the tether).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm also not sure how stable your control loop timing is and/or how you are determining what &lt;code&gt;deltaTime&lt;/code&gt; should be. If you're interested in manual tuning of a PID controller, &lt;strong&gt;first be sure that you are processing your sensor output correctly&lt;/strong&gt; (see my above comments regarding sensor fusion and filtering), then give the &lt;a href=&quot;https://en.wikipedia.org/wiki/Ziegler%E2%80%93Nichols_method&quot; rel=&quot;nofollow&quot;&gt;Ziegler-Nichols tuning method&lt;/a&gt; a try:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Set kP, kI, and kD to zero.&lt;/li&gt;&#xA;&lt;li&gt;Increase kP until the system achieves consistent oscillations.&lt;/li&gt;&#xA;&lt;li&gt;Record kP (as the &quot;ultimate&quot; gain, kU), and the oscillation period. &lt;/li&gt;&#xA;&lt;li&gt;Set kP, kI, and kD to values based on the ultimate gain and oscillation period. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2015-12-11T15:00:14.960" LastActivityDate="2015-12-11T15:00:14.960" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8661" PostTypeId="1" AcceptedAnswerId="8664" CreationDate="2015-12-11T14:58:24.993" Score="5" ViewCount="249" Body="&lt;p&gt;I have a 2DOF robot with 2 revolute joints, as shown in the diagram below. I'm trying to calculate (using MATLAB) the torque required to move it but my answers don't match up with what I'm expecting.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/K7K0t.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/K7K0t.png&quot; alt=&quot;Robot configuration&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Denavit-Hartenberg parameters:&#xA;$$&#xA;\begin{array}{c|cccc}&#xA;joint &amp;amp; a &amp;amp; \alpha &amp;amp; d &amp;amp; \theta \\&#xA;\hline&#xA;1 &amp;amp; 0 &amp;amp; \pi/2 &amp;amp; 0 &amp;amp; \theta_1 \\&#xA;2 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; \theta_2 \\&#xA;\end{array}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm trying to calculate the torques required to produce a given acceleration, using the Euler-Lagrange techniques as described on pages 5/6 in &lt;a href=&quot;http://www.worldacademicunion.com/journal/1746-7233WJMS/wjmsvol05no01paper02.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this paper&lt;/a&gt;.&#xA;Particularly,&#xA;$$ T_i(inertial) = \sum_{j=0}^nD_{ij}\ddot q_i$$&#xA;where&#xA;$$ D_{ij} = \sum_{p=max(i,j)}^n Trace(U_{pj}J_pU_{pi}^T) $$&#xA;and&#xA;$$ &#xA;J_i = \begin{bmatrix}&#xA;{(-I_{xx}+I_{yy}+I_{zz}) \over 2} &amp;amp; I_{xy} &amp;amp; I_{xz} &amp;amp; m_i\bar x_i \\&#xA;I_{xy} &amp;amp; {(I_{xx}-I_{yy}+I_{zz}) \over 2} &amp;amp; I_{yz} &amp;amp; m_i\bar y_i \\&#xA;I_{xz} &amp;amp; I_{yz} &amp;amp; {(I_{xx}+I_{yy}-I_{zz}) \over 2} &amp;amp; m_i\bar z_i \\&#xA; m_i\bar x_i &amp;amp; m_i\bar y_i &amp;amp; m_i\bar z_i &amp;amp; m_i \end{bmatrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I was having trouble I've tried to create the simplest example that I'm still getting wrong. For this I'm attempting to calculate the inertial torque required to accelerate $\theta_1$ at a constant 1 ${rad\over s^2}$. As $\theta_2$ is constant at 0, I believe this should remove any gyroscopic/Coriolis forces. I've made link 1 weightless so its pseudo-inertia matrix is 0. I've calculated my pseudo-inertia matrix for link 2:&#xA;$$&#xA;I_{xx} = {mr^2 \over 2} = 0.0025\\ I_{yy} = I_{zz} = {ml^2 \over 3} = 2/3&#xA;$$&#xA;$$&#xA;J_2 =\begin{bmatrix}&#xA;1.3308 &amp;amp; 0 &amp;amp; 0 &amp;amp; -1 \\&#xA;0 &amp;amp; 0.0025 &amp;amp; 0 &amp;amp; 0 \\&#xA;0 &amp;amp; 0 &amp;amp; 0.0025 &amp;amp; 0 \\&#xA;-1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 2 \\&#xA;\end{bmatrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My expected torque for joint 1:&#xA;$$ &#xA;T_1 = I\ddot \omega \\&#xA;T_1 = {ml^2 \over 3} \times \ddot \omega \\&#xA;T_1 = {2\times1\over3}\times1 \\&#xA;T_1= {2\over3}Nm&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The torque calculated by my code for joint 1:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;q = [0 0];&#xA;qdd = [1 0];&#xA;T = calcT(q);&#xA;calc_inertial_torque(1, T, J, qdd) &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;T_1={4\over3}Nm&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;So this is my problem&lt;/strong&gt;, my code $T_1$ doesn't match up with my simple mechanics $T_1$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The key functions called are shown below.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;function inertial_torque_n = calc_inertial_torque(n, T, J, qdd)&#xA;    inertial_torque_n = 0;&#xA;    for j = 1:2&#xA;        Mnj = 0;&#xA;        joint_accel = qdd(j);&#xA;        for i = 1:2&#xA;            Uij = calcUij(T, i, j);&#xA;            Ji = J(:,:,i);&#xA;            Uin = calcUij(T, i, n);&#xA;            Mnj = Mnj + trace(Uin*Ji*transpose(Uij));&#xA;        end&#xA;        inertial_torque_n = inertial_torque_n + Mnj * joint_accel;&#xA;    end&#xA;end&#xA;&#xA;function U=calcUij(T,i,j)  &#xA;    T(:,:,j) = derivative(T(:,:,j));&#xA;&#xA;    U = eye(4,4); &#xA;    for x = 1:i&#xA;        U = U*T(:,:,x);&#xA;    end&#xA;end&#xA;&#xA;function T = derivative(T)&#xA;    dt_by_dtheta = [0 -1  0  0&#xA;                    1  0  0  0&#xA;                    0  0  0  0&#xA;                    0  0  0  0];&#xA;&#xA;    T = dt_by_dtheta*T;&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I realise this is a fairly simple robot, and a complicated process - but I'm hoping to scale it up to more DOF once I'm happy it works. &lt;/p&gt;&#xA;" OwnerUserId="11305" LastEditorUserId="11305" LastEditDate="2015-12-11T23:58:59.113" LastActivityDate="2015-12-12T01:44:32.133" Title="Calculating required torques for a given trajectory using Lagrange-Euler" Tags="&lt;dynamics&gt;&lt;matlab&gt;&lt;torque&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8664" PostTypeId="2" ParentId="8661" CreationDate="2015-12-11T22:58:31.250" Score="1" Body="&lt;p&gt;You don't have axes shown, so the math is a little hard to follow, but based on the bottom row of $ J_2$ it looks like y is along the length of link 2. If this is the case, then I would expect rotation and x and z to have the same moment of inertia, because each would be rotating the cylinder about the end instead about its longitudinal axis. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This means that Ixx and Izz should cancel where their signs are different, as in J11 and J33, leaving only Iyy/2, but instead of that I see zeros as the entries there. As this is (a model of) a real link,  Iyy must be something; I would assume $ mr^2/2$, or 0.0025. This should be in J11 and J33. I haven't checked your math on J22, but given that Iyy doesn't cancel out there and you end give a very &quot;round&quot; 2/3 as an answer I suspect it is incorrect as well. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Check your math on your J2 matrix and/or provide drawings of link 2 with a set of datums (dati?) (side note: the plural of datum is data, but I think it would be confusing to ask for &quot;drawings with a set of data&quot; when I mean graphical reference points, so I'll leave it as datums) I think this is where your problem lies. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2015-12-12T01:44:32.133" LastActivityDate="2015-12-12T01:44:32.133" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="8665" PostTypeId="1" CreationDate="2015-12-13T09:28:14.537" Score="1" ViewCount="547" Body="&lt;p&gt;I am making a white line follower. I am using an &lt;a href=&quot;http://www.ebay.com/itm/TCRT5000-IR-reflex-sensors-Obstacle-avoidance-modules-tracing-sensor-module-/171344744992?hash=item27e4f15220:g:flgAAOxyB0VRw8n-&quot; rel=&quot;nofollow&quot;&gt;IR sensor module&lt;/a&gt; based on &lt;a href=&quot;http://www.vishay.com/docs/83760/tcrt5000.pdf&quot; rel=&quot;nofollow&quot;&gt;TCRT5000&lt;/a&gt;. I am directly taking the 8bit ADC reading from Arduino Uno and printing the values on serial monitor. I observe that the values for white are around 25-35, which is ok. The problem arises when I try detecting an Orange (158C) surface. The sensor gives me values very close to that of white which is around 25-40. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can use a &lt;a href=&quot;http://www.ebay.com/itm/TCS230-TCS3200-Color-Recognition-Sensor-Detector-Module-3V-5V-For-MCU-Arduino-/131189365488?hash=item1e8b7edaf0:g:xjQAAOSwnDxUcwFf&quot; rel=&quot;nofollow&quot;&gt;color sensor&lt;/a&gt; but they are bulky and I am not sure how I can get readings faster with them since they take a finite time for sampling 'R','G' and 'B' pulses. Can someone please tell me an alternate approach to detecting the colours or any other possible solution to my problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: I would like to add that the line I wish to follow is 3cm in width. Hence I plan to use three sensors. Two just outside the line on either sides and one exactly at the centre. The sampling frequency of Arduino UNO is around 125KHz. Sampling IR is not an issue because it is quick but using a color sensor takes a lot of time.&lt;/p&gt;&#xA;" OwnerUserId="11147" LastEditorUserId="11147" LastEditDate="2015-12-14T05:57:04.323" LastActivityDate="2015-12-14T05:57:04.323" Title="Color sensor alternatives" Tags="&lt;sensors&gt;&lt;line-following&gt;" AnswerCount="1" CommentCount="4" ClosedDate="2015-12-14T11:02:58.790" ContentLicense="CC BY-SA 3.0" />
  <row Id="8667" PostTypeId="1" CreationDate="2015-12-13T11:33:51.740" Score="1" ViewCount="181" Body="&lt;p&gt;I am trying resolve some issues i am having with some inverse kinematics. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;the robot arm i am using has a camera at the end of it, at which an object is being tracked. I can from the the camera frame retrieve a position, relative to that that frame but how do i convert that position in that frame, to an robot state, that set all the joint in a manner that  the camera keep the object at the center of the frame?...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;-- My approach --&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;From my image analysis i retrieve a position of where the object i am tracking is positioned =&gt; (x,y) - coordinate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know at all the time the position (a) of the end tool by the T_base^tool - matrix, and from the image analysis i know the position (b) of the object relative to the camera frame for which i compute the difference as such c = b - a. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I then compute the image jacobian, given the C, the distance to the object and the focal length of the camera. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So... thats where i am at the moment.. I am not sure whether the position change retrieved from the cam frame will be seen as position of the tool point, at which  the equation will become un undetermined as the length of the state vector would become 7 instead of 6.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The equation that i have must be &#xA;$$J_{image}(q)dq = dp$$&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;J_image(q)[2x6]: being the image jacobian of the robot at current&#xA;state q &lt;/li&gt;&#xA;&lt;li&gt;dq[6x1]: wanted change in q-state &lt;/li&gt;&#xA;&lt;li&gt;dp[2x1]: computed positional change...&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Solution would be found using linear least square.. &#xA;but what i don't get is why the robot itself is not appearing the equation, which let me doubt my approach.. &lt;/p&gt;&#xA;" OwnerUserId="9620" LastEditorUserId="9620" LastEditDate="2015-12-14T07:32:37.547" LastActivityDate="2015-12-15T14:48:05.830" Title="Visual servoing - tracking a point" Tags="&lt;inverse-kinematics&gt;&lt;visual-servoing&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8668" PostTypeId="2" ParentId="8665" CreationDate="2015-12-13T16:07:58.533" Score="2" Body="&lt;p&gt;With computer-based vision, the solution often depends greatly on the environment in which the camera is operating.  You may have situations where bright light and shadows result in a very difficult sensing scenario.  Or you may have aspects of your targets which affect the light characteristics (diffusing, polarizing, etc.).  So the solution may not be easy to determine without knowing more about the environment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the issue you describe, I would first be certain of your measurements.  It doesn't make sense that some of your sensed values for orange are higher than you are getting for white - unless there is an additional difference besides the color difference.  Also, verify that orange is the only surface that gives you readings that come close to the white readings - ideally you would want the very lowest reading for white to be more than the very highest reading for any other color, plus a margin for error (such as measurement noise).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you find that orange is indeed the only color that interferes with detection of white, you can use an optical filter that absorbs the orange spectrum but passes the other optical frequencies.  You can find them at Edmund Scientific, Kodak, Schott, and the like.  You can also find optical filters at many camera stores.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you also find that there are other factors in play (I'm thinking about why the orange reading is higher than some of the white readings), you might be able to apply polarizers to defeat some of the specular returns from orange.  This would need to be designed carefully, since there are many types of polarizers that could be applied, depending on the reflected light characteristics.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2015-12-13T16:07:58.533" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8669" PostTypeId="2" ParentId="8667" CreationDate="2015-12-13T16:32:45.363" Score="1" Body="&lt;p&gt;For a 6 degree of freedom manipulator there are an infinite number of (positions + orientations) which will keep a point object centered in the frame. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you determine the position of the object relative to the camera frame, is it allowable to ignore orientation changes and move the camera (keeping its current orientation) to track the object?  Or alternately, could you keep the origin of the camera frame constant and use rotations only to track the object?  You could do either of these given the object location relative to the camera frame through the inverse kinematics computations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may consider including in your image analysis algorithm the computation of the object's position AND orientation relative to the camera frame.  Then you will have a countable number of possible inverse kinematic solutions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you determine which method (above) you are going to use, the inverse kinematics can be position-based, or velocity-based.  For small relative motions like I think you're describing, I would use velocity control to keep the object centered.  This involves computing the Jacobian matrix, and using it to set joint speeds to move the camera in the desired direction.  The concept is simple: it is a mapping of $$\dot{ \vec x} = J \dot{ \vec q}$$&#xA;where $\vec q$ is your vector of joint angles, and $\vec x$ is your vector of Cartesian positions and orientations.   However, the terms in $J$ can be rather complicated.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So your solution, using velocity control, requires you to determine the desired &lt;em&gt;change&lt;/em&gt; in camera position/orientation, which is then applied to the equation above to compute the required &lt;em&gt;changes&lt;/em&gt; in joint position.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2015-12-13T16:32:45.363" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8670" PostTypeId="1" CreationDate="2015-12-13T18:13:46.730" Score="0" ViewCount="225" Body="&lt;p&gt;I have started working on robotic manipulators and got into a project which deals with control of robotic manipulator using artificial neural networks (solution of inverse kinematics and trajectory generation, to be precise!).&#xA;Can someone please suggest me where to start as I have no prior knowledge about robotic manipulator and ANN and how to code them?&lt;/p&gt;&#xA;" OwnerUserId="11336" LastActivityDate="2015-12-14T09:23:44.653" Title="Robotic Manipulator" Tags="&lt;arduino&gt;&lt;robotic-arm&gt;&lt;inverse-kinematics&gt;&lt;machine-learning&gt;" AnswerCount="1" CommentCount="3" ClosedDate="2015-12-14T11:00:12.377" ContentLicense="CC BY-SA 3.0" />
  <row Id="8671" PostTypeId="1" CreationDate="2015-12-13T20:02:39.900" Score="1" ViewCount="34" Body="&lt;p&gt;A couple years ago RoboCup competitions seems to be quite vivant issue. Now when I'm looking for some info about it, it seems to be some kind of insignificant but this may be only my first impression (I was looking for 2D simulator league and it seems that it does not even exist anymore).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So is RoboCup still alive and significant robotic issue?&lt;/p&gt;&#xA;" OwnerUserId="2663" LastActivityDate="2015-12-13T20:02:39.900" Title="Is RoboCup still vivant and significant robotic issue?" Tags="&lt;soccer&gt;" AnswerCount="0" CommentCount="2" ClosedDate="2015-12-14T11:01:11.440" ContentLicense="CC BY-SA 3.0" />
  <row Id="8672" PostTypeId="2" ParentId="8319" CreationDate="2015-12-13T22:31:02.650" Score="1" Body="&lt;p&gt;One of the options is to utilize  the &lt;a href=&quot;https://en.wikipedia.org/wiki/Exponential_smoothing&quot; rel=&quot;nofollow noreferrer&quot;&gt;exponential moving average&lt;/a&gt;. The below picture shows data corrupted by Gaussian noise with zero mean and 0.4 variance and how the filter does a good job to remove the spiky noisy data. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/9GApL.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9GApL.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;x = -pi:0.01:2*pi;&#xA;perfectY = cos(x); % generate data &#xA;noisyY = perfectY + .4 * randn(1, length(perfectY)); % corrupt data by noise &#xA;&#xA;a = 0.13; % tuning parameter &#xA;preSmoothY = cos(-pi); % arbitrary initial value &#xA;&#xA;&#xA;for i = 1:length(noisyY)&#xA;    Smooth = (1-a)*preSmoothY + a*noisyY(i);&#xA;    preSmoothY = Smooth;&#xA;    expY(i) = Smooth;&#xA;end&#xA;&#xA;plot( x,noisyY,'g', x, expY,'r', 'LineWidth', 2)&#xA;hold on&#xA;plot(x, perfectY, 'b','LineWidth', 2)&#xA;grid on&#xA;legend('noisy  data', 'filtered  data', 'data')&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Another choice is using Kalman filter. It is an optimal filter if you meet the requirements which means no filter can perform better than the Kalman. Unfortunately, the filter imposes some constraints on the signal such as linearity and Gaussianity. Moreover, the system must be described precisely.   &lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="2155" LastEditDate="2015-12-13T22:41:37.470" LastActivityDate="2015-12-13T22:41:37.470" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8673" PostTypeId="1" CreationDate="2015-12-13T22:54:05.580" Score="0" ViewCount="89" Body="&lt;p&gt;I'm a software developer and I work for a company that I think could use some automation in its warehouse. I thought it would be fun to put together a prototype of a conveyor system that automates a manual sorting process that we do on our warehouses. I'm primarily a .NET developer so I'm wondering if there is an .NET SDK for conveyor automation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any other information on where to start would be helpful but is not my main question here. &lt;/p&gt;&#xA;" OwnerUserId="11338" LastActivityDate="2015-12-14T09:38:59.807" Title="Is there a .NET library for conveyor belt automation?" Tags="&lt;automation&gt;" AnswerCount="1" CommentCount="3" ClosedDate="2015-12-14T11:14:08.640" ContentLicense="CC BY-SA 3.0" />
  <row Id="8678" PostTypeId="2" ParentId="8670" CreationDate="2015-12-14T09:23:44.653" Score="2" Body="&lt;p&gt;If you have no prior experience in robotics, I would recommend one well known book, Craig - Introduction of Robotics: Mechanics and Control. This should explain well the basics of robotic manipulators. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For artificial intelligence (AI), I would recommend Russel, Norvig - Artificial Intelligence, a Modern Approach, although ANNs are not the central topic of the book, it is a very good and well known book on AI in general. It is always good to know what AI is about an what are the problem categories that can be solved with AI and what methods are recommended for the problem types.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are scientific publications dealing explicitly with ANN for Inverse Kinematics,  e.g. this one:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Jha, Panchanand, and B. B. Biswal. &quot;A Neural Network Approach for Inverse Kinematic of a SCARA Manipulator.&quot; IAES International Journal of Robotics and Automation (IJRA) 3.1 (2014): 52-61.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However trajectory generation is somewhat different in nature. I would recommend reading up generally on AI and machine learning to see which method is best suited for which class of problems.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2015-12-14T09:23:44.653" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8679" PostTypeId="2" ParentId="8673" CreationDate="2015-12-14T09:38:59.807" Score="1" Body="&lt;p&gt;Software for industrial automation is somewhat different then &quot;general purpose&quot; software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your software controlling the conveyor belts will have to interact with the conveyor belts. This is through sensors (probably inductive and/or capacitive proximity sensors, maybe mechanical switches, cameras with image processing etc.). The software you write will most likely be reactive to the information coming from the sensors and will act using actuators (electrical pneumatic or maybe hydraulic motors, which stop the line, move a piece from A to B, etc.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The trick is to interface your software to hardware. In industrial automation this is normally done with PLC-s. We can very generally define them as the hardware platfrom of automation for running sofware. The programming of these is done in &lt;a href=&quot;https://en.wikipedia.org/wiki/IEC_61131-3&quot; rel=&quot;nofollow noreferrer&quot;&gt;5 standardized languages&lt;/a&gt;. For porgramming PLC-s in .net I would like to redirect you &lt;a href=&quot;https://stackoverflow.com/questions/3302450/plc-programing-in-c-sharp-net&quot;&gt;here&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it is not a serial product, just an experiment, you might want to take a look at DAQ boards, with .net compatibility like &lt;a href=&quot;http://digital.ni.com/public.nsf/allkb/F0FD13D2DD0C433986256D9C00468D29&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; one. The DAQ board will be your interface to phyisical signals and the software will run on a PC in .NET.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="-1" LastEditDate="2017-05-23T12:37:11.430" LastActivityDate="2015-12-14T09:38:59.807" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8680" PostTypeId="1" AcceptedAnswerId="8681" CreationDate="2015-12-14T12:53:17.020" Score="5" ViewCount="8249" Body="&lt;p&gt;Please help me with the following task. I have MPU 9150 from which I get acceleration/gyro and magnetometer data. What I'm currently interested in is to get the orientation and position of the robot. I can get the position using quaternions. Its quite stable. Rarely changes when staying still.&#xA;But the problem is in converting accelerometer data to calculate the displacement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I know its required to to integrate twice the accel. data to get position.&#xA;Using quaternion I can rotate the vector of acceleration and then sum it's axises to get velocity then do the same again to get position. But it doesn't work that way. First of all moving the sensor to some position and then moving it back doesn't give me the same position as before. The problem is that after I put the sensor back and it stays without any movement the velocity doesn't change to zero though the acceleration data coming from sensors are zeros.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is an example (initially its like this):&#xA;the gravity: -0.10  -0.00   1.00&lt;br&gt;&#xA;raw accel: -785 -28 8135&lt;br&gt;&#xA;accel after scaling to +-g: -0.10   -0.00   0.99&lt;br&gt;&#xA;the result after rotating accel vector using quaternion: 0.00   -0.00   -0.00&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After moving the sensor and putting it back it's acceleration becomes as:&#xA; 0.00   -0.00   -0.01&#xA; 0.00   -0.00   -0.01&#xA; 0.00   -0.00   -0.00&#xA; 0.00   -0.00   -0.01&#xA;and so on.&#xA;If I'm integrating it then I get slowly increasing position of Z.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the worst problem is that the velocity doesn't come back to zero&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example if I move sensor once and put it back the velocity will be at:&#xA;-0.089 for vx and&#xA;0.15 for vy&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After several such movements it becomes:&#xA;-1.22 for vx&#xA;1.08 for vy &#xA;-8.63 for vz&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and after another such movement:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;vx -1.43&#xA;vy 1.23&#xA;vz -9.7&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The x and y doesnt change if sensor is not moving but Z is changing slowly.&#xA;Though the quaternion is not changing at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What should be the correct way to do that task?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the part of code for integrations:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;vX += wX * speed;&#xA;vY += wY * speed;&#xA;vZ += wZ * speed;&#xA;&#xA;posX += vX * speed;&#xA;posY += vY * speed;&#xA;posZ += vZ * speed;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Currently set speed to 1 just to test how it works.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT 1:&lt;/strong&gt; Here is the code to retrieve quaternion and accel data, rotate and compensate gravity and get final accel data.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;        // display initial world-frame acceleration, adjusted to remove gravity&#xA;        // and rotated based on known orientation from quaternion&#xA;        mpu.dmpGetQuaternion(&amp;amp;q, fifoBuffer);&#xA;        mpu.dmpGetAccel(&amp;amp;aaReal, fifoBuffer);&#xA;        mpu.dmpGetGravity(&amp;amp;gravity, &amp;amp;q);&#xA;&#xA;        //Serial.print(&quot;gravity\t&quot;);&#xA;        Serial.print(gravity.x);&#xA;        Serial.print(&quot;\t&quot;);&#xA;        Serial.print(gravity.y);&#xA;        Serial.print(&quot;\t&quot;);&#xA;        Serial.print(gravity.z);&#xA;        Serial.print(&quot;\t&quot;);&#xA;&#xA;&#xA;        //Serial.print(&quot;accell\t&quot;);&#xA;        Serial.print(aaReal.x);&#xA;        Serial.print(&quot;\t&quot;);&#xA;        Serial.print(aaReal.y);&#xA;        Serial.print(&quot;\t&quot;);&#xA;        Serial.print(aaReal.z);&#xA;        Serial.print(&quot;\t&quot;); &#xA;&#xA;        float val = 4.0f;&#xA;        float ax = val * (float)aaReal.x / 32768.0f;&#xA;        float ay = val * (float)aaReal.y / 32768.0f;&#xA;        float az = val * (float)aaReal.z / 32768.0f; &#xA;&#xA;        theWorldF.x = ax;            &#xA;        theWorldF.y = ay;&#xA;        theWorldF.z = az;&#xA;&#xA;        //Serial.print(&quot;scaled_accel\t&quot;);&#xA;        Serial.print(ax);&#xA;        Serial.print(&quot;\t&quot;);&#xA;        Serial.print(ay);&#xA;        Serial.print(&quot;\t&quot;);&#xA;        Serial.print(az);&#xA;        Serial.print(&quot;\t&quot;); &#xA;&#xA;        theWorldF.x -= gravity.x;&#xA;        theWorldF.y -= gravity.y;&#xA;        theWorldF.z -= gravity.z;&#xA;&#xA;        theWorldF.rotate(&amp;amp;q);&#xA;        //gravity.rotate(&amp;amp;q);&#xA;        //Serial.print(&quot;gravity_compensated_accel\t&quot;);&#xA;        Serial.print(theWorldF.x);&#xA;        Serial.print(&quot;\t&quot;);&#xA;        Serial.print(theWorldF.y);&#xA;        Serial.print(&quot;\t&quot;);&#xA;        Serial.print(theWorldF.z);&#xA;        Serial.print(&quot;\t&quot;);&#xA;        Serial.print(deltaTime); &#xA;        Serial.println();&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;EDIT 2:&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;dmpGetQuaternion, dmpGetAccel functions are just reading from the FIFO buffer of MPU. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;dmpGetGravity is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;uint8_t MPU6050::dmpGetGravity(VectorFloat *v, Quaternion *q) {&#xA;    v -&amp;gt; x = 2 * (q -&amp;gt; x*q -&amp;gt; z - q -&amp;gt; w*q -&amp;gt; y);&#xA;    v -&amp;gt; y = 2 * (q -&amp;gt; w*q -&amp;gt; x + q -&amp;gt; y*q -&amp;gt; z);&#xA;    v -&amp;gt; z = q -&amp;gt; w*q -&amp;gt; w - q -&amp;gt; x*q -&amp;gt; x - q -&amp;gt; y*q -&amp;gt; y + q -&amp;gt; z*q -&amp;gt; z;&#xA;    return 0;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT 3:&lt;/strong&gt;&#xA;the library for using MPU 9150:&#xA;&lt;a href=&quot;https://github.com/sparkfun/MPU-9150_Breakout&quot; rel=&quot;nofollow&quot;&gt;https://github.com/sparkfun/MPU-9150_Breakout&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT 4: Another example&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;gravity vector: -1.00   -0.02   0.02&lt;br&gt;&#xA;raw accel data: -8459   -141    125 &#xA;accel data scaled (+-2g range): -1.03   -0.02   0.02&lt;br&gt;&#xA;gravity compensation and rotation of accel data: -0.01  0.00    0.33    &lt;/p&gt;&#xA;" OwnerUserId="11341" LastEditorUserId="11341" LastEditDate="2015-12-18T12:26:45.133" LastActivityDate="2015-12-18T12:26:45.133" Title="calculating position based on accelerometer data" Tags="&lt;accelerometer&gt;&lt;algorithm&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8681" PostTypeId="2" ParentId="8680" CreationDate="2015-12-14T15:46:19.397" Score="5" Body="&lt;p&gt;You're trying to do numeric integration, which takes the form:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\mbox{integrated value } +=\mbox{derivative} * \mbox{elapsed time}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you have instead of &lt;code&gt;elapsed time&lt;/code&gt; is some value called &lt;code&gt;speed&lt;/code&gt;. Try setting up your numeric integration code on an interrupt, where the interrupt timing is what you would use in place of &lt;code&gt;elapsed time&lt;/code&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not sure what method you're using to get from quaternions to the rotated acceleration vector, but I would like to point out that you can't just do numeric integration on quaternions like you can with accelerations or velocities. See &lt;a href=&quot;http://www-users.cs.umn.edu/~trawny/Publications/Quaternions_3D.pdf&quot;&gt;page 11 of this document&lt;/a&gt; for more detail, but briefly, take your gyroscope angular accelerations $\omega_x \omega_y \omega_z$ and the existing quaternion $q(t)$ and calculate the quaternion derivative:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\dot{q}(t) = \frac{1}{2} \left[ \begin{array}{cccc}&#xA;0 &amp;amp; \omega_z &amp;amp; -\omega_y &amp;amp; \omega_x \\&#xA;-\omega_z &amp;amp; 0 &amp;amp; \omega_x &amp;amp; \omega_y \\&#xA;\omega_y &amp;amp; -\omega_x &amp;amp; 0 &amp;amp; \omega_z \\&#xA;-\omega_x &amp;amp; -\omega_y &amp;amp; -\omega_z &amp;amp; 0 \end{array} \right] q(t)&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then you numerically integrate &lt;em&gt;that&lt;/em&gt;, such that, for a discrete system,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;q_k = q_{k-1} + \dot{q}_k * dT&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You do not provide any code on how you're updating your acceleration vector, no code on how you're getting a quaternion, etc., so it's not possible to give you any more specific feedback than this.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-12-14T15:46:19.397" CommentCount="13" ContentLicense="CC BY-SA 3.0" />
  <row Id="8682" PostTypeId="2" ParentId="8667" CreationDate="2015-12-14T17:21:02.627" Score="2" Body="&lt;p&gt;I think you took a wrong turn in your approach.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I know at all the time the position (a) of the end tool by the T_base^tool - matrix, and from the image analysis i know the position (b) of the object relative to the camera frame for which i compute the difference as such c = b - a.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You don't care about position (a).  You care about the position in the center of the camera frame, which you can think of as an &lt;em&gt;imaginary&lt;/em&gt; end tool.  Let's call it position (i).  Just like your real end tool, this point will always occupy the same spot in the camera frame (which happens to be the center, in this case).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, given position (b) and position (i), you can compute the distance between the two points.  Your state vector will be 6 points -- replace the data for the &quot;real&quot; tool with the data for the &quot;imaginary&quot; tool in your inverse kinematics equation.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2015-12-15T14:48:05.830" LastActivityDate="2015-12-15T14:48:05.830" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8684" PostTypeId="1" AcceptedAnswerId="8685" CreationDate="2015-12-15T06:43:42.397" Score="0" ViewCount="44" Body="&lt;p&gt;I am thinking of a project proposal for my robotics course and we are required to make one that has a potential application on physical therapy or medical fields. One thing that came across my mind is a motorized wheelchair that moves when a stress ball control is squeezed by the user. As a robotics novice, I wonder if I could integrate a sensor circuit with a rubber ball so that when it is pressed, perhaps by a stroke patient, it triggers some driver circuit. is this possible? if so, how? My experience with robotics is limited to arduino, servo motors and basic sensors.&lt;/p&gt;&#xA;" OwnerUserId="11334" LastActivityDate="2015-12-15T19:54:14.680" Title="Is there a way to use a stress-ball-like device as acceleration control interface" Tags="&lt;wheeled-robot&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8685" PostTypeId="2" ParentId="8684" CreationDate="2015-12-15T07:10:36.760" Score="0" Body="&lt;p&gt;You could try to insert a piezo-element into the stress ball, or coat a piezo element with rubber, which can be squeezed by the user.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This element will give a voltage peak on the on- and off ramps of the squeezing. You can find the proper schematics for the electronics online. Now you just need to detect this pulse with a computer system (possibly an arduino) and off you go.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this what you mean?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: I am no expert on which element to use, but try to find one with the right output voltage for your detection element. Since they are passive elements, most of them are fairly cheap and robust.&lt;/p&gt;&#xA;" OwnerUserId="11185" LastEditorUserId="11185" LastEditDate="2015-12-15T07:17:18.500" LastActivityDate="2015-12-15T07:17:18.500" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8686" PostTypeId="1" CreationDate="2015-12-15T11:54:48.933" Score="1" ViewCount="122" Body="&lt;p&gt;This is from the icreate 2's document:&#xA;&quot;Pins 1 and 2 (Vpwr) are connected to the Roomba battery through a 200 mA PTC resettable fuse. The continuous draw from these two pins together should not exceed 200 mA. Do not draw more than 500 mA peak from these pins, or the fuse will reset.&quot;&#xA;My project just need to draw a bit more than that number. So is there anyway to disable - short circuit - that fuse or replace that fuse with a bigger one? where does that fuse reside on the bot's circuit board?&#xA;If the above 2 is not possible (because the fuse is embedded inside some chip or too difficult to access for example), is it safe to run a small wire from the battery pole to the pin to by pass that fuse?&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I know I can run a wire directly from battery pole to my circuit or draw power from the motor wires, but I love running through the serial port with keep things simple.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="10972" LastEditorUserId="10972" LastEditDate="2015-12-15T12:08:04.580" LastActivityDate="2015-12-15T12:08:04.580" Title="increase current draw from serial port of icreate 2" Tags="&lt;power&gt;&lt;irobot-create&gt;&lt;serial&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8688" PostTypeId="2" ParentId="8684" CreationDate="2015-12-15T19:54:14.680" Score="3" Body="&lt;p&gt;Barometers are cheap, easy to use, and very sensitive.  They can be placed inside a sealed rubber ball and detect changes in pressure.  See for example these sensors: &lt;a href=&quot;http://www.takktile.com/&quot; rel=&quot;nofollow&quot;&gt;www.takktile.com&lt;/a&gt;.  (The makers of these sensors encase them in rubber, which you may or may not want to do).&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-12-15T19:54:14.680" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8689" PostTypeId="1" CreationDate="2015-12-16T05:53:01.777" Score="2" ViewCount="1800" Body="&lt;p&gt;If I build my quadcopter with the following components, will it take off vertically smoothly?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Frame: F450 glass fiber and polyamide nylon [280g]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Landing Gear: High Landing Gear for F450 [90g]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Battery: 3000mAh 20C (30C burst) 3s/1p [260g]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://robu.in/shop/a2212-1400kv-brushless-motor-30a-esc-1045-propeller-set/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Motor&lt;/a&gt;: XXD A2212 1400KV brushless outrunner motor [4x50g]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ESC: 30A (40A burst) Brushless with BEC - 2A/5V [4x25g]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Prop: 1045 Propeller set&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Assume that the total weight of the quad is ~1.1Kg and I would like to have payload upto 400g, making the quad weigh ~1.5Kg&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;From all that I've learnt, the Thrust:Weight ratio should never fall below 1.7:1 (and a 2:1 is recommended to have better control) which if does creates problems in lifting my quad vertically smoothly. I'm neither planning to have very high maneuverability nor cruise the sky pushing my quad's limits. I just want it to fly.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Here's the motors pull(g)-amps(A)-voltage(V)-power(W)-specificThrust(g/W) information for A2212 1400kv with 10 x 4.5 Props&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/d1KqE.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/d1KqE.jpg&quot; alt=&quot;Motor thrust-amps-power information&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since my battery's discharge rate is limited to 20C, if I'm not wrong, it can give out only 60A (since its 3000mAh) for the entire circuit with four motors, each of which can take 15A max, which from the above table would produce ~600g thrust, which is 2400g from all four motors.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Does this mean I can get 1.6:1 Thrust:Weight at 100% throttle? Can my quad still take off vertically smoothly?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I'm also confused about the efficacy of my motor, meaning if I buy a bigger motor, can get more than 600g thrust at 15A/11.1V with same/bigger props? If not, is this the most efficient combination of motor and prop? &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If yes, what is the maximum thrust (practical pulling force in g, not in N) I can get outta 15A/11.1V? Which equation tells defines that exact relation, provided I fly my quad at usual conditions (1013hPa/25degC extTemp/80%-90% relHumidity/max15mAlti)?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;PS: I tried ecalc, Prop Power Thrust and Efficiency Calculations, and a few other online stuff.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: Will replacing the 3000mAh-20c/30c battery with the 5000mAh-20c/30c 3s1p keeping everything same solve some problems and increase the flight time, provided I keep everything else the same?&lt;/p&gt;&#xA;" OwnerUserId="11281" LastEditorUserId="11281" LastEditDate="2015-12-17T08:01:31.677" LastActivityDate="2015-12-21T15:26:56.710" Title="How do I if know my quad is powerful enough to take off vertically smoothly and how do I calculate max Thrust(g) for given current(A) and voltage(V)?" Tags="&lt;quadcopter&gt;&lt;brushless-motor&gt;&lt;battery&gt;&lt;lithium-polymer&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8693" PostTypeId="1" AcceptedAnswerId="8695" CreationDate="2015-12-16T18:42:50.910" Score="2" ViewCount="6033" Body="&lt;p&gt;I am using a differential wheel robot for my project. I need to know the current coordinates of the robot with respect to it's initial position taken as the origin. I m doing the computation on an Arduino UNO and the only sensory input that I get is from the two encoders. I have the function updateOdomenty() called in the loop() and this is it's corresponding code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void updateOdometry()&#xA;{&#xA;&#xA;  static int encoderRPosPrev = 0;&#xA;  static int encoderLPosPrev = 0;&#xA;&#xA;&#xA;  float SR = distancePerCount * (encoderRPos - encoderRPosPrev);&#xA;  float SL = distancePerCount * (encoderLPos - encoderLPosPrev);&#xA;&#xA;  encoderRPosPrev = encoderRPos;&#xA;  encoderLPosPrev = encoderLPos;&#xA;&#xA;&#xA;  x += SR * cos(theta);           &#xA;  y += SL * sin(theta);&#xA;  theta += (SR - SL) / wheelDistance;&#xA;&#xA;  if(theta &amp;gt; 6.28)&#xA;    theta -= 6.28;&#xA;  else if(theta &amp;lt; -6.28)&#xA;    theta += 6.28;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This is the code that me and my team mates made after reading &lt;a href=&quot;http://rossum.sourceforge.net/papers/DiffSteer/&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt; paper. I am wondering if this is the best possible way to solve this problem with an Arduino. If not, how is odometry done in differential wheeled systems?&lt;/p&gt;&#xA;" OwnerUserId="8981" LastActivityDate="2015-12-17T01:24:02.990" Title="How to perform odometry on an arduino for a differential wheeled robot?" Tags="&lt;arduino&gt;&lt;kinematics&gt;&lt;odometry&gt;&lt;differential-drive&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8694" PostTypeId="2" ParentId="8229" CreationDate="2015-12-16T19:14:45.620" Score="1" Body="&lt;p&gt;Yes, I doubt you will be able to do much inverse kinematics on an Arduino.  You will probably want a 32 bit processor that can handle floating point math a little easier.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As JJM pointed out, depending on what you are doing, you might not need IK.  Nevertheless, for a fast IK library, check out &lt;a href=&quot;http://openrave.org/docs/latest_stable/openravepy/ikfast/#ikfast-compiler&quot; rel=&quot;nofollow&quot;&gt;ikfast&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-12-16T19:14:45.620" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8695" PostTypeId="2" ParentId="8693" CreationDate="2015-12-16T20:00:37.150" Score="3" Body="&lt;p&gt;I would add a few lines after you check that theta is between +/- 2pi:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;meanDistance = (SL + SR)/2;&#xA;posX = posX + meanDistance*cos (theta);&#xA;posY = posY + meanDistance*sin(theta);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This of course assumes theta is positive CCW starting from the +x-axis.  This is similar but not the same as your code for X and Y, but your code appears to put the X origin on the right wheel and Y origin on the left, and I'm not sure why you would do that. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additionally, your code for theta uses a small angle sine approximation, sin(theta) = theta = dy/dL. You could use a true asin for this instead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Otherwise, taking my comments above into account, this is how I would do differential-drive dead reckoning. Your next, least-expensive upgrade would be a compass or magnetometer, but that would probably come with a decent IMU, which would be your second upgrade, with GPS being the last. But, as I said, if all you need is dead reckoning, you've basically got it. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2015-12-17T01:24:02.990" LastActivityDate="2015-12-17T01:24:02.990" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="8696" PostTypeId="2" ParentId="7454" CreationDate="2015-12-17T00:43:47.317" Score="2" Body="&lt;p&gt;To &quot;filter&quot; out gravity is not necessarily the correct terminology. The accelerometer measures all forces acting on it, so when it is stationary the only force is gravity. However, because the accelerometer may not be level, the gravity force might not be directly on the Z-axis (assuming Z axis is representing the vertical). Usually a gyroscope is used along with the accelerometer to level the acceleromter, this way the gravity force can be directly subtracted from the accelerometer readings. &lt;/p&gt;&#xA;" OwnerUserId="11356" LastActivityDate="2015-12-17T00:43:47.317" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8697" PostTypeId="2" ParentId="8229" CreationDate="2015-12-17T07:15:17.223" Score="0" Body="&lt;p&gt;You could use the Arduino for the input/output to your motors and sensors, but do the actual calculation on a raspberry pi. They can communicate trough the I2C bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the raspberry pi this I2C bus is implementend on the gpio pins. How to communicate trough this bus from the os i do not know (I haven't tried) but I am sure that others have, so you should be able to find resources for that. This will give you the extra computer power you need to do your IK calculations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or do you really want to keep your calculations on your arduino?&lt;/p&gt;&#xA;" OwnerUserId="11185" LastActivityDate="2015-12-17T07:15:17.223" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8698" PostTypeId="1" AcceptedAnswerId="8699" CreationDate="2015-12-17T08:22:56.087" Score="4" ViewCount="5077" Body="&lt;p&gt;First, I don't see any manufacturer or online store telling whether an ESC is PPM controlled or not. Second, I have also been Googling and asking comments in &lt;a href=&quot;https://www.youtube.com/watch?v=OZNxbxL7cdc&quot; rel=&quot;nofollow&quot;&gt;&lt;em&gt;all about ESCs&lt;/em&gt;&lt;/a&gt; youtube videos for long, but I couldn't find anything useful.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Why do I need PPM controlled ESCs?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I'm doing a project based on &lt;a href=&quot;https://github.com/romainbaud/andro-copter&quot; rel=&quot;nofollow&quot;&gt;AndroCopter&lt;/a&gt; and its clearly mentioned that it specifically requires the use of PPM controlled ESCs.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Can I use any ESCs available in the market for this project?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's also mentioned in the Github repo that PPM controlled ESCs are the most common ones. However from some who explained ESCs in Youtube video has commented back for my doubt telling that most common ESCs are PWM controlled which is contradicting the previous statement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;PS&lt;/strong&gt;: I need to use Arduino Mega to control the four ESCs. And Arduino Mega is programmed to send out PPM signals which is exactly why I need PPM controlled ESCs. Correct me if I made any mistakes.&lt;/p&gt;&#xA;" OwnerUserId="11281" LastEditorUserId="11281" LastEditDate="2015-12-17T09:44:13.623" LastActivityDate="2019-08-29T17:53:28.660" Title="What exactly are PPM controlled ESCs? Are most ESCs available to build quadcopters PPM Controlled?" Tags="&lt;arduino&gt;&lt;quadcopter&gt;&lt;esc&gt;" AnswerCount="3" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8699" PostTypeId="2" ParentId="8698" CreationDate="2015-12-17T20:05:59.357" Score="2" Body="&lt;p&gt;I'm not an expert re: PPM communications but, from what I can tell, PPM signals contain pulses which are interpreted by the receiving microprocessor (or speed controller) as position commands.  If the pulse is the smallest acceptable width, then the position of the servo will be commanded to go completely to one side; if the pulse is the largest acceptable width, then the position of the servo will be commanded to go completely to the other side.  The PPM pulse is essentially a position setpoint, and the control of the power to achieve this position is up to the device that receives this signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, a PWM signal will often directly regulate the amount of power that is transmitted to the motor.  Consider the per cent that the PWM is ON - if it is ON 100% of the time, the motor will receive the highest possible amount of power.  If the PWM signal is on at a 50% duty cycle, the motor will receive 50% of the available power.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Essentially a PWM signal is part of a lower-level control loop, as compared to the PPM signal.  With the PPM signal, the speed controller takes care of the lower loops for you.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2015-12-17T20:05:59.357" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="8700" PostTypeId="1" CreationDate="2015-12-17T22:15:34.817" Score="3" ViewCount="141" Body="&lt;p&gt;I am the moment having some issues with an Jacobian going towards a singularity (i think)as some of its values becomes close to zero, and my robot oscillates, and therefore thought that some form of optimization of the linear least square solution is needed. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have heard about the interior point method, but I am not sure on how i can apply it here. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My equation is as this.. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;J(q)dq = du &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How would i have to implement the optimization, and would be needed?&lt;/p&gt;&#xA;" OwnerUserId="11363" LastActivityDate="2016-01-16T23:20:29.653" Title="inverse kinematics osciliations.." Tags="&lt;inverse-kinematics&gt;&lt;c++&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8701" PostTypeId="2" ParentId="8700" CreationDate="2015-12-17T22:43:15.440" Score="1" Body="&lt;p&gt;As your Jacobian matrix approaches a singularity, one or more of your joints will be required to reach an excessive velocity in order for the end effector to remain on the path.  This is a problem when you want the end effector to continue with a non-zero speed along its path.  Otherwise, the singularity could cause the end effector to dwell while the nullspace motion of the robot eventually resulted in it being able to continue along the path, and you wouldn't have to implement any optimal control algorithms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the configuration becomes close enough to a singularity, any control approach will either cause the end effector to reduce below the desire speed, or else will cause the end effector to deviate from its desired path.  If you think of the desired trajectory as a set of differential motions (or speeds), you can see that the two problems above are really the same thing:  the end effector is unable to continue with nonzero speed along a desired path.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Systems have been controlled which attempt to optimize the motion in the neighborhood of singularities.  Often they will use a gradient technique to minimize the error from the desired trajectory (the path/speed combination).  The interior point method is one of these approaches.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You would need to set up your objective function (or constraint) to be optimized to be related to the error between the desired trajectory and the achievable trajectory.  I have seen pretty simple optimization functions such as minimize the sum of the square of the joint velocities, all the way through very complex optimizations that trade off between speed and positional deviations.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think the answers to this question will help you get started:  &lt;a href=&quot;https://robotics.stackexchange.com/questions/344/with-a-6-axis-robot-given-end-effector-position-and-range-of-orientations-how&quot;&gt;With a 6-axis robot, given end-effector position and range of orientations, how to find optimal joint values&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11125" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2015-12-17T22:43:15.440" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="8702" PostTypeId="1" CreationDate="2015-12-18T01:05:56.420" Score="2" ViewCount="344" Body="&lt;p&gt;I have purchased the undermentioned robot chassis with DC motors supported with plastic gears from a local store. There is a 3A battery holder and when I connect robot to that and put it on the ground both the motors working fine and smooth. But when I connect the L298N motor controller which was made by myself and tested with proteus, only one motor is working. When I switch the wires of both motors, still the motor which worked before is working and the other motor never runs unless I manually give a little rotation to the wheel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I use a PIC18F4431 to control the motor controller and tried USB power and a 5V regulator created by myself and the result is the same in both occasions. What could be the issue here? If I tried oiling the malfunctioning motor will it work? I heard one of my friends having the same issue, one motor is not working. But both motors work with just two pen torch batteries and can't think of a valid reason that the motor is faulty. May be my motor controller? But when I swap the wires from faulty to the working one, the working one still works as I've mentioned above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Vog3A.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Vog3A.png&quot; alt=&quot;Robot car chassis&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/pSqRz.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/pSqRz.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://i.stack.imgur.com/O5gOs.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/O5gOs.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11365" LastEditorUserId="11365" LastEditDate="2015-12-19T02:16:33.587" LastActivityDate="2016-08-02T02:53:26.650" Title="Malfuction in motors using L298N" Tags="&lt;mobile-robot&gt;" AnswerCount="1" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="8703" PostTypeId="1" CreationDate="2015-12-18T05:21:27.227" Score="1" ViewCount="62" Body="&lt;p&gt;I have a project that is going to involve capturing ~80 images of a 35m x 50m agricultural study area for image processing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am wondering whether to use a NAZA v2 or PixHawk controller to outfit my ship (on a DJI F550 Flamewheel airframe).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My understanding is that Naza is limited as far as the amount of waypoints I can have during a particular mission. Can I break my imaging mission up into 8 or 10 sub-missions?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also understand that PixHawk is in many ways superior but getting it up and running can be more finicky - I am on a limited time frame for this project.&lt;/p&gt;&#xA;" OwnerUserId="11367" LastEditorUserId="37" LastEditDate="2015-12-18T12:02:50.500" LastActivityDate="2015-12-18T12:02:50.500" Title="PixHawk or Naza M V2 for Aerial Imaging of Small Study Area with Hexacopter" Tags="&lt;gps&gt;&lt;uav&gt;&lt;radio-control&gt;" AnswerCount="0" CommentCount="1" FavoriteCount="1" ClosedDate="2015-12-18T12:03:56.110" ContentLicense="CC BY-SA 3.0" />
  <row Id="8704" PostTypeId="1" AcceptedAnswerId="8724" CreationDate="2015-12-18T23:22:08.967" Score="0" ViewCount="54" Body="&lt;p&gt;I want to make pc controlled quadrotor. All the tutorials/projects made with rc receiver. I want to use arduino or xbee instead of rc receiver for pc control of quadrotor. How can I do this. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: I have arduino, beaglebone, xbee, hc-05, KK2 and multiwii parts. &lt;/p&gt;&#xA;" OwnerUserId="9504" LastActivityDate="2015-12-22T19:12:01.463" Title="Using another device instead of RC transmitter" Tags="&lt;pid&gt;&lt;quadcopter&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8705" PostTypeId="1" CreationDate="2015-12-19T02:29:43.147" Score="0" ViewCount="94" Body="&lt;p&gt;I have three HC-SR04 sensors connected to a PIC18F4431 with the schematic provided below. Before building the PCB I've tried testing all three sensors with a bread board and they worked fine. But now I have my PCB and when I connect them to that and tried testing, they work only for a few seconds and then stop working.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I set timers and a set of LEDs to lit if an item is in between 40cm from each sensor. As I've tried from the bread board, when I cross my arm withing that range, the appropriate bulbs are lit and when I take my arm off the other bulbs are lit. But using the PCB, when I upload the code through a PICKIT2 they work fine for a few seconds and then they freeze. If I reset the MCLR pin it works again for another few seconds and freeze again. And sometimes randomly if I touch the receiving part of the sensor it works but that happens randomly. Not always working. What could be the issue? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is my oscillator burnt while I was soldering it? Once I connected two 0.33uF polar capacitors and found out that for one second, it takes one minute or more to blink a bulb.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/uI7mT.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/uI7mT.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/uZ2jv.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/uZ2jv.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11365" LastEditorUserId="11365" LastEditDate="2015-12-19T04:59:59.107" LastActivityDate="2015-12-19T06:43:58.300" Title="Problem with HC-SR04 sensor" Tags="&lt;mobile-robot&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="8706" PostTypeId="2" ParentId="7454" CreationDate="2015-12-19T03:01:01.500" Score="0" Body="&lt;p&gt;See also &lt;a href=&quot;https://robotics.stackexchange.com/questions/1858/why-do-3-axis-accelerometers-seemingly-have-a-left-handed-coordinate-system&quot;&gt;this question&lt;/a&gt; for some info on how accelerometers handle gravity versus an external force.&lt;/p&gt;&#xA;" OwnerUserId="110" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2015-12-19T03:01:01.500" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8707" PostTypeId="2" ParentId="8705" CreationDate="2015-12-19T06:43:58.300" Score="1" Body="&lt;p&gt;In the PCB copper-side picture and the board layout picture, three pins have been left unconnected.  If your code has those set as inputs you are likely to get random inputs.  Check what your program does with those pins.  You can set them to low outputs and leave them low if they are causing problems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the other pins (ie those with with traces) if there is nothing yet connected to an input pin that you are reading, you may get intermittent problems like those mentioned in the question.  As an interim measure you might tie such pins high or low through 10 KΩ to 40 KΩ resistors.&lt;/p&gt;&#xA;" OwnerUserId="478" LastActivityDate="2015-12-19T06:43:58.300" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8708" PostTypeId="2" ParentId="7387" CreationDate="2015-12-19T08:54:38.180" Score="-1" Body="&lt;p&gt;So your path starts out perfect because of the back wall, however because of the lack of features afterward &amp;amp; poor sinusoidal path planned spatial parameters i.e. (amplitude, frequency) w.r.t. speed (wait... speed).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Have you tried increasing the speed of the motors?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="11371" LastActivityDate="2015-12-19T08:54:38.180" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8709" PostTypeId="1" AcceptedAnswerId="8740" CreationDate="2015-12-20T20:47:06.753" Score="1" ViewCount="97" Body="&lt;p&gt;I've kind of finished implementing a BiRRT for a 7 DOF arm, using a KD-tree from numpy.spatial in order to get nearest queries. A picture is below:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/QA2Qj.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QA2Qj.png&quot; alt=&quot;BIRRT pseudocode&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm currently having trouble with the fact that it is impossible to retrieve a path from the start node to a particular node using a KD-tree, and while I do have an array of of all the nodes, and there are edges that can be calculated between subsets of the array, but the edges are not in any useful order. Can anyone give me some tips on how I'd retrieve a path from the starting node in the first array, and the ending node in the second array? Are there any useful data structures that would let me do this? Below is my code&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;def makeLine(distance, q_near, xrand, nodes):&#xA;    num = int((distance)/0.01)&#xA;&#xA;    for i in range(1, num+1):&#xA;        qnext = (xrand - q_near)/distance * 0.01 * i + q_near&#xA;        #check for collision at qnext, if no collision detected:&#xA;            nodes = numpy.append(nodes, qnext)&#xA;        #else if there is collision, return 0, nodes, ((xrand - q_near)/distance*0.01*(i-1)+q_near&#xA;    return 1, nodes, qnext&#xA;&#xA;def BIRRT(start, goal):&#xA;&#xA;    startNode = numpy.array([start])&#xA;    goalNode = numpy.array([goal])&#xA;    limits = numpy.array([[-2.461, .890],[-2.147,1.047],[-3.028,3.028],[-.052,2.618],[-3.059,3.059],[-1.571,2.094],[-3.059,3.059]])&#xA;    for i in range(1, 10000):&#xA;        xrand = numpy.array([])&#xA;        for k in range(0, len(limits)):&#xA;            xrand = numpy.append(xrand, random.uniform(limits[k,:][0], limits[k,:][1]))&#xA;&#xA;        kdTree = scipy.spatial.KDTree(startNode[:, 0:7])&#xA;        distance, index = kdTree.query(xrand)&#xA;        q_near = kdTree.data[index]     &#xA;&#xA;&#xA;        success, startNode, qFinal = makeLine(distance, q_near, xrand, startNode)&#xA;&#xA;        kdTree2 = scipy.spatial.KDTree(goalNode[:, 0:7])&#xA;        distance2, index2 = kdTree2.query(qFinal)&#xA;        q_near2 = kdTree2.data[index2]&#xA;&#xA;        success, startNode, qFinal2 = makeLine(distance2, qFinal, q_near2, startNode)&#xA;&#xA;        if success:&#xA;            return 1, startNode, goalNode, 1, qFinal, qFinal2&#xA;&#xA;        xrand = numpy.array([])&#xA;        for k in range(0, len(limits)):&#xA;            xrand = numpy.append(xrand, random.uniform(limits[k,:][0], limits[k,:][1]))&#xA;&#xA;        kdTree = scipy.spatial.KDTree(goalNode[:, 0:7])&#xA;        distance, index = kdTree.query(xrand)&#xA;        q_near = kdTree.data[index]     &#xA;&#xA;        success, goalNode, qFinal = makeLine(distance, q_near, xrand, goalNode)&#xA;&#xA;        kdTree2 = scipy.spatial.KDTree(startNode[:, 0:7])&#xA;        distance2, index2 = kdTree2.query(qFinal)&#xA;        q_near2 = kdTree2.data[index2]&#xA;&#xA;        success, goalNode, qFinal2 = makeLine(distance2, qFinal, q_near2, goalNode)&#xA;&#xA;        if success:&#xA;            return 1, startNode, goalNode, 2, qFinal, qFinal2&#xA;    return 0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="11004" LastActivityDate="2015-12-23T22:07:51.423" Title="BiRRT: Getting path from an array of 7 DOF angle configurations" Tags="&lt;inverse-kinematics&gt;&lt;motion-planning&gt;&lt;planning&gt;&lt;rrt&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8710" PostTypeId="1" CreationDate="2015-12-21T02:06:36.997" Score="7" ViewCount="390" Body="&lt;p&gt;Before I ask my question, I'd better confirm that I've read the most prominent post about &lt;a href=&quot;https://robotics.stackexchange.com/questions/230/can-ros-run-on-a-raspberry-pi/7844#7844&quot;&gt;running ROS on Raspberry Pi devices&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That post contains some valuable information, but it's a bit dated, and ROS support for ARM devices is much better these days. In fact, ROS 2.0 is evidently going to have excellent support for &lt;a href=&quot;http://design.ros2.org/articles/why_ros2.html#new-use-cases&quot; rel=&quot;nofollow noreferrer&quot;&gt;running on embedded devices&lt;/a&gt; like the Raspberry Pi.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I just got a Pi model 2 for my birthday, and I'm really eager to get ROS running on it so I can build a robot I've been working on, which is based on the Wild Thumper 6WD platform.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From my perspective, here are a few pros &amp;amp; cons regarding UbuntuARM and ROSBerryPi:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;UbuntuARM&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Ubuntu is the official ROS distro and is the most well-supported ROS OS &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The best documentation on the ROS wiki for running on ARM devices is written for UbuntuARM&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Raspbian (on which ROSBerryPi is based) is the official distro for Rasbperry Pi and thus has the best support for the board.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;hr/&gt;&#xA;ROSBerryPi&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Raspbian (on which ROSBerryPi is based) is the official distro for Rasbperry Pi and thus has the best support for the board.&#xA;&lt;strong&gt;Cons:&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;ROS is not well supported on OS's other than Ubuntu&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;To use the ROSBerryPi distro, you must build ROS from source.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;My question is: can anyone provide any further insight into this dilemma? If you've been running ROS on your Raspberry Pi 2 (model 2 only please; the model B+ has completely different issues, like not being well-supported by Ubuntu), what's your experience been? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which distro would/did you choose, and why?&lt;/p&gt;&#xA;" OwnerUserId="11377" LastEditorUserId="6890" LastEditDate="2019-07-22T00:43:22.067" LastActivityDate="2019-08-12T20:16:14.403" Title="ROS on Raspberry Pi Model 2: UbuntuARM vs ROSBerryPi" Tags="&lt;ros&gt;&lt;raspberry-pi&gt;&lt;arm-cpu&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8711" PostTypeId="1" CreationDate="2015-12-21T05:02:32.807" Score="2" ViewCount="6814" Body="&lt;p&gt;Eigen library (&lt;a href=&quot;http://goo.gl/cV5LY&quot; rel=&quot;nofollow&quot;&gt;http://goo.gl/cV5LY&lt;/a&gt;), which is used extensively in ROS and PCL.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you.&lt;/p&gt;&#xA;" OwnerUserId="11378" LastActivityDate="2015-12-21T15:17:12.053" Title="How to convert rotation matrix in to equivalent Quaternion using Eigen Library." Tags="&lt;ros&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8712" PostTypeId="2" ParentId="8711" CreationDate="2015-12-21T07:32:03.073" Score="3" Body="&lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/questions/21761909/eigen-convert-matrix3d-rotation-to-quaternion&quot;&gt;https://stackoverflow.com/questions/21761909/eigen-convert-matrix3d-rotation-to-quaternion&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Welcome neel, please take the time to look around and contribute to other questions.&lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="-1" LastEditDate="2017-05-23T12:37:11.430" LastActivityDate="2015-12-21T07:32:03.073" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8713" PostTypeId="2" ParentId="2324" CreationDate="2015-12-21T10:59:35.863" Score="4" Body="&lt;p&gt;This is an old question but I see it repeated without a real answer. &#xA;Sticking with a kinematic model only, here's what I would do:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/aSJzfm.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/aSJzfm.jpg&quot; alt=&quot;4 wheel model&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The linear velocity of the robot is $\upsilon$ and the angular velocity of the robot is $\omega$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The distance to the ICR (not shown in the diagram) is&#xA;$$&#xA;\frac{\upsilon}{\omega}&#xA;$$&#xA;The velocity of the wheel about the ICR is &#xA;$$&#xA;\omega \sqrt{ d^2+s^2}&#xA;$$&#xA;The angle between our wheel and the ICR is&#xA;$$&#xA;\alpha = \arctan\frac{s}{d}&#xA;$$&#xA;We assume our wheels are the only thing creating motion about the ICR. $\upsilon_r$ is the linear velocity of the wheel.&#xA;$$&#xA;\upsilon_r=\frac{\omega \sqrt{ d^2+s^2}}{\cos \alpha}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the Instantaneous Center of Rotation (ICR) is far from the vehicle, the model is the same as the differential drive model. When the ICR is near the center of the vehicle this model is more accurate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just like the kinematic model for differential drives, this works well when friction is high and equal at all wheels. Rubber on concrete or hard floor for instance. &lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2015-12-21T10:59:35.863" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8714" PostTypeId="2" ParentId="8689" CreationDate="2015-12-21T11:31:01.630" Score="2" Body="&lt;p&gt;You're really asking two questions here:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Will the motors and propellers be able to provide enough thrust to lift the weight of the quadcopter?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There's no substitute for measurement here.  Get one motor, one propeller, and &lt;a href=&quot;https://robotics.stackexchange.com/a/4356/350&quot;&gt;measure it for yourself&lt;/a&gt; using a benchtop power supply.  Then multiply that by 4 (scaling it by the ratios you posted, as appropriate) and compare it to the total weight of the components you plan to buy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second question supports the first:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Will my power system be able to drive the motors at full speed?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Since you will already have the motors, you can measure their input current at full speed.  Then multiply by 4, and see if that total power matches your calculations for the equipment.  &lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2015-12-21T15:26:56.710" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8715" PostTypeId="2" ParentId="8711" CreationDate="2015-12-21T15:17:12.053" Score="0" Body="&lt;p&gt;Eigen has a &lt;a href=&quot;http://eigen.tuxfamily.org/dox-devel/classEigen_1_1Quaternion.html#a3a01e15dcd661e921482d1df278e7bd7&quot; rel=&quot;nofollow&quot;&gt;Quaternion constructor&lt;/a&gt; that takes a rotation matrix. &lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-12-21T15:17:12.053" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8716" PostTypeId="2" ParentId="1051" CreationDate="2015-12-21T20:55:42.263" Score="0" Body="&lt;p&gt;I prefer to use &lt;a href=&quot;https://en.wikipedia.org/wiki/Anatomical_terms_of_location&quot; rel=&quot;nofollow&quot;&gt;anatomical terms&lt;/a&gt; for this. I'm slightly biased because I often do biomimetic and rehabilitation work. However, there are a few nice things about using them discussing or describing a (vehicle) body.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The terminology is rich. There are unambiguous terms for location (left right anterior posterior dorsal ventral), the cross section planes (sagital transverse coronal), and relative positioning on the body (proximal distal).&lt;/li&gt;&#xA;&lt;li&gt;The terminology is shared. Roboticists doing medical, walking, and manipulation use these terms and the fact that biologists and medical scientists can instantly understand you creates opportunities for scientific cross-pollination. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="184" LastActivityDate="2015-12-21T20:55:42.263" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8717" PostTypeId="1" AcceptedAnswerId="8718" CreationDate="2015-12-21T21:32:03.710" Score="1" ViewCount="2063" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/IxIrc.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/IxIrc.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have got a robot that exactly looks like as shown in the figure above. I have worked out the inverse kinematics analytical solution without the base rotation (considering 2 dof alone) but I am not able to find the analytical solution including the base(3 dof). How do I find the anlytical solution for this robot ?? &lt;/p&gt;&#xA;" OwnerUserId="11383" LastActivityDate="2015-12-24T19:43:32.073" Title="3 degrees of freedom analytical solution" Tags="&lt;robotic-arm&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8718" PostTypeId="2" ParentId="8717" CreationDate="2015-12-21T21:45:02.537" Score="2" Body="&lt;p&gt;You can find many examples for this type of robot arm online.  It is kinematically similar to the first three joints of a Puma 560, which was used extensively as an example when robot kinematics and controls algorithms were being developed in academia.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Try section 4.2 of this paper:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://deepblue.lib.umich.edu/bitstream/handle/2027.42/6192/bac6709.0001.001.pdf&quot; rel=&quot;nofollow&quot;&gt;http://deepblue.lib.umich.edu/bitstream/handle/2027.42/6192/bac6709.0001.001.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2015-12-21T21:45:02.537" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="8720" PostTypeId="1" AcceptedAnswerId="8721" CreationDate="2015-12-22T11:26:51.623" Score="1" ViewCount="567" Body="&lt;p&gt;I am working on proposal of autonomous fire fight robots but I'm little bit confused about its sensor and algorithms. My friend suggested there are some path finding &lt;code&gt;AI&lt;/code&gt; algorithms like &lt;code&gt;BFS&lt;/code&gt;, &lt;code&gt;DFS&lt;/code&gt;, &lt;code&gt;A*&lt;/code&gt;, and &lt;code&gt;Dijkstra's Algorithm&lt;/code&gt; which are used in robots, but I didn't believe it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to ask: Are these algorithms used in real world robots or some other genetic algorithms? How does a robot discover path to detect, and differentiate, a human from fire?  I only want some explanation that gives knowledge.&lt;/p&gt;&#xA;" OwnerUserId="11385" LastEditorUserId="9176" LastEditDate="2015-12-28T01:42:19.207" LastActivityDate="2015-12-28T01:42:19.207" Title="Which algorithms are used in autonomous robot" Tags="&lt;algorithm&gt;&lt;machine-learning&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2016-01-03T15:17:13.690" ContentLicense="CC BY-SA 3.0" />
  <row Id="8721" PostTypeId="2" ParentId="8720" CreationDate="2015-12-22T11:51:18.823" Score="1" Body="&lt;p&gt;in my opinion one possibility on how the robot could find people with fire is by using image processing. You can obtain a real time Infra red image of the outside world and then check for levels of heat measured. Using recognition alogirthms the robot could decide whether a particular figure is a human or not and if it is a human then by checking the heat generated it could decide whether the person is in danger or not. The source of heat could be the main setpoint that the robot wants to reach.&lt;/p&gt;&#xA;" OwnerUserId="11383" LastActivityDate="2015-12-22T11:51:18.823" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8722" PostTypeId="1" AcceptedAnswerId="8725" CreationDate="2015-12-22T11:51:59.883" Score="6" ViewCount="275" Body="&lt;p&gt;Can a micro controller flash itself?&#xA;What i mean to say is, I have an STM32F103RG with 1Mb Flash Size. &#xA;I have a UART Communication modem connected to it. Can i send a firmware (.HEX or .BIN) to the microcontroller via the radio verify checksums, on sucess the microcontroller saves the file into a SD Card ( via SPI ) and then restarts itself and start flashing itself reading from the file ( in the sD card )?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can something like this be done or an external MCU is required to carry out the flashing?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The purpose is the microcontroller and radio will be sitting at a remote location and i need a way to change the microcontroller's firmware by sending it a firmware update file remotely. &lt;/p&gt;&#xA;" OwnerUserId="7049" LastEditorUserId="7049" LastEditDate="2015-12-22T13:22:14.283" LastActivityDate="2015-12-22T15:58:57.537" Title="Microcontroller flashing itself" Tags="&lt;microcontroller&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8723" PostTypeId="2" ParentId="8196" CreationDate="2015-12-22T14:21:44.050" Score="1" Body="&lt;p&gt;Install OpenCV-Python, it will solve the &lt;code&gt;import cv2&lt;/code&gt; error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can refer the following link for installation, &lt;a href=&quot;http://docs.opencv.org/master/d5/de5/tutorial_py_setup_in_windows.html&quot; rel=&quot;nofollow&quot;&gt;Install OpenCV-Python in Windows&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="11387" LastEditorUserId="9176" LastEditDate="2015-12-25T23:36:30.973" LastActivityDate="2015-12-25T23:36:30.973" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8724" PostTypeId="2" ParentId="8704" CreationDate="2015-12-22T14:48:57.983" Score="1" Body="&lt;p&gt;The input to the autopilot is a 50Hz PWM signal with pulse width varying from 1000 µs to 2000 µs (this is with APM, it should be same with KK2).  In case of a RC transmitter this signal is modulated on a 2.4GHz channel and the PWM values are mapped to the output of a potentiometer on the remote.&#xA;Now, you can keep an Arduino on your quadrotor with an XBee, and generate the same signal using the 'Servo' library (it also generates a signal of the same frequency).  And on your PC you can write a python script to transmit PWM values through an XBee connected on your serial port.&lt;/p&gt;&#xA;&#xA;&#xA;" OwnerUserId="11387" LastEditorUserId="110" LastEditDate="2015-12-22T19:12:01.463" LastActivityDate="2015-12-22T19:12:01.463" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8725" PostTypeId="2" ParentId="8722" CreationDate="2015-12-22T15:58:57.537" Score="7" Body="&lt;p&gt;Yes this is entirely possible, and as FuaZe said, it's called a bootloader.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You essentially have two programs on your chip, each with their own memory area; the bootloader and the application. Preferably, the bootloader area is write-protected to make sure you don't accidentally destroy it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the bootloader, you can use any algorithm you want. If you have enough space, the bootloader could be large enough to communicate with the outside world, get the hex file and program the application. If not, the older application can do the communication, write the hex file somewhere (external SD card for example as you said), restart to enter the bootloader and then it would read the hex file and write to flash.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The bootloader is naturally the first program to run on restart, and it usually either has a timeout, where if there is no communication it would jump to the application, waits for an &quot;exit bootloader&quot; command, or with your example, checks if there is something to bootload and if not immediately jumps to the application.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Note that with the bootloader, you need to be careful! You need to think about all cases where there could be power cuts in the middle of programming, or corruption of the program during write etc. In short, you need to make it bullet proof, or you may find yourself in a situation where your microcontroller is bricked. This is similar to how windows 10 bricks computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your bootloader communicates directly with the outside world to download the new firmware, you have the lowest risks. You just need to protect the bootloader itself and you should be able to recover from errors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your bootloader reads the program from somewhere on the board, where the firmware is written by the application itself, you need to be sure that the application is always capable of writing new firmware to that somewhere on the board. This may not always be the case, for example because there could be bugs among other reasons. In such a case, I suggest having a read-only firmware on the board which contains the original well-tested application. A button for example could tell the bootloader that you have messed up and would like to have the original application bootloaded.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The case with your external SD card fits better in the first case, since you can always recover with removing the SD card, writing the correct firmware on it with a computer and plugging it for bootload.&lt;/p&gt;&#xA;" OwnerUserId="158" LastActivityDate="2015-12-22T15:58:57.537" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8726" PostTypeId="1" AcceptedAnswerId="8741" CreationDate="2015-12-22T18:52:05.353" Score="3" ViewCount="1183" Body="&lt;p&gt;What should a quadcopter have, or have access to, in order to make this 'return home' feature work? Is GPS enough? What is the approach needed to make this happen?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I used a Arduino Mega 2560 with IMU to stable my quadcopter.&lt;/p&gt;&#xA;" OwnerUserId="4170" LastEditorUserId="9176" LastEditDate="2015-12-23T20:15:14.357" LastActivityDate="2015-12-24T03:06:10.553" Title="How to have a 'Auto Go Home' feature, like the DJI Phantom 3, on a project built quadcopter?" Tags="&lt;arduino&gt;&lt;quadcopter&gt;&lt;sensors&gt;&lt;localization&gt;&lt;gps&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8727" PostTypeId="2" ParentId="8726" CreationDate="2015-12-22T20:16:37.163" Score="4" Body="&lt;p&gt;I would go with one of two-ish methods to do this, but both methods require the craft to know its own position. You could do this with GPS, or an IMU, or any other means or combination of position tracking. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Method 1 - Only track where you are and where &quot;home&quot; is. Use sensors to detect obstacles along your path and navigate around them as applicable. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Method 2 - Leave &quot;breadcrumbs&quot;. Set your first waypoint where &quot;home&quot; is. Every time you get X meters away from the last waypoint, set a new waypoint. Assume there is no obstacles between waypoints (set the waypoint distance small enough that this should always be true), then just follow the waypoints back. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that Method 1 is just Method 2 with a very large distance setpoint.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-12-22T20:16:37.163" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8728" PostTypeId="1" AcceptedAnswerId="8743" CreationDate="2015-12-23T07:22:18.730" Score="1" ViewCount="2440" Body="&lt;p&gt;I'm hoping to use a DC motor to drive a cog bar horizontally along a track. AFAIK, I'd need to install a (plastic) cog on the motor shaft, which itself grips on the (plastic) cog bar. Does anyone know how to prevent the cog from shifting on the shaft? The shaft is 10mm long and I'd like to make sure the cog cog sits at 5mm, where the cog bar is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help will be appreciated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="11392" LastEditorUserId="11392" LastEditDate="2015-12-24T20:10:20.617" LastActivityDate="2015-12-24T20:10:20.617" Title="DC motor shaft and gear installation" Tags="&lt;motor&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8729" PostTypeId="2" ParentId="7728" CreationDate="2015-12-23T10:47:40.220" Score="1" Body="&lt;p&gt;You are right, it is a lot of files to deal with...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ROS, among other things, is a convention for developing large software systems. They say Robot Operating System but what they mean is Robot Software Build, Packaging, and Network Transparent Interprocess Communication System. RSBPNTICS does not roll off the tongue though...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ROS is not the best build and packaging system but it's got a decent amount of documentation and it's got 'robot' in the name. Read the ROS docs, do the tutorials, and after a little while you will start learning how to make small changes to large systems of software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The basic process is that you grab the source code for the library or process that you want to modify and build it. You replace the system version with your version (there are lots of ways to do this, but what you don't do is delete the system version). And then you make the changes you want to the source code. Most source code libraries are managed with &lt;a href=&quot;https://en.wikipedia.org/wiki/Version_control&quot; rel=&quot;nofollow&quot;&gt;version control software&lt;/a&gt; like git or subversion and you will have the opportunity to use them to contribute your changes back to the original authors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Understand that it will take learning and practice to develop enough experience where things start making sense. In the mean time, make friends with people that already have some experience to learn from and help you out along the way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have time to look around at other things for a little bit before starting, check out &lt;a href=&quot;http://rock-robotics.org/stable/&quot; rel=&quot;nofollow&quot;&gt;rock-robotics&lt;/a&gt;, another robot software build &amp;amp; packaging system. Rock is arguably more closely integrated with Orocos. There are also several other frameworks devoted to robotics that you will find with a little searching. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You are correct in your assesment that the software stack is more complex than the robotics. But this is only because of the stack you've chosen. Depending on what exactly you are doing, it might be quicker and easier to just write it all from scratch. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I recommend against using a virtual machine unless you have to. It just adds a layer of stuff to deal with. Installing ROS on a machine, even building ROS from source, is easy enough. Ubuntu 14.04 for ROS Indigo. I prefer developing on a faster moving distro and use Archlinux where ROS is well supported via the AUR repository.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;A comment on your list of tools... I don't think you've found the right simulation combination yet. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bullet (a video game physics simulator by Sony where looks and speed are more important than accuracy) is not something I'd use. Bullet does have soft body support but check the equations and integration functions for accuracy before you use it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you look for a suitable simulator to build on, take a look at &lt;a href=&quot;https://simtk.org/home/simbody&quot; rel=&quot;nofollow&quot;&gt;simbody&lt;/a&gt;. I don't think it has what you need but it is some of the most beautifully organized and commented code I've seen. Use it for inspiration. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Gazebo is only a (nice and useful) wrapper that actually prevents a lot of features of the underlying simulators to be used. Don't be afraid to use the simulators without gazebo. &lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2015-12-23T10:47:40.220" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8730" PostTypeId="2" ParentId="8728" CreationDate="2015-12-23T11:05:53.663" Score="2" Body="&lt;p&gt;The term I'd use for cog-bar and cog is &lt;a href=&quot;https://en.wikipedia.org/wiki/Rack_and_pinion&quot; rel=&quot;nofollow&quot;&gt;rack and pinion&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Plastic pinions are usually press-fit if they are very small or use set screws if they are just small. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I assume you are asking the question because the pinion is sliding on the motor shaft. Use epoxy. Use one that takes some time to cure so that you can position the pinion without worry. &lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2015-12-23T11:05:53.663" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="8731" PostTypeId="1" AcceptedAnswerId="8739" CreationDate="2015-12-23T11:39:36.453" Score="6" ViewCount="775" Body="&lt;p&gt;I have a iRobot Create model 4400 and I need to send commands to the open interface through Ubuntu. I'm using gtkterm at 57600 baud but when I press play button, it only drives around itself. I have tried to send commands as raw data and as hexadecimal data but it doesn't work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What am I doing wrong?&lt;/p&gt;&#xA;" OwnerUserId="11395" LastEditorUserId="37" LastEditDate="2016-01-04T13:24:32.993" LastActivityDate="2016-01-04T13:24:32.993" Title="Sending commands from Ubuntu" Tags="&lt;irobot-create&gt;&lt;roomba&gt;&lt;linux&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8732" PostTypeId="1" AcceptedAnswerId="8734" CreationDate="2015-12-23T12:47:18.057" Score="3" ViewCount="287" Body="&lt;p&gt;I bought a 3-axis magnetometer (Similar to &lt;a href=&quot;https://www.adafruit.com/products/1746&quot; rel=&quot;nofollow noreferrer&quot;&gt;this one&lt;/a&gt; ) And plugged into an Arduino in order to read the heading value.&#xA;I mounted it on my robot and I drove with the robot for around 30 meters, turned 180 degrees and drove back to my starting position. I plotted the heading value and it shows inconsistent values. The 180 degrees turn started at sec 55, the rest is driving in one direction using a joystick and following a wall as reference so small deviations are expected but not that big as in the image.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/wWHaz.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wWHaz.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the robot is turning in-place, there is no such problem and the heading variation follows the rotation of the robot. The robot (Turtlebot) is a little bit shaky such that the magnetometer doesn't always have the x and y axes parallel to the floor but I don't think few degrees of offset can cause such a huge difference. I calculate the heading as follows:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;heading = atan2(y field intensity, x field intensity)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Why does this happen? Could it be form some metals or electric wires under the floor?&#xA;Can you suggest a more robust method/sensor for estimating the heading in indoor environments?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I drove the same path again and the pattern similarity is making it even weirder&#xA;&lt;a href=&quot;https://i.stack.imgur.com/G5eeT.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/G5eeT.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4429" LastEditorUserId="4429" LastEditDate="2015-12-23T13:28:40.653" LastActivityDate="2015-12-23T13:51:16.380" Title="Weird magnetometer values" Tags="&lt;mobile-robot&gt;&lt;navigation&gt;&lt;magnetometer&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8733" PostTypeId="2" ParentId="8732" CreationDate="2015-12-23T13:21:12.760" Score="1" Body="&lt;p&gt;Everything looks fine to me. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Imagine if you kept driving in clockwise circles. Would you want your heading to be 18064? Would that mean anything to you? Which direction are you facing? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;No, instead whenever you &lt;em&gt;would&lt;/em&gt; go below 0 it puts you up to 359, because counter clockwise of North is North-Northwest. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similarly, clockwise of North is North-Northeast, so instead of going from 359 to 361 you go to 1 instead. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;All you are seeing is the output giving you a useful heading, which means &quot;wrapping&quot; from 0 to 360 because these are actually the same values. Similar to how a clock &quot;jumps&quot; from 12 to 1 (or 23 to 1, depending on your background).&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-12-23T13:21:12.760" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8734" PostTypeId="2" ParentId="8732" CreationDate="2015-12-23T13:51:16.380" Score="4" Body="&lt;p&gt;Apparently a magnetometer is useless in indoor environments like man made buildings. I cite from this paper&#xA;&lt;a href=&quot;http://plan.geomatics.ucalgary.ca/papers/afzal%20et%20al_navigation_2011c.pdf&quot; rel=&quot;nofollow&quot;&gt;Multi-Magnetometer Based Perturbation Mitigation for Indoor Orientation Estimation&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Nevertheless, the success of these sensors for orientation estimation&#xA;  is conditioned by their capacity to sense Earth’s magnetic field in&#xA;  environments full of magnetic anomalies like urban canyons and&#xA;  indoors. These artificial fields contaminate Earth’s magnetic field&#xA;  measurements, making orientation estimation very difficult in heavily&#xA;  perturbed areas.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="4429" LastActivityDate="2015-12-23T13:51:16.380" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8735" PostTypeId="2" ParentId="8731" CreationDate="2015-12-23T15:17:55.630" Score="3" Body="&lt;p&gt;Have you tried sending the example commands from &lt;a href=&quot;http://www.irobot.com/filelibrary/create/Create%20Manual_Final.pdf&quot; rel=&quot;nofollow&quot;&gt;the manual&lt;/a&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Make sure you are entering an OI mode before you try to send an actuator command or sensor reading command. Otherwise, the commands will be ignored.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Posting the commands you are sending would also be helpful in understanding the problem you are having.&lt;/p&gt;&#xA;" OwnerUserId="9743" LastActivityDate="2015-12-23T15:17:55.630" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8737" PostTypeId="2" ParentId="8726" CreationDate="2015-12-23T18:18:08.990" Score="2" Body="&lt;p&gt;Primarily it will be GPS based. I have a Phantom 3 Pro and I have seen how the Go Home feature works.  Before it returns to the x,y coordinates set as &quot;home&quot; it goes to a specific altitude. Presumably this is determined from the altitude of it's home position plus some pre-determined safety zone that is known to be clear of some of the tallest standard obstructions such as streetlights, power cables etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is probably a very good idea to go directly to this altitude first by vertical means only, then traverse to the lat,long coordinates and then descend to landing as the DJI does.  I have flown my quad in the mountains where I stand on a crest or cliff and fly down into the valley below. You don't want to hit cliff faces or trees on the way up or down.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, what about obstacle avoidance? If the vehicle goes behind something such as a tall building, making a bee line straight back to home is not going to be the best flight path.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The DJI has two ways of identifying home. One is to remember where it took off from, and if you don't give it enough time to get a proper GPS lock before you take off it might try to fly back to its previous &quot;Home&quot; site, which could be miles away. The other is that there is a GPS in the controller and it can communicate this to the vehicle so the vehicle comes back to the controller even if it is moving.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also consider that it's probably coming home with little remaining battery power, so shortest distance back could be a good thing. This might contradict what was previously noted about obstacle avoidance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I believe that the &quot;Go Home&quot; feature is mostly useful when it is lost from eyesight and especially when the signal gets weak or is lost completely. Many times it is only necessary to come back towards you and let you reestablish those two things, then it's probably best to let the controller assume its initial role.&lt;/p&gt;&#xA;" OwnerUserId="1075" LastEditorUserId="1075" LastEditDate="2015-12-23T18:24:06.733" LastActivityDate="2015-12-23T18:24:06.733" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8738" PostTypeId="2" ParentId="8698" CreationDate="2015-12-23T20:40:19.937" Score="4" Body="&lt;p&gt;I believe there is confusion about these terms.  Strictly speaking, the ESC is PWM controlled. Although the signal usually gets there from a transmitter and receiver signal that is PPM encoded.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems to me, that many sources will have you believe that PPM is just a multiplexed PWM like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/rNJLl.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rNJLl.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/8ezPY.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8ezPY.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But in reality it is actually more like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/J4ycX.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/J4ycX.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note in the final diagram that the actual PPM signal does not vary significantly in pulse width, only it's position is significant. Hence the term &lt;em&gt;Pulse Position Modulation&lt;/em&gt;. From those positions, a controller will reconstruct a PWM signal that resembles what appears in the &quot;Partial PPM Pulse&quot; diagram (and is unfortunately labelled as PPM). That &quot;PPM&quot; signal (actually a multiplexed PWM signal) now has widths that are significant. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Rather unfortunately, neither that true PPM signal nor the so called PPM (actually multiplexed PWM) signal will make your ESC work correctly. It also has to be demultiplexed so that the information for only a &lt;em&gt;single channel&lt;/em&gt; is fed to the ESC (or servo). This is in fact a PWM signal again. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It might be because the PWM has to have specific dimensions to work on the ESC that they don't want to use the term PWM, in other words its not just any generic PWM signal. Specifically the pulse width usually needs to be 1500µs long (+/- ~500µs) and occurs 20000µs apart (hence the 50Hz frequency), but there are alternatives to that scheme. Compare this to a PWM signal that can be used to control the brightness of an LED, for example, which can have any frequency and the widths can vary between 0% and 100% of the duty cycle. These are vastly different requirements from the PWM signal required to operate the ESC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as I am aware, most ESCs used in RCs will have this type of control schema.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;So in conclusion:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PPM when used to refer to ESCs is meant to be a specific kind of PWM. Any ESC that says it is PPM or PWM compatible is referring to the same thing. An alternative would be a serial motor controller, but I have never heard of one that was referred to as an ESC. Those are simply &quot;motor controllers&quot;. For example, &lt;a href=&quot;https://www.pololu.com/search?%5Bsearch_type%5D=&amp;amp;query=motor%20controller&amp;amp;x=4&amp;amp;y=7&quot; rel=&quot;nofollow noreferrer&quot;&gt;these ones&lt;/a&gt;. Also not that some of the controllers on that page are also PWM controlled, &lt;em&gt;but it is not the same kind of PWM -- more akin to the LED brightness control I mentioned above.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="1075" LastEditorUserId="1075" LastEditDate="2015-12-23T21:01:55.467" LastActivityDate="2015-12-23T21:01:55.467" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8739" PostTypeId="2" ParentId="8731" CreationDate="2015-12-23T20:54:21.143" Score="5" Body="&lt;p&gt;The Roomba expects binary data.  When you type in gtkterm, you are sending &lt;a href=&quot;http://www.asciitable.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;ASCII&lt;/a&gt; data.  (Unless there is a feature of gtkterm i don't know about).  For example when you type &quot;128&quot; into the terminal, you are actually sending 3 bytes of data: [49 50 56].  And because many commands of the &lt;a href=&quot;http://www.irobot.com/~/media/MainSite/PDFs/About/STEM/Create/create_2_Open_Interface_Spec.pdf?la=en&quot; rel=&quot;nofollow noreferrer&quot;&gt;OI Spec&lt;/a&gt; are outside the typeable ASCII range, using the terminal in this manner won't work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should use a programming language such as &lt;a href=&quot;https://robotics.stackexchange.com/questions/7158/c-and-create2&quot;&gt;C&lt;/a&gt;, &lt;a href=&quot;https://robotics.stackexchange.com/questions/7018/irobot-create-2-c-connection&quot;&gt;C#&lt;/a&gt;, &lt;a href=&quot;https://robotics.stackexchange.com/questions/6831/where-can-i-get-openinterface-py&quot;&gt;Python&lt;/a&gt;, etc to send the data packet.  &lt;/p&gt;&#xA;" OwnerUserId="110" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2015-12-24T14:40:32.830" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8740" PostTypeId="2" ParentId="8709" CreationDate="2015-12-23T22:07:51.423" Score="0" Body="&lt;p&gt;I got a working solution using both a KD-tree and a Graph (iGraph) provided by Python. Below is the working code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;def makeLine(distance, q_near, index, xrand, nodes, graph, elem):&#xA;    num = int((distance)/0.01)&#xA;&#xA;    for i in range(1, num+1):&#xA;        qnext = (xrand - q_near)/distance * 0.01 * i + q_near&#xA;        #check for collision at qnext, if no collision detected:&#xA;        nodes = numpy.vstack([nodes, qnext])&#xA;        graph.add_vertex(len(nodes)-1)&#xA;        if i == 1 and elem == 1:&#xA;            graph.add_edge(index, len(nodes)-1)&#xA;        else:&#xA;            graph.add_edge(len(nodes)-2, len(nodes)-1)&#xA;        #else if there is collision, return 0, nodes, ((xrand - q_near)/distance*0.01*(i-1)+q_near&#xA;    return 1, nodes, qnext, graph&#xA;&#xA;def BIRRT(start, goal):&#xA;    gStart = Graph()&#xA;    gGoal = Graph()&#xA;    gStart.add_vertex(0)&#xA;    gGoal.add_vertex(0)&#xA;    startNode = start &#xA;    goalNode = goal &#xA;    limits = numpy.array([[-2.461, .890],[-2.147,1.047],[-3.028,3.028],[-.052,2.618],[-3.059,3.059],[-1.571,2.094],[-3.059,3.059]])&#xA;    for i in range(1, 10000):&#xA;        xrand = numpy.array([])&#xA;        for k in range(0, len(limits)):&#xA;            xrand = numpy.append(xrand, random.uniform(limits[k,:][0], limits[k,:][1]))&#xA;&#xA;        kdTree = scipy.spatial.KDTree(startNode[:, 0:7])&#xA;        distance, index = kdTree.query(xrand)&#xA;        q_near = kdTree.data[index]     &#xA;        index = numpy.where(numpy.all(startNode==q_near, axis=1))[0][0]&#xA;&#xA;        success, startNode, qFinal, gStart = makeLine(distance, q_near, index, xrand, startNode, gStart, 1)&#xA;&#xA;        kdTree2 = scipy.spatial.KDTree(goalNode[:, 0:7])&#xA;        distance2, index2 = kdTree2.query(qFinal)&#xA;        q_near2 = kdTree2.data[index2]&#xA;        index = numpy.where(numpy.all(goalNode==q_near2, axis=1))[0][0]&#xA;        success, startNode, qFinal2, gStart = makeLine(distance2, qFinal, q_near2, startNode, gStart, 0)&#xA;&#xA;        if success:&#xA;            NodePath = numpy.array(start)&#xA;            graphPath = []&#xA;            graphPath.append(gStart.get_all_shortest_paths(0, numpy.where(numpy.all(startNode==qFinal2, axis=1))[0][0])[0])&#xA;            k = len(graphPath)&#xA;            graphPath.append(gGoal.get_all_shortest_paths(i, 0)[0]) &#xA;            for i in range(0, len(graphPath)-1):&#xA;                if i &amp;lt; k:&#xA;                    NodePath = numpy.vstack((NodePath, startNode[graphPath[i]]))&#xA;                else:&#xA;                    NodePath = numpy.vstack((Nodepath, goalNode[graphPath[i]]))&#xA;            NodePath = numpy.vstack((NodePath, goal))&#xA;            return 1, NodePath&#xA;&#xA;        xrand = numpy.array([])&#xA;        for k in range(0, len(limits)):&#xA;            xrand = numpy.append(xrand, random.uniform(limits[k,:][0], limits[k,:][1]))&#xA;&#xA;        kdTree = scipy.spatial.KDTree(goalNode[:, 0:7])&#xA;        distance, index = kdTree.query(xrand)&#xA;        q_near = kdTree.data[index]     &#xA;        index = numpy.where(numpy.all(goalNode==q_near, axis=1))[0][0]&#xA;        success, goalNode, qFinal, gGoal = makeLine(distance, q_near, index, xrand, goalNode, gGoal, 1)&#xA;&#xA;        kdTree2 = scipy.spatial.KDTree(startNode[:, 0:7])&#xA;        distance2, index2 = kdTree2.query(qFinal)&#xA;        q_near2 = kdTree2.data[index2]&#xA;        index = numpy.where(numpy.all(startNode==q_near2, axis=1))[0][0]&#xA;        success, goalNode, qFinal2, gGoal = makeLine(distance2, qFinal, index, q_near2, goalNode, gGoal, 0)&#xA;&#xA;        if success:&#xA;            NodePath = numpy.array(start)&#xA;            graphPath = []&#xA;            graphPath.append(gStart.get_all_shortest_paths(0, i)[0])&#xA;            k = len(graphPath)&#xA;            graphPath.append(gGoal.get_all_shortest_paths(numpy.where(numpy.all(goalNode==qFinal2, axis=1))[0][0], 0)[0])&#xA;&#xA;            for i in range(0, len(graphPath)-1):&#xA;                if i &amp;lt; k:&#xA;                    NodePath = numpy.vstack(NodePath, startNode[graphPath[i]])&#xA;                else:&#xA;                    NodePath = numpy.vstack(NodePath, goalNode[graphPath[i]])&#xA;            NodePath = numpy.vstack((NodePath, goal))&#xA;            return 1, NodePath&#xA;    return 0        &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It's pretty messy, yes but it works for now. Now I need to figure out how to determine if a joint angle configuration will cause a collision in Gazebo...&lt;/p&gt;&#xA;" OwnerUserId="11004" LastActivityDate="2015-12-23T22:07:51.423" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8741" PostTypeId="2" ParentId="8726" CreationDate="2015-12-24T03:06:10.553" Score="0" Body="&lt;p&gt;The answer to what capabilities the quadcopter to have is: link loss algorithms and navigation capacity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Link loss procedure for a robot could be:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;determine that there's a link loss (no commands for 1 second?)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;try to aquire link back, for a while (a minute?) (increase altitude while circling a calm radius)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;increase altitude to the Safe to Navigate altitude (which is mission plan dependent, and maybe configured before each flight).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;navigate to Lat-Lon of the Home Point (using intermediate points or direct navigation, if no intermediate waypoints exist).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;slowly descend to the ground after some time (depends on the endurance capability of the vehicle); doing some alerting actions (playing music, waving around, displaying lights on and off) for any possible human/lives on ground would be cool.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Important: Home Point must be chosen away from people, cars, etc. And it should also be relatively easy to retrieve the vehicle back.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This procedure must be known by crew and any parties that are around the flight zone (other modelers, aviation authorities, friends, police, etc), and Home Point (and intermediate waypoints) must be set up / controlled before each takeoff.&lt;/p&gt;&#xA;" OwnerUserId="9570" LastActivityDate="2015-12-24T03:06:10.553" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8742" PostTypeId="1" AcceptedAnswerId="8746" CreationDate="2015-12-24T06:33:36.110" Score="0" ViewCount="642" Body="&lt;p&gt;I'm looking at the &lt;a href=&quot;http://g01.a.alicdn.com/kf/HTB1i3odKpXXXXcgXpXXq6xXFXXXq/N20-DC-6V-74rpm-Micro-gear-Motor-with-Metal-Gear-Box-Low-speed-Motor-Flip-type.jpg&quot; rel=&quot;nofollow&quot;&gt;N20 DC motor&lt;/a&gt; which is fairly popular. Does anyone know if the shaft could be swapped out for a threaded shaft?&lt;/p&gt;&#xA;" OwnerUserId="11392" LastEditorUserId="9176" LastEditDate="2015-12-29T17:22:25.087" LastActivityDate="2015-12-29T17:22:25.087" Title="Could a motor shaft be swapped for a threaded shaft?" Tags="&lt;motor&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8743" PostTypeId="2" ParentId="8728" CreationDate="2015-12-24T17:52:20.693" Score="1" Body="&lt;p&gt;If the pinion will be close to the gearbox plate, use a washer or &lt;a href=&quot;https://en.wikipedia.org/wiki/Thrust_bearing&quot; rel=&quot;nofollow noreferrer&quot;&gt;thrust bearing&lt;/a&gt; between the pinion and plate.  The washer can be made from teflon or polyethylene sheet, or you could use thin steel washers.  &lt;a href=&quot;https://en.wikipedia.org/wiki/Shaft_collar&quot; rel=&quot;nofollow noreferrer&quot;&gt;Shaft collars&lt;/a&gt; also can be used to keep the pinion from shifting in and out, but a pinion with a setscrew (as pictured below) would be more compact.  An &lt;a href=&quot;http://www.aliexpress.com/item/N20-DC6V-100RPM-Gear-Motor-Miniature-High-Torque-Gear-Box-Motor/32337727477.html?spm=2114.01020208.3.64.a8rHF5&amp;amp;ws_ab_test=searchweb201556_2,searchweb201644_4_79_78_77_82_80_62_81,searchweb201560_8&quot; rel=&quot;nofollow noreferrer&quot;&gt;N20 gear motor&lt;/a&gt; apparently has a 3 mm diameter shaft; one of the shaft collars below is 3 mm. The pictured thrust bearing is 2.5 mm bore.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/VG8zd.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/VG8zd.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="478" LastActivityDate="2015-12-24T17:52:20.693" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8744" PostTypeId="2" ParentId="8717" CreationDate="2015-12-24T19:36:22.827" Score="2" Body="&lt;p&gt;Your manipulator is almost identical to the Phantom Omni in the below picture,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/IY2N0.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/IY2N0.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this paper &lt;a href=&quot;http://ieeexplore.ieee.org/xpl/login.jsp?tp=&amp;amp;arnumber=6318365&amp;amp;url=http%3A%2F%2Fieeexplore.ieee.org%2Fxpls%2Fabs_all.jsp%3Farnumber%3D6318365&quot; rel=&quot;nofollow noreferrer&quot;&gt;Teleoperation with inverse dynamics control for PHANToM Omni haptic device&lt;/a&gt;, the Kinematics and Dynamics of the device are provided. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For fun, I've simulated the model in the aforementioned paper. I've chosen the PD controller to carry out the simulation. For the desired trajectories, I've chosen the following &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\theta^{d}_{1}(t) = 0.1\sin(\pi t) \\&#xA;\theta^{d}_{2}(t) = 0.1\cos(\pi t) \\&#xA;\theta^{d}_{2}(t) = 0.1\cos(\pi t) \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The controller input is &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;u = M(q)*( \ddot{q}^{d} + K_{d} \dot{e}(t) + K_{p}e(t) ) + V(q,\dot{q}) \dot{q} + N&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The result is &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/nXgZ0.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/nXgZ0.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have some uncertianties in your model, you should choose PID controller instead of the PD controller. &lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="2155" LastEditDate="2015-12-24T19:43:32.073" LastActivityDate="2015-12-24T19:43:32.073" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="8746" PostTypeId="2" ParentId="8742" CreationDate="2015-12-25T12:01:27.380" Score="3" Body="&lt;p&gt;Do you mean a threaded shaft &lt;a href=&quot;http://m.aliexpress.com/item/32572201892.html&quot; rel=&quot;nofollow&quot;&gt;like this&lt;/a&gt; or &lt;a href=&quot;http://m.banggood.com/N20-DC-6V-55RPM-Gear-Motor-M3-20mm-Threaded-Shaft-Reduction-Gear-Motor-p-1010696.html&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you wanted to use the folded reduction gear set you linked but have a threaded output shaft then you could either try to get someone to make you a shaft ($$$) or you could buy one of the motors I linked to and swap the shaft out. This assumes that the gear attached to the shaft is the same size. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding how - look around the shaft where it exits the reduction gear set. On the motors I linked there are two screws, which should be the same on yours. Take a lot of pictures before you remove them, remove them with the whole motor over a plate or pan, and expect all of the gears to fall out when you remove the screws. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then it's just a matter of pulling the old shaft out, putting the new one in, and trying to get all the gears in place. For that last step, try putting some extra grease on the gear shafts. The viscosity of the grease will act kind of like glue to hold them in place until you get the end plates reinstalled. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2015-12-25T12:01:27.380" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8747" PostTypeId="2" ParentId="5053" CreationDate="2015-12-25T13:49:26.653" Score="3" Body="&lt;p&gt;This was on &lt;a href=&quot;http://www.rcgroups.com/forums/showthread.php?t=1987175&amp;amp;page=483&quot; rel=&quot;nofollow&quot;&gt;rcgroups&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Reply by Rob_Lefebvre on December 31, 2014 at 7:02am &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Here is a brief history:&lt;/p&gt;&#xA;  &#xA;  &lt;ol&gt;&#xA;  &lt;li&gt;&lt;p&gt;The APM class boards used the MPU6000 gyro/accel chip.&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;li&gt;&lt;p&gt;The Pixhawk was originally designed to use the LSM303D chip, as it was supposed to be better.&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;li&gt;&lt;p&gt;Initial prototype testing of Pixhawk boards revealed problems with the LSM chip. To avoid further delays of Pixhawk production, it was&#xA;  decided to add the MPU chip back onto the board, so now there would be&#xA;  2.&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;li&gt;&lt;p&gt;At some point shortly after the MPU was added, the LSM problem was solved, but it was decided to leave both chips on the board anyway, as&#xA;  it allows us to take advantage of redundant sensors.&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;li&gt;&lt;p&gt;Up until 3.2, the MPU chip was the only one being used. The LSM was basically ignored. If it failed, the code did not care.&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;li&gt;&lt;p&gt;Starting with 3.2, we wanted to start taking advantage of the sensor redundancy, so we began using the data from the LSM. Generally&#xA;  this is fine, except for cases where the LSM has a problem. Or the MPU&#xA;  has a problem. We did not forsee this failure rate until the code was&#xA;  released. The problem is, either chip can fail, and the code doesn't&#xA;  know which is good and which is bad. It just knows they're different.&#xA;  In this early stage, using two sensors does not really offer&#xA;  redundancy and increased reliability. It actually doubles our chance&#xA;  of having a problem.&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;/ol&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="11403" LastEditorUserId="9176" LastEditDate="2015-12-25T23:37:52.770" LastActivityDate="2015-12-25T23:37:52.770" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8749" PostTypeId="1" AcceptedAnswerId="8759" CreationDate="2015-12-25T19:19:21.573" Score="-2" ViewCount="412" Body="&lt;p&gt;I am thinking about building a small robotic arm with 4 small servo motors and an arduino uno to apply basic neural networks concepts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it  a good idea to use a hand made robotic arm to learn more the power of neural networks?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank your for your time and Merry Christmas&lt;/p&gt;&#xA;" OwnerUserId="7557" LastEditorUserId="7557" LastEditDate="2015-12-26T09:31:08.833" LastActivityDate="2015-12-28T09:54:16.173" Title="Bulding a robot arm for neural networks understanding" Tags="&lt;control&gt;" AnswerCount="2" CommentCount="6" ClosedDate="2016-01-04T11:34:31.800" ContentLicense="CC BY-SA 3.0" />
  <row Id="8750" PostTypeId="2" ParentId="8749" CreationDate="2015-12-26T02:18:39.613" Score="2" Body="&lt;p&gt;Building an arm yourself could be a bit tedious. If your in a mechanical background then yes it might be of some help but if your in embedded or electronics then its better to order a already built frame on which you can add the servo in place. Some have the servos in them itself. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I worked in a project where I made a robotic arm controlled by user given angles. I used '&lt;a href=&quot;https://www.adafruit.com/product/815&quot; rel=&quot;nofollow&quot;&gt;16-Channel 12-bit PWM/Servo Driver-I2C interface-PCA9685 for Arduino&lt;/a&gt;' to connect my microcontroller to the Robot. And the Controller is used to set the match register value present in the interface boards timer unit. This in turn produces a PWM which is given to the servo. The timer match register value changes depending on the angle you need the arm to move and thus the PWM also changes according to the match register value. So this should be a very cheap and basic robotic arm project I guess! &lt;/p&gt;&#xA;" OwnerUserId="11383" LastEditorUserId="9176" LastEditDate="2015-12-28T09:54:16.173" LastActivityDate="2015-12-28T09:54:16.173" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8751" PostTypeId="1" AcceptedAnswerId="8753" CreationDate="2015-12-26T06:52:24.823" Score="3" ViewCount="3357" Body="&lt;p&gt;I am currently in the process of writing a pose estimation algorithm using image data. I receive images at 30 fps, and for every image, my program computes the x,y,z and roll, pitch, yaw of the camera with respect to a certain origin. This is by no means very accurate, there are obvious problems such as too much exposure in the image, not enough feature points in the image, etc., and the positions go haywire every once in a while; so I want to write a Kalman filter that can take care of this part.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have read through the basics of KF, EKF etc. and then I was reading through an OpenCV &lt;a href=&quot;http://docs.opencv.org/master/dc/d2c/tutorial_real_time_pose.html#gsc.tab=0&quot; rel=&quot;nofollow&quot;&gt;tutorial&lt;/a&gt; that has an implementation of a Kalman Filter inside an algorithm for the pose estimation of an object. While this matches my use case very well, I don't understand why they are using a linear Kalman Filter while explicitly specifying parameters like (dt*dt) in the state transition matrix. For reference, the state transition matrix they are considering is &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;             /* DYNAMIC MODEL */&#xA;//  [1 0 0 dt  0  0 dt2   0   0 0 0 0  0  0  0   0   0   0]&#xA;//  [0 1 0  0 dt  0   0 dt2   0 0 0 0  0  0  0   0   0   0]&#xA;//  [0 0 1  0  0 dt   0   0 dt2 0 0 0  0  0  0   0   0   0]&#xA;//  [0 0 0  1  0  0  dt   0   0 0 0 0  0  0  0   0   0   0]&#xA;//  [0 0 0  0  1  0   0  dt   0 0 0 0  0  0  0   0   0   0]&#xA;//  [0 0 0  0  0  1   0   0  dt 0 0 0  0  0  0   0   0   0]&#xA;//  [0 0 0  0  0  0   1   0   0 0 0 0  0  0  0   0   0   0]&#xA;//  [0 0 0  0  0  0   0   1   0 0 0 0  0  0  0   0   0   0]&#xA;//  [0 0 0  0  0  0   0   0   1 0 0 0  0  0  0   0   0   0]&#xA;//  [0 0 0  0  0  0   0   0   0 1 0 0 dt  0  0 dt2   0   0]&#xA;//  [0 0 0  0  0  0   0   0   0 0 1 0  0 dt  0   0 dt2   0]&#xA;//  [0 0 0  0  0  0   0   0   0 0 0 1  0  0 dt   0   0 dt2]&#xA; /  [0 0 0  0  0  0   0   0   0 0 0 0  1  0  0  dt   0   0]&#xA;//  [0 0 0  0  0  0   0   0   0 0 0 0  0  1  0   0  dt   0]&#xA;//  [0 0 0  0  0  0   0   0   0 0 0 0  0  0  1   0   0  dt]&#xA;//  [0 0 0  0  0  0   0   0   0 0 0 0  0  0  0   1   0   0]&#xA;//  [0 0 0  0  0  0   0   0   0 0 0 0  0  0  0   0   1   0]&#xA;//  [0 0 0  0  0  0   0   0   0 0 0 0  0  0  0   0   0   1]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I'm a little confused, so my main question can be broken down into three parts:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Would a linear Kalman Filter suffice for a 6DOF pose estimation filtering? Or should I go for an EKF?&lt;/li&gt;&#xA;&lt;li&gt;How do I come up with the &quot;model&quot; of the system? The camera is not really obeying any trajectory, the whole point of the pose estimation is to track the position and rotation even through noisy movements. I don't understand how they came up with that matrix.&lt;/li&gt;&#xA;&lt;li&gt;Can the Kalman Filter understand that, for instance, if the pose estimation says my camera has moved half a meter between one frame and other, that's plain wrong, because at 1/30th of a second, there's no way that could happen?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Thank you!&lt;/p&gt;&#xA;" OwnerUserId="10310" LastActivityDate="2015-12-26T11:19:30.393" Title="How do I go about implementing a Kalman Filter for a pose estimation algorithm?" Tags="&lt;kalman-filter&gt;&lt;pose&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8753" PostTypeId="2" ParentId="8751" CreationDate="2015-12-26T11:19:30.393" Score="5" Body="&lt;p&gt;It sounds like you're using the camera frames to get a PnP solution, or something along those lines.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;A linear Kalman filter will usually work OK for most purposes if you're using roll/pitch/yaw and pose measurements coming from the camera algorithm. This is always the first port of call because it's much easier than EKF/UKF/etc. If this does not give adequate results then you should consider more complex filters.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The &quot;model&quot; of the system is generally at least two models: a process model (how the system state evolves in time) and a measurement model (how the camera makes measurements based on the system state). Aside: &quot;Pose estimation&quot; is simply finding a pose, what the *KF does is &lt;em&gt;state filtering&lt;/em&gt;. A widely used model ( and what seems to be the model you have pasted ) is the constant-velocity model; which assumes that between camera measurements the camera is a particle travelling with constant linear and angular velocity.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The KF has no in-built way to discriminate if there is an uncharacteristically large spike in measurements. The term for this used in KF papers is &quot;update rejection&quot; and a popular empirical method thresholding each update based on Mahalanobis distance (see &lt;a href=&quot;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.128.9319&amp;amp;rep=rep1&amp;amp;type=pdf&quot; rel=&quot;noreferrer&quot;&gt;1&lt;/a&gt; section IIIE). Before implementing this, simply increase the measurement noise in your filter and see if it gives you acceptable results. If you see a high correlation between unacceptable state error and the &quot;outlier&quot; then you will need update rejection.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;A very good read is: &lt;a href=&quot;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.128.9319&amp;amp;rep=rep1&amp;amp;type=pdf&quot; rel=&quot;noreferrer&quot;&gt;A Kalman Filter-based Algorithm for IMU-Camera Calibration&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Aside: You can also do things like after every measurement update, saturate the state vector's velocities or positions (e.g. make sure it's not travelling 100m/s when it can only go 1m/s). Also be aware if you use Euler angles to represent your orientation then you will undoubtebly run in to problems if you operate near +/- 90 degree Pitch angles. Also problematic is if operating near the Yaw angle limits (angle wrap), typically only if you are controlling something based off the Yaw angle.&lt;/p&gt;&#xA;" OwnerUserId="8859" LastActivityDate="2015-12-26T11:19:30.393" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8754" PostTypeId="2" ParentId="7549" CreationDate="2015-12-26T11:57:14.683" Score="4" Body="&lt;p&gt;My experience with ready-made stereo solutions is that they (as @Ben has said) provide you with synchronized image pairs and well-defined baseline geometry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are on a low-budget, and you have the capability to fabricate your own stereo rig, then I'd suggest making your own aluminium stereo rig and buying two identical cameras and lenses, as you can choose your own baseline geometry. The cameras can be synced using trigger output from one camera to the trigger input to the next.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To generate disparity maps from that point is then a design choice for your system and is generally a trade-off between accuracy, robustness and speed. &#xA;For example; a system using sparse matching will estimate depth rather poorly (after interpolation) but this will be quick, and may be adequate for your purposes. More common is the use of a dense matching algorithm which can be slow, but GPU parallelism gives significant processing time reduction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some references:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://83.212.134.96/robotics/wp-content/uploads/2011/12/review-of-stereo-matching-algorithms-for-3d-vision.pdf&quot; rel=&quot;nofollow&quot;&gt;Table 1 in this paper&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://soe.rutgers.edu/~meer/TEACHTOO/PAPERS/Szeliskistereodraft.pdf&quot; rel=&quot;nofollow&quot;&gt;A good overview and detail in this thesis&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;EDIT:&#xA;I've now tried both the Realsense F200 and R200 and I've seen the ZED in action via a colleague. The F200 is coded-light monocular, the R200 is infrared-stereo with an additional projected texture for better disparity matching. Both are less than $200USD and work at around 30FPS and do the &lt;strong&gt;depth calculation on-board&lt;/strong&gt;. The F200 gives much smaller spatial and depth resolution at the cost of poor performance after about 1.5m or in sunlight. The R200 has poor performance at close ranges &amp;lt;1m.&lt;/p&gt;&#xA;" OwnerUserId="8859" LastEditorUserId="8859" LastEditDate="2016-07-24T02:03:46.847" LastActivityDate="2016-07-24T02:03:46.847" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8756" PostTypeId="2" ParentId="2330" CreationDate="2015-12-27T03:27:36.163" Score="0" Body="&lt;p&gt;Has anyone tried hooking a soloshot camera base to a quadcopter? That could give you accurate mapping of an area without requiring a GPS. Just a half a minute of scanning with a camera and the base can track anyone with a tag. Find some way to take that data and map flight paths would be amazing.&lt;/p&gt;&#xA;" OwnerUserId="11413" LastActivityDate="2015-12-27T03:27:36.163" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8757" PostTypeId="1" CreationDate="2015-12-27T13:42:23.373" Score="3" ViewCount="1949" Body="&lt;p&gt;I have studied &lt;a href=&quot;http://www.clausbrenner.de/slam.html&quot; rel=&quot;nofollow&quot;&gt;Claus Brenner's lectures&lt;/a&gt; on how to implement the FastSLAM 1.0 algorithm, where each particle maintains the robot pose, and maintains EKF's of the landmarks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I'd like to implement FastSlam 2.0. Which I understand uses particle filters completely. Is this the same as FS 1.0, but instead of each particle maintaining an EKF of the landmark, each particle maintains yet another array of particle filters for landmarks?&lt;/p&gt;&#xA;" OwnerUserId="10379" LastEditorUserId="9176" LastEditDate="2015-12-28T05:12:34.483" LastActivityDate="2020-02-14T18:03:41.590" Title="FastSlam 2.0 Implementation?" Tags="&lt;slam&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8758" PostTypeId="1" AcceptedAnswerId="8760" CreationDate="2015-12-28T05:26:35.417" Score="0" ViewCount="240" Body="&lt;p&gt;Good day,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a robot with an IMU that tells Yaw Rate, and Magnetic heading. It also tells Xvelocity and YVelocity at that instance of the vehicle, on the vehicle frame. (So irrespective of heading, if the robot moved forward, yvelocity would change for example)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming my robot starts at position (0,0) and Heading based on the Magnetic heading, I need to calculate the next position of the robot based on some world frame. How can I do this?&lt;/p&gt;&#xA;" OwnerUserId="10379" LastActivityDate="2016-01-06T07:12:44.890" Title="2D Robot Motion" Tags="&lt;mobile-robot&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8759" PostTypeId="2" ParentId="8749" CreationDate="2015-12-28T07:12:38.727" Score="3" Body="&lt;p&gt;I Would vote no.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Building a robotic arm yourself is quite difficult, but like others said, is possible. However, this will mean that you spend a lot of time building this and not focussing on your goal of learning about neural networks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to start with neural networks, I would vote to start with image recognition, or basic numerical problem solving, all of which can be done in software, without the need for mechanics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to test a neural network on a robot, I would vote to take an existing robot platform (can be an arm, or a rolling platform, or anything else) and load your neural network on the controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think this way, you will learn much more in less time. But if you want to learn how to build an arm, by all means, go ahead!&lt;/p&gt;&#xA;" OwnerUserId="11185" LastActivityDate="2015-12-28T07:12:38.727" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8760" PostTypeId="2" ParentId="8758" CreationDate="2015-12-28T07:18:09.457" Score="2" Body="&lt;p&gt;Use the basic formula's:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$x_t = x_0+v_x*t+\frac{1}{2}*a_x*t^2$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$y_t = y_0+v_y*t+\frac{1}{2}*a_y*t^2$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This way you can calculate all your $x$ and $y$ positions as long as your time steps are small enough so $v$ and $a$ don't change too much during each time step.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Edit:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since the magnetic heading ($\theta$) is known from the sensor, the values for $v_x$ and $v_y$ can be calculated:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$v_x = v_1*cos(\theta) +v_2*sin(\theta)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$v_y = v_2*cos(\theta) -v_1*sin(\theta)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In which $v_1$ is x-direction of your robot frame, $v_2$ is y-direction of your robot frame. $v_x$ is x-direction in world frame, $v_y$ is y-direction in world frame.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Edit 2:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your sensor outputs angular velocity instead of magnetic heading, you can calculate the heading like it is an angular position, so in the same way you would calculate position:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\theta_t = \theta_0 + \dot{\theta}*t+\frac{1}{2}*\ddot{\theta}*t^2$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here $\theta_0$ is your heading at the start (this should be known). $\dot{\theta}$ is your angular velocity and $\ddot{\theta}$ is your angular acceleration.&lt;/p&gt;&#xA;" OwnerUserId="11185" LastEditorUserId="11185" LastEditDate="2016-01-06T07:12:44.890" LastActivityDate="2016-01-06T07:12:44.890" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="8761" PostTypeId="1" AcceptedAnswerId="8777" CreationDate="2015-12-28T15:13:51.943" Score="1" ViewCount="171" Body="&lt;p&gt;I have to program an autonomous robot to traverse through a grid given in the following figure.&lt;br/&gt;&#xA;But the main problem is that the nodes to visit is not known beforehand, it will be received by the bot in real time.&lt;br/&gt;&#xA;E.g.- after reaching the node 19, the bot now has to go to node 6. The shortest path(19-17-7-6) can be calculated by Dijkstra algo but i don't know how to make the robot traverse that path.&lt;br/&gt;&#xA;Any idea ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/y7EBi.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/y7EBi.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: Sorry for not making the question clear enough.&lt;br/&gt;&#xA;I am facing the problem in determining the current position and the direction the robot is facing so i can't define the set of commands (turn left/right/forward) to traverse to the next desired node.&lt;br/&gt;&#xA;I am thinking about an extra array for previously visited nodes and the current node and an extra variable for facing direction.&lt;br/&gt;&#xA;But for that i will have to define command sets for each node from each and every node.&lt;br/&gt;&#xA;Any better idea ?&lt;/p&gt;&#xA;" OwnerUserId="11221" LastEditorUserId="11221" LastEditDate="2015-12-30T03:31:25.857" LastActivityDate="2015-12-30T16:39:04.097" Title="Completely autonomous traversal of a planar graph" Tags="&lt;mobile-robot&gt;&lt;automatic&gt;&lt;dynamic-programming&gt;" AnswerCount="2" CommentCount="7" ClosedDate="2016-01-04T11:42:01.173" ContentLicense="CC BY-SA 3.0" />
  <row Id="8762" PostTypeId="2" ParentId="4312" CreationDate="2015-12-29T00:08:20.743" Score="3" Body="&lt;p&gt;The &lt;a href=&quot;http://navspark.mybigcommerce.com/ns-hp-rtk-capable-gps-receiver/&quot; rel=&quot;nofollow noreferrer&quot;&gt;NS-HP&lt;/a&gt; is a $50 RTK-capable GPS receiver providing centimeter-level accuracy:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;NS-HP is a high performance GPS receiver capable of 2 / 4 / 5 / 8 / 10 / 20 / 25 / 40 / 50 Hz update rate. At 1Hz update rate, NS-HP can accept RTCM 3.x message type 1002, 1004, 1005, and 1006, or SkyTraq raw measurement data from a base station to perform carrier phase RTK processing, achieving centimeter-level accuracy relative positioning.&lt;/p&gt;&#xA;&lt;p&gt;One NS-HP is needed if wishing to use with other RTCM 3.x RTK base station within 10Km operating range. Two NS-HP is needed if wishing to setup a local NS-HP RTK base station to work with another NS-HP rover.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="11422" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2015-12-29T21:00:37.397" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8763" PostTypeId="1" CreationDate="2015-12-29T03:27:01.587" Score="3" ViewCount="1849" Body="&lt;p&gt;I just got a Create 2 for Christmas, and while I'm planning to create with it (obviously), I'd like to use it around the house as a vacuum if at all possible. I've heard that you can buy parts for the Roomba and throw them on to this chassis, but I wanted to confirm/refute that before I bought anything. Is that possible or am I crazy?&lt;/p&gt;&#xA;" OwnerUserId="11423" LastActivityDate="2016-02-10T17:38:55.247" Title="iRobot Create 2 to Vacuum?" Tags="&lt;irobot-create&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2016-02-11T20:13:00.280" ContentLicense="CC BY-SA 3.0" />
  <row Id="8764" PostTypeId="2" ParentId="8761" CreationDate="2015-12-29T05:57:41.153" Score="-1" Body="&lt;p&gt;There are generally three parts to a simple roboitic system:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Guidance &#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;How do I get to my goal?&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;extends to state-space, not just position of robot&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Navigation&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Where am I?&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;measurement of the robot's state&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Control&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;How do I use the actuators to achieve my goal, given my current state.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Your path-planning application that uses Djekstra's algorithm to find a path covers only the Guidance part. You still need to be able to estimate where you are, then change your actuators (wheel direction, speed etc..) in order to achieve your goal position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can do all this in simulation with &lt;a href=&quot;http://gazebosim.org/tutorials?tut=ros_overview&quot; rel=&quot;nofollow&quot;&gt;Gazebo + ROS&lt;/a&gt;, I think everything you need is already developed open-source in ROS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A very good introductory resource is from Peter Corke &lt;a href=&quot;http://www.petercorke.com/RVC/&quot; rel=&quot;nofollow&quot;&gt;&quot;Robotics, Vision and Control&quot;&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="8859" LastActivityDate="2015-12-29T05:57:41.153" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8765" PostTypeId="1" CreationDate="2015-12-29T06:44:43.463" Score="0" ViewCount="170" Body="&lt;p&gt;I recently googled about Pepper robot and I wonder how one could write apps for it and get money for them. As far as I know they have app store, but does it sell apps or give them for free? (All info I googled myself is rather incomplete and old - probably outdated)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also I believe that apps for such (or similar) robots is the potential multibillion-dollar market. What do you think about that?&lt;/p&gt;&#xA;" OwnerUserId="11420" LastEditorUserId="37" LastEditDate="2018-03-08T11:21:37.770" LastActivityDate="2018-03-08T11:21:37.770" Title="Apps for Pepper robot" Tags="&lt;mobile-robot&gt;&lt;pepper&gt;" AnswerCount="1" CommentCount="3" ClosedDate="2016-01-04T10:50:28.000" ContentLicense="CC BY-SA 3.0" />
  <row Id="8767" PostTypeId="2" ParentId="4312" CreationDate="2015-12-29T08:13:14.050" Score="2" Body="&lt;p&gt;&lt;a href=&quot;http://www.emlid.com/shop/reach-rtk-kit/&quot; rel=&quot;nofollow&quot;&gt;Reach RTK&lt;/a&gt; (USD$570) looks really good as it is, but what looks promising is that there is an IMU on board, which &lt;a href=&quot;http://community.emlid.com/t/reach-rtk-module-availability/212/34&quot; rel=&quot;nofollow&quot;&gt;when integrated&lt;/a&gt; should enable less than 1cm error (std. dev.) once the INS has converged.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should also consider that, because you are post-processing your data, to use a cheap GPS and &lt;a href=&quot;https://en.wikipedia.org/wiki/Exponential_smoothing&quot; rel=&quot;nofollow&quot;&gt;simply smooth the data using an exponential moving average&lt;/a&gt; or other smoothing technique. Alternatively if you need a high rate of pose data, add an IMU and use a Kalman Filter variant to fuse the data (much more troublesome).&lt;/p&gt;&#xA;" OwnerUserId="8859" LastActivityDate="2015-12-29T08:13:14.050" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8768" PostTypeId="1" CreationDate="2015-12-29T08:57:07.877" Score="3" ViewCount="875" Body="&lt;p&gt;I'm hoping to move a plate (3MM x 45MM) back and forth using a DC motor. Here's my idea so far:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/mrN0d.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/mrN0d.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The motor drives a threaded shaft which is attached on one side of the plate. To help alignment, a rod is added to the other side of the plate (red). My guess is that if it's just a rod in a through hole, it could potentially jam.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;AFAIK, usually, in bigger setups, a linear bearing would come in handy. However, given that the plate is just 3MM thick, are there better ways to help alignment? Could making the edge around the through hole like the inside of a donut help? Something like&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/oqM9j.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/oqM9j.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it easy to make? In fact, is my concern actually valid?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt; The centre area of the plate needs to be kept clear. This is intended to be part of a (~10MM thick) pole climber, where several guide rollers are fitted on the left side of the plate and a motor driven roller is on the left of the part (not depicted). So the idea is the press the guide roller against the pole until the two rollers have a good grip on the pole. The whole car is fairly light, so the force expected is around 30N.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's a more complete depiction:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/AkVD0.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/AkVD0.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The rollers are spring loaded, but they need to be released and retracted - and adjusted for different pole widths.&lt;/p&gt;&#xA;" OwnerUserId="11392" LastEditorUserId="11392" LastEditDate="2015-12-30T16:25:44.263" LastActivityDate="2017-10-05T15:36:05.120" Title="Moving a small plate back and forth" Tags="&lt;motor&gt;&lt;linear-bearing&gt;&lt;tracks&gt;" AnswerCount="5" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="8769" PostTypeId="2" ParentId="8757" CreationDate="2015-12-29T09:36:42.317" Score="4" Body="&lt;p&gt;I suggest you to give a look to Sebastian Thrun's work &lt;a href=&quot;http://robots.stanford.edu/papers/Montemerlo03a.html&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;. In fastSLAM (both 1.0 and 2.0) each particle maintains an array which contains the states of the landmarks as well as the robot's states. The main novelty of fastSLAM 2.0 consists in the update of the robot's pose which does not only keep into account of the odometry but also of the most recent measurement.&lt;/p&gt;&#xA;" OwnerUserId="11425" LastActivityDate="2015-12-29T09:36:42.317" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8770" PostTypeId="2" ParentId="8768" CreationDate="2015-12-29T11:25:34.303" Score="2" Body="&lt;p&gt;From the sound of it you require smooth continuous operation in this application. &#xA;To guarantee this you can use a bearing (cheap $3-5 USD ebay bearings would be fine unless you have non-trivial load needs). In your case the load is &lt;a href=&quot;http://www.skf.com/au/products/bearings-units-housings/spherical-plain-bearings-bushings-rod-ends/general/selection-of-bearing-type/index.html&quot; rel=&quot;nofollow&quot;&gt;radial&lt;/a&gt;.&#xA;Depending which bearing you use, you can get around 20 degrees of misalignment (depending on fit and material) before the interface will jam.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Smoothing the interface between the guide axles and plate would possibly suffice depending on what material the interfacing components are made of, and how much load the interface should carry.&#xA;The less friction between the interfacing parts, the more smoothly it will slide. A low-friction polymer (e.g. PTFE) would be good for this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your suggestion to put a fillet radius on the interface edges would allow a greater misalignment between parts, however may not reduce friction significantly (unless one of the parts is significantly deformable under sliding conditions).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should aim to reduce friction by picking your materials to have low frictional coefficients, also a small radius to allow slight misalignment, according to your manufacturing techniques and errors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because your plate is thin and you may have trouble pressing a bearing into it, you should use a &lt;strong&gt;&lt;em&gt;flange-mounted&lt;/strong&gt; bearing&lt;/em&gt; &lt;a href=&quot;http://www.micromech.co.uk/dir_suppliers/spyraflo_gfx/flangemount.jpg&quot; rel=&quot;nofollow&quot;&gt;like one of these&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="8859" LastEditorUserId="8859" LastEditDate="2015-12-29T11:45:54.033" LastActivityDate="2015-12-29T11:45:54.033" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="8771" PostTypeId="2" ParentId="8768" CreationDate="2015-12-29T13:24:12.277" Score="2" Body="&lt;p&gt;Your setup is prone to binding because of the physical arrangement. You have the leadscrew on one side and the bearing on the other, so the leadscrew is unevenly supported. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would put the leadscrew in the middle, with rails on either side. Then, instead of a bearing, I would use &lt;a href=&quot;http://www.mcmaster.com/#bushings/=10g6cw4&quot; rel=&quot;nofollow&quot;&gt;bushings&lt;/a&gt;, which you could just epoxy in place.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How prone to jamming this is depends on your alignment, tolerances, and the load you place on the plate. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;:EDIT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now that I see your application, can you not just use a spring? Does it need to grab/release the pole on its own or can you pull a spring-loaded wheel platform back, put it on the pole, then release it? &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2015-12-29T21:52:40.997" LastActivityDate="2015-12-29T21:52:40.997" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="8772" PostTypeId="2" ParentId="8768" CreationDate="2015-12-29T18:58:02.397" Score="0" Body="&lt;p&gt;You may be able to find readily-available off the shelf solutions for your implementation.  Look at the offerings by companies such as Thompson, Igus and the like.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.thomsonlinear.com/website/com/eng/products/lms.php&quot; rel=&quot;nofollow&quot;&gt;http://www.thomsonlinear.com/website/com/eng/products/lms.php&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.igus.com/Drylin?C=US&amp;amp;L=en&quot; rel=&quot;nofollow&quot;&gt;http://www.igus.com/Drylin?C=US&amp;amp;L=en&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are integrated assemblies, both belt driven and lead-screw driven, that would eliminate the issue you are having in trying to design a custom solution.  There are also links to &quot;dry&quot; linear bearings on the Igus page, which would support the axial motion you are concerned with, in the event you do need to design a custom mechanical subsystem.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2015-12-29T18:58:02.397" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8773" PostTypeId="2" ParentId="8763" CreationDate="2015-12-29T21:07:49.157" Score="2" Body="&lt;p&gt;Yes, you can buy Roomba 600 accessories from &lt;a href=&quot;http://store.irobot.com/family/index.jsp?categoryId=13271022&amp;amp;cp=3744764&quot; rel=&quot;nofollow&quot;&gt;store.irobot.com&lt;/a&gt; to turn your Create2 back into a working vacuum.  Note however that there is no way to &quot;cheat the system&quot;.  While the Create2 is cheaper than the Roomba 650, it will cost you way more in spare parts to return its vacuuming functionality than if you had just bought a 650 in the first place.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-12-29T21:07:49.157" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8774" PostTypeId="2" ParentId="8765" CreationDate="2015-12-29T21:10:35.530" Score="1" Body="&lt;p&gt;Well, there is &lt;a href=&quot;http://www.robotappstore.com/&quot; rel=&quot;nofollow&quot;&gt;robotappstore.com&lt;/a&gt;. But i really doubt it is that large of a market.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2015-12-29T21:10:35.530" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8775" PostTypeId="1" CreationDate="2015-12-30T11:02:49.697" Score="4" ViewCount="99" Body="&lt;p&gt;Does anyone know of a good (low profile) way to attach the threaded (chamfered) end of a M5 screw shaft to a 30MM (30T 1M) plastic cog wheel? Would it be a good idea to widen the shaft hole and just let the threads grip the hole?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt; The torque will be around 6kg-cm and the plastic I'm looking at is POM.&lt;/p&gt;&#xA;" OwnerUserId="11437" LastEditorUserId="11437" LastEditDate="2015-12-30T17:09:23.073" LastActivityDate="2016-01-29T19:17:39.800" Title="Attaching a M5 screw shaft to a cog wheel" Tags="&lt;mechanism&gt;&lt;torque&gt;&lt;gearing&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8776" PostTypeId="2" ParentId="8775" CreationDate="2015-12-30T15:32:00.340" Score="2" Body="&lt;p&gt;A full answer depends on what plastic and what the load will be.  Having a depth of 30 mm does give you a lot of options.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can drill and tap ABS just fine, and I've had success drilling and tapping acrylic as long as I kept the tool slow so as not to overheat and warp.  We have also used self-tapping screws for Delrin and UHMW with good results (and some Loctite plastic bonder).  For plastics which are too brittle or too soft for direct threading, a very standard method is to place a threaded insert into a through-hole in the plastic.  Helicoil, Dodge, Acme, and others make these inserts.  The method of adhering the insert to the plastic depends on the process.  Look at the expansion inserts on pages 24 &amp;amp; 25 of this Dodge catalog:  &lt;a href=&quot;http://www.afi.cc/contentonly.aspx?file=images/vendors/DodgeInserts.pdf&quot; rel=&quot;nofollow&quot;&gt;http://www.afi.cc/contentonly.aspx?file=images/vendors/DodgeInserts.pdf&lt;/a&gt;   Those seem like they would work well for you, as would the self-threading ones on page 28.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT (load identified):  The 6 kg cm value is approximately 0.59 N m.  PEM's data for their M5 press-in threaded insert (pages 15 and 18 of &lt;a href=&quot;http://www.pemnet.com/fastening_products/pdf/sidata.pdf&quot; rel=&quot;nofollow&quot;&gt;http://www.pemnet.com/fastening_products/pdf/sidata.pdf&lt;/a&gt;) lists a torque limit of 4.02 N m for insertion into a polycarbonate plastic.  That is plenty of margin.  Given the large margin you could likely eliminate the Loctite step altogether. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT 2 (plastic identified):  With POM you can use brass threaded inserts.  It is also a good candidate for direct drilling and tapping since it has low creep.  If you have cyclic loading I would go with the threaded brass inserts to ensure the threads remain consistent over the device's life.  If you are simply fastening items, and just need them to hold for your 6 kg cm torque load without other significant stresses, you should be fine with using thread-forming screws or the drill and tap method.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastEditorUserId="11125" LastEditDate="2015-12-30T18:49:02.483" LastActivityDate="2015-12-30T18:49:02.483" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8777" PostTypeId="2" ParentId="8761" CreationDate="2015-12-30T16:39:04.097" Score="0" Body="&lt;p&gt;You are absolutely correct that Dijkstra's Shortest Path Algorithm can tell you the correct path for the robot to follow. The problem seems to be that you cannot tell where the robot is, and what actions to make the robot take to get to the next node. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's no &quot;right&quot; answer here, but I can offer some guidance about how I'd do it.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Where is the robot&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If the robot can observe the configuration of the outgoing edges, then he can narrow down his location to a set of possible nodes. For example, if there are two outgoing edges, he can only be in 2,3,5,6,8,9, 11, or 12. Similarly for 3, and 4 outgoing is uniquely the center&lt;/li&gt;&#xA;&lt;li&gt;Since you say you have to deal with the robot's orientation when moving, it is probably safe to assume the robot can measure its orientation or at least discover it relative to the current configuration of edges. If the robot has some way of knowing his orientation, then the number of edges and their cardinal direction would help even more. For example, with two edges &lt;em&gt;facing north and south&lt;/em&gt;, then we know the robot is at 3,5,9, or 11.&lt;/li&gt;&#xA;&lt;li&gt;Furthermore, if the robot knew the history of possible locations, then we can also incorporate that information. If we knew the robot had two outgoing edges facing east and west, then he moved to the westmost edge and now had two edges facing north and south, then we know the robot is now at 3 and came from 2. What's cool here, is the robot did not know from just the edges, it was the &lt;em&gt;action of moving&lt;/em&gt; that caused it to figure out where it was.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I might do that as follows:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Keep a separate list of all nodes and their edges. Assume all nodes are &quot;unmarked&quot;&lt;/li&gt;&#xA;&lt;li&gt;At the start&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Observe the number of outgoing edges at the current node&lt;/li&gt;&#xA;&lt;li&gt;Mark all nodes with a different number of edges&lt;/li&gt;&#xA;&lt;li&gt;Observe the outgoing edge orientations, and mark all nodes which have different orientation (i.e., if we notice an edge going north, mark all nodes which don't have an edge going north).&lt;/li&gt;&#xA;&lt;li&gt;At this point, we know the robot is only in an unmarked node&lt;/li&gt;&#xA;&lt;li&gt;Travel along an arbitrary edge (but not back to start)&lt;/li&gt;&#xA;&lt;li&gt;Check the new outgoing edges. Mark all nodes which have different outgoing edges. &lt;/li&gt;&#xA;&lt;li&gt;Additionally, mark all nodes which have the same edges but are not connected to an unmarked node&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Repeat this process until only one unmarked node remains. Without orientation, this will never happen though (for example, 4 and 10 are identical up to orientation)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have no orientation information, and no way to observe outgoing edges, then history is all you have. If you know what node you started at, then by all means, you must come up with a complete sequence of actions to get the robot to the desired node. Here's how we might do that.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Getting there&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Let's assume the robot starts at 1 and has to get to 21. I'd program a small subroutine that did the following.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Call dijkstra to get the shortest path.&lt;/li&gt;&#xA;&lt;li&gt;Until reached:  &#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Turn the robot toward the next node&lt;/li&gt;&#xA;&lt;li&gt;take the edge&lt;/li&gt;&#xA;&lt;li&gt;Update the robot's current node&lt;/li&gt;&#xA;&lt;li&gt;Update the next node from the list in Dijkstra's output&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Using this, the robot always knows his current node and next node. We only assumed that we knew the starting orientation. &lt;/p&gt;&#xA;" OwnerUserId="163" LastActivityDate="2015-12-30T16:39:04.097" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8778" PostTypeId="2" ParentId="780" CreationDate="2015-12-30T16:58:43.170" Score="2" Body="&lt;p&gt;&lt;strong&gt;Actually, robots do exist in your daily life.&lt;/strong&gt; Lots of them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just not like you're expecting them to. Can an AI define tasks for itself, work towards a goal, and interact purposefully with humans? No. Even the best AI that exists is still arguably not much more than &lt;a href=&quot;https://en.wikipedia.org/wiki/Pattern_recognition&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pattern Recognition&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you'll pardon the analogy, we aren't (and imho shouldn't be) building &lt;em&gt;living machines&lt;/em&gt; which is what many people expect from advanced robotics. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead, we're building a real-life equivalent of a &lt;a href=&quot;https://en.wikipedia.org/wiki/Magic_item_%28Dungeons_%26_Dragons%29&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Magic Item&quot;&gt;&lt;em&gt;magic item&lt;/em&gt;&lt;/a&gt;. They help the user (us) by performing a &lt;em&gt;very specific task&lt;/em&gt;, or simply &lt;em&gt;making such a task easier for us&lt;/em&gt;. Some of these robots are so old and pervasive you don't even recognize them as such.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A robot could be loosely defined as a machine that senses its environment to make decisions and perform some task. Can we think of a few of these machines?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Wa5mk.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Wa5mk.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/pykNC.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/pykNC.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/3omvQ.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3omvQ.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/IG44b.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/IG44b.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/U066O.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/U066O.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/UKxYd.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/UKxYd.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="163" LastEditorUserId="163" LastEditDate="2015-12-30T17:05:49.660" LastActivityDate="2015-12-30T17:05:49.660" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8779" PostTypeId="1" CreationDate="2015-12-30T19:15:08.527" Score="1" ViewCount="93" Body="&lt;p&gt;I have a Panasonic MSMO22F2G Servo Motor that I'm using as a stepper motor. The motor has 4 wires coming out of a port farther to the front, and 11 wires coming out of a port towards the rear of the unit (presumed to be the encoder). I am trying to drive the motor with an arduino motor shield. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is this, how do i hook it up?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have read that a stepper with 4 leads is a bipolar stepper, and that you group same coil wires together. I found that 3 wires on my stepper were on the same coil and the fourth seems to have no effect on the stepper. My checking process was using an ohm meter to see what was connected to what, as well as connecting wires and feeling the resistance.&lt;/p&gt;&#xA;" OwnerUserId="11440" LastActivityDate="2015-12-30T19:15:08.527" Title="Panasonic MSMO22F2G (stepper motor hook-up)" Tags="&lt;arduino&gt;&lt;stepper-motor&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8781" PostTypeId="2" ParentId="780" CreationDate="2015-12-31T18:12:40.467" Score="2" Body="&lt;p&gt;Your first 2 reasons for having a robot are still wrong today, that is 2 years after you posted.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;There are no AI algorithms so far. What currently exists are somewhat smart action-reaction scenarios. I've been working in crane automization in a cement plant between 1997 and 2000. Various sensors sent notifications that new material was needed, so a new task was created and scheduled. Absolutely no magic in that. In the end 5 crane drivers lost their jobs because some software with lot of sensors did the same.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;For my needs there are still no usable sensors. I need a robot that cleans my appartment, especially the bathroom and kitchen. Where is the sensor that decides if a towel is dirty? If the window  or floor needs cleaning? Where is the robot to wash my dishes and place it it into the cabinet afterwards?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;People are still waiting for a software that passes the Turing test. When that is successfully done, the first step to AI software has been made.&lt;/p&gt;&#xA;" OwnerUserId="1251" LastActivityDate="2015-12-31T18:12:40.467" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8785" PostTypeId="1" AcceptedAnswerId="8789" CreationDate="2016-01-02T01:41:47.947" Score="1" ViewCount="84" Body="&lt;p&gt;Just a short question: The iRobot Create 2 Open Interface spec says:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Serial sequence: [167] [Days] [Sun Hour] [Sun Minute] [Mon Hour] etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can somebody explain to me, what &quot;Days&quot; stands for?&lt;/p&gt;&#xA;" OwnerUserId="11452" LastEditorUserId="110" LastEditDate="2016-01-03T02:21:59.063" LastActivityDate="2016-01-03T02:21:59.063" Title="Roomba schedule opcode: 167, byte 1" Tags="&lt;irobot-create&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8786" PostTypeId="1" CreationDate="2016-01-02T08:59:22.833" Score="2" ViewCount="372" Body="&lt;p&gt;I have a friend who is getting into quadcopters and being the good techie buddy, I'm trying to find the right technology for battery monitoring so his expensive machine does not fall out of the sky unexpectedly. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So far the only technology for hobbyists that I am seeing is voltage monitors, which aren't really useful for this battery chemistry. With the flat voltage curve LiIon has I'd expect a voltage monitor to falsely report a low battery when you draw extra current and indeed I'm seeing exactly this when my buddy does fast maneuvers mid flight.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my day job we use charge counting battery monitors (BMS) for this battery chemistry. Usually custom designed for the battery pack (just like for laptop batteries, etc). Sometimes built into the &lt;a href=&quot;http://www.bren-tronics.com/batteries/rechargeable/bt-70791ck.html&quot; rel=&quot;nofollow&quot;&gt;battery pack&lt;/a&gt;, or sold by &lt;a href=&quot;http://www.batteryspace.com/Smart-Battery-Systems-SBS-with-SmBus-V1.1-support-for-14.8V-6.4Ah/10Ah.aspx&quot; rel=&quot;nofollow&quot;&gt;cell suppliers&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Have I missed a product for electric aircraft? Are hobbyists in the battery dark ages?&lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="184" LastEditDate="2016-01-03T04:49:46.507" LastActivityDate="2016-01-07T19:50:08.390" Title="Are there any Lithium Ion battery monitors designed for hobbyists (quadcopters)?" Tags="&lt;battery&gt;&lt;lithium-polymer&gt;" AnswerCount="3" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="8787" PostTypeId="1" AcceptedAnswerId="8813" CreationDate="2016-01-02T11:08:08.410" Score="4" ViewCount="403" Body="&lt;p&gt;I've built quadruped robot which is using 12 servos (TowerPro SG90 Servo) and Raspberry Pi (model B 1). Right now I'm &quot;feeding&quot; it with 5V 2.5A charger. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I make it un-tethered? What should I look out for when selecting batteries? Also, I think that I need to separate powering of RPi and servos because power is &quot;jumping&quot; when it moves and that isn't good for RPi.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A little video - &lt;a href=&quot;https://www.youtube.com/watch?v=o63akKmY07w&quot; rel=&quot;nofollow&quot;&gt;Testing Walking Algorithm&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11453" LastEditorUserId="37" LastEditDate="2016-01-05T16:03:28.913" LastActivityDate="2016-01-07T12:23:58.820" Title="Best power solution for my robot" Tags="&lt;mobile-robot&gt;&lt;raspberry-pi&gt;&lt;power&gt;&lt;battery&gt;&lt;walking-robot&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8788" PostTypeId="2" ParentId="8786" CreationDate="2016-01-02T12:37:02.323" Score="0" Body="&lt;p&gt;Texas Instruments makes a line of &quot;battery fuel gage&quot; IC's. I don't know that they come in a standalone solution, but it shouldn't be too big of a deal to poll it with the microcontroller that runs the flight controls. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Read more &lt;a href=&quot;http://www.ti.com/product/BQ27742-G1&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;, but highlights include:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The fuel gauge provides information such as remaining battery capacity (mAh), state-of-charge (%), runtime to empty (minutes), voltage (mV), current (mA), and temperature (°C), as well as recording vital parameters throughout the lifetime of the battery. The device also supports interrupts to the host to indicate detection of a variety of important battery conditions to the system.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I think the link I posted is to one particular chip, but there's a family of them. The one you (your friend) will need specifically depends on capacity, current, etc. Hope this helps! &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-01-02T12:37:02.323" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8789" PostTypeId="2" ParentId="8785" CreationDate="2016-01-02T19:02:00.993" Score="0" Body="&lt;p&gt;of course, it is a roomba create 2. sorry for this.. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The last comment helped: the requested variable stands for: the sum of days of a week, the roomba is meant to work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Value Day: 1 Sunday, 2 Monday, 4 Tuesday, 8 Wednesday, 16 Thursday, 32 Friday, 64 Saturday&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Examples: 127 = every day, 40 = Wednesday and Friday&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you! :) &lt;/p&gt;&#xA;" OwnerUserId="11452" LastActivityDate="2016-01-02T19:02:00.993" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8790" PostTypeId="2" ParentId="8768" CreationDate="2016-01-02T21:19:24.540" Score="1" Body="&lt;p&gt;Another, similar, configuration is a linear actuator along the center axis of the plate with two guide rails one on both side of the plate.  As said by @Chuck this would help with alignment.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are many DC actuators, such as Actuonix Motion Devices (formerly Firgelli Technologies) &lt;a href=&quot;https://www.actuonix.com/Default.asp&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead of DC motor, you can use stepper linear actuators such as &lt;a href=&quot;http://www.haydonkerk.com/LinearActuatorProducts/StepperMotorLinearActuators/tabid/66/Default.aspx&quot; rel=&quot;nofollow noreferrer&quot;&gt;these from Haydon Kerk&lt;/a&gt;, using the captive style. They have a good range of thrust force options among the different motor sizes.    &lt;/p&gt;&#xA;" OwnerUserId="11458" LastEditorUserId="-1" LastEditDate="2017-10-05T15:36:05.120" LastActivityDate="2017-10-05T15:36:05.120" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8791" PostTypeId="2" ParentId="6463" CreationDate="2016-01-03T01:05:30.573" Score="2" Body="&lt;p&gt;I'm not sure that I've understood you and also this is my first answer, but I'll try my best.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Two years ago, I've faced the exact same challenge. Is there a way of building budget friendly mapping robot? Unfortunately, the answer to this question is not binary. There are so many variables that should be accounted such as movement of robot, movements in the environment, sensor sensivity, encoder sensivity, friction etc. Perhaps there are better questions. What is the ratio of accuracy to budget? Do we need a 3D or 2D map? How can we map an environment in 3D? What are the sources of error?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've looked for an answer and tried many things along the way. Some of them was cheaper and some of them was more convenient. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2&gt;1) IR/Sonar Sensor + Servo&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Most basic or &quot;primitive&quot; type of solution, also the first one I've tried. It consists of a simple wheeled platform, a servo (two if you want 3D) and an IR/Sonar sensor. You calculate the movement of robot by measuring distance from the front to the next obstacle, and you map the room/house by doing a sweeping motion with the servo + sensor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pros:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Budget friendly&lt;/li&gt;&#xA;&lt;li&gt;Extremely simple&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Cons:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Highly inaccurate&lt;/li&gt;&#xA;&lt;li&gt;Algorithm wise not scalable&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;My Suggestions:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to implement this way, pick Sonar sensors. The good ones are a little bit more expensive then most IR sensors but they won't get scrambled when you bump into a reflective surface. Also, make sure that you sweep few times to estimate distance with smaller errors.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2&gt;2) IR/Sonar Sensor + Encoders&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;A little bit more expensive this way, but a little bit more accurate so to say. The only change is that now the encoders define the position of the robot. Since we are getting the measurements from two seperate sources, we can calculate an error value more precisely. Unfortunately more problems start to occur this way. The encoders give accurate values, but can we really trust that? What if our robot slips during a movement? What if it gets stuck while moving to a carpet? Now we have to calculate different errors for different situations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pros:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Little bit expensive but still manageable&lt;/li&gt;&#xA;&lt;li&gt;Still simple enough&lt;/li&gt;&#xA;&lt;li&gt;Two sources of information&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Cons:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Two sources of error&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;My Suggestions:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Use rubber tires with small wheels, so that you can get a more precise value from encoders since needed wheel rotation for distance increases and minimize the slipping since rubber has greater friction.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2&gt;3) Xbox Kinect (or equivalent)&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;In my opinion the best choice for mapping, but not for robotics. Fairly cheap, can be found everywhere, very accurate and tons of tutorials exist. The key phrase is &quot;Point Cloud Map&quot;. The Kinect device sends many IR rays and then collects them. By combining this mechanic with the Kinect camera, you can attach every distance point a pixel. Thus it's called Point Cloud.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pros:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Best accuracy/budget ration&lt;/li&gt;&#xA;&lt;li&gt;Many resources available&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Cons:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;It's not very robotics friendly due to its size&lt;/li&gt;&#xA;&lt;li&gt;Another computating device (such as a notebook) is needed to process the data&lt;/li&gt;&#xA;&lt;li&gt;Not very easy to tinker with&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;My Suggestions:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A wider robot with a small device to buffer the data (such as Raspberry Pi) would be ideal. You could connect the Kinect to Raspberry Pi and with a wifi dongle you can buffer mapping data to your computer to process, but since you would need an external usb hub too I wouldn't recommend this way.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2&gt;4) Laser Scanners / Radar Modules&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Even though I think this is not suitable to your concept of mapping, I will mention this just as a reference. The industrial solution to mapping because of best precision. Many unmanned vehicles, even the ones owned by the military use these devices. But of course they come with a price.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pros:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Best precision&lt;/li&gt;&#xA;&lt;li&gt;Highly durable and reliable&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Cons:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Extremely expensive&lt;/li&gt;&#xA;&lt;li&gt;Most of the time require a high power source&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;My Suggestions:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although this might be out of your league, you may still find inspiration in them. They more or less work with the same principle as IR Sensor + Servo combos.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;I've tried my best to mention all current trends in SLAM technology even though you've mentioned that you only have a single IR sensor because I wanted this to be a source for future projects. I hope it helps to you and the others.&lt;/p&gt;&#xA;" OwnerUserId="11459" LastActivityDate="2016-01-03T01:05:30.573" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8794" PostTypeId="2" ParentId="8786" CreationDate="2016-01-03T21:12:32.857" Score="1" Body="&lt;p&gt;Proper Lithium Ion battery fuel gauging and management is not really used in the hobby world. System specific batteries (3DR Solo, DJI Phantom) exist but generic components for people building their systems from components do not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Probably not worth the cost for mini-quad racing type stuff. Possibly a business opportunity for prosumer systems.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2016-01-03T21:12:32.857" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8796" PostTypeId="2" ParentId="8787" CreationDate="2016-01-04T10:28:08.970" Score="0" Body="&lt;p&gt;I had the same problem when I made my first RC boat completely by myself. From my point of view, you can use two small-sized Li-Po batteries, one for each device. For the Raspberry, I would choose one with about 1000mAh, 5V, with the highest discharge rate possible. You can use the battery you already have for the servos, or get another one 5V, with lots of mAh and a high discharge rate, too. Or use the one you have for the Raspberry and get one for the servos.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS: That's why I care for the discharge rate: &lt;a href=&quot;https://www.commonsenserc.com/page.php?page=c_ratings_explained.html&quot; rel=&quot;nofollow&quot;&gt;What's in a &quot;C&quot; rating?&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11472" LastEditorUserId="9176" LastEditDate="2016-01-04T10:49:27.293" LastActivityDate="2016-01-04T10:49:27.293" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="8797" PostTypeId="1" CreationDate="2016-01-04T12:13:08.190" Score="1" ViewCount="132" Body="&lt;p&gt;I have a rather simple setup for my robotic extender. The DC motor turns a shaft with a worm on it. The worm connects to a small worm gear (green) which itself has a small gear (red) on the same shaft connecting to a large gear (blue):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/v2PNY.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/v2PNY.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The DC motor's gearbox gives around 50-100rpm and has a stall torque of around 2kg-cm. The small gear should be around 15MM tall and the large gear should be around 45MM tall.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the load (on the large gear) has a maximum torque of 5kg-cm and a typical torque of 3kg-cm, could the two gears be made from plastic and be of module (metric form for pitch, as @Chuck pointed out) 0.5? Is a higher module needed? How about the worm, could it be made of plastic (nylon?)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help will be appreciated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt; Fixed typos and updated diagram.&lt;/p&gt;&#xA;" OwnerUserId="11392" LastEditorUserId="11392" LastEditDate="2016-01-04T19:01:45.537" LastActivityDate="2016-01-05T04:23:24.703" Title="Suitable gear construction for a robotic extender - plastic?" Tags="&lt;motor&gt;&lt;torque&gt;&lt;gearing&gt;" AnswerCount="2" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="8798" PostTypeId="2" ParentId="8302" CreationDate="2016-01-04T15:56:49.077" Score="2" Body="&lt;p&gt;Path planning would essentially be setting out a path on a particular terrain for the robot to navigate, primarily automatically, coupled with the shortest route detection avoiding obstacles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Motion planning could be termed as the the procedure by which you enable your robot to move - which type of sensors to use, what type of wheel to move, automatic or RC, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Path planning could also be termed an inherent software exercise and motion planning a hardware exercise.&lt;/p&gt;&#xA;" OwnerUserId="11464" LastActivityDate="2016-01-04T15:56:49.077" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8799" PostTypeId="2" ParentId="8797" CreationDate="2016-01-04T16:21:43.050" Score="3" Body="&lt;p&gt;What's the point of the middle gear? It's not doing anything for you reduction-wise because it's on a different shaft than the larger gear. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's an equation &lt;a href=&quot;http://www.sdp-si.com/plastic/design-of-plastic-gears.htm&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt; that should give you the maximum allowable force for a nylon worm gear (Equation 18-4).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A torque of 5 kg-cm caused by a force at (45/2) = 22.5mm (2.25cm) means the force is 2.2 kgf. While I detest &quot;kgf&quot; as a force unit, it's what the formula I linked uses as an output, so this is the number you would compare to the formula there. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your material is nylon and the pitch diameter is fixed, then the only thing you have to play with is the gear pitch and maybe the lead angle. You haven't specified a lead angle for the worm gear so I can't go any further than this. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Notice also &lt;a href=&quot;http://www.sdp-si.com/plastic/design-of-plastic-gears.htm&quot; rel=&quot;nofollow&quot;&gt;Equation 18-8&lt;/a&gt;, the sliding speed for the worm, and the limitations that this puts on your system as well. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would caution against using nylon gears for any power transmission application as I've found that the gears always strip. To be fair, I've always used off-the-shelf parts (servos, reduction gears, etc.) and not something I went through the effort to design myself. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2016-01-04T19:35:43.497" LastActivityDate="2016-01-04T19:35:43.497" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="8800" PostTypeId="2" ParentId="4523" CreationDate="2016-01-04T16:47:43.630" Score="0" Body="&lt;p&gt;Did you check out this website?&lt;a href=&quot;http://enkf.nersc.no/&quot; rel=&quot;nofollow&quot;&gt;http://enkf.nersc.no/&lt;/a&gt;&#xA;It seems that the authors have an extended literature on enKF and examples in Matlab and Fortran are provided.&lt;/p&gt;&#xA;" OwnerUserId="11425" LastActivityDate="2016-01-04T16:47:43.630" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8801" PostTypeId="2" ParentId="4523" CreationDate="2016-01-04T20:23:14.350" Score="1" Body="&lt;p&gt;Well let's see. &lt;a href=&quot;http://enkf.nersc.no/Publications/eve94a.pdf&quot; rel=&quot;nofollow&quot;&gt;The original paper&lt;/a&gt; has approximately 3,000 citations in various branches of literature, including numerous applied textbooks. I'd say this question lacks research, but given the large amount of follow-up literature, I understand how you may not be able to find a SLAM-specific implementation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was able to find many papers using enKF/enEKF for visual applications, but relatively few for true map-based SLAM. (I think the term SLAM is over-used and over-specific, but that's an aside.) If you relax your definition of a map to be any feature tracked across multiple sensor measurements, then you should also include:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Vehicle to vehicle localization. &lt;/li&gt;&#xA;&lt;li&gt;Visual feature tracking&lt;/li&gt;&#xA;&lt;li&gt;Target tracking from emplaced sensor measurements&lt;/li&gt;&#xA;&lt;li&gt;Self localization and state estimation&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;But, doing a search for &quot;SLAM&quot; in the context of directly citing the enKF article yielded only the following:  &lt;a href=&quot;http://link.springer.com/article/10.1007/s11771-015-2767-4&quot; rel=&quot;nofollow&quot;&gt;State estimation of connected vehicles using a nonlinear ensemble filter&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This does not preclude enKF-SLAM since my search was restrictive. &lt;/p&gt;&#xA;" OwnerUserId="163" LastActivityDate="2016-01-04T20:23:14.350" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8802" PostTypeId="2" ParentId="8768" CreationDate="2016-01-04T22:18:05.120" Score="1" Body="&lt;p&gt;Instead of a threaded rod and a non-threaded rod, use two threaded rods (i.e. replace the red rod in your diagram with a threaded rod) and drive them both from the same motor.  You're basically building a twin screw vise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/iLR8tJJ.gif&quot; alt=&quot;twin screw vise&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can also do this with gears:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://sandal-woodsblog.com/2011/07/22/a-mechanized-moxon-twin-drive-vise/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/q2iQV.jpg&quot; alt=&quot;geared twin drive vise&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2016-01-05T15:03:42.273" LastActivityDate="2016-01-05T15:03:42.273" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8803" PostTypeId="2" ParentId="8797" CreationDate="2016-01-05T04:23:24.703" Score="3" Body="&lt;p&gt;I've done a couple worm drive designs and I threw the numbers you gave (Assuming sd-spi nylatron gears) into my calculations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm using AGMA 6022-C93 Worm gear design guidelines for tooth width and thickness to get the shear area. I'm assuming 3 teeth in contact and mesh efficiency around 30%.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The tooth stresses are a little more than one order of magnitude below shear strength of the plastic, which means it will probably work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Usually one uses two different materials for the worm and gear to help with friction and wear.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The AGMA document above is worth reading if you are serious about your design. Between the sd-spi technical documents and the AGMA documents you will have all the info you need for calculations.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2016-01-05T04:23:24.703" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="8804" PostTypeId="1" AcceptedAnswerId="8805" CreationDate="2016-01-05T10:07:39.000" Score="0" ViewCount="80" Body="&lt;p&gt;I just received my first hobby-grade quadcopter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's the Eachine racer 250 and comes preassembled with transmitter and receiver also included.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It comes with some kind of CC3D flight board, most people say it's not the original one, but can be configured with the same software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is actually flying very well right out of the box so I'm not sure if I want to touch the FC config.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm mostly interested in learning to fly in manual/acro mode, the transmitter seems to have a switch with 3 flight modes, first 2 looks like low/high rates in self-level mode, I expect the third to be the acro mode, but I'm not sure right now, I couldn't test it because of the weather, it could be a third higher rate?.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, is there any way I can look at the actual FC config without changing anything? what software do I need? and are the flight modes actually set on the FC or transmitter so I could be able to see and edit them? &lt;/p&gt;&#xA;" OwnerUserId="11111" LastEditorDisplayName="user9480" LastEditDate="2016-10-17T13:34:31.473" LastActivityDate="2016-10-17T13:34:31.473" Title="See CC3D actual configuration" Tags="&lt;quadcopter&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8805" PostTypeId="2" ParentId="8804" CreationDate="2016-01-05T14:59:11.703" Score="0" Body="&lt;p&gt;Supposedly the OpenPilot Ground Control Station (GCS) will allow you to download your existing configuration.  In general, you probably want to search for something that will allow you to &quot;back up CC3D configuration&quot; from the UAV.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2016-01-05T14:59:11.703" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="8806" PostTypeId="2" ParentId="8787" CreationDate="2016-01-05T15:53:31.093" Score="2" Body="&lt;p&gt;Regarding the battery requirements, LiPo batteries are probably the way to go, but they do require looking after in order to prevent any nasty accidents from occurring. I looked into this a few months back, you might want to take a quick look at &lt;a href=&quot;https://gr33nonline.wordpress.com/2015/08/13/service-please/&quot; rel=&quot;nofollow&quot;&gt;Service, Please!&lt;/a&gt; and &lt;a href=&quot;https://gr33nonline.wordpress.com/2015/08/15/power-up/&quot; rel=&quot;nofollow&quot;&gt;Power Up!&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Isolating the power supplies, as you suggest, is probably also a good idea. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Note: I shall add more info tomorrow, when I get a bit more time&lt;/p&gt;&#xA;" OwnerUserId="9176" LastActivityDate="2016-01-05T15:53:31.093" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8807" PostTypeId="1" AcceptedAnswerId="8808" CreationDate="2016-01-05T16:11:43.460" Score="3" ViewCount="84" Body="&lt;p&gt;I'm looking at &lt;a href=&quot;https://img.alicdn.com/imgextra/i1/650686955/TB2i_qfbpXXXXXPXpXXXXXXXXXX-650686955.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;this setup&lt;/a&gt;: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/UYPrg.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/UYPrg.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where the POM bevel gears are fitted with some kind of metal (bronze?) tube inside which fits over the shaft. What benefits does this method provide? Is it to allow the shaft to free-spin? The metal fitting wouldn't be able to grip on the shaft - right?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it supposed to be a canonical approach to fitting a POM gear for (relatively) high-load applications?&lt;/p&gt;&#xA;" OwnerUserId="11489" LastEditorUserId="110" LastEditDate="2016-01-05T18:37:10.933" LastActivityDate="2016-01-05T19:30:03.717" Title="POM gears and metal fittings" Tags="&lt;motor&gt;&lt;mechanism&gt;&lt;gearing&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8808" PostTypeId="2" ParentId="8807" CreationDate="2016-01-05T19:30:03.717" Score="1" Body="&lt;p&gt;I'm not sure why you would want to turn a gear on a shaft without turning the shaft unless it is mechanically linked to another gear. The reason for the brass sleeve is probably for the set screw to have a stronger material than plastic to anchor in. &lt;/p&gt;&#xA;" OwnerUserId="8858" LastActivityDate="2016-01-05T19:30:03.717" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8810" PostTypeId="1" CreationDate="2016-01-06T09:36:55.237" Score="1" ViewCount="758" Body="&lt;p&gt;I'm now considering to choose Gazebo or SimMechanics for simulating my quadruped robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I set some standards for the simulation:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Support Real-time application with ROS&lt;/li&gt;&#xA;&lt;li&gt;Simulate contact impact well(with ground) (deformable if possible)&lt;/li&gt;&#xA;&lt;li&gt;Good rendering Quality.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I have learned Gazebo for months, and see it has some limits to meet my requirements, especially the contact and friction problems. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I didn't use SimMechanics, but when i'm very impressed on it when i see this &lt;a href=&quot;https://www.youtube.com/watch?v=ShCSr7XCego&quot; rel=&quot;nofollow&quot;&gt;video&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyone who has experiences on Quadruped Simulation can share me some advice?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you so much.&lt;/p&gt;&#xA;" OwnerUserId="9205" LastActivityDate="2016-01-06T09:36:55.237" Title="Gazebo or SimMechanics" Tags="&lt;simulator&gt;&lt;gazebo&gt;" AnswerCount="0" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8811" PostTypeId="1" AcceptedAnswerId="8812" CreationDate="2016-01-06T14:57:31.220" Score="2" ViewCount="134" Body="&lt;p&gt;I am building a Quadcopter and I was wondering if a 5200mAh 30C 22.2V 6S Lipo battery will work with a 40Amp Esc's, MT4108 370 KV Motors, and GEMFAN 1470 Carbon Fiber Props. The over all payload will be about 5-6 pounds.&lt;/p&gt;&#xA;" OwnerUserId="11051" LastEditorUserId="37" LastEditDate="2016-01-07T11:47:32.897" LastActivityDate="2016-01-07T11:47:32.897" Title="Will a 5200mAh 30C 22.2V 6S Lipo battery work with" Tags="&lt;quadcopter&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2016-01-07T11:49:25.630" ContentLicense="CC BY-SA 3.0" />
  <row Id="8812" PostTypeId="2" ParentId="8811" CreationDate="2016-01-06T21:10:45.707" Score="4" Body="&lt;p&gt;Your motors are rated for 466W max, which with a 6S battery gives about 20A max current draw per motor (This also tells you your ESC are a good choice, provided that they can handle the 6S voltage).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd estimate the hover voltage at about 10A, so you'd get a flight duration of t = Capacity(C) / Current(I) = 5.2/40 = 0.13h = 7.8mins.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This flight duration sounds a bit small. I'd try something that would get me to 10+minutes, depending on application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;That said, the correct way to approach this&lt;/strong&gt;, would be to get some real data from your power system, either experimentally or online. The course of action is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(1) Set a bench test with one propeller and motor fixed on a thrust bench or scale.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(2) Run your motor to the maximum and record the current $I_{max}$. This will verify the motor and ESC maximum specs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(3) Run your motor to produce thrust equal to 1/4 of the estimated quadrotor weight. This will give you your hover current, $I_H$.&#xA;(4) Use $I_H$ and your required flight time to calculate the required battery capacity.&lt;/p&gt;&#xA;" OwnerUserId="11500" LastEditorUserId="37" LastEditDate="2016-01-07T11:46:59.667" LastActivityDate="2016-01-07T11:46:59.667" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8813" PostTypeId="2" ParentId="8787" CreationDate="2016-01-06T21:21:24.497" Score="4" Body="&lt;p&gt;I agree with @Greenonline 's recommendation regarding LiPo batteries along with his warnings on battery care. It seems you will need a fairly small battery, considering your current requirements (about a 1000-2000mAh 2S LiPo).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, you also need to add 2 5V BECs (5V regulators in RC lingo) to power your circuits; The 7.4 or 11.1V provided by the battery isn't very useful.&#xA;You can find more on BECs on @Greenonline's &lt;a href=&quot;https://gr33nonline.wordpress.com/2015/08/15/power-up/&quot; rel=&quot;nofollow&quot;&gt;link&lt;/a&gt;. Especially the youtube channel RCModelReviews provides good info.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suggest having 2 BEC to avoid servo noise on the RPi power rail, as you mentioned. Servos and motors apply intermittent loads on power supplies. Most of the time (especially on cheap power supplies), this causes severe voltage ripples on the power supply line. If sensitive (from a power supply point of view) microcontrollers or ratiometric sensors are to be used in the system, it's best to attach them on a separate regulator and leave the battery to act as a &quot;buffer&quot; from the servo ripples&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not familiar with e-bay sellers, but something &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__18789__5V_5A_UBEC_2_5S_Lipoly_7_2_21v_.html&quot; rel=&quot;nofollow&quot;&gt;like&lt;/a&gt; this would be adequate. If you prefer paying an extra buck than taking chances with Chinese products (I do take chances usually), you can also look at &lt;a href=&quot;https://www.adafruit.com/products/1385&quot; rel=&quot;nofollow&quot;&gt;this product&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="11500" LastEditorUserId="11500" LastEditDate="2016-01-07T12:23:58.820" LastActivityDate="2016-01-07T12:23:58.820" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8814" PostTypeId="2" ParentId="8296" CreationDate="2016-01-07T07:07:01.080" Score="1" Body="&lt;p&gt;As I understand, you installed ROS and Gazebo in your virtual machines, but MATLAB is not. Your MATLAB is installed in the real machine(~.~). If your case is like this, you can get a linux-MATLAB version and install it in the virtual computer. All things get done!&#xA;You can follow the instruction mentioned in Brian's comment above to connect Gazebo and MATLAB in your virtual machine. &lt;/p&gt;&#xA;" OwnerUserId="9205" LastActivityDate="2016-01-07T07:07:01.080" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8816" PostTypeId="1" CreationDate="2016-01-07T14:40:28.407" Score="3" ViewCount="169" Body="&lt;p&gt;&lt;a href=&quot;http://www.irobotweb.com/~/media/MainSite/PDFs/About/STEM/Create/Create_2_Wheel_Hack.pdf?la=en&quot; rel=&quot;nofollow&quot;&gt;http://www.irobotweb.com/~/media/MainSite/PDFs/About/STEM/Create/Create_2_Wheel_Hack.pdf?la=en&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Scroll to page 3.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm trying to interface the Roomba's preloaded navigation system with a pair of motors not attached to the roomba itself- however, to do this I need an interface board of the same dimensions as the one pictured in the above document. It has 0.050&quot; (1.27) contact centers, which don't seem to be commercially available. Can anyone provide any help locating PCBs of this size?&lt;/p&gt;&#xA;" OwnerUserId="11508" LastEditorUserId="110" LastEditDate="2016-01-08T14:27:13.000" LastActivityDate="2018-07-18T13:28:56.153" Title="Create 2: Wheel interface board replacement" Tags="&lt;irobot-create&gt;&lt;electronics&gt;&lt;navigation&gt;&lt;roomba&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8818" PostTypeId="1" CreationDate="2016-01-07T18:28:13.830" Score="1" ViewCount="90" Body="&lt;p&gt;What is the most accurate way to locate the position and orientaion of the body during some motion (rotation and translation)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need to track the body very precisely, the required accuracy is 100-200 microns, and with rather high frequency - at least 1kHz. The body has one rotation axis. This axis can translate along the path. Normally the track has ellipse like shape, but translation path can change, that's why I need to track the body. The limit of motion is 50 cm on any direction. Maximum velocity is 5 m/s. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Requirments about sensors: it's possible to place any sensor on the surface, but it's impossible to change the construction. So it's impossible to use encoders at the rotation axis to measure the angle. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried to do it with MEMS 9DOF sensors, but because of the noise it's very difficult to understand when there is a motion and when it's a noise.&#xA;Another idea is to use magnet and magnetomemter, but how is it possible to measure the resolution in this way? &lt;/p&gt;&#xA;" OwnerUserId="11515" LastEditorUserId="11515" LastEditDate="2016-01-07T19:25:43.147" LastActivityDate="2016-01-07T19:25:43.147" Title="Accurate technique to locate position?" Tags="&lt;kinematics&gt;&lt;navigation&gt;&lt;tracks&gt;&lt;orientation&gt;" AnswerCount="0" CommentCount="5" ClosedDate="2016-01-08T13:51:44.347" ContentLicense="CC BY-SA 3.0" />
  <row Id="8819" PostTypeId="2" ParentId="8786" CreationDate="2016-01-07T19:50:08.390" Score="0" Body="&lt;p&gt;Depending on the cost of your aircraft and the installed autopilot, there may be an approach, though, as @hauptmech mentions, industry doesn't have come down to a feasible solution, regarding the remaining charge in a Li-Ion battery.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, if your aircraft uses the Pixhawk or APM autopilot, they include a &lt;a href=&quot;https://store.3drobotics.com/products/apm-power-module-with-xt60-connectors&quot; rel=&quot;nofollow&quot;&gt;battery module&lt;/a&gt; which has a current sensor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you calibrate the current sensor adequately, you may use the reported mAh consumed to estimate the remaining battery life. Keep in mind, though, that as the battery ages, the total mAh it can store are reduced.&lt;/p&gt;&#xA;" OwnerUserId="11500" LastActivityDate="2016-01-07T19:50:08.390" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8820" PostTypeId="1" CreationDate="2016-01-07T23:52:42.557" Score="0" ViewCount="989" Body="&lt;p&gt;I am working on an Arduino robot project. This project requires a base with 4 wheels where the back wheels are attached to two DC motors that can be controlled independently of each other. I am thinking that the robot will turn by giving power to just one of the motors but I am having trouble with how the front axis should look like. Would it be possible to have a solid front axis with 2 wheels and still possible for the robot to turn or would the friction be too great?&lt;/p&gt;&#xA;" OwnerUserId="11516" LastActivityDate="2016-01-08T09:37:35.373" Title="Arduino project: Turning with a fixed front wheel axis" Tags="&lt;arduino&gt;&lt;wheeled-robot&gt;&lt;brushless-motor&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8821" PostTypeId="2" ParentId="8820" CreationDate="2016-01-08T00:19:12.707" Score="1" Body="&lt;p&gt;Without articulation, a rigid front axle will almost certainly not let your vehicle maneuver the way you want. Even with articulation, if you don't have a way to steer, again I don't think you'll get the performance you want. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the front end has to have wheels, I would suggest you look at swivel caster wheels, but these will also give you trouble if you intend on turning without moving forward as the caster wheels will want to flip direction. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you &lt;em&gt;must&lt;/em&gt; power the vehicle and turn with two different motors (this is called &quot;differential steering&quot;), and you just need the front end supported, I would suggest you look at ball casters. This is what other vehicles like micro mice use. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would suggest you use one motor to steer and one to drive, but I also understand some projects can have odd requirements. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-01-08T00:19:12.707" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8822" PostTypeId="1" CreationDate="2016-01-08T00:55:48.170" Score="0" ViewCount="42" Body="&lt;p&gt;As part of a sorting machine, I need to orient a pile of plastic brick-shaped objects (which are all identical in size - about 3cm x 2cm x 1.5cm) so that they always end up with the white side facing up:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/zGW0d.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zGW0d.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These will then be fed into a bowl feeder type of machine for further re-orienting. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I accomplish this, preferably without optical sensors? I was thinking about cutting into the bricks and putting magnets inside, but is there a more elegant solution?&lt;/p&gt;&#xA;" OwnerUserId="11517" LastActivityDate="2016-01-08T17:15:38.710" Title="Orienting rectangular plastic bricks" Tags="&lt;mechanism&gt;&lt;orientation&gt;" AnswerCount="1" CommentCount="5" ClosedDate="2016-01-11T15:32:14.870" ContentLicense="CC BY-SA 3.0" />
  <row Id="8823" PostTypeId="1" CreationDate="2016-01-08T05:20:25.740" Score="1" ViewCount="36431" Body="&lt;p&gt;If a Lipo battery has more mAh will it be slower to run out of energy or will it have larger power output?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in Advance&lt;/p&gt;&#xA;" OwnerUserId="11051" LastActivityDate="2019-07-31T04:40:38.290" Title="Does the mAh of a battery mean longer power or more power?" Tags="&lt;power&gt;&lt;battery&gt;" AnswerCount="4" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8824" PostTypeId="2" ParentId="8698" CreationDate="2016-01-08T06:48:30.653" Score="1" Body="&lt;p&gt;In Radio Control lingo, we refer to PWM (Pulse Width Modulation) to describe a very specific &lt;strong&gt;control&lt;/strong&gt; signal, instead of a power signal. Check the &lt;a href=&quot;https://en.wikipedia.org/wiki/Servo_control#Pulse_duration&quot; rel=&quot;nofollow&quot;&gt;wiki article&lt;/a&gt; for more info. This doesn't carry the power required to drive the servo, but encodes angle information for the servo to obey.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to enclose PWM setpoint information (for more than one servo) in the same wire, we use a PPM signal (Pulse Position Modulation). Essentially, this is multiple PWMs, each one shifted in time a bit, and interleaved.&#xA;More info &lt;a href=&quot;http://rcarduino.blogspot.gr/2012/11/how-to-read-rc-receiver-ppm-stream.html&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your case, sadly the repo author has made a mistake, and he meant to say &lt;strong&gt;PMW&lt;/strong&gt; ESC, instead of CAN-bus, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Luckily, the arduino boards can drive RC PWM devices using the &lt;em&gt;servo&lt;/em&gt; library.&lt;/p&gt;&#xA;" OwnerUserId="11500" LastEditorUserId="158" LastEditDate="2016-01-08T18:28:01.950" LastActivityDate="2016-01-08T18:28:01.950" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8825" PostTypeId="2" ParentId="8823" CreationDate="2016-01-08T06:55:46.470" Score="5" Body="&lt;p&gt;The battery capacity specification (eg X mAh) tells you that your battery can run for 1 hour providing X milliamps until it is depleted. This doesn't always scale with time, for example you probably won't run for 1/2 hour if you draw 2*X milliamps, but this is another discussion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To answer your question, a greater mAh will allow you to use your battery for longer before it depletes, in terms of current draw.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;However&lt;/strong&gt;, for the same battery model, the C-rating ($C$)(the maximum current you can safely, constantly draw from the battery) stays constant. Thus, since it is defined as $I_{max} = C \cdot X$, higher C-ratings will also allow you to draw higher instantaneous currents, hence more power.&lt;/p&gt;&#xA;" OwnerUserId="11500" LastActivityDate="2016-01-08T06:55:46.470" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8826" PostTypeId="2" ParentId="8820" CreationDate="2016-01-08T09:37:35.373" Score="1" Body="&lt;p&gt;If you really need to have four wheels, I would suggest you either motorize them all or only two, but diagonal. The first way will work like this: if you want to turn left lets say, the two left wheels will go backwards and the two on the right will go forward. The second way in detail is this: you will motorize either front-left and back-right wheels, or back-left and front-right wheels and they must work as in the first way. Note that both ways will be better working with some good servos, because they run slower wich makes turning easier and produce the same amount of power in any case. This will be useful in ecountering frictions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Still i would strongly recommend you only used two front wheels and a swivel caster wheel at the back. In any other way, you will have to find and use other methods of movement, as Chuck suggested. Try tearing apart a rc car to get some ideas.&lt;/p&gt;&#xA;" OwnerUserId="11472" LastActivityDate="2016-01-08T09:37:35.373" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8827" PostTypeId="2" ParentId="8823" CreationDate="2016-01-08T11:45:00.560" Score="2" Body="&lt;p&gt;Neither, it means more &lt;em&gt;energy&lt;/em&gt; and it &lt;em&gt;implies&lt;/em&gt; more power. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Think of energy as the thing you &quot;spend&quot; to do work, and power is how much work you get done in a particular period of time. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typically a battery is rated for power with something called a &quot;C&quot; rating, or how much &lt;em&gt;power&lt;/em&gt; it would take to drain the battery in one hour. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since output power of a battery is voltage times current, the C rating can be calculated as nominal voltage times the amp-hour rating, divided by the nominal voltage times an hour. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The nominal voltage cancels itself, and you're just left with the &quot;amp&quot; portion of the battery's amp-hour rating.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This means a 5000mAh battery has a 1C rating of 5000mA, &lt;strong&gt;but&lt;/strong&gt; the output power of the battery is that &lt;em&gt;times nominal voltage&lt;/em&gt;, so a 5000mAh battery pack rated for 1C would have less power available than a 2500mAh pack rated for 10C because the 5Ah pack's available output power is limited to (voltage) times 5A where the 2.5Ah pack's available output power is limited to (voltage) times 25A. The smaller pack, with the higher C rating, is capable of delivering 5 times the power in this example.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding run times, that depends on the C rating for the battery.  The higher it is, the more power you are (safely) able to draw at once, which means that you can get more power from a high C battery but, because power is how quickly you're spending energy, that means you'll drain the battery faster. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ultimately, though, assuming the batteries have the same C rating, the larger capacity battery will have more power &lt;em&gt;available&lt;/em&gt; because the C rating is driven by battery capacity. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given the same &lt;em&gt;applied load&lt;/em&gt; (meaning you don't actually use all that available power), the battery with the larger capacity will last longer because you are now drawing power at a lower C value. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I understand C values can be confusing, so if you want some examples just let me know! &lt;/p&gt;&#xA;&#xA;&lt;p&gt;:EDIT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have mentioned several times now the phrase &quot;available power&quot; because of what I worry is a misconception about batteries and electricity in general. Just because a battery &lt;em&gt;can&lt;/em&gt; deliver 25A doesn't mean the battery &lt;em&gt;will&lt;/em&gt; deliver 25A. The cold cranking amperage rating (CCA) on your car battery is in the hundreds of amps, but if all you're doing is listening to the radio with your car off, you're drawing a negligible amount of power. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is all because of &lt;em&gt;Ohm's Law&lt;/em&gt;, which says that the current through a device is equal to the applied voltage, &lt;em&gt;relative to the resistance in that device&lt;/em&gt;. That is, $I = \frac{V}{R}$ (more commonly expressed as $V=IR$). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This means that if you don't change the electrical load - you keep the same motors running at the same speed - then the effective resistance of the load doesn't change. This in turn means that, if you don't change the terminal voltage of the battery, the current supplied to the load doesn't change.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the voltage is constant, and the current is constant, then the &lt;em&gt;applied&lt;/em&gt; power is constant, even if the &lt;em&gt;available&lt;/em&gt; power changes. When your phone is in your hand, the battery inside the phone is powering it. When you plug your phone in, you might be connecting it electrically to a turbine the size of a strip mall. The change in available power doesn't mean you automatically consume all of the available power. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;By this, I mean that, as long as your current battery is capable of supplying the load (your voltage bus doesn't brown out), then switching to a larger capacity battery will not improve your performance at all, even though it may have more available power. Electrical devices &quot;take what they need&quot; and nothing more. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2016-01-08T16:40:05.107" LastActivityDate="2016-01-08T16:40:05.107" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8828" PostTypeId="2" ParentId="8823" CreationDate="2016-01-08T14:43:15.043" Score="0" Body="&lt;p&gt;This answer is complimentary to the other answers, so make sure you read them as well.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Think of the $m^2$ unit. Your question is similar to this: if a room is $100m^2$, does that mean it has a greater length than its width or a greater width than its length?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Theoretically speaking, as long as the width multiplied by height is $100m^2$, then those values could be anything. In practice, there could be limitations, such as high distances not fitting on earth, or the curvature of earth causing a different area than the multiple of those values, or very tiny distances shorter than atoms not buildable by man.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could think of similar units, such as $Nm$ or $Kg\frac{m}{s}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The $mAh$ unit is similar. Theoretically speaking, it means that with a battery with $E mAh$ energy, if you draw $XmA$ current, then battery will run out of energy in $Yh$ ($Y$ hours) time where $X*Y=E$. So if you take a small current, it would run a long time, and if you take a large current, it would deplete soon.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In practice however, there are limitations.  For example, if you draw too much current from a battery, the battery may burn, or some other chemical phenomenon could change its nature.  If you draw too little current, the battery may not last as long as expected since it may leak energy on its own (think of an unused battery that drains over time). So your calculation of $X*Y$ may not always match $E$, but if you are within the battery specs, it should get quite close.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So back to your original question:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If a Lipo battery has more mAh will it be slower to run out of energy or will it have larger power output?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If battery &lt;em&gt;A&lt;/em&gt; has a higher $mAh$ than battery &lt;em&gt;B&lt;/em&gt;, it means that:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If you draw the same current from both, battery &lt;em&gt;A&lt;/em&gt; should last longer,&lt;/li&gt;&#xA;&lt;li&gt;If you plan on depleting the battery in a fixed time, battery &lt;em&gt;A&lt;/em&gt; would be able to give you more current in that time.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;This was a basic explanation of how $mAh$, &lt;em&gt;as a physical unit&lt;/em&gt;, works. Please read the other answers for explanations on how real-world batteries behave.&lt;/p&gt;&#xA;" OwnerUserId="158" LastActivityDate="2016-01-08T14:43:15.043" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8829" PostTypeId="2" ParentId="8816" CreationDate="2016-01-08T15:02:39.940" Score="3" Body="&lt;p&gt;Here are a few ideas:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Buy 0.050&quot; spacing prototyping board. For example, here are some possible boards that could work on &lt;a href=&quot;http://www.digikey.com/product-search/en?pv89=329&amp;amp;pv89=337&amp;amp;FV=fff40024%2Cfff800d4&amp;amp;k=vector&amp;amp;mnonly=0&amp;amp;newproducts=0&amp;amp;ColumnSort=0&amp;amp;page=1&amp;amp;quantity=0&amp;amp;ptm=0&amp;amp;fid=0&amp;amp;pageSize=25&quot; rel=&quot;nofollow noreferrer&quot;&gt;Digi-Key&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Use a PCB prototyping service and fabricate the board you're looking for; this would have the advantage that you could add other circuits to the panel that you may need for your project.&lt;/li&gt;&#xA;&lt;li&gt;Remove the boards from the wheel modules and use those. iRobot sells new ones on their website; you might also be able to get them from broken robots on eBay, or perhaps someone at iRobot could help if you e-mail them.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Hope this helps!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please note that I am an iRobot employee, but the postings on this site are my own and don't necessarily represent iRobot's positions, strategies, or opinions.&lt;/p&gt;&#xA;" OwnerUserId="7665" LastEditorUserId="7665" LastEditDate="2018-07-18T13:28:56.153" LastActivityDate="2018-07-18T13:28:56.153" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="8830" PostTypeId="2" ParentId="8822" CreationDate="2016-01-08T17:15:38.710" Score="2" Body="&lt;p&gt;Its a bit difficult to give you an exact answer because its quite an open question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You are sorting the bricks based on an optical characteristics so I can't see any way of doing it other than by using an optical sensor.  If you start sorting them by magnetic properties then you aren't sorting them by their colour anymore.  So what is the reason you don't want to use an optical sensor?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using one of the colour detector sensors is probably overkill if you only want black and white.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since black and white are quite different you should be able to use a system that compared the reflectiveness, unless they are high shine.  Could you fire a light beam (laser) off the bricks, would you get different amount amounts of energy absorbed and if you can detect the difference then.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Temperature could be another option, the black side should get hotter faster.&lt;/p&gt;&#xA;" OwnerUserId="10717" LastActivityDate="2016-01-08T17:15:38.710" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8831" PostTypeId="1" CreationDate="2016-01-09T00:43:02.740" Score="1" ViewCount="51" Body="&lt;p&gt;Are joint-state vectors $q$, which define the position and orientation of a set of joints, limited somehow? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know they are used for the rotation part of the transformation matrix =&gt; therefore I would think they were limited within 0 and 2$\pi$&lt;/p&gt;&#xA;" OwnerUserId="9620" LastEditorUserId="110" LastEditDate="2016-01-10T02:40:58.407" LastActivityDate="2016-01-10T02:40:58.407" Title="Are joint state vectors limited?" Tags="&lt;joint&gt;" AnswerCount="2" CommentCount="3" ClosedDate="2016-01-11T15:39:34.693" ContentLicense="CC BY-SA 3.0" />
  <row Id="8833" PostTypeId="1" AcceptedAnswerId="8834" CreationDate="2016-01-09T07:54:04.823" Score="0" ViewCount="73" Body="&lt;p&gt;I am using arduino mega to run 4 motors via 4 motor controllers. I am using a ps2 controller as the remote control. When the joystick is at rest, the motor should stop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is the motor still moves randomly when the joystick is at rest. Sometimes, the joystick can only produce forward motion on the motor but not backward. Is this the grounding issue or the PS2 remote control issue ir others.. Does the GND from the arduino board have to be connected to the GND from the external battery? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I troubleshoot this? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="10691" LastActivityDate="2016-01-09T15:43:02.210" Title="Erratic motor behavior. Is it due to the faulty remote control or Grounding or something else?" Tags="&lt;mobile-robot&gt;&lt;control&gt;&lt;power&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8834" PostTypeId="2" ParentId="8833" CreationDate="2016-01-09T10:06:14.887" Score="1" Body="&lt;p&gt;In most cases, ALL of your ground reference and power return pins and wires should be tied together, preferably with a star configuration to avoid ground loops.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a star configuration, the ground (return) wires from all your devices are connected to a single, physical point in your circuit. It is best that this point is close to your battery, preferably a power distribution board (board with multiple parallel power ports) connected at the battery plug.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Devices that commonly share ground are microcontrollers, batteries, RC receivers and servo motors.&lt;/p&gt;&#xA;" OwnerUserId="11500" LastEditorUserId="11500" LastEditDate="2016-01-09T15:43:02.210" LastActivityDate="2016-01-09T15:43:02.210" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8835" PostTypeId="1" CreationDate="2016-01-09T11:07:07.933" Score="2" ViewCount="129" Body="&lt;p&gt;How can it be used to determine the transformation matrix?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;an example could be at computing the inverse kinematics for small displacements:&#xA;J(q)$\Delta$q = $\Delta$u&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\Delta$U is a vector defining the difference between current and desired position. The desires position can always be computed, but if keep solving this in such manner that every time you solve $$J(q)\Delta q = \Delta u$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;you do this &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;q:= q + $\Delta$q&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Compute $T_{base}^{tool}(q)$&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;Compute the difference between $[T^{tool}_{base}]_{desired~position} $ and $T_{base}^{tool}(q)$.&lt;/li&gt;&#xA;&lt;li&gt;If change is less than 10^-5 finish and output Q, if not resolve. &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;How would you compute The transformation matrix based on q state vector. &lt;/p&gt;&#xA;" OwnerUserId="9620" LastActivityDate="2016-01-22T18:07:32.633" Title="q-state vector used to define the transformation matrix? how?" Tags="&lt;inverse-kinematics&gt;&lt;jacobian&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8836" PostTypeId="2" ParentId="8831" CreationDate="2016-01-09T13:11:29.437" Score="1" Body="&lt;p&gt;For generalized joint parameters, there are no explicit limits on the value of $q$, regardless of the joint type. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is done because more complex joints can be created by a group of relatively simple joints, so it's best to have a library of joints that use the generalized parameter with no bounds. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider a rack and pinion. The pinion might rotate an angle $q$ radians, but the rack then translates a distance of $rq$, where r is the effective diameter of the pinion gear. In this case, assuming $0 &amp;lt;= q &amp;lt; 2\pi$ means that the rack can only translate a distance of $2\pi r$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Screws are similar, where the rotation may be $q$, but the axial translation is based on the pitch and total degree of rotation, $h = qp$, where $p$ is the pitch. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you would like to evaluate a joint angle as though it were bounded, I would suggest creating a virtual sensor that taps into the joint parameter and performs the bounding operation, but I would definitely leave the actual joint parameter alone. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-01-09T13:11:29.437" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8837" PostTypeId="2" ParentId="8831" CreationDate="2016-01-09T14:10:18.903" Score="1" Body="&lt;p&gt;Additionally to what Chuck said, from a purely mathematical point of view, the rotation matrix is defined as:&#xA;$$R(\theta) = \left[&#xA;\begin{array}[cc] \\&#xA;\cos(\theta) &amp;amp; -\sin(\theta) \\&#xA;\sin(\theta) &amp;amp; \cos(\theta) \\&#xA;\end{array}&#xA;\right]&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus, $R(\theta) = R(\theta+2\pi) $, thus you do not need to wrap the angle argument.&lt;/p&gt;&#xA;" OwnerUserId="11500" LastActivityDate="2016-01-09T14:10:18.903" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8839" PostTypeId="2" ParentId="8816" CreationDate="2016-01-09T19:26:27.120" Score="1" Body="&lt;p&gt;If you have any old PCI Bus cards on hand, eg an old modem, with a jeweler's saw you can trim off a bit of the card edge connector for use as an interim connector.  Here's a drawing (part of a picture from &lt;a href=&quot;http://www.multi-circuit-boards.eu/en/pcb-design-aid/design-parameters/pc-pci-boards.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;PC PCI boards&lt;/a&gt; at multi-circuit-boards.eu) – &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gpWbB.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gpWbB.gif&quot; alt=&quot;dimensions - PCI&quot;&gt;&lt;/a&gt; &lt;a href=&quot;https://i.stack.imgur.com/LKMuC.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/LKMuC.jpg&quot; alt=&quot;picture of card edge&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The important detail in that drawing is that the card edge connector fingers are spaced 1.27 mm, or 0.050&quot;, apart.   The smaller picture shows a small section of a PCI board, similar to what you can cut out from an old modem.  If you don't have a jeweler's saw (which is like a small coping saw, but with a fine-tooth blade, eg 50 TPI) use whatever means you like to cut a piece out, then smooth its edges with sandpaper or a file.&lt;/p&gt;&#xA;" OwnerUserId="478" LastActivityDate="2016-01-09T19:26:27.120" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8840" PostTypeId="1" CreationDate="2016-01-09T22:19:24.853" Score="2" ViewCount="346" Body="&lt;p&gt;I have just disassembled a RC car (a BBR 1:18 Scale Ferrari Enzo from 2005). Attached to the stepper motor that controls the steering of the car was a small circuit board with a cog wheel attached to it. I am trying to figure out what this circuit does. My idea is that it is responsible of keeping track of the wheels position but I am not certain. Here is a picture of it:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/bN3Ne.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/bN3Ne.jpg&quot; alt=&quot;Photo of Sensor - 1&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/sIisH.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/sIisH.jpg&quot; alt=&quot;Photo of Sensor - 2&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can see there are 5 wires coming out of it and I know that the green one is GND. Does anyone have an idea of what its function might be?&lt;/p&gt;&#xA;" OwnerUserId="11519" LastEditorUserId="11519" LastEditDate="2016-01-10T10:42:06.197" LastActivityDate="2016-01-10T10:42:06.197" Title="RC car circuit: what does it do?" Tags="&lt;stepper-motor&gt;&lt;radio-control&gt;&lt;circuit&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8841" PostTypeId="2" ParentId="8382" CreationDate="2016-01-09T23:31:15.010" Score="0" Body="&lt;p&gt;I'm guessing this is Arduino code, you might want to move it to &lt;a href=&quot;https://arduino.stackexchange.com/&quot;&gt;that forum&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If this is Arduino code then I think the problem you have is you eyes are too slow.  At the end of the loop function it starts the loop function again, so it appears to do nothing, because it's already in the right place.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope that is clear enough and helps you.&lt;/p&gt;&#xA;" OwnerUserId="10717" LastEditorUserId="-1" LastEditDate="2017-04-13T12:50:09.580" LastActivityDate="2016-02-09T13:02:31.980" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8842" PostTypeId="1" CreationDate="2016-01-10T00:04:51.383" Score="0" ViewCount="348" Body="&lt;p&gt;Is there any general problem in using precise positioning (centimeter-accurate GNSS RTK system meant) for autonomous car guidance given I have a predefined path the car should follow? I mean, autonomous cars were the topic #1 at CES 2016 yet no such simple system seems to have been introduced to date... Of course the &quot;path planning&quot; is only a part of the &quot;autonomous package&quot; and other problems need to be solved (collision prevention etc.) but I really wonder whether something simple like RTK guidance could be used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An RTK system relies on very little amount of live correction data (about 1 kB/s) and mobile networks are really ubiquitous today so I can not really see a technical problem in such solution given there are enough RTK base stations around.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This question is only about using precise positioning to follow a predefined track in obstacle-free environment. I am not asking about other systems that need to be implemented in an autonomous car like collision prevention etc. (such systems may employ LIDAR or a stereo camera). Surely a collision prevention is a must for an autonomous system but I consider a theoretical case only.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;An updated question may be:&lt;/strong&gt; Is precise satellite positioning accurate enough to guide/navigate a full-scale passenger car in an obstacle-free outdoor environment in the speed of about 100 km/h given I have a precise-enough path prerecorded that is to follow?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some answers below already say yes, this is a solved problem. It would be nice to have the answers elaborated in more detail regarding the existing solutions (accuracy, possible problems etc.). One of the solutions may probably be the open source &lt;a href=&quot;http://rover.ardupilot.com/&quot; rel=&quot;nofollow&quot;&gt;APM autopilot&lt;/a&gt; which work for rovers too (&lt;a href=&quot;http://www.emlid.com/maiden-drive-of-apmrover-on-rpi-with-navio/&quot; rel=&quot;nofollow&quot;&gt;example by Emlid&lt;/a&gt;) but that does not seem to use RTK so the accuracy may be rather low.&lt;/p&gt;&#xA;" OwnerUserId="1021" LastEditorUserId="1021" LastEditDate="2016-01-11T13:29:45.050" LastActivityDate="2016-01-11T13:29:45.050" Title="Path following with precise positioning system (RTK)" Tags="&lt;navigation&gt;&lt;gps&gt;&lt;precise-positioning&gt;" AnswerCount="2" CommentCount="8" ClosedDate="2016-01-11T18:37:39.133" ContentLicense="CC BY-SA 3.0" />
  <row Id="8843" PostTypeId="2" ParentId="8840" CreationDate="2016-01-10T01:30:05.227" Score="3" Body="&lt;p&gt;At a guess this is either a Hall Effect, or Optical, speed and direction measurement device. The five wires will be GND, and outputs of Sensor1 and Sensor 2, and the other two would be the power supply to the Hall Effect/Optical Sensor (with there being a separate Vcc or GND for the power).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a basic schematic for a Hall Effect based device&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/1xtOJ.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1xtOJ.jpg&quot; alt=&quot;Hall Effect speed and direction measurement device&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a basic schematic for an optical device:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/9SMsB.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9SMsB.png&quot; alt=&quot;Optical speed and direction measurement device&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Two sensors are required, as using only one sensor will provide just speed data; adding a second &lt;em&gt;offset&lt;/em&gt; sensor will also provide the direction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I could be wrong though.&lt;/p&gt;&#xA;" OwnerUserId="9176" LastEditorUserId="9176" LastEditDate="2016-01-10T02:04:47.400" LastActivityDate="2016-01-10T02:04:47.400" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8844" PostTypeId="1" AcceptedAnswerId="8847" CreationDate="2016-01-10T03:44:53.250" Score="3" ViewCount="365" Body="&lt;p&gt;I want to open a door using a DC motor. I've estimated that the required power in the worst case would be around 35-40W (considering a ~80% efficiency). The whole is controlled by a &lt;a href=&quot;https://docs.particle.io/datasheets/photon-datasheet/&quot; rel=&quot;nofollow&quot;&gt;Particle Photon&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was thinking to use a &lt;a href=&quot;https://www.sparkfun.com/products/9479&quot; rel=&quot;nofollow&quot;&gt;L298N&lt;/a&gt; to control the output of current to the motor. However, when I looked for powerful enough motors, they would all consume too much current when stalling (&gt; 4A part of the L298N datasheet).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do you have ideas of how to overcome this? Maybe there's another dual-bridge that can handle more current, maybe there exists a DC motor that is ok for a L298N, or maybe I need to have simultaneous DC motors?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: this part should be a question by itself. I'll keep it here so that future visitors know what the sub-question was about, but please ignore it from now on if answering.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;As a sub-question, would it be better to use a brushed or a brushless DC motor?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="11532" LastEditorUserId="11532" LastEditDate="2016-01-11T18:18:45.683" LastActivityDate="2016-01-11T18:18:45.683" Title="DC Motor to open a door" Tags="&lt;motor&gt;&lt;h-bridge&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="8845" PostTypeId="1" AcceptedAnswerId="8846" CreationDate="2016-01-10T21:08:40.800" Score="1" ViewCount="34" Body="&lt;p&gt;My application is composting with worms outdoors inside an a styrofoam cooler.  I use a heat lamp and a thermo-electric cooler to maintain the temperature in the bin when the temperature outside is out of bounds for healthy worms.  When the temperature outside &lt;em&gt;is&lt;/em&gt; in bounds, I'd like to exchange the air in the bin with fresh air from outside, but I don't want to permanently compromise the insulating properties of my bin with lots of air holes.  So I'm looking for actuator solutions that would allow me to open/close a window of sorts.  I'm considering a solenoid air valve but I don't necessarily need/want an air compressor - a simple fan is sufficient to circulate the air. Any suggestions?&lt;/p&gt;&#xA;" OwnerUserId="11538" LastActivityDate="2016-01-10T21:44:12.527" Title="Exchange air and maintain thermal insulation" Tags="&lt;actuator&gt;&lt;valve&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8846" PostTypeId="2" ParentId="8845" CreationDate="2016-01-10T21:44:12.527" Score="0" Body="&lt;p&gt;This is no question of robotics... Keep it simple (:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Google for &quot;Louver Bath Vent&quot;: &lt;a href=&quot;https://www.google.de/search?q=Louver+Bath+Vent&quot; rel=&quot;nofollow&quot;&gt;https://www.google.de/search?q=Louver+Bath+Vent&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These kinds of ducts open by the air pressure generated from a ventilator.&lt;/p&gt;&#xA;" OwnerUserId="9208" LastActivityDate="2016-01-10T21:44:12.527" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8847" PostTypeId="2" ParentId="8844" CreationDate="2016-01-10T22:35:57.200" Score="4" Body="&lt;p&gt;While there &lt;em&gt;are&lt;/em&gt; other H-bridges that handle higher current and it might be cost-effective to just buy a higher-amperage pre-packaged ESC (electronic speed controller), you might also consider using higher-voltage motors (&lt;a href=&quot;http://www.jameco.com/1/1/48659-ms5n-07500b-r-m-6440c367-24vdc-motor-2475-rpm-dc-direct-drive.html&quot; rel=&quot;nofollow&quot;&gt;1&lt;/a&gt;, &lt;a href=&quot;http://www.jameco.com/1/1/2528-gh35gh241640y-00-r-24v-dc-plastic-reversible-gear-head-motor.html&quot; rel=&quot;nofollow&quot;&gt;2&lt;/a&gt;).  Adjust the voltage up or down as the H-bridge amperage limit allows.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also consider using a &lt;a href=&quot;https://www.google.com/search?hl=en&amp;amp;site=imghp&amp;amp;tbm=isch&amp;amp;source=hp&amp;amp;biw=1404&amp;amp;bih=881&amp;amp;q=slip+clutch&amp;amp;oq=slip+clutch&amp;amp;gs_l=img.3..0l4j0i5i30j0i8i30l2j0i24l3.1240.1240.0.2434.1.1.0.0.0.0.158.158.0j1.1.0....0...1ac..64.img..0.1.157.aReU-8d9CCc&quot; rel=&quot;nofollow&quot;&gt;slip clutch&lt;/a&gt; between the motor and the door operator.  It would allow the motor to keep running, instead of stalling, if door motion is blocked.  For trying the idea out, you could salvage the clutch or torque-control parts from an old battery-operated screwdriver.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Edit:&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding use of a brushed motor vs a brushless motor, I don't see this as an important issue unless you are going to build a significant number of door-openers, rather than a one-off.  But generally for a given amount of motor power, I'd expect lower cost, higher weight, and shorter life from brushed motors than from brushless motors.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A brushless motor would require use of an ESC (&lt;a href=&quot;http://www.digikey.com/en/articles/techzone/2013/mar/an-introduction-to-brushless-dc-motor-control&quot; rel=&quot;nofollow&quot;&gt;3&lt;/a&gt;), while a typical brushed DC motor can just be switched on and off.  Both types of motors can be controlled by PWM signals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you use a gear motor, then gear train wear and tear (which doesn't a priori depend on motor type, but may depend on motor speed) may be more of a limiting factor than is motor life.&lt;/p&gt;&#xA;" OwnerUserId="478" LastEditorUserId="478" LastEditDate="2016-01-11T08:57:52.200" LastActivityDate="2016-01-11T08:57:52.200" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="8848" PostTypeId="2" ParentId="8842" CreationDate="2016-01-11T00:15:49.427" Score="4" Body="&lt;p&gt;Precise vehicle location is not a very useful piece of data in autonomous driving so I would not expect to see many products focusing on it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Path planning and following for cars is a solved problem. If you have a static environment where nothing changes, any good position sensing will let you control a vehicle to follow a path. However, there are very few situations where the environment is static. Cars share the road with children, construction, animals, and very stupid other drivers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem with autonomous driving is not the navigation (getting from point A to point B) part. The problem is how to &quot;understand&quot; a dynamic environment and take the &quot;best&quot; action.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2016-01-11T00:15:49.427" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8849" PostTypeId="1" AcceptedAnswerId="8856" CreationDate="2016-01-11T05:00:45.677" Score="5" ViewCount="1439" Body="&lt;p&gt;I am working on a project where I should perform object tracking using the camera of Parrot AR Drone 2.0. So the main idea is, a drone should be able to identify a specified colour and then follow it by keeping some distance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am using the &lt;a href=&quot;https://github.com/puku0x/cvdrone&quot; rel=&quot;noreferrer&quot;&gt;cvdrone&lt;/a&gt; API to establish communication with the drone. This API provides function:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ARDrone::move3D(double vx, double vy, double vz, double vr)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;which moves the AR.Drone in 3D space and where &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;vx: X velocity [m/s]&lt;/li&gt;&#xA;&lt;li&gt;vy: Y velocity [m/s]&lt;/li&gt;&#xA;&lt;li&gt;vz: Z velocity [m/s]&lt;/li&gt;&#xA;&lt;li&gt;vr: Rotational speed [rad/s]&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I have written an application which does simple image processing on the images obtained from the camera of the drone using OpenCV and finds needed contours of the object to be tracked. See the example below:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/NVDgg.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/NVDgg.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now &lt;strong&gt;&lt;em&gt;the part I am struggling&lt;/em&gt;&lt;/strong&gt; is finding the technique using which I should find the &lt;strong&gt;&lt;em&gt;velocities&lt;/em&gt;&lt;/strong&gt; to be sent to the &lt;strong&gt;&lt;em&gt;move3D&lt;/em&gt;&lt;/strong&gt; function. I have read that common way of doing controlling is by using &lt;strong&gt;&lt;em&gt;PID&lt;/em&gt;&lt;/strong&gt; controlling. However, I have read about that and could not get how it could be related to this problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To summarise, my question is how to move a robot towards an object detected in its camera? How to find coordinates of certain objects from the camera? &lt;/p&gt;&#xA;" OwnerUserId="11539" LastEditorUserId="110" LastEditDate="2016-01-11T14:47:53.627" LastActivityDate="2016-01-12T11:07:09.903" Title="Tracking objects from camera; PID controlling; Parrot AR Drone 2" Tags="&lt;control&gt;&lt;pid&gt;&lt;quadcopter&gt;&lt;tuning&gt;&lt;opencv&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8850" PostTypeId="2" ParentId="8842" CreationDate="2016-01-11T06:22:27.847" Score="1" Body="&lt;p&gt;Unless you want to put this product at the market (which I doubt), then I wouldn't hope for an RTK-GPS pair to solve your problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It could help you, in the extreme case of a dense road network, if a simple GPS receiver got such a bad reading that it would place in in the next block. But it is unlikely that you will perform in such an environment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead, as everybody else mentioned, you definitely need to encode some collision avoidance algorithm, since the uncertainties (even in a static environment) are always great. You cannot rely on your system to run &quot;blind-folded&quot;. You will need to give it eyes somehow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But then, if you do that, you don't really need an RTK-GPS receiver. A simple one would suffice for most proof-of-concept work. However, if you really got the cash, get a cheap pair for about $1000 (something like &lt;a href=&quot;http://www.swiftnav.com/piksi.html&quot; rel=&quot;nofollow&quot;&gt;Piksi&lt;/a&gt;) and make your life (only a little bit) easier.&lt;/p&gt;&#xA;" OwnerUserId="11500" LastActivityDate="2016-01-11T06:22:27.847" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8852" PostTypeId="1" CreationDate="2016-01-11T09:07:23.603" Score="1" ViewCount="153" Body="&lt;p&gt;Our thesis is about Multicopter using two batteries wherein the first battery is used and when the power goes out, a switch is placed use to charge the first battery while the second battery is powering the multicopter, the process repeats again and again until all the power of the battery is drained. Is the process possible to achieved?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit 1:&#xA;Just to clear everything up again. The thesis is about a &lt;strong&gt;Quadcopter&lt;/strong&gt; that uses two batteries as its power source. These &lt;strong&gt;two batteries&lt;/strong&gt; are attached to a &lt;strong&gt;&quot;switching circuit system&quot;&lt;/strong&gt; that will allow one battery to be drained then the quadcopter will be transferred to the other battery. The solar panels serve as the &quot;charger&quot; of whatever battery is in its standby mode (the discharged battery). So while one battery is being used by the quadcopter, one will be connected to a solar panel which will be charging that battery. &lt;em&gt;Once the other battery is drained, the quadcopter will switch to the charged battery.&lt;/em&gt; This will continue to go on until both batteries are drained. Is this achievable?&lt;/p&gt;&#xA;" OwnerUserId="11541" LastEditorUserId="11565" LastEditDate="2016-01-13T03:23:28.733" LastActivityDate="2016-01-13T03:23:28.733" Title="Quadcopter Charging" Tags="&lt;battery&gt;&lt;multi-rotor&gt;" AnswerCount="3" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="8853" PostTypeId="2" ParentId="8852" CreationDate="2016-01-11T09:31:23.423" Score="1" Body="&lt;p&gt;I think it would be feasible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are multiple examples of &lt;a href=&quot;http://www.uav-store.de/copter-komponenten/airbotpower-board/#cc-m-product-10099966693&quot; rel=&quot;nofollow&quot;&gt;power distribution boards&lt;/a&gt; which allow for dual batteries.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you use such a device, you can leave the multiple input managment to it, while you use a power switch to isolate each battery for charging.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Provided that you use an adequately sized (for your required ampacity) solid-state switch, I would say that your project is realistic.&lt;/p&gt;&#xA;" OwnerUserId="11500" LastActivityDate="2016-01-11T09:31:23.423" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="8854" PostTypeId="2" ParentId="8852" CreationDate="2016-01-11T10:30:42.397" Score="3" Body="&lt;p&gt;The best way to manage power redundancy for autonomous systems is a really interesting topic. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are two classes of power needed. Flight and processing. Often the power required for flight is much higher than what's needed for processing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Issue number 1 is that as soon as you introduce redundancy (2 batteries instead of 1) you incur a penalty of extra volume and weight. 1 big battery will hold more energy than two batteries that fill the same mass and volume.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Issue number 2 is that every stage of electronics you add, every DC-DC converter, every MOSFET, will waste some of your power to heat. So it's very possible that the losses from the extra electronics will be too high.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you have to have a really good reason for using more than one battery. Especially in a flight system where every gram affects performance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One reason is to keep the processing system alive to avoid the time cost of startup and shutdown, or provide emergency recovery communictations. In this case, using a big battery for flight and a small battery for processing might be advantagous. Make the small battery only just big enough for the shutdown/emergency time and power the processor with the big battery during normal operations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another reason would be to allow the vehicle to do an autonomous mechanical change of batteries. Two batteries of the same size makes it cheaper to build and operate a system like this(assuming lots of aircraft and lots of batteries).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based on my current understanding of your system, which is a battery+solar panel power system with the goal of maximizing a single flight (rather than landing and charging on the ground), it's possible to do what you want to do but more efficient to put the energy from the solar panels directly into the motors and use one big battery. &lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="184" LastEditDate="2016-01-12T10:40:13.987" LastActivityDate="2016-01-12T10:40:13.987" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="8855" PostTypeId="1" CreationDate="2016-01-11T10:55:27.167" Score="3" ViewCount="186" Body="&lt;p&gt;I'm planning to build a small (probably around 30 centimeters in diameter, at rest) hexapod robot, but, currently, it would only be able to walk on even ground. To improve this, I would have to, somehow, detect when each leg collides with the ground. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ideally, I would be able to know how much weight each leg is supporting, so that I could both balance the weight and adapt to moving (up or down) terrain (so, if you put a finger below one leg and lifted it, the leg would go up); however, if that's not possible, a simple binary signal would do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a simple and compact method to do this? &lt;/p&gt;&#xA;" OwnerUserId="11542" LastActivityDate="2016-01-12T00:03:59.890" Title="How can I detect ground collision, for an hexapod robot?" Tags="&lt;sensors&gt;&lt;hexapod&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="8856" PostTypeId="2" ParentId="8849" CreationDate="2016-01-11T13:48:46.297" Score="1" Body="&lt;p&gt;On the condition that you don't care about the position of the quadrotor regarding your target, but instead only of the absolute distance, I would say that for starters, you can extract the distance information from your OpenCV algorithm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Have a target with a clear contour (eg a coloured ball) and find its relative position from the center of the camera frame, as well as the size of the contour. You don't need features to extract your relative orientation to the object, just know where you should turn to and how far it is.&#xA;The size of the contour will need to be calibrated so that you can extract distance information from it (the farthest you are, the smaller the object).&#xA;The position of the target from the center of the camera frame will tell you where you need to point your quadrotor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After that, it's a matter of finding a control law for your quadrotor, which will minimize the offset of the target from the camera center, as well as keep it in the required size in the camera frame. This won't necessarily be easy, since there will be conflicting requirements. For example, you will want to bring the quadrotor closer to your target by pitching it down, but at the same time this will increase the targeting error.&#xA;An MPC controller might be suitable for balancing those weights.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In all, I would say that, as it is presented, this is a full-fledged thesis project.&lt;/p&gt;&#xA;" OwnerUserId="11500" LastActivityDate="2016-01-11T13:48:46.297" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8857" PostTypeId="1" CreationDate="2016-01-11T13:56:55.607" Score="4" ViewCount="2184" Body="&lt;p&gt;I have a IMU that has 3-axis accelerator, 3-axis magnetometer, 3-axis gyroscope and row, yaw, pitch value. I want to get the location of the IMU coordinate(the beginning point is (0,0,0)) but I know just using double integration will has dead reckoning problem. And I found a lot of paper just talking about combining IMU with GPS or camera by using Kalman filter. Is it possible that I just use a IMU to get a slightly precise position data? Because in the future work I will use multiple IMUs bounded on human arms to increase the accuracy. &lt;/p&gt;&#xA;" OwnerUserId="11544" LastActivityDate="2016-01-12T12:31:14.643" Title="imu position without GPS or camera" Tags="&lt;imu&gt;&lt;gps&gt;" AnswerCount="3" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8858" PostTypeId="2" ParentId="8857" CreationDate="2016-01-11T14:13:49.120" Score="2" Body="&lt;p&gt;Of course, it is possible. You need to go for a sensor fusion algorithm, that could be Kalman Filter or Complementary Filter. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I personally found very useful the procedure described at the following &lt;a href=&quot;http://philstech.blogspot.ch/2015/06/complimentary-filter-example-quaternion.html&quot; rel=&quot;nofollow&quot;&gt;link&lt;/a&gt;, in order to have a total 3D estimation, without suffering any gimbal lock or other problems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: I am reading only now that you're asking for position estimation, and not orientation estimation. My answer refers to the latter. For a precise position estimation unfortunately you would need other kind of sensors (if your robot has wheels (not clear from the question), you could use encoders instead of GPS).&lt;/p&gt;&#xA;" OwnerUserId="10782" LastEditorUserId="10782" LastEditDate="2016-01-11T16:24:04.570" LastActivityDate="2016-01-11T16:24:04.570" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8859" PostTypeId="2" ParentId="8857" CreationDate="2016-01-11T14:39:45.357" Score="3" Body="&lt;p&gt;No, it is not possible to eliminate the cumulative position error caused by sensor noise and bias without using an additional sensor which can report any kind of position measurement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even the best sensors and filtering will not be able to eliminate in a closed-loop fashion the position error.&lt;/p&gt;&#xA;" OwnerUserId="11500" LastActivityDate="2016-01-11T14:39:45.357" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8860" PostTypeId="1" CreationDate="2016-01-11T14:57:36.837" Score="8" ViewCount="5884" Body="&lt;p&gt;I’ve made a datalog from a MPU6050 (IMU: gyroscope and accelerometer) at 500Hz sample rate. Now I want to calculate the characteristics from the gyro to evaluate the sensor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the gyro I’ve found following values in the datasheet:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Total RMS Noise = 0.05 °/s&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Low-frequency RMS noise = 0.033 °/s &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Rate Noise Spectral Density = 0.005 °/s/sqrt(Hz)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I want to ask how I can calculate these values from my dataset?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the moment I’ve the following values from the dataset:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Standard deviation = 0.0331 °/s&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Variance = 0.0011&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Angular Random Walk (ARW) = 0.003 °/sqrt(s) (From Allan deviation plot)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bias Instability = 0.0012 °/s&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is the ARW equal to the Rate Noise Spectral Density mentioned in the datasheet? And also is the RMS Noise from the datasheet equal to the standard deviation? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;edit:&#xA;I found following website: &lt;a href=&quot;http://www.sensorsmag.com/sensors/acceleration-vibration/noise-measurement-8166&quot; rel=&quot;noreferrer&quot;&gt;http://www.sensorsmag.com/sensors/acceleration-vibration/noise-measurement-8166&lt;/a&gt;&#xA;There is the statement:  &quot;...Because the noise is approximately Gaussian, the standard deviation of the histogram is the RMS noise&quot; So I guess the standard deviation is the RMS noise from the datasheet. But how about the ARW?&lt;/p&gt;&#xA;" OwnerUserId="11546" LastEditorUserId="11546" LastEditDate="2016-01-12T11:11:02.627" LastActivityDate="2021-03-03T19:03:55.923" Title="Angle Random Walk vs. Rate Noise Density (MPU6050)" Tags="&lt;sensors&gt;&lt;imu&gt;&lt;gyroscope&gt;&lt;sensor-fusion&gt;&lt;statistics&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8862" PostTypeId="2" ParentId="8855" CreationDate="2016-01-12T00:03:59.890" Score="2" Body="&lt;p&gt;You could put a strain gage on each leg. Used in a Wheatstone bridge configuration, it outputs a voltage proportional to the force in the leg. This could accomplish everything you want, and assuming you have relatively low accuracy requirements, the circuit is an op-amp and some resistors to give an analog input to a microcontroller or ADC.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-01-12T00:03:59.890" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="8865" PostTypeId="2" ParentId="8849" CreationDate="2016-01-12T11:07:09.903" Score="1" Body="&lt;p&gt;A standard approach (using opencv solvePnP) is using at least 4 points in the image that define landmarks of a known geometry.&#xA;You can then get the pose of the camera relative to the object.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example if you had a blue rectangle of which you could detect the corners in the image, and you knew the dimensions of this rectangle, you could work out the relative pose.&#xA;You must have some way to identify which corner is which (say you had them each painted different colours just in the corners).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The relative position between your robot would be a (rotated) error, which you could feed into a PID.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See also: &lt;a href=&quot;https://stackoverflow.com/questions/16265714/camera-pose-estimation-opencv-pnp&quot;&gt;https://stackoverflow.com/questions/16265714/camera-pose-estimation-opencv-pnp&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8859" LastEditorUserId="-1" LastEditDate="2017-05-23T12:37:11.430" LastActivityDate="2016-01-12T11:07:09.903" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8866" PostTypeId="1" AcceptedAnswerId="8869" CreationDate="2016-01-12T11:27:14.293" Score="3" ViewCount="1517" Body="&lt;p&gt;I have built my differential drive mobile robot in solidworks and converted that to URDF file using soliworks2urdf converter. I successfully launched and robot and simulated with tele-operation node. Since i am intended to use navigation stack in i viewed the transform of the robot in rviz which resulted as below.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2FgIo.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2FgIo.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can see the base plate is the one which supports the wheels and castors but the tf of base plate is shown away from the actual link and even odom is away from the model. Where have i gone wrong and how to fix this. Refer the URDF of model below.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    &amp;lt;?xml   version=&quot;1.0&quot;?&amp;gt;&#xA;&amp;lt;robot&#xA;  name=&quot;JMbot&quot;&amp;gt;&#xA;  &amp;lt;link&#xA;    name=&quot;Base_plate&quot;&amp;gt;&#xA;    &amp;lt;inertial&amp;gt;&#xA;      &amp;lt;origin&#xA;        xyz=&quot;-0.3317 0.71959 -0.39019&quot;&#xA;        rpy=&quot;0 0 0&quot; /&amp;gt;&#xA;      &amp;lt;mass&#xA;        value=&quot;0.55378&quot; /&amp;gt;&#xA;      &amp;lt;inertia&#xA;        ixx=&quot;0.0061249&quot;&#xA;        ixy=&quot;0.00016086&quot;&#xA;        ixz=&quot;-8.6651E-18&quot;&#xA;        iyy=&quot;0.0041631&quot;&#xA;        iyz=&quot;-1.4656E-17&quot;&#xA;        izz=&quot;0.010283&quot; /&amp;gt;&#xA;    &amp;lt;/inertial&amp;gt;&#xA;    &amp;lt;visual&amp;gt;&#xA;      &amp;lt;origin&#xA;        xyz=&quot;0 0 0&quot;&#xA;        rpy=&quot;0 0 0&quot; /&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;mesh&#xA;          filename=&quot;package://jmbot_description/meshes/Base_plate.STL&quot; /&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;      &amp;lt;material&#xA;        name=&quot;&quot;&amp;gt;&#xA;        &amp;lt;color&#xA;          rgba=&quot;0.74902 0.74902 0.74902 1&quot; /&amp;gt;&#xA;      &amp;lt;/material&amp;gt;&#xA;    &amp;lt;/visual&amp;gt;&#xA;    &amp;lt;collision&amp;gt;&#xA;      &amp;lt;origin&#xA;        xyz=&quot;0 0 0&quot;&#xA;        rpy=&quot;0 0 0&quot; /&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;mesh&#xA;          filename=&quot;package://jmbot_description/meshes/Base_plate.STL&quot; /&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;    &amp;lt;/collision&amp;gt;&#xA;  &amp;lt;/link&amp;gt;&#xA;  &amp;lt;link&#xA;    name=&quot;Wheel_R&quot;&amp;gt;&#xA;    &amp;lt;inertial&amp;gt;&#xA;      &amp;lt;origin&#xA;        xyz=&quot;0.010951 1.1102E-16 -1.1102E-16&quot;&#xA;        rpy=&quot;0 0 0&quot; /&amp;gt;&#xA;      &amp;lt;mass&#xA;        value=&quot;0.45064&quot; /&amp;gt;&#xA;      &amp;lt;inertia&#xA;        ixx=&quot;0.00091608&quot;&#xA;        ixy=&quot;-1.2355E-19&quot;&#xA;        ixz=&quot;1.0715E-18&quot;&#xA;        iyy=&quot;0.00053395&quot;&#xA;        iyz=&quot;-6.7763E-20&quot;&#xA;        izz=&quot;0.00053395&quot; /&amp;gt;&#xA;    &amp;lt;/inertial&amp;gt;&#xA;    &amp;lt;visual&amp;gt;&#xA;      &amp;lt;origin&#xA;        xyz=&quot;0 0 0&quot;&#xA;        rpy=&quot;0 0 0&quot; /&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;mesh&#xA;          filename=&quot;package://jmbot_description/meshes/Wheel_R.STL&quot; /&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;      &amp;lt;material&#xA;        name=&quot;&quot;&amp;gt;&#xA;        &amp;lt;color&#xA;          rgba=&quot;0.74902 0.74902 0.74902 1&quot; /&amp;gt;&#xA;      &amp;lt;/material&amp;gt;&#xA;    &amp;lt;/visual&amp;gt;&#xA;    &amp;lt;collision&amp;gt;&#xA;      &amp;lt;origin&#xA;        xyz=&quot;0 0 0&quot;&#xA;        rpy=&quot;0 0 0&quot; /&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;mesh&#xA;          filename=&quot;package://jmbot_description/meshes/Wheel_R.STL&quot; /&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;    &amp;lt;/collision&amp;gt;&#xA;  &amp;lt;/link&amp;gt;&#xA;  &amp;lt;joint&#xA;    name=&quot;Wheel_R&quot;&#xA;    type=&quot;continuous&quot;&amp;gt;&#xA;    &amp;lt;origin&#xA;      xyz=&quot;-0.14688 0.40756 -0.73464&quot;&#xA;      rpy=&quot;-2.7127 -0.081268 -3.1416&quot; /&amp;gt;&#xA;    &amp;lt;parent&#xA;      link=&quot;Base_plate&quot; /&amp;gt;&#xA;    &amp;lt;child&#xA;      link=&quot;Wheel_R&quot; /&amp;gt;&#xA;    &amp;lt;axis&#xA;      xyz=&quot;1 0 0&quot; /&amp;gt;&#xA;  &amp;lt;/joint&amp;gt;&#xA;  &amp;lt;link&#xA;    name=&quot;Wheel_L&quot;&amp;gt;&#xA;    &amp;lt;inertial&amp;gt;&#xA;      &amp;lt;origin&#xA;        xyz=&quot;-0.039049 2.2204E-16 2.498E-15&quot;&#xA;        rpy=&quot;0 0 0&quot; /&amp;gt;&#xA;      &amp;lt;mass&#xA;        value=&quot;0.45064&quot; /&amp;gt;&#xA;      &amp;lt;inertia&#xA;        ixx=&quot;0.00091608&quot;&#xA;        ixy=&quot;-9.6693E-19&quot;&#xA;        ixz=&quot;-1.7816E-18&quot;&#xA;        iyy=&quot;0.00053395&quot;&#xA;        iyz=&quot;1.3553E-19&quot;&#xA;        izz=&quot;0.00053395&quot; /&amp;gt;&#xA;    &amp;lt;/inertial&amp;gt;&#xA;    &amp;lt;visual&amp;gt;&#xA;      &amp;lt;origin&#xA;        xyz=&quot;0 0 0&quot;&#xA;        rpy=&quot;0 0 0&quot; /&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;mesh&#xA;          filename=&quot;package://jmbot_description/meshes/Wheel_L.STL&quot; /&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;      &amp;lt;material&#xA;        name=&quot;&quot;&amp;gt;&#xA;        &amp;lt;color&#xA;          rgba=&quot;0.74902 0.74902 0.74902 1&quot; /&amp;gt;&#xA;      &amp;lt;/material&amp;gt;&#xA;    &amp;lt;/visual&amp;gt;&#xA;    &amp;lt;collision&amp;gt;&#xA;      &amp;lt;origin&#xA;        xyz=&quot;0 0 0&quot;&#xA;        rpy=&quot;0 0 0&quot; /&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;mesh&#xA;          filename=&quot;package://jmbot_description/meshes/Wheel_L.STL&quot; /&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;    &amp;lt;/collision&amp;gt;&#xA;  &amp;lt;/link&amp;gt;&#xA;  &amp;lt;joint&#xA;    name=&quot;Wheel_L&quot;&#xA;    type=&quot;continuous&quot;&amp;gt;&#xA;    &amp;lt;origin&#xA;      xyz=&quot;-0.46668 0.40756 -0.70859&quot;&#xA;      rpy=&quot;2.512 0.081268 3.4272E-15&quot; /&amp;gt;&#xA;    &amp;lt;parent&#xA;      link=&quot;Base_plate&quot; /&amp;gt;&#xA;    &amp;lt;child&#xA;      link=&quot;Wheel_L&quot; /&amp;gt;&#xA;    &amp;lt;axis&#xA;      xyz=&quot;-1 0 0&quot; /&amp;gt;&#xA;  &amp;lt;/joint&amp;gt;&#xA;  &amp;lt;link&#xA;    name=&quot;Castor_F&quot;&amp;gt;&#xA;    &amp;lt;inertial&amp;gt;&#xA;      &amp;lt;origin&#xA;        xyz=&quot;2.2204E-16 0 0.031164&quot;&#xA;        rpy=&quot;0 0 0&quot; /&amp;gt;&#xA;      &amp;lt;mass&#xA;        value=&quot;0.056555&quot; /&amp;gt;&#xA;      &amp;lt;inertia&#xA;        ixx=&quot;2.4476E-05&quot;&#xA;        ixy=&quot;-2.8588E-35&quot;&#xA;        ixz=&quot;1.0281E-20&quot;&#xA;        iyy=&quot;2.4476E-05&quot;&#xA;        iyz=&quot;-1.2617E-20&quot;&#xA;        izz=&quot;7.4341E-06&quot; /&amp;gt;&#xA;    &amp;lt;/inertial&amp;gt;&#xA;    &amp;lt;visual&amp;gt;&#xA;      &amp;lt;origin&#xA;        xyz=&quot;0 0 0&quot;&#xA;        rpy=&quot;0 0 0&quot; /&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;mesh&#xA;          filename=&quot;package://jmbot_description/meshes/Castor_F.STL&quot; /&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;      &amp;lt;material&#xA;        name=&quot;&quot;&amp;gt;&#xA;        &amp;lt;color&#xA;          rgba=&quot;0.75294 0.75294 0.75294 1&quot; /&amp;gt;&#xA;      &amp;lt;/material&amp;gt;&#xA;    &amp;lt;/visual&amp;gt;&#xA;    &amp;lt;collision&amp;gt;&#xA;      &amp;lt;origin&#xA;        xyz=&quot;0 0 0&quot;&#xA;        rpy=&quot;0 0 0&quot; /&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;mesh&#xA;          filename=&quot;package://jmbot_description/meshes/Castor_F.STL&quot; /&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;    &amp;lt;/collision&amp;gt;&#xA;  &amp;lt;/link&amp;gt;&#xA;  &amp;lt;joint&#xA;    name=&quot;Castor_F&quot;&#xA;    type=&quot;continuous&quot;&amp;gt;&#xA;    &amp;lt;origin&#xA;      xyz=&quot;-0.31952 0.39256 -0.57008&quot;&#xA;      rpy=&quot;-1.5708 1.1481 -1.3614E-16&quot; /&amp;gt;&#xA;    &amp;lt;parent&#xA;      link=&quot;Base_plate&quot; /&amp;gt;&#xA;    &amp;lt;child&#xA;      link=&quot;Castor_F&quot; /&amp;gt;&#xA;    &amp;lt;axis&#xA;      xyz=&quot;0 0 1&quot; /&amp;gt;&#xA;  &amp;lt;/joint&amp;gt;&#xA;  &amp;lt;link&#xA;    name=&quot;Castor_R&quot;&amp;gt;&#xA;    &amp;lt;inertial&amp;gt;&#xA;      &amp;lt;origin&#xA;        xyz=&quot;-1.1102E-16 0 0.031164&quot;&#xA;        rpy=&quot;0 0 0&quot; /&amp;gt;&#xA;      &amp;lt;mass&#xA;        value=&quot;0.056555&quot; /&amp;gt;&#xA;      &amp;lt;inertia&#xA;        ixx=&quot;2.4476E-05&quot;&#xA;        ixy=&quot;0&quot;&#xA;        ixz=&quot;-3.9352E-20&quot;&#xA;        iyy=&quot;2.4476E-05&quot;&#xA;        iyz=&quot;-1.951E-20&quot;&#xA;        izz=&quot;7.4341E-06&quot; /&amp;gt;&#xA;    &amp;lt;/inertial&amp;gt;&#xA;    &amp;lt;visual&amp;gt;&#xA;      &amp;lt;origin&#xA;        xyz=&quot;0 0 0&quot;&#xA;        rpy=&quot;0 0 0&quot; /&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;mesh&#xA;          filename=&quot;package://jmbot_description/meshes/Castor_R.STL&quot; /&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;      &amp;lt;material&#xA;        name=&quot;&quot;&amp;gt;&#xA;        &amp;lt;color&#xA;          rgba=&quot;0.75294 0.75294 0.75294 1&quot; /&amp;gt;&#xA;      &amp;lt;/material&amp;gt;&#xA;    &amp;lt;/visual&amp;gt;&#xA;    &amp;lt;collision&amp;gt;&#xA;      &amp;lt;origin&#xA;        xyz=&quot;0 0 0&quot;&#xA;        rpy=&quot;0 0 0&quot; /&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;mesh&#xA;          filename=&quot;package://jmbot_description/meshes/Castor_R.STL&quot; /&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;    &amp;lt;/collision&amp;gt;&#xA;  &amp;lt;/link&amp;gt;&#xA;  &amp;lt;joint&#xA;    name=&quot;Castor_R&quot;&#xA;    type=&quot;continuous&quot;&amp;gt;&#xA;    &amp;lt;origin&#xA;      xyz=&quot;-0.34387 0.39256 -0.86909&quot;&#xA;      rpy=&quot;1.5708 -0.93144 3.1416&quot; /&amp;gt;&#xA;    &amp;lt;parent&#xA;      link=&quot;Base_plate&quot; /&amp;gt;&#xA;    &amp;lt;child&#xA;      link=&quot;Castor_R&quot; /&amp;gt;&#xA;    &amp;lt;axis&#xA;      xyz=&quot;0 0 1&quot; /&amp;gt;&#xA;  &amp;lt;/joint&amp;gt;&#xA;&#xA;&amp;lt;gazebo&amp;gt;&#xA;&amp;lt;plugin name=&quot;differential_drive_controller&quot;&#xA;    filename=&quot;libgazebo_ros_diff_drive.so&quot;&amp;gt;&#xA;    &amp;lt;leftJoint&amp;gt;Wheel_L&amp;lt;/leftJoint&amp;gt;  &#xA;    &amp;lt;rightJoint&amp;gt;Wheel_R&amp;lt;/rightJoint&amp;gt;&#xA;    &amp;lt;robotBaseFrame&amp;gt;Base_plate&amp;lt;/robotBaseFrame&amp;gt;&#xA;    &amp;lt;wheelSeparation&amp;gt;0.235&amp;lt;/wheelSeparation&amp;gt;&#xA;    &amp;lt;wheelDiameter&amp;gt;0.12&amp;lt;/wheelDiameter&amp;gt;&#xA;    &amp;lt;publishWheelJointState&amp;gt;true&amp;lt;/publishWheelJointState&amp;gt;&#xA;    &amp;lt;/plugin&amp;gt;&#xA;&amp;lt;plugin name=&quot;joint_state_publisher&quot;&#xA;    filename=&quot;libgazebo_ros_joint_state_publisher.so&quot;&amp;gt;&#xA;    &amp;lt;jointName&amp;gt;Castor_F, Castor_R&amp;lt;/jointName&amp;gt;&#xA;    &amp;lt;/plugin&amp;gt;&#xA;&#xA;&amp;lt;/gazebo&amp;gt;&#xA;&#xA;&amp;lt;/robot&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="9856" LastActivityDate="2016-01-12T14:48:09.183" Title="Tf frame origin is offset from the actual base_link" Tags="&lt;mobile-robot&gt;&lt;ros&gt;&lt;navigation&gt;&lt;odometry&gt;&lt;gazebo&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="8868" PostTypeId="2" ParentId="8857" CreationDate="2016-01-12T12:31:14.643" Score="2" Body="&lt;p&gt;The answer to this question greatly depends on your acceptable error, and budget.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As the other two answers have stated, it is practically impossible to dead-reckon the position without directly observing the position with another sensor; this is however based on assumptions about your acceptable error and IMU selection.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your acceptable error is large enough, and the time period of which you need operation is small enough, you could possibly estimate the bias of the MEMS sensors as an average measurements during a &quot;calibration&quot; period.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;e.g. Don't move the IMU for 5 seconds, record the average accelerations and angular rates, and use that as the bias over the operating period of the next 5 seconds. Do the double-integration for the accelerometer and angular integration (I'd suggest Quaternion integration) for the gyro, but subtract each sensors calculated bias.&#xA;&lt;em&gt;I must stress that this will only work for a few seconds for most cheap MEMS IMUs.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively, if you use an incredibly expensive IMU (e.g. naval IMU, up to $2m, 35 kg) you could probably dead-reckon to within acceptable errors for a substantial time period.&lt;/p&gt;&#xA;" OwnerUserId="8859" LastActivityDate="2016-01-12T12:31:14.643" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8869" PostTypeId="2" ParentId="8866" CreationDate="2016-01-12T13:04:40.670" Score="3" Body="&lt;p&gt;It looks like most of your parts have no rotation, but &lt;em&gt;some&lt;/em&gt; of them do, so I'm going to guess that you didn't mate your assembly to the origin planes in Solidworks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, on your base plate, open the Solidworks part file and check that the origin planes run through what you want the origin of the part to be. If they don't and it's a pain to re-draw the part, then go to the &quot;Reference Feature&quot; button and then &quot;Plane&quot; and draw what you want the origin planes to be. SAVE THE PART. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Open your assembly, and check if it says &quot;underdefined&quot; at the bottom. Solidworks (annoyingly) puts the first part down fixed, but not mated, to a random position in the assembly space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, in the parts tree, right click the top part (should have (f) after the name, indicating it's fixed), and click &quot;float&quot;. You may have to expand the option list to see this. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now go to Mates, then expand the part list for your base plate, then mate the origin (or reference) planes of your base plate to the origin planes of your assembly space. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may also need to mate the wheels to prevent them from rotating in order to get the &quot;fully defined&quot; message at the bottom.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm on my phone at the moment; I'll add some figures after I get to work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;:EDIT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are some pictures OP provided. I've marked up what I believe to be the error. I think that the URDF Global Origin is set to be the same as the Solidworks assembly origin. In this case, for the robot, the robot (global) origin &lt;em&gt;should&lt;/em&gt; be the origin of the Base Plate, but I am betting that the Base Plate is not mated to the assembly origin, so this is causing the discrepancy in the simulation visualization. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/wjubW.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wjubW.png&quot; alt=&quot;Solidworks URDF Assembly Origin&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/iH9pT.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/iH9pT.png&quot; alt=&quot;Solidworks URDF Global Origin&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;:EDIT 2:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's a picture walk-through of mating a part to the assembly origin. If you need anything clarified, please let me know in a comment, but if you have a new question about something then please just make a new question (they're free!)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/QPBvy.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QPBvy.png&quot; alt=&quot;Solidworks URDF Part Origin&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/EpPt6.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/EpPt6.png&quot; alt=&quot;Solidworks URDF Under defined Assembly&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/f9Bpz.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/f9Bpz.png&quot; alt=&quot;Solidworks URDF Part Assembly Mating&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/bAuGZ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/bAuGZ.png&quot; alt=&quot;Solidworks URDF Fully Defined Assembly&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2016-01-12T14:48:09.183" LastActivityDate="2016-01-12T14:48:09.183" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8873" PostTypeId="2" ParentId="8852" CreationDate="2016-01-12T16:23:33.870" Score="1" Body="&lt;p&gt;Would the answer not just be a make-before-break DPDT relay/toggle controlled by whatever (microcontroller, flight controller, etc.) is monitoring battery voltage? If &lt;code&gt;battery voltage&lt;/code&gt; is less than &lt;code&gt;preset limit&lt;/code&gt; then &lt;code&gt;toggle&lt;/code&gt;. If &lt;code&gt;battery voltage&lt;/code&gt; is still less than &lt;code&gt;preset limit&lt;/code&gt; then &lt;code&gt;power down&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Use make-before-break (MBB) to ensure there's no gap in voltage supply, and DPDT lets you switch two circuits (charging circuit and load circuit). There would be a moment where both batteries are connected, but I don't know that the momentary connection would have any adverse effects. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-01-12T16:23:33.870" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="8874" PostTypeId="1" CreationDate="2016-01-13T01:09:18.950" Score="4" ViewCount="629" Body="&lt;p&gt;Please have a look at &lt;a href=&quot;https://www.youtube.com/watch?v=qU4YMDJNzpg&quot; rel=&quot;nofollow&quot;&gt;this youtube video&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When this mobile robot operates, the rack (which is said to weight up to 450 kg) can have its Center Of Mass (COM) distributed at any location. For example, this COM can be located 5 or 10 cm off from the center of the robot. Because of this, when the robot revolves, the center of rotation will not be at the center of the robot anymore. However as you see in the video, it can still rotate many circles perfectly around its up-right axis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what do you think about this? Is this possible by mechanical design only? Or did they use some kind of advanced feedback control system to counter the effect of the off-center COM?&lt;/p&gt;&#xA;" OwnerUserId="11564" LastActivityDate="2016-01-13T23:20:50.563" Title="How can this mobile robot rotate so perfectly?" Tags="&lt;mobile-robot&gt;&lt;control&gt;&lt;mechanism&gt;" AnswerCount="3" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8875" PostTypeId="2" ParentId="8874" CreationDate="2016-01-13T04:39:20.240" Score="1" Body="&lt;p&gt;The youtube video &lt;a href=&quot;https://www.youtube.com/watch?v=8gy5tYVR-28&quot; rel=&quot;nofollow&quot;&gt;High-Speed Robots Part 1: Meet BettyBot in &quot;Human Exclusion Zone&quot; Warehouses&lt;/a&gt; seems to me to better show and explain how the Kiva robots work when moving racks around the warehouse.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although the video isn't clear enough to say for sure, the bot appears to remain centered beneath the rack, without using an x-y positioning mechanism to compensate for an off-center center of mass axis.  It would be possible to use such a mechanism since the robot doesn't need to rotate 360° after it hooks up; it could get by with turning ±180°.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It looks like the bot's initial spin underneath a rack raises a round connector up from the bot to an attach point on the bottom of the rack.  After that, the bot and the rack are mechanically coupled.  That will make it less significant if the the rack's COM axis is a few cm off-center relative to the attach point.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If COM axis being off-center &lt;em&gt;were&lt;/em&gt; still a problem, and no x-y positioning mechanism is used, they could have mechanisms to move weights around or pump water from vertical tubes on one side of a rack to the other side, etc.&lt;/p&gt;&#xA;" OwnerUserId="478" LastActivityDate="2016-01-13T04:39:20.240" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8876" PostTypeId="2" ParentId="8874" CreationDate="2016-01-13T04:54:07.093" Score="3" Body="&lt;p&gt;If I understand correctly, you are referring to when the robot spins and the rack remains stationary (dynamic motions involving the rack mass seem to be slow as you would expect with such a high COM).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this case only the kinematics are important. It's important that the rotational axis of the wheels and the rotational axis of the rack-support are colocated. The location of the COM of the robot part of the system is unimportant as long as friction maintains the kinematics. &lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2016-01-13T04:54:07.093" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8877" PostTypeId="1" AcceptedAnswerId="8885" CreationDate="2016-01-13T23:05:56.890" Score="0" ViewCount="58" Body="&lt;p&gt;I've got a project that will require my drone to perform a circle turn while the drone is always facing the tangent of the turning curve. Similiar to a car that is performing a frictionless banked turn. &#xA;Just wondering which method should i use to achieve it, the throttle control can be ignored since i already have a pid on height control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any suggestions would be appreciated. &lt;/p&gt;&#xA;" OwnerUserId="4399" LastEditorUserId="4399" LastEditDate="2016-01-14T11:20:31.353" LastActivityDate="2016-01-14T12:14:19.813" Title="Need the uav to perform a circle turn" Tags="&lt;quadcopter&gt;&lt;pid&gt;&lt;multi-rotor&gt;" AnswerCount="1" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="8878" PostTypeId="2" ParentId="8874" CreationDate="2016-01-13T23:20:50.563" Score="0" Body="&lt;p&gt;IEEE has a writeup with the &lt;a href=&quot;http://spectrum.ieee.org/robotics/robotics-software/three-engineers-hundreds-of-robots-one-warehouse&quot; rel=&quot;nofollow&quot;&gt;general answer&lt;/a&gt; about 4/5's down the article.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your concern about friction and slippage coming from COG offsets (Center of Gravity; COM) is a very good notion.  A simple &amp;amp; potentially incorrect solution is to make the robot's wheelbase as wide as possible and to make the ball screw lift slowly.  A very rigorous approach would be to account for torque and inertia, building a physical model and using Euler's equation (general rigid body dynamics equation).&lt;/p&gt;&#xA;" OwnerUserId="9314" LastActivityDate="2016-01-13T23:20:50.563" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8879" PostTypeId="1" AcceptedAnswerId="8880" CreationDate="2016-01-14T06:32:39.270" Score="1" ViewCount="4831" Body="&lt;p&gt;I want to make a drone. But my budget is very low. Brushless motors are very expensive. I want use the Brushed CHEAP ones. can i us them ?&lt;/p&gt;&#xA;" OwnerUserId="11573" LastActivityDate="2017-11-16T13:38:40.207" Title="Can i use DC Brushed motors for building a drone?" Tags="&lt;quadcopter&gt;&lt;motor&gt;&lt;brushless-motor&gt;" AnswerCount="2" CommentCount="2" ClosedDate="2017-11-16T14:58:59.053" ContentLicense="CC BY-SA 3.0" />
  <row Id="8880" PostTypeId="2" ParentId="8879" CreationDate="2016-01-14T07:53:49.707" Score="0" Body="&lt;p&gt;Most cheap small multirotors use use brushed motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some examples:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.banggood.com/Cheerson-CX10-CX10-Mini-24G-4CH-6-Axis-LED-RC-Quadcopter-RTF-p-926614.html&quot; rel=&quot;nofollow&quot;&gt;http://www.banggood.com/Cheerson-CX10-CX10-Mini-24G-4CH-6-Axis-LED-RC-Quadcopter-RTF-p-926614.html&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.banggood.com/Eachine-H8-Mini-Headless-Mode-2_4G-4CH-6-Axis-RC-Quadcopter-RTF-p-975808.html&quot; rel=&quot;nofollow&quot;&gt;http://www.banggood.com/Eachine-H8-Mini-Headless-Mode-2_4G-4CH-6-Axis-RC-Quadcopter-RTF-p-975808.html&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The drawback with brushed motors is that they are much less efficient and can produce less torque. Thus, they have to run at a much higher RPM in order to produce sufficient power.&#xA;I think you will find that it will be harder to manage crisp control of your multirotor with brushed motors.&lt;/p&gt;&#xA;" OwnerUserId="11500" LastActivityDate="2016-01-14T07:53:49.707" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8881" PostTypeId="2" ParentId="8471" CreationDate="2016-01-14T07:55:43.213" Score="1" Body="&lt;p&gt;As I understand from your case is I think you need to do multibody dynamics (major part for any robot simulation) and some flexible body simulation in dynamics (for compliant parts)&#xA;You have learnt write about MSC Adams capabilites.&#xA;Follow this link:&#xA;&lt;a href=&quot;http://www.mscsoftware.com/product/flexible-multibody-systems-adams&quot; rel=&quot;nofollow&quot;&gt;http://www.mscsoftware.com/product/flexible-multibody-systems-adams&lt;/a&gt;&#xA;Your concept can be simulated with Adams View and Flex. The only downside for beginners is Adams's vastness.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MatLAB has very limited features for your case.&lt;/p&gt;&#xA;" OwnerUserId="11574" LastActivityDate="2016-01-14T07:55:43.213" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8882" PostTypeId="1" CreationDate="2016-01-14T09:07:35.957" Score="2" ViewCount="420" Body="&lt;p&gt;Where can I find a general implementation of Canny's Roadmap Algorithm(or Silhouette Method) for Robot Motion Planning?&lt;/p&gt;&#xA;" OwnerUserId="11575" LastEditorUserId="163" LastEditDate="2016-01-14T16:10:36.690" LastActivityDate="2016-03-14T16:44:45.323" Title="Canny's Roadmap Algorithm" Tags="&lt;motion-planning&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8883" PostTypeId="1" AcceptedAnswerId="8884" CreationDate="2016-01-14T10:35:57.577" Score="1" ViewCount="45" Body="&lt;p&gt;Hello I am new to the field of robotics but have some knowledge of raspberry pi, arduino, python.&#xA;I want to make Robotic arm which can be used to find the centre of any disk.&#xA;There may be disk of different diameter coming one after another on conveyor.&#xA;I need to make hole at the center of disk using robotic arm. How can I do this ?&#xA;What techniques and sensors I should use to implement the mechanical and electronic part.&#xA;(I don't want to use camera and openCV). Thanks in advance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/xwqCh.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xwqCh.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11576" LastActivityDate="2016-01-14T11:01:12.030" Title="How to find center of a disk using robotic arm" Tags="&lt;robotic-arm&gt;&lt;mechanism&gt;&lt;electronics&gt;&lt;movement&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8884" PostTypeId="2" ParentId="8883" CreationDate="2016-01-14T11:01:12.030" Score="0" Body="&lt;p&gt;In this case the precision is the most important factor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;industrial robots have typically a precision of 0.1 mm.  If you are building one without in depth machine design and manufacturing experience, it is expected that the precision for your robot arm will not be as good. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead of a robot arm I would recommend a portal type structure. Much easier to build from COTS components. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the disks are round (enough) you can use a distance sensor (laser or ultra sound depending in the material/coating you are trying to measure) at the side of the conveyor belt. As soon as the disk passes the sensor you can see how the radius is changing, if you know the velocity of your conveyor belt you can calculate the radius and then the center of the disk. Will be a bit trick if the conveyor belt stops and moves in the middl of a measurement but passing the disk in front of the sensor and knowing the velocity of the conveyor gives you enough measurments to eliminate noise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just wait until the center is under your portal tool on the conveyor belt (the disance to the sensor is constant) then move the tool to the center and drill.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/nwT6f.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/nwT6f.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2016-01-14T11:01:12.030" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8885" PostTypeId="2" ParentId="8877" CreationDate="2016-01-14T12:14:19.813" Score="1" Body="&lt;p&gt;A possible approach would be to construct a virtual potential field, which is tangent to your desired circle and use it for reference (target) orientation (yaw angle).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is an algorithm for a plane here: Beard, R., &amp;amp; McLain, T. (2012). Small unmanned aircraft: Theory and practice, Ch. 10.2&lt;/p&gt;&#xA;" OwnerUserId="11500" LastActivityDate="2016-01-14T12:14:19.813" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8886" PostTypeId="2" ParentId="8471" CreationDate="2016-01-14T14:05:17.320" Score="0" Body="&lt;p&gt;Check out this &lt;a href=&quot;http://royfeatherstone.org/spatial/index.html&quot; rel=&quot;nofollow&quot;&gt;link&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is about a Matlab Toolbox by Roy Featherstone, author of the book Rigid Body Dynamics Algorithms. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It can be used for robot with contacts, like in your case. I don't know if it can be extended to compliant elements.&lt;/p&gt;&#xA;" OwnerUserId="10782" LastActivityDate="2016-01-14T14:05:17.320" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8888" PostTypeId="1" CreationDate="2016-01-14T15:48:28.613" Score="1" ViewCount="623" Body="&lt;p&gt;I am building a quadrotor with a CC3D (OpenPilot) and a RPi. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My first idea is trying to communicate the CC3D with the RPi using the main port of the first one but I can't find any information about how to communicate the board with any device (or other information about the commands or serial configuration).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anybody knows whether this is possible and where to find that info??&lt;/p&gt;&#xA;" OwnerUserId="11050" LastActivityDate="2016-05-13T21:35:01.450" Title="CC3D OpenPilot - Communication port" Tags="&lt;raspberry-pi&gt;&lt;quadcopter&gt;" AnswerCount="0" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8889" PostTypeId="2" ParentId="8882" CreationDate="2016-01-14T16:18:00.423" Score="2" Body="&lt;p&gt;Well, you probably can't. The reason is Canny's follows 3 basic steps.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Collect a bunch of points in the environment and connect all the points &#xA;that have a free path between them&lt;/li&gt;&#xA;&lt;li&gt;Connect start and end to this graph&lt;/li&gt;&#xA;&lt;li&gt;Do some kind of path planner on this graph, e.g., Dijkstra. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;So, for different evironments, step 1 takes wildly different forms. In 2D, this might be a visibility graph. In 3D, there isn't really a good algorithm for constructing the graph so you might sample. In higher dimensions, it's even worse.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, if you are comfortable implementing Dijkstra, then implementing 1 and 2 are pretty close in difficulty. You may have to do this homework assignment on your own.&lt;/p&gt;&#xA;" OwnerUserId="163" LastActivityDate="2016-01-14T16:18:00.423" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8891" PostTypeId="1" AcceptedAnswerId="8892" CreationDate="2016-01-14T21:00:04.013" Score="1" ViewCount="97" Body="&lt;p&gt;I have all the specs from a quadcopter, everthing, would it be possible to figure out the pid from those specs?&lt;/p&gt;&#xA;" OwnerUserId="4399" LastActivityDate="2016-01-18T00:18:46.547" Title="Figure out PID values from drone specs" Tags="&lt;quadcopter&gt;&lt;pid&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8892" PostTypeId="2" ParentId="8891" CreationDate="2016-01-14T21:17:07.420" Score="2" Body="&lt;p&gt;Generally, no. You'd have to evaluate the system and do some &lt;a href=&quot;https://en.wikipedia.org/wiki/System_identification&quot; rel=&quot;nofollow&quot;&gt;system identification&lt;/a&gt;. The reason being that even though you know the specs, you don't know how the system will respond to perturbations or errors in manufacturing, etc. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you've done some system identification to figure out response curves, you can tune the parameters using the guide in the comment (&lt;a href=&quot;http://innovativecontrols.com/blog/basics-tuning-pid-loops&quot; rel=&quot;nofollow&quot;&gt;or here&lt;/a&gt;).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another method is to just fly it around a set point and observe its behavior, though I think that's not the best solution.&lt;/p&gt;&#xA;" OwnerUserId="163" LastEditorUserId="163" LastEditDate="2016-01-18T00:18:46.547" LastActivityDate="2016-01-18T00:18:46.547" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8893" PostTypeId="1" CreationDate="2016-01-14T21:20:47.233" Score="2" ViewCount="2600" Body="&lt;p&gt;This is my first week with Gazebo.  The tutorials are clear (except for my dearth of C++ knowledge) but now that I'm working to move out on my own things are getting cloudy.  I made a model comprising two boxes and a revolute joint.  The file one_r_test.world loads this model.  A plugin is &quot;loaded&quot; (?) in model.sdf and that plugin, ModelControl, comes from model_push.cc in the &quot;Model plugins&quot; tutorial (&lt;a href=&quot;http://gazebosim.org/tutorials?tut=plugins_model&amp;amp;cat=write_plugin&quot; rel=&quot;nofollow&quot;&gt;http://gazebosim.org/tutorials?tut=plugins_model&amp;amp;cat=write_plugin&lt;/a&gt;), which uses SetLinearVel to move a box.  I can get this same behavior out of model_control.cc if I just copy the tutorial code (and change the plugin name as appropriate), but that's not what I want.  I'm seeking to eventually simulate joint control of robotic manipulators and what's not working in this basic simulation is my attempt to move the model joint via the ModelControl plugin.  It moves in the GUI if I set the velocity (or torque) that way.  The model_control.cc code is pasted below in hopes that you can identify a problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;model_control.cc&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&#xA;#include &quot;boost/bind.hpp&quot;&#xA;#include &quot;gazebo/gazebo.hh&quot;&#xA;#include &quot;gazebo/physics/physics.hh&quot;&#xA;#include &quot;gazebo/common/common.hh&quot;&#xA;#include &quot;stdio.h&quot;&#xA;// In the real file these quotes are greater-than and less-than but I&#xA;// don't know how to get that to show up in my question&#xA;&#xA;namespace gazebo&#xA;{&#xA;  class ModelControl : public ModelPlugin&#xA;  {&#xA;  public: void Load(physics::ModelPtr _parent, sdf::ElementPtr /*_sdf*/)&#xA;    {&#xA;      // Store the pointer to the model&#xA;      this-&gt;model = _parent;&#xA;&#xA;      // Store the pointers to the joints&#xA;      this-&gt;jointR1_ = this-&gt;model-&gt;GetJoint(&quot;r1&quot;);&#xA;&#xA;      // Listen to the update event. This event is broadcast every&#xA;      // simulation iteration.&#xA;      this-&gt;updateConnection = event::Events::ConnectWorldUpdateBegin(boost::bind(&amp;ModelControl::OnUpdate, this, _1));&#xA;    }&#xA;&#xA;    // Called by the world update start event&#xA;  public: void OnUpdate(const common::UpdateInfo &amp; /*_info*/)&#xA;    {&#xA;      // Apply a small linear velocity to the model.&#xA;      //this-&gt;model-&gt;SetLinearVel(math::Vector3(.03, 0, 0));&#xA;&#xA;      // Apply angular velocity to joint&#xA;      this-&gt;jointR1_-&gt;SetParam(&quot;vel&quot;, 0, 99);&#xA;      this-&gt;jointR1_-&gt;SetParam(&quot;max_force&quot;, 0, 9999999999);&#xA;&#xA;      double currAngle = this-&gt;jointR1_-&gt;GetAngle(0).Radian();&#xA;      printf(&quot;Current angle is \t %f\n&quot;, currAngle);&#xA;    }&#xA;&#xA;    // Maybe I want to keep track of time?&#xA;    common::Time last_update_time_;&#xA;&#xA;    // Pointer to the model&#xA;  private: physics::ModelPtr model;&#xA;&#xA;    // Pointer to the update event connection&#xA;  private: event::ConnectionPtr updateConnection;&#xA;&#xA;    // Pointers to joints&#xA;    physics::JointPtr jointR1_;&#xA;  };&#xA;&#xA;  // Register this plugin with the simulator&#xA;  GZ_REGISTER_MODEL_PLUGIN(ModelControl)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;edit:&lt;/strong&gt; If I change&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;this-&amp;gt;jointR1_-&amp;gt;SetParam(&quot;vel&quot;, 0, 99);&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;to&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;this-&amp;gt;jointR1_-&amp;gt;SetVelocity(0, 99);&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;then the joint moves (yes, very, very quickly).  What's wrong with SetParam vs SetVelocity?&lt;/p&gt;&#xA;" OwnerUserId="11579" LastEditorUserId="11579" LastEditDate="2016-01-15T01:07:17.617" LastActivityDate="2020-01-20T04:04:15.460" Title="Gazebo: moving joint with model plugin" Tags="&lt;simulator&gt;&lt;joint&gt;&lt;gazebo&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8894" PostTypeId="1" CreationDate="2016-01-15T04:16:52.000" Score="-1" ViewCount="49" Body="&lt;p&gt;I would like to know how the header in this MakerBot printer moves in the vertical up /down direction.  Is there a detailed explanation of it including the parts involved?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/CQHnL.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/CQHnL.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11017" LastEditorUserId="110" LastEditDate="2016-01-15T14:32:45.517" LastActivityDate="2016-01-16T12:58:36.027" Title="How a 3d printer moves the header vertically in a MakerBot printer" Tags="&lt;mechanism&gt;&lt;3d-printing&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2016-01-20T02:14:32.490" ContentLicense="CC BY-SA 3.0" />
  <row Id="8895" PostTypeId="1" AcceptedAnswerId="9745" CreationDate="2016-01-15T07:10:40.770" Score="6" ViewCount="4545" Body="&lt;p&gt;Good day,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am a student currently working on an autonomous quadcopter project, specifically the stabilization part as of now. I am using a tuned propeller system and I also already considered the balancing of the quadcopter during component placements. I had been tuning the PID's of my quadcopter for the past 3 1/2 weeks now and the best I've achieved is a constant angle oscillation of the quadcopter by +-10 degrees with 0 degrees as the setpoint/desired angle. I also tried a conservative 7 degrees setpoint with the same results on the pitch axis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As of now my PID code takes in the difference of the angle measurement from the complementary filter &lt;code&gt;( FilteredAngle=(0.98)*(FilteredAngle + GyroAngleVel*dt) + (0.02)*(AccelAngle) )&lt;/code&gt; and the desired angle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/QbCmL.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QbCmL.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have read somewhere that it is IMPOSSIBLE to stabilize the quadcopter utilizing only angle measurements, adding that the angular rate must be also taken into consideration. But I have read a lot of works using only a single pid loop with angle differences (Pitch Yaw and Roll) as the input. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In contrast to what was stated above, I have read a comment from this article (&lt;a href=&quot;https://www.quora.com/What-is-rate-and-stabilize-PID-in-quadcopter-control&quot; rel=&quot;noreferrer&quot;&gt;https://www.quora.com/What-is-rate-and-stabilize-PID-in-quadcopter-control&lt;/a&gt;) by Edouard Leurent that a Single PID control loop only angle errors and a Cascaded PID loop (Angle and Rate) that utilizes both angle errors and angular velocity errors are equivalent Mathematically.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I were to continue using only the Single PID loop (Angle) method, I would only have to tune 3 parameters (Kp, Ki &amp;amp; Kd).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But if I were to change my code to utilize the Cascaded Loop (Angle and Angular Velocity),&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Would I have to tune two sets of the 3 parameters (Kp, Ki &amp;amp; Kd for angle and Kp, Ki &amp;amp; Kd for the angular velocity)?&lt;/li&gt;&#xA;&lt;li&gt;Would the cascaded PID control loop give better performance than the single PID control loop?&lt;/li&gt;&#xA;&lt;li&gt;In the Cascaded Loop, is the set point for the angular velocity for stabilized flight also 0 in deg/sec? What if the quadcopter is not yet at its desired angle?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Thank you :)&lt;/p&gt;&#xA;" OwnerUserId="11311" LastEditorUserId="9720" LastEditDate="2016-01-15T15:49:16.660" LastActivityDate="2016-05-01T08:56:39.737" Title="Quadcopter PID Control: Is it possible to stabilize a quadcopter considering only angle measurements?" Tags="&lt;control&gt;&lt;quadcopter&gt;&lt;pid&gt;&lt;raspberry-pi&gt;&lt;stability&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8897" PostTypeId="2" ParentId="8895" CreationDate="2016-01-15T14:02:43.053" Score="1" Body="&lt;p&gt;How are you managing to get any angle from the code you posted, &lt;code&gt;filter = (0.98*gyro*dt + 0.02*accel)&lt;/code&gt;? Gyro output is in $\mbox{deg}/s$, where acceleration is $\mbox{deg}/s^2$. When you multiply gyro times time, you get an angle unit, $\mbox{deg}$, (not an angle, see below) but then you're adding that to an acceleration, which doesn't have the correct units.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, for the gyro portion, you're just getting to the correct units. Angular position is the &lt;em&gt;integral&lt;/em&gt; of angular velocity, meaning that you have to &lt;em&gt;sum&lt;/em&gt; those &lt;code&gt;gyro*dt&lt;/code&gt; segments to accumulate an angle. Otherwise all &lt;code&gt;gyro*dt&lt;/code&gt; gives you is the angle that you moved in the last time interval &lt;code&gt;dt&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can you check if your code matches what you wrote in the question and then update the question?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;:EDIT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question wasn't about how you're calculating the accel values, but instead about how you're implementing the filter. In your update, the filter calculation is still incorrect. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, instead of getting your gyro output to angular &lt;em&gt;position&lt;/em&gt; units, you've gone the other way and gotten to angular &lt;em&gt;acceleration&lt;/em&gt; units. Worse, you're also now accumulating that acceleration, which doesn't make sense. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you should have somewhere in the initialization portion of your code is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;gyro&amp;lt;AXIS&amp;gt;Position = 0;&#xA;accelerometer&amp;lt;AXIS&amp;gt;Position = 0;&#xA;accelerometer&amp;lt;AXIS&amp;gt;Velocity = 0;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then, in your loop, update the accelerometer-based angular velocity by numerical integration:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;accelerometer&amp;lt;AXIS&amp;gt;Velocity = accelerometer&amp;lt;AXIS&amp;gt;Velocity + accel&amp;lt;AXIS&amp;gt;*dt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Next, numerically integrate the gyro angular velocity and the accelerometer-based angular velocity:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;accelerometer&amp;lt;AXIS&amp;gt;Position = accelerometer&amp;lt;AXIS&amp;gt;Position + accelerometer&amp;lt;AXIS&amp;gt;Velocity*dt;&#xA;gyro&amp;lt;AXIS&amp;gt;Position = gyro&amp;lt;AXIS&amp;gt;Position + gyro&amp;lt;AXIS&amp;gt;*dt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Finally, you can fuse those two readings with your complementary filter:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;blend = 0.98;&#xA;filter = blend*gyro&amp;lt;AXIS&amp;gt;Position + (1-blend)*accelerometer&amp;lt;AXIS&amp;gt;Position;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2016-01-15T15:30:11.047" LastActivityDate="2016-01-15T15:30:11.047" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="8900" PostTypeId="1" AcceptedAnswerId="8901" CreationDate="2016-01-15T23:20:05.253" Score="6" ViewCount="4357" Body="&lt;p&gt;Consider the system &#xA;$$&#xA;\tag 1&#xA;H\delta x=-g&#xA;$$&#xA; where $H$ and $g$ are the Hessian and gradient of some cost function $f$ of the form $f(x)=e(x)^Te(x)$. The function $e(x)=z-\hat{z}(x)$ is an error function, $z$ is an observation (measurement) and  $\hat{z}$ maps the estimated parameters to a measurement prediction. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This minimization is encountered in each iteration of many SLAM algorithms, e.g.one could think of $H$ as a bundle adjustment Hessian. Suppose $x=(x_1,x_2)^T$, and let $x_2$ be some variables that we seek to marginalize. Many authors claim that this marginalization is equivalent to solving a smaller liner system $M\delta x_1=-b$ where $M$ and $g$ are computed by applying Schur's complement to (1), i.e. if&#xA;$$H=&#xA;\begin{pmatrix}&#xA;H_{11} &amp;amp; H_{12}\\&#xA;H_{21} &amp;amp; H_{22}&#xA;\end{pmatrix}&#xA;$$&#xA;then&#xA;$$&#xA;M=H_{11}-H_{12}H_{22}^{-1}H_{21}&#xA;$$ &#xA;and &#xA;$$&#xA;b=g_1-H_{12}H_{22}^{-1}g_2&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I fail to understand why that is equivalent to marginalization... I understand the concept of marginalization for a Gaussian, and I know that schur's complement appears in the marginalization if we use the canonical representation (using an information matrix), but I don't see the link with the linear system. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt; I understand how Schur's complement appears in the process of marginalizing or conditioning $p(a,b)$ with $a,b$ Gaussian variables, as in the link supplied by Josh Vander Hook. I had come to the same conclusions, but using the canonical notation: If we express the Gaussian $p(a,b)$ in canonical form, then $p(a)$ is gaussian and its information matrix is the Schur complement of the information matrix of $p(a,b)$, etc. Now the problem is that I don't understand how Schur's complement appears in marginalization in bundle adjustment (for reference, in these recent papers: &lt;a href=&quot;https://www.google.fr/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;cad=rja&amp;amp;uact=8&amp;amp;ved=0ahUKEwiDgNiC9K3KAhVL1RoKHcXvAWkQFgggMAA&amp;amp;url=http%3A%2F%2Fwww-users.cs.umn.edu%2F~stergios%2Fpapers%2FRSS_2013_Workshop_CKLAM_Esha_Kejian.pdf&amp;amp;usg=AFQjCNEsKknpqqMNJcYSWawCinb5R3qzAg&amp;amp;sig2=gikqqcwFFZWWA_g_p60J3w&quot; rel=&quot;noreferrer&quot;&gt;c-klam&lt;/a&gt; (page 3 if you want to look) and in &lt;a href=&quot;https://www.google.fr/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;ved=0ahUKEwjStJyd9K3KAhWBCxoKHfLWAK4QFgglMAA&amp;amp;url=http%3A%2F%2Fwww.roboticsproceedings.org%2Frss09%2Fp37.pdf&amp;amp;usg=AFQjCNHpE92Meqxmuja-N5gs0Oh3HbqB_g&amp;amp;sig2=wh5gcv6W3tGrJ9TN1lGJOA&quot; rel=&quot;noreferrer&quot;&gt;this&lt;/a&gt; (part titled marginalization). In these papers, a single bundle adjustment (&lt;strong&gt;BA&lt;/strong&gt;) iteration is performed in a manner similar to what I initially described in the question. I feel like there is a simple connection between marginalizing a Gaussian and the marginalization in BA that I am missing. For example, one could say that optimizing $f$ (one iteration) is equivalent to drawing a random variable following a denstiy $$e^{-\frac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu)}$$  where $\Sigma$ is the inverse of the Hessian $H$ of $f$, and $\mu$ is the true value for $x$ (or an approximation of that value), and that marginalizing this density is equivalent to using Schur's compelement in the bundle? I am really confused...  &lt;/p&gt;&#xA;" OwnerUserId="2541" LastEditorUserId="2541" LastEditDate="2016-01-16T09:12:01.757" LastActivityDate="2021-01-29T12:56:52.857" Title="SLAM : Why is marginalization the same as schur's complement?" Tags="&lt;slam&gt;&lt;computer-vision&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="8901" PostTypeId="2" ParentId="8900" CreationDate="2016-01-16T00:50:31.173" Score="4" Body="&lt;p&gt;&lt;a href=&quot;https://gbhqed.wordpress.com/2010/02/21/conditional-and-marginal-distributions-of-a-multivariate-gaussian/&quot; rel=&quot;nofollow&quot;&gt;See the walk-through&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Schur complement helps with the closed form derivation but isn't necessary. It's just a nice convenient property of Gaussians and the covariance matrices. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In these papers, a single bundle adjustment (BA) iteration is performed in a manner similar to what I initially described in the question.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The reason the marginal / schur complement appears over and over is that all of the objective functions, noise models, and (in some sense) optimization methods are &lt;em&gt;the same&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All the problems attempt to find a vector $x$ which maximizes the likelihood of the observations $z=h(x)+\eta $ where $\eta$ is some Gaussian noise. $h(x)$ is often not linear, but we linearize it so that $h(x)\approx h(x)+H_x(a-x) $ where (sorry for abusing notation), $H$ is the Jacobian.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I feel like there is a simple connection between marginalizing a Gaussian and the marginalization in BA that I am missing. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Everyone and their mother assumes that the noise in the observation $z$ is Gaussian. If you construct the Gaussian noise terms, you'll find something like $e^{ (z-h(\hat{x}))^T\Sigma^{-1}(z-h(\hat{x}) )}$ (modulo the denominator). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, this isn't the only formulation. We can also minimize the error (difference in observations and state estimate). A careful look reveals that &lt;strong&gt;maximizing the likelihood of the observations is equivalent to finding a vector $x$ which minimizes the error $\eta=z-h(x)$&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus, minimizing the mean squared error $(\eta^T\eta)$ is the same as finding $x$ which maximizes the likelihood of the observations $z$. Thus, minimizing mean squared error and maximizing Gaussian observation likelihood results in the same objective function.*&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If we substitute our linear approximation, we need to minimize &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$J=(z-h(x)+H_x(a-x))^T(z-h(x)+H_x(a-x))$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you multiply that out, and minimize by taking the derivative, you get the solutions you showed above. &lt;strong&gt;This is the same across any ML estimation of a state vector given Gaussian noise&lt;/strong&gt;.  The difference in various estimation methods is summarized as follows, as best as I know.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The EKF does only one optimization step, and uses only the last measurement and the current state approximation&lt;/li&gt;&#xA;&lt;li&gt;Other methods, like IteratedEKF use many iterations of the solution, but only use the most recent measurement&lt;/li&gt;&#xA;&lt;li&gt;If you can afford to use more than one measurement, you've arrived at a larger state (one copy of the state vector for each time step, and a stacked vector of observations). Doing this optimization over this larger state is what BA does, but is also known as Iterative Weighted Least Squares. More generally, these are &lt;em&gt;batch estimators&lt;/em&gt;.&lt;/li&gt;&#xA;&lt;li&gt;What's nice &lt;em&gt;in the computer vision world&lt;/em&gt;, is that a huge state vector and observation vector have independent components (because a camera cannot see all parts of the world at all time). This structure is exploited to find what is classically known as Bundle Adjustment.&lt;/li&gt;&#xA;&lt;li&gt;If you wish to discard the Gaussian noise assumption and evaluate a larger space of possible soutions, you can use sampling based methods. However, almost all sampling based methods I'm aware of sample $x$ (the state), and run one of the above estimators for &lt;em&gt;each&lt;/em&gt; $x$ using the observations, then find the posterior probability that the sample you drew was correct.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;For example, one could say that optimizing ff (one iteration) is equivalent to drawing a random variable following a density ...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Here you're a bit off. That's not correct that we're drawing &lt;em&gt;samples&lt;/em&gt;, but it is correct that by trying to minimize error, we're actually maximizing likelihood of the Gaussian. This is how the error minimization objective of BA, the Gaussian noise model (and resulting appearance of a marginalization i.e., schur complement), and general slam frameworks are all related. They're the same, just found by different methods across different disciplines. Isn't research great?&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;*Kinda. In this derivation it does, but we do assume that the observation noise is Gaussian to arrive there. It's a difference in starting point, not path.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="163" LastEditorUserId="163" LastEditDate="2016-01-16T18:14:09.883" LastActivityDate="2016-01-16T18:14:09.883" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="8902" PostTypeId="1" CreationDate="2016-01-16T04:04:37.643" Score="1" ViewCount="1126" Body="&lt;p&gt;How do I read real time values from the GY-85 IMU sensor at Simulink connected via Arduino? Also, I intend to interact with the Virtual Reality environment at Simulink using this GY-85 IMU sensor.&#xA;Is this possible?&#xA;How do I make MATLAB read real time values from this GY-85 IMU sensor connected to Arduino via I2C communication ?&#xA;Please help!&lt;/p&gt;&#xA;" OwnerUserId="11591" LastActivityDate="2016-01-16T07:52:37.007" Title="Real-time GY-85 IMU sensor interfacing with Simulink" Tags="&lt;imu&gt;&lt;matlab&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8903" PostTypeId="2" ParentId="8354" CreationDate="2016-01-16T04:12:27.803" Score="2" Body="&lt;p&gt;I have seen three implementations of PID controllers for quadcopters.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/0hX96.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0hX96.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Single PID control loop using only angle errors. (What I am currently using). I have heard people using this method with success. Example is this thread: ht tps://www . quora.com/What-is-rate-and-stabilize-PID-in-quadcopter-control.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Very intuitive since you are only assigning angle setpoints.&lt;/li&gt;&#xA;&lt;li&gt;I have seen in my best tunings that there are still oscillations present which is about +-10degrees from the setpoint angle of zero. Though that is probably due to my lack of experience.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Cascaded PID control loop using angular velocity for the Rate PID block and angle errors for the Stab (Stabilization) PID block. This is the most common implementation I've seen upon reading but I have difficulties in trying to find a suitable setup for tuning the Rate PID block since you are setting angular velocities instead of angle. (Will the same string on one axis setup suffice?)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt; It is possible to &quot;tune&quot; the rate loop in the cascaded controller by setting first the angular velocity setpoint to zero and setting the inner loop PID gains until the quadcopter resists any change in motion (The quadcopter should when physically placed at any angle should resist motion or maintain that angle). After that a P-gain in the outer PID loop that would be responsible in translating the required angular velocity command to the inner PID loop to attain the user set angle setpoint/target from the outer PID loop&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I have read in &lt;a href=&quot;https://controls.engin.umich.edu/wiki/index.php/CascadeControl&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://controls.engin.umich.edu/wiki/index.php/CascadeControl&lt;/a&gt; that cascaded control loops are used for their more responsive nature.&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The inner rate PID loop is for control in high frequencies while the outer loop is for lower frequencies&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;3&quot;&gt;&#xA;&lt;li&gt;Additive PID control loop (What I'll be trying next)&lt;/li&gt;&#xA;&lt;/ol&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I have seen this implementation in the work for my senior who was creating a stabilization control for her quadcopter.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;She said that the Rate PID block is used to control sudden jerks while the quadcopter was hovering. She used only P and D.&lt;/li&gt;&#xA;&lt;li&gt;However the quadcopter becomes unstable after 15 seconds of hovering due to tipping to one side possibly due to the lack of yaw control.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Regarding your question about PID controllers, you do need to take the loop time of your code into consideration. Here's a great read: &lt;a href=&quot;http://brettbeauregard.com/blog/2011/04/improving-the-beginners-pid-introduction/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://brettbeauregard.com/blog/2011/04/improving-the-beginners-pid-introduction/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11311" LastEditorUserId="9941" LastEditDate="2016-08-08T23:55:36.107" LastActivityDate="2016-08-08T23:55:36.107" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8904" PostTypeId="2" ParentId="8902" CreationDate="2016-01-16T07:52:37.007" Score="1" Body="&lt;p&gt;Interfacing with Simulink has sometimes been a pain, I've developed a method to simplify it by putting a middle-man app between the arduino and Simulink:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Read the IMU data from the Arduino and print it in comma delimited&#xA;ASCII&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://github.com/sqrtmo/GY-85-arduino&quot; rel=&quot;nofollow&quot;&gt;This Arduino library&lt;/a&gt; can help you with reading the IMU from the Arduino.&lt;/li&gt;&#xA;&lt;li&gt;Your Arduino application would simply read from the IMU, and send the data over serial or TCP/IP.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Read the ASCII string, convert it to a known binary structure and publish it on a TCP/IP port.&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;An excellent utility to do this is 'csv-to-bin' and 'io-publish' from the &lt;a href=&quot;https://github.com/acfr/comma&quot; rel=&quot;nofollow&quot;&gt;comma library&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;An example command-line would be &quot;cat /dev/ttyACM0 | csv-to-bin 9f | io-publish tcp:9000&quot;, which would read from the serial device /dev/ttyACM0 (assuming you're on linux) then convert the comma-delimited string to a binary struct consisting of 9 floats, then publish it on TCP port 9000.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;In Simulink, use the TCP read block with the binary structure you selected.&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;In your Simulink model you can use blocks from the Instruments Control Toolbox to read the data. You must set the data types and sizes in the structure being read.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The advantage of using ASCII in step 1 is that you don't have to worry about the binary representation of the data when reading from the IMU or Arduino, and you can then explicitly convert that data into your selected binary structure for reading with Simulink.&lt;/p&gt;&#xA;" OwnerUserId="8859" LastActivityDate="2016-01-16T07:52:37.007" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8905" PostTypeId="2" ParentId="8894" CreationDate="2016-01-16T12:41:31.280" Score="1" Body="&lt;p&gt;The printing head does not move in z. The table an the printed model are moving. &lt;/p&gt;&#xA;" OwnerUserId="23196" LastEditorUserId="23196" LastEditDate="2016-01-16T12:58:36.027" LastActivityDate="2016-01-16T12:58:36.027" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8906" PostTypeId="1" CreationDate="2016-01-16T16:36:23.490" Score="1" ViewCount="909" Body="&lt;p&gt;We're working on a quadcopter that will carry a solar panel on top that will continually charging the lipo battery of the quad. What's the smallest and easiest way to recreate a charger that will allow safe charging for the lipo battery?&lt;/p&gt;&#xA;" OwnerUserId="11565" LastActivityDate="2016-01-17T13:38:44.337" Title="How do I create a portable solar panel lipo charger?" Tags="&lt;quadcopter&gt;&lt;battery&gt;" AnswerCount="3" CommentCount="4" ClosedDate="2016-02-24T19:23:24.220" ContentLicense="CC BY-SA 3.0" />
  <row Id="8907" PostTypeId="1" AcceptedAnswerId="8925" CreationDate="2016-01-16T18:17:17.803" Score="0" ViewCount="97" Body="&lt;p&gt;I am trying to find the inverse kinematics formulation of DLR/HIT II hand. Till now I had success in finding an analytical method described in the thesis of Mavrogiannis, Christoforos I. named &lt;a href=&quot;http://dspace.lib.ntua.gr/handle/123456789/7858&quot; rel=&quot;nofollow&quot;&gt;Grasp Synthesis Algorithms for Multifingered Robot Hands&lt;/a&gt;, given in appendix B. &#xA;My question is regarding the A.28 where the author calculates q3 but has mentioned previously in the text that q3 is equal to q2. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: q here denotes joint angles&lt;/p&gt;&#xA;" OwnerUserId="11596" LastActivityDate="2016-05-05T15:43:50.833" Title="Inverse Kinematics of DLR/HIT II Hand" Tags="&lt;inverse-kinematics&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="8908" PostTypeId="2" ParentId="8906" CreationDate="2016-01-16T18:32:31.023" Score="0" Body="&lt;p&gt;I don't know of any application where the LiPo is charged and discharged at the same time. It might not be a good idea, due to the delicate charging cycle procedure that LiPos require.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Have you run a power consumption analysis with the given solar panel figures, to see if it is worth the effort? I suspect that the net power profit will be negative, due to the increased system weight and complexity.&lt;/p&gt;&#xA;" OwnerUserId="11500" LastActivityDate="2016-01-16T18:32:31.023" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8909" PostTypeId="1" AcceptedAnswerId="8929" CreationDate="2016-01-16T20:05:28.683" Score="1" ViewCount="2104" Body="&lt;p&gt;I am working on building a line follower robot using ATmega2560 and I want its &lt;strong&gt;movement to be more precise&lt;/strong&gt;. I am facing a very typical problem.&#xA;It consists of three(3) IR sensors. The &lt;strong&gt;thickness of the line&lt;/strong&gt; to be followed is &lt;strong&gt;1.2cm&lt;/strong&gt; and the &lt;strong&gt;gap between the sensors&lt;/strong&gt; is more than that, around &lt;strong&gt;1.8cm&lt;/strong&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if the &lt;strong&gt;black line comes between the center and any of the side sensors&lt;/strong&gt;, &lt;strong&gt;all the three sensors&lt;/strong&gt; are on &lt;strong&gt;white&lt;/strong&gt; and it stops.&#xA;And I need the robot to stop over white, due to my application. &#xA;So please can anyone suggest me a good algorithm to tackle this situation.&#xA;I think PID control can be of good use, as i searched on Google. But I don't understand how to implement it with three sensors.&#xA;Please Help&lt;/p&gt;&#xA;" OwnerUserId="11599" LastActivityDate="2016-01-18T15:57:11.677" Title="Typical Problem in Simple Line Follower Using 3 sensors" Tags="&lt;microcontroller&gt;&lt;line-following&gt;&lt;avr&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8910" PostTypeId="1" CreationDate="2016-01-16T20:59:24.840" Score="4" ViewCount="470" Body="&lt;p&gt;I've been trying to understand image rectification. Most of the time the result of image rectification is illustrated by the original image (i.e the image before rectification) and the rectified image, like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The original image:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/t7R79.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/t7R79.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The rectified image:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Qd0gC.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Qd0gC.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To me the original image makes more sense, and is more 'rectified' than the second one. I mean, why does the result of rectification looks like that? and how are we supposed to interpret it? what information does it contain? &#xA;An idea has just dawned on me : could it be that this bizarre shape of the rectified image is dependent on the method used for rectification, because  here polar rectification was used (around the epipole)?&lt;/p&gt;&#xA;" OwnerUserId="6976" LastEditorUserId="6976" LastEditDate="2016-01-19T00:39:00.223" LastActivityDate="2016-01-19T00:39:00.223" Title="How to interpret the result of image rectification?" Tags="&lt;mobile-robot&gt;&lt;stereo-vision&gt;&lt;3d-reconstruction&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="8911" PostTypeId="1" AcceptedAnswerId="8920" CreationDate="2016-01-16T21:33:28.190" Score="2" ViewCount="3511" Body="&lt;p&gt;I'm working on a little project where I have to do some simulations on a small robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I my case I'm using a differential-drive robot as one of the wheels of a bigger robot platform (which has two differential-drive casters), and I really do not understand how to find its kinematics in order to describe it in a model for finding the speed &lt;strong&gt;V_tot&lt;/strong&gt; of the platform.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/uBhDr.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/uBhDr.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is my robot and I know the following parameters&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;d&lt;/strong&gt; is the distance between a joint where my robot is costrained&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;blue point&lt;/strong&gt; is the joint where the robot is linked to the robot platform&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;L&lt;/strong&gt; is distance between the wheels&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;r&lt;/strong&gt; the radius of the wheel&lt;/li&gt;&#xA;&lt;li&gt;the robot can spin around the &lt;strong&gt;blue point&lt;/strong&gt; and with and &lt;strong&gt;THETA&lt;/strong&gt; angle&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;As I know all this dimensions, I would like to apply two velocities &lt;strong&gt;V_left&lt;/strong&gt; and &lt;strong&gt;V_right&lt;/strong&gt; in order to move the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's assume that &lt;strong&gt;V_left&lt;/strong&gt; = &lt;strong&gt;- V_right&lt;/strong&gt; how do I find analitically the ICR (Istantaneous Center of Rotation) in this costrained robot?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I mean that I cannot understand how to introduce &lt;strong&gt;d&lt;/strong&gt; in the formula.&lt;/p&gt;&#xA;" OwnerUserId="11600" LastActivityDate="2016-01-17T15:48:50.430" Title="How to find kinematics of differential drive caster robot?" Tags="&lt;mobile-robot&gt;&lt;kinematics&gt;&lt;wheeled-robot&gt;&lt;differential-drive&gt;&lt;two-wheeled&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8912" PostTypeId="2" ParentId="8906" CreationDate="2016-01-16T21:53:33.987" Score="2" Body="&lt;p&gt;&lt;em&gt;Make sure you understand Lithium Ion battery safety before proceeding.&lt;/em&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lithium Ion batteries have limits on charging current and charging voltage. The typical charging technique is to provide the maxiumum charging current until max charging voltage is reached, then provide the max charging voltage until current drops to zero. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you can find a solar cell array with &lt;a href=&quot;https://en.wikipedia.org/wiki/Theory_of_solar_cells#Open-circuit_voltage_and_short-circuit_current&quot; rel=&quot;nofollow&quot;&gt;Isc&lt;/a&gt; less than the battery max charging current and Voc at the max charging current you might be able to hook the solar array directly to the battery.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Otherwise, a DC-DC converter between the array and the battery which will convert the array voltage to max charging voltage, with a max current that matches the max charging current of the battery. You'll loose 15% of your energy though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you don't have an electrical engineer (or student of EE) on your team, go find one.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2016-01-16T21:53:33.987" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="8913" PostTypeId="2" ParentId="8910" CreationDate="2016-01-17T00:49:10.467" Score="2" Body="&lt;p&gt;In Stereo Vision, image rectification is used to &quot;warp&quot; (remap the pixels using the translation, rotation, fundamental matrices computed from camera calibration) the image to remove distortions introduced in camera lenses and horizontally align pixels in the left and the right images to satisfy the epipolar constraint so that when stereo matching is performed, only a horizontal search in one row of the image is needed when finding the respective matches speeding up the process.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your result is probably due to the camera calibration errors (Errors in obtaining the required mapping matrices (Intrinsic and Extrinsic Camera Parameters) ). Try to get the reprojection error as low as possible. In my case it took me a whole day or two to get the rectification right.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Try reading this: &lt;a href=&quot;http://docs.opencv.org/2.4/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html&quot; rel=&quot;nofollow&quot;&gt;http://docs.opencv.org/2.4/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11311" LastEditorUserId="11311" LastEditDate="2016-01-17T00:58:37.460" LastActivityDate="2016-01-17T00:58:37.460" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8914" PostTypeId="2" ParentId="8911" CreationDate="2016-01-17T01:45:30.253" Score="1" Body="&lt;p&gt;Well, if it is truly a caster wheel with two differential drives, then I'd just assume that the castor is not a constraint at all! &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/JkgeV.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JkgeV.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's a freely rotating wheel that should just follow the direction of motion induced by rotating the differential wheels. In that case, you can use &lt;a href=&quot;https://robotics.stackexchange.com/a/1679/163&quot;&gt;this answer&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="163" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2016-01-17T01:45:30.253" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8915" PostTypeId="2" ParentId="8911" CreationDate="2016-01-17T03:45:04.093" Score="0" Body="&lt;p&gt;If you assume pure kinematics (no slipping) your ICR must be where the two wheel axis cross, or for the degenerate case where they are colinear, then somewhere along the line.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you use a dynamic approach, you'll need to estimate mass distribution and ground friction but you'll get a model that's easier to work with.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'll get better answers if you draw the full diagram with both sub-units and the connecting link, if there is one.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2016-01-17T03:45:04.093" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8916" PostTypeId="1" AcceptedAnswerId="8991" CreationDate="2016-01-17T11:26:46.747" Score="0" ViewCount="406" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Is it possible to speed up execution time of a c++ program in raspberry pi solely by increasing the i2c baudrate and increasing the sampling frequency of the sensors? &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I have the issue of sudden jerkiness of my quadcopter and found the culprit which is the frequency at which my loop excecutes which is only about 14Hz. The minimum requirement for a quadcopter is 100-200hz. It is similar to the issue he faces here &lt;a href=&quot;https://robotics.stackexchange.com/questions/6720/raspberry-pi-quadcopter-thrashes-at-high-speeds&quot;&gt;Raspberry Pi quadcopter thrashes at high speeds&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;He said that he was able to increase his sampling rate from 66hz to 200hz by increasing the i2c baudrate. I am confused on how that is done.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the wiring pi library, it says that we can set the baudrate using this command:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;gpio load i2c 1000&#xA;&#xA;will set the baud rate to 1000Kbps – ie. 1,000,000 bps. (K here is times 1000)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;What I am curious about is how to set this baudrate to achieve my desired sampling rate?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I plan on optimizing it further to achieve at least a 100Hz sampling rate&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As of now, the execution time of each loop in my quadcopter program is at 0.07ms or 14Hz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It takes 0.01ms to 0.02ms to obtain data from the complementary filter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have already adjusted the registers of my sensors to output readings at 190Hz (Gyroscope L3GD20H) and 200Hz (Accelerometer LSM303) and 220Hz (Magnetometer LSM303).&lt;/p&gt;&#xA;" OwnerUserId="11311" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2016-01-26T04:44:27.300" Title="Quadcopter program execution time optimization using Raspberry Pi by increasing i2c baudrate" Tags="&lt;quadcopter&gt;&lt;pid&gt;&lt;raspberry-pi&gt;&lt;sensor-fusion&gt;&lt;c++&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8917" PostTypeId="1" CreationDate="2016-01-17T13:15:36.253" Score="1" ViewCount="82" Body="&lt;p&gt;My aim is to actuate a pneumatic muscle based on signals received by EMG sensors placed on the biceps. Is there any Matlab code which can process the received EMG signals and convert them into any form which can be useful for muscle actuation?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The linked video gives better insight to my question: &lt;a href=&quot;https://www.youtube.com/watch?v=BdoblvmTixA&amp;amp;ab_channel=JamesiosoHo&quot; rel=&quot;nofollow&quot;&gt;exoskeleton arm pneumatic muscle&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11603" LastEditorUserId="158" LastEditDate="2016-01-18T03:17:26.890" LastActivityDate="2016-01-18T03:17:26.890" Title="how to actuate pneumatic muscle by the signals received by emg sensors interfaced with raspberry pi?" Tags="&lt;raspberry-pi&gt;&lt;matlab&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8919" PostTypeId="2" ParentId="8906" CreationDate="2016-01-17T13:38:44.337" Score="1" Body="&lt;p&gt;The easiest way to accomplish lithium charging is to use a brownout tolerant DC-DC converter. By brownout tolerant I mean the converter should automatically derate output voltage to maintain the max current limit with no need to reset or recover once the condition clears. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The output current limit of the converter should be less than or equal to the current limit for the constant current phase of the charge curve. The output voltage should be less than or equal to the constant voltage phase of the charge curve. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this scheme, when the battery is low on charge, it will also be low on voltage. A larger voltage differential will draw more current, up to the current limit on the converter, which should be approximately equal to the constant current charge limit. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The battery charges and, as it does,  the terminal voltage rises. At some time the voltage differential decreases to the point that the brownout condition ends and the DC-DC converter resumes rated voltage output, which should now be at the constant charge voltage. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;A couple of notes, though:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;As @hauptmech points out in their terrific content, assume the copter runs 10min at 100W for flight. This means the battery stores about 16 Watt-hours, or 1000 Watt-minutes of energy. Assuming the solar cell outputs 1W, this means it will take about 1000 minutes, or about 16 hours, to recharge the battery. When you try to connect the solar cell output to the system to charge, there is a very high likelihood that you will brown out the solar cell because of the power draw. This means the DC-DC converter needs to have a wide input voltage range, conceivably down to near 0V input, AND that the solar cell needs to be short-circuit tolerant, as that's likely to be the normal operating condition. You could get a DC-DC converter with a current limit closer to the equivalent power output of the solar cell, which may help. &lt;/li&gt;&#xA;&lt;li&gt;Charging lithium batteries is dangerous. They are banned on most flights, banned on most air mail services, for good reason. See also: hover boards. &lt;/li&gt;&#xA;&lt;li&gt;You need to be sure to stay under the max ratings. Exceeding the current limit causes heat issues (not that I think you'd exceed a lithium battery's current limit with a solar cell), &lt;em&gt;but&lt;/em&gt; exceeding the voltage limit causes dielectric breakdown in the battery, which also causes fires. That &lt;strong&gt;is&lt;/strong&gt; very possible with a solar cell. &lt;/li&gt;&#xA;&lt;li&gt;Again, as hauptmech mentioned, you need an EE. This isn't really something to guess at, and if you're here looking for advice you should honestly consider if you know what you're doing and seek guidance at least from a senior EE student. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-01-17T13:38:44.337" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="8920" PostTypeId="2" ParentId="8911" CreationDate="2016-01-17T15:48:50.430" Score="3" Body="&lt;p&gt;&lt;strong&gt;Kinematics of mobile robots&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/SjQrN.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/SjQrN.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the figure on the left:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;I = Inertial frame;&lt;/li&gt;&#xA;&lt;li&gt;R = Robot frame;&lt;/li&gt;&#xA;&lt;li&gt;S = Steering frame;&lt;/li&gt;&#xA;&lt;li&gt;W = Wheel frame;&lt;/li&gt;&#xA;&lt;li&gt;$\beta$ = Steering angle;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;For the figure on the right:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;L = Distance between the wheels;&lt;/li&gt;&#xA;&lt;li&gt;r = radious of the wheel;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Now we can derive some useful equations.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Kinematics:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;$\hspace{2.5em}$ $\vec{v}_{IW} = \vec{v}_{IR} + \vec{\omega}_{IR} \times \vec{r}_{RS}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If we express the equation above in the wheel frame:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\hspace{2.5em}$ $\begin{bmatrix} 0 \\ r\dot{\varphi} \\ 0 \end{bmatrix} = R(\alpha+\beta)R(\theta)\begin{bmatrix} \dot{x} \\ \dot{y} \\ \dot{\theta} \end{bmatrix} + \begin{bmatrix} 0 &amp;amp; -\dot{\theta} &amp;amp; 0 \\ \dot{\theta} &amp;amp; 0 &amp;amp; 0 &amp;amp; \\ 0 &amp;amp; 0 &amp;amp; 0 \end{bmatrix}\begin{bmatrix} lcos(\beta) \\ -lsin(\beta) \\ 0 \end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We obtain the rolling-constraint and the no-sliding constraint respectively:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\hspace{2.5em}$ $[-sin(\alpha+\beta)\hspace{1.0em}cos(\alpha+beta)\hspace{1.0em}lcos(\beta)]\dot{\xi}_{R} = \dot{\varphi}r$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\hspace{2.5em}$ $[cos(\alpha+\beta)\hspace{1.0em}sin(\alpha+beta)\hspace{1.0em}lsin(\beta)]\dot{\xi}_{R} = 0$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $\dot{\xi}_{R} = [\dot{x_{R}}\hspace{1.0em}\dot{y_{R}}\hspace{1.0em}\dot{\theta}]^{T}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now we need to apply each of this constraints in the differential wheels&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;For the left wheel: $\alpha = -\frac{\pi}{2}$, $\beta = 0$, $l = -\frac{L}{2}$&lt;/li&gt;&#xA;&lt;li&gt;For the right wheel: $\alpha = -\frac{\pi}{2}$, $\beta = 0$, $l = \frac{L}{2}$&lt;/li&gt;&#xA;&lt;li&gt;Stacked equation of motion:&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;$\hspace{2.5em}$ $\begin{bmatrix} 1 &amp;amp; 0 &amp;amp; \frac{L}{2} \\ 1 &amp;amp; 0 &amp;amp; -\frac{L}{2} &amp;amp; \\ 0 &amp;amp; -1 &amp;amp; 0 \\ 0 &amp;amp; -1 &amp;amp; 0 \end{bmatrix}\dot{\xi}_{R} = \begin{bmatrix} r &amp;amp; 0\\ 0 &amp;amp; r \\ 0 &amp;amp; 0 \\ 0 &amp;amp; 0 \end{bmatrix}\begin{bmatrix} \dot{\varphi}_{r} \\ \dot{\varphi}_{l} \end{bmatrix} $&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\hspace{2.5em}$ $A\dot{\xi}_{R} = B\dot{\varphi} $&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the forward kinematic solution, just do:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\hspace{2.5em}$ $\dot{\xi}_{R} = \big( A^{T}A \big)^{-1}A^{T}B\dot{\varphi} $&lt;/p&gt;&#xA;&#xA;&lt;p&gt;which yields:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\hspace{2.5em}$ $\begin{bmatrix} \dot{x} \\ \dot{y} \\ \dot{\theta} \end{bmatrix} = \begin{bmatrix} \frac{r}{2} &amp;amp; -\frac{r}{2} \\ 0 &amp;amp; 0 \\ \frac{r}{L} &amp;amp; -\frac{r}{L} \end{bmatrix} \begin{bmatrix} \dot{\varphi}_{r} \\ \dot{\varphi}_{l} \end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An excellent chapter that I suggest &lt;a href=&quot;http://www.cs.cmu.edu/~rasc/Download/AMRobots3.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="11582" LastActivityDate="2016-01-17T15:48:50.430" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="8921" PostTypeId="2" ParentId="8891" CreationDate="2016-01-17T16:34:28.883" Score="1" Body="&lt;p&gt;&lt;strong&gt;Quadrotor Control Problem&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It depends! You have a good mathematical model? After you achieve one, you might need to choose a good system identification method. Comparing their outputs you should have enough data to start thinking on the controller design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beyond this, I can't say precisely what you want or need...&lt;/p&gt;&#xA;" OwnerUserId="11582" LastActivityDate="2016-01-17T16:34:28.883" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8922" PostTypeId="2" ParentId="6694" CreationDate="2016-01-17T19:12:09.870" Score="2" Body="&lt;p&gt;&lt;strong&gt;Worked example&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/P8wcJ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/P8wcJ.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\hspace{2.5em}$ $\vec{q}$ = $[q_{1}\hspace{1em}q_{2}]^{T}$ $\hspace{1.5em}$ [Generalized coordinate]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\hspace{2.5em}$ $\vec{J}$ =  $\frac{\partial \vec{r}_{OA}(\vec{q})}{\partial\vec{q}}$ = $\begin{bmatrix} \frac{\partial \vec{r}_{1}}{\partial\vec{q}_{1}} &amp;amp; ... &amp;amp; \frac{\partial \vec{r}_{1}}{\partial\vec{q}_{n}} \\ ... &amp;amp;  &amp;amp; ... &amp;amp; \\ \frac{\partial \vec{r}_{m}}{\partial\vec{q}_{1}} &amp;amp; ... &amp;amp; \frac{\partial \vec{r}_{m}}{\partial\vec{q}_{n}} \end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The kinematic equation:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\hspace{5.em}$ $_{o}\vec{r}_{OA}$ = $_{o}\vec{r}_{O1}$ + $_{o}\vec{r}_{12}$ + $_{o}\vec{r}_{2A}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We have two rotations over joint 1 and 2. Substituting in the equation above:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\hspace{5.em}$ $_{o}\vec{r}_{OA}$ = $_{0}\vec{r}_{O1}$ + $R{(q_{1})_{01}}$ $ _{1}\vec{r}_{12}$ + $R{(q_{1}+q_{2})_{12}}$ $ _{2}\vec{r}_{2A}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where $R(\bullet)$ is the &lt;a href=&quot;https://en.wikipedia.org/wiki/Rotation_matrix&quot; rel=&quot;nofollow noreferrer&quot;&gt;rotation matrix&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\hspace{5.em}$ $_{0}\vec{r}_{O1}$ = $\begin{bmatrix} l_{0} \\ 0 \\ 0 \end{bmatrix}$  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\hspace{5.em}$ $R{(q_{1})_{01}}$ $ _{1}\vec{r}_{12}$ = $\begin{bmatrix} cos(q_{1}) &amp;amp; -sin(q_{1}) &amp;amp; 0 \\ sin(q_{1}) &amp;amp; cos(q_{1}) &amp;amp;  0 \\ 0 &amp;amp; 0 &amp;amp; 1\end{bmatrix}$  $\begin{bmatrix} l_{1} \\ 0 \\ 0 \end{bmatrix}$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\hspace{5.em}$ $R{(q_{1}+q_{2})_{12}}$ $ _{2}\vec{r}_{2A}$ = $\begin{bmatrix} cos(q_{1}+q_{2}) &amp;amp; -sin(q_{1}+q_{2}) &amp;amp; 0 \\ sin(q_{1}+q_{2}) &amp;amp; cos(q_{1}+q_{1}) &amp;amp;  0 \\ 0 &amp;amp; 0 &amp;amp; 1\end{bmatrix}$  $\begin{bmatrix} l_{2} \\ 0 \\ 0 \end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\hspace{5.em}$ $ _{0}\vec{r}_{OA}$ = $\begin{bmatrix} l_{0} + l_{1}cos(q_{1}) + l_{2}cos(q_{1}+q_{2}) \\ 0 + l_{1}sin(q_{1}) + l_{2}sin(q_{1}+q_{2}) \\ 0 \end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Jacobian:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\hspace{2.5em}$ $\vec{J}$ =  $\frac{\partial \vec{r}_{OA}(\vec{q})}{\partial\vec{q}}$ = $\begin{bmatrix} -l_{1}sin(q_{1}) -l_{2}sin(q_{1}+q_{2}) &amp;amp; -l_{2}sin(q_{1}+q_{2}) \\ l_{1}cos(q_{1})+l_{2}cos(q_{1}+q_{2}) &amp;amp; l_{2}cos(q_{1}+q_{2}) \\ 0 &amp;amp; 0\end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\hspace{5.em}$ $ _{0}\dot{\vec{r}}_{OA}$ = $\vec{J}\dot{\vec{q}}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the goal, you have to use $\vec{q} = [0\hspace{0.5em}0]^{T}$. Usually the Jacobian is not invertible, so you need to use the pseudo-inverse.&lt;/p&gt;&#xA;" OwnerUserId="11582" LastActivityDate="2016-01-17T19:12:09.870" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8923" PostTypeId="2" ParentId="8621" CreationDate="2016-01-17T20:55:11.990" Score="0" Body="&lt;p&gt;Try the approach  used in &lt;a href=&quot;https://robotics.stackexchange.com/a/8922/11582&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The rotation matrix, using generalized coordinates, it's straightforward! Do the math and check it by trigonometry identities.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Good luck!&lt;/p&gt;&#xA;" OwnerUserId="11582" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2016-01-17T20:55:11.990" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8924" PostTypeId="2" ParentId="4793" CreationDate="2016-01-17T21:52:54.430" Score="4" Body="&lt;p&gt;&lt;strong&gt;Controllers type&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A more mathematical approach to the error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/e06td.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/e06td.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Suppose you have a close loop system like above. The equation is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\hspace{2.5em}$ $Y(s) = \frac{G(s)C(s)}{1+G(s)C(s)} R(s)$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The error equation is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\hspace{2.5em}$ $E(s) = R(s) - Y(s)$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\hspace{2.5em}$ $E(s) = \frac{1}{1+G(s)C(s)} R(s)$ $\hspace{2.5em}[1]$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Final_value_theorem&quot; rel=&quot;nofollow noreferrer&quot;&gt;final value theorem&lt;/a&gt; states that:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\hspace{2.5em}$ $e(\infty) = \lim_{s \rightarrow 0}sE(s)$ $\hspace{2.5em}[2]$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using $[1]$ in $[2]$:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\hspace{2.5em}$ $e(\infty) = \lim_{s \rightarrow 0}s\frac{1}{1+G(s)C(s)} R(s)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ok! Now, we can conclude some cool stuffs.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Suppose $R(s) = \frac{1}{s}$:&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;$\hspace{2.5em}$ $e(\infty) = \lim_{s \rightarrow 0}\frac{1}{1+G(s)C(s)}$ $\hspace{2.5em}$ From calculus, is the same as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\hspace{2.5em}$ $e(\infty) = \frac{1}{1+\lim_{s \rightarrow 0} (G(s)C(s))}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\hspace{2.5em}$ $e(\infty) = \frac{1}{1+G(0)C(0)}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If $C(s) = K$, where $K$ is a proportional gain, $G(0)$ have a finite DC gain, your system is going to be the responsible for the finite final term. But, however, you can apply a PD control, $C(s) = \frac{K}{s}$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\hspace{2.5em}$ $C(0) = \lim_{s \rightarrow 0}\frac{K}{s} = \infty$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\hspace{2.5em}$ $e(\infty) = \frac{1}{1+G(0)(\infty)} = 0$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And that's the resume why you can't get null error only with a proportional gain.&lt;/p&gt;&#xA;" OwnerUserId="11582" LastActivityDate="2016-01-17T21:52:54.430" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8925" PostTypeId="2" ParentId="8907" CreationDate="2016-01-18T00:38:30.807" Score="0" Body="&lt;p&gt;It looks like maybe the author ditched the zero-based numbering, but I agree that it is hard to tell. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why not try to contact the author directly? His &lt;a href=&quot;https://www.linkedin.com/in/mavrogiannis&quot; rel=&quot;nofollow&quot;&gt;LinkedIn page&lt;/a&gt; shows he's currently a graduate research assistant at Cornell. I've contacted authors in the past and everyone I've gotten in touch with seemed pleased that I did so. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-01-18T00:38:30.807" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8926" PostTypeId="2" ParentId="8835" CreationDate="2016-01-18T03:31:04.250" Score="1" Body="&lt;p&gt;The &quot;state vector&quot;  $\vec q$ is the vector of joint angles.  Use Craig's, or Paul's, book for understanding how to compute the transformation matrix that relates the end effector position and orientation, $\vec u$, to $\vec q$.   You can also use 3x3 rotation matrices and a vector loop.  If you don't have those references, just search for Denavit-Hartenburg.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;After you have that transformation matrix, you can find $J$.  $J$ is the partial derivative of your transformation matrix with respect to the individual joint angles.   That should be enough to feed the algorithm you describe.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2016-01-18T03:31:04.250" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8927" PostTypeId="2" ParentId="921" CreationDate="2016-01-18T10:23:53.973" Score="1" Body="&lt;p&gt;Yes , it is possible but please note the following points.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1)if you are using Bluetooth, it data transfer rate depends upon different versions like for v2 blue tooth its data transfer rate 3 Mb\s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2)Now let suppose you are using a camera like ov7670 in QVGA mode(320 x 240 pixels for one frame) each pixel is 8 bits, for a good video you require 30 frames per second, which is 76800 bytes for one frame, for 30 frame it is  2.3 Mb\s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3) Now 2.3 MB\S &amp;lt; 3 MB\s, you can live vedio streaming.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;4) The rest depends how good you are in understanding programing and making Electronics connections with different modules.&lt;/p&gt;&#xA;" OwnerUserId="11610" LastEditorUserId="37" LastEditDate="2016-01-20T02:16:10.273" LastActivityDate="2016-01-20T02:16:10.273" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8929" PostTypeId="2" ParentId="8909" CreationDate="2016-01-18T15:57:11.677" Score="1" Body="&lt;p&gt;I don't think you'll be able to use PID control successfully because you don't have a continuous feedback signal. Your feedback is binary on each of three sensors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;From your description, you need to monitor or eliminate the gap between the sensors. Monitor meaning add more sensors in the gap, and eliminate meaning move the existing sensors close enough together that the gap is smaller than the line thickness.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You have a good description of your problem, but you have a poor description of the scenario. For instance:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Why did you set the gap to be wider than the line?&lt;/li&gt;&#xA;&lt;li&gt;What happens when the robot is supposed to stop? Does the line you were following just end? &lt;/li&gt;&#xA;&lt;li&gt;How quickly do you need to stop after detecting all white?&lt;/li&gt;&#xA;&lt;li&gt;Why are you using three sensors? &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;If I were you, I would use two sensors to follow the line. Set them equal distances on either side of the &quot;center&quot; you would like to use for line following. The total distance between the sensors should be less than or equal to the line thickness. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, with two sensors, if both register black, you are on the line and should go straight. If the left sensor fails to register black then you are too far to the left and you need to turn right. When both register black then turn a little to get straight again then resume going straight. Same process for the right sensor: when it fails to register black, start turning, then once both register black then course-correct back to straight and resume straight driving again. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;With one sensor only to detect if you're on the line you won't know what action to take after you depart from your intended course because you have no way of knowing which way you need to go back for course correction. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-01-18T15:57:11.677" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8930" PostTypeId="1" AcceptedAnswerId="8939" CreationDate="2016-01-18T21:50:12.727" Score="2" ViewCount="395" Body="&lt;p&gt;Is the notation of the geometry of robots from Khalil and Kleinfinger be considered as one of the probably &quot;many&quot; Modified DH Parameters?&lt;/p&gt;&#xA;" OwnerUserId="11104" LastActivityDate="2016-01-19T19:20:33.413" Title="Modified DH Parameters?" Tags="&lt;dh-parameters&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8931" PostTypeId="1" AcceptedAnswerId="8932" CreationDate="2016-01-19T01:06:02.250" Score="3" ViewCount="1364" Body="&lt;p&gt;I'm working with a differential-drive robot that has odometry measurements from wheel shaft encoders and heading information from an IMU (I'm using BNO055 in IMU mode to get Euler angles, primarily the heading angle).&lt;/p&gt;&#xA;&lt;p&gt;I'd like to use the IMU header angle to augment the odometry which is prone to slipping and other errors, but the IMU lags the odometry by up to 100 ms.&lt;/p&gt;&#xA;&lt;p&gt;How can I combine these measurements to get the best estimate of the robot pose?&lt;/p&gt;&#xA;&lt;p&gt;Thanks for any word on this.&lt;/p&gt;&#xA;" OwnerUserId="11615" LastEditorUserId="19515" LastEditDate="2020-07-25T00:36:03.983" LastActivityDate="2020-07-25T00:36:03.983" Title="How to combine odometry information with time-shifted information from IMU?" Tags="&lt;mobile-robot&gt;&lt;imu&gt;&lt;odometry&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="8932" PostTypeId="2" ParentId="8931" CreationDate="2016-01-19T03:32:20.833" Score="1" Body="&lt;p&gt;Combining two sensor outputs that should theoretically give you the same information is called &quot;sensor fusion&quot;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The easiest way to go about this is with a tool known as a complimentary filter. The complimentary filter uses a &quot;blend&quot; value, between 0 and 1, to produce the output:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;filterOutput = blend*sensor1 + (1-blend)*sensor2;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Typically you have the sensor that is more reliable short term weighted much more than the sensor that is more reliable long term. Blend values around 0.95 are common. If you think both sensors are equally reliable, then set blend to 0.5. This simply averages the two.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your case you know odometry is unreliable long term because of wheel slip and IMU short term because of delays, so I would weight odometry 0.95 and IMU 0.05 to start. See how that works and adjust as necessary. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-01-19T03:32:20.833" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8933" PostTypeId="2" ParentId="8931" CreationDate="2016-01-19T07:29:32.047" Score="2" Body="&lt;p&gt;You're robot must be moving pretty fast for this delay to cause problems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Use a circular buffer to store the odometry readings, so you'll have a record of the last 100ms of odometry readings.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Use the IMU and odom combined at time $T_{-100ms}$ to estimate your last known 'accurate' state. Integrate the odom forward from $T_{-100ms}$ to $T_{0}$ to get your current state. Repeat this at every time step.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your control can handle the delay, don't bother with integrating the odom. Just use your accurate state 100ms ago.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2016-01-19T07:29:32.047" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8934" PostTypeId="1" AcceptedAnswerId="8936" CreationDate="2016-01-19T09:16:44.173" Score="0" ViewCount="63" Body="&lt;p&gt;I ask this question to clear my concept about hardware structure of humanoid autonomous fire robot, Here is scenario a fire robot detect humans from fire, there are some vision cameras some temperature and smoke sensors which help to perform this task. Now a days in market there are many processors like &lt;code&gt;ARMV7&lt;/code&gt; and &lt;code&gt;Snapdragon&lt;/code&gt; which process tasks in any device and control the system i don't think autonomous fire robot use some kind of processors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does autonomous robots like fire robot use processors or micro controllers. Does it require &lt;code&gt;OS&lt;/code&gt; or &lt;code&gt;Rams&lt;/code&gt; environment? Like any computer system which use these kind of things.&lt;/p&gt;&#xA;" OwnerUserId="11385" LastEditorUserId="11385" LastEditDate="2016-01-19T10:08:21.970" LastActivityDate="2016-01-20T01:41:26.667" Title="Autonomous robots hardware structure planning" Tags="&lt;embedded-systems&gt;&lt;humanoid&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8935" PostTypeId="1" CreationDate="2016-01-19T10:06:07.430" Score="1" ViewCount="794" Body="&lt;p&gt;I have added hokuyo laser plug-in to mu urdf file. I successfully launched the robot in gazebo and done required changes to visualize it in rviz. I didn't get any error but the laser scan results are not published.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fine my results below &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Terminal while launching gazebo model in world&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/7NAwf.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7NAwf.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Result for &lt;code&gt;rostopic echo /scan&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/hSWa6.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hSWa6.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have also verified the tf of the model in rqt and its fine&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Aslo find my urdf file below, can someone help me to fix this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Link &amp;amp; joint:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;link name=&quot;hokuyo_link&quot;&amp;gt;&#xA;    &amp;lt;collision&amp;gt;&#xA;      &amp;lt;origin xyz=&quot;0 0 0&quot; rpy=&quot;0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;box size=&quot;0.1 0.1 0.1&quot;/&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;    &amp;lt;/collision&amp;gt;&#xA;    &amp;lt;visual&amp;gt;&#xA;      &amp;lt;origin xyz=&quot;0 0 0&quot; rpy=&quot;0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;box size=&quot;0.1 0.1 0.1&quot;/&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;    &amp;lt;/visual&amp;gt;&#xA;    &amp;lt;inertial&amp;gt;&#xA;      &amp;lt;mass value=&quot;1e-5&quot; /&amp;gt;&#xA;      &amp;lt;origin xyz=&quot;0 0 0&quot; rpy=&quot;0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;inertia ixx=&quot;1e-6&quot; ixy=&quot;0&quot; ixz=&quot;0&quot; iyy=&quot;1e-6&quot; iyz=&quot;0&quot; izz=&quot;1e-6&quot; /&amp;gt;&#xA;    &amp;lt;/inertial&amp;gt;&#xA;  &amp;lt;/link&amp;gt;&#xA;&#xA;  &amp;lt;joint name=&quot;hokuyo_joint&quot; type=&quot;fixed&quot;&amp;gt;&#xA;    &amp;lt;axis xyz=&quot;0 1 0&quot; /&amp;gt;&#xA;    &amp;lt;origin xyz=&quot;0 -0.055 0.2&quot; rpy=&quot;0 0 0&quot;/&amp;gt;&#xA;    &amp;lt;parent link=&quot;Base_plate&quot;/&amp;gt;&#xA;    &amp;lt;child link=&quot;hokuyo_link&quot;/&amp;gt;&#xA;  &amp;lt;/joint&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Controller:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;gazebo reference=&quot;hokuyo_link&quot;&amp;gt;&#xA;        &amp;lt;sensor type=&quot;gpu_ray&quot; name=&quot;hokuyo&quot;&amp;gt;&#xA;          &amp;lt;pose&amp;gt;0 0 0 0 0 0&amp;lt;/pose&amp;gt;&#xA;          &amp;lt;visualize&amp;gt;false&amp;lt;/visualize&amp;gt;&#xA;          &amp;lt;update_rate&amp;gt;40&amp;lt;/update_rate&amp;gt;&#xA;          &amp;lt;ray&amp;gt;&#xA;            &amp;lt;scan&amp;gt;&#xA;              &amp;lt;horizontal&amp;gt;&#xA;                &amp;lt;samples&amp;gt;100&amp;lt;/samples&amp;gt;&#xA;                &amp;lt;resolution&amp;gt;1&amp;lt;/resolution&amp;gt;&#xA;                &amp;lt;min_angle&amp;gt;-1.570796&amp;lt;/min_angle&amp;gt;&#xA;                &amp;lt;max_angle&amp;gt;1.570796&amp;lt;/max_angle&amp;gt;&#xA;              &amp;lt;/horizontal&amp;gt;&#xA;            &amp;lt;/scan&amp;gt;&#xA;            &amp;lt;range&amp;gt;&#xA;              &amp;lt;min&amp;gt;0.10&amp;lt;/min&amp;gt;&#xA;              &amp;lt;max&amp;gt;30.0&amp;lt;/max&amp;gt;&#xA;              &amp;lt;resolution&amp;gt;0.01&amp;lt;/resolution&amp;gt;&#xA;            &amp;lt;/range&amp;gt;&#xA;          &amp;lt;/ray&amp;gt;&#xA;          &amp;lt;plugin name=&quot;gpu_laser&quot; filename=&quot;libgazebo_ros_gpu_laser.so&quot;&amp;gt;&#xA;            &amp;lt;topicName&amp;gt;/scan&amp;lt;/topicName&amp;gt;&#xA;            &amp;lt;frameName&amp;gt;hokuyo_link&amp;lt;/frameName&amp;gt;&#xA;          &amp;lt;/plugin&amp;gt;&#xA;        &amp;lt;/sensor&amp;gt;&#xA;      &amp;lt;/gazebo&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="9856" LastActivityDate="2016-01-19T10:06:07.430" Title="Gazebo laser plug-in fails to publish scan results" Tags="&lt;mobile-robot&gt;&lt;ros&gt;&lt;navigation&gt;&lt;simulation&gt;&lt;gazebo&gt;" AnswerCount="0" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8936" PostTypeId="2" ParentId="8934" CreationDate="2016-01-19T11:29:30.940" Score="1" Body="&lt;p&gt;Vision will typically use as much processing power as you can provide. Large humanoid (human size) control systems also take a lot of processing power. It is common for a large humanoid to have at least two large computers (one for vision, one for control) or more. Also, each motor controller and many sensor subsystems will have microcontrollers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is no preferred OS that I know of. Linux with Xenomai or preempt patch seems to be popular and what I use. I would not be surprised to find vxworks, qnx, xPC or realtime windows running the current generation of humanoids. The PC doing the motor control will need a real-time capable OS (which all of the above are).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Darpa Robotics Challenge last year generated a lot of good documentation describing various humanoid systems. You can find lots of papers describing in detail the computer systems used for many of the contestants. An example is &lt;a href=&quot;http://drc.mit.edu/docs/2014_jfr_fallon.pdf&quot; rel=&quot;nofollow&quot;&gt;http://drc.mit.edu/docs/2014_jfr_fallon.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="184" LastEditDate="2016-01-20T01:41:26.667" LastActivityDate="2016-01-20T01:41:26.667" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="8937" PostTypeId="2" ParentId="8931" CreationDate="2016-01-19T13:39:17.520" Score="1" Body="&lt;p&gt;As the other answers suggest, 100ms of delay in control may not be significant to your application. It would be prudent to first solve your data-fusion problem and then see if the delay is an issue to your controller. I would first record some data of a closed-loop path and do some offline filtering to see if the results are good. For instance, make your robot drive a square and record that data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your first problem is then to synchronise the data streams; since your IMU is lagging by 100ms, then simply operate on the newest IMU data you have, with the odometry from the corresponding time. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The data-fusion could be done using a Kalman filter for the 2D case (X,Y,heading). The heading is updated by the IMU and the velocity (and heading, depending on the model) is updated by the odometry.&#xA;See the system model in &lt;a href=&quot;http://home.isr.uc.pt/~rui/publications/isie20052.pdf&quot; rel=&quot;nofollow&quot;&gt;this paper&lt;/a&gt;, which uses odometry. A good solution would involve a nonlinear KF such as EKF, but I suspect for low speeds and high sensor rates you can get away with a linear KF. I think the states would be $\mathbf{[x, y, \phi, x', y', \phi']}^\top$, where your process model would be the same as the first paper I linked, and the measurement model is simply $\mathbf{y}= \mathbf{u} + v$, where v is Gaussian white noise with known standard deviation. Maybe see &lt;a href=&quot;https://github.com/acfr/snark/blob/master/math/filter/test/constant_speed_test.cpp&quot; rel=&quot;nofollow&quot;&gt;this kalman filter framework&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After you have some working results with your offline data, you can worry about implementing it online. The implementation will greatly depend on your choice of data-fusion algorithm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See also: &lt;a href=&quot;http://www.mrpt.org/tutorials/programming/odometry-and-motion-models/probabilistic_motion_models/&quot; rel=&quot;nofollow&quot;&gt;particle filter methods&lt;/a&gt; and a full &lt;a href=&quot;http://wiki.ros.org/robot_localization&quot; rel=&quot;nofollow&quot;&gt;ROS implementation&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="8859" LastActivityDate="2016-01-19T13:39:17.520" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8938" PostTypeId="1" CreationDate="2016-01-19T13:50:33.973" Score="2" ViewCount="372" Body="&lt;p&gt;Can someone tell me where can I find some specifications about the iRobot Create 2 IR bump light sensors?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We have an SDF model of the Create 2 that uses the Hoyuko laser range finder sensor and we have to simulate the behavior of the IR sensors starting from the laser scan data. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hence we would like to have some additional information on the IR sensors which we can't find anywhere on the web - such as their exact position in the robot chassis, their maximum range, the shape of the obstacle detection field and so on.&lt;/p&gt;&#xA;" OwnerUserId="11622" LastEditorUserId="9176" LastEditDate="2016-02-01T14:32:07.080" LastActivityDate="2016-02-01T15:05:02.977" Title="iRobot Create 2 IR bump light sensor specifications" Tags="&lt;sensors&gt;&lt;irobot-create&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8939" PostTypeId="2" ParentId="8930" CreationDate="2016-01-19T19:20:33.413" Score="2" Body="&lt;p&gt;Khalil himself says that it is a form of the modified D-H parameters.  See, &lt;em&gt;e.g.,&lt;/em&gt; Section 2.1 of the 2000 Springer-Verlag book &lt;em&gt;Advances in Robot Kinematics.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2016-01-19T19:20:33.413" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8940" PostTypeId="1" AcceptedAnswerId="9011" CreationDate="2016-01-19T19:56:25.943" Score="4" ViewCount="898" Body="&lt;p&gt;I've taken a class and started a thesis on robotics and my reference for calculating the Jacobian by product of exponentials seems incorrect, see:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.cds.caltech.edu/~murray/books/MLS/pdf/mls94-complete.pdf&quot; rel=&quot;nofollow&quot;&gt;http://www.cds.caltech.edu/~murray/books/MLS/pdf/mls94-complete.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Specifically the resulting Jacobian matrix for the SCARA manipulator on page 118 would have us believe that the end effector translational velocity depends on joints 2 and 3 rather than 1 and 2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could someone please explain me why?&lt;/p&gt;&#xA;" OwnerUserId="11625" LastEditorUserId="10414" LastEditDate="2021-01-25T16:22:11.653" LastActivityDate="2021-01-25T16:22:11.653" Title="Robotic manipulator Jacobian by product of exponentials" Tags="&lt;manipulator&gt;&lt;jacobian&gt;&lt;product-of-exponentials&gt;&lt;screw-theory&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8941" PostTypeId="1" CreationDate="2016-01-19T20:54:03.023" Score="0" ViewCount="2295" Body="&lt;p&gt;What will be the best approach to get the most localization accuracy out of only an accelerometer and gyroscope?&lt;/p&gt;&#xA;" OwnerUserId="11626" LastActivityDate="2016-01-20T09:35:57.227" Title="Localization with only IMU" Tags="&lt;localization&gt;&lt;imu&gt;&lt;accelerometer&gt;&lt;gyroscope&gt;&lt;algorithm&gt;" AnswerCount="2" CommentCount="3" ClosedDate="2016-01-20T18:45:16.430" ContentLicense="CC BY-SA 3.0" />
  <row Id="8942" PostTypeId="2" ParentId="8941" CreationDate="2016-01-19T22:37:55.947" Score="0" Body="&lt;p&gt;I believe internal sensors such as those are impossible for localization.  Navigation from a known location is possible with common methods of inertial navigation.  These methods are limited by the accuracy of the sensors and external observations.&lt;/p&gt;&#xA;" OwnerUserId="11625" LastActivityDate="2016-01-19T22:37:55.947" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8944" PostTypeId="2" ParentId="8938" CreationDate="2016-01-20T01:24:25.513" Score="1" Body="&lt;p&gt;Unfortunately, I believe this is proprietary information that you won't likely get out of iRobot.  So your best bet is to characterize the sensors yourself.  You can even take apart the bumper assembly if you like.  (And if you are careful you should be able to get it back together.)  &lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2016-01-20T01:24:25.513" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8945" PostTypeId="2" ParentId="8835" CreationDate="2016-01-20T01:50:56.137" Score="0" Body="&lt;p&gt;No, you cannot determine the forward kinematics transformation matrix from the Jacobian.  You can however go the other direction (kind of).  The &lt;em&gt;analytical Jacobian&lt;/em&gt; is simply the partial derivatives of the forward kinematics equation.  Which makes sense because the forward kinematics equation gives you position, and the Jacobian (the derivative) gives you velocity.  But this is in general different than the &lt;em&gt;geometric Jacobian&lt;/em&gt;.  Which is typically what people use. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The geometric and analytical Jacobians differ in how they handle rotational velocity.  The geometric Jacobian uses angular velocity $\omega$, which is a more physically intuitive representation.  Whereas the analytical Jacobian uses the time derivative of Euler angles $\dot\phi$, which suffers from a representational singularity.  Furthermore, you can integrate $\dot\phi$ over time to get $\phi$, however this cannot be done with $\omega$.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if you have the forward kinematics equation, you can differentiate to get the analytical Jacobian, which you can then integrate to get back the forward kinematics equation, (but why?).  But if you start from the geometric Jacobian, you cannot integrate to get the proper forward kinematics equation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See &lt;a href=&quot;https://books.google.com/books/about/Robotics.html?id=jPCAFmE-logC&quot; rel=&quot;nofollow&quot;&gt;Robotics: Modelling, Planning and Control&lt;/a&gt;, by Bruno Siciliano, Lorenzo Sciavicco, Luigi Villani, Giuseppe Oriolo.  Chapter 3.6 for full discussion.&lt;/p&gt;&#xA;" OwnerUserId="110" LastEditorUserId="110" LastEditDate="2016-01-22T18:07:32.633" LastActivityDate="2016-01-22T18:07:32.633" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="8948" PostTypeId="2" ParentId="8941" CreationDate="2016-01-20T09:35:57.227" Score="0" Body="&lt;p&gt;This is similar to this question: &lt;a href=&quot;https://robotics.stackexchange.com/questions/8857/imu-position-without-gps-or-camera/8859#8859&quot;&gt;imu position without GPS or camera&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The short answer is that what you ask is not possible given realistic constraints.&lt;/p&gt;&#xA;" OwnerUserId="11500" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2016-01-20T09:35:57.227" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8949" PostTypeId="1" CreationDate="2016-01-20T09:57:11.063" Score="1" ViewCount="611" Body="&lt;p&gt;i have been playing with mbed since few week ago and would like to create a test program for dcmotor speed control. im using a 24V dc motor with encoder attach.. then test,&#xA;at first i test with supplying a 5v and 3.3V from mbed to the motor. the thing work fine giving a 16 and 10rpm respectively.&#xA;later i try using 12v it give 40rpm. &#xA;then i try a 24v input, now the speed wont come out. and also the counter that count each on/off tick not counting up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;any possible reason?&#xA;my though that maybe when it move so fast that the ISR routine couldn't catch up to the speed..&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/px4jZ.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/px4jZ.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/oVQIB.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/oVQIB.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11630" LastActivityDate="2016-01-20T09:57:11.063" Title="mbed dc motor speed control using optocoupler encoder" Tags="&lt;control&gt;&lt;motor&gt;" AnswerCount="0" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="8950" PostTypeId="1" AcceptedAnswerId="8959" CreationDate="2016-01-20T11:51:47.767" Score="5" ViewCount="1601" Body="&lt;p&gt;I am building a simple robot with two driving wheel.&#xA;I want to control the wheel rotation using a wheel encoder like this &lt;a href=&quot;http://www.tinyosshop.com/index.php?route=product/product&amp;amp;product_id=541&quot; rel=&quot;nofollow noreferrer&quot;&gt;one&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a code I have on Arduino to try to understand the problem I'm facing:&lt;/p&gt;&#xA;&#xA;&lt;pre class=&quot;lang-cc prettyprint-override&quot;&gt;&lt;code&gt;int count = 0;&#xA;void setup() {&#xA;  Serial.begin(9600);&#xA;  attachInterrupt(digitalPinToInterrupt(2), upL, RISING);&#xA;  pinMode(2, INPUT);&#xA;}&#xA;&#xA;void loop() {&#xA;  Serial.println(String(digitalRead(2)) + &quot;__&quot; + String(count));&#xA;}&#xA;&#xA;void upL(){&#xA;  count++;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;What I notice is:&lt;br&gt;&#xA;The interrupt is triggered &lt;strong&gt;multiple times&lt;/strong&gt; when the sensor beam is cut &lt;strong&gt;once&lt;/strong&gt;.&lt;br&gt;&#xA;But when I &lt;em&gt;digitalRead&lt;/em&gt; the pin, then there is only one change.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also noticed that the interrupt is also triggered when going from HIGH to LOW.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is an example of the ouput I have:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;0__0&#xA;0__0&#xA;0__0&#xA;0__0&#xA;...&#xA;...&#xA;0__0&#xA;0__0&#xA;0__0   &amp;lt;&amp;lt;&amp;lt; change from LOW to HIGH... &#xA;1__9   &amp;lt;&amp;lt;&amp;lt; the interrupt must have incremented only once... 9 instead !&#xA;1__9&#xA;1__9&#xA;1__9&#xA;...&#xA;...&#xA;1__9&#xA;1__9   &amp;lt;&amp;lt;&amp;lt; change from HIGH to LOW. the interrupt shouldn't be triggered&#xA;0__24  &amp;lt;&amp;lt;&amp;lt; still... we have 15 increments&#xA;0__24&#xA;0__24&#xA;0__24&#xA;0__24&#xA;...&#xA;...&#xA;0__24&#xA;0__24   &amp;lt;&amp;lt;&amp;lt; same here...&#xA;1__51   &amp;lt;&amp;lt;&amp;lt; 26 increments&#xA;1__51&#xA;...&#xA;...&#xA;1__51  &amp;lt;&amp;lt;&amp;lt; same here...&#xA;0__67  &amp;lt;&amp;lt;&amp;lt; 16 increments&#xA;0__67&#xA;0__67&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The only way I can explain that is that during a change of state, the signal received from the sensor is not really square, but somehow noisy.&lt;br&gt;&#xA;Like in this image :&lt;br&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/DzMIK.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/DzMIK.gif&quot; alt=&quot;explanation?&quot;&gt;&lt;/a&gt;&lt;br&gt;&#xA;Therefore we would have, indeed, many RISING on one change....&lt;br&gt;&#xA;&lt;em&gt;(However reading the output of the sensor on an analog pin shows a direct variation from 880(HIGH) to 22(LOW))&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone have another explanation? Or a solution to this problem ?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks to @TobiasK I know that this is called a &lt;em&gt;bouncing effect&lt;/em&gt;. By doing further research I came across this solution:&lt;br&gt;&#xA;playground.arduino.cc/Main/RotaryEncoders (Ctrl+F for rafbuff).&lt;br&gt;&#xA;I'm trying it and i'll let you know.&lt;/p&gt;&#xA;" OwnerUserId="11462" LastEditorUserId="11462" LastEditDate="2016-01-20T18:18:40.773" LastActivityDate="2016-01-20T21:51:50.043" Title="Wheel encoder triggers interrupt too many times" Tags="&lt;arduino&gt;&lt;wheel&gt;&lt;two-wheeled&gt;&lt;interrupts&gt;" AnswerCount="2" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8951" PostTypeId="1" AcceptedAnswerId="9266" CreationDate="2016-01-20T13:08:48.823" Score="2" ViewCount="623" Body="&lt;p&gt;Good day&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am currently implementing an autonomous quadcopter with stereo vision using raspberry Pi. One (Let's call this Pi_1) is responsible for stereo vision the other is responsible for motor control and trajectory planning (Pi_2). I was looking for a way to transfer a 480 element float vector via GPIO from Pi_1 to Pi_2. Pi_1 stereovision program runs at 2Hz while Pi_2 motor control runs at 210Hz. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Is there any protocol fast enough to deliver this amount of information to the second raspberry pi via GPIO? &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I am currently looking at SPI but I saw that the Raspberry Pi cannot be turned to a Slave making it not an option. I also looked at UART however it is too slow for my needs. All the I2c ports on the Pi are currently being used by the stereo vision cameras and the IMU's. If the gpio option is not feasible, I am also open for other suggestions such as using other hardware (middle man) or wireless options.   &lt;/p&gt;&#xA;" OwnerUserId="11311" LastActivityDate="2016-02-27T06:58:00.967" Title="Establishing Data Transfer between two Raspberry Pi's using GPIO" Tags="&lt;quadcopter&gt;&lt;raspberry-pi&gt;&lt;communication&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="8954" PostTypeId="1" AcceptedAnswerId="8958" CreationDate="2016-01-20T18:02:48.327" Score="4" ViewCount="870" Body="&lt;p&gt;I would like to know what software is available to control a timing belt with stepper motors for arduino board.Much like how its done in 3d printing.&#xA;But in this case i wont be making a 3d printer.Just one simple setup.&lt;/p&gt;&#xA;" OwnerUserId="11017" LastEditorUserId="110" LastEditDate="2016-01-21T14:08:25.930" LastActivityDate="2016-01-21T14:08:25.930" Title="Software to control an Arduino setup with a timing belt and stepper motors" Tags="&lt;arduino&gt;&lt;robotic-arm&gt;&lt;stepper-driver&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8955" PostTypeId="2" ParentId="8951" CreationDate="2016-01-20T19:00:40.837" Score="1" Body="&lt;p&gt;I2C is a bus, not a particular direct connection. What's the problem with connecting the two over I2C? Actually, the &lt;a href=&quot;https://en.wikipedia.org/wiki/I%C2%B2C&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia page for I2C&lt;/a&gt; shows the image below, with two microcontrollers connected via the I2C bus. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/d06kd.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/d06kd.png&quot; alt=&quot;I2C Bus&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might be able to transition your other devices from I2C to SPI and leave the I2C bus open for uC-uC comms.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-01-20T19:00:40.837" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8956" PostTypeId="2" ParentId="8950" CreationDate="2016-01-20T19:13:30.850" Score="1" Body="&lt;p&gt;Your signal actual going back and forth like that; it's registering with the microcontroller because you're at an intermediate voltage. As @TobiasK mentions, this is called &quot;bouncing&quot;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You're trying to use this for controlling tires, so I would suggest you do a little math to determine whether or not a &quot;subsequent&quot; signal could be considered valid or not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Distance traveled is &lt;code&gt;d = r*theta;&lt;/code&gt;, where &lt;code&gt;r&lt;/code&gt; is the wheel radius and &lt;code&gt;theta&lt;/code&gt; is the angular distance (in radians) the wheel rotated. Your encoder has some number of pulses per revolution (ppr), so, at top speed, you can expect some number of pulses per minute, or pulses per second. You can either determine this with the maximum wheel speed in RPM or in maximum vehicle speed in [distance]per minute. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, take the inverse of the maximum pulses per second to get the minimum seconds per pulse. Any pulse that you detect in a time period shorter than the minimum seconds per pulse is then invalid, so you can ignore it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Logically, some pseudo-code might look like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;# Initialization:&#xA;validPulse = 0;&#xA;&#xA;# In the loop:&#xA;if (pulse detected)&#xA;  if ( (currentTime) - validPulse ) &amp;lt; ( pulseThreshold )&#xA;    &amp;lt;do nothing&amp;gt;&#xA;  else&#xA;    validPulse = (currentTime);&#xA;    &amp;lt;do your thing here&amp;gt;&#xA;  end&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In thinking about this for a moment, I would actually caution you to double your pulses per second (halve the seconds per pulse) value because you're prone to bounce on the rising AND falling pulse, as your data above shows. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ultimately you're going to have to do something to filter the noise (bounce) out of your signal. You can either do this in a fixed manner, with electronic components (RC filter) or you can do it in software. I would always recommend software whenever possible because it's so easy to update or modify if you find your parameters change down the line, such as upgrading to faster motors, etc. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can even perform all of the calculations in your initialization section of your code, where the calculations are based on parameters you have. Then, if you swap motors, just update the motor top speed in the code and the bounce-checking duration updates automatically. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-01-20T19:13:30.850" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8957" PostTypeId="2" ParentId="8954" CreationDate="2016-01-20T20:22:29.700" Score="0" Body="&lt;p&gt;Typically stepper motor control isn't necessarily done in software but in hardware. See this &lt;a href=&quot;https://www.sparkfun.com/products/12779&quot; rel=&quot;nofollow&quot;&gt;stepper motor driver&lt;/a&gt; for an example. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The driver allows you to set bits to control how much you would like to step (full, half, quarter, etc.), and takes care of actually providing driving current to the motor. Some drivers may allow you to set a speed in steps/time, but typically after that point you send a pulse train to the motor driver; this can be done with an interrupt or other hardware timer. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-01-20T20:22:29.700" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8958" PostTypeId="2" ParentId="8954" CreationDate="2016-01-20T21:43:13.580" Score="2" Body="&lt;p&gt;Here you go.  This will control 2 steppers on an Arduino.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;Stepper.h&amp;gt;&#xA;&#xA;#define STEPS 200       // change this to the number of steps on your motor&#xA;&#xA;// create an instance of the stepper class, specifying&#xA;// the number of steps of the motor and the pins it's attached to &#xA;Stepper stepperX(STEPS, 2, 3, 4, 5);    // Arduino pins attached to the stepper driver&#xA;Stepper stepperY(STEPS, 8, 9, 10, 11);&#xA;&#xA;int previous = 0;       // the previous reading from the analog input&#xA;&#xA;void setup()&#xA;{&#xA;    // set the speed of the motor to # RPMs&#xA;    stepperX.setSpeed(60);&#xA;    stepperY.setSpeed(60);&#xA;&#xA;    // Initialize the Serial port:&#xA;    Serial.begin(9600);&#xA;}&#xA;&#xA;void loop()&#xA;{&#xA;    int sensorPosition = analogRead(0);&#xA;&#xA;    // Step forward # steps:&#xA;    Serial.println(&quot;Moving Forward...&quot;);&#xA;    stepperX.step(500);&#xA;    stepperY.step(500);&#xA;    delay(1000);&#xA;&#xA;    // Step backward # steps:&#xA;    Serial.println(&quot;Moving Backward...&quot;);&#xA;    stepperX.step(-100);&#xA;    stepperY.step(-100);&#xA;    delay(1000); &#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;As mentioned in @Chuck's post, the Arduino doesn't directly control stepper motors.  What happens is that you plug in a stepper driver to the Arduino, and that driver is wired to &amp;amp; controls the motor.  You'll see that my pins are 2, 3, 4, and 5 for one driver &amp;amp; motor, and 8, 9, 10, and 11 for the other driver &amp;amp; motor.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Stepper stepperX(STEPS, 2, 3, 4, 5);    // Arduino pins attached to the stepper driver&#xA;Stepper stepperY(STEPS, 8, 9, 10, 11);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This is because I'm using 4-phase unipolar motors.  Your choice of stepper motors will determine your own setup.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's a great writeup on the topic of motor selection:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://learn.adafruit.com/all-about-stepper-motors/types-of-steppers&quot; rel=&quot;nofollow&quot;&gt;AdaFruit stepper motor knowledge&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Good luck!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ryan&lt;/p&gt;&#xA;" OwnerUserId="9314" LastActivityDate="2016-01-20T21:43:13.580" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8959" PostTypeId="2" ParentId="8950" CreationDate="2016-01-20T21:51:50.043" Score="0" Body="&lt;p&gt;After studying the code I cited on the &lt;strong&gt;EDIT&lt;/strong&gt; of my question.&lt;br&gt;&#xA;I came up with this solution which is working so far&#xA;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;# define encoderRight 2&#xA;# define encoderLeft 3&#xA;&#xA;volatile int countR = 0;&#xA;volatile int countL = 0;&#xA;volatile boolean firstChangeR = true; // expecting the 1st change of the bounce&#xA;volatile boolean firstChangeL = true; // same&#xA;boolean right_set = true;&#xA;boolean left_set = true;&#xA;&#xA;void setup() {&#xA;  Serial.begin(9600);&#xA;  // Right encoder&#xA;  attachInterrupt(digitalPinToInterrupt(encoderRight), doEncoderRight, CHANGE);&#xA;  pinMode(encoderRight, INPUT);&#xA;  digitalWrite(encoderRight, HIGH);  // turn on pullup resistor&#xA;&#xA;  // Left encoder&#xA;  attachInterrupt(digitalPinToInterrupt(encoderLeft), doEncoderLeft, CHANGE);&#xA;  pinMode(encoderRight, INPUT);&#xA;  digitalWrite(encoderLeft, HIGH);&#xA;}&#xA;&#xA;void loop() {&#xA;  firstChangeR = true; // we reset to true to expect next change triggered&#xA;  firstChangeL = true; // by the interrupt&#xA;  // printing&#xA;  String txt = String(countL);&#xA;  txt += &quot;__&quot;;&#xA;  txt += String(countR);&#xA;  Serial.println(txt);&#xA;}&#xA;&#xA;void doEncoderRight(){&#xA;  if (firstChangeR) delay(1); // if this is the first detection then we wait&#xA;                              // for the bounce to be over&#xA;&#xA;  // if the current state is different from the last saved state then:&#xA;  // a real change happened and it's not part of the bouncing but &#xA;  // actually the real beginning of the change: the first bounce !&#xA;  if (digitalRead(2) != right_set) {&#xA;    right_set = !right_set; // so we change the real state&#xA;    countR ++;  // we also increment the right encoder&#xA;&#xA;    // since this was the firstChange the next are part of bouncing, so:&#xA;    firstChangeR = false;&#xA;  }&#xA;&#xA;}&#xA;&#xA;void doEncoderLeft(){&#xA;  if (firstChangeL) delay(1);&#xA;&#xA;  if (digitalRead(3) != left_set) {&#xA;    left_set = !left_set;&#xA;    countL ++;&#xA;&#xA;    firstChangeL = false;&#xA;  }&#xA;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Tell me what do you think about it? Do you think it's reliable and is there any improvement you can propose?&lt;/p&gt;&#xA;" OwnerUserId="11462" LastActivityDate="2016-01-20T21:51:50.043" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8960" PostTypeId="1" AcceptedAnswerId="8961" CreationDate="2016-01-21T06:44:08.133" Score="8" ViewCount="195" Body="&lt;p&gt;What are strategies used when trajectories, which are applied to a robotic joint, are interrupted? Say a robotic arm hits an obstacle, the controller just keeps applying the trajectory. Then at the end, the error gets so large, the torque can get quite strong and damage the robot or snap.&lt;/p&gt;&#xA;" OwnerUserId="9972" LastEditorUserId="110" LastEditDate="2016-01-21T14:09:05.050" LastActivityDate="2016-01-21T14:09:05.050" Title="What to do when position control with trajectories is interrupted?" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;joint&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8961" PostTypeId="2" ParentId="8960" CreationDate="2016-01-21T07:59:10.067" Score="5" Body="&lt;p&gt;If you have no possibility to detect the obstacle apriori (e.g. with cameras, vicinity sensors...) If you already hit an obstacle and your position error increases, you can only detect the problem by the increasing position error or indirect by the increasing motor current. &lt;br&gt;&#xA;Most of the motion controllers, I have seen, have tons of configuration parameters, including an error limit. This limit parameter tell the controller to disable the motor in case of this threshold is exceeded. This is done to protect the robot-hardware itself and also the environment (e.g. a wall, a crate or even an human being). &lt;br&gt;&#xA;In the procedure of setting up the robot this parameter is usually tuned, to avoid damage in case of an error but also to avoid false-positive alarms in case of a to small threshold.&lt;br&gt;&#xA;As it should be clear my answer is based on a system with a closed loop setup&lt;/p&gt;&#xA;" OwnerUserId="6911" LastActivityDate="2016-01-21T07:59:10.067" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8962" PostTypeId="1" CreationDate="2016-01-21T08:48:05.097" Score="3" ViewCount="91" Body="&lt;p&gt;A lot of the Create 2's interior space is taken up by the brush assembly and the Aerovac bin.  I'd like to take these out and put in my own stuff, but I'm concerned that the Roomba might get confused by the fact that I've unplugged these items.  Is there anything special I need to do, aside from adding an appropriate amount of weight in that area?&lt;/p&gt;&#xA;" OwnerUserId="11644" LastActivityDate="2016-02-21T15:40:58.443" Title="using the brush assembly and Aerovac bin space?" Tags="&lt;irobot-create&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8964" PostTypeId="2" ParentId="8960" CreationDate="2016-01-21T11:45:14.233" Score="3" Body="&lt;p&gt;In 1981 Raibert and Craig wrote a paper &lt;em&gt;Hybrid Position/Force Control of Manipulators&lt;/em&gt;  which was published in the June 1981 issue of &lt;em&gt;Journal of Dynamic Systems, Measurement, and Control.&lt;/em&gt;   It was republished in Brady's book &lt;em&gt;Robot Motion: Planning and Control.&lt;/em&gt; You can find many similar concepts today, some being called &quot;position and torque control,&quot; and others using velocity and/or force variables for the combination.   If you are able to sense joint torques (or motor currents), this would be a great approach.   If you cannot sense the joint torques, you can use an end effector force/torque sensor.  This would work for the scenario in which the robot cannot finish its positioning task when the object being gripped (or the gripper itself) hits an obstacle.   It would not, however, detect when an individual arm link encounters an obstacle. &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2016-01-21T11:45:14.233" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8965" PostTypeId="1" AcceptedAnswerId="9030" CreationDate="2016-01-21T16:19:02.343" Score="6" ViewCount="1752" Body="&lt;p&gt;I am trying to control a quadcopter using te OpenPilot CC3D board and a RaspberryPi. The main idea was first replace the signals from the RC emitter to the CC3D RC receiver for an RPi connected directly to the RC receiver inputs of the CC3D.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as I know the RC signals to the CC3D are PWM so the RPi should be able to control the channels using RPIO library to create the PWM by software. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But after make some tests I haven't find any way to move the motors. I am using the Ground Control System (OpenPilot Software) to configure the CC3D.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not sure whether I need to send the PWM signals in any order or something like that. I am also not sure how the Flight Mode Switch works, I suposse it works the same way as the other channels, using PWM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyone have made anything similar to this? &lt;/p&gt;&#xA;" OwnerUserId="11050" LastActivityDate="2017-10-06T12:07:23.350" Title="CC3D - Replacing RC emitter with an RPi" Tags="&lt;raspberry-pi&gt;&lt;quadcopter&gt;&lt;uav&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8968" PostTypeId="1" CreationDate="2016-01-21T23:53:33.267" Score="0" ViewCount="169" Body="&lt;p&gt;I was looking at these dc motors and I converted the torque to force at a meter distance and I got that two of them should be able to lift over 130 pounds, is this right? &lt;a href=&quot;http://www.active-robots.com/high-torque-dc-servo-motor-10rpm-with-step-dir-drive&quot; rel=&quot;nofollow&quot;&gt;http://www.active-robots.com/high-torque-dc-servo-motor-10rpm-with-step-dir-drive&lt;/a&gt; There has to be some catch i am not seeing&lt;/p&gt;&#xA;" OwnerUserId="10290" LastActivityDate="2016-01-22T00:40:34.247" Title="Do these motors really have enough torque to lift 130 pounds" Tags="&lt;motor&gt;&lt;torque&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8969" PostTypeId="2" ParentId="8968" CreationDate="2016-01-22T00:24:29.663" Score="2" Body="&lt;p&gt;Where did you get that number? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first page of the &lt;a href=&quot;https://www.active-robots.com/fileuploader/download/download/?d=0&amp;amp;file=custom%2Fupload%2FFile-1440705232.pdf&quot; rel=&quot;nofollow&quot;&gt;datasheet posted on the page you linked&lt;/a&gt; states, &quot;Max 15VDC and 7A&quot; (near the top).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the maximum input power for the motor is $P=IV$, or $P=(7)(15)=105\mbox{W}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mechanical rotating power can be calculated by $P=\tau \omega $, where $\tau$ is torque in Nm and $\omega $ is rotational speed in rad/s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The motor's top speed is 10 rpm. Multiply by 2$\pi$ to get to rad/m, then divide by 60 to convert to seconds and you get $\omega=10*(6.28/60) = 1.047 \mbox{rad/s} $.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, divide input power by rotational speed to get the theoretical maximum torque: $\tau = 105/1.047 = 100\mbox{Nm} $.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that this is &lt;em&gt;Newton&lt;/em&gt; meters; a Newton is about a quarter of a pound, so the maximum force is about 25 pounds. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, an electric motor is generally only about 80% efficient, so I wouldn't expect more than 20 pounds at 1m, &lt;em&gt;max&lt;/em&gt;.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2016-01-22T00:40:34.247" LastActivityDate="2016-01-22T00:40:34.247" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="8970" PostTypeId="1" CreationDate="2016-01-22T00:53:55.770" Score="3" ViewCount="282" Body="&lt;p&gt;I've used ROS for a while, my environment is Raspberry Pi + Ubuntu + OpenCV + ROS + C/C++. I also use several ROS packages (tf2, usb_camera, slam related, and laser scanner capture.) Also, in my projects, nodes are in multiple devices, and I'm using multiple master package for one project.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did review some tutorials about AllJoyn, but no handon experience so far.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The questions are:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;regarding to message (especially, ROS image) passing cross devices, is AllJoyn a good ROS alternative? (devices are connected by wifi or bluetooth.)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;For AllJoyn, does it still need single master (like roscore in ROS) to coordinate the nodes (or similar)? &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="11651" LastEditorUserId="167" LastEditDate="2016-01-31T14:20:58.647" LastActivityDate="2016-01-31T15:18:00.103" Title="Is AllJoyn a good ROS alternative regarding message passing cross multiple devices?" Tags="&lt;ros&gt;&lt;alljoyn&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8972" PostTypeId="2" ParentId="8962" CreationDate="2016-01-22T14:37:14.957" Score="1" Body="&lt;p&gt;No need to fear.  The Roomba will run just fine without the brush deck, vacuum bin, and side brush motor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Be sure to check out &lt;a href=&quot;http://www.irobot.com/create&quot; rel=&quot;nofollow&quot;&gt;http://www.irobot.com/create&lt;/a&gt; where there are 3D files for an extended bottom half of the vacuum bin to hold your stuff.  There are even mounting posts for Arduino, RaspberryPi, and RaspberryPi2.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2016-01-22T14:37:14.957" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8973" PostTypeId="1" CreationDate="2016-01-22T16:30:06.753" Score="3" ViewCount="122" Body="&lt;p&gt;An aerial vehicle captures images of the ground using its down facing camera. From the images, multiple targets are converted from their pixel position to the camera reference frame using the pinhole camera model. Since the targets are static and there is information of the vehicle attitude and orientation, each sample is then converted to the world referencial frame. Note that all targets are on a flat, level plane.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The vehicle keeps &quot;scanning&quot; for the targets and converting them to the world referencial frame. Due to the quality of the camera and detection algorithm, as well as errors on the altitude information, the position of the &quot;scanned&quot; targets is not constant (not accurate). A good representation might be a gaussian distribution around the target true position, however it will also be influenced by the movement of the aerial vehicle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What's the best approach to estimate the position of the targets from multiple readings?&#xA;This basically resumes to a problem of noise removal (as well as outlier removal) and estimation, so I would like to know what algorithms and strategies could solve the problem. In the end I expect to implement and test a collection of different approachs to understand their performance on this specific problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Furthermore, this system is implemented using ROS, so if you know of packages that already do what I'm searching for I would be glad to hear. You can also cite papers on the topic that you think might be of my interest.&lt;/p&gt;&#xA;" OwnerUserId="370" LastEditorUserId="370" LastEditDate="2016-01-25T16:06:26.367" LastActivityDate="2016-01-25T16:06:26.367" Title="How to estimate the position of multiple static ground targets captured from a down facing camera?" Tags="&lt;localization&gt;&lt;ros&gt;&lt;computer-vision&gt;&lt;algorithm&gt;&lt;uav&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8975" PostTypeId="1" CreationDate="2016-01-23T10:34:17.723" Score="4" ViewCount="461" Body="&lt;p&gt;I am working with the CJMCU build of cleanflight on a small drone. As of now, the algorithm for altitude hold uses a first order complementary filter to combine data from the barometer and the accelerometer (after integrating the accelerations twice). However, I have noticed a considerable lag in the altitude readings and this seems to be hampering the control algorithm's performance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The filter in question has been implemented in &lt;a href=&quot;https://github.com/diydrones/ardupilot/blob/db8a2f7e8bb2183e6d281e7a348d455d855cf5e1/libraries/AP_TECS/AP_TECS.cpp&quot; rel=&quot;noreferrer&quot;&gt;https://github.com/diydrones/ardupilot/blob/db8a2f7e8bb2183e6d281e7a348d455d855cf5e1/libraries/AP_TECS/AP_TECS.cpp&lt;/a&gt;&#xA;However, I'm unable to understand how this works.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pardon me for any errors I may have committed.&lt;/p&gt;&#xA;" OwnerUserId="11526" LastActivityDate="2017-02-13T23:35:50.670" Title="How does one implement a third order complementary filter for estimating altitude using data from an accelerometer and a barometer?" Tags="&lt;quadcopter&gt;&lt;sensors&gt;&lt;sensor-fusion&gt;" AnswerCount="0" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8976" PostTypeId="1" CreationDate="2016-01-23T13:29:48.160" Score="4" ViewCount="432" Body="&lt;p&gt;I'm using the Delphi example to command my Create 2, I just adapted the demo code to Unicode (DelphiXE). I use the original iRobot USB to serial cable. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My Create 2 seemed to be responding fine to all the commands send via serial yesterday and correctly received all sensor data back this morning, until I recharged the battery. Now when I send &quot;7&quot; &quot;Soft reset&quot; the robot attempts every time to start a clean cycle. It also attempts to start the clean cycle when I press the clean button. It tells me to move the Roomba to a new location, which is normal in cleaning mode because my wheels are not touching my desk. Communication via serial seem to be fine because I still get the Soft Reset response texts in the log memo of my app when I use the 2 buttons method to soft reset my Create 2, so there is still communication both ways.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I must say I had the same yesterday after charging but after a while unexpectedly, don't know why, the robot responded again fine to my commands.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It really seems to me the Create 2 is stuck in the Cleaning mode, or am I missing something?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BTW, I also tried to fix the problem by removing the battery.&lt;/p&gt;&#xA;" OwnerUserId="11667" LastEditorUserId="9176" LastEditDate="2016-03-14T01:15:56.497" LastActivityDate="2016-03-25T15:29:12.667" Title="iRobot Create 2 stuck in Clean mode?" Tags="&lt;irobot-create&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8978" PostTypeId="2" ParentId="8448" CreationDate="2016-01-24T02:07:20.647" Score="1" Body="&lt;p&gt;&lt;strong&gt;Helping with inspiration&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hello,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suggest you to evaluate separately the altitude and attitude dynamics. Then you can start thinking in the control you need to achieve your own objectives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The altitude of a Quadrotor is how high it can get. For this, we need to have a mathematical model:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/E4Lfx.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/E4Lfx.jpg&quot; alt=&quot;quadrotor schematic&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For this approach, you should read about &lt;a href=&quot;https://en.wikipedia.org/wiki/Euler_angles&quot; rel=&quot;nofollow noreferrer&quot;&gt;euler angles &amp;amp; rotation matrices&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From Newton's equation:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\ddot{z} = \frac{1}{M}{\cos(\phi)\cos(\theta)\sum_{n=1}^{4} \omega_n^{2}} - g$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where the expression can be derived from the relationship of the two frames represented in the figure above! Please, observe that the angles are essential to control the altitude, but we can do (and should do!) some approximations to simplify our model. Suppose $\phi$ and $\theta$ very small&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\ddot{z} = \frac{1}{M}{\sum_{n=1}^{4} \omega_n^{2}} - g$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(...)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For more, I recommend this book &lt;a href=&quot;http://www.springer.com/br/book/9784431538554&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope I have inspired you to start your cool project. Good luck!&lt;/p&gt;&#xA;" OwnerUserId="11582" LastActivityDate="2016-01-24T02:07:20.647" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8980" PostTypeId="2" ParentId="8976" CreationDate="2016-01-24T13:07:55.663" Score="1" Body="&lt;p&gt;I think I found the solution myself. When I send a &quot;128 255&quot; opcode to my Create it seems the robot is switched out of Clean mode, and back in to programming mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is no mention anywhere in the specs of opcode &quot;255&quot;, nor is there any mention of switching off Clean mode in the specs either.&lt;/p&gt;&#xA;" OwnerUserId="11667" LastEditorUserId="9176" LastEditDate="2016-03-14T01:15:47.917" LastActivityDate="2016-03-14T01:15:47.917" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="8981" PostTypeId="1" CreationDate="2016-01-24T15:06:58.420" Score="2" ViewCount="418" Body="&lt;p&gt;My computer will not recognize the Serial to USB cable.  I have tried it on a Mac and an HP.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a driver that I need to install?  If it is supposed to install automatically, it is not.&lt;/p&gt;&#xA;" OwnerUserId="11680" LastEditorUserId="9176" LastEditDate="2016-02-01T14:32:19.667" LastActivityDate="2016-02-01T14:32:19.667" Title="How do I get the Create 2 to communicate with a laptop via the serial to USB cable?" Tags="&lt;irobot-create&gt;&lt;serial&gt;&lt;usb&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8982" PostTypeId="2" ParentId="8981" CreationDate="2016-01-24T15:25:48.703" Score="2" Body="&lt;p&gt;If it's a FTDI device, download the latest driver from &lt;a href=&quot;http://www.ftdichip.com/Drivers/VCP.htm&quot; rel=&quot;nofollow&quot;&gt;http://www.ftdichip.com/Drivers/VCP.htm&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I assume its the original USB to Serial cable from iRobot you're using.&lt;/p&gt;&#xA;" OwnerUserId="11667" LastEditorUserId="110" LastEditDate="2016-01-24T21:30:04.183" LastActivityDate="2016-01-24T21:30:04.183" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8986" PostTypeId="2" ParentId="8973" CreationDate="2016-01-25T13:48:16.620" Score="1" Body="&lt;p&gt;I see that you updated your question some, but maybe it's your scenario that's not clear. If your targets are all of about the same size, and all on a flat, level plane, then I can see that you could get their height by the the height of the aerial vehicle. I thought it was randomly distributed targets on an unknown surface, in which case the height of the aerial vehicle doesn't really buy you anything; you would need some other information to determine the 3D coordinates of the target. As it stands, knowing that the targets are all on a level plane &lt;em&gt;is&lt;/em&gt; the extra information. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, if you describe your noise as Gaussian, and the measurements are taken from a linear system (moving platform), then that's pretty much the definition of when to use a &lt;a href=&quot;https://en.wikipedia.org/wiki/Kalman_filter&quot; rel=&quot;nofollow&quot;&gt;Kalman filter&lt;/a&gt;; &quot;the [Kalman] filter yields the exact conditional probability estimate in the special case that all errors are Gaussian-distributed.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'll need to know the covariance of the errors, but that shouldn't be too much of an issue as it sounds like you have already taken some measurements, enough to know that they are noisy and Gaussian in distribution. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-01-25T13:48:16.620" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="8988" PostTypeId="1" AcceptedAnswerId="8996" CreationDate="2016-01-25T18:41:50.633" Score="2" ViewCount="375" Body="&lt;p&gt;Before I start, I am a 13 year old, I would like to apologise because I am a beginner to all this and I wouldn't really understand any professional talk, I am only doing this for a hobby.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am building a quadcopter,&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Flight controller: KK 1.2.5&lt;/li&gt;&#xA;&lt;li&gt;ESC: Q Brain 25amp&lt;/li&gt;&#xA;&lt;li&gt;Frame: KK 260 / FPV 260&lt;/li&gt;&#xA;&lt;li&gt;Frame Addon: KK/FPV 250 Long Frame Upgrade Kit&lt;/li&gt;&#xA;&lt;li&gt;Tx &amp;amp; Rx: HobbyKing 6ch tx rx (Mode 2)&lt;/li&gt;&#xA;&lt;li&gt;Battery: Turnigy Nano-Tech 2200 mAh 3S&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I am not sure about what motor and propellers I should use.&#xA;All I know is: for the frame the motor mounts are: 16mm to 19mm with M3 screws&#xA;I am not sure what 1806 and 2208 means.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are my questions:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;What calculations should I do to find out how much thrust the quad needs to produce / any other useful calculations&lt;/li&gt;&#xA;&lt;li&gt;Using the calculations what would be the best and CHEAPEST motors I could have&lt;/li&gt;&#xA;&lt;li&gt;And finally, what propeller would be best suited for the motor.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;p.s: I am looking for a durable and really cheap motors also, I live in London, so shipping might be a problem if there is an immense bill.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks a lot for your time,&#xA;Sid&lt;/p&gt;&#xA;" OwnerUserId="11688" LastActivityDate="2017-01-01T19:05:04.663" Title="Building a quadcopter, what motors, props and what are the calculations?" Tags="&lt;quadcopter&gt;&lt;motor&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8990" PostTypeId="1" CreationDate="2016-01-26T04:27:07.987" Score="3" ViewCount="2161" Body="&lt;p&gt;I am writing a code in Arduino IDE for NodeMCU Board to control a differential drive 2 wheeled robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am able to steer only one direction for some reason and the steering response time is a little awkward.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there perhaps a better strategy for the code that I am using?` &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am using an app called Blynk that has a virtual joystick that controls that feeds the data through Virtual Pins. V1 param 0 and 1 are x and y. x would be left to right on the joystick and y would be forward and back. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Information about the App is available here: &lt;a href=&quot;http://www.blynk.cc/&quot; rel=&quot;nofollow&quot;&gt;http://www.blynk.cc/&lt;/a&gt;. I have it working for the most part, but there is some latency since it is through a cloud service.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main problem I am stuck on is steering while driving forward and backward. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    //#define BLYNK_DEBUG&#xA;//#define BLYNK_PRINT Serial    // Comment this out to disable prints and save space&#xA;#define BLYNK_PRINT Serial    // Comment this out to disable prints and save space&#xA;#include &amp;lt;ESP8266WiFi.h&amp;gt;&#xA;#include &amp;lt;BlynkSimpleEsp8266.h&amp;gt;&#xA;&#xA;&#xA;int motorA ;&#xA;int motorB ;&#xA;int X=0;&#xA;int Y=0;&#xA;int Steer=0;&#xA;int maximo=0;&#xA;&#xA;// You should get Auth Token in the Blynk App.&#xA;// Go to the Project Settings (nut icon).&#xA;char auth[] = &quot;b41ff7f1659b4badb694be4c59601c2c&quot;;&#xA;&#xA;void setup()&#xA;{&#xA;  // Set console baud rate&#xA;  Serial.begin(9600);&#xA;&#xA;&#xA; Blynk.begin(auth,&quot;100Grand&quot;,&quot;Mob4life&quot;);&#xA;&#xA; pinMode(motorA, OUTPUT); &#xA; pinMode(motorB, OUTPUT);&#xA; pinMode(0,OUTPUT);&#xA; pinMode(2,OUTPUT);&#xA; pinMode(4,OUTPUT);&#xA; pinMode(5,OUTPUT);&#xA;&#xA;}&#xA;&#xA; BLYNK_WRITE(V1) &#xA;{&#xA;  int X1 = param[0].asInt();&#xA;  X=X1;&#xA;  int Y1 = param[1].asInt();&#xA; Y=Y1;&#xA;&#xA;}&#xA;&#xA; BLYNK_WRITE(V0)//      slider  de 100 a 255!!!!&#xA;{&#xA; int vel = param.asInt(); &#xA; maximo=vel;&#xA;}&#xA;&#xA;void loop()&#xA;{&#xA;&#xA;  if(X == 128  &amp;amp;&amp;amp;  Y == 128)  //  Stop&#xA;  {&#xA;   motorA = 0;&#xA;   motorB = 0;&#xA;   analogWrite(5, motorA);  &#xA;   analogWrite(4, motorA);&#xA;   analogWrite(0, motorB);  &#xA;   analogWrite(2, motorB);&#xA;   } &#xA;&#xA;   if(Y &amp;gt; 130 &amp;amp;&amp;amp; X &amp;gt; 127 &amp;amp;&amp;amp; X &amp;lt; 129)   //Forward&#xA;  {&#xA;    motorA = Y;&#xA;    motorB = Y;&#xA;&#xA;    motorA = map(motorA, 450,maximo,130, 255);&#xA;    analogWrite(5, motorA);&#xA;    digitalWrite(0,LOW);&#xA;    motorB = map(motorA, 450,maximo,130, 255);&#xA;    analogWrite(4, motorB);&#xA;    digitalWrite(2,HIGH);&#xA;  }&#xA;&#xA;  else if(Y &amp;lt; 126 &amp;amp;&amp;amp; X &amp;gt; 127 &amp;amp;&amp;amp; X &amp;lt; 129)   //Reverse&#xA;  {&#xA;    motorA = Y;&#xA;    motorB = Y;&#xA;&#xA;    motorA = map(motorA, 450,maximo,126, 0);&#xA;    analogWrite(5, motorA);&#xA;    digitalWrite(0,HIGH);&#xA;    motorB = map(motorA, 450,maximo,126, 0);//something is wrong with HIGH signal&#xA;    analogWrite(4, motorB);&#xA;    digitalWrite(2,LOW);&#xA;  }&#xA;&#xA;   if(Y &amp;gt; 130 &amp;amp;&amp;amp; X &amp;lt; 126)   //Steer Left&#xA;  {&#xA;    motorA = Y;&#xA;    motorB = Y;&#xA;    Steer = map(X, 450,maximo, 126,0);&#xA;     Steer = X / maximo;&#xA;&#xA;    motorA = map(motorA, 450,maximo,130, 255);&#xA;    analogWrite(5, motorA * (1 + Steer));&#xA;    digitalWrite(0,LOW);&#xA;   motorB = map(motorA, 450,maximo,130, 255);&#xA;    analogWrite(4, motorB * (1 - Steer));&#xA;    digitalWrite(2,HIGH);&#xA;  }&#xA;&#xA;   if(Y &amp;gt; 130 &amp;amp;&amp;amp; X &amp;gt; 130)   //Steer Right&#xA;  {&#xA;    motorA = Y;&#xA;    motorB = Y;&#xA;    Steer = map(X, 450,maximo, 126,0);&#xA;    Steer = X / maximo;&#xA;&#xA;    motorA = map(motorA, 450,maximo,130, 255);&#xA;    analogWrite(5, motorA * (1 - Steer));&#xA;    digitalWrite(0,LOW);&#xA;    motorB = map(motorA, 450,maximo,130, 255);&#xA;    analogWrite(4, motorB * (1 + Steer));&#xA;    digitalWrite(2,HIGH);&#xA;  }&#xA;&#xA;  Blynk.run();&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Any help would be appreciated. Thanks!`&lt;/p&gt;&#xA;" OwnerUserId="11692" LastEditorUserId="11692" LastEditDate="2016-02-04T07:33:19.560" LastActivityDate="2021-02-17T15:32:12.000" Title="Standard equation for steering differential drive robot" Tags="&lt;differential-drive&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8991" PostTypeId="2" ParentId="8916" CreationDate="2016-01-26T04:44:27.300" Score="0" Body="&lt;p&gt;It turns out, the default i2c baudrate becomes a bottle neck in reading the measurement data from the IMU's so increasing it from 100kbps to 400kbps was able to boost my execution frequency from 150Hz (After optimizing) to ~ 210Hz (0.00419s)&lt;/p&gt;&#xA;" OwnerUserId="11311" LastActivityDate="2016-01-26T04:44:27.300" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="8992" PostTypeId="1" AcceptedAnswerId="8995" CreationDate="2016-01-26T07:10:31.750" Score="3" ViewCount="253" Body="&lt;p&gt;I am reading SLAM for Dummies, which you can find on Google, or at this link: &lt;a href=&quot;http://ocw.mit.edu/courses/aeronautics-and-astronautics/16-412j-cognitive-robotics-spring-2005/projects/1aslam_blas_repo.pdf&quot; rel=&quot;nofollow&quot;&gt;SLAM for Dummies - A Tutorial Approach to Simultaneous Localization and Mapping&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They do some differentiation of matrices on page 33 and I am getting different answers for the resulting Jacobian matrices. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The paper derived &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\left[ {\begin{array}{c}&#xA;\sqrt{(\lambda_x - x)^2 + (\lambda_y - y)^2} + v_r \\ \tan^{-1}\left(\frac{\lambda_y - y}{\lambda_y - x}\right) - \theta + v_\theta \end{array}} \right]&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and got&#xA;$$&#xA;\left[ {\begin{array}{ccc}&#xA;\frac{x - \lambda_y}{r},&amp;amp; \frac{y - \lambda_y}{r},&amp;amp; 0\\ \frac{\lambda_y - y}{r^2},&amp;amp; \frac{\lambda_y - x}{r^2},&amp;amp; -1 \end{array}} \right]&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't get where the $r$ came from. I got completely different answers. Does anybody know what the $r$ stands for? If not, is there a different way to represent the Jacobian of this matrix?&lt;/p&gt;&#xA;" OwnerUserId="11695" LastEditorUserId="9176" LastEditDate="2016-03-14T01:16:15.887" LastActivityDate="2016-03-14T01:16:15.887" Title="In the SLAM for Dummies, why are there extra variables in the Jacobian Matricies?" Tags="&lt;slam&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8993" PostTypeId="2" ParentId="8992" CreationDate="2016-01-26T07:53:09.617" Score="0" Body="&lt;p&gt;Without checking, I assume $r$ is introduced as the range $\sqrt{(\lambda_x - x)^2 + (\lambda_y - y)^2}$. This is often useful when deriving such expressions, since the range often occurs in the derivative in first or higher order.&lt;/p&gt;&#xA;" OwnerUserId="10327" LastActivityDate="2016-01-26T07:53:09.617" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8994" PostTypeId="1" AcceptedAnswerId="8997" CreationDate="2016-01-26T08:14:29.397" Score="0" ViewCount="439" Body="&lt;p&gt;I see that in small robots tracked chassis is implemented with 2 motors, each powering one side of the vehicle, like this: &lt;a href=&quot;https://i.stack.imgur.com/DLfvd.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/DLfvd.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(image stolen from here)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But in real scale tanks I assume there is only one motor so there must be some way of applying power to both sides independently.&lt;/p&gt;&#xA;" OwnerUserId="2663" LastActivityDate="2016-01-26T12:42:06.007" Title="How to implement transmission in tracked chassis with one motor?" Tags="&lt;tracks&gt;&lt;gearing&gt;&lt;chassis&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8995" PostTypeId="2" ParentId="8992" CreationDate="2016-01-26T08:17:56.120" Score="5" Body="&lt;p&gt;From the paper:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\begin{bmatrix} range\\bearing \end{bmatrix} = \begin{bmatrix} \sqrt{(\lambda_x-x)^2 + (\lambda_y - y)^2 } + v_r \\ tan^{-1}(\frac{\lambda_y-y}{\lambda_x-x}) - \theta + v_{\theta} \end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Jacobian is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$H = \begin{bmatrix}\frac{\partial range}{\partial x} &amp;amp; \frac{\partial range}{\partial y} &amp;amp; \frac{\partial range}{\partial \theta}\\\frac{\partial bearing}{\partial x} &amp;amp; \frac{\partial bearing}{\partial y} &amp;amp; \frac{\partial bearing}{\partial \theta}\end{bmatrix} = \begin{bmatrix}\frac{-2(\lambda_x-x)}{2\sqrt{(\lambda_x-x)^2 + (\lambda_y - y)^2 }} &amp;amp; \frac{-2(\lambda_y-y)}{2\sqrt{(\lambda_x-x)^2 + (\lambda_y - y)^2 }}&amp;amp;0\\ &#xA;\frac{1}{1+(\frac{\lambda_y-y}{\lambda_x-x})^2}\cdot\frac{\lambda_y-y}{(\lambda_x-x)^2}&amp;amp;\frac{1}{1+(\frac{\lambda_y-y}{\lambda_x-x})^2}\cdot\frac{-1}{(\lambda_x-x)}&amp;amp;-1\end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The expression $\sqrt{(\lambda_x-x)^2 + (\lambda_y - y)^2 }$ is just the ideal range (distance from the robot to the landmark), and so is called $r$. Then the previous expression simplifies to:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$H = \begin{bmatrix}\frac{x-\lambda_x}{\sqrt{(\lambda_x-x)^2 + (\lambda_y - y)^2 }} &amp;amp; \frac{y-\lambda_y}{\sqrt{(\lambda_x-x)^2 + (\lambda_y - y)^2 }}&amp;amp;0\\ &#xA;\frac{\lambda_y-y}{(\lambda_x-x)^2+(\lambda_y-y)^2}&amp;amp;\frac{x-\lambda_x}{(\lambda_x-x)^2+(\lambda_y-y)^2}&amp;amp;-1\end{bmatrix} = \begin{bmatrix}\frac{x-\lambda_x}{r} &amp;amp; \frac{y-\lambda_y}{r}&amp;amp;0\\ &#xA;\frac{\lambda_y-y}{r^2}&amp;amp;\frac{x-\lambda_x}{r^2}&amp;amp;-1\end{bmatrix}$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can see there is a sign error in the paper (second row, second column). You can check it with any differentiation tool (you can find a bunch of them online).&lt;/p&gt;&#xA;" OwnerUserId="10782" LastEditorUserId="10782" LastEditDate="2016-01-26T08:35:24.930" LastActivityDate="2016-01-26T08:35:24.930" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8996" PostTypeId="2" ParentId="8988" CreationDate="2016-01-26T09:49:31.007" Score="2" Body="&lt;p&gt;You've got most of the needed parts right however, since you are a begginner I would recommend you just buy ARF (Almost Ready to fly kits from HobbyKing or Amazon). An example is the DJI F450 kit with e300/e305 tuned propulsion system. The motors and propellers are already tuned so you do not need to balance them and the motors that come with either of these kits are designed to work seamlessly with the ESC's they come with. These also work with your KK flight controller. The recommended takeoff weight for this kit is 1.2 kgs which is enough for most applications. I've also seen people doing their thesis projects using this kit including me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to pursue building you own (Which I think you shouldn't do), you should first take into consideration the weight you are expecting. &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Get the weight of your frame and all the peripherals you would mount such as the flight controller, the camera and the frame that you are going to use. Take into consideration the maximum weight capacity of your frame while doing this. You should also leave allowances for the addition of motors, propellers and esc's and the battery. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Once you've got the weight, its time to select motors. You should select motors based on their recommended take off weight (you can check this on their specs). If your the weight you've calculated plus the weight of the motors you've selected fits into the recommended take off weight then your good. Take note I said recommended take off weight, not maximum weight/thrust. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I'm not that familiar when it comes to selecting propellers though. You can check this link instead. He gives a better explaination: &lt;a href=&quot;http://blog.oscarliang.net/how-to-choose-motor-and-propeller-for-quadcopter/&quot; rel=&quot;nofollow&quot;&gt;http://blog.oscarliang.net/how-to-choose-motor-and-propeller-for-quadcopter/&lt;/a&gt; &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;When selecting batteries you can use this calculator to check your estimated flight time. &lt;a href=&quot;http://multicopter.forestblue.nl/lipo_need_calculator.html&quot; rel=&quot;nofollow&quot;&gt;http://multicopter.forestblue.nl/lipo_need_calculator.html&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="11311" LastEditorUserId="11311" LastEditDate="2016-01-26T11:26:57.760" LastActivityDate="2016-01-26T11:26:57.760" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="8997" PostTypeId="2" ParentId="8994" CreationDate="2016-01-26T12:42:06.007" Score="0" Body="&lt;p&gt;Yes there is and the principle is same as wheeled vehicles. There is a part in vehicle chassis called differential which transmits the raw power from the engine to the axle. Tanks and other tracked vehicles use a similar system to utilize a single engine output for both sides.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although going forward is pretty simple, there is a major problem that still persists. Since tanks don't have additional mechanism for turning, they use 2 different methods which acts as a solution. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first one is a basic solution, there are 2 different brake clutches for individual tracks. When one of them is used, the corresponding track slows down and the vehicle turns in that direction by dragging the tracks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second one is called neutral steering and not that common. It was used in tanks such as German Panther. This system has a hybrid gearbox to set different speeds in different directions for each track. Vehicles with this mechanism can do a stationary 360 degree turn. Neutral steering looks pretty but trying to implement it into a robotic infrastructure requires a high knowledge in mechanical engineering as this kind of steering system is a very complex one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More information about tracked vehicle steering can be found here: &lt;a href=&quot;http://www.gizmology.net/tracked.htm&quot; rel=&quot;nofollow&quot;&gt;Tracked Vehicle Steering&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11459" LastActivityDate="2016-01-26T12:42:06.007" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="8998" PostTypeId="1" AcceptedAnswerId="8999" CreationDate="2016-01-26T14:50:25.613" Score="2" ViewCount="726" Body="&lt;p&gt;Good day,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am currently implementing a single loop PID controller using angle setpoints as inputs. I was trying out a different approach for the D part of the PID controller. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What bought this about is that when I was able to reach a 200Hz (0.00419ms) loop rate, when adding a D gain, the quadcopter seems to dampen the movements in a non continous manner. This was not the case when my algorithm was running at around 10Hz. At an angle set point of 0 degrees, I would try to push it to one side by 5 degrees then the quad would try to stay rock solid by resisting the movements but lets go after while enabling me to get it of by 2 degrees (the dampening effect weakens over time) then tries to dampen the motion again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is my implementation of the traditional PID:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Derivative on Error:&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;//Calculate Orientation Error (current - target)&#xA;float pitchError = pitchAngleCF - pitchTarget;&#xA;pitchErrorSum += (pitchError*deltaTime2);&#xA;float pitchErrorDiff = pitchError - pitchPrevError;&#xA;pitchPrevError = pitchError;&#xA;&#xA;float rollError = rollAngleCF - rollTarget;&#xA;rollErrorSum += (rollError*deltaTime2);&#xA;float rollErrorDiff = rollError - rollPrevError;&#xA;rollPrevError = rollError;&#xA;&#xA;float yawError = yawAngleCF - yawTarget;&#xA;yawErrorSum += (yawError*deltaTime2);&#xA;float yawErrorDiff = yawError - yawPrevError;&#xA;yawPrevError = yawError;&#xA;&#xA;&#xA;//PID controller list&#xA;float pitchPID = pitchKp*pitchError + pitchKi*pitchErrorSum + pitchKd*pitchErrorDiff/deltaTime2;&#xA;float rollPID = rollKp*rollError + rollKi*rollErrorSum + rollKd*rollErrorDiff/deltaTime2;&#xA;float yawPID = yawKp*yawError + yawKi*yawErrorSum + yawKd*yawErrorDiff/deltaTime2;&#xA;&#xA;//Motor Control - Mixing    &#xA;//Motor Front Left (1)&#xA;float motorPwm1 =  -pitchPID + rollPID - yawPID + baseThrottle + baseCompensation;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;What I tried to do now is to implement a derivative on measurement method from this article to remove derivative output spikes. However the Derivative part seems to increase the corrective force than dampen it.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Derivative on Measurement:&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;//Calculate Orientation Error (current - target)&#xA;float pitchError = pitchAngleCF - pitchTarget;&#xA;pitchErrorSum += (pitchError*deltaTime2);&#xA;float pitchErrorDiff = pitchAngleCF - pitchPrevAngleCF; // &amp;lt;----&#xA;pitchPrevAngleCF = pitchAngleCF;&#xA;&#xA;float rollError = rollAngleCF - rollTarget;&#xA;rollErrorSum += (rollError*deltaTime2);&#xA;float rollErrorDiff = rollAngleCF - rollPrevAngleCF; // &amp;lt;----&#xA;rollPrevAngleCF = rollAngleCF;&#xA;&#xA;float yawError = yawAngleCF - yawTarget;&#xA;yawErrorSum += (yawError*deltaTime2);&#xA;float yawErrorDiff = yawAngleCF - yawPrevAngleCF; // &amp;lt;----&#xA;yawPrevAngleCF = yawAngleCF;&#xA;&#xA;&#xA;//PID controller list // &amp;lt;---- The D terms are now negative&#xA;float pitchPID = pitchKp*pitchError + pitchKi*pitchErrorSum - pitchKd*pitchErrorDiff/deltaTime2;&#xA;float rollPID = rollKp*rollError + rollKi*rollErrorSum - rollKd*rollErrorDiff/deltaTime2;&#xA;float yawPID = yawKp*yawError + yawKi*yawErrorSum - yawKd*yawErrorDiff/deltaTime2;&#xA;&#xA;&#xA;//Motor Control - Mixing    &#xA;//Motor Front Left (1)&#xA;float motorPwm1 =  -pitchPID + rollPID - yawPID + baseThrottle + baseCompensation;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;My question now is:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Is there something wrong with my implementation of the second method? &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Source: &lt;a href=&quot;http://brettbeauregard.com/blog/2011/04/improving-the-beginner%E2%80%99s-pid-derivative-kick/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://brettbeauregard.com/blog/2011/04/improving-the-beginner%E2%80%99s-pid-derivative-kick/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The way I've obtained the change in time or DT is by taking the timestamp from the start of the loop then taking the next time stamp at the end of the loop. Their difference is obtained to obtain the DT. getTickCount() is an OpenCV function.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/* Initialize I2c */  &#xA;/* Open Files for data logging */ &#xA;while(1){&#xA;    deltaTimeInit=(float)getTickCount();&#xA;&#xA;    /* Get IMU data */&#xA;    /* Filter using Complementary Filter */&#xA;    /* Compute Errors for PID */&#xA;    /* Update PWM's */&#xA;&#xA;    //Terminate Program after 40 seconds&#xA;    if((((float)getTickCount()-startTime)/(((float)getTickFrequency())))&amp;gt;20){&#xA;            float stopTime=((float)getTickCount()-startTime)/((float)getTickFrequency());&#xA;    gpioPWM(24,0);  //1&#xA;    gpioPWM(17,0);  //2&#xA;    gpioPWM(22,0);  //3&#xA;    gpioPWM(18,0);  //4&#xA;    gpioTerminate(); &#xA;        int i=0;&#xA;    for (i=0 ; i &amp;lt; arrPitchCF.size(); i++){&#xA;        file8 &amp;lt;&amp;lt; arrPitchCF.at(i) &amp;lt;&amp;lt; endl;&#xA;    }&#xA;&#xA;    for (i=0 ; i &amp;lt; arrYawCF.size(); i++){&#xA;        file9 &amp;lt;&amp;lt; arrYawCF.at(i) &amp;lt;&amp;lt; endl;&#xA;    }&#xA;&#xA;    for (i=0 ; i &amp;lt; arrRollCF.size(); i++){&#xA;        file10 &amp;lt;&amp;lt; arrRollCF.at(i) &amp;lt;&amp;lt; endl;&#xA;    }&#xA;&#xA;    for (i=0 ; i &amp;lt; arrPitchAccel.size(); i++){&#xA;        file2 &amp;lt;&amp;lt; arrPitchAccel.at(i) &amp;lt;&amp;lt; endl;&#xA;    }&#xA;&#xA;    for (i=0 ; i &amp;lt; arrYawAccel.size(); i++){&#xA;        file3 &amp;lt;&amp;lt; arrYawAccel.at(i) &amp;lt;&amp;lt; endl;&#xA;    }&#xA;&#xA;    for (i=0 ; i &amp;lt; arrRollAccel.size(); i++){&#xA;        file4 &amp;lt;&amp;lt; arrRollAccel.at(i) &amp;lt;&amp;lt; endl;&#xA;    }&#xA;&#xA;    for (i=0 ; i &amp;lt; arrPitchGyro.size(); i++){&#xA;        file5 &amp;lt;&amp;lt; arrPitchGyro.at(i) &amp;lt;&amp;lt; endl;&#xA;    }&#xA;&#xA;    for (i=0 ; i &amp;lt; arrYawGyro.size(); i++){&#xA;        file6 &amp;lt;&amp;lt; arrYawGyro.at(i) &amp;lt;&amp;lt; endl;&#xA;    }&#xA;&#xA;    for (i=0 ; i &amp;lt; arrRollGyro.size(); i++){&#xA;        file7 &amp;lt;&amp;lt; arrRollGyro.at(i) &amp;lt;&amp;lt; endl;&#xA;    }&#xA;&#xA;    for (i=0 ; i &amp;lt; arrPWM1.size(); i++){&#xA;        file11 &amp;lt;&amp;lt; arrPWM1.at(i) &amp;lt;&amp;lt; endl;&#xA;    }&#xA;&#xA;    for (i=0 ; i &amp;lt; arrPWM2.size(); i++){&#xA;        file12 &amp;lt;&amp;lt; arrPWM2.at(i) &amp;lt;&amp;lt; endl;&#xA;    }&#xA;&#xA;    for (i=0 ; i &amp;lt; arrPWM3.size(); i++){&#xA;        file13 &amp;lt;&amp;lt; arrPWM3.at(i) &amp;lt;&amp;lt; endl;&#xA;    }&#xA;&#xA;    for (i=0 ; i &amp;lt; arrPWM4.size(); i++){&#xA;        file14 &amp;lt;&amp;lt; arrPWM4.at(i) &amp;lt;&amp;lt; endl;&#xA;    }&#xA;&#xA;    for (i=0 ; i &amp;lt; arrPerr.size(); i++){&#xA;        file15 &amp;lt;&amp;lt; arrPerr.at(i) &amp;lt;&amp;lt; endl;&#xA;    }&#xA;&#xA;    for (i=0 ; i &amp;lt; arrDerr.size(); i++){&#xA;        file16 &amp;lt;&amp;lt; arrDerr.at(i) &amp;lt;&amp;lt; endl;&#xA;    }&#xA;&#xA;&#xA;        file2.close();&#xA;        file3.close();&#xA;        file4.close();&#xA;        file5.close();&#xA;        file6.close();&#xA;        file7.close();&#xA;        file8.close();&#xA;        file9.close();&#xA;        file10.close();&#xA;        file11.close();&#xA;        file12.close();&#xA;        file13.close();&#xA;        file14.close();&#xA;        file15.close();&#xA;        file16.close();&#xA;        cout &amp;lt;&amp;lt; &quot; Time Elapsed = &quot; &amp;lt;&amp;lt; stopTime &amp;lt;&amp;lt; endl;&#xA;        break;&#xA;    }&#xA;&#xA;    while((((float)getTickCount()-deltaTimeInit)/(((float)getTickFrequency())))&amp;lt;=0.00419){ //0.00209715|0.00419&#xA;       cout &amp;lt;&amp;lt; &quot; DT end = &quot; &amp;lt;&amp;lt; deltaTime2 &amp;lt;&amp;lt; endl;&#xA;       deltaTime2=((float)getTickCount()-deltaTimeInit)/(((float)getTickFrequency()));&#xA;    }&#xA;&#xA;    cout &amp;lt;&amp;lt; &quot; DT end = &quot; &amp;lt;&amp;lt; deltaTime2 &amp;lt;&amp;lt; endl;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Here's my data:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/H9O7s.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/H9O7s.jpg&quot; alt=&quot;Derivative on Error without D gain&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/flipn.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/flipn.jpg&quot; alt=&quot;Derivative on Error with D gain&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/B8x2r.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/B8x2r.jpg&quot; alt=&quot;Derivative on Measurement with D gain&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11311" LastEditorUserId="11311" LastEditDate="2016-01-26T15:59:59.907" LastActivityDate="2016-01-26T16:07:52.153" Title="Quadcopter PID Controller: Derivative on Measurement / Removing the Derivative Kick" Tags="&lt;control&gt;&lt;quadcopter&gt;&lt;pid&gt;&lt;raspberry-pi&gt;&lt;stability&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="8999" PostTypeId="2" ParentId="8998" CreationDate="2016-01-26T15:19:44.613" Score="2" Body="&lt;p&gt;All PID controllers act on an &lt;em&gt;error&lt;/em&gt; signal, so you definitely should stick with your first implementation. The derivative term in the PID controller wants to &quot;see&quot; how the error is changing - if the error is getting bigger, then the derivative term gets larger and &quot;kicks in&quot; a higher contribution. If the error is getting smaller, then the derivative term backs off. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your problem description is vague; something about &quot;pushing&quot; the quadcopter and damping and feeling something. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Engineers don't have feelings, they have data. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the moment, with no data, all I can tell you is to reuse your first implementation and double check how you are acquiring your &lt;code&gt;deltaTime2&lt;/code&gt; information. Typically, in industrial controls, the derivative term is left off of the controller and only a PI controller is implemented. This is because any bit of temporal sampling problems (not taking the sample on time or mis-judging the sampling rate) can cause &lt;em&gt;huge&lt;/em&gt; problems with the derivative term.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Imagine your sampling rate is supposed to be 0.005 seconds (200Hz). If instead of that sampling rate, you mis-judged the sample rate to be 0.006 seconds for &lt;em&gt;one sample&lt;/em&gt;, then the following happens:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;No change to proportional error because it doesn't interact with the sampling rate. &lt;/li&gt;&#xA;&lt;li&gt;Integral error multiplies proportional error by this sampling rate &lt;em&gt;and then adds it to all of the previous integral error samples&lt;/em&gt;, so overall it's a pretty small impact. &lt;/li&gt;&#xA;&lt;li&gt;Derivative error &lt;em&gt;divides&lt;/em&gt; proportional error by this sampling rate &lt;em&gt;with no other means of context&lt;/em&gt;. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;So, conceivably, you could have something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;prevIntError = 1.8;&#xA;prevDerError = 1.1&#xA;PropError = 1;&#xA;IntError = prevIntError + 1*0.006;&#xA;derError = (1 - 1.1)/0.006;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So where the integral error is now 1.806 instead of 1.805 (an error of 0.05%), your derivative error is -16.6 instead of what it should be, (1 - 1.1)/0.005, which is -20. That means that error in the proportional error signal is 0, the error in the integral error signal is 0.05%, and the error in the derivative error signal is 17%! &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As your sampling rate increases, your sampling period goes down. Errors in timing can begin to become significant after a point. For example, at 10Hz, you are sampling every 0.1s. If your timing accuracy is +/- 0.001s, then this means that your time sampling error is +/- 1%. If you push to 200Hz (0.005s), and your timing accuracy is still +/- 0.001s, then suddenly your time sampling error is +/- 20%! &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, in summary:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Post data, not feelings. &lt;/li&gt;&#xA;&lt;li&gt;Revert to your first implementation.&lt;/li&gt;&#xA;&lt;li&gt;Check how you acquire &lt;code&gt;deltaTime2&lt;/code&gt; and report back. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Please update your question to include the answers to 1 and 3 (don't post it as a comment to this answer please). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;:EDIT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would move your timestamp evaluation to one location in your code, and I would put that location immediately before you use it. At the moment, you don't update the sampling time until &lt;em&gt;after&lt;/em&gt; you've done your derivative/integral calculations. This is even more problematic given the fact that you are performing communications in the same sampling window. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Say your first sweep, you read some data, do your calculations, and that sample time is 5ms. Then, on the second sweep, something happens to the communications (no data, data error, IMU reset, etc.). The time it takes to get back to the derivative/integral calculations &lt;em&gt;won't&lt;/em&gt; be 5ms, it'll be 1ms or 10ms or something similar. So you use the wrong sample time for that sample, but then your sample time gets updated &lt;em&gt;after the fact&lt;/em&gt; to reflect that sweep took the 10ms or whatever, then that gets used on the following sample, which again may not be correct. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would revise your code to the following:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/* Initialize I2c */  &#xA;/* Open Files for data logging */ &#xA;deltaTimeInit=(float)getTickCount(); //&amp;lt;--- Placeholder value for first pass&#xA;while(1){&#xA;    /* Get IMU data */&#xA;    deltaTime2=((float)getTickCount()-deltaTimeInit)/(((float)getTickFrequency())); //&amp;lt;--- Get the time that elapsed to NOW&#xA;    deltaTimeInit=(float)getTickCount(); //&amp;lt;--- Start the timer for the next loop&#xA;    /* Filter using Complementary Filter */&#xA;    /* Compute Errors for PID */ //&amp;lt;--- Use the actual time elapsed for the calculations&#xA;    /* Update PWM's */&#xA;&#xA;  /* (more stuff) */&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Basically, you care about the time that has elapsed from when you get data to the next time that you get data, and you want to act on current information. Your sample time should be calculated before you use it, on the current sweep. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2016-01-26T16:07:52.153" LastActivityDate="2016-01-26T16:07:52.153" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9000" PostTypeId="2" ParentId="8990" CreationDate="2016-01-26T16:25:45.630" Score="0" Body="&lt;p&gt;What is Y? What is X? What is maximo? What are the digitalWrite commands supposed to be doing? Did you notice they are the same for both turns?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Possible problems:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Your &lt;code&gt;map&lt;/code&gt; command is changing motorA and motorB from a range of 126-0 to a range of 450-maximo. (or from 130-255 to 450-maximo). &lt;/li&gt;&#xA;&lt;li&gt;You set motorA and motorB to Y, and you only call these turns if Y is greater than 130. &lt;/li&gt;&#xA;&lt;li&gt;Combine #2 with #1 above, and the output of the function looks like it will set motorA and motorB to some value higher than 450. This is problematic because &lt;a href=&quot;https://www.arduino.cc/en/Reference/AnalogWrite&quot; rel=&quot;nofollow&quot;&gt;analogWrite only goes from 0-255&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;You try to modulate the motorA and motorB values with some +/- Steer, but again not knowing what X, Y, or maximo is it's not clear what Steer is, but that doesn't matter because motorA and motorB are way over the limit for what you should be feeding to analogWrite. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Coul you revise your question to include a brief summary of what you think your code is doing? Please also include how it's called - i.e., what the inputs are (X,Y,maximo, and every other variable that's not defined in the code you explicitly post). &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-01-26T16:25:45.630" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9001" PostTypeId="1" AcceptedAnswerId="9006" CreationDate="2016-01-26T17:56:10.027" Score="19" ViewCount="6335" Body="&lt;p&gt;I am using &lt;strong&gt;2 identical&lt;/strong&gt; DC motors and a castor wheel. The motors are connected to &lt;strong&gt;L293D motor driver&lt;/strong&gt; and are controlled by &lt;strong&gt;RPi&lt;/strong&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The robot is not going straight. It veers off to the right. I am running both the motors at &lt;strong&gt;100% PWM&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I tried to correct the error:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;I adjusted the PWM of the wheel going faster to &lt;strong&gt;99%&lt;/strong&gt;, but the robot just turns to the other side; &lt;/li&gt;&#xA;&lt;li&gt;I adjusted the weight on the robot and the problem still persists.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I once tried to run the motor without any load. Is that the cause of this, as I was later told that, running a DC motor without any load damages them?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If that is not the cause, then please tell me how to solve this problem without using any &lt;strong&gt;sensors&lt;/strong&gt; for controlling it. &lt;/p&gt;&#xA;" OwnerUserId="11698" LastEditorUserId="9176" LastEditDate="2016-02-10T14:31:18.247" LastActivityDate="2017-03-07T18:01:21.683" Title="Robot never goes straight" Tags="&lt;control&gt;&lt;motor&gt;&lt;wheeled-robot&gt;&lt;raspberry-pi&gt;" AnswerCount="6" CommentCount="7" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="9002" PostTypeId="2" ParentId="9001" CreationDate="2016-01-26T18:26:49.073" Score="0" Body="&lt;p&gt;Well, if the problem does not lie in differences in hardware nor software for each wheel, then it is probably a problem with natural imperfections in either the way you built the robot or the way the motors were produced. The connections might not be solid or the RPI might not be outputting the same current. You probably want to be using speed controllers. Try that first. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If that doesn't work, your manufacturer probably didn't make identical motors and you'll probably just have to calibrate the motors. It might mean scaling the value of the stronger motor so 100% power to the strong motor matches the weak one. &lt;/p&gt;&#xA;" OwnerUserId="11695" LastActivityDate="2016-01-26T18:26:49.073" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9003" PostTypeId="5" CreationDate="2016-01-26T18:59:30.977" Score="0" Body="&lt;p&gt;&lt;em&gt;FIRST&lt;/em&gt; is a series a robotics programs for elementary, middle, and high school students to learn STEM skills in engineering, teamwork, business, and programming.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;em&gt;FIRST&lt;/em&gt; programs are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;em&gt;FIRST&lt;/em&gt; Lego League Jr. (FLL Jr.)&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;FIRST&lt;/em&gt; Lego League (FLL)&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;FIRST&lt;/em&gt; Tech Challenge (FTC)&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;FIRST&lt;/em&gt; Robotics Competition (FRC)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Question could include:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Questions about programming using WPILib in Java, C++, and LabVIEW, as well as third party languages like Python&lt;/li&gt;&#xA;&lt;li&gt;Questions about the control system (NI roboRIO, NI cRIO, Cross The Road Electronics Power Distribution Panel, Pneumatics Control Module, Voltage Regulator Module, robot radio, motor controllers, Android FTC controller etc.)&lt;/li&gt;&#xA;&lt;li&gt;Questions about building the robot&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="11264" LastEditorUserId="11264" LastEditDate="2017-02-27T12:42:13.267" LastActivityDate="2017-02-27T12:42:13.267" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9004" PostTypeId="4" CreationDate="2016-01-26T18:59:30.977" Score="0" Body="Questions relating to FIRST programs." OwnerUserId="11264" LastEditorUserId="11264" LastEditDate="2016-01-27T14:04:38.273" LastActivityDate="2016-01-27T14:04:38.273" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9005" PostTypeId="2" ParentId="8992" CreationDate="2016-01-26T19:24:06.327" Score="0" Body="&lt;p&gt;Besides the answers posted above, you can use Matlab to acquire &lt;strong&gt;H&lt;/strong&gt;. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;syms my mx x y r p a&#xA;r = sqrt( (my-y)^2 + (mx-x)^2 ); % range equation (r)&#xA;p = atan( (my-y)/(mx-x) ) - a;   % bearing equation (\phi)&#xA; input = [x y a];&#xA;output = [r p];&#xA;H = jacobian(output, input)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The result is &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;H =&#xA;[ -(2*mx - 2*x)/(2*((mx - x)^2 + (my - y)^2)^(1/2)), -(2*my - 2*y)/(2*((mx - x)^2 + (my - y)^2)^(1/2)),  0]&#xA;[ (my - y)/((mx - x)^2*((my - y)^2/(mx - x)^2 + 1)),         -1/((mx - x)*((my - y)^2/(mx - x)^2 + 1)), -1]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="2155" LastEditDate="2016-01-26T19:31:29.527" LastActivityDate="2016-01-26T19:31:29.527" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9006" PostTypeId="2" ParentId="9001" CreationDate="2016-01-26T20:14:50.730" Score="30" Body="&lt;p&gt;I'm posting this as an answer because it is &lt;em&gt;the&lt;/em&gt; answer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can't. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As @BendingUnit22 mentions, you are attempting &quot;open loop&quot; control. Noise and variations will mean that your robot will &lt;strong&gt;never&lt;/strong&gt; drive a perfectly straight line. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The motors could have different winding resistances (different drive currents/torque), the wheels could be different sizes, the wheels could have different traction characteristics, the caster bearing could be &quot;stiff&quot;, the caster might not be perfectly straight when the vehicle starts, the floor might have varying surface friction characteristics (read: dust or carpet) - the list goes on and on. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;em&gt;only&lt;/em&gt; way to account for the things outside your control (what I mention above + more) is to use feedback sensors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can try to get &lt;em&gt;better&lt;/em&gt; open-loop performance by correcting the problems I listed, but there are even more and you simply can't control everything. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-01-26T20:14:50.730" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="9008" PostTypeId="2" ParentId="9001" CreationDate="2016-01-26T22:12:41.177" Score="6" Body="&lt;p&gt;Since the open-closed loop issue is already mentioned, I will give a comment to the &quot;I once tried to run a dc-motor without a load&quot;. &lt;br&gt;&#xA;Yes you might damage your motor with this but you can also damage or destroy your motor with a load. The destruction is coming from the current and the resulting temperature. If there is no smoke and some obvious smell coming from the motor it is most likely not damaged. From my experience I can tell that hobby-scale dc-motors will start to degrade at temperatures way over 100°C. And you will definetly notice such temperatures &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt;&#xA;&lt;br&gt;&#xA;I did think about this again and I might got an idea which your collegue might have been talking about. There are a special kind of AC-Motor. These are non-excited synchronous motors. Basically they are build for self destruction. If you power them up, they will start accelerating until they disassemble themselves. But if you place a heavy load on them, they can't reach this state, just because of the huge moment they have to apply to the load. So you can use them for reasonable purposes. Anyway you definetly do not of a motor like this in your application.&lt;/p&gt;&#xA;" OwnerUserId="6911" LastEditorUserId="6911" LastEditDate="2016-01-27T10:22:05.903" LastActivityDate="2016-01-27T10:22:05.903" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9009" PostTypeId="1" CreationDate="2016-01-27T03:28:21.497" Score="5" ViewCount="215" Body="&lt;p&gt;I am controlling a robot via usb from an Android phone running the robot's code. This phone has a poor battery and I need to extend its life with a USB charger (can't change phones). How can I charge an android phone via usb, while maintaining a USB connection to the robot? I can solder wires together if needed, or can buy adapters as needed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/b7y5cE6.png&quot; alt=&quot;an image of a robot, phone, and battery all connected by USB. The phone is charged by the battery while still controlling the robot by USB&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="11709" LastActivityDate="2016-01-28T03:06:46.760" Title="How to connect Phone to Robot while charging phone from external battery?" Tags="&lt;mobile-robot&gt;&lt;usb&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9010" PostTypeId="1" CreationDate="2016-01-27T06:14:01.097" Score="1" ViewCount="24" Body="&lt;p&gt;I have a computer-vision application I made to localize a robot in a room; the software has been in use for a while and is working fine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I calibrated the camera and got the intrinsics and lens distortion coefficients there was a lens protector on the lens, mounted on the robot's lid.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I take off the robot's lid (and thus the lens protector) the localization solution becomes erratic and inaccurate, so I think the lens protector might be changing the distortion properties significantly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Today the lens protector became detached and it was replaced shortly after. So now the calibration may no longer be valid and the localization solution is much more noisy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Can a lens protector can greatly effect the distortion properties of the image, or can someone offer another explanation?&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I intend to recalibrate and super-glue the lens protector down to the robot's lid, but I am curious if this is my problem, and if anyone else has encountered this with lens protectors.&lt;/p&gt;&#xA;" OwnerUserId="8859" LastActivityDate="2016-01-27T06:14:01.097" Title="Is the distortion introduced by a lens protector significant in practice?" Tags="&lt;computer-vision&gt;&lt;cameras&gt;&lt;calibration&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9011" PostTypeId="2" ParentId="8940" CreationDate="2016-01-27T06:59:58.260" Score="4" Body="&lt;p&gt;The Jacobian in that equation is from the joint velocity to the &quot;spatial velocity&quot; of the end effector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The spatial velocity of an object is a somewhat unintuitive concept: it is the velocity of a frame rigidly attached to the end effector &lt;em&gt;but currently coincident with the origin frame&lt;/em&gt;. It may help to think of the rigid body as extending to cover the whole space, and you're measuring the velocity by standing at the origin and looking at what is happening to the end effector where you are, instead of at the end of the arm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the example given, the origin is at the same location as the first joint. This means that rotating the joint will sweep the end effector in a circle, but that the frame at the origin will only pivot around the vertical axis; this is encoded by the first column of the Jacobian being [0 0 0 0 0 1]'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Rotating joints two and three will pull the origin-overlapping frame away from the origin, and hence have translational components.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To see how this works in action, note that the Jacobian that you asked about from MLS can be simplified to&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$J_{st,SCARA}^{s} =  \begin{bmatrix}&#xA;0 &amp;amp; \phantom{-}y_{2} &amp;amp; \phantom{-}y_{3} &amp;amp; 0\\&#xA;0 &amp;amp; -x_{2} &amp;amp; - x_{3} &amp;amp; 0 \\&#xA;0 &amp;amp;0&amp;amp;0&amp;amp;1 \\&#xA;0&amp;amp; 0&amp;amp; 0&amp;amp;0\\&#xA;0&amp;amp; 0&amp;amp; 0&amp;amp;0\\&#xA;1&amp;amp;1&amp;amp;1 &amp;amp;0&#xA;\end{bmatrix},&#xA;$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;in which the first three columns encode the velocity at the origin of an object rotating around the corresponding axis and the fourth column gives the velocity at the origin of an object sliding up the fourth axis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can convert the spatial-velocity Jacobian into a world-frame Jacobian by incorporating the Jacobian from base-frame motion to motion at the end effector's current position and orientation. For the SCARA arm, this works out fairly cleanly, with the only difference between the two frame velocities being the &quot;cross product&quot; term that accounts for the extra motion of the end effector sweeping around the base,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$&#xA;J^{w}_{st, SCARA} = \begin{bmatrix} &#xA;%&#xA;\begin{pmatrix} 1 &amp;amp;&amp;amp;\\ &amp;amp;1&amp;amp;\\ &amp;amp;&amp;amp; 1 \end{pmatrix}&#xA;%&#xA;&amp;amp; &#xA;%&#xA;\begin{pmatrix} 0 &amp;amp; &amp;amp; -y_{4}\\ &amp;amp; 0 &amp;amp; \phantom{-}x_{4} \\ &amp;amp; &amp;amp; \phantom{-}0 &#xA;\end{pmatrix} \\ \begin{pmatrix} 0&amp;amp;&amp;amp; \\ &amp;amp;0&amp;amp;\\ &amp;amp;&amp;amp;0 \end{pmatrix} &amp;amp; \begin{pmatrix} 1 &amp;amp;  &amp;amp;  \\  &amp;amp; 1 &amp;amp;  \\ &amp;amp;&amp;amp; 1 \end{pmatrix} \end{bmatrix} J^{s}_{st,\text{SCARA}}.&#xA;$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This product evaluates to&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$&#xA;J_{st,SCARA}^{w} =  \begin{bmatrix}&#xA;-y_{4} &amp;amp; -(y_{4}-y_{2}) &amp;amp; -(y_{4}-y_{3}) &amp;amp; 0\\&#xA;\phantom{-}x_{4} &amp;amp; \phantom{-}x_{4}-x_{2} &amp;amp; \phantom{-}x_{4}- x_{3} &amp;amp; 0 \\&#xA;0 &amp;amp;0&amp;amp;0&amp;amp;1 \\&#xA;0&amp;amp; 0&amp;amp; 0&amp;amp;0\\&#xA;0&amp;amp; 0&amp;amp; 0&amp;amp;0\\&#xA;1&amp;amp;1&amp;amp;1 &amp;amp;0&#xA;\end{bmatrix},&#xA;$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;which matches what we would expect to see: Each of the rotary joints contributes to the end effector velocity by the cross product between its rotational velocity and the vector from the joint to the end effector (note that $x_{4}-x_{3}$ and $y_{4}-y_{3}$ are both zero).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;===&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the general case, where the rotations are not only around the $z$ axis, you would want to use the full form of the matrix mapping between the spatial to world Jacobians,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$&#xA;J_{w} = \begin{bmatrix} &#xA;%&#xA;\begin{pmatrix} 1 &amp;amp;&amp;amp;\\ &amp;amp;1&amp;amp;\\ &amp;amp;&amp;amp; 1 \end{pmatrix}&#xA;%&#xA;&amp;amp; &#xA;%&#xA;\begin{pmatrix} \phantom{-}0 &amp;amp; \phantom{-}z &amp;amp; -y\\ -z&amp;amp; \phantom{-}0  &amp;amp; \phantom{-}x \\ \phantom{-}y&amp;amp; -x &amp;amp; \phantom{-}0 &#xA;\end{pmatrix} \\ \begin{pmatrix} 0&amp;amp;&amp;amp; \\ &amp;amp;0&amp;amp;\\ &amp;amp;&amp;amp;0 \end{pmatrix} &amp;amp; \begin{pmatrix} 1 &amp;amp;  &amp;amp;  \\  &amp;amp; 1 &amp;amp;  \\ &amp;amp;&amp;amp; 1 \end{pmatrix} \end{bmatrix} J^{s},&#xA;$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;which encodes the cross product terms for all three rotation axes when the end effector is at $(x,y,z)$ relative to the base frame.&lt;/p&gt;&#xA;" OwnerUserId="11712" LastEditorUserId="11712" LastEditDate="2016-01-29T23:34:29.933" LastActivityDate="2016-01-29T23:34:29.933" CommentCount="16" ContentLicense="CC BY-SA 3.0" />
  <row Id="9012" PostTypeId="2" ParentId="7137" CreationDate="2016-01-27T10:27:51.520" Score="0" Body="&lt;p&gt;I personally found very useful the procedure described at the following &lt;a href=&quot;http://philstech.blogspot.ch/2015/06/complimentary-filter-example-quaternion.html&quot; rel=&quot;nofollow&quot;&gt;link&lt;/a&gt;, in order to have a total 3D estimation, without suffering any gimbal lock or other problems.&lt;/p&gt;&#xA;" OwnerUserId="10782" LastActivityDate="2016-01-27T10:27:51.520" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9013" PostTypeId="1" CreationDate="2016-01-27T14:12:52.717" Score="2" ViewCount="1204" Body="&lt;p&gt;I understand that to be able to define point in 3D space, you need three degrees of freedom (DOFs). To additionally define an orientation in 3D space, you need 6 DOFs. This is intuitive to me when each of these DOFs defines the position or orientation along one axis or an orthogonal X-Y-Z system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, consider a robot arm such as this: &lt;a href=&quot;http://www.robotnik.eu/robotics-arms/kinova-mico-arm/&quot; rel=&quot;nofollow&quot;&gt;http://www.robotnik.eu/robotics-arms/kinova-mico-arm/&lt;/a&gt;. This too has 6 DOFs, but rather than each DOF defining a position or orientation in an X-Y-Z system, it defines an angular rotation of one joint along the arm. If all the joints were arranged along a single axis, for example, then these 6 DOFs would in fact only define one angular rotation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, it is not true that each DOF independently defines a single position or orientation. However, in the case of this robot arm, it can reach most positions and orientations. I'm assuming this is because the geometry of the links between the joints make each DOF define an independent position or orientation, but that is a very vague concept to me and not as intuitive as simply having one DOF per position or orientation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can somebody offer some help in understanding these concepts?&lt;/p&gt;&#xA;" OwnerUserId="8880" LastActivityDate="2016-01-31T06:02:43.067" Title="How many DOFs required to define a 3D pose" Tags="&lt;kinematics&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9014" PostTypeId="2" ParentId="9013" CreationDate="2016-01-27T14:37:44.620" Score="4" Body="&lt;p&gt;A 6-DOF robotic arm may not always be able to manipulate an object in all the directions and orientations in 3-D space from a particular position and orientation. Such a pose(position + orientation) is called as a singular position of the robotic arm. Mathematically, the robotic arm attains a singularity when the determinant of its Jacobian goes to zero. For eg., consider your arm itself which is a 7-DOF mechanism. When the human arm is fully stretched, the arm can no more move in certain directions in 3D space, an obvious one being in the direction along the arm. Such a position is called as singular position. A much simpler case is to imagine a planar robotic arm with 2-DOF with both being revolute joints. When this is completely stretched, it can only manipulate objects along a circle. All the points on the circle are points of singularity. If the arm moves slightly inside the circle, then it regains its ability to move along all the direction. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you say, it is not true that each joint of the robotic arm contributes to one of the 6DOFs in space. All the joint motions contribute together in manipulating the object in 3D space. These concepts are covered in any introductory book on robotics. To get an in-depth mathematical understanding, you may go through the topics on forward kinematics and inverse kinematics. Getting a mathematical understanding will certainly improve your intuition and further the imagination of the motion of such robotic arms. &lt;/p&gt;&#xA;" OwnerUserId="11721" LastEditorUserId="11721" LastEditDate="2016-01-28T09:33:36.383" LastActivityDate="2016-01-28T09:33:36.383" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9015" PostTypeId="2" ParentId="9013" CreationDate="2016-01-27T14:42:57.323" Score="2" Body="&lt;p&gt;The explanation here is similar to the Cartesian vs Polar coordinate system. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think that, for most people, the Cartesian coordinate system is the most intuitive. You move linearly some distance, then linearly some other distance, etc. The ending X/Y coordinates are related &lt;em&gt;linearly&lt;/em&gt; to the distances you traveled initially. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In Polar coordinates, you turn some angle $\theta$, and then &quot;walk&quot; out some distance $r$ from the origin. In the end, the X/Y coordinates are not linear; the ending positions is given by $(r\cos{\theta},r\sin{\theta})$. You still have two degrees of freedom, but it's harder to &lt;em&gt;inituitively&lt;/em&gt; know where the ending position is without practice, &lt;strong&gt;and&lt;/strong&gt; each degree of freedom - $r$ and $\theta$ - can move &lt;em&gt;both&lt;/em&gt; the x- and y-coordinate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similarly, you could have a robot with three linear actuators to navigate an end effector to an X/Y/Z spot in space. This is intuitive - the ending position is the distance traveled on each axis. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A robot like the one you mention is like polar coordinates for 3D space - this is referred to as a &quot;spherical&quot; coordinate system. In spherical coordinates you have two angles and a distance. Imagine pointing at the sun - you point SE or SW (azimuth angle) to the sun's &lt;em&gt;projection&lt;/em&gt; on the horizon, then you point &quot;up&quot; (elevation angle) to where the sun's height is in the sky, then the sun is some distance $r$ away from you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The robot you link doesn't have a means to telescope its arm, so instead of a true spherical coordinate system ($\theta,\phi,r$), you wind up with a purely angular coordinate system. &lt;em&gt;Link distances still exist though&lt;/em&gt;, so it is possible to reach most coordinates within a sphere of radius $r_{\mbox{sphere}} = r_1 + r_2$, where $r_N$ is the length of each arm segment. It is most coordinates and not all coordinates because, if the arms are not the same length, then it cannot reach an interior sphere of radius $r_{\mbox{interior}} = \mbox{abs}(r_1 - r_2)$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You are correct in that, if two axes are aligned, then one degree of freedom becomes essentially redundant and you get into a condition referred to as &lt;a href=&quot;https://en.wikipedia.org/wiki/Gimbal_lock&quot; rel=&quot;nofollow&quot;&gt;gimbal lock&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For an example, consider only two rotational degrees of freedom for a moment. Each has an arm of length $r_N$. Motion in the plane &lt;em&gt;for the end effector&lt;/em&gt; is the &lt;em&gt;sum&lt;/em&gt; of the motions of each arm link because the two arms are connected (read about &lt;a href=&quot;http://mathworld.wolfram.com/VectorAddition.html&quot; rel=&quot;nofollow&quot;&gt;vector addition&lt;/a&gt; for more information). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, the first actuator moves some rotation $\theta_1$. This moves the end of the first arm link to a position of $(r_1 \cos{\theta_1}, r_1 \sin{\theta_1})$. The second actuator is located at the end of the first arm link. It rotates some other angle $\theta_2$, putting the end of the second link at a position of $((r_2 \cos{\theta_2}, r_2 \sin{\theta_2})$ RELATIVE TO the end of the first link. This means that the end effector is actually at:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;x = r_1 \cos{\theta_1} + r_2 \cos{\theta_2} \\&#xA;y = r_1 \sin{\theta_1} + r_2 \sin{\theta_2} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this way, you can vary $\theta_1$ and $\theta_2$ to add or subtract portions of $r_1$ and $r_2$ to achieve the desired $&amp;lt;x,y&amp;gt;$ positions. The third actuator sweeps that position around the y-axis to achieve the desired location in 3D space.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-01-27T14:42:57.323" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9016" PostTypeId="2" ParentId="9001" CreationDate="2016-01-27T15:37:24.187" Score="2" Body="&lt;p&gt;What you are describing is called open loop control, and to do this you need two motors which are exactly the same, two wheels exactly the same, the robot center of gravity to be in the center between the wheels, a perfect symmetrical electrical circuit, and finally a perfect uniform level surface to run on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To accomplish this you typically order tens or hundreds of each part, and then perform significant testing to find two motors that are the closest match to each other in terms of power and speed vs voltage and PWM. Do the same for the wheels, the motor controllers and other parts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This process is called binning - after these tests you sort them according to their capability or characteristics.  It's considered much more expensive in both time and resources to do properly than changing to a closed loop model, and doesn't even account for poor ground conditions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is, however, one way to achieve your requirements without additional sensors.&lt;/p&gt;&#xA;" OwnerUserId="356" LastActivityDate="2016-01-27T15:37:24.187" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9018" PostTypeId="2" ParentId="9001" CreationDate="2016-01-27T16:13:18.730" Score="1" Body="&lt;p&gt;Though it will never be perfect, there may be a simple way to get it to go more straight.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If at 100%-100% the car always turns left, and at 100%-99% the car always turns right, you should be able to improve on that by trying values in between.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Start with 100%-99.5% and continue with 100%-99.75% or 100%-99.25% depending on the outcome. This should soon converge to a situation where you will go straight 'on average'.&lt;/p&gt;&#xA;" OwnerUserId="11724" LastActivityDate="2016-01-27T16:13:18.730" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9019" PostTypeId="2" ParentId="7137" CreationDate="2016-01-27T19:24:43.807" Score="0" Body="&lt;p&gt;Inertial Navigation Systems (INSs) with 9DOF IMUs allow you to extract not only pitch and roll values but also yaw and &lt;strong&gt;most importantly&lt;/strong&gt; are able to do so under sustained turns, where Coriolis acceleration is not negligible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, you'll have to completely overhawl your algorithm, instead of building it up incrementally.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DCM, as you said, is a traditional method. Ardupilot was using it until recently so the code is still in the repo and its initial author has written some good background reports. Start &lt;a href=&quot;http://diydrones.com/profiles/blogs/dcm-imu-theory-first-draft?id=705844&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt; and follow the relative links and publications of the author.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another spinnoff of the Mahoney filter is the Madgwick filter which also works well and I have personally encoded it into arduino successfully, albeit for a plane. &lt;a href=&quot;http://www.x-io.co.uk/res/doc/madgwick_internal_report.pdf&quot; rel=&quot;nofollow&quot;&gt;Here&lt;/a&gt; is the relevant report. You'll find more resources online.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, Extended Kalman Filters are also making a comeback, thanks to cheaper, smaller more powerful computers. Ardupilot is using it lately as its main filter. However, EKF filters are usually tailor-made and I can't point to you to some ready-to-go code solution. I'm afraid you'll have to do a bit of searching. As a background read, &lt;a href=&quot;http://home.wlu.edu/~levys/kalman_tutorial/&quot; rel=&quot;nofollow&quot;&gt;this one&lt;/a&gt; seems fine.&lt;/p&gt;&#xA;" OwnerUserId="11500" LastActivityDate="2016-01-27T19:24:43.807" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9020" PostTypeId="1" CreationDate="2016-01-28T01:53:27.057" Score="2" ViewCount="464" Body="&lt;p&gt;The target is in the shape of a U where the horizontal segment is 20 inches, and the two vertical segments are 14 inches. We are using a camera to image the target, and then using vision processing to isolate the target from the rest of the image. We know the vertical field of view, and the horizontal field of view of the camera. The resolution of the camera is 640x480 pixels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The vertical distance between the camera on the robot and the target is constant but as of yet unknown because the robot hasn't been constructed yet. It is known, however, that the target will always have a higher elevation than the camera.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can we use this data to calculate in real time the robot's distance to the target, and the angle to the target?&lt;/p&gt;&#xA;" OwnerUserId="11729" LastActivityDate="2016-01-28T09:56:35.797" Title="How does one calculate distance and angle using a target with known measurements?" Tags="&lt;computer-vision&gt;&lt;real-time&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9021" PostTypeId="2" ParentId="9009" CreationDate="2016-01-28T03:06:46.760" Score="1" Body="&lt;p&gt;You just need a DC-DC converter. This will take care of stepping down the voltage from battery to USB power specs. You may buy the ICs online and solder them or look for a breakout boards for quick setup. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively, you can look for USB car chargers or LiPo BEC (Battery Elimination Circuit). &#xA;You can break open the Car USB charger (which has the cigar lighter mount), and solder the battery leads to those terminals (&lt;a href=&quot;https://www.youtube.com/watch?v=2IOs3g-52Zo&quot; rel=&quot;nofollow&quot;&gt;https://www.youtube.com/watch?v=2IOs3g-52Zo&lt;/a&gt; , Omit the variable voltage part. You can just use the USB power)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;LiPo BEC Option: &lt;a href=&quot;https://www.youtube.com/watch?v=Uj4bSOg27T0&quot; rel=&quot;nofollow&quot;&gt;https://www.youtube.com/watch?v=Uj4bSOg27T0&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11707" LastActivityDate="2016-01-28T03:06:46.760" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9022" PostTypeId="1" CreationDate="2016-01-28T08:24:38.240" Score="1" ViewCount="816" Body="&lt;p&gt;So I have multi-rotor with a basic PID controller, that keeps its axis stable through the gyroscope. However, the multi rotor, does not keep its height or position. So I would like to use an accelerometer for keeping its rough position (auto level). I want to use both the gyro and accelerometer, but how would the accelerometer values be used, is it implemented through the PID the same ways the gyro values are (degrees per second, which is the rate I used to calculate PID)? And then adjusting the esc through that?? I am confused at that part (the basic logic for using the accelerometer values) &lt;/p&gt;&#xA;" OwnerUserId="11731" LastEditorUserId="11731" LastEditDate="2016-01-29T23:34:16.370" LastActivityDate="2016-01-29T23:34:16.370" Title="The logic of implementing an Auto-level function in a PID flight controller" Tags="&lt;quadcopter&gt;&lt;pid&gt;&lt;imu&gt;&lt;accelerometer&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9023" PostTypeId="1" CreationDate="2016-01-28T09:51:13.070" Score="3" ViewCount="1276" Body="&lt;p&gt;I have bought an STM iNEMO evaluation board in order to monitor the inclination of a separate magnetic sensor array as it moves in a linear scan outside of a (non-magnetic) stainless steel pipe. I want to measure the inclination of the sensor along the scan and ensure that it does not change. The problem I have found is that the measured magnetic field from the integrated magnetometer varies greatly with position along the pipe, and in turn, causes a large, position dependent error in one axis of the inclination reported by the iNEMO IMU. In fig. 1 below I show the set up of the test, I measured the inclination from the IMU while moving it along the length of the pipe and back again. The board did not change inclination throughout the measurement. In Fig 2 I show the magnetometer and inclination measurements recorded by the &quot;iNEMO application&quot; showing the large error in one of the inclinations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is whether you know if there is any way of correcting for the magnetic field variation so that I can still accurately determine the inclination in all three directions? My data suggests to me that the magnetic field variation measured from the magnetometer is much greater than the geomagnetic field, so the inclination measurement will always be inaccurate. A follow up question I then have is: Is there a way to measure 3 axis orientation WITHOUT using a magnetometer?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/V3Z4I.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/V3Z4I.png&quot; alt=&quot;Fig. 1: Movement of IMU along length of pipe&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Ac1rF.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Ac1rF.png&quot; alt=&quot;iNemo magnetometer and inclination data when scanning from left to right of the pipe&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11732" LastActivityDate="2016-01-28T16:12:07.273" Title="Is there a way to measure 3 axis orientation without a magnetometer?" Tags="&lt;imu&gt;&lt;gyroscope&gt;&lt;magnetometer&gt;&lt;orientation&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9024" PostTypeId="2" ParentId="9020" CreationDate="2016-01-28T09:56:35.797" Score="1" Body="&lt;p&gt;I would suggest model based pose estimation. DeMenthon and Davies describes a method for finding the pose of an object using 25 lines of Code! &lt;/p&gt;&#xA;" OwnerUserId="11104" LastActivityDate="2016-01-28T09:56:35.797" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9025" PostTypeId="1" AcceptedAnswerId="9028" CreationDate="2016-01-28T10:34:46.153" Score="-2" ViewCount="84" Body="&lt;p&gt;Can someone please share the typical cost of material to 3D print an object like a raspberry pi case?  Thank you.&lt;/p&gt;&#xA;" OwnerUserId="11733" LastActivityDate="2016-01-28T14:24:39.003" Title="Cost of material to 3D print" Tags="&lt;3d-printing&gt;" AnswerCount="1" CommentCount="4" ClosedDate="2016-01-29T15:10:33.237" ContentLicense="CC BY-SA 3.0" />
  <row Id="9026" PostTypeId="2" ParentId="9023" CreationDate="2016-01-28T13:53:10.833" Score="-1" Body="&lt;p&gt;You can incorporate an Inertial Measurement Unit.  Often they are a combination of a 3-axis accelerometer and a 2- or 3-axis gyroscope.  Here is a link to a description of one family of such devices: &lt;a href=&quot;https://www.sparkfun.com/pages/accel_gyro_guide&quot; rel=&quot;nofollow&quot;&gt;https://www.sparkfun.com/pages/accel_gyro_guide&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2016-01-28T13:53:10.833" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9027" PostTypeId="1" CreationDate="2016-01-28T14:23:43.173" Score="3" ViewCount="284" Body="&lt;p&gt;My understanding of walking robots (e.g. &lt;a href=&quot;https://www.youtube.com/watch?v=xJlkBBdyBYI&quot; rel=&quot;nofollow&quot;&gt;https://www.youtube.com/watch?v=xJlkBBdyBYI&lt;/a&gt;) is that they use a gyroscope to determine the current orientation of the robot, or each joint of the robot. This is because if you just put encoders on each joint, the cumulative error over the entire robot will be too large to maintain stability. Therefore, a gyroscope measures the &quot;real&quot; orientation, and this is used for feedback when the robot is walking.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I'm also aware that some walking robots use accelerometers to maintain stability. What would be the benefit of using an accelerometer in this case? Would it be used instead of a gyroscope, or together with a gyroscope?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My guess is that gyroscopes do not measure acceleration directly (unless you were to numerically calculate this based on lots of orientation readings), but accelerometers do measure it directly (and more reliably than this numerical method). Know the acceleration as well as the position then enables to robot to more accurately predict its future position, and hence the feedback loop is more robust. Is this correct, or am I missing the point?&lt;/p&gt;&#xA;" OwnerUserId="8880" LastActivityDate="2016-02-03T06:16:46.003" Title="Do walking robots use accelerometers?" Tags="&lt;control&gt;&lt;sensors&gt;&lt;accelerometer&gt;&lt;dynamics&gt;&lt;walking-robot&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9028" PostTypeId="2" ParentId="9025" CreationDate="2016-01-28T14:24:39.003" Score="3" Body="&lt;p&gt;This depends on what you mean by &quot;cost&quot;. If you've got your own (or access to a) 3D printer and you're just paying for raw material then you can calculate the raw material cost per cubic distance (cubic inches, cubic centimeter, whatever your preferred units are), then determine the volume of the part to be printed, then multiply the two together. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typically the CAD software used to create the 3D model will have a button that gives you the volume of the part. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sometimes, as in selective laser sintering (SLS), the high temperatures involved degrade the &lt;em&gt;unused&lt;/em&gt; nylon powder. This means that some percentage of the powder needs to be exchanged after some number of builds, and you'll wind up paying a higher cost than strictly the cost per unit volume of the powder (to pay for the replacement of the unused powder). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you don't have access to the printer, then you'll wind up paying the same costs mentioned above, plus whatever their going rate is for time on the machine, time to setup the part, time to inspect/depowder/clean the part, shipping, and markup. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're interested in getting someone else to 3D print the part (and give you an instant quote), try a site like &lt;a href=&quot;http://www.shapeways.com/&quot; rel=&quot;nofollow&quot;&gt;Shapeways&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-01-28T14:24:39.003" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9029" PostTypeId="2" ParentId="9023" CreationDate="2016-01-28T16:12:07.273" Score="3" Body="&lt;p&gt;Calibration procedures for magnetometers exist, to compensate for soft iron (nearby ferromagnetic objects) and hard iron (nearby magnetic fields) offsets, which skew the measurements. However, these procedures usually map a static disturbance correction and apply it to all new measurements.&#xA;On the contrary, your environment changes from one end of the tube to the other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your magnetic sensor is allowed to move (relatively) slowly over the pipe under inspection, then you could use a 6-DOF IMU (Accelerometer + gyroscope) or even a 3-DOF accelerometer to find the orientation of the sensor &lt;strong&gt;but only in the pitch and roll axes&lt;/strong&gt;.&#xA;If the magnetic sensor is expected to be under sustained accelerations, then a 6-DOF IMU won't be adequate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are roll and pitch values adequate for your application?&lt;/p&gt;&#xA;" OwnerUserId="11500" LastActivityDate="2016-01-28T16:12:07.273" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="9030" PostTypeId="2" ParentId="8965" CreationDate="2016-01-28T17:52:11.153" Score="1" Body="&lt;p&gt;I could finally control the CC3D from the RPi. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem was a bad configuration from a RC input.&#xA;I also upgrade the CC3D firmware from the new Groung Control System software developed by LibrePilot, another community that wants to give support for the OpenPilot boards.&lt;/p&gt;&#xA;" OwnerUserId="11050" LastActivityDate="2016-01-28T17:52:11.153" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9031" PostTypeId="2" ParentId="9022" CreationDate="2016-01-28T21:03:38.013" Score="1" Body="&lt;p&gt;A gyro gives angular &lt;em&gt;velocity&lt;/em&gt; in degrees or radians per second. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;An accelerometer gives &lt;em&gt;acceleration&lt;/em&gt; in feet or meters per second &lt;em&gt;squared&lt;/em&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The key to keeping a reference &lt;em&gt;position&lt;/em&gt; is getting from an &lt;em&gt;acceleration&lt;/em&gt; to a &lt;em&gt;position&lt;/em&gt;. This is done with by &lt;em&gt;integrating&lt;/em&gt; the acceleration twice. The &lt;a href=&quot;https://en.wikipedia.org/wiki/Velocity#Relationship_to_acceleration&quot; rel=&quot;nofollow&quot;&gt;first integration&lt;/a&gt; gets from acceleration to velocity, then the &lt;a href=&quot;https://en.wikipedia.org/wiki/Displacement_(vector)#Derivatives&quot; rel=&quot;nofollow&quot;&gt;second integration&lt;/a&gt; gets from velocity to distance. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, if you were interested in implementing these integrations on a digital device, then you would use &lt;a href=&quot;https://en.wikipedia.org/wiki/Numerical_integration&quot; rel=&quot;nofollow&quot;&gt;numerical integration&lt;/a&gt; in a manner as follows:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;velocity = 0; % Set initial velocity&#xA;position = 0; % Set initial position&#xA;startTime = &amp;lt;get timer data&amp;gt;; &#xA;&amp;lt;main loop&amp;gt;&#xA;    endTime = &amp;lt;get timer data&amp;gt;;&#xA;    sampleTime = endTime - startTime;&#xA;    startTime = endTime;&#xA;&#xA;    acceleration = &amp;lt;get accelerometer data&amp;gt;;&#xA;    velocity = velocity + acceleration*sampleTime;&#xA;    position = position + velocity*sampleTime;&#xA;&#xA;    positionProportionalError = positionReference - position;&#xA;&amp;lt;loop&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Once you have the positionProportionalError, you can integrate/derive the other two errors for PID and use that for your PID control.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-01-28T21:03:38.013" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9032" PostTypeId="2" ParentId="9027" CreationDate="2016-01-28T21:27:32.440" Score="1" Body="&lt;p&gt;You need both:  gyroscopes react quickly to fast changes in orientation, but lose accuracy in the long run.  Accelerometers are better in the long run, but are too sensitive to short term.  Combining them both using a &quot;complimentary filter&quot; gives a much better result than using only one or the other.&lt;/p&gt;&#xA;" OwnerUserId="2295" LastActivityDate="2016-01-28T21:27:32.440" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9033" PostTypeId="1" AcceptedAnswerId="9050" CreationDate="2016-01-29T01:49:47.067" Score="1" ViewCount="737" Body="&lt;p&gt;Hello I'm trying to figure out how modular arm joints are designed and what kind of bearings/shafts are used for a modular-type robotic arm. Take &quot;UR arm&quot; for example. I believe those 'T-shaped pipes' include both a drive and bearing system. And as you can see from second image, it can be detached easily. So I think it's not just a simple &quot;motor shaft connecting to the member that we want to rotate&quot; mechanism. I'm wondering which type of mechanism and bearing system is inside of those T-shaped pipes. How can i transfer rotational motion to a member without using shafts? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/aJTMs.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/aJTMs.png&quot; alt=&quot;UR3 Robotic Arm&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/LiRoD.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/LiRoD.jpg&quot; alt=&quot;UR10 Robotic Arm Joint&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11744" LastEditorUserId="110" LastEditDate="2016-01-29T01:57:58.307" LastActivityDate="2016-01-31T05:34:54.437" Title="How modular arm joints work" Tags="&lt;mechanism&gt;&lt;joint&gt;&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="5" ClosedDate="2016-02-01T02:31:23.510" ContentLicense="CC BY-SA 3.0" />
  <row Id="9034" PostTypeId="1" CreationDate="2016-01-29T04:47:07.437" Score="7" ViewCount="4563" Body="&lt;p&gt;I am looking at &lt;a href=&quot;https://www.sparkfun.com/pages/accel_gyro_guide&quot;&gt;this page&lt;/a&gt; that describes various characteristics of gyroscopes and accelerometers. Close to the end (where they speak about IMUs), the names of the items have something like this:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;9 degrees of freedom&lt;/li&gt;&#xA;&lt;li&gt;6 degrees of freedom&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Can anyone explain what does this mean?&lt;/p&gt;&#xA;" OwnerUserId="2706" LastActivityDate="2016-02-03T06:13:59.117" Title="What does &quot;6 degrees of freedom&quot; mean?" Tags="&lt;accelerometer&gt;&lt;gyroscope&gt;" AnswerCount="5" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9035" PostTypeId="2" ParentId="9034" CreationDate="2016-01-29T05:33:38.940" Score="5" Body="&lt;p&gt;Most &quot;meters&quot; of all varieties include up to three degrees of freedom simply to observe all three dimensions of reality we find ourselves in.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, every object in our three space has three additional dimensions of rotation.  Therefore an unconstrained object is typically said to have six degrees of freedom.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I had to search nine to understand.  Apparently, magnetometers are somehow considered a third set of dimensions, which to me is odd marketing.&lt;/p&gt;&#xA;" OwnerUserId="11625" LastActivityDate="2016-01-29T05:33:38.940" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9036" PostTypeId="2" ParentId="9034" CreationDate="2016-01-29T05:57:45.360" Score="2" Body="&lt;p&gt;n degrees of freedom of an object means it requires n unique parameters to completely define itself. For eg., a 3-DOF arm requires 3 joint parameters with which each and every position on the arm can be evaluated. Similarly in an IMU with 9 degrees of freedom, it is capable of measuring 9 independent readings. Now these 9 readings correspond to 3 from the accelerometer which gives linear acceleration along the 3 principal axes, 3 from the gyroscope which gives the orientation, and 3 from the magnetometer which gives the strength of the magnetic field. If you are an amateur in using IMUs you may be wondering the use of a magnetometer for acceleration and position estimation. But the onboard processor in an IMU is equipped with sensor fusion algorithms which even take the readings of the surrounding magnetic field and correct the readings in acceleration and gyroscope. However, in a 6-DOF IMU, the 3-DOF magnetometer is absent which gives readings of lower accuracy. &lt;/p&gt;&#xA;" OwnerUserId="11721" LastActivityDate="2016-01-29T05:57:45.360" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9037" PostTypeId="2" ParentId="9034" CreationDate="2016-01-29T14:08:54.363" Score="2" Body="&lt;p&gt;In IMUs, the number of degree of freedom is the number of independent readings they can do. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For 9 DOF IMU it is typically 3 for the accelerometer, then 3 for the gyroscope and 3 others for the magnetometer.&lt;/p&gt;&#xA;" OwnerUserId="1615" LastActivityDate="2016-01-29T14:08:54.363" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9038" PostTypeId="1" AcceptedAnswerId="9067" CreationDate="2016-01-29T23:58:33.287" Score="2" ViewCount="262" Body="&lt;p&gt;I have a PR2 robot in an environment, which can be seen on the GUI of OpenRAVE. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, how can I load a &lt;a href=&quot;https://en.wikipedia.org/wiki/Programmable_Universal_Machine_for_Assembly&quot; rel=&quot;nofollow&quot;&gt;PUMA&lt;/a&gt; robot arm in the same environment?&lt;/p&gt;&#xA;" OwnerUserId="11751" LastEditorUserId="9176" LastEditDate="2016-02-02T01:06:28.997" LastActivityDate="2016-02-02T01:06:28.997" Title="How to load a PUMA robot in the existing environment in OpenRAVE 0.9" Tags="&lt;robotic-arm&gt;&lt;motion-planning&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9039" PostTypeId="1" CreationDate="2016-01-30T00:34:58.933" Score="1" ViewCount="273" Body="&lt;p&gt;I want to switch from usercontrol to autonomous. When I have the program running for 120 seconds, how come it wont automatically switch in autonomous mode? Thanks!&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#pragma config(Motor,  port1,           driveBR,       tmotorVex393, openLoop)&#xA;#pragma config(Motor,  port2,           driveFR,       tmotorVex393, openLoop)&#xA;#pragma config(Motor,  port3,           driveFL,       tmotorVex393, openLoop)&#xA;#pragma config(Motor,  port4,           flyRight,      tmotorVex393, openLoop)&#xA;#pragma config(Motor,  port5,           driveBL,       tmotorVex393, openLoop)&#xA;#pragma config(Motor,  port6,           flyLeft,       tmotorVex393, openLoop)&#xA;#pragma config(Motor,  port10,          Belt,          tmotorVex393, openLoop)&#xA;&#xA;//*!!Code automatically generated by 'ROBOTC' configuration wizard               !!*//&#xA;&#xA;#pragma platform(VEX)&#xA;#pragma competitionControl(Competition)&#xA;#pragma autonomousDuration(15)&#xA;#pragma userControlDuration(120)&#xA;&#xA;#include &quot;Vex_Competition_Includes.c&quot;&#xA;&#xA;//Main competition background code...do not modify!&#xA;&#xA;void pre_auton() {&#xA;}&#xA;&#xA;task autonomous() {&#xA;    while(true == true) {&#xA;        motor[flyLeft] = -127;&#xA;        motor[flyRight] = 127;&#xA;        wait1Msec(500);&#xA;        motor[Belt] = -127;&#xA;    }&#xA;}&#xA;&#xA;task usercontrol() {&#xA;    while (true == true) {&#xA;        motor[driveFR] = -vexRT[Ch2];&#xA;        motor[driveFL] = vexRT[Ch3];&#xA;        motor[driveBR] = vexRT[Ch2];&#xA;        motor[driveBL] = vexRT[Ch3];&#xA;&#xA;        if(vexRT[Btn6D] == 1) {&#xA;            motor[flyRight] = -127;&#xA;            motor[flyLeft] = -127;&#xA;        }&#xA;        if(vexRT[Btn6D] == 0) {&#xA;            motor[flyRight] = 0;&#xA;            motor[flyLeft] = 0;&#xA;        }&#xA;        if(vexRT[Btn5D] == 1) {&#xA;            motor[Belt] = -127;&#xA;        }&#xA;        if(vexRT[Btn5D] == 0) {&#xA;            motor[Belt] = 0;&#xA;        }&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="11753" LastEditorUserId="37" LastEditDate="2016-01-30T02:58:46.550" LastActivityDate="2016-06-30T23:40:07.363" Title="How can I switch between Autonomous mode and usercontrol?" Tags="&lt;wheeled-robot&gt;&lt;robotc&gt;&lt;vex&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9040" PostTypeId="1" AcceptedAnswerId="9041" CreationDate="2016-01-30T04:15:12.857" Score="0" ViewCount="96" Body="&lt;p&gt;I have a small POM bevel gear with these dimensions:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ARMjQ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ARMjQ.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It has a 6mm hole for the shaft and a M4 hole for the set screw.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Suppose this bevel gear is meshed with a 45T bevel gear and give a max. output torque of 0.4kg/cm. How should the design of the 6mm shaft be? Should the diameter be precisely 6mm? Should it be flattened into a 'D' shape (so that the set screw can hold the shaft)? I'm planning to use a metal shaft.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help will be appreciated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="11489" LastActivityDate="2016-01-30T09:52:24.890" Title="Metal shaft design for a 6mm plastic bevel gear" Tags="&lt;mechanism&gt;&lt;torque&gt;&lt;gearing&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9041" PostTypeId="2" ParentId="9040" CreationDate="2016-01-30T09:52:24.890" Score="1" Body="&lt;p&gt;Since the bevel gear itselt is made out of plastic, you don't need to do a lot of considerations about the shaft. &lt;br&gt;&#xA;Basically you are talking about a relationship between a hole and a shaft. This relationshift is called a fit. Usually you are defineing your fit by assining special tolerancefields and tolerancesizes to your nominal size.&lt;br&gt;&#xA;In this case you have some cheap plastics, where you are almost unable to apply any special tolerances. This comes from the nature of those plastics, they are pretty flexible and can't stand lot of forces, in addition they are very hard to maschine.(I have never seen a broach made for plastics) Therefor most of this plastic parts are made by injection moulding (which is most likely true for your parts). &lt;br&gt;&#xA;So let's this excursion into construction theory end and come back to your question. Just buy a cheap metal pin with 6mm (in most cases it is 6h7). If you measure the pin, you will see it will have somewhere between 5.97 and 6.00mm.&#xA;Create a flatspot ( use  a file or an electric driller), to prevent twisting between the gearing and the shaft and you are done.&lt;/p&gt;&#xA;" OwnerUserId="6911" LastActivityDate="2016-01-30T09:52:24.890" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="9043" PostTypeId="1" CreationDate="2016-01-30T16:25:55.823" Score="1" ViewCount="218" Body="&lt;p&gt;I am a programmer for my school's FRC robotics team and have received the request from our hardware/driving department to limit the speed at which the robot's motors can accelerate given a joystick input telling it to increase the speed of the motor. For example, when the robot first starts up and the driver decides to move the joystick from the center to the fully up position (0 to full motor power), we don't want it to literally go from 0 to full motor power in an instant - it obviously creates some rather jerky, unstable behavior. How might I receive the target joystick position from the joystick, save it, and build up to it over time (and if any other inputs are sent in this process — like telling it to turn around — stop the current process and enact the new one)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am using Java with WPILib's 2016 robotics library: here's the API &lt;a href=&quot;http://first.wpi.edu/FRC/roborio/release/docs/java/&quot; rel=&quot;nofollow&quot;&gt;http://first.wpi.edu/FRC/roborio/release/docs/java/&lt;/a&gt;, and here's the tutorials &lt;a href=&quot;http://wpilib.screenstepslive.com/s/4485/m/13809&quot; rel=&quot;nofollow&quot;&gt;http://wpilib.screenstepslive.com/s/4485/m/13809&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am using the &quot;IterativeRobot&quot; template class, and teleop is being run in the method teleopPeriodic(), which is continuously called every few milliseconds in the program (it's where i'm receiving joystick input and calling the method RobotDrive.tankDrive() with the inputs).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I realize this is more of a programming question than a robotics question, but I figured it would be better to put it here than in stack overflow, etc. If someone could give me some simple pseudocode or just a conceptual idea of how this might be done (not necessarily as it pertains directly to the library or the language I'm using), that would be great.&lt;/p&gt;&#xA;" OwnerUserId="11759" LastActivityDate="2016-01-30T23:27:32.450" Title="Joystick Rate Limit Filter For FRC Java Programming" Tags="&lt;software&gt;&lt;first-robotics&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2016-01-31T14:43:07.030" ContentLicense="CC BY-SA 3.0" />
  <row Id="9044" PostTypeId="1" AcceptedAnswerId="9047" CreationDate="2016-01-30T17:57:32.447" Score="3" ViewCount="345" Body="&lt;p&gt;For the last few months I have been playing with ROS on an nVidia Jetson TK1 development board. Up until this point, it has mostly been playing with the GPIO header, an Arduino Uno, a couple physical contact sensors, and a few custom motor and servo boards that I slapped together. But lately I've been eyeing an old 700 series Roomba that has been gathering dust (was replaced by an 800 series).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know if the Communication Cable for Create 2 will work with a 700 series Roomba?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know there are DIY designs out there, but I have always been a fan of using off-the-shelf components if they exist - you rarely save more money than your time is worth if it is something like a cable or similar component. So if the Create 2 cable will work, I'll use that. If not, I'll see what I can do to make my own.&lt;/p&gt;&#xA;" OwnerUserId="11762" LastActivityDate="2018-07-18T13:39:17.010" Title="Create 2 Cable with 700 Series Roomba" Tags="&lt;ros&gt;&lt;irobot-create&gt;&lt;roomba&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9045" PostTypeId="2" ParentId="9039" CreationDate="2016-01-30T18:38:28.803" Score="1" Body="&lt;p&gt;It has been a while since worked with VEX, but if memory serves, it was always more picky about syntax than plain C# usually is. Try swapping lines from:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#pragma autonomousDuration(15)&#xA;#pragma userControlDuration(120)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;To:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#pragma userControlDuration(120)&#xA;#pragma autonomousDuration(15)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If you are trying to swap &lt;em&gt;into&lt;/em&gt; autonomous &lt;em&gt;from&lt;/em&gt; user control, you usually have them in that order inside of the code itself. If only to help someone else to understand what your code is doing, and in what order it is doing it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On top of that, it is possible that you are telling the program to run user control for 120 &lt;strong&gt;milli&lt;/strong&gt;seconds, and autonomous to run for 15 &lt;strong&gt;milli&lt;/strong&gt;seconds. I remember most VEX programming tended to use milliseconds for timing, instead of 'plain' seconds, so unless that has changed, your software system is doing exactly what you told it to do - but you've told it to do it for such a short period of time, that the mechanical system doesn't even have time to response in any noticeable way before the loop times-out. Try increasing the time values to 120,000 and 15,000 respectively, and see if that helps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Again, it has been a while since I've worked with VEX, and a lot has probably changed since then, but I hope this is answer you are looking for.&lt;/p&gt;&#xA;" OwnerUserId="11762" LastActivityDate="2016-01-30T18:38:28.803" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="9046" PostTypeId="2" ParentId="9034" CreationDate="2016-01-30T19:13:39.960" Score="2" Body="&lt;p&gt;To understand what these gyroscopes and accelerometers are measuring, you first need to know the physics and geometry behind &quot;Degrees of Freedom&quot;. In terms of physics, each degree of freedom (DoF) in a motion that can exist in 3-dimmensional space. For example, 1DoF is moving along a straight line, or &quot;axis&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each time you increase the DoF, you exponentially increase the number of possible positions. A 2DoF system is usually (but not always) two axes that are perpendicular to one another and in the same plane. Picture a typical X-Y plane. A 3DoF system is similar, but it adds the 'z' axis as well, allowing for movement inside of a field, instead of just on a plane.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you get beyond 3DoF systems, to four through six, you usually start talking about rotation around each of the previous three axes. Picture a free-spinning wheel, that can move up and down the axle (guess the engineer forgot the collars and bearings). So if you have a 3DoF system where an object can also rotate about each axis, you really have six degrees of freedom. This can be visually demonstrated by the &quot;Right Hand Rule&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Take you right hand in front of you and make a fist. Now give a thumbs-up. Keeping the thumb up, point your index finger out. Finally, keeping your thumb up and index finger out, point you middle finger parallel to your chest, perpendicular to both your index finger and thumb. Imagine that each of these fingers is an axis, with your thumb being &quot;Y&quot;, middle finger being &quot;X&quot;, and index finger being &quot;Z&quot;. Move your hand up, and you're moving along the Y-axis. Move away from you, and it is the Z-axis. To the left and right is the X-axis. This is a full 3DoF system. But you can rotate your hand as well, and 'around' each finger too. This gives you three more degrees of freedom, so it is a full 6DoF system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Usually, when you start talking about a system that is greater than 6DoF, you are almost always talking about multi-jointed system. I'll use a robotic arm as an example. In robotics, each time you add one joint to an arm, you increase the degrees of freedom of the system by one. As you get higher and higher degrees of freedom, the math gets exponentially more complicated and the system gets harder to control as a result. This is part of the reason why we don't have bionic limbs just yet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But in this case, when these chips talk about &quot;9DoF&quot;, they really mean they can measure acceleration, instead of just change in position. They do this by monitoring inertia and doing some calculus to figure out how quickly and how far it just moved. Because the movements they are measuring are pretty small, they are probably only measuring linear motion along its X-Y-Z axes (instead of rotation around any axis).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;SHORT VERSION&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 6DoF chips measure motion along 3 perpendicular linear axes, as well as rotation around of each of these axes. The 9DoF chips do all this, plus measure linear acceleration along each of these axes.&lt;/p&gt;&#xA;" OwnerUserId="11762" LastActivityDate="2016-01-30T19:13:39.960" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9047" PostTypeId="2" ParentId="9044" CreationDate="2016-01-30T19:15:51.807" Score="5" Body="&lt;p&gt;Yes, it will work! The electrical interface is the same between the Create 2 and the 700 series Roomba; however, the position of the mini-DIN is changed. Instead of being to the right, under the top cover, the connector can be found under a rubber gasket under the handle. As long as any Create cable can physically fit in that location (and the one iRobot sells can), it will work the same as it does on a Create. &lt;p&gt;&lt;sup&gt; Please note that I am an iRobot employee, but the postings on this site are my own and don't necessarily represent iRobot's positions, strategies, or opinions. &lt;/sup&gt;&lt;/p&gt;&lt;/p&gt;&#xA;" OwnerUserId="7665" LastEditorUserId="7665" LastEditDate="2018-07-18T13:39:17.010" LastActivityDate="2018-07-18T13:39:17.010" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="9048" PostTypeId="1" AcceptedAnswerId="9075" CreationDate="2016-01-30T20:11:56.457" Score="7" ViewCount="2475" Body="&lt;p&gt;My small robot has two motors controlled by an L293D and that is controlled via a Raspberry Pi. They will both go forwards but only one will go backwards. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've tried different motors and tried different sockets in the breadboard, no luck. Either the L293D's chip is broken (but then it wouldn't go forwards) or I've wired it wrong. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I followed the tutorial, &lt;a href=&quot;http://computers.tutsplus.com/tutorials/controlling-dc-motors-using-python-with-a-raspberry-pi--cms-20051&quot; rel=&quot;nofollow noreferrer&quot;&gt;Controlling DC Motors Using Python With a Raspberry Pi&lt;/a&gt;, exactly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a run down of what works. Let the 2 motors be A and B:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I use a python script (see end of post) both motors go &quot;forwards&quot;. When I change the values in the Python script, so the pin set to HIGH and the pin set to LOW are swapped, motor A will go &quot;backwards&quot;, this is expected. However, motor B will not move at all. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I then swap both motors' wiring then the original python script will make both go backwards but swapping the pins in the code will make motor A go forwards but motor B won't move.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So basically, motor A will go forwards or backwards depending on the python code but motor B can only be changed by physically changing the wires.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is &lt;code&gt;forwards.py&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;import RPi.GPIO as GPIO&#xA;from time import sleep&#xA;&#xA;GPIO.setmode(GPIO.BOARD)&#xA;&#xA;Motor2A = 23&#xA;Motor2B = 21&#xA;Motor2E = 19&#xA;&#xA;Motor1A = 18&#xA;Motor1B = 16&#xA;Motor1E = 22&#xA;&#xA;GPIO.setup(Motor1A, GPIO.OUT)&#xA;GPIO.setup(Motor1B, GPIO.OUT)&#xA;GPIO.setup(Motor1E, GPIO.OUT)&#xA;&#xA;GPIO.setup(Motor2A, GPIO.OUT)&#xA;GPIO.setup(Motor2B, GPIO.OUT)&#xA;GPIO.setup(Motor2E, GPIO.OUT)&#xA;&#xA;print(&quot;ON&quot;)&#xA;GPIO.output(Motor1A, GPIO.HIGH)&#xA;GPIO.output(Motor1B, GPIO.LOW)&#xA;GPIO.output(Motor1E, GPIO.HIGH)&#xA;&#xA;GPIO.output(Motor2A, GPIO.HIGH)&#xA;GPIO.output(Motor2B, GPIO.LOW)&#xA;GPIO.output(Motor2E, GPIO.HIGH)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And this is &lt;code&gt;backwards.py&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;import RPi.GPIO as GPIO&#xA;from time import sleep&#xA;&#xA;GPIO.setmode(GPIO.BOARD)&#xA;&#xA;Motor2A = 21&#xA;Motor2B = 23&#xA;Motor2E = 19&#xA;&#xA;Motor1A = 16&#xA;Motor1B = 18&#xA;Motor1E = 22&#xA;&#xA;GPIO.setup(Motor1A, GPIO.OUT)&#xA;GPIO.setup(Motor1B, GPIO.OUT)&#xA;GPIO.setup(Motor1E, GPIO.OUT)&#xA;&#xA;GPIO.setup(Motor2A, GPIO.OUT)&#xA;GPIO.setup(Motor2B, GPIO.OUT)&#xA;GPIO.setup(Motor2E, GPIO.OUT)&#xA;&#xA;print(&quot;ON&quot;)&#xA;GPIO.output(Motor1A, GPIO.HIGH)&#xA;GPIO.output(Motor1B, GPIO.LOW)&#xA;GPIO.output(Motor1E, GPIO.HIGH)&#xA;&#xA;GPIO.output(Motor2A, GPIO.HIGH)&#xA;GPIO.output(Motor2B, GPIO.LOW)&#xA;GPIO.output(Motor2E, GPIO.HIGH)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If you see this diff &lt;a href=&quot;https://www.diffchecker.com/skmx6084&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.diffchecker.com/skmx6084&lt;/a&gt;, you can see the difference:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/q2YDS.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/q2YDS.png&quot; alt=&quot;Screenshot of code diff&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Below are some pictures. You can use the colour of the cables to link them between pictures&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Ke9VG.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Ke9VG.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/W9gbw.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;enter image description here&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/VcWml.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/VcWml.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/Oq9ho.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Oq9ho.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11764" LastEditorUserId="11764" LastEditDate="2016-02-02T19:59:14.587" LastActivityDate="2016-02-02T20:25:40.793" Title="L293D won't turn motor backwards" Tags="&lt;wheeled-robot&gt;&lt;raspberry-pi&gt;" AnswerCount="2" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="9049" PostTypeId="2" ParentId="9043" CreationDate="2016-01-30T23:19:42.710" Score="1" Body="&lt;p&gt;Well without knowing any of the libraries you are using I suggest using a low-pass filter on your input signal. &lt;br&gt; Let's assume you fill use a standard filter of first order with a time coefficient of 0.1seconds (meaning in 0.1 seconds 68% or your input change was send to the output and in 0.5 seconds the input is switched to 99.9% to you output)&#xA;and your are reading those the joystick every 10ms, then your filter will look like this: $$G_z=\frac{0.09516}{(z-0.9048)}$$.&#xA;or:&#xA;$$y_k=0.09516 \cdot u_{k} + 0.9048 \cdot y_{k-1}$$ Transformed into code this is something like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&#xA;double GetPositionFiltered(double RawValueReadFromHw){&#xA;  static double OutputOld=0;&#xA;  double FilteredPosition = 0.09516*RawValueReadFromHw-0.9048*OutputOld;&#xA;  OutputOld=FilteredPosition;&#xA;  return FilteredPosition;&#xA;} &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="6911" LastEditorUserId="6911" LastEditDate="2016-01-30T23:27:32.450" LastActivityDate="2016-01-30T23:27:32.450" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9050" PostTypeId="2" ParentId="9033" CreationDate="2016-01-31T02:46:04.987" Score="2" Body="&lt;p&gt;Like Andy said, a Harmonic drive seems to be the most likely answer. But your final question is very vague. The other option is that it is a direct-drive system (with a clutch to protect the motor), and they are using a very high-torque motor. They certainly seem to have the diameter, as long as you aren't trying to lift something too heavy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for your last question, if you must avoid shafts while trying to achieve rotational motion, you're probably going to have to use a pneumatic/hydraulic system. Most companies avoid this - I know of only two that use hydraulics for rotational motion, leaks will be the bane of your existence. The other option is to start playing with some pretty advanced materials (say some electro-reactive ones, that change shape with electrical current)&lt;/p&gt;&#xA;" OwnerUserId="11762" LastEditorUserId="11762" LastEditDate="2016-01-31T05:34:54.437" LastActivityDate="2016-01-31T05:34:54.437" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9051" PostTypeId="2" ParentId="9013" CreationDate="2016-01-31T06:02:43.067" Score="0" Body="&lt;p&gt;Chuck's mathematical explanation is correct, but to provide a parallel to help illustrate the point, think about 3D FDM printers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Right now, there are two main types of FDM printers: standard 'X-Y-Z' printers and &quot;Delta&quot; printers (pictured):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/m9y9z.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/m9y9z.jpg&quot; alt=&quot;Delta 3D Printer&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A Delta printer works by changing the angle of all three arms to achieve a desired position of the printing head. Mathematically, they are more complex machines to build and control than a 'typical' X-Y-Z printer. But their advantages in print volume (and sometimes quality:speed ratios) can outweigh this to the determined maker/engineer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The basic principal between a delta printer and your arm is the roughly the same. The system knows it is dealing with a fixed number of levers, all at fixed lengths, and all interacting with one another. Knowing this information, it can manipulate these levers simultaneously to change the position of a single point.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the case of the printer, if it raised one arm, the printer head will move towards it, and the other two will compensate to maintain the appropriate height (by lowering the necessary amount).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the case of the arm, the 'bicep' will move to place the fulcrum of the 'forearm', forearm mores to place the 'wrist', and so on, and this is usually done in a single motion. Each of these joints is usually a single DoF in the system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Chuck's explanation about the math for these joints is correct, but also incomplete - in that once things start moving, a lot more calculus becomes involved. You can determine a single position using the math he went over, but you couldn't really find the path between two points. Going over it would really too complex for here. If you would like to know more, I suggest picking up copies of &quot;Engineering Mechanics Dynamics&quot; by R.C. Hibbeler and &quot;Control Systems Engineering&quot; by Norman S. Nise. Tackle Hibbeler first, that will set you with a very solid understanding of mechanical dynamics. Nise is a much 'thicker' read, but control systems isn't a friendly topic to learn, and Nise does a decent job of breaking it down. Someone else here may have a better suggestion for a good control systems and feedback text to read.&lt;/p&gt;&#xA;" OwnerUserId="11762" LastActivityDate="2016-01-31T06:02:43.067" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9052" PostTypeId="1" CreationDate="2016-01-31T07:16:20.083" Score="3" ViewCount="259" Body="&lt;p&gt;I am working on a remote control project that involves using Node.js and Socket.io to transmit joystick data from a webpage to my BeagleBone Black.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I am somewhat disappointed with the BeagleBone - it seems like what should be such simple tasks such as connecting to Wi-Fi can be quite tricky...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is: Are there alternative boards I should be looking at? Boards that also have Node.js libraries with PWM support, could stream video from a webcam, but are easier to set up and have a larger developer community?&lt;/p&gt;&#xA;" OwnerUserId="11770" LastEditorUserId="9176" LastEditDate="2016-02-01T14:32:34.553" LastActivityDate="2016-02-01T19:09:25.323" Title="Alternative to BeagleBone Black for Node.js based remote control project?" Tags="&lt;control&gt;&lt;microcontroller&gt;&lt;pwm&gt;&lt;beagle-bone&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9053" PostTypeId="2" ParentId="9052" CreationDate="2016-01-31T11:37:14.050" Score="1" Body="&lt;p&gt;You will find only two boards with a larger developer community and one of them is supporting node.js, PWMs and USB-interfaces. It is the raspberry Pi.&lt;/p&gt;&#xA;" OwnerUserId="6911" LastActivityDate="2016-01-31T11:37:14.050" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9054" PostTypeId="1" CreationDate="2016-01-31T12:51:18.020" Score="3" ViewCount="1346" Body="&lt;p&gt;I want to find the equations of motion of an RRRR robot.I have studied about it a bit but I am having some confusion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here, in one of the lectures I found online, it describes an Inertia matrix of a link as $\bf{I}_i$ which is computed by $\tilde{\bf{I}}_i$ also described  below?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In conclusion, the kinetic energy of a manipulator can be determined when, for each link, the following quantities are known:&lt;/p&gt;&#xA;  &#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;the link mass $m_i$;&lt;/li&gt;&#xA;  &lt;li&gt;the inertia matrix $\bf{I}_i$, computed with respect to a frame $\mathcal{F}_i$ fixed to the center of mass in which it has a constant expression $\tilde{\bf{I}}_i$;&lt;/li&gt;&#xA;  &lt;li&gt;the linear velocity $\bf{v}_{Ci}$ of the center of mass, and the rotational velocity $\omega_i$ of the link (both expressed in $\mathcal{F}_0$);&lt;/li&gt;&#xA;  &lt;li&gt;the rotation matrix $\bf{R}_i$ between the frame fixed to the link and $\mathcal{F}_0$.&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;  &#xA;  &lt;p&gt;The kinetic energy $K_i$ of the i-th link has the form:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;$$&#xA;K_i = \frac{1}{2}m_i\bf{v}_{Ci}^T\bf{v}_{Ci} + \frac{1}{2}\omega_i^T\bf{R}_i\tilde{\bf{I}}_i\bf{R}_i^T\omega_i \\&#xA;$$&#xA;  It is now necessary to compute the linear and rotational velocities ($\bf{v}_{Ci}$ and $\omega_i$) as functions of the Lagrangian coordinates (i.e. the joint variables $\bf{q}$).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So $\tilde{\bf{I}}_i$ is computed wrt to fixed frame attached to the centre of mass.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However in another example below from another source there is no rotation matrix multiplication with ${I}_{C_1}$ and $I_{C_2}$ as shown above. Am I missing something?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;$\underline{\mbox{Matrix M}}$&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;$$&#xA;M = m_1 J_{v_1}^TJ_{v_1} + J_{\omega_1}^TI_{C_1}J_{\omega_1} + m_2 J_{v_2}^TJ_{v_2} + J_{\omega_2}^TI_{C_2}J_{\omega_2} \\&#xA;$$&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;What is the significance of multiplying Rotation matrix with $I_{C_1}$ or $\tilde{\bf{I}}_i$?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am using former approach and getting fairly large mass matrix. Is it normal to have such long terms inside a Mass matrix? I still need to know though which method is correct. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;(A series of images showing Mathematica output of a 4x4 matrix with some very, very long terms - &lt;a href=&quot;https://i.stack.imgur.com/ECwAB.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;A&lt;/a&gt;, &lt;a href=&quot;https://i.stack.imgur.com/4j9fK.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;B&lt;/a&gt;, &lt;a href=&quot;https://i.stack.imgur.com/drhkQ.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;C&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The equation I used for the mass matrix is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{array}{lcl}&#xA;K &amp;amp; = &amp;amp; \displaystyle{\frac{1}{2}} \displaystyle{\sum_{i=1}^{n}} m_i\bf{v}_{Ci}^T \bf{v}_{Ci} + \displaystyle{\frac{1}{2}} \displaystyle{\sum_{i=1}^{n}} \omega_i^T\bf{R}_i\tilde{\bf{I}}_i\bf{R}_i^T\omega_i \\&#xA;&amp;amp; = &amp;amp; \boxed{ \frac{1}{2} \dot{\bf{q}}^T \sum_{i=1}^{n}\left[ m_i {\bf{J(\bf{q})}_{v}^{i}}^T {\bf{J(\bf{q})}_{v}^i} + {\bf{J(\bf{q})}_{\omega}^i}^T\bf{R}_i\tilde{\bf{I}}_i\bf{R}_i^T\bf{J(\bf{q})}_{\omega}^i \right] \dot{\bf{q}} } \\&#xA;&amp;amp; = &amp;amp; \displaystyle{\frac{1}{2}} \dot{\bf{q}}^T\bf{M(q)}\dot{\bf{q}} \\&#xA;&amp;amp; = &amp;amp; \displaystyle{\frac{1}{2}} \displaystyle{\sum_{i=1}^{n}} \displaystyle{\sum_{j=1}^{n}} M_{ij}(\bf{q})\dot{q}_i \dot{q}_j \\&#xA;\end{array} &#xA;$$&lt;/p&gt;&#xA;" OwnerUserId="10851" LastEditorUserId="9720" LastEditDate="2017-07-24T13:50:46.480" LastActivityDate="2017-07-24T13:50:46.480" Title="Mass Matrix in Lagrange equation" Tags="&lt;robotic-arm&gt;&lt;dynamics&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9056" PostTypeId="2" ParentId="8970" CreationDate="2016-01-31T15:18:00.103" Score="2" Body="&lt;p&gt;I suppose if you really wanted it, you could - but it seems to be designed for smart home/building applications. I also suppose if you really wanted to, you could use ROS for a smart home too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I am not really seeing an advantage to AllJoyn over ROS, in terms of robotics. ROS is structured in an almost 'P2P network', any device can subscribe and publish topics. But AllJoyn seems to be more of a 'hub-and-spoke' network model, some devices listen, fewer think and talk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, on an AllJoyn network, it seems that any device can publish its present state, but it is a central computer that is making the decisions and publishing those decisions. The whatever circuit is controlling that light bulb, or thermostat, is taking all of its directions from the computer running AllJoyn. There doesn't seem to be any leeway for 'independent thought' in the network. But in a ROS network, you do not need to use a 'central-anything'. I can have my nVidia Jetson (which is the piece actually running ROS) control an Arduino, which in-turn is controlling motors based on its own code. The Arduino is making decisions based on what its motors are doing, and what the Jetson is telling it to do, and the Jetson is making decisions based on what the Arduino is telling it and its motors are doing (among other pieces as well).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;AllJoyn would be perfect if you wanted to do an IoT or smart home project with your RasPi, but it doesn't seem to make a lot of sense for robotics since it doesn't have a lot of flexibility when it comes to defining feedback into the network devices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To answer your questions succinctly:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Probably not, not for robotics at least. But it would be good for an IoT project.&lt;/li&gt;&#xA;&lt;li&gt;Yes. It sounds like it needs a 'master' even more so than ROS. The ROS master is mainly to keep track of what is actually on the network and what it is doing. AllJoyn's master is actually making all the decisions too (unlike ROS, where you write nodes for each item on the network, and those do the work).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Now I might be mistaken about AllJoyn's network structure, but this was my impression on it after reading up on it last night and this morning.&lt;/p&gt;&#xA;" OwnerUserId="11762" LastActivityDate="2016-01-31T15:18:00.103" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="9057" PostTypeId="1" AcceptedAnswerId="9061" CreationDate="2016-01-31T18:17:54.100" Score="1" ViewCount="62" Body="&lt;p&gt;I'm looking at the assembly of a tail rotor that should look like this&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/UuQ5b.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/UuQ5b.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;sup&gt;&lt;a href=&quot;https://i.stack.imgur.com/8ElkZ.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;original image&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wonder if the &quot;tail output shaft stopper&quot; (circled in red) is meant to be a bearing or just a piece of metal stopper:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ZH64j.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZH64j.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My reading is that, since it's held by 2 set screws, the whole part should rotate with the rod. While rotating, it'd rub against the bevel gear on the tail drive though. Am I missing something?&lt;/p&gt;&#xA;" OwnerUserId="11489" LastEditorUserId="37" LastEditDate="2016-02-01T02:41:27.820" LastActivityDate="2016-02-01T10:02:07.913" Title="Is this supposed to be a bearing?" Tags="&lt;mechanism&gt;&lt;torque&gt;&lt;gearing&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9058" PostTypeId="2" ParentId="9057" CreationDate="2016-01-31T18:31:15.167" Score="1" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/UuQ5b.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/UuQ5b.jpg&quot; alt=&quot;TailRotorStopper&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;You can see exactly this part in your image. It won't rub anywhere. Since your second pictures shows a so called exploded drawing you cant tell a lot about exact metrics.&lt;/p&gt;&#xA;" OwnerUserId="6911" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2016-01-31T18:31:15.167" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="9059" PostTypeId="5" CreationDate="2016-02-01T00:19:46.933" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2016-02-01T00:19:46.933" LastActivityDate="2016-02-01T00:19:46.933" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9060" PostTypeId="4" CreationDate="2016-02-01T00:19:46.933" Score="0" Body="AllJoyn is an open source software framework for devices and apps to discover and communicate with each other. It was designed to run on multiple platforms, ranging from small embedded RTOS platforms to full-featured OSes." OwnerUserId="167" LastEditorUserId="167" LastEditDate="2016-02-01T02:22:01.127" LastActivityDate="2016-02-01T02:22:01.127" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9061" PostTypeId="2" ParentId="9057" CreationDate="2016-02-01T00:53:11.403" Score="2" Body="&lt;p&gt;A shaft stopper like that is made to let you assemble the device more precisely.  The bearings look like they are in the &quot;Tail Gear Case Plate&quot; subassemblies.  By using a shaft stopper you can insert the shaft into the bearings, but keep the shaft stopper set screws loose.  Then add whatever preload you want and locktite it in place (notice the &quot;red&quot; instructions in the drawing).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding your additional question about how to secure the bearing: attaching a shaft and bearing can be a challenge.  Often a press is used if they are smaller components.  For large items the bearing is often heated, and, less commonly in my experience, the shaft may be cooled in dry ice.  A press may still be needed.  The tight clearance between the inner race of the bearing and the shaft helps to ensure the load is spread along the ID of the bearing.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastEditorUserId="11125" LastEditDate="2016-02-01T10:02:07.913" LastActivityDate="2016-02-01T10:02:07.913" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9062" PostTypeId="2" ParentId="9057" CreationDate="2016-02-01T03:13:59.757" Score="1" Body="&lt;p&gt;As &lt;a href=&quot;https://robotics.stackexchange.com/a/9061/37&quot;&gt;SteveO suggested&lt;/a&gt;, it is clear from the exploded diagram that a bearing is part of each &lt;em&gt;Tail Gear Case Plate&lt;/em&gt;, and the &lt;em&gt;Tail Output Shaft Stopper&lt;/em&gt; is locked to the output shaft using the set screws, which sit in the D grooves in the shaft.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Washer and Poly Slider precisely set the distance between the left bearing and the mesh gear (actually a &lt;a href=&quot;https://en.wikipedia.org/wiki/Gear#Bevel&quot; rel=&quot;nofollow noreferrer&quot;&gt;mitre gear&lt;/a&gt;), while stopping the shaft from sliding up/left on the exploded diagram and disengaging the leader and follower.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The purpose of the Tail Output Shaft Stopper is to stop the shaft being pulled in the opposite direction, which is the direction the blades are going to be causing the shaft to be pulled when rotating.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the stopper in place, the sideways force would be applied from the shaft to the bearing, through the Stopper, with very little force applied to the mesh gear.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Without the Tail Output Shaft Stopper all of the sideways force would be applied via the mesh gear, potentially wearing it out sooner, and possibly even causing it to bind and stop rotating altogether.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This sort of arrangement is fairly common in &lt;em&gt;robotics&lt;/em&gt; application.&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2016-02-01T03:13:59.757" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9063" PostTypeId="1" CreationDate="2016-02-01T05:34:35.413" Score="4" ViewCount="344" Body="&lt;p&gt;I've looked everywhere I can think of to find this information, but haven't come across anything. Does anyone know what kind of screws I can use to replace the ones on top of my Roomba 530? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I realize that the Create 2 is technically a 600 series, but I would expect they were the same.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd like to replace the screws on my Roomba with standoffs so I can stick a mounting plate on top of it. (Additional sensors, CPU, etc.)&lt;/p&gt;&#xA;" OwnerUserId="11776" LastActivityDate="2016-02-01T16:20:05.987" Title="iRobot Create 2/Roomba 530 Screw size/thread?" Tags="&lt;irobot-create&gt;&lt;roomba&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9064" PostTypeId="2" ParentId="9052" CreationDate="2016-02-01T07:36:03.530" Score="2" Body="&lt;p&gt;In addition to the RPi, as &lt;a href=&quot;https://robotics.stackexchange.com/questions/9052/alternative-to-beaglebone-black-for-node-js-based-remote-control-project#answer-9053&quot;&gt;TobiasK suggests&lt;/a&gt;, the &lt;a href=&quot;https://www.arduino.cc&quot; rel=&quot;nofollow noreferrer&quot;&gt;Arduino boards&lt;/a&gt; have:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.arduino.cc/en/Tutorial/PWM&quot; rel=&quot;nofollow noreferrer&quot;&gt;PWM support&lt;/a&gt;;&lt;/li&gt;&#xA;&lt;li&gt;USB support is possible with the addition of an &lt;a href=&quot;https://www.arduino.cc/en/Main/ArduinoUSBHostShield&quot; rel=&quot;nofollow noreferrer&quot;&gt;inexpensive USB shield&lt;/a&gt;, and;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;node.js is possible, see:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://node-ardx.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Arduino Experimenter's Guide for NodeJS&lt;/a&gt;;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://adilmoujahid.com/posts/2015/07/practical-introduction-iot-arduino-nodejs-plotly/&quot; rel=&quot;nofollow noreferrer&quot;&gt;A Practical Introduction to IoT using Arduino, Node.js and Plotly&lt;/a&gt;, and;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.sitepoint.com/controlling-a-motorbot-using-arduino-and-node-js/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Controlling a Motorbot Using Arduino and Node.js&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;to mention but a few links.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;However, before you abandon your BeagleBone, have you looked at:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://briancode.wordpress.com/2015/01/06/working-with-pwm-on-a-beaglebone-black/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Working with PWM on a BeagleBone Black&lt;/a&gt;;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Can the Beagle OTG port work in host mode?&lt;/strong&gt; on the &lt;a href=&quot;http://beagleboard.org/support/faq#usb&quot; rel=&quot;nofollow noreferrer&quot;&gt;USB FAQ&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;the &lt;a href=&quot;http://beagleboard.org/support/bonescript&quot; rel=&quot;nofollow noreferrer&quot;&gt;BoneScript Library&lt;/a&gt; for node.js?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="9176" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2016-02-01T07:36:03.530" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9065" PostTypeId="2" ParentId="8938" CreationDate="2016-02-01T14:55:51.653" Score="0" Body="&lt;p&gt;I highly doubt iRobot will share too detailed info with you, but I can from my own experiments. I've found that the forward facing IR sensors in the bumper seems to be able to see around three feet away. The downward facing IR cliff sensors can only see about six inches. The top mounted IR sensor that is used for docking and lighthouse/virtual wall detection can see the furthest, around six feet and is the only one that can see a full 360 degrees.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wish I could offer more, but I can really only tell by playing with it by hand. &lt;/p&gt;&#xA;" OwnerUserId="11762" LastEditorUserId="11762" LastEditDate="2016-02-01T15:05:02.977" LastActivityDate="2016-02-01T15:05:02.977" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9067" PostTypeId="2" ParentId="9038" CreationDate="2016-02-01T16:08:23.943" Score="2" Body="&lt;p&gt;Multiple robots and environments can be loaded.  Simply load them and position the robots.  Here is a Python example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#! /usr/bin/env python&#xA;&#xA;from openravepy import *&#xA;&#xA;env = Environment()&#xA;env.SetViewer('qtcoin')&#xA;&#xA;env.Load(&quot;pr2-beta-sim.robot.xml&quot;)&#xA;env.Load(&quot;puma.robot.xml&quot;)&#xA;&#xA;pr2 = env.GetRobot('pr2')&#xA;puma = env.GetRobot('PumaGripper')&#xA;&#xA;puma.SetTransform([1,0,0,0,0,1,0])&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Run this with something like: &lt;code&gt;ipython -i my2robots.py&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For an example in C++, see &lt;a href=&quot;http://openrave.org/docs/latest_stable/coreapihtml/orloadviewer_8cpp-example.html&quot; rel=&quot;nofollow&quot;&gt;this example&lt;/a&gt;. &lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2016-02-01T16:08:23.943" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9068" PostTypeId="2" ParentId="9063" CreationDate="2016-02-01T16:20:05.987" Score="1" Body="&lt;p&gt;The screws in the top cover of the robot appear to be special plastic screws; I've never been able to find a good place to buy more. If you're careful with a pin vise (remove the battery first! Don't use a power drill!!), you can tap into the holes shown in the &lt;a href=&quot;http://www.irobotweb.com/~/media/MainSite/PDFs/About/STEM/Create/iRobot_Roomba_600_Open_Interface_Spec.pdf?la=en&quot; rel=&quot;nofollow&quot;&gt;Open Interface Spec&lt;/a&gt; section entitled Roomba Internal Screw Boss Locations with an M3 or 4-40 bottoming tap. I'd avoid the screws vertically aligned with the center of the robot, though; they're awfully close to other circuitry.&lt;/p&gt;&#xA;" OwnerUserId="7665" LastActivityDate="2016-02-01T16:20:05.987" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9069" PostTypeId="1" CreationDate="2016-02-01T18:45:58.497" Score="1" ViewCount="181" Body="&lt;p&gt;I have FPV camera which outputs analog video (RCA, PAL).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to capture video and do image processing, therefore I need some way to convert the analog video to digital.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can some one recommend me how to do it? Is there advice or a shield which can assist?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please note:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;I want to convert the frames with minimum latency, because it is a real time flying drone.&lt;/li&gt;&#xA;&lt;li&gt;I don't need to convert the image to some compressed format (which encoding/ decoding may take time), if I can get the RGB matrix straight, it is preferred.&lt;/li&gt;&#xA;&lt;li&gt;I thought about digital output camera, but I need one which weighs few grams and I haven't found yet.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="11785" LastEditorUserId="9176" LastEditDate="2016-02-01T19:13:03.183" LastActivityDate="2016-02-04T00:04:07.800" Title="Analogue video to digital" Tags="&lt;quadcopter&gt;&lt;cameras&gt;" AnswerCount="1" CommentCount="3" ClosedDate="2016-02-04T00:04:16.923" ContentLicense="CC BY-SA 3.0" />
  <row Id="9070" PostTypeId="2" ParentId="9069" CreationDate="2016-02-01T19:02:07.287" Score="2" Body="&lt;p&gt;You will need to have on-board processing if you plan to go with real time processing and the low latency premise. There is no other way around it, since transmitting the signal will introduce sizable latency of an order of 200-500ms.&#xA;Consequently, I don't see how you can avoid loading your whole robotic vision system on top of your quad.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I believe that getting 1) and raw video isn't possible in an on-board format. Your best bet is something like &lt;a href=&quot;http://www.ebay.com/itm/USB-2-0-Video-Frame-Grabber-W-Composite-RCA-BNC-S-Video-Inputs-/190595996183&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt; and you still don't get neither raw video nor guaranteed low latency.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think your best bet is to combine a companion computer with a compatible camera. Consider the following combos:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Get a raspberry pi with its &lt;strong&gt;very small&lt;/strong&gt; digital camera&lt;/li&gt;&#xA;&lt;li&gt;Use the &lt;a href=&quot;http://www.hardkernel.com/main/products/prdt_info.php?g_code=G137517754892&quot; rel=&quot;nofollow&quot;&gt;Odroid counterpart&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Do the same as the above in a &lt;a href=&quot;https://solarianprogrammer.com/2014/04/21/opencv-beaglebone-black-ubuntu/&quot; rel=&quot;nofollow&quot;&gt;BBB&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The choice boils down to your hardware of choice, where you feel more comfortable programming.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Be warned though&lt;/strong&gt;: Attitude control and split-second obstacle avoidance is not possible with today's board PCs and low FPS cameras. Very custom solutions are required to get the job done.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt; If you still want to go with Analog-&gt;Video conversion, something like &lt;a href=&quot;http://www.ebay.com/itm/2015-new-USB2-0-VHS-to-DVD-Converter-convert-analog-video-to-digital-format-/191651526896&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt; would be the hobbyist's option. PCI frame grabbers cost $$$. Still, I haven't used this particular product, so please do your own market research.&lt;/p&gt;&#xA;" OwnerUserId="11500" LastEditorUserId="11500" LastEditDate="2016-02-03T07:22:20.610" LastActivityDate="2016-02-03T07:22:20.610" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="9071" PostTypeId="2" ParentId="9052" CreationDate="2016-02-01T19:09:25.323" Score="1" Body="&lt;p&gt;You could also consider the ESP8266. It can be programmed directly with the Arduino Developers Kit (see &lt;a href=&quot;http://www.esp8266.com/viewforum.php?f=25&amp;amp;sid=24ca052583f1ef798e84923f1fb42da4&quot; rel=&quot;nofollow&quot;&gt;ESP8266 Arduino&lt;/a&gt;). In that sense the developer community overlaps heavily with that of the Arduino family. The way it integrates into the Arduino SDK basically makes it just another flavor of Arduino, although the pinouts aren't physically compatible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ESP8266 even when on a breakout board is a smaller than a typical arduino and does have PWM support as well as digital IO and ADC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The advantage of the ESP8266 is that it has builtin wifi and can act as wifi host and client simultaneously. Getting a simple web page running from the ESP8266 has proven to be quite easy. Many examples are included in the SDK that is specific to the ESP8266 which are really just specifically tailored Arduino sketches.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, given the answer from greenonline that NodeJS can run on Arduino, I believe that the instructions at the link he provided should also work with the ESP8266. I'm not positive if Node.JS can run concurrently with the web sketches.&lt;/p&gt;&#xA;" OwnerUserId="1075" LastActivityDate="2016-02-01T19:09:25.323" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9073" PostTypeId="1" AcceptedAnswerId="9078" CreationDate="2016-02-02T00:38:23.743" Score="1" ViewCount="224" Body="&lt;p&gt;&lt;strong&gt;Scenario&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have 2 roaming robots, each in different rooms of a house, and both robots are connected to the house wifi. Each robot only has access to the equipment on itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Question&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can the robots be aware of each other's exact position using only their own equipment and the house wifi?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT: Additional Info&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Right now the robots only have:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;RGBDSLAM via Kinect&lt;/li&gt;&#xA;&lt;li&gt;No initial knowledge of the house or their location (no docks, no mappings/markings, nada) &lt;/li&gt;&#xA;&lt;li&gt;Can communicate via wifi and that part is open ended&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I'm hoping to be able to stitch the scanned rooms together before the robots even meet. Compass + altimeter + gps will get me close but the goal is to be within an inch of accuracy which makes this tough. There IS freedom to add whatever parts to the robots themselves / laptop but the home needs to stay dynamic (robots will be in a different home every time).&lt;/p&gt;&#xA;" OwnerUserId="9941" LastEditorUserId="9941" LastEditDate="2016-02-02T15:02:50.617" LastActivityDate="2016-02-02T16:30:49.593" Title="Determine robot's position in a nearby room" Tags="&lt;mobile-robot&gt;&lt;localization&gt;&lt;precise-positioning&gt;" AnswerCount="1" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="9074" PostTypeId="1" AcceptedAnswerId="9081" CreationDate="2016-02-02T03:34:47.990" Score="3" ViewCount="744" Body="&lt;p&gt;As far as I know, a hardware real-time robot control system requires a specific computing unit to solve the kinematics and dynamics of a robot such as interval zero RTX, which assigns CPU cores exclusively for the calculation, or a DSP board, which does exactly the same calculation. This configuration makes sure that each calculation is strictly within, maybe, 1 ms. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My understanding is that ROS, which runs under Ubuntu, doesn't have a exclusive &#xA;computing unit for that. Kinematics and dynamics run under different threads of the same CPU which operates the Ubuntu system, path plan, and everything else. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is that how does ROS achieve software-real time? Does it slow down the sampling time to maybe 100ms and makes sure each calculation can be done in time? Or the sampling time changes at each cycle maybe from 5ms, 18ms, to 39ms each time in order to be as fast as possible and ROS somehow compensates for it at each cycle?&lt;/p&gt;&#xA;" OwnerUserId="10971" LastEditorUserId="9176" LastEditDate="2016-02-02T05:39:59.153" LastActivityDate="2018-01-17T06:40:40.100" Title="Software real-time of ROS system" Tags="&lt;microcontroller&gt;&lt;ros&gt;&lt;real-time&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9075" PostTypeId="2" ParentId="9048" CreationDate="2016-02-02T13:47:06.853" Score="5" Body="&lt;p&gt;The motor driver chip you state you are using, the &lt;a href=&quot;http://www.ti.com/lit/ds/symlink/l293.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;L293D&lt;/a&gt;, is a &quot;quadruple &lt;strong&gt;half H&lt;/strong&gt; driver.&quot; This means that, instead of two &lt;a href=&quot;https://en.wikipedia.org/wiki/H_bridge&quot; rel=&quot;nofollow noreferrer&quot;&gt;full H circuits&lt;/a&gt; capable of driving a motor forward and reverse, you have four &lt;em&gt;half H&lt;/em&gt; circuits, which are only capable of driving a motor &lt;em&gt;in one direction&lt;/em&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You even speculate in your post, &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Either the L293D's chip is broken (but then it wouldn't go forwards) or &lt;strong&gt;I've wired it wrong.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I'm going to guess that you have not wired the motors to the driver chip correctly. This is just a guess, though, because &lt;em&gt;you haven't posted pictures or schematics of your wiring&lt;/em&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In looking at a diagram of the chip, it looks like maybe an easy place to go wrong would be to wire into a ground pin on the chip instead of to one of the motor outputs. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/F937S.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/F937S.png&quot; alt=&quot;L293D Chip Overview&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can see in the picture above from the datasheet (linked above) that the &quot;heat sink and ground&quot; pins are &lt;em&gt;right beside&lt;/em&gt; the driver output pins. If you happened to wire one of your motor leads to pins 4, 5, 12, or 13 instead of 3, 6, 11, or 14, then the motor would still turn one direction (HIGH to LOW), but would not turn in another direction (LOW to LOW) because it's not connected to the driver pin that should be HIGH. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Again, pure speculation on my part, but it would seem to explain all of your symptoms. Please take a picture of your wiring and edit your question to include it. &lt;/p&gt;&#xA;&#xA;&lt;h2&gt;:EDIT:&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;It's hard to tell in your pictures, and I can't see which way the chip is oriented, but it looks like:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Gold wires are Vcc&lt;/li&gt;&#xA;&lt;li&gt;The &lt;a href=&quot;https://s.graphiq.com/sites/default/files/2307/media/images/Teal_429721_i0.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;teal&lt;/a&gt; wire is &lt;a href=&quot;http://pinout.xyz/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pin 19&lt;/a&gt;, which you have as &quot;Motor 2E&quot; - or motor 2 enable, &lt;strong&gt;HOWEVER&lt;/strong&gt;, it's not plugged in to the (3,4EN) or (1,2EN) pin on the L293D chip. Those are pins 9 and 1, respectively, and &lt;em&gt;they are located on the corners of the chip&lt;/em&gt;. It looks like it's maybe plugged in to 4A (or 2A, again I can't tell the orientation of the chip). &lt;/li&gt;&#xA;&lt;li&gt;Purple with maybe a white stripe is Pin 23, which you have listed as &quot;Motor 2B&quot;, but &lt;strong&gt;that&lt;/strong&gt; wire goes to a corner of the chip, which is where the motor enable is located. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;So it looks like to me that when you set &quot;Motor 2E&quot;, to enable motor 2, you are actually &lt;strong&gt;NOT&lt;/strong&gt; enabling motor two, but instead you are setting maybe what you're calling 2A in your code. Then, when you think you are going &quot;forward&quot;, you set &quot;2A&quot; LOW and &quot;2B&quot; high - what you're calling &quot;2B&quot; is actually the motor enable, and that's why it's turning on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you try to turn the other way, it looks like you're setting &quot;2A&quot; HIGH and &quot;2B&quot; LOW, but again what you're calling &quot;2B&quot; is actually the motor enable pin, so you're disabling the motor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Try swapping 2B and 2E in your code (swap 23 and 19). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;If that doesn't work&lt;/em&gt;, please post clearer pictures and we can troubleshoot some more. Particularly, I'm looking to see the chip's orientation and a better (crisper and better lit) shot of the wires where the enter the Raspberry Pi. Also, you have 3 white wires or very light gray and it's hard to tell where they're going. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2016-02-02T20:25:40.793" LastActivityDate="2016-02-02T20:25:40.793" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="9076" PostTypeId="2" ParentId="9048" CreationDate="2016-02-02T14:24:43.017" Score="2" Body="&lt;p&gt;There are a few tests that will help in this sort of situation.  Try either of these.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Test 1.  Get a logic probe (a simple low-cost device that will serve you for many years!) and use it &lt;strong&gt;carefully&lt;/strong&gt; on the L293D.  Test each of the two Enable pins and each of the four Input pins, and make sure each of those pins reads either High or Low as you would expect.  This is the most certain way to find a poor connection or incorrect wires.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Note about the logic probe: always make sure the probe tip is placed centrally and firmly on top of the IC pin you are testing; if you slip sideways and &quot;short&quot; the probe tip between two pins, you could damage an output pin on the Raspberry Pi, depending on the situation.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Test 2.  First disconnect the Raspberry Pi completely and put it aside.  Take the wires that go to the motor controller inputs, and physically connect each of these to power, either zero volts or the VCC connection.  You are effectively sending the signals by hand instead of by software. If the motor now works as expected, then perhaps your Raspberry Pi has a damaged output pin.  If not, either you have misunderstood the connections of there is a problem with the driver.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(As you probably don't have a logic prove, I suggest you at least try test 2 in the first instance. That alone will probably help.)&lt;/p&gt;&#xA;" OwnerUserId="9578" LastActivityDate="2016-02-02T14:24:43.017" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="9077" PostTypeId="1" AcceptedAnswerId="9086" CreationDate="2016-02-02T15:52:58.220" Score="3" ViewCount="1327" Body="&lt;p&gt;Good day,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am working on an autonomous flight controller for a quadcopter ('X' configuration) using only angles as inputs for the setpoints used in a single loop PID controller running at 200Hz (PID Implementation is Here: &lt;a href=&quot;https://robotics.stackexchange.com/questions/8998/quadcopter-pid-controller-derivative-on-measurement-removing-the-derivative-k&quot;&gt;Quadcopter PID Controller: Derivative on Measurement / Removing the Derivative Kick&lt;/a&gt;). For now I am trying to get the quadcopter to stabilize at a setpoint of 0 degrees. The best I was able to come up with currently is +-5 degrees which is bad for position hold. I first tried using only a PD controller but since the quadcopter is inherently front heavy due to the stereo cameras, no amount of D or P gain is enough to stabilize the system. An example is the image below which I added a very small I gain:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/OvijX.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OvijX.jpg&quot; alt=&quot;Small/Almost Negligible I-gain&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can see from the image above (at the second plot), the oscillations occur at a level below zero degrees due to the quadcopter being front heavy. This means that the quad oscillates from the level postion of 0 degrees to and from a negative angle/towards the front. To compensate for this behaviour, I discovered that I can set the DC level at which this oscillations occur using the I gain to reach the setpoint. An image is shown below with [I think] an adequate I gain applied:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/o9Qmh.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/o9Qmh.jpg&quot; alt=&quot;Ok I-gain, I think&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have adjusted the PID gains to reduce the jitters caused by too much P gain and D gain. These are my current settings (Which are two tests with the corresponding footage below):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/JfZX8.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JfZX8.png&quot; alt=&quot;Current Settings&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Test 1: &lt;a href=&quot;https://youtu.be/8JsraZe6xgM&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://youtu.be/8JsraZe6xgM&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Test 2: &lt;a href=&quot;https://youtu.be/ZZTE6VqeRq0&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://youtu.be/ZZTE6VqeRq0&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't seem to tune the quadcopter to reach the setpoint with at least +-1 degrees of error. I noticed that further increasing the I-gain no longer increases the DC offset. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;When do I know if the I-gain I've set is too high? How does it reflect on the plot?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;EDIT:&#xA;The Perr in the graphs are just the difference of the setpoint and the CF (Complementary Filter) angle.&#xA;The Derr plotted is not yet divided by the deltaTime because the execution time is small ~ 0.0047s which will make the other errors P and I hard to see.&#xA;The Ierr plotted is the error integrated with time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All the errors plotted (Perr, Ierr, Derr) are not yet multiplied by the Kp, Ki, and Kd constants&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 3rd plot for each of the images is the response of the quadcopter. The values on the Y axis correspond to the value placed as the input into the gpioPWM() function of the pigpio library. I had mapped using a scope the values such that 113 to 209 pigpio integer input corresponds to 1020 to 2000ms time high of the PWM at 400Hz to the ESC's&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is my current code implementation with the setpoint of 0 degrees:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;cout &amp;lt;&amp;lt; &quot;Starting Quadcopter&quot; &amp;lt;&amp;lt; endl;&#xA;&#xA;float baseThrottle = 155; //1510ms&#xA;float maxThrottle = 180; //This is the current set max throttle for the PITCH YAW and ROLL PID to give allowance to the altitude PWM. 205 is the maximum which is equivalent to 2000ms time high PWM &#xA;float baseCompensation = 0; //For the Altitude PID to be implemented later&#xA;&#xA;&#xA;delay(3000);&#xA;&#xA;float startTime=(float)getTickCount();&#xA;deltaTimeInit=(float)getTickCount(); //Starting value for first pass&#xA;&#xA;while(1){&#xA;//Read Sensor Data&#xA;readGyro(&amp;amp;gyroAngleArray);&#xA;readAccelMag(&amp;amp;accelmagAngleArray);&#xA;&#xA;//Time Stamp&#xA;//The while loop is used to get a consistent dt for the proper integration to obtain the correct gyroscope angles. I found that with a variable dt, it is impossible to obtain correct angles from the gyroscope.&#xA;&#xA;while( ( ((float)getTickCount()-deltaTimeInit) / ( ((float)getTickFrequency()) ) ) &amp;lt; 0.005){ //0.00209715|0.00419&#xA;       deltaTime2=((float)getTickCount()-deltaTimeInit)/(((float)getTickFrequency())); //Get Time Elapsed&#xA;       cout &amp;lt;&amp;lt; &quot; DT endx = &quot; &amp;lt;&amp;lt; deltaTime2 &amp;lt;&amp;lt; endl;&#xA;}&#xA;//deltaTime2=((float)getTickCount()-deltaTimeInit)/(((float)getTickFrequency())); //Get Time Elapsed&#xA;deltaTimeInit=(float)getTickCount(); //Start counting time elapsed&#xA;cout &amp;lt;&amp;lt; &quot; DT end = &quot; &amp;lt;&amp;lt; deltaTime2 &amp;lt;&amp;lt; endl;&#xA;&#xA;&#xA;//Complementary Filter&#xA;float pitchAngleCF=(alpha)*(pitchAngleCF+gyroAngleArray.Pitch*deltaTime2)+(1-alpha)*(accelmagAngleArray.Pitch);&#xA;float rollAngleCF=(alpha)*(rollAngleCF+gyroAngleArray.Roll*deltaTime2)+(1-alpha)*(accelmagAngleArray.Roll);&#xA;float yawAngleCF=(alpha)*(yawAngleCF+gyroAngleArray.Yaw*deltaTime2)+(1-alpha)*(accelmagAngleArray.Yaw);&#xA;&#xA;&#xA;//Calculate Orientation Error (current - target)&#xA;float pitchError = pitchAngleCF - pitchTarget;&#xA;pitchErrorSum += (pitchError*deltaTime2);&#xA;float pitchErrorDiff = pitchError - pitchPrevError;&#xA;pitchPrevError = pitchError;&#xA;&#xA;float rollError = rollAngleCF - rollTarget;&#xA;rollErrorSum += (rollError*deltaTime2);&#xA;float rollErrorDiff = rollError - rollPrevError;&#xA;rollPrevError = rollError;&#xA;&#xA;float yawError = yawAngleCF - yawTarget;&#xA;yawErrorSum += (yawError*deltaTime2);&#xA;float yawErrorDiff = yawError - yawPrevError;&#xA;yawPrevError = yawError;&#xA;&#xA;&#xA;//PID controller list&#xA;float pitchPID = pitchKp*pitchError + pitchKi*pitchErrorSum + pitchKd*pitchErrorDiff/deltaTime2;&#xA;float rollPID = rollKp*rollError + rollKi*rollErrorSum + rollKd*rollErrorDiff/deltaTime2;&#xA;float yawPID = yawKp*yawError + yawKi*yawErrorSum + yawKd*yawErrorDiff/deltaTime2;&#xA;&#xA;//Motor Control - Mixing    &#xA;//Motor Front Left (1)&#xA;float motorPwm1 =  -pitchPID + rollPID - yawPID + baseThrottle + baseCompensation;&#xA;&#xA;//Motor Front Right (2)&#xA;float motorPwm2 =  -pitchPID - rollPID + yawPID + baseThrottle + baseCompensation; &#xA;&#xA;//Motor Back Left (3)&#xA;float motorPwm3 = pitchPID + rollPID + yawPID + baseThrottle + baseCompensation; &#xA;&#xA;//Motor Back Right (4)&#xA;float motorPwm4 = pitchPID - rollPID - yawPID + baseThrottle + baseCompensation;&#xA;&#xA;&#xA; //Check if PWM is Saturating - This method is used to fill then trim the outputs of the pwm that gets fed into the gpioPWM() function to avoid exceeding the earlier set maximum throttle while maintaining the ratios of the 4 motor throttles. &#xA;    float motorPWM[4] = {motorPwm1, motorPwm2, motorPwm3, motorPwm4};&#xA;    float minPWM = motorPWM[0];&#xA;    int i;&#xA;    for(i=0; i&amp;lt;4; i++){ // Get minimum PWM for filling&#xA;        if(motorPWM[i]&amp;lt;minPWM){&#xA;            minPWM=motorPWM[i];&#xA;        }&#xA;    }&#xA;&#xA;    cout &amp;lt;&amp;lt; &quot; MinPWM = &quot; &amp;lt;&amp;lt; minPWM &amp;lt;&amp;lt; endl;&#xA;&#xA;    if(minPWM&amp;lt;baseThrottle){&#xA;        float fillPwm=baseThrottle-minPWM; //Get deficiency and use this to fill all 4 motors&#xA;        cout &amp;lt;&amp;lt; &quot; Fill = &quot; &amp;lt;&amp;lt; fillPwm &amp;lt;&amp;lt; endl;&#xA;        motorPwm1=motorPwm1+fillPwm;&#xA;        motorPwm2=motorPwm2+fillPwm;&#xA;        motorPwm3=motorPwm3+fillPwm;&#xA;        motorPwm4=motorPwm4+fillPwm;&#xA;    }&#xA;&#xA;    float motorPWM2[4] = {motorPwm1, motorPwm2, motorPwm3, motorPwm4};&#xA;    float maxPWM = motorPWM2[0];&#xA;    for(i=0; i&amp;lt;4; i++){ // Get max PWM for trimming&#xA;        if(motorPWM2[i]&amp;gt;maxPWM){&#xA;            maxPWM=motorPWM2[i];&#xA;        }&#xA;    }&#xA;&#xA;    cout &amp;lt;&amp;lt; &quot; MaxPWM = &quot; &amp;lt;&amp;lt; maxPWM &amp;lt;&amp;lt; endl;&#xA;&#xA;    if(maxPWM&amp;gt;maxThrottle){&#xA;        float trimPwm=maxPWM-maxThrottle; //Get excess and use this to trim all 4 motors&#xA;        cout &amp;lt;&amp;lt; &quot; Trim = &quot; &amp;lt;&amp;lt; trimPwm &amp;lt;&amp;lt; endl;&#xA;        motorPwm1=motorPwm1-trimPwm;&#xA;        motorPwm2=motorPwm2-trimPwm;&#xA;        motorPwm3=motorPwm3-trimPwm;&#xA;        motorPwm4=motorPwm4-trimPwm;&#xA;    }&#xA;&#xA;//PWM Output&#xA;    gpioPWM(24,motorPwm1);  //1&#xA;    gpioPWM(17,motorPwm2);  //2&#xA;    gpioPWM(22,motorPwm3);  //3&#xA;    gpioPWM(18,motorPwm4);  //4&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="11311" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2016-02-03T17:00:16.907" Title="PID Tuning for an Unbalanced Quadcopter: When do I know if the I-gain I've set is too high?" Tags="&lt;pid&gt;&lt;raspberry-pi&gt;&lt;quadcopter&gt;&lt;tuning&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9078" PostTypeId="2" ParentId="9073" CreationDate="2016-02-02T16:30:49.593" Score="2" Body="&lt;p&gt;Basically you can utitilize one global frame for both robots since each robot has its own SLAM. SLAM provides an estimate for a robot's pose (i.e. location and direction). If you unify the global frame for both SLAMs, then you can determine the poses of the two robots. I've drawn a picture to illustrate my approach. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/u8S9A.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/u8S9A.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can see from the above picture, two robots are placed in one global frame. Once they start running, there is one landmark in this picture. Each SLAM will utilize this landmark to estimate the robot's pose, therefore, since the robots can communicate with each other, each robot can have an estimate for the other robot's pose. &lt;/p&gt;&#xA;" OwnerUserId="2155" LastActivityDate="2016-02-02T16:30:49.593" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9079" PostTypeId="2" ParentId="4385" CreationDate="2016-02-02T17:40:31.817" Score="2" Body="&lt;p&gt;I did a project based on RPi2 + Pi-Camera + ROS jade + OpenCV to make a line following rover. Two methods are used, one is to find contour of the track, the other is to use Hough-transform for edge detection. Under well-controlled environment (even light sources, less noises, etc.) the performance is good, and I use RANSAC to find preferred edges under noisy environment. Pi-Camera is set to capture 320x240 RGB in 30fps. I overclock my RPi2 to 1.0Ghz, finding contour can process frames in 18-23 fps, and hough-transform is about 17fps (in a bit noisy environment.) For these two methods, Canny filter and Hough transform is the major bottleneck. I built this as a test platform, a cheap rover chassis is used with 2 geared DC motors. My codes in github: &lt;a href=&quot;https://github.com/alexhuang888/roscar&quot; rel=&quot;nofollow&quot;&gt;https://github.com/alexhuang888/roscar&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11651" LastActivityDate="2016-02-02T17:40:31.817" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9080" PostTypeId="2" ParentId="9077" CreationDate="2016-02-02T18:32:09.973" Score="1" Body="&lt;p&gt;What does your code look like that you use to calculate your errors? I had &lt;a href=&quot;https://robotics.stackexchange.com/a/8999/9720&quot;&gt;suggestions to revise your code&lt;/a&gt;, but you're just linking back to your earlier questions so I don't know if that's current or not. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are calculating your error terms correctly, you could try an experimental tuning method like &lt;a href=&quot;https://en.wikipedia.org/wiki/Ziegler%E2%80%93Nichols_method&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ziegler-Nichols&lt;/a&gt;, but again, this relies on your error terms to be calculated correctly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general, the integral &lt;em&gt;term&lt;/em&gt; is used to &quot;accumulate&quot; error such that there is ultimately no steady state error. If the integral gain is too low then it will take a long time to reach (near) zero steady state error, but if it's too high then you will experience overshoot and oscillations as your controller overreacts to minor error accumulation. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2016-02-02T18:32:09.973" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9081" PostTypeId="2" ParentId="9074" CreationDate="2016-02-02T19:14:21.973" Score="0" Body="&lt;p&gt;Short answer: it doesn't compensate at all. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;ROS is generally not considered a real-time OS. You usually need specialized hardware and software to implement a real-time OS. The communication line and bus needs to be specifically designed to minimize lag, and the software needs to be written to be 'clock centric'. A real-time OS is built to do things at certain times, not to do as many calculations as it can in a certain amount of time. Unless you're running ROS on a real-time variant of Linux, and on hardware designed to operate with it, ROS won't operate in real time. Even then, you would probably have to modify or redesign ROS and the packages you want to use to operate primarily by the clock, instead of 'at their leisure' &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Generally, you do not need an real-time OS for robotics. Usually, you only see it in aerospace applications, specifically rocket motor control. Getting from point A to point B using a rocket motor requires split second timing. If the motor goes for even a half second too long or too short, it will miss it's target velocity (and so, overshoot or undershoot it's target). Robots do not usually require this level accuracy in timing. We're more concerned about our creations doing it right, instead of doing it fast. &lt;/p&gt;&#xA;" OwnerUserId="11762" LastActivityDate="2016-02-02T19:14:21.973" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9082" PostTypeId="1" CreationDate="2016-02-03T01:05:54.813" Score="7" ViewCount="1500" Body="&lt;p&gt;I'm building an inverted pendulum to be controlled by DC motors, but I've run across a conundrum.  Personal life experience tells me that it's better to have a lower center of mass to maintain balance.  On the other hand, the greater the moment of inertia (e.g. the higher the center of mass), the easier it is to maintain balance as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These two views both seem plausible, and yet also seem contradictory.   For an inverted pendulum, is there an optimal balance between the two perspectives?  Or is one absolutely right while the other absolutely wrong?  If one is wrong, then where is the error in my thinking?&lt;/p&gt;&#xA;" OwnerUserId="2295" LastActivityDate="2017-03-07T19:51:37.937" Title="Optimal location of the center of mass for an inverted pendulum" Tags="&lt;dynamics&gt;&lt;balance&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9083" PostTypeId="2" ParentId="9082" CreationDate="2016-02-03T02:32:23.833" Score="1" Body="&lt;p&gt;You can answer this by considering the equations of motion of an inverted pendulum:  $$\ddot{\Theta} = \frac{g}{l} \sin(\Theta)$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you agree that the easiest system to control is that which has the smallest $\ddot \Theta$ for you to compensate, then you have three options:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Control the pendulum on the moon to lower $g$&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Keep the pendulum close to $\Theta = 0$, because $\sin(\Theta) \rightarrow \Theta$ for small values of $\Theta$.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Make $l$ as large as possible.  $l$ is the distance to the center of mass along the link.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2016-02-03T02:32:23.833" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="9084" PostTypeId="2" ParentId="9082" CreationDate="2016-02-03T02:43:44.200" Score="2" Body="&lt;p&gt;Lower centers of mass are &lt;em&gt;more&lt;/em&gt; stable, but an inverted pendulum is inherently unstable; any perturbation will set it off. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The height to center of mass depends on how much track you have available, your reaction time, how you're measuring displacement/force, etc.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;:EDIT:&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;To elaborate on my statement above, say you're estimating pendulum position by the reaction force on the carriage, where the force on the carriage is &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$F_{\mbox{reaction}} = (mg)L\sin{\theta}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Well, in that instance, if the reaction force is constant (say you're evaluating the minimum detectable force), then the angle associated with that force declines as the pendulum length $L$ increases. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similarly, if you've got a rotary/angular encoder that has some minimum detectable angle, then the reaction force that puts on your carriage increases as the pendulum length increases.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition to the minimum detectable cases, consider the &lt;em&gt;kinetic energy&lt;/em&gt; of the pendulum. This is an inverted pendulum, so the portion of the potential energy that is converted to kinetic energy is given by:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ \mbox{KE} = \mbox{PE}_{\mbox{initial}} -  \mbox{PE}_{\mbox{final}} \\&#xA;\mbox{KE} = mgL - mgL\cos{\theta} \\&#xA;\mbox{KE} = (mg)*L(1-\cos{\theta}) \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(All of this assumes $\theta=0$ when the pendulum is vertical, by the way, just in case there's any confusion)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, here again, for a constant $\theta$, the longer the pendulum length is the more kinetic energy the pendulum has. Assuming that you are again considering the minimum detectable case, this means that the longer the pendulum length is, the more kinetic energy the system has &lt;em&gt;before you get a chance to respond&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So now, in addition to the fact that you're traversing more track ($\Delta x = L\sin{\theta} \approx L\theta$), the pendulum also has a higher starting kinetic energy, which means now you have to take a larger control action to damp the motion and return to steady state. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, in summary:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;If you're measuring the angle of the pendulum directly, a shorter pendulum length would be preferred because it minimizes the kinetic energy of the pendulum by the time you detect motion. &lt;/li&gt;&#xA;&lt;li&gt;If you're estimating the angle of the pendulum by measuring reaction force on the carriage, a longer pendulum length would be preferred because this corresponds to a smaller angle, which in turn corresponds to lower initial kinetic energy. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I made a short spreadsheet to generate some plots to show the differences:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2gZGN.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2gZGN.png&quot; alt=&quot;Inverted Pendulum Energy&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2016-02-03T14:33:12.023" LastActivityDate="2016-02-03T14:33:12.023" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="9085" PostTypeId="2" ParentId="9082" CreationDate="2016-02-03T05:09:19.077" Score="9" Body="&lt;p&gt;The two views are not contradictory; they apply to two different situations, which you are treating as a single one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your personal experience about having a low center of mass applies to situations where there is a stable position -- a local minimum height for the center of mass.  For example, if you have a vase on a shelf, the height of the vase's center of mass (in relation to the width of its base) determines how far it can wobble from side to side without tipping over.  Shown here with trucks:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Xq4Ao.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Xq4Aom.jpg&quot; alt=&quot;Stability vs the height of the center of mass&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The wobbling of a vase represents the tendency of the vase's center of mass to return to that local minimum height. If it tips over too far, the center of mass will find a different (and undesirable) minimum height.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The inverted pendulum situation has no &quot;stable&quot; position -- no local minimum for the center of mass.  This shouldn't be surprising, because it rests on a single point. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/tKXT9.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tKXT9m.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So in the vase example, once the vase begins its inevitable fall, the height of the vase's center of mass affects how much time it will take to complete that movement.  In the case of the inverted pendulum, this affects how much time you have to correct for that undesired outcome.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if either one of these is the &quot;absolutely wrong&quot; way to look at an inverted pendulum, it's the &quot;resting in a stable position&quot; situation.  &lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2016-02-04T14:37:37.460" LastActivityDate="2016-02-04T14:37:37.460" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9086" PostTypeId="2" ParentId="9077" CreationDate="2016-02-03T05:47:14.967" Score="2" Body="&lt;p&gt;Based on the videos, it looks like the answer is, unfortunately, &quot;the test setup you have might be insufficient to say one way or the other&quot;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is too much slack in the tethers to draw any meaningful conclusions about whether your code is doing the right thing.  The quadcopter seemed to be reacting somewhat correctly to the way it was being tugged by the ropes.  There were some moments where it looked incorrect as well, but they were not isolated enough to point to a specific logic error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Spend some time on the quality and stability of your test setup so that you can rigidly constrain two axes while letting the other move freely.  (For example, disable one pair of motors and hang the quadcopter from strings around those propeller shafts.)  That will let you troubleshoot one axis at a time in a very reasonable way, and provide more accurate feedback on the correctness of your PID values.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking at your setup, another problem seems to be that you're attaching the tether too low and creating an &quot;inverted pendulum&quot; effect.  (See also, &lt;a href=&quot;https://aviation.stackexchange.com/q/9787&quot;&gt;this question on quadcopter center of lift&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/o3rnQ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/o3rnQ.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You need to create a mounting bracket for your tether that will rigidly mount it to the quadcopter body at the level of the center of lift that the propellers provide.  It would also help to use something structural (like a metal post vertically attached to a sturdy base), instead of just rope or wire.  &lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="-1" LastEditDate="2017-04-13T13:00:02.170" LastActivityDate="2016-02-03T17:00:16.907" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="9087" PostTypeId="2" ParentId="9034" CreationDate="2016-02-03T06:13:59.117" Score="0" Body="&lt;p&gt;The page is using some imprecise language, bordering on confusing.  This quote especially:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;To measure those and other variables many people combine the two sensors, to create an inertial measurement unit (IMU) which provides two to six degrees of freedom (DOF). &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;They are saying &quot;two to six degrees of freedom&quot; when they mean &quot;two to six measurements of independent variables&quot;.  Alternatively, they might have meant to say &quot;which provides measurements of a system with two to six degrees of freedom&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That is to say, &lt;a href=&quot;https://en.wikipedia.org/wiki/Degrees_of_freedom_(mechanics)&quot; rel=&quot;nofollow&quot;&gt;&quot;Degrees of freedom&quot;&lt;/a&gt; can't really be &quot;provided&quot; by a measurement device.  You would select a measurement device that can capture the data from every degree of freedom that your system has.  &lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2016-02-03T06:13:59.117" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9088" PostTypeId="2" ParentId="9027" CreationDate="2016-02-03T06:16:46.003" Score="1" Body="&lt;p&gt;The short answer is &quot;yes&quot;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Accelerometers can be used to improve stability by measuring slight changes in movement.  But most importantly, they can tell a walking robot which direction is down.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2016-02-03T06:16:46.003" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9091" PostTypeId="2" ParentId="9074" CreationDate="2016-02-03T10:04:04.067" Score="3" Body="&lt;p&gt;You can use &lt;a href=&quot;https://github.com/orocos/rtt_ros_integration/blob/hydro-devel/README.md&quot; rel=&quot;nofollow&quot;&gt;Orocos RTT&lt;/a&gt; with ROS to achieve some real time performance. In order to use this you need to patch the Linux kernel with a real time patch like PREEMPT_RT or run a real time kernel like Xenomai.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You question about changing the sample time seems to actually miss the point of real time computing. Real time is not about doing calculations fast, it is about doing calculations within the required time frame. A rocket control system probably needs an update rate of several kHz, whereas a nuclear power plant is working more in the Hz range. Nevertheless, the power plant definitely needs real time computation. Basically it is up to you to set the required update rate, then the system can tell you if it can meet those demands. If you are working with hard real time, missing the deadline means a failure of the program and it should start a shut down procedure. Soft real time accepts some deviation but will know when the deadlines are not satisfied.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are working with balancing robots, e.g. segways, you will probably want update rates around 1 kHz hard real time. If you are doing trajectory following with a stable robot 100 Hz soft real time seems reasonable.&lt;/p&gt;&#xA;" OwnerUserId="139" LastActivityDate="2016-02-03T10:04:04.067" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9094" PostTypeId="5" CreationDate="2016-02-03T23:15:04.670" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2016-02-03T23:15:04.670" LastActivityDate="2016-02-03T23:15:04.670" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9095" PostTypeId="4" CreationDate="2016-02-03T23:15:04.670" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2016-02-03T23:15:04.670" LastActivityDate="2016-02-03T23:15:04.670" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9096" PostTypeId="1" AcceptedAnswerId="9475" CreationDate="2016-02-04T11:27:22.330" Score="3" ViewCount="268" Body="&lt;p&gt;I want to implement my own pose graph SLAM following [1]. Since my vehicle is moving in 3D-space i represent my pose using a 3D-translation vector and a quaternion for orientation. [1] tells me that it's necessary to adapt their algorithm 1 by using manifolds to project the poses into euclidean space.&#xA;I also studied the approach of [2]. In section &quot;IV.B. Nonlinear Systems&quot; they write that their approach remains valid for nonlinear systems. I conclude that for their case it's not obligatory to make use of a manifold. But I don't understand how they avoid it. So my questions are:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Is it correct that there is an alternative to manifolds?&lt;/li&gt;&#xA;&lt;li&gt;If yes, how does this alternative look like?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;[1] Grisetti, G., Kummerle, R., Stachniss, C., &amp;amp; Burgard, W. (2010). A tutorial on graph-based SLAM. Intelligent Transportation Systems Magazine, IEEE, 2(4), 31-43.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[2] Kaess, M., Ranganathan, A., &amp;amp; Dellaert, F. (2008). iSAM: Incremental smoothing and mapping. Robotics, IEEE Transactions on, 24(6), 1365-1378.&lt;/p&gt;&#xA;" OwnerUserId="11812" LastActivityDate="2016-05-22T00:01:38.040" Title="Is there an alternative to manifolds when using quaternions for orientation representation in Pose Graph SLAM?" Tags="&lt;slam&gt;&lt;pose&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9097" PostTypeId="1" AcceptedAnswerId="9098" CreationDate="2016-02-04T16:13:29.313" Score="0" ViewCount="87" Body="&lt;p&gt;To plot any curve or a function on a paper we need points of that curve, so to draw a curve, I will store a set of points in the processor and use motors, markers and other mechanism to draw straight lines attaching these points and these points are so close to each other that the resultant will look an actual curve.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I am going to draw the curve with a marker or a pen.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Yes to do this project I need motors which would change the position of a marker but which one?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;With my knowledge stepper motor and servo motors are appropriate but not sure whether they are appropriate since I have never used them, so will they work?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The dimension of paper on which I will be working on is 30x30 cms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have two ideas for this machine &lt;/p&gt;&#xA;&#xA;&lt;p&gt;a. A rectangular one as shown &lt;a href=&quot;https://i.stack.imgur.com/CplxN.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/CplxN.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would make my marker holder movable with help of rack and pinion mechanism but I am not sure that this would be precise and I may have to alter to some other mechanism and if you know such then that can really help me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;b. A cylindrical one &lt;a href=&quot;https://i.stack.imgur.com/Q4ytj.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Q4ytj.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here I would roll a paper on this cylinder and this paper will get unrolled as the cylinder rotates and even the marker holder is movable but only in X direction and the rolling of paper is nothing but change of Y position.&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;&lt;p&gt;Which one of the above two methods is good?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I know about microcontrollers and I want to control the motors using them so I decided to go with Atmega 16 microcontroller. But here i might need microstepping of signals how would I be able to do that with microcontrollers?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;If you know the answer to atleast one of the questions then those answers are always welcomed. &#xA;If you need any clarifications about these then please leave a comment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thankyou for your time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your sincerely,&#xA;Jasser&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit : To draw lines of particular slope I would have to know the slope between two points and the depending on the slope I would rotate motors with particular speed so that marker will move in a straight fashion with that slope.&lt;/p&gt;&#xA;" OwnerUserId="11813" LastEditorUserId="11813" LastEditDate="2016-02-04T18:05:41.723" LastActivityDate="2016-02-04T18:27:41.690" Title="A simple function plotter project" Tags="&lt;microcontroller&gt;&lt;stepper-motor&gt;&lt;servomotor&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9098" PostTypeId="2" ParentId="9097" CreationDate="2016-02-04T16:47:20.027" Score="1" Body="&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;For the range of motion you are talking about, I would recommend stepper motors. Motion control will be easier to implement because they move a fixed distance per step.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Assuming the drum (idea B) is larger than the gear/pulley you would use for idea A, then I would say idea A is better. This is because the motor you use will turn some finite angle $\theta$, which means the carriage or drum will traverse a distance $r\theta$ - whichever device has a shorter radius (pulley or drum) will result in smaller motions, giving you a smoother curve. Also, putting paper correctly indexed on the drum (and holding it there!!) will be considerably more difficult than laying it flat in a frame. For example, if your stepper motor has a step size of 1.8 deg (0.0314 rad), and you use it on a pulley for a carriage where the pulley radius is 1cm, then your minimum motion on that axis is (0.0314 * 1)cm = 0.314mm. However, if your drum is big enough to hold the 30x30cm paper (perimeter = 30cm), then the drum radius is about 4.75cm, so your new minimum motion is (0.0314*4.75)cm = 1.5mm, or almost 5 times the distance between points! &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;Typically you won't controller the stepper motors directly from the microcontroller; you'll use a &lt;a href=&quot;https://www.sparkfun.com/products/12779&quot; rel=&quot;nofollow&quot;&gt;stepper driver&lt;/a&gt; to run the motors. The microcontroller then tells the driver what size steps to take (full, half, quarter, etc.) and how many steps to take and the driver does all of the power electronics and phasing for you. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;As a reminder - you'll need a mechanism to raise and lower the pen or your entire drawing will be one connected line. &lt;/p&gt;&#xA;&#xA;&lt;h2&gt;:EDIT:&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Finding a mechanism to raise and lower the pen frame is outside the scope of this site [shopping recommendation], but I would try a spring-loaded pen attached to a servo motor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding micro-stepping, I'm not sure what your question is. For the driver I &lt;a href=&quot;https://cdn.sparkfun.com/datasheets/Robotics/A3967-Datasheet.pdf&quot; rel=&quot;nofollow&quot;&gt;linked above&lt;/a&gt;, you set two bits for full [0,0], half [1,0], quarter [0,1] or eighth [1,1] stepping. That's it. You would use GPIO pins to do this, wired to the MS2 and MS1 pins on the stepper driver. When you want to take a step, you send a pulse to the STEP pin on the driver. The driver takes care of everything else.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2016-02-04T18:27:41.690" LastActivityDate="2016-02-04T18:27:41.690" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="9099" PostTypeId="1" AcceptedAnswerId="9101" CreationDate="2016-02-04T17:24:54.047" Score="3" ViewCount="92" Body="&lt;p&gt;I am currently reviewing a path accuracy algorithm. The measured data are points in the 7 dimensional joint space (the robot &lt;strike&gt;under test&lt;/strike&gt;  is a 7 axes Robot, but this is not of importance for the question). As far as I know path accuracy is measured and assessed in configuration (3 D) space. Therefore I am wondering if a path accuracy definition in joint angle space has any practical value. Sure, if one looks at the joint angle space as a 7 dimensional vector space in the example (with Euclidean distance measure) one can do formally the math. But this seems very odd to me. For instance, an angle discrepancy between measured and expected for the lowest axis is of much more significance than a discrepancy for the axis near the &lt;strike&gt;actuator&lt;/strike&gt; end effector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So here is my Question: Can anyone point me to references where path accuracy in joint space and/or algorithms for its calculation is discussed ?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;(I am not quite sure what tags to use. Sorry if I misused some.)&lt;/p&gt;&#xA;" OwnerUserId="5638" LastEditorUserId="5638" LastEditDate="2016-02-05T12:47:02.313" LastActivityDate="2016-02-05T12:47:02.313" Title="Reference request: Path accuracy algorithm in the joint angle space" Tags="&lt;algorithm&gt;&lt;industrial-robot&gt;&lt;joint&gt;" AnswerCount="1" CommentCount="11" ContentLicense="CC BY-SA 3.0" />
  <row Id="9100" PostTypeId="1" AcceptedAnswerId="9166" CreationDate="2016-02-04T22:28:29.503" Score="4" ViewCount="1411" Body="&lt;p&gt;I've been working on Humanoid Robot, and I face the problem of finding the Center of Mass of the Robot which will help in balancing the biped. Although COM has a very simple definition, I'm unable to find a simple solution to my problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My view: I have already solved the Forward and Inverse Kinematics of the Robot with Torso as the base frame. So, if I can find the position(and orientation) of each joint in the base frame, I can average all of them to get the COM. Is this approach reasonable? Will it produce the correct COM?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone offer any series of steps that I can follow to find the COM of the biped? Any help would be appreciated. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cheers! &lt;/p&gt;&#xA;" OwnerUserId="10094" LastActivityDate="2016-02-12T20:45:45.543" Title="Finding Center of Mass for Humanoid Robot" Tags="&lt;mobile-robot&gt;&lt;inverse-kinematics&gt;&lt;humanoid&gt;&lt;balance&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9101" PostTypeId="2" ParentId="9099" CreationDate="2016-02-04T22:38:49.423" Score="2" Body="&lt;p&gt;The forward kinematics of the manipulator will correctly identify the larger displacements of the end effector for small rotations of the proximal joints, as opposed to the smaller displacements of the end effector for small rotations of the distal joints.  When these motions are due to errors - all real mechanical systems have them - the established process for relating joint errors to task-space errors involves analytical perturbation analysis, and/or physical calibration of the system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A good starting point would be Siciliano and Khatib, &lt;em&gt;Handbook of Robotics.&lt;/em&gt;  Check out the end of Chapter 14 (they only hit upon the topic but the references will certainly help).  You can also look at the papers which describe 3D sensors for robot calibration.  Those papers frequently derive the perturbation analysis, then show how the new sensor allowed the end effector errors to be reduced after calibration.  I recommend many of the editions of Lenarcic's &lt;em&gt;Advances in Robot Kinematics.&lt;/em&gt;  The 2000 edition with Stanisic has a paper by Khalil et al regarding calibration techniques.  Or a web search will find many such papers, e.g.,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.columbia.edu/~yly1/PDFs2/wu%20recursive.pdf&quot; rel=&quot;nofollow&quot;&gt;http://www.columbia.edu/~yly1/PDFs2/wu%20recursive.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://lup.lub.lu.se/luur/download?func=downloadFile&amp;amp;recordOId=535825&amp;amp;fileOId=625590&quot; rel=&quot;nofollow&quot;&gt;http://lup.lub.lu.se/luur/download?func=downloadFile&amp;amp;recordOId=535825&amp;amp;fileOId=625590&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://math.loyola.edu/~mili/Calibration/index.html&quot; rel=&quot;nofollow&quot;&gt;http://math.loyola.edu/~mili/Calibration/index.html&lt;/a&gt; (follow the references in this one).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this helps.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2016-02-04T22:38:49.423" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9103" PostTypeId="1" AcceptedAnswerId="9104" CreationDate="2016-02-05T08:15:49.290" Score="2" ViewCount="2362" Body="&lt;p&gt;I want to get telemetry data in my Raspberry Pi that will be connected to a &lt;a href=&quot;http://www.openpilot.org/product/coptercontrol/&quot; rel=&quot;nofollow&quot;&gt;CC3D board&lt;/a&gt; either via USB cable or Serial communication. How can I get the data? I plan to have wifi communication between the Pi and my Laptop. Also &lt;a href=&quot;http://www.openpilot.org/product/oplink-rf-modems/&quot; rel=&quot;nofollow&quot;&gt;OPLink modems&lt;/a&gt; will be used both in the Pi and the CC3D for the telemetry. Does anyone have a python example that may help to build an interface or output in the Linux shell to get raw telemetry data in RPi? &lt;/p&gt;&#xA;" OwnerUserId="11816" LastEditorUserId="110" LastEditDate="2016-02-05T14:28:39.340" LastActivityDate="2016-02-06T10:02:38.817" Title="Connecting a CC3D board with Raspberry Pi to get telemetry data" Tags="&lt;serial&gt;&lt;communication&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9104" PostTypeId="2" ParentId="9103" CreationDate="2016-02-05T11:20:49.687" Score="1" Body="&lt;p&gt;I am trying to do the same project. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I asked this question in the LibrePilot forum (the new community which gives support to the OpenPilot project) and they told me about the UAVTalk protocol, an object oriented protocol that is used to exchange telemetry data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I give you some links about the protocol and also some modules programmed in Python to use it as interface with the protocol. &#xA;By now I haven't test those modules but they seems to work properly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you achieve something, please let me know.&#xA;Here are the links&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://bitbucket.org/alessiomorale/librepilot/commits/812babc4406e8063f04997e9f5214efe66ca4cac?at=next&quot; rel=&quot;nofollow&quot;&gt;https://bitbucket.org/alessiomorale/librepilot/commits/812babc4406e8063f04997e9f5214efe66ca4cac?at=next&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://librepilot.atlassian.net/wiki/display/LPDOC/UavTalk&quot; rel=&quot;nofollow&quot;&gt;https://librepilot.atlassian.net/wiki/display/LPDOC/UavTalk&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11050" LastActivityDate="2016-02-05T11:20:49.687" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9106" PostTypeId="1" CreationDate="2016-02-05T15:28:52.477" Score="0" ViewCount="42" Body="&lt;p&gt;I am working on a robotics application that involves moving objects (e.g. books) between several (around 10) stacks. To measure the performance, I'd like to be able to measure which book is located on each of the stacks. The order is not important I just want to know if a book is on one of the stacks. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The stacks are separated by at least one meter and the height of the stacks is less than 30cm (&amp;lt; 8 Books). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If have thought of putting an RFID card in every book and fixing RFID readers above (or below) the stack positions. Several readers could be attached via SPI or I2C to some arduinos or RPis. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What to you think about this approach? Is there a simpler way? Could someone maybe recommend a sensor that could solve this problem? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;// Update:&#xA;I can modify the books (e.g. add a QR-Marker) to some extent, but can't guarantee that the orientation on the stack is fixed. &lt;/p&gt;&#xA;" OwnerUserId="23196" LastEditorUserId="15160" LastEditDate="2018-08-01T22:25:26.150" LastActivityDate="2018-08-01T22:25:26.150" Title="Sensors for identifying stacked books" Tags="&lt;sensors&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="9107" PostTypeId="2" ParentId="9106" CreationDate="2016-02-05T16:40:02.890" Score="2" Body="&lt;p&gt;You might want to look at &lt;a href=&quot;http://www.aforgenet.com/projects/gratf/&quot; rel=&quot;nofollow&quot;&gt;optical glyph tracking&lt;/a&gt;.  I'm not sure how many unique glyphs there are and how many books you have, but it would provide a somewhat simple way to accomplish all this with a camera.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I say &quot;simple&quot; because you'd be able to visually debug it by just looking at the augmented reality video to see what glyphs are being detected.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2016-02-05T16:40:02.890" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="9108" PostTypeId="2" ParentId="2848" CreationDate="2016-02-05T19:20:32.123" Score="2" Body="&lt;p&gt;From that page, &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This speed adjuster plugs into the radio control inputs of the motor controllers. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So my guess would be that CTL is short for &quot;Control&quot;.  Without a better picture or a user manual, only the vendor would be able to say for sure.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2016-02-05T19:20:32.123" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9109" PostTypeId="2" ParentId="8462" CreationDate="2016-02-05T21:39:48.407" Score="1" Body="&lt;p&gt;&quot;Leaving out friction I need a motor with about 0.02 Nm [of torque] and [a rated speed of] 33 rpm.&quot; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;No offense, but verifying your numbers based on your spec's:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;window width 1.4 m&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;sliding shutter weight 25 kg&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;max speed 0.07 m/s&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;max acceleration 0.035 m/s^2&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;pulley diameter 0.04m.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The max linear speed is equal to $r\omega$, where $\omega$ is the angular velocity in radians per second. Your pulley diameter is 0.04m, so your radius is 0.02m. This means that:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;v = r\omega \\&#xA;0.07 \mbox{m/s} = 0.02\mbox{m}*\omega \\&#xA;\omega = \frac{0.07}{0.02} \mbox{rad/s} \\&#xA;\omega = \frac{3.5 \mbox{rad/s}}{1}*\frac{60\mbox{s}}{1\mbox{m}}*\frac{1\mbox{rev}}{2\pi\mbox{rad}} \\&#xA;\omega = 33.4\mbox{rpm}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, your rated speed checks out. Now, the torque. If you ignore friction, then the only purpose for torque is to accelerate:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\tau = I\alpha \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $I$ is the moment of inertia, $\alpha$ is the angular acceleration is $\mbox{rad}/s^2$, and $\tau$ is the motor torque. Again, $a=r\alpha$, like $v = r\omega$, so $\alpha = a/r$. As the weight of the shutter is going to the pulley, you can consider it a point mass at radius $r$, meaning the moment of inertia $I = mr^2$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\tau = I\alpha \\&#xA;\tau = (mr^2)(a/r) \\&#xA;\tau = r(ma) \\&#xA;\tau = (0.02\mbox{m})(25*0.035\mbox{kg m/s}^2) \\&#xA;\tau = 0.0175 \mbox{Nm} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BUT - if this is for a &lt;em&gt;vertical&lt;/em&gt; shutter, the motor has to support the weight of the shutter while it's accelerating it, so the moment of inertia is now $mgr$, or $25*9.81*0.02 = 4.9\mbox{Nm}$ - this dwarfs your acceleration requirement. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The required torque is small enough that I would suggest double checking your assumption that friction is negligible. That said, you have a rated speed and a rated torque, now you just need a rated power. For rotating systems:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;P = \tau\omega \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where the previously calculated values torque and speed are $\omega = 3.5 \mbox{rad/s}$ and $\tau = 0.0175 \mbox{Nm}$, so:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;P = (3.5)(0.0175) \mbox{Nm/s} \\&#xA;P = 61\mbox{mW} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, based on your problem description, nearly any motor you can find will work, with the exception of the very smallest hobby motors. For instance, &lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/B00B1KZ8UU&quot; rel=&quot;nofollow&quot;&gt;this motor&lt;/a&gt; has a rated speed of 120rpm, a rated torque of 0.6Nm, which is over 30x your requirement, for a rated mechanical power of about 7.5W. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A couple notes of caution, though:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These calculations make the assumptions that there is no friction &lt;em&gt;and&lt;/em&gt; that there is no inertia between the motor and the shutter. Regarding bearings, I would probably use &lt;em&gt;bushings&lt;/em&gt;, which are basically wear parts but are significantly less expensive and smaller than true bearings for light loads. I would definitely consider using at least one bushing to help minimize bending forces and wear on the output shaft bearing in the motor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Without a better description (read: picture) of what your intended setup is I can't comment any further than this. In general, though, find the torque, speed, and power rating for the motor and add some performance margin and then just search the Internet. &lt;em&gt;You&lt;/em&gt; have to finish the design before anyone here can comment specifically on it. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-02-05T21:39:48.407" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9111" PostTypeId="1" CreationDate="2016-02-06T15:52:09.343" Score="0" ViewCount="60" Body="&lt;p&gt;I'm currently a robotics hobbyist and am full fledged in Arduino and I have used the Raspberry Pi to make some robots and PCs. Currently, I am thinking of making my own Raspberry Pi, from scratch, on a breadboard or a PCB or something. I surfed the web quite a bit and I did not get the answer I was hoping for. By making a Pi, I mean like instead of buying an Arduino, I can make one myself by buying the Atmega328, Crystal oscillators, etc. I am asking for this because my school requires me to do a project in which I make a computer or a gaming console or something like that and I would hate to look at the disappointed face of the tester all because I just bought a Pi , an connected some devices to it. Thanks in advance!&lt;/p&gt;&#xA;" OwnerUserId="11827" LastActivityDate="2016-02-07T04:33:35.030" Title="How to make a Raspberry Pi?" Tags="&lt;arduino&gt;&lt;raspberry-pi&gt;" AnswerCount="1" CommentCount="4" ClosedDate="2016-02-07T04:49:05.640" ContentLicense="CC BY-SA 3.0" />
  <row Id="9112" PostTypeId="2" ParentId="9111" CreationDate="2016-02-06T17:54:21.430" Score="2" Body="&lt;p&gt;You would need to take the available SPICE and ECAD drawings, and then turn them into PCB schematics using something like KiCAD or Eagle. Then you can send the PCB file to a PCB printing service, and they'll send you what you order. You'll then have to find all the components and solder them yourself - you'll need to be very good at surface mount techniques. Honestly, unless you &lt;em&gt;really need&lt;/em&gt; a custom RasPi, and already know how to design it, it's not worth your time to build your own IMO. Just buy one. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In terms of a school project, adding components to a RasPi is still not a simple task. These things aren't plug and play, you'll need to write the software for it, and name sure that your circuits are wired up correctly. I'm sure that your teacher will still be impressed with a 'store-bought' board used in whatever project you decide.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For future reference, this is the robotics stack exchange. I'm betting that your question is going to be closed because it is mostly unrelated to robotics. However, the electrical engineering stack exchange will probably be more than happy to help you, if you're set on building your own RasPi. &lt;/p&gt;&#xA;" OwnerUserId="11762" LastEditorUserId="11762" LastEditDate="2016-02-07T04:33:35.030" LastActivityDate="2016-02-07T04:33:35.030" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9113" PostTypeId="2" ParentId="7656" CreationDate="2016-02-06T18:03:56.047" Score="1" Body="&lt;p&gt;What Ben said. All Roombas including and following the 700 series have bin-full sensors that use an IR emitter and sensor that goes across the mouth of the bin. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To provide a little more detail, research a material's 'IR Transparency'. Most clear plastics and glasses are transparent to infrared, but not all. Even some opaque plastics are IR transparent, and this can make your life a little easier by making sure the light picked up by the sensor is only the IR you're shooting at it. You'll need to double check whichever materials you wish to use, and make sure that the IR beam can penetrate. &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Should be able to penetrate just find, as long as you pick the right material &lt;/li&gt;&#xA;&lt;li&gt;25cm shouldn't be an issue, but check the specs of the sensor and verify it against the log output from the roomba &lt;/li&gt;&#xA;&lt;li&gt;Dido&lt;/li&gt;&#xA;&lt;li&gt;Mostly to protect the sensor from debris &lt;/li&gt;&#xA;&lt;li&gt;Mostly for mechanical reasons. It's at that angle in the 800 series roomba to make it easier to insert and remove the bin with one hand &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="11762" LastEditorUserId="11762" LastEditDate="2016-02-07T04:11:15.007" LastActivityDate="2016-02-07T04:11:15.007" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9114" PostTypeId="1" AcceptedAnswerId="9125" CreationDate="2016-02-06T21:21:50.667" Score="8" ViewCount="7918" Body="&lt;p&gt;Suppose I have a DC motor with an arm connected to it (arm length = 10cm, arm weight = 0), motor speed 10rpm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I connect a 1Kg weight to the very end of that arm, how much torque is needed for the motor to do a complete 360° spin, provided the motor is placed horizontally and the arm is vertical?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there an simple equation where I can input any weight and get the required torque (provided all other factors remain the same)?&lt;/p&gt;&#xA;" OwnerUserId="11830" LastEditorUserId="9176" LastEditDate="2016-02-07T13:59:42.330" LastActivityDate="2016-08-28T11:40:28.517" Title="Simple equation to calculate needed motor torque" Tags="&lt;motor&gt;&lt;torque&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="9115" PostTypeId="1" CreationDate="2016-02-06T22:32:01.850" Score="0" ViewCount="253" Body="&lt;p&gt;I'm willing to make my first robot, and I'd like to make one similar to the &lt;a href=&quot;http://www.sphero.com/sphero&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sphero&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I know I have to add &lt;strong&gt;2 motors&lt;/strong&gt; in it, and make it work as a hamster ball, but I don't understand how I can make it rotate on the &lt;strong&gt;x axis&lt;/strong&gt; aswell and not only on the &lt;strong&gt;y axis&lt;/strong&gt;, if we assume that the &lt;strong&gt;y&lt;/strong&gt; one is in &lt;strong&gt;front&lt;/strong&gt; of the robot and the &lt;strong&gt;x&lt;/strong&gt; one on its &lt;strong&gt;sides&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Any ideas?&lt;/p&gt;&#xA;" OwnerUserId="11802" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2016-02-09T04:46:28.280" Title="Sphero's logic, how does it work" Tags="&lt;design&gt;&lt;two-wheeled&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9118" PostTypeId="2" ParentId="9114" CreationDate="2016-02-07T03:24:06.813" Score="0" Body="&lt;p&gt;The dynamic torque of actuators for robotic limbs is a topic that is thoroughly discussed in a mathematical introduction to robotic manipulation.&#xA;&lt;a href=&quot;http://www.cds.caltech.edu/~murray/books/MLS/pdf/mls94-complete.pdf&quot; rel=&quot;nofollow&quot;&gt;http://www.cds.caltech.edu/~murray/books/MLS/pdf/mls94-complete.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Answering your question lead me to page 156.  The result seems to be that the torque is purely dependent on position and independent velocity (assuming steady simply planar rotation).&#xA;So by your numbers, I would expect approximately one newton-meter cosine wave at ten cycles per minute.&lt;/p&gt;&#xA;" OwnerUserId="11625" LastActivityDate="2016-02-07T03:24:06.813" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9119" PostTypeId="1" CreationDate="2016-02-07T03:36:54.437" Score="2" ViewCount="102" Body="&lt;p&gt;This is not really a problem but something strange is going on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When Create2 is connected to a PC via the USB original connector lead, when you start-up the computer the Create2 is activated by the Baud Rate Change (BRC) pulling to ground. If I understand correctly, normal behaviour.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My Create2 is connected to a XBEE via a buck converter, I added a switch so the buck converter and the XBEE should not drain the battery continuously so as mentioned in the specs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I followed the Bluetooth pdf for the connections, its working well for sending commands but I still just have a few problems with streaming the return data but that will be resolved.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But now, with the XBEE switched off my Create2 still activates when I start-up my PC, how is that possible, how can the BRC be pulled to ground?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There can be no communication between the PC XB and the Create2 XB since the Create2 XB is switched off, only the PC XB is switched on when starting the computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Its not a problem, its just that I am puzzled. Can anyone explain why this is happening?&lt;/p&gt;&#xA;" OwnerUserId="11667" LastEditorUserId="37" LastEditDate="2016-02-07T05:01:12.487" LastActivityDate="2019-12-19T03:03:05.310" Title="Weird behaviour with a Create2 connected via XBEE" Tags="&lt;irobot-create&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9120" PostTypeId="2" ParentId="9115" CreationDate="2016-02-07T04:32:53.503" Score="7" Body="&lt;p&gt;The principle lying underneath the sphero robot's design and locomotion is shifting of the centre of mass of the ball and making it unstable which makes the ball roll [1,3,4,5,6]. A controlled and calculated shifting of the centre of mass to the appropriate position can achieve desired trajectories of the ball. Apart from the above said principle, a few other principles of gyroscopic locomotion and conservation of momentum are also used [2].&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To change the centre of mass, a differential drive robot [6], a pendulum [3], a three-wheeled omni wheel robot [7] are commonly placed. Even four mass particles attached to cables or ball screw mechanisms are actuated inside the sphere to make it roll [5]. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the point of view of both design and control, I would suggest the robot with three-wheeled omni wheel actuating the internal surface is a simple to implement and control. This design can certainly be improved upon by identifying the good aspects of design in the previously developed robots. For e.g., the spring mechanism used along with a castor wheel in [1] can be used to provide more friction between the wheeled robot and the sphere's internal surface. Going through the references would certainly provide a greater insight into the different designs which might elicit a novel design idea for the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once the design is finalized there is an ample literature available which can help you to model the dynamics and control its motion. Few of the papers work out on these aspects also along with the design of the robot. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;References:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[1] Antonio Bicchi et. al, &quot;Introducing the “SPHERICLE”: an Experimental  testbed for Research and Teaching in Nonholonomy.&quot; Proceedings of the 1997 IEEE&#xA;International Conference on Robotics and Automation Albuquerque, New Mexico - April 1997.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[2] QingXuan Jia et. al, &quot;Analysis of Actuation for a Spherical Robot&quot;.2008 IEEE Conference on Robotics, Automation and Mechatronics. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;[3] Erkan Kayacan et. al, &quot;Modelling and control of a spherical rolling robot: a decoupled dynamics approach.&quot; Robotica: page 1 of 10. © Cambridge University Press 2011. (doi:10.1017/S0263574711000956) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;[4] Wei-Hsi Chen et. al, &quot;Design and implementation of a ball-driven omnidirectional spherical robot.&quot; Mechanism and Machine Theory 68 (2013) 35–48.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[5] SANG Shengju et. al, &quot;Modeling and Simulation of a Spherical Mobile Robot.&quot; UDC 519.87 (DOI: 10.2298/CSIS1001051S) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;[6] J Alves et. al, &quot;Design and control of a spherical mobile robot.&quot; Proceedings of the Institution of Mechanical Engineers, Part I: Journal of Systems and Control Engineering September 1, 2003 vol. 217 no. 6 457-467. (doi: 10.1177/095965180321700602)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[7] Wei-Hsi Chen et. al, &quot;Design and Implementation of an Omnidirectional Spherical Robot Omnicron.&quot; The 2012 IEEE/ASME International Conference on&#xA;Advanced Intelligent Mechatronics July 11-14, 2012, Kaohsiung, Taiwan&lt;/p&gt;&#xA;" OwnerUserId="11721" LastEditorUserId="11721" LastEditDate="2016-02-09T04:46:28.280" LastActivityDate="2016-02-09T04:46:28.280" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9121" PostTypeId="2" ParentId="9119" CreationDate="2016-02-07T04:57:39.147" Score="1" Body="&lt;p&gt;So, am I understanding this correctly that there is no physical connection between your Create 2 and your PC when going by the XBEE - only a bluetooth connection?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you say the Create 2 XBee is switched off, then it sounds like a hardware failure of the switch on the Create 2's XBee. Not uncommon with cheaper/smaller switches, the switch just happened to fail in the 'on' position. Try switching the Xbee on the PC off and rebooting the PC, see if the signal still gets through (just to eliminate the PC XBee as the malfunction).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pull the create 2 XBee, and check the continuity of the switch with a simple DMM (check the resistance - high for 'off', low for 'on', no change for 'broken').&lt;/p&gt;&#xA;" OwnerUserId="11762" LastActivityDate="2016-02-07T04:57:39.147" CommentCount="13" ContentLicense="CC BY-SA 3.0" />
  <row Id="9122" PostTypeId="2" ParentId="9114" CreationDate="2016-02-07T05:21:48.973" Score="3" Body="&lt;p&gt;Since the arm is in a vertical plane, certainly, motor torque is required to counteract the gravitational torque. Since it is a simple 1DOF arm with a rotary joint, the gravitational torque is &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;$ \tau_{g} = mglcos(\theta) $&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;where m - mass of the link; l - perpendicular distance of the center of mass from the joint axis; $\theta$ - angle of rotation measured with the positive x-axis which is pointing to right&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the torque required has to be precisely calculated, then, joint frictional also has to be estimated. Generally, joint friction is assumed to be linear, although it shows a complex nonlinear behaviour at low speeds, it is a reasonable assumption to consider a linear function consisting of coulomb friction and viscous friction. Because of these two frictional terms, two new parameters arise which are generally estimated experimentally or used from the available literature. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;$ \tau_{f} = b_{c} + b_{v}\dot{\theta} $&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;where $ b_{c} $ - coefficient of coulomb friction; $ b_{v} $ - coefficient of viscous friction&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, the inertia of the link itself contributes to the torque generated. However, inertial torque will be zero if it rotates at a constant angular velocity.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;$ \tau_{I} = I\alpha $&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;where, I - inertia of the link about the axis of rotation; $\alpha$ - angular acceleration of the joint&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hence, the total torque required will be&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;$\tau_{T} = \tau_{g} + \tau_{f} + \tau_{I} $&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;To do the above computations, the joint position, velocity, and acceleration trajectories have to be decided and evaluated which in robotics terminology is called as trajectory planning. The procedure of torque computation from the joint trajectories is called as inverse dynamics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since this was a simple 1DOF arm, the torque was evaluated with simple equations. However, for large DOF arms, for systematic computation of torque, techniques like Euler-Newton are generally used. (available in the book provided by @Drew)&lt;/p&gt;&#xA;" OwnerUserId="11721" LastEditorUserId="11721" LastEditDate="2016-08-28T11:40:28.517" LastActivityDate="2016-08-28T11:40:28.517" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9124" PostTypeId="1" AcceptedAnswerId="9126" CreationDate="2016-02-07T18:09:49.297" Score="1" ViewCount="82" Body="&lt;p&gt;I'm developing a robotic hand, and decided to place motors inside joints (as in picture) and I'm stuck with finding a stepper motor that can fit there. Approximate size of motor body is radius - 10mm, length - 10 mm. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any suggestions?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/HP4Ri.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HP4Ri.png&quot; alt=&quot;Diagram of hand joint with stepper motor&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11839" LastEditorUserId="9176" LastEditDate="2016-02-08T13:50:35.463" LastActivityDate="2016-02-08T13:50:35.463" Title="Choosing stepper motor for hand" Tags="&lt;stepper-motor&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9125" PostTypeId="2" ParentId="9114" CreationDate="2016-02-07T18:23:16.723" Score="8" Body="&lt;p&gt;How &lt;em&gt;quickly&lt;/em&gt; do you want to go from stopped to 10rpm? This will define your angular acceleration. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding calculations, first you should convert to standard units, so meters instead of centimeters and radians per second instead of revolutions per minute:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\omega_{\mbox{rad/s}} = N_{\mbox{rpm}}*\frac{2\pi}{60} \\&#xA;\omega_{\mbox{rad/s}} = N_{\mbox{rpm}}*0.1 \\&#xA;\omega_{\mbox{rad/s}} = 1 \mbox{rad/s} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;L = 0.1 \mbox{m} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, the equations you'll need are:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\tau_{\mbox{min}} = \tau_{\mbox{dynamic}} + \tau_{\mbox{static}_\mbox{max}} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\tau_{\mbox{static}_\mbox{max}} = mgL \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\tau_{\mbox{dynamic}} = I\alpha \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $g$ is the gravitational constant $9.81\mbox{m/s}^2$, $I$ is the moment of inertia and $\alpha$ is the angular acceleration. These can be further defined as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;I = mL^2 \\&#xA;\alpha = \frac{\omega_{\mbox{desired}}}{t_{\mbox{desired}}}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $t_{\mbox{desired}}$ is how long you want the motor to take to get from stopped to full speed and $L$ and $\omega$ are your arm length and rotational speeds in meters and rad/s, respectively. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, putting this all together:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\tau_{\mbox{min}} = (mL^2)(\frac{\omega_{\mbox{desired}}}{t_{\mbox{desired}}}) + mgL&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The power required to achieve this torque will peak the instant before you stop accelerating, when you are at top speed. This power is given by:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;P = \tau \omega \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $\tau$ is the torque calculated above and again $\omega$ is rotational speed in rad/s. Power is in Watts. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please note this is the &lt;em&gt;theoretical minimum&lt;/em&gt;; in reality you will need more torque (and thus more power) because the arm is &lt;em&gt;not&lt;/em&gt; massless and your load is &lt;em&gt;not&lt;/em&gt; a point mass, but most importantly because whatever gear box you use to get to 10rpm will introduce significant inertia and frictional losses. I would shoot for &lt;em&gt;at least&lt;/em&gt; double whatever those calculations give you as a performance margin. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you have torque, speed, and power, you should be have enough specifications to purchase the correct motor. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-02-07T18:23:16.723" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="9126" PostTypeId="2" ParentId="9124" CreationDate="2016-02-07T18:41:31.463" Score="4" Body="&lt;p&gt;I have used MicroMo's stepper motors in the past.  You can find their information here:  &lt;a href=&quot;http://www.micromo.com/products/stepper-motors/stepper-motors-datasheets&quot;&gt;http://www.micromo.com/products/stepper-motors/stepper-motors-datasheets&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I don't know if a design process of &quot;make decisions then see what fits&quot; is the best approach.  You should determine the performance you need, then look for components, and base your architectural decision on what you find available.   You may need to relocate the motors and use some kind of mechanical transmission to get the hand performance you're looking for.   It is hard to say with such little required performance information. &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2016-02-07T18:41:31.463" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9129" PostTypeId="1" AcceptedAnswerId="9137" CreationDate="2016-02-08T11:06:11.680" Score="1" ViewCount="1099" Body="&lt;p&gt;Given a pose $x_i = (t_i, q_i)$ with translation vector $t_i$ and rotation quaternion $q_i$ and a transform between poses $x_i$ and $x_j$ as $z_{ij} = (t_{ij}, q_{ij})$ I want to compute the error function $e(x_i, x_j) = e_{ij}$, which has to be minimized like this to yield the optimal poses $X^* = \{ x_i \}$:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$X^* = argmin_X \sum_{ij} e_{ij}^T \Sigma^{-1}_{ij} e_{ij}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A naive approach would look like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ e_{ij} = z_{ij} - f(x_i,x_j) $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $z_{ij}$ is the current measurement of the transform between $x_i$ and $x_j$ and $f$ calculates an estimate for the same transform. Thus, $e_{ij}$ simply computes the difference of translations and difference of turning angles:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ e_{ij} = \begin{pmatrix} t_{ij} - t_j - t_i \\\ q_{ij} (q_j q_i^{-1})^{-1} \end{pmatrix} $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there anything wrong with this naive approach? Am I missing something?&lt;/p&gt;&#xA;" OwnerUserId="11812" LastActivityDate="2016-02-09T03:49:27.393" Title="How to compute the error function in graph SLAM for 3D poses?" Tags="&lt;slam&gt;&lt;errors&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9130" PostTypeId="1" CreationDate="2016-02-08T13:41:16.883" Score="3" ViewCount="258" Body="&lt;p&gt;Could someone help me understand the logic behind choosing a particular state space vector for an EKF?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Context: Say there is a 4 wheeled robot that operates only in 2D. It is equipped with an inertial unit (a/g/m) and wheel encoders (I understand that these alone might not satisfy accuracy constraints, but consider this as a hypothetical case).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, some literature has the state as [q, x, y, vx, vy]' while a few others as [q, q_dot, x, y, vx, vy]'. My question is, what is the advantage with having certain 'rate terms' as opposed to only the normal parameters? Also, what about including bias terms in there?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How do I go about selecting an appropriate state space vector for any use-case (in general)? Is there a set of intuitive/mathematical steps to consider/follow?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="11849" LastActivityDate="2016-02-08T14:20:57.560" Title="Choosing the state vector for an EKF" Tags="&lt;wheeled-robot&gt;&lt;kalman-filter&gt;&lt;ekf&gt;&lt;pose&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9131" PostTypeId="2" ParentId="9130" CreationDate="2016-02-08T14:20:57.560" Score="4" Body="&lt;p&gt;In general, I try to obey the following two rules when selecting states:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Only use the states necessary for &lt;em&gt;control&lt;/em&gt;, and&lt;/li&gt;&#xA;&lt;li&gt;Choose states to be measurable properties, whenever possible. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;For example, on my car's dashboard I could include: suspension displacement, brake pad wear, tire wear, etc. - these are all measurable properties that are critical to &lt;em&gt;operation&lt;/em&gt; but, provided they are within spec, they are not critical to &lt;em&gt;control&lt;/em&gt;. The more indicators (states) I attempt to include, the more &quot;costly&quot; it is to monitor them. For a person, it takes time to read the gauges; for a computer, every additional matrix dimension increases the computation time for state prediction, gain calculations, etc. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similarly, I could try to estimate fuel consumption by using a function of engine power (torque and RPM), or I could do it by monitoring fuel pump flow. In the former, fuel consumption is a function of &lt;em&gt;two&lt;/em&gt; states, where the latter is a function of &lt;em&gt;one&lt;/em&gt; state. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;By choosing your states to be directly measurable parameters, you can use them as direct feedback, bypassing the need for observer design for that state. This in turn allows you to use &lt;a href=&quot;https://en.wikibooks.org/wiki/Control_Systems/Estimators_and_Observers#Reduced-Order_Observers&quot;&gt;reduced-order observers&lt;/a&gt;, which reduces both the controller design complexity for you and again the computational complexity for the controller. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-02-08T14:20:57.560" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9132" PostTypeId="1" AcceptedAnswerId="9133" CreationDate="2016-02-08T15:22:10.583" Score="2" ViewCount="1294" Body="&lt;p&gt;I have a robot with 3 rotational joints that I am trying to simulate in a program I am creating. So I have 4 frames, one base frame, and each joint has a frame. I have 3 transformation functions to go from frame 1 or 2 or 3 to frame 0.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By using the transformation matrix, I want to know how much each frame has been rotated (by the X,Y and Z axis) compared with the base frame. Any suggestions?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason I want this is because I have made some simple 3D shapes that represent each joint. By using the DH parameters I made my transformation matrices. When ever I change my θ (it does not mater how the θ changes, it just does), I want the whole structure to update. I take the translation from the last column. Now I want to get the rotations.&lt;/p&gt;&#xA;" OwnerUserId="10900" LastEditorUserId="110" LastEditDate="2016-02-08T16:08:47.200" LastActivityDate="2016-02-10T22:53:23.473" Title="Find orientation through Transformation matrix" Tags="&lt;robotic-arm&gt;&lt;dh-parameters&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9133" PostTypeId="2" ParentId="9132" CreationDate="2016-02-08T19:22:47.280" Score="1" Body="&lt;p&gt;Based on your question, i understood that you have transformation matrices and you need to find Euler angles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;        \begin{array}{ccc|c}&#xA;        r11&amp;amp;r12&amp;amp;r13&amp;amp;X\\&#xA;        r21&amp;amp;r22&amp;amp;r23&amp;amp;Y\\&#xA;        r31&amp;amp;r32&amp;amp;r33&amp;amp;Z\\&#xA;        \cdots&amp;amp;\cdots&amp;amp;\cdots&amp;amp;1&#xA;        \end{array}&#xA;$$&#xA;the first three rows and columns will give us a Rotation matrix.&#xA;You will get X,Y,Z rotation angles by comparing the above mentioned rotation matrix with &#xA;$$&#xA;        \begin{matrix}&#xA;        cos(\psi)cos(\theta)&amp;amp;-sin(\psi)cos(\phi) + cos(\psi)sin(\theta)sin(\phi)&amp;amp;sin(\psi)sin(\phi)+cos(\psi)sin(\theta)cos(\phi)\\&#xA;        sin(\psi)cos(\theta)&amp;amp;cos(\psi)cos(\phi)+sin(\psi)sin(\theta)sin(\phi)&amp;amp;-cos(\psi)sin(\phi)+sin(\psi)sin(\theta)cos(\phi)\\&#xA;        -sin(\theta)&amp;amp;cos(\theta)sin(\phi)&amp;amp;cos(\theta)cos(\phi)&#xA;        \end{matrix}&#xA;$$    &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suggest to use quaternions, they will be of form  e&lt;sub&gt;0&lt;/sub&gt; + &lt;strong&gt;e&lt;/strong&gt;&#xA;Here  e&lt;sub&gt;0&lt;/sub&gt; is the cos(angle/2) and &lt;strong&gt;e&lt;/strong&gt; is the unit vector of axis of rotation multiplied by sin(angle/2).&lt;/p&gt;&#xA;" OwnerUserId="11126" LastEditorUserId="11126" LastEditDate="2016-02-08T20:55:52.860" LastActivityDate="2016-02-08T20:55:52.860" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9134" PostTypeId="2" ParentId="9132" CreationDate="2016-02-08T20:54:26.453" Score="1" Body="&lt;p&gt;An intuitive way to think about this is to recognize that the upper left 3x3 rotational submatrices of the 4x4 transformation matrices are really just the direction cosines of each of the unit vectors of the moving frames, with respect to the base frame.  So, for example, consider the $T_{02}$ transformation matrix.  This would be found by multiplying $T_{01} T_{12}$, which maps the second moving frame back to the global, or $0$, frame.  The first column of the upper left 3x3 of $T_{02}$ is just the cosine mapping of  $\hat x_2$ (the unit vector of the $2$ frame's $x$ axis) into its components in the $0$ frame.  Similarly, the second column contains the direction cosines of $\hat y_2$ onto the base frame, and the third does the same for $\hat z_2$.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2016-02-08T20:54:26.453" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9135" PostTypeId="1" CreationDate="2016-02-08T21:40:02.417" Score="2" ViewCount="39" Body="&lt;p&gt;With DC motors, it is common to put a freewheel diode and/or a capacitor in order to protect the equipment as the motor can induce current into the system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I plan to use &lt;a href=&quot;http://www.robotshop.com/media/files/pdf2/md10crev2.0usersmanual_2015-07.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this board&lt;/a&gt; to control a 24V DC motor with a Arduino-like microcontroler. In an example in their documentation, they don't put such protection, so I wanted to know if it's unsafe, or is it that the board already protects the system?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The example in question:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/Jv5Hs.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Jv5Hs.png&quot; alt=&quot;Example&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11532" LastActivityDate="2016-02-08T21:40:02.417" Title="Freewheel diode / capacitor with this board?" Tags="&lt;arduino&gt;&lt;motor&gt;&lt;protection&gt;" AnswerCount="0" CommentCount="5" ClosedDate="2016-02-09T00:14:29.797" ContentLicense="CC BY-SA 3.0" />
  <row Id="9136" PostTypeId="2" ParentId="8710" CreationDate="2016-02-08T23:12:57.423" Score="5" Body="&lt;p&gt;The ROSBerryPi page is quite outdated, you actually can &lt;a href=&quot;http://wiki.ros.org/groovy/Installation/Raspbian&quot; rel=&quot;noreferrer&quot;&gt;install prebuilt ROS Groovy binaries on Raspbian&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will be better off installing prebuilt ROS binaries rather than building from source on your pi.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't have any experience with Ubuntu on the raspi but it's running great on my Odroid UX4 (similar single board computer) and ROS Jade runs just fine on that. See &lt;a href=&quot;http://wiki.ros.org/indigo/Installation/UbuntuARM&quot; rel=&quot;noreferrer&quot;&gt;these instructions&lt;/a&gt; for how to install Ubuntu on your pi. Running Ubuntu will allow you to easily use the latest ROS distribution and packages.&lt;/p&gt;&#xA;" OwnerUserId="11851" LastActivityDate="2016-02-08T23:12:57.423" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9137" PostTypeId="2" ParentId="9129" CreationDate="2016-02-09T03:49:27.393" Score="1" Body="&lt;p&gt;Yes, you have an issue, and it has to do with the parameterization of rotations. As you have it, your $e_{ij}$ will be a $7\times 1$ column, but your pose has only six degrees of freedom (three for translation, three for rotation). There is actually a constraint that isn't properly represented in your optimization function (the norm of a unit quaternion must be one). This means that when you try to do the optimization, it will not &quot;know&quot; about this redundancy and solving for $X^*$ will actually optimize a degree of freedom that doesn't exist.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So how do we deal with this? It's a &lt;em&gt;good&lt;/em&gt; idea to use unit quaternions because they avoid the singularities present in all minimal parameterizations (i.e., three parameter representations) of rotations. A good approach to this problem is using a &lt;em&gt;dual&lt;/em&gt; parameterization of rotations. First, we use a singularity-free parameterization of the rotation in the state (e.g., your use of unit quaternions is fine), but we represent rotation &lt;em&gt;errors&lt;/em&gt; using a &lt;em&gt;minimal parameterization&lt;/em&gt;. If the differences between your measurements $z_{ij}$ and predicted measurements $f$ are relatively small, you can safely convert the error rotation to a minimal parameterization without fear of it encountering a singularity (depending on your choice of minimal parameterization).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, let's use a &lt;em&gt;rotation vector&lt;/em&gt; $\mathbf{r} = \theta\mathbf{a}$ for the minimal parameterization (where $\theta$ is the angle of rotation and $\mathbf{a}$ is the axis of rotation). Your new error vector is&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;e_{ij} = \begin{bmatrix} t_{ij} - t_j - t_i \\ \log\left(q_{ij}(q_jq_i^{-1})^{-1}\right) \end{bmatrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $\log(q)$ converts a quaternion to a rotation vector. Note that you should also be representing the uncertainty of your rotation measurement using a minimal parameterization (i.e., $\Sigma_{ij}$  is a $6\times 6$ matrix).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After you solve for the optimal $6 \times 1$ perturbation of the state $\Delta\mathbf{x}^*$, you need to apply it to your state by converting the rotation vector back to a unit quaternion; i.e.,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;q \gets q\, \exp(\Delta \mathbf{r}^*)&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $\Delta \mathbf{r}^*$ is the optimal perturbation of one of the state's quaternions (i.e., it's part of $\Delta\mathbf{x}^*$), and $\exp$ converts a rotation vector to a unit quaternion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I didn't really go into too much detail here, and skipped some mathematical rigour for the sake of keeping things brief. For more information on this approach, see the below references. This approach is not limited to rotations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;C. Hertzberg, R. Wagner, U. Frese, and L. Schröder, “Integrating generic sensor fusion algorithms with sound state representations through encapsulation of manifolds,” Information Fusion, vol. 14, no. 1, pp. 57–77, Jan. 2013.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;G. Grisetti, R. Kümmerle, C. Stachniss, and W. Burgard, “A tutorial on&#xA;graph-based SLAM,” IEEE Intelligent Transportation Systems Maga- zine, vol. 2, no. 4, pp. 31–43, 2010.&lt;/p&gt;&#xA;" OwnerUserId="4320" LastActivityDate="2016-02-09T03:49:27.393" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="9138" PostTypeId="2" ParentId="7535" CreationDate="2016-02-09T15:59:22.540" Score="0" Body="&lt;p&gt;A human inside a room can be identified by using temperature sensors. Every object has its own temperature, i.e. a human also has a certain body temperature - using this we can find the find the presence of human being inside a room.&lt;/p&gt;&#xA;" OwnerUserId="11858" LastEditorUserId="9176" LastEditDate="2016-02-10T10:34:33.267" LastActivityDate="2016-02-10T10:34:33.267" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9139" PostTypeId="1" CreationDate="2016-02-09T22:49:31.700" Score="2" ViewCount="213" Body="&lt;p&gt;I need to know if the iRobot Create 2 can be controlled with a NI myRIO that has been programmed through LabVIEW. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The goal is to program an autonomous robot for real-time tracking using a Kinect sensor. &lt;/p&gt;&#xA;" OwnerUserId="11859" LastEditorUserId="110" LastEditDate="2016-03-11T22:40:03.253" LastActivityDate="2016-03-11T22:40:03.253" Title="Can I control iRobot Create 2 with NI myRIO and LabVIEW codes?" Tags="&lt;mobile-robot&gt;&lt;irobot-create&gt;&lt;labview&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9140" PostTypeId="2" ParentId="9139" CreationDate="2016-02-09T23:22:33.217" Score="1" Body="&lt;p&gt;Unfortunately, there is no &quot;single&quot; answer to your question. There is no USB port on the NI myRIO, so just using the cable provided by iRobot as-is is not really an option. The good news is the iRobot Create (and Roombas in general) take all of their commands via the serial 7DIN interface that is mounted on-top of Roomba. The Create 2 should have some re-programmable capabilities, Roombas will not - you need to 'live push/pull' instructions/data to/from them using an attached device like an arduino, RasPi, Tegra TK1/TX1, etc. So if you can get the NI myRIO to generate the appropriate serial commands from LabView code - something that shouldn't be too difficult - then it should be possible to control the Create/Roomba and program the Create 2. As for exactly how to do this, I am unfamiliar with the NI myRIO. It is a relatively new system, and I am not sure it really offers any benefit over something like an Arduino, RasPi, or Tegra. I can only be sure that you will need to design your own interface, as it seems like the myRIO was designed to make use of 'bare' motors and sensors, not ones already sitting behind a micro-controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this particular case, I would advise against the NI myRIO and suggest you use either the &lt;a href=&quot;http://www.newegg.com/Product/Product.aspx?Item=N82E16813190005&amp;amp;cm_re=nvidia_tk1-_-13-190-005-_-Product&quot; rel=&quot;nofollow&quot;&gt;nVidia Tegra TK1&lt;/a&gt; or &lt;a href=&quot;http://www.newegg.com/Product/Product.aspx?Item=N82E16813190006&amp;amp;cm_re=nvidia_tx1-_-13-190-006-_-Product&quot; rel=&quot;nofollow&quot;&gt;nVidia Tegra TX1&lt;/a&gt;. They are specifically designed to do live image processing on a mobile platform, and the drivers for using a kinect sensor has already been developed for the TK1/TX1. You can also use ROS for these boards, and that again will make your life much more simple. It still won't be a simple &quot;put all the pieces together and press 'go&quot; project, but you won't have to write all the code and drivers on your own. In robotics - unless the point is to do it 'new' - re-using existing code and drivers is in your best interest.&lt;/p&gt;&#xA;" OwnerUserId="11762" LastActivityDate="2016-02-09T23:22:33.217" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="9141" PostTypeId="2" ParentId="8382" CreationDate="2016-02-10T03:26:55.997" Score="2" Body="&lt;p&gt;You're in luck.  Stepper motors do not have absolute positions.  There is no 0-degree mark, nor 90-degree mark, etc.  Everything is relative to the current step, so you don't have to query where the motor is positioned.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to track the absolute position, look into &lt;a href=&quot;https://en.wikipedia.org/wiki/Rotary_encoder&quot; rel=&quot;nofollow noreferrer&quot;&gt;position encoding motors&lt;/a&gt; (rotary encoders are popular).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For your case, you need to research 1 thing: &lt;em&gt;how many steps does my motor complete in 1 revolution?&lt;/em&gt; Another way of asking this is: &lt;em&gt;what is the angular resolution of my motor?&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/8954/software-to-control-an-arduino-setup-with-a-timing-belt-and-stepper-motors/8958#8958&quot;&gt;This post will take you the rest of the way: Arduino and stepper control&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where you see my code saying &lt;code&gt;stepperX.step(500);&lt;/code&gt;, that's the command to take 500 steps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want x number of degrees, you'll write the following:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;numSteps = stepsPerRevolution * (desiredNumberOfDegrees / 360);&#xA;stepperX.step(numSteps);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="9314" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2016-02-10T03:26:55.997" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9143" PostTypeId="1" AcceptedAnswerId="9149" CreationDate="2016-02-10T07:04:36.803" Score="4" ViewCount="139" Body="&lt;p&gt;What is an intuitive understanding for homotopy?  At what stage is homotopy (I understand it as stretching or bending of path) in a planning algorithm?  Is homotopy involved, for example, while implementing an algorithm like RRT?&lt;/p&gt;&#xA;" OwnerUserId="8916" LastEditorUserId="2295" LastEditDate="2016-02-11T09:10:27.393" LastActivityDate="2016-02-11T09:10:27.393" Title="How is homotopy used in planning algorithms?" Tags="&lt;motion-planning&gt;&lt;rrt&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9144" PostTypeId="1" CreationDate="2016-02-10T08:58:03.500" Score="1" ViewCount="5619" Body="&lt;p&gt;I'm trying to work a car that's being controlled by an Arduino. I'm using the following chassis: &lt;a href=&quot;http://www.aliexpress.com/item-img/New-2WD-car-chassis-DC-gear-motor-wheels-easy-assembly-and-expansion-car-toys-robot-toys/32310649967.html&quot; rel=&quot;nofollow&quot;&gt;New 2WD car chassis DC gear motor, wheels easy assembly and expansion&lt;/a&gt; and an L298N motor driver.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is that it's hard to make the car go straight. Giving the same PWM value to the motors still makes them spin in different speeds, trying to calibrate the value is hard and every time I recharge my batteries the value changes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What are my options on making the car go straight when I want (well, sometimes I'll want to turn it around of course)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've thought about using an encoder but I wish to avoid that since it will complicate the whole project, is there any other viable option? and even when using an encoder, Does it means I will need to keep track all the time and always adjust the motors value continuously? is there some built-in library for that?&lt;/p&gt;&#xA;" OwnerUserId="11866" LastEditorUserId="9176" LastEditDate="2016-02-10T12:35:32.567" LastActivityDate="2016-02-10T14:19:21.963" Title="Making a car go straight" Tags="&lt;arduino&gt;&lt;wheeled-robot&gt;&lt;calibration&gt;&lt;two-wheeled&gt;" AnswerCount="1" CommentCount="3" ClosedDate="2016-02-10T15:06:34.357" ContentLicense="CC BY-SA 3.0" />
  <row Id="9145" PostTypeId="1" CreationDate="2016-02-10T12:06:23.270" Score="2" ViewCount="293" Body="&lt;h2&gt;What?&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Put together here &lt;strong&gt;a list of books (like the one for C/C++ on StackOverflow) that are spiritually similar to Sebastian Thrun's Probabilistic Robotics for robotic manipulation and mechanics&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Why?&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Thrun's book is a wonderful resource for implementable algorithms while also dealing with the mathematics/theory behind them. In somewhat similar vein for robotic mechanics there is &quot;A Mathematical Introduction to Robotic Manipulation - S.Sastry, Z.Li and R.Murray&quot; which has a lot of mathematical/theoretical content. What is missing however in this book are the algorithms concerned with how should/would one go about implementing the theoretical stuff.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Requirements&lt;/h2&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Ideally list books dealing with diverse areas of robotics.&lt;/li&gt;&#xA;&lt;li&gt;The books have to present algorithms like what Thrun does in his book.&lt;/li&gt;&#xA;&lt;li&gt;Algorithms presented have to be language agnostic and as much as possible not be based on packages like MATLAB in which case they should be categorized appropriately.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="3905" LastEditorUserId="3905" LastEditDate="2016-02-10T15:43:54.723" LastActivityDate="2016-02-10T15:43:54.723" Title="List of books similar to Thrun's Probabilistic Robotics for robot mechanics and manipulation" Tags="&lt;kinematics&gt;&lt;inverse-kinematics&gt;&lt;algorithm&gt;&lt;dynamics&gt;&lt;books&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="2" ClosedDate="2016-02-10T15:07:28.590" ContentLicense="CC BY-SA 3.0" />
  <row Id="9146" PostTypeId="2" ParentId="7068" CreationDate="2016-02-10T13:42:48.010" Score="2" Body="&lt;p&gt;I will refer to the &lt;a href=&quot;http://www.tzi.de/spl/bin/view/Website/WebHome&quot; rel=&quot;nofollow&quot;&gt;Standard Platform League (SPL)&lt;/a&gt; and the &lt;a href=&quot;https://www.robocuphumanoid.org/&quot; rel=&quot;nofollow&quot;&gt;Humanoid Leagues (HL, e.g. Kid-Size)&lt;/a&gt;. Both are robot soccer leagues with fully autonomous robots.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this leagues, robots can utilize WiFi communication to either broadcast packages to their team members, or listen to GameController messages.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;strong&gt;GameControler&lt;/strong&gt; provides information about the game state (e.g. ready (go to position), play). Thus, the robots can use the information provided by the GameController to have a strategy according to the game state, or according to the scored goals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Broadcasted &lt;strong&gt;messages by other players&lt;/strong&gt; reveal how many players may be active / taking part. Moreover, robots can inform other team mates when they get penelized (a robot conducted an illegal action, e.g., pushing another robot).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are more &lt;strong&gt;dynamical strategies&lt;/strong&gt; used in the SPL. According to the fact whether one robot is manipulating the ball, other robots may aim for a specific position in the vicinity (supporting).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Much work is done, but since most strategies are dependent on the WiFi coverage/robustness, just a few dynamic strategies are used so far during games, sicne WiFi reliability turns out to be low during competitions.&#xA;That means, packages may need several seconds to arrive. Even the chances to play a game without WiFi are high (happens partially to the SPL finals in 2014/2015). Most teams therefore tend to use static behaviour (e.g. players have a static position and react when the ball is in their vicinity).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore, some teams aim to have a strategy WiFi independent (partially relying on vision) to overcome this gaps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Short answer here:&lt;/strong&gt; Most times, strategy is derived from communicated messages over the WiFi.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For further reading, I would recommend the SPL &lt;strong&gt;team description papers&lt;/strong&gt; under the link provided.&lt;/p&gt;&#xA;" OwnerUserId="11761" LastEditorUserId="11761" LastEditDate="2016-02-10T14:39:38.073" LastActivityDate="2016-02-10T14:39:38.073" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9147" PostTypeId="2" ParentId="9145" CreationDate="2016-02-10T14:14:17.763" Score="3" Body="&lt;p&gt;This is my go-to book for all things manipulation.  But it covers some other topics as well.&#xA;&lt;a href=&quot;https://books.google.com/books/about/Robotics.html?id=jPCAFmE-logC&quot; rel=&quot;nofollow&quot;&gt;Robotics: Modelling, Planning and Control&lt;/a&gt; by Bruno Siciliano, Lorenzo Sciavicco, Luigi Villani, Giuseppe Oriolo.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2016-02-10T14:14:17.763" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9148" PostTypeId="2" ParentId="9144" CreationDate="2016-02-10T14:19:21.963" Score="0" Body="&lt;p&gt;If you're driving a car down a road, even if that road is straight, you still need to use the steering wheel occasionally to keep the car on the road. This means looking at your surroundings to determine if you're drifting, and (somewhat) constantly interfacing with the steering wheel to adjust your heading. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want the vehicle to go straight, &lt;a href=&quot;https://robotics.stackexchange.com/a/9006/9720&quot;&gt;you need feedback&lt;/a&gt;. Mark Booth gives a &lt;a href=&quot;https://robotics.stackexchange.com/a/1234/9720&quot;&gt;great answer&lt;/a&gt; to a similar-ish question, but there that OP wanted to go in a straight line &lt;em&gt;at a speed proportional to distance remaining&lt;/em&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think the way I would consider approaching the problem would be to generate a PID controller using the difference in motor speeds as the reference and feedback channel. The output of the controller would be an adjustment you would add to one motor and subtract from the other. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider this pseudo-code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;vehicleSpeed = &amp;lt;joystickYAxis&amp;gt;;&#xA;steeringRef = &amp;lt;joystickXAxis&amp;gt;;&#xA;leftMotorSpeed = pollEncoder(leftMotor);&#xA;rightMotorSpeed = pollEncoder(rightMotor);&#xA;&#xA;steeringFbk = leftMotorSpeed - rightMotorSpeed;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So, at this point, &lt;code&gt;steeringFbk&lt;/code&gt; is positive if the left motor is running faster than the right motor, which would indicate you're turning right. Now, to correct this, you would want something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;steeringError = steeringRef - steeringFbk;&#xA;&#xA;setMotorSpeed(leftMotor, vehicleSpeed + steeringError);&#xA;setMotorSpeed(rightMotor, vehicleSpeed - steeringError);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So here &lt;code&gt;steeringError&lt;/code&gt; is now a &lt;em&gt;negative&lt;/em&gt; number (desired - actual), so you add that to the desired vehicle speed. This means that the left motor will be set to some value slightly under the desired speed and the right motor will be set to some value slightly over. This should correct the motor speeds such that the vehicle is now traveling straight. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A couple of notes - &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Now you have a means to steer the vehicle. If you set &lt;code&gt;steeringRef&lt;/code&gt; to a positive value the vehicle will turn left, and if you set it negative it will turn right.&lt;/li&gt;&#xA;&lt;li&gt;The code I wrote above just uses (unmodified) proportional error to drive the steering. This will probably give less-than-satisfactory results; consider instead using a PID controller:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;steeringError = steeringRef - steeringFbk;&#xA;steeringAdjustment = PID(steeringError,kP,kI,kD);    &#xA;setMotorSpeed(leftMotor, vehicleSpeed + steeringAdjustment);&#xA;setMotorSpeed(rightMotor, vehicleSpeed - steeringAdjustment);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Now, with PID gains, you can tune the system for the desired response time, overshoot, etc.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2016-02-10T14:19:21.963" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9149" PostTypeId="2" ParentId="9143" CreationDate="2016-02-10T16:53:05.523" Score="4" Body="&lt;p&gt;Let me put homotopy into the context of planning algorithms&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Suppose you want to get from point A to point B. Clearly, the easiest way is to traverse a straight line.  But if there is an obstacle in the way of this straight line path, what should you do?  If you want to obtain the &quot;optimal&quot; path (e.g. traversing the least total distance to the goal), you need only to travel in straight lines around the convex hull of the obstacle.  This forms a non-smooth, piecewise linear path.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, sometimes the &quot;path of least traversal&quot; is not the best path to take or may even be infeasible.  For example, what if you don't have omni-directional wheels or it's just impossible to pivot in place (e.g. you have ackermann steering).  Then, instead of traversing the straight line path along the convex hull, you need find some other optimal way to move around the obstacle.  By using homotopy, you can continuously move away from the optimal straight line path (around the obstacle) to a smoother path around the obstacle that your robot can actually take.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More generally, homotopy allows you to relax the constraints of the original problem so that you can solve an easier problem that almost gives the best solution to the original problem.  The key &quot;trick&quot; is to parameterize the problem so that in the limit as the parameter approaches zero, you get closer and closer to the original problem such that for any non-zero choice of the parameter, the &quot;perturbed&quot; problem is easier to solve. This is a very powerful tool for many problems, especially optimization problems where discreteness or non-smoothness make it very difficult to solve.   &lt;/p&gt;&#xA;" OwnerUserId="2295" LastEditorUserId="2295" LastEditDate="2016-02-10T19:10:35.620" LastActivityDate="2016-02-10T19:10:35.620" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9151" PostTypeId="2" ParentId="9132" CreationDate="2016-02-10T22:53:23.473" Score="0" Body="&lt;p&gt;&lt;strong&gt;Mapping With Coordinates Systems&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Suppose you have an robotic arm with 3 links:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/6ln9c.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6ln9c.png&quot; alt=&quot;robotic arm&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using generalized coordinates:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\hspace{2.5em}$ $\vec{q}$ = $[q_{1}\hspace{1em}q_{2}]^{T}$ $\hspace{1.5em}$ [Generalized coordinate]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We can evaluate the system as following:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/p3IRz.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/p3IRz.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The kinematic equation that maps the origin to point A is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\hspace{5.em}$ $_{o}\vec{r}_{OA}$ = $_{o}\vec{r}_{O1}$ + $_{o}\vec{r}_{12}$ + $_{o}\vec{r}_{2A}$ $\hspace{1.5em}$ [kinematic equation]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We have two rotations over joint 1 and 2. Substituting in the equation above:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\hspace{5.em}$ $_{o}\vec{r}_{OA}$ = $_{0}\vec{r}_{O1}$ + $R{(q_{1})_{01}}$ $ _{1}\vec{r}_{12}$ + $R{(q_{1}+q_{2})_{12}}$ $ _{2}\vec{r}_{2A}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where $R(\bullet)$ is the &lt;a href=&quot;https://en.wikipedia.org/wiki/Rotation_matrix&quot; rel=&quot;nofollow noreferrer&quot;&gt;rotation matrix&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If you want to map between point 1 to A:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;$\hspace{5.em}$ $_{1}\vec{r}_{1A}$ = $_{1}\vec{r}_{12}$ + $_{1}\vec{r}_{2A}$ $\hspace{1.5em}$ [New kinematic equation]&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;$\hspace{5.em}$ $_{1}\vec{r}_{1A}$ = $R{(q_{1})_{01}}$ $ _{1}\vec{r}_{12}$ + $R{(q_{1}+q_{2})_{12}}$ $ _{2}\vec{r}_{2A}$&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;It's pretty straightforward! For more on direct kinematics &lt;a href=&quot;http://www.diag.uniroma1.it/~deluca/rob1_en/09_DirectKinematics.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The term $R{(q_{1})_{01}}$ $ _{1}\vec{r}_{12}$ should be something like:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\hspace{5.em}$ $R{(q_{1})_{01}}$ $ _{1}\vec{r}_{12}$ = $\begin{bmatrix} cos(q_{1}) &amp;amp; -sin(q_{1}) &amp;amp; 0 \\ sin(q_{1}) &amp;amp; cos(q_{1}) &amp;amp;  0 \\ 0 &amp;amp; 0 &amp;amp; 1\end{bmatrix}$  $\begin{bmatrix} l_{1} \\ 0 \\ 0 \end{bmatrix}$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;With a little bit of algebra, you can achieve the answer:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\hspace{5.em}$ $ _{0}\vec{r}_{OA}$ = $\begin{bmatrix} l_{0} + l_{1}cos(q_{1}) + l_{2}cos(q_{1}+q_{2}) \\ 0 + l_{1}sin(q_{1}) + l_{2}sin(q_{1}+q_{2}) \\ 0 \end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That equation make possible to map all your system at any time relative to the origin.&lt;/p&gt;&#xA;" OwnerUserId="11582" LastActivityDate="2016-02-10T22:53:23.473" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9152" PostTypeId="1" AcceptedAnswerId="9153" CreationDate="2016-02-11T02:39:31.640" Score="3" ViewCount="276" Body="&lt;p&gt;I am working on a 6DOF robot arm project and I have one big question. When I first derived the inverse kinematics (IK) algorithm after decoupling (spherical wrist), I could easily get the equations based on nominal DH values, where alpha are either 0 or 90 degrees and there are many zeros in $a_i$ and $d_i$. However, after kinematics calibration, the identified DH parameters are no longer ideal ones with a certain small, but non-zero, bias added to the nominal values. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my question is, can the IK algorithm still be used with the actual DH parameters? If yes, definitely there will be end-effector errors in actual operation. If not, how should I change the IK algorithm? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S. I am working on a modular robot arm which means the DH bias could be bigger than those of traditional robot arms. &lt;/p&gt;&#xA;" OwnerUserId="11877" LastEditorUserId="110" LastEditDate="2016-02-11T19:27:46.367" LastActivityDate="2016-02-12T15:04:14.463" Title="Inverse kinematics after calibration" Tags="&lt;inverse-kinematics&gt;&lt;calibration&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9153" PostTypeId="2" ParentId="9152" CreationDate="2016-02-11T04:05:28.440" Score="4" Body="&lt;p&gt;The analytic inverse kinematics solutions you found do depend on those $0$ terms in your transformation matrices.   Those values are, as you've implied, based on the $0$ and $90$ degree values for the axes relationships.   The kinematic mapping process works for other $a_i$ and $d_i$ values, too, but it becomes difficult to find closed-form inverse solutions when those nice zeroes become other values.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The solution most often implemented is to use numerical solutions for the inverse kinematics after calibration.   The closed-form, analytic, inverse kinematics are a good starting estimate for the numerical solver, but you must then account for the as-built errors with some (often iterative) approach to find the actual joint angles given the EE pose.  There are many published approaches to the numerical solution methods.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT (Industrial robots):  For general-purpose industrial robots the above is rarely done.   Instead of calibrating to eliminate as-built errors in the kinematics, the robots are usually calibrated to align the task space coordinate system with the robot's base coordinate system (resulting in a single additional transformation matrix of constant values).  The end effector destination locations are then taught (in either task, end-effector, or joint coordinates).  Because they use a &quot;teach and repeat&quot; method of programming, the small errors in the calibration are absorbed by the teaching process.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additional calibrations of the robot may be accomplished by the robot manufacturer.  In my experience those calibrations generally set precise values for the link lengths and encoder home, or zero, values - but not joint axis offset angles.  It's possible that some robot manufacturers calibrate more precisely, then use numerical methods to find inverse solutions, but I have not seen this absolute precision needed in an industrial setting.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastEditorUserId="11125" LastEditDate="2016-02-11T07:08:13.320" LastActivityDate="2016-02-11T07:08:13.320" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="9155" PostTypeId="1" AcceptedAnswerId="9158" CreationDate="2016-02-11T06:25:36.523" Score="0" ViewCount="297" Body="&lt;p&gt;In catia .stl format is available only for part file not for assembly file. Please help how to import asembly in simmechanics&lt;/p&gt;&#xA;&#xA;&lt;p&gt;.CATProduct to .stl&#xA;Or Is there any other way to do?&lt;/p&gt;&#xA;" OwnerUserId="7474" LastActivityDate="2016-02-11T12:06:30.650" Title="How to import catia assembly to Matlab. Simmechanics" Tags="&lt;matlab&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9158" PostTypeId="2" ParentId="9155" CreationDate="2016-02-11T12:06:30.650" Score="0" Body="&lt;p&gt;An STL file converts a solid model to an approximation that is represented by a bunch of triangular faces. There is no way for an STL file to represent joints or any other motion constraints because it's simply not part of the file protocol. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This means that, if your assembly has motion constraints or movable parts that you &lt;em&gt;don't&lt;/em&gt; actually want to export that assembly to one STL file. Instead, you should export each part individually and then re-build the assembly in SimMechanics using the frame transforms and motion constraint blocks provided there. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I understand that this can be a (very) painful and tedious process, but unfortunately &lt;a href=&quot;http://www.mathworks.com/help/physmod/sm/ref/smimport.html&quot; rel=&quot;nofollow&quot;&gt;SimMechanics only supports SolidWorks, Inventor, and Pro/E&lt;/a&gt;  (stated in the tip at the bottom of the page).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, if you're using SimMechanics, I'd say there's a fair bet you're a student (because SimMechanics is EXPENSIVE given the perquisites) and Autodesk Inventor is free to students. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your model is only a few parts, it will probably be easiest to just reassemble it with the joint constraints. If it's especially detailed, you might be better off fusing the non-moving parts for a &quot;simulation model&quot; such that you do wind up with only a few parts. If you absolutely need to import an assembly that has a lot (probably over 10 would be a lot to me) of parts or you intend on importing models frequently then I would pursue acquiring Inventor or SolidWorks. SolidWorks is better but not free to students, but they have an education version that is less expensive than the commercial version. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-02-11T12:06:30.650" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9159" PostTypeId="1" CreationDate="2016-02-11T13:55:06.357" Score="3" ViewCount="578" Body="&lt;p&gt;Context: I have an IMU(a/g/m) + Wheel Odometry measurement data that I'm trying to fuse in order to localize a 2D (ackermann drive) robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The state vector &lt;code&gt;X = [x y yaw]&lt;/code&gt;.&#xA;I'm using the odometry data to propagate the state through time (no control input).&#xA;The update step includes the measurement vector &lt;code&gt;Z = [x_odo y_odo yaw_imu]&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have two questions:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1.Does it make sense to use the odometry data(v_linear, omega) in both the prediction as well as update steps?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2.How do I account for the frequency difference between the odometry data(10Hz) and the imu data(40Hz)? Do I run the filter at the lower frequency, do I dynamically change the matrix sizes or is there any other way?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="11849" LastActivityDate="2016-02-12T03:45:33.933" Title="Multi-Rate Sensor Fusion using EKF" Tags="&lt;localization&gt;&lt;wheeled-robot&gt;&lt;imu&gt;&lt;ekf&gt;&lt;odometry&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9160" PostTypeId="2" ParentId="9159" CreationDate="2016-02-11T20:00:22.960" Score="3" Body="&lt;p&gt;Part 1.  Use one or the other. Often odometery is used instead of kinematics or dynamics for prediction, at least in my work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Part 2.&#xA;This is handled by the construction of the measurement equation jacobian. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Every time a measurement comes in, construct a Jacobian for the whole state. You'll notice that some of the state elements are independent of the current measurement (vel sensor cannot measure position, e.g.). So, no need to resize the matrix, just run the ekf with some zeros in the jacobian.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Specifically, for &lt;em&gt;every incoming measurement&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Predict state from last update to the current &lt;/li&gt;&#xA;&lt;li&gt;Construct jacobian for current measurement type / equation &lt;/li&gt;&#xA;&lt;li&gt;Update state&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="163" LastActivityDate="2016-02-11T20:00:22.960" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9161" PostTypeId="1" CreationDate="2016-02-11T21:46:41.387" Score="1" ViewCount="197" Body="&lt;p&gt;I am programming a robot to drive over variable terrain obstacles autonomously. The variable terrain could potentially knock the robot off of its initial heading, but I would like to design an autonomous sequence to correct for any change in direction. I am using a very accurate sensor with compass and yaw. What is the best way to have it correct for any changes and maintain its heading? Side to side motion does not have to stay perfect, but the heading needs to stay the same.We are currently correcting it by overpowering one side of the wheels (depending on direction of correction needed) until the heading is correct again, but this seems to be a slightly antiquated method, so I'm looking for a cleaner and more smooth method.&lt;/p&gt;&#xA;" OwnerUserId="11887" LastActivityDate="2016-10-19T20:40:43.323" Title="Robot autonomous variable terrain with yaw sensor" Tags="&lt;compass&gt;&lt;automation&gt;" AnswerCount="2" CommentCount="1" ClosedDate="2016-10-20T15:23:09.693" ContentLicense="CC BY-SA 3.0" />
  <row Id="9162" PostTypeId="2" ParentId="9159" CreationDate="2016-02-12T03:45:33.933" Score="2" Body="&lt;p&gt;I've performed 2D localization with just odometry and a gyroscope before, and to be honest, depending on (i) how good your encoders are; (ii) what type of environment you're in (is there a chance your wheels will slip a lot); (iii) how good your IMU is, there's a good chance that you don't lose much by just using odometry for translation, and only calculating heading using the gyroscope. In other words, just update the position when you get an odometry measurement, and just update the heading when you get a gyroscope measurement (i.e., two prediction steps, no correction step). Practically speaking, you won't get much better results using a correction step when you aren't measuring the environment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That being said, I noticed that you didn't mention anything about using the magnetometer of your IMU to estimate the heading of the robot. If you are in a somewhat magnetically clean environment (i.e., you can somewhat reliably measure the Earth's magnetic field), then this measurement would be &lt;em&gt;extremely&lt;/em&gt; useful. &#xA;The reason why is because it is an &lt;em&gt;exteroceptive sensor&lt;/em&gt; (i.e., it's measuring the environment) and your other sensors (wheel encoders, gyroscope) are &lt;em&gt;interoceptive sensors&lt;/em&gt; (i.e., they measure the robot internally). With only interoceptive sensors measuring your heading, it is subject to dead reckoning and its uncertainty will increase without bounds. And as you know, if your heading becomes increasingly uncertain, so does your position. With an exteroceptive sensor measurement of your heading, its uncertainty becomes bounded.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's one way to set up your filter:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Each time you receive an odometry measurement (10 Hz), perform the prediction step to propagate your state forward.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Each time you receive an IMU measurement (40 Hz), perform a (different) prediction step to propagate your heading estimate forward by integrating the gyroscope, then perform a correction step to correct your heading using the magnetometer.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;To use the magnetometer in this way, you need to know the direction of the Earth's magnetic field in your local area (you can look this up online). Let's call this $m\in[-\pi,\pi)$. Now you get a measurement of the magnetic field $z_k\in[-\pi,\pi)$ from your magnetometer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your measurement model is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\hat{z}_k = m - \hat{\theta}_k&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $\hat{\theta}_k$ is your current heading estimate. &lt;strong&gt;Note:&lt;/strong&gt; you need to account for wrapping of the angles here! One way to do this is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\hat{z}_k = \text{atan2}(\sin(m - \hat{\theta}_k),\cos(m - \hat{\theta}_k))&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;but there are other ways as well. Then just proceed with the normal KF correction step.&lt;/p&gt;&#xA;" OwnerUserId="4320" LastActivityDate="2016-02-12T03:45:33.933" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9165" PostTypeId="2" ParentId="9152" CreationDate="2016-02-12T15:04:14.463" Score="0" Body="&lt;p&gt;You might want to try &lt;a href=&quot;http://openrave.org/docs/latest_stable/openravepy/ikfast/&quot; rel=&quot;nofollow&quot;&gt;IKFast&lt;/a&gt; in OpenRave.  It can supposedly handle &quot;robots with arbitrary joint complexity like non-intersecting axes&quot;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I had the same problem as you.  After kinematic calibration, my joint axes were no longer at right angles.  But when I tried my new robot kinematics in IKFast, it would crash and I was never able to get valid IK.  I had a 7 DOF arm on a 1 DOF torso though.  You might have better luck with a 6 DOF robot.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2016-02-12T15:04:14.463" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9166" PostTypeId="2" ParentId="9100" CreationDate="2016-02-12T20:45:45.543" Score="7" Body="&lt;p&gt;Yes.  As @hauptmech mentioned, you can use your forward kinematics to get the center of mass of each link in the base frame.  Then you can simply compute the &lt;em&gt;weighted&lt;/em&gt; average of the masses and positions to get the overall center of mass.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In other words:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;M = \sum_{i=0}^n m_i&#xA;$$&#xA;$$&#xA;\mathbf{P}_i^0 = pos( \mathbf{T}_i^0(\mathbf{q}) \mathbf{T}_{i_m}^i)&#xA;$$&#xA;$$&#xA;\mathbf{COM}^0 = \frac{1}{M} \sum_{i=0}^n m_i \mathbf{P}_i^0&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;$m_i$ = mass of link $i$&lt;/li&gt;&#xA;&lt;li&gt;$M$ = total mass&lt;/li&gt;&#xA;&lt;li&gt;$\mathbf{q}$ = vector of joint angles&lt;/li&gt;&#xA;&lt;li&gt;$\mathbf{T}_i^0$ = Transform from base frame $0$ to link $i$.  (The forward kinematics which is a function of $\mathbf{q}$).&lt;/li&gt;&#xA;&lt;li&gt;$\mathbf{T}_{i_m}^i$ = Transform from the link $i$ frame to it's center of mass.  &lt;/li&gt;&#xA;&lt;li&gt;$pos()$ = function to extract position vector from full transform.&lt;/li&gt;&#xA;&lt;li&gt;$\mathbf{P}_i^0$ = position of mass of link $i$ in base frame $0$.&lt;/li&gt;&#xA;&lt;li&gt;$\mathbf{COM}^0$ = center of mass of system in base frame $0$.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="110" LastActivityDate="2016-02-12T20:45:45.543" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9167" PostTypeId="1" AcceptedAnswerId="9193" CreationDate="2016-02-13T00:15:52.303" Score="4" ViewCount="619" Body="&lt;p&gt;I have a robot arm in an environment. How can I check for collision between this robot arm and the environment?&lt;/p&gt;&#xA;" OwnerUserId="11751" LastActivityDate="2016-02-22T15:46:52.633" Title="Check collision between robot and environment in OpenRAVE" Tags="&lt;robotic-arm&gt;&lt;motion-planning&gt;&lt;python&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9169" PostTypeId="1" AcceptedAnswerId="9173" CreationDate="2016-02-13T10:04:01.023" Score="2" ViewCount="2050" Body="&lt;p&gt;Good day,&lt;/p&gt;&#xA;&lt;p&gt;I had been recently reading up more on PID controllers and stumbled upon something called integral wind up. I am currently working on an autonomous quadcopter concentrating at the moment on PID tuning. I noticed that even with the setpoint of zero degrees reached in this video, the quadcopter would still occasionally overshoot a bit:  &lt;a href=&quot;https://youtu.be/XD8WgVFfEsM&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://youtu.be/XD8WgVFfEsM&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Here is the corresponding data testing the roll axis:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/gAatW.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gAatW.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I noticed that the I-error does not converge to zero and continues to increase:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/jS8oS.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/jS8oS.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Is this the integral wind-up?&lt;/p&gt;&#xA;&lt;p&gt;What is the most effective way to resolve this?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I have seen many implementations mainly focusing on limiting the output of the system by means of saturation. However I do not see this bringing the integral error eventually back to zero once the system is stable.&lt;/p&gt;&#xA;&lt;p&gt;Here is my current code implementation with the setpoint of 0 degrees:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;cout &amp;lt;&amp;lt; &amp;quot;Starting Quadcopter&amp;quot; &amp;lt;&amp;lt; endl;&#xA;&#xA;float baseThrottle = 155; //1510ms&#xA;float maxThrottle = 180; //This is the current set max throttle for the PITCH YAW and ROLL PID to give allowance to the altitude PWM. 205 is the maximum which is equivalent to 2000ms time high PWM &#xA;float baseCompensation = 0; //For the Altitude PID to be implemented later&#xA;&#xA;&#xA;delay(3000);&#xA;&#xA;float startTime=(float)getTickCount();&#xA;deltaTimeInit=(float)getTickCount(); //Starting value for first pass&#xA;&#xA;while(1){&#xA;//Read Sensor Data&#xA;readGyro(&amp;amp;gyroAngleArray);&#xA;readAccelMag(&amp;amp;accelmagAngleArray);&#xA;&#xA;//Time Stamp&#xA;//The while loop is used to get a consistent dt for the proper integration to obtain the correct gyroscope angles. I found that with a variable dt, it is impossible to obtain correct angles from the gyroscope.&#xA;&#xA;while( ( ((float)getTickCount()-deltaTimeInit) / ( ((float)getTickFrequency()) ) ) &amp;lt; 0.005){ //0.00209715|0.00419&#xA;       deltaTime2=((float)getTickCount()-deltaTimeInit)/(((float)getTickFrequency())); //Get Time Elapsed&#xA;       cout &amp;lt;&amp;lt; &amp;quot; DT endx = &amp;quot; &amp;lt;&amp;lt; deltaTime2 &amp;lt;&amp;lt; endl;&#xA;}&#xA;//deltaTime2=((float)getTickCount()-deltaTimeInit)/(((float)getTickFrequency())); //Get Time Elapsed&#xA;deltaTimeInit=(float)getTickCount(); //Start counting time elapsed&#xA;cout &amp;lt;&amp;lt; &amp;quot; DT end = &amp;quot; &amp;lt;&amp;lt; deltaTime2 &amp;lt;&amp;lt; endl;&#xA;&#xA;&#xA;//Complementary Filter&#xA;float pitchAngleCF=(alpha)*(pitchAngleCF+gyroAngleArray.Pitch*deltaTime2)+(1-alpha)*(accelmagAngleArray.Pitch);&#xA;float rollAngleCF=(alpha)*(rollAngleCF+gyroAngleArray.Roll*deltaTime2)+(1-alpha)*(accelmagAngleArray.Roll);&#xA;float yawAngleCF=(alpha)*(yawAngleCF+gyroAngleArray.Yaw*deltaTime2)+(1-alpha)*(accelmagAngleArray.Yaw);&#xA;&#xA;&#xA;//Calculate Orientation Error (current - target)&#xA;float pitchError = pitchAngleCF - pitchTarget;&#xA;pitchErrorSum += (pitchError*deltaTime2);&#xA;float pitchErrorDiff = pitchError - pitchPrevError;&#xA;pitchPrevError = pitchError;&#xA;&#xA;float rollError = rollAngleCF - rollTarget;&#xA;rollErrorSum += (rollError*deltaTime2);&#xA;float rollErrorDiff = rollError - rollPrevError;&#xA;rollPrevError = rollError;&#xA;&#xA;float yawError = yawAngleCF - yawTarget;&#xA;yawErrorSum += (yawError*deltaTime2);&#xA;float yawErrorDiff = yawError - yawPrevError;&#xA;yawPrevError = yawError;&#xA;&#xA;&#xA;//PID controller list&#xA;float pitchPID = pitchKp*pitchError + pitchKi*pitchErrorSum + pitchKd*pitchErrorDiff/deltaTime2;&#xA;float rollPID = rollKp*rollError + rollKi*rollErrorSum + rollKd*rollErrorDiff/deltaTime2;&#xA;float yawPID = yawKp*yawError + yawKi*yawErrorSum + yawKd*yawErrorDiff/deltaTime2;&#xA;&#xA;//Motor Control - Mixing    &#xA;//Motor Front Left (1)&#xA;float motorPwm1 =  -pitchPID + rollPID - yawPID + baseThrottle + baseCompensation;&#xA;&#xA;//Motor Front Right (2)&#xA;float motorPwm2 =  -pitchPID - rollPID + yawPID + baseThrottle + baseCompensation; &#xA;&#xA;//Motor Back Left (3)&#xA;float motorPwm3 = pitchPID + rollPID + yawPID + baseThrottle + baseCompensation; &#xA;&#xA;//Motor Back Right (4)&#xA;float motorPwm4 = pitchPID - rollPID - yawPID + baseThrottle + baseCompensation;&#xA;&#xA;&#xA; //Check if PWM is Saturating - This method is used to fill then trim the outputs of the pwm that gets fed into the gpioPWM() function to avoid exceeding the earlier set maximum throttle while maintaining the ratios of the 4 motor throttles. &#xA;    float motorPWM[4] = {motorPwm1, motorPwm2, motorPwm3, motorPwm4};&#xA;    float minPWM = motorPWM[0];&#xA;    int i;&#xA;    for(i=0; i&amp;lt;4; i++){ // Get minimum PWM for filling&#xA;        if(motorPWM[i]&amp;lt;minPWM){&#xA;            minPWM=motorPWM[i];&#xA;        }&#xA;    }&#xA;    &#xA;    cout &amp;lt;&amp;lt; &amp;quot; MinPWM = &amp;quot; &amp;lt;&amp;lt; minPWM &amp;lt;&amp;lt; endl;&#xA;&#xA;    if(minPWM&amp;lt;baseThrottle){&#xA;        float fillPwm=baseThrottle-minPWM; //Get deficiency and use this to fill all 4 motors&#xA;        cout &amp;lt;&amp;lt; &amp;quot; Fill = &amp;quot; &amp;lt;&amp;lt; fillPwm &amp;lt;&amp;lt; endl;&#xA;        motorPwm1=motorPwm1+fillPwm;&#xA;        motorPwm2=motorPwm2+fillPwm;&#xA;        motorPwm3=motorPwm3+fillPwm;&#xA;        motorPwm4=motorPwm4+fillPwm;&#xA;    }&#xA;&#xA;    float motorPWM2[4] = {motorPwm1, motorPwm2, motorPwm3, motorPwm4};&#xA;    float maxPWM = motorPWM2[0];&#xA;    for(i=0; i&amp;lt;4; i++){ // Get max PWM for trimming&#xA;        if(motorPWM2[i]&amp;gt;maxPWM){&#xA;            maxPWM=motorPWM2[i];&#xA;        }&#xA;    }&#xA;&#xA;    cout &amp;lt;&amp;lt; &amp;quot; MaxPWM = &amp;quot; &amp;lt;&amp;lt; maxPWM &amp;lt;&amp;lt; endl;&#xA;&#xA;    if(maxPWM&amp;gt;maxThrottle){&#xA;        float trimPwm=maxPWM-maxThrottle; //Get excess and use this to trim all 4 motors&#xA;        cout &amp;lt;&amp;lt; &amp;quot; Trim = &amp;quot; &amp;lt;&amp;lt; trimPwm &amp;lt;&amp;lt; endl;&#xA;        motorPwm1=motorPwm1-trimPwm;&#xA;        motorPwm2=motorPwm2-trimPwm;&#xA;        motorPwm3=motorPwm3-trimPwm;&#xA;        motorPwm4=motorPwm4-trimPwm;&#xA;    }&#xA;&#xA;//PWM Output&#xA;    gpioPWM(24,motorPwm1);  //1&#xA;    gpioPWM(17,motorPwm2);  //2&#xA;    gpioPWM(22,motorPwm3);  //3&#xA;    gpioPWM(18,motorPwm4);  //4&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="11311" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2016-02-13T17:12:16.297" Title="PID Control: Integral error does not converge to zero" Tags="&lt;control&gt;&lt;quadcopter&gt;&lt;pid&gt;&lt;stability&gt;&lt;tuning&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9171" PostTypeId="1" CreationDate="2016-02-13T12:17:09.370" Score="4" ViewCount="1650" Body="&lt;p&gt;&lt;strong&gt;Context&lt;/strong&gt;: I am working with the SFU Mountain Dataset&lt;a href=&quot;http://autonomylab.org/sfu-mountain-dataset/&quot; rel=&quot;nofollow noreferrer&quot;&gt; [http://autonomylab.org/sfu-mountain-dataset/]&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The UGV image - via the SFU Mountain Dataset website:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/exx7h.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/exx7h.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have used the following state update equations (Husky A200 - differential drive)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;State Update - from Prob. Robotics, Thrun et. al &lt;code&gt;[x' y' theta'] represent the state at the next time step&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/UAh17.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/UAh17.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/sVtB6.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/sVtB6.jpg&quot; alt=&quot;State Update - from Prob. Robotics, Thrun et. al.&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After plotting the x and y positions based on &lt;strong&gt;just&lt;/strong&gt; the wheel encoder data (v_fwd and w -&gt; the dataset provides these directly, instead on the vr and vl), the curve seems to be quite weird and unexpected.&#xA;Wheel Odometry Data - &lt;a href=&quot;http://autolab.cmpt.sfu.ca/files/datasets/sfu-mountain-workshop-version/sfu-mountain-torrent/encoder-dry-a.tgz&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://autolab.cmpt.sfu.ca/files/datasets/sfu-mountain-workshop-version/sfu-mountain-torrent/encoder-dry-a.tgz&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Blue - Wheel Odom  |  Red - GPS&#xA;&lt;a href=&quot;https://i.stack.imgur.com/zw32B.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zw32B.jpg&quot; alt=&quot;Blue - Wheel Odom  |  Red - GPS&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Actual path!&#xA;&lt;a href=&quot;https://i.stack.imgur.com/v6Fsf.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/v6Fsf.jpg&quot; alt=&quot;Actual path!&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Question&lt;/strong&gt;: Is the above curve expected (considering the inaccuracy of wheel odometry) or is there something I'm missing? If the wheel encoder data is that bad, will an EKF (odom + imu) even work?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS: I'm not worried about the EKF (update step) just as yet. What concerns me more is the horrible wheel odometry data.&lt;/p&gt;&#xA;" OwnerUserId="11849" LastEditorUserId="11849" LastEditDate="2016-02-13T22:31:18.553" LastActivityDate="2016-02-14T04:05:18.027" Title="Plotting location using wheel encoder data" Tags="&lt;localization&gt;&lt;wheeled-robot&gt;&lt;ekf&gt;&lt;odometry&gt;&lt;differential-drive&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9172" PostTypeId="2" ParentId="9169" CreationDate="2016-02-13T12:29:35.970" Score="1" Body="&lt;p&gt;When I look at your graphs of position error and integral error, I don't see any unexpected behaviors for a system which is not quite tuned well enough.   You are not showing integral windup nor saturation.   Make sure to use the integral loop of your controller only when holding at a steady-state position and you will avoid windup.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It looks like your value for $k_p$ needs to be increased, and possibly also $k_i$.   Disturbances are causing you to leave the steady-state position, and your system is not able to remain close enough to its steady-state position (or else you wouldn't be trying to improve the performance).   The $k_i$ and $k_p$ terms are your options for locking that position in tighter around the steady-state value.  How low do you want the steady state error band to go before you consider it acceptable behavior?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The integral response will be more sluggish than the position-loop response, so I would begin by increasing $k_p$ a bit, and contine to do so until you see the fist signs of unstable behavior, then back it off by 25 - 50%.    Then do the same for $k_i$, and see if those two gains squash your steady state error sufficiently.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2016-02-13T12:29:35.970" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9173" PostTypeId="2" ParentId="9169" CreationDate="2016-02-13T12:48:02.743" Score="4" Body="&lt;p&gt;I don't think this is related to integral windup at all.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I noticed that the I-error does not converge to zero&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That's a good thing, because it means your integral term is not useless.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The integral term is there to compensate for steady-state errors. If you set the integral gain to 0, you should see that your system never reaches the setpoint.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The I-error that builds up will fix that.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;and continues to increase&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I'm not sure if that's really the case. From the image that you posted it might as well converge to some constant value. Hence my request to let the system run for a longer period to see how the I-error behaves in the long run.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe there actually is something in your system that increases the steady-state error over time. I imagine that the increasing temperature of an electrical resistance (in the driver or the motor) might cause that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's somewhat hard to tell what the reason is because it's one PID for everything. If you had several (cascaded) controllers, you could locate the reason by looking at the individual controllers. In case of a rising electrical resistance due to rising temperature, that should be visible in the current controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;tl:dr;&lt;/strong&gt; There's a steady-state error in your system and the integral part of your controller compensates it. If that keeps growing, it means that the steady-state error is growing over time, which I think suggests that there's some kind of drift.&lt;/p&gt;&#xA;" OwnerUserId="9860" LastEditorUserId="9860" LastEditDate="2016-02-13T17:12:16.297" LastActivityDate="2016-02-13T17:12:16.297" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9174" PostTypeId="1" CreationDate="2016-02-13T16:54:44.403" Score="0" ViewCount="117" Body="&lt;p&gt;What kind of sensor I can use to identify which fruit it is (like mango or apple). Moreover, is there any sensor to identify different varieties of apples or mangoes. &lt;/p&gt;&#xA;" OwnerUserId="11900" LastEditorUserId="11761" LastEditDate="2016-02-14T12:49:28.363" LastActivityDate="2016-02-14T12:49:28.363" Title="What kind of sensor I can use to identify which fruit it is (like mango or apple)?" Tags="&lt;sensors&gt;" AnswerCount="1" CommentCount="5" ClosedDate="2016-02-15T12:18:49.200" ContentLicense="CC BY-SA 3.0" />
  <row Id="9175" PostTypeId="1" AcceptedAnswerId="9178" CreationDate="2016-02-13T19:27:20.780" Score="3" ViewCount="1190" Body="&lt;p&gt;I am trying to make custom parts that fit directly onto a servo. Doing this has proved more difficult than I've expected so far.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was hoping to avoid incorporating the provided servo horns into the 3D printed part, so I've been trying this method out. Below are images of my current test - a 3D printed attachment to the servo, with an indentation for an M3 nut (the servo accepts an M3 bolt) for attachment to the servo. The plastic ring doesn't have the spline (I can't print that level of detail I think) but is tight around it. The top piece attaches to a 3/8&quot; nut for use with the 3/8&quot; threaded rod I had laying around.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/T7Q8s.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/T7Q8s.png&quot; alt=&quot;The nut casing&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/LGIfh.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/LGIfh.png&quot; alt=&quot;The servo attachment piece - note the M3 nut indent&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So far, I'm having difficulty of this setup working with any level for torque and not just spinning in place.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So... is this the correct approach? Am I going to have to design a piece with the servo horn inside of it to get the servo to connect? Are there better approaches I haven't considered?&lt;/p&gt;&#xA;" OwnerUserId="11901" LastEditorUserId="9176" LastEditDate="2016-02-18T20:41:41.113" LastActivityDate="2016-02-20T08:11:50.923" Title="What is the best way to attach a 3D printed part to a servo for robotics use?" Tags="&lt;otherservos&gt;&lt;3d-printing&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9176" PostTypeId="2" ParentId="9171" CreationDate="2016-02-13T20:17:02.850" Score="1" Body="&lt;p&gt;Yes, I have experienced this. Wheel encoders are great for a second to second hint for an ekf predict step, but are generally awful for long term, long distance prediction. Odometery and imu can do better, but both are integrators and will accumulate error quickly. Add GPS, terrain features, or other global estimates for a real solution.&lt;/p&gt;&#xA;" OwnerUserId="163" LastActivityDate="2016-02-13T20:17:02.850" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9177" PostTypeId="2" ParentId="9171" CreationDate="2016-02-13T22:12:12.633" Score="2" Body="&lt;p&gt;Thanks for the update. Now it looks like $x_c$ and $y_c$ denote the origin/starting position, and $\theta$ is positive, measured CCW from the positive x-axis. Now I am even more concerned about the equations you're using. Consider just $x$. You have:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;x_k = x_{k-1} - \frac{v}{\omega} \sin{(\theta)} + \frac{v}{\omega} \sin{(\theta + \omega \Delta t)}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Consider the term $\frac{v}{\omega}$. If there is no yawing motion, $\omega = 0$, then what happens? That term is divide-by-zero. If $\omega$ happens to be &lt;em&gt;near&lt;/em&gt; zero, the term explodes to infinity. &lt;/li&gt;&#xA;&lt;li&gt;Consider #1 to not be broken, and imagine no yaw at a heading of $\theta = 0$, which means the vehicle is pointing in-line with the +x axis. However, assuming #1 is a non-issue, x values update directly proportional to $\sin{\theta}$, which evaluates to zero. That is, per the diagram and code provided, when the vehicle is in line with the x-axis it is not possible to change the x-coordinate of the vehicle. &lt;/li&gt;&#xA;&lt;li&gt;Ignoring #1 and #2 above, there is no time-dependency on the non-x terms. This means that, whether the sample frequency is 10Hz or 1000Hz, each sample will accumulate with the same weight. This is akin to me saying I've traveled another 60 miles every time I look at the speedometer in my car, &lt;em&gt;regardless of how frequently I check it&lt;/em&gt;. I (you) don't include &lt;em&gt;how long&lt;/em&gt; the vehicle has been at that speed, so any check of vehicle speed is improperly weighted.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Currently you only show (a picture of!) the algorithm you're using to generate positions. The more you can post the easier it is to help - the actual code would help the most.  &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2016-02-14T00:38:14.553" LastActivityDate="2016-02-14T00:38:14.553" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="9178" PostTypeId="2" ParentId="9175" CreationDate="2016-02-14T02:50:03.267" Score="2" Body="&lt;p&gt;Sounds more like a material/mechanics of materials problem to me. I'm assuming this is an FDM part, and the M3 nut is metal? The nut will have no trouble stripping this. FDM parts are far from 'full strength' parts, nearly all 3D printing is. There are too many 'spaces' inside of the print itself. This gets compounded by your design itself, since this part leaves quite a bit of room for leverage. See how the holes that allow the two piece of mate together are almost the same distance as the diameter of the nut? That is too far for a plastic part interfacing with a metal part. You need to picture an imaginary lever from the center of each of those six pins to the center of the nut, then another six levers from the center of the nut to each vertex of the nut. The plastic part is going to be able to exert far greater force than the nut, but the plastic will deform and the nut will not. The plastic is set up to destroy itself right now, and the nut will make itself a nice hole to spin inside of. Either figure out a way to get it made from metal, or decrease the size of the printed part. I would recommend metal if you can afford the weight and plan on applying any kind of torque to this system.  Get quotes from some rapid prototyping services or local machine shops to get a few of these made from steel, it will probably be cheaper than you think. Just be willing to work with them, and take their advice if they suggest a design change to aid in manufacturability.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All that said, you would be better off interfacing with the servo horn if you can fit it into your design IMO. It would be better able to handle any torque in the system, regardless of material.&lt;/p&gt;&#xA;" OwnerUserId="11762" LastActivityDate="2016-02-14T02:50:03.267" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9179" PostTypeId="2" ParentId="9171" CreationDate="2016-02-14T04:05:18.027" Score="3" Body="&lt;p&gt;A few things:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;I took a look at your data set. Did you make sure you used the time column correctly? The first entry is &quot;1429481388546050050&quot; without the decimal. To make it in seconds, it should be 1429481388.546050050.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Your motion model is fine (I've used it before, for people who want to see it derived, it is very similar to &lt;a href=&quot;http://rossum.sourceforge.net/papers/DiffSteer/#d5&quot; rel=&quot;nofollow&quot;&gt;this one&lt;/a&gt;). However, to avoid dividing by zero, you should be checking the value for angular velocity, and if it below a certain threshold, you need to change it to&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{bmatrix}&#xA;x_{k+1} \\ y_{k+1} \\ \theta_{k+1}&#xA;\end{bmatrix}&#xA;= &#xA;\begin{bmatrix}&#xA;x_k \\ y_k \\ \theta_k&#xA;\end{bmatrix}&#xA;+&#xA;\begin{bmatrix}&#xA;v_k\Delta t\cos(\theta_k) \\ v_k\Delta t\sin(\theta_k) \\ \omega_k\Delta t&#xA;\end{bmatrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;3&quot;&gt;&#xA;&lt;li&gt;&lt;p&gt;The wheel encoders on the Husky are actually pretty good. If you can get your hands on the raw data (i.e., the ticks), you might get a better result. However, this requires that it was somewhat well calibrated (i.e., how many ticks per metre of travel).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If this were an indoor test, I would tell you that yes, you should definitely get better results. But it looks like the Husky was travelling on pretty rough terrain. If you've compensated for the two things I mentioned, it might just be the tough environment!&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="4320" LastActivityDate="2016-02-14T04:05:18.027" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9180" PostTypeId="1" AcceptedAnswerId="9182" CreationDate="2016-02-14T04:28:58.663" Score="0" ViewCount="255" Body="&lt;p&gt;I've recently come across the concept of using information gain (or mutual information criteria) as a metric for minimizing entropy on a map to aid in robotic exploration. I have somewhat of a basic question about it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A lot of papers that talk about minimizing entropy consider an example case of something like a laser scanner and try to compute the 'next best pose' so that the maximum entropy reduction is achieved. Usually this is mentioned like &quot;information gain based approaches help finding the best spot to move the robot such that the most entropy is minimized using raycasting techniques, as opposed to frontier based exploration which is greedy&quot; etc. But I don't understand what the underlying reason is for information gain/entropy based exploration being better. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's say a robot in a room with three walls and open space in front. Because of range limitations, it can only see two walls: so in frontier based exploration, the robot has two choices; move towards the third wall and realize it's an obstacle, or move towards the open space and keep going. How does an information gain based method magically pick the open space frontier over the wall frontier? When we have no idea what's beyond our frontiers, how can raycasting even help?&lt;/p&gt;&#xA;" OwnerUserId="10310" LastActivityDate="2016-02-14T06:24:51.113" Title="How does information gain based exploration differ from frontier based?" Tags="&lt;mapping&gt;&lt;exploration&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9181" PostTypeId="2" ParentId="9174" CreationDate="2016-02-14T05:44:19.067" Score="2" Body="&lt;p&gt;To answer your question I can think of at least: RGB camera, NIR camera, laser scanner.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you do with the sensors is much more difficult, for example, you have an RGB image of a mango fruit on a tree, how do you find which pixels are mango and which are not (e.g. tree, sky, ground). This is an ongoing research topic in computer vision and agricultural robotics.  Some papers show results under controlled conditions (in a lab) or semi-controlled (using assumptions, shading and controlled lighting).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It really depends on the assumptions you can make, then you can match by colour, size and visual texture, amongst other properties.&lt;/p&gt;&#xA;" OwnerUserId="8859" LastActivityDate="2016-02-14T05:44:19.067" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9182" PostTypeId="2" ParentId="9180" CreationDate="2016-02-14T06:24:51.113" Score="3" Body="&lt;p&gt;Frontier based exploration is concerned primarily with exploring the physical space in order to produce an occupancy grid (or cost map) of the terrain traversibility. The control actions follow a set of rules which work empirically well (but not &lt;em&gt;theoretically optimally&lt;/em&gt;) to achieve for the frontier-exploration goal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Information-gain methods can be used to specify &lt;em&gt;any&lt;/em&gt; objective that you can model mathematically. Because they are probabilistic the prior beliefs of the system can also be modelled, which gives the system a better idea than a set of simple rules.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Take the example of the Mars Rover &lt;em&gt;Curiosity&lt;/em&gt; looking for stromatolites (fossilised bacteria) on an unexplored region of Mars:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A grid of 100x100 represents the area to be explored&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;For each point on the grid, the grid could be either a Ordinary rock, Interesting rock or Stromatolite (class labels $\{O, I, S\}$)&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;The roboticists work with the geologists to provide Curiosity with expert knowledge of geology concerning stromatolite discovery:&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;$P(x=S | x_n=I) = 0.05$, which means the probability of the grid at x being a stromatolite, given that any if x's neighbour is an Interesting rock, is 5%.&lt;/li&gt;&#xA;&lt;li&gt;$P(x=S | x_n=S) = 0.35$, similarly this encodes the domain knowledge that stromatolites occur spatially close to one another&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In such a system, the info-gain system would choose the action that would tell us the most about &lt;em&gt;the population of rock classes&lt;/em&gt; in this map, taking in to account the domain knowledge, sensor uncertainty model and current state of the map.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is contrasted to the frontier mapping method which &lt;em&gt;can only find the shape&lt;/em&gt; of the map, generally using non-probabilistic methods (probabilistic frontier-exploration exist).&lt;/p&gt;&#xA;" OwnerUserId="8859" LastActivityDate="2016-02-14T06:24:51.113" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9183" PostTypeId="1" CreationDate="2016-02-14T19:38:27.633" Score="2" ViewCount="130" Body="&lt;p&gt;Prediction of new landmarks are commonly expressed as:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;        Xm = Xr + r*cos(phi + theta_r),&#xA;        Ym = Yr + r*sin(phi + theta_r)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;However this is only true for point landmarks. What if I am extracting line feature?&lt;/p&gt;&#xA;" OwnerUserId="12906" LastEditorUserId="9176" LastEditDate="2016-02-15T12:19:33.093" LastActivityDate="2016-02-15T16:43:28.640" Title="EKF SLAM (prediction of new landmarks)" Tags="&lt;slam&gt;&lt;ekf&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9186" PostTypeId="1" AcceptedAnswerId="9209" CreationDate="2016-02-15T05:19:52.713" Score="9" ViewCount="675" Body="&lt;p&gt;I've read some &lt;a href=&quot;http://link.springer.com/chapter/10.1007%2F978-0-387-73137-7_14&quot; rel=&quot;noreferrer&quot;&gt;papers&lt;/a&gt; for controlling nonlinear systems (e.g. nonlinear pendulum). There are several approaches for targeting nonlinear systems. The most common ones are &lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Feedback_linearization&quot; rel=&quot;noreferrer&quot;&gt;feedback linearizaing&lt;/a&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Backstepping&quot; rel=&quot;noreferrer&quot;&gt;backstepping&lt;/a&gt;&lt;/strong&gt;, and &lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Sliding_mode_control&quot; rel=&quot;noreferrer&quot;&gt;sliding mode&lt;/a&gt;&lt;/strong&gt; controllers. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my case, I've done the theoretical and practical parts of controlling nonlinear model of a simple pendulum plus other manipulators problems in C++. For the pendulum, I've utilized a backstepping controller for solving the tracking task for the angular displacement and velocity. The results are &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\ddot{\theta} + (k/m) \dot{\theta} + (g/L) \sin\theta= u &#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $m=0.5, k=0.0001, L=.2$ and $g=9.81$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/yo9LV.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/yo9LV.png&quot; alt=&quot;Graph 1&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ljCHu.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ljCHu.png&quot; alt=&quot;Graph 2&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The results are good. However, tuning the controller is time consuming. The majority of papers use &lt;em&gt;genetic algorithms&lt;/em&gt; for tuning their controllers such as PD, PID, and backstepping controllers. &lt;em&gt;I'm clueless in this field and I hope someone sheds some light on this concept, preferable if there is a MATLAB sample for at least controlling a simple pendulum.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So far I've designed a simple GUI in C++/Qt in order to tune the controller manually. In the below picture, the response of the controller for step function. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/1MPVB.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1MPVB.jpg&quot; alt=&quot;Screenshot of GUI of the controller tuning application&quot;&gt;&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="9176" LastEditDate="2016-02-17T15:02:42.943" LastActivityDate="2016-02-19T08:53:27.180" Title="Using genetic algorithm for tuning controllers" Tags="&lt;control&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9187" PostTypeId="1" CreationDate="2016-02-14T16:07:52.010" Score="1" ViewCount="54" Body="&lt;p&gt;The goal is to have a non-invasive flow meter that I can clamp over hydraulic lines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a student of hydraulics, I ended up looking and poking around for a good way to make an ultrasonic flow sensor with Arduino and possibly the hc-sr04. Not married to either idea. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, I admit, I know nothing, but is it possible to do this?&lt;br&gt;&#xA;Is there an easier way?&lt;/p&gt;&#xA;" OwnerUserId="12908" OwnerDisplayName="Yippeethemagician" LastEditorUserId="12912" LastEditDate="2016-02-15T12:20:30.753" LastActivityDate="2016-02-15T12:20:30.753" Title="Ultrasonic flow sensor" Tags="&lt;ultrasonic-sensors&gt;" AnswerCount="0" CommentCount="5" ClosedDate="2016-02-15T14:43:31.523" ContentLicense="CC BY-SA 3.0" />
  <row Id="9189" PostTypeId="2" ParentId="9186" CreationDate="2016-02-15T14:00:31.680" Score="2" Body="&lt;p&gt;I am confused by what you are calling a genetic algorithm.  The PD, PID, &lt;em&gt;etc.,&lt;/em&gt; controllers are not heuristic nor stochastic methods, and they are not based on evolutionary algorithms.  They are, instead, deterministic algorithms intended to allow placement of poles and zeroes of a system response to provide desired performance (error minimization, speed of response, settling time, stability, and disturbance rejection).  A good learning reference, in my opinion, is Kuo's &lt;em&gt;Automatic Control Systems&lt;/em&gt; book.  You can find a less rigorous treatment in Raven's &lt;em&gt;Automatic Control Engineering&lt;/em&gt; book.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2016-02-15T14:00:31.680" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9190" PostTypeId="2" ParentId="9186" CreationDate="2016-02-15T16:17:53.883" Score="8" Body="&lt;p&gt;Genetic algorithms are a machine learning technique to remove the need for a user to 'fine tune' a system, and instead allow a computer to figure out how to tune the system. The benefits of this approach are that it frees up the researchers/users time and often can lead to a system that is tuned better than what the researcher/user would have been able to achieve themselves. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The general idea of using a genetic algorithm would follow some basic control flow as follow: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Create_X_Number_Of_Random_Controllers()&#xA;while (Not_Yet_Satisfied_With_tuning)&#xA;    Score_Each_Controller_Based_On_Performance()&#xA;    Remove_Lowest_Performing_Controllers()&#xA;    Create_New_Controllers_By_Mixing_Best_Performers()&#xA;    Add_Slight_Randomness_For_Evolution()&#xA;Display_Top_Performer()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The best example I can easily show of this principle in practice is this 'game' that uses genetic evolution to design vehicles that are capable of driving over a course. The same idea applies to any system you want to fine tune without having to actual do any tuning yourself. &#xA;Example: &lt;a href=&quot;http://rednuht.org/genetic_cars_2/&quot;&gt;http://rednuht.org/genetic_cars_2/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="12913" LastActivityDate="2016-02-15T16:17:53.883" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="9191" PostTypeId="2" ParentId="9183" CreationDate="2016-02-15T16:43:28.640" Score="1" Body="&lt;p&gt;This is true because landmarks are often encapsulated by just their coordinates. It's a toy example. In real life, you'd have to use all the parameters necessary to encapsulate the information about the line feature. For example. Lines are often represented by a point and orientation. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;here's an &lt;a href=&quot;http://link.springer.com/article/10.1007%2Fs10514-007-9050-y&quot; rel=&quot;nofollow&quot;&gt;example&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="163" LastActivityDate="2016-02-15T16:43:28.640" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9193" PostTypeId="2" ParentId="9167" CreationDate="2016-02-15T20:54:02.090" Score="4" Body="&lt;p&gt;It's really easy.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;env = openravepy.Environment()&#xA;env.StopSimulation()&#xA;env.Load('_ArmFileName'_.xml') #Whatever .xml file you're using&#xA;robot = env.GetRobots()[0]&#xA;manip = robot.SetActiveManipulator('left_arm') #whatever arm you're using&#xA;robot.SetDOFValues(joint_values, manip.GetArmIndices())&#xA;env.CheckCollision(robot)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where joint_values is the an array of the joint values that you want. For example, if I was working on the Baxter robot, then I'd make an array of length 7 (7 DOF arm) with each value being values within Baxter's min/max joint values. Also note that you need to specify in the xml that your robot has the appropriate arm.&lt;/p&gt;&#xA;" OwnerUserId="11004" LastActivityDate="2016-02-15T20:54:02.090" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9195" PostTypeId="1" CreationDate="2016-02-16T19:58:02.873" Score="2" ViewCount="4916" Body="&lt;p&gt;I have created a robot model in solidworks and exported in solidworks to urdf plug-in. When exporting the co-ordinates of the model is misaligned which is causing problem while using in ROS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/xGkyg.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xGkyg.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you could see in picture the Z-axis is horizontal in assembly whereas vertical in solidworks. How to align these co-ordinates. The generated co-ordinate system must be similar to solidworks' co-ordinates&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS: I have mated the assembly origin and base_link origin&lt;/p&gt;&#xA;" OwnerUserId="9856" LastEditorUserId="9856" LastEditDate="2016-02-16T20:13:24.683" LastActivityDate="2016-02-16T22:19:05.903" Title="How to align solidworks global origin with assembly origin while exporting in solidworks to urdf" Tags="&lt;mobile-robot&gt;&lt;ros&gt;&lt;navigation&gt;&lt;odometry&gt;&lt;gazebo&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9197" PostTypeId="2" ParentId="9195" CreationDate="2016-02-16T22:19:05.903" Score="5" Body="&lt;p&gt;I did a little step-by-step tutorial with images, but if &lt;a href=&quot;https://robotics.stackexchange.com/a/8869/9720&quot;&gt;my other answer&lt;/a&gt; regarding aligning frames didn't work well for you, or the definition of &quot;Front Plane&quot; or &quot;Top Plane&quot; is confusing in Solidworks (spoiler: it is), then consider making your own axes. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the assembly tab, go to reference geometry -&gt; axis, then select the &lt;em&gt;assembly planes&lt;/em&gt; to make an axis. There are three possible combinations of planes, giving you three unique axes (1-2, 1-3, 2-3). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, compare the axes to the global axes, and &lt;strong&gt;rename them&lt;/strong&gt; to the same for clarity later.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, delete the old mates that are keeping the assembly grounded, then re-mate whatever lines you have that determine a particular frame to your newly-named axes you just made. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This should fix the problem for you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Yj79E.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Yj79E.png&quot; alt=&quot;Step 1&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gAMiW.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gAMiW.png&quot; alt=&quot;Step 2&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/mDk8g.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/mDk8g.png&quot; alt=&quot;Step 3&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Jtejm.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Jtejm.png&quot; alt=&quot;Step 4&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gOXZJ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gOXZJ.png&quot; alt=&quot;Step 5&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/wwSSM.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wwSSM.png&quot; alt=&quot;Step 6&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2016-02-16T22:19:05.903" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="9198" PostTypeId="2" ParentId="8337" CreationDate="2016-02-17T01:46:21.713" Score="3" Body="&lt;p&gt;Currently FRI can only be controlled in C++. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Java is also necessary to initialize the FRI interface. The C++ code if found in a file called &lt;code&gt;FRI-Client-SDK_Cpp.zip&lt;/code&gt; which is included in the kuka connectivity suite. You need to go in the menus to the software components and check the box that enables FRI (fast robot interface). Look in the docs for how to enable/disable software components. Enabling the FRI component will dump this zip file into a folder within your sunrise project for you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may just want to try using the &lt;a href=&quot;https://github.com/ahundt/grl/&quot; rel=&quot;nofollow noreferrer&quot;&gt;grl library&lt;/a&gt; itself because it provides an easier to use FRI wrapper. It isn't 100% perfect but is has run successfully for the FRI position motion case. Please note that some manual patching of &lt;code&gt;FRI-Client-SDK_Cpp.zip&lt;/code&gt; is necessary to build the grl kuka drivers because distribution of the zip file itself isn't yet allowed. Disclaimer: I'm the author of grl.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is &lt;a href=&quot;https://github.com/ahundt/grl/tree/master/src/java/grl/src/grl/friCommunication&quot; rel=&quot;nofollow noreferrer&quot;&gt;grl Java code for starting FRI&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Source that calls HoldPosition then drives via FRI exclusively:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;package grl.friCommunication;&#xA;&#xA;import static com.kuka.roboticsAPI.motionModel.BasicMotions.ptp;&#xA;&#xA;import java.util.concurrent.TimeUnit;&#xA;import java.util.concurrent.TimeoutException;&#xA;&#xA;import com.kuka.connectivity.fri.FRIConfiguration;&#xA;import com.kuka.connectivity.fri.FRIJointOverlay;&#xA;import com.kuka.connectivity.fri.FRISession;&#xA;import com.kuka.roboticsAPI.applicationModel.RoboticsAPIApplication;&#xA;import com.kuka.roboticsAPI.controllerModel.Controller;&#xA;import com.kuka.roboticsAPI.deviceModel.LBR;&#xA;&#xA;/**&#xA; * Creates a FRI Session.&#xA; */&#xA;public class FRI_Command extends RoboticsAPIApplication&#xA;{&#xA;    private Controller _lbrController;&#xA;    private LBR _lbr;&#xA;    private String _hostName;&#xA;&#xA;    @Override&#xA;    public void initialize()&#xA;    {&#xA;        _lbrController = (Controller) getContext().getControllers().toArray()[0];&#xA;        _lbr = (LBR) _lbrController.getDevices().toArray()[0];&#xA;        // **********************************************************************&#xA;        // *** change next line to the FRIClient's IP address                 ***&#xA;        // **********************************************************************&#xA;        _hostName =  &quot;192.170.10.100&quot;;&#xA;    }&#xA;&#xA;    @Override&#xA;    public void run()&#xA;    {&#xA;        // configure and start FRI session&#xA;        FRIConfiguration friConfiguration = FRIConfiguration.createRemoteConfiguration(_lbr, _hostName);&#xA;        friConfiguration.setSendPeriodMilliSec(10);&#xA;        FRISession friSession = new FRISession(friConfiguration);&#xA;        FRIJointOverlay motionOverlay = new FRIJointOverlay(friSession);&#xA;&#xA;&#xA;        // wait until FRI session is ready to switch to command mode&#xA;        try&#xA;        {&#xA;            friSession.await(10, TimeUnit.SECONDS);&#xA;        }&#xA;        catch (final TimeoutException e)&#xA;        {&#xA;            return;&#xA;        }&#xA;&#xA;        // move to start pose&#xA;        _lbr.move(ptp(Math.toRadians(90), .0, .0, Math.toRadians(90), .0, Math.toRadians(90), .0));&#xA;&#xA;         for(int i = 0; i &amp;lt; 100; i++) {&#xA;             // async move with overlay ...&#xA;             _lbr.moveAsync(ptp(Math.toRadians(90), .0, .0, Math.toRadians(90), .0, Math.toRadians(90), .0)&#xA;                     //.setJointVelocityRel(0.0)&#xA;                     .addMotionOverlay(motionOverlay)&#xA;                     .setBlendingRel(0.0)&#xA;                     );&#xA;&#xA;             // ... blending into sync move with overlay&#xA;             _lbr.moveAsync(ptp(Math.toRadians(90), .0, .0, Math.toRadians(90), .0, Math.toRadians(-90), .0)&#xA;                     //.setJointVelocityRel(0.0)&#xA;                     .addMotionOverlay(motionOverlay)&#xA;                     .setBlendingRel(0.0)&#xA;                     );&#xA;         }&#xA;&#xA;        _lbr.move(ptp(Math.toRadians(90), .0, .0, Math.toRadians(90), .0, Math.toRadians(-90), .0)&#xA;                .addMotionOverlay(motionOverlay)&#xA;                );&#xA;        // done&#xA;        friSession.close();&#xA;    }&#xA;&#xA;    /**&#xA;     * main.&#xA;     * &#xA;     * @param args&#xA;     *            args&#xA;     */&#xA;    public static void main(final String[] args)&#xA;    {&#xA;        final FRI_Command app = new FRI_Command();&#xA;        app.runApplication();&#xA;    }&#xA;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;FRI code is available &lt;a href=&quot;https://github.com/ahundt/grl&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/ahundt/grl&lt;/a&gt;. Disclosure: I'm the author of grl.&lt;/p&gt;&#xA;" OwnerUserId="304" LastEditorUserId="304" LastEditDate="2018-12-19T17:30:30.120" LastActivityDate="2018-12-19T17:30:30.120" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9200" PostTypeId="1" AcceptedAnswerId="9202" CreationDate="2016-02-17T13:51:54.473" Score="5" ViewCount="910" Body="&lt;p&gt;I am trying to implement the Vector Field Histogram as described by &lt;a href=&quot;http://www.cs.cmu.edu/~motionplanning/papers/sbp_papers/integrated1/borenstein_VFHisto.pdf&quot;&gt;Borenstein, Koren, 1991&lt;/a&gt; in Python 2.7 using the &lt;a href=&quot;https://scipy.org/&quot;&gt;SciPy stack&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have already been able to calculate the polar histogram, as described in the paper, as well as the smoothing function to eliminate noise. This variable is stored in a numpy array, named &lt;code&gt;self.Hist&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the function &lt;code&gt;computeTheta&lt;/code&gt;, pasted below, which computes the steering direction, is only able to compute the proper direction if the valleys (i.e. consecutive sectors in the polar histogram whose obstacle density is below a certain threshold) do not contain the section where a full circle is completed, i.e. the sector corresponding to &lt;code&gt;360º&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To make things clearer, consider these two examples: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If the histogram contains a peak in the angles between, say, &lt;code&gt;330º&lt;/code&gt; and &lt;code&gt;30º&lt;/code&gt;, with the rest of the histogram being a valley, then the steering direction will be computed correctly.&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If, however, the peak is contained between, say, &lt;code&gt;30º&lt;/code&gt; and &lt;code&gt;60º&lt;/code&gt;, then the valley will start at &lt;code&gt;60º&lt;/code&gt;, go all the way past &lt;code&gt;360º&lt;/code&gt; and end in &lt;code&gt;30º&lt;/code&gt;, and the steering direction will be computed incorrectly, since this single valley will be considered two valleys, one between &lt;code&gt;0º&lt;/code&gt; and &lt;code&gt;30º&lt;/code&gt;, and another between &lt;code&gt;60º&lt;/code&gt; and &lt;code&gt;360º&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;def computeTheta(self, goal):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;thrs = 2.&#xA;s_max = 18&#xA;&#xA;&#xA;#We start by calculating the sector corresponding to the direction of the target.&#xA;target_sector = int((180./np.pi)*np.arctan2(goal[1] - self.VCP[1], goal[0] - self.VCP[0]))&#xA;if target_sector &amp;lt; 0:&#xA;    target_sector += 360&#xA;target_sector /= 5&#xA;&#xA;#Next, we assume there is no best sector.&#xA;best_sector = -1&#xA;dist_best_and_target = abs(target_sector - best_sector)&#xA;&#xA;#Then,  we find the sector within a valley that is closest to the target sector.&#xA;for k in range(self.Hist.shape[0]):&#xA;    if self.Hist[k] &amp;lt; thrs and abs(target_sector - k) &amp;lt; dist_best_and_target:&#xA;        best_sector = k&#xA;        dist_best_and_target = abs(target_sector - k)&#xA;&#xA;#If the sector is still -1, we return it as an error.&#xA;print (target_sector, best_sector)&#xA;if best_sector == -1:&#xA;    return -1&#xA;&#xA;#If not, we can proceed...&#xA;elif best_sector &amp;gt; -1:&#xA;    #... by deciding whether the valley to which the best sector belongs is a &quot;wide&quot; or a &quot;narrow&quot; one.&#xA;    #Assume it's wide.&#xA;    type_of_valley = &quot;Wide&quot;&#xA;&#xA;    #If we find a sector that contradicts our assumption, we change our minds.&#xA;    for sector in range(best_sector, best_sector + s_max + 1):&#xA;        if sector &amp;lt; self.Hist.shape[0]:&#xA;            if self.Hist[sector] &amp;gt; thrs:&#xA;                type_of_valley = &quot;Narrow&quot; &#xA;&#xA;    #If it is indeed a wide valley, we return the angle corresponding to the sector (k_n + s_max)/2.&#xA;    if type_of_valley == &quot;Wide&quot;:&#xA;&#xA;        theta = 5*(best_sector + s_max)/2&#xA;        return theta&#xA;&#xA;    #Otherwise, we find the far border of the valley and return the angle corresponding to the mean value between the best sector and the far border.&#xA;    elif type_of_valley == &quot;Narrow&quot;:&#xA;        for sector in range(best_sector, best_sector + s_max):&#xA;            if self.Hist[sector] &amp;lt; thrs:&#xA;                far_border = sector&#xA;&#xA;        theta = 5*(best_sector + far_border)/2&#xA;        return theta&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;How can I address this issue? Is there a way to treat the histogram as circular? Is there maybe a better way to write this function?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you for your time.&lt;/p&gt;&#xA;" OwnerUserId="9136" LastActivityDate="2016-02-17T14:49:43.443" Title="A Vector Field Histogram implementation in Python 2.7" Tags="&lt;motion-planning&gt;&lt;python&gt;&lt;planning&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="9201" PostTypeId="2" ParentId="9200" CreationDate="2016-02-17T14:42:06.537" Score="0" Body="&lt;p&gt;Because you are using Python's arctan2 function (which returns values between $[-\pi, \pi]$), I don't see why you need to normalize the target sector angle using&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;if target_sector &amp;lt; 0:&#xA;    target_sector += 360&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2016-02-17T14:42:06.537" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="9202" PostTypeId="2" ParentId="9200" CreationDate="2016-02-17T14:49:43.443" Score="2" Body="&lt;p&gt;I'm having a hard time following your code, partly because I don't know Python but I think mostly because I'm not sure I understand your variables. That said, I think I &lt;em&gt;do&lt;/em&gt; understand your problem. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;An approach I would take to solve this would be to &quot;warp&quot; the data before evaluation, then make your decisions, then &quot;de-warp&quot; the output. For example, consider the following pseudo-code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;headingOffset = 0;&#xA;while(histogram[0] != peak)&#xA;    headingOffset = headingOffset + 1;&#xA;    histogram = CircularShift(histogram, -1);&#xA;end&#xA;&#xA;&amp;lt;find heading&amp;gt;&#xA;heading = CircularShift(heading,+headingOffset);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Hopefully I've made this clear; basically, re-orient your data such that you always start at a peak. This will ensure a valley always ends &amp;lt;= 360 degrees. Then, once you find your heading, shift it according to how far you shifted your data to start with.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-02-17T14:49:43.443" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9203" PostTypeId="1" CreationDate="2016-02-17T21:35:20.130" Score="0" ViewCount="132" Body="&lt;p&gt;I've hacked a rc helicopter, and I am able to control it by running a program on my computer. I am interested in writing algorithms that will stabilize the helicopter. For instance, the helicopter is hovering, and then if it is shoved off balance it can return to its previous position in a stable state. Any help on an algorithm would be awesome.&lt;/p&gt;&#xA;" OwnerUserId="12937" LastActivityDate="2016-02-18T01:21:38.317" Title="Helicopter Stabilization Algorithm" Tags="&lt;algorithm&gt;&lt;stability&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9204" PostTypeId="2" ParentId="9203" CreationDate="2016-02-18T01:21:38.317" Score="3" Body="&lt;p&gt;Stabilization of a helicopter and a quadrotor are similar tasks - have a reference signal, compare that to feedback, then act on the difference.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A quad rotor has four motors, and the helicopter arguably does as well: main rotor, tail rotor, swash plate fore/aft servo, swash plate port/stbd servo.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would bet you can find a helicopter community that could point you to stabilization algorithms specific to helicopters, but it might be easier to build on the (freely available and widely published) resources available for quadrotors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For instance, you'll need to communicate with a transmitter. Clearly you have that already. You'll need some form of an IMU; a microcontroller to communicate with that, the receiver, and the motors; electronic speed controllers if you find overriding the existing circuit is too difficult; etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you've got all that, you'll need the code to interface with all of the above. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only difference really comes down to your model of how a particular control axis affects the motion of the vehicle. You could do modeling in state space, but I think most quadrotors just use PID control on each axis and tune the gains to achieve the desired response. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can do the same; there will only be a small change. A quadrotor use PID controllers on each axis and then sums those outputs to give values for each motor, because the motions are coupled. Your roll, pitch, yaw, and thrust are all separate, so each controller runs its own motor/servo - no summing. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, tl;dr - use widely available quadrotor framework, assign each axis to one motor, then do some PID tuning. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-02-18T01:21:38.317" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9206" PostTypeId="1" AcceptedAnswerId="9207" CreationDate="2016-02-18T15:44:22.193" Score="2" ViewCount="13563" Body="&lt;p&gt;My iRobot Create is playing a tune about every 30 seconds and continuously flashing a red light when I attempt to charge it. What is the issue?&lt;/p&gt;&#xA;" OwnerUserId="12945" LastEditorUserId="110" LastEditDate="2016-02-20T15:46:44.330" LastActivityDate="2018-02-16T00:33:59.840" Title="iRobot Create: Making Noise and Flashing Red Light While Charging" Tags="&lt;irobot-create&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9207" PostTypeId="2" ParentId="9206" CreationDate="2016-02-18T16:48:34.190" Score="4" Body="&lt;p&gt;From the iRobot support site, &lt;a href=&quot;http://homesupport.irobot.com/app/answers/detail/a_id/231/~/list-of-roomba-400%2Fdiscovery-error-codes.&quot; rel=&quot;nofollow noreferrer&quot;&gt;List of Roomba 400/Discovery error codes&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;As Roomba cleans, it communicates with songs, beeps, and indicator lights. It also uses sounds to let you know when there's a problem or it needs maintenance. Here are the most common error codes and what they mean. If the problem cannot be resolved, contact &lt;a href=&quot;http://homesupport.irobot.com/app/ask&quot; rel=&quot;nofollow noreferrer&quot;&gt;iRobot Customer Care&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Your particular issue, if the tune being played is a 4-note tune (in conjunction with the flashing Power Button red LED, is due to a low battery which requires charging:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/HXFB1.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HXFB1.png&quot; alt=&quot;iRobot Low battery error&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As it says:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Connect Roomba to a battery charger (or Home Base) and recharge the battery.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As your iRobot is continuously making this tune, even whilst charging, this would suggest that either:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the battery is not taking on any charge (i.e. it is dead), or;&lt;/li&gt;&#xA;&lt;li&gt;the charging circuitry (within the iRobot) is not detecting the charge current, and assumes that it is not plugged in. As a sanity check, verify that the charger is working, and that the connections are OK. Otherwise, maybe the charging circuit is defective, and needs maintenance, or replacing?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This is what should happen, during the charge cycle: &lt;a href=&quot;http://homesupport.irobot.com/app/answers/detail/a_id/648/related/1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Roomba 400 Series/Discovery Battery and Charging Overview&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Under normal conditions, Roomba should charge in this manner:&lt;/p&gt;&#xA;  &#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;Your Battery Charger should have a solid green light on when it is plugged into a wall outlet charging Roomba.&lt;/li&gt;&#xA;  &lt;li&gt;Your Home Base, if you have one, should have two solid green lights (one for Power and one for Docked) when it is plugged into the Charger&#xA;  and Roomba is charging.&lt;/li&gt;&#xA;  &lt;li&gt;Your Roomba’s POWER light should pulse red/amber while charging. Charging time under normal conditions is between 3 – 6 hours depending&#xA;  on your Battery Charger. Charging could take up to 16 hours if your&#xA;  battery is deeply discharged at the beginning of the charge cycle.&lt;/li&gt;&#xA;  &lt;li&gt;When the charging cycle is complete, the POWER light on Roomba will turn solid green.&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;  &#xA;  &lt;p&gt;While Roomba is running, the POWER light will display the state of the&#xA;  battery as follows:&lt;/p&gt;&#xA;  &#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;Green - fully charged&lt;/li&gt;&#xA;  &lt;li&gt;Amber - partially discharged&lt;/li&gt;&#xA;  &lt;li&gt;Red - nearly discharged&lt;/li&gt;&#xA;  &lt;li&gt;Flashing Red - discharged&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;  &#xA;  &lt;p&gt;Always store Roomba charging on the Home Base or with the Charger&#xA;  plugged into the robot. For long-term storage, iRobot recommends that&#xA;  the battery be fully charged and then removed from the robot and&#xA;  stored in a cool, dry place.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="9176" LastEditorUserId="9176" LastEditDate="2016-02-18T18:00:49.400" LastActivityDate="2016-02-18T18:00:49.400" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9209" PostTypeId="2" ParentId="9186" CreationDate="2016-02-19T08:53:27.180" Score="1" Body="&lt;p&gt;Using evolutionary methods (GA is one of them) for parameter tuning is indeed a common method [1] in the control domain. Especially for non-linear systems, the analytic solutions for optimal parameters can be difficult to find. Evolutionary methods are one way to efficiently perform a search for near-optimal parameters. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A very successful and universal method that is widely used is &lt;a href=&quot;https://en.wikipedia.org/wiki/CMA-ES&quot; rel=&quot;nofollow&quot;&gt;CMA-ES&lt;/a&gt;. There are a large number of &lt;a href=&quot;https://www.lri.fr/~hansen/cmaes_inmatlab.html&quot; rel=&quot;nofollow&quot;&gt;implementations&lt;/a&gt; out there, including for MATLAB. I know that pole balancing in its various forms is often used as a benchmark. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Applying the algorithm is usually not that difficult. Rating the performance of your result - this is called the fitness function in EA - is usually the most involved part.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[1] P.J Fleming, R.C Purshouse, Evolutionary algorithms in control systems engineering: a survey, Control Engineering Practice, Volume 10, Issue 11, November 2002, Pages 1223-1241, ISSN 0967-0661, &lt;a href=&quot;http://dx.doi.org/10.1016/S0967-0661(02)00081-3&quot; rel=&quot;nofollow&quot;&gt;http://dx.doi.org/10.1016/S0967-0661(02)00081-3&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="127" LastActivityDate="2016-02-19T08:53:27.180" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9210" PostTypeId="1" CreationDate="2016-02-19T11:39:37.400" Score="1" ViewCount="146" Body="&lt;p&gt;I am working with a sampling based planning library. When I looked into the implementation, I found for kinematic car a SE2 state space(x, y, yaw), for dynamic car a SE2 compound state space (space allowing composition of state spaces), for blimp and quadrotor a SE3 compound state space was used. I could understand the design of SE2 and SE3 state spaces but the compound state spaces of dynamic car, blimp and quadrotor I could not comprehend or differentiate.&lt;/p&gt;&#xA;&lt;p&gt;What is the difference in terms of state space for motion planning for kinematic car, dynamic car, blimp, and quadrotor?&lt;/p&gt;&#xA;" OwnerUserId="8916" LastEditorUserId="19515" LastEditDate="2020-07-25T00:36:58.793" LastActivityDate="2020-07-25T00:36:58.793" Title="What is the difference between planning for kinematic car, dynamic car, blimp, and quadrotor?" Tags="&lt;mobile-robot&gt;&lt;quadcopter&gt;&lt;motion-planning&gt;" AnswerCount="0" CommentCount="9" ClosedDate="2016-02-24T19:34:17.710" ContentLicense="CC BY-SA 4.0" />
  <row Id="9213" PostTypeId="2" ParentId="3137" CreationDate="2016-02-20T04:18:55.797" Score="3" Body="&lt;p&gt;This paper, &lt;a href=&quot;http://www.nt.ntnu.no/users/skoge/prost/proceedings/ecc-2013/data/papers/0927.pdf&quot; rel=&quot;nofollow&quot;&gt;Full Quaternion Based Attitude Control for a Quadrotor&lt;/a&gt; by&#xA;Emil Fresk and George Nikolakopoulos, demonstrates what you are trying to achieve.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;em&gt;Abstract&lt;/em&gt;— The aim of this article is to present a novel quaternion based control scheme for the attitude control problem of a quadrotor.&#xA;  A quaternion is a hyper complex number of rank 4 that can be utilized&#xA;  to avoid the inherent geometrical singularity when representing rigid&#xA;  body dynamics with Euler angles or the complexity of having coupled&#xA;  differential equations with the Direction Cosine Matrix (DCM). In the&#xA;  presented approach both the quadrotor’s attitude model and the&#xA;  proposed non-linear Proportional squared (&lt;em&gt;P&lt;sup&gt;2&lt;/sup&gt;&lt;/em&gt;) control&#xA;  algorithm have been implemented in the quaternion space, without any&#xA;  transformations and calculations in the Euler’s angle space or DCM.&#xA;  Throughout the article, the merits of the proposed novel approach are&#xA;  being analyzed and discussed, while the efficacy of the suggested&#xA;  novel quaternion based controller are being evaluated by extended&#xA;  simulation results.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="12958" LastEditorUserId="9176" LastEditDate="2016-02-20T20:08:03.990" LastActivityDate="2016-02-20T20:08:03.990" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9215" PostTypeId="2" ParentId="9175" CreationDate="2016-02-20T08:11:50.923" Score="0" Body="&lt;p&gt;Much as stated above the power of a servo is limited. You may need to instead use a light interrupted motor as are found in printers combined with a series of reduction gears to allow the force needed to suspend your robot without adding much weight.&lt;/p&gt;&#xA;" OwnerUserId="12960" LastActivityDate="2016-02-20T08:11:50.923" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9218" PostTypeId="1" CreationDate="2016-02-21T08:58:40.097" Score="2" ViewCount="1391" Body="&lt;p&gt;I have to program an autonomous bot (using an ATmega2560). It has a 4-digit seven segment display attached to it. I have to make the bot traverse through arena while continuously displaying the time in seconds on the seven segment display.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't use the code to display on seven segment display in my &lt;code&gt;main()&lt;/code&gt; function.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help? &lt;/p&gt;&#xA;" OwnerUserId="11221" LastEditorUserId="9176" LastEditDate="2016-02-22T10:34:52.127" LastActivityDate="2016-02-22T14:57:55.877" Title="Programming 4-digit seven segment display using interrupts only" Tags="&lt;interrupts&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9221" PostTypeId="2" ParentId="9218" CreationDate="2016-02-22T09:01:09.570" Score="2" Body="&lt;p&gt;While this question may seem to be better suited for SE Arduino, I shall, nevertheless, propose a solution. Employ a ready written Arduino library, as this would save a lot of groundwork. Granted, as you mention that you have a &lt;code&gt;main()&lt;/code&gt;, then one can assume that you are not using the Arduino IDE. However, the library (with the &lt;code&gt;.cpp&lt;/code&gt; file and &lt;code&gt;.h&lt;/code&gt; file) can still be used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Interestingly, I went through the pain of coding up a seven segment display last year, on the Arduino, albeit only a two digit display, an SL-1255 (see &lt;a href=&quot;https://gr33nonline.wordpress.com/2015/08/04/dual-seven-segment-display-madness/&quot; rel=&quot;nofollow&quot;&gt;Dual Seven Segment display madness&lt;/a&gt;). I even came up with an all singing and dancing Arduino library, &lt;a href=&quot;https://github.com/greenonline/SevenSegmentSL1255&quot; rel=&quot;nofollow&quot;&gt;SevenSegmentSL1255&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I do not recommend you using it, as it does not use interrupts and, much to my &lt;em&gt;chagrin&lt;/em&gt;, I found another, more fully featured, seven segment display Arduino library, &lt;a href=&quot;http://playground.arduino.cc/Main/SevenSeg&quot; rel=&quot;nofollow&quot;&gt;SevenSeg&lt;/a&gt;, after having completed mine. The SevenSeg library will work with four digit displays and it also handles interrupt driven displays.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From section 4.4 &lt;strong&gt;Using Interrupt Timers&lt;/strong&gt; of the &lt;a href=&quot;http://sim.marebakken.com/SevenSeg.pdf&quot; rel=&quot;nofollow&quot;&gt;PDF&lt;/a&gt;, &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Running the printing functions in an endless loop to perform multiplexing is not always an ideal way to do things. Outputting information to a 7-segment display is not a computationally intensive task, but due to the delay used for multiplexing, the microcontroller just sits there and waits for most of the time. Sure, you can insert commands taking little time in a loop together with the printing functions, but if they are slightly time-consuming, the display will halt or flicker. For this purpose it is possible to use SevenSegalong with interrupt timers. Then, you can do whatever you want inside &lt;code&gt;loop(){...}&lt;/code&gt;, and simply run a high-level printing function only when you want to change what's on the display. The microcontroller will automatically be interrupted just briefly to update the display as needed. You can still change the refresh rate and the duty cycle like normal, the SevenSeg-library will take care of configuring the timers for you.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The library code can be downloaded from &lt;a href=&quot;http://sim.marebakken.com/SevenSeg.zip&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An example sketch (again taken from section 4.4 of the PDF) is as follows:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;SevenSeg.h&amp;gt;&#xA;SevenSeg disp(11,7,3,5,6,10,2);&#xA;const int numOfDigits =4;&#xA;int digitPins[numOfDigits]={12,9,8,13};&#xA;&#xA;void setup () {&#xA;  disp.setDigitPins(numOfDigits ,digitPins);&#xA;  disp.setTimer(2); disp.startTimer();&#xA;}&#xA;&#xA;void loop() {&#xA;  for(int i=1;i&amp;lt;=10;i++){&#xA;    disp.write(i);&#xA;    delay(1000); // Or other time-consuming tasks&#xA;  }&#xA;}&#xA;&#xA;ISR(TIMER2_COMPA_vect) { &#xA;  disp.interruptAction();&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Obviously, you will need to modify the sketch for your particular purposes, notably either calling &lt;code&gt;setup()&lt;/code&gt; and &lt;code&gt;loop()&lt;/code&gt; from your &lt;code&gt;main()&lt;/code&gt;, or incorporating the display updates from the &lt;code&gt;loop()&lt;/code&gt; into your &lt;code&gt;main()&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, please make particular note of the Interrupt Service Routine (ISR), as this is what you require: &lt;code&gt;ISR(TIMER2_COMPA_vect) {disp.interruptAction();}&lt;/code&gt;. This will ensure that you have a flicker free display, while the processor is performing processor intensive tasks, when controlling your bot.&lt;/p&gt;&#xA;" OwnerUserId="9176" LastEditorUserId="9176" LastEditDate="2016-02-22T14:57:55.877" LastActivityDate="2016-02-22T14:57:55.877" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9222" PostTypeId="2" ParentId="1399" CreationDate="2016-02-22T12:41:53.717" Score="1" Body="&lt;p&gt;If I understood your question correctly, what you need to capture more gestures are just more accelerometers positioned at different locations on your device.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are talking complex finger gestures, then maybe you need something like a machine vision system to recognize all the complex hand and finger motions. Hope this helps a little.&lt;/p&gt;&#xA;" OwnerUserId="10691" LastActivityDate="2016-02-22T12:41:53.717" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9223" PostTypeId="2" ParentId="9167" CreationDate="2016-02-22T15:46:52.633" Score="2" Body="&lt;p&gt;This is how I do it:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;# return True if in collision, False if no collision&#xA;# pass in joint angles q to test configuration other than current&#xA;def inCollision(q=None):&#xA;    with env:&#xA;        if q == None:&#xA;            return env.CheckCollision(robot) or robot.CheckSelfCollision()&#xA;        else:&#xA;            initq = robot.GetDOFValues()&#xA;            robot.SetDOFValues(q)&#xA;            ret = env.CheckCollision(robot) or robot.CheckSelfCollision()&#xA;            robot.SetDOFValues(initq)&#xA;            return ret&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;NOTE: OpenRave uses ODE as its collision checker by default.  And for some reason, the default build of ODE for Ubuntu does not enable cylinder-cylinder collision checking.  You can use Bullet instead if you like, but I have found it to be slower than ODE.  Use these lines to change which collision checker OpenRave uses:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;collisionChecker = RaveCreateCollisionChecker(env, 'bullet')&#xA;env.SetCollisionChecker(collisionChecker)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Or you can just download the ODE source and recompile.  These are the steps I follow:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Download the latest ODE (&lt;a href=&quot;https://bitbucket.org/odedevs/ode/downloads/ode-0.13.1.tar.gz&quot; rel=&quot;nofollow&quot;&gt;https://bitbucket.org/odedevs/ode/downloads/ode-0.13.1.tar.gz&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;./configure --enable-double-precision --enable-libccd --disable-demos --disable-asserts --enable-shared&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;make -j8&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;sudo make install&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="110" LastActivityDate="2016-02-22T15:46:52.633" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9224" PostTypeId="2" ParentId="9161" CreationDate="2016-02-22T16:02:42.023" Score="0" Body="&lt;p&gt;If you have the path you want the robot to stay on, it sounds like you need &lt;em&gt;Pure Pursuit&lt;/em&gt;.  In this simple algorithm, you steer the robot to some look-ahead point on the path.  The gist of it is illustrated by this image.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.researchgate.net/figure/258177250_fig2_Figure-2-Geometry-of-the-pure-pursuit&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;https://www.researchgate.net/profile/Dong-hyung_Kim/publication/258177250/figure/fig2/Figure-2-Geometry-of-the-pure-pursuit.png&quot; alt=&quot;Figure 2. Geometry of the pure pursuit.&amp;nbsp;&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This only works for non-holonomic robots, but even if you have a holonomic robot, you can do something similar.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Original algorithm proposed here:&#xA;&lt;a href=&quot;https://www.ri.cmu.edu/pub_files/pub3/coulter_r_craig_1992_1/coulter_r_craig_1992_1.pdf&quot; rel=&quot;nofollow&quot;&gt;Implementation of the Pure Pursuit Path Tracking Algorithm&lt;/a&gt;. R. Craig Coulter, CMU, 1992.  &lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2016-02-22T16:02:42.023" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9225" PostTypeId="1" CreationDate="2016-02-22T20:30:47.530" Score="1" ViewCount="53" Body="&lt;p&gt;I have a few robotic manipulators from NakkaNippon Electric and I'm trying to communicate with them using RS232 without success. The robot model are microrobots 88-4 or 88-5.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm sending commands via COM port, but I can't received anything from the box. I'm using a USB-to-DB9 converter (FTDI) with a DB9-DB25 cable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the net, the only reference I have for the robot is from an old post from year 2000 that was from user @peterkneale.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it can help, &lt;a href=&quot;http://techinfoshawinigan.com/files/&quot; rel=&quot;nofollow&quot;&gt;here is the link to the scanned PDF manual&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can see the commands on page 23-24 of the pdf (page 21-22 in document). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any advice would be grateful&lt;/p&gt;&#xA;" OwnerUserId="12976" LastActivityDate="2016-02-22T20:30:47.530" Title="How to communication with old robotic arms from NakkaNippon Electric?" Tags="&lt;robotic-arm&gt;" AnswerCount="0" CommentCount="9" ClosedDate="2016-02-24T19:27:01.580" ContentLicense="CC BY-SA 3.0" />
  <row Id="9226" PostTypeId="1" CreationDate="2016-02-23T08:15:52.203" Score="0" ViewCount="208" Body="&lt;p&gt;I'm trying to determine the wind flow diagram around a quadcopter when it is in action. I looked up on internet but couldn't find any reliable source.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By wind flow diagram, what I mean is when my quadcopter is in mid-air, hovering at some fixed position, how the air is moving around it? All the directions are needed to be kept in mind, from &lt;strong&gt;&lt;em&gt;top to bottom&lt;/em&gt;&lt;/strong&gt; (vertical direction) and also the horizontal direction.&lt;/p&gt;&#xA;" OwnerUserId="12981" LastEditorUserId="9176" LastEditDate="2017-06-04T13:19:19.027" LastActivityDate="2017-06-04T13:21:26.193" Title="Wind flow diagram of a quadcopter" Tags="&lt;quadcopter&gt;&lt;dynamics&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9227" PostTypeId="1" CreationDate="2016-02-23T15:53:22.520" Score="0" ViewCount="95" Body="&lt;p&gt;Is there a way to charge a Li-Po battery using solar panels to increase the flight time of a quadcopter during its flight?&lt;/p&gt;&#xA;" OwnerUserId="11541" LastActivityDate="2016-02-23T21:31:22.733" Title="Solar Cells Charging a Li-Po Battery" Tags="&lt;quadcopter&gt;&lt;power&gt;" AnswerCount="1" CommentCount="10" ClosedDate="2016-02-24T19:23:56.520" ContentLicense="CC BY-SA 3.0" />
  <row Id="9228" PostTypeId="1" AcceptedAnswerId="9230" CreationDate="2016-02-23T18:41:34.997" Score="4" ViewCount="603" Body="&lt;p&gt;I am working on the Baxter robot where I have a first arm configuration and a bunch of other arm configurations, where I want to find the closest arm configuration to the first among the many other arm configurations. The trick here is that the end effector location/orientation is the exact same for all the arm configurations, they are just different ik solutions. Can anyone point me towards the right direction towards this? Thank you.&lt;/p&gt;&#xA;" OwnerUserId="11004" LastActivityDate="2016-02-24T17:41:29.810" Title="Evaluating the similarity of two 7 Degree of Freedom Arms" Tags="&lt;robotic-arm&gt;&lt;inverse-kinematics&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9229" PostTypeId="2" ParentId="9228" CreationDate="2016-02-23T19:30:43.350" Score="2" Body="&lt;p&gt;When you have a 6 DOF manipulator, you must choose a &quot;pose&quot; such as elbow-up or elbow-down, &lt;em&gt;etc&lt;/em&gt;.  Combining the waist, elbow, and wrist options leads to  eight different configurations to choose from - sixteen if the end effector can be flipped 180 degrees and still function.  Inverse kinematics must have specific trigonometric solutions that will select a pose and stick with it so that the manipulator does not try to flip among the many possible solutions.  These pose choices are often hard-coded into the inverse kinematics, in my experience.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With a redundant manipulator, the challenge is much greater.  There is now an infinite number of possible solutions, each with the eight or sixteen distinct poses.  NASA, Oak Ridge, and others who were controlling redundant telerobotic manipulators published a lot of work in this area in the 1990s.  My favorite approach is to define an optimization criteria, and use the gradient of the null space Jacobian to optimize that criteria while maintaining the end effector inverse kinematic solution.  Prof. Williams explains the procedure well, for an 8 DOF arm (but the approach applies to any redundant manipulator) here:  &lt;a href=&quot;http://ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/19940023270.pdf&quot; rel=&quot;nofollow&quot;&gt;http://ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/19940023270.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT (to provide specific example): &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For instance, you could set your optimization criteria to be to keep the joint angles as close to the current pose as possible (minimize the norm of the least-squares vector $||\vec x_{i+1} - \vec x_{i}||$ ).  The algorithm will try to minimize this norm, thus keeping the &quot;average&quot; joint change as small as possible when going to the next commanded position.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2016-02-23T19:30:43.350" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9230" PostTypeId="2" ParentId="9228" CreationDate="2016-02-23T20:23:22.287" Score="4" Body="&lt;p&gt;To compare two different arm configurations, Euclidean distance in joint space is usually sufficient.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;d = \sqrt{\sum_{i=0}^n(q_i - q_{i_{ref}})^2}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where $q_i$ is joint $i$ of the test configuration, and $q_{i_{ref}}$ is the same joint in the reference configuration.  This will work even if the end-effector has a different pose.  But its usefulness goes down as the difference in end-effector poses grows.  I believe you can combat this effect somewhat by using a weighted distance metric.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that in general, you might want to have some global notion of the quality of an IK solution when you don't have a reference configuration.  The rest of this post deals with this scenario.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are a few metrics for comparing IK solutions.  The first, that I have found to be most useful is &lt;em&gt;manipulability measure&lt;/em&gt;.  Which is defined as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\mathit{w}(q) = \sqrt{det(\mathbf{J}(q)\mathbf{J}^T(q)}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a rough measure of how easy it is for the arm to move in any direction.  It vanishes as singular configurations.  In the image below, it is a measure of the roundness of the manipulability ellipsoid.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ixg6a.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ixg6a.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Interesting side note: an arm's (velocity) manipulability is orthogonal to it's force manipulability.  Which kind of makes intuitive sense.  Where your arm can move quickly, it can't lift very much, and vice versa.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Distance from mechanical joint stops is another common metric:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\mathit{w}(q) = -\frac{1}{2n}\sum_{i=1}^{n}\Big(\frac{q_i - \bar{q}_i}{q_{iM} - q_{im}}\Big)^2&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where $q_{iM}$ and  $q_{im}$ are the maximum and minimum joint angles, and $\bar{q}_i$ is the middle value of the joint range.  Note that because this is just a unitless metric, you can tweak to suit your needs.  For example, using a higher exponent to have a flatter curve in the middle, and sharper penalties near the edges.&lt;br&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/vVHtQ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vVHtQ.png&quot; alt=&quot;Joint range costs with varying exponent&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have also seen something called the &lt;em&gt;condition number&lt;/em&gt; used.  Which is the ratio of the first and last eigen values of the SVD of the Jacobian.  Which is kind of another measure of the roundness of the arm's Jacobian.  But I have found this metric to be less useful.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are only interested in forces or velocities in a specific direction $u$, you can compute the manipulability ellipsoid like so:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\alpha(q) = \Big(u^T\mathbf{J}(q)\mathbf{J}^T(q)u\Big)^{-1/2}&#xA;$$&#xA;$$&#xA;\beta(q) = \Big(u^T\big(\mathbf{J}(q)\mathbf{J}^T(q)\big)^{-1}u\Big)^{-1/2}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where $\alpha$ is the force component, and $\beta$ is the velocity component.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could also calculate the theoretical current draw for each arm configuration to find the most power efficient one.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or you can make your own metric and combine some of these. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that you &lt;em&gt;can&lt;/em&gt; use these approaches while treating IKFast as a black box.  IKFast gives you a number of potential solutions for the given end-effector pose.  You can simply iterate through them, evaluating the desired metric on each, then pick the best.  (Side note: IKFast works slightly differently in Python and C.  In Python, OpenRave automatically iterates your fixed joints through their entire range with some discretization.  So you can potentially get hundreds of solutions.  But in C, it only gives you the few permutations of joint flips.  So you only get a handful of solutions.  You are forced to call it multiple times to iterate through your fixed joint range.)&lt;/p&gt;&#xA;" OwnerUserId="110" LastEditorUserId="110" LastEditDate="2016-02-24T17:41:29.810" LastActivityDate="2016-02-24T17:41:29.810" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="9231" PostTypeId="2" ParentId="9227" CreationDate="2016-02-23T21:31:22.733" Score="0" Body="&lt;p&gt;The short answer is no. This is not to say that someone won't extend the flight time of a copter using solar energy one day. But if you attach off the shelf solar panels to off the shelf LiPo batteries and use an off the shelf or quickly fabricated custom power conversion electronics, then the reduction in flight time from the extra mass will be similar to any energy gained from the solar panels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can review further discussion on this topic here: &lt;a href=&quot;https://robotics.stackexchange.com/questions/8906/how-do-i-create-a-portable-solar-panel-lipo-charger&quot;&gt;How do I create a portable solar panel lipo charger?&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2016-02-23T21:31:22.733" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9232" PostTypeId="1" AcceptedAnswerId="9238" CreationDate="2016-02-23T22:41:14.550" Score="2" ViewCount="1506" Body="&lt;p&gt;&lt;strong&gt;Background:&lt;/strong&gt; I'm using the L3GD20H MEMS gyroscope with an Arduino through a library &lt;a href=&quot;https://github.com/pololu/l3g-arduino&quot; rel=&quot;nofollow&quot;&gt;(Pololu L3G)&lt;/a&gt; that in turn relies on interrupt-driven I2C (Wire.h); I'd like to be able to handle each new reading from the sensor to update the calculated angle in the background using the data ready line (DRDY). Currently, I poll the STATUS register's ZYXDA bit (which is what the DRDY line outputs) as needed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;General question:&lt;/strong&gt; With some digital output sensors (I2C, SPI, etc.), their datasheets and application notes describe using a separate (out-of-band) hardware line to interrupt the microcontroller and have it handle new sets of data. But on many microcontrollers, retrieving data (let alone clearing the flag raising the interrupt line) requires using the normally interrupt-driven I2C subsystem of a microcontroller. &lt;strong&gt;How can new sensor data be retrieved from the ISR for the interrupt line when also using the I2C subsystem in an interrupt-driven manner?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Possible workarounds:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Use nested interrupts (as @hauptmech mentioned): re-enable I2C interrupt inside of ISR. Isn't this approach discouraged?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Use non-interrupt-driven I2C (polling)--supposedly a dangerous approach inside of ISRs. The sensor library used depends on the interrupt-driven Wire library.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;[Edit: professors' suggestion] Use a timer to interrupt set to the sample rate of the sensor (which is settable and constant, although we measure it to be e.g. 183.3Hz rather than 189.4Hz per the datasheet). Handling the I2C transaction still requires re-enabling interrupts, i.e. nested interrupts or performing I2C reads from the main program.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;[Edit:] Here's a comment I found elsewhere on a similar issue that led me to believe that the hang encountered was from I2C reads failing inside an interrupt handler: &lt;a href=&quot;https://www.sparkfun.com/tutorials/326#comment-4f4430c9ce395fc40d000000&quot; rel=&quot;nofollow&quot;&gt;https://www.sparkfun.com/tutorials/326#comment-4f4430c9ce395fc40d000000&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;…during the ISR (Interrupt Service Routine) I was trying to read the&#xA;  device to determine which bit changed. Bad idea, this chip uses the&#xA;  I2C communications which require interrupts, but interrupts are turned&#xA;  off during an ISR and everything goes kinda south.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="11833" LastEditorUserId="11833" LastEditDate="2016-03-26T21:06:26.487" LastActivityDate="2016-03-26T21:06:26.487" Title="How to interrupt on a data ready trigger when communications to the sensor are interrupt driven?" Tags="&lt;arduino&gt;&lt;microcontroller&gt;&lt;gyroscope&gt;&lt;i2c&gt;&lt;interrupts&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9233" PostTypeId="1" AcceptedAnswerId="9237" CreationDate="2016-02-23T22:43:47.620" Score="7" ViewCount="2151" Body="&lt;p&gt;I need some help here because I can't figure how the Unscented Kalman Filter works.&#xA;I've searched for examples but all of them are too hard to understand.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please someone can explain how it works step by step with a trivial example like position estimation, sensor fusion or something else?&lt;/p&gt;&#xA;" OwnerUserId="10913" LastEditorUserId="15157" LastEditDate="2020-06-05T13:10:47.283" LastActivityDate="2020-06-05T13:10:47.283" Title="Unscented Kalman Filter for Dummies" Tags="&lt;kalman-filter&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="9234" PostTypeId="1" AcceptedAnswerId="9235" CreationDate="2016-02-24T00:21:17.950" Score="3" ViewCount="74" Body="&lt;p&gt;I am not sure if this is the best place to ask this question, but hopefully someone here can give me some advice. I have a device hooked up to a data acquisition system that can provide sync out signal and record sync in signals. I need to synchronize my recordings with this device to a video feed. I am having trouble finding a camera that can provide a sync signal or any other good way to accomplish this. Thanks for your help.&lt;/p&gt;&#xA;" OwnerUserId="12983" LastActivityDate="2016-02-24T01:54:02.253" Title="Syncing camera with other signals" Tags="&lt;sensors&gt;&lt;cameras&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9235" PostTypeId="2" ParentId="9234" CreationDate="2016-02-24T00:51:24.237" Score="2" Body="&lt;p&gt;Cameras that support syncing will probably do so via an external signal. Google &quot;genlock&quot; or &quot;timecode sync&quot; or &quot;external trigger&quot; to get started.  For instance, &lt;a href=&quot;https://www.ptgrey.com/KB/10250&quot; rel=&quot;nofollow&quot;&gt;here's a link&lt;/a&gt; to external trigger modes for Point Grey cameras whose image sensors a lot of research roboticists use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the sync signal, if the sync out on the DAQ is not sufficient, google &quot;sync generator&quot;. You should get relevant hits from the video &amp;amp; audio recording as well as electronics test worlds.&lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="184" LastEditDate="2016-02-24T01:54:02.253" LastActivityDate="2016-02-24T01:54:02.253" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9237" PostTypeId="2" ParentId="9233" CreationDate="2016-02-24T02:21:25.573" Score="15" Body="&lt;p&gt;I'm going to give you a high-level overview without going into much math. The purpose here is to give you a somewhat intuitive understanding of what is going on, and hopefully this will help the more mathematical resources make more sense. I'm mostly going to focus on the &lt;em&gt;unscented transform&lt;/em&gt;, and how it relates to the UKF.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Random variables&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Alright, the first thing you need to understand is that modern (mobile) robotics is &lt;em&gt;probabilistic&lt;/em&gt;; that is, we represent things we aren't sure about by &lt;em&gt;random variables&lt;/em&gt;. I've &lt;a href=&quot;http://marcgallant.ca/2015/12/16/you-dont-know-where-your-robot-is/&quot; rel=&quot;noreferrer&quot;&gt;written about this topic&lt;/a&gt; on my personal website, and I strongly suggest you check it out for a review. I'm going to briefly go over it here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Take the (one-dimensional) position of a robot for example. Usually we use sensors (e.g., wheel encoders, laser scanners, GPS, etc.) to estimate the position, but all of these sensors are &lt;em&gt;noisy&lt;/em&gt;. In other words, if our GPS tells us we are at $x = 10.2$ m, there is some uncertainty associated with that measurement. The most common way we model this uncertainty is using &lt;em&gt;Gaussian&lt;/em&gt; (also known as &lt;em&gt;Normal&lt;/em&gt;) distributions. The probabilistic density function (don't worry about what this means for now) of a Gaussian distribution looks like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/Hey7S.png&quot; alt=&quot;Gaussian PDF&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the $x$ axis are different values for your random variable. For example, this could be the one dimensional position of the robot. The &lt;em&gt;mean&lt;/em&gt; position is denoted by $\mu$, and the &lt;em&gt;standard deviation&lt;/em&gt; is denoted by $\sigma$, which is a sort of &quot;plus/minus&quot; applied to the mean. So instead of saying &quot;the robot's position is $x = 9.84$ m&quot;, we say something along the lines of &quot;the mean of our estimate of the robot's position is $x = 9.84$ m with a standard deviation of $0.35$ m&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the $y$ axis is the relative &lt;em&gt;likelihood&lt;/em&gt; of that value occurring. For example, note that $x = \mu$ has a relative likelihood of about $0.4$, and $x = \mu - 2\sigma$ has a relative likelihood of about $0.05$. And let's pretend that $\mu = 9.84$ m and $\sigma = 0.35$ m like the above example. That means&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\mu = 9.84 \text{ m}, \quad \mu - 2\sigma = 9.84 - 2(0.35) = 9.14 \text{ m}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What the $y$-axis values are telling you is that the likelihood that the robot is at $9.84$ is &lt;em&gt;eight times higher&lt;/em&gt; than $9.14$ because the ratio of their likelihoods is $0.4/0.05 = 8$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The takeaway point from this section is that the things we often most interested in (e.g., position, velocity, orientation) are &lt;em&gt;random variables&lt;/em&gt;, most often represented by &lt;em&gt;Gaussian distributions&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Passing random variables through functions&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;An interesting property of Gaussian random variables is that the result of passing one through a linear function results in a Gaussian random variable. So if we have a function like&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;y = 12x - 7&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and $x$ is a Gaussian random variable, then $y$ is also a Gaussian random variable (but with a different mean and standard deviation). On the other hand, this property does &lt;em&gt;not&lt;/em&gt; hold for nonlinear functions, such as&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;y = 3\sin(x) - 2x^2.&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here, passing the Gaussian random variable $x$ through the function results in a non-Gaussian distribution $y$. In other words, the shape of the PDF for $y$ would not look like the above plot. But what do I mean by &quot;passing a Gaussian random variable through a function&quot;. In other words, what do I put in for $x$ in the above equation? As we saw in the above plot, $x$ has many possible values. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As before, let's say $x$ has mean $\mu = 9.84$ m and standard deviation $\sigma = 0.35$ m. We are interested in &lt;em&gt;approximating&lt;/em&gt; $y$ as a Gaussian random variable. One way to do this would be calculating a whole bunch of $y$s for different $x$s. Let's calculate $y$ for $x = \mu$, $x = \mu + 0.1\sigma$, $x = \mu - 0.1\sigma$, $x = \mu + 0.2\sigma$, etc. I've tabulated some results below.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{array}{|c|c|}&#xA;x &amp;amp; y = 3\sin(x) - 2x^2 \\&#xA;\hline&#xA;\mu &amp;amp; -194.5 \\&#xA;\mu + 0.1\sigma &amp;amp; -195.9 \\&#xA;\mu - 0.1\sigma &amp;amp; -193.0 \\&#xA;\mu + 0.2\sigma &amp;amp; -197.3 \\&#xA;\mu - 0.2\sigma &amp;amp; -191.6 \\&#xA;\vdots &amp;amp; \vdots \\&#xA;\mu + 10\sigma &amp;amp; -354.5 \\&#xA;\mu - 10\sigma &amp;amp; -80.3&#xA;\end{array}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although the values of $y$ do not form a Gaussian distribution, we create one by taking the mean of all the $y$ values to get $\mu_y$ (in this case $\mu_y = -201.8$), and we calculate the standard deviation the usual way:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\sigma_y = \sqrt{\frac{1}{n-1}\sum_{i=1}^n(y_i-\mu_y)^2} = 81.2.&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So voila! We have come up a way to pass Gaussian random variables through nonlinear functions. Problem solved, right? Well not necessarily. It took a lot of computations to come up with our solution, so solving problems this way when our data is streaming in many times per second may not be possible. And how did we choose how spread out our values of $x$ were? And why did we stop at $\mu \pm 10\sigma$? &lt;/p&gt;&#xA;&#xA;&lt;h1&gt;The unscented transformation&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;The unscented transformation is a method of passing Gaussian distributions through nonlinear functions. It is not dissimilar to the brute force method I described above. In fact, it uses the exact same approach, but is really smart about how it chooses which values of $x$ to choose to pass through the nonlinear function.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, for the problem I described, the unscented transformation requires you to pass exactly three points (called &lt;em&gt;sigma points&lt;/em&gt;) through the nonlinear function:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;x = \mu, \quad x = \mu + \alpha\mu, \quad x = \mu - \alpha\mu,&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $\alpha$ depends on the dimensionality of the random variable (one in this case) and other scaling factors. In other words, you pass the mean and one point on each side of the mean through the nonlinear function. Then you calculate the mean and standard deviation of the result to approximate $y$ as a random variable.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;The unscented Kalman filter&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Under the assumption that you have a basic understanding of Kalman filters, you'll recall that there are essentially two steps: prediction and correction. In the prediction step, you have a motion model that propagates the state forward in time. It might look something like&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;x_{k+1} = f(x_k, u_k)&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $u_k$ is the input, and both $x_k$ and $u_k$ are (Gaussian) random variables. Now in a regular Kalman filter, $f(x_k, u_k)$ is a linear function, which results in $x_{k+1}$ being a Gaussian random variable. However, it is often the case that $f(x_k, u_k)$ is nonlinear. So what do we do? We calculate sigma points, pass them through the motion model, and then calculate the mean and variance of the result. This gives us our approximate estimate of $x_{k+1}$ as a Gaussian random variable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The correction step mostly works the same way. This time you have a measurement model that looks something like&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;z_k = h(x)&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $h(x)$ may be nonlinear. So how do we get calculate our predicted measurement $z$? You guessed it, we use an unscented transformation again. I won't go into details on how you update the state from here (it's outside of the scope of my &quot;intuitive&quot; description), but it's relatively straightforward. &lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Summary&lt;/h1&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The state (what we are estimating) and the measurements come from &quot;real-life&quot; sensors, which all have noise. We model this uncertainty by representing them as Gaussian random variables.&lt;/li&gt;&#xA;&lt;li&gt;Passing Gaussian random variables through linear functions results in other Gaussian random variables. Passing them through nonlinear functions does not.&lt;/li&gt;&#xA;&lt;li&gt;One method of approximating the result of passing a Gaussian random variable through a nonlinear function as a Gaussian random variable is by sampling the input variable at a bunch of different points, passing those through the nonlinear function, and then considering the mean and standard deviation of the resulting output as a Gaussian distribution.&lt;/li&gt;&#xA;&lt;li&gt;The unscented transformation strategically picks points from distribution of the input variable that keep the most information about the distribution and passes them through the nonlinear function, then calculates the mean and standard deviation of the output.&lt;/li&gt;&#xA;&lt;li&gt;The unscented Kalman filter uses the unscented transformation to pass Gaussian random variables through the motion and measurement models. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="4320" LastActivityDate="2016-02-24T02:21:25.573" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9238" PostTypeId="2" ParentId="9232" CreationDate="2016-02-24T02:53:05.643" Score="2" Body="&lt;p&gt;I think you have a false assumption somewhere. A very quick scan through the atmel datasheet and arduino twi.c does not show any problems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why do you think the microcontroller can't handle the interrupt from an ISR using an interrupt-driven I2C subsystem?&lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="184" LastEditDate="2016-02-24T03:12:17.210" LastActivityDate="2016-02-24T03:12:17.210" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="9240" PostTypeId="1" CreationDate="2016-02-24T07:37:01.383" Score="0" ViewCount="2819" Body="&lt;p&gt;I have been working with KUKA LBR iiwa 7 R800 robot, with the KUKA's IDE, which is the 'Sunrise.Workbench'. Since it does not have any virtual platform to verify the code (simulate), it's been quite difficult, as I need to test each code by deploying to the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone suggest if there is any simulation software available where I can test the code written using the Robotics API in Sunrise.Workbench?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I came across V-REP simulation software, but, not sure if I can use my code in the workbench platform.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Appreciate if anyone can shed some light on it.&#xA;Thanks in advance.&lt;/p&gt;&#xA;" OwnerUserId="10925" LastActivityDate="2016-11-24T23:27:13.683" Title="Simulation software for KUKA LBR iiwa robot?" Tags="&lt;robotic-arm&gt;&lt;simulation&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9241" PostTypeId="1" CreationDate="2016-02-24T09:25:19.410" Score="2" ViewCount="140" Body="&lt;p&gt;The MATLAB Compiler SDK allows to create a wrapper for a MATLAB function which can be accessed by Java software. Based on my understanding, KUKA's Sunrise.Workbench IDE uses most of the standard Java functions. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was trying to read the package generated using the MATLAB Compiler SDK (the new version of MATLAB Builder JA) into the workbench platform. I could successfully read the package into Eclipse IDE, but not into Workbench.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason for using the Compiler SDK is that, I have some functions is MATLAB, and I want to use the same in the workbench programming.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone have experience with the same? Appreciate any help.&lt;/p&gt;&#xA;" OwnerUserId="10925" LastActivityDate="2016-02-24T09:25:19.410" Title="Use MATLAB Compiler SDK generated package in KUKA Sunrise.Workbench" Tags="&lt;matlab&gt;&lt;robotc&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9242" PostTypeId="2" ParentId="9226" CreationDate="2016-02-24T17:23:41.383" Score="1" Body="&lt;p&gt;The question needs some clarification, but at first thought here's a sketch of an answer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The aerodynamics of rotors of a quad rotor can be simplified as independent from each other. Just to give a glimpse, here's a simple introduction to rotor aerodynamics, including near field flow directions, and average air velocity near (down) the rotor: &lt;a href=&quot;http://s6.aeromech.usyd.edu.au/aerodynamics/index.php/sample-page/aircraft-performance/hoverclimbdescent-analysis/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Helicopter momentum Analysis&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind that this is a very simple (yet practically quite an accurate) representation of the real flow phenomena near the vehicle. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Things that should be considered for a more detailed approach:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;existence and interaction of multi rotors&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;rotor - body interaction&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;unsteadiness (the propellers are in fact creating a periodic flow)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;environmental changes (wind, pressure change)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;control induced variations (even in perfect air conditions, if the quad rotor is moving a camera or weight, there will be control commands, changing the flow a bit)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Etc. &lt;/p&gt;&#xA;" OwnerUserId="9570" LastEditorUserId="9176" LastEditDate="2017-06-04T13:21:26.193" LastActivityDate="2017-06-04T13:21:26.193" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9244" PostTypeId="1" AcceptedAnswerId="9289" CreationDate="2016-02-24T19:30:28.667" Score="2" ViewCount="1391" Body="&lt;p&gt;Has anyone ever run into a case where a fresh install of ROS cannot run its tutorial packages?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am running ROS Indigo on an nVidia Jetson TK1, using the nVidia-supplied Ubuntu image. I just did a fresh install, Ubuntu and ROS, just to keep things clean for this project. I am building a kind of 'demo-bot' for some students I will be teaching; it will use both the demo files and some of my own code. Now, after setting things up, I try to run the talker tutorial just to check to make sure that everything is running, and rospack is pretty sure that the tutorials don't exist.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, inputting this into the terminal&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;rosrun rospy_tutorials talker&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Outputs&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[rospack] Error: package 'rospy_tutorials' not found&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This is the case for every tutorial file; python and C++. Now, I am sure the tutorials are installed. I am looking right at them in the file system, installed from the latest versions on github. So I think it is something on ROS' side of things.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Has anyone ever bumped into something similar before, where a ROS package that supposedly was installed correctly isn't found by ROS itself? I would rather not have to reinstall again if I can avoid it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT #1&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After playing with it some more, I discovered that multiple packages were not running. All of them - some turtlebot code, and some of my own packages - returned the same error as above. So I suspect something got messed up during the install of ROS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://wiki.ros.org/roswtf&quot; rel=&quot;nofollow&quot;&gt;roswtf&lt;/a&gt; was able to run, but it did not detect any problems. However, going forward.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT #2&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I double checked the bashrc file. One export was missing, for ROS directory I was trying to work within. Adding it did not solve the problem. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am still looking for a solution, that hopefully does not involve reflashing the TK1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT #3&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alright, so I've been poking at this for a few days now and pretty much gave up trying to get ROS to work correctly, and decided a re-flash was necessary. But I think I found something when I booted up my host machine. In my downloads folder, I have the v2.0 and the v1.2 JetPack. I know I used the v2.0 for this latest install, and it has been the only time I have used it (it provides some useful updates for OpenCV and bug fixes, among other things). I'm going to re-flash using the v1.2 JetPack this time, see if things behave better with ROS under that version. Its a long shot, but it is all I have to work with at the moment, and it shouldn't lose any ROS capabilities (aside from some of the stuff I wanted to do with OpenCV). I'll update everyone if that seems to work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT #4&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ok, everything seems to be working now. The problem does seem to be an issue with Jetpack v2.0. I suspect that some change, somewhere between v1.2 and v2.0 (made to accommodate the new TX1 board), messes with running ROS indigo on a TK1. I'm going to be a more detailed explanation in an answer to this question.&lt;/p&gt;&#xA;" OwnerUserId="11762" LastEditorUserId="11762" LastEditDate="2016-02-29T20:21:22.090" LastActivityDate="2016-02-29T21:28:24.617" Title="ROS tutorials no longer working" Tags="&lt;ros&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9245" PostTypeId="2" ParentId="9244" CreationDate="2016-02-24T20:51:23.883" Score="2" Body="&lt;p&gt;Have you tried &lt;a href=&quot;http://wiki.ros.org/roswtf&quot; rel=&quot;nofollow&quot;&gt;roswtf&lt;/a&gt;? It's the first step in the &lt;a href=&quot;http://wiki.ros.org/ROS/Troubleshooting&quot; rel=&quot;nofollow&quot;&gt;ROS Troubleshooting guide&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If you don't know what the problem is yet or how to fix it, try running roswtf first, which is like a FAQ implemented in code. It will look at your configuration and what is running and try and diagnose problems. You can either run it by itself, or you can give it the name of a roslaunch file, e.g.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;roswtf&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;  &lt;p&gt;or&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;roswtf myfile.launch&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-02-24T20:51:23.883" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="9246" PostTypeId="1" CreationDate="2016-02-25T02:55:40.307" Score="4" ViewCount="796" Body="&lt;p&gt;I am designing a new mechanism similar to robot arm. It would be a 6 or 7 axis with arms but not the same with traditional articulated arms. As a result, new DH matrix,and inverse kinematics involve. I would like to consult the robot professionals in this forum that do you suggest any simulation tool of this mechanism?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I plan to start with start and end points. Then I will do a trapezoid velocity plan and take sample points with sampling time along the path. After that, I would like to transfer these sampling points to motor joints by DH matrix and inverse kinematics. Finally I would do some basic 3D animation to visualize the movement temporally. I do not plan to simulate controller behavior because in my application motor drivers deal with it. I only need to focus on sending reasonable commands to motor drivers. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my opinion, Matlab, octave, VC++, and some third-party tools are candidates. Starting from ground zero would be a time-consuming work. I would appreciate if any experts can share a tool or open source code from his or her experience. I did some search on Matlab robotics toolbox but I am not sure if it fits my need because it is expensive and optimized for ROS. In Octave there are also some robotics toolbox but I am not sure about what it can do and what it cannot. &lt;/p&gt;&#xA;" OwnerUserId="10971" LastEditorUserId="110" LastEditDate="2016-02-25T14:30:29.283" LastActivityDate="2016-02-25T14:30:29.283" Title="simulation of robots" Tags="&lt;robotic-arm&gt;&lt;matlab&gt;&lt;simulation&gt;&lt;c&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9247" PostTypeId="2" ParentId="9240" CreationDate="2016-02-25T05:25:53.550" Score="1" Body="&lt;p&gt;I suggest using ROS and related tools. If you want to simulate kinematics of the manipulator, you can visualize it in ROS, by following below steps. &lt;br&gt;&#xA;1. Find a URDF description, or write a one &lt;br&gt;&#xA;2. Visualize it in rviz tool &lt;br&gt;&#xA;3. Write a joint state publisher node, which outputs the joint values from &#xA;your existing code to the visualizer. &lt;br&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;look on to &lt;a href=&quot;https://github.com/CentroEPiaggio/kuka-lwr&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to do a exact physics simulation you can consider on using Gazebo with ROS.&lt;/p&gt;&#xA;" OwnerUserId="12990" LastEditorUserId="12990" LastEditDate="2016-02-25T13:25:22.537" LastActivityDate="2016-02-25T13:25:22.537" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9248" PostTypeId="2" ParentId="9246" CreationDate="2016-02-25T07:19:11.593" Score="2" Body="&lt;p&gt;For visualization and kinematics, &lt;a href=&quot;http://gazebosim.org/&quot; rel=&quot;nofollow&quot;&gt;Gazebo&lt;/a&gt; works fine. You can use C++ or Python to work with it. There is lots of integration with ROS as well if you like that sort of thing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want a clean and simple rigid body dynamics library, I really like &lt;a href=&quot;http://rbdl.bitbucket.org/&quot; rel=&quot;nofollow&quot;&gt;RBDL&lt;/a&gt;, but you'll need to add your own integrator for simulation and graphics for visualization. &lt;a href=&quot;http://headmyshoulder.github.io/odeint-v2/&quot; rel=&quot;nofollow&quot;&gt;odeint&lt;/a&gt; works well. For visualization, &lt;a href=&quot;http://www.openscenegraph.org/&quot; rel=&quot;nofollow&quot;&gt;OSG&lt;/a&gt; has a really clean and nice design, and OGRE is what the Gazebo/ROS guys use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are familiar with a CAD software such as Creo, Solidworks, &lt;a href=&quot;https://www.onshape.com/&quot; rel=&quot;nofollow&quot;&gt;Onshape&lt;/a&gt;, etc then it can be quick to set up your links and joints and move them around by hand to get a feel for things. Onshape is from the guys that created Solidworks and it's free github style (private data costs money).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A physical mockup, using cardboard, posterboard, particle board and tape, glue, brads, nails, screws and whatever else you need can be a quick way to understand a new mechanism. You can print out 2D sections from your favorite CAD software to scale as a template to help get complex shapes right.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The last open source automated mechanism synthesis software I kept track of and liked was &lt;a href=&quot;http://darwin2k.sourceforge.net/&quot; rel=&quot;nofollow&quot;&gt;Darwin2K&lt;/a&gt;, but that might be more hardcore optimization than you are looking for.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are comfortable with C++ I'd favor that over Octave. You're more likely to find C++ libraries that help you than Matlab/octave ones. (I know lots of guys that really like matlab/simulink for robotics work, but you mentioned the cost as an issue). If you are comfortable with Linux, I'd also favor that over windows; lots of open source code has a Posix base and can be a little clunky to work with on windows.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2016-02-25T07:19:11.593" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9250" PostTypeId="1" AcceptedAnswerId="9252" CreationDate="2016-02-25T09:20:46.543" Score="2" ViewCount="655" Body="&lt;p&gt;Good day,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am currently creating an autonomous quadcopter using a cascading PID controller specifically a P-PID controller using angle as setpoints for the outer loop and angular velocities for the inner loop. I have just finished tuning the Roll PID last week with only +-5 degrees of error however it is very stable and is able to withstand disturbances by hand. I was able to tune it quickly on two nights however the pitch axis is a different story.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Introduction to the Problem:&lt;/strong&gt;&#xA;The pitch is asymmetrical in weight (front heavy due to the stereo vision cameras placed in front). I have tried to move the battery backwards to compensate however due to the constraints of the DJI F450 frame it is still front heavy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a PID controller for an asymmetrical quadcopter, the I-gain is responsible for compensating as it is the one able to &quot;remember&quot; the accumulating error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Problem at Hand&lt;/strong&gt;&#xA;I saw that while tuning the pitch gains, I could not tune it further due to irregular oscillations which made it hard for me to pinpoint whether this is due to too high P, I or D gain. The quadcopter pitch PID settings are currently at Prate=0.0475 Irate=0.03 Drate=0.000180 Pstab=3 giving an error from the angle setpoint of 15degrees of +-10degrees. Here is the data with the corresponding video.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;RATE Kp = 0.0475, Ki = 0.03, Kd = 0.000180 STAB Kp=3&#xA;Video: &lt;a href=&quot;https://youtu.be/NmbldHrzp3E&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://youtu.be/NmbldHrzp3E&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Plot:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/NcoAu.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/NcoAu.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Analysis of Results&lt;/strong&gt;&#xA;It can be seen that the controller is saturating.&#xA;The motor controller is currently set to limit the pwm pulse used to control the ESC throttle to only 1800ms or 180 in the code (The maximum is 2000ms or 205) with the minimum set at 155 or 1115ms (enough for the quad to lift itselft up and feel weightless). I did this to make room for tuning the altitude/height PID controller while maintaining the throttle ratio of the 4 motors from their PID controllers.  &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Is there something wrong on my implementation of limiting the maximum throttle?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Here is the implementation:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; //Check if PWM is Saturating - This method is used to fill then trim the outputs of the pwm that gets fed into the gpioPWM() function to avoid exceeding the earlier set maximum throttle while maintaining the ratios of the 4 motor throttles. &#xA;    float motorPWM[4] = {motorPwm1, motorPwm2, motorPwm3, motorPwm4};&#xA;    float minPWM = motorPWM[0];&#xA;    int i;&#xA;    for(i=0; i&amp;lt;4; i++){ // Get minimum PWM for filling&#xA;        if(motorPWM[i]&amp;lt;minPWM){&#xA;            minPWM=motorPWM[i];&#xA;        }&#xA;    }&#xA;&#xA;    cout &amp;lt;&amp;lt; &quot; MinPWM = &quot; &amp;lt;&amp;lt; minPWM &amp;lt;&amp;lt; endl;&#xA;&#xA;    if(minPWM&amp;lt;baseThrottle){&#xA;        float fillPwm=baseThrottle-minPWM; //Get deficiency and use this to fill all 4 motors&#xA;        cout &amp;lt;&amp;lt; &quot; Fill = &quot; &amp;lt;&amp;lt; fillPwm &amp;lt;&amp;lt; endl;&#xA;        motorPwm1=motorPwm1+fillPwm;&#xA;        motorPwm2=motorPwm2+fillPwm;&#xA;        motorPwm3=motorPwm3+fillPwm;&#xA;        motorPwm4=motorPwm4+fillPwm;&#xA;    }&#xA;&#xA;    float motorPWM2[4] = {motorPwm1, motorPwm2, motorPwm3, motorPwm4};&#xA;    float maxPWM = motorPWM2[0];&#xA;    for(i=0; i&amp;lt;4; i++){ // Get max PWM for trimming&#xA;        if(motorPWM2[i]&amp;gt;maxPWM){&#xA;            maxPWM=motorPWM2[i];&#xA;        }&#xA;    }&#xA;&#xA;    cout &amp;lt;&amp;lt; &quot; MaxPWM = &quot; &amp;lt;&amp;lt; maxPWM &amp;lt;&amp;lt; endl;&#xA;&#xA;    if(maxPWM&amp;gt;maxThrottle){&#xA;        float trimPwm=maxPWM-maxThrottle; //Get excess and use this to trim all 4 motors&#xA;        cout &amp;lt;&amp;lt; &quot; Trim = &quot; &amp;lt;&amp;lt; trimPwm &amp;lt;&amp;lt; endl;&#xA;        motorPwm1=motorPwm1-trimPwm;&#xA;        motorPwm2=motorPwm2-trimPwm;&#xA;        motorPwm3=motorPwm3-trimPwm;&#xA;        motorPwm4=motorPwm4-trimPwm;&#xA;    }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Possible solution&lt;/strong&gt;&#xA;I have two possible solutions in mind&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;I could redesign the camera mount to be lighter by 20-30 grams. to be less front heavy&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I could increase the maximum throttle but possibly leaving less room for the altitude/throttle control.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Does anyone know the optimum solution for this problem?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Additional information&lt;/strong&gt;&#xA;The quadcopter weighs about 1.35kg and the motor/esc set from DJI (e310) is rated up to 2.5kgs with the recommended thrust per motor at 350g (1.4kg). Though a real world test &lt;a href=&quot;http://www.rcgroups.com/forums/showthread.php?t=2409123&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;here&quot;&gt;here&lt;/a&gt; showed that it is capable at 400g per motor with a setup weighing at 1600g take-off weight &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How I tune the roll PID gains&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I had set first the Rate PID gains. at a setpoint of zero dps&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Set all gains to zero.&lt;/li&gt;&#xA;&lt;li&gt;Increase P gain until response of the system to disturbances is in steady oscillation.&lt;/li&gt;&#xA;&lt;li&gt;Increase D gain to remove the oscillations.&lt;/li&gt;&#xA;&lt;li&gt;Increase I gain to correct long term errors or to bring oscillations to a setpoint (DC gain).&lt;/li&gt;&#xA;&lt;li&gt;Repeat until desired system response is achieved&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;When I was using the single loop pid controller. I checked the data plots during testing and make adjustments such as increasing Kd to minimize oscillations and increasing Ki to bring the oscillations to a setpoint. I do a similar process with the cascaded PID controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason why the rate PID are small because rate Kp set at 0.1 with the other gains at zero already started to oscillate wildy (a characteristic of a too high P gain). &lt;a href=&quot;https://youtu.be/SCd0HDA0FtY&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://youtu.be/SCd0HDA0FtY&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I had set the Rate pid's such that it would maintain the angle I physically placed it to (setpoint at 0 degrees per second) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I then used only P gain at the outer loop stabilize PID to translate the angle setpoint to velocity setpoint to be used to control the rate PID controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the roll axis at 15 degrees set point &lt;a href=&quot;https://youtu.be/VOAA4ctC5RU&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://youtu.be/VOAA4ctC5RU&lt;/a&gt;&#xA;Rate Kp = 0.07, Ki = 0.035, Kd = 0.0002 and Stabilize Kp = 2&#xA;&lt;a href=&quot;https://i.stack.imgur.com/p3RyT.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/p3RyT.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is very stable however the reaction time/rise time is too slow as evident in the video.&lt;/p&gt;&#xA;" OwnerUserId="11311" LastEditorUserId="11311" LastEditDate="2016-03-27T17:32:04.973" LastActivityDate="2016-03-27T17:32:04.973" Title="Quadcopter PID: Controller is Saturating" Tags="&lt;quadcopter&gt;&lt;pid&gt;&lt;stability&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9251" PostTypeId="2" ParentId="3058" CreationDate="2016-02-25T10:30:17.177" Score="0" Body="&lt;p&gt;In my mind the hardware is just no long enought on the market to allow a shift to the hobby sector. &lt;br&gt; You need very special designed hardware to handle those realtime protocols and on the other hand most of these protocols (Mechatrolink, SyncNet, Sercos, Ethercat) are a complete overkill to the hobby sector. &lt;br&gt;&lt;br&gt;&#xA;But this will change soon (except the point that those protocols are a complete overkill). There are lot of microcontrollers, which have been released recently, which can handle some of those protocols. There are even some ARM Cortex M controllers with Ethercat (Like the Infineon X4800 or some TI-Chips).&#xA;A collegue of mine just redesigned a Beaglebone Board to handle Ethercat. It is not an impossible task, just someone has to start. Give it two more years and you will see them popping up all over the place.&lt;/p&gt;&#xA;" OwnerUserId="6911" LastActivityDate="2016-02-25T10:30:17.177" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9252" PostTypeId="2" ParentId="9250" CreationDate="2016-02-25T14:38:32.033" Score="2" Body="&lt;p&gt;I feel like I make the &lt;a href=&quot;https://robotics.stackexchange.com/a/8999/9720&quot;&gt;same comments&lt;/a&gt; every time you ask a question about your controller:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://robotics.stackexchange.com/a/9080/9720&quot;&gt;How are you tuning the gains&lt;/a&gt;?&lt;/li&gt;&#xA;&lt;li&gt;I think your slack line is interfering with your results. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Your quadcopter is not pulling on the slack line, &lt;a href=&quot;https://robotics.stackexchange.com/questions/9077/pid-tuning-for-an-unbalanced-quadcopter-when-do-i-know-if-the-i-gain-ive-set-i#comment14983_9077&quot;&gt;it's sitting on it&lt;/a&gt;. This is introducing a floating inverted (unstable!) pendulum on system to your quadcopter. The motors aren't making enough thrust to lift the quadcopter because it's sitting on the tether. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, I think your statement,&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I could not tune it further due to irregular oscillations&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;is revealing because I &lt;em&gt;think&lt;/em&gt; that those oscillations are due to your tether. Not helping anything - you're pulling on the tether. So, extra forces your quadcopter &lt;em&gt;shouldn't&lt;/em&gt; have to account for, that is being added to it:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Spring force in the tether material itself.&lt;/li&gt;&#xA;&lt;li&gt;You are reacting to motion, so you're applying a time-varying force.&lt;/li&gt;&#xA;&lt;li&gt;The wooden pillar wobbles (I can see it at &lt;a href=&quot;https://www.youtube.com/watch?v=NmbldHrzp3E&amp;amp;t=34s&quot; rel=&quot;nofollow noreferrer&quot;&gt;34 seconds into your video&lt;/a&gt;), which is applying a time-varying force. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Your gains look very, very low, and I would be surprised that they're doing much of anything. To demonstrate, consider the quick simulation I ran in Simulink:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/kFnJJ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kFnJJ.png&quot; alt=&quot;PID Loop&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/oCdWk.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/oCdWk.png&quot; alt=&quot;PID Output&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second figure above is the output of a step response to a PID controller with your PID gains. It is far too slow of a response for you to get meaningful control of an aerial vehicle. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, I reiterate: How are you tuning the gains? I suggested &lt;a href=&quot;https://robotics.stackexchange.com/a/8660/9720&quot;&gt;a couple months ago&lt;/a&gt; a method you could you to do your tuning. I would expect your gains to be probably 100x larger than they are. Kp somewhere about 10-20 maybe, Ki at 5 or 10% of that, maybe 1 or 2, and Kd maybe 25% of the Ki gain, somewhere maybe 0.25 or 0.5. Those gains would look more along the lines of what I would expect, at least.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;:EDIT:&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I forgot to add that it does &lt;em&gt;not&lt;/em&gt; look like anything is saturating. Your motors never appear to hit a sustained full-speed output and your integral error never reaches a point where it is clipped, either. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2016-02-25T16:46:50.443" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="9253" PostTypeId="2" ParentId="8900" CreationDate="2016-02-25T19:29:50.757" Score="4" Body="&lt;p&gt;The following are mostly based on &lt;a href=&quot;http://www.cs.cmu.edu/%7Ekaess/pub/Dellaert17fnt.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;&amp;quot;Factor Graphs for Robot Perception&amp;quot; by Frank Dellaert and Michael Kaess&lt;/a&gt;, with additional notes:&lt;/p&gt;&#xA;&lt;p&gt;As a reminder, marginalization is about having a joint density &lt;span class=&quot;math-container&quot;&gt;$p(x, y)$&lt;/span&gt; over two variables &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt;, and we would like to marginalize out or &amp;quot;eliminate a variable&amp;quot;, lets say &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt; in this case:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;\begin{equation}&#xA;  p(x) = \int_{y} p(x, y)&#xA;\end{equation}&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;resulting in a density &lt;span class=&quot;math-container&quot;&gt;$p(x)$&lt;/span&gt; over the remaining variable &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Now, if the density was in covariance form with mean &lt;span class=&quot;math-container&quot;&gt;$\boldsymbol{\mu}$&lt;/span&gt; and covariance &lt;span class=&quot;math-container&quot;&gt;$\mathbf{\Sigma}$&lt;/span&gt;, partitioned as follows:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;\begin{equation}&#xA;  p(x, y) = \mathcal{N}(&#xA;    % Mean&#xA;    \begin{bmatrix}&#xA;      \boldsymbol\mu_{x} \\ &#xA;      \boldsymbol\mu_{y}&#xA;    \end{bmatrix},&#xA;    % Covariance&#xA;    \begin{bmatrix}&#xA;      \mathbf\Sigma_{xx}, \mathbf\Sigma_{xy} \\ &#xA;      \mathbf\Sigma_{yx}, \mathbf\Sigma_{yy}&#xA;    \end{bmatrix}&#xA;  )&#xA;\end{equation}&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;marginalization is simple, as the corresponding sub-block &lt;span class=&quot;math-container&quot;&gt;$\mathbf{\Sigma}_{xx}$&lt;/span&gt; already contains the covariance on &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; after marginalizing out &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt;, i.e.,&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;\begin{equation}&#xA;  p(x) = \mathcal{N}(&#xA;    % Mean&#xA;    \boldsymbol\mu_{x},&#xA;    % Covariance&#xA;      \mathbf\Sigma_{xx}&#xA;  )&#xA;\end{equation}&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;However, in the nonlinear least squares formulation, we don't have the covariance&#xA;&lt;span class=&quot;math-container&quot;&gt;$\mathbf{\Sigma}$&lt;/span&gt;, we can however estimate it via the following property:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;\begin{equation}&#xA;  \mathbf{\Sigma} = \mathbf{H}^{-1}&#xA;\end{equation}&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;where &lt;span class=&quot;math-container&quot;&gt;$\mathbf{H}$&lt;/span&gt; is the hessian in a Gauss-Newton system (approximated with &lt;span class=&quot;math-container&quot;&gt;$\mathbf{J}^{T} \mathbf{J}$&lt;/span&gt;), it just so happens that when we're trying to invert the Hessian via Schur's complement, we are actually:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Inverting a sub-block of &lt;span class=&quot;math-container&quot;&gt;$\mathbf{H}$&lt;/span&gt;: to solve &lt;span class=&quot;math-container&quot;&gt;$\mathbf{H} \delta\mathbf{x} = \mathbf{b}$&lt;/span&gt; for &lt;span class=&quot;math-container&quot;&gt;$\delta\mathbf{x}$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;li&gt;Performing marginalization to remove old states&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;both at the same time. The marginalized &lt;span class=&quot;math-container&quot;&gt;$\mathbf{H}$&lt;/span&gt; (after Schur's complement) will be equivalent to &lt;span class=&quot;math-container&quot;&gt;$\mathbf{\Sigma}_{xx}^{-1}.$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;h2&gt;Derivation of Schurs Complement in Gauss-Newton&lt;/h2&gt;&#xA;&lt;p&gt;From the Gauss-Newton system, &lt;span class=&quot;math-container&quot;&gt;$\mathbf{H} \delta\mathbf{x} = \mathbf{b}$&lt;/span&gt;, we can derive the marginalization of the old states &lt;span class=&quot;math-container&quot;&gt;$\mathbf{x}_{2}$&lt;/span&gt; algebraically. Let us decompose the system as:&#xA;&lt;span class=&quot;math-container&quot;&gt;\begin{equation}&#xA;  % H&#xA;  \begin{bmatrix}&#xA;    \mathbf{H}_{11} &amp;amp; \mathbf{H}_{12} \\ &#xA;    \mathbf{H}_{21} &amp;amp; \mathbf{H}_{22}&#xA;  \end{bmatrix}&#xA;  % x&#xA;  \begin{bmatrix}&#xA;    \delta\mathbf{x}_{1} \\ &#xA;    \delta\mathbf{x}_{2}&#xA;  \end{bmatrix}&#xA;  = &#xA;  % b&#xA;  \begin{bmatrix}&#xA;    \mathbf{b}_{1} \\ &#xA;    \mathbf{b}_{2}&#xA;  \end{bmatrix}&#xA;\end{equation}&lt;/span&gt;&#xA;If we multiply out the block matrices and vectors out we get:&#xA;&lt;span class=&quot;math-container&quot;&gt;\begin{equation}&#xA;  % Line 1&#xA;  \mathbf{H}_{11} \delta\mathbf{x}_{1} &#xA;    + \mathbf{H}_{12} \delta\mathbf{x}_{2} &#xA;    = \mathbf{b}_{1} \\&#xA;  % Line 2&#xA;  \mathbf{H}_{21} \delta\mathbf{x}_{1} &#xA;    + \mathbf{H}_{22} \delta\mathbf{x}_{2} &#xA;    = \mathbf{b}_{2} &#xA;\end{equation}&lt;/span&gt;&#xA;Now if we want to marginalize out the &lt;span class=&quot;math-container&quot;&gt;$\mathbf{x}_{2}$&lt;/span&gt;, we simply rearrange the second equation above to be w.r.t. &lt;span class=&quot;math-container&quot;&gt;$\mathbf{x}_{2}$&lt;/span&gt; like so:&#xA;&lt;span class=&quot;math-container&quot;&gt;\begin{align}&#xA;  % Line 1&#xA;  \mathbf{H}_{21} \delta\mathbf{x}_{1} &#xA;    + \mathbf{H}_{22} \delta\mathbf{x}_{2} &#xA;    &amp;amp;= \mathbf{b}_{2} \\&#xA;  % Line 2&#xA;  \mathbf{H}_{22} \delta\mathbf{x}_{2} &#xA;    &amp;amp;= \mathbf{b}_{2} - \mathbf{H}_{21} \delta\mathbf{x}_{1} \\&#xA;  % Line 3&#xA;  \delta\mathbf{x}_{2} &#xA;    &amp;amp;= \mathbf{H}_{22}^{-1} \mathbf{b}_{2} - \mathbf{H}_{22}^{-1} \mathbf{H}_{21} \delta\mathbf{x}_{1} \\&#xA;\end{align}&lt;/span&gt;&#xA;substitute our &lt;span class=&quot;math-container&quot;&gt;$\delta\mathbf{x}_{2}$&lt;/span&gt; above back into &lt;span class=&quot;math-container&quot;&gt;$\mathbf{H}_{11} \delta\mathbf{x}_{1} + \mathbf{H}_{12} \delta\mathbf{x}_{2} = \mathbf{b}_{1}$&lt;/span&gt;, and rearrange the terms so it is w.r.t &lt;span class=&quot;math-container&quot;&gt;$\delta\mathbf{x}_{1}$&lt;/span&gt; to get:&#xA;&lt;span class=&quot;math-container&quot;&gt;\begin{align}&#xA;  % Line 1&#xA;  \mathbf{H}_{11} \delta\mathbf{x}_{1} + \mathbf{H}_{12} &#xA;  (\mathbf{H}_{22}^{-1} \mathbf{b}_{2} &#xA;    - \mathbf{H}_{22}^{-1} \mathbf{H}_{21} \delta\mathbf{x}_{1}) &#xA;  &amp;amp;= \mathbf{b}_{1} \\&#xA;  % Line 2&#xA;  \mathbf{H}_{11} \delta\mathbf{x}_{1} &#xA;  + \mathbf{H}_{12} \mathbf{H}_{22}^{-1} \mathbf{b}_{2} &#xA;  - \mathbf{H}_{12} \mathbf{H}_{22}^{-1} \mathbf{H}_{21} &#xA;    \delta\mathbf{x}_{1} &#xA;  &amp;amp;= \mathbf{b}_{1} \\&#xA;  % Line 3&#xA;  (\mathbf{H}_{11} - \mathbf{H}_{12}\mathbf{H}_{22}^{-1}\mathbf{H}_{21}) \mathbf{x}_{1}  &#xA;  &amp;amp;= \mathbf{b}_{1} - \mathbf{H}_{12} \mathbf{H}_{22}^{-1} \mathbf{b}_{2}&#xA;\end{align}&lt;/span&gt;&#xA;We end up with the Schur Complement of &lt;span class=&quot;math-container&quot;&gt;$\mathbf{H}_{22}$&lt;/span&gt; in &lt;span class=&quot;math-container&quot;&gt;$\mathbf{H}$&lt;/span&gt;:&#xA;&lt;span class=&quot;math-container&quot;&gt;\begin{align}&#xA;  \mathbf{H} / \mathbf{H}_{22} := &#xA;    \mathbf{H}_{11} &#xA;    - \mathbf{H}_{12}\mathbf{H}_{22}^{-1}\mathbf{H}_{21} \\&#xA;  \mathbf{b} / \mathbf{b}_{2} := &#xA;    \mathbf{b}_{1} - \mathbf{H}_{12} \mathbf{H}_{22}^{-1} \mathbf{b}_{2}&#xA;\end{align}&lt;/span&gt;&#xA;If you want to marginalize out &lt;span class=&quot;math-container&quot;&gt;$\delta\mathbf{x}_{1}$&lt;/span&gt; you can follow the same process above but w.r.t &lt;span class=&quot;math-container&quot;&gt;$\delta\mathbf{x}_{1}$&lt;/span&gt;, that is left as an exercise to the reader ;)&lt;/p&gt;&#xA;" OwnerUserId="13009" LastEditorUserId="1999" LastEditDate="2021-01-29T12:56:52.857" LastActivityDate="2021-01-29T12:56:52.857" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="9254" PostTypeId="1" AcceptedAnswerId="9255" CreationDate="2016-02-25T19:33:56.047" Score="3" ViewCount="287" Body="&lt;p&gt;I recently bought a set of escs, brushless outrunner motors and propellers. I'm trying to perform a calibration on the esc, but I can't find how I can do that without using components other than the arduino uno itself. The setup I've managed to make is the one shown in the picture. The escs are a mystery, as there is no manual to be found. If it helps, the buy link is this : &lt;a href=&quot;http://www.ebay.co.uk/itm/4x-A2212-1000KV-Outrunner-Motor-4x-HP-30A-ESC-4x-1045-prop-B-Quad-Rotor-/111282436897&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.ebay.co.uk/itm/4x-A2212-1000KV-Outrunner-Motor-4x-HP-30A-ESC-4x-1045-prop-B-Quad-Rotor-/111282436897&lt;/a&gt;&#xA;There might also be a problem with the battery (LiPo 3.7V, 2500mAh).&#xA;&lt;a href=&quot;https://i.stack.imgur.com/vF9YJ.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vF9YJ.jpg&quot; alt=&quot;My Setup&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can andybody figure out what I'm doing wrong?&#xA;The sample arduino code I found was this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;Servo.h&amp;gt;&#xA;&#xA;#define MAX_SIGNAL 2000&#xA;#define MIN_SIGNAL 700&#xA;#define MOTOR_PIN 9&#xA;&#xA;Servo motor;&#xA;&#xA;void setup() {&#xA;  Serial.begin(9600);&#xA;  Serial.println(&quot;Program begin...&quot;);&#xA;  Serial.println(&quot;This program will calibrate the ESC.&quot;);&#xA;&#xA;  motor.attach(MOTOR_PIN);&#xA;&#xA;  Serial.println(&quot;Now writing maximum output.&quot;);&#xA;  Serial.println(&quot;Turn on power source, then wait 2 seconds and press any key.&quot;);&#xA;  motor.writeMicroseconds(MAX_SIGNAL);&#xA;&#xA;  // Wait for input&#xA;  while (!Serial.available());&#xA;  Serial.read();&#xA;&#xA;  // Send min output&#xA;  Serial.println(&quot;Sending minimum output&quot;);&#xA;  motor.writeMicroseconds(MIN_SIGNAL);&#xA;&#xA;}&#xA;&#xA;void loop() {  &#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="13010" LastActivityDate="2016-02-25T19:56:09.163" Title="Pure Arduino Quadcopter" Tags="&lt;arduino&gt;&lt;quadcopter&gt;&lt;esc&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9255" PostTypeId="2" ParentId="9254" CreationDate="2016-02-25T19:56:09.163" Score="3" Body="&lt;p&gt;What is the problem you're having? You ask, &amp;quot;Can anybody figure out what I'm doing wrong?&amp;quot; but you don't state clearly what your problem is. Will the motors not spin up after? Is anything happening when you do the calibration?&lt;/p&gt;&#xA;&lt;p&gt;As an FYI, &lt;a href=&quot;https://electronics.stackexchange.com/a/27024/76598&quot;&gt;here&lt;/a&gt; is an answer on EE stack exchange explaining the basic startup modes for an electronic speed controller. Quoting:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Normal starup&lt;/strong&gt; [one style of ESC]:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Turn On ESC&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;minimum throttle&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;wait 2 seconds&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;maximum throttle&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;wait 2 seconds&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;minimum throttle&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;wait 1 second&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;OK to Go&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Normal starup&lt;/strong&gt; [another style of ESC]:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Turn On ESC&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;minimum&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;wait 3 seconds&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;OK to Go&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;Calibration&lt;/strong&gt;:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Turn on ESC&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;maximum&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;wait 2 sec&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;minimum&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;wait 1 sec&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;OK to go&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;From that post, typically there's a beep from the ESC between each of these steps (where you're instructed to wait, wait for the beep).&lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2016-02-25T19:56:09.163" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="9256" PostTypeId="1" AcceptedAnswerId="9258" CreationDate="2016-02-26T00:13:05.127" Score="1" ViewCount="739" Body="&lt;p&gt;I am working on a micro dispensing system, using syringe pump. The design involves a syringe on top to be moved by stepper motor. There would be one liquid reservoir form which the syringe would pull liquid from, and push it to eject liquid from other end. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When we pull the syringe, the liquid is sucked into the syringe, while the other opening is shut. When the syringe is pushed, the liquid is ejected from the other end.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The quantity of liquid to be dispensed would be very small (400mg) so i am using small syringe of 1 or 2 ml .. as per my measurement, after every 100 dispensing operations, 1 ml syringe would be empty and we would need to pull liquid from the reservoir into the syringe, and do the dispensing again. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is, I am unsure about the check valve here. Is there a 'Single' check valve available which would allow this kind of flow to happen ?&lt;a href=&quot;https://i.stack.imgur.com/TWKZy.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/TWKZy.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13013" LastActivityDate="2016-02-26T04:32:42.403" Title="3 way check valve" Tags="&lt;motor&gt;&lt;design&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9257" PostTypeId="2" ParentId="9256" CreationDate="2016-02-26T00:58:52.857" Score="1" Body="&lt;p&gt;The &lt;a href=&quot;http://www.syringepump.com/syringes%20and%20plumbing%20supplies.php#ee&quot; rel=&quot;nofollow&quot;&gt;dual check valve here&lt;/a&gt; should work. &lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2016-02-26T00:58:52.857" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9258" PostTypeId="2" ParentId="9256" CreationDate="2016-02-26T04:32:42.403" Score="1" Body="&lt;p&gt;Two comments:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One, you don't need a double/dual check valve; one on the inlet line and one on the outlet would work. See the image below. You haven't explained why two distinct check valves are less desirable than an all-in-one solution, so I'm suggesting it in the event it was overlooked. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Two, I'm not sure how your measurements add up. You state, &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&quot;The quantity of liquid to be dispensed would be very small (400mg)&quot; &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;and then later you state&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;after every 100 dispensing operations, 1 ml syringe would be empty.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Assuming the dispensing liquid is anywhere close to water, it will have a density of approximately 1g/cm3, or 1g/mL. So, a 400mg dispensing quantity means your 1mL syringe is empty after 2.5 doses. If you're going to get 100 doses of 400mg in a 1mL syringe, then that means that you've got 100*400 = 40,000mg, or 40g, in the 1mL syringe. That's 40g/mL, or about &lt;a href=&quot;https://en.wikipedia.org/wiki/Lead&quot; rel=&quot;nofollow noreferrer&quot;&gt;four times the density of lead&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/UMgJt.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/UMgJt.png&quot; alt=&quot;Two check valves&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-02-26T04:32:42.403" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="9260" PostTypeId="1" AcceptedAnswerId="9270" CreationDate="2016-02-26T09:46:36.657" Score="0" ViewCount="642" Body="&lt;p&gt;I want to build a low cost robot, running ROS for educational purposes. It can be a simple line follower using raspberry pi and an IR sensor. Is it overambitious as a beginner project? How difficult is it to make ROS run on custom hardware?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S. I am newbie in both robotics and programming and I am more interested in building actual robots than running simulations. Also, I cant afford to buy ROS compatible robots.&lt;/p&gt;&#xA;" OwnerUserId="10758" LastEditorUserId="11472" LastEditDate="2016-02-26T14:58:18.780" LastActivityDate="2016-02-27T18:11:08.750" Title="How difficult it is to build simple robots (for example Line follower) using raspberry pi and ROS?" Tags="&lt;ros&gt;&lt;raspberry-pi&gt;&lt;electronics&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2016-02-27T19:02:36.907" ContentLicense="CC BY-SA 3.0" />
  <row Id="9261" PostTypeId="2" ParentId="2596" CreationDate="2016-02-26T11:52:09.593" Score="0" Body="&lt;p&gt;I'm sure they publish, and I bet you can't find anything because they're sponsored by the military. When I was in college, any research that was paid for by the military typically came with a rider that our theses and dissertations had to be made private for 1 year, and that was the longest the university would allow them to be withheld. I'm sure if they could have gotten more time they would have demanded it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, Boston Dynamics is a company, and I'm sure they are competing for funding,  so I don't know that they are as comfortable demanding a short time line as a public university would be. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My advice would be to file freedom of information act requests to see if you can get any papers, if you're really that interested. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-02-26T11:52:09.593" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9262" PostTypeId="1" CreationDate="2016-02-26T12:41:03.180" Score="1" ViewCount="67" Body="&lt;p&gt;I started to use ROS hydro (Robot Operating System) on ubuntu, using the simulator &quot;Gazebo&quot; and roscpp library, in order to program some robots. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case of pick up and place known objects by robots, what are the topics of object perception for pr2 in ROS??&lt;/p&gt;&#xA;" OwnerUserId="13021" LastEditorUserId="13022" LastEditDate="2016-03-03T21:30:52.837" LastActivityDate="2016-03-03T21:30:52.837" Title="Topics of object perception for pr2" Tags="&lt;ros&gt;&lt;gazebo&gt;" AnswerCount="0" CommentCount="2" ClosedDate="2016-02-27T19:05:50.240" ContentLicense="CC BY-SA 3.0" />
  <row Id="9263" PostTypeId="1" AcceptedAnswerId="9264" CreationDate="2016-02-26T15:10:48.647" Score="3" ViewCount="459" Body="&lt;p&gt;Some questions about this, my friends and I argued with this problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are operational space and joint space dependent on each other?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that $x_e$ (end effector's pos.) and $q$ (joint var.) can be expressed by an equation with non-linear function $k$:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$x_e = k(q)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I don't think that it tells us operational space and joint space are dependent. &lt;/p&gt;&#xA;" OwnerUserId="13023" LastEditorUserId="184" LastEditDate="2016-02-27T15:17:43.080" LastActivityDate="2016-02-27T15:17:43.080" Title="Are operational space and joint space dependent on each other?" Tags="&lt;kinematics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9264" PostTypeId="2" ParentId="9263" CreationDate="2016-02-26T17:25:00.503" Score="4" Body="&lt;p&gt;What an interesting question.  It's interesting because operational space parameters are the same if a robot is in configuration 1, or configuration 2, or even if it is not present at all.  Similarly, the robot can choose any joint space configuration it desires, independent of any operational space parameters.  So it would seem these two spaces are completely independent.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is the act of having the robot perform tasks that relates and constrains the two spaces.  Once you task a robot to &quot;move to point A (in operational space),&quot; you have just built an implicit constraint on the robot's joint space such that it must use the $\vec x = K (\vec q)$ kinematics to move to point A.  So any function of operational space tasks $f(\vec x$) gets mapped via inverse kinematics $K^{-1}$ to constrain joint space $\vec q$.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2016-02-26T17:25:00.503" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9265" PostTypeId="1" CreationDate="2016-02-26T20:49:21.647" Score="1" ViewCount="166" Body="&lt;p&gt;I started to use ROS hydro (Robot Operating System) and roscpp.&#xA;I tested some examples to move the gripper of pr2 in Gazebo (especially the code in :  &lt;a href=&quot;http://wiki.ros.org/pr2_gripper_sensor_action/Tutorials/Grab%20and%20Release%20an%20Object%20Using%20pr2_gripper_sensor_action&quot; rel=&quot;nofollow&quot;&gt;http://wiki.ros.org/pr2_gripper_sensor_action/Tutorials/Grab%20and%20Release%20an%20Object%20Using%20pr2_gripper_sensor_action&lt;/a&gt; ) with catkin package.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I launch : roslaunch pr2_gazebo pr2_empty_world.launch &lt;/p&gt;&#xA;&#xA;&lt;p&gt;and when I run the node of code with : rosrun pack_name node_name, I get :: Waiting for the r_gripper_sensor_controller/gripper_action action server to come up ... Waiting for the r_gripper_sensor_controller/gripper_action action server to come up ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to know the cause of those lines in order to see the results. what should I do??&lt;/p&gt;&#xA;&#xA;&lt;p&gt;it is notable that when I launch : roslaunch pr2_gripper_sensor_action pr2_gripper_sensor_actions.launch&lt;br&gt;&#xA;      in the previous link, I get : &lt;/p&gt;&#xA;&#xA;&lt;p&gt;[pr2_gripper_sensor_actions.launch] is neither a launch file in package [pr2_gripper_sensor_action] nor is [pr2_gripper_sensor_action] a launch file name&lt;/p&gt;&#xA;" OwnerUserId="13022" LastEditorUserId="13022" LastEditDate="2016-02-27T16:21:02.187" LastActivityDate="2016-02-27T16:21:02.187" Title="Waiting for the r_gripper_sensor_controller/gripper_action action server to come up" Tags="&lt;ros&gt;&lt;gazebo&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9266" PostTypeId="2" ParentId="8951" CreationDate="2016-02-27T06:58:00.967" Score="0" Body="&lt;p&gt;The Raspberry Pi's UART interface can handle up to 4Mbps which fits my needs as I am sending a 480 element floating vector from Pi_1 to Pi_2 &lt;/p&gt;&#xA;" OwnerUserId="11311" LastActivityDate="2016-02-27T06:58:00.967" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9267" PostTypeId="1" AcceptedAnswerId="9272" CreationDate="2016-02-27T11:51:07.267" Score="7" ViewCount="104" Body="&lt;p&gt;I have to know where a multi-rotor is, in a rectangular room, via 6 lasers, 2 on each axis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is like this: &lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Inputs :&lt;/h1&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Room : square =&gt; 10 meters by 10 meters&lt;/li&gt;&#xA;&lt;li&gt;6 positions of the lasers : &lt;strong&gt;Fixed&lt;/strong&gt; on the frame&lt;/li&gt;&#xA;&lt;li&gt;6 orientations of the lasers : &lt;strong&gt;Fixed&lt;/strong&gt; on the frame&lt;/li&gt;&#xA;&lt;li&gt;The 6 measurements of the lasers&lt;/li&gt;&#xA;&lt;li&gt;The quaternion from the IMU of my flight controller (PixHawk).&lt;/li&gt;&#xA;&lt;li&gt;The origin is centered on the gravity center of the multi-rotor and defined as if the walls are perpendicular to each axes (the normal of the wall in X is (-1,0,0)) &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h1&gt;Output :&lt;/h1&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Position in 3D (X,Y,Z)&lt;/li&gt;&#xA;&lt;li&gt;Angular position (quaternion)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Since I got the angular position of the multi-rotor, I rotated the laser positions and orientations via the quaternion, then extrapolate via the 6 measurements and I got the 3 walls. (orientations of the walls are trivial, then only one point is enough to determine its position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Badly, I noticed that the &lt;strong&gt;yaw&lt;/strong&gt; (rotation about z) measurement from the PixHawk is &lt;strong&gt;unreliable&lt;/strong&gt;. Then I should measure the yaw from the lasers, but I do not success to do it. Event if the 2D problem is easy, I am lost in 3D.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does someone know if it [&lt;em&gt;Algorithm to know XYZ position and quaternion from 6 measurments&lt;/em&gt;] exists somewhere ? Or what is the right way to go on this problem ? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The question :&lt;/strong&gt; How could I get the yaw from 2 measurements from 2 lasers which I know the original position, orientation and the pitch and roll. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;NOTE : Green pointers are the origin position, Red pointers are the &quot;final&quot; position, but could be rotated around the red circle (due to yaw).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ARr3D.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ARr3D.png&quot; alt=&quot;Representation&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13029" LastEditorUserId="13029" LastEditDate="2016-02-27T16:31:37.700" LastActivityDate="2016-02-28T14:52:34.973" Title="6D localization with 6 lasers" Tags="&lt;algorithm&gt;&lt;geometry&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9269" PostTypeId="1" AcceptedAnswerId="9273" CreationDate="2016-02-27T17:13:16.327" Score="3" ViewCount="134" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;UPDATE&lt;/em&gt;&lt;/strong&gt;&#xA;  I have aded 50 bounty for &lt;a href=&quot;https://stackoverflow.com/questions/35672762/finding-features-to-track-from-ar-drone-2-camera-illumination&quot;&gt;this&lt;/a&gt; question on the StackOverflow&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I am trying to implement object tracking from the camera(just one camera, no Z info). Camera has 720*1280 resolution, but I usually rescale it to 360*640 for faster processing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This tracking is done from the robots camera and I want a system which would be as robust as possible. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I will list what I did so far and what were the results.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;I tried to do &lt;strong&gt;&lt;em&gt;colour tracking&lt;/em&gt;&lt;/strong&gt;, I would convert image to hsv colour space, do thresholding, some morphological transformations and then find the object with the biggest area. This approach made a fair tracking of the object, unless there are no other object with the same colour. As I was looking for the max and if there are any other objects bigger than the one I need, robot would go towards the bigger one&lt;/li&gt;&#xA;&lt;li&gt;Then, I decided to track &lt;strong&gt;&lt;em&gt;circled objects of the specific colour&lt;/em&gt;&lt;/strong&gt;. However, it was difficult to find under different angles&lt;/li&gt;&#xA;&lt;li&gt;Then, I decided to track &lt;strong&gt;&lt;em&gt;square objects of specific colour&lt;/em&gt;&lt;/strong&gt;. I used this&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;&lt;pre&gt;&lt;code&gt;       // Approximate contour with accuracy proportional&#xA;        // to the contour perimeter&#xA;        cv::approxPolyDP(&#xA;                cv::Mat(contours[i]),&#xA;                approx,&#xA;                cv::arcLength(cv::Mat(contours[i]), true) * 0.02,&#xA;                true&#xA;        );&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;and then I checked this condition&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;if (approx.size() &gt;= 4 &amp;amp;&amp;amp; approx.size() &amp;lt;= 6)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;and afterwards I checked for&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;solidity &gt; 0.85 and aspect ratio between 0.85 and 1.15&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;But still result is not as robust as I would expect, especially the size. If there are several squares it would not find the needed one.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;So, now I need some suggestions on what other &lt;strong&gt;&lt;em&gt;features&lt;/em&gt;&lt;/strong&gt; of the object could I use to improve tracking and how? As I mentioned above several times, one of the main problems is &lt;strong&gt;&lt;em&gt;size&lt;/em&gt;&lt;/strong&gt;. And I know the size of the object. However, I am not sure how I can make use of it, because I do not know the distance of the object from the camera and that is why I am not sure how to represent its size in pixel representation so that I can eliminate any other blobs that do not fall into that range.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;UPDATE&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the third step, I described how I am going to detect squares with specific colour. Below are the examples of what I am getting. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I used this HSV range for the red colour:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Scalar(250, 129, 0), Scalar(255, 255, 255), params to OpenCV's inRange function&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;HMIN = 250, HMAX = 255; SMIN = 129, SMAX = 255; VMIN = 0, VMAX = 255;&#xA;  (Would like to see your suggestions on tweaking this values as well)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So, in this picture you can see the processing; gaussian blurring (5*5),&#xA;morphological closing two times (5*5). And the image with the label &quot;result&quot; shows the tracked object (please look at the green square).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/XSffp.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XSffp.png&quot; alt=&quot;Thresholding and tracking based on HSV colour space 1&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the second frame, you can see that it cannot detect the &quot;red square&quot;. The only main difference between these two pics is that I bended down the lid of the laptop (please look closer if you cannot notice). I suppose this happens because of the &lt;strong&gt;&lt;em&gt;illumination&lt;/em&gt;&lt;/strong&gt;, and this causes the thresholding to give not desired results. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/iJ5Vk.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/iJ5Vk.png&quot; alt=&quot;Bended the lid of the laptop&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only way, I can think of is doing two separate processing on the image. First, to do thresholding based on the colour as I was doing above. Then if I find the object to move to the next frame. If not to use &lt;a href=&quot;https://github.com/Itseez/opencv/blob/master/samples/cpp/squares.cpp&quot; rel=&quot;nofollow noreferrer&quot;&gt;this opencv's find squares&lt;/a&gt; method.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, this method will involve doing too much of processing of the image. &lt;/p&gt;&#xA;" OwnerUserId="11539" LastEditorUserId="-1" LastEditDate="2017-05-23T12:37:11.430" LastActivityDate="2016-03-01T01:32:21.870" Title="Suggestions on object types (features) to track from ARDrone 2 camera" Tags="&lt;quadcopter&gt;&lt;cameras&gt;&lt;opencv&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9270" PostTypeId="2" ParentId="9260" CreationDate="2016-02-27T18:11:08.750" Score="2" Body="&lt;p&gt;It is not extremely difficult to achieve this. It is probably a great way to learn after you complete the &lt;a href=&quot;http://wiki.ros.org/ROS/Tutorials&quot; rel=&quot;nofollow&quot;&gt;main ROS tutorials&lt;/a&gt;. Using ROS will get you free joystick or keyboard teleoperation of your bot along potential integration with the ROS navigation stack.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You have the choice of either interfacing with your robot hardware using the GPIO onboard you raspi or using a microcontroller and interfacing that with the computer using &lt;a href=&quot;http://wiki.ros.org/rosserial&quot; rel=&quot;nofollow&quot;&gt;rosserial&lt;/a&gt;. I would recommend using rosserial and an Arduino because controlling a small robot and reading analog sensors is better documented on the Arduino platform. Either way is totally doable though. Good Luck!&lt;/p&gt;&#xA;" OwnerUserId="11851" LastActivityDate="2016-02-27T18:11:08.750" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9271" PostTypeId="2" ParentId="9269" CreationDate="2016-02-27T18:20:43.770" Score="0" Body="&lt;p&gt;You could use &lt;a href=&quot;http://docs.opencv.org/master/d5/dae/tutorial_aruco_detection.html#gsc.tab=0&quot; rel=&quot;nofollow&quot;&gt;ArUco fiducials&lt;/a&gt; to demonstrate robust object detection and tracking. From there, you might be able to adapt the fiducial pipeline to detect more generic objects like colored squares.&lt;/p&gt;&#xA;" OwnerUserId="11851" LastActivityDate="2016-02-27T18:20:43.770" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9272" PostTypeId="2" ParentId="9267" CreationDate="2016-02-27T22:34:09.293" Score="1" Body="&lt;h1&gt;&lt;strong&gt;Solution : Is there another solution without prerotating vectors ?&lt;/strong&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;I finally got a solution, and here it is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Python, &lt;a href=&quot;https://github.com/ros/geometry/blob/7f1188a1ba35ff4d1b107fd05cc494b2a34f550c/tf/src/tf/transformations.py&quot; rel=&quot;nofollow noreferrer&quot;&gt;ROS geometry library&lt;/a&gt;, numpy&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My actual code/maths in short : &lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) Rotate the position &amp;amp; orientation of lasers by roll &amp;amp; pitch. The &lt;code&gt;axes='sxyz'&lt;/code&gt; means : Static axis, apply roll, pitch, yaw. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;quaternion_matrix&lt;/code&gt; creates a 4x4 transformation matrix from the quaternion.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;laser = (1,1,1,0) # laser position&#xA;orientation = (1,0,0,0) # laser orientation&#xA;&#xA;roll, pitch, _ = list(euler_from_quaternion(q, axes='sxyz'))&#xA;q = quaternion_from_euler(roll, pitch, 0, axes=&quot;sxyz&quot;)&#xA;laser = numpy.dot(quaternion_matrix(q), laser)&#xA;orientation = numpy.dot(quaternion_matrix(q), orientation)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;2) Algebric solution : Rotation around Z in function of yaw&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/rHaS5.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rHaS5.gif&quot; alt=&quot;Rotation around Z&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;laser       = [-sin(a)*laser[1] + cos(t)*laser[0], &#xA;                cos(t)*laser[1] + sin(t)*laser[0],&#xA;                laser[2]]&#xA;&#xA;orientation = [-sin(a)*orientation[1] + cos(t)*orientation[0], &#xA;                cos(t)*orientation[1] + sin(t)*orientation[0],&#xA;                orientation[2]]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;3) Algebric solution : Extrapolation from the measurments in function of yaw&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Important notice : Since the rotation do not scale vectors, the denominator of the K factor is a constant. Then, we can simplify it by precompute length of the orientation vector. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;M = 100 # distance&#xA;K = sqrt(M^2 / (orientation[0]^2 + orientation[01]^2 + orientation[1]^2))&#xA;PointOnWall = [ K * orientation[0] + laser[0],&#xA;                K * orientation[1] + laser[1],&#xA;                K * orientation[2] + laser[2]]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;4) Algebric solution : From this, on two laser, get walls. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The two &quot;PointOnWall&quot; equations should gives enough data to get the yaw. Knowing this is a (-1,0,0) normale, I can find 2 planes from the two points :&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/0BqsP.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0BqsP.gif&quot; alt=&quot;Wall equation&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;5) Algebric solution : Measure the YAW.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One plane in the other (Via XMaxima), we got : &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/BLwIf.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/BLwIf.gif&quot; alt=&quot;Tan equation&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;def getYaw(position1, orientation1, measure1, position2, orientation2, measure2):&#xA;    length1 = length(orientation1)&#xA;    length2 = length(orientation2)&#xA;    k1 = measure1/length1&#xA;    k2 = measure2/length2&#xA;    numerator   = -k2*orientation2[0] + k1*orientation1[0] + position1[0] - position2[0]&#xA;    denominator = -k2*orientation2[1] + k1*orientation1[1] + position1[1] - position2[1]&#xA;    return atan(numerator/denominator)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;As expected, roll &amp;amp; pitch DO NOT interfere, since the positions and orientations are prerotated.&lt;/p&gt;&#xA;" OwnerUserId="13029" LastEditorUserId="13029" LastEditDate="2016-02-28T14:52:34.973" LastActivityDate="2016-02-28T14:52:34.973" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="9273" PostTypeId="2" ParentId="9269" CreationDate="2016-02-28T00:27:25.003" Score="0" Body="&lt;p&gt;I will attempt to answer slightly more than your question in order to expose you to alternative tracking methods.&#xA;Note that what you are doing is essentially trying to locate and classify a certain object in an image. To do this robustly generally you need to have some training images and a label image that has each pixel labeled 0 or 1, where the pixels that are 1 are the object to be tracked. This is often done by hand. The training and label images are used to calculate a histogram of all the features of the object of interest, and those histograms are used either for simple range-based thresholding, or for use in a machine learning algorithm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The following rely on having somehow located a region of interest that you want to describe. These ROIs may have been found by using the opencv::findContours function, or even randomly, or by testing a [100x100] window in a grid of every [60x60] pixels. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Shape descriptions:&lt;/strong&gt; Area, perimeter, convexity, centroid, mean and standard deviation of distance of each pixel from centroid, skeleton length&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Colour descriptions:&lt;/strong&gt; mean, standard deviation, range, skew and kurtosis of intensities.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Texture descriptions:&lt;/strong&gt; gabor filters response, standard deviation of intensities (in a local window)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most of these are implemented in the python library &lt;strong&gt;&lt;em&gt;scikit-image&lt;/em&gt;&lt;/strong&gt; in the &lt;em&gt;measure&lt;/em&gt; module.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In any case you will need to do the above on a 1-channel image.&#xA;That may be just a single R/G/B channel, or combined into a grayscale channel, or for instance the (R - 0.5*(G + B)) channel if you were tracking for instance red apples.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regardless of your detection method, it would be useful to track the object in pixel space with a Kalman Filter (KF). This would then give you additional spatial features which would be the difference between each contour centroid, and the expected position of the contour that the KF estimated.&lt;/p&gt;&#xA;" OwnerUserId="8859" LastActivityDate="2016-02-28T00:27:25.003" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9274" PostTypeId="1" CreationDate="2016-02-28T01:28:42.257" Score="1" ViewCount="35" Body="&lt;p&gt;What action cost should be used to get a smooth path? Like we use distance traversed to get the shortest path. Will the cost to get a smooth path will be something related to rate of change of slope of the path?&lt;/p&gt;&#xA;" OwnerUserId="11751" LastActivityDate="2016-02-28T01:28:42.257" Title="Action cost to get smooth path" Tags="&lt;motion-planning&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="9275" PostTypeId="2" ParentId="3058" CreationDate="2016-02-28T09:55:38.703" Score="2" Body="&lt;p&gt;From &lt;a href=&quot;http://www.nethat.net/&quot; rel=&quot;nofollow&quot;&gt;netHAT&lt;/a&gt;, you can find an EtherCAT shield for the Raspberry Pi:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The netHAT module developed by Hilscher adds the RaspberryPi® RealTime-communication. This enables the RaspberryPi® to be used as a slave in a PROFINET network. But not only PROFINET is possible, all other common real-time Ethernet networks such as Ethernet / IP or EtherCAT could be supported. The protocol stacks are preconfigured to 32 input and output bytes, that can be exchanged with the PLC. Hilscher provides everything which is necessary for the communication with the PLC, device description files, firmware and application example. Just attach the module and start to communicate.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="13037" LastEditorUserId="9176" LastEditDate="2016-03-01T10:14:57.243" LastActivityDate="2016-03-01T10:14:57.243" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9276" PostTypeId="1" CreationDate="2016-02-28T17:16:05.087" Score="0" ViewCount="68" Body="&lt;p&gt;I'm a CS student and I need to give a 30-minute lecture about 1-2 papers describing 1-2 algorithms for any of the main problems in Robotics (navigation, coverage, patrolling, etc.).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have no background in Robotics specifically, but I did take classes such as Algorithms and AI (including some basic AI algorithms such as &lt;a href=&quot;https://en.wikipedia.org/wiki/A*_search_algorithm&quot; rel=&quot;nofollow&quot;&gt;A*&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/Iterative_deepening_depth-first_search&quot; rel=&quot;nofollow&quot;&gt;IDS&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm#Practical_optimizations_and_infinite_graphs&quot; rel=&quot;nofollow&quot;&gt;UCS&lt;/a&gt;, and subjects such as &lt;a href=&quot;https://en.wikipedia.org/wiki/Decision_tree_learning&quot; rel=&quot;nofollow&quot;&gt;decision trees&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/Game_theory&quot; rel=&quot;nofollow&quot;&gt;game theory&lt;/a&gt;, etc.).&#xA;The difference between simply describing one of the above is that I need the paper to refer to actual physical robots and their algorithms, with real problems in the physical world, as opposed to AI &quot;agents&quot; with more theoretical algorithms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am required to lecture on 1-2 academic papers, published from 2012 onward, with a &quot;respectable&quot; amount of citations. Any suggestions of such papers would be greatly appreciated!&lt;/p&gt;&#xA;" OwnerUserId="13038" LastActivityDate="2016-02-29T13:01:28.843" Title="Papers on Algorithms in Robotics" Tags="&lt;navigation&gt;&lt;algorithm&gt;&lt;theory&gt;&lt;coverage&gt;" AnswerCount="1" CommentCount="7" ClosedDate="2016-02-29T16:19:37.813" ContentLicense="CC BY-SA 3.0" />
  <row Id="9277" PostTypeId="1" CreationDate="2016-02-28T20:27:22.807" Score="2" ViewCount="71" Body="&lt;p&gt;Let's say I have a 6-DOF flying camera and I want to make it move through a circular tube autonomously and let's suppose that the camera and the system that makes it fly are considered to be just a point in space. Which feature of the image I get from the camera can I use to move the camera appropriately, that is to get in one end of the tube and get out from the other? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, I thought I could use edge detection. As the camera moves forward through the tube, due to the fact that its far plane is not infinitely away, there is a dark circle forming where the camera sees nothing surrounded by the walls of the tube. I think that &quot;preserving&quot; this circle might be the way to go (for example if it becomes an ellipse I have to move the camera accordingly for it to become a circle again), but what are the features that will help me &quot;preserve&quot; the circle?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to use image-based visual servoing to do that. However, what troubles me is the following. In most visual-servoing applications I have seen, the control objective is to make some features &quot;look&quot; in a certain way from the camera point of view. For example, we have the projections of 4 points and we want the camera to move accordingly so that the projections' coordinates have some specific values. But the features are actually the same. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my case I thought that for example I could say that I want the projections of the 4 &quot;edge points&quot; of the circle/ellipse to take specific values so that they define a circle centered at the fov of the camera. But if the camera moves to achive this setup of features, then the 4 new &quot;edge points&quot; will correspond to the projections of 4 different real points of the pipe and the theory collapses. Am I right to think that? Any way to get past it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any oher ideas or relevant literature?&lt;/p&gt;&#xA;" OwnerUserId="7107" LastEditorUserId="7107" LastEditDate="2016-02-29T15:04:35.000" LastActivityDate="2016-02-29T15:54:14.707" Title="How to guide a camera through a circular tube?" Tags="&lt;localization&gt;&lt;cameras&gt;&lt;motion-planning&gt;&lt;visual-servoing&gt;&lt;exploration&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9278" PostTypeId="2" ParentId="7764" CreationDate="2016-02-28T20:47:12.073" Score="-1" Body="&lt;p&gt;That's not a wire, it is the antenna, which hangs loose from the side of the quad. Only one end of the antenna is soldered to the board.&lt;/p&gt;&#xA;" OwnerUserId="13039" LastEditorUserId="9176" LastEditDate="2016-03-01T10:38:19.637" LastActivityDate="2016-03-01T10:38:19.637" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9279" PostTypeId="2" ParentId="9277" CreationDate="2016-02-28T23:43:39.510" Score="1" Body="&lt;p&gt;If you cannot sense your closeness to the wall of the cylinder, then the image itself will have to guide you.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the end of the cylinder is completely within the field of view of the camera, I think your approach is good.  When the circle becomes an ellipse that means the focal plane of the camera is skewed relative to the end of the pipe, and you will need to correct the UAV's orientation.  You will also need to ensure the center of the circle, or centroid of the ellipse, is centered in the camera's image space.   When it is not centered, you will need to compensate the UAV's position.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Be prepared for the circle to become an ellipse with ANY orientation in the camera's image.  That is, it won't always have the long axis of the ellipse aligned with one of your camera axes.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, what will you do when you are so close to the end of the pipe that the circle is larger than your camera's field of view?   That is where your approach breaks down.   Is it possible to use a second, reward-pointing camera to keep you going straighr?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based on your comment, be careful about the object you are looking for obscuring some of the circle/ellipse at the end of the pipe.  You might end up having to modify your vision processing algorithm to allow for blockage of part of the pipe end.  In that case, you need at least five points on the ellipse, to determine the coefficients of the ellipse.  If the object is small and the diameter of the pipe is large, this should not be a problem.  But we don't know from the question.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastEditorUserId="11125" LastEditDate="2016-02-29T15:05:01.303" LastActivityDate="2016-02-29T15:05:01.303" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9281" PostTypeId="2" ParentId="9276" CreationDate="2016-02-29T13:01:28.843" Score="1" Body="&lt;p&gt;You might like the algorithms run on PR-2 robot. Two papers I can think of are &quot;A single planner for a composite task of approaching, opening and navigating through non-spring and spring-loaded doors&quot; and &quot;Motion planning for smooth pickup of moving objects&quot;. Both can be found on IEEE Xplore.&lt;/p&gt;&#xA;" OwnerUserId="13045" LastActivityDate="2016-02-29T13:01:28.843" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9282" PostTypeId="1" AcceptedAnswerId="9285" CreationDate="2016-02-29T13:27:12.623" Score="1" ViewCount="76" Body="&lt;p&gt;For my robotics project I would like to utilise readily available mobile phone 'power banks' to simplify the power system for my robot. However, such power banks output 5V, great for the logic systems but not for the motors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was wondering if I could wire the outputs of two power banks in series and get 10V or is this a very bad idea? Should I wire them in parallel and use a boost converter? Is a custom solution using 'ordinary' Li-Po batteries and associated charging circuit the best answer?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additional Information:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;This will be a two wheeled robot.&lt;/li&gt;&#xA;&lt;li&gt;5V Logic&lt;/li&gt;&#xA;&lt;li&gt;7+V Motor driver&lt;/li&gt;&#xA;&lt;li&gt;Power Banks: 5V 2.1Amp 2100mAh&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="7185" LastEditorUserId="9176" LastEditDate="2016-03-01T19:40:00.903" LastActivityDate="2016-03-01T19:40:00.903" Title="Mobile phone power packs" Tags="&lt;mobile-robot&gt;&lt;power&gt;&lt;battery&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9285" PostTypeId="2" ParentId="9282" CreationDate="2016-02-29T15:09:16.440" Score="1" Body="&lt;p&gt;Go ahead and use the phone battery for your logic supply.  Then, series wire individual, high current L-ion cells to make your motor battery.  It's good practice to keep the noisy, high-current stuff on a different buss, away from your processor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Invest in a smart (processor driven) charger that can monitor the voltage of each cell and charge them evenly.  It can also detect a cell that is weak.  Weak cells charge and discharge very quickly, and they must be removed from the battery.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DC/DC converters are not very efficient.  They generate their own noise on the source and sink sides.  And, they get expensive for the current levels required by a pair of motors.&lt;/p&gt;&#xA;" OwnerUserId="12952" LastActivityDate="2016-02-29T15:09:16.440" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9286" PostTypeId="2" ParentId="9282" CreationDate="2016-02-29T15:37:28.090" Score="0" Body="&lt;p&gt;If 5V blocks were your only option, then I would say &quot;yes, this is fairly safe&quot; with the caveats:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If one cell discharges faster than the other, it will start to deteriorate much faster than the other -- it will last for fewer recharge cycles&lt;/li&gt;&#xA;&lt;li&gt;You should re-charge them separately, not in series&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;However, if you're looking for an off-the-shelf 10V lithium-ion battery pack, you should consider the 10.8V batteries that are available in many models of cordless drills.  &lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2016-02-29T15:37:28.090" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9287" PostTypeId="2" ParentId="9277" CreationDate="2016-02-29T15:54:14.707" Score="1" Body="&lt;p&gt;The visual servoing will probably be sufficient for keeping the open end of the tube in view -- keeping the proper orientation of the vehicle with respect to the tube.  The goal will be to keep the center of the detected circle in the center of the camera's view.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, this technique will not be sufficient to tell you how far you are from the edges of the tube.  In theory, yes -- but in practice you won't have enough precision to detect the slightly misshapen circle before you crash into the side wall.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Simple horizontal range finding might be the best (safest and most accurate) way to maintain your distance from the walls.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2016-02-29T15:54:14.707" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9289" PostTypeId="2" ParentId="9244" CreationDate="2016-02-29T21:28:24.617" Score="1" Body="&lt;p&gt;After wrestling with this one for almost a week, I believe I have found the cause; and unfortunately the only solution seems to be a re-flash.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem was ROS didn't seem to be linking properly to some of the shared resources (specifically, rospy or roscpp tutorials) and did not want to work with packages I had developed myself or downloaded from code repositories like Github or Bitbucket. After a few days of playing with it, and two reflashes, I believe I found the issue: &lt;strong&gt;&lt;em&gt;Jetpack v2.0&lt;/em&gt;&lt;/strong&gt; (though I do not know the exact details).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;roswtf did not find any issues, and I had already checked the exports and sources in the .bashrc file through:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;gedit ~/.bashrc&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I was looking right at the tutorial folders for rospy_tutorials and roscpp_tutorials, in the right folder &lt;code&gt;/opt/ros/indigo/share/&lt;/code&gt;. Even the individual code files within could be opened and editted. I first wanted to make sure that it wasn't the way I configured ROS, I did a couple uninstalls/reinstalls of ROS itself (leaving Ubuntu in place). I tried two methods:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;First&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to &lt;a href=&quot;http://answers.ros.org/question/66194/complete-ros-uninstallation/&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt; ros.answers' question about removing ROS&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sudo apt-get purge ros-*&#xA;sudo apt-get autoremove&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Second&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Following &lt;a href=&quot;http://answers.ros.org/question/86766/uninstall-and-reinstall-ros/&quot; rel=&quot;nofollow&quot;&gt;a different&lt;/a&gt; ros.answers' question as a guide&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sudo apt-get purge ros-*&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Neither of these seemed to allow ROS to be installed and configured properly. So I booted up my host to re-flash, and I realized something: I had both Jetpack v1.2 and Jetpack v2.0 in my downloads folder - and I knew that I had used v2.0 for this latest flash (it provided some graphical fixes and bug fixes for OpenCV4Tegra that I thought would be helpful for what I wanted to do). The critical different between Jetpack v1.2 and v2.0 is that v2.0 was released to add support for the new TX1 development board. The TX1 uses a new, 'more standard' ARM-CPU, while the TK1 uses an ARM-CPU that was designed/heavily modified by nVidia (if I am not mistaken about my understanding of these two CPUs). They are also using different GPUs, but I suspect this was less of an issue, since I hadn't gotten to any code that utilized the GPU.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2&gt;&lt;strong&gt;Solution&lt;/strong&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I re-flashed using Jetpack v1.2&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After reflashing, I installed the Grinch Kernel following the instructions &lt;a href=&quot;https://devtalk.nvidia.com/default/topic/906018/jetson-tk1/-customkernel-the-grinch-21-3-4-for-jetson-tk1-developed/&quot; rel=&quot;nofollow&quot;&gt;on the nVidia devtalk forums&lt;/a&gt;, and then installed ROS manually. Normally I just use the scripts provided by Jetsonhacks on their Github, but I wanted to see everything happening this time around. So I followed the instructions on the &lt;a href=&quot;http://wiki.ros.org/indigo/Installation/UbuntuARM&quot; rel=&quot;nofollow&quot;&gt;wiki.ros&lt;/a&gt;. Now, when installing ROS on an ARM-based platform or other embedded system, the desktop version &lt;strong&gt;&lt;em&gt;WILL NOT&lt;/em&gt;&lt;/strong&gt; install. I suspect something in the desktop version is looking for an x86 CPU, and it prevents the simulations (among other things) from installing correctly. Instead, what you can do is&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sudo apt-get install ros-indigo-robot&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This will install what is the 'most complete' (and appropriate, in my opinion) version of ROS for the TK1 if you are developing onboard and not cross-compiling your code. I do not believe using the robot variant of ROS prevents you from cross-compiling if you feel like it. The robot variant does not include (most of) the GUI components of ROS, you'll have to install those manually as you find yourself in need of them. I'm guessing the GPU and the GUI components aren't really sure what to do with one another in this case. The robot variant also does not install the tutorials (the broken thing that started this whole mess) either. Those will need to be installed with&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sudo apt-get install ros-indigo-ros-tutorials&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Once those are installed, start &lt;code&gt;roscore&lt;/code&gt; in one terminal window, and type (in a separate terminal window):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;rosrun rospy_tutorials talker&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This will start the roscore processes, and the python talker program should start up just fine. All the other tutorials and packages also seem to work as well now too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Jetpack v2.0&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I guess lesson learned? If you are planning on running ROS on a TK1, don't use v2.0 of the Jetpack. Not sure what is going on, but I am going to send what I did learn to nVidia and hope that v2.1 fixes the issues. Unfortunately, this amounts more to 'symptoms' than any actual causes. My guess it is a case of two different, highly specialized, experimental pieces of software just not knowing how to play nice together. There is always bound to be some issues. In the mean time, if you're like me, stick to v1.2 of the Jetpack, and you should be fine.&lt;/p&gt;&#xA;" OwnerUserId="11762" LastActivityDate="2016-02-29T21:28:24.617" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9291" PostTypeId="2" ParentId="9232" CreationDate="2016-03-01T02:24:58.703" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I'm using the L3GD20H MEMS gyroscope with an Arduino ...&#xA;  How is the sensor's interrupt line intended to be used if the&#xA;  microcontroller can't handle the interrupt from an ISR using an&#xA;  interrupt-driven I2C subsystem?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I'm assuming you've already looked at &lt;a href=&quot;http://www.adafruit.com/datasheets/L3GD20H.pdf&quot; rel=&quot;nofollow&quot;&gt;the L3GD20H datasheet&lt;/a&gt; and the &lt;a href=&quot;http://www.st.com/web/catalog/sense_power/FM89/SC1288/PF254039&quot; rel=&quot;nofollow&quot;&gt;L3GD20H errata sheet&lt;/a&gt;,&#xA;and you understand that the data-ready pin (DRDY) is sometimes called an interupt pin (INT2), not to be confused with &quot;the&quot; programmable interrupt pin (INT1).&#xA;In particular,&#xA;p. 45 of the datasheet says that reading the IG_SRC register clears the interrupt signal on INT1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I were you, my next step would be to look at Arduino software for the L3GD20H and see how they handled it.&#xA;(If someone has already done it, it must be possible, right?)&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://learn.adafruit.com/adafruit-triple-axis-gyro-breakout/programming&quot; rel=&quot;nofollow&quot;&gt;The Adafruit L3GD20 Library for the Arduino&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.nordevx.com/content/l3gd20h-gyro&quot; rel=&quot;nofollow&quot;&gt;The NorDevX L3GD20H Gyro Arduino Code Using I2C&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.pololu.com/product/2468&quot; rel=&quot;nofollow&quot;&gt;The Pololu L3GD20 Arduino library&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2&gt;easy method&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Perhaps the easiest method is polling: connect the interrupt pin of the L3GD20H up to some general-purpose digital input pin of the Arduino.&#xA;Then write a function to check that pin and do the appropriate things.&#xA;Then call that function every time through the main &lt;code&gt;loop()&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just because a pin is labeled &quot;interrupt&quot; doesn't mean it has to be handled by an interrupt routine.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;currently more difficult method&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Several people have requested that someone improve the Wire library to make it non-blocking&#xA;(&#xA;&lt;a href=&quot;http://forum.arduino.cc/index.php?topic=37822.0&quot; rel=&quot;nofollow&quot;&gt;&quot;Wire library and blocking&quot;&lt;/a&gt;;&#xA;&lt;a href=&quot;https://github.com/arduino/Arduino/issues/1476&quot; rel=&quot;nofollow&quot;&gt;&quot;Make Wire library non-blocking&quot;&lt;/a&gt;;&#xA;&lt;a href=&quot;http://diydrones.com/forum/topics/i2c-wiring-library-lockup?id=705844%3ATopic%3A720939&quot; rel=&quot;nofollow&quot;&gt;&quot;I2C Wiring Library - Lockup&quot;&lt;/a&gt;;&#xA;etc.&#xA;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With such a theoretical future Wire library,&#xA;you could write one interrupt handler that handles a pin-change interrupt of some Arduino pin connected to the interrupt pin of the L3GD20H.&#xA;On a low-to-high change, that interrupt handler would do nothing and immediately return.&#xA;On a high-to-low change, that interrupt handler would call the (non-blocking)&#xA;functions of the Wire library that&#xA;appends the appropriate message to the end of a queue in a RAM buffer.&#xA;If the I2C hardware was idle at that instant (i.e., it wasn't already in the middle of sending out a byte, possibly in the middle of a message to some other device on the I2C bus),&#xA;that (non-blocking) function would pull the first byte of the next message in the queue and start sending it out the I2C hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Much later, after that interrupt handler returned to the main &lt;code&gt;loop()&lt;/code&gt;,&#xA;the I2C hardware would finish transmitting a byte (the first byte of this message, or some byte in some previous message),&#xA;and that I2C hardware would trigger a different interrupt handler (internal to the improved Wire library) that would pull the next byte from the queue in RAM and start sending that byte out the I2C hardware, check for and buffer up any incoming byte in the I2C hardware, etc.&lt;/p&gt;&#xA;" OwnerUserId="187" LastActivityDate="2016-03-01T02:24:58.703" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9292" PostTypeId="2" ParentId="7764" CreationDate="2016-03-01T10:52:31.253" Score="1" Body="&lt;p&gt;The red wire is the antenna. It can be seen sticking out of the board if you google for other images of &quot;Blade 180QX board&quot;. It should only be connected at one end. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This &lt;a href=&quot;http://www.rcgroups.com/forums/showthread.php?t=1954185&quot; rel=&quot;nofollow noreferrer&quot;&gt;thread&lt;/a&gt; recommends that you stick it out the side rather than putting it under the board, which is what would generally be the advice for antenna.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/xEHDW.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xEHDW.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It might be that by repositioning it you have introduced some interference, but the new position should introduce less interference, so it's possible that something else is causing your unstability.&lt;/p&gt;&#xA;" OwnerUserId="1321" LastActivityDate="2016-03-01T10:52:31.253" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9293" PostTypeId="2" ParentId="7764" CreationDate="2016-03-01T11:10:21.570" Score="1" Body="&lt;p&gt;Whilst not wishing to detract from &lt;a href=&quot;https://robotics.stackexchange.com/questions/7764/blade-180qx-what-does-this-red-wire-do#answer-9278&quot;&gt;Rob's answer&lt;/a&gt;, and following on from &lt;a href=&quot;https://robotics.stackexchange.com/questions/7764/blade-180qx-what-does-this-red-wire-do#answer-9292&quot;&gt;Pete's suggestion of googling for other images&lt;/a&gt;, if you go to the manufacturer's website, &lt;a href=&quot;http://www.bladehelis.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Bladehelis&lt;/a&gt;, for &lt;a href=&quot;http://www.bladehelis.com/180QX/&quot; rel=&quot;nofollow noreferrer&quot;&gt;that particular product&lt;/a&gt;, and look at the &lt;a href=&quot;http://www.bladehelis.com/Products/RelatedParts.aspx?ProdID=BLH7400A&amp;amp;Category=Parts%20Listing&quot; rel=&quot;nofollow noreferrer&quot;&gt;replacement parts link&lt;/a&gt;, you will see the controller board listed, the &lt;a href=&quot;http://www.bladehelis.com/Products/Default.aspx?ProdID=BLH7401&quot; rel=&quot;nofollow noreferrer&quot;&gt;5-in-1 Ctrl Unit, RX/ESC/Mix/Gyros/Ch6: 180 QX HD&lt;/a&gt;. On that page there is an &lt;a href=&quot;http://www.bladehelis.com/ProdInfo/BLH/250/BLH7401-250.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;image&lt;/a&gt;, albeit not a particularly good one, that clearly shows the red wire/antenna:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Np7gK.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Np7gK.jpg&quot; alt=&quot;5-in-1 Ctrl Unit, RX/ESC/Mix/Gyros/Ch6: 180 QX HD&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Without wishing to go into the mechanics of antennas (for this, take a look at &lt;a href=&quot;https://electronics.stackexchange.com/questions/73998/how-antenna-radiateshow-currents-flows-through-wire/&quot;&gt;How antenna radiates(how currents flows through wire)&lt;/a&gt;), it is sufficient to say that antennas only require to be connected to the PCB at one end, and so, you have not damaged your device, nor have you accidently disconnected the other end of the red wire, as it is meant to be &quot;loose&quot; anyway.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://www.bladehelis.com/ProdInfo/Files/BLH7400-Manual.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;manual&lt;/a&gt;, unfortunately, is of no help at all, with regards to this matter.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;As an aside, if you want to have a look at a good blog about this copter, then take a look at &lt;a href=&quot;http://www.diysoup.com/do-it-yourself/remote-control-helicopters/blade-180-qx-hd-quadcopter/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Blade 180 QX HD Quadcopter Breakdown&lt;/a&gt;, on diysoup. There are plenty of photos of the PCB there, as well as a wealth of other information.&lt;/p&gt;&#xA;" OwnerUserId="9176" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2016-03-01T13:00:59.720" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9294" PostTypeId="1" CreationDate="2016-03-01T14:41:27.433" Score="0" ViewCount="341" Body="&lt;p&gt;I have built an R/C Lawnmower.  I call it the Honey Badger, because it tears stuff up (that's a good thing).  Well, I used used batteries to get the project going and now it's long past time to get the Honey Badger going again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Honey Badger is built on an electric wheelchair frame, and originally used wheelchair deepcycle batteries.  U1 if I recall.  There are 4 of them wired in 2 banks in series and parallel to give 24V for the 24V motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Going down to the used wheelchair parts place is about an hour drive and requires a weekend visit and will get me used batteries of unknown condition.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Contrast that with Harbor Freight, which is 20 minutes away and has &lt;a href=&quot;http://www.harborfreight.com/12-volt-35-amp-hour-universal-battery-68680.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;solar batteries&lt;/a&gt; the same physical dimensions and comparable (?) electrical characteristics.  I think with coupons, tax, and after playing the game, I can get a battery for ~$50, about the same price as a used U1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found that Amazon also has U1 batteries, and they can be had for ~\$120 for 2 with shipping.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Batteries plus will sell me some deepcycle auto batteries of greater Ah capacity for ~$100 each.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Gross for each solution winds up being around the same: ~\$240 - ~\$300.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a difference in technology between a &quot;solar battery&quot; and a &quot;wheelchair battery&quot;?  Is that difference substantial?  Given that I'm pretty rough with this thing, is any particular technology any better suited to these tasks?  Is there a benefit or drawback to using an automotive battery?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have the charger from the original wheelchair and if I recall, it's good for the capacity and has room to spare.  I think it can put out 5 amps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/vKY0O.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vKY0O.jpg&quot; alt=&quot;R/C Lawnmower&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10350" LastEditorUserId="9176" LastEditDate="2016-03-01T16:38:15.940" LastActivityDate="2016-05-16T16:25:59.783" Title="Choosing a battery: is a harbor freight solar battery OK for a R/C Lawnmower?" Tags="&lt;battery&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9296" PostTypeId="1" AcceptedAnswerId="9335" CreationDate="2016-03-01T21:45:27.677" Score="0" ViewCount="229" Body="&lt;p&gt;I'm seeing a behavior in my RoboClaw 2x7 that I can't explain.  I've been trying to manually tune the velocity PID settings (I don't have a windows box so I can't use Ionmc's tuning tool) by using command 28 to set the velocity PID gains, then command 55 to verify that they're set correctly, then 35 to spin the wheel at half of its maximum speed.  The problem is that no combination of PID gains seems to make any difference at all.  I've set it to 0,0,0 and the motor still spins at roughly the set point.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I must be doing something wrong, but I'm pouring over &lt;a href=&quot;http://downloads.ionmc.com/docs/roboclaw_datasheet_2x7a.pdf&quot; rel=&quot;nofollow&quot; title=&quot;datasheet&quot;&gt;the datasheet&lt;/a&gt; and I just don't see what it is.  By all rights the motor shouldn't spin when I use 0,0,0!  Any ideas?&lt;/p&gt;&#xA;" OwnerUserId="13061" LastActivityDate="2016-03-05T19:35:16.890" Title="Why does my RoboClaw seem to be ignoring the PID gain settings?" Tags="&lt;control&gt;&lt;pid&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9297" PostTypeId="1" AcceptedAnswerId="10291" CreationDate="2016-03-01T21:46:16.840" Score="2" ViewCount="1872" Body="&lt;p&gt;I am trying to use a quaternions for robotics and there is one thing I don't understand about it. Most likely because I don't understand how to define position with quaternions and how to define rotation with quaternions if there is any difference..&lt;br&gt;&#xA;Please watch my &quot;understanding steps&quot; and correct if I am wrong somewhere.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lets assume I we have 2 vehicle positions described by 2 rotation quaternions:&#xA;$$&#xA;q_1 = w_1 + x_1i + y_1j +z_1k = \cos(\pi/4) + \sin(\pi/4)i&#xA;$$&#xA;This quaternion is normalized and represents rotation over the $x$ axis for $\pi/2$ angle as I understand it.&#xA;$$&#xA;q_2 = w_2 + x_2i + y_2j + z_2k = \cos(\pi/4) + \sin(\pi/4)k&#xA;$$&#xA;And this one represents rotation for the same angle $\pi/2$ over the $y$ axis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$q_1*q_2 = q_3$ which would be the same rotation as if we made $q_1$ first and $q_2$ second. &#xA;$$q_3 = \frac{1}{2} + \frac{i}{2} +\frac{j}{2} +\frac{k}{2}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;QUESTION 1:&lt;/strong&gt; Given $q_2$ and $q_3$ how can I find $q_1$?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;QUESTION 2:&lt;/strong&gt; How to find a rotation angle over some other vector, given rotation quaternion? For example I want to find on what angle does $q_3$ turned over $2i+j-k$ quaternion.&lt;/p&gt;&#xA;" OwnerUserId="13063" LastActivityDate="2016-10-15T21:23:21.150" Title="Finding rotation quaternion" Tags="&lt;kinematics&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9298" PostTypeId="1" CreationDate="2016-03-01T21:55:04.620" Score="0" ViewCount="807" Body="&lt;p&gt;I am new working with robotic arms but I am having trouble finding the correct servo for the base of the arm. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is a 2 link robot - each link weighs 1.2 kg and is 40 cm long. I have a gripper of 10 centimeters. The servo in the gripper can hold a max of 4kg. The whole robotic arm, including the maximum load it will carry and the servos and other accessories, is 8.3 kg. The maximum load it needs to carry is 4 kg at the end of the arm at 90 cm. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What servo could I use to move the rotary base and what servo could I use to lift the arm in the base? The last one is to move the link so it would be preferable to have a 2 axis servo.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only specification I need right now is what servo to use my energy supply are two 12 volts DC batteries connected in series with 18Ah. I need the servo to be DC. The other things can be worked around the servo that can best do the work.&lt;/p&gt;&#xA;" OwnerUserId="13062" LastEditorUserId="9176" LastEditDate="2016-03-03T21:33:20.833" LastActivityDate="2016-03-04T16:09:33.213" Title="Finding high torque servo for robotic arm" Tags="&lt;robotic-arm&gt;&lt;servomotor&gt;" AnswerCount="2" CommentCount="2" ClosedDate="2016-03-08T14:22:02.250" ContentLicense="CC BY-SA 3.0" />
  <row Id="9299" PostTypeId="2" ParentId="9294" CreationDate="2016-03-01T22:12:01.807" Score="1" Body="&lt;p&gt;First let me state that how long it takes you to drive to a particular location or whether the batteries are used, etc. is all too specific to your scenario to matter with regards to what appears to be your root question, which is, &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&quot;Is there a difference in technology between a &quot;solar battery&quot; and a &quot;wheelchair battery&quot;?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In short, for what you have provided, the answer is no, there is no difference. The wheelchair batteries are lead-acid, as are the &quot;solar batteries&quot; and the batteries at your local battery shop. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lead-acid batteries all charge at about the same voltage (14.7V), are all &quot;dead&quot; at about the same voltage (10.8V), etc. The specifics of each battery, such as the number of charge cycles you could expect, depth of discharge before you damage the battery, etc., would probably vary by manufacturer, but that data isn't typically published and you would have to contact the manufacturer to get it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I were you, I would use past experience with operational life (in minutes) that you got from your current battery and use that as a guide to spec the battery capacity for your next battery. Ignore driving times, because if you're purchasing the correct battery you should only have to get one. Also, I wouldn't buy a used lead-acid battery. They're easily abused and, just because it can be &lt;em&gt;charged&lt;/em&gt; to full capacity doesn't mean that it will &lt;em&gt;hold&lt;/em&gt; that capacity. Damaged lead-acid batteries form internal bridges that short out the battery internally; this is what happens with a battery that won't &quot;hold&quot; a charge. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Generally, try to prevent ever discharging past 20% of capacity. So, for the sake of an example, if your old battery was 20Ah, and you would run it until it was completely dead (open circuit voltage of 10.8V) to get your lawn dead, then:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;It took 20Ah to mow your lawn.&lt;/li&gt;&#xA;&lt;li&gt;You were damaging the battery discharging 100% of the capacity. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;So, you should look at a battery where 20Ah is at least 80% of the capacity, meaning you need a battery of at least (20/0.8) = 25Ah capacity. Anything larger than this may be a waste of money, but anything under this capacity will very likely suffer a significantly shorter life expectancy due to over-discharging the battery. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-03-01T22:12:01.807" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="9301" PostTypeId="1" CreationDate="2016-03-02T07:09:26.910" Score="2" ViewCount="436" Body="&lt;p&gt;I was reading these papers on visual inertial odometry from IROS 15:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;cad=rja&amp;amp;uact=8&amp;amp;ved=0ahUKEwi1mN2quKHLAhUB6GMKHVwiBcsQFggiMAA&amp;amp;url=https%3A%2F%2Fait.inf.ethz.ch%2Fprojects%2F2015%2FPhotometricEKF%2Fdownloads%2Firos2015photometric.pdf&amp;amp;usg=AFQjCNFLHMya8Hvo8FOrRRSspxVXut6Tlw&amp;amp;sig2=X-EzwVGRHqP9CXm0Xk-B-Q&quot; rel=&quot;nofollow&quot;&gt;Semi-Direct EKF-based Monocular Visual-Inertial Odometry&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://e-collection.library.ethz.ch/eserv/eth:48374/eth-48374-01.pdf&quot; rel=&quot;nofollow&quot;&gt;Robust Visual Inertial Odometry Using a Direct EKF-Based Approach&#xA;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would appreciate if someone could explain how semi-direct and direct methods vary exactly? As far as I understand, direct methods use pixel intensities in their framework. However, both these papers listed above use photometric intensities/pixel intensity values and yet one is semi direct and the other's direct. &lt;/p&gt;&#xA;" OwnerUserId="13065" LastEditorUserId="13065" LastEditDate="2016-03-03T17:35:14.333" LastActivityDate="2018-04-05T18:12:49.040" Title="Direct vs semi-direct methods for visual inertial odometry" Tags="&lt;ekf&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="9303" PostTypeId="1" AcceptedAnswerId="9338" CreationDate="2016-03-02T11:22:52.573" Score="1" ViewCount="158" Body="&lt;p&gt;Good day, I would like to ask how is it possible to use an ultrasonic sensor for altitude hold in a quadcopter if the sampling rate of the Ultrasonic sensor (HC-SR04) is only 20Hz before incurring any errors through polling when I had tested it. I have seen this sensor being implemented on other projects however I could not find any papers that explain the use of this sensor in better detail. I have seen possible solutions on the raspberry pi one using interrupts and the other using Linux's multithreading.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If my understanding is right, to use interrupts, I need a some sort of data ready signal from the ultrasonic sensor. However this is not available in this particular sensor. Is it possible to use the echo pin as the positive edge trigger for the interrupt service routine (read sonar/calculate distance function). But would this not introduce inconsistent loop execution times which is bad for a consistent PID loop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another approach is to use multithreading using the wiring-pi library which enables me to run a function, let's say a function that triggers the sonar and calculates the distance along side the pid control loop. How would this affect the PID control loop rate?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Which is the best way to implement sonar sensor based altitude hold?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="11311" LastActivityDate="2016-03-06T13:36:14.473" Title="Ultrasonic Sensor's Lag (20Hz) effect on PID contol loop rate (150Hz)" Tags="&lt;quadcopter&gt;&lt;pid&gt;&lt;stability&gt;&lt;real-time&gt;&lt;sonar&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9305" PostTypeId="1" CreationDate="2016-03-02T16:50:28.710" Score="2" ViewCount="87" Body="&lt;p&gt;I am working on a project with the Create 2. Just recently I have run into a problem with the battery state. The Create 2 has been charging all night so its clean light shows green. However, when I unplug it and press the clean button, it shows red and will not consistently run commands from my Arduino that I have hooked up to it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What could be the problem?&lt;/p&gt;&#xA;" OwnerUserId="13071" LastEditorUserId="9176" LastEditDate="2016-03-03T21:33:10.923" LastActivityDate="2016-03-25T15:20:56.763" Title="Create 2 light red/green" Tags="&lt;arduino&gt;&lt;irobot-create&gt;&lt;battery&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="9310" PostTypeId="2" ParentId="9298" CreationDate="2016-03-03T00:05:42.893" Score="0" Body="&lt;p&gt;The only servo I can think about, for your case, is the HS-7950TH. It can operate between 4 and 7 volts and 300 mAh at max.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With its titanium gears, it has maximum stall torque of 35 kg when used with 7 volts and 300 mAh, that should be enough for your requirements. &lt;/p&gt;&#xA;" OwnerUserId="9987" LastEditorUserId="9176" LastEditDate="2016-03-03T21:29:14.033" LastActivityDate="2016-03-03T21:29:14.033" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9312" PostTypeId="1" AcceptedAnswerId="9325" CreationDate="2016-03-03T10:57:03.057" Score="2" ViewCount="497" Body="&lt;p&gt;I have a chance to develop a user interface program that lets the user control a KUKA robot from a computer. I know how to program stuff with the KUKA utilities, like OrangeEdit, but I don't know how to do what I want to do. I don't even know what's the &quot;best&quot; language to talk to the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My idea is to control the robot with the arrow buttons, like up/down controls the Z axis and left/right controls the X/Y axes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can someone help me here? I know there's a lot of libraries to control the robot even with an Xbox controller, but if I limit the robot to 3 axes I might be able to control with simple buttons. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: Now imagine that i have a routine that consists on going from P1 to P2 then to P3. I know i can &quot;touch up&quot; the points to refresh its coordinates using the console, but can i do it in a .net application? like modifying the src/srcdat files?&lt;/p&gt;&#xA;" OwnerUserId="11884" LastEditorUserId="11884" LastEditDate="2016-03-25T16:15:49.630" LastActivityDate="2016-03-25T16:15:49.630" Title="KUKA delimiter .NET" Tags="&lt;robotic-arm&gt;&lt;kuka&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="9318" PostTypeId="1" CreationDate="2016-03-04T03:25:26.627" Score="4" ViewCount="1964" Body="&lt;p&gt;I am trying to understand the effect of drift in Simultaneous Localization and Mapping (SLAM). My understanding is that drift occurs because the robot tracks its position relative to a set of landmarks it is storing, but each landmark has a small error in its location. Therefore, an accumulation of these small errors over a long trajectory causes a large error by the end of the trajectory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, what I am confused about is what would happen when the robot tracks its way back to its starting positions. Suppose the robot starts in position A, and then starts to move along a path, mapping the environment as it does so, until it reaches position B. Now, the robot will have some error in its stored position of B, due to the drift during tracking. But then suppose the robot makes its way back to A, by tracking relative to all the landmarks it created during the first path. When it reaches A, will it be back at the true position of A, i.e. where it started the first path? Or will it have drifted away from A?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My intuition is that it will end up at the true position of A, because even though the landmarks have errors in them, as long as the error is not too large then the robot will eventually get back to the position where it stored the landmarks for A. And once it is there, those landmarks are definitely correct, without error, because they were initialized before any drift errors had started to accumulate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help? Thanks!&lt;/p&gt;&#xA;" OwnerUserId="8880" LastActivityDate="2016-03-04T03:52:41.050" Title="Understanding Drift in Simultaneous Localization and Mapping (SLAM)" Tags="&lt;mobile-robot&gt;&lt;localization&gt;&lt;slam&gt;&lt;navigation&gt;&lt;mapping&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9319" PostTypeId="2" ParentId="9318" CreationDate="2016-03-04T03:52:41.050" Score="4" Body="&lt;p&gt;Your intuition is mostly correct. Returning to where you started and re-observing landmarks you mapped earlier is called &lt;em&gt;closing the loop&lt;/em&gt; in the SLAM literature. As you mentioned, your uncertainty will grow as the errors accumulate before you return to the start, &lt;em&gt;if you don't have an absolute sensor&lt;/em&gt;. An absolute sensor is one that directly measures your state in the inertial coordinate frame (e.g., GPS). If you are relying on relative sensors (e.g., wheel encoders, an IMU, laser scanner), your uncertainty will grow. This is called &lt;em&gt;dead reckoning&lt;/em&gt; in the literature.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Closing the loop can be difficult because how do you know you've returned to the start? How do you know the landmarks you're observing now are the same ones you observed when you started? This depends on a number things. For example, if the landmarks have some sort of unique signature about them (e.g., this is possible with some computer vision algorithms), you can look up each landmark you come across in your &quot;dictionary&quot; of landmarks you've seen so far. But let's say the landmarks are trees that all kind of look the same and you have a laser scanner. Well if you have been keeping track of your uncertainty properly, and you know the uncertainty of your measurements, you can determine the likelihood any new landmark is one you've seen before by calculating the &lt;em&gt;Mahalanobis distance&lt;/em&gt; (i.e., distance that takes uncertainty into account) between new observations and landmarks in your current map. If the Mahalanobis distance is below some threshold, then you say you've found a match.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you've successfully closed the loop, depending on your SLAM algorithm, the uncertainty in your pose and the landmarks in your map becomes greatly reduced. This intuitively makes sense when you think about it. Let's say right before you close the loop, the uncertainty in your position was $\pm 3$ metres. Then your laser scanner (which has noise of $\pm 0.02$ metres) measures a landmark that you saw earlier, whose position you know pretty well (e.g., $\pm 0.05$ metres). It then makes sense that you know your position way better now! But wait, what about the other landmarks in your map? Their uncertainties are &lt;em&gt;correlated&lt;/em&gt; with the uncertainty of your position because they were measured from the robot (these correlations manifest themselves in the off-diagonal terms of your covariance matrix). Then it only makes sense that drastically improving knowledge of your pose also improves your map!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you're definitely on the right track. If you want to learn more, there is a good chapter on this topic in &lt;em&gt;Probabilistic Robotics&lt;/em&gt; by Thrun &lt;em&gt;et al.&lt;/em&gt; that has some pretty pictures showing the effects of loop closures. &lt;a href=&quot;https://www.youtube.com/watch?v=BaqSRf5pAZ0&quot; rel=&quot;nofollow&quot;&gt;Here is a video&lt;/a&gt; that shows a loop closure (watch what happens to the uncertainty ellipses around both the robot and the landmarks when the robot returns to the start).&lt;/p&gt;&#xA;" OwnerUserId="4320" LastActivityDate="2016-03-04T03:52:41.050" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="9320" PostTypeId="1" CreationDate="2016-03-04T04:47:19.047" Score="3" ViewCount="429" Body="&lt;p&gt;With introduction of incremental sampling algorithms, like PRM and RRT planning in higher dimensional spaces in reasonable computation time has become possible though it is PSPACE-hard. But why is a quadrotor motion planning problem still difficult even with simplified quadrotor model? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was solving a dynamic car problem with OMPL, which produced solution within 10s but I set a planning time of 100s for quadrotor, but it still does not find a solution.&lt;/p&gt;&#xA;" OwnerUserId="8916" LastActivityDate="2017-10-02T16:01:26.400" Title="why is quadrotor motion planning hard?" Tags="&lt;mobile-robot&gt;&lt;quadcopter&gt;&lt;motion-planning&gt;&lt;planning&gt;&lt;rrt&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9321" PostTypeId="1" CreationDate="2016-03-04T05:46:17.477" Score="3" ViewCount="282" Body="&lt;p&gt;Reading this paper on &lt;a href=&quot;http://e-collection.library.ethz.ch/eserv/eth:48374/eth-48374-01.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;visual odometry&lt;/a&gt;, where they have used a bearing vector to parameterize the features. I am having a hard time understanding what the state propagation equation for the bearing vector term means :&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/dK7d8.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dK7d8.png&quot; alt=&quot;Bearing vector and inverse depth parametrization&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The vector N is not mentioned in the equations, so its not very clear what it does. Would really appreciate if someone would help me understand it :)&lt;/p&gt;&#xA;" OwnerUserId="13065" LastActivityDate="2016-12-30T21:34:55.903" Title="Having a hard time understanding this equation in monocular EKF SLAM" Tags="&lt;localization&gt;&lt;slam&gt;&lt;navigation&gt;&lt;ekf&gt;&lt;mapping&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9322" PostTypeId="2" ParentId="9321" CreationDate="2016-03-04T09:21:14.027" Score="1" Body="&lt;p&gt;The text says:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;[...] where $N^T (\mu)$ linearly projects a 3D vector onto the 2D&#xA;  tangent space around the bearing vector $\mu$ [...]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="127" LastActivityDate="2016-03-04T09:21:14.027" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9323" PostTypeId="1" AcceptedAnswerId="9331" CreationDate="2016-03-04T10:51:15.787" Score="4" ViewCount="225" Body="&lt;p&gt;Looking at pictures of existing designs for quadropod robots, the servos in the legs seem to usually be mounted inside the chassis, with a second attachment at back of the servo as well, such as this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/x6UxD.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/x6UxD.jpg&quot; alt=&quot;Servo attached front and back&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;rather than putting what looks like an asymmetrical load, like the knees here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/MgzPq.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MgzPq.jpg&quot; alt=&quot;Servo attached one side only&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this for aesthetics or are there real structural reasons to minimize the lateral load on the axle on a robot of this size?&lt;/p&gt;&#xA;" OwnerUserId="13086" LastEditorUserId="350" LastEditDate="2016-03-04T19:08:38.443" LastActivityDate="2016-03-04T19:29:00.220" Title="Lateral load on a servo motor" Tags="&lt;joint&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9324" PostTypeId="1" AcceptedAnswerId="9368" CreationDate="2016-03-04T14:24:20.287" Score="0" ViewCount="1157" Body="&lt;p&gt;Good day, I have just finished tuning the Pitch and Roll PID's. I did this by setting the throttle such that the quad is weightless. I did the tuning of each axes separately.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would just like to ask what is the best way to tune the PID for maintaining an altitude setpoint.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Is it best to turn off the Pitch and Roll PID controllers while tuning the altitude PID or is it best to have them already active while tuning the latter controller?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I am going to use a cascaded PID controller using the Velocity along the z-axis calculated from the accelerometer output for the inner PID loop (150Hz) and the altitude measurement of the HC-SRO4 ultrasonic sensor (20Hz) for the outer PID loop.&lt;/p&gt;&#xA;" OwnerUserId="11311" LastActivityDate="2016-09-15T04:02:49.933" Title="Quadcopter PID Tuning for Altitude Hold/Position Hold along Z axis" Tags="&lt;quadcopter&gt;&lt;pid&gt;&lt;stability&gt;&lt;real-time&gt;&lt;sonar&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9325" PostTypeId="2" ParentId="9312" CreationDate="2016-03-04T15:59:22.697" Score="1" Body="&lt;p&gt;I assume you are working with a KRC4 or KRC2 controller since you have mentioned OrangeEdit. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order give your robot motion reference values you will need a technology packet called RSI Interface. This allows you to transmit ethernet packets to the controller and give new motion references with a 12 ms cylcetime. All you have to do is generate the required message (XML format) from a PC application based on the values of coming from your joystick. I think this approach is the best, preimplemented libraries you can find here: &lt;a href=&quot;https://sourceforge.net/projects/kct/&quot; rel=&quot;nofollow&quot;&gt;https://sourceforge.net/projects/kct/&lt;/a&gt; or &lt;a href=&quot;https://github.com/erensezener/kuka-rsi3-communicator&quot; rel=&quot;nofollow&quot;&gt;https://github.com/erensezener/kuka-rsi3-communicator&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are also other approches, exploiting some workarounds. &#xA;&lt;a href=&quot;https://www.mb.hs-wismar.de/cea/Kuka_KRL_Tbx/Kuka_KRL_Tbx.html&quot; rel=&quot;nofollow&quot;&gt;https://www.mb.hs-wismar.de/cea/Kuka_KRL_Tbx/Kuka_KRL_Tbx.html&lt;/a&gt;&#xA; or&#xA;&lt;a href=&quot;http://home.mis.u-picardie.fr/~fabio/Eng/documenti/articoli/ChScMoPr_RAM11.pdf&quot; rel=&quot;nofollow&quot;&gt;http://home.mis.u-picardie.fr/~fabio/Eng/documenti/articoli/ChScMoPr_RAM11.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT:&#xA;Once the src and dat files are loaded in memory they cannot be changed. You can still give new reference waypoints to the robot  with the above mentioned tools/interfaces.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the said program is not loaded in memory, you can do a .net ftp server, ftp in the Kuka controller, do the file operations for changing the coordinates. However, I do not think that a Kuka program can be loaded into memory and executed without any manual intervention (e.g switch mode selector to AUT or EXT).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT2: you mentiond KRC4. KRC4 supports customized HMI so instead of a PC connection you might get the same functionality by making an HMI screen with buttons and use the 6D mouse on the console (KCP), instead of a joystick.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2016-03-08T15:56:05.313" LastActivityDate="2016-03-08T15:56:05.313" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="9326" PostTypeId="2" ParentId="9298" CreationDate="2016-03-04T16:09:33.213" Score="0" Body="&lt;p&gt;Also you might want to take a look at Dynamixel servos. They are the mot powerful I have found with a suprisingly open control system.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2016-03-04T16:09:33.213" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9327" PostTypeId="1" CreationDate="2016-03-04T16:42:03.533" Score="2" ViewCount="135" Body="&lt;p&gt;As a subtask inside a main project I need to compute the position (x,y,z) of a quadrotor using an homography. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To do this I will use a camera (attached to the quadrotor) pointing down to an artificial landmark on the floor. Basically I need to compute the extrinsic parameters of the camera to know the pose with respect to the landmark. I know the projective points of the landmark in the camera, and the intrinsic matrix of the camera but I also need the real landmark position [X, Y, Z].&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suppose that Z coordinate is equal to 0 because the landmark is plane, but I am not sure how to compute the real [X,Y] coordinates.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any idea how to do that?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am also interested in put the (x,y,z) position of the quadrotor into a control path, anybody knows where I can find info about the most common controllers for do this kind of task?&lt;/p&gt;&#xA;" OwnerUserId="11050" LastActivityDate="2016-03-05T02:50:17.527" Title="Vision-based Position Estimation for a quadrotor" Tags="&lt;control&gt;&lt;computer-vision&gt;&lt;quadcopter&gt;&lt;uav&gt;&lt;visual-servoing&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9329" PostTypeId="2" ParentId="6791" CreationDate="2016-03-04T18:51:19.470" Score="0" Body="&lt;p&gt;I recently acquired a scout like you and am facing a similar problem.&#xA;I don't know of any areas with gaits predefined, so you'll have to experiment.&#xA;For short term you could hard-code a walking gait into a micro-controller.&#xA;For long term you will need to program a micro-controller with inverse kinematics&#xA;and possibly Zero Moment Point (or you could hard-code balance) and then feed that data for foot positions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this helps :)&lt;/p&gt;&#xA;" OwnerUserId="13090" LastActivityDate="2016-03-04T18:51:19.470" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9330" PostTypeId="2" ParentId="9327" CreationDate="2016-03-04T19:17:17.397" Score="1" Body="&lt;p&gt;It's odd that you're suggesting computing the position of a landmark.  Literally, a mark on the land -- a position that you should already know and will use to localize your vehicle.  You can give it whatever arbitrary location you want.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have only one landmark, the most logical choice for it is [0, 0, 0].  Or, you could determine the X,Y coordinates that match the landmark's location within the room.  As long as all the fixed-position objects are assigned coordinates from the same grid, it doesn't matter what they are.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2016-03-04T19:17:17.397" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9331" PostTypeId="2" ParentId="9323" CreationDate="2016-03-04T19:29:00.220" Score="2" Body="&lt;p&gt;The second design will put more stress on the servos over time, so there are indeed real structural reasons for the design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, it also looks like the second design is more of a prototype compared to the first.  And it's possible that the second design is trying to save weight, sacrificing some servo life in the interest of that goal.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Reducing total weight and increasing the speed at which you can iterate on your design are just 2 possible factors for why you might use a component in a suboptimal way.  Those tradeoffs really come down to individual preference.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2016-03-04T19:29:00.220" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9332" PostTypeId="2" ParentId="9327" CreationDate="2016-03-04T23:13:15.837" Score="1" Body="&lt;p&gt;Because a camera is a range-only sensor, you cannot directly estimate the relative position of the object.&#xA;Additionally, because you have only one object, there are infinite solutions that are equally possible, given only the angular camera measurements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Possible solutions:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have two images with a known relative position between the two, then you can use single-camera stereo vision to estimate the relative position between the quadrotor and the object.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another solution is to use range-bearing SLAM and set very high initial range uncertainty, and range observation noise[1][2]. You can estimate the observed range using trigonometry with a level-body assumption and altimeter readings, this will be really inaccurate but SLAM should significantly improve the estimate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, if you can simply add more objects that you can uniquely identify and know the relative positions of them, then you can use OpenCV solvePnP (see similar question [3]).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[1] &lt;a href=&quot;http://www.iri.upc.edu/people/jsola/JoanSola/eng/toolbox.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.iri.upc.edu/people/jsola/JoanSola/eng/toolbox.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[2] &lt;a href=&quot;http://www.mrpt.org/List_of_SLAM_algorithms&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.mrpt.org/List_of_SLAM_algorithms&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[3] &lt;a href=&quot;https://robotics.stackexchange.com/questions/8849/tracking-objects-from-camera-pid-controlling-parrot-ar-drone-2&quot;&gt;Tracking objects from camera; PID controlling; Parrot AR Drone 2&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8859" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2016-03-04T23:13:15.837" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="9333" PostTypeId="2" ParentId="9327" CreationDate="2016-03-05T02:50:17.527" Score="0" Body="&lt;p&gt;If you are able to design the artificial landmark yourself, you can use what some past colleagues of mine used in the context of camera space manipulation.   They designed their targets, like your landmark, as concentric high-contrast circles or ellipses.  With those targets they could extract distance information (measured versus expected diameters), as well as relative position between the camera and the center of the target.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2016-03-05T02:50:17.527" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9335" PostTypeId="2" ParentId="9296" CreationDate="2016-03-05T19:35:16.890" Score="0" Body="&lt;p&gt;Got it!  The problem was that there's a feedforward term in the control loop that the datasheet doesn't talk about.  The wheel and motor and I'm calibrating for are pretty light so the feedforward was enough to get pretty good tracking on its own (ie little error so little reliance on PID).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To solve it I sent in known-to-be-wrong QPPS settings to induce a small error, tuned velocity PID per the directions in the datasheet, and then reset QPPS to where it should be.&lt;/p&gt;&#xA;" OwnerUserId="13061" LastActivityDate="2016-03-05T19:35:16.890" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9336" PostTypeId="1" AcceptedAnswerId="15073" CreationDate="2016-03-06T01:37:43.133" Score="0" ViewCount="821" Body="&lt;p&gt;Quaternion has four parameters. Calculating Jacobian for inverse-kinematics, 3 positions and four quaternion parameters make Jacobian $7\times7$ instead of $6\times6$. How to reduce Jacobian to $6\times6$ when using quaternion?&lt;/p&gt;&#xA;" OwnerUserId="13100" LastActivityDate="2018-01-29T02:39:10.370" Title="Jacobian for Inverse Kinematics with quaternion of end effector" Tags="&lt;robotic-arm&gt;&lt;inverse-kinematics&gt;&lt;jacobian&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="9337" PostTypeId="1" AcceptedAnswerId="9339" CreationDate="2016-03-06T04:47:56.207" Score="0" ViewCount="194" Body="&lt;p&gt;I am working on a non-holonomic motion planning problem of a mobile robot in a completely unknown environment. After going through some research papers, I found that D-star algorithm is widely used in such conditions. But there are many D-star variants like Focused D*, D*-Lite, Field D* etc... So which of these variants is suitable in this case? Also please suggest any other better approach for this problem?&lt;/p&gt;&#xA;" OwnerUserId="11751" LastEditorUserId="11751" LastEditDate="2016-03-06T06:21:55.227" LastActivityDate="2016-03-06T15:01:16.080" Title="Suitable D star variant is for non-holonomic motion planning of mobile robots" Tags="&lt;mobile-robot&gt;&lt;motion-planning&gt;&lt;algorithm&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9338" PostTypeId="2" ParentId="9303" CreationDate="2016-03-06T13:36:14.473" Score="0" Body="&lt;p&gt;The best solution is to use interrupts triggered by echo pins change of state. joan's pigpio example worked beautifully. Using multithreading did not give satisfactory results as there is still problem with the timing since multithreading on the raspberry pi operates via pipelining.&lt;/p&gt;&#xA;" OwnerUserId="11311" LastActivityDate="2016-03-06T13:36:14.473" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9339" PostTypeId="2" ParentId="9337" CreationDate="2016-03-06T15:01:16.080" Score="3" Body="&lt;p&gt;A brief overview of some of these variants:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;A*&lt;/strong&gt; A variant Dijkstra's algorithm that maintains a heuristic distance to the goal to first explore parts of the graph that are more likely closer to the goal (same result as Dijkstra's algorithm, but faster).&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Theta*&lt;/strong&gt; An &quot;any-angle&quot; variant of A*. In other words, movements between nodes are not restricted to the immediate neighbourhood. So you get paths that appear more natural and are often the shortest possible distance between two points (e.g., in a grid environment, A* might plan a non-straight line between two points because of the constraint requiring the path to &quot;stay in the grid&quot;, Theta* relaxes this).&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;D*&lt;/strong&gt; A variant of A* that is fast to update changing edge costs in the graph. For example, let's say the robots path is suddenly blocked by a new obstacle. D* doesn't need to replay the whole path from scratch; rather, it amends the previous path.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Focused D*&lt;/strong&gt; A variant of D* that uses heuristics to more efficiently choose which parts of the graph are updated when a change in the graph (e.g., an obstacle) is detected.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;D* Lite&lt;/strong&gt; Essentially the same as Focused D* but is more intuitive and easier to program. Is pretty much used in place of Focused D* in virtually all applications.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Field D*&lt;/strong&gt; An &quot;any-angle&quot; version of D* Lite. You get natural paths that update rather quickly to changing obstacles. This algorithm has been used on Mars rovers. Downside is it is much trickier to implement and understand then Theta*, for example.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="4320" LastActivityDate="2016-03-06T15:01:16.080" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9341" PostTypeId="1" CreationDate="2016-03-06T15:18:14.580" Score="1" ViewCount="686" Body="&lt;p&gt;In my research project I deal with a mobile robot that perceives through stereo vision. As the stereo input data I currently use several datasets taken from a passenger vehicle that contain real world photos. The datasets are good to get started but have a limited content so I would need to model my own traffic situations to further work on the stereo vision system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am thinking about using some kind of synthetic graphics simulation as the input for the stereo system. What are my options? I can imagine a 3D graphics rendering engine whose output would be fed as the input for the stereo vision could probably be used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found there are general robotic simulators available like &lt;a href=&quot;http://gazebosim.org/&quot; rel=&quot;nofollow&quot;&gt;Gazebo&lt;/a&gt; but since I am all new to robotic simulation I do not really know where to begin.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I forgot to write that all my code is a pure C++. I use OpenCV and LIBELAS for stereo vision and Point Cloud Library (PCL) for visualization. All glued together into a single C++ project and compiles into single binary.&lt;/p&gt;&#xA;" OwnerUserId="1021" LastEditorUserId="1021" LastEditDate="2016-03-06T20:35:11.843" LastActivityDate="2016-03-08T07:22:00.250" Title="Computer stereo vision simulator" Tags="&lt;mobile-robot&gt;&lt;simulator&gt;&lt;stereo-vision&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9343" PostTypeId="2" ParentId="9341" CreationDate="2016-03-06T20:30:45.617" Score="2" Body="&lt;p&gt;I did similar project with v-rep, python and opencv. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;1- Set up an enviorement with visible objects&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2- Set up your vision sensors with parameters&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3- Write a python script that connects you to v-rep and do stereo vision application&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Example code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;import vrep&#xA;import time&#xA;import cv2&#xA;import numpy as np&#xA;&#xA;vrep.simxFinish(-1)&#xA;&#xA;clientID = vrep.simxStart('127.0.0.1', 19999, True, True, 5000, 5)&#xA;&#xA;if clientID!=-1:&#xA;    print 'Connected to remote API server'&#xA;    print 'Vision Sensor object handling'&#xA;    res, v1 = vrep.simxGetObjectHandle(clientID, 'Vision_sensor#0', vrep.simx_opmode_oneshot_wait)&#xA;    print 'Getting first image'&#xA;    err, resolution, image = vrep.simxGetVisionSensorImage(clientID, v1, 0, vrep.simx_opmode_streaming_split)&#xA;    if err==0:&#xA;        print &quot;Image ok&quot;&#xA;    time.sleep(2)&#xA;    while (vrep.simxGetConnectionId(clientID) != -1):&#xA;        err, resolution, image = vrep.simxGetVisionSensorImage(clientID, v1, 0, vrep.simx_opmode_buffer)&#xA;        if err == vrep.simx_return_ok:&#xA;            img = np.array(image,dtype=np.uint8)&#xA;            img.resize([resolution[0],resolution[1],3])&#xA;            cv2.imshow('image',img)&#xA;            if cv2.waitKey(1) &amp;amp; 0xFF == ord('q'):&#xA;                break&#xA;        elif err == vrep.simx_return_novalue_flag:&#xA;            print &quot;no image yet&quot;&#xA;            pass&#xA;        else:&#xA;          print err&#xA;else:&#xA;  print &quot;Failed to connect to remote API Server&quot;&#xA;  vrep.simxFinish(clientID)&#xA;&#xA;cv2.destroyAllWindows()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Configuration&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;OS: Windows 7 x64&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IDE: &lt;a href=&quot;http://python-xy.github.io/&quot; rel=&quot;nofollow&quot;&gt;PythonXY&lt;/a&gt;(Python version: 2.7, OpenCV version: 2.4) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Simulator: &lt;a href=&quot;http://www.coppeliarobotics.com/downloads.html&quot; rel=&quot;nofollow&quot;&gt;V-REP PRO EDU V3.3.0&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9504" LastActivityDate="2016-03-06T20:30:45.617" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="9344" PostTypeId="1" AcceptedAnswerId="9345" CreationDate="2016-03-07T09:23:06.443" Score="1" ViewCount="38" Body="&lt;p&gt;I would like to make a little survey regarding the (geo)spatial projection that you use when elaborating your GPS and movement data for the spatial awareness of your robots. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Moving all GPS coordinates to a &lt;strong&gt;planar projection&lt;/strong&gt; seems to be the more reasonable choice since not only distances (for which several &lt;a href=&quot;http://www.movable-type.co.uk/scripts/latlong.html&quot; rel=&quot;nofollow&quot;&gt;formulas and approximations&lt;/a&gt; exist), but bearings must be computed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Generally, although scales are pretty small here, avoiding &lt;em&gt;equirectangular approximation&lt;/em&gt; seems a good idea in order to keep a more consistent system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Avoiding working in the 3D world (Haversine and other great-circle stuff) is probably a good idea too to keep computations low-cost.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Moving the world to a 2D projection is hence what seems to be the best solution, despite reprojection of all input GPS coordinates is needed. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to get opinions and ideas on the subject &#xA;(...if ever anyone is interested in doing it U_U).&lt;/p&gt;&#xA;" OwnerUserId="13107" LastEditorUserId="9176" LastEditDate="2016-03-07T16:05:19.867" LastActivityDate="2016-03-07T16:05:19.867" Title="Which geo-projection to use for odometry" Tags="&lt;odometry&gt;&lt;geometry&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2016-03-08T14:22:38.440" ContentLicense="CC BY-SA 3.0" />
  <row Id="9345" PostTypeId="2" ParentId="9344" CreationDate="2016-03-07T14:43:02.070" Score="1" Body="&lt;p&gt;It probably depends on the size of the area where you want to operate your robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For me it was always good enough to use &lt;a href=&quot;https://en.wikipedia.org/wiki/Equirectangular_projection&quot; rel=&quot;nofollow&quot;&gt;equirectangular projection&lt;/a&gt;, because for my assumptions &quot;at most 1km large area at most 1000km from where I live&quot; the error always comes up as negligible (I don't remember the value now and I don't have time to calculate it, but my guess would be under 1mm). You should calculate it and decide for yourself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your robot will operate on a significantly larger part of the Earth and would have problems with this kind of distortion, I guess that it would be worth to invest into a proper 3D world model instead of fighting with projection deformations.&lt;/p&gt;&#xA;" OwnerUserId="482" LastActivityDate="2016-03-07T14:43:02.070" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9346" PostTypeId="1" CreationDate="2016-03-07T22:44:52.783" Score="0" ViewCount="472" Body="&lt;p&gt;I have to simulate a pick and place robot (3 DOF). I tried with MATLAB. It should pick and place different objects according to their geometry. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where can I find similar m-codes and algorithms?&lt;/p&gt;&#xA;" OwnerUserId="13113" LastEditorUserId="9176" LastEditDate="2016-03-08T14:18:08.370" LastActivityDate="2016-03-25T18:36:54.883" Title="Pick and place robot" Tags="&lt;robotic-arm&gt;&lt;matlab&gt;" AnswerCount="1" CommentCount="3" ClosedDate="2016-03-25T23:40:29.820" ContentLicense="CC BY-SA 3.0" />
  <row Id="9347" PostTypeId="2" ParentId="9346" CreationDate="2016-03-08T00:10:12.307" Score="2" Body="&lt;p&gt;I assume from your question that you are only simulating the robot's kinematics, and not dynamics or controls.   However, this recommendation would be the same even if you had to complete a full-up controls simulation, also.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why don't you work out the mathematical equations of the robot (forward kinematics) then invert them manually?  Then write m-code to simulate the robot?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This will teach you so much more about locating objects geometrically into the workspace and having the robot grasp them, than you would learn by copying others' m-codes.   When you get stuck, we will be happy to answer specific questions you encounter.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2016-03-08T00:10:12.307" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="9349" PostTypeId="1" AcceptedAnswerId="9363" CreationDate="2016-03-08T03:11:01.897" Score="1" ViewCount="171" Body="&lt;p&gt;I have a Kinect Sensor, and &lt;a href=&quot;http://ipisoft.com/&quot; rel=&quot;nofollow&quot;&gt;iPi software&lt;/a&gt; I use to create motion capture data to use in film editing. I am looking at creating a small, Raspberry Pi driven bipedal robot just for fun, and I was wondering if it was possible to use the MoCap to control the robot? It will only be 20-30 cm tall, with six servos (hips, knees, ankles). Is it possible to apply the movement from these six joints on the human body to my robot, like having a string directly from my left knee joint to its left knee servo? It could either be in real-time, like following my actions, or using pre-recorded data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(NOTE: If needed, I can plug it directly to my Apple/Windows computer, if the Pi could not support this. Also, it will have no upper torso &lt;em&gt;at the moment&lt;/em&gt;.)&lt;/p&gt;&#xA;" OwnerUserId="13115" LastEditorUserId="9176" LastEditDate="2016-03-08T22:33:43.457" LastActivityDate="2016-03-09T18:40:41.743" Title="Applying MoCap data to real life robot" Tags="&lt;mobile-robot&gt;&lt;motion-planning&gt;&lt;otherservos&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9350" PostTypeId="2" ParentId="9341" CreationDate="2016-03-08T07:22:00.250" Score="4" Body="&lt;p&gt;I highly advise against using synthetic image data for testing your stereo vision algorithms. What will happen is that you end up with a system that works excellent on your synthetic data, but poorly in the real-world. Synthetic images are much easier to process than real-world images, as they lack all the shortcomings of real cameras that will make stereo matching hard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can try it out yourself. There are some synthetic image sequences out there. Have a look at this one:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://cerv.aut.ac.nz/set-2/&quot;&gt;https://cerv.aut.ac.nz/set-2/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13116" LastActivityDate="2016-03-08T07:22:00.250" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9351" PostTypeId="1" CreationDate="2016-03-08T07:58:19.010" Score="0" ViewCount="730" Body="&lt;p&gt;I am doing a project on an automated grain dispenser system using a PLC control. I need a valve for dispensing grain from hopper to packet. I should be able to control the flow of the grain. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what kind of valve should I use for flow control of the grain? There are different types of grains like rice, wheat, etc., and the valve should be controlled by the PLC (opening and closing of valve).&lt;/p&gt;&#xA;" OwnerUserId="13117" LastEditorUserId="9176" LastEditDate="2016-03-08T22:33:48.193" LastActivityDate="2016-03-09T14:16:18.397" Title="Which kind of valve is used for dispensing food grains?" Tags="&lt;automation&gt;" AnswerCount="2" CommentCount="2" ClosedDate="2016-03-09T14:19:40.697" ContentLicense="CC BY-SA 3.0" />
  <row Id="9353" PostTypeId="1" CreationDate="2016-03-08T15:52:54.497" Score="2" ViewCount="2834" Body="&lt;p&gt;I've built a quadcopter with four brushless motors and ESCs (30A). I'm using an Arduino to control them. I haven't written any complex code; just enough to get them running. Everything is fine until I send a number over 920 to the serial. Then, for some reason, all the motors stop spinning. I'm using three freshly bought and charged LiPo cells (V = 11.1V). Here is the link for the site that I bought them from (I cannot seem to find any other resource about them) : &lt;a href=&quot;http://www.ebay.co.uk/itm/4x-A2212-1000KV-Outrunner-Motor-4x-HP-30A-ESC-4x-1045-prop-B-Quad-Rotor-/111282436897&quot; rel=&quot;nofollow&quot;&gt;4x A2212 1000KV Outrunner Motor + 4x HP 30A ESC + 4x 1045 prop (B) Quad-Rotor&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I tried turning on only one motor, I could write up to about 1800 microseconds, while both with 4 and with 1 motor, the minimum that it works is 800. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can somebody explain why this happens and I how I can fix it? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is my code: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;Servo.h&amp;gt;&#xA;&#xA;int value = 0;&#xA;&#xA;Servo first,second,third,fourth;&#xA;&#xA;void setup() {&#xA;&#xA;  Serial.begin(9600);    // start serial at 9600 baud&#xA;  first.attach(6);&#xA;  second.attach(9);&#xA;  third.attach(10);&#xA;  fourth.attach(11);&#xA;&#xA;}&#xA;&#xA;void loop() {&#xA;&#xA;    first.writeMicroseconds(value);&#xA;    second.writeMicroseconds(value);&#xA;    third.writeMicroseconds(value);&#xA;    fourth.writeMicroseconds(value);&#xA;&#xA;    if(Serial.available() &amp;gt; 0){&#xA;      value = Serial.parseInt();&#xA;    }&#xA;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="13010" LastEditorUserId="9176" LastEditDate="2016-03-10T11:58:52.067" LastActivityDate="2016-03-10T11:59:05.147" Title="Why does the ESC stop?" Tags="&lt;arduino&gt;&lt;quadcopter&gt;&lt;brushless-motor&gt;&lt;esc&gt;" AnswerCount="4" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9354" PostTypeId="2" ParentId="9353" CreationDate="2016-03-08T16:58:47.890" Score="0" Body="&lt;p&gt;Looking at the documentation for the &lt;a href=&quot;https://www.arduino.cc/en/Reference/Servo&quot; rel=&quot;nofollow&quot;&gt;Arduino servo library&lt;/a&gt; it looks like you are reusing the servo library to produce a PWM speed control for your ESC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although the &lt;a href=&quot;https://www.arduino.cc/en/Reference/ServoWriteMicroseconds&quot; rel=&quot;nofollow&quot;&gt;writeMicroseconds()&lt;/a&gt; function page doesn't mention &lt;em&gt;continuous rotation servo&lt;/em&gt;s, the &lt;a href=&quot;https://www.arduino.cc/en/Reference/ServoWrite&quot; rel=&quot;nofollow&quot;&gt;write()&lt;/a&gt; function page does:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Writes a value to the servo, controlling the shaft accordingly. On a standard servo, this will set the angle of the shaft (in degrees), moving the shaft to that orientation. On a continuous rotation servo, this will set the speed of the servo (with 0 being full-speed in one direction, 180 being full speed in the other, and a value near 90 being no movement). &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;What the &lt;a href=&quot;https://www.arduino.cc/en/Reference/ServoWriteMicroseconds&quot; rel=&quot;nofollow&quot;&gt;writeMicroseconds()&lt;/a&gt; function page does say is:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;On standard servos a parameter value of 1000 is fully counter-clockwise, 2000 is fully clockwise, and 1500 is in the middle.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Which would suggest that 1500 would be static, 1000 would be full speed in one direction, and 2000 would be full speed in the other direction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For motors which only go in one direction though, an ESC might change those ranges to maximise the controllability of the motor by accepting a larger range of PWM values, and mapping them to unidirectional speed only.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depending on your ESC, it may be that as you approach 1000, you are reaching the maximum speed, and as you exceed the maximum speed it is capable of the motor shuts off as a protection mechanism.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ultimately, only the data sheet for your ESC can tell you why your system is behaving the way it is.&lt;/p&gt;&#xA;" OwnerUserId="37" LastActivityDate="2016-03-08T16:58:47.890" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9355" PostTypeId="1" AcceptedAnswerId="9358" CreationDate="2016-03-08T17:04:20.727" Score="2" ViewCount="540" Body="&lt;p&gt;I'm having a hard time trying to understand how to obtain the dynamic model for a system similar to the image.&lt;/p&gt;&#xA;&lt;p&gt;The balloon is a simple helium balloon, however the box is actually an aerial differential drive platform (using rotors). Now there's basically a model for the balloon and another for the actuated box. However I'm lost to how to combine both.&lt;/p&gt;&#xA;&lt;p&gt;The connection between both is not rigid since it is a string.&#xA;How should I do it? Is there any documentation you could point me to, in order to help me develop the dynamics model for this system?&lt;/p&gt;&#xA;&lt;p&gt;Since I'm so lost, any help will be useful. Thanks in advance!&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/A3ANA.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/A3ANA.png&quot; alt=&quot;System: Balloon suporting a box&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="370" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2016-03-10T14:26:39.223" Title="Dynamic model of a robot lifted by a balloon (Multibody system)" Tags="&lt;mobile-robot&gt;&lt;kinematics&gt;&lt;dynamics&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9356" PostTypeId="2" ParentId="9353" CreationDate="2016-03-08T20:01:16.817" Score="2" Body="&lt;p&gt;First of all I would suggest calibrating them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the eBay page you linked to, It would seem that the ESCs are probably HobbyWing (or HobbyWing clones). I would suggest finding some spec sheets for HobbyWing ESCs and using that information to calibrate them as well as understand them better. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since they seem to respond to values in the range 800-1800 they probably need to be calibrated. The usual range is 1000-2000. I've had HobbyWing ESCs and there is a way to send the proper min and max values to the ESC. Besides that you could adjust your code to accept values in the range 800-1800 and assume 900 is the centerpoint. In a sense, you'd be calibrating them yourself via your code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as them not operating over 920, it almost sounds like a power issue. You say you are using &quot;3 freshly bought and charged LiPo cells (V = 11.1V)&quot;. Are you in fact using all three at once? I'm not sure how you've wired them up, but here is an example of proper wiring:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/t2fTd.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/t2fTd.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="1075" LastEditorUserId="1075" LastEditDate="2016-03-08T20:16:37.800" LastActivityDate="2016-03-08T20:16:37.800" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9357" PostTypeId="2" ParentId="9351" CreationDate="2016-03-08T20:22:26.723" Score="0" Body="&lt;p&gt;What scale is this on? I am assuming you are doing this for household purposes and not industrial.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe something like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Lytpu.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Lytpu.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The dry goods are sent into a drum. The drum has a cupola in one side. The goods fill the cupola and when the drum is rotated one cupola full of goods are deposited. Repeat as many times as necessary to deliver N cupolas full.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The image is actually from a fish feeder. Maybe you could even use a modified fish feeder.&lt;/p&gt;&#xA;" OwnerUserId="1075" LastActivityDate="2016-03-08T20:22:26.723" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9358" PostTypeId="2" ParentId="9355" CreationDate="2016-03-08T21:08:03.000" Score="3" Body="&lt;p&gt;It's just another force, so you would treat it pretty much the same as you would treat gravity, a propeller, or any other force. There are a few points I'll make to help clarify for you:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The string binds the two systems together, meaning that each is now an input to the other (hopefully I'll clarify this with points below).&lt;/li&gt;&#xA;&lt;li&gt;A string in tension &lt;strong&gt;is effectively rigid&lt;/strong&gt;. A string in compression doesn't transmit force. So you'll need case statements such that the force is only applied across the systems when the string is in tension and that there is no effect when the string is in compression. &lt;/li&gt;&#xA;&lt;li&gt;The location of the force is wherever the string is tied to the box (call that position_box or p_box for short). Similarly, for the balloon, the location of the force is wherever the string is tied to the balloon (p_bln). &lt;/li&gt;&#xA;&lt;li&gt;The force is a vector that acts along [p_bln-p_box].&lt;/li&gt;&#xA;&lt;li&gt;Relating to point (2) above, the force is only transmitted when norm([p_bln-p_box]) &gt;= L_string. Technically the norm shouldn't ever exceed the length of the string, but resolving that length back to L_string could be the force that is applied to each body. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;So, this would differ a little from gravity where gravity is always a vector pointing down and always acts on the center of mass, the string is a vector force of variable direction, that always acts at the point of attachment, that may not exist (if the box is closer to the balloon than the length of the string). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Gravity acts through the center of mass, so, provided there are no other reaction forces (not hinged/pivoting, negligible air resistance), there's no torque applied to the body. What you'll find is that, by acting on a point &lt;em&gt;not&lt;/em&gt; the center of mass, the string &lt;em&gt;will&lt;/em&gt; apply a torque to both bodies, in addition to pulling them. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I mentioned, the actual distance between the two points may exceed the length of the string; this has to deal with joint stability and how you choose to solve and resolve forces across joints. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;FYI, I'm not sure what your background is, but you're entering a pretty complex field by allowing force transmission across a flexible joint. I'm a fan of &lt;a href=&quot;http://www.springer.com/us/book/9780387743141&quot; rel=&quot;nofollow noreferrer&quot;&gt;Rigid Body Dynamics Algorithms&lt;/a&gt; by Roy Featherstone, but there are certainly a number of other algorithms that you can use to solve this dynamic system. It looks to me like Featherstone's algorithm is at the heart of Matlab's SimMechanics toolbox, but that's just an educated guess; it could of course be something else. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you &lt;em&gt;were&lt;/em&gt; going to model this in SimMechanics, you would look for two spherical joints, one on each body, with a telescoping joint that allows for motion from 0 to L_string. At lengths &amp;lt; 0, the objects collide, at lengths &gt; L_string the string is taut. Please comment if you would like more guidance, but I think this is about what you were looking for.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;:EDIT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found &lt;a href=&quot;http://www.mathworks.com/matlabcentral/fileexchange/37636-simscape-multibody-3d---1d-interface-examples&quot; rel=&quot;nofollow noreferrer&quot;&gt;this group of examples&lt;/a&gt; on the Matlab FileExchange to be very useful when developing models in SimMechanics. The &lt;em&gt;most&lt;/em&gt; useful thing I found there was a model (screenshots below) that shows how to interface a SimMechanics block to a SimScape block. This allows a SimMechanics &quot;Prismatic Joint&quot; to be used with a SimScape &quot;Translational Hard Stop&quot; block. Using this setup, you can set the limits on the prismatic joint to start at L_String, the limits on the translational hard stop to be 0 to L_String, and then you can adjust the end stop spring constants and damping until you get a reasonable reaction. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The spring/damping constants will adjust the &quot;snap&quot; applied to each body when the string pulls taut (or when the two collide). You can adjust the upper/lower end stop constants such that a collision (L = 0) is different than the string pulling tight (L = L_String). Again, this should be a prismatic joint inserted between your two spherical joints. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's the screenshots! First, create a translational interface between SimScape and SimMechanics: (Provided in the FileExchange package I linked above). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/G7QSb.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/G7QSb.png&quot; alt=&quot;SimMechanics-SimScape Translational Interface&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, add that interface to a prismatic joint:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ZNyIq.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZNyIq.png&quot; alt=&quot;SimMechanics Constrained Prismatic Joint&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Configure the prismatic joint to start at L=L_String. Ensure that there's no internal mechanics set and that motion is automatically computed with force provided by input (this is required to work with the translational interface). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/UecYm.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/UecYm.png&quot; alt=&quot;SimMechanics Prismatic Joint Setup&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, configure the translational hard stop such that the limits are from 0 to L_String. At this point I would accept the default stiffness and damping and run the simulation to see how you think it works. My defaults are because I work with some colossal industrial equipment that uses tensioners bigger than I am. I think the stock defaults are somewhere ~100.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/idV9F.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/idV9F.png&quot; alt=&quot;SimMechanics Translational Hard Stop Setup&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, I would suggest you save that configuration as a custom library block so you can have it in the future. You can do more complex things, like mask the L_String parameters such that you can customize the default lengths, etc. from the custom library block, but a how-to for that is beyond the scope of what I'm covering here. Anyways, once you've set everything up, I would suggest you just link a block to your string and run a quick simulation. Edit the parameters as you see fit until you get the desired response or it matches your experimental data. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/w1zso.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/w1zso.png&quot; alt=&quot;SimMechanics Demo&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2016-03-10T14:26:39.223" LastActivityDate="2016-03-10T14:26:39.223" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="9359" PostTypeId="2" ParentId="9351" CreationDate="2016-03-08T23:14:29.987" Score="0" Body="&lt;p&gt;You can use a sampling valve. You can have a look here to how it works.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=KSQPSDmD-i4&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=KSQPSDmD-i4&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/rMWvT.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rMWvT.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13013" LastEditorUserId="37" LastEditDate="2016-03-09T14:16:18.397" LastActivityDate="2016-03-09T14:16:18.397" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9360" PostTypeId="2" ParentId="9353" CreationDate="2016-03-09T03:42:07.323" Score="1" Body="&lt;p&gt;Following on from &lt;a href=&quot;https://robotics.stackexchange.com/questions/9353/why-does-the-esc-stop#answer-9356&quot;&gt;Octopus's answer&lt;/a&gt;, this comes from the thread, &lt;a href=&quot;http://www.rcgroups.com/forums/showthread.php?t=2079583&quot; rel=&quot;nofollow noreferrer&quot;&gt;Hobbypower ESC-30A on rcgroups.com&lt;/a&gt;, where a user was having the same trouble calibrating them. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I bought exactly the same ESCs from eBay and asked the seller for a datasheet. It appears that WaspNest was right, they match Hobywing product.&lt;br&gt;&#xA;  Here is a link to the datasheet he sent me: &#xA;  &lt;a href=&quot;https://dl.dropboxusercontent.com/u/56075853/HobyPower%2030A%20ESC.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://dl.dropboxusercontent.com/u/...030A%20ESC.jpg&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Here is the datasheet, referred to above:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ZoOOz.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZoOOz.jpg&quot; alt=&quot;HobbyPower 30A Brushless ESC manual&quot;&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is also the following:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;A programming card is available: Hobbywing Pentium Series Brushless Speed Controller ESC Program Card. It should work with these ESC's with no problem.&lt;br&gt;&#xA;  Manual?&lt;br&gt;&#xA;  See &lt;a href=&quot;http://www.hobbywing.com/uploadfiles/sx/file/Manual/HW-01-V4.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.hobbywing.com/uploadfiles...l/HW-01-V4.pdf&lt;/a&gt; and &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/uploads/811103388X7478X20.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.hobbyking.com/hobbyking/s...88X7478X20.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Unfortunately the first link has expired, and the second link is to the &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/uploads/811103388X7478X20.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;HobbyKing 20A and 30A UBEC&lt;/a&gt;, but it could be of some use.&lt;/p&gt;&#xA;" OwnerUserId="9176" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2016-03-09T12:38:54.433" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="9362" PostTypeId="2" ParentId="9353" CreationDate="2016-03-09T07:03:46.997" Score="0" Body="&lt;p&gt;Have you calibrated your ESC? If you have not yet done so, you can calibrate it using PWM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First you send max PWM to the ESC, then you send min PWM to the ESC, then send PWM 20 milliseconds (assuming a 50Hz PWM signal). When you give PWM above 20ms your motor will rotate forwards, and if you give PWM below 20ms your motor will rotate backwards. &lt;/p&gt;&#xA;" OwnerUserId="13125" LastEditorUserId="9176" LastEditDate="2016-03-10T11:59:05.147" LastActivityDate="2016-03-10T11:59:05.147" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9363" PostTypeId="2" ParentId="9349" CreationDate="2016-03-09T13:52:48.207" Score="2" Body="&lt;p&gt;Yes, you could control the legs, but no, you're probably not going to get the effect I think you're after. The legs will probably not walk on their own just because they're miming what your motion capture system recorded. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, a human leg has more than six degrees of freedom. The hip can &lt;a href=&quot;https://en.wikipedia.org/wiki/Anatomical_terms_of_motion&quot; rel=&quot;nofollow&quot;&gt;flex and extend&lt;/a&gt;, abduct and adduct, and rotate laterally and medially. That's three axes of motion for the first joint. The knee and flex and extend (fourth axis of motion), and the ankle also has three axes, like the hip - flex/extend, abduct/adduct, and rotation. That's seven axes of motion. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second, toes do a great deal to &lt;a href=&quot;http://www.ncbi.nlm.nih.gov/pubmed/18932241&quot; rel=&quot;nofollow&quot;&gt;help balance&lt;/a&gt;. If you don't have any way to control toe motion (or capture it - they're like force actuators instead of position actuators), then you won't be able to achieve the same control as someone with toes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Third, you are unlikely to get the same dynamic response as human muscle with (what sounds like) hobby servos. If the servo can't move with the same speed and force as human muscle, then the servo's mechanical response is prone to act as a low-pass filter, which means it could be unable to replicate faster balance/control actions. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fourth, and biggest - the human, who is being captured, has a different set of dynamic parameters that they are trying to regulate for their motion. Their height, weight, center of gravity, moment of inertia, will all be different than the robot's, especially if the robot is missing a torso.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;None of this means specifically that it won't work at all - you have the freedom to design shorter limbs, larger feet, etc., that can attempt to make up for the lack of fidelity in recreating the person. You'll just have to take care to understand that, with fewer degrees of freedom than a person, you may not be able to replicate all motion, and you may have some (severe) trouble getting the robot to balance correctly. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-03-09T13:52:48.207" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9364" PostTypeId="2" ParentId="9349" CreationDate="2016-03-09T18:40:41.743" Score="2" Body="&lt;p&gt;&lt;a href=&quot;https://robotics.stackexchange.com/a/9363/350&quot;&gt;Chuck's answer&lt;/a&gt; is correct; applying motion capture to a robot will make its legs move in a walking motion, but won't guarantee that the entire setup will remain upright.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/RjNBE.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/RjNBE.gif&quot; alt=&quot;floor spinning&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One simple fix for that would be to just use the legs for propulsion only, and use a set of wheels for balance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=rz1xEu52UbM&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ijNUGm.png&quot; alt=&quot;walking pants&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2016-03-09T18:40:41.743" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9365" PostTypeId="1" AcceptedAnswerId="9366" CreationDate="2016-03-09T18:53:49.807" Score="6" ViewCount="1869" Body="&lt;p&gt;What's the difference between an underactuated system, and a nonholonomic system? I have read that &quot;the car is a good example of a nonholonomic vehicle: it has only two controls, but its configuration space has dimension 3.&quot;. But I thought that an underactuated system was one where the number of actuators is less than the number of degrees of freedom. So are they the same?&lt;/p&gt;&#xA;" OwnerUserId="8880" LastActivityDate="2016-09-07T15:16:14.753" Title="Difference between an underactuated system, and a nonholonomic system" Tags="&lt;kinematics&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9366" PostTypeId="2" ParentId="9365" CreationDate="2016-03-09T19:18:30.827" Score="7" Body="&lt;p&gt;They are different things.  An underactuated system does mean that the number of independent control inputs is fewer than the number of degrees of freedom you are trying to command.  This can happen for holonomic systems when they encounter a singularity, or for nonholonomic systems when they are commanded to move in a direction they cannot achieve.  The state space method of looking at this is the controllability matrix, and in kinematics it is the rank of the Jacobian matrix, but you probably don't need to go into that level of detail to understand an underactuated system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nonholonomic means quite a different thing.  A holonomic system can have its control kinematics expressed as geometric (including trigonometric) equations.  A nonholonomic system, on the other hand, cannot be expressed as closed-form geometric equations.  Instead, the best you can do is to write differential equations to express the kinematics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's an example:  think of a mobile robot with wheels.  If you ask it to ascend to 10 meters in the air, it is underactuated.  If you ask it to go to position (100 meters, 20 meters) from its current location, then the robot needs to turn its two drive wheels to get to the new position.  Since it is a nonholonomic system, you cannot just count the number of rotations of each wheel to determine where it ended up, because the sequence of rotations matters, not just the total number of rotations (for example, it would end up in a different place if it actuated only the left wheel for so many rotations, then the right. as compared to if it actuated both wheels together for that many rotations).  For a robot manipulator that is holonomic, you can locate it's end effector position by knowing the total number of degrees of rotation of each motor, and you don't need to care in what order the robot moved its axes.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2016-03-09T19:18:30.827" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="9367" PostTypeId="1" AcceptedAnswerId="9394" CreationDate="2016-03-09T20:24:28.860" Score="5" ViewCount="1430" Body="&lt;p&gt;I am working on designing and building a small (1 1/2 lbs), 2-wheeled, differential drive Arduino-controlled autonomous robot. I have most of the electronics figured out, but I am having trouble understanding how much torque the motors will actually need to move the robot. I am trying to use the calculations shown &lt;a href=&quot;http://www.robotshop.com/blog/en/drive-motor-sizing-tutorial-3661&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt; and the &lt;a href=&quot;http://www.robotshop.com/blog/en/drive-motor-sizing-tool-9698&quot; rel=&quot;noreferrer&quot;&gt;related calculator tool&lt;/a&gt; to determine what speed and torque I will need. I will be using wheels 32mm in diameter and one of Pololu's &lt;a href=&quot;https://www.pololu.com/category/60/micro-metal-gearmotors&quot; rel=&quot;noreferrer&quot;&gt;High-Power Micro Metal Gearmotors&lt;/a&gt;. I performed the calculations for a robot weight of 2 lbs to be safe and found that the 50:1 HP Micro Metal Gearmotors (625 RPM, 15 oz-in) should theoretically work fine, moving the robot at 3.43 ft/s with an acceleration of around 29 ft/s^2 up a 5-degree incline. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I have not found an explanation for several things that I think would be very important to know when choosing drive motors. When the robot is not moving and the motors are turned on at full power, they should need to deliver their full stall torque. Based on the calculations, it seems that any amount of torque can get the robot moving, but the more torque, the faster the robot's acceleration. Is this true? Also, if the power source cannot supply the full stall current of the motors, will the robot not be able to start moving? In my case, I am powering the robot through a 7.2V (6S) 2200mAh NiMH battery pack that can provide around 2.6A continuously, and when it does that the voltage drops to less than 1V. Will this be able to power my motors? Once the robot reaches full speed and is no longer accelerating, theoretically the motors will not be providing any torque, but I do not think this is the case. Is it, and if so, how will I know how much torque they will be providing? Will the motors I chose have enough torque to move my robot?&lt;/p&gt;&#xA;" OwnerUserId="13129" LastEditorUserId="13129" LastEditDate="2016-03-09T20:32:16.117" LastActivityDate="2016-03-14T08:37:51.357" Title="Relationship between motor torque and acceleration" Tags="&lt;mobile-robot&gt;&lt;motor&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9368" PostTypeId="2" ParentId="9324" CreationDate="2016-03-09T21:16:35.870" Score="2" Body="&lt;p&gt;Currently I am performing my research on that, and in my case I decided to tune all the PIDs. Angles of the quadrotor tend to zero, while altitude controller tend to the objective height. That's habitual in bibliography. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my particular simulations on the computer, PD parameters were enough and all the controllers adapted the same Proportional and Derivative parameters.&lt;/p&gt;&#xA;" OwnerUserId="10539" LastActivityDate="2016-03-09T21:16:35.870" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9369" PostTypeId="2" ParentId="9367" CreationDate="2016-03-09T21:46:22.753" Score="3" Body="&lt;p&gt;1) but the more torque, the faster the robot's acceleration: YES&#xA;$$&#xA;F=\frac{Torque}{wheelradius}&#xA;$$&#xA;and robot's acceleration is&#xA;$$&#xA;a=\frac{F}{m}&#xA;$$&#xA;so, from that equation you can see that linear acceleration of the robot increases with the torque&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2)Once the robot reaches full speed and is no longer accelerating, theoretically the motors will not be providing any torque:NO&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to the equation:&#xA;$$&#xA;T=\frac{P}{w}&#xA;$$&#xA;that appears in one of the tutorials that you sent us, it is not possible to have 0 torque except that when the power=0. When you are at top speed, angular speed is high and torque is just enough to overcome the different resistances to the motion (friction, air resistance, whatever). It represents a very small value, which makes that the acceleration is close to 0, according to my first and second formula.&lt;/p&gt;&#xA;" OwnerUserId="10539" LastActivityDate="2016-03-09T21:46:22.753" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9370" PostTypeId="1" AcceptedAnswerId="12185" CreationDate="2016-03-10T02:44:06.757" Score="0" ViewCount="43" Body="&lt;p&gt;So I am planning on building a robot that turns on when it detects some kind of heat source, I am currently looking at thermal imaging cameras, but am not sure as to how to go about writing code to send a ping or some sort of message when the camera detects a heat source.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know of any way to do this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks &lt;/p&gt;&#xA;" OwnerUserId="7650" LastActivityDate="2017-08-20T11:51:14.753" Title="Thermal Imaging camera activation upon detection" Tags="&lt;wheeled-robot&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9371" PostTypeId="1" AcceptedAnswerId="9399" CreationDate="2016-03-10T07:33:01.983" Score="2" ViewCount="114" Body="&lt;p&gt;I've started tinkering with a Create 2, but I'm having issues reliably getting it to accept my commands.  I can occasionally get it right, but sometimes, it just seems to ignore me.  I'm guessing my cleanup code isn't getting the state fully reset or something.  Is there a good pattern to follow for fail-safe initialization code?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's what I'm doing right now:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Pulse BRC low for 1 second&lt;/li&gt;&#xA;&lt;li&gt;Wait 1 second&lt;/li&gt;&#xA;&lt;li&gt;Send 16x 0 bytes (to make sure if it's waiting for the rest of a command, this completes it - seemed to help a bit when I added this)&lt;/li&gt;&#xA;&lt;li&gt;Send 7 (reset)&lt;/li&gt;&#xA;&lt;li&gt;Wait 10 seconds&lt;/li&gt;&#xA;&lt;li&gt;Send 128 (start)&lt;/li&gt;&#xA;&lt;li&gt;Wait 2 seconds&lt;/li&gt;&#xA;&lt;li&gt;Send 149 35 (ask for the current OI state)&lt;/li&gt;&#xA;&lt;li&gt;Wait 1 second&lt;/li&gt;&#xA;&lt;li&gt;Send 131 (safe mode)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Sometimes I'm then able to issue 137 (drive) commands and have it work.  Most times it doesn't.  The times when it doesn't, I'm seeing a lot of data coming from the Create 2 that I'm not expecting, that looks something like this (hex bytes):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3f 2a ff 73 21 09 cc 0a 88 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3f 2a ff 73 21 09 cc 0a&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;There's more, but my logging cut it off.  I get the same pattern a couple of times, and it seems to be at least partially repeating.  I thought maybe it's the 16 0-bytes I sent followed by &lt;code&gt;003f 2aff 7321 09cc 0a88&lt;/code&gt;, but I still don't know how to interpret that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sometimes it will make some noise for the reset command, but usually ignores the start/safe mode commands completely (I can tell because the green light stays on).&lt;/p&gt;&#xA;" OwnerUserId="13134" LastActivityDate="2016-03-14T20:26:14.493" Title="Reliably establishing communication and OI mode with Create 2" Tags="&lt;irobot-create&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="9372" PostTypeId="1" AcceptedAnswerId="9468" CreationDate="2016-03-10T10:13:52.167" Score="3" ViewCount="283" Body="&lt;p&gt;I am designing an indoor autonomous drone. I am currently writing an object classification program in OpenCV for this purpose. My objects of interests for classification are: ceiling fans; AC units; wall and ceiling lamps, and; wall corners. I am using BoW clustering algorithm along with SVM classifier to achieve this (I'm still in the process of developing the code, and I might try other algorithms when testing).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The primary task of the drone is to successfully scan (what I mean by scanning is moving or hovering over the entire ceiling space) a ceiling space of a given closed region while successfully avoiding any obstacles (like ceiling fans, AC units, ceiling and wall lamps). The drone's navigation, or the scanning process over the ceiling space, should be in an organised pattern, preferably moving in tight zig-zag paths over the entire ceiling space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Having said that, in order to achieve this goal, I'm trying to implement the following to achieve this:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;On take off, fly around the given closed ceiling space and &lt;strong&gt;use SLAM to localise and map its environment&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;While running SLAM, &lt;strong&gt;&lt;em&gt;run the object classier algorithm to classify the objects of interests and track them in real time&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Once obtained a detail map of the environment and classified all objects of interest in the local environment, &lt;strong&gt;&lt;em&gt;integrate both data together to form an unified map. Meaning on the SLAM output, label the classified objects obtained from the classifier algorithm. Now we a have fun comprehensive map of the environment with labeled objects of interest and real-time tracking of them (localization).&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Now pick random corner on the map and plan a navigation pattern in order to scan the entire ceiling space. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;So the question now here is, &lt;strong&gt;&lt;em&gt;is using object classification in real-time will yield successful results in multiple environments (the quad should be able to achieve the above mentioned tasks in any given environment)?&lt;/em&gt;&lt;/strong&gt;. I'm using a lot of train image sets to train my classifier and BoW dictionary but I still feel this won't be a robust method &lt;strong&gt;&lt;em&gt;since in real-time it will be harder to isolate an object of interest&lt;/em&gt;&lt;/strong&gt;. Or, in order to overcome this, should I use real-situation like train images (currently my train images only contain isolated objects of interests)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Or in my is using computer vision is redundant? Is my goal completely achievable only using SLAM?&lt;/em&gt;&lt;/strong&gt; If, yes, how can I classify the objects of interest (I don't want my drone to fly into a running ceiling fan mistaking it for a wall corner or edge). &lt;strong&gt;&lt;em&gt;Furthermore, is there any kind of other methods or sensors, of any type, to detect objects in motion?&lt;/em&gt;&lt;/strong&gt; (using optical flow computer vision method here is useless because it's not robust enough in real-time).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help and advice is much appreciated.&lt;/p&gt;&#xA;" OwnerUserId="7278" LastEditorUserId="9176" LastEditDate="2016-03-14T01:16:32.213" LastActivityDate="2018-07-05T14:36:07.337" Title="Real-time object classification for an indoor autonomous quad-rotor" Tags="&lt;mobile-robot&gt;&lt;quadcopter&gt;&lt;slam&gt;&lt;opencv&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9374" PostTypeId="1" AcceptedAnswerId="9375" CreationDate="2016-03-10T15:50:05.353" Score="1" ViewCount="875" Body="&lt;p&gt;Assuming a quality industrial servo, would it possible to calculate the weight/resistance of a load? Maybe by comparing current draw in a holding position, or by the time it takes to lift/lower an object. Could it accurately measure grams, kilograms? What kind of tolerance could be achieved?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm trying to eliminate the need for a dedicated weight measurement sensor.&lt;/p&gt;&#xA;" OwnerUserId="11211" LastEditorUserId="9176" LastEditDate="2016-03-10T19:43:36.220" LastActivityDate="2016-03-10T19:43:36.220" Title="Measure weight of an object using a servo" Tags="&lt;sensors&gt;&lt;robotic-arm&gt;&lt;servomotor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9375" PostTypeId="2" ParentId="9374" CreationDate="2016-03-10T16:09:53.957" Score="4" Body="&lt;p&gt;This is going to depend on the style of motor in the servo and the style of gearbox. If the servo can't be back-driven when unpowered, then it's likely some form of a worm gear assembly that will prevent static force transmission back to the motor. This means that you won't be able to tell weight by current draw for holding position because the holding current draw will (probably) be zero.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You won't be able to tell anything about holding current draw if the motor is a stepper motor, either, because the stepper motor simply energizes a particular set of poles to full strength; any applied load under that holding torque is held, any applied load over causes the motor to slip. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In both of those cases, you may still be able to glean some information about the load based on the torque required to &lt;em&gt;accelerate&lt;/em&gt; the load, by $\tau = I\alpha$, but then this gives you the &lt;em&gt;moment of inertia&lt;/em&gt; of the load, and not its weight. This is an important distinction because the moment of inertia depends on the &lt;em&gt;shape&lt;/em&gt; of the load as well as its mass. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you know the shape of the load before hand, or if the load is something like a mass attached to a pulley (winch), then you can use the moment of inertia to calculate mass. If you don't know the shape, though, the moment of inertia alone doesn't get you enough information to find the mass. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, even if you have a back-drivable servo that is actuated by a continuous rotation motor (not stepper), the holding current is going to be based on the &lt;em&gt;torque&lt;/em&gt; applied to the servo, where $\tau = mgL\sin{\theta}$. If you get into a situation where $\sin{\theta} = 0$, then you'll wind up with a zero applied torque to hold the load, and you won't be able to get a load mass estimation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to do what you want, you have to have a pretty specific situation setup where you have a lot of information in advance. That said, even if you &lt;em&gt;do&lt;/em&gt; have all of that information, there are still other aspects that need to be taken into account: friction/damping losses in the gear box, gear box inertia, motor efficiency (input power (current@voltage) versus mechanical output power (torque@speed)), motor inertia, motor frictional and damping losses, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;None of this means it &lt;em&gt;can't&lt;/em&gt; be done, but it means that you have to have the system modeled well enough that you can take a &quot;snapshot&quot; of motor inputs and speed and be able to turn that into a useful output torque. The accuracy you can achieve is entirely dependent on your ability to model everything pertinent to the system and the system's ability to stay as-modeled (oil/grease doesn't age/cake, bearings don't wear, motor feedback stays true, etc.).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will probably find that the effort required to adequately model the servo system is more expensive (time and labor) than purchasing a weight sensor. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-03-10T16:09:53.957" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9376" PostTypeId="2" ParentId="1299" CreationDate="2016-03-11T01:07:45.230" Score="1" Body="&lt;p&gt;Your code appears a little incomplete - I am assuming that this is because you wished to include only the salient functions. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once the required missing lines from the GeeTech Wiki - &lt;a href=&quot;http://www.geeetech.com/wiki/index.php/Arduino_GPRS_Shield#A_Simple_Source_Code_Examples&quot; rel=&quot;nofollow&quot;&gt;Arduino GPRS Shield - A Simple Source Code Examples&lt;/a&gt; (their typo, not mine) are added, the complete (minimal) code would seem to be:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;SoftwareSerial.h&amp;gt;&#xA;&#xA;SoftwareSerial mySerial(7, 8);&#xA;&#xA;///connect&#xA;void connectUDP()&#xA;{&#xA; mySerial.println(&quot;AT+CSTT=\&quot;APN\&quot;&quot;);&#xA; delay(3000);&#xA; ShowSerialData();&#xA; mySerial.println(&quot;AT+CIICR&quot;);&#xA; delay(3000);&#xA; ShowSerialData();&#xA; mySerial.println(&quot;AT+CIFSR&quot;);&#xA; delay(3000);&#xA; ShowSerialData();&#xA; mySerial.println(&quot;AT+CIPSTART=\&quot;UDP\&quot;,\&quot;SERVER IP\&quot;,\&quot;SERVER PORT\&quot;&quot;);&#xA; delay(3000);&#xA; ShowSerialData();&#xA; mySerial.println();&#xA;}&#xA;&#xA;&#xA;///send udp packet to server &#xA;void sendUDP()&#xA;{&#xA; for(int x = 0; x &amp;lt; 30; x++){&#xA;   mySerial.println(&quot;AT+CIPSEND&quot;); &#xA;   delay(100);&#xA;   ShowSerialData();&#xA;   mySerial.println(&quot;\&quot;hello world\&quot;&quot;);&#xA;   delay(100);&#xA;   ShowSerialData();&#xA;   mySerial.println((char)26);&#xA;   delay(1000);&#xA;   ShowSerialData();&#xA; }&#xA; mySerial.println();&#xA; //ShowSerialData();&#xA;}&#xA;&#xA;void ShowSerialData()&#xA;{&#xA; while(mySerial.available()!=0)&#xA;   Serial.write(mySerial.read());&#xA;}&#xA;&#xA;void setup() {&#xA;  // put your setup code here, to run once:&#xA;&#xA;}&#xA;&#xA;void loop() {&#xA;  // put your main code here, to run repeatedly:&#xA;  connectUDP();&#xA;  sendUDP();&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;As to why this isn't working, I am not sure, and I am still working on it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a sanity check, I presume that, in your actual Arduino sketch, you have substituted &lt;code&gt;SERVER IP&lt;/code&gt; and &lt;code&gt;SERVER PORT&lt;/code&gt; with actual values (i.e., a real IP address and port number)?  &lt;code&gt;SERVER IP&lt;/code&gt; and &lt;code&gt;SERVER PORT&lt;/code&gt; are not variables (global or otherwise) nor &lt;code&gt;#define&lt;/code&gt;s. As you have not included the entire sketch, it is difficult to tell otherwise. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition, make sure that the server address that you specify in the Arduino sketch matches the IP address of the server running the Python script, and that the port that you specify in the Arduino sketch matches &lt;code&gt;PORTNO&lt;/code&gt; in the Python script. Sorry if I am stating the obvious, but, like I said, this is a sanity check.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding your second point:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I can see a possible solution might be to change it to a TCP connection, but I don't know how to do that...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You simply need to change &lt;code&gt;UDP&lt;/code&gt; to &lt;code&gt;TCP&lt;/code&gt; in the following line&lt;sup&gt;1&lt;/sup&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; mySerial.println(&quot;AT+CIPSTART=\&quot;UDP\&quot;,\&quot;SERVER IP\&quot;,\&quot;SERVER PORT\&quot;&quot;);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;so that it becomes&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; mySerial.println(&quot;AT+CIPSTART=\&quot;TCP\&quot;,\&quot;SERVER IP\&quot;,\&quot;SERVER PORT\&quot;&quot;);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Obviously, as I have pointed out above, you need to provide actual values for &lt;code&gt;&amp;lt;SERVER IP&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;SERVER PORT&amp;gt;&lt;/code&gt;, for example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; mySerial.println(&quot;AT+CIPSTART=\&quot;TCP\&quot;,\&quot;116.228.221.51\&quot;,\&quot;8500\&quot;&quot;);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;On the server side, the following lines in the Python script:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;s = SocketServer.UDPServer(('',PORTNO), handler)&#xA;print &quot;Awaiting UDP messages on port %d&quot; % PORTNO&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;need to be changed to:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;s = SocketServer.TCPServer(('',PORTNO), handler)&#xA;print &quot;Awaiting TCP messages on port %d&quot; % PORTNO&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Again, ensure that the &lt;code&gt;PORTNO&lt;/code&gt;, in your server side Python script, matches the port specified in the AT command.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; See &lt;a href=&quot;http://m2msupport.net/m2msupport/atcipstart-start-up-tcp-or-udp-connection/&quot; rel=&quot;nofollow&quot;&gt;m2msupport.net - AT+CIPSTART&lt;/a&gt;. The relevant notes being&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;AT+CIPSTART=?&#xA;&#xA;+CIPSTART: (&quot;TCP&quot;,&quot;UDP&quot;),(&quot;(0,255).(0,255).(0,255).(0,255)&quot;),(1,65535)&#xA;+CIPSTART: (&quot;TCP&quot;,&quot;UDP&quot;),(&quot;DOMAIN NAME&quot;),(1,65535)&#xA;&#xA;OK&#xA;&#xA;Start a TCP connection&#xA;AT+CIPSTART=&quot;TCP&quot;,&quot;116.228.221.51&quot;,&quot;8500&quot;&#xA;&#xA;OK&#xA;&#xA;Start a UDP connection&#xA;AT+CIPSTART=&quot;UDP&quot;,&quot;116.228.221.51&quot;,&quot;9600&quot;&#xA;&#xA;CONNECT OK&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt; that &lt;em&gt;the web page&lt;/em&gt; has a &lt;strong&gt;typo&lt;/strong&gt;, and a period is shown where a comma should be, in the &lt;code&gt;Start a UDP connection&lt;/code&gt; example. I have corrected this typo in the example above.&lt;/p&gt;&#xA;" OwnerUserId="9176" LastEditorUserId="9176" LastEditDate="2016-03-11T01:13:40.417" LastActivityDate="2016-03-11T01:13:40.417" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9379" PostTypeId="2" ParentId="7993" CreationDate="2016-03-12T00:05:41.577" Score="1" Body="&lt;p&gt;I meant to answer this question months ago, apologies...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;AT mode is the &lt;em&gt;same&lt;/em&gt; as Transparent mode. The different modes (AT or API) is determined by the type of firmware that your XBees have on them. By default&lt;sup&gt;1&lt;/sup&gt;, they should have the AT firmware. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;From &lt;a href=&quot;http://ftp1.digi.com/support/documentation/html/90001399/90001399_A/Files/XBee-concepts.html#_Toc384719504&quot; rel=&quot;nofollow noreferrer&quot;&gt;XBee and ZigBee basic concepts - Radio module operating modes&lt;/a&gt; (you can ignore the API modes):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;h1&gt;Radio module operating modes&lt;/h1&gt;&#xA;  &#xA;  &lt;p&gt;The operating mode of an XBee radio module establishes the way a user or any microcontroller attached to the XBee communicates with the module through the Universal Asynchronous Receiver/Transmitter (UART) or serial interface.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Depending on the firmware and its configuration, the radio modules can work in three different operating modes:&lt;/p&gt;&#xA;  &#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;AT (transparent) operating mode&lt;/li&gt;&#xA;  &lt;li&gt;API operating mode&lt;/li&gt;&#xA;  &lt;li&gt;API escaped operating mode&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;  &#xA;  &lt;p&gt;In some cases, the operating mode of a radio module is established by the firmware version, which determines whether the operating mode is AT or API, and the AP setting of the firmware, which determines if the API mode is escaped (AP=2) or not (AP=1). &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;In other cases, the operating mode is only determined by the AP setting, which allows you for configure the mode to be AT (AP=0), API (AP=1) or API escaped (AP=2).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Now, where you are getting confused is that &lt;em&gt;within&lt;/em&gt; Transparent mode, there is the &lt;strong&gt;AT command mode&lt;/strong&gt;, which can be accessed by typing &lt;code&gt;+++&lt;/code&gt;. &lt;em&gt;This&lt;/em&gt; is where you say that you are when the XBees are connected to X-CTU. From &lt;a href=&quot;http://ftp1.digi.com/support/documentation/html/90001399/90001399_A/Files/XBee-concepts.html#_Toc384719505&quot; rel=&quot;nofollow noreferrer&quot;&gt;XBee and ZigBee basic concepts - Application Transparent (AT) operating mode&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;h1&gt;Application Transparent (AT) operating mode&lt;/h1&gt;&#xA;  &#xA;  &lt;p&gt;In Application Transparent (AT) or transparent operating mode, all serial data received by the radio module is queued up for RF transmission. When RF data is received by the module, the data is sent out though the serial interface.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;To configure an XBee module operating in AT, put it in AT Command mode to send the configuration commands.&lt;/p&gt;&#xA;  &#xA;  &lt;h2&gt;AT Command mode&lt;/h2&gt;&#xA;  &#xA;  &lt;p&gt;When the radio module is working in AT operating mode, settings are configured using the AT Command mode interface.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;To enter AT command mode, you must send the 3-character command sequence through the serial interface of the radio module , usually +++, within one second. Once the AT command mode has been established, the module sends the reply OK\r, the command mode timer is started, and the radio module can receive AT commands.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So, in short, your XBees are in Transparent mode. &lt;strong&gt;Unless&lt;/strong&gt; you have uploaded the &lt;em&gt;API firmware&lt;/em&gt; on to them, in which case use X-CTU to upload them with the &lt;em&gt;AT version&lt;/em&gt; of the firmware.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;You may also find this useful, although, the author himself is confused by thinking that there are three modes: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Transparent; &lt;/li&gt;&#xA;&lt;li&gt;AT, and; &lt;/li&gt;&#xA;&lt;li&gt;API. &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;While there are indeed three modes, as I have already clarified, Transparent and AT are one and the same, and the other two modes are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;API and; &lt;/li&gt;&#xA;&lt;li&gt;API escaped (also known as API mode 2 (or atap2)). &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Nevertheless, the points he makes may still help. From &lt;a href=&quot;https://alselectro.wordpress.com/tag/xbee-series-1/&quot; rel=&quot;nofollow noreferrer&quot;&gt;XBEE Series 1&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;An Xbee module has three communication modes: Transparent mode, Command mode &amp;amp; API mode.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;strong&gt;By default, all XBee modules start up in transparent mode&lt;/strong&gt;.  All data received from the DIN pin is transmitted, and when RF data is being received, it is sent out on the DOUT pin. A pair of XBee modules can act Wireless in this mode.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Command mode is where you can configure XBee using AT commands through any Terminal software like TeraTerm or CoolTerm. Built in terminal of XCTU can also be used. To enter Command mode type in 3 consecutive characters +++ and wait a second. Once the XBee enters command mode, it will answer with OK. While in command mode you can change baud rate, PANID, Destination address, etc. If you are not typing anything for 10 seconds the module will return to Transparent mode, or you can issue the ATCN command to exit.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;API (Application Programming Interface) mode is a frame-based method for sending and receiving data to and from an XBee. API MODE is powerful &amp;amp; complicated to setup.It is used to send messages to constantly changing targets (other XBee modules).&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;API mode has some special abilities to change parameters without entering command mode &amp;amp; Receive packet delivery confirmation on every transmitted packet.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You may also find &lt;a href=&quot;https://arduino.stackexchange.com/questions/11893/how-does-coordinator-xbee-receive-data-from-router#answer-11910&quot;&gt;the answer&lt;/a&gt; to the question &lt;a href=&quot;https://arduino.stackexchange.com/questions/11893/how-does-coordinator-xbee-receive-data-from-router/&quot;&gt;How does coordinator XBee receive data from router?&lt;/a&gt; useful (although that answer refers to &lt;em&gt;Series 2&lt;/em&gt; not &lt;em&gt;Series 1&lt;/em&gt; XBee).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; The XBees from Digi are shipped with AT mode. However, the XBees from Libelium are shipped in API mode. From the section &lt;strong&gt;API mode vs AT command mode&lt;/strong&gt; on &lt;a href=&quot;http://cpham.perso.univ-pau.fr/WSN/XBee.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Getting started with the XBee 802.15.4 (serie 1) communication module&lt;/a&gt; [C. Pham, LIUPPA laboratory, University of Pau, France.  &lt;a href=&quot;http://web.univ-pau.fr/~cpham]&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://web.univ-pau.fr/~cpham]&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;By default, the Digi XBee is in AT command mode (also called transparent mode) while the one shipped by Libelium is in API mode 2 (atap2) where some characters are escaped using the escape character 0x7D. The Libelium API assumes that the XBee module is in API mode 2 anyway.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="9176" LastEditorUserId="-1" LastEditDate="2017-04-13T12:50:09.580" LastActivityDate="2016-03-15T23:57:08.233" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9381" PostTypeId="1" CreationDate="2016-03-12T02:46:50.163" Score="1" ViewCount="90" Body="&lt;p&gt;I have been stabilizing my quadcopter. I tuned my angle PIDies and my quadcopter tries to stabilize itself, but there is some overshooting. Which is, I think, due to gyro rates. I have read that we have to use two PIDies on an axis. I'm having problems to attach these two PIDies. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone help me in cascading angle PID and rate PID? Will I have to tune rate PID after tuning angle PID?&lt;/p&gt;&#xA;" OwnerUserId="13154" LastEditorUserId="9176" LastEditDate="2016-03-14T01:16:23.730" LastActivityDate="2016-03-14T01:16:23.730" Title="PID tuning for Quadcopter" Tags="&lt;quadcopter&gt;&lt;pid&gt;" AnswerCount="0" CommentCount="1" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9382" PostTypeId="1" AcceptedAnswerId="9428" CreationDate="2016-03-12T05:05:17.630" Score="0" ViewCount="521" Body="&lt;p&gt;I plan to build a mechanism with multiple axis, which is similar to a robot. To start, I need to define some specifications such as repeatable precision, speed, acceleration, and payload. Then the motor and structure is selected and designed based on these parameters. After that, I need to choose methods to manufacture these components. I would like to consult experienced experts in this forum that is there any suggested books, textbooks, or website resources I can learn these knowledge? &lt;/p&gt;&#xA;" OwnerUserId="10971" LastActivityDate="2016-03-18T00:41:02.113" Title="Any books or web resources for robotics mechanical design?" Tags="&lt;mechanism&gt;&lt;manufacturing&gt;&lt;books&gt;" AnswerCount="1" CommentCount="3" ClosedDate="2016-03-18T17:24:51.167" ContentLicense="CC BY-SA 3.0" />
  <row Id="9383" PostTypeId="1" CreationDate="2016-03-12T16:14:21.123" Score="3" ViewCount="1080" Body="&lt;p&gt;I have constructed a 3 DOF robot arm. I want it to follow a trajectory on a 2D plane (XY). Tha shapes I want to follow are lines, cycles and splines. I now the math behind these 3 shaped (how they are defined). I have the kinematics, the inverse kinematics the jacobian and the whole control system (with the PID controller). The system receives as inputs, Xd(position), Xd'(velocity) and Xd''(acceleration) over time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found the following image that shows (more or less) my system.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/VE8CI.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/VE8CI.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So here is were I am stuck. How do I translate the shape to the position, velocity and acceleration that each joint needs to make so the end effector moves in the Cartesian space according to that shape?&lt;/p&gt;&#xA;" OwnerUserId="10900" LastEditorUserId="37" LastEditDate="2019-01-30T10:41:05.087" LastActivityDate="2019-01-30T10:41:05.087" Title="How to make a robot arm follow a shape/path" Tags="&lt;pid&gt;&lt;robotic-arm&gt;&lt;line-following&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="9384" PostTypeId="1" CreationDate="2016-03-12T21:38:08.923" Score="1" ViewCount="261" Body="&lt;p&gt;I have recently started reading about PID tuning methods and algorithms, and I encountered the particle swarm optimization algorithm and genetic algorithm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is, that I don't understand how each particle/chromosome determines his fitness. On real physical system, each particle/chromosome checks his fitness on the system? Wouldn't it take a really long time? I think that I am missing something here... Can those algorithms be implemented on an actual physical system? If so, then how?&lt;/p&gt;&#xA;" OwnerUserId="13160" LastEditorUserId="9176" LastEditDate="2016-03-13T19:30:08.913" LastActivityDate="2016-04-12T20:07:15.677" Title="PID tuning with methods like GA and PSO" Tags="&lt;pid&gt;&lt;algorithm&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9385" PostTypeId="2" ParentId="9383" CreationDate="2016-03-13T03:48:04.523" Score="2" Body="&lt;p&gt;The image you post is one way that should work. In the image, $\tau$ is the joint torques, and  $x_d(t)$, $\dot{x}_d(t)$, and $\ddot{x}_d(t)$ are the Cartesian shape trajectory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You mention &quot;whole control system (with the PID controller)&quot;. Perhaps you were talking about a motor or joint torque controller? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The control loop image you post assumes that joint torque is more or less perfect (ie it does not care if there is a controller or not) and is wrapping a controller around the Cartesian state of the end point which would generate the shape.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To be pedantic, you are not translating the shape to the position, velocity, and acceleration that each joint makes... You are giving the actual cartesian position, velocity, and acceleration parameters of the shape to the control loop image you post and the $k_v$ and $k_p$ parameters will reduce the error between the measured shape and desired shape.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2016-03-13T03:48:04.523" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9386" PostTypeId="1" AcceptedAnswerId="9632" CreationDate="2016-03-13T12:28:18.497" Score="2" ViewCount="200" Body="&lt;p&gt;I want to simulate the detection of a moving object by a unicycle type robot. The robot is modelled with position (x,y) and direction theta as the three states. The obstacle is represented as a circle of radius r1 (&lt;code&gt;r_1&lt;/code&gt; in my code). I want to find the angles &lt;code&gt;alpha_1&lt;/code&gt; and &lt;code&gt;alpha_2&lt;/code&gt;from the robot's local coordinate frame to the circle, as shown here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/HdqrO.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HdqrO.jpg&quot; alt=&quot;Detection of a moving object&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what I am doing is trying to find the angle from the robot to the line joining the robot and the circle's centre (this angle is called &lt;code&gt;aux_t&lt;/code&gt; in my code), then find the angle between the tangent and the same line (called &lt;code&gt;phi_c&lt;/code&gt;). Finally I would find the angles I want by adding and subtracting &lt;code&gt;phi_c&lt;/code&gt; from &lt;code&gt;aux_t&lt;/code&gt;. The diagram I am thinking of is shown:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/xfqZj.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xfqZj.jpg&quot; alt=&quot;Diagram #2&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is that I am getting trouble with my code when I try to find the alpha angles: It starts calculating the angles correctly (though in negative values, not sure if this is causing my trouble) but as both the car and the circle get closer, &lt;code&gt;phi_c&lt;/code&gt; becomes larger than &lt;code&gt;aux_t&lt;/code&gt; and one of the alphas suddenly change its sign. For example I am getting this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\begin{array}{c c c c} &#xA;\text{aux_t} &amp;amp; \text{phi_c} &amp;amp; \text{alpha_1} &amp;amp; \text{alpha_2} \\ \hline&#xA;\text{-0.81} &amp;amp; \text{+0.52} &amp;amp; \text{-1.33} &amp;amp; \text{-0.29} \\&#xA;\text{-0.74} &amp;amp; \text{+0.61} &amp;amp; \text{-1.35} &amp;amp; \text{-0.12} \\&#xA;\text{-0.69} &amp;amp; \text{+0.67} &amp;amp; \text{-1.37} &amp;amp; \text{-0.02} \\&#xA;\text{-0.64} &amp;amp; \text{+0.74} &amp;amp; \text{-1.38} &amp;amp; \text{+0.1} \\&#xA;\end{array}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So basically, the &lt;code&gt;alpha_2&lt;/code&gt; gets wrong form here. I know I am doing something wrong but I'm not sure what, I don't know how to limit the angles from 0 to pi. Is there a better way to find the alpha angles?&lt;/p&gt;&#xA;" OwnerUserId="10466" LastEditorUserId="10466" LastEditDate="2016-05-30T02:55:16.723" LastActivityDate="2016-07-29T03:46:32.973" Title="Angle to a circle tangent line" Tags="&lt;mobile-robot&gt;&lt;kinematics&gt;&lt;matlab&gt;&lt;geometry&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="9387" PostTypeId="2" ParentId="9384" CreationDate="2016-03-13T15:00:57.210" Score="-1" Body="&lt;p&gt;Talking especifically of PSO: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;PSO is a good method for PID tuning, as you state. This algo is based particles that help find the absolute minimum. Let's think that you tune to get the no overshot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you tune a PID you must have a 3 dimension PSO algo, if you tune a PD just two. And for each dimension you can have any amount of particles as you want. In my case, in Scilab 5.4 I tune PD with PSO with 10 or 15 particles and converge quite fast, in a pair of minutes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A particle represents a Kp value, for instance. If you have 10 particles for each dimension, you will be able to test your Kp with 10 different values at once. Then, the best particle will reveal, and will tell the other nine particles to adapt their value towards that local best particle, and Kp values will readapt till you find the local minimum Kp value that gets the lowest overshot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before tuning a PID, I suggest you to try to find the lowest point in a U letter with PSO. My code with Scilab is next:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;   N=10;&#xA;   weight=1; //weight of the PSO algorithm &#xA;   const_c1=2; //constant of the velocity algorithm. &#xA;   const_c2=2; //constant of the velocity algorithm. &#xA;   Number_Iter=300; //number of iterations&#xA;   dim=1; // dimension&#xA;&#xA;  //Initialize the parameter&#xA;  fitness=zeros(N,Number_Iter);&#xA;  R1=rand(dim,N); //Random numbers [0 1]&#xA;  R2=rand(dim,N); //Random numbers [0 1]&#xA;  current_fitness=zeros(N,1); /&#xA;&#xA;  //initializing swarm and velocities and position&#xA;  current_position=2*(rand(dim,N));/&#xA;  velocity=3*rand(dim,N);&#xA;  local_best_position = current_position;&#xA;&#xA;&#xA; //evaluate initial population&#xA;&#xA;x1=current_position;&#xA;y=x1^2; &#xA;&#xA;current_fitness=y;&#xA;&#xA;&#xA; local_best_fitness = current_fitness;&#xA; global_best_fitness=min(local_best_fitness);&#xA;&#xA;for i=1:N&#xA;g=find(current_fitness==min(current_fitness));&#xA;global_best_position(:,i)=local_best_position(:,g);&#xA; end&#xA;&#xA;//velocity update&#xA;velocity = weight*velocity + const_c1*(R1.*(local_best_position-current_position)) + const_c2*(R2.*(global_best_position - current_position));&#xA;&#xA;//swarm update&#xA; current_position = current_position + velocity;&#xA;&#xA; //evaluate a new swarm&#xA; iter=0; &#xA;&#xA; while(iter &amp;lt; = Number_Iter)&#xA;iter = iter + 1;&#xA;&#xA;    x1=current_position;&#xA;    y= x1^2;&#xA;&#xA;    current_fitness=y;&#xA;    disp(iter); disp(i);&#xA;&#xA;&#xA; for var = 1 : N&#xA;if current_fitness(var) &amp;lt; local_best_fitness(var) then&#xA;  local_best_fitness(var) = current_fitness(var);&#xA;  local_best_position(var) = current_position(var);  &#xA;end       &#xA;end&#xA;&#xA;current_glob_bestfitness = min(local_best_fitness);&#xA;&#xA;if (current_glob_bestfitness &amp;lt; global_best_fitness)&#xA;      global_best_fitness = current_glob_bestfitness;&#xA;&#xA;  for var2=1:N&#xA;         g=find(current_fitness==min(current_fitness));&#xA;         global_best_position(var2)=local_best_position(g);&#xA;&#xA; end&#xA;end&#xA;&#xA;velocity = weight * velocity + const_c1*(R1.*(local_best_position - current_position)) + const_c2*(R2.*(global_best_position - current_position));&#xA;&#xA;current_position = current_position + velocity;&#xA;plot(x1,y,'or');&#xA;y1=min(y);  &#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="10539" LastActivityDate="2016-03-13T15:00:57.210" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9388" PostTypeId="1" AcceptedAnswerId="9389" CreationDate="2016-03-13T15:30:33.313" Score="0" ViewCount="38" Body="&lt;p&gt;If I had a single stepper motor how could I use it to create a robotic clamp that could simply grab hold of something like a plank of wood and release it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any standard parts that I could use for this? I'm having trouble finding out what the names of the parts would be.&lt;/p&gt;&#xA;" OwnerUserId="13164" LastActivityDate="2016-03-13T15:44:51.840" Title="Building a robotic clamp" Tags="&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9389" PostTypeId="2" ParentId="9388" CreationDate="2016-03-13T15:44:51.840" Score="1" Body="&lt;p&gt;Look for &quot;parallel jaw gripper kit.&quot;  Ignoring the pneumatic designs, you will find a typical parallel jaw gripper has a set of 1:1 gears which ensure the two jaws travel at equal speeds in opposite directions, connected to parallelogram 4-bar linkages which keep the clamping jaws parallel to each other.  You can find them with or without the actuator.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2016-03-13T15:44:51.840" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9390" PostTypeId="2" ParentId="9386" CreationDate="2016-03-13T19:44:23.530" Score="0" Body="&lt;pre&gt;&lt;code&gt;function [boundedAngle] = BoundAngle (unboundedAngle)&#xA;while unboundedAngle &amp;lt; -pi&#xA;    unboundedAngle = unboundedAngle + 2*pi;&#xA;end&#xA;while unboundedAngle &amp;gt; pi&#xA;    unboundedAngle = unboundedAngle - 2*pi;&#xA;end&#xA;boundedAngle = unboundedAngle;&#xA;return:&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The above code writes a (Matlab) function to limit angles between +/-pi. You say the angle should be between 0 and pi, but that only means 0-180 degrees. What if the object is behind you? If you want to ignore it, that's your choice, but you can't shift in pi (180 degree) increments and expect to get a valid answer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding the sign change, that appears to be expected, based on your drawing. I'm not sure what the issue is that you're having with the results.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-03-13T19:44:23.530" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9391" PostTypeId="1" CreationDate="2016-03-13T23:50:44.423" Score="2" ViewCount="173" Body="&lt;p&gt;How accurate must my odometer reading be for SLAM ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am writing this extra section because it says my question body does not meet the quality standard. &lt;/p&gt;&#xA;" OwnerUserId="12906" LastActivityDate="2016-03-17T17:09:46.267" Title="Slam Odometer Requirement" Tags="&lt;slam&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9392" PostTypeId="5" CreationDate="2016-03-14T02:48:34.940" Score="0" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;A quadcopter, also called a quadrotor helicopter or quadrotor, is a&#xA;  &lt;a href=&quot;https://en.wikipedia.org/wiki/Multirotor&quot; rel=&quot;nofollow&quot;&gt;multirotor&lt;/a&gt; &lt;a href=&quot;https://en.wikipedia.org/wiki/Helicopter&quot; rel=&quot;nofollow&quot;&gt;helicopter&lt;/a&gt; that is lifted and propelled by four &lt;a href=&quot;https://en.wikipedia.org/wiki/Helicopter_rotor&quot; rel=&quot;nofollow&quot;&gt;rotors&lt;/a&gt;. &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Quadcopters are classified as &lt;a href=&quot;https://en.wikipedia.org/wiki/Rotorcraft&quot; rel=&quot;nofollow&quot;&gt;rotorcraft&lt;/a&gt;, as opposed to &lt;a href=&quot;https://en.wikipedia.org/wiki/Fixed-wing_aircraft&quot; rel=&quot;nofollow&quot;&gt;fixed-wing aircraft&lt;/a&gt;,&#xA;   because their &lt;a href=&quot;https://en.wikipedia.org/wiki/Lift_(force)&quot; rel=&quot;nofollow&quot;&gt;lift&lt;/a&gt; is generated by a set of rotors&#xA;  (vertically oriented &lt;a href=&quot;https://en.wikipedia.org/wiki/Propeller&quot; rel=&quot;nofollow&quot;&gt;propellers&lt;/a&gt;).&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Quadcopters generally use two pairs of identical fixed pitched&#xA;  propellers; two clockwise (CW) and two counter-clockwise (CCW). These&#xA;  use independent variation of the speed of each rotor to achieve&#xA;  control. By changing the speed of each rotor it is possible to&#xA;  specifically generate a desired total thrust; to locate for the centre&#xA;  of thrust both laterally and longitudinally; and to create a desired&#xA;  total &lt;a href=&quot;https://en.wikipedia.org/wiki/Torque&quot; rel=&quot;nofollow&quot;&gt;torque&lt;/a&gt;, or turning force.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Source: &lt;a href=&quot;https://en.wikipedia.org/wiki/Quadcopter&quot; rel=&quot;nofollow&quot;&gt;Wikipedia&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9176" LastEditorUserId="9176" LastEditDate="2016-03-15T01:15:23.267" LastActivityDate="2016-03-15T01:15:23.267" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9393" PostTypeId="4" CreationDate="2016-03-14T02:48:34.940" Score="0" Body="This tag should be used with any questions relating to the use and design of multirotor helicopters that are lifted and propelled by four rotors." OwnerUserId="9176" LastEditorUserId="9176" LastEditDate="2016-03-15T01:15:31.860" LastActivityDate="2016-03-15T01:15:31.860" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9394" PostTypeId="2" ParentId="9367" CreationDate="2016-03-14T08:37:51.357" Score="3" Body="&lt;ol&gt;&#xA;&lt;li&gt;&lt;blockquote&gt;&#xA;  &lt;p&gt;Based on the calculations, it seems that any amount of torque can get&#xA;  the robot moving&lt;/p&gt;&#xA;&lt;/blockquote&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;That is true only for a theoretical robot moving in vacuum without any friction in its mechanisms. Normally if you limit a current too much, you won't even get the motor moving without any load, not to mention a whole robot. &lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;&lt;blockquote&gt;&#xA;  &lt;p&gt;the more torque, the faster the robot's acceleration&lt;/p&gt;&#xA;&lt;/blockquote&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Yes, the acceleration is directly proportional to the force you apply $$&#xA;a=\frac{F}{m}&#xA;$$,&#xA;which in turn is directly proportianl to the torque&#xA;$$F=\frac{T}{R}$$&#xA;Both mass and wheel radius are constant, so when you increase torque, the acceleration increses also.&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;3&quot;&gt;&#xA;&lt;li&gt;&lt;blockquote&gt;&#xA;  &lt;p&gt;if the power source cannot supply the full stall current of the motors, will the robot not be able to start moving&lt;/p&gt;&#xA;&lt;/blockquote&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The torque is proportional to the current you supply, so in the worst case scenario (depleated, undersized battery ant too weak motor) this may happen. However, for your robot and motors you should be fine. Your robot will just accelerate more slowly.&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;4&quot;&gt;&#xA;&lt;li&gt;&lt;blockquote&gt;&#xA;  &lt;p&gt;Once the robot reaches full speed and is no longer accelerating, theoretically the motors will not be providing any torque, but I do not think this is the case. Is it, and if so, how will I know how much torque they will be providing?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Again, you forget about the friction. Your robot will stop accelerating when friction will be equal to the torque. For Pololu motors this happens usually at 70-90% of motors no load speed, depending on robot's weight and mechanics. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Generally, in my calculations I usually choose 50% safety margin, and I have never had any trouble. You have some 30%, but that should be fine too. &lt;/p&gt;&#xA;" OwnerUserId="7360" LastActivityDate="2016-03-14T08:37:51.357" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9395" PostTypeId="1" CreationDate="2016-03-14T14:21:14.480" Score="0" ViewCount="1332" Body="&lt;p&gt;I need to develop something in order to update some coordinates in a KUKA KR C4 robot predefined program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After some research I've found some ways to do it, but all of them non free.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I had several options, like developing a HMI in the console with 3 buttons, to touch up the 3 coordinates that I have to update for example.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sending a XML file would work too but I need a RSI connection, and I can't do it without proper software (I guess).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do you know about something like this? Or a C++ library that allows me to have access the &lt;code&gt;.src&lt;/code&gt;/&lt;code&gt;.dat&lt;/code&gt; files or to create a new one with the same &quot;body&quot; but with different coordinates?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Summing up, imagine that I have a conveyor that carries boxes and I need to develop a pick and place program. So far so good. But every 100 boxes, the size changes (and I can't predict it). So the operator goes and updates the coordinates, but I want to make sure that he won't change anything else in the program. Any ideas?&lt;/p&gt;&#xA;" OwnerUserId="11884" LastEditorUserId="9176" LastEditDate="2016-04-26T08:40:53.397" LastActivityDate="2016-04-26T08:47:29.540" Title="KUKA robot - update coordinates" Tags="&lt;robotic-arm&gt;&lt;industrial-robot&gt;&lt;kuka&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9396" PostTypeId="2" ParentId="9391" CreationDate="2016-03-14T14:23:50.217" Score="1" Body="&lt;p&gt;That's what's great about SLAM: it doesn't matter. As long as your sensor noise is modeled appropriately and the odometer readings can be translated to position changes, the general algorithm holds. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a practical sense, with very high uncertainty from odometery, it will update the position just fine, but will seem to ignore the odometer when &lt;em&gt;any&lt;/em&gt; other information is available (e.g., laser and static landmarks). Without other information, your maps may look like junk, but it will faithfully produce an estimate with correspondingly high uncertainty. &lt;/p&gt;&#xA;" OwnerUserId="163" LastEditorUserId="163" LastEditDate="2016-03-17T17:09:46.267" LastActivityDate="2016-03-17T17:09:46.267" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="9397" PostTypeId="1" CreationDate="2016-03-14T16:23:02.810" Score="4" ViewCount="236" Body="&lt;p&gt;If I need to fly a drone in strong winds, how can I stabilize it? Should I use accelerometers and gyroscopes to keep it steady? Or should I just use some flight technique under such circumstances?&lt;/p&gt;&#xA;" OwnerUserId="13172" LastActivityDate="2016-03-15T01:09:20.537" Title="If I must fly my drone in bad weather, how can I maintain control of it in strong winds?" Tags="&lt;quadcopter&gt;&lt;navigation&gt;&lt;accelerometer&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9398" PostTypeId="2" ParentId="1445" CreationDate="2016-03-14T16:25:49.543" Score="3" Body="&lt;p&gt;To get the sensor data you need:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;First to write a &lt;code&gt;MAV_DATA_STREAM_EXTRA1&lt;/code&gt; message to the arduCopter. This message tells it to send out the sensor data (and at what rate it should do that). (BTW - this message relates to yaw/pitch/roll data only).&lt;/li&gt;&#xA;&lt;li&gt;Then you read the relevant data message (in this case &lt;code&gt;MAVLINK_MSG_ID_ATTITUDE&lt;/code&gt;) and decode the relevant sensor data.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="13173" LastEditorUserId="9176" LastEditDate="2016-03-15T01:14:31.403" LastActivityDate="2016-03-15T01:14:31.403" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9399" PostTypeId="2" ParentId="9371" CreationDate="2016-03-14T20:26:14.493" Score="0" Body="&lt;p&gt;I figured out my problem - the '149 35' I was sending to ask for the current OI state (so I could confirm communication) was wrong. I should be sending '149 1 35'. From then on, it was all confused about what I was sending it, because it was expecting 35 sensor-id bytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Short version: make sure you follow the protocol right :(&lt;/p&gt;&#xA;" OwnerUserId="13134" LastActivityDate="2016-03-14T20:26:14.493" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9400" PostTypeId="1" AcceptedAnswerId="9404" CreationDate="2016-03-14T20:26:59.617" Score="2" ViewCount="64" Body="&lt;p&gt;I am designing a multi modal stent testing machine which will bend, twist, and compress stents (very thin, light, and fragile cylindrical meshes for in arteries) in a tube. The machine will operate at maximum 3.6 Hz for months at a time (&gt; 40 million cycles). As the machine will be in a lab with people, the noise should be minimal. I am choosing actuators for my design but was overwhelmed by the range of products available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For rotating the stents around their axis, I will need a rotary actuator with the following specs:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;torque: negligible max angle: 20 deg&lt;/li&gt;&#xA;&lt;li&gt;angular velocity needed: max 70 deg/s&lt;/li&gt;&#xA;&lt;li&gt;hollow shafts are a plus&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;For compressing the stents, I will need a linear actuator with the following specs:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;force: low (&amp;lt;1N)&lt;/li&gt;&#xA;&lt;li&gt;max stroke: 20mm but if possible 70mm for allowing different stent lengths &lt;/li&gt;&#xA;&lt;li&gt;stroke velocity needed: max 120mm/s&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Price of these motors is not the driving factor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I looked into stepper motors, servo motors, and piezoelectric motors. There seems to be s huge selection that fits my requirements. If all motor types have a reliability that suits my needs, which characteristics/advantages/disadvantages should I consider that determine the selection of suitable actuators? I do know what the difference is between the motor types, but there is a lot of overlap. Concrete suggestions are welcome.&lt;/p&gt;&#xA;" OwnerUserId="9070" LastActivityDate="2016-03-15T00:36:00.440" Title="Choosing motor type for high reliability for many cycles" Tags="&lt;actuator&gt;&lt;reliability&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9401" PostTypeId="2" ParentId="9395" CreationDate="2016-03-14T20:49:55.923" Score="0" Body="&lt;p&gt;This is as far as it can be from an elegant solution:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can access the src and dat files via ftp. You can manipulate them as you like afterwards. However you cannot load them into memory without pressing some buttons on the panel. To circumvent this you might be able to install a program on the windows os running on the kuka controller that can move the mouse by getting external command via ethernet. You cam change the src file by editing over ftp and instruct the virtual mouse program to make some clicks to load the src into memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A somewhat more elegant solution is:&#xA;Make the operator switch the robot from auto-ext mode to T1 (as I recall this unloads the program from memory) with a hardware switch. Access teh program vie ftp edit on a PC with custom hmi copy back via ftp and instruct the operator to switch the robot back to aut-external (as I recall it loads back the program to memory) with a hardware switch)&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2016-03-14T20:49:55.923" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="9402" PostTypeId="2" ParentId="9400" CreationDate="2016-03-14T21:00:24.617" Score="0" Body="&lt;p&gt;Brushless (AC) permanent magnet motors are a reliable technology that has good controllability. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Look for companies whose controllers suite you. Many will have a basic motion environment that is enough to set up your tests without any custom programming.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://maxonmotor.com&quot; rel=&quot;nofollow&quot;&gt;Maxon&lt;/a&gt; and &lt;a href=&quot;http://www.faulhaber.com/en/global/&quot; rel=&quot;nofollow&quot;&gt;Faulhaber&lt;/a&gt; are good sources for small motors and controllers. Faulhaber has direct drive linear motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your hollow shaft is for wiring, and you end up using a hollow shaft motor, make sure you do some stress calculations for the wires. You may find that bending stress (coming in from the side) is better than torsional. Make sure you have wire break detection or use something capable of the fatigue like beryllium copper for the flexing wiring.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2016-03-14T21:00:24.617" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9404" PostTypeId="2" ParentId="9400" CreationDate="2016-03-15T00:36:00.440" Score="0" Body="&lt;p&gt;Certainly, as @Hauptmech says, a brushless motor is preferred for long-term reliability testing.  I would select between BLAC and BLDC based on the required smoothness of the acceleration profile.   From your description it sounds like that isn't a key performance indicator, so a BLDC motor might be just fine (the difference being whether a trapezoidal or a sinusoidal profile is used to drive the motor).  You could implement a stepper motor, also, which is really just a high pole count brushless motor.   That would be simple to control and would provide the same reliability as any other brushless motor.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another mechanical aspect to consider is that of bearing spacing and the ability to withstand off-axis loads (for rotary motors), and off-axis moments (for your linear drives).   The bearings are by far the most likely mechanical item to go bad during your reliability test, so I would compare the specs for those items, assuming all else is equal.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since you stated in your question that many technologies would seem to meet your requirements, I would also focus on how easy it would be to maintain the test system, and on how easy it will be to set up.   The main issues I would look at for maintainability are fairly trivial items - going with a company that has a support person in your area, ensuring you can source any required replacement items locally (even though specs say something will last for 5M cycles, not every one will), and being able to get the ancillary components (drives, power supplies, etc) if any of them go bad.   For ease of setup, I would look for a company that has quality applications engineers, and for technologies that your company has used in the past.   If both a stepper and a BLDC motor meet your reliability requirements, and your company has used BLDC motors but not steppers in the past, it would make sense to go with the technology you have experience with.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are so many good options for you.  I also suggest that you rationalize a strategy for making this decision, and then make it.   Your testing won't be any better if it takes you three months to decide than it would if you came up with a solution this week :-)&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2016-03-15T00:36:00.440" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9405" PostTypeId="1" CreationDate="2016-03-15T00:49:26.993" Score="0" ViewCount="350" Body="&lt;p&gt;I am trying to get my robot to drive straight and am having trouble.  I find that when running the motors with no load they run fine.  If I put a load on one motor it accelerates.  The other performs as expected, it tries to maintain speed.  I am running 393 motors with encoders and PID selected.  I am running robot C.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See the following video: &lt;a href=&quot;https://youtu.be/u3P0Wectwco&quot; rel=&quot;nofollow&quot;&gt;https://youtu.be/u3P0Wectwco&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;program is as follows;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#pragma config(I2C_Usage, I2C1, i2cSensors)&#xA;#pragma config(Sensor, dgtl12, killB,          sensorTouch)&#xA;#pragma config(Sensor, I2C_1,  ,               sensorQuadEncoderOnI2CPort,    , AutoAssign )&#xA;#pragma config(Sensor, I2C_2,  ,               sensorQuadEncoderOnI2CPort,    , AutoAssign )&#xA;#pragma config(Sensor, I2C_3,  ,               sensorQuadEncoderOnI2CPort,    , AutoAssign )&#xA;#pragma config(Motor,  port2,           rmotor,        tmotorVex393_MC29, PIDControl, reversed, driveRight, encoderPort, I2C_1)&#xA;#pragma config(Motor,  port3,           lmotor,        tmotorVex393_MC29, PIDControl, driveLeft, encoderPort, I2C_2)&#xA;#pragma config(Motor,  port4,           topmotor,      tmotorVex393_MC29, openLoop, encoderPort, I2C_3)&#xA;#pragma config(Motor,  port5,           pmotor,        tmotorVex393_MC29, openLoop)&#xA;//*!!Code automatically generated by 'ROBOTC' configuration wizard               !!*//&#xA;&#xA;void StopAll(){&#xA;    motor[rmotor] = 0;&#xA;    motor[lmotor] = 0;&#xA;    motor[topmotor] = 0;&#xA;    motor[pmotor] = 0;&#xA;}&#xA;&#xA;//Stops the program at the push of a button&#xA;task eStop(){&#xA;    while (SensorValue(killB) == 0){&#xA;        wait1Msec(10);&#xA;    }&#xA;    StopAll();&#xA;    stopAllTasks();&#xA;}&#xA;&#xA;&#xA;task main()&#xA;{&#xA;    startTask(eStop);&#xA;&#xA;    nMotorEncoder[rmotor] = 0;&#xA;    nMotorEncoder[lmotor] = 0;&#xA;&#xA;    motor[rmotor] = 15;&#xA;    motor[lmotor] = 15;&#xA;    wait1Msec(20000);&#xA;    motor[rmotor] = 0;&#xA;    motor[lmotor] = 0;&#xA;    StopAll();&#xA;&#xA;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Thank you,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mark&lt;/p&gt;&#xA;" OwnerUserId="572" LastEditorUserId="572" LastEditDate="2016-03-15T01:09:48.400" LastActivityDate="2016-03-16T00:46:34.980" Title="VEX Cortex Motor Speeds up under load" Tags="&lt;pid&gt;&lt;robotc&gt;&lt;vex&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9406" PostTypeId="2" ParentId="9397" CreationDate="2016-03-15T01:09:20.537" Score="11" Body="&lt;p&gt;In controls this is known as &lt;em&gt;disturbance rejection&lt;/em&gt;.  In order to sustain your motion in the presence of high winds you need the controller to be as responsive as possible, and an accelerometer would help.    A fast loop rate will also help.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You also have to deal with the nonlinearities of thrust, drag, weight, and lift.  Depending on the design of your drone, you might be able to &quot;point it into the wind&quot; to get some additional lift.   But the dynamics of this are very difficult.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2016-03-15T01:09:20.537" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9409" PostTypeId="1" AcceptedAnswerId="9410" CreationDate="2016-03-15T14:36:05.523" Score="7" ViewCount="5684" Body="&lt;p&gt;Why would a drone need a magnetometer? What would the drone do with this information? I think it would be to tell direction, but why would it need this if it has an accelerometer and a gyroscope?&lt;/p&gt;&#xA;" OwnerUserId="13172" LastActivityDate="2016-03-19T04:45:57.430" Title="Why would a drone need a magnetometer? Are an accelerometer and a gyroscope not sufficient?" Tags="&lt;mobile-robot&gt;&lt;magnetometer&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="9410" PostTypeId="2" ParentId="9409" CreationDate="2016-03-15T14:43:58.970" Score="6" Body="&lt;p&gt;The main difference between accelerometer and gyroscope vs magnetometer is that first two give only relative information - you may calculate heading relative to your starting position, but you won't have any idea how this heading relates to world directions. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What's more, as both gyroscope and accelerometer give you only accelerations values, calculation of pose and heading basing on their readings is incremental. That means that pose estimation error increases over time. Magenetometer can be used to correct these data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt;&#xA;As Jakob stated in the comment, accelerometer can also be used to estimate pose (roll and pitch angles), but only when your drone doesn't accelerate and you measure gravity only. When drone accelerates, you won't know for sure how much of the acceleration comes from its movement and how much from gravity force. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Generally, more sensors let you account for errors more easily and make pose estimation more accurate. If you want more information, &quot;sensor fusion' is a good keyword to start. Also &lt;a href=&quot;https://robotics.stackexchange.com/questions/277/why-do-i-need-a-kalman-filter&quot;&gt;this question&lt;/a&gt; on Kalman filter is worth reading.&lt;/p&gt;&#xA;" OwnerUserId="7360" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2016-03-18T08:28:16.560" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9411" PostTypeId="2" ParentId="9405" CreationDate="2016-03-16T00:46:34.980" Score="1" Body="&lt;p&gt;The problem was with the motor encoder.  Upon disassembly, I discovered that the encoder was installed improperly.  For whatever reason, the encoder gear was installed without an axle.  Under no load, it worked.  When under load apparently it would shift enough to cause it to miss counts causing the encoder to under sense speed, thus speeding up to motor.&lt;/p&gt;&#xA;" OwnerUserId="572" LastActivityDate="2016-03-16T00:46:34.980" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9412" PostTypeId="2" ParentId="5053" CreationDate="2016-03-16T01:03:22.443" Score="0" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Why someone would choose to use 2 different brands, I am not sure. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It is VERY common and indeed common sense to use different brands of a critical component for security.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is because the chances are the the same brand component is likely to have the same point of failure. Therefor two different brands are used as they are unlikely to have the same point of failure. In aerospace systems this is the MINIMUM requirement i.e. several IMUs all of different brands.&lt;/p&gt;&#xA;" OwnerUserId="13185" LastEditorUserId="110" LastEditDate="2016-03-16T01:25:37.933" LastActivityDate="2016-03-16T01:25:37.933" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9413" PostTypeId="1" CreationDate="2016-03-16T03:53:20.717" Score="0" ViewCount="3682" Body="&lt;p&gt;I want to implement &lt;a href=&quot;https://en.wikipedia.org/wiki/Rapidly_exploring_random_tree&quot; rel=&quot;nofollow&quot;&gt;RRT&lt;/a&gt; for motion planning of a robotic arm. I searched a lot on the internet to get some sample code of RRT for motion planning, but I didn't get any. Can someone please suggest a good source where I can find RRT implemented in C++ for any type of motion planning.&lt;/p&gt;&#xA;" OwnerUserId="11751" LastEditorUserId="110" LastEditDate="2016-03-16T14:54:13.800" LastActivityDate="2020-10-28T09:40:51.273" Title="RRT algorithm in C++" Tags="&lt;robotic-arm&gt;&lt;motion-planning&gt;&lt;algorithm&gt;" AnswerCount="4" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9416" PostTypeId="2" ParentId="9413" CreationDate="2016-03-16T13:45:59.910" Score="2" Body="&lt;p&gt;The first hit on GitHub gives me the following implementation, which is what you seem to be looking for. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/RoboJackets/rrt&quot; rel=&quot;nofollow&quot;&gt;https://github.com/RoboJackets/rrt&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="127" LastActivityDate="2016-03-16T13:45:59.910" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9417" PostTypeId="1" CreationDate="2016-03-16T15:44:55.243" Score="2" ViewCount="310" Body="&lt;p&gt;I need my motor to be powered with 12V, 5A for 1 hour continuously. How can i decide the Ah rate of the battery. Please suggest some lithium ion battery for the specification&lt;/p&gt;&#xA;" OwnerUserId="9856" LastActivityDate="2017-04-18T22:42:07.197" Title="How to decide the battery power for my robot" Tags="&lt;mobile-robot&gt;&lt;motor&gt;&lt;power&gt;&lt;battery&gt;&lt;lithium-polymer&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9418" PostTypeId="2" ParentId="9409" CreationDate="2016-03-16T16:10:37.537" Score="2" Body="&lt;p&gt;A magnometer lets the drone control its geographical heading. It's really the accelerometer that tells direction (not the gyroscope) and, in this case, the direction is down-wards. This provides feedback to manipulate the drone's pitch-and-roll positions. A magnometer tells another direction - feedback used to manipulate the angular yaw position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At its most basic, any autopilot system needs to control the aircraft's flight dynamics: pitch, roll and yaw (or azimuth).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A gyroscope senses angular velocity across the pitch-, roll- and yaw-axis. A system could use this feedback to manipulate the speeds of the motors such that desired angular velocities are maintained across all axes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An accelerometer senses force along the pitch-, roll- and yaw-axis. A system could use this data, combined with data from the gyroscope (see &quot;sensor-fusion&quot;), to estimate the aircraft's orientation relative to the ground and use this feedback to manipulate angular velocities such that desired angular positions are maintained in the pitch-and-roll axes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A magnometer senses magnetic flux density across the pitch-, roll- and yaw-axis. A system could use this data, combined with data from the accelerometer and gyroscope, to estimate the aircraft's orientation relative to the Magnetic North Pole and use this feedback to manipulate angular velocity such that a desired angular position is maintained in the yaw-axis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Without a magnometer, only the angular velocity can be maintained in the yaw-axis (not the angular position, which exists only relative to some known direction). In theory, provided that such direction is given upfront as an initial vector, it is possible to use the gyroscope data as feedback to track the aircraft's relative orientation as it rotates over time. In practice, however, this integration accumulates error (see &quot;gyroscope drift&quot;) and the method soon becomes impractical without also incorporating feedback from other sensors (that provide a means of some direction relative to the aircraft).&lt;/p&gt;&#xA;" OwnerUserId="9770" LastEditorUserId="9770" LastEditDate="2016-03-19T04:45:57.430" LastActivityDate="2016-03-19T04:45:57.430" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9420" PostTypeId="1" AcceptedAnswerId="9421" CreationDate="2016-03-16T18:50:21.413" Score="1" ViewCount="558" Body="&lt;p&gt;I'm implementing a set of loops to control pitch-and-roll angular positions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In an inner-loop, motor speeds are adjusted to achieve desired angular rates of rotation (the &quot;inner-loop setpoints&quot;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An outer-loop decides these desired angular rates (the &quot;inner-loop setpoints&quot;) based on the aircraft's angular positions.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h3&gt;Outer-loop&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Frequency = ~400Hz&lt;/li&gt;&#xA;&lt;li&gt;Outer PV = input angular position (in degrees)&lt;/li&gt;&#xA;&lt;li&gt;Outer SP = desired angular position - input angular position (in degrees)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h3&gt;Inner-loop&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Frequency = ~760Hz&lt;/li&gt;&#xA;&lt;li&gt;Inner PV = input angular rotation (in degrees-per-second)&lt;/li&gt;&#xA;&lt;li&gt;Inner SP = constant1 * Outer MV (in degrees-per-second)&lt;/li&gt;&#xA;&lt;li&gt;PWM = Inner MV / constant2 (as percentile)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;I understand what I-gain does and why this is important, but I'm not able to see any practical reason for also having I-gain specified in the outer-loop. Surely the inner-loop would compensate for any accumulated error, leaving no error to compensate for in the outer-loop, or is my thinking flawed?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any example gain values to elaborate would be greatly appreciated.&lt;/p&gt;&#xA;" OwnerUserId="9770" LastActivityDate="2019-05-28T09:05:03.847" Title="Why do I need I-gain in my outer-loop?" Tags="&lt;quadcopter&gt;&lt;pid&gt;" AnswerCount="4" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9421" PostTypeId="2" ParentId="9420" CreationDate="2016-03-16T21:31:17.183" Score="3" Body="&lt;p&gt;In my own experience, it is not necessary Integral term in any of these loops. I got a fine PD tuning of both inner and outer loop. See for instance this &lt;a href=&quot;https://link.springer.com/chapter/10.1007%2F978-3-319-18833-1_31#page-1&quot; rel=&quot;nofollow&quot;&gt;paper&lt;/a&gt;, where I firstly tuned PD only with PSO. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Wikipedia shows a simple animation of each of the effects of P-I-D in any tuning &lt;a href=&quot;https://en.wikipedia.org/wiki/PID_controller#Manual_tuning&quot; rel=&quot;nofollow&quot;&gt;https://en.wikipedia.org/wiki/PID_controller#Manual_tuning&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="10539" LastActivityDate="2016-03-16T21:31:17.183" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9422" PostTypeId="2" ParentId="9420" CreationDate="2016-03-17T01:54:31.963" Score="3" Body="&lt;p&gt;Integral gain is how you eliminate steady state error. An integral gain in the inner loop means you'll (eventually) have no steady state error on the angular &lt;em&gt;velocity&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What ensures no steady state error on angular position, which is arguably the more important of the two? Outer loop integral error. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-03-17T01:54:31.963" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="9424" PostTypeId="2" ParentId="9417" CreationDate="2016-03-17T09:46:24.073" Score="2" Body="&lt;p&gt;The Ah rating is a measure of charge - how many amps the battery can supply, for how long.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your case you need 5A for 1 hour, and that is simply 5 Ah. You multiply the current by the time required, to get the charge needed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next, The voltage rating is basically how many cells are used to make up that battery. You can't control that - you just have to get a battery that has the correct number of cells.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the full specification you need is: something rated for approximately 5Ah at approximately 12V.  (I can't advise on which one you should buy, as there are so many other factors that have to be taken into account.)&lt;/p&gt;&#xA;" OwnerUserId="9578" LastActivityDate="2016-03-17T09:46:24.073" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="9425" PostTypeId="2" ParentId="9391" CreationDate="2016-03-17T15:49:04.900" Score="0" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;How accurate must my odometer reading be for SLAM ?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There is no specific level for the accuracy. This is why the modern approaches for building SLAM are probabilistic approaches. This is due to the fact that noise in any sensor is inherited even with very accurate ones. The heavy load with very noisy sensors will be on your filters. You need very good filters to at least run SLAM in very simple maps (e.g. a bunch of points). &lt;/p&gt;&#xA;" OwnerUserId="2155" LastActivityDate="2016-03-17T15:49:04.900" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9426" PostTypeId="2" ParentId="9409" CreationDate="2016-03-17T17:38:43.320" Score="1" Body="&lt;p&gt;As other people have said, in a steady-state condition, a gyroscope+accelerometer sensor suite can successfully estimate the roll and pitch values of the UAV, but not its yaw angle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, there have been early successful fixed-wing UAV autopilots which managed to solve the yaw value through differentiation of the GPS signal. One such example is the MatrixPilot system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was possible since an airplane is aligned with the GPS track, more or less, with the roll and pitch values being independent of that solution. Naturally, this is not possible with a multirotor which can move at any direction regardless of heading.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But in the case of sustained turns, the additive Corriolis force dubs the accelerometer into thinking that the aircraft is inclined in a different pose than the actual one. Gradually, the solution from an AHRS filter diverges and gets tricked into thinking that the plane is banked less than the actual angle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When coming out of the turn, the AHRS solution is badly corrupted and takes a long time to get re-adjusted by the GPS track.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The magnetometer can solve this problem, by providing a stable reference vector, throughout the turn. &lt;/p&gt;&#xA;" OwnerUserId="11500" LastActivityDate="2016-03-17T17:38:43.320" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9427" PostTypeId="2" ParentId="7837" CreationDate="2016-03-17T19:57:14.230" Score="1" Body="&lt;p&gt;Torque is pretty easy to calculate.  A 300 gram (2.94 Newton) mass at the end of a 340 mm (0.34 meter) arm is 1 Nm.  (2.94 * 0.34).  If the arm weighs 2 kg (19.61 N), and its center of mass is half it's length, (0.17 m), that adds another 3.33 Nm.  So a total of 4.33 Nm.  But this doesn't take into account the joint's rotational acceleration which you didn't specify.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should check out this &lt;a href=&quot;http://www.societyofrobots.com/robot_arm_calculator.shtml&quot; rel=&quot;nofollow&quot;&gt;arm torque calculator&lt;/a&gt;.  The &lt;a href=&quot;http://www.societyofrobots.com/robot_arm_tutorial.shtml&quot; rel=&quot;nofollow&quot;&gt;robot arm tutorial&lt;/a&gt; on that same site also has lots of helpful info.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not sure what you mean about the arm flipping over.  But to ensure that a rigid body does not tip, simply sum the torques about the edge of the supporting convex hull.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2016-03-17T19:57:14.230" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9428" PostTypeId="2" ParentId="9382" CreationDate="2016-03-18T00:41:02.113" Score="1" Body="&lt;p&gt;You could look at three books.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.cds.caltech.edu/~murray/books/MLS/pdf/mls94-complete.pdf&quot; rel=&quot;nofollow&quot;&gt;A Mathematical Introduction to Robotic Manipulation - S.Sastry, X.Li and R.Murray&lt;/a&gt; provides a theoretical foundation to the kinematics, dynamics and control aspects of robotic manipulators. The only downside to this book is that it lacks in algorithmic content like that available in &lt;a href=&quot;http://www.probabilistic-robotics.org/&quot; rel=&quot;nofollow&quot;&gt;Probabilistic Robotics - Sebastian Thrun&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/0134687523&quot; rel=&quot;nofollow&quot;&gt;Robotic Engineering An Integrated Approach&lt;/a&gt; deals with the A to Z of designing a robotic manipulator. It gives you a theoretical overview of the fundamental concepts. In terms of design it takes you from requirements through implementation and practical considerations while choosing actuators, computing systems etc. The downside for this book is the same as the previous book.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.amazon.co.uk/Mechanical-Design-Robots-Eugene-Rivin/dp/0070529922&quot; rel=&quot;nofollow&quot;&gt;Mechanical Design of Robots&lt;/a&gt; covers mechanical engineering topics such as stresses, strains, structures, linkages etc. It is a book to help you design a robotic system from a functionality standpoint. The author maintains that design of robots should not necessarily compromise on aesthetic values by always going by the worst case scenario.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="3905" LastActivityDate="2016-03-18T00:41:02.113" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9434" PostTypeId="1" CreationDate="2016-03-18T17:10:27.870" Score="1" ViewCount="1854" Body="&lt;p&gt;I want to estimate the poses of a vehicle at certain key frames. The only sensor information I can use is from an IMU which yields translational acceleration and orientation measurments. I obtain a 7D pose, i.e. 3D position vector + unit quaternion orientation, if I integrate the translational acceleration twice and propagate the orientation measurements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I want to add a new edge to the graph I need a constraint for that edge. In general, for pose graphs this constraint represents a relational transformation $z_{ij}$ between the vertex positions $x_i$ and $x_j$ that are connected by the edge. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Comparing my case to the literature the following questions arised:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;How do I calculate a prediction $\hat{z}_{ij}$ which I can compare to a measurement $z_{ij}$ when computing the edge error? Initially, I understood that graph slam models the vertex poses as gaussian distributed variables and thus a prediction is simply calculated by $\hat{z}_{ij}=x_i^{-1} x_j$. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;How do I calculate the information (preferred) or covariance matrix? &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;How and when do I update the information matrices? During optimization? Or only at edge creation? At loop closure?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I read about the chi-square distribution and how it relates to the Mahalanobis distance. But how is it involved in the above steps? &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Studying current implementations (e.g. mrpt-graph-slam or g2o) I didn't really discover how predictions (or any probability density function) is involved. In contrast, I was even more confused when reading the mrpt-graph-slam example where one can choose between raw poses and poses which are treated as means of a probability distribution.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="11812" LastActivityDate="2016-03-18T20:28:50.263" Title="Pose-Graph-SLAM: How to create edges if only IMU-odometry is given?" Tags="&lt;slam&gt;&lt;imu&gt;&lt;data-association&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9436" PostTypeId="1" CreationDate="2016-03-18T19:37:26.700" Score="2" ViewCount="81" Body="&lt;p&gt;I implemented a simulation for a robotic arm that has to grab things. This arm has a 6DOF structure and a simple gripper on the top. I made a simple CCD IK algorithm to control the arm. I can use it in two ways:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Compute the position of the last joint of the arm before the hand&#xA;part (which means 1 end-effector). Then use an analytical method to&#xA;place the hand in a good orientation.&lt;/li&gt;&#xA;&lt;li&gt;Compute directly the arm, and the hand position by giving the CCD IK algorithm 2 end-effectors that are the 2 finger of the hand.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;What is the most used method for a grabbing arm robot ? I'm not willing to find a solution, just to know what people usually do&lt;/strong&gt;. &lt;/p&gt;&#xA;" OwnerUserId="13217" LastEditorUserId="13218" LastEditDate="2016-03-20T12:30:49.917" LastActivityDate="2016-03-20T12:30:49.917" Title="What is the common process to place a robotic arm gripper" Tags="&lt;robotic-arm&gt;&lt;inverse-kinematics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9437" PostTypeId="1" CreationDate="2016-03-18T19:49:58.713" Score="3" ViewCount="748" Body="&lt;p&gt;I use gazebo to simulate a robot arm. To control its joints, I use PID controllers. As you might know, PID are sometimes pretty hard to tune and this is the case for a robotic arm. To avoid any tuning, and because I don't need the PID values to be realistic, I set to zero the derivative and integral parameters, increase a lot the proportional gain and add a lot of damping in my joints. By doing this, I can get a well working arm but only if I disable the gravity. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is the following. Do you have an idea how I could simulate a very strong actuator with not necessarily realistic parameters?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT 1: Setting the integral and derivative gain is stupid. The integral gain helps in correcting the effect of the gravity. The derivative gain counters the loss of stability and speed due to the integral gain. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This question somehow leads to another. Do you know what tuning do the robotic arm manufacturer (big arms for car industry for example). I guess that this arm use actuators with a very strong torque and a low maximum speed which reduces the need of tuning.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT 2: More info on my setup. I use gazebo 6, with ODE. The robot description is in SDF. I control the robot with a model plugin. As a PID controler I use the PID class from the common library of gazebo and get directly the JointControler associated to the model. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let say that I would like actuators very robust without any tuning needed. This way I could have a simulation WITH dynamics (by opposition to the SetPosition method). Do you think it is possible ?    &lt;/p&gt;&#xA;" OwnerUserId="13218" LastEditorUserId="13218" LastEditDate="2016-03-21T22:16:58.053" LastActivityDate="2016-07-21T18:38:40.587" Title="Can we simulate a actuator with a very strong torque with a PID controller" Tags="&lt;pid&gt;&lt;power&gt;&lt;servomotor&gt;&lt;joint&gt;&lt;gazebo&gt;" AnswerCount="3" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9438" PostTypeId="2" ParentId="9434" CreationDate="2016-03-18T20:28:50.263" Score="3" Body="&lt;p&gt;First off, it doesn't sound like you're actually doing SLAM. You didn't mention an exteroceptive sensor (e.g., laser, camera) that actually maps the environment. With just an IMU, you are doing localization, or more specifically, dead-reckoning. With just an IMU, there is no way to actually implement pose-graph SLAM in its usual formulation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That being said, I'll try to answer your questions pretending you have some exteroceptive sensor that is measuring the environment, with which you can generate pose-transformation measurements.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Let's say the nodes in the graph are $x=(x_1,...x_n)$, where $x_i = (p_i, q_i)$ is the position $p_i$ and orientation $q_i$ of the node (6 DOF). Then the predicted observation between them is simply their relative position and relative orientation. For example, if the orientation is parameterized as a unit quaternion, $\hat{z}_{ij} = (p_j - p_i, \log(q^{-1}_i q_j)).$ For an explanation as to why the $\log$ is there, &lt;a href=&quot;https://robotics.stackexchange.com/a/9137/4320&quot;&gt;see one of my other answers&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;In pose-graph SLAM, the information matrix is the &quot;Hessian&quot; $J^\top \Sigma J$ (not actually the Hessian, just an approximation), where $J$ is the Jacobian of your errors with respect to your state, and $\Sigma$ is the information matrix of your measurements.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The information matrix changes every time you add a node, every time you add an edge, and every time you optimize the pose-graph. You can calculate it at any time by calculating $J^\top \Sigma J$.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Your cost function that you are trying to minimize represents the Mahalanobis distance between your predicted and actual measurements, which has a chi-square distribution.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Not really sure exactly what you mean here. Note that you are trying to &lt;em&gt;maximize&lt;/em&gt; the likelihood of your observations, which means you are trying to find the state the maximizes the PDFs of your measurements. How do we do this? We take the &lt;em&gt;negative log&lt;/em&gt; of the Gaussian PDF, which forms our cost function. For example, for a 1-D linear system, the cost of a measurement is the negative log of the PDF of the measurement:&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;f(z|x,\sigma) = \frac{1}{\sigma\sqrt{2\pi}}\exp\left(-\frac{\left(z-Hx\right)^2}{2\sigma^2}\right)&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;-\ln(f(z|x,\sigma)) = \eta\frac{\left(z-Hx\right)^2}{2\sigma^2}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that $\eta$ is a normalization constant that does not depend on $x$, therefore it has no effect on the optimization. The goal of pose-graph SLAM is to find $x$ that minimizes $-\ln(f(z|x,\sigma))$ for measurements simultaneously. If you consider the measurements independent, then the cost is just the sum of the negative log-likelihoods.&lt;/p&gt;&#xA;" OwnerUserId="4320" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2016-03-18T20:28:50.263" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="9439" PostTypeId="2" ParentId="2418" CreationDate="2016-03-18T21:15:50.413" Score="0" Body="&lt;p&gt;Maybe this would help. The flex is just a twist. The twist causes a lower angle of attack, progressively worsening the further out the blade you travel and as the revolutions are increased (where and when you're getting your most lift). It's the point hitting the air hardest. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Less angle of attack means less bite, resulting in less lift and less response (this is also the reason variable pitch works). The denser the air, the less angle of attack needed and vice versa. Also the twisted blade takes less power to rotate. Flatter blades give less lift and less response but will increase the flight times due to less drag on the twisted prop. A prop is just a wing that rotates - drag and lift. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The tests were done long before quads through. Sikorsky might have been the first to do wind tunnel and lift capabilities tests I think if you would like another place to search. I hope this helps.&lt;/p&gt;&#xA;" OwnerUserId="13220" LastEditorUserId="9176" LastEditDate="2016-03-19T11:29:06.083" LastActivityDate="2016-03-19T11:29:06.083" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9440" PostTypeId="2" ParentId="9436" CreationDate="2016-03-19T00:21:33.617" Score="1" Body="&lt;p&gt;If your robot has a spherical wrist, meaning all three axes intersect at a point, you can use wrist partitioning to solve your problem.  With wrist partitioning, you use the first three joints of the robot to place the center of the wrist at a desired position, then use the three wrist axes to orient the end effector.   It becomes two simpler problems &lt;em&gt;vs&lt;/em&gt; one difficult problem. &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2016-03-19T00:21:33.617" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9441" PostTypeId="1" CreationDate="2016-03-19T04:17:33.380" Score="0" ViewCount="101" Body="&lt;p&gt;there is an app called &lt;a href=&quot;https://www.decisivetactics.com/products/serial/&quot; rel=&quot;nofollow noreferrer&quot;&gt;SERIAL,&lt;/a&gt; available in the app store. &#xA;I've downloaded it on my mac and am experimenting with it, any ideas on how to send create2 OI commands using &quot;Serial&quot;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;so far it seems a handy app, I've bypassed all the need for other drivers. anyone else use SERIAL/something of the like? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;*when the SERIAL terminal is open and the number 9 is pressed on my mac it seems to activate cleaning mode. thats all the communication I'm getting after hours of playing around in python and mac terminal.  &lt;a href=&quot;https://i.stack.imgur.com/JpjBA.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JpjBA.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13114" LastEditorUserId="13114" LastEditDate="2016-03-19T04:37:01.943" LastActivityDate="2016-06-19T02:58:08.060" Title="create2 commands with an app called SERIAL" Tags="&lt;mobile-robot&gt;&lt;irobot-create&gt;&lt;serial&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9442" PostTypeId="2" ParentId="9437" CreationDate="2016-03-19T06:05:46.050" Score="0" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I can get a well working arm but only if I disable the gravity.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It seems to me you are not using &lt;a href=&quot;https://en.wikipedia.org/wiki/Feedback_linearization&quot; rel=&quot;nofollow&quot;&gt;feedback linearizing&lt;/a&gt; approach with your PID controller. Remember PD and PID work only with linear models. If you have no uncertainties in your model which is what you are looking for by saying &quot;&lt;strong&gt;an ideal motor&lt;/strong&gt;&quot;, then PD works very well. Once you add uncertainties in your model then you need to utilize PID to overcome the steady state error. &lt;/p&gt;&#xA;" OwnerUserId="2155" LastActivityDate="2016-03-19T06:05:46.050" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="9443" PostTypeId="1" CreationDate="2016-03-19T06:30:33.860" Score="0" ViewCount="91" Body="&lt;p&gt;What is the equivalent code of &quot;env.CheckCollision(robot)&quot; in C++? Even though it is said that conversion of commands from python to c++ is easy and intuitive, where can I find a proper documentation for this conversion?&lt;/p&gt;&#xA;" OwnerUserId="11751" LastActivityDate="2016-03-20T04:24:10.547" Title="OpenRAVE ChechCollison command in C++" Tags="&lt;motion-planning&gt;&lt;algorithm&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9445" PostTypeId="1" AcceptedAnswerId="9451" CreationDate="2016-03-19T13:27:44.517" Score="2" ViewCount="1523" Body="&lt;p&gt;I've been looking for large robotic arms (with two fingers) and the arm so they are able to pick up and drop things in a space around the arm (and even spin around the 'wrist').&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not sure what the terminology is for such an arm. I've seen this, &lt;a href=&quot;http://www.robotshop.com/en/owi-535-robotic-arm-edge.html&quot; rel=&quot;nofollow&quot;&gt;OWI-535 Robotic Arm Edge&lt;/a&gt;, and it looks close. Is there something larger that can be hooked up to a Raspberry Pi instead of the remote controller?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a particular term for this in a generic context? Or is there a way to build such an arm using off the shelf parts?&lt;/p&gt;&#xA;" OwnerUserId="13164" LastEditorUserId="9176" LastEditDate="2016-03-20T07:25:21.920" LastActivityDate="2016-03-20T12:39:11.170" Title="Name of large robotic arms (two finger) with wrist, arm, hands and spinning shoulder axis" Tags="&lt;robotic-arm&gt;&lt;raspberry-pi&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9446" PostTypeId="2" ParentId="9420" CreationDate="2016-03-19T14:24:02.803" Score="0" Body="&lt;p&gt;Each control system has its own characteristics (overshoot, damping, settling time, response time, etc).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The outer loop is just another control system, so it may have a steady state (residual) error. And the I term is necessary to get rid of it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you had a third level controller (e.g lateral acceleration) you would still need another I term. And if you had a higher level outer loop (e.g. Speed), you would still need yet another I term in that loop. If you had yet another higher level (outer) loop (e.g. Position), you would again need an I term. Otherwise you run the risk of not reaching your target location.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course if the intermediate control variables are not important (e.g acceleration), you might just cancel that I term of that loop. However, any time you want to get rid of the steady state error of any of your variables (in any of the loops), you use an integral term. &lt;/p&gt;&#xA;" OwnerUserId="9570" LastActivityDate="2016-03-19T14:24:02.803" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9447" PostTypeId="1" AcceptedAnswerId="9449" CreationDate="2016-03-19T14:53:22.617" Score="1" ViewCount="103" Body="&lt;p&gt;I am part of my College team which is planning to enter a Mars Rover Challenge. In the point of view of a programmer, where should I start? I know C is the main language NASA used for their Rover and I have a basic understanding of it. Plus, how much should I look into the RTOS part for making a rover?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any books/links to this topic would be greatly appreciated. &lt;/p&gt;&#xA;" OwnerUserId="13225" LastActivityDate="2016-03-19T16:50:40.243" Title="Programming A Rover" Tags="&lt;programming-languages&gt;&lt;c&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ClosedDate="2016-03-20T12:27:49.340" ContentLicense="CC BY-SA 3.0" />
  <row Id="9448" PostTypeId="2" ParentId="9297" CreationDate="2016-03-19T15:10:56.453" Score="0" Body="&lt;p&gt;Unit quaternions are used to define rotations, and has nothing to do with position. It defines all points in $SO(3)$, the 3D rotation group, and does not suffer from singularity, as in the case of Euler angles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The quaternion ${\bf q}_1=\cos(\pi/4)+\sin(\pi/4)\bf i$ represents rotation &lt;em&gt;about&lt;/em&gt; (not over) the $\bf i$ vector, which in general represents the $x$-axis,  by an angle of $\pi/2$. This can be easily understood by the equivalent &lt;em&gt;axis-angle&lt;/em&gt; representation. Any quaternion can be written as ${\bf q}=\cos(\phi/2) + \sin(\phi/2){\bf k}$, where ${\bf k}$ is a unit vector representing the axis of rotation and $\phi$ is the angle in radians. Following the logic, the quaternion ${\bf q}_2=\cos(\pi/4)+\sin(\pi/4)\bf k$ represents rotation about the $z$-axis and not $y$-axis. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The equivalent rotation of first performing ${\bf q}_1$ and then ${\bf q}_2$ is given by ${\bf q}_3={\bf q}_2{\bf q}_1$. Note the order of the multiplication. Also, the quaternion multiplication is not &lt;em&gt;commutative&lt;/em&gt;. The quaternion multiplication is performed using the following rules:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;${\bf ij}={\bf k}$, ${\bf jk}={\bf i}$, ${\bf ki}={\bf j}$&lt;/li&gt;&#xA;&lt;li&gt;${\bf ji}={\bf -k}$, ${\bf jk}={\bf -i}$, ${\bf ki}={\bf -j}$&lt;/li&gt;&#xA;&lt;li&gt;${\bf i}^2={-1}$, ${\bf j}^2={-1}$, ${\bf k}^2={-1}$.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Following these rules, one can calculate ${\bf q}_3={\bf q}_2{\bf q}_1=\frac{1}{2}+\frac{1}{2}{\bf i}+\frac{1}{2}{\bf j}+\frac{1}{2}{\bf k}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to find ${\bf q}_1$ if ${\bf q}_2$ and ${\bf q}_3$ are given, one can write the equation as &lt;/p&gt;&#xA;&#xA;&lt;p&gt;${\bf q}_1={\bf q}^{-1}_2{\bf q}_3$. &#xA;The inverse of a quaternion ${\bf q}^{-1}_2$ is given by its &lt;em&gt;conjugate&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hence, ${\bf q}^{'}_1=(\cos(\pi/4)-\sin(\pi/4){\bf k})*(\frac{1}{2}+\frac{1}{2}{\bf i}+\frac{1}{2}{\bf j}+\frac{1}{2}{\bf k})$, $*$ represents quaternion multiplication. This gives ${\bf q}^{'}_1={\bf q}_1$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finding the equivalent &lt;em&gt;axis-angle&lt;/em&gt; representation:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The norm of the vector component gives $\sin(\phi/2)$ and the scalar component gives $\cos(\phi/2)$. Hence, the angle $\phi=2\operatorname{ArcTan}(\sin(\phi/2),\cos(\phi/2))$. Note the use of ArcTan and the double argument. This gives a unique answer, as opposed to taking ArcCos or ArcSin. The axis vector can then be found by dividing the vector component of quaternion by $\sin(\phi/2)$.&#xA; For example, the quaternion ${\bf q}_3$ can be stated as rotation about the unit vector ${\bf v}=\frac{1}{\sqrt{3}}{\bf i}+\frac{1}{\sqrt{3}}{\bf j}+\frac{1}{\sqrt{3}}{\bf k}$ by an angle of $\frac{2\pi}{3}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further references:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation&quot; rel=&quot;nofollow&quot;&gt;Quatenions and spatial rotations (Wikipedia)&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.google.co.in/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;cad=rja&amp;amp;uact=8&amp;amp;ved=0ahUKEwjvk_ryg83LAhWEuo4KHUkqBbMQFggcMAA&amp;amp;url=http%3A%2F%2Fgamma.cs.unc.edu%2Fcourses%2Fplanning-f07%2FPAPERS%2Fquaternions.pdf&amp;amp;usg=AFQjCNEAf8fUZ0Lzx9NJol65FD9Zmg3rtg&amp;amp;sig2=oXOX6cj94W9hKauq5ETviQ&quot; rel=&quot;nofollow&quot;&gt;Quaternions and Rotations in 3-Space: How it Works&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.google.co.in/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;ved=0ahUKEwjFmoiQhM3LAhWDuo4KHYxTCKQQFggfMAA&amp;amp;url=https%3A%2F%2Fwww.astro.rug.nl%2Fsoftware%2Fkapteyn%2F_downloads%2Fattitude.pdf&amp;amp;usg=AFQjCNF2E4o5zIqNJdJv1TTTOV8EedPl5w&amp;amp;sig2=Q6WkNOAxhKeCSroD-5aZSg&quot; rel=&quot;nofollow&quot;&gt;Representing Attitude: Euler Angles, Unit Quaternions, and Rotation&#xA;Vectors&#xA;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11209" LastActivityDate="2016-03-19T15:10:56.453" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9449" PostTypeId="2" ParentId="9447" CreationDate="2016-03-19T16:50:40.243" Score="2" Body="&lt;p&gt;Ravi - This is a great question.  So many great ideas stop simply because we don't know how to kick things off.  I'll try to list a few options below for each of your questions so I don't sound like I'm selling one method or product.&lt;/p&gt;&#xA;&lt;p&gt;Your question is at a very high level, so I'll try to point you to some great resources; if I went too deep, I'd have a novel for you - and there is no reason to recreate the wheel.  Your (compound) question also allows for a lot of subjective opinion - I'll try to keep my answer as objective as possible.  As a reference for when I inject my opinion, my 3-person university senior design team built an autonomous firefighting robot for RoboGames (A worldwide competition held annually near San Francisco, CA) and took 2nd place - not bragging, as we didn't win the gold, but we were in the same boat as you when we started: &amp;quot;where the heck do we even start?!?&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Where to Start&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Planning is integral - the more time you spend here, the less money and frustration you waste later on, so again I reiterate that you have a great question here.&lt;br /&gt;&#xA;There are a LOT of getting started books/resources out there - it is so helpful it can be overwhelming and may actually seem like it adds to the confusion.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.edx.org&quot; rel=&quot;nofollow noreferrer&quot;&gt;EDX.org&lt;/a&gt; - this is an amazing site that offers FREE full college courses on almost every course of knowledge from schools like MIT, Harvard, UC Berkley, etc - and its constantly adding new classes.  Search 'Robot' or 'Embedded' for a dozen classes.  Here are a couple EDX classes (&lt;a href=&quot;https://www.edx.org/course/electronic-interfaces-bridging-physical-uc-berkeleyx-ee40lx-0&quot; rel=&quot;nofollow noreferrer&quot;&gt;Class 1&lt;/a&gt; / &lt;a href=&quot;https://www.edx.org/course/embedded-systems-shape-world-utaustinx-ut-6-03x&quot; rel=&quot;nofollow noreferrer&quot;&gt;Class 2&lt;/a&gt;) that are using a $50 dev board and showing you how to program the microcontroller and interface with sensors.  (If you buy the board, you are already on your way just watching the videos and following along with the exercises).&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.robotpark.com/academy/&quot; rel=&quot;nofollow noreferrer&quot;&gt;RobotPark&lt;/a&gt; - A great site - just follow the links for 'learn' and 'design.'&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://freebookspot.es/&quot; rel=&quot;nofollow noreferrer&quot;&gt;FreeBookSpot&lt;/a&gt; - This site has a WEALTH of free ebook links on all topics.  Search 'microcontrollers' or 'robot' to be greeted with over a hundred good resources.  Look for beginner/getting started titles.  (The main options will be PIC or Arduino - more on that to come).  Almost all of these books offer step-by-step getting started demos and code samples.  (This site sometimes updates their domain, so if this link is broken, search for 'freebookspot' on your favorite search engine).&lt;/li&gt;&#xA;&lt;li&gt;Since this is a college project - I'd hit up a professor that teaches micro-controllers/robotics.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;Language&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Some feel this is one of the more important decisions, others feel it is one of the least.  If you pick up a class or book from the above section, it will most likely already define what dev board, language and programming IDE you should use for it's code samples.&lt;/p&gt;&#xA;&lt;p&gt;As far as languages to use, here are some available options:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;C - C is a great language that enables one of the widest range of micro-controllers to interface with (assembly language is the probably the widest, but has a larger learning curve and can add to development times).  It is also more respected in the engineering community than the other options I will list below.  Since you are a student, &lt;a href=&quot;http://www.microchip.com/development-tools/academic-corner&quot; rel=&quot;nofollow noreferrer&quot;&gt;MicroChip&lt;/a&gt; offers you a free MPLab dev environment with C compiler for PIC programming.&lt;/li&gt;&#xA;&lt;li&gt;Arduino - Seen as a quicker/easier option to use when getting started with a trade off that you are more limited in hardware (there are many that would argue this point - or that it doesn't matter).  Arduino boards (and shields) are relatively cheap and easy to pick up from Amazon/SparkFun/etc.  Here is a great intro on &lt;a href=&quot;https://learn.sparkfun.com/tutorials/what-is-an-arduino&quot; rel=&quot;nofollow noreferrer&quot;&gt;SparkFun's&lt;/a&gt; site for Arduino.&lt;/li&gt;&#xA;&lt;li&gt;C#.NET - Many find C# extremely easy to pick up and use, and is a great fully-functional alternate option; it is also another free option, as it uses Microsoft's free libraries/IDE. Check out [Netduino's] site for more information.&lt;/li&gt;&#xA;&lt;li&gt;Raspberry PI - a dev board with many online resources that easily allows linux to be loaded on it (Not a language, but I list it here as an easy option for using an OS on a dev board).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;RTOS&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;RTOS (Real Time OS) enables you to have a lot of power over processing data as it comes in without buffering.  I found in academia, real time OS got a lot of interest from professors, but there are very few applications where I needed it for a rover.  A good system of interrupts is usually more than adequate for prioritizing processor time for your different systems.  I hope I'm not upsetting your professor/adviser if this is on their agenda - it is definitely a fun intellectual exercise (and has its uses); however, it can add unnecessary time and limit your hardware choices by forcing the use of an OS (real time or not).&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Buying Parts&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;When you get started, sites like SparkFun and RobotShop offer great options and kits to make life easier.  Amazon may even sell some of the same dev boards cheaper.  If you need to get down to fine granularity and want the more advanced options, mouser and digikey are a great option.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Wrapping it up with a subjective opinion&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Take it or leave it - but I'll offer you the advice I'd give myself if I was starting over again.  See if you can get in a micro-controller / embedded system class at your university if offered as early as possible - this gives you access to a professor or TA that is yours for all your questions (use the heck out of them!).  Visit the EDX site and start watching the free lecture / lab videos to see if you like the hardware/software in their demos/examples - if not, look at the free book site and find platform that interests you and run with it).  Expect to run into overwhelming frustration when things that look correct don't go right.  And keep up on this robotics stack exchange forum (among others) to keep getting fresh ideas and finding better ways of doing things.&lt;/p&gt;&#xA;" OwnerUserId="13226" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2016-03-19T16:50:40.243" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9450" PostTypeId="2" ParentId="9420" CreationDate="2016-03-20T02:47:36.593" Score="2" Body="&lt;p&gt;Let's assume that the inner loop, whose input is desired angular rate and output is motor input, can track the desired angular rate. Some internet fellow has taken care of that for us. I'm going to be considering a step change in desired position:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let &lt;span class=&quot;math-container&quot;&gt;$e = x_{des} - x$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$ \dot e = -\dot x$&lt;/span&gt; this will be our outer loop controller&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$\dot x = k_p e + k_d \dot e$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;substituting in &lt;span class=&quot;math-container&quot;&gt;$\dot e$&lt;/span&gt; gives&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ -\dot e = k_p e + k_d \dot e$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;which can be rearranged as &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$\dot e = - \frac{k_p}{k_d + 1} e$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;which is a first order system. I've ignored inner loop dynamics but that should be fine, inner loop dynamics should be at least an order of magnitude faster than the outer loop dynamics. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not saying that integral control is not useful, just that it is not strictly necessary in the outer loop. It is easy to imagine a situation where the inner loop is not behaving correctly that results in a steady state error. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The px4 flight stack for multicopters approaches attitude control with pd control for angular position and pid control for body rate control. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://pixhawk.org/users/multirotor_pid_tuning&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://pixhawk.org/users/multirotor_pid_tuning&lt;/a&gt; (link broken)&lt;/p&gt;&#xA;" OwnerUserId="8842" LastEditorUserId="37" LastEditDate="2019-05-28T09:05:03.847" LastActivityDate="2019-05-28T09:05:03.847" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9451" PostTypeId="2" ParentId="9445" CreationDate="2016-03-20T03:06:02.290" Score="2" Body="&lt;p&gt;You might want to consider building, and designing (or following a standard design for) a robot arm, using &quot;servo backets&quot;&lt;sup&gt;1&lt;/sup&gt;, which are designed to be used with standard servos (i.e., the MG995 or MG996R). Here is a common example of one such robot arm:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/m6SpZ.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/m6SpZ.jpg&quot; alt=&quot;Robot arm using servo brackets&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These brackets are cheap and widely available, as a quick search for &lt;a href=&quot;https://www.google.com/search?q=servo%20brackets&quot; rel=&quot;nofollow noreferrer&quot;&gt;servo brackets&lt;/a&gt;, or &lt;a href=&quot;https://www.google.com/search?q=robot%20brackets&quot; rel=&quot;nofollow noreferrer&quot;&gt;robot brackets&lt;/a&gt; will show you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are many types/forms/shapes available, and they are all compatible with each other:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Short U bracket;&lt;/li&gt;&#xA;&lt;li&gt;Long U bracket;&lt;/li&gt;&#xA;&lt;li&gt;Oblique U bracket;&lt;/li&gt;&#xA;&lt;li&gt;I bracket;&lt;/li&gt;&#xA;&lt;li&gt;L bracket&lt;/li&gt;&#xA;&lt;li&gt;Multi Function bracket;&lt;/li&gt;&#xA;&lt;li&gt;Body Plates;&lt;/li&gt;&#xA;&lt;li&gt;Elongated, or Large, U bracket;&lt;/li&gt;&#xA;&lt;li&gt;and others.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Note that these names are not standard, merely descriptive, and may vary from supplier to supplier. Here is a Short U and a Multi Function bracket&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/zCIQE.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zCIQE.jpg&quot; alt=&quot;Short U and a Multi Function servo bracket&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These brackets are reusable, so, once you have completed your robot arm, should you become tired of it, you could dismantle it, purchase some additional brackets and make a humanoid (upright) robot,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/qWlih.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qWlih.jpg&quot; alt=&quot;Humanoid 21 DOF robot using servo brackets&quot;&gt;&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;or a hexapod, &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/dlrIK.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dlrIK.jpg&quot; alt=&quot;Hexapod using servo brackets&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;or whatever.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As the first photo (of the robot arm showed), a simple robot grabber/gripper is also available for the end of the arm:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/wuAzg.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wuAzg.jpg&quot; alt=&quot;Aluminium gripper&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These grippers, and the brackets themselves, are widely available on eBay. Note that it is invariably cheaper to buy the brackets independently, than the whole arm kits that you see, by about 50% usually. Although having said that, the 21 DOF humanoid robot kits are actually the cheapest option, if you can get one for £45, and you think that you will need all of the extra brackets at some point in the future. You will also require bearings (and cups), so make sure that any kit that you buy has those included.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The parts that you will require for the robot arm are as follows:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Multifunctional bracket x 5&lt;/li&gt;&#xA;&lt;li&gt;Long U shape bracket x 3&lt;/li&gt;&#xA;&lt;li&gt;L shape bracket x 1 (to attach the claw)&lt;/li&gt;&#xA;&lt;li&gt;Acrylic board x 1&lt;/li&gt;&#xA;&lt;li&gt;Cup bearing x 4&lt;/li&gt;&#xA;&lt;li&gt;Screw nut x September 1&lt;/li&gt;&#xA;&lt;li&gt;Alloy mechanical claw x 1&lt;/li&gt;&#xA;&lt;li&gt;U beam bracket x 2 (for the base)&lt;/li&gt;&#xA;&lt;li&gt;MG996R x 6&lt;/li&gt;&#xA;&lt;li&gt;Servo Extension cord x 3&lt;/li&gt;&#xA;&lt;li&gt;Servo horns x 6&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Here is a better view:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/O3GbR.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/O3GbR.jpg&quot; alt=&quot;Arm robot&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; There is a correct name for them, other than &lt;em&gt;servo brackets&lt;/em&gt;, but the real name escapes me.&lt;/p&gt;&#xA;" OwnerUserId="9176" LastEditorUserId="9176" LastEditDate="2016-03-20T08:19:29.127" LastActivityDate="2016-03-20T08:19:29.127" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="9452" PostTypeId="2" ParentId="9413" CreationDate="2016-03-20T04:05:09.423" Score="3" Body="&lt;p&gt;The OMPL library has some good quality implementations of several sampling-based motion planners, as listed here :&#xA;&lt;a href=&quot;http://ompl.kavrakilab.org/planners.html&quot; rel=&quot;nofollow&quot;&gt;http://ompl.kavrakilab.org/planners.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In particular, you can find several variants of RRT under the BSD license.&lt;/p&gt;&#xA;" OwnerUserId="5610" LastActivityDate="2016-03-20T04:05:09.423" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9453" PostTypeId="2" ParentId="9443" CreationDate="2016-03-20T04:24:10.547" Score="1" Body="&lt;p&gt;Have you checked out &lt;a href=&quot;http://openrave.org/docs/0.8.0/coreapihtml/orcollision_8cpp-example.html&quot; rel=&quot;nofollow&quot;&gt;this example&lt;/a&gt; ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It illustrates checking for self-collisions. If you also have a look at the &lt;a href=&quot;http://openrave.org/docs/0.8.0/coreapihtml/classOpenRAVE_1_1CollisionCheckerBase.html#acef0a7a968822b61844cb4a0e48f1afc&quot; rel=&quot;nofollow&quot;&gt;&lt;code&gt;CollisionCheckerBase&lt;/code&gt; class&lt;/a&gt; you can find &lt;code&gt;OpenRAVE::CollisionCheckerBase::CheckCollision&lt;/code&gt; to check for collisions between two bodies, among other methods. Maybe that is enough to put the pieces together.&lt;/p&gt;&#xA;" OwnerUserId="5610" LastActivityDate="2016-03-20T04:24:10.547" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9454" PostTypeId="1" AcceptedAnswerId="9497" CreationDate="2016-03-20T08:27:44.097" Score="0" ViewCount="366" Body="&lt;p&gt;I refer to these types of brackets as &lt;em&gt;servo brackets&lt;/em&gt;, or &lt;em&gt;robot brackets&lt;/em&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/mbjUy.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/mbjUy.jpg&quot; alt=&quot;Short U and Multi Function servo brackets&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that the two specific brackets, shown above, are known as a short-U (some vendors refer to them as &quot;C&quot;, en lieu of &quot;U&quot;) and a multi-function bracket, respectively, and that there are other types available, namely:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Long U bracket&lt;/li&gt;&#xA;&lt;li&gt;Oblique U bracket&lt;/li&gt;&#xA;&lt;li&gt;i bracket&lt;/li&gt;&#xA;&lt;li&gt;L bracket&lt;/li&gt;&#xA;&lt;li&gt;etc.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;However, I am sure that there is a correct name for these &lt;em&gt;types&lt;/em&gt; of bracket (or this range of bracket, if you will), rather than just &lt;em&gt;servo brackets&lt;/em&gt; - either a generic name or a brand name. I have seen the term once before, on a random web page, but the name escapes me. They are either named after their creator, or, if I recall correctly, the institution where they were developed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone have a definitive answer, preferably with a citation or web reference, or a little historical background?&lt;/p&gt;&#xA;" OwnerUserId="9176" LastEditorUserId="9176" LastEditDate="2016-03-22T05:19:55.607" LastActivityDate="2017-06-29T10:06:34.210" Title="What is the correct name for &quot;servo brackets&quot;?" Tags="&lt;mechanism&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="9455" PostTypeId="2" ParentId="9437" CreationDate="2016-03-20T09:13:26.133" Score="1" Body="&lt;p&gt;Industrial robot controllers (and most &quot;real&quot; robot arm controllers) will have a feedforward term to remove the effect of gravity. Often called gravity compensation. You noticed how necessary this is when you disabled gravity...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Check your chain of libraries for an artificial limit being set on the joint effort (torque). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might take a look at &lt;a href=&quot;http://moveit.ros.org/&quot; rel=&quot;nofollow&quot;&gt;moveit!&lt;/a&gt; to see if it helps you. Otherwise you are going to have to take the time to learn a bit of robotics (and controls) math. &lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2016-03-20T09:13:26.133" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9456" PostTypeId="1" AcceptedAnswerId="9458" CreationDate="2016-03-20T10:28:32.567" Score="9" ViewCount="3094" Body="&lt;p&gt;I am currently implementing an autonomous quadcopter which I recently got flying and which was stable, but is unable to correct itself in the presence of significant external disturbances. I assume this is because of insufficiently tuned PID gains which have to be further tweaked inflight.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Current progress:&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I ruled out a barometer since the scope of my research is only indoor flight and the barometer has a deviation of +-5 meters according to my colleague.&lt;/li&gt;&#xA;&lt;li&gt;I am currently using an ultrasonic sensor (HC-SR04) for the altitude estimation which has a resolution of 0.3cm.  However I found that the ultrasonic sensor's refresh rate of 20Hz is too slow to get a fast enough response for altitude correction.&lt;/li&gt;&#xA;&lt;li&gt;I tried to use the accelerations on the Z axis from the accelerometer to get height data by integrating the acceleration to get velocity to be used for the rate PID in a cascaded pid controller scheme. The current implementation for the altitude PID controller is a single loop pid controller using a P controller with the position input from the ultrasonic sensor.&lt;/li&gt;&#xA;&lt;li&gt;I had taken into account the negative acceleration measurements due to gravity but no matter how much I compute the offset, there is still the existence of a negative acceleration (eg. -0.0034). I computed the gravitational offset by setting the quadcopter to be still on a flat surface then collecting 20,000 samples from the accelerometer z axis to be averaged to get the &quot;offset&quot; which is stored as a constant variable. This variable is then subtracted from the accelerometer z-axis output to remove the offset and get it to &quot;zero&quot; if it is not accelerating. As said in the question, there is still the existence of a negative acceleration (eg. -0.0034). My quad then proceeds to just constantly climb in altitude. With only the ultrasonic sensor P controller, my quad oscillates by 50 cm.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How can this consistent negative acceleration reading be effectively dealt with?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Possible Solution&lt;/strong&gt;:&#xA;I am planning to do a cascading PID contoller for the altitude hold with the innerloop (PID controller) using the accelerometer and the outer loop (P controller) using the sonar sensor. My adviser said that even a single loop P controller is enough to make the quadcopter hold its altitude even with a slow sensor. Is this enough? I noticed that with only the P gain, the quadcopter would overshoot its altitude.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/rdARR.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rdARR.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Leaky Integrator: I found this article explaining how he dealt with the negative accelerations using a leaky integrator however I have a bit of trouble understanding why would it work since I think the negative error would just turn to a positive error not solving the problem. I'm not quite sure. &lt;a href=&quot;http://diydrones.com/forum/topics/multi-rotors-the-altitude-yoyo-effect-and-how-to-deal-with-it&quot; rel=&quot;noreferrer&quot;&gt;http://diydrones.com/forum/topics/multi-rotors-the-altitude-yoyo-effect-and-how-to-deal-with-it&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Single loop PD controller with the ultrasonic sensor only:&#xA;Is this feasible using feedback from a slow sensor?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Sources:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;LSM303DLHC Datasheet: &lt;a href=&quot;http://www.st.com/web/en/resource/technical/document/datasheet/DM00027543.pdf&quot; rel=&quot;noreferrer&quot;&gt;http://www.st.com/web/en/resource/technical/document/datasheet/DM00027543.pdf&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Leaky integrator: &lt;a href=&quot;http://diydrones.com/forum/topics/multi-rotors-the-altitude-yoyo-effect-and-how-to-deal-with-it&quot; rel=&quot;noreferrer&quot;&gt;http://diydrones.com/forum/topics/multi-rotors-the-altitude-yoyo-effect-and-how-to-deal-with-it&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;ArduPilot PID Loop: &lt;a href=&quot;http://copter.ardupilot.com/wp-content/uploads/sites/2/2012/12/Alt-Hold-PID-version-3.0.1.jpg&quot; rel=&quot;noreferrer&quot;&gt;http://copter.ardupilot.com/wp-content/uploads/sites/2/2012/12/Alt-Hold-PID-version-3.0.1.jpg&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="11311" LastEditorUserId="11311" LastEditDate="2016-03-24T01:17:25.930" LastActivityDate="2019-04-06T12:51:02.320" Title="How can we use the accelerometer for altitude estimation?" Tags="&lt;quadcopter&gt;&lt;control&gt;&lt;pid&gt;&lt;raspberry-pi&gt;&lt;sensor-fusion&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="9457" PostTypeId="2" ParentId="9445" CreationDate="2016-03-20T12:39:11.170" Score="1" Body="&lt;p&gt;The general name for the arm in your picture is an &lt;em&gt;Articulated Arm&lt;/em&gt; or &lt;a href=&quot;https://en.wikipedia.org/wiki/Articulated_robot&quot; rel=&quot;nofollow noreferrer&quot;&gt;Articulated Robot&lt;/a&gt; but there are many variations on the theme.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have mostly worked with &lt;a href=&quot;https://en.wikipedia.org/wiki/SCARA&quot; rel=&quot;nofollow noreferrer&quot;&gt;SCARA arms&lt;/a&gt; as fewer motors need to hold the weight of the load:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/0gOBM.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0gOBM.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See &lt;a href=&quot;https://robotics.stackexchange.com/a/286/37&quot;&gt;my answer&lt;/a&gt; to &lt;a href=&quot;https://robotics.stackexchange.com/q/284/37&quot;&gt;Which type of actuator will be suitable for a very strong robot arm&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2016-03-20T12:39:11.170" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9458" PostTypeId="2" ParentId="9456" CreationDate="2016-03-20T14:57:45.443" Score="10" Body="&lt;p&gt;The barometer carried on the pixhawk has an altitude resolution of 10 cm. If that isn't enough, you could write a kalman filter that uses the accelerometer data in the prediction step and the ultrasonic sensor and/or the barometer in the correction step. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I don't see this solving your problem. An accurate measurement of altitude at 20hz should be plenty if all you're trying to do is hold altitude. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the time constant / natural frequency and damping on your controller? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I guess I hadn't finished reading your question this morning ( it was before my coffee). The acceleration from the imu is the measurement of acceleration plus gravity. To get the inertial acceleration of the imu, subtract the gravity vector from the measurement. You'll never be able to control on integrated acceleration measurements. The measurements are corrupted by noise and you have no way to correct for this. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;--- answer to control portion of the question&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lets assume that all you are trying to do is hold an altitude and are not concerned about holding a position for now ( though this approach will work for that as well). And assuming that you can command whatever thrust you want ( within reason), then this becomes an easy problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A first pass at the system dynamics looks like&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\ddot z = \frac{u}{m} - g$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where positive $z$ is up. Lets add a hover component to our throttle that deals with gravity. So&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$ u = u_{fb} + u_{hover}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Our new dynamics look like&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\ddot z = \frac{u_{fb} + u_{hover}}{m} - g = \frac{u_{fb}}{m}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cool! Now we design a control law so we can tack a desired altitude.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Our control system is going to be a virtual spring and damper between our quad and desired altitude ( this is a pd controller).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$ \ddot z = k_p(z_{des} - z) + k_d(\dot z_{des} - \dot z)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The system should now behave like a second order system. $k_p$ and $k_d$ can be chosen to achieve the damping ratio and natural frequency you're looking for.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At this point I would like to reiterate that integrating accelerometer data is not an okay way to generate state estimates. If you really want to hack something together fast, feed the sonar measurements through a lowpass filter with an appropriate dropoff frequency. Your vehicle isn't going to be oscillating at 20hz so controlling off just the sonar data will be fine.  &lt;/p&gt;&#xA;" OwnerUserId="8842" LastEditorUserId="8842" LastEditDate="2016-03-23T01:21:36.177" LastActivityDate="2016-03-23T01:21:36.177" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9459" PostTypeId="1" CreationDate="2016-03-20T18:24:18.413" Score="1" ViewCount="88" Body="&lt;p&gt;I am a Computer Science major and I only have basic ideas on Robotics. I am planning to build a stationary cubical AI. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main purpose of this bot will be that, it will have a sensor to check if the door has been opened and immediately asks a question &quot;who has opened the door?&quot; I also want it to recognize the correct words to interact the word, I am not talking about voice recognition but word recognition so that who ever speaks the correct words(words in bot's memory) can interact with it. Depending on who opens the door(prolly my family) I want it to speak out different things. I want it to respond to simple questions like, &quot;what is the date and time?&quot; , &quot; a random qoute or a fact or a joke&quot;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this too hard to achieve? Could anyone give me a basic idea on how to approach this project? &lt;/p&gt;&#xA;" OwnerUserId="13234" LastActivityDate="2016-03-22T14:20:32.387" Title="Building a stationary robot which can talk" Tags="&lt;sensors&gt;&lt;communication&gt;&lt;first-robotics&gt;&lt;speech-processing&gt;" AnswerCount="1" CommentCount="5" ClosedDate="2016-03-22T14:20:58.967" ContentLicense="CC BY-SA 3.0" />
  <row Id="9461" PostTypeId="2" ParentId="8595" CreationDate="2016-03-20T21:05:40.947" Score="1" Body="&lt;p&gt;The question is a bit old but an answer might help. I think you are getting confused by thinking of mapping, localization and exploration as separate processes in the context of grid-based FastSLAM. In the most basic form of the algorithm you have the three steps you described:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At every timestep :&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Update the poses of your particles using your motion model&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Assign weights using your measurement model&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Use the calculated weights to resample the particle set&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;For a given particle, once you have estimated $x_{t}$ based on $x_{t-1}$ through sampling (step 1), you simply update the previous map by integrating the new measurements you have made at time $t$ &quot;trusting&quot; that they were made from pose $x_{t}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's because the algorithm gives importance to assigning precise weights (step 2) and regularly resampling your particle set (step 3) that it can confidently use the $x_{t}$ estimates made through the sampling step to update the map.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because with every timestep you are marginalizing over the previous state - like all Bayesian filtering approaches to online SLAM - you do not need to keep track of the full history of your data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are still fuzzy on how these steps work together, you can take a look at the pseudocode for gmapping from &lt;a href=&quot;http://www.cs.berkeley.edu/~pabbeel/cs287-fa11/slides/gmapping.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this presentation&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/YCUmJ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/YCUmJ.png&quot; alt=&quot;Pseudocode for gmapping&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="5610" LastEditorUserId="9176" LastEditDate="2016-03-22T06:29:14.540" LastActivityDate="2016-03-22T06:29:14.540" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9462" PostTypeId="2" ParentId="9441" CreationDate="2016-03-21T02:09:44.647" Score="1" Body="&lt;p&gt;I suspect that what you are trying won't work.  See this other question for the difference between trying to command the Create with a terminal vs. code: &lt;a href=&quot;https://robotics.stackexchange.com/questions/8731/sending-commands-from-ubuntu&quot;&gt;Sending commands from Ubuntu&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="110" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2016-03-21T02:09:44.647" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9463" PostTypeId="1" AcceptedAnswerId="9466" CreationDate="2016-03-21T06:01:31.090" Score="4" ViewCount="421" Body="&lt;p&gt;I am building a quadcopter for my school project. I am trying to program my own flight controller using PID algorithm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'll try to make my question simple using as an example below only two motors&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;                       1-----------2&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Let's say I am trying to stabilize my two motor system using gyro from the diagram below to one above&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;                       1--&#xA;                          -----&#xA;                               ----2&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Using the formula Output = (gyro - 0) * Pgain&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do I need to increase the output only on the motor 2 or would I have to do both:&#xA;increase the output on the 2nd motor while decreasing the output on the first motor? Thank you&lt;/p&gt;&#xA;" OwnerUserId="10812" LastActivityDate="2016-03-21T21:04:34.213" Title="Quadrocopter PID" Tags="&lt;quadcopter&gt;&lt;pid&gt;&lt;ardupilot&gt;&lt;logic-control&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9464" PostTypeId="2" ParentId="9463" CreationDate="2016-03-21T07:04:59.157" Score="0" Body="&lt;p&gt;There's no need of different P gains in each rotor. Just calculate the needed gyro in each of them. Good luck.&lt;/p&gt;&#xA;" OwnerUserId="10539" LastActivityDate="2016-03-21T07:04:59.157" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9466" PostTypeId="2" ParentId="9463" CreationDate="2016-03-21T21:04:34.213" Score="4" Body="&lt;p&gt;Technically, you can do it either way, but consider the following scenario: You are flying with a heavy load, and there is a wind gust. Each rotor is operating at almost 100% capacity due to the heavy load. Now the wind gust has gotten you un-level. Say you need 20% of full speed to make the correction. What happens?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Well, if you are trying to control level only by increasing motor 2, then it's already essentially at full speed, so it cannot go any faster. The craft never levels because there is no &quot;overhead&quot; available - the actuator (fan) is operating at 100% so there is nothing left over for it to do when you ask for more.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you try to control by splitting the 20% between motor 1 and motor 2, then motor 2 &lt;em&gt;still&lt;/em&gt; can't do anything, but motor 1 &lt;em&gt;can&lt;/em&gt; lower its speed by 10%. The vehicle will now level. Not as fast as if you weren't operating at near-capacity, again because the lack of overhead hinders performance, but it still responds. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is typically how the quadrotor would be programmed. Each motor contributes to 1/4 of the thrust requested for altitude control, and then the &lt;em&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Orientation_(geometry)&quot;&gt;attitude&lt;/a&gt;&lt;/em&gt; controller adds or removes from each motor &lt;em&gt;in pairs&lt;/em&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So say you had motors:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;AB&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CD&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you wanted roll, you could speed up AC and slow down BD - this would cause roll with little change in altitude because A+B+C+D is still the same. Similarly, you could speed up AB and slow down CD to pitch. Again, A+B+C+D is the same. Finally, you can yaw by speeding up AD and slowing down BC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you split the power request from all positive on one motor (side) to half positive on one and half negative on another, you gain a lot of advantages when it comes to stability and control. I would point out that it is possible to roll, pitch, and yaw, &lt;em&gt;simultaneously&lt;/em&gt;, and maintain altitude by doing this. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-03-21T21:04:34.213" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9467" PostTypeId="2" ParentId="2264" CreationDate="2016-03-21T21:45:36.267" Score="0" Body="&lt;p&gt;&lt;strong&gt;Background:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Robotics is 4 things essentially - Design (Dn), Mechanical Engineering (ME), Electrical/Electronic Engineering (EEE) and Computer Science (CS). Now depending on which university you choose the composition of these four subjects will vary drastically. I am Robotics graduate from the University of the West of England where the focus is entirely on EEE + CS. Now because there is only so much that can be covered in 3 years, the Computer Science component is made up of AI, Software Design Principles and Programming (starts with C, then MATLAB and for AI any PL of interest).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Artificial Intelligence (AI):&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When it comes to AI, the subjects covered include (not exhaustive),&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Knowledge Representation, Problems, Search Spaces and Techniques.&lt;/li&gt;&#xA;&lt;li&gt;AI Paradigms in Robotics (Behavioral, Reactive, Deliberative etc.)&lt;/li&gt;&#xA;&lt;li&gt;Advanced AI - Machine Learning, Genetic Algorithms, Optimization Techniques (Swarms, Particles etc.), Fuzzy Logic, Neural Networks, Adaptive Neuro Fuzzy Inference Systems etc.&lt;/li&gt;&#xA;&lt;li&gt;Computer Vision.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;You cannot have Robotics separate from AI. To truly say that a course is Robotics it needs to have the four elements in some composition I mentioned at the start else it is everything but Robotics.&lt;/p&gt;&#xA;" OwnerUserId="3905" LastActivityDate="2016-03-21T21:45:36.267" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9468" PostTypeId="2" ParentId="9372" CreationDate="2016-03-21T22:23:35.583" Score="2" Body="&lt;p&gt;tl;dr - SLAM is good enough for your task.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ceiling is the area where your robot will be traveling in. Few things to notice -&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Ceiling is fixed and not changing.&lt;/li&gt;&#xA;&lt;li&gt;Things on the ceiling are fixed as well at any given time unless the environment is changed.&lt;/li&gt;&#xA;&lt;li&gt;The number of things on the ceiling are also fixed.&lt;/li&gt;&#xA;&lt;li&gt;If you are going to be using a feature based map then the features are the walls and the objects on the ceiling all of them being obstacles.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In view of these three observations your SLAM should be enough, these obstacles are your features and thus there comes no question as to identifying them or classifying. Commonsense tells that any obstacle is a potential danger to the robot and thus is to avoided or maneuvered around. Depending on the size of the map and the number of obstacles the algorithms used for SLAM will have to be chosen obviously. If the task is to just navigate the ceiling around these features from point A to B then SLAM should be enough. As for detecting the fan, since you know the position of it on the ceiling, usually it is in the center, then u can feed that information into your map and let your robot maintain a certain radius away from that particular feature. This way you will avoid doing unnecessary computation in trying to keep track of frames or extra sensors to do this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Object classification and tracking can be done since the scene your robot are static, but is not necessary for your task. In addition the training will have to be done for different environments which IMO doesn't seem to be very feasible and complicates things for your task.&lt;/p&gt;&#xA;" OwnerUserId="3905" LastEditorUserId="3905" LastEditDate="2016-03-22T01:54:00.307" LastActivityDate="2016-03-22T01:54:00.307" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9471" PostTypeId="2" ParentId="9459" CreationDate="2016-03-22T05:15:38.773" Score="-1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Is this too hard to achieve?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Could anyone give me a basic idea on how to approach this project?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Get familiar with the basics and start writing code. Here are few links for you to study:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://ros.org&quot; rel=&quot;nofollow&quot;&gt;Robot operating system&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://wiki.ros.org/pocketsphinx&quot; rel=&quot;nofollow&quot;&gt;CMUSphinx in ROS&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Try to follow the examples as is first, that will give you a basic understaning, then you can extend the example to fit your needs.&lt;/p&gt;&#xA;" OwnerUserId="13243" LastActivityDate="2016-03-22T05:15:38.773" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9472" PostTypeId="1" CreationDate="2016-03-22T10:44:52.873" Score="0" ViewCount="132" Body="&lt;p&gt;Is there any theoretical principle, or postulate, that states that the controlling system has to be more complex than the system being controlled, in any formal sense of the notion &quot;complex&quot;?&lt;/p&gt;&#xA;" OwnerUserId="13246" LastEditorUserId="184" LastEditDate="2016-03-26T23:40:24.640" LastActivityDate="2016-03-26T23:40:24.640" Title="Does a controlling system need to be more complex than the system being controlled?" Tags="&lt;control&gt;&lt;theory&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9473" PostTypeId="2" ParentId="9472" CreationDate="2016-03-22T13:23:23.490" Score="0" Body="&lt;p&gt;Consider these two items:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;With pole placement controller design, you can alter a controllable, $n^{th}$ order, system's characteristic equation to get the desired behavior.  You still have $n$ eigenvectors for your system with this method.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Using state space control, for a system with $n$ states, your system matrix $A$ is of rank $n \ $x$\  n$.  Your input matrix $B$ is $n \ $x$\ p$ ($p$ inputs).  Your output matrix $C$ is $q \ $x$\ n$ ($q$ outputs).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I'm not certain which of the formal meanings of &quot;complex&quot; you're considering, but does the above refute it?&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2016-03-22T13:23:23.490" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="9475" PostTypeId="2" ParentId="9096" CreationDate="2016-03-22T22:37:18.170" Score="1" Body="&lt;p&gt;You might want to have a look at [1] where the author uses iSAM for estimating - among other quantities - the position and attitude of a rigid body spinning in microgravity.&lt;/p&gt;&#xA;&lt;p&gt;In section 4.5 p111 he mentions using a combination of {attitude error vector + reference quaternion} within the nodes of the pose graph :&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;*It is clear that any representations of attitude include nonlinear transformations and kinematics. This causes a problem for modelling and propagating probability distribution functions with Gaussian random variables, such as those typically used in Extended Kalman Filters or the iSAM system. It is well understood that the covariance matrix of a quaternion is rank deficient due to its normalization constraint. While there is active research in a number of estimation systems that do not use Gaussian random variables [83, 109, 127, 118, 119], a typical approach for dealing with this is to use three vector error parameterization and reset the quaternion (see [26, 70, 82, 134]), which is what will be used here since it fits well with the iSAM system for Gaussian random variables and has a history of good performance.&lt;/p&gt;&#xA;&lt;p&gt;This error vector and reference quaternion approach can be applied to pose graph optimization methods such as iSAM. For each of the nodes that specify the vehicle’s 6DOF trajectory, the reference quaternion approach is mirrored. This means that at the vehicle’s state nodes for each timestep, both a four parameter reference quaternion and a three parameter attitude error is stored. Each time the optimization problem is re-linearized, a reset step is performed. This reset step transfers all of the attitude error into the reference quaternion.&amp;quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;In his particular case he uses Modified Rodriguez Parameters (MRP) but you could probably choose an alternative representation if you keep the idea of combining an error vector with a quaternion within the nodes.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://ssl.mit.edu/files/website/theses/PhD-2013-TweddleBrent.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;[1] Tweddle, B. E., Computer Vision-Based Localization and Mapping of an Unknown, Uncooperative and Spinning Target for Spacecraft Proximity Operations, Ph.D. thesis, Massachusetts Institute of Technology, Department of Aeronautics and Astronautics, Cambridge, MA, 2013.&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="5610" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2016-03-22T22:37:18.170" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9476" PostTypeId="1" AcceptedAnswerId="9481" CreationDate="2016-03-23T17:49:17.070" Score="2" ViewCount="1037" Body="&lt;p&gt;I am thinking about working on alternative drone controllers. I am looking into making it more easy to use and a natural feel (debating between sensor bracelets, rings, etc.).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main issue I have is, I've been looking over all the standard RC transmitters that are used to control RC aircraft, but I am not sure what technology is inside of them, what kind of ICs they use for the actual RC signals. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want more information on how to make an RC transmitter myself, mainly the protocol that's used to send messages, and what circuitry is needed to actually transmit that, what kind of components do I need and how should I implement the software?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was aiming at doing this as a side project (hobby), but now I have the chance to use it as a uni project as well, so I'd like to give it a shot now, but I lack the proper information before getting started. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd rather not take apart my current RC controller and use an oscilloscope to decode the protocol. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any answers (short or long) and reading material is appreciated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other questions, can the protocol be implemented in software on an embedded system (Raspberry Pi, Arduino, Intel Galileo, etc.)?&#xA;I am asking this because the frequency for these are 2.4 GHz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is part of a bigger project, drone related currently, and I could use alternative methods of sending the information, through other wireless means, as the first prototype, suggestions are welcomed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Need: aircraft RC transmitter protocol info, RC transmitter components &amp;amp; schematics, anything else that might help with the transmission side&lt;/p&gt;&#xA;" OwnerUserId="13257" LastEditorUserId="9176" LastEditDate="2016-03-24T13:25:07.380" LastActivityDate="2016-03-24T13:25:07.380" Title="Remaking an RC transmitter for controlling aircraft" Tags="&lt;microcontroller&gt;&lt;radio-control&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9477" PostTypeId="2" ParentId="9161" CreationDate="2016-03-23T19:01:09.260" Score="0" Body="&lt;p&gt;There's not a singular, best approach to solve your problem.  It's a qualitative problem (what's a good/viable solution?), not so much a quantitative one (how do I minimize drive time under all conditions? minimize path drift, again, under all conditions? minimize battery drain? etc).  You could turn it into a quantative problem, but that's a huge undertaking.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;@Chuck's writeup looks great for &lt;strong&gt;PID&lt;/strong&gt; usage.  PIDs are a great solution when you can characterize your environment, ie: properly tune your PID's variables.  A PID wouldn't be my choice because I like learning algorithms more.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So here are some other approaches and a few pros/cons.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Kalman filtering&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;: not only addresses your drift, but it accounts for the error in your sensors.  You should keep in mind that regardless of how good a sensor is, it's not perfect, so not all of the drift occurs because of the terrain. Plug and play code exists.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;: very steep learning curve; matrix math.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Particle filering&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;: very simple to code and tailor to your exact surroundings. path correction is very similar to the integral portion of a PID controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;: this addresses the error in your sensors as the main problem and the drift from the environment as a secondary problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;SLAM&lt;/strong&gt; with way points&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;: one of the most heavily documented navigation methods&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;: many, many variants to choose from; requires your robot to be stateful and remember its learned states from earlier runs, otherwise this approach is overkill; you'll need to hybridize your implementation by adding known way points to your map&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think that neural nets would be an interesting way to adjust the robot's immediate actions.  That is, change the driving techniques to correct for slippage in mud or rain.  But, again, overkill.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To throw in a few more options:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;motion planning with potential functions (also called &quot;gradient descent&quot; and &quot;vector field&quot; calculation) &lt;/li&gt;&#xA;&lt;li&gt;feed-forward / feedback reinforcement learning.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://planning.cs.uiuc.edu/ch8.pdf&quot; rel=&quot;nofollow&quot;&gt;Here's a chapter on path planning.&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd be interested to know what you choose to go with.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Good luck,&#xA;Ryan&lt;/p&gt;&#xA;" OwnerUserId="9314" LastEditorUserId="9314" LastEditDate="2016-03-23T19:08:41.520" LastActivityDate="2016-03-23T19:08:41.520" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9478" PostTypeId="2" ParentId="628" CreationDate="2016-03-23T20:00:10.350" Score="1" Body="&lt;p&gt;Looking at the simpler problem that you were asked - a rectangular room, with no obstacles and clean every part &lt;strong&gt;at least&lt;/strong&gt; once.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The solution is to find a corner of the room, and finding a corner won't be a big problem. Once that has been achieved, then just follow a spiral path to the center of the room.&lt;/p&gt;&#xA;" OwnerUserId="13259" LastEditorUserId="9176" LastEditDate="2016-03-24T09:24:08.683" LastActivityDate="2016-03-24T09:24:08.683" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9479" PostTypeId="2" ParentId="9472" CreationDate="2016-03-23T21:06:08.333" Score="3" Body="&lt;p&gt;Complexity is not a word that's used in control theory but I think I know what you mean. The short answer would be no.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Complexity in systems to be controlled is usually looked at in terms of how many state variables are needed to fully describe what's happening or, more often, how many Degrees of Freedom exist.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a theorem that says whether a Linear Time Invariant (LTI) system is controllable, and if you look at it right it might fit what you are thinking, but LTI systems are a subset of the systems control theory works with.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As soon as you move from only math to the real world, a couple things become quickly apparent.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) The whole point of most of control theory is to control a system that is more complex than the controller. If not for disturbances and non-linearities, we'd just write an equation for the perfect control input rather than use techniques like PID.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) Underactuated control is a whole sub-field of control dedicated controlling systems that have not only disturbances, but also fewer controlled degrees of freedom than actuated degrees of freedom.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2016-03-23T21:06:08.333" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9480" PostTypeId="2" ParentId="9476" CreationDate="2016-03-23T21:29:18.773" Score="2" Body="&lt;p&gt;If you are looking at automatic control, consider using a radio modem instead of RC transmitter/receiver. &lt;a href=&quot;http://store.rfdesign.com.au/rfd-900p-modem/&quot; rel=&quot;nofollow&quot;&gt;One example&lt;/a&gt;. These are often used on hobby drones for relaying telemetry and control via ground station software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Pixhawk is a drone flight computer that works well for this. Designed by researchers, there are lots of inputs and a couple different open source code bases.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Remember that RF communications is not magic and the spectrum is full of noise (other users). Choose your frequencies wisely. &lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2016-03-23T21:29:18.773" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9481" PostTypeId="2" ParentId="9476" CreationDate="2016-03-24T03:01:37.337" Score="2" Body="&lt;p&gt;I am, unfortunately, not going to address your entire question but, rather, focus on the frequency used for communications. Why do you say:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;because the frequency for these are 2.4 GHz&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;By &lt;em&gt;these&lt;/em&gt;,  do you mean the Pi, Arduino or Galileo?&lt;/p&gt;&#xA;&lt;p&gt;These boards are not confined to using 2.4 GHz. The reason 2.4 GHz is so popular is that it is one of the bands that the telecommunication authorities have deemed available for consumer use&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_2.4_GHz_radio_use&quot; rel=&quot;nofollow noreferrer&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;, Bluetooth&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Bluetooth&quot; rel=&quot;nofollow noreferrer&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;, XBee (Series 1 and 2), and Wi-Fi&lt;sup&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_WLAN_channels&quot; rel=&quot;nofollow noreferrer&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; being the common examples.&lt;/p&gt;&#xA;&lt;p&gt;It is worth noting that 900 MHz devices &lt;em&gt;generally&lt;/em&gt; have a larger range than 2.4 GHz devices. So, depending on the &lt;em&gt;&lt;strong&gt;range&lt;/strong&gt;&lt;/em&gt; that you require, you could chose from a wide range of communications devices and frequencies, for example:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.digi.com/products/xbee-rf-solutions/modules/xbee-pro-868&quot; rel=&quot;nofollow noreferrer&quot;&gt;Long Range 868MHz XBee Pro&lt;/a&gt; (for Europe), or 900MHz (for US) XBees - However these seem to have reached End-Of-Life;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/tysu3.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tysu3.jpg&quot; alt=&quot;XBee Pro 868 Long Range&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.digi.com/products/xbee-rf-solutions/modules/xbee-868lp&quot; rel=&quot;nofollow noreferrer&quot;&gt;Low Power 868MHz XBees&lt;/a&gt; (for Europe), or 900MHz (for US) XBees&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/A59iT.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/A59iT.jpg&quot; alt=&quot;XBee 868 LP&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.ebay.co.uk/itm/RFbee-V1-1-RF-Module-Compatible-for-Arduino-Atmega168-ISM-868MHz-915MHz-/141301368650&quot; rel=&quot;nofollow noreferrer&quot;&gt;868/915MHz RFBees&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ouEdF.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ouEdF.jpg&quot; alt=&quot;RFBee&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Also, other frequencies used, in addition to 2.4, 900, 868 MHz, are the 315 and 433 MHz bands:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.ebay.co.uk/itm/RF-Wireless-Transmitter-Receiver-Link-Kit-Module-433Mhz-for-Remote-Control-FT-/221676762118&quot; rel=&quot;nofollow noreferrer&quot;&gt;Simple 433 MHz circuits&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/jbIwl.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/jbIwl.jpg&quot; alt=&quot;433MHz Receiver/Transmitter&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.ebay.co.uk/itm/NRF905-Arduino-Compatible-Wireless-Communication-Transmission-Module-/151855926839&quot; rel=&quot;nofollow noreferrer&quot;&gt;NRF905 Arduino Compatible Wireless Communication Transmission Module&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/QoGPT.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QoGPT.jpg&quot; alt=&quot;nRF905&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.ebay.co.uk/itm/CC1101-Wireless-RF-Transceiver-315-433-868-915MHZ-SMA-Antenna-Module-/231718316695&quot; rel=&quot;nofollow noreferrer&quot;&gt;CC1101 Wireless RF Transceiver 315/433/868/915MHZ + SMA Antenna Module&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/jobGk.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/jobGk.jpg&quot; alt=&quot;CC1101&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;If you do decide to stick with 2.4 GHz then it is well worth considering the successors to the popular &lt;a href=&quot;http://www.nordicsemi.com/eng/Products/2.4GHz-RF/nRF24L01&quot; rel=&quot;nofollow noreferrer&quot;&gt;nRF24L01&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This product is not recommended for new designs. Nordic recommends its drop-in compatible nRF24L01+ or for a System-on-Chip solution the Nordic nRF24LE1 or nRF24LU1+.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/lGhf4.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/lGhf4.jpg&quot; alt=&quot;nRF24L01&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3&gt;A note on protocols&lt;/h3&gt;&#xA;&lt;p&gt;One of the advantages of using XBees is that they already implement a pretty rugged and secure protocol, so there is less need for you to have to re-invent the wheel. However, they are relatively slow (the data rate is 250kbps half duplex), so should you require FPV then XBee will not be sufficient. See also &lt;a href=&quot;https://robotics.stackexchange.com/questions/6701/drones-and-camera-streaming&quot;&gt;Drones and camera streaming&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Protocols implemented in software (using a Pi, Arduino, or whatever), could be a little slow and it is probably better to use one that is implemented in hardware as the control of aircraft is somewhat time sensitive, that is to say, the least lag possible is required, for accurate flight control.&lt;/p&gt;&#xA;" OwnerUserId="9176" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2016-03-24T10:33:48.200" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9482" PostTypeId="1" AcceptedAnswerId="9485" CreationDate="2016-03-24T04:32:46.890" Score="3" ViewCount="38" Body="&lt;p&gt;I'm trying to attach a small piece of sheet steel (30mm x 50mm x 1mm) to a small piece of nylon (50mm x 50mm x 4mm). Does anyone know how they could be fastened using small screws (&#xA;&#xA;&lt;p&gt;Any thought appreciated.&lt;/p&gt;&#xA;" OwnerUserId="11437" LastActivityDate="2016-03-25T00:34:51.810" Title="Fastening sheet steel on nylon" Tags="&lt;mechanism&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9483" PostTypeId="2" ParentId="9482" CreationDate="2016-03-24T04:59:09.927" Score="1" Body="&lt;p&gt;Consider attaching a &lt;a href=&quot;https://www.google.com/search?site=imghp&amp;amp;tbm=isch&amp;amp;q=pemnut&quot; rel=&quot;nofollow&quot;&gt;pemnut&lt;/a&gt; or a &lt;a href=&quot;https://www.google.com/search?site=imghp&amp;amp;tbm=isch&amp;amp;q=nutsert&quot; rel=&quot;nofollow&quot;&gt;nutsert&lt;/a&gt; to the steel sheet, then using a screw from the nylon side into those threads.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might also consider drilling and threading several holes in the steel, screwing in short studs or screws, brazing them into place (or using threadlocker or epoxy), then grinding or polishing the steel surface.&#xA;&lt;a href=&quot;http://www.thefabricator.com/product/assembly/self-clinching-threaded-studs-designed-for-thin-metal-assemblies&quot; rel=&quot;nofollow&quot;&gt;Self-clinching threaded studs&lt;/a&gt; are another possibility.&lt;/p&gt;&#xA;" OwnerUserId="478" LastActivityDate="2016-03-24T04:59:09.927" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9484" PostTypeId="2" ParentId="9476" CreationDate="2016-03-24T06:04:43.120" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;what kind of ICs they use for the actual RC signals&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;h2&gt;Traditional FM RC&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The over-the-air signal to a RC aircraft is often a FM-modulated binary PPM signal in a narrow slice of the 72 MHz band.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That band is reserved only for RC aircraft.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Phillips NE5044 is a typical RC encoder IC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Often the receiver includes either a 4017 decade counter or a 4015 shift register -- that chip decodes the RC PPM signal at its CLK input into to several independent &quot;RC PWM&quot; outputs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.opencircuits.com/servo_control&quot; rel=&quot;nofollow&quot;&gt;Open Circuits: servo control&lt;/a&gt; has more details.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Spread spectrum RC&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The over-the-air signal to new RC aircraft is often a spread-spectrum modulated PCM signal spread out over a very wide 2.4 GHz ISM band.&#xA;Modern spread-spectrum and error-correcting techniques allow more-or-less error-free communication,&#xA;even though that band is shared with microwave ovens, WiFi, ZigBee, Bluetooth, and many other transmitters.&lt;/p&gt;&#xA;" OwnerUserId="187" LastActivityDate="2016-03-24T06:04:43.120" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9485" PostTypeId="2" ParentId="9482" CreationDate="2016-03-24T09:40:48.400" Score="1" Body="&lt;p&gt;I would just use machine screws. Drill clearance holes in the steel, drill narrower holes through the nylon. Then it will be easy to hand tap threads in the nylon with an appropriate tap for the screws you are using. Threads in nylon will be fine for light-duty use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Where I am metric screws are common, and I'd use M3 or maybe M4 screws with the standard pitch, these should be available in a short length.)&lt;/p&gt;&#xA;" OwnerUserId="9578" LastActivityDate="2016-03-24T09:40:48.400" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9487" PostTypeId="2" ParentId="9482" CreationDate="2016-03-25T00:34:51.810" Score="1" Body="&lt;p&gt;Instead of screws, how about simlpe magnetic force? I extracted this parts from old harddisk drives, the real forceful parts are the small ones on the top. You wouldn't believe that this magnetic force could exist close to a disk drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/wXgwM.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wXgwM.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="1251" LastActivityDate="2016-03-25T00:34:51.810" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9488" PostTypeId="1" AcceptedAnswerId="9490" CreationDate="2016-03-25T07:07:58.790" Score="0" ViewCount="118" Body="&lt;p&gt;As we all know fixed wing vehicles are designed to have inherent instability which is what enables all fixed wing vehicles to fly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However does this apply to all cases?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Do inherently unstable systems desire to be stable for all cases when a closed loop control is implemented on them?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="11311" LastActivityDate="2016-03-25T14:40:53.900" Title="Fixed Wing UAV: Do inherently unstable systems desire to be stable for all cases when a closed loop control is implemented on them?" Tags="&lt;control&gt;&lt;pid&gt;&lt;microcontroller&gt;&lt;uav&gt;&lt;stability&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9489" PostTypeId="2" ParentId="9488" CreationDate="2016-03-25T07:26:42.480" Score="4" Body="&lt;p&gt;Not all fixed wing aircraft are inherently instable. That feature greatly depends on the center pressure and gravity center designed position. Passenger aircrafts are quite stable, and fight planes are just the opposite in order to achieve fast maneouvres, among other reasons.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Read &lt;a href=&quot;https://aviation.stackexchange.com/questions/8049/are-fighter-jets-designed-to-be-so-inherently-unstable-that-a-human-cant-fly-on&quot;&gt;this aviation thread&lt;/a&gt; where this question was replied. &lt;/p&gt;&#xA;" OwnerUserId="10539" LastEditorUserId="-1" LastEditDate="2017-04-13T13:00:02.170" LastActivityDate="2016-03-25T07:26:42.480" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9490" PostTypeId="2" ParentId="9488" CreationDate="2016-03-25T14:40:53.900" Score="2" Body="&lt;p&gt;I'm going to ignore your section on aircraft and attempt to answer the (vague) question, &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Do inherently unstable systems desire to be stable for all cases when a closed loop control is implemented on them?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;First, I'll say that system response, stability, etc., are all based on mathematics, and math does not have feelings. That is, a system doesn't &quot;desire&quot; anything - it just &lt;em&gt;is&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second, there is a difference between &lt;a href=&quot;https://en.wikipedia.org/wiki/Controllability&quot; rel=&quot;nofollow&quot;&gt;controllability&lt;/a&gt; and &lt;em&gt;stabilizability&lt;/em&gt;. Just because you can't force a characteristic to be what you want doesn't necessarily mean that it's unstable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similarly, just because you have feedback, that doesn't mean that your controller is stable. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider a &lt;a href=&quot;https://en.wikipedia.org/wiki/Bang%E2%80%93bang_control&quot; rel=&quot;nofollow&quot;&gt;bang-bang controller&lt;/a&gt; for steering in a car. You get feedback of the car's position in the lane, and you either steer full left or full right depending on which side of center you are. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A bang-bang controller &lt;em&gt;is&lt;/em&gt; a closed-loop controller. The &lt;em&gt;stability&lt;/em&gt; of the car's position depends on sampling and actuation frequency with respect to the car's speed. After a particular speed the position of the car no longer converges on the center of the road.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another example would be a system where I want to control speed and altitude of a car, and I have speed and altitude measurements, but my only method of actuation is cruise control. Cruise control can force speed to go to whatever value I want, but it can't influence altitude. Therefore, I rely on the system describing altitude (briefly, $F=ma$) to be &lt;em&gt;stable&lt;/em&gt; and, as long as the car has sufficient mass and the speed is &lt;a href=&quot;https://en.wikipedia.org/wiki/Newton%27s_cannonball&quot; rel=&quot;nofollow&quot;&gt;relatively slow&lt;/a&gt;, that is true - the car's altitude won't randomly fluctuate. That is, speed is controllable and altitude is stable, so as a whole, the speed-altitude system is said to be &lt;em&gt;stabilizable&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, to summarize, a &lt;em&gt;controllable&lt;/em&gt; system is one where you are able to force every state to the value you desire. A &lt;em&gt;stabilizable&lt;/em&gt; system is one where you can force all of the &lt;em&gt;unstable&lt;/em&gt; states to do what you want, while the rest of the states are inherently stable. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Output feedback doesn't guarantee either controllability or stabilizability. They instead depend on how your actuators are able to uniquely influence the states you care about.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-03-25T14:40:53.900" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9491" PostTypeId="1" CreationDate="2016-03-25T15:10:13.590" Score="1" ViewCount="103" Body="&lt;p&gt;Is there any open interface access to the new Braava jet just to drive it around?&lt;/p&gt;&#xA;" OwnerUserId="13273" LastActivityDate="2016-03-25T15:14:23.870" Title="Can you interface to a Braava Jet?" Tags="&lt;irobot-create&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9492" PostTypeId="2" ParentId="9491" CreationDate="2016-03-25T15:14:23.870" Score="1" Body="&lt;p&gt;There is no open interface for the Braava family of products.&lt;/p&gt;&#xA;" OwnerUserId="4373" LastActivityDate="2016-03-25T15:14:23.870" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9493" PostTypeId="2" ParentId="9305" CreationDate="2016-03-25T15:20:56.763" Score="1" Body="&lt;p&gt;Red means that your battery is either truly dead, or the Create mistakenly thinks it is. To figure out which it is:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Remove the battery and put it back in after about 30 seconds.&lt;/li&gt;&#xA;&lt;li&gt;Run the motors (you can just press Clean to start a demo) until the battery is fully drained. &lt;/li&gt;&#xA;&lt;li&gt;Charge it overnight. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;At this point the battery's true state should be reflected in the LED color. If it's still red, then you will need a new battery.&lt;/p&gt;&#xA;" OwnerUserId="4373" LastActivityDate="2016-03-25T15:20:56.763" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9494" PostTypeId="2" ParentId="8976" CreationDate="2016-03-25T15:29:12.667" Score="1" Body="&lt;p&gt;Your robot is fine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you send a 7 to reset the robot, you are also exiting Open Interface Mode. If the robot was in a cleaning cycle when you send the 7, it may under certain circumstances resume cleaning after the reboot. This is a feature that allows the Roomba to recover from errors while cleaning. This can give the appearance of being &quot;stuck&quot; in cleaning mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pressing the Clean button will also start a cleaning cycle.&lt;/p&gt;&#xA;" OwnerUserId="4373" LastActivityDate="2016-03-25T15:29:12.667" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9495" PostTypeId="1" AcceptedAnswerId="9498" CreationDate="2016-03-25T18:10:26.167" Score="6" ViewCount="6290" Body="&lt;p&gt;I have read that certain iRobot products support or can be hacked to support something close to the open interace. There is even a book about hacking Roomba. What Robots have this capability?&lt;/p&gt;&#xA;" OwnerUserId="13273" LastEditorUserId="7665" LastEditDate="2016-03-30T01:07:26.680" LastActivityDate="2018-07-18T13:29:48.953" Title="What iRobot products support the open interface besides the iRobot Create?" Tags="&lt;irobot-create&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9497" PostTypeId="2" ParentId="9454" CreationDate="2016-03-26T09:33:08.510" Score="1" Body="&lt;p&gt;After some extensive searching, I &lt;em&gt;believe&lt;/em&gt; that they are called &lt;a href=&quot;http://www.lynxmotion.com/c-73-servo-erector-set.aspx&quot; rel=&quot;nofollow&quot;&gt;Servo Erector Set (SES) brackets&lt;/a&gt;, from &lt;a href=&quot;http://www.lynxmotion.com/&quot; rel=&quot;nofollow&quot;&gt;Lynxmotion&lt;/a&gt;, although the article itself also uses the term &lt;em&gt;servo brackets&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;About the Servo Erector Set&lt;/strong&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Think of the Lynxmotion series of servo&#xA;  brackets as an Erector Set for servos. These components are extremely&#xA;  versatile, making virtually any mechanical arrangement possible. It's&#xA;  now possible to build custom robots to your specifications! The&#xA;  brackets are available in black anodized aluminum. The ball bearings&#xA;  provide for precise low friction movement. The tubing, hubs and hub&#xA;  connectors are precision fit and really expand what is possible to&#xA;  build. They are made in the USA from high quality aluminum alloy. We&#xA;  also have a series of laser cut Lexan chassis, torso, and electronics&#xA;  carriers that truly complete the set. &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;If you want to build a variety of different robots using the SES&#xA;  system, consider the complete SES V1.1 Construction Kit which contains&#xA;  everything you need to get started.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The article also refers to them as &lt;em&gt;Hitec servo brackets&lt;/em&gt;. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;Hitec Servo Brackets&lt;/strong&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Our selection of standard brackets can use most standard size Hitec&#xA;  analog or digital servos. The HS-3xx, 4xx, 5xx, 6xx, 54xx, 56xx, and&#xA;  59xx servos are verified to fit. Note that servos from other&#xA;  manufacturers are not guaranteed (nor likely) to work...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So, the term &lt;em&gt;SES&lt;/em&gt; may only be referring to &lt;em&gt;the kit&lt;/em&gt; of various Hitec servo brackets.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first place that I saw the term SES, was on the page, &lt;a href=&quot;http://forums.trossenrobotics.com/showthread.php?4886-WALKER8-An-Octopod-Project&quot; rel=&quot;nofollow&quot;&gt;WALKER8 – An Octopod Project&lt;/a&gt;, where it is mentioned in the comment:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I decided to go with the SES route&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;This may not be the most definitive answer, but it is the best that I could come up with. Maybe the answer is simply &lt;strong&gt;[Hitec] servo brackets&lt;/strong&gt;, as the brackets were first designed to fit Hitec servos, and their derivatives. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Whether or not the brackets where designed by Hitec themselves, or some other third party is not clear.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If someone else knows, or has an idea of, a better answer, please post it.&lt;/p&gt;&#xA;" OwnerUserId="9176" LastActivityDate="2016-03-26T09:33:08.510" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9498" PostTypeId="2" ParentId="9495" CreationDate="2016-03-26T13:56:14.423" Score="5" Body="&lt;p&gt;Any iRobot product with a 7-pin mini-DIN connector has some subset of the Open Interface. Roomba 500 through 800 series should correspond to the set in &lt;a href=&quot;http://www.irobotweb.com/~/media/MainSite/PDFs/About/STEM/Create/iRobot_Roomba_600_Open_Interface_Spec.pdf?la=en&quot; rel=&quot;nofollow noreferrer&quot;&gt;the Create 2 manual&lt;/a&gt; while the 400 or Discovery series correspond to &lt;a href=&quot;http://www.irobot.com/filelibrary/pdfs/hrd/create/Create%20Open%20Interface_v2.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;the original iRobot Create&lt;/a&gt;. However, based on the date of manufacture, it may be necessary to apply a software update to the robot in order to enable this functionality.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please note that I am an iRobot employee, but the postings on this site are my own and don't necessarily represent iRobot's positions, strategies, or opinions.&lt;/p&gt;&#xA;" OwnerUserId="7665" LastEditorUserId="7665" LastEditDate="2018-07-18T13:29:48.953" LastActivityDate="2018-07-18T13:29:48.953" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9499" PostTypeId="2" ParentId="9495" CreationDate="2016-03-26T19:28:52.630" Score="1" Body="&lt;p&gt;The Roomba Open Interface has been standard on all models since 2005.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://hackingroomba.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Hacking Roomba&lt;/a&gt; uses the third generation Roomba Red for many of it's example hacks. The original Create and those early Open Interface capable Roomba's, have their serial ports above the power socket, beneath a removable cover:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://hackingroomba.com/projects/irobot-create-robot-review/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/I5yKV.jpg&quot; alt=&quot;iRobot Roomba Red and iRobot Create side by side&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More recent Roombas, from 500 series onwards, have the serial port in the same position as the Create 2, but hidden under the top cover:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://wewerepromisedrobots.blogspot.co.uk/2012/02/roomba-serial-port-ahoy.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/eyr0k.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.wired.com/2015/09/irobot-roomba-980/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wired suggested&lt;/a&gt; that the newest Wi-Fi equipped Roomba 980, as the first which is controllable via an official smartphone (&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.irobot.home&quot; rel=&quot;nofollow noreferrer&quot;&gt;Android&lt;/a&gt; &amp;amp; &lt;a href=&quot;https://itunes.apple.com/us/app/irobot-home/id1012014442?ls=1&amp;amp;mt=8&quot; rel=&quot;nofollow noreferrer&quot;&gt;iPhone&lt;/a&gt;), may not be hacker friendly - implying that it doesn't have an Open Interface, but OI &lt;a href=&quot;http://www.robotreviews.com/chat/viewtopic.php?f=1&amp;amp;t=18817&amp;amp;start=20#p133040&quot; rel=&quot;nofollow noreferrer&quot;&gt;transcripts have been posted&lt;/a&gt;, suggesting that it is still possible.&lt;/p&gt;&#xA;" OwnerUserId="37" LastActivityDate="2016-03-26T19:28:52.630" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9500" PostTypeId="1" CreationDate="2016-03-26T21:35:55.450" Score="0" ViewCount="1186" Body="&lt;p&gt;I installed Multiple versions of &lt;code&gt;APM&lt;/code&gt; (2.0.7, 2.0.17, 2.0.18) on Windows 7, Ubuntu 14.04, and OSX 10.11. I could connect to my &lt;code&gt;ArduPilot&lt;/code&gt; but could not install firmware. Here's the error I would get:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Started downloading http://firmware.diydrones.com/Copter/stable/apm2-hexa/ArduCopter.hex&#xA;Finished downloading /var/folders/r4/s_j4c02s3wvcx6wy41__rnwh0000gp/T/APM Planner.uq1800&#xA;Opening firmware file...&#xA;Unable to open file: /var/folders/r4/s_j4c02s3wvcx6wy41__rnwh0000gp/T/APM Planner.uq1800&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="9941" LastActivityDate="2016-03-28T19:23:20.237" Title="APM Mission Planner 2.0.18 Install Firmware Failure Mac OS X 10.11" Tags="&lt;ardupilot&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9501" PostTypeId="2" ParentId="9500" CreationDate="2016-03-26T21:35:55.450" Score="1" Body="&lt;p&gt;For hours I've been dealing with this and &lt;em&gt;no one&lt;/em&gt; has documented the same issue online. I tried the following with no success:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Changed permissions of parent folder &lt;code&gt;/var/folders/r4/s_j4c02s3wvcx6wy41__rnwh0000gp/T&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Ran APM as sudo&lt;/li&gt;&#xA;&lt;li&gt;Multiple versions of APM&lt;/li&gt;&#xA;&lt;li&gt;Multiple operating systems&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I had to get a bit creative to come up with a workable solution:&lt;/p&gt;&#xA;&lt;h1&gt;Solution&lt;/h1&gt;&#xA;&lt;p&gt;When APM tried to download the firmware, you could see the temp file until you clicked &amp;quot;OK&amp;quot; in regard to the firmware failure. What I did was copied that file and found the following html in there:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;!DOCTYPE HTML PUBLIC &amp;quot;-//IETF//DTD HTML 2.0//EN&amp;quot;&amp;gt;&#xA;&amp;lt;html&amp;gt;&amp;lt;head&amp;gt;&#xA;&amp;lt;title&amp;gt;302 Found&amp;lt;/title&amp;gt;&#xA;&amp;lt;/head&amp;gt;&amp;lt;body&amp;gt;&#xA;&amp;lt;h1&amp;gt;Found&amp;lt;/h1&amp;gt;&#xA;&amp;lt;p&amp;gt;The document has moved &amp;lt;a href=&amp;quot;http://firmware.ardupilot.org/Copter/stable/apm2-hexa/ArduCopter.hex&amp;quot;&amp;gt;here&amp;lt;/a&amp;gt;.&amp;lt;/p&amp;gt;&#xA;&amp;lt;hr&amp;gt;&#xA;&amp;lt;address&amp;gt;Apache/2.4.7 (Ubuntu) Server at firmware.diydrones.com Port 80&amp;lt;/address&amp;gt;&#xA;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Obviously this is a server issue so here's what I did to get around it:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Downloaded the file mentioned in the html (&lt;code&gt;http://firmware.ardupilot.org/Copter/stable/apm2-hexa/ArduCopter.hex&lt;/code&gt;) to my desktop&lt;/li&gt;&#xA;&lt;li&gt;Changed the file format from &lt;code&gt;txt&lt;/code&gt; to &lt;code&gt;hex&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Set APM Planner to advanced mode via &lt;code&gt;File&lt;/code&gt; &amp;gt; &lt;code&gt;Advanced Mode&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;In &lt;code&gt;Initial Setup&lt;/code&gt; &amp;gt; &lt;code&gt;Install Firmware Menu&lt;/code&gt; I selected &lt;code&gt;Firmware Options&lt;/code&gt; &amp;gt; &lt;code&gt;Custom&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Chose the hex file I had downloaded&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1&gt;Violá&lt;/h1&gt;&#xA;" OwnerUserId="9941" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2016-03-28T19:23:20.237" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9502" PostTypeId="1" CreationDate="2016-03-26T23:50:41.990" Score="5" ViewCount="7885" Body="&lt;p&gt;From a gyroscope I'm getting angular velocities [dRoll, dPitch and dYaw] as rad/s, sampled at intervals dt = 10ms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How do I calculate the short term global orientation (drift ignored) of the gyroscope?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pseudo code would be helpful.&lt;/p&gt;&#xA;" OwnerUserId="13282" LastEditorUserId="9176" LastEditDate="2016-03-27T12:22:16.653" LastActivityDate="2017-12-08T19:43:16.237" Title="Use data from gyroscope to calculate orientation" Tags="&lt;gyroscope&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="9503" PostTypeId="2" ParentId="9454" CreationDate="2016-03-26T23:58:38.883" Score="1" Body="&lt;p&gt;There is no correct name for sheetmetal brackets designed for connecting hobby servos. Using sheetmetal, bent with holes, has been used forever for hobby projects (and industrial ones). It's cheap and easy to have the tools to make custom ones in your garage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first usage of brackets like your pic with servos that I saw was &lt;a href=&quot;https://en.wikipedia.org/wiki/Robo_One&quot; rel=&quot;nofollow noreferrer&quot;&gt;Robo One&lt;/a&gt;, but I don't follow the hobby/toy market closely. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For hobby servo robotics there was &lt;a href=&quot;https://web.archive.org/web/19961109203419/http://lynxmotion.com/images.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Lynxmotion in 1996&lt;/a&gt; but his techniques were in common use for hobby robotics at the time in custom projects.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For punched and bent sheet metal, &lt;a href=&quot;http://www.girdersandgears.com/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;erector sets&lt;/a&gt; come to mind, started being sold in 1913 and apparently had an &lt;a href=&quot;http://www.girdersandgears.com/erector-motor.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;electric motor&lt;/a&gt; you could build. &lt;a href=&quot;http://www.girdersandgears.com/meccano.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Meccano&lt;/a&gt; Started in 1901.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding the U shape, mechanical engineers call this a clevis when used as a structural or connecting element.&lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="184" LastEditDate="2017-06-29T10:06:34.210" LastActivityDate="2017-06-29T10:06:34.210" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9505" PostTypeId="1" CreationDate="2016-03-27T06:44:02.600" Score="2" ViewCount="83" Body="&lt;p&gt;I was reading an article on Euler-Lagrange systems. It is stated there that since M(q) and C(q,q') depend on q, it is not autonomous. As a result, we cannot use LaSalle's theorem. I have uploaded that page of the article and highlighted the sentence. &lt;a href=&quot;https://www.dropbox.com/s/zdkdvqky1uq09tr/ren.pdf?dl=0&quot; rel=&quot;nofollow&quot;&gt;(ren.pdf)&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, I read Spong's book on robotics, and he had used LaSalle's theorem. I am confused. &lt;a href=&quot;https://www.dropbox.com/s/4cw1rr4qldglqwu/spong.pdf?dl=0&quot; rel=&quot;nofollow&quot;&gt;(spong.pdf)&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did some research, and found out that non-autonomous means it should not explicitly depend on the independent variable. Isn't independent variable time in these systems? So, shouldn't they be considered autonomous?&lt;/p&gt;&#xA;" OwnerUserId="13237" LastActivityDate="2016-03-28T15:22:32.420" Title="Euler-Lagrange systems, autonomous or nonautonomous?" Tags="&lt;control&gt;&lt;dynamics&gt;&lt;robotc&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9506" PostTypeId="2" ParentId="9502" CreationDate="2016-03-27T07:29:14.320" Score="0" Body="&lt;p&gt;To get the orientation from each of the axes, you need to integrate the angular velocities with respect to time. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Below is the code implementation of the said integration:&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;//What we have&#xA;dPitch = 0; angular rate from Pitch&#xA;dRoll = 0; angular rate from Roll&#xA;dYaw = 0; angular rate from Yaw&#xA;&#xA;//What we want&#xA;aPitch = 0; angle from Pitch&#xA;aRoll = 0; angle from Roll&#xA;aYaw = 0; angle from Yaw&#xA;&#xA;//Calculating the angles:&#xA;aPitch += dPitch*dt; // or aPitch = aPitch + dPitch*dt;&#xA;aRoll += dRoll*dt; // or aRoll = aRoll + dRoll*dt;&#xA;aYaw += dYaw*dt; // or aYaw = aYaw + dYaw*dt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="11311" LastActivityDate="2016-03-27T07:29:14.320" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9507" PostTypeId="2" ParentId="8461" CreationDate="2016-03-27T14:07:36.953" Score="1" Body="&lt;p&gt;First you should to select your muscle length. It is necessary to have a constant resistance of the resulting muscles. Wind the copper wire over nylon, and then make a coiled thread. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can use a standard 12V Power supply for the LED (at least 5 A). Use MOSFET keys and an Arduino to apply current to the muscle. The time taken to heat the muscle depends on the source nylon thread diameter and the diameter of the wire and the ambient temperature. The heating time is controlled by the Arduino. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may see my experiments with these kind of muscles, here: &lt;a href=&quot;https://www.youtube.com/playlist?list=PL3I3kUrFrH5ihxd1jLrmN79FqUX9FJZLq&quot; rel=&quot;nofollow&quot;&gt;Artificial Muscles&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13288" LastEditorUserId="9176" LastEditDate="2016-03-27T23:36:57.787" LastActivityDate="2016-03-27T23:36:57.787" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9508" PostTypeId="1" CreationDate="2016-03-27T17:11:14.787" Score="0" ViewCount="135" Body="&lt;p&gt;Let's say I have an industrial sized 6DOF robotic arm. I want to control each one of the six joints despite the non-linearity produced by the chain structure, the gravity and the weight of the loads it could lift. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't focus here on the speed nor the power limitations, I just want the arm to respond well. Moreover, I would like to avoid the use of any prior knowledge such as inertial computation. Then I had these considerations, considering that I can play with both the actuator design, and the loop feedback control system:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Limit the maximum speed of each actuator to smooth their error variation.&lt;/li&gt;&#xA;&lt;li&gt;Increase the damping of the actuators to avoid high frequency instability.     &lt;/li&gt;&#xA;&lt;li&gt;Find a good control system, such as a PID, to make sure the targets are reached without oscillations. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Do you have any other considerations in mind? Do you know what process(es) industrial designers follow?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: As it is said in the comments, my question concern the design of an adaptive controller for a robot arm, which is, how to design a joint control system (actuator + loop control) that don't need inertia and masses to be computed (the controller could adapt to its own structure, or to the loads it lifts). &#xA;I'll be very much interested if you know some paper about adaptive control in the field of robotic arms.    &lt;/p&gt;&#xA;" OwnerUserId="13218" LastEditorUserId="13218" LastEditDate="2016-03-30T16:24:13.240" LastActivityDate="2016-03-30T16:24:13.240" Title="Considerations to design actuators, and loop feedback systems, for a robotic arm" Tags="&lt;control&gt;&lt;pid&gt;&lt;robotic-arm&gt;&lt;design&gt;&lt;actuator&gt;" AnswerCount="1" CommentCount="6" ClosedDate="2016-03-30T10:39:49.610" ContentLicense="CC BY-SA 3.0" />
  <row Id="9509" PostTypeId="2" ParentId="9508" CreationDate="2016-03-27T19:50:48.450" Score="1" Body="&lt;p&gt;As I commented on your question, I'm not really sure what you're looking for or what your list is for. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'll try to answer your last question, &quot;What is the process the engineer takes?&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In short, the engineer uses everything you said you wanted to ignore. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Specifications&lt;/em&gt; are the heart of engineering. I, and I think most engineers too, detest &quot;feelings&quot; kind of terms, by which I mean qualitative statements. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;I want an actuator that works good&quot; is the kind of statement I mean. What is good? What does that mean &lt;em&gt;to you&lt;/em&gt;? Is good low cost, or high reliability, or high power, or high speed, or something else? What is &quot;high&quot; or &quot;low&quot; to you? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general, design is based on worst case scenarios. &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;What is the maximum payload mass (and shape!) you want to move?&lt;/li&gt;&#xA;&lt;li&gt;What is the top speed you want it to move?&lt;/li&gt;&#xA;&lt;li&gt;How fast do you want it to get from zero speed to top speed? &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;These three questions go a long way to &quot;ballparking&quot; the actuator(s). Next, you need to pick a design for the arm. Is it SCARA, Cartesian, or something else? This is important because each actuator has to be capable of moving the load &lt;em&gt;and all the actuators after itself&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, for each degree of freedom, you have to evaluate the worst case load on the actuator to spec the actuator. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you have all the actuators specified, which generally takes several iterations, because heavier actuators require even bigger ones &quot;upstream&quot;, &lt;em&gt;then&lt;/em&gt; you can begin to design the controller. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Control design has to happen last because you need to have some idea of what kind of &lt;em&gt;output&lt;/em&gt; you're going to get for a particular &lt;em&gt;input&lt;/em&gt;. You can't define that without a model of the plant (actuator).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could, of course, &quot;turn off&quot; gravity, mass, moment of inertia, etc. in your simulation, use ideal motors and tune speed regulators on them to perfect responses, but &lt;em&gt;you're just wasting your time&lt;/em&gt;. If that's all you want then why not just put a low pass filter on your position request? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, tl;dr - if you're going to design, you need specifications. If you don't care about specifications, don't waste your time designing, just cheat an answer. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-03-27T19:50:48.450" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="9510" PostTypeId="2" ParentId="9502" CreationDate="2016-03-27T20:13:40.130" Score="6" Body="&lt;p&gt;gyroscopes do not measure [dRoll ,...] they measure body rates. These are not the same things. There is a transformation matrix ( that I do not have on hand) that relates body rates to euler rates. The euler rates are then integrated to get the short term change in orientation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;-- relation --&lt;/p&gt;&#xA;&#xA;&lt;p&gt;this is the relation between the measured body rates from the imu and the euler rates.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;\begin{equation}&#xA;\label{eq:euler_rates}&#xA;\begin{bmatrix}&#xA;\dot \phi \\ &#xA;\dot \theta \\ &#xA;\dot \psi&#xA;\end{bmatrix} &#xA;=&#xA;\begin{bmatrix}&#xA;1 &amp;amp; \sin\phi \tan\theta &amp;amp; \cos\phi \tan\theta \\ &#xA;0 &amp;amp; \cos\phi &amp;amp; -\sin\phi \\ &#xA;0 &amp;amp; \frac{\sin\phi}{\cos\theta} &amp;amp; \frac{\cos\phi}{\cos\theta}&#xA;\end{bmatrix} &#xA;\begin{bmatrix}&#xA;p \\ &#xA;q \\ &#xA;r&#xA;\end{bmatrix} &#xA;\end{equation}&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $\left[ p, q, r \right] ^T$ are the body rates measured from the imu. &lt;/p&gt;&#xA;" OwnerUserId="8842" LastEditorUserId="8842" LastEditDate="2016-03-29T16:58:58.120" LastActivityDate="2016-03-29T16:58:58.120" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="9512" PostTypeId="1" AcceptedAnswerId="9514" CreationDate="2016-03-28T07:15:19.500" Score="0" ViewCount="74" Body="&lt;p&gt;My project requires a DC motor for mobility, very similar to an RC car. If precision isn't critical, can I use a solid state relay instead of a motor driver? If the vehicle moves an extra inch on the ground, I don't really care.&lt;/p&gt;&#xA;" OwnerUserId="13293" LastEditorUserId="9176" LastEditDate="2016-03-28T19:10:53.437" LastActivityDate="2016-03-28T19:10:53.437" Title="DC Motor Control" Tags="&lt;motor&gt;&lt;driver&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9513" PostTypeId="2" ParentId="9512" CreationDate="2016-03-28T08:25:11.433" Score="1" Body="&lt;p&gt;If you want to use a relay in your airboat, use &lt;a href=&quot;https://www.google.co.nz/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;sqi=2&amp;amp;ved=0ahUKEwjRjr3c-eLLAhVENqYKHRiEAS0QFggaMAA&amp;amp;url=https%3A%2F%2Fcdn.sparkfun.com%2Fassets%2Fresources%2F4%2F4%2FDC_motor_circuits_slides.pdf&amp;amp;usg=AFQjCNF05C6ln1QlehyR6HgeM7bF81Ciqw&amp;amp;sig2=213_ISOIm8SPTeV127GPyQ&amp;amp;bvm=bv.117868183,d.dGY&amp;amp;cad=rja&quot; rel=&quot;nofollow&quot;&gt;flyback diodes&lt;/a&gt;, otherwise you might get stuck with the gators. &lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2016-03-28T08:25:11.433" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9514" PostTypeId="2" ParentId="9512" CreationDate="2016-03-28T12:35:59.080" Score="1" Body="&lt;p&gt;For a DC motor, you can use a relay instead of a motor controller if you aren't too concerned about precision.  Be careful to account for the inductive surge in current, and ensure your relay can handle the peak current.  You'll also see a reverse current if you stop the motor abruptly, so flyback diodes are a good idea as @hauptmech indicates.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2016-03-28T12:35:59.080" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9517" PostTypeId="2" ParentId="9505" CreationDate="2016-03-28T15:22:32.420" Score="1" Body="&lt;p&gt;If you structure the system dynamics equations to not depend on the independent variable, an Euler-Lagrange system is autonomous.  If, however, you recast the equations to depend on the state variables (and their derivatives), as Ren did, it becomes non-autonomous.  That clever manipulation allowed him to prove asymptotic stability for the consensus algorithm $\tau_i$.  It might be possible to prove without taking that mathematical direction, but I cannot think of a better way to do it. &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2016-03-28T15:22:32.420" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9518" PostTypeId="1" AcceptedAnswerId="9519" CreationDate="2016-03-28T17:07:37.670" Score="1" ViewCount="443" Body="&lt;p&gt;There are tons of cameras in devices around us these days. There are used photo cameras, smartphones, tablets at my home gathering dust.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wonder, what the easiest way could be to get a camera module from some device, connect it to my robot project with a soldering iron and make it work from the software point of view. I am planning to use something like Arduino, an STM32 platform, or probably Intel Edison.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;May be some camera modules are easier to solder and program for a custom  project? Or shouldn't I look this way and better find a camera module that is specially designed for custom projects?&lt;/p&gt;&#xA;" OwnerUserId="10234" LastActivityDate="2016-03-29T19:21:19.557" Title="Choose and connect a camera to a robot" Tags="&lt;cameras&gt;" AnswerCount="2" CommentCount="3" ClosedDate="2016-03-30T10:36:31.803" ContentLicense="CC BY-SA 3.0" />
  <row Id="9519" PostTypeId="2" ParentId="9518" CreationDate="2016-03-28T17:29:54.990" Score="1" Body="&lt;p&gt;Sorry to pour water on your fire... while it is certainly possible, whether it is worth the effort is debatable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While different tablets/smartphones/cameras will employ different optical devices, they will be more or less the same.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This question has been asked before on SE Arduino, &lt;a href=&quot;https://arduino.stackexchange.com/questions/19019/re-use-smartphone-tablets-parts-like-a-camera&quot;&gt;Re-use smartphone/tablets parts like a camera&lt;/a&gt;. &lt;a href=&quot;https://arduino.stackexchange.com/questions/19019/re-use-smartphone-tablets-parts-like-a-camera#answer-19026&quot;&gt;jwpat7's answer&lt;/a&gt; goes into specifics for a particular Samsung tablet. You don't specify which tablet/phones you have, so I can not provide any further detailed information, but open up the device and see if it has &lt;code&gt;HRS&lt;/code&gt; on the connector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that &lt;a href=&quot;https://arduino.stackexchange.com/questions/19019/re-use-smartphone-tablets-parts-like-a-camera#answer-19107&quot;&gt;cortices' answer&lt;/a&gt; advises against doing so, due to propriety signals, and the difficulty in decoding them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A link to the Arduino forum is also provided, &lt;a href=&quot;http://forum.arduino.cc/index.php?topic=269272.0&quot; rel=&quot;nofollow noreferrer&quot;&gt;How to reuse quality camera from old / broken phone&lt;/a&gt;, which, more or less, also recommends against the idea due to the effort required in &lt;a href=&quot;https://reverseengineering.stackexchange.com/search?q=camera&quot;&gt;reverse engineering&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It would probably be far simpler to use a Raspberry Pi, which has an actual camera interface (CSI port) for use with the &lt;a href=&quot;https://www.raspberrypi.org/help/camera-module-setup/&quot; rel=&quot;nofollow noreferrer&quot;&gt;camera module&lt;/a&gt;. You can then use the Python package, &lt;a href=&quot;https://picamera.readthedocs.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;picamera&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="9176" LastEditorUserId="-1" LastEditDate="2017-04-13T12:50:09.580" LastActivityDate="2016-03-28T17:41:46.997" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9521" PostTypeId="1" CreationDate="2016-03-29T05:12:14.833" Score="3" ViewCount="653" Body="&lt;p&gt;What is the difference between g-value and rhs-value of Lifelong Planning A* algorithm? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to this link, &lt;a href=&quot;http://idm-lab.org/bib/abstracts/papers/aaai02b.pdf&quot; rel=&quot;nofollow&quot;&gt;D* Lite&lt;/a&gt;, g(s) directly correspond to the&#xA;g-values of an A* search, i.e. &lt;strong&gt;g(s) = g(s') + c(s',s)&lt;/strong&gt;, and rhs(s) is given as &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;rhs(s) = \begin{cases}0 &amp;amp; s = s_{start}  \\ \min_{s'\in Pred(s)}(g(s') + c(s', s)) &amp;amp; \text{otherwise} \end{cases}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where, Pred(s) denotes the set of predecessors of node 's'. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus, unless node 's' has more than one predecessor, its g-value and rhs-value will remain same. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, my question is, in which case will the rhs-value and g-value of a node be different?&lt;/p&gt;&#xA;" OwnerUserId="11751" LastEditorUserId="350" LastEditDate="2016-03-29T18:50:47.733" LastActivityDate="2016-04-01T11:50:25.560" Title="Difference between g-value and rhs-value in Lifelong Planning A*" Tags="&lt;mobile-robot&gt;&lt;robotic-arm&gt;&lt;wheeled-robot&gt;&lt;motion-planning&gt;&lt;algorithm&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9523" PostTypeId="1" CreationDate="2016-03-29T10:28:12.743" Score="0" ViewCount="106" Body="&lt;p&gt;I am new here and i am new to neural network also. :P&lt;br&gt;&#xA;I have gone through the concepts of Neural Networks but i want to implement it in my project including microcontroller &lt;strong&gt;MSP430G2553&lt;/strong&gt; on &lt;em&gt;LaunchPad&lt;/em&gt; Series.&lt;br&gt;&#xA;I am using some sensors and i want to use some neural network code to manipulate the data from sensors to get some threshold.&lt;br&gt;&#xA;I went through this &lt;a href=&quot;https://robotics.stackexchange.com/questions/568/is-it-possible-to-run-a-neural-network-on-a-microcontroller&quot;&gt;post&lt;/a&gt; and tried to implement the codes from the link given but it is giving some error on less ram, i guess it is due to my mcu.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, i wanted some help regarding the neural network code or library for &lt;em&gt;Energia&lt;/em&gt; which i should use.&#xA;Thanks in Advance.&lt;/p&gt;&#xA;" OwnerUserId="13303" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2016-03-29T12:52:02.970" Title="Neural Nework code or library for MSP430G2553 microcontroller" Tags="&lt;microcontroller&gt;&lt;electronics&gt;&lt;machine-learning&gt;&lt;embedded-systems&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2016-03-30T10:34:07.163" ContentLicense="CC BY-SA 3.0" />
  <row Id="9524" PostTypeId="2" ParentId="9523" CreationDate="2016-03-29T12:52:02.970" Score="2" Body="&lt;p&gt;&lt;a href=&quot;http://robotics.hobbizine.com/arduinoann.html&quot; rel=&quot;nofollow&quot;&gt;One page linked&lt;/a&gt; says the algorithm is fine for the ATmega328's 2KB of SRAM, &lt;a href=&quot;http://diydrones.com/group/arducopter-evolution-team/forum/topics/neuroduino-a-neural-network-library-for-arduino&quot; rel=&quot;nofollow&quot;&gt;another&lt;/a&gt; is for the ATmega2560's 8KB of SRAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your &lt;a href=&quot;http://www.ti.com/product/MSP430G2553&quot; rel=&quot;nofollow&quot;&gt;MSP430G2553&lt;/a&gt; has 0.5KB of RAM, so I think that's the primary reason you can't get it to run on that controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are other microcontrollers in the MSP430 line that have more memory - if you &lt;a href=&quot;http://www.ti.com/ww/en/launchpad/launchpads-msp.html#tabs&quot; rel=&quot;nofollow&quot;&gt;look at the other LaunchPads&lt;/a&gt; you can see that you've got the one with the smallest RAM available in a LaunchPad - others have up to &lt;a href=&quot;http://www.ti.com/ww/en/launchpad/launchpads-msp430-msp-exp432p401r.html#tabs&quot; rel=&quot;nofollow&quot;&gt;64KB&lt;/a&gt;. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-03-29T12:52:02.970" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9525" PostTypeId="2" ParentId="9521" CreationDate="2016-03-29T19:12:37.713" Score="1" Body="&lt;p&gt;From the paper, $g(s)$ is only an &lt;em&gt;estimate&lt;/em&gt; of the distance travelled (vs a direct measurement, which is how A* computes it).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The rhs-values are one-step lookahead values based on the g-values and thus potentially better informed than the g-values.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The calculation of $rhs$ seems to be purely a sanity check that the estimate of $g(s)$ is accurate, based on the estimate of a predecessor.  &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;in which case will the rhs-value and g-value of a node be different&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Even if there is only one predecessor, if the estimate for that predecessor has changed between 2 searches then it's possible for $rhs(s) \neq g(s)$.  And based on the equation above, that can happen in only one of two ways:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;the minimum $c(s', s)$ has changed&lt;/li&gt;&#xA;&lt;li&gt;the minimum $g(s')$ has changed&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;According to the paper, this represents the case where the robot makes a move and discovers that the cost of moving between two given points has changed from what was previously believed.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2016-04-01T11:50:25.560" LastActivityDate="2016-04-01T11:50:25.560" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9526" PostTypeId="2" ParentId="9518" CreationDate="2016-03-29T19:21:19.557" Score="0" Body="&lt;p&gt;If you have an unused smartphone with a camera, your best bet may be to simply use that for the robot.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many results came up in my brief google search for smartphone robots and smartphone-based robotics software.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2016-03-29T19:21:19.557" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9527" PostTypeId="2" ParentId="9521" CreationDate="2016-03-29T20:29:53.140" Score="1" Body="&lt;p&gt;To expand on @Ian 's answer :&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In that context, I believe a &quot;predecessor&quot; of vertex $u$ refers to any vertex $v$ with a directed edge $(v,u)$, i.e any vertex &quot;from which u is accessible&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For instance, in the typical case of a 2D grid with eight neighbors for each cell and bidirectional edges (or two opposite directed edges), you almost always have multiple predecessors for a given vertex.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$rhs(s)$ integrates information from the immediate neighborhood of $s$ (&quot;one step lookahead&quot;) which is why $rhs-values$ propagate faster than the $g-values$ and help better discriminate between multiple vertices in the priority queue to decide which one is the most promising to expand next.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$rhs(s)$ and $g(s)$ are different - vertices are &quot;locally inconsistent&quot; - typically around the area where the edge costs were modified, and as the local search expands to &quot;repair&quot; the previous path around this area, vertices along the new shortest path are made &quot;locally consistent&quot;, i.e $rhs(s)=g(s)$&lt;/p&gt;&#xA;" OwnerUserId="5610" LastEditorUserId="5610" LastEditDate="2016-03-29T20:35:41.930" LastActivityDate="2016-03-29T20:35:41.930" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9532" PostTypeId="1" CreationDate="2016-03-30T16:06:19.920" Score="2" ViewCount="497" Body="&lt;p&gt;In propellers as the airspeed increases thrust decreases. Is the air speed component taken as a vector quantity perpendicular to the propeller? If thats true the its quiet easy to visualize in case of airplanes but for quadcopters will it be  &lt;strong&gt;&quot;copter_airspeed * sin(copter tilt)&quot;&lt;/strong&gt;? &lt;/p&gt;&#xA;" OwnerUserId="13317" LastActivityDate="2016-03-31T12:32:43.233" Title="Quadcopter propeller physics" Tags="&lt;quadcopter&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="9533" PostTypeId="2" ParentId="9532" CreationDate="2016-03-30T17:25:24.143" Score="1" Body="&lt;p&gt;Have a look at &lt;a href=&quot;https://www.google.es/url?q=http://seniorphysics.com/physics/helicopterEEI.pdf&amp;amp;sa=U&amp;amp;ved=0ahUKEwjpqLr09ejLAhWM8RQKHdRgBzkQFggNMAA&amp;amp;usg=AFQjCNFbcQj3zxhh6eevn_qa5CQRQ6C3EA&quot; rel=&quot;nofollow&quot;&gt;investigating flight with toy helicopter&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10539" LastActivityDate="2016-03-30T17:25:24.143" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9535" PostTypeId="1" CreationDate="2016-03-30T20:28:47.087" Score="4" ViewCount="277" Body="&lt;p&gt;I developed an anthropomorphic arm (structure in aluminium) with 6 DOF (3 plus spherical wrist) for direct kinematic. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I chose magnetic rotary encoders to measure angles but I am not satisfied, due to them causing noise on angle measurements. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What do you advise me? &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;To add another sensor and perform a sensor fusion? &lt;/li&gt;&#xA;&lt;li&gt;To replace magnetic encoders with optical ones? &lt;/li&gt;&#xA;&lt;li&gt;or... what else?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="13320" LastEditorUserId="9176" LastEditDate="2016-03-31T11:23:03.290" LastActivityDate="2016-03-31T13:27:33.820" Title="Anthropomorphic Arm" Tags="&lt;robotic-arm&gt;&lt;manipulator&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9536" PostTypeId="1" AcceptedAnswerId="9537" CreationDate="2016-03-30T22:30:08.247" Score="2" ViewCount="56" Body="&lt;p&gt;Following is the equation of Writhe matrix from the article &lt;a href=&quot;https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=2&amp;amp;cad=rja&amp;amp;uact=8&amp;amp;ved=0ahUKEwiShMzIuOnLAhVIQyYKHS5RD-oQFggpMAE&amp;amp;url=https%3A%2F%2Fipvs.informatik.uni-stuttgart.de%2Fmlr%2Fpapers%2F13-ivan-IJRR.pdf&amp;amp;usg=AFQjCNHftBdmoPCF6xDv59fxlEfwGkLGvg&amp;amp;sig2=m9a-rNtK1v6NAJxqr3rTqA&amp;amp;bvm=bv.117868183,bs.1,d.eWE&quot; rel=&quot;nofollow noreferrer&quot;&gt;Topology based Representation&lt;/a&gt;(page no. 6).&#xA;&lt;a href=&quot;https://i.stack.imgur.com/k8LQw.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/k8LQw.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the meaning of 'sign' in the second part of this equation? I am not sure if this is some typo in that article as the other article of &lt;a href=&quot;http://www.roboticsproceedings.org/rss08/p59.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Hierarchical Motion Planning&lt;/a&gt;(page no. 3), compleletely neglects the term 'sign[...]'&#xA;&lt;a href=&quot;https://i.stack.imgur.com/L2LJJ.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/L2LJJ.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11751" LastEditorUserId="11751" LastEditDate="2016-03-30T22:51:12.113" LastActivityDate="2016-03-30T22:51:12.113" Title="Meaning of 'sign' in Writhe Matrix" Tags="&lt;mobile-robot&gt;&lt;control&gt;&lt;robotic-arm&gt;&lt;wheeled-robot&gt;&lt;motion-planning&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9537" PostTypeId="2" ParentId="9536" CreationDate="2016-03-30T22:37:16.963" Score="2" Body="&lt;p&gt;Sign is a function that returns +1 whenever the operand is anything positive, -1 if it's anything negative, and 0 if it's zero. I'm not sure if it's mathematically correct for your equation as I'm not familiar with it, but it's not an uncommon function, especially in the realm of robotics. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-03-30T22:37:16.963" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9538" PostTypeId="1" AcceptedAnswerId="9539" CreationDate="2016-03-31T06:18:40.863" Score="0" ViewCount="50" Body="&lt;p&gt;In the article of &lt;a href=&quot;https://ipvs.informatik.uni-stuttgart.de/mlr/papers/13-ivan-IJRR.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Topological Based Representation&lt;/a&gt;(Page no. 12), the equation of the Linear Gaussian system dynamics is given as &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/8uSyq.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8uSyq.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In above equation what is the meaning of 'curly N'? &lt;/p&gt;&#xA;" OwnerUserId="11751" LastActivityDate="2016-03-31T10:26:48.707" Title="Meaning of symbol, 'curly N' in the equation of Linear Gaussian system dynamics" Tags="&lt;mobile-robot&gt;&lt;control&gt;&lt;robotic-arm&gt;&lt;wheeled-robot&gt;&lt;motion-planning&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9539" PostTypeId="2" ParentId="9538" CreationDate="2016-03-31T10:26:48.707" Score="4" Body="&lt;p&gt;They are modeling the probability as a normal distribution with the given mean and variance.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2016-03-31T10:26:48.707" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9540" PostTypeId="2" ParentId="9532" CreationDate="2016-03-31T12:32:43.233" Score="1" Body="&lt;p&gt;Can you draw a picture of what you're asking for? I think you may be thinking about the problem wrong (no offense). The big problem (I think) is that &lt;em&gt;quadcopter's propellers are not oriented the same as an aircraft's&lt;/em&gt;, which means that the velocity direction for calculating advance ratio is not the same for the two types of aircraft.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gYEEV.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gYEEV.png&quot; alt=&quot;Aircraft directions vs Prop face&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In an airplane, horizontal motion is (for the most part) &lt;a href=&quot;https://en.wikipedia.org/wiki/Normal_(geometry)&quot; rel=&quot;nofollow noreferrer&quot;&gt;normal&lt;/a&gt; to the [geometric!] &lt;a href=&quot;https://en.wikipedia.org/wiki/Plane_(geometry)&quot; rel=&quot;nofollow noreferrer&quot;&gt;plane&lt;/a&gt; of the prop: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a quadcopter, horizontal motion is (again, for the most part) &lt;em&gt;parallel&lt;/em&gt; to the plane of the prop. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I understand it, the advance ratio is calculated with the ratio of fluid speed &lt;strong&gt;across&lt;/strong&gt; the blades relative to the tip speed of the blade. In an airplane, this is equal to the horizontal speed of the airplane because the plane of the blades is normal to the horizontal motion. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a quadcopter, horizontal motion causes air to pass &lt;strong&gt;along&lt;/strong&gt; the blades because horizontal motion is in the same plane as the face of the blade. That is, &lt;em&gt;I don't think you use horizontal speed to calculate the advance ratio of a quadcopter&lt;/em&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead, I would use (generally) the &lt;em&gt;vertical&lt;/em&gt; speed of the quadcopter because the vertical direction is normal to a quadcopter's propellers. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-03-31T12:32:43.233" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9541" PostTypeId="2" ParentId="9535" CreationDate="2016-03-31T13:27:33.820" Score="1" Body="&lt;p&gt;I was going to add this as a comment, but it's more detailed than one so I'll post it as an answer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might be able to &lt;em&gt;measure&lt;/em&gt; to the sub-millimeter level, but you will find it &lt;strong&gt;very, very difficult&lt;/strong&gt; to &lt;em&gt;control&lt;/em&gt; to that level. This is because every mechanical structure has some form of resonance - everything shakes. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your robot were just a chunk of aluminum, you'd probably be fine. But, because you want something &lt;em&gt;functional&lt;/em&gt;, you put joints in the robot. Those joints need to be flexible to be functional, but they also need to be rigid enough (when commanded) to support the weight of the arm plus whatever payload you have. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The fact that a robot &lt;em&gt;moves&lt;/em&gt; to a commanded position means that there will be some &lt;em&gt;momentum&lt;/em&gt; in the arm. When you bring the arm to a stop there is a &lt;a href=&quot;https://en.wikipedia.org/wiki/Jerk_(physics)&quot; rel=&quot;nofollow&quot;&gt;jerk&lt;/a&gt; that mechanically excites the arm, starting vibration. You can measure the motion of the arm, but controlling the vibration with an actuator, to the level you're talking about, is very difficult. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding measurement accuracy, you haven't given any dimensions for your arm, so it's not possible to give a hard spec on your encoder resolution requirement, but I'll wager that what you have is insufficient. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your arm is 1 foot long (305mm), then motion of 0.1mm at the end of that arm is equivalent to &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$dx = r\sin{(\theta)}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\theta = \mbox{asin}{(dx/r)}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\theta = 0.018 \mbox{deg}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You state that your encoder measures to 0.03% of 360 degrees, which means is measures to 30% of 0.36 degrees, or about 0.1 degree. This means that you need &lt;strong&gt;10 times&lt;/strong&gt; the resolution on your encoder &lt;em&gt;if&lt;/em&gt; your arm, from center of the joint to the end of the end effector, is ~300 mm. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Whenever you &lt;em&gt;do&lt;/em&gt; get data, you can quickly check for resonance by &lt;a href=&quot;https://en.wikipedia.org/wiki/Correlogram&quot; rel=&quot;nofollow&quot;&gt;plotting&lt;/a&gt; the &lt;a href=&quot;https://en.wikipedia.org/wiki/Autocorrelation&quot; rel=&quot;nofollow&quot;&gt;autocorrelation&lt;/a&gt; of data. Resonance generally some sinusoidal function; this would be pretty apparent in the plot. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you get an encoder that has &lt;em&gt;exactly&lt;/em&gt; the resolution you think you need, then sometimes you can get &quot;noise&quot; where the value being measured is on the edge of a bit threshold. For this reason, I typically try to get an encoder a couple bits higher than what I think I need. I thought there was a thumb rule for this but I can't find it in a cursory search online and I don't have my measurement text with me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hopefully this gives you some guidance; if you can &lt;em&gt;update your question&lt;/em&gt; (please don't post as a comment) a link to your data along with the dimensions of your arm then it would be possible to give you a more thorough answer.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-03-31T13:27:33.820" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9542" PostTypeId="1" CreationDate="2016-04-01T06:08:38.987" Score="1" ViewCount="65" Body="&lt;p&gt;The paper &lt;a href=&quot;https://ipvs.informatik.uni-stuttgart.de/mlr/papers/13-ivan-IJRR.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;Topology-based Representations for Motion Planning&#xA;and Generalisation in Dynamic Environments with&#xA;Interactions&lt;/em&gt;&lt;/a&gt; by Ivan&#xA;et.al., says on page 10 that the Approximate Inference Control (AICO) framework translates the robot dynamics to the graphical model by the following equation:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/lQsJ4.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/lQsJ4.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What does p(x0:T,u0:T) mean? I feel that p means 'prior of' some uncertain quantity, but I'm not sure about this. &lt;/p&gt;&#xA;" OwnerUserId="11751" LastEditorUserId="127" LastEditDate="2016-04-01T07:39:07.207" LastActivityDate="2016-04-02T21:36:04.813" Title="Meaning of the equation of graphical model" Tags="&lt;mobile-robot&gt;&lt;control&gt;&lt;robotic-arm&gt;&lt;motion-planning&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9544" PostTypeId="1" CreationDate="2016-04-01T14:19:53.163" Score="1" ViewCount="529" Body="&lt;p&gt;I just got a new iRobot Create 2. I used to use an Element Direct BAM (Bluetooth Adapter Module) for iRobot Create previously.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I communicate with a Create 2 using Bluetooth? What accessories do I need?&lt;/p&gt;&#xA;" OwnerUserId="13334" LastEditorUserId="9176" LastEditDate="2016-04-19T09:16:18.993" LastActivityDate="2018-03-10T23:45:46.873" Title="Enable Bluetooth communication with iRobot Create 2" Tags="&lt;irobot-create&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9545" PostTypeId="1" CreationDate="2016-04-01T20:37:18.303" Score="2" ViewCount="369" Body="&lt;p&gt;I have some questions regarding an IPS autonomous robot system,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Configuration: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Mounting a camera to the ceiling of a room&lt;/li&gt;&#xA;&lt;li&gt;Assume the room is a cube of 5mx5mx5m (LxWxH)&lt;/li&gt;&#xA;&lt;li&gt;Assume the camera is Microsoft LifeCam Studio (CMOS sensor technology, Sensor Resolution: 1920 X 1080, 75° diagonal field of view, Auto focus from 0.1m to ≥ 10m, Up to 30 frames per second, Frequency Response: 100 Hz – 18 kHz)&lt;/li&gt;&#xA;&lt;li&gt;A rover&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Objectives:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;By putting the rover in an unknown location (x,y) in the room, the system should localize the rover's position&lt;/li&gt;&#xA;&lt;li&gt;After the rover's coordinates will be known, Navigation will be the next step&lt;/li&gt;&#xA;&lt;li&gt;We want the rover to navigate from the known coordinates (x1,y1) (let's say point A) to another point B on the map (x2,y2)&lt;/li&gt;&#xA;&lt;li&gt;Control signals will be sent to the rover's servos to complete the navigation task&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Methodology:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Camera will capture the environment in real time&lt;/li&gt;&#xA;&lt;li&gt;Environment will be represented as cells (occupancy grid mapping)&lt;/li&gt;&#xA;&lt;li&gt;Assume each cell represents 5 cm in the environment&lt;/li&gt;&#xA;&lt;li&gt;Rover will be localized by the system point A&lt;/li&gt;&#xA;&lt;li&gt;Determine the navigation to point B&lt;/li&gt;&#xA;&lt;li&gt;Determine the path of the rover in the grid map (ex: go x cells horizontal then y cells vertical)&lt;/li&gt;&#xA;&lt;li&gt;Control Signal will be sent to rover's servos&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Questions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Can I use this camera for this task or I need another type of cameras ?&lt;/li&gt;&#xA;&lt;li&gt;What are the factors affecting the system accuracy ?&#xA;(ex: Sensor Resolution - FOV - FPS - Frequency Response - Distance of the camera in the ceiling)&lt;/li&gt;&#xA;&lt;li&gt;What's is the most important factor to consider to increase the accuracy ?&lt;/li&gt;&#xA;&lt;li&gt;I would appreciate any opinions regarding the project&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;King Regards,&#xA;Thank you&lt;/p&gt;&#xA;" OwnerUserId="13240" LastActivityDate="2016-07-01T00:39:44.933" Title="Autonomous Indoor Positioning System Robot based on CV approach" Tags="&lt;mobile-robot&gt;&lt;localization&gt;&lt;slam&gt;&lt;computer-vision&gt;&lt;mapping&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9546" PostTypeId="2" ParentId="9545" CreationDate="2016-04-01T22:40:49.027" Score="2" Body="&lt;p&gt;The camera should work fine as long as you can easily find the rover in the environment. An easy way to accomplish this is to place two different colored markers on the rover. By finding the markers in the image you can get position and orientation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'll need to calibrate the camera to get focal lengths and the optical center. This is easily done with the ros package camera_calibration though there are many similar packages out there that would work. As long as you've done a decent job calibrating the camera and can accurately find the markers on the vehicle you should have a very accurate estimate of the rover's position.&lt;/p&gt;&#xA;" OwnerUserId="8842" LastActivityDate="2016-04-01T22:40:49.027" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="9547" PostTypeId="1" AcceptedAnswerId="9551" CreationDate="2016-04-02T00:50:34.623" Score="0" ViewCount="695" Body="&lt;p&gt;I'm wondering if there is a way to figure out the actual controllers used in the commercial drones such as &lt;a href=&quot;http://ardrone2.parrot.com/&quot; rel=&quot;nofollow&quot;&gt;AR drone&lt;/a&gt; and &lt;a href=&quot;http://www.dji.com/product/phantom-4&quot; rel=&quot;nofollow&quot;&gt;Phantom&lt;/a&gt;. According to AR drone SDK, users are not allowed to access the actual hardware of the platform yet they are only capable of sending and receiving commands from/to the drone. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt;&#xA;I'm hoping to to check the actual controller utilized in the software. When I fly AR drone, it seems the platform can't stabilize itself when I perform aggressive maneuvers, therefore, I can guess that they use linearized model which is applicable for using simple controllers such as PD or PID&lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="2155" LastEditDate="2016-04-04T14:21:03.503" LastActivityDate="2016-04-04T14:21:03.503" Title="Reverse engineering commercial drone control algorithms" Tags="&lt;quadcopter&gt;&lt;control&gt;" AnswerCount="2" CommentCount="2" ClosedDate="2016-04-05T09:11:25.927" ContentLicense="CC BY-SA 3.0" />
  <row Id="9548" PostTypeId="2" ParentId="9542" CreationDate="2016-04-02T03:21:55.330" Score="2" Body="&lt;p&gt;It is not a prior. It is the posterior of trajectory and controls. Basically that equation gives you the motion model of the robot similar to the motion models described in Sebastian Thrun's Probabilistic Robotics. $x_{0:t}$ is a set of poses i.e., trajectory and $u_{0:t}$ is a set of controls, i.e., Motor commands for the joints. The posterior here provides a likelihood estimate of the robot's pose after a control command. From what I understand after skimming through the rather obscure paper and another paper &lt;a href=&quot;https://homes.cs.washington.edu/~todorov/courses/amath579/reading/Toussaint.pdf&quot; rel=&quot;nofollow&quot;&gt;Robot Trajectory Optimization using Approximate Inference&lt;/a&gt; that the LHS is used to compute a likelihood for the next pose, $x_{t+1}$ if a control action $u_t$ is chosen with the knowledge of $x_t$. The LHS can be viewed as described in the Background section below. From the latter paper, the estimation of state $x_{t+1}$ requires some confidence on the knowledge of current state $x_t$ which is given by the covariance matrix $A$ and mean $a$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Background:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$p(x_{0:t},u_{0:t})$ is called a state transition probability, it can also be written as $p(x_{t}|x_{0:t-1}, u_{0:t})$ since it can be assumed that $x_t$ is a complete state or here just the pose of the robot, i.e. it is a summary of all that happened in the past poses after executing commands in the set $u_{1:t}$. What this results in is that $x_t$ is conditional stochastically on $x_{t-1}$ and can be estimated by executing the command $u_t$. Which is what the motion model does for you and it is shown as $p(x_t|u_t, x_{t-1})$. It says that the state $x_t$ depends on $u_t$ and can be computed as long as $x_{t-1}$ is known.&lt;/p&gt;&#xA;" OwnerUserId="3905" LastEditorUserId="3905" LastEditDate="2016-04-02T21:36:04.813" LastActivityDate="2016-04-02T21:36:04.813" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="9551" PostTypeId="2" ParentId="9547" CreationDate="2016-04-02T14:02:43.620" Score="2" Body="&lt;p&gt;I would recommend looking at the PX4 software that runs on the pixhawk. It's open source and is available on github.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You won't be able to see the actual control software flying on the other drones as it's proprietary. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/PX4/Firmware&quot; rel=&quot;nofollow&quot;&gt;https://github.com/PX4/Firmware&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;--&lt;/p&gt;&#xA;&#xA;&lt;p&gt;the software on the pixhawk is well put together and maintained. it is likely more accessible than most because processes are split into modules and comminicate via messages. The ardupilot is another open source flight stack. However, the ardupilot is a god object that is a mess of inheritance. If you are not familiar with oop you best stay away.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only downside to the px4 flight stack is that it uses cascaded pid for attitude control which isn't all that exotic. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But if you're just looking to get a feel for how controllers are implemented in the real world on embedded systems, the px4 flight stack will be your best bet. &lt;/p&gt;&#xA;" OwnerUserId="8842" LastEditorUserId="8842" LastEditDate="2016-04-04T01:56:21.130" LastActivityDate="2016-04-04T01:56:21.130" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9552" PostTypeId="1" AcceptedAnswerId="9558" CreationDate="2016-04-03T00:43:21.523" Score="0" ViewCount="28" Body="&lt;p&gt;The article of &lt;a href=&quot;https://ipvs.informatik.uni-stuttgart.de/mlr/papers/13-ivan-IJRR.pdf&quot; rel=&quot;nofollow&quot;&gt;Topology-based representation&lt;/a&gt; (page no. 13, line 5) says that, topology-based representation is invariant to certain changes in the environment. That means the trajectory generated in topology-based space will remain valid even if there are certain changes in the environment. But how is this possible? Is there any simple example to understand this concept?&lt;/p&gt;&#xA;" OwnerUserId="11751" LastActivityDate="2016-04-04T00:55:20.047" Title="How is Topology-based representation invariant to certain change in environment" Tags="&lt;mobile-robot&gt;&lt;control&gt;&lt;robotic-arm&gt;&lt;motion-planning&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9553" PostTypeId="1" CreationDate="2016-04-03T14:38:30.193" Score="0" ViewCount="2311" Body="&lt;p&gt;We are making a project in which we want to count the no. of people entering and leaving a room with one single entrance. We are using IR sensors and detectors for this ,along with an Aurdino. We have a problem in this system,  i.e when two or more persons are entering or leaving the room at a time we are getting a wrong count. Thanks in advance for your valuable time and solution.....If there is any other better way,please state that.&lt;/p&gt;&#xA;" OwnerUserId="13355" LastActivityDate="2016-04-03T23:35:46.860" Title="Counting number of people entering a room" Tags="&lt;arduino&gt;&lt;sensors&gt;&lt;microcontroller&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2016-04-04T00:46:22.443" ContentLicense="CC BY-SA 3.0" />
  <row Id="9554" PostTypeId="1" AcceptedAnswerId="9559" CreationDate="2016-04-03T20:39:32.727" Score="7" ViewCount="5323" Body="&lt;p&gt;I'm trying to implement a PID control on my quadcopter using the Tiva C series microcontroller but I have trouble making the PID stabilize the system. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;While I was testing the PID, I noticed slow or weak response from PID controller (the quad shows no response at small angles). In other words, it seems that the quad's angle range has to be relatively large (above 15 degrees) for it to show a any response. Even then, the response always over shoots no matter what I, D gains I choose for my system. At low P, I can prevent overshoot but then it becomes too weak.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not sure if the PID algorithm is the problem or if its some kinda bad hardware configuration (low IMU sample rate or maybe bad PWM configurations), but I have strong doubts about my PID code as I noticed changing some of the gains did not improve the system response.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I will appreciate If someone can point out whether i'm doing anything wrong in the PID snippet for the pitch component I posted. I also have a roll PID but it is similar to the code I posted so I will leave that one out.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void pitchPID(int16_t pitch_conversion)&#xA;{&#xA;  float  current_pitch = pitch_conversion;&#xA;  //d_temp_pitch is global variable&#xA;  //i_temp_pitch is global variable&#xA;  float  pid_pitch=0; //pitch pid controller&#xA;  float  P_term, I_term, D_term;&#xA;  float  error_pitch = desired_pitch - current_pitch;&#xA;&#xA;  //if statement checks for error pitch in negative or positive direction&#xA;  if ((error_pitch&amp;gt;error_max)||(error_pitch&amp;lt;error_min))&#xA;    {&#xA;      if (error_pitch &amp;gt; error_max) //negative pitch- rotor3&amp;amp;4 speed up&#xA;        {&#xA;          P_term = pitch_kp*error_pitch; //proportional&#xA;          i_temp_pitch += error_pitch;//accumulate error&#xA;          if (i_temp_pitch &amp;gt; iMax)&#xA;            {&#xA;            i_temp_pitch = iMax;&#xA;            }&#xA;          I_term = pitch_ki*i_temp_pitch;&#xA;          if(I_term &amp;lt; 0)&#xA;            {&#xA;            I_term=-1*I_term;&#xA;            }&#xA;          D_term = pitch_kd*(d_temp_pitch-error_pitch);&#xA;          if(D_term&amp;gt;0)&#xA;            {&#xA;            D_term=-1*D_term;&#xA;            }&#xA;          d_temp_pitch = error_pitch; //store current error for next iteration&#xA;          pid_pitch = P_term+I_term+D_term;&#xA;          if(pid_pitch&amp;lt;0)&#xA;            {&#xA;            pid_pitch=(-1)*pid_pitch;&#xA;            }&#xA;          //change rotor3&amp;amp;4&#xA;          pitchPID_adjustment (pid_pitch, 'n'); //n for negative pitch&#xA;        }&#xA;      else if (error_pitch &amp;lt; error_min) // positive pitch- rotor 1&amp;amp;2 speed up&#xA;        {&#xA;        P_term = pitch_kp*error_pitch; //proportional&#xA;        i_temp_pitch += error_pitch;&#xA;        if (i_temp_pitch &amp;lt; iMin)&#xA;          {&#xA;          i_temp_pitch = iMin;&#xA;          }&#xA;        I_term = pitch_ki*i_temp_pitch;&#xA;        if(I_term &amp;gt; 0)&#xA;          {&#xA;          I_term=-1*I_term;&#xA;          }&#xA;        D_term = pitch_kd*(d_temp_pitch - error_pitch);&#xA;        if(D_term &amp;lt; 0)&#xA;          {&#xA;          D_term=-1*D_term;&#xA;          }&#xA;        d_temp_pitch = error_pitch;&#xA;        pid_pitch = P_term+I_term+D_term;&#xA;        if(pid_pitch&amp;lt;0)&#xA;          {&#xA;          pid_pitch=(-1)*pid_pitch;&#xA;          }&#xA;        print(pid_pitch);//pitch&#xA;        printString(&quot;\r\n&quot;);&#xA;        //change rotor1&amp;amp;2&#xA;        pitchPID_adjustment(pid_pitch,'p'); //p for positive pitch&#xA;      }&#xA;    }&#xA;  }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt; &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void pitchPID_adjustment(float pitchPIDcontrol, unsigned char pitch_attitude)&#xA;  {&#xA;  if (pitchPIDcontrol&amp;gt;(maximum_dutyCycle-set_dutyCycle))&#xA;    {&#xA;    pitchPIDcontrol=maximum_dutyCycle-set_dutyCycle;&#xA;    }&#xA;  switch (pitch_attitude){&#xA;  //change rotor1&amp;amp;2&#xA;  case 'p': //positive status&#xA;    PWM0_2_CMPA_R += (pitchPIDcontrol);//(RED)//motor1&#xA;    PWM0_0_CMPA_R += (pitchPIDcontrol);//(Yellow)//motor2&#xA;    break;&#xA;  //change rotor 3&amp;amp;4&#xA;  case 'n': //negative status&#xA;    PWM0_1_CMPA_R += pitchPIDcontrol;//(ORANGE)//motor3&#xA;    PWM1_1_CMPA_R += pitchPIDcontrol;//(green)//motor4&#xA;    break;&#xA;  }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Also, can someone please tell me how this motor mixing works?: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Front =Throttle + PitchPID &#xA;Back =Throttle - PitchPID &#xA;Left =Throttle + RollPID &#xA;Right =Throttle - RollPID&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;vs what I did in the function:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void pitchPID_adjustment(float pitchPIDcontrol, unsigned char pitch_attitude)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="13077" LastEditorUserId="13077" LastEditDate="2016-04-04T18:24:24.053" LastActivityDate="2016-04-04T18:27:07.450" Title="Quadcopter PID Algorithm" Tags="&lt;quadcopter&gt;&lt;control&gt;&lt;pid&gt;&lt;imu&gt;&lt;pwm&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="9555" PostTypeId="1" CreationDate="2016-04-03T20:56:38.007" Score="1" ViewCount="52" Body="&lt;p&gt;I want to issue two slightly different drive commands what is the smallest loop rate that the robot-create accepts new commands?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know from reading the documentation that it appears the sensors are read every 15ms. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not sure what the command rate is?&lt;/p&gt;&#xA;" OwnerUserId="13273" LastActivityDate="2016-04-05T14:05:59.260" Title="What is the millisecond rate that robot-create can respond to two different drive commands?" Tags="&lt;irobot-create&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9556" PostTypeId="2" ParentId="7121" CreationDate="2016-04-03T21:11:39.677" Score="1" Body="&lt;p&gt;To get the firmware version:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To get what software the robot has, connect it to a serial application (such as PuTTy) and turn the robot off then on. It should print it out then&lt;/p&gt;&#xA;&#xA;&lt;p&gt;New says:&#xA;r3_robot/tags/release-3.4.1:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;old says:&#xA;r3_robot/tags/release-3.2.6:&lt;/p&gt;&#xA;" OwnerUserId="13273" LastActivityDate="2016-04-03T21:11:39.677" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9557" PostTypeId="2" ParentId="9553" CreationDate="2016-04-03T23:35:46.860" Score="0" Body="&lt;p&gt;You question is a bit vague in sense of how many IR sensors you have, what type of them etc. With that in mind, I will try to answer with the following assumptions:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;You have IR sensors which are laser-ir diode/resistor/transistor pairs (the person walking cuts the laser beam which can be detected on the photosensitive element).&lt;/li&gt;&#xA;&lt;li&gt;You have enough of those.&lt;/li&gt;&#xA;&lt;li&gt;People will not be trying to fool your system.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;You can try to put a bit denser array of these sensors both horizontally and vertically so that you may distinguish two persons walking in at the same time. This will call for some heuristics in the sense of how wide a single person is etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A much easier solution (involving a bit more sophisticated IR sensor) is using Microsoft Kinect along with Kinect SDK which has skeleton detection already implemented so you can just read if and how many people are entering and leaving the room.&lt;/p&gt;&#xA;" OwnerUserId="4017" LastActivityDate="2016-04-03T23:35:46.860" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9558" PostTypeId="2" ParentId="9552" CreationDate="2016-04-04T00:55:20.047" Score="2" Body="&lt;p&gt;The concept you might be missing is &lt;a href=&quot;https://en.wikipedia.org/wiki/Homeomorphism&quot; rel=&quot;nofollow&quot;&gt;homeomorphism&lt;/a&gt;. The &lt;em&gt;donut=coffee cup&lt;/em&gt; visual example at that link might help. Of all the ways you can change the environment (move the obstacles) there is a subset of changes you can make that change the location of the obstacles but keeps the topology the same. Because the topology is the same, the topology based space trajectory will remain valid, even though the obstacles have moved. (Again, depending on the topology, only a subset of all possible changes will keep the same topology.)&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2016-04-04T00:55:20.047" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9559" PostTypeId="2" ParentId="9554" CreationDate="2016-04-04T02:26:30.430" Score="11" Body="&lt;p&gt;The glaring issue I see at the moment is that you are forcing polarity on the I and D terms. In general, you are using a lot of sign checks, sign &lt;em&gt;assignments&lt;/em&gt;, and conditional programming. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;None of that belongs in a PID controller. The entire controller should look like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;pError = Input - Output;&#xA;iError = iError + pError*dt;&#xA;dError = (pError - previousError);&#xA;previousError = pError;&#xA;&#xA;ControlSignal = kp*pError + ki*iError + kd*dError;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;That's it. No need for checks, assignments, etc. See my &lt;a href=&quot;https://robotics.stackexchange.com/a/9466/9720&quot;&gt;related answer&lt;/a&gt; on splitting the control signal as opposed to control each motor pair individually (which is what I believe your goal is with the if elseif code).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Imagine a PID controller as three people watching your vehicle, all trying to give advice based on their &quot;experience&quot; (mode). Each &quot;person&quot; will give you one of three &quot;statements&quot; So you have:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Mr. Proportional&lt;/strong&gt; - This person looks at where the output is and compares it to what you asked for. The statements given by this person are:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;There is a large difference between what you want and what you have - &lt;em&gt;take a big action&lt;/em&gt;. &lt;/li&gt;&#xA;&lt;li&gt;There is a small difference between what you want and what you have - &lt;em&gt;take a small action&lt;/em&gt;. &lt;/li&gt;&#xA;&lt;li&gt;What you have is what you asked for - &lt;em&gt;take no action&lt;/em&gt;.&lt;/li&gt;&#xA;&lt;/ol&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Mr. Integral&lt;/strong&gt; - This person looks at the same error value Mr. Proportional does, but compares it to &lt;em&gt;how long&lt;/em&gt; it's been that way. The statements given by this person are:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;You have chronic/acute error (small error for a long time or big error for a small time) - &lt;em&gt;take a big action&lt;/em&gt;.&lt;/li&gt;&#xA;&lt;li&gt;You have mild error (small error for a short time) - &lt;em&gt;take a small action&lt;/em&gt;. &lt;/li&gt;&#xA;&lt;li&gt;Your error history is neutral (time * positive error is equal to time * negative error) - &lt;em&gt;take no action&lt;/em&gt;. &lt;/li&gt;&#xA;&lt;/ol&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Mr. Derivative&lt;/strong&gt; - This person looks at the same error value Mr. Proportional does, but compares it to &lt;em&gt;how it's changing&lt;/em&gt;. The statements given by this person are:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Your error is getting bigger - &lt;em&gt;take a bigger action&lt;/em&gt;. &lt;/li&gt;&#xA;&lt;li&gt;Your error is getting smaller - &lt;em&gt;take a &lt;strong&gt;negative&lt;/strong&gt; action&lt;/em&gt;. &lt;/li&gt;&#xA;&lt;li&gt;Your error is not changing - &lt;em&gt;take no action&lt;/em&gt;. &lt;/li&gt;&#xA;&lt;/ol&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;It's important to note statement 2 of Mr. Derivative up there - imagine you're driving a car behind someone who is already at a stop. As you get closer to them (error is getting smaller), not only do you want to let off the gas, but you also want to brake! Derivative action is what gives you &quot;braking&quot; - no other term (P or I) gives you &lt;em&gt;negative&lt;/em&gt; action until you're &lt;em&gt;past&lt;/em&gt; the setpoint. Derivative is the only term that tells you to &lt;em&gt;slow down because you're getting close&lt;/em&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another way to help understand these terms is to understand &lt;em&gt;physically&lt;/em&gt; what they mean. Say your reference is a speed. This means:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Proportional error compares your speed to your target speed. Want to be going 60 and you're going 55? Speed up. Going 65? Slow down. This is easy. &lt;/li&gt;&#xA;&lt;li&gt;Integral error compares the &lt;em&gt;integral&lt;/em&gt; of target speed to the &lt;em&gt;integral&lt;/em&gt; of actual speed. This means that it's comparing a target &lt;strong&gt;position&lt;/strong&gt; to your actual &lt;strong&gt;position&lt;/strong&gt;. Were you supposed to be in the city already? Then you need to speed up. Were you supposed to be in the city and you're still at your house? &lt;em&gt;SPEED THE ENTIRE WAY&lt;/em&gt;. &lt;/li&gt;&#xA;&lt;li&gt;Derivative error compares the &lt;em&gt;derivative&lt;/em&gt; of the difference between target and actual speeds. Is the person in front of you pulling away? &lt;em&gt;Speed up!&lt;/em&gt; Is the person in front of you pushing their brakes? &lt;em&gt;Slow down!&lt;/em&gt; As I mentioned above, if your target is to be immediately behind the person in front of you, then proportional and integral will both &quot;tell&quot; you to speed up. Derivative is the only &quot;person&quot; to tell you you're going to rear-end them if you don't start braking. &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;SO&lt;/strong&gt;, what happens when you force signs on the error terms? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's suppose you're in a car, trying to follow a friend to a restaurant. Here the friend's speed represents the speed reference and your speed represents your speed feedback. Speed limit on the road is 35mph (55kph). Here's what happens:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Your friend begins to move.&lt;/li&gt;&#xA;&lt;li&gt;You are still stationary, so the following errors happen:&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Proportional error is positive (you want to go 35 and are actually going 0).&lt;/li&gt;&#xA;&lt;li&gt;Integral error is a little positive (your friend is farther from you).&lt;/li&gt;&#xA;&lt;li&gt;Derivative error is large and positive (your friend is quickly pulling away from you). &lt;/li&gt;&#xA;&lt;li&gt;You force signs: force integral error to be positive (already is) and derivative error to be negative.&lt;/li&gt;&#xA;&lt;li&gt;This means that derivative error is &quot;telling&quot; you that the car is getting farther away from you, but you &lt;em&gt;invert&lt;/em&gt; that and assume that derivative error &lt;em&gt;meant&lt;/em&gt; to say that you are getting closer to your friend. &lt;strong&gt;This is wrong.&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;Actions: &lt;strong&gt;Proportional&lt;/strong&gt; - press the gas a moderate amount. &lt;strong&gt;Integral&lt;/strong&gt; - Press the gas pedal a little bit. &lt;strong&gt;Derivative&lt;/strong&gt; - Should be press the &lt;strong&gt;gas&lt;/strong&gt; pedal a lot, but you inverted it, so instead you &lt;strong&gt;press the brake a lot&lt;/strong&gt;. &lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Eventually your friend gets far enough away that the proportional and integral error becomes large enough that it overrides your (incorrectly inverted) derivative term. At this point:&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Proportional error is large (still going zero and want to go 35). &lt;/li&gt;&#xA;&lt;li&gt;Integral error is very large (your friend is very, very far in front of you). &lt;/li&gt;&#xA;&lt;li&gt;Derivative term is still large (friend is still actively getting farther from you), but you are still forcing it to be negative. &lt;/li&gt;&#xA;&lt;li&gt;Actions: &lt;strong&gt;Proportional&lt;/strong&gt; - press the gas a lot. &lt;strong&gt;Integral&lt;/strong&gt; - Floor the gas pedal. &lt;strong&gt;Derivative&lt;/strong&gt; - Should be push the gas pedal, but you inverted it, so instead you &lt;em&gt;press the brake&lt;/em&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;After some time, you get to 34.999 mph. Proportional error is still (slightly) positive because you want to go 35 and you're actually at 34.999, so proportional error is 0.001&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Proportional error is barely positive (still going slower than 35mph)&lt;/li&gt;&#xA;&lt;li&gt;Integral error is at its largest (you are farthest from your friend thus far because your friend has been going 35 the whole time)&lt;/li&gt;&#xA;&lt;li&gt;Derivative error is roughly zero (you're almost the same speed your friend is, so now the proportional error stabilizes)&lt;/li&gt;&#xA;&lt;li&gt;You force signs: Force integral error to be positive (already is) and derivative error to be negative (it's almost zero, so negligible change). &lt;/li&gt;&#xA;&lt;li&gt;Action: &lt;strong&gt;Proportional&lt;/strong&gt; - No action because you're almost at 35mph. &lt;strong&gt;Integral&lt;/strong&gt; - You are now &lt;em&gt;really&lt;/em&gt; far from your friend, so you floor the gas. &lt;strong&gt;Derivative&lt;/strong&gt; - No action because the proportional error is almost stable. &lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Now, because you were flooring the gas, you pass 35mph and hit 35.01mph. Now, your proportional error becomes negative (want 35, are going 35.01, so error is -0.01). &#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Proportional error is almost zero (going just over the speed limit)&lt;/li&gt;&#xA;&lt;li&gt;Integral error is very large and still very positive because you are actually very far behind your friend. &lt;/li&gt;&#xA;&lt;li&gt;Derivative error is almost zero (because proportional error is still almost zero). &lt;/li&gt;&#xA;&lt;li&gt;You force signs: Force derivative error to be positive - little change because it's almost zero anyways. The problem here comes when you force integral error to be negative - it &lt;em&gt;was&lt;/em&gt; very large and very positive! Now you're forcing it to be negative. This means Mr. Integral was telling you you're very far behind your friend, but you &lt;strong&gt;invert&lt;/strong&gt; that and assume integral error &lt;em&gt;meant&lt;/em&gt; to say that you are very far in front of your friend. &lt;/li&gt;&#xA;&lt;li&gt;Action: &lt;strong&gt;Proportional&lt;/strong&gt; - No action because you're going 35mph. &lt;strong&gt;Integral&lt;/strong&gt; - You are very far behind your friend and should floor the gas pedal, but &lt;em&gt;you inverted that&lt;/em&gt; and now think that you are very far ahead of your friend, so you &lt;strong&gt;stomp the brake pedal instead!&lt;/strong&gt; &lt;strong&gt;Derivative&lt;/strong&gt; - No action because proportional error is pretty stable. &lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;At this point you hit a loop - you slam on brakes when your speed just passes 35mph because you invert integral error, then you floor the gas when you fall below 35mph because you un-invert integral error. This should (violently!) jerk the car (aircraft) around and prevent you from ever eliminating any steady state error. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Worse, I'm not sure how this would behave once you get to the set position, but I think the constant sign flipping might prevent you from stopping anywhere close to where you wanted (if it ever stabilizes at all). &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2016-04-04T18:27:07.450" CommentCount="12" ContentLicense="CC BY-SA 3.0" />
  <row Id="9560" PostTypeId="2" ParentId="9547" CreationDate="2016-04-04T02:26:50.023" Score="1" Body="&lt;p&gt;&lt;em&gt;Reverse engineering&lt;/em&gt; is the term you are looking for. Search &lt;strong&gt;reverse engineering ar drone&lt;/strong&gt; or &lt;strong&gt;reverse engineering phantom&lt;/strong&gt; to get started.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Reverse engineering embedded systems can be really educational and fun, if time consuming. Most embedded processors have code security subsystems, but manufacturers often don't bother to turn them on, and if they are turned on, a little research will give you lots of info on bypassing the typically inadequate security.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2016-04-04T02:26:50.023" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9565" PostTypeId="1" CreationDate="2016-04-04T17:07:58.787" Score="0" ViewCount="98" Body="&lt;p&gt;I want to start designing an Arduino project and have telemetry readings that indicate tilt or angle of placement. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would an accelerometer be the best for determining tilt? Are there good tutorials? &lt;/p&gt;&#xA;" OwnerUserId="13363" LastEditorUserId="9176" LastEditDate="2016-04-07T09:27:52.350" LastActivityDate="2016-04-24T02:08:52.113" Title="Best sensor to determine &quot;up&quot; versus &quot;down&quot;" Tags="&lt;mobile-robot&gt;&lt;arduino&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9566" PostTypeId="2" ParentId="9565" CreationDate="2016-04-04T17:21:22.513" Score="5" Body="&lt;p&gt;if you aren't moving, the accelerometer will give you the direction of gravity. if you are moving and hoping to use this orientation data for control you'll need to incorporate at least one more sensor. The extra sensor is needed because you have no method separating the acceleration of gravity and the acceleration of the sensor. The other drawback is that the accelerometer has no way to measure heading. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A magnetometer would also give you a measurement of orientation but the calibration process can be a little intimidating. It makes up for the deficiencies of the accel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're looking for a weekend project I recommend using a three axis accelerometer. &lt;/p&gt;&#xA;" OwnerUserId="8842" LastEditorUserId="8842" LastEditDate="2016-04-04T22:03:34.613" LastActivityDate="2016-04-04T22:03:34.613" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="9567" PostTypeId="2" ParentId="8990" CreationDate="2016-04-04T19:36:26.247" Score="1" Body="&lt;p&gt;You named a question &quot;Standard equation for steering differential drive robot&quot;, so instead of going deep into your code, I'll try to give you a simple example, how can you steer a differential drive robot. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assumption: joystick steering - two input variables, throttle (forward speed) and steering. It would be easiest if they change from -255 (full revesre/left) to 255 (full ahead/right). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a code that I wrote for motor controller based on DRV8833 drivers:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void runMotor(int channel, int _pwm) {&#xA;    // make sure PWM is within boundaries&#xA;    constr(_pwm, -255,255);&#xA;    if(channel &amp;lt;=4) {&#xA;        // spin the motors forward...&#xA;        if(_pwm &amp;gt;= 0) {&#xA;            //and write the PWM     &#xA;            //in1Pin and in2Pin are arrays of pin numbers   &#xA;            analogWrite(in1Pin[channel], 255 - _pwm);&#xA;            analogWrite(in2Pin[channel], 255);          &#xA;&#xA;        }&#xA;        // ...or backward&#xA;        else {          &#xA;            analogWrite(in1Pin[channel], 255);&#xA;            analogWrite(in2Pin[channel], 255 + (_pwm));         &#xA;        }&#xA;    }&#xA;&#xA;}&#xA;void loop() {&#xA;    int throttle = getThrottle(); //get new throttle value&#xA;    int steering = getSteering(); //get new steering value&#xA;&#xA;    /* here is the essential part:&#xA;    * if both values will be 0, the robot will stop&#xA;    * if throttle is positive, the robot will go forward, if negative - backward&#xA;    * if throttle is 0, but there is some steering, robot will turn in place&#xA;    int leftSpeed = throttle + steering; &#xA;    int rightSpeed = throttle - steering; &#xA;&#xA;    runMotor(1, leftSpeed);&#xA;    runMotor(2, rightSpeed);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You will need to adjust the code for your drivers, but the essentials are the same: for one motor you add steering to throttle, for the another you subtract. This should give you very nice control over your robot.&lt;/p&gt;&#xA;" OwnerUserId="7360" LastActivityDate="2016-04-04T19:36:26.247" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9568" PostTypeId="1" AcceptedAnswerId="9570" CreationDate="2016-04-05T03:03:34.643" Score="1" ViewCount="7201" Body="&lt;p&gt;I'm trying to make decisions for motors on a robot build. I keep running across CIM Motors. What is a CIM Motor? Where does the designation CIM come from? What does CIM mean?&lt;/p&gt;&#xA;" OwnerUserId="12979" LastActivityDate="2019-04-01T10:32:24.440" Title="What is a CIM motor?" Tags="&lt;motor&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9569" PostTypeId="1" CreationDate="2016-04-05T03:49:29.500" Score="0" ViewCount="2164" Body="&lt;p&gt;I am going through a paper, &lt;a href=&quot;http://cdn.intechopen.com/pdfs-wm/41413.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Kinematic Modelling and Simulation of a 2-R Robot Using SolidWorks and Verification by MATLAB/Simulink&lt;/a&gt;, which is about a 2-link revolute joint robotic arm. According to the paper, the trajectory analysis of the robot was done via simulations in MATLAB/Simulink. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It shows the following picture, &lt;em&gt;Trajectory generation of 2‐R robot with MATLAB/Simulink&lt;/em&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/8TWTN.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8TWTN.png&quot; alt=&quot;Trajectory generation of 2‐R robot with MATLAB/Simulink&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and then, &lt;em&gt;Simulink - Simulation block to calculate the trajectory&lt;/em&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ZTl5L.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZTl5L.png&quot; alt=&quot;Simulink - Simulation block to calculate the trajectory&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think this is done in SimMechanics, but I am not sure. Experienced users, can you please tell me what am I looking at and how can I reproduce this?&lt;/p&gt;&#xA;" OwnerUserId="13368" LastEditorUserId="9176" LastEditDate="2016-04-07T09:28:35.777" LastActivityDate="2016-04-14T20:20:05.720" Title="Robotic Arm analysis in Matlab/simulink" Tags="&lt;robotic-arm&gt;&lt;matlab&gt;&lt;simulation&gt;" AnswerCount="4" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="9570" PostTypeId="2" ParentId="9568" CreationDate="2016-04-05T06:15:51.657" Score="2" Body="&lt;p&gt;CCL Industrial Motors according to &lt;a href=&quot;http://www.chiefdelphi.com/forums/showthread.php?t=110767&quot; rel=&quot;nofollow&quot;&gt;this thread&lt;/a&gt;. So CIM is an acronym for the manufacturer of one of the motors the FIRST guys use. The term seems to have been generalized in that community to mean a big powerful motor in their context. Outside of FIRST/VEX the acronym has no meaning. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's a DC motor and from &lt;a href=&quot;http://files.andymark.com/CIM-motor-curve.pdf&quot; rel=&quot;nofollow&quot;&gt;the datasheet&lt;/a&gt; it looks like it can output around 300W. &lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2016-04-05T06:15:51.657" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9571" PostTypeId="1" CreationDate="2016-04-05T09:39:21.050" Score="3" ViewCount="1269" Body="&lt;p&gt;I'm trying to simulate a humanoid robot using Gazebo with plugins. Since our actual model uses Dynamixel motors, I'd like to know how exactly they work to make the simulation as realistic as possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Gazebo offers two options to control joints. One is a PID controller, provided by the &lt;a href=&quot;http://osrf-distributions.s3.amazonaws.com/gazebo/api/1.6.3/classgazebo_1_1physics_1_1JointController.html&quot; rel=&quot;nofollow&quot;&gt;&lt;code&gt;JointController&lt;/code&gt; class&lt;/a&gt;. The other way is to directly set a torque to the joint. (The PID method too is ultimately implemented using torques).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Currently, I'm trying the PID-based implementation. I've used a P-only controller with damping on all joints (I've had to guess both values). However, there is a large amount of noise, and the difference between actual and desired position is at times as much as 10-12 degrees (especially when the foot of the robot hits the ground).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does the actual motor use a PID controller as well? I can't seem to find the details here, &lt;a href=&quot;http://www.hizook.com/files/users/3/EX-106_Robotis_Dynamixel_Servo_UserGuide.pdf&quot; rel=&quot;nofollow&quot;&gt;Dynamixel EX-106 User's guide&lt;/a&gt;, but this link, &lt;a href=&quot;http://www.trossenrobotics.com/dynamixel-ex-106-robot-actuator.aspx&quot; rel=&quot;nofollow&quot;&gt;Dynamixel EX-106+ Robot Actuator&lt;/a&gt; mentions &quot;Compliance/PID : Yes&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the motor &lt;em&gt;does&lt;/em&gt; use a PID controller, then what are the parameters? And how does it allow us to set moving speed then?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the motor doesn't use a PID controller, then what is the pattern of torque provided? In the manual (first link), I found this&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;From the current position 200 to 491 ( 512-16-5=491 ), movement  is &#xA;  made  with appropriate  torque  to  reach  the  set  speed; from  491 &#xA;  to  507  ( 512-5=507 ), torque is continuously reduced to the Punch &#xA;  value; from  507  through 517 (  512+5=517  ), no torque is generated.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This is rather vague though, and no further details are provided.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, I'm aware that extremely high damping and extremely high P-values might do the trick. But I want to simulate what actually happens on the motors, and that is probably not the way to go. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd appreciate it if anyone has any idea of what Dynamixel servos do, or examples of simulated Dynamixel motors anywhere else.&lt;/p&gt;&#xA;" OwnerUserId="13371" LastEditorUserId="9176" LastEditDate="2016-04-07T09:30:10.537" LastActivityDate="2017-01-30T16:02:25.640" Title="Simulating Dynamixel motors in Gazebo" Tags="&lt;pid&gt;&lt;simulation&gt;&lt;gazebo&gt;&lt;humanoid&gt;&lt;dynamixel&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9572" PostTypeId="1" CreationDate="2016-04-05T10:06:57.907" Score="2" ViewCount="2078" Body="&lt;p&gt;I'm trying to find the transfer function of a quadrotor with two controller loops, following next structure:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/VFN0D.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/VFN0D.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know how to calculate the attitude stability controller, which relate rotor speed and desired angles. However, I have no clear at all how to implement the translational controller transfer function, whose output is the desired angle that the rotors must achieve considering the position I want to translate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Considering that two controllers are PD, how can you calculate the translational controller transfer function and include it in the system? Time domain equations in the outer loop are next, where U terms relate to the thrust axis components. Thanks&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/M4juk.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/M4juk.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10539" LastEditorUserId="10539" LastEditDate="2016-04-05T11:01:07.060" LastActivityDate="2016-07-04T19:53:32.657" Title="Transfer function of a quadrotor position controller" Tags="&lt;quadcopter&gt;&lt;control&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9573" PostTypeId="2" ParentId="8394" CreationDate="2016-04-05T10:13:17.067" Score="1" Body="&lt;p&gt;I don't know the details of the ADXL345 or the MPU-9250, but I wouldn't expect a MPU-9250 to respond to the Arduino running a program for the ADXL345.  So my first suggestion is to search for the right program for your board.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Secondly I think you are using I2C to connect to the board.  The SCL and SDA lines need pull up resistors, so place a 4.7K resistor between SDA and VCC and another between SCL and VCC.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both the chips you mentioned are 3.3V chips, the boards might handle 5V but you need to check the data sheets. If they can't hand 5V then you will need a logic level shifter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might have problems getting a good connection on the two holes, but that's only a problem if you need them and I don't think with I2C you will.&lt;/p&gt;&#xA;" OwnerUserId="10717" LastActivityDate="2016-04-05T10:13:17.067" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9574" PostTypeId="2" ParentId="9572" CreationDate="2016-04-05T11:48:17.050" Score="1" Body="&lt;p&gt;You have the equations (although I don't understand your $\ddot x$ term in the position equation).  You just need to take it into the frequency domain, where a time derivative is $s$ times the variable, and solve for output over input $\vec x \over \vec u$.    If you search for state space transfer functions it should be straightforward.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2016-04-05T11:48:17.050" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="9575" PostTypeId="2" ParentId="9572" CreationDate="2016-04-05T12:43:30.070" Score="1" Body="&lt;p&gt;If your $u_x$, $u_y$, and $u_z$ terms are desired accelerations, and it looks like they are, then the quad would be commanded to an attitude where those accelerations can be achieved. So&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$ \ddot x_{vehicle} = T_{vehicle}^T *F_{throttle} - g$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $\ddot x_{vehicle}$ is the acceleration of the vehicle in the inertial frame and $T_{vehicle}$ is the transformation from the inertial frame to the vehicle frame. This is the equation relating the output of the position controller to the input of the attitude controller. It allows you to solve for the desired attitude and throttle (which you seem to be missing from your system).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-&#xA;the real answer to your question is that you will not be able to get a transfer function relating desired position to commanded attitude because the transformation in the equation above is nonlinear. &lt;/p&gt;&#xA;" OwnerUserId="8842" LastEditorUserId="8842" LastEditDate="2016-04-05T17:20:52.010" LastActivityDate="2016-04-05T17:20:52.010" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9576" PostTypeId="2" ParentId="9555" CreationDate="2016-04-05T14:05:59.260" Score="1" Body="&lt;p&gt;The command rate should be the same as the sensors (so ~15 ms)&lt;/p&gt;&#xA;" OwnerUserId="9743" LastActivityDate="2016-04-05T14:05:59.260" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9578" PostTypeId="1" CreationDate="2016-04-05T20:16:04.473" Score="1" ViewCount="65" Body="&lt;p&gt;There is a message system which does not appear to be document in the OI spec. This appears to be a a canonical terminal type serial interface in which messages come back such as firmware version and stuff. I am not sure how to determine what the end of this type of message is? It is a fixed number of end lines? or Bytes. One message seems to indicate STR730 which would be a 730 byte string.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The open interface spec seems to indicate a non canonical interface spec in which you read a fixed number of bytes with no processing of end lines. Is this correct?&lt;/p&gt;&#xA;" OwnerUserId="13273" LastActivityDate="2016-04-07T18:53:16.003" Title="Create2 Serial. Canonical versus Number of Bytes interface" Tags="&lt;irobot-create&gt;&lt;roomba&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9580" PostTypeId="1" AcceptedAnswerId="9581" CreationDate="2016-04-05T23:12:25.040" Score="2" ViewCount="199" Body="&lt;p&gt;I have been looking for a cheap ultrasonic sensor that is not blind under +/-30 cm but the only sensors I could find use the following shape, which is not suitable for my project (because of the robot design that only has 1 hole, and not 2..) : &lt;a href=&quot;https://i.stack.imgur.com/PDYXh.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/PDYXh.jpg&quot; alt=&quot;shape 1&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any chance to find a sensor with that other shape with a range starting around 5cm ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/FebEN.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FebEN.png&quot; alt=&quot;shape 2&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Actually I am wondering if that 2nd shape makes this constraint mandatory or if I just did not found the appropriate product.&lt;/p&gt;&#xA;" OwnerUserId="9582" LastActivityDate="2016-04-05T23:17:03.040" Title="Ultrasonic sensor range and shape" Tags="&lt;ultrasonic-sensors&gt;" AnswerCount="1" CommentCount="3" ClosedDate="2016-04-06T20:00:32.077" ContentLicense="CC BY-SA 3.0" />
  <row Id="9581" PostTypeId="2" ParentId="9580" CreationDate="2016-04-05T23:17:03.040" Score="2" Body="&lt;p&gt;A single transducer sensor has to both send out the sound and then sense the return sound. It takes time for the vibration to stop after making the sound and that is time it can't sense a return. So close distances can't be sensed by a single transducer sensor.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2016-04-05T23:17:03.040" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9582" PostTypeId="2" ParentId="9578" CreationDate="2016-04-06T00:29:19.050" Score="1" Body="&lt;p&gt;You should not have to worry about those messages (or length of) since they are disabled once the OI is started (with the start command '128'). After OI is started, flush whatever data is on the line then request your desired sensor data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you noted, these are mainly just firmware/hardware version strings. There is no defined length of these messages, but they should always be terminated by &quot;\r\n&quot;.&lt;/p&gt;&#xA;" OwnerUserId="9743" LastEditorUserId="9743" LastEditDate="2016-04-07T18:53:16.003" LastActivityDate="2016-04-07T18:53:16.003" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9583" PostTypeId="1" CreationDate="2016-04-06T00:30:47.387" Score="0" ViewCount="859" Body="&lt;p&gt;I want to convert an electric ATV (quad) for kids (like the &lt;a href=&quot;http://www.high-per.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;HIGHPER&lt;/a&gt; ATV-6E) to radio control for a robotics project. These small ATVs are about a meter long and weigh about 40 kg. I need to choose servo motors for steering and braking. What grade servos do I need and how much torque do they need to have? Can I use the strongest RC servo I may find (like &lt;a href=&quot;https://www.pololu.com/product/1390&quot; rel=&quot;nofollow noreferrer&quot;&gt;this 115kg/cm one&lt;/a&gt; or maybe even more, with metal gears of course) or do I need an &quot;industrial grade&quot; servo?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I plan to use one servo for steering and one for braking. For braking the ATV has mechanical disc brakes - two discs in the front and one common disc in the rear (there are two brake levers - front/rear). I plan to use only one servo and use it either for front or for rear. The plan is to mount the brake wire to the servo which would &quot;simulate&quot; the lever movement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I guess I could also make a &quot;weak&quot; servo stronger by adding a proper gear, but I am not really into mechanical engineering much and would prefer an off-the-shelf component.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/N8SXx.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/N8SXx.jpg&quot; alt=&quot;Highper ATV&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="1021" LastEditorUserId="1021" LastEditDate="2016-04-06T00:38:00.350" LastActivityDate="2016-04-06T11:18:16.403" Title="Servo motors for large scale RC car" Tags="&lt;servomotor&gt;&lt;rcservo&gt;&lt;steering&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9584" PostTypeId="2" ParentId="9583" CreationDate="2016-04-06T01:30:20.273" Score="1" Body="&lt;p&gt;What an interesting project!  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For braking I was going to suggest a linear actuator, but then I realized you have an ATV already designed for the human hand to actuate the brakes.   Why don't you look into low cost electric robotic grippers, and mount one to the handlebar to take advantage of the existing brake lever design?  That would be pretty easy to integrate and control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Steering is more of a challenge.  I agree with @hauptmech that you need to measure the required torques.   That could be difficult, though, since the range of torques needed to steer will vary widely through your operating scenarios.   My suggestion is to put the ATV on a downward incline, so that the steering wheels have the most load on them, and use a torque wrench to measure how much (worst-case) torque is needed to steer.   This should be sufficient to size that motor (or motor + gearbox).   You will have to keep in mind how fast you need the steering column to rotate, but I suspect if you can overcome the torque necessary to move the front wheels when standing still, you shouldn't have an issue with speed of rotation.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2016-04-06T01:30:20.273" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9585" PostTypeId="2" ParentId="9583" CreationDate="2016-04-06T11:18:16.403" Score="0" Body="&lt;p&gt;For the steering: I have seen boat &quot;autopilots&quot; which use a linear actuator that connects (via a bearing or universal joint) to the boat's steering tiller. I think a similar arrangement would work attached to one end of your handlebars. It would have to be robustly attached to prevent it shaking loose, and it would have high force but might be quite slow.&lt;/p&gt;&#xA;" OwnerUserId="9578" LastActivityDate="2016-04-06T11:18:16.403" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9587" PostTypeId="2" ParentId="9569" CreationDate="2016-04-07T21:08:13.407" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;The paper does not say anything about Subsystems. Does it mean that I can't implement it?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This question implies that you don't really know what a subsystem is in the context of matlab.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's as if you got a new car and a friend of yours says &quot;that's a nice yellow color&quot; and your response would be &quot;What does 'yellow' mean? Can it still drive?&quot;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Please take a step back and think about your approach once again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This matlab/simulink code is not ment to be used as an introduction tutorial for beginners. Try to familiarize yourself with the fundamental basics of the programming platform separately.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Otherwise you have to solve one equation for two unknowns: What parts of the code are the way they are due to the content of the paper and what due to how matlab/simulink works?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the paper you can deduce what they implemented, but if you don't know &lt;em&gt;how&lt;/em&gt;, it becomes hard (and more importantly: unreliable) to deduce any further information from the code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Choose tools according to the problem at hand. If using the tool becomes a problem in of itself, you can get trapped in the need-new-tool-to-solve-the-problem-of-the-previous-tool loop.&lt;/p&gt;&#xA;" OwnerUserId="9860" LastActivityDate="2016-04-07T21:08:13.407" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9588" PostTypeId="2" ParentId="9569" CreationDate="2016-04-07T21:08:18.440" Score="1" Body="&lt;p&gt;It looks like the second image is a Simulink system. That doesn't mean it's not also SimMechanics, because there are ways to interface Simulink signals to Simscape. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The thing that is hard (impossible) for you is that those are subsystem blocks, meaning that you can't replicate the code contained inside of them without being able to see inside. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The thing that's really a pain is that it &lt;em&gt;might&lt;/em&gt; be stock functionality, or a couple stock blocks strung together, but you can't tell because it's been encapsulated. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-04-07T21:08:18.440" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9590" PostTypeId="1" CreationDate="2016-04-08T03:30:39.770" Score="0" ViewCount="507" Body="&lt;p&gt;Is it possible to downgrade from ROS Jade to Indigo?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For those who are not yet familiar with Robot Operating System (ROS), here: &lt;a href=&quot;http://ros.org&quot; rel=&quot;nofollow&quot;&gt;ROS&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13390" LastEditorUserId="13390" LastEditDate="2016-04-08T03:38:50.233" LastActivityDate="2016-06-07T06:59:28.657" Title="Downgrade ROS from Jade to Indigo" Tags="&lt;ros&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9591" PostTypeId="2" ParentId="9590" CreationDate="2016-04-08T06:05:08.173" Score="2" Body="&lt;p&gt;You can have Jade and Indigo installed in parallel on the same system and use each one individually with different projects.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ask on &lt;a href=&quot;http://answers.ros.org&quot; rel=&quot;nofollow&quot;&gt;answers.ros.org&lt;/a&gt;. Don't forget to tell them what OS &amp;amp; OS version you are using. Installing Indigo in parallel via manual installation should not present any problems. apt style installation depends on your OS &amp;amp; version.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2016-04-08T06:05:08.173" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9592" PostTypeId="1" AcceptedAnswerId="9594" CreationDate="2016-04-08T07:37:42.407" Score="2" ViewCount="354" Body="&lt;p&gt;In the D*Lite algorithm, described in line 21 of Figure 3, on page 4, in &lt;a href=&quot;http://idm-lab.org/bib/abstracts/papers/aaai02b.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;D* Lite&lt;/a&gt;, the &lt;code&gt;main()&lt;/code&gt; starts with defining $s_{last}=s_{start}$. But value of $s_{last}$ is never updated in the entire algorithm. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what is the purpose of defining this term and what does it mean?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/8qTBu.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8qTBu.png&quot; alt=&quot;Pseudo Code from figure 3&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11751" LastEditorUserId="9176" LastEditDate="2016-04-08T14:22:43.547" LastActivityDate="2016-04-08T17:29:18.317" Title="Meaning of s_last in D star Lite algorithm" Tags="&lt;mobile-robot&gt;&lt;control&gt;&lt;robotic-arm&gt;&lt;motion-planning&gt;&lt;algorithm&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9593" PostTypeId="1" CreationDate="2016-04-08T10:38:01.300" Score="2" ViewCount="774" Body="&lt;p&gt;I would like to mechanically measure the distance a kids electric ATV traveled. The ATV will not be used with kids but as a mobile robot instead. It has a common rear axle for both rear wheels which I think could be a good place to put an odometer on (since the chance both wheels will slip should be minimal). Regarding suspension it has a single shock for rear axle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My plan is to put a bigger gear on the axle itself and then add a smaller gear to it on which some kind of sensor would measure number of its rotations. One rotation of the axle may be something like 20 rotations of the small gear. What kind of sensor can I use for sensing rotation?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another way of making an odometer may be some kind of optical solution (disc with holes and an optical sensor) but this seems to be rather complicated and also the the direction of travel could not be easily estimated (unless the motor is running in some direction).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I just found a term called &lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Wheel_speed_sensor&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wheel Speed Sensor&lt;/a&gt;&lt;/strong&gt; which looks interesting and seems to employ primarily non-contact sensing (which is definitely better than mechanical gears). Rather then optical solution I like the Hall effect sensor solution which may be simple and mechanically robust. But still, my question is open on how to implement this...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to use the odometer for both speed estimation and distance estimation. I need to read the sensor from C/C++ on a Linux box.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: The thing I am looking for is probably correctly called a rotary encoder or a wheel encoder.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ATV may look like one of these:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/K8Snh.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/K8Snh.jpg&quot; alt=&quot;atv&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/pMs7P.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/pMs7P.jpg&quot; alt=&quot;atv&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="1021" LastEditorUserId="1021" LastEditDate="2016-05-07T09:38:33.823" LastActivityDate="2016-05-07T09:38:33.823" Title="Mechanical odometer with digital output" Tags="&lt;mobile-robot&gt;&lt;sensors&gt;&lt;odometry&gt;&lt;encoding&gt;&lt;rotation&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9594" PostTypeId="2" ParentId="9592" CreationDate="2016-04-08T11:46:02.273" Score="3" Body="&lt;p&gt;$s_{last}$ &lt;em&gt;does&lt;/em&gt; change.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking at the pseudo code, $s_{last}$ is updated upon &lt;em&gt;each&lt;/em&gt; iteration of the &lt;code&gt;while&lt;/code&gt; loop in &lt;code&gt;main()&lt;/code&gt;, in line 31, $s_{last}=s_{start}$, &lt;em&gt;if&lt;/em&gt; the condition on line 29 is met:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;if any edge costs changed&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Likewise, in figure 4 $s_{last}$ is updated on line 39:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/DUa7p.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/DUa7p.png&quot; alt=&quot;Pseudo Code from figure 4&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9176" LastEditorUserId="9176" LastEditDate="2016-04-08T17:29:18.317" LastActivityDate="2016-04-08T17:29:18.317" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="9595" PostTypeId="2" ParentId="9593" CreationDate="2016-04-08T12:00:23.070" Score="1" Body="&lt;p&gt;I don't think that an odometer is the right sensor for this task.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The wheels will definetly slip. The error will add up quickly and the measurement will not be very good. These types of sensors are not made to measure several kilometers of distance traveled.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Use GPS instead. It does not require any modification of the vehicle. The data is much more versatile, because you can put it onto a map, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you were to go for a walk yourself, would you attach some sensor to your feet or rather hit the &lt;strong&gt;record&lt;/strong&gt; button on a Smartphone?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I want to use this mechanical odometer to supplement GPS. GPS (even with RTK corrections) is not reliable at all in areas where the signal is blocked (tall buildings etc.). So a properly setup mechanical odometer will be MUCH more accurate than GPS&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;To be properly setup, the odometry has to have it's own wheel independent from the motor driven ones that's in contact with the ground. This way you can guarantee that the influence of slip is minimized.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But looking at the ground in your images, I doubt that this will work well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead, use computer vision to determine the position and speed of the vehicle. OpenCV provides functionality for such applications.&lt;/p&gt;&#xA;" OwnerUserId="9860" LastEditorUserId="9860" LastEditDate="2016-04-08T12:22:10.580" LastActivityDate="2016-04-08T12:22:10.580" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="9596" PostTypeId="2" ParentId="9593" CreationDate="2016-04-08T13:02:13.223" Score="2" Body="&lt;p&gt;The automotive industry frequently uses Hall effect sensors to measure shaft and gear rotation.  The Hall effect has some beneficial properties:  it operates over a wide range of temperatures, is more immune to contaminants than, say, optical technologies, comes in a wide range of response profiles, and with multiple mounting options.  I'd suggest placing a magnet on the face of your smaller gear, near the circumference, and use a cylindrical, barrel mount Hall pickup to sense each rotation of the magnet.  If you also want to know direction of rotation, mount a second magnet/Hall sensor slightly offset angularly from the first (and at a different radius from the center of the gear).  The timing of the two signals will give rotation direction.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2016-04-08T13:02:13.223" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9597" PostTypeId="1" AcceptedAnswerId="9598" CreationDate="2016-04-08T21:58:10.373" Score="0" ViewCount="280" Body="&lt;p&gt;I am having an issue with some hand-eye calibration. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So i am using a simple robot which at its tool point has an stereo camera mounted on it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to perform some visual serving/tracking based stereo images extracted from the camera in the &quot;hand&quot;. The camera provides me x,y,z coordinates of the object I want to track. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can at all time extract an homogenous transformation matrix from base to tool (not cam) as &lt;code&gt;(T_tool_base)&lt;/code&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Firstly... I guess i would need perform some form of robot to (vice versa) camera calibration, My idea was that would consist of something like this &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;T_base_world = (T_base_tool) (T_tool_cam) (T_cam_world) &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Where the T_tool_cam would entail the calibration... since the camera is at the tool point, would that entail the T_tool_cam should entail information on how much the camera is displaced from the tool point, and how it is rotated according to the tool point? or is not like that?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;secondly... How do i based purely x,y,z coordinate make an homogeneous transformation matrix, which includes an rotation matrix ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;thirdly.. Having a desired Transformation matrix which in theory this     &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;T_base_world = (T_base_tool) (T_tool_cam) (T_cam_world) &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;would provide me, would an inverse kinematics solution provide me with one or multiple solution?... In theory should this only provide me one, or what?&lt;/p&gt;&#xA;" OwnerUserId="9620" LastEditorUserId="184" LastEditDate="2016-04-08T22:47:06.620" LastActivityDate="2016-04-09T05:56:29.180" Title="Hand-eye calibration?" Tags="&lt;robotic-arm&gt;&lt;inverse-kinematics&gt;&lt;rotation&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="9598" PostTypeId="2" ParentId="9597" CreationDate="2016-04-09T00:34:31.310" Score="1" Body="&lt;p&gt;If $x, y, z$ are the coordinates of the object in the camera frame, then the camera to object transform will be:&#xA;$$\begin{pmatrix}1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0\\ 0 &amp;amp; cos\theta &amp;amp; -sin\theta &amp;amp; 0\\&#xA;0 &amp;amp; sin\theta &amp;amp; cos\theta &amp;amp; 0\\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1\\ \end{pmatrix}&#xA;\begin{pmatrix}0 &amp;amp; 0 &amp;amp; 0 &amp;amp; x\\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; y\\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; z\\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1\\ \end{pmatrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The tool-&gt;cam transform includes a single rotation about the $x$ axis of the tool by $\theta$ from the tool frame to the camera frame, followed by the camera to object transform.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Rotation of the object is unaccounted for.&lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="184" LastEditDate="2016-04-09T05:56:29.180" LastActivityDate="2016-04-09T05:56:29.180" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="9601" PostTypeId="2" ParentId="9569" CreationDate="2016-04-09T11:46:02.013" Score="1" Body="&lt;p&gt;The paper you mentioned in the comment clearly presents on SimMechanics model, but it also presnets the necessary equation to solve the inverse kinematics problem. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems that the screenshot you have submitted calculates sine and cosine functions of the angles. This would not be necessary if simmemchanics blocks would be used in the subsystems. It seems that the simmechanics model is used to verify the correctness of the inverse kinematics. It is a very convenient way to verify and validate the results. And the correctness of the equations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the point of view of the results the two approaches, the analytic solution and the numeric solution using simmechanics have to be the same (with a given tolerance of the numerical error). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;From a performance (calculation time) point of view, the analytical solution should be superior to any other numerical solution.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2016-04-09T11:46:02.013" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9602" PostTypeId="1" AcceptedAnswerId="9606" CreationDate="2016-04-10T00:28:02.920" Score="1" ViewCount="472" Body="&lt;p&gt;In optimized D*Lite algorithm as shown in the figure below (page 5, of the paper &lt;a href=&quot;http://robotics.cs.tamu.edu/dshell/cs625/aaai02b.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;D*Lite&lt;/a&gt;), when the procedure ComputeShortestPath() is called for the first time in line 31, U(list of inconsistent vertices) contains only goal vertex ($s_{goal}$). Thus in the procedure ComputeShotestPath()(line 10-28), $u = s_{goal}$. And as, $k_{old}=k_{new}$ (because $k_m=0$), condition $k_{old}\leq k_{new}$ is satisfied and $u = s_{goal}$ is again inserted in U with same value of $k_{old}=k_{new}$. Thus, it seems that line(11-15) will run forever, and the algorithm will not be able to find the shortest path from goal to start.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that this algorithm has been widely used and I am failing to understand it. But where am I going wrong? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/uXuNY.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/uXuNY.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11751" LastActivityDate="2016-04-10T15:50:38.183" Title="ComputeShortestPath() in Dstar lite algorithm" Tags="&lt;mobile-robot&gt;&lt;control&gt;&lt;robotic-arm&gt;&lt;motion-planning&gt;&lt;algorithm&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9603" PostTypeId="2" ParentId="9544" CreationDate="2016-04-10T01:05:23.377" Score="1" Body="&lt;p&gt;The Create 2 &lt;a href=&quot;http://www.irobot.com/About-iRobot/STEM/Create-2/Projects.aspx&quot; rel=&quot;nofollow&quot;&gt;projects page&lt;/a&gt; has a tutorial on how to make a &lt;a href=&quot;http://www.irobotweb.com/~/media/MainSite/PDFs/About/STEM/Create/Bluetooth_Serial.pdf?la=en&quot; rel=&quot;nofollow&quot;&gt;Bluetooth serial module&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://www.sparkfun.com/products/retired/12581&quot; rel=&quot;nofollow&quot;&gt;Rootooth&lt;/a&gt; should work too.  Although it is no longer sold, but you might be able to find one somewhere.  Or make one yourself since SparkFun put all the designs online.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I couldn't find much information on the BAM, but I bet you could make it work with the Create2.  Consult the above mentioned projects page to determine the new Create pinout and if any level shifting is required.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2016-04-10T01:05:23.377" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9604" PostTypeId="1" CreationDate="2016-04-10T09:56:30.487" Score="2" ViewCount="635" Body="&lt;p&gt;I'm working on an autonomous quad copter, I have two GPS co-ordinates (source and destination co-ordinates). I need to move my quad from the source to the destination, for this I need to calculate the heading and set the yaw value of my quad. How can I calculate the heading and make sure the quad is headed in the right direction as the target co-ordinates?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I use magnetometer the declination angle will vary from place to place and so I will have to keep changing the declination angle. If I'm calculating based on just the GPS co-ordinates, it's not accurate. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the best way to do this?  How do I calculate the above? &lt;/p&gt;&#xA;" OwnerUserId="13407" LastEditorUserId="9176" LastEditDate="2016-04-11T12:35:29.107" LastActivityDate="2016-04-11T13:26:27.407" Title="Quadcopter heading calculation" Tags="&lt;quadcopter&gt;&lt;gps&gt;&lt;magnetometer&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9605" PostTypeId="2" ParentId="9604" CreationDate="2016-04-10T14:31:42.810" Score="1" Body="&lt;p&gt;The habitual way to do this is to have an attitude and position loop for the quadrotor, as in next picture.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/M8uE9.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/M8uE9.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Attitude loop manages the quadrotor to achieve the desired angles (pitch, yaw, and roll). Position circuit on the other hand, calculates which are those desired angles depending on the path you want to follow or the point you want to reach.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One GPS is used for desired position, while your other GPS should be used for actual coordinates.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Have a look at &lt;a href=&quot;https://robotics.stackexchange.com/questions/4675/position-controller-for-a-quadrotor&quot;&gt;this thread&lt;/a&gt; where formulas and expressions are furtherly explained&lt;/p&gt;&#xA;" OwnerUserId="10539" LastActivityDate="2016-04-10T14:31:42.810" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9606" PostTypeId="2" ParentId="9602" CreationDate="2016-04-10T15:50:38.183" Score="2" Body="&lt;p&gt;The first relevant line is line 6:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$U.Insert(s_{goal}, [h(s_{start}, s_{goal});0]);$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically speaking, this is an association of the goal to some vector with two values in it. Now $U$ looks like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$U:s_{goal}\rightarrow \left(\begin{matrix}h(s_{start}, s_{goal})\\0\end{matrix}\right)$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, $U$ is a list of such associations, but within the context of this question there's only one element in it.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Thus in the procedure &lt;code&gt;ComputeShotestPath()&lt;/code&gt; (line 10-28), $u = s_{goal}$&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That is correct.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;And as, $k_{old}=k_{new}$ (because $k_m=0$)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That is not necessarily correct. The relevant lines are 12&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$k_{old}=U.TopKey();$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking at what $U$ is above, this line is equivalent to:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$k_{old}=\left(\begin{matrix}h(s_{start}, s_{goal})\\0\end{matrix}\right);$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and line 13 for $k_{new}$:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$k_{new}=CalculateKey(u)\color{red}{)};$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;I think the extra parenthesis is a typo. I will ignore it.&lt;/em&gt; This value actually comes from a function call and results in the following:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$k_{new}=\left(\begin{matrix}\min\big(g(s), rhs(s)\big) + h(s_{start}, s) +k_m\\rhs(s)\end{matrix}\right);$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where $s$ is the parameter passed to the function, which is actually $u$ which in turn is actually $s_{goal}$, also as you stated $k_m=0$, thus:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$k_{new}=\left(\begin{matrix}\min\big(g(s_{goal}), rhs(s_{goal})\big) + h(s_{start}, s_{goal})\\rhs(s_{goal})\end{matrix}\right);$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know what the functions $g()$ and $rhs()$ do (look them up in the paper) and what values they return, but if $rhs(s_{goal}) = 0$ and $g(s_{goal}) &amp;gt; rhs(s_{goal})$ then yes it's true that $k_{new}=k_{old}$.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;condition $k_{old}\leq k_{new}$ is satisfied&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I think there's your problem. I for one cannot see a condition $k_{old}\leq k_{new}$ being evaluated in the code. I guess you are referring to line 14, but that line actually looks like that:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$if(k_{old} \color{red}{\dot\lt}k_{new})$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; a less-than-or-equal sign. That is a les-than sign with a dot above it. I don't think they are the same thing and I wonder if the following is actually valid way to express that:&#xA;$$\le\neq\dot\lt$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway, what the heck is $\dot\lt$? I don't know. What I think it means is that it's an &lt;strong&gt;element wise&lt;/strong&gt; less-than operator. In languages like Matlab or Octave it's common to add a dot to denote that an operator is applied element wise. The thing is that it doesn't make too much sense to apply a less-than operator to a vector. It's defined for scalar values, not vectors or matrices. I admit that I'm not sure about this one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The condition in line 14 is not satisfied. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Now all of the above is under the assumption that the condition of the while loop in &lt;code&gt;ComputeShotestPath()&lt;/code&gt; is true and the body of the loop is executed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The (first part of the) condition looks like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$U.TopKey()\dot\lt CalculateKey(s_{start})$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the assumptions from above this expands to:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\left(\begin{matrix}h(s_{start}, s_{goal})\\0\end{matrix}\right)&#xA;\dot\lt&#xA;\left(\begin{matrix}\min\big(g(s_{start}), rhs(s_{start})\big) + h(s_{start}, s_{start})\\rhs(s_{start})\end{matrix}\right)$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Again, I don't know  how this algorithm works exactly, I had a quick look at the paper and from what I understood is that $h(s_{start}, s_{start}) = 0$ and $rhs(s_{start}) = 0$, which makes me doubt that the condition is true.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In other words: I don't think the while loop is even running at all and if it actually does, it's not because of that part of its condition.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;tl,dr;&lt;/strong&gt;&#xA;Holy cow, stop staring at nontextual pseudocode! Get yourself an implementation (or write it yourself) and use a debugger to step through the program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Run the actual code on an actual machine&lt;/strong&gt;, this is what matters in the end.&lt;/p&gt;&#xA;" OwnerUserId="9860" LastActivityDate="2016-04-10T15:50:38.183" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="9608" PostTypeId="1" AcceptedAnswerId="9630" CreationDate="2016-04-11T08:42:22.780" Score="1" ViewCount="1186" Body="&lt;p&gt;I have been stuck on this for weeks, I really hope that someone can help me with this,thank you in advance.&#xA;I am trying to write an IMU attitude estimation algorithm using quaternion kalman filter. So based on this research paper: &lt;a href=&quot;https://hal.archives-ouvertes.fr/hal-00968663/document&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://hal.archives-ouvertes.fr/hal-00968663/document&lt;/a&gt;, I have developed the following pseudo code algorithm:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Predict Stage:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Qk+1/k = Ak * Qk;  where Ak contains the gyro measurement. &#xA;&lt;a href=&quot;https://i.stack.imgur.com/CDjLC.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/CDjLC.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pk+1/k = Ak * Pk *Ak.transpose() + Q; where Q is assumed to be zero.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After prediction, we can use this formula to get the supposed gravity measurement of accelerometer Yg in body frame :&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yg = R * G;  // R is the rotation matrix generated from quaternion Qk+1/k and G = (0,0,0,9.81).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This equation then translates to the following equation which allows me to get measurement model matrix H.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;H * Qk+1/k = 0; //where H stores value related to (Yg-G).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Update Stage:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;K = P * H * (H * P * H.transpose()+R)^(-1); //R should be adaptively adjusted but right now initialized as identity matrix&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Qk+1/k+1 = (I-KH)Qk+1/k;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Qk+1/K+1 = (Qk+1/K+1)/|Qk+1/k+1|; //Normalize quaternion&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pk+1/K+1 = (I - KH)Pk+1/k;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The following is the main part of my code. The complete C++ code is at here &lt;a href=&quot;https://github.com/lyf44/fcu&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/lyf44/fcu&lt;/a&gt; if you want to test.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Matrix3f skew_symmetric_matrix(float a, float b, float c, float d){&#xA;    Matrix3f matrix;&#xA;    matrix &amp;lt;&amp;lt; a,d*(-1),c,&#xA;              d,a,b*(-1),&#xA;              c*(-1),b,a;&#xA;    return (matrix);&#xA;}&#xA;&#xA;void Akf::state_transition_matrix(float dt,float gx,float gy, float gz){&#xA;    Vector3f tmp;&#xA;    tmp(0) = gx*PI/180;&#xA;    tmp(1) = gy*PI/180;&#xA;    tmp(2) = gz*PI/180;&#xA;    float magnitude = sqrt(pow((float)tmp(0),2)+pow((float)tmp(1),2)+pow((float)tmp(2),2));&#xA;&#xA;    /*q(k+1) = |  cos(|w|*dt/2)       | quaternion_multiply q(k)&#xA;               |  w/|w|*sin(|w|*dt/2) |&#xA;    */&#xA;    //w/|w|*sin(|w|*dt/2)&#xA;    tmp = tmp/magnitude*sin(magnitude*dt/2);&#xA;    //quaternion multiplication&#xA;    A(0,0) = cos(magnitude*dt/2);&#xA;    A.block&amp;lt;3,1&amp;gt;(1,0) = tmp;&#xA;    A.block&amp;lt;1,3&amp;gt;(0,1) = tmp.transpose()*(-1);&#xA;&#xA;    Matrix3f skew_symmetric;&#xA;    skew_symmetric = skew_symmetric_matrix((float)A(0,0),(float)tmp(0),(float)tmp(1),(float)tmp(2));&#xA;    A.block&amp;lt;3,3&amp;gt;(1,1) = skew_symmetric;&#xA;}&#xA;&#xA;void Akf::observation_model_matrix(Vector3f meas){&#xA;    Vector3f G;&#xA;    Vector3f tmp;&#xA;    G &amp;lt;&amp;lt; 0,0,9.81;&#xA;    /* H = | 0        -(acc-G).transpose     |&#xA;     *     | (acc-G)  -(acc+G).skewsymmetric |&#xA;     */&#xA;    tmp = meas-G;&#xA;    H(0,0) = 0;&#xA;    H.block&amp;lt;3,1&amp;gt;(1,0) = tmp;&#xA;    H.block&amp;lt;1,3&amp;gt;(0,1) = tmp.transpose()*(-1);&#xA;    tmp = tmp+G+G;&#xA;    Matrix3f matrix;&#xA;    matrix = skew_symmetric_matrix(0,(float)tmp(0),(float)tmp(1),(float)tmp(2));&#xA;    H.block&amp;lt;3,3&amp;gt;(1,1) = matrix*(-1);&#xA;    //H = H*(0.5);&#xA;    cout&amp;lt;&amp;lt;&quot;H&quot;&amp;lt;&amp;lt;endl;&#xA;    cout&amp;lt;&amp;lt;H&amp;lt;&amp;lt;endl;&#xA;    cout&amp;lt;&amp;lt;&quot;H*X&quot;&amp;lt;&amp;lt;endl;&#xA;    std::cout&amp;lt;&amp;lt;H*X&amp;lt;&amp;lt;std::endl;&#xA;}&#xA;&#xA;void Akf::setup(){&#xA;    X_prev = Vector4f::Zero(4,1);&#xA;    X_prev(0) = 1;&#xA;    Q = Matrix4f::Zero(4,4);&#xA;    Z = Vector4f::Zero(4,1);&#xA;    R = Matrix4f::Identity(4,4);&#xA;    P_prev = Matrix4f::Identity(4,4);&#xA;    P_prev = P_prev*(0.1);&#xA;    I = Matrix4f::Identity(4,4);&#xA;&#xA;    sum = Vector4f::Zero(4,1);&#xA;    noise_sum = Matrix4f::Zero(4,4);&#xA;    counter=1;&#xA;}&#xA;&#xA;void Akf::predict_state(){&#xA;    cout&amp;lt;&amp;lt;(60*counter%360)&amp;lt;&amp;lt;endl;&#xA;    X = A*X_prev;&#xA;    A_T = A.transpose();&#xA;    P = A*P_prev*A_T+Q;&#xA;}&#xA;&#xA;void Akf::update_state(){&#xA;  Matrix4f PH_T;&#xA;  Matrix4f tmp;&#xA;&#xA;  PH_T = P*H.transpose();&#xA;  S = H*PH_T+R;&#xA;  if (S.determinant()!= 0 )&#xA;  {&#xA;      tmp = S.inverse();&#xA;      K = P*H*tmp;&#xA;      //std::cout&amp;lt;&amp;lt;&quot;K&quot;&amp;lt;&amp;lt;std::endl;&#xA;      //std::cout&amp;lt;&amp;lt;K&amp;lt;&amp;lt;std::endl;&#xA;      X_updated = (I-K*H)*X;&#xA;      X_updated = X_updated /(X_updated.norm());&#xA;      P_updated = (I-K*H)*P;&#xA;  }&#xA;  else{&#xA;      X_updated = X;&#xA;      std::cout&amp;lt;&amp;lt; &quot;error-tmp not inversible!&quot;&amp;lt;&amp;lt;std::endl;&#xA;  }&#xA;  X_prev = X_updated;&#xA;  P_prev = P_updated;&#xA;}&#xA;&#xA;void rotation_matrix(Vector4f q,Matrix3f &amp;amp;rot_matrix){&#xA;    int i;&#xA;    for (i=1;i&amp;lt;4;i++){&#xA;        q(i) = q(i)*(-1);&#xA;    }&#xA;    Matrix3f matrix;&#xA;    matrix(0,0) = pow((float)q(0),2)+pow((float)q(1),2)-pow((float)q(2),2)-pow((float)q(3),2);&#xA;    matrix(0,1) = 2*(q(1)*q(2)-q(0)*q(3));&#xA;    matrix(0,2) = 2*(q(0)*q(2)+q(1)*q(3));&#xA;    matrix(1,0) = 2*(q(1)*q(2)+q(0)*q(3));&#xA;    matrix(1,1) = pow((float)q(0),2)-pow((float)q(1),2)+pow((float)q(2),2)-pow((float)q(3),2);&#xA;    matrix(1,2) = 2*(q(2)*q(3)-q(0)*q(1));&#xA;    matrix(2,0) = 2*(q(1)*q(3)-q(0)*q(2));&#xA;    matrix(2,1) = 2*(q(0)*q(1)+q(2)*q(3));&#xA;    matrix(2,2) = pow((float)q(0),2)-pow((float)q(1),2)-pow((float)q(2),2)+pow((float)q(3),2);&#xA;    rot_matrix = matrix;&#xA;}&#xA;&#xA;Vector3f generate_akf_random_measurement(Vector4f state){&#xA;    int i;&#xA;    //compute quaternion rotation matrix&#xA;    Matrix3f rot_matrix;&#xA;    rotation_matrix(state,rot_matrix);&#xA;    //rot_matrix*acceleration in NED = acceleration in body-fixed frame&#xA;    Vector3f true_value = rot_matrix*G;&#xA;    std::cout&amp;lt;&amp;lt;&quot;true value&quot;&amp;lt;&amp;lt;std::endl;&#xA;    std::cout&amp;lt;&amp;lt;true_value&amp;lt;&amp;lt;std::endl;&#xA;    for (i=0;i&amp;lt;3;i++){&#xA;        noisy_value(i) = true_value(i) + (-1) + (float)(rand()/(float)(RAND_MAX/2));&#xA;    }&#xA;    return (noisy_value);&#xA;}&#xA;&#xA;int main(){&#xA;      float gx,gy,gz,dt;&#xA;      gx =60; gy=0; gz =0; //for testing, let it rotate around x axis by 60 degree  &#xA;      myakf.state_transition_matrix(dt,gx,gy,gz); // dt is elapsed time&#xA;      myakf.predict_state();&#xA;      Vector4f state = myakf.get_predicted_state();&#xA;      Vector3f meas = generate_akf_random_measurement(state);&#xA;      myakf.observation_model_matrix(meas);&#xA;      myakf.measurement_noise();&#xA;      myakf.update_state();&#xA;      q = myakf.get_updated_state();&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The problem that I face is that my code does not work.The prediction stage works fine but the updated quaternion state is only correct for the first few iterations and it starts to drift away from the correct value. I have checked my code against the research paper multiple times and ensured that it is in accordance with the algorithm proposed by the research paper.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my test, I am rotating around x axis by 60 degree per iterations. The number below the started is the angle of rotation. state and updated state is the predicted and updated quaternion respectivly while true value, meas, result are acceleration due to gravity in body frame.As the test result indicates, everything is way off after rotating 360 degrees.&#xA;The following is my test result:  &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;1&#xA;started&#xA;60&#xA;state&#xA;0.866025&#xA;0.5&#xA;0&#xA;0&#xA;true value&#xA;0&#xA;8.49571&#xA;4.905&#xA;meas&#xA;0.314533&#xA;7.97407&#xA;4.98588&#xA;updated state&#xA;0.866076&#xA;0.499913&#xA;-2.36755e-005&#xA;1.56256e-005&#xA;result&#xA;0.000555564&#xA;8.49472&#xA;4.90671&#xA;&#xA;1&#xA;started&#xA;120&#xA;state&#xA;0.500087&#xA;0.865975&#xA;-2.83164e-005&#xA;1.69446e-006&#xA;true value&#xA;0.000306622&#xA;8.4967&#xA;-4.90329&#xA;meas&#xA;-0.532868&#xA;8.79841&#xA;-4.80453  &#xA;updated state&#xA;0.485378&#xA;0.862257&#xA;-0.129439&#xA;-0.064549&#xA;result&#xA;0.140652&#xA;8.37531&#xA;-5.10594&#xA;&#xA;1 &#xA;started&#xA;180&#xA;state&#xA;-0.0107786&#xA;0.989425&#xA;-0.0798226&#xA;-0.12062&#xA;true value&#xA;-2.35843&#xA;-0.0203349&#xA;-9.52226&#xA;meas&#xA;-1.39627&#xA;-0.889284&#xA;-8.74243&#xA;updated state&#xA;-0.0195091&#xA;0.981985&#xA;-0.151695&#xA;-0.110965&#xA;result&#xA;-2.19598&#xA;-0.0456112&#xA;-9.56095 &#xA;&#xA;1&#xA;started&#xA;240&#xA;state&#xA;-0.507888&#xA;0.840669&#xA;-0.0758893&#xA;-0.171946&#xA;true value&#xA;-3.59229&#xA;-8.12105&#xA;-4.16894&#xA;meas&#xA;-4.52356&#xA;-7.73113&#xA;-4.98735&#xA;updated state&#xA;-0.53758&#xA;0.811101&#xA;-0.212643&#xA;-0.0889171&#xA;result&#xA;-3.65783&#xA;-8.18397&#xA;-3.98485&#xA;&#xA;1&#xA;started&#xA;300&#xA;state&#xA;-0.871108&#xA;0.433644&#xA;-0.139696&#xA;-0.183326&#xA;true value&#xA;-3.94732&#xA;-6.909&#xA;5.73763&#xA;meas&#xA;-4.36385&#xA;-6.98853&#xA;5.39759&#xA;updated state&#xA;-0.86404&#xA;0.436764&#xA;-0.102296&#xA;-0.228487&#xA;result&#xA;-3.69216&#xA;-6.94565&#xA;5.86192&#xA;1&#xA;started  &#xA;0&#xA;state&#xA;-0.966663&#xA;-0.0537713&#xA; 0.0256525&#xA; -0.249024 &#xA;true value&#xA;0.749243&#xA;0.894488&#xA;9.74036&#xA;meas&#xA;-0.194541&#xA;0.318586&#xA;10.1868&#xA;updated state&#xA;-0.78986&#xA;-0.0594022&#xA;0.0311688&#xA;-0.609607&#xA;result&#xA;1.1935&#xA;0.547764&#xA;9.72171 &#xA;&#xA;1&#xA;started&#xA;60&#xA;state&#xA;-0.654338&#xA;-0.446374&#xA;0.331797&#xA;-0.512351&#xA;true value&#xA;8.74674&#xA;2.39526&#xA;3.74078&#xA;meas&#xA;9.36079&#xA;2.96653&#xA;3.57115&#xA;updated state&#xA;-0.52697&#xA;-0.512048&#xA;0.221843&#xA;-0.64101&#xA;result&#xA;8.73351&#xA;2.50411&#xA;3.70018&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Can someone help me confirm that my understanding about the theory of this quaternion kalman filter and my pseudo code is correct? Also, if anyone has implemented attitude estimation using maybe a different version of quaternion kalman filter, I would greatly appreciate if you can provide a pseudo code and a little explanation.&#xA;Thank you guys very much!&lt;/p&gt;&#xA;" OwnerUserId="13357" LastEditorUserId="13357" LastEditDate="2016-04-12T02:40:26.467" LastActivityDate="2016-04-14T06:52:21.133" Title="Quaternion Kalman Filter Algorithm" Tags="&lt;quadcopter&gt;&lt;kalman-filter&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="9609" PostTypeId="1" CreationDate="2016-04-11T11:41:14.223" Score="2" ViewCount="1526" Body="&lt;p&gt;Assume that I have a rigid body for which I know that it can rotate with respect to a global reference frame (which is considered fixed and already given) for only a few degrees of angle, so I can describe its rotation by using the small angle approximation. For this system, I would like to know if there is a rotation representation that offers more accuracy when compared with other representation methods.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main representation methods that I considered are the euler angles and the pitch-yaw-roll transformation. To my perception, I think that pitch-yaw-roll representation is expected to be more accurate, since all the angles are expressed with respect to the initial coordinate frame. On the other hand, euler angles are defined on different frames, so I am not sure if the resulting angles will be really small.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To sum up, I know that the body can rotate for only a few degrees and I would like to know which coordinate representation is much probable to deliver the smallest angles, such that the small angle approximation is more valid.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It could also be the case that there is not a general answer (so it depends on the specific configuration) but still I haven't found anything about this topic on the related literature!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt;: This question is not related to numerical issues. Therefore, it is assumed that all the possible rotation matrix descriptions (Euler, PYR etc) result in the same, exact coordinate vector. Therefore, the question is if there exists one parametrization that is composed of the smallest possible angles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt; (no small angle approx used): Assume I have a coordinate frame which describes a point in space by the following vector&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$P2=\begin{bmatrix} 4 \\ 1 \\ 0.05 \end{bmatrix}$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given another coordinate frame which is rotated with respect to the previous one, the description of the same point is given by     &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$P1=\begin{bmatrix} 3.8933 \\&#xA;    1.3566 \\&#xA;   -0.0630 \end{bmatrix}$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using Euler angles, I can find that the rotation matrix &lt;span class=&quot;math-container&quot;&gt;$R_{euler}$&lt;/span&gt; is characterized by the angles &lt;span class=&quot;math-container&quot;&gt;$0.1,0.2,0.1$&lt;/span&gt; rads, which correspond to the angle of rotation around z axis, the rotation around the resulting y axis and the rotation around the resulting z axis, respectively (these are basic stuff, it is explained in many books.). So I have that &lt;span class=&quot;math-container&quot;&gt;$P1=R_{euler} P2$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I want to find the corresponding rotation matrix if I use the pitch-yaw-roll representation. Here I have to solve an optimization problem and the solution that I get (maximum error between P1 and the estimated P1 is &lt;span class=&quot;math-container&quot;&gt;$3 \times 10^{-8}$&lt;/span&gt;) delivers me the following angles&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\begin{bmatrix}  -0.0103   \\ 0.0257  \\  0.0902\end{bmatrix}$&lt;/span&gt;,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;which correspond to the rotation around the x,y and z axis of the initial coordinate frame. &lt;/p&gt;&#xA;" OwnerUserId="13415" LastEditorUserId="13415" LastEditDate="2020-01-15T11:09:38.797" LastActivityDate="2020-01-15T11:09:38.797" Title="Most accurate rotation representation for small angles" Tags="&lt;inverse-kinematics&gt;&lt;geometry&gt;&lt;rotation&gt;" AnswerCount="4" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="9610" PostTypeId="2" ParentId="9609" CreationDate="2016-04-11T12:54:00.447" Score="3" Body="&lt;p&gt;@jpro, I think you are not understanding something about kinematics.  Whether you use Euler angles, or homogeneous transforms, or rotation matrices, or quaternians, or any other kinematic representation, &lt;em&gt;ALL&lt;/em&gt; of them relate the object's pose with respect to some coordinate frame.  If you refer back to a reference coordinate frame located at the end of the robot's forearm (or the wrist center if the wrist is spherical), you will ensure that any errors caused by the kinematics of the arm joints are not part of your equations.  But you can pick which type of kinematic model you use and you should find the same accuracy for them all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edited based in your update:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Rotation Matrix is unique.  See the answers here:  &lt;a href=&quot;https://math.stackexchange.com/questions/105264/3d-rotation-matrix-uniqueness&quot;&gt;https://math.stackexchange.com/questions/105264/3d-rotation-matrix-uniqueness&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each term of this 3x3 can be represented many ways, as you are trying to do.  A silly example:   If one of your angles is $\theta_1$, you could instead write it as the sum of ten smaller angles.  But $R$ would be the same.   There is probably a way to represent each of the nine terms with a minimum (least-squares) set of terms.  But $R$ will be the same.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;One more edit (sorry):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$R$ is orthonormal.  That puts six constraints on the nine terms ($||R|| = 1$, the magnitude of each row (and column) is also 1, and the rows and columns are mutually orthogonal).  So you have three degrees of freedom to play with.   There is your optimization problem.   Pick any representation, and as you find different ways to represent those nine terms, it may be challenging to relate that back to the physical system.   I believe you will end up at screw coordinates.   You may want to research canonical kinematics for ideas.   But I suspect you will find different robot geometries, and different motion goals, will result in a change for which standard notation results in the smallest angles.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastEditorUserId="-1" LastEditDate="2017-04-13T12:19:24.817" LastActivityDate="2016-04-23T18:15:48.753" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="9611" PostTypeId="2" ParentId="9604" CreationDate="2016-04-11T13:26:27.407" Score="1" Body="&lt;p&gt;A GPS unit doesn't give you heading, although it is possible to estimate the heading based on successive GPS readings. Unless you're looking to &lt;a href=&quot;http://images.ridemonkey.com/index.php?size=full&amp;amp;src=http%3A%2F%2Fcdn.swellpath.com%2Fassets%2Fset-it-and-forget-it.png&quot; rel=&quot;nofollow&quot;&gt;set and forget&lt;/a&gt; the heading, which you shouldn't be doing anyways because of wind and other disturbances, you should be using some form of a controller to do course correction along the path. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Say you don't correct for declination and just opt to accept the magnetometer as truth. This will put you on a (slightly) wrong heading for the destination. You &lt;em&gt;should&lt;/em&gt; be filtering IMU output with the GPS signal to get a corrected position estimate that reduces drift from the IMU. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So eventually your corrected position updates and &quot;tells&quot; your controller that you're off course, so the flight controller corrects and alters the heading slightly to point at the destination. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This happens continuously, meaning that you'll take a sub-optimal arc instead of a straight line from origin to destination, but unless you're going to &lt;a href=&quot;https://en.wikipedia.org/wiki/Magnetic_declination#Air_navigation&quot; rel=&quot;nofollow&quot;&gt;correct for declination angle&lt;/a&gt;, which you seem to not want to do, then there's nothing else really you can do about it. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-04-11T13:26:27.407" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9612" PostTypeId="2" ParentId="9609" CreationDate="2016-04-11T13:39:19.573" Score="2" Body="&lt;p&gt;It sounds to me like you want something where you can (exaggerating) express 30 degrees as thirty 1 degree transforms, such that you can then do something where $\sin{(1)} \approx 1$ and &quot;cheat&quot; that transform to use $\sin{(30)}\approx 30$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can't do this, because as BendingUnit22 put it, &quot;Truth is invariant under change of notation.&quot; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's similar to saying, &quot;Well, a mile is 5280 feet, and a foot is 12 inches, and each inch is 25.4mm, and a millimeter is basically nothing, so a mile is a 1.6 million times nothing, so a mile is nothing.&quot; It doesn't work because there is &lt;em&gt;error&lt;/em&gt; with any approximation, and that error propagates with every successive step. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-04-11T13:39:19.573" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="9613" PostTypeId="2" ParentId="9609" CreationDate="2016-04-11T13:55:47.570" Score="0" Body="&lt;p&gt;There is one option (I'm tempted to write trick) that might help you. in a limited set of conditions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;uC / uP systems are exceedingly good at measuring time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, if you can either assume that the speed is constant or that you can compensate for changes, you could convert your measurements of angles into measurements of time (i.e. how long does it take to reach a certain angular position).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This would enable faster fixed point math and you could even build calibration tables for the motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But it really depends on the specific application if anything of what I described can bring any benefit. &lt;/p&gt;&#xA;" OwnerUserId="13414" LastActivityDate="2016-04-11T13:55:47.570" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9614" PostTypeId="2" ParentId="9608" CreationDate="2016-04-11T14:26:32.447" Score="0" Body="&lt;p&gt;I hope this is / hope it isn't your problem, as it could be a face-palm moment, but I don't think you're calculating your Kalman gain correctly. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've only used a Kalman filter a couple times in the past, so I'm by no means an expert on it, but I believe that the Kalman gains are calculated:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;K = P H^T (HP H^T + R)^{-1}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You have, in your pseudo-code &lt;strong&gt;and&lt;/strong&gt; in your pasted code:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;K = P H (HP H^T + R)^{-1}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I believe what you're missing is that $H^T$, or &lt;code&gt;H.transpose()&lt;/code&gt; in your code. You define &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;PH_T = P*H.transpose();&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;but &lt;code&gt;H.transpose()&lt;/code&gt; is used a couple times, so I think you would be better off defining&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;H_T = H.transpose();&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and using that in the &lt;strong&gt;two&lt;/strong&gt; locations you need $H^T$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, I hope this is/isn't your problem - I know how painful it is to waste so much time on a typo. If this &lt;em&gt;doesn't&lt;/em&gt; solve your problem, please post more information on how you're getting from the gyro output to the quaternion. I believe this is where you will find your issues. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-04-11T14:26:32.447" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9616" PostTypeId="1" CreationDate="2016-04-11T20:51:11.813" Score="0" ViewCount="101" Body="&lt;p&gt;I have assembled a 4WD car using kits I bought on ebay.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have 4 motors similar to this one: &lt;a href=&quot;https://i.stack.imgur.com/7DFlDm.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7DFlDm.jpg&quot; alt=&quot;motor&quot;&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The description says:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;Operating voltage: 3V~12VDC &#xA;  (recommended operating voltage of about 6 to 8V)&lt;/li&gt;&#xA;  &lt;li&gt;Maximum torque: 800gf cm min (3V)&lt;/li&gt;&#xA;  &lt;li&gt;No-load speed: 1:48 (3V time)&lt;/li&gt;&#xA;  &lt;li&gt;The load current: 70mA (250mA MAX) (3V)&lt;/li&gt;&#xA;  &lt;li&gt;This motor with EMC, anti-interference ability. &#xA;  The microcontroller without interference.&lt;/li&gt;&#xA;  &lt;li&gt;Size: 7x2.2x1.8cm(approx)&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I am not too fond of the max speed I can reach, but I would be able to provide more power, because I have a 12V 2A battery onboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So far I have used 6V, because that seemed to be the safer voltage choice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Has anybody tried successfully higher voltages, without wearing down the motor in few hours (I've read this can happen)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively, can someone recommend replacement motors that would tolerate reliably a higher power envelope?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to preserve the gearbox and replace only the motor, if possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think I could fit a motor 2-4 mm longer (replacing the transparent strap which bonds it to the gearbox), if that makes any difference.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BTW, I'm making the assumption:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;higher_voltage =&gt; higher_torque =&gt; higher_speed&lt;/p&gt;&#xA;&#xA;&lt;p&gt;but I'm not sure it's overall correct.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I expect that it would at least produce higher acceleration during the transients.&lt;/p&gt;&#xA;" OwnerUserId="13414" LastEditorUserId="13414" LastEditDate="2016-04-12T08:49:17.280" LastActivityDate="2016-04-12T17:50:00.463" Title="Motor upgrade to higher torque?" Tags="&lt;brushless-motor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9617" PostTypeId="2" ParentId="9616" CreationDate="2016-04-12T16:53:38.163" Score="1" Body="&lt;p&gt;Few points,&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Voltage is like a reservoir with water and it doesn't matter how big it is if your tap only allows a thin stream of water, your current in this case. For motors, it is the current that is important as long as the voltage is in the operating range. Current determines how fast your motor can spin.&lt;/li&gt;&#xA;&lt;li&gt;Torque is always inversely proportional to speed. The higher torque u need the slower the motor will have to be, you can see the torque vs speed graphs in the datasheets.&lt;/li&gt;&#xA;&lt;li&gt;Cannot really suggest you a motor just like that since you haven't provided any requirements like what is the target torque required? Since a motor can be practically useful only if its torque can be specified since it relates a lot of things like the motor's size, power rating etc.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To point you in the right direction, Information about where the motor is being used is required - linear drive units, rc cars, propellers etc. For starters, you can look at these links - &lt;a href=&quot;http://www.pittman-motors.com/portals/0/resources/applying_dc_motors_in_linear_motion_applications1.pdf&quot; rel=&quot;nofollow&quot;&gt;Link1&lt;/a&gt;, &lt;a href=&quot;http://www.baldormotion.com/pdf/Linear%20Motor%20Sizing%20Sheet.pdf&quot; rel=&quot;nofollow&quot;&gt;Link2&lt;/a&gt;, &lt;a href=&quot;http://www.orientalmotor.com/technology/articles/motor-sizing-calculations.html&quot; rel=&quot;nofollow&quot;&gt;Link3&lt;/a&gt;, &lt;a href=&quot;http://www.moog.com/literature/MCG/moapp.pdf&quot; rel=&quot;nofollow&quot;&gt;Link4&lt;/a&gt;, &lt;a href=&quot;http://www.msitec.com/images/pdf/free/move_profile.pdf&quot; rel=&quot;nofollow&quot;&gt;Link5&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="3905" LastEditorUserId="3905" LastEditDate="2016-04-12T17:50:00.463" LastActivityDate="2016-04-12T17:50:00.463" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="9618" PostTypeId="2" ParentId="9384" CreationDate="2016-04-12T20:07:15.677" Score="2" Body="&lt;p&gt;&lt;strong&gt;GA&lt;/strong&gt; and &lt;strong&gt;PSO&lt;/strong&gt; methods are generally and more simply executed on a &lt;strong&gt;model of the plant&lt;/strong&gt; you want to tune your PID for, not on the physical system. This way, you can of course converge much faster toward the solution and also you don't apply potentially disruptive gains to your PID controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The very first step is thus to come up with a good model of your process through identification.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastActivityDate="2016-04-12T20:07:15.677" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9619" PostTypeId="1" CreationDate="2016-04-13T10:20:54.323" Score="0" ViewCount="140" Body="&lt;p&gt;I am trying to implement a path planner to generate a path that moves the robot from q_start to q_goal.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Q_goal is extracted from a stereo camera mounted on the tool, from&#xA;which I extract x,y,z coordinates of the desired position, the rotation can be arbitrary. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The robot I am using is an industrial ur5 robot arm, the software I use is capable of performing Jacobian based inverse kinematics given a transformation matrix with rotation and translation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;my inverse kinematics provide me with only one solution, which is ok, but doesn't provide me flexibility for path planning...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How do I using inverse kinematics determine all possible q-configurations that fulfills my criteria of having the desired x,y,z coordinates? &lt;/p&gt;&#xA;" OwnerUserId="9620" LastEditorUserId="9620" LastEditDate="2016-04-13T14:06:08.023" LastActivityDate="2016-09-11T21:55:04.993" Title="Extracting as many possible end configurations as possible" Tags="&lt;robotic-arm&gt;&lt;inverse-kinematics&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9620" PostTypeId="1" AcceptedAnswerId="10309" CreationDate="2016-04-13T11:34:24.927" Score="5" ViewCount="849" Body="&lt;p&gt;I'am trying to implement a path following algorithm based on MPC (Model Predictive Control), found in this paper : &lt;a href=&quot;http://www2.imm.dtu.dk/pubdb/views/edoc_download.php/189/pdf/imm189.pdf&quot; rel=&quot;noreferrer&quot;&gt;Path Following Mobile Robot in the Presence of Velocity Constraints&lt;/a&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Principle:&lt;/strong&gt; Using the robot model and the path, the algorithm predict the behavior of the robot over N future steps to compute a sequence of commands $(v,\omega)$ to allow the robot to follow the path without overshooting the trajectory, allowing to slow down before a sharp turn, etc.&lt;br&gt;&#xA;$v:$ Linear velocity&lt;br&gt;&#xA;$\omega:$ Angular velocity&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The robot:&lt;/strong&gt; I have a non-holonomic robot like this one (Image extracted from the paper above) :&lt;br&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/K6MRY.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/K6MRY.png&quot; alt=&quot;Non-holonomic robot with castor wheel. (Extracted from the paper above)&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Here is my problem:&lt;/strong&gt; Before implementing on the mobile robot, I'am trying to compute the needed matrices (using Matlab) to test the efficiency of this algorithm. At the end of the matrices computation some of them have dimension mismatch&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;What I did:&lt;/strong&gt;&lt;br&gt;&#xA;For those interested, this calculation is from §4 (4.1, 4.2, 4.3, 4.4) p6-7 of the paper.  &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;h2&gt;4.1 Model&lt;/h2&gt;&#xA;  &#xA;  &lt;p&gt;$z_{k+1} =  Az_k + B_\phi\phi_k + B_rr_k$ (18) &#xA;  with:&lt;br&gt;&#xA;  $A = \begin{bmatrix} 1 &amp;amp; Tv \\ 0 &amp;amp; 1 \end{bmatrix}$&#xA;  $B_\phi = \begin{bmatrix} {T^2\over2}v^2\\ Tv  \end{bmatrix}$&#xA;  $B_r = \begin{bmatrix} 0 &amp;amp; -Tv \\ 0 &amp;amp; 0 \end{bmatrix}$&lt;br&gt;&#xA;  $T$: sampling period&lt;br&gt;&#xA;  $v$: linear velocity&lt;br&gt;&#xA;  $k$: sampling index (i.e. $t= kT$)&lt;br&gt;&#xA;  $z_k:$ the state vector $z_k = (d_k, \theta_k)^T$ position and angle difference to the reference path&#xA;  $r_k:$ the reference vector $r_k = (0, \psi_k)^T$ with $\psi_k$ is the reference angle of the path at step k &lt;/p&gt;&#xA;  &#xA;  &lt;h2&gt;4.2 Criterion&lt;/h2&gt;&#xA;  &#xA;  &lt;p&gt;The predictive receding horizon controller is based on a minimization of the criterion&lt;br&gt;&#xA;  $J= \Sigma^N_{n=0} (\hat{z}_{k+n} - r_{k+n})^T Q(\hat{z}_{k+n} - r_{k+n}) + \lambda\phi^2_{k+n}$, (20)&lt;br&gt;&#xA;  Subject to the inequality constraint&lt;br&gt;&#xA;  $ P\begin{bmatrix} v_n \\ v_n\phi_n \end{bmatrix} \leq q,$&lt;br&gt;&#xA;  $n=0,..., N,$&lt;br&gt;&#xA;  where $\hat{z}$ is the predicted output, $Q$ is a weight matric, $\lambda$ is a scalar weight, and $N$ is prediction horizon.&lt;/p&gt;&#xA;  &#xA;  &lt;h2&gt;4.3 Predictor&lt;/h2&gt;&#xA;  &#xA;  &lt;p&gt;An n-step predictor $\hat{z}_{k+n|k}$ is easily found from iterating (18). Stacking the predictions $\hat{z}_{k+n|k},n = n,...,N$ in the vector $\hat{Z}$ yields&lt;br&gt;&#xA;  $\hat{Z} = \begin{bmatrix} \hat{z}_{k|k} \\ \vdots \\ \hat{z}_{k+N|k}\end{bmatrix} = Fz_k + G_\phi\Phi_k + G_rR_k$  (22)&lt;br&gt;&#xA;  with&lt;br&gt;&#xA;  $\Phi_k = \begin{bmatrix} \phi_k, \ldots, \phi_{k+N}\end{bmatrix}^T$,&lt;br&gt;&#xA;  $R_k = \begin{bmatrix} r_k, \ldots, r_{k+N}\end{bmatrix}^T$,&lt;br&gt;&#xA;  and&lt;br&gt;&#xA;  $F = \begin{bmatrix}I &amp;amp; A &amp;amp; \ldots &amp;amp; A^N \end{bmatrix}^T$&lt;br&gt;&#xA;  $G_i = \begin{bmatrix} 0 &amp;amp; 0 &amp;amp; \ldots &amp;amp; 0 &amp;amp; 0 \\ B_i &amp;amp; 0 &amp;amp; \ldots &amp;amp; 0 &amp;amp; 0 \\ AB_i &amp;amp; B_i &amp;amp; \ddots &amp;amp; \vdots &amp;amp; \vdots \\ \vdots &amp;amp; \ddots &amp;amp; \ddots &amp;amp; 0 &amp;amp; 0 \\ A^{N-1}B_i &amp;amp; \ldots &amp;amp; AB_i &amp;amp; B_i &amp;amp; 0 \end{bmatrix}$  &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;where index $i$ should be substituted with either $\phi$ or $r$&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;h2&gt;4.4 Controller&lt;/h2&gt;&#xA;  &#xA;  &lt;p&gt;Using the N-step predictor (22) simplifies the criterion (20) to&#xA;  $J_k = (\hat{Z}_k - R_k)^T I_q (\hat{Z}_k - R_k) + \lambda\Phi^T_k\Phi_k$, (23)&#xA;  where $I_q$ is a diagonal matrix of appropriate dimension with instances of Q in the diagonal. The unconstrained controller is found by minimizing (23) with respect to $\Phi$:&lt;br&gt;&#xA;  $\Phi_k = -L_zz_k - L_rR_k$, (24)&lt;br&gt;&#xA;  with&lt;br&gt;&#xA;  $L_z = (lambda + G^T_wI_qG_w)^{-1}G^T_wI_qF$&#xA;  $L_r = (lambda + G^T_wI_qG_w)^{-1}G^T_wI_q(Gr - I)$&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I'am trying to compute $\Phi_k = -L_zz_k - L_rR_k$ but the dimension of $L_r$ and $R_k$ does not match for matrix multiplication.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Parameters are :   &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;$T=0.1s$&lt;/li&gt;&#xA;&lt;li&gt;$N=10$&lt;/li&gt;&#xA;&lt;li&gt;$\lambda=0.0001$&lt;/li&gt;&#xA;&lt;li&gt;$Q=\begin{bmatrix} 1 &amp;amp; 0 \\ 0 &amp;amp; \delta \end{bmatrix}$ with $\delta=0.02$&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I get :&lt;br&gt;&#xA;$R_k$ a (11x2) matrix (N+1 elements of size 2x1, transposed)&lt;br&gt;&#xA;$G_w$ a (22x11) matrix&lt;br&gt;&#xA;$G^T_w$ a (11x22) matrix&lt;br&gt;&#xA;$I_q$ a (22x22) matrix&lt;br&gt;&#xA;$F$ a (22x2) matrix&lt;br&gt;&#xA;$G_r$ a (22x22) matrix    &lt;/p&gt;&#xA;&#xA;&lt;p&gt;so Lz computation gives (according to the matrix sizes)&lt;br&gt;&#xA;$L_z=(scalar + (11x22)(22x22)(22x11))^{-1} (11x22)(22x22)(22x22)$&lt;br&gt;&#xA;a (11x2) matrix.&lt;br&gt;&#xA;as $z_k$ is (2x1) matrix, doing $L_zz_k$ from (24) is fine.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;and Lr computation gives (according to the matrix sizes)&#xA;$L_r=(scalar + (11x22)(22x22)(22x11))^{-1} (11x22)(22x22)((22x22) - (22x22))$&lt;br&gt;&#xA;a (11x22) matrix.&lt;br&gt;&#xA;as $R_k$ is (11x2) matrix, doing $L_rR_k$ from (24) is not possible.&lt;br&gt;&#xA;I have a (11x22) matrix multiplicated by a (11x2) matrix.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm sure I'm missing something big here but unable to see what exactly.&#xA;Any help appreciated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="13430" LastActivityDate="2017-01-13T04:35:36.910" Title="Mobile robot path following using Model Predictive Control (MPC)" Tags="&lt;mobile-robot&gt;&lt;navigation&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9621" PostTypeId="1" CreationDate="2016-04-13T19:36:47.880" Score="1" ViewCount="334" Body="&lt;p&gt;What are the main differences between electric motor and internal combustion engine for an ATV-sized mobile robot platform in terms of functionality, implementation difficulty (&quot;RC&quot; conversion, &quot;electronic&quot; operation), durability and maintenance when used as an autonomous platform? A full sized ATV/UTV like Polaris Ranger (EV) is in question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are the advantages/disadvantages basically the same as the differences between electric and nitro RC cars or does the bigger scale adds something important to the game? I can think of the main differences like bigger range and faster &quot;refueling&quot; with IC and less maintenance with electric but I am interested in a detailed comparison.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The transmission for the IC engine is considered to be automatic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: The fuel injection for IC is considered to be electronic (EFI) but I do not know whether that also means the &quot;electronic&quot; throttle (no mechanical wire as with carburetor?). Whatever the throttle may be I see the lag between its &quot;actuation&quot; and the engine running into higher RPM and giving more power/speed as the main disadvantage for IC control - however, it may probably be quite easy dealt with in software (by adding some timeout when checking desired RPM).&lt;/p&gt;&#xA;" OwnerUserId="1021" LastEditorUserId="1021" LastEditDate="2016-04-14T11:24:36.267" LastActivityDate="2016-04-14T11:24:36.267" Title="Electric vs. internal combustion engine for propulsion" Tags="&lt;mobile-robot&gt;&lt;electronics&gt;&lt;engine&gt;&lt;electric&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="9622" PostTypeId="1" AcceptedAnswerId="9633" CreationDate="2016-04-13T20:00:56.027" Score="4" ViewCount="682" Body="&lt;p&gt;I am a  uncertain about how to compute the right homogeneous transformation matrix to compute an inverse kinematic Q-configuration. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking at robot like this &lt;a href=&quot;https://i.stack.imgur.com/cuV2q.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/cuV2q.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where at the end of this robot I have a camera mounted on to it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The purpose of my application is to make the robot follow an object, so basically tracking it.  The camera provide me with an X,Y,Z coordinate, which the position i want place my robot arm. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;First question - How do i set up the desired homogenous transformation matrix?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The way i see it, I have 2 transformation matrices being &lt;code&gt;T_tool_base&lt;/code&gt; and &lt;code&gt;T_world_tool&lt;/code&gt; which become &lt;code&gt;T_world_base = (T_tool_base) (T_world_tool)&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is that how do i compute my desired transformation matrix. &#xA;I think i know how i should setup the transformation matrix for the camera which would be like this&lt;/p&gt;&#xA;&#xA;&lt;p&gt;T_world_tool = &lt;code&gt;0 0 0 x&#xA;               0 0 0 y&#xA;               0 0 0 z&#xA;               0 0 0 1&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Second question is regarding the rotation matrix, how do prescribe such that rotation in arbitrary as long the endpoint has the desired position in the world frame?)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;but what should t_tool_base entail? should it entail the transformation of its current state or the desired transformation, and if so how do i extract the desired t_tool_base transformation?...&lt;/p&gt;&#xA;" OwnerUserId="13439" LastActivityDate="2016-04-14T15:03:31.593" Title="inverse kinematics for 6 jointed robots" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;inverse-kinematics&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9625" PostTypeId="1" CreationDate="2016-04-13T22:45:37.787" Score="1" ViewCount="580" Body="&lt;p&gt;I have some data obtained from an experiment in terms of movements and observations with odometry and sensor data. My task is to find the probability mass on each of the grid cells after each set of motion and observation. I'm a bit lost in figuring out how to compute probability mass for each of the grid cell.&#xA;My odometry information is in terms of rotation, translation and rotation and my sensor information is in terms of range and bearing angle. &#xA;How do I calculate the probability of robot present in each of the grid cell?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have the formula for belief after motion as summation(P(x|u, x')xBel(x'))&#xA;How do I compute the motion model with noise?&lt;/p&gt;&#xA;" OwnerUserId="13441" LastActivityDate="2020-02-14T18:23:11.340" Title="Bayesian filter for 2-D grid localizaton" Tags="&lt;localization&gt;&lt;filter&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9629" PostTypeId="1" AcceptedAnswerId="9648" CreationDate="2016-04-14T04:46:44.323" Score="4" ViewCount="660" Body="&lt;p&gt;Good day,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to ask why is it that when I add the Yaw control to my PID controller for each motor. The quadcopter refuses to take off or maintain its altitude. I am curently using a Cascaded PID controller for attitude hold using an Accelerometer, a Magnetometer and a Gyroscope, and a 40Hz Ultrasonic Sensor for Altitude Hold. Since the scope is indoor I have done away with the barometer due to its +-12m error. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Resulting Response&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Without Yaw Control, the plot below shows the response of the quadrotor.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/4WSGy.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4WSGy.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With Yaw Control, the plot below shows the response of the quadrotor.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/ow2tB.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ow2tB.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Debugging&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found out that each of the outputs from each PID's give a too high of a value such that when summed together goes way over the PWM limit of 205 or Full Throttle.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Without yawPID contribution&#xA;The limiter kicks in without damaging the desired response of the system thus is still able to fly albeit with oscillatory motion along the z axis or height&#xA;&lt;a href=&quot;https://i.stack.imgur.com/6w8rv.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6w8rv.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/xaSx3.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xaSx3.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;With yawPID contribution&#xA;The added yaw components increases the sum of the PID's way above the limit thus the limiter compesates the excess too much resulting in an over all lower PWM output for all motors thus the quad never leaves the ground.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/fli5D.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fli5D.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/9GvBM.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9GvBM.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;//Motor Front Left (1)&#xA;float motorPwm1 =  pitchPID + rollPID + yawPID + baseThrottle + baseCompensation;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;//Motor Front Right (2)&#xA;float motorPwm2 =  pitchPID - rollPID - yawPID + baseThrottle + baseCompensation; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;//Motor Back Left (3)&#xA;float motorPwm3 = -pitchPID + rollPID - yawPID + baseThrottle + baseCompensation; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;//Motor Back Right (4)&#xA;float motorPwm4 = -pitchPID - rollPID + yawPID + baseThrottle + baseCompensation;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Background&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PID parameters for the Pitch, Yaw and Roll were tuned individually meaning, the base throttle was set to a minimum value required for the quadcopter to be able to lift itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PID parameters for the Altitude Sensor is tuned with the other controllers active (Pitch and Roll).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Possible Problem&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Limiter algorithm&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;A possible problem is that the algorithm I used to limit the maximum and the minimum throttle value may have caused the problem. The following code is used to maintain the ratio of the motor values instead of limiting them. The code is used as a two stage limiter. In the 1st stage, if one motorPWM is less than the set baseThrottle, the algorithm increases each motor PWM value until none of them are below that. In the 2nd stage, if one motorPWM is more than the set maxThrottle, the algorithm decreases each motor PWM value until none of them are above that. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;//Check if PWM is Saturating - This method is used to fill then trim the outputs of the pwm that gets fed into the gpioPWM() function to avoid exceeding the earlier set maximum throttle while maintaining the ratios of the 4 motor throttles. &#xA;&#xA;float motorPWM[4] = {motorPwm1, motorPwm2, motorPwm3, motorPwm4};&#xA;float minPWM = motorPWM[0];&#xA;int i;&#xA;for(i=0; i&amp;lt;4; i++){ // Get minimum PWM for filling&#xA;    if(motorPWM[i]&amp;lt;minPWM){&#xA;        minPWM=motorPWM[i];&#xA;    }&#xA;}&#xA;&#xA;cout &amp;lt;&amp;lt; &quot; MinPWM = &quot; &amp;lt;&amp;lt; minPWM &amp;lt;&amp;lt; endl;&#xA;&#xA;if(minPWM&amp;lt;baseThrottle){&#xA;    float fillPwm=baseThrottle-minPWM; //Get deficiency and use this to fill all 4 motors&#xA;    cout &amp;lt;&amp;lt; &quot; Fill = &quot; &amp;lt;&amp;lt; fillPwm &amp;lt;&amp;lt; endl;&#xA;    motorPwm1=motorPwm1+fillPwm;&#xA;    motorPwm2=motorPwm2+fillPwm;&#xA;    motorPwm3=motorPwm3+fillPwm;&#xA;    motorPwm4=motorPwm4+fillPwm;&#xA;}&#xA;&#xA;float motorPWM2[4] = {motorPwm1, motorPwm2, motorPwm3, motorPwm4};&#xA;float maxPWM = motorPWM2[0];&#xA;for(i=0; i&amp;lt;4; i++){ // Get max PWM for trimming&#xA;    if(motorPWM2[i]&amp;gt;maxPWM){&#xA;        maxPWM=motorPWM2[i];&#xA;    }&#xA;}&#xA;&#xA;cout &amp;lt;&amp;lt; &quot; MaxPWM = &quot; &amp;lt;&amp;lt; maxPWM &amp;lt;&amp;lt; endl;&#xA;&#xA;if(maxPWM&amp;gt;maxThrottle){&#xA;    float trimPwm=maxPWM-maxThrottle; //Get excess and use this to trim all 4 motors&#xA;    cout &amp;lt;&amp;lt; &quot; Trim = &quot; &amp;lt;&amp;lt; trimPwm &amp;lt;&amp;lt; endl;&#xA;    motorPwm1=motorPwm1-trimPwm;&#xA;    motorPwm2=motorPwm2-trimPwm;&#xA;    motorPwm3=motorPwm3-trimPwm;&#xA;    motorPwm4=motorPwm4-trimPwm;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This was obtained from pixhawk. However the difference is that they employ only upper bound compensation limiting, while mine also performs lower bound compensation limiting which may cause more saturation once it reaches the second stage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Rt7rZ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Rt7rZ.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;From:&lt;a href=&quot;https://pixhawk.org/dev/mixing&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://pixhawk.org/dev/mixing&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;Gains are set too high.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;It is also possible that I've set my P gains too high thus exceeding the max RPM limit of the motors causing the Limiter algorithm to overcompensate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Current PID Settings:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The minimum motor value for the quad to lift itself is 160 while the maximum limit is 200 from the PWM time high of 2000ms &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Pitch (Cascaded P-PID controller)&#xA;Rate P = 0.07&#xA;Rate I = 0.03&#xA;Rate D = 0.0001&#xA;Stabilize P = 2&lt;/li&gt;&#xA;&lt;li&gt;Roll (Cascaded P-PID controller)&#xA;Rate P = 0.09&#xA;Rate I = 0.03&#xA;Rate D = 0.0001&#xA;Stabilize P = 2&lt;/li&gt;&#xA;&lt;li&gt;Yaw (Cascaded P-PID controller)&#xA;Rate P = 0.09&#xA;Rate I = 0.03&#xA;Rate D = 0.0001&#xA;Stabilize P = 2&lt;/li&gt;&#xA;&lt;li&gt;Hover (Single loop PD controller)&#xA;P = 0.7&#xA;D = 35&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Possible Solution&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think I have set the PID parameters particularly the P or D gain too high that the computed sum of the outputs of the controller is beyond the limit. Maybe retuning them would help.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I would just like to ask if anyone has encountered this problem or if you have any suggestions. Thank you :) &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;h2&gt;&lt;strong&gt;EDIT&lt;/strong&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I have added the plots of the response when the control loop is fast (500Hz) and Slow (300Hz)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;500Hz: Does not fly&#xA;  &lt;a href=&quot;https://i.stack.imgur.com/OzU9n.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OzU9n.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;300Hz: Flies&#xA;  &lt;a href=&quot;https://i.stack.imgur.com/5MZ6j.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/5MZ6j.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="11311" LastEditorUserId="11311" LastEditDate="2016-04-16T11:27:49.333" LastActivityDate="2016-04-16T20:11:05.400" Title="Quadcopter refuses to fly when the Yaw PID component is added" Tags="&lt;quadcopter&gt;&lt;control&gt;&lt;pid&gt;&lt;raspberry-pi&gt;&lt;stability&gt;" AnswerCount="1" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="9630" PostTypeId="2" ParentId="9608" CreationDate="2016-04-14T06:52:21.133" Score="0" Body="&lt;p&gt;Thanks to the comment by Biscuits, in the end I realized that I have been adding random number to the predicted state instead of true state. Therefore, I am essentially accumulating my gyro errors which leads to the wrong results. I hope that other people won't make the same mistakes again.&lt;/p&gt;&#xA;" OwnerUserId="13357" LastActivityDate="2016-04-14T06:52:21.133" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9631" PostTypeId="2" ParentId="9621" CreationDate="2016-04-14T11:14:19.203" Score="2" Body="&lt;p&gt;Q: What are the main differences between electric motor and internal combustion engine for an ATV-sized mobile robot platform in terms of functionality, implementation difficulty (&quot;RC&quot; conversion, &quot;electronic&quot; operation), durability and maintenance when used as an autonomous platform? A full sized ATV/UTV like Polaris Ranger (EV) is in question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A: Depending on the electric motor(s) chosen, you can have as much power as the IC yould provide you. You will also have the same amount of torque, no matter the rpm's. RC conversions and any other electronic operatios regarding the motor(s) will become significantly easier, since they can all be connected together. On an IC you have to create mechanisms for the throttle response, since it works mechanically (with wire for the polaris i think). Maintainance requires less efford and time in electronic motor(s), but it can become way more expensive and time-consuming if something breaks down and needs to be replaced.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Q: Are the advantages/disadvantages basically the same as the differences between electric and nitro RC cars or does the bigger scale adds something important to the game?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A: The basic differences are the weigh of the vehicle, the range they have to cover and their energy consumption. Using electronic motor(s) means batteries and/or other forms of power (solar power through panels). If thinking of covering long distances, you will need big and hence heavy batteries. You will also need space to fit all those. Tough one for a polaris, especially if any driver seats will be kept on. IC is factory bolt-on and uses gasoline, which allows covering greater distances.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Personal opinion: I would go for the IC and make the small modifications needed.&lt;/p&gt;&#xA;" OwnerUserId="11472" LastActivityDate="2016-04-14T11:14:19.203" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9632" PostTypeId="2" ParentId="9386" CreationDate="2016-04-14T14:40:37.867" Score="1" Body="&lt;p&gt;First, determine the angle $\phi$ between the robot $&amp;lt;\!a_{x},a_{y},\theta\!&amp;gt;$ and the target $&amp;lt;\!p_{x},p_{y}\!&amp;gt;$ as follows &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\phi = \tan^{-1} \left( \frac{ p_{y} - a_{y} }{ p_{x} - a_{x} } \right) - \theta&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See the below picture,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/BAwLD.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/BAwLD.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based on $\phi$, you can determine the rest. &lt;/p&gt;&#xA;" OwnerUserId="2155" LastActivityDate="2016-04-14T14:40:37.867" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9633" PostTypeId="2" ParentId="9622" CreationDate="2016-04-14T15:03:31.593" Score="6" Body="&lt;p&gt;I would recommend changing the naming convention since it is a bit misleading. In robotics the world Coordinate system (CS) is usually your fixed, absolute coordinate system. Lets call the transformation matrix from your camera to your object $T_{Object,Tool}$ If it cannot include any rotation, then you are right is should have the form as you specified. You are also right with your multiplications, but I would advise keeping the two thing separate. I actually do not think that you need the $T_{Object,Tool}$ matrix&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The $T_{Tool,Base}$ is a transformation matrix form your tool to your base. This is what you can use to solve the inverse kinematics problem. &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Define your coordinate systems (with the Denavit Hartenberg convention)&lt;/li&gt;&#xA;&lt;li&gt;Build your transformation matrix as&#xA;$T_{Tool,Base} = A1(q1) \cdot A2(q2) \cdot A3(q3)\cdot A4(q4)\cdot A5(q5)\cdot A6(q6)$&lt;/li&gt;&#xA;&lt;li&gt;Build the Cartesian transformation Matrix as&#xA;$T_{TCP} = X_{trans}\cdot Y_{trans}\cdot Z_{trans}\cdot X_{rot}\cdot Y_{rot}\cdot Z_{rot}$&lt;/li&gt;&#xA;&lt;li&gt;Solve the inverse kinematics problem from &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;$T_{TCP} = T_{Tool,Base}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;as presented in &lt;a href=&quot;http://thydzik.com/academic/robotics-315/chap4.pdf&quot;&gt;this description&lt;/a&gt;. After this step you should have a function that for a given Cartesian coordinates of the TCP as input $X = (x, y, z, a, b, c)$ calculates the corresponding joint position as output $Q = (q_1, q_2, q_3, q_4, q_5, q_6)$&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;5&quot;&gt;&#xA;&lt;li&gt;Your camera will measure the relative position of the object. Lets define the vector of measurments as $X_{Object} = (x, y, z, 0, 0, 0)$. The current Cartesian position of the robot is known (after solving the IK problem). Lets call this $X_{TCP} = (x_r, y_r, z_r, a_r, b_r, c_r)$. If you only want to track positions then $X_{new} = X_{Object} + X_{TCP}$ will give you the coordinates you want to position your TCP. Use this as input for the inverse kinematic function and get the $Q$ angles which correspond to this position. If you want to orient the TCP toward the object calculate also the new realative angles geometrically then add those also (instead of the $0, 0, 0$). That is it!&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2016-04-14T15:03:31.593" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9634" PostTypeId="2" ParentId="9619" CreationDate="2016-04-14T19:21:54.250" Score="1" Body="&lt;p&gt;Your software library uses a gradient descent method for inverse kinematics.  The way this works is that it moves the Cartesian position of the end-effector towards the goal in small steps then gets the joint angles for each step with the relation:&#xA;$$&#xA;\Delta \theta= J^{-1}\Delta x &#xA;$$&#xA;This method has a number of nice properties, but as you found you only get one solution.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;An analytical inverse kinematics solution is what you want.  In this method, you algebraically determine all possible solutions.  The only catch is if you are under-constrained, (like in your case), where you have more joints than degrees of freedom.  (You have 6 joints, but only want a 3 DOF position).  In this case, you pick some joints to &quot;fix&quot; and do the math as if that joint is rigid.  But in reality, you typically discretize that joint's range, and get a set of solutions for every fixed position.  (You can see how the curse of dimenionality will get you here.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would recommend investigating &lt;a href=&quot;http://openrave.org/docs/latest_stable/openravepy/ikfast/&quot; rel=&quot;nofollow&quot;&gt;ikfast&lt;/a&gt; from OpenRave, which is an analytical IK solver.  This has a number of different IK types for different DOFs.  &quot;Translation3D&quot; is what you want. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the way to trick your gradient decent IK solver into giving you different solutions is to give it different initial conditions.  You should start from drastically different arm configurations.  (Like joints flipped 180 degrees from each other).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for the not needing rotation:  The gradient descent IK method can ignore rotation quite easily.  You would simply only use the top 3 rows of the Jacobian, and give it only the end-effector position (not rotation too).  &lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2016-04-14T19:21:54.250" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9635" PostTypeId="2" ParentId="9569" CreationDate="2016-04-14T20:14:30.860" Score="0" Body="&lt;p&gt;The first step for reproducing the results is to utilize the equations. They didn't mention which controller they used but in my simulation I chose the PD controller, therefore, &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{align*}&#xA;\ddot{\theta}(t)   &amp;amp;= M^{-1}( u - V - G) \\&#xA;              u(t)    &amp;amp;= M ( \ddot{\theta}_{d} + k_{d} \dot{e} + k_{p} e) + V + G \\&#xA;	          M &amp;amp;=              &#xA;              \begin{bmatrix}&#xA;              m_{11} &amp;amp; m_{12} \\&#xA;              m_{21} &amp;amp; m_{22} &#xA;\end{bmatrix} \\&#xA;V &amp;amp;=              &#xA;              \begin{bmatrix}&#xA;              v_{11}  \\&#xA;              v_{21}  &#xA;\end{bmatrix} \\&#xA;G &amp;amp;=              &#xA;              \begin{bmatrix}&#xA;              g_{11}  \\&#xA;              g_{21} &#xA;\end{bmatrix} \\&#xA;              e(t)    &amp;amp;= \theta - \theta_{d} \\&#xA;          \dot{e}(t)  &amp;amp;= \dot{\theta} - \dot{\theta}_{d} \\&#xA;      \theta_{1d}(t)  &amp;amp; = 10t^{4} + 10t^{3} + 10t^{2} \\&#xA;\dot{\theta}_{1d}(t)  &amp;amp; = 40t^{3} + 30t^{2} + 20t \\&#xA;\ddot{\theta}_{1d}(t) &amp;amp; = 120t^{3} + 60t^{2} + 20t \\&#xA;             \theta_{2d}(t) &amp;amp;= 50t^{4} + 10t^{3}  \\&#xA;         \dot{\theta}_{2d}(t) &amp;amp;= 200t^{3} + 30t^{2}  \\&#xA;         \ddot{\theta}_{2d}(t) &amp;amp;= 600t^{2} + 60t  \\&#xA;\end{align*}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $k_{d} = 20, k_{p} = 100, m_{1} = m_{2} = 16.92, l_{1} = l_{2} = 1$. The results I got for the elbow down case via C++ code are &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;t     theta1  theta2 px        py&#xA;-----------------------------------------&#xA;0     0       0      2         0&#xA;0.1   0.111   0.015  2         0.00349066&#xA;0.2   0.496   0.160  1.99992   0.0177943&#xA;0.3   1.251   0.675  1.9993    0.0518948&#xA;0.4   2.496   1.920  1.99642   0.115588&#xA;0.5   4.375   4.375  1.98633   0.221951&#xA;0.6   7.056   8.640  1.95706   0.385653&#xA;0.7  10.731  15.435  1.88376   0.618508&#xA;0.8  15.616  25.6    1.7218    0.919393&#xA;0.9  21.951  40.095  1.40621   1.25027&#xA;1.0  30.0    60      0.878878  1.49793&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;They are very close to the results stated in the paper. Visualizing the movement of the manipulator is not big deal. As a matter of fact, people care much about the results not the visualization. This is can be done by OpenGL as well. No one cares about the software you are using. &lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="2155" LastEditDate="2016-04-14T20:20:05.720" LastActivityDate="2016-04-14T20:20:05.720" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9636" PostTypeId="1" AcceptedAnswerId="9641" CreationDate="2016-04-14T23:42:47.753" Score="5" ViewCount="1024" Body="&lt;p&gt;I have trouble estimating the heading when close to the &quot;pivot&quot; point of the compass, and could use some input on how to solve it. I have set up my angles to be from 0-360 degrees during the testing but will be using radians (-pi, pi) from now on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The setup is a differential robot with IMU, wheel encoders and a magnetic compass. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A complementary filter is used for fusing gyroZ and odo measurements to estimate the heading, and then correct it with a Kalman filter using the magnetic compass.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My problem occurs when the robot heading is close to -pi/pi .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The estimated heading is useless even though the robot is not even moving.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am thinking this must be a very common problem and probably has a better solution than what I came up with, which was either re-initializing the integrator when crossing zero, adding 180 degrees each time the error is larger, or just ignoring the compass if the error is too large...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's my first Kalman filter so I may have made a poor implementation if this is not a common issue...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: trudesagen's solution solved my problem.&lt;/p&gt;&#xA;" OwnerUserId="13449" LastEditorUserId="13449" LastEditDate="2016-05-29T22:17:36.307" LastActivityDate="2016-05-29T22:17:36.307" Title="Regarding Kalman filter and estimating heading with magnetic compass" Tags="&lt;mobile-robot&gt;&lt;kalman-filter&gt;&lt;compass&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9637" PostTypeId="1" AcceptedAnswerId="9638" CreationDate="2016-04-15T00:15:49.927" Score="1" ViewCount="3694" Body="&lt;p&gt;I'm using processing to send strings to Arduino, using functions like &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;else {&#xA;    int u=90;&#xA;    port.write(u+&quot;z&quot;);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;on the processing side and in the Arduino side I'm using calls like &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  case 'z':&#xA;    z.write(v);&#xA;    v = 0;&#xA;    break;&#xA;  case 'L':&#xA;    z.write(0);&#xA;    //v = 0;&#xA;    break;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;yet I can't get the servo to stop at all. How do I make it shut off?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it was a regular servo I wouldn't even ask because that's easy but I write 0 or 90 or LOW and nothing, it just keeps spinning in one direction but when it meets one of the conditions in my statements it switches polarity/direction and that's good - I want that but I made this function to make it stop and it is not doing so, does anyone have any ideas ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am using a &lt;a href=&quot;https://www.parallax.com/sites/default/files/downloads/900-00008-Continuous-Rotation-Servo-Documentation-v2.2.pdf&quot; rel=&quot;nofollow&quot;&gt;Parallax Continuous Rotation Servo&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="13450" LastEditorUserId="9176" LastEditDate="2016-04-19T09:15:45.977" LastActivityDate="2016-04-19T09:15:45.977" Title="How do we write a STOP to a continuous Servo?" Tags="&lt;arduino&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="9638" PostTypeId="2" ParentId="9637" CreationDate="2016-04-15T05:28:07.363" Score="1" Body="&lt;p&gt;There should be some intermediate value of degrees or microseconds that minimizes rotation speed.  You can run calibration tests to find the best value, for example by sweeping the angle or time through a range of values, while writing the current value to LCD or Serial; or by setting an initial value then using two buttons or an analog control voltage to tell the sketch to raise or lower the value, jogging up or down until the servo stops or runs at very slow speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note, you will get finer control (hence, closer to the proper value) using  &lt;a href=&quot;https://www.arduino.cc/en/Reference/ServoWriteMicroseconds&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;Servo.writeMicroseconds()&lt;/code&gt;&lt;/a&gt; rather than &lt;a href=&quot;https://www.arduino.cc/en/Reference/ServoWrite&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;Servo.write()&lt;/code&gt;&lt;/a&gt;.  In some Servo library versions, &lt;code&gt;Servo.writeMicroseconds()&lt;/code&gt; resolution is half-microsecond, vs about 10 μs/degree &lt;code&gt;Servo.write()&lt;/code&gt; resolution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also note, in some Servo library versions, &lt;code&gt;Servo.write()&lt;/code&gt; accepts microsecond values as well as degree values, distinguishing the former from the latter by number size; ie, numbers less than 544 are clipped to the range 0 to 180 and treated as degrees, while numbers in the range 544 to 2400 are treated as microsecond values. [See example code in &lt;a href=&quot;https://arduino.stackexchange.com/a/20814/3917&quot;&gt;related answer&lt;/a&gt; at arduino.stackexchange.]&lt;/p&gt;&#xA;" OwnerUserId="478" LastEditorUserId="-1" LastEditDate="2017-04-13T12:50:09.580" LastActivityDate="2016-04-15T05:28:07.363" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9640" PostTypeId="1" CreationDate="2016-04-15T17:34:56.903" Score="0" ViewCount="50" Body="&lt;p&gt;When running on a hard surface, the Create will shake sometimes during turns or acceleration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Has anyone ever removed the springs or pinned the wheels in place so they can't move up and down?&lt;/p&gt;&#xA;" OwnerUserId="13454" LastEditorUserId="9176" LastEditDate="2016-04-17T09:50:48.967" LastActivityDate="2016-07-06T16:30:41.153" Title="Steadier wheels - Pin them or lock springs" Tags="&lt;irobot-create&gt;&lt;roomba&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2016-07-06T17:55:41.420" ContentLicense="CC BY-SA 3.0" />
  <row Id="9641" PostTypeId="2" ParentId="9636" CreationDate="2016-04-15T18:07:13.483" Score="4" Body="&lt;p&gt;I encountered this problem myself when making an extended Kalman filter for a quadrotor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You have to check if the estimate goes above or below +/- pi, and then correct it if it does.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can do this with a simple &lt;code&gt;if&lt;/code&gt; statement:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;if (angle &amp;gt; pi)&#xA;    angle = angle - 2*pi;&#xA;else if (angle &amp;lt; -pi)&#xA;    angle = angle + 2*pi;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You could also throw in a &lt;code&gt;while&lt;/code&gt; loop over that, if the value ever becomes larger than &lt;code&gt;2*pi&lt;/code&gt; for some reason, due to spikes etc. This looks like so:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;while (abs(angle) &amp;gt; pi) {    &#xA;    if (angle &amp;gt; pi)&#xA;        angle = angle - 2*pi;&#xA;    else if (angle&amp;lt; -pi)&#xA;        angle = angle + 2*pi;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Remember to have this check after your prediction, as well as on the difference between your measured compass angle and your prediction, that you use to calculate the corrected estimate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After this you also check the corrected estimate for the same, which should fix your problem.&lt;/p&gt;&#xA;" OwnerUserId="13455" LastEditorUserId="9176" LastEditDate="2016-04-17T09:51:12.670" LastActivityDate="2016-04-17T09:51:12.670" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="9642" PostTypeId="1" CreationDate="2016-04-15T18:38:38.677" Score="10" ViewCount="27286" Body="&lt;p&gt;I was wondering if a 1D point mass (a mass which can only move on a line, accelerated by an external time-varying force, see &lt;a href=&quot;https://en.wikipedia.org/wiki/Double_integrator&quot; rel=&quot;noreferrer&quot;&gt;Wikipedia - Double integrator&lt;/a&gt;) is a holonomic or a nonholonomic system? Why?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think that it is nonholonomic since it cannot move in any direction in its configuration space (which is 1D, just the $x$ axis). E.g. if the point mass is moving at $$x=10$$ with a velocity of 100 m/s in positive $x$-direction it cannot immediately go to $$x=9.9$$ due to its inertia. However, I have the feeling that my thoughts are wrong...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The background is the following:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am trying to understand what holonomic and nonholonomic systems are. What I found so far:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Mathematically&lt;/em&gt;:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Holonomic system are systems for which all constraints are integrable into positional constraints.&lt;/li&gt;&#xA;&lt;li&gt;Nonholonomic systems are systems which have constraints that are nonintegrable into positional constraints. &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Intuitively&lt;/em&gt;:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Holonomic system where a robot can move in any direction in the configuration space. &lt;/li&gt;&#xA;&lt;li&gt;Nonholonomic systems are systems where the velocities (magnitude and or direction) and other derivatives of the position are constraint. &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="10564" LastEditorUserId="9176" LastEditDate="2016-04-17T09:50:22.717" LastActivityDate="2019-05-27T15:00:47.397" Title="What's the difference between a holonomic and a nonholonomic system?" Tags="&lt;dynamics&gt;&lt;movement&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="9643" PostTypeId="2" ParentId="9625" CreationDate="2016-04-15T22:12:55.180" Score="1" Body="&lt;p&gt;I can give you some leads and you can probably take it from there. Since you mention calculating &quot;the probability of the robot present in each of the grid cell&quot;, what you want to do is essentially a histogram filter, i.e a discrete bayes filter applied to a continuous state space.&#xA;If you have the &lt;a href=&quot;http://www.probabilistic-robotics.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Probabilistic Robotics book by Thrun&lt;/a&gt;, you will find the algorithm you are looking for in chapter 8 as &quot;Grid Localization&quot;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Gaaag.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Gaaag.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;which is a variant of Markov localization:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/MAlYk.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MAlYk.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;The Grid Localization algorithm precisely calculates at each time step the probability of each cell to correspond to the actual robot's state. If you only care about estimating the position (x,y), your grid is in 2D. If you also want to estimate the orientation (x,y,theta), your grid is in 3D, and each plane of the grid corresponds to an orientation:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for the motion/measurement models, you can find them in chapter 5 and 6 of the same book. &#xA;If you don't have the book, you can find some excerpts &lt;a href=&quot;http://ais.informatik.uni-freiburg.de/teaching/ss11/robotics/slides/06-motion-models.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here for motion models&lt;/a&gt; and &lt;a href=&quot;http://ais.informatik.uni-freiburg.de/teaching/ss11/robotics/slides/07-sensor-models.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here for sensor models&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for your second question, P(x|u,x') in your example should be your motion model, so any model of odometry noise should be included inside, but the exact form will depend on the motion model that you choose, cf the links above.&lt;/p&gt;&#xA;" OwnerUserId="5610" LastActivityDate="2016-04-15T22:12:55.180" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9644" PostTypeId="2" ParentId="9642" CreationDate="2016-04-16T01:08:53.910" Score="13" Body="&lt;p&gt;For a nonholonomic system, you can at best determine a differential relationship between state and inputs.   You cannot determine a closed-form geometric relationship.  This means that the history of states is needed in order to determine the current state.   Vehicles are a good example because you can intuitively see that turning the right wheel 100 rotations and turning the left wheel 100 rotations does not provide enough information to describe the change in position.   If the wheels are turned synchronously, the vehicle will follow a straight line.   If they are coordinated in another sequence, the robot will turn, and follow some other path.   This is nonholonomic:  knowing the total change in state variables is insufficient to describe the motion, because you cannot write a geometric relationship between input and output.  It is differential at best.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The system you describe seems holonomic to me.   If the total motion of your point mass is 1 meter forward, doesn't that hold regardless of the history of motions that resulted in the net 1m path?   I did not dive into the paper to look at the equations yet so I could be wrong.  But intuitively, I think there would be a closed-form, non-differential, equation for that mass' motion profile.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2016-04-16T01:08:53.910" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9645" PostTypeId="2" ParentId="1876" CreationDate="2016-04-16T12:22:14.920" Score="1" Body="&lt;p&gt;I am currently using the Compute Module IO board for my undergraduate project and up to now, the best I can come up with is a refresh rate of 2Hz implemented using c++.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mr. David Barker at Argon design was &lt;a href=&quot;http://www.argondesign.com/case-studies/2014/oct/21/stereo-depth-perception-raspberry-pi/&quot; rel=&quot;nofollow&quot;&gt;able to implement it&lt;/a&gt; at 1Hz using C and 12 frames per second by using machine language on the video core.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mr. Nalan Karunanayake was &lt;a href=&quot;http://computervision-nalan.blogspot.co.uk/2015/05/stereo-vision-using-raspberry-pi.html&quot; rel=&quot;nofollow&quot;&gt;able to implement stereo vision&lt;/a&gt; using a model B+ and two usb webcams set at 10 frames per second in c++.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I read an IEEE paper if I am remembering it correctly being able to sync both camera modules using v4l2 drivers (&lt;a href=&quot;http://ieeexplore.ieee.org/xpl/login.jsp?tp=&amp;amp;arnumber=6741334&quot; rel=&quot;nofollow&quot;&gt;Raspberry PI Based Stereo Vision For Small Size ASVs&lt;/a&gt;&lt;sup&gt;&amp;dagger;&lt;/sup&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;&amp;dagger; Requires IEEE Xplore subscription or purchase.&lt;/sup&gt;&lt;/p&gt;&#xA;" OwnerUserId="11311" LastEditorUserId="37" LastEditDate="2016-04-17T09:47:49.733" LastActivityDate="2016-04-17T09:47:49.733" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9647" PostTypeId="1" AcceptedAnswerId="9649" CreationDate="2016-04-16T17:48:56.013" Score="0" ViewCount="40" Body="&lt;p&gt;I will have this configuration: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A2212 Brushless Motor 1000KV - 4 each&lt;/li&gt;&#xA;&lt;li&gt;ECS - 30A Electronic Speed Control (ESC) - 4 each &lt;/li&gt;&#xA;&lt;li&gt;Propeller - 1045 Propeller CW &amp;amp; CCW Pair 10 inch * 4.5 pitch&lt;/li&gt;&#xA;&lt;li&gt;Arduino Mega - 2560 board&lt;/li&gt;&#xA;&lt;li&gt;Raspberry Pi 3 &lt;/li&gt;&#xA;&lt;li&gt;Open pilot CC3D flight controller &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I want to know what rating Li-Po battery should I get for this configuration.&#xA;The reason behind my asking here is because a simple google search is not able to satisfy me with an explanation...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, my weight will be 1.5 kg for the quadcopter, so I need a stable current discharge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is my first quadcopter, I am a Computer Science guy, so I have little knowledge of electronics, I'm learning, but need help...&lt;/p&gt;&#xA;" OwnerUserId="13446" LastEditorUserId="9176" LastEditDate="2016-04-17T09:50:37.937" LastActivityDate="2016-04-17T09:50:37.937" Title="What rating Li-Po battery should I get for this configuration?" Tags="&lt;quadcopter&gt;&lt;arduino&gt;&lt;raspberry-pi&gt;&lt;battery&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9648" PostTypeId="2" ParentId="9629" CreationDate="2016-04-16T20:11:05.400" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;disclaimer&lt;/strong&gt;: This is more of a longer comment than an answer. I'm not sure what the problem is. There is a lot going on here (thankfully a lot of information is provided, too) and my attention shifted around from one thing to others.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;h2&gt;my original thought&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;from the comments&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;There's not much between 160 min value and 200 max. &#xA;  In either case (with or without the yaw controller), you are constantly hitting the limit as I see it in your diagram. &#xA;  The more often you limit the controller value, the more it is actually the limiter acting as a (nonlinear!) controller and not the controller itself.&#xA;  A limiter should kick in occasionally and not all the time. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This is mostly based on how clearly the limit cuts down the PWM:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/nxKuW.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/nxKuW.png&quot; alt=&quot;limited PWM&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;hence the following analogy came to my mind:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Strap a belt tightly around your breast and run a marathon. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;And I concluded that:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I'd try to use stronger motors so that your controller has enough air to do its job and not hit the limit so often.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;A stronger motor would not have run at full power and would not hit the limit so often. Hitting the limit is not bad in of itself. Imagine your PWM would be either at the upper or the lower limit. You'd have a (nonlinear) bang-bang controller. Such a controller isn't bad in of itself either, but it somewhat overrides the PID controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It can happen that you can manipulate the PID parameters at will and nothing changes. One reason for that can be a limit that makes your changes irrelevant. New parameters might change the output from 260 to 280 or to 220, which will have to effect if they are all going to be limited to 200.&#xA;This is why constantly hitting the limit can be a bad thing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the yaw part, the phenomenon seems to be more pronounced, but not by much. I guess this is something to be aware of especially when summing up controller values, but not the actual problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyway, from the given diagrams I cannot tell why one would fly and the other would not.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;500Hz -&gt; 300Hz&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Then another attempt was made and again one configuration works and the other does not.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I have tried to run the control loop at a slower rate and noticed that there is a drastic change in each of the PID components such that it is not exceeding the limit too much and now its flying again.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I tried to find differences between both diagrams. You are right, the limit is not exceeded as often as before in the flying operation. But what else is different?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;May I ask what happens to the P gain contribution to the output if the speed of the control loop is decreased (dT increased). Does it have any significant effect like on the I and D gain which is time dependent (D decreases I increases)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Now I had a look at the separate controller error values. I combined them into the following image for comparison:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Wk12g.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Wk12g.png&quot; alt=&quot;error values&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first thing that I notice is that there's a steady state error and thus $I_{error}$ constantly grows aka the red is the integral of blue and blue is bigger than zero all the time. This is not a good thing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If there's a steady state error that the P gain cannot compensate, the integral part should grow and compensate the constant offset error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The integral part should converge to some value.&lt;/strong&gt; At least if it's compensating for a constant offset. I don't know what integral error from what controller this is, but an error that keeps growing is undesirable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But maybe there is something inherently different between fly and nofly?&#xA;The diagrams are a &lt;em&gt;little&lt;/em&gt; hard to read because the axis are of different scale. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried to scale the images in gimp to fit and this is the result:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/sJSie.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/sJSie.png&quot; alt=&quot;flynoflynofly&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The pixelated plots are those two when it did not fly.&#xA;Their overall $P_{error}$ is bigger and thus the $I_{error}$ is steeper.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I don't think this is the problem. Look at the difference between the two $I_{error}$ of the cases when it flew. (the non-pixelated ones)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd say there's no other significant difference between the two cases.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;conclusion&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;There's a constant error in the system. The controller cannot reduce that error. It looks as if the control loop is not closed properly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Take a step back.&#xA;Even in your first image, the height value oscillates and $I_{error}$ increases constantly. Inspect what's going on there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then create the angle controller separately. Put the quadcopter onto a pivot point or pole and see if it can maintain its angle. The height controller should be turned off.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When both controllers work on their own, try to combine both controllers in a weighted sum. $PID_{total} = 0.5 PID_{yaw} + 0.5PID_{height}$ Change the ratio as you see fit. &lt;/p&gt;&#xA;" OwnerUserId="9860" LastActivityDate="2016-04-16T20:11:05.400" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9649" PostTypeId="2" ParentId="9647" CreationDate="2016-04-17T01:55:22.860" Score="1" Body="&lt;p&gt;Firstly its important to consider the worst case current draw by your motors. Since this determines how fast your battery will drain out. The size of the battery will be determined by its capacity and cell count. Generally bigger batteries like in laptops with their 4-cell 48Wh can power them up to an hour under intensive load. Which brings me to mention that one of the factors is how long do you want the quad to run. Though the laptop batteries run long, they are big in size so depending on the size of your quad, the battery size will have to be chosen. Again since, the battery adds weight, motors will draw more current, thus inline with the first point, determine the peak current draw of the entire system. I used motors since it draws the most. You can find more info on how to choose a LiPo battery &lt;a href=&quot;http://www.ultimaterc.com/forums/showthread.php?t=115264&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="3905" LastEditorUserId="3905" LastEditDate="2016-04-17T02:10:33.397" LastActivityDate="2016-04-17T02:10:33.397" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9650" PostTypeId="2" ParentId="9637" CreationDate="2016-04-17T09:33:45.400" Score="1" Body="&lt;p&gt;According to the &lt;a href=&quot;https://www.parallax.com/sites/default/files/downloads/900-00008-Continuous-Rotation-Servo-Documentation-v2.2.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;data sheet&lt;/a&gt; and example code, this continuous rotation servo takes an input of 1.3ms full speed clockwise to 1.7ms full speed counter-clockwise, with 1.5ms in the middle being stopped.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As &lt;a href=&quot;https://robotics.stackexchange.com/a/9638/37&quot;&gt;jwpat suggests&lt;/a&gt; you are better off using &lt;code&gt;Servo.writeMicroseconds(1500)&lt;/code&gt; to stop your servo, since this guarantees that you are sending the correct value, even if you accidentally get the &lt;code&gt;min&lt;/code&gt; and &lt;code&gt;max&lt;/code&gt; calibration values wrong in your &lt;code&gt;Servo&lt;/code&gt; object. &lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2016-04-17T09:33:45.400" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9652" PostTypeId="1" CreationDate="2016-04-18T16:00:54.363" Score="1" ViewCount="111" Body="&lt;p&gt;I'm still new to RPi and I am currently trying to do a smart home model. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I planned to use RPi only to control 5 servos (which will be controlling the open/close of the doors by setting the angle) and 5 LEDs. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Will I need to use an external circuit to supply the power for the servos or is it fine to just connect them to the RPi?&lt;/p&gt;&#xA;" OwnerUserId="13476" LastEditorUserId="13476" LastEditDate="2016-04-19T15:00:59.090" LastActivityDate="2016-08-08T14:55:04.063" Title="Smart Home Model with Raspberry Pi" Tags="&lt;raspberry-pi&gt;&lt;rcservo&gt;" AnswerCount="2" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="9654" PostTypeId="1" AcceptedAnswerId="9655" CreationDate="2016-04-18T20:39:26.660" Score="1" ViewCount="126" Body="&lt;p&gt;I'm doing a mobile robot project with robotic arms, I wanted to buy a chassis for my robot that can carry enough weight, but many websites don't give definitive answers about maximum payload.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there is a way to figure this out just by knowing details about the motors?&lt;/p&gt;&#xA;" OwnerUserId="12961" LastEditorUserId="9176" LastEditDate="2016-04-19T09:16:13.350" LastActivityDate="2016-04-19T09:16:13.350" Title="How to know the payload of the chassis from its motors?" Tags="&lt;mobile-robot&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9655" PostTypeId="2" ParentId="9654" CreationDate="2016-04-18T23:45:02.473" Score="4" Body="&lt;p&gt;If I told you my truck has 200 horsepower, could you tell me the cargo weight capacity?  Not really.   There are more factors than just the motor specs that play into your assessment.   You might be able to ball-park it, but be prepared to be off by a factor of 2 or more.   Here's why...&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;A motor needs current to produce torque.   The available power supply current comes into play. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Total power available depends on both current and voltage.   If you run your motor at a higher voltage (without saturating the back iron) you will have more power available for a given current.  &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Every motor has a torque &lt;em&gt;vs&lt;/em&gt; speed inverse relationship.   How fast you want the device to go affects how much torque each motor can generate.  &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The gear trains (or other transmission) and frictional losses also affect the capability to operate at given torque and speed. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;You can use the ratings of the motors to get you in the ballpark.   They can tell you the maximum power available to be transmitted to the device.   However, the other factors play more than a nominal role.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2016-04-18T23:45:02.473" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9656" PostTypeId="2" ParentId="9565" CreationDate="2016-04-19T02:52:45.377" Score="0" Body="&lt;p&gt;From my understanding a simple accelerometer and magnetometer works.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Currently I use a 9DOF grove IMU. It has an I2C connection and contains both of those plus a gyroscopic sensor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They've got this github for examples too, see &lt;a href=&quot;https://github.com/Seeed-Studio/Grove_IMU_9DOF&quot; rel=&quot;nofollow&quot;&gt;Seeed-Studio/Grove_IMU_9DOF&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="13485" LastEditorUserId="9176" LastEditDate="2016-04-19T09:16:01.023" LastActivityDate="2016-04-19T09:16:01.023" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9657" PostTypeId="1" AcceptedAnswerId="9658" CreationDate="2016-04-19T03:50:25.497" Score="0" ViewCount="90" Body="&lt;p&gt;I'm stuck on equation 4.30 of page 176 in&lt;br&gt;&#xA;&lt;a href=&quot;http://www.cds.caltech.edu/~murray/books/MLS/pdf/mls94-complete.pdf&quot; rel=&quot;nofollow&quot;&gt;http://www.cds.caltech.edu/~murray/books/MLS/pdf/mls94-complete.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This equation:&lt;br&gt;&#xA;$\frac {\partial M_{ij}} {\partial \theta_k} = \sum_{l=\max(i,j)}^n \Bigl( [A_{ki} \xi_i, \xi_k]^T A_{lk}^T {\cal M}_l' A_{lj} \xi_j + \xi_i^T A_{li}^T {\cal M}_l' A_{lk} [A_{kj} \xi_j, \xi_k] \Bigr)$  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;seems impossible to process because it requires adding a 2x1 to a 1x2 matrix.&#xA;going by ROWSxCOLUMNS notation. Matrices M and A are 6x6 and $\xi$ is a 6x1, so how does this addition statement fit the rules of matrix addition?  This must be my mistake, I just don't see how.&lt;/p&gt;&#xA;" OwnerUserId="11625" LastEditorUserId="11625" LastEditDate="2016-04-19T04:18:52.150" LastActivityDate="2016-04-19T04:18:52.150" Title="Dynamic Model of a Manipulator" Tags="&lt;dynamics&gt;&lt;matlab&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9658" PostTypeId="2" ParentId="9657" CreationDate="2016-04-19T04:10:52.327" Score="0" Body="&lt;p&gt;The Lie Bracket is 6x1, not 6x2, so both terms should be 1x1.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2016-04-19T04:10:52.327" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="9659" PostTypeId="1" CreationDate="2016-04-19T13:52:51.610" Score="0" ViewCount="688" Body="&lt;p&gt;I want to know if there is any equation that calculates the maximum force of a robot joint. The force that we should not exceed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example in human leg, if we apply a big external force to the knee, it will break. now how can i find the necessary force that will just make the leg move without breaking the knee.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a programme that generates robot morphologies randomly with different sizes, so I have to know the force to not exceed for each joint. I think this depend on weight, mass, inertia of each robot part.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can not do this by trial and error because I have hundreds different morphologies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This &lt;a href=&quot;https://www.youtube.com/watch?v=arEty0NlJds&quot; rel=&quot;nofollow&quot;&gt;video&lt;/a&gt; shows the behaviour of robot if I apply a big force. It is in Gazebo robotic simulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance!&lt;/p&gt;&#xA;" OwnerUserId="7249" LastActivityDate="2016-07-19T15:28:22.417" Title="how to find maximum force of a robot joint" Tags="&lt;simulation&gt;&lt;joint&gt;&lt;force&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9662" PostTypeId="1" AcceptedAnswerId="9706" CreationDate="2016-04-19T22:40:40.373" Score="2" ViewCount="361" Body="&lt;p&gt;People have recommended me implement an analytic version of inverse Jacobian solver, such that I won't be forced only the least square solution, but would have an local area of solution near to the one I desire. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't seem to implement it correctly, I mean how much does it differ from the least square inverse kinematics which I have implemented here?&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Eigen::MatrixXd jq(device_.get()-&amp;gt;baseJend(state).e().cols(),device_.get()-&amp;gt;baseJend(state).e().rows());&#xA;      jq = device_.get()-&amp;gt;baseJend(state).e(); //Extract J(q) directly from robot&#xA;&#xA;&#xA;      //Least square solver - [AtA]⁻1AtB&#xA;&#xA;      Eigen::MatrixXd A (6,6);&#xA;      A = jq.transpose()*(jq*jq.transpose()).inverse();&#xA;&#xA;&#xA;&#xA;      Eigen::VectorXd du(6);&#xA;      du(0) = 0.1 - t_tool_base.P().e()[0];&#xA;      du(1) = 0 - t_tool_base.P().e()[1];&#xA;      du(2) = 0 - t_tool_base.P().e()[2];&#xA;      du(3) = 0;  // Should these be set to something if i don't want the tool position to rotate?&#xA;      du(4) = 0;&#xA;      du(5) = 0;&#xA;&#xA;      ROS_ERROR(&quot;What you want!&quot;);&#xA;      Eigen::VectorXd q(6);&#xA;      q = A*du;&#xA;&#xA;&#xA;      cout &amp;lt;&amp;lt; q &amp;lt;&amp;lt; endl; // Least square solution - want a vector of solutions. &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I want a vector of solution - how do I get that?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;the Q is related to this &lt;a href=&quot;https://robotics.stackexchange.com/questions/9672/how-do-i-construct-i-a-transformation-matrix-given-only-x-y-z-of-tool-position&quot;&gt;https://robotics.stackexchange.com/questions/9672/how-do-i-construct-i-a-transformation-matrix-given-only-x-y-z-of-tool-position&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The robot being used is a UR5  - &lt;a href=&quot;https://smartech.gatech.edu/bitstream/handle/1853/50782/ur_kin_tech_report_1.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://smartech.gatech.edu/bitstream/handle/1853/50782/ur_kin_tech_report_1.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13491" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2016-04-25T13:37:56.013" Title="Implementing an analytic version of an inverse kinematic" Tags="&lt;robotic-arm&gt;&lt;inverse-kinematics&gt;&lt;industrial-robot&gt;&lt;c++&gt;" AnswerCount="2" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="9663" PostTypeId="2" ParentId="9662" CreationDate="2016-04-20T00:04:48.907" Score="3" Body="&lt;p&gt;Your Jacobian-based approach is great for velocity control, or when the manipulator is close to the original point.  But remember, the Jacobian only gives a first-order approximation to the manipulator's motion.  With the highly nonlinear kinematics of manipulators, accuracy will vary throughout the workspace, and will decrease as the step size between the current pose and desired pose gets larger.    &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Closed-form, or analytic, inverse kinematics do not require the Jacobian for computing the joint angles which will achieve a desired pose.   They are based on the trigonometry of the manipulator.   To compute analytic inverse kinematics, you need to take the forward kinematics and solve for each $q$.   This can be challenging for some manipulator types.  It is easier if the wrist is spherical (all three wrist axes intersect at a point).  The good news is that many robotics books contain inverse kinematic solutions for each of the manipulator types.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2016-04-20T00:04:48.907" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9666" PostTypeId="2" ParentId="9659" CreationDate="2016-04-20T12:04:02.350" Score="0" Body="&lt;p&gt;I think you probably need to learn more about simulation before you proceed. Otherwise you will not be able to choose a good one, nor set the parameters of operation which will give valid results.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding the automated design of robot joints;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The allowed joint forces depend on the components and approach used to create the joint.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The recursive Newton Euler approach will give you the bulk joint forces. Those can then be resolved into specific bearing and structural loads specific to your mechanical design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will need to create at least one valid mechanical joint design which will have a maximum load that can be measured or, to some extent, predicted. It's best to create a couple generic design approaches with tables of components if you want to do genetic optimization.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Make sure you do a little background reading and understand what has been done before. For example: &lt;a href=&quot;http://darwin2k.sourceforge.net/&quot; rel=&quot;nofollow&quot;&gt;http://darwin2k.sourceforge.net/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="184" LastEditDate="2016-04-20T12:15:05.347" LastActivityDate="2016-04-20T12:15:05.347" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9667" PostTypeId="2" ParentId="9659" CreationDate="2016-04-20T12:15:24.553" Score="0" Body="&lt;p&gt;It sounds like all you really care about it is a realistic simulation. For you, this means that you are interested in specifying a force that is &quot;reasonable&quot; for your robot. I say &quot;reasonable&quot; because it's up to you to define, but hopefully I can help you set some guidelines. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Torque, the angular force you apply to a joint, has two general uses: &lt;strong&gt;static&lt;/strong&gt; poses and &lt;strong&gt;dynamic&lt;/strong&gt; motion. A lot of people try to calculate the torque they need by evaluating only the static torque, which is a poor method to use because, once the worst-case position is reached, there is no longer any overhead to &lt;em&gt;accelerate&lt;/em&gt; (change the speed of) the joint. That is, once the joint stops at the worst-case position, if you only specified the worst-case &lt;em&gt;static&lt;/em&gt; torque, it's not possible to resume motion. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Static torque is easily calculated: $\tau_s = FL\sin{\theta}$. Torque is the force applied, times the distance at which it's applied, times the sine of the angle the arm makes with vertical. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Dynamic torque&lt;/em&gt;, which I'd say is arguably the more important of the two, is a little harder to calculate because it requires the &lt;a href=&quot;https://en.wikipedia.org/wiki/Moment_of_inertia&quot; rel=&quot;nofollow&quot;&gt;moment of inertia&lt;/a&gt; of the load. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Dynamic torque is $\tau_d = I\alpha$. Moment of inertia times angular acceleration. It's pretty straightforward, &lt;em&gt;once you have the moment of inertia&lt;/em&gt;, but again that can be tricky to calculate. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The easiest way, in my opinion, is to calculate it through the center of mass of the object, then use the &lt;a href=&quot;https://en.wikipedia.org/wiki/Parallel_axis_theorem&quot; rel=&quot;nofollow&quot;&gt;parallel axis theorem&lt;/a&gt; to shift the axis to that of the joint.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, this becomes tricky when you are dealing with multibody simulation because the method I give above only gives the moment of inertia for one link. If you have multiple linkages, then you have to take the joint angle into account when calculating the moments of inertia for all subsequent linkages.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ultimately, for your problem, you need to choose an acceptable angular acceleration $\alpha$, programmatically calculate the moments of inertia, and then use $\tau = I\alpha$ to determine the maximum forces you want to apply. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-04-20T12:15:24.553" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9668" PostTypeId="1" CreationDate="2016-04-20T15:39:02.753" Score="2" ViewCount="127" Body="&lt;p&gt;I am working with SICK lidars and have to mount/unmount them quite often on my robot. The mounting process is very tedious especially when it comes to making sure that the lidars are horizontal. I thought about using IR goggles (like the night vision ones) and some fog machine (like the one in nightclubs) in order to see the surface covered by the lidar's rotating laser ray. As a result I would expect to see something &lt;a href=&quot;https://www.youtube.com/watch?v=ufoDT2IDU58&quot; rel=&quot;nofollow&quot;&gt;like this&lt;/a&gt; but planar. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before thinking about trying to get my hands on such hardware I wanted to ask:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do sick laser have enough intensity to be observed by such goggles?&#xA;Does anybody tried such an approach?&lt;/p&gt;&#xA;" OwnerUserId="4429" LastActivityDate="2016-08-04T22:55:51.540" Title="Directly observing lidar laser rays" Tags="&lt;laser&gt;&lt;lidar&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="9669" PostTypeId="1" AcceptedAnswerId="9670" CreationDate="2016-04-20T17:15:30.637" Score="0" ViewCount="41" Body="&lt;p&gt;I need to find out if There is a way to get at least 60 Hz of linear Motion with at least 5 mm of stroke that I intend to make linear persistence of vision device(not rotating one)It must be small and light as possible. ( maybe 50 mm long and 10-15 mm diameter or around these) (less than 500 grams) The Load will be around 50 grams.  There are voice coils that is very expensive, can I use solenoids for instance or what do you recommend? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks &lt;/p&gt;&#xA;" OwnerUserId="13480" LastEditorUserId="13480" LastEditDate="2016-04-21T17:19:54.907" LastActivityDate="2016-04-21T17:19:54.907" Title="What type of actuator should I use?" Tags="&lt;actuator&gt;&lt;motion&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2016-04-21T18:35:40.957" ContentLicense="CC BY-SA 3.0" />
  <row Id="9670" PostTypeId="2" ParentId="9669" CreationDate="2016-04-20T17:55:11.880" Score="1" Body="&lt;p&gt;A few guidelines to help you search:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Max displacement: +/- 5mm. &#xA;Frequency: 60Hz = 377 rad/s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, some math:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;x = 0.005 \sin{(377 t)} \\&#xA;v = (377)(0.005) \cos{(377 t)} \\&#xA;a = -(377^2)(0.005) \sin{377 t)} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, the max values are wherever the particular trig function is equal to 1, so:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;x_{\mbox{max}} = 0.005 \mbox{m}\\&#xA;v_{\mbox{max}} = 1.9 \mbox{m/s}\\&#xA;a_{\mbox{max}} = 710 \mbox{m/s}^2 \approx 72 \mbox{g}\\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, $F = ma$, so the peak force you are applying is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;F = ma \\&#xA;F = (0.3)(710) \\&#xA;F = 213 \mbox{N} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Peak power is force times speed. &#xA;$$&#xA;P = (213)(1.9) \\&#xA;P = 405 W \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Per your guidelines, you want (I'm assuming) a cylinder that's 0.05m long and 0.01m in diameter. This means that the volume is (approximately)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;V = Ah \\&#xA;V = \pi r^2 h \\&#xA;V = \pi (0.005)^2 (0.05) \\&#xA;V = 0.00000393 \mbox{m}^3 \\&#xA;V = 0.00393 \mbox{liters} \\&#xA;V = 3927 \mbox{mm}^3 \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, you can try looking at &lt;a href=&quot;https://en.wikipedia.org/wiki/Power_density&quot; rel=&quot;nofollow&quot;&gt;power density&lt;/a&gt; and see that you want 405W of peak power in a space of 0.00393 liters, or a power density of about $405/0.00393 = \boxed{103 \mbox{W/l}}$, or about the &lt;a href=&quot;http://www.dukeengines.com/advantages/power-density/&quot; rel=&quot;nofollow&quot;&gt;same power density as a Ferrari engine&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not saying it's not possible, but good luck.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you &lt;em&gt;are&lt;/em&gt; a PhD student at a university, you should consider asking your committee members to guide you to another grad student for assistance with this. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typically I would vote to close an open-ended design/shopping question like this, but I figured I'd go through the steps to show that what you want isn't really attainable. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-04-20T17:55:11.880" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="9671" PostTypeId="2" ParentId="2556" CreationDate="2016-04-20T22:02:55.657" Score="1" Body="&lt;p&gt;The &lt;a href=&quot;http://www.mrpt.org/&quot; rel=&quot;nofollow&quot;&gt;MRPT library&lt;/a&gt; can do this for you. You need to use a &lt;code&gt;CPose3DPDFGaussian&lt;/code&gt; to represent your pose and covariance then use the &lt;code&gt;+&lt;/code&gt; operator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Under the hood it represents your 6DOF covariance as a 7DOF quaternion base covariance, where the math is more straightforward.&lt;/p&gt;&#xA;" OwnerUserId="4273" LastEditorUserId="9176" LastEditDate="2016-04-21T18:35:55.973" LastActivityDate="2016-04-21T18:35:55.973" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9673" PostTypeId="1" CreationDate="2016-04-20T22:14:50.797" Score="0" ViewCount="160" Body="&lt;p&gt;The diagram below shows an old BEAMBot strategy:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://youtu.be/DNj958sV0-U&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/AOmPx.png&quot; alt=&quot;Block diagram of IR based following circuit&quot;&gt;&lt;/a&gt;   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there code or an example using this method? I would rather avoid OpenCV, ultrasonic, GPS etc. I just want the Roomba wheels to react as I go straight, turn left or right. Finally, I could add a front wheel on a servo and try having the Roomba turn with me. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also has anybody added big, all terrain wheels to a Roomba to replace the originals?&lt;/p&gt;&#xA;" OwnerUserId="13442" LastEditorUserId="9176" LastEditDate="2016-04-25T10:43:12.620" LastActivityDate="2016-04-25T10:43:12.620" Title="Is there a &quot;follow me&quot; Roomba/Create that works like a BEAMBot?" Tags="&lt;control&gt;&lt;irobot-create&gt;&lt;roomba&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9675" PostTypeId="1" AcceptedAnswerId="9685" CreationDate="2016-04-21T01:15:21.443" Score="0" ViewCount="79" Body="&lt;p&gt;I am going to build an autonomous robot with Kalman-filter for localization integrated from Lidar, encoder, IMU and GPS. I will also add obstacle avoidance while moving to the required position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is the ATmega32 8-bit suitable for that (or Arduino Mega) or do I have to use avr32, ARM, or PIC32 and which is better?&lt;/p&gt;&#xA;" OwnerUserId="13502" LastEditorUserId="9176" LastEditDate="2016-04-21T18:37:00.410" LastActivityDate="2016-04-22T11:56:52.543" Title="Suitable uC for atonomous robot" Tags="&lt;mobile-robot&gt;&lt;arduino&gt;&lt;localization&gt;&lt;microcontroller&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="9677" PostTypeId="1" CreationDate="2016-04-21T12:32:41.283" Score="4" ViewCount="1065" Body="&lt;p&gt;The issue is regarding simulation of Kuka robot KR16L6-2 in &lt;strong&gt;MATLAB using Robotics toolkit by Peter Corke&lt;/strong&gt;. I wish to simulate  the kinematic before passing a command to real robot for motion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have attached the DH-Parameters. Apart from this I have also tried many other combination of orientations but to no useful effect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/S81q2.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/S81q2.jpg&quot; alt=&quot;DH parameters and code&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problems is that the robot base rotates counter-clockwise by default for positive increases in &lt;code&gt;Joint1&lt;/code&gt;, while the original robot moves in the opposite direction. Similarly for the wrist roll, i.e. Joint 4, the direction of simulation is reversed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to confirm that it's not my mistake only, I searched for similar ready made simulation software. Although it did not include the same KUKA robot, a similar variant (KUKA_KR_5_sixx_R650) was available. Hence, KUKA_KR_5_sixx_R650 had one set of motions for base and wrist in &lt;strong&gt;&lt;em&gt;RoKiSim v1.7&lt;/em&gt;&lt;/strong&gt; for positive increases in joint angle and reverse motion in &lt;strong&gt;&lt;em&gt;roboanalyzerv7&lt;/em&gt;&lt;/strong&gt;  .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/8vWCo.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8vWCo.jpg&quot; alt=&quot;Screenshots of Robot Simulation of KUKA_KR_5_sixx_R650&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;NOTE:&lt;/em&gt;&lt;/strong&gt; Only the rotation of J1 (base) and J4 (Wrist Roll) are reversed&#xA;and I want to recreate the results of RoKiSim v1.7 in Matlab where rotations are similar to the real world robot spec provided by KUKA.&lt;/p&gt;&#xA;" OwnerUserId="13507" LastEditorUserId="21223" LastEditDate="2019-08-03T23:40:46.157" LastActivityDate="2019-08-03T23:40:46.157" Title="Kuka KR16L-2 robot simulation base and wrist rotation inconsistent with original robot" Tags="&lt;matlab&gt;&lt;simulation&gt;&lt;industrial-robot&gt;&lt;kuka&gt;&lt;robotics-toolbox&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9680" PostTypeId="1" AcceptedAnswerId="9703" CreationDate="2016-04-21T15:49:32.687" Score="1" ViewCount="18616" Body="&lt;p&gt;I created a package in catkin workspace and put a publisher.py node inside the src directory of package which worked fine. Then i added another node subscriber.py node and used catkin_make to build. Now when I try to run any of the nodes or find package i am getting above error. Am I missing any step ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="10758" LastActivityDate="2021-04-29T18:13:53.323" Title="Getting “rospack package not found error” in ROS" Tags="&lt;ros&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9682" PostTypeId="1" CreationDate="2016-04-21T20:53:23.720" Score="1" ViewCount="135" Body="&lt;p&gt;I was recently looking into purchasing either a Dynamixel AX-12A or XL-320. The XL seems to use OLLO frames, which only seem to be available in a toy-like set. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was wondering if there are any other frames available or if I should just get an AX-12?&lt;/p&gt;&#xA;" OwnerUserId="13512" LastEditorUserId="37" LastEditDate="2018-08-15T15:27:09.413" LastActivityDate="2018-08-15T15:27:09.413" Title="What frames are supported by the Dynamixel XL-320 OLLO?" Tags="&lt;rcservo&gt;&lt;walking-robot&gt;&lt;dynamixel&gt;" AnswerCount="0" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9683" PostTypeId="1" AcceptedAnswerId="9693" CreationDate="2016-04-21T21:04:38.310" Score="2" ViewCount="879" Body="&lt;p&gt;I am part of my college robotics team which is preparing for Robocon 2017.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We have used Mecanum wheels in last Robocon competition, but we have faced huge slip and vibration. I have looked for all kinematic and dynamic formulas and all stuff about Mecanum wheels, but still can't get to a conclusion for my problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://drive.google.com/file/d/0BwdLwLAVvVLGdFBLS3RSdlN4dXc/view&quot; rel=&quot;nofollow&quot;&gt;Video of the problem&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The robot is around 25 kg and the Mecanum wheel diameter is about 16 cm with 15 rollers (single type). Please help me why it happened like that!?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also suggest me what to do now - Should I design a new Mecanum wheel or bring it from market? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I should design, what parameters should I consider, and please help me how to design in CAD software like SolidWorks? And then, shall I give it to 3D printing?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I should buy directly from market, where should I buy?&lt;/p&gt;&#xA;" OwnerUserId="13498" LastEditorUserId="350" LastEditDate="2016-04-23T23:55:21.513" LastActivityDate="2016-04-24T00:08:25.193" Title="Choosing the right Mecanum wheel" Tags="&lt;design&gt;&lt;wheel&gt;" AnswerCount="1" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9684" PostTypeId="1" CreationDate="2016-04-22T02:03:53.960" Score="5" ViewCount="532" Body="&lt;p&gt;I tried to disable sleep by pulsing the BRC pin low for one second every minute as suggested in the OI, but my Create 2 still goes to sleep after 5 minutes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My firmware is r3_robot/tags/release-3.2.6:4975 CLEAN&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Create 2 is connected to an Arduino, and the BRC is driven by one of the Arduino pins.  I verified on a DMM that the voltage is indeed toggling.  I am able to both send and receive serial data between the Arduino and Create2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pseudo-code:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Initialize roomba.  Connect serial at 115200 baud.  Toggle BRC: high for 200 ms, low for 200 ms, then high again.  Leave it high.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Ask roomba to stream sensor data in passive mode.  Wait 1 second after BRC toggle to give some extra time to wake-up.  Then send opcode 7 (reset), wait for reset message to complete by looking for the last few characters, then wait another second for good measure.  Next, send opcode 128 (start into passive mode), wait 100 ms to let opcode stick, then ask for stream of data (opcode 148 followed by number of packet IDs and the packet IDs themselves).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Main loop: Echo data from Create2 to the serial-USB output of the Arduino so that I can view the Create2 data.  The data sent by the Create2 look valid (good checksum) and are sent in the expected time interval of ~15 ms.  The main loop also toggles the BRC low for 1 second every minute.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;For the full gory details, the complete Arduino sketch is shown below&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;const uint8_t brcPin = 2; // Must keep this low to keep robot awake&#xA;long last_minute = 0;&#xA;long minute = 0;&#xA;&#xA;// Initialize roomba&#xA;void roomba_init()&#xA;{&#xA;  Serial3.begin(115200); // Default baud rate at power up&#xA;  while (!Serial3) {}    // Wait for serial port to connect&#xA;&#xA;  // BRC state change from 1 to 0 = key-wakeup&#xA;  // keep BRC low to keep roomba awake&#xA;  pinMode(brcPin, OUTPUT);&#xA;  Serial.println(&quot;BRC HIGH&quot;);&#xA;  digitalWrite(brcPin, HIGH);&#xA;  delay(200);  // 50-500 ms&#xA;&#xA;  Serial.println(&quot;BRC LOW&quot;);&#xA;  digitalWrite(brcPin, LOW);&#xA;  delay(200);&#xA;&#xA;  Serial.println(&quot;BRC HIGH&quot;);&#xA;  digitalWrite(brcPin, HIGH);&#xA;  last_minute = millis()/60000;&#xA;&#xA;  delay(1000);  // give some extra time to wake up after BRC toggle.&#xA;&#xA;  Serial.println(&quot;Opcode 7: reset robot&quot;);&#xA;  Serial3.write(7);      // Reset robot&#xA;  // Discard roomba boot message&#xA;  // Last part of reset message has &quot;battery-current-zero 257&quot;&#xA;  char c = 'x';&#xA;  Serial.println(&quot;Gimme a z!&quot;);&#xA;  while (c != 'z') {&#xA;    if (Serial3.available() &amp;gt; 0) {c = Serial3.read(); Serial.write(c);}&#xA;  }&#xA;  Serial.println(&quot;Gimme a e!&quot;);&#xA;  while (c != 'e') {&#xA;    if (Serial3.available() &amp;gt; 0) {c = Serial3.read(); Serial.write(c);}&#xA;  }&#xA;  Serial.println(&quot;Gimme a r!&quot;);&#xA;  while (c != 'r') {&#xA;    if (Serial3.available() &amp;gt; 0) {c = Serial3.read(); Serial.write(c);}&#xA;  }&#xA;  Serial.println(&quot;Gimme a o!&quot;);&#xA;  while (c != 'o') {&#xA;    if (Serial3.available() &amp;gt; 0) {c = Serial3.read(); Serial.write(c);}&#xA;  }&#xA;  // Flush remaining characters: 32 50 53 54 13 10 or &quot; 257\r\n&quot;&#xA;  Serial.println(&quot;Gimme a newline!&quot;);&#xA;  while (c != 10) {&#xA;    if (Serial3.available() &amp;gt; 0) {c = Serial3.read(); Serial.write(c);}&#xA;  }&#xA;  delay(1000);  // allow extra time for opcode 7 to stick&#xA;&#xA;  Serial.println(&quot;\nOpcode 128: start OI in passive mode&quot;);&#xA;  Serial3.write(128);   // Start the Open Interface.  Passive mode. &#xA;  delay(100);           // Allow some time for opcode 128 to stick (not sure if this is needed)&#xA;  Serial.println(&quot;Opcode 148: stream data packets&quot;);&#xA;  Serial3.write(148);   // Stream data packets (every 15 ms)&#xA;  Serial3.write(16);    //   Number of packet IDs&#xA;  Serial3.write(8);     //   Packet ID 8 = wall                       1 byte&#xA;  Serial3.write(9);     //   Packet ID 9 = cliff left                 1&#xA;  Serial3.write(10);    //   Packet ID 10 = cliff front left          1&#xA;  Serial3.write(11);    //   Packet ID 11 = cliff front right         1&#xA;  Serial3.write(12);    //   Packet ID 12 = cliff right               1&#xA;  Serial3.write(13);    //   Packet ID 13 = virtual wall              1&#xA;  Serial3.write(27);    //   Packet ID 27 = wall signal               2&#xA;  Serial3.write(28);    //   Packet ID 28 = cliff left signal         2&#xA;  Serial3.write(29);    //   Packet ID 29 = cliff front left signal   2&#xA;  Serial3.write(30);    //   Packet ID 30 = cliff front right signal  2&#xA;  Serial3.write(31);    //   Packet ID 31 = cliff right signal        2&#xA;  Serial3.write(41);    //   Packet ID 41 = velocity right            2&#xA;  Serial3.write(42);    //   Packet ID 42 = velocity left             2&#xA;  Serial3.write(43);    //   Packet ID 43 = encoder counts left       2&#xA;  Serial3.write(44);    //   Packet ID 44 = encoder counts right      2&#xA;  Serial3.write(45);    //   Packet ID 45 = light bumper              1&#xA;}&#xA;&#xA;void setup() {&#xA;  // Open serial communications (through USB interface)&#xA;  // The serial output of the Create 2 is echoed from Serial3 to Serial&#xA;  // so that we can observe the Create 2 serial output on a computer.&#xA;  Serial.begin(115200);&#xA;  while (!Serial) {}   // Wait for serial port to connect&#xA;  Serial.println(F(&quot;Starting roomba test...\n&quot;));&#xA;&#xA;  // Roomba serial commmunications&#xA;  Serial.println(F(&quot;Initializing comm to Roomba\n&quot;));&#xA;  roomba_init();&#xA;}&#xA;&#xA;long low_start_time;&#xA;boolean brc_is_low;&#xA;void loop() {&#xA;  // Read from Serial3 and echo results to Serial&#xA;  if (Serial3.available()) {&#xA;    uint8_t b = Serial3.read();&#xA;    uint8_t checksum = 19;&#xA;    if (b==19) { // First byte of reply stream is 19&#xA;      Serial.print(&quot;\nStart at &quot;);&#xA;      Serial.println(millis());&#xA;      Serial.print(b); Serial.print(&quot; &quot;);&#xA;      while (Serial3.available() &amp;lt; 43) {}  // Wait for rest of data (buffer is 64 bytes)&#xA;      for (int I=0; I&amp;lt;43; I++) {&#xA;        b = Serial3.read();&#xA;        Serial.print(b); Serial.print(&quot; &quot;);&#xA;        checksum += b;&#xA;      }&#xA;      Serial.print(&quot;Chksum &quot;);&#xA;      Serial.println(checksum);  // 0 is good&#xA;    } else {&#xA;      // Probably an ascii message&#xA;      //Serial.write(b);&#xA;      Serial.print(b); Serial.print(&quot; &quot;);&#xA;    }&#xA;  }&#xA;&#xA;  // Pulse BRC low every minute for 1 second&#xA;  long now = millis();&#xA;  long minute = now/60000;&#xA;  if (minute != last_minute) {&#xA;    Serial.println(&quot;\n\nBRC LOW&quot;);&#xA;    Serial.println(millis());&#xA;    digitalWrite(brcPin, LOW);&#xA;&#xA;    last_minute = minute;&#xA;    low_start_time = now;&#xA;    brc_is_low = true;&#xA;  }&#xA;&#xA;  // 1 s low pulse width&#xA;  if ((now &amp;gt; low_start_time + 1000) &amp;amp;&amp;amp; brc_is_low) {&#xA;      Serial.println(&quot;\n\nBRC HIGH&quot;);&#xA;      Serial.println(millis());&#xA;      digitalWrite(brcPin, HIGH);&#xA;      brc_is_low = false;&#xA;  }  &#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="13513" LastEditorUserId="9176" LastEditDate="2016-04-22T17:12:42.073" LastActivityDate="2020-08-04T20:02:55.267" Title="Cannot disable sleep in passive mode for iRobot Create 2" Tags="&lt;irobot-create&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9685" PostTypeId="2" ParentId="9675" CreationDate="2016-04-22T11:56:52.543" Score="1" Body="&lt;p&gt;One could break down your problem to three areas: memory, speed and I/O. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Memory is pretty straightforward, but you have to estimate it yourself. Things to consider: Are you doing a map? Are you saving past state? If yes how long/much? etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Speed is a bit different: Assume you are building a quadcopter: If you have high latency in the controller's feedback loops the thing will not even fly. If you have a ground vehicle on the other hand you could simply drive slower. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider how you want to structure the program's control flow: Do you poll for new data all the time or do it interrupt-driven? &#xA;How fast should your control loop run and what do you need to calculate during it? How many floating point operations do you need? How large is your map for obstacle avoidance? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lastly what peripherals, sensors, debugging tools etc. do you want to connect and does the uC have enough connections to allow that? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If this is going to be a rather serious project, I would shy away from arduino, because if you need to have more control over the program and write low-level code things are likely to get messy. The learning curve to develop with Atmel Controllers directly is not that high. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the meager information you provided I feel like the ATmega32 will be suitable, but if you need a fast control loop consider ARM with a floating point unit. &lt;/p&gt;&#xA;" OwnerUserId="6773" LastActivityDate="2016-04-22T11:56:52.543" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="9686" PostTypeId="1" AcceptedAnswerId="9689" CreationDate="2016-04-22T12:56:10.390" Score="4" ViewCount="127" Body="&lt;p&gt;I think i have an simple problem, but can't my head around how i should resolve it...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My setup looks like this: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/fMAEU.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fMAEUm.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/BbdFh.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/BbdFhm.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The grey box on end effector is supposed to be an camera, which measures a dx,dy,dz between the object and the camera. These are used to  position the camera such that dz between the object and the camera is equal to 0.5, and dx = dy = 0. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that I using inverse kinematics can determine the Q which positions it according the given rotation and position, but what if I only provide it a position only?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How do extract all Q that make dx = dy = 0, and dz = 0.5, while keeping the object in sight at all time?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An example could be if an object was placed just above the base (see second image), it should then find all possible configurations which in this case would consist of the arm rotating around the object, while the camera keeps the object in sight...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I just realized a possible solution would be to create a sphere with the object in centrum  an radius of dz, and then use this sphere to extract all pairs of rotations and position... But how would one come by with such an solution?&lt;/p&gt;&#xA;" OwnerUserId="13439" LastEditorUserId="350" LastEditDate="2016-04-22T19:02:12.277" LastActivityDate="2016-04-22T20:15:23.530" Title="Performing inverse kinematics based on a displacement of the end effector?" Tags="&lt;robotic-arm&gt;&lt;inverse-kinematics&gt;&lt;stereo-vision&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9688" PostTypeId="2" ParentId="9673" CreationDate="2016-04-22T19:21:48.297" Score="1" Body="&lt;p&gt;The Roomba already does something very close to this: when it returns to its charging dock, it aligns itself with an IR signal coming from the top of the dock.  The procedure is more sophisticated, but the basics are the same.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to &lt;a href=&quot;http://irobot.lv/uploaded_files/File/iRobot_Roomba_500_Open_Interface_Spec.pdf&quot; rel=&quot;nofollow&quot;&gt;this PDF of the iRobot Roomba 500 Open Interface&lt;/a&gt;, there is a way to read the &quot;infrared character&quot; from the left, right, and omni sensors.  So you would need a device that could send an IR character (in Roomba's format) to the vehicle, and your code would detect and react to it. &lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2016-04-22T19:21:48.297" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9689" PostTypeId="2" ParentId="9686" CreationDate="2016-04-22T20:15:23.530" Score="0" Body="&lt;p&gt;You always have both position ad orientation. In your case the orientation can be chosen by you to be constant (e.g. 0, 0, 0), in which case you will be not be able to track the object if it is for example above the camera.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Th camera measures the relative position of the object (relative to the camera). You subtract the distance on the z axis that you want to keep and you add the difference to the current poseition of the robot. Morever you can calculate the angle how much the endefector has to rotate to face the object. Eg. If the camera measures:&#xA;Dx = 0,5, dy=0 and dz=0,5 then you would add the dx to the current tcp position (since dz=0,5 which is the distance you want to keep). After that you can calulate the change in orientation needed to face the object by&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$RotY = atan2(dx,dz) = atan2(0.5,0.5) = 45deg$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You add this (also calculate RotX and RotZ if not defined as &quot;tool axis&quot;) to the current orientation of the end-effector and give it as reference (together withe the changed position) value for the next motion.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2016-04-22T20:15:23.530" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="9690" PostTypeId="2" ParentId="9677" CreationDate="2016-04-22T20:24:44.613" Score="2" Body="&lt;p&gt;Kuka robots have the axis positive and negative side clearly marked on them. Use these to define the orientations of the Z-axes assigned to the joints. With other words, try to reverse engineer the DH parameters used by Kuka. Only this way can you corelate your DH table with the kuka axis orientations. If the axis moves in the wrong direction it means that your coordonate system is upside down. Flip it and change the sign of the other parameters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also keep in mind that there are multiple variants of teh DH parametrization (proximal and distal or modified DH). It can be that kuka uses a different one then the Robotics toolbox.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other simulation software is not necesarily corelated with the real robot.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2016-04-22T20:24:44.613" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9691" PostTypeId="1" CreationDate="2016-04-23T17:06:32.963" Score="5" ViewCount="1852" Body="&lt;p&gt;How do i compute all transformation matrices which places a robot endeffector at the shell of this sphere, with the end effector pointing toward the object in the center. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/fSeyk.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fSeyk.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know at all time how far the object is relative to the endeffector, and radius of the sphere is the desired distance i want between the object and endeffector.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want by using inverse kinematics pan around this object in a sphere shaped trajectory. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each transformation matrix should contain different positions on the sphere and the rotation should be oriented such that the arm looks at the object. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The position should be relative easy to compute, as i already know the distance to to object, and radius of the sphere. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the rotation matrix for each position is still a mystery for me.  &lt;/p&gt;&#xA;" OwnerUserId="13491" LastActivityDate="2016-05-06T16:26:20.610" Title="Generate transformation matrices for rotating around a object?" Tags="&lt;robotic-arm&gt;&lt;rotation&gt;" AnswerCount="3" CommentCount="6" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9693" PostTypeId="2" ParentId="9683" CreationDate="2016-04-24T00:08:25.193" Score="2" Body="&lt;p&gt;The problem appears to be that your drive motors are &lt;a href=&quot;https://en.wikipedia.org/wiki/Wheelspin&quot; rel=&quot;nofollow noreferrer&quot;&gt;providing too much torque&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In other words, there isn't enough friction between the wheels and the floor to counteract the force that the motors are exerting on the wheels.  To determine whether this is actually the problem, try adding weight to the vehicle (directly above the wheels, if possible); this should balance the forces by increasing the static friction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, adding weight to your vehicle is not a good long term solution.  The proper fix would be to configure your motor controllers to &lt;a href=&quot;https://physics.stackexchange.com/q/38707&quot;&gt;limit the torque&lt;/a&gt; produced by the motors. This might also be expressed as a current limit, depending on your setup.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="-1" LastEditDate="2017-04-13T12:40:13.570" LastActivityDate="2016-04-24T00:08:25.193" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="9694" PostTypeId="2" ParentId="9565" CreationDate="2016-04-24T01:59:43.557" Score="1" Body="&lt;p&gt;I agree with holmeski's suggestion that an accelerometer is the way to go for static projects, but if you need more sophisticated measurements, an accelerometer/gyroscope combo will be necessary.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The MPU-6050 is a chip that contains a 3-axis MEMs accelerometer and gyroscope with a very small footprint. I have personally used the GY-521 breakout board, and I was impressed with the performance given the low price (~$5). Furthermore, there is documentation for the MPU-6050 on the Arduino website, which migh help for your project (&lt;a href=&quot;http://playground.arduino.cc/Main/MPU-6050&quot; rel=&quot;nofollow&quot;&gt;http://playground.arduino.cc/Main/MPU-6050&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One caveat to the MPU-6050 is that you will have to put some thought into filtering the measurements. Accelerometers suffer from low frequency noise, while gyroscopes suffer from high frequency noise. When I used the MPU-6050, I used a complimentary filter to combine the measurements from the accelerator and gyroscope into a single measurement for angle, which worked well. In retrospect, it would have been better to implement a Kalman Filter instead. Both will not only enable you to complete your project with the MPU-6050, but you will get to implement software filters, which is a good experience.&lt;/p&gt;&#xA;" OwnerUserId="9585" LastEditorUserId="9585" LastEditDate="2016-04-24T02:08:52.113" LastActivityDate="2016-04-24T02:08:52.113" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9695" PostTypeId="2" ParentId="9691" CreationDate="2016-04-24T06:57:05.917" Score="0" Body="&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;make sure tha your axes are parallel with the coordinate system in which your robots orientations are expressed.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Caclulate the orientation angles geometrically by taking projections of the vector marked with red.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I do not see the need for any rotation matrices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a 2D example. The camera moves on the circle and the Z orinetation has to be adjusted. The dx and dy can be calculated form the circle equations and the Z rotation is &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$Z_{rot}= atan2(dy,dx)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/4QfTK.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4QfTK.jpg&quot; alt=&quot;2D example&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2016-04-24T08:29:31.923" LastActivityDate="2016-04-24T08:29:31.923" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="9697" PostTypeId="1" CreationDate="2016-04-24T15:34:06.310" Score="1" ViewCount="41" Body="&lt;p&gt;I have an UAV modeled in three dimensions with let's say position coordinates $p_{uav} = (x_1,y_1,z_1)$ that is moving in a direction $d = (d_x,d_y,d_z)$ and a moving obstacle modeled as a sphere with known centre coordinates $p_{sph}=(x_2,y_2,z_2)$ and radius $ r_{sph}$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I have a plane $p$  in the direction of movement of the UAV that intersects the sphere, I want to be able to calculate the angles with respect to the vehicle's movement formed by the tangents to the sphere in the plane $ p$. In the figure, I would like to know how to calculate the angles $α_1$ and $α_2$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/5vsYb.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/5vsYb.jpg&quot; alt=&quot;Problem in three dimensions&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it helps, what I am looking is an extension in three dimensions for this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/cGR1n.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/cGR1n.jpg&quot; alt=&quot;easier problem in 2d&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which is a vehicle in two dimensions ;it is obviously an easier problem which requires only the centre of the circle. However I am not really sure how to make it work in 3D, as supposedly the plane can intersect the sphere at any two points, not necessarily the centre. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance for your help.&lt;/p&gt;&#xA;" OwnerUserId="10466" LastActivityDate="2016-04-24T15:34:06.310" Title="How to determine the angles between a UAV and a sphere" Tags="&lt;localization&gt;&lt;kinematics&gt;&lt;geometry&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9698" PostTypeId="2" ParentId="9691" CreationDate="2016-04-24T17:08:20.133" Score="4" Body="&lt;p&gt;Remember that the columns of a rotation matrix are simply unit vectors indicating where each axis points.  Lets say your end-effector is at $p_e = (x_e, y_e, z_e)$, and the center of the circle is at $p_o = (x_o, y_o, z_o)$.  You didn't fully answer my comment about your end-effector axes, so I will assume you want $z_e$ pointed at the object. Here are the steps you should take.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, some notation.  The transform from the world frame to your desired end-effector is:&#xA;$$&#xA;T^{world}_{ee} = \begin{bmatrix} R_e &amp;amp; p_e \\ 0 &amp;amp; 1 \end{bmatrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where $R_e$ is the rotation matrix in question.  It is composed of 3 column vectors:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;R_e = \begin{bmatrix} R_{x_e} &amp;amp; R_{y_e} &amp;amp; R_{z_e} \end{bmatrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The third (Z) column of the rotation matrix is simply $R_{z_e} = \widehat{p_o - p_e}$.&lt;/li&gt;&#xA;&lt;li&gt;Pick a natural orientation for your camera.  Perhaps $y_e$ down.  So think about a plane created by the world down axis and $R_{z_e}$.  Now $x_e$ must be normal to that plane.  Assuming the world down axis is $down = (0,0,-1)$.  Now $R_{x_e} = \widehat{down \times R_{z_e}}$.  This is the first (X) column of your rotation matrix.  (Note: be careful to avoid degenerate cases, like when the camera is directly above the object ($z_e = z_o$).  You need to test for this case and handle this differently.)&lt;/li&gt;&#xA;&lt;li&gt;Lastly, the Y axis of your new frame must be the cross product of the other two, so: $R_{y_e} = R_{z_e} \times R_{x_e}$.  This is the second (Y) column of your new rotation matrix.  &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;This gives you a single orientation for each position on your sphere in which the object will be upright in the camera image.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your question was a little vague on whether this is sufficient, or if you want many orientations for each point on the sphere.  Since the camera can rotate about its focal axis, the arm and camera will still be pointing at the object.  However, the object will be rotated in the image.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are an infinite number of orientations that satisfy the constrains for each point, but you can get a discrete set by picking some angles from 0 to 360 degrees then simply rotating your end-effector frame about its Z axis by this amount.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;T^{world}_{newee} =  T^{world}_{ee} * \begin{bmatrix}&#xA;\cos \theta &amp;amp;  -\sin \theta &amp;amp; 0 &amp;amp; 0\\&#xA;\sin \theta &amp;amp; \cos \theta &amp;amp; 0 &amp;amp; 0\\&#xA;0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0\\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1\\&#xA;\end{bmatrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So now $T^{world}_{newee}$ will have the object upside down if you chose $\theta = 180^{\circ}$ for example.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is some simple Python code which implements this solution (without the arbitrary rotation), and displays the frames with OpenRave.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#! /usr/bin/env python&#xA;&#xA;import numpy as np&#xA;from openravepy import *&#xA;&#xA;# set up OpenRave environment&#xA;env = Environment()&#xA;env.SetViewer('qtcoin')&#xA;&#xA;# center of sphere&#xA;p_o = np.array([0.0, 0.0, 0.0])&#xA;&#xA;# radius of sphere&#xA;r = 1.0&#xA;&#xA;# down vector&#xA;down = np.array([0.0, 0.0, -1.0])&#xA;&#xA;# large coordinate frame at the center of the sphere&#xA;originaxes = misc.DrawAxes(env, [1, 0, 0, 0, p_o[0], p_o[1], p_o[2]], dist=1, linewidth=2)&#xA;&#xA;# all other frames&#xA;axes = []&#xA;&#xA;for i in range(200):&#xA;&#xA;    # get a random point on the sphere&#xA;    p_e = np.random.uniform(-1, 1, 3)&#xA;    p_e *= r / np.linalg.norm(p_e)&#xA;    p_e += p_o&#xA;&#xA;    # Z column&#xA;    R_z = (p_o - p_e)&#xA;    R_z /= np.linalg.norm(R_z)&#xA;&#xA;    # X column&#xA;    R_x = np.cross(down, R_z)&#xA;    R_x /= np.linalg.norm(R_x)&#xA;&#xA;    # Y column&#xA;    R_y = np.cross(R_z, R_x)&#xA;&#xA;    # Full transformation matrix&#xA;    T = np.array([[ R_x[0], R_y[0], R_z[0], p_e[0] ],&#xA;                  [ R_x[1], R_y[1], R_z[1], p_e[1] ],&#xA;                  [ R_x[2], R_y[2], R_z[2], p_e[2] ],&#xA;                  [      0,      0,      0,      1]])&#xA;&#xA;    # draw it&#xA;    axes.append(misc.DrawAxes(env, T, dist=0.2, linewidth=1))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This should give you frames all around the sphere like this:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/42Il4.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/42Il4.png&quot; alt=&quot;Random frames around a circle&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="110" LastEditorUserId="110" LastEditDate="2016-05-06T16:26:20.610" LastActivityDate="2016-05-06T16:26:20.610" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="9699" PostTypeId="2" ParentId="9691" CreationDate="2016-04-25T00:54:11.840" Score="1" Body="&lt;p&gt;Currently your problem still has one degree of freedom, namely the orientation of the robot can still roll around the vector. For now I will assume that you would want the top of the robot to keep facing upwards as best as possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A rotation matrix can be seen as an second order tensor, which can be constructed by summing multiple &lt;a href=&quot;http://mathworld.wolfram.com/Dyad.html&quot; rel=&quot;nofollow&quot;&gt;dyads&lt;/a&gt; of the new and old base vector,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;R = \vec{e}_{x1} \vec{e}_{x0} + \vec{e}_{y1} \vec{e}_{y0} + \vec{e}_{z1} \vec{e}_{z0}.&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because each basis should be orthonormal, then taking the dot product of $R$ with either $\vec{e}_{x0}$, $\vec{e}_{y0}$ or $\vec{e}_{z0}$ will result in the base vectors $\vec{e}_{x1}$, $\vec{e}_{y1}$ or $\vec{e}_{z1}$ respectively. Each dyad can be expressed as a matrix by taking the &lt;a href=&quot;http://mathworld.wolfram.com/VectorDirectProduct.html&quot; rel=&quot;nofollow&quot;&gt;vector direct product&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now all you have to do is find an expression for the initial and final orthonormal basis. Since you want the robot to face the center of the sphere, you can define $\vec{e}_{x0}$ by the direction the front of the robot is facing, when no rotation is applied, and $\vec{e}_{x1}$ as the unit vector pointing towards the center of the sphere. By using the addition constraint for the roll you can define $\vec{e}_{y0}$ as the direction the top of the robot is facing, when no rotation is applied, and $\vec{e}_{y1}$ by taking the orthogonal component of $\vec{e}_{y0}$ with respect to $\vec{e}_{x1}$,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\vec{e}_{y1} = \frac{\vec{e}_{y0} - \left(\vec{e}_{y0} \cdot \vec{e}_{x1}\right) \vec{e}_{x1}}{\left\|\vec{e}_{y0} - \left(\vec{e}_{y0} \cdot \vec{e}_{x1}\right) \vec{e}_{x1}\right\|}.&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The remaining vectors van be found using the fact that each basis should be orthonormal, which can be achieved by simply taking the cross product of the other base vectors. So $\vec{e}_{z0}=\vec{e}_{x0}\times\vec{e}_{y0}$ and $\vec{e}_{z1}=\vec{e}_{x1}\times\vec{e}_{y1}$, you could reverse the order of the vectors in the cross product, but you should do for both the $\vec{e}_{z0}$ and $\vec{e}_{z1}$ because otherwise the resulting &quot;rotation&quot; will also contain a reflection (the robot will be rotated but also a mirror image of itself).&lt;/p&gt;&#xA;" OwnerUserId="1487" LastActivityDate="2016-04-25T00:54:11.840" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9700" PostTypeId="1" CreationDate="2016-04-25T07:22:05.020" Score="4" ViewCount="1405" Body="&lt;p&gt;I am having some issue with implementing a least square solution of the inverse kinematics problem. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The q configuration I get are rather large, or makes no sense, so I was hoping someone here could help me find my error in my program. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;rw::math::Q pathPlanning::invKin(double dx, double dy , double dz)&#xA;{&#xA;&#xA;    rw::kinematics::State state =  this-&amp;gt;state;&#xA;    rw::math::Transform3D&amp;lt;&amp;gt; t_tool_base =  this-&amp;gt;device.get()-&amp;gt;baseTend(state);&#xA;&#xA;&#xA;    cout &amp;lt;&amp;lt; t_tool_base.R().e() &amp;lt;&amp;lt; endl;&#xA;    cout &amp;lt;&amp;lt; endl;&#xA;    cout &amp;lt;&amp;lt; t_tool_base.P().e() &amp;lt;&amp;lt; endl;&#xA;    cout &amp;lt;&amp;lt; endl;&#xA;&#xA;    Eigen::MatrixXd jq(this-&amp;gt;device.get()-&amp;gt;baseJend(state).e().cols(), this-&amp;gt;device.get()-&amp;gt;baseJend(state).e().rows());&#xA;    jq =  this-&amp;gt;device.get()-&amp;gt;baseJend(state).e();&#xA;&#xA;&#xA;    //Least square solver - dq = [j(q)]T (j(q)[j(q)]T)⁻1 du  &amp;lt;=&amp;gt; dq = A*du&#xA;    Eigen::MatrixXd A (6,6);&#xA;    //A = jq.transpose()*(jq*jq.transpose()).inverse();&#xA;    A = (jq*jq.transpose()).inverse()*jq.transpose();&#xA;&#xA;    std::vector&amp;lt;rw::math::Transform3D&amp;lt;&amp;gt; &amp;gt; out = sphere(dx,dy,dz);&#xA;&#xA;    std::ofstream outfile;&#xA;    outfile.open(&quot;q_conf.txt&quot;, std::ios_base::app);&#xA;&#xA;    for(unsigned int i = 0; i &amp;lt;= out.size() ; ++i )&#xA;    {&#xA;        rw::math::Vector3D&amp;lt;&amp;gt; dif_p = out[i].P()-t_tool_base.P();&#xA;&#xA;        Eigen::Matrix3d dif = out[i].R().e()- t_tool_base.R().e();&#xA;        rw::math::Rotation3D&amp;lt;&amp;gt; dif_r(dif);&#xA;        rw::math::RPY&amp;lt;&amp;gt; dif_rot(dif_r);&#xA;&#xA;        Eigen::VectorXd du(6);&#xA;        du(0) = dif_p[0];&#xA;        du(1) = dif_p[1];&#xA;        du(2) = dif_p[2];&#xA;&#xA;        du(3) = dif_rot[0];&#xA;        du(4) = dif_rot[1];&#xA;        du(5) = dif_rot[2];&#xA;&#xA;        Eigen::VectorXd q(6);&#xA;        q = A*du;&#xA;&#xA;        rw::math::Q q_current;&#xA;        q_current = this-&amp;gt;device-&amp;gt;getQ(this-&amp;gt;state);&#xA;        rw::math::Q dq(q);&#xA;        rw::math::Q q_new = q_current+ dq;&#xA;&#xA;        //cout &amp;lt;&amp;lt; jq &amp;lt;&amp;lt; endl;&#xA;        //cout &amp;lt;&amp;lt; endl;&#xA;        //std::string text = &quot;setQ{&quot;  + to_string(q_new[0])  + &quot;, &quot; + to_string(q_new[1]) + &quot;, &quot; + to_string(q_new[2]) + &quot;, &quot; + to_string(q_new[3]) + &quot;, &quot; + to_string(q_new[4]) + &quot;, &quot; + to_string(q_new[5]) + &quot;}&quot;;&#xA;        //cout &amp;lt;&amp;lt; text &amp;lt;&amp;lt; endl;&#xA;        //outfile &amp;lt;&amp;lt; text &amp;lt;&amp;lt; endl;&#xA;&#xA;    }&#xA;&#xA;    rw::math::Q bla(6); //Just used the text file for debugging purposes,  Which why I just return a random Q config.&#xA;    return bla;&#xA;}&#xA;&#xA;&#xA;rw::math::Transform3D&amp;lt;&amp;gt; pathPlanning::transform(double obj_x, double obj_y, double obj_z, double sphere_x, double sphere_y ,double sphere_z)&#xA;{&#xA;    // Z-axis should be oriented towards the object.&#xA;    // Rot consist of 3 direction vector [x,y,z] which describes how the axis should be oriented in the world space.&#xA;    // Looking at the simulation the z-axis is the camera out. X, and Y describes the orientation of the camera.&#xA;    // The vector are only for direction purposes, so they have to be normalized....&#xA;    // TODO: case [0  0 -1]... Why is it happening at what can be done to undo it?&#xA;&#xA;    rw::math::Vector3D&amp;lt;&amp;gt; dir_z((obj_x - sphere_x), (obj_y - sphere_y), (obj_z - sphere_z));&#xA;    dir_z = normalize(dir_z);&#xA;    rw::math::Vector3D&amp;lt;&amp;gt; downPlane(0.0,0.0,-1.0);&#xA;    rw::math::Vector3D&amp;lt;&amp;gt; dir_x = cross(downPlane,dir_z);&#xA;    dir_x = normalize(dir_x);&#xA;    rw::math::Vector3D&amp;lt;&amp;gt; dir_y = cross(dir_z,dir_x);&#xA;    dir_y = normalize(dir_y);&#xA;&#xA;    rw::math::Rotation3D&amp;lt;&amp;gt; rot_out (dir_x,dir_y,dir_z);&#xA;&#xA;    rw::math::Vector3D&amp;lt;&amp;gt; pos_out(sphere_x,sphere_y,sphere_z);&#xA;&#xA;    rw::math::Transform3D&amp;lt;&amp;gt; out(pos_out,rot_out);&#xA;    return out;&#xA;}&#xA;&#xA;std::vector&amp;lt;rw::math::Transform3D&amp;lt;&amp;gt;&amp;gt; pathPlanning::sphere(double dx, double dy, double dz)&#xA;{&#xA;    double r = 0.50; // Radius of the sphere -  set to 0.50 cm (TODO: has to be checked if that also is accurate)&#xA;    cout &amp;lt;&amp;lt; &quot;Create a sphere&quot; &amp;lt;&amp;lt; endl;&#xA;&#xA;    double current_x = this-&amp;gt;device-&amp;gt;baseTend(this-&amp;gt;state).P()[0];&#xA;    double current_y = this-&amp;gt;device-&amp;gt;baseTend(this-&amp;gt;state).P()[1];&#xA;    double current_z = this-&amp;gt;device-&amp;gt;baseTend(this-&amp;gt;state).P()[2];&#xA;&#xA;    rw::math::Vector3D&amp;lt;&amp;gt; center(current_x + dx, current_y + dy , current_z + dz);&#xA;&#xA;    // Formula for sphere (x-x0)²+(y-y0)²+(z-z0)²=r²&#xA;    // x: x = x_0 + rcos(theta)sin(phi)&#xA;    // y: y = y_0 + rsin(theta)sin(phi)&#xA;    // z: z = z_0 + rcos(phi)&#xA;    // Angle range: 0 &amp;lt;= theta &amp;lt;= 2M_PI ; 0 &amp;lt;= phi &amp;lt;= M_PI&#xA;&#xA;    double obj_x = current_x + dx;&#xA;    double obj_y = current_y + dy;&#xA;    double obj_z = current_z + dz;&#xA;&#xA;    ofstream positions;&#xA;    ofstream rotations_z;&#xA;    ofstream rotations_y;&#xA;    ofstream rotations_x;&#xA;    positions.open (&quot;sphere_positions.csv&quot;);&#xA;    rotations_z.open(&quot;z_dir.csv&quot;);&#xA;    rotations_y.open(&quot;y_dir.csv&quot;);&#xA;    rotations_x.open(&quot;x_dir.csv&quot;);&#xA;    std::vector&amp;lt;rw::math::Transform3D&amp;lt;&amp;gt;&amp;gt; out;&#xA;&#xA;    int count = 32;&#xA;    for(double theta = 0; theta &amp;lt;= 2*M_PI ; theta+=0.1 )&#xA;    {&#xA;&#xA;        for(double phi = 0; phi &amp;lt;= M_PI ; phi+=0.1)&#xA;        {&#xA;&#xA;            double sphere_x = obj_x + r*cos(theta)*sin(phi);&#xA;            double sphere_y = obj_y + r*sin(theta)*sin(phi);&#xA;            double sphere_z = obj_z + + r*cos(phi);&#xA;&#xA;            string text = to_string(sphere_x) + &quot; , &quot; + to_string(sphere_y)+ &quot; , &quot; + to_string(sphere_z);&#xA;            positions &amp;lt;&amp;lt; text &amp;lt;&amp;lt; endl;&#xA;&#xA;            rw::math::Transform3D&amp;lt;&amp;gt; transformation_matrix = transform(obj_x,obj_y,obj_z,sphere_x,sphere_y,sphere_z);&#xA;&#xA;            string text2 = to_string(transformation_matrix.R().e()(0,2)) + &quot; , &quot;  + to_string(transformation_matrix.R().e()(1,2)) + &quot; , &quot; + to_string(transformation_matrix.R().e()(2,2));&#xA;            string text1 = to_string(transformation_matrix.R().e()(0,1)) + &quot; , &quot;  + to_string(transformation_matrix.R().e()(1,1)) + &quot; , &quot; + to_string(transformation_matrix.R().e()(2,1));&#xA;            string text0 = to_string(transformation_matrix.R().e()(0,0)) + &quot; , &quot;  + to_string(transformation_matrix.R().e()(1,0)) + &quot; , &quot; + to_string(transformation_matrix.R().e()(2,0));&#xA;&#xA;            rotations_z &amp;lt;&amp;lt; text2 &amp;lt;&amp;lt; endl;&#xA;            rotations_y &amp;lt;&amp;lt; text1 &amp;lt;&amp;lt; endl;&#xA;            rotations_x &amp;lt;&amp;lt; text0 &amp;lt;&amp;lt; endl;&#xA;&#xA;            if(count == 32) //TODO: Why...... is this occuring?&#xA;            {&#xA;                //cout &amp;lt;&amp;lt; &quot;Theta: &quot; &amp;lt;&amp;lt; theta &amp;lt;&amp;lt; &quot; Phi: &quot; &amp;lt;&amp;lt; phi &amp;lt;&amp;lt; endl;&#xA;                //cout &amp;lt;&amp;lt; sphere_x &amp;lt;&amp;lt; &quot; , &quot; &amp;lt;&amp;lt; sphere_y &amp;lt;&amp;lt;&quot; , &quot;&amp;lt;&amp;lt; sphere_z &amp;lt;&amp;lt; endl;&#xA;                count = 0;&#xA;            }&#xA;            else&#xA;            {&#xA;                count++;&#xA;            }&#xA;&#xA;            out.push_back(transformation_matrix);&#xA;        }&#xA;    }&#xA;&#xA;    positions.close();&#xA;    rotations_z.close();&#xA;    rotations_y.close();&#xA;    rotations_x.close();&#xA;    cout &amp;lt;&amp;lt; endl;&#xA;    cout &amp;lt;&amp;lt;&quot;Object at: &quot; &amp;lt;&amp;lt; obj_x &amp;lt;&amp;lt; &quot;,&quot; &amp;lt;&amp;lt; obj_y &amp;lt;&amp;lt; &quot;,&quot; &amp;lt;&amp;lt; obj_z &amp;lt;&amp;lt; endl;&#xA;    cout &amp;lt;&amp;lt; &quot;done &quot; &amp;lt;&amp;lt; endl;&#xA;    return out;&#xA;}        &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;What am I trying to do, I am trying to orbit a robot endeffector  around an object in the center. The trajectory of the endeffector is an sphere where the endeffector should always point in to the object.  The sphere function should compute all transformation matrices which move the robot arm to the different position on the sphere with a given rotation, and the inverse kinematics should compute all the different Q-states, given an &lt;code&gt;x,y,z&lt;/code&gt; which is the actual displacement to the object itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not quite sure where my error could be at, but I think it might either be at &lt;code&gt;transform&lt;/code&gt; function where I generate my desired transformation matrix, or in &lt;code&gt;invKin&lt;/code&gt; where I create &lt;code&gt;du&lt;/code&gt;, I think I might have made an mistake in creating &lt;code&gt;du(3)&lt;/code&gt;,  &lt;code&gt;du(4)&lt;/code&gt;, &lt;code&gt;du(5)&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The libraries I've been using is Eigen, &lt;a href=&quot;http://www.robwork.dk/apidoc/nightly/rw/&quot; rel=&quot;nofollow&quot;&gt;robwork&lt;/a&gt; (basically all rw::) if anyone want to look syntax through. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based on @ghanimmukhtar I began checking for singularities for the jacobian.. Which seems in general supringsly low. I computed it for a list of random Q configurations which resulted into this...&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Determinant: -0.0577779&#xA;Determinant: -0.0582286&#xA;Determinant: 0.0051402&#xA;Determinant: -0.0498886&#xA;Determinant: 0.0209685&#xA;Determinant: 0.00372222&#xA;Determinant: 0.047645&#xA;Determinant: 0.0442362&#xA;Determinant: -0.0799746&#xA;Determinant: 0.00194714&#xA;Determinant: 0.0228195&#xA;Determinant: 0.096449&#xA;Determinant: -0.0339612&#xA;Determinant: -0.00365521&#xA;Determinant: -0.030022&#xA;Determinant: 0.021347&#xA;Determinant: 0.0413364&#xA;Determinant: 0.0041136&#xA;Determinant: -0.0151192&#xA;Determinant: 0.0682926&#xA;Determinant: -0.0657176&#xA;Determinant: 0.0915473&#xA;Determinant: -0.00516008&#xA;Determinant: -0.0394664&#xA;Determinant: -0.00469664&#xA;Determinant: 0.0494431&#xA;Determinant: -0.00156804&#xA;Determinant: -0.0402393&#xA;Determinant: -0.0141511&#xA;Determinant: 0.0203508&#xA;Determinant: -0.0368337&#xA;Determinant: -0.0313431&#xA;Determinant: -0.0566811&#xA;Determinant: -0.00766113&#xA;Determinant: -0.051767&#xA;Determinant: -0.00815555&#xA;Determinant: 0.0564639&#xA;Determinant: 0.0764514&#xA;Determinant: -0.0501299&#xA;Determinant: -0.00056537&#xA;Determinant: -0.0308103&#xA;Determinant: -0.0091592&#xA;Determinant: 0.0602148&#xA;Determinant: -0.0051255&#xA;Determinant: 0.0426342&#xA;Determinant: -0.0850566&#xA;Determinant: -0.0353419&#xA;Determinant: 0.0448761&#xA;Determinant: -0.0103023&#xA;Determinant: -0.0123843&#xA;Determinant: -0.00160566&#xA;Determinant: 0.00558663&#xA;Determinant: 0.0173488&#xA;Determinant: 0.0170783&#xA;Determinant: 0.0588363&#xA;Determinant: -0.000788464&#xA;Determinant: 0.052941&#xA;Determinant: 0.064341&#xA;Determinant: 0.00084967&#xA;Determinant: 0.00716674&#xA;Determinant: -0.0978426&#xA;Determinant: -0.0585773&#xA;Determinant: 0.038732&#xA;Determinant: -0.00489957&#xA;Determinant: -0.0460029&#xA;Determinant: 0.00269656&#xA;Determinant: 0.000600619&#xA;Determinant: -0.0408527&#xA;Determinant: -0.00115296&#xA;Determinant: 0.013114&#xA;Determinant: 0.0366423&#xA;Determinant: 0.0495209&#xA;Determinant: -0.042201&#xA;Determinant: -0.036663&#xA;Determinant: -0.103452&#xA;Determinant: -0.0119054&#xA;Determinant: 0.0692284&#xA;Determinant: -0.00717832&#xA;Determinant: 0.00729104&#xA;Determinant: 0.0126415&#xA;Determinant: -0.00515246&#xA;Determinant: -0.0556505&#xA;Determinant: 0.000670701&#xA;Determinant: -0.0545629&#xA;Determinant: 0.00251946&#xA;Determinant: 0.0405189&#xA;Determinant: 0.010928&#xA;Determinant: -0.00101032&#xA;Determinant: 0.0308612&#xA;Determinant: 0.0536183&#xA;Determinant: -0.0439223&#xA;Determinant: -0.0113453&#xA;Determinant: -0.0193872&#xA;Determinant: 0.0660165&#xA;Determinant: -0.00184695&#xA;Determinant: -0.106904&#xA;Determinant: 0.01246&#xA;Determinant: -0.00883772&#xA;Determinant: 0.0601036&#xA;Determinant: 0.0468602&#xA;Determinant: 0.0513812&#xA;Determinant: -0.000663089&#xA;Determinant: -0.00392395&#xA;Determinant: 0.0710837&#xA;Determinant: 0.0629583&#xA;Determinant: -0.0464579&#xA;Determinant: 0.0257618&#xA;Determinant: -0.0193227&#xA;Determinant: 0.00388693&#xA;Determinant: -0.02003&#xA;Determinant: 0.0191158&#xA;Determinant: -0.00159198&#xA;Determinant: -0.0702308&#xA;Determinant: -0.0242876&#xA;Determinant: -0.00934638&#xA;Determinant: -0.00221986&#xA;Determinant: -0.0268925&#xA;Determinant: 0.0596055&#xA;Determinant: -0.00925273&#xA;Determinant: -0.0167357&#xA;Determinant: 0.0596476&#xA;Determinant: -0.00515798&#xA;Determinant: -0.00324081&#xA;Determinant: -0.00321565&#xA;Determinant: 0.0669645&#xA;Determinant: -0.0342913&#xA;Determinant: -0.000342155&#xA;Determinant: -0.0104422&#xA;Determinant: -0.0410489&#xA;Determinant: -0.0246036&#xA;Determinant: 0.0208562&#xA;Determinant: -0.0692963&#xA;Determinant: 0.000839091&#xA;Determinant: -0.049308&#xA;Determinant: -0.0349338&#xA;Determinant: 0.0016057&#xA;Determinant: -0.00214381&#xA;Determinant: -0.0332965&#xA;Determinant: 0.0168007&#xA;Determinant: -0.0748581&#xA;Determinant: -0.00864737&#xA;Determinant: -0.0638044&#xA;Determinant: -0.00103911&#xA;Determinant: -0.00690918&#xA;Determinant: 0.000285789&#xA;Determinant: 0.0215414&#xA;Determinant: 0.0560827&#xA;Determinant: -0.0063201&#xA;Determinant: -0.00677609&#xA;Determinant: -0.00686829&#xA;Determinant: 0.0591599&#xA;Determinant: 0.0112705&#xA;Determinant: 0.0874784&#xA;Determinant: -0.0146124&#xA;Determinant: -0.0133718&#xA;Determinant: -0.0203801&#xA;Determinant: -0.0150386&#xA;Determinant: -0.102603&#xA;Determinant: -0.077111&#xA;Determinant: 0.021146&#xA;Determinant: 0.089761&#xA;Determinant: -0.0532867&#xA;Determinant: -0.0620632&#xA;Determinant: -0.0165414&#xA;Determinant: -0.0461426&#xA;Determinant: 0.00144256&#xA;Determinant: 0.00844777&#xA;Determinant: 0.0893306&#xA;Determinant: -0.0814478&#xA;Determinant: -0.0890507&#xA;Determinant: -0.0472091&#xA;Determinant: 0.0186799&#xA;Determinant: -0.00224087&#xA;Determinant: -0.0242662&#xA;Determinant: -0.00195303&#xA;Determinant: 0.014432&#xA;Determinant: 0.00185717&#xA;Determinant: -0.0354357&#xA;Determinant: -0.0427957&#xA;Determinant: -0.0380409&#xA;Determinant: 0.0627548&#xA;Determinant: 0.0397546&#xA;Determinant: 0.0570439&#xA;Determinant: 0.106265&#xA;Determinant: 0.0382001&#xA;Determinant: -0.0240826&#xA;Determinant: -0.0866264&#xA;Determinant: 0.024184&#xA;Determinant: 0.0841286&#xA;Determinant: -0.0303611&#xA;Determinant: -0.0337029&#xA;Determinant: -0.0202875&#xA;Determinant: 0.0643731&#xA;Determinant: -0.0475265&#xA;Determinant: -0.00928736&#xA;Determinant: -0.00373402&#xA;Determinant: 0.0636828&#xA;Determinant: 0.0122532&#xA;Determinant: 0.0398141&#xA;Determinant: -0.0563998&#xA;Determinant: -0.0778303&#xA;Determinant: 0.0164747&#xA;Determinant: 0.0314815&#xA;Determinant: 0.0744507&#xA;Determinant: -0.0897675&#xA;Determinant: 0.0260324&#xA;Determinant: -0.0734512&#xA;Determinant: 0.000234548&#xA;Determinant: -0.0238522&#xA;Determinant: -0.0849523&#xA;Determinant: 0.0204877&#xA;Determinant: -0.0715147&#xA;Determinant: 0.0703858&#xA;Determinant: -0.0142186&#xA;Determinant: -0.101503&#xA;Determinant: 0.03966&#xA;Determinant: 4.69111e-05&#xA;Determinant: 0.0394428&#xA;Determinant: 0.0409131&#xA;Determinant: 8.90995e-05&#xA;Determinant: -0.00841189&#xA;Determinant: -0.0671323&#xA;Determinant: 0.00805167&#xA;Determinant: -0.00292435&#xA;Determinant: 0.0507716&#xA;Determinant: 0.0493995&#xA;Determinant: 0.00629414&#xA;Determinant: -0.0428982&#xA;Determinant: -0.0446924&#xA;Determinant: 0.0776236&#xA;Determinant: 0.00440478&#xA;Determinant: -0.0463321&#xA;Determinant: -0.00247224&#xA;Determinant: -0.0199861&#xA;Determinant: 0.0267022&#xA;Determinant: 0.0184179&#xA;Determinant: 0.0104588&#xA;Determinant: 0.116535&#xA;Determinant: -0.0857382&#xA;Determinant: -0.0477216&#xA;Determinant: 0.0286968&#xA;Determinant: 0.0387932&#xA;Determinant: 0.042856&#xA;Determinant: -0.0964&#xA;Determinant: 0.0320456&#xA;Determinant: -0.0676327&#xA;Determinant: 0.0156632&#xA;Determinant: 0.0548582&#xA;Determinant: 0.0394791&#xA;Determinant: 0.0863353&#xA;Determinant: -0.0568753&#xA;Determinant: -0.00953039&#xA;Determinant: -0.0534666&#xA;Determinant: 0.0506779&#xA;Determinant: 0.00521034&#xA;Determinant: 0.0353338&#xA;Determinant: 0.0845463&#xA;Determinant: -0.00847695&#xA;Determinant: 0.015726&#xA;Determinant: -0.0648035&#xA;Determinant: 0.0170917&#xA;Determinant: 0.0045193&#xA;Determinant: -0.0195397&#xA;Determinant: 0.00630076&#xA;Determinant: -0.0137401&#xA;Determinant: 0.0209229&#xA;Determinant: 0.00382077&#xA;Determinant: -0.0588661&#xA;Determinant: -0.0923883&#xA;Determinant: -0.00726003&#xA;Determinant: -0.0411533&#xA;Determinant: 0.00544489&#xA;Determinant: 0.0101791&#xA;Determinant: 0.0903306&#xA;Determinant: -0.0590416&#xA;Determinant: -0.0377112&#xA;Determinant: -0.0150455&#xA;Determinant: 0.0793066&#xA;Determinant: 0.0425759&#xA;Determinant: -0.040728&#xA;Determinant: -0.0376792&#xA;Determinant: -0.0387703&#xA;Determinant: -0.0232208&#xA;Determinant: 0.0506747&#xA;Determinant: -0.0284409&#xA;Determinant: 0.000536999&#xA;Determinant: -0.0289103&#xA;Determinant: -0.00586449&#xA;Determinant: -0.0805586&#xA;Determinant: 0.0133906&#xA;Determinant: -0.00311773&#xA;Determinant: 0.0184798&#xA;Determinant: -0.00981978&#xA;Determinant: -0.0491601&#xA;Determinant: 0.0452526&#xA;Determinant: 0.00411708&#xA;Determinant: -0.0515142&#xA;Determinant: 0.0121114&#xA;Determinant: 0.00636972&#xA;Determinant: -0.0126048&#xA;Determinant: -0.0412662&#xA;Determinant: 0.00195264&#xA;Determinant: -0.0726478&#xA;Determinant: 0.0692254&#xA;Determinant: -0.0256477&#xA;Determinant: 0.0702529&#xA;Determinant: -0.0052493&#xA;Determinant: 0.0625172&#xA;Determinant: 0.00282606&#xA;Determinant: 0.0229033&#xA;Determinant: 0.0558893&#xA;Determinant: 0.0766217&#xA;Determinant: -0.00388679&#xA;Determinant: -0.0193821&#xA;Determinant: -0.00718189&#xA;Determinant: -0.0864566&#xA;Determinant: 0.0809026&#xA;Determinant: -0.0398232&#xA;Determinant: -0.00224801&#xA;Determinant: 0.0333072&#xA;Determinant: -0.0212002&#xA;Determinant: 0.00371396&#xA;Determinant: 0.0162035&#xA;Determinant: -0.0811845&#xA;Determinant: 0.0148128&#xA;Determinant: 0.0372953&#xA;Determinant: 0.00351286&#xA;Determinant: -0.00103575&#xA;Determinant: 0.0384813&#xA;Determinant: 0.00752738&#xA;Determinant: -0.0248252&#xA;Determinant: -0.106768&#xA;Determinant: -0.0192333&#xA;Determinant: -0.026543&#xA;Determinant: -0.0222608&#xA;Determinant: -0.0487862&#xA;Determinant: 0.00376402&#xA;Determinant: -0.0329469&#xA;Determinant: 0.00266775&#xA;Determinant: 0.0762491&#xA;Determinant: 0.0159609&#xA;Determinant: -0.0190175&#xA;Determinant: -0.0338969&#xA;Determinant: -0.0631867&#xA;Determinant: -0.0238901&#xA;Determinant: 0.107709&#xA;Determinant: -7.74935e-05&#xA;Determinant: -0.0468996&#xA;Determinant: 0.0462787&#xA;Determinant: 0.0387825&#xA;Determinant: 0.0753388&#xA;Determinant: -0.000279933&#xA;Determinant: 0.00638663&#xA;Determinant: -0.00458034&#xA;Determinant: 0.0185849&#xA;Determinant: -0.00543503&#xA;Determinant: -0.0520309&#xA;Determinant: -0.0234638&#xA;Determinant: 0.0593986&#xA;Determinant: -0.00036774&#xA;Determinant: 0.00960819&#xA;Determinant: -0.00685314&#xA;Determinant: -0.000176925&#xA;Determinant: 0.0207583&#xA;Determinant: -0.0337003&#xA;Determinant: -0.0534818&#xA;Determinant: 0.0142158&#xA;Determinant: -0.0728077&#xA;Determinant: 0.0246877&#xA;Determinant: -0.0660952&#xA;Determinant: -0.0466&#xA;Determinant: 0.0915457&#xA;Determinant: -0.00340539&#xA;Determinant: 0.00815076&#xA;Determinant: -0.0751806&#xA;Determinant: -0.00617677&#xA;Determinant: 0.0019761&#xA;Determinant: -0.0016673&#xA;Determinant: 0.0310364&#xA;Determinant: 0.0483121&#xA;Determinant: -0.00664964&#xA;Determinant: 0.0659273&#xA;Determinant: -0.019015&#xA;Determinant: 0.0087627&#xA;Determinant: 0.0267279&#xA;Determinant: 0.0253497&#xA;Determinant: 0.00246292&#xA;Determinant: -0.0684746&#xA;Determinant: -0.0234524&#xA;Determinant: -0.0197933&#xA;Determinant: 0.0120796&#xA;Determinant: -0.0192703&#xA;Determinant: 0.0853956&#xA;Determinant: 0.0388196&#xA;Determinant: -0.0599305&#xA;Determinant: -0.0626148&#xA;Determinant: 0.0258541&#xA;Determinant: -0.0341273&#xA;Determinant: 0.0972889&#xA;Determinant: -0.0306585&#xA;Determinant: 0.0188553&#xA;Determinant: 0.00247702&#xA;Determinant: -0.00368989&#xA;Determinant: -0.0951982&#xA;Determinant: 0.0113578&#xA;Determinant: 0.000762509&#xA;Determinant: -0.0225219&#xA;Determinant: 0.0414059&#xA;Determinant: -0.0244409&#xA;Determinant: -0.0425728&#xA;Determinant: 0.04275&#xA;Determinant: -0.0413427&#xA;Determinant: -0.00556264&#xA;Determinant: -0.0894398&#xA;Determinant: -0.0193197&#xA;Determinant: -0.00788038&#xA;Determinant: -0.00455421&#xA;Determinant: -0.0788177&#xA;Determinant: 0.0415381&#xA;Determinant: -0.0346766&#xA;Determinant: -0.0748027&#xA;Determinant: 0.0087688&#xA;Determinant: -0.0968796&#xA;Determinant: 0.0683526&#xA;Determinant: -0.00996678&#xA;Determinant: 0.00955922&#xA;Determinant: -0.0914706&#xA;Determinant: 0.0728304&#xA;Determinant: 0.0541784&#xA;Determinant: 0.0457072&#xA;Determinant: -0.0299529&#xA;Determinant: -0.0096473&#xA;Determinant: -0.0142643&#xA;Determinant: -0.0684794&#xA;Determinant: 0.00281004&#xA;Determinant: -0.03252&#xA;Determinant: -0.0144637&#xA;Determinant: 0.0294154&#xA;Determinant: 0.00574353&#xA;Determinant: -0.019569&#xA;Determinant: 0.00492446&#xA;Determinant: -0.0526394&#xA;Determinant: -0.000870143&#xA;Determinant: -0.0180984&#xA;Determinant: -0.0144104&#xA;Determinant: 0.0456077&#xA;Determinant: -0.0113433&#xA;Determinant: 0.00377549&#xA;Determinant: -0.0775854&#xA;Determinant: -0.0336789&#xA;Determinant: -0.0744995&#xA;Determinant: -0.0427397&#xA;Determinant: 0.0300061&#xA;Determinant: -0.0326518&#xA;Determinant: -0.0333735&#xA;Determinant: -0.0284057&#xA;Determinant: -0.00999835&#xA;Determinant: -0.0380404&#xA;Determinant: 0.00648521&#xA;Determinant: 0.0449298&#xA;Determinant: 0.0120318&#xA;Determinant: -0.0230653&#xA;Determinant: -0.00934067&#xA;Determinant: -0.0175326&#xA;Determinant: -0.0799447&#xA;Determinant: 0.0679027&#xA;Determinant: -0.00670324&#xA;Determinant: -0.0841748&#xA;Determinant: 0.0236213&#xA;Determinant: 0.0386624&#xA;Determinant: -0.0239495&#xA;Determinant: 0.076976&#xA;Determinant: -0.00997484&#xA;Determinant: 0.025157&#xA;Determinant: -0.0654046&#xA;Determinant: 0.0090564&#xA;Determinant: 0.00129045&#xA;Determinant: -0.105119&#xA;Determinant: 0.0976925&#xA;Determinant: -0.105149&#xA;Determinant: -0.0465851&#xA;Determinant: 0.00237453&#xA;Determinant: -0.0456927&#xA;Determinant: 0.0328236&#xA;Determinant: -0.0914691&#xA;Determinant: -0.0157904&#xA;Determinant: -0.00170804&#xA;Determinant: -0.014797&#xA;Determinant: 0.00464912&#xA;Determinant: -0.035118&#xA;Determinant: -0.0242306&#xA;Determinant: 0.0081405&#xA;Determinant: 0.0733502&#xA;Determinant: -0.0860252&#xA;Determinant: -0.0511219&#xA;Determinant: -0.0925647&#xA;Determinant: 0.0495087&#xA;Determinant: -0.0515914&#xA;Determinant: -0.044318&#xA;Determinant: 0.000900043&#xA;Determinant: 0.0632521&#xA;Determinant: 0.00957955&#xA;Determinant: 0.00598059&#xA;Determinant: 0.0179513&#xA;Determinant: 0.0952263&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;dx,dy,dz&lt;/code&gt; is a is the distance between tcp and an object i want to keep in sight. The sphere is like a safety zone, but is mainly used to compute the orientation of the tool. &lt;/p&gt;&#xA;" OwnerUserId="13439" LastEditorUserId="13439" LastEditDate="2016-05-02T19:20:49.283" LastActivityDate="2016-05-02T19:20:49.283" Title="Implementation of inverse kinematics solution in c++" Tags="&lt;inverse-kinematics&gt;&lt;c++&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="9701" PostTypeId="1" CreationDate="2016-04-25T07:53:21.780" Score="0" ViewCount="843" Body="&lt;p&gt;I am working on a high speed autonomous robot (about 6-7 m/s), which does obstacle detection as well as senses traffic lights (I have used Raspberry Pi 3 and Arduino Uno).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the steering mechanism, I wanted to implement an Ackerman's steering. I've read about the principle and have understood its basics. Now to actually make the design, I am currently using switchboards, sold here in India, they are surprisingly strong, lightweight, waterproof(they are switchboards) and cheap. Now I got 1 big axle and the small axle cut out already, along with the two L-shaped pieces that join the 2 axles together... I'm just now confused as to how to connect the wheels to the axle and how to make them rotate along side it. The site won't let me upload any pics right now, I'll try again ASAP.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have the switchboard, an electric drill and will to do anything to make this happen ( ;P ). I don't have access to a 3D Printer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help would be greatly appreciated...  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S- And if you have any suggestions of your own, which might be better for my robot, feel free to share them, I'm just looking for a good steering method for my robot.&lt;/p&gt;&#xA;" OwnerUserId="13533" LastEditorUserId="13533" LastEditDate="2016-05-02T16:11:26.900" LastActivityDate="2016-05-02T16:11:26.900" Title="Designing Ackerman's Steering Principle for an autonomous robot" Tags="&lt;arduino&gt;&lt;raspberry-pi&gt;&lt;navigation&gt;&lt;steering&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2016-05-02T15:04:55.663" ContentLicense="CC BY-SA 3.0" />
  <row Id="9702" PostTypeId="1" CreationDate="2016-04-25T08:02:56.763" Score="5" ViewCount="6381" Body="&lt;p&gt;I'm using Stereolabs ZED camera for my computer vision project. I did a small research about several sensors on the market and ultimately we decided to go with the ZED Camera. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However I'm finding that the precision of the camera isn't that great. And the Point Cloud takes too much storage space. Anyone found the same problems? And if so, how did you managed them?&lt;/p&gt;&#xA;" OwnerUserId="13534" LastEditorUserId="37" LastEditDate="2018-08-12T09:18:39.157" LastActivityDate="2018-08-12T09:18:39.157" Title="How can I improve ZED Camera precision?" Tags="&lt;computer-vision&gt;&lt;stereo-vision&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="4" ClosedDate="2018-08-12T09:25:48.047" ContentLicense="CC BY-SA 4.0" />
  <row Id="9703" PostTypeId="2" ParentId="9680" CreationDate="2016-04-25T11:30:33.727" Score="3" Body="&lt;p&gt;It's hard to tell what's going wrong from just from you describing the error (might be better to paste the message directly..Sounds like a problem with your ROS_PACKAGE_PATH environment variable. I'm assuming you're following &lt;a href=&quot;http://wiki.ros.org/ROS/Tutorials/WritingPublisherSubscriber%28python%29&quot; rel=&quot;nofollow noreferrer&quot;&gt;this tutorial&lt;/a&gt;)? I remember having had this problem before, so some possible things to try:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;You may need to just type in &lt;code&gt;source devel/setup.bash&lt;/code&gt; into your terminal.&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Make sure your bash.rc file is properly set. Refer to &lt;a href=&quot;https://stackoverflow.com/questions/27053334/ros-package-not-found-after-catkin-make&quot;&gt;this question.&lt;/a&gt; (If I remember correctly, if you don't want to type in &lt;code&gt;source devel/setup.bash&lt;/code&gt; every time you open up a new terminal you can edit the bash.rc file.)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Check that your CMAKE_PREFIX_PATH is right.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Also, try entering &lt;code&gt;rospack find [package_name]&lt;/code&gt; into the terminal to find the path to the package.&lt;/p&gt;&#xA;" OwnerUserId="13535" LastEditorUserId="-1" LastEditDate="2017-05-23T12:37:11.430" LastActivityDate="2016-04-25T11:30:33.727" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9704" PostTypeId="1" CreationDate="2016-04-25T11:58:09.083" Score="0" ViewCount="106" Body="&lt;p&gt;In modeling dynamics of a robot ,in which servo motor is adjusted inside the link, there is a need to find inertia tensor of the motor itself,Right?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/qaVmL.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qaVmL.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if it is needed how can i get the inertia tensor of motor since i couldn't find its solid works model having internal components,i mean gears and other stuff(with related specified materials)?&lt;/p&gt;&#xA;" OwnerUserId="10851" LastActivityDate="2016-04-29T18:39:12.827" Title="motor inertia tensor?" Tags="&lt;servomotor&gt;&lt;dynamics&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9706" PostTypeId="2" ParentId="9662" CreationDate="2016-04-25T12:35:55.377" Score="3" Body="&lt;p&gt;Given a desired pose:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$T^{desired} = \begin{bmatrix}&#xA;             s_x&amp;amp;n_x&amp;amp;a_x&amp;amp;P_x\\&#xA;             s_y&amp;amp;n_y&amp;amp;a_y&amp;amp;P_y\\&#xA;             s_z&amp;amp;n_z&amp;amp;a_z&amp;amp;P_z\\&#xA;               0&amp;amp;  0&amp;amp;  0&amp;amp;  1&#xA;            \end{bmatrix}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;we know that this is given as follows:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$T^{desired} = {}^{0}T_{1}{}^{1}T_{2}{}^{2}T_{3}{}^{3}T_{4}{}^{4}T_{5}{}^{5}T_{6}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where each ${}^{j-1}T_{j}$ is the transformation between frame attached to joint j with respect to joint j-1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now the idea is to start pre-multiplying the equation with the inverse transformation and try to deduce the joint angles as we go along, as an example let's start by the first joint (i.e. $q_1$):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$${}^{1}T_{0}T^{desired} = {}^{1}T_{2}{}^{2}T_{3}{}^{3}T_{4}{}^{4}T_{5}{}^{5}T_{6}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you do this you find the following:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$-\cos(q_5) = -a_x \sin(q_1) + a_y \cos(q_1)$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$-d_4 - d_6\cos(q_5) = -p_x\sin(q_1)+p_y\cos(q1)$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;so by manipulating those two equations you end up with a quadratic equation in $\sin(q_1)$ or $\cos(q_5)$ which gives two solutions, only one  of them satisfy the second equation above which gives the other parameter (i.e. the $\sin(q_1) or \cos(q_1)$) then you get $q_1$ as&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$q_1 = atan2(\sin(q_1),\cos(q_1))$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;then you can get $q_5$ and then proceed in the same manner to get the rest.&#xA;If you want I can share with you some document that explain the procedure in more details, and also some matlab m files that help you to symbolically advance through the procedure. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Small remark: I am not using exactly the  Denavit-Hartenberg parameters but a slightly different ones (i.e. Khalil-Kleinfinger) which is also explained in the document.&lt;/p&gt;&#xA;" OwnerUserId="13494" LastEditorUserId="37" LastEditDate="2016-04-25T13:37:56.013" LastActivityDate="2016-04-25T13:37:56.013" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="9708" PostTypeId="2" ParentId="9702" CreationDate="2016-04-25T14:18:17.173" Score="2" Body="&lt;p&gt;For improved precision try calibrating the camera with the &lt;a href=&quot;http://www.mathworks.com/help/vision/ug/stereo-camera-calibrator-app.html&quot; rel=&quot;nofollow&quot;&gt;Stereo Camera Calibrator app&lt;/a&gt; in MATLAB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as the memory taken up by the point cloud, that really depends on how many points you have. You can always try reducing the resolution of the cameras, downsampling the point cloud itself, and/or using a lower precision data type to store the coordinates.&lt;/p&gt;&#xA;" OwnerUserId="1115" LastActivityDate="2016-04-25T14:18:17.173" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9709" PostTypeId="1" CreationDate="2016-04-25T15:00:18.883" Score="0" ViewCount="233" Body="&lt;p&gt;I got a new servo a few days back (RC Servo, Futaba FP-S148). I first tested it out with the Sweep sketch on Arduino, powering it with the Arduino 5v and GND pins only. It was working, just fine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Today I was trying to use it in my robot and I tried powering it with 2 LiPo batteries (Samsung ICR16850 2200mAh, from an old laptop battery) connected in series, giving 8.32v. As soon as I connected my servo, it started rotating randomly, I had not connected it to my Arduino yet. I quickly took it out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next, I used a L7805 to get 5.13v regulated supply out of my batteries that I used earlier. When I connected my batteries to the servo, and the servo to the Arduino, uploaded the sketch, the servo started behaving rather strangely, it first did a complete turn and then stopped. Only a humming sound came from the servo. Strange thing is, whenever I connect one of my Multimeter leads to the power cables, the servo immediately turned in the opposite direction &lt;strong&gt;only as long as only lead was in contact with either the positive or negative wire&lt;/strong&gt;.&lt;br&gt;&#xA;Otherwise, the servo just gives a humming sound.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Have I fried my servo? Or is it some other issue?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE 1&lt;/strong&gt;&lt;br&gt;&#xA;I stripped down the servo and checked the motor. It is working fine, seems like this is a gear problem.&lt;/p&gt;&#xA;" OwnerUserId="13533" LastEditorUserId="13533" LastEditDate="2016-04-25T15:20:43.763" LastActivityDate="2016-04-26T06:13:20.070" Title="Is my servo fried?" Tags="&lt;arduino&gt;&lt;battery&gt;&lt;rcservo&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="9711" PostTypeId="1" AcceptedAnswerId="9722" CreationDate="2016-04-26T05:54:46.687" Score="1" ViewCount="49" Body="&lt;p&gt;I'm looking for a testbed (simulator or web-based interface that lets me to have control on a robot) for testing different routing and navigation algorithms. Is there such a system on the web?&lt;/p&gt;&#xA;" OwnerUserId="13540" LastEditorUserId="13540" LastEditDate="2016-04-26T06:07:04.150" LastActivityDate="2016-04-27T07:46:47.380" Title="Testbed for testing navigation algorithms" Tags="&lt;navigation&gt;&lt;routing&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9712" PostTypeId="2" ParentId="9709" CreationDate="2016-04-26T06:13:20.070" Score="1" Body="&lt;p&gt;Yes it's absolutely fried. Check the tech specs of your servo next time.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Power requirement: 4.8V or 6V (from receiver)&#xA;  Power consumption: 6V 8mA (at idle)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="13541" LastActivityDate="2016-04-26T06:13:20.070" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9713" PostTypeId="2" ParentId="9395" CreationDate="2016-04-26T06:48:13.833" Score="2" Body="&lt;p&gt;If you are working with windows then for KUKA programs you can use the (OrangeEdit), check it in this website, &lt;a href=&quot;http://www.orangeapps.de/?lng=en&amp;amp;page=apps/orangeedit&quot; rel=&quot;nofollow&quot;&gt;OrangeEdit Beta&lt;/a&gt;. It is free and it enables you to view and edit all the &lt;code&gt;.src&lt;/code&gt; and &lt;code&gt;.dat&lt;/code&gt; files and more. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for the robot program itself, usually you can save it in a USB key, to do so you just log into the KCP of the robot as administrator (default password is &quot;kuka&quot;) then plug your key in the robot CPU, then in the KCP, in the menu bar, choose &lt;strong&gt;File-&gt;Save As-&gt;USB&lt;/strong&gt; and wait for the saving to finish. You end up with a zip file that you can extract and then access via the OrangeEdit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Normally there are three main folders, the one you will be interested in is (KRC) inside you will have a file called (&lt;code&gt;$config.dat&lt;/code&gt;) where normally all the base frames are defined. Actually people, usually, use these base frames to define zones or areas of work, then in each zone another specific program defines the relative displacement. So, for example, in you application you might find a program called &lt;code&gt;pick_cartoon()&lt;/code&gt; where the relative displacement, according to the cartoon dimensions, will be saved in the associated &lt;code&gt;.dat&lt;/code&gt; file. So if that is the case then what you can do is to add offset to the part in &lt;code&gt;.src&lt;/code&gt; file that does the displacement of frame of work, the offset of course express the difference between the two types of cartoons you have. To do so you need to follow the following steps:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;First defines your offsets parameters in the &lt;code&gt;$config.dat&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Then program them in a convenient way in your &lt;code&gt;.src&lt;/code&gt; file, you can use a counter or presence sensors to differentiate between the two types of cartoon, in this case you need to use some I/O of the robot and those also you can define in the &lt;code&gt;$config.dat&lt;/code&gt; file.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;Then you make these parameters accessible by the operators by defining them in the &lt;code&gt;ConfigMon&lt;/code&gt; file which you can find under the (&lt;code&gt;\C\&lt;/code&gt;) folder in the robot program.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;BTW, if you are under Linux you can actually access all the files and open them with any text editor, but it is not as nicer as with OrangeEdit, because that software was created specially for KUKA programs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let me know if this helps you, or if you have any further questions.&lt;/p&gt;&#xA;" OwnerUserId="13494" LastEditorUserId="9176" LastEditDate="2016-04-26T08:47:29.540" LastActivityDate="2016-04-26T08:47:29.540" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="9714" PostTypeId="2" ParentId="9702" CreationDate="2016-04-26T09:05:49.077" Score="6" Body="&lt;p&gt;I don't know what you mean by &quot;precision&quot; and how do you measure it. The sensing &#xA;accuracy will probably go back to the camera calibration precision and the stereo matching algorithm used. If they ship the device &quot;calibrated&quot; then no one knows what happened after the camera was calibrated in factory and before you got it (mechanical shock, temperature swings) - so you better re-calibrate it yourself (with OpenCV, Matlab etc.).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are interested in the depth accuracy from stereo vision itself then see the following equation:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;dz = (z^2 * de) / (f * b)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where dz is the depth error in meters, z is the depth in meters, de is the disparity error in pixels, f is the focal length of the camera in pixels and b is the camera baseline in meters. The main message of the equation above is that the depth error grows with the square of depth (distance from camera) itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You get better depth accuracy the bigger f and b are. Given the ZED camera has both of these relatively small - baseline is &quot;just&quot; 120mm and f will be pretty small given the quite large FOV of 110 degrees in diagonal (f is &quot;FOV inverted&quot;, so wider FOV gives smaller f). What is good for you is the high resolution which should mean smaller disparity error which could compensate for the bad f and b values.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding point cloud size - this goes back to the rather high sensor resolution of the ZED camera. High resolution may not really be needed for stereo because 1) the stereo matching takes long time 2) the point cloud is huge 3) the depth accuracy may not be much better since the disparity is usually determined with sub-pixel precision anyways. So see what angular resolution you need for your project - you can calculate how many pixels per angle (horizontal, vertical) your camera (=sensor+lens) has. If that is too much, you can lower the angular resolution (=lower sensor resolution) without harming your computer vision results.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this helps!&lt;/p&gt;&#xA;" OwnerUserId="1021" LastEditorUserId="1021" LastEditDate="2016-04-27T08:57:40.130" LastActivityDate="2016-04-27T08:57:40.130" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9715" PostTypeId="2" ParentId="9701" CreationDate="2016-04-26T11:12:28.333" Score="1" Body="&lt;p&gt;The key device for Ackermann steering is the &lt;a href=&quot;https://en.wikipedia.org/wiki/Steering_knuckle&quot; rel=&quot;nofollow&quot;&gt;steering knuckle&lt;/a&gt;. It has two vertical mount and an arm with a third mount. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The upper and lower control arms attach the vertical mounts to the frame of the vehicle - this lets the wheel move up and down. This may or may not be more complicated than you need, as the control arms are what enable suspension. The strut generally attaches to or replaces the upper control arm. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The arm on the steering knuckle allows a tie rod to be attached. The arm is at an angle to the face of the steering knuckle, and that angle is determined by the wheel base and width of the car. From the &lt;a href=&quot;https://en.wikipedia.org/wiki/Ackermann_steering_geometry&quot; rel=&quot;nofollow&quot;&gt;Wikipedia page on Ackermann steering&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;[Ackermann steering] was achieved by making the linkage not a simple parallelogram, but by making the length of the track rod (the moving link between the hubs) shorter than that of the axle, so that the steering arms of the hubs appeared to &quot;toe out&quot;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If you actually had one solid rod between the two tires, it would bend the first time the suspension moved. Instead, the steering gear box is bolted to the frame, and then tie rods attach the steering knuckle to the gear box. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;At each end of the tie rod is a &quot;tie rod end&quot; or &lt;a href=&quot;http://img.directindustry.com/images_di/photo-g/13702-2289081.jpg&quot; rel=&quot;nofollow&quot;&gt;rod end&lt;/a&gt;, which has a spherical bearing and allows the tie rod to move with suspension travel. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, tl;dr - Ackermann steering is actually a relatively involved setup, especially if you can't source properly sized components. This is why a lot of small and medium sized robots use differential steering and caster wheels. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-04-26T11:12:28.333" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9716" PostTypeId="1" CreationDate="2016-04-26T17:48:54.747" Score="1" ViewCount="28" Body="&lt;p&gt;How to develop a robot based system to continuously monitor and check products for defeat which are moving on a conveyer belt using sensors and kick out the defect product from the queue?&lt;/p&gt;&#xA;" OwnerUserId="13547" LastActivityDate="2016-04-26T17:48:54.747" Title="Quality check robot" Tags="&lt;microcontroller&gt;" AnswerCount="0" CommentCount="2" ClosedDate="2016-04-27T09:32:54.840" ContentLicense="CC BY-SA 3.0" />
  <row Id="9717" PostTypeId="2" ParentId="9700" CreationDate="2016-04-26T18:13:26.007" Score="3" Body="&lt;p&gt;It is a bit hard to know the exact cause of the error without having the (RobWork), I tried to install it following the link your provided, but I ran into some problems and I don't have the time to fix them at the moment. But I can point you to some issues that might be the source of your problem:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The &lt;code&gt;transform&lt;/code&gt; method you are given in this code doesn't have a return statement, though you have declared it to return a &lt;code&gt;rw::math::Transform3D&amp;lt;&amp;gt;&lt;/code&gt;. &lt;/li&gt;&#xA;&lt;li&gt;If you are near a singularity the inverse kinematics will normally return high values. The singularities depend on the robot structure you are using. You can detect this by seeing the determinant of your jacobian matrix, the closer it is to zero the closer you are to a singularity.&lt;/li&gt;&#xA;&lt;li&gt;Also I don't understand why you use the line &lt;code&gt;rw::math::Q dq(q)&lt;/code&gt;, because normally the inverse kinematic should return &lt;code&gt;dq&lt;/code&gt; if your desired displacement is small enough (i.e. &lt;code&gt;du&lt;/code&gt;) so normally you should be able to add it directly to add &lt;code&gt;q&lt;/code&gt; directly to the &lt;code&gt;q_current&lt;/code&gt;, so may be it could be of interest to check the raw values for these variables.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Also may be it could be more accurate to use a polynomial interpolater to produce the &lt;code&gt;du&lt;/code&gt; and then run the whole inverse kinematic in a while loop with a &lt;code&gt;boos::timer&lt;/code&gt; for instance. I have actually developed and inverse kinematic for Crustcrawler arm that does that, but I use joint velocity control directly since the output of the inverse kinematic is actually joints velocity, also I am not binding myself to move in sphere I just give a goal position and duration and the model drive the end effecter nicely to it via joints velocities.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have more details please share them, it could help in identifying the issue more effectively. Like how &lt;code&gt;invKin&lt;/code&gt; is called? and what exactly are those parameters passed to it (i.e. &lt;code&gt;x, y, z&lt;/code&gt;)? &lt;/p&gt;&#xA;" OwnerUserId="13494" LastEditorUserId="13494" LastEditDate="2016-04-27T06:18:13.170" LastActivityDate="2016-04-27T06:18:13.170" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="9721" PostTypeId="2" ParentId="9704" CreationDate="2016-04-27T03:46:43.193" Score="1" Body="&lt;p&gt;It is a little difficult to understand exactly what you are needing.   The motor specs should have a value for rotor inertia.   The gears would depend a lot on their design, but I have always been able to ignore their rotary inertias and just use the gear ratio in the overall drive train inertia calculations.   Those would be for the inertias distal to the motor.   For the inertias seen by the proximal motors, it is usually sufficient to model it as a point mass located at its cg. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or, are you trying to inderstand &lt;em&gt;how&lt;/em&gt; to create the inertia and mass matrices?&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2016-04-27T03:46:43.193" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9722" PostTypeId="2" ParentId="9711" CreationDate="2016-04-27T07:46:47.380" Score="3" Body="&lt;p&gt;You could use player/stage or gazebo&lt;/p&gt;&#xA;" OwnerUserId="23196" LastActivityDate="2016-04-27T07:46:47.380" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9724" PostTypeId="1" AcceptedAnswerId="9812" CreationDate="2016-04-28T04:58:47.817" Score="1" ViewCount="695" Body="&lt;p&gt;I working on dynamic modeling and simulation of a mechanical system (overhead crane), after I obtained the equation of motion, in the form: $$ M(q)\ddot{q}+C(q,\dot{q})\dot{q}+G(q)=Q $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All the matrices are know inertia, $ M(q)$, Coriolis-Centrifugal matrix $ C(q,\dot{q})$, and gravity $ G(q)$ as functions of the generalized coordinates $q$, and their derivatives $\dot{q}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to solve for $q$, using Matlab &lt;em&gt;ODE&lt;/em&gt; (in m-file), I got the response for some initial conditions and zero input, but, I want to find the response, for the aforementioned control signal (&lt;strong&gt;A bang-bang signal of amplitude 1 N and 1 s width&lt;/strong&gt;), I'm trying to regenerate some results from the literature, and what the authors of that work said, regrading the input signal is the following: &quot;A bang-bang signal of amplitude 1 N and 1 s width is used as an input force, applied at the cart of the gantry crane. A bang-bang force has a positive (acceleration) and negative (deceleration) period allowing the cart to, initially, accelerate and then decelerate and eventually stop at a target location.&quot; I didn't grasp what do they mean by bang-bang signal, I know in Matlab we could have step input, impulse, ...etc. But bang-bang signal, I'm not familiar with. According to &lt;a href=&quot;https://en.wikipedia.org/wiki/Bang%E2%80%93bang_control&quot; rel=&quot;nofollow noreferrer&quot;&gt;this site&lt;/a&gt; and &lt;a href=&quot;http://www.brown.edu/Departments/Engineering/Courses/En123/Lectures/FdbkBasic.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; bang bang is a controller rather.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could anyone suggest to me how to figure out this issue and implement this input signal? preferably in m-file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The code I'm using is given bellows, two parts:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;function xdot = AlFagera(t,x,spec)&#xA;% xdot = zeros(8,1);&#xA;xdot = zeros(12,1); % to include the input torque&#xA;&#xA;% % Crane Specifications&#xA;mp = spec(1);&#xA;mc = spec(2);&#xA;mr = spec(3);&#xA;L = spec(4);&#xA;J = spec(5);&#xA;&#xA;g = 9.80;               % accelatrion of gravity (m/s^)&#xA;&#xA;% % matix equations &#xA;M11 = mr+mc+mp; M12 = 0; M13 = mp*L*cos(x(3))*sin(x(4)); M14 = mp*L*sin(x(3))*cos(x(4));&#xA;M21 = 0; M22 = mp+mc; M23 = mp*L*cos(x(3))*cos(x(4)); M24 = -mp*L*sin(x(3))*sin(x(4));&#xA;M31  = M13; M32 = M23; M33 = mp*L^2+J; M34 = 0;&#xA;M41 = M14; M42 = M24; M43 = 0; M44 = mp*L^2*(sin(x(3)))^2+J;&#xA;M = [M11 M12 M13 M14; M21 M22 M23 M24; M31 M32 M33 M34; M41 M42 M43 M44];&#xA;&#xA;C11 = 0; C12 = 0; C13 = -mp*L*sin(x(3))*sin(x(4))*x(7)+mp*L*cos(x(3))*cos(x(4))*x(8);&#xA;C14 = mp*L*cos(x(3))*cos(x(4))*x(7)-mp*L*sin(x(3))*sin(x(4))*x(8);&#xA;C21 = 0; C22 = 0; C23 = -mp*L*sin(x(3))*cos(x(4))*x(7)-mp*L*cos(x(3))*sin(x(4))*x(8);&#xA;C24 = -mp*L*cos(x(3))*sin(x(4))*x(7)-mp*L*sin(x(3))*cos(x(4))*x(8); &#xA;C31 = 0; C32 = 0; C33 = 0; C34 = -mp*L^2*sin(x(3))*cos(x(3))*x(8);&#xA;C41 = 0; C42 = 0; C43 = -C34; C44 = mp*L^2*sin(x(3))*cos(x(4))*x(7);&#xA;&#xA;C = [C11 C12 C13 C14; C21 C22 C23 C24; C31 C32 C33 C34; C41 C42 C43 C44];&#xA;Cf = C*[x(5); x(6); x(7); x(8)];&#xA;&#xA;G = [0; 0; mp*g*L*sin(x(3)); 0];&#xA;&#xA;fx = 0; &#xA;&#xA;if t &amp;gt;=1 &amp;amp;&amp;amp; t&amp;lt;=2&#xA;fy = 1.*square(t*pi*2);&#xA;else fy = 0;&#xA;end&#xA;&#xA;F =[fx; fy; 0; 0];     % input torque vector, &#xA;&#xA;xdot(1:4,1)= x(5:8);&#xA;xdot(5:8,1)= M\(F-G-Cf);&#xA;xdot(9:12,1) = F;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;clear all; close all; clc;&#xA;&#xA;t0 = 0;tf = 20;&#xA;&#xA;x0 = [0.12 0.5 0 0, 0 0 0 0,0 0 0 0];  % initional conditions&#xA;&#xA;% % spectifications&#xA;Mp = [0.1 0.5 1];      % variable mass for the payload&#xA;figure&#xA;plotStyle = {'b-','k','r'};&#xA;for i = 1:3&#xA;mp = Mp(i);&#xA;mc = 1.06; mr = 6.4;           % each mass in kg&#xA;L = 0.7; J = 0.005;            % m, kg-m^2 respe.&#xA;spec = [mp mc mr L J];&#xA;% % Call the the function&#xA;[t,x] = ode45(@(t,x)AlFagera(t,x,spec),[t0 :0.001: tf],x0);&#xA;&#xA;legendInfo{i} = ['mp=',num2str(Mp(i)),'kg'];&#xA;&#xA;&#xA;fx = diff(x(:,9))./diff(t);&#xA;fy = diff(x(:,10))./diff(t);&#xA;tt=0:(t(end)/(length(fx)-1)):t(end); % this time vector&#xA;&#xA;% to plot the cart positions in x and y direcitons&#xA;subplot(1,2,1)&#xA;plot(t,x(:,1),plotStyle{i})&#xA;axis([0 20 0 0.18]);&#xA;grid&#xA;xlabel('time (s)');&#xA;ylabel('cart position in x direction (m)');&#xA;hold on&#xA;legend(legendInfo,'Location','northeast')&#xA;&#xA;subplot(1,2,2)&#xA;plot(t,x(:,2),plotStyle{i})&#xA;axis([0 20 0 1.1]);&#xA;grid&#xA;xlabel('time (s)');&#xA;ylabel('cart position in y direction (m)');&#xA;hold on&#xA;legend(legendInfo,'Location','northeast')&#xA;&#xA;end&#xA;&#xA;% to plot the input torque, (bagn-bang signal), just one sample&#xA;figure&#xA;plot(tt,fy)&#xA;grid&#xA;set(gca,'XTick',[0:20])&#xA;xlabel('time (s)');&#xA;ylabel('input signal, f_y (N)');&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Furthermore, the results I'm getting and what I supposed to get are shown:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/ha31n.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ha31n.jpg&quot; alt=&quot;This my output, for the give code&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/TTJH6.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/TTJH6.jpg&quot; alt=&quot;This what I supposed to get&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Major difficulties, initial conditions are not clearly stated in the paper, the input force direction, is only in y (which it should be), or it has different direction. I appreciate any help.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;the paper I'm trying to recreate is:&#xA;  R. M. T. Raja Ismail, M. A. Ahmad, M. S. Ramli, and F. R. M. Rashidi, “Nonlinear Dynamic Modelling and Analysis of a 3-D Overhead Gantry Crane System with System Parameters Variation.,” International Journal of Simulation–Systems, Science &amp;amp; Technology, vol. 11, no. 2, 2010.&#xA;  &lt;a href=&quot;http://ijssst.info/Vol-11/No-2/paper2.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://ijssst.info/Vol-11/No-2/paper2.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="9087" LastEditorUserId="9087" LastEditDate="2016-05-10T13:30:04.583" LastActivityDate="2018-11-11T14:06:43.580" Title="How to apply A bang-bang signal of amplitude 1 N and 1 s width as an input force to reproduce certain results in Matlab?" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;dynamics&gt;&lt;matlab&gt;&lt;input&gt;" AnswerCount="3" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9727" PostTypeId="1" CreationDate="2016-04-28T16:56:22.073" Score="4" ViewCount="736" Body="&lt;p&gt;Consider this map&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/VTUuP.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/VTUuP.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Contest arena shown in figure 1 consists of two sub arenas, both the sides are identical to each other and their scientists and safe zone locations are similar.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each sub arena has 3 different colored rooms and a fourth shared room. Each robot will be placed at identical start locations, respective to their arena. These locations will be random and anywhere on the map.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each room (other than the shared room) will have two entry and exit gates. Both of these gates will be open at all times. The robot can enter and exit from any gate it chooses.&lt;/p&gt;&#xA;" OwnerUserId="13566" LastEditorUserId="350" LastEditDate="2016-04-29T18:06:01.217" LastActivityDate="2016-04-29T18:29:49.280" Title="How can my robot find its position in any given map without GPS, including when the initial point is not given?" Tags="&lt;localization&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9728" PostTypeId="1" AcceptedAnswerId="9774" CreationDate="2016-04-28T17:23:55.337" Score="6" ViewCount="13970" Body="&lt;p&gt;I have the &lt;a href=&quot;http://www.makeblock.cc/mbot/&quot; rel=&quot;nofollow noreferrer&quot;&gt;mBot&lt;/a&gt; robot and I want to program it to follow the line. So far it can pass any kind of line that is &gt;90°.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want it to be able to pass 90°-ish angles as well. Like this one:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/FGkQm.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FGkQm.png&quot; alt=&quot;&amp;gt;90° angle&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is that my mBot robot has only 2 line following sensors (they are 5 mm apart and the line is 2 cm wide) so I can't use just the sensors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/qHQHt.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qHQHt.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most of the times it just goes to the line and when it's supposed to turn it just misses the line (goes on the white) and goes back to get back on track. Once it's back on the black line it once again tries to go forward but goes on the white instead of taking a turn. This happens endlessly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sometimes it passes the angle by going back and forth and accidentally turning, but that's not even a workaround, let alone a solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's a test course of the first round of the competition.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/pzf8y.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/pzf8y.png&quot; alt=&quot;course&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My robot can pass this without a problem, but it gets stuck on this (poorly edited, sorry) course:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/IevUP.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/IevUP.png&quot; alt=&quot;I don&amp;#39;t currently have Photoshop installed. Sorry &amp;#39;bout that.&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It can't pass the 20 block if the robot enters it from a 15 or 20 block (so basically it gets stuck if it's coming from an angle and hits a 90 degree turn).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The sensor value could be read as either 0, 1, 2 or 3 depending on what the robot currently sees:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/PNkB5.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/PNkB5.png&quot; alt=&quot;sensor with all possible outcomes&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;0 - on the line &lt;br&gt;&#xA;1 - on the right of the line &lt;br&gt;&#xA;2 - on the left of the line &lt;br&gt;&#xA;3 - not on the line &lt;br&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pseudo code of my current program:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;loop forever:&#xA;    if (on the right of the line):&#xA;        turn_left()&#xA;    if (on the left of the line):&#xA;        turn_right()&#xA;    if (on the line):&#xA;        go_forward()&#xA;    if (not on the line):&#xA;        go_backwards()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So how would I go about taking such sharp turns?&lt;/p&gt;&#xA;" OwnerUserId="13567" LastEditorUserId="13567" LastEditDate="2016-05-04T21:22:48.843" LastActivityDate="2020-02-01T02:54:41.550" Title="How to check for a sharp angle with a line follower?" Tags="&lt;arduino&gt;&lt;motor&gt;&lt;line-following&gt;" AnswerCount="6" CommentCount="6" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="9729" PostTypeId="1" AcceptedAnswerId="9730" CreationDate="2016-04-28T17:32:44.097" Score="1" ViewCount="3251" Body="&lt;p&gt;What is a difference between degrees of freedom (DOF) and degrees of motion (DOM)? I know that DOF is the number of independent movements a manipulation arm can make and robot system can have max 6 independent DOF and unlimited number of DOM but I do not distinguish them from each other.&lt;/p&gt;&#xA;" OwnerUserId="13188" LastEditorDisplayName="user9480" LastEditDate="2017-05-01T17:49:01.130" LastActivityDate="2017-05-03T13:30:48.563" Title="Difference between Degrees of Freedom (DOF) and Degrees of Motion (DOM)" Tags="&lt;manipulator&gt;&lt;theory&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9730" PostTypeId="2" ParentId="9729" CreationDate="2016-04-28T18:07:52.693" Score="3" Body="&lt;p&gt;The way you are describing it, DOM is the number of independent dimensions in $\vec q$.   DOF is the number of independent dimensions in $\vec x$.  In practice, a robotics engineer will use DOF to represent the number of independent actuators of the robot, which you are calling DOM.   Better notation would be to call DOM the &lt;em&gt;mobility&lt;/em&gt; of the system, as described in the &lt;a href=&quot;https://en.wikipedia.org/wiki/Degrees_of_freedom_(mechanics)&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;Mobility formula&lt;/em&gt; section here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using your notation:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Think of a telescoping pole made out of 5 sections that can collapse inside each other.   The degree of freedom is the length of the pole.  That value can be anything between its fully-collapsed length, up to its fully-extended length.  DOF = 1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If there is a sliding joint between each section of the pole, there will be four independent motions you can use to set the total length.  DOM = 4. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In kinematics, the length would typically be denoted by $x$, and the individual joint lengths would be assigned values of $q_1$ through $q_4$.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\vec x = f(\vec q)$&lt;/p&gt;&#xA;" OwnerUserId="11125" LastEditorDisplayName="user9480" LastEditDate="2017-05-01T10:25:52.633" LastActivityDate="2017-05-01T10:25:52.633" CommentCount="16" ContentLicense="CC BY-SA 3.0" />
  <row Id="9733" PostTypeId="2" ParentId="9727" CreationDate="2016-04-29T08:10:47.333" Score="0" Body="&lt;p&gt;I would say that you have 2 main possibilities: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;You base your computation on the IMU (Inertial Measurement Unit) of your robot. Usually from those you can basically have an acceleration, then you need to integrate it 2 times to get the position and therefore the displacement in meters.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You base your computation on simple encoders. Encoders are sensors which  convert the angular position or motion of a shaft to an analog or digital code. From this, if you know the radius of the wheel (which you should assume constant, if the wheel does not change over time) you will know the displacement in meters associated to the displacement read by the encoder.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I hope this helped you.&lt;/p&gt;&#xA;" OwnerUserId="10852" LastActivityDate="2016-04-29T08:10:47.333" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="9734" PostTypeId="2" ParentId="9728" CreationDate="2016-04-29T12:30:42.670" Score="1" Body="&lt;p&gt;Sorry I have no experience of line following robots, I use ultrasonic sensors, so this answer may be a bit naïve and there allsorts of reasons why you can't do this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your bot travels forwards and realises it has lost the line.  Assuming that the distance travelled is not &quot;very far&quot;, less than 1/2 the length of the bot, you should be able to do a complete 360 and find two lines.  One of those lines will be at about 180 degrees from where you started turning (this should be measurable by the number of turns of the motor, if its a stepper), this is not the line you are looking for, you need to follow the other one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does that help?&lt;/p&gt;&#xA;" OwnerUserId="10717" LastActivityDate="2016-04-29T12:30:42.670" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="9735" PostTypeId="2" ParentId="9728" CreationDate="2016-04-29T18:00:09.930" Score="0" Body="&lt;p&gt;The problem seems to be that your robot functions by moving its sensors perpendicular to the line; when the line becomes perpendicular to itself, the robot loses the assumption that lateral movement will bring the line back into the center of the sensors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only way to fix is this is to change the sensor configuration (adding more if necessary) to break this ambiguity.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2016-04-29T18:00:09.930" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9736" PostTypeId="2" ParentId="9727" CreationDate="2016-04-29T18:29:49.280" Score="5" Body="&lt;p&gt;Determining your location when you have a map but not your starting location is a job for a &lt;a href=&quot;http://www.cs.cmu.edu/~motionplanning/lecture/Chap9-Bayesian-Mapping_howie.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;particle filter&lt;/a&gt;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;(&lt;a href=&quot;https://en.wikipedia.org/wiki/Particle_filter&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia's entry on particle filters&lt;/a&gt; is not very helpful to beginners.)  See also, &lt;a href=&quot;https://robotics.stackexchange.com/a/480/350&quot;&gt;this question&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's an animation of a particle filter in use.  The black boxes are walls, the green turtle is the robot, the red marks are possible locations, and the grey circle is the center point of all the estimates.  As the robot moves, the possible locations become more tightly grouped until there is no more ambiguity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://robotics.stackexchange.com/a/480/350&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/YylQT.gif&quot; alt=&quot;Particle filter operation&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The idea is that by moving around the space and measuring the distance to walls around you (or by bumping into them), you can get a better sense of where you &quot;might be&quot;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example: in the map you showed, imagine that your robot moves forward by 4 spaces but does not hit a wall.  There are only a few spots on the map where this is possible, so now you know you must be in one of those places.  The actual movement doesn't matter, but as you build up your knowledge of where the walls are (and where you &lt;em&gt;don't&lt;/em&gt; find walls), some moves will be more useful in determining your location than others.  And eventually, you'll have roughly 100% confidence in your location.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2016-04-29T18:29:49.280" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9737" PostTypeId="2" ParentId="9704" CreationDate="2016-04-29T18:39:12.827" Score="0" Body="&lt;p&gt;Generally, you shouldn't worry about modeling the dynamics.  You only need to do this in the case where you've got everything set up, but things aren't working as accurately as you'd like them to.  And in that case, the inertia that caused the overshoot should be visible in your data -- you can use the direct measurement instead of the theoretical calculation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're asking about this because you're planning to push the servo to its physical limits, you should probably rethink your design.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2016-04-29T18:39:12.827" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9738" PostTypeId="1" CreationDate="2016-04-29T20:33:35.587" Score="0" ViewCount="2165" Body="&lt;p&gt;I need to get my drone flying still enough that I can rest a glass of water on it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've tried a few KK boards and APM 2.6 (3.1 software). I've balanced props, set PID settings, auto-trim / autotune and the drone still tends to inconsistently drift a little one way or another.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is a plausible way to completely isolate drift?&lt;/p&gt;&#xA;" OwnerUserId="9941" LastEditorUserId="13578" LastEditDate="2016-04-30T19:02:53.890" LastActivityDate="2016-05-01T20:29:22.357" Title="How can a quadcopter be made to hover perfectly still?" Tags="&lt;quadcopter&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9739" PostTypeId="1" CreationDate="2016-04-29T20:39:13.867" Score="0" ViewCount="826" Body="&lt;p&gt;I have succeeded in making my first quadcopter from scratch with a readymade frame. I designed the flight controller myself with help from YMFC-3D youtube series of videos. &lt;a href=&quot;https://www.youtube.com/watch?v=2pHdO8m6T7c&quot; rel=&quot;nofollow&quot;&gt;https://www.youtube.com/watch?v=2pHdO8m6T7c&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But in the process, I discovered that using the euler angles or the 'ypr' values from the MPU6050 as the feeback to the PID loop makes it super difficult to tune the quadcopter and even then it doesn't fly great. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Whereas although not intuitive to me, using the gyroscope values with a complementary filter instantly made the quad respond much better and the tuning also was not too difficult.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let me clearly define the response in both cases.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using ypr values:-&#xA;+Always keeps overshooting or 'underreaching'&#xA;+Very small range of values that can let the quad fly stable&#xA;+Drastic Reactions to extreme values of P (Kp)values&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using gyro values:-&#xA;+Reaction is much more stable&#xA;+Tuning the PID was also simple&#xA;+ Even under high values of P(Kp) the quad might crash due to oscillations but not flip or react extremely&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Below is a portion of the PID loop:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;//gyrox_temp is the current gyroscope output&#xA;&#xA;gyro_x_input=(gyro_x_input*.8)+(gyrox_temp*0.2);//complementary filter&#xA;&#xA;pidrate_error_temp =gyro_x_input - setpoint;//error value for PID loop&#xA;&#xA;pidrate_i_mem_roll += pidrate_i_gain_roll * pidrate_error_temp;&#xA;//integral portion&#xA;&#xA;pidrate_output_roll = pidrate_p_gain_roll * pidrate_error_temp + pidrate_i_mem_roll + pidrate_d_gain_roll * (pidrate_error_temp - pidrate_last_roll_d_error);&#xA;//output of the pid loop&#xA;/pidrate_p_gain_roll-Kp&#xA;//pidrate_i_gain_roll-Ki&#xA;//pidrate_d_gain_roll-Kd&#xA;//this output is given as the pwm signal to the quad plus throttle&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="13574" LastEditorUserId="13574" LastEditDate="2016-04-30T05:31:02.390" LastActivityDate="2016-05-01T20:53:57.043" Title="Quadcopter Flight Controller:Why does Using gyroscope data give better results?" Tags="&lt;quadcopter&gt;&lt;pid&gt;&lt;gyroscope&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="9740" PostTypeId="2" ParentId="9738" CreationDate="2016-04-30T02:41:37.623" Score="1" Body="&lt;p&gt;I am not a UAV guy, so others may be able to provide more specific answers.   But from a controls perspective, I would break the problem into two separate areas:  aerodynamics and controller response.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For aero, you want to consider both the inherent stability of your system, and the flight dynamics.   Essentially you want the uncontrolled system to be as stable as possible, then add the controller to handle unwanted disturbances.  For example, where is the cg of your robot?  Would moving some masses lower lead to a more naturally stable system?  You want as much inherent stability in the mechanics as you can get, so your controller can use its energy to combat (reject) the disturbances.  How else can you improve its aerodynamics?  What about a larger propeller, or more prop blades?  Or stronger motors?  Or a lighter frame?  Getting a higher lift to weight ratio is a benefit to stability.  Also, consider the system's cross-section if wind is contributing to the unsteadiness.   A tapered profile may help prevent impulsive disturbances in windy conditions.   These areas are complicated and beyond my experience.   But hopefully they will help you look into the system's natural dynamics to see if improvements can be made there.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the control responsiveness, there are also many items that may help.  Of course, faster control loop rates, and highly accurate sensors help.  What is the loop rate of your controller?  Can you program it more efficiently?   Or use a faster micro?  And, is the most current sensor data getting to the controller quickly?  I suspect a loop rate of around 1 kHz, and sensors with that type of bandwidth, would be required to achieve the type of stability you desire.  I would also look at the responsiveness and accuracy of your altitude and attitude sensors.   If you are using an IMU, could you add other sensors to get more accurate and/or faster data?  What about a downward-pointing (possibly laser) rangefinder to get very peppy altitude measurements?  Does your power supply and controller have enough slew rate to accommodate the control output changes needed for stability?  Finally, what model are you using in your controller?  A basic PID controller should be pretty good if the above items are okay, but if you still have nonsteady motion you might need to look into feedforward control, or maybe H$\infty$ control to get the stability you need.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know this isn't a real answer, but hopefully it gives you some ideas.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastEditorUserId="11125" LastEditDate="2016-04-30T03:43:16.690" LastActivityDate="2016-04-30T03:43:16.690" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9741" PostTypeId="1" AcceptedAnswerId="9747" CreationDate="2016-04-30T12:23:50.403" Score="1" ViewCount="56" Body="&lt;p&gt;I'm an Electronics student taking a module in Robotics. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the example,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/tg0sx.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tg0sx.png&quot; alt=&quot;Example from lecture notes&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I understand line 1 as the Jacobian is found from the time derivative of the kinematics equation and such relates joint angles to velocity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do not understand why the transpose has been taken on line 3 and how line 4 is produced.&lt;/p&gt;&#xA;" OwnerUserId="13576" LastEditorUserId="9176" LastEditDate="2016-05-03T09:09:55.647" LastActivityDate="2016-05-03T09:09:55.647" Title="Principle of virtual force - General help in understanding / explanation" Tags="&lt;kinematics&gt;&lt;jacobian&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="9743" PostTypeId="5" CreationDate="2016-05-01T08:41:46.027" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2016-05-01T08:41:46.027" LastActivityDate="2016-05-01T08:41:46.027" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9744" PostTypeId="4" CreationDate="2016-05-01T08:41:46.027" Score="0" Body="Lidar (also written LIDAR, LiDAR or LADAR) is a surveying technology that measures distance by illuminating a target with a laser light. Lidar exists as an acronym of Light Detection And Ranging." OwnerUserId="10596" LastEditorUserId="10596" LastEditDate="2016-05-02T13:23:36.223" LastActivityDate="2016-05-02T13:23:36.223" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9745" PostTypeId="2" ParentId="8895" CreationDate="2016-05-01T08:56:39.737" Score="2" Body="&lt;p&gt;It is possible to stabilize a quadcopter using only angle measurements in a single loop pid. However it is easier to stabilize a quadcopter using a cascaded PID controller. Yes you are tuning more parameters. Firstly you tune first the inner loop rate PID controller using the gyroscope's (the fast sensor, but drifts) angular rate readings then tune the outer loop stabilize PID using an angle setpoint and angle measurements from the sensor fusion of the angle readings from both the accelerometer and the angles integrated from the angular velocity readings from the gyroscope. I found that it was the easiest way to achieve stable flight coupled with my now current control loop rate of 530Hz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other related helpful questions with answers:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/2800/pid-output-does-not-reach-setpoint-precisely-enough/2817#2817&quot;&gt;PID output does not reach setpoint precisely enough&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/8354/need-help-for-a-quadcopter-pid/8903#8903&quot;&gt;Need help for a quadcopter PID&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Resources:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.quora.com/What-is-rate-and-stabilize-PID-in-quadcopter-control&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.quora.com/What-is-rate-and-stabilize-PID-in-quadcopter-control&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="11311" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2016-05-01T08:56:39.737" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9746" PostTypeId="2" ParentId="9652" CreationDate="2016-05-01T11:08:06.947" Score="3" Body="&lt;p&gt;Though, there is not much information about your servos let's assume that they consume at least 1A each. This value will probably be higher given that you want to move doors and that requires torque.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now let's see the RPi's capabilities. An answer from &lt;a href=&quot;https://raspberrypi.stackexchange.com/questions/9298/what-is-the-maximum-current-the-gpio-pins-can-output&quot;&gt;Stack Exchange Raspberry Pi&lt;/a&gt;, tells you the necessary information and sources about the RPi's power rails and GPIOs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 3.3 V supply can source a maximum of 50 mA, as the GPIOs are driven from this rail too. A GPIO can source max 16 mA, the overall current sourced by GPIOs cannot exceed the 3.3 V rail's max 50 mA.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is far not enough but also 3.3 V would be too low for supplying a servo, as servos usually need 4-6 V.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 5 V supply rail is limited by the power supply that powers the RPi, minus the RPi's current consumption. You did not provide what model do you use, so here is a table with each (except RPi3) models power requirements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/6LRsm.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6LRsm.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, if you want to power your servos from the RPi's 5 V rail, your maximum current is at least 5A + RPi's consumption. If you check, most USB micro type B connectors are rated on 1.8 A, but even if the connector can handle 5-6 A, driving this much current through the board just to supply your servos would be risky.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The best solution would be an external supply which provides 6 V as your servos will have higher torque at 6 V. Also it must be able to supply six times a servo's current. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A possible block diagram:&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/i4Ta4.png&quot; alt=&quot;schematic&quot;&gt;&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;The driving circuit can be a simple current limiting resistor an each pin of the RPi or you can use an appropriate small-signal FET as an interface.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for connecting the LEDs, you can use a simple current limiting resistor and GPIOs, but be careful to not exceed the 50 mA of the 3.3 V rail.&lt;/p&gt;&#xA;" OwnerUserId="10596" LastEditorUserId="-1" LastEditDate="2017-04-13T12:56:29.393" LastActivityDate="2016-05-01T11:08:06.947" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9747" PostTypeId="2" ParentId="9741" CreationDate="2016-05-01T11:35:56.870" Score="1" Body="&lt;p&gt;How the third equation is used in the derivation would be helpful in order to explain &lt;em&gt;why&lt;/em&gt; $\delta x$ is being transposed.   But when you take $$\delta x = J \delta q$$ and transpose it, you must reverse the order of the terms of the right hand side.   This makes sense if you consider the dimensions of $J$.   If $x \in \Re^n$ and $q \in \Re^m$ then $J$ is $n$ x $m$.  To postmultiply $q^T$ (which is 1 x $m$) you must transpose $J$.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The fourth equation is just a statement that the seesaw is in equilibrium - the total moment is zero. &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2016-05-01T11:35:56.870" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9748" PostTypeId="2" ParentId="9738" CreationDate="2016-05-01T20:29:22.357" Score="3" Body="&lt;p&gt;&lt;strong&gt;Using existing resources:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Very similar answer to @SteveO - I'd focus on tuning the PID control loop for each motor &lt;em&gt;individually&lt;/em&gt;, if possible, to eliminate any instability in the power delivery which would result in the aircraft leaning and therefore drifting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=XfAt6hNV8XM&amp;amp;ab_channel=BrianDouglas&quot; rel=&quot;nofollow&quot;&gt;A great video tutorial on PID control that helped me through a control exam&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Using additional resources:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The most stable implementation of drift elimination I've ever seen used an optical flow sensor on the base of the aircraft - much like the old-school optical mouse sensors this looks for an offset of pixels in a certain direction through a small camera. The resultant vector of this movement then becomes your drift value, which is corrected by adjusting the power output in the opposite direction. This is what the Parrot Quadcopters in my lab use and their stability is fantastic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://ardupilot.org/copter/docs/common-mouse-based-optical-flow-sensor-adns3080.html&quot; rel=&quot;nofollow&quot;&gt;APM's page on adding an optical flow sensor to your drone controller&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13586" LastActivityDate="2016-05-01T20:29:22.357" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9749" PostTypeId="2" ParentId="9739" CreationDate="2016-05-01T20:53:57.043" Score="1" Body="&lt;p&gt;The gyro is a less-noisy sensor with gradual drift, the accelerometer is a noisy sensor with integration error (due to the noise). Using them both in conjunction, with a set ratio of either sensor's information can improve the performance of an IMU (Inertial Measurement Unit) dramatically, as well as tuning the sample rate of either sensor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem with the MEMS accelerometers and gyros you get in cheaper implementations of flight controllers etc is that they're actually so susceptible to noise that their drift is usually measured in &lt;strong&gt;degrees a second&lt;/strong&gt;, so the longer they're running the worse they get.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A 'step-up' from complementary filtering is &lt;strong&gt;sensor fusion&lt;/strong&gt;, which involves blending in data from sensors external to your IMU, usually GPS, to further combat the issues you've been having.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To further understand the characteristics of these sensors and the constraints I'd recommend &lt;a href=&quot;http://www.phidgets.com/docs/Allan_Deviation_Primer&quot; rel=&quot;nofollow&quot;&gt;this primer on 'Allan Deviation'&lt;/a&gt; which shows you how to characterise accelerometers and gyroscopes in order to optimise drift and noise removal, as well as sample rates. There's also &lt;a href=&quot;http://www.x-io.co.uk/open-source-imu-and-ahrs-algorithms/&quot; rel=&quot;nofollow&quot;&gt;this incredible AHRS algorithm&lt;/a&gt; developed by Sebastian Madgwick which blows my mind a bit.&lt;/p&gt;&#xA;" OwnerUserId="13586" LastActivityDate="2016-05-01T20:53:57.043" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9751" PostTypeId="1" CreationDate="2016-05-02T04:42:44.977" Score="3" ViewCount="560" Body="&lt;p&gt;I want to measure the acceleration (forward and lateral separately) using an android smartphone device in order to be able to analyse the driving behavior. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My approach would be as follows:&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;1. Aligning coordinate systems&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Calibration (no motion / first motion):&lt;/strong&gt;&#xA;While the car is stationary, I would calculate the magnitude of gravity using &lt;code&gt;Sensor.TYPE_GRAVITY&lt;/code&gt; and rotate it straight to the z-axis (pointing downwards assuming a flat surface). That way, the &lt;strong&gt;pitch&lt;/strong&gt; and &lt;strong&gt;roll&lt;/strong&gt; angles should be near zero and equal to the angles of the car relativ to the world.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After this, I would start moving straight forward with the car to get a first motion indication using &lt;code&gt;Sensor.TYPE_ACCELEROMETER&lt;/code&gt; and rotate this magnitude straight to the x-axis (pointing forward). This way, the &lt;strong&gt;yaw&lt;/strong&gt; angle should be equal to the vehicle's heading relativ to the world.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update Orientation (while driving):&lt;/strong&gt;&#xA;To be able to keep the coordinate systems aligned while driving I am going to use &lt;code&gt;Sensor.TYPE_GRAVITY&lt;/code&gt; to maintain the roll and pitch of the system via&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/4gm3G.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/Zoz9b.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where A_x,y,z is the acceleration of gravity. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Usually, the yaw angle would be maintained via &lt;code&gt;Sensor.ROTATION_VECTOR&lt;/code&gt; or &lt;code&gt;Sensor.MAGNETIC_FIELD&lt;/code&gt;. However, the reason behind not using them is because I am going to use the application also in &lt;strong&gt;electrical vehicles&lt;/strong&gt;. The high amounts of volts and ampere produced by the engine would presumably make the accuracy of those sensor values suffer. Hence, the best alternative that I know (although not optimal) is using the GPS course to maintain the yaw angle.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;2. Getting measurements&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;By applying all aforementioned rotations it should be possible to maintain an alignment between the smartphone's and vehicle's coordinate systems and, hence, giving me the pure forward and lateral acceleration values on the x-axis and y-axis.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&lt;em&gt;Questions:&lt;/em&gt;&lt;/h2&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Is this approach applicable or did I miss something crucial?&lt;/li&gt;&#xA;&lt;li&gt;Is there an easier/alternative approach to this?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="13588" LastActivityDate="2016-06-16T14:20:28.020" Title="Measuring vehicle's forward and lateral acceleration using a smartphone" Tags="&lt;sensors&gt;&lt;accelerometer&gt;&lt;gps&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ClosedDate="2016-06-16T17:22:20.323" ContentLicense="CC BY-SA 3.0" />
  <row Id="9752" PostTypeId="1" AcceptedAnswerId="9753" CreationDate="2016-05-02T09:33:30.443" Score="0" ViewCount="8529" Body="&lt;p&gt;I want to install ROS on my Xubuntu 16.04, Xenial Xerus. I have followed the ROS's site instruction: &lt;a href=&quot;http://wiki.ros.org/jade/Installation/Ubuntu&quot; rel=&quot;nofollow&quot;&gt;http://wiki.ros.org/jade/Installation/Ubuntu&lt;/a&gt;, and did the following: First, setup my sources.list:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;sudo sh -c 'echo &quot;deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main&quot; &amp;gt; /etc/apt/sources.list.d/ros-latest.list'&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second, set up keys:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 0xB01FA116&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, make sure my package is up-to-date: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;sudo apt-get update&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Last, try to install ROS jade:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;sudo apt-get install ros-jade-desktop-full&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And get this error:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;E: Unable to locate package ros-jade-desktop-full&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where did I go wrong, and how can I get ROS (any version is ok) running on my Xubuntu 16.04?&lt;/p&gt;&#xA;" OwnerUserId="13590" LastActivityDate="2016-05-02T10:19:48.393" Title="E: Unable to locate package ros-jade-desktop-full" Tags="&lt;ros&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9753" PostTypeId="2" ParentId="9752" CreationDate="2016-05-02T10:19:48.393" Score="1" Body="&lt;p&gt;On the page you indicated &lt;a href=&quot;http://wiki.ros.org/jade/Installation/Ubuntu&quot; rel=&quot;nofollow&quot;&gt;http://wiki.ros.org/jade/Installation/Ubuntu&lt;/a&gt; it is said that it only support 14.04 14.10 and 15.04, therefore i don't think it is available yet for the 16.04 version.&#xA;Either try to see via auto-completion if there is any other version available,&#xA;or compile from source. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will have better answers on the ros site &lt;a href=&quot;http://answers.ros.org/question/226098/ros-on-ubuntu-xenial-1604/&quot; rel=&quot;nofollow&quot;&gt;http://answers.ros.org/question/226098/ros-on-ubuntu-xenial-1604/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13592" LastActivityDate="2016-05-02T10:19:48.393" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9754" PostTypeId="1" AcceptedAnswerId="9765" CreationDate="2016-05-02T18:31:59.303" Score="4" ViewCount="169" Body="&lt;p&gt;I'm about to start a project, where I'm sniffing data between remote controls and flight controllers on RC copters and doing stuff with that information.  Do all (or most) flight controllers use the same protocol to communicate with the remote controls, or does it vary based on which one you buy?  I would be testing on drones (DJI phantom and the like).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, my real question is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I want to write something to read the data, will I need to buy a different flight controller for each protocol used, or do they all use the same protocol, and I can just buy one flight controller, and the info I can get out will be the same for all types of flight controllers?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, are the protocols only spoken by the ground remote control and the flight controller?  Does the receiver care what protocol is being used, or is it just a middle man?&lt;/p&gt;&#xA;" OwnerUserId="13597" LastEditorUserId="13597" LastEditDate="2016-05-03T19:41:57.573" LastActivityDate="2016-05-03T21:08:24.390" Title="Are all Flight Controllers and Remote Controls using the same protocol?" Tags="&lt;quadcopter&gt;&lt;radio-control&gt;&lt;research&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9755" PostTypeId="1" AcceptedAnswerId="9769" CreationDate="2016-05-03T05:12:45.210" Score="0" ViewCount="1135" Body="&lt;p&gt;Good day,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have been reading papers about position integration from accelerometer readings.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have consulted &lt;a href=&quot;http://perso-etis.ensea.fr/~pierandr/cours/M1_SIC/AN3397.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this paper from freescale&lt;/a&gt; on how that is achievable and &lt;a href=&quot;http://diydrones.com/forum/topics/multi-rotors-the-altitude-yoyo-effect-and-how-to-deal-with-it&quot; rel=&quot;nofollow noreferrer&quot;&gt;this article regarding leaky integrators&lt;/a&gt; to help in preventing accumulation of errors from integration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was testing this algorithm by moving the imu by approximately 0.1 meter. The algorithm does get it right at the instant it arrives at approx 0.1 meter however when left still at that position, the integrated position goes to zero.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It turns out the velocity readings become negative at a certain period after reaching 0.1 meters.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Does anyone have any suggestions in dealing with this error?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Plots&lt;/strong&gt; (Red is the position, Blue is the velocity.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The imu(accelerometer) was moved alternating positions 0 meters and 0.1 meters with a stop of approximately 3-5 seconds in between before moving to the next position&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Actual Data&#xA;&lt;a href=&quot;https://i.stack.imgur.com/bioEh.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/bioEh.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/iJMmi.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/iJMmi.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Desired Data output (Green - Desired position integration)&#xA;&lt;a href=&quot;https://i.stack.imgur.com/C85lq.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/C85lq.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Code:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;// Get acceleration per axis&#xA;float AccX = accelmagAngleArray.AccX;&#xA;float AccY = accelmagAngleArray.AccY;&#xA;float AccZ = accelmagAngleArray.AccZ;&#xA;&#xA;AccX -= dc_offsetX;&#xA;AccY -= dc_offsetY;&#xA;AccZ -= dc_offsetZ;&#xA;&#xA;//Calculate Current Velocity (m/s)&#xA;float leakRateAcc = 0.99000;&#xA;velCurrX = velCurrX*leakRateAcc + ( prevAccX + (AccX-prevAccX)/2 ) * deltaTime2;&#xA;velCurrY = velCurrY*leakRateAcc + ( prevAccY + (AccY-prevAccY)/2 ) * deltaTime2;&#xA;velCurrZ = velCurrZ*0.99000 + ( prevAccZ + (AccZ-prevAccZ)/2 ) * deltaTime2;&#xA;prevAccX = AccX;&#xA;prevAccY = AccY;&#xA;prevAccZ = AccZ;&#xA;&#xA;//Discrimination window for Acceleration&#xA;if ((0.12 &amp;gt; AccX) &amp;amp;&amp;amp; (AccX &amp;gt; -0.12)){&#xA;  AccX = 0;&#xA;}&#xA;&#xA;if ((0.12 &amp;gt; AccY) &amp;amp;&amp;amp; (AccY &amp;gt; -0.12)){&#xA;  AccY = 0;&#xA;}&#xA;&#xA;//Count number of times acceleration is equal to zero to drive velocity to zero when acceleration is &quot;zero&quot;&#xA;//X-axis---------------&#xA;if (AccX == 0){ //Increment no of times AccX is = to 0&#xA;    counterAccX++;    &#xA;}&#xA;else{ //Reset counter&#xA;    counterAccX = 0;&#xA;}&#xA;&#xA;if (counterAccX&amp;gt;25){ //Drive Velocity to Zero&#xA;velCurrX = 0;&#xA;    prevVelX = 0;&#xA;    counterAccX = 0;&#xA;}&#xA;&#xA;//Y-axis--------------&#xA;if (AccY == 0){ //Increment no of times AccY is = to 0&#xA;    counterAccY++;    &#xA;}&#xA;else{ //Reset counter&#xA;    counterAccY = 0;&#xA;}&#xA;&#xA;if (counterAccY&amp;gt;25){ //Drive Velocity to Zero&#xA;    velCurrY = 0;&#xA;    prevVelY = 0;&#xA;    counterAccY = 0;&#xA;}&#xA;&#xA;//Print Acceleration and Velocity&#xA;cout &amp;lt;&amp;lt; &quot; AccX = &quot; &amp;lt;&amp;lt; AccX ;// &amp;lt;&amp;lt; endl;&#xA;cout &amp;lt;&amp;lt; &quot; AccY = &quot; &amp;lt;&amp;lt; AccY ;// &amp;lt;&amp;lt; endl;&#xA;cout &amp;lt;&amp;lt; &quot; AccZ = &quot; &amp;lt;&amp;lt; AccZ &amp;lt;&amp;lt; endl;&#xA;&#xA;cout &amp;lt;&amp;lt; &quot; velCurrX = &quot; &amp;lt;&amp;lt; velCurrX ;// &amp;lt;&amp;lt; endl;&#xA;cout &amp;lt;&amp;lt; &quot; velCurrY = &quot; &amp;lt;&amp;lt; velCurrY ;// &amp;lt;&amp;lt; endl;&#xA;cout &amp;lt;&amp;lt; &quot; velCurrZ = &quot; &amp;lt;&amp;lt; velCurrZ &amp;lt;&amp;lt; endl;&#xA;&#xA;//Calculate Current Position in Meters&#xA;float leakRateVel = 0.99000;&#xA;posCurrX = posCurrX*leakRateVel + ( prevVelX + (velCurrX-prevVelX)/2 ) * deltaTime2;&#xA;posCurrY = posCurrY*leakRateVel + ( prevVelY + (velCurrY-prevVelY)/2 ) * deltaTime2;&#xA;posCurrZ = posCurrZ*0.99000 + ( prevVelZ + (velCurrZ-prevVelZ)/2 ) * deltaTime2;&#xA;prevVelX = velCurrX;&#xA;prevVelY = velCurrY;&#xA;prevVelZ = velCurrZ;&#xA;&#xA;//Print X and Y position in meters&#xA;cout &amp;lt;&amp;lt; &quot; posCurrX = &quot; &amp;lt;&amp;lt; posCurrX ;// &amp;lt;&amp;lt; endl;&#xA;cout &amp;lt;&amp;lt; &quot; posCurrY = &quot; &amp;lt;&amp;lt; posCurrY ;// &amp;lt;&amp;lt; endl;&#xA;cout &amp;lt;&amp;lt; &quot; posCurrZ = &quot; &amp;lt;&amp;lt; posCurrZ &amp;lt;&amp;lt; endl;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="11311" LastEditorUserId="11311" LastEditDate="2016-05-03T05:54:50.667" LastActivityDate="2016-05-05T05:32:57.107" Title="Dead Reckoning: Obtaining Position Estimation from Accelerometer Acceleration Integration" Tags="&lt;quadcopter&gt;&lt;sensors&gt;&lt;localization&gt;&lt;integration&gt;&lt;dead-reckoning&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9756" PostTypeId="1" AcceptedAnswerId="9757" CreationDate="2016-05-03T06:54:57.413" Score="1" ViewCount="51" Body="&lt;p&gt;I get position information and a corresponding timestamp from a motion tracking system (for a rigid body) at 120 Hz. The position is in sub-millimeter precision, but I'm not too sure about the time stamp, I can get it as floating point number in seconds from the motion tracking software. To get the velocity, I use the difference between two samples divided by the $\Delta t$ of the two samples:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\dot{\mathbf{x}} = \dfrac{\mathbf{x}[k] - \mathbf{x}[k-1]}{t[k]-t[k-1]}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The result looks fine, but a bit noisy at times. A realized that I get much smoother results when I choose the differentiation step $h$ larger, e.g. $h=10$:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\dot{\mathbf{x}} = \dfrac{\mathbf{x}[k] - \mathbf{x}[k-h]}{t[k]-t[k-h]}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, peaks in the velocity signal begin to fade if I choose $h$ too large. Unfortunately, I didn't figure out why I get a smoother signal with a bigger step $h$. Does someone have a hint? Is there a general rule which differentiation step size is optimal with respect to smoothness vs. &quot;accuracy&quot;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a sample plot of one velocity component (blue: step size 1, red: step size 10):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/3aaOU.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3aaOU.png&quot; alt=&quot;Sample plot of step size 1 vs. step size 10.&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9899" LastEditorUserId="9899" LastEditDate="2016-05-03T07:38:47.417" LastActivityDate="2016-05-03T08:05:57.290" Title="Step size in numerical differentiation" Tags="&lt;motion&gt;&lt;pose&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9757" PostTypeId="2" ParentId="9756" CreationDate="2016-05-03T07:59:30.907" Score="1" Body="&lt;p&gt;This answer valid only if $\Delta{t} = \mathbf{t}[k] - \mathbf{t}[k-1]$ is a constant. Then you can rewrite your equation as:&#xA;$$\dot{\mathbf{x}} = \dfrac{\mathbf{x}[k] - \mathbf{x}[k-1]}{\Delta{t}}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\dot{\mathbf{x}}_l = \dfrac{1}{h}\sum_{i=1}^{h}\dot{\mathbf{x}_i} = &#xA;\dfrac{(\mathbf{x}[k] - \mathbf{x}[k-1])+(\mathbf{x}[k-1] - \mathbf{x}[k-2])+\dotsb+(\mathbf{x}[k-h+1] - \mathbf{x}[k-h])}{h\Delta{t}}&#xA;= \bigg(\dfrac{\mathbf{x}[k] - \mathbf{x}[k-h]}{h\Delta{t}}\bigg)&#xA;$$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;h\Delta{t} = \mathbf{t}[k] - \mathbf{t}[k-h]&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here $\dot{\mathbf{x}}_i$ is the $i^{th}$ sample of the reading and passing it through a moving average filter (which is a low pass filter) you can obtain $\dot{\mathbf{x}_l}$. So $\dot{\mathbf{x}_l}$ is smooth as it is a low pass signal. When you increase the value of $h$ you can minimize the bandwidth of $\dot{\mathbf{x}_l}$. So when you increase the value of $h$ the result is getting more smoother. So peaks begin to fade(Peaks means high frequency components).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I know there isn't a generalize way to determine $h$ to get the result smoother and accurate. You have to choose appropriate $h$ by a trial and error or if you know the transfer function of the sensor, you can use that to determine an appropriate value for $h$. &lt;/p&gt;&#xA;" OwnerUserId="1851" LastEditorUserId="1851" LastEditDate="2016-05-03T08:05:57.290" LastActivityDate="2016-05-03T08:05:57.290" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9761" PostTypeId="5" CreationDate="2016-05-03T17:25:52.470" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2016-05-03T17:25:52.470" LastActivityDate="2016-05-03T17:25:52.470" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9762" PostTypeId="4" CreationDate="2016-05-03T17:25:52.470" Score="0" Body="Questions about robots communicating over Wi-Fi (802.11)." OwnerUserId="10596" LastEditorUserId="10596" LastEditDate="2016-05-03T18:16:45.727" LastActivityDate="2016-05-03T18:16:45.727" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9763" PostTypeId="5" CreationDate="2016-05-03T17:28:24.920" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2016-05-03T17:28:24.920" LastActivityDate="2016-05-03T17:28:24.920" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9764" PostTypeId="4" CreationDate="2016-05-03T17:28:24.920" Score="0" Body="MATLAB is a high-level language and interactive programming environment for numerical computation and visualization developed by MathWorks. " OwnerUserId="10596" LastEditorUserId="10596" LastEditDate="2016-05-03T18:16:21.863" LastActivityDate="2016-05-03T18:16:21.863" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9765" PostTypeId="2" ParentId="9754" CreationDate="2016-05-03T21:08:24.390" Score="3" Body="&lt;p&gt;There are standard protocols, and then there are proprietary protocols.  The choice of what protocol to use depends on many things.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Without listing the precise set of flight controllers you are planning to buy, it's difficult to provide anything more than a very general answer to this question.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2016-05-03T21:08:24.390" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9766" PostTypeId="5" CreationDate="2016-05-04T07:55:37.717" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2016-05-04T07:55:37.717" LastActivityDate="2016-05-04T07:55:37.717" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9767" PostTypeId="4" CreationDate="2016-05-04T07:55:37.717" Score="0" Body="In serial communication data is transmitted as a sequence in time. Main advantage: Fewer wires needed. Main disadvantage: Higher bandwidth required for the same throughput. " OwnerUserId="10596" LastEditorUserId="9720" LastEditDate="2016-05-04T17:38:30.503" LastActivityDate="2016-05-04T17:38:30.503" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9768" PostTypeId="2" ParentId="9724" CreationDate="2016-05-04T12:00:33.330" Score="1" Body="&lt;p&gt;In bang-bang control, control inputs can only be activated similar to a switch: when they are engaged they are fully on positive, or fully on negative.   Some bang-bang control studies (not many that I can recall) account for a slew rate of the controller's output, so the outputs are not modelled as square waves, but rather as trapezoids.   I think this is the &quot;bang-bang signal&quot; you need to generate.  The phrasing is odd.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It sounds as if you need to add a control force to your model that is just a trapezoid (acceleration period, constant full-on period, and deceleration period).  In m-code it would be something like the following.  Here I am assuming your step size is 1 msec, with a 10% slew time.  You may want different slew parameters.  I've written it so you can change step size and slew percents in one place.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;max_F = 1.0;&#xA;steps_per_sec = 1000;&#xA;slew_up = 0.1;&#xA;slew_down = 0.1;&#xA;accel_steps = floor(steps_per_sec * slew_up);&#xA;decel_steps = floor(steps_per_sec * slew_down);&#xA;full_on_steps = steps_per_sec - accel_steps - decel_steps;&#xA;&#xA;loops = 1;&#xA;// acceleration period&#xA;for i = 1:accel_steps&#xA;    F(i) = i * max_F / accel_steps;&#xA;    loops = loops + 1;&#xA;end&#xA;// full-on period&#xA;for i = loops : accel_steps + full_on_steps&#xA;    F(loops) = max_F;&#xA;    loops = loops + 1;&#xA;end&#xA;// deceleration period&#xA;for i = loops : accel_steps + full_on_steps + decel_steps&#xA;    F(loops) = max_F - (i - accel_steps - full_on_steps) * max_F / decel_steps;&#xA;    loops = loops + 1;&#xA;end&#xA;// after input is back to zero&#xA;for i = loops : 10 * steps_per_sec&#xA;    F(i) = 0.0;&#xA;end&#xA;&#xA;// now apply F to your simulation&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;@AlFagera, Thanks for posting a reference to the actual paper.  Following the references and re-searching led me to this paper:  M. S. Alam, M. A. Hossain, and M. O. Tokhi, &lt;em&gt;Design of Command Shaper Using Gain-Delay Units and Particle Swarm Optimisation for Vibration Control of a Flexible System,&lt;/em&gt; 14th International Congress on Sound &amp;amp; Vibration, Cairns, Australia 2007 (&lt;a href=&quot;https://www.acoustics.asn.au/conference_proceedings/ICSV14/papers/p197.pdf&quot; rel=&quot;nofollow&quot;&gt;https://www.acoustics.asn.au/conference_proceedings/ICSV14/papers/p197.pdf&lt;/a&gt;).  In that paper they describe a bang-bang signal as I've done above, except their acceleration and deceleration periods are quite short.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastEditorUserId="11125" LastEditDate="2016-05-04T19:20:28.163" LastActivityDate="2016-05-04T19:20:28.163" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9769" PostTypeId="2" ParentId="9755" CreationDate="2016-05-04T12:07:54.623" Score="0" Body="&lt;p&gt;I am now able to get position from the accelerometer.&lt;a href=&quot;https://i.stack.imgur.com/oKXTa.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/oKXTa.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;Plot (Green - Acc, Blue -Vel, Red - Pos)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was able to get the propper values through disabling the leaky integrator (setting the factor from 0.99 to 1). &lt;/p&gt;&#xA;" OwnerUserId="11311" LastEditorUserId="11311" LastEditDate="2016-05-05T05:32:57.107" LastActivityDate="2016-05-05T05:32:57.107" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="9770" PostTypeId="1" AcceptedAnswerId="9773" CreationDate="2016-05-04T13:09:03.107" Score="3" ViewCount="141" Body="&lt;p&gt;I am working in reproducing a robotics paper, first simulating it in MATLAB in order to implement it to a real robot afterwards. The robot's model is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\dot{x}=V(t)cos\theta $$&#xA;$$\dot{y}=V(t)sin\theta$$&#xA;$$\dot{\theta}=u$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The idea is to apply an algorithm to avoid obstacles and reach a determines target. This algorithm uses a cone vision to measure the obstacle's properties. The information required to apply this system is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) The minimum distance  $ d(t) $ between the robot and the obstacle (this obstacle is modelled as a circle of know radius $ R $).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) The obstacle's speed  $ v_{obs}(t) $&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3)The angles $ \alpha_{1}(t)$ and $ \alpha_{2}(t)$  that form the robot's cone vision, and&lt;/p&gt;&#xA;&#xA;&lt;p&gt;4) the heading $ H(t) $  from the robot to the target&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First a safe distance  $ d_{safe}$  between the robot and the obstacle is defined. The robot has to reach the target without being closer than        $ d_{safe}$ to the obstacle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An extended angle $ \alpha_{0} \ge arccos\left(\frac{R}{R+d_{safe}} \right) $  is defined, where $ 0 \le \alpha_{0} \le \pi $ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then the following auxiliary angles are calculated:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$ \beta_{1}(t)=\alpha_{1}(t)-\alpha_{0}(t)$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$ \beta_{2}=\alpha_{2}(t)+\alpha_{0}(t)$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then the following vectors are defined:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$ l_{1}=(V_{max}-V)[cos(\beta_{1}(t)),sin(\beta_{1}(t))]$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$ l_{2}=(V_{max}-V)[cos(\beta_{2}(t)),sin(\beta_{1}(2))]$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;here $ V_{max}$  is the maximum robot's speed and  $ V $ a constant that fulfills  $ \|v_{obs}(t)\| \le V \le V_{max} $ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This vectors represent the boundaries of the cone vision of the vehicle&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given the vectors $ l_{1} $  and $ l_{2}$ , the angle $ \alpha(l_1,l_2)$  is the angle between $ l_{1}$  and $ l_{2} $  measured in counterclockwise direction, with $  \alpha \in (-\pi,\pi) $ . Then the function $f$ is &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The evasion maneuver starts at time $t_0$. For that the robot find the index h:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$h = min|\alpha(v_{obs}(t_0)+l_j(t_0),v_R(t_0))|$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $j={1,2}$ and $v_R(t)$ is the robot's velocity vector &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, from the two vectors  $v_{obs}(t_0)+l_j(t_0)$ we choose that one that forms the smallest angle with the robot's velocity vector. Once h is determinded, the control law is applied:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$u(t)=-U_{max}f(v_{obs}(t)+l_h(t),v_R(t))$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$V(t)=\|v_{obs}(t)+l_h(t)\| \quad \quad (1)$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a sliding mode type control law, that steers the robot's velocity  $v_R(t)$ towards a switching surface equal to the vector $v_{obs}(t)+l_h(t)$. Ideally the robot avoids the obstacle by surrounding it a &lt;/p&gt;&#xA;&#xA;&lt;p&gt;While the robot is not avoiding an obstacle it follows a control law:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$u(t)=0$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$V(t)=V_{max} \quad \quad  (2) $    &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hence the rules to switch between the two laws are:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;R10&lt;/strong&gt; Switching from (2) to (1) occurs whenthe distance to the obstacle is equal to a constant C, which means when $d(t_0)=C$ and this distance is becoming smaller in time  i.e. $\dot{d(t)}&amp;lt;0$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;R11&lt;/strong&gt; Switching from (1) to (2) occurs when $d(t_*)&amp;lt;1.1a_*$ and the vehicle is pointing towards the obstacle, i.e. $\theta(t_*)=H(T_*)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $a_*=\frac{R}{cos\alpha_0}-R $&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ideally the result should be similar to this&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I'm getting this instead&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While I understand the theory there's obviously a flaw in my implementation that I haven't been able to solve. In my opinion the robot manages to avoid the obstacle but at certain point (in the red circle), the robot turns to the wrong side, making impossible the condition $H(t) = \theta(t) $ to be achieved.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I feel that I am not measuring properly the angle alpha between the $v_{obs}(t)+l_h(t)$ and $v_{R}(t)$ , because while debugging I can see that at certain point it stops switching between negative and positive values and become only positive, leading the robot's to the wrong side. It also seems to be related with my problem here: &lt;a href=&quot;https://robotics.stackexchange.com/questions/9386/&quot;&gt;Angle to a circle tangent line&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/BDYtU.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/BDYtU.png&quot; alt=&quot;angles&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10466" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2016-06-01T07:41:25.757" Title="Mobile robot algorithm implementation error" Tags="&lt;mobile-robot&gt;&lt;kinematics&gt;&lt;matlab&gt;&lt;geometry&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9772" PostTypeId="1" CreationDate="2016-05-04T18:51:21.007" Score="5" ViewCount="308" Body="&lt;p&gt;I at moment trying to compute the Q configuration that moves my robot from it current state described by this transformation matrix.&#xA;with rotation&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;0.00549713  0.842013  -0.539429  &#xA;0.999983 -0.00362229 0.00453632 &#xA;0.00186567 -0.539445 -0.842019&#xA;                    &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;and position as this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;-0.0882761&#xA;-0.255069&#xA; 0.183645&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;To this rotatation&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    0  0.942755 -0.333487&#xA;    1         0         0&#xA;    0 -0.333487 -0.942755&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;and this position&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;8.66654&#xA;19.809&#xA;115.771&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Due to the drastic change in the Z direction, I thought i could split the path between start and end into small chunks by creating data inbetween by interpolating, and compute the inverse kinematics for each of these small position.  Problem is that the output i am getting is pretty large.. Which making me suspect that some of the output might be wrong. The simulation i am using constrains the rotation to 360 degrees.. I think something goes wrong..&lt;/p&gt;&#xA;&lt;p&gt;The only reason I could think would do this, would be if the jacobian i am was using had singularities... Which why i assumed that i was running into singualarity issue..&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;setQ{22.395444, 319.402231, 90.548314, -228.989836, -295.921218, -336.808799}&#xA;setQ{8.209388, 362.472468, 108.618073, -232.346755, -299.935844, -334.929518}&#xA;setQ{8.479842, 399.892521, 127.432982, -234.017882, -303.852583, -335.063821}&#xA;setQ{8.224516, 362.232497, 108.666778, -232.319554, -299.899932, -334.928688}&#xA;setQ{7.718908, 286.832458, 71.150606, -228.913831, -291.982659, -334.658147}&#xA;setQ{7.468625, 249.092444, 52.400638, -227.206436, -288.018036, -334.522738}&#xA;setQ{7.220023, 211.325766, 33.656081, -225.496018, -284.049424, -334.387237}&#xA;setQ{-6.134091, -2538.260148, -1283.375216, -96.331289, 7.920957, -324.531125}&#xA;setQ{-6.261661, -2577.946595, -1301.730132, -94.403263, 12.176863, -324.388990}&#xA;setQ{-6.634286, -2697.165915, -1356.762411, -88.601053, 24.968521, -323.962029}&#xA;setQ{-6.991781, -2816.625206, -1411.745985, -82.771641, 37.796090, -323.534239}&#xA;setQ{-7.334148, -2936.324468, -1466.680853, -76.915029, 50.659572, -323.105620}&#xA;setQ{-7.661386, -3056.263702, -1521.567017, -71.031215, 63.558965, -322.676171}&#xA;setQ{-8.642914, -3457.794271, -1704.169136, -51.222052, 106.816303, -321.238686}&#xA;setQ{-8.988457, -3619.153075, -1777.058457, -43.213761, 124.230964, -320.661112}&#xA;setQ{-9.382564, -3821.451508, -1868.048346, -33.135395, 146.089069, -319.937071}&#xA;setQ{-9.528439, -3902.557525, -1904.406419, -29.082892, 154.860242, -319.646810}&#xA;setQ{-9.667591, -3983.770196, -1940.742846, -25.018300, 163.647376, -319.356179}&#xA;setQ{-9.734645, -4024.416527, -1958.902942, -22.981471, 168.046928, -319.210726}&#xA;setQ{-9.986053, -4187.268484, -2031.489209, -14.803929, 185.685040, -318.627992}&#xA;setQ{-10.210564, -4350.547057, -2103.988889, -6.578030, 203.386994, -318.043783}&#xA;setQ{-10.312734, -4432.346324, -2140.206259, -2.446947, 212.261912, -317.751125}&#xA;setQ{-10.453381, -4555.245201, -2194.491727, 3.772345, 225.604215, -317.311448}&#xA;setQ{-10.496902, -4596.264820, -2212.576060, 5.851488, 230.059630, -317.164705}&#xA;setQ{-10.538741, -4637.311102, -2230.654980, 7.933652, 234.519035, -317.017869}&#xA;setQ{-10.617377, -4719.483658, -2266.796587, 12.107048, 243.449816, -316.723922}&#xA;setQ{-10.812941, -4966.641247, -2375.091527, 24.699772, 270.337923, -315.839868}&#xA;setQ{-10.839651, -5007.927501, -2393.121742, 26.809138, 274.833240, -315.692203}&#xA;setQ{-10.888029, -5090.579998, -2429.165939, 31.036936, 283.835844, -315.396596}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;code&gt;setQ&lt;/code&gt; is just a function for my simulation, the numbers are the actual Q values starting from 0 - 5. (I am using a 6 jointed robot (UR5))&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I am using a sphere to compute my desired transformation matrix.. The idea is that i want my arm be on this sphere, point inward to the center.&lt;/p&gt;&#xA;&lt;pre class=&quot;lang-cpp prettyprint-override&quot;&gt;&lt;code&gt;std::vector&amp;lt;Transform3D&amp;lt;&amp;gt;&amp;gt; pathPlanning::sphere(double dx, double dy, double dz)&#xA;{&#xA;    double r = 5.0; // Radius of the sphere -  set to 5.0 cm (TODO: has to be checked if that also is accurate)&#xA;    cout &amp;lt;&amp;lt; &amp;quot;Create a sphere&amp;quot; &amp;lt;&amp;lt; endl;&#xA;&#xA;    double current_x = this-&amp;gt;device-&amp;gt;baseTframe(this-&amp;gt;toolFrame,this-&amp;gt;state).P()[0];&#xA;    double current_y = this-&amp;gt;device-&amp;gt;baseTframe(this-&amp;gt;toolFrame,this-&amp;gt;state).P()[1];&#xA;    double current_z = this-&amp;gt;device-&amp;gt;baseTframe(this-&amp;gt;toolFrame,this-&amp;gt;state).P()[2];&#xA;&#xA;&#xA;    // Formula for sphere (x-x0)²+(y-y0)²+(z-z0)²=r²&#xA;    // x: x = x_0 + rcos(theta)sin(phi)&#xA;    // y: y = y_0 + rsin(theta)sin(phi)&#xA;    // z: z = z_0 + rcos(phi)&#xA;    // Angle range: 0 &amp;lt;= theta &amp;lt;= 2M_PI ; 0 &amp;lt;= phi &amp;lt;= M_PI&#xA;&#xA;    double obj_x = current_x + dx;&#xA;    double obj_y = current_y + dy;&#xA;    double obj_z = current_z + dz;&#xA;&#xA;    std::vector&amp;lt;Transform3D&amp;lt;&amp;gt;&amp;gt; out;&#xA;&#xA;    int count = 32;&#xA;&#xA;    for(double azimuthal = 0; azimuthal &amp;lt;= M_PI ; azimuthal+=0.01 )&#xA;    {&#xA;&#xA;        for(double polar = 0.35; polar &amp;lt;= M_PI-0.35 ; polar+=0.01 )&#xA;        {&#xA;&#xA;            double sphere_x = obj_x + r*cos(azimuthal)*sin(polar);&#xA;            double sphere_y = obj_y + r*sin(azimuthal)*sin(polar);&#xA;            double sphere_z = obj_z + + r*cos(polar);&#xA;&#xA;            //string text = to_string(sphere_x) + &amp;quot; , &amp;quot; + to_string(sphere_y)+ &amp;quot; , &amp;quot; + to_string(sphere_z);&#xA;            //positions &amp;lt;&amp;lt; text &amp;lt;&amp;lt; endl;&#xA;&#xA;            Transform3D&amp;lt;&amp;gt; transformation_matrix = transform(obj_x,obj_y,obj_z,sphere_x,sphere_y,sphere_z);&#xA;&#xA;            if(0.1&amp;lt;(transformation_matrix.P()[0] - current_x) || 0.1&amp;lt;(transformation_matrix.P()[1] - current_y) || 0.1&amp;lt;(transformation_matrix.P()[2] - current_z))&#xA;            {&#xA;                cout &amp;lt;&amp;lt; &amp;quot;Interpolate: &amp;quot; &amp;lt;&amp;lt; endl;&#xA;                &#xA;                std::vector&amp;lt;Transform3D&amp;lt;&amp;gt;&amp;gt; transformation_i = invKin_LargeDisplacement(transformation_matrix);&#xA;                out.insert(out.end(),transformation_i.begin(),transformation_i.end());&#xA;                cout &amp;lt;&amp;lt; out.size() &amp;lt;&amp;lt; endl;&#xA;                cout &amp;lt;&amp;lt; &amp;quot;only returning one interpolation onto the sphere!&amp;quot; &amp;lt;&amp;lt; endl;&#xA;&#xA;                return transformation_i;&#xA;            }&#xA;            else&#xA;            {&#xA;                cout &amp;lt;&amp;lt; &amp;quot;OK&amp;quot; &amp;lt;&amp;lt; endl;&#xA;                out.push_back(transformation_matrix);&#xA;&#xA;            }&#xA;            &#xA;&#xA;            if(count == 32) //TODO: Why...... is this occuring?&#xA;            {&#xA;                //cout &amp;lt;&amp;lt; &amp;quot;Theta: &amp;quot; &amp;lt;&amp;lt; theta &amp;lt;&amp;lt; &amp;quot; Phi: &amp;quot; &amp;lt;&amp;lt; phi &amp;lt;&amp;lt; endl;&#xA;                //cout &amp;lt;&amp;lt; sphere_x &amp;lt;&amp;lt; &amp;quot; , &amp;quot; &amp;lt;&amp;lt; sphere_y &amp;lt;&amp;lt;&amp;quot; , &amp;quot;&amp;lt;&amp;lt; sphere_z &amp;lt;&amp;lt; endl;&#xA;                count = 0;&#xA;            }&#xA;            else&#xA;            {&#xA;                count++;&#xA;            }&#xA;        }&#xA;    }&#xA;&#xA;    return out;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This function provides me with the point on the sphere, which is use to create my rotation matrix using &lt;code&gt;transform&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Transform3D&amp;lt;&amp;gt; pathPlanning::transform(double obj_x, double obj_y, double obj_z, double sphere_x, double sphere_y ,double sphere_z)&#xA;{&#xA;    // Z-axis should be oriented towards the object.&#xA;    // Rot consist of 3 direction vector [x,y,z] which describes how the axis should be oriented in the world space.&#xA;    // Looking at the simulation the z-axis is the camera out. X, and Y describes the orientation of the camera.&#xA;    // The vector are only for direction purposes, so they have to be normalized....&#xA;    // TODO: case [0  0 -1]... Why is it happening at what can be done to undo it?&#xA;    cout &amp;lt;&amp;lt; &amp;quot;inside Transform&amp;quot; &amp;lt;&amp;lt; endl;&#xA;    cout &amp;lt;&amp;lt; obj_x &amp;lt;&amp;lt; &amp;quot;,&amp;quot; &amp;lt;&amp;lt; sphere_x &amp;lt;&amp;lt; &amp;quot; ; &amp;quot;  &amp;lt;&amp;lt; obj_y &amp;lt;&amp;lt; &amp;quot; , &amp;quot; &amp;lt;&amp;lt; sphere_y  &amp;lt;&amp;lt;&amp;quot; ; &amp;quot;&amp;lt;&amp;lt; obj_z &amp;lt;&amp;lt; &amp;quot; , &amp;quot; &amp;lt;&amp;lt; sphere_z  &amp;lt;&amp;lt; endl;&#xA;    Vector3D&amp;lt;&amp;gt; dir_z((obj_x - sphere_x), (obj_y - sphere_y), (obj_z - sphere_z));&#xA;    //Vector3D&amp;lt;&amp;gt; dir_z((sphere_x-obj_x), (sphere_y - obj_y), (sphere_z-obj_z));&#xA;    dir_z = normalize(dir_z);&#xA;    Vector3D&amp;lt;&amp;gt; downPlane(0.0,0.0,-1.0);&#xA;    Vector3D&amp;lt;&amp;gt; dir_x = cross(downPlane,dir_z);&#xA;    dir_x = normalize(dir_x);&#xA;    Vector3D&amp;lt;&amp;gt; dir_y = cross(dir_z,dir_x);&#xA;    dir_y = normalize(dir_y);&#xA;    Rotation3D&amp;lt;&amp;gt; rot_out (dir_x,dir_y,dir_z);  // [x y z]&#xA;&#xA;    Vector3D&amp;lt;&amp;gt; pos_out(sphere_x,sphere_y,sphere_z);&#xA;&#xA;    Transform3D&amp;lt;&amp;gt; out(pos_out,rot_out);&#xA;    cout &amp;lt;&amp;lt; &amp;quot;desired: &amp;quot; &amp;lt;&amp;lt; out &amp;lt;&amp;lt; endl;&#xA;&#xA;    return out;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The transform basically computes the rotation matrix. The math is based on the on this &lt;a href=&quot;https://robotics.stackexchange.com/questions/9691/generate-transformation-matrices-for-rotating-around-a-object&quot;&gt;post&lt;/a&gt; by @Ben, which is an answer to a similar problem i am having..&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Error with the rotation matrix was due to the polar coordinate being 0 =&amp;gt; sin(0) = 0.&lt;/p&gt;&#xA;&lt;p&gt;I made this plot displaying the determinant of the jacobian, while i compute the inverse kinematics for the large displacement. For each inverse kinematics iteration, I set the robot to the new q_i and use that as current and continue computing until i reach the end configuration.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/DBLWm.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/DBLWm.jpg&quot; alt=&quot;Determinant of the different jacobians&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;It seems that alot of them goes toward a singularity or in general a pretty low number..&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Again i think the singularities might be the culprit here..&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;determinant: 0.0424284&#xA;Q{13.0099, -46.6613, -18.9411, 2.38865, 5.39454, -4.53456}&#xA;determinant: -0.0150253&#xA;Q{47.1089, -0.790356, 6.89939, -2.725, -1.66168, 11.2271}&#xA;determinant: -0.0368926&#xA;Q{15.7475, 8.89658, 7.78122, -2.74134, -5.32446, 1.11023}&#xA;determinant: -0.0596228&#xA;Q{180.884, 66.3786, 17.5729, 9.21228, -14.9721, -12.9577}&#xA;determinant: -0.000910399&#xA;Q{5426.74, 5568.04, -524.078, 283.581, -316.499, -67.3459}&#xA;determinant: -0.0897656&#xA;Q{16.6649, -37.4239, -34.0747, -16.5337, -3.95636, -7.31064}&#xA;determinant: -0.00719097&#xA;Q{-1377.14, 167.281, -125.883, -10.4689, 179.78, 56.3877}&#xA;determinant: 0.0432689&#xA;Q{22.2983, -10.1491, -15.0894, -4.41318, -2.07675, -3.48763}&#xA;determinant: -0.0430843&#xA;Q{82.6984, -39.02, -24.5518, 13.6317, 4.17851, -14.0956}&#xA;determinant: -0.0137243&#xA;Q{425.189, -9.65443, 20.9752, 7.63067, 25.4944, -52.4964}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Everytime i compute a new Q I set the robot in that state, and perform inverse kinematics from that state.. Q is the joint angles for the 6 joints.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Interpolation is done by lineary dividing the path from start to end into a specified amount of of data points.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gnHbZ.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gnHbZ.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This plot shows  each tranformation matrices generated from the interpolation and with their the position part plotted. The red dots is the path (every 1000th position). The blue ball is the object in want to track, and green dots represents the sphere.. As I am only doing this for the first point on the sphere, it only hits one point on the sphere, which is the top point, which the plot also shows.&lt;/p&gt;&#xA;&lt;p&gt;Rotation doesn't show that much change, which also makes sense based difference between the current and desired rotations.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;My InvKin Implementation for LargeDisplacements:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;std::vector&amp;lt;Q&amp;gt; pathPlanning::invKin_largeDisplacement(std::vector&amp;lt;Transform3D&amp;lt;&amp;gt;&amp;gt; t_tool_base_desired_i)&#xA;{&#xA;&#xA;     Device::Ptr device_backup = this-&amp;gt;device;  //Read in device parameter&#xA;     WorkCell::Ptr workcell_backup = this-&amp;gt;workcell; //Read in workcell parameter&#xA;     State state_backup = this-&amp;gt;state;&#xA;     std::vector&amp;lt;Q&amp;gt; output;&#xA;     &#xA;     for(unsigned int i = 0; i&amp;lt;t_tool_base_desired_i.size();  ++i)&#xA;     {&#xA;         Transform3D&amp;lt;&amp;gt; T_tool_base_current_i = device_backup-&amp;gt;baseTframe(this-&amp;gt;toolFrame,state_backup); //Read in Current transformation matrix&#xA;&#xA;         Eigen::MatrixXd jq(device_backup-&amp;gt;baseJframe(this-&amp;gt;toolFrame,state_backup).e().cols(), this-&amp;gt;device.get()-&amp;gt;baseJframe(this-&amp;gt;toolFrame,state_backup).e().rows());&#xA;&#xA;         jq =  this-&amp;gt;device.get()-&amp;gt;baseJframe(this-&amp;gt;toolFrame,state_backup).e(); // Get the jacobian for current_configuration&#xA;&#xA;         //Least square solver - dq = [j(q)]T (j(q)[j(q)]T)⁻1 du  &amp;lt;=&amp;gt; dq = A*du&#xA;         Eigen::MatrixXd A (6,6);&#xA;        &#xA;         //A = jq.transpose()*(jq*jq.transpose()).inverse();&#xA;         A = (jq*jq.transpose()).inverse()*jq.transpose();&#xA;&#xA;         Vector3D&amp;lt;&amp;gt; dif_p = t_tool_base_desired_i[i].P()-T_tool_base_current_i.P();  //Difference in position&#xA;&#xA;         Eigen::Matrix3d dif = t_tool_base_desired_i[i].R().e()- T_tool_base_current_i.R().e(); //Differene in rotation&#xA;         Rotation3D&amp;lt;&amp;gt; dif_r(dif); //Making a rotation matrix the the difference of rotation&#xA;         RPY&amp;lt;&amp;gt; dif_rot(dif_r);    //RPY of the rotation matrix. &#xA;&#xA;         Eigen::VectorXd du(6); //Creating du&#xA;         du(0) = dif_p[0];&#xA;         du(1) = dif_p[1];&#xA;         du(2) = dif_p[2];&#xA;&#xA;         du(3) = dif_rot[0];&#xA;         du(4) = dif_rot[1];&#xA;         du(5) = dif_rot[2];&#xA;&#xA;         Eigen::VectorXd q(6);&#xA;         q = A*du; // computing dq&#xA;&#xA;         Q q_current;&#xA;         q_current = this-&amp;gt;device-&amp;gt;getQ(this-&amp;gt;state);&#xA;         Q dq(q); &#xA;         Q q_new = q_current+ dq; // computing the new Q angles&#xA;         output.push_back(q_new); store it in the output vector&#xA;         device_backup-&amp;gt;setQ(q_new,state_backup); //Set the robot to the calculated state. &#xA;     }&#xA;     return output;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I am pretty sure that my interpolation works, as the plot shows.  My inverse kinematics on the other hand not so sure..&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;@Chuck mentions in his answer that it would be a good idea to check the core functionality, which might shed some light on what could be going wrong.&lt;/p&gt;&#xA;&lt;p&gt;I tried it with an inv.kin function i know would work, which didn't return any result, which make me doubt whether my transformation function i create is accurate?&lt;/p&gt;&#xA;&lt;p&gt;The robot simulation is the one shown above..  The  &lt;code&gt;Transform&lt;/code&gt; function shown above, is the function which i use to compute my desired, and provide my inverse kinematics..  Is something incorrectly setup?&#xA;&lt;a href=&quot;https://i.stack.imgur.com/UOYcL.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/UOYcL.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;@Chuck came up with an different approach to my problem, which only has 3 DOF, being the position.  I choose change track, and peform a simple inverse kinematics given a distance dx,dy,dz.. Which for some reason isn't working quite good for me? even for small differences...&lt;/p&gt;&#xA;&lt;p&gt;Here is my code:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    std::vector&amp;lt;Q&amp;gt;pathPlanning::invKin(double dx, double dy , double dz)&#xA;{&#xA;&#xA;    kinematics::State state =  this-&amp;gt;state;&#xA;    Transform3D&amp;lt;&amp;gt; t_tool_base_current =  this-&amp;gt;device.get()-&amp;gt;baseTframe(this-&amp;gt;toolFrame,state);&#xA;&#xA;    cout &amp;lt;&amp;lt;&amp;quot;Current: &amp;quot;&amp;lt;&amp;lt; t_tool_base_current.P().e()&amp;lt;&amp;lt; endl;&#xA;&#xA;    Vector3D&amp;lt;&amp;gt; P_desired(0.000001+t_tool_base_current.P().e()[0],t_tool_base_current.P().e()[1],t_tool_base_current.P().e()[2]);&#xA;    cout &amp;lt;&amp;lt;&amp;quot;Desired: &amp;quot; &amp;lt;&amp;lt;P_desired &amp;lt;&amp;lt; endl;&#xA;&#xA;    Transform3D&amp;lt;&amp;gt; t_tool_base_desired(P_desired,t_tool_base_current.R());&#xA;    Eigen::MatrixXd jq(this-&amp;gt;device.get()-&amp;gt;baseJframe(this-&amp;gt;toolFrame,state).e().cols(), this-&amp;gt;device.get()-&amp;gt;baseJframe(this-&amp;gt;toolFrame,state).e().rows());&#xA;    jq =  this-&amp;gt;device.get()-&amp;gt;baseJframe(this-&amp;gt;toolFrame,state).e();&#xA;&#xA;    &#xA;    //Least square solver - dq = [j(q)]T (j(q)[j(q)]T)⁻1 du  &amp;lt;=&amp;gt; dq = A*du&#xA;    Eigen::MatrixXd A (6,6);&#xA;&#xA;    //A = jq.transpose()*(jq*jq.transpose()).inverse();&#xA;    A = (jq*jq.transpose()).inverse()*jq.transpose();&#xA;&#xA;    Vector3D&amp;lt;&amp;gt; dif_p = t_tool_base_desired.P()-t_tool_base_current.P();&#xA;    cout &amp;lt;&amp;lt;&amp;quot;difference: &amp;quot; &amp;lt;&amp;lt;dif_p &amp;lt;&amp;lt; endl;&#xA;&#xA;    Eigen::VectorXd du(6);&#xA;    du(0) = dif_p[0];&#xA;    du(1) = dif_p[1];&#xA;    du(2) = dif_p[2];&#xA;&#xA;    du(3) = 0;&#xA;    du(4) = 0;&#xA;    du(5) = 0;&#xA;&#xA;    Eigen::VectorXd q(6);&#xA;    q = A*du;&#xA;&#xA;    Q q_current;&#xA;    q_current = this-&amp;gt;device-&amp;gt;getQ(this-&amp;gt;state);&#xA;    Q dq(q);&#xA;    Q q_new = q_current+ dq;&#xA;    std::vector&amp;lt;rw::math::Q&amp;gt; output;&#xA;    if(!collision(q_new))&#xA;    {&#xA;        output.push_back(q_new);&#xA;    }&#xA;    else&#xA;    {&#xA;        cout &amp;lt;&amp;lt; endl;      &#xA;        cout &amp;lt;&amp;lt; q_new &amp;lt;&amp;lt; endl;&#xA;    }&#xA;&#xA;    return output;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;which outputs this&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Current: -0.000799058&#xA;-0.282&#xA;0.99963&#xA;Desired: Vector3D(-0.000789058, -0.282, 0.99963)&#xA;difference: Vector3D(1e-05, 0, 0)&#xA;setQ{1.559142, 110474925659325248.000000, -1834.776226, 55426871347211368.000000, 0.068436, 88275880260745.328125}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;code&gt;setQ&lt;/code&gt; is the state which moves the robot to the desires state..&#xA;Either is something wrong with my implementation, or it is a singularity..&lt;/p&gt;&#xA;&lt;p&gt;Especially because i am not moving it that much (0.00001)!!!&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Updates&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I think I have solved the mystery.. It must be the sphere function which creates points that outside the reach of the robot.!!&lt;/p&gt;&#xA;" OwnerUserId="9620" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2016-05-06T07:39:49.097" Title="Is this a singularity or incorrect implementation of inverse kinematics?" Tags="&lt;robotic-arm&gt;&lt;inverse-kinematics&gt;" AnswerCount="1" CommentCount="10" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="9773" PostTypeId="2" ParentId="9770" CreationDate="2016-05-04T21:13:37.913" Score="3" Body="&lt;p&gt;So I'll point out what &lt;em&gt;might&lt;/em&gt; be some problems, at-a-glance, but wow this is one of the longest questions I've seen here. I'm pretty swamped with real-life stuff at the moment, so I'll just point these few issues out, you try them, &lt;strong&gt;update the question with the results&lt;/strong&gt; (please don't respond with new information in comments on this answer), and then if it's still broke I'll take another pass. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For starters, some of your code uses variables that I didn't see mentioned anywhere, such as (&lt;strong&gt;confusingly&lt;/strong&gt;) &lt;code&gt;tk&lt;/code&gt; and &lt;code&gt;kt&lt;/code&gt;. Furthermore, there are some &lt;a href=&quot;https://en.wikipedia.org/wiki/Magic_number_(programming)#Unnamed_numerical_constants&quot; rel=&quot;nofollow&quot;&gt;magic numbers&lt;/a&gt; that I can't understand, such as the assignments for &lt;code&gt;tk&lt;/code&gt; and &lt;code&gt;kt&lt;/code&gt; - they're both set to &lt;code&gt;2&lt;/code&gt; despite the comment beside &lt;code&gt;tk=2;&lt;/code&gt;, which says, &lt;code&gt;% Locks in the chosen sign&lt;/code&gt;. If you manually set &lt;code&gt;tk=2;&lt;/code&gt;, then it's not locking in anything chosen programmatically; it's just a hard-coded value that becomes difficult to change. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, I would guess that your real problem is probably in your use of &lt;code&gt;atan&lt;/code&gt;. In fact, this function has bitten me &lt;strong&gt;so many times&lt;/strong&gt; that I will never use it again. Use &lt;code&gt;atan2&lt;/code&gt; everywhere you ever would consider using &lt;code&gt;atan&lt;/code&gt;. The problem with &lt;code&gt;atan&lt;/code&gt; is that if you have (-y)/x or y/(-x), both of those expressions evaluate to -(y/x), and you lose quadrant information, giving you incorrect angles. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;atan2&lt;/code&gt; fixes this by accepting two arguments, &lt;code&gt;y&lt;/code&gt; and &lt;code&gt;x&lt;/code&gt;, as opposed to &lt;code&gt;y/x&lt;/code&gt;, and it treats the signs correctly. In your &lt;code&gt;ApplyRule10&lt;/code&gt; function, under the line, &lt;code&gt;% AUXILIARY ANGLES, I AM NOT SURE IF THIS IS THE BEST WAY TO CALCULATE THEM:&lt;/code&gt;, you have:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;aux_angle_1 = atan(vr_t(2)/vr_t(1)) - atan(aux_1(2)/aux_1(1)) ; &#xA;aux_angle_2 = atan(vr_t(2)/vr_t(1)) - atan(aux_2(2)/aux_2(1)) ; &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;My suggestion would be to change these atan functions to atan2 and see if that fixes anything. Again, update your question with the results and we'll go from there!&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-05-04T21:13:37.913" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9774" PostTypeId="2" ParentId="9728" CreationDate="2016-05-04T23:32:29.243" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;It can't pass the 20 block if the robot enters it from a 15 or 20 block (so basically it gets stuck if it's coming from an angle and hits a 90 degree turn).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Somehow coming from an angled line makes it more likely that your robot moves orthogonal to the 90°-ish turn, so that it gets stuck in the back-and-forth loop. Maybe if it &lt;strong&gt;moved very slowly backwards&lt;/strong&gt; it could detect the moment when only one sensor goes on, which would lead to a turn. But it's a competition after all, so let's not move backwards, especially not very slowly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not sure if the image of the different sensor values is accurate in terms of scale. It looks like the line is not much thicker than the two sensors are apart. Now imagine the edge case that both distances were the same: the sensors are as far apart as the line is thick. In this case, the robot can only really move in the exact direction of the line. This is very bad for a 90°-ish turn for the reason mentioned above. The ratio between sensor distance and line thickness seems to play a role in how the robot behaves. You cannot change anything about the thickness of the line or the distance of the sensors, but I think it's important to think about what impact those values have or at least could have.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you can change though is what you consider to be the line. You can follow a line by following its edge, too. The code could look like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;loop forever:&#xA;    if (on the right of the line):&#xA;        turn_left()&#xA;    if (on the left of the line):&#xA;        go_forward()&#xA;    if (on the line):&#xA;        turn_left()&#xA;    if (not on the line):&#xA;        turn_right()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;As the edge is only a line, the behaviour depends more or less only on the distance of the sensors, not the ratio between the distance of the sensors and the thickness of the line. I'd give it a go and see how the behaviour changes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A ratio that you can change more continuously is that of the velocities. How many degrees is &lt;code&gt;turn_left()&lt;/code&gt; and how many millimetres is &lt;code&gt;go_forward()&lt;/code&gt;?&#xA;Playing around with those values will lead to different, possibly more preferable behaviour of the robot.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;theory interlude&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a nutshell, you want to control a system with two inputs: angular and radial velocity. Setting either one will influence the other. In your case, the radial velocity control loop freaked out and became unstable: back-and-forth motion forever. The important thing is that the system should have reacted with a large increase in angular velocity (to do the hard 90°-ish turn), but instead the radial velocity went mad.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a sign that the interaction between the two is not well controlled and requires further investigation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Changing the ratio between both velocities essentially modifies the gains of the controllers. Lowering both velocities means more sensor readings per travelled distance and thus a higher sampling rate, which in general leads to more stable systems.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;tl,dr;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Things to try&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Change both angular and radial velocities, but keep their ratio the same and see if that changes anything&lt;/li&gt;&#xA;&lt;li&gt;Change the ratio between the two and see if that changes the behaviour of the robot. Especially on different types of tiles. What ratio works best on straight tiles, what works better on curvy tiles. Is there some setting that works for both?&lt;/li&gt;&#xA;&lt;li&gt;Try both 1. and 2. for the on-the-line approach and the on-the-edge-of-the-line approach and see if you get to different results.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="9860" LastActivityDate="2016-05-04T23:32:29.243" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="9776" PostTypeId="1" CreationDate="2016-05-05T08:14:32.810" Score="2" ViewCount="168" Body="&lt;p&gt;I am at the moment trying to implement an inverse kinematics function which function is to take a desired transformation matrix, and the current transformation matrix, and compute the Q states that is needed to move my robot arm from current state to end state. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have already written the code, but since my simulation isn't showing the right path, or what I would expect it to be, this makes me unsure as to whether my implementation is correct.  Could someone comment on my implementation and maybe spot an error?&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;std::vector&amp;lt;Q&amp;gt; pathPlanning::invKin_largeDisplacement(std::vector&amp;lt;Transform3D&amp;lt;&amp;gt;&amp;gt; t_tool_base_desired_i)&#xA;{&#xA;&#xA;    for(unsigned int i = 0; i&amp;lt;t_tool_base_desired_i.size();  ++i)&#xA;    {&#xA;        Transform3D&amp;lt;&amp;gt; T_tool_base_current_i = device_backup-&amp;gt;baseTframe(this-&amp;gt;toolFrame,state_backup);&#xA;        Eigen::MatrixXd jq(device_backup-&amp;gt;baseJframe(this-&amp;gt;toolFrame,state_backup).e().cols(), this-&amp;gt;device.get()-&amp;gt;baseJframe(this-&amp;gt;toolFrame,state_backup).e().rows());&#xA;        jq =  this-&amp;gt;device.get()-&amp;gt;baseJframe(this-&amp;gt;toolFrame,state_backup).e();&#xA;&#xA;&#xA;        //Least square solver - dq = [j(q)]T (j(q)[j(q)]T)⁻1 du  &amp;lt;=&amp;gt; dq = A*du&#xA;        Eigen::MatrixXd A (6,6);&#xA;        //A = jq.transpose()*(jq*jq.transpose()).inverse();&#xA;        A = (jq*jq.transpose()).inverse()*jq.transpose();&#xA;&#xA;        Vector3D&amp;lt;&amp;gt; dif_p = t_tool_base_desired_i[i].P()-T_tool_base_current_i.P(); // Difference in position between current_i and desired_i&#xA;&#xA;        Eigen::Matrix3d dif = t_tool_base_desired_i[i].R().e()- T_tool_base_current_i.R().e(); // Difference in rotation between current_i and desired_i&#xA;&#xA;        Rotation3D&amp;lt;&amp;gt; dif_r(dif); //Construct rotation matrix&#xA;        RPY&amp;lt;&amp;gt; dif_rot(dif_r); // compute RPY from rotation matrix&#xA;&#xA;        //Jq*dq = du&#xA;        Eigen::VectorXd du(6);&#xA;        du(0) = dif_p[0];&#xA;        du(1) = dif_p[1];&#xA;        du(2) = dif_p[2];&#xA;&#xA;        du(3) = dif_rot[0];&#xA;        du(4) = dif_rot[1];&#xA;        du(5) = dif_rot[2];&#xA;&#xA;        Eigen::VectorXd q(6);&#xA;        q = A*du; // Compute change dq&#xA;&#xA;        Q q_current;&#xA;        q_current = this-&amp;gt;device-&amp;gt;getQ(this-&amp;gt;state); // Get Current Q&#xA;        Q dq(q);&#xA;        Q q_new = q_current+ dq; // compute new Q by adding dq&#xA;        output.push_back(q_new); // Pushback to output vector&#xA;        device_backup-&amp;gt;setQ(q_new,state_backup); //set current state to newly calculated Q.&#xA;&#xA;    }&#xA;    return output;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Example of output: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Q{-1.994910, -94.421754, -123.448429, 15.218864, 6.602184, -13.742988}&#xA;Q{2627.867315, -2048.863588, -51.340574, 287.654959, 270.187026, 258.581800}&#xA;Q{12941.812459, -536.870516, -294.362593, -2145.963577, -31133.660814, -4742.343433}&#xA;Q{32.044799, -14.220020, -14.312226, -12.444921, 12.269179, -24.393637}&#xA;Q{125.537278, 28.626924, -55.646716, -20.945348, 17.536762, -2.656717}&#xA;Q{9.514525, -107.455064, -17.009190, -15.245588, -0.960273, -2.010570}&#xA;Q{8.255582, -3.010934, -4.882207, -1.369533, 0.848644, 1.175172}&#xA;Q{208.655993, -28.443465, -64.413952, -3.129896, 13.063806, -6.042187}&#xA;Q{-73.706483, -20.381540, -5.306434, -1.204419, -4.035149, 21.806934}&#xA;Q{10.003481, 10.867394, 13.256192, -6.491445, -1.711469, 2.896646}&#xA;Q{24.890626, -72.265307, -94.886507, 12.327304, -4.425786, 4.188531}&#xA;Q{7.111258, 31.500732, -0.111033, -20.434697, 5.302118, 1.781690}&#xA;Q{477.993581, 659.221820, 19.819916, -88.627757, 65.850191, -77.267367}&#xA;Q{-30.672145, -53.496243, -18.170871, 83.648574, 48.311796, -28.015005}&#xA;Q{-36.677982, -15.908633, 17.751008, 0.995766, -0.500259, 9.409435}&#xA;Q{114246.358249, -10664.813432, -75.904830, 462.907904, 7992.514723, -18484.319327}&#xA;Q{83.827086, -75.899321, -38.576446, 37.266068, 47.843725, 39.096061}&#xA;Q{-119.682661, -774.773093, -251.969174, 23.212110, -42.662580, 53.247454}&#xA;Q{98.608881, -28.013383, 132.896921, 17.121488, 36.916894, -14.627180}&#xA;Q{-11519.051453, 5761.564318, -364.916044, -1188.567128, -2582.813750, -462.784007}&#xA;Q{54802.605226, 40971.776641, 10204.739981, -654.963987, -244.277958, -8618.970216}&#xA;Q{-21.334047, -14.314134, 17.714174, 2.463993, 0.963385, 5.304530}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="13491" LastEditorUserId="9176" LastEditDate="2016-05-08T14:08:32.837" LastActivityDate="2016-05-08T14:08:32.837" Title="How do I compute the inverse kinematics given a desired transformation matrix?" Tags="&lt;robotic-arm&gt;&lt;inverse-kinematics&gt;&lt;c++&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="9777" PostTypeId="2" ParentId="9772" CreationDate="2016-05-05T13:26:47.993" Score="2" Body="&lt;p&gt;You still haven't described:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;How you are doing interpolation, and&lt;/li&gt;&#xA;&lt;li&gt;What the Q values are. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Are the Q values angles? Are they distances? What do they mean? Can you post a picture of your arm and label the axes of motion and describe how the drawing relates to the Q values?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I post this as an answer because I hope I have a lead on your problem. You state, &quot;The idea is that i want my arm be on this sphere, point inward to the center,&quot; but, while your &lt;code&gt;pathPlanning::sphere&lt;/code&gt; function sets a radius of 5, neither your start nor end positions are a distance of 5 from the origin. They are also greater than 10 from each other (the end radius from origin is 117!!), meaning that this is not a sphere at the origin but it is &lt;em&gt;also&lt;/em&gt; not a sphere anywhere else in space. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My suggestion would be to fix the start and end coordinates at a value such that $\sqrt{x^2 + y^2 + z^2} = r_{\mbox{sphere}}$ and see if that makes anything better. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Current it appears that you're starting off of the sphere, and you're trying to get to somewhere else (really far) off the sphere, but you're trying to do path planning to keep the end effector on the sphere. This means that you're trying to generate an impossible path, which could explain the results you're getting. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;:EDIT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was going to add this as a comment, but there's enough content that I figured I'd alter the answer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you start at a point on a sphere, and you end at a point on a sphere, and you &lt;em&gt;linearly increment&lt;/em&gt; the start path to the end path, then you will traverse a trajectory of a &lt;em&gt;line through the sphere&lt;/em&gt;. You need to be &quot;smarter&quot; about interpolating by choosing points that all fall on the surface of the sphere.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The way I would attempt to do this is to find the angle between the two vectors that describe the start and end points (via a dot or cross product), then interpolate the &lt;em&gt;angle&lt;/em&gt;. Find the plane that contains the two vectors, apply the interpolated angle and constrain the interpolated points to that plane. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's a little involved, but not fantastically complicated. &lt;strong&gt;That said&lt;/strong&gt;, you need to make sure that your core functionality is working correctly to begin with. To that end, I would probably hand-pick some points first, to ensure that your problem isn't with interpolating, and try your inverse kinematics with those. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, once you've got the inverse kinematics working correctly, then write the interpolate function. &lt;em&gt;If you try to solve all of your problems at the same time it becomes impossible to tell what is working and what isn't.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2016-05-05T13:50:00.733" LastActivityDate="2016-05-05T13:50:00.733" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9779" PostTypeId="2" ParentId="9728" CreationDate="2016-05-05T15:15:36.453" Score="1" Body="&lt;p&gt;I have a similar idea like @Bending Unit 22, which is not to follow the line but its edge instead. So you detect the line only with one sensor (let's say only with the left one (&lt;em&gt;blue dot&lt;/em&gt;)).&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;If the you both sensor indicates line then your robot should turn right until the right sensor (&lt;em&gt;green dot&lt;/em&gt;) indicates white surface. This is the event circled with green in the image below.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If both sensor are lost sight of the line, then the robot should turn left until the left sensor is back on the track. This is the event circled with blue in the image below.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Basically, there could be &lt;strong&gt;two states of line-following&lt;/strong&gt;:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;Default state&lt;/strong&gt; when the robot has one sensor on the line while the other is off the line.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Turning state&lt;/strong&gt; if one of the events occur. The robot could stop and turn until the the &lt;strong&gt;left sensor gets back&lt;/strong&gt; on line or till &lt;strong&gt;the right leaves&lt;/strong&gt; the line. Since we can assume that the direction is known and the robot is not moving, we could turn on maximum speed (or at least you can try and see how it works). You can test it while the robot is in motion of course.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/bZwM0.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/bZwM0.png&quot; alt=&quot;![enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Previously, when your robot lost the line there was no information about the direction, so it could only go backwards hoping to find the line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is only a theory but I think it's worth a try or just to move forward your project.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You have mentioned that your cannot use more sensors but are you allowed to modify on the current hardware? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have checked that the sensors have digital output which means &lt;strong&gt;[line] - [no line]&lt;/strong&gt;, not much information. But if you could connect the IR-sensors output voltage to some analog pins, this way you could obtain higher resolution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;To explain further this part&lt;/strong&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A basic line detecting sensor is a IR photo-diode and photo-transistor pair. Like the one on your robot only it has a little bit more on the module, a newer version from Makeblock's page:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Xpqif.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Xpqif.png&quot; alt=&quot;![enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Module on left, actual sensor on the right) Your robot has a previous version, which probably uses an other sensor. This one in the image is a &lt;a href=&quot;https://www.vishay.com/docs/83760/tcrt5000.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;TCRT500&lt;/a&gt; from Vishay.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If we have a look at the schematic level:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/WBqFK.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/WBqFK.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The output is at the red circle. Now, if there is sufficient reflected IR light the transistor will conduct and the output will be pulled down to GND. If there is not enough reflected IR light, the transistor won't conduct and the output is pulled up through the resistor to supply voltage. But it is not working like a switch, so the out can be anything between 0 - V_Supply. For a given spectral distribution (IR in our case), the photo-current is linearly proportional to the illuminance . So as I said the output voltage can vary between 0 V and VCC (5 V in common).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your sensor module works the same way, only it has a &lt;strong&gt;&lt;a href=&quot;https://nishantnath.files.wordpress.com/2012/12/infrared20ir20sensor.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;comparator&lt;/a&gt;&lt;/strong&gt; on it which makes digital output of the analog signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the IR LED illuminates the edge of the line, maybe half of the light is reflected or more, so the transistor can conduct slightly. This means that the output won't be pulled down near 0 V, it will be, let's say around 2 V. But not 0 V (which is the complete white surface), and this is the important because this means that it partly detects something (the line).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now back to the comparator, it compares the output voltage of the photo-transistor to a reference voltage. It checks if the signal is above or below the reference and sets its output to LOW or HIGH accordingly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If this the reference is 2.5 V then your module will say that it detects line when the output voltage is above 2.5V, so that information with the 2 V signal will be considered as a white surface where as we saw the edge, thus we lose resolution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, if you could read this whole analog range with an ADC your resolution would be higher and maybe a more delicate controlling algorithm could be achieved.&lt;/p&gt;&#xA;" OwnerUserId="10596" LastEditorUserId="10596" LastEditDate="2016-05-05T19:28:46.217" LastActivityDate="2016-05-05T19:28:46.217" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="9782" PostTypeId="2" ParentId="9776" CreationDate="2016-05-05T21:02:58.373" Score="1" Body="&lt;p&gt;Shouldn't A be   &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;jq.transpose() * (jq*jq.transpose()).inverse() &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;instead of &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;(jq*jq.transpose()).inverse()*jq.transpose()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;?&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2016-05-05T21:02:58.373" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9783" PostTypeId="1" CreationDate="2016-05-06T07:42:27.873" Score="2" ViewCount="1892" Body="&lt;p&gt;I need to caculate the pose of a camera using an image of an artificial landmkark. For this porpouse I am trying to use the Perspective n Point approach so I can calculate it using the intrinsic camera matrix, the world coordinates of the landmark (I am using 4 points) and its projection in the image.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are some algorithms to solve this (PnP, EPnP, RPnP, etc) and I am trying to use the RPnP. I have found an implementation of this here:&#xA;&lt;a href=&quot;http://xuchi.weebly.com/rpnp.html&quot; rel=&quot;nofollow&quot;&gt;http://xuchi.weebly.com/rpnp.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I used this code but I am having some problems because I can't obtain the correct pose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am using the P.Corke's Robotics Toolbox for MATLAB to create a CentraCamera with a known pose and calculating the projection of the landmark in this camera, but the rotation and translation that the RPnP returns me is not the same as I defined before.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyone has used this RPnP algorithm to solve that kind of problems?&lt;/p&gt;&#xA;" OwnerUserId="11050" LastActivityDate="2016-07-05T18:08:45.483" Title="Perspective n Point - RPnP algorithm" Tags="&lt;computer-vision&gt;&lt;cameras&gt;&lt;3d-reconstruction&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9786" PostTypeId="1" CreationDate="2016-05-06T14:26:42.577" Score="4" ViewCount="39683" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;Question:&lt;/strong&gt; A PID controller has three parameters Kp, Ki and Kd which could affect the output performance. A differential driving robot is controlled by a PID controller. The heading information is sensed by a compass sensor. The moving forward speed is kept constant. The PID controller is able to control the heading information to follow a given direction. Explain the outcome on the differential driving robot performance when the three parameters are increased individually. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This is a question that has come up in a past paper but most likely won't show up this year but it still worries me. It's the only question that has me thinking for quite some time. &#xA;I'd love an answer in simple terms. Most stuff i've read on the internet don't make much sense to me as it goes heavy into the detail and off topic for my case.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;My take on this:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that the &lt;strong&gt;proportional&lt;/strong&gt; term, Kp, is entirely based on the error and that, let's say, double the error would mean doubling Kp (applying proportional force). This therefore implies that increasing Kp is a result of the robot heading in the wrong direction so Kp is increased to ensure the robot goes on the right direction or at least tries to reduce the error as time passes so an increase in Kp would affect the robot in such a way to adjust the heading of the robot so it stays on the right path.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;strong&gt;derivative&lt;/strong&gt; term, Kd, is based on the rate of change of the error so an increase in Kd implies that the rate of change of error has increased over time so double the error would result in double the force. An increase by double the change in the robot's heading would take place if the robot's heading is doubled in error from the previous feedback result. Kd causes the robot to react faster as the error increases. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;An increase in the &lt;strong&gt;integral&lt;/strong&gt; term, Ki, means that the error is increased over time. The integral accounts for the sum of error over time. Even a small increase in the error would increase the integral so the robot would have to head in the right direction for an equal amount of time for the integral to balance to zero. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;I would appreciate a much better answer and it would be great to be confident for a similar upcoming question in the finals.&lt;/em&gt; &lt;/p&gt;&#xA;" OwnerUserId="13627" LastEditorUserId="9860" LastEditDate="2016-05-09T17:30:42.367" LastActivityDate="2016-05-14T01:00:01.940" Title="How do the PID parameters (Kp, Ki, and Kd) affect the heading of a differential driving robot when they are increased individually?" Tags="&lt;pid&gt;&lt;wheeled-robot&gt;&lt;differential-drive&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="9787" PostTypeId="2" ParentId="9786" CreationDate="2016-05-06T15:46:30.680" Score="11" Body="&lt;p&gt;Proportional term: this controls how quickly to turn the steering when the heading is not at the set value.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A low P will lead to sluggish steering, reacting only slowly to set&#xA;heading changes. It may never reach the commanded value.&lt;/li&gt;&#xA;&lt;li&gt;A higher P will give a snappier response, ideally with the steering&#xA;turning rapidly and smoothly to follow commanded heading changes.&lt;/li&gt;&#xA;&lt;li&gt;Too high a P is an important case. If off course by a small amount to the left, a large&#xA;right turn command will be issued.  The turn rate will still be high when it's back on course, so it will overshoot. Too much P will give&#xA;steering that weaves alternately left and right, overshooting the&#xA;required heading; though it may eventually settle if the commanded course remains straight.&lt;/li&gt;&#xA;&lt;li&gt;An even higher P will lead to exaggerated oscillations and possibly&#xA;shaking/vibration depending on the dynamics of the system, how heavy&#xA;it is, how flexible the tyres and carpet are...&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Derivative term: this can be used to limit the speed of the steering response.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Assuming you already have a P term coarsely set in a sensible range,&#xA;this will serve to &lt;strong&gt;reduce the speed of&lt;/strong&gt; the steering response when the error is changing rapidly.&lt;/li&gt;&#xA;&lt;li&gt;If your P term is set high and overshoot or oscillation is occurring, adding Derivative action will limit the amount of hard turning done for large steering commands.&lt;/li&gt;&#xA;&lt;li&gt;In other words increasing the D term will reduce the maximum &quot;sway&quot;&#xA;performed by the steering. Ideally this will serve to reduce&#xA;overshoot so if the P controller is tuned too high, the right amount&#xA;of Derivative action should stop oscillation.&lt;/li&gt;&#xA;&lt;li&gt;Too much Derivative action will probably become sluggish in steering&#xA;again.&lt;/li&gt;&#xA;&lt;li&gt;Extreme example: I tried a very high Derivative value in a motor position controller. When I grabbed the gear and tried to turn it by hand, it resisted my movement. It was like trying to stir very thick treacle. Rotating it by hand &lt;strong&gt;very slowly&lt;/strong&gt; was easy, but rotating fast caused a very high resistance, like a damper.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Integral term: this adds more steering action if the error persists for too long.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If the existing P+D control terms lead to an overall response that&#xA;settles short of the required heading, an I term will slowly add a steering command to edge closer (we hope).&lt;/li&gt;&#xA;&lt;li&gt;Too much Integral action can again cause overshoot/weaving, as the added Integral action turns in the correct way to get onto the commanded heading, but continues to steer because the large I term effectively has a long memory of steering in that direction... it will take a while for the integrated error to reduce and straighten up again.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The common advice often given for most systems is to increase the Proportional setting, until you get good performance. If you have to increase it so far that overshoot occurs (weaving, in the steering example) then start to add a little Derivative to stop the overshoot. Then add more P+D to get better performance. If you notice a state where it steers towards the centre but slows before getting there, start to add some I... but not so much that weaving begins again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And bear in mind with the vehicle case, getting it all nicely tuned then putting some weight on the back might affect the system dynamics and require more retuning...&lt;/p&gt;&#xA;" OwnerUserId="9578" LastEditorUserId="9578" LastEditDate="2016-05-09T13:35:09.113" LastActivityDate="2016-05-09T13:35:09.113" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9788" PostTypeId="2" ParentId="9783" CreationDate="2016-05-06T17:19:53.557" Score="2" Body="&lt;p&gt;Since you only have 4 points, you should use the &lt;a href=&quot;http://www.mmrc.iss.ac.cn/~xgao/paper/ieee.pdf&quot; rel=&quot;nofollow&quot;&gt;P3P algorithm&lt;/a&gt;. 3 points give you up to 4 solutions, and you need a fourth point to decide which one is correct. So 4 is the minimum number of points you need solve for the pose. Unfortunately, the P3P algorithm does not generalize to more points, which is why all those other algorithms you mentioned were invented.&lt;/p&gt;&#xA;" OwnerUserId="1115" LastActivityDate="2016-05-06T17:19:53.557" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9789" PostTypeId="2" ParentId="2559" CreationDate="2016-05-06T20:38:37.440" Score="0" Body="&lt;p&gt;Yeeeees!!!&#xA;They r very dangerous, I was building a quadcopter, when I finished I was calibrating the esc, during the process, you have to leave the transmitter throttle on max and press few buttons. My quad malfunctioned then went full throttle then attacked my wrist. It was millimetres away from my nerves and tendon. I am only 14 years old. For this accident, I went into surgery and I had 13 stitches!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To conclude, Propellors are extremely dangerous. THEY CAN KILL!!! Never misuse a drone.&lt;/p&gt;&#xA;" OwnerUserId="11688" LastActivityDate="2016-05-06T20:38:37.440" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9790" PostTypeId="5" CreationDate="2016-05-07T08:52:27.897" Score="0" Body="&lt;p&gt;The robot will go in straight line if both of the robot's wheels are driven with the same speed and into the same direction. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The robot will rotate around the central point of the axis if the wheels are driven with the same speed but into the opposing direction.  &lt;/p&gt;&#xA;" OwnerUserId="10596" LastEditorUserId="10596" LastEditDate="2016-05-09T10:43:38.993" LastActivityDate="2016-05-09T10:43:38.993" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9791" PostTypeId="4" CreationDate="2016-05-07T08:52:27.897" Score="0" Body="Differential drive is a commonly used drive system, which consists of two independently controlled wheels. " OwnerUserId="10596" LastEditorUserId="10596" LastEditDate="2016-05-09T10:43:49.230" LastActivityDate="2016-05-09T10:43:49.230" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9792" PostTypeId="5" CreationDate="2016-05-07T08:59:13.403" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2016-05-07T08:59:13.403" LastActivityDate="2016-05-07T08:59:13.403" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9793" PostTypeId="4" CreationDate="2016-05-07T08:59:13.403" Score="0" Body="Using different not wired technologies as a communicational interface on a robot.&#xD;&#xA;Most commonly: WiFi, Bluetooth or other RF interface, also there are solutions using IR-light or even ultrasound. " OwnerUserId="10596" LastEditorUserId="10596" LastEditDate="2016-05-09T10:44:20.667" LastActivityDate="2016-05-09T10:44:20.667" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9794" PostTypeId="5" CreationDate="2016-05-07T09:22:02.720" Score="0" Body="&lt;p&gt;Many other Linux distributions and operating systems are also supported on BeagleBone including:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Arago Linux distribution: available and supported by TI as part of the &lt;a href=&quot;http://www.ti.com/tool/linuxezsdk-sitara&quot; rel=&quot;nofollow&quot;&gt;Linux EZ SDK for Sitara ARM Processors&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Android: available and supported by TI as part of the &lt;a href=&quot;http://www.ti.com/tool/androidsdk-sitara&quot; rel=&quot;nofollow&quot;&gt;Android Development Kit for Sitara Processors&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Windows Embedded Compact 7: available and supported by &lt;a href=&quot;http://www.ti.com/devnet/docs/catalog/companyfolder.tsp?actionPerformed=companyFolder&amp;amp;companyId=2601&quot; rel=&quot;nofollow&quot;&gt;Adeneo Embedded as part of the WEC7 BSP for BeagleBone&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Main features:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Board size&lt;/strong&gt;:  3.4&quot; x 2.1&quot;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;DDR memory&lt;/strong&gt;:  256 MB&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Development environment&lt;/strong&gt;:     Cloud9 IDE on Node.JS with Bonescript library&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Ethernet&lt;/strong&gt;:    On-chip 10/100 Ethernet&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;JTAG&lt;/strong&gt;:    On-board USB-to-serial/JTAG&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Memory&lt;/strong&gt;:  microSD slot &amp;amp; 4-GB microSD card w/ Angstrom Linux Distribution&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Power Options&lt;/strong&gt;:   Via USB or 5V DC input&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Processor&lt;/strong&gt;:   720-MHz AM3358 Sitara ARM Cortex-A8&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;USB&lt;/strong&gt;:     1-port USB 2.0&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Source and more information at: &lt;a href=&quot;http://www.ti.com/tool/beaglebn#1&quot; rel=&quot;nofollow&quot;&gt;BeagleBone Development Board&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="10596" LastEditorUserId="10596" LastEditDate="2016-05-09T10:44:01.870" LastActivityDate="2016-05-09T10:44:01.870" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9795" PostTypeId="4" CreationDate="2016-05-07T09:22:02.720" Score="0" Body="BeagleBone is a high-performance, low-power single board computer family, developed by Texas Instruments.  It has an ARM® Cortex™-A8 processors on board and shipped with Ångström Linux distribution. Commonly robotics, motor drivers applications." OwnerUserId="10596" LastEditorUserId="10596" LastEditDate="2016-05-09T10:44:30.307" LastActivityDate="2016-05-09T10:44:30.307" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9796" PostTypeId="2" ParentId="9640" CreationDate="2016-05-07T15:04:19.753" Score="1" Body="&lt;p&gt;We did take the springs out. It appears to make it steadier ride on a hard surface when accelerating or turning. &lt;/p&gt;&#xA;" OwnerUserId="13454" LastActivityDate="2016-05-07T15:04:19.753" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9797" PostTypeId="1" CreationDate="2016-05-07T15:08:07.990" Score="3" ViewCount="131" Body="&lt;p&gt;What is the wheel base distance that should be used for the create2 to calculate angle? I have seen 230.8mm in code samples but the manual seems to indicate 235.0 mm.&lt;/p&gt;&#xA;" OwnerUserId="13454" LastActivityDate="2016-05-08T01:30:10.740" Title="What is the wheel base distance of the create2?" Tags="&lt;irobot-create&gt;&lt;roomba&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9798" PostTypeId="1" CreationDate="2016-05-07T18:39:50.250" Score="0" ViewCount="668" Body="&lt;p&gt;I am working on a quadcopter project based on Arduino board, my system is powered by a 4S LiPo battery (14.8V) but the motors behave differently as the battery voltage drops, when discharging. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any way that I can make the motors behave the same until a minimum value of, say, 5 volts?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My current system works fine at the range from 14.8 to 10 volts, but below that I can't even hover.&lt;/p&gt;&#xA;" OwnerUserId="13633" LastEditorUserId="9176" LastEditDate="2016-05-08T14:08:19.523" LastActivityDate="2016-05-08T14:08:19.523" Title="How to compensate the brushless DC motor for voltage drop?" Tags="&lt;quadcopter&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9799" PostTypeId="2" ParentId="9798" CreationDate="2016-05-07T20:27:05.770" Score="4" Body="&lt;p&gt;STOP USING YOUR BATTERY IMMEDIATELY!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First of all you shouldn't let the voltage of a lipo battery drop below 3V per cell which in your case comes to 12V. Lipo Batteries are extremely dangerous and the way in which you are over-discharging it is one of the ways you definitely should NOT handle a lipo battery.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please read the instructions given here completely before you start using your battery again - &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.dronethusiast.com/ultimate-drone-battery-care/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.dronethusiast.com/ultimate-drone-battery-care/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't want to scare you, but you should understand the various high-risk situations involved in using a lipo battery as part of a quadcopter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second, check for individual cell voltage of your lipo battery to make sure none of them are over-discharged.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/w5Vt2.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/w5Vt2.jpg&quot; alt=&quot;This is the internal wiring of the lipo battery&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, if their voltage is below 3V, be very careful as you might find links online to articles that claim they can help you 'restore' the lipo battery. &#xA;An average lipo can take upto 500 recharge cycles and if you've been consistently over-discharging them their capacity will decrease; ie, recharge faster but drain faster. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If this is your first lipo battery, I suggest you get another one and handle it with care from start, or if your current battery is not damaged and all the cells attain nominal voltage, you can continue using it, &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But &lt;strong&gt;first get a voltage indicator&lt;/strong&gt; that visually displays the voltage reading on an 7-segment led display.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Take care... No seriously...Take care of the battery.&lt;/p&gt;&#xA;" OwnerUserId="13574" LastActivityDate="2016-05-07T20:27:05.770" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9800" PostTypeId="2" ParentId="9797" CreationDate="2016-05-08T01:30:10.740" Score="3" Body="&lt;p&gt;Use the values from the &lt;a href=&quot;http://www.irobotweb.com/~/media/MainSite/PDFs/About/STEM/Create/iRobot_Roomba_600_Open_Interface_Spec.pdf?la=en&quot; rel=&quot;nofollow&quot;&gt;OI Spec&lt;/a&gt;.  These are pulled from the CAD and are accurate up to manufacturing tolerances.  I am guessing the values that you see in code samples are left over from the old Create.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2016-05-08T01:30:10.740" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9801" PostTypeId="1" AcceptedAnswerId="9806" CreationDate="2016-05-08T04:26:07.590" Score="2" ViewCount="87" Body="&lt;p&gt;Lets say that I needed to send sensor readings in increments of 100 bytes from a micro controller to a laptop with sub 2 ms latencies in real time (the data needs to be processed and acted upon immediately (to control a robot)). What interfaces would one use? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;FTDI usb-serial converters aren't an option because they introduce 5-10 ms latencies both ways. PCI cards are an option though.&lt;/p&gt;&#xA;" OwnerUserId="1667" LastEditorUserId="15160" LastEditDate="2018-08-10T19:32:36.813" LastActivityDate="2018-08-10T19:32:36.813" Title="Low latency control from a laptop" Tags="&lt;real-time&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="9802" PostTypeId="1" CreationDate="2016-05-08T15:42:18.667" Score="0" ViewCount="86" Body="&lt;p&gt;Is there something like an all-in-one satellite based localization solution that would contain both hardware and software to do GNSS localization for robotics? I mean a package that would also contain an IMU, would fuse it with GPS and filter the result accordingly and then provide a software API to query for location/speed etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am interested rather in some affordable solution but is there some professional hardware too?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am trying to implement this for my mobile robot and I realize that a smartphone-grade GPS (Samsung J5) gives me better preliminary results than an u-blox eval board (&lt;a href=&quot;http://www.csgshop.com/product.php?id_product=221&quot; rel=&quot;nofollow&quot;&gt;this NEO-M8T&lt;/a&gt; with integrated antenna and ground plane) - I wonder why, I guess Android may fuse the IMU and have better readings even with worse antenna?&lt;/p&gt;&#xA;" OwnerUserId="1021" LastEditorUserId="1021" LastEditDate="2016-05-08T16:02:11.077" LastActivityDate="2016-05-09T10:41:19.110" Title="All-in-one GNSS localization solution (hardware+software)" Tags="&lt;localization&gt;&lt;software&gt;&lt;gps&gt;&lt;gnss&gt;&lt;hardware&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2016-05-09T10:41:29.787" ContentLicense="CC BY-SA 3.0" />
  <row Id="9803" PostTypeId="1" CreationDate="2016-05-08T21:05:39.323" Score="0" ViewCount="94" Body="&lt;p&gt;I'm working on a robot that is controlled by an xbox controller connected to a windows computer and commands are sent to a pcduino through a tcp connection. I have it working by sending a string of 1's and 0's to tell the pcduino which motors to turn on. I'm trying to optimize it by just sending an int and using bit masks to make the decisions on the pcduino but I can't get the pcduino to receive the int correctly. I tested the windows function sending the command with sokit and its sending the correct values but the pcduino is receiving the same number even when the commands are changing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is what its doing:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Windows          -&gt; PCDuino&lt;/p&gt;&#xA;&#xA;&lt;p&gt;command = 1      -&gt; sendBuff = 73932&lt;/p&gt;&#xA;&#xA;&lt;p&gt;cmdstring = 1    -&gt; n = 1&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;command = 1025   -&gt; sendBuff = 73932&lt;/p&gt;&#xA;&#xA;&lt;p&gt;cmdstring = 1025 -&gt; n = 4&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;My windows functions are:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;bool Client::Send(char * smsg)&#xA;{&#xA;    int iResult = send(ConnectSocket, smsg, strlen(smsg), 0);&#xA;&#xA;    if (iResult == SOCKET_ERROR)&#xA;    {&#xA;        std::cout &amp;lt;&amp;lt; &quot;Sending Message has failed: &quot; &amp;lt;&amp;lt; WSAGetLastError() &amp;lt;&amp;lt; &quot;\n&quot;;&#xA;        Stop();&#xA;        return false;&#xA;    }&#xA;    return true;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    bool sendCommand()&#xA;{&#xA;    cmdbuffer &amp;lt;&amp;lt; command;&#xA;    cmdstring = cmdbuffer.str();&#xA;&#xA;    if (!client-&amp;gt;Send((char *)cmdstring.c_str()))&#xA;    {&#xA;        std::cout &amp;lt;&amp;lt; &quot;Disconnected from Server. Press Enter to Exit&quot;;&#xA;        std::cin.ignore();&#xA;        std::cin.get();&#xA;        return false;&#xA;    }&#xA;    return true;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;PCDuino Loop Function&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void loop()&#xA;{&#xA;    recBuff = 0;&#xA;    deviceFlag = 0;&#xA;&#xA;    //Read Socket&#xA;&#xA;/******************************************************************************/&#xA;&#xA;    read(connfd, sendBuff, strlen(sendBuff));&#xA;    recBuff = atoi(sendBuff);&#xA;&#xA;/******************************************************************************/&#xA;&#xA;    //Set Current Device to Receive Instructions From&#xA;    checkAuto(recBuff, currDevice);&#xA;&#xA;    //Find Current Device of Command&#xA;    deviceFlag = checkDevice(recBuff);&#xA;&#xA;    //If Current Device and Set Device are the Same Parse Command&#xA;    if (deviceFlag == currDevice)&#xA;    {&#xA;        parseHex(recBuff);&#xA;    }&#xA;    usleep(50000);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;I have a printf after the read call and that's where I am getting the 73932 number. I think I have everything you guys need but if there's anything else I need to add let me know. I'm stumped...I don't know if its just a casting problem or what.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Update 1&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;What I have before everything the setup and loop functions on the PCduino run is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;int listenfd = 0, connfd = 0;&#xA;int n;&#xA;struct sockaddr_in serv_addr;&#xA;char sendBuff[1025];&#xA;time_t ticks;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="13640" LastEditorUserId="13640" LastEditDate="2016-05-09T17:01:30.967" LastActivityDate="2016-07-09T11:15:47.777" Title="TCP Communication with PCDuino" Tags="&lt;communication&gt;&lt;c++&gt;&lt;c&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9804" PostTypeId="2" ParentId="9802" CreationDate="2016-05-09T01:44:54.900" Score="2" Body="&lt;p&gt;I have used both KVH CNS-5000 and the Xsens MTi-G-710 that do what you are asking. Both these products provide on-board sensor fusion. The CNS-5000 uses an EKF and I am not sure about the Xsens. They both cost in excess of $4k. I am unaware of any less costly solutions that integrate both the GNSS and IMU. &lt;/p&gt;&#xA;" OwnerUserId="10624" LastEditorUserId="37" LastEditDate="2016-05-09T10:41:19.110" LastActivityDate="2016-05-09T10:41:19.110" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9806" PostTypeId="2" ParentId="9801" CreationDate="2016-05-09T01:55:23.320" Score="0" Body="&lt;p&gt;Off the shelf expresscard or cardbus cards for &lt;strong&gt;rs422/485&lt;/strong&gt; will do 921Kbit/sec which, depending on the protocol you use and its overhead, should get you more than 100Bytes of data in less than 2ms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Considering the ease at which you can use RS422 with a microcontroller this is the first thing to try. You can even forgo a protocol and use the raw communications during development to get up and running quickly (though for robustness, a protocol that can handle errors and comms start and stop will be wanted).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Ethercat&lt;/strong&gt; is the other option, which can use a standard ethernet card, (if you are lucky your laptop will use a compatible chipset), but you will need to add an Ethercat chip and ethernet phy on the microcontroller side. Additionally, Ethercat uses a robust but complicated communication protocol so it can take some time to learn. The benefit of doing so is that you have fast communications designed for realtime control.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2016-05-09T01:55:23.320" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9807" PostTypeId="2" ParentId="9724" CreationDate="2016-05-09T02:18:40.703" Score="0" Body="&lt;p&gt;The 'bang' refers to a step transition. Bang-Bang means that one applies maximum positive effort, then maximum negative effort, with step transitions in between. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Technically we starting at 0 velocity and returning to 0 velocity so it should be bang-bang-bang control; but it sounds strange to say that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For theoretical analysis involving bang-bang inputs, I would use the dirac delta. I don't use matlab that much but it looks like they have it for &lt;a href=&quot;http://mathworks.com/help/symbolic/dirac.html&quot; rel=&quot;nofollow&quot;&gt;symbolic analysis&lt;/a&gt; and &lt;a href=&quot;http://mathworks.com/help/control/ref/impulse.html&quot; rel=&quot;nofollow&quot;&gt;numerical analysis&lt;/a&gt;. It sounds like you already know this though.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2016-05-09T02:18:40.703" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="9808" PostTypeId="5" CreationDate="2016-05-09T12:42:02.733" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2016-05-09T12:42:02.733" LastActivityDate="2016-05-09T12:42:02.733" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9809" PostTypeId="4" CreationDate="2016-05-09T12:42:02.733" Score="0" Body="USB stands for Universal Serial Bus. It is a commonly used standard which defines the cables, connectors and communications protocols used in a bus for connection, communication, and power supply." OwnerUserId="10596" LastEditorUserId="10596" LastEditDate="2016-05-09T17:30:32.493" LastActivityDate="2016-05-09T17:30:32.493" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9810" PostTypeId="5" CreationDate="2016-05-09T12:50:01.560" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2016-05-09T12:50:01.560" LastActivityDate="2016-05-09T12:50:01.560" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9811" PostTypeId="4" CreationDate="2016-05-09T12:50:01.560" Score="0" Body="LASER (Light Amplification by Stimulated Emission of Radiation) is an optical device, which emits monochromatic, directional, and coherent light beam (laser light). Commonly used in distance measuring devices such as LIDAR." OwnerUserId="10596" LastEditorUserId="10596" LastEditDate="2016-05-09T13:17:04.143" LastActivityDate="2016-05-09T13:17:04.143" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9812" PostTypeId="2" ParentId="9724" CreationDate="2016-05-09T14:44:01.167" Score="1" Body="&lt;p&gt;This is how I would go about simulating a nonlinear ODE in Matlab. As I mentioned in a (now-deleted) comment on your question, I typically work with &lt;em&gt;linear&lt;/em&gt; ODE's in my line of work, which means that I usually use the (awesome) functions in the Control System Toolbox. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, I'll start by saying that you haven't given any definitions of what the matrices are in your equation, so I can't give you a concrete example of how to solve your specific example. If you &lt;em&gt;update your question&lt;/em&gt; to give numbers for everything then I can modify this answer to solve your problem. That said, you give:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;M(q)\ddot{q}+C(q,\dot{q})\dot{q}+G(q)=Q&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First I would say that this can be re-written as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\ddot{q} = \frac{1}{M(q)}\left(Q-C(q,\dot{q})\dot{q} -G(q)\right) \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, for an example for you, I chose an RLC circuit, which takes the form:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{array}&#xA;.\dot{I} = \frac{1}{L}\left(V_{\mbox{in}} - V_C - IR\right) \\&#xA;\dot{V} = \frac{1}{C}I&#xA;\end{array}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typically your input signal would be a smooth function of time. Here you're looking for a bang-bang signal, which is akin to a light switch. At some time, the input signal goes from nothing &lt;em&gt;immediately&lt;/em&gt; to some value, then later from that value &lt;em&gt;immediately&lt;/em&gt; back to nothing. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, where typically you would use an &lt;code&gt;interpolate&lt;/code&gt; command to get values defined sample time increments, here you &lt;strong&gt;don't&lt;/strong&gt; want those commands interpolated. You don't want a ramp, you want the signal to immediately shift. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So this question really is two parts:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;How do I pass parameters to an ODE45 (or 23 or whatever else) function in Matlab, and &lt;/li&gt;&#xA;&lt;li&gt;How do I define a step change in an input signal for an ODE45 function?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The answers are (examples to follow)&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Define your ODE function as a function in its own script, such that the first line of the script is something like &lt;code&gt;function [dq] = AlFageraODE(t,x,parameter1,parameter2,...,parameterN)&lt;/code&gt;. Then, when you want to solve the ODE, call Matlab's built-in ODE solver as follows: &lt;code&gt;[t,y] = ode45(@AlFageraODE,[t0,t1],[y0,y1],&lt;/code&gt;&lt;strong&gt;[ ]&lt;/strong&gt;&lt;code&gt;,parameter1,parameter2,...,parameterN);&lt;/code&gt;. The square brackets in bold there need to be included because that is where you can pass specific options to the ODE solver. If you don't want to pass anything specific and are okay with the default settings, you still need to put something, so put an empty array - this is done with an empty array &lt;code&gt;[]&lt;/code&gt;. After that you can put in parameters that will be passed to your custom function. &lt;/li&gt;&#xA;&lt;li&gt;To get a true step function, you need to split the simulation into three distinct sets - before the step, during the step, and after the step. Anything else will result in the need to interpolate the input command. The last entry in the outputs will be the initial conditions for the next segment of the simulation. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Below, I've written the custom ODE function, and then below that is the script used to solve the custom ODE. Note that the R, L, and C values are set in the calling script, not in the custom ODE. This is because those values are &lt;em&gt;passed&lt;/em&gt; in to the custom ODE, along with what the applied voltage should be during that particular segment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The examples:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The custom ODE function (again, this simulates an RLC circuit, but you can modify it for any custom ODE needing parameters passed in.)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;function dx = RoboticsODE(t,x,Vin,R,L,C)&#xA;dx = zeros(2,1);&#xA;&#xA;I = x(1);&#xA;V = x(2);&#xA;&#xA;di_dt = (1/L)*(Vin - V - I*R);&#xA;dv_dt = (1/C)*I;&#xA;&#xA;dx(1) = di_dt;&#xA;dx(2) = dv_dt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;The script that solves that ODE for a bang-bang signal. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;%% Clear/close everything&#xA;clear;&#xA;close all;&#xA;clc;&#xA;&#xA;%% Simulation Configuration&#xA;v0 = 0;             % Initial *output* voltage&#xA;i0 = 0;             % Initial circuit current&#xA;C = 47*(1/1000);    % Capacitance, F&#xA;R = 0.1;            % Resistance, Ohm&#xA;L = 22*(1/1000);    % Inductance, H&#xA;&#xA;appliedVoltages = [0,1,0]; % The applied voltages at t0, bangOn, bangOff&#xA;tStart = 0;         % t0&#xA;bangStart = 1;      % bangOn time&#xA;bangWidth = 1;      % bangOff time = bangOn time + bangWindow&#xA;endWindow = 5;      % endWindow is how long to &quot;watch&quot; the simulation after &#xA;                    %   the bang-bang signal goes &quot;off&quot;.&#xA;&#xA;%% Output Initialization&#xA;outputTime = zeros(0,1);&#xA;outputVoltage = zeros(0,1);&#xA;outputCurrent = zeros(0,1);&#xA;inputVoltage = zeros(0,1);&#xA;&#xA;%% Dependent Configuration&#xA;currentValues = [i0;v0];&#xA;samplePoints = cumsum([tStart,bangStart,bangWidth,endWindow]);&#xA;% A note on the above - I use the cumulative sum (cumsum) because I defined&#xA;% each point as the number of seconds *after* the previous event. If you&#xA;% defined absolute time points then you'd just use those time points&#xA;% directly with no cumulative sum.&#xA;nSegments = numel(samplePoints)-1;&#xA;&#xA;%% Simulation&#xA;for currentSegment = 1:nSegments&#xA;    % Setup the simulation by getting the current time window and &quot;intial&quot;&#xA;    % conditions.&#xA;    Vt = appliedVoltages(currentSegment);&#xA;    t0 = samplePoints(currentSegment);&#xA;    t1 = samplePoints(currentSegment+1);&#xA;    sampleTime = [t0;t1];&#xA;&#xA;    % Run the simulation by solving the ODE for this particular segment.&#xA;    [intermediateTime,intermediateOutput] = ...&#xA;        ode45(@RoboticsODE,sampleTime,currentValues,[],Vt,R,L,C);&#xA;&#xA;    % Assign outputs&#xA;    nOutputPoints = numel(intermediateTime);&#xA;    outputTime(end+1:end+nOutputPoints) = intermediateTime;&#xA;    outputCurrent(end+1:end+nOutputPoints) = intermediateOutput(:,1);&#xA;    outputVoltage(end+1:end+nOutputPoints) = intermediateOutput(:,2);&#xA;    inputVoltage(end+1:end+nOutputPoints) = Vt*ones(nOutputPoints,1);&#xA;&#xA;    % Setup the next simulation by setting the &quot;initial&quot; conditions for&#xA;    % that simulation equal to the ending conditions for the current&#xA;    % simulation.&#xA;    currentValues(1) = outputCurrent(end);&#xA;    currentValues(2) = outputVoltage(end);&#xA;end&#xA;&#xA;%% Output Plot&#xA;plot(outputTime,inputVoltage);&#xA;hold on;&#xA;plot(outputTime,outputVoltage);&#xA;title('RLC Circuit with Step Input to ODE45');&#xA;xlabel('Time (s)');&#xA;ylabel('Voltage (V)');&#xA;legend('Input Voltage','Output Voltage');&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;ol start=&quot;3&quot;&gt;&#xA;&lt;li&gt;The plot of the output.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/IhuDv.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/IhuDv.png&quot; alt=&quot;ODE45 Example Output&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, as I mentioned, if you would be willing to give concrete numbers for your equation then I could tailor this to solve your particular problem. As it stands, I can't provide any solution to a symbolic nonlinear ODE so this example is the best I can give you.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;:EDIT:&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I've got the problem solved for you. The code is attached below. I'll say this, though: It's important, for a step input (bang-bang, etc.) to &lt;em&gt;segment&lt;/em&gt; the ODE solver process, as I described above. This is because Matlab tries to optimize solving the ODE and may not take process time in exactly the way you would expect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The segmenting method is again, as described above, where you split the solving process at every discontinuity. The initial conditions for the following step is equal to the ending conditions of the current step. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The images below are the solutions I got with the segmented method and the &quot;all-in-one&quot; method. The all-in-one is the way you had it setup, where the force function was determined by an &lt;code&gt;if&lt;/code&gt; statement in the ODE function. Because Matlab chooses the sample time increments, the positive and negative segments aren't guaranteed to have exactly the same number of samples. I think this is the reason for the drift in the output of the all-in-one solution. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found several problems with your method. When I corrected them, I got a plot that looked (to me) to exactly duplicate the plots from the paper you linked. &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The biggest problem - fx and fy should be the same. &lt;/li&gt;&#xA;&lt;li&gt;Also a problem, the pulse width should be 1s. You used a square wave of &lt;em&gt;period&lt;/em&gt; 1s, meaning that there was a 0.5s &quot;positive&quot; and 0.5s &quot;negative&quot; signal. I halved the frequency and got the proper 1s signal width. &lt;/li&gt;&#xA;&lt;li&gt;Your initial conditions for x and y were not zero. They are zero in the paper, so I set them to zero in the simulation to replicate the figures in the paper. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/iYba1.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/iYba1.png&quot; alt=&quot;ODE Solver Comparison&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's the code! First, the ODE script:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;function varDot = AlFagera(t,var,spec,F)&#xA;% In general, I did a lot of cleanup with this function to make things&#xA;% easier for me to read.&#xA;&#xA;%% Misc Declarations&#xA;% varDot = zeros(8,1);&#xA;varDot = zeros(12,1); % to include the input torque&#xA;g = 9.80;               % Acceleration of gravity (m/s^2)&#xA;&#xA;%% Define Forces if Undefined&#xA;% If the segmentSolution is being used, then the force is supplied to the&#xA;% function. If it's not being used (the &quot;all-in-one&quot; solution), then the&#xA;% force is determined by the simulation time. &#xA;if isempty(F)&#xA;    if t &amp;gt;=1 &amp;amp;&amp;amp; t&amp;lt;=3&#xA;        fy = -1.*sign(sin(t*pi));&#xA;    else&#xA;        fy = 0;&#xA;    end&#xA;    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&#xA;    % I'll highlight this, because I think this was the key problem     %&#xA;    % you were having. The force for fx and fy should be the same. You  %&#xA;    % had fx = 0 for all cases.                                         %&#xA;    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&#xA;    %fx = 0;&#xA;    fx = fy;&#xA;    F = [fx;fy;0;0];&#xA;end&#xA;%% Crane Specifications&#xA;mp = spec(1);&#xA;mc = spec(2);&#xA;mr = spec(3);&#xA;L = spec(4);&#xA;J = spec(5);&#xA;&#xA;%% Breakout the Input Variable&#xA;x        = var(1);&#xA;y        = var(2);&#xA;theta    = var(3);&#xA;phi      = var(4);&#xA;&#xA;xDot     = var(5);&#xA;yDot     = var(6);&#xA;thetaDot = var(7);&#xA;phiDot   = var(8);&#xA;&#xA;%% Repackage the Inputs into Useful Form&#xA;q = [...&#xA;    x; ...&#xA;    y; ...&#xA;    theta; ...&#xA;    phi];&#xA;&#xA;qDot = [...&#xA;    xDot; ...&#xA;    yDot; ...&#xA;    thetaDot; ...&#xA;    phiDot];&#xA;&#xA;%% Simplified expressions for (extensive) use later&#xA;mpL  = mp*L;&#xA;cosT = cos(theta);&#xA;sinT = sin(theta);&#xA;cosP = cos(phi);&#xA;sinP = sin(phi);&#xA;&#xA;%% Matrix Expressions&#xA;M = [...&#xA;    mr+mc+mp      , 0              , mpL*cosT*sinP , mpL*sinT*cosP; ...&#xA;    0             , mp+mc          , mpL*cosT*cosP , -mpL*sinT*sinP; ...&#xA;    mpL*cosT*sinP , mpL*cosT*cosP  , mpL*L+J       , 0; ...&#xA;    mpL*sinT*cosP , -mpL*sinT*sinP , 0             , mp*(L*sinT)^2+J];&#xA;C = [...&#xA;    0 , 0 , -mpL*sinT*sinP*thetaDot+mpL*cosT*cosP*phiDot , mpL*cosT*cosP*thetaDot-mpL*sinT*sinP*phiDot; ...&#xA;    0 , 0 , -mpL*sinT*cosP*thetaDot-mpL*cosT*sinP*phiDot , -mpL*cosT*sinP*thetaDot-mpL*sinT*cosP*phiDot; ...&#xA;    0 , 0 , 0                                            , -mpL*L*sinT*cosT*phiDot; ...&#xA;    0 , 0 , mpL*L*sinT*cosT*phiDot                       , mpL*L*sinT*cosT*thetaDot];&#xA;G = [...&#xA;    0; ...&#xA;    0; ...&#xA;    mpL*g*sinT; ....&#xA;    0];&#xA;&#xA;%% Assign Outputs&#xA;qDdot = M\(-C*qDot-G+F);&#xA;varDot = [...&#xA;    qDot; ...&#xA;    qDdot; ...&#xA;    F];&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then, the script that solves the ODE:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;clear all; &#xA;close all; &#xA;clc;&#xA;&#xA;% Compare the all-in-one method of solving the problem with the segmented&#xA;% method of solving the problem by setting the variable below equal to&#xA;% &quot;true&quot; or &quot;false&quot;. &#xA;segmentSolution = true;&#xA;&#xA;t0 = 0;tf = 20;&#xA;&#xA;% Your initial conditions here for x- and y-positions were not zero, so I&#xA;% set them to zero to reproduce Figure 2 and Figure 3 in the paper you&#xA;% linked. &#xA;% Also - you don't ever use the last 4 values of this except as a way to&#xA;% output the force. This isn't used in the segmentSolution because there&#xA;% the input force is supplied to the function. &#xA;&#xA;x0 = [0 0 0 0, 0 0 0 0,0 0 0 0];  % Initial Conditions&#xA;&#xA;%% Specifications&#xA;Mp = [0.1 0.5 1];      % Variable mass for the payload&#xA;figure&#xA;plotStyle = {'b-','k','r'};&#xA;&#xA;%% SegmentSolution Settings&#xA;fx = [0,1,-1,0];&#xA;fy = [0,1,-1,0];&#xA;tStart = 0;&#xA;tOn = 1;&#xA;bangWidth = 1;&#xA;tEndWindow = 17;&#xA;sampleTime = cumsum([tStart,tOn,bangWidth,bangWidth,tEndWindow]);&#xA;nSegments = numel(sampleTime)-1;&#xA;%% Simulation&#xA;for i = 1:3&#xA;    mp = Mp(i);&#xA;    mc = 1.06; mr = 6.4;           % each mass in kg&#xA;    L = 0.7; J = 0.005;            % m, kg-m^2 respe.&#xA;    spec = [mp mc mr L J];&#xA;    %% Call the the function&#xA;    initialConditions = x0;&#xA;&#xA;    if segmentSolution&#xA;        t = zeros(0,1);&#xA;        x = zeros(0,numel(x0));&#xA;        outputFx = zeros(0,1);&#xA;        outputFy = zeros(0,1);&#xA;        for currentSegment = 1:nSegments&#xA;            inputForce = [fx(currentSegment),fy(currentSegment),0,0].';&#xA;            t0 = sampleTime(currentSegment);&#xA;            t1 = sampleTime(currentSegment+1);&#xA;            [intermediateT,intermediateX] = ode45(@AlFagera,[t0 :0.001: t1],initialConditions,[],spec,inputForce);&#xA;            nOutputSamples = numel(intermediateT);&#xA;            index1 = size(t,1)+1;&#xA;            index2 = size(t,1)+nOutputSamples;&#xA;            t(index1:index2) = intermediateT;&#xA;            x(index1:index2,:) = intermediateX;&#xA;            initialConditions = x(end,:).';&#xA;            outputFx(index1:index2) = inputForce(1)*ones(nOutputSamples,1);&#xA;            outputFy(index1:index2) = inputForce(2)*ones(nOutputSamples,1);&#xA;        end&#xA;        tt = t;&#xA;    else&#xA;        inputForce = []; % Leave this empty for the all-in-one solver. &#xA;                         % There's a check in the code to setup the force&#xA;                         % when it's not defined. &#xA;        [t,x] = ode45(@AlFagera,[t0:0.001:tf],initialConditions,[],spec,inputForce);&#xA;        outputFx = diff(x(:,9))./diff(t);&#xA;        outputFy = diff(x(:,10))./diff(t);&#xA;        tt=0:(t(end)/(length(outputFx)-1)):t(end);&#xA;    end&#xA;    legendInfo{i} = ['mp=',num2str(Mp(i)),'kg'];&#xA;&#xA;&#xA;    %fx = diff(x(:,9))./diff(t);&#xA;    %fy = diff(x(:,10))./diff(t);&#xA;    %tt=0:(t(end)/(length(fx)-1)):t(end); % this time vector&#xA;&#xA;    % to plot the cart positions in x and y direcitons&#xA;    subplot(1,2,1)&#xA;    plot(t,x(:,1),plotStyle{i})&#xA;    axis([0 20 0 0.18]);&#xA;    grid&#xA;    xlabel('time (s)');&#xA;    ylabel('cart position in x direction (m)');&#xA;    hold on&#xA;    legend(legendInfo,'Location','northeast')&#xA;&#xA;    subplot(1,2,2)&#xA;    plot(t,x(:,2),plotStyle{i})&#xA;    axis([0 20 0 1.1]);&#xA;    grid&#xA;    xlabel('time (s)');&#xA;    ylabel('cart position in y direction (m)');&#xA;    hold on&#xA;    legend(legendInfo,'Location','northeast')&#xA;end&#xA;&#xA;% to plot the input torque, (bang-bang signal), just one sample&#xA;figure&#xA;plot(tt,outputFy);&#xA;grid&#xA;set(gca,'XTick',[0:20])&#xA;xlabel('time (s)');&#xA;ylabel('input signal, f_y (N)');&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I took the liberty of cleaning up the code in the ODE function, I hope you don't mind. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, to summarize, the solution to your problem is:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Pass inputs to the ODE function (such as parameters and applied forces), and&lt;/li&gt;&#xA;&lt;li&gt;Segment the ODE solution at each discontinuity.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2016-05-10T19:42:30.243" LastActivityDate="2016-05-10T19:42:30.243" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="9813" PostTypeId="2" ParentId="9803" CreationDate="2016-05-09T16:23:39.640" Score="1" Body="&lt;p&gt;Sorry but its not really clear from your code whats going on, but the area drawing my attention is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;   read(connfd, sendBuff, strlen(sendBuff));&#xA;   recBuff = atoi(sendBuff);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I'm assuming sendBuff is a char* or char[] of a certain size.  You are reading into that buffer up to strlen(sendBuff) characters.  So lets hope this is running in DEBUG mode you are reading characters into the buffer up to the length of the string that is currently held in the buffer.  Unless you have set it elsewhere then the string currently in the buffer in Debug configuration should be zero characters long, meaning you are asking to read zero characters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IF I have understood what you posted then I think you want something more like this.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    const size_t MaxSize = 16;&#xA;    char sendBuffer[MaxSize];&#xA;    const size_t readRv = read(connfd, sendBuff, MaxSize);&#xA;    if (readRv &amp;gt; 0)&#xA;    { &#xA;        recBuff = atoi(sendBuff);&#xA;    }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="10717" LastActivityDate="2016-05-09T16:23:39.640" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9814" PostTypeId="5" CreationDate="2016-05-09T16:32:22.583" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2016-05-09T16:32:22.583" LastActivityDate="2016-05-09T16:32:22.583" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9815" PostTypeId="4" CreationDate="2016-05-09T16:32:22.583" Score="0" Body="AVR is an 8- and 32-bit microcontroller family developed by Atmel Corporation." OwnerUserId="10596" LastEditorUserId="9720" LastEditDate="2016-05-09T17:30:18.320" LastActivityDate="2016-05-09T17:30:18.320" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9816" PostTypeId="5" CreationDate="2016-05-09T16:36:14.793" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2016-05-09T16:36:14.793" LastActivityDate="2016-05-09T16:36:14.793" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9817" PostTypeId="4" CreationDate="2016-05-09T16:36:14.793" Score="0" Body="Flow of electric charge - typically movement of charge carriers, such as electrons. Measured in amperes (A)." OwnerUserId="10596" LastEditorUserId="10596" LastEditDate="2016-05-09T17:31:28.200" LastActivityDate="2016-05-09T17:31:28.200" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9819" PostTypeId="1" CreationDate="2016-05-10T04:12:27.470" Score="0" ViewCount="123" Body="&lt;p&gt;I've built a quadcopter using the Dji Wookong-M. As of a couple of weeks ago I have been able to get everything to work except for one small thing. When I throttle up the Drone tends to flip to the side. I have tested all the motors over and over again and I know that they are spinning the right direction and that I have the right props on the right motors. I tested on both grass and concrete but both times it flipped. It starts to flip once the throttle is past 50%. I don't know if it is catching or if something is off balance although I don't think this is the problem since the quadcopter tips different directions almost every time. If any one could tell me what is wrong I would appreciate it a lot since my project is due in 2 1/2 weeks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in Advance&lt;/p&gt;&#xA;" OwnerUserId="11051" LastEditorUserId="11051" LastEditDate="2016-05-10T13:28:10.503" LastActivityDate="2017-11-05T10:23:27.073" Title="Dji Wookong-M - To unstable to take off" Tags="&lt;quadcopter&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="9821" PostTypeId="2" ParentId="9803" CreationDate="2016-05-10T09:48:32.653" Score="0" Body="&lt;ol&gt;&#xA;&lt;li&gt;Convert the int to a byte buffer&lt;/li&gt;&#xA;&lt;li&gt;Send the byte buffer out via whatever medium (wireless/wired)&lt;/li&gt;&#xA;&lt;li&gt;On recvive at the microcontroller end, convert the byte to int.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Eg.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;int a = 2 bytes.&#xA;int b = 2 bytes.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;char array[4] = to hold both the ints in byte array for wireless sending.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So your output array will have &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;array[0] = int a_1st_part&#xA;array[1] = int a_2nd_part&#xA;array[2] = int b_1st_part&#xA;array[3] = int b_2nd_part&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Now send the output array out (via socket/wireless/uart).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you receive do the opposite. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;array[0] + array[1] //make up for int a.&#xA;array[2] + array[3] //make up for int b.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="7049" LastActivityDate="2016-05-10T09:48:32.653" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9825" PostTypeId="1" AcceptedAnswerId="9869" CreationDate="2016-05-12T13:30:16.710" Score="2" ViewCount="139" Body="&lt;p&gt;A reviewer of the last paper I sent replied me that the it is very dangerous to update a PID with next kind of formula (paper is about quadrotor control):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;K_p (t + 1) = K_p (t)+e(t) (μ_1 (Pe(t)) + μ_4 (Pe(t)))&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$Pe(t)$ is the % relationship between the desired angles and the real angles, and $e(t)$ is the difference between those angles. $μ_1$ and $μ_4$ are the membership functions of a fuzzy function. I think that the reviewer is talking about the time increment update rather than the fuzzy usage and specific formula.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can stability of this formula be tested, please?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;membership functions are represented in following graph:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/rJ3vy.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rJ3vy.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$e(t)$ is not the absolute difference between angles, just the difference. It can be negative&lt;/p&gt;&#xA;" OwnerUserId="10539" LastEditorUserId="10539" LastEditDate="2016-05-17T05:38:12.957" LastActivityDate="2016-06-16T15:47:55.407" Title="Stability of PID values update function for quadrotor" Tags="&lt;quadcopter&gt;&lt;control&gt;&lt;pid&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9826" PostTypeId="1" AcceptedAnswerId="9902" CreationDate="2016-05-12T14:16:27.713" Score="4" ViewCount="309" Body="&lt;p&gt;In Tad McGeer's work, &lt;a href=&quot;https://www.google.com.tw/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;cad=rja&amp;amp;uact=8&amp;amp;ved=0ahUKEwjz9KOX5NTMAhWEj5QKHbauD9YQFgggMAA&amp;amp;url=http%3A%2F%2Fruina.tam.cornell.edu%2Fresearch%2Fhistory%2Fmcgeer_1990_passive_dynamic_walking.pdf&amp;amp;usg=AFQjCNG1l9gbWCJgcd5mlARdYvOcD123cg&amp;amp;sig2=cE3ne4MxgyCi_9lnRHT3Bw&quot; rel=&quot;noreferrer&quot;&gt;Passive Dynamic Walking&lt;/a&gt;, in 1990, he mentions the rimless wheel model, which is used to approximate the bipedal locomotion. I can't understand why the angular momentum is written as follows.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$H^-=(\cos 2\alpha_0+r^2_{gyr})ml^2\Omega^-$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have the following questions:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Isn't the angular momentum be $I*\omega$, $m^2l\Omega$ as the paper's notation?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If $\alpha_0$ is $\frac{\pi}{2}$ and $r_{gyr}$ approaches to 0, shouldn't the angular momentum before impact, $H^-$, be negative? Then how the conservation goes?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="13536" LastEditorUserId="13536" LastEditDate="2016-05-12T14:50:58.277" LastActivityDate="2016-05-21T02:52:33.547" Title="Angular momentum of rimless wheel in Passive Dynamic Walking" Tags="&lt;wheel&gt;&lt;walking-robot&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9828" PostTypeId="1" AcceptedAnswerId="9835" CreationDate="2016-05-13T12:56:22.223" Score="0" ViewCount="927" Body="&lt;p&gt;I recently bought a RC car kit and after 10 minutes it stopped going. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I throttle, I can see the motor trying to spin but it will just grind and get hot quite fast.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The motor does move if I disconnect it from the big gear, but not as fast as it did when new and it will still get very hot. Also, I can stop it with my fingers with a very slight touch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know anything about motors or ESCs, so I'm not sure if my problem is the motor or the ESC.  Did I burn it out?&lt;/p&gt;&#xA;" OwnerUserId="13682" LastEditorUserId="9176" LastEditDate="2016-05-16T11:46:07.523" LastActivityDate="2016-05-16T11:46:07.523" Title="Brushless motor from RC car won't spin with even small resistance" Tags="&lt;brushless-motor&gt;&lt;esc&gt;&lt;radio-control&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9829" PostTypeId="2" ParentId="8382" CreationDate="2016-05-13T15:51:34.880" Score="0" Body="&lt;p&gt;As an alternative you could use a light interruption sensor and disk as is typically found inside any old household printer.  Modules can cost \$20 online, but my local thrift shop sells whole printers for \$10 all the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Add the ring to your shaft and add the sensor's four wires, then by counting the number of lines for a full rotation you can divide this number for precise positioning.&lt;/p&gt;&#xA;" OwnerUserId="12960" LastEditorUserId="9176" LastEditDate="2016-05-16T11:45:55.913" LastActivityDate="2016-05-16T11:45:55.913" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9830" PostTypeId="2" ParentId="9294" CreationDate="2016-05-13T16:26:32.607" Score="0" Body="&lt;p&gt;Personally, I'd suggest a different approach as I have done. Look into using 18650 cells instead. You can easily score 6-12 of these cells in old laptop batteries, they are lighter and more energy dense than the lead acid batteries you are using and hold up better. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can buy them for approximately \$2 each on eBay with a 5000 mAh rating as well but I find that in old laptop batteries, the charge controller board goes bad before the cells do, most of the time. These cells are lithium ion and you should invest the extra buck or two for low voltage cut off protection, as dipping below the 3.6 volts per cell can cause damage (i.e. the exploding hoverboard incidents).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At full charge they run at 4.2 V and you can easily get clips to hold them and cheap circuitry which will allow you to charge them via standard USB micro cords you no doubt have for your cellphone. Just multiply your volts per cell to equal the volts you need for your series then stack in parallel for more amps. I have replaced powerwheel batteries with a 3S3P pack quite nicely. Personally I use a smart universal charger but there are several ways to go here.&lt;/p&gt;&#xA;" OwnerUserId="12960" LastEditorUserId="9176" LastEditDate="2016-05-16T16:25:59.783" LastActivityDate="2016-05-16T16:25:59.783" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9832" PostTypeId="1" CreationDate="2016-05-13T18:26:49.070" Score="1" ViewCount="80" Body="&lt;p&gt;When looking at the robotic hands made by researchers that are said to be rather close to a real human hand, they can easily cost tens of thousands of dollars.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What makes them so much expensive? Sure there are lots of joints where parts must move, but it's still hard to figure out how it can cost so much even with highly precise servomotors.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is so much expensive when trying to build a humanoid hand? How can we make it less expensive? What do these expensive hands can do, that a diy cheap hand project can't?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you.&lt;/p&gt;&#xA;" OwnerUserId="4255" LastActivityDate="2016-05-13T19:30:24.637" Title="What are the biggest challenges to build an highly performant robotic hand?" Tags="&lt;humanoid&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9833" PostTypeId="2" ParentId="9832" CreationDate="2016-05-13T19:30:24.637" Score="2" Body="&lt;p&gt;Replying to your comment and the robotic hand mentioned in &lt;a href=&quot;http://www.gizmag.com/robotic-arm-string-tendons/22018/&quot; rel=&quot;nofollow&quot;&gt;Gizmag&lt;/a&gt;, I think I can answer some of your questions, but before I begin, there are some important references that you should consult to really understand the questions that you have asked. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The robotic hand in question operates on the &quot;twisted string&quot; principle, which act as tendons in the hand. The idea is that when you twist a string, it gets shorter--small DC motors are used to accomplish this. See this &lt;a href=&quot;http://www.dexmart.eu/fileadmin/dexmart/public_website/downloads/presentations/USAAR-Workshop-A3.pdf&quot; rel=&quot;nofollow&quot;&gt;presentation&lt;/a&gt; for a brief introduction to twisted string actuation, and this &lt;a href=&quot;https://www.researchgate.net/profile/Gianluca_Palli/publication/267961193_Innovative_Technologies_for_Innovative_Technologies_for_the_Next_the_Next_Generation_of_Robotic_Hands_Generation_of_Robotic_Hands/links/5524c4370cf22e181e73aafc.pdf&quot; rel=&quot;nofollow&quot;&gt;presentation&lt;/a&gt; for a description of how twisted string actuation is used in practice on the robotic hand. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What makes them so much expensive? Sure there are lots of joints where&#xA;  parts must move, but it's still hard to figure out how it can cost so&#xA;  much even with highly precise servomotors. What is so much expensive &#xA;  when trying to build a humanoid hand? &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;After reading the reference material, I am sure that the answer to this question is obvious. The robotic hand is not as simple as using hobby servos for each of the joints. Small precision DC motors are used to enable the twisted string actuation. Furthermore, a significant number of motors is required because of the number of degrees of freedom (DOF) of the human hand. On top of the actuators themselves, there is the control of the motors, which is certainly non-trivial. If feedback is implemented, then tactile sensors of some sort will be needed, and if you want to mount this on a mobile robot, then you have to worry about weight and power supply.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The short answer is that proper parts are really expensive, and hobby parts won't get the job done.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How can we make it less expensive? &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Once the research is done, decreasing cost is done by manufacturing large quantities, which brings the cost of each unit down; however, there must be a reason to make so many robotic hands, so don't count on this happening in the near future.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What do these expensive hands can do, that a diy cheap hand project can't?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Precision comes to mind, but the purpose of the twisted string robotic hand is as much to demonstrate that robotic hands are feasible as to explore and conduct research on twisted string actuation itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As an aside to the questions you have asked an the robotic hand we are discussing, I have two important things to mention. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, I have to say that if you really want to learn about robotics or technology in general, the first thing you should do is understand the differences between secondary and primary sources. Gizmag/Gizmodo/etc generate income by selling ads, so the emphasis is not on proper reporting and even less on the material they purportedly cover--the people writing the articles likely have less knowledge about the subject than you do. You shouldn't count on the veracity of these sources and should fact-check as a matter of course. To do this look for author names and articles that should be referenced, then use Google Scholar to find primary literature on the subject--reading through this material is key.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second, there are distinct differences in approach to robotics between hobbyists and researchers. Hobby robotics focus on the robot itself as a product that can be seen, touched, and possibly used. In research, the focus is often on underlying theories, and the robot is merely a platform used to demonstrate and apply theory. There are merits to both, and each approach can benefit from the perspectives of the other, but when you try to compare robots used for one approach from the other, you must understand that the objectives are fundamentally different.  &lt;/p&gt;&#xA;" OwnerUserId="9585" LastActivityDate="2016-05-13T19:30:24.637" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9835" PostTypeId="2" ParentId="9828" CreationDate="2016-05-13T19:51:43.020" Score="1" Body="&lt;p&gt;A couple of things to check:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, does the gear assembly work smoothly? If it doesn't, then the motor might have broken when attempting to work against too much resistance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second, if you apply a reasonable voltage directly to the positive and negative leads of the DC motor, does it still get hot and not work? If so then the motor is toast.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I cannot imagine that the mechanical issue is caused by the ESC.&lt;/p&gt;&#xA;" OwnerUserId="9585" LastActivityDate="2016-05-13T19:51:43.020" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9836" PostTypeId="2" ParentId="9828" CreationDate="2016-05-13T20:36:06.037" Score="1" Body="&lt;p&gt;Sounds like a burnt (shorted) motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are not able to inspect the ESC with an oscilloscope, try connecting every combination of the motor leades to each other and spin the motor by hand. If only one phase is damaged, then one combination of phase wires connected to each other will provide more resistance than the other two.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2016-05-13T20:36:06.037" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9837" PostTypeId="2" ParentId="9826" CreationDate="2016-05-13T23:22:51.313" Score="1" Body="&lt;p&gt;There are some fundamental problems with your questions. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, $\alpha_0$ and $r_{gyr}$ are fixed parameters that depend on the passive walker. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second, the equation $$H^-=I*\omega=(cos(2 \alpha_0)+r_{gyr}^2)m l^2 \Omega$$ implies that $$I=(cos(2 \alpha_0)+r_{gyr}^2)m l^2 \neq m l^2.$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lastly, I'm not sure that $\alpha_0=\pi/2$ makes sense physically because it is the angle of the leg at support transfer. See Figure 5 in the paper. The gait of each leg is out of phase as expected. $\alpha_0=\pi/2$ would mean that the weight transfers when the leg is perpendicular with the ground, which, I am confident, would not be a smooth walking gait.&lt;/p&gt;&#xA;" OwnerUserId="9585" LastActivityDate="2016-05-13T23:22:51.313" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9838" PostTypeId="2" ParentId="9786" CreationDate="2016-05-14T01:00:01.940" Score="2" Body="&lt;p&gt;Andy's response is good, and he hits all of the important points but to fully understand PID control in the context of a differential drive robot, it might be useful to take a step back and consider the dynamics of the system. This may seem like a digression from your specific question, but if you take the time to read through, I am confident that this will lend context to PID control and improve your understanding.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Differential drive robots can be modeled with unicycle dynamics of the form: $$\left[\begin{matrix}\dot{x}\\ \dot{y} \\ \dot{\theta} \end{matrix}\right] = \left[\begin{matrix}cos(\theta)&amp;amp;0\\sin(\theta)&amp;amp;0\\0&amp;amp;1\end{matrix}\right] \left[\begin{matrix}v\\\omega\end{matrix}\right],$$ where $x$ and $y$ are Cartesian coordinates of the robot, and $\theta \in (-\pi,\pi]$ is the angle between the heading and the $x$-axis. The input vector $\left[v, \omega \right]^T$ consists of linear and angular velocity inputs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because the objective is to head in a desired direction, so the error can be written as $$e=\theta-\theta_d,$$ and the error dynamics are given by $$\dot{e}=\dot{\theta}=\omega.$$ The relative degree of the system is $\gamma=1$, so by driving the error to 0, the $x$ and $y$ position will not be controlled, which makes sense.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The question is, what angular velocity should be applied to drive the error to zero? Because the error dynamics are a single integrator, linear system, they can be exponentially stabilized by correctly choosing $\omega$; this is where PID control comes in. Recall the definition of PID control and putting it in the context of the system: $$\omega=K_p e+K_i \int_0^t{e dt} + K_d \frac{de}{dt}.$$ As it turns out, because there is no drift term (e.g. the system is given by $x=f(x)+g(x)u=g(x)u \implies f(x)=0$), you can set $K_d=K_i=0$ and simply choose $K_p&amp;lt;0$ to accomplish the objective. On a real system, where the unicycle model is not accurate, there may be cause to include the integral and derivative terms. Knowing the process to get to this point, in addition to your existing intuition about what PID does, will definitely help on your test.&lt;/p&gt;&#xA;" OwnerUserId="9585" LastActivityDate="2016-05-14T01:00:01.940" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9839" PostTypeId="1" AcceptedAnswerId="9847" CreationDate="2016-05-14T02:54:51.380" Score="1" ViewCount="65" Body="&lt;p&gt;I'm trying to build a test-automation robotic arm which can repeatedly present an ID-tag (such as RFID or NFC card or fob) to a card reader.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suspect our reader fails either (a) after hundreds of presentations or due to fast presentations or (b) at a specific &lt;em&gt;moment&lt;/em&gt; in the reader duty cycle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The tag needs to move in a well-controlled manner:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Quickly present the card, &lt;/li&gt;&#xA;&lt;li&gt;Pause (mark)&lt;/li&gt;&#xA;&lt;li&gt;Quickly remove the card,&lt;/li&gt;&#xA;&lt;li&gt;Pause (space)&lt;/li&gt;&#xA;&lt;li&gt;Repeat at 1.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I'm calling the present/remove sequence the mark-space ratio for simplicity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The tests I want to perform involve varying (a) the frequency and (b) the mark-space ratio, to (a) stress-test and  (b) boundary-test the re-presentation guard times built into the reader to debounce presentations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The guard times are around 400ms, response around 100ms, so I need something that can move in and out of a 5-10cm range quickly and repeat within those sorts of timescales. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The distance the card needs to move depends on the reader model, as they have different field ranges. I want to get through the edge of the field quickly to avoid any inconsistencies in testing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm able to do any programming (professional) and simple electromechanical design and build (ex-professional, now hobbyist). I only need to build one, it doesn't have to be particularly robust, but it does need to be fairly accurate with regard to the timings to do the second test.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I've done so far:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've built one version already using a Raspberry Pi, GPIO, a stepper motor with an aluminium arm screwed to a wheel.  It works, but it's a bit jerky and too slow, even with a 30cm arm to amplify the motion. It will probably do for the repeat test, but it's not time-accurate enough to do the timing tests.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My other design ideas were: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Servo (are these also slow?)&lt;/li&gt;&#xA;&lt;li&gt;Solenoid (fast, but too limited range? and might cause EM?)&lt;/li&gt;&#xA;&lt;li&gt;Motor (too uncontrollable, and will require too much mechanical work for me)&lt;/li&gt;&#xA;&lt;li&gt;Rotating drum (fast, stable, but cannot control mark-space ratio)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I'm not a electro-mechanical design expert, so I'm wondering if I'm missing an electrical device or mechanical design which can do this more easily.&lt;/p&gt;&#xA;" OwnerUserId="13687" LastEditorUserId="9176" LastEditDate="2016-05-16T09:56:45.957" LastActivityDate="2016-05-16T09:56:45.957" Title="Which mechanical device could repeatedly present an ID tag to a card-reader" Tags="&lt;robotic-arm&gt;&lt;raspberry-pi&gt;&lt;stepper-motor&gt;&lt;industrial-robot&gt;&lt;automation&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="9840" PostTypeId="1" CreationDate="2016-05-14T09:51:44.853" Score="1" ViewCount="216" Body="&lt;p&gt;I am presently doing a robotics project. I am using USARSIM (Urban Search and Rescue Simulation) to spawn a robot. I am trying to create different behaviors, like: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;goal following behavior; &lt;/li&gt;&#xA;&lt;li&gt;obstacle avoidance behavior, and; &lt;/li&gt;&#xA;&lt;li&gt;wall following behavior for my robot. &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I first generate the robots in USARSIM. Then I specify a goal location to the robot and provide it with a speed. The robot then moves to the goal location at the specified speed. USARSIM provides me the (x, y, z) coordinates of the vehicle at every time stamp. Based on the the coordinates received, I am trying to calculate the instantaneous speed of the robot at every time stamp. The instantaneous speed graph is fluctuating a lot. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a specific case, I am providing the robot with 0.2 m/s. The velocity profile is shown below. I am unable to understand the reason behind it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/731c5.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/731c5.png&quot; alt=&quot;The velocity profile of my robot&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are some observations that I have made. &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;As I increase the speed of the robot, the variations are decreasing.&lt;/li&gt;&#xA;&lt;li&gt;Suppose, I provide a straight trajectory to the robot, it doesn't follow the straight trajectory. Does it explain why my velocity profile is fluctuating a lot ? &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/i7DHF.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/i7DHF.png&quot; alt=&quot;Graph of &amp;quot;Provided trajectory&amp;quot; versus &amp;quot;Followed trajectory&amp;quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please let me know if any one can provide me a possible explanation for the variance in my velocity profile.&lt;/p&gt;&#xA;" OwnerUserId="13692" LastEditorUserId="9176" LastEditDate="2016-05-16T11:46:17.463" LastActivityDate="2016-09-14T20:48:39.190" Title="The velocity profile of my robot is fluctuating" Tags="&lt;mobile-robot&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9842" PostTypeId="1" CreationDate="2016-05-14T12:05:30.613" Score="3" ViewCount="1668" Body="&lt;p&gt;I need to compute the Voronoi diagram for a map with some obstacles but I can't find any pseudo-code or example in MATLAB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &quot;voronoi&quot; function in MATLAB works with points, but in this case the obstacles are polygons (convex and non-convex). You can see the map in the attached image.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/XmMdq.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XmMdq.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because the obstacles are polygons I found that the Voronoi algorithm needed is the GVD (Generalized Voronoi Diagram).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone help with code or examples on internet explaining how to compute this GVD?&lt;/p&gt;&#xA;" OwnerUserId="11050" LastActivityDate="2016-07-27T10:45:38.133" Title="Generalized Voronoi Diagram" Tags="&lt;mobile-robot&gt;&lt;motion-planning&gt;&lt;geometry&gt;" AnswerCount="3" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9843" PostTypeId="2" ParentId="9842" CreationDate="2016-05-14T14:02:24.457" Score="1" Body="&lt;p&gt;The project repositories at Florida State should get you what you are looking for:  &lt;a href=&quot;https://people.sc.fsu.edu/~jburkardt/m_src/m_src.html&quot; rel=&quot;nofollow&quot;&gt;https://people.sc.fsu.edu/~jburkardt/m_src/m_src.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Look at not only the projects which start with &quot;voronoi_,&quot; but also &quot;sphere_voronoi.&quot;&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2016-05-14T14:02:24.457" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9845" PostTypeId="1" AcceptedAnswerId="9846" CreationDate="2016-05-14T16:58:48.057" Score="2" ViewCount="681" Body="&lt;p&gt;I at moment trying to convince myself that what I need is a simple path planning algorithm, instead of linearly interpolating between a current and a desired state. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am at moment working with an robot arm (UR) with an camera mounted on to its TCP.  The application i am trying to create is a simple ball tracking application which tracks the movement of the ball, while always keeping the object within sight. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;which meant that I needed some form of path planning algorithm which plans the path between my current state and the desired state. The path should should be such that the ball is always kept in focus while the arm moves to the desired state.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But then I began question myself whether it was a bit overkill, and whether a simple straight line interpolation wouldn't suffice?.. I am actual not sure what form of benefit i would have by choosing a pathplanner, than a simple interpolation..&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Interpolation would also generate the path I desire, so why choose a pathPlanner at all?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;would someone elaborate?&#xA;It should be noted that obstacle avoidance is also a part of the task, which could cause trouble for a straight line interpolating. &lt;/p&gt;&#xA;" OwnerUserId="13439" LastEditorUserId="13439" LastEditDate="2016-05-14T17:20:06.737" LastActivityDate="2016-05-14T17:24:19.413" Title="Path planning vs. linear interpolation?" Tags="&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9846" PostTypeId="2" ParentId="9845" CreationDate="2016-05-14T17:24:19.413" Score="2" Body="&lt;p&gt;Path planning is essentially obstacle avoidance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If there are no obstacles, chances are path planning is Overkill. However, one obstacle that you always have and that is a constraint for the configuration space is the robot itself. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now if you have no obstacles and start and end configurations can be connected by a straight line in configuration space, the task of path planning indeed simplifies to knowing the line that connect them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Especially if the camera captures images frequently, movement will be small.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;a &lt;em&gt;simple&lt;/em&gt; path planning algorithm&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There's no such thing. You need to define configuration space which gets very complicated with higher dimensions, perform all kinds of geometric operations on it and finally have some algorithm navigate through it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd say it's not just over-kill, it's over-annihilation.&lt;/p&gt;&#xA;" OwnerUserId="9860" LastActivityDate="2016-05-14T17:24:19.413" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="9847" PostTypeId="2" ParentId="9839" CreationDate="2016-05-14T18:23:15.773" Score="1" Body="&lt;p&gt;I'd go for a linear axis. The cheapest version could be from a printer or you buy a small belt and two gears. A brushless DC would however fit better in this scenario. Such systems are easily faster than a normal user and easy to control. &lt;/p&gt;&#xA;" OwnerUserId="23196" LastActivityDate="2016-05-14T18:23:15.773" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="9848" PostTypeId="1" CreationDate="2016-05-14T19:35:29.033" Score="6" ViewCount="208" Body="&lt;p&gt;I am at moment trying to implement a visual servoing application. &#xA;the robot I am using is a UR5, and TCP has a stereo camera mounted on to it. The idea is to move the end effector according to the object being tracked. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The path-planning algorithm for this system should comply with some rules. &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The path which it creates should be collision free, and always keep the object being tracked at sight at all time. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Having a path that keeps the object in sight has been bit of problem.  Sometime will the end effector rotate around itself, messing up  measurements taken and thus the tracking itself. &lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;It should be able to maneuver away from static obstacles. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;A Possible solution?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I thought of a possible solution. Since my current state and desired state is defined by two different sphere, A possible solution would be to create a straight line between each center of each sphere, and between the current position and desired position, such that a straight path in between could be computed easily.  which always keeps itself oriented toward the object. Problems is that I am not sure how I should handle collision here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/kyJdi.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kyJdi.jpg&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;&#xA;  Or use it as a heuristic for a heuristic based path planning? &lt;/p&gt;&#xA;" OwnerUserId="13439" LastEditorUserId="10596" LastEditDate="2016-05-16T12:35:28.560" LastActivityDate="2017-02-20T17:58:10.310" Title="Path planning for visual servoing" Tags="&lt;robotic-arm&gt;&lt;motion-planning&gt;&lt;algorithm&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9850" PostTypeId="1" AcceptedAnswerId="9855" CreationDate="2016-05-15T10:09:37.157" Score="0" ViewCount="1457" Body="&lt;p&gt;Good day I would just like to ask if a fixed wing aircraft such as a glider(without thrust capability therefore needs external forces such as air flow to move constraining its movement) can be considered a non-holonomic system considering the fact that it cannot move freely compared to a quadcopter that is holonomic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;I found this information from:&lt;/strong&gt; &lt;a href=&quot;https://robotics.stackexchange.com/questions/9642/whats-the-difference-between-a-holonomic-and-a-nonholonomic-system&quot;&gt;What&amp;#39;s the difference between a holonomic and a nonholonomic system?&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mathematically:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Holonomic system are systems for which all constraints are integrable into positional constraints.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nonholonomic systems are systems which have constraints that are nonintegrable into positional constraints.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Intuitively:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Holonomic system where a robot can move in any direction in the configuration space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nonholonomic systems are systems where the velocities (magnitude and or direction) and other derivatives of the position are constraint.&lt;/p&gt;&#xA;" OwnerUserId="11311" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2021-05-11T07:03:03.023" Title="Holonomic and Non-holonomic UAV's: Gliders vs Quadcopters" Tags="&lt;quadcopter&gt;&lt;control&gt;&lt;uav&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9851" PostTypeId="1" CreationDate="2016-05-15T12:41:52.097" Score="2" ViewCount="993" Body="&lt;p&gt;I would like to build a visual SLAM robot (just for self-learning purpose) but I get frustrated how I know which processor and camera should be used for visual SLAM.&lt;/p&gt;&#xA;&lt;p&gt;First, for the processor, I have seen three articles, which shows different systems are used for implementing their SLAM algorithm:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Implementing SLAM algorithm (however it uses ultrasonic sensor rather than visual sensor) in Raspberry Pi (processing power is only 700 MHz) in &lt;a href=&quot;http://www.academia.edu/11312106/Implementing_Odometry_and_SLAM_Algorithms_on_a_Raspberry_Pi_to_Drive_a_Rover&quot; rel=&quot;nofollow noreferrer&quot;&gt;Implementing Odometry and SLAM Algorithms on a Raspberry Pi to Drive a Rover&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I have also seen that Boston Dynamics use Pentium CPU, PC104 stack and QNX OS for their Big Dog project, &lt;a href=&quot;http://www.bostondynamics.com/img/BigDog_Overview.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;BigDog Overview&#xA;November 22, 2008&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Then, I also found a project uses a modern XILINX Zynq-7020 System-on-Chip (a device that combines FPGA resources with a dual ARM Cortex-A9 on&#xA;a single chip), for a Synchronized Visual-Inertial Sensor System, in &lt;a href=&quot;http://ieeexplore.ieee.org/xpl/login.jsp?tp=&amp;amp;arnumber=6906892&amp;amp;url=http%3A%2F%2Fieeexplore.ieee.org%2Fxpls%2Fabs_all.jsp%3Farnumber%3D6906892&quot; rel=&quot;nofollow noreferrer&quot;&gt;A synchronized visual-inertial sensor system with FPGA pre-processing for accurate real-time SLAM&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;But after reading those, I have no clue how they end up with those decisions to use those kinds of processors, stacks or even OSes for their project. Is there a mathematical way, or a general practice, to evaluate the minimum requirement of the system (as cheap and as power efficient as possible) for an algorithm to run?&lt;/p&gt;&#xA;&lt;p&gt;If not, how could I know what processor or system I have to prepare for a visual SLAM robot? If there is no simple answer, it is also cool if you can recommend something I could read to have a good start.&lt;/p&gt;&#xA;&lt;p&gt;Secondly, I also cannot find clear information which camera I should use for a visual SLAM robot. I also have no idea how they evaluate the minimum requirement of the camera. I found a lot of papers saying they use RGB-D camera but when I Google to find one, there are very few commercially available. The one I found is Xtion Pro Live from ASUS Global (for $170). Are there any practice I can choose a suitable camera system for visual SLAM too?&lt;/p&gt;&#xA;" OwnerUserId="13702" LastEditorUserId="13702" LastEditDate="2020-09-11T19:26:27.197" LastActivityDate="2020-09-11T19:26:27.197" Title="How do I evaluate the minimum requirements of the processor and camera for a visual SLAM robot?" Tags="&lt;slam&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="9853" PostTypeId="1" CreationDate="2016-05-16T02:58:59.720" Score="3" ViewCount="363" Body="&lt;p&gt;I have a &lt;a href=&quot;http://www.robotnik.eu/robotics-arms/robotis-manipulator/&quot; rel=&quot;nofollow&quot;&gt;6DOF robotic arm&lt;/a&gt; which I am using to throw a ball. Each joint can achieve a maximum velocity of 30 RPM (180 deg/s). I have been trying to generate joint angles manually and feeding them to see how far I can throw the ball until now. This has shown me that it's like less than 2 meters. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I feel that I may not be combining the motions of the various motors in order get better throwing distance. I wanted to know if there is a simple way of theoretically determining the maximum distance I can throw. I read a few papers that appear very complicated, I do not need a very accurate value, just an estimate so that I decide whether I should move to a different arm. &lt;/p&gt;&#xA;" OwnerUserId="13709" LastEditorUserId="9176" LastEditDate="2016-05-16T11:45:13.020" LastActivityDate="2016-05-16T11:45:13.020" Title="Maximum distance for robotic arm throwing" Tags="&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9854" PostTypeId="2" ParentId="9853" CreationDate="2016-05-16T07:16:52.500" Score="1" Body="&lt;p&gt;Throwing distance is dependent on the initial velocity of the ball thrown and the heading angle. Both of these is given by the robot arm.&#xA;The velocity is simple, as large as possible. However the angle is not that simple. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can find the optimal throwing angle calculations here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.wired.com/2008/12/what-angle-should-you-throw-a-football-for-maximum-range/&quot; rel=&quot;nofollow&quot;&gt;What angle should you throw a football for maximum range?&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This defines the orientation of the robot. I would recommend:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;representing every position of the end-effector that can reach this orientation in joint space. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Then select the point in joint space which is on the obtained surface (might be a volume or hypervolume based on the number of degrees of freedom of the robot) which has enough distance from the joint limits to reach maximum velocity. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;You can see how much &quot;overhead&quot; space do you need by knowing the maximum acceleration of the robot and checking how much angular distance do you need to reach maximum joint velocity if you accelerate from 0 speed to maximum speed with maximum acceleration.&#xA;-OR-&#xA;Just pick the point that is on the orientation surface and is the furthest away from joint limits. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;--- EDIT: ---&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As @Bending Unit 22 pointed out in the comments, you should select the highest possible position form the ones that satisfy the constrains in point 2. &lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2016-05-16T10:47:21.053" LastActivityDate="2016-05-16T10:47:21.053" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9855" PostTypeId="2" ParentId="9850" CreationDate="2016-05-16T07:47:17.037" Score="4" Body="&lt;p&gt;The glider definitely is a nonholomonic system, but not (only) because it has no propulsion.&lt;/p&gt;&#xA;&lt;p&gt;As Wikipedia defines it:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A nonholonomic system in physics and mathematics is a system whose state depends on the path taken in order to achieve it.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So, if an aircraft can reach a pose (position and orientation) in space regardless of its prior states (path taken) than it is holomonic. To simplify it even more:&lt;/p&gt;&#xA;&lt;p&gt;A car is a nonholomonic system. It can occupy any position (in 2D, X and Y translations) and orientation (1 orientation around the Z axiz, perpendicular to the road) but what makes it nonholominic is its steering system which does not allow it to move sideways. It can occupy the position just 1 mm (or &lt;span class=&quot;math-container&quot;&gt;$\delta y$&lt;/span&gt; distance) to the right of its current position, but ONLY if an adecvate path leads the car to that position.&lt;/p&gt;&#xA;&lt;p&gt;An omnidirectional robot (e.g. with mecanum wheels, &lt;a href=&quot;https://www.google.com/search?q=omni%20directional%20robot&quot; rel=&quot;nofollow noreferrer&quot;&gt;Google search it&lt;/a&gt;) is holomonic because it can occupy any pose (2 translations 1 orientation) regardless of its previous states (path taken). It can move to the immediate right, unlike the car, with &lt;span class=&quot;math-container&quot;&gt;$\delta y$&lt;/span&gt; distance.&lt;/p&gt;&#xA;&lt;p&gt;You might want to take a look at underactuated systems. Those are the ones that require external forces.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="24820" LastEditDate="2021-05-11T07:03:03.023" LastActivityDate="2021-05-11T07:03:03.023" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="9856" PostTypeId="1" AcceptedAnswerId="9857" CreationDate="2016-05-16T08:55:30.147" Score="0" ViewCount="48" Body="&lt;p&gt;Is it possible to perform cosine interpolation between two transformation matrices?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It make sense for the translation part, but how about the rotational part?&lt;/p&gt;&#xA;" OwnerUserId="13698" LastActivityDate="2016-05-16T09:08:56.833" Title="Cosine interpolation between two transformation matrices?" Tags="&lt;robotic-arm&gt;&lt;stereo-vision&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9857" PostTypeId="2" ParentId="9856" CreationDate="2016-05-16T09:08:56.833" Score="2" Body="&lt;p&gt;Yes, you can. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;same as for the translations, you extract the 3 angles form the matrix, you have the starting angles and the target angles. Interpolate as you wish (sync-async, cos-spline-linear) and for each timestamp you can re-create the matrix (knowing the 3 angels and the 3 translations).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Advantage for cos-interpolation would be the continuity of higher order derivates (same as in the case of the interpolation for the linear axes)&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2016-05-16T09:08:56.833" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9858" PostTypeId="2" ParentId="9840" CreationDate="2016-05-16T09:18:20.677" Score="1" Body="&lt;p&gt;There can be many reasons for the fluctuating velocity. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The most commons is errors due to the finite differences method that I assume you are using. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the system is not real time, the interrupt when you measure the distance might be sometimes later sometimes earlier then expected. Since the velocity you ploted is always below the target velocity and never above...there might be a nother problem in your case. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do not know the simulation system you mentioned, but if it is not a real-time simulation system there is a possiblity that the simulation is tardy. Events in simulation happen later then in your computer clock. 1 second of simulation takes 1.2 seconds to calculate for example. If you use a real-time clock to get the interrupts and use that time to calculate the velocity, you think you are at simulation time 1 second but you are actually at simulation time 0.85 seconds, so the distance that should be covered in this time was not yet covered hence you get a lower velocity. This would also mean that your velocity should slowly drift downwards, which is not happening. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you do not use a fixed time solver for the simulation, it might be that sometimes you are blow the simulation time sometimes you are &quot;catching up&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It might very well be a combination of the above. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;These are just guesses. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are you using the time as a fixed interrupt or do you interrogate the simulation environment for the simulation time?&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2016-05-16T09:18:20.677" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9859" PostTypeId="5" CreationDate="2016-05-16T12:24:13.713" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2016-05-16T12:24:13.713" LastActivityDate="2016-05-16T12:24:13.713" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9860" PostTypeId="4" CreationDate="2016-05-16T12:24:13.713" Score="0" Body="OpenCV (Open Source Computer Vision) is a cross-platform library of programming functions for real time computer vision." OwnerUserId="10596" LastEditorUserId="10596" LastEditDate="2016-05-16T16:37:40.437" LastActivityDate="2016-05-16T16:37:40.437" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9861" PostTypeId="5" CreationDate="2016-05-16T12:36:13.677" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2016-05-16T12:36:13.677" LastActivityDate="2016-05-16T12:36:13.677" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9862" PostTypeId="4" CreationDate="2016-05-16T12:36:13.677" Score="0" Body="H-bridge is common circuit used for applications where there is a need to reverse the direction of current flow. Such application is for example: reversible motor control." OwnerUserId="10596" LastEditorUserId="10596" LastEditDate="2016-05-17T09:35:52.753" LastActivityDate="2016-05-17T09:35:52.753" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9863" PostTypeId="1" AcceptedAnswerId="9868" CreationDate="2016-05-16T13:40:26.823" Score="1" ViewCount="460" Body="&lt;p&gt;I need to calculate the configuration space obstacle to planning a path with a mobile robot. The idea is to divide the obstacles and the robot in triangles and test whether is there any triangle from the robot colliding with any triangle from the obstacles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The approach to solve this is to test this between two triangles each time so I need to look if any of the 6 edges (3 for each triangle) divide the triangles so 3 vertex from one of them lie in one side and the other 3 vertex lie on the other side of the line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wrote some code to calculate the line equation (y = m*x + b) and I think it is correct, but I am having problems when the line is vertical (this means that m = -Inf) because MATLAB gives me a NaN when I calculate the equation for it. I am not sure how to handle this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here you can see a snippet from the code where I test the 3 edges from the &#xA;robot triangle:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;for i = 1:1:3&#xA;&#xA;    vertex_x = P1(edge(i,:),1);&#xA;    vertex_y = P1(edge(i,:),2);&#xA;    m = (vertex_y(2) - vertex_y(1))/(vertex_x(2) - vertex_x(1));&#xA;    b = -m*vertex_x(1) + vertex_y(1);&#xA;&#xA;    for j = 1:1:6   % For each vertex...&#xA;        pto = listaVertices(j,:);&#xA;        if (m*pto(1) + b &amp;gt; pto(2))&#xA;            % Vertex lies below the edge...&#xA;            cont1 = cont1 + 1;&#xA;        elseif (m*pto(1) + b &amp;lt; pto(2))&#xA;            % Vertex lies above the edge...&#xA;            cont2 = cont2 + 1;&#xA;        else&#xA;            % Vertex lie inside the edge...&#xA;            % Do nothing&#xA;        end&#xA;    end &#xA;&#xA;    % 3 vertex on one side and 1 on the others side means they do not&#xA;    % collide. Two of the vertex always lie inside the line (the two vertex &#xA;    % of each edge).&#xA;&#xA;    if (cont1 == 1 &amp;amp;&amp;amp; cont2 == 3) || (cont1 == 3 &amp;amp;&amp;amp; cont2 == 1)&#xA;        flag_aux = false;   % Do not collide...&#xA;    end&#xA;    % Reset the counters for the 3 next edges...&#xA;    cont1 = 0;&#xA;    cont2 = 0;&#xA;&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Anyone could help with this issue?&lt;/p&gt;&#xA;" OwnerUserId="11050" LastActivityDate="2016-05-16T16:12:26.277" Title="Configuration space obstacle - calculating collision" Tags="&lt;mobile-robot&gt;&lt;motion-planning&gt;&lt;matlab&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9864" PostTypeId="5" CreationDate="2016-05-16T15:39:11.913" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2016-05-16T15:39:11.913" LastActivityDate="2016-05-16T15:39:11.913" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9865" PostTypeId="4" CreationDate="2016-05-16T15:39:11.913" Score="0" Body="In general a filter is what removes noise and other unwanted components from the useful signal. It can be analog or digital filter and also there are many software implemented filters. " OwnerUserId="10596" LastEditorUserId="10596" LastEditDate="2016-05-17T09:35:41.690" LastActivityDate="2016-05-17T09:35:41.690" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9866" PostTypeId="5" CreationDate="2016-05-16T15:44:34.400" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2016-05-16T15:44:34.400" LastActivityDate="2016-05-16T15:44:34.400" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9867" PostTypeId="4" CreationDate="2016-05-16T15:44:34.400" Score="0" Body="Wheeled-robot is a subtype of mobile robots which uses motor driven wheel(s) to be able to move." OwnerUserId="10596" LastEditorUserId="10596" LastEditDate="2016-05-16T20:02:42.823" LastActivityDate="2016-05-16T20:02:42.823" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9868" PostTypeId="2" ParentId="9863" CreationDate="2016-05-16T16:12:26.277" Score="0" Body="&lt;p&gt;For your particular question about m = Inf, you should first check if &#xA;vertex_x(2) = vertex_x(1).  Actually, I would implement the check to see if the absolute value of vertex_x(2) - vertex_x(1) &amp;lt; &lt;em&gt;some_very_small_number&lt;/em&gt;.  If that condition is true, then the equation for that line segment is y = vertex_x(1) and you just need to see if the other line segment contains that value for x.  If the condition is false then use the check you already have.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2016-05-16T16:12:26.277" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9869" PostTypeId="2" ParentId="9825" CreationDate="2016-05-16T20:05:48.140" Score="1" Body="&lt;p&gt;I think I may have reason for your reviewer's caution. You are updating the proportional gain of a PID controller, and you are concerned with the stability of your update law. Restating your update: $$K_p(t+1)=K_p+e(t)(\mu_1(Pe(t))+\mu_4(Pe(t))).$$ You have re-stated that $e(t)$ is the difference, which means that the error is not positive semi-definite ($e(t)\geq 0$). However, the membership functions $\mu_1$ and $\mu_4$ are positive semi-definite; this implies that $E(t)=e(t)(\mu_1(Pe(t))+\mu_4(Pe(t)))$ is either positive or negative semi-definite, which means that $K_p$ grows unbounded in some region $D$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;At this point, it is clear that the update law is not stable in some region (in the sense of Lyapunov) for $e(t)\neq 0$. We can substantiate this with discrete-time Lyapunov analysis. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$Proof:$ Dropping the time dependence for clarity, let $$V(K_p)=\frac{1}{2}K_p^2$$ be a candidate Lyapunov function. The rate of change along solutions is given by $$\begin{align}\nabla V(K_p)&amp;amp;=V(K_p+E)-V(K_p)\\&amp;amp;=\frac{1}{2}(K_p+E)^2-\frac{1}{2}K_p^2\\&amp;amp;=K_pE+\frac{1}{2}E^2\end{align}.$$ &#xA;For stability of the system, we must have $\nabla V(K_p)&amp;lt;0$. This implies $$K_pE+\frac{1}{2}E^2&amp;lt;0$$$$\to K_p&amp;lt;-\frac{1}{2}E.$$ We can conclude from converse Lyapunov results that the system is unstable for at least $K_p&amp;gt;-\frac{1}{2}E$, which is an obvious reason for concern. There may be a better Lyapunov candidate function to demonstrate this result, but we can be sure that the system is locally unstable.&lt;/p&gt;&#xA;" OwnerUserId="9585" LastEditorUserId="9585" LastEditDate="2016-06-16T15:47:55.407" LastActivityDate="2016-06-16T15:47:55.407" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="9871" PostTypeId="1" AcceptedAnswerId="9874" CreationDate="2016-05-17T08:48:39.467" Score="1" ViewCount="660" Body="&lt;p&gt;I am not sure how i should explain this, I am looking for a way to plot the trajectory an robot arm.  An object is seen from the toolFrame frame, but how do I plot the position of each joint, such that the frame they uses are the same.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One way would be to use the world frame as reference, but how would i plot the position of the object related to the world frame?&lt;/p&gt;&#xA;" OwnerUserId="13439" LastEditorUserId="9860" LastEditDate="2016-05-17T13:39:34.547" LastActivityDate="2016-05-19T21:02:58.130" Title="convert toolframe coordinate to world frame coordinates?" Tags="&lt;kinematics&gt;&lt;matlab&gt;&lt;visualization&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="9872" PostTypeId="5" CreationDate="2016-05-17T11:35:08.370" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2016-05-17T11:35:08.370" LastActivityDate="2016-05-17T11:35:08.370" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9873" PostTypeId="4" CreationDate="2016-05-17T11:35:08.370" Score="0" Body="Type of robots, which resemble a human in its shape." OwnerUserId="10596" LastEditorUserId="10596" LastEditDate="2016-05-17T22:48:14.953" LastActivityDate="2016-05-17T22:48:14.953" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9874" PostTypeId="2" ParentId="9871" CreationDate="2016-05-17T12:03:26.513" Score="2" Body="&lt;p&gt;Assuming you have solved the inverse kinematics (IK) problem already...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suppose you have a transformation matrix for each joint, build up from one line in the DH table (if you used DH to describe the robot).&#xA;Form the IK you have obtained&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$Q = [q_1, q_2, q_3, q_4, q_5, q_6]$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Having all Q values you can now write:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$H_{0,1} = A_1(q_1)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\Rightarrow$ $H_{0,1}(1:3, 4)$ will give you the $x$, $y$ and $z$ Coordinates of joint 1&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$H_{0,2} = H_{0,1}*A_2(q_2)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\Rightarrow$ $H_{0,2}(1:3, 4)$ will give you the $x$, $y$ and $z$ Coordinates of joint 2&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$H_{0,3} = H_{0,2}*A_3(q_3)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\Rightarrow$ $H_{0,3}(1:3, 4)$ will give you the $x$, $y$ and $z$ Coordinates of joint 3&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$H_{0,4} = H_{0,3}*A_4(q_4)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\Rightarrow$ $H_{0,4}(1:3, 4)$ will give you the $x$, $y$ and $z$ Coordinates of joint 4&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$H_{0,5} = H_{0,4}*A_5(q_5)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\Rightarrow$ $H_{0,5}(1:3, 4)$ will give you the $x$, $y$ and $z$ Coordinates of joint 5&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$H_{0,6} = H_{0,5}*A_6(q_6)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\Rightarrow$ $H_{0,6}(1:3, 4)$ will give you the $x$, $y$ and $z$ Coordinates of joint 6&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$H_{0,tool} = H_{0,6}*A_{tool}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;where&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;$A_i$ is the DH-transformation matrix associated with joint $i$.&lt;/li&gt;&#xA;&lt;li&gt;the index $_0$ represents the world frame&lt;/li&gt;&#xA;&lt;li&gt;the intex $_{tool}$ represents the tool frame&lt;/li&gt;&#xA;&lt;li&gt;$H_{i,j}$ represent the transformation matrix from frame $i$ to frame $j$&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2016-05-19T21:02:58.130" LastActivityDate="2016-05-19T21:02:58.130" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="9875" PostTypeId="2" ParentId="1020" CreationDate="2016-05-17T14:26:06.883" Score="0" Body="&lt;p&gt;Well you don't need any line for that matter. The one thing you would probably need are global coordinates. if you can place your robot in a field defined by global coordinates and apply simple rules of Newtonian physics, the robot can go from one point to the other. Based on it's present location, it will find out the present steering angle, desired steering angle and the goal coordinates (also known as &quot;pose&quot;). Once you provide the robot with a speed, it will start moving towards the goal coordinates. In every iteration, it will recalculate its pose and make adjustments when necessary.&lt;/p&gt;&#xA;" OwnerUserId="13694" LastActivityDate="2016-05-17T14:26:06.883" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9885" PostTypeId="5" CreationDate="2016-05-19T10:34:44.787" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2016-05-19T10:34:44.787" LastActivityDate="2016-05-19T10:34:44.787" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9886" PostTypeId="4" CreationDate="2016-05-19T10:34:44.787" Score="0" Body="Correlate the readings of a robot's instrument, sensor, etc. with those of a standard in order to check its accuracy.&#xD;&#xA;Adjust experimental results to take external factors into account or to allow comparison with other data." OwnerUserId="10596" LastEditorUserId="10596" LastEditDate="2016-05-20T17:34:34.317" LastActivityDate="2016-05-20T17:34:34.317" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9887" PostTypeId="5" CreationDate="2016-05-19T11:06:50.433" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2016-05-19T11:06:50.433" LastActivityDate="2016-05-19T11:06:50.433" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9888" PostTypeId="4" CreationDate="2016-05-19T11:06:50.433" Score="0" Body="SONAR stands for SOund Navigation And Ranging, it is a technique that uses sound waves to detect objects or to navigate." OwnerUserId="10596" LastEditorUserId="10596" LastEditDate="2016-05-20T17:34:52.600" LastActivityDate="2016-05-20T17:34:52.600" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9892" PostTypeId="1" CreationDate="2016-05-20T01:30:57.550" Score="0" ViewCount="56" Body="&lt;p&gt;I tried to use Microsoft Robotics Dev Studio (sample 4) to write a code that was able for robot to go with a square path by just one clicked. However, there is one problem.&#xA;When I try to put DriveDistanceRequest and RotateDegreesRequest in a loop. It would only execute the last request. The problem is that Arbiter.Choice within the DriveDistance is activated immediately as soon as the drive operation starts. Did anyone have this kind of problem before? If so, how do I solve it? If no, how am I able to fix this problem? Thanks your so much.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;//-----------------------------------------------------------------------&lt;/p&gt;&#xA;&#xA;&lt;p&gt;//  This file is part of Microsoft Robotics Developer Studio Code Samples.&#xA;//&lt;/p&gt;&#xA;&#xA;&lt;p&gt;//  Copyright (C) Microsoft Corporation.  All rights reserved.&#xA;//&lt;/p&gt;&#xA;&#xA;&lt;p&gt;//  $File: RoboticsTutorial4.cs $ $Revision: 22 $&lt;/p&gt;&#xA;&#xA;&lt;p&gt;//-----------------------------------------------------------------------&lt;/p&gt;&#xA;&#xA;&lt;p&gt;using Microsoft.Ccr.Core;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;using Microsoft.Ccr.Adapters.WinForms;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;using Microsoft.Dss.Core;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;using Microsoft.Dss.Core.Attributes;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;using Microsoft.Dss.ServiceModel.Dssp;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;using Microsoft.Dss.ServiceModel.DsspServiceBase;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;using System;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;using System.Collections.Generic;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;using System.Security.Permissions;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;using xml = System.Xml;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;using drive = Microsoft.Robotics.Services.Drive.Proxy;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;using W3C.Soap;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;using Microsoft.Robotics.Services.RoboticsTutorial4.Properties;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;using Microsoft.Robotics.Services.Drive.Proxy;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;using System.ComponentModel;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;namespace Microsoft.Robotics.Services.RoboticsTutorial4&#xA;{&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[DisplayName(&quot;(User) Robotics Tutorial 4 (C#): Drive-By-Wire&quot;)]&#xA;[Description(&quot;This tutorial demonstrates how to create a service that partners with abstract, base definitions of hardware services.&quot;)]&#xA;[DssServiceDescription(&quot;http://msdn.microsoft.com/library/bb483053.aspx&quot;)]&#xA;[Contract(Contract.Identifier)]&#xA;public class RoboticsTutorial4 : DsspServiceBase&#xA;{&#xA;    [ServiceState]&#xA;    private RoboticsTutorial4State _state = new RoboticsTutorial4State();&#xA;&#xA;    [ServicePort(&quot;/RoboticsTutorial4&quot;, AllowMultipleInstances=false)]&#xA;    private RoboticsTutorial4Operations _mainPort = new RoboticsTutorial4Operations();&#xA;&#xA;    [Partner(&quot;Drive&quot;, Contract = drive.Contract.Identifier, CreationPolicy = PartnerCreationPolicy.UseExisting)]&#xA;    private drive.DriveOperations _drivePort = new drive.DriveOperations();&#xA;    private drive.DriveOperations _driveNotify = new drive.DriveOperations();&#xA;&#xA;    public RoboticsTutorial4(DsspServiceCreationPort creationPort) :&#xA;            base(creationPort)&#xA;    {&#xA;    }&#xA;&#xA;    #region CODECLIP 02-1&#xA;    protected override void Start()&#xA;    {&#xA;        base.Start();&#xA;&#xA;        WinFormsServicePort.Post(new RunForm(StartForm));&#xA;&#xA;        #region CODECLIP 01-5&#xA;        _drivePort.Subscribe(_driveNotify);&#xA;        Activate(Arbiter.Receive&amp;lt;drive.Update&amp;gt;(true, _driveNotify, NotifyDriveUpdate));&#xA;        #endregion&#xA;    }&#xA;    #endregion&#xA;&#xA;    #region CODECLIP 02-2&#xA;    private System.Windows.Forms.Form StartForm()&#xA;    {&#xA;        RoboticsTutorial4Form form = new RoboticsTutorial4Form(_mainPort);&#xA;&#xA;        Invoke(delegate()&#xA;            {&#xA;                PartnerType partner = FindPartner(&quot;Drive&quot;);&#xA;                Uri uri = new Uri(partner.Service);&#xA;                form.Text = string.Format(&#xA;                    Resources.Culture,&#xA;                    Resources.Title,&#xA;                    uri.AbsolutePath&#xA;                );&#xA;            }&#xA;        );&#xA;&#xA;        return form;&#xA;    }&#xA;    #endregion&#xA;&#xA;    #region CODECLIP 02-3&#xA;    private void Invoke(System.Windows.Forms.MethodInvoker mi)&#xA;    {&#xA;        WinFormsServicePort.Post(new FormInvoke(mi));&#xA;    }&#xA;    #endregion&#xA;&#xA;&#xA;    /// &amp;lt;summary&amp;gt;&#xA;    /// Replace Handler&#xA;    /// &amp;lt;/summary&amp;gt;&#xA;    [ServiceHandler(ServiceHandlerBehavior.Exclusive)]&#xA;    public virtual IEnumerator&amp;lt;ITask&amp;gt; ReplaceHandler(Replace replace)&#xA;    {&#xA;        _state = replace.Body;&#xA;        replace.ResponsePort.Post(DefaultReplaceResponseType.Instance);&#xA;        yield break;&#xA;    }&#xA;&#xA;    [ServiceHandler(ServiceHandlerBehavior.Concurrent)]&#xA;    //stop&#xA;    public virtual IEnumerator&amp;lt;ITask&amp;gt; StopHandler(Stop stop)&#xA;    {&#xA;        drive.SetDrivePowerRequest request = new drive.SetDrivePowerRequest();&#xA;        request.LeftWheelPower = 0;&#xA;        request.RightWheelPower = 0;&#xA;&#xA;        yield return Arbiter.Choice(&#xA;            _drivePort.SetDrivePower(request),&#xA;            delegate(DefaultUpdateResponseType response) { },&#xA;            delegate(Fault fault)&#xA;            {&#xA;                LogError(null, &quot;Unable to stop&quot;, fault);&#xA;            }&#xA;        );&#xA;    }&#xA;&#xA;    //forward&#xA;    #region CODECLIP 01-3 &#xA;    [ServiceHandler(ServiceHandlerBehavior.Concurrent)]&#xA;    //forward&#xA;    public virtual IEnumerator&amp;lt;ITask&amp;gt; ForwardHandler(Forward forward)&#xA;    {&#xA;        if (!_state.MotorEnabled)&#xA;        {&#xA;            yield return EnableMotor();&#xA;        }&#xA;        // movement speed&#xA;        // This sample sets the power to 75%.&#xA;        // Depending on your robotic hardware,&#xA;        // you may wish to change these values.&#xA;        drive.SetDrivePowerRequest request = new drive.SetDrivePowerRequest();&#xA;        request.LeftWheelPower = 0.5;&#xA;        request.RightWheelPower = 0.5;&#xA;&#xA;        yield return Arbiter.Choice(&#xA;            _drivePort.SetDrivePower(request),&#xA;            delegate(DefaultUpdateResponseType response) { },&#xA;            delegate(Fault fault)&#xA;            {&#xA;                LogError(null, &quot;Unable to drive forwards&quot;, fault);&#xA;            }&#xA;        );&#xA;    }&#xA;    #endregion&#xA;&#xA;    [ServiceHandler(ServiceHandlerBehavior.Concurrent)]&#xA;    // backup speed&#xA;    public virtual IEnumerator&amp;lt;ITask&amp;gt; BackwardHandler(Backward backward)&#xA;    {&#xA;        if (!_state.MotorEnabled)&#xA;        {&#xA;            yield return EnableMotor();&#xA;        }&#xA;&#xA;        drive.SetDrivePowerRequest request = new drive.SetDrivePowerRequest();          &#xA;        request.LeftWheelPower = -0.6;&#xA;        request.RightWheelPower = -0.6;&#xA;&#xA;        yield return Arbiter.Choice(&#xA;            _drivePort.SetDrivePower(request),&#xA;            delegate(DefaultUpdateResponseType response) { },&#xA;            delegate(Fault fault)&#xA;            {&#xA;                LogError(null, &quot;Unable to drive backwards&quot;, fault);&#xA;            }&#xA;        );&#xA;    }&#xA;&#xA;    [ServiceHandler(ServiceHandlerBehavior.Concurrent)]&#xA;    // left turn speed&#xA;    public virtual IEnumerator&amp;lt;ITask&amp;gt; TurnLeftHandler(TurnLeft turnLeft)&#xA;    {&#xA;        if (!_state.MotorEnabled)&#xA;        {&#xA;            yield return EnableMotor();&#xA;        }&#xA;&#xA;        drive.SetDrivePowerRequest request = new drive.SetDrivePowerRequest();&#xA;        request.LeftWheelPower = -0.5;&#xA;        request.RightWheelPower = 0.5;&#xA;&#xA;        yield return Arbiter.Choice(&#xA;            _drivePort.SetDrivePower(request),&#xA;            delegate(DefaultUpdateResponseType response) { },&#xA;            delegate(Fault fault)&#xA;            {&#xA;                LogError(null, &quot;Unable to turn left&quot;, fault);&#xA;            }&#xA;        );&#xA;    }&#xA;&#xA;    [ServiceHandler(ServiceHandlerBehavior.Concurrent)]&#xA;    // right turn speed&#xA;    public virtual IEnumerator&amp;lt;ITask&amp;gt; TurnRightHandler(TurnRight forward)&#xA;    {&#xA;        if (!_state.MotorEnabled)&#xA;        {&#xA;            yield return EnableMotor();&#xA;        }&#xA;&#xA;        drive.SetDrivePowerRequest request = new drive.SetDrivePowerRequest();&#xA;        request.LeftWheelPower = 0.5;&#xA;        request.RightWheelPower = -0.5;&#xA;&#xA;        yield return Arbiter.Choice(&#xA;            _drivePort.SetDrivePower(request),&#xA;            delegate(DefaultUpdateResponseType response) { },&#xA;            delegate(Fault fault)&#xA;            {&#xA;                LogError(null, &quot;Unable to turn right&quot;, fault);&#xA;            }&#xA;        );&#xA;    }&#xA;&#xA;    #region CODECLIP 01-4&#xA;    private Choice EnableMotor()&#xA;    {&#xA;        drive.EnableDriveRequest request = new drive.EnableDriveRequest();&#xA;        request.Enable = true;&#xA;&#xA;        return Arbiter.Choice(&#xA;            _drivePort.EnableDrive(request),&#xA;            delegate(DefaultUpdateResponseType response) { },&#xA;            delegate(Fault fault)&#xA;            {&#xA;                LogError(null, &quot;Unable to enable motor&quot;, fault);&#xA;            }&#xA;        );&#xA;    }&#xA;    #endregion&#xA;&#xA;    #region CODECLIP 01-6&#xA;    private void NotifyDriveUpdate(drive.Update update)&#xA;    {&#xA;        RoboticsTutorial4State state = new RoboticsTutorial4State();&#xA;        state.MotorEnabled = update.Body.IsEnabled;&#xA;&#xA;        _mainPort.Post(new Replace(state));&#xA;    }&#xA;    #endregion&#xA;&#xA;&#xA;    // Here is where I had change the code.&#xA;    #region Test Code (Creating Path)&#xA;    [ServiceHandler(ServiceHandlerBehavior.Concurrent)]&#xA;    public virtual IEnumerator&amp;lt;ITask&amp;gt; PathHandler(StartPath path)&#xA;    {&#xA;        if (!_state.MotorEnabled)&#xA;        {&#xA;            yield return EnableMotor();&#xA;        }&#xA;&#xA;        for(int i=1; i&amp;lt;3; i++)&#xA;        {&#xA;                if(i == 1)&#xA;                {&#xA;                    drive.DriveDistanceRequest distance = new drive.DriveDistanceRequest();&#xA;                    distance.Power = 1;&#xA;                    distance.Distance = 1;&#xA;&#xA;                    yield return Arbiter.Choice(&#xA;                        _drivePort.DriveDistance(distance),&#xA;                        delegate(DefaultUpdateResponseType response) { },&#xA;                        delegate(Fault fault)&#xA;                        {&#xA;                            LogError(null, &quot;Unable to turn left&quot;, fault);&#xA;                        }&#xA;                    );&#xA;&#xA;                }&#xA;                else if(i == 2)&#xA;                {&#xA;                    drive.RotateDegreesRequest rotate = new drive.RotateDegreesRequest();&#xA;                    rotate.Power = 1;&#xA;                    rotate.Degrees = 90;&#xA;&#xA;                    yield return Arbiter.Choice(&#xA;                        _drivePort.RotateDegrees(rotate),&#xA;                        delegate(DefaultUpdateResponseType response) { },&#xA;                        delegate(Fault fault)&#xA;                        {&#xA;                            LogError(null, &quot;Unable to turn left&quot;, fault);&#xA;                        }&#xA;                    );&#xA;                }&#xA;&#xA;        }&#xA;&#xA;    }&#xA;    #endregion&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;}&lt;/p&gt;&#xA;" OwnerDisplayName="user13748" LastEditorDisplayName="user13748" LastEditDate="2016-05-20T22:53:25.730" LastActivityDate="2016-05-20T22:53:25.730" Title="Issues with Running Multiple Instructions in Sequence" Tags="&lt;mobile-robot&gt;&lt;control&gt;&lt;irobot-create&gt;&lt;mrds&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9893" PostTypeId="1" CreationDate="2016-05-20T02:08:26.050" Score="5" ViewCount="1196" Body="&lt;p&gt;I am learning about robot kinematics and the Jacobian matrix, and I'm trying to understand how to compute the Jacobian matrix given a kinematic chain, such as a robot arm. I understand the theory behind the Jacobian matrix, but I'm not sure actually how it would be calculated in practice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, let's say that I have a 7 DoF robot arm, with 7 joints and 6 links between the joints. I know how to compute the transformation matrix between each joint, and by applying forward kinematics, I know the pose of the end effector for any configuration of joint angles. To calculate this, I have written some code which stores each transformation matrix, and then multiplies them in series to create the transformation matrix between the first joint and the end effector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, how do I now go about computing the Jacobian matrix? My solution so far, is to write down each transformation matrix by hand, then multiply them all by hand, to yield the overall transformation matrix, with respect to the joint angles. I could then differentiate this to create the Jacobian matrix. The problem with this though, is that the maths becomes very, very complicated as I move along the kinematic chain. By the end, there are so many terms as a result of the multiple matrix multiplications, that it just becomes so tedious doing this by hand.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a better way to do this? In the case of calculating the forward kinematics, I didn't have to do it by hand, I just wrote some code to multiply the individual matrices. But when I want the Jacobian matrix, it seems like I need to compute the derivative of the overall transformation matrix after it has been computed, and so I need to do this by hand. What's the standard solution to this? Is it something to do with the chain rule for differentiation...? I'm not sure exactly how this applies here though...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you!&lt;/p&gt;&#xA;" OwnerUserId="8880" LastActivityDate="2018-12-30T02:14:05.157" Title="Computing the Jacobian Matrix -- chain rule?" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;inverse-kinematics&gt;&lt;jacobian&gt;&lt;manipulator&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9894" PostTypeId="1" CreationDate="2016-05-20T05:36:46.923" Score="2" ViewCount="6445" Body="&lt;h1&gt;Problem&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Currently working on reverse engineering this application &lt;a href=&quot;http://www.zepp.com/en-us/baseball/smart-coach/&quot; rel=&quot;nofollow&quot;&gt;zepp.com/baseball&lt;/a&gt;. This is a wearable device that can track a users &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;speed&lt;/li&gt;&#xA;&lt;li&gt;positional tracking&lt;/li&gt;&#xA;&lt;li&gt;when the object makes contact with another one &lt;/li&gt;&#xA;&lt;li&gt;3-D Rendering&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Currently using an accelerometer and gyroscope to get the yaw, pitch, and roll(orientation) of the device, but do not know how to use that information to calculate speed, or if the device has collided with another object?&lt;/p&gt;&#xA;" OwnerUserId="13751" LastEditorUserId="10596" LastEditDate="2016-05-20T16:37:13.167" LastActivityDate="2016-05-22T02:14:14.373" Title="Using Accelerometer, Gyroscope and any sensor to track speed, position," Tags="&lt;imu&gt;&lt;accelerometer&gt;&lt;precise-positioning&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9895" PostTypeId="1" AcceptedAnswerId="9929" CreationDate="2016-05-20T12:36:19.817" Score="2" ViewCount="194" Body="&lt;p&gt;Assuming a drone is in two dimension, it has to predict its future position by calculating its future displacement:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/eifIG.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/eifIG.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a real quad-rotor, &lt;strong&gt;why should we not only estimate the displacement of a robot in three dimensions but also the change of orientation of the robot, its linear velocity and its angular velocity?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="13754" LastEditorUserId="10596" LastEditDate="2016-05-22T19:47:35.553" LastActivityDate="2016-05-23T19:58:45.923" Title="Estimating the displacement of a drone in three dimensions" Tags="&lt;quadcopter&gt;&lt;motion-planning&gt;&lt;uav&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9896" PostTypeId="2" ParentId="9893" CreationDate="2016-05-20T13:36:36.357" Score="1" Body="&lt;p&gt;You are right about the tedious nature of multiplying all those individual matrices by hand!  You could search online for robot kinematics software and find some nice tools to help with this, but you learn it so much better when you actually work out the equations.  Since you've already written the forward kinematics code, it's clear you understand that process.  I recommend you use a symbolic algebra package (I used to use Maple IV, and that functionality is now within MatLab).  Re-write the forward kinematics program, but do not plug in values for each joint angle.  You'll end up with very long expressions for each term of $\vec x$, which can be reduced significantly by applying trigonometric identities.  The identities for $\sin (\theta_2 + \theta_3)$ and $\cos (\theta_2 + \theta_3)$ are particularly helpful for articulated arm geometries.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding the Jacobian, I have always found differentiating the forward kinematics to be rather straightforward.  The chain rule isn't a major complicating factor, since each term is based on &lt;em&gt;partial&lt;/em&gt;, not full, derivatives.  A symbolic algebraic tool can be helpful here, too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think the key for your situation is to first determine the kinematics in closed-form (keeping the $\theta_i$ terms in the equations).  Also compute the Jacobian in closed-form.  Then you have the equations ready for plugging in joint values regardless of the robot's pose.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2016-05-20T13:36:36.357" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9897" PostTypeId="2" ParentId="9893" CreationDate="2016-05-20T14:26:15.983" Score="6" Body="&lt;p&gt;Writing the equations by hand and deriving them is certainly the best way to understand what is happening &quot;in the background&quot;. Generating the equations and deriving them using a syombolics engine, like @SteveO suggested is essentially the same process but someone else, in this case a symbolic engine, is doing the work for you. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are however different approaches to obtain the jacobi matrix, geometrically. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can consider that the Jacobi matrix is built up from submatrices. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ J = \left[&#xA;     \begin{matrix}&#xA;       J_T \\ \hdashline&#xA;       J_\omega        &#xA;       \end{matrix} \right] = &#xA;       \left[&#xA;      \begin{matrix}&#xA;       J_{T_{1}}\quad J_{T_{2}}  \quad \dots \quad J_{T_{n}}\\ \hdashline\hdashline&#xA;       J_{\omega_{1}}  \quad J_{\omega_{2}} \quad \dots \quad J_{\omega_{n}}\\        &#xA;       \end{matrix} \right] = &#xA;\left[&#xA;   \begin{matrix}&#xA;    \frac{\delta x}{\delta q_1} \;     \frac{\delta x}{\delta q_2} \; \dots \;     \frac{\delta x}{\delta q_n} \\&#xA;   \frac{\delta y}{\delta q_1} \;     \frac{\delta y}{\delta q_2} \; \dots \;     \frac{\delta y}{\delta q_n} \\ &#xA;\frac{\delta z}{\delta q_1} \;     \frac{\delta z}{\delta q_2} \; \dots \;     \frac{\delta z}{\delta q_n} \\ &#xA;\hdashline&#xA;\frac{\delta \alpha}{\delta q_1} \;     \frac{\delta \alpha}{\delta q_2} \; \dots \;     \frac{\delta \alpha}{\delta q_n} \\  &#xA;\frac{\delta \beta}{\delta q_1} \;     \frac{\delta \beta}{\delta q_2} \; \dots \;     \frac{\delta \beta}{\delta q_n} \\      &#xA;\frac{\delta \gamma}{\delta q_1} \;     \frac{\delta \gamma}{\delta q_2} \; \dots \;     \frac{\delta \gamma}{\delta q_n} \\  &#xA;    \end{matrix} \right]&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your joint is a rotational joint than the its corresponding part in the Jacobi matrix is &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ \left[&#xA;   \begin{matrix}&#xA;    J_{T_{i}} \\ \hdashline&#xA;    J_{\omega_{i}}        &#xA;    \end{matrix} \right] = &#xA;    \left[&#xA;   \begin{matrix}&#xA;    \overrightarrow b_{i-1} \times \overrightarrow r_{i-1,ee}   \\ \hdashline&#xA;    \overrightarrow b_{i-1}       &#xA;    \end{matrix} \right]&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your joint is a translational joint than the its corresponding part in the Jacobi matrix is &#xA;$$ \left[&#xA;   \begin{matrix}&#xA;    J_{T_{i}} \\ \hdashline&#xA;    J_{\omega_{i}}        &#xA;    \end{matrix} \right] = &#xA;    \left[&#xA;   \begin{matrix}&#xA;    \overrightarrow b_{i-1}  \\ \hdashline&#xA;    0_{_{1 \times 3}}      &#xA;    \end{matrix} \right]&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;where&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;$\overrightarrow b_{i-1}$  is the vector of the joint axis  &lt;/li&gt;&#xA;&lt;li&gt;$\overrightarrow r_{i-1,ee}$ is the vector pointing from the origin of the joint coordinate system to origin of the end-effector coordinate system&lt;/li&gt;&#xA;&lt;li&gt;$i$ refers to the Denavti Hartenber coordinate system numerotiation&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2016-05-20T14:26:15.983" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9898" PostTypeId="2" ParentId="9659" CreationDate="2016-05-20T14:37:02.993" Score="2" Body="&lt;p&gt;As I understand, you do not actually need the force, you just want that your simulation to behave somewhat realistically. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead of complicating everything with dynamics, I suggest you remain at kinematic models (will be much much faster, considering you will evaluate your models probably millions of times, if I undertand you goals corretly, in the fitness function). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead of maximum force, determine a realistic maximum velocity, acceleration and joint limit. In this case you could still assure a realistic behavior, bounded change in position and velocity, and have fast running models. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To continue your analogy, if the knee is moved with limited acceleration and velocity and the joint motion limits (motion range of the joint) is also defined correctly, the knee will not break. &lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2016-05-20T14:37:02.993" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9899" PostTypeId="1" CreationDate="2016-05-20T17:23:16.167" Score="0" ViewCount="333" Body="&lt;p&gt;Good day&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am currently implementing the VFH algorithm. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Is it possible to configure the algorithm such that a reactionary motion is generated at the presence of an obstacle? &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I have been able to generate the obstacle map, primary polar histogram and the binary polar histogram.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How does one prioritize a sector to pass through?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I have seen an implementation in labview where in it is possible to implement a simple vector field histogram path planning without any goal points &lt;a href=&quot;http://zone.ni.com/reference/en-XX/help/372983F-01/lvrobovi/advanced_vfh/&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11311" LastActivityDate="2017-05-09T15:48:36.890" Title="VFH+ (Vector Field Histogram+) : Is it possible to choose a candidate sector without a set goal point?" Tags="&lt;mobile-robot&gt;&lt;motion-planning&gt;&lt;mapping&gt;&lt;c++&gt;&lt;vfh&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9900" PostTypeId="5" CreationDate="2016-05-20T17:54:07.530" Score="0" Body="&lt;p&gt;Microsoft Robotics Developer Studio (MRDS) is a software framework built on the .NET environment utilizing 2 main software components: CCR and DSS.  MRDS also includes a (PhysX) physics based simulation environment and a visual programming language.  (Although most of MRDS is written in C#).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See also:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.microsoft.com/robotics/&quot; rel=&quot;nofollow&quot;&gt;MRDS hopepage&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Microsoft_Robotics_Developer_Studio&quot; rel=&quot;nofollow&quot;&gt;MRDS on Wikipedia&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="110" LastEditorUserId="110" LastEditDate="2016-05-23T10:01:31.537" LastActivityDate="2016-05-23T10:01:31.537" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9901" PostTypeId="4" CreationDate="2016-05-20T17:54:07.530" Score="0" Body="Microsoft Robotics Developer Studio" OwnerUserId="110" LastEditorUserId="110" LastEditDate="2016-05-23T10:01:58.490" LastActivityDate="2016-05-23T10:01:58.490" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9902" PostTypeId="2" ParentId="9826" CreationDate="2016-05-21T02:52:33.547" Score="4" Body="&lt;p&gt;In McGeer's 1990 work on Passive Dynamic Walking, the angular momentum equation that you have posted is the angular momentum of the system &lt;em&gt;just&lt;/em&gt; before the impact of the swing foot, about the impending impact point. It consists of two parts: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;the angular momentum due to the velocity of the center of mass about the impact point, given by $\cos(2\alpha_0) ml^2 \Omega_-$; and &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;the angular momentum due to the velocity of the rotational inertia about the center of mass, given by $r^2_{gyr} ml^2 \Omega_-$.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;To answer question 1, the equation is already in the form $H = I*\omega + ml^2\Omega$, as you would expect. The challenge comes in because of two factors. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;First, the overall rotational inertia $I$ about the impact point is defined using a radius of gyration, since the system is rotationally symmetric about the center of mass: $I = r^2_{gyr} ml^2$. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Second, the angular velocity $\Omega_-$ is about the foot of the supporting leg, some of which is lost due to the impact of the swinging foot with the ground. This means the required $\Omega$ to find the angular momentum about the impact point is actually equal to $cos(2\alpha_0) \Omega_-$, leading to the equation as written in McGeer's work.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;To answer question 2, both $\alpha_0$ and $r_{gyr}$ are constants for a rimless wheel (as @NBCKLY said in his answer):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;$\alpha_0$ is the angle between legs, given by $\alpha_0 = 2\pi/n$ (where $n$ is the number of legs). This means that in order to have $\alpha_0 = \pi/2$, there would need to be 4 legs on the wheel and the majority of the energy will be lost at every step (not a likely scenario).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;$r_{gyr}$ is the radius of gyration, a proxy for the constant rotational inertia of the model about the center of mass. Since the distribution of mass of the model does not change, this value also will not change.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;There has been lots of work done more recently on the concepts that you are exploring in passive dynamic walking and underactuated robotics which I would invite you to investigate using your preferred research platform.&lt;/p&gt;&#xA;" OwnerUserId="10414" LastActivityDate="2016-05-21T02:52:33.547" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9903" PostTypeId="2" ParentId="9895" CreationDate="2016-05-21T04:09:30.223" Score="0" Body="&lt;p&gt;By assuming that the drone is 2D as you have done, you are fixing the vertical axis (e.g. height from the ground). For a real drone operating in 3D, there are six degrees of freedom corresponding to the x,y, and z position of the robot in space as well as the roll,pitch, and yaw of the drone.&lt;/p&gt;&#xA;" OwnerUserId="9585" LastActivityDate="2016-05-21T04:09:30.223" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9904" PostTypeId="1" AcceptedAnswerId="9945" CreationDate="2016-05-21T04:55:59.443" Score="7" ViewCount="2745" Body="&lt;p&gt;I am trying to implement my own inverse kinematics solver for a robot arm. My solution is a standard iterative one, where at each step, I compute the Jacobian and the pseudo-inverse Jacobian, then compute the Euclidean distance between the end effector and the target, and from these I then compute the next joint angles by following the gradient with respect to the end effector distance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This achieves a reasonable, smooth path towards the solution. However, during my reading, I have learned that typically, there are in fact multiple solutions, particularly when there are many degrees of freedom. But the gradient descent solution I have implemented only reaches one solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my questions are as follows:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;How can I compute all the solutions? Can I write down the full forward kinematics equation, set it equal to the desired end effector position, and then solve the linear equations? Or is there a better way?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Is there anything of interest about the particular solution that is achieved by using my gradient descent method? For example, is it guaranteed to be the solution that can be reached the fastest by the robot?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Are there cases when the gradient descent method will fail? For example, is it possible that it could fall into a local minimum? Or is the function convex, and hence has a single global minimum?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="8880" LastEditorUserId="10596" LastEditDate="2016-05-22T19:46:54.527" LastActivityDate="2016-05-26T02:07:34.943" Title="Solving Inverse Kinematics with Gradient Descent" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;inverse-kinematics&gt;&lt;jacobian&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="9905" PostTypeId="2" ParentId="9904" CreationDate="2016-05-21T07:21:34.450" Score="4" Body="&lt;p&gt;There are more approaches to solve the inverse kinematics equations. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to continue to use the pseudo-inverse based approach and still obtain more then 1 solution you can flip the sign of joint angle 1 for example (if it is a puma type robot arm) in the initial guess and run the iterative solver again. Same for joint angle 3. You can have situations where it will not converge (e.g. out of reach, singular, etc.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are however method which analytically calculate all angles. These should also be faster then the iterative method. These are based on geometrically obtaining a formula for your joint angles and applying that formula once, without any iterations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can find more infomration about these &lt;a href=&quot;http://excelsior.cs.ucsb.edu/courses/cs290n_cg_modeling/notes/uiuc_notes/chap4.pdf&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;https://deepblue.lib.umich.edu/bitstream/handle/2027.42/6192/bac6709.0001.001.pdf&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;http://www-cvr.ai.uiuc.edu/ece470/docs/articulated_spherical.pdf&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2016-05-21T07:21:34.450" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9907" PostTypeId="5" CreationDate="2016-05-21T13:23:24.127" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2016-05-21T13:23:24.127" LastActivityDate="2016-05-21T13:23:24.127" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9908" PostTypeId="4" CreationDate="2016-05-21T13:23:24.127" Score="0" Body="An electric battery is a device consisting of one or more electrochemical cells that convert stored chemical energy into electrical energy." OwnerUserId="10596" LastEditorUserId="10596" LastEditDate="2016-05-23T10:01:51.130" LastActivityDate="2016-05-23T10:01:51.130" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9909" PostTypeId="5" CreationDate="2016-05-21T15:19:06.910" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2016-05-21T15:19:06.910" LastActivityDate="2016-05-21T15:19:06.910" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9910" PostTypeId="4" CreationDate="2016-05-21T15:19:06.910" Score="0" Body="LabVIEW is a development environment created by National Instruments to complement their instrument offering. The programming language is called G but often referred to as just LabVIEW. The programming language is a parallel, dataflow, graphical, type-safe language. " OwnerUserId="10596" LastEditorUserId="10596" LastEditDate="2016-05-23T10:01:44.163" LastActivityDate="2016-05-23T10:01:44.163" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9911" PostTypeId="5" CreationDate="2016-05-21T15:22:15.397" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2016-05-21T15:22:15.397" LastActivityDate="2016-05-21T15:22:15.397" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9912" PostTypeId="4" CreationDate="2016-05-21T15:22:15.397" Score="0" Body="In computing, an interrupt is an asynchronous signal indicating the need for attention or a synchronous event in software indicating the need for a change in execution. " OwnerUserId="10596" LastEditorUserId="10596" LastEditDate="2016-05-23T10:02:08.693" LastActivityDate="2016-05-23T10:02:08.693" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9914" PostTypeId="2" ParentId="9894" CreationDate="2016-05-22T02:14:14.373" Score="2" Body="&lt;p&gt;You are essentially making your own &lt;a href=&quot;https://en.wikipedia.org/wiki/Inertial_measurement_unit&quot; rel=&quot;nofollow&quot;&gt;IMU&lt;/a&gt;.  The way this works is essentially: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the accelerometer gives you linear acceleration&lt;/li&gt;&#xA;&lt;li&gt;the rotational gyro gives you angular velocity&lt;/li&gt;&#xA;&lt;li&gt;integrate the rotational gyro over time to give you angular position&lt;/li&gt;&#xA;&lt;li&gt;integrate the accelerometer over time to give you linear velocity&lt;/li&gt;&#xA;&lt;li&gt;double integrate the accelerometer over time to give you linear position&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Of course, integrations like this introduce errors, so that is why people typically combine estimates from many different sensors (and sensing modalities) with something like a &lt;a href=&quot;https://en.wikipedia.org/wiki/Kalman_filter&quot; rel=&quot;nofollow&quot;&gt;Kalman Filter&lt;/a&gt;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also note that these integrations don't work anymore if you max out the sensing range of your sensors.  For example, some cheap accelerometers won't measure over 3gs.  And I imagine that swinging a bat and hitting a ball will produce some pretty high gs.  And a low resolution (bit count) will also severely affect the accuracy.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2016-05-22T02:14:14.373" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="9916" PostTypeId="1" CreationDate="2016-05-22T07:39:04.887" Score="4" ViewCount="6033" Body="&lt;p&gt;I'm reading a paper:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Choi C, Trevor A J B, Christensen H I. RGB-D edge detection and&#xA;  edge-based registration[C]//Intelligent Robots and Systems (IROS),&#xA;  2013 IEEE/RSJ International Conference on. IEEE, 2013: 1568-1575.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;which refers: &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Visual features such as corners, keypoints, edges, and color are&#xA;  widely used in computer vision and robotic perception for applications&#xA;  such as object recognition and &lt;strong&gt;pose estimation&lt;/strong&gt;, &lt;strong&gt;visual odometry&lt;/strong&gt;, and SLAM&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I previously assume &lt;strong&gt;pose estimation&lt;/strong&gt; to be roughly equal to &lt;strong&gt;visual odometry&lt;/strong&gt;, yet the text above seems to deny.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what's their difference? I didn't find much info from google. IMHO, it seems pose estimation is estimating the pose of moving object with the camera static, while visual odometry is estimating the pose of camera in a static(mostly) scene, is that precise enough?&lt;/p&gt;&#xA;" OwnerUserId="13723" LastActivityDate="2019-09-09T10:33:20.257" Title="What's the difference between the term &quot;pose estimation&quot; and &quot;visual odometry&quot;?" Tags="&lt;slam&gt;&lt;odometry&gt;&lt;pose&gt;" AnswerCount="6" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9917" PostTypeId="2" ParentId="9916" CreationDate="2016-05-22T07:43:57.297" Score="0" Body="&lt;p&gt;Visual odometry is the task to estimate the motion of the camera relative to the last frame(s). You don't care about loop closures or mapping. If you sum up the relative transformations between frames, you get a guess on the transformation relative to the first frame (your current camera pose). Visual odometry is in this case a way to initialize your pose estimation. This however is a noisy process so you can add more advances techniques (e.g. loop closures) to improve this estimation. &lt;/p&gt;&#xA;" OwnerUserId="23196" LastActivityDate="2016-05-22T07:43:57.297" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9918" PostTypeId="1" AcceptedAnswerId="9920" CreationDate="2016-05-22T10:44:40.757" Score="0" ViewCount="144" Body="&lt;p&gt;I am trying to run this &lt;a href=&quot;http://www.amazon.in/Johnson-geared-Specially-Robowar-competitions/dp/B010V2O6CO?ie=UTF8&amp;amp;psc=1&amp;amp;redirect=true&amp;amp;ref_=oh_aui_detailpage_o01_s00&quot; rel=&quot;nofollow&quot;&gt;motor&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using the batteries stated in the title. The motor requires 12 V and I am supplying 11.98V to the motor, through a motor driver. After a while, the motor keeps slowing down and the battery voltage drops down to 5-6 V, but after I remove the battery from the motor driver it again shows 11.9V.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this battery capable enough to run my motors, or do I need a new one?&lt;/p&gt;&#xA;" OwnerUserId="13533" LastEditorUserId="13533" LastEditDate="2016-05-22T12:59:16.453" LastActivityDate="2016-10-16T09:15:25.703" Title="Tring to run 12 V DC geared motor using Samsung Li Ion ICR16850 batteries" Tags="&lt;motor&gt;&lt;battery&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9920" PostTypeId="2" ParentId="9918" CreationDate="2016-05-22T11:44:05.683" Score="3" Body="&lt;p&gt;Assuming that the motor is in a healthy condition...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Voltage is only one aspect, you have to be sure that you battery can supply the current drawn by your motor. &#xA;The maximum current, according to the link you have specified is approx 10 Ampers. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not sure how many batteries and in which config you are using, the description I have found is &lt;a href=&quot;http://www.tme.eu/html/EN/li-ion-18650-samsung-rechargeable-batteries/ramka_7013_EN_pelny.html&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt; one. It states that the maximum current that the batteries can supply is 5.2 ampers. So if you do not have any parallel connections in the battery configuration (I assume you have serial ones because of the higher voltage you have specified) you cannot supply the 10 amps required by the motor for maximum torque. Try to measure also the current, not just the voltage and see if this is the problem. You can use more then one batteries (probably 2, maybe 3) connected in parallel to each other to solve this problem. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another source of the problem could be a short circuit with a very short duration in the driver when switching the transistors. Try to measure the current also before and after the driver stage to identify if this is the problem.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2016-05-22T11:51:20.547" LastActivityDate="2016-05-22T11:51:20.547" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="9922" PostTypeId="2" ParentId="9918" CreationDate="2016-05-22T13:36:41.420" Score="3" Body="&lt;p&gt;A fully charged LiPo battery cell should has a voltage of 4.2 V. Assuming that you have three cells in series, that would give 12.6 V. When you apply a big load, this voltage of course, will decrease instantly but if you measured 11.98 V in open-circuit that means the batteries were not fully charged. I guess your batteries were not charged at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the discharge characteristic of the Samsung IRC16850, taken from this &lt;a href=&quot;http://budgetlightforum.com/node/33814&quot; rel=&quot;nofollow noreferrer&quot;&gt;site&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/slL38.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/slL38.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A discharge current of 7 A will drain your battery flat in 20 minutes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Furthermore a discharged battery's voltage is not the same when the load is still connected and when it is in open circuit. After disconnecting the load the battery voltage will rise, this will be the OCV (open circuit voltage).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Yrijp.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Yrijp.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a figure of a LiPo battery pack, 12 cells in series. When the load is disconnected the voltage has risen from 2.7 V to ~3.2 V in a short period of time (PB 6 voltage). This happens with your batteries too but if you reconnect the motor the voltage will drop back.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And finally, if you measure 5-6 V on your battery pack that means one cell's voltage is around 2 V and the cells are probably damaged now. The Samsung ICR18650's discharge cut-off voltage 2.75V, which means that you should not use it when the voltage is lower. Actually you should not use the cells but recharge when the voltage drops to 3 V.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If a cell is heating up it means that its internal resistance has risen. The dissipated heat will be:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ P = R_{internal} \times I_{discharge}^2 $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;this means that a part of the stored energy is wasted on heating the cell itself (which is very &lt;strong&gt;DANGEROUS&lt;/strong&gt; as LiPo cells can easily catch fire). The effective battery capacity is lower in this case.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Without load your motor should drain 800 mA and the batteries should last 2.5 hours with that. I suggest to make some tests without any load attached to you motor, or just some light load. These batteries would be capable of supporting that, just make sure that they are fully charged. But probably you will need new cells too.&lt;/p&gt;&#xA;" OwnerUserId="10596" LastEditorUserId="10596" LastEditDate="2016-10-16T09:15:25.703" LastActivityDate="2016-10-16T09:15:25.703" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="9923" PostTypeId="1" AcceptedAnswerId="9939" CreationDate="2016-05-22T17:41:50.193" Score="1" ViewCount="653" Body="&lt;p&gt;I am using Mavlink protocol (in c++) to communicate with the ArduPilotMega, I am able to read messages such as &lt;a href=&quot;https://pixhawk.ethz.ch/mavlink/#ATTITUDE&quot; rel=&quot;nofollow&quot;&gt;ATTITUDE&lt;/a&gt; for example.&lt;br&gt;&#xA;I am currently getting only 2Hz (message rate) and I would like to increase it. I found out that I should use &lt;a href=&quot;https://pixhawk.ethz.ch/mavlink/#MESSAGE_INTERVAL&quot; rel=&quot;nofollow&quot;&gt;MESSAGE_INTERVAL&lt;/a&gt; in order to change it, and that I probably need to use the command &lt;code&gt;MAV_CMD_SET_MESSAGE_INTERVAL&lt;/code&gt; to set it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my question is, how do I send that command using mavlink in c++?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried doing this with the code below but it did not work, I guess that I should use the command that I mentioned above but I don't know how.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;mavlink_message_t command;&#xA;mavlink_message_interval_t interval;&#xA;&#xA;interval.interval_us = 100000;&#xA;interval.message_id = 30;&#xA;&#xA;mavlink_msg_message_interval_encode(255, 200, &amp;amp;command, &amp;amp;interval);&#xA;p_sensorsPort-&amp;gt;write_message(command);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; I also tried this code below, maybe I am not giving it the right system id or component id.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;mavlink_message_t command;&#xA;mavlink_command_long_t interval;&#xA;&#xA;interval.param1 = MAVLINK_MSG_ID_ATTITUDE;&#xA;interval.param2 = 100000;&#xA;interval.command = MAV_CMD_SET_MESSAGE_INTERVAL;&#xA;interval.target_system = 0;&#xA;interval.target_component = 0;&#xA;&#xA;mavlink_msg_command_long_encode(255, 0, &amp;amp;command, &amp;amp;interval);&#xA;p_sensorsPort-&amp;gt;write_message(command);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Maybe I am missing something about the difference between &lt;code&gt;target_system&lt;/code&gt;, &lt;code&gt;target_component&lt;/code&gt; and &lt;code&gt;sysid&lt;/code&gt;, &lt;code&gt;compid&lt;/code&gt;. I tried few values for each but nothing worked. Is there any ack that will be able to tell me if it even got the command? &lt;/p&gt;&#xA;" OwnerUserId="13765" LastEditorUserId="13765" LastEditDate="2016-05-25T04:21:33.473" LastActivityDate="2016-05-25T08:40:05.890" Title="Change Message Interval ArduPilot" Tags="&lt;quadcopter&gt;&lt;c++&gt;&lt;ardupilot&gt;&lt;mavlink&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9925" PostTypeId="1" AcceptedAnswerId="9961" CreationDate="2016-05-22T20:20:04.140" Score="1" ViewCount="670" Body="&lt;p&gt;Good day&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: I have found out that my code works. I have placed a minor explanation to be further expounded.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have been having trouble obtaining the right directional output from my implementation. I noticed that every time I put an obstacle at the right, it gives left, it gives the right steering direction, the problem is with the presence of a left obstacle where it still tends to steer itself towards that obstacle. I have checked the occupancy map generated using matlab and was found to be correct. I couldn't pinpoint what is exactly wrong with my code for I have been debugging this for almost a week now and was hoping if someone can see the error I cannot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is my code implementation:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;//1st:: Create Occupancy Grid from Data-------------------------------------------------&#xA;// &amp;gt; Cell Size/Grid Resolution  = 5meters/33 cells = 0.15meters each = 15cm each&#xA;// &amp;gt; Grid Dimension = 5meters by 5meters / 33x33 cells //Field of view of robot is 54 degrees&#xA;//or 31 meters horizontal if subject is 5 meters away&#xA;// &amp;gt; Robot Width = 1meter 100cm&#xA;// &amp;gt; Because the focal length of the lens is roughly the same as the width of the sensor,&#xA;// it is easy to remember the field of view: at x meters away, you can see about x meters horizontally,&#xA;// assuming 4x3 stills mode. Horizontal field of view in 1080p video mode is 75%&#xA;// of that (75% H x 55% V sensor crop for 1:1 pixels at 1920x1080).&#xA;&#xA;//Converting the Position into an Angle--------------------------------------------&#xA;//from:&#xA;//  A. https://decibel.ni.com/content/docs/DOC-17771&#xA;//  B. &quot;USING THE SENSOR KINECT FOR LANDMARK&quot; by ANDRES FELIPE ECHEVERRI GUEVARA&#xA;//1. Get angle&#xA;// &amp;gt; Each pixel from the image represents an angle&#xA;// &amp;gt; angle = ith pixel in row * (field of view in degrees/number of pixels in row)&#xA;// &amp;gt; field of view of Pi camera is 54 degrees horizontal&#xA;//2. Convert Polar to Cartesian&#xA;// &amp;gt; x = z*cos(angle)&#xA;// &amp;gt; y = z*sin(angle)&#xA;&#xA;int arrOccupancyGrid[33][33];&#xA;float matDepthZ[33][33];&#xA;int robotPosX = 0;&#xA;int robotPosY = 0;&#xA;int xCoor=0; //Coordinates of Occupancy Map&#xA;int yCoor=0;&#xA;int xPosRobot=0; //Present cordinates of robot&#xA;int yPosRobot=0;&#xA;float fov = 54; // 54 degrees field of view in degrees must be converted to radians&#xA;float nop = 320; //number of pixels in row&#xA;int mapDimension = 33; // 33by33 array or 33*15cm = 5mby5m grid&#xA;int mapResolution = 15; //cm&#xA;&#xA;//Limit max distance measured&#xA;/*&#xA;for(i=0; i&amp;lt; nop ;i++){&#xA;    if(arrDepthZ.at(i)&amp;gt;500){&#xA;        arrDepthZ.at(i) = 500;&#xA;    }&#xA;}&#xA;*/&#xA;&#xA;for (i=0 ; i &amp;lt; nop; i++){&#xA;    //Process data/Get coordinates for mapping&#xA;        //Get Angle&#xA;        int angle = ((float)(i-160.0f) * ((float)fov/(float)nop)); //if robot is centered at zero add -160 to i&#xA;        //cout &amp;lt;&amp;lt; &quot;arrDepthZ &quot; &amp;lt;&amp;lt; arrDepthZ.at(i) &amp;lt;&amp;lt; endl;&#xA;            //cout &amp;lt;&amp;lt; &quot;i &quot; &amp;lt;&amp;lt; i &amp;lt;&amp;lt; endl;&#xA;            //cout &amp;lt;&amp;lt; &quot;fov &quot; &amp;lt;&amp;lt; fov &amp;lt;&amp;lt; endl;&#xA;            //cout &amp;lt;&amp;lt; &quot;nop &quot; &amp;lt;&amp;lt; nop &amp;lt;&amp;lt; endl;&#xA;            //cout &amp;lt;&amp;lt; &quot;angle &quot; &amp;lt;&amp;lt; i * (fov/nop) &amp;lt;&amp;lt; endl;&#xA;        arrAngle.push_back(angle);&#xA;        //Get position X and Y use floor() to output nearest integer&#xA;        //Get X --------&#xA;        xCoor = (arrDepthZ.at(i) / mapResolution) * cos(angle*PI/180.0f); //angle must be in radians because cpp&#xA;        //cout &amp;lt;&amp;lt; &quot;xCoor &quot; &amp;lt;&amp;lt; xCoor &amp;lt;&amp;lt; endl;&#xA;        arrCoorX.push_back(xCoor);&#xA;        //Get Y --------&#xA;        yCoor = (arrDepthZ.at(i) / mapResolution) * sin(angle*PI/180.0f); //angle must be in radians because cpp&#xA;                //cout &amp;lt;&amp;lt; &quot;yCoor &quot; &amp;lt;&amp;lt; yCoor &amp;lt;&amp;lt; endl;&#xA;        arrCoorY.push_back(yCoor);&#xA;    //Populate Occupancy Map / Cartesian Histogram Grid&#xA;&#xA;        if((xCoor &amp;lt;= 33) &amp;amp;&amp;amp; (yCoor &amp;lt;= 33)){ //Condition Check if obtained X and Y coordinates are within the dimesion of the grid&#xA;            arrOccupancyGrid[xCoor][yCoor] = 1; //[increment] equate obstacle certainty value of cell by 1&#xA;            matDepthZ[xCoor][yCoor] = arrDepthZ.at(i);&#xA;        }&#xA;&#xA;        //cout &amp;lt;&amp;lt; &quot;arrCoorX.size()&quot; &amp;lt;&amp;lt; arrCoorX.size() &amp;lt;&amp;lt; endl;&#xA;        //cout &amp;lt;&amp;lt; &quot;arrCoorY.size()&quot; &amp;lt;&amp;lt; arrCoorY.size() &amp;lt;&amp;lt; endl;&#xA;&#xA;}&#xA;&#xA;for (i=0 ; i &amp;lt; arrCoorX.size(); i++){&#xA;  file43 &amp;lt;&amp;lt; arrCoorX.at(i) &amp;lt;&amp;lt; endl;&#xA;}&#xA;&#xA;for (i=0 ; i &amp;lt; arrCoorY.size(); i++){&#xA;  file44 &amp;lt;&amp;lt; arrCoorY.at(i) &amp;lt;&amp;lt; endl;&#xA;}&#xA;&#xA;for (i=0 ; i &amp;lt; arrDepthZ.size(); i++){&#xA;  file45 &amp;lt;&amp;lt; arrDepthZ.at(i) &amp;lt;&amp;lt; endl;&#xA;}&#xA;&#xA;//------------------------- End Create Occupancy Grid -------------------------&#xA;&#xA;&#xA;//2nd:: Create 1st/Primary Polar Histogram ------------------------------------------------------&#xA;//1. Define angular resolution alpha&#xA;// &amp;gt; n = 360degrees/alpha;&#xA;// &amp;gt; set alpha to 5 degrees resulting in 72 sectors from 360/5 = 72 ///// change 180/5 = 35&#xA;//2. Define number of sectors (k is the sector index for sector array eg kth sector)&#xA;// &amp;gt; k=INT(beta/alpha), where beta is the direction from the active cell&#xA;//to the Vehicle Center Point (VCP(xPosRobot, yPosRobot)). Note INT asserts k to be an integer&#xA;&#xA;cout &amp;lt;&amp;lt; &quot;2nd:: Create 1st/Primary Polar Histogram&quot; &amp;lt;&amp;lt; endl;&#xA;&#xA;//Put this at the start of the code away from the while loop ----------------&#xA;int j=0;&#xA;int sectorResolution = 5; //degrees 72 sectors, alpha&#xA;int sectorTotal = 36; // 360/5 = 72 //// change 180/5 = 36&#xA;int k=0; //sector index (kth)&#xA;int maxDistance = 500; //max distance limit in cm&#xA;//vector&amp;lt;int&amp;gt;arrAlpha; //already initiated&#xA;&#xA;float matMagnitude[33][33]; //m(i,j)&#xA;float matDirection[33][33]; //beta(i,j)&#xA;float matAngleEnlarge[33][33]; //gamma(i,j)&#xA;int matHconst[33][33]; //h(i,j) either = 1 or 0&#xA;&#xA;float robotRadius = 100; //cm&#xA;float robotSafeDist = 50; //cm&#xA;float robotSize4Sector = robotRadius + robotSafeDist;&#xA;&#xA;for (i=0; i&amp;lt;sectorTotal; i++){&#xA;    arrAlpha.push_back(i*sectorResolution);&#xA;}&#xA;//---------end initiating sectors----------&#xA;&#xA;//Determine magnitude (m or matMagnitude) and direction (beta or matDirection) of each obstacle vector&#xA;//Modify m(i,j) = c(i,j)*(a-bd(i,j)) to m(i,j) = c(i,j)*(dmax-d(i,j)) from sir Lounell Gueta's work (RAL MS)&#xA;//Compute beta as is, beta(i,j) = arctan((yi-yo)/(xi-xo))&#xA;//Enlarge robot and compute the enlargment angle (gamma or matAngleEnlarge)&#xA;int wew =0;&#xA;int firstfillPrimaryH = 0; //flag for arrayPrimaryH storage&#xA;for (k=0; k&amp;lt;sectorTotal; k++){&#xA;    for (i=0; i&amp;lt;mapDimension; i++){&#xA;        for (j=0; j&amp;lt;mapDimension; j++){&#xA;            //cout &amp;lt;&amp;lt; &quot;i&quot; &amp;lt;&amp;lt; i &amp;lt;&amp;lt; &quot;j&quot; &amp;lt;&amp;lt; j &amp;lt;&amp;lt; &quot;k&quot; &amp;lt;&amp;lt; k &amp;lt;&amp;lt; endl;&#xA;            //cout &amp;lt;&amp;lt; &quot;mapDimension&quot; &amp;lt;&amp;lt; mapDimension &amp;lt;&amp;lt; endl;&#xA;            //cout &amp;lt;&amp;lt; &quot;sectorTotal&quot; &amp;lt;&amp;lt; sectorTotal &amp;lt;&amp;lt; endl;&#xA;            //Compute magnitude m, direction beta, and enlargment angle gamma&#xA;            matMagnitude[i][j] = (arrOccupancyGrid[i][j])*( maxDistance-matDepthZ[i][j]); //m(i,j)&#xA;            //cout &amp;lt;&amp;lt; &quot;matMagnitude[i][j]&quot; &amp;lt;&amp;lt;  (arrOccupancyGrid[i][j])*( maxDistance-matDepthZ[i][j]) &amp;lt;&amp;lt; endl;&#xA;            matDirection[i][j] = ((float)atan2f( (float)(i-yPosRobot), (float)(j-xPosRobot))*180.0f/PI); //beta(i,j)&#xA;            //cout &amp;lt;&amp;lt; &quot;matDirection[i][j]&quot; &amp;lt;&amp;lt; ((float)atan2f( (float)(i-yPosRobot), (float)(j-xPosRobot))*180.000/PI) &amp;lt;&amp;lt; endl;&#xA;            //cout &amp;lt;&amp;lt; &quot;matDepthZ[i][j]&quot; &amp;lt;&amp;lt; matDepthZ[i][j] &amp;lt;&amp;lt; endl;&#xA;            if(matDepthZ[i][j] == 0){ //if matDepthZ[i][j] == 0; obstable is very far thus path is free, no enlargement angle&#xA;                matAngleEnlarge[i][j] = 0; //gamma(i,j)&#xA;                //cout &amp;lt;&amp;lt; &quot;matAngleEnlarge[i][j]&quot; &amp;lt;&amp;lt; 0 &amp;lt;&amp;lt; endl;&#xA;            }&#xA;            else{ //if matDepthZ[i][j] &amp;gt; 0 there is an obstacle so compute enlargement angle&#xA;                matAngleEnlarge[i][j] = asin( robotSize4Sector / matDepthZ[i][j])*180/PI; //gamma(i,j)&#xA;                //cout &amp;lt;&amp;lt; &quot;matAngleEnlarge[i][j]&quot; &amp;lt;&amp;lt; asin( robotSize4Sector / matDepthZ[i][j])*180.0f/PI &amp;lt;&amp;lt; endl;&#xA;            }&#xA;&#xA;            wew = k*sectorResolution; //k*alpha&#xA;            //cout &amp;lt;&amp;lt; &quot;wew&quot; &amp;lt;&amp;lt; k*sectorResolution &amp;lt;&amp;lt; endl;&#xA;            //Check if magnitude is a part of the sector&#xA;            if ( ((matDirection[i][j]-matAngleEnlarge[i][j]) &amp;lt;= wew) &amp;amp;&amp;amp; (wew &amp;lt;= (matDirection[i][j]+matAngleEnlarge[i][j])) ){&#xA;                matHconst[i][j]=1; //Part of the sector&#xA;                //cout &amp;lt;&amp;lt; &quot;Part of the sector ---------------------------------------------------------------&quot; &amp;lt;&amp;lt; endl;&#xA;                //cout &amp;lt;&amp;lt; &quot;matHconst[i][j]=1&quot; &amp;lt;&amp;lt; matHconst[i][j] &amp;lt;&amp;lt; endl;&#xA;            }&#xA;            else{&#xA;                matHconst[i][j]=0; //Not Part of the sector&#xA;                //cout &amp;lt;&amp;lt; &quot;Not Part of the sector&quot; &amp;lt;&amp;lt; endl;&#xA;                //cout &amp;lt;&amp;lt; &quot;matHconst[i][j]=0&quot; &amp;lt;&amp;lt; matHconst[i][j] &amp;lt;&amp;lt; endl;&#xA;            }&#xA;            //Compute primary polar histogram Hp(k)&#xA;            //cout &amp;lt;&amp;lt; &quot;firstfillPrimaryH&quot; &amp;lt;&amp;lt; firstfillPrimaryH &amp;lt;&amp;lt; endl;&#xA;            if (firstfillPrimaryH==0){ //If first fill at sector&#xA;                //cout &amp;lt;&amp;lt; &quot;matMagnitude[i][j]&quot; &amp;lt;&amp;lt; matMagnitude[i][j] &amp;lt;&amp;lt; endl;&#xA;                //cout &amp;lt;&amp;lt; &quot;matHconst[i][j]&quot; &amp;lt;&amp;lt; matHconst[i][j] &amp;lt;&amp;lt; endl;&#xA;                float temp = matMagnitude[i][j]*matHconst[i][j];&#xA;                //cout &amp;lt;&amp;lt; &quot;matMagnitude[i][j]*matHconst[i][j]&quot; &amp;lt;&amp;lt; temp &amp;lt;&amp;lt; endl;&#xA;                arrPrimaryH.push_back(temp);&#xA;                firstfillPrimaryH=1; //Trigger flag&#xA;                //cout &amp;lt;&amp;lt; &quot;arrPrimaryH kth&quot; &amp;lt;&amp;lt; arrPrimaryH.at(k) &amp;lt;&amp;lt; endl;&#xA;            }&#xA;            else{ //If sector filled previously&#xA;                arrPrimaryH.at(k) = arrPrimaryH.at(k)+(matMagnitude[i][j]*matHconst[i][j]);&#xA;                //cout &amp;lt;&amp;lt; &quot;arrPrimaryH kth&quot; &amp;lt;&amp;lt; arrPrimaryH.at(k) &amp;lt;&amp;lt; endl;&#xA;            }&#xA;&#xA;        }&#xA;    }&#xA;    firstfillPrimaryH=0; //Reset flag&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="11311" LastEditorUserId="11311" LastEditDate="2016-05-29T13:56:35.363" LastActivityDate="2016-05-29T13:56:54.143" Title="VFH (Vector Field Histogram+): Obtaining the Primary Polar Histogram" Tags="&lt;mobile-robot&gt;&lt;motion-planning&gt;&lt;vfh&gt;&lt;path-planning&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="9926" PostTypeId="1" AcceptedAnswerId="9934" CreationDate="2016-05-23T09:01:47.133" Score="4" ViewCount="962" Body="&lt;p&gt;This question is strongly related to my other question over &lt;a href=&quot;https://robotics.stackexchange.com/questions/9129/how-to-compute-the-error-function-in-graph-slam-for-3d-poses/9137#9137&quot; title=&quot;here&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am estimating 6-DOF poses $x_{i}$ of a trajectory using a graph-based SLAM approach. The estimation is based on 6-DOF transformation measurements $z_{ij}$ with uncertainty $\Sigma_{ij}$ which connect the poses. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To avoid singularities I represent both poses and transforms with a 7x1 vector consisting of a 3D-vector and a unit-quaternion:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$x_{i} = \left( \begin{matrix} t \\ q \end{matrix} \right)$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The optimization yields 6x1 manifold increment vectors &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ \Delta \tilde{x}_i = \left( \begin{matrix} t \\ log(q) \end{matrix} \right)$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;which are applied to the pose estimates after each optimization iteration:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ x_i \leftarrow x_i \boxplus \Delta \tilde{x}_i$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The uncertainty gets involved during the hessian update in the optimization step:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ \tilde{H}_{[ii]} += \tilde{A}_{ij}^T \Sigma_{ij}^{-1} \tilde{A}_{ij} $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ \tilde{A}_{ij} \leftarrow A_{ij} M_{i} = \frac{\partial e_{ij}(x)}{\partial x_i} \frac{\partial x_i \boxplus \Delta \tilde{x}_i}{\partial \Delta x_i} |_{\Delta \tilde{x}_i = 0}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ e_{ij} = log \left( (x_{j} \ominus x_{i}) \ominus z_{ij} \right) $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;is the error function between a measurement $z_{ij}$ and its estimate $\hat{z}_{ij} = x_j \ominus x_i$. Since $\tilde{A}_{ij}$ is a 6x6 matrix and we're optimizing for 6-DOF $\Sigma_{ij}$ is also a 6x6 matrix.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Based on IMU measurements of acceleration $a$ and rotational velocity $\omega$ one can build up a 6x6 sensor noise matrix&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ \Sigma_{sensor} = \left( \begin{matrix} \sigma_{a}^2 &amp;amp; 0 \\ 0 &amp;amp; \sigma_{\omega}^2 \end{matrix} \right) $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further we have a process model which integrates acceleration twice and rotational velocity once to obtain a pose measurement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To properly model the uncertainty both sensor noise and integration noise have to be considered (anything else?). Thus, I want to calculate the uncertainty as&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ \Sigma_{ij}^{t} = J_{iterate} \Sigma_{ij}^{t-1} J_{iterate}^T + J_{process} \Sigma_{sensor} J_{process}^T$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $J_{iterate} = \frac{\partial x_{i}^{t}}{\partial x_{i}^{t-1}}$ and $J_{process} = \frac{\partial x_{i}^{t}}{\partial \xi_{i}^{t}}$ and current measurement $\xi{i}^{t} = [a,\omega]$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to this formula $\Sigma_{ij}$ is a 7x7 matrix, but I need a 6x6 matrix instead. I think I have to include a manifold projection somewhere, but how?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;For further details take a look at the following publication, especially at their algorithm 2:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;G. Grisetti, R. Kümmerle, C. Stachniss, and W. Burgard, “A tutorial on graph-based SLAM,” IEEE Intelligent Transportation Systems Maga- zine, vol. 2, no. 4, pp. 31–43, 2010.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;For a similar calculation of the uncertainty take a look at the end of section III A. in:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Corominas Murtra, Andreu, and Josep M. Mirats Tur. &quot;IMU and cable encoder data fusion for in-pipe mobile robot localization.&quot; Technologies for Practical Robot Applications (TePRA), 2013 IEEE International Conference on. IEEE, 2013.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;.. or section III A. and IV A. in:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ila, Viorela, Josep M. Porta, and Juan Andrade-Cetto. &quot;Information-based compact Pose SLAM.&quot; Robotics, IEEE Transactions on 26.1 (2010): 78-93.&lt;/p&gt;&#xA;" OwnerUserId="11812" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2016-05-24T06:40:49.007" Title="Calculate the uncertainty of a 6-dof pose for graph-based SLAM" Tags="&lt;slam&gt;&lt;ekf&gt;&lt;jacobian&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="9929" PostTypeId="2" ParentId="9895" CreationDate="2016-05-23T19:58:45.923" Score="1" Body="&lt;p&gt;If the robot's orientation is fixed, then determining its linear displacement is sufficient to determine its location in the world. This is because one unit of &quot;forward&quot; on the robot is equivalent to one unit of &quot;forward&quot; in the world. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, when the robot is allowed to rotate, one unit of &quot;forward&quot; for the robot now corresponds to a partial unit &quot;forward&quot; and a partial unit &quot;sideways&quot;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The clearest way to imagine this is to imagine that the robot has rotated 180 degrees, such that it is looking in the direction opposite to that which it had when it started. Now one unit of &quot;forward&quot; for the robot actually translate to one unit of &quot;backward&quot; in the world. Similarly, one unit of &quot;left&quot; now corresponds to one unit of &quot;right&quot; and vice-versa. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this manner, local coordinates, as established relative to the robot, are only useful when the &lt;em&gt;orientation&lt;/em&gt; of the robot is known relative to the world. &lt;em&gt;If you don't know which way you're pointed, you can't know which way you're moving.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-05-23T19:58:45.923" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9930" PostTypeId="2" ParentId="9916" CreationDate="2016-05-23T20:30:40.707" Score="3" Body="&lt;p&gt;Pose estimation means determining position and orientation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Odometry is using a (any) sensor to determine how much distance has been traversed, so &lt;em&gt;visual&lt;/em&gt; odometry is just clarification that the particular sensor to be used for odometry is visual (a camera, typically). Traversed distance, though, means that odometry is &lt;em&gt;relative&lt;/em&gt; - your car odometer may indicate that you traveled 10 miles, but that doesn't really mean anything unless you know your starting position. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similarly, a wheel encoder on the left and right wheels could give you distance &lt;em&gt;and&lt;/em&gt; rotation &lt;strong&gt;as the vehicle moves&lt;/strong&gt;, but again that doesn't mean anything unless you know the starting position and orientation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As given above, a pose is a position and orientation. It is an absolute value between one frame and another. An accelerometer and a magnetometer can give you an absolute orientation (relative to Earth's gravity and magnetic North), but they can't give you an absolute position. You would need to add a GPS for that. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can &lt;em&gt;integrate&lt;/em&gt; the accelerometer to estimate the &lt;em&gt;elapsed&lt;/em&gt; position, but that is meaningless without a starting position and is also prone to accumulating errors. Similarly, visual odometry doesn't mean anything without a known starting position and is also prone to accumulating errors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, in conclusion, a pose is an &lt;em&gt;absolute&lt;/em&gt; measurement between one frame and another, of position and orientation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Odometry is generally used to refer to an &lt;em&gt;elapsed&lt;/em&gt; or &lt;em&gt;relative&lt;/em&gt; position and orientation and, because it is not absolute, is prone to drift over time. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2016-05-26T12:46:40.400" LastActivityDate="2016-05-26T12:46:40.400" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="9932" PostTypeId="1" AcceptedAnswerId="9933" CreationDate="2016-05-23T21:08:26.110" Score="3" ViewCount="291" Body="&lt;p&gt;I'm working on a robotics project where I have 3 services running. I have my sensor DAQ, my logic ISR (motor controller at 20kHz) and my EtherCAT slave controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DAQ and EtherCAT run in the idle and the logic runs during an interrupt. The logic does some calculations and controls the motor. The EtherCAT service (kinda like CANbus) runs together with my DAQ in the idle loop. I can not run the DAQ in the interrupt because that leaves me with less than 100ns for the EtherCAT service to run.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not sure whether this is the right way to do this especially considering all the scary things i've read regarding data corruption when using interrupts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone have some nice ideas on how to handle these services?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm running all my code on a Zynq 7020 (on the ARM Cortex) and it's written in C++.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is an example of my code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/**&#xA; * Get all sensor data&#xA; */&#xA;void Supervisor::communication(void) {&#xA;    // Get all the sensors data&#xA;    dispatchComm.getData(&amp;amp;motorAngle, &amp;amp;motorVelocity, &amp;amp;jointAngle, &amp;amp;springAngle, &amp;amp;tuningParameter);&#xA;&#xA;}&#xA;&#xA;/**&#xA; * Run all the logic&#xA; */&#xA;void Supervisor::logic(void) {&#xA;&#xA;    dispatchLogic.calculate(tuningParameter, motorAngle, motorVelocity, jointAngle, springAngle);&#xA;&#xA;    dispatchLogic.getData(&amp;amp;angle, &amp;amp;magnitude);&#xA;&#xA;    // Dispatch values to the motor drive&#xA;    dispatchComm.setMotorDriveSetpoint(angle, magnitude);&#xA;    dispatchComm.writeToPiggyback((uint32_t) (tuningParameter), motorAngle, motorVelocity);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="10863" LastEditorUserId="184" LastEditDate="2016-05-25T00:08:02.497" LastActivityDate="2016-05-25T00:08:02.497" Title="How to split tasks between interrupts and the main loop on a bare metal controller?" Tags="&lt;c++&gt;&lt;interrupts&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="9933" PostTypeId="2" ParentId="9932" CreationDate="2016-05-24T03:42:27.660" Score="2" Body="&lt;p&gt;Some very general advice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My first impression from your question is that you are struggling with the fact that no hardware provides infinite resources. You can either slow down your control loops or look for better hardware (which may not exist).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your control has nested loops, then run each one a slow as possible. Are you controlling position at 20kHz? Pull that out and run that at 500Hz (A little faster if your mechanical mechanism is designed for high performance). Is you DAQ measuring current for the controller? Try running your current control at 5kHz but commutating at 20kHz. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;All those numbers are assuming a meso scale device using electro-magnetic actuators. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding interrupts, the rule of thumb is to do as little as possible, as quickly as possible, inside the interrupt and everything else outside it. However it feels like you might be using a timer interrupt to substitute for a real-time task scheduler (nothing wrong with that), in which case, you will want to do everything needed for that cycle in the interrupt. Add a time-overrun check at the end so that if your interrupt is taking longer than 50us you know about it and can adjust your strategy or optimize code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are writing interrupts then you need to go learn the details about data corruption issues. They are not scary and they are straightforward to manage on all modern processors. You can protect data in your idle loop by disabling interrupts in critical sections or using higher level synchronization constructs if you really need to. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A final thought; even though you are coding in C++, you should read the processor datasheet and instruction set so that you have an idea of the capabilities and limitations of the hardware if you have not already. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the limited code you added it looks like high level control for a series elastic actuator. The spring will dominate the mechanical time constant of the actuator system and you probably do not need that loop to run at 20kHz in lockstep with your motor commutation.&lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="184" LastEditDate="2016-05-24T10:08:20.640" LastActivityDate="2016-05-24T10:08:20.640" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="9934" PostTypeId="2" ParentId="9926" CreationDate="2016-05-24T06:40:49.007" Score="1" Body="&lt;p&gt;Because a the pose has six degrees-of-freedom, the covariance matrix representing its uncertainty should be $6 \times 6$. To determine how the covariance matrix propagates after each new IMU measurement, you must determine the &lt;em&gt;error state&lt;/em&gt; propagation equation, where the error is a minimal parameterization of the error in your state. How to do this for a rotation parameterized as a unit quaternion is explained in detail in Section 2 of &lt;a href=&quot;http://www-users.cs.umn.edu/~trawny/Publications/Quaternions_3D.pdf&quot; rel=&quot;nofollow&quot;&gt;Indirect Kalman Filter for 3D Attitude Estimation&lt;/a&gt; by Trawny. Note that this implementation explicitly estimates the gyroscope bias as part of the state vector. You would need to replace that with the position and add your accelerometer measurements. In fact, I recommend reading that document (or at least the first two sections) very carefully, I learned a lot the first time I read it.&lt;/p&gt;&#xA;" OwnerUserId="4320" LastActivityDate="2016-05-24T06:40:49.007" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9935" PostTypeId="1" CreationDate="2016-05-24T08:18:49.203" Score="1" ViewCount="9266" Body="&lt;p&gt;PLease guide me &#xA;How to find Friction or Viscous force b (nmsec) in DC motor for a particlar speed.&#xA;The motor is connected with a gear and the ration is 26:1&#xA;I want to find for 200 rpm and the motor no load speed is 4900rpm&#xA;please guide me&lt;/p&gt;&#xA;" OwnerUserId="13774" LastActivityDate="2016-07-28T01:36:10.853" Title="How to find Friction or Viscous force b (nmsec) in DC motor" Tags="&lt;quadcopter&gt;&lt;wheeled-robot&gt;&lt;brushless-motor&gt;&lt;stepper-motor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9937" PostTypeId="1" CreationDate="2016-05-24T21:53:38.157" Score="4" ViewCount="81" Body="&lt;p&gt;Since the encoder is square wave not quadrature, do you have to stop first before changing directions for proper measurements?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In other words, if you are commanding along in one direction at some low speed like 50mm/s or less and want to change direction to -50mm/s, would you first need command it to zero and wait for the encoder to read 0 speed, and then command the reverse direction, in order to get as accurate as possible encoder readings?&lt;/p&gt;&#xA;" OwnerUserId="13780" LastEditorUserId="9743" LastEditDate="2016-05-25T03:28:12.357" LastActivityDate="2016-05-25T17:30:15.333" Title="Do you have to stop first when switching direction for proper encoding readings?" Tags="&lt;irobot-create&gt;&lt;roomba&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="9939" PostTypeId="2" ParentId="9923" CreationDate="2016-05-25T08:40:05.890" Score="1" Body="&lt;p&gt;You don't need to send any mavlink message. You can simply change the parameter &lt;strong&gt;SR1_EXTRA_1&lt;/strong&gt; to desired Attitude data rate and your data rate will be changed. Similarly you can change other parameter to change data rate of other messages.&#xA;More information of messages can be found at &lt;a href=&quot;https://github.com/ArduPilot/ardupilot/blob/master/ArduCopter/GCS_Mavlink.cpp#L821&quot; rel=&quot;nofollow&quot;&gt;https://github.com/ArduPilot/ardupilot/blob/master/ArduCopter/GCS_Mavlink.cpp#L821&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2118" LastActivityDate="2016-05-25T08:40:05.890" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9941" PostTypeId="1" AcceptedAnswerId="9950" CreationDate="2016-05-25T10:33:57.157" Score="0" ViewCount="84" Body="&lt;p&gt;I am trying to run 2 12V Geared DC motors which has No-load current = 800 mA(Max), Load current = upto 9.5 A(Max). Runtime to be atleast 3-4 hours.&lt;br&gt;&#xA;The motor takes about 10-12 V for operation.&lt;br&gt;&#xA;I need a proper battery pack for these, but how can I determine the specs I should go for?&lt;/p&gt;&#xA;" OwnerUserId="13533" LastEditorUserId="9720" LastEditDate="2016-05-27T12:39:17.407" LastActivityDate="2016-05-27T14:27:49.290" Title="Suggestion for correct battery pack" Tags="&lt;motor&gt;&lt;battery&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="9942" PostTypeId="2" ParentId="479" CreationDate="2016-05-25T11:32:54.260" Score="1" Body="&lt;p&gt;one simple way to do this is &#xA;numpy.random.choice(N, N, p=w, replace=True)  where N is the no. of particles and w = normalized weights.&lt;/p&gt;&#xA;" OwnerUserId="13787" LastActivityDate="2016-05-25T11:32:54.260" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9943" PostTypeId="2" ParentId="9937" CreationDate="2016-05-25T17:30:15.333" Score="2" Body="&lt;p&gt;From the OI Spec (encoder count sensors):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;NOTE: These encoders are square wave, not quadrature, so they rely on&#xA;  the robot’s commanded velocity direction to know when to count&#xA;  up/down. So if the robot is trying to drive forward, and you force the&#xA;  wheels to spin in reverse, the encoders will count up, (and&#xA;  vice-versa). Additionally, the encoders will count up when the&#xA;  commanded velocity is zero and the wheels spin.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If you manually move the wheel while it is at rest, it will always assume it was moved forward.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So when driving forward, you may get slightly more accuracy if you stop briefly and let the robot settle, If you are moving backwards, it may be best to set it to, say -1 mm/s, for a brief time then 0.&lt;/p&gt;&#xA;" OwnerUserId="9743" LastActivityDate="2016-05-25T17:30:15.333" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9945" PostTypeId="2" ParentId="9904" CreationDate="2016-05-26T02:07:34.943" Score="3" Body="&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;You have to analytically compute all IK solutions.  This is basically done with straightforward geometry.  Most robotics textbooks with a section on manipulation will have a detailed explanation of this.  But you might also want to check out the &lt;a href=&quot;http://openrave.org/docs/0.8.2/openravepy/ikfast/&quot; rel=&quot;nofollow noreferrer&quot;&gt;ikfast&lt;/a&gt; library.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I am not sure if your gradient decent solution is guaranteed to have any special properties.  But I think it will probably be the closest solution in joint space except for in some special cases.  Note that there may be reasons to choose a different IK solution.  My answer to this post has a list of some metrics that you may be interested in: &lt;a href=&quot;https://robotics.stackexchange.com/questions/9228/evaluating-the-similarity-of-two-7-degree-of-freedom-arms/&quot;&gt;Evaluating the similarity of two 7 Degree of Freedom Arms&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Yes, I believe that there are circumstances that can cause gradient decent to fail.  (But this probably depends on the degrees of freedom and workspace of your arm).  See this thread for more info: &lt;a href=&quot;https://robotics.stackexchange.com/questions/7181/is-the-geometric-inverse-problems-solution-continuous-for-a-redundant-robot&quot;&gt;Is the geometric inverse problem&amp;#39;s solution &amp;quot;continuous&amp;quot; for a redundant robot?&lt;/a&gt;. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="110" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2016-05-26T02:07:34.943" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9946" PostTypeId="1" AcceptedAnswerId="9981" CreationDate="2016-05-26T13:03:08.070" Score="0" ViewCount="815" Body="&lt;p&gt;Good day,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am currently working on an autonomous quadcopter project. I have currently implemented a cascaded PID controller consisting of two loops. The inner rate loop takes the angular velocity from the gyroscope as measurements. The outer stabilize/angle loop takes in angle measurements from the complementary filter (gyroscope + accelerometer angles). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Question:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to ask if it is effective to cascade a Lateral Velocity (X and Y - axis) PID controller to the the Angle Controller (Roll and Pitch) to control drift along the X-Y plane. For the outermost PID controller, the setpoint is 0 m/s with the measured velocities obtained from integrating linear accelerations from the accelerometer. This then controls the PID controller responsible for the Pitch (if Y velocity PID) and Roll (if X velocity PID).&lt;/p&gt;&#xA;" OwnerUserId="11311" LastActivityDate="2016-06-01T13:30:20.057" Title="Quadcopter: X-Y Velocity PID Controller" Tags="&lt;quadcopter&gt;&lt;control&gt;&lt;pid&gt;&lt;raspberry-pi&gt;&lt;stability&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9947" PostTypeId="1" CreationDate="2016-05-26T19:02:31.807" Score="1" ViewCount="131" Body="&lt;p&gt;For my final year in Computer Science university I will be doing a dissertation that includes controlling a drone through computer and communication with an onboard camera for computer vision.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first step is obtaining a drone that suits my needs, and I have no clue how to go about it. Basically what is needed is a drone that will be able to communicate with a computer both for its movement and to &quot;stream&quot; the video to the computer for analysis. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, would I go for a store bought drone, a rasperry pi or some other microcontroller based one etc. What do I need to take into consideration etc?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S. the project is going to be based indoors, so I don't need crazy range, or very powerf&lt;/p&gt;&#xA;" OwnerUserId="13797" LastActivityDate="2016-05-27T12:32:09.287" Title="Starting out, dissertation project using computer controlled drone" Tags="&lt;quadcopter&gt;&lt;control&gt;&lt;microcontroller&gt;&lt;computer-vision&gt;" AnswerCount="0" CommentCount="5" ClosedDate="2016-05-27T12:32:13.553" ContentLicense="CC BY-SA 3.0" />
  <row Id="9948" PostTypeId="2" ParentId="9916" CreationDate="2016-05-27T00:01:39.863" Score="4" Body="&lt;p&gt;It is also often the case that the author lacks knowledge, makes mistakes, or is adding unnecessary statements to their work. Just because it is published does not make it true. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this case though, it might be that the &lt;a href=&quot;https://en.wikipedia.org/wiki/Serial_comma#Resolving_ambiguity&quot; rel=&quot;nofollow&quot;&gt;conjuction &quot;and&quot; and commas&lt;/a&gt; are confusing you.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;such as object recognition and pose estimation, visual odometry, and SLAM&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;could probably be written more clearly as&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;such as object recognition, object pose estimation, visual odometry, and SLAM.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;so I would interpret them as different.&lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="184" LastEditDate="2016-05-27T00:07:09.540" LastActivityDate="2016-05-27T00:07:09.540" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9949" PostTypeId="2" ParentId="9935" CreationDate="2016-05-27T09:49:25.743" Score="1" Body="&lt;p&gt;When no other load is on the motor, any torque that the motor is producing is to overcome the friction. If you know how to calculate your friction from the torque needed to overcome it (I don't), then the rest is easy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You need a way to control the speed, a way to measure the speed, and a way to measure the current. You also need the motor specs, specifically the torque constant, Kt. A variable power supply should allow you to dial in 200 rpm. When you're at the correct speed, measure the current. Then multiply your measured current by Kt, and you now know the torque. Then simply convert the torque to friction using the equation $T = b\omega$ (rearrange for the friction coefficient to get $b = \frac{T}{\omega}$) where $T$ is the torque in N m and $\omega$ is the angular velocity in rad/s to get $b$ in N m s.&lt;/p&gt;&#xA;" OwnerUserId="13775" LastEditorUserId="13878" LastEditDate="2016-06-28T00:52:41.437" LastActivityDate="2016-06-28T00:52:41.437" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9950" PostTypeId="2" ParentId="9941" CreationDate="2016-05-27T14:27:49.290" Score="1" Body="&lt;p&gt;You haven't given a nominal (average or anticipated &quot;normal&quot;) current draw for what you expect during the routine operation, so what I'm going to do will probably give you an over-specified battery pack for what you need. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typically you would have some &quot;worst case&quot; load (all your sensors powered on, microcontroller powered on, all motors at full load, etc.) - this will provide the worst-case current draw and will establish what kind of a &quot;C&quot; rating the battery pack needs to have (more on this later).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, you typically aren't going to be operating at worst-case all the time, so you assume maybe your average duty cycle has all your electronics on and maybe your motors at 60% - again, this would be the &lt;em&gt;average&lt;/em&gt; motor power during the entire time your device is powered on. This would establish what total capacity was required to provide the desired run time. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A &quot;C&quot; rate is the current that would drain (or charge) 100% of battery capacity in 1 hour. So, for a 1000mAh battery, 1C is (1000mAh/1h) = 1000mA, or 1A. Different battery styles and chemistries have different charging and discharging C rates, or maximum allowable current limits. The nice thing about using a C rate instead of an actual current limit is that it scales correctly for all batteries of a particular style and chemistry, regardless of capacity. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, the easiest way to determine capacity is to figure your nominal total load and multiply that by your run time requirement. The best way to work with load is to multiply the current for each component by its operating voltage and get an operating &lt;em&gt;power&lt;/em&gt;. Sum all of your component power requirements, then divide that by the battery pack's nominal voltage. Once you get a total current requirement &lt;em&gt;in terms of your battery voltage&lt;/em&gt;, then multiply that by your desired run time to get required battery capacity. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your case, you don't give an &lt;em&gt;average&lt;/em&gt; load current, just a &lt;em&gt;maximum&lt;/em&gt; current. So, based on that, you need a $(12\mbox{V})*(9.5\mbox{A})*(4\mbox{h}) = 456\mbox{Wh}$ battery. This is a significant amount of capacity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are using a lead-acid battery, with a nominal voltage of 12V, then you need a capacity of 38Ah. If you are using a LiPO battery, with a nominal cell voltage of 3.6V, then you would need 3 (10.8V) or 4 (14.4V) in series (3S or 4S pack), and your required capacity is 42.2Ah or 31.7Ah, respectively. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depending on how detailed you want to be with your battery pack specifications (or how stringent your requirements are) you may want to dig a little deeper with the pack design. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For instance, quality battery manufacturers should provide a curve that shows battery capacity versus discharge limits. As battery discharge current increases, the pack heats up and the internal resistance of the battery increases. This means that more power is wasted in the battery pack, reducing the effective output capacity of the battery.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More important even than that is checking the battery cycles versus depth of discharge. Some batteries could give you 2000 cycles if you discharge down to 40 percent state of charge but only 500 cycles if you went to 20 percent state of charge. Then it's up to you to determine what the benefit is of driving to a lower state of charge. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For instance, if you &lt;em&gt;need&lt;/em&gt; to have 10Ah of capacity, you could either go to a (10/0.6) = 16.6Ah battery to go to a 40% state of charge during one &quot;run&quot; or you could use a (10/0.8) = 12.5Ah battery and push to a 20% state of charge. Both packs get you the capacity you need, but you'll wear out the smaller pack first because you're driving to a deeper depth of discharge. However, the benefits (reduced weight, reduced volume) may outweigh the cost (literally, cost of replacing the packs on a 4:1 basis) of using the larger pack. The smaller pack may also actually be less expensive than the larger pack, which could also help justify that decision. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'll add too that, while you may commonly &quot;float&quot; a lead-acid battery to near 100% state of charge, it's bad (read:fires happen) when you try to do the same for lithium chemistry batteries. That is, lithium batteries may typically only ever get charged to 90% state of charge. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;So, in summary&lt;/strong&gt;, &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Multiply your load current by the load voltage to get load power. Do this for each device you want to run. &lt;/li&gt;&#xA;&lt;li&gt;Add these load powers together to get the total load power required, then multiply &lt;em&gt;that&lt;/em&gt; by the desired run time to get the capacity requirement. &lt;/li&gt;&#xA;&lt;li&gt;Choose a battery chemistry. This is generally based on energy density (how much the batteries weigh for a given capacity) and specific energy (how much space the batteries take up for a given capacity). &lt;/li&gt;&#xA;&lt;li&gt;Based on the chemistry selected, add &lt;em&gt;nominal&lt;/em&gt; cell voltages together until the desired operating voltage is achieved. &lt;/li&gt;&#xA;&lt;li&gt;Using the same number of batteries selected above to achieve operating voltage, add the &lt;em&gt;maximum&lt;/em&gt; cell voltages together and ensure that no maximum voltage specification is exceeded. &lt;/li&gt;&#xA;&lt;li&gt;Divide the total capacity requirement in Wh or mWh by the &lt;em&gt;nominal&lt;/em&gt; pack voltage calculated in step 4 to get the ideal battery capacity. &lt;/li&gt;&#xA;&lt;li&gt;Find the allowable charge limits on the battery, based on depth of discharge limits and common charge limits. For instance, if the battery manufacturer suggests limiting discharge to 40% state of charge (a 60% depth of discharge), and suggests not charging above 90% state of charge, then the battery only really has 50% of its rated capacity available as useful output. &lt;/li&gt;&#xA;&lt;li&gt;Find the actual required battery capacity by (ideal capacity)/(max charge - min charge). So a 10Ah battery that can only run between 40% and 90% would be (10Ah)/(0.9 - 0.4) = 20Ah pack required. &lt;/li&gt;&#xA;&lt;li&gt;Finally, design the pack. The number of cells in series was calculated in step 4 above. Find a particular cell to use and get that battery's capacity. Divide the actual required capacity found in step 8 above and divide that by the cell capacity to get the number of cells to put in parallel. Take the ceiling of that number, which means if you find you need 2.05 cells in parallel, you need 3 cells in parallel to meet your requirements. &lt;/li&gt;&#xA;&lt;li&gt;The total number of batteries required is the number in series (from step 4) multiplied by the number in parallel (from step 9). &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-05-27T14:27:49.290" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9951" PostTypeId="1" AcceptedAnswerId="9952" CreationDate="2016-05-28T03:34:12.307" Score="4" ViewCount="2254" Body="&lt;p&gt;The other day, somebody was telling me about a robot in their lab, and they mentioned that it has &quot;series elastic&quot; actuators. But after doing a bit of Googling, I'm still not sure as to what this means, and have been unable to find a simple explanation. It seems that it is something to do with the link between the actuator and the load having a spring-like quality to it, but this is rather vague...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In any case, the what I am really interested in is the advantages and disadvantages of series elastic actuators. Specifically, I have read that one of the advantages is that it allows for &quot;more accurate and stable force control&quot;. However, this appears counter-intuitive to me. I would have thought that if the link between the actuator and the load was more &quot;springy&quot;, then this would lower the ability to have accurate control over the force send to the load, because more of this force would be stored and dissipated in the spring, with less directly transferred to the load.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So: Why do series elastic actuators have &quot;more accurate and stable force control&quot;?&lt;/p&gt;&#xA;" OwnerUserId="8880" LastActivityDate="2016-05-28T06:53:24.727" Title="Why do series elastic actuators have more accurate and stable force control?" Tags="&lt;robotic-arm&gt;&lt;actuator&gt;&lt;dynamics&gt;&lt;torque&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9952" PostTypeId="2" ParentId="9951" CreationDate="2016-05-28T06:53:24.727" Score="5" Body="&lt;p&gt;Series elastic actuators tend to have more stable force control because the spring filters out the high-frequency motion of the mechanism. A low frequency in the system dynamics means that you can use slower control techniques, which is important when using digital controllers with naive control implementations, and sensors with significant abbe error and latency.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In short, springs make the implementation of the controller easier when the designer does not have the skill or the time to optimize the performance of the actuator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your intuition is generally correct, except that SEA designers try to use springs without much dissipation. They are often (usually) measuring the displacement of the spring to estimate force.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beware of people using SEA as a buzzword they don't really understand. Once upon a time it referred to a specific thesis and patent from MIT. The Series Elastic Actuator as designed at MIT was hyped in typical MIT fasion as innovative and orginal, probably a bit beyond what it actually was. Over time it's come to mean the general approach of intentionally inserting extra compliance into an actuator. Meanwhile, using appropriate compliance has been good mechanism design for hundreds of years. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://www.cc.gatech.edu/fac/Chris.Atkeson/legs/jh1c.pdf&quot;&gt;original&lt;/a&gt; &lt;a href=&quot;https://groups.csail.mit.edu/lbr/hrg/1995/mattw_ms_thesis.pdf&quot;&gt;papers&lt;/a&gt; are worth reading. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a final note, the latency in your sensing-&gt;actuation response (including the mechanical time constants) is the key issue. If you don't specifically need mechanical filtering (maintaining smooth contact with the environment was one of the original motivations) you can filter electronically.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2016-05-28T06:53:24.727" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9953" PostTypeId="1" AcceptedAnswerId="9973" CreationDate="2016-05-28T10:08:01.727" Score="8" ViewCount="759" Body="&lt;p&gt;Suppose I have one robot with two 3D position sensors based on different physical principles and I want to run them through a Kalman filter. I construct an observation matrix two represent my two sensors by vertically concatenating two identity matrices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$H = \begin{bmatrix} 1&amp;amp;0&amp;amp;0\\0&amp;amp;1&amp;amp;0\\0&amp;amp;0&amp;amp;1\\1&amp;amp;0&amp;amp;0\\0&amp;amp;1&amp;amp;0\\0&amp;amp;0&amp;amp;1 \end{bmatrix}$ $\hspace{20pt}$&#xA; $\overrightarrow x = \begin{bmatrix} x\\y\\z \end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;so that &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$H \overrightarrow x = \begin{bmatrix} x\\y\\z\\x\\y\\z \end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;which represents both sensors reading the exact position of the robot. Makes sense so far. The problem comes when I compute the innovation covariance&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$S_k = R + HP_{k|k-1}H^T$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$H H^T = \begin{bmatrix}&#xA; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\&#xA; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\&#xA; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \\&#xA; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\&#xA; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \\&#xA; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\&#xA; \end{bmatrix}$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;then, no matter what $P$ is, I'm going to wind up with $x$ innovations from the first sensor being correlated to $z$ innovations from the second, which seems intuitively wrong, if I'm interpreting this right. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Proceeding from here, my gain matrix ($K = P_{k|k-1} H^T S_k^{-1}$) winds up doing some pretty odd stuff (swapping rows and the like) so that, when updating a static system ($A = I_3, B = [0]$) with a constant measurement $\overrightarrow z = [1,0,0]$ I wind up with a predicted state $\hat x = [0,0,1]$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I separate the sensors and update the filter with each measurement separately, then $H H^T = I_3$, and I get sensible results.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think I am confused about some technical points in one or more of these steps. Where am I going wrong? Does it not make sense to vertically concatenate the observation matrices?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suppose that I could just set the off-diagonal 3x3 blocks of $S_k$ to 0, since I know that the sensors are independent, but is there anything in the theory that suggests or incorporates this step?&lt;/p&gt;&#xA;" OwnerUserId="13811" LastEditorUserId="13811" LastEditDate="2016-05-28T12:14:54.347" LastActivityDate="2016-05-31T14:26:04.407" Title="kalman filter with redundant sensors" Tags="&lt;kalman-filter&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9955" PostTypeId="1" CreationDate="2016-05-28T17:06:21.167" Score="3" ViewCount="104" Body="&lt;p&gt;I'm looking to find out, How do human-like legs compare to chicken legs and four-leg systems. In terms of cost, performance, speed, strength and accuracy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm interested in things like speed, agility, turning radius, complexity and cost.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a design large enough for a person to ride, rider fatigue is also important -- how do they compare in terms of achievable ride smoothness, vibration, and so on?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there quantitative benefits of 3 DOF hip joints, compared to 2 DOF?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I realize other factors will come into play as well, such as actuators, joint designs and control systems.&#xA;However, my interest at the moment is how basic leg designs compare to one another.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: I'm looking for someone who has used these mechanisms first hand.&lt;/p&gt;&#xA;" OwnerUserId="13819" LastEditorUserId="13819" LastEditDate="2016-05-29T15:49:02.433" LastActivityDate="2016-05-29T15:49:02.433" Title="I'm looking for hands-on experience with different types of leg and hip designs for walking robots" Tags="&lt;kinematics&gt;&lt;walking-robot&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="2" ClosedDate="2016-06-07T15:15:38.317" ContentLicense="CC BY-SA 3.0" />
  <row Id="9956" PostTypeId="1" CreationDate="2016-05-28T18:11:01.917" Score="2" ViewCount="121" Body="&lt;p&gt;I just started learning about slam and I have been trying to simulate a robot moving around a set of landmarks for the past 3 days. The landmarks have known correspondences. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My problem is, if I add motion noise to the covariance matrix in the prediction step, the robot starts to behave very weirdly. If I don't add motion noise in the prediction step, the robot will move around perfectly. I have been trying to figure out why this is happening for 3 days now but cannot find anything wrong with my code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have attached a link to github which has all the files pertaining to my project. In the folder named 'octave' the file 'prediction_step' and 'correction_step' contains code for the prediction and correction steps respectively. The ekf_slam file is the main loop which calls the above two functions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My github repository also contains 3 videos which correspond to robot with no motion noise, robot with motion noise and another video which shows how the robot should ideally go about.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please help me in figuring out what is wrong with my code in 'prediction_step' and 'correction_step'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Link to my github repository: &lt;a href=&quot;https://github.com/harishsatishchandra/EKF-SLAM.git&quot; rel=&quot;nofollow&quot;&gt;please click here&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="13817" LastActivityDate="2016-05-28T18:11:01.917" Title="Need help in implementing EKF based SLAM" Tags="&lt;slam&gt;&lt;ekf&gt;" AnswerCount="0" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9957" PostTypeId="2" ParentId="1408" CreationDate="2016-05-28T21:21:32.030" Score="0" Body="&lt;p&gt;You can use an Ethernet-enabled microcontroller as someone mentioned above. The board can be used as the interface between the network and the mechanism that you will be using to push the button.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the mechanism you can use a servo motor or a pneumatic that releases with less force(you can control this by adjusting the inputs to the pneumatics manually). Any thing you use will have to have a control or a drive circuitry that triggers the mechanism.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will have to write a code block for the conversion of the frame received via the Ethernet to a control signal understandable by the control circuitry.&lt;/p&gt;&#xA;" OwnerUserId="7408" LastEditorUserId="9720" LastEditDate="2016-05-31T15:28:02.970" LastActivityDate="2016-05-31T15:28:02.970" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9959" PostTypeId="2" ParentId="9955" CreationDate="2016-05-29T02:18:10.320" Score="0" Body="&lt;p&gt;Google &quot;strandbeest&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I got the perportions in the photograph from a robotic toy. These legs move very smoothly and would make for a comfortable ride.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The numbers are from counting the holes in the toy's construction beams. The drawing is one half of one side of the toy with another mirror image leg to the  right. The circle the  left is a pivot and the circle on the right is a crank with a radios of three holes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a smooth ride you need to have four legs on each side with the same fixed and moving points with 2 pairs of 2 legs on each side driven 180 degrees from each other at the moving point.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Good luck. I could not post the picture so email me for the picture. &lt;/p&gt;&#xA;" OwnerUserId="13821" LastActivityDate="2016-05-29T02:18:10.320" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9960" PostTypeId="2" ParentId="9955" CreationDate="2016-05-29T02:33:57.513" Score="0" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;For a design large enough for a person to ride, rider fatigue is also important -- how do they compare in terms of achievable ride smoothness, vibration, and so on?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=gtRpx57KqjY&quot; rel=&quot;nofollow&quot;&gt;Current&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=coNO9FpDb6E&quot; rel=&quot;nofollow&quot;&gt;past&lt;/a&gt; designs tend to be pretty slow. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My vote is for &lt;a href=&quot;http://jeb.biologists.org/content/217/21/3786.short&quot; rel=&quot;nofollow&quot;&gt;chicken legs...&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="184" LastEditDate="2016-05-29T10:54:02.143" LastActivityDate="2016-05-29T10:54:02.143" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="9961" PostTypeId="2" ParentId="9925" CreationDate="2016-05-29T13:56:54.143" Score="2" Body="&lt;p&gt;I have found out that my code works. It is just that most of the literature I have read uses Lidar or Sonar sensors for histogram updates. I had assumed that in the case of a stereo vision set-up, all sectors are updated simultaneously. However only the sectors in the field of view of the camera is update unlike in the lidar implementation that samples a complete 360 degree sweep of its surroundings. Another thing I have found out that when deriving the X and Y coordinates from the depthmap, the resulting map is a mirror image of the actual surrounding thus the sectors must be labeled counter clockwise. I used the formula from NI' s paper linked at the code. The same case is also true when using the camera matrix with open cv to obtain the real world X,Y coordinates from the depth map. I shall edit this question to a clearer one soon :)&lt;/p&gt;&#xA;" OwnerUserId="11311" LastActivityDate="2016-05-29T13:56:54.143" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9962" PostTypeId="1" CreationDate="2016-05-29T16:58:12.910" Score="1" ViewCount="1187" Body="&lt;p&gt;How do I linearize the following system using taylor series expansion:&lt;br/&gt;&#xA;$\dot x = v cos\theta \\ \dot y = v sin\theta \\ \dot \theta = u$&#xA;&lt;br/&gt;&#xA;Here, $\theta$ is the heading direction of my robot, measured counter clockwise with respect to $x$ axis.&lt;br/&gt;&#xA;$v$ is the linear velocity of the robot,&lt;br/&gt;&#xA;$u$ is the angular velocity of the robot.&lt;/p&gt;&#xA;" OwnerUserId="13825" LastActivityDate="2016-06-21T21:15:41.913" Title="Linearize a non linear system" Tags="&lt;mobile-robot&gt;&lt;localization&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9963" PostTypeId="1" CreationDate="2016-05-29T19:13:18.077" Score="2" ViewCount="524" Body="&lt;p&gt;I have a problem with two robots and two obstacles in a space. Each robot can communicate its measurements to the other and can measure angles and distances.&#xA;The two obstacles in the environment are identical to each other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each robot can see both obstacles but not each other. Therefore have angle theta 1 and 2 combined with distance 1 and 2. Can the distance between the two robots be calculated?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/QvtCP.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QvtCP.jpg&quot; alt=&quot;Problem Set up&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So far I have placed circles with radius of the measured distance over each landmark (triangles in my workings), this provides 4 possible positions for each robot. Red and black circles correspond to robot 1 and blue and green to robot 2. Using the relative size of the angle measurements I can discount two of these positions per robot.&#xA;This still leaves me with two possible positions for each robot shown with the filled or hashed circles.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/a6xPJ.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/a6xPJ.jpg&quot; alt=&quot;Workings so far&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it possible to calculate which side the robot is to the landmarks and the distance between each other?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Robot 1 only has the two measurements of angle and distance and can therefore assign an id to each obstacle, but when information is transmitted to robot 2, robot 2 does not know which obstacle will have been designated an id of 1 or 2.&lt;/p&gt;&#xA;" OwnerUserId="13826" LastEditorUserId="184" LastEditDate="2016-05-29T23:04:26.270" LastActivityDate="2016-05-31T23:44:36.300" Title="Distance calculation with two robots and two obstacles" Tags="&lt;localization&gt;&lt;kinematics&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9964" PostTypeId="2" ParentId="9963" CreationDate="2016-05-29T23:35:08.073" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Is it possible to calculate which side the robot is to the landmarks and the distance between each other?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, because the whole thing is point symmetric around the point in the middle between both obstacles. Each robot could be on either side, which gives 2 possible values for the distance between them, either for both being on the same side or being on opposite sides.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some solutions could represent both robots colliding with each other and you could rule those out if they are not colliding, but in general, you don't know which solution is correct.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Each robot can see both obstacles but not each other.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Whatever property of the obstacles is used to identify them could possibly be added to each robot, which could then be detected by the other one.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Each robot can communicate its measurements to the other and can measure angles and distances.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In theory, you could measure the time this communication takes. Either by &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;having synchronized clocks and sending a time stamp or&lt;/li&gt;&#xA;&lt;li&gt;having each robot throw the message received back at the other robot immediately to let the signal travel the distance twice.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;From that time and the speed you can calculate the distance. In practice, if the signal speed is very high, you need very precise timers to do this properly.&lt;/p&gt;&#xA;" OwnerUserId="9860" LastActivityDate="2016-05-29T23:35:08.073" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9965" PostTypeId="1" AcceptedAnswerId="9966" CreationDate="2016-05-30T01:58:47.980" Score="4" ViewCount="874" Body="&lt;p&gt;I am working through the book Learning Robotics using Python, which is for Python programmers who want to learn some robotics. Chapter 2 shows you how to use LibreCAD to design the plates and poles that form the chassis of the turtlebot-like robot. For instance, the base plate looks like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/1pGlY.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1pGlY.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, there is nothing more about it but suddenly in a later chapter there is a picture of the fully manufactured plates assembled into a chassis, and the author acts as if this should just be something we know how to do:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/mNsbC.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/mNsbC.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How did he do that? We have these CAD drawings, and suddenly there are these plates that were manufactured via some magical process the book never discusses, he never gives things like tolerances, the material that they are supposed to be made out of, etc., the kinds of things discussed here: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.omwcorp.com/how-to-design-machined-parts.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.omwcorp.com/how-to-design-machined-parts.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know nothing about this stuff, in terms of how to go from CAD design specs to getting an actual part manufactured. What kinds of companies should I use, what is a reasonable price to expect, what is the process? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general, how do I go from CAD design to manufactured item? Do I find a local machine shop that specializes in robotics, bring my CAD drawings, and work with them to try to build the parts?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am totally a noob, I hope this isn't a question like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://blog.stackoverflow.com/2010/11/qa-is-hard-lets-go-shopping/&quot;&gt;http://blog.stackoverflow.com/2010/11/qa-is-hard-lets-go-shopping/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13827" LastEditorUserId="9860" LastEditDate="2016-05-30T11:59:23.730" LastActivityDate="2016-05-31T21:56:04.680" Title="How to get manufactured part from CAD file?" Tags="&lt;design&gt;&lt;software&gt;&lt;manufacturing&gt;&lt;chassis&gt;&lt;hardware&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="9966" PostTypeId="2" ParentId="9965" CreationDate="2016-05-30T03:49:18.387" Score="4" Body="&lt;p&gt;I think this is a great question. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The two basic options are make it yourself or have someone else make it. EDIT: check the bottom for a third option...&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Make it yourself&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;To make it yourself you need to choose a material and manufacturing process for the part, then acquire the material and skills needed. (Usually people select a process they know how to do already.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a hobby robot, often the exact material is not too important. For instance, for the part you show, you could make it from wood, plastic, or metal and it would work ok. Cardboard or corrugated plastic (for making posters) would work too and you could cut it with a hobby/xacto knife. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The way to go is to find a friend that likes to make things and then get their help to learn some making skills. You can also try learning from a &lt;a href=&quot;http://www.wikihow.com/wikiHowTo?search=robot&quot; rel=&quot;nofollow&quot;&gt;website&lt;/a&gt; or book. (&lt;a href=&quot;http://www.instructables.com/&quot; rel=&quot;nofollow&quot;&gt;another website&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Have someone else make it&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;There are some companies that focus on the hobby market and you may find their services the easiest to use. &lt;a href=&quot;https://www.pololu.com/product/749&quot; rel=&quot;nofollow&quot;&gt;Pololu&lt;/a&gt; and &lt;a href=&quot;http://www.emachineshop.com&quot; rel=&quot;nofollow&quot;&gt;eMachineShop&lt;/a&gt; are two of many. I have never used them so you should read reviews online to determine if they will work for you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are lots of companies that specialize in fabricating parts using one process or another. You would have to learn a little bit about each process to choose whether it will work for any given part. If you are only making a few parts it is usually too expensive for a hobby project. eMachineShop is an easy way to get a general idea of what the cost of different processes because you can create your shape and then ask for quotes for different processes to make that shape. Laser cutting vs machining for the circular plate for instance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you can afford to use eMachineShop, it's definately worth checking out your local shops. The two factors that determine the cost are the quantity of parts and how &quot;hungry&quot; the shop is, meaning, how much business do they have going on right now. It's harder work to contact a lot of local shops, but if you do, you will probably be able to find one that will be cheaper than eMachineShop. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For simple shapes there are companies that have a catalog of basic designs for which you can change some dimensions or details when you order. &lt;a href=&quot;http://jp.misumi-ec.com/top/&quot; rel=&quot;nofollow&quot;&gt;Misumi&lt;/a&gt; is a good example. For basic shapes like shafts, brackets, bearing blocks and spacers, there is a good chance that you can get a semi-custom part cheaper than if you had a shop make it.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Option 3 - Adapt something that is close&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;There is no rule that you have to start from raw, unprocessed, material when making something. You can use something you find in a junk yard or at a store that is close to what you want and make small changes to it. Also, very few robots are made entirely from scratch. They all use components like bearings, motors, couplings, gears, and other things. There are many sources for these components. In the US, &lt;a href=&quot;http://www.mcmaster.com/#&quot; rel=&quot;nofollow&quot;&gt;McMaster Carr&lt;/a&gt; is a good place to start, &lt;a href=&quot;http://www.rs-components.com/index.html&quot; rel=&quot;nofollow&quot;&gt;RS&lt;/a&gt; is an international company worth checking.&lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="184" LastEditDate="2016-05-31T21:56:04.680" LastActivityDate="2016-05-31T21:56:04.680" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="9967" PostTypeId="1" CreationDate="2016-05-30T11:08:38.023" Score="3" ViewCount="5677" Body="&lt;p&gt;For the following controller what do &lt;span class=&quot;math-container&quot;&gt;$q_{des}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$q_{act}$&lt;/span&gt; stand for? Also, what is the general principle of this controller? &lt;a href=&quot;https://i.stack.imgur.com/hHZUI.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hHZUI.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="13398" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2017-08-29T12:31:02.617" Title="How to further understand the computed torque model controller" Tags="&lt;control&gt;&lt;microcontroller&gt;&lt;torque&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9968" PostTypeId="2" ParentId="9967" CreationDate="2016-05-30T14:48:40.963" Score="1" Body="&lt;p&gt;Setting &lt;em&gt;desired&lt;/em&gt; values for a robot's joints $q$ and measuring the &lt;em&gt;actual&lt;/em&gt; values is fundamental to any feedback control scheme.   I suggest you study the basics of feedback control if you are getting stuck on the meaning of those terms.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This controller allows the robot to achieve a desired position in joint space, $q$, with a PD control law that computes joint accelerations necessary to achieve those positions.   It then adds in a desired joint acceleration $\ddot q$ (this may be the novelty of this approach but I need more background information to confirm that) which, when passed through the system dynamics model $D$, determines the torques $\tau$, to apply to each motor.   $h(q, \dot q)$ appears to be a position and velocity observer that ensures $q$ achieves its final state, or it may be the actual plant dynamics.   I can clear up this answer if you also post more details about how the controller is defined from whatever reference you are using. &lt;/p&gt;&#xA;" OwnerUserId="11125" LastEditorUserId="11125" LastEditDate="2016-05-30T15:32:33.247" LastActivityDate="2016-05-30T15:32:33.247" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="9969" PostTypeId="1" AcceptedAnswerId="9976" CreationDate="2016-05-30T18:05:06.963" Score="0" ViewCount="37" Body="&lt;p&gt;is it possible to enhance (or redirect) the earth's magnetic field in a room or house so that one can write a small program that makes smartphones with hall-effect sensors detect more reliably in which direction they are pointing?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I presume a fridge magnet won't do the job...&lt;/p&gt;&#xA;" OwnerUserId="13837" LastActivityDate="2016-06-01T03:10:35.140" Title="augmenting room magnetic field for smartphone sensors" Tags="&lt;sensors&gt;&lt;hall-sensor&gt;" AnswerCount="1" CommentCount="3" ClosedDate="2016-05-31T21:05:20.597" ContentLicense="CC BY-SA 3.0" />
  <row Id="9971" PostTypeId="1" CreationDate="2016-05-31T02:26:34.417" Score="0" ViewCount="470" Body="&lt;p&gt;I read most of the iRobot Create 2 Open Interface (OI). It says send these serial commands to the Create 2 to get it to do the described action, but no suggestion of what software to use to send these serial commands through the USB interface.  I did install the FTDI Drivers to enable the USB to serial connection.  Question: What serial software should I use to communicate with Create 2?  Is there a tool to verify that the supplied usb to serial cable supplied with Create 2 is functioning and if the Create 2 is functioning? (I did a reset on Create 2 using Spot and Dock buttons)&lt;/p&gt;&#xA;" OwnerUserId="13839" LastActivityDate="2016-06-02T01:44:26.087" Title="What software to use to send (OI) commands to Create 2. Using windows laptop and supplied Create 2 cable?" Tags="&lt;irobot-create&gt;&lt;serial&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2016-06-08T14:26:33.597" ContentLicense="CC BY-SA 3.0" />
  <row Id="9972" PostTypeId="1" CreationDate="2016-05-31T13:54:34.390" Score="2" ViewCount="102" Body="&lt;p&gt;If I understand &lt;a href=&quot;https://cdn-shop.adafruit.com/datasheets/create_2_Open_Interface_Spec.pdf&quot; rel=&quot;nofollow&quot;&gt;the manual&lt;/a&gt;, each leg in each of the 7 segment displays is labeled with a letter A-G.  These letters then map to specific bits in a byte - 1 byte for each of the 4 displays.  Setting a bit turns on the corresponding leg while not setting it leaves it off.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With this understanding, I tried to turn on all the A segments by sending&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[163][1][1][1][1]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Instead of the A segment in each display turning on, the displays all showed a 1. Further testing shows that if I send the numbers 1-9 for any of the displays, they will display the number sent.  Sending the number 10 or greater turns on various combinations of the segments.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was able to activate individual segments with the following numbers:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;63 G&#xA;64 A&#xA;65 B&#xA;66 C&#xA;67 D&#xA;68 E&#xA;69 F&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;However, I haven't been able to determine how the bytes sent affect the individual segments. Either I don't understand the manual or &lt;strong&gt;Digit LEDs Raw&lt;/strong&gt; does not work as the manual specifies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE 03JUNE2016&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have confirmed this behavior exists in the following firmware versions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;r3-robot/tags/release-3.4.1:5858 CLEAN&lt;/li&gt;&#xA;&lt;li&gt;r3_robot/tags/release-3.2.6:4975 CLEAN&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="10502" LastEditorUserId="10502" LastEditDate="2016-06-03T21:07:42.323" LastActivityDate="2018-03-11T23:47:00.490" Title="Issue using Digit LEDs Raw (op code 163) on Create2" Tags="&lt;irobot-create&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="9973" PostTypeId="2" ParentId="9953" CreationDate="2016-05-31T14:26:04.407" Score="2" Body="&lt;p&gt;Are you sure about your expression for $HH^T$?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I get&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;HH^T = \begin{bmatrix}&#xA;1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\&#xA;0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \\&#xA;0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\&#xA;1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\&#xA;0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \\&#xA;0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &#xA;\end{bmatrix}&#xA;$$&#xA;which agrees with your intuition.&lt;/p&gt;&#xA;" OwnerUserId="13844" LastActivityDate="2016-05-31T14:26:04.407" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9974" PostTypeId="2" ParentId="9972" CreationDate="2016-05-31T18:40:50.773" Score="0" Body="&lt;p&gt;From what I see here, it appears that the manual does not reflect the behavior that you are seeing.  The sequence of ASCII values &lt;code&gt;[163][1][1][1][1]&lt;/code&gt; (&lt;code&gt;0xA3 0x01 0x01 0x01 0x01&lt;/code&gt;) should produce 4 lit &lt;code&gt;A&lt;/code&gt; segments on the display, just like you noted.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The behavior you're seeing doesn't even match what the manual says for code &lt;code&gt;164&lt;/code&gt; (ASCII input).  For all the displays to show a '1', that command would be &lt;code&gt;0xA4 0x31 0x31 0x31 0x31.&lt;/code&gt;&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2016-05-31T18:40:50.773" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9975" PostTypeId="2" ParentId="9963" CreationDate="2016-05-31T19:09:21.957" Score="1" Body="&lt;p&gt;If you consider the system to be completely static (as you have drawn it), there is no way to know.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;However&lt;/strong&gt;, if the system you are describing is not limited to 2 obstacles and one precise moment in time, then your robots can discover where they are by moving around.  It sounds like the full set of data that your robot has access to -- at every timeslice -- is the following:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Unordered set of (distance, angle) pairs, indicating the obstacles it sees&lt;/li&gt;&#xA;&lt;li&gt;Unordered set of (distance, angle) pairs, indicating the obstacles the other robot sees&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Distances and angles to landmarks are the raw inputs for the SLAM algorithm.  So in the most extreme case, each robot would be able to run SLAM for both itself and the other robot (based on reported positions), &lt;a href=&quot;http://ieeexplore.ieee.org/xpl/login.jsp?tp=&amp;amp;arnumber=1250630&amp;amp;url=http%3A%2F%2Fieeexplore.ieee.org%2Fxpls%2Fabs_all.jsp%3Farnumber%3D1250630&quot; rel=&quot;nofollow&quot;&gt;merge the two maps&lt;/a&gt;, and then calculate the distance between the localized positions of each robot on that map.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There may be a simpler way to do it that I'm completely overlooking.  However, based on the assumption that the obstacle IDs are not shared between robots, I'm not sure how that might work.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="350" LastEditDate="2016-05-31T23:44:36.300" LastActivityDate="2016-05-31T23:44:36.300" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9976" PostTypeId="2" ParentId="9969" CreationDate="2016-05-31T19:36:34.057" Score="1" Body="&lt;p&gt;This question might be better suited to &lt;a href=&quot;https://physics.stackexchange.com/&quot;&gt;the Physics StackExchange&lt;/a&gt;, but the back-of-the-envelope calculation goes like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Earth's magnetic field is 31.869 µT, and a refrigerator magnet is 5000µT.  So the refrigerator magnet will very readily affect the magnetometer (not usually called a hall-effect sensor) on a smartphone.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, you will run into two very serious problems&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;The strength of a magnet follows the inverse square law -- it drops off rapidly with distance.  You can verify this with a handheld compass: see how close your magnet needs to be in order for it to pull the needle away from magnetic north.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The magnetic field curves around the magnet.  For the earth, this is not a major concern because you are (more or less) standing on the surface where the lines run (more or less) straight from north to south.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;For your room-sized magnetic field to work, you would need to establish a magnet far enough away that its field lines would have minimal curvature through the area that you want to measure, and strong enough that those field lines would have enough strength to dominate the 31.869 µT provided by Earth's magnetic field.&lt;/p&gt;&#xA;" OwnerUserId="350" LastEditorUserId="-1" LastEditDate="2017-04-13T12:40:13.570" LastActivityDate="2016-06-01T03:10:35.140" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9977" PostTypeId="2" ParentId="9967" CreationDate="2016-06-01T02:32:13.303" Score="4" Body="&lt;p&gt;One of the most common controllers is a &lt;strong&gt;computed-torque&lt;/strong&gt; controller, also known as the &lt;strong&gt;inverse dynamics&lt;/strong&gt;. The preceding controller is based on the &lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Feedback_linearization&quot; rel=&quot;nofollow noreferrer&quot;&gt;feedback linearization&lt;/a&gt;&lt;/strong&gt; principle which is an approach that maps a nonlinear model into a linear one and treats it as such as we will show momentarily. Consequently, one can utilize linear controllers such as PD and PID controllers to control nonlinear systems. For example, dynamics equation of robot is usually represented as follows, &#xA;$$&#xA;M(q) \ddot{q} + C(q,\dot{q}) + G(q) = \tau&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $q, M(\cdot), C(\cdot), G(\cdot)$ and $\tau$ are a set of generalized coordinates, the inertia matrix, the Coriolis/Centripetal vector, the gravity vector and the control input, respectively. One of many goals of a control engineer is to choose the control input $\tau$ so that the robot should follow a desired trajectory (i.e. denoted as $q_{des}$ or $q_{d}$ for short). The aforementioned equation can be rewritten as &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\ddot{q} = M^{-1}(q)[\tau  - C(q,\dot{q}) - G(q)]&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now if we can cancel the nonlinear terms (i.e. $M(\cdot), C(\cdot)$ and $G(\cdot) $), then we can choose any linear controller. Assume now the matrix $M(\cdot)$ and the vectors $C(\cdot), G(\cdot)$ are given, therefore, one can easily choose the control input $\tau$ as follows &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\tau = M(q)[ \Lambda] + C(q,\dot{q}) + G(q) &#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $\Lambda$ depends on the chosen controller. In the PD computed-torque, $\Lambda$ is defined as follows &#xA;$$&#xA;\Lambda = \ddot{q}_{d} + k_{p} \dot{e} + k_{d} e&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $e$ is the tracking error $ e(t) = q_{d}(t) - q(t)$ which is defined as the difference between the desired and actual joint angles (i.e. they  are in your case $q_{des}$ and $q_{act}$ ). The disadvantage of computed-torque control is the fact that the parameters of the model must be provided precisely. If there is uncertainly which is always the case,   the PD computed-torque controller is not applicable. It is solely utilized in a pure simulation. Another disadvantage of the preceding controller is the fact that it requires the measurements of joint angles, hence the feedback name.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; I think you can now see how the diagram is generated from the above equations.&lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="-1" LastEditDate="2017-08-29T12:31:02.617" LastActivityDate="2017-08-29T12:31:02.617" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9978" PostTypeId="1" AcceptedAnswerId="9980" CreationDate="2016-06-01T07:15:00.347" Score="1" ViewCount="912" Body="&lt;p&gt;I have a 18 V rated driver I'm using to drive two 12 V DC gear motors using my Arduino. I bought a new battery pack which is rated 3300 mAh 25C, 11.1V making the total current input 82.5 A. My driver is rated for 7 V min and 18 V max, no current rating is given.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My motors are 12V max current under load is 9.5 A.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So just to be sure, can using this battery destroy my motor driver?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the &lt;a href=&quot;https://onedrive.live.com/redir?resid=EEABAA7CDCB08F75!40200&amp;amp;authkey=!AGgKQkCY0LNj7v8&amp;amp;ithint=file%2Cpdf&quot; rel=&quot;nofollow&quot;&gt;datasheet&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="13533" LastEditorUserId="10596" LastEditDate="2016-06-01T12:56:59.070" LastActivityDate="2016-06-03T06:47:51.233" Title="Can too much input current destroy my motor driver?" Tags="&lt;motor&gt;&lt;battery&gt;&lt;current&gt;" AnswerCount="3" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="9980" PostTypeId="2" ParentId="9978" CreationDate="2016-06-01T11:58:56.617" Score="4" Body="&lt;p&gt;You are approaching the problem from wrong side. Current capability of a battery (25C) has nothing to do with that how much current will it actually source. It is the load (motors in that case) what defines the current, not the battery. You could use 10C, 25C, 50C battery, and the current flowing through the motors would be (approximately) the same, as long as it does not exceed the maximum current allowed for the battery (82 Amps in your case)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a side note - I find it hard to believe, that there is no maximum current defined in the motor driver datasheet. It is the key information. Please post te link to the datasheet, or just a part number.&lt;/p&gt;&#xA;" OwnerUserId="7360" LastActivityDate="2016-06-01T11:58:56.617" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="9981" PostTypeId="2" ParentId="9946" CreationDate="2016-06-01T13:30:20.057" Score="1" Body="&lt;p&gt;Your setup as is will certainly not work. Roll and Pitch do not map to X and Y one-to-one. You will need to use linear algebra to convert demanded XY (see &lt;a href=&quot;https://stackoverflow.com/questions/1568568/how-to-convert-euler-angles-to-directional-vector&quot;&gt;this stack overflow question on how&lt;/a&gt;) into roll, pitch, and yaw for control.  Moving only one will not move the other.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For your general question about cascaded PID controllers, that part of your strategy is on the right track. It is possible to cascade PID controllers, and PID controllers are frequently used in cases where an inner loop or plant is unmodelable. &lt;/p&gt;&#xA;" OwnerUserId="2492" LastEditorUserId="-1" LastEditDate="2017-05-23T12:37:11.430" LastActivityDate="2016-06-01T13:30:20.057" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9984" PostTypeId="2" ParentId="9971" CreationDate="2016-06-02T01:44:26.087" Score="0" Body="&lt;p&gt;Any serial port terminal emulator program should let you read the spew when the robot is reset.  This will verify the cable (at least the RX path).  Hyperterminal used to be a good one on Windows.  Realterm and Putty are also good.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To verify the TX path of the cable, you can send the BELL character (ASCII code 7) which will reset the robot.  I think most emulators should let you send this with CTRL-G.  Unfortunately, this is the only command you can send to the robot from a terminal emulator.  To send any more commands, you need send commands programmatically.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2016-06-02T01:44:26.087" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9985" PostTypeId="1" CreationDate="2016-06-02T09:12:26.393" Score="1" ViewCount="1154" Body="&lt;p&gt;I know given the intrinsics &lt;code&gt;fx, fy, cx, cy&lt;/code&gt; (where &lt;code&gt;fx, fy&lt;/code&gt; are the horizontal and vertical focal length, and &lt;code&gt;(cx, cy)&lt;/code&gt; is the location of principal point of the camera if pinhole camera model assumed) of an Kinect depth camera(or other range sensor?), a depth pixel &lt;code&gt;px=(u, v, d)&lt;/code&gt; (&lt;code&gt;(u, v)&lt;/code&gt; is the pixel coordinate, &lt;code&gt;d&lt;/code&gt; is the depth value) can be converted to a 3D point &lt;code&gt;p&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;p=(x, y, z)&#xA;x=(u-cx)/fx*d&#xA;y=(v-cy)/fy*d&#xA;z=d&#xA;&lt;/code&gt;&#xA;so that a depth image can be converted to a point cloud, and indeed, a depth Image represents a unique point cloud physically.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;SLAM systems e.g. KinectFusion use such point clouds for ICP based registration to obtain camera pose at each time and then fuse new point cloud to the previously reconstructed model.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, my mentor told me that depth Image cannot be inveribly converted to a point cloud since it's 2D-&gt;3D mapping with ambiguity (which I disagree), and he claims that I should use the depth Image at time (i-1) and (i) for registration, not the derived point cloud.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;（If I have to obey my mentor's order) I've been reading papers and found one using Gradient Descent to solve camera pose &lt;code&gt;(tx, ty, tz, qw, qx, qy, qz)&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Prisacariu V A, Reid I D. PWP3D: Real-time segmentation and tracking&#xA;  of 3D objects[J]. International journal of computer vision, 2012,&#xA;  98(3): 335-354.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;which uses &lt;strong&gt;RGB&lt;/strong&gt; Images and a known model for pose estimation. However, I've &lt;strong&gt;NEVER&lt;/strong&gt; found a paper (e.g., KinectFusion and other later RGB-D SLAM algorithms) deals with depth data just as plane image but not point cloud for registration. So could someone give me some hint (papers or opensource code) about: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;How to do depth image registration without converting them to point clouds&lt;/em&gt;?&lt;/p&gt;&#xA;" OwnerUserId="13723" LastEditorUserId="13723" LastEditDate="2016-06-02T16:25:08.270" LastActivityDate="2016-06-02T19:31:55.033" Title="Is there an algorithm using the Kinect depth image (not the point cloud) for registration?" Tags="&lt;localization&gt;&lt;slam&gt;&lt;kinect&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9987" PostTypeId="1" AcceptedAnswerId="10010" CreationDate="2016-06-02T12:25:21.817" Score="1" ViewCount="2658" Body="&lt;p&gt;I am using a library precompiled on x86 on my pc (x86_64). Does there exist any toolchain to compile the x86 library and in the end generate an executable for armv7l ubuntu?&lt;/p&gt;&#xA;" OwnerUserId="13864" LastEditorUserId="6890" LastEditDate="2019-07-21T09:36:28.587" LastActivityDate="2019-07-21T09:36:28.587" Title="How to compile arm compatible binary from an x86 precompiled library on a pc host to be run on an arm target?" Tags="&lt;linux&gt;&lt;arm-cpu&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ClosedDate="2016-06-08T14:34:01.017" ContentLicense="CC BY-SA 3.0" />
  <row Id="9988" PostTypeId="1" AcceptedAnswerId="9990" CreationDate="2016-06-02T13:14:06.010" Score="2" ViewCount="2934" Body="&lt;p&gt;I am trying derive velocity from accelerometer (MPU9250 in sensor-tag board). I saw lot of blogs which talk about noise and exact estimation problems. I started seeing velocity derivation (integration of accelerometer data over time) yielding me towards ramp because of noise presence in MPU9250.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is the velocity can be estimated only by accelerometer or we need assistance of another sensor such as GPS or gyroscope, etc..&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please let me know as I see my velocity calculations never converge at all.&#xA;Also I have limitation in compute power, so Kalman filter kind of estimation techniques is difficult to implement. Can you please suggest whether I am in right direction or not.&lt;/p&gt;&#xA;" OwnerUserId="13865" LastEditorUserId="10596" LastEditDate="2016-06-03T17:45:06.253" LastActivityDate="2016-06-03T17:45:06.253" Title="Instantaneous velocity calculation from accelerometer?" Tags="&lt;sensors&gt;&lt;accelerometer&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="9990" PostTypeId="2" ParentId="9988" CreationDate="2016-06-02T15:24:43.280" Score="8" Body="&lt;p&gt;The only way to get a velocity from an accelerometer is to &lt;a href=&quot;https://en.wikipedia.org/wiki/Numerical_integration&quot; rel=&quot;noreferrer&quot;&gt;numerically integrate&lt;/a&gt; the output of the accelerometer. That is,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;v = v_0 + a*dT \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $dT$ is the elapsed time between accelerometer readings. This means that &lt;strong&gt;you&lt;/strong&gt; need to find the initial velocity $v_0$, and that an accelerometer &lt;strong&gt;cannot&lt;/strong&gt; give an absolute velocity reading, only &lt;em&gt;relative&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further, all accelerometers have some sensor bias. If we call this term $a_{\mbox{bias}}$, then the accelerometer-based velocity &quot;measurement&quot; is actually:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;v = v_0 + (a + a_{\mbox{bias}})dT \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;or&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;v = v_0 + (a_{\mbox{bias}}*dT) + a*dT \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The bias term becomes a false speed reading. Further, the bias is prone to change over time, both with sensor age, orientation, temperature, etc. This means that it's not generally possible to (permanently) cancel that bias by simply measuring the accelerometer while it's known to be stationary, though this can be a technique you use to minimize the effect of the bias. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, when you say the sensor is &quot;noisy&quot;, that is technically true - there will always be some noise, but it is the fact that the noise is &lt;strong&gt;not&lt;/strong&gt; zero-mean that introduces the trouble you're having. If the only issue were noise, then you could use filtering to remove it, but the fact that the bias exists means that &lt;em&gt;no amount of filtering or averaging will &lt;strong&gt;ever&lt;/strong&gt; give you the correct velocity&lt;/em&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only way to get an absolute velocity is to incorporate an absolute velocity sensor. This could be done with GPS, a wheel speed sensor (assuming no tire slip), radar, etc. Generally you can combine (&lt;a href=&quot;https://en.wikipedia.org/wiki/Sensor_fusion&quot; rel=&quot;noreferrer&quot;&gt;fuse&lt;/a&gt;) a sensor that is noisy in the short-term and accurate in the long-term (like GPS) with a sensor that is accurate short-term but drifts in the long-term, like an accelerometer, and get quality readings in both the short- and long-term. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2016-06-03T14:42:45.250" LastActivityDate="2016-06-03T14:42:45.250" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9992" PostTypeId="2" ParentId="9985" CreationDate="2016-06-02T19:31:55.033" Score="2" Body="&lt;p&gt;Consider this - what is the process of doing SLAM? First, get some sensor data, then &lt;em&gt;move in the world&lt;/em&gt;, get some more sensor data, then try to do feature identification and matching to build up a map. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could, theoretically, still build a map in &quot;depth&quot; units instead of in meters or feet or whatever units your camera model spits out. After all, what is a coordinate frame but some arbitrary choice?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;However&lt;/strong&gt;, all the algorithms you read about &lt;em&gt;do&lt;/em&gt; use the camera models to convert to Cartesian &quot;world&quot; coordinates because that's a &quot;common language&quot; that is &quot;spoken&quot; by most other sensors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To that point, if you are going to attempt SLAM, maybe a wheel encoder would help determine how much distance has been traveled. &lt;em&gt;BUT&lt;/em&gt;, if you (or your advisor) is insisting on using &quot;native&quot; depth units instead of converting those back to world coordinates via the camera transform, then that means that you instead need to convert your wheel encoder into depth units. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That is, you can either convert maps in depth units to Cartesian units, or you can convert every other sensor from Cartesian to depth units. GPS, magnetometers, wheel encoders, etc. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could, of course, do SLAM without any external input, but then what? Well, then you get your entire map of the world and the localization of the sensor in terms of depth units. So what does it mean to be 1.5 depth units from a wall? Can you do anything useful with that? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In conclusion I would argue that, if you are insisting on not converting to proper world coordinates, then you are doing SLAM for the sole purpose of a SLAM exercise and not because you intend on doing anything useful, because the resulting map and localization doesn't have any external meaning.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-06-02T19:31:55.033" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="9993" PostTypeId="2" ParentId="9978" CreationDate="2016-06-02T21:12:55.857" Score="1" Body="&lt;p&gt;If I might add to the previous answers: I noticed in the referenced datasheet that the 20A maximum current rating for this driver is limited to less than 10 seconds and the maximum current is further limited to 10A for less than 60 seconds. Maximum continuous current ( &gt;60 sec.) is then given as 5A without heatsinks but with, I'm assuming, decent cooling airflow. I don't see any maximum current ratings with heatsinks but I would guess they would be somewhat better with sufficient cooling air.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given that the maximum load draw of 9.5A is close to the maximum 10A/10 second rating and almost double the 5A continuous current rating and if in the application that these motors are used they draw that much current for any significant amount of time it could be possible that the controller would be overloaded.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So no, as previously pointed out, your battery will not damage your driver. But your motors, or more specifically your application, might burn up your driver, depending on actual use.&lt;/p&gt;&#xA;" OwnerUserId="7589" LastEditorUserId="7589" LastEditDate="2016-06-02T21:24:04.047" LastActivityDate="2016-06-02T21:24:04.047" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9994" PostTypeId="1" AcceptedAnswerId="9997" CreationDate="2016-06-03T05:41:33.763" Score="0" ViewCount="102" Body="&lt;p&gt;I am working on an Arduino based robot which engages a braking mechanism detecting anything in front. I was using an ultrasonic sensor, to detect obstacles which worked well while the robot was on my table (i.e under construction). But when I ran it on the ground, it doesn't stops and crashes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The robot is programmed as if anything is detected 50 cm ahead if the robot, the braking mechanism stops the wheels. But when testing, the robot just wouldn't stop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My robot is running at an average 7.5m/s . Thinking that doppler's effect might have rendered my sensor useless, I tried a little IR sensor I had lying around (range 25 cm approx), but that didn't work as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What am I doing wrong here?&lt;/p&gt;&#xA;" OwnerUserId="13533" LastActivityDate="2016-06-03T06:51:46.257" Title="Why wouldn't my robot stop?" Tags="&lt;arduino&gt;&lt;motor&gt;&lt;ultrasonic-sensors&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9995" PostTypeId="2" ParentId="9994" CreationDate="2016-06-03T06:07:18.023" Score="0" Body="&lt;p&gt;If the speed of the robot is 7.5 m/s. then it is very difficult to implement a braking. And yes doppler effect is being rendered.IR sensor will work, but implement braking by not just stopping the motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your is having high moment of inertia while moving at speed you mentioned So you can rotate motors in opposite directions. &#xA;but what you can do to solve the problem is you can calibrate the the robot &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Firstly&lt;/strong&gt; at low speed and check if the braking is applicable at low speeds or not. &#xA;And If not we can work on that. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Secondly&lt;/strong&gt; if the braking is working fine at low speeds say 50 cm/s. Then you can slowly increase the speed of the robot.&#xA;Now, you can decrease the speed of bot via PWM in motors. &lt;/p&gt;&#xA;" OwnerUserId="11339" LastActivityDate="2016-06-03T06:07:18.023" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="9996" PostTypeId="2" ParentId="9978" CreationDate="2016-06-03T06:47:51.233" Score="0" Body="&lt;p&gt;The Datasheet which you gave on the very first page the current rating of the motor is given that is &lt;strong&gt;20A&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/jFN1W.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/jFN1W.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;It does not mean that you can run 20A all the time&lt;/strong&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/lBf5A.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/lBf5A.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Secondly There will be no problem of current unless there is high load on the motors. &#xA;I like to tell somethings about battery.&#xA;What I am trying to say is that when you use a battery of 3300 mAh it means that if you can draw &lt;strong&gt;3300 mA current&lt;/strong&gt; from that battery this battery will last for an &lt;strong&gt;hour&lt;/strong&gt;. Similarly if you drawing &lt;strong&gt;1650 mA current&lt;/strong&gt; it will last for &lt;strong&gt;2 hours&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now about motors drivers, motor drivers may fail due to battery for two reasons&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1- When you apply more voltage to motor driver than it mend to withhold.( Which in your case you are aware of and it is not a problem).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2- When you run a motor through driver and the load of the motor has exceeded and is drawing more current. For example &lt;strong&gt;when you try to stop a running motor&lt;/strong&gt; manually then motor will try to draw &lt;strong&gt;more current&lt;/strong&gt;. Now if it happens your motor driver will not blow instantaneously but it will take some time. That is mentioned in the second image. &lt;/p&gt;&#xA;" OwnerUserId="11339" LastActivityDate="2016-06-03T06:47:51.233" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="9997" PostTypeId="2" ParentId="9994" CreationDate="2016-06-03T06:51:46.257" Score="0" Body="&lt;p&gt;7.5m/s is pretty fast for a robot, but still not that much compared to speed of sound (approx. 330m/s), so Doppler effect may introduce some error to measurments, but not critical. The point is that if you set detection distance to only 50cm, your robot has only some 66ms to:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;perform the measurment&lt;/li&gt;&#xA;&lt;li&gt;communicate with the sensor, or make a AD conversion&lt;/li&gt;&#xA;&lt;li&gt;run the algorithm&lt;/li&gt;&#xA;&lt;li&gt;send a command to motor driver&lt;/li&gt;&#xA;&lt;li&gt;stop motors and decelarate&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Even if it starts braking immidately, its inertia may be to big to decelerate completely before cruching into the obstacle. Would a car driving 7.5m/s (27km/h) stop in a distance o 0,5m? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Suggested soultions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Try increasing a detection distance&lt;/li&gt;&#xA;&lt;li&gt;Try using a IR sensor with a digital interface - they measurment times are much lower than in US sensors&lt;/li&gt;&#xA;&lt;li&gt;If you have to brake really quickly, think of using additional mechanical brakes&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="7360" LastActivityDate="2016-06-03T06:51:46.257" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10001" PostTypeId="2" ParentId="9571" CreationDate="2016-06-04T02:37:49.457" Score="1" Body="&lt;p&gt;Based on the figure on pg 27 of the manual, it looks like the EX-106 implements a simple proportional controller, with a deadband when the servo is very close to the goal position. The manual calls the Proportional term &quot;compliance slope&quot; and calls the deadband width &quot;compliance margin.&quot; Looks like you can use a different Proportional term in the clockwise direction than in the counterclockwise direction. There don't seem to be integral or differential terms.&lt;/p&gt;&#xA;" OwnerUserId="13880" LastActivityDate="2016-06-04T02:37:49.457" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10002" PostTypeId="1" CreationDate="2016-06-04T10:52:29.577" Score="1" ViewCount="413" Body="&lt;p&gt;I've implemented SMC (Sliding Mode Controller) on WMR in both X-Y and X-Z plane. &#xA;Now i want to combine both of these to control WMR in 3D. For this purpose I'm trying to use resultant vector of simulation in XY plane and track that resultant vector in XZ plane as value of X in previously designed code.  Tracking control of resultant vector is shown in figure 1 while Vector sum decomposed in rectangular coordinates after simulation is shown in figure 2. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Am I going wrong?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What other tecniques can I apply to do 3D control of vehicle using Sliding Mode Controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can i reduce the time delay offset? I've implemented right equations for SMC tracking controller equations but simulation does not gives exact results.These equations work well for control of vehicle in two dimensions (X-Z plane).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/iio7h.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/iio7h.png&quot; alt=&quot;Tracking control of resultant vector&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/z3qaK.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/z3qaK.png&quot; alt=&quot;Vector sum decomposed in rectangular coordinates after simulation&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13785" LastEditorUserId="13785" LastEditDate="2016-06-06T08:36:23.263" LastActivityDate="2017-09-30T05:37:23.733" Title="Control of WMR (Wheeled Mobile Robot) in 3D" Tags="&lt;wheeled-robot&gt;&lt;matlab&gt;&lt;simulation&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10003" PostTypeId="1" CreationDate="2016-06-04T13:06:22.437" Score="0" ViewCount="4878" Body="&lt;p&gt;I have the mBot robot and I'm trying to get it to go to the other side of a cylindral obstacle. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Something like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/5cuP9.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/5cuP9.png&quot; alt=&quot;Robot&amp;#39;s path&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I know:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Radius of the cylinder - r&lt;/li&gt;&#xA;&lt;li&gt;Robot's distance from the cylinder&lt;/li&gt;&#xA;&lt;li&gt;Wheel thickness - 1.5 cm&lt;/li&gt;&#xA;&lt;li&gt;Distance between the middle of each wheel - 11.5 cm&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;How would I achieve the above path?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only thing I saw was this &lt;a href=&quot;https://stackoverflow.com/questions/26368200/myro-moving-robot-in-a-circle-based-on-the-radius-a-user-inputs&quot;&gt;SO question&lt;/a&gt; that says: &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The distance between the left and right wheel of the robot is 6&#xA;  inches.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;So the left wheel should travel at a distance of 2(pi)(radius+6)&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;And the right wheel should travel at a distance of 2(pi) (radius-6)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The problem with my robot is that you can't tell it to go 20cm to the right, nor can you tell it to turn 90 degrees to the right.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All you can do is set each motor's speed 0-255, so there's not way to put it in the formula &lt;em&gt;disatance = time x speed&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I assume I have to set each motor's speed to a different value so they would go in a circle of radius x and then just exit at the half of the circle (like shown in the picture)&lt;/p&gt;&#xA;" OwnerUserId="13567" LastEditorUserId="-1" LastEditDate="2017-05-23T12:37:11.430" LastActivityDate="2016-06-06T22:19:15.393" Title="How to go around in a circle?" Tags="&lt;arduino&gt;&lt;wheeled-robot&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10004" PostTypeId="1" AcceptedAnswerId="10008" CreationDate="2016-06-04T23:44:35.107" Score="3" ViewCount="1317" Body="&lt;p&gt;I want to write my own inverse kinematics solver, and I have been recommended to use Google's Ceres Solver to help. Now, according to the documentation, Ceres Solver is usually used for non-linear least squares problems (&lt;a href=&quot;http://ceres-solver.org/nnls_tutorial.html&quot; rel=&quot;nofollow&quot;&gt;http://ceres-solver.org/nnls_tutorial.html&lt;/a&gt;). This minimises the sum of squared differences between the measured and target values, over all data. What I am confused about, is how this relates to inverse kinematics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In inverse kinematics, with the example of a robot arm, the goal is to determine what joint angles the robot should be positioned in, in order to reach a target end effector pose. There exists a single equation which determines the end effector pose, given the set of joint angles, and we want to determine the parameters in that equation (the joint angles).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But how does this relate to the least-squares problem, where there are multiple measurements? Is the problem I am trying to solve essentially the same, except that the number of measurements is one? And in that case, is using Ceres Solver's non-linear least squares solver really necessary?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="8880" LastActivityDate="2017-11-07T13:03:09.473" Title="Solving Inverse Kinematics with Non-Linear Least Squares" Tags="&lt;robotic-arm&gt;&lt;inverse-kinematics&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10005" PostTypeId="2" ParentId="10002" CreationDate="2016-06-05T05:02:49.393" Score="1" Body="&lt;p&gt;In general, the time delay is a function of your system dynamics (mass of your robot, max torque and max velocity of your motors). Feedforward control or a planning algorithm can help with this depending on how much information about the future motion you have.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is not enough information in your question to guess what issues might exist with the control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it possible that your control assumes no slipping (sideways movement of the vehicle) and your simulation has a poor friction/contact model that does allow slipping?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Questions&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I've implemented SMC (Sliding Mode Controller) on WMR in both X-Y and&#xA;  X-Z plane.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I assume that XYZ refers to cartesian directions. Are you controlling the position or pose of your robot in the X-Y plane? What are you trying control in the X-Z plane? Are you setting a goal Z position? A wheeled mobile robot is constrained to the surface it rests on, so while controlling the position on the surface projected onto the X-Y plane makes sense, controlling the robot in X,Y, and Z is difficult to understand.&lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="184" LastEditDate="2016-06-06T22:10:36.843" LastActivityDate="2016-06-06T22:10:36.843" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="10006" PostTypeId="1" CreationDate="2016-06-05T09:36:12.020" Score="0" ViewCount="946" Body="&lt;p&gt;I am a beginner to ROS and I wanted to know if I could build a simple robot to learn ROS. &#xA;I currently have the following components available:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Arduino Uno&lt;/li&gt;&#xA;&lt;li&gt;Simple two wheeled robot chassis&lt;/li&gt;&#xA;&lt;li&gt;Some motors&lt;/li&gt;&#xA;&lt;li&gt;L293D motor driver&lt;/li&gt;&#xA;&lt;li&gt;Some ultrasonic sensors&lt;/li&gt;&#xA;&lt;li&gt;Some infrared sensors&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="13887" LastEditorUserId="10596" LastEditDate="2016-06-07T07:51:39.123" LastActivityDate="2016-06-07T21:42:15.977" Title="Build a simple robot to learn ROS" Tags="&lt;arduino&gt;&lt;slam&gt;&lt;ros&gt;&lt;beginner&gt;&lt;ultrasonic-sensors&gt;" AnswerCount="3" CommentCount="1" ClosedDate="2016-06-08T14:33:39.437" ContentLicense="CC BY-SA 3.0" />
  <row Id="10007" PostTypeId="1" AcceptedAnswerId="10009" CreationDate="2016-06-05T09:51:24.400" Score="4" ViewCount="62" Body="&lt;p&gt;I have a differential equation that connects the &quot;velocity&quot; of a point in the FOV of a camera with the velocities of a robot's joints, that is $$\dot s=J(s) \dot q$$ where s is a vector with the $x$,$y$ coordinates of the point in the FOV, $J$ is the interaction matrix and $q$ is the vector of the joint positions. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I have a certain point whose velocity I am tracking and this point remains in the FOV, then $\dot s$ is well defined. But if I change this point online, that is at the time instant $t$ I have point $s_t$ and at the time instant $t+dt$ I have the point $s_{t+dt}$, then $\dot s$ is not defined.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can I create a filter to produce a continuous variation of $\dot s$? If not, what can I do?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More specifically, I want to perform occlusion avoidance. In order to do this I want to compute the minimum distance of each feature point of my target object from the possibly occluding object. But, obviously, this distance can be discontinuous due to the fact that another possibly occluding object can appear in the FOV nearer to my target than the previously measured.  &lt;/p&gt;&#xA;" OwnerUserId="7107" LastEditorUserId="7107" LastEditDate="2016-06-05T15:40:40.867" LastActivityDate="2016-06-05T18:53:13.423" Title="How to produce a continuous variation of a discontinuous function?" Tags="&lt;cameras&gt;&lt;visual-servoing&gt;&lt;filter&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="10008" PostTypeId="2" ParentId="10004" CreationDate="2016-06-05T13:08:44.457" Score="3" Body="&lt;p&gt;The inverse kinematics problem can be stated as a &lt;strong&gt;nonlinear constrained least-squares optimization&lt;/strong&gt;, which is in its simplest form as follows:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\mathbf{q}^*=\arg\min_{\mathbf{q} \in \mathbb{R}^n} \left\| \mathbf{x}_d-K \left( \mathbf{q} \right) \right\|^2 \\&#xA;\text{s.t.} \quad \mathbf{q}_l&amp;lt;\mathbf{q}&amp;lt;\mathbf{q}_u&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $\mathbf{q}$ is the vector of the $n$ independent joint angles, $\mathbf{x}_d$ is the desired Cartesian pose comprising target position and orientation of the end-effector, and $K\left(\cdot\right)$ is the forward kinematic map. The minimization must be carried out without violating the lower and upper joints bounds, $\mathbf{q}_l$ and $\mathbf{q}_u$ respectively.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore, you are right - in a sense - saying that there exists only one measurement you have to account for, if compared with the traditional least-squares setting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Concerning how we can solve the problem, there's a large number of traditional techniques that do not resort to sophisticated optimizations: &lt;em&gt;Jacobian transposed&lt;/em&gt;, &lt;em&gt;Jacobian pseudoinverse&lt;/em&gt;, a synergy of the two termed &lt;em&gt;Damped Least-Squares&lt;/em&gt;, to cite the most known. Thus, it's not necessary to employ &lt;a href=&quot;http://ceres-solver.org&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;strong&gt;Ceres&lt;/strong&gt;&lt;/a&gt;, for example, as back-end to implement your solver.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nonetheless, lately there's been an increasing attention in the community to the use of &lt;em&gt;Sequential Quadratic Programming&lt;/em&gt; and more generally nonlinear methods: see for example [1] for a extensive survey. The reason for that is the significant amount of benefits you'll get with a nonlinear optimizer:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;robustness against singularities and out-of-reach targets&lt;/li&gt;&#xA;&lt;li&gt;better handling of joints bounds&lt;/li&gt;&#xA;&lt;li&gt;possibility to deal with higher number of linear/nonlinear constraints&lt;/li&gt;&#xA;&lt;li&gt;scalability with the number of DoFs&lt;/li&gt;&#xA;&lt;li&gt;and more...&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Personally, I developed in the past a nonlinear inverse kinematics solver using &lt;a href=&quot;https://projects.coin-or.org/Ipopt&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;strong&gt;Ipopt&lt;/strong&gt;&lt;/a&gt; for a humanoid robot ([2]) and I found that I managed to easily outperform other standard techniques, as those provided by &lt;a href=&quot;http://www.orocos.org/kdl&quot; rel=&quot;nofollow noreferrer&quot;&gt;KDL&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thereby, my warm suggestion is to go with &lt;em&gt;Ceres&lt;/em&gt;, &lt;em&gt;Ipopt&lt;/em&gt; or other equivalent optimizers.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;References&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;[1] &lt;a href=&quot;http://dx.doi.org/10.1109/HUMANOIDS.2015.7363472&quot; rel=&quot;nofollow noreferrer&quot;&gt;TRAC-IK: An open-source library for improved solving of generic inverse kinematics&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[2] &lt;a href=&quot;http://dx.doi.org/10.1109/IROS.2010.5650851&quot; rel=&quot;nofollow noreferrer&quot;&gt;An experimental evaluation of a novel minimum-jerk cartesian controller for humanoid robots&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2017-11-07T13:03:09.473" LastActivityDate="2017-11-07T13:03:09.473" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10009" PostTypeId="2" ParentId="10007" CreationDate="2016-06-05T13:32:12.390" Score="3" Body="&lt;p&gt;It happens many times that set-points fed in our systems do change in a step-wise manner. Your intuition of filtering those variations is correct and represents a common practice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here I'd give two cases:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;You have direct access to $\dot{s}$, which is thus your velocity reference varying step-wise. Then, you could consider a simple &lt;strong&gt;frequency based filter&lt;/strong&gt;, which does a pretty good job.&lt;/li&gt;&#xA;&lt;li&gt;You have access to $s$, which is your position set-point, possibly varying step-wise. I therefore assume you're then computing the corresponding velocity $\dot{s}$ by means of differentiation, which is intrinsically an ill-posed method that enhances noise. In this context, my warm advice is to apply &lt;strong&gt;state-space filtering&lt;/strong&gt; to $s$, which not only smooths out step-wise transitions in the input position, but also provides you with robust estimates of the velocity.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The second approach falls within the well known area of &lt;a href=&quot;https://en.wikipedia.org/wiki/Kalman_filter&quot; rel=&quot;nofollow&quot;&gt;&lt;strong&gt;Kalman filtering&lt;/strong&gt;&lt;/a&gt;, on which there is a wide availability of material and results in literature. In essence, it's a matter of choosing a template dynamical model underlying your observations $s$ and the filter will give you back the estimated internal state comprising the velocity $\dot{s}$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typical selections foresee a model describing a constant speed dynamics with noise on the acceleration, and observed positions. Higher order templates (e.g. constant acceleration with noise on the jerk and so on) are also possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even though your point in the FOV won't move in accordance with the chosen template, the filter will significantly smooth out the velocity during fast transitions, as you desire.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2016-06-05T18:53:13.423" LastActivityDate="2016-06-05T18:53:13.423" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10010" PostTypeId="2" ParentId="9987" CreationDate="2016-06-05T16:01:04.340" Score="3" Body="&lt;p&gt;Short answer: No. Suggested alternatives below.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The purpose of a compiler is to turn source code into something a machine with a particular computer architecture, like x86, can run. ARM7 is a different architecture. A tool that could statically convert a program from one machine architecture to the other and guarantee the 'correct' program results would be awesome... but it would also pretty much be crazy AI. You DO however, have practical options to move forward. These options are sorted from simplest to most complicated:  &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;See if your library comes precompiled for ARM7 already, &lt;a href=&quot;https://askubuntu.com/questions/501393/are-all-apt-get-packages-available-on-64-bit-ubuntu-version-available-on-the-arm?rq=1&quot;&gt;as this asker wanted to know&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If you have enough memory and processor resources on your ARM7 machine, you can use &lt;a href=&quot;https://wiki.winehq.org/ARM&quot; rel=&quot;nofollow noreferrer&quot;&gt;WINE for ARM&lt;/a&gt;. Your ARM7 machine runs a Windows emulator, and you can run your x86 program inside the emulator. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Willing to run the program remotely over a network and get the results to your ARM7 machine? &lt;a href=&quot;https://unix.stackexchange.com/questions/34933/can-i-connect-to-windows-machine-from-linux-shell&quot;&gt;It's SSH time!&lt;/a&gt; Open a connection, run your program somewhere else, and get the results.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Do you have the source code and can you compile programs from your ARM7 machine? Put the source code on the ARM7 ubuntu machine, then compile it there. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Do you have the source code, but your ARM7 device is too small or bare bones to run a compiler? Then you can &quot;cross compile&quot;, where you use a compiler meant to create programs for Machine Architecture A (ARM7), but you run that compiler on Machine Architecture B (x86).   &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;(WARNING, HERE BE DRAGONS, LEGALLY MURKY AREAS, AND ENTIRE DOCTORAL THESES. DON'T DO THIS UNLESS YOU HAVE THAT KIND OF TIME OR INTELLECTUAL INTEREST.) Don't have the source code, and can't use your ARM7 to emulate x86 or talk to a different x86 computer? Your remaining option is hacking. You will need to &lt;a href=&quot;http://www.codeproject.com/Articles/4210/C-Reverse-Disassembly&quot; rel=&quot;nofollow noreferrer&quot;&gt;decompile the binary you have&lt;/a&gt; and recompile it for the ARM7. This is technologically possible, so I've included it, but it's not for the faint of heart.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="2492" LastEditorUserId="-1" LastEditDate="2017-04-13T12:37:21.207" LastActivityDate="2016-06-05T16:01:04.340" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10011" PostTypeId="1" AcceptedAnswerId="10012" CreationDate="2016-06-05T20:33:02.647" Score="1" ViewCount="193" Body="&lt;p&gt;With the problem of stabilising an inverted pendulum on a cart, it's clear that the cart needs to move toward the side the pendulum leans. But for a given angle $\theta$, how much should the cart move, and how fast? Is there a theory determining the distance and speed of the cart or is it just trial and error? I've seen quite a few videos of inverted pendulum, but it's not clear how the distance and speed are determined.&lt;/p&gt;&#xA;" OwnerUserId="11489" LastActivityDate="2016-06-13T14:15:55.823" Title="Stabilising an inverted pendulum" Tags="&lt;mobile-robot&gt;&lt;sensors&gt;&lt;accelerometer&gt;&lt;gyroscope&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10012" PostTypeId="2" ParentId="10011" CreationDate="2016-06-05T21:42:24.757" Score="6" Body="&lt;p&gt;There are lots of ways to solve this problem, which falls into the category of Control Engineering.  There are two standard approaches: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Classical Control:  The control command has to be proportional to a linear combination of the error, the rate of change of the error, and the integral over time of the error, a.k.a. a PID controller.   This approach requires you to tune three parameters controlling which dictate how much gain should be used in proportion to the three aforementioned measurements.  This can be done manually by trial and error, but more sophisticated approaches exist such as Ziegler-Nichols tuning.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Optimal Control:  construct a cost function which is constrained by the system's dynamics and obtain it's minimum.  A common choice is a quadratic cost function in terms of the state vector and the control command, leading to a thing called an LQR controller.  The minimum is obtained by solving the Riccati equations, for which there are standard numerical techniques. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my personal experience, LQR gives better results, but requires a bit of computational power and mathematical understanding to accomplish.  PID is, by far, easier to implement and doesn't require a whole lot of mathematical understanding to do, but may not perform as robustly as you wish.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In any case, you will need sensors to detect the pendulum's angle and either its rate of change in angle, or a data recorder to accumulate the error over time, or both.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, you may find that your sensors do not always give correct values, due to cheap technology or unexpected disturbances, in which case you also need to account for uncertainty in measurements.  A Kalman filter would be needed in such a case, and a sophisticated mathematical understanding will of the dynamics be needed to develop one properly.&lt;/p&gt;&#xA;" OwnerUserId="2295" LastEditorUserId="2295" LastEditDate="2016-06-13T14:15:55.823" LastActivityDate="2016-06-13T14:15:55.823" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10013" PostTypeId="2" ParentId="10011" CreationDate="2016-06-05T21:51:43.317" Score="3" Body="&lt;p&gt;The theory that describes what you are looking for is call Control Theory. Search for the &lt;em&gt;Nonlinear Systems&lt;/em&gt; textbook by Hassan Khalil for an excellent overview of the material--the inverted pendulum problem is addressed explicitly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To theoretically stabilize the inverted pendulum on the cart, a model of the dynamics of the system are needed and can easily be found on the web. The next step is to find a state space representation of the dynamics. With the state space represented, there are two options--linearize the dynamics around the desired equilibrium (balanced pendulum bob angle of zero degrees from vertical) or utilize the nonlinear dynamics directly. Most projects that I have seen use linearization. At this point, a desired output must be chosen, and a controller accomplishing this objective must be found--this is the bread and butter of Control Theory, and it is non-trivial to do so. For linearized inverted pendulum systems, PID control is typically used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So to answer your question: yes, there is theory; no, it isn't (shouldn't be) trial and error, and yes, it is hard to accomplish.&lt;/p&gt;&#xA;" OwnerUserId="9585" LastActivityDate="2016-06-05T21:51:43.317" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10014" PostTypeId="1" CreationDate="2016-06-06T00:09:40.610" Score="1" ViewCount="52" Body="&lt;p&gt;Apologies if this isn't really the right place to be asking, but I was wondering whether third party design firms are ever contracted to design industrial and or consumer robots? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If not is it something that is usually done in house, and who within an org would usually take care of this process?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="13893" LastActivityDate="2016-06-06T06:36:06.463" Title="Design in the robotics world" Tags="&lt;design&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="2" ClosedDate="2016-06-08T14:31:36.223" ContentLicense="CC BY-SA 3.0" />
  <row Id="10015" PostTypeId="2" ParentId="10014" CreationDate="2016-06-06T06:36:06.463" Score="3" Body="&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Robots are often made multi-purpose.&#xA;They're usually not redesigned for every other application, that'd cost quite a lot.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A company that would like to use a robot, (let's say a packaging company) often doesn't have the knowledge (or experience) in designing and manufacturing robots.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The company that would like to use a robot, often doesn't even have the knowledge to program/implement it into their workflow.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Let's say there is a company that's selling bottles of water, called WaterB. Pretty straight forward. Since they do not design robots on a daily basis, they're unlikely to have personnel that can design and &quot;create&quot; a robot efficiently. It will not be cost effective to design a robot for a one-off, and it will have some &quot;quirks&quot; since it's the first version of a company with no experience.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The WaterB company now has a choice, hire another company to design a completely new robot, buy an existing model (and implement it themselves) or hire an &quot;system integrator&quot; (company).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Usually, they'll hire a system integrator, they'll go over the benefits and problems that robots may have and check if there are points in the bottling proces where robots can be used efficiently.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;WaterB (or if used, the system integrator) will then most likely buy an existing model of robot, and program it to &quot;palletize&quot; the water bottles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So yes, there are companies that design and manufacture robots (obviously), but it's often not really something you do &quot;in-house&quot;. Due to the long design, development, testing and certification proces.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Designing/developing a robot usually only pays back when you're going to sell multiple of them. &lt;/p&gt;&#xA;" OwnerUserId="9753" LastActivityDate="2016-06-06T06:36:06.463" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10016" PostTypeId="2" ParentId="10003" CreationDate="2016-06-06T06:44:48.480" Score="1" Body="&lt;p&gt;The distance travelled is directly proportional to speed $s = v*t$, so if you want to achieve specific distance ratio, the ratio of wheel speeds should be the same:&#xA;$${{s_{left}} \over {s_{right}}} = {{v_{left}*t} \over {v_{right}}*t}$$&#xA;Be warned though, that without encoders, you won't be able to accurately set speed (wheel speed with the same PWM for left and right motor may be different), so the robot will follow given path only approximately.&lt;/p&gt;&#xA;" OwnerUserId="7360" LastActivityDate="2016-06-06T06:44:48.480" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10017" PostTypeId="2" ParentId="10003" CreationDate="2016-06-06T07:02:43.813" Score="0" Body="&lt;ol&gt;&#xA;&lt;li&gt;The robot will drive towards the cylinder.&lt;/li&gt;&#xA;&lt;li&gt;The robot should make  90 degree turn.&lt;/li&gt;&#xA;&lt;li&gt;The robot should drive, with one wheel going slower as the other. (But it will be an constant).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/QwMZw.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QwMZw.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Between point 2 &amp;amp; 3 in the image, the displacement of the robot will be 90 degrees turned in 2*R*Pi/4 distance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the wheels, indeed:&#xA;2*(Radius-6)&lt;em&gt;Pi/4 and 2&lt;/em&gt;(Radius+6)*Pi/4&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The time of both wheels need to be the same.&#xA;So, if you want to do this path in 10 seconds:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One wheel will be set at (2*(Radius-6)&lt;em&gt;Pi/4) inch/s.&#xA;And the other wheel at (2&lt;/em&gt;(Radius+6)*Pi/4) inch/s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But as Mactro mentions, the ratio should be the same.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(2 * (100 - 6) * Pi) / 4 = 147.654854719&#xA;(2 * (100 + 6) * Pi) / 4 = 166.50441064&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, 148/167 ratio for a 100 inch radius.&lt;/p&gt;&#xA;" OwnerUserId="9753" LastActivityDate="2016-06-06T07:02:43.813" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10019" PostTypeId="1" CreationDate="2016-06-06T16:29:23.123" Score="2" ViewCount="4396" Body="&lt;p&gt;I've recently succeeded in building my first collision-avoidance Arduino robot with 2 DC motors, and it works pretty well. However, it doesn't move in a straight line yet, when it should. I'm now studying which method should I implement to make the robot go straight. I've heard about using IMU or encoders with feedback control. I pretty much understand how to use the encoders, but I'm not sure about the gyro. Should I use just one of those or a combination of them?&lt;/p&gt;&#xA;" OwnerUserId="13902" LastEditorUserId="6941" LastEditDate="2016-06-12T09:01:45.543" LastActivityDate="2016-06-12T09:01:45.543" Title="Should I use gyro or encoders for robot moving in straight line?" Tags="&lt;mobile-robot&gt;&lt;arduino&gt;&lt;control&gt;&lt;gyroscope&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10020" PostTypeId="2" ParentId="10019" CreationDate="2016-06-06T21:48:26.133" Score="0" Body="&lt;p&gt;Either is going to require feedback control (PID or some subset thereof) to function correctly. I personally have had the most success with encoders, however, I haven't spent a ton of time with accelerometers, but I would assume unless you have an accurate one it may be kind of a pain. Encoders are usually built into motors and are fairly idiot proof. &lt;/p&gt;&#xA;" OwnerUserId="13905" LastActivityDate="2016-06-06T21:48:26.133" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10021" PostTypeId="2" ParentId="10019" CreationDate="2016-06-06T22:15:10.407" Score="0" Body="&lt;p&gt;There is no good substitute for knowing exactly what your wheels are doing. Even with a gyro, you may not get a straight line, as all gyros have drift (and the ones with low drift are expensive). Also, a gyro won't allow you to accurately control wheel speed and won't tell you when a wheel is slipping or stuck. Encoders will buy you much more than a gyro.&lt;/p&gt;&#xA;" OwnerUserId="13775" LastActivityDate="2016-06-06T22:15:10.407" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10022" PostTypeId="2" ParentId="10003" CreationDate="2016-06-06T22:19:15.393" Score="0" Body="&lt;p&gt;Your assesment of the situation seems correct. You have no robot body or wheel distance measurement that you can easily use. You need two pieces of the distance,velocity,time equation to do something that can work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You best option is to ask the mBot developers to add some time functions to the arduino library (or perhaps this is available somewhere else, or something you can hack). You can then command a velocity, measure the time elapsed, and guess the distance you have moved. You can also change the velocity based on the elapsed time to approximate the shape you want.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The results will not be perfect but you will be able to use and learn the basic equations for differential drive robots. This will serve you if you continue working with robots and get a more capable one with wheel encoders or other position sensing.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2016-06-06T22:19:15.393" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10023" PostTypeId="1" CreationDate="2016-06-07T02:04:52.617" Score="1" ViewCount="933" Body="&lt;p&gt;I am looking for a physics simulator which can accurately model a robot hand picking up an object. The main requirement is for accuracy / realism, rather than speed. It needs to be able to model soft bodies, such as the rubber &quot;skin&quot; on robotic finger tips. It also needs to be a dynamics engine, such that the object is actually moved around by the hand, modelling effects such as slippage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the research I have already done, there are two good candidates. First, GraspIt! (&lt;a href=&quot;http://graspit-simulator.github.io/&quot; rel=&quot;nofollow&quot;&gt;http://graspit-simulator.github.io/&lt;/a&gt;). This is open-source, and specifically designed for grasping, rather than physics simulation in general. Second, MuJoCo (&lt;a href=&quot;http://www.mujoco.org/&quot; rel=&quot;nofollow&quot;&gt;http://www.mujoco.org/&lt;/a&gt;). This is a more general simulator, is a commercial product, and has been adopted by some big names such as DeepMind.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have tried using the Bullet physics engine for robot grasping simulation, but soon realised that this was not going to be strong enough, because Bullet is really designed for games, and hence sacrifices realism for speed. However, I'm much more interested in something which is as realistic as possible, even if the computation is slow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone have any suggestions as to how I can proceed? Anybody with any experience with GraspIt! or MuJoCo?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="8880" LastActivityDate="2016-06-13T17:16:01.193" Title="What is the most realistic grasping simulator?" Tags="&lt;robotic-arm&gt;&lt;simulator&gt;&lt;simulation&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2016-06-14T14:11:54.023" ContentLicense="CC BY-SA 3.0" />
  <row Id="10024" PostTypeId="2" ParentId="10019" CreationDate="2016-06-07T05:02:47.577" Score="2" Body="&lt;p&gt;The problem here is that you are trying to drive in a straight line without any external reference. Wheels slip (making encoders give error), gyro's drive (so there's error there to), magnetometers have issues with nearby magnets, and GPS may not work on the scale you want it to. So what are we left with? Sensor fusion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If we use a combination of an encoders (to measure the actual wheel speed) with a gyro (to measure the short-term rotation changes), with a magnetometer (to achieve long-term direction management).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hang on, this is getting expensive and hard. How long did you want to drive in a straight line for? 1m, 100m, 100km? What terrain. If it's a tabletop, encoders or a gyro would work. If it's off road, you need more.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Encoders&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An encoder gives ... rotational velocity of the wheel. You can integrate this into rotational angle of the wheel to determine how far you've moved. You can compare this with the other wheel's distance to figure out whether the robot has rotated. At high speeds, you need to poll the encoder really fast, or set up interrupts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Gyro&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Don't ask me how a solid state gyro works, but it gives you the rotation change of the robot directly. Unfortunately, this include the rotation of the earth, and so gyro's drift over time. In my experience, with a small RC car-sized robot over ten minutes, the drive of even a cheap gyro is negligible. Once again you're integrating though, so you have to poll it quite fast, and most gyro's talk over i2c, which can be a bit of a pain.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that the accuracy of a gyro depends on it's mounting as well. If it's subject to lots of vibration, it will drift faster.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Magnetometer/compass&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With some soft iron, you can shield them from your motors just fine, and they provide and absolute orientation relative to earth. Sounds great? Yup, worked fine one one of my robots, but on the competetion day, someone else had three magnets capable of lifting 25kg each. My robot went into orbit around it.&#xA;But, if you can ensure that there aren't going to be massive magnets near your robot (other than the robots own motors, which you can shield and then calibrate out to some extent), you can get ~2-3 degree accuracy with very little effort.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Fusing&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you spend a couple more dollars, you can find a 10DOF board that includes a gyroscope, magnetometer (and accelerometer and barometer). Then you can apply some sensor filtering to combine the long-term accuracy of the magnetometer (assuming you drive past the magnets) with the short term (ok, ten minutes or so) sub-degree accuracy of a gyro. Where did the encoders go? Well, I tend to deal with vehicles with tracks (which slip) or offroad (which slip), so I haven't worked with encoders as much as the others.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The physical device that I use in my hobby projects is the &lt;a href=&quot;http://www.dx.com/p/gy-87-10dof-3-axis-gyro-3-axis-acceleration-3-axis-magnetic-field-air-pressure-module-149359#.V1ZWIXWcFhE&quot; rel=&quot;nofollow&quot;&gt;GY-87&lt;/a&gt; 10DOF board, which uses the MPU6050 accelerometer-gyro and the HMC5883L magnetometer. You speak i2c to the MPU6050, and the MPU6050 can speak to the HMC5883L for you. &lt;/p&gt;&#xA;" OwnerUserId="13329" LastActivityDate="2016-06-07T05:02:47.577" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10025" PostTypeId="2" ParentId="10006" CreationDate="2016-06-07T05:10:49.650" Score="1" Body="&lt;p&gt;ROS generally requires a full x86 or x64 computer, such as an Intel NUC. This can then communicate to things like arduino, but the brains of the computer is in the NUC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As such, ROS is intended for large projects, and may be unsuitable for a hobby project. If this is to be your first adventures into robotics, stick with arduino for now. When you want to build a robot that can vacuum your house, wash the dishes and drive your car, then ROS is probably the thing for you.&lt;/p&gt;&#xA;" OwnerUserId="13329" LastActivityDate="2016-06-07T05:10:49.650" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10026" PostTypeId="1" AcceptedAnswerId="10027" CreationDate="2016-06-07T00:35:36.270" Score="0" ViewCount="76" Body="&lt;p&gt;I'm developing a project which involves a raspberry pi 3 remote control rover and I need to know the exact location of the raspberry pi rover in a set field.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's say I have four logs, one in each corner of the square field (the goal right now is to extend this to any shape field, any number of corners), every of them equipped with (some kind of wave technology) that allows me to triangulate the position (based on signal intensity) of the raspberry pi rover.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The distance between logs should not be bigger than 30m (~100feet) and there is no line of sight guaranted.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The question is: Which kind of technology should I use, infrared, wifi, bluetooth, radio, ultrasound, etc? or, is there any better approach to this problem?&lt;/p&gt;&#xA;" OwnerUserId="13910" OwnerDisplayName="M.Romera" LastActivityDate="2016-06-07T06:31:07.953" Title="Raspberry pi 3 location in a set field, no gps" Tags="&lt;wireless&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10027" PostTypeId="2" ParentId="10026" CreationDate="2016-06-07T05:55:00.963" Score="1" Body="&lt;p&gt;Infrared and ultrasound are blocked by obstacles. Since you cannot guarantee a line-of-sight, eliminate these two. WiFi, Bluetooth and radio (RF) will have the range you need and should be able to penetrate obstacles you are likely to have, then you would use their relative signal strength (RSSI) to do your triangulation calculation.&lt;/p&gt;&#xA;" OwnerDisplayName="tlhIngan" LastActivityDate="2016-06-07T05:55:00.963" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10028" PostTypeId="2" ParentId="10006" CreationDate="2016-06-07T17:05:26.863" Score="0" Body="&lt;p&gt;ROS is a sophisticated Robotics platform. So the minimum, You'll need a board with an operating system capabilities, like Raspberry Pi, banana pi, or beaglebone (you could try very cheap orange pi).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or theoretically (I would like to try this too), you can make a tethered Arduino board connected to wifi using wifi module and send commands using Firmata protocol from the host computer.&lt;/p&gt;&#xA;" OwnerUserId="10144" LastActivityDate="2016-06-07T17:05:26.863" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10029" PostTypeId="1" AcceptedAnswerId="10031" CreationDate="2016-06-07T18:09:19.173" Score="2" ViewCount="1548" Body="&lt;p&gt;I am using a physics simulator to simulate a robot arm. For a revolute joint in the arm, there are two parameters which need to be specified: damping, and friction. If a torque is applied to the joint, both the damping and the friction seem to reduce the resultant force on the torque. But what is the difference between the damping and the friction?&lt;/p&gt;&#xA;" OwnerUserId="8880" LastActivityDate="2016-06-07T20:15:42.180" Title="Damping vs Friction" Tags="&lt;robotic-arm&gt;&lt;dynamics&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10030" PostTypeId="2" ParentId="10029" CreationDate="2016-06-07T19:48:23.963" Score="4" Body="&lt;p&gt;Friction would be your standard &quot;sliding friction&quot;, and exerts a force opposing the motion, proportional to the load (or the normal-force of the load, when talking about your classic sliding), but independent of velocity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suspect that &quot;damping&quot; is referring to viscous friction, which is not independent of velocity. Viscous friction would exert a force opposing the motion, typically independent of the load, but increasing with velocity. In a rotary joint, it is typically caused by the packing grease in the bearings.&lt;/p&gt;&#xA;" OwnerUserId="13775" LastActivityDate="2016-06-07T19:48:23.963" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10031" PostTypeId="2" ParentId="10029" CreationDate="2016-06-07T20:15:42.180" Score="7" Body="&lt;p&gt;A force balance equation is typically written as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;m\ddot{x} + b\dot{x} + k{x} = F \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $F$ is an applied force, $x$ is position, $\dot{x}$ is velocity (first &lt;a href=&quot;https://en.wikipedia.org/wiki/Derivative&quot;&gt;derivative&lt;/a&gt; of position), and $\ddot{x}$ is acceleration (second derivative of position). $m$ is &lt;a href=&quot;https://en.wikipedia.org/wiki/Newton%27s_laws_of_motion&quot;&gt;mass&lt;/a&gt;, $k$ is a &lt;a href=&quot;https://en.wikipedia.org/wiki/Hooke%27s_law&quot;&gt;spring constant&lt;/a&gt;, and $b$ is a &lt;a href=&quot;https://en.wikipedia.org/wiki/Damping&quot;&gt;viscous damping&lt;/a&gt; term. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This force balance is one of the fundamental equations hammered into all mechanical engineers. Each term represents a particular force contribution, and the derivative terms in the equation dictate an &lt;a href=&quot;https://en.wikipedia.org/wiki/Oscillation#Mechanical&quot;&gt;oscillatory&lt;/a&gt; or &lt;a href=&quot;https://en.wikipedia.org/wiki/Simple_harmonic_motion&quot;&gt;harmonic solution&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Friction forces (also called &lt;a href=&quot;https://en.wikipedia.org/wiki/Friction#Dry_friction&quot;&gt;&quot;dry&quot; or &quot;Coulomb&quot; friction&lt;/a&gt;) aren't listed explicitly here; they're generally lumped into the &quot;applied force&quot; term ($F$). Generally, from physics, $F_{\mbox{friction}} = \mu(mg)$, which is read to mean that friction force is some &lt;a href=&quot;https://en.wikipedia.org/wiki/Friction#Coefficient_of_friction&quot;&gt;factor $\mu$&lt;/a&gt; that &quot;keeps&quot; a fraction of the weight (a force) of the object being affected by friction. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unlike springs, damping and friction are losses because there's essentially no way to mechanically recover the energy lost to those terms. There's no energy storage with dampers and friction like there is with a spring, so none of that energy is restored. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, to summarize, &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Friction coefficient gives a force based on how heavy the object is. &lt;/li&gt;&#xA;&lt;li&gt;Damping coefficient gives a force based on how &lt;em&gt;fast&lt;/em&gt; an object is moving.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Consider the energy terms, where everything takes the same path ($\Delta x$). If you calculate energy $E = \int F dx$ (using constant speeds, etc.) then you get:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;E_{\mbox{friction}} = \mu (mg) \Delta x \\&#xA;E_{\mbox{damping}} = b\dot{x} \Delta x \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the only way to reduce friction losses is to reduce the weight or to reduce the friction coefficient. This is typically done with wheels, low-friction materials, etc. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only way to reduce damping losses is to reduce speed or to reduce the damping coefficient. This is typically done by changing fluids - it's a lot harder to run through water than it is to run through air, but there's very little difference when you move slowly. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Determining these coefficients for a rotating system based only on kinematics and free body diagrams is not easy. If you have a device in front of you, you could try to calculate the rotating the joint at different speeds and plotting the energy losses versus speed. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming the joint is the only load, the speed should stabilize at a point where internal losses equal the applied power. As you change speed the friction losses stay constant, but the viscous losses increase. When you plot applied torque (or input power divided by speed) versus speed for the unloaded system, the friction losses will be the y-intercept and the damping (viscous losses) will be the slope.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-06-07T20:15:42.180" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10032" PostTypeId="2" ParentId="10006" CreationDate="2016-06-07T21:42:15.977" Score="3" Body="&lt;p&gt;If you are interested in learning ROS but do not have sophisticated hardware available, you can use the Gazebo simulator to simulate a robot and use ROS with that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind that ROS is not the only way to write software for robots, and also not necessarily the best way.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2016-06-07T21:42:15.977" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10033" PostTypeId="1" CreationDate="2016-06-08T04:52:11.090" Score="-1" ViewCount="137" Body="&lt;p&gt;I am building my first drone,&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Objective: - Need to control drone by wifi on phone or laptop using&#xA;  ground station software of Openpilot&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I have a Arduino 2560 , cc3d Openpilot flight controller , raspberry pi with wifi bluetooth in built...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now i am not able to understand , how to go forward , should i connect arduino with openpilot cc3d flight controller , or raspberry pi directory with cc3d flight controller ....&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do i really need arduino 2560 now ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;also how to connect r pi with cc3d flight controller , and how to mock PWM signals ?&lt;/p&gt;&#xA;" OwnerUserId="13446" LastActivityDate="2016-06-08T12:19:42.127" Title="First build - Quadcopter , need help deciding hardware and connections" Tags="&lt;quadcopter&gt;&lt;arduino&gt;&lt;raspberry-pi&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2016-06-10T17:19:32.443" ContentLicense="CC BY-SA 3.0" />
  <row Id="10035" PostTypeId="1" AcceptedAnswerId="10086" CreationDate="2016-06-08T10:55:15.783" Score="0" ViewCount="504" Body="&lt;p&gt;I have a '&lt;a href=&quot;http://www.dfrobot.com/index.php?route=product/product&amp;amp;product_id=261#.V1f3lPmLSUk&quot; rel=&quot;nofollow&quot;&gt;Baron&lt;/a&gt;' robot frame with 4 static wheels, all driven by a motor. At the moment I'm thinking of handling it like a 2 wheel differential drive. Left and right wheels would receive the same signal. Actually you can interpret it as a tank on caterpillars, exept there is no link between the two tires. &#xA;Does anyone have a different idea about this? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ps: The purpose of the robot will be to know it's exact location. I will use a kalman filter (EKF) to do sensor fusion of the odometry and an IMU with accelero, gyro and magnetometer. So in the kalman filter I add the odometry model of a differential drive robot.&lt;/p&gt;&#xA;" OwnerUserId="13901" LastActivityDate="2016-08-13T22:54:00.353" Title="Handling of a 4WD robot frame as a 2 wheel differential drive" Tags="&lt;differential-drive&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10036" PostTypeId="2" ParentId="10033" CreationDate="2016-06-08T12:19:42.127" Score="1" Body="&lt;p&gt;I'm not sure if you are connecting the Flight Controller directly to the Arduino / PI within the drone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are then ditch the Arduino Mega and the PI and use a Nano.  It will still provide you with 6PWM pins.&#xA;The PI is going to require a &quot;Hat&quot; to generate PWM as far as I can tell, and the Mega is just to damn big and heavy.&lt;/p&gt;&#xA;" OwnerUserId="10717" LastActivityDate="2016-06-08T12:19:42.127" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10040" PostTypeId="1" AcceptedAnswerId="10058" CreationDate="2016-06-08T14:19:10.697" Score="0" ViewCount="155" Body="&lt;p&gt;I want to rotate the whole value of a 3d vector into one axis using quaternion rotations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason behind is that I want to align the X and Y Axis of my smartphone with the X and Y Axis of my vehicle in order to detect lateral and longitudinal acceleration separated on these two axis. Therefore I want to detect the first straight acceleration of the car and rotate the whole acceleration value into the heading axis (X-Axis) of the phone assuming a straight forward motion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How do I achieve this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/ioaYJ.png&quot; alt=&quot;enter image description here&quot;&gt;&#xA;&lt;img src=&quot;https://i.stack.imgur.com/4VVDF.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="13588" LastActivityDate="2016-06-10T03:52:30.230" Title="Rotate 3d vector value into a single axis using a rotation quaternion" Tags="&lt;sensors&gt;&lt;accelerometer&gt;&lt;rotation&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10041" PostTypeId="2" ParentId="128" CreationDate="2016-06-08T17:02:46.010" Score="0" Body="&lt;p&gt;One good solution is to do BOTH.  A design I use place &quot;hard&quot; real time functions on a small micro controller, tight servo control loops and such.  Then there is another CPU that is larger, running Linux and ROS.  I let ROS handle the higher level tasks and the uP handle things like controlling a stepper motor or running a PID loop.    &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As said above by others you CAN allow a non-real-time OS to run 1KHz control loops but in order for this to work you need a gross over-kill sized computer that spends most of it's time in an idle loop.  If you run the Linux/ROS computer at near 100% CPU utilization the real-time performance is poor.   Using a two tier design allows you to always get very good RT performance and also use a smaller, less power hungry computer (possibly a Pi2  higher level tasks.)   My uP currently does not run any OS but I'm moving to FreeRTOS &lt;/p&gt;&#xA;" OwnerUserId="2609" LastActivityDate="2016-06-08T17:02:46.010" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10042" PostTypeId="5" CreationDate="2016-06-09T07:37:51.283" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2016-06-09T07:37:51.283" LastActivityDate="2016-06-09T07:37:51.283" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10043" PostTypeId="4" CreationDate="2016-06-09T07:37:51.283" Score="0" Body="Sensor fusion is a process by which data from several different sensors are &quot;fused&quot; to compute something more than could be determined by any one sensor alone." OwnerUserId="10596" LastEditorUserId="10596" LastEditDate="2016-06-10T17:15:15.377" LastActivityDate="2016-06-10T17:15:15.377" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10045" PostTypeId="1" AcceptedAnswerId="10046" CreationDate="2016-06-09T11:07:26.170" Score="2" ViewCount="8723" Body="&lt;p&gt;An Inertial Measurement Unit (IMU) is an important sensor used in aerial robotics. A typical IMU will contain an accelerometer and a rate gyroscope. Which of the following information does a robot get from an IMU? &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Position&lt;/li&gt;&#xA;&lt;li&gt;Orientation&lt;/li&gt;&#xA;&lt;li&gt;Linear velocity&lt;/li&gt;&#xA;&lt;li&gt;Angular velocity&lt;/li&gt;&#xA;&lt;li&gt;Linear acceleration&lt;/li&gt;&#xA;&lt;li&gt;Angular acceleration&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I don't think it gets its orientation information from IMU. The last time I took the test, I said that all but the first two are true. I failed.&lt;/p&gt;&#xA;" OwnerUserId="13754" LastEditorUserId="10596" LastEditDate="2016-06-09T13:48:28.407" LastActivityDate="2020-08-04T16:32:17.153" Title="What information an IMU gives to a drone?" Tags="&lt;imu&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="10046" PostTypeId="2" ParentId="10045" CreationDate="2016-06-09T12:13:56.850" Score="6" Body="&lt;p&gt;You already know the answer - because as you say it contains an accelerometer and a rate gyro.&lt;/p&gt;&#xA;&lt;p&gt;An accelerometer measures linear acceleration, a &lt;a href=&quot;https://en.wikipedia.org/wiki/Rate_gyro&quot; rel=&quot;nofollow noreferrer&quot;&gt;rate gyro&lt;/a&gt; measures angular velocity. These are the only quantities the unit will actually measure.&lt;/p&gt;&#xA;&lt;p&gt;The other properties - whether positions, velocities or accelerations - have to be calculated by the controller. For example integrating an acceleration gives a velocity, and integrating again gives position.&lt;/p&gt;&#xA;&lt;p&gt;There's an exception - if the device is being held motionless in any position, then the accelerometer is sensing which direction gravity is acting in, so it can be used directly as an orientation sensor. But that only applies if you &lt;strong&gt;know&lt;/strong&gt; the device is being held motionless...&lt;/p&gt;&#xA;&lt;p&gt;Answer will be&#xA;&lt;strong&gt;Linear Acceleration &amp;amp; Angular Velocity only.&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="9578" LastEditorUserId="26897" LastEditDate="2020-08-04T16:32:17.153" LastActivityDate="2020-08-04T16:32:17.153" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="10047" PostTypeId="2" ParentId="10045" CreationDate="2016-06-09T13:22:28.510" Score="1" Body="&lt;p&gt;An Inertial Measurement Unit (IMU) is a device that contains three accelerometers that measures a body's specific force vector, and three gyroscopes that measures its inertial angular velocity vector. It often also contains a triad of magnetometers that measures the magnetic field vector around the device. Note that the &quot;accelerometers&quot; do not directly measure the translational acceleration vector, this must be obtained by adding the apparent gravity vector to the measured specific force vector.&lt;/p&gt;&#xA;" OwnerUserId="13926" LastActivityDate="2016-06-09T13:22:28.510" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10048" PostTypeId="1" CreationDate="2016-06-09T15:43:20.670" Score="0" ViewCount="59" Body="&lt;p&gt;All of the examples of keeping a double/triple inverted pendulum balanced using a PID controller I've seen seem to be on a cart. Like this one &lt;a href=&quot;https://www.youtube.com/watch?v=cyN-CRNrb3E&quot; rel=&quot;nofollow&quot;&gt;https://www.youtube.com/watch?v=cyN-CRNrb3E&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How come the PID controller always controls a cart rather than a servo that holds the first pendulum? The second/third pendulum could be connected loosely on the first pendulum and the PID controller controls the first pendulum. Is it because servos tend to be too slow or are there other reasons?&lt;/p&gt;&#xA;" OwnerUserId="11489" LastActivityDate="2016-06-09T16:17:06.273" Title="Double/Triple inverted pendulum always on a cart?" Tags="&lt;motor&gt;&lt;mechanism&gt;&lt;otherservos&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10050" PostTypeId="1" AcceptedAnswerId="10111" CreationDate="2016-06-09T15:51:27.237" Score="2" ViewCount="8374" Body="&lt;p&gt;I took a course to have a better understanding of drones and their design. At the end of the course there was a test question that I got wrong and I would like to understand why. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was supposed to select the choices that best describe SLAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and the possible answers were:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Estimates the location of features in the environment? &lt;/li&gt;&#xA;&lt;li&gt;Controls the robot's flight through the environment?&lt;/li&gt;&#xA;&lt;li&gt;Causes the robot to avoid obstacles in the environment?&lt;/li&gt;&#xA;&lt;li&gt;Navigate in a cluttered environment?&lt;/li&gt;&#xA;&lt;li&gt;Estimates the position and orientation of the robot with respect to&#xA;    the environment?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;At first I knew that at least 3 and 4 were right because I watched a drone doing these things. I also thought that the last answer was linked to these two so I said yes to it too. Finally, I thought that the only thing that was still controlled by the user would be the flight...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yet I failed again... Therefore &lt;strong&gt;what does Simultaneous Localization And Mapping (SLAM) software do?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="13754" LastEditorUserId="13754" LastEditDate="2016-06-12T19:30:33.387" LastActivityDate="2020-04-08T13:58:06.007" Title="What does Simultaneous Localization And Mapping (SLAM) software do?" Tags="&lt;slam&gt;" AnswerCount="6" CommentCount="6" FavoriteCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="10051" PostTypeId="2" ParentId="10048" CreationDate="2016-06-09T16:17:06.273" Score="2" Body="&lt;p&gt;There's no reason why you couldn't do it with a servo on the first pendulum, but the problem is very different. Instead of motion constrained on a line (cart), motion is constrained along an arc. The dynamics change dramatically due to both vertical and horizontal motion along the arc, but that's not to say that it couldn't be done. As far as I know, it's just more complicated and not as well studied a problem as the cart problem. &lt;/p&gt;&#xA;" OwnerUserId="2295" LastActivityDate="2016-06-09T16:17:06.273" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10052" PostTypeId="1" CreationDate="2016-06-09T17:45:22.617" Score="10" ViewCount="19116" Body="&lt;p&gt;Please can somebody explain to me the difference between Position Control, Velocity Control, and Torque Control? Specifically, I am thinking in terms of a robot arm. I understand that position control tries to control the position of the actuators, such that the error signal is the difference between the current position and the desired position. Velocity control is then trying to control the velocity of each actuator, and torque control is trying to control the torque of each actuator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I don't understand why these are not all the same thing. If you want to send a robot arm to a certain position, then you could use position control. But in order to move an actuator to a certain position, you need to give it a velocity. And in order to give it a velocity, you need to give it a torque. Therefore, whether the error is in position, velocity, or torque, it always seems to come back to just the error in torque. What am I missing?&lt;/p&gt;&#xA;" OwnerUserId="8880" LastActivityDate="2020-01-11T00:00:02.857" Title="Position Control vs Velocity Control vs Torque Control" Tags="&lt;control&gt;&lt;kinematics&gt;&lt;dynamics&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="13" ContentLicense="CC BY-SA 3.0" />
  <row Id="10054" PostTypeId="2" ParentId="10052" CreationDate="2016-06-09T19:56:43.453" Score="15" Body="&lt;p&gt;Torque is analogous to force for rotating systems, in that:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ &#xA;F = m a \\&#xA;\tau = I \alpha \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where $\alpha$ is angular acceleration and $I$ is moment of inertia. $m$ and $a$ are mass and linear acceleration, respectively. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, in a way, a position controller, a velocity controller, and an acceleration (torque) controller are all different implementations of each other because each is the &lt;a href=&quot;https://en.wikipedia.org/wiki/Integral&quot;&gt;integral&lt;/a&gt; of the next - position is the integral of velocity, and velocity is the integral of acceleration. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where these differ is how you apply the controller. This typically depends on what you're interested in. For instance, are you trying to control position, as in a servo motor? Are you trying to regulate acceleration, as in a hospital elevator? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typically you will have some specification you are trying to meet. Then, with your specifications, you can use typical &lt;a href=&quot;http://ctms.engin.umich.edu/CTMS/index.php?example=Introduction&amp;amp;section=ControlPID&quot;&gt;PID guidelines&lt;/a&gt; to build a controller for that particular aspect. That is, if you work at that particular &quot;level&quot;: position, velocity, or acceleration, then you can design for a particular rise time, overshoot, and damping. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The difference being that you're designing &lt;em&gt;acceleration&lt;/em&gt; overshoot, or &lt;em&gt;positional&lt;/em&gt; overshoot. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Generally I would say the output of the controller goes to motor voltage, so while the output of the controller is always the same (motor volts) the input and gains are different, with the desire to achieve a different set of operating parameters. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'll close by pointing out that a motor controller output is terminal voltage because that's how one modulates motor current. Motor current, in turn, generates torque via the &lt;a href=&quot;https://en.wikipedia.org/wiki/Motor_constants#Motor_Torque_constant&quot;&gt;motor torque constant&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, ultimately, every controller regulates motor torque, but with the &lt;em&gt;end goals&lt;/em&gt; varying - control motor acceleration, velocity, or position. Again, what you're trying to control depends on the application and will affect the gains you choose. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-06-09T19:56:43.453" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="10056" PostTypeId="1" CreationDate="2016-06-09T20:35:31.587" Score="3" ViewCount="789" Body="&lt;p&gt;This is my first post here, so hello all. I really hope I can learn a lot from you guys.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am trying to build a robotic arm to carry an object and put it inside of different boxes that are placed in different fixed locations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found a few robotic arms that can do it, but I am still trying to find the right motor for the job. I read a lot on-line about the different motors, but I am not sure which on to pick. Since the boxes are located in fixed places, the motors have to move in a precise way, so, according to my research, Servo motors are the ones I should use.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since it is a low budget project (I am college student), I wasn't sure which motor to choose (there are a lot of servo motors out there). I found several Servo motors on-line, for example , &lt;a href=&quot;https://www.adafruit.com/products/1404?gclid=CjwKEAjwp-S6BRDj4Z7z2IWUhG8SJAAbqbF35BtbqoBtiPJUrmAZsWO4AWTCzDTnAvgGPHldha_-nBoC237w_wcB&quot; rel=&quot;nofollow&quot;&gt;Analog Feedback Servo&lt;/a&gt;, and I was wondering what is the best servo motor I can buy for a really low cost project? I think I can spend about 10-20$ per motor (I need 5 motors).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I already have an Rpi and I know that pin 18 is the PWM pin that controls the motor's precision movement, but before I purchase a PWM controller and additional motors I need to run some testing to find how precise the motor is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the way, how can I calculate the amount of weight the motor can handle?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any ideas and information will be greatly appreciated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you&lt;/p&gt;&#xA;" OwnerUserId="13929" LastActivityDate="2016-06-13T14:10:52.390" Title="Choice of a motor for robotic arm" Tags="&lt;robotic-arm&gt;&lt;raspberry-pi&gt;&lt;servomotor&gt;&lt;python&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10058" PostTypeId="2" ParentId="10040" CreationDate="2016-06-10T03:52:30.230" Score="0" Body="&lt;ul&gt;&#xA;&lt;li&gt;Use the average magnitude of X,Y as the acceleration vector.  &lt;/li&gt;&#xA;&lt;li&gt;Get the angle between this vector and the (1,0).  &lt;/li&gt;&#xA;&lt;li&gt;Create a quaternion with this vector that looks something like (cos(angle/2),0,0,-1)&lt;/li&gt;&#xA;&lt;li&gt;Multiple all future acceleration results&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="13321" LastActivityDate="2016-06-10T03:52:30.230" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10059" PostTypeId="1" AcceptedAnswerId="10084" CreationDate="2016-06-10T07:55:23.037" Score="-1" ViewCount="4347" Body="&lt;p&gt;I thought it were twelve ways:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Six for each ways between two propellers&lt;/li&gt;&#xA;&lt;li&gt;Six others for each rotation on these ways.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;But according to Vijay Kumar Dean of Penn Engineering , it seems that I was wrong...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then I read &lt;a href=&quot;http://www.hindawi.com/journals/mpe/2013/673525/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this article  about modeling and robust trajectory tracking control for a novel Six-Rotor Unmanned Aerial Vehicle&lt;/a&gt; and &lt;a href=&quot;http://lup.lub.lu.se/luur/download?func=downloadFile&amp;amp;recordOId=4359940&amp;amp;fileOId=4359943&quot; rel=&quot;nofollow noreferrer&quot;&gt;this one about navigation and autonomous control of a Hexacopter in indoor environments&lt;/a&gt; but was never able to find such an information.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I then guessed that 3 of the rotors could go one direction and three others into another which would add 6 other ways for rotating and therefore 6 others for simply flying but that is only a guess.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/TuWzD.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/TuWzD.jpg&quot; alt=&quot;Six propellers drone&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13754" LastEditorUserId="13754" LastEditDate="2016-06-12T19:11:50.327" LastActivityDate="2016-06-13T17:01:12.703" Title="In how many ways can a six propellers drone fly or rotate?" Tags="&lt;multi-rotor&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10060" PostTypeId="1" CreationDate="2016-06-10T10:50:56.647" Score="4" ViewCount="117" Body="&lt;p&gt;Good day everyone :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am an undergraduate student working on a project involving the use of high torque small-sized DC motors for use in designing a person following trolley bag. Where in the problem is to use small sized motors but still maintain the usability and efficiency in carrying loaded luggages.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have been looking for motors in local stores as well as in RS components as well as Element 14. However I am not sure if my choices are the right fit as I am at a loss on what specifications to look for when selecting a particular motor for this application. I have also tried to look for motors used in current products that can be used in my application such as todays electric skate boards but unfortunately have no luck on finding their suppliers.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Basically the question I would like to ask  is what specifications or calculations can I perform to select the proper motors given size constraints and weight carrying requirments. Or does anyone have suggestions on common motors that are already normally used for this application. My target maximum load capacity is 20kg.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Thank you!&lt;/p&gt;&#xA;" OwnerUserId="13936" LastActivityDate="2016-07-24T12:39:12.473" Title="Motor Choice given size constraint and load requirement" Tags="&lt;mobile-robot&gt;&lt;motor&gt;&lt;gearing&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10062" PostTypeId="2" ParentId="10052" CreationDate="2016-06-10T12:04:46.760" Score="14" Body="&lt;p&gt;I'm going to take a slightly different tack to &lt;a href=&quot;https://robotics.stackexchange.com/a/10054/37&quot;&gt;Chuck&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;What is Torque Control?&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;For me, Torque Control is about performing a move with an explicitly defined torque, rather considering torque just the means to the end of Position or Velocity control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Normally when you move a robot, you specify position and speed, with the robot allowed to use any and all torque up to it's maximum, required to achieve those two goals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you specify a move with a Torque component, you are saying you want to use that specific torque for that move. It's easiest to illustrate this with an example.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Example: picking up an egg&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Let's say that you want your robot to grip an egg. The egg is a fragile spheroid of (slightly) variable size.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Without Torque control&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Ideally, you would have to know the orientation of the egg and the precise dimension along the grip axis. You then have to close the gripper to be slightly smaller than that grip axis dimension and rely in the error between the demanded and actual position to apply the correct amount of force to grip the egg securely.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This second order effect is very fragile and could result in eggs being dropped once motors start to age and provide less torque, or start to crush eggs if PID parameters are tweaked to (say) improve position or velocity accuracy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since eggs aren't uniform, if you cannot measure the grip axis dimension for each egg, then you will need to work out a compromise grip position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Too small and large eggs will be broken by the force applied, too large and small eggs won't be gripped tightly enough. If there is sufficient variation between the smallest and largest eggs, there may be no compromise position which won't either crush or drop some eggs.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;With Torque control&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;With Torque control, you have much finer, more predictable control. You are specifying torque as a first order effect and have direct control over it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typically, you would start by moving the gripper without Torque Control to just larger than the largest egg, then move the gripper with Torque Control to just smaller than the smallest egg. As soon as the torque limit is achieved, the motor would stop moving, and the egg would be gripped with precisely the required force.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Why not use Torque control all the time?&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;You typically only ever use Torque Control when you absolutely need it because direct Torque Control means giving up control of position and velocity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can get close to direct Torque Control by applying a Torque limit to a standard Position/Velocity move, but you have to be careful, since the torque limit must be higher than the minimum torque needed to achieve those moves.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Applying a torque limit which is too low can easily result in following errors (actual position falling behind required position, resulting in poor control) and can even prevent a robot from moving to it's destination position (if the torque limit is lower than the torque required to make the move, due to stiction, friction or gravity to name but a few possible factors).&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Complications&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;There are some situations where you need to apply a force smaller than the stiction of the system. Because the static friction would prevent the required force being applied, effectively no force would be applied. This could be the case with some direct drive motors for instance. In that case your Torque Control system may need to be able to briefly apply a higher force to break past the static friction, but then quickly revert to the required Torque, so that excess force is not applied.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Conclusion&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Torque control is an important technique for some applications, it is something which our bodies take for granted, but which Robot systems have to be explicitly configured for.&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="37" LastEditDate="2019-04-03T16:29:20.730" LastActivityDate="2019-04-03T16:29:20.730" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10063" PostTypeId="1" CreationDate="2016-06-10T12:34:46.477" Score="1" ViewCount="421" Body="&lt;p&gt;What is the degrees of freedom (DOF) of the Rostock delta robot 3d printer (delta mechanism that consists of three prismatic joints)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's the link to the delta mechanism I'm referring to:&#xA;&lt;a href=&quot;https://www.youtube.com/watch?v=AYs6jASd_Ww&quot; rel=&quot;nofollow&quot;&gt;https://www.youtube.com/watch?v=AYs6jASd_Ww&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance for your help!&lt;/p&gt;&#xA;" OwnerUserId="13678" LastActivityDate="2016-06-10T13:54:40.497" Title="Rostock Delta Robot 3D Printer Degrees of Freedom (DOF)" Tags="&lt;kinematics&gt;&lt;inverse-kinematics&gt;&lt;actuator&gt;&lt;manipulator&gt;&lt;3d-printing&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10064" PostTypeId="2" ParentId="10063" CreationDate="2016-06-10T13:54:40.497" Score="1" Body="&lt;p&gt;The end-effector of the structure can do 3 translations X Y and Z translations. However more then 1 motor has to be moved in order to execute a pure translation. This means that the desired motions in cartesian space first have to be mapped to the so called joint space only afterwards can these motions be executed as desired. The function that does the mapping is called the inverse kinematic function or inverse kinematic transformation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is common in robotics, but not that common for 3 D printers which tend to have a portal type structure. You can read more about the delta robots/delta structure &lt;a href=&quot;http://www.parallemic.org/Reviews/Review002.html&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2016-06-10T13:54:40.497" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10065" PostTypeId="2" ParentId="10060" CreationDate="2016-06-10T14:29:49.200" Score="2" Body="&lt;p&gt;Approach 1: based on the total weight and how steep a slope you would expect it to climb, calculate the power required. (Basic physics)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Approach 2: draw a diagram of the wheel size you'd like to use, with an obstacle of a given height in front of it. Work out the angle the wheel has to &quot;lever&quot; itself up to get over the obstacle, and work out the motor torque needed from that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Disclaimer: I didn't do either of the above - I just bought a few of &lt;a href=&quot;http://www.robot-electronics.co.uk/products/drive-systems/motors-brackets-and-wheels/emg30-gearmotor-with-encoder.html&quot; rel=&quot;nofollow&quot;&gt;these (EMG30 motors)&lt;/a&gt; which were fine for a five kilogram machine. Yours will be a lot heavier though so I think the more precise method would be recommended.&lt;/p&gt;&#xA;" OwnerUserId="9578" LastActivityDate="2016-06-10T14:29:49.200" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10066" PostTypeId="2" ParentId="10050" CreationDate="2016-06-10T15:00:38.157" Score="2" Body="&lt;p&gt;Which software?&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Yes, It creates map from its starting point. And robot locates itself in its generated map when generating map.&lt;/li&gt;&#xA;&lt;li&gt;It is using laser data to locate robot in map, when process starts, map's first part is the first laser scan data. When the robot moves, slam reads odometry data, and locates robot via odometry and laser. Even if odometry is poor, it corrects location via laser scan match.&lt;/li&gt;&#xA;&lt;li&gt;No, its not a job of slam.&#xA;Avoiding obstacles is a job of navigation, The navigation must calculate best path with avoiding obstacles. Slam is Simultaneous Localisation and Mapping, it generates map and locates robot on it.&lt;/li&gt;&#xA;&lt;li&gt;I didn't understand what you meant, yes it can explore cluttered places but navigation isn't its job.&lt;/li&gt;&#xA;&lt;li&gt;Referring to answer 3, Thinking about environment isn't job of slam too :) It's navigation's or driving people's job.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Also if you didn't please take a look at this SLAM &lt;a href=&quot;https://www.youtube.com/watch?v=lVC2uLG35Mk&quot; rel=&quot;nofollow&quot;&gt;video&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="13663" LastEditorUserId="13663" LastEditDate="2016-06-15T10:19:26.797" LastActivityDate="2016-06-15T10:19:26.797" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="10067" PostTypeId="2" ParentId="10060" CreationDate="2016-06-10T19:42:18.677" Score="6" Body="&lt;p&gt;20kg is a mass. It makes a force on Earth (20*9.81 = 196N), but that's not a torque. Motors make torque - what is your maximum torque specification?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you know how much torque you need (that will be based on the load, gearbox, wheel/pulley diameter, &lt;em&gt;friction and other losses&lt;/em&gt;, etc.) then you can ballpark feasibility by evaluating your required &lt;a href=&quot;https://en.wikipedia.org/wiki/Torque_density&quot;&gt;torque density&lt;/a&gt; - how much torque you need per unit of volume (as your two driving specs are torque and volume). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'll have some nominal torque load, and a nominal operating speed - this should give you your average power, and then you can look at power density. Power densities should be easy-ish to find, but you may have to start doing the math to determine what an acceptable range of torque densities are. Note that a lot of sites mis-label specific torque (torque per weight) as torque density (torque per volume). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you find that your torque and power densities are reasonable (within the band of products available on the market) then it's just a matter of shopping for the right one. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the kind of research that, as an engineer and former undergrad advisor, I would love to see as proof that the base design needs to be re-evaluated. Look at torque densities for a range of sizes - from large industrial motors to miniature units. I suspect you're not going to find a huge variation in torque per unit volume, and then you can say for sure that it is or is not possible to achieve your performance in a particular size.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-06-10T19:42:18.677" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10068" PostTypeId="2" ParentId="10060" CreationDate="2016-06-10T21:14:40.120" Score="7" Body="&lt;p&gt;If you have some budget for your project, both &lt;a href=&quot;http://www.maxonmotor.com/&quot;&gt;Maxon&lt;/a&gt; and &lt;a href=&quot;https://fmcc.faulhaber.com/en/GLOBAL/&quot;&gt;Faulhaber&lt;/a&gt; have good DC motors and motor-gearhead combinations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maxon publishes a nice set of &lt;a href=&quot;http://www.maxonmotor.com/medias/sys_master/root/8819755417630/maxon-Formelsammlung-e.pdf&quot;&gt;formulas&lt;/a&gt; and &lt;a href=&quot;http://www.maxonmotor.com/medias/sys_master/8799044927518/Principles-and-Propertiees-of-high-dynamic-DC-Miniature-Motors.pdf&quot;&gt;background theory&lt;/a&gt; on electric motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When it comes to getting the maximum performance out of motors, thermal issues are the main factor. One starts asking questions like: What's the actual duty cycle for this application? Is the motor on 100% of the time or will there be time for it to cool down? How quickly can my system get rid of the heat?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind that even though a lot of motors are specified relative to their design voltage, this is a flexable parameter. Even with a cheap motor you may be able to get higher performance with a combination of driving it with a higher voltage and monitoring it's temperature to make sure you don't overheat it.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2016-06-10T21:14:40.120" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10071" PostTypeId="2" ParentId="6843" CreationDate="2016-06-11T19:27:07.110" Score="1" Body="&lt;p&gt;I think that the strange behaviour that you are experiencing comes from lost echoes. The HC-SR04 is at it's best performance with obstacles of 0.5 square meters (you can check this in the data sheet). With smaller obstacles some of the echoes at random wont be detected. The sensor waits for echoes to return up to about 182 mS no matter how fast you trigger it. Only then the echo signal goes low if no echo is detected. I have checked this behaviour by free triggering the sensor at different rates and watching the echo signal at the same time with an oscilloscope.&lt;/p&gt;&#xA;" OwnerUserId="13952" LastActivityDate="2016-06-11T19:27:07.110" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10072" PostTypeId="1" AcceptedAnswerId="10073" CreationDate="2016-06-11T23:59:12.633" Score="-1" ViewCount="97" Body="&lt;p&gt;For instance, how would you hook up a electric pump communicate with a motherboard? Let's say I buy a electric pump, I hook it up to some sort of metal structure that if the pump is turned on it moves the metal structure, &lt;strong&gt;how would I hook up the pump to my motherboard so that I can program it?&lt;/strong&gt; &lt;/p&gt;&#xA;" OwnerUserId="13953" LastEditorUserId="13953" LastEditDate="2016-06-12T00:38:23.250" LastActivityDate="2016-06-13T02:20:07.260" Title="How to make a robot?" Tags="&lt;control&gt;&lt;motor&gt;&lt;robotic-arm&gt;&lt;microcontroller&gt;&lt;machine-learning&gt;" AnswerCount="1" CommentCount="5" ClosedDate="2016-06-13T13:51:21.120" ContentLicense="CC BY-SA 3.0" />
  <row Id="10073" PostTypeId="2" ParentId="10072" CreationDate="2016-06-12T07:00:35.413" Score="1" Body="&lt;p&gt;Ok, It sounds like you either saw an arm with hydraulic actuators or a Hollywood special-effects movie (they really like hoses in their robots).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming you saw real hydraulic actuators, then I need to start by saying that is only cost effective if you need a lot of force. The majority of robots use electric actuators, specifically servo motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hydraulic actuators work by controlling valves, not the pump. There is typically just a single pump that maintains a very high fluid pressure in a reservoir, called the &quot;accumulator&quot;. The accumulator is like a battery of hydraulic energy for the actuators, and the pump just keeps the accumulator &quot;charged&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The control of the actuators is done by &quot;proportional valves&quot;. The servo controller regulates the amount of fluid passing to the actuators by controlling these valves, based on feedback from position-sensors in the actuators. A central computer is often tasked with commanding the servo controllers, but that's often not necessary. Sometimes the servo controllers are commanded by some form of hand control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you might already see why most robots use electric motors instead of hydraulics. Hydraulics add more layers of complexity to the robot. Electric motors are more direct if you don't need the power that hydraulics provide.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the way, it's possible that you've mistaken cables for hoses. Often, the motors are placed away from the joints and &quot;tendons&quot; are strung through the arm to connect the joint to the motor. Occasionally, these tendons might be hydraulic hoses.&lt;/p&gt;&#xA;" OwnerUserId="13775" LastEditorUserId="13775" LastEditDate="2016-06-13T02:20:07.260" LastActivityDate="2016-06-13T02:20:07.260" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10077" PostTypeId="1" CreationDate="2016-06-13T04:39:35.343" Score="0" ViewCount="107" Body="&lt;p&gt;For hobbyists, you go to a store to buy products. The prices for these products are all clearly listed in the store catalog, and you can easily search for parts by lowest price or read customer reviews of the products.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For industrial engineers building complex machines, how do they buy components? Or don't they worry about cost, and leave it to their employer to eat the cost as a part of doing their line of work?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it possible to &quot;shop around&quot; for low-cost engineering components?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is unclear to me how someone building a robot on their own as a small one-man startup can make the step from the world of toy robots, to larger and more industrial robotic components.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most of the non-hobbyist stuff is hidden away and not exposed to the world. While a product catalog might be available, there are no prices listed for anything.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For larger industrial components, there does not seem to be any realistic way to shop around for the lowest price or best value, since pricing for much of the big stuff is basically unavailable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For me personally, I am interested in trying to build my own powered exoskeleton on a middle class American income, so I can't afford to be paying 1000 bucks for a single electrohydraulic proportioning servo valve, when I'll need probably 50 of them. But shopping around for low cost ones is basically impossible as far as I can determine, because pricing info is generally not available or searchable from the majority of manufacturers.&lt;/p&gt;&#xA;" OwnerUserId="13955" LastActivityDate="2016-06-13T11:24:47.707" Title="How are industrial robotics components purchased?" Tags="&lt;industrial-robot&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10078" PostTypeId="2" ParentId="10077" CreationDate="2016-06-13T05:42:05.740" Score="1" Body="&lt;p&gt;Like any company, a small engineering firm depends on its service vendors. Those vendors might include machine shops, welders, and paint shops. developing relationships with vendors is important not just to have someone to go to, but also for advice on the best way to go about doing those things. Many of those places will be small shops, and are happy to deal with other small shops.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then there are parts vendors, like metal supply shops and industrial supply places. For industrial supply, try &lt;a href=&quot;http://www.mcmaster.com/#&quot; rel=&quot;nofollow&quot;&gt;McMaster-Carr&lt;/a&gt;. They have everything from hydraulic motors, to nuts &amp;amp; bolts to haz-mat suits, and all of the prices are there. For metal, try &lt;a href=&quot;https://www.industrialmetalsupply.com/&quot; rel=&quot;nofollow&quot;&gt;Industrial Metal Supply&lt;/a&gt;. I get about 80% of my materials between those two sources.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Don't be afraid to call potential vendors for prices. You will find that many don't want to deal with low-volume customers, and talking to them on the phone is the easiest way to weed them out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But still, it is not easy.&lt;/p&gt;&#xA;" OwnerUserId="13775" LastActivityDate="2016-06-13T05:42:05.740" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10079" PostTypeId="2" ParentId="10059" CreationDate="2016-06-13T11:18:37.193" Score="0" Body="&lt;p&gt;Generally half the rotors will go clockwise and the other half go counterclockwise so the drag on the rotors do not cause a net rotation effect. To manoeuvre, the relative speeds of the rotors change.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Running the rotors faster or slower causes more or less downforce. Doing the same to all the rotors will cause the copter to climb or descend. Doing so to the rotors on one side only will tilt the copter. Once tilted, the total downforce has a sideways component so the copter will move towards the lower side. Slowing down the rotors turning one direction and speeding up those in the other direction imbalances the drag and the copter will turn.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The above scheme effects rotation about thee axes are movement along three axes. That is all the degrees of freedom any solid body can do in three dimensional space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;None of these behaviours directly depend on the number of rotors - three rotors are enough to do all of above, and you can achieve nearly as much control with only one single bladed rotor and more complicated algorithms.  &lt;/p&gt;&#xA;" OwnerUserId="1321" LastActivityDate="2016-06-13T11:18:37.193" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="10080" PostTypeId="2" ParentId="10077" CreationDate="2016-06-13T11:21:38.507" Score="3" Body="&lt;p&gt;For an industrial setting funds are not unlimited but the value of the machine to the process is known or predicted and if the benefit is greater than the cost, the funds are sought.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Relationships with suppliers are built up over time. A lot of these relationships are old, passed from one team member to the next. Typically one maintains a relationship with multiple suppliers of similar capabilities to reduce the risk if something happens to any one supplier. So you intentionally buy product that you know will be more expensive or lower quality to keep the relationship established.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will have to work to find suppliers and build those relationships. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You are also working with prototype quantities which adds another challenge into the mix. Some suppliers (whether it's machinists or components vendors) don't like to waste time with small fish. It's not worth the effort and there is a higher risk to them of not getting paid. That's kind of the way it is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've worked in robotics prototyping for a long time, for both institutions and small but well known companies. Working with prototyping quantities (2-20) has always been a tough sell. You start to get a feel for whether the supplier will work with you pretty quickly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, if you do your leg work you can find everything you need. For instance, I needed a custom bearing made and the big guys laughed at me because I needed less than 100,000. But I called around and got lucky, finding the small shop that did prototypes for the SKF research team. On the other hand, I needed A custom gear+shaft and one of the big companies that normally does stuff for helicopters slotted the design right in with no problem. You never know. You just gotta pick up the phone. A lot. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding costs it's unclear whether this is a personal project or a startup one. If its a startup, try pitching your design to investors or directly to your market. Even if you want to self fund this serves as a good test, if neither are breaking out their wallets, this should be a big warning to you that the world is not ready for your idea. I've had several friends, with PhD's in robotics from good universities, throw a way a lot of money on failed startups that did not meet this test.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it's a personal project you may have to resort to dumpster diving and other similar techniques. Bosch may want 5K for their light weight high performance valves, but the Ferrari racing team (or whomever is near you) is probably throwing out some because they have 10 hours of use and the driver is complaining.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The phone is your friend for the industrial components and services world. You'll get a faster response than email. It may help for you to throw up a 1-3 page website for your company (make one up if you don't have one, a sole proprietorship) that the sales guy can hit. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, if you don't have a lot of experience with hydraulics, spend some time researching degloving to get proper motivation for your safety protocol. A small exo with no barrier between me and the hydraulic lines is not something I would get into.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2016-06-13T11:21:38.507" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10081" PostTypeId="2" ParentId="10077" CreationDate="2016-06-13T11:24:47.707" Score="0" Body="&lt;p&gt;You are right that prices are not displayed for products aimed at industrial use on vendors websites. Catalogs are available and you have to ask for a quotation to get the price. I am not sure why this is, it might have to do with differential pricing based on the customer, clients often get discounts and for some major manufacturers they also get a webshop type access reserved only for top clients. Another reason could be that they want to make sure that if you start buying equipment from them the equipment &quot;fits together&quot;, is compatible and is well suited for the goal of the project. They often ask you about the project fro which you want to buy equipments, which you of course are not obliged to disclose the project, but salesperson are well trained can help a lot in selecting the most well suited equipment, if you allow them to. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To answer your questions:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Or don't they worry about cost, and leave it to their employer to eat the cost as a part of doing their line of work?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, they do not. Especially small and medium enterprises are very price sensitive and are constantly looking for less expensive solutions (please note the difference between solution and components).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Is it possible to &quot;shop around&quot; for low-cost engineering components?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;To my knowledge it is not. The sites I have found (in Europe) that allow you to by industrial equipment are way more exponense then the the official suppliers with no webshop. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Industrial components are expensive and in my personal observation, vendors who sell similar quality have similar price ranges. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Building an exoskeleton will be particularly expensive, because of the safety requirements (you have to guarantee that it cannot hurt anyone with a probability of 10e-8). Safety certified industrial equipment is way more expensive then regular industrial equipment. There is no way around this. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want a more cost effective solution you can prove that you technology works in simulation ad/or on a smaller scale and try to get an investment based on results (either from Investors or from Kickstarter or similar).&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2016-06-13T11:24:47.707" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="10082" PostTypeId="2" ParentId="10059" CreationDate="2016-06-13T12:32:28.553" Score="0" Body="&lt;p&gt;A physical system only has 6 degrees of freedom - you can't have more than 6 ways to move. It doesn't matter how many propellers there are. There is forward/backward (translation) &lt;em&gt;along&lt;/em&gt; the x/y/z axes and rolling side-to-side (rotation) &lt;em&gt;about&lt;/em&gt; the x/y/z axes. Any off-axis motion just means that there is a combination of fundamental axial motion. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;:EDIT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'll add, as @DavidCarey &lt;a href=&quot;https://robotics.stackexchange.com/a/10084/9720&quot;&gt;mentions&lt;/a&gt;, that just because you have 6 actuators (6 propellors) doesn't mean you automatically can control all 6 degrees of freedom. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can you roll the hexacopter 90 degrees sideways &lt;em&gt;and hold it there&lt;/em&gt;? Can you pitch it 90 degrees forward &lt;em&gt;and hold it there&lt;/em&gt;? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, even though you can't &lt;em&gt;control&lt;/em&gt; all 6 degrees of freedom, you can still &lt;em&gt;move&lt;/em&gt; along all 6 axes of motion. So, if your question is about what you can &lt;em&gt;control&lt;/em&gt;, it's 4 axes of control (assuming the hexacopter propellers are all planar; i.e. a customary arrangement). If your question is how many ways you can &lt;em&gt;move&lt;/em&gt;, it's 6 degrees of freedom. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I hint at above, you can have a non-standard 6 propeller arrangement, where 4 fans are planar pointed at +Z, then one each is pointed +x and +y. In that way you can roll, pitch, yaw, and translate along x/y/z. Then you have 6 axes of control. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But again, for a planar arrangement, a 6 rotor vehicle still only has 4 axes of control. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2016-06-13T17:01:12.703" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10083" PostTypeId="2" ParentId="10056" CreationDate="2016-06-13T14:10:52.390" Score="1" Body="&lt;p&gt;The choice of motors is a trade off between cost/power/ease of implementation/etc. that only you can make.  But hobby servos like you linked to are a common choice for low-cost, low-power, hobby arms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Simple max-torque calculations for a robot arm are pretty straight forward.  (&lt;a href=&quot;http://www.robotshop.com/blog/en/robot-arm-torque-tutorial-7152&quot; rel=&quot;nofollow&quot;&gt;This&lt;/a&gt; is a simple tutorial).  But there are a few online calculators to help: &lt;a href=&quot;http://www.societyofrobots.com/robot_arm_calculator.shtml&quot; rel=&quot;nofollow&quot;&gt;[1]&lt;/a&gt;, &lt;a href=&quot;http://www.robotshop.com/blog/en/robot-arm-torque-calculator-9712&quot; rel=&quot;nofollow&quot;&gt;[2]&lt;/a&gt;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might also benefit from &lt;a href=&quot;http://www.societyofrobots.com/robot_arm_tutorial.shtml&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt; robot arm tutorial.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2016-06-13T14:10:52.390" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10084" PostTypeId="2" ParentId="10059" CreationDate="2016-06-13T16:05:26.690" Score="3" Body="&lt;h2&gt;practice&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;In practice, every multicopter (including 6-propeller hexacopter and 4-propeller quadcopter) that I've seen so far has 4 degrees of freedom: pitch, roll, yaw, and climb.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The minimum number of rigid rotors to get 4 degrees of freedom is 4 rotors.&#xA;(Single-rotor helicopters have articulated blades and swashplates, which are more complicated than rigid rotors).&#xA;One big advantage of using more rotors than the theoretical minimum number is so that if/when something goes wrong that affects one of the 6 rotors, the remaining rotors can still control all 4 degrees of freedom for a controlled landing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Such multicopters, like single-rotor helicopters, must go through a &quot;roll -- pull collective -- unroll -- push collective&quot; sequence to move a little bit to the right, since they cannot directly control the &quot;forward&quot; or &quot;right&quot; translation degree of freedom.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;theory&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The maximum number of &lt;a href=&quot;http://en.wikipedia.org/wiki/degrees_of_freedom_(mechanics)&quot; rel=&quot;nofollow&quot;&gt;degrees of freedom&lt;/a&gt; of a rigid object in our 3-dimensional world is 6. One way of naming those &lt;a href=&quot;http://en.wikipedia.org/wiki/six_degrees_of_freedom&quot; rel=&quot;nofollow&quot;&gt;6 degrees of freedom&lt;/a&gt;: pitch, roll, yaw, climb, forward, right.&#xA;Another way of naming the 6 degrees of freedom: heading, elevation, bank, X, Y, Z.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In principle a &lt;a href=&quot;http://www.opencircuits.com/multi-rotor&quot; rel=&quot;nofollow&quot;&gt;multirotor helicopter&lt;/a&gt; with 6 or more rigid rotors (hexacopters, octocopters, etc.), if the motors are rigidly mounted at the appropriate tilt(*),&#xA;or a &lt;a href=&quot;http://en.wikipedia.org/wiki/tandem_rotors&quot; rel=&quot;nofollow&quot;&gt;tandem rotor helicopter&lt;/a&gt; if the articulated blades are controlled appropriately, can directly control all 6 degrees of freedom.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Such a helicopter can move sideways directly by increasing sideways thrust, without tilting.&#xA;For example, with a tandem rotor helicopter where the forward rotor turns clockwise as viewed from above,&#xA;if the controller drives the swashplates so the front rotor tilts forwards and the back rotor tilts backwards, the helicopter as a whole will accelerate to the right without rotating.&lt;/p&gt;&#xA;" OwnerUserId="187" LastActivityDate="2016-06-13T16:05:26.690" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10085" PostTypeId="2" ParentId="10023" CreationDate="2016-06-13T17:16:01.193" Score="1" Body="&lt;p&gt;Most robotics simulators use ODE, Bullet, or PhysX as the back-end physics engine.  As you noticed, these are primarily rigid-body simulators developed for the game industry.  But I believe they have come a long way in recent years and are starting to have some soft-body dynamics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might want to look into off-line rendering tools like Blender, Maya, 3DStudio, etc. typically used for animations and movies.  They are more concerned with accuracy than real-time sim time.  But I have never tried to interface with these tools programmatically, which will probably be more difficult.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2016-06-13T17:16:01.193" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10086" PostTypeId="2" ParentId="10035" CreationDate="2016-06-13T17:25:13.970" Score="0" Body="&lt;p&gt;Yes, you can treat a skid-steer or tracked vehicle as a 2 wheel differential drive vehicle.  The only downside is that you will not know the exact point of rotation.  On a 2 wheel differential drive robot it is right between the wheels, but on your robot it could be anywhere on the centerline of the robot between the axles.  The location will depend on the center of mass of the robot and the friction between the wheels and the ground.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think there is no reason why you can't feed the odometry into a kalman filter.  You should give it a fairly high covariance though.  Actually, when driving straight the covariance can be low.  It is only when turning that it should be large.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2016-06-13T17:25:13.970" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10087" PostTypeId="1" AcceptedAnswerId="10093" CreationDate="2016-06-13T22:08:23.710" Score="3" ViewCount="814" Body="&lt;p&gt;I am the moment trying to read and understand this paper &lt;a href=&quot;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.591.8314&amp;amp;rep=rep1&amp;amp;type=pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Task Constrained Motion Planning in Robot Joint Space&lt;/a&gt; but seem to have a hard time understanding the math.&lt;/p&gt;&#xA;&lt;p&gt;The paper describes how to perform task constrained motion planning in cases where a frame is constrained to a specific task.&lt;br /&gt;&#xA;the problem the paper tackles is when sampling in joint space, randomized planners typically produce samples that lie outside the constraint manifold. the method  they proposed methods use a specified motion constrain vector to formulate a distance metric in task space and project samples within a tolerance distance of the constrain.&lt;/p&gt;&#xA;&lt;p&gt;Given the this I am seem to a bit confused on some simple terms they define in this paper.&lt;/p&gt;&#xA;&lt;p&gt;Examples. How is a task space coordinate defined ? what information does it have?&lt;/p&gt;&#xA;&lt;p&gt;they compute the &lt;span class=&quot;math-container&quot;&gt;$$\Delta x = T_e^t(q_s)$$&lt;/span&gt; which is transformation matrix of the end effector with respect to the task frame.&lt;/p&gt;&#xA;&lt;p&gt;What I don't get is why the end effector? and why the end effector with respect to the task frame?&lt;/p&gt;&#xA;&lt;p&gt;Secondly.&#xA;Later in the paper they write down an expression that relates the task space to the joint space motion. They do it using the Jacobian, but seem to miss explaining (in my opinion) what &lt;span class=&quot;math-container&quot;&gt;$E(q_s)$&lt;/span&gt; actually do.&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$J(q_s) = E(q_s)J^t(q_s)$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;What is said about it in the paper is that&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Given the configuration &lt;span class=&quot;math-container&quot;&gt;$q_s$&lt;/span&gt;, instantaneous velocities have a linear&#xA;relationship &lt;span class=&quot;math-container&quot;&gt;$E(q_s)$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;why the need of instaneous? what is the definition of an instantaneous component? how does it differ from the information given by the jacobian?&lt;/p&gt;&#xA;&lt;p&gt;Basically i don't understand how and why the mapping is as it is?..&lt;/p&gt;&#xA;" OwnerUserId="13439" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2016-06-15T13:51:58.553" Title="Task space to joint motion space conversion" Tags="&lt;robotic-arm&gt;&lt;motion-planning&gt;&lt;jacobian&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10089" PostTypeId="1" CreationDate="2016-06-14T06:34:48.573" Score="0" ViewCount="26" Body="&lt;p&gt;I have a laser pointer on a handle grip and I'm trying to keep the laser pointer's yaw direction, which can rotate at around 10deg/s. So I have the laser pointer on a stepper motor and an accelerometer/gyro in the handle, but what's a good way for maintaining its yaw direction? Could I simply turn the shaft according to the accelerometer/gyro's yaw readings or is control theory (PID) needed?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That is, if my stepper makes 4096 steps/rev, one gives 0.0879 deg. If the handle is turned by, say, 0.879 deg, then turn 10 steps in reverse (instantaneously). Would this be jerky and PID be needed?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any thought appreciated.&lt;/p&gt;&#xA;" OwnerUserId="11392" LastEditorUserId="9720" LastEditDate="2016-06-15T13:09:53.150" LastActivityDate="2016-06-15T13:09:53.150" Title="Locking the yaw direction of a laser pointer" Tags="&lt;sensors&gt;&lt;stability&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10090" PostTypeId="2" ParentId="10089" CreationDate="2016-06-14T07:43:32.903" Score="1" Body="&lt;p&gt;My guess would be it is going to be fine if you make sure that the stepper reacts fast enough. Hand motions are naturally jerk (and acceleration) limited, so your reaction will also be -- unless you wait too long and let the error accumulate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think that bigger problem might be the noise of your sensors. Some clever filtering might be necessary. &lt;/p&gt;&#xA;" OwnerUserId="482" LastActivityDate="2016-06-14T07:43:32.903" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10092" PostTypeId="1" AcceptedAnswerId="10100" CreationDate="2016-06-14T12:34:53.483" Score="1" ViewCount="2359" Body="&lt;p&gt;I want to make a &lt;strong&gt;object tracking quadcopter&lt;/strong&gt; for a project. While I'm using the &lt;strong&gt;Arduino Mega 2560&lt;/strong&gt; as the &lt;strong&gt;flight controller&lt;/strong&gt;, I was thinking of using an &lt;strong&gt;additional offboard microcontroller/board&lt;/strong&gt; for getting data from the onboard camera,which would then send an appropriate command to the onboard Arduino.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was hoping someone could &lt;strong&gt;provide clarification on the advantages/disadvantages of doing object tracking with either choice.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!   &lt;/p&gt;&#xA;" OwnerUserId="13967" LastActivityDate="2016-06-20T16:40:53.547" Title="Arduino or Raspberry Pi?" Tags="&lt;quadcopter&gt;&lt;arduino&gt;&lt;raspberry-pi&gt;" AnswerCount="3" CommentCount="7" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10093" PostTypeId="2" ParentId="10087" CreationDate="2016-06-14T13:35:56.560" Score="2" Body="&lt;p&gt;&quot;Why the end effector?&quot;   Because a robot working on a task uses its end effector to interact with the objects that make up the task.   For example, it is common to align the jaws (&quot;fingers&quot;) of a parallel-jaw gripper with the sides of an object to be picked up.   The simplest way to describe that object is by using a fixed coordinate system in which the task objectives are easy to visualize.   Maybe, for example, $\hat x$ is pointed in the direction of travel of a conveyor belt.   Since a robot can be placed with its base frame in an arbitrary relationship to the task space, it is usually easier to use the task coordinate system and make the transposes described.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding $E$, look at the paper's appendix.   The author uses this matrix to relate the Euler angles of the robot to the task system.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2016-06-14T13:35:56.560" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10094" PostTypeId="2" ParentId="8234" CreationDate="2016-06-14T14:49:58.787" Score="1" Body="&lt;p&gt;Flight controllers is a significant circuit in a quadcopter. Its function is to direct the RPM of each motor in response to input. A command from the pilot for the multi-rotor to move forward is fed into the flight controller, which determines how to manipulate the motors accordingly. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Different Flight controllers have different functionality. Some are very simple and do not supplement sensors for these operations. However, you'll find much of these, do use them for more accurate navigation and flight. It's not one- but many sensors together for best possible flight. For example the Parrot drone uses 3 axis accelerometer, gyroscope, magnetometer and one ultrasound sensor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Personally, I would recommend buying a flight controller. If this is your first project with a quadcopter, you probably should focus on its navigation algorithms. You can however try making your own when you gain experience with quads.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which one should you use?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It really depends upon you. If you wish to employ all the above sensors, you'll need one matching those specs. Else you can search for an alternative.&lt;/p&gt;&#xA;" OwnerUserId="13969" LastActivityDate="2016-06-14T14:49:58.787" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10095" PostTypeId="2" ParentId="8234" CreationDate="2016-06-14T15:04:07.493" Score="3" Body="&lt;p&gt;It all depends on your experience and comfort in coding and understanding the navigation algorithms needed to allow the drone to fly autonomously. Most flight controllers on the market come with inbuilt sensors (gyros,accelerometers,magnetometers,etc) and usually fly on manual control via an RC transmitter/receiver combo. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm in the same situation as you, and I'm attempting to make my own flight controller using the Arduino Mega board, for which I've bought external sensors to aid in flight.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If this is your first quadcopter project and you wish to program your own flight controller, write code to control the quadcopter manually, since that will give you experience and a wider understanding of how the flight controller works in tandem with the esc's,sensors and transmitter. Keep in mind that this is a lengthy process, and a lot of patience is needed to gain a good understanding of the project.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Good Luck!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS: If you need any help with programming, PM me, i can provide you some links that might help you :)&lt;/p&gt;&#xA;" OwnerUserId="13967" LastActivityDate="2016-06-14T15:04:07.493" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="10096" PostTypeId="1" CreationDate="2016-06-14T16:34:20.877" Score="0" ViewCount="46" Body="&lt;p&gt;I didn't found any modules to charge my &lt;a href=&quot;https://www.amazon.de/gp/product/B00FY2URC0/ref=pd_lpo_sbs_dp_ss_2?pf_rd_p=556245207&amp;amp;pf_rd_s=lpo-top-stripe&amp;amp;pf_rd_t=201&amp;amp;pf_rd_i=B005EPV0Y6&amp;amp;pf_rd_m=A3JWKAKR8XB7XF&amp;amp;pf_rd_r=K07V2ANNG3VMBEKKZDGV&quot; rel=&quot;nofollow&quot;&gt;11,1 volt LiPo akku&lt;/a&gt;, only for 3,7 volt with 5 volt power supply. How can I handle that with a micro-USB connector on my robotplatform?&lt;/p&gt;&#xA;" OwnerUserId="13972" LastEditorUserId="13972" LastEditDate="2016-06-14T16:43:07.633" LastActivityDate="2016-06-15T13:28:36.350" Title="How can I charge a 11,1 volt LiPo akku?" Tags="&lt;arduino&gt;&lt;power&gt;&lt;lithium-polymer&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10099" PostTypeId="1" CreationDate="2016-06-14T23:51:50.917" Score="0" ViewCount="95" Body="&lt;p&gt;I'm unsure if this is the correct community to ask this question (vs. &lt;a href=&quot;https://electronics.stackexchange.com/&quot;&gt;Electronics&lt;/a&gt; or &lt;a href=&quot;https://aviation.stackexchange.com/&quot;&gt;Aviation&lt;/a&gt; Stack Exchange, for example), but I recently purchased a &lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/B00D8UO8G6&quot; rel=&quot;nofollow noreferrer&quot;&gt;Hubsan x4 HD video drone from Amazon.&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is my second Hubsan drone so I am already familiar with using the recording feature. However, after every recording, the recordings are the correct length, with the correct audio, but the image is black. I tried formatting the micro SD, using different micro SDs, reading up on forums, etc. but nothing seems to do the trick.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is mine defective, or has someone had this issue and has been able to solve it?&lt;/p&gt;&#xA;" OwnerUserId="13976" LastEditorUserId="15160" LastEditDate="2017-05-30T11:44:53.077" LastActivityDate="2018-05-25T18:43:07.160" Title="Hubsan x4 drone camera recording black" Tags="&lt;quadcopter&gt;&lt;cameras&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10100" PostTypeId="2" ParentId="10092" CreationDate="2016-06-15T00:16:24.177" Score="5" Body="&lt;p&gt;For interfacing with a camera, I would recommend the Pi. The reason is that the AVR in the Arduino is an ordinary processor, whereas the Broadcom SoC in the Pi was originally designed for multimedia. Besides the ARM processor, it contains video encoding/decoding hardware that you won't find in the Arduino.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, you would need to learn how to use that extra hardware.&lt;/p&gt;&#xA;" OwnerUserId="13775" LastActivityDate="2016-06-15T00:16:24.177" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10101" PostTypeId="1" AcceptedAnswerId="10482" CreationDate="2016-06-15T03:08:58.033" Score="1" ViewCount="656" Body="&lt;p&gt;I am trying to measure the height of water inside a column. The column is 50mm in dia and 304mm long. I have mounted the sensor just above the column.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/c2yzF.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/c2yzF.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To measure the accuracy of the sensor, I filled the column up to a known value (a) and got the average sensor reading (b). a+b should give me the height of the sensor from the base of the column.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Repeating this for different values of a, I got very different values for (a+b). see attached chart.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/OwfU5.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OwfU5.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Is the sensor expected to have error of this order? &lt;/li&gt;&#xA;&lt;li&gt;Is my setup of confining the sensor through a column producing such errors. &lt;/li&gt;&#xA;&lt;li&gt;Any other ideas to get the water column height. Please note that during the actual test, the water inside will be oscillating (up and down).I am thinking of making a capacitive sensor using aluminium foil. Water will work as the dielectric and the level of water will determine the capacitance.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;P.S. I also did some open tests (not through a column) to get the distance of a fixed object, and it was quite accurate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help is appreciated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Arduino Code&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;NewPing.h&amp;gt;&#xA;&#xA;#define TRIGGER_PIN  7  // Arduino pin tied to trigger pin on the ultrasonic sensor.&#xA;#define ECHO_PIN     8  // Arduino pin tied to echo pin on the ultrasonic sensor.&#xA;#define MAX_DISTANCE 200 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.&#xA;&#xA;double DB_ROUNDTRIP_CM = 57.0;&#xA;&#xA;NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.&#xA;&#xA;void setup() {&#xA;  Serial.begin(9600); // Open serial monitor at 115200 baud to see ping results.&#xA;}&#xA;&#xA;void loop() {&#xA;  delay(100);&#xA;  unsigned int uS = sonar.ping();&#xA;  double d = uS / DB_ROUNDTRIP_CM;&#xA;&#xA;&#xA;  Serial.println(d);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="13933" LastEditorUserId="13933" LastEditDate="2016-06-16T02:42:41.823" LastActivityDate="2016-08-16T17:31:20.763" Title="Ultrasonic Sensor through a column" Tags="&lt;arduino&gt;&lt;ultrasonic-sensors&gt;" AnswerCount="3" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10102" PostTypeId="2" ParentId="10101" CreationDate="2016-06-15T07:41:35.683" Score="0" Body="&lt;p&gt;Ultrasound sensors like this have a very wide beam spread. In fact the word &quot;beam&quot; is completely inappropriate. So I think you're right, confining it like this is likely to cause problems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To test this, set the sensor up in free air then put a solid obstacle beside the beam, but a few centimetres clear of it. It'll probably cause stray readings.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you need to measure in such a narrow column, I'm not sure what you could do... &lt;strong&gt;very&lt;/strong&gt; high frequency ultrasound sensors have a narrower beam, but they are expensive. Maybe you could have some sort of optical sensors, arranged beside the column, and a &quot;float&quot; placed in there to block the sensors...&lt;/p&gt;&#xA;" OwnerUserId="9578" LastActivityDate="2016-06-15T07:41:35.683" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10103" PostTypeId="1" CreationDate="2016-06-15T09:08:35.053" Score="4" ViewCount="661" Body="&lt;p&gt;I am searching for a way to minimize the size of a stereo vision module and cannot find any ICs that will combine and sync two MIPI CSI-2 (4 lane) data streams without an FPGA and too much code.  there was one online (MAX7366A 3D Video Combiner/Synchronizer with two MIPI CSI-2 Input and one MIPI CSI-2 output) but the product is not publicly available.   Does anyone have knowledge of an arrangement of ICs that I could try?.&lt;/p&gt;&#xA;" OwnerUserId="13978" LastActivityDate="2018-05-25T04:41:19.550" Title="Is there a way to combine and sync two 2K cameras @ 90fps with ICs" Tags="&lt;computer-vision&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10104" PostTypeId="2" ParentId="10103" CreationDate="2016-06-15T11:16:03.380" Score="1" Body="&lt;p&gt;The OV580 from Omnivision will do what you are asking for, and provide you with a USB3 interface. There is a &lt;a href=&quot;https://www.leopardimaging.com/LI-OV580-STEREO.html&quot; rel=&quot;nofollow&quot;&gt;product&lt;/a&gt; from leopard imaging with 2 MIPI CSI-2 interfaces. I think it will only work with certain Omnivision cameras though. &lt;/p&gt;&#xA;" OwnerUserId="127" LastActivityDate="2016-06-15T11:16:03.380" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10105" PostTypeId="2" ParentId="10096" CreationDate="2016-06-15T13:28:36.350" Score="1" Body="&lt;p&gt;What exactly are you trying to do? You have an 11.1 volt, 5000mAh battery pack. That is, you have a (11.1*5)V-Ah battery pack, or a 55.5 Wh battery pack. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A micro USB connector can &lt;a href=&quot;https://techpinions.com/why-apple-couldnt-go-to-micro-usb-charging/10212&quot; rel=&quot;nofollow&quot;&gt;safely pass 9W of power&lt;/a&gt;, meaning it would take (55.5Wh/9W) = 6h10m to charge, assuming you could perfectly utilize all of that power. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should consider instead either:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Take the batteries out of the vehicle to charge, or&lt;/li&gt;&#xA;&lt;li&gt;Put a proper battery charger on your vehicle and use a different connector than micro USB.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I'll warn you that LiPo batteries are &lt;a href=&quot;https://www.google.com/search?q=hoverboard%20fire&quot; rel=&quot;nofollow&quot;&gt;notorious&lt;/a&gt; for &lt;a href=&quot;https://www.google.com/search?q=cell+phone+fire&quot; rel=&quot;nofollow&quot;&gt;catching fire&lt;/a&gt; if they are &lt;a href=&quot;https://www.youtube.com/watch?v=YCWdnjLqVWw&quot; rel=&quot;nofollow&quot;&gt;not properly charged&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are &lt;a href=&quot;http://www.digikey.com/en/articles/techzone/2012/sep/a-designers-guide-to-lithium-battery-charging&quot; rel=&quot;nofollow&quot;&gt;plenty&lt;/a&gt; of &lt;a href=&quot;https://www.sparkfun.com/products/674&quot; rel=&quot;nofollow&quot;&gt;integrated circuits&lt;/a&gt; that will &lt;a href=&quot;http://www.ti.com/lsds/ti/power-management/battery-charger-ic-products.page&quot; rel=&quot;nofollow&quot;&gt;charge a LiPo battery&lt;/a&gt;, but again, I don't think you'll find one that simultaneously uses a micro USB input format to charge a battery of the style that you have because it would take so long. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Trying to hack your own circuit together to get what you want is needlessly dangerous. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-06-15T13:28:36.350" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10106" PostTypeId="1" AcceptedAnswerId="10113" CreationDate="2016-06-15T14:45:33.617" Score="0" ViewCount="342" Body="&lt;p&gt;I am new to robotics.Recently came into contact code.So the teacher let me use the Serial port app for Android to enter the opcode.But the robot did not have any reaction.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;I use the Communications Cable with Adapter in android phone.&#xA;App Use [DroidTerm: USB Serial port]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Serial Port Settings&#xA;Baud: 115200   (19200 also used)&#xA;Data bits: 8&#xA;Parity: None&#xA;Stop bits: 1&#xA;Flow control: None&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;I try to enter opcode, but no response.--&gt; enter:128,135,134.....&#xA;But it did not show any reaction to the phone and robot.&#xA;I hope according to Opcode instructions to control robots to make the specified action.&lt;/p&gt;&#xA;" OwnerUserId="13982" LastEditorUserId="13982" LastEditDate="2016-06-15T16:15:47.763" LastActivityDate="2016-06-16T14:59:36.317" Title="How to use the opcode to start?" Tags="&lt;irobot-create&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10110" PostTypeId="1" CreationDate="2016-06-15T20:40:07.287" Score="5" ViewCount="6932" Body="&lt;p&gt;I have an arduino wired to an MPU6050 breakout board. The arduino continuously collects accelerometer and gyroscope data from the MPU6050 and calculates angle and velocity. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Simply plotting the vector components (x,y,z) of this data does not allow one to reason about the motion of the sensor or robot. It's possible, though not easy, to do sanity checks (Is the sensor oriented as expected? Is gravity working?). But it's very difficult to look at a x,y,z plot of accelerometer log data and imagine what the robot did for instance. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was wondering if there is some sort of tool or Python library to visualise accelerometer and gyro, or IMU data? (I'm looking for something like this- &lt;a href=&quot;https://youtu.be/6ijArKE8vKU&quot; rel=&quot;noreferrer&quot;&gt;https://youtu.be/6ijArKE8vKU&lt;/a&gt;)&lt;/p&gt;&#xA;" OwnerUserId="13887" LastEditorUserId="13887" LastEditDate="2016-06-17T21:47:51.413" LastActivityDate="2017-11-23T17:14:08.957" Title="Visualizing raw accelerometer and gyro data" Tags="&lt;arduino&gt;&lt;accelerometer&gt;&lt;gyroscope&gt;&lt;visualization&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10111" PostTypeId="2" ParentId="10050" CreationDate="2016-06-16T01:48:54.050" Score="9" Body="&lt;p&gt;Localization is the process of estimating the pose of the robot the environment. Number 5 in your list. Mapping is estimating the position of features in the environment. Number 1. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;2, 3, and 4 are not related to SLAM. They are all part of a complete robot system for which SLAM makes up yet another part. The software for a professional or research drone will have subsections that do flight control, obstacle avoidance, navigation (planning), SLAM, and other functions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you are correct in that you saw a drone do all those things, but SLAM is only one part of a robots software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All this is a very simplistic view. In practice we never truly know the environment. We are estimating pose in the map, hoping it is the same as the environment. We build the map with feature positions but often have false readings of features, or mis-identify the same feature as being two separate ones. Few SLAM approaches consider features that move in the environment. &lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2016-06-16T01:48:54.050" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10112" PostTypeId="2" ParentId="9751" CreationDate="2016-06-16T14:20:28.020" Score="0" Body="&lt;p&gt;There are many things to consider.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming that you are developing an app to accomplish this, you should invest some time in filtering. Depending on the vehicle and the phone's position in the vehicle, you would expect to encounter sensor noise due to vibration induced by the road surface or possibly the engine. Among many filtering techniques, Kalman filtering is often used with Accelerometer/Gyroscopes to fuse the raw sensor measurements and implementation is straight forward. To understand Kalman filtering (and possibly pick up a few other techniques), I suggest Sebastian Thrun's textbook &lt;em&gt;Probabilistic Robotics,&lt;/em&gt; which covers the topic quite well. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;While we are considering things you may have left out, assuming you are attempting to characterize driving behaviour of many test subjects, you should count on the subjects not using your app as intended. If a subject uses the phone while driving, your measurements will obviously be affected. Consider implementing a &quot;quiet mode&quot; while testing to discourage using the phone. Furthermore, you cannot assume that the phone will start in any one place. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of the concerns above and the many like them, rather than characterizing driver behaviour in real-time using the phone, you could instead have the phone log raw sensor data, including GPS location and raw accelerometer/gyroscope data--you could then use statistical techniques (again described in Thrun's text) to determine the transformation between the coordinates of the phone and the coordinates of the vehicle to finally determine the pose of the vehicle and characterize driving behaviour. This approach has the benefit of being easier to deploy and being robust in the event that your characterization procedures change in the future.&lt;/p&gt;&#xA;" OwnerUserId="9585" LastActivityDate="2016-06-16T14:20:28.020" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10113" PostTypeId="2" ParentId="10106" CreationDate="2016-06-16T14:59:36.317" Score="1" Body="&lt;p&gt;The robot's baud-rate may not be the default rate of 115200. Try resetting the robot (by holding dock and spot for 10 seconds, or removing the battery). This will reset the baud-rate back to 115200.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If that doesn't work, try connecting the robot to a computer and using RealTerm or some other serial program and send the same data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, when sending the data bytes, make sure they are being sent as raw 'numbers' (not ASCI). &lt;/p&gt;&#xA;" OwnerUserId="9743" LastActivityDate="2016-06-16T14:59:36.317" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10115" PostTypeId="1" CreationDate="2016-06-16T18:45:32.917" Score="1" ViewCount="586" Body="&lt;p&gt;I am making a project with a 4 wheeled differential robot to make visual SLAM using a stereo rig. I have some encoders to measure de displacement and the steering angle of the robot and I want to use the &lt;strong&gt;odometry motion model&lt;/strong&gt; in the fastSLAM algorithm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To use the odometry motion model you need to calculate the values it needs from the odometry reading (incremental encoders), $u_t=(\bar{x}_{t-1},\bar{x_t})$ where $\bar{x}_{t-1}=(\bar{x}\&amp;gt;\bar{y}\&amp;gt;\bar{\theta})$ and $\bar{x}_t=(\bar{x}'\&amp;gt;\bar{y}'\&amp;gt;\bar{\theta}')$ are the previous and the current pose extracted from the odometry of the vehicle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is about how to obtain those values from the encoders. I guess that in this case I would need to obtain the equations from the geometric model for the differential robot:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$D_L=\frac{2\cdot\pi \cdot R_L}{N_c}\cdot N_L$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$D_R=\frac{2\cdot\pi \cdot R_R}{N_c}\cdot N_R$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$D_T=\frac{D_L+D_R}{2}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\Delta\theta=\frac{D_L-D_R}{L}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $D_L$ is the advance of the left wheel, $D_R$ is the advance of the right wheel, $R_L$ is the lecture from the left encoder, $R_R$ the lecture from the right encoder, $N_C$ the total number of pulses of the encoder type, $D$ is the total distance achieved by the robot and $\theta$ the angle steered. $L$ is the distance between the wheels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using those equations is possible to obtain the pose in every time step:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\bar{x}_{t}=\bar{x}_{t-1}+D\cos(\theta_{t-1})$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\bar{y}_{t}=\bar{y}_{t-1}+D\sin(\theta_{t-1})$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\bar{\theta}_{t}=\bar{\theta}_{t-1}+\Delta\theta$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So those last are the values I need to inject to the modometry motion model and then add gaussian noise to them.&#xA;Am I right? Or is there another way of computing the pose from odometry for a differential 4-wheel robot?&lt;/p&gt;&#xA;" OwnerUserId="11050" LastActivityDate="2016-06-16T18:45:32.917" Title="SLAM - odometry motion model" Tags="&lt;mobile-robot&gt;&lt;slam&gt;&lt;odometry&gt;&lt;movement&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10119" PostTypeId="1" AcceptedAnswerId="10120" CreationDate="2016-06-17T11:42:26.690" Score="1" ViewCount="150" Body="&lt;p&gt;I have a heated compartment, inside which, there is another object heated up by independent heater. I want to control temperatures of both chamber and the object. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I could achieve this by simple PID (or PI) controllers for both chamber and object, but I would like to try more thoughtful approach :) I have two temperature sensors, and two PWM outputs for heaters. How do I identify a model for an object I want to control?   &lt;/p&gt;&#xA;" OwnerUserId="7360" LastActivityDate="2016-08-27T08:21:54.610" Title="How to create a model for temperature control?" Tags="&lt;control&gt;&lt;pid&gt;&lt;automation&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10120" PostTypeId="2" ParentId="10119" CreationDate="2016-06-17T14:43:00.237" Score="3" Body="&lt;p&gt;Generally you would only develop a model if (as in your case), you have something that you want to control. In that case, you should start by:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;List the outputs that you want to control. &lt;/li&gt;&#xA;&lt;li&gt;List the inputs that you can modulate. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;In your case, you want to control chamber temperature and object temperature. You can modulate the chamber heater and the object heater. Now, you have to ask yourself:&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;3&quot;&gt;&#xA;&lt;li&gt;How do the inputs affect the outputs? You should shoot for an equation in the form of $\mbox{[outputs] = f(inputs)}$&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;This is important because you generally only want to model the things that are pertinent to the task at hand. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, say you want to develop cruise control for a car. The output you want to control is vehicle speed and the input you can modulate is throttle position. Can you model coolant reservoir level? Sure, but you can also &lt;em&gt;assume&lt;/em&gt; the coolant system is functioning normally. Can you model the internals of an automatic transmission? Sure, but you can also &lt;em&gt;assume&lt;/em&gt; that the automatic transmission gives output power equal to input power minus some losses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The point is, you &lt;em&gt;have&lt;/em&gt; to make some set of assumptions about the &quot;nominal&quot; scenario. Once you have your initial model, you attempt to &lt;em&gt;validate&lt;/em&gt; the model by getting test data. Typically this means feeding an actual system a particular set of inputs and recording the response, then feeding the same inputs to your model and recording the response. The results should be (very close to) the same. How close is &quot;good enough&quot; depends on your application, and could be anywhere from &quot;it generally trends the same&quot; to virtually no error. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can try developing a rudimentary controller around an unvalidated model if you've got time to kill, but you should generally wait for validation before expending a lot of effort on the controller because math errors and faulty assumptions can cause you to have to start over with controller development. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can also skip the mathematical description if the system is too complex to be described mathematically, or if doing so would take too much time. &quot;Empirical modelling&quot; runs a similar sort of tests you would use to validate a model, but with the concept that, by seeing how a particular set of inputs create an output, you can derive some pattern that you can extrapolate a model that gives outputs for other inputs. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your case, if you're really concerned with better control, I would probably suggest trying to build an empirical model. Try a variety of inputs on only one heater and record how that impacts chamber and object temperatures. Then do the same on the other heater. Best case is the effect of each heater is decoupled or weakly correlated to the other temperature - the space heater only heats the space and the object heater only heats the object. In that scenario you can have independent control, though I would imagine this would probably only happen if you had significant chamber losses relative to the output of the object heater and/or the chamber had a large thermal mass relative to the object.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And on a final note, I'll just add that, when gathering test data for a particular model, you should try varying all of the &quot;nominal&quot; conditions that you assumed to make sure it doesn't have an effect you should be modelling. For you, that would probably mean checking the ambient air temperature around the chamber is varied through all of the expected conditions. As I mention above you're probably more likely to achieve independent temperature control with large chamber losses (because your heaters are not bi-directional; they only &lt;em&gt;make&lt;/em&gt; heat and cannot remove it), and the chamber losses are going to be related to ambient temperature. Testing in only hot weather (or vice-versa) will skew your results, model, and thus controller to a point that it might not be useful when the weather changes. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-06-17T14:43:00.237" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10121" PostTypeId="2" ParentId="10119" CreationDate="2016-06-17T15:05:55.393" Score="1" Body="&lt;p&gt;Chuck is right; you need to build a model so that you can appropriately choose your controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Temperature control is non-trivial because the underlying dynamics are non-linear. Because heat transfer has been studied extensively (see thermodynamics), you may be able to build a decent model for your system using only existing models and parameter characterization of your specific system. However, if this doesn't work for you, perhaps your system is too complex or non-linearities are not modeled correctly, you can apply machine learning to learn the model of your system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The task of learning the model of your system is a regression task. &lt;a href=&quot;http://www.gaussianprocess.org/&quot; rel=&quot;nofollow&quot;&gt;Gaussian Process Regression&lt;/a&gt; will work, but k-Nearest Neighbors is a good place to start. The link is very thorough on how GPR is and can be used--KNN is on wikipedia. You will still need data from your system, but using GPR or some other machine learning technique will have the benefit of not requiring hand-crafting your model. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know it sounds like a lot of work, and it might be overkill for what you are trying to do, but by using ML to build the model, you can confidently apply a non-linear controller--linearization may or may not be possible.&lt;/p&gt;&#xA;" OwnerUserId="9585" LastActivityDate="2016-06-17T15:05:55.393" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10122" PostTypeId="2" ParentId="10101" CreationDate="2016-06-17T15:19:29.660" Score="0" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Is the sensor expected to have error of this order?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In brief, yes. All sensors will have some degree of noise, which is characterized by the manufacturer. To avoid this, you can use a different sensor, or you can apply filtering to a very large dataset to extract the correct measurement. If you have the budget for it, a laser and photodetector of some sort will certainly give you better (less noise) results. Otherwise, you can apply a Kalman Filter or some other probabilistic technique to get a better estimate of the ground truth measurement.  &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Is my setup of confining the sensor through a column producing such&#xA;  errors.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Since you are using an ultra-sonic sensor, which has a conical &quot;beam&quot;, the column will be acting as a wave-guide, and you can expect interference as a result, especially for smaller depths; this will increase measurement noise.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Any other ideas to get the water column height.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I think that the ultra-sonic sensor will work under two assumptions. First, you must apply some sort of filter/technique to estimate the true measurement based on the noisy measurements. I recommend &lt;em&gt;Probabilistic Robotics&lt;/em&gt; by Sebastian Thrun for learning how to do this--it is well covered. The second assumption is that you don't need extreme precision. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another approach to the problem would be to set up a camera, and use computer vision techniques to estimate depth; this is probably as easy as what you are doing, but it will require a different experimental setup. &lt;/p&gt;&#xA;" OwnerUserId="9585" LastActivityDate="2016-06-17T15:19:29.660" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10123" PostTypeId="2" ParentId="106" CreationDate="2016-06-17T15:29:46.873" Score="0" Body="&lt;p&gt;The answer to this is simple, but the other answers obfuscate the dynamics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Differential drive robots can be modeled with unicycle dynamics of the form: $$\left[\begin{matrix}\dot{x}\\ \dot{y} \\ \dot{\theta} \end{matrix}\right] = \left[\begin{matrix}cos(\theta)&amp;amp;0\\sin(\theta)&amp;amp;0\\0&amp;amp;1\end{matrix}\right] \left[\begin{matrix}v\\\omega\end{matrix}\right],$$ where $x$ and $y$ are Cartesian coordinates of the robot, and $\theta \in (-\pi,\pi]$ is the angle between the heading and the $x$-axis. The input vector $\left[v, \omega \right]^T$ consists of linear and angular velocity inputs.&lt;/p&gt;&#xA;" OwnerUserId="9585" LastActivityDate="2016-06-17T15:29:46.873" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10124" PostTypeId="2" ParentId="231" CreationDate="2016-06-17T15:36:35.110" Score="1" Body="&lt;p&gt;Your question can only be answered specifically if we have the model parameters of your system. The most principled approach to answering your question would be to represent the highly nonlinear dynamics of your system in discrete time; then using this representation, a maximum step size for which stability is achieved can be determined--this will be maximum value that your system can successfully use. A minimum step size will be determined not by the dynamics of the system, but by the hardware that you are using--overrunning is what would concern me in this case.  &lt;/p&gt;&#xA;" OwnerUserId="9585" LastActivityDate="2016-06-17T15:36:35.110" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10125" PostTypeId="1" AcceptedAnswerId="10126" CreationDate="2016-06-18T04:58:26.313" Score="2" ViewCount="922" Body="&lt;p&gt;I'm new to robotics and I'm looking to make a 5-6 axis robotic arm out of stepper motors but I honestly don't know how much torque I should have for each part. Below I have described in more detail what my current plan is but I'm really not sure as to how much I really should be spending on each of these joints.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My general plan for this project was to make a arm that when fully extended would only be around 40-50(max) cm long. It would be consisted of light weight aluminum and I am hoping for it to weigh only a couple of pounds when done.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is my current list of actuators for each of the joints:&lt;br&gt;&#xA;(Bottom = 1, Top = 6)  &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/B00PNEPF5I&quot; rel=&quot;nofollow&quot;&gt;1st joint&lt;/a&gt;, (Nema 23 CNC Stepper Motor 2.8A)  &lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/B00PNEQKC0&quot; rel=&quot;nofollow&quot;&gt;2nd and 3rd joints&lt;/a&gt;  &lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/B00PNEQI7W&quot; rel=&quot;nofollow&quot;&gt;4th, 5th and 6th joints&lt;/a&gt;  &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;My real questions is, is this overkill or is it not enough for what I'm really trying to make. I really don't need it to be able to pick up a lot of weight, at most 1 to 2 kilos but I highly doubt I will ever be picking up anything more than that. Anyway I just wanted to see if this was sufficient enough for my project. &lt;/p&gt;&#xA;" OwnerUserId="14010" LastEditorDisplayName="user9480" LastEditDate="2016-10-10T08:25:17.160" LastActivityDate="2016-10-10T08:25:17.160" Title="What kind of torque is needed for a small 5-6 axis robotic arm?" Tags="&lt;robotic-arm&gt;&lt;stepper-motor&gt;&lt;actuator&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="10126" PostTypeId="2" ParentId="10125" CreationDate="2016-06-18T06:45:00.380" Score="1" Body="&lt;p&gt;Well, Henry, at this point I would resort to a spreadsheet. Since lower motors need to hold higher motors, you would need the weight of each motor, as well as all of the other arm weights. Then, with the length of each arm, you can calculate the torque needed for each motor to just hold the rest of the arm, on down the chain to the gripper. It's a long string of calculations just to know how much torque you need to hold your load still in any position (most difficult is typically fully extended). Balancing each arm segment with counterweights would drastically reduce the needed torque, but the added mass will decrease acceleration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To that number, you now need to add the torque required for moving. This will be based in your desired acceleration (velocity typically doesn't matter). The torque required to accelerate any given section is equal to the desired angular acceleration times the rotational-inertia of that arm segment and the segments that follow. Knowing the rotational-inertia of your arm segments is often difficult, and I often just over-estimate. Keep in mind that rotational-inertia increases as the arm extends to a longer radius, so you need to calculate worst-case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So now you see why I use a spreadsheet. Your question is not an easy one to answer, and it requires a lot of data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a small robot arm, the motors become intrusive. They can be larger and heavier than the arm itself, and &lt;em&gt;need&lt;/em&gt; to be large, just to carry their own weight. For small arms, I would recommend using tendons, and leave all motors on the base, where their weight is not an issue. It also means that you can tailor the size of the pulleys at each end to adjust the torque. That gives you an easy remedy if you find you need more torque or more speed.&lt;/p&gt;&#xA;" OwnerUserId="13775" LastEditorUserId="13775" LastEditDate="2016-06-18T07:13:48.523" LastActivityDate="2016-06-18T07:13:48.523" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10127" PostTypeId="1" CreationDate="2016-06-18T19:15:35.177" Score="5" ViewCount="4726" Body="&lt;p&gt;I'm trying to design a control system for a robot that tracks moving object. Thus I want to robot to match the position and velocity state of the object. I don't want robot to simply to arrive at the position, but I want to arrive at the position with the same velocity of the object. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Object velocity and position data will be provided externally.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not sure if a traditional PID controller (with velocity controls) with just a position based error is enough. Wouldn't position only state goal result in tracking that is always lagging behind?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is PID what I want or should I be looking at something else like trajectory controls?&lt;/p&gt;&#xA;" OwnerUserId="14012" LastEditorUserId="134" LastEditDate="2016-07-15T18:03:07.827" LastActivityDate="2016-07-15T18:03:07.827" Title="PID with position and velocity goal?" Tags="&lt;pid&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="10128" PostTypeId="2" ParentId="10127" CreationDate="2016-06-19T09:00:08.713" Score="5" Body="&lt;p&gt;In the case of &lt;strong&gt;MIMO&lt;/strong&gt; systems (Multi-Input, Multi-Ouput), my warm suggestion is to go with &lt;strong&gt;State Space Control&lt;/strong&gt;, which will give you enough freedom to move the closed-loop poles and thus achieve your control requirements. One viable solution, explored quite a lot in literature, is to employ a &lt;strong&gt;LQR controller&lt;/strong&gt; coupled with a &lt;strong&gt;state observer&lt;/strong&gt;, where here the state is obviously composed of position and velocity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With regards to the use of a simple &lt;strong&gt;PID&lt;/strong&gt;, I believe these two following questions are very much related:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/5260/the-aerial-refueling-problem-sketch-of-a-feedback-controller&quot;&gt;The aerial refueling problem: sketch of a feedback controller&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/7502/control-both-velocity-and-position-linear-actuator&quot;&gt;Control both Velocity and Position (Linear Actuator)&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2016-06-19T09:00:08.713" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10130" PostTypeId="1" CreationDate="2016-06-19T16:31:01.430" Score="0" ViewCount="1084" Body="&lt;p&gt;I'm making a target to an outdoor robot competition.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The target should detect if some of the robot got touched or got an hit   automatically. and the target can get hit 360 degree. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm searching for the perfect sensor to detect an hit, without get false positive from a wind.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My option right now are:&#xA;1- ultrasonic sensor (bad coverage)&#xA;2- tilt sensor  (bad FP rate)&#xA;3- wooden conductive &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to know if someone has other ideas (that affordable - less than 30$ dollar per target might be o.k)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: the target is static, and just waiting to a robot to touch it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: The specs are:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1- The target dimension is 1 meter height, 0.5 meter width , 0.3 depth.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2- To trigger the target ,the robot should be around 10 centimeter long to any point of the target surface.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3-To trigger the target the robot needs to get close up to 10 centimeter or even press with around 1 Newton force. the robot might even throw an object that satisfy the previous condition.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;4-Detection must be only from intentional touch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;5-Wooden conductive is trigger because a human is Electrically conductive. this might not be the option when we throw an object.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;6- Target will be placed outdoor, so the sensor need to be wind-resistance (not extreme wind condition- just around 20-25 km/h)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;7- I  prefer a sensor that detect touch (more than proximity)because it might make my solution more cheap and reliable(in factor of amount sensors as i estimate).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&#xA;Guy&lt;/p&gt;&#xA;" OwnerUserId="14016" LastEditorUserId="14016" LastEditDate="2016-06-21T21:23:31.967" LastActivityDate="2016-06-26T07:59:58.267" Title="Detect physical touch/hit" Tags="&lt;arduino&gt;&lt;sensors&gt;&lt;force-sensor&gt;" AnswerCount="4" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10132" PostTypeId="1" AcceptedAnswerId="10545" CreationDate="2016-06-19T22:15:13.937" Score="1" ViewCount="80" Body="&lt;p&gt;I'm developing a 5 axis robotic arm with stepper motors and I am getting around to ordering most of my parts. I plan on using 5 &lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/B00RCTW5SM&quot; rel=&quot;nofollow&quot;&gt;EasyDriver&lt;/a&gt; shields to drive all of my motors. I am also planning on using just a basic arduino uno board to go with it. So here are my questions:&lt;br&gt;&#xA;Is there any alternative instead of buying a ton of Easy Drivers and connecting all of them to a single board?&lt;br&gt;&#xA;And if there isn't, then how would the setup look to use more than 3 stepper motors? This is the most &lt;a href=&quot;http://cdn.instructables.com/F8Z/AAO2/I3KBOWBE/F8ZAAO2I3KBOWBE.MEDIUM.jpg&quot; rel=&quot;nofollow&quot;&gt;useful picture&lt;/a&gt; I found, however It only shows 3 and while I know I could plug in a 4th I am unsure whether I could plug in a 5th.&lt;/p&gt;&#xA;" OwnerUserId="14010" LastActivityDate="2016-08-26T15:36:23.820" Title="What is the best way to plug in more than 3 stepper motors into a Arduino Uno board?" Tags="&lt;stepper-motor&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10133" PostTypeId="2" ParentId="10130" CreationDate="2016-06-19T22:59:07.470" Score="0" Body="&lt;p&gt;Just an idea, I have used this Doppler radar module: &lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/B00FFW4AZ4&quot; rel=&quot;nofollow&quot;&gt;https://www.amazon.com/SMAKN-Microwave-10-525GHz-Doppler-Detector/dp/B00FFW4AZ4&lt;/a&gt;, for velocity estimation and presence detection. I don't completely understand what the scenario is, but in theory if a target was moving towards your robot, you could measure that by looking at the output of the Doppler radar. If a target moves towards you then the frequency of the output signal would increase, if it moves away the frequency would decrease. Good alternative to an ultrasonic because of larger range, but you would probably need one on the front and back for full 360 coverage. Also you may have issues if the target is too small, but again I don't fully understand your scenario.&lt;/p&gt;&#xA;" OwnerUserId="14018" LastActivityDate="2016-06-19T22:59:07.470" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10134" PostTypeId="2" ParentId="10092" CreationDate="2016-06-19T23:08:03.563" Score="3" Body="&lt;p&gt;The only issue with having the off-board controller is that the commands to the quad-rotor might lag, because of 1. range to controller or 2. the complexity of image processing code. With that said I wouldn't say use an Arduino only, because it probably won't be fast enough to do image processing + stabilization from accelerometers and gyroscopes. Instead use a raspberry pi and arduino in tandem, maybe the arduino is connected via serial. That way the arduino can do normal flight stabilization, and the raspberry pi can do image processing and send maneuvers to the arduino for appropriate action to the quad-rotor.&lt;/p&gt;&#xA;" OwnerUserId="14018" LastActivityDate="2016-06-19T23:08:03.563" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10135" PostTypeId="2" ParentId="10127" CreationDate="2016-06-20T07:37:06.677" Score="4" Body="&lt;p&gt;If in fact you need the robot to be at the same speed as the tracked object at the time it arrives with it, you might need to employ more sophisticated methods. However, a controller that is the correct &lt;em&gt;type&lt;/em&gt; will achieve asymptotically 0 tracking error on position (implying zero error on velocity by extension). Type is the amount of integrators in your controller. Now if your object you will be tracking is moving linearly, you need a type 1 controller. If it is changing its speed as well as its position (up to quadratic paths), you need a type 2 controller. &#xA;My point is that if you know the constraints on the motion of the object you're tracking, and your specifications are that you must asymptotically approach the velocity and position of your object, you may be able to get away with employing a PID controller + integrator, which would look something like this: $$&#xA;\frac{k_{d}s^2+k_{p}s+k_{i}}{s^2} $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;or this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ \frac{k_{d}s^2+k_{p}s+k_{i}}{s^3} $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Careful though, these integrators can make your system unstable. You can test in Matlab.&lt;/p&gt;&#xA;" OwnerUserId="14022" LastActivityDate="2016-06-20T07:37:06.677" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10136" PostTypeId="1" CreationDate="2016-06-20T08:14:33.447" Score="1" ViewCount="103" Body="&lt;p&gt;I own an iRobot create2 on which I am planning to implement a control algorithm. After playing with the different drive commands, I noticed that changing the desired velocity values marginally doesn't seem to do anything.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even the Drive PWM command that ranges from -255 to 255 seems to have an internal granularity that is bigger than 1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In &lt;a href=&quot;https://www.youtube.com/watch?v=U4_abg9LDLw&quot; rel=&quot;nofollow&quot;&gt;this video&lt;/a&gt; the create seems to change its driving direction nearly seamlessly, which I am not able to reproduce with the described behavior. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone have any suggestions?&lt;/p&gt;&#xA;" OwnerUserId="14003" LastActivityDate="2016-06-22T19:49:02.560" Title="iRobot Create2: Granularity of drive control?" Tags="&lt;control&gt;&lt;motor&gt;&lt;irobot-create&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10138" PostTypeId="2" ParentId="10130" CreationDate="2016-06-20T11:43:41.727" Score="0" Body="&lt;p&gt;Why don't just use bumpers? &lt;a href=&quot;http://www.dfrobot.com/index.php?route=product/product&amp;amp;product_id=63#.V2fWIbiLTIU&quot; rel=&quot;nofollow&quot;&gt;HCR robot&lt;/a&gt; is a nice example of a platform that uses this method.  The only downside is that they require some force to be pushed.&lt;/p&gt;&#xA;" OwnerUserId="7360" LastActivityDate="2016-06-20T11:43:41.727" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10139" PostTypeId="2" ParentId="10127" CreationDate="2016-06-20T15:13:41.640" Score="4" Body="&lt;p&gt;In many cases, a single traditional PID controller is adequate to track an object and match both position and velocity of the object.&#xA;With the error term of the PID in terms of position, the integral term (&quot;I&quot; of the PID) and the derivative term (the &quot;D&quot; term in the PID) each help compensate for the velocity of the object.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;No matter what control system you use, if the object makes a sudden unexpected movement, the tracking will lag behind -- that's part of the nature of our causal universe.&#xA;(Please tell us if there are any, even completely infeasible, ways of eliminating all lag from an object tracker).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are various feedforward approaches that can reduce (but never eliminate) the lag in a PID controller.&#xA;In your case, rather than the (traditional, error-amplifying) approach that makes D proportional to the derivative of the position error,&#xA;you may have less lag by directly measuring the speed of the object and the speed of your tracker and setting D proportional to their difference.&#xA;(Or perhaps proportional to the speed of the object alone).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want the tracker to arrive at the velocity of the object at the same instant that it arrive at the position of the object,&#xA;then you want a control system &quot;without overshoot&quot;.&#xA;There are lots of applications that require such a control system,&#xA;and PID control systems can be tuned such that they have no overshoot after a step impulse.&#xA;(You probably already know that &lt;em&gt;most&lt;/em&gt; PID control systems are tuned using a different critera that &lt;a href=&quot;http://support.motioneng.com/downloads-notes/tuning/pid_overshoot.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;allows some overshoot&lt;/a&gt; and oscillation in order to reduce the lag in settling time; people using such systems use the term &quot;overdamped&quot; to describe settings that have no overshoot).&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Bob Pease. &lt;a href=&quot;http://electronicdesign.com/analog/whats-all-p-i-d-stuff-anyhow&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;What's All This P-I-D Stuff, Anyhow?&quot;&lt;/a&gt; &lt;em&gt;(&quot;you may get better results from having two sensors. The one that drives the Differentiator may be located very close to the heater as an aid to stability. But the one that drives the integrator may live in the &quot;sweet spot&quot; -- the exact place where highest precision is needed.&quot;)&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/5260/the-aerial-refueling-problem-sketch-of-a-feedback-controller&quot;&gt;The aerial refueling problem: sketch of a feedback controller&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Leith Znaimer and John Bechhoefer. &lt;a href=&quot;http://www.sfu.ca/chaos/papers/2014/rsi14-PID-reprint.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;Split PID control—Two sensors can be better than one&quot;&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://control.com/thread/1026155550&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;PID control without overshoot&quot;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://dx.doi.org/10.1109/ICEVENT.2013.6496531&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;Modified PID controller for avoiding overshoot in temperature of barrel heating system&quot;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="187" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2016-06-20T15:13:41.640" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10140" PostTypeId="2" ParentId="9962" CreationDate="2016-06-20T15:45:26.787" Score="3" Body="&lt;p&gt;The short answer to this question is that linearization won't work, and here's why:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Differential drive robots can be modeled with unicycle dynamics of the form: $$\dot{z}=\left[\begin{matrix}\dot{x}\\ \dot{y} \\ \dot{\theta} \end{matrix}\right] = \left[\begin{matrix}cos(\theta)&amp;amp;0\\sin(\theta)&amp;amp;0\\0&amp;amp;1\end{matrix}\right] \left[\begin{matrix}v\\\omega\end{matrix}\right],$$ where $x$ and $y$ are Cartesian coordinates of the robot, and $\theta \in (-\pi,\pi]$ is the angle between the heading and the $x$-axis. The input vector $u=\left[v, \omega \right]^T$ consists of linear and angular velocity inputs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We can re-write this in affine form, such that:&#xA;$$\dot{z}=f(z)+g(z)u.$$&#xA;Notice that $f(z)=0$, which is equivalent to saying that there is no drift in the system. For clarity, let $\mathbf{g}(z,u)=g(z)u.$ The Jacobian, which is essentially a matrix of truncated Taylor series expansions, is used to linearize nonlinear systems about an equilibrium point, but the eigenvalues of the Jacobian matrix, evaluated at equilibrium, must be nonzero in order for the linearization to hold (there are some important theorems that come into play here, which are covered in linear algebra and linear systems textbooks). The Jacobian for state matrix A of the possible linearized unicycle system is given by: $$A:=D\mathbf{g}(z,u)=\frac{\partial \mathbf{g}(z,u)}{\partial z}=\left[\begin{matrix}\frac{\partial g_1(z,u)}{\partial x}&amp;amp;\frac{\partial g_1(z,u)}{\partial y}&amp;amp;\frac{\partial g_1(z,u)}{\partial \theta}\\\frac{\partial g_2(z,u)}{\partial x}&amp;amp;\frac{\partial g_2(z,u)}{\partial y}&amp;amp;\frac{\partial g_2(z,u)}{\partial \theta}\\\frac{\partial g_3(z,u)}{\partial x}&amp;amp;\frac{\partial g_3(z,u)}{\partial y}&amp;amp;\frac{\partial g_3(z,u)}{\partial \theta}\end{matrix}\right]=\left[\begin{matrix}0&amp;amp;0&amp;amp;-v\text{sin}(\theta)\\0&amp;amp;0&amp;amp;v\text{cos}(\theta)\\0&amp;amp;0&amp;amp;0\end{matrix}\right],$$&#xA;where $g_n$ is the $n^{th}$ function of $\mathbf{g}(z,u)$. Each element in the Jacobian is evaluated as follows, using $n=1$ as an example: $$\frac{\partial g_1(z,u)}{\partial x}=\frac{\partial (v cos{\theta})}{\partial x}=0.$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By inspection, we can see that the eigenvalues of the Jacobian are zero for all $z$, never mind at any equilibrium point, so this system cannot be linearized. Despite not being able to linearize the system, non-linear control of unicycle robots is straightforward and well studied.&lt;/p&gt;&#xA;" OwnerUserId="9585" LastEditorUserId="9585" LastEditDate="2016-06-21T21:15:41.913" LastActivityDate="2016-06-21T21:15:41.913" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="10141" PostTypeId="2" ParentId="3040" CreationDate="2016-06-20T16:26:40.327" Score="0" Body="&lt;p&gt;If I understand correctly, you would like to understand how control a two-wheeled differential drive robot so that you can achieve smooth/elegant driving while arriving at a desired final orientation--this is known as the parking problem. Ian presented an AI approach to the problem, which is interesting, but I would be remiss if I didn't interject with a control theoretic perspective.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because two-wheeled differential drive robotics are a well-studied robotic platform, we can determine a control law from a model of the dynamics. Differential drive robots can be modeled with unicycle dynamics of the form: $$\dot{z}=\left[\begin{matrix}\dot{x}\\ \dot{y} \\ \dot{\theta} \end{matrix}\right] = \left[\begin{matrix}cos(\theta)&amp;amp;0\\sin(\theta)&amp;amp;0\\0&amp;amp;1\end{matrix}\right] \left[\begin{matrix}v\\\omega\end{matrix}\right],$$ where $x$ and $y$ are Cartesian coordinates of the robot, and $\theta \in (-\pi,\pi]$ is the angle between the heading and the $x$-axis. The input vector $\left[v, \omega \right]^T$ consists of linear and angular velocity inputs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The parking problem that you mention interest in in your comment has been studied widely. &lt;a href=&quot;http://www-personal.umich.edu/~jongjinp/papers/Park-icra-11.pdf&quot; rel=&quot;nofollow&quot;&gt;A Smooth Control Law for Graceful Motion of Differential Wheeled Mobile Robots in 2D Environment&lt;/a&gt; presents one possible solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another solution to tracking a trajectory is to control a point, which is holonomic, some small distance $l$ away from the center of the the two wheels rather than controlling the unicycle robot directly. To do this, we can derive the following rotation matrix to transform the control law of the robot to the control law of the point: $$\dot{p}=\left[\begin{matrix}\dot{p_x}\\\dot{p_y}\end{matrix}\right]=\left[\begin{matrix}\text{cos}(\theta)&amp;amp;-l\text{sin}(\theta)\\\text{sin}(\theta)&amp;amp;l \text{cos}(\theta)\end{matrix}\right]\left[\begin{matrix}v\\\omega\end{matrix}\right]$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\dot{p}$ is the velocity of the point being controlled, and it is decomposed into its $x$ and $y$ components. At this point, control is quite simple, simply control the point directly! Setting $$\dot{p}=u=r(t),$$ accomplishes this, where $u$ is the input, and $r(t)$ is the reference trajectory that you want; this will accomplish smooth movement along the trajectory.&lt;/p&gt;&#xA;" OwnerUserId="9585" LastEditorUserId="9585" LastEditDate="2016-06-20T20:18:47.177" LastActivityDate="2016-06-20T20:18:47.177" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10143" PostTypeId="2" ParentId="10092" CreationDate="2016-06-20T16:40:53.547" Score="1" Body="&lt;p&gt;One point that hasn't been addressed, which is admittedly outside the scope of the prompt, is whether or not a Pi should be used at all as the off-board component. Unless you are trying to develop on the Pi for a specific reason (possibly cost), you will be losing out on serious computational power that can be achieved with a laptop or desktop computer. Other posts highlight the fact that image processing will be computationally expensive, especially if it is needed in real-time. If you can keep everything on-board, then the following doesn't hold, but if you need to do off-board processing, I would advise you to develop on a &quot;larger&quot; linux box (or VM/dual-boot with Windows) first.&lt;/p&gt;&#xA;" OwnerUserId="9585" LastActivityDate="2016-06-20T16:40:53.547" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10150" PostTypeId="1" AcceptedAnswerId="10157" CreationDate="2016-06-21T21:15:10.383" Score="2" ViewCount="521" Body="&lt;p&gt;I was looking at the contact points for the Atlas in the DRCsim package. Each foot has 4 contact points at each vertex of the rectangle. I'd like to know how these points are determined. I've tried looking at the ODE code, but C++ isn't my strong suit so I had some difficulty figuring out what was going on. What I understand is that ODE compares the geometries one by one however it's not possible to compare all points so it only compare a select few points. What I'm trying to understand is what basis are those particular points selected? Why does the Atlas have the 4 contacts set up the way they are, and not some additional points on the heel? Can I add them myself?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="14040" LastActivityDate="2016-06-23T07:15:11.537" Title="How does ODE determine contact points in Gazebo?" Tags="&lt;gazebo&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10152" PostTypeId="2" ParentId="10130" CreationDate="2016-06-22T16:09:14.567" Score="1" Body="&lt;p&gt;One option could be to use the MPU6050 IMU, or some other accelerometer. These sensors are cheap, so they will come in under your budget. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;With acceleration measurements, you can detect impulses caused by striking the target surface. If you are assuming light wind, then you can probably just set a threshold that on the magnitude of the impulse, classifying measurements as hits only if they exceed a certain value. If you expect significant wind, you can do some sort of filtering.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is hard to say more because your description is somewhat nebulous. Perhaps adding a diagram would help.&lt;/p&gt;&#xA;" OwnerUserId="9585" LastActivityDate="2016-06-22T16:09:14.567" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10154" PostTypeId="1" AcceptedAnswerId="10161" CreationDate="2016-06-22T18:02:00.933" Score="0" ViewCount="133" Body="&lt;p&gt;I've been making my own quadcopter flight controller using &lt;strong&gt;Arduino Mega&lt;/strong&gt;. This is the sample code I wrote in order to &lt;strong&gt;test the esc timers and motors&lt;/strong&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;byte channelcount_1, channelcount_2, channelcount_3, channelcount_4;  &#xA;int receiverinput_channel_1, receiverinput_channel_2, receiverinput_channel_3, receiverinput_channel_4, start;  &#xA;unsigned long channel_timer_1, channel_timer_2, channel_timer_3, channel_timer_4, current_time, esc_looptimer;  &#xA;unsigned long zero_timer, timer_1, timer_2, timer_3, timer_4;  &#xA;void setup() {  &#xA;  // put your setup code here, to run once:  &#xA;  DDRC |= B11110000; //Setting digital pins 30,31,32,33 as output  &#xA;  DDRB |= B10000000;; //Setting LED Pin 13 as output  &#xA;  //Enabling Pin Change Interrupts  &#xA;  PCICR |= (1 &amp;lt;&amp;lt; PCIE0);  &#xA;  PCMSK0 |= (1 &amp;lt;&amp;lt; PCINT0); //Channel 3 PIN 52  &#xA;  PCMSK0 |= (1 &amp;lt;&amp;lt; PCINT1); //Channel 4 PIN 53  &#xA;  PCMSK0 |= (1 &amp;lt;&amp;lt; PCINT2); //Channel 2 PIN 51  &#xA;  PCMSK0 |= (1 &amp;lt;&amp;lt; PCINT3); //Channel 1 PIN 50  &#xA;  //Wait till receiver is connected&#xA;  while (receiverinput_channel_3 &amp;lt; 990 || receiverinput_channel_3 &amp;gt; 1020 || receiverinput_channel_4 &amp;lt; 1400) {  &#xA;    start++;  &#xA;    PORTC |= B11110000;  &#xA;    delayMicroseconds(1000); // 1000us pulse for esc  &#xA;    PORTC &amp;amp;= B00001111;  &#xA;    delay(3); //Wait 3 ms for next loop  &#xA;    if (start == 125) { // every 125 loops i.e. 500ms  &#xA;      digitalWrite(13, !(digitalRead(13))); //Change LED status  &#xA;      start = 0; //Loop again  &#xA;    }  &#xA;  }  &#xA;  start = 0;  &#xA;  digitalWrite(13, LOW); //Turn off LED pin 13  &#xA;  zero_timer = micros();  &#xA;}  &#xA;void loop() {  &#xA;  // put your main code here, to run repeatedly:  &#xA;  while (zero_timer + 4000 &amp;gt; micros());  &#xA;  zero_timer = micros();  &#xA;  PORTC |= B11110000;  &#xA;  channel_timer_1 = receiverinput_channel_3 + zero_timer; //Time calculation for pin 33  &#xA;  channel_timer_2 = receiverinput_channel_3 + zero_timer; //Time calculation for pin 32  &#xA;  channel_timer_3 = receiverinput_channel_3 + zero_timer; //Time calculation for pin 31  &#xA;  channel_timer_4 = receiverinput_channel_3 + zero_timer; //Time calculation for pin 30  &#xA;  while (PORTC &amp;gt;= 16) //Execute till pins 33,32,31,30 are set low  &#xA;  {  &#xA;    esc_looptimer = micros();  &#xA;    if (esc_looptimer &amp;gt;= channel_timer_1)PORTC &amp;amp;= B11101111; //When delay time expires, pin 33 is set low  &#xA;    if (esc_looptimer &amp;gt;= channel_timer_2)PORTC &amp;amp;= B11011111; //When delay time expires, pin 32 is set low  &#xA;    if (esc_looptimer &amp;gt;= channel_timer_3)PORTC &amp;amp;= B10111111; //When delay time expires, pin 31 is set low  &#xA;    if (esc_looptimer &amp;gt;= channel_timer_4)PORTC &amp;amp;= B01111111; //When delay time expires, pin 30 is set low  &#xA;  }  &#xA;}  &#xA;//Interrupt Routine PCI0 for Receiver  &#xA;ISR(PCINT0_vect)  &#xA;{  &#xA;  current_time = micros();  &#xA;  //Channel 1  &#xA;  if (PINB &amp;amp; B00001000)  &#xA;  {  &#xA;    if (channelcount_1 == 0 )  &#xA;    {  &#xA;      channelcount_1 = 1;  &#xA;      channel_timer_1 = current_time;  &#xA;    }  &#xA;  }  &#xA;  else if (channelcount_1 == 1 )  &#xA;  {  &#xA;    channelcount_1 = 0;  &#xA;    receiverinput_channel_1 = current_time - channel_timer_1;  &#xA;  }  &#xA;  //Channel 2  &#xA;  if (PINB &amp;amp; B00000100)  &#xA;  {  &#xA;    if (channelcount_2 == 0 )  &#xA;    {  &#xA;      channelcount_2 = 1;  &#xA;      channel_timer_2 = current_time;  &#xA;    }  &#xA;  }  &#xA;  else if (channelcount_2 == 1)  &#xA;  {  &#xA;    channelcount_2 = 0;  &#xA;    receiverinput_channel_2 = current_time - channel_timer_2;  &#xA;  }  &#xA;&#xA;  //Channel 3  &#xA;  if (PINB &amp;amp; B00000010)  &#xA;  {  &#xA;    if (channelcount_3 == 0 &amp;amp;&amp;amp; PINB &amp;amp; B00000010)  &#xA;    {  &#xA;      channelcount_3 = 1;  &#xA;      channel_timer_3 = current_time;  &#xA;    }  &#xA;  }  &#xA;  else if (channelcount_3 == 1)  &#xA;  {  &#xA;    channelcount_3 = 0;  &#xA;    receiverinput_channel_3 = current_time - channel_timer_3;  &#xA;  }  &#xA;  //Channel 4  &#xA;  if (PINB &amp;amp; B00000001) {  &#xA;    if (channelcount_4 == 0 )  &#xA;    {  &#xA;      channelcount_4 = 1;  &#xA;      channel_timer_4 = current_time;  &#xA;    }  &#xA;  }  &#xA;  else if (channelcount_4 == 1)  &#xA;  {  &#xA;    channelcount_4 = 0;  &#xA;    receiverinput_channel_4 = current_time - channel_timer_4;  &#xA;  }  &#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;However, my issue here is that the &lt;strong&gt;bldc motors i'm using don't work smoothly when connected to the Arduino.&lt;/strong&gt; They &lt;strong&gt;erratically stop and even change direction of rotation&lt;/strong&gt; at the same throttle input. I've tested them by connecting them directly to the transmitter and they work fine there with perfect rotation and speed. Can someone please help me out and tell me where I might be going wrong? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: I do realize posting the entire Arduino code might be overkill, but I've been trying to solve this problem for three days (as of 22nd June,16) and I really do hope someone can point out any improvements/corrections in my code.&lt;/p&gt;&#xA;" OwnerUserId="13967" LastEditorUserId="127" LastEditDate="2016-06-24T08:30:08.790" LastActivityDate="2016-06-24T08:30:08.790" Title="Bldc motors erratic behavior with Arduino program" Tags="&lt;quadcopter&gt;&lt;arduino&gt;&lt;brushless-motor&gt;&lt;esc&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="10155" PostTypeId="2" ParentId="10136" CreationDate="2016-06-22T19:49:02.560" Score="1" Body="&lt;p&gt;In my brief stint working with the Create 2, I noticed the same thing. Specifying very low velocities doesn't work very well, and small increases don't seem to do anything up to a certain point. This non-linearity in the response of the motors to the inputs can likely be explained by resistance (stiction) of the motors, which must be sufficiently overcome.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To get past the resistance, you could try supplying large jerk initially, then decreasing acceleration until the desired velocity is achieved. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I cannot speak to the velocities or controls used in the video, but I will point out that whenever the velocity (linear or angular) changes, there appears to be a rapid acceleration, which is what I have suggested.&lt;/p&gt;&#xA;" OwnerUserId="9585" LastActivityDate="2016-06-22T19:49:02.560" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10157" PostTypeId="2" ParentId="10150" CreationDate="2016-06-23T07:15:11.537" Score="1" Body="&lt;p&gt;Collision detection is a main part of ODE&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;ODE has two main components: a dynamics simulation engine and a collision detection engine.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;For ODE, there is a &lt;a href=&quot;http://ode-wiki.org/wiki/index.php?title=Manual:_Collision_Detection&quot; rel=&quot;nofollow&quot;&gt;wiki page&lt;/a&gt; outlining how that part of ODE works. Collision is detected between geometric primitives that have been defined to resemble the shape of the simulated objects. There is a trade-off here between speed and accuracy. More complicated shapes will require more checks and reduce the overall performance of the simulation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The basic geometry is not so complicated. The difficult part is making the checks fast. Diving into the C++ code might be challenging because of this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And yes, you should be able to change the collision model. Have a look at the model files. Note that the collision model not necessarily the same as the visualisation.&lt;/p&gt;&#xA;" OwnerUserId="127" LastActivityDate="2016-06-23T07:15:11.537" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10159" PostTypeId="1" CreationDate="2016-06-23T11:42:32.117" Score="0" ViewCount="391" Body="&lt;p&gt;I am new to the iRobot Create 2 but I do know a thing or two about the Arduino (don't assume too much though). However, in this case, I am beyond stumped over what I am sure is something simple but is somehow not obvious to me. Three people have confirmed my wiring from the Create 2 to the Arduino to be correct and the code I have looks similar to many examples that I have seen on this forum. However, I cannot get my Create 2 to do ANYTHING. I am not at all sure what is wrong and I am starting to wonder if the robot is even receiving commands let alone doing anything with them. Is there anything wrong with this code and can anybody suggest a way to verify that the robot is receiving data (since it does not beep or provide return messages)? Thank you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT (06/24 01:10 EST); Updated code (with a few notes).&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#########################&#xA;#include &amp;lt;SoftwareSerial.h&amp;gt;&#xA;#include &amp;lt;SPI.h&amp;gt;&#xA;&#xA;int baudPin = 17;&#xA;int i;&#xA;int ledPin = 13;&#xA;int rxPin = 19;&#xA;int txPin = 18;&#xA;&#xA;unsigned long baudTimer = 240000; // 4 minutes&#xA;unsigned long thisTimer = 0;&#xA;unsigned long prevTimer = 0;&#xA;&#xA;SoftwareSerial Roomba(rxPin, txPin);&#xA;&#xA;void setup() {&#xA;  pinMode(baudPin, OUTPUT);&#xA;  pinMode(ledPin, OUTPUT);&#xA;  pinMode(rxPin, INPUT);&#xA;  pinMode(txPin, OUTPUT);&#xA;&#xA;  // I have tired communicating with both baud rates (19200 and 115200).&#xA;  // When trying the 115200 baud, I set &quot;i&amp;lt;=0;&quot; in the loop below since&#xA;  // the pulse does not need to be sent.&#xA;  Roomba.begin(19200);&#xA;  Serial.begin(115200);&#xA;  delay(2000);&#xA;&#xA;  // I hooked up an LED in series with the baudPin so that it would turn&#xA;  // off when low thus giving me some kind of visual confirmation that a&#xA;  // pulse is being sent. See additional note in loop() below.&#xA;  for (i = 1; i &amp;lt;= 3; i++) {&#xA;    digitalWrite(baudPin, HIGH);&#xA;    delay(100);&#xA;    digitalWrite(baudPin, LOW);&#xA;    delay(500);&#xA;    digitalWrite(baudPin, HIGH);&#xA;  }&#xA;&#xA;  // I know this might not be the right way to send data to the robot,&#xA;  // but I was fiddling with this while trying to figure out a separate&#xA;  // problem regarding the TX/RX lines which I am putting off until I&#xA;  // get the baud issue straightened out.&#xA;. /*&#xA;    int sentBytes = Roomba.write(&quot;128&quot;);&#xA;    Serial.print(sentBytes);&#xA;    Serial.print(&quot;\n&quot;);&#xA;  */&#xA;&#xA;  i = 0;&#xA;}&#xA;&#xA;void loop() {&#xA;  thisTimer = millis();&#xA;&#xA;  // The LED that I have hooked up in series with the baudPin blinks&#xA;  // when the pulse is low, thus indicating that a pulse is being sent.&#xA;  // However, it only seems to wake the robot when it is asleep. If the&#xA;  // robot is already awake when the pulse is sent, it has no affect and&#xA;  // the robot will fall asleep a minute later.&#xA;  if (thisTimer - prevTimer &amp;gt; baudTimer) {&#xA;    prevTimer = thisTimer;&#xA;    i = 10;&#xA;    Serial.print(&quot;Sending pulse...\n&quot;);&#xA;    digitalWrite(baudPin, LOW);&#xA;    delay(500);&#xA;    digitalWrite(baudPin, HIGH);&#xA;  }&#xA;&#xA;  /*&#xA;    i++;&#xA;    Serial.print(prevTimer);&#xA;    Serial.print(&quot; --&amp;gt; &quot;);&#xA;    Serial.print(thisTimer);&#xA;    Serial.print(&quot; --&amp;gt; &quot;);&#xA;    Serial.print(i);&#xA;    Serial.print(&quot;\n&quot;);&#xA;    delay(1000);&#xA;  */&#xA;}&#xA;#########################&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="14021" LastEditorUserId="14021" LastEditDate="2016-06-24T05:13:23.527" LastActivityDate="2019-12-19T06:01:05.150" Title="iCreate 2 with Arduino (Just getting going)" Tags="&lt;arduino&gt;&lt;irobot-create&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10160" PostTypeId="2" ParentId="10159" CreationDate="2016-06-23T12:46:36.013" Score="1" Body="&lt;p&gt;It looks like you're trying to initialize two different baud rates:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Roomba.begin(19200);&#xA;Serial.begin(115200);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So, first off I don't think it would work to have your setup using two different rates (though I may be wrong). But, more importantly, from the &lt;a href=&quot;https://cdn-shop.adafruit.com/datasheets/create_2_Open_Interface_Spec.pdf&quot; rel=&quot;nofollow&quot;&gt;manual&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;By default, Roomba communicates at 115200 baud. If you are using a microcontroller that does not support 115200 baud, there are two ways to force Roomba to switch to 19200:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;strong&gt;Method 1:&lt;/strong&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;While powering off Roomba, continue to hold down the Clean/Power button after the light has turned off. After about 10 seconds, Roomba plays a tune of descending pitches. Roomba will communicate at 19200 baud until the processor loses battery power or the baud rate is explicitly changed by way of the OI.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;strong&gt;Method 2:&lt;/strong&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Use the Baud Rate Change pin (pin 5 on the Mini-DIN connector) to change Roomba’s baud rate. After turning on Roomba, wait 2 seconds and then pulse the Baud Rate Change low three times. Each pulse should last between 50 and 500 milliseconds. Roomba will communicate at 19200 baud until the processor loses battery power or the baud rate is explicitly changed by way of the OI. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Did you put it in the 19200 mode? Have you tried 115200?&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-06-23T12:46:36.013" CommentCount="11" ContentLicense="CC BY-SA 3.0" />
  <row Id="10161" PostTypeId="2" ParentId="10154" CreationDate="2016-06-23T14:22:01.470" Score="2" Body="&lt;p&gt;Can you make a written description (comments, text, or block diagram) of what you think the code is supposed to be doing?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't figure out what your whole timer scheme is supposed to do. Here's what happens when you execute it, though (assuming you make it to the main &lt;code&gt;loop&lt;/code&gt; okay):&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;code&gt;void loop() {&lt;/code&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;So here you start a loop. By definition, it loops. &lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;while (zero_timer + 4000 &amp;gt; micros());&lt;br&gt;&#xA;zero_timer = micros();&lt;/code&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Here you set a while loop based on the condition &lt;code&gt;(some starting time + constant) &amp;gt; current time&lt;/code&gt;, but then on &lt;em&gt;the next line&lt;/em&gt; you declare &lt;code&gt;(some starting time) = current time&lt;/code&gt;. So this looks like you're setting up an infinite loop... inside the infinite loop.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;PORTC |= B11110000;&lt;/code&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;You set the four output pins to &lt;code&gt;ON&lt;/code&gt;, but then:&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;channel_timer_1 = receiverinput_channel_3 + zero_timer;&lt;/code&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Here you set &lt;code&gt;channel_time_N&lt;/code&gt; equal to &lt;code&gt;receiverinput_channel_3&lt;/code&gt; (note you do this for all of the channel timers - they're all set equal to channel_3) plus &lt;code&gt;zero_timer&lt;/code&gt;. Zero timer was &lt;em&gt;just set&lt;/em&gt; one line ago equal to the current time. &lt;/li&gt;&#xA;&lt;li&gt;What is &lt;code&gt;receiverinput_channel_3&lt;/code&gt;? Well, it's not initialized, so it's either &lt;em&gt;whatever was in the allocated memory when the function was declared&lt;/em&gt;, or:&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;receiverinput_channel_3 = current_time - channel_timer_3&lt;/code&gt;, which evaluates to whatever the interrupt time step is for the first interrupt.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;receiverinput_channel_3&lt;/code&gt; gets locked in to the interrupt time interval.&lt;/strong&gt; This is because it *only gets updated if &lt;code&gt;channelcount_3&lt;/code&gt; is equal to one. However, when you set the value for &lt;code&gt;receiverinput_channel_3&lt;/code&gt;, you set &lt;code&gt;channelcount_3&lt;/code&gt; equal to zero, meaning that it never gets updated until the interrupt gets called again. At that point, &lt;em&gt;if the other criteria are met&lt;/em&gt;, you set &lt;code&gt;channel_timer_3&lt;/code&gt; equal to &lt;code&gt;current_time&lt;/code&gt; and toggle &lt;code&gt;channelcount_3&lt;/code&gt; again. &lt;/li&gt;&#xA;&lt;li&gt;Now that &lt;code&gt;channelcount_3&lt;/code&gt; has been toggled, &lt;em&gt;on the next interrupt call&lt;/em&gt;, you again define &lt;code&gt;receiverinput_channel_3 = current_time - channel_timer_3&lt;/code&gt;, &lt;strong&gt;but channel_timer_3 was set equal to the current_time on the previous interrupt, so receiverinput_channel_3 is always equal to the interrupt interval.&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;So now, realizing that &lt;code&gt;channel_timer_1&lt;/code&gt; is set to the almost-current time (zero_timer) plus the interrupt interval (now + a very small value), we continue:&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;while (PORTC &amp;gt;= 16) {&lt;/code&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Okay, start a loop to basically pause execution until all of the timers expire, BUT:&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;esc_looptimer = micros();&lt;/code&gt; &#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Set another constant equal to the now-current time, and THEN:&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;if (esc_looptimer &amp;gt;= channel_timer_1)PORTC &amp;amp;= B11101111;&lt;/code&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;As soon as the current time (as continuously defined by &lt;code&gt;esc_looptimer&lt;/code&gt;) is greater than the start time outside this inner loop (&lt;code&gt;zero_time&lt;/code&gt;) plus the &lt;em&gt;interrupt interval&lt;/em&gt;, (&lt;code&gt;channel_timer_1&lt;/code&gt; as defined above), you turn the output pin off. &lt;/li&gt;&#xA;&lt;li&gt;If you manage to hit the timing such that you invoke an interrupt before you hit the &lt;code&gt;esc_looptimer &amp;gt;= channel_timer_1&lt;/code&gt; criteria for turning the output, then you set &lt;code&gt;channel_timer_1 = current_time&lt;/code&gt;, meaning that &lt;strong&gt;on the next loop iteration&lt;/strong&gt;, you declare &lt;code&gt;esc_looptimer = (current time)&lt;/code&gt; and then you meet the criteria and immediately turn the output off. &lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;So, the tl;dr version of this is that you are turning your ESCs on then immediately back off, probably before the ESCs get a chance to evaluate the timing on the motors.&lt;/strong&gt; Depending on the BLDC motors you're using, they may not have shaft position encoders (&quot;sensorless&quot; BLDC), &lt;a href=&quot;http://www.digikey.com/en/articles/techzone/2013/mar/an-introduction-to-brushless-dc-motor-control&quot; rel=&quot;nofollow&quot;&gt;meaning that&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&quot;A stationary motor generates no back EMF, &lt;strong&gt;making it impossible for the microcontroller to determine the position of the motor parts at start-up.&lt;/strong&gt; The solution is to start the motor in an open loop configuration until sufficient EMF is generated for the microcontroller to take over motor supervision. These so-called “sensorless” BLDC motors are gaining in popularity. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So you turn the ESC on, then before it has a chance to start the motor to the point it has adequate control, you turn the ESC back off again. Once all the ESCs are off you turn them back on then immediately back off again. This process repeats. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;With a BLDC motor, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Commutator_(electric)&quot; rel=&quot;nofollow&quot;&gt;commutator&lt;/a&gt; is removed. The commutator was what had previously provided the electrical current to the correct coils at the right time. Instead, a BLDC motor relies on electronic commutation, meaning you have to &lt;em&gt;sequence the coils in the correct order, &lt;strong&gt;at the correct time&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you turn the ESC on and then off again before it has a chance to determine the correct timing for energizing the coil then you would get erratic behavior from the motors because they're not being controlled properly. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I really have no idea what your whole interrupt sequence is supposed to be doing, but I can pretty much guarantee it's not doing what you intended. If you just want the motor to be on for some period of time, then my suggestion would be to hard-code that run time as a constant and wait for it to elapse. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As @Jakob mentioned, the code is made more difficult to read because you're trying to control all four ESCs at once. Try getting one to work as desired first, then try to encapsulate the code for that into a function, then invoke that function for each ESC you want to run.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a final note, I'd say that I'm dubious as to what the output of &lt;code&gt;PINB &amp;amp; B00000100&lt;/code&gt; and similar lines would evaluate to: true or false? I thought PINB was one pin - how do you AND one pin with 8? What is the output of that function?. Also, you don't appear to really initialize anything equal to zero. This means that you're stuck with whatever is in the allocated memory when the program starts - if this isn't a 1 or a 0 in your &lt;code&gt;channelcount_N&lt;/code&gt; variables, then your code never does anything.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you revamp the code and it still doesn't work, &lt;em&gt;please post a wiring diagram&lt;/em&gt; showing how everything is connected. But again, as it stands I don't think your code is doing what you think it's doing.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-06-23T14:22:01.470" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10162" PostTypeId="2" ParentId="2704" CreationDate="2016-06-23T15:14:40.573" Score="1" Body="&lt;p&gt;Great question!  And, yes props develop acceleration, but neglecting friction does not mean speed is infinite, because the thrust from the prop is a function of the angle of attack which changes as speed increases.  At some angle, with maximum power applied, lift=weight and forward thrust=drag.  It's not a simple problem to solve.  At the prop tip the effective airspeed in hover is r*w (radius of prop x angular velodicy in radians/sec (RPM/10)).  In forward, tilted flight, the effective airspeed at the prop tip is the sum of the propeller speed vector, plus the relative movement of the quad at the forward tilt angle.  My point is, this is a VERY VERY complex problem to solve.  You can do it but you need to be very strong in math, geometry and maybe even calculus and Excel.  I've done calculations like this using the Iterate feature in Excel.  I broke the problem down into tiny pieces (small sections of the prop) and solved the aerodynamics for each little piece of the prop, and then added them all up for the total effect.  LOTS of work.  Best bet is probably to survey some data from quad racers in online forums and make some educated guesses from that.  Good Luck.  (BTW, I found this thread because I'm looking for exactly the same answer).  But I'm looking for it so that I can understand the difference in lift on the advancing blade versus the retreating blade.  The advancing blade sees a higher airspeed, but it also has a smaller angle of attack because the airframe is tilted forward.  Do these two effects cancel each other out?.&lt;/p&gt;&#xA;" OwnerUserId="14059" LastActivityDate="2016-06-23T15:14:40.573" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10163" PostTypeId="2" ParentId="5031" CreationDate="2016-06-24T08:38:31.990" Score="0" Body="&lt;p&gt;I think this should be possible. You could still run nc on the pi side, and use a socket connection in your java application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One important aspect is the encoding of the stream. It would probably be easiest to use mjpeg here. Mjpeg is just a concatenation of single jpeg images, and decoding jpegs is much easier than h.264 (the other alternative in the raspivid as far as I recall).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The server could e.g. be&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;raspivid -t 0 -w 300 -h 300 -hf -fps 20 -codec MJPEG -o - | nc -l 4000&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;On the client side you could look for example at this &lt;a href=&quot;https://github.com/gskjold/mjpeg-viewer&quot; rel=&quot;nofollow&quot;&gt;mjpeg-viewer&lt;/a&gt; to get you started.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The support for MJPEG in the raspivid seems to be recent. I don't know if this will work.&lt;/p&gt;&#xA;" OwnerUserId="127" LastEditorUserId="127" LastEditDate="2016-06-24T08:52:16.967" LastActivityDate="2016-06-24T08:52:16.967" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10164" PostTypeId="2" ParentId="10132" CreationDate="2016-06-24T12:23:16.810" Score="0" Body="&lt;p&gt;There probably are boards that can handle 5 motors, but one of them is probably going to cost more than 5 of the boards you have identified.  Also when you blow a component on the big board you loose all 5 motors.  I don't know what your current requirements are but there may be smaller and cheaper boards that would do the job. (&lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/B0166QZ5HO&quot; rel=&quot;nofollow&quot; title=&quot;Motor driver&quot;&gt;Other driver??&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my opinion you would be better using multiple simple boards, it will make your code easier, your layout easier and leave you room to expand more easily.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would mount your drivers on a single piece of strip board using Pins and Sockets and then bring all the connections out to an edge and use a 'ribbon cable' to hook it up to your UNO.&lt;/p&gt;&#xA;" OwnerUserId="10717" LastActivityDate="2016-06-24T12:23:16.810" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10166" PostTypeId="2" ParentId="2704" CreationDate="2016-06-24T17:50:40.337" Score="0" Body="&lt;p&gt;Well if i understand you question which im not sure if i do your asking how to make the copter move and the answer to that is lower the power slightly on the direction you want to move sorry for being unhelpful&lt;/p&gt;&#xA;" OwnerUserId="14066" LastActivityDate="2016-06-24T17:50:40.337" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10168" PostTypeId="2" ParentId="2731" CreationDate="2016-06-24T22:02:28.270" Score="1" Body="&lt;p&gt;In the probabilistic approaches that you mentioned, specifically Monte Carlo Localization (MCL), the prediction step is made based on state (pose) information and measurements. MCL relies on the Markov Assumption, which is the assumption that at each time step, the knowledge of previous time steps contains no more information than knowledge of the current state. Motion and measurement models use the state and measurement information to make the prediction; these models are similar, if not the same, as those used in simulations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To answer your question, using a full-blown simulation environment is a very slow way of predicting the state because the underlying models are the same (motion models include the dynamics, and measurement models include sensor noise), but the computation time needed to simulate the system is greater when using the simulator. In short, nothing new is gained by using a simulation environment, and it takes longer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Probabilistic Robotics&lt;/em&gt; by Sebastian Thrun gives this material very good treatment.&lt;/p&gt;&#xA;" OwnerUserId="9585" LastActivityDate="2016-06-24T22:02:28.270" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10169" PostTypeId="1" CreationDate="2016-06-25T10:50:54.470" Score="3" ViewCount="2485" Body="&lt;p&gt;It is helpful in robotics to first learn about &quot;Linux kernel development&quot; or &quot;device driver development in Linux&quot; before I start learning ROS? I know C and JAVA! In brief, I want to know any prerequisites which are essential to understand ROS better.&lt;/p&gt;&#xA;" OwnerUserId="14072" LastActivityDate="2017-01-17T16:10:37.063" Title="What are the prerequisites for learning ROS?" Tags="&lt;ros&gt;&lt;linux&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="10170" PostTypeId="2" ParentId="10169" CreationDate="2016-06-25T14:10:22.910" Score="4" Body="&lt;p&gt;It sounds like you're excited to learn &lt;strong&gt;ROS&lt;/strong&gt;. The best way to learn ROS well is to dive in and learn any necessary bits along the way. Once you finish going through EVERYTHING in the &lt;a href=&quot;http://wiki.ros.org/ROS/Tutorials&quot; rel=&quot;nofollow noreferrer&quot;&gt;ROS tutorials&lt;/a&gt; you can tinker with a project like &lt;a href=&quot;http://www.turtlebot.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;turtlebot&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Last but not least there is &lt;a href=&quot;http://answers.ros.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://answers.ros.org/&lt;/a&gt; for any ROS related questions you may have.&lt;/p&gt;&#xA;&lt;h1&gt;Enjoy!&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I took the route I suggested and it took me a while to learn some VERY helpful things so I want to point those out as well.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Electric, Fuerte, Groovy, Hydro, Indigo, Jade, Kinetic are all different versions of ROS from oldest (Electric) to newest (Kinetic). I personally use Hydro/Indigo because they have the most/best support in communities.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;catkin&lt;/code&gt; is a type of ROS friendly workspace. You can build ROS in a workspace (required by some devices/distros) or you can simply do a desktop or full install of ROS.&lt;/li&gt;&#xA;&lt;li&gt;You can learn to build &lt;code&gt;URDF&lt;/code&gt; models from the tutorials. You can use URDF models as robots in &lt;code&gt;Gazebo&lt;/code&gt; (mentioned by @NBCKLY). Use this to debug your robot as you can see where it thinks it is and what it thinks it is doing. You can also try throwing parts on, like a laser scanner, to see if that will help your invention.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="9941" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2017-01-17T16:10:37.063" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10172" PostTypeId="1" AcceptedAnswerId="10176" CreationDate="2016-06-25T14:27:24.897" Score="1" ViewCount="1160" Body="&lt;p&gt;I'm using a basic trig/echo &lt;strong&gt;Ultrasonic Sensor&lt;/strong&gt; with an &lt;strong&gt;Arduino Uno&lt;/strong&gt;. I get accurate readings until I &lt;em&gt;cover the sensor&lt;/em&gt; at which point I receive very large numbers. Why is this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Program&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;int trigPin = 8;&#xA;int echoPin = 9;&#xA;float pingTime;&#xA;float targetDistance;&#xA;const float speedOfSound = 776.5; // mph&#xA;&#xA;void setup() {&#xA;  Serial.begin(9600);&#xA;&#xA;  pinMode(trigPin, OUTPUT);&#xA;  pinMode(echoPin, INPUT);&#xA;&#xA;}&#xA;&#xA;void loop() {&#xA;  digitalWrite(trigPin, LOW);&#xA;  delayMicroseconds(2000);&#xA;  digitalWrite(trigPin, HIGH);&#xA;  delayMicroseconds(15);&#xA;  digitalWrite(trigPin, LOW);&#xA;  delayMicroseconds(10);&#xA;&#xA;  pingTime = pulseIn(echoPin, HIGH);&#xA;  pingTime /= 1000000; // microseconds to seconds&#xA;  pingTime /= 3600; // hours&#xA;  targetDistance = speedOfSound * pingTime; // miles&#xA;  targetDistance /= 2; // to from target (averaging distance)&#xA;  targetDistance *= 63360; // miles to inches&#xA;&#xA;  Serial.print(&quot;distance: &quot;);&#xA;  Serial.print(targetDistance);&#xA;  Serial.println(&quot;&quot;);&#xA;&#xA;  delay(100);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Example Output&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I moved my hand from 10&quot; away until I cover the sensor&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;10.20 distance: // my hand is 10&quot; away from the sensor&#xA;10.01 distance:&#xA;9.51 distance:&#xA;8.71 distance:&#xA;7.85 distance:&#xA;6.90 distance:&#xA;5.20 distance:&#xA;4.76 distance:&#xA;3.44 distance:&#xA;2.97 distance:&#xA;1.65 distance:&#xA;1211.92 distance: // my hand is now pressed up against the sensor&#xA;1225.39 distance:&#xA;1197.16 distance:&#xA;1207.43 distance:&#xA;1212.66 distance:&#xA;1204.60 distance:&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;h1&gt;EDIT&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;I changed the amounts from &lt;code&gt;inches&lt;/code&gt; to &lt;code&gt;milimeters&lt;/code&gt; to get a more precise reading. I held the sensor ~100mm from a granite counter-top and quickly lowered it until the tabletop covered the front of the sensor.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;distance: 103.27 // 100mm from tabletop&#xA;distance: 96.50&#xA;distance: 79.84&#xA;distance: 76.72&#xA;distance: 62.66&#xA;distance: 65.78&#xA;distance: 54.85&#xA;distance: 47.04&#xA;distance: 44.95&#xA;distance: 38.71&#xA;distance: 28.81&#xA;distance: 25.69&#xA;distance: 27.08&#xA;distance: 25.17&#xA;distance: 27.77&#xA;distance: 22.04 // sensor continues toward table but values start to increase when they would logically decrease ??&#xA;distance: 23.95&#xA;distance: 26.73&#xA;distance: 28.81&#xA;distance: 46.52&#xA;distance: 2292.85 // sensor is now flush against tabletop&#xA;distance: 2579.59&#xA;distance: 2608.75&#xA;distance: 2595.56&#xA;distance: 2591.57&#xA;distance: 2583.75&#xA;distance: 2569.87&#xA;distance: 2570.91&#xA;distance: 2600.07&#xA;distance: 30579.64 // extreme high &amp;amp; low values with sensor is same place against tabletop&#xA;distance: 37.66&#xA;distance: 30444.43&#xA;distance: 37.66&#xA;distance: 30674.23&#xA;distance: 38.71&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="9941" LastEditorUserId="9941" LastEditDate="2016-06-26T14:47:36.553" LastActivityDate="2016-06-26T14:47:36.553" Title="Covering Up Ultrasonic Sensor" Tags="&lt;arduino&gt;&lt;ultrasonic-sensors&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="10173" PostTypeId="2" ParentId="10060" CreationDate="2016-06-25T14:49:24.597" Score="2" Body="&lt;p&gt;Thanks for the suggestions guys. I'll consider your suggestions and give an update once I have chosen a motor.&lt;/p&gt;&#xA;" OwnerUserId="13936" LastActivityDate="2016-06-25T14:49:24.597" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10174" PostTypeId="2" ParentId="10169" CreationDate="2016-06-25T15:51:52.807" Score="2" Body="&lt;p&gt;To learn and use ROS, you do not need to know anything about Linux kernel development, and at first, you shouldn't need to worry about writing drivers. All you need to know is how to use a command line environment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Like Jacksonkr said, the Turtlebot tutorials are pretty good. In addition, using Gazebo, you can simulate the robot without needing to have one physically, which is fantastic. Once you learn the basics, you can simulate and implement solutions to a huge number of robotics problems like SLAM.&lt;/p&gt;&#xA;" OwnerUserId="9585" LastActivityDate="2016-06-25T15:51:52.807" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10175" PostTypeId="2" ParentId="10172" CreationDate="2016-06-25T16:18:51.113" Score="-1" Body="&lt;p&gt;You should consider building a measurement model for your sensor--this will enable you to use your measurements in an effective probabilistic manner. The problem is that beam sensors are noisy, ultrasonic sensors especially so; furthermore, this sensor noise is not typically uniformly distributed. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sebastian Thrun covers this topic quite well in Chapter 6 of &lt;em&gt;Probabilistic Robotics,&lt;/em&gt; in fact, he considers an ultrasonic sensor explicitly. Thrun suggests that the probability distribution of measurements is combination of four different distributions characterized by beam sensor response.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Z2QQl.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Z2QQl.png&quot; alt=&quot;Beam Sensor Model&quot;&gt;&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The image above shows the four distributions and is taken from Thrun's text. The upper left is a Gaussian distribution centered on the ground truth distance. The upper right is a truncated exponentially decaying distribution for measurements that are too close to the sensor. The bottom graphs depict the uniform noise of the sensor and the max value measurement. These four distributions are combined and normalized to give a single measurement model; to do this properly, you need to build a model for every distance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are two takeaway points:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Ultrasonic sensors are noisy/not accurate, so you probably aren't doing anything wrong; it looks like you found the minimum sensing distance of the sensor&lt;/li&gt;&#xA;&lt;li&gt;You need measurement models to inform your predictions about the robot's pose, which is important for things like control and navigation&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="9585" LastActivityDate="2016-06-25T16:18:51.113" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10176" PostTypeId="2" ParentId="10172" CreationDate="2016-06-25T16:26:44.440" Score="1" Body="&lt;p&gt;You said it yourself: you're using an echo-based ultrasonic sensor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Imagine this: you are a sensor looking at a piece of fiber optic cable. From far enough away, you see the cable as an &lt;em&gt;object&lt;/em&gt;. You can determine how far away it is because you are looking &lt;em&gt;at&lt;/em&gt; it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The cable gets closer and you continue looking &lt;em&gt;at the object&lt;/em&gt; until, at some point, it becomes &lt;em&gt;coupled&lt;/em&gt; to you and you now begin to look &lt;em&gt;through&lt;/em&gt; the cable. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would imagine the same thing is happening with your hand. In time of flight sensors there's usually some &quot;turn on&quot; time that delays turning on the receiver to prevent the transmitter from directly driving the receiver. This turn on time corresponds with some minimum distance, inside which an object cannot be detected. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;At your skin there is an &lt;em&gt;interface&lt;/em&gt;, where some of the sound is reflected &lt;em&gt;and some of the sound is absorbed&lt;/em&gt;. This is like a window or a two-way mirror. Depending on some properties (acoustic impedance mismatch), the percentage of sound energy that gets absorbed varies, but some always gets absorbed. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, your hand gets closer, and the sensor sees your hand as an object. At some point you pass the minimum threshold, and the sensor no longer detects the reflection at the air/skin interface. It still listens for an echo, though, but now all the remaining sound energy is &lt;em&gt;inside you&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You are now akin to a (crappy) fiber optic cable - the sound is free to bounce around inside you, reflecting off of whatever doesn't have the same acoustic impedance as your skin. Every time it hits an interface (skin/muscle, muscle/bone, etc.), some energy is absorbed and some is reflected. This is exactly how a medical ultrasound works. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;At some point the sound waves scatter back to the point where they entered, and pass back through your skin and that's when the echo is recorded. The scattered path length is the distance you are seeing. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would bet the value would change based on what part of your arm you use (not that I would recommend doing it).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also,  FYI, ultrasound jelly exists to help match acoustic impedances to minimize reflection and get more sound energy into the body. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-06-25T16:26:44.440" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="10178" PostTypeId="1" AcceptedAnswerId="10179" CreationDate="2016-06-25T23:06:34.823" Score="1" ViewCount="57" Body="&lt;p&gt;I'm working on a project where I'm using a voltage that is higher than what most microcontrollers can handle. I'm looking for a kind of switch that will connect a power source to an electromagnet and all of this controlled by my microcontroller. I also thought about using a potentiometer to control the speed of two high voltage DC motors via my microcontroller so please tell me if this is a good idea aswell. &lt;br /&gt;&#xA;Thanks for your time&#xA;&lt;br /&gt;&#xA;Zakary&lt;/p&gt;&#xA;" OwnerUserId="14078" LastActivityDate="2016-06-27T18:27:55.177" Title="Switch activated by a microcontroller" Tags="&lt;arduino&gt;&lt;microcontroller&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10179" PostTypeId="2" ParentId="10178" CreationDate="2016-06-26T03:20:09.877" Score="2" Body="&lt;p&gt;You can use a relay for the switch. Relays typically have 4 pins: 2 are the switch, and the other 2 control the switch. For reed relays, the switch is a small metal reed (normally closed) that makes contact when an internal electromagnetic coil is powered. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You have to pick the right relay so that your microcontroller can supply sufficient current to controlling pins of the relay. You also need to make sure that the switch of the relay can handle the current flowing from your power source to the electromagnet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the motors, consider getting a separate motor control board, which will isolate your microcontroller from the motors and allow you to control their velocity with PWM--you can then use the potentiometer to set the specific PWM duty cycle to control the motors.&lt;/p&gt;&#xA;" OwnerUserId="9585" LastActivityDate="2016-06-26T03:20:09.877" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10181" PostTypeId="2" ParentId="10130" CreationDate="2016-06-26T07:59:58.267" Score="0" Body="&lt;p&gt;You could use a micro-switch if you're looking for touch sensing rather than proximity. Check this link out for more info (Its an example):&#xA;&lt;a href=&quot;https://www.arduino.cc/en/tutorial/switch&quot; rel=&quot;nofollow&quot;&gt;https://www.arduino.cc/en/tutorial/switch&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The advantage (and disadvantage) of this switch is that it requires very little force to activate. Which also means that application of large force can cause the switch to get stuck or break. But with the description of the problem you've provided, I think this will help you out.&lt;/p&gt;&#xA;" OwnerUserId="13967" LastActivityDate="2016-06-26T07:59:58.267" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10182" PostTypeId="2" ParentId="1949" CreationDate="2016-06-26T10:06:22.547" Score="3" Body="&lt;p&gt;Just to add up on this, using odometry to estimate the robot position &lt;strong&gt;is much faster&lt;/strong&gt; than using data from a laser scanner. In most situations, data from a range scanner is handled as a 2D PointCloud. This means that in order to estimate the relative pose between positions A, B you need to align their corresponding PointClouds and find the most probable pose of that alignment operation. To do that you would use &lt;a href=&quot;https://en.wikipedia.org/wiki/Iterative_closest_point&quot; rel=&quot;nofollow&quot;&gt;ICP&lt;/a&gt; or a similar algorithm, which due to its iterating nature is computationally intensive. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, using odometry information (e.g. from the wheel encoders) you just need to add up to the current estimation of your pose which is just the sum of two Probability density functions (current estimation + incremental odometry reading)&lt;/p&gt;&#xA;" OwnerUserId="10729" LastActivityDate="2016-06-26T10:06:22.547" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10183" PostTypeId="2" ParentId="6900" CreationDate="2016-06-26T11:28:17.807" Score="2" Body="&lt;p&gt;I had the same problem with the &quot;Ultimate 4tronix Initio 4WD Robot Kit&quot; - the motors make some noise, but do not start moving. I tried using 8 batteries instead of 6 (for higher voltage on the motor), that helped for one motor assembly, but did not work for the other. I disassembled the gear box, and found that several of the gears had small plastic bumps remaining from injection molding. Those bumps were on horizontal parts of the gears, and some - between teeth of the gear. Here is a photo of one of them. &lt;a href=&quot;https://i.stack.imgur.com/shI9l.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/shI9l.jpg&quot; alt=&quot;Plastic gear with traces of injection molding&quot;&gt;&lt;/a&gt; Plastic forks that are used to switch rotors off from the motor also have a ridge in the middle, and I think it is high enough to touch the teeth of the gear. &lt;a href=&quot;https://i.stack.imgur.com/UeV5v.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/UeV5v.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Below is the photo of the gear box immediately after I opened it - white paste is some kind of lubricant. &lt;a href=&quot;https://i.stack.imgur.com/y7Pdm.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/y7Pdm.jpg&quot; alt=&quot;Gear box after disassembly&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then I increased the number of batteries to 10, and was able to get consistent rotation from one of the gear boxes at speeds of 30% to 100% - in the air, without wheels attached. The other gear box behaves much worse - sometimes manages to start up, sometimes not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After spending few more evenings on the gear boxes, I was able to make them start consistently at speeds of 50% to 100%. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are the steps if you want to try this on your gear boxes:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Disconnect motors from any power supply.&lt;/li&gt;&#xA;&lt;li&gt;Unscrew gear box from the chassis.&lt;/li&gt;&#xA;&lt;li&gt;Unscrew 2 screws of the rotational encoder, detach it.&lt;/li&gt;&#xA;&lt;li&gt;Unscrew 6 screws that hold the gear box case. Remove the gear box cap.&lt;/li&gt;&#xA;&lt;li&gt;Take a photo or remember where each gear sits, and which side of the gear is up.&lt;/li&gt;&#xA;&lt;li&gt;Carefully remove plastic gears and metal axles. Remember which axle was coming from where, as they are of different lengths. They will be in a greasy lubricant.&lt;/li&gt;&#xA;&lt;li&gt;Unscrew 3 screws of the hood that protects the motor. Take a photo or remember which side the wires are pointing to. &lt;/li&gt;&#xA;&lt;li&gt;Pull the motor from the gear box.&lt;/li&gt;&#xA;&lt;li&gt;There may be some lubricant on the gear attached to the motor - wipe it with a cloth or tissue paper. Do not wash motor in water.&lt;/li&gt;&#xA;&lt;li&gt;Wash gear box case, metal axes and gears in warm water with soap or kitchen washing up liquid. The goal is to get rid of the lubricant - it is not necessary, as the friction of plastic to plastic and plastic to metal is very small for the materials used in this gear box.&lt;/li&gt;&#xA;&lt;li&gt;Wipe the gears and gear box case with tissue paper until they are dry. Make sure not to leave any paper on the gears.&lt;/li&gt;&#xA;&lt;li&gt;Match gears with holes to the corresponding metal axles, try to rotate them - they should turn without significant friction. If there is some friction, use a thin round metal file to slightly increase the diameter of the hole in the gear. After using the file, make sure to wash the gear, so that small pieces of plastic do not go to the gear box.&lt;/li&gt;&#xA;&lt;li&gt;Find a small plastic tube, like from LEGO Technic (see  Figure 2 below). Cut it a bit, so that it can be used as a support for the small gear with hole (See Figure 3 below).&lt;/li&gt;&#xA;&lt;li&gt;Inspect each gear, and remove any bumps on the horizontal sides with a file.&lt;/li&gt;&#xA;&lt;li&gt;Pay special attention to the sides of the gears marked by red arrows on Figure 5 below. Those sides should be filed so that a small chamfer is formed. It should not be a proper 45 degrees chamfer, you just need to remove a bit of material to make sure the teeth are not touching another gear.&lt;/li&gt;&#xA;&lt;li&gt;Wash the gears after polishing, so that the dust does not go to the gear box.&lt;/li&gt;&#xA;&lt;li&gt;Assemble the gear box without motor, try to turn one of the side axles. The rotation should be smooth, none of the gears should wobble or jump. If they do, or if you feel any obstruction on one of the angles, find the offending gear and polish it more.&lt;/li&gt;&#xA;&lt;li&gt;Cut the legs of the black plastic forks, as they are not needed and can prevent gears from folling (see Figure 4 below).&lt;/li&gt;&#xA;&lt;li&gt;Assemble the gear box back, screw in 6 screws. &lt;/li&gt;&#xA;&lt;li&gt;Make sure the axles still can be turned without significant friction.&lt;/li&gt;&#xA;&lt;li&gt;Looks into the motor holder place, note two bumps inside. There are corresponding holes on the motor, orient it accordingly, check the location of wire, and insert the motor.&lt;/li&gt;&#xA;&lt;li&gt;Attach the motor hood. &lt;/li&gt;&#xA;&lt;li&gt;Check that the motor is turning at reasonable levels of speed (pulse-width modulation).&lt;/li&gt;&#xA;&lt;li&gt;Attach the encoder and check the motor again. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/kbnQt.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kbnQt.jpg&quot; alt=&quot;Polishing the gears&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The gear boxes are very noisy when they manage to start rotating. &lt;/p&gt;&#xA;" OwnerUserId="14084" LastEditorUserId="14084" LastEditDate="2016-06-29T21:47:12.093" LastActivityDate="2016-06-29T21:47:12.093" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10184" PostTypeId="2" ParentId="10178" CreationDate="2016-06-26T14:44:31.957" Score="0" Body="&lt;p&gt;You can connect your switch to a comparator, such as the LM339, and wire its output to the microprocessor input pin.   It has open collector outputs, so you can pull the outputs up to whatever voltage level your micro can handle.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastEditorUserId="11125" LastEditDate="2016-06-27T18:27:55.177" LastActivityDate="2016-06-27T18:27:55.177" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10187" PostTypeId="1" AcceptedAnswerId="10189" CreationDate="2016-06-27T12:31:27.337" Score="2" ViewCount="133" Body="&lt;p&gt;I was wondering either there is any special naming for regulators that:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Outputs unit is the same as inputs, ie. velocity [m/s] as input and velocity as output [m/s].&lt;/li&gt;&#xA;&lt;li&gt;Outputs unit is different than inputs, ie. position as input [m], velocity as output [/m/s]&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I would appreciate all help.&lt;/p&gt;&#xA;" OwnerUserId="14090" LastActivityDate="2016-06-27T18:55:34.350" Title="Proper naming of PID regulators" Tags="&lt;pid&gt;" AnswerCount="2" CommentCount="5" ClosedDate="2016-07-19T08:53:10.347" ContentLicense="CC BY-SA 3.0" />
  <row Id="10188" PostTypeId="2" ParentId="10187" CreationDate="2016-06-27T17:17:37.087" Score="2" Body="&lt;p&gt;I name them by the controlled parameter(s), such as &lt;em&gt;velocity controller&lt;/em&gt; or &lt;em&gt;position controller&lt;/em&gt;.   For clarity it is sometimes helpful to include the feedback variable(s):  &lt;em&gt;velocity controller with position feedback&lt;/em&gt;. I am not aware of any notational standards.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastEditorUserId="11125" LastEditDate="2016-06-27T18:08:42.913" LastActivityDate="2016-06-27T18:08:42.913" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="10189" PostTypeId="2" ParentId="10187" CreationDate="2016-06-27T18:55:34.350" Score="2" Body="&lt;p&gt;What exactly do you mean? The units at what point in the control loop? You can't exactly have a speed reference input to a PID controller and use a &lt;em&gt;position&lt;/em&gt; feedback. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similarly, if you're just looking strictly at the inputs and outputs of the PID block itself, then the units are &lt;em&gt;always&lt;/em&gt; different. That is, for a speed controller, you have:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;(P)roportional gain output: [Speed ref] - [Speed fbk]  (Units of &lt;strong&gt;dist/time&lt;/strong&gt;)&lt;/li&gt;&#xA;&lt;li&gt;(I)ntegral gain output: [Pos ref] - [Pos fbk]  (Units of &#xA;&lt;strong&gt;dist&lt;/strong&gt;)&lt;/li&gt;&#xA;&lt;li&gt;(D)erivative gain output: [Accel ref] - [Accel fbk]  (Units of &lt;strong&gt;dist/time^2&lt;/strong&gt;)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So, where the input of a PID controller are a particular unit, the I/D aspects of the PID controller &lt;em&gt;require&lt;/em&gt; the output units to always be different. This is typically just the &quot;control signal&quot; and inputs to whatever the plant is. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Again I'll ask, what are the inputs and outputs you are considering? In and out of the PID block, or input/output as in the reference and feedback?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you mean reference and feedback (inputs and outputs to the entire control system), then generally you have:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;SISO - &lt;strong&gt;S&lt;/strong&gt;ingle &lt;strong&gt;I&lt;/strong&gt;nput &lt;strong&gt;S&lt;/strong&gt;ingle &lt;strong&gt;O&lt;/strong&gt;utput, meaning that there is one input and one output. These outputs should be the same units to make any sense. &lt;/li&gt;&#xA;&lt;li&gt;MIMO - &lt;strong&gt;M&lt;/strong&gt;ultiple &lt;strong&gt;I&lt;/strong&gt;nput &lt;strong&gt;M&lt;/strong&gt;ultiple &lt;strong&gt;O&lt;/strong&gt;utput, meaning that there are multiple inputs and multiple outputs. This is generally some state feedback or LQR controller, and here the units can be mixed as you're trying to control the &lt;em&gt;system&lt;/em&gt; instead of a particular &lt;em&gt;parameter&lt;/em&gt;. &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Consider any scenario when you might want to try using a feedback in units other than the reference units. What then are you trying to do? For instance, why would you want to use acceleration as a feedback for a speed reference? Maybe you want to control min/max acceleration &lt;em&gt;while you try to achieve a particular speed&lt;/em&gt;, or you want to control speed &lt;em&gt;while you try to achieve a particular position&lt;/em&gt;, but I'll point out that in these scenarios you are trying to control &lt;strong&gt;two&lt;/strong&gt; parameters (speed and position, speed and acceleration, etc.), and thus it's a MIMO system (Multiple input - speed ref and [X] limits, multiple output - speed and [X]). &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-06-27T18:55:34.350" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="10190" PostTypeId="1" CreationDate="2016-06-27T19:03:10.033" Score="0" ViewCount="58" Body="&lt;p&gt;So I was thinking about projectiles that don't need a propellant like gunpowder I've seen coils gun but that's a little out my way. I was wondering if I know the force required to propel a object could I program a robot to exert that force to propel the object the same way (in a linear propelled fashion).&lt;/p&gt;&#xA;" OwnerUserId="14091" LastActivityDate="2016-06-27T19:19:58.117" Title="Can a robot or mechanical part be programmed to exert a specific force" Tags="&lt;force-sensor&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10191" PostTypeId="2" ParentId="10190" CreationDate="2016-06-27T19:19:58.117" Score="1" Body="&lt;p&gt;Yes you can. People built &lt;a href=&quot;https://en.m.wikipedia.org/wiki/Trebuchet&quot; rel=&quot;nofollow&quot;&gt;robots doing exactly that&lt;/a&gt; for several hundred years.&lt;/p&gt;&#xA;" OwnerUserId="9860" LastActivityDate="2016-06-27T19:19:58.117" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="10192" PostTypeId="1" AcceptedAnswerId="10198" CreationDate="2016-06-28T02:46:35.597" Score="2" ViewCount="215" Body="&lt;p&gt;I have never yet had the Create2's incremental encoder rollover but want to write my code to be prepared for this to happen and test it. When the encoder rolls past 32767 (14.5m), does it rollover to -32768 and count there or start at 0 again and count up from there?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One other odd thing but not a big deal. When I reset the Create2, the first value is 1 not 0. &lt;/p&gt;&#xA;" OwnerUserId="14093" LastEditorUserId="14093" LastEditDate="2016-06-28T18:18:50.477" LastActivityDate="2016-06-28T19:19:09.433" Title="Create2 incremental encoder rollover method" Tags="&lt;irobot-create&gt;&lt;roomba&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10194" PostTypeId="2" ParentId="8296" CreationDate="2016-06-28T11:59:16.403" Score="4" Body="&lt;p&gt;The MATLAB tutorial doesnt cover this aspect well about when you have matlab  and gazebo  running on the same linux  machine with no virtual box.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Change your linux ethernet interface ip address statically  using:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sudo ifconfig eth0   192.168.1.1 netmask 255.255.255.0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;assign to ros master the same ip address using: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;export ROS_MASTER_URI=http://192.168.1.1:11311 &amp;gt;&amp;gt; ~/.bashrc&#xA;export ROS_HOSTNAME=192.168.1.1 &amp;gt;&amp;gt; ~/.bashrc&#xA;export ROS_IP=192.168.1.1 &amp;gt;&amp;gt; ~/.bashrc&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;assign to  matlab ros, an  ip address in same subnet as the master above using :&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;setenv('ROS_IP','192.168.1.100:11311')&#xA;setenv('ROS_IP','192.168.1.100')&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;start rosmaster in terminal using : &lt;code&gt;roscore&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;start gazebo model in terminal&lt;/p&gt;&#xA;&#xA;&lt;p&gt;connect to rosmaster ip adress in MATLAB using: &lt;code&gt;rosinit('192.168.1.1:11311')&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now you should see gazebo and ros topics in matlab command window&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can also follow the matlab tutorial to see how much more you can do&lt;/p&gt;&#xA;" OwnerUserId="14100" LastEditorUserId="9720" LastEditDate="2016-06-28T12:39:24.743" LastActivityDate="2016-06-28T12:39:24.743" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10196" PostTypeId="1" CreationDate="2016-06-28T16:16:06.457" Score="2" ViewCount="713" Body="&lt;p&gt;I am trying to control my F450 dji quadcopter using a PID controller. From my IMU, I am getting the quaternions, then I convert them to Euler's angles, this is causing me to have the Gimbal lock issue. However, is there a way that I directly use the quaternions to generate my control commands without converting them to Euler's angle?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This conversation &lt;a href=&quot;https://robotics.stackexchange.com/questions/3137/how-to-use-quaternions-to-feed-a-pid-quadcopter-stabilization-loop/4483#4483?newreg=e2857a59984a4df59536d648f360dec1&quot;&gt;here&lt;/a&gt; discusses a similar issue but without mentioning a clear answer for my problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The three errors so far I am trying to drive to 0 are:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;double errorAlpha  = rollMaster  - rollSlave;&#xA;double errorTheta  = pitchMaster - pitchSlave;&#xA;double errorPsi    = yawMaster   - yawSlave;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where the Master generates the desired rotation and the Slave is the IMU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;UPDATE:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are some pieces of my code:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Getting the current and the reference quaternions for bot the Master and the Slave from the &lt;strong&gt;ROTATION_VECTOR&lt;/strong&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/** Master's current quaternion */&#xA;double x   = measurements.get(1);&#xA;double y   = measurements.get(2);&#xA;double z   = measurements.get(3);&#xA;double w   = measurements.get(4);&#xA;&#xA;/** Slave's current quaternion */&#xA;double xS  = measurements.get(5);&#xA;double yS  = measurements.get(6);&#xA;double zS  = measurements.get(7);&#xA;double wS  = measurements.get(8);&#xA;&#xA;/** Master's Reference quaternion */&#xA;double x0  = measurements.get(9);&#xA;double y0  = measurements.get(10);&#xA;double z0  = measurements.get(11);&#xA;double w0  = measurements.get(12);&#xA;&#xA;/** Slave's Reference quaternion.&#xA; *  If the code has not been initialized yet, save the current quaternion&#xA; *  of the slave as the slave's reference orientation. The orientation of&#xA; *  the slave will henceforth be computed relative to this initial&#xA; *  orientation.&#xA; */&#xA;if (!initialized) {&#xA;    x0S = xS;&#xA;    y0S = yS;&#xA;    z0S = zS;&#xA;    w0S = wS;&#xA;    initialized = true;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then I want to know the orientation of the current quaternion relative to the reference quaternion for both the Master and the Slave. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/**&#xA;     * Compute the orientation of the current quaternion relative to the&#xA;     * reference quaternion, where the relative quaternion is given by the&#xA;     * quaternion product: q0 * conj(q)&#xA;     *&#xA;     * (w0 + x0*i + y0*j + z0*k) * (w - x*i - y*j - z*k).&#xA;     *&#xA;     * &amp;lt;pre&amp;gt;&#xA;     * See: http://gamedev.stackexchange.com/questions/68162/how-can-obtain-the-relative-orientation-between-two-quaternions&#xA;     * http://www.mathworks.com/help/aerotbx/ug/quatmultiply.html&#xA;     * &amp;lt;/pre&amp;gt;&#xA;     */&#xA;    // For the Master&#xA;    double wr = w * w0 + x * x0 + y * y0 + z * z0;&#xA;    double xr = w * x0 - x * w0 + y * z0 - z * y0;&#xA;    double yr = w * y0 - x * z0 - y * w0 + z * x0;&#xA;    double zr = w * z0 + x * y0 - y * x0 - z * w0;&#xA;&#xA;    // For the Slave&#xA;    double wrS = wS * w0S + xS * x0S + yS * y0S + zS * z0S;&#xA;    double xrS = wS * x0S - xS * w0S + yS * z0S - zS * y0S;&#xA;    double yrS = wS * y0S - xS * z0S - yS * w0S + zS * x0S;&#xA;    double zrS = wS * z0S + xS * y0S - yS * x0S - zS * w0S;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Finally, I calculate the Euler angles:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/**&#xA;     * Compute the roll and pitch adopting the Tait–Bryan angles. z-y'-x&quot; sequence.&#xA;     *&#xA;     * &amp;lt;pre&amp;gt;&#xA;     * See https://en.wikipedia.org/wiki/Rotation_formalisms_in_three_dimensions#Quaternion_.E2.86.92_Euler_angles_.28z-y.E2.80.99-x.E2.80.B3_intrinsic.29&#xA;     * or  http://nghiaho.com/?page_id=846&#xA;     * &amp;lt;/pre&amp;gt;&#xA;     */&#xA;    double rollMaster  =  Math.atan2(2 * (wr * xr + yr * zr), 1 - 2 * (xr * xr + yr * yr));&#xA;    double pitchMaster =  Math.asin( 2 * (wr * yr - zr * xr));&#xA;    double yawMaster   =  Math.atan2(2 * (wr * zr + xr * yr), 1 - 2 * (yr * yr + zr * zr));&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and I do the same thing for the Slave. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the beginning, the reference quaternion should be equal to the current quaternion for each of the Slave and the Master, and thus, the relative roll, pitch and yaw should be all zeros, but they are not!&lt;/p&gt;&#xA;" OwnerUserId="14101" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2016-07-04T16:59:49.380" Title="Using Quaternions to feed a quadcopter PID stabilizing controller to avoid Gimbal lock" Tags="&lt;quadcopter&gt;&lt;pid&gt;&lt;stability&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="10198" PostTypeId="2" ParentId="10192" CreationDate="2016-06-28T19:19:09.433" Score="2" Body="&lt;p&gt;With a 16-bit two's-compliment counter, the highest positive number would be 32,767, while the lowest negative number is -32,768. So it would overflow from 32,767 to -32,768. When counting in the opposite direction, it would underflow from -32,768 to 32,767.&lt;/p&gt;&#xA;" OwnerUserId="13775" LastActivityDate="2016-06-28T19:19:09.433" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10200" PostTypeId="1" CreationDate="2016-06-29T14:38:58.957" Score="0" ViewCount="809" Body="&lt;p&gt;I am trying to solve some Create 2 sensor reading problem that I am having when I came across @NBCKLY's posts (&lt;a href=&quot;https://robotics.stackexchange.com/questions/7215/arduino-create-2-reading-sensor-values&quot;&gt;Part 1&lt;/a&gt; and &lt;a href=&quot;https://robotics.stackexchange.com/questions/7229/irobot-create-2-encoder-counts&quot;&gt;Part 2&lt;/a&gt;) that I believe are exactly what I am looking for. I copied his code from the original post into my project and updated the code from the second post as best as I could interpret...but something is not going according to plan.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, I am printing the angle to my serial monitor (for now) but I am constantly getting a value of 0 (sometimes 1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can @NBCKLY or anybody please check out this code and tell me what I'm doing wrong? I would appreciate it. Thank you very much.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;int baudPin = 2;&#xA;int data;&#xA;bool flag;&#xA;int i;&#xA;int ledPin = 13;&#xA;int rxPin = 0;&#xA;signed char sensorData[4];&#xA;int txPin = 1;&#xA;&#xA;unsigned long baudTimer = 240000;&#xA;unsigned long prevTimer = 0;&#xA;unsigned long thisTimer = 0;&#xA;&#xA;&#xA;&#xA;void drive(signed short left, signed short right) {&#xA;  Serial.write(145);&#xA;  Serial.write(right &amp;gt;&amp;gt; 8);&#xA;  Serial.write(right &amp;amp; 0xFF);&#xA;  Serial.write(left &amp;gt;&amp;gt; 8);&#xA;  Serial.write(left &amp;amp; 0xFF);&#xA;}&#xA;&#xA;void updateSensors() {&#xA;  Serial.write(149);&#xA;  Serial.write(2);&#xA;  Serial.write(43); // left encoder&#xA;  Serial.write(44); // right encoder&#xA;  delay(100);&#xA;&#xA;  i = 0;&#xA;&#xA;  while (Serial.available()) {&#xA;    sensorData[i++] = Serial.read();&#xA;  }&#xA;&#xA;  int leftEncoder = int((sensorData[0] &amp;lt;&amp;lt; 8)) | (int(sensorData[1]) &amp;amp; 0xFF);&#xA;  int rightEncoder = (int)(sensorData[2] &amp;lt;&amp;lt; 8) | (int)(sensorData[3] &amp;amp; 0xFF);&#xA;  int angle = ((rightEncoder * 72 * 3.14 / 508.8) - (leftEncoder * 72 * 3.14 / 508.8)) / 235;&#xA;&#xA;  Serial.print(&quot;\nAngle: &quot;);&#xA;  Serial.print(angle);&#xA;  Serial.print(&quot;\n&quot;);&#xA;}&#xA;&#xA;&#xA;&#xA;void setup() {&#xA;  pinMode(baudPin, OUTPUT);&#xA;  pinMode(ledPin, OUTPUT);&#xA;  pinMode(rxPin, INPUT);&#xA;  pinMode(txPin, OUTPUT);&#xA;&#xA;  delay(2000);&#xA;  Serial.begin(115200);&#xA;&#xA;  digitalWrite(baudPin, LOW);&#xA;  delay(500);&#xA;  digitalWrite(baudPin, HIGH);&#xA;  delay(100);&#xA;&#xA;  Serial.write(128);&#xA;  Serial.write(131);&#xA;  updateSensors();&#xA;  drive(50, -50);&#xA;}&#xA;&#xA;&#xA;&#xA;void loop() {&#xA;  thisTimer = millis();&#xA;&#xA;  if (thisTimer - prevTimer &amp;gt; baudTimer) {&#xA;    i = 0;&#xA;    prevTimer = thisTimer;&#xA;    digitalWrite(baudPin, LOW);&#xA;    delay(500);&#xA;    digitalWrite(baudPin, HIGH);&#xA;    Serial.print(&quot;Pulse sent...\n&quot;);&#xA;  }&#xA;&#xA;  updateSensors();&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;#&#xA;&#xA;&lt;p&gt;What I am asking is why do I only get an angle of rotation of 0 or 1 degrees when the robot is moving in a circle. The angle should be incrementing while the robot is moving. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The output I am getting on the serial monitor shows a line of what looks like garble which I assume is supposed to be the bytes sent back from the Create which is followed by &quot;Angle: 0 (or 1)&quot; What I was expecting to see was an increasing angle value. (1,2,3...360, and so on).&lt;/p&gt;&#xA;" OwnerUserId="14021" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2016-06-30T14:08:14.933" Title="Create 2 Reading Sensor Values" Tags="&lt;arduino&gt;&lt;sensors&gt;&lt;irobot-create&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10202" PostTypeId="1" AcceptedAnswerId="10205" CreationDate="2016-06-30T09:37:49.917" Score="0" ViewCount="275" Body="&lt;p&gt;I've googled a lot but wasn't able to find official definitions of these 3 parts. Maybe the explanations of &lt;a href=&quot;http://www.seattlerobotics.org/guide/servos.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;servo&lt;/a&gt; and &lt;a href=&quot;http://open-robotics.com/what-is-the-definition-of-a-robot-controller/&quot; rel=&quot;nofollow noreferrer&quot;&gt;controller&lt;/a&gt; are good enough, but I'm still trying to look for a more &quot;official&quot; one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any ideas?&lt;/p&gt;&#xA;" OwnerUserId="14113" LastEditorUserId="37" LastEditDate="2017-03-09T18:33:03.037" LastActivityDate="2017-03-09T18:33:03.037" Title="The 3 key components of a robot are controller, servo, and reducer. Can someone give us an &quot;official&quot; explanation of what they do respectively?" Tags="&lt;microcontroller&gt;&lt;rcservo&gt;" AnswerCount="1" CommentCount="4" ClosedDate="2016-06-30T14:35:07.130" ContentLicense="CC BY-SA 3.0" />
  <row Id="10205" PostTypeId="2" ParentId="10202" CreationDate="2016-06-30T13:05:20.650" Score="0" Body="&lt;p&gt;Your question is premised on a misunderstanding of what a robot is composed of, but you are close.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A robot is an agent that is capable of &lt;em&gt;sensing&lt;/em&gt;, &lt;em&gt;thinking&lt;/em&gt;, and &lt;em&gt;acting&lt;/em&gt;. The sense-think-act (or sense-plan-act) paradigm has historical significance in behaviour based robotics, and you can read about it in Ronald Arkin's book &lt;em&gt;Behavior-Based Robotics.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The two of the three components that you mention in your question fall neatly into the categories of sensing, thinking, and acting. &lt;strong&gt;Sensing&lt;/strong&gt; components, as the name suggests, gather data from sensors about the environment (internal or external). Common sensors include accelerometers, gyroscopes, cameras, radar, lidar, etc.. &lt;strong&gt;Thinking&lt;/strong&gt; is implemented in a computing environment, small robots will use a micro-controller to facilitate this. On the computer, algorithms, controllers (the control theory type), artificial intelligence (and so on) process the sensor data as input and determine a desired output objective. &lt;strong&gt;Acting&lt;/strong&gt; components, which include servo motors as you mentioned, are responsible for interacting with, or actuating in, the environment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With this brief description, hopefully you better understand what a robot is at an abstract level, which should inform you as to what the physical components are for at a high-level. I will again point you to Arkin's book. The &lt;em&gt;Springer Handbook of Robotics&lt;/em&gt; is another good resource that will certainly answer your questions.  &lt;/p&gt;&#xA;" OwnerUserId="9585" LastActivityDate="2016-06-30T13:05:20.650" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10206" PostTypeId="2" ParentId="10200" CreationDate="2016-06-30T13:59:45.940" Score="1" Body="&lt;p&gt;First, I'll point out that &lt;a href=&quot;https://cdn-shop.adafruit.com/datasheets/create_2_Open_Interface_Spec.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;OP code 20&lt;/a&gt; will just give you the angle directly. Remember if you use that code then, &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The value returned must be divided by 0.324056 to get degrees.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Regarding your code specifically, it looks like you're trying to do:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\frac{\mbox{right distance} - \mbox{left distance}}{\mbox{wheel base}} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a rearrangement of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Arc_length#Arcs_of_circles&quot; rel=&quot;nofollow noreferrer&quot;&gt;arc length&lt;/a&gt; formula:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;s = r\theta \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $s$ is the arc traversed (difference in wheel distances), $r$ is the radius of the circle (the wheel base), and $\theta$ is the angle traversed, &lt;strong&gt;in radians&lt;/strong&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, one of your problems is that you are using an &lt;code&gt;int&lt;/code&gt; to define your angle value - &lt;code&gt;int&lt;/code&gt; is short for &lt;em&gt;integer&lt;/em&gt;, meaning that it can only be whole number. Radians are very small in magnitude compared to degrees. One complete circle is $2\pi$ radians, or about 6.28. Compare this to degrees, which is 360. This means that one radian is about 60 degrees; you won't get any update because of your unit definition. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Your biggest problem&lt;/strong&gt; is, as &lt;a href=&quot;https://robotics.stackexchange.com/q/7229/9720&quot;&gt;NBCKLY asked about&lt;/a&gt;, the encoder counts that are returned to you from OP code 43 and 44 are &lt;strong&gt;not signed&lt;/strong&gt;. So, when you your math, you are doing the following:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\frac{ \frac{\mbox{right encoder}}{\mbox{counts per rev}} (\pi d) - \frac{\mbox{left encoder}}{\mbox{counts per rev}} (\pi d)}{\mbox{wheel base}} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BUT, your drive commands are equal in magnitude. This means that $\mbox{right encoder}\approx \mbox{left encoder}$ &lt;strong&gt;because the encoder counts are not signed&lt;/strong&gt;. That is, even though your drive command is &lt;em&gt;negative&lt;/em&gt;, the counts come back as &lt;em&gt;positive&lt;/em&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, here's what you can do to fix this**:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Multiply the encoder counts by the &lt;a href=&quot;https://en.wikipedia.org/wiki/Sign_function#Definition&quot; rel=&quot;nofollow noreferrer&quot;&gt;sign&lt;/a&gt; (not sine) of the respective drive command. &lt;/li&gt;&#xA;&lt;li&gt;Use a &lt;code&gt;float&lt;/code&gt; for the angle and/or use degrees for the angle by multiplying your existing code by &lt;code&gt;(180/3.1415)&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;** - A final note on your code: You're going to have trouble doing it the way you are at the moment because you're using &lt;em&gt;total&lt;/em&gt; encoder counts for your math. Say you get to 16,000 counts and change direction on that motor. What happens? Well, the way I've written above (which fixes your current issue), you go from +16,000 to -16,000 (or vice-versa). What you should consider doing instead is to &lt;em&gt;accumulate&lt;/em&gt; an angle and to evaluate only the &lt;em&gt;elapsed&lt;/em&gt; wheel encoder counts. That is, I would do the following (pseudo-code):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;float angle;&#xA;angle = 0;&#xA;&#xA;&amp;lt;in your updateSensor code&amp;gt;&#xA;leftEncoder = &amp;lt;get left encoder counts&amp;gt;;&#xA;rightEncoder = &amp;lt;get right encoder counts&amp;gt;;&#xA;&#xA;/* Rollover protection on the encoder */&#xA;if leftDriveCommand &amp;gt; 0&#xA;    if leftEncoder &amp;lt; prevLeftEncoder&#xA;        prevLeftEncoder = prevLeftEncoder - 65535;&#xA;    end&#xA;elseif leftDriveCommand &amp;lt; 0&#xA;    if leftEncoder &amp;gt; prevLeftEncoder&#xA;        prevLeftEncoder = prevLeftEncoder + 65535;&#xA;    end&#xA;end&#xA;&#xA;&amp;lt;do the same thing for the right encoder&amp;gt;&#xA;&#xA;elapsedLeft = leftEncoder - prevLeftEncoder;&#xA;prevLeftEncoder = leftEncoder;&#xA;&#xA;elapsedRight = rightEncoder - prevRightEncoder;&#xA;prevRightEncoder = rightEncoder;&#xA;&#xA;angleIncrement = (elapsedRight - elapsedLeft)*(pi*d/countsPerRev)/(wheelBase);&#xA;&#xA;angle = angle + angleIncrement;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So in this way you accumulate your angle by looking at how much of an angle has elapsed since the last time you updated your sensor. In this way, you don't have to worry about what happens with encoder counts when you reverse polarity on a drive command. You should also consider what is going to happen when you roll over from 65535 back to 0. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Or again, just use OP code 20 to get the angle directly&lt;/strong&gt;.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2016-06-30T13:59:45.940" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="10209" PostTypeId="2" ParentId="10196" CreationDate="2016-06-30T14:42:59.893" Score="2" Body="&lt;p&gt;you should not be seeing a singularity. For the standard roll, pitch, and yaw Euler angles, which are defined by a 3-2-1 rotation from level to the vehicle attitude, there is only a singularity at pitch=+-n*180 +90. This is not a scenario you should be seeing unless you are doing something acrobatic and aggressive. This is an attitude where the vehicle is totally sideways.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Look at how you are converting to Euler angles.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;-&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I recommend commanding psi like this&#xA;\begin{equation}&#xA;\psi_{error} = \left(\psi_{master} - \psi_{master,0} \right) - \left(\psi_{slave} - \psi_{slave,0} \right)&#xA;\end{equation}&lt;/p&gt;&#xA;" OwnerUserId="8842" LastEditorUserId="8842" LastEditDate="2016-07-04T16:59:49.380" LastActivityDate="2016-07-04T16:59:49.380" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="10211" PostTypeId="2" ParentId="7659" CreationDate="2016-06-30T20:34:30.433" Score="1" Body="&lt;p&gt;Use the &lt;a href=&quot;http://wiki.ros.org/camera_calibration&quot; rel=&quot;nofollow noreferrer&quot;&gt;camera_calibration package&lt;/a&gt;. It's supported in all distributions. The package you're using looks pretty old.&lt;/p&gt;&#xA;" OwnerUserId="8842" LastEditorUserId="15160" LastEditDate="2019-05-15T16:32:40.567" LastActivityDate="2019-05-15T16:32:40.567" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10213" PostTypeId="1" CreationDate="2016-07-01T09:34:49.870" Score="3" ViewCount="315" Body="&lt;p&gt;I am using a stereo rig to do SLAM, calibrated using the MATLAB Calibration Tool. I need to compute the 2D coordinates of a landmark using the observation model obtained from triangulation (the images are rectified). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The equations obtained from triangulation are the ones presented in the blue box &lt;a href=&quot;https://www.cs.auckland.ac.nz/courses/compsci773s1t/lectures/773-GG/topCS773.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. Because I am doing SLAM in 2D the coordinates I need to use are $Z_p$ and $X_p$. The parameters needed to compute those values are $f$, $T$ and $disparity (x_L - x_R)$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After doing the calibration intrinsics matrices $K_L$ and $K_R$ are obtained and a common intrinsic matrix for the stereo rig is calculated from $K = 1/2*(K_L +K_R)$ so I get the parameters needed in triangulation from  this common matrix.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The focal length is supplied from the manufacturer, and for my Logitech C170 is 2.3mm. The baseline $T$ from the calibration is 78.7803 mm. To compute the disparity I am obtaining SURF points and using RANSAC to discard the outliers so I get x coordinates from both rectified images.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is that with those values I can't obtain correct values for $Z_p$ and $X_p$ and I am not sure why or where I am doing the wrong step. Anyone can help with this? Are those the correct steps to do triangulation from rectified stereo images?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt; My stereo rig looks like the figure I attach:&lt;a href=&quot;https://i.stack.imgur.com/1gpVj.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1gpVj.jpg&quot; alt=&quot;Figure 1&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you compare the coordinates system with the one used in the link before is easy to see that my $X_r$ corresponds to the $Z_p$ from the link and the $Y_r$ corresponds to $X_p$, so the equations to calculate the distance using triangulation and with the coordinate system of the figure are:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$x_r=\frac{fb}{x_L-x_R}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$y_r = \frac{(x_L-p_x)b}{x_L-x_R}-\frac{b}{2}$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Being $f$ the focal length, $b$ the baseline, $p_x$ the x coordinate of the central point and $x_L-x_R$ the disparity. The $X_r$ $Y_r$ coordinate system is situated between the two cameras, so this is the meaning of the $\frac{b}{2}$ displacement in the equations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Calibration&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To obtain the cameras calibration I am using the &lt;a href=&quot;http://es.mathworks.com/help/vision/ug/stereo-camera-calibrator-app.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Stereo Camera Calibrator Toolbox&lt;/a&gt; with the chessboard pattern.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After calibration, I made some tests using MATLAB functions &lt;em&gt;triangulate&lt;/em&gt; and &lt;em&gt;reconstructScene&lt;/em&gt; to know whether the parameteres are well calculated. The distances I obtained using this functions (which use the stereoParams object created by the calibrator) works well and I obtain distances very similar to the actual ones. So I suposse the calibration works well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem, as I explained before, is when I try to calculate the distances using the equations $x_r$ and $y_r$ because I am not sure how to obtain the common matrix $K$ for the stereo rig (the calibrator gives one intrinsic matrix for each camera, so you have two matrices).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The value of the baseline given from calibration make sense, I made a measurement with a ruler and gives me 78 mm approximately.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The $f$ value I assume should be in pixels but here again the calibration gives an $f_x$ and $f_y$ value so I am not sure which one should I use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Those are the intrinsic matrices I obtain:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Left&lt;/strong&gt;: &#xA;$\begin{pmatrix} 672.6879&amp;amp;-0.7752&amp;amp;282.2488\\0&amp;amp;674.3705&amp;amp;240.1287\\0&amp;amp;0&amp;amp;1 \end{pmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Right&lt;/strong&gt;: $\begin{pmatrix} 681.7049&amp;amp;0.0451&amp;amp;331.2612\\0&amp;amp;681.8235&amp;amp;246.1209\\0&amp;amp;0&amp;amp;1\end{pmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Being the parameters of $K$: $\begin{pmatrix}f_x&amp;amp;s&amp;amp;p_x\\0&amp;amp;f_y&amp;amp;p_y\\0&amp;amp;0&amp;amp;1\end{pmatrix}$&lt;/p&gt;&#xA;" OwnerUserId="11050" LastEditorUserId="11050" LastEditDate="2016-07-05T09:41:49.143" LastActivityDate="2016-07-05T17:31:53.620" Title="Triangulation from calibrated stereo rig" Tags="&lt;mobile-robot&gt;&lt;slam&gt;&lt;computer-vision&gt;&lt;stereo-vision&gt;" AnswerCount="0" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10215" PostTypeId="1" CreationDate="2016-07-01T10:58:14.083" Score="1" ViewCount="298" Body="&lt;p&gt;I got asked to make some sort of trigger pads for the foot section of an organ working over midi to a electric piano and my friend wants it to be pressure sensitive so we can program in the note velocity when he's not using the organ sound.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=DuariiHWJQg&quot; rel=&quot;nofollow&quot;&gt;https://www.youtube.com/watch?v=DuariiHWJQg&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That is what I try to achive. I want the pads to not just be on/off but also be able to control the velocity of the midi note.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Im planning to use a Adruino Uno with a MUX Shield II from Mayhew Labs to get 36 analog inputs. Not exactly sure on the wiring yet but have looked at some guides and videos on google to get a feel for how it can be made. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;All these 36 piezo-&quot;sensors&quot; is planned to register how hard you push the pedals and then send out a MIDI signal with a specific note correspondig to the pedal, and velocity to the electric piano so you can control the low notes with your feet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.thomann.de/se/clavia_nord_pedal_key_27.htm&quot; rel=&quot;nofollow&quot;&gt;http://www.thomann.de/se/clavia_nord_pedal_key_27.htm&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just like that but more pedals and a lot cheaper. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Will the Arduino be able to read the analog output of the piezo sensor even though it's going through a multiplexer?&lt;/p&gt;&#xA;" OwnerUserId="14127" LastEditorUserId="9720" LastEditDate="2016-07-01T15:22:55.200" LastActivityDate="2016-07-01T15:22:55.200" Title="Piezo sensors and multiplexers" Tags="&lt;control&gt;&lt;electronics&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10217" PostTypeId="2" ParentId="10215" CreationDate="2016-07-01T14:51:32.443" Score="1" Body="&lt;p&gt;You're asking about the &lt;a href=&quot;http://mayhewlabs.com/products/mux-shield-2&quot; rel=&quot;nofollow&quot;&gt;Mayhew Labs multiplexer&lt;/a&gt;.  Looking at their &lt;a href=&quot;http://mayhewlabs.com/media/Mux_Shield_II_User_Guide.pdf&quot; rel=&quot;nofollow&quot;&gt;user guide&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The Mux Shield uses TI 74HC4067 analog multiplexers (mux’s) for input functionality&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I'm very sure those will be able to pass an analogue signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bear in mind though that Piezo sensors respond to a &lt;em&gt;change&lt;/em&gt; in pressure. When tapped they will produce a peak voltage that can be read to give a velocity, but they don't respond so well to continuous pressure (aftertouch) in the way that organ pedals might. This is fine if you want to know the velocity at which the pedals are hit, but perhaps not a full aftertouch.&lt;/p&gt;&#xA;" OwnerUserId="9578" LastActivityDate="2016-07-01T14:51:32.443" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10218" PostTypeId="2" ParentId="10215" CreationDate="2016-07-01T14:52:17.557" Score="1" Body="&lt;p&gt;A multiplexer should be able to do what you want, as could a multi-channel &lt;a href=&quot;https://learn.sparkfun.com/tutorials/analog-to-digital-conversion&quot; rel=&quot;nofollow&quot;&gt;analog to digital converter&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A multiplexer &quot;aligns&quot; a particular signal line with a pin on the microcontroller, like a &lt;a href=&quot;http://previews.123rf.com/images/jerryb7/jerryb71111/jerryb7111100136/11458143-Railroad-TrainYard-Detroit-Stock-Photo.jpg&quot; rel=&quot;nofollow&quot;&gt;rail switch&lt;/a&gt;, and then the microcontroller reads the value of the signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An analog to digital converter actually reads the value &lt;em&gt;at&lt;/em&gt; the signal, then stores that value in a register. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The microcontroller has to send a signal to the MUX to tell it which signal it should align, and it would also have to have a digital communication with the an analog to digital converter (ADC). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can sometimes get faster connection with a MUX because you can sometimes use digital I/O to signal the MUX to change (rather than a bus communication), but there are also issues with a MUX in that the device might short two input signals together before switching is complete (make-before-break). A MUX might also buffer the signal such that you're not &lt;em&gt;actually&lt;/em&gt; connected to the true device. Sometimes these are advantages, sometimes they're not. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's up to you to carefully read the datasheet on all of the devices and make sure what you're getting is what is suitable for you.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-07-01T14:52:17.557" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10220" PostTypeId="1" CreationDate="2016-07-02T00:26:01.917" Score="1" ViewCount="100" Body="&lt;p&gt;So, while I was out drinking with a couple of my friends, one of us said something like 'man, wouldn't it be cool if the beer just came to us?' and that got me thinking.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We all have seen some crazy things people do with quadcopters (or polycopters even), but would it be possible (and not too expensive) to build a quadcopter that could carry, say, a crate of beer? (16-20kg)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm a bit of a tinkerer and I've built some minor things with rasp. pi's before but never tried myself at a quadcopter, because they are quite a big piece of work, but being able to fly a crate of beer right in front of me would be pretty awesome.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That aside, how strong would such a quadcopter have to be? In terms of motors, propellers, battery &amp;amp; frame. I'm a complete noob when it comes to RPM and the like, so I wouldn't even know where to begin. I have, of course, read through most of the available tutorials on the internet, but they don't answer my question of &lt;strong&gt;what exactly to look for&lt;/strong&gt; when I want my quadcopter to be able to carry something specific.&lt;/p&gt;&#xA;" OwnerUserId="14136" LastActivityDate="2016-07-04T07:21:07.857" Title="Quadcopter that can carry heavy things?" Tags="&lt;quadcopter&gt;&lt;raspberry-pi&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2016-07-04T11:32:23.583" ContentLicense="CC BY-SA 3.0" />
  <row Id="10221" PostTypeId="1" CreationDate="2016-07-02T12:13:20.697" Score="1" ViewCount="186" Body="&lt;p&gt;I've recently implemented a kalman filter to estimate altitude for a small robot with an IMU+Baro sensor mounted on it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My objective is to get max precision I can have, using this two sensor, with small computing power that a MCU can provide me. I've tuned my filter and it seems to work pretty well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can I obtain a significant improvement using an Extended Kalman Filter instead of a normal Kalman Filter and if it worth time to implement it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More in detail, since this request is too specific for each application, if a Model function that use Baro and Accel as states should be linearized and used in a EKF and if this can improve data reliability compared to a simply KF?&lt;/p&gt;&#xA;" OwnerUserId="14139" LastEditorUserId="134" LastEditDate="2016-07-15T18:04:08.013" LastActivityDate="2016-07-15T18:04:08.013" Title="Should I use or not EKF for Baro-Acc altitude estimation?" Tags="&lt;kalman-filter&gt;&lt;accelerometer&gt;&lt;ekf&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10223" PostTypeId="2" ParentId="10221" CreationDate="2016-07-02T18:43:24.253" Score="2" Body="&lt;p&gt;EKFs are appropriate when you have nonlinear equations describing the system, either in the system dynamics or the measurement dynamics. In this case, I think a plain KF should be sufficient assuming the accel measurements are just measuring gravity and veritcal acceleration. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you expect your sensor to function well in a non level orientation where you are incorporating accel measurements from more than one axis on your IMU I would recommend using a nonlinear estimator. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are just estimating altitude with accel measurements of gravity plus motion and a pressure you should be more than okay with the linear KF.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would also recommend estimating the bias in the IMU. These can, of course, be calibrated out at the start of a flight but estimating biases should be trivial. &lt;/p&gt;&#xA;" OwnerUserId="8842" LastActivityDate="2016-07-02T18:43:24.253" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10224" PostTypeId="1" AcceptedAnswerId="10225" CreationDate="2016-07-02T20:38:21.603" Score="2" ViewCount="1054" Body="&lt;p&gt;The landmarks are often used in SLAM. What are the algorithms used to extract them, and how can a robot differentiate the landmarks, if they detect one in point A at X&lt;sub&gt;t&lt;/sub&gt; and another in X&lt;sub&gt;t+1&lt;/sub&gt;? How can the robot know if it's the same landmark or not?&lt;/p&gt;&#xA;" OwnerUserId="14143" LastEditorDisplayName="user9480" LastEditDate="2017-04-23T13:47:15.570" LastActivityDate="2017-04-23T13:47:15.570" Title="Landmark extraction algorithm" Tags="&lt;slam&gt;&lt;ekf&gt;&lt;lidar&gt;&lt;ransac&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10225" PostTypeId="2" ParentId="10224" CreationDate="2016-07-03T02:38:07.740" Score="0" Body="&lt;p&gt;Landmarks or features are usually found using SURf, SIFT, or ORB. these algorithms extract corners from images and can be found in the opencv library. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Matching measured features to previously seen features is called the assignment problem. There are a couple ways to deal with this. The munkres algorithm solves this problem in O(n^4) time with a nxn cost matrix. The cost of assigning a measured feature to a previously seen feature is often the difference between the two scaled by the mahalonobis distance . &lt;/p&gt;&#xA;" OwnerUserId="8842" LastActivityDate="2016-07-03T02:38:07.740" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="10226" PostTypeId="2" ParentId="7791" CreationDate="2016-07-04T00:24:51.330" Score="1" Body="&lt;p&gt;Try to couple the batteries with voltage regulator. A simple IC DC regulator would do. It would help maintain the input voltage of the motor and helps getting the relation between RPM vs Thrust independent to the voltage irregularities.&lt;/p&gt;&#xA;" OwnerUserId="14150" LastActivityDate="2016-07-04T00:24:51.330" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10227" PostTypeId="1" AcceptedAnswerId="10232" CreationDate="2016-07-04T03:51:13.040" Score="2" ViewCount="1920" Body="&lt;p&gt;Are there any better/ advanced ways of steering a line following robot other than pid controller? If so what are them? &lt;/p&gt;&#xA;" OwnerUserId="9619" LastActivityDate="2016-07-05T23:05:23.763" Title="Are there any others alternatives for PID controllers for line following robots?" Tags="&lt;pid&gt;&lt;line-following&gt;&lt;steering&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="3" ClosedDate="2016-07-06T12:44:58.677" ContentLicense="CC BY-SA 3.0" />
  <row Id="10228" PostTypeId="2" ParentId="10220" CreationDate="2016-07-04T07:21:07.857" Score="1" Body="&lt;p&gt;Well, let me put it this way. To carry anything, the total thrust generated by the quadcopter/multicopter's motors needs to be atleast twice the total weight you wish to carry. This includes the weight of the quadcopter itself as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The more heavier the copter, the lesser the kV of the motor must be, since you'll need large propellers ( I'm talking atleast 15 inches for your idea) so that the propellers are stable on the motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You cannot use frames currently on the market as I don't think they're strong enough to handle a large payload. You should try making your own frame, maybe 3d printing it or carving it out yourself. Materials you can use can be carbon fiber or even balsa wood, which is really light. You can look up frame designs on the web, but my suggestion is to go with an integrated prop guard design for your frame, since that'll be added protection without adding anything more to the frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'll need lipos of large capacity in order to have a decent run time. Go look up Oscar Liang's website for understanding rpm, battery selection, motors and props, etc. &lt;/p&gt;&#xA;" OwnerUserId="13967" LastActivityDate="2016-07-04T07:21:07.857" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10229" PostTypeId="1" AcceptedAnswerId="10230" CreationDate="2016-07-04T07:47:17.447" Score="1" ViewCount="1283" Body="&lt;p&gt;What are the criteria to consider when ordering dc motors for a line following robot?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a way to calculate the torque required?&lt;/p&gt;&#xA;" OwnerUserId="9619" LastActivityDate="2016-07-04T11:08:07.990" Title="How to select dc motors for a line following robot?" Tags="&lt;motor&gt;&lt;line-following&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10230" PostTypeId="2" ParentId="10229" CreationDate="2016-07-04T11:08:07.990" Score="1" Body="&lt;p&gt;It's a question of balance as always. You need to select motors that require voltage and current that your robot's power source can provide, physical size so that it fits on your robot and also torque and RPM to give your robot enough oomph. Also note that gearbox and wheel size affect the final top speed an acceleration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I did was to go through several suppliers and preselect motors with acceptable physical dimensions and voltage. Then I made a spreadsheet where I calculated robot acceleration at motor stall from torque and robot speed from motor's free running RPM with estimated robot mass and with all wheel sizes in a certain range.&#xA;From this spreadsheet I selected set of parameters (2G acceleration and 3m/s top speed for my tabletop line follower) that seemed the best and bought the motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When doing this you must realize that the top speed and acceleration are only theoretical maximum, your robot will be slower (because the motor is loaded when dragging your robot around) and there will probably also be less available acceleration as well.&lt;/p&gt;&#xA;" OwnerUserId="482" LastActivityDate="2016-07-04T11:08:07.990" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10232" PostTypeId="2" ParentId="10227" CreationDate="2016-07-05T23:05:23.763" Score="1" Body="&lt;p&gt;Because you don't have any specific robot in mind, let's assume that you have a two-wheeled differential drive robot (TWDDR). TWDDRs can be modeled with unicycle dynamics of the following form: $$\dot{z}=\left[\begin{matrix}\dot{x}\\ \dot{y} \\ \dot{\theta} \end{matrix}\right] = \left[\begin{matrix}cos(\theta)&amp;amp;0\\sin(\theta)&amp;amp;0\\0&amp;amp;1\end{matrix}\right] \left[\begin{matrix}v\\\omega\end{matrix}\right],$$ where $x$ and $y$ are Cartesian coordinates of the robot, and $\theta \in (-\pi,\pi]$ is the angle between the heading and the $x$-axis. The input vector $\left[v, \omega \right]^T$ consists of linear and angular velocity inputs. For simplicity, I will assume that you can specify these inputs directly, which is reasonable for most off-the-shelf robots--if you want to implement this from scratch, then you have to specify velocities for the left and right wheels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Following a line is essentially a trajectory tracking problem. For unicycle robots, trajectory tracking is achieved by controlling a point, which is holonomic, some small distance $l$ away from the center of the the two wheels rather than controlling the unicycle robot directly. To do this, we can derive the following rotation matrix to transform the control law of the robot to the control law of the point: $$\dot{p}=\left[\begin{matrix}\dot{p_x}\\\dot{p_y}\end{matrix}\right]=\left[\begin{matrix}\text{cos}(\theta)&amp;amp;-l\text{sin}(\theta)\\\text{sin}(\theta)&amp;amp;l \text{cos}(\theta)\end{matrix}\right]\left[\begin{matrix}v\\\omega\end{matrix}\right]$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\dot{p}$ is the velocity of the point being controlled, and it is decomposed into its $x$ and $y$ components. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;At this point, control is quite simple; we control the point directly! The dynamics become: $$\dot{z}=\left[\begin{matrix}\dot{x}\\ \dot{y} \\ \dot{\theta} \end{matrix}\right] = \left[\begin{matrix}cos(\theta)&amp;amp;0\\sin(\theta)&amp;amp;0\\0&amp;amp;1\end{matrix}\right] \left[\begin{matrix}v\\\omega\end{matrix}\right]=\left[\begin{matrix}cos(\theta)&amp;amp;0\\sin(\theta)&amp;amp;0\\0&amp;amp;1\end{matrix}\right] \left[\begin{matrix}cos(\theta)&amp;amp;sin(\theta)\\-\frac{sin(\theta)}{l}&amp;amp;-\frac{cos(\theta)}{l}\end{matrix}\right]\left[\begin{matrix}\dot{p}_x\\\dot{p}_y\end{matrix}\right],$$Setting $$\dot{p}=u=r(t)=\left[\begin{matrix}r_x(t)\\r_y(t)\end{matrix}\right],$$ accomplishes this, where $u$ is the input, and $r(t)$ is the reference trajectory that you want, decomposed into its $x$ and $y$ components; this will accomplish movement along the trajectory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the controller designed, the last component of building a line-following robot will be to implement some form of perception. If you have a downward facing camera and assume a level surface, consistent lighting, and good contrast between the line and its background, then you can use simple computer vision techniques to measure the error between the point $p$ and the desired trajectory. A simple proportional controller can be used to drive the robot along the line.&lt;/p&gt;&#xA;" OwnerUserId="9585" LastActivityDate="2016-07-05T23:05:23.763" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10233" PostTypeId="1" CreationDate="2016-07-06T06:19:41.573" Score="0" ViewCount="920" Body="&lt;p&gt;I would like to create a simulation model (basically a signal generator) which will allow me to generate the 3 output signals of an accelerometer based on 3 location input signals (x,y and z). I would like a more realistic model of the data produced by an accelerometer (with some noise and bias offsets).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I convert the series of points into a simulated accelerometer output?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Specifically:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a series of positions which describe a trajectory in 3D space...If an accelerometer was moving along the trajectory described by the series of positions, I am interested in knowing (simulating!) the data that the accelerometer would produce as the result of moving along the described trajectory. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I could just calculate the 2nd derivative of the trajectory, but that would probably be too ideal. I am looking for a model which is more realistic. &lt;/p&gt;&#xA;" OwnerUserId="14168" LastEditorUserId="14168" LastEditDate="2016-07-06T13:14:13.773" LastActivityDate="2016-12-03T20:20:06.837" Title="Generate synthetic accelerometer data based on (x,y,z) coordinate" Tags="&lt;accelerometer&gt;&lt;simulation&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10234" PostTypeId="2" ParentId="10233" CreationDate="2016-07-06T13:19:17.703" Score="1" Body="&lt;p&gt;I assume that the three location input signals are functions of time, i.e., $x=x(t)$, $y=y(t)$, and $z=z(t)$ relative to a fixed, non-rotating reference frame.  Then one could create a simple kinematics model that implements $dx/dt=v_x$, $dv_x/dt=a_x$, $da_x/dt=n_x$ where $n_x$ is a normal (Gaussian) random variable (and similarly for the $y$ and $z$ axes).  The resulting state-space model has nine state variables ($a_x$, $v_x$, $x$, $ a_y$, $\ldots$) and three measurements (the location input signals).  A simple Kalman filter can then be designed to estimate the acceleration states given the location measurements. This will be the kinematic acceleration relative the fixed, non-rotating reference frame.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Accelerometers measure specific force, i.e., the difference between the kinematic acceleration and the acceleration due to gravity.  Thus the components of the acceleration due to gravity must be subtracted from the components of the estimated kinematic acceleration to obtain estimates of what accelerometers fixed to the non-rotating reference frame would measure.  &lt;/p&gt;&#xA;" OwnerUserId="13926" LastActivityDate="2016-07-06T13:19:17.703" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="10237" PostTypeId="1" AcceptedAnswerId="10238" CreationDate="2016-07-07T13:37:33.013" Score="1" ViewCount="227" Body="&lt;p&gt;My Arduino + Raspberry Pi robot was working fine in the morning. I tested it, it ran perfectly, and then I switched it off. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now in the evening when I'm trying to run it again, with the same batteries and everything, it just doesn't move!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I stripped it down to the motor compartment and found that when I try to run my main motor, I can see sparks through the translucent plastic on the back.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does that mean my motor is gone?&lt;/p&gt;&#xA;" OwnerUserId="13533" LastActivityDate="2016-07-08T18:27:19.293" Title="What does internal sparking in a motor mean?" Tags="&lt;arduino&gt;&lt;motor&gt;&lt;raspberry-pi&gt;&lt;battery&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="10238" PostTypeId="2" ParentId="10237" CreationDate="2016-07-07T14:37:45.127" Score="2" Body="&lt;p&gt;If you are using a brushed DC motor, then (hopefully) the sparks that you are seeing are a discharge between the commuter and the brushes--this is normal. Another example of this is evident in certain electric drills; under low lighting, you can see sparks through the ventilation holes. If you are interested in this, you can ask at the EE Stack Exchange, or you can grab a textbook.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for debugging your motor, try using a different voltage supply or use a multi-meter to make sure that your battery is charged. Motors do burn out, and this may have happened, but you should check the easy things first.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found a resource that corroborates what I am suggesting: &lt;a href=&quot;http://www.pcbheaven.com/userpages/check_the_windings_of_a_3phase_ac_motor/&quot; rel=&quot;nofollow&quot;&gt;Debugging 3-Phase Motor Failure&lt;/a&gt;. Your motor is not 3-Phase, but the same idea applies. Measure the winding resistance with a multi-meter. If your coil has broken internally, you will get a very large resistance (unlikely because you are seeing sparks); if you get a very small resistance, smaller than the rated value, then your coil is shorted, which might explain the sparks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would do these checks first, then move onto the rest of your components, but if the motor is not spinning under a verified supply voltage, it's definitely toast.&lt;/p&gt;&#xA;" OwnerUserId="9585" LastEditorUserId="9585" LastEditDate="2016-07-08T18:27:19.293" LastActivityDate="2016-07-08T18:27:19.293" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="10239" PostTypeId="1" AcceptedAnswerId="10240" CreationDate="2016-07-07T15:07:46.100" Score="2" ViewCount="214" Body="&lt;p&gt;I'm using a &lt;a href=&quot;http://www.micropik.com/PDF/HCSR04.pdf&quot; rel=&quot;nofollow&quot;&gt;HC-SR04 sensor&lt;/a&gt; to detect obstacles. What are the pitfalls with an ultrasonic sensor?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are a couple I've found during my testing:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The signal can bounce off of one wall to another and then get picked up, distorting latency&lt;/li&gt;&#xA;&lt;li&gt;Absorbent materials sometimes don't bounce the signal back&lt;/li&gt;&#xA;&lt;li&gt;Check the datasheet for supported range (min/max)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="9941" LastEditorUserId="9941" LastEditDate="2016-07-07T23:20:23.803" LastActivityDate="2016-07-07T23:20:23.803" Title="What are some pitfalls of an ultrasonic sensor?" Tags="&lt;ultrasonic-sensors&gt;" AnswerCount="2" CommentCount="6" ClosedDate="2016-07-07T17:29:11.127" ContentLicense="CC BY-SA 3.0" />
  <row Id="10240" PostTypeId="2" ParentId="10239" CreationDate="2016-07-07T15:44:08.237" Score="2" Body="&lt;p&gt;From my experience, don't use them for obstacle detection on high speed robots. Your'e just as good as without using them. &lt;/p&gt;&#xA;" OwnerUserId="13533" LastActivityDate="2016-07-07T15:44:08.237" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="10241" PostTypeId="1" CreationDate="2016-07-07T15:51:59.700" Score="2" ViewCount="1066" Body="&lt;p&gt;My goal is to control drone by Raspberry PI. The Raspberry PI uses camera and OpenCV, sends control commands to AVR microcontroller which will generate the PWM control signal. Meaning that it will simulate pilot with transmitter-receiver setup.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In other words (to make it more clear). Raspberry tells the Atmega8 that the drone needs to go more forward. Atmega8 generates custom PWM signals on 8 pins. Those signals are sent directly to CC3D pins responsible for roll, pitch etc. Atmega8 replaces controller receiver in this setup. It generates signal not based on user input but on what Raspberry tells it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to do that I need the parameters (period, voltage etc.) of the PWM signal that CC3D accepts to properly simulate it. I have found this topic:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/8965/cc3d-replacing-rc-emitter-with-an-rpi?newreg=1af0c139fc9f44bab93b847d3d906fdf&quot;&gt;CC3D - Replacing RC emitter with an RPi&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;He has the same problem as I do and he found the solution. Unfortunately I can't send pm and I can't comment because I'm new to the site... so basically there is no way for me to contact him.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So any help would be appreciated.&lt;/p&gt;&#xA;" OwnerUserId="14183" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2018-05-06T19:57:56.297" Title="CC3D PWM control signal characteristic (to be simulated by Raspberry PI)" Tags="&lt;quadcopter&gt;&lt;arduino&gt;&lt;raspberry-pi&gt;&lt;uav&gt;&lt;avr&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10242" PostTypeId="2" ParentId="10239" CreationDate="2016-07-07T16:52:50.270" Score="2" Body="&lt;p&gt;It'll involve a bit of reading, but &lt;a href=&quot;http://www-personal.umich.edu/~johannb/mypapers.htm&quot; rel=&quot;nofollow&quot;&gt;Johann Borenstein's papers&lt;/a&gt; include several 1980s-90s publications about ultrasonics (plus loads of other interesting stuff). Some pure ultrasonic systems, some mixed with other navigation techniques.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One interesting effect I read about was reflections. If the &quot;beam&quot; hits a wall at an oblique angle, then instead of reflecting back to the sensor it bounces on back into the room, hits something then bounces right back. The result is detecting things that appear to be &quot;beyond&quot; the wall, but really they're objects in the room but a longer path length is being measured.&lt;/p&gt;&#xA;" OwnerUserId="9578" LastActivityDate="2016-07-07T16:52:50.270" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10249" PostTypeId="1" CreationDate="2016-07-09T22:34:16.010" Score="3" ViewCount="92" Body="&lt;p&gt;I'm trying to find known techniques for keeping a manually controlled robot within a known polygon fence. More specifically, a pilot controls a robot by issuing desired velocity vectors, and the autopilot adjusts the velocity so that the distance to any boundary is always at least the stopping distance of the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My goal is to implement a system that:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Tries to follow the pilot's desired velocity as closely as possible.&lt;/li&gt;&#xA;&lt;li&gt;Is robust to changes in position and desired velocity. At a minimum, I want the velocity to change &lt;strong&gt;continuously&lt;/strong&gt; with respect to the position of the robot and desired velocity of the pilot. Informally, this means that sufficiently small changes in the position or desired velocity of the pilot induce arbitrarily small changes in the velocity.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The second point is particularly important. Suppose that the policy were to find the intersection with the boundary in the direction of the desired velocity and slow down smoothly to that point. The below figure depicts a couple of scenarios in which this would &lt;em&gt;not&lt;/em&gt; be continuous. In this figure, the black lines represent the fence boundary, the red dot is the position of the robot, and the blue line is the desired velocity of the pilot. In figure (a), a small perturbation of the position to the left will cause a large increase in allowed velocity because the desired velocity will intersect the far edge instead of the near edge. In figure (b), a small clockwise rotation of the velocity vector will result in a large decrease in allowed velocity because the desired velocity will intersect the near edge instead of the far edge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/yDbWx.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/yDbWx.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have searched for relevant papers, but most of the papers I've seen have dealt with fully autonomous obstacle avoidance. Moreover, I haven't seen any papers address the robustness/continuity of the system.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;:EDIT:&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The robot knows its own location and the location of the boundary at all times. I also have some equations for maximum velocity that allow a smooth ramp-down to a single line boundary (though I'd be interested in seeing a better one). I would like the velocity limits to be continuous in the position and desired velocity of the pilot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to continuously throttle the user's input such that a minimum safe distance between the robot and the boundary is maintained, but see the figure that I added to the question. The hard part (I think) is to make sure that small changes in position (e.g. due to sensor noise) or small changes in desired velocity (e.g. due to pilot noise) don't cause huge changes in what the autopilot allows.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want continuity because I think it will provide a much nicer experience for the pilot while still enforcing the fence boundary. There is a trade-off with optimally but I think this is worth it. Even though the physical world smoothes any discontinuities in velocity, big changes could still cause large jerk which will be somewhat disturbing to the pilot. The goal is to not have the autopilot introduce large oscillations not intended by the pilot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This Will be implemented On a physical system that has sensors that provide an estimation of position, and the boundary shape is known and is unchanging. The actual system that I'm targeting is a quadcopter.&lt;/p&gt;&#xA;" OwnerUserId="11049" LastEditorUserId="11049" LastEditDate="2016-07-11T20:43:07.273" LastActivityDate="2016-07-11T20:43:07.273" Title="Fence avoidance for manually controlled robot" Tags="&lt;control&gt;&lt;geometry&gt;&lt;reference-request&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10252" PostTypeId="1" AcceptedAnswerId="10270" CreationDate="2016-07-10T20:39:31.910" Score="5" ViewCount="636" Body="&lt;p&gt;I need some ideas for strategies or algorithms to apply on these strategies to perform obstacle avoidance while navigating.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the moment I'm doing offline path planning and obstacle avoidance of known obstacles with an occupancy grid. And running the A* algorithm over the created matrix. After that my robot follows along the resulting trajectory. This is done by splitting the whole trajectory into sub-path. The robot adjust it's heading to the new target and follows the straight line. The robot is controlled by a fuzzy logic controller to correct deviations from the ideal line (steering) and adjusting the velocity according to the steering action and distance to the target. So far so good. And it's working very well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As sensor system, I solely use the Google Project Tango (Motion Tracking and Area Learning for proper path following). Now I want to use the depth perception capability of the device. Getting the appropriate depth information and extracting a possible obstacle is done with a quite simple strategy. The robot analyses the depth information in front of the robot and if any object is in between the robot and the target point of the sub-path, an obstacle must be there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I'm wondering how to bypass this obstacle most efficiently. The robot is only aware of the height and width of the obstacle, but has no clue about the depth (only the front of the obstacle is scanned). Feeding the occupancy grid with this new obstacle and running again the A* algorithm is not effective, because of the missing depth. One possible strategy I could imagine is estimating a depth of the length of the grid cell, re-plan and continue the navigation. If the robot faces the same obstacle again, the depth is increased by the size of one additional grid cell length. But I think this is extremely ineffective. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The requirement is to only use the Google Project Tango and no additional sensors, such as ultrasonic to sense the sides.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update 1&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first picture illustrates the given trajectory from the path planning (orange). The gray and blue data points are the sensed obstacles in front of the robot. The notch behind the blue obstacle is actually the wall, but is shadowed by the blue obstacle. Image 2 shows the same scene just from a different perspective.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The issue I have to treat is, how to optimally bypass the blue obstacle even I don't know how deep it is. Driving to the left and to the right only to capture better data points (to generate a 3D model) is not possible. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/w7OqT.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/w7OqT.png&quot; alt=&quot;Front perspective&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/tDx3G.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tDx3G.png&quot; alt=&quot;Side perspective&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update 2&lt;/strong&gt;&#xA;Yes, I'm using a depth sensor, the one integrated in Google Project Tango. It's a visual measurement. A infra-red laser beams a grid onto the objects and a RGB-IR camera capture these information and evaluates the appropriate depth information.&lt;/p&gt;&#xA;" OwnerUserId="13963" LastEditorUserId="13963" LastEditDate="2016-07-12T07:09:54.153" LastActivityDate="2016-07-13T17:16:59.037" Title="Obstacle Avoidance while Navigating" Tags="&lt;control&gt;&lt;motion-planning&gt;&lt;algorithm&gt;" AnswerCount="2" CommentCount="7" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10253" PostTypeId="1" AcceptedAnswerId="10275" CreationDate="2016-07-10T20:53:44.127" Score="2" ViewCount="2058" Body="&lt;p&gt;I am trying to assess the pros and cons of steering a robot car using different speeds of 2 or more DC motors versus using a servo and a steering mechanism? From your experience which is better in terms of:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Steering accuracy (e.g. prompt responsiveness or skidding while on higher speeds)&lt;/li&gt;&#xA;&lt;li&gt;Efficiency in electrical power consumption&lt;/li&gt;&#xA;&lt;li&gt;Durability and maintenance&lt;/li&gt;&#xA;&lt;li&gt;Control complexity (coding and electronics)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I researched and understood how both approaches work, but I need some practical insight to select the most suitable approach. Any hint or research direction is appreciated.&lt;/p&gt;&#xA;" OwnerUserId="14209" LastEditorUserId="37" LastEditDate="2017-03-09T18:32:26.503" LastActivityDate="2017-03-09T18:32:26.503" Title="Steering using different speeds in DC motors or using a servo?" Tags="&lt;motor&gt;&lt;servomotor&gt;&lt;steering&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10254" PostTypeId="2" ParentId="10249" CreationDate="2016-07-11T07:04:19.153" Score="2" Body="&lt;p&gt;I think that your problem is rather uncommon, so there may be no solutions ready to use without any modifications. However, you may have a look at &lt;a href=&quot;https://www.ri.cmu.edu/pub_files/pub1/fox_dieter_1997_1/fox_dieter_1997_1.pdf&quot; rel=&quot;nofollow&quot;&gt;&quot;The Dynamic Window Approach to Collision Avoidance&quot;&lt;/a&gt; by Dieter Fox, Wolfram Burgard and Sebastian Thrun. This reverses your problem: given current velocity and achievable accelerations, find a path for a robot that avoids all the obstacles. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or you could just calculate maximum velocity in any given point basing just on a distance to the closes point of the fence. That will of course mean that even going away from the fence you will go slowly, if you are close to the border, but it will surely be continuous. &lt;/p&gt;&#xA;" OwnerUserId="7360" LastActivityDate="2016-07-11T07:04:19.153" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10255" PostTypeId="2" ParentId="10249" CreationDate="2016-07-11T13:36:25.733" Score="0" Body="&lt;p&gt;I'll second &lt;a href=&quot;https://robotics.stackexchange.com/a/10254/9720&quot;&gt;mactro's answer&lt;/a&gt;, with a few notes:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not sure why you are so concerned with continuity. With the window, you setup an imaginary line on all axes of motion where the distance is basically, &quot;If I issue a stop command right now, where do I come to a stop?&quot; Add a buffer to that stopping distance, then if an object gets between you and your stopping limit, then issue a stop command. A stop command would be zero speed. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So your reference is  until the fence gets &lt;em&gt;almost&lt;/em&gt; so close that you won't be able to avoid it, in which case you set the speed &lt;em&gt;on that axis&lt;/em&gt; to zero. This is where my question on continuity comes in - what difference does it make if the speed reference has a jump from  to ? The quadcopter, being a &lt;em&gt;physical&lt;/em&gt; system, will not be able to instantaneously change speeds. That is, by being a physical object, the quadcopter will filter that discontinuity for you. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further, hypothetically speaking, if your boundary isn't the fastest you could come to a stop, then what is it? You sound like you want to lower the maximum speed when operating near the wall, but why? As long as the operator isn't requesting to fly into the wall, why limit the performance? Leave the speed maximum at 100%, and then kill the operator input &lt;em&gt;on that axis&lt;/em&gt; when they request to fly into the wall. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a pre-rebuttal (prebuttal?) to a comment I'd imagine you'll make, a PID controller has some time step involved. Even if you have an instantaneous change in reference speed, that change doesn't &lt;em&gt;register&lt;/em&gt; until the next time step. So it may be a large jump, but that large jump is going to look like a step command, which is generally the standard to which PID controllers are tuned. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2016-07-11T13:36:25.733" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="10256" PostTypeId="1" CreationDate="2016-07-11T16:31:49.850" Score="5" ViewCount="2660" Body="&lt;p&gt;I am working on a 6 DOF robotic arm(industrial manipulator). I have the basic structural specs (dimensions, weights etc) for the links and joints with me. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically, I want to simulate both &lt;em&gt;static torque&lt;/em&gt;(Due to the weight of the arm) and &lt;em&gt;dynamic torque&lt;/em&gt;(due to the accelerating joint's motion) &lt;strong&gt;Torque&lt;/strong&gt; that the joints will need to bear for a given set of motions. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have looked on the web and found tools like the ROS-MoveIt Visualiser, Gazebo, V-REP which let me visually see a robotic arm and simulate the position logic and external factors like collisions etc. But I have been unable to simulate/calculate dynamic torque values from these tools.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ideally, I'd want to define a fixed motion of the end effector(i.e. move the robot between 2 positions) and measure the Torque(both static and dynamic) during that particular move.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These torque values are essential for selecting the optimum motors and gearboxes for my design and payload.&lt;/p&gt;&#xA;" OwnerUserId="9124" LastActivityDate="2016-07-12T14:00:15.150" Title="Dynamic torque simulation for a 6 DOF robotic arm" Tags="&lt;robotic-arm&gt;&lt;dynamics&gt;&lt;torque&gt;&lt;simulation&gt;&lt;manipulator&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10257" PostTypeId="2" ParentId="10256" CreationDate="2016-07-11T18:10:14.807" Score="0" Body="&lt;p&gt;In order to simulate dynamics you need a multi-body dynamics simulation software. Matlab-Simulink has  SimMechanics toolbox to do this, but many CAD software used to carry out the mechanical design of the robot can aolso do the simulation. SolidWorks for example has a simulation component calld Simulation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are interested in wiring the dynamic equations and calculating the torques you can use the iterative newton-euler method. &lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2016-07-11T18:10:14.807" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10258" PostTypeId="2" ParentId="10256" CreationDate="2016-07-11T18:36:16.893" Score="3" Body="&lt;p&gt;The dynamics of robotic arms are fairly complex, especially when there are more than three joints to consider. The problem is that the movement of each joint moves all the links beyond it, which can induce torques at other joints. You have to consider how the movement of all links affects each individual joint.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is software that can automatically compute the dynamics based on the geometry you provide (MATLAB + SimMechanics comes to mind, although that is an expensive option). I don't have any knowledge of free simulators, but I'm sure they exist. You may have to search around to see what simulator is right for your application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another option is to program your own simulation. The mathematics behind the dynamics of serial link robots are covered in many different textbooks. In order to do this part from scratch you would need to be familiar with using matrices, plus some understanding of differential equations. I can give some of the basics here, to give you an idea of what you would have to program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can calculate the torque required to move a serial-link robotic arm using the following nonlinear matrix equation:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\boldsymbol{\tau} = \boldsymbol{M}(\boldsymbol{q})\ddot{\boldsymbol{q}} + \boldsymbol{C}(\boldsymbol{q},\dot{\boldsymbol{q}})\dot{\boldsymbol{q}} + \boldsymbol{G}(\boldsymbol{q})$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\boldsymbol{\tau}$ is the (6x1) vector of joint torques&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\boldsymbol{q}$ is a (6x1) vector of joint angles&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\dot{\boldsymbol{q}}, \ddot{\boldsymbol{q}}$ are the (6x1) joint angular velocity vector and joint angular acceleration vector, respectively&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\boldsymbol{M}(\boldsymbol{q})$ is the (6x6) inertia matrix of the robot, which is a function of the joint angles&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\boldsymbol{C}(\boldsymbol{q},\dot{\boldsymbol{q}})$ is the (6x6) centrifugal and Coriolis effect matrix, which is a function of the joint angles and angular velocities&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\boldsymbol{G}(\boldsymbol{q})$ is the (6x1) gravitational torque vector, which is a function of joint position&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Notice that this equation includes both the dynamic and static loads on each joint. If you set the joint angular velocity and acceleration to zero, you would have the static equation by itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may be able to find expressions for the $M$, $C$, and $G$ matrices online, but you can also try to derive them for your application using the Euler-Lagrange method.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, the steps you would have to take are:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Derive the dynamic matrices associated with your application.&lt;/li&gt;&#xA;&lt;li&gt;Derive the equations that convert the motion (position, velocity, acceleration) of the end-effector to the motion of the joints (the inverse kinematics).&lt;/li&gt;&#xA;&lt;li&gt;Write a program that&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Converts an end-effector trajectory to a set of joint trajectories (position, velocity, and acceleration).&lt;/li&gt;&#xA;&lt;li&gt;Computes the required torque using the dynamic equation for each point along that trajectory.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;This is all possible (in fact I have done this myself for a 3 DOF manipulator) but it might be too much work for an enthusiast.&lt;/p&gt;&#xA;" OwnerUserId="13878" LastActivityDate="2016-07-11T18:36:16.893" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10259" PostTypeId="1" AcceptedAnswerId="10262" CreationDate="2016-07-11T19:00:45.273" Score="2" ViewCount="97" Body="&lt;p&gt;I'm working on a extremely simple robot (very first project) that attempts to find the source of a Bluetooth signal. There are two motors that drive the platform and each has an encoder. We've already used a Kalman filter to calculate the approximate distance to the Bluetooth beacon within reasonable error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I worked out a manual solution using some trig that solves the problem in theory, but it fails if there is any error (For example, it attempts to turn 73 degrees, but turns 60).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is how can I reasonably drive the motors based on the encoder data to continuously minimize the distance to the signal? Furthermore, is there a generic solution to problems like these? (I guess you might call it a stochastic &quot;Hotter/Colder&quot; problem)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in Advance.&lt;/p&gt;&#xA;" OwnerUserId="14216" LastActivityDate="2016-07-11T20:28:07.430" Title="Find object using only distance" Tags="&lt;raspberry-pi&gt;&lt;wheeled-robot&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10260" PostTypeId="2" ParentId="10256" CreationDate="2016-07-11T19:19:20.933" Score="2" Body="&lt;p&gt;I think you may be going about this problem wrong. If you find a simulator that reports joint torques, then what? Are you going to iterate through every possible start and end location? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should only need to evaluate the worst-case motion. Worst case static torque would be with the arm straight out carrying maximum load, and worst case dynamic torque would probably be whatever the largest range of motion would be while fighting gravity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Evaluate the worst-case scenarios (not necessarily the same for each joint, by the way!) and you're done.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-07-11T19:19:20.933" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10262" PostTypeId="2" ParentId="10259" CreationDate="2016-07-11T20:08:24.990" Score="1" Body="&lt;p&gt;There are two challenges that you will have to address. First is localization of the robot relative to the Bluetooth source; second is the controller that will drive the robot to the source.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To localize the robot, I would consider using a triangulation method. One robotic platform that addresses a similar problem is the &lt;a href=&quot;http://science.sciencemag.org/content/sci/345/6198/795.full.pdf?ijkey=6HDqxr.PcBD7o&amp;amp;keytype=ref&amp;amp;siteid=sci&quot; rel=&quot;nofollow noreferrer&quot;&gt;Kilobot&lt;/a&gt;, which is used in swarm robotics research. The Kilobot has an IR sensor, which it uses to determine the distance to its neighbours--this sensor is very susceptible to noise. Furthermore, the Kilobot uses vibrating motors to move, which are even worse for control than low quality motor encoders. The triangulation method is given on page 794--the only difference will be that your robot will be green and the source will be blue. To triangulate, you must take a minimum of three relative distance measurements from the source at different known locations (approximated due to dubious encoder quality)--you can now use this coordinate as a desired position for the controller. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To control the robot, we need to drive the robot to the source by applying control inputs. Because you don't have any specific robot in mind, let's assume that you have a two-wheeled differential drive robot (TWDDR). TWDDRs can be modeled with unicycle dynamics of the following form: $$\dot{z}=\left[\begin{matrix}\dot{x}\\ \dot{y} \\ \dot{\theta} \end{matrix}\right] = \left[\begin{matrix}cos(\theta)&amp;amp;0\\sin(\theta)&amp;amp;0\\0&amp;amp;1\end{matrix}\right] \left[\begin{matrix}v\\\omega\end{matrix}\right],$$ where $x$ and $y$ are Cartesian coordinates of the robot, and $\theta \in (-\pi,\pi]$ is the angle between the heading and the $x$-axis. The input vector $\left[v, \omega \right]^T$ consists of linear and angular velocity inputs. For simplicity, I will assume that you can specify these inputs directly, which is reasonable for most off-the-shelf robots--if you want to implement this from scratch, then you have to specify velocities for the left and right wheels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Driving the robot to the source is equivalent to shifting the origin of the state and driving the state of the robot to 0. For unicycle robots, a easy method of control is achieved by controlling a point, which is holonomic, some small distance $l$ away from the center of the the two wheels rather than controlling the unicycle robot directly. To do this, we can derive the following rotation matrix to transform the control law of the robot to the control law of the point: $$\dot{p}=\left[\begin{matrix}\dot{p_x}\\\dot{p_y}\end{matrix}\right]=\left[\begin{matrix}\text{cos}(\theta)&amp;amp;-l\text{sin}(\theta)\\\text{sin}(\theta)&amp;amp;l \text{cos}(\theta)\end{matrix}\right]\left[\begin{matrix}v\\\omega\end{matrix}\right]$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\dot{p}$ is the velocity of the point being controlled, and it is decomposed into its $x$ and $y$ components. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;At this point, control is quite simple; we control the point directly! The dynamics become: $$\dot{z}=\left[\begin{matrix}\dot{x}\\ \dot{y} \\ \dot{\theta} \end{matrix}\right] = \left[\begin{matrix}cos(\theta)&amp;amp;0\\sin(\theta)&amp;amp;0\\0&amp;amp;1\end{matrix}\right] \left[\begin{matrix}v\\\omega\end{matrix}\right]=\left[\begin{matrix}cos(\theta)&amp;amp;0\\sin(\theta)&amp;amp;0\\0&amp;amp;1\end{matrix}\right] \left[\begin{matrix}cos(\theta)&amp;amp;sin(\theta)\\-\frac{sin(\theta)}{l}&amp;amp;-\frac{cos(\theta)}{l}\end{matrix}\right]\left[\begin{matrix}\dot{p}_x\\\dot{p}_y\end{matrix}\right],$$Setting $$\dot{p}=u=\left[\begin{matrix}x_{desired}\\y_{desired}\end{matrix}\right],$$ accomplishes the objective of driving the robot to the desired pose, where $u$ is the input, and $[x_{desired},y_{desired}]^T$ is the location of the source.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The gif below uses this controller, driving all of the robots from arbitrary initial positions to the desired position at $(-5,-5)$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/OsXCK.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OsXCK.gif&quot; alt=&quot;Unicycle Robots&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have glossed over the challenges of noisy sensor and actuators, but the core idea has been presented--both triangulation and control should be possible in simulation, and with a little tweaking, it should work on a physical system.&lt;/p&gt;&#xA;" OwnerUserId="9585" LastEditorUserId="9585" LastEditDate="2016-07-11T20:28:07.430" LastActivityDate="2016-07-11T20:28:07.430" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10263" PostTypeId="2" ParentId="10256" CreationDate="2016-07-12T14:00:15.150" Score="0" Body="&lt;p&gt;&lt;a href=&quot;http://openrave.org/&quot; rel=&quot;nofollow&quot;&gt;OpenRave&lt;/a&gt; is another good library that will calculate dynamic torques.  Use the &lt;a href=&quot;http://openrave.org/docs/latest_stable/coreapihtml/classOpenRAVE_1_1KinBody.html#a9a94b930b993ed73c69b366f681f2e73&quot; rel=&quot;nofollow&quot;&gt;ComputeInverseDynamics&lt;/a&gt; function.  Here is a python example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;robot.SetDOFValues(dofvalues)&#xA;robot.SetDOFVelocities(dofvelocities)&#xA;torques = robot.ComputeInverseDynamics(dofaccelerations)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;or&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;torqueconfiguration, torquecoriolis, torquegravity = robot.ComputeInverseDynamics(dofaccelerations,None,returncomponents=True)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="110" LastActivityDate="2016-07-12T14:00:15.150" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10264" PostTypeId="2" ParentId="10252" CreationDate="2016-07-13T06:40:37.793" Score="4" Body="&lt;p&gt;I think that &lt;a href=&quot;http://www-personal.umich.edu/~ykoren/uploads/The_Vector_Field_HistogramuFast_Obstacle_Avoidance.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;vector field histogram&lt;/a&gt; method should be a good solution here. It's a method of local motion planning (avoiding local obstacles while navigating to a global target). It involves mapping measurements into cartesian &lt;a href=&quot;https://en.wikipedia.org/wiki/Occupancy_grid_mapping&quot; rel=&quot;nofollow noreferrer&quot;&gt;occupancy grid&lt;/a&gt;, and making a polar obstacle density histogram from that grid. Later the direction with lowest obstacle density and closest to the desired target is selected.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/kdPZR.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kdPZR.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7360" LastActivityDate="2016-07-13T06:40:37.793" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10265" PostTypeId="1" CreationDate="2016-07-13T09:20:12.027" Score="1" ViewCount="54" Body="&lt;p&gt;We know that a quadcopter needs to be tuned to its perfect PID values to minimise the pitch, roll , yaw errors and etc., Before releasing to the market will they tune every unit and ship it ? Or a any different algorithm is used which doesn’t require any tuning ? Because every motor/ESC or a chassis will not be exactly same, which will add to the noise. &lt;/p&gt;&#xA;" OwnerUserId="13407" LastActivityDate="2016-07-13T10:40:38.577" Title="How does a QuadCopter Startup work ? Will they tune every copter before releasing to market?" Tags="&lt;quadcopter&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10266" PostTypeId="2" ParentId="10265" CreationDate="2016-07-13T10:40:38.577" Score="1" Body="&lt;p&gt;If you want to build thousands of drones, you will use the same ESC, the same motor, the same chassis on each drone, with an assembly process that will make every drone identical. Therefore, you'll have less than 1% of variation on your mechanical characteristics (momentum, weight, and so on). This is far less than the variation of propellers performances due to temperature, pressure, and hydrometry. There is no reason to worry about that, automation is done to deal with it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS: it's also less important than the imperfection you introduce by tuning your drone by hand. The tuning of a PID (or any other regulator) is never perfect.&lt;/p&gt;&#xA;" OwnerUserId="7634" LastActivityDate="2016-07-13T10:40:38.577" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10267" PostTypeId="1" AcceptedAnswerId="10274" CreationDate="2016-07-13T11:45:35.380" Score="3" ViewCount="378" Body="&lt;p&gt;I am working on path planning for a 2 arm 4dof (2 dof for each arm) robot. I am currently using a centralised planning methodology (considering the multi robot system as a single one with higher dof, 4 in this case) and A* algorithm to find the shortest path. The problem with this algorithm is its high computation time.Is there any way to reduce the computation time while still obtaining the shortest route ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note:decentralised path planning is not good enough for my case.&lt;/p&gt;&#xA;" OwnerUserId="14106" LastEditorUserId="14106" LastEditDate="2016-07-14T04:47:04.657" LastActivityDate="2016-07-27T17:29:10.660" Title="Path planning of 2 arm 4dof Robot" Tags="&lt;robotic-arm&gt;&lt;motion-planning&gt;&lt;path-planning&gt;" AnswerCount="2" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="10268" PostTypeId="2" ParentId="3231" CreationDate="2016-07-13T16:08:39.103" Score="1" Body="&lt;p&gt;A linear actuator would be the ideal solution. You can find them very cheaply on sites like ebay or specialised robotics stores. If you need to keep position there are models avaliable with built in position sensors and endstops. &lt;/p&gt;&#xA;" OwnerUserId="14230" LastActivityDate="2016-07-13T16:08:39.103" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10269" PostTypeId="2" ParentId="8585" CreationDate="2016-07-13T17:12:46.227" Score="1" Body="&lt;p&gt;If you like to get rgb and depth or euclidean space coordinates of any point from the kinect sensor then you can try this code in ros node:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void&#xA;cloud_cb (const sensor_msgs::PointCloud2ConstPtr&amp;amp; input)&#xA;{&#xA; pcl::PointCloud&amp;lt;pcl::PointXYZRGB&amp;gt; output;&#xA; pcl::fromROSMsg(*input,output );&#xA; pcl::PointXYZ P[479][639];&#xA;    for(int raw = 0;raw&amp;lt;479;raw++)&#xA;    {&#xA;        for(int col = 0;col&amp;lt;639;col++)&#xA;        {&#xA;            P[raw][col] = output.at(col,raw);&#xA;        }&#xA;    }&#xA; sensor_msgs::PointCloud2 cloud;&#xA; pcl::toROSMsg(output,cloud);&#xA; pub.publish (cloud);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Here p[raw][col] is the main structure which contains the rgb data and depth along with x,y coordinate data. To access the rgb data just use &lt;code&gt;p[raw][col].r&lt;/code&gt; ... to access depth data use &lt;code&gt;p[raw][col].z&lt;/code&gt;. Was this the answer ur looming for.&lt;/p&gt;&#xA;" OwnerDisplayName="user14148" LastEditorUserId="13849" LastEditDate="2018-06-04T14:15:39.767" LastActivityDate="2018-06-04T14:15:39.767" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10270" PostTypeId="2" ParentId="10252" CreationDate="2016-07-13T17:16:59.037" Score="1" Body="&lt;p&gt;It sounds like you need a &lt;a href=&quot;http://wiki.ros.org/costmap_2d&quot; rel=&quot;nofollow noreferrer&quot;&gt;costmap&lt;/a&gt;.  I would project the 3D points down onto a 2D plane.  (At least the points that correspond to the height of your robot).  Then make an occupancy grid where each cell is labeled as either &quot;free space&quot;, &quot;obstacle&quot;, or &quot;unknown&quot;.  You'll get something like this: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/0hfDB.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0hfDB.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where white is free space, blue is obstacle, and grey is unknown.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Points from your point cloud become the &quot;obstacle&quot; class obviously.  Use simple ray tracing so that points between the robot and obstacle are &quot;free space&quot;.  And everything else is unknown.  (i.e. points beyond the obstacle or max distance of your sensor).  Then use these as costs in your A* path planner.  Allow the robot to plan paths through unknown space, but make it cost more than free space.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other notes:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Typically, you bloat the obstacle cells by at least the robot's radius so it doesn't get too close to them.&lt;/li&gt;&#xA;&lt;li&gt;You can do this probabilisticly if your robot/sensor has noise, or you are in a dynamic environment.  Here, &quot;free&quot;, &quot;obstacle&quot;, and &quot;unknown&quot; are now floating values based on a number of past sensor readings.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="110" LastActivityDate="2016-07-13T17:16:59.037" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10271" PostTypeId="2" ParentId="9842" CreationDate="2016-07-13T17:26:21.553" Score="0" Body="&lt;p&gt;I bet some simple &lt;a href=&quot;http://opencv.org/&quot; rel=&quot;nofollow&quot;&gt;OpenCV&lt;/a&gt; code could do this.  I think you would first &lt;a href=&quot;http://docs.opencv.org/master/d4/d73/tutorial_py_contours_begin.html#gsc.tab=0&quot; rel=&quot;nofollow&quot;&gt;get the endpoints of the contours&lt;/a&gt;.  Then &lt;a href=&quot;https://www.learnopencv.com/delaunay-triangulation-and-voronoi-diagram-using-opencv-c-python/&quot; rel=&quot;nofollow&quot;&gt;feed those points into the voronoi generator&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2016-07-13T17:26:21.553" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10272" PostTypeId="1" AcceptedAnswerId="10276" CreationDate="2016-07-14T04:30:38.443" Score="2" ViewCount="1062" Body="&lt;p&gt;Good day,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am currently working on an obstacle avoiding UAV using stereo vision to obtain depth maps. I noticed that the quadcopter would sometimes not steer to the correct direction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am using the &lt;strong&gt;Raspberry Pi Compute Module IO board which comes with two CSI ports&lt;/strong&gt; used with two v1 Pi Cameras.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Issue&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I soon found out that due to the latency between the cameras, the left and the right images are not in sync thus the errors in the depth map result.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Steps taken:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I noticed the image blur when moving the cameras around so I adjusted the shutter speed by setting the UV4l/raspicam driver. With the shutter speed, I also tried to increase the framerate as I've read, it improves the latency issue. In my code which uses the opencv library, I used the grab() and retrieve() commands to replace the read() command so that the frames from both cameras is grabbed at the nearest time possible however it didn't help much.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know any possible solutions?&lt;/p&gt;&#xA;" OwnerUserId="11311" LastActivityDate="2016-07-14T15:39:03.667" Title="Stereo Vision Using Compute Module: Pi camera synchronization" Tags="&lt;computer-vision&gt;&lt;stereo-vision&gt;&lt;c++&gt;&lt;opencv&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10274" PostTypeId="2" ParentId="10267" CreationDate="2016-07-14T06:10:16.687" Score="1" Body="&lt;p&gt;When I was using A* to navigate mobile robot in environment I've got this same issue. I am assuming that you are using cubic representation (nodes) of the environment where you have some cubes that represents free space and obstacles. What you can do is to increase the size of nodes that represents the environment. This way there will be less nodes the A* algorithm needs to process.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another thing you can do is to cancel nodes that are unreachable by robotic arm or nodes you don't want the arm should move in.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next thing is that after you get the path, the robotic arm will be moving as close as possible to the obstacles because in most scenarios it is the shortest path. You can solve this issue by increasing the transition value (cost) between the nodes near the obstacle.&lt;/p&gt;&#xA;" OwnerUserId="14146" LastActivityDate="2016-07-14T06:10:16.687" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10275" PostTypeId="2" ParentId="10253" CreationDate="2016-07-14T10:03:54.363" Score="3" Body="&lt;p&gt;I have been working on upgrading an autonomous robot as part of a university project for the past year. As part of my work I have been switching the old skid steering system to a new active steering one, so have some experience with both methods.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Steering accuracy&lt;/strong&gt;&lt;br/&gt;&#xA;Skid steering: Fairly good, need to use a PID loop to keep an accurate heading using a compass.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Active steering: Depends on how you are controlling it, if controlling it manually then it will be much worse than skid steering for accurate turning. When used with a control system, assuming you have some way of measuring steering angle and motor speed, it will be much more efficient, probably slower, but more accurate at keeping a heading without the need for a PID loop and compass&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Efficiency in electrical power consumption&lt;/strong&gt;&lt;br/&gt;&#xA;Skid steering: Not very good, you waste a huge amount of power every time you need to turn or correct your direction while moving. Most power is wasted when the wheels are skidding as it takes a lot of power to do so.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Active steering: Fairly good, since the motors are never fighting themselves it is much more efficient, although you do have to take into account the actuators doing the steering.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Durability and maintenance&lt;/strong&gt;&lt;br/&gt;&#xA;Skid steering: Very Robust if mechanics are done properly, the skidding puts huge loads on the axles and motors, so much sure they are up to scratch.&#xA;Maintenance is mostly making sure the tires haven't completely worn through from all the skidding!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Active steering: In my experience the added complexity leads to a huge amount that can go wrong, but again if the mechanism is well designed and components over-specced appropriately then it can be just as good as skid steering. It depends a lot on how exactly you’re doing the steering - the robot I’ve been working on has steering on the same wheels that are motorised, as well as suspension, so the mechanism is fairly complex (ball joints, double-wishbone suspension etc.) For maintenance you need to check a much larger number of parts and keep the mechanics in good shape.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Control complexity (coding and electronics)&lt;/strong&gt;&lt;br/&gt;&#xA;Skid steering: Very easy, both forward to go forward, opposite directions to turn, slow down one side to turn while moving forwards. Best manual control, but does require a PID loop and compass for holding an accurate direction when used with a control system. For drive electronics you just need motor drivers for each wheel, relative power levels are normally sufficient for steering.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Active steering: Insanely complex or easier than skid steering (depending on how you are controlling the robot!) If you are remotely controlling it and can have controls for steering angle and motor speed then it is very simple, although skid steering is still easier to drive manually. However if you want to control the steering with software and do path planning etc, it adds a lot of complexity to the control system. What angle do you turn the wheels? How fast do you turn each wheel for a given steering angle?&#xA;For drive electronics you will need a way of controlling your steering actuator and a way of knowing what position it is in. You also need to know the speed of each motor so you can control the exact speed of each one (depending on how beefy the mechanics are this might not be necessary). For the robot I am working on if you drive the motors at the wrong speeds then it will probably rip the wishbones right off the robot!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;br/&gt;&#xA;Skid steering: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Simple mechanics&lt;/li&gt;&#xA;&lt;li&gt;Simple control (both manual and autonomous)&lt;/li&gt;&#xA;&lt;li&gt;Easy to construct with good durability&lt;/li&gt;&#xA;&lt;li&gt;Inefficient power-usage&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Active steering: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Possibly complex mechanics&lt;/li&gt;&#xA;&lt;li&gt;Simple control only with steering angle feedback&lt;/li&gt;&#xA;&lt;li&gt;Lots of component probably required, so lots of maintenance&lt;/li&gt;&#xA;&lt;li&gt;Can be more efficient&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;While active steering is certainly more impressive when it works properly, it’s a lot harder to achieve with the control system alone being insanely complex. In retrospect to my own projects, I wouldn’t recommend active steering unless it’s absolutely necessary.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would however suggest some investigation into holonomic robotics. These use special wheels to allow movement in all available degrees of freedom in 2D space with the same mechanics as a skid-steering robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are some photos of the old and new robots: &#xA;Tiberius 2 - Skid steering&#xA;&lt;a href=&quot;https://i.stack.imgur.com/U7IJK.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/U7IJK.png&quot; alt=&quot;Tiberius 2 - Skid steering&quot;&gt;&lt;/a&gt;&#xA;Tiberius 3 - Fully independent suspension and steering&#xA;&lt;a href=&quot;https://i.stack.imgur.com/8z9a9.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8z9a9.jpg&quot; alt=&quot;Tiberius 3 - Fully independent suspension and active steering&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="14230" LastActivityDate="2016-07-14T10:03:54.363" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10276" PostTypeId="2" ParentId="10272" CreationDate="2016-07-14T15:39:03.667" Score="2" Body="&lt;p&gt;You need real camera synchronization which means using cameras that both have external trigger capability (it is like the &quot;remote shutter&quot; on consumer/DSLRs). What you do is feed a common trigger signal to both cameras and sync them like that down to the sub-ms level (the accuracy largely depends on the camera HW but is usually very good, usually in us).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Frame synchronization is not implemented on the RPi camera so you can not sync two cameras for stereo (even though the v1 cam OmniVision sensor had a FREX pin which was kind of external trigger - but it was neither routed out of the sensor to the camera board nor implemented in the camera driver). What you are trying to do is is SW sync both raspi cams but both modules are in &quot;free running&quot; mode (they are streaming images at given FPS each continuously) and OpenCV only grabs the last frame that was taken which is far from being synchronous capture. Your frame offset may be as high as the frame rate is, but even at 90 FPS you still have some 10 ms difference which most likely is unacceptable for an UAV application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Should you have a static environment you would not need to sync the cameras at all, but you seem to know this :). There were community attempts to frame sync the raspi cam, search for &quot;frame synchronization&quot; on the raspberrypi.org forum if you are interested.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you ask for a low cost camera with external trigger - they cost about 300 USD from Point Grey - these are scientific USB cameras. The lowest cost I found is a See3CAM_10CUG from e-con Systems which starts at about $150.&lt;/p&gt;&#xA;" OwnerUserId="1021" LastActivityDate="2016-07-14T15:39:03.667" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="10277" PostTypeId="1" CreationDate="2016-07-14T20:29:49.630" Score="2" ViewCount="285" Body="&lt;p&gt;In the “&lt;a href=&quot;http://www.irobotweb.com/~/media/MainSite/PDFs/About/STEM/Create/iRobot_Roomba_600_Open_Interface_Spec.pdf&quot; rel=&quot;nofollow&quot;&gt;iRobot_Roomba_600_Open_Interface_Spec.pdf&lt;/a&gt;” provided for the iRobot Create 2, there is a section titled “Roomba Internal Screw Boss Locations”.  It states that “Screws may be replaced with threaded standoffs.”&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know what screw/thread size of standoffs should be used to match the screw threads?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(I saw another similar thread but the only solution listed was to re-thread the holes, which I would like to avoid if at all possible.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="14238" LastEditorUserId="110" LastEditDate="2016-10-17T01:12:23.870" LastActivityDate="2018-01-10T10:34:52.890" Title="What is the thread/screw size for the iRobot Create 2 internal screw bosses described in the Open Interface Spec doc" Tags="&lt;irobot-create&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10278" PostTypeId="2" ParentId="10277" CreationDate="2016-07-15T15:01:06.600" Score="1" Body="&lt;p&gt;If it says it can be replaced with &quot;threaded standoffs&quot; then it is probably referring to the same kind of &lt;a href=&quot;https://en.wikipedia.org/wiki/Computer_case_screws&quot; rel=&quot;nofollow&quot;&gt;threaded standoffs used in computer cases&lt;/a&gt;, so probably 6-32 (most likely) or M3. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-07-15T15:01:06.600" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10279" PostTypeId="2" ParentId="10253" CreationDate="2016-07-16T03:24:19.990" Score="2" Body="&lt;p&gt;Automotive style steering can actually be simple.  The conventional car has just one motor that powers two rear non-steering wheels through a differential.  The differential solves the problem of how to compute a speed for each wheel.  The front wheels are not powered so we don't have to compute their speed.  Ackerman Steering moves the front wheels so that they are not parallel but have the extended axles of all four wheels meet at a common point.  The car drives around this point so path planning is easy except in tight quarters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem with automotive steering is that it is best suited for use by cars on roadways.  It is not symmetric forward and backward and getting to some locations and orientations is very hard (try parallel parking a normal car)   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Automotive type steering is not complex but some path planning can be.  (for example &quot;move left one foot&quot; requires some back and forth motion)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the other end of the spectrum is four wheel independent steering where each wheel has both a drive motor and a steering motor.  This machine can spin in place and drive in any direction.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A related problem is suspension.  Its first goal is to keep all four wheel in contact with the ground.  Another possible goal for higher speeds is absorbing impacts&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before you can decide what to build you need to think about the kind of TERRAIN the robot will drive over and the SPEED and also the MASS of the robot.   &lt;/p&gt;&#xA;" OwnerUserId="2609" LastActivityDate="2016-07-16T03:24:19.990" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10280" PostTypeId="2" ParentId="4831" CreationDate="2016-07-16T03:37:43.850" Score="0" Body="&lt;p&gt;You have to select the motor for the worst case.  (Assuming you cannot change your specification) it just may turn out that you have excess of speed or an excess of torque.   In your example you have selected a motor that only handles the best case.  You need a larger motor.  (or to reduce your specification or to reduce your safety factor.) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My preference would be to have available more torque than required by specification as you really should NEVER stall a motor.&lt;/p&gt;&#xA;" OwnerUserId="2609" LastActivityDate="2016-07-16T03:37:43.850" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10281" PostTypeId="2" ParentId="5156" CreationDate="2016-07-16T04:02:33.953" Score="0" Body="&lt;p&gt;You have the same exact problem that all astronomical telescope drives have.  The easiest solution is to align your axis so that one of them is EXACTLY parallel  to the Earth's pole.  Now  you only need one motor to track the sun as it moves.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second motor needs only a small range of motion and only needs to move a tiny bit every day and then it can &quot;put on the brakes&quot; literally to keep this axis from moving.  We call this the declination axis&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This type of drive moves in something like a latitude and longitude coordinate system.  They are spherical not cartesian and it make tracking the sun very simple. So simple you don't need computer control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The large motor needs to rotate about one revolution per day.  The smaller motor makes a few degrees of motion per year and then reverses.  It is mostly stationary.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You are in fact building a CLOCK and in fact in these these drives were called &quot;clock drives&quot; because SPEED is the thing you need to control not position.  The sun goes not move randomly.   A hundred years ago, before electronics were available, they used springs and pendulums to regulate the speed, just like you'd see in a large clock.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;typically the axis that is parallel with Earth's pole called the &quot;polar axis&quot; is tilted to match your latitude is fitted with a large worm gear.  Get the largest and best one you can afford.  The pinion that drives this worm uses a motor that can be very accurately speed controlled.  It will need an encoder on the motor shaft to measure speed.  You will need a feedback loop to keep the speed constant as the mechanical load changes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In any case think more about controlling exact SPEED as this drive will move very slowly and must not do so in steps or you will have huge vibration problems.  If the mass of the load is high you MUST move it continuously not in anything like small steps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One other thing:  You seem to want to move this &quot;open loop&quot;.  But why not try and track the sun with some kind of sensor?  All you need is a small tube with both ends closed.  Face one end approximately at the sun and make a tiny pinhole in the sun facing cover.  this will project a tiny dot of light on the other cover.  control the speed of your polar axis drive motor so as to keep the projected dot from moving.  Someone suggested placing an encoder on the shaft, no need when your target is so bright and easy to track.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Problems you will face:  (1) your axis is not perfectly aligned with the Earth's axis.  This means that for sure you can not use an open lop drive and WILL need to track the Sun optically.   This is another reason not to depend on a shaft mounted encoder.  Also I lied about the declination motor being able to clamp on the brakes.  That only works in the axis are perfect.  It will not be perfect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will have these problems but even worse it you try to build an &quot;X, Y&quot; type drive where one axis is vertical and the other horizontal.   You will find that your two axis are not at exactly 90 degrees and they are not pointing where you think they are. You will have to track the sun with a sun sensor less you spend a LOT of money building a very rigid and precise mechanical system&lt;/p&gt;&#xA;&#xA;&lt;p&gt;the good news is that this is a well known problem and there are many ways to go.  Computers make it cheaper then in the last century because we can build a cheap sun tracker to compensate for the faults of a less then perfect mechanical system.&lt;/p&gt;&#xA;" OwnerUserId="2609" LastEditorUserId="2609" LastEditDate="2016-07-16T04:24:29.703" LastActivityDate="2016-07-16T04:24:29.703" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10282" PostTypeId="2" ParentId="10125" CreationDate="2016-07-16T06:18:45.820" Score="0" Body="&lt;p&gt;Likely you will need to use some kind of gear reduction to multiply the torque and reduce the speed.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But to answer your question the way you work this out is one link at a time.  The fact that your arm is 5 DOF does not matter.  The link and joint farthest from the base is a 1 DOF robot.  Find the worst case which is likely with the link horizontal and holding the maximum weight in the gripper.   To find the static torque find the &quot;lever arm&quot; which is the distance from the center of mass to the joint.  Multiply this distance times the weight.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then do the above again you next link and joint is another 1 DOF robot that is holding the fist robot at the end of the link&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When yu finish you will know the torque required for a non-moving or very slowly moving 5 DOF robot arm.  Next you compute the torque required to accelerate each 1DOF robot and ad this to the above&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After you are done you need to multiply buy a safety factor.  Just double all the torques to account for friction and other losses and because you can not drive the motors at full rated power for long&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will find that you can't do this without some kind of gear reduction. likely quite a high reduction.  Gearing can help in two ways &#xA;(1) the torque is multiplied by the reduction ratio.  so you can get LOTS more torque from a smaller motor and&#xA;(2) the motor can be located closer to the base by use of belt drives or gears reducing the torque requirement of the next motor.  In other words:  Every link has a motor mounted to it.  the motor can be mounted any place in the link but you prefer to mount it nearest the &quot;base&quot;&lt;/p&gt;&#xA;" OwnerUserId="2609" LastActivityDate="2016-07-16T06:18:45.820" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10283" PostTypeId="2" ParentId="2829" CreationDate="2016-07-16T06:50:12.023" Score="1" Body="&lt;p&gt;You will need BOTH.  Use encoder sensors on the wheels one for each side.  These will allow a PID controller to maintain wheel speed even with the variable mechanical loads on an uneven terrain.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The heading sensor (IMU) will need gyros too and maybe a magnetic compass to correct for drift in the gyros.  You will need a PID controllerl that looks at the difference between commanded heading and the heading as measured by the IMU this PID will adjust the target speeds of the two wheel PIDs&lt;/p&gt;&#xA;" OwnerUserId="2609" LastActivityDate="2016-07-16T06:50:12.023" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10284" PostTypeId="1" AcceptedAnswerId="10303" CreationDate="2016-07-16T17:47:04.150" Score="0" ViewCount="139" Body="&lt;p&gt;I'm trying to build my own motorised camera gimbal using a BLDC like &lt;a href=&quot;http://www.aliexpress.com/store/product/2pcs-Ipower-brushless-motor-2804-100T-hollow-shaft-free-shipping/1755685_32355221325.html&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt;, where the shaft is hollow. Does anyone know how the camera platform should be mounted? Should a shaft be somehow pressed into the hole?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any thought appreciated.&lt;/p&gt;&#xA;" OwnerUserId="11489" LastActivityDate="2016-07-19T11:19:16.730" Title="Mounting a gimbal BLDC motor" Tags="&lt;brushless-motor&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2016-07-21T12:55:00.910" ContentLicense="CC BY-SA 3.0" />
  <row Id="10285" PostTypeId="1" CreationDate="2016-07-17T05:13:06.993" Score="1" ViewCount="6378" Body="&lt;p&gt;I am using a L298n IC and (not a driver shield) and an Arduino.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to know how to use the IC with the Arduino to run a six wire stepper motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could I have a detailed explanation for wiring the IC connections on the breadboard and the Arduino?&lt;/p&gt;&#xA;" OwnerUserId="11017" LastEditorUserId="9176" LastEditDate="2017-06-04T11:31:13.793" LastActivityDate="2017-06-04T11:31:13.793" Title="Using a six wire stepper motor with L298n" Tags="&lt;stepper-motor&gt;" AnswerCount="2" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="10286" PostTypeId="1" CreationDate="2016-07-17T05:27:29.520" Score="3" ViewCount="1105" Body="&lt;p&gt;first off, just to be transparent, I'm a total newbie when it comes to DC motors (and pretty much anything robotic). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've got a couch that's right up to a window with the lever type openings (anderson windows). With the couch, I have no clearance to turn the lever to open it. Given I've replaced most of my house switches/outlets with home automatable ones, I figured I'd see if I can build myself a small motor that I can automate to open these also. To be absolutely honest, I've got no clue where to start. I have no problem with coding the automation part, but I don't even know what kind of motors to look for that would be able to turn my knob (or rather how to actuate the thing my knob connects to)...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Help!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks :)&lt;/p&gt;&#xA;" OwnerUserId="14254" LastActivityDate="2016-07-18T12:59:37.737" Title="Question about what motor to use for opening window" Tags="&lt;motor&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10290" PostTypeId="2" ParentId="10286" CreationDate="2016-07-17T18:28:48.460" Score="2" Body="&lt;p&gt;The standard way to control a window in the industry is actually with a linear chain actuator. I am in the construction business, and linear chain actuators are often used to control skylights. They are easy to set a repeatable distance, typically have a pin at the end with can disconnect the window from the system easily, and are time proven in the field. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;DC motors would require a feedback loop, which I think is overkill for this, not to mention that casement style windows like this require a fair amount of torque, so a dc motor this size might get a little on the heavy/expensive side. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Steppers would work well, except for the fact that they can skip steps, and are somewhat loud.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may be able to adapt an electric skylight opener. Also look into installing a rain sensor, that will close the window if it detects moisture.&lt;/p&gt;&#xA;" OwnerUserId="13204" LastEditorUserId="13204" LastEditDate="2016-07-18T10:57:40.463" LastActivityDate="2016-07-18T10:57:40.463" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10291" PostTypeId="2" ParentId="9297" CreationDate="2016-07-17T20:13:06.663" Score="0" Body="&lt;p&gt;&lt;strong&gt;Quaternions&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mathematical definition&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\mathcal{H} := \{ h_{1} + h_{2}i + h_{3}j + h_{4}k : h_{1},h_{2},h_{3},h_{4} \in \Re$ and $ i^{2} = j^{2} = k^{2} = ijk = -1  \}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A pure quaternion can be defined as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\mathcal{H}_{p} := \{ p \in \mathcal{H} : Re(p)=0\}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pure quaternions can be associated to vectors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Translation&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since pure quaternions are directly related to vectors, you can add two pure quaternions to form a third one.  Observe the figure, were we represent a pure quaternion and the real axis is omitted: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/IbfuE.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/IbfuE.jpg&quot; alt=&quot;Translation quaternion p&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Rotation&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A general rotation of $\phi$ around an arbitrary unit norm rotation axis n is givem by:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/y64Xh.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/y64Xh.jpg&quot; alt=&quot;Quaternion rotaiton by an arbitrary axis n&quot;&gt;&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;QUESTION 1: Given $q_{2}$ and $q_{3}$ how can I find $q_{1}$?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If $q_{3} = q_{1}q_{2}$ and they are rotation quaternions:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$q_{3} = q_{2}q_{1}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$q_{3}q_{2}^{*} = q_{1}q_{2}q_{2}^{*}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since $q_{2}^{*}q_{2} = 1 = q_{2}q_{2}^{*}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$q_{1} = q_{3}q_{2}^{*}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;were the * states for the conjugate of a quaternion.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;QUESTION 2: How to find a rotation angle over some other vector, given rotation quaternion? For example I want to find on what angle does $q_{3}$ turned over 2i+j−k quaternion.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If your vector is represented by $n$ and you know the $r$, your rotation angle will be the double of the angle you see.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Example:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$n = i + 0j + 0k$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$r$ = $q_{1} = cos(\frac{\pi}{4}) + sin(\frac{\pi}{4})i$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;from the formula presented in the section of &lt;strong&gt;rotation&lt;/strong&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\frac{\phi}{2} = \frac{\pi}{4}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\phi = \frac{\pi}{2}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope that was useful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Best regards&lt;/p&gt;&#xA;" OwnerUserId="11582" LastActivityDate="2016-07-17T20:13:06.663" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10292" PostTypeId="2" ParentId="9842" CreationDate="2016-07-17T21:51:01.903" Score="0" Body="&lt;p&gt;In advance, that you need the Voronoi diagram for motion planning, here is an RRT implementation in matlab: &lt;a href=&quot;http://arms.nu.edu.kz/research/matlab-toolbox-rrt-based-algorithms&quot; rel=&quot;nofollow&quot;&gt;http://arms.nu.edu.kz/research/matlab-toolbox-rrt-based-algorithms&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have created a Python implementation which is until now not available on github but follows the idea of LaVelles paper &quot;Rapidly-Exploring Random Trees: A New Tool for Pathplanning&quot; (1998). My implementation not only samples the state-space of a 2d maze, but also uses a underlying physics engine for motion prediction. It was programmed in under 200 Lines of code with the help of the eclipse IDE and is capable to drive a robot to every point in the maze. It's a little bit like the famous A* pathplanning algorithm but it's more general and has a probabilistic background. &lt;/p&gt;&#xA;" OwnerUserId="14262" LastEditorUserId="37" LastEditDate="2016-07-27T10:45:38.133" LastActivityDate="2016-07-27T10:45:38.133" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10293" PostTypeId="2" ParentId="10286" CreationDate="2016-07-18T04:01:06.037" Score="4" Body="&lt;p&gt;The other answers advocate the use of stepper motors.  They can be easy to control by just sending a certain number of pulses to the stepper controller.  However, they do not guarantee that you will not attempt to overtravel the mechanism.  Steppers can slip, or miss steps, if the torque is marginal.  If that happens going one direction, you will likely try to overtravel in the return direction. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know of any motor that is easier for a newbie to control than a brushed dc motor.   To get it to rotate you just apply the proper voltage across the windings.  This is easily done using a relay.   Rotation in the other direction is accomplished by applying the same voltage, but opposite polarity, to the same windings.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you needed to control the motion profile accurately then you'd need some sort of position feedback, such as an encoder.  If this was the case then steppers would be more relevant. But your application does not require that.  You simply need a switch to be made when the window is opened, and another switch when the window is closed.   Simple.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Be careful, though.  Manually opening and closing the window lets the operator stop motion if pets or fingers are in the way.  By doing this automatically you need to make sure no fingers or tails will be chopped off by the motion.   That is a bigger challenge unless you will always be present and watching the window when you open or close it.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In response to the question you ask in the comment (&quot;Do they provide some feedback back to the code if, for example, something was holding the window back?&quot;):  you can monitor the current to the motor.  That is proportional to the motor's torque.  This signal is usually pretty noisy, though, so you would likely need to low-pass filter it either using a capacitor, or in your software.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastEditorUserId="11125" LastEditDate="2016-07-18T12:59:37.737" LastActivityDate="2016-07-18T12:59:37.737" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10294" PostTypeId="1" CreationDate="2016-07-18T08:01:23.277" Score="3" ViewCount="326" Body="&lt;p&gt;Consider multiple mobile bases driving around in some area. In order to get meaningful data from the lidar of each base, the sensors should be mounted as horizontal as possible. Due to safety regulations, the lidars should also be mounted at a height of 15 cm from the floor. When I checked the data sheet of SICK lidars, it shows that all models use the wavelength 904 nm. Does that mean that mobile bases equipped with lidars with a coplanar scan lines will end up mutually blinding each other? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it is the case, how is this problem solved? (I don't consider tilting the lidars a solution as it defeats the purpose of having &quot;2D&quot; lidars where even if the tilting angle is known, what the lidar observes becomes dependent on the robot's pose and distance from eventual obstacles)&lt;/p&gt;&#xA;" OwnerUserId="4429" LastEditorUserId="4429" LastEditDate="2016-07-18T11:36:20.827" LastActivityDate="2016-07-29T15:03:57.700" Title="Lidar problems in a multi-robot setup" Tags="&lt;sensors&gt;&lt;lidar&gt;&lt;rangefinder&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10295" PostTypeId="1" CreationDate="2016-07-18T12:01:54.917" Score="0" ViewCount="1192" Body="&lt;h1&gt;Update&lt;/h1&gt;&#xA;&lt;p&gt;Hey I have the following subscriber on Nvidia TX1 board running on an agricultural robot. we have the following issue with subscribing to Sensor_msgs::Compressed:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;ImageConverter(ros::NodeHandle &amp;amp;n) :  n_(n), it_(n_)&#xA;{&#xA;  image_pub_ = it_.advertise(&amp;quot;/output_img&amp;quot;,1);&#xA;&#xA;  cv::namedWindow(OPENCV_WINDOW);&#xA;  image_transport::TransportHints TH(&amp;quot;compressed&amp;quot;);&#xA;  image_sub_compressed.subscribe(n,&amp;quot;/Logitech_webcam/image_raw/compressed&amp;quot;,5,&amp;amp;ImageConverter::imageCallback,ros::VoidPtr(),TH);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;And the callback function&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;void imageCallback(const sensor_msgs::CompressedImageConstPtr&amp;amp; msg)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;When I compile this I get an error:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;from /home/johann/catkin_ws/src/uncompressimage/src/publisher_uncompressed_images.cpp:1:&#xA;/usr/include/boost/function/function_template.hpp: In instantiation of ‘static void boost::detail::function::function_void_mem_invoker1&amp;lt;MemberPtr, R, T0&amp;gt;::invoke(boost::detail::function::function_buffer&amp;amp;, T0) [with MemberPtr = void (ImageConverter::*)(const boost::shared_ptr&amp;lt;const sensor_msgs::CompressedImage_&amp;lt;std::allocator&amp;lt;void&amp;gt; &amp;gt; &amp;gt;&amp;amp;); R = void; T0 = const boost::shared_ptr&amp;lt;const sensor_msgs::Image_&amp;lt;std::allocator&amp;lt;void&amp;gt; &amp;gt; &amp;gt;&amp;amp;]’:&#xA;/usr/include/boost/function/function_template.hpp:934:38:   required from ‘void boost::function1&amp;lt;R, T1&amp;gt;::assign_to(Functor) [with Functor = void (ImageConverter::*)(const boost::shared_ptr&amp;lt;const sensor_msgs::CompressedImage_&amp;lt;std::allocator&amp;lt;void&amp;gt; &amp;gt; &amp;gt;&amp;amp;); R = void; T0 = const boost::shared_ptr&amp;lt;const sensor_msgs::Image_&amp;lt;std::allocator&amp;lt;void&amp;gt; &amp;gt; &amp;gt;&amp;amp;]’&#xA;/usr/include/boost/function/function_template.hpp:722:7:   required from ‘boost::function1&amp;lt;R, T1&amp;gt;::function1(Functor, typename boost::enable_if_c&amp;lt;boost::type_traits::ice_not&amp;lt;boost::is_integral&amp;lt;Functor&amp;gt;::value&amp;gt;::value, int&amp;gt;::type) [with Functor = void (ImageConverter::*)(const boost::shared_ptr&amp;lt;const sensor_msgs::CompressedImage_&amp;lt;std::allocator&amp;lt;void&amp;gt; &amp;gt; &amp;gt;&amp;amp;); R = void; T0 = const boost::shared_ptr&amp;lt;const sensor_msgs::Image_&amp;lt;std::allocator&amp;lt;void&amp;gt; &amp;gt; &amp;gt;&amp;amp;; typename boost::enable_if_c&amp;lt;boost::type_traits::ice_not&amp;lt;boost::is_integral&amp;lt;Functor&amp;gt;::value&amp;gt;::value, int&amp;gt;::type = int]’&#xA;/usr/include/boost/function/function_template.hpp:1069:16:   required from ‘boost::function&amp;lt;R(T0)&amp;gt;::function(Functor, typename boost::enable_if_c&amp;lt;boost::type_traits::ice_not&amp;lt;boost::is_integral&amp;lt;Functor&amp;gt;::value&amp;gt;::value, int&amp;gt;::type) [with Functor = void (ImageConverter::*)(const boost::shared_ptr&amp;lt;const sensor_msgs::CompressedImage_&amp;lt;std::allocator&amp;lt;void&amp;gt; &amp;gt; &amp;gt;&amp;amp;); R = void; T0 = const boost::shared_ptr&amp;lt;const sensor_msgs::Image_&amp;lt;std::allocator&amp;lt;void&amp;gt; &amp;gt; &amp;gt;&amp;amp;; typename boost::enable_if_c&amp;lt;boost::type_traits::ice_not&amp;lt;boost::is_integral&amp;lt;Functor&amp;gt;::value&amp;gt;::value, int&amp;gt;::type = int]’&#xA;/home/johann/catkin_ws/src/uncompressimage/src/publisher_uncompressed_images.cpp:27:126:   required from here&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The red error statement was:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;/usr/include/boost/function/function_template.hpp:225:11: error: no match for call to ‘(boost::_mfi::mf1&amp;lt;void, ImageConverter, const boost::shared_ptr&amp;lt;const sensor_msgs::CompressedImage_&amp;lt;std::allocator&amp;lt;void&amp;gt; &amp;gt; &amp;gt;&amp;amp;&amp;gt;) (const boost::shared_ptr&amp;lt;const sensor_msgs::Image_&amp;lt;std::allocator&amp;lt;void&amp;gt; &amp;gt; &amp;gt;&amp;amp;)’&#xA;           BOOST_FUNCTION_RETURN(boost::mem_fn(*f)(BOOST_FUNCTION_ARGS));&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I am not using BOOST, and searching around hasn't helped me solve it&lt;/p&gt;&#xA;" OwnerUserId="14269" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2016-07-24T13:28:08.377" Title="CompressedImage to an Image in a node" Tags="&lt;ros&gt;&lt;c++&gt;&lt;opencv&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="10296" PostTypeId="1" CreationDate="2016-07-18T13:31:29.140" Score="0" ViewCount="4525" Body="&lt;p&gt;I am working on a differential drive robot with two motor wheels with encoders and caster wheels. The robot also has an Intel RealSense depth camera.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I launch RVIZ: The Global option &gt; Fixed frame is set to &lt;code&gt;Base_link&lt;/code&gt; and shows all the transforms for the differential driver nodes. But an error appears for the Depth camera nodes with message saying:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;No transform from Camera_depth_frame to baselink&#xA;No transform from Camera_depth_optical_frame to baselink&#xA;No transform from Camera_link to baselink&#xA;No transform from Camera_rgb_frame to baselink&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If I change the Global option &gt; fixed frame to &lt;code&gt;Camera_link&lt;/code&gt;, I can see all the transforms for the depth camera but now the differential drive transforms are not available&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope you can help.&lt;/p&gt;&#xA;" OwnerUserId="14270" LastEditorUserId="158" LastEditDate="2016-12-22T23:10:07.010" LastActivityDate="2018-06-01T11:01:09.447" Title="RVIZ Transform error Base_link and Camera_link" Tags="&lt;ros&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10297" PostTypeId="1" AcceptedAnswerId="10299" CreationDate="2016-07-18T14:06:42.963" Score="0" ViewCount="64" Body="&lt;p&gt;I accidentally ended up supplying 12 v to the Arduino 5v output pin instead of the Vin pin. Does that mean that I can't use the 5v output pin anymore i.e. its fried?&lt;/p&gt;&#xA;" OwnerUserId="13967" LastActivityDate="2016-07-18T14:33:02.523" Title="12 volt input to 5 volt ouput of Arduino" Tags="&lt;arduino&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10298" PostTypeId="2" ParentId="10294" CreationDate="2016-07-18T14:28:25.163" Score="2" Body="&lt;p&gt;I wouldn't recommend using sensors with different laser frequencies either, because that likely means using an entirely different product, with different accuracy and other properties.&lt;/p&gt;&#xA;&lt;h2&gt;don't tilt, shift&lt;/h2&gt;&#xA;&lt;p&gt;I think the idea of tilting a laser scanner is very problematic, especially with a height constraint like you have. But what about shifting the scanner up or down in each unit?&lt;/p&gt;&#xA;&lt;p&gt;Let's say if a scanner does not interfere with another one if it's 1 cm above the other. You can give the scanner on each robot a unique height they can operate on without causing any problems.&lt;/p&gt;&#xA;&lt;p&gt;This solution is limited to a small number of robots, depending on the height difference necessary between two sensors and the available height on your robots.&lt;/p&gt;&#xA;&lt;h2&gt;scan sequentially&lt;/h2&gt;&#xA;&lt;p&gt;Given that you have established communication between the bases, each one could do its scan while the others are not using their sensor. After the scan is finished, a message is sent to the next robot.&lt;/p&gt;&#xA;&lt;p&gt;This reduces the scanning frequency as they cannot happen in parallel. Depending on the range of the laser scanner, the size of the area and distribution of robots, this could be compensated by the fact that each robot scans the other one as an &amp;quot;obstacle&amp;quot;. Each robot could estimate the new positions of all robots it sees and message that information to others after it did its scan. This can be tricky when it comes to identifying the other robots from the scan and if one robot could occlude another one.&lt;/p&gt;&#xA;&lt;h2&gt;shared pose knowledge&lt;/h2&gt;&#xA;&lt;p&gt;If each robot knows the poses of all other robots, it can exclude sensor readings from those directions. Depending on the situation, careful sanity checks might be necessary before excluding sensor data.&lt;/p&gt;&#xA;&lt;p&gt;Otherwise an obstacle that's exactly between two robots would be &amp;quot;seen&amp;quot; by either one because sensor values detecting it were discarded for being &amp;quot;in the shadow&amp;quot; of the other robot.&lt;/p&gt;&#xA;&lt;h2&gt;give it a try&lt;/h2&gt;&#xA;&lt;p&gt;I'm not exactly sure how those scanners work in detail. Does both the laser and sensor rotate? Or are they omnidirectional? Or is either one omnidirectional?&lt;/p&gt;&#xA;&lt;p&gt;Maybe having all sensors on the same height isn't that much of a problem unless two of them face each other exactly, which appears to be unlikely and even in case of failure would only falsify a few measurements. With the strategy of shared knowledge of the poses of the robots mentioned above, it should be possible to filter those measurements out.&lt;/p&gt;&#xA;&lt;h2&gt;ask sick&lt;/h2&gt;&#xA;&lt;p&gt;This is not some DIY hack, but product sold by a competent company. If in doubt about possible problems with their products, contact SICK and explain your project in detail with all the requirements and the issue that could arise. I'm sure they are willing to help you with their expertise given that you want to buy (or have bought) several sensor units from them. Even if not, it's definitely worth a try.&lt;/p&gt;&#xA;" OwnerUserId="9860" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2016-07-18T14:28:25.163" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10299" PostTypeId="2" ParentId="10297" CreationDate="2016-07-18T14:33:02.523" Score="5" Body="&lt;p&gt;Nobody can tell how much magic smoke is still in the device. You need a magic smoke detector (rarely also referred to as a &quot;voltmeter&quot;), hook one of its contacts up to the pin that should have 5 volts of smoke come out of it and the other to ground. If the detector says there are still 5v, you are probably in luck.&lt;/p&gt;&#xA;" OwnerUserId="9860" LastActivityDate="2016-07-18T14:33:02.523" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="10300" PostTypeId="2" ParentId="10277" CreationDate="2016-07-18T19:00:03.097" Score="1" Body="&lt;p&gt;The screws that Roomba uses are special for going into plastic.  They are very similar to a #4 sheet metal screw.  So I don't think you are going to match the thread size exactly, but it doesn't matter.  As long as you don't plan on screwing and unscrewing the screws which will wear out the bosses.  Pretty much any screw with the right diameter will work because you are only going into plastic.  A #4 machine screw also works well.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2016-07-18T19:00:03.097" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10301" PostTypeId="1" AcceptedAnswerId="10304" CreationDate="2016-07-19T08:51:34.340" Score="-3" ViewCount="193" Body="&lt;p&gt;i am studying bacholar of dental surgery but have intrest in learning this subjet so tell me about a good book to read.&lt;/p&gt;&#xA;" OwnerUserId="14274" LastActivityDate="2016-07-20T03:30:36.180" Title="what books do you suggest for a beginner like me ?" Tags="&lt;mobile-robot&gt;" AnswerCount="2" CommentCount="3" ClosedDate="2016-07-19T13:36:35.423" ContentLicense="CC BY-SA 3.0" />
  <row Id="10302" PostTypeId="2" ParentId="10301" CreationDate="2016-07-19T09:41:13.647" Score="0" Body="&lt;p&gt;Most introduction courses which are held on schools and universities are practical oriented. They use out-of-box robotics sets like Lego Mindstorms, Aldebaran Nao or Baxter Robot. On the topics of robotics there are many good books out there for theoretical advice. Most dominant is &quot;Artificial Intelligence: A Modern Approach&quot;. A nice ressource for additional information is Google Scholar. At the beginning i would suggest to search for paper which are using computergames like Mario AI or Starcraft AI for implementing algorithms.&lt;/p&gt;&#xA;" OwnerUserId="14275" LastEditorUserId="14276" LastEditDate="2016-07-20T03:30:36.180" LastActivityDate="2016-07-20T03:30:36.180" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="10303" PostTypeId="2" ParentId="10284" CreationDate="2016-07-19T11:19:16.730" Score="0" Body="&lt;p&gt;On gimbal motors, the two sides of the motor casing are the mounting points. The hollow shaft allows you to feed wiring through the motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you look at the motor you have linked more carefully the two sides are split and have bolt holes on them. So you just mount the motor with those.&lt;/p&gt;&#xA;" OwnerUserId="14230" LastActivityDate="2016-07-19T11:19:16.730" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10304" PostTypeId="2" ParentId="10301" CreationDate="2016-07-19T13:08:15.253" Score="2" Body="&lt;p&gt;If you only want a single comprehensive text on Robotics, I would recommend the Springer &lt;em&gt;Handbook of Robotics&lt;/em&gt;. I covers everything from controls and artificial intelligence to perception and mechanics; it is a phenomenal touchstone for further reading and is authored by the best minds in each sub-discipline in robotics. Of particular relevance to your background, there is significant coverage given to medical robotics, which you might find interesting.   &lt;/p&gt;&#xA;" OwnerUserId="9585" LastActivityDate="2016-07-19T13:08:15.253" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10305" PostTypeId="2" ParentId="9972" CreationDate="2016-07-19T13:19:34.950" Score="1" Body="&lt;p&gt;Opcode 163 has a known bug in it and should not be used.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2016-07-19T13:19:34.950" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10306" PostTypeId="2" ParentId="9620" CreationDate="2016-07-19T13:31:55.267" Score="0" Body="&lt;p&gt;The paper uses a mathematical formula for predicting the consequences of actions. That makes it difficult to debug possible failures. Improvement would be to use a physics engine like Box2D to predict actions. The advantage is, that prediction and controller are separated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Update:&#xA;Optimal Control is done with a forward model. (From the current situation a projection is made into future). I'm not sure how this can be done with &quot;Rk=[rk,…,rk+N]T&quot;.&lt;/p&gt;&#xA;" OwnerUserId="14276" LastEditorUserId="14283" LastEditDate="2016-07-25T20:08:29.077" LastActivityDate="2016-07-25T20:08:29.077" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10307" PostTypeId="2" ParentId="10296" CreationDate="2016-07-19T16:46:55.503" Score="1" Body="&lt;p&gt;You need to tell ROS the relationship between the camera frame the robot base. If you have a URDF model of your robot, add the Camera_link to the model and link it to the base.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you don't have a URDF model, I think you can broadcast the transform yourself. See &lt;a href=&quot;http://wiki.ros.org/tf/Tutorials/Writing%20a%20tf%20broadcaster%20(C%2B%2B)&quot; rel=&quot;nofollow&quot;&gt;this tutorial&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="11851" LastActivityDate="2016-07-19T16:46:55.503" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10309" PostTypeId="2" ParentId="9620" CreationDate="2016-07-20T15:04:41.480" Score="1" Body="&lt;p&gt;I found the solution to my problem : I was misunderstanding $R_k$ notation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$r_k:$ the reference vector $r_k = (0, \psi_k)^T$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$R_k = \begin{bmatrix} r_k, \ldots, r_{k+N}\end{bmatrix}^T$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To compute $R_k$, I was replacing each value of $r_k$ and then, doing the transpose. But instead I have to do the transpose first, and then replace the values of $r_k$. Doing this, I get $R_k$ a (22x1) matrix and the computation works.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did some tests with Matlab, but didn't manage to really make it work and as I didn't have the time to continue to work on it, it's in stand by. Anyway, if someone reading this, managed or trying to make a similar algorithm work, I'm interested to talk about it (but this is out of the scope of my original question).&lt;/p&gt;&#xA;" OwnerUserId="13430" LastActivityDate="2016-07-20T15:04:41.480" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10310" PostTypeId="2" ParentId="209" CreationDate="2016-07-20T15:32:31.760" Score="1" Body="&lt;p&gt;In case you have some information from other sensors available (e.g. odometry from wheel encoders) you could use this when the rigid body transformation that the laserScanner suggests is far off.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Remember that on the long trajectories the odometry path diverges from the ground truth but locally it is pretty accurate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS. This is quite an interesting question so do let us know how you did it in case you actually solved the problem..&lt;/p&gt;&#xA;" OwnerUserId="10729" LastActivityDate="2016-07-20T15:32:31.760" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10311" PostTypeId="2" ParentId="8387" CreationDate="2016-07-20T17:08:39.983" Score="0" Body="&lt;p&gt;@chuck: thanks for reading my answer and give advice that there is room for improvement. I would like to try out the edit button to improve my answer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But to the topic:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A lock into history of optimal control may help to answer the question. A classical problem which is over 200 years old is the two body problem. Later in 1760 Leonhard Euler described the three-body-problem. In both cases, a mathematical system is used for describing the problem itself. The formula which describes the three body problem and the problem from the original post also are called &quot;ordinary differential equation&quot; (ODE). The solution for solving these kind of problem is to use a transfer function which is a backward ODE.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In robotics for most problems such a backward function is impossible to create because the mathematical theory has no answer. So in most cases the three-body-problem and also robotics problems are solved with numerical solver which are not very elegant but uses bruteforce searching to detemine the parameter.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Could you help me how I will implement it? &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Optimal Control with obstacle avoidance can only be done with a numerical solver like A* or others. It is not poassible to use a ODE for this kind of task, it is a np-hard problem. An example implementation in matlab is done &lt;a href=&quot;http://tomopt.com/docs/propt/tomlab_propt075.php&quot; rel=&quot;nofollow&quot;&gt;by&lt;/a&gt;. The author used the &quot;OPTRAGEN 1.0 A MATLAB Toolbox for Optimal Trajectory Generation&quot; for generating trajectory between obstacles.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastEditorUserId="10596" LastEditDate="2016-09-23T12:40:35.713" LastActivityDate="2016-09-23T12:40:35.713" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="10312" PostTypeId="1" AcceptedAnswerId="10315" CreationDate="2016-07-20T17:25:12.140" Score="5" ViewCount="6375" Body="&lt;p&gt;I am currently busy with a final year project which requires me to track people walking through a doorway.&#xA;I initially thought this may be possible using a normal camera and using some motion detection functions given in OpenCV, I have however come to the conclusion that the the camera is mounted too low for this to work effectively.(Height shown in the image below)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/CZbkH.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/CZbkH.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have now been looking into using a 3D camera or a stereo camera to try and get around this problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have seen similar examples where a Kinect(from Xbox 360) has been used to generate a depth map which is then processed and used to do the tracking, this was however done from a higher vantage point, and I found that the minimum operating range of the Kinect is 0.5m.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From what I have found, the Kinect uses an IR projector and receiver to generate its depth map, and have been looking at the Orbbec Astra S which uses a similar system and has a minimum working distance of 0.3m.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question now:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What exactly would the difference be between the depth maps produced by a 3D camera that uses an IR projector and receiver, and a stereo camera such as the DUO/ZED type options?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am just looking for some insight from people that may have used these types of cameras before&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On a side note, am i going about this the right way? or should i be looking into Time of Flight Cameras instead? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;----EDIT----:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My goal is to count the people moving into and out of the train doorway. I began this using OpenCV, initially with a background subtraction and blob detection method. This only worked for one person at a time and with a test video filmed at a higher vantage point as a &quot;blob-merging&quot; problem was encountered as shown in the left image below.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the next method tested involved an optical flow method using motion vectors obtained from OpenCV's dense optical flow algorithm.&#xA;From which i was able to obtain motion vectors from the higher test videos and track them as shown in the middle image below, because of the densely packed and easily detected motion vectors it was simple to cluster them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But when this same system was attempted with footage taken from inside a train at a lower height, it was unable to give a consistant output. My thoughts of the reasons for this was because of the low height of the camera, single camera tracking is able to function when there is sufficient space between the camera and the top of the person. But as the distance is minimized, the area of the frame that the moving person takes up becomes larger and larger, and the space to which the person can be compared is reduced (or atleast that is how I understand it). Below on the right you can see how in the image the color of the persons clothing is almost uniform, Optical flow is therefore unable to detect it as motion in both cases.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/i8Rvu.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/i8Rvu.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I only started working with computer vision a few months ago so please forgive me if I have missed some crucial aspects.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From what i have seen from research, most commercial systems make used of a 3D cameras, stereo cameras or Time-of-Flight cameras, but I am unsure as to how the specifics of each of these would be best suited for my application.&lt;/p&gt;&#xA;" OwnerUserId="14285" LastEditorUserId="14285" LastEditDate="2016-07-20T22:05:43.417" LastActivityDate="2016-07-21T14:30:06.120" Title="Difference between 3D Camera(using IR projection) and Stereo Camera?" Tags="&lt;computer-vision&gt;&lt;cameras&gt;&lt;stereo-vision&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="10314" PostTypeId="1" CreationDate="2016-07-21T05:39:21.457" Score="0" ViewCount="172" Body="&lt;p&gt;I'm using OpenRAVE to simulate a quadruped, in order to get an idea of torque requirements. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To get started I made a single DOF, single link pendulum to test controllers etc out on.&#xA;I've whipped up an inverse dynamics based PD controller using ComputeInverseDynamics(), which I set the outputs using SetDOFTorques(). I then set a desired position, with the desired velocity being zero. This all appears to work well and I can start the simulation, with the pendulum driving up to the desired position and settling. &#xA;My concern is the value of the output torques. My pendulum is modeled as a simple box of length 1, mass manually set to 1, with a COM of 0.5.&#xA;When I run my simulation, I output the gravity component from ComputeInverseDynamics(). This gives 4.9NM, which matches up with hand calculated torques I expect from the pendulum (eg the static case) when it is driven to the desired position (from down to horizontal).&#xA;But the output torques to SetDOFTorques() are much higher and vary depending what I set the simulation timestep to.&#xA;If I maintain a controller update rate of 0.001 seconds, then for a simulation update of 0.0001 seconds, my output torque is approximately 87NM. If I alter the simulation timestep to 0.0005 seconds, keeping the controller rate the same the output torques drop down to about 18NM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As an experiment I removed the inverse dynamics controller and replaced it with a plain PD controller, but I still see large output torques.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone shed some light on this? It's very possible I'm missing something here!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks very much&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edits:&#xA;I'm adding the main section of my code. There is no trajectory generation, really. I'm just trying to get to a fixed static position.&#xA;In the code, if I keep dt fixed, and alter env.StartSimulation(timestep=0.0001), I get the issues popping up.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;with env:&#xA;    robot = env.GetRobots()[0]&#xA;    robot.GetLinks()[0].SetStatic(True)&#xA;    env.StopSimulation()&#xA;    env.StartSimulation(timestep=0.0001)&#xA;&#xA;dt = 0.001&#xA;w = 100&#xA;eta = 5&#xA;Kp = [w*w]&#xA;Kv = [2*eta*w]&#xA;# Desired pos, vel and acc &#xA;cmd_p = [3.14/2]&#xA;cmd_v = [0]&#xA;cmd_a = [0]&#xA;&#xA;while True:    &#xA;    with env:&#xA;        torqueconfiguration, torquecoriolis, torquegravity = robot.ComputeInverseDynamics([1],None,returncomponents=True)&#xA;        err_p = cmd_p - robot.GetDOFValues()&#xA;        err_v = cmd_v - robot.GetDOFVelocities()&#xA;&#xA;        # ID Controller&#xA;        M = compute_inertia_matrix(robot, robot.GetDOFValues())&#xA;        a_cmd = (Kp*err_p + Kv*err_v + cmd_a)&#xA;        taus = torquegravity + torquecoriolis +  M.dot(a_cmd.transpose()).transpose()&#xA;&#xA;        # Just PD(ish) controller&#xA;        #taus = Kp*err_p - Kv*robot.GetDOFVelocities()&#xA;&#xA;        with robot:&#xA;            robot.SetDOFTorques(taus,False)     # True = use limits&#xA;            print (taus, torquegravity+torquecoriolis, a_cmd, M.dot(a_cmd.transpose()).transpose())&#xA;    time.sleep(dt)&#xA;&#xA;&#xA;# https://scaron.info/teaching/equations-of-motion.html&#xA;def compute_inertia_matrix(robot, q, external_torque=None):&#xA;    n = len(q)&#xA;    M = np.zeros((n, n))&#xA;    with robot:&#xA;        robot.SetDOFValues(q)&#xA;        for (i, e_i) in enumerate(np.eye(n)):&#xA;            m, c, g = robot.ComputeInverseDynamics(e_i, external_torque, returncomponents=True)&#xA;            M[:, i] = m&#xA;    return M&#xA;&#xA;&#xA;&#xA;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;&#xA;&amp;lt;Robot name=&quot;Pendulum&quot;&amp;gt;&#xA;    &amp;lt;RotationAxis&amp;gt;0 1 0 90&amp;lt;/RotationAxis&amp;gt; &amp;lt;!-- makes the pendulum vertical --&amp;gt;&#xA;    &amp;lt;KinBody&amp;gt;&#xA;        &amp;lt;!-- &amp;lt;Mass type=&quot;mimicgeom&quot;&amp;gt;&amp;lt;density&amp;gt;100000&amp;lt;/density&amp;gt;&amp;lt;/Mass&amp;gt; --&amp;gt;&#xA;        &amp;lt;Body name=&quot;Base&quot; type=&quot;dynamic&quot;&amp;gt;&#xA;            &amp;lt;Translation&amp;gt;0.0  0.0  0.0&amp;lt;/Translation&amp;gt;&#xA;            &amp;lt;Geom type=&quot;cylinder&quot;&amp;gt;&#xA;                &amp;lt;rotationaxis&amp;gt;1 0 0 90&amp;lt;/rotationaxis&amp;gt;&#xA;                &amp;lt;radius&amp;gt;0.3&amp;lt;/radius&amp;gt;&#xA;                &amp;lt;height&amp;gt;0.02&amp;lt;/height&amp;gt;&#xA;                &amp;lt;ambientColor&amp;gt;1. 0. 0.&amp;lt;/ambientColor&amp;gt;&#xA;                &amp;lt;diffuseColor&amp;gt;1. 0. 0.&amp;lt;/diffuseColor&amp;gt;&#xA;            &amp;lt;/Geom&amp;gt;&#xA;            &amp;lt;mass type=&quot;custom&quot;&amp;gt;&#xA;                &amp;lt;!-- specify the total mass--&amp;gt;&#xA;                &amp;lt;total&amp;gt;5.0&amp;lt;/total&amp;gt;&#xA;                  &amp;lt;!-- specify the 3x3 inertia matrix--&amp;gt;&#xA;                  &amp;lt;!--&amp;lt;inertia&amp;gt;2 0 0 0 3 0 0 0 5&amp;lt;/inertia&amp;gt; --&amp;gt;&#xA;                  &amp;lt;!-- specify the center of mass (if using ODE physics engine, should be 0)--&amp;gt;&#xA;                &amp;lt;com&amp;gt;0.1 0.0 0.0&amp;lt;/com&amp;gt;&#xA;                &amp;lt;/mass&amp;gt; &#xA;        &amp;lt;/Body&amp;gt;&#xA;        &amp;lt;Body name=&quot;Arm0&quot; type=&quot;dynamic&quot;&amp;gt;&#xA;            &amp;lt;offsetfrom&amp;gt;Base&amp;lt;/offsetfrom&amp;gt;&#xA;            &amp;lt;!-- translation and rotation  will be relative to Base --&amp;gt;&#xA;            &amp;lt;Translation&amp;gt;0 0 0&amp;lt;/Translation&amp;gt;&#xA;            &amp;lt;Geom type=&quot;box&quot;&amp;gt;&#xA;                &amp;lt;Translation&amp;gt;1 0 0&amp;lt;/Translation&amp;gt;&#xA;                &amp;lt;Extents&amp;gt;1 0.1 0.1&amp;lt;/Extents&amp;gt;&#xA;                &amp;lt;ambientColor&amp;gt;1. 0. 0.&amp;lt;/ambientColor&amp;gt;&#xA;                &amp;lt;diffuseColor&amp;gt;1. 0. 0.&amp;lt;/diffuseColor&amp;gt;&#xA;            &amp;lt;/Geom&amp;gt;&#xA;            &amp;lt;mass type=&quot;custom&quot;&amp;gt;&#xA;                &amp;lt;!-- specify the total mass--&amp;gt;&#xA;                &amp;lt;total&amp;gt;1.0&amp;lt;/total&amp;gt;&#xA;                  &amp;lt;!-- specify the 3x3 inertia matrix--&amp;gt;&#xA;                  &amp;lt;!--&amp;lt;inertia&amp;gt;2 0 0 0 3 0 0 0 5&amp;lt;/inertia&amp;gt; --&amp;gt;&#xA;                  &amp;lt;!-- specify the center of mass (if using ODE physics engine, should be 0)--&amp;gt;&#xA;                &amp;lt;com&amp;gt;0.5 0.0 0.0&amp;lt;/com&amp;gt;&#xA;                &amp;lt;/mass&amp;gt;             &#xA;        &amp;lt;/Body&amp;gt;&#xA;        &amp;lt;Joint circular=&quot;true&quot; name=&quot;Joint0&quot; type=&quot;hinge&quot;&amp;gt;&#xA;            &amp;lt;Body&amp;gt;Base&amp;lt;/Body&amp;gt;&#xA;            &amp;lt;Body&amp;gt;Arm0&amp;lt;/Body&amp;gt;&#xA;            &amp;lt;offsetfrom&amp;gt;Arm0&amp;lt;/offsetfrom&amp;gt;&#xA;            &amp;lt;weight&amp;gt;0&amp;lt;/weight&amp;gt;&#xA;            &amp;lt;axis&amp;gt;0 0 1&amp;lt;/axis&amp;gt;&#xA;            &amp;lt;maxvel&amp;gt;100&amp;lt;/maxvel&amp;gt;&#xA;            &amp;lt;resolution&amp;gt;1&amp;lt;/resolution&amp;gt;&#xA;        &amp;lt;/Joint&amp;gt;&#xA;    &amp;lt;/KinBody&amp;gt;&#xA;&amp;lt;/Robot&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Here is some data for dt = 0.001 and env.StartSimulation(timestep=0.0001)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this data,&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;taus is the torque command to the simulation, &lt;/li&gt;&#xA;&lt;li&gt;torquegravity+torquecoriolis is returned from the inverse dynamics &lt;/li&gt;&#xA;&lt;li&gt;a_cmd is the controller command and&lt;/li&gt;&#xA;&lt;li&gt;M*a_cmd is the command after being multiplied by the mass matrix&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The gravity and coriolis parts appear to be correct for steady state, where it should be about 4.9NM&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;taus, torquegravity+torquecoriolis, a_cmd, M*a_cmd&#xA; 3464.88331508,  0.48809828,  5329.83879509,  3464.39521681&#xA; 330.67177959,  1.47549936,  506.45581573,  329.19628023&#xA;-785.91806527,  2.45531014, -1212.88211601, -788.37337541&#xA;-1065.4689484,  3.23603844, -1644.16151823, -1068.70498685&#xA;-1027.47479809,  3.80261774, -1586.58063974, -1031.27741583&#xA;-877.83110127,  4.18635604, -1356.94993433, -882.01745731&#xA;-707.25108627,  4.4371714, -1094.9050118, -711.68825767&#xA;-554.34483533,  4.6006198, -859.91608481, -558.94545512&#xA;-432.22314217,  4.70818921, -672.20204828, -436.93133138&#xA;-327.797496,  4.7768792, -511.65288492, -332.5743752&#xA;-240.77203429,  4.82021019, -377.83422228, -245.59224448&#xA;-172.18942128,  4.84807059, -272.3653721, -177.03749186&#xA;-117.58895761,  4.86591166, -188.39210657, -122.45486927&#xA;-74.51920719,  4.87743369, -122.14867828, -79.39664088&#xA;-39.91183436,  4.88473444, -68.91779816, -44.7965688&#xA;-12.82321495,  4.88971433, -27.25066043, -17.71292928&#xA; 8.45349476,  4.89281357,  5.47797105,  3.56068118&#xA; 25.35468725,  4.89489884,  31.47659755,  20.45978841&#xA; 38.84080509,  4.896309,  52.22230167,  33.94449609&#xA; 48.72668147,  4.89724689,  67.42989936,  43.82943458&#xA; 56.78552877,  4.89790152,  79.82711885,  51.88762725&#xA; 65.515892,  4.89836756,  93.25772991,  60.61752444&#xA; 68.81359264,  4.89867903,  98.33063633,  63.91491362&#xA; 73.86961896,  4.89891052,  106.10878221,  68.97070844&#xA; 76.67416578,  4.89907489,  110.42321674,  71.77509088&#xA; 79.62549808,  4.89919702,  114.96354008,  74.72630105&#xA; 85.17343708,  4.89928669,  123.49869291,  80.27415039&#xA; 85.13686188,  4.89934963,  123.44232654,  80.23751225&#xA; 85.75675034,  4.89939931,  124.39592466,  80.85735103&#xA; 86.55192592,  4.89943807,  125.61921208,  81.65248785&#xA; 86.39672231,  4.89946802,  125.38039121,  81.49725429&#xA; 87.4299925,  4.89949202,  126.97000073,  82.53050048&#xA; 87.42776523,  4.8995098,  126.96654682,  82.52825543&#xA; 87.15472709,  4.8995251,  126.54646461,  82.255202&#xA; 86.97240783,  4.89953825,  126.26595319,  82.07286958&#xA; 86.98023044,  4.89954905,  126.27797137,  82.08068139&#xA; 86.75364661,  4.89955809,  125.92936696,  81.85408852&#xA; 86.9853716,  4.89956526,  126.28585591,  82.08580634&#xA; 88.01679721,  4.89957062,  127.8726563,  83.1172266&#xA; 89.2610231,  4.89957348,  129.78684557,  84.36144962&#xA; 88.47969399,  4.89957495,  128.58479851,  83.58011903&#xA; 88.77623594,  4.89957711,  129.04101359,  83.87665884&#xA; 90.87280518,  4.89957739,  132.2665043,  85.9732278&#xA; 88.9513552,  4.89957707,  129.3104279,  84.05177813&#xA; 89.14100099,  4.89957773,  129.60218964,  84.24142327&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And here is some data for dt = 0.001 and env.StartSimulation(timestep=0.0005)&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;taus, torquegravity+torquecoriolis, a_cmd, M*a_cmd&#xA;-313.62240349,  0.98927261, -484.01796324, -314.61167611&#xA;-242.03525463,  2.00886997, -375.45249938, -244.0441246&#xA;-199.82226305,  2.79259699, -311.71516928, -202.61486003&#xA;-190.02605484,  3.39367572, -297.56881625, -193.41973056&#xA;-162.08293067,  3.8525617, -255.28537288, -165.93549237&#xA;-125.84847045,  4.17559368, -200.03702174, -130.02406413&#xA;-103.89936813,  4.40068949, -166.61547326, -108.30005762&#xA;-82.32305905,  4.5566127, -133.66103347, -86.87967175&#xA;-64.56801352,  4.66415211, -106.51102404, -69.23216563&#xA;-49.68124446,  4.73812107, -83.72210081, -54.41936553&#xA;-37.91265825,  4.78890663, -65.6947152, -42.70156488&#xA;-27.99189838,  4.82374208, -50.48560071, -32.81564046&#xA;-19.81225948,  4.84762415, -37.9382825, -24.65988362&#xA;-12.55978349,  4.8636252, -26.80524414, -17.42340869&#xA;-6.89165107,  4.87470983, -18.10209369, -11.7663609&#xA;-3.13313345,  4.88256746, -12.33184754, -8.0157009&#xA; 0.69831646,  4.88796162, -6.44560793, -4.18964516&#xA; 3.86277859,  4.89166745, -1.58290594, -1.02888886&#xA; 6.12163439,  4.8941598,  1.88842245,  1.22747459&#xA; 8.58189707,  4.89593332,  5.67071346,  3.68596375&#xA; 9.1580546,  4.89712981,  6.55526891,  4.26092479&#xA; 11.81854706,  4.89798468,  10.64701905,  6.92056238&#xA; 12.40540565,  4.89856409,  11.54898701,  7.50684156&#xA; 14.04109075,  4.89897979,  14.06478609,  9.14211096&#xA; 14.39924399,  4.89926951,  14.61534535,  9.49997448&#xA; 14.98060951,  4.89947252,  15.50944153,  10.08113699&#xA; 16.08890875,  4.89961544,  17.2142974,  11.18929331&#xA; 16.01955973,  4.89971637,  17.10745133,  11.11984337&#xA; 17.06493791,  4.89978831,  18.71561478,  12.16514961&#xA; 17.35364328,  4.89983976,  19.15969772,  12.45380352&#xA; 17.62239334,  4.89987688,  19.57310225,  12.72251646&#xA; 17.84455913,  4.89990387,  19.91485424,  12.94465525&#xA; 17.43825648,  4.89992362,  19.28974286,  12.53833286&#xA; 17.58436934,  4.89993826,  19.51450935,  12.68443108&#xA; 17.70571012,  4.8999492,  19.70117065,  12.80576093&#xA; 18.40852272,  4.89995746,  20.78240808,  13.50856525&#xA; 18.49492461,  4.89996372,  20.91532445,  13.59496089&#xA; 18.56575802,  4.89996852,  21.02429154,  13.6657895&#xA; 18.62430693,  4.89997223,  21.11436108,  13.7243347&#xA; 16.54216482,  4.89997511,  17.91106109,  11.64218971&#xA; 18.71146936,  4.89997747,  21.24844907,  13.81149189&#xA; 18.13316504,  4.89997923,  20.35874741,  13.23318581&#xA; 18.77330006,  4.89998067,  21.34356829,  13.87331939&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Despite the differences in torque command (a_cmd) I still get similar performance, in that the arm drives to the right position fairly quickly.&#xA;As another experiment I set the initial position to pi/2 and just fed back the gravity term to the torque output. My understanding of this is that the arm should float, ala a gravity compensation sort of thing. But it just drops as if a small torque is applied.&#xA;Thanks again! &lt;/p&gt;&#xA;" OwnerUserId="2178" LastEditorUserId="2178" LastEditDate="2016-07-22T04:03:39.080" LastActivityDate="2018-03-21T02:35:15.283" Title="OpenRAVE output torques and simulation timestep" Tags="&lt;robotic-arm&gt;&lt;torque&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="10315" PostTypeId="2" ParentId="10312" CreationDate="2016-07-21T11:29:19.983" Score="3" Body="&lt;p&gt;&quot;3D camera&quot; is a generalisation that covers sensors that can observe a point-cloud or depth map of the scene they are observing. &#xA;Some 3D cameras use a projector (via various ways) to improve the resolution and/or reduce noise of these sensors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The fact that the projector is IR is not important, it could be a red laser projector instead, but IR is used so that humans don't see the projection. Obviously if you use an IR projector you need an IR camera to observe the projection.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The projector will project a pattern that is either:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A texture (not necessarily a pattern) projected to the scene to give better features for stereo-vision by imposing texture on smooth areas (which is problematic for calculating stereo disparity).&lt;/li&gt;&#xA;&lt;li&gt;A pattern that is coded, which is decoded to produces a depth map.&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Various pattern types can be used (time-multiplexed, spatially-coded, direct-coded or a mixture)&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;A good example of both of these is the Intel Realsense F200 (coded-light) and the R200 (stereo vision).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Aside: You should start a separate question for your application, and narrow down the scope of your question.&lt;/p&gt;&#xA;" OwnerUserId="8859" LastActivityDate="2016-07-21T11:29:19.983" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10317" PostTypeId="2" ParentId="10312" CreationDate="2016-07-21T14:30:06.120" Score="2" Body="&lt;p&gt;This isn't an answer so much as a series of questions to get you to consider an appropriate solution. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I will, as usual :-), echo @BendingUnit22 and @Gouda - you appear to be fixated on a particular method of solution. This can be like, &quot;What's a more fuel efficient way to buy groceries, a jet or a helicopter?&quot; Well, can you just walk? If you go for a new sensor you'll need to learn to use it, which can be very time intensive. It's a color camera - can you split the image into R/G/B components and then do blob detection?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More importantly, consider your problem now: Two objects (people) get close together, and your blobs merge, and you can't tell them apart. What are you expecting is going to change when you get a depth component? The people still get close, and if they touch going through the door, then you now have a two-person-wide volume. This is exactly the same as the image blobs merging, except now you have an entire other dimension to work with. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your primary issue is that you think the camera is mounted too low, why not just mount it higher? It would seem this would be dramatically simpler than purchasing and learning a new depth video system. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To answer your question specifically, any video system that gives depth should give video and depth. There will be differences in cost, resolution, accuracy, etc., but ultimately you should still get RGB+D. The Kinect uses &lt;a href=&quot;https://en.wikipedia.org/wiki/Structured_light&quot; rel=&quot;nofollow&quot;&gt;structured light&lt;/a&gt; to get the depth map, stereo cameras use &lt;a href=&quot;https://en.wikipedia.org/wiki/Parallax&quot; rel=&quot;nofollow&quot;&gt;parallax&lt;/a&gt;, etc., but whatever the method to get the depth, the output is (generally) the same. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But again, to reiterate - consider what this system is actually going to get you and evaluate your current options again. There's almost certainly an easier way to do this. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-07-21T14:30:06.120" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10318" PostTypeId="2" ParentId="9437" CreationDate="2016-07-21T18:38:40.587" Score="3" Body="&lt;p&gt;What you're asking for cannot be accomplished with a PID controller. As I understand your question, you want to be able to choose PID gains that would always produce a &amp;quot;good&amp;quot; trajectory, without tuning. You said it's alright if the motor output is unrealistic, i.e. the motors are &amp;quot;very strong&amp;quot; therefore can produce unlimited torque. However, you cannot escape the fact the your system has inherent dynamics. The response of the joint will always be affected by its inertia and damping, so unless you set those values to zero your response will change as they change. Since a robotic arm with more than 1 joint is nonlinear, inertia and apparent damping due to centrifugal and Coriolis effects will be changing constantly.&lt;/p&gt;&#xA;&lt;h1&gt;More Explanation&lt;/h1&gt;&#xA;&lt;p&gt;First, you seem to have some misunderstanding of how a PID controller works. A really simplistic description would be, given you want to get to some position &lt;span class=&quot;math-container&quot;&gt;$x_d$&lt;/span&gt; and speed &lt;span class=&quot;math-container&quot;&gt;$v_d$&lt;/span&gt;:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the proportional term: the farther I am from &lt;span class=&quot;math-container&quot;&gt;$x_d$&lt;/span&gt;, the harder I push toward &lt;span class=&quot;math-container&quot;&gt;$x_d$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;li&gt;the derivative term: the slower/faster I am than &lt;span class=&quot;math-container&quot;&gt;$v_d$&lt;/span&gt;, the harder I push to speed up/slow down&lt;/li&gt;&#xA;&lt;li&gt;the integral term: gee, all this pushing I've been doing hasn't gotten me much closer to &lt;span class=&quot;math-container&quot;&gt;$x_d$&lt;/span&gt;, I should push harder in that direction&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Yes, the derivative term &lt;em&gt;can&lt;/em&gt; help to reduce the oscillations introduced by the integral term, but that is not its purpose.&lt;/p&gt;&#xA;&lt;p&gt;PID controllers are a great example of classical control, and are very useful because they can be tuned experimentally without knowing the exact mathematical model of the system you want to control. With some clever tuning you can make it so that the PID controller gives you a reasonable response for a small range of parameters, allowing them to work with nonlinear systems or linear time-variant systems, but there are two qualifying statements there: the parameter range has to be &lt;em&gt;small&lt;/em&gt; and the controller has to be &lt;em&gt;tuned&lt;/em&gt;. The parameter variation for multi degree of freedom robotic arms can be quite large (e.g. your inertia could double or halve in value) so achieving what you want without tuning at all is very difficult.&lt;/p&gt;&#xA;&lt;h1&gt;Possible Solutions&lt;/h1&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Turn off gravity and move your arm really slowly (i.e. large derivative gain relative to your proportional gain). The nonlinearities of robotic arms mostly come from dynamic coupling between joints, moving slowly should keep them really small.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Manually program the trajectories of each joint in the sim (fudging the dynamics). Let's say you're starting from angular position &lt;span class=&quot;math-container&quot;&gt;$\theta_0$&lt;/span&gt; and you want to get to &lt;span class=&quot;math-container&quot;&gt;$\theta_d$&lt;/span&gt;. You could program the joints so that when they get a command to move to &lt;span class=&quot;math-container&quot;&gt;$\theta_d$&lt;/span&gt; they follow a specific trajectory, for example &lt;span class=&quot;math-container&quot;&gt;$\theta(t) = \theta_0 + (\theta_d - \theta_0)(1 - e^{-t/\tau})(1 + t/\tau))$&lt;/span&gt; will give you a smooth trajectory with no overshoot from the initial to the final position. Just adjust &lt;span class=&quot;math-container&quot;&gt;$\tau$&lt;/span&gt; until it's as fast or slow as you like. The only problem with this method is that if you interrupt it during its motion it will look weird due to discontinuity.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="13878" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2016-07-21T18:38:40.587" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10319" PostTypeId="2" ParentId="10241" CreationDate="2016-07-21T20:06:03.773" Score="1" Body="&lt;p&gt;Ok I actually was able to make it work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First of all in the beginning of the testing I used my own program which generated PWM signals. I wanted to make them 50Hz with 1.5ms of duty cycle being neutral position (of stick of the controller for example), 2ms max and 1ms min. Unfortunately when I connected my microcontroller to the CC3D I wasn't able to get through calibration of the controller reliably.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you could understand everything: I wrote a program in Python which reads keyboard buttons presses and sends data packet to microcontroller. By default the data sent from computer to AVR micro controller connected to CC3D looks as follows:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;a500b500c500d500e500f500g&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I press one of the keys defined in Python program it would send:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;a500b900c500d500e500f500g&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The micrcontroller breaks down this message and uses the numerical values between letters to modify the PWM duty cycle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tested it again and again and sometimes I could get through calibration in LibrePilot (program to configure CC3D) but after the program showed really crazy behaviour of the sticks and buttons on the controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;THE SOLUTION:&#xA;Actually the solution is simple. &lt;strong&gt;Just use servo library for Arduino&lt;/strong&gt; (I'm using Atmega8 with external 16Mhz and Arduino bootloader). It generates almost perfect 50Hz (my program couldn't generate as good of a custom PWM). With signal like that LibrePilot calibrates properly. Also worth pointing out is that you don't have to have those values of 1.5ms, 1ms, and 2ms set on the microcontroller. If the values are reasonable the LibrePilot's calibration process will be able to use the duty cycle you signal generates and bind it to max, min, neutral.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Below you can see how my hardware looks like. I hope I described everything clearly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Ld0Nw.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Ld0Nw.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="14183" LastActivityDate="2016-07-21T20:06:03.773" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10322" PostTypeId="1" CreationDate="2016-07-21T23:50:23.510" Score="5" ViewCount="1924" Body="&lt;p&gt;I would like to know if there is any way to get &lt;strong&gt;all the possible solutions&lt;/strong&gt; &lt;strong&gt;of inverse kinematics of a 6 DOF robotic arm&lt;/strong&gt;?&#xA;I have found some good Matlab codes but gives only one solution like in Peter corke's book .&#xA;Thank you in advance. &lt;/p&gt;&#xA;" OwnerUserId="14296" LastActivityDate="2018-12-30T02:00:40.347" Title="is it possible to get all possible solutions of inverse kinematics of a 6 DOF arm?" Tags="&lt;inverse-kinematics&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10323" PostTypeId="2" ParentId="10322" CreationDate="2016-07-22T00:23:33.523" Score="5" Body="&lt;p&gt;I suggest you look at Craig's book &lt;em&gt;Introduction to Robotics Mechanics and Control&lt;/em&gt;.  In the inverse kinematics chapter he addresses the multiple closed-form solutions obtained analytically.  Many other texts address this issue also.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general, if the wrist is spherical (&lt;em&gt;i.e.,&lt;/em&gt; all three axes intersect), you can enumerate all of the various closed-form solutions through a method known as wrist partitioning.   This method uses the three arm joints to solve for the position of the wrist center.  It then uses the wrist joints to determine the joint angles which orient the end effector properly.  Multiple solutions are possible from &quot;wrist up&quot; and &quot;wrist down&quot; options, &quot;elbow up&quot; and &quot;elbow down&quot; options (for an articulated arm), and &quot;over the shoulder&quot; options also.   For other robot geometries the options would differ.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the wrist is not spherical, it becomes quite challenging to find a closed-form inverse solution.   But you still have the various geometric options for inverse kinematics solutions.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;One way to make sure you are identifying all of the solutions is to recall the fundamentals of trigonometry.   Recall that $\sin(\theta) = -\sin( - \theta)$ and $\cos(\theta) = \cos( - \theta)$.  So when you are solving for $\theta$ you have to consider the other angles which produce the same result using these and other trigonometric identities.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastEditorUserId="11125" LastEditDate="2016-07-22T01:26:58.060" LastActivityDate="2016-07-22T01:26:58.060" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10324" PostTypeId="1" CreationDate="2016-07-22T02:15:20.633" Score="-2" ViewCount="142" Body="&lt;p&gt;Scott Adams, creator of Dilbert, recently shared an &lt;a href=&quot;http://scottadams-tttt.tumblr.com/post/147119485801/top-tech-258-killer-robots&quot; rel=&quot;nofollow noreferrer&quot;&gt;article&lt;/a&gt; about a robot the police used to kill a suspect by detonating a bomb in close range.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This made me wonder -- when was the first time a robot took a human life?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Good comments were made on this which leads me to clarify that I mean a &lt;em&gt;pureposeful&lt;/em&gt; taking of life. I shy away from the term &quot;murder&quot; because that involves legal concepts, but I mean an intentional killing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An interesting subdivision would be between robots under active human direction (&quot;remote control&quot;) and those with a degree of autonomy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/SDeV4.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/SDeV4.jpg&quot; alt=&quot;killer robot&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4537" LastEditorUserId="9585" LastEditDate="2016-07-23T03:23:47.343" LastActivityDate="2016-07-23T03:23:47.343" Title="When was the first time a robot killed a human?" Tags="&lt;mobile-robot&gt;" AnswerCount="1" CommentCount="13" ClosedDate="2016-07-26T13:11:15.307" ContentLicense="CC BY-SA 3.0" />
  <row Id="10325" PostTypeId="1" CreationDate="2016-07-22T03:24:08.750" Score="2" ViewCount="3853" Body="&lt;p&gt;Is torque related to size or power at all in electric motors? And what about gas motors too?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a go kart that is 2.5hp and it's 50cc and its about 1ft x 2ft x 1ft in size. I also see online there are .21 cubic inch gas motors for R/C cars that are also 2.5hp, the difference being that the R/C motor spins at 32k rpm while the go-kart motor spins at 12k rpm. If I were to put a gear reduction on the R/C motor, would it preform more or less the same as the go kart motor? Why is there a size difference?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Same for electric motors. I can buy an RC car electric motor that's 10hp and the size of a pop can. The CNC machine at work has a 10hp motor the size of a 5 gal bucket. Again, the only difference is the RPM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I were to reduce both setups so they spun at the same RPM, would they preform the same?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only reasons I could think of is 1. Cooling and 2. RPM control (For PID loops and sensors)&lt;/p&gt;&#xA;" OwnerUserId="14299" LastActivityDate="2016-07-22T09:00:27.667" Title="Is horsepower related to torque in electric motors?" Tags="&lt;motor&gt;&lt;power&gt;&lt;torque&gt;&lt;engine&gt;" AnswerCount="3" CommentCount="1" ClosedDate="2016-07-26T15:57:22.600" ContentLicense="CC BY-SA 3.0" />
  <row Id="10327" PostTypeId="2" ParentId="10325" CreationDate="2016-07-22T04:40:59.647" Score="1" Body="&lt;p&gt;Torque is the amount of &quot;rotational force&quot; available at the output shaft of the motor.   You can increase or decrease torque using gears.  Torque has nothing to do with how fast the rotational force can be applied to do work (gearing will change the required motor shaft rotational speed to achieve the desired output shaft rotational speed, but that is still just an increase or a reduction in torque).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Horsepower is a measure of power - work done in a specific period of time.   So a higher hp motor can produce its torque in less time than a lower hp motor can.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2016-07-22T04:40:59.647" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10328" PostTypeId="2" ParentId="10325" CreationDate="2016-07-22T06:19:41.880" Score="1" Body="&lt;p&gt;Horsepower is torque multiplied by angular velocity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have an electric motor that has constant torque throughout its speed range, then the horsepower will increase proportionally with speed, and the maximum horsepower will be at the maximum speed. The faster it can spin, the more horsepower it can produce.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An internal combustion engine's torque is never constant with speed, so it is harder to know at what speed you will have maximum horsepower (and some electric motors have the same issue). It is usually near the top RPM, just above the peak in the torque curve. If you can move the torque curve up on the RPM, by improve breathing or by super/turbo-charging, then you will increase the horsepower without needing to increase torque.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Horsepower will remain constant through a gear-train, except for frictional losses. Reducing the speed will increase the torque proportionally. So if you you use a 5:1 gear reduction, you divide the speed by 5, but muliply the torque by 5, giving you the same horsepower.&lt;/p&gt;&#xA;" OwnerUserId="13775" LastActivityDate="2016-07-22T06:19:41.880" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="10329" PostTypeId="2" ParentId="10325" CreationDate="2016-07-22T09:00:27.667" Score="2" Body="&lt;p&gt;&lt;strong&gt;What is horsepower?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Horsepower is a measure of power (work done in a specific period of time - the higher power, the more work done), just like watts or kilowatts. $ 1 hp \approx&#xA;0.75 kW$ In case of mechanical power it is torque multiplied by rotational speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Relation between power and torque&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The more power a motor can produce the more torque you can get from it, at the same rotational speed. However, you can change ratio of torque to speed using gears, so you can have high power motor that will give less torque than appropriately geared weaker motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Relation between size and power/torque&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Generally the bigger motor, the more power it can produce. However, there are many different types of motors: BLDC will usually have higher power from the same size than regular DC motor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Motors with integrated gears will be bigger than those without them, but will produce the same power, but different torque and different speed. Motors that are intended to run for years in the industrial environment will be bigger than its hobby counterparts - the bigger size allows them to be less stressed and better cooled. &lt;/p&gt;&#xA;" OwnerUserId="7360" LastActivityDate="2016-07-22T09:00:27.667" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10330" PostTypeId="1" AcceptedAnswerId="10331" CreationDate="2016-07-22T11:49:18.397" Score="2" ViewCount="428" Body="&lt;p&gt;I am a third-year electrical engineering student and am working on an intelligent autonomous robot in my summer vacations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The robot I am trying to make is supposed to be used in rescue operations. The information I would know is the position of the person (the coordinates of the person in a JSON file) to be rescued from a building on fire. I would also know the rooms of the building from a map, but I don't know where the robot may be placed inside the building to start the rescue operation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That means I have to localise the robot placed at an unknown position in a known environment, and then the robot can plan its path to the person who has to be rescued. But, since this is not my domain I would like you to guide me on what is the best method for localising given that I can use an IMU ( or gyro, accelerometer, magnetometer) and ultrasonic sensors to do the localising job. I cannot use a GPS module or a camera for this purpose. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I, however, do know how to do path planning.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as my research on the Internet is concerned I have found a method called &quot;Kalman filtering&quot; that maybe can do the localising job. But there are I think some other filtering methods as well. Which one should I use? Or is there any other simpler/better method out there of which I don't know yet?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am also attaching the map of the building which is known to me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/QDoUf.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QDoUf.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The terrain is flat, and I would like to know where the robot is on the map like at coordinate 0,4 etc.&lt;/p&gt;&#xA;" OwnerUserId="9429" LastEditorUserId="9429" LastEditDate="2016-08-08T14:54:25.973" LastActivityDate="2016-09-28T20:11:08.250" Title="Localising a robot placed at an unknown position in a known environment" Tags="&lt;mobile-robot&gt;&lt;localization&gt;&lt;imu&gt;&lt;accelerometer&gt;&lt;gyroscope&gt;" AnswerCount="3" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10331" PostTypeId="2" ParentId="10330" CreationDate="2016-07-22T12:52:43.657" Score="3" Body="&lt;p&gt;The problem is that you can't apply path planning until you know where the robot is in the global coordinate frame. There are many localization techniques, and each has its pros/cons; I have used Particle Filtering for a very similar localization task. Extensive coverage of particle filtering is given by Sebastian Thrun in his book &lt;em&gt;Probabilistic Robotics&lt;/em&gt;--see chapter 8. There are advantages of particle filtering over Kalman Filtering (and the other way around), but the nice thing about particle filtering is that you can use raw measurements directly, it accepts measurement noise with any distribution, it can be used for global localization, it doesn't rely on a discretization of the world (e.g. a grid), and it is relatively simple to implement. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The algorithm presented by Thrun is Monte Carlo Localization (MCL). Prerequisites for the algorithm are that you have a model for the motion of your robot (this could be noisy unicycle dynamics) and a measurement model of your sensor--in your case, the ultrasonic sensor is a noisy beam sensor. See &lt;a href=&quot;https://robotics.stackexchange.com/posts/10175/edit&quot;&gt;my previous post&lt;/a&gt; about ultrasonic sensors and measurement models. For the particle filter, you won't really need the IMU data, but you can incorporate it to improve your localization results; I will assume that you won't do this. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The MCL algorithm is summarized but the following pseudo-code:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;$\bar{X}=X=\varnothing$&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;For m=1 to M particles, do:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;i. $x_t^{[m]}$=sample_motion_model($u_t,x_{t-1}^{[m]}$)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ii. $w_t^{[m]}$=sample_measurement_model($z_t,x_t^{[m]},m$)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;iii. $\bar{X_t}+=\langle x_t^{[m]}, w_t^{[m]}\rangle$&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;For m=1 to M particles, do:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;i. sample particle $i$ with probability proportional to $w_t^[i]$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ii. add $x_t^{[i]}$ to $X_t$&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Return $X_t$&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;$X_t$ is the set of M particles $\{x_t^{[1]},x_t^{[2]},...,x_t^{[M]}\}.$ $u_t$ is the action taken at time $t$, $z_t$ is the measurement taken at time $t$, $x_t^{[m]}$ is a particle representing the state of the robot at time $t$, and $w_t^{[m]}$ is the weight of particle $m$ at time $t$. The bar notation indicates a belief prior to incorporating the measurement, just after executing the action.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In words, particle filtering works like this: throw out a bunch of particles, see how good they are based on what the robot has just done and based on what the robot observes, then pick the best particles and repeat. For particle filtering, you need to use a sufficiently large number of particles, and there are numerous techniques that can be used to improve performance and accuracy. Also, you need to know some math to go through the proof, but it is straightforward. &lt;/p&gt;&#xA;" OwnerUserId="9585" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2016-07-22T14:06:59.320" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10332" PostTypeId="2" ParentId="10330" CreationDate="2016-07-22T12:58:29.953" Score="2" Body="&lt;p&gt;There are many tactics for localization in a &lt;strong&gt;known&lt;/strong&gt; environment. the most popular ones are the Filtering methods which include Kalman filtering and &lt;a href=&quot;https://en.wikipedia.org/wiki/Particle_filter&quot; rel=&quot;nofollow&quot;&gt;Particle filtering&lt;/a&gt;. Nowadays the second one is the most efficient and most widely used in this kind of situations. A good starting point for learning about localization techniques and the intuition behind them is this &lt;a href=&quot;https://www.udacity.com/course/artificial-intelligence-for-robotics--cs373&quot; rel=&quot;nofollow&quot;&gt;Robotics course on Udacity&lt;/a&gt; by Sebastian Thrun.&lt;/p&gt;&#xA;" OwnerUserId="10729" LastActivityDate="2016-07-22T12:58:29.953" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10333" PostTypeId="2" ParentId="10324" CreationDate="2016-07-22T13:57:37.743" Score="2" Body="&lt;p&gt;Are you including remotely operated vehicles in your understanding of robots or only autonomous? The first case of a human killed by a robot happened on Jan 25, 1979 (&lt;a href=&quot;http://www.wired.com/2010/01/0125robot-kills-worker/&quot; rel=&quot;nofollow&quot;&gt;http://www.wired.com/2010/01/0125robot-kills-worker/&lt;/a&gt;). As for remotely operated you'd have to look to the military. I believe it happened shortly after we introduced counter IDE robots into the battlefield but I can't give you a specific. The first robot designed to be armed appeared in 2007 (&lt;a href=&quot;https://www.wired.com/2007/08/httpwwwnational/&quot; rel=&quot;nofollow&quot;&gt;https://www.wired.com/2007/08/httpwwwnational/&lt;/a&gt;) but I believe they were putting guns on them before that.&lt;/p&gt;&#xA;" OwnerUserId="14284" LastActivityDate="2016-07-22T13:57:37.743" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10334" PostTypeId="1" CreationDate="2016-07-22T14:32:38.733" Score="-1" ViewCount="513" Body="&lt;p&gt;I'm doing a project with the iRobot Create 2. I want it to be able to map out a room and navigate to a point for example. My problem is that the robot doesn't have any distance sensors. What it can do is detect if there is an obstacle ahead of it or not (0 or 1) and it can measure how far it has traveled in millimeters. Any good techniques out there or best to buy an IR sensor?&lt;/p&gt;&#xA;" OwnerUserId="14300" LastActivityDate="2016-09-01T15:08:22.503" Title="Autonomous Navigation without Distance Sensors" Tags="&lt;mobile-robot&gt;&lt;irobot-create&gt;" AnswerCount="3" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="10335" PostTypeId="1" AcceptedAnswerId="10338" CreationDate="2016-07-22T15:40:07.770" Score="0" ViewCount="389" Body="&lt;p&gt;I am building an application that executes graphSLAM using datasets recorded in a simulated environment. The dataset has been produced in MRPT using the &lt;a href=&quot;http://www.mrpt.org/list-of-mrpt-apps/application_gridmapnavsimul/&quot; rel=&quot;nofollow&quot;&gt;GridMapNavSimul&lt;/a&gt; application. To simulate the laserScans one can issue the bearing and range error standard deviation of the range finder. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Currently I am using a dataset recorded with range_noise = 0.30m, bearing_noise = 0.15deg. Am I exaggerating with these values? Could somebody provide me with typical values for these quantities? Do laser scanner manufacturers provide these values?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance,&lt;/p&gt;&#xA;" OwnerUserId="10729" LastEditorUserId="10729" LastEditDate="2016-07-22T15:46:46.647" LastActivityDate="2016-07-23T05:40:47.990" Title="Typical laser scanner noise values" Tags="&lt;slam&gt;&lt;laser&gt;&lt;rangefinder&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10336" PostTypeId="2" ParentId="10335" CreationDate="2016-07-22T17:33:06.953" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Am I exaggerating with these values?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No your're not but you need to filter the measurements. Also, you can double check datasheet of any laser sensor for the specifications. I've written a code for Kalman filter long time ago for a laser sensor that measures a static point located at &amp;lt;10,10&gt;. Let's see how the filter is working with the noise you've stated (0.3m, .15deg). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/YrB7H.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/YrB7H.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you see the measurements (green) are noisy and the filter (red) is doing a great job to estimate the true value (blue) even though the measurement model is nonlinear. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/uxMJj.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/uxMJj.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2155" LastActivityDate="2016-07-22T17:33:06.953" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10337" PostTypeId="2" ParentId="10330" CreationDate="2016-07-23T03:55:34.530" Score="1" Body="&lt;p&gt;Firstly, to solve your problem in full would be a rather large post so I will focus on the methodology that you should follow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As others have said, you would use some kind of filtering method to solve your problem; particle filtering, Kalman filtering, they are all the same thing but different variants that have different strengths. You could also use Markov Model methods that operate in discrete space rather than continuous space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Firstly let's define the task: 3D (X, Y positions and yaw angle) localisation using an &lt;em&gt;a priori&lt;/em&gt; map. This is different from SLAM (Simultaneous Localisation and Mapping) because you already have a map.&#xA;That being said, you could probably use &lt;a href=&quot;http://www.mrpt.org/List_of_SLAM_algorithms&quot; rel=&quot;nofollow&quot;&gt;an existing slam algorithm&lt;/a&gt; with a high-belief prior set by the map you have.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This leads to the definition of the states you are interested in (called the &lt;em&gt;state vector&lt;/em&gt;):&#xA;$$\mathbf{x}_{k} = \big[ \mathbf{p}^\top, \mathbf{v}^\top, \psi \big]^\top$$&#xA;Where $\mathbf{x_k}$ is the state vector at discrete time-step $k$, $\mathbf{p}$ and $\mathbf{v}$ are the position and velocity, and $\psi$ is the yaw angle of the robot (all measured with respect to, and expressed in a global frame $\{G\}$). Velocity is added there because it is necessary for the prediction stage of the filter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second let's define the observations you can make (I exclude sensor measurements unnecessary for solving this 3DOF problem):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Range measurements of the relative position to the wall ahead of the robot: $y_u(\mathbf{x_k})$&lt;/li&gt;&#xA;&lt;li&gt;Inertial measurements of the motion of the body:&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Acceleration (2 axes, x and y): $\mathbf{a}_k$&lt;/li&gt;&#xA;&lt;li&gt;Angular rotation rate (1 axis, z) $\mathbf{\omega}_k$&lt;/li&gt;&#xA;&lt;li&gt;Magnetic field strength (1 axis, z) $m_k$&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;All measurements are made in the body frame $\{B\}$ which is attached to the IMU (note there is a transform between the ultrasound and body which I am not addressing, but should be addressed in an actual solution).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Now the issue is how do you use a filtering methodology to localise your robot? &#xA;Regardless of your choice of filter you will need a model that describes how the robot evolves through time (the &lt;em&gt;process model&lt;/em&gt;). &#xA;Then you need a &lt;strong&gt;measurement model for each of your sensors&lt;/strong&gt;, which describes what measurement is expected given an arbitrary state $\mathbf{x}$ of the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For such a problem, your measurement models would describe (1) the ultrasound range, (2) the accelerometer, (3) the rate gyro, (4) the magnetometer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because of the high update rates of the IMU it is commonly used in the process model directly so that the update stage of the filter is not used too frequently (it is more computationally expensive than the predict stage). I'll refer you to equations (3) - (8) in &lt;a href=&quot;http://www-users.cs.umn.edu/~stergios/papers/TRO_08-IMU-Camera-calibration.pdf&quot; rel=&quot;nofollow&quot;&gt;this paper&lt;/a&gt; for this process model (in this application there is no need for quaternions so I'd advise to use Euler angle representations of the orientation instead). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additionally, you must model the bias states in the IMU, which then adds another two states to your state vector:&#xA;$$\mathbf{x}_{k} = \big[ \mathbf{p}^\top, \mathbf{v}^\top, \psi, \mathbf{b}_a^\top, b_\omega \big]^\top$$&#xA;Where $\mathbf{b}_a$ and $b_\omega$ are the biases in the accelerometers and gyroscope, respectively.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The measurement model for the magnetometer can be found in equation 5.10 in &lt;a href=&quot;http://folk.ntnu.no/tomgra/Diplomer/Brembo.pdf&quot; rel=&quot;nofollow&quot;&gt;this thesis&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's simplify your measurement model for your ultrasound, and pretend it is a laser range finder that simply returns the distance of the object (wall) it is pointing to. I assume you can do the calculation to convert the pulse times to distance. Your model is then:&#xA;$$y_u(\mathbf{x}_k) = |\mathbf{p}_{w,B}^B|_2 = |R^B_G(\mathbf{p}_{w,G}^G - \mathbf{p}_{B,G}^G)|_2$$&#xA;Where $ \mathbf{p}_{w,B}^B $ is the &lt;strong&gt;p&lt;/strong&gt;osition of the &lt;strong&gt;w&lt;/strong&gt;all that is being pointed to, with respect to (superscript) and measured from (subscript) the $\{B\}$ frame. $R^B_G$ is the rotation matrix that rotates a vector in the $\{G\}$ frame to the $\{B\}$ frame, and $\mathbf{p}_{B,G}^G$ is the position of the $\{B\}$ frame with respect to and expressed in the $\{G\}$ frame (which is the robot location represented by $p$ in the state vector).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'll have to think about how to parameterize and calculate $\mathbf{p}_{w,G}^G$ (which is a function of the wall geometry, $p$ and $\psi$), I would think it would work with a look-up table or a solution to a set of line intersection equations representing the range beam and the walls. Either way it is discontinuous and nonlinear so this supports the use of a particle filter over a Kalman-based filter. You could possibly have a different measurement model for each wall if you really want to use a Kalman Filter, but that introduces a new data-association problem which is non-trivial.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope this plus NBCKLY's PF psuedocode gets you on your way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A good &lt;a href=&quot;https://www.cl.cam.ac.uk/techreports/UCAM-CL-TR-696.pdf&quot; rel=&quot;nofollow&quot;&gt;resource&lt;/a&gt; on IMU models and noise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe of interest is &lt;a href=&quot;http://user.it.uu.se/~thosc112/kihlbergtks2014.pdf&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt; use of highly non-linear maps in PF's.&lt;/p&gt;&#xA;" OwnerUserId="8859" LastEditorUserId="10596" LastEditDate="2016-09-28T20:11:08.250" LastActivityDate="2016-09-28T20:11:08.250" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10338" PostTypeId="2" ParentId="10335" CreationDate="2016-07-23T05:40:47.990" Score="1" Body="&lt;p&gt;I think 0.3m noise is a bit exaggerated for a scanning laser rangefinder.&#xA;As you saw with the Hokuyo (which is one of the cheapest LIDARs you can get) they say that it is 0.03m range &quot;error&quot; (they do not explicitly state this is 2$\sigma$, but I have tested the noise profile myself and it is consistent with 2$\sigma$).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My experience with laser scanners is that the depth accuracy is very much a function of cost, while the angular accuracy is pretty small and is only a real problem when the lidar is used for around 10m+.&#xA;A URG04LX (\$1,300) that I've calibrated had range standard deviations that were  around $\sigma = 0.013m$ while a Velodyne HDL64E (&gt;\$150,000) had around $\sigma=0.006m$. I can't remember the angular $\sigma$s but &lt;a href=&quot;http://velodynelidar.com/docs/datasheet/63-9194_Rev-D_HDL-64E_Data%20Sheet_Web.pdf&quot; rel=&quot;nofollow&quot;&gt;the data sheet&lt;/a&gt; says around 0.08 degrees (which I again assume is 3$\sigma$).&lt;/p&gt;&#xA;" OwnerUserId="8859" LastActivityDate="2016-07-23T05:40:47.990" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10339" PostTypeId="2" ParentId="10334" CreationDate="2016-07-23T12:50:55.300" Score="3" Body="&lt;p&gt;With footslam or actionslam it is possible to locate pedestrian and smartphones even they have no distance-sensor. It is an advanced stochastic technic which is derived from classical &quot;sebastian thrun slam&quot; but uses less input data. The precision is low and thats the reason why footslam is often used together with other localisation techniques like satellite GPS. But, a &quot;footslam only&quot; implementation is possible.  Most research on this topic is done by DLR (Deutschen Zentrums für Luft- und Raumfahrt) which also has invented lots of similar algorithms like MagSlam oder WISLAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to &lt;a href=&quot;https://robotics.stackexchange.com/questions/7648/irobot-create-2-sensors&quot;&gt;iRobot Create 2 sensors&lt;/a&gt; the irobot Create 2 has a &quot;light bumper&quot; as a sensor. To use this in a stochastic model the following sources may help:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Hassan A. Karimi: Indoor Wayfinding and Navigation, 2015, page 125-139&lt;/li&gt;&#xA;&lt;li&gt;Dmytro Bobkov: Simultaneous Localisation and Mapping for 3D Pedestrian &lt;/li&gt;&#xA;&lt;li&gt;Michael Hardegger, Michael: Navigation based on FootSLAM using Inertial Sensors, 2012&lt;/li&gt;&#xA;&lt;li&gt;ActionSLAM on a Smartphone: At-Home Tracking with a Fully Wearable System, 2013&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;According my knowledge, there is no ready-to-run footslam-implementaton on github which can be used via out-of-the-box. But under the term &quot;indoor mapping&quot; there are a lots of opensource projects which are used together with smartphones.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2016-07-28T18:29:29.180" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="10345" PostTypeId="2" ParentId="10295" CreationDate="2016-07-24T13:28:08.377" Score="1" Body="&lt;p&gt;Boost is linked against your code by default when you're using ROS. I'll take a guess, you have namespace issue. Refrain from using &quot;using namespace&quot; and explicitly use cv:: in front of your calls. It's probably a name collision with Boost.&lt;/p&gt;&#xA;" OwnerUserId="4017" LastActivityDate="2016-07-24T13:28:08.377" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10348" PostTypeId="1" AcceptedAnswerId="10374" CreationDate="2016-07-25T07:31:40.623" Score="4" ViewCount="3488" Body="&lt;p&gt;I am trying to implement quaternions and i am using CC2650 sensortag board from TI. This board has MPU9250 from invensense which has Digital Motion Processor (DMP) in it. This DMP gives quaternion, but for my understanding i implemented my own quaternion. I used Gyroscope and acceleorometer values coming out of DMP (which are calibrated ) to calculate angle of rotation. I feed this angle, in 3 directions (x,y,z), to my quaternion. I am not able to match my quaternion values with DMP quaternion values. In fact it's way off, so wondering what I have done wrong.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Following are detailed steps that i did :&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1)  Tapped Gyro sensor values from function “read_from_mpl”.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2)  Converted gyro values in to float by diving by 2^16. As gyro values are in Q16 format.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3)  Now used Gyro values of 3 axis and found out resultant using formula : &#xA;&lt;em&gt;Gr = sqrt(Gx^2+Gy^2+Gz^2)&lt;/em&gt;&#xA;     &lt;em&gt;Where Gx,Gy and Gz are Gyro values along x-axis,y-axis and z-axis respectively.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;4)  Now Angle is derived using above found resultant Gr by : &#xA;*Angle = Gr*1/sample_rate*&#xA;       &lt;em&gt;Where sample_rate is found using API call ,mpu_get_sample_rate(&amp;amp;sample_rate)&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;5)  This Angle is fed to angle_to_quater function which basically converts angle to axis and then quaternion multiplication.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/* Angle to axis and quaternion multiplication: */&#xA;temp.w = cos((Angle*1.0/RAD_TO_DEG)/2);&#xA;temp.x = sin((Angle*1.0/RAD_TO_DEG)/2);&#xA;temp.y = sin((Angle*1.0/RAD_TO_DEG)/2);&#xA;temp.z = sin((Angle*1.0/RAD_TO_DEG)/2);&#xA;temp.x = temp.x *gyro_axis[0];//gyro_axis[0]=Gx&#xA;temp.y = temp.x *gyro_axis[1]; //gyro_axis[0]=Gy&#xA;temp.z = temp.x *gyro_axis[2]; //gyro_axis[0]=Gz&#xA;/* quaternion multiplication and normalization */&#xA;res = quat_mul(*qt,temp);&#xA;quat_normalize(&amp;amp;res);&#xA;*qt = res;*   &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;6)  I also added  doing angle calculations from accelerometer as follows : Here also accelerometer is converted to float by dividing by 2^16, as acceleorometer values also in Q16 format.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;*//acc_data[0]-&amp;gt;Ax, acc_data[1]-&amp;gt;Ay, acc_data[2]-&amp;gt;Az&#xA;temp = (acc_data[0]*acc_data[0]) + (acc_data[1]*acc_data[1]);&#xA;acc_angle[0]=atan2(acc_data[2],temp)*RAD_TO_DEG;&#xA;temp = (acc_data[1]*acc_data[1]) + (acc_data[2]*acc_data[2]);&#xA;acc_angle[1]=atan2(acc_data[0],temp)*RAD_TO_DEG;&#xA;temp = (acc_data[1]*acc_data[1]) + (acc_data[0]*acc_data[0]);&#xA;acc_angle[2]=atan2(acc_data[1],temp)*RAD_TO_DEG;*&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;*Find resultant angle of this also as :&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;inst_acc_angle = (sqrt(acc_angle[0]*acc_angle[0] + acc_angle[1]*acc_angle[1] + acc_angle[2]*acc_angle[2]));*&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;7)  Then complimentary filter is :&#xA;*FinalAngle = 0.96*Angle + 0.04*inst_acc_angle;&#xA;This Final Angle is fed to step 5 to get quaternion.*&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Quaternion multiplication is done as below and then normailized to get new quaternion (q). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;quater_mul :&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;q3.w = -q1.x * q2.x - q1.y * q2.y - q1.z * q2.z + q1.w * q2.w;&#xA;q3.x =  q1.x * q2.w + q1.y * q2.z - q1.z * q2.y + q1.w * q2.x;&#xA;q3.y = -q1.x * q2.z + q1.y * q2.w + q1.z * q2.x + q1.w * q2.y;&#xA;q3.z =  q1.x * q2.y - q1.y * q2.x + q1.z * q2.w + q1.w * q2.z;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;quat_normalize:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;double mag = pow(q-&amp;gt;w,2) + pow(q-&amp;gt;x,2) + pow(q-&amp;gt;y,2) + pow(q-&amp;gt;z,2);&#xA;mag = sqrt(mag);&#xA;q-&amp;gt;w = q-&amp;gt;w/mag;&#xA;q-&amp;gt;x = q-&amp;gt;x/mag;&#xA;q-&amp;gt;y = q-&amp;gt;y/mag;&#xA;q-&amp;gt;z = q-&amp;gt;z/mag;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;When i check my quaternion values with DMP, they are WAY off. Can you please provide some insights in to what could be wrong here. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Source code :&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;acc_data[0]=data[0]/65536.0;&#xA;acc_data[1]=data[1]/65536.0;&#xA;acc_data[2]=data[2]/65536.0;&#xA;double temp = (acc_data[0]*acc_data[0]) + (acc_data[1]*acc_data[1]);&#xA;acc_angle[0]=atan2(acc_data[2],temp)*RAD_TO_DEG;&#xA;temp = (acc_data[1]*acc_data[1]) + (acc_data[2]*acc_data[2]);&#xA;acc_angle[1]=atan2(acc_data[0],temp)*RAD_TO_DEG;&#xA;temp = (acc_data[1]*acc_data[1]) + (acc_data[0]*acc_data[0]);&#xA;acc_angle[2]=atan2(acc_data[1],temp)*RAD_TO_DEG;*&#xA;&#xA;gyro_rate_data[0]=data[0]/65536.0;&#xA;gyro_rate_data[1]=data[1]/65536.0;&#xA;gyro_rate_data[2]=data[2]/65536.0;&#xA;&#xA;float inst_angle = (sqrt(gyro_rate_data[0]*gyro_rate_data[0] +  gyro_rate_data[1]*gyro_rate_data[1] + gyro_rate_data[2]*gyro_rate_data[2]));&#xA;gyro_rate_data[0] = gyro_rate_data[0]/inst_angle;&#xA;gyro_rate_data[1] = gyro_rate_data[1]/inst_angle;&#xA;gyro_rate_data[2] = gyro_rate_data[2]/inst_angle;&#xA;inst_angle = inst_angle *1.0/sam_rate;&#xA;float inst_acc_angle = (sqrt(acc_angle[0]*acc_angle[0] + acc_angle[1]*acc_angle[1] + acc_angle[2]*acc_angle[2]));&#xA;inst_angle = WT*inst_angle + (1.0-WT)*inst_acc_angle;&#xA;&#xA;angle_to_quat(inst_angle,gyro_rate_data,&amp;amp;q);&#xA;&#xA;/* The function for angle to quaterinion and multiplication,normalization */&#xA;void angle_to_quat(float Angle,float *gyro_axis,struct quat *qt)&#xA;{&#xA;    struct quat temp;&#xA;    struct quat res;&#xA;    temp.w = cos((Angle*1.0/RAD_TO_DEG)/2);&#xA;    temp.x = sin((Angle*1.0/RAD_TO_DEG)/2);&#xA;    temp.y = sin((Angle*1.0/RAD_TO_DEG)/2);&#xA;    temp.z = sin((Angle*1.0/RAD_TO_DEG)/2);&#xA;    temp.x = temp.x *gyro_axis[0];&#xA;    temp.y = temp.x *gyro_axis[1];&#xA;    temp.z = temp.x *gyro_axis[2];&#xA;    res = quat_mul(*qt,temp);&#xA;    quat_normalize(&amp;amp;res);&#xA;    *qt = res;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/w98QK.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/w98QK.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This variation is coming when i am keeping my device stationary.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Y-Axis : Resultant of all 3 gyro axis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;X-axis : The number of samples. (have not converted them to time)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sample_rate is 3Hz.&lt;/p&gt;&#xA;" OwnerUserId="13865" LastEditorUserId="13865" LastEditDate="2016-07-29T06:12:00.290" LastActivityDate="2016-08-01T13:12:45.417" Title="quaternion implementation" Tags="&lt;sensor-fusion&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10350" PostTypeId="1" CreationDate="2016-07-25T14:22:48.787" Score="1" ViewCount="210" Body="&lt;p&gt;I'm trying to build a line follower robot and I'm interested in predicting the curves on the track.&#xA;I have 8 binary sensor array(qre1113).&#xA;My goal is to make a system that it can generalize what it learned about the curves and give me predictions about where should be at the line to pass it as fast as possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I integrate a system like Q learning and how can I train it?&#xA;And also how can I combine this system with a Type C PID controlller ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/michalnand/motoko_after_math_linefollower/blob/master/doc/ossconf_2015_paper/paper.pdf&quot; rel=&quot;nofollow&quot;&gt;There is a paper about it ot you are willing to explain&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a important project for me and i am kinda running on clock so quick help would be appreciated&lt;/p&gt;&#xA;" OwnerUserId="14329" LastEditorUserId="14329" LastEditDate="2016-08-03T17:26:33.193" LastActivityDate="2016-08-03T17:26:33.193" Title="Q Learning And Kohonen Maps For Line Follower Robot" Tags="&lt;differential-drive&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="10355" PostTypeId="2" ParentId="2731" CreationDate="2016-07-25T19:45:59.933" Score="1" Body="&lt;p&gt;You are spot on by stating that a full-blown simulator would take into account &lt;em&gt;physical&lt;/em&gt; interactions with the environment, e.g. &quot;forbidding&quot; the robot to get into a wall.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, something like a kalman filter requires the prediction step to both predict the mean and the covariances of the probability distribution, something that general simulators do not do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using such a simulator would be doable within a particle filter, though, and might be beneficial if the prediction heavily depends on complex interactions with the environment.&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2016-07-25T19:45:59.933" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10356" PostTypeId="2" ParentId="2731" CreationDate="2016-07-25T20:23:30.997" Score="0" Body="&lt;p&gt;Probabilistic localization is normally done with a hypothesis tracker aka particle filter. To use this approach together with a physics-engine, different engines of Box2D has to used in parallel (one instance for one particle). To generate a new instance the following code-snippet will work:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;for i in range(len(self.engine[0].joint)):&#xA;  self.engine[destination].joint[i].motorSpeed = self.engine[source].joint[i].motorSpeed&#xA;  self.engine[destination].joint[i].bodyA.angularVelocity = self.engine[source].joint[i].bodyA.angularVelocity&#xA;  self.engine[destination].joint[i].bodyB.angularVelocity = self.engine[source].joint[i].bodyB.angularVelocity&#xA;for i in range(len(self.engine[0].body)):  &#xA;  self.engine[destination].body[i].position = self.engine[source].body[i].position&#xA;  self.engine[destination].body[i].angle = self.engine[source].body[i].angle&#xA;  self.engine[destination].body[i].linearVelocity = self.engine[source].body[i].linearVelocity&#xA;  self.engine[destination].body[i].angularVelocity = self.engine[source].body[i].angularVelocity&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Physics based localization is not discussed in literature, but Physics based control:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;DANCE: Faloutsos, Petros and Van de Panne, Composable controllers for physics-based character animation (2001)&lt;/li&gt;&#xA;&lt;li&gt;MuJoCo: Todorov, Emanuel and Erez, Tom, A physics engine for model-based control, 2012&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="14283" LastEditorUserId="14283" LastEditDate="2016-07-26T12:10:47.997" LastActivityDate="2016-07-26T12:10:47.997" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10357" PostTypeId="1" AcceptedAnswerId="10358" CreationDate="2016-07-25T22:27:49.990" Score="2" ViewCount="97" Body="&lt;p&gt;Good Day,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am working on an autonomous quadcopter. May I ask if there is a significant difference if my control loop dropped from 500Hz to 460Hz due to added lines of code that would require retuning of the PID gains? And if retuning is required, is it correct to assume that only the I and D gains should be retweaked since they are the only constants which are time dependent? Thank you :)&lt;/p&gt;&#xA;" OwnerUserId="11311" LastActivityDate="2016-07-26T01:23:50.367" Title="PID Gains: Drop in control loop rate, need to retune?" Tags="&lt;quadcopter&gt;&lt;mobile-robot&gt;&lt;control&gt;&lt;pid&gt;&lt;stability&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10358" PostTypeId="2" ParentId="10357" CreationDate="2016-07-26T01:23:50.367" Score="2" Body="&lt;p&gt;All three constants should be able to stay the same assuming that you calculate the derivative and integral using the actual time step size.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only effect of a lower sampling rate should be a bigger &quot;delay&quot; in the plant, you are trying to control, due to zero order hold. Also the plant should not have any important dynamics above half the sampling frequency (Nyquist frequency).&lt;/p&gt;&#xA;" OwnerUserId="1487" LastActivityDate="2016-07-26T01:23:50.367" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10367" PostTypeId="1" CreationDate="2016-07-27T14:48:03.900" Score="3" ViewCount="91" Body="&lt;p&gt;Could you please see the attached battery images and tell me if it is safe to continue using this battery or should I discard it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/1VaJe.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1VaJe.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="14346" LastEditorUserId="110" LastEditDate="2016-07-30T00:42:24.223" LastActivityDate="2016-08-08T14:25:42.327" Title="Battery damaged?" Tags="&lt;battery&gt;&lt;lithium-polymer&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10368" PostTypeId="2" ParentId="10267" CreationDate="2016-07-27T17:29:10.660" Score="1" Body="&lt;p&gt;According to &lt;a href=&quot;https://stackoverflow.com/questions/221311/what-is-the-most-efficient-way-of-finding-a-path-through-a-small-world-graph&quot;&gt;https://stackoverflow.com/questions/221311/what-is-the-most-efficient-way-of-finding-a-path-through-a-small-world-graph&lt;/a&gt; A* is one of the best algorithm. Other algorithm like RRT working with the same principle (generate a graph of possible moves and select the best). To improve the performance a datadriven approach could help. In the paper &quot;Block A*: Database-Driven Search with Applications in Any-angle Path-Planning&quot; this kind of algorithm is explained. Another possibility (which i prefer) is E-RRT which is described in &quot;Bruce, James: Real-time randomized path planning for robot navigation, 2002&quot;. The implementation is difficult and the topic is under current research.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastEditorUserId="-1" LastEditDate="2017-05-23T12:37:11.430" LastActivityDate="2016-07-27T17:29:10.660" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="10369" PostTypeId="1" CreationDate="2016-07-27T22:33:33.830" Score="1" ViewCount="1068" Body="&lt;p&gt;What are the specifications of the digital compass used in the iPhone 6S?&#xA;I am trying to measure yaw angle using the magnetometer.  I observed the magnetometer/digital compass in the iPhone is really very stable. The north direction is always the same, while the magnetometer I am using (or the magnetometer used in Nexus) needs to be calibrated again and again to function properly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found that the digital compass &lt;strong&gt;AK8963C&lt;/strong&gt; is used in the iPhone 6, but it needs calibration.  So I am not sure what is inside iPhone 6S because it works without a calibration procedure.&lt;/p&gt;&#xA;" OwnerUserId="14060" LastEditorUserId="110" LastEditDate="2016-07-30T00:49:23.303" LastActivityDate="2016-07-30T00:49:23.303" Title="What are the specifications of the digital compass used in iPhone 6S" Tags="&lt;imu&gt;&lt;sensor-fusion&gt;&lt;magnetometer&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10370" PostTypeId="2" ParentId="10367" CreationDate="2016-07-27T23:21:33.153" Score="7" Body="&lt;p&gt;If the battery cost less than the thing you're powering, then you should probably discard the battery. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're stubborn (or very strapped for cash) &lt;strong&gt;and&lt;/strong&gt; the battery didn't catch fire when the original damage happened, then it might perform okay, but I'd say there's a moderate chance of fire, especially at high currents. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Check battery voltage with a multimeter, then come back and check it again after a few hours. You're looking for a high self-discharge rate, which would indicate the battery is internally shorted out. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the battery voltage drops noticeably after a few hours (or even a day), then you should trash the battery. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The terminal voltage on a lithium battery only drops about a quarter of a volt from 80% to 20% state of charge, so anything more than a hundredth of a volt or two and I'd call that significant. Every hundredth is about 2.4 percent of total battery capacity in that range, so 0.02V is roughly 5% of battery capacity.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-07-27T23:21:33.153" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10371" PostTypeId="1" CreationDate="2016-07-28T10:06:29.013" Score="3" ViewCount="1736" Body="&lt;p&gt;I was looking for a Python implementation of SLAM and stumbled upon &lt;a href=&quot;https://github.com/simondlevy/BreezySLAM&quot; rel=&quot;nofollow noreferrer&quot;&gt;BreezySLAM&lt;/a&gt; which implements &lt;a href=&quot;https://openslam.org/tinyslam.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;tinySLAM&lt;/a&gt; aka CoreSLAM. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My robot is equipped with the &lt;a href=&quot;https://www.hokuyo-aut.jp/02sensor/07scanner/urg_04lx_ug01.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;hokuyo urg-04lx-ug01&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have odometry hence passing it to the updater: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;self.slam.update(ls_array, (dxy_mm, dtheta_deg, dt));&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;As I &lt;strong&gt;start&lt;/strong&gt; moving the robot starts discovering &lt;strong&gt;room A&lt;/strong&gt; and then &lt;strong&gt;room B &amp;amp; C&lt;/strong&gt; already the map seems to have rotated. I come back to room A and return the initial pose &lt;strong&gt;end=start&lt;/strong&gt; using the same path. Now I noticed &lt;strong&gt;room A&lt;/strong&gt; has significantly rotated in relation to the other room. Consequently the map isn't correct at all, neither is the path travelled by the robot. &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Wasn't the SLAM supposed to store and keep the boundaries for the first room it discovered?&lt;/li&gt;&#xA;&lt;li&gt;Why this rotation may be happening?&lt;/li&gt;&#xA;&lt;li&gt;How could I try to troubleshoot this issue with the data I have collected (odometry, calculated position, liDAR scans)?&lt;/li&gt;&#xA;&lt;li&gt;Can I tune SLAM to do a better job for my robot?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;SLAM is pretty new to me, so please bear with me, any pointers on literature that may clarify and moderate my expectations of what SLAM can do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/vsidl.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vsidl.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Extra&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;... and &lt;a href=&quot;https://www.youtube.com/watch?v=aUkBa1zMKv4&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here the best video I found to understand particle filter&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="14350" LastEditorUserId="14350" LastEditDate="2016-07-28T15:43:09.147" LastActivityDate="2016-08-31T22:52:06.137" Title="Understanding and correct drift when using BreezySLAM (aka tinySLAM / CoreSLAM)" Tags="&lt;localization&gt;&lt;slam&gt;&lt;mapping&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10372" PostTypeId="2" ParentId="10371" CreationDate="2016-07-28T12:14:06.380" Score="2" Body="&lt;p&gt;You'll find that &lt;a href=&quot;https://www.openslam.org/gmapping.html&quot; rel=&quot;nofollow&quot;&gt;Gmapping&lt;/a&gt; works a lot better. I have used core slam quite a bit with the 04lx, tweaked the code, and tuned the algorithm. It works in a lot of cases, but... &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you really want to keep using it, adjust your parameters so that it searches more (more particles) and really make sure that the robot motion is inside the search domain.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While tuning (and in general) monitor your map and restart with better parameters if the map jumps or rotates.&lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="14350" LastEditDate="2016-07-28T18:36:39.823" LastActivityDate="2016-07-28T18:36:39.823" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10373" PostTypeId="2" ParentId="10369" CreationDate="2016-07-28T13:57:56.083" Score="1" Body="&lt;p&gt;Typically, and unsurprisingly, proprietary information (to include part numbers, schematics, etc.) is closely guarded by companies. As such, I am not sure how much information you can expect to receive without significant effort on your part. For starters, you can be sure that Apple will not release its specifications or parts list.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Take a look at the &lt;a href=&quot;https://www.ifixit.com/Teardown/iPhone+6s+Teardown/48170&quot; rel=&quot;nofollow&quot;&gt;iFixIt&lt;/a&gt; tear down of the iPhone 6s and you will see no mention of the compass chip. Doing some more research, you can find the &lt;a href=&quot;http://www.chipworks.com/sites/default/files/Apple_iPhone_6s_A1688_Smartphone_Chipworks_Teardown_Report_BPT-1509-801_with_Commentary.pdf&quot; rel=&quot;nofollow&quot;&gt;ChipWorks parts list&lt;/a&gt; of the iPhone 6s, and again, the compass part number and manufacturer are listed as &quot;unknown.&quot; The reason for this is the A9 system on a chip, which now incorporates a number of sensors -- including the magnetometer -- which were discretely included in previous models. Furthermore, you can read about the M9 co-processor that sits inside the A9 and is used to process sensor data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Despite the lack of information, I would wager that the AK8963C is the digital compass used in the iPhone 6s. I base this speculation on the fact that the AK8963C was used in both the iPhones 5, 5s, and 6. In fact, the same IMUs are used between most, if not all, of these models, which suggests that Apple has invested in this set of sensors and is content with their performance. Lastly, I am not intimately familiar with the iPhone 6 and 6s, but again, I would wager that the difference between the two, at least in terms of capability, is marginal. Assuming that the AK8963C is the compass, the &lt;a href=&quot;https://www.akm.com/akm/en/file/datasheet/AK8963C.pdf&quot; rel=&quot;nofollow&quot;&gt;datasheet&lt;/a&gt; is available, and should answer several high-level and many low-level questions that you have. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for calibration--yes, the AK8963C needs it. Again, I suspect that you will have a difficult time getting any manufacturer to detail the procedure, especially Apple. Among other relevant things, the datasheet highlights some tuning parameters, but at the end of the day, this is all happening in software--whether you require the user to calibrate, or handle it automatically, calibration is almost certainly happening. Still, &lt;a href=&quot;http://appleinsider.com/articles/15/09/28/reported-ios-9-gyroscope-bug-affects-iphone-6s-augmented-reality-apps&quot; rel=&quot;nofollow&quot;&gt;this article&lt;/a&gt; and the many like it suggest that perhaps the iPhone 6s sensor outputs are not a accurate as your observations exist.&lt;/p&gt;&#xA;" OwnerUserId="9585" LastActivityDate="2016-07-28T13:57:56.083" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10374" PostTypeId="2" ParentId="10348" CreationDate="2016-07-29T14:40:17.747" Score="3" Body="&lt;p&gt;So, as I mentioned in an earlier comment, it looks like you're using a mashup of methods. You're not applying any one method correctly; instead you're mis-using part of one method, then using the results of that to another mis-applied half-method, and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, maybe a refresher on rotation matrices. You can rotate about each of the three primary axes - the x-axis ($\phi$ or &quot;roll&quot;), the y-axis ($\theta$ or &quot;pitch&quot;), and the z-axis ($\psi$ or &quot;yaw&quot;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The order in which you do these operations matters - if you pitch then yaw, that gives you a different orientation than if you yaw then pitch. Try with your hand and see, and remember that each rotation happens about the &lt;em&gt;hand's&lt;/em&gt; orientation axes, not &lt;em&gt;global&lt;/em&gt; axes. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For each rotation, you multiply the rotation matrices together. Conceptually, this is representing a set of successive rotations. For example, if you have:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\mbox{output} = R(\psi)R(\theta)R(\phi) \mbox{input} \\&#xA;$$&#xA;then you can see that this is equivalent to:&#xA;$$&#xA;\mbox{intermediate}_{\phi} = R(\phi)\mbox{input} \\&#xA;\mbox{intermediate}_{\theta} = R(\theta)\mbox{intermediate}_{\phi} \\&#xA;\mbox{output} = R(\psi)\mbox{intermediate}_{\theta} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This explicitly shows &lt;em&gt;successive&lt;/em&gt; rotations, but you can also &quot;collapse&quot; the rotation matrices into one &quot;shortcut&quot; rotation matrix - &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;R(\mbox{net}) = R(\psi)R(\theta)R(\phi) \\&#xA;\mbox{output} = R(\mbox{net})\mbox{input} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;First portion of your code.&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;That mentioned, take a look at the beginning of your code. I think the MathJax is easier to look at than code, so I'll use that. First, you get the accelerometer data and then &quot;convert to angles&quot; as follows:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\phi_x = \tan^{-1}{\left(\frac{a_z}{a_x^2 + a_y^2}\right)} \\&#xA;\theta_y = \tan^{-1}{\left(\frac{a_x}{a_y^2 + a_z^2}\right)} \\&#xA;\psi_z = \tan^{-1}{\left(\frac{a_y}{a_y^2 + a_x^2}\right)} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First thing to note about this is that generally you have one axis divided by the other two, &lt;em&gt;except for the last line&lt;/em&gt; - there you have y/(y^2+x^2), which breaks your pattern. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second thing to note about this is that it seems like maybe you're trying to use the same method given in &lt;a href=&quot;https://www.nxp.com/files/sensors/doc/app_note/AN3461.pdf&quot; rel=&quot;nofollow&quot;&gt;this application note from Freescale Semiconductor (Document Number: AN3461)&lt;/a&gt; that says (briefly, from Page 10):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Solving for the roll and pitch angles... and using the subscript xyz to denote that &lt;strong&gt;the roll and pitch angles are computed according to the rotation sequence $R_{xyz}$&lt;/strong&gt;, gives:&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\tan{\phi}_{xyz} = \left(\frac{G_{py}}{G_{pz}}\right) \\&#xA;\tan{\theta}_{xyz} = \frac{-G_{px}}{\sqrt{G_{py}^2 + G_{pz}^2}} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Solving for the roll and pitch angles... and using the subscript yxz to denote that &lt;strong&gt;the angles are computed according to the rotation sequence $R_{yxz}$&lt;/strong&gt;, gives: &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\tan{\phi}_{xyz} = \frac{G_{py}}{\sqrt{G_{px}^2 + G_{pz}^2}} \\&#xA;\tan{\theta}_{xyz} = \left(\frac{-G_{px}}{G_{pz}}\right) \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The document also states (bottom of Page 9) that isn't not possible to get yaw angle without a compass. So, hopefully at this point you can begin to see what I'm calling a &quot;misapplied mashup&quot;:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Your method uses $\tan^{-1}\left(a/(b^2 + c^2)\right)$ for each angle. This is missing a square root symbol in the denominator.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;More importantly&lt;/strong&gt;, if you use that form for roll and pitch angles, then you're getting roll from one rotation sequence and pitch &lt;em&gt;from a different rotation sequence&lt;/em&gt;. &lt;/li&gt;&#xA;&lt;li&gt;Also, the sign on that form should change. &lt;/li&gt;&#xA;&lt;li&gt;Regardless of points 1-3 above, you &lt;strong&gt;cannot&lt;/strong&gt; use this method for yaw angle. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;h2&gt;Second portion of your code.&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Now we move on from here to the gyro section. Remember that a gyroscope outputs angular &lt;em&gt;velocities&lt;/em&gt;. It looks like you calculate the &quot;rotational velocity magnitude&quot; as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\mbox{inst_angle} = \sqrt{\omega_x^2 + \omega_y^2 + \omega_z^2} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And then you calculate an &quot;axis&quot; as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\mbox{x-axis component} = \frac{\omega_x}{\mbox{inst_angle}} \\&#xA;\mbox{y-axis component} = \frac{\omega_y}{\mbox{inst_angle}} \\&#xA;\mbox{z-axis component} = \frac{\omega_z}{\mbox{inst_angle}} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This seems to work out, &lt;strong&gt;except&lt;/strong&gt; you calculate the &lt;em&gt;incremental angle&lt;/em&gt; that you use to rotate about this axis:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\mbox{inst_angle} = \mbox{inst_angle}/\mbox{sample rate} \\&#xA;$$&#xA;which, for the record, is equivalent to:&#xA;$$&#xA;\mbox{inst_angle} = \mbox{inst_angle} * \mbox{sample period} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At this point, you get the &quot;mis-applied&quot; portion of the gyro code. The accelerometer-angle equations from the first section should give &lt;em&gt;absolute angles&lt;/em&gt; (based on whichever rotation sequence you choose to use*. The gyro-angle equation above gives you an &lt;em&gt;incremental&lt;/em&gt; angle. Further, the gyro-angle is the incremental rotation &lt;em&gt;about the axis you calculate&lt;/em&gt;, where the accelerometer-angle is the absolute angle &lt;em&gt;relative to the world frame&lt;/em&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, even though these are different angles (incremental vs. absolute), and even though they're in different frames (&lt;em&gt;about&lt;/em&gt; an axis vs. &lt;em&gt;relative&lt;/em&gt; to world frame), you proceed to push the two together by smooshing the accelerometer-angles into a &quot;magnitude&quot; (which doesn't make sense) and then add them with a complementary filter:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\mbox{inst_accel_angle} = \sqrt{\phi_x^2 + \theta_y^2 + \psi_z^2} \\&#xA;\mbox{inst_angle} = \alpha \left(\mbox{inst_angle}\right) + (1-\alpha)\left(\mbox{inst_accel_angle}\right) \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Final portion of your code:&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;At this point, you have an &quot;angle&quot; and an &quot;axis&quot;, and it looks like you correctly convert the axis/angle set to a quaternion, &lt;em&gt;however&lt;/em&gt;, this quaternion is more of an incremental quaternion because the axis is based off of &lt;em&gt;rate&lt;/em&gt; (angular velocity) information. The angle is a mash-up of incremental and absolute angles, so it doesn't mean much of anything. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider this - if you actively move the sensor to a new orientation, your quaternion will change to some non-zero axis &lt;em&gt;while you're moving it&lt;/em&gt; because the axis is based on your &lt;em&gt;angular velocity&lt;/em&gt;. When you hold it stead at the new orientation, &lt;em&gt;even though it's pointed in some direction&lt;/em&gt; your axis information is now zero because your rate is zero. &lt;/p&gt;&#xA;&#xA;&lt;h2&gt;The solution&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Remember that a quaternion represents an &lt;em&gt;orientation&lt;/em&gt;, so let's leave out the accelerometers to begin with. Follow these steps to implement a first-pass quaternion representation:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;At the beginning of your code, set the starting orientation. Remember, a gyroscope gives a &lt;em&gt;velocity&lt;/em&gt; (speed), so you have to tell it where it's starting. I would suggest orienting along a cardinal axis with no rotation. So, for example, if you align along the x-axis with no rotation, then you'd wind up with $Q = [0,1,0,0]$ for w,x,y,z. &lt;/li&gt;&#xA;&lt;li&gt;Get your gyro data and build a rate vector (with values in rad/s!) as $S = [0,\omega_x,\omega_y,\omega_z]$. &lt;/li&gt;&#xA;&lt;li&gt;Find how quickly this means your quaternion is moving by finding $\frac{dQ}{dt} = \frac{1}{2}Q\otimes S$ where $\otimes$ is the quaternion multiplication as you've defined it in your question. &lt;/li&gt;&#xA;&lt;li&gt;Increment your quaternion based on the quaternion rate you calculated in Step 3 above: $Q = Q + \frac{dQ}{dt}/\mbox{sample rate}$ or $Q = Q + \frac{dQ}{dT}*\mbox{sample period}$. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;That's it! That's all that you do to get the quaternion. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, as I mentioned earlier, the accelerometers give an &lt;em&gt;absolute&lt;/em&gt; oriention (in roll and pitch &lt;strong&gt;only&lt;/strong&gt;!!), so you can use those values to correct for long-term drift in the results you get from using the gyroscope. For more information on how to do this, try checking out the &lt;a href=&quot;https://www.samba.org/tridge/UAV/madgwick_internal_report.pdf&quot; rel=&quot;nofollow&quot;&gt;Madgwick Filter&lt;/a&gt;. (Final comment: I was going to link you directly to Sebastian Madgwick's page, but it looks like it's &lt;a href=&quot;http://www.x-io.co.uk/open-source-imu-and-ahrs-algorithms/&quot; rel=&quot;nofollow&quot;&gt;down&lt;/a&gt;. Not sure what happened, but I'd get the paper I linked sooner rather than later if you're interested, if he's taking down his IP.)&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;In response to your questions&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;OP asks (paraphrased) - &quot;A quaternion $q$ represents a pose, so there is no angular rate information, so how does quaternion multiplication $q\otimes S$ make sense units-wise? If I consider $q$ to have units of rate, then the numeric integration doesn't make sense.&quot; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My response - I wish I could explain the physical meaning of the quaternion math, but I can't; I don't know how to. All I can say is, the formula for quaternion rate of change is $dQ/dt = \frac{1}{2}q\otimes S$, and that you then perform numeric integration by $q = q + (dQ/dt)*dt$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Quaternions are unitless, so that may help your conceptual understanding. Consider the quaternion rate equation to be &quot;scaling&quot; the gyro rates to fit the quaternion format. That is, the term $\frac{1}{2}q\otimes$ converts $S$ to $dQ/dt$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're having stability issues, the very first thing I would check is that you are actually passing your angular rates &lt;em&gt;as radians per second&lt;/em&gt; and not degrees per second. Based on your math above, it looks like your gyro outputs in units of deg/s. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The next thing to do would be to use the correct sample_rate. For this, rather than dividing by the sample_rate I would multiply by the sample period. It's important to use the sample period &lt;em&gt;of your software&lt;/em&gt; and not of the sensor. For example, if your software is running at 3Hz, but your sensor is running at 30Hz, then your sensor will report a sample period of 33.3ms, when in actuality you're only &lt;em&gt;collecting&lt;/em&gt; samples at 3.3ms. This will cause your numeric integration to not work correctly. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, the last to note is that this method of updating the quaternion is used to determine how the world coordinates convert to sensor coordinates. If you are interested in viewing sensor coordinates in world coordinates (for example, if you would like to &lt;a href=&quot;https://www.youtube.com/watch?v=gUBjpF7rnww&quot; rel=&quot;nofollow&quot;&gt;plot a representation of the sensor&lt;/a&gt;), then you need to take the quaternion conjugate. This is akin to taking the inverse of a rotation matrix to flip directionality between world/sensor frames. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;qConj = QuaternionConjugate(q)&#xA;qConj.w = q.w;&#xA;qConj.x = -q.x;&#xA;qConj.y = -q.y;&#xA;qConj.z = -q.z;&#xA;end;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2016-08-01T13:12:45.417" LastActivityDate="2016-08-01T13:12:45.417" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="10375" PostTypeId="2" ParentId="10294" CreationDate="2016-07-29T15:03:57.700" Score="0" Body="&lt;p&gt;I know that IR has a similar issue. One of the ways it's over come is to have the sensor send the signal in different patterns (ie a duty cycle of 75 verse 50). If you know what your expecting back you know if there was interference. From there you can have it wait a random amount of time and try again.&lt;/p&gt;&#xA;" OwnerUserId="14284" LastActivityDate="2016-07-29T15:03:57.700" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10377" PostTypeId="1" CreationDate="2016-07-30T08:47:12.137" Score="0" ViewCount="471" Body="&lt;p&gt;I am doing project on odometry using raspberry pi. I know that encoder motor will tell me how much distance my robot has covered, but I have no idea ho to implement completely. I just need guideline about which steps to follow. Till now I have interfaced motor with raspberry pi and counted the number of rotation. I have questions as follow?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How to plot map of odometry using which language and library?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you know anything, just give me guideline about steps to follow.&lt;/p&gt;&#xA;" OwnerUserId="14361" LastEditorUserId="9860" LastEditDate="2016-07-30T10:43:32.153" LastActivityDate="2016-07-31T12:22:20.043" Title="Need help regarding odometry using Encoder motor and raspberry pi" Tags="&lt;motor&gt;&lt;raspberry-pi&gt;&lt;odometry&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10378" PostTypeId="1" AcceptedAnswerId="10384" CreationDate="2016-07-30T13:08:57.790" Score="2" ViewCount="235" Body="&lt;p&gt;I want to use a MPU9150 to give me the position (XY) and heading (angle) of a wheeled robot. This MPU9150 from invensense has a Digital Motion Processor in it which can give me a quaternion. &#xA;But how do I convert this quaternion data to an XY-coordinate and an angle so I can plot the position of my vehicle?&lt;/p&gt;&#xA;" OwnerUserId="13901" LastActivityDate="2016-07-31T23:55:59.957" Title="Robot positioning using IMU quaternion data?" Tags="&lt;wheeled-robot&gt;&lt;imu&gt;&lt;sensor-fusion&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10379" PostTypeId="1" AcceptedAnswerId="10386" CreationDate="2016-07-30T23:38:41.473" Score="1" ViewCount="63" Body="&lt;p&gt;I recently bought a DW558 Quadrocopter (&lt;a href=&quot;http://www.gearbest.com/rc-quadcopters/pp_110531.html&quot; rel=&quot;nofollow&quot;&gt;http://www.gearbest.com/rc-quadcopters/pp_110531.html&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After few minutes, the battery is dead. Which is understandable since the battery is so tiny. It is a 3.7V 250mAh battery, included with the Quadrocopter. I was thinking about buying spare batteries for it, and I have few questions about this:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;1: Can I buy any kind of battery 3.7V 250mAh of the same size or is there any other property I have to pay attention?&lt;/li&gt;&#xA;&lt;li&gt;2: Can I buy batteries of 3.7V and 350mAh (100 more than the included battery) and expect my Quadrocopter to be more &quot;energic&quot;? Is it bad to buy batteries with more mAh ?&lt;/li&gt;&#xA;&lt;li&gt;2b: If I buy few 3.7V 350mAh batteries, will I be able to charge them with the same charger I got with my 3.7V 250 mAh batteries or do I have to buy a specific charger for these too?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;(these are the batteries I want to buy, any comment is greatly appreciated: 350mAh batteries x5 &lt;a href=&quot;http://www.gearbest.com/rc-quadcopter-parts/pp_196991.html&quot; rel=&quot;nofollow&quot;&gt;http://www.gearbest.com/rc-quadcopter-parts/pp_196991.html&lt;/a&gt; and/or 4x 250mAh batteries + charger &lt;a href=&quot;http://www.gearbest.com/rc-quadcopter-parts/pp_331372.html&quot; rel=&quot;nofollow&quot;&gt;http://www.gearbest.com/rc-quadcopter-parts/pp_331372.html&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you very much for your input. I think I just discovered my new hobby and I can't wait to have my spare batteries!&lt;/p&gt;&#xA;" OwnerUserId="14365" LastActivityDate="2016-08-01T14:09:37.843" Title="battery question for DW558 Explorer (small quadrocopter)" Tags="&lt;quadcopter&gt;&lt;battery&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10380" PostTypeId="2" ParentId="10377" CreationDate="2016-07-31T10:41:05.997" Score="3" Body="&lt;p&gt;You could maybe use Matlab to plot the position of your vehicle? This is how I'm trying to do that:&#xA;I have a 'logging'-program running on the Raspberry Pi that counts each sampling time the pulses from the encoders. This I log in a file. This file I upload in Matlab to calculate X and Y coordinate and the angle under which the vehicle is standing, assuming the vehicle starts at coordinate (0,0) and angle 0°.&#xA;These are the formula's I use. With 'triangle'-r and 'triangle'-l I mean the distance traveled by left and right wheel (can be calculated using pulses in log file and diameter of the wheel). Distance '2L' is the distance between the 2 wheels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/jwMNG.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/jwMNG.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wrote a &lt;a href=&quot;http://nl.mathworks.com/discovery/matlab-gui.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;matlab GUI&lt;/a&gt; in which I can browse a data file (from the Pi), calculates the X and Y position every sampling period and plot this is an XY graph. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ps: you didn't mention it, but I suppose you have a differential drive vehicle?!&lt;/p&gt;&#xA;" OwnerUserId="13901" LastActivityDate="2016-07-31T10:41:05.997" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10382" PostTypeId="1" CreationDate="2016-07-31T17:13:27.020" Score="6" ViewCount="674" Body="&lt;p&gt;I'm trying to develop an Extended Kalman Filter (EKF) for the positioning of a wheeled vehicle. I have a '&lt;a href=&quot;http://www.dfrobot.com/index.php?route=product/product&amp;amp;product_id=261#.V53MFvmLSUk&quot; rel=&quot;nofollow noreferrer&quot;&gt;Baron&lt;/a&gt;' robot frame with 4 static wheels, all driven by a motor. On the 2 rear wheels I have an encoder. I want to fuse this odometry data with data from an '&lt;a href=&quot;https://www.sparkfun.com/products/retired/11486&quot; rel=&quot;nofollow noreferrer&quot;&gt;MPU9150&lt;/a&gt;' 9 DOF IMU. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is my mathlab code for the what I call &lt;strong&gt;'medium-size' EKF&lt;/strong&gt;. This uses data from encoders, accelerometer in x and y axis and gyroscope z-axis.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Medium-size EKF&lt;/h1&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;Inputs:&lt;/strong&gt;   x: &quot;a priori&quot; state estimate vector (8x1)&lt;br/&gt;&#xA;           t: sampling time [s]&lt;br/&gt;&#xA;           P: &quot;a priori&quot; estimated state covariance vector (8x8)&lt;br/&gt;&#xA;           z: current measurement vector (5x1) (encoder left; encoder right; x-acceleration, y-acceleration, z-axis gyroscope)&lt;br/&gt;&#xA;  &lt;strong&gt;Output:&lt;/strong&gt;   x: &quot;a posteriori&quot; state estimate vector (8x1)&lt;br/&gt;&#xA;           P: &quot;a posteriori&quot; state covariance vector (8x8)&lt;br/&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;strong&gt;State vector x:&lt;/strong&gt; a 8x1 vector $\begin{bmatrix} x \rightarrow X-Position In Global Frame \\ \dot x \rightarrow Speed In X-direction Global Frame \\ \ddot x \rightarrow Acceleration In X-direction Global Frame \\ y \rightarrow Y-Position In Global Frame \\ \dot y \rightarrow Speed In Y-direction Global Frame \\ \ddot y \rightarrow Acceleration In Y-direction Global Frame \\ \theta \rightarrow Vehicle Angle In Global Frame \\ \dot \theta \rightarrow Angular Speed Of The Vehicle \end {bmatrix}$&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;strong&gt;Measurement vector z:&lt;/strong&gt; &lt;br/&gt;&#xA;  a 5x1 vector $\begin{bmatrix} \eta_{left} \rightarrow Wheelspeed Pulses On Left Wheel \\ \eta_{right} \rightarrow Wheelspeed Pulses On Right Wheel \\ \dot \theta_z \rightarrow GyroscopeMeasurementInZ-axisVehicleFrame \\ a_x \rightarrow AccelerometerMeasurementX-axisVehicleFrame \\ a_y \rightarrow AccelerometerMeasurementY-axisVehicleFrame \end {bmatrix}$&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;function [x,P] = moodieEKFmedium(x,t,P,z,sigma_ax,sigma_ay,sigma_atau,sigma_odo,sigma_acc,sigma_gyro)&#xA;&#xA;% Check if input matrixes are of correct size&#xA;[rows columns] = size(x);&#xA;if (rows ~= 8 &amp;amp;&amp;amp; columns ~= 1)&#xA;    error('Input vector size incorrect')&#xA;end&#xA;[rows columns] = size(z);&#xA;if (rows ~= 5 &amp;amp;&amp;amp; columns ~= 1)&#xA;    error('Input data vector size incorrect')&#xA;end&#xA;&#xA;% Constants&#xA;n0 = 16;&#xA;r = 30;&#xA;b = 50;&#xA;&#xA;Q = zeros(8,6);&#xA;Q(3,3) = sigma_ax;&#xA;Q(6,6) = sigma_ay;&#xA;Q(8,8) = sigma_atau;&#xA;%[Q(1,8),Q(3,6),Q(6,3)] = deal(small);&#xA;&#xA;dfdx = eye(8);&#xA;[dfdx(1,2),dfdx(2,3),dfdx(4,5),dfdx(5,6),dfdx(7,8)] = deal(t);&#xA;[dfdx(1,3),dfdx(4,6)] = deal((t^2)/2);&#xA;&#xA;dfda = zeros(6,6);&#xA;[dfda(3,3),dfda(6,6),dfda(8,8)] = deal(1);&#xA;&#xA;dhdn = eye(5,5);&#xA;&#xA;R = zeros(5,5);&#xA;[R(1,1),R(2,2)] = deal(sigma_odo);&#xA;R(3,3) = sigma_gyro;&#xA;[R(4,4),R(5,5)] = deal(sigma_acc);&#xA;%[R(2,1),R(1,2)] = deal(small);&#xA;&#xA;&#xA;% Predict next state&#xA;% xk = f(xk-1)&#xA;xtemp = zeros(8,1);&#xA;xtemp(1) = x(1) + t*x(2)+((t^2)/2)*x(3);&#xA;xtemp(2) = x(2) + t*x(3);&#xA;u1 = normrnd(0,sigma_ax);&#xA;xtemp(3) = x(3) + u1;&#xA;&#xA;xtemp(4) = x(4) + t*x(5)+((t^2)/2)*x(6);&#xA;xtemp(5) = x(5) + t*x(6);&#xA;u2 = normrnd(0,sigma_ay);&#xA;xtemp(6) = x(6) + u2;&#xA;&#xA;xtemp(7) = x(7) + t*x(8);&#xA;u3 = normrnd(0,sigma_atau);&#xA;xtemp(8) = x(8) + u3;&#xA;&#xA;x = xtemp&#xA;&#xA;% Predict next state covariance&#xA;% Pk = dfdx * Pk-1 * transpose(dfdx) + dfda * Q * transpose(dfda)&#xA;P = dfdx * P * transpose(dfdx) + dfda * Q * transpose(dfda);&#xA;&#xA;% Calculate Kalman gain&#xA;% Kk = P * transpose(dhdx) [dhdx * P + dhdn * R * transpose(dhdn)]^-1&#xA;dhdx = zeros(5,8);&#xA;if(x(2) == 0 &amp;amp;&amp;amp; x(5) == 0)&#xA;    [dhdx(1,2),dhdx(2,2)] = deal(0);&#xA;    [dhdx(1,4),dhdx(2,4)] = deal(0);&#xA;else&#xA;    [dhdx(1,2),dhdx(2,2)] = deal(((t*n0)/(2*pi*r))*(x(2)/sqrt(x(2)^2+x(5)^2)));&#xA;    [dhdx(1,4),dhdx(2,4)] = deal(((t*n0)/(2*pi*r))*(x(5)/sqrt(x(2)^2+x(5)^2)));&#xA;end&#xA;%[dhdx(1,2),dhdx(2,2)] = deal(((t*n0)/(2*pi*r))*(x(2)/sqrt(x(2)^2+x(5)^2)));&#xA;%[dhdx(1,4),dhdx(2,4)] = deal(((t*n0)/(2*pi*r))*(x(5)/sqrt(x(2)^2+x(5)^2)));&#xA;dhdx(1,6) = (t*n0*b)/(2*pi*r);&#xA;dhdx(2,6) = -(t*n0*b)/(2*pi*r);&#xA;&#xA;dhdx(4,3) = sin(x(7));&#xA;dhdx(4,6) = -cos(x(7));&#xA;dhdx(4,7) = (x(3)*cos(x(7)))+(x(6)*sin(x(7)));&#xA;&#xA;dhdx(5,3) = cos(x(7));&#xA;dhdx(5,6) = sin(x(7));&#xA;dhdx(5,7) = (-x(3)*sin(x(7)))+(x(6)*cos(x(7)));&#xA;&#xA;Kk = P * transpose(dhdx) * (dhdx * P * transpose(dhdx) + dhdn * R * transpose(dhdn))^(-1)&#xA;&#xA;% Update state&#xA;H = zeros(5,1);&#xA;n1 = normrnd(0,sigma_odo);&#xA;H(1) = (((t*n0)/(2*pi*r))*sqrt(x(2)^2+x(4)^2))+(((t*n0*b)/(2*pi*r))*x(6)) + n1;&#xA;n2 = normrnd(0,sigma_odo);&#xA;H(2) = (((t*n0)/(2*pi*r))*sqrt(x(2)^2+x(4)^2))-(((t*n0*b)/(2*pi*r))*x(6)) + n2;&#xA;n3 = normrnd(0,sigma_gyro);&#xA;H(3)= x(8) + n3;&#xA;n4 = normrnd(0,sigma_acc);&#xA;H(4)=(x(3)*sin(x(7))-(x(6)*cos(x(7))))+n4;&#xA;n5 = normrnd(0,sigma_acc);&#xA;H(5)=(x(3)*cos(x(7))+(x(6)*sin(x(7))))+n5;&#xA;&#xA;x = x + Kk*(z-H)&#xA;&#xA;% Update state covariance&#xA;P = (eye(8)-Kk*dhdx)*P;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;end&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the filter in schematic :&#xA;&lt;a href=&quot;https://i.stack.imgur.com/hwxer.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hwxer.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These are the state transition equations I use : &#xA;$$\ x_{t+1} = x_{t} + T \cdot \dot x_{t} + \frac{T^{2}}{2} \cdot \ddot x_{t}$$&#xA;$$\ \dot x_{t+1} = \dot x_{t} + T \cdot \ddot x_{t} $$&#xA;$$\ \ddot x_{t+1} = \ddot x_{t} + u_{1} $$&#xA;$$\ y_{t+1} = y_{t} + T \cdot \dot y_{t} + \frac{T^{2}}{2} \cdot \ddot y_{t}$$&#xA;$$\ \dot y_{t+1} = \dot y_{t} + T \cdot \ddot y_{t} $$&#xA;$$\ \ddot y_{t+1} = \ddot y_{t} + u_{2} $$&#xA;$$\ \dot \theta_{t+1} = \dot \theta_{t} + T \cdot \ddot \theta_{t} $$&#xA;$$\ \ddot \theta_{t+1} = \ddot \theta_{t} + u_{3} $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These are the observation equations I use :&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\ \eta_{left} = \frac{T \cdot n_{0}}{2 \cdot \pi \cdot r} \cdot \sqrt{\dot x^{2} + \dot y^{2}} + \frac{T \cdot n_{0} \cdot b}{2 \cdot \pi \cdot r} \cdot \dot \theta + n_{1}$$&#xA;$$\ \eta_{right} = \frac{T \cdot n_{0}}{2 \cdot \pi \cdot r} \cdot \sqrt{\dot x^{2} + \dot y^{2}} - \frac{T \cdot n_{0} \cdot b}{2 \cdot \pi \cdot r} \cdot \dot \theta + n_{2}$$&#xA;$$\ \dot \theta_{z} = \dot \theta + n_{3}$$&#xA;$$\ a_{x} = \ddot x \sin \theta - \ddot y \cos \theta + n_{4}$$&#xA;$$\ a_{y} = \ddot x \cos \theta + \ddot y \sin \theta + n_{5}$$&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Small-size EKF&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;I wanted to test my filter, therefore I started with a smaller one, in which I only give the odometry measurements as input. This because I know that if I always receive the same amount of pulses on the left and right encoder, than my vehicle should be driving a straight line. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;Inputs:&lt;/strong&gt;   x: &quot;a priori&quot; state estimate vector (6x1)&lt;br/&gt;&#xA;           t: sampling time [s]&lt;br/&gt;&#xA;           P: &quot;a priori&quot; estimated state covariance vector (6x6)&lt;br/&gt;&#xA;           z: current measurement vector (2x1) (encoder left; encoder right)&lt;br/&gt;&#xA;  &lt;strong&gt;Output:&lt;/strong&gt;   x: &quot;a posteriori&quot; state estimate vector (6x1)&lt;br/&gt;&#xA;           P: &quot;a posteriori&quot; state covariance vector (6x6)&lt;br/&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;strong&gt;State vector x:&lt;/strong&gt; a 6x1 vector $\begin{bmatrix} x \rightarrow X-Position In Global Frame \\ \dot x \rightarrow Speed In X-direction Global Frame  \\ y \rightarrow Y-Position In Global Frame \\ \dot y \rightarrow Speed In Y-direction Global Frame \\  \theta \rightarrow Vehicle Angle In Global Frame \\ \dot \theta \rightarrow Angular Speed Of The Vehicle \end {bmatrix}$&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;strong&gt;Measurement vector z:&lt;/strong&gt;&#xA;  a 2x1 vector $\begin{bmatrix} \eta_{left} \rightarrow Wheelspeed Pulses On Left Wheel \\ \eta_{right} \rightarrow Wheelspeed Pulses On Right Wheel \end {bmatrix}$&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;% Check if input matrixes are of correct size&#xA;[rows columns] = size(x);&#xA;if (rows ~= 6 &amp;amp;&amp;amp; columns ~= 1)&#xA;    error('Input vector size incorrect')&#xA;end&#xA;[rows columns] = size(z);&#xA;if (rows ~= 2 &amp;amp;&amp;amp; columns ~= 1)&#xA;    error('Input data vector size incorrect')&#xA;end&#xA;&#xA;% Constants&#xA;n0 = 16;&#xA;r = 30;&#xA;b = 50;&#xA;&#xA;Q = zeros(6,6);&#xA;Q(2,2) = sigma_ax;&#xA;Q(4,4) = sigma_ay;&#xA;Q(6,6) = sigma_atau;&#xA;%[Q(1,8),Q(3,6),Q(6,3)] = deal(small);&#xA;&#xA;dfdx = eye(6);&#xA;[dfdx(1,2),dfdx(3,4),dfdx(5,6)] = deal(t);&#xA;&#xA;dfda = zeros(6,6);&#xA;[dfda(2,2),dfda(4,4),dfda(6,6)] = deal(1);&#xA;&#xA;dhdn = eye(2,2);&#xA;&#xA;R = zeros(2,2);&#xA;[R(1,1),R(2,2)] = deal(sigma_odo);&#xA;%[R(2,1),R(1,2)] = deal(small);&#xA;&#xA;&#xA;% Predict next state&#xA;% xk = f(xk-1)&#xA;xtemp = zeros(6,1);&#xA;xtemp(1) = x(1) + t*x(2);&#xA;u1 = normrnd(0,sigma_ax);&#xA;xtemp(2) = x(2) + u1;&#xA;xtemp(3) = x(3) + t*x(4);&#xA;u2 = normrnd(0,sigma_ay);&#xA;xtemp(4) = x(4) + u2;&#xA;xtemp(5) = x(5) + t*x(6);&#xA;u3 = normrnd(0,sigma_atau);&#xA;xtemp(6) = x(6) + u3;&#xA;&#xA;x = xtemp&#xA;&#xA;% Predict next state covariance&#xA;% Pk = dfdx * Pk-1 * transpose(dfdx) + dfda * Q * transpose(dfda)&#xA;P = dfdx * P * transpose(dfdx) + dfda * Q * transpose(dfda);&#xA;&#xA;% Calculate Kalman gain&#xA;% Kk = P * transpose(dhdx) [dhdx * P * transpose(dhdx) + dhdn * R * transpose(dhdn)]^-1&#xA;dhdx = zeros(2,6);&#xA;if((x(2) &amp;lt; 10^(-6)) &amp;amp;&amp;amp; (x(4)&amp;lt; 10^(-6)))&#xA;    [dhdx(1,2),dhdx(2,2)] = deal((t*n0)/(2*pi*r));&#xA;    [dhdx(1,4),dhdx(2,4)] = deal((t*n0)/(2*pi*r));&#xA;else&#xA;    [dhdx(1,2),dhdx(2,2)] = deal(((t*n0)/(2*pi*r))*(x(2)/sqrt(x(2)^2+x(4)^2)));&#xA;    [dhdx(1,4),dhdx(2,4)] = deal(((t*n0)/(2*pi*r))*(x(4)/sqrt(x(2)^2+x(4)^2)));&#xA;end&#xA;%[dhdx(1,2),dhdx(2,2)] = deal(((t*n0)/(2*pi*r))*(x(2)/sqrt(x(2)^2+x(4)^2)));&#xA;%[dhdx(1,4),dhdx(2,4)] = deal(((t*n0)/(2*pi*r))*(x(4)/sqrt(x(2)^2+x(4)^2)));&#xA;dhdx(1,6) = (t*n0*b)/(2*pi*r);&#xA;dhdx(2,6) = -(t*n0*b)/(2*pi*r);&#xA;&#xA;Kk = P * transpose(dhdx) * ((dhdx * P * transpose(dhdx) + dhdn * R * transpose(dhdn))^(-1))&#xA;&#xA;% Update state&#xA;H = zeros(2,1);&#xA;n1 = normrnd(0,sigma_odo);&#xA;H(1) = (((t*n0)/(2*pi*r))*sqrt(x(2)^2+x(4)^2))+(((t*n0*b)/(2*pi*r))*x(6)) + n1;&#xA;n2 = normrnd(0,sigma_odo);&#xA;H(2) = (((t*n0)/(2*pi*r))*sqrt(x(2)^2+x(4)^2))-(((t*n0*b)/(2*pi*r))*x(6)) + n2;&#xA;&#xA;x = x + Kk*(z-H)&#xA;&#xA;% Update state covariance&#xA;P = (eye(6)-Kk*dhdx)*P;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;end&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Odometry observation equations&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;If you would wonder how I come to the observation equations for the odometry data: &#xA;&lt;a href=&quot;https://i.stack.imgur.com/owQ2F.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/owQ2F.jpg&quot; alt=&quot;odometry observation equations&quot;&gt;&lt;/a&gt;&#xA;$\ V_{vl} = V{c} + \dot \theta \cdot b \rightarrow V_{vl} = \sqrt{ \dot x^{2} + \dot y^{2}} + \dot \theta \cdot b$&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Problem&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;If I try the small-size EKF, using a Matlab user interface, it does seem to drive a straight line, but not under a heading of 0° like I would expect. Eventhough I start with a state vector of $\ x= \begin{bmatrix}0\\0\\0\\0\\0\\0\end{bmatrix}$ meaning starting at position [0,0] in the global coordinate frame, with speed and acceleration of zero and under an angle of 0°.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/SkMiq.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/SkMiq.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;In the top right corner you can see the measurement data which I give as input, which is 5 wheelspeed counts on every wheel, every sampling period. (Simulating straight driving vehicle)&#xA;In the top left corner you see a plot of the X and Y coordinate (from state vector) at the end of one predict+update cycle of the filter, labeled with the timecycle.&#xA;Bottom left corner is a plot of the angle in the state vector. You see that after 12 cycles the angle is still almost 0° like I would expect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Could anyone please provide some insights in to what could be wrong here?&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Solutions I've been thinking on&lt;/h1&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;I could use the 'odometry motion model' like explained in &lt;a href=&quot;https://robotics.stackexchange.com/questions/964/extended-kalman-filter-using-odometry-motion-model&quot;&gt;this question&lt;/a&gt;. The difference is that the odometry data is inserted in the predict step of the filter. But if I would do this, I see 2 problems: 1) I don't see how to make a small-size version of this for testing purposes, because I don't know which measurements to add in the update-step and 2) for the medium-size version I don't know how to make the observation equations as the state vector doesn't imply velocity and acceleration.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I could use the 'odometry motion model' and in the update step use the Euler-angle, which can be linked to $\ \theta $. This Euler-angle I can obtain from the Digital Motion Processor (DMP), implemented in the IMU. Then it is no problem that angular velocity is not in the state matrix. But than I still have a problem with the acceleration observation equations. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="13901" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2016-08-03T15:03:08.540" Title="Need help regarding development of Extended Kalman Filter for sensor-data fusion of odometry and IMU data" Tags="&lt;kalman-filter&gt;&lt;imu&gt;&lt;sensor-fusion&gt;&lt;odometry&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="10384" PostTypeId="2" ParentId="10378" CreationDate="2016-07-31T23:55:59.957" Score="2" Body="&lt;p&gt;The quaternion only contains information about the rotation of the vehicle. It will not contain information about the location of you vehicle on a 2-d plane. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;One method of converting quaternions to euler angles is to create the transformation matrix that is defined by the rotation and get the euler angles from that. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles&quot; rel=&quot;nofollow&quot;&gt;https://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8842" LastActivityDate="2016-07-31T23:55:59.957" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10385" PostTypeId="2" ParentId="1349" CreationDate="2016-08-01T02:40:50.673" Score="2" Body="&lt;p&gt;As others have said, you over constrained the problem.  In order to be workable you need to loosen some constraints.  Chiefly, you need to close the loop.  You have admitted as much when you said &quot;There should also be a validation at certain crucial points of task, to check whether it's acting according to the algorithm&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You must recognize that an open loop motion command does not always result in consistent motion.  There will usually be one side driving on long grass and the opposite side on short, so it will tend to accumulate systematic error which can be compensated.  With careful observation, you could tune out path error caused by ground contour; for one location only, not a very universal solution.  But how do you compensate for varying moisture levels(coefficient of friction), obstacles, changing power levels in prime mover, wheel spin.  These are just a few of the problems unaddressed by your plan.  You just need some type of sensor feedback.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The simplest feedback system I can think of is a number of lever switches around the front and both sides with 9in^2 paddles that float on top of the grass and detect grass height(mowed or unmowed).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The operator would begin by manually mowing a perimeter strip.  Finishing with one side on already mowed grass then engaging autonomous mode.  If at any point all of the switches detect mowed grass, stop because you are done, or on your way to a neighbors yard.  Also stop if all switches detect unmowed grass because then you are again blazing a trail to the neighbors yard.  Either way, operator intervention is now required.  As long as one side is mowed and the opposite unmowed, proceed forward.  Use the array off switches along the front to proceed with a line following algorithm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Working from the outside inward is preferred as the operator would still be onsite to observe the first few passes which present the greatest risk and probability of failure.  Is there a compelling reason that you chose to work from the inside outward without any way to detect the perimeter?&lt;/p&gt;&#xA;" OwnerUserId="14369" LastActivityDate="2016-08-01T02:40:50.673" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10386" PostTypeId="2" ParentId="10379" CreationDate="2016-08-01T14:09:37.843" Score="1" Body="&lt;p&gt;Looking at the links you gave, the 350mAh is slightly larger dimensions than the 250mAh and seems to have the same connector.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;As long as it fits and has the same connector then you can put in anything you want. So long as it is still a Li-Po.&lt;/li&gt;&#xA;&lt;li&gt;The &quot;energic&quot;ness of the quad will depend on the C rating of the battery, which is the current rating. A higher C rating battery will react faster to changes in load and hence provide a more snappy response. Although I doubt it will make much difference with such a small quad.&lt;/li&gt;&#xA;&lt;li&gt;You should be able to charge them with the same charger, it will just take slightly longer. Since battery chargers work on the voltage and current draw of the battery while charging they will work irrespective of the capacity of the battery.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So just make sure it fits the battery compartment and it should be fine.&lt;/p&gt;&#xA;" OwnerUserId="14230" LastActivityDate="2016-08-01T14:09:37.843" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="10387" PostTypeId="1" AcceptedAnswerId="10389" CreationDate="2016-08-01T15:28:51.073" Score="3" ViewCount="733" Body="&lt;p&gt;I recently bought a &lt;a href=&quot;http://www.snapdeal.com/product/flyers-bay-xdrone-evolution-24/1190637216#bcrumbSearch:drone&quot; rel=&quot;nofollow&quot;&gt;drone(quadcopter)&lt;/a&gt;. I like how the drone works but now I would like to create an application that will allow me to control the drone remotely from my PC or Phone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How does a computer or phone interface to an aerial vehicle?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some of my initial thoughts were &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Get a RF detector and detect what signals are being sent to the drone and replicate it using a new transmitter.&lt;/li&gt;&#xA;&lt;li&gt;Replace the control circuit in the drone with an Arduino and send corresponding signals to it to fly the drone&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Both these methods seem to be kind of far fetched and hard, but I'm not sure how this could otherwise be done.&lt;/p&gt;&#xA;" OwnerUserId="14371" LastEditorUserId="9720" LastEditDate="2016-08-01T17:27:40.620" LastActivityDate="2017-09-26T11:04:03.127" Title="How do I interface with a drone?" Tags="&lt;quadcopter&gt;&lt;software&gt;&lt;radio-control&gt;&lt;wireless&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="10389" PostTypeId="2" ParentId="10387" CreationDate="2016-08-01T17:39:39.387" Score="2" Body="&lt;p&gt;With a conventional RC vehicle, I would probably suggest getting your own receiver-transmitter set (something like XBEE transceivers or similar) and completely gutting the original system, but with a small quadcopter like you have, I think trying to replace the receiver would be very difficult to do while maintaining the aerodynamics of the vehicle. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could try to &lt;a href=&quot;http://www.instructables.com/id/Decoding-and-sending-433MHz-RF-codes-with-Arduino-/&quot; rel=&quot;nofollow&quot;&gt;monitor the control signals&lt;/a&gt; and re-create them, but a third option you might consider would be to spoof the input devices on the transmitter. That is, as I see it, you could:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Replace the transmitter-receiver pair (not recommended due to receiver form factor).&lt;/li&gt;&#xA;&lt;li&gt;Spoof the transmitter output (requires purchasing another transmitter-receiver pair of the same frequency with which to line monitor and spoof). &lt;/li&gt;&#xA;&lt;li&gt;Spoof the transmitter input. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The last option is what I would recommend. Get a multimeter and check the joystick outputs. I would imagine they're just potentiometers; I would expect a battery V+, a battery ground, and an analog voltage output. Then all you would need to do is to duplicate that functionality. Best case scenario would be that analog voltage falls within the same band as an Arduino analog output, in which case you could just wire ground to Arduino ground and the analog output direct to the joystick analog output line (after you remove the joystick). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Failing that, you could buy digital potentiometers and duplicate the functionality. Depending on how clever you wanted to be (and how much space is available) you could install a USB port and a switch to jump between joystick and Arduino control and have a modified computer-capable transmitter that can also be controller by people. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-08-01T17:39:39.387" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10390" PostTypeId="2" ParentId="8702" CreationDate="2016-08-02T02:53:26.650" Score="1" Body="&lt;p&gt;Sounds like a load balancing problem in combination with a current issue. Do you have another L298N to try? Make sure the IC isn't defective, or have you checked the current draw at each motor. &#xA;Do these motors have a capacitor installed across the leads on each motor? I doubt you hit the torque limit of the motors, as it appears that they came in a kit and were probably selected for the kit by the manufacturer because of their specs. It seems like You're not getting enough current to get past starting torque, a capacitor on each motor will help with the initial current draw.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How are you powering the USB? Is it from a laptop? Most USB ports on laptops put out pretty low current to save on battery. Try a powered USB hub.&lt;/p&gt;&#xA;" OwnerUserId="13204" LastActivityDate="2016-08-02T02:53:26.650" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10392" PostTypeId="1" AcceptedAnswerId="10401" CreationDate="2016-08-02T07:56:12.583" Score="0" ViewCount="102" Body="&lt;p&gt;I need a distance sensor (IR or Optical or any other) with 90 degree view angle to sense a rectangle surface.&#xA;in this case sensor must putting at the same level of surface area. please help me to solve this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/AiWo0.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/AiWo0.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="14377" LastActivityDate="2016-08-10T01:59:39.540" Title="view angle of distance sensor" Tags="&lt;mobile-robot&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10395" PostTypeId="2" ParentId="10382" CreationDate="2016-08-02T12:32:54.793" Score="2" Body="&lt;p&gt;You should first validate your filter is &lt;strong&gt;working&lt;/strong&gt; before second-guessing your modelling choices. But I agree both those filters look OK (although I did not double check all the maths) and both of your suggested changes should also work. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's a process I used to find errors in KF's, which is in no way comprehensive:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Plot the measurement residuals at every update.&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;They should start large and decrease asymptotically to the noise floor.&lt;/li&gt;&#xA;&lt;li&gt;Your residuals should fall within the gates for the usual Gaussian tolerance intervals (68, 95 and 99.7)% of residuals fall within ($1\sigma$, $2\sigma$, $3\sigma$) respectively.&lt;/li&gt;&#xA;&lt;li&gt;If this is not the case then your filter is not working properly which is usually due to errors in the actual KF implementation, or a measurement model.&lt;/li&gt;&#xA;&lt;li&gt;If it is converging but the quality is poorer than expected, it could simply be a covariance tuning problem&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Validate your measurement models and update step by disabling your predict stage&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;For each predict step, set $x_{k} = x_{k-1}$ but continue to grow $P$&lt;/li&gt;&#xA;&lt;li&gt;If the residuals aren't decreasing, your measurement models are probably wrong (since your models make the angle and position observable)&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Enable your Predict stage again and now validate your process model in the same way&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;For a comprehensive set of lecture notes, see &lt;a href=&quot;http://www.acfr.usyd.edu.au/pdfs/training/estKalFilter/EstimationSlidesKC1.pdf&quot; rel=&quot;nofollow&quot;&gt;ACFR's KF Tutorial&lt;/a&gt;, specifically after slide 121.&lt;/p&gt;&#xA;" OwnerUserId="8859" LastActivityDate="2016-08-02T12:32:54.793" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10396" PostTypeId="2" ParentId="10367" CreationDate="2016-08-02T14:16:42.503" Score="1" Body="&lt;p&gt;Assessing damage from a picture isn't going to tell you anything concrete.  If you're already considering discarding this battery, you might as well test its electrical properties (and physical properties) against an intact replacement.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;At a minimum, you should check whether the damaged battery has more internal resistance (i.e. can't supply as much current), runs hotter, has more self-discharge, and/or has less capacity than an intact battery.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The safest thing to do is discard it.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2016-08-02T14:16:42.503" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10397" PostTypeId="2" ParentId="10050" CreationDate="2016-08-02T18:31:01.023" Score="0" Body="&lt;p&gt;Sir &#xA;The answer to this question is 1&amp;amp;5,as SLAM is used to map the location based on the landmarks.So to do this it has to estimate the location of the features and also every robot must estimate its own position so the it takes the help of SLAM to estimate its position and orientation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;for more information I'm sharing the site from which I read about slam&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.gislounge.com/robotic-mapping-simultaneous-localization-and-mapping-slam/&quot; rel=&quot;nofollow&quot;&gt;https://www.gislounge.com/robotic-mapping-simultaneous-localization-and-mapping-slam/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="14384" LastActivityDate="2016-08-02T18:31:01.023" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10401" PostTypeId="2" ParentId="10392" CreationDate="2016-08-03T09:41:59.753" Score="0" Body="&lt;p&gt;I can think of two approaches to your problem.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Use a stereo camera pair. You can use a stereo camera pair utilizing a camera with a 90 degree field of view while setting the appropriate baseline to the range of or minimum distance from the from the two cameras which the rectangle needs to be detected. It fairly easy to implement. You can find many sources online. It can also be implemented on common SBC's such as the Raspberry Pi.&#xA;See here:&lt;a href=&quot;https://robotics.stackexchange.com/a/9645/11311&quot;&gt;Example Implementations using the Raspberry Pi&lt;/a&gt; I am currently able to get 6 fps for my purposes for the previous 2 fps.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Use a LIDAR sensor with the appropriate field of view. A colleague of mine working with our lab's automated vehicle utilized the LIDAR Lite sensor (lowest cost LIDAR sensor I think while also designing a sweep mechanism using a cheap motor) to get a 1-dimensional 360 degree sweep of his surroundings and characterize the objects through clustering if they are a pole, a wall or a car. I think you can do a similar approach but in 3D. See this for reference: &lt;a href=&quot;https://www.kickstarter.com/projects/scanse/sweep-scanning-lidar/description&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.kickstarter.com/projects/scanse/sweep-scanning-lidar/description&lt;/a&gt;. It also uses the Lidar Lite but the second version.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;There are many more approaches to the problem like using an ultrasonic or IR sensor matrix, but I think the 2 above are the most effective and easiest approach however not necessarily the lower cost option.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I hope it helps :)&lt;/p&gt;&#xA;" OwnerUserId="11311" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2016-08-10T01:59:39.540" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10403" PostTypeId="2" ParentId="10382" CreationDate="2016-08-03T14:57:39.670" Score="3" Body="&lt;p&gt;Adding to the above, my favorite way to debug a misbehaving filter is to isolate each step.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Make sure your prediction step works before correcting it. Your bot should drive straight right with 0,0,0 as a starting state and constant vel. Otherwise, your measurements are correcting your model, not sensor noise&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Remove the measurement step and feed residuals by hand. A zero vector residual should produce the same state you started with  (also great for verifying your state transitions, which may be wrong as above). If a zero residual produces a non zero change, your K matrix is usually wrong, and usually because your state transition Jacobian is wonky.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If prediction and residuals make sense, then check your measurements separately as well. Feed states and Odom measurements into it to make sure the resulting residuals match what you expect. E.g. 1,1 goes straight, 2,1 right curve, 1,2 left,  1,-1 adjusts only heading, etc.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If all that works, and your result still doesn't make sense when you put it together or display it, then the plumbing or display is the problem. I've wasted hours redefining all the equations because of a display bug.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;In your case I'm not clear about the odometery equations. You seem to be controlling vel in x,y,theta, but use odometery to update that velocity. Is it not the case that you are actually issuing wheel velocity commands? &lt;/p&gt;&#xA;" OwnerUserId="163" LastEditorUserId="163" LastEditDate="2016-08-03T15:03:08.540" LastActivityDate="2016-08-03T15:03:08.540" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10404" PostTypeId="1" AcceptedAnswerId="11162" CreationDate="2016-08-03T15:11:42.587" Score="4" ViewCount="531" Body="&lt;p&gt;I have implemented a particle filter algorithm for the state estimation of a mobile robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are several external range sensors(transmitters) in the environment which gives information on the distance (radius) of the robot based on the time taken for the receiver on the robot to send back its acknowledgement. So, using three or more such transmitters it will be possible to triangulate the position of the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The particle filter is initialized with 15000 particles and the sensor noise is relatively low (0.02m).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Update Phase: At each iteration a range information from an external sensor is received. This assigns higher weights to the particles along the radius of the external sensor. Not all the particles are equally weighted since the process noise is low. Hence in most of the cases, the particle relatively closer to the robot gets lower weight than an incorrect one that happens to be along the radius. The weight is a pdf.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Resampling Phase: At this stage, the lower weighted particle(the correct one) that has negligible weight gets lost because the higher weighted particle gets picked up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All this happens at the first iteration and so when the range information from another sensor arrives, the robot is already kidnapped.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Googling around, said that this problem is called as sample impoverishment and the most common approach is to resample only when the particle variance is low. (Effective Sample Size &amp;lt; number of particles / 2)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, when the particles are assigned negligible weights and there are relatively very few particles with higher weights, the diversity of the particles are lost at resampling phase. So, when the variance is higher resampling is done which removes the lower weighted particle and hence the diversity of the particles is lost. Isnt this completely the opposite of the above idea of ESS?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is my understanding of sample impoverishment correct? Is there a way this issue can be fixed?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any pointers or help would be highly appreciated.&lt;/p&gt;&#xA;" OwnerUserId="14385" LastActivityDate="2016-12-09T15:05:49.323" Title="Addressing the sample impoverishment in particle filter" Tags="&lt;mobile-robot&gt;&lt;localization&gt;&lt;particle-filter&gt;&lt;probability&gt;" AnswerCount="3" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="10405" PostTypeId="2" ParentId="10404" CreationDate="2016-08-03T20:00:47.330" Score="1" Body="&lt;p&gt;I'm not familiar with particle filtering, but if applying the weights between each sensor read is causing issues, why not accumulate weights &lt;em&gt;to be applied&lt;/em&gt; between sensor calls and apply them in bulk after all sensors have been read?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, it sounds like you're doing:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[Read 1]-&amp;lt; apply weights &gt;-[Read 2]-&amp;lt; apply weights &gt;-[Read 3]-&amp;lt; apply weights &gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I'm suggesting:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[R1]-&amp;lt; accumulate weights &gt;-[R2]-&amp;lt; accumulate &gt;-[R3]-&amp;lt; accumulate &gt;-&amp;lt; apply all weights &gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would imagine, in the scenario above, the particles that got the biggest accumulated weight would be the ones that are &quot;seen&quot; by all of the sensors. &lt;em&gt;Those&lt;/em&gt; would be the ones you would want to keep, right? &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-08-03T20:00:47.330" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10408" PostTypeId="1" CreationDate="2016-08-04T13:37:33.170" Score="2" ViewCount="468" Body="&lt;p&gt;I am a third-year electrical engineering student and am working on an intelligent autonomous robot in my summer vacations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The robot I am trying to make is supposed to be used in rescue operations. The information I would know is the position of the person (the coordinates of the person in a JSON file that can be changed anytime except during the challenge) to be rescued from a building on fire. I would also know the rooms of the building from a map, but I don't know where the robot may be placed inside the building to start the rescue operation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That means I have to localise the robot placed at an unknown position in a known environment, and then the robot can plan its path to the person who has to be rescued. I can use gyroscope, accelerometer, magnetometer and ultrasonic sensors to do the localising job. I cannot use a GPS module or a camera for this purpose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The object to be rescued (whose location is known in terms of coordinates &amp;amp; can be changed anytime) is surrounded by walls from 3 sides. Hence, adding more walls in this map.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to my research particle filter is the best method used for localization of robot. But how can I deal with the landmarks (walls) that are &lt;em&gt;fixed&lt;/em&gt; as shown in the map image and &lt;em&gt;that are variable&lt;/em&gt; depending on the location of the object to be rescued being provided in the JSON file?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can do the path planning from a known position to the target position, but I'm not sure how to determine the starting position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More about JSON file:&#xA;(1) json file containing the coordinates of the object to be rescued can change. (2) it won't change during the challenge. (3) json file will be provided to me in an SD card that my robot has to read. I have successfully written the code that will allow the robot to read the json file and hence the coordinates of the object to be rescued.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the map of the building which is known to me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/6EIgO.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6EIgO.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="14394" LastEditorUserId="14394" LastEditDate="2016-08-08T13:22:03.347" LastActivityDate="2016-10-13T00:32:25.373" Title="Localization of a Robot to find it Coordinates according to the Known Map" Tags="&lt;localization&gt;&lt;particle-filter&gt;" AnswerCount="1" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="10410" PostTypeId="2" ParentId="10408" CreationDate="2016-08-04T18:57:22.070" Score="3" Body="&lt;p&gt;&lt;strong&gt;Particle filter&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to the OP a robot with at least a distance sensor is available and a map too. That's a nice starting point for developing a hypothesis tracker aka particle filter. At first a game engine is needed which simulate the map and the position of particles. The game-engine calculates the expected sensor-information from the distance-sensor. E.g. the particle is on left top in the map and direction is &quot;north&quot; and the game-engine says &quot;distance=10 cm&quot;. This is done for every random particle in the map.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now comes the nice part: a particle will be deleted which has the greatest difference to the real measurement. That means, if the robot has a real distance of 5 cm on the sensor, than a particle with a distance of 200 cm can not be the right one. After deleting the particle the robot will be moved ahead, and the particles also. Again, the worst particle has to be deleted.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From a theoretical point of view, this is called a hypothesis elimination. It means, that the algorithm deletes the particle with the lowest probability to be the right answer. After a while a particle cloud with the real position of the robot is remaining.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Landmarks&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fixed landmarks in the map (like a door which is marked with a red line on the ground) can be easily integrated in the particle filter because in the map are particles who fulfill the conditions and others who don't. E.g. if the real robot detect a door, all particle in the game-engine who not detect the door are wrong. A more complicated task are variable landmarks which can be anywhere in the map. These obstacle change the map itself and create an extended problem called SLAM (=map building). Algorithms like &lt;a href=&quot;http://ais.informatik.uni-freiburg.de/teaching/ws12/mapping/pdf/slam10-fastslam-4.pdf&quot; rel=&quot;nofollow&quot;&gt;FastSlAM&lt;/a&gt;  and &lt;a href=&quot;https://userpages.uni-koblenz.de/~agas/Documents/Pellenz2009R2R.pdf&quot; rel=&quot;nofollow&quot;&gt;Hyperparticle&lt;/a&gt;  (every particle has its own map) build a map and localize together.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastEditorUserId="10596" LastEditDate="2016-10-13T00:32:25.373" LastActivityDate="2016-10-13T00:32:25.373" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="10411" PostTypeId="2" ParentId="10285" CreationDate="2016-08-04T19:05:30.607" Score="1" Body="&lt;p&gt;G. Andrew Stone &lt;a href=&quot;http://effluviaofascatteredmind.blogspot.com/2009/03/arduino-l298-stepper-motor-driver.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;posted the following schematic of L298N and Arduino with Arduino sketch source code to drive a stepper motor using the L298 chip&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/oxXWW.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/oxXWW.jpg&quot; alt=&quot;schematic drawing of L298 and Arduino&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Pin number on L298N&#xA;    pin on Arduino&#xA;        function&#xA;1   -   SenseA; connect through 0.5 Ohm sense resistor to power GND&#xA;2   -   one end of coilA on stepper motor&#xA;3   -   other end of coilA on stepper motor&#xA;4   -   VS: connect to &quot;42V&quot; motor power, and to the middle wire of both coils.&#xA;5   5   IN1&#xA;6   &quot;5V&quot;    ENA&#xA;7   4       IN2&#xA;8   GND     GND (hook to both power supply GND and Arduino GND)&#xA;9   &quot;5V&quot;    VSS&#xA;10  3       IN2&#xA;11  &quot;5V&quot;    ENB&#xA;12  2       IN4&#xA;13  -   one end of coilB on stepper motor&#xA;14  -   other end of coilB on stepper motor&#xA;15  -   SenseB; connect through 0.5 Ohm sense resistor to power GND&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Also:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;connect a capacitor (typically 0.1 uF or 1 uF) between L298 &quot;VS&quot; (4) and GND (8)&lt;/li&gt;&#xA;&lt;li&gt;connect a capacitor (typically 0.1 uF or 1 uF) between L298 &quot;Vss&quot; (9) and GND (8)&lt;/li&gt;&#xA;&lt;li&gt;connect the motor power supply (42VDC to 5VDC) between L298 &quot;VS&quot; (4) and GND (8)&lt;/li&gt;&#xA;&lt;li&gt;external flyback protection diodes&lt;/li&gt;&#xA;&lt;li&gt;The L298P -- the same chip in a PowerSO20 package -- has completely different pin numbers. For more details, see the &lt;a href=&quot;http://www.mouser.com/ds/2/389/l298-954744.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;datasheet for the L298&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="187" LastActivityDate="2016-08-04T19:05:30.607" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10412" PostTypeId="2" ParentId="10285" CreationDate="2016-08-04T22:49:26.130" Score="-1" Body="&lt;p&gt;This is a good tutorial to get you started. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://alselectro.wordpress.com/2014/04/25/stepper-motor-control-with-l298-arduino/&quot; rel=&quot;nofollow&quot;&gt;https://alselectro.wordpress.com/2014/04/25/stepper-motor-control-with-l298-arduino/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13204" LastActivityDate="2016-08-04T22:49:26.130" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10413" PostTypeId="2" ParentId="9668" CreationDate="2016-08-04T22:55:51.540" Score="1" Body="&lt;p&gt;A digital camera, even on a cell phone will pick up the IR light. A darkened room will help it to show more prominently. No sense in buying any crazy equipment when the phone in your pocket will probably do what you want.&lt;/p&gt;&#xA;" OwnerUserId="13204" LastActivityDate="2016-08-04T22:55:51.540" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10414" PostTypeId="2" ParentId="6784" CreationDate="2016-08-04T23:05:54.717" Score="2" Body="&lt;p&gt;Math is the short answer. You need to figure out what you want the motor to do, i.e. how much it needs to lift, amount of torque etc. You also need to consider how it is going to be powered. If its going to run on a battery you may want to get a motor that will do the minimum work required to save battery life. If it's going to run on standard AC power from a wall outlet, this won't be as much of a concern. Your robot arm design will also change the values of the power/torque needed because of leverage. If it's going to be belt driven, direct drive etc will all figure into this too. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My suggestion for a small robot arm would be to start with a kit where the parts have been matched for compatibility and go from there. If not a kit nema 17 motors are probably enough for what you need, but they come in all different specs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The nice thing about steppers is that they can be stopped and started at specific places in they're rotation pretty easily. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Again, unless you're really good at math and physics, a kit is the way to go as a beginner.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just realized how old this is, whoops.&lt;/p&gt;&#xA;" OwnerUserId="13204" LastEditorUserId="13204" LastEditDate="2016-08-19T19:17:22.810" LastActivityDate="2016-08-19T19:17:22.810" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10415" PostTypeId="1" CreationDate="2016-08-05T02:10:28.713" Score="3" ViewCount="226" Body="&lt;p&gt;I have a 6 DOF robot arm, and I want to do some object grasping experiments. Here, the robot is rigidly mounted to a table, and the object is placed on a different adjacent table. The robot must pick up the object with its gripper parallel to the normal of the object's table, such that it is pointing directly downwards at the point of grasping.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, the two tables have adjustable heights. For any given height difference between them. there will be a fixed range of positions over which the robot arm can achieve this perpendicular pose. What I am trying to figure out, is what the optimum relative distance of the tables is such that this range of positions is maximum.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a way to compute this analytically given the robot arm kinematics? Or is there a solution which applies to all robot arms (e.g. it is optimum when the tables are at the same height)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it is important, the arm is the Kinova MICO: &lt;a href=&quot;https://www.youtube.com/watch?v=gUrjtUmivKo&quot; rel=&quot;nofollow&quot;&gt;https://www.youtube.com/watch?v=gUrjtUmivKo&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="8880" LastActivityDate="2016-08-08T20:37:43.400" Title="Determining the graspable range of a robot arm" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10416" PostTypeId="1" CreationDate="2016-08-05T15:28:43.733" Score="1" ViewCount="665" Body="&lt;p&gt;I'm currently doing some research on collaborative robotics. One area of interest is the type of sensor(s) used in these kind of machines. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I had a look at some robots by FANUC and Universal Robots and I've noticed that they do not come equipped with sensors; they are sold as an add-on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this inherent with collaborative robots? Do customers need to buy sensors as an add-on - which has advantages and disadvantages. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks for your help.&lt;/p&gt;&#xA;" OwnerUserId="14405" LastActivityDate="2019-10-11T21:49:07.547" Title="Sensors in Collaborative Robots" Tags="&lt;sensors&gt;&lt;industrial-robot&gt;" AnswerCount="5" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="10417" PostTypeId="2" ParentId="10416" CreationDate="2016-08-05T18:04:29.413" Score="2" Body="&lt;p&gt;This question seems to be about robots collaborating with people -- not with each other.  In general, it might be unsafe for a person to stand near a machine that's capable of exerting harmful levels of force in any given direction.  One way to avoid that, as is mentioned in the question, is by using sensors to detect any human-like objects in its path.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, robots can still be safe even without internal sensors.  The &lt;a href=&quot;http://support.barrett.com/wiki/WAM/SafetyFeaturesPrecautions&quot; rel=&quot;nofollow&quot;&gt;WAM arm has configurable torque limits&lt;/a&gt; -- read from its own motors --, which can be set low enough such that the arm will disable itself if it runs into something.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could also do &lt;a href=&quot;https://pr2s.clearpathrobotics.com/wiki/Safety/Design&quot; rel=&quot;nofollow&quot;&gt;what the PR2 robot does: exert very little force in each of its joints&lt;/a&gt;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind that just because the robot senses something, it needs a fair amount of intelligence and mechanical capability to act in a way that will protect a person.  In other words, the simple safety designs are just as important as the sophisticated ones.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2016-08-05T18:04:29.413" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10418" PostTypeId="2" ParentId="10233" CreationDate="2016-08-05T18:13:29.537" Score="1" Body="&lt;p&gt;The easiest way to simulate a messy &quot;real world&quot; sensor from an ideal simulation is to look at what effects a sensor has to overcome.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;vibrations at multiple frequencies&lt;/li&gt;&#xA;&lt;li&gt;impulse noise&lt;/li&gt;&#xA;&lt;li&gt;dampened vibrations of the sensor itself (due to momentum of the vehicle)&lt;/li&gt;&#xA;&lt;li&gt;the sensor being improperly aligned to the vehicle&lt;/li&gt;&#xA;&lt;li&gt;gravity&lt;/li&gt;&#xA;&lt;li&gt;other effects from motion of the vehicle's internal movements (e.g. suspension bouncing)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="350" LastActivityDate="2016-08-05T18:13:29.537" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10419" PostTypeId="2" ParentId="6784" CreationDate="2016-08-05T18:21:24.437" Score="1" Body="&lt;p&gt;The key phrase in your question is &quot;most suitable&quot;.  Only you can define what this means.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Generally you need to understand the requirements of your project -- in hard numbers -- before you can make design decisions like which motors to use.  How much weight will need to be moved by the robot?  How fast will it need to move?  How precisely?  And so on.&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2016-08-05T18:21:24.437" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10420" PostTypeId="2" ParentId="10416" CreationDate="2016-08-05T22:44:33.350" Score="0" Body="&lt;p&gt;Very little is inherent to collaborative robots, and this is especially true for sensors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The term 'collaborative robot' is still new in the industrial world and there is a bit of hype and variation in meaning in what exactly they are talking about.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general a collaborative robot will be one that expected to do its work with a human in its workspace. There is &lt;a href=&quot;http://www.iso.org/iso/catalogue_detail?csnumber=62996&quot; rel=&quot;nofollow&quot;&gt;ISO standardization&lt;/a&gt; around this and the &lt;a href=&quot;http://www.infoplc.net/files/documentacion/robotica/infoPLC_net_Industrial_HRC_ERF2014_.pdf&quot; rel=&quot;nofollow&quot;&gt;focus is on safety&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the domain of collaboration, there are two main things we want to do in my view. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) We want to know where the human is relative to the robot so we can operate the robot in a more performance oriented manner when the human is far enough away. This could be as simple as always moving safely and stopping (moving even more safely) when in contact with a human. It could be as complex as tracking human kinematics and moving more 'dangerously' based on the distance between the robot and person and the dynamics between them. Think of the knife-between-fingers scene in Aliens.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) We want to receive commands from the human so that the robot can collaborate. This might be lead-through teach and play programming, or one might simply sit down at a robot workbench and block off the area you want to use with your arms, like a little kid at the art table establishing their space. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can see this is a big domain with a lot of possibilities. So when it comes to specific products, you will have to sit down with each vendor to find out what exactly is 'collaborative' about their robot and what package of options is needed to achieve that collaboration. There is no standard of what collaboration means, nor what sensing is used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One thing to note is that collaboration is completely separate from the actual task of the robot. End tooling, tool changers, fixtures, etc all need to be considered in addition.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2016-08-05T22:44:33.350" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10421" PostTypeId="2" ParentId="7855" CreationDate="2016-08-06T02:25:11.083" Score="1" Body="&lt;p&gt;I see that the STM32F103x8 has 64 KB of Flash + 20 KB of SRAM = 84 KB of memory -- is it a coincidence that your build file is close to that size?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many microcontroller development systems store the final compiled executable in a &quot;binary&quot; file in &lt;a href=&quot;https://en.wikipedia.org/wiki/SREC_(file_format)&quot; rel=&quot;nofollow&quot;&gt;Motorola S-record&lt;/a&gt; format or &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_HEX&quot; rel=&quot;nofollow&quot;&gt;Intel HEX&lt;/a&gt; format or some other format that uses 2 byte of disk space to store 2 hexadecimal digits in the file for each byte of programmable memory in the chip, plus a little more metadata overhead. An executable file that almost completely filled 64 KB of Flash would, when stored in any of those hexadecimal formats, use close to 128 KB disk space.&#xA;Does your build system perhaps use such a hexadecimal format?&lt;/p&gt;&#xA;" OwnerUserId="187" LastActivityDate="2016-08-06T02:25:11.083" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10422" PostTypeId="2" ParentId="10334" CreationDate="2016-08-06T11:31:01.237" Score="1" Body="&lt;p&gt;I would suggest you better used some ultrasonic sensors. iRobot is compatible with both arduino and raspberry pi. There are lots of good and cheap sensors, for both platforms, along with some good examples on the net. You have to find a way to save the data though. That means two things: 1. you need extra space to save those (if in arduino) and 2. find a formula to create them. What you suggested with the travel per millimeters should definitely be into consideration. Sensors are to declare what and where is an obstacle. Another problem is making your robot &quot;unerstand&quot; in which point of the mapped area is it moving at a given time, so that it won't have to check again what an obstacle looks like. Last but not least, it has to know when to stop mapping a room. Start by letting it calculate the dimensions of the area it will be moving into (going round the walls).&lt;/p&gt;&#xA;" OwnerUserId="11472" LastActivityDate="2016-08-06T11:31:01.237" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10424" PostTypeId="2" ParentId="6944" CreationDate="2016-08-07T16:10:43.270" Score="-1" Body="&lt;p&gt;You can use ultrasonic sensor or IR sensor. Ultra sonic sensor is bit complicated but its very useful for your project and it could also help you in your future projects. there are various websites that will help and some of them are listed below. &#xA;&lt;a href=&quot;http://www.instructables.com/id/Ultrasonic-Range-detector-using-Arduino-and-the-SR/&quot; rel=&quot;nofollow&quot;&gt;http://www.instructables.com/id/Ultrasonic-Range-detector-using-Arduino-and-the-SR/&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=PG2VhpkPqoA&quot; rel=&quot;nofollow&quot;&gt;https://www.youtube.com/watch?v=PG2VhpkPqoA&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;GOOD LUCK.&lt;/p&gt;&#xA;" OwnerUserId="14408" LastActivityDate="2016-08-07T16:10:43.270" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10425" PostTypeId="1" CreationDate="2016-08-07T16:52:14.467" Score="1" ViewCount="89" Body="&lt;p&gt;I am trying to make a IR distance sensor. I have seen &lt;a href=&quot;http://www.instructables.com/id/Simple-IR-proximity-sensor-with-Arduino/&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt; online. My goal however is to see the distance between a IR transmitter and my IR sensor. In the example above he uses the IR led's ambient light and timing to track the distance. Is there a way to find the distance between lets say a IR remote and a sensor? It would only have to be accurate to about 1 meter. I am also open to other ideas of accurately tracking distance between two objects weither that be bluetooth/ir/ultrasonic &lt;/p&gt;&#xA;" OwnerUserId="14412" LastActivityDate="2016-08-11T12:54:40.577" Title="IR distance sensor" Tags="&lt;sensors&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10426" PostTypeId="1" AcceptedAnswerId="10428" CreationDate="2016-08-07T18:07:44.727" Score="5" ViewCount="352" Body="&lt;p&gt;I'm programming a flight controller on an Arduino. I've researched how other people have written theirs but without notes it's often so obfuscated that I've decided it will be easier and better to write my own.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is my pseudocode thus far, will this work?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;all of this will happen inside the constant Arduino loop&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Read RX signal&lt;/li&gt;&#xA;&lt;li&gt;Calculate desired pitch, roll, and yaw angles from RX input&lt;/li&gt;&#xA;&lt;li&gt;Signal ESCs using PWM in order to match desired pitch, roll, and yaw from RX input&lt;/li&gt;&#xA;&lt;li&gt;Gather IMU values (using Kalman filter to reduce noise)&lt;/li&gt;&#xA;&lt;li&gt;Compare filtered IMU values vs. RX input to find errors in desired outcome vs. actual outcome&lt;/li&gt;&#xA;&lt;li&gt;Use PID algo to settle errors between IMU vs. RX&lt;/li&gt;&#xA;&lt;li&gt;Rinse and repeat&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Suggestions are greatly appreciated&lt;/p&gt;&#xA;" OwnerUserId="9941" LastActivityDate="2016-08-07T23:57:31.843" Title="Will this pseudocode work as a basis for a flight controller?" Tags="&lt;arduino&gt;&lt;microcontroller&gt;&lt;uav&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10427" PostTypeId="1" AcceptedAnswerId="10432" CreationDate="2016-08-07T22:03:23.527" Score="1" ViewCount="572" Body="&lt;p&gt;My team has been working on a wearable glove to capture data about hand movements, and use it as a human-computer interface for a variety of applications. One of the major applications is the translation of sign language, shown here: &lt;a href=&quot;https://www.youtube.com/watch?v=7kXrZtdo39k&quot; rel=&quot;nofollow&quot;&gt;https://www.youtube.com/watch?v=7kXrZtdo39k&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Right now we can only translate letters and numbers, because the signs for them require the person to hold their hand still in one position ('stationary' signs). I want to be able to translate &lt;em&gt;words&lt;/em&gt; as well, which are non-stationary signs. Also the position of the hands really matters when signing words, for example it matters whether the hand is in front of the forehead, eyes, mouth, chest, cheeks, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For this we need a portable and highly accurate position sensor. We have tried getting position from a 9-DOF IMU (accelerometer, gyroscope, magnetometer) but as you might guess, there were many problems with double integration of the noise and accelerometer bias.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So is there a device that can provide &lt;strong&gt;accurate position&lt;/strong&gt; information? It should be &lt;strong&gt;portable and wearable&lt;/strong&gt; (for example worn in the chest pocket, headband/cap, etc...be creative!).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT (more details):&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm going to emphasize certain aspects of this design that weren't clear before, based on people's comments:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;My &lt;em&gt;current&lt;/em&gt; problem of position detection is due to errors in double integration of the accelerometer data. So hopefully the solution &lt;s&gt;has some incredibly powerful kalman filter (I think this is unlikely) or &lt;/s&gt; uses some other portable device instead of an accelerometer.&lt;/li&gt;&#xA;&lt;li&gt;I do not need absolute position of the hand in space/on earth. I only need the &lt;em&gt;hand position relative to some stable point on the body&lt;/em&gt;, such as the chest or belly. So maybe there can be a device on the hand that can measure position relative to a wearable device on the body. I don't know if such technology exists; I guess it'd use either magnets, ultrasound, bend sensors, or EM waves of some sort. Be creative :)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="14413" LastEditorUserId="14413" LastEditDate="2016-08-11T11:39:50.223" LastActivityDate="2016-08-13T12:56:52.673" Title="Is there a portable and accurate sensor to measure the position of the hand relative to the body?" Tags="&lt;sensors&gt;&lt;sensor-error&gt;&lt;precise-positioning&gt;" AnswerCount="2" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="10428" PostTypeId="2" ParentId="10426" CreationDate="2016-08-07T23:57:31.843" Score="5" Body="&lt;p&gt;The signals to the ESC's using PWM should be sent after the PID algo is done processing the errors. The output calculated from the PID is the PWM value to be sent to the ESC's to actuate the motors in such a way that they move to reduce the error thus obtaining the desired orientation &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the right order is:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Read RX signal&lt;/li&gt;&#xA;&lt;li&gt;Calculate desired pitch, roll, and yaw angles from RX input&lt;/li&gt;&#xA;&lt;li&gt;Gather IMU values (using Kalman filter to reduce noise)&lt;/li&gt;&#xA;&lt;li&gt;Compare filtered IMU values vs. RX input to find errors in desired outcome vs. actual outcome (Get error (Target - Measured) for PID algorithm input)&lt;/li&gt;&#xA;&lt;li&gt;Use PID algo to settle errors between IMU vs. RX&lt;/li&gt;&#xA;&lt;li&gt;Use output of PID controller (assuming gains are already tuned properly) as PWM signal to the ESC's&lt;/li&gt;&#xA;&lt;li&gt;Rinse and repeat&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;These resources might be of help in the future:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/9554/quadcopter-pid-algorithm&quot;&gt;Quadcopter PID Algorithm&lt;/a&gt; &lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/8354/need-help-for-a-quadcopter-pid/8903#8903&quot;&gt;Different PID Architectures&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.quora.com/What-is-rate-and-stabilize-PID-in-quadcopter-control&quot; rel=&quot;nofollow noreferrer&quot;&gt;Cascaded PID Controller Explained&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/2800/pid-output-does-not-reach-setpoint-precisely-enough&quot;&gt;PID output does not reach setpoint precisely enough&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/8895/quadcopter-pid-control-is-it-possible-to-stabilize-a-quadcopter-considering-onl&quot;&gt;Is it possible to stabilize a quadcopter considering only angle measurements?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="11311" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2016-08-07T23:57:31.843" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10429" PostTypeId="1" CreationDate="2016-08-08T09:12:14.480" Score="6" ViewCount="4316" Body="&lt;p&gt;I'm reading this paper: &lt;a href=&quot;http://arxiv.org/abs/1310.2053&quot; rel=&quot;noreferrer&quot;&gt;http://arxiv.org/abs/1310.2053&lt;/a&gt; (&lt;strong&gt;The role of RGB-D benchmark datasets: an overview&lt;/strong&gt;) and see the following words:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Thanks to accurate depth data, currently published papers could&#xA;  present a broad range of RGB-D setups addressing well-known problems&#xA;  in computer vision in which the Microsoft Kinect ranging from SLAM&#xA;  [10, 12, 19, 17, 35, 11] over 3d reconstruction [2, 33, 38, 32, 1]&#xA;  over realtime face [18] and hand [30] tracking to motion capturing and&#xA;  gait analysis [34, 41, 8, 7, 4]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I thought of the term &lt;strong&gt;SLAM&lt;/strong&gt; and &lt;strong&gt;3D Reconstruction&lt;/strong&gt; being the same thing, while the paper says the opposite with a bunch of citations (which still haven't tell the two apart).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my opinion, &lt;strong&gt;M&lt;/strong&gt;apping in &lt;strong&gt;SLAM&lt;/strong&gt; is the same term as &lt;strong&gt;3D Reconstruction&lt;/strong&gt;, while &lt;strong&gt;L&lt;/strong&gt;ocalization is the essential part for &lt;strong&gt;M&lt;/strong&gt;apping. So I don't find a difference between &lt;strong&gt;SLAM&lt;/strong&gt; and &lt;strong&gt;3D Reconstruction&lt;/strong&gt;, am I wrong (or is the author misclassfying)?&lt;/p&gt;&#xA;" OwnerUserId="13723" LastActivityDate="2016-08-10T09:42:51.160" Title="Difference between SLAM and &quot;3D reconstruction&quot;?" Tags="&lt;slam&gt;&lt;3d-reconstruction&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10430" PostTypeId="2" ParentId="10429" CreationDate="2016-08-08T10:00:33.670" Score="4" Body="&lt;p&gt;You are right about the sameness of SLAM and 3D reconstruction. At the same time I don't think the author is misclassifying.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The english is a little non-standard. The author could have better said it as:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;...ranging from SLAM to 3D reconstruction to realtime face and hand tracking to ...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I think the paper lists both separately to better organize their references more than to highlight the differences.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The differences depend on what your viewpoint is. If you consider navigating an archeological site with a vehicle versus recording data about the site for historical preservation, they are different. Differences in sensors and real-time vs offline processing, and what algorithms work best in each situation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Perhaps the main difference to consider is that in 3D reconstruction, the path of the sensors is not part of the goal and is discarded (or not estimated) at will. Meanwhile, in SLAM, the actual geometry and content of the environment is not as important as it's topology and your ability to localize within it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The algorithms you mention, Kinfu, ElasticFusion, etc, call themselves SLAM, dense maps of the environment, and perhaps represent an evolution in the technology where the processing power and sensing available means that one need not optimize towards one goal (reconstruction) or the other (navigation). So you can look at it as the two categories, SLAM and 3D reconstruction, converging. &lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="184" LastEditDate="2016-08-09T01:15:43.843" LastActivityDate="2016-08-09T01:15:43.843" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="10431" PostTypeId="2" ParentId="10429" CreationDate="2016-08-08T12:54:11.370" Score="2" Body="&lt;p&gt;The difference is largely intent. SLAM is largely used to describe the mapping procedure used when navigating an unknown environment. This is done online so the most recent state estimates are available to the navigator. 3D reconstruction is often a post processing procedure to create a 3D map of some environment. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or put another way: slam is an iterative process that creates an updated map with each new estimates while 3D reconstruction is a batch process that is run after all measurements have been collected.&lt;/p&gt;&#xA;" OwnerUserId="8842" LastActivityDate="2016-08-08T12:54:11.370" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="10432" PostTypeId="2" ParentId="10427" CreationDate="2016-08-08T13:17:05.400" Score="1" Body="&lt;p&gt;The problems of outdoor-tracking are described in &lt;a href=&quot;http://www.tinmith.net/papers/piekarski-ismar-2006.pdf&quot; rel=&quot;nofollow&quot;&gt;http://www.tinmith.net/papers/piekarski-ismar-2006.pdf&lt;/a&gt; page 2. As a solution was named the WearTrack System which worked by ultrasonic technology. The system tracks the hand relative to the head of the user. Other hardware solutions are presented here &lt;a href=&quot;https://www.evl.uic.edu/jelias1/vr-shapetape.pdf&quot; rel=&quot;nofollow&quot;&gt;https://www.evl.uic.edu/jelias1/vr-shapetape.pdf&lt;/a&gt; (ShapeTape Tracker) and here &lt;a href=&quot;https://www.xsens.com/images/stories/PDF/Combining%20Motion%20Sensors%20and%20Ultrasonic%20Hands%20Tracking.pdf&quot; rel=&quot;nofollow&quot;&gt;https://www.xsens.com/images/stories/PDF/Combining%20Motion%20Sensors%20and%20Ultrasonic%20Hands%20Tracking.pdf&lt;/a&gt; (ultrasonic tracker with gesture recognition).&lt;/p&gt;&#xA;" OwnerUserId="14283" LastEditorUserId="14413" LastEditDate="2016-08-13T12:56:52.673" LastActivityDate="2016-08-13T12:56:52.673" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10433" PostTypeId="2" ParentId="10367" CreationDate="2016-08-08T14:25:42.327" Score="1" Body="&lt;p&gt;I'm 14, please pardon me for any rookie sentences...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as my knowledge goes with Lithium Polymer batteries(not very far), they don't explode with a Hollywood style explosion, where flames go everywhere and everyone dies. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead, LiPo's start to smoke and the plastic cover on the outside layer of the LiPo will start to expand, when it cracks it releases hot steamy gas...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Judging by the damage, it looks like you dropped it... I don't this it's life threatening to use it... but I suggest you dispose it off, if you care about the electronics that are being powered by it...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because the LiPo is 3 cell (11.1V) you can salvage working (undamaged) cells out. you will be able to use the undamaged cells for something else... you could also salvage the protective circuit (if the LiPo has it).&lt;/p&gt;&#xA;" OwnerUserId="11688" LastActivityDate="2016-08-08T14:25:42.327" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10434" PostTypeId="2" ParentId="9652" CreationDate="2016-08-08T14:36:48.157" Score="2" Body="&lt;p&gt;Raspberry Pis can be used for a huge range of things! And I like your idea!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although, you could use an Arduino Pro Micro board as that has everything you need and doesn't have unnecessary items like Ethernet cables etc... It comes a lot cheaper - £2 here in the UK from Amazon! &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bence Kaulics explains it very clearly and I suggest you use that idea.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My suggestion is that you can use a relay board that the Raspberry Pi controls and the relay board will power the servos. Use a relay board because you need a stable current and voltage to power the servos, especially to move a window, you will need powerful servos. The relay can suit the needs and protect the servos.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can also connect more items to the relay if you want to improve the smart home model by adding motion sensors outside the window and alarms.&lt;/p&gt;&#xA;" OwnerUserId="11688" LastEditorUserId="9860" LastEditDate="2016-08-08T14:55:04.063" LastActivityDate="2016-08-08T14:55:04.063" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10435" PostTypeId="2" ParentId="10415" CreationDate="2016-08-08T20:37:43.400" Score="1" Body="&lt;p&gt;I think this is fundamentally a question of maximizing manipulability of a closed kinematic chain (the chain is closed by the object being grasped). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The good news is that others have asked and tried to answer this question. The bad news is that it's far from trivial and there's no easy analytic solution. This paper came to mind when I read the question:&#xA;&lt;a href=&quot;https://dx.doi.org/10.1115/1.2829312&quot; rel=&quot;nofollow&quot;&gt;https://dx.doi.org/10.1115/1.2829312&lt;/a&gt;. (You can find a pdf if you search online.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since you're not choosing any other kinematic parameters other than table height, it'd probably be easiest to just find a good spot with some trial and error.&lt;/p&gt;&#xA;" OwnerUserId="13844" LastActivityDate="2016-08-08T20:37:43.400" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10436" PostTypeId="1" AcceptedAnswerId="10437" CreationDate="2016-08-09T01:31:57.453" Score="1" ViewCount="699" Body="&lt;p&gt;I went to go install ROS for my Rassberry Pi and found that there are 5 different variants. What is the difference between them and where can I go to learn about these differences for future updates?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Link to the ROSberryPi downloads I'm talking about:&#xA;&lt;a href=&quot;http://wiki.ros.org/ROSberryPi/Setting%20up%20ROS%20on%20RaspberryPi&quot; rel=&quot;nofollow&quot;&gt;http://wiki.ros.org/ROSberryPi/Setting%20up%20ROS%20on%20RaspberryPi&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="14284" LastActivityDate="2019-07-04T09:55:21.687" Title="What is the difference between ROSberry Pi builds?" Tags="&lt;ros&gt;&lt;raspberry-pi&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10437" PostTypeId="2" ParentId="10436" CreationDate="2016-08-09T01:55:41.510" Score="5" Body="&lt;p&gt;Well this is embarrassing. I didn't realize they are in fact different distributions not variants. Also found the page where you can find out more about them: &lt;a href=&quot;http://wiki.ros.org/Distributions&quot;&gt;http://wiki.ros.org/Distributions&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="14284" LastActivityDate="2016-08-09T01:55:41.510" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10438" PostTypeId="1" CreationDate="2016-08-09T20:44:58.697" Score="2" ViewCount="100" Body="&lt;p&gt;Am I correct in assuming that the I-Robot Create 2 does not have the 25-pin connector like the original version of I-Robot Create has? Thanks much...Rick&lt;/p&gt;&#xA;" OwnerUserId="14432" LastActivityDate="2016-08-10T03:20:58.093" Title="I-Robot Create 2 Connectors" Tags="&lt;irobot-create&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10439" PostTypeId="2" ParentId="10438" CreationDate="2016-08-10T03:20:58.093" Score="1" Body="&lt;p&gt;That is correct. The Create 2 uses the same iRobot-proprietary 7-pin serial connector as the 500-800 series Roombas (and possibly the 900 series as well - I haven't checked yet).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While there are third-party options for Create 2 cables, I always advocate first-party parts &amp;amp; accessories. iRobot's cable for the Create 2 is $30. I have one, and it is very well built and has the length for your robot to scurry around while you're interfaced with it. You also don't need to worry about messing with USB-to-serial drivers as you do with third-party cables, iRobot's is pretty plug-and-play - even with ROS on Ubuntu.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On a somewhat related tangent:&#xA;Current scuttlebutt is that the Create 3 is not too far off from launch, and that it is likely to be based off of the 900 series Roombas (so a much more comprehensive sensor suite, much better battery, and built-in WiFi). But again, this is just rumor at the moment.&lt;/p&gt;&#xA;" OwnerUserId="11762" LastActivityDate="2016-08-10T03:20:58.093" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="10440" PostTypeId="2" ParentId="10427" CreationDate="2016-08-10T03:41:34.967" Score="0" Body="&lt;p&gt;Manuel Rodriguez's idea for the strip-flex potentiometers is about as good are you are going to get. Accurate 3D mapping is not something easily accomplished, let alone accomplished in a portable package. The only other solution I can think of is something like the Leap Motion - but that is far from portable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Watching their video, they seem to be using the same thing for not just the fingers, but the wrist and elbow joints as well. I can't tell, but it looks like they might also be running OpenCV (or similar) alongside this as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The trouble is that it sounds like you aren't even sure &lt;em&gt;exactly&lt;/em&gt; what the intended application of this technology is. Not trying to be patronizing but &#xA;&lt;strong&gt;&lt;em&gt;what&lt;/em&gt;&lt;/strong&gt; is the goal here? Why do you need an ASL-computer interface, and why does it &lt;strong&gt;&lt;em&gt;need&lt;/em&gt;&lt;/strong&gt; to be portable? Someone who needs to ASL for interpersonal communication should have no trouble interfacing with the average computer or smart phone - so I am assuming this is to allow them to communicate with people who do not know ASL (via gesture-to-computer-generated-speech)? If this is the case, then perhaps the solution you have picked is an overly complicated one to your problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would suggest you revisit the drawing board all-together, and come up with a different approach. Perhaps a computer-vision application that can interpret signs, and run on a smart phone? Probably quicker, easier, and more accurate than trying to tackle a hardware problem that I have yet to see outside of a PhD thesis project in one of the world's top robotics research labs (and the one video on Youtube you linked to). Plus, such a solution could probably be later integrated into one of the existing 'universal translators' that Microsoft and Google are working on.&lt;/p&gt;&#xA;" OwnerUserId="11762" LastActivityDate="2016-08-10T03:41:34.967" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10441" PostTypeId="2" ParentId="10425" CreationDate="2016-08-10T03:53:26.060" Score="0" Body="&lt;p&gt;You would be better off setting up something that uses a stereoscopic technique. Think of something like &lt;a href=&quot;http://www.tobii.com/xperience/products/&quot; rel=&quot;nofollow&quot; title=&quot;the Tobii EyeX&quot;&gt;this&lt;/a&gt;. Another similar product is the Leap Motion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your case, you could probably get away with just two IR sensors, and one emitter, because of your setup. However, &quot;accurate to 1 meter&quot; is not realistic for most kinds of IR rigs. They usually only function &lt;em&gt;within&lt;/em&gt; 0.5 meters, but can be pretty accurate when tracking something inside of their range.&lt;/p&gt;&#xA;" OwnerUserId="11762" LastActivityDate="2016-08-10T03:53:26.060" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10442" PostTypeId="2" ParentId="10429" CreationDate="2016-08-10T07:13:52.047" Score="2" Body="&lt;p&gt;SLAM is jointly estimating the sensor pose and a map, based on a sensor model and sometimes a model for the pose change. The map can be represented in many different ways (e.g. landmark positions, occupancy grids, pointclouds).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3D reconstruction is used to estimate a 3D representation of the environment based on sensor data. There are many different ways to do this. SLAM &lt;em&gt;can&lt;/em&gt; be part of the processing chain, but does not have to be. &lt;/p&gt;&#xA;" OwnerUserId="127" LastEditorUserId="127" LastEditDate="2016-08-10T09:42:51.160" LastActivityDate="2016-08-10T09:42:51.160" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10443" PostTypeId="1" CreationDate="2016-08-10T08:11:02.277" Score="2" ViewCount="123" Body="&lt;p&gt;I'm trying to detect obstacles for a distance of up to 10 meters in an outdoor environment. Up to meaning that I also want to be able to detect obstacles that are close to the robot. I am thinking of doing this using stereo vision, but I am unsure if this is in fact even possible (before I buy expensive hardware). So is it possible? Has anyone had any success?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If this isn't possible, then what kind of sensors could give me a decent point cloud for such a range (outdoors)? I need a sensor that will fit a medium size robot. Also it needs to be not overly expensive since I have a limited budget.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="14435" LastActivityDate="2016-08-10T08:11:02.277" Title="Stereo vision for outdoor obstacle detection" Tags="&lt;sensors&gt;&lt;stereo-vision&gt;" AnswerCount="0" CommentCount="6" ClosedDate="2016-08-10T13:00:11.810" ContentLicense="CC BY-SA 3.0" />
  <row Id="10445" PostTypeId="1" CreationDate="2016-08-11T07:23:50.557" Score="1" ViewCount="609" Body="&lt;p&gt;I reference the following article.&#xA;&lt;a href=&quot;http://www.egr.msu.edu/classes/ece480/capstone/spring15/group02/assets/docs/nsappnote.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.egr.msu.edu/classes/ece480/capstone/spring15/group02/assets/docs/nsappnote.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have followed article's code, &#xA;but it appears:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/L1CxO.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/L1CxO.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can i solve this problem?&lt;/p&gt;&#xA;" OwnerUserId="14445" LastActivityDate="2016-08-11T07:38:56.003" Title="NameError: name 'TK' is not defined" Tags="&lt;irobot-create&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10446" PostTypeId="2" ParentId="10445" CreationDate="2016-08-11T07:38:56.003" Score="3" Body="&lt;p&gt;Did you spell it right? Python is case sensitive and if you are using Tkinter it's spelled &lt;code&gt;Tk()&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2016-08-11T07:38:56.003" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10447" PostTypeId="1" CreationDate="2016-08-11T10:39:49.307" Score="0" ViewCount="511" Body="&lt;p&gt;I am trying to install ros kinetic kame in ubuntu 16.04 , but after trying the first step setup your sources. list. &#xA;I am getting  cannot create /etc/apt/sources.list.d/ros-latest.list: Permission denied what to do now&lt;/p&gt;&#xA;" OwnerUserId="14447" LastEditorUserId="110" LastEditDate="2016-08-12T02:26:45.257" LastActivityDate="2016-08-12T02:26:45.257" Title="unable to install ros kinetic in ubuntu 16.04" Tags="&lt;ros&gt;&lt;irobot-create&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2016-08-26T10:42:25.097" ContentLicense="CC BY-SA 3.0" />
  <row Id="10448" PostTypeId="2" ParentId="10425" CreationDate="2016-08-11T12:54:40.577" Score="1" Body="&lt;p&gt;I also agree that the stereoscopic technique will probably give you a better result. To implement this you have 2 options, either 1 led and 2 cameras or (I think the better option) 2 leds and 1 camera (which is the technique they used with the wiimote). You can see the second approach &lt;a href=&quot;https://www.youtube.com/watch?v=Jd3-eiid-Uw&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="14435" LastActivityDate="2016-08-11T12:54:40.577" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10449" PostTypeId="2" ParentId="10447" CreationDate="2016-08-11T13:03:25.810" Score="3" Body="&lt;p&gt;I understand that the problem was when running this command in the terminal:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;blockquote&gt;&#xA;    &lt;p&gt;sudo sh -c 'echo &quot;deb &lt;a href=&quot;http://packages.ros.org/ros/ubuntu&quot; rel=&quot;nofollow&quot;&gt;http://packages.ros.org/ros/ubuntu&lt;/a&gt; $(lsb_release -sc) main&quot; &gt; /etc/apt/sources.list.d/ros-latest.list'&lt;/p&gt;&#xA;  &lt;/blockquote&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Could it be you forgot to run it with sudo?&lt;/p&gt;&#xA;" OwnerUserId="14435" LastActivityDate="2016-08-11T13:03:25.810" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10450" PostTypeId="1" AcceptedAnswerId="10457" CreationDate="2016-08-11T19:14:17.133" Score="1" ViewCount="1418" Body="&lt;p&gt;I would like to use GPS data as measurement input for an extended kalman filter. Therefore I need to convert from GPS longitude and lattitude to x and y coordinate. I found information about the  &lt;a href=&quot;https://stackoverflow.com/questions/16266809/convert-from-latitude-longitude-to-x-y&quot;&gt;equirectangular projection&lt;/a&gt; given these formulas: &#xA;$$\ X = r_{earth} \cdot \lambda \cdot cos(\phi_0) $$&#xA;$$\ Y = r_{earth} \cdot \phi $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However I think these formulas are only for use when the axis x- and y-axis of my local frame are parallel to north and south axis of the earth.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/dAVlh.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dAVlh.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;But my vehicle is starting in my local reference frame in the origin and heading straight in y-direction. In whatever compas angle I put my vehicle, this should always be the starting position. &#xA;I can measure the angle $ \alpha $ to north with a compass on my vehicle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now what is the relationship between (longitude,lattitude) an (x,y) of my local frame?&lt;/p&gt;&#xA;" OwnerUserId="13901" LastEditorUserId="-1" LastEditDate="2017-05-23T12:37:11.430" LastActivityDate="2016-08-16T14:38:07.180" Title="Conversion GPS (longitude,latitude) to (x,y) of local reference frame?" Tags="&lt;kalman-filter&gt;&lt;gps&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10451" PostTypeId="2" ParentId="10450" CreationDate="2016-08-11T21:24:49.787" Score="1" Body="&lt;p&gt;Why not have your starting frame be magnetic north and then adjust your starting position by whatever value your compass is reading?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Set your local frame equal to global frame one time, at the start, and you can use global reference sensors (GPS) without transforming for every sample thereafter (beyond the rectangular transform). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your alternative (the way you do it), means you don't have to transform the starting sample, but then every sample afterwards you need to get your GPS position, reference that to your start position, then reference your start heading to get to the local frame. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The way you want to do it means you need to find the differential distance and apply a rotation to every sample. Do it the easy way - leave everything in global coordinates. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-08-11T21:24:49.787" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10452" PostTypeId="2" ParentId="10322" CreationDate="2016-08-12T03:43:02.150" Score="2" Body="&lt;p&gt;There's a good overview of inverse kinematics methods in &lt;em&gt;Springer Handbook of Robotics&lt;/em&gt; by Siciliano and Khatib. The authors explain which of these  methods can be used to find all solutions for a 6-DOF arm. They cover both algebraic and a lot of numerical methods.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also have a look at &lt;a href=&quot;http://openrave.org/docs/latest_stable/openravepy/ikfast/&quot; rel=&quot;nofollow&quot;&gt;ikfast&lt;/a&gt; in &lt;strong&gt;openrave&lt;/strong&gt;. It's a search-based method that finds a closed-form solution for the inverse kinematics given the robot's structure. The source code of ikfast contains a number of numerical inverse kinematics methods.&lt;/p&gt;&#xA;" OwnerUserId="7280" LastActivityDate="2016-08-12T03:43:02.150" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10454" PostTypeId="1" AcceptedAnswerId="10456" CreationDate="2016-08-12T10:55:54.847" Score="0" ViewCount="128" Body="&lt;p&gt;I read a paper from 2015, &lt;a href=&quot;http://h2t.anthropomatik.kit.edu/pdf/Woergoetter2015.pdf&quot; rel=&quot;nofollow&quot;&gt;&quot;Structural bootstrapping - A novel, generative&#xA;mechanism for faster and more efficient acquisition of action-knowledge&#xA;&quot;&lt;/a&gt;, which introduces a concept called, &quot;Structural bootstrapping with semantic event chains and dynamic movement primitives,&quot; which confused me a little bit. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to my knowledge a robotarm is controlled by a PDDL-like planner. The PDDL file is a &quot;qualitative physics engine&quot; which can predict future events. The paper says the &quot;qualitative physics engine&quot; consists of dynamic movement primitive (DMP) which are learned from motion capture data. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is: How can a DMP be used for simulating physics?&lt;/p&gt;&#xA;" OwnerUserId="14283" LastEditorUserId="9720" LastEditDate="2016-08-12T18:36:28.180" LastActivityDate="2016-08-13T13:10:28.210" Title="How can a DMP be used for simulating physics?" Tags="&lt;motion-planning&gt;&lt;algorithm&gt;&lt;machine-learning&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10455" PostTypeId="1" CreationDate="2016-08-12T16:19:54.687" Score="0" ViewCount="60" Body="&lt;p&gt;Is it possible to replace just the wheels on the create2 robot? Is it a standard shaft/coupling?&lt;/p&gt;&#xA;" OwnerUserId="14093" LastActivityDate="2016-08-14T16:39:40.870" Title="Replacing just the Wheels on Create2" Tags="&lt;irobot-create&gt;&lt;roomba&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10456" PostTypeId="2" ParentId="10454" CreationDate="2016-08-12T18:50:45.180" Score="1" Body="&lt;p&gt;I don't know that the DMP method actually &lt;em&gt;simulates physics&lt;/em&gt; as much as it &lt;em&gt;copies what it saw&lt;/em&gt;, which was an actual, physical system. Note that &quot;qualitative&quot; means essentially &quot;looks like&quot;, where &quot;quantitative&quot; means &quot;numerically&quot;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Qualitative physics simulations are those that &lt;em&gt;look like&lt;/em&gt; real physics, but they are not. If I hold a dart in my hand and walk it across the room as though it were in the air, it would &lt;em&gt;look&lt;/em&gt; roughly correct, but of course it would not be &lt;em&gt;numerically accurate&lt;/em&gt;. So again, I think they're copying what they see and treating it as &quot;good enough.&quot;&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-08-12T18:50:45.180" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10457" PostTypeId="2" ParentId="10450" CreationDate="2016-08-12T20:53:50.907" Score="0" Body="&lt;p&gt;Using formula's for rotation of frame:&#xA;$$ x' = x \cdot \cos{\alpha} - y \cdot\sin{\alpha} $$&#xA;$$ y' = x \cdot \sin{\alpha} + y \cdot\cos{\alpha} $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could this be the solution?&#xA;$$ X = (r_{earth} \cdot \lambda \cdot cos(\phi_0)) \cdot \cos{\alpha} - (r_{earth} \cdot \phi) \cdot\sin{\alpha} $$&#xA;$$ Y = (r_{earth} \cdot \lambda \cdot cos(\phi_0)) \cdot \sin{\alpha} + (r_{earth} \cdot \phi) \cdot\cos{\alpha} $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;with $ X,Y $ the coordinate of my vehicle in local coordinate system, $r_{earth}$ radius of the earth, $\lambda$ longitude in degrees, $\phi$ latitude in degrees, $\phi_0$ initial measured latitude and $\alpha$ initial measured compass angle&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could anyone please confirm these formulas would work?&lt;/p&gt;&#xA;" OwnerUserId="13901" LastActivityDate="2016-08-12T20:53:50.907" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10458" PostTypeId="2" ParentId="10454" CreationDate="2016-08-13T13:10:28.210" Score="0" Body="&lt;p&gt;The DMP method copies a trajectory instead of simulating physics. The guys in the paper store the recorded trajectory into a database as a matrix and reproduce it without modification on the robot. The event-chain matrix is on page 5 at &lt;a href=&quot;http://upcommons.upc.edu/bitstream/handle/2117/14016/1244-Learning-the-semantics-of-object-action-relations-by-observation.pdf&quot; rel=&quot;nofollow&quot;&gt;Learning the semantics of object-action relations by observation&lt;/a&gt; But, in the paper &lt;a href=&quot;http://upcommons.upc.edu/bitstream/handle/2117/15177/1258-Execution-of-a-Dual-Object-(Pushing)-Action-with-Semantic-Event-Chains.pdf&quot; rel=&quot;nofollow&quot;&gt;Execution of a Dual-Object (Pushing) Action with Semantic Event Chains&lt;/a&gt; is on page 4 a learning model used which is able to determine future result of an action (chapter &quot;Defining Spatial Anchor Points&quot;). My impression is, that a little bit of planning is in there. The author named it &quot;model-sec&quot; (Model Semantic Event Chain).&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2016-08-13T13:10:28.210" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10459" PostTypeId="2" ParentId="10035" CreationDate="2016-08-13T22:54:00.353" Score="0" Body="&lt;p&gt;I think you should read some of ROS stuff. However, how to generate odometry in this case? I mean in a way that is accurate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you switch to skid steering I think it will be better... however, I don't really understand it well. All I know is that it makes different speed values for the 4 motors... so you have 4 motors instead of 2. I don't know how to make it in ROS too.&lt;/p&gt;&#xA;" OwnerUserId="13814" LastActivityDate="2016-08-13T22:54:00.353" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10460" PostTypeId="2" ParentId="10455" CreationDate="2016-08-14T16:39:40.870" Score="2" Body="&lt;p&gt;The wheel is on a 5mm shaft.  It is simply pressed into the gears and housing.  However, it is very difficult to remove.  (I had to completely disassemble the wheel module to get it out.)  Also, I am not sure the wheel can be removed from the shaft.  Either the wheel is molded on the shaft or there is a metal hub on the wheel that has a very strong press fit on the shaft.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I am not sure why you would want to replace the Roomba wheels.  They are just the right size for the robot.  I don't think the robot will work very well with wheels any larger or smaller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, you may be interested in this &lt;a href=&quot;http://www.irobotweb.com/~/media/MainSite/PDFs/About/STEM/Create/Create_2_Wheel_Hack.pdf?la=en&quot; rel=&quot;nofollow&quot;&gt;Wheel Hack Document&lt;/a&gt; from the Create2 site.  It describes the electrical interface between the robot and the wheel module.  This will allow you to:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Use your own motors, gear-train and wheels with Roomba.&lt;/li&gt;&#xA;&lt;li&gt;Use the Roomba wheel modules with your own controller, without the Roomba chassis.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="110" LastActivityDate="2016-08-14T16:39:40.870" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10461" PostTypeId="1" AcceptedAnswerId="10485" CreationDate="2016-08-14T16:42:58.903" Score="2" ViewCount="143" Body="&lt;p&gt;Is it possible to measure the voltage of 2 different batteries on arduino? Currently I am able to use a resistor divider / voltage divider of 2x 10K resistors to an analog pin to read the voltage of the battery supplying the arduino.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Currently the system looks like 6v battery -&gt; 5v power regulator to Arduino -&gt; resistor divider attached to 6v (unregulated) battery. GND is common throughout.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How could I measure the voltage of another battery given that it will be on a different circuit? e.g. different ground loop.&lt;/p&gt;&#xA;" OwnerUserId="4276" LastActivityDate="2016-08-17T10:34:16.410" Title="Measure 2 diffrent battery voltages on arduino" Tags="&lt;arduino&gt;&lt;power&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10462" PostTypeId="1" CreationDate="2016-08-14T20:42:32.710" Score="0" ViewCount="47" Body="&lt;p&gt;I am trying to find the name (nomenclature) of the linkage (or carriage) that is being driven by the dual linear servo (actuator) arrangement in the following Youtube videos:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Le9hyRdcnOg&quot; rel=&quot;nofollow&quot;&gt;Servo Basic Concepts&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=P1kTsvfH2ss&quot; rel=&quot;nofollow&quot;&gt;YouTube - 4 X Linear Servo Application&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The linkage (carriage) appears to be able to rotate about a 180 degree arc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is this metal linkage (or carriage) system called? &#xA;&lt;/p&gt;&#xA;" OwnerUserId="14466" LastEditorUserId="37" LastEditDate="2017-06-13T11:19:13.433" LastActivityDate="2017-06-13T11:19:13.433" Title="Name of the linkage (or carriage) in video" Tags="&lt;mechanism&gt;&lt;robotic-arm&gt;&lt;identification&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10463" PostTypeId="1" CreationDate="2016-08-14T21:39:37.233" Score="7" ViewCount="481" Body="&lt;p&gt;I have 2 wheeled differential drive robot which I use pid for low level control to follow line. I implemented &lt;strong&gt;q learning&lt;/strong&gt; which uses samples for 16 iterations then uses them to decide the best position to be on the line so car takes the turn from there. This allows PID to setup and smooth fast following. My question is how can I setup a reward function that improves the performance i.e. lets the q learning to find the best&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What it tries to learn is this, it has 16 inputs which contains the line positions for the last 15 iterations and this iteration. Line position is between &lt;code&gt;-1&lt;/code&gt; and &lt;code&gt;1&lt;/code&gt; which &lt;code&gt;-1&lt;/code&gt; means only left most sensor sees the line and 0 means the line is in the center. I want it to learn a line position that when it faces this input again it will set that line position like its the center and take the curve according to that line position. For example error is required position - line position so let say I had 16 &lt;code&gt;0&lt;/code&gt; as input then I calculated the required as &lt;code&gt;0.4&lt;/code&gt;. So after that the car will center itself at &lt;code&gt;0.4&lt;/code&gt; I hope this helps :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You asked for my source code i post it below&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void MainController::Control(void){&#xA;&#xA;    float linePosition = sensors-&amp;gt;ReadSensors();&#xA;&#xA;    if(linePosition == -2.0f){       &#xA;      lost_line-&amp;gt;FindLine(lastPos[1] - lastPos[0]);&#xA;    } &#xA;    else{&#xA;        line_follower-&amp;gt;Follow(linePosition);&#xA;        lastPos.push_back(linePosition);&#xA;        lastPos.erase(lastPos.begin());   &#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;My Sensor reading returns a value between &lt;code&gt;-1.0f&lt;/code&gt; and &lt;code&gt;1.0f&lt;/code&gt;. &lt;code&gt;1.0f&lt;/code&gt; means Outer Sensor on the right is only the line. I have 8 sensors.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void LineFollower::Follow(float LinePosition){&#xA;&#xA;    float requiredPos = Qpredictor.Process(LinePosition,CurrentSpeed);&#xA;    float error = requiredPos - LinePosition;&#xA;&#xA;    float ErrorDer = error -LastError;&#xA;&#xA;    float diffSpeed = (KpTerm * error + (KdTerm * ErrorDer));&#xA;&#xA;    float RightMotorSpeed = CurrentSpeed - diffSpeed;&#xA;    float LeftMotorSpeed = CurrentSpeed + diffSpeed;&#xA;&#xA;    LastError = error;&#xA;&#xA;    driver-&amp;gt;Drive(LeftMotorSpeed,RightMotorSpeed);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Here is the logic for the value for QPredictor(I call the learning part as this). And Finally QPredictor&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;float Memory[MemorySize][DataVectorLength] =&#xA;{&#xA;  {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0},&#xA;  {0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3},&#xA;  {0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6},&#xA;  {0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8},&#xA;&#xA;  {0.000, 0.012, 0.050, 0.113, 0.200, 0.312, 0.450, 0.613, 0.800, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000},&#xA;  {0.000, 0.000, 0.012, 0.050, 0.113, 0.200, 0.312, 0.450, 0.613, 0.800, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000},&#xA;  {0.000, 0.000, 0.000, 0.012, 0.050, 0.113, 0.200, 0.312, 0.450, 0.613, 0.800, 1.000, 1.000, 1.000, 1.000, 1.000},&#xA;  {0.000, 0.000, 0.000, 0.000, 0.012, 0.050, 0.113, 0.200, 0.312, 0.450, 0.613, 0.800, 1.000, 1.000, 1.000, 1.000},&#xA;  {0.000, 0.000, 0.000, 0.000, 0.000, 0.012, 0.050, 0.113, 0.200, 0.312, 0.450, 0.613, 0.800, 1.000, 1.000, 1.000},&#xA;  {0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.012, 0.050, 0.113, 0.200, 0.312, 0.450, 0.613, 0.800, 1.000, 1.000},&#xA;  {0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.012, 0.050, 0.113, 0.200, 0.312, 0.450, 0.613, 0.800, 1.000},&#xA;&#xA;  {0.000, 0.025, 0.100, 0.225, 0.400, 0.625, 0.900, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000},&#xA;&#xA;  {0.000, 0.050, 0.200, 0.450, 0.800, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000},&#xA;&#xA;&#xA;  {0.000, 0.100, 0.400, 0.900, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000},&#xA;  {0.000, 0.000, 0.100, 0.400, 0.900, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000},&#xA;  {0.000, 0.000, 0.000, 0.100, 0.400, 0.900, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000},&#xA;  {0.000, 0.000, 0.000, 0.000, 0.100, 0.400, 0.900, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000},&#xA;  {0.000, 0.000, 0.000, 0.000, 0.000, 0.100, 0.400, 0.900, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000},&#xA;  {0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.100, 0.400, 0.900, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000},&#xA;  {0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.100, 0.400, 0.900, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000},&#xA;  {0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.100, 0.400, 0.900, 1.000, 1.000, 1.000, 1.000, 1.000},&#xA;  {0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.100, 0.400, 0.900, 1.000, 1.000, 1.000, 1.000},&#xA;  {0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.100, 0.400, 0.900, 1.000, 1.000, 1.000},&#xA;  {0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.100, 0.400, 0.900, 1.000, 1.000},&#xA;  {0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.100, 0.400, 0.900, 1.000}&#xA;};&#xA;&#xA;&#xA;QPredictor::QPredictor(){&#xA;    for(int i=0;i&amp;lt;MemorySize;i++){&#xA;        output[i]=0.0f;&#xA;        input[i]=0.0f;&#xA;    }&#xA;&#xA;    state = 0;&#xA;    PrevState = 0;&#xA;}&#xA;&#xA;float QPredictor::Process(float linePosition,float currentBaseSpeed){&#xA;    for(int i=1;i&amp;lt;DataVectorLength;i++){&#xA;        input[i] = input[i-1];&#xA;    }&#xA;&#xA;    input[0] = m_abs(linePosition);&#xA;&#xA;    int MinIndex = 0;&#xA;    float Distance = 10000.0f;&#xA;&#xA;    float sum = 0.0f;&#xA;&#xA;    for(int i=0;i&amp;lt;MemorySize;i++){&#xA;        sum = 0.0f;&#xA;        for(int j=0;j&amp;lt;DataVectorLength;j++){&#xA;            sum +=m_abs(input[j] - Memory[i][j]);&#xA;        }&#xA;&#xA;        if(sum &amp;lt;= Distance){&#xA;            MinIndex = i;&#xA;            Distance = sum;     &#xA;       }&#xA;    }&#xA;&#xA;    sum = 0.0f;&#xA;    for(int i=0;i&amp;lt;DataVectorLength;i++){&#xA;        sum += input[i];&#xA;    }&#xA;&#xA;    float eta = 0.95f;&#xA;&#xA;    output[MinIndex] = eta * output[MinIndex] + (1 - eta) * sum;&#xA;&#xA;    return -m_sgn(linePosition) * output[MinIndex];&#xA;}&#xA;&#xA;&#xA;float QPredictor::rewardFunction(float *inputData,float currentBaseSpeed){&#xA;    float sum = 0.0f;&#xA;&#xA;    for(int i=0;i&amp;lt;DataVectorLength;i++){&#xA;        sum += inputData[i];&#xA;    }&#xA;&#xA;    sum /= DataVectorLength;&#xA;&#xA;    return sum;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I now only have average Error and currently not using learning because it's not complete without reward function. How can I adjust it according to the dimensions of my Robot?&lt;/p&gt;&#xA;" OwnerUserId="14329" LastEditorUserId="10596" LastEditDate="2016-10-16T16:55:39.697" LastActivityDate="2021-05-22T23:04:40.527" Title="Reward Function for q learning on a robot" Tags="&lt;machine-learning&gt;&lt;differential-drive&gt;&lt;two-wheeled&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="10465" PostTypeId="2" ParentId="10462" CreationDate="2016-08-15T00:29:36.487" Score="4" Body="&lt;p&gt;The video shows 2 linear actuators driving a &lt;a href=&quot;https://en.wikipedia.org/wiki/Universal_joint&quot; rel=&quot;nofollow&quot;&gt;universal joint&lt;/a&gt; through &lt;a href=&quot;https://en.wikipedia.org/wiki/Ball_joint&quot; rel=&quot;nofollow&quot;&gt;ball and socket joints&lt;/a&gt;.  &lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2016-08-15T00:29:36.487" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10466" PostTypeId="2" ParentId="10463" CreationDate="2016-08-15T08:59:01.313" Score="0" Body="&lt;p&gt;Adaptive PID control is based on a manual coded algorithm for line-following which is modified by reinforcement learning. The idea is, that in the PID function a parameter is unknown (e.g. the distance from line which can be tolerated as deviation) and this parameter will be calculated on-the-fly while driving the robot. The rewards are given manual by an operator &lt;a href=&quot;https://en.wikipedia.org/wiki/Clicker_training&quot; rel=&quot;nofollow&quot;&gt;Clicker training&lt;/a&gt; or can be determined in a loop. The robot is driving a parcurs, the time is measured. The robot drives the parcurs again and the goal is to decrease the time.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2016-08-15T08:59:01.313" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="10468" PostTypeId="1" AcceptedAnswerId="10470" CreationDate="2016-08-15T09:42:39.960" Score="3" ViewCount="916" Body="&lt;p&gt;Given a desired transform matrix of the end effector relevant to the base frame of the P560:&#xA;&lt;img src=&quot;https://i.imgur.com/FyuhvUK.png&quot; alt=&quot;transform&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;John J. Craig, in his book, Introduction to Robotics&#xA;Mechanics and Control, computes the inverse kinematic solutions of a Puma 560, with (correct me if wrong) Modified DH parameters and gets the following set of equations for theta angles:&#xA;&lt;img src=&quot;https://i.imgur.com/v8bO8yR.png&quot; alt=&quot;transform&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;and I noticed that there are no alpha angles in these calculations.&lt;/p&gt;&#xA;&lt;p&gt;So, my question is why aren't the &lt;em&gt;alpha&lt;/em&gt; angle values not used in the calculation for the desired pose with the given end effector transform? Why is it independent of the axes twist angles of the robot?&lt;/p&gt;&#xA;" OwnerUserId="14395" LastEditorUserId="19515" LastEditDate="2020-07-25T00:35:56.940" LastActivityDate="2020-07-25T00:35:56.940" Title="Inverse Kinematics Computation -- why are alpha angle values not included?" Tags="&lt;inverse-kinematics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10469" PostTypeId="1" CreationDate="2016-08-16T00:17:50.370" Score="2" ViewCount="695" Body="&lt;p&gt;I am working in the field of automated vehicles mainly in the domain of passenger and commercial vehicles. I have been studying whatever I can get regarding the measurement the state (relative position, relative velocity, relative heading and roation, a.k.a. yaw rate) of surrounding objects especially other vehicles using sensors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While everything else is possible to measure precisely using on-board sensors, I have found out that not much literature is available for measuring the vehicle heading and yaw rate &lt;strong&gt;&lt;em&gt;of other vehicles&lt;/em&gt;&lt;/strong&gt; which is baffling to me given the extreme precision of laser based sensing (albeit using time stamps).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am looking for:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Reference to literature with experiments for estimation of yaw rate and vehicle heading.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;As I can see from the literature available (or the lack thereof), no direct way of measuring yaw rate is available but by using LIDAR or Camera with consecutive time stamps or scans of data. However, this inherently requires the data to be correct. Hence, I would think that due to the inaccuracies involved, this method is not used! Is this correct?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Are there any commercially available sensors that give accurate heading and yaw rate information &lt;strong&gt;&lt;em&gt;of other vehicles&lt;/em&gt;&lt;/strong&gt;?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Sources and research papers would be most welcome!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: By &lt;strong&gt;this inherently requires the data to be correct&lt;/strong&gt; I mean, given the high sensitivity to error in heading or yaw rate at high vehicle speeds, the values computed using sensor information is not accurate enough to be put to use in practice!&lt;/p&gt;&#xA;" OwnerUserId="9833" LastEditorUserId="9833" LastEditDate="2016-08-16T15:57:37.200" LastActivityDate="2016-08-16T15:57:37.200" Title="Heading and Yaw Rate Measurements" Tags="&lt;localization&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="10470" PostTypeId="2" ParentId="10468" CreationDate="2016-08-16T00:39:10.947" Score="1" Body="&lt;p&gt;Check out Equation 3.6:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;^{i-1}_iT = \left[ &#xA;\begin{array}{c}&#xA;c\theta_i &amp;amp; -s\theta_i &amp;amp; 0 &amp;amp; r_{i-1} \\&#xA;s\theta_ic\alpha_{i-1} &amp;amp; c\theta_ic\alpha_{i-1} &amp;amp; -s\alpha_{i-1} &amp;amp; -s\alpha_{i-1}d_i \\&#xA;s\theta_is\alpha_{i-1} &amp;amp; c\theta_is\alpha_{i-1} &amp;amp; c\alpha_{i-1} &amp;amp; c\alpha_{i-1}d_i \\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1&#xA;\end{array}&#xA;\right]&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and Figure 3.21, &quot;Link parameters of the PUMA 560&quot;: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{array}{c}&#xA;i &amp;amp; \alpha_{i-1} &amp;amp; r_{i-1} &amp;amp; d_i &amp;amp; \theta_i \\&#xA;\\&#xA;1 &amp;amp; 0           &amp;amp; 0   &amp;amp; 0   &amp;amp; \theta_1 \\&#xA;2 &amp;amp; -90^{\circ} &amp;amp; 0   &amp;amp; 0   &amp;amp; \theta_2 \\&#xA;3 &amp;amp; 0           &amp;amp; a_2 &amp;amp; d_3 &amp;amp; \theta_3 \\&#xA;4 &amp;amp; -90^{\circ} &amp;amp; a_3 &amp;amp; d_4 &amp;amp; \theta_4 \\&#xA;5 &amp;amp; 90^{\circ}  &amp;amp; 0   &amp;amp; 0   &amp;amp; \theta_5 \\&#xA;6 &amp;amp; -90^{\circ} &amp;amp; 0   &amp;amp; 0   &amp;amp; \theta_6 \\&#xA;\end{array}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here I've used $r$ instead of $a$ to prevent any confusion between $\alpha$ and $a$. In Equation 3.6, $s$ means $\sin$ and $c$ means $\cos$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To your question, $\alpha$ is more related to the orientation of two joints relative to each other as opposed to the &lt;em&gt;motion&lt;/em&gt; of the joints relative to each other. That is,  $\alpha$ is generally fixed by physical construction and thus, as a parameter, isn't time-dependent. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So hopefully you can see that, from Figure 3.21, all of the $\alpha$ values are either +/- 90 degrees or zero. Equation 3.6 then uses it &lt;em&gt;only&lt;/em&gt; in sine and cosine terms, meaning that they can all be reduced to +/-1 or zero. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I really, &lt;strong&gt;really&lt;/strong&gt; hate when authors jump through simplifications like this without a heads up, so I totally understand the confusion. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2016-08-16T12:53:40.880" LastActivityDate="2016-08-16T12:53:40.880" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="10471" PostTypeId="1" CreationDate="2016-08-16T06:32:17.533" Score="0" ViewCount="98" Body="&lt;p&gt;I am not able to clearly differentiate between the two platforms:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://roboearth.org/&quot; rel=&quot;nofollow&quot;&gt;RoboEarth&lt;/a&gt;, and;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.knowrob.org/&quot; rel=&quot;nofollow&quot;&gt;KnowRob&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="14472" LastEditorUserId="9176" LastEditDate="2016-08-26T09:44:24.503" LastActivityDate="2016-08-26T09:44:24.503" Title="What is difference between RoboEarth and KnowRob?" Tags="&lt;theory&gt;" AnswerCount="2" CommentCount="1" ClosedDate="2016-08-26T10:41:09.447" ContentLicense="CC BY-SA 3.0" />
  <row Id="10472" PostTypeId="1" CreationDate="2016-08-16T06:38:58.070" Score="0" ViewCount="194" Body="&lt;p&gt;I am having issues with bringing the robot out of its sleep or off mode. Seems it goes into sleep mode when there is no activity for about 4 minutes. I am using the i-Robot Create 2 serial cable. When it is in its sleep mode I try removing the cable end plugged into robot and connect jumper wire between pins 5 and 6 on the robot 7 pin connector for a brief time period. This effectively shorts the BRC pin to GND for a short period of time ( less than 1 second). Then I reconnect the serial port cable into the robot 7 pin connector and try giving the robot a command but no go. I have also read that commands 173 and 173 173 can help with this issue but I may be mistaken. Any help on this is very much appreciated !!!! Rick&lt;/p&gt;&#xA;" OwnerUserId="14432" LastActivityDate="2019-01-01T03:03:30.740" Title="I-Robot Create 2 reset after sleep issue?" Tags="&lt;irobot-create&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10473" PostTypeId="2" ParentId="10471" CreationDate="2016-08-16T08:05:52.180" Score="2" Body="&lt;p&gt;&lt;a href=&quot;http://roboearth.org/&quot; rel=&quot;nofollow&quot;&gt;RoboEarth&lt;/a&gt; was the name of a European project. &lt;a href=&quot;http://www.knowrob.org/knowrob&quot; rel=&quot;nofollow&quot;&gt;Knowrob is software&lt;/a&gt; that was developed, in part, by the RoboEarth project.&lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="184" LastEditDate="2016-08-17T03:58:10.747" LastActivityDate="2016-08-17T03:58:10.747" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10474" PostTypeId="1" CreationDate="2016-08-16T09:54:54.870" Score="3" ViewCount="346" Body="&lt;p&gt;I was planning on using the odometry model in the prediction stage of an Extended Kalman Filter.&#xA;State transition equations:&#xA;$$ f(X_t,a_t) = \begin{bmatrix}&#xA;x_{t+1} = x_t + \frac{\delta s_r + \delta s_l}{2} \cdot \cos(\theta_t) +u_1&#xA;\\ y_{t+1} = y_t + \frac{\delta s_r + \delta s_l}{2} \cdot \sin(\theta_t) + u_2&#xA;\\ \theta_{t+1} = \theta_t + \frac{\delta s_r + \delta s_l}{b} \cdot \sin(\theta_t)+u_3&#xA;\end{bmatrix} $$&#xA;with $\delta s_r$ and $\delta s_l = \frac{n}{n_0} \cdot 2 \cdot \pi \cdot r$&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;$X_t = \begin{bmatrix} x_t &amp;amp; y_t &amp;amp; \theta_t\end{bmatrix}^T$ state matrix containing XY-coordinate and heading $\theta$ of vehicle in global reference frame&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;$\delta s_r$ and $\delta s_l$ distance travelled by respectively right and left wheel&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;$b$ distance from center of the vehicle to the wheel&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;$n$ encoder pulses count during sampling period t&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;$n_0$ total pulses count in 1 wheelturn&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;$r$ wheel radius&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;$u_1,u_2$ and $u_3$ random noise N(0,$\sigma^2$)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Now I doubt if this noise indeed does have a zero mean?&#xA;Wheelslip will always make the estimated distance travelled shorter than the measured distance isn't it?&lt;/p&gt;&#xA;" OwnerUserId="13901" LastActivityDate="2016-08-18T07:01:27.010" Title="Odometry motion model for Kalman filter, but is the error zero mean?" Tags="&lt;kalman-filter&gt;&lt;odometry&gt;&lt;noise&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10476" PostTypeId="2" ParentId="10469" CreationDate="2016-08-16T12:50:57.817" Score="2" Body="&lt;p&gt;You're looking for a heading sensor - do you mean a compass? Or is there something else you're looking for? A compass gives you an absolute measurement, and a gyroscope provides yaw rate information.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;:EDIT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;OP clarified that the yaw angle and yaw rate of interest is that of &lt;em&gt;other&lt;/em&gt; vehicles, specifically the vehicle in front of the controlled vehicle. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not sure I understand why you even care about their heading, unless you're trying to fake autonomy by just copying what the car in front is doing. That's a dangerous assumption, though, as the car in front may change lanes when it is safe for them and not for you, may make turns and exit roads you don't want to, etc. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You also state (about yaw estimation from LIDAR and cameras) that &quot;this requires the data to be correct,&quot; which is the problem with all sensors. This is why we use filters. Noise, measurement error, biases - these all degrade feedback and create erroneous feedback signals, which are then treated as &quot;truth&quot; and acted on by the system. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;All sensors have flaws; it's up to you to know your sensor and compensate for those flaws accordingly. A gyroscope not only has noise and bias offsets, but also a &lt;a href=&quot;https://en.wikipedia.org/wiki/Random_walk&quot; rel=&quot;nofollow&quot;&gt;random walk&lt;/a&gt; that means the bias offset actually shifts over time, so even if you start out with a perfect measurement of the offset, that value changes and thus you still don't get a perfect feedback. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;These problems exist even in weapons-grade (tactical) IMU sensors. The problem will likely be &lt;em&gt;worse&lt;/em&gt; for LIDAR and camera-based systems, but again, it's always something you need to look out for and correct yourself. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As with a lot of questions that get asked here, it seems that you've already talked yourself into a solution (calculate the yaw angle and rate of the car in front of you) and have come here trying to determine how to implement that solution. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My advice would be to give more context to the &lt;em&gt;problem you're trying to solve&lt;/em&gt;, introduce your solution concept, then state the trouble you're having. In that way you can simultaneously get feedback on your method and also get suggestions for other ways to solve the problem. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2016-08-16T15:51:07.297" LastActivityDate="2016-08-16T15:51:07.297" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="10477" PostTypeId="2" ParentId="10474" CreationDate="2016-08-16T13:30:57.357" Score="1" Body="&lt;p&gt;The noise term will always be zero mean. If you believe the odometry equations will not accurately capture wheel slip and you believe the filter will not adequately track your state then the solution is more accurate equations used in the prediction step. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, if you believe the process noise if not a constant, you can construct a process noise as a function of the state of the vehicle. It will still be a zero mean noise, that will always be true. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd suggest solving for this non-zero mean component of the noise and just adding that to your odometry equations. &lt;/p&gt;&#xA;" OwnerUserId="8842" LastActivityDate="2016-08-16T13:30:57.357" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10478" PostTypeId="2" ParentId="10450" CreationDate="2016-08-16T14:23:29.117" Score="0" Body="&lt;p&gt;Some testing gave me the following solution:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;converting from (longitude,latitude) to (X,Y)&#xA;$$X = r \cdot cos(lat.) \cdot cos(long.)$$&#xA;$$Y = r \cdot cos(lat.) \cdot sin(long.)$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;rotating the frame so that the Y-axis is always in front of you&#xA;$$X' = [r \cdot cos(lat.) \cdot cos(long.)-X_0]\cdot cos(\alpha-90°)- [r \cdot cos(lat.) \cdot sin(long.)-Y_0] \cdot sin(\alpha-90°) $$&#xA;$$Y' = [r \cdot cos(lat.) \cdot cos(long.)-X_0]\cdot sin(\alpha-90°)+ [r \cdot cos(lat.) \cdot sin(long.)-Y_0] \cdot cos(\alpha-90°) $$&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;$r$ : earth radius 6371000 m&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;$\alpha$ :  heading at start (so vehicle pointing east $\alpha = 90°$, pointing north $\alpha = 0°$)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;$X_0$ and $Y_0$ : first formula's filled in with start longitude and latitude&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="13901" LastEditorUserId="13901" LastEditDate="2016-08-16T14:38:07.180" LastActivityDate="2016-08-16T14:38:07.180" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10482" PostTypeId="2" ParentId="10101" CreationDate="2016-08-16T17:31:20.763" Score="1" Body="&lt;p&gt;I think the code is just fine. You must however test the code by placing ultrasonic sensor at fixed distance from the wall and testing the distance. Also, it seems you are using &lt;strong&gt;SR04&lt;/strong&gt; ultrasonic sensor which has a beam angle of &lt;strong&gt;15 degrees&lt;/strong&gt; and accuracy of &lt;strong&gt;3mm&lt;/strong&gt;. This might result beam being reflected from water column container. As mentioned in the datasheet &lt;a href=&quot;http://www.micropik.com/PDF/HCSR04.pdf&quot; rel=&quot;nofollow&quot;&gt;SR04 DataSheet&lt;/a&gt;, minimum area of measurement must be &lt;strong&gt;0.5 square meters&lt;/strong&gt; to get correct readings.&lt;/p&gt;&#xA;" OwnerUserId="14471" LastActivityDate="2016-08-16T17:31:20.763" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10483" PostTypeId="2" ParentId="10472" CreationDate="2016-08-16T22:52:24.190" Score="1" Body="&lt;p&gt;The Create 2 cable will wake the robot when plugged in without any modifications.&#xA;173 is the 'stop' command that stops the OI. It does not do anything if the robot is sleeping.&#xA;Also, in the OI Manual it states the robot goes into sleep every 5 minutes unless in full or safe mode.&lt;/p&gt;&#xA;" OwnerUserId="9743" LastActivityDate="2016-08-16T22:52:24.190" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="10485" PostTypeId="2" ParentId="10461" CreationDate="2016-08-17T10:34:16.410" Score="1" Body="&lt;p&gt;You cannot measure a voltage if you don't have any reference to measure it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you have to connect the two wire of your second battery to your arduino circuit : &#xA;just connect the ground of the second battery to the common ground and apply the same technique for the voltage measurement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is an image to show how you can do : &#xA;&lt;a href=&quot;https://i.stack.imgur.com/in8AX.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/in8AX.png&quot; alt=&quot;Different bat voltage arduino&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;B1 is your main battery&lt;/li&gt;&#xA;&lt;li&gt;R2 and R1 make the voltage division for measurement on ANA_1 (any analog pin of the arduino is OK)&lt;/li&gt;&#xA;&lt;li&gt;B2 is your second battery&lt;/li&gt;&#xA;&lt;li&gt;R4 and R3 make the voltage division for measurement on ANA_2 (any analog pin of the arduino is OK)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="13430" LastActivityDate="2016-08-17T10:34:16.410" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10486" PostTypeId="1" AcceptedAnswerId="10493" CreationDate="2016-08-17T10:48:13.790" Score="0" ViewCount="325" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/cZzjL.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/cZzjL.png&quot; alt=&quot;The triangles used for angle calculations&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am trying to control a &lt;a href=&quot;http://dobot.cc/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Dobot arm&lt;/a&gt;.  The arm moves with angles whereas I need to work with cartesian coordinates. From inverse kinematics equations and polar coordinates I have implemented x,y and z coordinates working very well on their own. But I can not combine the coordinates in order to work all together. When I add them up it is not going to the desired place. How can I combine these coordinates? I got some help from (&lt;a href=&quot;https://github.com/maxosprojects/open-dobot&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/maxosprojects/open-dobot&lt;/a&gt;) but could not manage to successfully move dobot. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: I've written the codes in Qt and also I've added the triangles used for angle calculations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;//foreArmLength=160mm rearArmLEngth=135mm&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;float DobotInverseKinematics::gotoX(float x) //func for x-axis&#xA;float h=qSqrt(qPow(lengthRearArm,2)-qPow(x,2)); //height from ground&#xA;QList&amp;lt;float&amp;gt; zEffect=gotoZ(h); //trying to find the effect of x movement on z-axis&#xA;float cosQ=h/lengthRearArm; //desired joint angle&#xA;float joint2=qRadiansToDegrees(qAcos(cosQ));    &#xA;//move in range control&#xA;if(joint2 != joint2)&#xA;{joint2=0;&#xA;    qDebug()&amp;lt;&amp;lt; &quot;joint2NAN&quot;;}&#xA;return joint2;&#xA;&#xA;QList&amp;lt;float&amp;gt; DobotInverseKinematics::gotoY(float y) //func for y-axis&#xA;QList&amp;lt;float&amp;gt; result ;&#xA;float actualDist=lengthForeArm+distToTool; //distance to the end effector&#xA;float x=(qSqrt(qPow(actualDist,2)+qPow(y,2)))-actualDist; //calculating x movement caused by y movement&#xA;float joint1=qRadiansToDegrees(qAcos(actualDist/(actualDist+x))); //desired joint angle&#xA;float joint2=gotoX(x);  //the angle calculation of y movement on x axis&#xA;if(joint1 != joint1)&#xA;{joint1=0;&#xA;    qDebug()&amp;lt;&amp;lt; &quot;joint1NAN&quot;;}&#xA;result.append(joint1);&#xA;result.append(joint2);&#xA;return result;&#xA;&#xA;QList&amp;lt;float&amp;gt; DobotInverseKinematics::gotoZ(float z) //func. for z-axis&#xA;QList&amp;lt;float&amp;gt; result ;&#xA;float joint3=qSqrt(qPow(160,2.0)-qPow(z,2.0))/ 160; //desired joint angle&#xA;float temp=160-qSqrt(qPow(160,2.0)-qPow(z,2.0));&#xA;float joint2=qSqrt(qPow(lengthRearArm,2)-qPow(temp,2.0))/lengthRearArm; //desired joint angle&#xA;if(joint3 != joint3)&#xA;{joint3=0;&#xA;    qDebug()&amp;lt;&amp;lt; &quot;joint3NAN&quot;;}&#xA;joint2=qAcos(joint2)*(180/M_PI);&#xA;joint3=qAcos(joint3)*(180/M_PI);&#xA;result.append(joint2);&#xA;result.append(joint3);&#xA;return result;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="14425" LastEditorUserId="110" LastEditDate="2016-08-18T20:52:36.220" LastActivityDate="2016-08-19T11:30:22.727" Title="Combine individually working cartesian coordinates" Tags="&lt;robotic-arm&gt;&lt;inverse-kinematics&gt;&lt;c++&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="10488" PostTypeId="2" ParentId="10474" CreationDate="2016-08-18T07:01:27.010" Score="0" Body="&lt;p&gt;The bias of your distribution will depend on parameters outside of your model. Acceleration, incline, terrain properties, tire temperature, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your noise term is zero bias, because it is a blanket assumption for all these cases. Consider for example your robot going downhill. The bias would be positive in this case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To tweak your model, you could for example include the slip as a constant factor on the distance traveled for each wheel. Note that this factor will be very depending on your situation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another component to consider is your $\sigma^2$. Having it constant, and thus independent of your $\delta s$ generates the same increase in uncertainty when you are not moving compared to a very fast movement. &lt;/p&gt;&#xA;" OwnerUserId="127" LastActivityDate="2016-08-18T07:01:27.010" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10489" PostTypeId="2" ParentId="9320" CreationDate="2016-08-18T07:06:22.793" Score="2" Body="&lt;p&gt;The main problem with motion planning is the time-dimension. Not only that the UAV can move up, down, forward or backward, but the motion is also defined along the time-axis. A motion plan like &quot;up, up, down&quot; is fundamental different then &quot;up, down, up&quot;. After few steps, the number of possibilities grows exponential.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even on simple examples like quadrotor path planning, Sokoban or grasping objects there are more then one million solutions which build a complex RRT graph. For the planner it's unclear which of the RRT nodes are better then the others, so the planner has to evaluate all. On the one hand graph-search with PRM or A* is the most efficent way to find a solution (thats the reason why they are implemented in OMPL), on the other hand, graph-search can not prevent that one million or more nodes has to calculated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How to speed up the process? The naive answer is to use faster hardware (multi-core-processing, cloud computing) but thats not the way it works (Moores law is over, and doubling of current performance is very hard for Intel or AMD). A better alternative is to use a concept which is called hybrid planning (combination of RRT with PDDL solver): A symbolic planner reduces the search-space, and RRT is used only for local planning. Or more in general: PDDL Solver determines the subgoals and RRT calculates the paths to the subgoals.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2016-08-18T07:06:22.793" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10490" PostTypeId="1" CreationDate="2016-08-18T14:34:43.437" Score="1" ViewCount="1086" Body="&lt;p&gt;I recently thought about building a lab bench power supply, it comes in cheaper and I love to build things...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But then I also have a LiPo charger an iMax B6AC, that I had bought for my quadcopter, then came the idea of whether I can use the charger as a lab bench power supply...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My questions is, could this work and how could I make it work?&lt;/p&gt;&#xA;" OwnerUserId="11688" LastEditorUserId="9176" LastEditDate="2016-08-26T09:41:44.160" LastActivityDate="2020-07-08T18:09:57.177" Title="Is it possible to use a LiPo charger as a lab bench power supply?" Tags="&lt;power&gt;" AnswerCount="4" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10491" PostTypeId="1" CreationDate="2016-08-18T14:51:23.583" Score="3" ViewCount="332" Body="&lt;p&gt;Zeno Behaviour or Zeno Phenomenon can be informally stated as the behavior of a system making an infinite number of jumps in a finite amount of time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While this is an important Control system problem in ideal systems, can Zeno behavior exist in real systems? Any examples?&lt;br&gt;&#xA;If so, why don't noise or external factors deviate a system from achieving Zeno?&lt;/p&gt;&#xA;" OwnerUserId="14492" LastActivityDate="2016-08-18T14:51:23.583" Title="Examples of Zeno Behaviour in the Real World" Tags="&lt;mobile-robot&gt;&lt;control&gt;" AnswerCount="0" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10492" PostTypeId="1" CreationDate="2016-08-18T20:45:51.590" Score="5" ViewCount="1496" Body="&lt;p&gt;Why don't cheap toy robotic arms like &lt;a href=&quot;https://www.youtube.com/watch?v=4xP9OtcGpUk&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; move smoothly?  Why can't it even move itself smoothly, (even without any load)?&lt;/p&gt;&#xA;&lt;p&gt;In other words - what do real industrial robotic arms have, that cheap toys don't?&lt;/p&gt;&#xA;" OwnerUserId="2663" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2016-09-05T20:09:59.760" Title="Why don't cheap toy robotic arms move smoothly?" Tags="&lt;robotic-arm&gt;" AnswerCount="5" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10493" PostTypeId="2" ParentId="10486" CreationDate="2016-08-18T23:42:56.950" Score="1" Body="&lt;p&gt;$a_1, a_2$ : Link lengths&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$p_x,p_y$ : Target $x$ and $y$ coorditate&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\theta_1=atan2(p_y,p_x)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$p_r=\sqrt{p_x^2+p_y^2}$ : Target radial distance&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$p_z$ : Target $z$ coorditate&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\kappa=\frac{p_r^2+p_z^2-a_1^2-a_2^2}{2a_1a_2}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If $\kappa&amp;gt;1$ the position cannot be reached.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\theta_3=cos^{-1}(\kappa)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are 2 solutions, elbow up or elbow down. Below use $\theta_3^*=\theta_3$ or $\theta_3^*=-\theta_3$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\Delta=a_1^2+a_2^2+2a_1a_2cos(\theta_3^*)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$c\theta_2=\frac{p_r(a_1+a_2cos(\theta_3^*))+p_za_2sin(\theta_3)}{\Delta}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$s\theta_2=\frac{p_z(a_1+a_2cos(\theta_3^*))-p_ra_2sin(\theta_3)}{\Delta}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\theta_2=atan2(s\theta_2,c\theta_2)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These are joint angles. To get motor angles, you will have to adjust the angles based on how the motors are connected to the robot. $\theta$ is 0 when horizontal, $\theta_3$ is 0 when straight (in-line) with Link 2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A detailed explanation can be found in Robot Analysis by Tsai. ISBN 9780471325932 pp 71&lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="184" LastEditDate="2016-08-19T11:30:22.727" LastActivityDate="2016-08-19T11:30:22.727" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="10494" PostTypeId="2" ParentId="10492" CreationDate="2016-08-19T00:42:28.650" Score="0" Body="&lt;p&gt;Poor programming algorithms, cheap motors, poor mechanics, low weight, lack of part rigidity, bad balance, farming out production to the lowest bidder, take your pick.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or simply because they are cheap toys.&lt;/p&gt;&#xA;" OwnerUserId="13204" LastActivityDate="2016-08-19T00:42:28.650" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10495" PostTypeId="2" ParentId="10490" CreationDate="2016-08-19T00:47:27.747" Score="2" Body="&lt;p&gt;The LiPo charger probably doesnt put out enough current to be very useful, and it likely doesn't have the circuit design to provide power at a stable voltage and current.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You would be better off converting a switching power supply for a desktop PC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's a good example&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.instructables.com/id/Convert-A-Computer-Power-supply-to-a-Bench-Top-Lab/&amp;amp;ved=0ahUKEwj2pZ6VoMzOAhUFySYKHXXmBXsQFggbMAA&amp;amp;usg=AFQjCNEC2GWbuuvQinSSW4sJptmYU3irHg&amp;amp;sig2=sin4n44XrDZmciFVh_QTKg&quot; rel=&quot;nofollow&quot;&gt;http://www.instructables.com/id/Convert-A-Computer-Power-supply-to-a-Bench-Top-Lab/&amp;amp;ved=0ahUKEwj2pZ6VoMzOAhUFySYKHXXmBXsQFggbMAA&amp;amp;usg=AFQjCNEC2GWbuuvQinSSW4sJptmYU3irHg&amp;amp;sig2=sin4n44XrDZmciFVh_QTKg&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13204" LastActivityDate="2016-08-19T00:47:27.747" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10496" PostTypeId="2" ParentId="10492" CreationDate="2016-08-19T02:31:50.860" Score="8" Body="&lt;p&gt;The reason the robotic arm that you linked to does not move &lt;a href=&quot;https://en.wikipedia.org/wiki/Smoothness&quot; rel=&quot;noreferrer&quot;&gt;smoothly&lt;/a&gt; is that the commands given to it are not smooth. That type of actuator does not have any internal logic to generate a smooth motion from one point to another. Instead it tries it's hardest to go to the angle commanded using position control. Hobby servos use PID control and this control method will oscillate around the target point if not configured correctly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A secondary reason is probably that a combination of friction in the joints and too-big payload are near the maximum that those little motors can handle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A person with more robotics experience could probably make that arm move a lot more smoothly as long as they operated it within the limits of what the design allows for.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Low cost, high performance, electro-mechanical devices are possible. A portable tape player is a great example if you are old enough to have disassembled one. The mechanisms inside a printer are also a good example. The internal mechanisms of an automobile are another example. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is not a big enough market for toy robot arms to justify the engineering cost. The closest thing in robotics right now for low cost / high performance design is the &lt;a href=&quot;https://www.ald.softbankrobotics.com/en/cool-robots/nao&quot; rel=&quot;noreferrer&quot;&gt;Nao&lt;/a&gt; or the &lt;a href=&quot;http://www.rethinkrobotics.com/baxter/&quot; rel=&quot;noreferrer&quot;&gt;Baxter&lt;/a&gt;. &lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="184" LastEditDate="2016-08-20T03:38:03.517" LastActivityDate="2016-08-20T03:38:03.517" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10497" PostTypeId="2" ParentId="10490" CreationDate="2016-08-19T03:08:40.893" Score="3" Body="&lt;p&gt;You could trick the charger into providing power for you by applying a voltage to the balance sensing lines. However the control you have over it would be limited. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Switching power supplies are ridiculously cheap these days. Search ebay for &quot;switching power supply dc 24v&quot; for whatever voltage you want. I just keep a pile of these in the closet for the voltages I use the most (5, 12, 24 and 48). That plus one low power bench supply with current limiting to debug new boards with.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2016-08-19T03:08:40.893" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10498" PostTypeId="2" ParentId="10492" CreationDate="2016-08-19T08:18:54.270" Score="5" Body="&lt;p&gt;Cheap toy arms usually use cheap off the shelf servos, the kind you would find on model airplanes. Usually these servos don't have any control over speed. You give the servo the target angle and the servo tries to get to that position as fast as possible. They also don't compensate for things like load. With more expensive servos you give them both the target position and speed. There are also servos where you can play around with values (such as PID) and get information on things like load. This allows to to get smooth movement&lt;/p&gt;&#xA;" OwnerUserId="14435" LastActivityDate="2016-08-19T08:18:54.270" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10499" PostTypeId="2" ParentId="10492" CreationDate="2016-08-19T16:55:44.347" Score="2" Body="&lt;p&gt;Smooth control of a robotic arm is accomplished by &lt;em&gt;force&lt;/em&gt; control instead of strictly by &lt;em&gt;position&lt;/em&gt; control. This kind of control is generally referred to as &lt;a href=&quot;http://www.eucognition.org/eucog-wiki/Compliant_robots&quot; rel=&quot;nofollow&quot;&gt;compliance&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;On that page there is a comparison between compliant and non-compliant actuators, where the non-compliant actuators are referred to as &quot;stiff&quot;. This is, in my opinion, a great way to explain the &quot;jerky&quot; motion you see in the video. A stiff actuator passes any forces or torques back to the structure and does nothing to attempt to &lt;em&gt;damp&lt;/em&gt; those forces. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=AJPZjF7HDxY&quot; rel=&quot;nofollow&quot;&gt;Here&lt;/a&gt; is a video that shows the difference between force- and position-based control. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason for a lack of compliance in cheap robots is easily summed up in one word: Cost. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to implement force-based control, you need a means to &lt;em&gt;sense&lt;/em&gt; force. This means force transducers such as strain gauges installed along the arm to measure forces in the arm or torque sensors at the joints. Both of these are more expensive to design, purchase, install, and program that it would be for a similar robot without compliance. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a relatively new method that enables force control and force sensing (among other things) that is called &lt;a href=&quot;http://biomech.media.mit.edu/portfolio_page/cvsea/&quot; rel=&quot;nofollow&quot;&gt;series elastic actuation&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Briefly, the concept is that you put a spring between the actuator and the load. The actuator then acts to compress the spring rather than drive the load directly. The force output of the spring is given by $kx$, where $x$ is the displacement of the spring. So two neat things are happening - if you can measure the displacement, then the load position is the actuator position plus spring displacement, and the force output is $kx$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But again, to answer your question, cheap robots don't do any form of force control or compliance, so the rapid start/stop motion profiles @hauptmech mentions excites the physical structure. With nothing to damp the motion, those oscillations continue, giving a &quot;jerky&quot; appearance. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-08-19T16:55:44.347" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="10500" PostTypeId="2" ParentId="10471" CreationDate="2016-08-19T18:47:13.650" Score="0" Body="&lt;p&gt;Knowrob is the brainchild of the german computer scientist Michael Beetz who published the first paper in 2009, &lt;a href=&quot;http://www.knowrob.org/_media/bib/tenorth09knowledge.pdf&quot; rel=&quot;nofollow&quot;&gt;KNOW ROB - Knowledge Processing for Autonomous Personal Robots&lt;/a&gt;&#xA;It uses a OWL-semantic-web (PDDL like) description for task modelling and a prolog interpreter to reach symbolic goals. Roboearth is a project from the netherlands (TU Delft) from same year 2009 to build a robotic cloud for sharing ressources &lt;a href=&quot;http://www.dct.tue.nl/RoboEarth/RoboEarth.pdf&quot; rel=&quot;nofollow&quot;&gt;RoboEarth - connecting Robots worldwide&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2016-08-19T18:47:13.650" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10501" PostTypeId="2" ParentId="2987" CreationDate="2016-08-20T02:10:08.313" Score="0" Body="&lt;p&gt;Yes, I am a technician who works on stabilized camera gimbals for drones and we use hall effect sensors as encoders on our camera gimbals. You must mount the hall effect sensor IC facing toward the motor pole in the rear side of the motor as close as possible without touching. This will detect the magnetic flux as the motor shaft rotates. This works very well for DC brushless motors, I cannot guarantee that it will work as well for any other type of motor.&lt;/p&gt;&#xA;" OwnerUserId="4465" LastActivityDate="2016-08-20T02:10:08.313" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10502" PostTypeId="1" CreationDate="2016-08-20T14:09:01.017" Score="4" ViewCount="477" Body="&lt;p&gt;I want to basically make a pin matrix controlled either by spring, electromagnets or small motors(spring being the most viable option), something like what’s shown in the image. I'm pretty new to arduino and hardware in general so any input would be appreciated.&#xA;I mostly know the arduino end but don't have clue about the hardware part. Plus I don't have the technical expertise, as in I know electromagnets won't be a good option as I have to control individual pins and not clusters. Plus springs have the disadvantage of pushing them back in but other than that a very option. And its not viable to have individual motors for so many pins.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Pplxi.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Pplxi.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="14507" LastEditorUserId="184" LastEditDate="2016-08-21T10:48:15.103" LastActivityDate="2020-04-21T11:07:00.760" Title="What are good, low cost, actuators for a braille tablet to be controlled by arduino?" Tags="&lt;arduino&gt;&lt;motor&gt;&lt;electronics&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10503" PostTypeId="1" CreationDate="2016-08-20T15:54:21.517" Score="1" ViewCount="60" Body="&lt;p&gt;Is it possible to convert a cycle into an electric bike by using brushless outrunner motors that usually are for RC planes, multicopter, helicopter, etc?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it is possible, what specs do my motors need to be to provide enough power to bring my cycle to speed?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Will I need a gear system?&lt;/p&gt;&#xA;" OwnerUserId="11688" LastEditorUserId="11688" LastEditDate="2016-08-20T16:02:22.763" LastActivityDate="2016-08-21T22:47:40.423" Title="Running a cycle on brushless outrunner motors?" Tags="&lt;motor&gt;&lt;power&gt;&lt;electric&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ClosedDate="2016-08-26T10:36:43.980" ContentLicense="CC BY-SA 3.0" />
  <row Id="10504" PostTypeId="1" CreationDate="2016-08-20T23:46:01.397" Score="2" ViewCount="485" Body="&lt;p&gt;EDIT: Moved to ElectricalEngineering StackExchange Community&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm using &lt;a href=&quot;https://www.sparkfun.com/products/10736&quot; rel=&quot;nofollow&quot;&gt;Sparkfun Razor IMU 9DOF sensor&lt;/a&gt; which incorporates accelerometer, gyroscope, and magnetometer, for giving the Euler's angles (yaw, pitch, and roll). I'm using the firmware at this &lt;a href=&quot;http://cdn.sparkfun.com/datasheets/Sensors/IMU/SF9DOF_AHRS.zip&quot; rel=&quot;nofollow&quot;&gt;link&lt;/a&gt;. It has Processing sketch for calibration of magnetometer, but it doesn't give the precise measurements. Especially, the yaw is imprecise. I'm using this sensor for measuring azimuth and altitude of stellar objects. The altitude is mostly correct, but azimuth (yaw) isn't. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have several questions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Is there a better way to calibrate magnetometer? Is the calibration sufficient, without using the Madgwick or Kalman filter?&lt;/li&gt;&#xA;&lt;li&gt;Is there some nonlinearity present in the sensor? Since the yaw offset isn't constant, it changes (around -12 degrees up north to almost correct value at southwest). And if it is, how could I measure that nonlinearity and apply to the yaw measurements?&lt;/li&gt;&#xA;&lt;li&gt;If I have to use Madgwick or Kalman, do I have to apply them on quaternions? I believe that applying them at the final yaw measurements wouldn't do the job.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="14509" LastEditorUserId="14509" LastEditDate="2016-09-06T10:47:18.427" LastActivityDate="2016-09-06T10:47:18.427" Title="How to properly calibrate a magnetometer in IMU for precise yaw?" Tags="&lt;kalman-filter&gt;&lt;imu&gt;&lt;calibration&gt;&lt;magnetometer&gt;&lt;precise-positioning&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10505" PostTypeId="1" CreationDate="2016-08-21T02:52:30.923" Score="2" ViewCount="246" Body="&lt;p&gt;I have a localization data estimated and GPS_truth and generated [3x3] covariance matrix along with them. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What i would like to do is to see if the covariance is correct or not? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can we check it by plotting the covariance? &lt;/p&gt;&#xA;" OwnerUserId="14511" LastEditorUserId="9860" LastEditDate="2016-08-24T09:43:53.600" LastActivityDate="2016-12-22T12:25:33.397" Title="Covariance Check?" Tags="&lt;localization&gt;&lt;slam&gt;&lt;visualization&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10506" PostTypeId="2" ParentId="10503" CreationDate="2016-08-21T03:32:16.500" Score="1" Body="&lt;p&gt;Its going to be very difficult to make a cycle run with motors that small. You would be better off looking at an electric wheelchair motor. You need starting torque to bring the bike up from a standstill, and a motor that is typically light enough to run an rc plane isn't going to have the &quot;balls&quot; to push a bike, especially with a rider on it. They make motors already spec'd for this task, why reinvent the wheel(pun intended).&lt;/p&gt;&#xA;" OwnerUserId="13204" LastActivityDate="2016-08-21T03:32:16.500" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10507" PostTypeId="1" AcceptedAnswerId="10509" CreationDate="2016-08-21T19:31:17.130" Score="3" ViewCount="182" Body="&lt;p&gt;I have the actual &lt;strong&gt;DH parameters&lt;/strong&gt; of a robot:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;d1 = 0.4865 m&#xA;d2 = 0.600 m&#xA;d3 = 0.065 m&#xA;a1 = 0.150 m&#xA;a2 = 0.475 m&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;all other di's and ai's are zero.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can I use &lt;strong&gt;&lt;em&gt;these&lt;/em&gt;&lt;/strong&gt; for an inverse kinematics analytic closed form computation or should I measure the &lt;strong&gt;&lt;em&gt;virtual distances&lt;/em&gt;&lt;/strong&gt; in the 3d environment?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am &lt;em&gt;actually&lt;/em&gt; asking if the theta angles that will be yeld after the computations &lt;strong&gt;are dependent on the scale&lt;/strong&gt; of those distances.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: Scale factor is unknown&lt;/p&gt;&#xA;" OwnerUserId="14395" LastEditorUserId="14395" LastEditDate="2016-08-21T19:50:15.373" LastActivityDate="2016-08-21T21:21:03.153" Title="Do DH parameters change for a scaled robot 3d model?" Tags="&lt;inverse-kinematics&gt;&lt;dh-parameters&gt;&lt;3d-model&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10509" PostTypeId="2" ParentId="10507" CreationDate="2016-08-21T21:21:03.153" Score="4" Body="&lt;p&gt;You will need to provide target coordinates (x,y,z, etc) to your inverse kinematics equations. As long as they have the same scale as your DH parameters, the joint angles calculated will be the same. But since you don't know the scale factor, you don't know how to scale your inputs.  &lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2016-08-21T21:21:03.153" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10510" PostTypeId="2" ParentId="10503" CreationDate="2016-08-21T22:47:40.423" Score="2" Body="&lt;p&gt;Let's assume you do a motor on the crank shaft rather than on the hub.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you step on the pedal/crank it's approximately the mass of your body doing all the work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$Torque(\tau)=Force*Distance$, $Force=mass*Acceleration$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$mass:=70Kg$, $Acceleration:=9.8\frac{m}{s^2}$, $Distance:=0.2m$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\tau=70\times9.8\times0.2 \implies140Nm$ of torque for a motor to provide the same torque that you do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$Power=Torque*Speed(in \frac{radians}{sec})$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cranking the pedals a full turn each second is reasonable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$1\frac{rotation}{sec}=\frac{2\pi\space radians}{sec}=\frac{6.28\space radians}{sec}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, $140Nm\times6.28\frac{radians}{sec}\implies 880Watts$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a peak, you would get tired very quickly pedalling this hard, (think about how long you can climb stairs at 2 per second). &lt;a href=&quot;https://en.wikipedia.org/wiki/Human_power&quot; rel=&quot;nofollow&quot;&gt;Average human power&lt;/a&gt; is closer to 100W.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So now you have some numbers. You don't need more than 140Nm peak torque, and around 900W power. (&lt;a href=&quot;https://en.wikipedia.org/wiki/Electric_bicycle_laws&quot; rel=&quot;nofollow&quot;&gt;Laws usually restrict you to less than this power&lt;/a&gt;). Let's say that you just want some power assist. 30Nm and 50W of power might be ok.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have no idea which motor you were looking at; &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__67036__Quanum_MT_Series_5208_335KV_Brushless_Multirotor_Motor_Built_by_DYS.html&quot; rel=&quot;nofollow&quot;&gt;here's one at random&lt;/a&gt; in the £30 range. Let's estimate the torque it will produce. The motor constant kv tells us a lot. Not only is it an estimate of the backemf (ie how many volts per rpm the motor generates when it's spinning), the inverse of the same consant is an estimate of how much torque per amp is produced.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$kv\implies \frac{Volts}{\frac{rotations}{min}}\implies\frac{Volts}{\frac{2\pi\space radians}{60sec}}\implies\frac{60}{2\pi}\frac{Volts}{\frac{radians}{sec}}\implies\frac{Volts}{\frac{radians}{sec}}=\frac{2\pi}{60}kv$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\frac{Volts}{\frac{radians}{sec}}=\frac{1}{\frac{Nm}{Amp}}\implies\frac{Nm}{Amp}=\frac{1}{\frac{Volts}{\frac{radians}{sec}}}=\frac{60}{2\pi kv}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That motor has a kv of 335$\frac{rpm}{V}$ so it's torque constant is about .028$\frac{Nm}{Amp}$ and it has a max current of 28A so it's maximum torque is 0.78$Nm$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you would need around 40:1 gearing to get the torque into the range we want. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So even though the motor seems to have enough power, to amplify the torque to be useful, you will need gearing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I agree with @user241585 it's much easier to use kits designed for bicycles to start with. A company I've been happy with and is relatively cheap is &lt;a href=&quot;http://www.goldenmotor.com/&quot; rel=&quot;nofollow&quot;&gt;golden motor&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2016-08-21T22:47:40.423" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10511" PostTypeId="1" CreationDate="2016-08-22T05:46:47.943" Score="1" ViewCount="200" Body="&lt;p&gt;As a hardware engineer, I have studied quite a lot on sensor spec such as Accel, Gyro and Magnetometer including custom made fluxgate. I have studied matrix and quadarion (complex number) and so on.&#xA;I moving into calibration arena, I seen lot of article on calibration but not sure which is best solution to fix offset and mis-alignment axis. Can anyone point to best open source code.&#xA;I'm not interested in output results related to flight such as quadchopter and GPS, but more interested in directional math for drilling pipes, where toolface, inclination, azimuth and position is most important. What the best thesis or paper that cover this topic and open-source or example code (in C) for this application. Do I need Kalnman filter or such advance post data capture processing. Any tip how to avoid getting too involved with maths&lt;/p&gt;&#xA;" OwnerUserId="14477" LastActivityDate="2016-08-22T05:46:47.943" Title="Accelerometer, gyro, and magnetometer sensor fusion for material resource survey" Tags="&lt;control&gt;&lt;kalman-filter&gt;&lt;imu&gt;&lt;calibration&gt;&lt;precise-positioning&gt;" AnswerCount="0" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10513" PostTypeId="2" ParentId="2580" CreationDate="2016-08-22T09:50:07.310" Score="1" Body="&lt;p&gt;What are you trying to reach is called &quot;system identification&quot;: for given raw data of a real system, a computersimulation has to build with the same behavior. The challange is hard, because the simulation is done on a computer and the computer needs a turing-like program. The program consists of loops, if-then-statements and variables. To automate the generation of such a program is not possible. Nevertheless there is research on this field which is called &quot;model learning&quot;. Until now, this research is not good enough for a practical demonstration. The alternative to automatic system identification is to programm the simulation manually. The results are physics-engines like ODE which are used in Gazebo or box2D which is well suited for 2D simulation. It is possible to tune these simulators for fitting to real world by adjustig gravity parameter or damping-values.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A more advanced technique is to build a motion model from scratch. This can be done on a basis of a gui, where the objects are visable and a program which control these objects. A good starting point is the motion model of the Original Post which calculate new x/y value with help of the old value and a sin(angle) addition. The limit of this motion model is that no obstacle is detected. A tutorial for programming a better bouncing ball physics engine in pygame is give &lt;a href=&quot;http://www.petercollingridge.co.uk/pygame-physics-simulation&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2016-08-22T09:50:07.310" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10514" PostTypeId="1" AcceptedAnswerId="10522" CreationDate="2016-08-22T14:09:51.207" Score="1" ViewCount="484" Body="&lt;p&gt;I have some measurements of a real life robot, and a 3d model of that robot (lets say in Unity) and I want to know the scale factor, plus I dont want to find the 3d models measurements and then divide with the real world ones to find the scale factor, in order not to get more confused with more mathematics than I am already. So, is there a methodology or will I have to do it as I mentioned?&lt;/p&gt;&#xA;" OwnerUserId="14395" LastEditorUserId="14395" LastEditDate="2016-08-22T17:23:32.263" LastActivityDate="2016-08-25T08:35:59.757" Title="Scale factor of a 3d robot model relative to the real measurements of a robot" Tags="&lt;3d-model&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="10517" PostTypeId="1" CreationDate="2016-08-22T20:08:47.733" Score="1" ViewCount="608" Body="&lt;p&gt;I am building a robotic arm with these specifications:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;1 meter long&lt;/li&gt;&#xA;&lt;li&gt;approx. 1kg weight&lt;/li&gt;&#xA;&lt;li&gt;it is made of 4 motors. (2 at the base. One for rotating the whole arm left and right and another one for rotating up down. 1 motor for rotating the second half of the arm, only up and down. 1 for the claw used for grabbing)&lt;/li&gt;&#xA;&lt;li&gt;it must be able to lift at least 4kg + 1kg (it's own weight), and have a speed of 180 degrees in 2 seconds = 360 degrees in 1 second resulting 60rpm.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Which kind of motor would be best for the project (servo or stepper) and how much torque will it need? (Please also give me an explanation of how I can calculate the torque needed). Could you also give me an example or two of the motors I would need and/or a gearbox for them (models or links).&lt;/p&gt;&#xA;&#xA;&#xA;" OwnerUserId="14520" LastEditorUserId="37" LastEditDate="2017-03-09T18:32:12.540" LastActivityDate="2017-03-09T18:32:12.540" Title="Which kind of motors and how powerfull should they be for a robotic arm" Tags="&lt;motor&gt;&lt;robotic-arm&gt;&lt;servomotor&gt;&lt;stepper-motor&gt;&lt;torque&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="10520" PostTypeId="1" AcceptedAnswerId="14964" CreationDate="2016-08-23T01:35:53.150" Score="2" ViewCount="130" Body="&lt;p&gt;I am currently working on a SLAM-like application using a variable baseline stereo rig. Assuming I'm trying to perform visual SLAM using a stereo camera, my initialization routine would involve producing a point cloud of all 'good' features I detect in the first pair of images.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once this map is created and the cameras start moving, how do I keep 'track' of the original features that were responsible for this map, as I need to estimate my pose? Along with feature matching between the stereo pair of cameras, do I also have to perform matching between the initial set of images and the second set to see how many features are still visible (and thereby get their coordinates)? Or is there a more efficient way of doing this, through for instance, locating the overlap in the two points clouds?&lt;/p&gt;&#xA;" OwnerUserId="10310" LastEditorUserId="10310" LastEditDate="2016-08-23T02:01:55.320" LastActivityDate="2018-01-11T16:39:34.687" Title="Once matching features are computed between a stereo pair, how can they be tracked?" Tags="&lt;slam&gt;&lt;computer-vision&gt;&lt;stereo-vision&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10521" PostTypeId="1" AcceptedAnswerId="10943" CreationDate="2016-08-23T02:28:44.877" Score="0" ViewCount="319" Body="&lt;p&gt;I have a Robot with tracks. One of the tracks broke and I need to find a replacement, the tracks use the same plastic interconnects/pieces as this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ja4UA.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ja4UA.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They were very popular years back. Does anyone know the brand/name?&lt;/p&gt;&#xA;" OwnerUserId="4276" LastActivityDate="2016-10-30T04:10:45.740" Title="Help finding robot tracks" Tags="&lt;mobile-robot&gt;&lt;tracks&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="10522" PostTypeId="2" ParentId="10514" CreationDate="2016-08-23T03:49:10.973" Score="1" Body="&lt;p&gt;You will have to do it as mentioned. However, if the 3D model is accurate, there is only one number you have to find. Choose any dimension you can measure on both the real robot and the 3D model. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$Scale=\frac{RealDimension}{3Ddimension}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Every matching real and 3D dimension will give you the same number for scale.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So once you calculate scale once, you can apply it everywhere.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you know the Real dimension and want to calculate the 3D dimensions:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$3Ddimension=\frac{RealDimension}{Scale}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you know the 3D dimension and want to know the real one:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$RealDimension=Scale\times 3Ddimension$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This works for all dimensions. Note that angles don't change with scale. If something is 90 degrees at one scale, it will be 90 degrees at all other scales.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are measuring a mesh, then extremes are easier to measure than axis centers. For instance, in the following drawing, the 840mm dimension is probably the easiest to measure in your 3D model.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/AHXzs.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/AHXzs.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="184" LastEditDate="2016-08-25T08:35:59.757" LastActivityDate="2016-08-25T08:35:59.757" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="10523" PostTypeId="1" AcceptedAnswerId="10528" CreationDate="2016-08-23T11:00:30.010" Score="4" ViewCount="5205" Body="&lt;p&gt;We need to determine the 2D position of my robot. To do so, we have a LIDAR at a known high, with an horizontal plane, which gives us the distance to the nearest point for each angular degree (so 360 points for one rotation). The environment is known, so I have a map of the position of every object that the LIDAR is susceptible to hit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is, based on the scatter plot that the LIDAR is returning, how can we retrieve the position of my robot in the map ? We would need the &lt;code&gt;x&lt;/code&gt;, &lt;code&gt;y&lt;/code&gt; position in the map frame and also the &lt;code&gt;theta&lt;/code&gt; angle from the map frame to my robot frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We have tried to match objects on map with groups of points based on their distance between each other and by identifying those objects and the way the LIDAR &quot;sees&quot; them to retrieve the robot position. But it is still unsuccessful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To put it in a nutshell, we want to make &lt;code&gt;SLAM&lt;/code&gt; without the mapping part. How is it possible, and with what kind of algorithms ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A first step could be to stop the robot while acquiring data if it seems easier to process.&lt;/p&gt;&#xA;" OwnerUserId="14524" LastEditorUserId="14524" LastEditDate="2016-08-23T11:42:04.683" LastActivityDate="2019-07-09T23:34:15.453" Title="Determining position from a 2D map and LIDAR" Tags="&lt;localization&gt;&lt;lidar&gt;&lt;precise-positioning&gt;" AnswerCount="3" CommentCount="4" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="10524" PostTypeId="2" ParentId="10521" CreationDate="2016-08-23T11:27:36.453" Score="1" Body="&lt;p&gt;This image appears to be coming from &lt;a href=&quot;http://www.robotshop.com/blog/en/johnny-robot-gm-track-kit-b-jpg&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This &quot;johnny robot gm track kit&quot; is now sold as &quot;&lt;a href=&quot;http://www.robotshop.com/eu/en/standard-gm-track-kit-axles.html&quot; rel=&quot;nofollow&quot;&gt;Standard GM Track Kit&lt;/a&gt;&quot;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or at least it looks very similar.&lt;/p&gt;&#xA;" OwnerUserId="9860" LastEditorUserId="10596" LastEditDate="2016-09-22T20:36:35.540" LastActivityDate="2016-09-22T20:36:35.540" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10525" PostTypeId="1" CreationDate="2016-08-23T14:01:03.397" Score="2" ViewCount="1891" Body="&lt;p&gt;I experienced some drifting when coming near to magnetic fields with my IMU, so I wondered if it is possible to completely shield the IMU from external influences. Would this be theoretically possible or does the IMU rely on external fields like the earth magnetic field? Are there maybe alternatives to IMUs that are less susceptible to magnetic interferences? I only need the rotational data of the sensor and don't use translational output.&lt;/p&gt;&#xA;" OwnerUserId="14525" LastActivityDate="2018-01-09T06:34:49.173" Title="Shield IMU from magnetic interferences" Tags="&lt;sensors&gt;&lt;imu&gt;&lt;rotation&gt;" AnswerCount="5" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10526" PostTypeId="2" ParentId="10517" CreationDate="2016-08-23T14:39:31.647" Score="3" Body="&lt;p&gt;This type of question &quot;how much torque does my robot arm need&quot; has been answered many times on this site:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/9114/simple-equation-to-calculate-needed-motor-torque&quot;&gt;Simple equation to calculate needed motor torque&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/7091/design-and-construction-of-universal-robotic-arm-5kg-1m&quot;&gt;Design and construction of universal robotic arm (5kg, 1m)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/775/getting-started-with-robotic-arm-design/&quot;&gt;Getting started with robotic arm design&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/10056/choice-of-a-motor-for-robotic-arm&quot;&gt;Choice of a motor for robotic arm&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The equation for torque is pretty simple.  It is just force times moment arm length.  So the lift motor at the base of the arm will require: 4 kg * 1 m + 1 kg * 0.5 m = 4.5 kg m, or about 44 Nm.  The elbow motor will require 4 kg * 0.5 m + 0.5 kg * 0.25 m = 2.125 kg m, or about 21 Nm.&lt;/p&gt;&#xA;" OwnerUserId="110" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2016-08-23T14:39:31.647" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10527" PostTypeId="1" CreationDate="2016-08-23T16:56:00.743" Score="1" ViewCount="74" Body="&lt;p&gt;I'm currently designing an autonomous robotic system to manipulate clothes using computer vision and complex moving hardware. My current design incorporates quite a number of moving parts. My biggest worry is a frame (140 x 80 x 40 cm) rotates from 0 to 90 degrees every time it manipulates a piece of cloth. Other than this the design involves various other moving parts to achieve successful manipulation of the cloth. It seems like the hardware is capable of achieving the task despite the high number of complex and moving parts. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the question is, what are the design considerations I should take in designing an automated system. Should I think of a alternative design with less number of parts? Or proceed with the current design if it does the job&gt;? Sorry I am in a position where I can't disclose much information about the project. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you.   &lt;/p&gt;&#xA;" OwnerUserId="7278" LastActivityDate="2016-08-24T05:31:32.653" Title="Is it a bad-design decision to implement high number of moving parts in an automation-robot?" Tags="&lt;computer-vision&gt;&lt;automation&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10528" PostTypeId="2" ParentId="10523" CreationDate="2016-08-23T17:25:11.030" Score="5" Body="&lt;p&gt;Your problem is called localization. A simple approach would be to use a &lt;a href=&quot;https://en.wikipedia.org/wiki/Point_set_registration&quot; rel=&quot;noreferrer&quot;&gt;point set registration algorithm&lt;/a&gt; such as &lt;a href=&quot;https://en.wikipedia.org/wiki/Iterative_closest_point&quot; rel=&quot;noreferrer&quot;&gt;ICP&lt;/a&gt; with a map represented as a point cloud, where the real-world position of every point is known. To localize, you would then run the point set registration algorithm to find the best match for the LIDAR scan you just acquired in the map. The algorithm will return a 2D transform that will give you the position and orientation of your robot (strictly speaking your lidar, assuming it is at the origin of your point cloud).&lt;/p&gt;&#xA;" OwnerDisplayName="user12985" LastActivityDate="2016-08-23T17:25:11.030" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="10529" PostTypeId="2" ParentId="10527" CreationDate="2016-08-23T20:48:14.837" Score="3" Body="&lt;p&gt;Tough to say without knowing much about the project. More parts = more problems or potential points of failure. A simple design is typically better in that there are less things that can go wrong. If the precision you need can't be accomplished without the extra parts you may want to reconsider the design. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can you accomplish the same thing a simpler way? Will the parts need to be calibrated? Will downtime for repairs be a significant obstacle to the adoption of your device? If you are planning to bring it to mass market, how difficult will it be for someone to repair it? Can the machine self correct in the case of calibration. For true autonomy the machine should be able to make these adjustments as needed and if you are using quality parts and the system is engineered well these things become less of an obstacle. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Only you can answer these things.&lt;/p&gt;&#xA;" OwnerUserId="13204" LastActivityDate="2016-08-23T20:48:14.837" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10530" PostTypeId="2" ParentId="10527" CreationDate="2016-08-23T21:10:51.917" Score="2" Body="&lt;p&gt;“Art is the elimination of the unnecessary.” - Pablo Picasso&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many designs can meet the requirements you set. To prove it works is one phase. To optimize is another. What optimize means depends on your priorities&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you understand your requirements then specs, you should consider many design philosophy points like simplicity, modularity, flexibility. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would recommend The Art of Unix Philosophy as a set of koans, about what priorities you should consider. Even though it's software, it's same system modularity. Also, it's a free pdf.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mechanical systems now fail on lifetimes versus electronics every couple of years. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second, you can also consider how many COTS off the shelf parts versus designing your own. Why redesign a part if you can use one already? Can you reduce the number of parts by changing one into a common one with a second set of holes?  What about a common module? Lots of ways to make design better.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But before you design / redesign anything, ask yourself what is the value of the redesign? Should you do that now or wait till you understand your system better?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any more advice let me know. &lt;/p&gt;&#xA;" OwnerUserId="6804" LastActivityDate="2016-08-23T21:10:51.917" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10531" PostTypeId="2" ParentId="10505" CreationDate="2016-08-24T02:54:58.087" Score="1" Body="&lt;p&gt;You can plot the 2 and 3 σ gates around the means to see if it visually and intuitively makes sense.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have access to the raw data before it was filtered, you can calculate the residuals and follow &lt;a href=&quot;https://robotics.stackexchange.com/questions/6639/how-to-plot-pm-3-sigma-of-a-landmark-in-ekf-slam/6666&quot;&gt;how to plot $\pm 3 \sigma$ of a landmark in EKF-SLAM&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8859" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2016-08-24T02:54:58.087" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="10532" PostTypeId="2" ParentId="10527" CreationDate="2016-08-24T05:31:32.653" Score="2" Body="&lt;p&gt;&lt;em&gt;Simplicity is the greatest sophistication.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep the design simple to understand, implement, debug, and maintain. Do not have too many moving parts. First, start with a simple design and build more functionality on top of it.&lt;/p&gt;&#xA;" OwnerUserId="14531" LastActivityDate="2016-08-24T05:31:32.653" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10533" PostTypeId="1" AcceptedAnswerId="10538" CreationDate="2016-08-24T05:33:12.097" Score="-1" ViewCount="578" Body="&lt;p&gt;I want to make a simple Arduino based programmable insect robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want it to walk on legs and legs will be made of hard aluminum wire. It needs to have 4 legs. I am planning to use Arduino Nano for that. I just had few questions like:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;How to arrange servos and wire to have motion?&lt;/li&gt;&#xA;&lt;li&gt;I also want it to turn sideways?&lt;/li&gt;&#xA;&lt;li&gt;Where can I read good theory on making insect like robots?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="14531" LastEditorUserId="9176" LastEditDate="2016-08-26T09:23:58.400" LastActivityDate="2016-08-26T09:23:58.400" Title="How to make a simple Arduino Insect Robot?" Tags="&lt;arduino&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ClosedDate="2016-08-26T10:36:16.297" ContentLicense="CC BY-SA 3.0" />
  <row Id="10534" PostTypeId="2" ParentId="10525" CreationDate="2016-08-24T16:09:59.813" Score="3" Body="&lt;p&gt;Nope. Magnetometers measure the magnetic field. The field it's measuring is going to be the sum of fields from a variety of sources. The field you're interested in is the earth's. But it is not possible to separate the earth's nominal field from the field near an I-beam in your building. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can calibrate the magnetometer to remove any biases that are being picked up from your vehicle. Also, I would recommend twisting all wires that carry lots of current that run near the mag.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you aren't interested in heading, switching to an accelerometer would be a simple. You can measure gravity (+other accelerations) and pull out roll and pitch data. You could use a camera to track the environment though this may be overkill. If you are interested in keeping inertial heading and you want the solution to fit in a shoe box it's unlikely you'll be able to do better than a magnetometer. &lt;/p&gt;&#xA;" OwnerUserId="8842" LastActivityDate="2016-08-24T16:09:59.813" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10535" PostTypeId="2" ParentId="10525" CreationDate="2016-08-24T16:57:01.040" Score="1" Body="&lt;p&gt;I am not allowed to comment, so I answer, but it is not really an answer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also try to put your magnetometer as far as you can from your electrical motors.&lt;/p&gt;&#xA;" OwnerUserId="14524" LastActivityDate="2016-08-24T16:57:01.040" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10537" PostTypeId="1" AcceptedAnswerId="10670" CreationDate="2016-08-24T22:15:43.963" Score="5" ViewCount="999" Body="&lt;p&gt;I am currently trying to implement a GraphSLAM/SAM algorithm for LIDAR. From papers I've read, you generate a directed graph from expected LIDAR measurements to landmarks similar to the image below (taken from the Square Root SLAM Paper by Dellaert).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/qzmIS.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qzmIS.png&quot; alt=&quot;Smoothing and Mapping Dellaert&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However in practice the point clouds you obtain from LIDAR are similar to this (taken from the KITTI car collected dataset):&#xA;&lt;a href=&quot;https://i.stack.imgur.com/NnYra.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/NnYra.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems algorithms such as SIFT for 3D point clouds aren't as accurate yet. Is there a commonly used technique to efficiently find features in consecutive point clouds to find landmarks for SLAM algorithms without using &gt;30,000 points in a point cloud?&lt;/p&gt;&#xA;" OwnerUserId="4311" LastEditorUserId="4311" LastEditDate="2016-08-24T22:23:40.187" LastActivityDate="2016-09-16T14:10:59.077" Title="LIDAR Points as Landmarks" Tags="&lt;localization&gt;&lt;slam&gt;&lt;lidar&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10538" PostTypeId="2" ParentId="10533" CreationDate="2016-08-25T10:33:30.113" Score="1" Body="&lt;p&gt;&lt;strong&gt;Hardware&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ant like robots are called Hexapods (6 legs) and Quadruped (4 legs). Each leg has 2 servos as minimum, but most developer prefer 3 servos per leg. The problem is, that arduino boards have a limit how much servos they can drive. From hardware point-of-view it is important to hide the wires inside the robot so that the construction is clean and agile.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Software&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Motion primtives are used to program the servos. Every motion primitive is mapped onto a key at the Playstation Controller. Pressing A means &quot;move forward&quot;, pressing B means &quot;move backwards&quot;. The predefined trajektories are created with the animation software Blender. One axis is the timescale, the other axis is the value of the servo. The combination of these diagrams results into a smooth motion of the insect robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Advanced control strategies are possible but are less used by amateurs. An example for a software for controlling complex tasks is &lt;a href=&quot;https://www.youtube.com/watch?v=aDd-G8URCKM&quot; rel=&quot;nofollow&quot;&gt;PARADOCS&lt;/a&gt; It is not about a walking robot but about a quadcopter. A high-level planner based on a gantt chart is used to determine partial order plans.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2016-08-25T10:33:30.113" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10545" PostTypeId="2" ParentId="10132" CreationDate="2016-08-26T15:36:23.820" Score="2" Body="&lt;p&gt;Each EasyDriver takes two digital inputs - step and direction. These do not need any particular protocol so you can use any pin capable of digital output. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Arduino uno has 14 digital outputs and 6 analogue inputs which also can be configured as digital outputs, so you could drive up to ten of the boards from an Arduino without any other hardware. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just connect the two digital inputs for each board to two more digital pins of the Arduino, for example 8 and 9 for board four and 10 and 11 for board five. This leaves 0 and 1 clear for serial communications. &lt;/p&gt;&#xA;" OwnerUserId="1321" LastActivityDate="2016-08-26T15:36:23.820" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10547" PostTypeId="1" CreationDate="2016-08-27T00:27:36.257" Score="0" ViewCount="183" Body="&lt;p&gt;I am building a robot and I want to be able to hear sounds from it's environment (ideally from my laptop). What is the best way to get live audio from my robot's microphone to my computer?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have looked into a few solutions for hosting live audio streams using packages such as &lt;code&gt;darkice&lt;/code&gt; and &lt;code&gt;icecast&lt;/code&gt;. I'm just wondering about better solutions for robotic applications.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additional details:&#xA;- I have access to hardware such as Raspberry Pi, Arduino, etc.&lt;/p&gt;&#xA;" OwnerUserId="9874" LastActivityDate="2016-12-26T07:51:06.607" Title="How to get live audio from robot?" Tags="&lt;real-time&gt;&lt;digital-audio&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10548" PostTypeId="2" ParentId="10119" CreationDate="2016-08-27T08:21:54.610" Score="0" Body="&lt;p&gt;Classical modelling techniques like &quot;PID control&quot; are based on mathematical equations. That makes them difficult to implement. A better way for modelling heated compartment is to use object oriented design. An example for modelling a  &lt;a href=&quot;https://stackoverflow.com/questions/26938629/how-is-the-waittime-calculated-in-printer-simulation-python-program&quot;&gt;printer with python&lt;/a&gt; uses variables which represents the internal state and methods for statechange of the physical system. Its a little bit like designing a computer game.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It the simulation works, a solver is needed. The solver uses sampling techniques (brute-force-search) for reaching a given goal of the system. For example: if the object inside the heater should stay within a temperature range of 150 and 180 degree, the solver generates random inputs to the systems until some of them results into the given output range. A good example of how a naive physics engine works is given in the computergame &quot;The Sims&quot; where an oven can be &lt;a href=&quot;https://www.youtube.com/watch?v=SSzGnQcCLhM&quot; rel=&quot;nofollow noreferrer&quot;&gt;set on fire&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastEditorUserId="-1" LastEditDate="2017-05-23T12:37:11.430" LastActivityDate="2016-08-27T08:21:54.610" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10549" PostTypeId="1" AcceptedAnswerId="10576" CreationDate="2016-08-27T12:08:45.803" Score="3" ViewCount="1251" Body="&lt;p&gt;I am building a Pi car with 4 gear motors (190-250mAh each max). Now I want to use my 10000mAh USB power bank to power up raspberry pi along with the 4 gear motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can power up the raspberry pi directly but I want to use my power bank as the only source of power for the Pi Car. How can I connect both my RPi and motor controller L298N to my USB power bank?&lt;/p&gt;&#xA;" OwnerUserId="14554" LastEditorUserId="10596" LastEditDate="2016-09-04T02:01:56.393" LastActivityDate="2016-09-11T00:53:59.863" Title="Power solution for Raspberry Pi robot" Tags="&lt;motor&gt;&lt;raspberry-pi&gt;&lt;power&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10550" PostTypeId="2" ParentId="10549" CreationDate="2016-08-27T16:04:17.193" Score="0" Body="&lt;p&gt;Use a split USB cable.  Something like this should work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://shop.pimoroni.com/products/split-microb-usb-power-cable&quot; rel=&quot;nofollow&quot;&gt;https://shop.pimoroni.com/products/split-microb-usb-power-cable&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might need a breakout board to run your motors if your motor driver can't take a USB source directly for power. &lt;/p&gt;&#xA;" OwnerUserId="13204" LastActivityDate="2016-08-27T16:04:17.193" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10551" PostTypeId="2" ParentId="10547" CreationDate="2016-08-27T19:40:51.377" Score="1" Body="&lt;p&gt;Look into &lt;a href=&quot;http://georgielabs.net&quot; rel=&quot;nofollow&quot;&gt;soundwireserver&lt;/a&gt;. Its an easy way to setup an audio server on a Linux or windows  based system, and can be monitored from a laptop or an android phone. You need to consider processing overhead on a robot because of battery life, low processor speed etc. Its easy to setup and I know their android app works very well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A raspberry pi should have no problem running it, and you don't need excessive hardware other than a mic input. There's a ton of different ways to do this, but from the info provided you want to setup an audio server on the robot, and this is an easy way to do that.&lt;/p&gt;&#xA;" OwnerUserId="13204" LastActivityDate="2016-08-27T19:40:51.377" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="10552" PostTypeId="2" ParentId="10525" CreationDate="2016-08-28T10:44:02.273" Score="1" Body="&lt;p&gt;You can actually shield it with a magnetic shielding foils. You can try to search for them online. Also, try to position it as far away from ferrous metal like mild steel, any wires and motors which may cause interference.&lt;/p&gt;&#xA;" OwnerUserId="10691" LastActivityDate="2016-08-28T10:44:02.273" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10553" PostTypeId="2" ParentId="10492" CreationDate="2016-08-28T21:01:51.150" Score="0" Body="&lt;p&gt;Judging from the video, I suspect the reason this robot's motions appear jerky is mostly due to friction and backlash in the drivetrain. Manufacturing precise gears to transmit motor torque to the joints is very expensive and not something somebody is going to do for a hobbyist level robot. Of course if the joints are direct drive, then I've misinterpreted the video, but I suspect the drivetrain is the culprit here. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Improving the joint control might help things, but there are limits. Disturbances caused by these sorts of phenomena can sometimes be impossible to compensate for via more sophisticated control without adding additional sensors. The reason is that the encoders are almost always placed on the motor side of the transmission and artifacts like backlash are never seen by the motor encoder, making it impossible to correct via feedback. While some feed forward techniques might be able to compensate, they would not be robust to arbitrary payloads. &lt;/p&gt;&#xA;" OwnerUserId="13844" LastEditorUserId="13844" LastEditDate="2016-09-05T20:09:59.760" LastActivityDate="2016-09-05T20:09:59.760" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10554" PostTypeId="1" CreationDate="2016-08-29T08:06:29.323" Score="0" ViewCount="111" Body="&lt;p&gt;I want to create an amateur wire looping machine with Arduino, that has similar functionality than &lt;a href=&quot;https://www.youtube.com/watch?v=5xg7Z0KDzkg&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt; machine. I don't need the automatic wire feeding as for my purposes this part can be done manually. I just want to automate the wire loop creation process, assuming that I already have straight wires.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm new to the world of motors, robotics, etc., so please be as descriptive as possible :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the video, I can tell that there are two motors:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Makes the initial wire bending&lt;/li&gt;&#xA;&lt;li&gt;Spins to create the loop&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The wire that I will be working with is galvanized steel of 11 gauge (2.0 - 2.5 mm diameter).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what type of motors would be recommended for this application, taking into account:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;They need to be accurate in their positioning for repeat ability&lt;/li&gt;&#xA;&lt;li&gt;They need to have enough torque (specially the one that creates the loop itself) to work with this type of material&lt;/li&gt;&#xA;&lt;li&gt;They're as fast as (or close to) the ones in the video&lt;/li&gt;&#xA;&lt;li&gt;This is not going to be an industrial grade machine that will be running all the time&lt;/li&gt;&#xA;&lt;li&gt;Ideally, they need to be not that expensive.. I don't want to be bankrupt by the end of this project :)&lt;/li&gt;&#xA;&lt;li&gt;If links can be included for recommended products, it would be great.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="14569" LastActivityDate="2016-12-29T01:06:00.017" Title="What types of motor should I use for a particular application?" Tags="&lt;motor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10555" PostTypeId="1" AcceptedAnswerId="10557" CreationDate="2016-08-29T16:01:50.983" Score="0" ViewCount="264" Body="&lt;p&gt;i have &quot;TAROT ZYX-GS 3-Axis Gimbal Stabilization System ZYX13&quot; sensor that gives me the value of Roll tilt and Pan.The 3 axis accelerometer give me the value of x y and z.so can we use the Gimbal stabiliztion system in place of accelerometer&lt;a href=&quot;https://i.stack.imgur.com/9uUyU.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9uUyU.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10807" LastActivityDate="2016-08-30T13:35:26.097" Title="3 Axis Gimbal Stabilization System can replace with 3 Axis Accelerometer" Tags="&lt;quadcopter&gt;&lt;sensors&gt;&lt;accelerometer&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10556" PostTypeId="1" AcceptedAnswerId="10559" CreationDate="2016-08-29T16:10:32.750" Score="4" ViewCount="3658" Body="&lt;p&gt;I'm starting out with robotics, got my first DC gear motor with quadrature encoder (&lt;a href=&quot;https://www.pololu.com/product/2824&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.pololu.com/product/2824&lt;/a&gt;):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/sxUXp.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/sxUXp.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I ultimately plan to hook it up to a motor driver connected to a Tiva Launchpad. However, since I'm a noob, and curious, I am starting by just playing with it with my breadboard, oscilloscope, and voltage source. E.g., when I plug in the motor power lines into my (variable) voltage source the axis spins nicely as expected between 1 and 12 V.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problems start when I try to check how the encoder works. To do this, first I plug a a 5V source into the encoder GND/Vcc, and then try to monitor the encoder output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While the motor is running, I check the Yellow (encoder A output) cable (referencing it to the green (encoder GND) cable).  &lt;a href=&quot;https://youtu.be/uxve5Ou4Qqg&quot; rel=&quot;nofollow noreferrer&quot;&gt;I made a video&lt;/a&gt; that shows a representative output from one of the lines (no USB on my old oscilloscope so I took a video of it using my phone).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you would see at the video, the output doesn't look anything like the beautiful square waves you typically see in the documentation. Instead, it is an extremely degraded noisy sin wave (at the correct frequency for the encoder). The amplitude of the sin is not constant, but changes drastically over time. Strangely, sometimes it &quot;locks in&quot; and looks like the ideal square wave, for about a second or two, but then it gets all wonky again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both of the lines (encoder A and B output) act this way, and they act this way at the same time (e.g., they will both lock in and square up at the same time, for those brief glorious moments of clarity). Both of my motors are the same, so I don't think it's that I have a bad motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have also checked using Vcc=12V, but it made no difference other than changing the amplitude of the output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note I already posted this question at reddit:&#xA;&lt;a href=&quot;https://www.reddit.com/r/robotics/comments/502vjt/roboredditors_my_quadrature_encoder_output_is/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.reddit.com/r/robotics/comments/502vjt/roboredditors_my_quadrature_encoder_output_is/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13827" LastActivityDate="2019-01-08T12:01:34.803" Title="Quadrature encoder signal from dc motor is very noisy" Tags="&lt;motor&gt;&lt;quadrature-encoder&gt;" AnswerCount="2" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10557" PostTypeId="2" ParentId="10555" CreationDate="2016-08-30T13:21:53.173" Score="1" Body="&lt;p&gt;The 3-axis gimbal stabilization system internally combines a 3-axis gyroscope and 3-axis accelerometer. It outputs PWM signals necessary for maintaining an orientation.  The outputs are typically meant to drive RC servos.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This &lt;em&gt;might&lt;/em&gt; be enough for your use-case, but it is dependent on the details. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But generally, a gimbal stabilization system is not the same as accelerometer. An accelerometer operates at a lower level and provides x/y/z acceleration components at the measured instant in time only.  This gimbal system is outputting the corrections that would be needed to hold an orientation.  You might be able to derive acceleration from that to some extent, but that is not what it is intended for.&lt;/p&gt;&#xA;" OwnerUserId="167" LastEditorUserId="167" LastEditDate="2016-08-30T13:35:26.097" LastActivityDate="2016-08-30T13:35:26.097" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10558" PostTypeId="2" ParentId="10556" CreationDate="2016-08-30T13:34:02.157" Score="2" Body="&lt;p&gt;I followed the link to your Reddit post and, after checking the &lt;a href=&quot;https://www.pololu.com/product/2824&quot; rel=&quot;nofollow&quot;&gt;datasheet for your motor&lt;/a&gt;, I agree with what some people are saying there, but I'll expand their answers and hopefully give you some insight into what I think is happening.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.reddit.com/user/zevryn&quot; rel=&quot;nofollow&quot;&gt;/u/zevryn&lt;/a&gt; &lt;a href=&quot;https://www.reddit.com/r/robotics/comments/502vjt/roboredditors_my_quadrature_encoder_output_is/d71r82p&quot; rel=&quot;nofollow&quot;&gt;said&lt;/a&gt;,&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I hope this doesn't come off as mean since I'm not trying to be, but how good are you with the oscilloscope? I could see if the scope is configured wrong, it will not be displaying properly. &lt;strong&gt;If you have it set to trigger on one of the rising edges and have the sample frequency high enough to get multiple samples per square wave, they should all overlap and look nice and stable.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(Emphasis added)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.reddit.com/user/Ttimoffi&quot; rel=&quot;nofollow&quot;&gt;/u/Ttimoffi&lt;/a&gt; &lt;a href=&quot;https://www.reddit.com/r/robotics/comments/502vjt/roboredditors_my_quadrature_encoder_output_is/d71hgbs&quot; rel=&quot;nofollow&quot;&gt;said&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I think u have to read it at a frequency specified on the encoder data sheet.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I think what is happening, that the others are commenting on, is that you are not sampling the output at a high enough frequency. You haven't commented as to what the motor speed is when you monitor the encoder output, but let's assume it's the full unloaded output speed of 200rpm. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The encoder is setup to output 3,200 counts per revolution of the output shaft. At 200rpm, that means you're getting $(200*3200) = 640,000 \mbox{ counts/min}$ which is equivalent to $10.6 \mbox{ kHz}$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As explained in &lt;a href=&quot;https://www.youtube.com/watch?v=yJqseTIWwVY&amp;amp;t=5m50s&quot; rel=&quot;nofollow&quot;&gt;this video on aliasing&lt;/a&gt;, when you under-sample a signal you get false signals - signals that, as far as your instruments are concerned, are real but don't actually exist. They &quot;appear&quot; because of instrument inadequacies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, as explained in &lt;a href=&quot;https://www.youtube.com/watch?v=uWADu0aKk0w&amp;amp;t=2m10s&quot; rel=&quot;nofollow&quot;&gt;this video on oscilloscope sampling rates&lt;/a&gt;, the person says, &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Note by the way also the trigger is not working. This is maybe your first clue if you're playing with your scope and you can't get it to trigger right, &quot;What's going on here, why isn't it triggering correctly?&quot; It's triggering on the aliased signal.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Your video is very blurry, so it's very hard to read what anything is set to on your scope, but it kinda looks like, at the bottom, it says, &quot;&amp;lt;10Hz&quot;. Also, at the top, it looks like it says, &quot;M Pos: 270.0ms&quot;. This all makes it seem like your scope is set &lt;em&gt;way&lt;/em&gt; too slow to be able to see the signal correctly. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;At 10.6 kHz, the signal period is (1/10666) = 0.000094 seconds, or 94$\mu$s. An oscilloscope setting of 100$\mu$s per division should get the actual signal when the motor is at full speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;tl;dr - Set the scope to 100$\mu$s per division. You're reading an aliased signal, not the real signal, which is why it keeps jumping around like that. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-08-30T13:34:02.157" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="10559" PostTypeId="2" ParentId="10556" CreationDate="2016-08-30T22:52:40.827" Score="5" Body="&lt;p&gt;Conceptually everything was set up correctly, but a number of basic mistakes affected the signal. Here is the set-up which should be used to record the signal from one of the encoder outputs:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/c8sba.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/c8sba.png&quot; alt=&quot;connecting a scope to an encoder via encoder ground and encoder output&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A set up like this should result in a a clean signal if your motor/encoder is not broken. Once it's up and running, seeing the signal is simple. It's as easy as checking the square wave coming off of any common function generator: fiddle with your oscilloscope until it looks good (or just hit autoset and any good oscilloscope will do it for you, or &lt;a href=&quot;https://robotics.stackexchange.com/a/10558&quot;&gt;read the excellent answer by Chuck for more help on that&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The underlying problems seem to stem from an accumulation of rust when it comes to dealing with real, wire and breadboard, electronics projects:    &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The top/bottom breadboard power rails are typically separated, so you cannot assume continuity between them. Always keep a multimeter handy and do simple continuity tests before doing deeper troubleshooting. When stuff's busted, never assume continuity. &lt;em&gt;Test&lt;/em&gt; for continuity.&lt;/li&gt;&#xA;&lt;li&gt;Be careful not to confuse motor ground with encoder ground, motor ground is likely to be electrically very noisy,m which will corrupt your encoder signal.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="13827" LastEditorUserId="37" LastEditDate="2019-01-08T12:01:34.803" LastActivityDate="2019-01-08T12:01:34.803" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="10560" PostTypeId="2" ParentId="10554" CreationDate="2016-08-30T23:03:00.200" Score="1" Body="&lt;p&gt;Not enough info to go on to recommend a specific set of motors, but some info to steer you in the right direction. Without a schematic or set of plans to go on I can only suggest some ideas. So here it goes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Figure out the required torque for bending and twisting the wire, as well as holding it in place while it twists. I would recommend servo motors, they are fast, strong, and can be dialed in pretty precisely using a microcontroller and a feedback loop. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next consider the amount of weight the motors will be moving, include tooling and materials. Select your motors based on these calculations and add in 25% extra at a minimum just a margin of error in your calculations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is your system going to use DC or AC?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Look online for industrial servo motors. That should get you started. You have a lot of planning to do before you pick motors.&lt;/p&gt;&#xA;" OwnerUserId="13204" LastActivityDate="2016-08-30T23:03:00.200" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10561" PostTypeId="1" AcceptedAnswerId="10575" CreationDate="2016-08-31T05:35:15.790" Score="3" ViewCount="55" Body="&lt;p&gt;i have 3d gimbal system and i want to use this sensor in place of IMU(3 axsis accelerometer) in Quadcopter &lt;/p&gt;&#xA;" OwnerUserId="10807" LastActivityDate="2016-09-01T18:20:29.970" Title="Can I use a 3D gimbal system as a simplistic quadcopter IMU(3 axis accelerometer)?" Tags="&lt;quadcopter&gt;&lt;accelerometer&gt;&lt;gyroscope&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10562" PostTypeId="1" AcceptedAnswerId="10566" CreationDate="2016-08-31T09:10:05.353" Score="2" ViewCount="232" Body="&lt;p&gt;For this robot the gear attached to the motor is linked to the gear attached to the wheels by a bicycle chain (I am using a bicycle wheel and transmission set as the parts for the robots movements).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How does using a bicycle chain affect the power transmission efficiency, how does this impact the torque?&lt;/p&gt;&#xA;" OwnerUserId="14588" LastEditorUserId="14588" LastEditDate="2016-09-01T07:46:41.780" LastActivityDate="2016-09-01T07:46:41.780" Title="What is the torque transmission efficiency using a bycicle chain/setup for robot?" Tags="&lt;mobile-robot&gt;&lt;torque&gt;&lt;gearing&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10563" PostTypeId="2" ParentId="10525" CreationDate="2016-08-31T12:06:51.310" Score="0" Body="&lt;p&gt;The short answer, as the others already commented is no for external (buildings) or dynamic (moving magnet on your robot) influences.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One technique we used to account for the buildings is to estimate the building-induced bias in the position filter, based on the idea that the bias would change &quot;slowly&quot; w.r.t. the travel of the system (i.e. within meters, not centimeters).&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2016-08-31T12:06:51.310" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10564" PostTypeId="2" ParentId="10371" CreationDate="2016-08-31T12:32:33.997" Score="2" Body="&lt;p&gt;Till now this is the easiest SLAM implementation that I've found.&#xA;It works pretty well, however, there is a lot of room for improvement using the same principle used in the original code online.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;1- Wasn't the SLAM supposed to store and keep the boundaries for the first room it discovered?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2- Why this rotation may be happening?&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the implementation you have I would say it failed match the new scan to the already constructed map (there are lots of reasons for this problem)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3- How could I try to troubleshoot this issue with the data I have collected (odometry, calculated position, liDAR scans)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;it depends what hardware you are using. If you are correctly acquiring the Hukuyo scans the algorithm should work even if you have some errors from odometry or IMU, unless, the errors are too large (eg instead of calculating 5cm using odometry you get  100, 200 or 500 for example)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IMU and odometry can help a lot however in the algorithm you are using you can just use the LIDAR, thus the priority is to check your LIDAR scans.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;4-Can I tune SLAM to do a better job for my robot?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, you can also rewrite it to include lots of optimizations adapted to the robotic platform you are using.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2- Why this rotation may be happening?&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Try to decrease the maximum rotation speed of your robot&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't explain the whole algorithm in this post, and as I've previously said there are lots of other reasons, study the theory + read the code to understand what's going on, good luck&lt;/p&gt;&#xA;" OwnerUserId="14590" LastEditorUserId="14590" LastEditDate="2016-08-31T22:52:06.137" LastActivityDate="2016-08-31T22:52:06.137" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10565" PostTypeId="2" ParentId="10562" CreationDate="2016-08-31T12:33:10.700" Score="2" Body="&lt;p&gt;From a cyclists' perspective - a good modern bike chain transmission is very efficient - percentage efficiency is somewhere in the high 90s and has been for decades.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(From anecdotal evidence: endless debates in cycling over the years, about various inventors attempting to &quot;improve&quot; the design of the bike with belts/pulleys, conventional gears, even things like propshafts etc. Such alternative designs sometimes have useful features, but they haven't significantly improved overall on the strength, efficiency and light weight of the modern chain &amp;amp; sprocket.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as application to robotics is concerned - it will help to make sure everything is mounted well, not in a flexible way so things cannot deflect under load, and the gears and chain are kept in a reasonably straight line. These are the way bike components are mounted too.&lt;/p&gt;&#xA;" OwnerUserId="9578" LastActivityDate="2016-08-31T12:33:10.700" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10566" PostTypeId="2" ParentId="10562" CreationDate="2016-08-31T13:16:30.150" Score="3" Body="&lt;p&gt;I agree with @Andy 's answer, that chain efficiency is &lt;a href=&quot;http://www.cyclingpowerlab.com/DrivetrainEfficiency.aspx&quot; rel=&quot;nofollow&quot;&gt;over 90%&lt;/a&gt;. I'll point out that your terminology is not quite right - using bicycle chain (or any other transmission) affects &lt;em&gt;power&lt;/em&gt; transmission efficiency. It's a subtle but significant difference between what you said (&lt;em&gt;torque&lt;/em&gt; transmission efficiency). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, efficiency is defined as the ratio of output to input. With gearing, you could use a very inefficient transmission and still have a larger output torque than input torque. This would imply that your &quot;torque transmission efficiency&quot; is greater than one. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second, in the case of zero/stall speed on the drive, the torque output should be nearly the same as the input torque.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both of these cases are covered when you talk about &lt;em&gt;power&lt;/em&gt; transmission efficiency.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-08-31T13:16:30.150" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="10567" PostTypeId="1" CreationDate="2016-08-31T16:59:24.060" Score="0" ViewCount="3221" Body="&lt;p&gt;I came across robotics library (RL), but quite unclear about its real purpose. Is it a FK/IK solver library or simply an graphical simulator?. RL has poor documentation, so its not clear how to use it. Im looking for some C++ library where there APIs to solve FK/IF analytically. Thank you.&lt;/p&gt;&#xA;" OwnerUserId="7278" LastEditorUserId="10748" LastEditDate="2017-03-31T18:07:18.343" LastActivityDate="2020-08-18T13:06:02.033" Title="Is there any C++ library I could use to program a robotic manipulator involving forward and inverse kinematics?" Tags="&lt;inverse-kinematics&gt;&lt;c++&gt;&lt;forward-kinematics&gt;&lt;robotics-library&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="10568" PostTypeId="1" AcceptedAnswerId="10603" CreationDate="2016-08-31T21:08:55.203" Score="4" ViewCount="894" Body="&lt;p&gt;I have a particular example robot that interests me:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.scmp.com/tech/innovation/article/1829834/foxconns-foxbot-army-close-hitting-chinese-market-track-meet-30-cent&quot; rel=&quot;noreferrer&quot;&gt;http://www.scmp.com/tech/innovation/article/1829834/foxconns-foxbot-army-close-hitting-chinese-market-track-meet-30-cent&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See first image, the bigger robot on the left, in particular the shoulder pitch joint that would support the most weight. I'm curious because I know it's really hard to balance strength and precision in these types of robots, and want to know how close a hobbyist could get.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would they be something similar to this: rotary tables w/ worm gears?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.velmex.com/products/Rotary_Tables/Motorized-Rotary-Tables.html&quot; rel=&quot;noreferrer&quot;&gt;http://www.velmex.com/products/Rotary_Tables/Motorized-Rotary-Tables.html&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking for more actuation schemes to research, thanks!&lt;/p&gt;&#xA;" OwnerUserId="6858" LastActivityDate="2016-09-06T17:00:52.013" Title="What types of actuators do these industrial bots use?" Tags="&lt;motor&gt;&lt;robotic-arm&gt;&lt;actuator&gt;&lt;torque&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="10569" PostTypeId="2" ParentId="5193" CreationDate="2016-09-01T13:14:01.400" Score="0" Body="&lt;p&gt;As kamek said, you can do mapping without localization.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and it would be much easier if you have the locations and you just need to build a map.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;note: dead reckoning alone is divergent even if you have very good models, however, its use in conjunction with other sensors is very helpful&lt;/p&gt;&#xA;" OwnerUserId="14590" LastActivityDate="2016-09-01T13:14:01.400" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10570" PostTypeId="2" ParentId="1949" CreationDate="2016-09-01T13:24:10.710" Score="-1" Body="&lt;p&gt;The EKF principles have been well explained in the other replies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to add that you can do SLAM without using Odometry, i.e only using a LIDAR for example.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;Also, are all SLAM algorithms feature-based?&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;No not all of course&lt;/p&gt;&#xA;" OwnerUserId="14590" LastActivityDate="2016-09-01T13:24:10.710" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10571" PostTypeId="2" ParentId="10523" CreationDate="2016-09-01T13:38:02.290" Score="2" Body="&lt;p&gt;1- Of course you don't have perfect matches&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2- ICP is not used for localization, it is used to calculate the transformation  the robot's pose has undergone (T+R)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3- To localize your robot, you would have to use a particle filter as lucab has said&lt;/p&gt;&#xA;" OwnerUserId="14590" LastActivityDate="2016-09-01T13:38:02.290" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10572" PostTypeId="2" ParentId="10334" CreationDate="2016-09-01T15:08:22.503" Score="1" Body="&lt;p&gt;&quot;I want it to be able to &lt;strong&gt;map out a room&lt;/strong&gt; and navigate to a point for example.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;to map the room you need to localize the robot (thus you have to implement SLAM algorithm), unless you have a mean of recuperating the position of the robot (localizing it)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Navigation is another problem, I suggest you start working on the SLAM problem to map the environment later on you could tackle the navigation problem&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot; My problem is that the robot doesn't have any distance sensors.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;you don't necessarily need a distance sensor (LIDAR for example), you can use a web cam and implement a kind of SLAM known as monocular SLAM&lt;/p&gt;&#xA;" OwnerUserId="14590" LastActivityDate="2016-09-01T15:08:22.503" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10573" PostTypeId="1" CreationDate="2016-09-01T15:08:24.963" Score="1" ViewCount="137" Body="&lt;p&gt;I have thought of a technique to increase the resolution of a POV (persistence of vision) display. In an usual POV display, the LEDs are arranged in a strip and spun in a circle. There are two limiting factors to increasing the radial resolution along the circumference of any one circular path that an LED follows. One is, depending on the speed of the POV wheel, the minimum time required (decided by the microcontroller) to change the LED's color in case of a RGB. The other factor is the LED's width, that increases the 'bleeding' of color from one pixel to the neighboring pixel if the LED changes color or brightness too fast. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If one were to fix a slit in the front of an LED, |*|  &amp;lt;-- like so, would this help improve the resolution of the POV display; by doing this one would in effect be reducing the width of the 'pixel' along the circumference on which the led would be traversing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus if one were to use a fast enough microcontroller and a narrow enough slit, one could probably obtain a very high resolution along one dimension at least.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To be clear I've not yet implemented this, and am just looking for any experienced person who can tell if this will work or not.&lt;/p&gt;&#xA;" OwnerUserId="13574" LastActivityDate="2016-09-01T15:08:24.963" Title="Technique to increase POV resolution" Tags="&lt;microcontroller&gt;&lt;electronics&gt;" AnswerCount="0" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="10574" PostTypeId="2" ParentId="3139" CreationDate="2016-09-01T16:08:29.287" Score="2" Body="&lt;p&gt;This is Best Youtube video which gives thorough explanation of &lt;strong&gt;Denavit Hartenberg Algorithm and Parameters&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=jXvAC7Uowvw&amp;amp;index=6&amp;amp;list=PLJzZfbLAMTelwaLxFXteeblbY2ytU2AxX&quot; rel=&quot;nofollow&quot;&gt;Forward Kinematics: Denavit-Hartenberg Convention&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Following is youtube channel by Prof. Yang Cao from University of British Columbia which covers all topics in Advanced Robotics. This is best place for learning robotics concepts for &lt;strong&gt;Robotics Engineering.&lt;/strong&gt;   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/playlist?list=PLJzZfbLAMTelwaLxFXteeblbY2ytU2AxX&quot; rel=&quot;nofollow&quot;&gt;Robot Modeling and Control&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Check it out.&lt;/p&gt;&#xA;" OwnerUserId="14603" LastEditorUserId="14603" LastEditDate="2016-09-01T16:18:14.610" LastActivityDate="2016-09-01T16:18:14.610" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10575" PostTypeId="2" ParentId="10561" CreationDate="2016-09-01T18:20:29.970" Score="3" Body="&lt;p&gt;A gimbal system will not replace an accelerometer. I assume by gimbal system you mean something like a &lt;a href=&quot;https://en.wikipedia.org/wiki/Gyroscope&quot; rel=&quot;nofollow&quot;&gt;Gyroscope&lt;/a&gt;, i.e. a device that has a fixed orientation allowing you to measure your orientation relative to it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A gyroscope can give you information on orientation and possibly angular velocity. An accelerometer gives you information on acceleration/gravity. Since the accelerometer can identify the direction of gravity using a couple simple assumptions, you can also use it to estimate your orientation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Final answer: a gimbal/gyroscope can replace an accelerometer for the purposes of calculating the orientation of a device/quadcopter, a gimbal cannot replace the full functionality of an accelerometer.&lt;/p&gt;&#xA;" OwnerUserId="13878" LastActivityDate="2016-09-01T18:20:29.970" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10576" PostTypeId="2" ParentId="10549" CreationDate="2016-09-01T21:11:17.653" Score="1" Body="&lt;p&gt;I'm actually in your exact situation, and have decided to do the following:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I got a power bank with &lt;em&gt;two USB outputs&lt;/em&gt;. I intend to connect the first output directly into the raspberry Pi, and then connect the second output to a breadboard to power the motors.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;              USB 1 -&amp;gt; Raspberry pi&#xA;             / &#xA;   Power Bank&#xA;             \&#xA;              USB 2 -&amp;gt; Breadboard -&amp;gt; Motors&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;However, if my power bank just had &lt;em&gt;one USB output&lt;/em&gt;, I would have connected it to the breadboard and powered the pi from there as well (through the 5V pin on the PI, I believe):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;                                     Raspberry Pi&#xA;                                    /&#xA;    Power Bank -&amp;gt; USB -&amp;gt; Breadboard&#xA;                                    \&#xA;                                     Motors&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;PS: Remember to connect the grounds&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to connect the USB to the breadboard, I will either cut open an old USB cable and solder the power wires to the board from directly, or look online for something premade that does this neatly for me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;PPS: I haven't tested this yet, so do it at your own risk :)&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="2347" LastActivityDate="2016-09-01T21:11:17.653" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10577" PostTypeId="2" ParentId="10567" CreationDate="2016-09-02T00:52:51.547" Score="2" Body="&lt;p&gt;I haven't used it personally (yet; it's only a matter of time), but I believe the &lt;a href=&quot;https://rbdl.github.io/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Rigid Body Dynamics Library&lt;/a&gt; is what you're looking for - efficient forward and inverse kinematics.&lt;/p&gt;&#xA;&lt;p&gt;I did a lot of work with the underlying math behind that library, and even wound up (creating my account here to) asking a couple questions about it, one of which was answered by the guy that wrote that library. I'll warn you - the math isn't for the faint of heart, but I believe that, like with a lot of things, you don't really need to understand all the underlying math to understand how to apply something.&lt;/p&gt;&#xA;&lt;p&gt;Give it a shot, and feel free to ask if you have any questions!&lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="26965" LastEditDate="2020-08-18T13:06:02.033" LastActivityDate="2020-08-18T13:06:02.033" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="10578" PostTypeId="2" ParentId="10567" CreationDate="2016-09-02T08:38:39.723" Score="4" Body="&lt;ol&gt;&#xA;&lt;li&gt;The best way to understand forward and inverse kinematics is to write a library for its own. A good starting point is to implement &lt;a href=&quot;http://www.ryanjuckett.com/programming/cyclic-coordinate-descent-in-2d/&quot; rel=&quot;nofollow&quot;&gt;Cyclic Coordinate Descent&lt;/a&gt;. &lt;/li&gt;&#xA;&lt;li&gt;So called &quot;ready-to-run&quot; librarys like OpenRave or OMPL have an extensive C++ tutorial section too but are notorius difficult to install. Most of them only run under linux, and are not even part of Ubuntu's package manager.&lt;/li&gt;&#xA;&lt;li&gt;And a short informal note: C++ is not a high-level-language, especially not in scientific environment.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2016-09-02T08:38:39.723" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="10579" PostTypeId="2" ParentId="6772" CreationDate="2016-09-02T14:15:00.653" Score="0" Body="&lt;p&gt;The crazyflie comes ready to use with their iPhone and Android App, no extra components required. But the idea is that you can develop and make changes so if you wanted (depending on the precise outline of your project) you could use it for your project but program it yourself to do something in addition to the out of the box functionality, or add extra hardware like the LED component to perform some form of light show as you fly it, or automate some flight instructions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is worth noting that the source code for the app's are also available.&lt;/p&gt;&#xA;" OwnerUserId="14613" LastActivityDate="2016-09-02T14:15:00.653" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10584" PostTypeId="1" CreationDate="2016-09-04T03:12:58.100" Score="0" ViewCount="233" Body="&lt;p&gt;Hey so I am trying to research into SWARM robotics, and trying to find helpful information or even articles/papers to read on the process of setting up communication protocols between different robots. For instance using a LAN connection, does each robot need to have a wireless adapter, and how would I begin setting up a network for say 5-10 smaller robots?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More generally could someone help me understand how devices connect and communicate across networks? I understand the basics of IP addressing, but I haven't researched into further complexities.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any advice or direction is appreciated.&lt;/p&gt;&#xA;" OwnerUserId="14627" LastActivityDate="2016-09-05T00:13:32.620" Title="Communication in SWARM robotics" Tags="&lt;wireless&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2016-09-05T13:51:15.227" ContentLicense="CC BY-SA 3.0" />
  <row Id="10587" PostTypeId="1" CreationDate="2016-09-04T20:58:32.650" Score="1" ViewCount="52" Body="&lt;p&gt;I am trying to build a robot. But a bigger robot than a Raspberry Pi connected to some tiny something as big as a can of black Coke. I am planning to build a robot of a size 1.2-1.5m. I already have chosen some torso, arms and so, but, the problem is the base (bigger wheels, able to cope with weight of 10kg minimum).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was thinking about using iRobot Create 2 platform, but it is not that robust and cannot pass a bit higher doorsteps. I want it let it go outdoors eventually. Do you know of some product or similar project? Every base which is sold in shop is very small, which can be used on a table and not something which could serve as a good robust mechanism with wheels, servos and everything...&lt;/p&gt;&#xA;" OwnerUserId="14635" LastActivityDate="2016-09-05T08:24:59.647" Title="Base for home robot of a bigger size" Tags="&lt;wheeled-robot&gt;" AnswerCount="1" CommentCount="4" ClosedDate="2016-09-05T14:05:52.377" ContentLicense="CC BY-SA 3.0" />
  <row Id="10589" PostTypeId="2" ParentId="10584" CreationDate="2016-09-05T00:13:32.620" Score="1" Body="&lt;p&gt;While there are some tricks specific to SWARM and other multi-robot systems communications, it sounds like you need more learning of the basics before any of that would be useful to you. It sounds like you are using 802.11 (or maybe Zigbee based on your other questions). For these, there are lots of good (non robotics) resources for learning basic networking out there if you look for them that will be more useful than any answer you get here. &lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2016-09-05T00:13:32.620" CommentCount="0" CommunityOwnedDate="2016-09-05T00:13:32.620" ContentLicense="CC BY-SA 3.0" />
  <row Id="10591" PostTypeId="2" ParentId="10587" CreationDate="2016-09-05T08:24:59.647" Score="0" Body="&lt;p&gt;Check this one: &lt;a href=&quot;https://www.dfrobot.com/index.php?route=product/product&amp;amp;product_id=63&quot; rel=&quot;nofollow&quot;&gt;https://www.dfrobot.com/index.php?route=product/product&amp;amp;product_id=63&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's more expensive than iRobot, but is much more customizable.&lt;/p&gt;&#xA;" OwnerUserId="14513" LastActivityDate="2016-09-05T08:24:59.647" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="10592" PostTypeId="2" ParentId="8421" CreationDate="2016-09-05T14:46:15.613" Score="0" Body="&lt;p&gt;The same thing happens to me. When i connect my motor it works for the first time and after that it stop working. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally i figured out my breadboard was faulty. It may not be your case but do one thing connect all the wire by hand by pressing your finger tip and see what happens. &lt;/p&gt;&#xA;" OwnerUserId="14554" LastActivityDate="2016-09-05T14:46:15.613" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10595" PostTypeId="1" AcceptedAnswerId="10597" CreationDate="2016-09-05T19:03:48.227" Score="0" ViewCount="735" Body="&lt;p&gt;I'm new to robotics (and maybe it's not even robotics), and want to build a &quot;pushing mechanism&quot; to automatically push a &quot;pop up stick&quot; up from my kitchen bench (see product here: &lt;a href=&quot;http://www.evoline.no/produkter/port/&quot; rel=&quot;nofollow&quot;&gt;http://www.evoline.no/produkter/port/&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By design, the &quot;pop up stick&quot; is made to be dragged up by hand, but I want to install a mechanism under the bench, to do it by a trigger of some kind.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm a programmer, and I have some experience with Raspberry Pi. Does anybody have any hints of what products I could use to build this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks :)&lt;/p&gt;&#xA;" OwnerUserId="14647" LastActivityDate="2016-09-06T02:48:29.837" Title="Need a pushing mechanism" Tags="&lt;robotic-arm&gt;&lt;microcontroller&gt;&lt;raspberry-pi&gt;&lt;industrial-robot&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10596" PostTypeId="2" ParentId="10568" CreationDate="2016-09-05T20:08:03.100" Score="3" Body="&lt;p&gt;A robot like the one you refer to probably has a mix of transmission types that increase in power-to-weight ratio and decrease in size and stiffness as you move outwards on the kinematic chain. The base joints likely have planetary or cycloidal gearing, with maybe some spur gears in the middle, and maybe a harmonic drive reducer at the end effector. I don't think worm gears are typically used with these sorts of revolute joints, unless there's maybe some special, application-specific tool on the end.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to build a hobbyist robot that does some cool stuff, I'd stick with spur gears and planetary gears while you wade through the dozens of other difficulties in designing serial-link manipulators.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, if you're looking to research interesting actuation schemes that maximize power-to-weight ratio and precision in a robotic joint, then harmonic drives are worth looking into. What you gain in compact size, power-to-weight ratio, and precision, you pay for in joint stiffness and friction losses, so your robot won't get snappy accelerations on the joints that use harmonic drives if that's something you're looking for. A serial chain that uses entirely harmonic drives will need to move pretty slowly to keep resonance under control. You can check out Rethink Robotics's Youtube videos to see what I'm talking about - I suspect they uses HDs on most if not all joints. Harmonic drives are also very difficult to assemble, since the gearing needs to be pre-strained, so they tend to cost a lot more. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope that answers your question. Good luck.&lt;/p&gt;&#xA;" OwnerUserId="13844" LastActivityDate="2016-09-05T20:08:03.100" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10597" PostTypeId="2" ParentId="10595" CreationDate="2016-09-05T23:45:57.113" Score="2" Body="&lt;p&gt;You could use a &lt;a href=&quot;https://en.m.wikipedia.org/wiki/Rack_and_pinion&quot; rel=&quot;nofollow&quot;&gt;rack and pinion&lt;/a&gt; as a linear actuator. A simple way of knowing when to stop turning the motor could be a contract sensor/button at the upper and lower position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could also add something to compensate for gravity, like a spring or a counter weight, such that it does not fall down under its own weight (or also use &quot;high&quot; friction as used in the linked product, which will as require more force from the motor).&lt;/p&gt;&#xA;" OwnerUserId="1487" LastActivityDate="2016-09-05T23:45:57.113" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10598" PostTypeId="2" ParentId="10595" CreationDate="2016-09-06T02:48:29.837" Score="1" Body="&lt;p&gt;Low cost (a relative term) linear actuators are available. [Here is one source] of many&lt;a href=&quot;http://www.robotshop.com/en/actuators.html&quot; rel=&quot;nofollow&quot;&gt;1&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typically you need two parts, the actuator and the driving electronics (also called a motor driver, motor controller, or motor amplifier). The Pi will talk to the driver which will then make the actuator move.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2016-09-06T02:48:29.837" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10599" PostTypeId="1" AcceptedAnswerId="10600" CreationDate="2016-09-06T03:11:44.057" Score="0" ViewCount="40" Body="&lt;p&gt;At the moment this project is purely hypothetical but my friend and I were looking to make a model airplane which could stabilize its flight to be a straight line. Basically, we want there to a button on the controller or a separate transmitter which, when activated, would cause the plane to fly in a straight, horizontal line in whichever direction it was facing. The instrumentation we believe we would need is a three axis accelerometer, so that it can level the plane to fly horizontally with the ground and keep the roll and yaw steady. My question is, would this work? When I talked it over with my dad (who does a lot of this kind of thing) he suggested that we might need a Kalman filter to keep the instrumentation from gradually drifting off course but, being a high school student, that sounds a little intimidating. Any comments on feasibility or improvements would be greatly appreciated.&lt;/p&gt;&#xA;" OwnerUserId="14567" LastActivityDate="2016-09-06T04:12:12.287" Title="Auto Stabilising Flight" Tags="&lt;kalman-filter&gt;&lt;automation&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10600" PostTypeId="2" ParentId="10599" CreationDate="2016-09-06T04:12:12.287" Score="2" Body="&lt;p&gt;1- it would be better if you use a 9 DOF IMU (gyro, accelerometer, compass) and fuse the data to get a better estimate of the state of your model airplane&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2- Then I would suggest that you study what is a PID controller so that you could control the variable of interest&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3- The kalman filter your dad mentioned would be used to fuse the data of the IMU (point 1), it is indispensable as it would improve the state estimate &lt;/p&gt;&#xA;&#xA;&lt;p&gt;4- You could start without the kalman filter with a model that is not very stable and gradually improve it to employ a kalman filter (later you could even delve into particle filters)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;5- It requires some work, as flight control is a bit tricky, but I think with some research you can do it (even though it is a little bit more advanced than high school level)&lt;/p&gt;&#xA;" OwnerUserId="14590" LastActivityDate="2016-09-06T04:12:12.287" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="10601" PostTypeId="2" ParentId="10568" CreationDate="2016-09-06T04:40:54.997" Score="1" Body="&lt;p&gt;&quot;&lt;strong&gt;Would they be something similar to this: rotary tables w/ worm gears?&lt;/strong&gt;&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The used mechanisms would vary based on the size of the robotic arm and the application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There would be plenty of gears used (spur gears, transmission belts, harmonic gears, etc.), depending on the size of the robotic arm and the application (big traditional industrial arm, cobot arm, small pick-n-place, etc.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Concerning hobbyist versions, one of the main constraints is size (considering that the hobbyist is willing to pay for his robotic prototype), which would limit the design choices available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How near hobbyist ones would get depends on what suppliers (hobbyist suppliers) would provide in the near future, because it is infeasible to custom make every single component.&lt;/p&gt;&#xA;" OwnerUserId="14590" LastActivityDate="2016-09-06T04:40:54.997" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10602" PostTypeId="1" AcceptedAnswerId="10605" CreationDate="2016-09-06T05:27:12.420" Score="1" ViewCount="629" Body="&lt;p&gt;I had to make a &lt;strong&gt;Unity3D&lt;/strong&gt; robot model(ABB IRB 1600-6R/6DOF), that given a desired end effector transformation matrix, it would calculate and rotate the robot joints to the appropriate angles(&lt;strong&gt;Inverse Kinematics Computation&lt;/strong&gt;). I found some code in Robotics Toolbox for &lt;strong&gt;MATLAB&lt;/strong&gt; that, lets say that you trust me, actually calculates the needed angles(its the &lt;em&gt;general&lt;/em&gt; &quot;offset&quot; case in ikine6s.m) - &lt;em&gt;but for a different zero angle position than my chosen one, which is corrected using  the appropriate offsets&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, I have set my 3D robot model in Unity3D correctly, angles are correct, I give the same parameters in Robotics Toolbox in &lt;strong&gt;MATLAB&lt;/strong&gt; and the results are the same, I plot the robot stance in &lt;strong&gt;MATLAB&lt;/strong&gt; to see it-it's on position-, I then run the code in &lt;strong&gt;Unity3D&lt;/strong&gt; and the robot model seems to move to the stance I saw in &lt;strong&gt;MATLAB&lt;/strong&gt; but it is off position- the end effector is away from its desired position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Am I missing something?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The scaling is correct. I have subtracted a translation (equal to the distance of the bottom of the model's base contact to the &lt;strong&gt;floor&lt;/strong&gt;, to the &lt;strong&gt;start&lt;/strong&gt; of the next link- as MATLAB doesnt calculate it) from the Y component of the desired position of the end effector(in its homogenous transformation matrix I use as the rotation part, the identity matrix, so we do not care about that part).&#xA;Here are some pictures showing my case(say &lt;strong&gt;Px, Py, Pz&lt;/strong&gt; is my desired EE position):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;MATLAB&lt;/strong&gt;-&lt;em&gt;This is the plot of the results of the &lt;strong&gt;MATLAB&lt;/strong&gt; ikine6s with input &lt;strong&gt;Px, Py, Pz&lt;/strong&gt; in the corresponding translation part of the desired homogenous transform matrix:&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/DzG54.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/DzG54.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Unity3D&lt;/strong&gt;-&lt;em&gt;This is what I get for the same input and angles in &lt;strong&gt;Unity3D&lt;/strong&gt;-the EE is off position(should be half inside white sphere):&lt;/em&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2Zl7n.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2Zl7n.png&quot; alt=&quot;http://i.imgur.com/cT3kqhW.png&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="14395" LastActivityDate="2016-09-09T20:46:41.073" Title="Off position robot model - Inverse Kinematics" Tags="&lt;inverse-kinematics&gt;&lt;3d-model&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10603" PostTypeId="2" ParentId="10568" CreationDate="2016-09-06T17:00:52.013" Score="4" Body="&lt;p&gt;Actuation is a complex subject that cannot be reduces to 1 component alone. It is the interaction of software electronics and mechanics. &quot;Toy&quot; servos tend to incorporate everything in one small package. Industrial robots have 3 or 4 separate components (each costing several hundred or a few thousand euros) instead. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To answer your question, worm gears are almost never used in the joints of industrial robots. Mostly cycloidal or planetary gears are used. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Transmission:&lt;/strong&gt;&#xA;Many hobbyist project use small &quot;toy&quot; servos which are, basically a DC motor, some simple position feedback system and a transmission (+ the controller). The transmission is a 1, 2 or sometimes 3 stage simple gear reducer. Due to its low quality it sometimes has large backlash, so the output of the transmission can move a bit (approx. 0.1 degrees, value varies on quality)  even if the motor does not move. This leads to uncontrollable motions, vibrations due to jerk, etc.&#xA;The best &quot;toy&quot; servos you can get, to my knowledge are the Dynamixel servos. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Industrial robots us professional gearboxes with backlash below 0.2 arc minutes. Price for something that you pointed out in the picture is probably around 1000-3000 EUR. Typical manufacturers: ZF, Wittenstein, Nabtesco, Bonfiglioli.&#xA;Furthermore, the control algorithm applied backlash compensation to compensate these and further improve the precision. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Motor:&lt;/strong&gt;&#xA;As mentioned, the &quot;toy&quot; servos use DC motor in most cases. DC motor in general my not be cheaper then PMSM (what industrial robots use, see below) but due to bulk manufacturing in small sizes and cheaper motor drivers, overall in the small size range, they may be cheaper to use. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Industrial robots use Permanent Magnet Synchronous Motors. They are less expensive in general as DC Motors (also due to lower maintenance costs, since there is no brush to change regularly). Power ranges for smaller robots are a few hundred watts for larger Robots a few kilowatts. Price for such a motor varies from approx. 300 EUR to 2000 EUR for the high powered ones. Most of them include (optionally) resolver or encoders for position control. These have high precision (up to 4048 values per rotation with additional signal for in-between values). Typical manufacturers form for motors ABB, Siemens, Bosch, Parker. For best performance, encoders are integrated in the motors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Motor Controller&lt;/strong&gt;&#xA;Toy servos use in most cases 1 Position control loop with PID control method. This is very simplistic and delivers bad performance. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Industrial motor controllers use &lt;a href=&quot;http://www.controleng.com/single-article/fundamentals-of-cascade-control/bcedad6518aec409f583ba6bc9b72854.html&quot; rel=&quot;nofollow&quot;&gt;cascaded control loops&lt;/a&gt; (each loop is a variant of PID) for &lt;a href=&quot;http://www.motioncontroltips.com/faq-servo-motor-current-velocity-position-loops-bandwidths/&quot; rel=&quot;nofollow&quot;&gt;position, velocity and torque&lt;/a&gt;. This increases significantly their performance. To increase the performance of the controllers, offset values are added to the control loops (known as &lt;a href=&quot;http://www.controleng.com/single-article/feed-forwards-augment-pid-control/e6dcd10be91de5c64e075ac84749e77d.html&quot; rel=&quot;nofollow&quot;&gt;feed forward control&lt;/a&gt;). This way the controllers cope easier with their task (e.g. if acceleration is needed, the fed forward controller applies an offset to the control output of the torque loop the make the reaction time faster, the weight of the robot is compensates as an offset value on the torque coming from a static model, etc.). Industrial motor controllers have the same manufacturers as motors. Usually it is best to use a matching manufacturer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another difference is how the reference signals are given to the motor controllers. This is &quot;only software&quot; so it seems not expensive, but a lot of reaseach is in this domain. THe question is how to plan trajectories between two points so that the motor controller can deliver its best perfromance. You can read about this &lt;a href=&quot;http://www.diag.uniroma1.it/~deluca/rob1_en/13_TrajectoryPlanningJoints.pdf&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Al of thea measure above is to &quot;balance strenght and precision&quot; as you formulated. Servos in hobbyist application are nowhere near their counterparts in industrial robots in terms of build quality and performance. I am afraid there is no cheap solution to get the same performance. The cheapest way to improve the performance of hobby equipment it though software. Get a servo where the cascaded control is implementable (like the dynamixel ones) and implement trajectory generators (many robotics courses are available online, like the link I sent you) that plan a trajectory while limiting jerk. Fine tune the control loop of the servo for your robot (instead of accepting the factory default). Compensate anything than can be calculated, eg. the static torque needed to hold the robot still as a feed forward controller. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the above measures you can at leas get the most out of the hobbyist hardware, which will already make a difference.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2016-09-06T17:00:52.013" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="10605" PostTypeId="2" ParentId="10602" CreationDate="2016-09-06T20:19:48.790" Score="1" Body="&lt;p&gt;Is is hard to make out from the perspectives that you have included, but is seems that the matlap screenshot has a rotation of approx 45 degrees around the global z axis. Taking a look at the grid in the unitz screenshot it seems that the robot has also a 45 degree angle with the global vertical axes (y axis). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would suggest the following:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Check if the units match. Matlab uses radians while unity in most cases uses degrees for rotation&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Check succession of children and parent game object in unity. Make sure that the root coordinate system is the one you think it is and that each linkage is the child of the previous one.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;make sure that the coordinate systems where each linkage meets the next one un Unity corresponds to the Matlab one. This might be tricky, due to different coordinate systems. In Unity each game object has its own coordinate system. There are no rules on how these are oriented and they might be left or right handed. The coordinate system in Matlab is left handed and it is oriented according to the DH convention. Make sure that the coordinate system at the joints in Unity are the same as in Matlab or the joint angles are correctly transformed.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;make sure that both system use the same handed coordinate systems, adjust if not&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;lookup which Denavit Hartenberg convention is used in Matlab (proximal, distal, modified, classic) and follow that in Unity&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;If everything else fails (or you just do not want to bother with coordinate systems) and it is not important to squeeze out every bit of performance in Unity, you can use the built-in Inverse Kinematics in Unity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;UPDATE: build-in un Unity seems to only support humanoid models. Look in the assets tore for a free on which supports serial structures. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Troubleshooting:&#xA;Take the a MAtlab forward model. Get the position and orientation of each joint coordinate system in the global frame. Draw these in Unity in a global frame. See which is the first one which is not located at its corresponding joint. Fix then go forward until the last one is in place (at the EE). &lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2016-09-09T20:46:41.073" LastActivityDate="2016-09-09T20:46:41.073" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="10606" PostTypeId="2" ParentId="7316" CreationDate="2016-09-06T21:34:19.250" Score="0" Body="&lt;p&gt;I find it is all fine and good to discuss a problem but sometimes users need a working example albeit not in their preferred programming language.  I have used face detection tracking for robotics behaviors but this has many problems like lighting, faces not visible, profile or back of head Etc.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Motion tracking is better. Using example code I developed some Raspberry Pi camera python code to do real time motion tracking based on diff file method mentioned above.  Code is on github &lt;a href=&quot;https://github.com/pageauc/motion-track&quot; rel=&quot;nofollow&quot;&gt;https://github.com/pageauc/motion-track&lt;/a&gt; and YouTube video here &lt;a href=&quot;https://youtu.be/09JS7twPBsQ&quot; rel=&quot;nofollow&quot;&gt;https://youtu.be/09JS7twPBsQ&lt;/a&gt; (most of my stuff has a video associated with it)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The python code can be modified to run on other platforms and systems. From this demo I developed a real time object speed camera and a simple hotspot game that can be found in the same repo.&#xA;Recently I have been working on Camera Tracking. Instead of tracking motion in the FOV (field of view) I track actual camera movement.  This uses a little different technique than image diff method.  I am working on further developing this to use in robotics where there are no wheel encoders.  This would use the background to find high value target search rectangles from the video background image (not signs or symbols) to aid in correcting navigation errors for straight line and turns. See my github repo for details and more explanation&#xA;Real time speed on a RPI 3 is quite good. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So these are a few real world examples to your question that may be useful if you also have the prerequisite programming skills and/or learn time.  Camera Pan/tilt servo system can actively scan an area and detect and track moving object(s) using just a computer controlled camera setup without the need for special sensors although this would be useful for night operation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I don't claim to be the best coder but a lot of googling will get you a long way there if you keep trying.  I also like to post video of projects although they can go out of date after a while.  My experience with some opencv video is that quite often there is no code repo reference.  Just video with no good sound or vocal explanation and poorly demonstrated.  This is like showing a video of cars driving by quickly to explain how vehicle chassis, electrical and power train systems work.  Just my observation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A lot of times products don't do what you would like or are too expensive.  Developing your own solution is sometimes not the best approach if you factor in your time and effort unless you do it as a hobby.  For example, I would not think of developing a custom dash cam solution since there are many good, inexpensive product solutions on the market.&lt;/p&gt;&#xA;" OwnerUserId="14658" LastEditorUserId="14658" LastEditDate="2016-09-07T01:49:29.467" LastActivityDate="2016-09-07T01:49:29.467" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10607" PostTypeId="1" AcceptedAnswerId="11410" CreationDate="2016-09-06T21:42:44.163" Score="6" ViewCount="1277" Body="&lt;p&gt;I'm building a modified version of the standard hanging plotter (v-plotter). The basic idea is that you have two cables hanging from stepper motors which form a triangle supporting the pen at the tip. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My design the strings anchored at points $C$ and $D$ which causes the behavior to be somewhat different that the normal plotter, especially when operating close to the motors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/pnrCx.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/pnrCx.png&quot; alt=&quot;Plotter Diagram&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was able to work out the forward kinematics fairly easily, but the inverse kinematics are turning out to be a real headache. You can see my attempt at a standard geometry solution &lt;a href=&quot;https://math.stackexchange.com/questions/1914961/positioning-isosceles-triangle-to-create-second-isosceles-triangle/1915902#1915902&quot;&gt;on math.stackexchange here&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there anything specific to calculating kinematics for robotics which could help me?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not interested in modifying the hardware to make the math easier. I'm also not interested in discussing the center of gravity of the pen, cable weight...etc. I want to calculate the kinematics for this as an ideal system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any and all advice is appreciated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you.&lt;/p&gt;&#xA;" OwnerUserId="14659" LastEditorUserId="-1" LastEditDate="2017-04-13T12:19:24.817" LastActivityDate="2021-01-16T02:43:32.253" Title="Forward and Revers Kinematics For Modified Hanging Plotter" Tags="&lt;control&gt;&lt;kinematics&gt;&lt;inverse-kinematics&gt;" AnswerCount="6" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10608" PostTypeId="2" ParentId="10607" CreationDate="2016-09-06T23:05:41.133" Score="0" Body="&lt;p&gt;I assume input is the X and Y coordinates of E. &#xA;In this case, unless you know the orientation also, there is no straightforward way to calculate the coordinates of C and D. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would write 2 parameterized circle or distance equations around A and B. &#xA;The $C_x$, $C_y$ and $D_x$ and $D_y$ are unknown. (4 unknowns in this system and 2 equations)&#xA;Distance from E to D and distance from E to C can be written and so there is a system with 4 equations and 4 unknowns where besides the unknowns all other parameters shoulds be known. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Solve for C and D coordinates and calculate distances to A and B and it is done. I do not think that the equation system will have an explicit solution but a numerical solver (like Newton-Raphson) can be used to solve it iteratively.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or search for 5 bar linkage inverse kinematics and maybe that will inspire a solution.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2016-09-06T23:05:41.133" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10609" PostTypeId="1" CreationDate="2016-09-07T10:43:48.533" Score="1" ViewCount="590" Body="&lt;p&gt;I am building a rover which can navigate autonomously. I do not want to use wheel encoders for generating robot odometry since it causes drifts due to slippage etc. &#xA;I want to use GPS for generating odometry. Will it be useful for me to use the differential GPS approach or shall I use a simple GPS?&#xA;I am thinking of using DGPS because it enhances the accuracy to great extent, But at the same time, I think that in generating odometry, absolute gps values are not of importance. Instead, relative gps values are important to find for example, the distance covered by the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any suggestions on this ? Thanks&lt;/p&gt;&#xA;" OwnerUserId="14654" LastActivityDate="2016-09-07T14:03:57.517" Title="Differential GPS or Simple GPS for Robot navigation and odometry?" Tags="&lt;navigation&gt;&lt;odometry&gt;&lt;gps&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10610" PostTypeId="2" ParentId="10609" CreationDate="2016-09-07T11:49:25.090" Score="2" Body="&lt;p&gt;Do not give up on encoders. They are a great complement to GPS. I don't know what precision you want to reach, or what terrain your robot will operate in, but wherever it will be, encoders will give you good information about momentary position changes. Of course it will have some error, but when measured over small time period (i.e. 1s) it will be typically much smaller than accuracy of even DGPS. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is encoder error will accumulate over time, so eventually your robot will end up in a completely different position than it should. That's why you should use your GPS data to correct data from encoders (possibly using &lt;a href=&quot;https://en.wikipedia.org/wiki/Kalman_filter&quot; rel=&quot;nofollow noreferrer&quot;&gt;Kalman filter&lt;/a&gt;). Check out this great answer about a &lt;a href=&quot;https://robotics.stackexchange.com/a/386/7360&quot;&gt;sensor fusion&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Benefits of using GPS + encoders:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;GPS signal may be lost (indoors, tall buildings nearby, tunnels, etc.) - how will you know where are you then?&lt;/li&gt;&#xA;&lt;li&gt;Even when you lay down your GPS receiver on a table, the position will slowly drift around some central point - data from encoders may be used to correct for that. This is also the reason why you can't use GPS data to calculate distance covered by the robot (not with a ~1m accuracy at least)&lt;/li&gt;&#xA;&lt;li&gt;encoders are useful to controlling robot speed, and making sure that it drives straight (which is very hard using open loop PWM)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;GPS vs DGPS&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Remember that accuracy of i.e. +/- 2m doesn't mean that you will have a constant offset from real position to the north, or any other direction. The readings will float around some position. That's why I would suggest going for higher precision modules&lt;/p&gt;&#xA;" OwnerUserId="7360" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2016-09-07T11:49:25.090" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="10611" PostTypeId="1" AcceptedAnswerId="10614" CreationDate="2016-09-07T12:50:48.987" Score="-1" ViewCount="69" Body="&lt;p&gt;I'm a swimmer and would like to create a small object that would help me folow my trainning plannification.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In other words I want to create a custum stopwatch, with 5 colored led that will be on or off according to the trainning program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is my training:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;0:00 to 5:00 : Low Effort (Green light)&lt;/li&gt;&#xA;&lt;li&gt;5:00 to 15:00 : Medium Effort (Yellow light)&lt;/li&gt;&#xA;&lt;li&gt;15:00 to 20:00 : High Effort (Orange Light)&lt;/li&gt;&#xA;&lt;li&gt;20:00 to 25:00 : Medium Effort (Yellow light)&lt;/li&gt;&#xA;&lt;li&gt;25:00 to 26:00 : Maximum Effort (Red light)&lt;/li&gt;&#xA;&lt;li&gt;26:00 to 30:00 :  Low Effort (Green light)&lt;/li&gt;&#xA;&lt;li&gt;30:00 Trainning done (Should turn off automaticaly.)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The whole thing must be waterproof.&#xA;Must work on battery.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm asking for some guidelines, I'm not asking for a complete patent(would be appreciated though) but the main idea how to do it. So I can avoid wasting my time on research and tests.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't want to spend too much time on the project less than 100 hours maybe. I have studied in computer science and I have most of the materials I'll need. I can buy what is missing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm a little bit noob on this kind of project, I want to know how you do it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks for help.&lt;/p&gt;&#xA;" OwnerUserId="14310" LastEditorUserId="14310" LastEditDate="2016-09-07T15:27:55.517" LastActivityDate="2016-09-11T10:42:45.253" Title="Guidelines for a &quot;stopwatch based&quot; craft" Tags="&lt;battery&gt;" AnswerCount="2" CommentCount="10" ClosedDate="2016-09-13T11:32:54.673" ContentLicense="CC BY-SA 3.0" />
  <row Id="10612" PostTypeId="2" ParentId="10609" CreationDate="2016-09-07T14:03:57.517" Score="0" Body="&lt;p&gt;If your budget is large (&gt;\$ 5000) then use an off-the-shelf RTK GPS and you will get a precision of around 1.5cm $\sigma$.&#xA;You will also need a RTK subscription and internet connection, or set up your own base station to provide atmospheric corrections (valid for 20-30km).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively there is &lt;a href=&quot;https://emlid.com/reach/&quot; rel=&quot;nofollow&quot;&gt;this low-cost RTK unit&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However I have previously used a low cost (&amp;lt; \$300USD) setup with a L1 GPS, IMU and camera (making observations of landmarks) using an extended Kalman filter in order to get &amp;lt;7cm $\sigma$ accuracy. I say accuracy rather than precision because I did a simulation using the sensor specs and so I knew the ground truth. I didn't use encoders but I would highly recommend it.&#xA;From memory it took me around 4 days to implement and debug the filter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See also GPS + odometry + camera/laser SLAM algorithms which may solve your problem.&lt;/p&gt;&#xA;" OwnerUserId="8859" LastActivityDate="2016-09-07T14:03:57.517" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="10613" PostTypeId="2" ParentId="9365" CreationDate="2016-09-07T15:16:14.753" Score="1" Body="&lt;p&gt;Underactuation leads to nonholonomic constraints (non-integrable kinematic or dynamic equations) in mechanical systems. &lt;/p&gt;&#xA;" OwnerUserId="14665" LastActivityDate="2016-09-07T15:16:14.753" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10614" PostTypeId="2" ParentId="10611" CreationDate="2016-09-07T16:37:47.240" Score="1" Body="&lt;p&gt;That should be doable and is not that hard. I suggest a small arduino (e.g. Adafruit Trinket), an (&lt;a href=&quot;https://www.youtube.com/watch?v=IPOHARgRLE0%20ad&quot; rel=&quot;nofollow&quot;&gt;RGB LED&lt;/a&gt;), a small coin cell and a button. The coding is trivial. You attach this components to a replacement watchstrap so that you can wear it on the wrist. You can activate the system with the button and show your lights. Making it watertight is not that easy, I'd start with transparent heat shrink tube after fixing everything in epoxy. The battery should last some time, replacing it will be a bit tricky.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Update: You could even get rid of the button if you let two metal parts stick out so that they are connected electrically by the water. &lt;/p&gt;&#xA;" OwnerUserId="23196" LastEditorUserId="23196" LastEditDate="2016-09-09T04:58:17.317" LastActivityDate="2016-09-09T04:58:17.317" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10616" PostTypeId="1" AcceptedAnswerId="10626" CreationDate="2016-09-07T20:54:52.387" Score="12" ViewCount="601" Body="&lt;p&gt;At least, on two legs. &lt;a href=&quot;https://www.youtube.com/watch?v=IMR553sg3-Q&quot; rel=&quot;noreferrer&quot;&gt;Asimo&lt;/a&gt;, one of the best known humanoid robots, is already capable to walk, although it doesn't seem to do this very stable. And it is a recent result.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far I know, the legs are essentially many-dimensional non-linear systems, the theory of their control is somewhere in the border of the &quot;very hard&quot; and the &quot;impossible&quot;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, for example, the airplanes are similarly many-dimensional and non-linear, despite that, autopilots are controlling them enough well some decades ago. They are enough trusted to confide the lives of hundreds of living humans to them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the essential difference, what makes the walking so hard, while the airplane controlling so easy?&lt;/p&gt;&#xA;" OwnerUserId="6890" OwnerDisplayName="peterh" LastEditorUserId="6890" LastEditDate="2016-09-08T14:07:41.663" LastActivityDate="2017-03-03T10:50:43.617" Title="Why is it so hard to walk?" Tags="&lt;control&gt;&lt;stability&gt;&lt;walking-robot&gt;" AnswerCount="4" CommentCount="1" FavoriteCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="10617" PostTypeId="2" ParentId="10616" CreationDate="2016-09-07T22:24:38.983" Score="9" Body="&lt;p&gt;Firstly, you have to take into account the all powerful symbol: $&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Research is always at odds with $, and it's notoriously difficult to get all the funding you'd want. Meanwhile, the airplane industry is pulling a &lt;em&gt;profit&lt;/em&gt; of 33$ B-b-b-billllllllion in 2016. That's a lot of money to work with, and plenty of reason to give it to people who can make automated systems for worst-case scenarios like pilot incapacitation, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's also time. Many more years and people have been spent working on airplanes and perfecting their singular goal of making people move through the sky.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Academically, it's a different problem set. Airplanes, as noted, have been an ongoing area of development for (relative to walking machines) a very long time. Everything from landing gear to thrust control to aileron manipulation have been worked on extensively and modularly improved; it is thus not a 'from-scratch' process to automate these procedures. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Walking, however, is perhaps a more complicated task. Firstly, there is balancing. The human body took millions upon millions of years to engineer, and we have all the proper mechanics under the skin to turn our ankle this way or that, etc. Replicating these mechanics is difficult enough, but teaching a robot to (on the proper timescale) understand and react to balance is hard. Then we add on the issue of terrain. Walking up a few stairs or a rocky hill, balancing yourself just got a lot harder. And in walking, you lift a leg, let yourself basically fall a few inches forward, and then catch yourself, immediately balancing, grasping a foothold, and already lifting your other foot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That being said, I think you might be missing a few cool advancements in the robotic-walking sector, and you might be intrigued by &lt;a href=&quot;https://www.youtube.com/watch?v=rVlhMGQgDkY&quot;&gt;THIS&lt;/a&gt; Boston Dynamics video.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A few minutes in, and you will surely see the scale of the mechanical and technological feat this is.&lt;/p&gt;&#xA;" OwnerDisplayName="Avik Mohan" LastActivityDate="2016-09-07T22:24:38.983" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10618" PostTypeId="1" CreationDate="2016-09-08T01:34:50.193" Score="1" ViewCount="52" Body="&lt;p&gt;I'm trying to automate a process wherein individual small parts must be weighed one after another for identification / sorting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The parts would be fed to the scale using a conveyor. A mechanism is in place to feed the parts one at a time (i.e. sufficient spacing between the parts).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that it is possible to have weighing idlers on industrial conveyors but their precision and repeatability seem to be inadequate for precision weighing. The parts range in weight from 100mg to 30g so the only type of scale that I've found that has sufficient precision (10mg or better) are precision/laboratory scales. For example: &lt;a href=&quot;http://www.torbalscales.com/precision-scales.html&quot; rel=&quot;nofollow&quot;&gt;Torbal Precision Scales&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can imagine a solution wherein a lightweight flat surface (e.g. plexiglass) could be laid atop the scale plater upon which the feed conveyor would deposit the parts to be weighed. Then, after a stable weight has been read by computer via the integrated RS-232 port, a motor controlled &quot;sweeping mechanism&quot; could brush off the part from the plexiglass plater onto a discharge conveyor system for routing into one of many possible part bins.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given this, I have two questions:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Is there a technology that I'm unaware of that could achieve individual small part weighing that would be simpler than stated solution?&lt;/li&gt;&#xA;&lt;li&gt;Would the plexiglass platter (used to create a larger flat surface) cause too much pre-loading to the load cells, thereby affecting the scales performance / durability in any way?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="14668" LastActivityDate="2016-09-08T01:34:50.193" Title="Automated high-precision weighing of individual parts" Tags="&lt;mechanism&gt;&lt;automation&gt;" AnswerCount="0" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="10619" PostTypeId="1" CreationDate="2016-09-08T01:43:35.223" Score="0" ViewCount="74" Body="&lt;p&gt;I want to make a dispenser system for &lt;a href=&quot;https://i.stack.imgur.com/9zdDG.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;Indian spices&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Dispense in multiple of teaspoons (5 ml) &lt;/li&gt;&#xA;&lt;li&gt;Handle powdered spices and small seeds like mustard/cumin&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I ordered a &lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/B00004VWIP&quot; rel=&quot;nofollow noreferrer&quot;&gt;spice carousel&lt;/a&gt; from amazon and was hoping I'll be able to add an actuator to it, but it needs a lot of force to click the dial.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm wondering that I would need something similar to sugar dispensers in coffee machines. To start with I want to design individual units, but eventually want to make a solution that can dispense 6 different spices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'll appreciate if anyone gives any idea on how to get started on this, thanks in advance!&lt;/p&gt;&#xA;" OwnerUserId="14639" LastEditorUserId="10596" LastEditDate="2016-10-10T08:25:23.387" LastActivityDate="2019-11-02T15:27:48.870" Title="How to get started on making a dispenser for Indian spices?" Tags="&lt;motor&gt;&lt;robotic-arm&gt;&lt;actuator&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10620" PostTypeId="2" ParentId="10619" CreationDate="2016-09-08T08:26:13.593" Score="2" Body="&lt;p&gt;You should have a look at small screw conveyors. Either experimentally find out how much you have to turn for your spices or make a feedback loop with a scale. &lt;/p&gt;&#xA;" OwnerUserId="23196" LastActivityDate="2016-09-08T08:26:13.593" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10621" PostTypeId="1" AcceptedAnswerId="10630" CreationDate="2016-09-08T09:03:19.120" Score="1" ViewCount="122" Body="&lt;p&gt;On Google Scholar there are a lot of papers which explain the advantages of motion primitive: instead of searching inside the state-space (configuration space of a robot) the solver has to search inside the plan space of motion primitives. Sometimes this concept is called lattice graph.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even if all papers are convinced about motion primitive in general, there is room for speculation about how exactly this idea should be implemented. Two different school of thought are out there:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Machine Learning for generate motion primitive. This is based on q-learning, neural networks and motion capture. The projekt &quot;poeticon&quot; (Yiannis Aloimonos) is a good example.&lt;/li&gt;&#xA;&lt;li&gt;Handcoded motion primtive. This concept is based an manual coded Finite States-Machines (FSM) which can only solve a concrete example like &quot;pushing the box&quot;. Additional functionality has to be implemented by hand.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The question is, which concept is better on real life examples? &lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2016-09-10T21:44:06.597" Title="Motion primtive: machine learning vs. handcrafted" Tags="&lt;machine-learning&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10622" PostTypeId="2" ParentId="10616" CreationDate="2016-09-08T09:23:26.643" Score="0" Body="&lt;p&gt;&lt;strong&gt;Dynamic walking&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason why biped walking is more difficult is because lifelike physics-simulation like box2d, havok etc are a relativ new concept in computerhistory. The first widelyknown game which utilized a physics engine was Angry Birds (2009). Later came the QWOP simulator and others. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first research was done on MIT Lab under Marc Raibert. He not only build the one-leg robot, but also created a computeranimation which fullfill the requirements of SIGGRAPH 1991. Later, Boston Dynamics also first developed a physics simulation inside new algorithm were tested. The first game-engine for the consumer market which supported walking-characters was NaturalMotion Euphoria which was programmed around the year 2000. The time before, the computerhardware was not fast enough to simulate physics in realtime. A biped controller on top of a physics-engine can only be invented if the simulation works reasonable fast.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Autopilots in airplanes&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is simply wrong that autopilots for airplanes exists or that they are capable for landing a Boeing A380. Even current military drones like X-47B need a human-in-the-loop for landing (&lt;a href=&quot;http://flighttestsafety.org/images/stories/workshop/2012/Loustaunau.pdf&quot; rel=&quot;nofollow&quot;&gt;Lessons learned during developmental test of the x-47b aircraft, page 21&lt;/a&gt; &quot;Mission operators worked directly with coders to develop / validate plan&quot;). Only in steam-punk universe, autonomous airplanes are available and works reasonable well.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastEditorUserId="14283" LastEditDate="2016-09-08T11:45:02.223" LastActivityDate="2016-09-08T11:45:02.223" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10625" PostTypeId="1" CreationDate="2016-09-08T13:53:24.073" Score="0" ViewCount="239" Body="&lt;p&gt;I have recently purchased an Orbbec Astra camera, which uses the same technology and produces the same style depth map as a Microsoft Kinect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What would be the correct file format to save the depth map frames, How would I go about saving the videos recorded?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have been able to load a stream but am not sure what format the frames should be saved in so that i can load them for testing at a later stage and still have all the same information.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am using OpenNI2, OpenCV3.1.0 and C++.&lt;/p&gt;&#xA;" OwnerUserId="14285" LastActivityDate="2017-02-06T08:26:07.153" Title="Save Depth Map Video" Tags="&lt;c++&gt;&lt;opencv&gt;&lt;openni&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10626" PostTypeId="2" ParentId="10616" CreationDate="2016-09-09T05:36:40.433" Score="5" Body="&lt;p&gt;I'm not sure I agree that bipedal walking is so much harder that airplane control. It depends on how you look at it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many robots can walk (bipedal walking) and many airplanes are difficult to control because of their flight characteristics or the flight conditions. It is easier for robots to walk in nice conditions. There are many weather conditions too difficult for many airplanes to be controlled in. Occasionally some of those airplanes with hundreds of people in them crash because of this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But let's focus on what makes bipedal locomotion in robots hard, and why walking robots are not in everyone's home since I think that is your real question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Walking requires understanding and reacting to how the environment and gravity will apply forces to, and move, your body. Most walking robots measure the orientation of all their parts and have an inertial sensor (like your inner ear) that tells them how they are oriented with gravity, and so they can predict (and control) the influence of gravity on their motion. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Understanding how the environment will apply forces to you is more difficult. Walking on a hard, smooth surface is easy because you can make assumptions about what the contact between the foot and floor is like, and what the friction between them is. Many walking robots will have a force-torque sensor at the ankle to help measure these contacts. Some will have contact sensors in the sole of the foot. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you try to walk on an irregular or unstable surface, it becomes a lot more difficult. You can no longer make assumptions, but instead have to estimate in real time what the friction of the contact is. This is difficult to do without the right sensors, and if the robot was designed with a bunch of assumptions about the walking environment in mind, it will have a hard time in a different environment. If you estimate the friction and foot support wrong, the robot slips and falls.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's foot contact... but of course, when we navigate through an environment we use our hands for stability, we might lean against something temporarily, and we bump into things and recover from that. If you go look at the research being done in humanoid robotics, you will see that different projects have investigated (and to some degree, solved) all these problems. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now think of the things that cause your walking to fail. A small lip that you did not see in a doorway will trip you. A step that is a different height than the others can cause you to stumble. A surface you are standing on that collapses will cause you to lose your balance. A good walking robot will have to perceive and control for all these things. So not only do we need control for walking, and control for exception recovery, but also good perception and environment models to predict where we need to change our control to a different, more appropriate approach.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem becomes very complex. It's not a control problem, it's a total system of perception, planning, reflex, and control that needs to be designed. Each year we make progress, but there is more progress needed in creating a system with all the sensing, sensor fusion, processing and actuation needed for good bipedal locomotion in human environments.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why is it so hard to walk? If I had to pick one, I'd say that perception is the area that needs the most work, rather than control. &lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="184" LastEditDate="2017-03-02T20:47:33.513" LastActivityDate="2017-03-02T20:47:33.513" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="10627" PostTypeId="2" ParentId="10625" CreationDate="2016-09-09T05:52:28.853" Score="1" Body="&lt;p&gt;If you search a bit you'll find others have all done &lt;a href=&quot;https://forums.creativecow.net/thread/291/351&quot; rel=&quot;nofollow&quot;&gt;variations on this approach&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2016-09-09T05:52:28.853" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10629" PostTypeId="1" CreationDate="2016-09-09T08:50:27.527" Score="1" ViewCount="1295" Body="&lt;p&gt;I am fairly new to ROS and Gazebo. I have posted this question on the ROS/Gazebo forums, but they appear to be dead. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am using ros-kinetic and gazebo7.3 on Ubuntu 16.04. I have been following this tutorial (&lt;a href=&quot;http://www.generationrobots.com/blog/en/2015/02/robotic-simulation-scenarios-with-gazebo-and-ros/&quot; rel=&quot;nofollow&quot;&gt;Tutorial&lt;/a&gt;) and have adapted it slightly for my own vehicle (4 wheels instead of 2, skid drive plugin instead of diff drive).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I receive errors when running roslaunch on my own project, and I also get the same errors when using the same command on the completed project provided by the creators of the tutorial, &lt;a href=&quot;https://github.com/HumaRobotics/mybot_gazebo_tutorial&quot; rel=&quot;nofollow&quot;&gt;Complete Project Github&lt;/a&gt;. I assume that means that I am missing something in ros or Gazebo.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Running:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;roslaunch jaguar4x4_gazebo jaguar4x4_world.launch&lt;/p&gt;&#xA;&#xA;&lt;p&gt;gives the following errors (repeated for each of the four joint and trans):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[ERROR] [1472045218.311147687, 0.142000000]: No valid hardware interface element found in joint 'left_back_wheel_hinge'.&#xA;&#xA;[ERROR] [1472045218.311359894, 0.142000000]: Failed to load joints for transmission 'left_back_trans'.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Also: &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;[ERROR] [1472045218.646822285, 0.365000000]: Exception thrown while initializing controller leftfrontWheel_effort_controller. Could not find resource 'left_front_wheel_hinge' in 'hardware_interface::EffortJointInterface'. [ERROR] [WallTime: 1472045219.647578] [1.363000] Failed to load leftfrontWheel_effort_controller [INFO] [WallTime: 1472045219.647938] [1.363000] Loading controller: leftbackwheel_effort_controller [ERROR] [WallTime: 1472045220.651591] [2.366000] Failed to load leftbackwheel_effort_controller&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This error is repeated for each of the 4 wheels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have seen similar error messages posted online, however, the solutions don’t seem to fix mine (I can't post any more links due to my reputation level).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(1). I already use the hardwareInterface tags&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(2). I have already installed ros_control&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If anyone has any ideas on how to fix these errors I would appreciate it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT -------------------------------------------------------------------&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think maybe there is an issue with the way that I have created my joints and the use of the hardwareInterface tags.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my macros.xacro file I create my joints and link the transmission separately (I repeat this twice for the front and back wheels): &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;&lt;pre&gt;&lt;code&gt;   &amp;lt;joint name=&quot;${lr}_front_wheel_hinge&quot; type=&quot;continuous&quot;&amp;gt;&#xA;      &amp;lt;parent link=&quot;chassis&quot;/&amp;gt;&#xA;      &amp;lt;child link=&quot;${lr}_front_wheel&quot;/&amp;gt;&#xA;      &amp;lt;origin xyz=&quot;${+wheelPos-chassisLength+2*wheelRadius} ${tY*wheelWidth/2+tY*chassisWidth/2} ${wheelRadius}&quot; rpy=&quot;0 0 0&quot; /&amp;gt;&#xA;      &amp;lt;axis xyz=&quot;0 1 0&quot; rpy=&quot;0 0 0&quot; /&amp;gt;&#xA;      &amp;lt;limit effort=&quot;100&quot; velocity=&quot;100&quot;/&amp;gt;&#xA;      &amp;lt;joint_properties damping=&quot;0.0&quot; friction=&quot;0.0&quot;/&amp;gt;&#xA;    &amp;lt;/joint&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  &amp;lt;transmission name=&quot;${lr}_front_trans&quot;&amp;gt;&#xA;    &amp;lt;type&amp;gt;transmission_interface/SimpleTransmission&amp;lt;/type&amp;gt;&#xA;    &amp;lt;joint name=&quot;${lr}_front_wheel_hinge&quot; /&amp;gt; &#xA;    &amp;lt;actuator name=&quot;${lr}_front_Motor&quot;&amp;gt; &#xA;      &amp;lt;hardwareInterface&amp;gt;EffortJointInterface&amp;lt;/hardwareInterface&amp;gt;&#xA;      &amp;lt;mechanicalReduction&amp;gt;10&amp;lt;/mechanicalReduction&amp;gt;&#xA;    &amp;lt;/actuator&amp;gt; &#xA;  &amp;lt;/transmission&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Doing it this way gives the errors mentioned above, but my model in Gazebo appears. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I try to merge both of these blocks so that there is just one joint tag wrapped by the transmission tags then I get the following error and my model does not appear in Gazebo:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;[ERROR] [1473672367.041892175]: Failed to find root link: Two root links found: [footprint] and [left_back_wheel]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I don't understand why I get this error because I have a joint between my chassis base link and the world in my Jaguar4x4.xacro file : &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; &amp;lt;link name=&quot;footprint&quot; /&amp;gt; &#xA;&#xA; &amp;lt;joint name=&quot;base_joint&quot; type=&quot;fixed&quot;&amp;gt;&#xA;   &amp;lt;parent link=&quot;footprint&quot;/&amp;gt;&#xA;   &amp;lt;child link=&quot;chassis&quot;/&amp;gt;&#xA; &amp;lt;/joint&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I now get a number of errors when trying to combine the joint and transmission blocks, so I imagine that this is not the best way to go?&lt;/p&gt;&#xA;" OwnerUserId="14678" LastEditorUserId="14678" LastEditDate="2016-09-13T08:19:41.043" LastActivityDate="2016-09-13T08:19:41.043" Title="ROS/Gazebo: URDF Error: No valid hardware interface element found in joint" Tags="&lt;ros&gt;&lt;gazebo&gt;" AnswerCount="0" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="10630" PostTypeId="2" ParentId="10621" CreationDate="2016-09-10T08:48:31.773" Score="-1" Body="&lt;p&gt;There is probably no fixed answer to which apporach works best, it all depends on the application, not to mention who you ask.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sometimes you have a pretty good idea of what some of the motion primitives should be. Perhaps you have some experience from remote control of the robot, or there are some constraints that limit the available motion primitives such that the solution is pretty obvious. In such cases, handcrafted motion primitives will probably work quite well. Furthermore, handcrafted motion primitives better enable theoretical analysis than ones found using machine learning. You can perhaps find some general properties of the primitives, saying that under certain assumptions you can make guarantees.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In other cases, you don't really have that amount of domain knowledge or constraints, or perhaps you want to explore different options not previously thought of. In such cases, machine learning techniques are great, and they offer a low cost of implementation as long as you have good simulation and experimentation possibilities available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Personally, I think the best thing is to combine the two. Some motion primitives can be handcrafted, some can be machine learned, and some a little bit of both: perhaps create a draft primitive by hand, and use machine learning to refine and make it more robust.&lt;/p&gt;&#xA;" OwnerUserId="14677" LastEditorUserId="9585" LastEditDate="2016-09-10T21:44:06.597" LastActivityDate="2016-09-10T21:44:06.597" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10631" PostTypeId="1" AcceptedAnswerId="10778" CreationDate="2016-09-10T21:46:43.413" Score="2" ViewCount="160" Body="&lt;p&gt;What is the best way to estimate the state &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[x-position;&#xA;y-position; &#xA;heading (yaw angle); &#xA;velocity; &#xA;acceleration; &#xA;curvature (or yaw rate)]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;of a moving leading vehicle with sensors mounted on a follower/ego vehicle?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The following measurements of the leading vehicle are obtained via radar sensors mounted on the ego vehicle.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;x-y-position in the ego coordinate frame &lt;/li&gt;&#xA;  &lt;li&gt;heading in ego coordinates&lt;/li&gt;&#xA;  &lt;li&gt;relative and absolute velocity and acceleration&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No information about curvature (yaw rate). This should be estimated which is possible using the lateral acceleration and longitudinal velocity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For estimation I think of using EKF or nonlinear moving horizon estimation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Considering that no prediction about the moving leader vehicle can be made because the control inputs are unknown. Only the measurments (update step) and the movements of the ego vehicle are available (incroporate in prediction).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What kind of model would be appropriate for the whole scenario?&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;just a model for the leading vehicle? (e.g. bicycle model)&lt;/li&gt;&#xA;&lt;li&gt;just a model for the following ego vehicle?&lt;/li&gt;&#xA;&lt;li&gt;or a combination of both vehicles?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Option 1 would be perfect in combination with a simple bicycle model if there was an outside observer who is not moving. Option 2 is not really an option because the configuration of the leader vehicle should be estimated. Option 3 seems to me the right way because of the following thoughts:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking from the ego coordinates: is it correct correct that a motion change of the ego vehicle will seem as if the measured locations of the leading vehicle changed? If so will I need a coordinate transformation or is it better to use a model in global coordinates, then transform the measurements (which are in ego coordinates)?. The approach using global coordinates seems counter intuitive because the final estimate should be used for the follower/ego vehicle as reference trajectory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can you give me a hint which coordinate frame (global or ego) to use, which model to use in the prediction step and if my thoughts on motion changes are correct?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or do you know any sources that address this or a similar issue?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;For the process model I thought of&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;x_k+1 = x_k + v_k * cos(heading_k)&#xA;y_k+1 = y_k + v_k * sin(heading_k)&#xA;heading_k+1 = heading_k&#xA;v_k+1 = v_k &#xA;a_k+1 = a_k &#xA;curvature_k+1 = curvature_k + a_y_k/v_x_k&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;of course there should be some process noise added, especially for heading, velocity acceleration and curvature because these measurements are rather inaccurate.&#xA;For heading, velocity and acceleration I would use the previous estimates (or measurements) since no other source except the measurements from the sensors are available.&#xA;Curvature is computed using the acceleration in (global?) y-direciton and the (global?) velocity in x-direction &lt;code&gt;curvature = a_y/v_x&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The measurement model looks probably something like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;y = [1 1 1 1 1 0; &#xA;     0 1 0 0 0 0; &#xA;     0 0 1 0 0 0; &#xA;     0 0 0 1 0 0;&#xA;     0 0 0 0 1 0;&#xA;     0 0 0 0 0 0]*x&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where x is the state vector &lt;code&gt;[x-position; y-position; heading (yaw angle); velocity; acceleration; curvature or (yaw rate)]&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The trajectory must be smooth and should be exactly like the driven path of the leader vehicle. So I think some sort of estimation will be necesseray in order to avoid following the measurements in straight lines, which would lead to an unsteady trajectory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The mesurements of the heading, velocity and acceleration have a rather high variance depending on the situation.&lt;/p&gt;&#xA;" OwnerUserId="14683" LastEditorUserId="14683" LastEditDate="2016-09-12T10:36:08.107" LastActivityDate="2016-10-04T18:56:36.330" Title="Estimating state of moving object from other moving object" Tags="&lt;mobile-robot&gt;&lt;kalman-filter&gt;&lt;movement&gt;" AnswerCount="2" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="10632" PostTypeId="2" ParentId="10549" CreationDate="2016-09-11T00:53:59.863" Score="2" Body="&lt;p&gt;I would rather use:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Two separate voltage sources with ground connected (5V PSU from powerbank + LiPo battery for engines)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;or&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;One bigger LiPo battery with 5V regulator circuit for logic.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;But if You want to use your powerbank as only energy source, &lt;strong&gt;yes&lt;/strong&gt;, it is possible. However:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Take care of proper decoupling of 5V line. I mean, check datasheet of bridge you want to use, search for recommended connection schematic and use same capacitors, or at least close to them, as described.&lt;/li&gt;&#xA;&lt;li&gt;In order to protect your Raspberry from overvoltage, use &lt;a href=&quot;https://en.wikipedia.org/wiki/Zener_diode&quot; rel=&quot;nofollow&quot;&gt;Zener diode&lt;/a&gt;, reverse polarized, rated at 5.3V. It should short-circuit supply voltage line at voltages exceeding its nominal value. It shouldn't happen, since your powerbank has already voltage regulator, but if you want to connect H-Bridge with it, I recommend using it.&lt;/li&gt;&#xA;&lt;li&gt;Also, I'd recommend You to use different H-bridge, like TB6612FNG. It is capable of powering engines up to 13.5V at 1.6A per channel. It is also smaller and more energy efficient than L298N.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="14673" LastActivityDate="2016-09-11T00:53:59.863" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10633" PostTypeId="2" ParentId="10611" CreationDate="2016-09-11T10:42:45.253" Score="1" Body="&lt;p&gt;First things first. If You are studying computer science, &lt;strong&gt;learning embedded programming will not be waste of your time.&lt;/strong&gt; Actually, if you are interested in mobile projects like this, I recommend you to buy ATMega microcontroller with programmer and some electronics, or STM32 Nucleo board.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;About your question, I'd create a small PCB with ATMega88 in QFN package, rather than using Arduino, an RTC clock (like DS1307) and communicate them via I2C.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Two buttons would be nice - one for training start/stop, second for display (diodes won't be turned on constantly, only after pushing second button for ~5 seconds - energy saving).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, You could use &lt;a href=&quot;http://www.bot-thoughts.com/2014/12/bubble-display-propeller.html&quot; rel=&quot;nofollow&quot;&gt;small 7-segment display&lt;/a&gt; instead diodes. All these electronics powered by small, ~70mAh LiPo battery, induction charged. And closed in waterproof watch casing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Moreover, having two buttons and display mentioned above, you could change your training profile without device disassembly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yeah. That would be great for swimmers personal training.&lt;/p&gt;&#xA;" OwnerUserId="14673" LastActivityDate="2016-09-11T10:42:45.253" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10635" PostTypeId="1" CreationDate="2016-09-11T14:06:14.100" Score="0" ViewCount="559" Body="&lt;p&gt;My problem says that for the articulated arm shown determine:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/aiLx2.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/aiLx2.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The algorithm of the end effector position in terms of q1, q2, q3, q4 and q5 with de Modified Denavit Hartenberg convention and&lt;/li&gt;&#xA;&lt;li&gt;The coordinate of the end effector EF for the following data table.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I have already made the algorithm, can I have some help with all the matrices?&#xA;And also with the graphic forward kinematics?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/8Kf02.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8Kf02.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="14692" LastEditorUserId="10596" LastEditDate="2016-10-13T00:32:16.397" LastActivityDate="2016-11-12T01:05:46.883" Title="Denavit Hartenberg" Tags="&lt;forward-kinematics&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10636" PostTypeId="2" ParentId="10635" CreationDate="2016-09-12T01:39:45.077" Score="2" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Denavit%E2%80%93Hartenberg_parameters#Modified_DH_parameters&quot; rel=&quot;nofollow&quot;&gt;DH parameterization&lt;/a&gt; reduces the full transform between two joints to a transform with 4 parameters. This parameterization will fit many, but not all, possible kinematics. Let's assume that your instructor did not give you an impossible problem, and that your robot kinematics can be mapped to modified DH parameters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are 4 parameters between each joint and thus 4 basic transforms between each joint. For kinematics, the important thing is that the transforms take you to the axis (or line) of the next joint. It does not matter where on that line you arrive. By convention we say that the Z axis of each joint coordinate system is the axis we rotate about or translate along.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Imagine the axis/line of each joint to be infinitely long and you must use only the 4 transforms in sequence (Rotation about X, Translation along X, Rotation about Z, Translation along Z) to go from anywhere on one line to anywhere on the next. So the diagram of the DH transforms will often look different than the physical diagram of the robot. For example, it would be common to use parameters from Joint 1 to Joint 2 such that the location of Joint 2 would be where lines a and d cross in your diagram.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I do this I use my right hand held up with my thumb and first 2 fingers splayed to represent the Z, X, Y axis and move my hand through the air to help imagine the transforms. 4 transforms between each joint.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you figure out the sequence of motions you will be able to use your original diagram to find each of the 4 parameters, and you will be able to insert those parameters into the DH-modified matrices, and finally will be able to multiply them all together to arrive at the coordinate of the end effector.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2016-09-12T01:39:45.077" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10637" PostTypeId="2" ParentId="10631" CreationDate="2016-09-12T01:58:58.900" Score="1" Body="&lt;p&gt;It sounds like you can estimate everything you need to with a direct calculation of the transform between each vehicle since that is provided for you. For the derivative parameters, if your sensors give direct measurement (velocity from doppler on the radar for instance) you probably want to use those values rather than filtering.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Without knowing more I'd be a bit wary of the heading measurement. For instance, is it a direct measurement or an estimate from the velocity info?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The EKF seems unnecessary.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2016-09-12T01:58:58.900" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10638" PostTypeId="1" AcceptedAnswerId="10639" CreationDate="2016-09-12T02:53:56.697" Score="3" ViewCount="537" Body="&lt;p&gt;I actively take part in robotics competitions with my school's robotics club, and all of the line followers we use, are implemented using a PID algorithm (PD actually), but recently my electronics teacher told me to get my feet wet with fuzzy logic, he explained to me the reasons for why to use fuzzy logic (a mathematical model of a robot is hard to come up with, fuzzy logic is more &quot;human-friendly&quot; than PID, etc.) My question is if I should really bother with fuzzy logic or stay with PID, or maybe to change to another less known but better algorithm. The tracks that the robot has to follow are regular white over black continues ones, with no weird extras or anything like that, but most of them have marks on the sides of the beginning and end of every turn, but apart from that nothing else. So should I stick with PID or change to something else? Any advice would be very helpful, thanks.&lt;/p&gt;&#xA;" OwnerUserId="14694" LastActivityDate="2016-09-12T04:18:11.940" Title="What algorithm should I use for a line follower?" Tags="&lt;pid&gt;&lt;algorithm&gt;&lt;line-following&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10639" PostTypeId="2" ParentId="10638" CreationDate="2016-09-12T04:18:11.940" Score="1" Body="&lt;p&gt;For this task, using only PID would be adequate. However, It also depends on the response of your motors to control signals. You can also use fuzzy logic to tune the PID parameters, which are actually time consuming.&lt;/p&gt;&#xA;" OwnerUserId="14471" LastActivityDate="2016-09-12T04:18:11.940" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10640" PostTypeId="1" CreationDate="2016-09-12T07:00:20.847" Score="1" ViewCount="186" Body="&lt;p&gt;The IONI drive can accept a new setpoint using an analog input.  How many bits is the ADC on the IONI drive?  Is it 12, or 16 bit?&lt;/p&gt;&#xA;" OwnerUserId="14696" LastEditorUserId="37" LastEditDate="2017-03-09T18:31:42.337" LastActivityDate="2020-05-19T08:03:40.347" Title="Granite devices IONI servo drive" Tags="&lt;servomotor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10641" PostTypeId="1" CreationDate="2016-09-12T08:23:25.177" Score="1" ViewCount="70" Body="&lt;p&gt;Say, I have a flat square landing place for a copter, made of e.g. aluminium or plastic, with marks on it making a square, looking like this from the top:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;-------------------------------------&#xA;|                                   |&#xA;|   *                           *   |&#xA;|                                   |&#xA;|                                   |&#xA;|                                   |&#xA;|                  |                |&#xA;|                --+--              |&#xA;|                  |                |&#xA;|                                   |&#xA;|                                   |&#xA;|                                   |&#xA;|   *                           *   |&#xA;|                                   |&#xA;-------------------------------------&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The copter is smaller than the landing field, to land properly. Say, it has some sensors or can be manipulated by the computer that powers logic of the landing square. The square itself can have sensors too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want the copter to land as precisely as possible into the place marked by land signs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What ways are possible to implement this functionality knowing that it's a DIY prototype where I have no access to secret technology, but only to that is available in online electronic components stores?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think of these:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Having a camera either on the drone or on the landing plate that&#xA;finds the marks and calculates if these marks are in the right place&#xA;or if the drone must move along X or Y axis. Looks as an overkill and&#xA;will be hard to configure it for difficult conditions like raining,&#xA;night, snow.&lt;/li&gt;&#xA;&lt;li&gt;Using laser transmitters and receivers.&lt;/li&gt;&#xA;&lt;li&gt;Some solution I am not aware of but which is still simple and efficient enough.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In what direction should I look to find a solution for this problem?&lt;/p&gt;&#xA;" OwnerUserId="10234" LastEditorUserId="10234" LastEditDate="2016-09-12T08:31:40.883" LastActivityDate="2016-09-12T08:31:40.883" Title="How to precisely land a copter in a defined place?" Tags="&lt;quadcopter&gt;&lt;sensors&gt;&lt;uav&gt;" AnswerCount="0" CommentCount="6" ClosedDate="2016-09-13T11:29:02.900" ContentLicense="CC BY-SA 3.0" />
  <row Id="10642" PostTypeId="1" CreationDate="2016-09-12T08:33:38.623" Score="2" ViewCount="496" Body="&lt;p&gt;Can anyone throw some light on using accelerometers to measure  angular acceleration and hence angular velocity. This approach is to avoid gyroscopes due to drifting errors. Any links for this also would be very helpful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you.&lt;/p&gt;&#xA;" OwnerUserId="14376" LastActivityDate="2017-09-08T17:03:43.843" Title="Angular Velocity from dual tri axial accelerometers" Tags="&lt;accelerometer&gt;&lt;gyroscope&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10643" PostTypeId="1" AcceptedAnswerId="10651" CreationDate="2016-09-12T16:54:56.420" Score="0" ViewCount="55" Body="&lt;p&gt;I am trying to build a bot that is &quot;always on&quot;. I will be using a qi platform and am looking for a battery that charges through Qi. I've found several batteries that can charge your phone through Qi, but I am looking for one that charges itself through Qi. Any clue where I can find one like that? As a second question, do you think such an idea would work? Any foreseeable problems?&lt;/p&gt;&#xA;" OwnerUserId="14705" LastActivityDate="2016-09-13T19:56:28.280" Title="Qi Battery Pack" Tags="&lt;battery&gt;" AnswerCount="1" CommentCount="3" ClosedDate="2016-09-14T15:30:13.143" ContentLicense="CC BY-SA 3.0" />
  <row Id="10644" PostTypeId="1" CreationDate="2016-09-12T21:52:53.383" Score="1" ViewCount="70" Body="&lt;p&gt;I'm working on creating a robotic device capable of oscillating an adult human leg using the knee as pivot, being able to constrain the amplitude of oscillation by controlling the mechanism with a microcontroller and some other electronic components.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only idea I have to do this is by placing a pair of servomotors and some gears that will rotate the structure that holds the leg and then control the PWM, however I don't think I will be able to find servos strong enough to lift both the structure and the leg, so it would be very useful to hear some suggested mechanism and motors to accomplish this device. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/uKnnS.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/uKnnS.png&quot; alt=&quot;This is what I&amp;#39;ve tried to do&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="14708" LastEditorUserId="14708" LastEditDate="2016-09-13T03:08:55.573" LastActivityDate="2016-09-13T03:08:55.573" Title="Mechanism to oscillate a human leg?" Tags="&lt;motor&gt;&lt;design&gt;&lt;mechanism&gt;" AnswerCount="0" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="10647" PostTypeId="1" CreationDate="2016-09-13T04:24:27.810" Score="2" ViewCount="115" Body="&lt;p&gt;The Mars Exploration Rover (MER) &lt;em&gt;&lt;a href=&quot;http://www.nasa.gov/mp4/618340main_mer20120124-320-jpl.mp4&quot; rel=&quot;nofollow&quot;&gt;Opportunity&lt;/a&gt;&lt;/em&gt; landed on Mars on January 25, 2004. The rover was originally designed for a 90 &lt;strong&gt;Sol mission&lt;/strong&gt; (a Sol, one Martian day, is slightly longer than an Earth day at 24 hours and 37 minutes). Its mission has been extended several times, the machine is still trekking after 11 years on the Red Planet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How it has been working for 11 years? Can anyone explain &lt;strong&gt;&lt;em&gt;hardware-related aspects&lt;/em&gt;&lt;/strong&gt; and how smart this Rover is ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need to know how this rover is getting services on Mars regarding to hardware related issues?(if any hardware is not working properly, how it can be repair on the Red Planet?)  &lt;/p&gt;&#xA;" OwnerUserId="14713" LastEditorUserId="14713" LastEditDate="2016-09-15T11:35:13.203" LastActivityDate="2016-09-15T11:35:13.203" Title="How has the Mars Exploration Rover (MER) has been working for 11 years if it was designed for 90 Sol?" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;microcontroller&gt;&lt;wheeled-robot&gt;&lt;mechanism&gt;" AnswerCount="1" CommentCount="12" ClosedDate="2016-09-14T15:24:40.127" ContentLicense="CC BY-SA 3.0" />
  <row Id="10650" PostTypeId="1" CreationDate="2016-09-13T17:04:01.263" Score="3" ViewCount="486" Body="&lt;p&gt;My main problem is measuring joint torque/load economically. There are ways to detect the electric current drawn which is proportional to the torque. Since my motor is a BLDC motor, there will be a driver which drives the 3 phases and hence  the current drawn will also include losses, which would be variable. Is there a proper way to estimate the load by sensing current?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any way to reliably get the torque/load on a motor joint, what are the common ways to do so without spending a ton of money on torque sensors?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do to link me to any papers/research on this subject, if you'd want to.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need to judge the load on the joints of a 6 dof robotic arm programmatically and detect unexpected impacts.&lt;/p&gt;&#xA;" OwnerUserId="9124" LastActivityDate="2016-09-18T17:50:05.560" Title="What are some ways to estimate torque/load on a robotic arm joint" Tags="&lt;motor&gt;&lt;robotic-arm&gt;&lt;brushless-motor&gt;&lt;torque&gt;&lt;current&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10651" PostTypeId="2" ParentId="10643" CreationDate="2016-09-13T19:56:28.280" Score="1" Body="&lt;p&gt;What you are looking for is a Qi receiver, that will allow you to transfer energy from a charging station to your robot. Charging a battery will be a separate task. Adafruit has a &lt;a href=&quot;https://www.adafruit.com/product/1901&quot; rel=&quot;nofollow&quot;&gt;module&lt;/a&gt; capable of providing 5V and 500mA. Or you can go for a complete wireless power bank with USB output. This will also give you 5V that you can use to power up your robot.&lt;/p&gt;&#xA;" OwnerUserId="7360" LastActivityDate="2016-09-13T19:56:28.280" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10652" PostTypeId="1" CreationDate="2016-09-13T22:38:42.473" Score="1" ViewCount="62" Body="&lt;p&gt;I've been developing an inspection rover with two miniature cameras on two dual axis gimbals.  I've tried analog, digital and now brushless servos from various R/C parts makers and all of them eventually develop a flutter or shake.  I am getting ready to step up to a more expensive servo that will be almost 30X more expensive than the typical $30 R/C servos I started with.  The loads seem to be easily controlled at first but after a few weeks the shaking starts and just gets worse until I replace the servo.  I've tried two different R/C controllers and that hasn't helped and I can't seem to control by programming my Spektrum DX-9 controller.  Any suggestions?&lt;/p&gt;&#xA;" OwnerUserId="14724" LastActivityDate="2016-09-14T09:01:02.793" Title="Servo motor eventual shake" Tags="&lt;servomotor&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10653" PostTypeId="1" AcceptedAnswerId="10655" CreationDate="2016-09-14T00:53:56.607" Score="2" ViewCount="1193" Body="&lt;p&gt;So I have this motor: &lt;a href=&quot;https://www.servocity.com/23-rpm-hd-premium-planetary-gear-motor-w-encoder&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.servocity.com/23-rpm-hd-premium-planetary-gear-motor-w-encoder&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;and this motor shield for my arduino uno:&#xA;&lt;a href=&quot;https://www.pololu.com/docs/pdf/0J49/dual_vnh5019_motor_driver_shield.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.pololu.com/docs/pdf/0J49/dual_vnh5019_motor_driver_shield.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;And no background in electronics to speak of. I cannot find a basic enough resource to tell me where to attach the wires, or really what they each do. The ones that are simple enough for me only deal with motors with a couple of wires. Information on motors with six wires go immediately to discussing things that are way beyond me, or at least use terms that I don't know.&lt;/p&gt;&#xA;&lt;p&gt;So the motor has six leads, and the only info I can find on them in the documentation are this: Black (Motor -), Red (Motor +), Green (Ground), Brown (Channel B), Yellow (Channel A), and Orange (Sensor Voltage +).&lt;/p&gt;&#xA;&lt;p&gt;I have the black and red hooked up to M1A and M1B on my shield, so I am able to turn the motor on, vary its speed and direction. I also had all the other wires hooked up to various pins mentioned in the &lt;a href=&quot;https://github.com/pololu/dual-vnh5019-motor-shield&quot; rel=&quot;nofollow noreferrer&quot;&gt;Demo sketch associated with the shield&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I have spent a week trying to figure this out on my own, but I am not getting anywhere (except that I know that hooking up orange to almost anything triggers a fault).&lt;/p&gt;&#xA;&lt;p&gt;So in addition to the four wires that are not connected to anything, I have these pins mentioned in the sketch that are also not connected to wires: D2 M1INA, D4 M1INB, D6 M1EN/DIAG, D9 M1PWM and A0 M1CS.&lt;/p&gt;&#xA;&lt;p&gt;I hope someone can provide a pointer to a resource or a good, plain-language explanation for what these wires and pin descriptions mean. Thanks in advance!&lt;/p&gt;&#xA;&lt;h1&gt;servocity&lt;/h1&gt;&#xA;" OwnerUserId="14726" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2018-10-30T06:39:19.803" Title="Need super-basic help with motor encoder" Tags="&lt;arduino&gt;&lt;motor&gt;&lt;encoding&gt;&lt;wiring&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10654" PostTypeId="2" ParentId="10647" CreationDate="2016-09-14T02:41:35.183" Score="5" Body="&lt;p&gt;There are 2 main reasons why the MER is still operating long after it's 90 Sol planned lifetime.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first is political, strategic, and can be summarized as 'Under promise, over deliver'. When a PI (principal investigator) proposes a high-risk scientific mission like this, they always frame the goals of the project such that their project is viewed successful even when things go wrong. If you say that your project lasted 11 years and then failed, that is one framing. If you say your project lasted 10 years longer than it was designed for, that is another framing of the same information that sounds much better. You can find many NASA projects where things went very wrong but the project was still viewed as successful. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second reason is statistical. It is difficult to truly understand the details of the quality of the components a machine is built from, and the conditions of operation that a machine will operate in. We can never know exactly how long a machine will operate before failing. But we can use prior experience and statistical calculations to get a pretty good estimate of how long a population of similar machines will operate before failure. A machine like the MER is very complex, and we apply the statistical analysis to each individual part, and all the combinations of the parts. In the end, it is likely that the design engineers actually had 90 Sol of operation as their goal. They would also have had a measure of certainty associated with that. Perhaps it was a 90% chance that the MER would last 90 Sol. Or perhaps it was 99.9%. The higher the certainty required, the more 'over design' is needed to guarantee that. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can research the term 'design life' to understand better these hardware related aspects.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2016-09-14T02:41:35.183" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10655" PostTypeId="2" ParentId="10653" CreationDate="2016-09-14T03:34:33.970" Score="4" Body="&lt;p&gt;The &quot;Green (Ground), Brown (Channel B), Yellow (Channel A), and Orange (Sensor Voltage +)&quot; wires connect to the encoder on the back of the motor and allow the use of quadrature to detect the number and direction of motor turns.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As noted on &lt;a href=&quot;https://www.servocity.com/23-rpm-hd-premium-planetary-gear-motor-w-encoder&quot; rel=&quot;nofollow noreferrer&quot;&gt;servocity's page for the motor&lt;/a&gt;, you can count the following numbers of cycles or events per rotation of the motor or of the output shaft:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Encoder: Cycles Per Revolution (Motor Shaft)                12&#xA;Encoder: Cycles Per Revolution (Output Shaft)            4,428&#xA;Encoder: Countable Events Per Revolution (Motor Shaft)      48&#xA;Encoder: Countable Events Per Revolution (Output Shaft) 17,712&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;An &quot;event&quot; refers to an edge, up or down, on either of the encoder channels.  A &quot;cycle&quot; refers to the two channels going through the four phases of one quadrature-encoder cycle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given the gear ratio 369:1, the motor probably spins about 8500 RPM to make 23 RPM on the output shaft.  A software-based quadrature decoder might have trouble keeping up with 6800 events per second (ie, 48*8500 = 408000 events per minute, or 1/60 as many per second) if the Arduino will be doing anything else besides quadrature decoding.  You could combine some of the code shown at &lt;a href=&quot;https://arduino.stackexchange.com/a/18221/3917&quot;&gt;an arduino.stackexchange answer&lt;/a&gt; with that at &lt;a href=&quot;https://arduino.stackexchange.com/a/16420/3917&quot;&gt;another arduino.stackexchange answer&lt;/a&gt; to see how many events per second you could count using software on an Arduino.  The 147 microseconds available per event (ie, 1000000 us / 6800 events) might or might not be enough; most likely you will need to use a hardware-based quadrature decoder and counter to track shaft location.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[Edit 3:] If the motor parameter you wish to control or measure is speed rather than position, a typical ATmega328-based Arduino board can count enough encoder events to give that information for a single motor.  For example, if using an Uno you could connect one encoder line to PD5, the T1 input pin on a '328.  With the motor running at full speed, Counter 1 would overflow about twice a second.  In its interrupt handler you would read the current value of micros, store it in a volatile variable, and set a change flag.  The interrupt handler could also add or subtract the counter value to a position total.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;[Edit 2:] Regarding the wiring, it appears that you should do like the following:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Pin# Color   Function             Hook to...&#xA;3.   Green   (Ground),               common ground&#xA;4.   Brown   (Channel B),            quad. decoder input 2&#xA;5.   Yellow  (Channel A),            quad. decoder input 1&#xA;6.   Orange  (Sensor Voltage +)      V+ (eg to logic +5 or +12)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;See &lt;a href=&quot;https://en.wikipedia.org/wiki/Rotary_encoder#Incremental_rotary_encoder&quot; rel=&quot;nofollow noreferrer&quot;&gt;wikipedia's Rotary Encoder article&lt;/a&gt; for more discussion of quadrature encoding/decoding, along with signal diagrams, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See &lt;a href=&quot;https://www.pololu.com/docs/0J49/7&quot; rel=&quot;nofollow noreferrer&quot;&gt;pololu's &quot;Using the Driver in Single-Channel Mode&quot;&lt;/a&gt; page for an explanation of pins like M1INA, M1INB, M1EN, etc.&lt;/p&gt;&#xA;" OwnerUserId="478" LastEditorUserId="478" LastEditDate="2018-10-30T06:39:19.803" LastActivityDate="2018-10-30T06:39:19.803" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="10656" PostTypeId="2" ParentId="10652" CreationDate="2016-09-14T07:29:23.347" Score="1" Body="&lt;p&gt;It means that your servos are too weak to handle load. After some time gears and electronics usage is getting worse, so PID of servos is not set properly anymore. That causes flickering. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What exactly servos were You using? From my experience, I'd recommend Dynamixel servos, since they are strong, compact and programmable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you dont want to spend that much, KDS servos are also an option. They are designed for 3D helicopters, thus have great rotational speed (0,07s/60°) and are powerful.&lt;/p&gt;&#xA;" OwnerUserId="14673" LastEditorUserId="14673" LastEditDate="2016-09-14T09:01:02.793" LastActivityDate="2016-09-14T09:01:02.793" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10657" PostTypeId="1" CreationDate="2016-09-14T07:59:39.150" Score="3" ViewCount="149" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/4asV7.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4asV7.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;Above illustration is the basic setup for the question. The scenario will be the following:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;A potentiometer(providing 0 to 5V) is an analog input to A0. This&#xA;  potentiometer voltage is converted to PWM(pin9) which controls a fan&#xA;  M1. Which means the human controls directly the M1 fan speed.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;This directly speed-controlled M1 fan creates air pressure on a sensor&#xA;  Sen1.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;On the other hand I want M2 fan to reach to a speed(via pin10 PWM)&#xA;  such that Sen2 should output the same voltage as Sen1. Which means&#xA;  eventually voltage at A1 analog input should be equal to A2. So one&#xA;  can achieve same air pressures at Sen1 and Sen2.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I'm not experienced in PID or other type of controls. I would be glad if someone can help me to relate parameters and code this scenario. I was suggested to ask here instead of Arduino stack-exchange.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;edit: Do you think I can use the following &lt;a href=&quot;https://johnwilliamrussell.wordpress.com/2014/09/21/pid-control-of-a-led/&quot; rel=&quot;nofollow noreferrer&quot;&gt;idea&lt;/a&gt;.  If I make changes as following: PWM to LED in that example will be PWM to M2 in mycase; poti input in the example will be Sen1 input in mycase. And LDR input in the example will be Sen2 input in mycase. Do you think it is worth to try?&lt;/p&gt;&#xA;" OwnerUserId="14731" LastEditorUserId="10596" LastEditDate="2016-09-23T12:40:44.693" LastActivityDate="2017-02-25T15:09:09.370" Title="Need help modelling and coding a feedback scenario" Tags="&lt;arduino&gt;&lt;pid&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10661" PostTypeId="2" ParentId="10650" CreationDate="2016-09-14T16:17:01.837" Score="5" Body="&lt;p&gt;&lt;strong&gt;Model Based&lt;/strong&gt;:&#xA;Low cost solution is always software:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Develop a dynamic model which computes the load on the motors based on the motions (e.g. with Recursive Newton Euler Algorithm or Lagrange-Euler Method)&lt;/li&gt;&#xA;&lt;li&gt;Make as simple model to handle losses in driver/motor&lt;/li&gt;&#xA;&lt;li&gt;Make the difference between real torque and computed torque&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;It will be not accurate. At least 10% off based on how accurately you can build up your model. Example &lt;a href=&quot;http://www6.in.tum.de/Main/Publications/Pereira2015.pdf&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Strain Gauges&lt;/strong&gt;:&#xA;If you have a section on each linkage which is geometrical known (it helps if it has a regular shape like a cylinder) you can use strain gauges to measure the strain of the linkage and if the material is know and you measure it in the required directions you can calculate the load on the linkage. &#xA;The signal has to be heavily amplified so this can lead to complications when routing the signal cables next to motor cables on the robot. Tutorial &lt;a href=&quot;http://www.ni.com/white-paper/3642/en/#&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Optical force sensors&lt;/strong&gt;:&#xA;They might be cheaper then classical force sensors, but the maximum load they can measure is limited. Example &lt;a href=&quot;http://optoforce.com/sixaxis/&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Force-Torque sensors&lt;/strong&gt;:&#xA;As you mentions, these are expensive. Mostly similar principle then with the strain gauges, but it is packages, so you do not have to deal with amplification, thermal drifts, interfaces, etc. Example &lt;a href=&quot;http://www.ati-ia.com/products/ft/sensors.aspx&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2016-09-14T16:17:01.837" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10662" PostTypeId="1" AcceptedAnswerId="10664" CreationDate="2016-09-14T21:39:33.863" Score="3" ViewCount="953" Body="&lt;p&gt;I have my IMU and I can get &lt;code&gt;attitude&lt;/code&gt; (pitch, roll, yaw) as well as &lt;code&gt;gyro&lt;/code&gt; (x, y, z)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as I can tell, &lt;code&gt;attitude&lt;/code&gt; is all I need to stabilize my drone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any reason to implement &lt;code&gt;gyro&lt;/code&gt; or will &lt;code&gt;attitude&lt;/code&gt; suffice?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-- EDIT --&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems the benefit of &lt;code&gt;gyro&lt;/code&gt; is an immediate response to an outside factor effecting drone stability.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Example:&#xA;A gust of wind hits your &lt;code&gt;drone&lt;/code&gt;. The &lt;code&gt;attitude&lt;/code&gt; will not be quick enough combat the effects of wind. As far as I can tell, the gyro will be the best way to combat extreme wobble and outside influences such as wind / tether (leash).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-- EDIT 2 --&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's been a while since I posted this but I should add in that I ended up leveraging the infamous &lt;a href=&quot;https://www.hackster.io/ElvisWolcott/drone-basics-pid-83da06&quot; rel=&quot;nofollow noreferrer&quot;&gt;PID algo&lt;/a&gt; for my arduino. &lt;/p&gt;&#xA;" OwnerUserId="9941" LastEditorUserId="9941" LastEditDate="2019-04-22T15:33:30.033" LastActivityDate="2019-04-22T15:33:30.033" Title="Stabilizing a Drone" Tags="&lt;quadcopter&gt;&lt;imu&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10664" PostTypeId="2" ParentId="10662" CreationDate="2016-09-15T06:39:28.920" Score="7" Body="&lt;p&gt;Gyro is needed to stabilize angular acceleration. Knowing only your &lt;code&gt;attitude&lt;/code&gt;, drone doesn't know how fast on which axis is rotating, knows only where is gravity vector. &lt;code&gt;Gyro&lt;/code&gt; gives you feedback on angular acceleration and that's what gives your drone stability.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, you can use only &lt;code&gt;gyro&lt;/code&gt; in your drone, it will stabilize movement, but won't get back to horizontal flight/hovering position (depending if You are building multicopter or plane).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To fully stabilize your drone flight, you should use both &lt;code&gt;gyro&lt;/code&gt; and &lt;code&gt;attitude&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="14673" LastActivityDate="2016-09-15T06:39:28.920" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10665" PostTypeId="1" CreationDate="2016-09-15T20:53:13.800" Score="1" ViewCount="313" Body="&lt;p&gt;I am controlling an IRobot Create 2 with a raspberry pi, which I am powering with one of these:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.adafruit.com/product/1566&quot; rel=&quot;nofollow&quot;&gt;https://www.adafruit.com/product/1566&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(I know, I know, I should have just gotten power from the battery thats already in the roomba)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyways.  I am trying to read electric current values flowing through the roomba as it cleans.  I should be getting negative values (which I did previous to using the battery).  My code was working, although I know that doesn't mean much.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After much thought, I was wondering if maybe the roomba is drawing power through the serial port from the raspberry pi, giving it a slight charge even though it is not on the charger.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this possible, and is there a way to confirm or deny my suspicions?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help is appreciated.&lt;/p&gt;&#xA;" OwnerUserId="14743" LastActivityDate="2016-09-15T20:53:13.800" Title="Irobot Create 2 drawing power from Pi" Tags="&lt;raspberry-pi&gt;&lt;irobot-create&gt;&lt;battery&gt;&lt;serial&gt;" AnswerCount="0" CommentCount="3" FavoriteCount="1" ClosedDate="2016-09-16T12:59:03.807" ContentLicense="CC BY-SA 3.0" />
  <row Id="10666" PostTypeId="1" CreationDate="2016-09-16T04:30:06.517" Score="1" ViewCount="441" Body="&lt;p&gt;I have a 7 pin cable connected to the OI port of my Create 2. While the Create is on the floor away from the dock, if I touch the BRC pin (7) to the ground pin (5), the Create wakes up, makes a beep, and the green Clean button light turns on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, if I put the Create on the dock and let it sit for several minutes and then touch the BRC pin to the ground pin, nothing happens.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a method for waking up/starting the Create while it is on the dock/charging?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Note: I have seen this answer and it does not solve the issue &lt;a href=&quot;https://robotics.stackexchange.com/questions/7895/irobot-create-2-powering-up-after-sleep&quot;&gt;IRobot Create 2: Powering Up after Sleep&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I send a command or try to fetch sensor data after the Create has been sitting on the dock for several minutes, I get no response and the Create doesn't do anything (no lights, sounds, movements, etc).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While the Create is already awake, the response from a restart command (0x7) looks like this&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;bl-start&#xA;STR730&#xA;bootloader id: #x4718535E 7DDBCFFF&#xA;bootloader info rev: #xF000&#xA;bootloader rev: #x0001&#xA;2007-05-14-1715-L&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;EDIT: simplified the scope of the question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT 2: added info from Jonathan's questions.&lt;/p&gt;&#xA;" OwnerUserId="14744" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2018-04-18T00:59:50.600" Title="Wake up iRobot Create 2 while on dock" Tags="&lt;irobot-create&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10667" PostTypeId="1" AcceptedAnswerId="10947" CreationDate="2016-09-16T09:52:17.477" Score="3" ViewCount="757" Body="&lt;p&gt;For a mobile robot - four wheels, front wheel steering - I use the following (bicycle) &lt;strong&gt;prediction model&lt;/strong&gt; to estimate its state based on accurate radar measurements only. No odometry or any other input information $u_k$ is available from the mobile robot itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{bmatrix}&#xA;      x_{k+1} \\&#xA;      y_{k+1} \\&#xA;      \theta_{k+1} \\&#xA;      v_{k+1} \\&#xA;      a_{k+1} \\&#xA;      \kappa_{k+1} \\&#xA;    \end{bmatrix} = &#xA;    f_k(\vec{x}_k,u_k,\vec{\omega}_k,\Delta t) =&#xA;    \begin{bmatrix}&#xA;      x_k + v_k \Delta t \cos \theta_k \\&#xA;      y_k + v_k \Delta t \sin \theta_k \\&#xA;      \theta_k + v_k \kappa_k \Delta t \\&#xA;      v_k + a_k \Delta t \\&#xA;      a_k \\&#xA;      \kappa_k + \frac{a_{y,k}}{v_{x,k}^2}&#xA;    \end{bmatrix}&#xA;    +&#xA;    \begin{bmatrix}&#xA;      \omega_x \\&#xA;      \omega_y \\&#xA;      \omega_{\theta} \\&#xA;      \omega_v \\&#xA;      \omega_a \\&#xA;      \omega_{\kappa}&#xA; \end{bmatrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $x$ and $y$ are the position, $\theta$ is the heading and $v$, $a$ are the velocity and acceleration respectively. Vector $\vec{\omega}$ is zero mean white gaussian noise and $\Delta t$ is sampling time. These mentioned state variables $\begin{bmatrix} x &amp;amp; y &amp;amp; \theta &amp;amp; v &amp;amp; a \end{bmatrix}$ are all measured although $\begin{bmatrix} \theta &amp;amp; v &amp;amp; a \end{bmatrix}$ have high variance. The only state that is not measured is curvature $\kappa$. Therfore it is computed using the measured states $\begin{bmatrix} a_{y,k} &amp;amp; v_{x,k}^2\end{bmatrix}$ which are the lateral acceleration and the longitudinal velocity. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My &lt;strong&gt;Question:&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a better way on predicting heading $\theta$, velocity $v$, acceleration $a$, and curvature $\kappa$?&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Is it enough for $a_{k+1}$ to just assume gaussian noise $\omega_a$ and use the previous best estimate $a_k$ or is there an alternative?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;For curvature $\kappa$ I also thought of using yaw rate $\dot{\theta}$ as $\kappa = \frac{\dot{\theta}}{v_x}$ but then I would have to estimate the yaw rate too.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;To make my nonlinear filter model complete here is the &lt;strong&gt;measurement model&lt;/strong&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{equation}&#xA;   \label{eq:bicycle-model-leader-vehicle-h}&#xA;   y_k = h_k(x_k,k) + v_k =&#xA;   \begin{bmatrix}&#xA;     1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\&#xA;     0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\&#xA;     0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\&#xA;     0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\&#xA;     0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \\&#xA;   \end{bmatrix}&#xA;   \begin{bmatrix}&#xA;     x_k \\&#xA;     y_k \\&#xA;     \theta_k \\&#xA;     v_k \\&#xA;     a_k \\&#xA;     \kappa_k \\&#xA;   \end{bmatrix}&#xA;   +&#xA;   \begin{bmatrix}&#xA;     v_x \\&#xA;     v_y \\&#xA;     v_{\theta} \\&#xA;     v_v \\&#xA;     v_a \\&#xA;   \end{bmatrix}&#xA; \end{equation}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;More Info on the available data&lt;/strong&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The measured state vector is already obtained/estimated using a kalman filter. What I want to achive is a smooth trajectory with the estimate $\kappa$. For this it is a requirement to use another Kalman filter or a moving horizon estimation approach.&lt;/p&gt;&#xA;" OwnerUserId="14683" LastEditorUserId="14683" LastEditDate="2016-09-16T11:47:42.637" LastActivityDate="2016-10-30T14:25:14.920" Title="State estimation of mobile robot" Tags="&lt;mobile-robot&gt;&lt;kalman-filter&gt;&lt;motion&gt;&lt;movement&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="10668" PostTypeId="2" ParentId="10667" CreationDate="2016-09-16T10:33:25.560" Score="0" Body="&lt;p&gt;Kalman filters and other state-estimation techniques are based on analog computing. In most cases differential equations are used. A better solution is based on grammar techniques aka turing-machines. A paper which is using context free grammars for state-estimation is given &lt;a href=&quot;https://www.ece.ubc.ca/~vikramk/WK08.pdf&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;. The idea in short: the measurements are interpreted as a stream of tokens like a computerlanguage  and a parser interprets the sentences. To generate such parser motion primitive are used (simple Finite-States-Machines which describes a possible movement of the robot)&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2016-09-16T10:33:25.560" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="10670" PostTypeId="2" ParentId="10537" CreationDate="2016-09-16T14:10:59.077" Score="1" Body="&lt;p&gt;When your exteroceptive sensor is a LiDAR, the most common way to perform graph-based SLAM is to use &lt;em&gt;pose-graphs&lt;/em&gt;. The nodes in a pose-graph - as the name implies - are all poses (no features/landmarks). Instead of matching features/landmarks between scans, you match the scans themselves using some variant of ICP (of which there are many). The output of ICP gives you the relative transformation between the poses, which is an edge in the graph.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any two poses with enough overlap between LiDAR measurements should in theory generate an edge in your pose-graph. That means sequential poses will have them, but the key to getting an accurate map is detecting when non-sequential poses (i.e., you drove the robot in a circle and have returned to the start) have overlap in their measurements. This is called a &lt;em&gt;loop closure&lt;/em&gt; and can substantially improve the accuracy of the estimated poses by curtailing the effects of dead-reckoning.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you have your accurate pose-graph, you simply generate a map with the LiDAR measurements at each pose. There are many ways to do this as well, the most common being just generating a massive point cloud, or filling in an occupancy grid.&lt;/p&gt;&#xA;" OwnerUserId="4320" LastActivityDate="2016-09-16T14:10:59.077" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10672" PostTypeId="1" AcceptedAnswerId="10673" CreationDate="2016-09-17T07:10:41.160" Score="3" ViewCount="128" Body="&lt;p&gt;Robots can be better than humans. If we attach a wheel to a robot, it can move faster than a human with legs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But why then is a lot of research going on to make robots look, walk and talk like humans. Wouldn't it be better to make robots better than humans and not to be limited by the human body parameters?&lt;/p&gt;&#xA;" OwnerUserId="14756" LastEditorUserId="9860" LastEditDate="2016-09-17T11:21:44.487" LastActivityDate="2016-09-17T12:38:49.827" Title="Why are robots made to mimic humans actions? Isn't it better to make them better than Humans?" Tags="&lt;research&gt;&lt;humanoid&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10673" PostTypeId="2" ParentId="10672" CreationDate="2016-09-17T12:18:40.250" Score="6" Body="&lt;h2&gt;&lt;em&gt;better&lt;/em&gt; you say ?&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;That's a nice wheeled robot you have there. Can I borrow it for a day? Thanks.&#xA;Wow, it's really fast, I cannot keep up with it walking or running on the street.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Truly an amazing machine. I'd like to show it to my friends and family. They are waiting in my flat that's on the 3rd floor up the stairs...what do you mean it &lt;strong&gt;cannot move over stairs&lt;/strong&gt;? It might be possible with some additional dedicated mechanics? I think you are stretching the meaning of the word &quot;better&quot; a little here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So maybe your robot is not made for buildings. Let's go hiking. Uh huh? A &lt;strong&gt;narrow steep path with rocks and twigs&lt;/strong&gt; is a difficult terrain for your robot to move around? Maybe we stop right here, because up in the mountains, there are some places where you have to perform jumps from one rock to another. Nothing fancy, the distance is about 1 meter, something the average adult human is easily capable of. Now I'm afraid that your &lt;strong&gt;robot might not be able to jump at all&lt;/strong&gt;. Is that correct?&#xA;I would have loved to show my new &quot;better&quot; robot friend a hobby of mine: &lt;strong&gt;rope walking&lt;/strong&gt;. Is it physically able to perform that action? &lt;strong&gt;If so, is it able to learn it?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe that robot is more of a beach boy? Let's go! ... What a bummer! It looks like those &lt;strong&gt;wheels aren't working at all on sand&lt;/strong&gt;. I cannot take the robot along. But then what would be the point in doing that anyway, I suspect that &lt;strong&gt;this machine can neither swim nor dive&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If we attach a wheel to a robot, it can move faster than a human with legs.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;We do not need a robot for that. Any car will be better than a human &lt;strong&gt;&lt;em&gt;for a few specific properties under very specific conditions&lt;/em&gt;&lt;/strong&gt;. The human (and other animals) can &lt;strong&gt;adopt to many environments and perform many different motions&lt;/strong&gt;. Even in previously &lt;strong&gt;unknown situations&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only rule in this game is called &lt;strong&gt;survival of the fittest&lt;/strong&gt;, not necessarily the fastest, strongest, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And this is all just about motion. Let's say your robot can do all of the above, does it&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;weight ~100kg or less?&lt;/li&gt;&#xA;&lt;li&gt;work without external help? (no gps, no cloud computing, ...)&lt;/li&gt;&#xA;&lt;li&gt;have a &lt;strong&gt;continuous coat of sensors&lt;/strong&gt; that allows it to detect possible environmental dangers in order to protect itself from that? What if I approach your &quot;better&quot; robot with a blowtorch?&lt;/li&gt;&#xA;&lt;li&gt;have a built in &lt;strong&gt;energy harvesting system&lt;/strong&gt; capable of converting various kinds of materials (food) into usable energy?&lt;/li&gt;&#xA;&lt;li&gt;have the ability to &lt;strong&gt;heal&lt;/strong&gt; (!!!) minor damages on its own? &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Yeah, that RC car you got there can probably outpace a human. That makes it better in this single discipline under the suitable environmental conditions. Therefore calling it &lt;em&gt;better&lt;/em&gt; than a human is a conclusion that I do not agree with.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;a matter of compatibility&lt;/h2&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;But why then is a lot of research going on to make robots look, walk and talk like humans.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Because that's the interface that we have to our world. If you build a self driving car, you could easily come up with some electronic radio system to tell the car what road signs there are. But that means that you have to put this new system in place &lt;strong&gt;in parallel to the existing road signs&lt;/strong&gt;.&#xA;You'd have to duplicate a whole lot of infrastructure to make it usable by robots. The robot would then be unable to perform in situations where this system he needs is not in place. Compare this to people in wheel chairs. They cannot use stairs either. This means a lot of effort to create additional ramps in front of buildings. They are humans, so we obviously do that. But I doubt anybody would want to buy a robot if that would require applying massive changes to their building.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The robot should adopt to our world, not the other way round.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additionally, &lt;strong&gt;it's a proven design&lt;/strong&gt;. The idea behind bionics is that we are surrounded by stuff that's &lt;strong&gt;out there for thousands if not millions of years&lt;/strong&gt;. Ignoring that and starting from scratch is just stupid from an engineering perspective.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Wouldn't it be better to make robots better than humans and not to be limited by the human body parameters?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's an inspiration, an idea, not a goal. I doubt that any researcher is trying to build an exact copy of a human. It's not like they consider it a failure if their humanoid robot would be able to run faster than human, jump higher or bet them at chess.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But as mentioned above, a humanoid robot is compatible to other humans, while being able to adopt to a wide range of environments and situations and seems to be a decent concept overall. From an engineering point of view, it seems to be a plausible direction for research.&lt;/p&gt;&#xA;" OwnerUserId="9860" LastActivityDate="2016-09-17T12:18:40.250" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10678" PostTypeId="2" ParentId="10650" CreationDate="2016-09-18T17:50:05.560" Score="1" Body="&lt;p&gt;50k4 did a good job of enumerating the different ways to measure torque in the joints.  So I won't go into that.  But if you want to detect unexpected impacts, another option is to use accelerometers.  Example &lt;a href=&quot;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.706.4001&amp;amp;rep=rep1&amp;amp;type=pdf&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2016-09-18T17:50:05.560" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10679" PostTypeId="1" CreationDate="2016-09-18T18:00:44.910" Score="2" ViewCount="203" Body="&lt;p&gt;Standard particle filters can produce bad localization result if the initial particle generation step produces no particle that is close to location (and bearing) of tracked object. The accuracy depends on large number of particles to create at least one particle that's very close to state of tracking object.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could we introduce in resampling stage a small number of completely random new particles? For example, 99% of particles are randomly selected with weighted probability, while 1% are new particles with random state.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My reasoning is that new particles that are bad guesses would quickly disappear, while good guesses would improve accuracy beyond what was possible with fixed particle pool. Does this improvement to particle filters make sense?&lt;/p&gt;&#xA;" OwnerUserId="14768" LastActivityDate="2016-09-18T18:00:44.910" Title="Introducing new particles in particle filters for localization" Tags="&lt;localization&gt;&lt;particle-filter&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="10680" PostTypeId="1" AcceptedAnswerId="10699" CreationDate="2016-09-18T21:05:13.177" Score="4" ViewCount="4491" Body="&lt;p&gt;After a fair bit of research into industrial robot arms I've learned that a lot of them use components like harmonic drives and sometimes cycloidal gearboxes. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Two main questions:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;How feasible are these for use in a hobby project? I do have several thousand dollars at my disposable to build a 6 DOF arm. Arm goals at a glance: 1m total reach, 5kg payload, reasonable speed.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;What sources would you recommend? Online the sites seem very specialized, gotta go through sales reps, etc, which kind of worries me regarding the prices lol. Plus for Harmonic Drives I only found one &lt;a href=&quot;http://www.harmonicdrive.net/&quot; rel=&quot;nofollow&quot;&gt;vendor&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Side/related question: would buying from China work out alright or would I not get what I'm looking for (namely: good torque at &amp;lt;1 arcmin backlash)? &lt;a href=&quot;https://www.alibaba.com/product-detail/eccentric-reducer-harmonic-cyclo-drive-gearbox_60452661408.html?spm=a2700.7724838.0.0.zLjRsc&amp;amp;s=p&quot; rel=&quot;nofollow&quot;&gt;E.g&lt;/a&gt;. &#xA;Another &lt;a href=&quot;https://www.alibaba.com/product-detail/CORT-cycloidal-gearbox_60461333055.html?spm=a2700.7724838.0.0.VDo3Ga&quot; rel=&quot;nofollow&quot;&gt;example&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;--&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have little experience with this technology (precision eccentric gearing), but would definitely like to explore it and purchase test equipment to construct a basic arm. Thanks for any help, looking for a decent starting point.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT -- I would like to use one of these special gearboxes with a NEMA stepper motor if possible (and if it saves cost) since we have a bunch of those lying around, heh.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT2 -- Curious if this item would actually have some sort of strain wave gearing inside of &lt;a href=&quot;https://www.aliexpress.com/item/3-jaw-Chuck-50mm-CNC-4th-axis-harmonic-drive/32662064833.html?ws_ab_test=searchweb201556_0,searchweb201602_2_10057_10056_10065_10037_10068_10055_10054_10069_301_10059_10058_10032_10073_10017_10070_10060_10061_10052_10062_10053_10050_10051,searchweb201603_1&amp;amp;btsid=a049019b-cd21-4e8d-b9a4-32cd43c5723f&quot; rel=&quot;nofollow&quot;&gt;it&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If so this seems very affordable and could provide decent precision on part of a robot arm.&lt;/p&gt;&#xA;" OwnerUserId="6858" LastEditorUserId="10596" LastEditDate="2016-09-21T17:40:56.657" LastActivityDate="2019-03-25T15:59:01.703" Title="Harmonic drives in hobby projects" Tags="&lt;motor&gt;&lt;robotic-arm&gt;&lt;gearing&gt;" AnswerCount="3" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10681" PostTypeId="1" CreationDate="2016-09-19T13:13:42.963" Score="2" ViewCount="1479" Body="&lt;p&gt;I've been looking around for a lidar/radar rangefinder for a few months now and can't seem to find anything reasonable for my application.  My requirements are pretty straightforward:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;100m range&lt;/li&gt;&#xA;&lt;li&gt;I2C or other serial protocol&lt;/li&gt;&#xA;&lt;li&gt;Accuracy +/- 0.25m&lt;/li&gt;&#xA;&lt;li&gt;Sampling &gt; 50hz&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;This isn't a spinning/mapping application, so sampling rate isn't very demanding, and I don't think I'm asking much regarding accuracy, but I can't find anything for less than $600.  It seems like there's a bit of a hole in the market?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The closest ive come is the lidar lite from pulsed lite (now Garmin), but its only good up to 40m, and I've had one backordered for 4 months now!  If they offered this product in an 80 or even 60m application it would help me, but 40m isnt quite enough.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would assume the technology/demand just isn't out there that anyone is cheaply Producing this device, but I see lots of lidar based rangefinders for golf courses/gun sitting/etc that are around $100 in price and work in these ranges.  What's different about these technologies? &lt;a href=&quot;https://jet.com/product/detail/d02d0657e367484494d8c811c7edcc06?jcmp=pla:ggl:gen_cameras_optics_a1:optics_rangefinders_a1_other:na:PLA_348795060_24231781380_pla-174024324060:na:na:na:2&amp;amp;code=PLA15&amp;amp;ds_c=gen_cameras_optics_a1&amp;amp;ds_cid=&amp;amp;ds_ag=optics_rangefinders_a1_other&amp;amp;product_id=d02d0657e367484494d8c811c7edcc06&amp;amp;product_partition_id=174024324060&amp;amp;gclid=CJf0mejAm88CFdgOgQodRpsAAQ&amp;amp;gclsrc=aw.ds&quot; rel=&quot;nofollow&quot;&gt;Example&lt;/a&gt;.  What technology does this use and are there sensors out there that I can buy direct?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also found &lt;a href=&quot;http://www.lightware.co.za/shop/en/drone-altimeters/51-sf11c-120-m.html&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt;, but seems specific to altimeters. Is there something about this device that would only make it applicable for drone altimeter applications?  I know there must be considerations for the incoming environmental light and reflectiveness of the surface it's detecting,so possibility it wouldn't work in an outside application where environmental lighting will vary?  And also this device doesn't call itself 'lidar', so let's ask a very basic question:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are all laser rangefinders considered 'lidar'?  Surprisingly I haven't found this answer.&lt;/p&gt;&#xA;" OwnerUserId="14775" LastEditorUserId="110" LastEditDate="2016-09-19T14:15:34.370" LastActivityDate="2016-09-21T22:04:17.287" Title="Inexpensive lidar/radar rangefinder good up to 100m?" Tags="&lt;laser&gt;&lt;lidar&gt;&lt;rangefinder&gt;" AnswerCount="1" CommentCount="6" ClosedDate="2016-09-28T13:18:12.277" ContentLicense="CC BY-SA 3.0" />
  <row Id="10682" PostTypeId="2" ParentId="10680" CreationDate="2016-09-19T14:45:06.137" Score="2" Body="&lt;ol&gt;&#xA;&lt;li&gt;Two parts:&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;a) If we take into account the cost of harmonic drives and the fact that hobbyist projects aren't intended to make money (no revenue in return), harmonic drives aren't feasible at all for hobbyist projects. &lt;/li&gt;&#xA;&lt;li&gt;b) Since you are willing to do build a hobbyist-grade robotic arm, I think it would be better if you define the desired specs of your arm then based on this you should start looking for components, or building your own&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;I think answering point 2, should be done after you answer point 1-b.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;For a hobby poject I would always keep in mind the &quot;cost&quot; point, because a robotic arm that uses the same tech and at a similar price point as professional industrial ones is no longer a &quot;hobby project&quot;.&lt;/p&gt;&#xA;" OwnerUserId="14590" LastEditorUserId="9720" LastEditDate="2016-12-07T19:53:41.323" LastActivityDate="2016-12-07T19:53:41.323" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10683" PostTypeId="2" ParentId="10681" CreationDate="2016-09-19T14:55:17.600" Score="1" Body="&lt;p&gt;Check &lt;a href=&quot;http://www.lightware.co.za/shop/en/scanning-and-obstacle-detection/45-sf40c-100-m.html&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt;, starting from the last part:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think they are using the same technology as the several of their &lt;a href=&quot;http://www.lightware.co.za/shop/en/drone-altimeters/38-sf30c.html&quot; rel=&quot;nofollow&quot;&gt;sensors&lt;/a&gt;: ( the &lt;a href=&quot;http://www.lightware.co.za/shop/en/drone-altimeters/51-sf11c-120-m.html&quot; rel=&quot;nofollow&quot;&gt;one you mentioned&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the 100 dollar price range I think you will not find anything that meets  your demands.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have no experience with golf laser range finders.&lt;/p&gt;&#xA;" OwnerUserId="14590" LastEditorUserId="10596" LastEditDate="2016-09-21T22:04:17.287" LastActivityDate="2016-09-21T22:04:17.287" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="10686" PostTypeId="1" CreationDate="2016-09-19T19:20:19.013" Score="1" ViewCount="4519" Body="&lt;p&gt;I'd like to attach some extra equipment to the iRobot. Does anyone have any idea of a weight limit before mobility is restricted or it just breaks? Could it possibly carry a few extra pounds? &lt;/p&gt;&#xA;" OwnerUserId="14779" LastActivityDate="2016-09-20T12:01:15.583" Title="How much weight can the iRobot carry?" Tags="&lt;irobot-create&gt;" AnswerCount="2" CommentCount="1" ClosedDate="2016-09-20T13:27:05.123" ContentLicense="CC BY-SA 3.0" />
  <row Id="10687" PostTypeId="1" AcceptedAnswerId="10688" CreationDate="2016-09-19T21:22:36.210" Score="2" ViewCount="237" Body="&lt;p&gt;Whats the name of the technique used to read symbols with computer vision?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Like the one used for this wood cutter:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://www.artificialintelligenceonline.com/wp-content/uploads/2016/08/tc-logo-3-1.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to use something like this to measure distance from the camera to a piece of tape with symbols, or read QR-like symbols to recognize areas, but I can't find information on this because I don't know how this technique or method is called.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is it called?&lt;/p&gt;&#xA;" OwnerUserId="14781" LastEditorUserId="37" LastEditDate="2017-06-13T11:16:58.290" LastActivityDate="2017-06-13T11:16:58.290" Title="What the name of this kind of computer vision?" Tags="&lt;computer-vision&gt;&lt;identification&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10688" PostTypeId="2" ParentId="10687" CreationDate="2016-09-19T22:36:48.760" Score="2" Body="&lt;p&gt;The general term is &quot;feature detection&quot;. But this is very broad. It basically means to find anything in an image that fits to some description. A feature could be a line, point, blob, etc. A detector would be able to tell you the position of a feature in an image.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is where computer vision ends and photogrammetry begins.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to make a connection between the 2D image and the 3D reality it represents, you need a mathematical model of the camera (intrinsic parameters) and it's pose (extrinsic parameters). In your case, the former could be obtained via calibration of the camera and the latter via feature detection in the image. Basically speaking, if you know where the points are in your image and you know the size and pattern of the tape in real life, you can calculate the position and orientation of the camera from that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The popular library OpenCV does all of the above and a lot more. For the second part of my answer, check this: &lt;a href=&quot;http://docs.opencv.org/trunk/d9/d0c/group__calib3d.html&quot; rel=&quot;nofollow&quot;&gt;http://docs.opencv.org/trunk/d9/d0c/group__calib3d.html&lt;/a&gt; for the first part, you have to find the feature detector that suits your needs, depending on what you want to detect (or write your own)&lt;/p&gt;&#xA;" OwnerUserId="9860" LastEditorUserId="9860" LastEditDate="2016-10-16T12:03:48.413" LastActivityDate="2016-10-16T12:03:48.413" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10689" PostTypeId="2" ParentId="10686" CreationDate="2016-09-20T02:06:33.313" Score="3" Body="&lt;p&gt;My dad actually works as a a software designer for iRobot and he tells me that exceeding 15-20 lbs is probably the limit for a load with which the robot can function normally. Personally though, I would just test it out with increasing weights (if you're worried about it breaking, it is built to withstand a 180 lb guy standing on it). However, he also mentioned that with the added weight, it won't be able to accurately measure the magnitude of its acceleration so the cliff safety features (what makes it stop before it tumbles down the stairs) may not work as intended so definitely be careful about that.&lt;/p&gt;&#xA;" OwnerUserId="14567" LastActivityDate="2016-09-20T02:06:33.313" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10690" PostTypeId="1" CreationDate="2016-09-20T06:52:21.623" Score="1" ViewCount="364" Body="&lt;p&gt;I am following the code obtained in matlab file exchange for the paper &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://ieeexplore.ieee.org/document/4655611/&quot; rel=&quot;nofollow&quot;&gt;http://ieeexplore.ieee.org/document/4655611/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;He calculates the Hessian matrix as follows using Jacobian Matrix J,&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;**H = inv(J'*J); % Hessian matrix,** &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;How is this relation true. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And also the &lt;strong&gt;g&lt;/strong&gt; value used is 1 to construct the COST function to be minimized using LEAST SQUARES , but should'nt it be the local gravity value at the particular place you are carrying out the calibration?? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Link to the code :&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://in.mathworks.com/matlabcentral/fileexchange/33252-mems-accelerometer-calibration-using-gauss-newton-method/content/CalibAccel.m&quot; rel=&quot;nofollow&quot;&gt;MATLAB Code&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please throw some light on this. &#xA;Thank You.&lt;/p&gt;&#xA;" OwnerUserId="14376" LastEditorUserId="14376" LastEditDate="2016-09-20T07:00:35.310" LastActivityDate="2016-09-20T16:25:23.387" Title="Gauss Newton Method for Accelerometer calibration" Tags="&lt;accelerometer&gt;&lt;calibration&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10692" PostTypeId="2" ParentId="10686" CreationDate="2016-09-20T12:01:15.583" Score="1" Body="&lt;p&gt;Note that this question has been answered before. If you are using the iRobot Create 2, the answer is found here: &lt;a href=&quot;https://robotics.stackexchange.com/questions/5132/what-is-the-maximum-payload-weight-for-create-2-can-i-use-old-create-accessories/5136#5136&quot;&gt;What is the maximum payload weight for create 2/can I use old create accessories with the Create 2?&lt;/a&gt;&#xA;For the original iRobot Create, the answer is here: &lt;a href=&quot;https://robotics.stackexchange.com/questions/2045/questions-about-irobot-create&quot;&gt;Questions about Irobot Create&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7665" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2016-09-20T12:01:15.583" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10694" PostTypeId="1" AcceptedAnswerId="10700" CreationDate="2016-09-20T14:19:36.213" Score="1" ViewCount="206" Body="&lt;p&gt;I am building a two wheeled robot which will have:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;max speed of 10km/h and acceleration of 0.5m/s²&lt;/li&gt;&#xA;&lt;li&gt;can climb 12° slopes&lt;/li&gt;&#xA;&lt;li&gt;weighs at most 30 kg &lt;/li&gt;&#xA;&lt;li&gt;wheel diameter is 50cm&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;By doing the calculations myself, and checking with many online automatic calculator I find that in the &quot;worst&quot; possible conditions I would need :&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Around 9.5Nm of torque&lt;/li&gt;&#xA;&lt;li&gt;Around 100Rpm for speed&#xA;Which results in approximately a 100W motor.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;When I look for suitable motors online I come across a lot of sites recommending different motors depending on robot weight.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An &lt;a href=&quot;http://www.superdroidrobots.com/shop/category.aspx/52mm-gear-motors/78/&quot; rel=&quot;nofollow&quot;&gt;example&lt;/a&gt; would be.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where this kind of motor is recommended for up to 150lbs robots and it is a 30-50W motor (I believe they use 4 of them).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is the power I'm looking for in my case too &quot;overkill&quot;? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Seeing as this is an indoor robot but which will need to be able to go up slopes to reach different areas, do I need to find a motor that corresponds exactly to my numbers or do I need to get something even more powerful since efficiency is never 100%? &lt;/p&gt;&#xA;" OwnerUserId="14588" LastEditorUserId="10596" LastEditDate="2016-09-21T15:46:32.770" LastActivityDate="2016-09-22T04:42:42.790" Title="Choosing motor to buy after calculations" Tags="&lt;mobile-robot&gt;&lt;wheeled-robot&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10695" PostTypeId="1" AcceptedAnswerId="10698" CreationDate="2016-09-20T15:01:58.980" Score="6" ViewCount="6245" Body="&lt;p&gt;I've been thinking about building a small UAV with an onboard LIDAR, just for fun. I'm interested in SLAM and autonomous flight indoors and thought that I would need a lidar to get a 3D map of the environment. Now, I've spent some more time looking into SLAM techniques and have seen very impressive results with simple RGB cameras, not even necessarily stereo setups. For instance, &lt;a href=&quot;http://vision.in.tum.de/research/vslam/lsdslam&quot; rel=&quot;noreferrer&quot;&gt;these&lt;/a&gt; &lt;a href=&quot;http://vision.in.tum.de/research/vslam/dso&quot; rel=&quot;noreferrer&quot;&gt;results&lt;/a&gt; of the CV group of TU Muenchen. They are capable of constructing 3D pointclouds from simple webcams, in real-time on a standard CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question: are there cases where you'd still need a LIDAR or can this expensive sensor be replaced with a standard camera? Any pros/cons for either sensors?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm going to list some pros/cons that I know/can think of:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;LIDARs are better at detecting featureless objects (blank walls) whereas a vision-based SLAM would need some features. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Using LIDARs would be computationally less intensive than reconstructing from video&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The single RGB camera 3D reconstruction algorithms I found need some movement of the camera to estimate depth whereas a LIDAR does not need any movement.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Using a single camera for SLAM would be cheaper, lighter and possibly have a better resolution than a LIDAR.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerDisplayName="user12985" LastEditorDisplayName="user12985" LastEditDate="2016-09-20T15:11:42.430" LastActivityDate="2016-10-03T18:46:03.370" Title="Are there any advantages to using a LIDAR for SLAM vs a standard RGB camera?" Tags="&lt;slam&gt;&lt;computer-vision&gt;&lt;stereo-vision&gt;&lt;lidar&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="10696" PostTypeId="2" ParentId="10690" CreationDate="2016-09-20T16:25:23.387" Score="2" Body="&lt;p&gt;$J^T \times J$ is an approximation to the Hessian which comes from the Levenberg Marquardt Algorithm.  It is a least-squares approach, and seems to be used frequently in a variety of optimization problems (such as training artificial neural networks).  See equations 6 and 7 of Appendix A from this paper &lt;a href=&quot;http://scholarcommons.usf.edu/cgi/viewcontent.cgi?article=4593&amp;amp;context=etd&quot; rel=&quot;nofollow&quot;&gt;http://scholarcommons.usf.edu/cgi/viewcontent.cgi?article=4593&amp;amp;context=etd&lt;/a&gt; for a derivation.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2016-09-20T16:25:23.387" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10698" PostTypeId="2" ParentId="10695" CreationDate="2016-09-20T19:20:20.067" Score="5" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;My question: are there cases where you'd still need a LIDAR or can&#xA;  this expensive sensor be replaced with a standard camera? ...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;A each one of them has its advantages/disadvantages. Thus in some cases it would be more suitable to choose a lidar instead of a camera and vice-versa.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;A LIDAR doesn't require light to perceive the environment whereas a camera won't be useful in the absence of light.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A LIDAR would fail to detect walls made of glass, since the rays would pass through the walls. In the case of a single camera, I have no I idea how good/bad the results would be but also it would see through the glass (not sure about this part as I have not tested a monocular slam in case there are glass walls/facades, but with a laser it would fail).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Price which is very important and you've mentioned it.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Using LIDARs would be &lt;strong&gt;computationally less intensive&lt;/strong&gt; than&#xA;  reconstructing from video&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It depends how many points a LIDAR measures, and how many of them you use to construct the map the computational requirements vary a lot. (have a look at velodyne lidars and check how many points/sec they measure). &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Using a single camera for SLAM would be cheaper, lighter and&#xA;  &lt;strong&gt;possibly have a better resolution than a LIDAR&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The resolution depends on the LIDAR and camera you use, so you cannot generalize and say one is better than the other.&lt;/p&gt;&#xA;" OwnerUserId="14590" LastEditorUserId="10596" LastEditDate="2016-10-03T18:46:03.370" LastActivityDate="2016-10-03T18:46:03.370" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="10699" PostTypeId="2" ParentId="10680" CreationDate="2016-09-20T20:20:28.020" Score="7" Body="&lt;p&gt;The core reason for choosing harmonic drives is desire for zero backlash. Moreover, regarding mass and size, they become more beneficial for higher gear ratios as their size and mass do not scale for higher ratios. More specifically, they take up very little axial space and use only one stage of reduction. They are beneficial for high precision tasks and various difficult control tasks (such as balancing and walking). You first have to ask yourself if you have a high desire for these properties, because there is a price to pay...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Harmonic drives from the vendor you state are of high quality. They are precise, designed for a long lifespan and have good load/weight ratios. From experience, the price tag is approximately 1000 euros per harmonic drive for only the component set (consisting of the wave generator, circular spline and flex spline). Expect to pay more if you want a complete unit (i.e. including housing with input and output shafts and bearings). It is recommended to buy a full unit, because also the housing has high requirements (for instance, both input and output shafts have to be fixed axially and centered to high accuracy) and assembly is not trivial.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As someone already stated, &quot;Harmonic Drives&quot; is in fact trade marketed by the Harmonic Drive company. The principle mechanism is referred to as strain wave generator. You will certainly find more vendors with that name. Whereas it is quite possible that you pay slightly more for the name tag &quot;Harmonic Drive&quot;, alarm bells should start ringing if the price is off by a full order of magnitude. Be sure to compare specifications, but also be cautious with them. Different companies use different standards for determining their load ratios; company A in country B may have more of a reputation and legal status to defend than company C in country D. Cheaper strain wave generators might be machined from soft (non-hardened) steel, machined with poor tolerances and may use slightly different principles that use more and smaller parts. As for the latter, the elliptically shaped bearing in the wave generator could for instance be replaced by two ordinary ball bearings, lowering the quality. All could lead to increase of backlash, periodic wobble, lower load ratings, reduced life span and lower efficiency. At this point, it might be worth considering to step back to more common transmissions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is difficult to give a direct and quantified answer to your question, because we (or I, at least) simply have not tried all B-brands out there. You would have to buy and try.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To give you a short tldr answer to your main question: no, stay away from harmonic drives as a hobbyist, unless you have serious money and/or time to spend.&lt;/p&gt;&#xA;" OwnerUserId="10547" LastActivityDate="2016-09-20T20:20:28.020" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="10700" PostTypeId="2" ParentId="10694" CreationDate="2016-09-21T00:42:51.040" Score="2" Body="&lt;p&gt;Since you don't know what assumptions they had in mind when they estimated the motor was good for a robot of a specific weight, I would not trust that. You have established your own requirements and calculations, which is awesome. Trust and build on that. Use the provided datasheets for the motors. The datasheets from Shayang Ye (the manufacturer of the gearmotor you linked) tend to require a bit extra conversion and work to use, but all the info you need is there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The more operating conditions you can predict, the better you will be able to select the best motor the first time. Your 9.5*Nm*100*RPM is probably an estimate of the power to the environment and so you will need to estimate the power losses from the wheel-environment contact and the gearbox and other friction to arrive at the motor power you need. Losses of 30%-50% is what I would use for high level calculations like this. With a clean operating environment and high quality components losses might be as low as 10% but you are starting with low quality gearmotors so...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Electric motors operating at their maximums generate a lot of heat and can usually be operated at that maximum for a short amount of time. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;High quality DC motor manufacturers usually show an estimate of what performance to expect if you want to guarantee no overheating. You can use their catalogs (Faulhaber, Maxon Motor are examples) to get an idea of how this will affect you. Look up motors of similar power or size to what you want and look at the graphs they provide. Expect that your low quality motor will heat a bit faster.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your robot is big enough that you may find a larger motor to be useful. Search for brushless wheelchair motors for some more options a bit bigger but with similar cost/quality. &lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2016-09-21T00:42:51.040" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10701" PostTypeId="1" CreationDate="2016-09-21T08:47:33.197" Score="5" ViewCount="866" Body="&lt;p&gt;I am trying to integrate Angular acceleration obtained from a set of accelerometers positioned specifically at opposite corners of a cube, based on &lt;a href=&quot;http://absynth-project.org/Papers/bsn10.pdf&quot; rel=&quot;nofollow&quot;&gt;&quot;EcoIMU: A Dual Triaxial-Accelerometer Inertial Measurement Unit for Wearable Applications&quot;&lt;/a&gt; paper.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am getting the angular acceleration on each Axis &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This signal is quite noisy .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then after integrating angular acceleration to angular velocity using trapezoidal rule , I get signals which drifts heavily and randomly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I understand that noise and also numerical integration is causing the effect. Other than low pass filtering the data, is there any other methods to reduce noise. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And the major factor for the drift is numerical integration, how can this be handled.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please help me out with this. &lt;/p&gt;&#xA;" OwnerUserId="14376" LastEditorUserId="7360" LastEditDate="2016-09-21T14:15:33.853" LastActivityDate="2018-07-04T07:59:16.723" Title="Drift in Integrating Angular Acceleration to Angular Velocity using two accelerometer data" Tags="&lt;accelerometer&gt;&lt;integration&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10702" PostTypeId="1" CreationDate="2016-09-21T12:09:45.380" Score="4" ViewCount="9477" Body="&lt;p&gt;In rotation matrix, Why do we rotate the first and third rotation in the opposite direction of the 2nd rotation, this is confusing. &#xA;Image is attached with this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/W3hip.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/W3hip.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this image we can note that for x and Z rotation non zero elements are same. But for Y rotation sign of sin(theta) changed. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;why is so?&lt;/p&gt;&#xA;" OwnerUserId="14024" LastActivityDate="2020-08-03T19:07:15.900" Title="Rotation matrix sign convention confusion." Tags="&lt;inverse-kinematics&gt;&lt;rotation&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10703" PostTypeId="2" ParentId="10702" CreationDate="2016-09-21T14:01:46.767" Score="9" Body="&lt;p&gt;I think that the main issue is that you're trying to read your rotation matrices from left to right. The sign changes seem random, but actually cycle in an ordinary way. Below follows a more elaborate explanation with some more background information.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's start with the question:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A) Why do minuses appear at all?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Followed by:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;B) Why do minuses appear where they appear?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;A)&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From a mathematical point of view, it is not possible to construct a strictly positive rotation matrix. This can easily be deduced from the property that rotation matrices are skew-symmetric, i.e. $R=R^{-T}$. As such, it is not possible to define a rotation matrix without minuses or zeros appearing on non-diagonal elements. For example, it is &lt;strong&gt;&lt;em&gt;not&lt;/em&gt;&lt;/strong&gt; possible to define (a real number) $\theta$ (representing an angle) in any way to obtain the following matrix and call it a rotation matrix:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$R\neq\left[\begin{matrix}\cos{\theta} &amp;amp; \sin{\theta} \\ \sin{\theta} &amp;amp; \cos{\theta} \end{matrix}\right]$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(This matrix is 2D but the same applies to 3D)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A more intuitive explanation is that all three axes of the Cartesian coordinate system are defined to be orthogonal to each other, i.e. at 90 degrees. If mapping a horizontal coordinate component from Y to X requires a rotation of 90 degrees, it follows that mapping from X to Y (i.e. the cross-diagonal element on the rotation matrix) requires a rotation of -90 degrees. The difference between the two is 180 degrees, i.e. a change of sign.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;B)&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, minus has to appear somewhere, but why are they appearing as they do? For instance, in a 2D X-Y coordinate system where X is pointing right and Y is pointing up, we could define rotation $\theta$ to be counter-clockwise (cc), or clockwise (c) leading to either of the following two rotation matrices respectively:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$R_{cc}=\left[\begin{matrix}\cos{\theta} &amp;amp; -\sin{\theta} \\ \sin{\theta} &amp;amp; \cos{\theta} \end{matrix}\right]$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$R_{c}=\left[\begin{matrix}\cos{\theta} &amp;amp; \sin{\theta} \\ -\sin{\theta} &amp;amp; \cos{\theta} \end{matrix}\right]$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you may already know, we have (nearly) globally accepted to use the former. It is just a convention, defining axes to point to the right and up and the rotation to be counter-clockwise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, let's move to 3D. We cannot simply speak of clockwise and counter-clockwise and right and up anymore, because we are not forced to observe the image from a specific direction. To fix this minor issue, we rewrite our conventions such that they are also applicable in 3D:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) We use right-handed Cartesian coordinated systems:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/0hxY1m.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0hxY1m.png&quot; alt=&quot;Right-handed coordinated system&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) We use right-handed rotations:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Hyw9Lm.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Hyw9Lm.gif&quot; alt=&quot;Right-handed rotation&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, if you look straight at the X-Y coordinate system along Z, we obtain the same coordinate system we had in 2D (Y pointing up, X pointing right). We find that Z is pointing towards you. Due to Z pointing towards you, the rotation will be counter-clockwise and we use the rotation matrix $R_{cc}$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;We can do the same for the Y-Z coordinate system (Z pointing up, Y pointing right), along X. Now X will be pointing towards you. Again, we use $R_{cc}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next, we have the Z-X coordinate system (X pointing up, Z pointing right), along Y. We find exactly the same, i.e. Y pointing towards you. However, Z-X does not appear as obvious in the rotation matrix, because our (flat) matrix has finite width and height rather than being circular.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you read your rotation matrix from left to right, what appears is the X-Z coordinate system instead of the Z-X coordinate system, also along Y, but now we see that Y is pointing away from you now. This changes the direction of rotation. Hence, you see $R_c$ appearing instead of $R_{cc}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Analysing X-Y, Y-Z and Z-X makes more sense than X-Y, Y-Z and X-Z. Try to read your rotation matrix in a more cyclic way, rather than from left to right, if that makes any sense... Try to think of X, Y and Z as independent entities, rather than Y being greater than X and Z being greater than Y, and thus greater than X. Perhaps replace them for apple, orange and banana instead.&lt;/p&gt;&#xA;" OwnerUserId="10547" LastEditorUserId="10547" LastEditDate="2016-09-21T14:37:10.310" LastActivityDate="2016-09-21T14:37:10.310" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="10704" PostTypeId="2" ParentId="10702" CreationDate="2016-09-22T00:54:55.590" Score="1" Body="&lt;p&gt;The convention of these rotation matrices follow the same positive direction of rotation as the &lt;a href=&quot;https://en.m.wikipedia.org/wiki/Cross_product#Coordinate_notation&quot; rel=&quot;nofollow&quot;&gt;cross product in a right handed coordinate system&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So a 90° rotation around the x-axis maps the y-axis to the positive z-axis and the z-axis to the negative y-axis; a 90° rotation around the y-axis maps the z-axis to the positive x-axis and the x-axis to the negative z-axis; a 90° rotation around the z-axis maps the x-axis to the positive y-axis and the y-axis to the negative x-axis.&lt;/p&gt;&#xA;" OwnerUserId="1487" LastActivityDate="2016-09-22T00:54:55.590" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10705" PostTypeId="2" ParentId="10694" CreationDate="2016-09-22T04:42:42.790" Score="1" Body="&lt;p&gt;From my experience, you should try to find motor that is 1.5 to 2 times the calculated power. This is to account for additional losses mainly due to the friction and inefficiency in the power transmission mechanisms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In some designs, even after you have factored in all the losses and you have found the right motor, there are other criteria such as space constraint and suitability of the power source that should be taken into account.&lt;/p&gt;&#xA;" OwnerUserId="10691" LastActivityDate="2016-09-22T04:42:42.790" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10707" PostTypeId="2" ParentId="10701" CreationDate="2016-09-23T02:13:23.053" Score="0" Body="&lt;p&gt;My suggestion would be to work in a Kalman Filter. Using this, you can get a much more accurate picture of what the accelerometers are actually experiencing without the signal noise from drift. This, in turn, will offer you a much clearer resolution for your angular velocity integration data. Unfortunately, I'm very shaky with the math behind Kalman Filters so you're going to have to figure that part out yourself. :) &lt;a href=&quot;https://en.wikipedia.org/wiki/Kalman_filter&quot; rel=&quot;nofollow&quot;&gt;Here&lt;/a&gt; is the wikipedia page if you want to look at that, and if you're not great with matrix math either, there are tons of tutorials out there specifically dealing with the matrix math in Kalman Filters which you can check out.&lt;/p&gt;&#xA;" OwnerUserId="14567" LastActivityDate="2016-09-23T02:13:23.053" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10709" PostTypeId="2" ParentId="8387" CreationDate="2016-09-23T14:46:02.080" Score="1" Body="&lt;p&gt;You have asked a complex question, and from your question it seems that there a lot of basic underlying concepts that you are not familiar with. Since you are new to ODEs, path planning and possibly robotics I would advise to take a stepwise approach:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Take a look at how s-curves trajectory planning is done for robotic manipulators. You will se how the trajectory equation looks like for positions, velocities, accelerations and possibly jerks. The way the trajectory is defined will surly explain what is the ODE when talking about trajectory planning. You can find explanations &lt;a href=&quot;http://www-lar.deis.unibo.it/people/cmelchiorri/Files_Robotica/FIR_07_Traj_1.pdf&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt; and here &lt;a href=&quot;http://www.diag.uniroma1.it/~deluca/rob1_en/13_TrajectoryPlanningJoints.pdf&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt; and second half of &lt;a href=&quot;http://www.ene.ttu.ee/elektriajamid/oppeinfo/materjal/AAR0040/03_Robotics.pdf&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt; document&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Take a look at path planning with obstacle avoidance. Here you can learn how optimality criteria (cost function) are defined and used. &lt;a href=&quot;https://www.youtube.com/watch?v=f2wk6xEdSGk&quot; rel=&quot;nofollow&quot;&gt;Here&lt;/a&gt; and &lt;a href=&quot;http://ais.informatik.uni-freiburg.de/teaching/ss11/robotics/slides/18-robot-motion-planning.pdf&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt; and the first half of this &lt;a href=&quot;http://www.ene.ttu.ee/elektriajamid/oppeinfo/materjal/AAR0040/03_Robotics.pdf&quot; rel=&quot;nofollow&quot;&gt;document&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Read about optimal control. Before solving complex problems with optimal control, solve simple examples and make sure you understand them. Introduction &lt;a href=&quot;http://www.cmapx.polytechnique.fr/~boscain/AUTOMATICS/introduction-to-optimal-control.pdf&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Combine all of the above. If you know how trajectory planning works, how path planning works and how optimal control works, you are in a position to combine them.  &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2016-09-23T14:46:02.080" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10712" PostTypeId="1" AcceptedAnswerId="10730" CreationDate="2016-09-24T03:51:27.283" Score="1" ViewCount="547" Body="&lt;p&gt;For my robotics arm project I have recently come across the following ball bearing at low discount price which I think could make a great rotary table for my &lt;a href=&quot;http://www.bearingscanada.com/6213-Bearing-Deep-Groove-6213-Ball-Bearings-p/6213-deep-groove-6213-ball.htm&quot; rel=&quot;nofollow&quot;&gt;arm&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However it does not seem to have any mounting connectors, and the inner and outer rings are the same height. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My mechanical creativity is a bit limited, but my goal is to drive (spin) it with a large stepper motor (I have 34 and 42 series available which, even ungeared, should be enough for my smaller arm). On top of the rotary table that I'm trying to create will sit a U-channel that will hold the rest of the robot arm. So in the bottom of that channel I will drill holes and connect it to... something.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If anyone could point me to, recommend, or create a simple design - I have access to basic metalworking tools and scrap aluminum - that would be absolutely fantastic. My main goal is to work with what I have: the bearing, stepper motors, aluminum, other things at a standard hardware store.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;BTW, here is how I refer to the standard robot axes (of a 6-DOF industry bot) by &lt;a href=&quot;https://www.robots.com/faq/show/what-are-six-axis-robots&quot; rel=&quot;nofollow&quot;&gt;name&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6858" LastEditorUserId="10596" LastEditDate="2016-09-25T13:35:14.413" LastActivityDate="2016-09-27T15:58:19.370" Title="How to construct rotary turn table (S/J1 axis) from ball bearing?" Tags="&lt;robotic-arm&gt;&lt;industrial-robot&gt;&lt;rotation&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ClosedDate="2016-10-12T13:14:21.833" ContentLicense="CC BY-SA 3.0" />
  <row Id="10713" PostTypeId="1" AcceptedAnswerId="10946" CreationDate="2016-09-24T10:32:02.380" Score="2" ViewCount="134" Body="&lt;p&gt;In (nonlinear) moving horizon estimation the aim is to estimate an unknown state sequence $\{x_k\}_{k=0}^T$ over a moving horizon N using measurements $y_k$ up to time $T$ and a system model as constraint. All the papers I've seen so far &lt;a href=&quot;http://ieeexplore.ieee.org/document/7171854/&quot; rel=&quot;nofollow&quot;&gt;1&lt;/a&gt;,&lt;a href=&quot;http://ieeexplore.ieee.org/document/1178905/?arnumber=1178905&quot; rel=&quot;nofollow&quot;&gt;2&lt;/a&gt;,&lt;a href=&quot;http://folk.ntnu.no/torarnj/nonlinear.pdf&quot; rel=&quot;nofollow&quot;&gt;3&lt;/a&gt; the following cost function is used: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\phi = \min_{z,\{\omega_k\}_{k = T-N}^{T-1}} \sum_{k = T-N}^{T-1} \underbrace{\omega_k^TQ^{-1}\omega_k + \nu_k^TR^{-1}\nu_k}_{\text{stage cost } L_k(\omega,\nu)} + \underbrace{\mathcal{\hat{Z}}_{T-N}(z)}_{\text{approximated arrival cost}}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The noise sequence $\{\omega_k\}_{k = T-N}^{T-1}$ should be optimized/minimized in order to solve for the unknown state sequence using the prediction model:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;x_{k+1} = f(x_k,\omega_k)&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;whereas the measurement model is defined as &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;y_k = h(x_k) + \nu_k&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;with additive noise $\nu$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The question&lt;/strong&gt; is what exactly is $\omega_k$ in the stage cost?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the papers $\nu$ is defined to be &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\nu_k = y_k - h(x_k)&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, $\omega_k$ remains undefined.&#xA;If I can assume additive noise $\omega$ in the prediction model, I think $\omega_k$ is something like the follwoing:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\omega_k = x_{k+1} - f(x_k)&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If this should be correct, then my next Problem is that I don't know the states $x_k$, $x_{k+1}$ (they should be estimated).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it possible that my guess for $\omega_k = x_{k+1} - f(x_k)$ is &quot;wrong&quot; and it is enough to just consider:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the measurement $\nu_k = y_k - h(x_k)$ in the cost function $\phi$&lt;/li&gt;&#xA;&lt;li&gt;the prediction model as constraint?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;And let the optimization do the &quot;rest&quot; in finding a possible solution of a noise sequence $\{\omega_k\}_{k = T-N}^{T-1}$? In this case which Matlab solver would you suggest? I thought of using &lt;a href=&quot;http://uk.mathworks.com/help/optim/ug/lsqnonlin.html&quot; rel=&quot;nofollow&quot;&gt;lsqnonlin&lt;/a&gt; since my problem is a sum of squares. Is it possible to use lsqnonlin with the prediction model as constraint?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://ieeexplore.ieee.org/document/7171854/&quot; rel=&quot;nofollow&quot;&gt;1&lt;/a&gt; Fast Moving Horizon Estimation of nonlinear processes via Carleman linearization&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://ieeexplore.ieee.org/document/1178905/?arnumber=1178905&quot; rel=&quot;nofollow&quot;&gt;2&lt;/a&gt; Constrained state estimation for nonlinear discrete-time systems: stability and moving horizon approximations&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://folk.ntnu.no/torarnj/nonlinear.pdf&quot; rel=&quot;nofollow&quot;&gt;3&lt;/a&gt; Introduction to Nonlinear Model Predictive Control and Moving Horizon&#xA;Estimation&lt;/p&gt;&#xA;" OwnerUserId="14683" LastEditorUserId="9860" LastEditDate="2016-09-24T19:05:26.783" LastActivityDate="2016-10-30T14:15:37.403" Title="What exactly is $\omega_k$ in the stage cost of moving horizon estimation?" Tags="&lt;algorithm&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="10714" PostTypeId="1" CreationDate="2016-09-24T10:42:35.997" Score="1" ViewCount="375" Body="&lt;p&gt;I'm trying to find a way where I can estimate the location of my drone on a floorplan. Note that right now, I will just be moving the drone around manually and not flying it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I read up on PDR and what I want to do is this:&#xA;Provide an initial location of my drone on the floorplan, and as I move the drone around, using information from the IMU/accelerometers, I want to update the position of my drone on the floorplan.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've worked with ROS a bit and I want to know if there are packages in ROS that could do this. For now, I'm looking for rough estimates and not perfect solutions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="14822" LastActivityDate="2016-09-24T10:58:01.990" Title="ROS : Performing 2-D Pedestrian Dead Reckoning on an AR Drone and displaying location on a floorplan" Tags="&lt;localization&gt;&lt;ros&gt;&lt;dead-reckoning&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2016-09-26T10:42:43.937" ContentLicense="CC BY-SA 3.0" />
  <row Id="10715" PostTypeId="2" ParentId="10714" CreationDate="2016-09-24T10:58:01.990" Score="0" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;using information from the IMU/accelerometers&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;These sensors will accumulate error and will not provide a good estimate of the position of the drone after some time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you need is some absolute reference point. You need to make some kind of connection between the sensor data and the surrounding area that you are trying to localise yourself in. Check out &lt;a href=&quot;/questions/tagged/slam&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;slam&amp;#39;&quot; rel=&quot;tag&quot;&gt;slam&lt;/a&gt;, which is the general term used for this kind of stuff. If you know the environment and already have a map, the task simplifies to &lt;a href=&quot;/questions/tagged/localization&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;localization&amp;#39;&quot; rel=&quot;tag&quot;&gt;localization&lt;/a&gt;, but a few of the things from slam might still apply.&lt;/p&gt;&#xA;" OwnerUserId="9860" LastActivityDate="2016-09-24T10:58:01.990" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10716" PostTypeId="2" ParentId="10713" CreationDate="2016-09-24T18:10:39.480" Score="0" Body="&lt;p&gt;Before i answer your question directly let me first clarify some semantics. The problem which is described here is called &quot;State Estimation&quot; in general with the complement of &quot;Moving Horizon&quot;. It can be dated back to Norbert Wiener's &quot;control theory&quot; in the 1940s. The goal of Wiener was to use external sensor information for continuous update a modell. For example, for tracking airplanes. He invented a linear filter which is a stochastic concept for dealing with uncertainty.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason why I give this short lecture in history of state-esitimation is because the concept of Norbert Wiener is buggy. It never worked, there is no possibility to determine the stage-cost with a stochastic model. The better concept which was invented after the work of Wiener is to use Action Grammars for State-Estimation. Most work on this topic was done at the university Maryland and by Neil T. Dantam who published a lot. A short introduction paper is &lt;a href=&quot;https://arxiv.org/pdf/1609.04946v1.pdf&quot; rel=&quot;nofollow&quot;&gt;Robot Contact Task State Estimation via Position-based Action Grammars&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2016-09-24T18:10:39.480" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10717" PostTypeId="1" AcceptedAnswerId="10907" CreationDate="2016-09-24T22:23:59.787" Score="2" ViewCount="174" Body="&lt;p&gt;I'm using an  Extended Kalman filter where the motion model is a function of the states and the inputs, with additive white noise, i.e. &#xA;$$ x_k = f(x_{k-1},u_{k-1}) +\delta_{k-1} \quad , \quad \delta_{k-1} \sim N(0,\Delta_{k-1})$$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If $x_{k-1}$ and $u_{k-1}$ are know, then the prediction step is done as&#xA;$$\hat{x}_{k|k-1} = f(\hat{x}_{k-1|k-1},u_{k-1}) $$&#xA;$$ f' = \frac{\partial F}{\partial x_{k-1}}\Big|_{x_{k-1}=\hat{x}_{k-1|k-1}~,~u=u_{k-1}} $$&#xA;$$ P_{k|k-1} = f'P_{k-1|k-1}f $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, at some time steps I won't know the value of $u$, the input. What is the optimal way to perform the prediction step in this scenario? &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;My thoughts so far are to set&#xA;$$\hat{x}_{k|k-1} = \hat{x}_{k-1|k-1} ~,$$&#xA;since I have no new information to update it... but no idea how to estimate the covariance matrix $P_{k|k-1}$.&lt;/p&gt;&#xA;" OwnerUserId="799" LastActivityDate="2016-10-23T02:57:40.273" Title="How to update an EKF when no inputs are available?" Tags="&lt;kalman-filter&gt;&lt;filter&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10718" PostTypeId="1" CreationDate="2016-09-25T15:09:58.417" Score="1" ViewCount="16" Body="&lt;p&gt;I'm starting out in more complex robotics, which in this case includes the bilateral stabilization of a humanoid robot. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that when a human walks, his/her pelvis moves in correspondence, which allows for a basic stabilization when being on one leg in between steps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm wondering about how to replicate this type of effect in a humanoid robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you for your time!&lt;/p&gt;&#xA;" OwnerUserId="14825" LastActivityDate="2016-09-25T15:09:58.417" Title="Bilateral Stabilization" Tags="&lt;humanoid&gt;" AnswerCount="0" CommentCount="2" ClosedDate="2016-09-27T10:04:57.950" ContentLicense="CC BY-SA 3.0" />
  <row Id="10719" PostTypeId="1" CreationDate="2016-09-25T21:07:05.997" Score="0" ViewCount="224" Body="&lt;p&gt;I'm trying to figure out how to use the inertial sensors in an AR Drone to perform a rough version of dead reckoning. I want to move the drone around a room (without flying it) and using the velocity and orientation data from the drone to plot the trajectory that I have moved it so far.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that inertial odometry data is prone to heavy drift with continuous use, but for a short term exploration, I am ok with that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm running the ardrone_autonomy package on ROS and I am using the odometry data from the drone to plot my trajectory on Rviz. However, Rviz only shows me the orientation of my drone and does not update movement whatsoever.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is how my Rviz looks: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/oFgXD.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/oFgXD.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can see, even if I move the drone around the entire room, the position on the map does not get updated, but the orientation does.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone tell me what I am doing wrong here?&lt;/p&gt;&#xA;" OwnerUserId="14822" LastEditorUserId="14822" LastEditDate="2016-09-25T22:16:38.337" LastActivityDate="2017-02-08T07:58:53.450" Title="Utilizing the inertial sensors in an AR Drone" Tags="&lt;ros&gt;&lt;accelerometer&gt;&lt;gyroscope&gt;&lt;uav&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10720" PostTypeId="1" AcceptedAnswerId="10724" CreationDate="2016-09-26T02:04:59.927" Score="6" ViewCount="1684" Body="&lt;p&gt;I'm trying to finish up a localization pipeline, and the last module I need is a filtering framework for my pose estimates. While a Kalman filter is probably the most popular option, I'm using cameras for my sensing and I wouldn't be able to ensure the kinds of noise profiles KF is good for, I doubt it would work as well with suddenly appearing outliers in my poses: so I am looking for other options which can work with real time data and be immune to outliers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One thing I came across is a Kalman filter with a threshold based update rejection, something like Mahalanobis distance: but I don't know if this is completely applicable because the localization would be performed in real time, and it's not like I have a large set of 'good poses' to start with. The end result I'm expecting is something like smoothing, but without access to a full set of values. Another option I found is from a &lt;a href=&quot;http://acds-lab.gatech.edu/papers/IROS2007_RobustKF.pdf&quot; rel=&quot;noreferrer&quot;&gt;paper&lt;/a&gt; that proposes a 'robust Bayesian weighted Kalman filter' that's good for real time outlier rejection, but I still need to read through it: and I don't have much experience with filtering/smoothing, so any suggestions would be very helpful, perhaps about a decent go-to mechanism for this?&lt;/p&gt;&#xA;" OwnerUserId="10310" LastEditorUserId="10310" LastEditDate="2016-09-26T03:46:29.087" LastActivityDate="2018-07-10T12:20:47.463" Title="What is a good approach for outlier rejection during real time data filtering?" Tags="&lt;localization&gt;&lt;kalman-filter&gt;&lt;noise&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10721" PostTypeId="2" ParentId="10719" CreationDate="2016-09-26T02:11:13.037" Score="1" Body="&lt;p&gt;That's because your fixed frame is set to /odom (Essentially, you're setting your global frame to your local frame, so relative to the vehicle itself, the vehicle never moves!). The solution would be to set it to /map or /world, depending on what the name of the frame is that the package provides. The list can be seen in the dropdown menu of fixed frames. You also seem to have an issue with transforms between odom and map, so I am guessing you would need some sort of a static transform between odom and some other local frame such as base_link. &lt;/p&gt;&#xA;" OwnerUserId="10310" LastActivityDate="2016-09-26T02:11:13.037" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10722" PostTypeId="1" CreationDate="2016-09-26T07:36:46.163" Score="1" ViewCount="133" Body="&lt;p&gt;My task is simple: I want to move my drone manually around a room (&lt;strong&gt;IMPORTANT: I DO NOT WANT TO FLY IT&lt;/strong&gt;) and I want to see its position update on a map using IMU data. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've attempted something in ROS and Rviz, but the position on the map does not update when I pickup my drone from spot A and place it 5 meters away at spot B. It does however update when I fly the drone from A to B.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is this : is there someway I can do dead reckoning using the drone while not flying it? Or is flying the drone necessary to perform dead reckoning using the drone's IMU?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: Here's what my Rviz shows when I pickup the drone from A and put it at B. As you can see, orientation is updated, but the position remains the same. However, when I fly the drone, I can see the red arrow move around the map.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/uGrqT.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/uGrqT.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help would be greatly appreciated!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT : The duplicate question just asks for general solutions. Here I've found a solution, I just can't get it to work; I need help debugging.&lt;/p&gt;&#xA;" OwnerUserId="14822" LastEditorUserId="14822" LastEditDate="2016-09-26T10:02:02.803" LastActivityDate="2016-09-26T10:02:02.803" Title="Using an AR.Drone's IMU to perform PDR" Tags="&lt;quadcopter&gt;&lt;localization&gt;&lt;imu&gt;&lt;dead-reckoning&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10724" PostTypeId="2" ParentId="10720" CreationDate="2016-09-26T12:21:36.003" Score="8" Body="&lt;p&gt;It is both acceptable and standard to use camera observations with a  Kalman filter if you are talking about landmark positions in pixel or real-world space. Pixel space observations are usually randomly &lt;a href=&quot;https://en.wikipedia.org/wiki/Cauchy_distribution&quot; rel=&quot;noreferrer&quot;&gt;Caushy&lt;/a&gt; distributed but it turns out the Gaussian Kalman filter works pretty well in this case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The method you're describing using the Mahalonobis distance to reject updates is $\chi^2$ gating, where you use the &quot;running&quot; covariance of the estimated mean in order to determine if the candidate observation is not within a given confidence interval.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\chi^2 = (z - \hat{z})^\top S^{-1}(z - \hat{z})$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You then substitute $\chi^2$ with your chosen confidence interval, which is usually chosen from &lt;a href=&quot;https://people.richland.edu/james/lecture/m170/tbl-chi.html&quot; rel=&quot;noreferrer&quot;&gt;a table&lt;/a&gt; or graph given the degrees of freedom of the system (rank of $S$).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example $\chi^2_{0.01} = 16.812$ for 6 degrees of freedom, which means if $\chi^2 \ge 16.812$ then there is a $99\%$ chance it is an outlier and you should reject it.&#xA;In order to do this you need to track the covariance $S$, the easiest way of which is to use a Kalman Filter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A more simple method is to threshold on the &lt;a href=&quot;https://en.wikipedia.org/wiki/Median_absolute_deviation&quot; rel=&quot;noreferrer&quot;&gt;Median Absolute Deviation&lt;/a&gt; metric.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The KF and MAD methods involves logging a small dataset and characterising variance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;NOTE:&#xA;The downside to any rejection method is that if you start on an invalid pose and you have no mechanism by which to &quot;reset&quot;, you will always be locked on an invalid pose. A simple mechanism to circumvent this to count how many consecutive rejections are made, and if it's above say 2 sec worth of data then force the filter to update (ignore the rejection) and reset your $P$ matrix.&lt;/p&gt;&#xA;" OwnerUserId="8859" LastActivityDate="2016-09-26T12:21:36.003" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10727" PostTypeId="2" ParentId="8223" CreationDate="2016-09-27T10:48:57.923" Score="0" Body="&lt;p&gt;may be this would be useful to you,&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;ros/ros.h&amp;gt;&#xA;#include &amp;lt;tf/transform_datatypes.h&amp;gt;&#xA;#include &amp;lt;ar_track_alvar_msgs/AlvarMarkers.h&amp;gt;&#xA;&#xA;void cb(ar_track_alvar_msgs::AlvarMarkers req) {&#xA;    if (!req.markers.empty()) {&#xA;      tf::Quaternion q(req.markers[0].pose.pose.orientation.x, req.markers[0].pose.pose.orientation.y, req.markers[0].pose.pose.orientation.z, req.markers[0].pose.pose.orientation.w);&#xA;      tf::Matrix3x3 m(q);&#xA;      double roll, pitch, yaw;&#xA;      m.getRPY(roll, pitch, yaw);&#xA;      ROS_INFO(&quot;roll, pitch, yaw=%1.2f  %1.2f  %1.2f&quot;, roll, pitch, yaw);&#xA;      // roll  --&amp;gt; rotate around vertical axis&#xA;      // pitch --&amp;gt; rotate around horizontal axis&#xA;      // yaw   --&amp;gt; rotate around depth axis&#xA;    } // if&#xA;}&#xA;&#xA;int main(int argc, char **argv) {&#xA;  ros::init(argc, argv, &quot;arlistener&quot;);&#xA;  ros::NodeHandle nh;&#xA;  ros::Subscriber sub = nh.subscribe(&quot;ar_pose_marker&quot;, 1, cb);&#xA;  ros::spin();&#xA;  return 0;&#xA;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Thanks to &lt;a href=&quot;http://ros-robotics.blogspot.de/&quot; rel=&quot;nofollow&quot;&gt;http://ros-robotics.blogspot.de/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="14827" LastActivityDate="2016-09-27T10:48:57.923" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10728" PostTypeId="1" CreationDate="2016-09-27T11:06:34.763" Score="5" ViewCount="5944" Body="&lt;p&gt;What is the core principle of a monocular visual odometry algorithm? I mean, after calibrating a single camera (undistortion etc.) images are fed into an algorithm - what exactly does this algorithm do with the images in order to get the translation/rotation between successive frames?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do various mono algorithms use various techniques or is the core principle same everywhere? I see some libraries use image features (indirect approach) and some use pixel intensity (direct approach) but I am not really able to understand the principles from the papers... I can only see the algorithms use various methods of estimating the translation/rotation matrix (5-point, 8-point algorithms...).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, is it true that no mono algorithm is able to get the absolute scale of the scene? How does the relative scale work - is it set randomly?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found following mono odometry libraries:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;indirect methods (using image features)&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/avisingh599/mono-vo&quot; rel=&quot;noreferrer&quot;&gt;Avi Singh via OpenCV&lt;/a&gt; (&lt;a href=&quot;https://avisingh599.github.io/vision/monocular-vo/&quot; rel=&quot;noreferrer&quot;&gt;blog post&lt;/a&gt;) - uses &lt;a href=&quot;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.129.1518&amp;amp;rep=rep1&amp;amp;type=pdf&quot; rel=&quot;noreferrer&quot;&gt;Nister’s 5-point algorithm&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.cvlibs.net/software/libviso/&quot; rel=&quot;noreferrer&quot;&gt;VISO2&lt;/a&gt; - uses 8-point algorithm (&lt;a href=&quot;http://www.cvlibs.net/publications/Kitt2010IV.pdf&quot; rel=&quot;noreferrer&quot;&gt;paper&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/raulmur/ORB_SLAM&quot; rel=&quot;noreferrer&quot;&gt;ORB_SLAM&lt;/a&gt; / &lt;a href=&quot;https://github.com/raulmur/ORB_SLAM2&quot; rel=&quot;noreferrer&quot;&gt;ORB_SLAM2&lt;/a&gt; - indirect approach?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;direct approach (using whole edges etc.)&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/uzh-rpg/rpg_svo&quot; rel=&quot;noreferrer&quot;&gt;SVO&lt;/a&gt;: Fast Semi-Direct Monocular Visual Odometry (&lt;a href=&quot;http://rpg.ifi.uzh.ch/docs/ICRA14_Forster.pdf&quot; rel=&quot;noreferrer&quot;&gt;paper&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/tum-vision/lsd_slam&quot; rel=&quot;noreferrer&quot;&gt;LSD-SLAM:&lt;/a&gt; Large-Scale Direct Monocular SLAM (&lt;a href=&quot;https://vision.in.tum.de/_media/spezial/bib/engel14eccv.pdf&quot; rel=&quot;noreferrer&quot;&gt;paper&lt;/a&gt;) - needs ROS (but only for input/output)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/JakobEngel/dso&quot; rel=&quot;noreferrer&quot;&gt;DSO&lt;/a&gt;: Direct Sparse Odometry (&lt;a href=&quot;http://vision.in.tum.de/research/vslam/dso&quot; rel=&quot;noreferrer&quot;&gt;paper&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I understand how stereo visual odometry works - they reconstruct 3D scene in each image frame and then compare (register) the point clouds of successive image frames and get directly the distance traveled like this - pretty simple principle.&lt;/p&gt;&#xA;" OwnerUserId="1021" LastEditorUserId="1021" LastEditDate="2017-07-14T11:03:23.020" LastActivityDate="2017-07-14T11:03:23.020" Title="How do monocular visual odometry algorithms work?" Tags="&lt;odometry&gt;&lt;visual-odometry&gt;&lt;monocular&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="4" ClosedDate="2016-09-30T13:14:50.747" ContentLicense="CC BY-SA 3.0" />
  <row Id="10729" PostTypeId="2" ParentId="10728" CreationDate="2016-09-27T14:03:54.707" Score="8" Body="&lt;p&gt;Monocular vision is a difficult and very interesting, particularly in its application to the general navigation problem. I will make an attempt at answering your questions, but if you find anything lacking, you can read through Szeliski's book &lt;a href=&quot;http://www.szeliski.org/Book/&quot; rel=&quot;noreferrer&quot;&gt;&lt;em&gt;Computer Vision: Algorithms and Applications&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;What is the core principle of a monocular visual odometry algorithm?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Monocular or stereo, the objective of visual odometry is to estimate the pose of the robot based on some measurements from an image(s). It's hard to pin down a single core principle--Bayesian Probability Theory is likely to core principle, but epipolar geometry certainly important. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For stereo, the general idea is that if you know your camera parameters, and you know that the relationship between your camera is fixed, then a point $\textbf{p}$ that is viewed from both cameras projects onto each image plane an epipolar line segment. Using the epipolar plane defined by these line segments and the camera geometry, the distance to the point can be estimated, which can be used to estimate the pose of the robot.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For monocular vision, the task is trickier because there is only one camera. To get an image pair, an image is captured at time $t$; the robot is actuated, and another image is taken at time $t+1$ (e.g. a video stream). This pair of images can be used in the same way as any other stereo image, but because we don't know for certain the relationship between the cameras (due to deviations in motion from what the robot did and what it was instructed to do), in order to estimate the pose of the robot, the motion model has to be taken into account. In the end, monocular visual odometry is more difficult because there are more unknowns that have to be accounted for probabilistically.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;What exactly does this algorithm do with the images in order to get the translation/rotation between successive frames?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main objective is image matching. While there are numerous approaches to this problem, some approaches find feature point in the scene and match those between images to match the images themselves. A number of algorithms can be used to find feature points; SIFT is a good standard although other methods have been shown to outperform it. With features described, an algorithm that matches the points should be used; RANSAC is one such algorithm. Leveraging known relationships (such as accurate motion models or fixed cameras/projectors) can improve image matching. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Do various mono algorithms use various techniques or is the core principle same everywhere?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regardless of the approach, the techniques will boil down to probability theory. That said, there are many approaches. Feature point matching is one approach, others, such as LSD-SLAM that you reference, advocate for using the pixel values directly rather than isolating feature points. Machine learning also has a role--convolutional neural networks have been very successful at solving vision problems, so you should be able to find a wealth of literature about them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Is it true that no mono algorithm is able to get the absolute scale of the scene?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Getting accurate distance measurements is difficult for camera-based vision in general. The main problem is that the distance between the cameras is relatively small compared to points in the scene that are very far away. As for determining the scale of objects, that may not be a problem of monocular vision so much as reasoning. Humans know the relative scale of objects based on priors, which is a very important and related problem for computer vision and robot perception.&lt;/p&gt;&#xA;" OwnerUserId="9585" LastActivityDate="2016-09-27T14:03:54.707" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10730" PostTypeId="2" ParentId="10712" CreationDate="2016-09-27T15:50:37.250" Score="1" Body="&lt;p&gt;To get the advantage of having a bearing, you need a hole to fit it into. Typically this will require a lathe or mill. A simple example of a &lt;a href=&quot;http://madmodder.net/index.php?topic=7488.0&quot; rel=&quot;nofollow&quot;&gt;home-brew rotary table&lt;/a&gt; shows how; searching for 'rotary table plans' finds many google image results. Basically you mount the bearing in a hole in one plate, mount the other plate to the inner ring of the bearing, and bolt them together. The two plates are machined to touch each other and the inner plate is machined to not touch the bearing outside of the inner ring.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;These bearings are primarily for radial loads. Deep groove bearings also have some axial load capability, but it will be less than the value quoted which will be the radial load (axial rating is &lt;a href=&quot;http://www.skf.com/group/products/bearings-units-housings/engineered-products/insocoat-bearings/insocoat-deep-groove-ball-bearings/loads/index.html&quot; rel=&quot;nofollow&quot;&gt;between 0.25 and 0.5 times the radial&lt;/a&gt;). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In these types of rotary tables, the bearing's main role is to centre the rotating parts with less wear than a simple pivot will have, and the axial and moment loads are taken by sliding faces lubricated by oil. If you want higher speed operation, then you may also need a thrust bearing for the axial/vertical load or &lt;a href=&quot;http://www.skf.com/uk/products/bearings-units-housings/ball-bearings/principles/bearing-basics/basic-selection-criteria/loads/index.html&quot; rel=&quot;nofollow&quot;&gt;some other configuration&lt;/a&gt;, and you may need two bearings separated to handle moments rather than one bearing and sliding faces. Essentially single row bearings don't handle moments at all, and a long robot arm with a weight on the end may be a significant moment. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To get there without a lathe, if you can find some square, thick walled box section which is just larger than your bearings diameter you may be able to mount one at each end with a little filing, and use something to prevent the bearings moving further into the section. Then you can put a shaft through the bearings and you will have a very rigid mounting that handles all three loads.&lt;/p&gt;&#xA;" OwnerUserId="1321" LastEditorUserId="1321" LastEditDate="2016-09-27T15:58:19.370" LastActivityDate="2016-09-27T15:58:19.370" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10732" PostTypeId="2" ParentId="10640" CreationDate="2016-09-28T07:52:32.580" Score="2" Body="&lt;p&gt;Although the &lt;a href=&quot;https://granitedevices.com/wiki/Analog_setpoint&quot; rel=&quot;nofollow&quot;&gt;Analog setpoint&lt;/a&gt; resolution isn't documented on the &lt;a href=&quot;https://granitedevices.com/wiki/IONI_Servo_%26_Stepper_Drive&quot; rel=&quot;nofollow&quot;&gt;Granite Devices Wiki&lt;/a&gt;, the ADC in IONI is 12 bits.&lt;/p&gt;&#xA;" OwnerUserId="13118" LastEditorUserId="37" LastEditDate="2016-09-28T11:03:25.670" LastActivityDate="2016-09-28T11:03:25.670" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10733" PostTypeId="2" ParentId="10657" CreationDate="2016-09-28T13:01:49.223" Score="1" Body="&lt;p&gt;I'm not sure I understand why you're taking such a long &amp;quot;around the block to cross the street&amp;quot; approach to this problem. Your basic steps are:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt;  [The human controls directly the] potentiometer voltage [which] is converted to PWM... which controls a fan M1.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;2.&lt;/strong&gt;  This directly speed-controlled M1 fan creates air pressure on a sensor Sen1.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;3.&lt;/strong&gt;  [The] M2 fan [should] reach to a speed(via pin10 PWM) such that Sen2 should output the same voltage as Sen1.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;4.&lt;/strong&gt;  Which means eventually voltage at A1 analog input should be equal to A2.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;5.&lt;/strong&gt;  So one can achieve same air pressures at Sen1 and Sen2.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;If, per step 4 above, you think the analog input voltages should be the same, then why not just feed the human-reference input provided at step 1 to both fans?&lt;/p&gt;&#xA;&lt;p&gt;Another way to think critically about this problem is to recognize that I, personally, have no idea what voltage is required to get a fan to achieve a particular air pressure. That is, maybe &lt;em&gt;you&lt;/em&gt; as the designer should choose some maximum allowable air pressure (perhaps dictated by the capacity of the fan), and then have the human's reference be interpreted as a desired &lt;em&gt;air pressure&lt;/em&gt; instead of a desired &lt;em&gt;fan voltage&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Then, the desired air pressure is the reference, the actual air pressure is the feedback, and you use the error between the two to create your PID loop.&lt;/p&gt;&#xA;&lt;p&gt;This is basically what you're talking about for fan two, where you have fan two setup in a &amp;quot;follower&amp;quot; mode.&lt;/p&gt;&#xA;&lt;p&gt;The problem I would see with the approach you've requested is in your statement in the comments:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The flow of M1 might affect M2's flow a bit.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I'm assuming that this implies that M2's flow might also affect M1's. So imagine this:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;M1 is running at 50%.&lt;/li&gt;&#xA;&lt;li&gt;M2 is not running.&lt;/li&gt;&#xA;&lt;li&gt;M2 gets M1's 50% flow as a reference.&lt;/li&gt;&#xA;&lt;li&gt;M2 spins up, but a portion of its flow is sensed by M1's sensor, Sen1.&lt;/li&gt;&#xA;&lt;li&gt;M1's flow sensor now reads 50% + X%.&lt;/li&gt;&#xA;&lt;li&gt;M2 gets M1's 50% + X% flow as a reference.&lt;/li&gt;&#xA;&lt;li&gt;M2 spins a little faster, but a portion of its flow is sensed by M1's sensor, Sen1.&lt;/li&gt;&#xA;&lt;li&gt;Repeat 5-7 until M2 is spinning at full speed or the system naturally stabilizes &lt;em&gt;at some value higher than probably intended&lt;/em&gt;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;If you have both PID loops (for M1 and M2) tuned to the same response time, then there is a high probability that they'll wind up &amp;quot;fighting&amp;quot; each other - both fans spin up at the same time, overshoot, trigger each other to slow down, and you may find that neither fan ever settles at the desired setpoint.&lt;/p&gt;&#xA;&lt;p&gt;The two approaches I would take to inhibit this kind of behavior would be to intentionally tune one loop slower than the other. The slower system acts as a &amp;quot;base load&amp;quot; supplier, the faster loop responds to disturbances. This also assumes there's some moderate cross-flow between the two systems.&lt;/p&gt;&#xA;&lt;p&gt;The other way you could try to do this is to have one control loop, where the output signal is sent to both fans (instead of being tailored on a per-fan basis) and maybe the output signal (Sen1 and Sen2) is averaged to produce one feedback.&lt;/p&gt;&#xA;&lt;p&gt;I'm not sure what the application here is so I can't provide any meaningful advice beyond what I've posted above. You could consider ducting or physically relocating the fans to prevent cross-flow between M1 and M2.&lt;/p&gt;&#xA;&lt;p&gt;I'll say that steps 4 and 5 above are generally conflicting - due to variations in motor and sensor construction, impedances, etc., you will probably find that voltages A1 and A2 are &lt;strong&gt;not&lt;/strong&gt; equal when the outputs of Sen1 and Sen2 are equal, and vice-versa.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2016-09-28T13:01:49.223" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10734" PostTypeId="2" ParentId="10666" CreationDate="2016-09-28T14:52:17.520" Score="1" Body="&lt;p&gt;With the firmware you have, the robot does not sleep on the dock. Assuming the baud rates are correct, it will still respond to sensor fetches and should respond to the 'clean' request.&#xA;Pulsing the BRC pin could be changing the baud rate or could be doing some other unintentional behavior. &lt;/p&gt;&#xA;" OwnerUserId="9743" LastActivityDate="2016-09-28T14:52:17.520" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10735" PostTypeId="2" ParentId="687" CreationDate="2016-09-28T21:12:01.593" Score="1" Body="&lt;p&gt;As a follow-up (albeit after 2.5 years) I would like to add some other things that I was able to work on and might possibly help you / anybody else foraying into this field.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Option 1)&lt;/strong&gt; Use an existing robot hardware and add your own sensors and actuators:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For e.g.: I had access to a iRobot Create (Roomba without the vaccum cleaner). So I modified that hardware-wise by adding a long &quot;neck&quot; made out of a plastic tube that was lying around (I had to add a tough-plastic platform on top of the Create on the screws provided so that I could fix whatever I wanted to this plastic platform (see image below to get an idea). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/hlrkc.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hlrkc.jpg&quot; alt=&quot;Robot&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can then interface with the Roomba from your laptop or other PC using several Roomba interface packages available (I used the one for Matlab since my CV code was in Matlab). I connected a Kinect v2 to my laptop and thus I had complete control over the robot as well as was able to acquire data from the Kinect. The wires and electronics that you see on the robot are from my previous attempt to supply power directly from the robot battery to the Kinect v1 that I was using on it earlier to make the robot completely mobile. For the v2 I did not bother with the power conversion as it was complicated so I just used tethered power supply for the kinect v2. Since I had a laptop (Thinkpad with usb 3.0 that the Kinect v2 needs), the interfacing with Kinect v2 was relatively easy; I used the libfreenect2 for running Kinect v2. I called it as a system call from my Matlab image processing code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The advantage of this system is that it's cheap. You only have to pay for the robot base, the Kinect, and any other hardware you buy. The disadvantage is that it's very slow moving robot since it's top heavy. The Kinect v2 also had to be tethered. This setup cost me around \$ 300 since the base was pre-owned from ebay, and the Kinect costs ~$200. Not including any additional hardware costs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Option 2)&lt;/strong&gt;: Build your own robot hardware. This option is more time+money consuming. The way I did this was I purchased a 6-wheel drive robot chasis (it's not cheap; around $300) from &lt;a href=&quot;https://www.sparkfun.com/products/11056&quot; rel=&quot;nofollow noreferrer&quot;&gt;sparkfun&lt;/a&gt;. To this I added a pan-tilt system from &lt;a href=&quot;https://www.servocity.com/pt785-s&quot; rel=&quot;nofollow noreferrer&quot;&gt;servocity&lt;/a&gt;. And to this PT system I added a asus xtion (since it's light). The motors of the robot and the PT system were controlled by a gorilla controller board, which received commands from a Jetson TK1 which was processing the Asus depth data, and sending commands to the motors. Unfortunately I do not have the pictures on my machine right now; but it looks a bit like a cross between Wall-E and a 6WD military vehicle ;) . Jetson TK1 is considerably powerful and I've run Kinect v1, Asus Xtion, and Kinect v2 on it (it has a usb 3.0 as well).  For Kinect v1 and Asus I used OpenNI2 and for Kinect v2 I used libfreenect2 (for both these robot options I used Ubuntu btw). But since the PT system was present I stuck with the lightweight Asus sensor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The advantage of this system is that you can change it however u want with different hardware or electronics. The disadvantage is that you've to do a lot of motor controller programming on your own which means you've to understand how to control motors using PWM signals, for example. This setup aint cheap. Cost me around $800-900 without the additional hardware I had to purchase to make it work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In both these options I did not use any odometry data coming from the wheels or sensors (e.g. how many rotations of the wheel, data from the IR sensors on the Create etc). I relied entirely on vision data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hopefully this helps. Let me know if you have questions.&lt;/p&gt;&#xA;" OwnerUserId="4056" LastActivityDate="2016-09-28T21:12:01.593" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10737" PostTypeId="2" ParentId="7724" CreationDate="2016-09-29T09:41:46.220" Score="0" Body="&lt;p&gt;For solving individual cases, if you do not want to script yourself, you can enter the matrix in this &lt;a href=&quot;http://www.andre-gaschler.com/rotationconverter/&quot; rel=&quot;nofollow&quot;&gt;Online Calculator for 3D Rotation Formats&lt;/a&gt;, switch the output to degrees, and see the axis-angle output. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case your of ${}^aR_c$, it outputs a 120 degrees rotation around the axis [0.5773503, 0.5773503, 0.5773503].&lt;/p&gt;&#xA;" OwnerUserId="10777" LastActivityDate="2016-09-29T09:41:46.220" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10739" PostTypeId="1" AcceptedAnswerId="10740" CreationDate="2016-09-29T20:32:47.717" Score="0" ViewCount="122" Body="&lt;p&gt;I want my robot to contain about 20 MB of data or a little more, this will be mostly in text, some pictures so that it can recognize one or two particular objects.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So obviously, I want a camera connected to it and I want it to be able to save images (no need to display them, just save, I would access them through a PC later. &lt;strong&gt;However&lt;/strong&gt;, I do want it to have an output text screen, i.e.: I want it to be able to display text on a screen, just plain text.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also want it to be controlled by speech recognition, so it has to be able to accept voice input. Also, iI want it to be capable of producing voice output, but only one or two prerecorded sounds. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lastly, an infrared sensor will be used for distance gauging and a push button one for contact. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Summary of needs:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Microcontroller and parts required to:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;store at least 20 MB of data, text (the microcontroller needs to be&#xA;able to access this text and run algorithms on it, GET data only, not&#xA;change it), and images (images only for image recognition)&lt;/li&gt;&#xA;&lt;li&gt;allow saving images taken by the camera&lt;/li&gt;&#xA;&lt;li&gt;speech recognition as input&lt;/li&gt;&#xA;&lt;li&gt;output audio (only one or two prerecorded sounds) &lt;/li&gt;&#xA;&lt;li&gt;output plain text on a screen&lt;/li&gt;&#xA;&lt;li&gt;equip an infrared sensor for measuring distance and contact&#xA;push buttons for detecting contact&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;If relevant, I am using tracked wheels, two DC motors, the robot will move upon detecting an object using the camera. I will decide what motor controller to use when one of you good fellows let me know what microcontroller would be adept for my wants. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: for speech recognition input, I will use an advanced sound sensor, and for the infrared and push button sensors I obviously know what I'm using, same with the camera.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I only mentioned these ones so you would know what I need the microcontroller to be capable of to use. But as for the data storage and saving photos and screen, I have no idea what I can use as I have never used anything similar in a robot before.&lt;/p&gt;&#xA;" OwnerUserId="14860" LastEditorUserId="10596" LastEditDate="2016-09-30T13:18:53.957" LastActivityDate="2016-10-15T12:38:56.020" Title="What microcontroller and parts will work for the robot project described bellow?" Tags="&lt;sensors&gt;&lt;microcontroller&gt;&lt;speech-processing&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10740" PostTypeId="2" ParentId="10739" CreationDate="2016-09-29T21:00:43.283" Score="2" Body="&lt;p&gt;I would consider using a Raspberry Pi. It certainly has the required memory, already has audio output and enough performance to perform image processing with. You can easily interface a simple 2x16 character LCD with it and the camera would not be a problem either. To control the motors you will need PWM, which is available on the PI, for example using this &lt;a href=&quot;https://learn.adafruit.com/adafruit-raspberry-pi-lesson-9-controlling-a-dc-motor/the-pwm-kernel-module&quot; rel=&quot;nofollow&quot;&gt;kernel modul&lt;/a&gt; from Adafruit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One thing you will require is an external ADC so you can interface an analog infra red sensor and it is needed for the audio inout too. Or for the audio input you can use its I2S interface as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for the microcontrollers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For 20 MB of memory an SD card would be the easiest way here, which you already have at the PI. Regarding the audio, there are some with I2S interface but you would certainly need additional hardware to play audio or receive audio signals. An LCD, IR sensor and push button won't be a problem to any currently available MCU. Adventage is that the ADC is already built in.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All in all I would go with the PI.&lt;/p&gt;&#xA;" OwnerUserId="10596" LastEditorUserId="10596" LastEditDate="2016-09-30T14:01:25.667" LastActivityDate="2016-09-30T14:01:25.667" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="10741" PostTypeId="2" ParentId="10103" CreationDate="2016-09-29T21:08:39.993" Score="0" Body="&lt;p&gt;Sony PS4 Camera is based on the same controller, for just $55. &#xA;It USB3.0 cable but firmware connector. Price difference motivates &lt;a href=&quot;https://groups.google.com/forum/#!topic/heatsynclabs/SCJOrbMH1Y4&quot; rel=&quot;nofollow&quot;&gt;people&lt;/a&gt; to hack but that is not easy walking. &lt;/p&gt;&#xA;" OwnerUserId="14861" LastEditorUserId="10596" LastEditDate="2016-09-30T13:19:21.523" LastActivityDate="2016-09-30T13:19:21.523" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="10743" PostTypeId="1" CreationDate="2016-09-30T10:48:02.930" Score="5" ViewCount="936" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/tF0ln.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Map&lt;a href=&quot;https://i.stack.imgur.com/tF0ln.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;1&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/tF0ln.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tF0ln.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The task is divided into 2 runs, In first run, We have to navigate through whole map and reach the end mark taking all checkpoints.&#xA;In second run, using the mapping from first run we have to follow the shortest path.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am reading Algos and codes from days, I know the steps that should be taken,&#xA;Navigate the maze using Tremaux algo and turning right at each possble junction.&#xA;then Save that map in memory and use djikstra algo or A* algo to find the shortest path.&#xA;But how to implement it practically?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also since all  the dictances and angles are known and also the wheel dia, motor rpm, bot width then Can I skip wheel encoders and use calculation instead?&lt;/p&gt;&#xA;" OwnerUserId="14863" LastEditorUserId="10596" LastEditDate="2016-09-30T13:15:39.397" LastActivityDate="2017-05-15T11:49:25.420" Title="How can I implement tremaux algo in arduino line follower to navigate and create map?" Tags="&lt;slam&gt;&lt;algorithm&gt;&lt;mapping&gt;&lt;line-following&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10744" PostTypeId="1" CreationDate="2016-09-30T12:07:59.267" Score="1" ViewCount="556" Body="&lt;p&gt;I am using Constant Turn Rate and Veloctity (CTRV)  model to predict the position of the vehicle.The CTRV model assumes a circular path between two consecutive time steps of the car as depicted in the figure, where the vehicle moves from point A to point B. Also, the yaw rate and velocity are assumed constant between two timesteps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/9fX1v.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9fX1v.png&quot; alt=&quot;CTRV model describing motion of car between two timesteps&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The displacement between the two points is denoted by S and R is the radius of the curvature. The five input parameters of the CTRV model are [ x, y, yaw angle, velocity and yaw rate]. The previous x, y position of the car is known to me. The laser data of the surrounding environment is available for each timestep. With this laser data, I have already calculated the Rotation matrix and translation vector between two time steps using ICP. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now my question is how to calculate the input parameters of the CTRV model with the available data?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The followings things are clear to me: -&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;With the help of rotation angle I can calculate: - &#xA; Theta = Displacement (S) / Radius (R)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The velocity can be calculated using the timesteps :-&#xA; Velocity = Displacement (S) / t&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The yaw rate can be calculated using :-&#xA; Velocity = Yaw rate * Radius (R)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Considering the first equation I am not sure how to calculate the displacement S if Radius is not known to me. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pardon me if my queries are a bit naive. I am still in the process of learning. Any help from your side will be much appreciated :)&lt;/p&gt;&#xA;" OwnerUserId="14865" LastActivityDate="2016-09-30T12:07:59.267" Title="Calculate input parameters of CTRV model" Tags="&lt;mobile-robot&gt;&lt;slam&gt;&lt;kalman-filter&gt;" AnswerCount="0" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10745" PostTypeId="2" ParentId="10743" CreationDate="2016-09-30T12:12:16.177" Score="1" Body="&lt;p&gt;A good starting point is to solve the problem first in simulation. If the algorithm not work on a 2D map on screen it will never work on a real arduino. For inspiration github is a good ressource. There are many implementions available &lt;a href=&quot;https://github.com/enesser/maze-solver&quot; rel=&quot;nofollow&quot;&gt;[1]&lt;/a&gt; &lt;a href=&quot;https://github.com/psrivast/MazeRobot&quot; rel=&quot;nofollow&quot;&gt;[2]&lt;/a&gt;. After analyzing the sourcecode of somebody else it is time for writing the code from bottom up. In most programming languages the concept of &quot;creating a library&quot; is well suited for iterative development. The first methods in the library deals with pathplanning and obstacle avoidance and later additional features like &quot;motor rotation per minute&quot; will be added. The development cycle is testdriven, that means that after programming a small function, the code will be tried out in simulation and on a real robot. In most cases the development cycle is very slow, it is possible that even after one month of work no substantial progress is visible. Sometimes the code will result in a working robot, and sometimes not. It depends on the experience, the team and the invested workhours.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2016-09-30T12:12:16.177" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10746" PostTypeId="1" AcceptedAnswerId="10767" CreationDate="2016-09-30T14:47:25.710" Score="4" ViewCount="2040" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/nSIHt.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/nSIHt.jpg&quot; alt=&quot;Angle comparison&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://i.stack.imgur.com/C9Wmj.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/C9Wmj.jpg&quot; alt=&quot;Angles from Gyroscope&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://i.stack.imgur.com/rxEjW.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rxEjW.jpg&quot; alt=&quot;Angles from Accelerometer raw data&quot;&gt;&lt;/a&gt;I'm trying to implement the complimentary filter to get Euler angles using accelerometer and gyroscope data. Attached is the MATLAB code that I have along with a data set.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The data corresponds to moving the sensor from 0-90 degrees while attached to a goniometer. The sensor has an inbuilt algorithm that outputs Euler angles too and I'm trying to test the accuracy of this algorithm as it tends to overshoot the angle estimates.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem with the complimentary filter is that the angles move between (around) negative 40 and positive 40 degrees instead of changing between (around) 0-90 degrees.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone please point out what is wrong and why the complimentary filter isn't working well.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;clc;&#xA;clear all;&#xA;close all;&#xA;M=importdata('Multiple_Sensors_747000.csv');&#xA;A=M.data;&#xA;[m n]=size(A);&#xA;a=1;&#xA;t=m/60;&#xA;angle=0;&#xA;&#xA;for i=1:3723&#xA;    Acc(a,:)=M.data(i,6:8); % Reading Accelerometer data&#xA;    R_norm(a)=sqrt(Acc(a,1)^2+Acc(a,2)^2+Acc(a,3)^2); % Normalized accelerometer &#xA;    Racc_norm1(a,1)=acos(Acc(a,1)/R_norm(a));         % Angle from accelerometer in X&#xA;    Racc_norm1(a,2)=acos(Acc(a,2)/R_norm(a));         % Angle from accelerometer in Y&#xA;    Racc_norm1(a,3)=acos(Acc(a,3)/R_norm(a));         % Angle from accelerometer in Z&#xA;&#xA;    Gyroscope(a,:)=M.data(i,3:5);                     % Reading gyroscope data&#xA;    gyro(a,:)=Gyroscope(a,:)*(1/t);                   % Integrating gyroscope data&#xA;    r(a,1)=sum(gyro(:,1));                            % Angle from gyroscope data&#xA;    r(a,2)=sum(gyro(:,2));&#xA;    r(a,3)=sum(gyro(:,3));&#xA;    angle=0.99*(angle+(gyro(a,:)))+(0.01*Racc_norm1(a,:)); % Complimentary filter equation&#xA;    ang(a,:)=angle;&#xA;    a=a+1;&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="14857" LastEditorUserId="14857" LastEditDate="2016-10-03T15:18:50.697" LastActivityDate="2016-10-03T19:37:18.527" Title="Complimentary filter issues" Tags="&lt;accelerometer&gt;&lt;gyroscope&gt;&lt;matlab&gt;&lt;filter&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10747" PostTypeId="1" AcceptedAnswerId="10749" CreationDate="2016-09-30T18:38:01.437" Score="3" ViewCount="140" Body="&lt;p&gt;Multi-Robot task decomposition implies that there is a mission that needs multiple mobile robots like guarding the president's car with a team of drones. This high-level layman interpretation of the mission has to be broken down into algorithmic language. Basically the missions have to be decomposed into atomic tasks which robots can be instructed to do in terms of their existing abilities and intelligence.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are some papers i found on this problem:-&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.researchgate.net/profile/Rachid_Alami/publication/3802817_M_a_scheme_for_multi-robot_cooperation_through_negotiated_task_allocation_and_achievement/links/02bfe5102986cdfc1d000000.pdf&quot; rel=&quot;nofollow&quot;&gt;[1]&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://web.media.mit.edu/~cynthiab/Readings/Stone-veloso-AIJteamwork.pdf&quot; rel=&quot;nofollow&quot;&gt;[2]&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can someone point some seminal papers on it that tackle the algorithmic aspects of this problem? Pointing to open source codes in any language will also be preferred.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note there is a closely related problem of multi-robot task allocation which i am &lt;strong&gt;not&lt;/strong&gt; referring to.&lt;/p&gt;&#xA;" OwnerUserId="14868" LastEditorUserId="14868" LastEditDate="2016-09-30T19:08:20.877" LastActivityDate="2016-10-01T11:41:40.450" Title="Seminal work in multi-robot task decomposition" Tags="&lt;mobile-robot&gt;&lt;motion-planning&gt;&lt;algorithm&gt;&lt;multi-agent&gt;&lt;reference-request&gt;" AnswerCount="1" CommentCount="0" ClosedDate="2016-10-05T12:00:10.973" ContentLicense="CC BY-SA 3.0" />
  <row Id="10749" PostTypeId="2" ParentId="10747" CreationDate="2016-10-01T11:41:40.450" Score="0" Body="&lt;p&gt;The most simple example for multi-robot task planning are boxpushing (two robot push a object through the room) and Real-time-strategy games (a robot army has to follow the tiberium truck). The algorithm for solving these problems are:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Solver (particle swarm optimization, Neuroevolution)&lt;/li&gt;&#xA;&lt;li&gt;Hybrid Solver (PDDL Planner mit motion primitives)&lt;/li&gt;&#xA;&lt;li&gt;procedural animation (hardcoded software with AutoIt)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;According to my knowledge the two first concepts doesn't work on real robots because the cpu-usage is to high.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2016-10-01T11:41:40.450" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10753" PostTypeId="1" AcceptedAnswerId="10776" CreationDate="2016-10-02T05:07:14.853" Score="1" ViewCount="1496" Body="&lt;p&gt;I would like to follow the instructions &lt;a href=&quot;http://roombots.mx.com/make_your_own&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;, to allow myself to control the Create2 with a Raspberry Pi 3. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, this &lt;a href=&quot;http://www.irobot.com/~/media/MainSite/PDFs/About/STEM/Create/RaspberryPi_Tutorial.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;source&lt;/a&gt;, says that I need a level shifter to protect my Pi's circuitry from the Create's serial logic signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/QcFwP.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QcFwP.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm fairly certain that I don't need the level shifter, since it looks like it's more just used to integrate the camera with the Create 2. But I am not in a rush to burn out either of these devices, so I'd like some verification.&lt;/p&gt;&#xA;" OwnerUserId="14876" LastEditorUserId="10596" LastEditDate="2016-10-03T11:55:43.733" LastActivityDate="2018-07-19T12:49:14.210" Title="Do I need the 5V to 3.3V level shifter?" Tags="&lt;raspberry-pi&gt;&lt;irobot-create&gt;&lt;serial&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10754" PostTypeId="2" ParentId="10753" CreationDate="2016-10-02T07:57:28.510" Score="2" Body="&lt;p&gt;I think we need 5-3.3 bidirectional voltage shifter (not for camera) to communicate between raspberry pi and create controller, since serial communication protocols for Create uses 0-5 voltage range and Raspberry Pi uses 0-3.3 volt range. This dissimilarity might result in &lt;strong&gt;signal distortion&lt;/strong&gt; between the two devices. For instance, raspberry pi might send 2.5V as high signal but in create logic that might not recognize that as  high signal. As you stated,5V might be dangerous for raspberry pi circuit that runs on 3.3V. Also, for &lt;strong&gt;better communication&lt;/strong&gt;, I suggest you should build the voltage shifter.&lt;/p&gt;&#xA;" OwnerUserId="14471" LastActivityDate="2016-10-02T07:57:28.510" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10755" PostTypeId="1" AcceptedAnswerId="10760" CreationDate="2016-10-02T13:39:00.800" Score="5" ViewCount="2759" Body="&lt;p&gt;To make a two degree of freedom arm capable of speeds needed to play &lt;a href=&quot;https://en.wikipedia.org/wiki/Air_hockey&quot; rel=&quot;nofollow noreferrer&quot;&gt;air hockey&lt;/a&gt;, how should the arm be controlled? I'm wondering about speed vs accuracy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The following image is from a &lt;a href=&quot;http://2dofpenplotter.blogspot.com/2014/02/2-dof-articulated-pen-plotter-beng.html#more&quot; rel=&quot;nofollow noreferrer&quot;&gt;project involving a 2DOF drawing arm&lt;/a&gt;:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/Me3Yp.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Me3Yp.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For this air hockey project, the general mechanics of that arm seem appropriate. it can move the &quot;hand&quot; around a 2D plane. I also like how both motors are at the base of the arm, instead of having the 2nd motor at the elbow (which adds weight to the arm and slows it).&lt;br&gt;&#xA;However, the drawing robot is slow. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Steppers:&lt;br&gt;&#xA;I understand that in general, steppers are 'slow'.&lt;br&gt;&#xA;But, steppers have accurate positioning, which is very important in a game of air hockey. I also know that the steppers can be geared-up, but then they lose torque. The steppers would need to handle the inertia of quick, back-and-forth arm movement.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Hobby servos:&lt;br&gt;&#xA;I've used &lt;a href=&quot;https://en.wikipedia.org/wiki/Servo_(radio_control)&quot; rel=&quot;nofollow noreferrer&quot;&gt;small servos&lt;/a&gt; for other projects, but the accuracy was poor. Most don't have a way to read the angle externally, and those that do, have noisy signals. I'm not sure how strong the hobby servos are, and if they can be accurate enough for this project. I understand that using &lt;a href=&quot;http://www.robotplatform.com/knowledge/servo/servo_faq.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;digital servos improve dead band issues&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;DC motors with external feedback:&lt;br&gt;&#xA;The only other method I can think of for controlling the arm would be to use DC motors with sensors like as &lt;a href=&quot;https://en.wikipedia.org/wiki/Rotary_encoder&quot; rel=&quot;nofollow noreferrer&quot;&gt;rotary encoders&lt;/a&gt;. I think I would need an &lt;a href=&quot;https://en.wikipedia.org/wiki/Rotary_encoder#Absolute_rotary_encoder&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;absolute&lt;/em&gt; rotary encoder&lt;/a&gt;.  But they seem to be around \$50-$1000, which is a bit much for a solution I'm not sure will even work out. Perhaps there are cheaper solutions to motor angle measurement. I could just use a potentiometer, but then I'm worried about noise again.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;It's worth noting that I don't know of any easy or affordable way to design my own drivetrain. All I have is a drill, and I don't know how I would mount shafts/bearings and such, even if the gears themselves were affordable.&lt;br&gt;&#xA;This means that if I need to gear-up or down, I don't think I can unless it's cheap and involves simple tools.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So for the arm: DC motors with external feedback, servos, steppers, something else?...&lt;br&gt;&#xA;Which method would be the best in terms of speed, and which for accuracy? I'm wondering which would cost less as well, but I understand that is a grey area.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm leaning towards servos out of simplicity. I'm may try digital servos with ball-bearings, in the hope they that will move quick enough, but be strong enough to handle the inertia of the arm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Note that a 2DOF arm is desired, and not something else like a 3D-printer x-y belt system.)&lt;/p&gt;&#xA;" OwnerUserId="7565" LastEditorUserId="37" LastEditDate="2018-08-16T09:21:31.287" LastActivityDate="2018-08-16T09:21:31.287" Title="2DOF arm with quick movement: Stepper, servo, or DC motor?" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;servomotor&gt;&lt;stepper-motor&gt;&lt;rcservo&gt;" AnswerCount="3" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10757" PostTypeId="2" ParentId="10753" CreationDate="2016-10-02T15:16:09.547" Score="0" Body="&lt;p&gt;Just buy a level shifter, it's not worth a fried Pi.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, &lt;a href=&quot;https://www.sparkfun.com/products/12009&quot; rel=&quot;nofollow noreferrer&quot;&gt;SparkFun Logic Level Converter - Bi-Directional&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="8842" LastEditorUserId="9176" LastEditDate="2018-07-18T14:39:14.183" LastActivityDate="2018-07-18T14:39:14.183" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10758" PostTypeId="1" CreationDate="2016-10-02T17:41:43.907" Score="-3" ViewCount="45" Body="&lt;p&gt;Doing some research on robotic arms and thinking about getting one, but I was wondering where can I get info on the pros/cons of each one and how they compare to each other. Another important factor is which one has the largest community following.&lt;/p&gt;&#xA;" OwnerUserId="10746" LastActivityDate="2016-10-02T18:00:23.070" Title="There seems to be so many robotic arms on the market, where can I get a list of pros/cons of each?" Tags="&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2016-10-05T12:00:50.613" ContentLicense="CC BY-SA 3.0" />
  <row Id="10759" PostTypeId="2" ParentId="10758" CreationDate="2016-10-02T18:00:23.070" Score="2" Body="&lt;p&gt;There's no such list because if a property is an advantage or disadvantage depends on the application to a large degree.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This holds true for a lot of things in engineering and life in general.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You said nothing about your application. From your statement:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;thinking about getting one&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;it looks like you don't really have one either. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what would you want to do with such a list anyway? Are you worried about making a mistake and buying the wrong arm? What if arm A has 20% more maximum force than arm B, but B has a 20% larger community? Would you want to come up with some weighted scoring system? How would you be able to decide which arm is right for you given that you have no experience with them and no clear requirements?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just get started with any arm. This is the best way to gain experience with what matters and what does not.&lt;/p&gt;&#xA;" OwnerUserId="9860" LastActivityDate="2016-10-02T18:00:23.070" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10760" PostTypeId="2" ParentId="10755" CreationDate="2016-10-03T05:01:46.493" Score="3" Body="&lt;p&gt;Servo mechanisms are not the &quot;popular&quot; RC-Servos (not-only). Servo is a closed-loop control, not only for motors. Even Steppers could or not be servo-motors. RC-servos are in major cases a DC brushed motor, with reduction gear and a potentiometer for position feedback, and electronic control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a common RC Servo. The fact that it has no ball bearings does not&#xA;directly to bad precision, there's plenty of high precision products that don't use ball bearings, they are better lubricated and more strong.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/thumb/3/34/Disassembled_RC_servomechanism.jpg/214px-Disassembled_RC_servomechanism.jpg&quot; alt=&quot;RC Servo motor&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;By Gophi (Own work) [GFDL (&lt;a href=&quot;http://www.gnu.org/copyleft/fdl.html&quot; rel=&quot;nofollow&quot;&gt;http://www.gnu.org/copyleft/fdl.html&lt;/a&gt;) or CC BY-SA 4.0-3.0-2.5-2.0-1.0 (&lt;a href=&quot;http://creativecommons.org/licenses/by-sa/4.0-3.0-2.5-2.0-1.0)]&quot; rel=&quot;nofollow&quot;&gt;http://creativecommons.org/licenses/by-sa/4.0-3.0-2.5-2.0-1.0)]&lt;/a&gt;, via Wikimedia Commons&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you can use a &lt;em&gt;DC brushed, brush-less, steeper motor, AC induction motor, and still add servo-mechanism (closed loop)&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;But what is common for staring designer on robotic arms, is a big interest in motor and actuators, and a low research on the mechanic itself. &lt;em&gt;If the structure is much flexible&lt;/em&gt;, using high precision actuators would not help so much.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you need to design the arm itself to be strong under the weight, forces, acceleration and deceleration (be it or not with ball bearing), and then with the dimensions, you can start selecting the actuators.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Rought speaking, the bigger the number of poles, the more torque the motor will have and less the speed (this is very variable). The question is, if the motor is directing driving the arm you would want high-torque and less speed. If you gearing, you can use a low pole, high-speed, medium to high torque motor, and have the gearbox match the speed and torque for your application.&lt;/p&gt;&#xA;" OwnerUserId="2447" LastEditorUserId="2447" LastEditDate="2016-10-03T05:33:08.067" LastActivityDate="2016-10-03T05:33:08.067" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10761" PostTypeId="1" CreationDate="2016-10-03T10:27:46.770" Score="11" ViewCount="5897" Body="&lt;p&gt;I am working on Robot localization and navigation in urban environments. I want to use Camera. But I am a little bit confused about LRF data or other laser data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why people want to use camera?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;why not LRF or other laser data?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone explain please in favor of Camera?&lt;/p&gt;&#xA;" OwnerUserId="14885" LastEditorUserId="10596" LastEditDate="2016-10-03T14:45:00.530" LastActivityDate="2016-10-04T20:15:34.830" Title="Why people use camera instead of laser sensor for robot navigation?" Tags="&lt;computer-vision&gt;&lt;stereo-vision&gt;&lt;laser&gt;&lt;lidar&gt;" AnswerCount="7" CommentCount="0" FavoriteCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="10762" PostTypeId="2" ParentId="10761" CreationDate="2016-10-03T10:44:10.397" Score="16" Body="&lt;p&gt;A 3D laser range finder or LIDAR such as the one on the &lt;a href=&quot;http://www.chriswaitecarsales.com/files/6714/6185/0375/chris-waite-car-sales-1.jpg&quot;&gt;Google Car&lt;/a&gt; is far more expensive than a camera. The other reason is that while in case of a LIDAR the distance of every pixel is available, the generated data to be processed is enormous. You have to transfer and process data faster which comes out again as rising cost. Finally cameras usually have a longer lifetime, so there is less maintenance required.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With relatively cheap cameras and computer vision, pretty good results can be achieved.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Examples:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://player.vimeo.com/video/181488004&quot;&gt;Object detection&lt;/a&gt;  (Note that the suitcase pulled by a person is not highlighted in red).&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://player.vimeo.com/video/181490038&quot;&gt;Tracking&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="10596" LastEditorUserId="-1" LastEditDate="2016-10-03T15:32:30.743" LastActivityDate="2016-10-03T15:32:30.743" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="10763" PostTypeId="2" ParentId="10761" CreationDate="2016-10-03T13:01:16.330" Score="4" Body="&lt;p&gt;In addition to those points in Bence's answer, cameras can:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Calculate many complex features that result in very robust matching between frames, and object recognition&lt;/li&gt;&#xA;&lt;li&gt;High angular resolution (typical low-&gt;high range goes from $0.5^\circ$ -&gt; $0.025^\circ$)&lt;/li&gt;&#xA;&lt;li&gt;Lower power usage&lt;/li&gt;&#xA;&lt;li&gt;Passive sensor (doesn't require 'clean' signal of a laser)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="8859" LastActivityDate="2016-10-03T13:01:16.330" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10764" PostTypeId="2" ParentId="10761" CreationDate="2016-10-03T13:09:32.807" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;navigation in urban environments&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Depending on the laser, there might be legal constraints on where you can use it. Running around town throwing laser rays around might require special permission/licence.&lt;/p&gt;&#xA;" OwnerUserId="9860" LastActivityDate="2016-10-03T13:09:32.807" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10766" PostTypeId="2" ParentId="10761" CreationDate="2016-10-03T17:57:17.070" Score="1" Body="&lt;p&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/10695/are-there-any-advantages-to-using-a-lidar-for-slam-vs-a-standard-rgb-camera/10698?noredirect=1#comment19274_10698&quot;&gt;Are there any advantages to using a LIDAR for SLAM vs a standard RGB camera?&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may check this link where I have previously answered a somewhat similar question. (advantages and disadvantages of each)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;in urban environments&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If you are referring to autonomous cars like the Google ones, there are lots of considerations and constraints (safety, cost etc.).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are interested in research &amp;amp; learning, I suggest that you use any hardware platform that is available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind: &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A car with a LIDAR that is extremely expensive won't be easily sold.&lt;/li&gt;&#xA;&lt;li&gt;A car moving autonmously around people, might kill in case of a mistake. Thus the considerations are different than just developing algorithms for the sake of research and learning.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="14590" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2016-10-03T18:49:38.160" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10767" PostTypeId="2" ParentId="10746" CreationDate="2016-10-03T19:37:18.527" Score="4" Body="&lt;p&gt;There are quite a few things wrong here. I'll split them into two sections: technical errors, and coding warnings. &lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Technical Errors:&lt;/h2&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;You are not calculating your angles from accelerometer readings correctly.&lt;/strong&gt; Consider the arguments in general - they are the normalized accelerometer readings on each axis. You then take the inverse cosine of these. So, if the accelerometer is sitting flat on a table, &lt;code&gt;a_z&lt;/code&gt; = -1 (or 1, depending on the polarity/handedness of your sensor), and &lt;code&gt;a_x&lt;/code&gt; and &lt;code&gt;a_y&lt;/code&gt; are zero. You then take the inverse cosine of those values, to find that the angle of rotation about the x and y axes are +90 degrees and the angle of rotation about the z axis is zero. This doesn't make sense. Consider instead using the &lt;a href=&quot;http://www.hobbytronics.co.uk/accelerometer-info&quot; rel=&quot;nofollow&quot;&gt;equations found here&lt;/a&gt;:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\theta_x = \arctan{\left(\frac{X}{\sqrt{Y^2 + Z^2}}\right)} \\&#xA;\theta_y = \arctan{\left(\frac{Y}{\sqrt{X^2 + Z^2}}\right)} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here you can see that, if the accelerometer is reading 0 on the x/y axes and +/-1 on the z-axis, that there is no rotation about the x or y axes. This makes sense. &lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;You are not using the gyroscope &lt;em&gt;angles&lt;/em&gt;&lt;/strong&gt;. The gyroscope outputs an angular &lt;em&gt;velocity&lt;/em&gt;, not an angular &lt;em&gt;position&lt;/em&gt;. In order to get the angular &lt;em&gt;position&lt;/em&gt;, you need to numerically integrate the gyroscope readings. You seem to have this in your code: &lt;code&gt;r = sum(Gyroscope)*(1/T);&lt;/code&gt;, but then you &lt;em&gt;fail to use those angles&lt;/em&gt; in the complimentary filter. Instead you go back to the raw gyro outputs.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Your complimentary filter isn't a complimentary filter.&lt;/strong&gt; A complimentary filter is like a lag filter. Each have the form: &lt;code&gt;y = (k)*a + (1-k)*b;&lt;/code&gt;. In the complimentary filter, &lt;code&gt;a&lt;/code&gt; and &lt;code&gt;b&lt;/code&gt; are two different signals, and &lt;code&gt;k&lt;/code&gt; is like a &quot;blend&quot; factor, where you take &lt;code&gt;k&lt;/code&gt;% of one signal and add it to &lt;code&gt;1-k&lt;/code&gt;% of the other signal. You end up with 100% of signal strength if you do this. In a lag filter, &lt;code&gt;a&lt;/code&gt; is the current sample and &lt;code&gt;b&lt;/code&gt; is the previous output of the lag filter. The &lt;code&gt;k&lt;/code&gt; and &lt;code&gt;1-k&lt;/code&gt; argument still stands, though, and you still wind up with 100% of signal strength. I'll split what you're doing into parts to try to make it more clear what you're doing:&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;You have:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;angle=0.99*(angle+(gyro(a,:)))+(0.01*Racc_norm1(a,:));&#xA;ang(a,:)=angle;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Splitting this up a little, you could rephrase it by pulling the &lt;code&gt;angle&lt;/code&gt; term out of its own definition and calling a different variable - &lt;code&gt;prevAngle&lt;/code&gt;. Factor the &lt;code&gt;0.99&lt;/code&gt; that it's multiplied by as well and you get:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;prevAngle = angle;&#xA;angle = 0.99*(gyro(a,:))+(0.01*Racc_norm1(a,:));&#xA;ang(a,:) = 0.99*prevAngle + angle;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So here it's like you've got a complimentary filter in the form of:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;k = 0.99;&#xA;angle = k*gyro(a,:) + (1-k)*Racc_norm1(a,:);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;but, your lag filter is broken, because after that line you have:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;k2 = 0.99;&#xA;ang(a,:) = k2*prevAngle + (k2+(1-k2))*angle;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;which is the same another way of saying what you have, which is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ang(a,:) = k2*prevAngle + (1)*angle;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Hopefully here you can see that, while your complimentary filter is setup okay and you retain 100% signal strength, your lag filter is broken and &lt;strong&gt;each sample&lt;/strong&gt; increases in magnitude by 1.99. You should be doing &lt;code&gt;k2*prevAngle + (1-k2)*angle&lt;/code&gt;, but instead of adding &lt;code&gt;(1-k2)*angle&lt;/code&gt;, where &lt;code&gt;(1-k2)&lt;/code&gt; is 0.01, you're instead adding &lt;code&gt;1*angle&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, in summary, you are getting gibberish from the accelerometers, and combining that with gyroscope &lt;em&gt;velocities&lt;/em&gt; with a broken filter.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Coding Warnings:&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I'm really not trying to poke you in the eye/salt in the wound at this point, I'm just pointing out some flaws and hopefully giving some guidance that should speed up the work I'd imagine you'll be doing in the future. (Combination of IMU filtering and Matlab all sounds like a senior/grad project). &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Don't use magic numbers.&lt;/strong&gt; Your &lt;code&gt;for&lt;/code&gt; loop runs to 3273. What is that? Why that specific number? You seem to have a grasp of the &lt;code&gt;size()&lt;/code&gt; function. I'll point out that you can call &lt;code&gt;size()&lt;/code&gt; two different ways - as you have, which is &lt;code&gt;[m,n] = size(data)&lt;/code&gt;, or another way - &lt;code&gt;m = size(data,1)&lt;/code&gt; and &lt;code&gt;n = size(data,2)&lt;/code&gt;. You never use &lt;code&gt;n&lt;/code&gt;, so I'm assuming all you care about is the number of rows. I generally get the number of samples/rows with a one-line call like: &lt;code&gt;nSamples = size(data,1);&lt;/code&gt;. Then I can use &lt;code&gt;nSamples&lt;/code&gt; instead of magic numbers in all other places &lt;em&gt;and I don't need to go back and edit the code for different data sets.&lt;/em&gt; Manually re-coding for every data set is hazardous to your sanity and can give you lots of grief when you forget to change &lt;strong&gt;all&lt;/strong&gt; of the magic numbers and then switch data sets. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Don't manually increment anything.&lt;/strong&gt; You declare &lt;code&gt;a=1;&lt;/code&gt; and then use the &lt;code&gt;a=a+1;&lt;/code&gt; at the end of your for loop, using &lt;code&gt;a&lt;/code&gt; everywhere you could otherwise use &lt;code&gt;i&lt;/code&gt;, your loop variable. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Use descriptive names.&lt;/strong&gt; I generally avoid &lt;code&gt;i&lt;/code&gt; and similar, even for loop variables. First, &lt;code&gt;i&lt;/code&gt; without declaration is &lt;code&gt;1i&lt;/code&gt;, the imaginary number in Matlab. Second, it gets a little tedious/confusing in nested loops to go i/j or i/ii or whatever. As with note 1, I declare my samples to be &lt;code&gt;nSamples&lt;/code&gt;, and my &lt;code&gt;for&lt;/code&gt; loops are generally &lt;code&gt;for currentSample = 1:nSamples&lt;/code&gt;. This can blow up column widths, but the code is so much easier to read and the loop variables are so much easier to manage that I figure it's worth it. One loop can loop through your &lt;code&gt;currentSample&lt;/code&gt; and your other loop can then run through &lt;code&gt;currentColumn&lt;/code&gt; or whatever. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Vectorize.&lt;/strong&gt; Vectorizing will always speed up your code. Matlab is terrible, &lt;strong&gt;terrible&lt;/strong&gt; at doing any kind of looping. They have algorithms that run vector operations faster than if you looped over it. In C languages there shouldn't be much of a difference, but Matlab isn't C and it doesn't run in real time. I clocked your code at about 140ms to execute when I made a fake data set of size &lt;code&gt;randn(3723,8)&lt;/code&gt; and used that for your code. When I used vector operations I got that down to 8ms, and that includes the loop required to do the lag filter. If you did &lt;em&gt;just&lt;/em&gt; the complimentary filter, then you can take that loop out and the time drops to 0.8ms. This means that, even though I'm still running a loop, my vectorized version is 16x faster than your unvectorized version. Without the loop it's 160 times faster. I wanted to harp on vectorizing a little because I had simulations as a grad student that ran 24 hours per day for up to 9 days. Every millisecond matters when you're on that time scale. You might not ever do anything that intense, but you'll almost certainly work on larger datasets at some point. This looks like a minute of data.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Not only is it faster, but it's also easier to look at. Consider the following, from your code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;for i=1:3723&#xA;    Acc(a,:)=M.data(i,6:8); % Reading Accelerometer data&#xA;    R_norm(a)=sqrt(Acc(a,1)^2+Acc(a,2)^2+Acc(a,3)^2); % Normalized accelerometer &#xA;    Racc_norm1(a,1)=acos(Acc(a,1)/R_norm(a));         % Angle from accelerometer in X&#xA;    Racc_norm1(a,2)=acos(Acc(a,2)/R_norm(a));         % Angle from accelerometer in Y&#xA;    Racc_norm1(a,3)=acos(Acc(a,3)/R_norm(a));         % Angle from accelerometer in Z&#xA;&#xA;    Gyroscope(a,:)=M.data(i,3:5);                     % Reading gyroscope data&#xA;    gyro(a,:)=Gyroscope(a,:)*(1/t);                   % Integrating gyroscope data&#xA;    r(a,1)=sum(gyro(:,1));                            % Angle from gyroscope data&#xA;    r(a,2)=sum(gyro(:,2));&#xA;    r(a,3)=sum(gyro(:,3));&#xA;    a=a+1;&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and compare that with the vectorized form:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Acc = M.data(:,6:8);&#xA;R_norm = (Acc(:,1).^2 + Acc(:,2).^2 + Acc(:,3).^2).^(0.5);&#xA;Racc_norm1 = acos(Acc(:,1)./repmat(R_norm,1,3));&#xA;&#xA;Gyroscope = M.data(:,3:5);&#xA;gyro = Gyroscope.*(1/t);&#xA;r = cumsum(gyro);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;A couple of things were used there - the colon operator to select 'all' rows (&lt;code&gt;Acc = M.data(:,6:8)&lt;/code&gt;), the use of the element-wise operator, which is just a period before the regular operators (.^ .* ./), the use of &lt;code&gt;repmat&lt;/code&gt; to get &lt;code&gt;R_norm&lt;/code&gt; to be the same size as &lt;code&gt;Acc&lt;/code&gt;. &lt;code&gt;repmat&lt;/code&gt; is easy to use - the data set you want to copy, how many copies you want in the row dimension, and how many copies you want in the column dimension. Lastly, there's the cumulative sum &lt;code&gt;cumsum&lt;/code&gt; to compound sequential sums. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, in closing, this is probably way more than you were looking for, but former grad student to (probably) grad student, these are tips and tricks I learned along the way with Matlab. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Practice vectorizing code in everything you do. When you're working on small stuff it's easy to see if you've done something wrong. By the time you get to big projects, thinking in vectorized form will be second nature. If you wait for the big project to start trying to vectorize, you're in for a world of pain and sorrow trying to learn on-the-fly or (worse) trying to refactor a project.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Best of luck!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;tl;dr - Come for the technical review, stay for the nifty tips! &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-10-03T19:37:18.527" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="10768" PostTypeId="2" ParentId="10761" CreationDate="2016-10-03T19:47:03.070" Score="1" Body="&lt;p&gt;I don't think people really &quot;want&quot; to use only cameras. If every researcher could afford the LiDARs they'd all put LiDARs on they robots for outdoor environment. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cameras are pretty cheap and the only limit to range is the pixel/superpixel resolution that you can process in your algorithm/software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most researchers (including me) use structured light cameras (although they don't work outdoors, so we switch to RGB cameras on these sensors when the robot is outdoors). A solution to this light problem is that we also use stereo cameras (stereo vision/multi-view depth which is computationally expensive) for roughly determining depth, based on the processing capabilities of the controller/CPU. Another solution that I've yet to personally explore is to use multiple Kinects/Asus Xtions etc, where you get depth corroboration as well as multiple RGB cameras for outdoors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;LiDARs are typically very expensive (in the thousands of $$ for really good ones). Although this might change in the future with some companies coming out with $250 &quot;LiDARs&quot; like &lt;a href=&quot;http://spectrum.ieee.org/automaton/robotics/robotics-hardware/sweep-lidar-for-robots-and-drones&quot; rel=&quot;nofollow&quot;&gt;Sweep&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, LRF's/LiDARs have limited range and resolution (i.e., beyond a certain distance, they cannot resolve depth unambiguously and hence they return 0 values (I'm not sure specifically about LiDARs, but depth cameras have a maximum (above which) as well as minimum range (below which) they dont give you depth).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this helps.&lt;/p&gt;&#xA;" OwnerUserId="4056" LastActivityDate="2016-10-03T19:47:03.070" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10769" PostTypeId="1" AcceptedAnswerId="10775" CreationDate="2016-10-03T20:30:16.400" Score="2" ViewCount="110" Body="&lt;p&gt;I'm in the final phase of my BeerBot* project, and I'm looking for the best way to power it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BeerBot will spend most of his life sitting in a docking station, keeping his battery charged and running off of wall power.  When called upon, he needs to be able to disconnect from the docking station and switch to battery power without interrupting power to his brain.  Upon returning to his docking station, he needs to switch back to wall power again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a NiMH charge circuit, and I have a circuit for powering the robot from a wall outlet, I'm just not sure how to switch from one to the other without interrupting power.  For my testing thus far, I've just been shutting the robot down and manually switching between wall power and battery power, and connecting the battery to an external charger as needed.  This is obviously not a permanent solution, since BeerBot needs to be always at the ready - shutting him down to switch over to battery power every time I need a beer would defeat the whole purpose of BeerBot*.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my question is, what is the best way to keep a robot powered from the wall, simultaneously charging the battery, and switching between wall power and battery power automatically when disconnected?  I guess this is analogous to the way a laptop works - switching to battery when unplugged and and keeping the battery charged while plugged in.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't care if it's a ready-made solution or a circuit I can build, I'm just looking for a good way to do this without frying my robot or setting my house on fire.  I'm mostly a software guy, so I know just enough about circuit design to be dangerous (and I've fried enough electronics to know that power supplies can be dangerous...).  I've been looking at power management ICs, but I'm thinking that might be overkill since I already have a charging circuit and a wall-power circuit, I just need a way to switch between them.  Can I just connect both and use a couple of diodes to keep current from flowing in directions it shouldn't, like this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/hw6JA.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hw6JA.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;or do I need something more complex?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*If you're curious, BeerBot is a semi-autonomous beer-seeking robot.  He sits quietly in the corner listening for commands.  Currently his only command comes from a modified &lt;a href=&quot;http://www.staples.com/Staples-Easy-Button/product_606396&quot; rel=&quot;nofollow noreferrer&quot;&gt;Easy Button&lt;/a&gt; on my desk, which sends a wireless signal to BeerBot.  When he hears the signal, he wakes up, drives autonomously to the refrigerator, opens the door with his robotic arm, uses computer vision to detect a beer bottle (placed strategically on the bottom shelf where he can reach), grabs a cold one, closes the refrigerator door, brings the beer to my desk, and returns to his corner to await my next request.  Phase 2 will incorporate a bottle opener.&lt;/p&gt;&#xA;" OwnerUserId="3910" LastEditorUserId="3910" LastEditDate="2016-10-03T20:49:17.507" LastActivityDate="2016-10-04T10:56:00.860" Title="Switching from wall power to battery and back again" Tags="&lt;battery&gt;&lt;power&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10770" PostTypeId="1" AcceptedAnswerId="10771" CreationDate="2016-10-03T22:48:32.833" Score="6" ViewCount="7991" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Lidar&quot; rel=&quot;noreferrer&quot;&gt;LIDAR&lt;/a&gt;s use a pulse of light to measure distance, usually from the time of flight to reflection and back. With a collection of these measurements they can determine their surroundings in two or three dimensions. LIDARs are used as one of the sensor systems for self-driving cars, in addition to cameras and other radar systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Robotic cars are still in the testing phase, but at some point in the future we can expect a busy intersection filled with them, trying to navigate their way through it. With multiple scanners per car, and possibly multiple beams per scanner, interfering signal sources could go over a hundred even in smaller stages.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When time of flight is used to measure the distance to the reflection, the interfering signals would produce multiple &quot;distances&quot;, and it would most likely require multiple scans of the same point to average some kind of a reliable value from all the noise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How do LIDAR systems differentiate their own signals from other sources? With the example of robotic cars, could this interference lead to an error state where traffic could gridlock from lack of valid data? Or is this even a problem?&lt;/p&gt;&#xA;" OwnerUserId="14901" LastActivityDate="2018-07-06T06:54:46.687" Title="Do multiple LIDAR systems in same area interfere?" Tags="&lt;sensors&gt;&lt;lidar&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10771" PostTypeId="2" ParentId="10770" CreationDate="2016-10-04T01:11:19.547" Score="2" Body="&lt;p&gt;One could use lasers with slightly different wave length - just as different channels for Wi-Fi signal. Also there could be used some kind of wave modulation... but I don't think LIDARs use such solutions, since laser point is so small, that case of interference with other sensor is... kinda, rare event.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I experienced interference of distance sensors, but with ultrasonic measurement, when 3 robots with multiple (12) sensors were working in distance of ~3 meters between each other. Never had this problem with LIDARs, though. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this even a problem in robotic cars? It should'nt be. Error correction and having high quality enviroment maps are the main reasons of putting multiple LIDARs and camera systems on intelligent cars. Distance measurement fail of one sensor, or interference with other car's LIDAR system (which is, as written before, a rare event) should not cause system to collapse.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As You wrote, &lt;strong&gt;robotic cars are still in testing phase&lt;/strong&gt;, so any interference between multiple sensors working on giant intersection, are yet to be (or hopefully not) problems and sensor engineers will have to face them.&lt;/p&gt;&#xA;" OwnerUserId="14673" LastActivityDate="2016-10-04T01:11:19.547" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="10772" PostTypeId="1" CreationDate="2016-10-04T03:55:43.453" Score="1" ViewCount="59" Body="&lt;p&gt;I would like to detect road surface in a park. In the park, only small grass are covered with the both side of the road. That means there is road and the both side of the road are covered by small grass.&#xA;Is it possible to detect road surface (not grass) using LRF data or other laser sensors? &#xA;If not, why?&#xA;if yes, which is better-Camera or laser sensor?&lt;/p&gt;&#xA;" OwnerUserId="14886" LastActivityDate="2016-10-05T13:11:34.320" Title="Is it possible to detect road surface or navigation area using LRF data or other laser data in a Park?" Tags="&lt;wheeled-robot&gt;&lt;computer-vision&gt;&lt;navigation&gt;&lt;stereo-vision&gt;&lt;laser&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10773" PostTypeId="1" CreationDate="2016-10-04T05:19:40.290" Score="1" ViewCount="2947" Body="&lt;p&gt;I would like to implement pure pursuit waypoints navigation. we know that,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;look ahead distance=look ahead gain*vehicle forward velocity&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I calculate look ahead velocity gain/look ahead gain? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I calculate velocity profile for each waypoints?&lt;/p&gt;&#xA;" OwnerUserId="14886" LastActivityDate="2016-10-04T23:12:13.733" Title="Implementing pure pursuit problem in robot navigation?" Tags="&lt;mobile-robot&gt;&lt;wheeled-robot&gt;&lt;navigation&gt;&lt;line-following&gt;" AnswerCount="1" CommentCount="3" ClosedDate="2016-10-05T12:00:41.767" ContentLicense="CC BY-SA 3.0" />
  <row Id="10774" PostTypeId="2" ParentId="10761" CreationDate="2016-10-04T08:45:12.790" Score="2" Body="&lt;p&gt;Like other already answered. Cameras typically are much cheaper than &lt;strong&gt;L&lt;/strong&gt;aser  &lt;strong&gt;R&lt;/strong&gt;ange &lt;strong&gt;F&lt;/strong&gt;inders. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you talk about camera you mean the 2D cameras isn't it? There are some 3D cameras like the &lt;a href=&quot;http://rosindustrial.org/news/2015/5/5/ros-driver-for-the-ifm-efector-o3d303&quot; rel=&quot;nofollow&quot;&gt;ifm O3D3xx&lt;/a&gt; family of cameras available. Those camera may not have the accuracy of a laser scanner but they provide 3D depth data in reasonable frame rates at a price point of ~1k&lt;/p&gt;&#xA;" OwnerUserId="14906" LastActivityDate="2016-10-04T08:45:12.790" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10775" PostTypeId="2" ParentId="10769" CreationDate="2016-10-04T10:56:00.860" Score="1" Body="&lt;p&gt;Basically the simple &lt;strong&gt;Diode-OR&lt;/strong&gt; circuit, you just have shown would be enoguh, if you (or your circuits) can get along with the voltage drop on the diodes. It is about 0.3 V - 0.5 V depending on the diodes you choose. But there is one thing you have to make sure, so the switching between the power supplies will happen correctly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/dNeYW.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dNeYW.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The voltage from the wall supply should be larger than the voltage from the battery, ensuring that when the wall adapter is connected D1 will conduct and D2 won't.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Wall adapter is disconnected: $$ V_{out} = V_{battery} $$&lt;/li&gt;&#xA;&lt;li&gt;When the robot connects to the adapter, where: $$ V_{wall} &amp;gt; V_{battery}(=V_{out}) $$&#xA;then D1 will conduct as the voltage on its anode (+) will be higher than on its cathode (-).&lt;/li&gt;&#xA;&lt;li&gt;Now the output will be: $$ V_{out} = V_{wall} $$&#xA;so the voltage on the cathode (-) of D2 will be higher than on its anode (+), disconencting the battery.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;This won't work if the two voltage sources are equal, slightly equal.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;There are also available autoswitching power multiplexer ICs on the market, such as this &lt;a href=&quot;http://www.ti.com/lit/ds/symlink/tps2114a.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;one&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/AEbr1.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/AEbr1.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that, this is just an &lt;strong&gt;example&lt;/strong&gt; and it does not support 12 V input. You can find one with the correct voltage and current ratings though.&lt;/p&gt;&#xA;" OwnerUserId="10596" LastActivityDate="2016-10-04T10:56:00.860" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10776" PostTypeId="2" ParentId="10753" CreationDate="2016-10-04T12:04:11.640" Score="3" Body="&lt;p&gt;The Roombots example you posted does not use a level shifter because they are using the Create USB cable to talk to the robot. If you are planning to use this cable, you do not need the level shifter. If you are &lt;em&gt;not&lt;/em&gt; planning to use this cable and instead will be interfacing directly to the Raspberry Pi serial pins (on the GPIO header), then the answer below applies:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yes, you should use a level shifter between the iRobot Create and the Raspberry Pi, and you &lt;strong&gt;must&lt;/strong&gt; use one on the &lt;em&gt;input&lt;/em&gt; to the Raspberry Pi. The Create uses 5V logic levels, while the Raspberry Pi uses 3.3V logic levels. The Raspberry Pi output high (3.3V) is high enough for the Create to &quot;see&quot; it as a &quot;high&quot; input, so you don't necessarily need a logic level shifter for the Create inputs. However, a Create output high (5.0V) is higher than the processor on the Raspberry Pi can handle for long, and sustained use will cause the serial port on the Raspberry Pi to fail. The circuit in the drawing is indeed bidirectional, but only one of those directions (Create TX to Pi RX) is being used; you could just as easily replace the FET with a Schottky diode from source to drain and eliminate R2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;Please note that while I'm an iRobot employee, the postings on this site are my own and don't necessarily represent iRobot's positions, strategies, or opinions.&lt;/sup&gt;&lt;/p&gt;&#xA;" OwnerUserId="7665" LastEditorUserId="7665" LastEditDate="2018-07-19T12:49:14.210" LastActivityDate="2018-07-19T12:49:14.210" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="10778" PostTypeId="2" ParentId="10631" CreationDate="2016-10-04T18:56:36.330" Score="0" Body="&lt;p&gt;My current approach is the following:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;transform the the noisy leader vehicle state from ego coordinates to global coordinates using the current pose of the ego vehicle $(x_{ego},y_{ego},\theta_{ego})$.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;estimate an improved (less noisy) trajectory of the leader in global coordinates.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;backtransform the optimized state estimates from global to ego coordinates using the corresponding ego vehicle pose.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;It is possible to stay in the ego frame but this seems to need more effort, since it would be harder to tell if the leader or the ego vehicle moved. However, I was told the common approach is the solution in global coordinates.&lt;/p&gt;&#xA;" OwnerUserId="14683" LastActivityDate="2016-10-04T18:56:36.330" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10779" PostTypeId="2" ParentId="10761" CreationDate="2016-10-04T20:15:34.830" Score="0" Body="&lt;p&gt;I am going to add another reason that frankly I was hoping someone else would bring up. Because why do we make robots in the first place? Emotionless machines to do our dirty work?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think that the fact that a robot can rely purely on &quot;vision&quot; like we mammals do makes them more like us. So for me, lasers and sonars are cheating. What IMHO we should focus on in stead of cheating is making better cameras with higher frame-rate, higher dynamic range and less artifacts, and write software that can get the needed data from them. (Or, speaking in post 2012 terms, train our networks to get what data they need from them).&lt;/p&gt;&#xA;" OwnerUserId="10113" LastActivityDate="2016-10-04T20:15:34.830" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10780" PostTypeId="2" ParentId="10773" CreationDate="2016-10-04T23:12:13.733" Score="1" Body="&lt;p&gt;My understanding of the pure pursuit algorithm is that the look ahead distance is a fixed parameter.  In this original paper [1], there is a short discussion on choosing the look ahead distance.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/KVLel.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KVLel.png&quot; alt=&quot;Look ahead distance selection&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I believe you should tune this to the typical speeds of your robot and the types of paths you will be following (i.e. very curvy or straight). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;[1] &lt;a href=&quot;https://www.ri.cmu.edu/pub_files/pub3/coulter_r_craig_1992_1/coulter_r_craig_1992_1.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Implementation of the Pure Pursuit Path Tracking Algorithm&lt;/a&gt;. R. Craig Coulter, CMU, 1992.  &lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2016-10-04T23:12:13.733" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10782" PostTypeId="2" ParentId="10772" CreationDate="2016-10-05T13:11:34.320" Score="1" Body="&lt;p&gt;&lt;strong&gt;Is it possible to detect road surface (not grass) using LRF data or other laser sensors?&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yes it is possible. A laser scanner will give distance measurements along a scan line. Presumably, the road surface is sufficiently smooth that it will be distinguishable from natural terrain. A quick way (certainly not the best way) to get this working for a prototype would be to use a Hough transform to identify lines in the laser scan, the idea being that a scan of the road will be a reasonably clean line and natural terrain will not. This of course requires the laser scanner to be downward facing (perhaps mounted on a mast), which seems like a waste.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Which is better-Camera or laser [range finder]?&lt;/strong&gt;&#xA;Because you don't seem to care about exact distances between the robot and the grass, I would suggest using a camera, which will be significantly cheaper. As for which is &lt;em&gt;better&lt;/em&gt;, that depends on what you are actually doing.&lt;/p&gt;&#xA;" OwnerUserId="9585" LastActivityDate="2016-10-05T13:11:34.320" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10784" PostTypeId="1" CreationDate="2016-10-06T13:36:43.910" Score="2" ViewCount="134" Body="&lt;p&gt;I am working on MEMS accelerometers, and I want to understand the difference between, &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Cross axis sensitivity&lt;/li&gt;&#xA;&lt;li&gt;Axis Misalignment&lt;/li&gt;&#xA;&lt;li&gt;Non Orthogonality&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;In literature, people use it interchangeably. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;These physical parameters cause deterministic errors, which I want to correct during calibration&lt;/p&gt;&#xA;" OwnerUserId="14376" LastEditorUserId="10596" LastEditDate="2016-10-06T17:02:15.990" LastActivityDate="2016-10-07T13:59:30.187" Title="Accelerometer deterministic errors" Tags="&lt;accelerometer&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10786" PostTypeId="1" AcceptedAnswerId="10789" CreationDate="2016-10-06T15:13:58.060" Score="-2" ViewCount="273" Body="&lt;p&gt;I want to know if the Create 2 can interface a laser radar?&#xA;For example an &lt;a href=&quot;http://www.slamtec.com/en/lidar&quot; rel=&quot;nofollow&quot;&gt;RPLidar&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="14933" LastEditorUserId="10596" LastEditDate="2016-10-08T18:00:59.113" LastActivityDate="2016-10-08T18:00:59.113" Title="I want to know whether the Create2 can interface a LIDAR?" Tags="&lt;irobot-create&gt;&lt;laser&gt;&lt;lidar&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="0" ClosedDate="2016-10-11T12:43:47.823" ContentLicense="CC BY-SA 3.0" />
  <row Id="10787" PostTypeId="2" ParentId="10784" CreationDate="2016-10-06T15:30:33.377" Score="5" Body="&lt;ol&gt;&#xA;&lt;li&gt;Cross-axis sensitivity: A reading on one axis creates a false reading on another axis. This could be because the signal traces are close together and capacitive coupling induces a voltage on the adjacent trace. &lt;/li&gt;&#xA;&lt;li&gt;Axis misalignment: The x-axis of the &lt;em&gt;sensor&lt;/em&gt; is not aligned with the x-axis of the &lt;em&gt;package&lt;/em&gt;, so when you are expecting an x-axis reading because you moved the package along &lt;em&gt;its&lt;/em&gt; x-axis, you instead get readings of not-quite-full scale on x and a smaller reading on the y- and/or z-axes. &lt;/li&gt;&#xA;&lt;li&gt;Non-orthogonality: The sensor is deformed and the portion of the sensor that is supposed to detect acceleration on the y-axis is instead &quot;bent&quot; and &quot;leans&quot; toward the x- and/or z-axes. Same goes for the other axes. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;So, let's use the example of sliding the accelerometer purely along the x-axis. You take measurements and find that you're getting a non-zero, positive reading on the y-axis in addition to a &quot;roughly correct&quot; reading on the x-axis. What is the cause?&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Cross-axis sensitivity - could be the y-axis signal line is coupled to the x-axis signal line and the x-axis reading induces a voltage that is read by the y-axis ADC and returned.&lt;/li&gt;&#xA;&lt;li&gt;Axis misalignment - The z-axis is reading zero (in this example), so it is pointing in the correct direction, but the sensor could be rotated &lt;em&gt;about&lt;/em&gt; the z-axis relative to the package (an angle $\theta$), such that the y-axis points a little in the direction of the +x-axis. When the package is slid along the &lt;em&gt;package's&lt;/em&gt; x-axis, the &lt;em&gt;sensor's&lt;/em&gt; x-axis reads $\ddot{x}_{\mbox{package}}\cos{\theta}$ and the &lt;em&gt;sensor's&lt;/em&gt; y-axis reads $\ddot{x}_{\mbox{package}}\sin{\theta}$.&lt;/li&gt;&#xA;&lt;li&gt;Non-orthogonality - The sensor's x-axis is actually pointing correctly in the package's x-axis and the sensor's z-axis is correctly pointing in the package's z-axis, but the sensor's y-axis is &quot;bent&quot; and it's not perpendicular to the x- and z-axes. Now the x-axis is reading the correct value, but the y-axis is incorrectly reading some value because it's bent &lt;em&gt;towards&lt;/em&gt; the x-axis. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Why do people use them interchangeably? Because you can't see behind the scenes and see what's causing the y-axis to incorrectly report readings. It could be any one of the three, or all three, or any other permutation. &lt;/p&gt;&#xA;&#xA;&lt;h2&gt;:EDIT:&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;OP asked about mathematical modelling of the errors, and while I don't have any resources on these exactly, I can offer a couple things to think about that you could consider as &quot;guidelines&quot; for designing the tests to differentiate these errors:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Cross-axis sensitivity. Here the assumption is that there's some coupling between sensor axes internally. With the (almost certainly capacitive) coupling, there's an associated &lt;em&gt;time constant&lt;/em&gt;. That is, if you could get the sensor to maintain a constant acceleration on one axis, if there is cross-axis sensitivity, the reading on the other axis should be &lt;em&gt;time-dependent&lt;/em&gt; and should display a familiar &lt;a href=&quot;http://cds.linear.com/image/ExpVoltageSourceParameters.png&quot; rel=&quot;nofollow&quot;&gt;shark fin shape&lt;/a&gt;. Keep in mind that a object on a circular path always needs a constant acceleration towards the axis of rotation (centripetal force), so a turntable would be an easy way to set this up. &lt;/li&gt;&#xA;&lt;li&gt;Axis misalignment. If the reading on the un-actuated axis does &lt;em&gt;not&lt;/em&gt; change with time (and know that the capacitance between those sensor lines could be very, very small - very fast time constant!), then check that the readings affect &lt;em&gt;both axes&lt;/em&gt; equally. That is, when accelerating on the x-axis, you might get $\ddot{x}_{\mbox{package}}\cos{\theta}$ on the sensor's x-axis and $\ddot{x}_{\mbox{package}}\sin{\theta}$ on the sensor's y-axis. You have no way of knowing what $\theta$ is because it's &lt;em&gt;supposed&lt;/em&gt; to be zero. BUT, when you re-orient the sensor and accelerate along the &lt;strong&gt;y-axis&lt;/strong&gt;, you should now expect the sensor to read $\ddot{y}_{\mbox{package}}\cos{\theta}$ on the sensor's y-axis and $\ddot{y}_{\mbox{package}}\sin{\theta}$ on the sensor's x-axis. If the y-axis reading when testing the x-axis the same as the x-axis reading when testing the y-axis, then both axes are skewed and the sensor is rotated with respect to the package. Going back to the example where we're testing on the x-axis, the y-axis value should be smaller, and if you divide the y-axis reading by the x-axis reading, you get: $(\ddot{y}/\ddot{y})(\sin{\theta}/\cos{\theta})$, which is equal to $\tan{\theta}$. Now take the inverse tangent of the y/x reading and you'll get the rotation angle. &lt;/li&gt;&#xA;&lt;li&gt;Non-orthogonality. This error is where one or more axes are bent such that they're not perpendicular. In this case, let's assume the sensor x- and z-axes are correctly aligned with respect to the package, but the y-axis is bent. In this case, in the same test as #2 above, you should find that when you accelerate the package along its x-axis, the y-axis is bent so it has a reading, but when you accelerate the package along its y-axis, the x-axis does &lt;strong&gt;not&lt;/strong&gt; have a reading. This is because the sensor's x-axis is orthogonal to the package's y-axis, so there's nothing to sense. The sensor's y-axis is &lt;strong&gt;not&lt;/strong&gt; orthogonal to the package's x-axis, though, which is why you &lt;em&gt;do&lt;/em&gt; get a reading when moving along that axis. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;To summarize: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the false reading is time-dependent, it's a coupling issue. The rise and fall times give you the time constant, which in turn should allow you to model the coupling. Note that these rise/fall times might be very fast.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If a y-axis acceleration causes a reading on the x-axis that's symmetric to the y-axis reading caused during an x-axis acceleration, the sensor is rotated with respect to the package. Take the arctangent of the readings to get the rotation angle. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the readings aren't symmetric, one (or more) axes are bent. Here you'd use the arcsine (or arccosine, depending on your definition) to get the bend angle, because the unaffected axis should read the full value.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'll find this to be more complex in reality, because you could have all three problems on all three axes. A time-dependent coupling that doesn't start at zero indicates problem #1 with (#2 and/or #3). A related but not perfectly symmetric set of readings when swapping axes indicates problems #2 and #3 together. This should give you enough to get started designing your own tests. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2016-10-07T13:59:30.187" LastActivityDate="2016-10-07T13:59:30.187" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="10788" PostTypeId="1" CreationDate="2016-10-06T15:46:07.540" Score="0" ViewCount="139" Body="&lt;p&gt;I am curious about the travelling distance/turning angle accuracy of Irobot Create 2. E.g., if the program let Create 2 go forward for 10 m, will Create 2 go forward exactly 10 m?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the possible error for Create 2 for both travelling distance and turning angle? I did not find related information in the Irobot create 2 manual. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any one could help me with the above questions?&lt;/p&gt;&#xA;" OwnerUserId="14934" LastEditorUserId="10596" LastEditDate="2016-10-07T18:15:57.150" LastActivityDate="2016-12-12T20:26:10.617" Title="Is there any error analysis of Irobot Create 2?" Tags="&lt;irobot-create&gt;&lt;errors&gt;&lt;sensor-error&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10789" PostTypeId="2" ParentId="10786" CreationDate="2016-10-06T17:42:28.283" Score="1" Body="&lt;p&gt;If you are willing to work at it, adding LIDAR to the Create 2 should be possible. If you read the &lt;a href=&quot;https://cdn-shop.adafruit.com/datasheets/create_2_Open_Interface_Spec.pdf&quot; rel=&quot;nofollow&quot;&gt;iRobot Create 2 OI Specs&lt;/a&gt;, you will see that you can communicate with the Create via serial communication. If you look at the datasheet for the &lt;a href=&quot;http://www.slamtec.com/download/lidar/documents/en-us/LD204_SLAMTEC_rplidar_datasheet_A2M4_v1.0_en.pdf&quot; rel=&quot;nofollow&quot;&gt;RPLidar&lt;/a&gt;, you will see that you can communicate with the sensor using serial communication. Because you cannot program the Create directly, you will need to use a microcontroller to interface the LIDAR and the robot.&lt;/p&gt;&#xA;" OwnerUserId="9585" LastActivityDate="2016-10-06T17:42:28.283" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10790" PostTypeId="2" ParentId="10788" CreationDate="2016-10-06T18:06:20.043" Score="1" Body="&lt;p&gt;Ostensibly, the error in angular and linear velocity of the Create 2 is quite large--this is due in part to limitations of open-loop control of the robot based on motor encoders that introduce significant inaccuracy to the system. You can find many similar questions addressing this same concern.&lt;/p&gt;&#xA;" OwnerUserId="9585" LastActivityDate="2016-10-06T18:06:20.043" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10791" PostTypeId="2" ParentId="8104" CreationDate="2016-10-06T23:36:20.123" Score="1" Body="&lt;p&gt;Is there anything with a weight (actually moment of inertia) connected to the servo? If so, it might be that the plastic &quot;mounting&quot; part is slipping with respect to axle. Axle shouldn't ever be changing extremes.&lt;/p&gt;&#xA;" OwnerUserId="4017" LastActivityDate="2016-10-06T23:36:20.123" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10792" PostTypeId="1" CreationDate="2016-10-07T11:55:25.203" Score="-1" ViewCount="117" Body="&lt;p&gt;Plus how should I use a multimeter to test it?&lt;/p&gt;&#xA;&lt;p&gt;P. S.  Really sorry for a noon question.&lt;/p&gt;&#xA;" OwnerUserId="10904" LastEditorUserId="19515" LastEditDate="2020-07-27T18:27:51.977" LastActivityDate="2021-01-05T15:19:42.797" Title="How to test how much current 9 servos can draw at a time?" Tags="&lt;mobile-robot&gt;&lt;servomotor&gt;&lt;current&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2016-10-07T18:58:05.407" ContentLicense="CC BY-SA 4.0" />
  <row Id="10793" PostTypeId="2" ParentId="10792" CreationDate="2016-10-07T13:40:31.097" Score="2" Body="&lt;p&gt;I assume that all the servos are identical, so it is enough to measure only one, and multiply the result by 9.&lt;/p&gt;&#xA;&lt;p&gt;The best would be if you could use a lab bench variable power supply, like &lt;a href=&quot;https://i.stack.imgur.com/LNsXK.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt;. With one of these you do not even need a multimeter as these power supplies are able to measure the current they are sourcing. You simply just need to connect the &lt;strong&gt;&amp;quot;+&amp;quot;&lt;/strong&gt; to the VCC of the servo and the &lt;strong&gt;&amp;quot;-&amp;quot;&lt;/strong&gt; to the GND of the servo, set the output votlage and check the current.&lt;/p&gt;&#xA;&lt;p&gt;If you do not have access to such a device then the following setup should be used.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Jum2s.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Jum2s.png&quot; alt=&quot;![enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;As you can see the multimeter should be connected in series with the servo to measure its current.&lt;/p&gt;&#xA;&lt;p&gt;You should connect to multimeter cables as it can be seen on the following image.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/I6a59.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/I6a59.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&#xA;&lt;sub&gt;(source: &lt;a href=&quot;https://www.engineersgarage.com/sites/default/files/imagecache/Original/wysiwyg_imageupload/4214/Multimeter%20current%20connections.JPG&quot; rel=&quot;nofollow noreferrer&quot;&gt;engineersgarage.com&lt;/a&gt;)&lt;/sub&gt;&lt;/p&gt;&#xA;&lt;p&gt;You are going to measure DC current, and possibly it will be over 1 A, so choose the measurement range accordingly.&#xA;The red cable goes to the power supply Vout (&lt;strong&gt;&amp;quot;+&amp;quot;&lt;/strong&gt;) and the black cable goes to the VCC of the servo.&lt;/p&gt;&#xA;&lt;p&gt;Make sure the all of your wires are suitable for the measurement, they won't melt or catch fire because of large currents. And if exists, check the datasheet of the servos about its current comsuption, just to know what range to expect.&lt;/p&gt;&#xA;" OwnerUserId="10596" LastEditorUserId="15160" LastEditDate="2021-01-05T15:19:42.797" LastActivityDate="2021-01-05T15:19:42.797" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="10794" PostTypeId="2" ParentId="10755" CreationDate="2016-10-07T18:12:20.317" Score="-1" Body="&lt;p&gt;Servos don't really have the punch power I think you are looking for, you mentioned stepper motors being geared up but low torque - there are many steppers available that do exactly the opposite e.g. high RPM internally but thanks to a gear head fitted directly to the motor cylinder the actual drive shaft has a much lower RPM with high torque.  You haven't mentioned if the arm is just to go from point A to point B or you want it to be fully articulated and controllable similar to the drawing arm in your diagram and you also have not mentioned your control device e.g. is it computer controlled or manual (such as a joystick). You also have not mentioned the most obvious choice for arm control which is pneumatic, have you ruled this out for a specific reason?  Finally, does it have to be an arm or just a mechanism to hit the puck as you could use simple x/y axis control e.g. left/right backward/forward this is the type of mechanism you would find in a plotter printer or controlling the crane arm in those arcade machines where you have to grab the toy!  a servo where X &amp;amp; Y meet could control the angle of the surface that hits the puck giving even more control and accuracy.  If you come back to me with more specific requirements I'll try and give a more specific answer!  Good luck.&lt;/p&gt;&#xA;" OwnerUserId="14941" LastActivityDate="2016-10-07T18:12:20.317" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10796" PostTypeId="1" CreationDate="2016-10-07T19:29:49.473" Score="3" ViewCount="139" Body="&lt;p&gt;As you know in Bug algorithm there is a simplifying assumption that says the robot has no size and can fit between any arbitrarily small gap in the map. How can we overcome the challenge of robot size. As we don't have any per-calculated map (in sensor based navigation), can we still tackle the problem in configuration space?&#xA;For example, let's assume that the type of the sensor is Hokuyo URG-04LX Laser Rangefinder. Hence we can visualize the sensor measurements by the visualization matrix $V$:&#xA;\begin{equation}&#xA;V_i  =\begin{pmatrix}cos(\theta_i )* d_i, \quad sin(\theta_i )* d_i\end{pmatrix}\\&#xA;\end{equation}&#xA;Where $D= [d_1,d_2,\dotsc, d_n]$ is the set of distances, and $\theta_i$ can be calculated as:&#xA;\begin{equation}&#xA;\theta_i = \theta_{i-1} + {0.36}^\circ,\qquad \theta_1 = 0&#xA;\end{equation}&#xA;All the information we have about the robot's surrounding at each moment is $V$. I strongly believe that there is no well-formed formula which can define the robot size in this configuration, and also as we don't have any map, but a simple visualization, growing the obstacles by the radius of the robot size in the configuration space just doesn't make sense.&lt;/p&gt;&#xA;" OwnerUserId="14943" LastEditorUserId="14943" LastEditDate="2016-10-09T07:51:06.523" LastActivityDate="2016-10-10T10:14:03.393" Title="How can we solve the problem of robot size in sensor based motion planning?" Tags="&lt;mobile-robot&gt;&lt;motion-planning&gt;&lt;navigation&gt;&lt;path-planning&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10798" PostTypeId="2" ParentId="10607" CreationDate="2016-10-08T11:16:24.397" Score="-2" Body="&lt;p&gt;Inverse Kinematics are easier to calculate with visualizing the problemspace. Here is a example for a robotarm with 2 DOF:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/DGwGd.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/DGwGd.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre class=&quot;lang-python prettyprint-override&quot;&gt;&lt;code&gt;fig = plt.figure()&#xA;ax = Axes3D(fig) &#xA;x,y,z=[],[],[]&#xA;p1=(300,300)&#xA;goal=(400,300)&#xA;radius1,radius2=50,100&#xA;step=10&#xA;for a1 in range(0,360,step):&#xA;  for a2 in range(0,360,step):&#xA;    p2 = pa.polarpoint(p1, a1, radius1)&#xA;    p3 = pa.polarpoint(p2, a2, radius2)&#xA;    diff = pa.distance(goal, p3)&#xA;    if diff&amp;lt;10:&#xA;      print a1,a2,p3,diff&#xA;      ax.scatter(a1, a2, diff,c='r')&#xA;    x.append(a1)&#xA;    y.append(a2)&#xA;    z.append(diff)&#xA;ax.scatter(x, y, z)&#xA;plt.show()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The program plots the errorvalue in a 3D Map. For other robotypes like a hanging plotter the codelines with the polarpoint has to be adjusted. The 3D map is not the solution directly, but it helps to program a heuristics for finding the lowest point in the map. In most cases Gradient descent in combimation with particle swarm optimization is the way to go.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2016-10-08T11:16:24.397" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="10799" PostTypeId="1" CreationDate="2016-10-08T11:39:34.000" Score="3" ViewCount="416" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/tIIaU.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tIIaU.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;So I had this old lappy on which I used to play with ROS a lot then it got broken so I bought a new one and installed the same distro as that of old one i.e. arch linux. Now when I am installing the ROS via AUR I get this build error please help me fix this.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Scanning dependencies of target libqt_gui_cpp_sip&#xA;[ 85%] Running SIP generator for qt_gui_cpp_sip Python bindings...&#xA;Traceback (most recent call last):&#xA;File &quot;/opt/ros/jade/share/python_qt_binding/cmake/sip_configure.py&quot;, line 50, in &amp;lt;module&amp;gt;&#xA;    config = Configuration()&#xA; File &quot;/opt/ros/jade/share/python_qt_binding/cmake/sip_configure.py&quot;, line 19, in __init__&#xA;    ['qmake', '-query'], env=env, universal_newlines=True)&#xA;  File &quot;/usr/lib/python2.7/subprocess.py&quot;, line 567, in check_output&#xA;    process = Popen(stdout=PIPE, *popenargs, **kwargs)&#xA;  File &quot;/usr/lib/python2.7/subprocess.py&quot;, line 711, in __init__&#xA;errread, errwrite)&#xA;  File &quot;/usr/lib/python2.7/subprocess.py&quot;, line 1343, in _execute_child&#xA;raise child_exception&#xA;OSError: [Errno 2] No such file or directory&#xA;make[2]: *** [src/qt_gui_cpp_sip/CMakeFiles/libqt_gui_cpp_sip.dir/build.make:90: sip/qt_gui_cpp_sip/Makefile] Error 1&#xA;make[1]: *** [CMakeFiles/Makefile2:375: src/qt_gui_cpp_sip/CMakeFiles/libqt_gui_cpp_sip.dir/all] Error 2&#xA;make: *** [Makefile:128: all] Error 2&#xA;==&amp;gt; ERROR: A failure occurred in build().&#xA;Aborting...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="14863" LastEditorUserId="14863" LastEditDate="2016-10-08T13:02:40.883" LastActivityDate="2017-12-12T06:36:16.277" Title="ROS Installation Error : ARCH LINUX" Tags="&lt;ros&gt;&lt;python&gt;&lt;linux&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10800" PostTypeId="1" CreationDate="2016-10-08T18:15:56.100" Score="2" ViewCount="3308" Body="&lt;p&gt;I have an Arduino connected to ROS through serial port. I wrote an ardiuno code to drive motors. below is my code.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;//Library to communicate with I2C devices&#xA;    #include &quot;Wire.h&quot;&#xA;    #include &amp;lt;Messenger.h&amp;gt;&#xA;    //Contain definition of maximum limits of various data type&#xA;    #include &amp;lt;limits.h&amp;gt;&#xA;     //Messenger object&#xA;    Messenger Messenger_Handler = Messenger();&#xA;&#xA;    //////////////////////////////////////////////////////////////////////////////////////&#xA;    //Motor Pin definition&#xA;    //Left Motor&#xA;    #define USE_USBCOM&#xA;    #define INA_1 7&#xA;    #define INB_1 12    &#xA;      //PWM 1 pin &#xA;    #define PWM_1 5&#xA;&#xA;    //Right Motor&#xA;    #define INA_2 11 &#xA;    #define INB_2 10&#xA;&#xA;    //PWM 2 pin &#xA;    #define PWM_2 6&#xA;    #define RESET_PIN 4&#xA;&#xA;    ///////////////////////////////////////////////////////////////////////////////////////&#xA;    //Motor speed from PC&#xA;    //Motor left and right speed&#xA;    float motor_left_speed = 0;&#xA;    float motor_right_speed = 0;&#xA;    /////////////////////////////////////////////////////////////////&#xA;&#xA;    //Setup serial, motors and Reset functions&#xA;    void setup()&#xA;    {&#xA;&#xA;      //Init Serial port with 115200 baud rate&#xA;      Serial.begin(57600);  &#xA;&#xA;      //Setup Motors&#xA;      SetupMotors();&#xA;       SetupReset();&#xA;      //Set up Messenger &#xA;      Messenger_Handler.attach(OnMssageCompleted);&#xA;       }&#xA; /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////&#xA;    //Setup Motors() function&#xA;&#xA;    void SetupMotors()&#xA;    {&#xA;&#xA;     //Left motor&#xA;     pinMode(INA_1,OUTPUT);&#xA;     pinMode(INB_1,OUTPUT); &#xA;&#xA;     //Right Motor&#xA;     pinMode(INA_2,OUTPUT);&#xA;     pinMode(INB_2,OUTPUT);  &#xA;&#xA;    }&#xA;&#xA;    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////&#xA;    //Setup Reset() function&#xA;&#xA;    void SetupReset()&#xA;&#xA;    {&#xA;&#xA;      pinMode(RESET_PIN,OUTPUT);&#xA;&#xA;      ///Conenect RESET Pins to the RESET pin of launchpad,its the 16th PIN&#xA;      digitalWrite(RESET_PIN,HIGH);&#xA;&#xA;&#xA;    }&#xA;    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////&#xA;    //MAIN LOOP&#xA;&#xA;    void loop()&#xA;    {&#xA;&#xA;        //Read from Serial port&#xA;        Read_From_Serial();&#xA;&#xA;&#xA;        //Update motor values with corresponding speed and send speed values through serial port&#xA;        Update_Motors();&#xA;&#xA;    delay(1000);&#xA;      }&#xA; ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////&#xA;    //Read from Serial Function&#xA;&#xA;    void Read_From_Serial()&#xA;&#xA;    {&#xA;       while(Serial.available() &amp;gt; 0)&#xA;        {&#xA;&#xA;           int data = Serial.read();&#xA;           Messenger_Handler.process(data);&#xA;&#xA;        } &#xA;&#xA;    }&#xA;   ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////&#xA;    //OnMssg Complete function definition&#xA;&#xA;    void OnMssageCompleted()&#xA;    {&#xA;&#xA;      char reset[] = &quot;r&quot;;&#xA;      char set_speed[] = &quot;s&quot;;&#xA;&#xA;      if(Messenger_Handler.checkString(reset))&#xA;      {&#xA;&#xA;&#xA;         Reset();&#xA;&#xA;      }&#xA;      if(Messenger_Handler.checkString(set_speed))&#xA;      {&#xA;&#xA;         //This will set the speed&#xA;         Set_Speed();&#xA;         return; &#xA;&#xA;&#xA;      }&#xA;    }&#xA;   //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////&#xA;    //Set speed&#xA;    void Set_Speed()&#xA;    {&#xA;&#xA;      motor_left_speed = Messenger_Handler.readLong();&#xA;      motor_right_speed = Messenger_Handler.readLong();&#xA;&#xA;&#xA;    }&#xA;    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////&#xA;    //Reset function&#xA;    void Reset()&#xA;    {&#xA;&#xA;      delay(1000);&#xA;      digitalWrite(RESET_PIN,LOW);&#xA;&#xA;    }&#xA;   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////&#xA;    //Will update both motors&#xA;    void Update_Motors()&#xA;    {&#xA;&#xA;      moveRightMotor(motor_right_speed);&#xA;      moveLeftMotor(motor_left_speed);&#xA;&#xA;     }&#xA;&#xA;///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////&#xA;&#xA;    //Motor running function&#xA;&#xA;&#xA;    void moveRightMotor(float rightServoValue)&#xA;    {&#xA;      if (rightServoValue&amp;gt;0)&#xA;      {&#xA;&#xA;     digitalWrite(INA_1,HIGH);&#xA;     digitalWrite(INB_1,LOW);&#xA;     analogWrite(PWM_1,rightServoValue);&#xA;&#xA;      }&#xA;      else if(rightServoValue&amp;lt;0)&#xA;      {&#xA;     digitalWrite(INA_1,LOW);&#xA;     digitalWrite(INB_1,HIGH);&#xA;     analogWrite(PWM_1,abs(rightServoValue));&#xA;&#xA;      }&#xA;&#xA;      else if(rightServoValue == 0)&#xA;      {&#xA;     digitalWrite(INA_1,HIGH);&#xA;     digitalWrite(INB_1,HIGH);&#xA;&#xA;&#xA;      }&#xA;    }&#xA;   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////&#xA;    void moveLeftMotor(float leftServoValue)&#xA;    {&#xA;     if (leftServoValue &amp;gt; 0)&#xA;      {&#xA;    digitalWrite(INA_2,LOW);&#xA;    digitalWrite(INB_2,HIGH);&#xA;    analogWrite(PWM_2,leftServoValue);&#xA;      }&#xA;      else if(leftServoValue &amp;lt; 0)&#xA;      {&#xA;     digitalWrite(INA_2,HIGH);&#xA;     digitalWrite(INB_2,LOW);&#xA;     analogWrite(PWM_2,abs(leftServoValue));&#xA;&#xA;      }&#xA;      else if(leftServoValue == 0)&#xA;      {&#xA;&#xA;       digitalWrite(INA_2,HIGH);&#xA;       digitalWrite(INB_2,HIGH);&#xA;&#xA;       }  &#xA;&#xA;    }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;when i load the code to arduino and start rosserial node using command &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;rosrun rosserial_python serial_node.py /dev/ttyACM0&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;ROS throws below error&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;[ERROR] [WallTime: 1475949610.718804] Unable to sync with device;&#xA;  possible link problem or link software version mismatch such as hydro&#xA;  rosserial_python with groovy Arduino&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I have tried changing the baud rate and fixing it similar in ROS and arduino but nothing helped&lt;/p&gt;&#xA;" OwnerUserId="9856" LastActivityDate="2016-11-25T20:51:46.303" Title="Error while running rosserial node in ROS" Tags="&lt;mobile-robot&gt;&lt;arduino&gt;&lt;ros&gt;&lt;first-robotics&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10801" PostTypeId="1" CreationDate="2016-10-08T19:34:43.300" Score="1" ViewCount="84" Body="&lt;p&gt;I'm making my own quad controller from scratch. I have fixed one axis on a &quot;pendulum&quot; so that only one axis can move freely ( + mode).&#xA;Let's say that I have 0 throttle. As you know PID output is added or taken away from throttle value on each motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My values of PID output are one instance let's say 5. (Quadcopter is laying at 5 degrees angle). Even in that case, one motor will spin at 5 speed, while other will be at -5 (won't move). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm asking beacuse when I add throttle to my quad and if I angle it at 10 degrees, it bounces on the other side and then again back, untill I add at least half throttle, which is kida agressive and I can't imagine this scenario with 4 motors.&#xA;So is there any way I can compensate this values?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks for the help! &lt;/p&gt;&#xA;" OwnerUserId="14951" LastActivityDate="2016-10-08T19:34:43.300" Title="Quadcopter takeoff when low throttle /w PID" Tags="&lt;quadcopter&gt;&lt;pid&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10803" PostTypeId="1" AcceptedAnswerId="10806" CreationDate="2016-10-09T01:58:13.720" Score="2" ViewCount="847" Body="&lt;p&gt;Take a look at &lt;a href=&quot;https://www.youtube.com/watch?v=69RtLBImXiU&quot; rel=&quot;nofollow&quot;&gt;this monster lifting a car&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I don't think one can get that power by plugging into a wall outlet. So how are these huge robots (their servos) powered? Gasoline? How is power stored, if it needs to be? &lt;/p&gt;&#xA;" OwnerUserId="6858" LastEditorUserId="10596" LastEditDate="2016-10-09T17:04:28.163" LastActivityDate="2016-10-17T10:04:11.903" Title="How are huge industrial robots powered?" Tags="&lt;power&gt;&lt;industrial-robot&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10804" PostTypeId="2" ParentId="10796" CreationDate="2016-10-09T02:18:21.360" Score="4" Body="&lt;p&gt;If you are able to sense obstacles with a sensor pattern that is circular (eg laser scanner, contact sensors on a circular body, etc), and you can rotate the robot pose without translation, then you can satisfy the assumptions of the Bug algorithm. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you use a point model for your robot in the map, then you grow the obstacles by the radius of your robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your sensors are not circular, then you will need to create an algorithm for local movement that moves the sensors in a manner that will detect the obstacles without putting the robot in a trapped position. This will probably prevent your robot sensing narrow but valid paths through the obstacles. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: You have a circular sensor. If you have differential drive, then you can pick the smallest sensor radius that your robot fits inside and use that. If you have ackerman steering then there is a radius within which you can rotate in place with forward-backward motions. You can use that radius.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All of this is focused on the Bug algorithm. You should use a different, or layered algorithm if you cannot meet the basic assumptions of the bug algorithm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, you can sense the contents of the gap between consecutive points of set $D$ by rotating the robot.&lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="184" LastEditDate="2016-10-10T10:14:03.393" LastActivityDate="2016-10-10T10:14:03.393" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10805" PostTypeId="1" CreationDate="2016-10-09T02:49:02.750" Score="2" ViewCount="1223" Body="&lt;p&gt;I'm on a Linux chromebook, and am using a Vex robot, and am wondering if there is an online IDE for RobotC that will run my computer?&lt;/p&gt;&#xA;" OwnerUserId="14955" LastEditorUserId="7066" LastEditDate="2017-03-09T16:23:35.410" LastActivityDate="2017-10-05T19:17:23.983" Title="Is there an online RobotC IDE?" Tags="&lt;robotc&gt;&lt;vex&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10806" PostTypeId="2" ParentId="10803" CreationDate="2016-10-09T10:32:31.317" Score="4" Body="&lt;p&gt;Industrial Robots with having as aim manipulation of large objects are powered electrically in almost all cases (30-40 years ago there have been popular hydraulic variants).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Industrial robots are powered by industrial 400V 3 phase current, so in a sense, they are plugged in a wall outlet, but but a household wall outlet but an industrial one, like &lt;a href=&quot;http://www.industrialextensionleads.co.uk/ekmps/shops/bazzer1/resources/Design/400-44-4p-plug-dimensions-a.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gouaf.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gouaf.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A typical household single-phase outlet in Europe can supply a 16 Ampere current at 230 Volts, that is about 3.68 kVA. As a comparison, high payload Fanuc Robot (similar to the one in the question), the M-900iA, equipped with an R-30iB controller requires an industrial 3 phase outlet which can supply 18kVA. Documentation &lt;a href=&quot;https://www.google.de/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;cad=rja&amp;amp;uact=8&amp;amp;ved=0ahUKEwi50dePzs3PAhWLuhQKHcSGBRMQFggeMAA&amp;amp;url=http%3A%2F%2Fwww.setup.com.br%2Fdownload%2Findex.php%3Fpath%3DFanuc%252F%26download%3DR30iB%2520Installation%2520Information%2520.pdf&amp;amp;usg=AFQjCNGamqpjeZZMs0oQ8RXfr34FZIgPvw&amp;amp;sig2=WODru7wBBHcjeyq9JcbVCA&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. This translates to a current consumption of 25.981 Amperes at 400V supply voltage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note1: Most industrial robot have a spring system to easier cope with high payloads by balancing the load of axis 2. &lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2016-10-17T10:04:11.903" LastActivityDate="2016-10-17T10:04:11.903" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="10808" PostTypeId="1" CreationDate="2016-10-10T00:13:52.860" Score="4" ViewCount="638" Body="&lt;p&gt;There are a number of similar questions such as &lt;a href=&quot;https://robotics.stackexchange.com/questions/6880/monocular-vs-stereo-computer-vision-robustness-for-object-detection&quot;&gt;Monocular vs. stereo computer vision robustness for object detection&lt;/a&gt;, but none that address my question specifically.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My weekend project is to build a little robot that can detect and track players and shots made in a basketball game.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Detection and tracking need not be real-time (though it would be ideal).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The goal is to understand if a stereo camera would help improve speed and accuracy of tracking players and shots made, or if a solo camera is sufficient.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would the depth information of a stereo camera simplify the task? Or would a solo camera, because of assumptions you can make about the basketball scene, be equally as accurate (and therefore preferable since less hardware is required)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assume the camera must track activity at both baskets, and is 100 feet from the furthest basket (i.e., at the other end of the court).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Specific Questions:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Could a stereo system let you more quickly detect human bodies and basketballs (i.e., spheres with ~9&quot; diameter) because you could detect volumetric shapes whereas you can't with one camera?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Could shot detection be more accurate and faster because you can measure depth of the ball (i.e., only trigger analysis when ball is around same depth as hoop)?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Would hoop detection be easier because of depth information?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Obviously, stereo cameras require higher computational load at a nominal level, but could algorithm simplifications (e.g., ignore non-spheres for ball detection) allowed by depth information actually reduce overall computational load?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Argument for solo camera: since the robot only operates against basketball scenes, you can make assumptions like there will be at least one 10-foot basketball hoop. Since you know the height of the hoop, would that allow you to perform depth measurements as if you had a stereo camera? &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The paper &lt;a href=&quot;http://www.ai.sri.com/~beymer/vsam/iccv99.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;Real-Time Tracking of Multiple People Using Continuous Detection&quot; by David Beymer and Kurt Konolige&lt;/a&gt; suggests a stereo camera would offer advantages over a solo camera, confirming some of the hypotheses here, but the paper is also very old (1999). Is player &amp;amp; shot tracking better with a stereo camera, or are solo cameras equally as effective?&lt;/p&gt;&#xA;" OwnerUserId="14959" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2017-04-09T10:51:30.450" Title="Stereo camera vs. one camera for player detection &amp; ball tracking in basketball scenes?" Tags="&lt;computer-vision&gt;&lt;cameras&gt;&lt;stereo-vision&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10810" PostTypeId="1" CreationDate="2016-10-10T14:12:07.700" Score="1" ViewCount="36" Body="&lt;p&gt;For some experiments, I need to have source code of a robocup 2d simulation team. Where can I find that? Is there any online test bed for this league for testing algorithms?&lt;/p&gt;&#xA;" OwnerUserId="13540" LastActivityDate="2016-10-10T14:12:07.700" Title="On robocup 2d simulation league" Tags="&lt;simulation&gt;&lt;soccer&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10811" PostTypeId="1" CreationDate="2016-10-11T01:45:06.870" Score="2" ViewCount="175" Body="&lt;p&gt;I am working on a robotics project for fun and can't really wrap my head around a solution to my perception problem. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Setup:&lt;/strong&gt;&#xA;My robot will have a stereo vision setup and will have to detect certain objects and align itself to those objects in a certain pose.  The robot will know what the width and height of those objects are.  The robot will be using a tx1 for computation, so implementation needs to be pretty fast.  Also, the environment's lightning will change a lot so using color for detection isn't a great option. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;My plan:&lt;/strong&gt; To use convolutional neural networks to detect those objects of interest.  I have been able to program a network to detect those objects in 2D however, I am stuck on how to detect the pose of the objects in 3D.  My idea has been to detect the object with the neural network and once I have that region of interest, get the point cloud.  Then fit a 3D model using ICP.  Once the 3D model is fit I can get the pose of the object. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have also seen people using 3D correspondence grouping for this but would that work on a non dense point cloud that stereo vision generates?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am pretty novice in this area and would love to get advice on from some more advanced robotics practitioners.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks for you time!&lt;/p&gt;&#xA;" OwnerUserId="14971" LastActivityDate="2018-04-05T16:04:51.343" Title="Object Detection and Pose Estimaion" Tags="&lt;mobile-robot&gt;&lt;computer-vision&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="10815" PostTypeId="1" CreationDate="2016-10-11T19:47:16.783" Score="0" ViewCount="1702" Body="&lt;p&gt;I want to make a robot arm with a gripper that can go to any x y z coordinates near it. the robot itself will be simple just servo motors and Arduino but I don't know how to make reach the desired coordinates, any ideas?&lt;/p&gt;&#xA;" OwnerUserId="10601" LastActivityDate="2016-10-12T19:57:14.800" Title="how to manipulate arm robot?" Tags="&lt;arduino&gt;&lt;robotic-arm&gt;&lt;servomotor&gt;&lt;manipulator&gt;" AnswerCount="3" CommentCount="3" ClosedDate="2016-10-11T21:49:24.243" ContentLicense="CC BY-SA 3.0" />
  <row Id="10816" PostTypeId="2" ParentId="10815" CreationDate="2016-10-11T20:06:44.463" Score="0" Body="&lt;p&gt;What you need is a set of equations that gives you the joint parameters of your robot as a function of the desired end-effector position. For this, you need to compute the &lt;a href=&quot;https://en.wikipedia.org/wiki/Inverse_kinematics&quot; rel=&quot;nofollow&quot;&gt;inverse kinematics&lt;/a&gt; of your robot. Depending on how complex your robotic arm is, deriving those equations might be tricky and multiple solutions (or poses) can be possible. &lt;a href=&quot;http://correll.cs.colorado.edu/?p=1958&quot; rel=&quot;nofollow&quot;&gt;This page&lt;/a&gt; explains how to use the inverse Jacobian Matrix method to derive the inverse kinematics.&lt;/p&gt;&#xA;" OwnerDisplayName="user12985" LastActivityDate="2016-10-11T20:06:44.463" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10817" PostTypeId="2" ParentId="10815" CreationDate="2016-10-11T20:51:06.117" Score="1" Body="&lt;p&gt;There are multiple way to do so. It depends on how much effort you want to put in.&#xA;In any case, you'll have to do some math and define your frames.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Solution 1&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;As @lucab said you can calculate those set of equations.&lt;br&gt;&#xA;Then compute the inverse kinematics .&lt;br&gt;&#xA;This will let you find the set of angles your joints need to have in order for the end of your arm to reach the desired position.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Solution 2&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Another popular approach with robotic arms is to use the &lt;strong&gt;Denavit-Hartenberg&lt;/strong&gt; convention. This convention allows you to define your arm joints with another set of parameters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then you can use these parameters to build your arm model thanks to &lt;a href=&quot;http://petercorke.com/Robotics_Toolbox.html&quot; rel=&quot;nofollow&quot;&gt;Peter Corke Toolbox&lt;/a&gt;. This toolbox allows you to do:&lt;br&gt;&#xA;- forward kinematics: which mean you it will calculate for you the position of the end of the arm for a desired set of angles&lt;br&gt;&#xA;- inverse kinematics: calculate the set of angles needed to get to a position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you need more details, feel free to ask.&lt;/p&gt;&#xA;" OwnerUserId="11462" LastActivityDate="2016-10-11T20:51:06.117" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="10818" PostTypeId="2" ParentId="10815" CreationDate="2016-10-11T21:35:59.530" Score="1" Body="&lt;p&gt;Determining your x, y, and z depends greatly on how many Degrees of Freedom (DoF) the robotic arm has (which in most cases is just the amount of joints or servos there are not counting the end effector)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may want to dive into the world of forward and inverse kinematics. In a nutshell:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Forward_kinematics&quot; rel=&quot;nofollow&quot;&gt;forward kinematics&lt;/a&gt; is generally used when you have your joint angles and want to find your x, y, and z. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Inverse_kinematics&quot; rel=&quot;nofollow&quot;&gt;Inverse kinematics&lt;/a&gt; is used when you know what your x, y, and z is but you want to find your joint angles. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Forward kinematic equations are almost always easier to solve for than inverse kinematic equations since they usually guarantee closed form solutions whereas inverse kinematics makes no such guarantee.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The more accurate your sensors are in measuring angular displacement, the more accurate your end effector will be to the x, y, and z you choose. The process will be something like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Select position (x, y, z) --&gt; plug position into inv kin equ to get thetas --&gt; command motors to thetas&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although it may seem like you have no interest in forward kinematics, its actually very helpful in solving the inverse kinematic equations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Start with forward kinematics, obtain what your x, y, and z equations are as a function of generic thetas (x(θ1, θ2, θ3, ...), y(θ1, θ2, θ3, ...), z(θ1, θ2, θ3, ...)), and perform inverse kinematics by turning the x, y, and z equations, which are functions of thetas, to theta equations as a function of generic x, y, and z (θ1(x, y, z), θ2(x, y, z), θ3(x, y, z), ...).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where your thetas are your joint angles with respect to your previous link axis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If still having issues understanding forward or inverse kinematics after researching (many textbooks seem to make it more complicated than it actually is), let me know and I can derive a couple examples.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to do forward kinematics, it helps to know transformation matrices. Here is a &lt;a href=&quot;https://youtu.be/L8xKOUuq6uc?list=PLJtm2YNbaY488rw9fBr5AahCNGh5eU63-&quot; rel=&quot;nofollow&quot;&gt;video&lt;/a&gt; I put together awhile ago. Not the best video, but I plan on redoing them and making a series about this type of stuff when I get the free time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you understand transformation matrices, its a matter of giving your robot several coordinate systems in unique places. Could be at each joint, or could be using the &lt;a href=&quot;https://www.youtube.com/watch?v=10mUtjfGmzw&quot; rel=&quot;nofollow&quot;&gt;denavit-hartenberg (DH)&lt;/a&gt; technique to reduce the amount of parameters needed to describe the relation between coordinate systems to 4 parameters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After the coordinate systems are in place, you'll need to multiply various rotation and translation operators with one another to get from a base coordinate system to your end effector coordinate system. Or in other words, you need to find the combination of rotations and translations to get your base coordinate system overlaid on top of your end effector coordinate system. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once the combination of Rots and Trans operators are found, multiply them all together to get your transformation matrix of your end effector with respect to your base. It'll be a 4x4 matrix; just pick off the 3x1 vector in the top right and you'll have your x, y, and z equations that will tell you your end effector position given your thetas. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now the difficult part:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You want to derive what your thetas should be to get to a position of your choosing, not the other way around. So use those 3 equations you picked off of the transformation matrix to to help you solve for thetas given an x, y, and z. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately determining the thetas from these equations can be somewhat tricky, and sometimes, depending on how crazy your robot configuration is, there is no solvable answer using this approach. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have a three or four DoF robot (not including the end effector), and not doing anything too crazy, you should be able to solve for it using some high level algebra. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to help you further with the inverse kinematics, you will either need to provide the forward kinematic equations, or show what configuration you plan on having the servos in; but hopefully this was enough to push you in the right direction.&lt;/p&gt;&#xA;" OwnerUserId="14923" LastEditorUserId="14923" LastEditDate="2016-10-12T19:57:14.800" LastActivityDate="2016-10-12T19:57:14.800" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="10820" PostTypeId="1" AcceptedAnswerId="10825" CreationDate="2016-10-12T07:28:49.480" Score="1" ViewCount="766" Body="&lt;p&gt;I'm trying to control system that has 3 poles (2 in the right half plane)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I sketched root-locus but the two positive poles are going right and never be in the left half plane at any value of k&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The state space of system is following&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;A =&#xA;0   1   0&#xA;-3.20205979037663e-08   0   -31.1556786564355&#xA;83333.3331597258    0   -173598.323255178&#xA;&#xA;B = &#xA;0&#xA;-3.11556786564355e-08&#xA;83333.3331597350&#xA;&#xA;C = &#xA;-0.999999999999890  0   0&#xA;&#xA;D = &#xA;0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;How can I control system like this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: I'm using matlab&lt;/p&gt;&#xA;" OwnerUserId="14985" LastEditorUserId="14985" LastEditDate="2016-10-12T11:11:32.450" LastActivityDate="2016-10-12T18:14:59.607" Title="How to move root locus to the left?" Tags="&lt;control&gt;&lt;matlab&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10821" PostTypeId="2" ParentId="10820" CreationDate="2016-10-12T11:44:59.280" Score="1" Body="&lt;p&gt;You want to study &quot;state space pole placement design.&quot;  It is a very powerful technique.   In Matlab the steps are for you to create a vector of poles that you want the system to have, and then use the &lt;em&gt;place&lt;/em&gt; function.   Matlab's help for this command is nicely specific.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2016-10-12T11:44:59.280" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="10822" PostTypeId="1" CreationDate="2016-10-12T12:47:43.543" Score="4" ViewCount="235" Body="&lt;p&gt;I'm currently working on an autonomous underwater cleaning robot and would like your input on some navigation algorithms&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Problem:&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Wash the inside of big, open and filled tank, e.g. water storage tank (Figure 1), with an autonomous robot. The inside of the tank is divided in sections, such that the robot has a limited washing area. The washing are can be square, rectangular, parallelogram or other shapes. The inside of the tank may have unknown obstacles, e.g. inlets and outlets.&#xA;Since the robot will function under water, there are a few limitations when it comes to sensors.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Available sensors:&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Wheel encoders&lt;/li&gt;&#xA;&lt;li&gt;Distance measurements, e.g. ultrasonic, sonar, for obstacle avoidance&lt;/li&gt;&#xA;&lt;li&gt;Boundary detection&lt;/li&gt;&#xA;&lt;li&gt;Bumper with mechanical switch for collisions&lt;/li&gt;&#xA;&lt;li&gt;Pressure sensor&lt;/li&gt;&#xA;&lt;li&gt;Camera. Not necessary clean water so low visibility is an issue, i.e. difficult/impossible with visual odometry&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h3&gt;Non-available sensors:&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;INS&lt;/li&gt;&#xA;&lt;li&gt;GPS&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h3&gt;Current solutions:&lt;/h3&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Random walk within boundaries (Figure 2). Either driving in straight lines (Figure 2), spirals (Figure 7) or a combination of lines and spirals (Figure 6)&lt;/li&gt;&#xA;&lt;li&gt;Parallel swaths with 30% overlap (Figure 3). Requires cm precision on position estimate to guarantee coverage. Figure 4 shows an identical simulation but with one wheel radius 0.5mm larger than the other. This shows that it is not sufficient to only rely on wheel encoders for positioning as it will drift. With perfect positioning the parallel swath algorithm is 2x more efficient than random walk&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;One possibility is to add an acoustic navigation system, but it would be too expensive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This problem is similar to the lawn mower and vacuuming robots. However, it seems like most of the products use random walk or a similar approach. Does anyone know a more efficient algorithm to cover the area based on the information provided?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For all the simulations, the red line represents the robot’s movement and the black is washed area. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking at other similar questions I couldn't find the answers I've been looking for:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/7564/how-to-localise-a-underwater-robot&quot;&gt;How to localise a underwater robot?&lt;/a&gt;  &lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/8186/robot-wire-follower-how-to-position-on-wire/8193#8193&quot;&gt;Robot wire follower + how to position on wire&lt;/a&gt;  &lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/1349/working-of-autonomous-lawn-moweralm-in-an-unbounded-area-without-a-perimeter-w/1384#1384&quot;&gt;Working of Autonomous Lawn mower(ALM) in an unbounded area without a perimeter wire&lt;/a&gt;  &lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/628/what-algorithm-should-i-implement-to-program-a-room-cleaning-robot/630#630&quot;&gt;What algorithm should I implement to program a room cleaning robot?&lt;/a&gt;  &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h3&gt;Figure numbering:&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;1 2&lt;br&gt;&#xA;3 4&lt;br&gt;&#xA;5 6&lt;br&gt;&#xA;7&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/3ryY9.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3ryY9.jpg&quot; alt=&quot;Figures 1-7&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;References:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://estudogeral.sib.uc.pt/bitstream/10316/27429/1/OmniClimbers.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;OmniClimbers: Omni-directional magnetic wheeled climbing robots&#xA;for inspection of ferromagnetic structures&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="14988" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2016-10-13T09:11:21.027" Title="Area coverage of autonomous underwater robot" Tags="&lt;mobile-robot&gt;&lt;algorithm&gt;&lt;underwater&gt;&lt;coverage&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="10823" PostTypeId="2" ParentId="10822" CreationDate="2016-10-12T15:10:46.090" Score="1" Body="&lt;p&gt;If you can't localize, you can't do anything that requires localizing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you can't use wheel encoders accurately enough to do a rectangular fill (parallel lines) then, by the same reasoning, you can't use them to do any other shaped fill pattern either (concentric circles, spirals, etc.).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I only see one real solution here (that's not random walk), but its success depends on the physical construction of your vehicle and the sensors you're using. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Use the pressure sensor to indicate depth, then build a PID controller around the pressure sensor to steer the vehicle. Your x/y coordinates of the &quot;rectangular&quot; path you're trying to traverse aren't actually x/y coordinates. You're in a cylinder; they're cylindrical coordinates. Really you have h/$\theta$ coordinates. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You're still left with the problem that you can't localize, so you have no absolute $\theta$ coordinate, so you'll never be able to guarantee any coverage in a particular $\theta$ range. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I would suggest you consider instead of rectangular regions, if you're attempting to make a &quot;cleaning crew&quot; that will work cooperatively to clean the whole structure, is to use cylindrical regions. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, let's say you have four robots. You could have each robot clean the entire height (0 to h) and a quarter of the circumference (0 to $\pi$/2, etc.). But you &lt;em&gt;can't&lt;/em&gt; do this, because there are (presumably) no features by which you could localize in the tank. Every $d\theta$ looks like every other $d\theta$, so you can't assign &lt;em&gt;any&lt;/em&gt; robot a particular range in the $\theta$ dimension.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I'm suggesting you do instead is to have each robot clean the entire &lt;em&gt;circumference&lt;/em&gt; (0 to 2$\pi$), then segment by &lt;em&gt;height&lt;/em&gt;. Each robot has a pressure sensor and &lt;em&gt;can&lt;/em&gt; tell that they are in their correct height band. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now all you need to do is know that your wheel encoders are accurate &lt;em&gt;enough&lt;/em&gt; to detect that you've traversed the circumference plus some overlap tolerance. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This solution requires your ability to resolve your depth accurately. How accurate? I would say you should be at least half the width of the cleaning instrument. If your brush is a foot wide, then you should be able to determine depth accurate to +/- 6 inches. This ensures you're still cleaning in the desired band if you go off-target. This is the &lt;em&gt;minimum&lt;/em&gt; resolution; ideally you'll get something much better. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'll probably want to overlap by (brushWidth - depthAccuracy) to ensure complete coverage where you went off-track during a normal sweep. So, again, if your band is (brushWidth = 1 foot), and you go off-track by -0.5 feet, then the upper +0.5 foot of the band was not cleaned in that segment. Therefore you'd want to overlap (1 foot - 0.5 foot) = 0.5 feet to ensure the whole band was cleaned. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, your algorithm flow would look something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;desiredHeight = 0;&#xA;finishHeight = h/4;&#xA;&#xA;brushWidth = 1; % Foot&#xA;depthAccuracy = 0.5 % Feet&#xA;&#xA;speed = 1; % Percent&#xA;circumferenceOverlap = 1.1;&#xA;&#xA;while (desiredHeight &amp;lt;= finishHeight)&#xA;    while (deadReckoning &amp;lt; circumference*circumferenceOverlap)&#xA;        actualHeight = PressureSensor();&#xA;        steerDifferential = PID(desiredHeight-actualHeight);&#xA;        LeftWheel.Speed(speed - steerDifferential);&#xA;        RightWheel.Speed(speed + steerDifferential);&#xA;        deadReckoning = deadReckoning + (LeftWheel.Distance() + RightWheel.Distance())/2;&#xA;    end&#xA;    deadReckoning = 0;&#xA;    desiredHeight = desiredHeight + brushWidth - depthAccuracy;&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So, briefly again, just keep a running count of how far you've traveled with the wheel encoders. Once you've gone a full circumference plus some tolerance, then increment the height and clean another circumference. This solution leverages the fact that the tank is a cylinder, and that (start = end) on the $\theta$ dimension. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, if there are sparse obstacles that maybe you couldn't use to localize everywhere (couldn't see for example), you can setup an avoidance subroutine to go around it. But this should clean the entire tank efficiently. You'll want to tune the PID controller to keep the vehicle on track, but that performance will again be determined by the resolution on the depth sensor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A word of caution: the pressure sensor corresponds to a &lt;strong&gt;depth&lt;/strong&gt;, as in below the &lt;em&gt;water line&lt;/em&gt;, not a &lt;strong&gt;height&lt;/strong&gt;. You should be able to detect the surface of the water by an ultrasound reflection at the air/water interface, and likewise should be able to detect the bottom of the tank by the reflection at the water/tank interface. You should take this into account if you're planning on cleaning the &lt;em&gt;entire&lt;/em&gt; tank and not just the &lt;em&gt;submerged&lt;/em&gt; portion of the tank. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, any flow in the tank will affect pressure readings, which will cause false depth measurements.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-10-12T15:10:46.090" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="10824" PostTypeId="1" CreationDate="2016-10-12T15:36:59.943" Score="0" ViewCount="66" Body="&lt;p&gt;Let’s assume at time t a moving robot (e.g. PIONEER 3-DX) changes it’s steering angle by $25^{\circ}$. Obviously, in order to maintain stability and avoid overturning,  the robot must reduce its velocity between the time interval $t$ and $t+1$. But the question is by how much?&lt;/p&gt;&#xA;" OwnerUserId="14943" LastActivityDate="2016-10-12T19:02:50.373" Title="Is there any robot stability control equation that describes the relation between velocity of the robot and its orientation?" Tags="&lt;mobile-robot&gt;&lt;wheeled-robot&gt;&lt;kinematics&gt;&lt;industrial-robot&gt;&lt;robotc&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10825" PostTypeId="2" ParentId="10820" CreationDate="2016-10-12T16:04:40.193" Score="3" Body="&lt;p&gt;Brief process for pole placement in Matlab:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Check that the system is actually controllable. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;nStates = size(A,1);&#xA;R = zeros(nStates,0);&#xA;for n = 1:nStates&#xA;    R(:,n) = (A^(n-1))*B;&#xA;end&#xA;if rank(R) == nStates&#xA;    disp('Controllable');&#xA;else&#xA;    disp('Not controllable');&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;Find the open-loop poles. Get their natural frequencies. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;olPoles = eig(A);&#xA;wns = sqrt(sum(abs(olPoles).^2,2));&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In your case, the first pole is huge and negative, the other two are purely imaginary. I'm assuming you want to get rid of this oscillation and keep everything else the same. In any event, whatever you choose:&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;3&quot;&gt;&#xA;&lt;li&gt;&lt;p&gt;Pick new poles. There's a lot of guidance available online about how to pick &quot;good&quot; poles, so I'm not going to go into any detail here. Like I said, at least to start with, I'd just change (create) damping on the two undamped poles and iterate from there. Whatever you choose, get your closed loop poles by doing the following for each pole:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;clPole = - (dampingRatio*wn) +/- 1i*wn*sqrt(1-dampingRatio);&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Do this for each pole. If you don't want to change a particular pole, then just set &lt;code&gt;clPole(n) = olPole(n);&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;4&quot;&gt;&#xA;&lt;li&gt;Setup the equations to be solved to insert your new poles. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;syms P1 P2 P3;&#xA;syms s;&#xA;syms g1 g2 g3;&#xA;&#xA;G = [g1 g2 g3];&#xA;desiredPoleEquation = (s-P1)*(s-P2)*(s-P3);&#xA;currentPoleEquation = det([s*eye(nStates) - (A - B*G)]);&#xA;&#xA;[desiredCoeffs,desiredSValues] = coeffs(expand(desiredPoleEquation),s);&#xA;[currentCoeffs,currentSValues] = coeffs(expand(currentPoleEquation),s);&#xA;&#xA;equationSetup = sym(zeros(nStates+1,2));&#xA;controllerGainEquations = sym(zeros(nStates+1,1));&#xA;for i = 0:nStates&#xA;    desiredIndex = find(desiredSValues == s^i);&#xA;    if ~isempty(desiredIndex)&#xA;        equationSetup(i+1,1) = desiredCoeffs(desiredIndex);&#xA;    else&#xA;        equationSetup(i+1,1) = 0;&#xA;    end&#xA;    currentIndex = find(currentSValues == s^i);&#xA;    if ~isempty(currentIndex)&#xA;        equationSetup(i+1,2) = currentCoeffs(currentIndex);&#xA;    else&#xA;        equationSetup(i+1,2) = 0;&#xA;    end&#xA;    controllerGainEquations(i+1) = equationSetup(i+1,1) == equationSetup(i+1,2);&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The end of the block of code above is &lt;code&gt;controllerGainEquations&lt;/code&gt;, which has a function of &lt;code&gt;P1,P2,...,PN&lt;/code&gt; on the left and &lt;code&gt;g1,g2,...,gN&lt;/code&gt; on the right. &lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;5&quot;&gt;&#xA;&lt;li&gt;Solve the equation &lt;code&gt;controllerGainEquations&lt;/code&gt; for &lt;code&gt;[g1,g2,...,gN]&lt;/code&gt;. The result here will be gains as a function of poles &lt;code&gt;P1,P2,...,PN&lt;/code&gt;. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;controllerGains = sym(zeros(nStates,1));&#xA;controllerGainsStruct = solve(controllerGainEquations,[g1,g2,g3]);&#xA;controllerGains(1) = controllerGainsStruct.g1;&#xA;controllerGains(2) = controllerGainsStruct.g2;&#xA;controllerGains(3) = controllerGainsStruct.g3;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;ol start=&quot;6&quot;&gt;&#xA;&lt;li&gt;Almost done - now plug in the values you picked for the poles. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;controllerSolvedGains = controllerGains;&#xA;controllerSolvedGains = subs(controllerSolvedGains,P1,clPoles(1));&#xA;controllerSolvedGains = subs(controllerSolvedGains,P2,clPoles(2));&#xA;controllerSolvedGains = subs(controllerSolvedGains,P3,clPoles(3));&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;ol start=&quot;7&quot;&gt;&#xA;&lt;li&gt;Use the gains correctly. Your control signal is now $u = -G*x$, where $x$ is the vector of states. It is not whatever you originally had. You don't add anything to it. It's not anything other than $u = -G*x$. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Finally, a couple notes on the method I've given:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;I wrote this myself because this method will solve for gains with a &lt;em&gt;symbolic&lt;/em&gt; state matrix. Pole placement is a method for linear, time-invariant (LTI) systems, so in theory you shouldn't be using a symbolic state matrix, but it's handy for scenarios where you have configurable/variable parameters and want one calculation for gains.&lt;/li&gt;&#xA;&lt;li&gt;The gains calculated this way aren't necessarily &quot;robust&quot;. Matlab's &lt;code&gt;place()&lt;/code&gt; command is supposed to create &quot;better&quot; gains. &lt;/li&gt;&#xA;&lt;li&gt;Protip - if you're getting huge number fractions as a result, it's because &lt;code&gt;controllerSolvedGains&lt;/code&gt; is still a symbolic. Use &lt;code&gt;double(controllerSolvedGains)&lt;/code&gt; to get a succinct number to use. &lt;/li&gt;&#xA;&lt;li&gt;Finally, this just works to drive the states to zero. If you want to do reference tracking, you should look into integral control, which requires adding a state (integral error) to the system $A$ matrix. That's beyond the scope of what I wrote here. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;h2&gt;:EDIT:&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Every step I wrote is the long way to do it. If you have a non-symbolic state matrix and you have the Control System toolbox, then you can do each step as follows:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Check that the system is actually controllable. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;nStates = size(A,1);&#xA;olSys = ss(A,B,C,D);&#xA;R = ctrb(olSys);&#xA;if rank(R) == nStates&#xA;    disp('Controllable');&#xA;else&#xA;    disp('Not controllable');&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;&lt;p&gt;Find the open-loop poles. Get their natural frequencies. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;[wns, dampingRatios, olPoles] = damp(olSys);&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Pick new poles. You have to do this on your own.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;4 to 6.  Setup, solve, and substitute the closed loop poles to find the gains. All of this is done in one command:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;`G = place(A,B,clPoles);`&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;ol start=&quot;7&quot;&gt;&#xA;&lt;li&gt;Use the gains correctly. This is still up to you to do.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2016-10-12T18:14:59.607" LastActivityDate="2016-10-12T18:14:59.607" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="10826" PostTypeId="1" AcceptedAnswerId="10831" CreationDate="2016-10-12T18:16:39.003" Score="1" ViewCount="1885" Body="&lt;p&gt;So I was given a course assignment to assign frames and write D-H parameters for this robot &lt;strong&gt;using only 5+1 frames (with Frame $\{5\}$ at $P$ and Frame $\{0\}$ at $O$)&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/q9Frp.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/q9Frp.png&quot; alt=&quot;Original figure&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And I assigned them like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/kaKk4.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kaKk4.png&quot; alt=&quot;My frames&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is:&#xA;&lt;strong&gt;From Frame $\{1\}$ to Frame $\{2\}$, what are joint distances $a$ and $d$?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The best answer I could get was 0. But obviously it should be zero for one axis and $a_1$ for the other. What's wrong?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have read a similar question &lt;a href=&quot;https://robotics.stackexchange.com/questions/4610/forward-kinematics-d-h-parameters-for-perpendicular-joint-axes&quot;&gt;here&lt;/a&gt;. But the answer points me to another method which is impossible for me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit:&#xA;No matter I put $a_1$ in $a$&#xA;$$(\alpha,a,d,\theta)=(-90^\circ,a_1,0,\theta_2-90^\circ)$$&#xA;or in $d$&#xA;$$(\alpha,a,d,\theta)=(-90^\circ,0,a_1,\theta_2-90^\circ)$$&#xA;The joint distance $a_1$ does not appear in $z$.&#xA;What it gave out is&#xA;$$\left( \begin{array}{cccc}&#xA;\sin{\theta_2} &amp;amp; \cos{\theta_2} &amp;amp; 0 &amp;amp; a_1 \\&#xA;0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \\&#xA;\cos{\theta_2} &amp;amp; -\sin{\theta_2} &amp;amp; 0 &amp;amp; 0 \\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1&#xA;\end{array}\right)&#xA;\text{    or    }&#xA;\left( \begin{array}{cccc}&#xA;\sin{\theta_2} &amp;amp; \cos{\theta_2} &amp;amp; 0 &amp;amp; 0 \\&#xA;0 &amp;amp; 0 &amp;amp; 1 &amp;amp; a_1\\&#xA;\cos{\theta_2} &amp;amp; -\sin{\theta_2} &amp;amp; 0 &amp;amp; 0 \\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1&#xA;\end{array}\right)$$&#xA;Obviously, $a_1$ should appear in $Z$-translation instead!&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="14991" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2016-10-13T05:33:11.323" Title="Assigning parameters in perpendicular axes: D-H is a must" Tags="&lt;dh-parameters&gt;&lt;frame&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10827" PostTypeId="1" CreationDate="2016-10-12T18:33:11.380" Score="0" ViewCount="82" Body="&lt;p&gt;I would like to use and test &lt;a href=&quot;https://www.aliexpress.com/item/3-phase-NEMA-52-35N-m-4956ozf-in-Closed-loop-Stepper-servo-motor-driver-kit-JMC/32712846667.html?scm=1007.13339.33317.0&amp;amp;pvid=2578774e-484b-461c-9849-e602e6df8bac&amp;amp;tpp=1&quot; rel=&quot;nofollow&quot;&gt;this type of servo motor&lt;/a&gt;, significantly stronger than the ones I've been using previously.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However the datasheets seem to be limited and I can't exactly tell how to use the driver.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Would it be fair to assume that to use this system, I would get say a 500 W (or higher) power supply and be able to plug into my (North American) wall outlet to use this motor? And if so, would that give me enough power? I believe NA wall outlets give something like 12 A @110 V max, or 1.32 kW. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;How could I tell if this is enough for the above servo, or might I have to upgrade to using an industrial power line? &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;What if I want to power multiple of these motors at the same time? Surely 1 power outlet wouldn't work. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;[semi-related bonus question]  What is the difference between &quot;2 phase&quot;, &quot;3 phase&quot; etc in this stepper/servo motor?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="6858" LastEditorUserId="37" LastEditDate="2018-08-15T15:21:32.803" LastActivityDate="2018-08-15T15:21:32.803" Title="How to power this servomotor?" Tags="&lt;servomotor&gt;&lt;power&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="10828" PostTypeId="2" ParentId="10824" CreationDate="2016-10-12T19:02:50.373" Score="6" Body="&lt;p&gt;That's not obvious. If I'm in a tank, going 0.5 km/h, I don't need to slow down at all. If I'm in a bobsled going 100km/h and the track banks, I don't need to slow down at all. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you steer, you begin to move around a circle with a particular radius of curvature. This means you also begin to experience centrifugal force.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;F_c = mv^2/r&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $F_c$ is the centrifugal force, $m$ is the mass, $v$ is the speed, and $r$ is the radius of curvature.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, you have a force. It acts through the center of mass of the vehicle. If the center of mass is at some height $h$ above the surface, then you get a torque in addition to the force, where:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\tau_c = F_c h&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $\tau_c$ is the torque on the vehicle caused by the centrifugal force and $h$ is the height above the road. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, the centrifugal force is free to increase until one of two things happens:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The centrifugal force exceeds the static force between the tires and the road. Once this happens the tires &quot;break loose&quot; and the vehicle begins to &quot;drift&quot;. &lt;/li&gt;&#xA;&lt;li&gt;The torque exceeds the torque required to rotate the vehicle. Once this happens the vehicle rolls over. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;There was a bunch of news coverage maybe 15 years ago when SUVs were first introduced in the US where the vehicles where rolling over a lot. Their center of mass was too high, meaning that the torque on the vehicle was created much earlier (at lower speeds) than drivers were used to.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, you don't need to slow down at all &lt;strong&gt;until&lt;/strong&gt; the tire's grip is overcome and/or the vehicle begins to roll. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-10-12T19:02:50.373" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10829" PostTypeId="2" ParentId="10827" CreationDate="2016-10-12T20:24:32.327" Score="2" Body="&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;No. If there is no {installation, electrical, maintenance, etc} manual/description etc. (and maybe add also quality certificate also here) it is not fair to assume anything. Buying something without knowing its characteristics and placing it under current is a fire hazard, therefore it is not safe to assume characteristics! Guessing characteristics form picures is never a good idea.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;From the (missing) installation manual. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If a motor consumes 500 W then 1 electrical outlet capable of supplying 1,32 kW can power 2 motors. 2 Electrical outlets capable of supplying 1,32 kW can power 2 each. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;phases are the number of &quot;inputs&quot; for a motor. a 3 phase motor needs 3 signals to turn (dephased from each other) a two phase motor need two. The number of phases times the number of poles give the number of steps which divided 1 rotation (if I am not mistaking).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10596" LastEditDate="2016-10-13T09:17:55.483" LastActivityDate="2016-10-13T09:17:55.483" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10830" PostTypeId="2" ParentId="10826" CreationDate="2016-10-12T21:36:13.107" Score="1" Body="&lt;p&gt;Each parameter is for a simple transform such that when all 4 are combined you go from one frame to the next. It can be helpful to understand each of the 4 simple transforms, and you should do that if you haven't already. &lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2016-10-12T21:36:13.107" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10831" PostTypeId="2" ParentId="10826" CreationDate="2016-10-12T22:03:53.097" Score="1" Body="&lt;p&gt;I found this &lt;a href=&quot;https://www.youtube.com/watch?v=rA9tm0gTln8&quot; rel=&quot;nofollow&quot;&gt;video&lt;/a&gt; helpful when learning about the DH method.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DH is all about describing the differences between coordinate systems using rotation and translation about/along the X and Z components of the coordinate system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems that your frames {0} and {1} are not in the correct location if your wanting to follow the DH convention. When your on a rotation (pivoting) joint (such as the first joint), you should move up the coordinates to the next joint. That should make joint distances a and d be 0, allowing the DH convention to sufficiently describe the differences in frames.&lt;/p&gt;&#xA;" OwnerUserId="14923" LastEditorUserId="14923" LastEditDate="2016-10-13T05:33:11.323" LastActivityDate="2016-10-13T05:33:11.323" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="10832" PostTypeId="2" ParentId="10826" CreationDate="2016-10-12T22:21:25.967" Score="2" Body="&lt;p&gt;Here are the step that are in my course for using D-H convention:&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Step 1&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Define the z axis of every joint&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Step 2&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Define the origin frame R0 (O&lt;sub&gt;0&lt;/sub&gt;, x&lt;sub&gt;0&lt;/sub&gt;, y&lt;sub&gt;0&lt;/sub&gt;, z&lt;sub&gt;0&lt;/sub&gt;)&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Step 3&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;For i in [1, n] (&lt;em&gt;n=number of joint&lt;/em&gt;)&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Step 3.1&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Define O&lt;sub&gt;i&lt;/sub&gt; that belongs to z&lt;sub&gt;i&lt;/sub&gt;, and to the common normal to z&lt;sub&gt;i-1&lt;/sub&gt; and z&lt;sub&gt;i&lt;/sub&gt;&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Step 3.2&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Define x&lt;sub&gt;i&lt;/sub&gt; such as x&lt;sub&gt;i&lt;/sub&gt; is normal to the plan formed by z&lt;sub&gt;i-1&lt;/sub&gt; and z&lt;sub&gt;i&lt;/sub&gt;&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Step 3.3&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Define y&lt;sub&gt;i&lt;/sub&gt; such as x&lt;sub&gt;i&lt;/sub&gt;, y&lt;sub&gt;i&lt;/sub&gt;, z&lt;sub&gt;i&lt;/sub&gt; form a right handed coordinate frame&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Step 3.4&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Define the frame of the tool (or the ending point of your arm)&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Step 3.5&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Find the parameters:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Q&lt;sub&gt;i&lt;/sub&gt; is at the intersection of x&lt;sub&gt;i&lt;/sub&gt; and z&lt;sub&gt;i-1&lt;/sub&gt;&lt;/li&gt;&#xA;&lt;li&gt;&amp;alpha;_i is the angle between z&lt;sub&gt;i-1&lt;/sub&gt;) and z&lt;sub&gt;i&lt;/sub&gt; around x&lt;sub&gt;i&lt;/sub&gt; axis&lt;/li&gt;&#xA;&lt;li&gt;a&lt;sub&gt;i&lt;/sub&gt; is the distance |Q&lt;sub&gt;i&lt;/sub&gt;,O&lt;sub&gt;i&lt;/sub&gt;|&lt;/li&gt;&#xA;&lt;li&gt;d&lt;sub&gt;i&lt;/sub&gt; is the distance |O&lt;sub&gt;i-1&lt;/sub&gt;, Q&lt;sub&gt;i&lt;/sub&gt;| along z&lt;sub&gt;i-1&lt;/sub&gt; axis&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Hope this helps&lt;/p&gt;&#xA;" OwnerUserId="11462" LastActivityDate="2016-10-12T22:21:25.967" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10833" PostTypeId="1" AcceptedAnswerId="10840" CreationDate="2016-10-13T02:26:28.600" Score="0" ViewCount="480" Body="&lt;p&gt;Not exactly a robotics based question but mechanics is involved.&#xA;I have a wearable device that gives output in Quaternions which I can read serially via Labview. My task is to develop a threshold based fall detection system based on these values which I am not familiar with. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a sample data I read from the device&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;id: 4 distance: 1048 q0: 646 q1: -232 q2: -119 q3: 717 &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I was able to find the Euler angles from the quaternions. I obtain a Rotation matrix from the Quaternion. From the rotation matrix, I derive the Roll, Pitch and Yaw. The coordinate system is North-East-Down. But my Pitch angle remains at positive or negative 90 degree. The fact is I didn't write the conversion code . I am attaching the&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/eRSfM.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/eRSfM.jpg&quot; alt=&quot;Rotation Matrix&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://i.stack.imgur.com/hhhTy.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hhhTy.jpg&quot; alt=&quot;RPYAnglefrmRotMatrx&quot;&gt;&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please have a look at the code and help me if you could&lt;/p&gt;&#xA;" OwnerUserId="14994" LastEditorUserId="10596" LastEditDate="2016-10-13T09:17:37.573" LastActivityDate="2016-10-14T12:07:41.167" Title="Pitch angle is either +90° or -90°" Tags="&lt;gyroscope&gt;&lt;matlab&gt;&lt;labview&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10837" PostTypeId="1" CreationDate="2016-10-13T23:21:17.413" Score="2" ViewCount="3674" Body="&lt;p&gt;Take a look at the following simple example robot arm:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ShbFQ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ShbFQ.png&quot; alt=&quot;Example robot arm&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to know the torque required on that bottom motor to rotate the arm. Since it's not exactly rotating directly against gravity like the other joints I'm not sure how to analyze. Assume we know the mass of every part of the robot arm and the distances to the base.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For reference, I am planning on securing my base rotation motor's shaft through a ball bearing rotary table to the rest of the arm. I'm considering the torque required on that motor to properly pick the right component and make sure I get enough speed as well. So understanding how to analyze the forces would really help!&lt;/p&gt;&#xA;" OwnerUserId="6858" LastActivityDate="2016-10-15T01:01:39.057" Title="What is the torque/force required to rotate the base of a robot arm?" Tags="&lt;motor&gt;&lt;robotic-arm&gt;&lt;torque&gt;&lt;force&gt;&lt;rotation&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="10839" PostTypeId="2" ParentId="10837" CreationDate="2016-10-14T04:52:43.160" Score="1" Body="&lt;p&gt;If you only use Newton's second law, you'll get pretty close in your analysis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\sum F = m a$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\sum M = I \alpha$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using only the first equation and the idea that a torque is a force at a distance ($\tau = F \times l$),  and point masses for the payload and link masses, you will get a quick first estimate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So choose what acceleration is acceptable to you and the length of your arm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\tau =  m a l $ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That will give you a starting point.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you develop your design, you'll want to calculate the Inertias of each link (and the payload), as well as estimate friction from your transmissions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The torque from the motor at the joint (on the other side of the transmission) will be a function of the efficiency of the transmission.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\tau_{a}:$ actuator torque, $\tau_m: $ motor torque, $\eta_g:$ gears efficiency, $R_g:$ gears ratio&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\tau_a = \tau_m \eta_g R_g$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The friction in your &lt;a href=&quot;https://robotics.stackexchange.com/questions/10712/how-to-construct-rotary-turn-table-s-j1-axis-from-ball-bearing&quot;&gt;support bearings&lt;/a&gt; will depend on your design. &lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2016-10-15T01:01:39.057" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10840" PostTypeId="2" ParentId="10833" CreationDate="2016-10-14T11:09:01.940" Score="2" Body="&lt;p&gt;The problem is that the quaternions given in&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;id: 4 distance: 1048 q0: 646 q1: -232 q2: -119 q3: 717&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;are not normalized. In fact,&#xA;$$&#xA;\|\textbf{q}\| = \sqrt{q_0^2+q_1^2+q_2^2+q_3^2} = 999.6950&#xA;$$&#xA;I suspect the wearable device gives the quaternions using fixed point numbers that must be scaled by dividing by 1000. Another problem is that the quaternions are only given to three significant digits, so it will be better to calculate the quaternion norm, $\|q\|$, first using the equation above, and then normalize the quaternions using $q_0\leftarrow q_0/\|\textbf{q}\|$, $q_1\leftarrow q_1/\|\textbf{q}\|$, $q_2\leftarrow q_2/\|\textbf{q}\|$, $q_3\leftarrow q_3/\|\textbf{q}\|$. Then you can directly calculate the Euler angles from the quaternions using&#xA;\begin{eqnarray*}&#xA;\phi   &amp;amp;=&amp;amp;  \tan^{-1}\left(\frac{2(q_2q_3+q_0q_1)}{q_0^2-q_1^2-q_2^2+q_3^2}\right) \\&#xA;\theta &amp;amp;=&amp;amp; -\sin^{-1}\left(2q_1q_3-2q_0q_2\right) \\&#xA;\psi   &amp;amp;=&amp;amp;  \tan^{-1}\left(\frac{2(q_1q_2+q_0q_3)}{q_0^2+q_1^2-q_2^2-q_3^2}\right)&#xA;\end{eqnarray*}&#xA;without going through the intermediate step of calculating the rotation matrix.&#xA;Also make sure to use the four-quadrant arctan function, atan2(), to calculate $\phi$ and $\psi$ to obtain the correct quadrant.&#xA;Here, $\phi$ is the roll angle, $\theta$ the pitch angle, and $\psi$ the yaw angle; all three angles in radians.  Simple multiply by $180/\pi$ to obtain the angles in degrees.  Your answer should be &#xA;\begin{eqnarray*}&#xA;\phi   &amp;amp;=&amp;amp; -28.5815^\circ \\&#xA;\theta &amp;amp;=&amp;amp;  10.3144^\circ \\&#xA;\psi   &amp;amp;=&amp;amp;  93.3298^\circ&#xA;\end{eqnarray*}&#xA;If you repeat the above calculation &lt;em&gt;without&lt;/em&gt; first normalizing the quaternions, you will obtain the correct roll and yaw angles, but a complex pitch angle: &#xA;\begin{eqnarray*}&#xA;\phi   &amp;amp;=&amp;amp; -28.5815^\circ \\&#xA;\theta &amp;amp;=&amp;amp;  (90-j732.7)^\circ \\&#xA;\psi   &amp;amp;=&amp;amp;  93.3298^\circ&#xA;\end{eqnarray*}&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this helps!&lt;/p&gt;&#xA;" OwnerUserId="13926" LastEditorUserId="13926" LastEditDate="2016-10-14T12:07:41.167" LastActivityDate="2016-10-14T12:07:41.167" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10841" PostTypeId="2" ParentId="10837" CreationDate="2016-10-14T11:35:52.283" Score="4" Body="&lt;p&gt;You need enough torque to overcome friction, and to accelerate the load.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you know the friction torque ($\tau_f$), and the mass moment of inertia along the motor axis ($I$), then the minimum motor torque required is &#xA;$$&#xA;\tau = \tau_f + I\alpha&#xA;$$&#xA;where $\alpha$ is the required rotational acceleration. &lt;/p&gt;&#xA;" OwnerUserId="13926" LastActivityDate="2016-10-14T11:35:52.283" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10842" PostTypeId="1" AcceptedAnswerId="10865" CreationDate="2016-10-14T15:36:58.773" Score="0" ViewCount="77" Body="&lt;p&gt;In  Neal Stephenson's novel &quot;Snow Crash&quot;, a robotic/cybernetic creature known as a &quot;Rat Thing&quot; looses its bounds and runs to rescue another character.  The Rat Thing is portrayed at moving over 700 mph and causing sonic shock waves.  Can such a speed be reached by purely mechanical means? &lt;/p&gt;&#xA;" OwnerUserId="15009" LastEditorUserId="37" LastEditDate="2016-10-17T10:00:12.247" LastActivityDate="2016-10-17T13:33:42.563" Title="What is the top speed of a four legged robot?" Tags="&lt;kinematics&gt;" AnswerCount="2" CommentCount="2" ClosedDate="2016-11-07T18:34:40.287" ContentLicense="CC BY-SA 3.0" />
  <row Id="10843" PostTypeId="1" CreationDate="2016-10-14T15:52:46.577" Score="0" ViewCount="182" Body="&lt;p&gt;I'm attempting to do a quick and dirty autonomous path with the create2. I'm using the tethered driving program seen &lt;a href=&quot;https://www.irobotweb.com/~/media/MainSite/PDFs/About/STEM/Create/Python_Tethered_Driving.pdf&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I set my own buttons just to make it rotate 90° and go forward one &quot;pulse&quot;. I'd like to know, does anyone have any ideas on how to trick the attached Create2_TetheredDrive.py into thinking it's seeing a series of keyboard entries?&lt;/p&gt;&#xA;" OwnerUserId="14876" LastEditorUserId="10596" LastEditDate="2016-10-16T19:37:57.443" LastActivityDate="2018-01-16T22:47:59.643" Title="Using the Create2 Tethered Driving program- inputting a string of keyboard presses" Tags="&lt;irobot-create&gt;&lt;path-planning&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10845" PostTypeId="2" ParentId="10842" CreationDate="2016-10-14T19:53:38.097" Score="0" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Can such a speed be reached by purely mechanical means?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, according to &lt;a href=&quot;https://en.m.wikipedia.org/wiki/Terminal_velocity&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Felix Baumgartner [a four legged being, two of them called &quot;arms&quot;] who jumped from a height of 128,100 feet (39,000 m) and reached &lt;strong&gt;1,342 km/h (834 mph)&lt;/strong&gt;, though he achieved this velocity at high altitude, where extremely thin air presents less drag force.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Just falling from a high altitude is the only purely mechanical way I can think of.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's probably not what you had in mind as an answer. This is still useful to think about: A ground based human shaped robot would need more than 1g of acceleration, to overcome the low terminal velocity on the ground. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could do that in a car, but that would mean burning fuel, which is chemical energy. I very much doubt that there's a mechanical way to store the necessary energy in a way that's lightweight enough to still be able to move around.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's likely still not the answer you are looking for.&#xA;Even if you loosen the requirement of purely mechanical to just the parts that create the motion, like legs,  you still have to deal with the noncontinuous way are in contact with the ground. In practise, you also have to deal with unevenness of the ground and small obstacles like rocks, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;tl,dr&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Reaching 700mph purely mechanically is possible, but not on the ground with a robot that uses legs.&lt;/p&gt;&#xA;" OwnerUserId="9860" LastActivityDate="2016-10-14T19:53:38.097" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10846" PostTypeId="1" CreationDate="2016-10-14T21:09:27.130" Score="2" ViewCount="144" Body="&lt;p&gt;ToF (time-of-flight) cameras seem susceptible to bright outdoor conditions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any sensors made for bright outdoor conditions and could be embeddable in a robot that could detect and/or track small objects (5cm - 25cm) with a range of 10m - 100m?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would radar work?&lt;/p&gt;&#xA;" OwnerUserId="14959" LastEditorUserId="14959" LastEditDate="2016-10-15T18:11:25.327" LastActivityDate="2016-10-18T10:11:27.067" Title="What sensors can track small objects (5 cm - 25 cm) in bright sunlight?" Tags="&lt;computer-vision&gt;&lt;lidar&gt;" AnswerCount="1" CommentCount="12" FavoriteCount="2" ClosedDate="2016-10-19T20:17:12.087" ContentLicense="CC BY-SA 3.0" />
  <row Id="10848" PostTypeId="2" ParentId="10739" CreationDate="2016-10-15T12:38:56.020" Score="1" Body="&lt;p&gt;From a practical perspective, usage of Beaglebone Black is amazing (although you may end up with image capture issues). It has two PRUs and quite a lot of GPIOs if hardwares are to be interfaced. If image recognition can be done with costly cameras which support h264 compression format (like Logitech c920), Beaglebone black is the clear 'winner'. Else, according to what I have heard, dual-board systems like UDOO are amazing if ease of programming is the main concern. Raspberry Pi is extraordinary if image processing is the sole focus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Reference: &lt;a href=&quot;https://en.m.wikipedia.org/wiki/Comparison_of_single-board_computers&quot; rel=&quot;nofollow&quot; title=&quot;Comparison of embedded systems&quot;&gt;Comparison of embedded systems &lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Note: I have ignored some of the nice boards which do not have huge communities. Odroid, PCduino etc are in that list) &lt;/p&gt;&#xA;" OwnerUserId="15014" LastActivityDate="2016-10-15T12:38:56.020" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10849" PostTypeId="2" ParentId="10687" CreationDate="2016-10-15T13:03:13.933" Score="0" Body="&lt;p&gt;This type of image processing is also known as &quot;Pattern matching&quot;, &quot;Feature matching&quot; or &quot;Image recognition&quot; in broader aspects. &quot;Pattern detection&quot; is a bit different generally; For example, Techcrunch symbol can be green in color or black; &quot;Pattern detector&quot; detects only the features (say edges and corners) and not color or 'subtle' differences. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;OpenCV is the &lt;em&gt;de-facto&lt;/em&gt; standard in my opinion. However, some of the other notable libraries include the following:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://sourceforge.net/projects/aruco/&quot; rel=&quot;nofollow&quot;&gt;Aruco light-weight marker detection package&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://en.m.wikipedia.org/wiki/Comparison_of_deep_learning_software&quot; rel=&quot;nofollow&quot;&gt;Deep learning based image processing libraries like Caffe, Chainer etc&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="15014" LastActivityDate="2016-10-15T13:03:13.933" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10851" PostTypeId="2" ParentId="6944" CreationDate="2016-10-15T15:52:12.830" Score="1" Body="&lt;p&gt;Having an overhead camera (like a single low cost webcam if needed). Ultrasonics is meant to be directional while cameras are not meant to be. The downward facing camera placed at a height and horizontally centered over the area can detect robot and obstacles in Cartesian coordinates and that information can be transferred to the moving robot using Bluetooth or similar methods. If the camera cannot be mounted overhead, inverse perspective transform can be applied or rotation matrices can be employed. If occlusion occurs, more number of cameras can be used generally using data fusion. &lt;/p&gt;&#xA;" OwnerUserId="15014" LastActivityDate="2016-10-15T15:52:12.830" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10852" PostTypeId="2" ParentId="4762" CreationDate="2016-10-15T16:31:03.753" Score="0" Body="&lt;p&gt;Your question is interesting one as most of us experience the same during the beginning of development of drones. I am a drone software developer and I was just a student with enthusiasm towards physics, mathematics, development of hardwares (as a part of purpose of life). I hadn't even known the types of differential equations of flight. But, taking up a project (professionally as well with deadlines) helped a lot. This is not &quot;hey me me&quot; story. Some of the websites that helped a lot were &lt;a href=&quot;http://robots.stanford.edu/&quot; rel=&quot;nofollow&quot;&gt;robots.stanford.edu&lt;/a&gt; and the papers ranging from discriminative training of Kalman filters to full fledged stanford driving software of Stanley, the car that won DARPA Grand Challenge. The 'depth of understanding' depends on your objective and the purpose for which you are developing drone applications. Delft University and University of Pennsylvania have been actively researching on application of drones as well. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;From my personal experience, it can be said that simulators like ROS Gazebo MAVproxy can aid the development of research while flying directly feels like a nice hobby.&lt;/p&gt;&#xA;" OwnerUserId="15014" LastEditorUserId="10596" LastEditDate="2016-10-16T16:56:06.847" LastActivityDate="2016-10-16T16:56:06.847" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10853" PostTypeId="1" CreationDate="2016-10-15T17:45:09.250" Score="3" ViewCount="998" Body="&lt;p&gt;I have started to work on a little project of mines, which consists in implementing the stabilization a single axis gimbal using Arduino.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The gimbal is driven by a sensorless three phase brushless DC (BLDC) motor, while on it's shaft there is a generic payload provided with an IMU board (3 axes gyros + 3 axes accelometers), which can give feedback to the Arduino about the angular rates and accelerations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/NI00H.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/NI00H.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have googled a bit about this topic and there are so many solutions out there, the only thing I really do not understand is about the control of the BLDC motor.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Can I use a sensorless control of the motor, by sensing the back EMF&#xA;even if the motor is spinning very low?&lt;/li&gt;&#xA;&lt;li&gt;How can I energize properly the phases of the BLDC motor if it is sensorless?&lt;/li&gt;&#xA;&lt;li&gt;Can I use the IMU for finding out how to spin the BLDC motor properly without counter rotations?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Could you give me any help, please?&lt;/p&gt;&#xA;" OwnerUserId="11600" LastEditorUserId="10596" LastEditDate="2016-10-15T18:18:48.487" LastActivityDate="2016-11-18T15:29:57.160" Title="Driving sensorless three phase BLDC motor with Arduino and IMU" Tags="&lt;arduino&gt;&lt;control&gt;&lt;motor&gt;&lt;brushless-motor&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10854" PostTypeId="2" ParentId="10687" CreationDate="2016-10-16T04:27:22.797" Score="4" Body="&lt;p&gt;In general, markers used to measure position visually are called &lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/fiducial_marker&quot; rel=&quot;nofollow&quot;&gt;fiducial markers&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some applications have a single type of fiducial (a solid circle or a cross) repeated many times.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some applications independently positition many unique &lt;a href=&quot;http://www.roborealm.com/help/Fiducial&quot; rel=&quot;nofollow&quot;&gt;barcode-like fiducial markers&lt;/a&gt;, sometimes called &lt;strong&gt;fiducial targets&lt;/strong&gt;, &lt;strong&gt;frame markers&lt;/strong&gt;, &lt;strong&gt;&lt;a href=&quot;https://carolinemajorproject.wordpress.com/2013/02/25/augmented-reality-markers/&quot; rel=&quot;nofollow&quot;&gt;augmented reality marker&lt;/a&gt;&lt;/strong&gt;, etc.,&#xA;such as &lt;a href=&quot;http://hackaday.com/2014/08/24/open-source-marker-recognition-for-augmented-reality/&quot; rel=&quot;nofollow&quot;&gt;openAR&lt;/a&gt;, &lt;a href=&quot;http://www.uco.es/investiga/grupos/ava/node/26&quot; rel=&quot;nofollow&quot;&gt;ArUco&lt;/a&gt;, &lt;a href=&quot;http://elekslabs.com/2016/03/web-based-augmented-reality-to-adopt-or-not-to-adopt.html&quot; rel=&quot;nofollow&quot;&gt;js-aruco&lt;/a&gt;, &lt;a href=&quot;http://xanthippi.ceid.upatras.gr/people/evangelidis/arma/&quot; rel=&quot;nofollow&quot;&gt;ARma&lt;/a&gt;, &lt;a href=&quot;https://bocoup.com/weblog/javascript-augmented-reality&quot; rel=&quot;nofollow&quot;&gt;JSARToolkit&lt;/a&gt;, &lt;a href=&quot;http://www.cl.cam.ac.uk/~acr31/cantag/&quot; rel=&quot;nofollow&quot;&gt;Cantag&lt;/a&gt;, &lt;a href=&quot;http://www.curiscope.com/&quot; rel=&quot;nofollow&quot;&gt;Virtuali-Tee&lt;/a&gt;, &lt;a href=&quot;http://handheldar.icg.tugraz.at/markerbased.php&quot; rel=&quot;nofollow&quot;&gt;Studierstube Tracker&lt;/a&gt;, &lt;a href=&quot;http://answers.unity3d.com/questions/820090/augmented-reality-with-symbols.html&quot; rel=&quot;nofollow&quot;&gt;Vuforia Frame Markers&lt;/a&gt;, etc.&#xA;(These applications have more complex computational requirements, because the fiducial can be at some arbitrary pitch, roll, yaw angle relative to the camera, so the software must de-skew and undo the perspective transformation. The &lt;a href=&quot;https://www.packtpub.com/books/content/marker-based-augmented-reality-iphone-or-ipad&quot; rel=&quot;nofollow&quot;&gt;Marker-based Augmented Reality&lt;/a&gt; article goes into a lot of detail).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some &lt;a href=&quot;http://en.wikipedia.org/wiki/linear_encoder&quot; rel=&quot;nofollow&quot;&gt;linear encoders&lt;/a&gt; visually detect absolute &lt;a href=&quot;http://www.controleng.com/single-article/motion-control-long-length-linear-encoders-look-lively/70d978580fc5166aca1b94b01e808680.html&quot; rel=&quot;nofollow&quot;&gt;linear position&lt;/a&gt; over &lt;a href=&quot;http://www.controleng.com/single-article/long-length-linear-encoder-addendum/32b632e96ae9b8b3f6f869e668747abf.html&quot; rel=&quot;nofollow&quot;&gt;long lengths&lt;/a&gt; along a long &quot;tape&quot; printed with a long series of unique barcodes,&#xA;such as&#xA;&lt;a href=&quot;https://www.cedes.com/documents/produkte/el/111700_Manual_APS.pdf&quot; rel=&quot;nofollow&quot;&gt;Absolute Positioning System (APS) code tape&lt;/a&gt;,&#xA;&lt;a href=&quot;http://www.renishaw.com/en/true-absolute-linear-and-absolute-rotary-encoders-revolutionise-position-feedback--10768&quot; rel=&quot;nofollow&quot;&gt;RESOLUTE single track optical absolute scale&lt;/a&gt;,&#xA;&lt;a href=&quot;http://www.pepperl-fuchs.ca/canada/en/classid_3334.htm?view=productlist&quot; rel=&quot;nofollow&quot;&gt;Data Matrix Position Guided Vision (PGV) code tape&lt;/a&gt;,&#xA;&lt;a href=&quot;http://www.leuze.com/media/assets/dv007_144dpi_geschuetzt_pdf/PIN_BPS8_34_37_en_144dpi.pdf&quot; rel=&quot;nofollow&quot;&gt;Leuze barcode positioning system (BPS)&lt;/a&gt;,&#xA;and the &quot;&lt;a href=&quot;https://shapertools.com/faq/#shapertape_what-is-it&quot; rel=&quot;nofollow&quot;&gt;ShaperTape&lt;/a&gt;&quot; of the &lt;a href=&quot;http://hackaday.com/2016/08/25/hands-on-the-shaper-origin-a-tool-that-changes-how-we-build/&quot; rel=&quot;nofollow&quot;&gt;&quot;Origin&quot;&lt;/a&gt; from &lt;a href=&quot;https://shapertools.com/&quot; rel=&quot;nofollow&quot;&gt;Shaper Tools&lt;/a&gt; in your photo.&#xA;(These applications generally have simpler computational requirements and so can run faster, because they rigidly hold the camera in a nearly fixed pitch-roll orientation and Z-position relative to the fiducial).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some fiducual markers are specifically designed with topological region features that allow them to be quickly located and uniquely identified with &lt;strong&gt;&lt;a href=&quot;http://www.nime.org/proceedings/2009/nime2009_062.pdf&quot; rel=&quot;nofollow&quot;&gt;2D fiducial tracking&lt;/a&gt;&lt;/strong&gt; in the 2D camera image,&#xA;even in applications that need to do full &lt;strong&gt;&lt;a href=&quot;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.624.6328&amp;amp;rep=rep1&amp;amp;type=pdf&quot; rel=&quot;nofollow&quot;&gt;6D fiducial tracking&lt;/a&gt;&lt;/strong&gt; of the X,Y,Z position and pitch, roll, yaw orientation of the fiducial in the 3D space in front of the camera.&lt;/p&gt;&#xA;" OwnerUserId="187" LastActivityDate="2016-10-16T04:27:22.797" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10857" PostTypeId="1" CreationDate="2016-10-16T21:05:10.820" Score="1" ViewCount="59" Body="&lt;p&gt;I'm making a Hexapod robot (this is my first robotics project ever) and I'm having a hard time deciding the orientation of the servo motors on the COXA section. The hexapod I'm making is based on &lt;a href=&quot;https://github.com/antdroid-hexapod/antdroid/wiki/Assembly-guide#vitamins&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; with MG996R servo motors&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is that all the Hexapod assembly guides I've read (including the one above which I'm using) say that the servos on the coxa link have to be installed in a way that the Zero angles (the angle the servos move to automatically when they're plugged in) of the servos should point to look like this from above: &#xA;(the red circles are the servos in question)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/aYNa2.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/aYNa2.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I understand that the reason for setting up the zero angles of the coxa servos this way is so that the Hexapod can directly stand up when it is powered up (since the motors go to their zero angles on powering up). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now here's the problem: the servos can only move forward from the zero angles and then back to the zero angles in COUNTER-CLOCKWISE direction and do not go backwards from the zero angles i.e not move in the opposite direction. Knowing this, I don't understand how I'm supposed to install the servos like in the picture since doing that would mean the motors on the LEFT side would not be able to turn in the clockwise direction for the tripod gait. Can anyone please explain me how I'm supposed to get the motors moving in clockwise direction for the tripod gait while keeping the zero angles set in the directions as shown in the picture?&lt;/p&gt;&#xA;" OwnerUserId="15020" LastEditorUserId="37" LastEditDate="2017-03-09T18:28:37.260" LastActivityDate="2017-03-09T18:28:37.260" Title="Question regarding the orientation of Coxa servos in a HEXAPOD" Tags="&lt;rcservo&gt;&lt;legged&gt;&lt;hexapod&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10858" PostTypeId="2" ParentId="10607" CreationDate="2016-10-16T22:02:37.700" Score="0" Body="&lt;p&gt;Alright, this a work in progress at this point.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically I decided to rethink the problem after using the triangle based approach was clearly solvable, but required a HUGE amount of algebra (at least as far as I could work out).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The new approach is to not think of the system as a system of triangles, but instead as a sort of trapezoid like so:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/TAgU2.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/TAgU2.png&quot; alt=&quot;Illustration of Geometry&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For our first pass let's ignore the tilting of the drawing head completely to make life simpler.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The geometry of $C,D,E,F$ is known. Only the lengths of the cables $AC$ and $BD$ change. What we want to find is forward and inverse kinematic equations which relate the lengths of $AC$ and $BD$ to $F_x,F_y$. The other equation we need to find relates $F_x,F_y$ to the lengths of $AC$ and $BD$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's begin by finding $F_x,F_y$ when we know the lengths of $AC$ and $BD$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We will use a system of three equations. The first two equations will be circles with centers $A$ and $B$, the third equation will be that $CD$ is a known length which we will call $w$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/xDwyz.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xDwyz.png&quot; alt=&quot;Geometry with Circles&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$C_x = A_x+\sqrt{L_{AC}^2-A_y^2+2A_yC_y-C_y^2} \tag1$$&#xA;$$D_x = B_x-\sqrt{L_{BD}^2-B_y^2+2B_yD_y-D_y^2} \tag2$$&#xA;$$D_x - C_x = w \tag3$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because $A_y, L_{AC}, B_y$, and $L_{BD}$ are known, let's say $\alpha =  L_{AC}^2 - A_y^2$, $\beta = L_{BD}^2 - A_y^2$ where $A_y = B_y$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We also know that $C_y = D_y$ which simplifies the equations to:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$C_x = A_x+\sqrt{\alpha+2A_yC_y-C_y^2} \tag1$$&#xA;$$D_x = B_x-\sqrt{\beta+2B_yD_y-D_y^2} \tag2$$&#xA;$$D_x - C_x = w \tag3$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Plugging $(1)$ and $(2)$ into $(3)$ we find:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\left(B_x-\sqrt{\beta+2B_yD_y-D_y^2}\right) - \left(A_x+\sqrt{\alpha+2A_yC_y-C_y^2}\right)  = w \tag4$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Distributing terms and re-organizing we can find:&#xA;$$\sqrt{\beta+2B_yD_y-D_y^2} + \sqrt{\alpha+2A_yC_y-C_y^2}  = B_x-A_x-w \tag4$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We can also say $\gamma = B_x-A_x-w$ to simplify things further. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\sqrt{\beta+2A_yC_y-C_y^2} + \sqrt{\alpha + 2A_yC_y-C_y^2} = \gamma\tag4$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Solving for $y$ we find:&#xA;$$C_y = \frac{8 \gamma^2 A_y-\sqrt{64 \gamma^4 A_y^2-16 \gamma^2 (\alpha^2-2 \alpha \beta-2 \alpha \gamma^2+\beta^2-2 \beta \gamma^2+\gamma^4})}{8 \gamma^2}\tag5$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We can then plug that answer back into $(1)$ to get $C_x,C_y$. $F_x$ is then given by $F_x = C_x + \frac{w}{2}$ and $F_y = C_y - h$&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Now, working in the other direction when we have $F_x$ and $F_y$ and want to find the lengths of $AC$ and $BD$. This direction of computation is done more often, and should be optimized.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First we find $C$ and $D$ which is fairly trivial because we know the geometry there and can say:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$C_x = F_x - \frac{w}{2}$$&#xA;$$C_y = F_y + h$$&#xA;$$D_x = F_x + \frac{w}{2}$$&#xA;$$D_y = F_y + h$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From Pythagorean theorem, we can then directly compute the lengths $L_{AC}$ and $L_{BD}$ as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$L_{AC} = \sqrt{{(A_x-C_x)}^2+{(A_y-C_y)}^2}\tag6$$&#xA;$$L_{BD} = \sqrt{{(B_x-D_x)}^2+{(B_y-D_y)}^2}\tag7$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/OHF2k.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OHF2k.png&quot; alt=&quot;Right Triangles&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="14659" LastEditorUserId="14659" LastEditDate="2016-11-13T22:46:57.223" LastActivityDate="2016-11-13T22:46:57.223" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="10859" PostTypeId="1" CreationDate="2016-10-17T00:49:05.153" Score="1" ViewCount="550" Body="&lt;p&gt;I want to program an arduino using matlab by &quot;arduino support package&quot; and I want to use simulink in normal input output operations but also use Matlab language in another part so is it possible to make a code consist of simulink model and matlab language and add this code to arduino ? and if it possible how to make it ?&lt;/p&gt;&#xA;" OwnerUserId="10601" LastActivityDate="2016-11-01T10:47:42.090" Title="how to add a Matlab code to a simulink model?" Tags="&lt;arduino&gt;&lt;matlab&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10860" PostTypeId="1" AcceptedAnswerId="10862" CreationDate="2016-10-17T01:46:01.940" Score="1" ViewCount="5160" Body="&lt;p&gt;In cnc machine, programs change G-code to commands to stepper motors using parallel port.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to know what is the G-code and how can it be converted to stepper motor commands?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The programs doing this are not open-source, So can I find open source project doing the same?&lt;/p&gt;&#xA;" OwnerUserId="14985" LastActivityDate="2016-11-10T23:29:59.577" Title="How to convert G code to motor command?" Tags="&lt;cnc&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10861" PostTypeId="2" ParentId="2571" CreationDate="2016-10-17T06:33:22.573" Score="1" Body="&lt;p&gt;There are two environments namely indoor and outdoor environments. If it is indoor, then there may be interference issues like what you have mentioned - walls. In the outdoor environments, (particularly during sunny days) cheap IR sensors can encounter false-detections and that has to be compensated by using IR filters (hardware method) or using digital filters (software method; unreliable) and they are not directional generally.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;Triangulation&quot; is one of the most popular techniques and three WiFi/similar hotspots along with a mobile WiFi/Bluetooth device like embedding it in a band that you have mentioned are needed. However, if obstructions like walls occur, then, it is wiser to use electromagnetic rays that penetrate the walls (there will be many factors involved in the penetration of rays through concrete like thickness, composition, paint etc) and this is an active &lt;a href=&quot;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.31.6027&amp;amp;rep=rep1&amp;amp;type=pdf&quot; rel=&quot;nofollow&quot;&gt;research topic&lt;/a&gt;. One of the easiest methods is to use several cameras at multiple locations and use cascade object classification and/or use a combination of triangulation.&lt;/p&gt;&#xA;" OwnerUserId="15014" LastEditorUserId="15014" LastEditDate="2016-10-17T06:47:00.557" LastActivityDate="2016-10-17T06:47:00.557" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10862" PostTypeId="2" ParentId="10860" CreationDate="2016-10-17T06:58:05.940" Score="4" Body="&lt;p&gt;&lt;a href=&quot;http://linuxcnc.org/&quot; rel=&quot;noreferrer&quot;&gt;LinuxCNC&lt;/a&gt; is an open source project dedicated to &quot;converting&quot; G-code into motor commands. It is not at all a simple task.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The basic steps are:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Read the G-Code file into memory&lt;/li&gt;&#xA;&lt;li&gt;Interpret the G code (mostly motion commands and way points, but also branches and loops)&lt;/li&gt;&#xA;&lt;li&gt;Plan a continoupous path between the waypoints&lt;/li&gt;&#xA;&lt;li&gt;Add the time dimention to your path (velocities and accelerations)&lt;/li&gt;&#xA;&lt;li&gt;Project values to your motor axis&lt;/li&gt;&#xA;&lt;li&gt;Make your motor controller follow the reference trajectory (this is the &#xA;part which is heavily dependent on your motors and motor driver, in your ase the stepper motor with parallel port)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;On driving a setpper motor with your paralel port (once you know what is the desired trajectory of your motor) information can be found &lt;a href=&quot;http://electronics-diy.com/electronics/stepper_motors.php&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;http://www.instructables.com/id/Parallel-Port-3-Axis-CNC-Driver-Opto-Isolated/&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2016-10-17T07:51:43.827" LastActivityDate="2016-10-17T07:51:43.827" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10863" PostTypeId="2" ParentId="10859" CreationDate="2016-10-17T07:07:27.967" Score="1" Body="&lt;p&gt;You can run a reduced version of the matlab language in Simulink using the  &lt;a href=&quot;http://de.mathworks.com/help/simulink/slref/matlabfunction.html&quot; rel=&quot;nofollow&quot;&gt;Matlab function&lt;/a&gt; block, but I doubt this includes arduino commands.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can extend this reduced version of the Matlab language by declaring the external functions which you would like to use, with the coder.extrinsic command. &lt;a href=&quot;http://de.mathworks.com/help/simulink/ug/calling-matlab-functions.html&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt; is a tutorial on how to do this.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2016-10-17T07:07:27.967" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10864" PostTypeId="2" ParentId="10859" CreationDate="2016-10-17T10:07:38.667" Score="2" Body="&lt;p&gt;You can use from simulink library browser under &lt;a href=&quot;https://de.mathworks.com/help/simulink/user-defined-functions.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;User-defined functions&lt;/a&gt; figure out which one is suitable for your system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you get some delay while calling Matlab function than you can also use a sybsytem as matlab function because matlab function gives output in delay  in terms of calling function and returning the value but  if you generate the same function im simulink model then output will be without delayed version as shown in the figure &lt;a href=&quot;https://i.stack.imgur.com/1oJ7Z.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1oJ7Z.jpg&quot; alt=&quot; &quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15026" LastEditorUserId="15026" LastEditDate="2016-11-01T10:47:42.090" LastActivityDate="2016-11-01T10:47:42.090" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10865" PostTypeId="2" ParentId="10842" CreationDate="2016-10-17T13:33:42.563" Score="2" Body="&lt;p&gt;Currently the fastest four legged robot is &lt;a href=&quot;http://www.bostondynamics.com/robot_cheetah.html&quot; rel=&quot;nofollow&quot;&gt;Cheetah&lt;/a&gt; by Boston Dynamics that runs 29mph. Real cheetahs can run 70mph and are the fastest land animals. I don't think it would be possible for a robot to run much faster than that. Why? At higher speeds aerodynamics play a crucial role, and a legged design would be hard to optimize in that way. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also keep in mind, that there is currently only one land vehicle that broke a sound barrier - &lt;a href=&quot;https://en.wikipedia.org/wiki/ThrustSSC&quot; rel=&quot;nofollow&quot;&gt;thrustSSC&lt;/a&gt;. Powered by jet engines, it consumes insane 18l of fuel per second. The mass of the fuel itself would be extremely hard to carry for a legged robot.&lt;/p&gt;&#xA;" OwnerUserId="7360" LastActivityDate="2016-10-17T13:33:42.563" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10866" PostTypeId="2" ParentId="8644" CreationDate="2016-10-17T16:23:06.103" Score="0" Body="&lt;p&gt;It looks like a light-weight 2D ROS-like simulation system for Windows and a robotic framework like that of Arduino. By glancing over the software, it can be assessed that the software was meant for non-real-time applications with quick-and-easy programming styles (particularly meant for Windows). However, I have found that it is not a standard simulation tool [&lt;a href=&quot;http://cours.do.am/ParadigmeAgent/1-s2.0-S0921889012000322-main.pdf&quot; rel=&quot;nofollow&quot;&gt;1&lt;/a&gt;][&lt;a href=&quot;http://ranger.uta.edu/~gianluca/papers/StMa_PETRA11.pdf&quot; rel=&quot;nofollow&quot;&gt;2&lt;/a&gt;][&lt;a href=&quot;https://arxiv.org/pdf/1402.7050.pdf&quot; rel=&quot;nofollow&quot;&gt;3&lt;/a&gt;].&lt;/p&gt;&#xA;" OwnerUserId="15014" LastActivityDate="2016-10-17T16:23:06.103" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10867" PostTypeId="1" AcceptedAnswerId="10868" CreationDate="2016-10-17T16:28:01.430" Score="0" ViewCount="997" Body="&lt;p&gt;Is there an official documentation from Kuka that explains at a beginner level how to start programming Kuka Robots equipped with KR-C4 controllers?&lt;/p&gt;&#xA;" OwnerUserId="14175" LastEditorUserId="110" LastEditDate="2016-10-20T13:00:22.580" LastActivityDate="2016-10-20T13:00:22.580" Title="Kuka KR-C4 Documentation" Tags="&lt;software&gt;&lt;industrial-robot&gt;&lt;kuka&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ClosedDate="2016-10-18T08:54:11.613" ContentLicense="CC BY-SA 3.0" />
  <row Id="10868" PostTypeId="2" ParentId="10867" CreationDate="2016-10-17T17:33:37.057" Score="1" Body="&lt;p&gt;The Kuka KRC4 Controller can be programmed using the KRL language. &lt;a href=&quot;http://cncmanual.com/kuka-system-software-8-2-operating-programming-instructions/&quot; rel=&quot;nofollow&quot;&gt;This&lt;/a&gt; official Kuka manual  gives a good introduction to both basics of hardware and software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;KRL is a high level programming language which runs on a mixed Windows-VxWorks environment.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2016-10-18T09:35:36.793" LastActivityDate="2016-10-18T09:35:36.793" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10869" PostTypeId="1" CreationDate="2016-10-17T18:22:06.007" Score="0" ViewCount="33" Body="&lt;p&gt;For some important reasons the plugged cable 1 must not be on at the same time as the the plugged cable 2. It must be idiot proof...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm talking about regular house power north america.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the specific name of it. I've done some research and I can't find anything. I thinking about crafting the thing with 2 powerbar and a custom button, but I'm looking for something less homemade.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="14310" LastActivityDate="2016-10-17T22:04:50.583" Title="2 way Switch powerbar" Tags="&lt;power&gt;" AnswerCount="1" CommentCount="3" ClosedDate="2016-10-18T08:51:20.903" ContentLicense="CC BY-SA 3.0" />
  <row Id="10870" PostTypeId="2" ParentId="10869" CreationDate="2016-10-17T22:04:50.583" Score="1" Body="&lt;p&gt;The idiot proof solution is not to have two cables.&lt;/p&gt;&#xA;" OwnerUserId="9860" LastActivityDate="2016-10-17T22:04:50.583" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="10871" PostTypeId="2" ParentId="10853" CreationDate="2016-10-18T02:14:06.413" Score="1" Body="&lt;p&gt;consider coupling the motor with an encoder that has enough resolution to tell you precisely when to ramp up current to a particular phase. this will give you precise feedback to develop a control loop that should give maximum torque for a given voltage.&lt;/p&gt;&#xA;" OwnerUserId="15033" LastActivityDate="2016-10-18T02:14:06.413" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10873" PostTypeId="2" ParentId="10846" CreationDate="2016-10-18T10:11:27.067" Score="0" Body="&lt;p&gt;Tracking small objects is always tricky. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can use Ultrasonic sound sensors. Calibrate it to the distance you want to detect. They have low range though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you can work on a more complex model then computer vision could also help (Highly unreliable- It needs to have a very strong filter algorithm)&lt;/p&gt;&#xA;" OwnerUserId="15035" LastActivityDate="2016-10-18T10:11:27.067" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10875" PostTypeId="1" AcceptedAnswerId="10880" CreationDate="2016-10-18T17:51:10.930" Score="1" ViewCount="44" Body="&lt;p&gt;I am using my RF module to send a High signal to relay but just once by a push button.As soon as I release it the Relay goes to NC . How can I Fix it to stay at NO . I thought of using a Flip-Flop.&lt;/p&gt;&#xA;" OwnerUserId="15040" LastActivityDate="2016-10-20T05:00:17.277" Title="Relay Fix at Normally Open" Tags="&lt;radio-control&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ClosedDate="2016-10-20T13:05:00.373" ContentLicense="CC BY-SA 3.0" />
  <row Id="10878" PostTypeId="1" CreationDate="2016-10-19T19:30:35.263" Score="0" ViewCount="63" Body="&lt;p&gt;Is there a sensor that can measure through an object, for example a mattress. (This is not what I want to do but it is a good illustration) I want to mount a sensor on the ceiling above the top bunk of a bunk bed and want to measure the presence of a person on the bottom bunk (when no one is in the top bunk). I have read about thermal and ultrasonic sensors however it does appear that they would be able to measure on the other side of a mattress.&lt;/p&gt;&#xA;" OwnerUserId="15047" LastActivityDate="2016-10-20T14:33:20.257" Title="Is there a sensor that can measure through an object?" Tags="&lt;sensors&gt;" AnswerCount="2" CommentCount="1" ClosedDate="2016-10-20T15:23:22.293" ContentLicense="CC BY-SA 3.0" />
  <row Id="10879" PostTypeId="2" ParentId="10878" CreationDate="2016-10-19T19:36:40.533" Score="1" Body="&lt;p&gt;Some signal has to penetrate the object and reflect back to the transceiver in order to do such a measurement. Light can penetrate some object (e.g glass), ultrasounds can penetrate most objects upto a certain depth (based on material). Magnetic and/or electric fields can also penetrate objects, that is how metal detectors work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your mattress use case, a signal entering the object, leaving the object on the other side, then getting reflected, the reflection penetrating again the object and leaving on the other side and then picked up by the transceiver is a tough problem with today's commercially available technology.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2016-10-20T14:33:20.257" LastActivityDate="2016-10-20T14:33:20.257" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10880" PostTypeId="2" ParentId="10875" CreationDate="2016-10-19T20:33:23.100" Score="0" Body="&lt;p&gt;Yes, that is a very good way to go...&lt;/p&gt;&#xA;&lt;p&gt;you can use a t flip flop so you the q output can hold the relay in the state you need and can toogle every time you press the button..&lt;/p&gt;&#xA;&lt;p&gt;here the T flip flip, your signal every time you press the button must be connected to the clock&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Pdh0F.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Pdh0F.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;and the output signal diagram looks like&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/FvKVF.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FvKVF.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1&gt;Edit&lt;/h1&gt;&#xA;&lt;p&gt;you can replace the flip flop with its equivalent nand gates&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/FtxAb.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FtxAb.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;or even more, considering that every nand gate can be schematizied with diodes&#xA;like&lt;/p&gt;&#xA;&lt;p&gt;but as you can see you will need more more elements and more place on the main board if you really want to replace the flipflop&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/SVOYL.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/SVOYL.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="14175" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2016-10-20T05:00:17.277" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10882" PostTypeId="1" AcceptedAnswerId="10883" CreationDate="2016-10-20T05:15:04.103" Score="0" ViewCount="2291" Body="&lt;p&gt;I'm learning kuka krc robot language, so far so good, and am wondering if there is an  IDE for writing the code i want to program to the robot, something like&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;giving me suggestions if I mistype a variable&lt;/li&gt;&#xA;&lt;li&gt;that suggest me methods available in the kuka language&lt;/li&gt;&#xA;&lt;li&gt;maybe let me debug the code etc etc&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;any option?&lt;/p&gt;&#xA;" OwnerUserId="14175" LastActivityDate="2016-10-20T07:37:42.273" Title="Is there a KUKA IDE?" Tags="&lt;programming-languages&gt;&lt;kuka&gt;" AnswerCount="1" CommentCount="0" ClosedDate="2016-10-20T15:21:49.783" ContentLicense="CC BY-SA 3.0" />
  <row Id="10883" PostTypeId="2" ParentId="10882" CreationDate="2016-10-20T07:37:42.273" Score="1" Body="&lt;p&gt;There is the official option which you can by from Kuka. It is called &lt;a href=&quot;http://www.kuka-robotics.com/en/products/software/kuka_sim/kuka_sim_detail/PS_KUKAOfficeLite_Detail.htm&quot; rel=&quot;nofollow&quot;&gt;Kuka Office&lt;/a&gt;. I am not sure about variable suggestions, but this can be used for debugging. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is also &lt;a href=&quot;http://www.orangeapps.de/?lng=en&amp;amp;page=apps/orangeedit&quot; rel=&quot;nofollow&quot;&gt;orange edit&lt;/a&gt; (currently in free beta) which many Kuka programmers use. This does have variable suggestions and also suggestions for methods/variables available in the Kuka language. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another soluton is to use &lt;a href=&quot;https://notepad-plus-plus.org/&quot; rel=&quot;nofollow&quot;&gt;notepad++&lt;/a&gt; withe the &lt;a href=&quot;http://www.robot-forum.com/robotforum/kuka-robot-forum/notepad-krl-plugin-by-henb3d-v1/msg68643/?PHPSESSID=cp5n01rcen6s13lkh5f43ecsg2#msg68643&quot; rel=&quot;nofollow&quot;&gt;KRL language plugins&lt;/a&gt;. This will give you variable suggestions (only your variables) and syntax highlighting and &lt;a href=&quot;http://sixdots.de/krlsourcecodeformatter/en/&quot; rel=&quot;nofollow&quot;&gt;formatting&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2016-10-20T07:37:42.273" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10884" PostTypeId="1" AcceptedAnswerId="10894" CreationDate="2016-10-20T08:39:04.740" Score="1" ViewCount="431" Body="&lt;p&gt;How can the maximum length and mass of the linkages of a RRR type robt arm be calculated, if the motor's mechanical characteristics are given?&lt;/p&gt;&#xA;" OwnerUserId="15054" LastEditorUserId="10748" LastEditDate="2016-10-20T14:29:13.397" LastActivityDate="2016-10-21T11:12:05.137" Title="How to dimension a 3 DOF robot arm with RRR configuration?" Tags="&lt;motor&gt;&lt;industrial-robot&gt;&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10885" PostTypeId="1" CreationDate="2016-10-20T12:50:05.543" Score="0" ViewCount="260" Body="&lt;p&gt;I have a Sharp GP2D12 and I've been using it with my Arduino just fine. I have however had some experience in the past where this sensor (which is analog) was fed into an &lt;a href=&quot;http://mech.vub.ac.be/teaching/info/mechatronica/finished_projects_2012/Twinbot1/media/downloads/SharpGP2D12Snrs.pdf&quot; rel=&quot;nofollow&quot;&gt;ADC (like ADC0831) to go to a Basic Stamp&lt;/a&gt;. I was wondering what the purpose of this is given that both the Arduino and the Basic Stamp support analog inputs if I am not mistaken, thus it seems weird having an extra and necessary link in the chain. Does the ADC provide more resolution? What is the point of it in this circumstance?&lt;/p&gt;&#xA;" OwnerUserId="4276" LastActivityDate="2016-10-20T14:53:19.880" Title="Use of ADC with Sharp Infrared Sensor" Tags="&lt;arduino&gt;&lt;sensors&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10886" PostTypeId="2" ParentId="10878" CreationDate="2016-10-20T13:14:05.503" Score="3" Body="&lt;p&gt;I am not sure you will be able to find a cheap off the shelf sensor.  But if you are an RF engineer and willing to implement something yourself, you might want to read: &lt;a href=&quot;https://www.hindawi.com/journals/ijmst/2014/958905/&quot; rel=&quot;nofollow&quot;&gt;A Multifrequency Radar System for Detecting Humans and Characterizing Human Activities for Short-Range Through-Wall and Long-Range Foliage Penetration Applications&lt;/a&gt; by Ram M. Narayanan, Sonny Smith, and Kyle A. Gallagher.  &lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2016-10-20T13:14:05.503" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10889" PostTypeId="2" ParentId="10885" CreationDate="2016-10-20T14:53:19.880" Score="1" Body="&lt;p&gt;The Basic stamp does &lt;strong&gt;not&lt;/strong&gt; have an analog input. It has a method that can be used to attempt to measure voltage, but the output won't be as good as a proper ADC. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Briefly, the Basic Stamp uses an internal RC circuit and a timer to &quot;count&quot; how long it takes to charge the pin, then converts that time constant to a voltage. &lt;a href=&quot;http://emesystems.com/BS2rct.htm&quot; rel=&quot;nofollow&quot;&gt;Here&lt;/a&gt; is an application note that describes the process in greater detail. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The method is prone to errors with noise and temperature drift, and also appears to be poor at handling slow changes in input voltage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, the point of the ADC is to get a stable reading of the Sharp sensor's output. The Arduino &lt;em&gt;does&lt;/em&gt; have an analog input pin, the Basic Stamp does not. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-10-20T14:53:19.880" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10891" PostTypeId="1" CreationDate="2016-10-20T23:01:43.053" Score="1" ViewCount="2292" Body="&lt;p&gt;I'm using ROS indigo in my project and all the nodes and visualisation (Rviz) seems to be functional when I launch the program using roslaunch. Here are the sensors used in the scooter:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Hokuyo Lidar &lt;/li&gt;&#xA;&lt;li&gt;Phidgets Encoder&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;However, when I start moving the scooter (the robot) using the joystick, the scooter will move physically, but in Rviz, the object detected by the lidar moves to the scooter, instead of the scooter moving in the map. Furthermore, the costmap obstacles will get smeared as I continue to move the scooter forward. Where could I have missed out?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are the node connections:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/lMSC6.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/lMSC6.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A screenshot of the tf tree:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ft3Gw.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ft3Gw.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT:&#xA;When I did &lt;em&gt;roswtf&lt;/em&gt;, it shows that the robot footprint is disconnected, though the rqt graph shows otherwise. Here is the log of it:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Beginning test of your ROS graph. These may take a while...&#xA;analyzing graph...&#xA;... done analyzing graph&#xA;running graph rules...&#xA;... done running graph rules&#xA;running tf checks, this will take a second...&#xA;... tf checks complete&#xA;&#xA;Online checks summary:&#xA;&#xA;Found 1 warning(s).&#xA;Warnings are things that may be just fone, but are sometimes at fault&#xA;&#xA;WARNING The following node subscriptions are unconnected:&#xA;* /rqt_gui_py_node_646:&#xA;  * /statistics&#xA;  * /tf_static&#xA;* /amcl:&#xA;  * /tf_static&#xA;* /rviz_1476945491120458509:&#xA;  * /tf_static&#xA;  * /map_updates&#xA;* /move_base&#xA;  * /tf_static&#xA;  * /move_base/TebLocalPlannerROS/obstacles&#xA;  * /move_base/cancel&#xA;* /robot_pose_publisher&#xA;  * /tf_static&#xA;&#xA;&#xA;Found 1 error(s).&#xA;&#xA;ERROR The following nodes should be connected but aren't:&#xA; * /move_base-&amp;gt;/move_base (/move_base/global_costmap/footprint)&#xA; * /move_base-&amp;gt;/move_base (/move_base/local_costmap/footprint)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Please advise on the possible ways that I can undertake to debug this issue.&lt;/p&gt;&#xA;" OwnerUserId="13436" LastEditorUserId="13436" LastEditDate="2016-10-24T01:49:16.287" LastActivityDate="2020-02-04T08:37:13.473" Title="Advise on ROS move_base costmap footprint not connected error" Tags="&lt;ros&gt;&lt;motion-planning&gt;&lt;navigation&gt;" AnswerCount="0" CommentCount="9" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10894" PostTypeId="2" ParentId="10884" CreationDate="2016-10-21T10:48:52.613" Score="1" Body="&lt;p&gt;First of all you need to understand how the lenghts and masses effect the torque load on your motors. The masses and lenghts will give you a required torque, while your motors give you the available torque. In this case understand is to write a mathematical function that realtes these terms. This can be done either in the static case or in a dynamic case. &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Static case:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Static analysis links positions and forces and there is no motion component to is. It characterises your robot while at rest. Usually writign the static equations is pretty straiht forward using geometry relations and the &lt;a href=&quot;https://en.wikipedia.org/wiki/Newton%E2%80%93Euler_equations&quot; rel=&quot;nofollow&quot;&gt;Newton-Euler&lt;/a&gt; equations for forces and torques. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this case you can identify a worst case position (most probably the streched out position of the arm, including its maximum payload) and you can see how much torque is needed to hold the arm in that position. If you have less (mechanical torque, after losses in various components) available in the joints, the arm will fall down. If you have exactly that amount available, the arm will hold, but will not be able to start moving. The larger the torque in the joints then the statially required torque, the higher acceleration can be applyed when starting to move from this position. Changing the mass or length of the linkages (these will be parameters of the static model) will change the required torque.&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;Dynamic case:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The dynamic analysis studies the relationship between torques and motion. It includes already the static analyssi (teh case with no motion). The &lt;a href=&quot;https://www.google.de/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=4&amp;amp;ved=0ahUKEwi1u8Xc2uvPAhVDXhQKHSSoBpoQFgg_MAM&amp;amp;url=http%3A%2F%2Fwww.d.umn.edu%2F~rlindek1%2FRobotics%2FClass_Matls%2FRobot%2520Dynamics%2520%2596%2520Newton-%2520Euler%2520Recursive%2520ApproachP3.ppt&amp;amp;usg=AFQjCNHseiLWfJ3McA-8FSX_rk5hPm_Mjg&amp;amp;sig2=WDn-aICcW2Zn0UX5jUfWZg&amp;amp;cad=rja&quot; rel=&quot;nofollow&quot;&gt;recursive Newton-Euler method&lt;/a&gt; can help you write the equations of the dynamic model. As before, you should identify a worst case pose (or more worst case poses for each joint, also including the maximum design payload). This is not straight forward since the worst case pose will be also dependent on the linkage lengths, masses and on the velocities and acceleration (which will be dependent on the load that the motors have). So it will be a trial and error iterative process. Depending on how far you want to go with the math, you can also write a search algorithm which finds the worst case pose. After finding the maximum required torque for each joint, you have to compare this with the maximum available mechanical torque in the joint (after losses). Safety margins should also be considered. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The above mentioned two cases, static and dynamic models do not neceserily have to be written by hand. There are tools available (both commercial and free) which can simulte the dyanmics based on the structure you implement. On very powerful tool is the Matlab Multibody toolbox (aka SimMechanics) (highly expensive). Free tools for this task are &lt;a href=&quot;http://gazebosim.org/&quot; rel=&quot;nofollow&quot;&gt;Gazebo&lt;/a&gt; or &lt;a href=&quot;https://www.cyberbotics.com/overview&quot; rel=&quot;nofollow&quot;&gt;Webots&lt;/a&gt;. You can find a more comprehensive list &lt;a href=&quot;https://www.intorobotics.com/robotics-simulation-softwares-with-3d-modeling-and-programming-support/&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2016-10-21T11:12:05.137" LastActivityDate="2016-10-21T11:12:05.137" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10898" PostTypeId="1" AcceptedAnswerId="10973" CreationDate="2016-10-21T16:31:13.897" Score="5" ViewCount="2253" Body="&lt;h2&gt;Background:&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;This question is about simulating &lt;a href=&quot;http://erlerobotics.com/docs/Simulation/Introduction.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;one ErleCopter and one ErleRover&lt;/a&gt; simultaneously for a non-commercial research. I would like to have the quadcopter follow a rover, which in turn is to be tasked with following a line. I am trying to spawn the vehicles in Gazebo and control them using MAVProxy.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;The Problem:&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Any time I try this, I run into one of two problems:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Spawning the second vehicle terminates the first MAVProxy instance, or&lt;/li&gt;&#xA;&lt;li&gt;The second vehicle spawned cannot be linked to the second instance of MAVProxy. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I'm not sure what to do about this because I am not sure if this problem is one problem or if it's composed of two sub-problems. The first problem is in spawning the robots and the second one is in controlling both independently (and obtain the state parameters of both vehicles and use that as feedback).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I believe a contributing factor to this problem is that I'm trying to do the simulation and both MAVProxy instances on one computer, a Lenovo-y50-70 is being used with Ubuntu 14.04. Two computers are not easy to obtain immediately and there are network stability issues where I am.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;The Question:&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The entire question probably reduces to &lt;strong&gt;&quot;How to link second robot spawned by rosrun to second MAVproxy instance?&quot;&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Desired Outcome:&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I would like help either getting the simulation to run as desired (two vehicles co-simulated in one virtual world with two MAVProxy instances, one linked to each vehicle), &lt;strong&gt;OR&lt;/strong&gt; official documentation somewhere that this is not possible.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;What I've Attempted:&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Initial attempts can be seen in earlier edits of this question. For clarity, that information has been removed, but again, if interested, see an earlier version of this question. Fast-forwarding to the relevant:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second robot has been spawned successfully as mentioned in &lt;a href=&quot;https://vimeo.com/190064306&quot; rel=&quot;nofollow noreferrer&quot;&gt;this video&lt;/a&gt; by using the commands mentioned below.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;cd path_to_urdf_model_files&#xA;rosrun gazebo_ros spawn_model -file rover.urdf -urdf -model rover_object&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Note: ROS Indigo is different; &lt;a href=&quot;http://wiki.ros.org/simulator_gazebo/Tutorials/StartingGazebo&quot; rel=&quot;nofollow noreferrer&quot;&gt;gazebo_ros must be used instead of gazebo_worlds&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The weird behaviour of the robot rotating about itself is probably because of MAVproxy; I have &lt;a href=&quot;http://forum.erlerobotics.com/t/mavproxy-issues-in-sitl-ros-gazebo/1744&quot; rel=&quot;nofollow noreferrer&quot;&gt;experienced this before&lt;/a&gt;. Attempt to establish separate network connections to Copter and Rover has been successful so far. The original structure is as shown below: &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;rover_circuit.launch -&gt; apm_sitl.launch -&gt; node.launch (node name:&#xA;  &quot;mavros&quot;)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The current architecture is as shown below:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;copter_circuit.launch -&gt; apm_sitl_copter.launch -&gt; node_copter.launch&#xA;  (&quot;mavros_copter&quot;)&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;rover_circuit1.launch -&gt; apm_sitl_rover.launch -&gt; node_rover.launch  (&quot;mavros_rover&quot;)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;rover_ciruit1.launch is as shown below:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;launch&amp;gt;&#xA;&#xA;  &amp;lt;include file=&quot;$(find mavros)/launch/apm_sitl_rover.launch&quot;&amp;gt;&amp;lt;/include&amp;gt;&#xA;  &amp;lt;arg name=&quot;enable_logging&quot; default=&quot;true&quot;/&amp;gt;&#xA;  &amp;lt;arg name=&quot;enable_ground_truth&quot; default=&quot;true&quot;/&amp;gt;&#xA;  &amp;lt;arg name=&quot;log_file&quot; default=&quot;rover&quot;/&amp;gt;&#xA;  &amp;lt;arg name=&quot;tf_prefix&quot; default=&quot;$(optenv ROS_NAMESPACE)&quot;/&amp;gt;&#xA;  &amp;lt;arg name=&quot;model&quot; default=&quot;$(find ardupilot_sitl_gazebo_plugin)/urdf/rover.urdf&quot;/&amp;gt;&#xA;&#xA;  &amp;lt;param name=&quot;robot_description&quot; command=&quot;&#xA;    $(find xacro)/xacro.py '$(arg model)'&#xA;    enable_logging:=$(arg enable_logging)&#xA;    enable_ground_truth:=$(arg enable_ground_truth)&#xA;    log_file:=$(arg log_file)&quot;&#xA;  /&amp;gt;&#xA;  &amp;lt;param name=&quot;tf_prefix&quot; type=&quot;string&quot; value=&quot;$(arg tf_prefix)&quot; /&amp;gt;&#xA;&#xA;  &amp;lt;node name=&quot;spawn_rover&quot; pkg=&quot;gazebo_ros&quot; type=&quot;spawn_model&quot;&#xA;    args=&quot;-param robot_description -urdf -model 'rover' &quot; respawn=&quot;false&quot; output=&quot;screen&quot;&amp;gt;&amp;lt;/node&amp;gt;&#xA;&#xA;&amp;lt;/launch&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This is the minimal launch file, and it works. I had thought of rosrun apm_sitl_rover.launch followed by rosrun rover.urdf, but I have been unable to find a suitable package which launches apm_sitl_rover.launch directly. It is easy to roslaunch a launch file that has an  method appended. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Naming issues and other network errors have been resolved. &lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Outstanding Problem Remaining:&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I'm still having issues launching and linking the second vehicle, but now it seems like I've narrowed it down such that the only problem is with UDP bind port, which is 14555 by default, and this is crashing Gazebo for the second instance because the second instance is using the same bind port.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It looks like libmavconn is getting called somehow, particularly interface.cpp which has &lt;a href=&quot;http://docs.ros.org/indigo/api/libmavconn/html/interface_8cpp_source.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;url_parse_host(bind_pair, bind_host, bind_port, &quot;0.0.0.0&quot;, 14555);&lt;/a&gt; and the udp.h included in interface.cpp has a function MAVConnUDP() which has bind_port=14555, and this has resulted in &quot;udp1: Bind address: 14555&quot; and &lt;code&gt;&quot;GCS: DeviceError:udp:bind: Address already in use&quot;&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Trying to assess the connection between sim_vehicle.sh, libmavconn, and Gazebo, I was able to figure out that sim_vehicle.sh calls mavproxy.py in one of the ending lines which in turn uses pymavlink. I have been unable to find further relationship currently.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Leading Questions / An Approach to the Solution&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;As I have a strong intuition that this is the final stage, I currently resolve to fix this by using interface_copter.cpp and interface_rover.cpp. I think, if I could get answers to the following questions, I can work out where the failure is in successfully launching and link the second (or subsequent) vehicles:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;How does sim_vehicle.sh trigger the libmavconn package and ultimately Gazebo?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Is there a &lt;a href=&quot;http://ardupilot.org/dev/_images/arducopter_sitl_ros.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;software architecture diagram&lt;/a&gt; which describes the complete structure from sim_vehicle.sh to joints and controllers?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="15014" LastEditorUserId="9720" LastEditDate="2016-11-07T15:48:22.000" LastActivityDate="2017-06-05T22:55:09.557" Title="Multiple robots in ROS Gazebo SITL with separate MAVlink/MAVproxy codes" Tags="&lt;quadcopter&gt;&lt;ros&gt;&lt;software&gt;&lt;simulation&gt;&lt;gazebo&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10900" PostTypeId="1" CreationDate="2016-10-22T04:01:51.643" Score="2" ViewCount="195" Body="&lt;p&gt;I have built a fighting bot but improvements could be made. I currently use 1 channel to switch spinners on and off and another for self righting.  The spinners cannot turn during self righting as they are against the floor so I have to switch them off with one switch and activate self righting with another to avoid the spinner motors burning out and then once self righted reverse both switch positions again.  Currently each circuit has a normally off relay (5v from the receiver controlling 24V to load), in an ideal world I would have got a relay that allows one circuit 'on' and the other 'off' and then the opposite when given the signal by the receiver e.g. when a single switch on the remote control is 'off' then circuit A is 'off' and circuit B is 'on', when the remote switch is 'on' circuit A in 'on' and circuit B is 'off' - this would free up a remote channel and also ensure the two circuits can never be closed at the same time - with me so far? anyway turns out that this type of relay does not exist for control by a remote receiver so what I am trying to achieve is the following:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/REOX0.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/REOX0.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So it's not actually a relay as that suggests one voltage controlling another so what is this illusive gizmo I seek actually called?  Can I buy one on Amazon?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm trying to avoid going down the route of IF / THEN gates on a separate PCB, the daft thing is that all I want is an electrical version of exactly what the pneumatic actuator does - when powered air goes down one hose and when off goes down another.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After looking at some of the answers - (thanks everyone) it allowed me to find this:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/RvMTO.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/RvMTO.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA; from &lt;a href=&quot;http://www.superdroidrobots.com/shop/item.aspx/dpdt-8a-relay-rc-switch/766/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.superdroidrobots.com/shop/item.aspx/dpdt-8a-relay-rc-switch/766/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="14941" LastEditorUserId="14941" LastEditDate="2016-10-27T21:33:19.267" LastActivityDate="2016-10-27T21:33:19.267" Title="What relay or other gizmo do I need to switch between two circuits?" Tags="&lt;control&gt;&lt;wireless&gt;&lt;circuit&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10901" PostTypeId="2" ParentId="10900" CreationDate="2016-10-22T08:16:09.837" Score="0" Body="&lt;p&gt;You have the circuit for energizing relay 1. In this circuit you put in series one of the output contacts of relay 2 which are not the &quot;main&quot; output contacts, just a low voltage &quot;additional&quot; contact. If relay 2 is energized the circuit to energize relay 1 will be also closed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The circuit energising relay 1 will consist of +5V in series with the additional contact of relay 2 the coil of relay 1 in series and ground.  &lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2016-10-22T08:35:49.330" LastActivityDate="2016-10-22T08:35:49.330" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10902" PostTypeId="1" CreationDate="2016-10-22T16:44:59.977" Score="4" ViewCount="338" Body="&lt;p&gt;I'm building a 2-wheel balancing robot from old parts. DC motors from an old printer, wheels from a BBQ, bodywork from an old optical drive etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The brain of the robot is a Raspberry Pi 3. I'm using an L298N motor driver to control 2x 12-35v DC motors. Balance and movement will be 'sensed' using a 10DOF L3GD20 LSM303D Gyro, Accelerometer &amp;amp; Compass board. I'm currently using an Arduino with PWM for multi speed and direction of each motor. A PID loop will keep the robot balanced.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It looks like this:&#xA;Raspberry Pi &gt; Arduino &gt; L298N &gt; Motors&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So far everything is good (don't worry I'm not going to ask &quot;Where do I start??&quot; :D)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is this: should I continue to control the sensors and motors' driver using the Arduino, having the Pi issue higher level commands to the Arduino, OR should I just let the Pi do all the leg work?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm trying to keep power consumption to a minimum but I want to keep the processing overhead of the balancing and movement away from the Pi. Additionally, I've read that an Arduino is better at this sort of work due to the fact that it has a built in clock, where a Pi doesn't. I assume the PID loop will be slowed if the device (the Pi) is working on other processing tasks like navigation and face recognition etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are my assumptions correct and which direction would guys steer towards?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your knowledge and wise words would be very much appreciated!!&lt;/p&gt;&#xA;" OwnerUserId="15078" LastEditorUserId="15078" LastEditDate="2016-10-22T17:06:35.750" LastActivityDate="2019-02-17T15:01:41.947" Title="Should I use an arduino to control my balancing robot's motors?" Tags="&lt;arduino&gt;&lt;motor&gt;&lt;raspberry-pi&gt;&lt;pwm&gt;&lt;balance&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10903" PostTypeId="2" ParentId="10900" CreationDate="2016-10-22T17:12:32.247" Score="0" Body="&lt;p&gt;I know that you do not want any complicated logic gates so I present you some MOSFET instead. With a N-Channel and a P-channel MOSFET a simple &#xA;mutual exclusion logic can be realized.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;N channel – For an N channel MOSFET, the source is connected to ground. If we want to let current flow, we can easily raise the voltage on the gate allowing current to flow. If no current is to flow, the gate pin should be grounded&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;P channel – Looking at the P channel MOSFET, the source is connected to the power rail. In order to allow current to flow the Gate needs to be pulled to ground. To stop the current flow, the gate needs to be pulled to supply voltage. &lt;a href=&quot;https://reibot.org/2011/09/06/a-beginners-guide-to-the-mosfet/&quot; rel=&quot;nofollow noreferrer&quot;&gt;More about FETs here.&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So basically one will conduct while the other won't if you tie the gates together and drive it from a common signal source. So one channel of the remote receiver drives the gates of the FETs. The schematic will be the following:&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/Wuup2.png&quot; alt=&quot;schematic&quot;&gt;&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;p&gt;There are additional Zener diodes in series with relay coils' flyback diodes. The reason is that a single flyback diode will delay the release of the relay contact, so there can be a short period when both of the relays are ON. To reduce this delay a zener diode or a resistor can be added in series with the flyback diode. Select the value of the zener or resistor to be compatible with whatever the driver can withstand.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If a resistor is used:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ R = \frac{V_{peak}}{I_{coil}}$$&#xA;$$ Power = I_{coil}^2 \times R \times dutycycle$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If a zener diode is used:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ V_Z = V_{peak} $$&#xA;$$ Power = V_Z \times I_{coil} \times dutycycle$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The fastest release time can be achieved using a zener diode. Here is a &lt;a href=&quot;http://www.falstad.com/circuit/circuitjs.html?cct=$%201%200.000005%206.450009306485578%2043%205%2050%0A172%20912%2048%20912%2016%200%206%205%205%200%200%200.5%20Relay%20Supply%20Voltage%0Af%20752%20352%20816%20352%200%201.5%200.02%0Aw%20656%20112%20656%2064%200%0Aw%20576%20112%20656%20112%200%0Aw%20752%20112%20656%20112%200%0Ar%20512%20352%20512%20432%200%2010000%0Ar%20752%20352%20752%20432%200%2010000%0Aw%20912%20288%20912%20176%200%0Aw%20912%20176%20912%2048%200%0AL%20656%2064%20656%2032%200%200%20false%205%200%0A172%20944%2048%20944%2016%200%206%2024%2024%200%200%200.5%20Load%20Supply%20Voltage%0A178%20944%20320%20944%20416%200%201%200.2%204.999998999170298e-8%200.05%201000000%200.02%2020%0Aw%20944%20272%20944%2048%200%0A178%20704%20320%20704%20416%200%201%200.2%200.0563283975725781%200.05%201000000%200.02%2020%0Aw%20704%20272%20704%20320%200%0Aw%20704%20272%20944%20272%200%0Aw%20944%20272%20944%20320%200%0Aw%20576%20320%20608%20320%200%0Ad%20816%20288%20864%20288%201%200.805904783%0Aw%20576%20288%20576%20320%200%0Aw%20608%20320%20656%20320%200%0Aw%20896%20320%20816%20320%200%0Ad%20576%20288%20624%20288%201%200.805904783%0Aw%20816%20320%20816%20336%200%0Aw%20752%20352%20752%20112%200%0Ar%20688%20480%20688%20592%200%20100%0Ar%20928%20480%20928%20592%200%20100%0Ag%20688%20592%20688%20624%200%0A207%20688%20480%20608%20512%200%20Pneumatic%20actuator%0Aw%20688%20416%20688%20480%200%0A207%20928%20480%20992%20512%200%20Motor%0Aw%20928%20416%20928%20480%200%0Aw%20816%20368%20816%20432%200%0Aw%20816%20288%20816%20320%200%0Aw%20912%20288%20912%20320%200%0Af%20512%20352%20576%20352%201%201.5%200.02%0Az%20672%20288%20624%20288%201%200.805904783%206.7%0Az%20912%20288%20864%20288%201%200.805904783%205.6%0Aw%20816%20432%20752%20432%200%0Aw%20752%20432%20752%20592%200%0Aw%20752%20592%20688%20592%200%0Aw%20752%20592%20928%20592%200%0Aw%20672%20320%20672%20288%200%0Aw%20672%20288%20672%20176%200%0Aw%20672%20176%20912%20176%200%0Aw%20576%20368%20576%20432%200%0Aw%20576%20432%20512%20432%200%0Aw%20512%20432%20512%20592%200%0Aw%20512%20592%20688%20592%200%0Aw%20576%20336%20576%20320%200%0Aw%20512%20352%20512%20112%200%0Aw%20512%20112%20576%20112%200%0Ao%2029%2064%200%20291%2040%200.4%200%20-1%0Ao%2031%2064%200%20291%2040%200.4%201%20-1%0A&quot; rel=&quot;nofollow noreferrer&quot;&gt;simulation&lt;/a&gt; of the circuit. You can check the release times if you remove the zeners.&lt;/p&gt;&#xA;" OwnerUserId="10596" LastActivityDate="2016-10-22T17:12:32.247" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10904" PostTypeId="1" AcceptedAnswerId="10908" CreationDate="2016-10-22T17:45:29.487" Score="0" ViewCount="136" Body="&lt;p&gt;I just finished assembling my new 250 quad which is equipped with an &lt;a href=&quot;http://www.banggood.com/Upgrade-NAZE32-F3-Flight-Controller-Acro-6-DOF-Deluxe-10-DOF-for-Multirotor-Racing-p-1010232.html?rmmds=search&quot; rel=&quot;nofollow&quot;&gt;SP F3 Flight controller&lt;/a&gt;.&#xA;I think that I kinda bricked my FC in the first 10 minutes of configuring it:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I first plugged it in, installed a few drivers and opened cleanflight&#xA;Cleanflight recognized it, no problem for now.&#xA;I then tried to test the RX channels and discovered that apart from the 4 AUX channels, none of them worked, I swapped the plugs on the transmitter and saw that the RX was OK, it's the FC that didn't show anything on the first 4 channels&#xA;After reading some stuff about upgrading the firmware I did something completely wrong, I followed the first 10 seconds of this &lt;a href=&quot;https://www.youtube.com/watch?v=pbCWg1605ag&quot; rel=&quot;nofollow&quot;&gt;guide&lt;/a&gt;, using baseflight... though my board isn't baseflight it's cleanflight, and I did the mistake of clicking the &quot;Flash firmware&quot; button which then made it impossible to use it and flash it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After some trial and error I finally had a problem where cleanflight tells me that it cannot flash the firmware on it because &quot;Failed to open serial port&quot;&#xA;I used Process Explorer to check if any program was using and holding the COM3 port but no&#xA;No Program was using it.&#xA;Thank you for reading this very long and probably stupid question, do you have anything that I can try?&lt;/p&gt;&#xA;" OwnerUserId="15082" LastEditorUserId="15082" LastEditDate="2016-10-23T11:34:51.903" LastActivityDate="2017-09-18T17:05:27.157" Title="Cleanflight : 4 first channels not working and &quot;Failed to open serial port&quot;" Tags="&lt;quadcopter&gt;&lt;serial&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10905" PostTypeId="2" ParentId="7944" CreationDate="2016-10-22T18:11:59.053" Score="1" Body="&lt;p&gt;The website that you have used seems to be down, however looking at the specs announced on banggood, it looks compatible.&#xA;You would need some 8*4 props and a 3S battery, I'd advise getting a 3000mAh one that can handle full power (200W per motor so 800W total for a 12V*3Ah battery=&gt;36Wh so that's 800/36=22C) so a 3S 3000mAh 25C constant LiPo would be perfect to achieve the performance needed&#xA;Also for the transmitter and the receiver what are you going to use, because telemetry won't pilot the quadcopter&#xA;Btw, telemetry won't be of any use for your first quadcopter, same goes for the GPS, you'll first pilot in stabilized and then accro and if you are willing to do some stabilized photography and video, you can add a GPS for the quad to fly by GPS (that means that it will move geographically according to your commands and it's GPS position)&#xA;Also if you are kinda new on quadcopters I'd advise you to get a KK2.1.5 as a flight controller to begin with, the good thing about it is that you can change your PID, channel settings on the go, though it doesn't support GPS and a lot of other features that multiwii's have&lt;/p&gt;&#xA;" OwnerUserId="15082" LastActivityDate="2016-10-22T18:11:59.053" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10907" PostTypeId="2" ParentId="10717" CreationDate="2016-10-23T02:57:40.273" Score="2" Body="&lt;p&gt;You can use the last value $u_{t-1}$ if the time step is not too big ($\delta t$ is small).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or, you can keep track of $u$ some time steps in the past, e.g. ten of them and extrapolate $u_t$ when you lose it. You can use a line equation for that:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;y = mx + b&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can use a &lt;a href=&quot;https://en.wikipedia.org/wiki/Simple_linear_regression#Fitting_the_regression_line&quot; rel=&quot;nofollow&quot;&gt;simple linear regression&lt;/a&gt; to find the values of $m$ and $b$.&lt;/p&gt;&#xA;" OwnerUserId="11648" LastActivityDate="2016-10-23T02:57:40.273" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10908" PostTypeId="2" ParentId="10904" CreationDate="2016-10-23T11:33:17.900" Score="0" Body="&lt;p&gt;The com issue has been fixed by uninstalling all serial-&gt;COM drivers and programs that could've been interfering?? Dunno, some more Windows 10 magic I guess, but now remains he issue of the 4 first channels not working&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I then installed the latest cleanflight firmware by following &lt;a href=&quot;https://www.youtube.com/watch?v=NVl1OHUouDQ&quot; rel=&quot;nofollow&quot;&gt;this guide&lt;/a&gt;, flashed without any problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It indeed fixed the channel issue and all I had to do next was to change the PID settings and reversed the yaw (I installed CCW motors where there should be CW) using &quot;set yaw_direction = -1&quot; on the CLI&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's now fully functional&lt;/p&gt;&#xA;" OwnerUserId="15082" LastActivityDate="2016-10-23T11:33:17.900" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10909" PostTypeId="2" ParentId="10843" CreationDate="2016-10-23T14:21:48.137" Score="1" Body="&lt;p&gt;You can try putting your series of commands (or keyboard entries) as an array. After which, you can assign a &lt;em&gt;for&lt;/em&gt; loop for this button, which will then run through the array of instructions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The array might look something like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;cmds = ['self.callbackKeyRight', 'self.callbackKeyDown',  'self.callbackKeyDown']&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and the &lt;em&gt;for loop&lt;/em&gt; code to run the array might look something like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; if event.type == '2': # KeyPress; need to figure out how to get constant&#xA;        if k == 'Z':   # Set some key here&#xA;            for i in range(len(cmds)):&#xA;                cmds[i] = True&#xA;                motionChange = True&#xA;                print 'Cmd number: ' + i&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="13436" LastActivityDate="2016-10-23T14:21:48.137" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="10911" PostTypeId="2" ParentId="10902" CreationDate="2016-10-24T08:13:29.657" Score="4" Body="&lt;p&gt;If you want to have a good balancing, PID loop timing is very important. Standard Raspberry OS, like Raspbian can't guarantee you any precise timing, so once your loop period may be 10ms, once it can be 1s, resulting in a robot to fall. You can try to run some real time operating system on RPi, like FreeRTOS, that would have preemptive capabilities (so a process with high priority, like PID, would interrupt other, lower priority processes). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That being said, I think that using an Arduino is a very good choice, as it nicely separates high level processing, from low level control tasks.&lt;/p&gt;&#xA;" OwnerUserId="7360" LastActivityDate="2016-10-24T08:13:29.657" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10912" PostTypeId="2" ParentId="10900" CreationDate="2016-10-24T16:24:12.493" Score="2" Body="&lt;p&gt;Very simply, you can use a single pole, double throw relay.  This has two outputs:  one is normally open and the other is normally closed.  Both will not be energized concurrently.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT (based on Chuck's comment):&#xA;In some applications, in which turn-on and turn-off timing is critical, you need to decide between a &quot;make before break&quot; and a &quot;break before make&quot; type of SPDT relay.   With your 'bot application this timing difference shouldn't be critical, but if you want to be sure that one action occurs before the other, you can enforce that with proper selection of the relay.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastEditorUserId="11125" LastEditDate="2016-10-25T01:12:56.797" LastActivityDate="2016-10-25T01:12:56.797" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="10914" PostTypeId="1" CreationDate="2016-10-25T00:01:56.737" Score="5" ViewCount="1068" Body="&lt;p&gt;My task:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a task where I am asked to track parcels(carton boxes) of different dimensions moving on a conveyor. I am using Asus Xtion pro camera mounted on top of a conveyor in any inclined angle. I am looking for a model free object tracker that will detect boxes in the scene, track them &amp;amp; gives their 6 DOF? My target object is just a box and I want to eliminate all other things in the scene.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My approach:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;I do Point cloud pre-processing like down-sampling, pass through filtering and segmentation. All these should give me a final point cloud containing only the objects on the conveyor.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I planned to make the &quot;z&quot; values in each point(depth value) as zero, thereby making the point cloud of the box to be flat on the ground.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I planned to transfer the view of the camera from any inclined position to a top down view so that I can view any number of carton boxes moving on the conveyor from a top down view. I feel the top down view will prevent perspective viewing problems&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The process flow of step 2 and 3 is shown below.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/L5Ile.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/L5Ile.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;4&quot;&gt;&#xA;&lt;li&gt;After the top down view of the point cloud is achieved, I need to convert the 3rd point cloud to 2nd image, so that I can perform object tracking with so many OpenCV based tracking algorithms available.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;A Sample point cloud is shown below in different views&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Original View from camera:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/qrifj.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qrifj.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Point Cloud View 1:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/yuW82.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/yuW82.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Point Cloud View 2:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/4UUJr.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4UUJr.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Point Cloud Target/Desired View for converting to 2nd: (The box is the target. All the ground plane and unnecessary points would be eliminated)&#xA;&lt;a href=&quot;https://i.stack.imgur.com/m2koi.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/m2koi.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is my approach correct? How will I achieve steps 2,3 and 4?&lt;/p&gt;&#xA;" OwnerUserId="14827" LastEditorUserId="1021" LastEditDate="2016-10-25T19:07:25.503" LastActivityDate="2018-08-03T11:24:58.850" Title="Transforming Point Cloud to get Top Down Image" Tags="&lt;ros&gt;&lt;computer-vision&gt;&lt;machine-learning&gt;&lt;opencv&gt;&lt;point-cloud&gt;" AnswerCount="2" CommentCount="8" ClosedDate="2018-08-03T12:56:35.567" ContentLicense="CC BY-SA 3.0" />
  <row Id="10915" PostTypeId="1" AcceptedAnswerId="10916" CreationDate="2016-10-25T06:00:54.043" Score="4" ViewCount="133" Body="&lt;p&gt;I've recently started working on some localization algorithms like &lt;em&gt;probabilistic road map&lt;/em&gt; and &lt;em&gt;SLAM&lt;/em&gt; algorithms. What I'm looking for is a software that would help me in simulation for such algorithms. I started with pythons &lt;code&gt;graphics.py&lt;/code&gt; and have now started working with Gazebo and ROS, but I've found it complex to use. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any similar freeware simulation software that is easy to setup and work with, thus allowing me to reduce my time stressing over the simulation part and working more on the algorithms?&lt;/p&gt;&#xA;" OwnerUserId="14854" LastEditorUserId="37" LastEditDate="2017-05-18T15:55:56.087" LastActivityDate="2017-05-18T15:55:56.087" Title="Suggestion for relevant non-complex simulator" Tags="&lt;slam&gt;&lt;ros&gt;&lt;simulation&gt;&lt;simulator&gt;&lt;gazebo&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10916" PostTypeId="2" ParentId="10915" CreationDate="2016-10-25T15:34:33.513" Score="4" Body="&lt;p&gt;just use matlab or and python with a set of fixed features in space represented as points. Don't do any vision processing. At this point any vision processing would be overkill. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;you are making this way too complex. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;the measurements for your slam can be angles to features. create a set of 30 features randomly populating a 20m by 20m square. make your view point move in a circle around the square. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;this is enough to get started with slam.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;if you only rely on other people's packages and modules without going through the trouble of building your own you will never really get a sense of how these things work and break. &lt;/p&gt;&#xA;" OwnerUserId="8842" LastEditorUserId="8842" LastEditDate="2016-10-25T20:23:07.240" LastActivityDate="2016-10-25T20:23:07.240" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="10917" PostTypeId="1" CreationDate="2016-10-25T17:00:50.953" Score="0" ViewCount="388" Body="&lt;p&gt;There are high quality software robotics simulators like Gazebo available today. What is the difference between a pure software simulation and a real world (say RC) scale model simulation? Is it possible to skip the scale model simulation and only do SW simulation and then build a full scale final product right away? Does scale model simulation have any advantages over say Gazebo?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't have any direct experience with developing a product in robotics but if I try to think then I guess the SW simulation may primarily be used to develop the very basics of a product and then scale model simulation may take over or complement SW simulation. My personal view is that any (even small scale) real world simulation/testing is beneficial because the features of real world (noise, dust etc.) can hardly be simulated in SW. Is this true? Also small scale model will be many times cheaper than full scale one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am considering an autonomous car (self-driving) as one of the possible products resulting from such simulation. I &lt;a href=&quot;https://robotics.stackexchange.com/questions/7729/is-it-possible-to-simulate-vision-perception-in-gazebo-or-other-simulators&quot;&gt;read&lt;/a&gt; that vision is one of the weak parts of SW simulators. I can think that sensing in general may be a weak part of SW simulators since any real sensor is imperfect and noisy which Gazebo may not take into account...&lt;/p&gt;&#xA;" OwnerUserId="1021" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2016-10-26T03:16:16.050" Title="Software simulation vs. real world scale model simulation" Tags="&lt;simulation&gt;&lt;gazebo&gt;&lt;autonomous-car&gt;&lt;self-driving&gt;&lt;scale-model&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2016-10-27T14:11:36.103" ContentLicense="CC BY-SA 3.0" />
  <row Id="10921" PostTypeId="5" CreationDate="2016-10-26T01:09:31.137" Score="0" Body="&lt;p&gt;A robotic simulator can be as simple as a few matlab equations, or as elaborate as a photo-realistic 3D world with a physics engine.  The type you use largely depends on your needs.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Robotics_simulator&quot; rel=&quot;nofollow&quot;&gt;Wikipedia&lt;/a&gt; does a pretty good job describing the features of a few of the main simulators.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But here are some others:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://playerstage.sourceforge.net/&quot; rel=&quot;nofollow&quot;&gt;Player Project&lt;/a&gt;  (2D simulator - Stage - 3D simulator - Gazebo - and control interface - open source, part of the ROS project)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://morse.openrobots.org&quot; rel=&quot;nofollow&quot;&gt;MORSE&lt;/a&gt; (general purpose indoor/outdoor 3D simulator)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.microsoft.com/robotics/&quot; rel=&quot;nofollow&quot;&gt;Microsoft Robotics Studio&lt;/a&gt; (3D simulator with physics engine + control interface)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.theodorstorm.se/index/2866.html&quot; rel=&quot;nofollow&quot;&gt;KiKS&lt;/a&gt; (Matlab plugin, only for Khepera + control interface) &lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.mobotsoft.com/?page_id=9&quot; rel=&quot;nofollow&quot;&gt;MobotSim&lt;/a&gt; (for point like robots, more of algorithm implementation ) &lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Karel_(programming_language)&quot; rel=&quot;nofollow&quot;&gt;Karel&lt;/a&gt; (Pascal/Logo like)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.peekabot.org/&quot; rel=&quot;nofollow&quot;&gt;Peekabot&lt;/a&gt; (More of a visualization tool)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.mrpt.org/&quot; rel=&quot;nofollow&quot;&gt;MRPT&lt;/a&gt; (Mobile Robot Programming Toolkit)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://carmen.sourceforge.net/&quot; rel=&quot;nofollow&quot;&gt;Carmen&lt;/a&gt; (Robot Navigation Toolkit)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.cyberbotics.com/index.php&quot; rel=&quot;nofollow&quot;&gt;Webots&lt;/a&gt; (closed source, 3D simulation) &lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://simbad.sourceforge.net/&quot; rel=&quot;nofollow&quot;&gt;Simbad&lt;/a&gt; (2D/3D simulator in Java and Jython)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://robocode.sourceforge.net/&quot; rel=&quot;nofollow&quot;&gt;Robocode&lt;/a&gt; (A Java/ .NET suit)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://rossum.sourceforge.net/sim.html&quot; rel=&quot;nofollow&quot;&gt;Rossum's Playhouse&lt;/a&gt; (C/C++ suit)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.coppeliarobotics.com/&quot; rel=&quot;nofollow&quot;&gt;V-REP&lt;/a&gt; (3D, source available, Lua scripting, APIs for C/C++, Python, Java, Matlab, URBI, 2 physics engines, full kinematic solver, etc.)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://simspark.sourceforge.net/wiki/index.php/Main_Page&quot; rel=&quot;nofollow&quot;&gt;Simspark&lt;/a&gt; (RoboCup Soccer Simulation)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://openrave.org/docs/latest_stable/&quot; rel=&quot;nofollow&quot;&gt;OpenRAVE&lt;/a&gt; (3D simulator, kinematics engine, planners, etc)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.ode.org/&quot; rel=&quot;nofollow&quot;&gt;ODE&lt;/a&gt; (Physics simulator, many other simulators use this library)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.openrobots.org/wiki/morse/&quot; rel=&quot;nofollow&quot;&gt;MORSE&lt;/a&gt; (Modular OpenRobots Simulation Engine)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.openrtp.jp/openhrp3/en/about.html&quot; rel=&quot;nofollow&quot;&gt;OpenHRP&lt;/a&gt;: Open source, tons of libraries written in C++ included for forward dynamics simulations and visualizations as well. Its a bit of a pain to get up and running though, quite a few dependencies that are very sensitive to the versions. &lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.robotran.be/&quot; rel=&quot;nofollow&quot;&gt;Robotran&lt;/a&gt;: Free for personal use and/or research uses. Operates primarily in the Matlab/Simulink environment. Very easy to get models up and running. &lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.maplesoft.com/products/maplesim/index.aspx&quot; rel=&quot;nofollow&quot;&gt;MapleSim&lt;/a&gt;: Commercial software but useful for very sophisticated modeling. Exports efficient symbolic multibody dynamics for simulation/visualization in Matlab/Simulink as well. &lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.spiderland.org/s/&quot; rel=&quot;nofollow&quot;&gt;Breve&lt;/a&gt; (No longer maintained, 3D simulator for artificial life using Python)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Some more generic platforms/middlewares also offer simulation tools:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.ros.org/wiki/&quot; rel=&quot;nofollow&quot;&gt;ROS&lt;/a&gt;  &lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/URBI&quot; rel=&quot;nofollow&quot;&gt;URBI&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://eris.liralab.it/yarp&quot; rel=&quot;nofollow&quot;&gt;YARP&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.orocos.org/&quot; rel=&quot;nofollow&quot;&gt;OROCOS&lt;/a&gt; (ORCOS (and its distant cousin Orca, orca-robotics.sourceforge.net) aren't simulators either. To the best of my knowledge ORCOS is a framework focused on real-time control, typically on a single computer, whereas Orca puts an emphasis on distributed components (with the obligatory own set of common robotics interfaces, of course). YARP (eris.liralab.it/yarp) is another framework similar in spirit to Orca, but focused more on vision. It's also not a robotics simulator, though.)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Some references on robot simulators:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.springerlink.com/content/v57531724h624440/&quot; rel=&quot;nofollow&quot;&gt;Development environments for autonomous mobile robots: A survey&lt;/a&gt; &lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.ibm.com/developerworks/linux/library/l-robotools/?ca=dgr-lnxw09OSRoboticToolkits&quot; rel=&quot;nofollow&quot;&gt;Open source robotics toolkits&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.linuxfordevices.com/c/a/Linux-For-Devices-Articles/Updated-review-of-robotics-software-platforms/&quot; rel=&quot;nofollow&quot;&gt;Updated review of robotics software platforms&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://homepages.laas.fr/slemaign/wiki/doku.php?id=simulateursexistants&quot; rel=&quot;nofollow&quot;&gt;Existing Simulators - webpage@laas.fr&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.robobyte.net/drupal/content/open-robotics-software-resources&quot; rel=&quot;nofollow&quot;&gt;List at Asaf Matan's website&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;NOTE: The majority of this wiki page pulled from this question: &lt;a href=&quot;http://stackoverflow.com/questions/2533321/robotics-simulator&quot;&gt;http://stackoverflow.com/questions/2533321/robotics-simulator&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="110" LastEditorUserId="110" LastEditDate="2016-10-27T14:07:09.943" LastActivityDate="2016-10-27T14:07:09.943" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10922" PostTypeId="4" CreationDate="2016-10-26T01:09:31.137" Score="0" Body="A computer environment where robot parameters can be tested without the need for a physical robot." OwnerUserId="110" LastEditorUserId="110" LastEditDate="2016-10-27T14:05:38.307" LastActivityDate="2016-10-27T14:05:38.307" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10923" PostTypeId="1" AcceptedAnswerId="10926" CreationDate="2016-10-26T03:01:39.507" Score="1" ViewCount="3765" Body="&lt;p&gt;I'm trying to use &lt;a href=&quot;http://www.orientalmotor.com/support/motor-sizing.html&quot; rel=&quot;nofollow&quot;&gt;motor-sizing&lt;/a&gt; tool developed by oriental motor to choose good servo motor for my cnc&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The tool requires breakaway torque of my screw as input, I searched online but I got people measuring it using wrench.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm working on simulating the machine before I buy anything so I don't have the screw to test anything on i.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://store.fut-electronics.com/collections/lead-screw/products/lead-screw-30-cm&quot; rel=&quot;nofollow&quot;&gt;This&lt;/a&gt; is the screw I want to use and all the specs are available in the link, I need to calculate the breakaway torque mathematically so is there any way?&lt;/p&gt;&#xA;" OwnerUserId="14985" LastActivityDate="2020-08-22T23:05:56.763" Title="Calculating screw breakaway torque" Tags="&lt;servomotor&gt;&lt;torque&gt;&lt;cnc&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10924" PostTypeId="2" ParentId="10917" CreationDate="2016-10-26T03:16:16.050" Score="1" Body="&lt;p&gt;First Simulators available like Gazebo, Yes there are many simulators, You can check v-rep (free) or whebots or matlab (non-free) for example.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the difference between a pure software simulation and a real world (say RC) scale model simulation? The pure simulation don't count noise and non-accurate parameters you use&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example when you specify weight, torque or any other specs in the simulation you can't be sure all those specs are exactly true in real world.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it possible to skip the scale model simulation and only do SW simulation and then build a full scale final product right away? If you don't need to simulate electronic circuits, sensors and control system, In other words you want to simulate the mechanism only, Yes, Else no.&lt;/p&gt;&#xA;" OwnerUserId="14985" LastActivityDate="2016-10-26T03:16:16.050" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10925" PostTypeId="2" ParentId="7997" CreationDate="2016-10-26T18:41:32.983" Score="1" Body="&lt;p&gt;I am looking into &lt;a href=&quot;http://ams.com/eng/Magnetic-Encoders/AS5048&quot; rel=&quot;nofollow&quot;&gt;this type of absolute position encoder&lt;/a&gt;.&#xA;They were used in the NAO robot.&#xA;They are small, accurate and typically under $10 USD.&lt;/p&gt;&#xA;" OwnerUserId="15110" LastEditorUserId="10596" LastEditDate="2016-10-27T14:07:53.787" LastActivityDate="2016-10-27T14:07:53.787" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10926" PostTypeId="2" ParentId="10923" CreationDate="2016-10-26T20:08:51.583" Score="1" Body="&lt;p&gt;You can approximate the breakaway torque by considering static friction only. From the static friction coefficient of the lead screw (by knowing the maximum load on the spindle, coming from the application) you can calculate the static friction torque of the nut on the lead screw.&lt;/p&gt;&#xA;&lt;p&gt;You should do the same with all linear guides and/or bearings that you have and sum them up. That will be your breakaway torque.&lt;/p&gt;&#xA;&lt;p&gt;For the lead screw: F = c*N where F is the static friction force, c is the static friction constant and N is the normal force. In this case you have to convert the Force to Torque Torque = Force x Lead /2pi. Or the lead screw manufacturer might give directly the constant which links static friction constant to torque.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="9176" LastEditDate="2020-08-22T23:05:56.763" LastActivityDate="2020-08-22T23:05:56.763" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="10927" PostTypeId="2" ParentId="10800" CreationDate="2016-10-26T20:50:01.337" Score="1" Body="&lt;p&gt;i suggest you take a look at Tones' answer : &lt;a href=&quot;http://answers.ros.org/question/210875/arduino-rosserial-unable-to-sync-with-device/?answer=237868#post-id-237868&quot; rel=&quot;nofollow&quot;&gt;http://answers.ros.org/question/210875/arduino-rosserial-unable-to-sync-with-device/?answer=237868#post-id-237868&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;i'm using the second workaround : &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Start the serial_node with baud rate 0, exit and restart the serial node with the correct baud rate. You have to repeat this every time the error occurs.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="15112" LastActivityDate="2016-10-26T20:50:01.337" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10929" PostTypeId="1" CreationDate="2016-10-27T08:14:28.063" Score="1" ViewCount="68" Body="&lt;p&gt;I'm working on a Kalman filter for estimating the position of a point in 3D space. I know that I can measure its 3D position directly with a variance of about 2 mm (in other words: the variance of the norm of the measured x, y, z vector is about 2 mm).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd like to fill my measurement noise covariance matrix based on this, so my question is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How does this relate to the variance of the individual x, y, z measurements? I'm looking for three equal variances, assuming independency. &lt;/p&gt;&#xA;" OwnerUserId="15116" LastEditorUserId="10596" LastEditDate="2016-10-27T14:04:21.440" LastActivityDate="2016-10-27T14:49:15.097" Title="Kalman filter: 3D measurement error to individiual components" Tags="&lt;kalman-filter&gt;&lt;noise&gt;&lt;precise-positioning&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10932" PostTypeId="1" AcceptedAnswerId="10936" CreationDate="2016-10-27T14:44:19.593" Score="0" ViewCount="405" Body="&lt;p&gt;I'm trying to develop a platoon leader follower formation for two robots in Matlab. The paper I'm trying to follow is &lt;a href=&quot;http://ieeexplore.ieee.org/document/6347812/?reload=true&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/To8A0.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/To8A0.jpg&quot; alt=&quot;image from the paper&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've got next code, where I want follower robot to follow the leader robot's path, just in a very simple way, no kinematics. But I cannot get it. Does anybody know which is my error?&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;x1=linspace(0,10,100); //x1 and y1 represent the leader's path&#xA;y1=sin(x1);&#xA;plot(x1(1:100),y1(1:100));&#xA;hold on;&#xA;&#xA;x2=zeros(1,100);&#xA;y2=zeros(1,100);&#xA;&#xA;x2(1)=-5; //x2, y2 represent the follower's position&#xA;x2(2)=-4;&#xA;landa=0.1; //represents the euclidean distance between robots&#xA;&#xA;theta_leader(2)=atan((y1(2)-y1(1))/(x1(2)-x1(1)));&#xA;theta_follower(2)=atan((y2(2)-y2(1))/(x2(2)-x2(1)));&#xA;alfa(2)=atan((y1(2)-y2(2))/(x1(2)-x2(2)))-theta_follower(2);&#xA;phi(2)=pi-(theta_leader(2) - alfa(2) - theta_follower(2));&#xA;&#xA;for i=3:100&#xA;     landa(i)=0.1;&#xA;      x2(i)=x1(i)*cos(theta_leader(i-1))-landa(i)*cos(alfa(i-1)+theta_follower(i-1));&#xA;      y2(i)=y1(i)*sin(theta_leader(i-1))-landa(i)*sin(alfa(i-1)+theta_follower(i-1));&#xA;&#xA;      theta_leader(i)=atan((y1(i)-y1(i-1))/(x1(i)-x1(i-1)));&#xA;&#xA;      alfa(i)=atan((y1(i)-y2(i))/(x1(i)-x2(i)))-theta_follower(i-1);&#xA;      phi(i)=pi-(theta_leader(i) - alfa(i) - theta_follower(i-1));&#xA;      theta_follower(i)=phi(i)-alfa(i)+theta_leader(i)-3.1415;&#xA;  end&#xA;&#xA;  plot(x2,y2,'or');&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="10539" LastEditorUserId="15160" LastEditDate="2018-08-01T22:25:17.863" LastActivityDate="2018-08-01T22:25:17.863" Title="Platooning leader follower code" Tags="&lt;matlab&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10933" PostTypeId="2" ParentId="10929" CreationDate="2016-10-27T14:49:15.097" Score="1" Body="&lt;p&gt;Take a bunch of measurements of your system while states are static and compute the noise matrix yourself. As long as recording measurements is relatively straightforward this should be a painless process. It will also verify that your measurements are as accurate as you believe. &lt;/p&gt;&#xA;" OwnerUserId="8842" LastActivityDate="2016-10-27T14:49:15.097" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10936" PostTypeId="2" ParentId="10932" CreationDate="2016-10-27T19:08:53.363" Score="2" Body="&lt;p&gt;I don't have access to the article, so I have to guess about the expected behavior. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking at your code, the first thing I did was to change all of your &lt;code&gt;atan&lt;/code&gt; functions to &lt;code&gt;atan2&lt;/code&gt; because atan doesn't work correctly in all quadrants. &lt;strong&gt;Never use atan&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That didn't fix it. So the second thing I did was to change how you calculate the follower heading (theta_follower) from the way it was calculated in the loop (which seems to be based on the leader's heading) to the way it was calculated the first time, which is based on the difference in the current position and previous position. Still no dice. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, then I was trying to figure out how else the follower's position is determined and I noticed it's not based on the leader's position. It's based on the leader's position times the sine/cosine of the leader's heading. I don't know why the sine/cosine of the leader's heading was included in the calculation, but I removed it. And then it worked. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, the only thing I'm not sure about is whether the follower's heading is supposed to be the way you have it in the loop or the way you have it the first time. That is, I can't tell if you want the follower's heading to be &lt;strong&gt;what it actually is&lt;/strong&gt; or if you want it to be &lt;strong&gt;based on the leader's heading&lt;/strong&gt;. The first time you calculate the heading, you calculated it to be the actual heading. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you leave the theta_follower code in the loop the way you have it, then the follower's heading is set to be whatever the leader's heading is &lt;strong&gt;and the follower can never catch the leader&lt;/strong&gt;. The follower's path is offset from the leader. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you set the theta_follower code to be the actual heading, then the follower's path looks &quot;messier&quot;, but it is actually tracking the path of the leader. It overshoots one side, overshoots the other, then back-and-forth oscillating &lt;strong&gt;about the leader's path&lt;/strong&gt;. I think this is the behavior you want, because behavior like this would have the follower on the same road as the leader. The way it was written, the leader would be on the road and the follower would (smoothly) drive on the sidewalk because it can't course-correct to the same path. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's the code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;x1=linspace(0,10,100); %x1 and y1 represent the leader's path&#xA;y1=sin(x1);&#xA;plot(x1(1:100),y1(1:100));&#xA;hold on;&#xA;&#xA;x2=zeros(1,100);&#xA;y2=zeros(1,100);&#xA;&#xA;x2(1)=-5; %x2, y2 represent the follower's position&#xA;x2(2)=-4;&#xA;landa=0.1; %represents the euclidean distance between robots&#xA;&#xA;%-------&#xA;% Moved from atan to atan2&#xA;%-------&#xA;%theta_leader(2)=atan((y1(2)-y1(1))/(x1(2)-x1(1)));&#xA;%theta_follower(2)=atan((y2(2)-y2(1))/(x2(2)-x2(1)));&#xA;%alfa(2)=atan((y1(2)-y2(2))/(x1(2)-x2(2)))-theta_follower(2);&#xA;theta_leader(2)=atan2((y1(2)-y1(1)),(x1(2)-x1(1)));&#xA;theta_follower(2)=atan2((y2(2)-y2(1)),(x2(2)-x2(1)));&#xA;alfa(2)=atan2((y1(2)-y2(2)),(x1(2)-x2(2)))-theta_follower(2);&#xA;&#xA;phi(2)=pi-(theta_leader(2) - alfa(2) - theta_follower(2));&#xA;&#xA;for i=3:100&#xA;    landa(i)=0.1;&#xA;&#xA;    %-------&#xA;    % THIS APPEARS TO HAVE BEEN THE PROBLEM&#xA;    %-------&#xA;    %x2(i)=x1(i)*cos(theta_leader(i-1))-landa(i)*cos(alfa(i-1)+theta_follower(i-1));&#xA;    %y2(i)=y1(i)*sin(theta_leader(i-1))-landa(i)*sin(alfa(i-1)+theta_follower(i-1));&#xA;    x2(i)=x1(i)-landa(i)*cos(alfa(i-1)+theta_follower(i-1));&#xA;    y2(i)=y1(i)-landa(i)*sin(alfa(i-1)+theta_follower(i-1));&#xA;&#xA;    %-------&#xA;    % Moved from atan to atan2&#xA;    %-------&#xA;    %theta_leader(i)=atan((y1(i)-y1(i-1))/(x1(i)-x1(i-1)));&#xA;    theta_leader(i)=atan2((y1(i)-y1(i-1)),(x1(i)-x1(i-1)));&#xA;    %alfa(i)=atan((y1(i)-y2(i))/(x1(i)-x2(i)))-theta_follower(i-1);&#xA;    alfa(i)=atan2((y1(i)-y2(i)),(x1(i)-x2(i)))-theta_follower(i-1);&#xA;&#xA;    phi(i)=pi-(theta_leader(i) - alfa(i) - theta_follower(i-1));&#xA;&#xA;    %--------&#xA;    % Questionable code here&#xA;    %--------&#xA;    theta_follower(i)=phi(i)-alfa(i)+theta_leader(i)-3.1415;  % Side comment - you add pi and then subtract it for some reason.&#xA;    %theta_follower(i)=atan2((y2(i)-y2(i-1)),(x2(i)-x2(i-1)));&#xA;&#xA;    %--------&#xA;    % Moved plot inside the loop to watch it for more intuition regarding&#xA;    % what's happening.&#xA;    %--------&#xA;    plot(x2(i),y2(i),'or');&#xA;    pause(0.1)&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;h2&gt;:EDIT:&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The authors of the paper don't include the code they used to generate any of the plots. Further, it looks like implementing the block diagram they provided doesn't work either. They do state that Equation 8 is used by referencing figure 5, which means that they have, in fact, incorrectly included the sine/cosine terms. The heading of the leader does not at all affect the position of the follower. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, I tried implementing their block diagram after making that change and I believe it works. You skipped quite a bit in your implementation, including finding the derivative of position and heading and then performing the numeric integration. See the revised code below (the earlier code above should not be used, but I'll leave it for posterity).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note the value &lt;code&gt;k&lt;/code&gt; is used, as described in the paper, as a control gain to decide how well the follower tracks the leader. Play around with it to see how well the follower does or does not track the leader. Also, the initial path is odd because the follower starts so far from the leader. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;x1=linspace(0,10,100); %x1 and y1 represent the leader's path&#xA;y1=sin(x1);&#xA;figure(1)&#xA;clf;&#xA;plot(x1(1:100),y1(1:100));&#xA;hold on;&#xA;&#xA;x2=zeros(1,100);&#xA;y2=zeros(1,100);&#xA;&#xA;x2(1)=-5; %x2, y2 represent the follower's position&#xA;&#xA;%------- END ORIGINAL CODE ---------%&#xA;y2(1)=-4; % &amp;lt;---- NOTE: Originally this was x2(2) = -4. I'm assuming it should have been y2(1) = -4.&#xA;alpha_d = 0;&#xA;rho_d = 0.1;&#xA;rho = sqrt((x1(1)-x2(1))^2 + (y1(1)-y2(1))^2);&#xA;alpha = 0;&#xA;phi = 0;&#xA;prevLeaderAngle = 0;&#xA;followerAngle = 0;&#xA;&#xA;dT = x1(2) - x1(1); % I don't have any reference for time scales or speed so I have to fake it.&#xA;k = 1;&#xA;fullIntegral = [rho; alpha; phi];&#xA;&#xA;for i = 2:numel(x1)&#xA;    leaderLinearVelocity = sqrt((x1(i)-x1(i-1))^2 + (y1(i)-y1(i-1))^2)/dT;&#xA;    % Linear velocity is change in position divided by change in time.&#xA;    leaderAngle = atan2((y1(i)-y1(i-1)),(x1(i)-x1(i-1)));&#xA;    leaderAngularVelocity = (leaderAngle-prevLeaderAngle)/dT;&#xA;    prevLeaderAngle = leaderAngle;&#xA;&#xA;    leaderSpeed = [leaderLinearVelocity; leaderAngularVelocity];&#xA;&#xA;    formationDerivative = (k*eye(2))*[(rho_d-rho);(alpha_d-alpha)];&#xA;    followerSpeed = [-(1/cos(alpha)) , 0; -(tan(alpha)/rho) , -1] * ...&#xA;        (formationDerivative - [-(cos(phi)) , 0; (sin(phi)/rho) , 0] * leaderSpeed);&#xA;&#xA;    fullDerivative = [-cos(alpha) , 0; sin(alpha)/rho , -1; sin(alpha)/rho , 0]*...&#xA;        followerSpeed + [-cos(phi) , 0; sin(phi)/rho , 0; sin(phi)/rho , -1]*...&#xA;        leaderSpeed;&#xA;    fullIntegral = fullIntegral + fullDerivative*dT;&#xA;    rho = fullIntegral(1);&#xA;    alpha = fullIntegral(2);&#xA;    phi = fullIntegral(3);&#xA;&#xA;    x2(i) = x1(i) - rho*cos(alpha + followerAngle);&#xA;    y2(i) = y1(i) - rho*sin(alpha + followerAngle);&#xA;    followerAngle = phi - alpha + leaderAngle - pi;&#xA;&#xA;    newHeading = followerAngle + followerSpeed(2)*dT;&#xA;    dS = followerSpeed(1)*dT;&#xA;    plot(x2(i),y2(i),'o','Color',[1 0 0]);&#xA;    plot(x1(i),y1(i),'x','Color',[0 0 1]);&#xA;    drawnow;&#xA;    pause(0.1)&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2016-10-27T21:22:44.397" LastActivityDate="2016-10-27T21:22:44.397" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="10938" PostTypeId="1" AcceptedAnswerId="10939" CreationDate="2016-10-27T20:40:13.510" Score="-1" ViewCount="502" Body="&lt;p&gt;So, I am working on building a simple self driving tank (small) that needs to navigate a large hall.  I plan to use ultrasonics, LIDAR and a Kinect.  I am pretty happy with how I will build all of this.  My main question is would this be easier to do in ROS or write it in Python.  I have very basic knowledge of ROS but have been programming for many years (Java, Objective C etc).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I assume I will need to load in a basic map of static objects / floor plan.  Use SLAM etc (which I see is possible in Python).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sorry if this is a vague question. My hoping is someone on here who has used ROS a lot will turn round and say its the way to go&lt;/p&gt;&#xA;" OwnerUserId="15125" LastActivityDate="2016-10-28T00:01:53.363" Title="Self Driving Robotics Project : ROS or Python" Tags="&lt;ros&gt;&lt;python&gt;&lt;self-driving&gt;" AnswerCount="1" CommentCount="4" ClosedDate="2016-10-28T12:33:11.623" ContentLicense="CC BY-SA 3.0" />
  <row Id="10939" PostTypeId="2" ParentId="10938" CreationDate="2016-10-28T00:01:53.363" Score="3" Body="&lt;p&gt;You can use both! ROS nodes can be written in python.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm doing a similar project and the reusability of ros code is a nice thing to have in mind. ROS also have many things already implemented (even that you want to build everything from scratch).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The message types of ROS will also provide an easier to integrate application, for future projects and expansions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;my advice is to use ROS AND Python&lt;/p&gt;&#xA;" OwnerUserId="15119" LastActivityDate="2016-10-28T00:01:53.363" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="10940" PostTypeId="1" AcceptedAnswerId="11680" CreationDate="2016-10-28T16:04:21.820" Score="4" ViewCount="866" Body="&lt;p&gt;I want to code the dynamics of 2D planar quadrotor and than control it to drive it from one state to another.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Dynamics that I use is taken from the online course fiven by Vijay Kumar in Coursera as follows,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$&#xA;\begin{bmatrix}&#xA;    \ddot{y}\\&#xA;    \ddot{z}\\&#xA;    \ddot{\phi}&#xA;\end{bmatrix} =&#xA;\begin{bmatrix}&#xA;    0\\&#xA;    -g\\&#xA;    0&#xA;  \end{bmatrix} +&#xA;\begin{bmatrix}&#xA;   -\frac{1}{m}sin\phi &amp;amp; 0\\&#xA;    \frac{1}{m}cos\phi &amp;amp; 0\\&#xA;    0 &amp;amp; -\frac{1}{I_{xx}}&#xA;\end{bmatrix}\begin{bmatrix}&#xA;   u_1\\&#xA;    u_2&#xA;\end{bmatrix}&#xA;$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;it has some linearizations also as $sin\phi-&amp;gt;\phi$ &amp;amp; $cos\phi -&amp;gt; const.$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And u1, u2 is defined by;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$u_1=m\{g+\ddot{z}_T(t)+k_{v,z}*(\dot{z}_T(t)-\dot{z})+k_{p,z}*(z_{T}(t)-z)\}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$u_2=I_{xx}(\ddot{\phi}+k_{v,\phi}*(\dot{\phi}_T(t)-\dot{\phi})+k_{p,\phi}*(\phi_{T}(t)-\phi))$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\phi_c=-\frac{1}{g}(\ddot{y}_T(t)+k_{v,y}*(\dot{y}_T(t)-\dot{y})+k_{p,y}*(y_{T}(t)-y))$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;it is assumed to be the vehicle is near hover condition and commanded roll angle $\phi_c$ is calculated based on desired y-component and is used to calculate u2 which is net moment acting on CoG.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The thing that I dont understand is, don't I need any saturation on actuators? Do I need to implement some limiting part on my code to limit the control signals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other thing is, I don't have any desired acceleration. There is those terms in control signal equations. Can I remove them?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The last thing is, my control signals creates some signals causes to vehicle to have order of 10^5 in roll angle by integrating the high angular rates caused by high u2 moment signal I guess. Since the linearization works on small angle approximation, those high angles and rates are problematic. Thus how can I handle it?&lt;/p&gt;&#xA;" OwnerUserId="15133" LastEditorUserId="15133" LastEditDate="2016-10-28T19:01:44.287" LastActivityDate="2017-02-23T01:36:58.373" Title="How to implement PD controller to this 2D planar quadcopter dynamics?" Tags="&lt;quadcopter&gt;&lt;pid&gt;&lt;matlab&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10941" PostTypeId="1" CreationDate="2016-10-28T19:51:43.290" Score="2" ViewCount="687" Body="&lt;p&gt;I've implemented fast slam using landmark detection and the map stored is a feature map, made of landmarks positions. &#xA;I would like to create a grid map, and my questions are about how does the robot create a grid map in slam:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Another landmark class is used, or the occupancy grid is the landmark itself? In other words, the grid map generation is made separatly of the feature map?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;About the alignment of the map with the previous maps measures, this is similar to the fast slam 2.0 due to the fast  that considers the robot pose and the measurement of t-1?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance&lt;/p&gt;&#xA;" OwnerUserId="15119" LastActivityDate="2019-02-05T06:52:09.533" Title="How does fast slam creates grid maps?" Tags="&lt;mobile-robot&gt;&lt;localization&gt;&lt;slam&gt;&lt;particle-filter&gt;&lt;occupancygrid&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10942" PostTypeId="2" ParentId="8244" CreationDate="2016-10-30T03:46:28.323" Score="-3" Body="&lt;p&gt;Please see here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.robotsinsearch.com/products/blog/how-interface-ust-series-hokuyo-laser-scanners&quot; rel=&quot;nofollow&quot;&gt;How to interface with the UST series Hokuyo Laser Scanners&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15144" LastActivityDate="2016-10-30T03:46:28.323" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10943" PostTypeId="2" ParentId="10521" CreationDate="2016-10-30T04:10:45.740" Score="0" Body="&lt;p&gt;Found them on Pololu. Still don't know the exact manufacturer but I digress...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.pololu.com/product/2074&quot; rel=&quot;nofollow&quot;&gt;https://www.pololu.com/product/2074&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4276" LastActivityDate="2016-10-30T04:10:45.740" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10944" PostTypeId="1" AcceptedAnswerId="10945" CreationDate="2016-10-30T12:47:10.400" Score="0" ViewCount="42" Body="&lt;p&gt;I'm entirely new to robotics and have the following design requirement for a project I'm working on:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Given a robot capable of positioning an object in three dimensional space ( vis. a plastic extruder or syringe, etc ), allow the robot's end user to manually move that object through a path so that the robot's motor/controller will output the path taken.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I'm sure there must be motor-controller packages with such a feature, but I have no idea what keywords to search for so as to learn more about this type of hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The basic idea is to allow the end user to give the robot instructions by manually moving the object through a procedure, then recording that procedure, manipulating it and playing it back. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone give me some keywords to get me started in my research?&lt;/p&gt;&#xA;" OwnerUserId="15146" LastActivityDate="2016-10-30T15:02:09.677" Title="Motor-controller with path output" Tags="&lt;control&gt;&lt;motor&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2016-10-31T11:53:40.150" ContentLicense="CC BY-SA 3.0" />
  <row Id="10945" PostTypeId="2" ParentId="10944" CreationDate="2016-10-30T14:13:58.510" Score="1" Body="&lt;p&gt;Some keywords you can use are &lt;em&gt;teach and repeat robot programming,&lt;/em&gt; and &lt;em&gt;programming by demonstration.&lt;/em&gt;  You can also study how &lt;em&gt;teach pendants&lt;/em&gt; work.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT (expanded to include motor controller behaviors):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For some robots, particularly hobby and educational robots, the system can just disable the brakes and/or servos (or remove the motor's bus voltage), and let the operator move the end effector by hand.  The controller, in this teach mode, records the sequence of encoder values for each joint for the entire time the robot is in teach mode, and allows subsequent playback.   For larger robots, with large link inertias, this can be challenging for the operator to do.   I have worked on systems that energize the motors and compensate for gravity so that the operator can move the end effector with ease even though the links were heavy.  This is tricky from a safety perspective, and usually require a &quot;live man&quot; switch to be continually engaged because the operator is in the robot's workspace with the system powered on.   Most teach and repeat processes that I've seen use a teach pendant, in which the operator uses a joystick, switches, or programming commands to guide the robot to a series of discrete &quot;taught points,&quot; rather than recording the actual sequence of encoder values throughout the entire path.  These taught points can then be programmed into a robot's move commands, with additional options of setting motion parameters such as speeds, accelerations, and settling windows for each motion segment.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastEditorUserId="11125" LastEditDate="2016-10-30T15:02:09.677" LastActivityDate="2016-10-30T15:02:09.677" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10946" PostTypeId="2" ParentId="10713" CreationDate="2016-10-30T14:15:37.403" Score="0" Body="&lt;p&gt;What helped to solve my question was to use fmincon with the process noise $\omega_k$ as decision variable and to use the measurement noise which includes the state in the equation $\nu_k = y_k - h(x_k)$. To come up with a solution for the state $x_k$ I just solve the prediction model using an initial state at the beginning of the moving window $x_{k-N}$ and also the noise sequence. Where the noise sequence is the decision variable. Using this method, the prediction model constraint is &quot;included&quot; in the cost function. Of course at the very first start of the optimizaiton, a random noise sequence is chosen (with magnitude according to the state variables). After each run of the optimization the shifted noise sequence from the previous run can be taken as initial guess.&lt;/p&gt;&#xA;" OwnerUserId="14683" LastActivityDate="2016-10-30T14:15:37.403" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10947" PostTypeId="2" ParentId="10667" CreationDate="2016-10-30T14:25:14.920" Score="0" Body="&lt;p&gt;My solution is to use the following model with disturbance only at acceleration and curvature.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{bmatrix}&#xA;      x_{k+1} \\&#xA;      y_{k+1} \\&#xA;      \theta_{k+1} \\&#xA;      v_{k+1} \\&#xA;      a_{k+1} \\&#xA;      \kappa_{k+1} \\&#xA;    \end{bmatrix} = &#xA;    f_k(\vec{x}_k,u_k,\vec{\omega}_k,\Delta t) =&#xA;    \begin{bmatrix}&#xA;      x_k + v_k \Delta t \cos \theta_k \\&#xA;      y_k + v_k \Delta t \sin \theta_k \\&#xA;      \theta_k + v_k \kappa_k \Delta t \\&#xA;      v_k + a_k \Delta t \\&#xA;      a_k + \omega_a \\&#xA;      \kappa_k + \omega_{\kappa}&#xA;    \end{bmatrix}&#xA;$$&lt;/p&gt;&#xA;" OwnerUserId="14683" LastActivityDate="2016-10-30T14:25:14.920" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10948" PostTypeId="1" AcceptedAnswerId="10949" CreationDate="2016-10-30T16:26:59.753" Score="1" ViewCount="207" Body="&lt;p&gt;I want to use a gripper end-effector (3 fingers, single actuator tendon-driven with force sensors in fingers) to grip and hold fragile objects such as an egg. I can not seem to figure out which control scheme would be most appropriate for the situation. Would using an impedance control with negligible dynamic interaction be effective or a hybrid control with force/position control?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My idea was to simply tense the tendon (slowly) encompassing the object until the force sensor gives a feedback that contact has been made (+ a little grip force), what category of control scheme would that fall into?&lt;/p&gt;&#xA;" OwnerUserId="15149" LastEditorUserId="37" LastEditDate="2016-11-01T14:29:13.690" LastActivityDate="2016-11-01T14:29:13.690" Title="Appropriate control scheme for gripper end-effector" Tags="&lt;control&gt;&lt;sensors&gt;&lt;force-sensor&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10949" PostTypeId="2" ParentId="10948" CreationDate="2016-10-30T17:48:07.693" Score="2" Body="&lt;p&gt;If you have a simple controller (e.g. force control or position control) the factor which decides what kind of controller is it is the reference signal which has to correspond to the feedback signal. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;My idea was to simply tense the tendon (slowly) encompassing the object until the force sensor gives a feedback that contact has been made (+ a little grip force), what category of control scheme would that fall into ?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If tensing the tendon is through a force signal then this is force control. If you do it by position or velocity (since you mentioned slowly) then it is position control. This idea will most probably be simple to implement and will work (but this is an opinion based remark). You will find many examples for using impedance control for gripping in the scientific literature. It is generally a good idea to start with something simple (incrementing tension until a threshold) and develop that further to impedance control if ti doesn't perform good enough. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hybrid control has probably many different definitions, the one if which is commonly used in robotics, which is position control in on dimension, force control in a different dimension. (i.e. writing on a white board with the robot controlling the marker, keep force contact perpendicular to the position controlled heading direction).&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2016-10-30T17:48:07.693" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10950" PostTypeId="1" AcceptedAnswerId="10959" CreationDate="2016-10-30T18:31:53.747" Score="1" ViewCount="106" Body="&lt;p&gt;I am currently working on a project that involves structure from motion using multiple cameras on multiple aerial vehicles (each vehicle has a monocular camera: think of it as a distributed stereo), and I am trying to extend this to include localization as well. My pipeline currently goes: robots at known locations -&gt; take pictures -&gt; reconstruct.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When it comes to localizing the vehicles as well using this incrementally built map, the standard approach that comes to mind is to apply the PNP algorithm on each camera (assuming the reconstructed scene is visible to all cameras) which results in the 3D pose: but this doesn't necessarily take advantage of the fact that multiple cameras exist, apart from the fact that they are used in reconstructing the environment. Is there anything I can exploit using multiple cameras/vehicles that would result in enhanced localization accuracy of all of the vehicles as compared to a &quot;single vehicle performing PNP on a known map&quot; scenario?&lt;/p&gt;&#xA;" OwnerUserId="15150" LastEditorUserId="15150" LastEditDate="2016-10-31T15:26:35.910" LastActivityDate="2016-10-31T15:26:35.910" Title="In vision based localization, is it possible to make multiple vehicles cooperate to improve the estimation of each other?" Tags="&lt;localization&gt;&lt;slam&gt;&lt;multi-agent&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="10951" PostTypeId="1" CreationDate="2016-10-30T19:34:58.583" Score="1" ViewCount="151" Body="&lt;p&gt;Over the summer, I have configured ROS navigation stack on a mobile robot (with radar and Kinect) so that it can autonomously navigate in the unknown environment. I also wrote a python program that allow the robot to track human motion, also using the open source library. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Currently, I am applying to software job. I thought this experience is very relevant to software programming. But, I am actually stuck on how to explain what ROS is. And when I use the packages (eg, navigation stack) on a robot, &lt;strong&gt;am I actually doing coding&lt;/strong&gt;? Can I say ROS is just an API?&lt;/p&gt;&#xA;" OwnerUserId="15151" LastActivityDate="2016-10-31T08:52:01.887" Title="Question about ROS, how to explain to someone what ROS is?" Tags="&lt;ros&gt;" AnswerCount="2" CommentCount="1" ClosedDate="2016-10-31T11:55:58.830" ContentLicense="CC BY-SA 3.0" />
  <row Id="10952" PostTypeId="2" ParentId="10951" CreationDate="2016-10-30T19:42:38.790" Score="1" Body="&lt;p&gt;Compare it to a message bus connecting different services through publish/subscribe mechanism. All enterprise software engineers should be able to understand this comparison. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you write source code you are coding. If you do not write source code you are not coding. Please note that coding can also cover graphical languages like Function blocks or  similar. Coding is not necessarily only the implementation of complex algorithms, writing source code that glues together different libraries or just calling them is also coding.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;ROS is not just an API. &lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2016-10-30T19:46:48.703" LastActivityDate="2016-10-30T19:46:48.703" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10953" PostTypeId="1" CreationDate="2016-10-30T19:57:18.630" Score="1" ViewCount="448" Body="&lt;p&gt;For a research project at university I have been tasked with simulating a &quot;robot arm&quot;. The simulation is to be compared with the real life version for accuracy. The arm will be lifting other objects and building simple structures in the demonstration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My supervisor has asked that we build this simulator from scratch so I am currently selecting a physics engine. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this &lt;a href=&quot;http://bulletphysics.org/Bullet/phpBB3/viewtopic.php?f=9&amp;amp;t=5033&amp;amp;start=0&quot; rel=&quot;nofollow&quot;&gt;link&lt;/a&gt;, it seems bullet is not accurate enough, albeit this was in 2010, for the original poster's needs in robotic simulation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This &lt;a href=&quot;http://blog.wolfire.com/2010/03/Comparing-ODE-and-Bullet&quot; rel=&quot;nofollow&quot;&gt;comparison&lt;/a&gt; believes bullet is better in general but says that documentation is lacking, which is important to me as this is my first time using a physics engine such as this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;so thoughts on these or any other physics engine that may be more suitable?&lt;/p&gt;&#xA;" OwnerUserId="15152" LastEditorUserId="10596" LastEditDate="2016-10-31T11:47:12.827" LastActivityDate="2016-10-31T11:47:12.827" Title="Bullet vs ODE to simulate robotic arm" Tags="&lt;robotic-arm&gt;&lt;simulator&gt;" AnswerCount="2" CommentCount="3" ClosedDate="2016-10-31T14:16:22.873" ContentLicense="CC BY-SA 3.0" />
  <row Id="10954" PostTypeId="2" ParentId="10953" CreationDate="2016-10-30T20:09:07.553" Score="1" Body="&lt;p&gt;The accuracy of the physics engine will most likely not be a problem. Differences between real world systems and their models are a much larger factor of errors then the slight differences between physics engines so you can use any physics engine you like.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will not be able to have accurate models (geometry imprecisions, mass characteristic imprecisions, imprecisions in friction constants, etc.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To my knowledge OpenRAVE can do dynamics and it is meant for robotics, so you will find lots of examples on modelling robots. If you have to start from scratch you can use its API. &lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2016-10-30T20:09:07.553" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10956" PostTypeId="2" ParentId="10953" CreationDate="2016-10-31T07:45:29.263" Score="0" Body="&lt;p&gt;Isn't using a physics engine cheating if your advisor wants you to start from scratch?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would choose simbody over those two. It has great documentation and was designed for simulation instead of video games.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What exactly are you trying learn (or predict, or compare) from the simulator? If you want a useful simulation it matters a lot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The history of robotics is full of simulation projects that died useless because the researcher was not really sure what they were simulating or why.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2016-10-31T07:45:29.263" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10958" PostTypeId="2" ParentId="10951" CreationDate="2016-10-31T08:43:35.533" Score="0" Body="&lt;p&gt;ROS is a framework to do component based development of software for robotics. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Component based development has been around for a while in software engineering. One advantage is that you can split the process of developing components - self sustained modules that perform a specific task - and how a bunch of them are applied together in a system quite well. It creates different roles in the development process. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your case you have used the components to get a running system. The skills you acquired seem to be in the area of python programming (I would consider this a form of coding), robotics and of course ROS.&lt;/p&gt;&#xA;" OwnerUserId="127" LastEditorUserId="127" LastEditDate="2016-10-31T08:52:01.887" LastActivityDate="2016-10-31T08:52:01.887" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10959" PostTypeId="2" ParentId="10950" CreationDate="2016-10-31T13:59:12.373" Score="3" Body="&lt;p&gt;You can do it by fusion using a Kalman filter:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You have a process model model:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;x_t = g(x_{t-1},u_t)&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, you have multiple measurements of the same process model from different perspectives:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;z1_t = h_1(x_{t}) \leftarrow \text{camera 1} \\&#xA;z2_t = h_2(x_{t}) \leftarrow \text{camera 2} \\&#xA;\cdots \\&#xA;zn_t = h_n(x_{t}) \leftarrow \text{camera n} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the prediction step of the Kalman filter, nothing changes you have only one process:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\bar{x}_t = g(x_{t-1},u_t) \\&#xA;\bar{\Sigma}_t = G_t \Sigma_{t-1} G_t^\intercal + R_t&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And for the update step, you have to include all the measurements:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;K_t = \bar{\Sigma}_t H_t^\intercal ( H_t \bar{\Sigma}_t H_t^\intercal + Q_t )^{-1} \\&#xA;x_t = \bar{x}_t + K_t ( z_t - h( \bar{x}_t ) ) \\&#xA;\Sigma_t = ( I - K_t H_t ) \bar{\Sigma}_t &#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The trick is defining how you are building the matrices in the update step:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;z_t = \left[ \begin{array}{c} z1_t \\ z2_t \\ \cdots \\ zn_t \end{array} \right]&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;h(\bar{x}_t) = \left[ \begin{array}{c} h_1(\bar{x}_t) \\ h_2(\bar{x}_t) \\ \cdots \\ h_n(\bar{x}_t) \end{array} \right]&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;H_t = \left[ \begin{array}{c} H1_t \\ H2_t \\ \cdots \\ Hn_t \end{array} \right]&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;Q_t = \left[ \begin{array}{cccc} Q1_t &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; Q2_t &amp;amp; 0 &amp;amp; 0 \\ \cdots \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; Qn_t \end{array} \right]&#xA;$$&lt;/p&gt;&#xA;" OwnerUserId="11648" LastActivityDate="2016-10-31T13:59:12.373" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="10961" PostTypeId="1" AcceptedAnswerId="10963" CreationDate="2016-10-31T17:39:25.307" Score="7" ViewCount="2675" Body="&lt;p&gt;Between the shoulder and elbow pitch joints, I see two types of connecting structures on larger robots. I've attached a picture. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/A99JV.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/A99JV.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My questions:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) What are each of the respective mechanical parts called?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) What is their purpose for the robot arm?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="6858" LastActivityDate="2016-11-03T18:28:17.690" Title="What are these mechanical parts attached to robot arm structures, seen on larger robots?" Tags="&lt;robotic-arm&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10962" PostTypeId="2" ParentId="10961" CreationDate="2016-10-31T19:49:56.897" Score="4" Body="&lt;p&gt;What you marked as &quot;pump looking things&quot; are hydraulic springs. Their purpose is to reduce the load on the motors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you marked as &quot;What is going on here&quot; has 2 component. &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A mass used as a counterbalance, also to ease the load on the motors and possibly to reduce the radial torque load on the bearing. &lt;/li&gt;&#xA;&lt;li&gt;The four bar linkage mt allows the move the motor and gearbox of axis 3 alongside axis two, which brings the overall center of gravity to a favourable position (closer to the base). &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2016-10-31T19:49:56.897" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10963" PostTypeId="2" ParentId="10961" CreationDate="2016-10-31T19:58:21.250" Score="7" Body="&lt;p&gt;The &quot;pump-looking&quot; things are either hydraulic cylinders, or mechanical dampers if the robot is electrically driven.  EDIT:  I'll accept @50k4's identification as hydraulic springs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the &quot;what's going on back here&quot; department, the long thin member is a linkage.  It is part of a 4-bar parallelogram linkage which allows the forearm to be driven using a motor which is located far below the elbow (the lowest red piece in your picture).  The benefit of this arrangement is that the upper arm link does not have to carry the weight of that motor.  Please note that I am using &quot;upper arm&quot; in the anthropomorphic sense.  It is the link closest to the shoulder.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other part of &quot;what's going on back here&quot; is the large blob of metal.  Notice that this blob has its top center carved out so that the linkage can nest in there, thus increasing the forearm's range of motion.  The blob itself is a counterweight.  By adding counterweights, the load on the motors due to gravity is reduced, even though the total inertia that the motor must move is larger.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2016-10-31T19:58:21.250" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10964" PostTypeId="1" AcceptedAnswerId="10965" CreationDate="2016-11-01T04:29:40.360" Score="0" ViewCount="2850" Body="&lt;p&gt;I recently engaged with a university robotics project &lt;strong&gt;(based on ROS)&lt;/strong&gt; and my main processing controller is Raspberry Pi and the system stability controller is Atmega 32 microcontroller (It is responsible for driving motors and check the communication protocols ex:-i2c,rs232 are working in good manner). So the motor controller of this robot is a i2c type one and and it drives the motors according to the i2c signals that coming from the i2c port of the Atmega 32 microcontroller. The main controller communicate with the Atmega 32 using rs232 protocol. So I found an arduino code as below,&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;// This function is called once when the program starts.&#xA;void setup() {&#xA;     // Choose a baud rate and configuration. 115200&#xA;     // Default is 8-bit with No parity and 1 stop bit&#xA;     Serial.begin(115200, SERIAL_8N1);&#xA;}&#xA;&#xA;// This function will loop as quickly as possible, forever.&#xA;void loop() {&#xA;    byte charIn;&#xA;    if(Serial.available()){ // A byte has been received&#xA;        charIn = Serial.read(); // Read the character in from the master microcontroller&#xA;        Serial.write(charIn); // Send the character back to the master microcontroller&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The communication between processing board and microcontroller as below diagram&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/DULm7.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/DULm7.png&quot; alt=&quot;communication between processing board and microcontroller&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is an already available arduino library called &lt;strong&gt;rosserial&lt;/strong&gt; for &lt;strong&gt;ROS&lt;/strong&gt;. But I want this in &lt;strong&gt;AVR GCC&lt;/strong&gt;.What I want is convert this code to traditional avr gcc code that work on &lt;strong&gt;&lt;em&gt;atmel studio 6&lt;/em&gt;&lt;/strong&gt;  &lt;/p&gt;&#xA;" OwnerUserId="15103" LastEditorUserId="15103" LastEditDate="2016-11-02T03:14:31.020" LastActivityDate="2016-11-02T03:14:31.020" Title="How to convert this arduino code snippet to AVR GCC?" Tags="&lt;arduino&gt;&lt;ros&gt;&lt;avr&gt;&lt;i2c&gt;&lt;rs232&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10965" PostTypeId="2" ParentId="10964" CreationDate="2016-11-01T07:36:17.370" Score="1" Body="&lt;p&gt;I never worked with Arduino, but there is a lot going on behind the scenes in the Arduino Serial class. The examples below should get you started, its not supposed to be compilable or functional as a whole. The example is for UART0.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;Serial.begin()&lt;/code&gt; performs the low level initialization. If you do this manually it will look something like this:&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void UART0_Init(uint32_t baud) {&#xA;    uint16_t value = (((uint32_t)F_CPU / (baud * 16UL)) - 1);&#xA;&#xA;    /* Set baud rate */&#xA;    UBRR0H = (uint8_t)(value &amp;gt;&amp;gt; 8);&#xA;    UBRR0L = (uint8_t)value;&#xA;&#xA;    /* Enable USART receiver and transmitter */&#xA;    UCSR0B = (1 &amp;lt;&amp;lt; RXEN0) | (1 &amp;lt;&amp;lt; TXEN0);&#xA;&#xA;    /* Set frame format: asynchronous, 8data, no parity, 1stop bit */&#xA;    UCSR0C = (1 &amp;lt;&amp;lt; UCSZ00) | (1 &amp;lt;&amp;lt; UCSZ01);&#xA;&#xA;    // enable UART-Receive-Interrupt&#xA;    UCSR0B |= (1 &amp;lt;&amp;lt; RXCIE0);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then there is the interrupt service routine for the receiver and you would need some state variables to communicate new data to the &quot;main process&quot;.&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;volatile uint8_t lastByteReceived;&#xA;volatile bool newDataAvailable;&#xA;&#xA;ISR (USART0_RX_vect) {&#xA;    lastByteReceived = UDR0;&#xA;    newDataAvailable = true;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The Arduino loop() represents more or less the classic while(true){} function in main().&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;int main(void) {    &#xA;    while (1) {&#xA;        if (newDataAvailable) {&#xA;            newDataAvailable = false;&#xA;            // ...write lastByteReceived to a buffer or process it otherwise&#xA;        }&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;PS: Isn't there support for syntax highlighting on SE robotics?&lt;/p&gt;&#xA;" OwnerUserId="6882" LastEditorUserId="6882" LastEditDate="2016-11-01T10:02:56.183" LastActivityDate="2016-11-01T10:02:56.183" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="10966" PostTypeId="2" ParentId="10964" CreationDate="2016-11-01T08:02:19.700" Score="1" Body="&lt;p&gt;Firstly, the Arduino IDE already uses the AVR GCC compiler. Put another way, all of your Arduino (.ino) code gets transformed into a C++ (ie .cpp) file and then gets compiled with AVR GCC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The easiest way to move to Atmel/Visual Studio is to use &lt;a href=&quot;http://www.visualmicro.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Visual Micro&lt;/a&gt;. It is a great product, the documentation is good and the transition is almost seamless.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To migrate your code manually you will have to first convert your .ino file into a .cpp file (&lt;a href=&quot;https://www.arduino.cc/en/Hacking/BuildProcess&quot; rel=&quot;nofollow noreferrer&quot;&gt;see&lt;/a&gt;). All of the raw libraries can be found in the Arduino instalation folder. My files were located at &lt;code&gt;C:\Program Files (x86)\arduino-x.x.x\hardware\arduino\cores\arduino\&lt;/code&gt;. Any other external libraries will also need to be moved into your new project folder from &lt;code&gt;C:\Program Files (x86)\arduino-x.x.x\libraries\&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="14782" LastEditorUserId="10596" LastEditDate="2016-11-01T12:45:35.010" LastActivityDate="2016-11-01T12:45:35.010" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="10967" PostTypeId="2" ParentId="10948" CreationDate="2016-11-01T09:55:07.333" Score="-1" Body="&lt;p&gt;Impedance control is some kind of analog control. It can be implemented on memory based circuits from the 1950s. That was state-of-the-art before the NASA was on the moon. Some authors has extended this control schema with reinforcement learning. A better possibility for controlling a robohand is to use digitalcomputer only. That means, no mathematical formulas or analog circuits are the way to go, but algorithms, software-engineering and programmable computers. A good starting point is to implement a randomized algorithm (perhaps in matlab) which uses a behavior tree to &quot;reach&quot;, &quot;pregrasp&quot; and &quot;grasp&quot; an object. The parameters which are difficult to calculate like the grasppoint or the direction of the gripper can be leave out as random. The algorithm works because after 10 or more repetitions the gripper uses the right parameters via luck.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2016-11-01T09:55:07.333" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10969" PostTypeId="2" ParentId="10948" CreationDate="2016-11-01T14:19:47.230" Score="2" Body="&lt;p&gt;I believe the term you're looking for is &lt;a href=&quot;http://ieeexplore.ieee.org/document/7182329/&quot; rel=&quot;nofollow noreferrer&quot;&gt;compliant control&lt;/a&gt;. In a compliant control system, there is a position reference and a force reference, and essentially each is allowed to actuate the joint until either achieves the reference. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, if you had a position reference of 10 and a force reference of 1, then both the force and position controllers would want to move in the &quot;+&quot; direction. If an obstacle is encountered in the environment, then the position controller is essentially &quot;paused&quot; because the force output of the actuator achieved its goal of 1. As soon as the obstacle clears, the force output drops (because nothing is resisting any more) and the motion resumes until either force or position goals are achieved.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are a variety of ways compliance is achieved - series elastic actuators, torque/force limits (clamping), parallel control loops, etc., but everything that utilizes the concept of a force-limited position control system is called &quot;compliant&quot;.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-11-01T14:19:47.230" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="10970" PostTypeId="1" CreationDate="2016-11-01T14:38:37.490" Score="2" ViewCount="3232" Body="&lt;p&gt;I am currently doing my first arduino project and i am having trouble finishing it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a 3s lipo battery connected with an esc (120A) that is connected to a motor (270KV). From the esc i am connecting two jumper cables that goes to GND and pin 9.&#xA;I do not have a jumper cable on the red wire from the ESC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is how it looks:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/NTNuU.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/NTNuU.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Below you can see a link to a sketch that I found online. The only difference compared to my schematic is that I have an Arduino Uno.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/lo5ey.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/lo5ey.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I insert the battery and switch the ESC to &quot;on&quot; the ESC starts up correctly and the fan starts to go. But the arduino does not get any power. It is still &quot;OFF&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also noticed that my motor has 4 cables. 3 &quot;bigger&quot; cables that goes to the ESC's 3 big cables. And then a 4th one hanging loose right now because i do not quite know what to do with it. I also noticed there is a hole in the ESC where I can insert this. The hole has 6 &quot;inputs&quot; however where as the loose wire from the motor has 5. Therefor I am a bit concerned if that should be connected there or not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So to summarize, the problem is that the Arduino does not turn &quot;ON&quot; with my current schematic. &#xA;Any help, tips is very appreciated!!&lt;/p&gt;&#xA;" OwnerUserId="15177" LastEditorUserId="10596" LastEditDate="2016-11-01T19:50:01.037" LastActivityDate="2020-01-08T22:39:04.333" Title="Connected battery, esc and motor does not power up the arduino" Tags="&lt;arduino&gt;&lt;motor&gt;&lt;esc&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10971" PostTypeId="2" ParentId="10970" CreationDate="2016-11-01T15:36:49.147" Score="1" Body="&lt;p&gt;your arduino is off because you are not powering it. you need to power the arduino. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The battery in the drawing is used exclusively to power the motor. The arduino needs its own separate power supply. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To power the arduino off of a battery you will need something like &lt;a href=&quot;https://www.maxamps.com/castle-creations-bec-switching-regulator?gclid=CjwKEAjw-uDABRDPz4-0tp6T6lMSJADNoyPbadT9YuZfhsCDr9EWPdA3gswE0N9dkseq533KjnOnrxoC1gLw_wcB&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;you can set the output voltage via a usb connection.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have additional questions please start a new thread. &lt;/p&gt;&#xA;" OwnerUserId="8842" LastEditorUserId="8842" LastEditDate="2016-11-02T13:39:36.527" LastActivityDate="2016-11-02T13:39:36.527" CommentCount="12" ContentLicense="CC BY-SA 3.0" />
  <row Id="10972" PostTypeId="1" CreationDate="2016-11-01T17:56:17.197" Score="3" ViewCount="711" Body="&lt;p&gt;I have a hexapod that a friend and I built this summer, but there is a big problem whenever we try to move multiple servos. When using the Adafruit_Python_PCA9685 library, I am able to move the servos perfectly fine for a short period, but then they will breakdown and start erratically twitching.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To illustrate the problem, I just modified a few lines from Adafruit's simpletest.py program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;# Simple demo of of the PCA9685 PWM servo/LED controller library.&#xA;# This will move channel 0 from min to max position repeatedly.&#xA;# Author: Tony DiCola&#xA;# License: Public Domain&#xA;from __future__ import division&#xA;import time&#xA;&#xA;# Import the PCA9685 module.&#xA;import Adafruit_PCA9685&#xA;&#xA;&#xA;# Uncomment to enable debug output.&#xA;import logging&#xA;logging.basicConfig(level=logging.DEBUG)&#xA;&#xA;# Initialise the PCA9685 using the default address (0x40).&#xA;# pwm = Adafruit_PCA9685.PCA9685()&#xA;&#xA;# Alternatively specify a different address and/or bus:&#xA;pwm = Adafruit_PCA9685.PCA9685(address=0x40, busnum=2)&#xA;&#xA;# Configure min and max servo pulse lengths&#xA;servo_min = 300  # Min pulse length out of 4096&#xA;servo_max = 400  # Max pulse length out of 4096&#xA;&#xA;# Helper function to make setting a servo pulse width simpler.&#xA;def set_servo_pulse(channel, pulse):&#xA;pulse_length = 1000000    # 1,000,000 us per second&#xA;pulse_length //= 60       # 60 Hz&#xA;print('{0}us per period'.format(pulse_length))&#xA;pulse_length //= 4096     # 12 bits of resolution&#xA;print('{0}us per bit'.format(pulse_length))&#xA;pulse *= 1000&#xA;pulse //= pulse_length&#xA;pwm.set_pwm(channel, 0, pulse)&#xA;&#xA;# Set frequency to 60hz, good for servos.&#xA;pwm.set_pwm_freq(60)&#xA;&#xA;print('Moving servo on channel 0, press Ctrl-C to quit...')&#xA;while True:&#xA;# Move servo on channel O between extremes.&#xA;for i in range(0, 3):&#xA;    for j in range(0,3):&#xA;    k = (4*i)+j&#xA;    pwm.set_pwm(k, 0, servo_min)&#xA;    time.sleep(1)&#xA;    pwm.set_pwm(k, 0, servo_max)&#xA;    time.sleep(1)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And &lt;a href=&quot;https://youtu.be/ue0e5lczjk4&quot; rel=&quot;nofollow noreferrer&quot;&gt;here is a video&lt;/a&gt; of the &quot;erratic movement&quot; (the first 8 seconds are normal movement)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am running the code on a Beagle Bone Green Wireless with ubuntu on it and I am using turnigy TGY-S091D servos.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a photo of the wiring&#xA;&lt;a href=&quot;https://i.stack.imgur.com/EaafA.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/EaafA.jpg&quot; alt=&quot;photo of the hexapod&amp;#39;s wiring&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't have enough reputation to post more detailed pictures, but hopefully this is enough.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please help.&lt;/p&gt;&#xA;" OwnerUserId="15178" LastEditorUserId="37" LastEditDate="2017-03-09T18:28:12.480" LastActivityDate="2017-03-09T18:28:12.480" Title="Adafruit PCA9685 servo driver connected to Beaglebone Green Wireless generating erratic movement when driving multiple servos" Tags="&lt;rcservo&gt;&lt;python&gt;&lt;beagle-bone&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10973" PostTypeId="2" ParentId="10898" CreationDate="2016-11-01T18:30:37.803" Score="2" Body="&lt;p&gt;I feel like I'm having to do a &lt;strong&gt;lot&lt;/strong&gt; of work to understand this question. You are trying to simulate two vehicles, and... what's the issue? You are trying to simulate them in Gazebo, right?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Have you seen &lt;a href=&quot;http://answers.ros.org/question/41433/multiple-robots-simulation-and-navigation/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this answer on the ROS website&lt;/a&gt; that shows launching two robots in one simulation? As I mention, it's &lt;strong&gt;very difficult&lt;/strong&gt; to read your post, which may explain why it's received such little attention. For instance, what is the first code block you show? What is the second code block? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In both code blocks, you have the following lines:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;arg name=&quot;model&quot; default=&quot;$(find ardupilot_sitl_gazebo_plugin)/urdf/erlecopter_base.xacro&quot;/&amp;gt;&#xA;&amp;lt;arg name=&quot;model&quot; default=&quot;$(find ardupilot_sitl_gazebo_plugin)/urdf/rover.urdf&quot;/--&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;BOTH code blocks have these lines. That is, you have &quot;model&quot; assigned to the Erlecopter, then you have &quot;model&quot; assigned to the Rover. Both instances of &quot;model&quot; occur in the same namespace, so I'm not sure how they would be distinguished. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Again I would refer you to the &lt;a href=&quot;http://answers.ros.org/question/41433/multiple-robots-simulation-and-navigation/&quot; rel=&quot;nofollow noreferrer&quot;&gt;answer on the ROS forums&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'll reproduce part of the article here for posterity for future visitors:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The answer is based on the turtlebot robot, but of course it can be used with any robot(s).&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;For multiple robots &lt;strong&gt;the key point is to manage the namespaces and tf_prefixes.&lt;/strong&gt; Although usually we will set them to the same value for each robot in this example I will you different for purpose.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;In setting up the navigation stack(s) each robot must operate in it's own namespace, but they do have to share the map (and usually robot_description).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(emphasis added)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Simulation&#xA;  First of all we have to launch the simulation, in our case gazebo. To make things more readable I split launch files in few files.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Launch file for one robot. We name it one_robot.launch:&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;launch&amp;gt;&#xA;    &amp;lt;arg name=&quot;robot_name&quot;/&amp;gt;&#xA;    &amp;lt;arg name=&quot;init_pose&quot;/&amp;gt;&#xA;&#xA;    &amp;lt;node name=&quot;spawn_minibot_model&quot; pkg=&quot;gazebo&quot; type=&quot;spawn_model&quot;&#xA;     args=&quot;$(arg init_pose) -urdf -param /robot_description -model $(arg robot_name)&quot;&#xA;     respawn=&quot;false&quot; output=&quot;screen&quot; /&amp;gt;&#xA;&#xA;    &amp;lt;node pkg=&quot;robot_state_publisher&quot; type=&quot;state_publisher&quot; &#xA;          name=&quot;robot_state_publisher&quot; output=&quot;screen&quot;/&amp;gt;&#xA;&#xA;    &amp;lt;!-- The odometry estimator, throttling, fake laser etc. go here --&amp;gt;&#xA;    &amp;lt;!-- All the stuff as from usual robot launch file --&amp;gt;&#xA;&amp;lt;/launch&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Two things to mention for above launch file:&lt;/p&gt;&#xA;  &#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;Create two arguments to pass for robot initialization: name and position&lt;/li&gt;&#xA;  &lt;li&gt;Notice that -param /robot_description is with the slash i.e. fully-qualified, as it will be shared.&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;  &#xA;  &lt;p&gt;Having the robot declaration we can now play with the namespaces. Your main launch file for multiple robots should look like (robots.launch):&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;launch&amp;gt;&#xA;  &amp;lt;!-- No namespace here as we will share this description. &#xA;       Access with slash at the beginning --&amp;gt;&#xA;  &amp;lt;param name=&quot;robot_description&quot;&#xA;    command=&quot;$(find xacro)/xacro.py $(find turtlebot_description)/urdf/turtlebot.urdf.xacro&quot; /&amp;gt;&#xA;&#xA;  &amp;lt;!-- BEGIN ROBOT 1--&amp;gt;&#xA;  &amp;lt;group ns=&quot;robot1&quot;&amp;gt;&#xA;    &amp;lt;param name=&quot;tf_prefix&quot; value=&quot;robot1_tf&quot; /&amp;gt;&#xA;    &amp;lt;include file=&quot;$(find your_pkg)/launch/one_robot.launch&quot; &amp;gt;&#xA;      &amp;lt;arg name=&quot;init_pose&quot; value=&quot;-x 1 -y 1 -z 0&quot; /&amp;gt;&#xA;      &amp;lt;arg name=&quot;robot_name&quot;  value=&quot;Robot1&quot; /&amp;gt;&#xA;    &amp;lt;/include&amp;gt;&#xA;  &amp;lt;/group&amp;gt;&#xA;&#xA;  &amp;lt;!-- BEGIN ROBOT 2--&amp;gt;&#xA;  &amp;lt;group ns=&quot;robot2&quot;&amp;gt;&#xA;    &amp;lt;param name=&quot;tf_prefix&quot; value=&quot;robot2_tf&quot; /&amp;gt;&#xA;    &amp;lt;include file=&quot;$(find your_pkg)/launch/one_robot.launch&quot; &amp;gt;&#xA;      &amp;lt;arg name=&quot;init_pose&quot; value=&quot;-x -1 -y 1 -z 0&quot; /&amp;gt;&#xA;      &amp;lt;arg name=&quot;robot_name&quot;  value=&quot;Robot2&quot; /&amp;gt;&#xA;    &amp;lt;/include&amp;gt;&#xA;  &amp;lt;/group&amp;gt;&#xA;&amp;lt;/launch&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So I've reproduced here the steps up to launching both robots. The full answer goes into a lot more depth. &lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Just above the comments for the post is a link that says (more). It expands the rest of the answer.&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Be sure to read the full answer as it goes into more detail about steps to take for setting up navigation and visualization. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you try these steps and get a specific error, please tell us &lt;em&gt;what exactly the error said&lt;/em&gt;. Comments like, &quot;This didn't work,&quot; or, &quot;This had errors,&quot; are not helpful. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do hope this works for you! If I've missed the mark as to the scope/direction of your question then please try to clarify &lt;em&gt;the exact errors you're getting&lt;/em&gt;. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-11-01T18:30:37.803" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10974" PostTypeId="1" CreationDate="2016-11-01T20:00:06.290" Score="0" ViewCount="663" Body="&lt;p&gt;I currently have an error state Kalman filter with the state vector $(p, v, q, \omega, a, g)$ where $q$ is the quaternion orientation. I would like to add the information coming from a magnetometer to this sensor fusion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have calibrated the magnetometer and we can assume that we are getting processed data at the point of input to the filter.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;How do I extend my state vector to account for the new input, or since I do not directly care about estimating it, should I not include it?&lt;/li&gt;&#xA;&lt;li&gt;I think that I can initialize my initial state vector correctly by performing TRIAD using the magnetic field vector, is this the right approach?&lt;/li&gt;&#xA;&lt;li&gt;How does the magnetic field vector help in stabilizing my quaternion attitude?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I tried to search around but I didn't find many resources on how the math works when I include the magnetometer. Any links would be very helpful as well.&lt;/p&gt;&#xA;" OwnerUserId="15179" LastActivityDate="2017-05-01T17:09:15.437" Title="Adding magnetic field vector to a Kalman filter" Tags="&lt;kalman-filter&gt;&lt;magnetometer&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10978" PostTypeId="2" ParentId="10974" CreationDate="2016-11-02T00:38:42.357" Score="2" Body="&lt;p&gt;I doubt you need to add anything to the state vector regarding the magnetometer calibration. The magnetometer measurement should just be treated at another signal that triggers a measurement/correction update.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Adding the magnetometer makes yaw ( how much you've turned) observable. Without the mag you will just be integrating gyro measurements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;&lt;a href=&quot;http://arc.aiaa.org/doi/abs/10.2514/3.25364&quot; rel=&quot;nofollow noreferrer&quot;&gt;Three-axis attitude determination via Kalman filtering of magnetometer data&lt;/a&gt;&quot;&lt;/p&gt;&#xA;" OwnerUserId="8842" LastEditorUserId="8842" LastEditDate="2016-11-02T13:37:32.533" LastActivityDate="2016-11-02T13:37:32.533" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10981" PostTypeId="1" AcceptedAnswerId="11160" CreationDate="2016-11-02T15:51:06.237" Score="1" ViewCount="3593" Body="&lt;p&gt;I am working with a &lt;a href=&quot;http://literature.rockwellautomation.com/idc/groups/literature/documents/um/2198-um001_-en-p.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Kinetix 5500&lt;/a&gt; servo drive with a rotational actuator to locate a keyway on a shaft. The shaft will rotate, and a laser sensor will detect the height difference when the keyway passes in front of the sensor. I need to record the position of the keyway so I can orient it to a known position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The laser sensor will be wired to Registration Input 1 (see pages 62 and 65 of user manual above), to capture the position of the servo more accurately than using a sensor wired in to the PLC's I/O.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have been able to find little information about how to actually use a registration input in my PLC program. I know there is some sequence that is required to arm the registration input to look for a transition, and then grab the saved servo position from the drive. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How does this process work? Is there &lt;a href=&quot;http://www.rockwellautomation.com/global/literature-library/overview.page?&quot; rel=&quot;nofollow noreferrer&quot;&gt;documentation from Rockwell&lt;/a&gt; that I'm not finding? (I found a programming manual for PowerFlex, but not Kinetix)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additional information: the PLC is an AB ControlLogix, and the drive is connected via Ethernet. I am familiar with setting up, tuning, and issuing Motion Direct commands for Kinetix drives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Related nonexistent tags: &lt;code&gt;Allen-Bradley&lt;/code&gt;, &lt;code&gt;Kinetix&lt;/code&gt;, &lt;code&gt;ControlLogix&lt;/code&gt;&lt;/p&gt;&#xA;" OwnerUserId="15188" LastActivityDate="2017-01-30T17:37:53.673" Title="How to use registration inputs on a Kinetix servo?" Tags="&lt;sensors&gt;&lt;servomotor&gt;&lt;plc&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10982" PostTypeId="1" CreationDate="2016-11-02T17:04:01.043" Score="0" ViewCount="96" Body="&lt;p&gt;I am working on a setup from 2008 with a 6 axis USB motion controller and 4 vsd-e drives very similar to the setup shown &lt;a href=&quot;https://granitedevices.com/oldsite/vsd-e-install&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The motion controller board is exactly the same as in the first post of these two threads, it also says &quot;USB-SPI 6 axis Rev 0&quot; on the PCB:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.cnczone.com/forums/granite-devices/62377-cnc-software-6.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Motion controller board example 1.&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.industryarena.com/forum/low-cost-6-axis-usb-motion-controller--62377.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Motion controller board example 2.&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I have installed GDtool and SimpleMotion library. When trying to connect to the device with GDtool, the first step produces the following output in the event log:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;USB mode configured.&#xA;&#xA;Enabling configure mode.&#xA;Shell command: OPEN NORMAL&#xA;&#xA;Running OPEN...&#xA;Normal mode enabled&#xA;&amp;gt; &#xA;Got input from SPI shell&#xA;Saatiin viesti:  0&#xA;&#xA;Parametreja: 2&#xA; 0&#xA;&#xA;USB mode configured.&#xA;isBootloaderMode&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The second step fails with the message &quot;Connection failed. Please check connections.&quot; and the following output in the event log:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Configuring connection&#xA;Shell command: OPEN&#xA;&#xA;Running OPEN...&#xA;cDevice::sendCommandOnly( 2, 0 )&#xA;0x200008a -&amp;gt; 0x0&#xA;cDevice::sendCommandOnly( 2, 0 )&#xA;0x200008a -&amp;gt; 0x0&#xA;cDevice::sendCommandOnly( 2, 0 )&#xA;0x200008a -&amp;gt; 0x0&#xA;Connection failed.&#xA;&amp;gt; &#xA;Got input from SPI shell&#xA;Saatiin viesti:  0&#xA; 0&#xA;&#xA;Parametreja: 3&#xA; 0&#xA;&#xA;setConnectionStatus&#xA;connected&#xA;Connection failed&#xA; 0&#xA;&#xA;setConnectionStatus&#xA;connected&#xA;Connection failed&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I played around with the example program &quot;SimpleMotionTest&quot; and &quot;FT_Prog&quot; by FTDI to manipulate the USB-controllers Product Description string. The best I could do with SimpleMotionTest was &quot;Communication error. Possibly drive not in SPI mode.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems that the axis names are given by the USB Product Description string, because if axis name in SimpleMotionTest and the descriptor string do not match, it says &quot;USB device with given axis not found.&quot; This makes sense with the Granite Devices tuning cables but not with a 6 axis controller which can only have one Product Descriptor string.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it possible to configure the USB6AX with GDtool? Is it possible to control it with the SimpleMotion library? If yes what am I doing wrong and if no what is the suitable configuration utility and how can I interface the controller with my LabView/C++/... application?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If anyone is out there who still uses the same controller thanks you for sharing you experiences!&lt;/p&gt;&#xA;" OwnerUserId="15190" LastEditorUserId="10596" LastEditDate="2016-11-03T12:44:44.337" LastActivityDate="2021-04-18T06:59:04.160" Title="Problems connecting to the Granite Devices USB6AX motion controller" Tags="&lt;servomotor&gt;&lt;usb&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10983" PostTypeId="1" AcceptedAnswerId="10991" CreationDate="2016-11-03T08:15:48.347" Score="3" ViewCount="889" Body="&lt;p&gt;I am working on implementing a Kalman filter for position and velocity estimation of a quadcopter using IMU and vision. First I am trying to use the IMU to get position and velocity.&#xA;In a tutorial [1] the process model for velocity estimation using IMU sensor data is based on Newton's equation of motion&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;v = u + at \\&#xA;\\ &#xA;\begin{bmatrix} &#xA;\dot{x} \\ &#xA;\dot{y} \\ &#xA;\dot{z} &#xA;\end{bmatrix}_{k+1} = \begin{bmatrix} &#xA;\dot{x} \\ &#xA;\dot{y} \\ &#xA;\dot{z} &#xA;\end{bmatrix}_{k} + \begin{bmatrix} &#xA;\ddot{x} \\ &#xA;\ddot{y} \\ &#xA;\ddot{z} &#xA;\end{bmatrix}_k \Delta T&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;while in the paper [2] the process model uses angular rates along with acceleration to propagate the linear velocity based on the below set of equations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/WDhbF.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/WDhbF.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{bmatrix} &#xA;u \\ &#xA;v \\ &#xA;w \\&#xA;\end{bmatrix}_{k+1} = \begin{bmatrix} &#xA;u \\ &#xA;v \\ &#xA;w \\&#xA;\end{bmatrix}_{k} + \begin{bmatrix} &#xA;0&amp;amp; r&amp;amp; -q \\ &#xA;-r&amp;amp; 0&amp;amp; p \\ &#xA;-p&amp;amp; q&amp;amp; 0 &#xA;\end{bmatrix} \begin{bmatrix} &#xA;u \\ &#xA;v \\ &#xA;w \\&#xA;\end{bmatrix}_{k} \Delta T+ \begin{bmatrix} &#xA;a_x \\ &#xA;a_y \\ &#xA;a_z \\&#xA;\end{bmatrix}_{k} \Delta T + \begin{bmatrix} &#xA;g_x \\ &#xA;g_y \\ &#xA;g_z \\&#xA;\end{bmatrix}_{k} \Delta T&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;where u, v, w are the linear velocities | p, q, r are the gyro rates while a_x,a_y,a_z are the acceleration |  g_x,g_y,g_z are the gravity vector&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why do we have two different ways of calculating linear velocities? Which one of these methods should I use when modeling a quadcopter UAV motion?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[1] &lt;a href=&quot;http://campar.in.tum.de/Chair/KalmanFilter&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://campar.in.tum.de/Chair/KalmanFilter&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[2] Shiau, et al. Unscented Kalman Filtering for Attitude Determination Using Mems Sensors Tamkang Journal of Science and Engineering, Tamkang University, 2013, 16, 165-176&lt;/p&gt;&#xA;" OwnerUserId="15192" LastEditorUserId="9720" LastEditDate="2016-11-04T20:29:47.597" LastActivityDate="2016-11-04T21:17:33.573" Title="What kinematic equations should I use for Kalman filter state propagation in IMU based quadcopter navigation?" Tags="&lt;quadcopter&gt;&lt;kalman-filter&gt;&lt;kinematics&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="10985" PostTypeId="2" ParentId="1170" CreationDate="2016-11-03T10:13:18.600" Score="3" Body="&lt;p&gt;You asked two questions.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Where does Gazebo set the default model path&lt;/li&gt;&#xA;&lt;li&gt;Where should I set the value&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The second question is perfectly right answered by @Armin Meisterhirn. Best practice is to set the variable in the .bashrc file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first question, I asked myself as well when starting working with gazebo.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case of the pure Gazebo (no roslaunch, no plugins) the answer is as simple as that:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the source code. Gazebo always sets an additional path which is the default value.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Look &lt;a href=&quot;https://bitbucket.org/osrf/gazebo/src/ec2881681a3e1b075cf512f83ea39ad2c356cdce/gazebo/common/SystemPaths.cc?at=default&amp;amp;fileviewer=file-view-default&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Line 84:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;this-&amp;gt;modelPaths.push_back(home + &quot;/.gazebo/models&quot;);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;As a result, you always have a default path, whatever you do (except you change the source code).&lt;/p&gt;&#xA;" OwnerUserId="13668" LastEditorUserId="10596" LastEditDate="2016-11-03T16:17:59.953" LastActivityDate="2016-11-03T16:17:59.953" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10987" PostTypeId="1" AcceptedAnswerId="10988" CreationDate="2016-11-03T17:08:45.560" Score="1" ViewCount="76" Body="&lt;p&gt;Must the operation of a PLC (programmable logic controller) be halted while its logic is being changed or can new logic be downloaded to it during runtime, without memory loss, giving a seamless transition from one operation cycle to other?&lt;/p&gt;&#xA;" OwnerUserId="15199" LastEditorUserId="10748" LastEditDate="2016-11-03T17:41:56.410" LastActivityDate="2016-11-05T21:23:15.590" Title="Do you have to stop a programmable logic controller to update its logic?" Tags="&lt;industrial-robot&gt;&lt;plc&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10988" PostTypeId="2" ParentId="10987" CreationDate="2016-11-03T17:28:58.877" Score="4" Body="&lt;p&gt;The function you are looking is called online change (e.g. &lt;a href=&quot;http://infosys.beckhoff.com/english.php?content=../content/1033/tc3_userinterface/html/online_change.htm&amp;amp;id=&quot; rel=&quot;nofollow noreferrer&quot;&gt;Beckhoff Online Change&lt;/a&gt;), at least by some PLC Manufacturers. If you change a few blocks (in case of FBD) or a few contacts (in case of LAD) or a few lines of code (in case of IL or ST) you can do it online by most major PLC manufacturers. (Siemens, Beckhoff and the Codesys world has this functionality). Usually you can only change or add some blocks or owerwrite memory addresses. Adding new (large) program parts usually requires arestart. You can only use this functionality if you have the exact version of the PLC program which is running on the PLC. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The sequence is not exactly as you mentioned. You have to open the PLC Program in the IDE and go online (in monitoring mode) with the running PLC. Now you can change blocks and apply the changes. Diffrent PLCs from different manufacurers behave differently, but if you have to press &quot;upload&quot; (or dowload) to PLC button or similar in most cases it will loose data stored in volatile memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would advise to always make a test first with that specific PLC and IDE (same version and firmware if possible) if memory is lost before attempting to change a live system (where critical data can be lost) this way! &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further example:&#xA;&lt;a href=&quot;https://www.youtube.com/watch?v=NTNezaY3RLM&quot; rel=&quot;nofollow noreferrer&quot;&gt;Siemens S7-200 Edit in Run Mode:&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2016-11-03T17:43:13.543" LastActivityDate="2016-11-03T17:43:13.543" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="10989" PostTypeId="2" ParentId="10961" CreationDate="2016-11-03T18:28:17.690" Score="-1" Body="&lt;p&gt;Both previous answers 'could' be accurate re the &quot;pump looking things&quot; in that they say they are hydraulic springs/dampeners such as you would find on a hatch back rear door, the point of them as mentioned is to reduce the apparent load e.g. if your robots forearm weighs 20Lb and you want to lift a weight of 1Lb the motor would need to apply 21Lb of force but put a 20Lb spring on it and the spring supports the arm and the motor only needs to lift 1Lb.  It is also possible they could be hydraulic or pneumatic actuators (hydraulic using oil or water, pneumatic using gas, normally Co2), the liquid or gas is pushed into the cylinder which then forces the rod forward and the rod moves forward at a greater force than the pressure in the cylinder (bore or diameter of the cylinder is greater than the width of the rod so you achieve mechanical advantage - you find these on JCB diggers or tipper trucks.  You can see both spring and actuator cylinders in the photo of my robot, the spring is the one holding the body shell open and the flipper actuator can been seen at the bottom of the robot.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/tdCta.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tdCta.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;Again both previous answers are correct re the 'Bit at the back' but just to point out linkages may be powered or unpowered, unpowered linkages are simply used to manage axis at the end of an arm section, in the pic below axis A &amp;amp; B will always remain parallel as will C &amp;amp; D.  If you were to increase the length of D then A would tilt up away from the B axis as A moves forward.  Adding a motor into the linkage can allow finer movement or greater dexterity for the arm.  The linkage in the final pic is being used to drive a spike forward and down as the rear flipper goes up. Just to say there's absolutely nothing wrong with previous answers, I just wanted to let you know there are additional possibilities and show some practical applications&lt;a href=&quot;https://i.stack.imgur.com/xSRTC.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xSRTC.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/neu1a.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/neu1a.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="14941" LastActivityDate="2016-11-03T18:28:17.690" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="10990" PostTypeId="2" ParentId="10982" CreationDate="2016-11-04T14:02:15.940" Score="0" Body="&lt;p&gt;The USB6AX never was finished, and it is not supported. It cannot be configured with the SimpleMotion field bus.&lt;/p&gt;&#xA;" OwnerUserId="13118" LastEditorUserId="37" LastEditDate="2017-03-09T11:10:05.337" LastActivityDate="2017-03-09T11:10:05.337" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10991" PostTypeId="2" ParentId="10983" CreationDate="2016-11-04T21:17:33.573" Score="3" Body="&lt;p&gt;The first form, from both the math and the webpage to which you link, is for &lt;strong&gt;linear motion only&lt;/strong&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Tie a string to a rock. Swing the rock around in a circle above your head at a constant speed. If you cut the string, the rock flies &lt;strong&gt;outward&lt;/strong&gt; because the centripetal force is no longer present to &quot;pull&quot; the rock onto the circular path. That is, the &quot;forward&quot; force is zero, because the rock is moving at a constant speed, but the &quot;sideways&quot; force is $mv^2/r$, the centrifugal force. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Put an accelerometer on a car. X-axis points forward and y-axis points out the right window. Drive the car around in a circle at a constant speed. The &quot;forward&quot; force is zero because the car is moving at constant speed. The &quot;sideways&quot; force is again $mv^2/r$, and is what causes the car to &quot;hug&quot; the curve. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you were reading the output from an accelerometer, though, you would see that $a_x = 0$ and, from $F=ma$ and $F=mv^2/r$ for centripetal forces, you would see that $a_y = (mv^2/r)/m = v^2/r$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That is, you will see an &lt;em&gt;apparent&lt;/em&gt; acceleration on the &lt;strong&gt;y&lt;/strong&gt;-axis that is used to &quot;bend&quot; the forward velocity of the vehicle around the curve. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem here is that the y-axis acceleration is &lt;strong&gt;constant&lt;/strong&gt; while you are moving at constant speed around a circle of constant radius. That is, if you were to double-integrate the y-axis acceleration, then it would &lt;em&gt;appear&lt;/em&gt; that the vehicle is accelerating &lt;strong&gt;to the right&lt;/strong&gt; when in reality the vehicle is moving in a &lt;strong&gt;circle&lt;/strong&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The y-axis centripetal force &quot;bends&quot; the x-axis about the z-axis, so the correct way to account for this is to &lt;strong&gt;apply the yaw rate&lt;/strong&gt; to the y-axis acceleration.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-11-04T21:17:33.573" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10992" PostTypeId="2" ParentId="10972" CreationDate="2016-11-04T22:10:34.260" Score="1" Body="&lt;p&gt;The movement you are seeing is what I would expect to see if your ground was rising becouse of current draw. Basically as you turn on more servos you will see there current draw will make the apparent voltage drop and the pulses for PWM grow more indistinct, digital servos will generally still work ok but analog servos like you have will stutter as you show. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to resolve this problem I would suggest you wire up the power in a more robust way directly connecting much larger gauge wire to your servo boards and your power supply, definitely not through a breadboard, and possibly installing &lt;a href=&quot;https://www.sparkfun.com/products/8982&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;thease&quot;&gt;thease&lt;/a&gt; capacitors in the provided spots on the boards&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2016-11-04T22:10:34.260" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10994" PostTypeId="1" CreationDate="2016-11-05T10:56:11.907" Score="1" ViewCount="344" Body="&lt;p&gt;I have short question about the alexmos gimbal controller. The Controller receives the gyroscope and accelerometer sensor data from the IMU, that is mounted on the camera. In optimal case, the camera should stay in perfect position, which means, that there would be no gyroscope data, since there is no movement. So the only data for positioning would be the accelerometer. Is there a second IMU onboard that receives the gyrometer data?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All the gimbal controllers from aliexpress seems not to have an IMU onboard, but it that case the controller can only use the accelerometer, right?&lt;/p&gt;&#xA;" OwnerUserId="13043" LastEditorUserId="13043" LastEditDate="2016-11-05T11:20:04.050" LastActivityDate="2020-08-19T07:01:10.147" Title="IMU in a gimbal system" Tags="&lt;motor&gt;&lt;imu&gt;&lt;cameras&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="10995" PostTypeId="2" ParentId="10987" CreationDate="2016-11-05T21:23:15.590" Score="1" Body="&lt;p&gt;Definitely possible on +90% of modern PLC's (example, Allen-Bradley compactlogix permits but Allen-Bradley micrologix 1500 does not) with some limitations.  Normally just modifying existing logic is feasible, sometimes with a test mode, however modifying memory allocation or hardware configuration is locked until the plc is out of run state.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Normally online changes actually write the new module elsewhere in the controller memory and make the program jump over the old one.  Over time the program can become fragmented, which usually has a negligible impact but limits the amount of online changes that can be done in a controller without a 'clean up' or 'rebuild all', finally requiring a plc stop and full download.&lt;/p&gt;&#xA;" OwnerUserId="14775" LastActivityDate="2016-11-05T21:23:15.590" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="10996" PostTypeId="2" ParentId="10994" CreationDate="2016-11-06T00:45:24.883" Score="0" Body="&lt;p&gt;I am not familiar with the gimbal controller you are using, but you cannot stabilize a gimbal with only an accelerometer. You must be able to measure the states or change in states of the gimbal for stabilization. Can you please provide a link to the controller you have the question about.&lt;/p&gt;&#xA;" OwnerUserId="15213" LastActivityDate="2016-11-06T00:45:24.883" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="10997" PostTypeId="2" ParentId="10941" CreationDate="2016-11-06T00:59:06.787" Score="1" Body="&lt;p&gt;I believe using a grid map will only decrease the accuracy of you estimates. I am assuming your feature map is basically a vector containing the position of each feature as real values. If you convert you feature to a grid map (occupancy grid), then you will be shifting every feature into a grid cell. This will result in a loss of resolution because the grid cells are discrete. To generate an occupancy grid, you need to first choose a resolution. So, let each cell represent a 1 meter by 1 meter area, and then you can simply assign a 1 to any cell containing a landmark and assign a 0 to any cell not containing a landmark.&lt;/p&gt;&#xA;" OwnerUserId="15213" LastActivityDate="2016-11-06T00:59:06.787" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10998" PostTypeId="1" AcceptedAnswerId="10999" CreationDate="2016-11-06T01:36:24.547" Score="3" ViewCount="2839" Body="&lt;p&gt;I have an RRR planar robot:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/RpyqM.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/RpyqM.png&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Its forward kinematics transform is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;{}^{0}T_3 = \\ \left[\begin{array}{cccc} \cos\!\left(\mathrm{\theta_1} + \mathrm{\theta_2} + \mathrm{\theta_3}\right) &amp;amp; - \sin\!\left(\mathrm{\theta_1} + \mathrm{\theta_2} + \mathrm{\theta_3}\right) &amp;amp; 0 &amp;amp; \mathrm{l_2}\, \cos\!\left(\mathrm{\theta_1} + \mathrm{\theta_2}\right) + \mathrm{l_1}\, \cos\!\left(\mathrm{\theta_1}\right) + \mathrm{l_3}\, \cos\!\left(\mathrm{\theta_1} + \mathrm{\theta_2} + \mathrm{\theta_3}\right)\\ \sin\!\left(\mathrm{\theta_1} + \mathrm{\theta_2} + \mathrm{\theta_3}\right) &amp;amp; \cos\!\left(\mathrm{\theta_1} + \mathrm{\theta_2} + \mathrm{\theta_3}\right) &amp;amp; 0 &amp;amp; \mathrm{l_2}\, \sin\!\left(\mathrm{\theta_1} + \mathrm{\theta_2}\right) + \mathrm{l_1}\, \sin\!\left(\mathrm{\theta_1}\right) + \mathrm{l_3}\, \sin\!\left(\mathrm{\theta_1} + \mathrm{\theta_2} + \mathrm{\theta_3}\right)\\ 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0\\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \end{array}\right]&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the joint parameters $q = \left[\begin{array}{ccc} \mathrm{\theta_1} &amp;amp; \mathrm{\theta_2} &amp;amp; \mathrm{\theta_3} \end{array}\right]^T$ and the end-effector position $X = \left[\begin{array}{ccc} \mathrm{x} &amp;amp; \mathrm{y} &amp;amp; \mathrm{\theta} \end{array}\right]^T$. $\theta$ is constrained to 0. (Also the image is misleading, $\theta$ is actually $\theta_1 + \theta_2 + \theta_3$.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The jacobian matrix is&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;J = \\ \left[\begin{array}{ccc}  - \mathrm{l_2}\, \sin\!\left(\mathrm{\theta_1} + \mathrm{\theta_2}\right) - \mathrm{l_1}\, \sin\!\left(\mathrm{\theta_1}\right) - \mathrm{l_3}\, \sin\!\left(\mathrm{\theta_1} + \mathrm{\theta_2} + \mathrm{\theta_3}\right) &amp;amp;  - \mathrm{l_2}\, \sin\!\left(\mathrm{\theta_1} + \mathrm{\theta_2}\right) - \mathrm{l_3}\, \sin\!\left(\mathrm{\theta_1} + \mathrm{\theta_2} + \mathrm{\theta_3}\right) &amp;amp; - \mathrm{l_3}\, \sin\!\left(\mathrm{\theta_1} + \mathrm{\theta_2} + \mathrm{\theta_3}\right)\\ \mathrm{l_2}\, \cos\!\left(\mathrm{\theta_1} + \mathrm{\theta_2}\right) + \mathrm{l_1}\, \cos\!\left(\mathrm{\theta_1}\right) + \mathrm{l_3}\, \cos\!\left(\mathrm{\theta_1} + \mathrm{\theta_2} + \mathrm{\theta_3}\right) &amp;amp; \mathrm{l_2}\, \cos\!\left(\mathrm{\theta_1} + \mathrm{\theta_2}\right) + \mathrm{l_3}\, \cos\!\left(\mathrm{\theta_1} + \mathrm{\theta_2} + \mathrm{\theta_3}\right) &amp;amp; \mathrm{l_3}\, \cos\!\left(\mathrm{\theta_1} + \mathrm{\theta_2} + \mathrm{\theta_3}\right)\\ 1 &amp;amp; 1 &amp;amp; 1 \end{array}\right]&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm trying to find $\ddot{q}$:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;[\ddot{q}] = J^{-1}(q) \cdot \left([\ddot{X}] - \dot{J}(q) \cdot J^{-1}(q) \cdot [\dot{X}] \right)&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is: how can I find $\dot{J}$? &lt;em&gt;What&lt;/em&gt; is it?&lt;/p&gt;&#xA;" OwnerUserId="14902" LastEditorUserId="14902" LastEditDate="2016-11-06T01:43:09.667" LastActivityDate="2019-02-24T02:46:45.830" Title="Derivative of a Jacobian matrix" Tags="&lt;kinematics&gt;&lt;inverse-kinematics&gt;&lt;jacobian&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="10999" PostTypeId="2" ParentId="10998" CreationDate="2016-11-06T01:49:18.340" Score="2" Body="&lt;p&gt;Look at example 283 and its derivation &lt;a href=&quot;http://www.d.umn.edu/~rlindek1/ME4135_11/ch_10.pdf&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;.  You just take the time derivative of each element of &lt;em&gt;J,&lt;/em&gt; paying particular attention to the chain rule.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2016-11-06T01:49:18.340" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11003" PostTypeId="1" CreationDate="2016-11-06T16:39:57.883" Score="0" ViewCount="825" Body="&lt;p&gt;I'm attempting to build a robot that leverages a particle filter to identify where it is relative to a map that is known. The robot only has IR sensors, so while it is able to determine its distance from landmarks, it does not know what landmark it is &quot;looking&quot; at.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm following &lt;a href=&quot;http://nbviewer.jupyter.org/github/rlabbe/Kalman-and-Bayesian-Filters-in-Python/blob/master/12-Particle-Filters.ipynb#Update-Step&quot; rel=&quot;nofollow noreferrer&quot;&gt;this very helpful book&lt;/a&gt; to build my particle filter. In incorporating the sensor measurements, it is assumed that you know both the distance to a landmark and which specific landmark you are looking at. What would need to be done if you know the map and distance measurements, but not the specific landmark that you're observing? Would this require SLAM? Or could you simply increase the probability for particles that are about that distance from a landmark?&lt;/p&gt;&#xA;" OwnerUserId="15223" LastActivityDate="2016-11-21T10:40:31.243" Title="How to implement a particle filter when sensors can't identify landmarks?" Tags="&lt;slam&gt;&lt;wheeled-robot&gt;&lt;kalman-filter&gt;&lt;particle-filter&gt;&lt;two-wheeled&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11006" PostTypeId="2" ParentId="10998" CreationDate="2016-11-07T02:04:45.913" Score="2" Body="&lt;p&gt;You can use Matlab to compute $\dot{J}$. For example, to compute $\dot{J}_{11}$, we can use the following code &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;clear all&#xA;clc&#xA;syms T1 T2 T3 l1 l2 l3 t&#xA;&#xA;T1(t) = symfun(sym('T1(t)'), t);&#xA;T2(t) = symfun(sym('T2(t)'), t);&#xA;T3(t) = symfun(sym('T3(t)'), t);&#xA;&#xA;J11 = -l2*sin(T1(t)+T2(t)) - l1*sin(T1(t)) -l3*sin(T1(t)+T2(t)+T3(t));&#xA;&#xA;dJ11dt = diff(J11,t)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;which yields &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;- l3*cos(T1(t) + T2(t) + T3(t))*(diff(T1(t), t) + diff(T2(t), t) + diff(T3(t), t)) - l1*cos(T1(t))*diff(T1(t), t) - l2*cos(T1(t) + T2(t))*(diff(T1(t), t) + diff(T2(t), t))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Or &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\dot{J}_{11} = -l_3\cos(\theta_1 + \theta_2 + \theta_3)(\dot{\theta}_1+\dot{\theta}_2+\dot{\theta}_3) - l_1\cos(\theta_1) \dot{\theta}_1 - l_2\cos(\theta_1+\theta_2)(\dot{\theta}_1+\dot{\theta}_2)&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now it is easy to compute the rest. &lt;/p&gt;&#xA;" OwnerUserId="2155" LastActivityDate="2016-11-07T02:04:45.913" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="11008" PostTypeId="1" CreationDate="2016-11-07T09:00:07.210" Score="1" ViewCount="88" Body="&lt;p&gt;From my understanding Whole body control is built upon Computed Torque control. What is the difference between the two? What is the way for whole body control if the dynamic model is not available?&lt;/p&gt;&#xA;" OwnerUserId="15231" LastActivityDate="2016-11-07T12:53:37.847" Title="How is whole body control different from computed torque control?" Tags="&lt;control&gt;&lt;humanoid&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11010" PostTypeId="1" AcceptedAnswerId="11012" CreationDate="2016-11-07T11:16:16.890" Score="2" ViewCount="551" Body="&lt;p&gt;Recently i am working on a hydraulic control system of a vehicle. But in this system I don't have any mathematical modeling of the system so i am not able to get any state space model for the given system. I have to control the length of Piston in Hydraulic Cylinder by giving input of desired piston position. Modeling of this system is established in Matlab/Simulink using physical modeling tools SimScape Toolbox and simFluids. As one approach i had already try to apply a feedback with P-control as show in the figure&lt;a href=&quot;https://i.stack.imgur.com/4lTfB.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt; Matlab System &lt;/a&gt; and also the gain of P control is derived by trial and error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now if i want to apply state obeserver or optimal Control than how can i apply on this given system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And is necessary to derive mathematical model of this system to desing controller?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank You.&lt;/p&gt;&#xA;" OwnerUserId="15026" LastActivityDate="2017-02-04T21:54:45.460" Title="How can I apply different control approach without having a state space model?" Tags="&lt;control&gt;&lt;matlab&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11011" PostTypeId="1" CreationDate="2016-11-07T11:54:30.457" Score="0" ViewCount="103" Body="&lt;p&gt;I have a Sick laser scanner LMS 100 attached with my robot which scans the environment. Data acquistion is already done for the laser scanner and now  Encoder sensor attached on the wheel gives the distance travelled by the robot. A map in indoor room is already given in our case which consists of 3 landmarks.I am working in Labview environment.My question is now how can i localize the robot based on distance and angle? &lt;/p&gt;&#xA;" OwnerUserId="14925" LastActivityDate="2016-11-09T01:21:27.047" Title="Hi i am working on this project regarding localization of a mobile robot using laser scanner and odometry ( encoder sensors) using labview" Tags="&lt;slam&gt;" AnswerCount="2" CommentCount="0" ClosedDate="2016-11-22T14:39:25.307" ContentLicense="CC BY-SA 3.0" />
  <row Id="11012" PostTypeId="2" ParentId="11010" CreationDate="2016-11-07T11:58:17.947" Score="6" Body="&lt;p&gt;Many control strategegies (PID is not neceserily one of these) are computing some of their parameters from your system. If you do not want to model your system yourself (or play around with it until you identify its charecteristics) you can use Matlab to identify your system model using the system identification toolbox. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://www.mathworks.com/products/sysid/index.html?s_tid=gn_loc_drop&quot; rel=&quot;nofollow noreferrer&quot;&gt;System Identification Toolbox&lt;/a&gt; will give generate some inputs for your system and will record the responce for these. Based on this it will generate a simplfyied model which can be used to represent your system. It is simplifyed but in many cases it works well as a substitute. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When having this identifyed model you can freely implement any control strategy using the equations given after the system identification process. &lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2016-11-07T11:58:17.947" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11013" PostTypeId="2" ParentId="11008" CreationDate="2016-11-07T12:03:03.703" Score="1" Body="&lt;p&gt;&lt;a href=&quot;http://www.ieee-ras.org/whole-body-control&quot; rel=&quot;nofollow noreferrer&quot;&gt;Whole body control (WBC)&lt;/a&gt; refers to how to control antropmorph structure (as a system), while the &lt;a href=&quot;http://mars.uta.edu/me5337/reference/CTpidI.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;computed torque control (CTC)&lt;/a&gt; is a method to compute the torque in 1 single joint (i.e. to control 1 element in a system). Computed torque control can be used only is you have an (inverse) dynamic model. I cannot comment on the question of using WBC without a dynamic model, I am not aware of any possiblities to do so. &lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2016-11-07T12:53:37.847" LastActivityDate="2016-11-07T12:53:37.847" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11014" PostTypeId="2" ParentId="11011" CreationDate="2016-11-07T13:21:40.990" Score="1" Body="&lt;p&gt;If I understand correctly you have 2 point clouds, one complete map and one partial scan of the environment. The &lt;a href=&quot;https://en.wikipedia.org/wiki/Iterative_closest_point&quot; rel=&quot;nofollow noreferrer&quot;&gt;Iterative Closes point method&lt;/a&gt; (used in SLAM Methods) can give you the your postion on the map based on the partial scan. &lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2016-11-07T13:21:40.990" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11015" PostTypeId="2" ParentId="6642" CreationDate="2016-11-07T14:40:33.733" Score="0" Body="&lt;p&gt;There is no difference between the two types that you mention. In fact my problem is understanding why you are able to distinguish them in your mind (honestly I don't understand, sorry for this), since there is no mathematical difference between them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;True that nonautonomous systems can be made autonomous by adding some variables (some equations) but you need to know what you are doing because often adding these equations (it need not be $t'=1$ the type of stability changes).&lt;/p&gt;&#xA;" OwnerUserId="15235" LastActivityDate="2016-11-07T14:40:33.733" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11016" PostTypeId="1" CreationDate="2016-11-07T16:41:06.427" Score="0" ViewCount="975" Body="&lt;p&gt;Following my last question which confirmed that you can change the logic on a PLC while it is running, I'm now trying to understand the timings with which this happens.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Say that a PLC is sent a command to update its logic (I'm assuming that this can be done without using the PLC programming software, but could be wrong), and that the new, pending program code is stored in an area of memory which program execution then switches to when all of the new logic has been downloaded onto it. My questions are this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) Does a command need to be sent to switch to the new logic, or does this happen automatically once it has been downloaded?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) Will the PLC switch to the new logic at the start of the next &lt;strong&gt;scan cycle&lt;/strong&gt; (i.e. before that scan cycle's input scan), or at the start of the &lt;strong&gt;logic scan&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3) Would it always be that the new logic takes effect the scan cycle after it has finished being downloaded, or could there be a delay? I am trying to look for timing relationships between the networking data and the updated PLC logic, so need to be strict.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If anyone knows of any documentation for commands to update a PLC's logic while it is still running could they please point me to it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many thanks.&lt;/p&gt;&#xA;" OwnerUserId="15199" LastActivityDate="2016-11-09T22:51:55.213" Title="Changing the logic on a PLC while it is running - exact timings" Tags="&lt;plc&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11017" PostTypeId="2" ParentId="11016" CreationDate="2016-11-07T17:03:19.657" Score="2" Body="&lt;p&gt;Preface - I don't know of any way to program or download a PLC without using the associated programming software. Industrial PLCs are not cheap and generally not open source (that is, there is no API or other documentation on how to implement your own version of their programming software). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As mentioned in an answer your earlier question, the changes you are allowed to make without stopping the controller are generally limited to what is referred to as a &quot;word for word&quot; change, which means you can typically only replace one hard-coded constant for another. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, to your questions:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Like I mention above, you're generally changing one address with one address, or the contents of one register with one new register. There can be a list of changes like this, but that's the scope of what you're allowed to do. Changing &lt;em&gt;logic&lt;/em&gt;, or the flow of the PLC, usually requires restarting. The changeover happens at the end of downloading, but I don't know this happens or what the trigger looks like; as I mentioned there's no explicit definition (that I've seen) of what the packet structure looks like for downloading software.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I don't know what you mean when you call &quot;logic scan&quot; and &quot;scan cycle&quot; as two different terms. I don't think the change would happen mid-scan, but I could be wrong. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I don't know if there could be a delay. Simple PLC code I work on has a sweep time of 10-15ms, complex PLC code has a sweep time of 30-40ms. This is a negligible amount of time relative to the amount of time to download new code, even if it IS just a word-for-word change. That word-for-word change may take 2-3 seconds to download, but that's maybe 100 cycles of the PLC. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I don't know what you're trying to do, but there shouldn't be any time where you're relying on downloading and re-downloading PLC code down and expecting to get timing accuracy down to the individual sweep cycle. Get an I/O card and toggle a switch, or write a message and toggle a bit, etc., if you need timing that close.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More background on what you're trying to do would be helpful. From your questions, &quot;I'm looking for timing relationships between the networking data and the updated PLC logic&quot; - again, I don't know &lt;strong&gt;WHY&lt;/strong&gt; you care about this, downloading is a horrible way to switch code (that's what a &lt;code&gt;switch&lt;/code&gt; statement is for, or a &lt;a href=&quot;https://en.wikipedia.org/wiki/Finite-state_machine&quot; rel=&quot;nofollow noreferrer&quot;&gt;state machine&lt;/a&gt;), but what I would do would look like this pseudo-code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;loopCount = loopCount+1;&#xA;myConst = 5;&#xA;TCP_WRITE(loopCount, myConst);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You continuously read messages coming off the PLC. Each message gets 1) a number that increments every sweep, and 2) a number that is fixed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You update the PLC code to change myConst from 5 to 6 or anything else, download the change, and see how many cycles elapse between when you push download and when &lt;code&gt;myConst&lt;/code&gt; changes. You can have multiple constants, change them all, and see if they all update simultaneously or if &lt;code&gt;loopCount&lt;/code&gt; increments between updates. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But again, seriously, don't expect to ever be able to reliably download logic to the individual sweep precision.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-11-07T17:03:19.657" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11019" PostTypeId="1" AcceptedAnswerId="11023" CreationDate="2016-11-08T01:35:05.773" Score="2" ViewCount="455" Body="&lt;p&gt;I am trying to write some simple code to perform IK for a 6 DoF redundant robot using the Jacobian pseudo-inverse method. I can solve IK for a desired pose using the iterative method, and I want to now focus on applying constraints to the solution. Specifically I'm interested in &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Keep the end effector orientation constant as the robot moves from initial to final pose  &lt;/li&gt;&#xA;&lt;li&gt;Avoid obstacles in the workspace&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I've read about how the redundancy/null space of the Jacobian can be exploited to cause internal motions that satisfy desired constraints, while still executing the trajectory, but I am having trouble implementing this as an algorithm. For instance, my simple iterative algorithm looks like&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;error = pose_desired - pose_current;&#xA;q_vel = pinv(J)*error(:,k);&#xA;q = q + q_vel;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where $q$ is 'pushed' towards the right solution, updated until the error is minimized. But for additional constraints, the equation (Siciliano, Bruno, et al. Robotics: modelling, planning and control) specifies &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\dot{q} = J^\dagger*v_e - (I-J^\dagger J)\dot{q_0}&#xA;\\&#xA;\dot{q_0} = k_0*(\frac{\partial w(q)}{\partial q})^T  &#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $w$ is supposed to be a term that minimizes/maximizes a chosen constraint. I don't understand the real world algorithmic implementation of this 'term' in the context of my desired constraints: so if I want to keep the orientation of my end effector constant, how can I define the parameters $w$, $q_0$ etc.? I can sense that the partial derivative signifies that it is representing the difference between how the current configuration and a future configuration affect my constraint, and can encourage 'good' choices, but not more than that.&lt;/p&gt;&#xA;" OwnerUserId="10310" LastEditorUserId="10748" LastEditDate="2016-11-08T08:46:07.763" LastActivityDate="2016-11-08T11:00:25.450" Title="Inverse kinematics: how to specify TCP constraints in an iterative algorithm?" Tags="&lt;inverse-kinematics&gt;&lt;matlab&gt;&lt;manipulator&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11020" PostTypeId="2" ParentId="11019" CreationDate="2016-11-08T02:22:46.700" Score="2" Body="&lt;p&gt;The pseudoinverse (Moore-Penrose inverse) provides the solution which is minimum in a least-squares sense.  It is rather similar to the Simplex method in that sense.  You need some type of optimization such as this to coordinate the extra axes of motion while posing the end effector at the desired position and orientation.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To also optimize a run-time constraint, you take advantage of the null space of J.  That is your term multiplying $\dot{q_0}.$  Frankly it doesn't really matter what $\omega$ is, in terms of the position and orientation of the end effector.  The idea is that &lt;em&gt;any&lt;/em&gt; constraint $\omega$ only results in &lt;em&gt;self-motion&lt;/em&gt; of the manipulator, which does not change the end effector's pose.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Look up John Ballieul's work for excellent descriptions of the use of the null space of $J$ for these purposes.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2016-11-08T02:22:46.700" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11021" PostTypeId="2" ParentId="6642" CreationDate="2016-11-08T04:36:08.543" Score="1" Body="&lt;p&gt;You have the definition of &quot;nonautonomous&quot; incorrect. Please consult authoritative  references on control theory such as one by Sastry, Khalil or Slotine and Li&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://math.stackexchange.com/questions/2003462/time-varying-and-nonautonomous-dynamical-systems-and-their-lyapunov-analysis/2004607#2004607&quot;&gt;Here is a brief summary of the terms&lt;/a&gt; as copied from math stackexchange&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A system is &lt;strong&gt;time invariant&lt;/strong&gt; if the system parameters does not depend on time&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These systems are represented by:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\dot x = f(x,u), \dot x = f(x)$$ or when the system is linear $$\dot x = Ax + Bu, \dot x = Ax$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A system is &lt;strong&gt;time varying&lt;/strong&gt; if the system parameters does depend on time&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These systems are represented by:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\dot x = f(x,u,t)$$ or $$\dot x = A(t) x + B(t)u$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a RLC circuit, $A(t)$ could represent the matrix containing time varying capacitance, inductance or resistance. Similarly, for a mass-spring-damper system, $A(t)$ could represent time varying damping, friction, and mass. Of course, all real system are time varying albeit on the scale of hours, years, or even millennia.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A (time invariant) system is &lt;strong&gt;autonomous&lt;/strong&gt; if the input $u$ is a function of the state:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These systems are represented by:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\dot x = f(x,u(x)) = f(x)$$ or $$\dot x = Ax + Bu(x) = (A-BK)x$$ Supposing that we are using feedback $u = -Kx$. Any state feedback systems are autonomous, because your input $u$ is a function of your state. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And you might have guessed it, a (time invariant) &lt;strong&gt;non-autonomous&lt;/strong&gt; system is when your input is not a function of the state &lt;/p&gt;&#xA;&#xA;&lt;p&gt;These systems are represented by:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\dot x = f(x,u)$$ or $$\dot x = Ax + Bu$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, $u$ could be the irradiation of the sun hitting a solar panel, where as $x$ encapsulates the states of the solar panel. The solar panel is not going to affect sunshine or the sun for that matters, or the cloud passing the sun. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;For your question, you (most likely)* cannot use the Lyapunov function as proposed for your system, namely:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using $$V(x) = \dfrac{1}{2}x^2$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;to prove stability of origin for&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\dot x = -a(t)x$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because your system has time varying parameters. It is autonomous, and time varying.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you need to do is to construct a &lt;strong&gt;time varying Lyapunov function&lt;/strong&gt;, and in the process you will encounter when a  &lt;a href=&quot;http://www.cds.caltech.edu/~murray/courses/cds101/fa02/caltech/mls93-lyap.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Lyapunov function&lt;/a&gt; () is said to be descrescent, etc. Those are not a part of the classical Lyapunov theory, which deals with time-invariant, autonomous system. Your best reference is the control theory text of Slotine and Li.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Note: I am not that familiar with time varying Lyapunov functions&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="10444" LastEditorUserId="-1" LastEditDate="2017-04-13T12:19:24.817" LastActivityDate="2016-11-08T13:20:16.583" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11022" PostTypeId="2" ParentId="11011" CreationDate="2016-11-08T08:07:19.060" Score="0" Body="&lt;p&gt;You can localize the robot using dead reckoning with the encoders alone, but the result would be very inaccurate. What is the representation of the landmarks? Also, what do you mean by localize using distance and angle? Are you saying you have the distance and angle to each landmark? Please provide more information.&lt;/p&gt;&#xA;" OwnerUserId="15213" LastEditorUserId="15213" LastEditDate="2016-11-09T01:21:27.047" LastActivityDate="2016-11-09T01:21:27.047" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11023" PostTypeId="2" ParentId="11019" CreationDate="2016-11-08T08:32:20.873" Score="2" Body="&lt;p&gt;If you want to keep orientation constant, the simplest approach is to, well.. do exactly that. Do not solve for the tartget point and let the joint move along a seemingly arbitratry cartesian path (but infact well defined in joint space). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Solve the inverse kinematics problem for a number of points (depending on your robots precision maybe every milimeter) along a line or any other path shape you need for obstacle avoidance. The line (or other shape) gives you the TCP positions and the orientation, as you require it, should be set constant. You will get joint coordinates for each point on a line. If you feed these squentially to the motors your robot will execute the desired trajectory with the desired orientation. No null space needed. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you do not want to complicate things with additional shapes and IK solving, you can also constrain orientation in your method easily:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead of planning the whole path in one shot like you specified:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;error = pose_desired - pose_current; &#xA;q_vel = pinv(J)*error(:,k); &#xA;q = q+ q_vel;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Break it down to 3 seperate parts&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1 Set the constat orientation you require during the path execution&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;error = postition_current_with_const_orientation - pose_current;&#xA;q_vel = pinv(J)*error(:,k); &#xA;q = q+ q_vel;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If the &lt;code&gt;error&lt;/code&gt; as an RMS value is below a threshold value you can proceed to the next step&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2 Move to the target position (not pose) with the constant orientation&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;error = postition_target_with_const_orientation - pose_current;&#xA;q_vel = pinv(J)*error(:,k); &#xA;q = q+ q_vel;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If the &lt;code&gt;error&lt;/code&gt; as an RMS value is below a threshold value you can proceed to the next step&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3 Orient the TCP for the target orientation to attain the target pose&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;error = pose_target - pose_current;&#xA;q_vel = pinv(J)*error(:,k); &#xA;q = q+ q_vel;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If the &lt;code&gt;error&lt;/code&gt; as an RMS value is below a threshold value you can proceed to the next task/motion&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: Please note that I am not sure why you used &lt;code&gt;error(:,k)&lt;/code&gt; and not just &lt;code&gt;error&lt;/code&gt; but I assumed it has a reason and used it as you did.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2016-11-08T11:00:25.450" LastActivityDate="2016-11-08T11:00:25.450" CommentCount="15" ContentLicense="CC BY-SA 3.0" />
  <row Id="11024" PostTypeId="1" CreationDate="2016-11-09T00:37:16.590" Score="0" ViewCount="1197" Body="&lt;p&gt;Can anyone share their DH parameters for a simple PRP manipulator. I have some confusion in setting up the axes and obtaining a solution.&lt;img src=&quot;https://i.stack.imgur.com/IVXAy.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="15114" LastEditorUserId="15114" LastEditDate="2016-11-09T07:35:24.410" LastActivityDate="2018-08-06T15:01:46.777" Title="DH parameters for PRP manipulator" Tags="&lt;dh-parameters&gt;" AnswerCount="2" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="11027" PostTypeId="2" ParentId="11016" CreationDate="2016-11-09T22:00:50.117" Score="1" Body="&lt;p&gt;I'm not sure I agree with Chuck, or maybe I'm just not following what he's saying, so I'll have a go.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First of all, these questions might be easier to handle with a particular controller in mind, but I'll answer them assuming we're dealing with something mainstream such as Siemens or Allen-Bradley.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can most definitely write an entire new module with hundreds of lines of codes and sometimes even create new variables and DB's (depending on processor) or extensively modify an existing module while a PLC is online and running, with negligible impact to the cycle time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The timing of this will be the PLC will continue to loop through its typical scan/task assignment in parallel with the download.  After download is finished there's going to be some sort of error checking / handshake to make the code is downloaded and complete.  Some PLC's let you download the change, then test it, such as Allen-Bradley.  And conversely you can remove it from test but leave it in the controller.  Others, however, will immediately put it into effect when you download the change.  Regardless of what initiates it, it will happen seemlessly, possibly between cycles, or perhaps if a module is updated prior to it being called in that scan/task cycle, it &lt;em&gt;may&lt;/em&gt; call the new one.  That depends on the controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A possible scenario:&#xA;Cycle 1 (running old logic, downloading in parallel)&lt;br&gt;&#xA;Cycle 2 (running old logic, downloaded finishes during scan)&lt;br&gt;&#xA;Cycle 3 (running new logic)&lt;br&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But regardless, if your concern is if there's a delay in the scan cycle or if the processing is somehow interfered with during download, I would say no in most cases. &lt;/p&gt;&#xA;" OwnerUserId="14775" LastEditorUserId="14775" LastEditDate="2016-11-09T22:51:55.213" LastActivityDate="2016-11-09T22:51:55.213" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11030" PostTypeId="5" CreationDate="2016-11-10T09:16:22.177" Score="0" Body="&lt;p&gt;You might also consider the tags&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;/questions/tagged/machine-learning&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;machine-learning&amp;#39;&quot; rel=&quot;tag&quot;&gt;machine-learning&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;/questions/tagged/geometry&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;geometry&amp;#39;&quot; rel=&quot;tag&quot;&gt;geometry&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;for questions with the Computer vision tag.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;See also&lt;/h2&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Computer_vision&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="11257" LastEditorUserId="11257" LastEditDate="2016-11-10T18:44:29.700" LastActivityDate="2016-11-10T18:44:29.700" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11031" PostTypeId="4" CreationDate="2016-11-10T09:16:22.177" Score="0" Body="The goal of computer vision is an automatic extraction of information out of images. It includes methods for acquiring, processing, analyzing, and understanding images and high-dimensional data from the real world in order to produce numerical or symbolic information, e.g., in the forms of decisions. The image data can take many forms, such as video sequences, views from multiple cameras, or multi-dimensional data from a medical scanner." OwnerUserId="11257" LastEditorUserId="11257" LastEditDate="2016-11-10T18:47:53.900" LastActivityDate="2016-11-10T18:47:53.900" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11032" PostTypeId="2" ParentId="8184" CreationDate="2016-11-10T17:41:28.650" Score="4" Body="&lt;p&gt;Not a big fan of using head motions or type of spindle to define the difference, as there are lots of exceptions to each.  Many 5-axis mills move the head in various ways beyond just Z.  Datron makes CNC mills (excellent ones, BTW) that look like these CNC &quot;Routers&quot; but they call them &quot;Mills&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some refer to &quot;Gantry Style&quot; mills as routers.  The &quot;Gantry&quot; is that travelling bridge with the head on it.  But, Some gantries still move the table, often in just one axis, usually Y.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are CNC &quot;Routers&quot; that have very expensive high speed spindles with toolchange capability.  They're not just lashing a woodworking handheld router onto the CNC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the end, &quot;Router&quot; seems most often to refer to a gantry-style machine that is most often used to cut wood and soft materials like plastic or foam board.  &quot;Mill&quot; seems to most often refer to machines that are usually not (but can be) gantry-style that are most often used to cut metal and harder materials.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Personally, I prefer to use the terms interchangeably and realize that you can use one to do the other's job in many cases.&lt;/p&gt;&#xA;" OwnerUserId="15262" LastActivityDate="2016-11-10T17:41:28.650" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11033" PostTypeId="2" ParentId="2433" CreationDate="2016-11-10T17:45:45.940" Score="1" Body="&lt;p&gt;Here's the important thing to realize:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While many want to size motors based on cutting forces, that approach will almost always leave you with a motor that's too weak for good performance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cutting force is not the limiting factor the motor needs to overcome.  Rather, the limiting factor will be acceleration.  Your motors must produce enough torque to accelerate the axis quickly enough to reach your machine's target speeds in a reasonably short distance. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've written some detailed articles about how to figure all this out in &lt;a href=&quot;http://blog.cnccookbook.com/2014/02/06/ultimate-benchtop-cnc-mini-mill-part-4-motion-performance/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ultimate Benchtop CNC Mini Mill Part 4: Motion Performance&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="15262" LastEditorUserId="37" LastEditDate="2016-11-11T09:50:35.020" LastActivityDate="2016-11-11T09:50:35.020" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11034" PostTypeId="2" ParentId="10860" CreationDate="2016-11-10T17:48:41.867" Score="2" Body="&lt;p&gt;LinuxCNC is a good example.  A simpler example would be GRBL, which runs on Arduinos:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/grbl/grbl/wiki&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/grbl/grbl/wiki&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15262" LastActivityDate="2016-11-10T17:48:41.867" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11035" PostTypeId="2" ParentId="10860" CreationDate="2016-11-10T23:29:59.577" Score="1" Body="&lt;p&gt;I suggest you look at the Marlin &lt;a href=&quot;https://github.com/MarlinFirmware/Marlin/tags&quot; rel=&quot;nofollow&quot;&gt;firmware&lt;/a&gt; for reprap 3d printers. Essentially it parses out lines of CNC code and identifies each of them as a command.  The trickiest of these are the mutli-axis coordinated movements where multiple steppers are involved such as g3/g4 circle interpolate.  The magic is in the timers and trig.&lt;/p&gt;&#xA;" OwnerUserId="14775" LastActivityDate="2016-11-10T23:29:59.577" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11038" PostTypeId="2" ParentId="11003" CreationDate="2016-11-11T00:59:31.813" Score="1" Body="&lt;p&gt;SLAM is only needed when you are also building a map. You already have a map so the problem is localization. To be exact the problem you want to research is Monte Carlo localization or particle filter localization. A fantastic book on it is Probabilistic Robotics if you can get your hands on it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some slides describing the resources in the book can be found &lt;a href=&quot;http://ais.informatik.uni-freiburg.de/teaching/ws12/mapping/pdf/slam09-particle-filter-4.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead of a landmark map you need an occupancy grid. With your sensor setup you are able to get bearing and range. For the weights calculation of your particles you are going to calculate it via this formula p(z|x,m) where z is you measurement, x is your robot position and m is your stored map. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To actual implement this there are two different measurement models you can use to calculate this probability. One is called the beam range finder model and the other is likelihood fields. So just adjust your particle filter to use that and everything else should be the same.&lt;/p&gt;&#xA;" OwnerUserId="15265" LastEditorUserId="10596" LastEditDate="2016-11-21T10:40:31.243" LastActivityDate="2016-11-21T10:40:31.243" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11039" PostTypeId="1" CreationDate="2016-11-11T11:21:55.540" Score="0" ViewCount="98" Body="&lt;p&gt;Is it possible to fetch the current encoder position of a drive with the old SimpleMotion library (not V2) and a Granite Devices VSD-E through the &lt;code&gt;smRawCommand(...)&lt;/code&gt; function?&lt;/p&gt;&#xA;" OwnerUserId="15190" LastActivityDate="2021-05-14T07:00:29.833" Title="Fetching encoder value with SimpleMotion library by Granite Devices" Tags="&lt;servomotor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11040" PostTypeId="1" AcceptedAnswerId="11041" CreationDate="2016-11-12T04:51:57.930" Score="2" ViewCount="185" Body="&lt;p&gt;I'm developing a 2 DOF SCARA with inverse kinematics. It works fine at any desired point, but how can I draw a line? Is there an efficient algorithm to do this?&lt;/p&gt;&#xA;" OwnerUserId="15272" LastEditorUserId="1445" LastEditDate="2016-11-20T18:11:01.603" LastActivityDate="2016-11-20T18:11:01.603" Title="Inverse kinematics" Tags="&lt;inverse-kinematics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11041" PostTypeId="2" ParentId="11040" CreationDate="2016-11-12T04:56:27.337" Score="1" Body="&lt;p&gt;You can define your line as a sequence of very close points, and then just move from one to the next.   If you don't want the SCARA arm to &quot;move, stop, move, stop&quot; you can set the target point to the next one once the arm is 80 or 90 percent to the current target point.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT (added example) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Example:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's say you want the robot to move its tool from (1, 1) to (2, 3).  Break that line into, say, 10 segments (actually 9 segments with 10 points including the endpoints).  The number of segments will depend on the accuracy you require, since the robot will not move in a straight line between its target points.  If you need more accuracy, divide the line into more segments.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, position the robot at (1, 1).  The next point along the line, using the 10 points, would be (1.1, 1.2).   Tell the robot to move there, but when its &lt;em&gt;x&lt;/em&gt; value reaches, say, 1.08, command it to move to the next point (1.2, 1.4).   I hope you can see how this method can be built into a couple of loops in your code.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternately, you can use velocity control (using the derivative of your kinematics) to tell it to move in a particular direction, and then update that direction continuously as it moves along the line.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastEditorUserId="11125" LastEditDate="2016-11-12T08:15:05.910" LastActivityDate="2016-11-12T08:15:05.910" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11044" PostTypeId="1" CreationDate="2016-11-13T13:14:52.683" Score="0" ViewCount="2008" Body="&lt;p&gt;I don't know if this is the right place to ask this question but I'll give it a try. A friend of mine is using unity 3D to simulate a robot arm,  however he's having some troubles when he needs to rotate the robot arm. The arm can already grab stuff with its hands, however seems like sometimes randomly crashes when is rotating the wrist.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's an image of the robot arm:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/lhUKE.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/lhUKE.jpg&quot; alt=&quot;Robot ARm&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's the arm he's working on for the simulation, and you can see that every part of the arm is connected through the unity's inheritance system so it can rotate every piece of the robot arm along with the nested parts that follows the inheritance path. However something seems like is failing when it rotates the wrist of the arm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Three main questions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;How should be achieved the arm's rotation properly?&lt;/li&gt;&#xA;&lt;li&gt;How should be achieved picking up things with the hand of the arm properly? &lt;/li&gt;&#xA;&lt;li&gt;How could you make it move by itself on a given point that can reach?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I'm not asking for code or anything like that, just how these 3 things should be done properly in order to have fully functional robot arm simulation like the main concepts behind it.&lt;/p&gt;&#xA;" OwnerUserId="15280" LastEditorUserId="10596" LastEditDate="2016-11-13T14:41:59.133" LastActivityDate="2016-11-13T16:05:54.223" Title="Robot Arm Simulation" Tags="&lt;robotic-arm&gt;&lt;inverse-kinematics&gt;&lt;simulation&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11045" PostTypeId="2" ParentId="11044" CreationDate="2016-11-13T16:05:54.223" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;How should be achieved the arm's rotation properly?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In unity each game object has a transformation property. The rotation component of the transformation property has to be changes in order to rotate a linkage properly. If this is not working, check if you rotate in the correct units and correct reference frame. If yes, it has to work, try rotating in the unity editor using the panel for setting position and orientation. If it works there it has to work in code too.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How should be achieved picking up things with the hand of the arm properly?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Not an easy question. If you want to use the physics engine, you can model the scenario using friction. If the jaws of the gripper hold the object which is manipulated using a high enough force then it will be lifted. This is computationally intensive. Another approach would be just to make the object which is manipulated the child of the gripper if a certain condition is met (i.e. jaws are closed). It is not a precise solution but it requires very little computation time&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How could you make it move by itself on a given point that can reach?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You will need to solve inverse kinematics model of the robot for this. You have a line equation, you can discretize it and for each point you can solve the inverse kinematics problem to get the joint angles of the robot. You apply those angles to the robot sequentially and it will move along a line. Alternatively you can experiment with unity IK. I am not sure if it can be used in your case. &lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2016-11-13T16:05:54.223" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11046" PostTypeId="2" ParentId="11024" CreationDate="2016-11-13T17:23:26.300" Score="1" Body="&lt;p&gt;In some cases, as are you two cases in the upper part of the image, you might need additional &quot;dummy&quot; coordinate system to end up in the correct orientation. These are just additional lines in the DH table, with most of the coordinates set to 0. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the upper left solution you might need an additional dummy coordinate system to transform from the 2nd coordinate system to the third one. Just add a dummy coordinate system with a pi/2 z rotation and the x rotation should be pi instead of pi/2 in the transformation which follows (now the 2nd line in the table). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;the upper right one needs a dummy transformation with a pi/2 z rotation between system 2 and 3.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The lower left side solution is ok and so is the lower right side one.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2016-11-13T17:23:26.300" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11049" PostTypeId="2" ParentId="11024" CreationDate="2016-11-14T01:10:01.137" Score="1" Body="&lt;p&gt;Kinematic frames are different from the physical structure and the working drawings we create can lead us astray. Frames don't necessarily sit on the physical structure. In the frames sketch below frame 1 and 2 overlap. A close mechanical analog with a shift on the x axis between 1 and 2 is shown. However the only requirement is that the z axis match the direction of motion. Also I find it helpful to add my q parameters to the DH table entries so that the offset (the DH constant) is clear.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/apIbG.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2016-11-14T01:10:01.137" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11052" PostTypeId="2" ParentId="10972" CreationDate="2016-11-14T18:23:47.077" Score="0" Body="&lt;p&gt;You should avoid breadboards when working with circuits subject to significant currents or vibration.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said - the power side of the servos (centre wire) can and should be supplied by a private  and isolated supply. The arduino has its own on-board regulator but that is limited to under 500mA. If you are driving the servos directly from the arduino then when your servos are working they are drawing too much current, resulting in a voltage drop which is interfering with the signal.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second issue may simply be circuit noise. All brushed motors are digitally noisy - that noise appears as spurious signals on the supply rail which can interfere with high frequency MCUs for example. If circuit noise is suspected - an oscilloscope on the arduino supply rail will show the problem. Often a simple capacitor (0.1uF) to ground is sufficient to attenuate the noise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The solution is to use a BEC (Battery Elimination Circuit) which isolates the power used by the BEC connected devices, in this case your servos, from other devices connected to the same battery.  With the BEC in place and supplying power to the servos, the ground connection must be common with the control signal ground and the power ground. The control signal is therefore independent of the servo supply voltage and is always referenced to the arduino ground.&lt;/p&gt;&#xA;" OwnerUserId="15266" LastEditorUserId="15266" LastEditDate="2016-11-14T18:35:22.700" LastActivityDate="2016-11-14T18:35:22.700" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11054" PostTypeId="1" AcceptedAnswerId="11058" CreationDate="2016-11-14T23:30:04.737" Score="1" ViewCount="186" Body="&lt;p&gt;&lt;strong&gt;The problem:&lt;/strong&gt; line follower robots - non linear systems - use linear PID regulation algorithm in order to bring error to zero. However, using linear regulator is not the best way to drive non linear system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is something like &lt;strong&gt;global linearization of non linear systems&lt;/strong&gt; - an algorithm that can bring regulation error to zero. In order to use it, one has to know kinematics of robot: Coriolis, inertion, gravity and friction matrixes. Those were once measured in EDDA manipulator and are now used in science, and that is how I learned about global linearization.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The question:&lt;/strong&gt; I'd like to identify &lt;s&gt;kinematical&lt;/s&gt; dynamical parameters of my line follower robot. I already have kinematical model, since it is simple (2,0) platform. Has anyone got information about good sources on physical parameters identification of mobile robot like this?&lt;/p&gt;&#xA;" OwnerUserId="14673" LastEditorUserId="14673" LastEditDate="2016-11-15T09:07:04.373" LastActivityDate="2018-04-11T03:45:26.003" Title="Mobile robot identification" Tags="&lt;mobile-robot&gt;&lt;pid&gt;&lt;research&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11055" PostTypeId="2" ParentId="11054" CreationDate="2016-11-15T02:15:50.560" Score="1" Body="&lt;p&gt;Linear regulators are frequently used to control nonlinear systems.   So are nonlinear controllers.   Much depends on the system identification from a controls, not kinematics, perspective.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I believe you are confusing the kinematics of motion with the system dynamics.  Kinematics is the science of motion without regard to the forces and torques that create or resist that motion. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To identify the dynamic properties of your line follower, a lot more information is needed about your system.   Right now this question is overly general in my opinion.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2016-11-15T02:15:50.560" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11056" PostTypeId="1" CreationDate="2016-11-15T02:53:20.053" Score="0" ViewCount="153" Body="&lt;p&gt;I am thinking about a project at my university for doing on-site waste sorting. The problem with having one waste bin for recyclables, compost and landfill and doing the sorting at a facility, is that the organic materials can destroy paper and other recyclable materials. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have searched quite a bit but all of the robotic solutions available that I have found are for facilities. I am looking for a robotic bin to be deployed in replacement of the traditional waste and recycling bin.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The budget is approximately $1000.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;$1000 -- is that materials cost only, or does it include assembly and&#xA;maintenance costs?: materials and assembly not maintenance for all 4 bins plus robotic sorter&lt;/li&gt;&#xA;&lt;li&gt;it must be bin-sized (whatever that means): let's say 3 ft (height) x&#xA;2 ft (length) x 2 ft (width) per bin and there are 4 bins -- recycle&#xA;paper, recycle plastic, compost, landfill&lt;/li&gt;&#xA;&lt;li&gt;Do you have weight requirements so the consumer can move the bin to&#xA;the curb, or are you planning to have the robot separate the&#xA;materials into other, mobile, bins?: There are no weight&#xA;requirements. We should be able to use a forklift to move it. What&#xA;would be nice is to have a single waste entry hole which customers&#xA;use. The device should internally sort the waste into the 4 bins&#xA;listed above. The entry hole and sorter should be 1 ft (height) x 8&#xA;ft (length) x 2 ft (width) to fit directly on top of the set of 4&#xA;adjacent bins.&lt;/li&gt;&#xA;&lt;li&gt;What power is available?: It can be plugged into a wall outlet (in&#xA;case there is one nearby) but should also be able to use a&#xA;rechargeable battery (in case there isn't).&lt;/li&gt;&#xA;&lt;li&gt;What about environmental concerns, especially if this is to be&#xA;located outside? Don't forget noise constraints and safety concerns.:&#xA;The whole point of this is to reduce waste and help the environment.&#xA;Assume the noise it can make can be as loud as a heater, AC unit, or&#xA;fan. The entire system should be one box with one waste entry hole --&#xA;the rest should be blackbox-ed, so it should be safe.&lt;/li&gt;&#xA;&lt;li&gt;And, most importantly, what characteristics of the materials are you&#xA;planning to use for doing the actual sorting?: the shorter should be&#xA;able to detect pure recyclable plastic vs recyclable paper vs&#xA;organic/food material vs pure waste using either computer vision or&#xA;chemical techniques or both.&lt;/li&gt;&#xA;&lt;li&gt;What size requirements are there for the products themselves?: The&#xA;waste whole should be .75 ft x .75 ft so assume the waste is less&#xA;than .75 ft^3&lt;/li&gt;&#xA;&lt;li&gt;For example, how to detect organic garbage from non-organic (and do&#xA;it many times a day without human intervention to &quot;resupply&#xA;chemicals&quot;) can be a topic of research that could take a couple of&#xA;years itself: Yes this is a good point. However, my question is more&#xA;focused on whether it's possible to use the robots already&#xA;commercially available today to solve this problem.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I read through &lt;a href=&quot;https://robotics.stackexchange.com/help/how-to-ask&quot;&gt;how to ask&lt;/a&gt; but so here is my specific question: Is there a commercially available robot today that does or can be retro-fitted to do this on-site waste sorting?&lt;/p&gt;&#xA;" OwnerUserId="15301" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2016-11-21T23:10:40.687" Title="On-site waste-sorting robot feasibility and availability" Tags="&lt;computer-vision&gt;&lt;industrial-robot&gt;" AnswerCount="2" CommentCount="10" ClosedDate="2016-11-16T01:32:49.200" ContentLicense="CC BY-SA 3.0" />
  <row Id="11057" PostTypeId="2" ParentId="11056" CreationDate="2016-11-15T03:10:34.147" Score="1" Body="&lt;p&gt;A robotics student would attach a manipulator on the bin and see what they can get done.   A good roboticist wouldn't even consider whether or not robotics was a good solution until the problem's requirements were well-defined.   You kind of have two requirements already:  the cost must be less than $300 (is that materials cost only, or does it include assembly and maintenance costs?), and it must be bin-sized (whatever that means).   Do you have weight requirements so the consumer can move the bin to the curb, or are you planning to have the robot separate the materials into other, mobile, bins?   What power is available?   What about environmental concerns, especially if this is to be located outside?   Don't forget noise constraints and safety concerns.  And, most importantly, what characteristics of the materials are you planning to use for doing the actual sorting?  What size requirements are there for the products themselves?   You need to be able to sense the characteristics, manage the span of sizes and shapes, and maneuver the materials to their destinations.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In summary, start by defining the problem and the design constraints before you decide that robotics is the solution.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2016-11-15T03:10:34.147" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11058" PostTypeId="2" ParentId="11054" CreationDate="2016-11-15T07:26:52.660" Score="0" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;&quot;using linear regulator is not the best way to drive non linear&#xA;  system&quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;All systems are non-linear to some extend; for example, we will always encounter actuator saturation in practical systems.  And all practical controllers (e.g., PID controllers) are implemented in such a way as to handle these non-linearities, e.g., preventing integrator windup due to actuator saturation. Thus, controllers for non-linear systems are usually designed to be non-linear when the errors are large, and linear  if the errors are small.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As to your question: &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&quot;I'd like to identify kinematical parameters of my line follower&#xA;  robot. Has anyone got information about good sources on identification&#xA;  of mobile robot like this?&quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Why don't you start off with an analytical model of the robot which describes the dynamics and kinematics. Kinematics (rotational and translational position due to velocity, due to acceleration,...) can be modelled perfectly.  If you know which forces and moments the actuators supply, then you only need to know masses, inertias and friction to be able to model the dynamics. These can then be measured or identified.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is much easier to identify the parameters of a model than to identify the structure of a model... :-)&lt;/p&gt;&#xA;" OwnerUserId="13926" LastEditorUserId="13926" LastEditDate="2016-11-15T10:35:57.343" LastActivityDate="2016-11-15T10:35:57.343" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11059" PostTypeId="1" CreationDate="2016-11-15T11:44:16.910" Score="2" ViewCount="493" Body="&lt;p&gt;I am programming an iRobot Create to follow serial commands using Arduino Uno. I have written the library, and found the serial commands to move the robot forward in the iRobot manual, but I couldn't find the bytes for other movements (backward, right and left).&#xA;Could you please help me with this. How can I move the robot backward, right and left. I will upload my code library.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &quot;iRobot.h&quot;&#xA;&#xA;#if defined(ARDUINO) &amp;amp;&amp;amp; ARDUINO &amp;gt;= 100  //to check if the arduino is plugged and the its number is above 100&#xA;&#xA;#include &quot;Arduino.h&quot;&#xA;&#xA;#include &quot;SoftwareSerial.h&quot;  // so we can use all pins&#xA;SoftwareSerial softSerial = SoftwareSerial(10, 11);&#xA;&#xA;#endif&#xA;&#xA;&#xA;iRobot::iRobot() //constructor to set the pins&#xA;{&#xA;_rxPin = 10;&#xA;_txPin = 11;&#xA;}&#xA;&#xA;&#xA;void iRobot::begin()  //needs to be called inside setup function&#xA;{&#xA;&#xA;delay(2000); // Needed to initialize the iRobot, the delay is to ensure that each command before this is excucted or there will be overlap&#xA;&#xA;// define pin modes for software tx, rx pins for iRobot&#xA;pinMode(_rxPin, INPUT);&#xA;pinMode(_txPin, OUTPUT);&#xA;&#xA;&#xA;softSerial.begin(19200); //we set the data rate received by the irobot&#xA;&#xA;Serial.begin(19200); // set the data rate sent from the arduino&#xA;&#xA;//these two line are necessary from the irobot manual&#xA;softSerial.write(128); // This command starts the communication.&#xA;softSerial.write(131); // set mode to safe, it will stop of there is a cliff or a wheel drops or&#xA;&#xA;Serial.write(&quot;Enter Command: &quot;); // here, if we start serial monitor, we can enter the command&#xA;}&#xA;&#xA;void iRobot::runIt()   //needs to be called inside loop function&#xA;{&#xA;if (Serial.available())&#xA;{&#xA;String data = String(Serial.read()); //this will read the command, each word will call a function&#xA;&#xA;if(data == &quot;forward&quot;)&#xA;  goForward();&#xA;if(data == &quot;backward&quot;)&#xA;  goBackward();&#xA;if(data == &quot;left&quot;)&#xA;  goLeft();&#xA;if(data == &quot;right&quot;)&#xA;  goRight();&#xA;}&#xA;}&#xA;&#xA;&#xA;void iRobot::goForward()&#xA;{&#xA;softSerial.write(137); // Opcode number for DRIVE, it's understood by the irobot that 137 means drive&#xA;&#xA;// Velocity (-500 – 500 mm/s)&#xA;softSerial.write((byte)0);&#xA;softSerial.write((byte)200);&#xA;&#xA;&#xA;//Radius (-2000 - 2000 mm)&#xA;softSerial.write((byte)128); // we should adjust this to make the robot go straight or slightly right or left&#xA;softSerial.write((byte)0); // we should adjust this to make the robot go straight or slightly right or left&#xA;}&#xA;&#xA;void iRobot::goBackward()&#xA;{&#xA;softSerial.write(137);&#xA;//we should change the bytes to make the robot drive backward&#xA;//negative vaule of velocity drive the robot forward&#xA;// Velocity (-500 – 500 mm/s)&#xA;softSerial.write((byte)0);&#xA;softSerial.write((byte)200);&#xA;&#xA;&#xA;//Radius (-2000 - 2000 mm)&#xA;softSerial.write((byte)128); // we should adjust this to make the robot go straight or slightly right or left&#xA;softSerial.write((byte)0); // we should adjust this to make the robot go straight or slightly right or left&#xA;&#xA;}&#xA;&#xA;void iRobot::goLeft()&#xA;{&#xA;softSerial.write(137);&#xA; //we should change the bytes to make the robot drive left&#xA; //radius value should be positive&#xA;// Velocity (-500 – 500 mm/s)&#xA;softSerial.write((byte)0);&#xA;softSerial.write((byte)200);&#xA;&#xA;&#xA;//Radius (-2000 - 2000 mm)&#xA;softSerial.write((byte)128); // we should adjust this to make the robot go straight or slightly right or left&#xA;softSerial.write((byte)0); // we should adjust this to make the robot go straight or slightly right or left&#xA; }&#xA;&#xA; void iRobot::goRight() &#xA; {&#xA;softSerial.write(137);&#xA; //we should change the bytes to make the robot drive right&#xA; //radius value should be negative&#xA;// Velocity (-500 – 500 mm/s)&#xA;softSerial.write((byte)0);&#xA;softSerial.write((byte)200);&#xA;&#xA;&#xA;//Radius (-2000 - 2000 mm)&#xA;softSerial.write((byte)128); // we should adjust this to make the robot go straight or slightly right or left&#xA;softSerial.write((byte)0); // we should adjust this to make the robot go straight or slightly right or left&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Update:&#xA;I have connected the robot to the Arduino and tried the code. Unfortunately, the robot didn't move&#xA;This is my Arduino code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; #include &amp;lt;Arduino.h&amp;gt;&#xA; #include &amp;lt;iRobot.h&amp;gt;&#xA; iRobot irobot;&#xA;&#xA; void setup() {&#xA;  irobot.begin();&#xA; }  &#xA;&#xA; void loop() {&#xA;  irobot.runIt();&#xA; }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I have connected the the pins 10, 11 and GND on the Arduino to pins 3, 4 and 7 on the robot.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/WrEFb.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/WrEFb.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/EZ5ai.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/EZ5ai.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15305" LastEditorUserId="15305" LastEditDate="2016-11-26T12:30:43.937" LastActivityDate="2016-11-26T12:30:43.937" Title="&quot;Updated&quot; Help in iRobot create serial communication in Arduino" Tags="&lt;arduino&gt;&lt;irobot-create&gt;&lt;serial&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11060" PostTypeId="1" CreationDate="2016-11-15T19:32:14.197" Score="0" ViewCount="144" Body="&lt;p&gt;I am trying to understand the EKF theory. Can the state transition function depend on variables that are not part of the state space?  For example, the state propagation below depends on the quaternions that keep changing. If I get the quaternions from a very dependable source and I dont want to filter them, can I take them out of the state space? In that case, when calculating the Jacobian I will treat the quaternions as constants even though its a dynamic value from some external sensor. What are the implications of this approach? &#xA;$$&#xA;\begin{bmatrix}&#xA;x\\&#xA;y\\&#xA;z\\&#xA;\end{bmatrix}_{k+1} = \begin{bmatrix}&#xA;x\\&#xA;y\\&#xA;z\\&#xA;\end{bmatrix}_{k} + \begin{bmatrix} &#xA;Rotation Matrix\\&#xA;using\\&#xA;Quaternions&#xA;\end{bmatrix} * \begin{bmatrix} &#xA;u \\ &#xA;v \\ &#xA;w \\&#xA;\end{bmatrix}_{k}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The state space I am using is &#xA;$$&#xA;\begin{bmatrix}&#xA;x&amp;amp; y&amp;amp; z&amp;amp; u&amp;amp; v&amp;amp; w&#xA;\end{bmatrix}^T&#xA;$$&#xA;where x y z are the position coordinates and u v w are the linear velocities.&lt;/p&gt;&#xA;" OwnerUserId="15192" LastActivityDate="2016-11-15T19:38:54.303" Title="EKF state propagation model using variables that are not part of state vector" Tags="&lt;kalman-filter&gt;&lt;ekf&gt;&lt;jacobian&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11061" PostTypeId="2" ParentId="11060" CreationDate="2016-11-15T19:38:54.303" Score="1" Body="&lt;p&gt;if the quaternion is correct, this approach will work. &lt;/p&gt;&#xA;" OwnerUserId="8842" LastActivityDate="2016-11-15T19:38:54.303" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="11062" PostTypeId="2" ParentId="11056" CreationDate="2016-11-15T19:41:54.683" Score="0" Body="&lt;p&gt;There are a lot of unknowns to this problem, as SteveO has mentioned in an answer. My suggestion is to start inventing missing functionalities one by one and leave the assembly into a complete product for when all that is done. For example, how to detect organic garbage from non-organic (and do it many times a day without human intervention to &quot;resupply chemicals&quot;) can be a topic of research that could take a couple of years itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Doing this, you can focus on solving the core of each problem (detecting a specific kind of garbage, or handling variable-sized and variable-consistency objects) without bothering with complexities of other problems. When you have each problem solved, you can start piecing things together and make a product.&lt;/p&gt;&#xA;" OwnerUserId="158" LastActivityDate="2016-11-15T19:41:54.683" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11063" PostTypeId="2" ParentId="8644" CreationDate="2016-11-15T22:05:10.293" Score="1" Body="&lt;p&gt;RobotBASIC (or RROS) is the best thing since sliced bread for the Robotics Hobbyist. And it’s free which pretty much puts it into everybody’s budget. It’s based on BASIC which is a super easy way to learn a programming language (my daughter was writing simple code in 15 minutes). All the low level tedium has been done for you. You add a compass and you have a direction available to you without deciphering a bunch of meaningless bits / protocols from a fluxgate compass. Add ultrasonic sensors (many if you want) and you have distance data and collision avoidance. The list goes on and on. Add a laptop and you have speech recognition and synthesis. RROS takes care of all the low level mundane interfacing so you can quickly assembly a smart bot with a higher level language ( kind of like BIOS does in a PC ) .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lots of articles have been written in Servo magazine about Navigation, Sensors and a host of other issues by the creator John Blankenship, a Professor back East. On Amazon if you put in his name he has written a dozen robot books and the latest is about ARLO built upon some Parallax structures that walks you through just about every bot issue you could encounter . I could write tons more but it will start to sound like an info-mercial. Please check it out for yourself and you will be pleasantly surprised! &lt;/p&gt;&#xA;&#xA;&lt;p&gt;One last thing I have to mention. You get a simulator with the software that allows you to test your real code before you have any hardware. When your software is working as you like it ports directly over to your real bot. How cool is that?&lt;/p&gt;&#xA;" OwnerUserId="15312" LastEditorUserId="37" LastEditDate="2016-11-16T10:28:43.297" LastActivityDate="2016-11-16T10:28:43.297" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11066" PostTypeId="2" ParentId="11059" CreationDate="2016-11-16T16:39:27.770" Score="2" Body="&lt;p&gt;Page 9 of the &lt;a href=&quot;https://www.irobot.com/filelibrary/pdfs/hrd/create/Create%20Open%20Interface_v2.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Open Interface specification&lt;/a&gt; gives the following instructions:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Serial sequence: [137][Velocity high byte][Velocity low byte][Radius high byte][Radius low byte]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It then gives special cases for the radius:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Special cases:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Straight = 32768 or 32767 = hex 8000 or 7FFF&lt;/p&gt;&#xA;&lt;p&gt;Turn in place clockwise = hex FFFF&lt;/p&gt;&#xA;&lt;p&gt;Turn in place counter-clockwise = hex 0001&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Each portion, speed and radius, are two 16-bit signed values. Your robot does the same thing for forward/backward/left/right because you have copy/pasted the same code in each section. You don't have anything different in any of the code segments.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.mathsisfun.com/binary-decimal-hexadecimal-converter.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here&lt;/a&gt; is a converter that will do the decimal to hex conversion for you - &lt;strong&gt;be sure to select 'signed 16-bit' from the dropdown box&lt;/strong&gt;. Once you have the four digit hex number, the 'high' byte is the first two digits and the 'low' byte is the last two digits. Plug each pair into &lt;a href=&quot;http://www.binaryhexconverter.com/hex-to-decimal-converter&quot; rel=&quot;nofollow noreferrer&quot;&gt;this converter&lt;/a&gt; to get the decimal value you should write.&lt;/p&gt;&#xA;&lt;p&gt;So, for example, let's say you want to use a speed of 200 mm/s for all cases. Your code &lt;em&gt;should&lt;/em&gt; look like the following:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;void iRobot::goForward()&#xA;{&#xA;// Drive op code&#xA;softSerial.write(137);&#xA;// Velocity (-500 – 500 mm/s)&#xA;softSerial.write((byte)0);&#xA;softSerial.write((byte)200);&#xA;//Radius (-2000 - 2000 mm)&#xA;softSerial.write((byte)128);&#xA;softSerial.write((byte)0);&#xA;}&#xA;void iRobot::goBackward()&#xA;{&#xA;// Drive op code&#xA;softSerial.write(137);&#xA;// Velocity (-500 – 500 mm/s)&#xA;softSerial.write((byte)255);&#xA;softSerial.write((byte)56);&#xA;//Radius (-2000 - 2000 mm)&#xA;softSerial.write((byte)128);&#xA;softSerial.write((byte)0);&#xA;}&#xA;void iRobot::goLeft()&#xA;{&#xA;// Drive op code&#xA;softSerial.write(137);&#xA;// Velocity (-500 – 500 mm/s)&#xA;softSerial.write((byte)0);&#xA;softSerial.write((byte)200);&#xA;//Radius (-2000 - 2000 mm)&#xA;softSerial.write((byte)0);&#xA;softSerial.write((byte)1);&#xA;}&#xA;void iRobot::goRight() &#xA;{&#xA;// Drive op code&#xA;softSerial.write(137);&#xA;// Velocity (-500 – 500 mm/s)&#xA;softSerial.write((byte)0);&#xA;softSerial.write((byte)200);&#xA;//Radius (-2000 - 2000 mm)&#xA;softSerial.write((byte)255);&#xA;softSerial.write((byte)255);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I'll mention here that the Create won't &amp;quot;strafe&amp;quot; or move left/right while facing forwards. It only moves forwards. It can turn while moving forward, such that it follows an arc, but that's the only &amp;quot;goLeft&amp;quot; or &amp;quot;goRight&amp;quot; you get. As I've written it above, goLeft and goRight are both zero-radius turns.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2016-11-16T16:39:27.770" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11068" PostTypeId="1" AcceptedAnswerId="11069" CreationDate="2016-11-16T22:29:56.290" Score="0" ViewCount="565" Body="&lt;p&gt;I have a confusion between the wrist frame, the tool frame and the end effector as used in the unmodified DH conventions. Can you differentiate with diagrams?&lt;/p&gt;&#xA;" OwnerUserId="15114" LastActivityDate="2016-11-16T23:04:58.083" Title="Confusion between wrist, tool and end effector" Tags="&lt;dh-parameters&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11069" PostTypeId="2" ParentId="11068" CreationDate="2016-11-16T22:43:35.390" Score="1" Body="&lt;p&gt;Tool frame is the same as the end-effector.&#xA;The wrist frame is located at the point where the last 3 axes of the robot, if extended as imaginary lines, intersect (in case of a robots equipped with a wrist). It is oriented the same way as the DH frame of previous axis. A wrist is essentially a subcomponent of the structure (the last 3 axes) used for setting the orientation of the tool. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sometimes flange frame is also used. That is the physical end of the robot when no tool and tool holder is attached to it. It is usually a ISO flange for mounting tools and tool holders. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;UPDATE: coordinate system 4 is the wrist coordinate system and 6 is the tool and end effector frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/1w9pB.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1w9pB.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2016-11-16T23:04:58.083" LastActivityDate="2016-11-16T23:04:58.083" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="11071" PostTypeId="1" CreationDate="2016-11-17T09:00:28.570" Score="3" ViewCount="207" Body="&lt;p&gt;I have designed a 2 Degree of Freedom robot using dc motor and gearbox. However, I wanted the robot to be compliant as it'll be used in an unstructured environment with humans. I wanted to know if going SEA is a better option then using an impedance or admittance controller. For the moment I have been able to model the environment as spring and damper. But this model is not very robust. Is it a good idea to do a combination of passive and active compliance? I read in G.A. Pratt's report, and he states that SEA has drawbacks when small motions are required, but isn't this the problem with all compliance control. What are the advantages of SEA over conventional active compliance control methods?&lt;/p&gt;&#xA;" OwnerUserId="11722" LastActivityDate="2017-10-04T06:16:32.940" Title="Series Elastic Actuator (Passive compliance) vs Impedance or admittance control" Tags="&lt;control&gt;&lt;motor&gt;&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11072" PostTypeId="1" AcceptedAnswerId="11101" CreationDate="2016-11-17T11:40:56.287" Score="0" ViewCount="1338" Body="&lt;p&gt;Is it possible to build a CNC whose Linear motion system does not contain any timing belt(pulley) or lead screw(threaded rod).&#xA;I was wondering whether I could directly control the Linear motion by securing wheels of a slider onto aluminum rails &amp;amp; directly connecting the wheels to a stepper motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main objective of this question is to find the cheapest method for controlled Linear motion.&lt;/p&gt;&#xA;" OwnerUserId="15322" LastActivityDate="2020-12-25T23:55:35.743" Title="CNC: Linear motion without timing belt or lead screw" Tags="&lt;cnc&gt;&lt;stepper-driver&gt;&lt;linear-bearing&gt;" AnswerCount="8" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="11073" PostTypeId="2" ParentId="11072" CreationDate="2016-11-17T11:51:26.440" Score="2" Body="&lt;p&gt;CNC controllers, in most cases, control rotary motion and the model of how this rotary motion is tranformed, by the mechanism attached to the motor, to a translational motion is implemented in the controller. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can use any method of transforming rotary motion to a linear motion as long as the model for it is pre-implemented in the CNC controller or you can implement it to the CNC. Moreover, it does not even has to be a decoupled translational motion. E.g. LinuxCNC can controll multiple axes to achive 1 decoupled linear motion. On a parellel mechanism, moving all axes results in a Z translation. Video of this &lt;a href=&quot;https://www.youtube.com/watch?v=O7pc1B3rnMY&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only limit to what mechanism can you put on the end of the motor of a CNC is what are you able to model and integrate to the CNC controller. If you do not have the possibility to implement a model, then the question becomes what pre-implemented models are there and how can you adjust their parameters to make them refelct your mechanism. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Needles to say the accuracy of the model will affect the accuracy of the CNC.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2016-11-17T11:53:44.227" LastActivityDate="2016-11-17T11:53:44.227" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11075" PostTypeId="2" ParentId="11072" CreationDate="2016-11-17T13:22:48.930" Score="2" Body="&lt;p&gt;If you want to build something that more or less resembles CNC machine, and use a pen as a tool and draw some pictures, then you will probably be fine (as long as you can do programming and have a lot of patience to do calibration). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why is this not a common solution? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Usually you want CNC to be precise and to have enough power to move a tool at reasonable speed. Cheap rubber wheels are... well cheap. Nobody cares if their diameter is 10mm or maybe 10.3. Or 9.7. What's more you can buy several wheels and each one of them will have different diameter. This will lead to problems when calibrating the machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additionally, threaded rods and belts can transfer more torque without slipping, so higher dynamics will be achievable.&lt;/p&gt;&#xA;" OwnerUserId="7360" LastActivityDate="2016-11-17T13:22:48.930" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11076" PostTypeId="1" AcceptedAnswerId="11077" CreationDate="2016-11-17T21:19:01.297" Score="3" ViewCount="1820" Body="&lt;p&gt;I'm currently looking for an industrial robot for a depalletizing application. I had a look at some datasheets but I'm not quite sure how the maximum payload is defined. e.g. the &lt;a href=&quot;http://www.kuka-robotics.com/canada/en/products/industrial_robots/small_robots/kr6_r900_sixx/start.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Kuka Agilus&lt;/a&gt; weighs 52kg and looks rather strong, but is listed with only 6kg. Is this really the highest weight that the robot can lift or is this the heaviest object that the robot can move with its maximal velocity and I can move heavier stuff at lower speeds?&lt;/p&gt;&#xA;" OwnerUserId="23196" LastActivityDate="2016-11-18T07:27:53.793" Title="Definition of payload for industrial robots" Tags="&lt;industrial-robot&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11077" PostTypeId="2" ParentId="11076" CreationDate="2016-11-17T22:08:21.000" Score="4" Body="&lt;p&gt;If you only consider the simple physics of the problem you are completely right, it should be able to move lower payloads at lower velocities and accelerations. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the maximum payload can only be used as a rule of thumb to dimension a robot. In order to do a proper dimensioning you need the center of gravity, the mass and the inertia of the payload. Kuka has a free tool to verify the dimensioning properly called &lt;a href=&quot;http://www.kuka-robotics.com/germany/en/downloads/software.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;KukaLoad&lt;/a&gt;. I would recommend giving that a try to see if you hit an overload condition with your load and motion specifications. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since you did not give any information on the application, besides that is depalitizin, if we are talking about the europallet sizes pallets, the Agilus line is definetly too small for that task. &lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2016-11-18T07:27:53.793" LastActivityDate="2016-11-18T07:27:53.793" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11079" PostTypeId="1" AcceptedAnswerId="11080" CreationDate="2016-11-18T01:23:31.460" Score="2" ViewCount="274" Body="&lt;p&gt;I am trying to solve inverse kinematics (using the Jacobian pseudoinverse method) for a 7 DoF arm, but because of the way the robot is mounted, the base frame does not coincide with the frame of the first joint, so there is a transformation between base and frame 0. As the Jacobian expresses the joint-end effector velocity relationship w.r.t. the base frame, and also because my target poses etc. are expressed w.r.t the base frame, I encoded the transformation as an extra row in my DH parameters, but these angles are always fixed. Hence, I ended up with 8 rows in my DH although I have only 7 joints.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because of this, my inverse kinematics algorithm, when trying to minimize the end effector pose error, continuously attempts to change the angle of the &quot;first&quot; joint which really isn't a joint at all. Hence, although the algorithm thinks the end effector has reached the target position, in real world it would not, because that base-robot transformation would be invalid for my setup. If I force this angle to be constant after every update of the iteration, the algorithm fails to converge and gets stuck at some pose. So I am guessing my approach for encoding the fixed base-first joint transformation is wrong? How are these transformations usually dealt with?&lt;/p&gt;&#xA;" OwnerUserId="10310" LastEditorUserId="10310" LastEditDate="2016-11-18T01:28:38.040" LastActivityDate="2016-11-18T14:39:24.370" Title="Dealing with fixed transformations while solving inverse kinematics" Tags="&lt;inverse-kinematics&gt;&lt;manipulator&gt;&lt;rotation&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11080" PostTypeId="2" ParentId="11079" CreationDate="2016-11-18T02:50:13.693" Score="3" Body="&lt;p&gt;Hopefully you still have only 4 rows in your DH matrix, not 8 as you said.  I think you mean that your Jacobian matrix has 8 $\require{enclose} \enclose{horizontalstrike}{\text{rows}}$ columns.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your approach is close to correct, but it has one flaw.   The flaw is when you make the transformation that you are calling the &quot;first joint.&quot;  Instead of letting the rotation between that coordinate system and the next be a variable, say, $q_1$, just plug in the value of that angle (for example, $\pi \over 2$).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you do this, then you'll see that your Jacobian has only 7 $\enclose{horizontalstrike}{\text{rows}}$ columns, as it should.   The iterative pseudoinverse process will have a higher likelihood of converging to a proper solution since it will not be trying to move a nonexistant degree of freedom.   And you won't need to reset that angle after each iteration, because it is constant.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastEditorUserId="11125" LastEditDate="2016-11-18T14:39:24.370" LastActivityDate="2016-11-18T14:39:24.370" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11081" PostTypeId="2" ParentId="11079" CreationDate="2016-11-18T07:26:05.777" Score="2" Body="&lt;p&gt;Having 8 rows in the DH parameters table is completely ok. However, this does not lead to 8 rows in your jacobi matrix. The size of the jacobi matrix is always given by number of degrees of freedom in Cartesian space and number of degrees of freedom in joint space. In your case 6 and 7, as I understand. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Elements in the Jacobi matrix express to what extent does a small change in a joint variable cause a change in the cartesian variables. Based on this, it should be clear that your fixed transformation from base to joint 1 cannot have any changes in it therefore cannot have its own variable and row in the jacobian matrix.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This situation is very common. It is essentially the same as having a last transformation from the flange coordinate system to the tool coordinate system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, to build up the jacobian, I always do it as follows:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Write the DH parameter table&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Multiply all matrices together (all 8 in your case)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Write the equation&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$A_{lhs} = A_{rhs}$&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;where $A_{lhs}$ is the transformation matrix from the joint space side (DH transformations multiplied together) and $A_{rhs}$ is the Cartesian transformation matrix multiplied togehter ($T_x(x) * T_y(y)*...$).&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;4&quot;&gt;&#xA;&lt;li&gt;From this matrix equation express the equations:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;$x = f_x(q_1, q_2, q_3, q_4, q_5, q_6, q_7)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$y = f_y(q_1, q_2, q_3, q_4, q_5, q_6, q_7)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$z = f_z(q_1, q_2, q_3, q_4, q_5, q_6, q_7)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$a = f_a(q_1, q_2, q_3, q_4, q_5, q_6, q_7)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$b = f_b(q_1, q_2, q_3, q_4, q_5, q_6, q_7)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$c = f_c(q_1, q_2, q_3, q_4, q_5, q_6, q_7)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the direct kinematics problem in explicit from. &lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;5&quot;&gt;&#xA;&lt;li&gt;Derive all elements of the Jacobi Matrix (with a computer algebraic system, e.g. Maple, Matlab Symbolics toolbox, Math.net, symPy, etc.)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;$\frac{\delta x}{\delta q_1}$ = $\frac{\delta f_x}{\delta q_1}$&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;6&quot;&gt;&#xA;&lt;li&gt;Build up all 6x7 elements of the jacobi matrix this way&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2016-11-18T07:26:05.777" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11082" PostTypeId="2" ParentId="11072" CreationDate="2016-11-18T08:47:59.413" Score="0" Body="&lt;p&gt;What you are looking for is called a linear potentiometer. It is the same tech that is in your car known as a fuel sending unit, volume control knobs, etc. It is most basically a voltage divider whose resistance is increased or decreased and can be measured. Aditional details can be found on the wiki at en.wikipedia.org/wiki/Potentiometer&lt;/p&gt;&#xA;" OwnerUserId="7819" LastActivityDate="2016-11-18T08:47:59.413" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="11083" PostTypeId="2" ParentId="10853" CreationDate="2016-11-18T15:29:57.160" Score="0" Body="&lt;p&gt;Are you opposed to adding components to the power circuit? If you add in a portion that measures current being drawn by the motor, you can get some decent feedback about what the motor is doing and how much of a mechanical load is being applied to it. &lt;/p&gt;&#xA;" OwnerUserId="11762" LastActivityDate="2016-11-18T15:29:57.160" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11084" PostTypeId="2" ParentId="11072" CreationDate="2016-11-18T17:02:45.097" Score="0" Body="&lt;p&gt;Sort of. This is in the &lt;em&gt;possible but not probable&lt;/em&gt; category of things. All you need is a system with very little play and active position feedback and you can get around the usual requirement of stepper motors and lead screws. What is wrong with belts though? They are really not that expensive for what they do and how well they do it compared to alternatives. At time of writing AndyMark carries timing belts for $14. Given, however, that you want the amazingly large size of 100m×50m (!) might I suggest steel cable and a roller system on 80/20. Make a free rolling system and then use steel cables to move the positions on each of the axes. Such a large system will have both hysteresis and nonlinearity so you're going to want active position feedback and PID control scheme to make sure the machine head actually ends up where it needs to be for each line of the gcode. Can you not partition that space down to smaller quadrants though? 100mx50m is enormously demanding and de facto firmly out of the budget CNC category of projects.&lt;/p&gt;&#xA;" OwnerUserId="15333" LastActivityDate="2016-11-18T17:02:45.097" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="11086" PostTypeId="1" CreationDate="2016-11-19T01:39:29.753" Score="0" ViewCount="120" Body="&lt;p&gt;Is it possible to do pick and place tasks using only forward kinematics and object detection information from a camera?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to avoid having to do inverse kinematic calculations for my robot. Is there a way I can avoid them for pick and place object sorting?&lt;/p&gt;&#xA;" OwnerUserId="15338" LastEditorUserId="184" LastEditDate="2016-11-19T02:16:24.060" LastActivityDate="2016-11-19T02:37:23.137" Title="Pick and place using only vision information and forward kinematics" Tags="&lt;robotic-arm&gt;&lt;computer-vision&gt;&lt;manipulator&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2016-11-22T14:44:56.300" ContentLicense="CC BY-SA 3.0" />
  <row Id="11087" PostTypeId="2" ParentId="11086" CreationDate="2016-11-19T02:37:23.137" Score="1" Body="&lt;p&gt;If you can get the objects to be located consistently at the same positions, you may be able to use &quot;teach and repeat&quot; programming.   Otherwise you need some method to translate the objects' positions into joint angles.   Inverse kinematics is the most straightforward method.   There are some optimization / search algorithms that you could try, too, but they are even more challenging than just computing the closed-form inverse kinematics.   &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2016-11-19T02:37:23.137" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="11088" PostTypeId="1" CreationDate="2016-11-20T02:52:43.680" Score="0" ViewCount="423" Body="&lt;p&gt;Can anyone tell me if it is possible to send data through the analogue pins of the Ardupilot to the analog pins of the Arduino? &#xA;For example, I would like to trigger a button on a channel from my radio control and Ardupilot should send a specific number to the Arduino. Would anyone have any idea how I can do this?&#xA;Thank you in advance.&lt;/p&gt;&#xA;" OwnerUserId="15344" LastActivityDate="2018-06-03T04:07:14.517" Title="How to communicate Ardupilot with Arduino" Tags="&lt;arduino&gt;&lt;ardupilot&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11089" PostTypeId="1" CreationDate="2016-11-20T04:11:17.570" Score="3" ViewCount="5512" Body="&lt;p&gt;I studied the forward and inverse Kinematics of the robot and got a clear understanding. I am in the progress of developing my matlab simulation for a two wheeled differential drive robot. The robot moves in a straight line and has been integrated with PID. I want to show by the animation the movement of the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Equation is, &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;The Vector in Initial Frame = Rotation Matrix Inverse x Vector in Robot Frame&#xA;&#xA;My Rotational Matrix is, [0 -1 0; 1 0 0; 0 0 1] since the angle is 90.&#xA;&#xA;The Robot Frame is [a; b; c] &#xA;where a = Total translational Speed = (r x w1)/2 + (r x w2)/2&#xA;      b = In y direction = 0&#xA;      c = Total Rotational Speed = (r x w1)/2l + (r x w2)/2l&#xA;&#xA;where l = 0.12 and r = 0.033 and w1 and w2 are angular velocities of wheel 1 and 2.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I have w1 and w2 data in a file as &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;w1 1 2 3 4 5 6 8 9&#xA;w2 1 3 4 5 6 7 8 9&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I want to run an algorithm in such a way, Mat lab runs the equation and calculate the values of Total translational Speed and Total angular speed in the world frame and plot the graph. I also want to make an animation in such a way a box moves according to this equation. How can I do that? I can run it for one time if I input one value for w1 and w2, But not continuously. Help. Thanks Much.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/B7XCf.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/B7XCf.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15346" LastEditorUserId="10748" LastEditDate="2016-11-21T07:32:00.303" LastActivityDate="2018-12-21T16:02:50.600" Title="How to create Matlab Simulation for Kinematics of Differential Drive" Tags="&lt;kinematics&gt;&lt;inverse-kinematics&gt;&lt;matlab&gt;&lt;simulation&gt;&lt;forward-kinematics&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="11091" PostTypeId="2" ParentId="2571" CreationDate="2016-11-20T08:06:37.743" Score="1" Body="&lt;p&gt;A rather inexpensive solution to your problem is to use a vision based IR solution- Infragram. There is some good work done to post-process gathered IR images and you could post process you &quot;human&quot; images and tune them for your application. It is cheap and light which is why I used it for my open-source projects.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, addressing Prasad's concern, this works in both indoors and outdoors environments. Alternatively, if you really want to be adventurous, take out the infrared filter of any camera that you have and convert it into a low-cost IR camera that can detect human heat signatures (Beware: this might render your camera useless and is generally difficult to do. I've tried it, but damaged the filter beyond repair)&lt;/p&gt;&#xA;" OwnerUserId="15348" LastActivityDate="2016-11-20T08:06:37.743" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11092" PostTypeId="1" CreationDate="2016-11-20T15:05:15.563" Score="0" ViewCount="687" Body="&lt;p&gt;I am building a line-following robot with a Raspberry Pi Zero, using the explorer PHat.&#xA;The robot is supposed to follow black, red, green and blue lines and react to the colour, so it should drive faster on a red line and slower on a blue line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do not have much experience with line followers, so I am not sure what kind of hardware I need.&#xA;My questions are:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Is it possible to follow a red, blue or green line with IR LEDs? Most of the line followers obviously use IR LEDs (like TCRT5000), but they are supposed to only follow black lines.&lt;/li&gt;&#xA;&lt;li&gt;I have a RGB sensor which works quite well with the explorer PHat and I am able to recognize colours very accurately. Is it possible to use this single sensor as a line follower? As the robot should be able to drive on a curvy course a single sensor is probably not enough? &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="15350" LastEditorUserId="10596" LastEditDate="2016-11-21T10:40:28.120" LastActivityDate="2016-11-22T15:37:07.177" Title="Line follower for coloured lines" Tags="&lt;raspberry-pi&gt;&lt;line-following&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11093" PostTypeId="2" ParentId="11072" CreationDate="2016-11-20T17:59:36.710" Score="0" Body="&lt;p&gt;Interesting question.  Some degree of precision is required.  There are two ways to do this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;a) use an encoder associated with a wheel which reports the rotary position. That value is then related to the wheel circumference to obtain the distance travelled. Perhaps a wifi transmitter on each carriage would be more practical than wiring.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;b) use an absolute positioning measurement system.  Your dimensions of 100m x 50m are very large and clearly any traditional belt drive/screw drive is impractical. As an example of absolute positioning, a laser rangefinder (+/- 1-2mm) at each corner would locate the gantry.  How a commercial product would be interfaced with the PID/control system is a homework exercise.&lt;/p&gt;&#xA;" OwnerUserId="15266" LastActivityDate="2016-11-20T17:59:36.710" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11094" PostTypeId="2" ParentId="11092" CreationDate="2016-11-20T20:30:31.793" Score="0" Body="&lt;p&gt;IR sensors are about reflection. With TCRT5000, distinguishing black from white is based on the absorption of the black surface, it almost absorbs all of the IR waves. While white reflects almost all of it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now with different colours, it is all about how much difference is between their absorbtion or reflection capabilities. (I think, you won't be able to make difference between blue and black, unless if it is a really light blue.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you should do is make some tests. Hook-up a single TCRT5000 and measure with red, green, blue and other surfaces. Do a lot of measurements and analyze the results, so you can decide if those colours are entirely distinguishable.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Now the RGB sensor. You should add a datasheet if you want anyone to tell you if it can really work.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Is it possible to use this single sensor as a line follower? As the robot should be able to drive on a curvy course a single sensor is probably not enough? &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Depends on how large is the area that a single sensor can cover. Is it a single pixel sensor or it can detect N x N pixel's colour? It is not impossible to use it.&lt;/p&gt;&#xA;" OwnerUserId="10596" LastEditorUserId="10596" LastEditDate="2016-11-20T20:40:15.100" LastActivityDate="2016-11-20T20:40:15.100" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11097" PostTypeId="2" ParentId="11089" CreationDate="2016-11-21T08:09:53.227" Score="1" Body="&lt;p&gt;Making a plot in Matlab can be done using the &lt;code&gt;plot(data)&lt;/code&gt; &lt;a href=&quot;https://www.youtube.com/watch?v=g-6IamNXkuc&quot; rel=&quot;nofollow noreferrer&quot;&gt;command&lt;/a&gt; where data is a vector containing the series of points to plot. Further refinements to the plot can include the correct timeseries for example plot(data, time) where time is a vector with the same length as data as contains the timestesp at which &lt;code&gt;data&lt;/code&gt; has been sampled. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Repetitive tasks in programming are solved be [loops][2]. Common ones are for-loops or while-loops. For loops (in Matlab) are useful when you know how many times do you want to execute something. While loops are useful when you want to satisfy a condition for stopping (e.g. robot reached its target). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In each loop cycle you have to know what the simulation time of your algorithm is. E.g. you can choose to increment the time variable with 0.1 seconds in each cycle. this will be one timestep. You have to store the value of the positions of the robot (e.g. in a vector) in each timestep (please note that you only posted the velocity calculations, which for the constant input of w1 and w2 will be always constant, so expect a straight line as a velocity plot). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A simple example would be:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;x_init = 0; %[m]&#xA;y_init = 0; %[m]&#xA;&#xA;x_target = 5; %[m]&#xA;y_target = 5; %[m]&#xA;&#xA;x_vel = 1; %[m/s]&#xA;y_vel = 1; %[m/s]&#xA;&#xA;target_reached = 0;&#xA;timestep = 0.1; %[s]&#xA;&#xA;sample_no = 1;&#xA;x_robot(sample_no) = x_init;&#xA;y_robot(sample_no) = y_init;&#xA;timestamps(sample_no) = 0;&#xA;tol = 0.1; %[m]&#xA;&#xA;while ~target_reached &#xA;    %increase timestep&#xA;    sample_no =  sample_no + 1;&#xA;&#xA;    %calculate new position&#xA;    x_robot(sample_no) = x_robot(sample_no - 1) + x_vel * timestep;&#xA;    y_robot(sample_no) = y_robot(sample_no - 1) + y_vel * timestep;&#xA;    %store timestep&#xA;    timestamps(sample_no) = timestamps(sample_no - 1) + timestep;    &#xA;&#xA;    %check if target is reached&#xA;    if ((abs(x_robot(sample_no) - x_target) &amp;lt; tol) || (abs(y_robot(sample_no) - y_target) &amp;lt; tol))&#xA;        target_reached = 1;&#xA;    end&#xA;&#xA;    %insert animation here&#xA;    %...&#xA;end&#xA;&#xA;figure&#xA;plot(x_robot, timestamps);&#xA;figure &#xA;plot(y_robot, timestamps);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Please note that this is a simple example to show how to generate a position plot and requires a number of improvements for making generally applicable. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the animation, at each timestep the a figure should be updated with the current position values of the robot. A tutorial on making animations in Matlab can be found &lt;a href=&quot;https://www.youtube.com/watch?v=g-6IamNXkuc&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="18235" LastEditDate="2018-08-23T13:38:45.403" LastActivityDate="2018-08-23T13:38:45.403" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11101" PostTypeId="2" ParentId="11072" CreationDate="2016-11-21T21:47:20.333" Score="0" Body="&lt;p&gt;I would say the answer to the first question is &quot;Yes and No&quot;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yes, you could hook a stepper motor directly to drive wheels on some sort of shuttle.  CNC controllers normally have a setting for inches/step or some equivalent.  If you set that correctly, the machine should drive the motors &quot;correctly&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But No, this not likely to give you the output you want.  Stepper-based CNC machines work on the idea that the machine never &quot;loses steps&quot;: that for every electrical pulse, the motor moves a fixed amount; and that N forward steps followed by N backwards steps brings you back to exactly where you started.  If you are driving wheels which rely on friction for motion, those two assumptions are almost certain to fail, and your output path will be stretched or compressed in strange ways.&lt;/p&gt;&#xA;" OwnerUserId="1245" LastActivityDate="2016-11-21T21:47:20.333" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11103" PostTypeId="2" ParentId="11092" CreationDate="2016-11-22T15:26:57.983" Score="1" Body="&lt;p&gt;Have you tried using combination of your RGB sensor with other sensors like LDR or photo diode. You can use these 2 sensors on the side with your RGB sensors at the centre which you say is quite accurate.  You can set your potentiometer  such that these 2 sensors can differentiate the background color from the lowers intensity line color. You can make a simple PID controller which can keep the robot following the line using the combination of these 3 sensors, while your RGB sensor can sense the coloured line as it is always on top of the line. I remember making a coloured line follower robot long back using photodiode which could sense the translation in color. Hope it helps.&lt;/p&gt;&#xA;" OwnerUserId="11722" LastEditorUserId="11722" LastEditDate="2016-11-22T15:37:07.177" LastActivityDate="2016-11-22T15:37:07.177" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11104" PostTypeId="1" CreationDate="2016-11-22T20:09:08.423" Score="3" ViewCount="508" Body="&lt;p&gt;There are many methods of exploring in a Reinforcement Learning setting but two of the most used ones are Ornstein Uhlenbeck (OU) processes and epsilon-greedy approaches. Could anyone elucidate the major advantages/disadvantages of using one over the other? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of the things associated with OU processes is that you need to two additional parameters to bias exploration which might mean additional tuning. I'd be glad if someone could help!&lt;/p&gt;&#xA;" OwnerUserId="15348" LastActivityDate="2016-11-23T17:19:32.413" Title="Ornstein Uhlenbeck vs Epsilon Greedy" Tags="&lt;reinforcement-learning&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="2" ClosedDate="2016-11-25T17:19:19.877" ContentLicense="CC BY-SA 3.0" />
  <row Id="11105" PostTypeId="2" ParentId="11104" CreationDate="2016-11-23T17:19:32.413" Score="-1" Body="&lt;p&gt;Ornstein Uhlenbeck processes and epsilon-greedy are no antagonist but epsilon-greedy is a algorithm for finding actions for an Ornstein Uhlenbeck process. Reinforcement learning is another term for a Function Approximation, also known as metaprogramming. The idea is not to focus on the domain which can be control of a car or multi-arm-bandit problem but to recognize the data as a stochastic process. Like all blackbox optimization algorithm the problem is the huge search space. There are unlimited number of possibilites for a function to control the system. According to my knowledge, there is no example in which reinforcement learning ever solved a problem.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2016-11-23T17:19:32.413" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11106" PostTypeId="1" CreationDate="2016-11-23T17:48:09.253" Score="4" ViewCount="1141" Body="&lt;p&gt;I'm trying to perform stereo camera calibration, rectification and disparity map generation. It's working fine with normal sample data. However, I'm trying to use the dual cameras on an iPhone 7+, which have different zoom. The telephoto lens has 2X zoom compared to the wide angle camera. I ran the images through the algorithm, and it is succeeding, although with a high error rate. However, when I open up the rectified images, they have a weird spherical look to the edges. The center looks fine. I'm assuming this is due to the cameras having different zoom levels. Is there anything special I need to do to deal with this? Or do I just need to crop any output to the usable undistorted area? Here is what I'm seeing:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/RUPKv.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/RUPKv.jpg&quot; alt=&quot;Distorted image from rectification step&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3&gt;EDIT:&lt;/h3&gt;&#xA;&lt;p&gt;I tried using the calibration result from these checkerboard images to rectify an image of some objects, and the rectification was way off, not even close. If I rectify one of my checkerboard images, they are spot on. Any ideas why that happens?&lt;/p&gt;&#xA;&lt;p&gt;These are what my input images look like that result in the spherical looking output image. They are both taken from the exact same position, the iPhone was mounted to a tripod and I used a bluetooth device to trigger the shutter so the image wouldn't get shaken, my code automatically takes one image with each lens. I took 19 such images from different angles, all images show the full checkerboard. The more zoomed in image is the one that rectified to the top spherical looking image.&lt;/p&gt;&#xA;&lt;p&gt;This is the code I am running. I compiled it and ran it using the sample images, that worked fine. Ran it with my own images and here I am.  &lt;a href=&quot;https://github.com/sourishg/stereo-calibration&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/sourishg/stereo-calibration&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/5uVyu.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/5uVyu.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/88lzW.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/88lzW.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I might just need to crop the result to a certain area. Regardless, it doesn't seem to work cropping or not when I use a picture I took of normal objects. Here is the output of an image of normal objects I ran through the filter:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/1txCk.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1txCk.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/IPH68.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/IPH68.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15376" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2018-05-14T06:25:35.120" Title="Stereo Camera calibration with different camera types" Tags="&lt;cameras&gt;&lt;stereo-vision&gt;&lt;opencv&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11107" PostTypeId="2" ParentId="11106" CreationDate="2016-11-23T20:12:13.063" Score="3" Body="&lt;p&gt;It looks like what I saw when a colleague of mine was working with fisheye lenses; I found &lt;a href=&quot;http://answers.opencv.org/question/551/rectify-fisheye-stereo-setup/?answer=58645#post-id-58645&quot; rel=&quot;nofollow noreferrer&quot;&gt;this post&lt;/a&gt; after doing an image search for &quot;rectify fisheye image&quot; and following the link from &lt;a href=&quot;https://i.imgur.com/tUKHe.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;this picture&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At that post, they're using openCV to do the rectification. I'm always reluctant to bulk copy/paste someone else's content, so I'll just say that the tl;dr version of that post is:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Long story short, stereoCalibrate() couldn't handle the extreme distortion, but it you can remove that distortion before calling stereoCalibration().&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As I asked in my &lt;a href=&quot;https://robotics.stackexchange.com/questions/11106/stereo-camera-calibration-with-different-camera-types#comment19997_11106&quot;&gt;comment above&lt;/a&gt;, you haven't stated what you're using to do the rectification, so I'm not sure how much this applies to you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hopefully this helps; if it doesn't, please &lt;em&gt;edit your question&lt;/em&gt; to detail what exactly you're doing to generate that image. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2016-11-23T20:12:13.063" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11108" PostTypeId="1" AcceptedAnswerId="11113" CreationDate="2016-11-24T08:48:43.700" Score="4" ViewCount="23408" Body="&lt;p&gt;My question is: what is the difference between DC motor with encoder and DC without encoder? As long as I can control the speed of DC motor using PWM, for example on the Arduino, what is the fundamental difference?&lt;/p&gt;&#xA;" OwnerUserId="15380" LastEditorUserId="14673" LastEditDate="2016-11-24T14:54:58.847" LastActivityDate="2017-07-27T10:35:27.950" Title="What is the difference between DC motor with encoder and DC with out encoder?" Tags="&lt;motor&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11109" PostTypeId="2" ParentId="11108" CreationDate="2016-11-24T08:54:14.053" Score="3" Body="&lt;p&gt;Fundamental difference is closed loop feedback. Without encoder you just know how much speed you sent to engine, but have no information about speed that is on it - lower battery voltage will decrease your speed. Encoder gives you ability to measure engine &lt;s&gt;speed&lt;/s&gt; &lt;strong&gt;position&lt;/strong&gt;, from which you can calculate speed, and regulate those parameters, for example with PID regulator. Usage example can be micromouse robots, where &lt;a href=&quot;https://en.wikipedia.org/wiki/Odometry&quot; rel=&quot;nofollow noreferrer&quot;&gt;odometry&lt;/a&gt; is crucial in moving through maze.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Rotary_encoder&quot; rel=&quot;nofollow noreferrer&quot;&gt;Read this to learn more about rotary encoders.&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="14673" LastEditorUserId="14673" LastEditDate="2016-11-26T09:10:35.680" LastActivityDate="2016-11-26T09:10:35.680" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="11111" PostTypeId="1" AcceptedAnswerId="11112" CreationDate="2016-11-24T13:47:53.650" Score="0" ViewCount="184" Body="&lt;p&gt;I completed the course of Aerial Robotics in Coursera and I want to implement what I learned in a real quadrotor. The thing is that when I see the equations given like this:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/TtsN0.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/TtsN0.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;For the sake of the argument let's assume I have implemented the PD Controllers and every moment I find u1 (the sum of the forces applied to the quadrotor) and u2 (the sum of the moments applied to the quadrotor). I then ask myself: How can I find what force and moment should specifically each one of the motors produce? And here I am stuck as I can't find an answer.Could anyone help?  &lt;/p&gt;&#xA;" OwnerUserId="11647" LastActivityDate="2016-11-24T14:46:39.050" Title="Implementation of the Control of a Quadrotor, as taught in Aerial Robotics in Coursera" Tags="&lt;quadcopter&gt;&lt;control&gt;&lt;motor&gt;&lt;microcontroller&gt;" AnswerCount="1" CommentCount="15" FavoriteCount="0" ClosedDate="2016-11-29T11:45:04.933" ContentLicense="CC BY-SA 3.0" />
  <row Id="11112" PostTypeId="2" ParentId="11111" CreationDate="2016-11-24T14:46:39.050" Score="2" Body="&lt;p&gt;If i've understood your question correctly, you are trying to convert the desired set of moments and total force which you calculated from a hypothetical pd controller into a set of forces. This is the relation that needs to be solved&lt;/p&gt;&#xA;&#xA;&lt;p&gt;\begin{equation}&#xA;\begin{bmatrix}&#xA;u_1\\&#xA;\mathbf{u}_2&#xA;\end{bmatrix}&#xA;=&#xA;\begin{bmatrix}&#xA;1&amp;amp;1&amp;amp;1&amp;amp;1\\&#xA;0&amp;amp;L&amp;amp;0&amp;amp;-L\\&#xA;-L&amp;amp;0&amp;amp;L&amp;amp;0\\&#xA;\gamma&amp;amp;-\gamma&amp;amp;\gamma&amp;amp;-\gamma&#xA;\end{bmatrix}&#xA;\begin{bmatrix}&#xA;F_1\\&#xA;F_2\\&#xA;F_3\\&#xA;F_4\\&#xA;\end{bmatrix}&#xA;\end{equation}&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $u_1$ is the total force of all motors and $\mathbf{u}_2$ is the vector of moments acting on the system. This can simply be solved for by inverting this matrix. So&#xA;\begin{equation}&#xA;\begin{bmatrix}&#xA;1&amp;amp;1&amp;amp;1&amp;amp;1\\&#xA;0&amp;amp;L&amp;amp;0&amp;amp;-L\\&#xA;-L&amp;amp;0&amp;amp;L&amp;amp;0\\&#xA;\gamma&amp;amp;-\gamma&amp;amp;\gamma&amp;amp;-\gamma&#xA;\end{bmatrix}^{-1}&#xA;\begin{bmatrix}&#xA;u_1\\&#xA;\mathbf{u}_2&#xA;\end{bmatrix}&#xA;=&#xA;\begin{bmatrix}&#xA;F_1\\&#xA;F_2\\&#xA;F_3\\&#xA;F_4\\&#xA;\end{bmatrix}&#xA;\end{equation}&lt;/p&gt;&#xA;" OwnerUserId="8842" LastActivityDate="2016-11-24T14:46:39.050" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11113" PostTypeId="2" ParentId="11108" CreationDate="2016-11-24T15:41:42.563" Score="6" Body="&lt;p&gt;As @szczepan mentions, the difference is one of feedback.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are many ways to get feedback regarding the motion of a dc motor.   People implementing a control system will often put a mark on the motor's shaft, or attach a &quot;flag&quot; of masking tape, so that they can visually see the turning of the shaft.   This helps to ensure the direction of motion is correct (otherwise the dc polarity needs to be reversed).   It also helps for observing motion at slow speeds - but is otherwise not appropriate for an automated system.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to automate the observations of the motor's rotation, you must implement some type of sensor that provides appropriate information to the control computer.   There are many ways to do this.   For example, you can monitor the current being consumed by the motor's windings, and use the motor constant $k_\tau$, to infer the torque generated by the motor.   This can be related to acceleration of the shaft by using an appropriate dynamic model of the system.   This method, however, is not very accurate and is prone to modelling errors and signal noise.  This method is similar to you monitoring the PWM output and inferring motion dynamics - neither is robust to changing dynamics of the system.  Another approach is to glue a magnet to the shaft, and monitor it with a Hall effect sensor.  This will provide a single pulse to the computer for each rotation of the shaft.   This is frequently a solution for high-temperature, or dirty, environments (such as in automotive applications).   However, often you need finer granularity of the motion.  That is where encoders come in.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are two basic types of encoders:  incremental and absolute.  They can be further characterized as quadrature, or non-quadrature encoders.  A non-quadrature incremental encoder provides a single pulse to the controller for every incremental motion of the motor shaft.  As the previous answer makes clear, this position feedback can be interpreted to infer velocity, acceleration, and possibly jerk (although three derivatives of a sensed value are &quot;spikey&quot; in most applications).   This type of encoder, however, only provides information when the position changes, and it does not provide any information about the direction of motion.   A quadrature encoder provides two pulses, out of phase, that can be used to detect direction also.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;An absolute encoder can provide not only the same information as the incremental encoder does, but it also has many more bits of information from which you can know the angular position of the shaft, in addition to detecting the incremental changes in position.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can make a very simple encoder by using a disc with slots cut into it.   Place a photodiode on one side of the disc, and a photodetector on the opposite side.  You will get one pulse each time a slot passes between the sensor elements.   As you can see, the accuracy of motion detection is determined by the number of slots in the disc.   Encoders are available with many different numbers of pulses per revolution. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suggest reading a book such as this one if you want to know more about motion metrology:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/vQAeu.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vQAeum.jpg&quot; alt=&quot;Heidenhein metrology book&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11125" LastEditorUserId="37" LastEditDate="2016-11-29T11:54:31.213" LastActivityDate="2016-11-29T11:54:31.213" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11114" PostTypeId="1" CreationDate="2016-11-24T21:26:05.227" Score="2" ViewCount="90" Body="&lt;p&gt;Does anyone know how one can calculate the exact damping of KUKA arm during impedance control mode. According to their manual one can control only the Lehr's ratio. However, I want to know the exact value,say in Ns/m.&lt;/p&gt;&#xA;" OwnerUserId="11722" LastActivityDate="2016-12-25T17:33:38.280" Title="KUKA arm's damping ratio" Tags="&lt;kuka&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11115" PostTypeId="2" ParentId="9240" CreationDate="2016-11-24T23:27:13.683" Score="1" Body="&lt;p&gt;I have drivers for the kuka iiwa and integrate the V-REP simulator with my library &lt;a href=&quot;https://github.com/ahundt/grl&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;strong&gt;grl&lt;/strong&gt;&lt;/a&gt;, you can even have the simulator drive the physical robot. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another independent tool is &lt;a href=&quot;https://github.com/SalvoVirga/iiwa_stack&quot; rel=&quot;nofollow noreferrer&quot;&gt;iiwa_stack&lt;/a&gt;. &#xA;grl can integrate with iiwa_stack as well.&lt;/p&gt;&#xA;" OwnerUserId="304" LastActivityDate="2016-11-24T23:27:13.683" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11116" PostTypeId="1" CreationDate="2016-11-25T00:53:07.197" Score="0" ViewCount="56" Body="&lt;p&gt;Is it possible to enable/disable the 4 Ioni drives mounted in Ionicube individually?  It appears with IoniCube that enable/disable applies to all Ioni drives simultaneously.  However, Ionicube 1X does appear to have enable/disable for individual Ioni drives.  Can you confirm?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wish to control the enable/disable state of each Ioni drive separately.  And if possible to do this on IoniCube.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most grateful for your help!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Best wishes,&#xA;Mark&lt;/p&gt;&#xA;" OwnerUserId="14696" LastActivityDate="2017-03-09T11:12:09.520" Title="Granite devices Ionicube" Tags="&lt;motor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11118" PostTypeId="1" AcceptedAnswerId="11133" CreationDate="2016-11-25T15:28:36.703" Score="3" ViewCount="1585" Body="&lt;p&gt;I'm working on Graph SLAM to estimate robot poses (x, y, z, roll, pitch, yaw). Now I want to integrate GPS measurement (x, y, z, of course no angles).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I implemented GPS as pose's prior. But I have a problem.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Position(x, y, z) is perfectly corrected by graph optimization&lt;/li&gt;&#xA;&lt;li&gt;But orientaiton(roll, pitch, yaw) is very unpredictable(unstable) after optization.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;i.e. It looks like position is fitted by the sacrifice of orientation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm very confused about what's the right way of integrating GPS into graph SLAM. GPS should be handled as prior? or landmark? or one of pose-vertices?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;...Thanks for your help in advance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I use g2o as a graph-optimization library. In g2o, I implemented GPS measurement with EdgeSE3_Prior. GPS's quality is RTK so it's enough precise.&lt;/p&gt;&#xA;" OwnerUserId="15206" LastActivityDate="2018-08-01T12:19:49.200" Title="Integrating GPS into Graph SLAM (how orientation fixed?)" Tags="&lt;localization&gt;&lt;slam&gt;&lt;ros&gt;&lt;gps&gt;&lt;pose&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11119" PostTypeId="2" ParentId="11114" CreationDate="2016-11-25T17:03:12.310" Score="1" Body="&lt;p&gt;If Kuka does not specify the damping ratio, then on remaining option is determining it experimentally. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can excite the structure (e.g. with an excitation hammer) and measure the vibration response (e.g. using accelerometers). Please note that you might need to measure in different poses to compute damping for different joint and to see sensibility to pose. &lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2016-11-25T17:03:12.310" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11121" PostTypeId="2" ParentId="10547" CreationDate="2016-11-26T07:44:15.250" Score="0" Body="&lt;p&gt;If you are controlling the Robot with ROS, i suggest you to look at this package &lt;a href=&quot;http://wiki.ros.org/audio_common&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;audio_common&quot;&gt;audio_common&lt;/a&gt;. With this we can live stream the audio or capture it. You can use raspberry pi as a node and your laptop as a ros server.There is a tutorial to do exactly what you want over here &quot;&lt;a href=&quot;http://wiki.ros.org/audio_common/Tutorials/Remotely%20listening%20through%20robot%20ears&quot; rel=&quot;nofollow noreferrer&quot;&gt;Remotely listen to what your robot is listening&lt;/a&gt;&quot;&lt;/p&gt;&#xA;" OwnerUserId="11126" LastEditorUserId="11126" LastEditDate="2016-11-26T07:50:32.317" LastActivityDate="2016-11-26T07:50:32.317" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11122" PostTypeId="1" CreationDate="2016-11-26T15:38:37.583" Score="0" ViewCount="687" Body="&lt;pre&gt;&lt;code&gt;%PREDICT Apply odometry model for differential drive robot.&#xA;%   [R,FXR,PATH] = PREDICT(R,ENC,PARAMS) &#xA;%   calculates the final pose and final pose covariance matrix given&#xA;%   a start pose, a start pose covariance matrix and the angular wheel&#xA;%   displacements in ENC. PARAMS contains the robot model and the&#xA;%   error growth coefficients.&#xA;%&#xA;%   Input arguments:&#xA;%      R   : differential drive robot object with start pose R.X, R.C&#xA;%      ENC : structure with fields&#xA;%            ENC.PARAMS.KL: error growth coefficient of left wheel&#xA;%            ENC.PARAMS.KR: error growth coefficient of right wheel&#xA;%               with unit in [1/m]. &#xA;%            ENC.STEPS(i).DATA1: angular displacements of left wheel&#xA;%            ENC.STEPS(i).DATA2: angular displacements of right wheel&#xA;%               in [rad] and monotonically increasing&#xA;%      PARAMS.B : wheelbase in [m]. Distance between the two wheel&#xA;%                 contact points&#xA;%      PARAMS.RL: radius of left wheel in [m]&#xA;%      PARAMS.RR: radius of right wheel in [m]&#xA;%&#xA;%   Output arguments:&#xA;%      R    : differential drive robot object with final pose R.X, R.C&#xA;%      FXR  : 3x3 process model Jacobian matrix linearized with&#xA;%             respect to XROUT&#xA;%      PATH : array of structure with fields PATH(i).X (3x1) and &#xA;%             PATH(i).C (3x3) which holds the poses and the pose&#xA;%             covariance matrices over the path&#xA;%&#xA;%   The function implements an error model for differential drive&#xA;%   robots which models non-systematic odometry errors in the wheel &#xA;%   space and propagates them through the robot kinematics onto the&#xA;%   x,y,theta-pose level.&#xA;%&#xA;%   Reference:&#xA;%      K.S. Chong, L. Kleeman, &quot;Accurate Odometry and Error Modelling&#xA;%      for a Mobile Robot,&quot; IEEE International Conference on Robotics&#xA;%      and Automation, Albuquerque, USA, 1997.&#xA;%&#xA;%   See also SLAM.&#xA;&#xA;% v.1.1, ~2000, Kai Arras, ASL-EPFL, Felix Wullschleger, IfR-ETHZ&#xA;% v.1.2, 29.11.2003, Kai Arras, CAS-KTH: toolbox version&#xA;&#xA;function [r,Fxr,path] = predict(r,enc)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;When I try to run this complete code, it asks me to input values for R and Enc. I am not sure whether they are just one digit values or a matrix. Can anyone help me by looking at the description in the code, what kind of input is required. &lt;/p&gt;&#xA;" OwnerUserId="15346" LastActivityDate="2016-12-26T18:12:07.990" Title="Differential Drive Odometry Model" Tags="&lt;mobile-robot&gt;&lt;odometry&gt;&lt;forward-kinematics&gt;&lt;differential-drive&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11123" PostTypeId="2" ParentId="11122" CreationDate="2016-11-26T18:00:31.107" Score="1" Body="&lt;p&gt;The inputs needed for the function are objects of the structures R and ENC. The member variables are clearly specified in the description. Declare and initialize these values before calling the function. That should solve your problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;learn more about structures in Matlab and how to initialize one here: &lt;a href=&quot;https://in.mathworks.com/help/matlab/ref/struct.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://in.mathworks.com/help/matlab/ref/struct.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope it helps!&lt;/p&gt;&#xA;" OwnerUserId="14106" LastActivityDate="2016-11-26T18:00:31.107" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11124" PostTypeId="1" AcceptedAnswerId="11125" CreationDate="2016-11-26T19:11:03.550" Score="0" ViewCount="151" Body="&lt;p&gt;&lt;strong&gt;PREFACE:&lt;/strong&gt;&#xA;&lt;br/&gt;&#xA;&lt;strong&gt;THIS QUESTION REGARDS FTC ROBOTICS&lt;/strong&gt;&#xA;I am aware that a question similar to this exists on SE and I have looked at it, but the solutions provided did not solve my problem, and the nature of my question has additional constraints and criteria involved that make this a distinct problem.&#xA;&lt;br/&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;PROBLEM:&lt;/strong&gt;&#xA;&lt;br/&gt;&#xA;I have been put in charge of creating java classes to add to an existing app, used to control a robot (FTC robotics, for those who are wondering). The features I have been given to add to the app include:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Shape detection (provided by FTC, all I need to do is tweak some&#xA;files)&#xA;&lt;br/&gt;&lt;/li&gt;&#xA;&lt;li&gt;Automatically record and save a video in the background of the app using the back camera&#xA;&lt;br/&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;QUESTION:&lt;/strong&gt;&#xA;&lt;br/&gt;&#xA;I was wondering, if this is even possible, how I would go about both recording video and using shape detection? How do I even record a video from the background of an app? If i cannot achieve both I was told to prioritize recording, as we have substitutes for shape detection.&#xA;&lt;br/&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;SPECS:&lt;/strong&gt;&#xA;&lt;br/&gt;&#xA;Motorola moto g 2nd gen with Android Marshmallow&#xA;&lt;br/&gt;&#xA;Or as a fallback:&#xA;&lt;br/&gt;&#xA;ZTE speed with Android Marshmallow&lt;/p&gt;&#xA;" OwnerUserId="14767" LastActivityDate="2016-11-26T22:41:38.137" Title="Can I use a FTC regulation phone to use the camera on multiple tasks?" Tags="&lt;wheeled-robot&gt;&lt;computer-vision&gt;&lt;cameras&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11125" PostTypeId="2" ParentId="11124" CreationDate="2016-11-26T22:41:38.137" Score="0" Body="&lt;p&gt;OpenCV is a comprehensive vision processing library with an Android port. It should work fine for both of your needs.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2016-11-26T22:41:38.137" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11126" PostTypeId="1" CreationDate="2016-11-27T03:51:40.260" Score="1" ViewCount="104" Body="&lt;p&gt;&lt;strong&gt;BACKGROUND:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am creating a robot to score the most points in 30 seconds while running autonomously. Naturally, two thoughts come to mind: Linear programming and machine learning.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Linear programming would provide a stable, simple method of scoring points. However, it is limited by what it can do, and optimizing scores would require reworking the entire bot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;PROBLEMS:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The robot and code itself can change, but it is not time efficient due to the fact that it would require completely reworking the code and robot by a single programmer. The robot has to work with what its got.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;QUESTION:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can I create Android Java classes to allow my robot to work the field as an AI and tweak its strategy or course of action based on stats from previous rounds? (Self-Supervised Learning) If it is possible to do, how would I do it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;SPECS:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Max robot size of 18'' cubes&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Android Marshmallow&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ZTE speed or Motorola moto g gen 2 phones&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Multiple inputs from a controlling phone and various sensors&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Output to multiple motors and servos&lt;/p&gt;&#xA;" OwnerUserId="14767" LastEditorUserId="14767" LastEditDate="2016-11-28T03:03:49.080" LastActivityDate="2016-11-28T18:50:25.800" Title="Can I create an autonomous robot that can adapt its strategy using machine learning?" Tags="&lt;machine-learning&gt;&lt;automatic&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11127" PostTypeId="1" CreationDate="2016-11-27T05:21:40.247" Score="0" ViewCount="112" Body="&lt;pre&gt;&lt;code&gt;r = 1;&#xA;w1 = 4;&#xA;w2 = 2;&#xA;l = 1;&#xA;&#xA;&#xA;R = [0 -1 0; 1 0 0; 0 0 1];&#xA;X = [(r*w1)/2 + (r*w2)/2; 0 ; (r*w1)/(2*l) - (r*w2)/(2*l)];&#xA;&#xA;A = R*X;&#xA;disp(A)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I am getting the solution for the matrix as [0; 3; 1] which is exactly what I expect. I would like to input a series of w1 and w2, Lets say I have a data file 1.xlsx and 2.xlsx with ten values each. I want to load 1.xlsx into w1 and 2.xlsx into w2 and get ten answers for X. How can I do that?&lt;/p&gt;&#xA;" OwnerUserId="15346" LastActivityDate="2016-11-27T10:46:07.260" Title="Forward Kinematics od Differential Robot" Tags="&lt;matlab&gt;&lt;forward-kinematics&gt;&lt;differential-drive&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11128" PostTypeId="1" AcceptedAnswerId="11130" CreationDate="2016-11-27T09:31:32.213" Score="0" ViewCount="60" Body="&lt;p&gt;I need to find inverse and forward kinematics of Mitsubishi RV-M2 as a homewrok. I found the forward kinematics part. But I got stuck in inverse kinematics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Teacher said we can think that wrist joints is not moving.(To make equations easier I guess.) This is why I thought tetha4(in T4) and tetha5(in T5) should be 0.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is my MATLABcode&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;syms t1 t2 t3 d1 a1 a2 a3 d5 px py pz r1 r2 r3 r4 r5 r6 r7 r8 r9 % sybolic equations&#xA;&#xA;T1=[cos(t1)     -sin(t1)        0       0;&#xA;    sin(t1)     cos(t1)         0       0;&#xA;    0            0              1       d1;&#xA;    0            0              0       1;];&#xA;&#xA;T2=[cos(t2)     -sin(t2)        0       a1; &#xA;    0            0              -1      0; &#xA;    sin(t2)     cos(t2)         0       0;&#xA;    0            0              0       1;];&#xA;&#xA;T3=[cos(t3)     -sin(t3)        0       a2;&#xA;    sin(t3)     cos(t3)         0       0;&#xA;    0             0             1       0;&#xA;    0             0             0       1;];&#xA;&#xA;T4= [0           -1             0       a3;   &#xA;     1             0             0       0;&#xA;     0             0             1       0;&#xA;     0             0             0       1;];&#xA;&#xA;T5=[1             0             0       0; &#xA;    0             0            -1      -d5; &#xA;    0             1             0       0;&#xA;    0             0             0       1;];&#xA;&#xA;Tg= [r1 r2 r3 px;&#xA;    r4 r5 r6 py;&#xA;    r7 r8 r9 pz;&#xA;    0 0 0 1;];&#xA;&#xA;left= inv(T1)* Tg;&#xA;left=left(1:4,4);&#xA;left=simplify(left)&#xA;right= T2*T3*T4*T5;&#xA;right=right(1:4,4);&#xA;right=simplify(right)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This gives us&#xA;&lt;a href=&quot;https://i.stack.imgur.com/ggoGz.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ggoGz.jpg&quot; alt=&quot;matrice&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I find t1 using this and results are matching with forward kinematics equations.  But I couldn't find t2 and t3. How can  I do that? Is there a formula or somethig?&lt;/p&gt;&#xA;" OwnerUserId="15401" LastActivityDate="2016-11-27T13:23:21.097" Title="I found the matrices but can't find the inverse kinematics angles" Tags="&lt;kinematics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11129" PostTypeId="2" ParentId="11127" CreationDate="2016-11-27T10:46:07.260" Score="1" Body="&lt;p&gt;1) Load or import the data that is in your xlsx files into w1 and w2, by using &lt;a href=&quot;https://robotics.stackexchange.com/questions/11127/forward-kinematics-od-differential-robot&quot;&gt;importdata&lt;/a&gt; as an array of values.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) Write a &lt;code&gt;for&lt;/code&gt; loop for extractting individual values from w1 and w2, to perform the necessary computation.&lt;/p&gt;&#xA;" OwnerUserId="11126" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2016-11-27T10:46:07.260" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11130" PostTypeId="2" ParentId="11128" CreationDate="2016-11-27T13:23:21.097" Score="1" Body="&lt;p&gt;I don't want to just give the answer....try squaring the $x$ and $z$ terms (after moving $a_1$ to the left) and see where that gets you.   &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2016-11-27T13:23:21.097" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11131" PostTypeId="2" ParentId="11126" CreationDate="2016-11-27T14:04:04.797" Score="3" Body="&lt;p&gt;I think the problem you're going to find is that machine learning requires &lt;em&gt;learning&lt;/em&gt;. If the goals or objective vary just a little, then manually adjusting the software shouldn't be too difficult (if you programmed it well), and it might only take a few trials for the AI to adjust to the new scenario. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the objectives change so much that you're looking at &quot;reworking the entire bot,&quot; then you're probably also looking at ditching the previous AI and retraining it on the new course. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;:EDIT: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wrote the answer above on my phone over the weekend. I'll add some more content now:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you're asking for is almost more like consciousness than a &quot;simple task&quot; - you want the robot to be spatially aware of itself, aware of the objectives its been given, how to move around its environment and then how to use its physical structure to achieve the goal. I'm positive this is all very far beyond the scope of the project/competition you're asking about. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The route I would take would be to break each action out into their own functions and then tune each as required. So you might have functions like:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Localize - this is how the robot determines where it is. Dead reckoning, localization, SLAM (simultaneous localization and mapping), etc. would exist here.&lt;/li&gt;&#xA;&lt;li&gt;Navigate - this would do pathfinding as required to set waypoints or instructions for how the robot would get from a given start to a given end. Maps and navigation routines like A*, Dijkstra, etc. exist here. &lt;/li&gt;&#xA;&lt;li&gt;Locomotion - this would be the low-level interface between the navigate function and the wheels. Navigate says turn to a heading of XXX degrees and travel YYY centimeters, Locomotion actually does it. Here's where the wheel base, wheel radius, gear ratios, and other parameters related to locomotion reside. &lt;/li&gt;&#xA;&lt;li&gt;Obstacle detection - if required, a detected obstacle could pause the navigate/locomotion routine, update the map with an obstacle, and force a new navigate call to find the best path from the current position to the original destination. Mapping, SLAM, or other detection algorithms could exist here. &lt;/li&gt;&#xA;&lt;li&gt;Manipulate - this would control the device on the robot that is designed to interact with the course.&lt;/li&gt;&#xA;&lt;li&gt;Mission control - this would be the higher-level function that calls everything else. &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So, for example, if you were given some arbitrary number of ball locations and told to deposit them in a basket, your code might look something like the following (Matlab) pseudo-code:&lt;/p&gt;&#xA;&#xA;&lt;pre class=&quot;lang-matlab prettyprint-override&quot;&gt;&lt;code&gt;function MissionControl()&#xA;basketLocation = [xBasket, yBasket];&#xA;objective(1).startPosition = [xBall1, yBall1];&#xA;objective(2).startPosition = [xBall2, yBall2];&#xA;% This continues for all objectives&#xA;&#xA;% All of the objective locations are at the basket, so&#xA;% assign all of the objective goals to that location.&#xA;[objective.goal] = deal(basketLocation);&#xA;&#xA;for currentObjective = 1:numel(objective)&#xA;    currentPosition = Localize();&#xA;    path = Navigate(currentPosition, objective(currentObjective).startPosition);&#xA;    for currentWaypoint = 1:numel(path)&#xA;        Locomotion(currentPosition,path(currentWaypoint));&#xA;        currentPosition = Localize();&#xA;    end&#xA;    Manipulate('get');&#xA;    currentPosition = Localize();&#xA;    path = Navigate(currentPosition,objective(currentObjective).goal);&#xA;    for currentWaypoint = 1:numel(path)&#xA;        Locomotion(currentPosition,path(currentWaypoint));&#xA;        currentPosition = Localize();&#xA;    end&#xA;    Manipulate('put')&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Each subfunction has its own parameters - again, things related to how the robot moves goes in &lt;code&gt;Locomotion()&lt;/code&gt;. How the robot &lt;code&gt;'get'&lt;/code&gt;s the ball goes in &lt;code&gt;Manipulate()&lt;/code&gt;, etc. If you were going to insist on using AI, I would encapsulate each AI routine in a similar manner, such that there are actually several AI routines. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Again, if there are any dramatic changes, such as a dramatically different footprint or something similar, you'll probably need to wind up retraining the AI. If you don't discard the previous AI, then all of the new training is going to try to &quot;fight&quot; its previous learning of how to behave or interact, and the result may not be optimal in either scenario (old or new). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But like I mentioned earlier, any use of AI would, in my opinion, be a big overkill. Parameterize your code - don't use any &lt;a href=&quot;https://en.wikipedia.org/wiki/Magic_number_(programming)#Unnamed_numerical_constants&quot; rel=&quot;nofollow noreferrer&quot;&gt;magic numbers&lt;/a&gt; - and you should be able to update/tune your performance relatively quickly by tweaking the configuration parameters.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2016-11-28T15:27:23.000" LastActivityDate="2016-11-28T15:27:23.000" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11132" PostTypeId="2" ParentId="11118" CreationDate="2016-11-27T14:22:08.587" Score="0" Body="&lt;p&gt;Frankly speaking, I don't have any experience with implementing a SLAM algorithm. That said, GPS gives you a position and SLAM gives you a position. My advice would be to use a data fusion technique, such as a Kalman filter or maybe even the Madgwick filter, to combine the position estimates.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-11-27T14:22:08.587" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11133" PostTypeId="2" ParentId="11118" CreationDate="2016-11-28T01:12:36.587" Score="4" Body="&lt;p&gt;You can use a very low information matrix value at the orientation elements of your state,  given that the information matrix is the inverse of the covariance matrix. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The covariance matrix represents the uncertainty about the measurement,  and the information matrix the certainty about it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, the GPS constraints would have a small value at the elements of the information matrix corresponding to the orientation &lt;/p&gt;&#xA;" OwnerUserId="15119" LastActivityDate="2016-11-28T01:12:36.587" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11135" PostTypeId="2" ParentId="11116" CreationDate="2016-11-28T08:11:52.777" Score="1" Body="&lt;p&gt;The IONICUBE has global enable and STO inputs, so all IONI drives are enabled/disabled simultaneously. And thus, enabling a single IONI drive is not possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The IONICUBE 1X only hosts a single IONI drive, and thus it's enable and STO inputs control only that drive.&lt;/p&gt;&#xA;" OwnerUserId="13118" LastEditorUserId="37" LastEditDate="2017-03-09T11:12:09.520" LastActivityDate="2017-03-09T11:12:09.520" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11137" PostTypeId="1" AcceptedAnswerId="11140" CreationDate="2016-11-28T10:46:01.140" Score="2" ViewCount="1048" Body="&lt;p&gt;I'm currently programming a C socket for communicating via (Ethernet) TCP/IP with an UR3 robot which control software is version 3.3. I'm able to get raw data from the ports 30001,30002, and 30003. I can deserialize the data thanks to the source of a ROS driver. But I wish to have more information about deserialization, and Universal Robots seems to not provide such information. Do anybody knows where to get info about the TCP packets that the robot sends?&lt;/p&gt;&#xA;" OwnerUserId="6814" LastEditorUserId="6814" LastEditDate="2016-11-28T12:02:17.707" LastActivityDate="2016-11-28T15:47:16.927" Title="UR3 TCP/IP communication protocol" Tags="&lt;robotic-arm&gt;&lt;communication&gt;&lt;c&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11139" PostTypeId="2" ParentId="4901" CreationDate="2016-11-28T15:16:26.463" Score="9" Body="&lt;p&gt;The paper &lt;a href=&quot;http://conf-scoop.org/ACE-2013/13_Reza2_ACE.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;Controlling of Quadrotor UAV Using a Fuzzy System for Tuning the PID Gains in Hovering Mode&lt;/em&gt; by E. Abbasi, M. J. Mahjoob&lt;/a&gt; explains how to tune PID gains with fuzzy logic. You can find many papers about singleton tuning but this paper shows totally fuzzy control&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;find PID gains with ziegler-nichols (or another technique)&lt;/li&gt;&#xA;&lt;li&gt;Create a fuzzy PID gain changer which has inputs error (e) and change in error(de)&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Define fuzzification graphs for inputs and outputs. Define limits (also you can change the shape) like &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;name       [min,peak,max]&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;very small [-1,-1,-0.6], small [-1,-0.6,0], medium [-0.6,0,0.6], big [0,0.6,1], very big [0.6,1,1]&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;create rules like&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;if **e** and/or **de** *fuzzyname* (small,big etc.) than KI is fuzzyname (small,big etc.)&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Defuzzyfy the result.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;You can use tools like matlab fuzzy toolbox or python skfuzzy &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The tipping problem can be used as Fuzzy-PID just change qualtiy as e and service as de and lastly you can change tip output as KP/ KI/ KD&#xA;(there is example about tipping problem: &lt;em&gt;python scikit fuzzy - Fuzzy Control Systems: The Tipping Problem&lt;/em&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note 1: Error ranges should be well defined so you must log the error and change in error. The limits must be in max and min values of these values&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note 2: The output value range is good between -1 and 1. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;An example code for Fuzzy-PID in python is here:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;# -*- coding: utf-8 -*-&#xA;&quot;&quot;&quot;&#xA;@author: acs&#xA;&quot;&quot;&quot;&#xA;&#xA;import skfuzzy as fuzz&#xA;from skfuzzy import control as ctrl&#xA;import acspid&#xA;import numpy as np&#xA;from matplotlib import pyplot as plt&#xA;&#xA;plt.ion()&#xA;fig=plt.figure()&#xA;&#xA;ferr = ctrl.Antecedent(np.arange(-150, 150, 1), 'ferr')&#xA;fder = ctrl.Antecedent(np.arange(-150, 150, 1), 'fder')&#xA;fout = ctrl.Consequent(np.arange(-1, 1, 0.01), 'fout')&#xA;&#xA;ferr.automf(5)&#xA;fder.automf(5)&#xA;fout.automf(5)&#xA;fout['poor'] = fuzz.trimf(fout.universe, [-1, -1, -0.5])&#xA;fout['mediocre'] = fuzz.trimf(fout.universe, [-1, -0.5, 0])&#xA;fout['average'] = fuzz.trimf(fout.universe, [-0.1, 0, 0.1])&#xA;fout['decent'] = fuzz.trimf(fout.universe, [0, 0.5, 2])&#xA;fout['good'] = fuzz.trimf(fout.universe, [0.5, 1, 1])&#xA;fout.view()&#xA;ferr.view()&#xA;fder.view()&#xA;plt.show()&#xA;plt.pause(0.0001)&#xA;&#xA;#'poor'; 'mediocre'; 'average'; 'decent', or 'good'&#xA;rules=[]&#xA;rules.append(ctrl.Rule(ferr['average'] | fder['average'] , fout['average']))&#xA;rules.append(ctrl.Rule(ferr['decent'] | fder['decent'] , fout['decent']))&#xA;rules.append(ctrl.Rule(ferr['good'] | fder['good'] , fout['good']))&#xA;rules.append(ctrl.Rule(ferr['mediocre'] | fder['mediocre'] , fout['mediocre']))&#xA;rules.append(ctrl.Rule(ferr['poor'] | fder['poor'] , fout['poor']))&#xA;&#xA;fctrl = ctrl.ControlSystem(rules)&#xA;fpid = ctrl.ControlSystemSimulation(fctrl)&#xA;&#xA;pid=acspid.pidcont(1.2,0.02,0.01,5,-5)&#xA;&#xA;pid2=acspid.pidcont(1.2,0.02,0.01,5,-5)&#xA;&#xA;d=np.zeros(10)&#xA;for i in range(10):&#xA;    d=np.append(d,np.ones(10)*np.random.uniform(-100,100,1))&#xA;&#xA;print len(d)&#xA;m=[]&#xA;m.append(0.0)&#xA;m2=[]&#xA;m2.append(0.0)&#xA;e=[]&#xA;de=[]&#xA;e2=[]&#xA;de2=[]&#xA;&#xA;kp=pid.kp&#xA;kd=pid.kd&#xA;ki=pid.ki&#xA;for i in range(len(d)):&#xA;    pid.setDesired(d[i])&#xA;    print &quot;e:&quot;,pid.error ,&quot;\t de:&quot;, pid.ed&#xA;    fpid.input['ferr'] = pid.error&#xA;    fpid.input['fder'] = pid.ed&#xA;    fpid.compute()&#xA;    newpid=np.abs(fpid.output['fout'])&#xA;    print &quot;PID:&quot;, newpid*pid.kp,&quot;\t&quot;,newpid*pid.ki,&quot;\t&quot;,newpid*pid.kd&#xA;    pid.setGains(newpid*kp,newpid*ki,newpid*kd)&#xA;    newm=pid.update(m[-1])&#xA;    newm=m[-1]+newm&#xA;    print i,m[-1],newm&#xA;    m.append(newm)&#xA;    e.append(pid.error)&#xA;    de.append(pid.ed)&#xA;&#xA;    pid2.setDesired(d[i])&#xA;    newm2=pid2.update(m2[-1])&#xA;    newm2=m2[-1]+newm2&#xA;    m2.append(newm2)&#xA;    e2.append(pid2.error)&#xA;    de2.append(pid2.ed)&#xA;&#xA;    ax1 =plt.subplot(2,1,1)&#xA;    ax1.set_xlim([0, len(d)])&#xA;    ax1.set_ylim([-200, 200])&#xA;    plt.grid()&#xA;    plt.plot(range(len(m)),m,linewidth=5.0)&#xA;    plt.plot(range(len(m2)),m2,linewidth=2.0)&#xA;    plt.plot(range(len(d)),d,'g--')&#xA;&#xA;    plt.title('Status')&#xA;    ax2=plt.subplot(2,1,2)&#xA;    ax2.set_xlim([0, 50])&#xA;    ax2.set_ylim([-100, 100])&#xA;    plt.plot(range(len(e)),e,'r-',range(len(de)),de,'g-')&#xA;    plt.grid()&#xA;    plt.title('e and ed')&#xA;    #plt.draw()&#xA;    plt.show()&#xA;    plt.pause(0.0001)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Fuzzy input membership functions:&lt;/strong&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/Kbo0E.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Kbo0E.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Fuzzy output Membership function:&lt;/strong&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/HLtbr.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HLtbr.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Status:&lt;/strong&gt; In the status plot dashed line is target value, red line is &lt;strong&gt;PID&lt;/strong&gt; and green line is &lt;strong&gt;Fuzzy-PID&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here the acspid class&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;class pidcont():&#xA;    def __init__(self,P,I,D,pmax,pmin):&#xA;        self.kp=P&#xA;        self.kd=D&#xA;        self.ki=I&#xA;        self.pidmax=pmax&#xA;        self.pidmin=pmin&#xA;        self.desired=0.0&#xA;        self.error=0.0&#xA;        self.elast=0.0&#xA;        self.esum=0.0&#xA;        self.eder=0.0&#xA;    def update(self,current):&#xA;        self.error=self.desired-current&#xA;        self.eder=self.error-self.elast&#xA;        self.elast=self.error&#xA;        self.esum=self.esum+self.error&#xA;        if self.esum&amp;gt;self.pidmax:&#xA;            self.esum=self.pidmax&#xA;        elif self.esum&amp;lt;self.pidmin:&#xA;            self.esum=self.pidmin&#xA;&#xA;        self.P=self.kp*self.error&#xA;        self.D=self.kd*self.eder&#xA;        self.I=self.ki*self.esum&#xA;        pid=self.P+self.I+self.D&#xA;        return pid&#xA;    def setDesired(self,d):&#xA;        self.desired=d&#xA;    def setGains(self,P,I,D):&#xA;        self.kp=P&#xA;        self.kd=D&#xA;        self.ki=I&#xA;    def setLimits(self,pmax,pmin):&#xA;        self.pidmax=pmax&#xA;        self.pidmin=pmin&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/SN3pq.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/SN3pq.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2019-01-24T20:23:52.140" LastActivityDate="2019-01-24T20:23:52.140" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="11140" PostTypeId="2" ParentId="11137" CreationDate="2016-11-28T15:39:16.190" Score="1" Body="&lt;p&gt;Based on the ports you have mentioned you are probably using URScript. &#xA;Are you aware of &lt;a href=&quot;https://s3-eu-west-1.amazonaws.com/ur-support-site/16496/Client_Interface.xlsx&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; documentation from the &lt;a href=&quot;https://www.universal-robots.com/how-tos-and-faqs/how-to/ur-how-tos/remote-control-via-tcpip-16496/&quot; rel=&quot;nofollow noreferrer&quot;&gt;UR website&lt;/a&gt;, describing the ethernet packets?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The example given is&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Lets say the client has recieved this data:                                                         &#xA;&#xA;Received 465 bytes.                                                     &#xA;Bytes: [0] [0] [1] [209] [16] [0] [0] [0] [29] [0] [0] [0] [0] [0] [0] [5] [7] [246] [1] [1] [1] [0] [0] [0] [0] [0] [63] [240] [0] [0] [0] [0] [0] [0] [0] [0]                                                     &#xA;[0] [251] [1] [64] [1] [78] [244] [77] [189] [249] [149] [64] [1] [78] [247] [89] [95] [104] [85] [0] [0] [0] [0] [0] [0] [0] [0] [188] [220] [97] [3] [66] [62]                                                        &#xA;[0] [0] [66] [0] [102] [103] [66] [99] [153] [154] [253] [191] [246] [74] [170] [216] [242] [29] [102] [191] [246] [74] [178] [44] [92] [72] [137] [0] [0] [0] [0]                                                      &#xA;[0] [0] [0] [0] [192] [1] [106] [78] [66] [63] [153] [154] [66] [4] [204] [205] [66] [104] [0] [0] [253] [63] [253] [49] [202] [91] [202] [8] [64] [63] [253] [49]                                                      &#xA;[210] [233] [51] [16] [35] [0] [0] [0] [0] [0] [0] [0] [0] [191] [155] [135] [34] [66] [62] [0] [0] [65] [249] [153] [154] [66] [100] [0] [0] [253] [191] [220] [115]                                                       &#xA;[204] [104] [205] [239] [254] [191] [220] [118] [68] [109] [49] [34] [158] [0] [0] [0] [0] [0] [0] [0] [0] [190] [60] [245] [109] [66] [63] [153] [154] [66] [25] [51]                                                      &#xA;[51] [66] [116] [204] [205] [253] [63] [242] [146] [224] [105] [231] [66] [209] [63] [242] [146] [65] [3] [193] [196] [156] [0] [0] [0] [0] [0] [0] [0] [0] [190] [115]                                                         &#xA;[157] [190] [66] [62] [0] [0] [66] [21] [51] [51] [66] [119] [153] [154] [253] [191] [231] [207] [8] [215] [85] [22] [88] [191] [231] [206] [77] [130] [151] [190] [17]                                                     &#xA;[191] [146] [242] [158] [148] [114] [240] [57] [188] [224] [224] [96] [66] [68] [102] [103] [66] [37] [153] [154] [66] [127] [153] [154] [253] [0] [0] [0] [53] [4] [63]                                                        &#xA;[217] [153] [52] [224] [36] [238] [93] [191] [217] [153] [169] [67] [241] [211] [23] [63] [207] [255] [137] [8] [22] [253] [198] [63] [240] [0] [170] [111] [207] [54]                                                      &#xA;[176] [63] [243] [51] [88] [137] [58] [151] [217] [63] [201] [148] [119] [151] [70] [237] [237] [0] [0] [0] [29] [5] [64] [143] [64] [0] [0] [0] [0] [0] [64] [143] [64]                                                        &#xA;[0] [0] [0] [0] [0] [64] [143] [64] [0] [0] [0] [0] [0] [0] [0] [0] [61] [3] [0] [63] [0] [0] [0] [0] [63] [123] [129] [184] [27] [129] [184] [28] [63] [112] [225]                                                     &#xA; [14] [16] [225] [14] [17] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [66] [87] [51] [51] [66] [66] [0] [0] [62] [35] [215] [11] [61]                                                      &#xA;[241] [169] [253] [0] [0] [0] [37] [2] [0] [0] [63] [141] [83] [47] [180] [171] [196] [232] [63] [137] [46] [99] [102] [69] [149] [155] [66] [55] [51] [51] [0] [59]                                                        &#xA;[68] [155] [166] [66] [92] [0] [0] [253] [0]                                                        &#xA;&#xA;So to start from the beginning:                                                         &#xA;&#xA;[0],[0],[1],[209]: Length is 1*256+209 = 465                                                        &#xA;&#xA;[16] Package type is &quot;Robot State&quot;                                                      &#xA;&#xA;[0][0][0][29] First package length is 29                                                        &#xA;&#xA;[0] Package type is 0: &quot;Robot Mode Data&quot;                                                        &#xA;&#xA;[0] [0] [0] [0] [0] [5] [7] [246] Timestamp is 329718                                                       &#xA;&#xA;[1] isRobotConnected True                                                       &#xA;&#xA;[1] isRealRobotEnabled True                                                         &#xA;&#xA;[1] isPowerOnRobot True                                                         &#xA;&#xA;[0] isEmergencyStopped False                                                        &#xA;&#xA;[0] isSecurityStopped False                                                         &#xA;&#xA;[0] isProgramRunning False                                                      &#xA;&#xA;[0] isProgrampaused False                                                       &#xA;&#xA;[0] robot mode is 0                                                         &#xA;&#xA;[63] [240] [0] [0] [0] [0] [0] [0] Speed fraction as a double                       see     http://en.wikipedia.org/wiki/Double-precision_floating-point_format                             , network byte order&#xA;&#xA;[0] [0] [0] [251] Second package length is 251                                                      &#xA;&#xA;[1] Second package type is &quot;joint data&quot;                                                     &#xA;&#xA;[64] [1] [78][244] [77] [189] [249] [149] Joint 0 position                                                      &#xA;&#xA;[64] [1] [78] [247] [89] [95] [104] [85] Joint 0 target position                                                        &#xA;&#xA;[0] [0] [0] [0] [0] [0] [0] [0] Joint 0 target speed                                                        &#xA;&#xA;[188] [220] [97] [3] Joint 0 current                                                        &#xA;&#xA;[66] [62] [0] [0] Joint 0 voltage                                                       &#xA;&#xA;[66] [0] [102] [103]  Joint 0 motor temperature                                                     &#xA;&#xA;[66] [99] [153] [154] Joint 0 microprocessor temperature                                                        &#xA;&#xA;[253] Joint 0 joint mode                                                        &#xA;&#xA;[191] [246] [74] [170] [216] [242] [29] [102] Joint 1 position                                                      &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2016-11-28T15:47:16.927" LastActivityDate="2016-11-28T15:47:16.927" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11141" PostTypeId="2" ParentId="11126" CreationDate="2016-11-28T18:50:25.800" Score="0" Body="&lt;p&gt;Robot-Control-Systems are normally designed as Realtime-Systems. Traditionell programming concepts like loops or procedures will not work. Instead a time-based-schedule is necessary:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;0 walkforward&#xA;1 walkforward&#xA;2 stop&#xA;3 turnright&#xA;4 walkforward&#xA;5 stop&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The first parameter is the timeindex, and the second parameter is the actual command. This plan has to be generated on the fly, according to the obstacles which can be changed during runtime. The scheduling-plan can be seen like a chessboard notation (1. a2a4 c2d2) but for the domain &quot;robot control&quot;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To create such realtime-plans one possibility is indead machinelearning. The commands of the human-operator will be recorded and set in relation to the current situation. And with a little bit of luck, this will work for new situations. Another (better) solution would be to see this as an np-hard problem like Sudoko or Travelling-salesman: for given situation and a given goal a number of actions has to be found. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The idea of break down a robot-control-system into different modules like lokalize, navigation, locomotion, manipulate and mission control is not bad, but it is only additionell. It is a way for generating the overall realtime-plan.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2016-11-28T18:50:25.800" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11142" PostTypeId="1" AcceptedAnswerId="15575" CreationDate="2016-11-28T23:39:14.753" Score="9" ViewCount="347" Body="&lt;p&gt;I am currently working on state estimation/navigation for a system with multiple robots. As of now, what I have is each robot localizing itself with a Kalman filter, given vision based measurements. As next steps, I am aiming to do two things:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Extend this filtering framework to span over all robots so that they can cooperate and improve each other's localization&lt;/li&gt;&#xA;&lt;li&gt;Along with the above, construct a path planning framework such that they can navigate in a way that their localization accuracy is always maximized, thereby eliminating the problem of losing position etc.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;To this end, I've been reading about multi-robot state estimation and planning strategies, and have come across belief space planning: or planning under uncertainty. While the math intuitively makes sense, I am having issues with how to implement these techniques in my real world scenario, especially for multiple robots. I have experience using algorithms such as EKF, UKF etc., and sampling based planning strategies like PRM/RRT, but I am having trouble with the probabilistic link between these two.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So far, I've been looking into research papers, but as someone who's mainly a programmer, I'm trying find something more approachable that will help me link the (somewhat abstract) math to my specific problem: for instance, helping me define terms such as 'joint belief of the entire group', using the data I have in hand. What are my best options, and are there any better resources I can consult?&lt;/p&gt;&#xA;" OwnerUserId="10310" LastActivityDate="2018-06-19T01:26:43.003" Title="Understanding and implementing belief space planning" Tags="&lt;localization&gt;&lt;planning&gt;&lt;multi-agent&gt;&lt;probability&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11143" PostTypeId="1" AcceptedAnswerId="11145" CreationDate="2016-11-29T09:36:36.440" Score="3" ViewCount="60" Body="&lt;p&gt;I have a controller and a plant in series. The controller is 3 input 3 output MIMO system and the plant is also 3 input 3 output system. The bode of the open loop gain, i.e., &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$D(z)=C(z)*G(z)$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;appears to be different when using &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$series(C(z),G(z))$$ versus &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;D(z) = C_1(z)G_1(z) + C_2(z)G_2(z) + C_3(z)G_3(z) \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Theoretically, I believe both are same. However, the latter method gives a different bode with undamped peak, unlike the one using the series command.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The approach using &#xA;$&#xA;D(z) = C_1(z)G_1(z) + C_2(z)G_2(z) + C_3(z)G_3(z) &#xA;$&#xA;is most suitable, according to me, as it gives more clarity. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone share idea on why this misbehaviour exists?&lt;/p&gt;&#xA;" OwnerUserId="15411" LastEditorUserId="10748" LastEditDate="2016-11-30T13:15:54.433" LastActivityDate="2016-11-30T13:15:54.433" Title="Issue with series command in MATLAB" Tags="&lt;control&gt;&lt;matlab&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="11144" PostTypeId="2" ParentId="11039" CreationDate="2016-11-29T13:06:26.400" Score="0" Body="&lt;p&gt;Have you checked the SimpleMotion library files yet? You can get them from &lt;a href=&quot;https://granitedevices.com/assets/files/simplemotion-latest.zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please note that the old version for SimpleMotion is not supported anymore.&lt;/p&gt;&#xA;" OwnerUserId="13118" LastEditorUserId="37" LastEditDate="2017-03-09T11:11:16.260" LastActivityDate="2017-03-09T11:11:16.260" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11145" PostTypeId="2" ParentId="11143" CreationDate="2016-11-29T13:41:10.547" Score="1" Body="&lt;p&gt;You haven't posted any specifics about your plant or the controller, and I'm not positive I understand your terminology. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You said it's a MIMO system, but then you give the combined block (controller/plant) as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;D(z) = C_1(z)G_1(z) + C_2(z)G_2(z) + C_3(z)G_3(z) \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A couple of points here:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;It looks to me like $D(z)$ is now a singular value and not a vector of outputs.&lt;/li&gt;&#xA;&lt;li&gt;Ignoring the point above, it doesn't look like you have any method for interaction between inputs. The way you wrote the &quot;long&quot; model implies that $G_1$ can be separated from $G_2$ and $G_3$, which means that $G_1$ has no impact on the others and vice-versa. This would mean that you don't actually have a MIMO system, just a group SISO systems.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Per point (1) above, I would expect your $D(z)$ definition to look more like:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;D(z) = \left[ \begin{array}{}&#xA;C_1(z)G_1(z) \\&#xA;C_2(z)G_2(z) \\&#xA;C_3(z)G_3(z)&#xA;\end{array} \right] \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;That&lt;/em&gt; gives you a vector of outputs, but again, if $C_x$ has no impact on any of the other $C$ states, and $G_x$ has no impact on any of the other $G$ states, then you're saying that there's no coupling between any of those states and thus you don't have a MIMO system; it's more of a diagonal or block diagonal system where each input/output pair is distinct and unrelated to any other pair. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, this is about as helpful or insightful as I can be without specifics. If you could &lt;em&gt;edit your post&lt;/em&gt; to show what you're using for the controller and plant, some plots of what your outputs are looking like, etc., then maybe I could say something more, but at the moment this is the best answer I can give.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-11-29T13:41:10.547" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="11147" PostTypeId="1" CreationDate="2016-11-29T17:05:09.963" Score="2" ViewCount="166" Body="&lt;p&gt;We are currently working on a project where we want to use EtherCAT as a communication protocol between a central system (master) and several nodes (slaves). We want these slaves to have the following:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;GPIO for sensors&lt;/li&gt;&#xA;&lt;li&gt;Local processing (microprocessor ~200MHz+)&lt;/li&gt;&#xA;&lt;li&gt;Programmable (e.g. through USB)&lt;/li&gt;&#xA;&lt;li&gt;EtherCAT connection&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;We've looked a lot at off-the-shelf solutions and came to several EtherCAT modules which can handle the communication, such as the EasyCAT PRO, Anybus M40 and BECKHOFF F1111. We could connect these modules to an off-the-shelf microprocessor (e.g. Beaglebone)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, we are also looking into an integrated, more powerful solution because we do not believe this can handle everything we want to do. The &lt;a href=&quot;http://www.ti.com/tool/tmdsice3359&quot; rel=&quot;nofollow noreferrer&quot;&gt;TI AM3359 ICE&lt;/a&gt; suits our purposes and we have bought and tested it. However we were wondering if there are smaller, off-the-shelf solutions, since this one has a lot of stuff that we do not need (e.g. screen and CAN connection) and it requires making our own PCB. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is therefore my question. Do you guys know of any EtherCAT slave sensor node that can facilitate our needs and nothing more? We have been looking a lot but cannot find anything of this kind.&lt;/p&gt;&#xA;" OwnerUserId="15416" LastActivityDate="2016-11-29T17:05:09.963" Title="EtherCAT slave sensor node" Tags="&lt;sensors&gt;&lt;communication&gt;" AnswerCount="0" CommentCount="3" FavoriteCount="1" ClosedDate="2016-11-30T15:38:12.623" ContentLicense="CC BY-SA 3.0" />
  <row Id="11149" PostTypeId="1" CreationDate="2016-11-30T11:26:11.350" Score="0" ViewCount="37" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Gm869.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Gm869.jpg&quot; alt=&quot;Open loop schematic&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is (G1(z)*C1(z))+(G2(z)*C2(z))+(G3(z)*C3(z))  the right way of computing open loop gain for the attached block diagram. The system order differs from the order achieved using series(G(z),C(z)). Could any one help?&lt;/p&gt;&#xA;" OwnerUserId="15411" LastActivityDate="2016-11-30T14:28:47.933" Title="Issue with open loop gain computation" Tags="&lt;control&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11150" PostTypeId="2" ParentId="11149" CreationDate="2016-11-30T14:28:47.933" Score="1" Body="&lt;p&gt;No, for reasons I explained in the &lt;a href=&quot;https://robotics.stackexchange.com/a/11145/9720&quot;&gt;other question you asked&lt;/a&gt;, that is not the correct way to calculate the open-loop gain. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;At-a-glance I can tell you it's wrong because it doesn't take the correct form. It's like asking if 50 miles is too fast or if &amp;lt;13,20&gt; gives you a 3D coordinate - your output form isn't of a type that satisfies the question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You are asking for an open-loop &lt;em&gt;gain&lt;/em&gt;, like it's a singular value, when you should be asking for the open-loop gain&lt;strong&gt;s&lt;/strong&gt;, because you need an open-loop gain between each input and each output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would suggest you look at &lt;a href=&quot;http://reference.wolfram.com/applications/pcs/Frequency-DomainDesignMethods/PCS5.1.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;relative gain arrays&lt;/a&gt; if this is what you're interested in. You haven't clarified what your equations are, what your controller is, what your plant is, what your application is, etc., so it's not really possible to give too much help beyond this. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I will point out that it looks like you're setting yourself up for conflicting or contradictory control by having position, speed, and torque be inputs. What if the user wants zero position and 100% speed? What if the user wants zero speed and 100% torque? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I had to guess, I'd say your application is more like a position-controlled servo, where you want to &lt;em&gt;limit&lt;/em&gt; torque and speed. You probably don't actually care about &lt;em&gt;controlling&lt;/em&gt; torque and speed as long as they don't exceed specific thresholds. In that case, you &lt;em&gt;would&lt;/em&gt; have one open-loop gain - the input position reference to the output position feedback.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, that's all speculation. Until you &lt;em&gt;clarify what you're trying to do&lt;/em&gt;, it's hard to give meaningful assistance.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2016-11-30T14:28:47.933" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="11152" PostTypeId="1" AcceptedAnswerId="19894" CreationDate="2016-11-30T17:53:16.143" Score="6" ViewCount="362" Body="&lt;p&gt;I'm currently developing an EKF to estimate the position and orientation of a quadcopter. My state vector is comprised of 3D position, 3D velocity, 3 euler angles and the angular velocity vector. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Right now I'm looking into the measurement equation for the accelerometer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I understood correctly, &lt;a href=&quot;https://en.wikipedia.org/wiki/Accelerometer&quot; rel=&quot;noreferrer&quot;&gt;an accelerometer measures &quot;proper acceleration&quot;&lt;/a&gt;, instead of coordinate acceleration, that is, it measures the acceleration of the body w.r.t to a free-falling coordinate system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If this is the case, and supposing the only forces acting on the body are the upward thrust given by the propellers, $\vec{T}$, and earth's gravitational force, $m\vec{g}$, then I understand that the only acceleration that would be measured by the accelerometer is the one caused by $\vec{T}$ (since the free-falling frame has no way of measuring the acceleration caused by $m\vec{g}$, because it is also being accelerated by it).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If this also the case, then I note that the vector $\vec{T}$, when expressed in the body coordinate frame (i.e. a coordinate frame fixed at the center of mass of the body, and always aligned with the body's orientation) does not depend on any of the states whatsoever. For example, if the propellers are assembled such that $\vec{T}$ is always perpendicular to the plane where the propellers are, then $\vec{T}$ in the body frame is specified as $(0,0,\alpha)^T$, where $\alpha$ is the magnitude of the thrust given. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which leads me to conclude that (since the measured acceleration doesn't depend on the states) I can't use accelerometer measurements to obtain more information about any of my states (??). This conclusion seems paradoxical to me, and that's why I ask this here. Could someone please point the mistake in my reasoning, or elucidate why this is not a paradox?&lt;/p&gt;&#xA;" OwnerUserId="799" LastActivityDate="2019-12-18T15:57:23.230" Title="Paradox: I can't use accelerometer measurements to obtain information about my states in a quadcopter?" Tags="&lt;quadcopter&gt;&lt;kalman-filter&gt;&lt;accelerometer&gt;&lt;ekf&gt;&lt;orientation&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="11153" PostTypeId="2" ParentId="11152" CreationDate="2016-11-30T18:48:08.977" Score="3" Body="&lt;p&gt;Accelerometers measure kinematic acceleration with the addition of gravity. So for an accel to measure 0, the vehicle would need to be accelerating downward at $g$. To get inertial acceleration out of an accel measurement one simply needs to subtract the acceleration measured by the IMU when the IMU is static. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, assuming the coordinate system of the drone is in line with the inertial coordinate system&lt;/p&gt;&#xA;&#xA;&lt;p&gt;\begin{equation}&#xA;\ddot r = z_{acc} - g&#xA;\end{equation}&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $\ddot r$ is acceleration  of the drone in inertial space, $z_{accel}$ is the vector of accelerations measured by the IMU, and $g$ is the vector of accelerations experienced when the vehicle is not accelerating relative to the inertial frame. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Transformations need to get involved once the vehicle is not longer level but it's about the same. &lt;/p&gt;&#xA;" OwnerUserId="8842" LastEditorUserId="8842" LastEditDate="2016-11-30T20:36:40.350" LastActivityDate="2016-11-30T20:36:40.350" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11154" PostTypeId="2" ParentId="9321" CreationDate="2016-11-30T21:08:34.833" Score="0" Body="&lt;p&gt;It appears to me that the notation represents taking an arbitrary 3-vector, applying a rotation matrix to the 3-vector based on the bearing 3-vector, and then removing one of the dimensions of the result.  If the arbitrary 3-vector and the bearing 3-vector are the same, then the result of the rotation should be [ 1 0 0 ], and the first coordinate would be removed, since the projection of that vector onto the plane orthogonal to it is zero.  For an arbitrary 3-vector, you get the components of the projection onto a plane that is normal to the bearing 3-vector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As to how to compute the rotation matrix based on the bearing 3-vector, I would defer to the following:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://math.stackexchange.com/questions/114512/how-to-find-the-orthonormal-transformation-that-will-rotate-a-vector-to-the-x-ax&quot;&gt;https://math.stackexchange.com/questions/114512/how-to-find-the-orthonormal-transformation-that-will-rotate-a-vector-to-the-x-ax&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2546" LastEditorUserId="-1" LastEditDate="2017-04-13T12:19:24.817" LastActivityDate="2016-11-30T21:08:34.833" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11155" PostTypeId="2" ParentId="11152" CreationDate="2016-11-30T21:31:54.363" Score="5" Body="&lt;p&gt;If the drone is not falling (holding height in the sky), and it's not accelerating in any particular direction, then the accelerometer should be reading:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;a = \left[ \begin{array}{}&#xA;g_x \\&#xA;g_y \\&#xA;g_z&#xA;\end{array}\right]&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $g_N$ is the component of gravity along each axis. If the drone is &lt;em&gt;upright&lt;/em&gt; and stationary, and the accelerometer is oriented such that the z-axis points up, then the accelerometer would read:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;a = \left[ \begin{array}{}&#xA;0 \\&#xA;0 \\&#xA;g &#xA;\end{array}\right]&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;However&lt;/strong&gt;, if the drone is tilted and not accelerating, then the gravity vector will appear in portions along the axes not orthogonal to gravity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://x-io.co.uk/open-source-imu-and-ahrs-algorithms/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Madgwick filter&lt;/a&gt; (which works pretty awesome by the way) utilizes this to determine the orientation of the accelerometer. The accelerometer is normalized and the component of acceleration on each axis gives the orientation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given the orientation, subtract out gravity, you're left with the acceleration along each axis. Double integrate those accelerations and you get position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are of course issues if you're accelerating in a particular direction that isn't in-line with gravity, because normalizing the acceleration will cause the &quot;gravity vector&quot; to skew towards the axis of motion. However, this is generally overcome by including gyroscope measurements with the orientation estimate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's important to remember too that these are all &lt;em&gt;estimates&lt;/em&gt;. Unless you have a &lt;strong&gt;position measurement&lt;/strong&gt; or an &lt;strong&gt;orientation measurement&lt;/strong&gt; device, you'll never actually get &lt;em&gt;measurements&lt;/em&gt;; the best you can do is generate pose &lt;em&gt;estimates&lt;/em&gt; because there's no way to correct any accumulated errors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Gyroscope readings are generally very accurate as a short-term orientation estimate and very poor as a long-term orientation estimate because of gyroscope drift. The accelerometer's gravitational orientation result, because it is affected by the motion of the sensor, generally results in poor short-term orientation measurements but very accurate long-term measurements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, between the accelerometer and gyroscope, you should be able to get &lt;a href=&quot;https://www.youtube.com/watch?v=BXsGWoOMtmU&amp;amp;t=20s&quot; rel=&quot;nofollow noreferrer&quot;&gt;very good orientation estimates&lt;/a&gt; (did I mention the Madgwick filter is really good? Don't kill yourself reinventing the wheel; the filter is open-source!). Again, once you have the orientation, subtract the gravity vector and you're left with only the accelerations caused by motion of the device. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Accelerometers suffer from drift too, though, so you're not going to get any high-precision position &lt;em&gt;estimates&lt;/em&gt; from an accelerometer over any significant period of time. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-11-30T21:31:54.363" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11156" PostTypeId="1" AcceptedAnswerId="17991" CreationDate="2016-11-30T23:02:57.397" Score="12" ViewCount="407" Body="&lt;p&gt;I am trying to implement 'belief space' planning for a robot that has a camera as its main sensor. Similar to SLAM, the robot has a map of 3D points, and it localizes by performing 2D-3D matching with the environment at every step. For the purpose of this question, I am assuming the map does not change. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As part of belief space planning, I want to plan paths for the robot that take it from start to goal, but in a way that its localization accuracy is always maximized. Hence, I would have to sample possible states of the robot, without actually moving there, and the observations the robot would make if it were at those states, which together (correct me if I am wrong) form the 'belief' of the robot, subsequently encoding its localization uncertainty at those points. And then my planner would try to connect the nodes which give me the least uncertainty (covariance).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As my localization uncertainty for this camera-based robot depends entirely on things like how many feature points are visible from a given locations, the heading angle of the robot etc.: I need an estimate of how 'bad' my localization at a certain sample would be, to determine if I should discard it. To get there, how do I define the measurement model for this, would it be the camera's measurement model or would it be something relating to the position of the robot? How do I 'guess' my measurements beforehand, and how do I compute the covariance of the robot through those guessed measurements?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: The main reference for me is the idea of &lt;a href=&quot;http://groups.csail.mit.edu/rrg/papers/abry_icra11.pdf&quot; rel=&quot;noreferrer&quot;&gt;Rapidly exploring Random Belief Trees&lt;/a&gt;, which is an extension of the method &lt;a href=&quot;https://people.csail.mit.edu/prentice/papers/isrr07.pdf&quot; rel=&quot;noreferrer&quot;&gt;Belief Road Maps&lt;/a&gt;. Another &lt;a href=&quot;http://www.mycopter.eu/fileadmin/mycopter_user_upload/files/Downloads/Publications/201406_JFR_Achtelik.pdf&quot; rel=&quot;noreferrer&quot;&gt;relevant paper&lt;/a&gt; uses RRBTs for constrained planning. In this paper, states are sampled similar to conventional RRTs, represented as vertices as a graph, but when the vertices are to be connected, the algorithm propagates the belief from the current vertex to the new, (PROPAGATE function in section V of &lt;a href=&quot;http://groups.csail.mit.edu/rrg/papers/abry_icra11.pdf&quot; rel=&quot;noreferrer&quot;&gt;1&lt;/a&gt;), and here is where I am stuck: I don't fully understand how I can propagate the belief along an edge without actually traversing it and obtaining new measurements, thereby new covariances from the localization. The &lt;a href=&quot;http://groups.csail.mit.edu/rrg/papers/abry_icra11.pdf&quot; rel=&quot;noreferrer&quot;&gt;RRBT paper&lt;/a&gt; says &quot;the covariance prediction and cost expectation equations are implemented in the PROPAGATE function&quot;: but if only the prediction is used, how does it know, say, whether there are enough features at the future position that could enhance/degrade the localization accuracy?&lt;/p&gt;&#xA;" OwnerUserId="10310" LastEditorUserId="9720" LastEditDate="2016-12-11T03:49:00.403" LastActivityDate="2019-01-15T05:35:49.710" Title="What is the best way to compute the probabilistic belief of a robot equipped with a vision sensor?" Tags="&lt;computer-vision&gt;&lt;planning&gt;&lt;probability&gt;" AnswerCount="1" CommentCount="7" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="11157" PostTypeId="1" CreationDate="2016-12-01T05:03:55.060" Score="2" ViewCount="1361" Body="&lt;p&gt;Could anyone tell what are the sensors used in a digital pen which or specifically Equil smart pen and smart marker which can track hand writings. Is it MEMS based??If Yes, Is it MEMS accelerometer only or a combination of MEMS sensors like gyroscope and magnetometer and acceleometer? What algorithms are used here?  &lt;/p&gt;&#xA;" OwnerUserId="14376" LastActivityDate="2016-12-08T09:36:27.760" Title="What sensors and algorithms are used in Digital Pen for tracking hand writing?" Tags="&lt;accelerometer&gt;&lt;algorithm&gt;&lt;gyroscope&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11158" PostTypeId="2" ParentId="11157" CreationDate="2016-12-01T09:57:04.897" Score="1" Body="&lt;p&gt;Most smart pens use a number of differenst sensors different types of MEMS but more importanly they use optical sensors. Pen tip motions are recreated based on measurements of all sensors using sensor fusion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Optical sensors (Ir cameras or visible cameras) and ultrasonic sensors are used for pose (position and orientation measurment). Some pens, as the Equil use an external sensing (with infrared and ultrasound sensors) unit which tracks the pen relative to the sensor. Other solution include small cameras near the tip of the pen which identify special markers on the paper and so can calculate the relative position of the pentip on the paper. These directly measure pen relative to the paper. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The optical pose sensing is more reliable then the MEMS sensors since they directly measure positions and so they do not suffer from drift. However, MEMS sensors help to recreate motions using sensor fusion. Both giros and acceleromaters offer usefull input to the sensor fusion process, using both of them if just one type may be an economic decision and not a technical one. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not sure to what extent magnetometers are/can be used since magnetic field vector fo the earth, which they can sense is dependent on geographical location. Also they are effected by nearby electro-magnetic fields (e.g. motors, maybe large LCD screens due to their inverter). &lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2016-12-08T09:36:27.760" LastActivityDate="2016-12-08T09:36:27.760" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="11160" PostTypeId="2" ParentId="10981" CreationDate="2016-12-01T17:09:02.783" Score="1" Body="&lt;p&gt;There are a few different ways that you can use this input.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One way is to use it in conjunction with homing.  Homing the servo is defining where position zero is located.  You initiate a &quot;Home&quot; by using the MAH (Motion Axis Home) instruction.  The Home function is configured in the Axis properties under the &quot;Homing&quot; tab.  You can get more information about Homing by pressing the Help button while on this tab, but here are a few pointers:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A Home can either be Active or Passive.  When an Active Home is performed, the servo will move until it finds the home position.  A Passive Home, on the other hand, does not initiate any motion; before or after initiating a Passive Home, you would need to initiate motion with another instruction.&lt;/li&gt;&#xA;&lt;li&gt;The &quot;Sequence&quot; parameter defines how the drive knows it is in the home position.  In your case, you would choose &quot;Switch,&quot; which tells the drive to use the &quot;Home/Registration 1&quot; input on the drive.  You select either &quot;Normally Open&quot; or &quot;Normally Closed&quot; to define what the state of the switch is when it is in the home position.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Another use for this input is in conjunction with the MAR (Motion Arm Registration) instruction.  This is done when you want to control the position of a continually rotating axis relative to something else.  When registration is armed, the drive watches for the next transition of the registration input and then logs the position at that point in the &lt;code&gt;.Registration1Position&lt;/code&gt; field in the Axis Tag structure.  You can use this value to speed up or slow down the axis to maintain the relative position you are trying to achieve.  The configuration for this is done right on the MAR instruction; you select which input number to use (1=Registration Input 1), and what type of Trigger Condition you want to look for (0 = trigger on positive transition, 1 = trigger on negative transition).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can find help for these instructions in the help files inside RSLogix5000, or you can read the &lt;a href=&quot;http://literature.rockwellautomation.com/idc/groups/literature/documents/rm/motion-rm002_-en-p.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Logix5000 Controllers Motion Instructions (motion-rm002)&lt;/a&gt; publication.&lt;/p&gt;&#xA;" OwnerUserId="1748" LastEditorUserId="1748" LastEditDate="2016-12-01T17:17:45.837" LastActivityDate="2016-12-01T17:17:45.837" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11162" PostTypeId="2" ParentId="10404" CreationDate="2016-12-02T08:43:37.993" Score="2" Body="&lt;p&gt;Your description of sample impoverishment and the way to fix it seems about right. Resampling only when the variance gets low is doing exactly what you are asking for when you say the measurements come in asynchronously. You can also improve matters by selecting the right &lt;a href=&quot;https://robotics.stackexchange.com/questions/479/particle-filters-how-to-do-resampling&quot;&gt;resampling strategy&lt;/a&gt;. Using e.g. stratified resampling you can make sure that your higher than average weight particles won't get eliminated by chance. And yes, after resampling the particles are less diverse. That is the nature of the resampling process. Since you eliminate some particles, and copy others, the diversity after resampling is lower. You &quot;smear&quot; out e.g. increase diversity during the updating steps. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This can of course still lead to situations, where the bulk of your particles get deleted, and only a single particle is left (multiple times over) after resampling, because the weight before was so high. In this case its more likely that your update and measurement models don't fit very well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Particle filters work very well with non-linearities in the regions where the probability density function of the prior is high. They don't do so well in the other regions and need tricks to make them work there. &lt;/p&gt;&#xA;" OwnerUserId="127" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2016-12-06T08:39:02.440" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11163" PostTypeId="1" CreationDate="2016-12-02T09:40:04.673" Score="1" ViewCount="276" Body="&lt;p&gt;I have a project where I have to move a Mitsubishi Melfa RV-2F-Q robot to a position/orientation from an external source, so there are no pre-defined points available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem I keep running into is that even if I give it a reachable position (within operating range), or even a position that is almost the same as its current one, it fails to move there with the error: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;L2802 Illegal position data (dstn)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What causes this and how do I avoid it?&lt;/p&gt;&#xA;" OwnerUserId="15446" LastEditorUserId="15446" LastEditDate="2016-12-02T10:05:09.463" LastActivityDate="2016-12-02T10:55:11.997" Title="Illegal position data with Mitsubishi Melfa RV-2F-Q robotic arm" Tags="&lt;robotic-arm&gt;&lt;errors&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11164" PostTypeId="2" ParentId="11163" CreationDate="2016-12-02T10:55:11.997" Score="1" Body="&lt;p&gt;Robots use many coordinate system and for each position you transmit to the robot, it has to be specified in which coordinate system is it defined. If you do not define it explicitly, an implicit definition is used, which may not correspont to the one in which the current postition is defined. So what you think is exaclty near the robot, may be actually out of the operating range. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A simple case is when you give the robots coordinates in its base frame, but it expects realtive coordinates (in tool frame). If the current pose in the base frame is &lt;code&gt;[1, 0, 0, 0, 0, 0]&lt;/code&gt; any you try to reach the coordinates &lt;code&gt;[1.1, 0, 0, 0, 0, 0]&lt;/code&gt;, in realtive coordinates you should transmit &lt;code&gt;[0.1, 0, 0, 0, 0, 0]&lt;/code&gt;. The coordinates &lt;code&gt;[ 1.1, 0, 0, 0, 0, 0]&lt;/code&gt; realative to the tool frame are be most probably out of the workspace. (vice versa is also true)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also check the allowed operation envelope. An incorrect setup of the operation envelope could also cause similar problems. &lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2016-12-02T10:55:11.997" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11165" PostTypeId="1" CreationDate="2016-12-02T13:58:20.210" Score="2" ViewCount="918" Body="&lt;p&gt;I'm trying to make a model for a robotic arm on simulink and then excute it on arduino controller but i want also to use robotics toolbox to calculate forward and inverse kinematics so i need to add matlab function in my simulink model i tried it but it keeps giving errors but when i try it away from simulink it gives rsults ! is that because robotics toolbox works only with matlab but not with simulink? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/rA0mc.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rA0mc.png&quot; alt=&quot;my simulink model&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;the code in matlab function&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; function [theta1, theta2, theta3, theta4] = fcn(x, z, y)&#xA;&#xA;&#xA;L(1)=Link([0,0.03,0,pi/2,0]);&#xA;L(2)=Link([0,0,0.12,0,0]);&#xA;L(3)=Link([0,0,0.1,-pi/2,0]);&#xA;L(4)=Link([0,0,0,0,0]);&#xA;robot = SerialLink(L,'name','robot');&#xA;&#xA;robot.tool=transl(0,0,.08);&#xA;robot.base=transl(0,0,.07);&#xA;&#xA;&#xA;    T=transl(x,y,z);&#xA;    q=robot.ikine(T,[0,0,0,0], [1 1 1 0 0 1]);&#xA;    q(1)=fix(q(1)*(180/pi));&#xA;   q(2)=fix(q(2)*(180/pi));&#xA;    q(3)=fix(q(3)*(180/pi));&#xA;    q(4)=fix(q(4)*(180/pi));&#xA;&#xA;          theta1=q(1)&#xA;    theta2=q(2)&#xA;    theta3=q(3)&#xA;    theta4=q(4)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/exqOz.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/exqOz.png&quot; alt=&quot;errors when excuting&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;but when i try it in command window away from simulink it gives results for x=1 y=1 z=1 and higher values&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;   Warning: solution diverging at step 245, try reducing alpha &#xA; &amp;gt; In SerialLink/ikine (line 260) &#xA;  Warning: solution diverging at step 459, try reducing alpha &#xA; &amp;gt; In SerialLink/ikine (line 260) &#xA; Warning: solution diverging at step 533, try reducing alpha &#xA; &amp;gt; In SerialLink/ikine (line 260) &#xA; Warning: ikine: iteration limit 1000 exceeded (row 1), final err 1.790820 &#xA; &amp;gt; In SerialLink/ikine (line 179) &#xA;&#xA; theta1 =&#xA;&#xA;  -21996&#xA;&#xA;&#xA;theta2 =&#xA;&#xA;-1050694&#xA;&#xA;&#xA;theta3 =&#xA;&#xA; 2711696&#xA;&#xA;&#xA;theta4 =&#xA;&#xA; 2848957&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;but for x=0.2  y=0.2 z=0.2 it gives that error&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;      .&#xA;      .&#xA;      .&#xA;      .&#xA;&amp;gt; In SerialLink/ikine (line 260) &#xA;Warning: solution diverging at step 567, try reducing alpha &#xA;&amp;gt; In SerialLink/ikine (line 260) &#xA;Warning: solution diverging at step 570, try reducing alpha &#xA;&amp;gt; In SerialLink/ikine (line 260) &#xA;Warning: solution diverging at step 574, try reducing alpha &#xA;&amp;gt; In SerialLink/ikine (line 260) &#xA;Warning: solution diverging at step 578, try reducing alpha &#xA;&amp;gt; In SerialLink/ikine (line 260) &#xA;Error using tr2angvec (line 97)&#xA;matrix not orthonormal rotation matrix&#xA;&#xA;Error in SerialLink/ikine (line 191)&#xA;        [th,n] = tr2angvec(Rq'*t2r(T));&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="10601" LastEditorUserId="-1" LastEditDate="2019-08-04T19:02:04.937" LastActivityDate="2019-08-04T19:02:04.937" Title="Does simulink accepts robotics toolbox in matlab?" Tags="&lt;robotic-arm&gt;&lt;matlab&gt;&lt;simulator&gt;&lt;robotics-toolbox&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11166" PostTypeId="2" ParentId="11165" CreationDate="2016-12-02T15:16:00.687" Score="3" Body="&lt;p&gt;You appear to be using a third-party toolbox, the &lt;a href=&quot;http://petercorke.com/Robotics_Toolbox.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Robotics Toolbox&lt;/a&gt;. If it's not running in Simulink, then it might not run in Simulink. If you want something that does, try the official toolbox. Mathworks generally offers trials of all their toolboxes. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your first error, &quot;Simulink does not have enough information to determine the output size of this block,&quot; can typically be solved by initializing the variables before assignment and/or by setting their size in the properties menu for the function block (as opposed to leaving it set as &quot;inherited&quot;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, I'd like to point out that your results are &lt;em&gt;not correct&lt;/em&gt; and you are get a lot of bad warnings that you seem to be ignoring when you show that it &quot;works&quot; when you're not using Simulink. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Diverging solutions mean something is wrong, iteration limits being exceeded mean something is wrong, and did you even look at the numbers you were given? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What does it mean to you when the output you're getting is something like &lt;code&gt;theta4 = 2848957&lt;/code&gt;?? Does 2.8 million radians (or even degrees) seem like a quality answer? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you really need to use this toolbox with Simulink then at least make sure you're using it correctly and getting correct answers first before you try to port to Simulink.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2019-07-23T17:01:14.990" LastActivityDate="2019-07-23T17:01:14.990" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11168" PostTypeId="2" ParentId="11157" CreationDate="2016-12-02T22:36:10.737" Score="1" Body="&lt;p&gt;&lt;strong&gt;Classical odometry sensors:&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;IMU:gyro, accelerometer, compass (Wiimote IMU - not infrared)&lt;/li&gt;&#xA;&lt;li&gt;Optical flow (optic mouse)&lt;/li&gt;&#xA;&lt;li&gt;encoders (like mouse marble)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;These systems are cheap and easy to apply. However these sensors needs &lt;strong&gt;sensor fusion&lt;/strong&gt; and &lt;strong&gt;filtering&lt;/strong&gt; because of error cumulation. These sensors are not suitable for long processes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Reference based systems:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;sensor surfaces (touchscreen, electromagnetic/resistive/capacitve etc.)&lt;/li&gt;&#xA;&lt;li&gt;Infrared reference tracking (wiimote IR and white board)&lt;/li&gt;&#xA;&lt;li&gt;Multi point reference: (ultrasonic transmitter and receivers) source emits ultrasonic waves and triliteration/triangulaion made accoridng to 3 or more receivers&lt;/li&gt;&#xA;&lt;li&gt;Optical tracking (VICON, multiple cameras placed allover the target/pen and according trace of pointers which placed on target motions are modelled )&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;these systems are more &lt;strong&gt;accurate&lt;/strong&gt; but needs computational power and a lot of hardware. Again, you should use &lt;strong&gt;sensor fusion&lt;/strong&gt; and &lt;strong&gt;filtering&lt;/strong&gt;. You can also search &lt;strong&gt;triangulation&lt;/strong&gt; and &lt;strong&gt;trileteration&lt;/strong&gt; methods and algorithms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For sensor fusion and filtering algorithms please search:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Kalman filter/ Extended Kalman Filter &lt;/li&gt;&#xA;&lt;li&gt;Complementary Filter&lt;/li&gt;&#xA;&lt;li&gt;Particle Filer&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="9504" LastActivityDate="2016-12-02T22:36:10.737" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="11171" PostTypeId="1" CreationDate="2016-12-04T15:47:42.327" Score="1" ViewCount="211" Body="&lt;p&gt;As I know, most of robotic arms are specific-purpose and usually work under supervision of an expert, such as surgery robot. So, is this relevant for a robotic arm to be intelligent and autonomous? If so, how its control system may be different from non-intelligent ones?&lt;/p&gt;&#xA;" OwnerUserId="13540" LastActivityDate="2016-12-05T08:06:15.557" Title="Intelligent robotic arm and its control system" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;artificial-intelligence&gt;" AnswerCount="2" CommentCount="2" ClosedDate="2016-12-05T16:55:01.047" ContentLicense="CC BY-SA 3.0" />
  <row Id="11172" PostTypeId="2" ParentId="11171" CreationDate="2016-12-04T17:43:04.533" Score="3" Body="&lt;p&gt;I believe you are only noticing the robotic systems that get a lot of press coverage.   Specialized, supervisory-controlled robotic systems are definitely &lt;em&gt;not&lt;/em&gt; the most common.  Check out &lt;a href=&quot;https://roboticsandautomationnews.com/2015/07/21/top-8-industrial-robot-companies-and-how-many-robots-they-have-around-the-world/812/&quot; rel=&quot;nofollow&quot;&gt;this list of industrial robotic systems&lt;/a&gt; for quantities of general-purpose, reprogrammable, robot systems for comparison purposes.   Whether or not reprogrammable industrial robots are &lt;em&gt;intelligent&lt;/em&gt; is a matter of speculation and argumentation.   It depends on your definitions of autonomous and intelligent.   &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2016-12-04T17:43:04.533" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11174" PostTypeId="2" ParentId="11171" CreationDate="2016-12-05T08:06:15.557" Score="0" Body="&lt;p&gt;At first it is important to distinguish between a Robot Control System itself and the development process to program such a system. A reasonable Control System is &lt;a href=&quot;https://www.youtube.com/watch?v=v2rC_kmGuqU&quot; rel=&quot;nofollow noreferrer&quot;&gt;NREC Operator Control System&lt;/a&gt; which can control a robot arm. But a way more interesting is to program such systems. In most cases at the beginning is a teleoperating system, where a human-operator controls a robot with a Xbox-Controller. Than a parser is programmed for detecting actions. The next step converts the parser into a trajectory generator. Then, a time-scheduler follows and perhaps a sampling-based solver like &lt;a href=&quot;http://lis.csail.mit.edu/pubs/barry-iser12.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;DARRT&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2016-12-05T08:06:15.557" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11175" PostTypeId="1" AcceptedAnswerId="11184" CreationDate="2016-12-05T09:33:56.697" Score="4" ViewCount="131" Body="&lt;p&gt;I want a comparison between human hands and robot hands, with respect to grasping and squeezing objects. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I perform such a comparison, using sensors, as one would with a benchmarking database? Is there a standard, or ready-to-use, system?&lt;/p&gt;&#xA;" OwnerUserId="9748" LastEditorUserId="9176" LastEditDate="2016-12-09T17:20:40.533" LastActivityDate="2016-12-09T17:20:40.533" Title="How can I compare robot and human hands?" Tags="&lt;sensors&gt;&lt;robotic-arm&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11177" PostTypeId="2" ParentId="11175" CreationDate="2016-12-05T15:13:18.900" Score="4" Body="&lt;p&gt;The only benchmark I know in development is at NIST.  Their &lt;a href=&quot;https://www.nist.gov/programs-projects/performance-metrics-and-benchmarks-advance-state-robotic-grasping&quot; rel=&quot;noreferrer&quot;&gt;Intelligent Systems Division project page&lt;/a&gt; should help.  On that page they discuss the specific possible metrics of grasp cycle time, grasp efficiency, finger strength, grasp strength, in-hand manipulation, object pose estimation, slip resistance, split cylinder artifact, touch sensitivity, finger force tracking, and sensor calibration.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastEditorUserId="11125" LastEditDate="2016-12-05T20:12:17.273" LastActivityDate="2016-12-05T20:12:17.273" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11178" PostTypeId="1" AcceptedAnswerId="11180" CreationDate="2016-12-05T18:08:41.490" Score="5" ViewCount="7073" Body="&lt;p&gt;I know this probably has been asked a thousand times but I'm trying to integrate a GPS + Imu (which has a gyro, acc, and magnetometer) with an Extended kalman filter to get a better localization in my next step. I'm using a global frame of localization, mainly Latitude and Longitude. I kinda 'get' the kalman equations but I'm struggling in what should be my actual state and what should be my sensor prediction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have in one hand the latitude and longitude of my GPS and in euler degrees the roll, pitch and yaw of my IMU (which is already fused by some algorithm on board the chip I think) in euler degrees. I think I can throw the pitch and roll away.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And I know I have to show a function for my state $$ x_t =  f (x_{t-1}, \mu_{t-1}) $$ and a function that predicts what my sensor is seing at the step $t$&#xA;$$ \mu_{t} = h(x_t)$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The thing is I dont know on what these functions should depend on, should my state be about the gps? In that case how can I predcit the next yaw read since I don't think I can get the rotation from a difference from gps location.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other side if my state is the yaw, I need some kind of speed, which the GPS is giving me, in that case would kalman work? Since I'm using the speed from the GPS to predict the next GPS location.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/aqCPW.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/aqCPW.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Long story short I dont know what my state and sensor prediction should be in this case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks In advance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: I have an ackerman steering mobile robot with no encoders which has mounted a GPS and and IMU (gyr acc and mag). The imu fuses thes values into euler degrees and the GPS gives me lat and longitude.&lt;/p&gt;&#xA;" OwnerUserId="15468" LastEditorUserId="15468" LastEditDate="2016-12-05T22:57:21.957" LastActivityDate="2016-12-09T21:05:54.317" Title="Kalman Filter GPS + IMU" Tags="&lt;localization&gt;&lt;kalman-filter&gt;&lt;imu&gt;&lt;gps&gt;&lt;magnetometer&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="11179" PostTypeId="2" ParentId="11178" CreationDate="2016-12-05T18:20:47.167" Score="1" Body="&lt;p&gt;id recommend estimating position, velocity, and bias in the yaw reading from the imu. You'd assume the yaw bias is a first order system driven by zero mean Gaussian noise. You can also estimate biases in your accel readings if you expect significant drift during operation. &lt;/p&gt;&#xA;" OwnerUserId="8842" LastActivityDate="2016-12-05T18:20:47.167" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11180" PostTypeId="2" ParentId="11178" CreationDate="2016-12-05T19:29:09.820" Score="4" Body="&lt;p&gt;This is a complete re-working of the answer I had originally provided. If you're curious, you can check the edit history and see what was posted earlier. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In comments to this question, OP stated that they might be able to get throttle and steering angles for the robot, but they probably wouldn't be accurate. That's okay; it's better than nothing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;OP also stated that the IMU outputs a fused orientation, where the fused orientation is from the accelerometer, gyro, and magnetometer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The accelerometer output of the IMU may or may not be corrected by the orientation. If it is, great. If not, it's a straightforward conversion &lt;a href=&quot;https://en.wikipedia.org/wiki/Euler_angles#Rotation_matrix&quot; rel=&quot;nofollow noreferrer&quot;&gt;provided you pick the correct form&lt;/a&gt;; I think generally what you would want is the XYZ Tait-Bryan rotation matrix, but definitely check with the manufacturer and absolutely run through copious amounts of test data to check the results yourself. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Side note here, I build quick visualizers for myself all the time and &lt;strong&gt;highly recommend&lt;/strong&gt; you do it for yourself, too. Here's a quick Matlab snippet to use, assuming you have a variable &lt;code&gt;time&lt;/code&gt; that has all of your time indices. If you just have the sample intervals, you can make time as the cumulative sum of the sample intervals; &lt;code&gt;time = cumsum(sampleIntervals);&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;pre class=&quot;lang-matlab prettyprint-override&quot;&gt;&lt;code&gt;width = 1;&#xA;length = 2;&#xA;height = 0.5;&#xA;shapeTop = [...&#xA;    -width/2, -length/2; ...&#xA;    -width/2, length/2; ...&#xA;    width/2, length/2; ...&#xA;    width/2, -length/2];&#xA;shapeTop(:,3) = ones(4,1)*height/2;&#xA;shapeBottom = shapeTop;&#xA;shapeBottom(:,3) = shapeBottom(:,3) - ones(4,1)*height;&#xA;shapeVertices = [shapeTop;shapeBottom];&#xA;shapeFaces = [...&#xA;    1,2,3,4,1; ...&#xA;    5,6,7,8,5; ...&#xA;    8,5,1,4,8; ...&#xA;    7,6,2,3,7; ...&#xA;    5,6,2,1,5; ...&#xA;    8,7,3,4,8];&#xA;shapeColor = [0.6 0.6 1]; % Light blue&#xA;&#xA;figure(1)&#xA;shapePatch = patch(...&#xA;    'Faces', shapeFaces, ...&#xA;    'Vertices', shapeVertices, ...&#xA;    'FaceColor', shapeColor);&#xA;axis equal;&#xA;xlabel('X-Axis')&#xA;ylabel('Y-Axis')&#xA;zlabel('Z-Axis')&#xA;view([60,20]);&#xA;&#xA;tic&#xA;while true&#xA;    elapsedTime = toc;&#xA;    if elapsedTime &amp;gt; time(end)&#xA;        break;&#xA;    end&#xA;    currentSample = find(time&amp;gt;=elapsedTime,1);&#xA;    rotMatrix = EulerToRotationMatrix(...&#xA;        EulerX(currentSample) , ...&#xA;        EulerY(currentSample) , ...&#xA;        EulerZ(currentSample));&#xA;    tempVertices = shapeVertices;&#xA;    tempVertices = (rotMatrix*tempVertices.').';&#xA;    set(shapePatch,'Vertices',tempVertices);&#xA;    drawnow;&#xA;    pause(0.01);&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This code runs through all of your sample data, at a 1:1 playback speed, and updates a shape's orientation according to your X/Y/Z angles. &lt;code&gt;EulerToRotationMatrix&lt;/code&gt; is a function you make yourself that accepts your Euler x/y/z angles and returns the appropriate rotation matrix. That's the part you need to play around with, but again I'm pretty sure you want Tait-Bryan XYZ.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Record multiple test data sets of you moving your IMU from one starting pose to another starting pose, and take different paths to end at the same orientation. When you watch the playback you'll see pretty much immediately if you're doing the rotation matrix stuff correctly. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So anyways, once you're sure you've got your rotation matrix, if you need to correct the accelerometer data, it's just &lt;code&gt;accNew = rotMatrix*accOld;&lt;/code&gt;. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Now, there are four possible ways to update yaw information:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;From a model using inputs (throttle and steering angle).&lt;/li&gt;&#xA;&lt;li&gt;Magnetometer for angle relative to magnetic North.&lt;/li&gt;&#xA;&lt;li&gt;Gyro readings from IMU&lt;/li&gt;&#xA;&lt;li&gt;Heading required to move in a straight line from the previous GPS fix to the current GPS fix. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The GPS location is a &lt;a href=&quot;https://www.mathworks.com/matlabcentral/answers/uploaded_files/28102/gaussian16.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;Gaussian distribution&lt;/a&gt; about your actual location, so I would be very reluctant to use option 4 above for anything. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The IMU already fuses the magnetometer and gyro data into one yaw reading, so then the only thing that you can do to improve your yaw estimate is with the model. If you can't get access to the inputs (throttle/steering angle) then you're stuck with the yaw angle the IMU gives you. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you &lt;em&gt;do&lt;/em&gt; get access to the inputs, then you can &lt;a href=&quot;https://pdfs.semanticscholar.org/5849/770f946e7880000056b5a378d2b7ac89124d.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;model the x/y/$\theta$ rates&lt;/a&gt; as follows:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\dot{x} = v\cos(\frac{\pi}{2} - \theta) \\&#xA;\dot{y} = v\sin(\frac{\pi}{2} - \theta) \\&#xA;\dot{\theta} = \frac{v}{L}\tan(\delta) \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $\theta$ is the heading, measured positive CW from the +y-axis; $\delta$ is the steering angle, measured positive CW from the forward vehicle direction, $L$ is the wheel base, the distance between the front and rear axles, and $v$ is the speed of the vehicle. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The model of how your vehicle parameters (position/heading) update are nonlinear to the point that I wouldn't try to put it in state space form. You really &lt;em&gt;do&lt;/em&gt; need the actual $\cos$ and $\sin$ functions; the small-angle approximations wouldn't really work here. That's okay! You're using the extended Kalman filter, so you don't need to try to linearize the model. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think I'd probably try to model the throttle signal as a first-order speed regulator, such that:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\dot{v} = \frac{c\left(\mbox{throttle}\right) - v}{\tau} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $\tau$ is the time constant and $c$ is a value that scales the throttle to a speed. Start a test with the vehicle stationary, then give a step command for throttle. The long-term, stable speed can be used to determine $c$. Then you can figure, given a particular speed &quot;request&quot; (throttle position), what the time constant was. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The relationship between step input and system response is &lt;a href=&quot;https://en.wikipedia.org/wiki/Time_constant#Step_response_with_arbitrary_initial_conditions&quot; rel=&quot;nofollow noreferrer&quot;&gt;well known&lt;/a&gt;; 63.2% of final value at one time constant, 95.0% at three time constants, etc. I'd run multiple tests at each of a variety of throttle inputs and average the results.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, your more complete model for the system would be:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\dot{v} = \frac{c\left(\mbox{throttle}\right) - v}{\tau} \\&#xA;v = v + \dot{v}\Delta T \\&#xA;$$&#xA;$$&#xA;\dot{x} = v\cos(\frac{\pi}{2} - \theta) \\&#xA;\dot{y} = v\sin(\frac{\pi}{2} - \theta) \\&#xA;\dot{\theta} = \frac{v}{L}\tan(\delta) \\&#xA;$$&#xA;$$&#xA;x = x + \dot{x}dT \\&#xA;y = y + \dot{y}dT \\&#xA;\theta = \theta + \dot{\theta}dT \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The generic Kalman model. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You're using the extended Kalman filter which, unlike the regular (&quot;classic&quot;?) Kalman filter, doesn't require a linear system. This is great because the system model is right above. Your states are position, speed, and yaw angle. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you do your predict steps:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Predict the state estimate:&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\hat{x}_{t|t-1} = f\left(\hat{x}_{t-1} , u_{t-1}\right) \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here $\hat{x}_{t|t-1}$ is your &lt;em&gt;prediction&lt;/em&gt; of the state vector $x$, which is what the hat $\hat{ }$ means, for the current time step given the state vector at the previous time step, which is what the ${t|t-1}$ means.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Predict the error covariance estimate:&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;P_{t|t-1} = F_k P_{t-1} F_k^T + Q_k \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here $F_k$ is the Jacobian $\left.\frac{\partial f}{\partial x}\right|_{\hat{x}_{t-1},u_{t-1}}$, $P$ is the error covariance (how much you &quot;trust&quot; the state estimate; smaller = more faith), $Q_k$ is the process noise matrix, which is typically a diagonal matrix of [numbers]. How do you measure process noise? There's a bunch of papers on the subject and you should check them out. Try putting 0.1 on the diagonal and see how that works. Generally the process noise is how you tune the filter. Again, the $t$ and $t|t-1$ mean the same as they did (current and current given the past). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then you do the update steps:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's the tricky-ish thing for you. You have multiple sensors - a GPS and an IMU. What to do? If you had independent sensors, the answer would be update, then update again. For example, if you were using the IMU only for speed and yaw angle, and you were using the GPS only for position, then you would have the following residuals/innovations:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\tilde{y}_{\mbox{IMU}} = \left[\begin{matrix}{}&#xA;\mbox{speed measurement} \\&#xA;\mbox{yaw angle measurement}&#xA;\end{matrix} \right] - \left[\begin{matrix}{}&#xA;0 &amp;amp; 1 &amp;amp; 0 \\&#xA;0 &amp;amp; 0 &amp;amp; 1&#xA;\end{matrix} \right] \left[\begin{matrix}{}&#xA;\mbox{position state prediction} \\&#xA;\mbox{speed state prediction} \\&#xA;\mbox{yaw angle state prediction}&#xA;\end{matrix} \right]&#xA;$$ &#xA;$$&#xA;\tilde{y}_{\mbox{GPS}} = \left[\begin{matrix}{}&#xA;\mbox{position measurement} &#xA;\end{matrix} \right] - \left[\begin{matrix}{}&#xA;1 &amp;amp; 0 &amp;amp; 0 &#xA;\end{matrix} \right] \left[\begin{matrix}{}&#xA;\mbox{position state prediction} \\&#xA;\mbox{speed state prediction} \\&#xA;\mbox{yaw angle state prediction}&#xA;\end{matrix} \right]&#xA;$$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can then go on calculating the residual covariances and Kalman gains without worry because those measurements are independent and don't &quot;overwrite&quot; each other. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You're not so lucky; you have to deal with the fact that you've got two redundant measurements - IMU position and GPS position. The common way to handle the redundancy is to average the sensors before you send them to the filter. This works fine for two identical sensors, but that's not what you have. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A better way &lt;a href=&quot;https://stackoverflow.com/a/25586369/5171120&quot;&gt;might be to weight the measurements by their covariances&lt;/a&gt; such that more &quot;trustworthy&quot; sensors get a bigger weight. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;All that said, the two don't &lt;em&gt;have&lt;/em&gt; to conflict; the IMU technically outputs an acceleration. If you just integrate one time to get speed and leave it at that, then suddenly the IMU and the GPS &lt;em&gt;don't&lt;/em&gt; conflict and you can leave their measurements separate and not have to worry about conflict. &lt;em&gt;This is the route I would take&lt;/em&gt;. If you find it unsatisfactory you can try integrating the IMU output again and blending it with the GPS data, but I don't think that's going to make things any better. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hopefully I've made things much more clear. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A final note, you'll probably find also that your GPS and IMU don't update at the same rate. What to do then? There's a lot of papers about that, but they basically boil down to downsampling the higher frequency data or faking the low frequency data. Downsampling can be done dumb (discarding data) or smart (filtering data), just like faking the data can be done dumb (repeating the same value) or smart (some manner of extrapolating a projected sensor reading). &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="-1" LastEditDate="2017-05-23T12:37:11.430" LastActivityDate="2016-12-09T21:05:54.317" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11182" PostTypeId="1" CreationDate="2016-12-06T09:24:29.430" Score="2" ViewCount="4458" Body="&lt;p&gt;I'm trying to write an inverse kinematics Matlab code for a 6 DOF robotic arm that has the following link parameters:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Twist angle (alpha): &lt;code&gt;[-90, 0, 90, -90, 90, 0]&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Link length (a): &lt;code&gt;[0, 0.5, 0, 0, 0, 0]&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Offset distance (d): &lt;code&gt;[0, 0.25, 0, 1, 0, 0.5]&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and Px, Py, Pz are the following &lt;code&gt;[1,1,0]&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm using the following equations for theta 1,2 and 3 values (closed form solution):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/5RqNA.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/5RqNA.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As seen in the equations theta 1 and 2 have 2 two roots (2 possible solutions) thus, the robot has eight groups of inverse kinematics solutions. How do I modify my code to select the ideal solution for theta ? &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;%Theta 1&#xA;     theta1 = (atan2(real(py),real(px)))-atan2(real(d2),real(sign1*sqrt(px^2+py^2-d2^2)));&#xA;&#xA; c1 = cos(theta1);&#xA; s1 = sin(theta1);&#xA;&#xA; %Theta 2&#xA; A = (c1*px)+(s1*py);&#xA; B = (A^2+pz^2+a2^2-d4^2)/(2*a2);&#xA;&#xA; theta2 = (atan2(real(A),real(pz)))-atan2(real(B),real(sign2*sqrt(A^2+pz^2-B^2)));&#xA;&#xA; c2 = cos(theta2);&#xA; s2 = sin(theta2);&#xA;&#xA; %Theta 3&#xA; A1 = (c2*px)+(s2*py);&#xA; theta3 = (atan2(real(A1-(a2*c2)),real(pz+(a2*s2)))) - theta2;&#xA;&#xA; c3 = cos(theta3);&#xA; s3 = sin(theta3);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="15472" LastActivityDate="2017-03-15T09:58:02.020" Title="Matlab Inverse Kinematics 6 DOF" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;inverse-kinematics&gt;&lt;algorithm&gt;&lt;matlab&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11183" PostTypeId="2" ParentId="11182" CreationDate="2016-12-06T10:53:17.277" Score="4" Body="&lt;p&gt;Ideal solution can be defined in many ways. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The simplest way to choose one is to compare which of the 8 solutions is closest to your current pose in joint space. This is usually a good idea if you are moving along a line (or similar defined trajectores). &lt;/li&gt;&#xA;&lt;li&gt;In practics some robot manufactruers have solved this using the status and turn variables. These variables are additional inputs for the inverse kinematics problem and  specify exactly which inverse kinematics solution is needed.&lt;/li&gt;&#xA;&lt;li&gt;You can also check is one of the poses has a collision with the environmnent to filter infeasable poses.&lt;/li&gt;&#xA;&lt;li&gt;You can calculate which pose offers the larges dexterity index&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2016-12-06T10:53:17.277" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11184" PostTypeId="2" ParentId="11175" CreationDate="2016-12-06T16:54:08.983" Score="4" Body="&lt;p&gt;You should check out:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The &lt;a href=&quot;http://www.ycbbenchmarks.org/&quot; rel=&quot;noreferrer&quot;&gt;Yale-CMU-Berkeley (YCB) Object and Model set&lt;/a&gt;.  It is designed for facilitating benchmarking in robotic manipulation. The set consists of objects of daily life with different shapes, sizes, textures, weight and rigidity, as well as some widely used manipulation tests. The set is associated with a model database which provides mesh models and high-resolution RGB-D scans of the objects for easy incorporation into manipulation and planning software platforms.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The &lt;a href=&quot;https://www.eng.yale.edu/grablab/humangrasping/&quot; rel=&quot;noreferrer&quot;&gt;The Yale Human Grasping Data Set&lt;/a&gt;.  It is a dataset of human grasping movements in unstructured environments. More than 27 hours of video with grasp, object, and task data from two housekeepers and two machinists are available.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The &lt;a href=&quot;http://graspit-simulator.github.io/&quot; rel=&quot;noreferrer&quot;&gt;GraspIt!&lt;/a&gt; simulator.  It is a physics based simulator that can accommodate arbitrary hand and robot designs. It has a number of grasp quality metrics, but I don't know if it has a simulated human hand.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="110" LastActivityDate="2016-12-06T16:54:08.983" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11185" PostTypeId="2" ParentId="10404" CreationDate="2016-12-07T13:18:03.107" Score="2" Body="&lt;p&gt;As said by Jacob, sample impoverishment is inherit to the Sampling-Importance-Resampling family of particle filters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An alternative solution which does require some extra effort is to switch to a Markov Chain Monte Carlo (MCMC) particle filter. MCMC relies on constructing a Markov chain that has a stationary distribution which is equal to the distribution you want to sample from. Meaning that if you draw samples from this Markov chain long enough, as $n\rightarrow\infty$, you will sample $x_n\sim P$, where P is the distribution you want to sample from.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The construction of such a Markov chain is often done through the Metropolis-Hastings algorithm. Here, a proposal state $x_k^*$ is generated from the current state $x_k$, which is most often done by a Gaussian around the current state: $x_k^*\sim N(x_k,1)$. After this, the likelihood of both the initial state (seed) and proposal are calculated. Based on the likelihood ratio, the proposal is accepted with some probability. A simple introduction to MCMC and the M-H algorithm is given &lt;a href=&quot;https://health.adelaide.edu.au/psychology/ccs/docs/ccs-class/technote_metropolishastings.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a particle filtering context, generating proposals around an initial seed means that the diversity in particles will never diminish, as long as the proposals are generated such that at least some of them are accepted.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: There do exist other types of SIR-like particle filters which have their own way to combat degeneracy/sample impoverishment. I suggest looking at &lt;a href=&quot;http://www.nuff.ox.ac.uk/economics/papers/1997/w13/Sir.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Auxiliary Particle Filtering&lt;/a&gt;, where an auxiliary variable is introduced during sampling. This variable selects particles based on their goodness-of-fit to current observations. This helps to better model the tails of the density (which is the weak point with sample degeneracy).&lt;/p&gt;&#xA;" OwnerUserId="15141" LastEditorUserId="15141" LastEditDate="2016-12-09T15:05:49.323" LastActivityDate="2016-12-09T15:05:49.323" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11187" PostTypeId="1" AcceptedAnswerId="11190" CreationDate="2016-12-08T11:45:58.697" Score="0" ViewCount="163" Body="&lt;p&gt;With a group of students we are building an exoskeleton for paraplegics. I am part of the Software &amp;amp; Control department and we are designing the motor controller configuration. We have several requirements:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Size is one of our main requirements. We want the Exoskeleton to be&#xA;as slim as possible, so this is true for all the components as well.&#xA;We want the motor controller to be as small as possible. &lt;/li&gt;&#xA;&lt;li&gt;The motor controller has to work with a brushless DC motor&lt;/li&gt;&#xA;&lt;li&gt;A setpoint will be sent from a microcontroller to the motor&#xA;controller Two or three absolute encoders need to be connected,&#xA;this depends on the design of the joint. &#xA;**We are either going to&#xA;use position or torque control &#xA;&lt;em&gt;We need one encoder for the motor&#xA;angle, and one for the joint angle. We might implement Series&#xA;Elastic Actuation in our joint and then we want to be able to&#xA;measure the deflection in the spring and thus need two encoders&#xA;for that.&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;A continuous power output in the range of 700 - 1200 Watt&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;While exploring several off-the-shelf possibilities, we came accross the  &lt;a href=&quot;http://www.elmomc.com/products/gold-twitter-servo-drive.htm&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Elmo Gold Twitter&quot;&gt;Elmo Gold Twitter&lt;/a&gt; and the IOMI Pro. One of the problems of these boards, is the amount of absolute encoders that can be connected. Both the Elmo and the IOMI board can either have 1 or no absolute encoders connected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We came op with a solution, so that we are able to connect multiple encoders. In our exoskeleton we are going to use an EtherCAT Master-Slave configuration. The High-Level control (e.g. state-machine) is on the EtherCAT Master and sends joint angle setpoints. Our idea is to use a EtherCAT Slave as a sort of second controller, which gets the joint setpoint and the joint encoder values, calculates the motor setpoint and sends this out to a certain off-the-shelf controller like the Elmo Gold Twitter or the IOMI Pro. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/XA1nv.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XA1nv.jpg&quot; alt=&quot;Configuration&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is the following: Is this even a good solution? And what are other solution to this problem? Are there even better alternatives for a motor controller? Might it be a better idea to build and program your own motor controller? (please bare in mind that we have limited experience in that area)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I thank you all in advance for your reply!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cheers!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nathan&lt;/p&gt;&#xA;" OwnerUserId="15496" LastActivityDate="2016-12-08T15:01:09.853" Title="Motor Controller Configuration" Tags="&lt;motor&gt;&lt;microcontroller&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11189" PostTypeId="2" ParentId="11187" CreationDate="2016-12-08T14:32:35.883" Score="0" Body="&lt;ul&gt;&#xA;&lt;li&gt;Is this even a good solution? &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;That depends on what you call good. I would certainly make sure that you can justify the role of each component in the system. Why do you need some many encoders if current exoskeletons do just fine with less?&#xA;In order to decide if your solution is good or not, you should have  clear list of requirements (e.g. required torques, velocities, resolution, price, etc.) including also functional requirements (elasticity of joints, etc.) If all requirments are satisfied, your solution is good. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For possible improvements, I would advise you to define each control loop you plan to have and make sure that you have the required amount of sensors and controllers to implement it. By required amount I mean no less then necesary but also no more then necesary. Each sensor you use should participate in (at lease one) a control loop and you have to be sure that the sensor is not measureing a parameter which can be easily calculated from a different sensor with the required precision. Also consider the latencys on the bus system you plan to imlement in your control loops and decide if they are acceptanble. The main idea would be to use as few components as possible, so you should be able to answer the question &quot;Why can't the task of this component be done by an already existing one?&quot; for each component in you schematic.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;And what are other solution to this problem? &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;When you combine mechanics, electronics and software, there are probably an infinity of possible solutions to a problem. You can consider diffferent actuation types, differetn motor types, differen communication systems, etc. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Might it be a better idea to build and program your own motor controller?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;If plan to use industrial communication protocols (such as EtherCAt, or ProfiNet) I would advise against doing your own controller If using i2c for example is an option and this is a controls assignment (not a systems assignment), I would advise you to definetly make your own controllers. It might not work perfectly (it might not even work) but the amount you learn by programming your own controller is worth far more then buying one. &lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2016-12-08T14:32:35.883" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11190" PostTypeId="2" ParentId="11187" CreationDate="2016-12-08T15:01:09.853" Score="2" Body="&lt;p&gt;&quot;My question is the following&quot;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Is this even a good solution?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No, not really. As &lt;a href=&quot;https://robotics.stackexchange.com/questions/11187/motor-controller-configuration#comment20222_11187&quot;&gt;BendingUnit22 mentions&lt;/a&gt;, a motor controller... controls &lt;strong&gt;a&lt;/strong&gt; motor. One motor. The biggest problem I see with this is that you've got the EtherCAT slave on the feedback line, trying to do signal processing, instead of piping the feedback directly to the motor controller. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The motor controller is setup for one motor. Use one motor controller for each motor you want to use. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What are other solutions to this problem? &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Open-ended design problems are off-topic (you could join us in &lt;a href=&quot;http://chat.stackexchange.com/rooms/6221/asimovs-corner&quot;&gt;Robotics Chat&lt;/a&gt; and ask there if you like). That said, you haven't mentioned how you are converting from a brushless DC motor to the joint, but I'm going to guess you've got some kind of &lt;em&gt;fixed&lt;/em&gt; gearing between the motor and the joint. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your options there are to either put an encoder on the joint and do processing on the feedback signal to convert to motor units (as you've depicted), &lt;strong&gt;or&lt;/strong&gt; you could put the encoder on the &lt;em&gt;motor&lt;/em&gt; and do processing on the reference signal to convert the desired joint angle to motor units. My preference, personally speaking, would be to put the encoder on the motor. This means that all of your processing (converting between joint/motor units) is done &lt;em&gt;before&lt;/em&gt; the motor-control loop. Processing introduces delays and those delays (negatively) affect control. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Something to think about, but I'm not going to speculate on your options here beyond pointing that out. You can leverage the knowledge of the fixed gearing between motor and joint to quickly scale desired joint angles to desired motor units and vice-versa, depending on where you want to put the encoder. I believe most BLDC motors come with encoders already, though generally not absolute encoders, which you would need.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Are there even better alternatives for a motor controller?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Terms like &quot;good&quot; and &quot;better&quot; are for &lt;em&gt;you&lt;/em&gt; to decide; they have no quantifiable meaning on their own. Once you set a list of specifications, you can rank options by how well they meet or exceed each of the items on your list of specifications. If you can rank your specifications then it should become obvious that some options are &quot;better&quot; &lt;strong&gt;for your application&lt;/strong&gt; than others, but again that's all dependent on the &lt;em&gt;list of specifications that&lt;/em&gt; you &lt;em&gt;generate&lt;/em&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'll add here that I think a lot of people put cost as a specification, which is generally advisable, but they put too much emphasis on it. What matters more to you, cost or quality documentation? Cost or that the motor utilizes industry standards (NEMA bolt patterns, standard shaft sizing, reasonable power interface)? Cost or supplier's return policy? Cost or availability?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What good is a cheap motor when you can't bolt it to any standard accessories or gearboxes? What good is a cheap motor that arrives DOA and then you can't exchange it, or when the exchange process takes 3 months? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I ask because these are all (absolutely colossal) problems I've &lt;em&gt;actually faced&lt;/em&gt; on academic design projects. Some of these oversights nearly killed a couple (&lt;em&gt;graded&lt;/em&gt;) projects I worked on.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Might it be a better idea to build and program your own motor controller? &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Generally speaking, yeah, I think that's a great project. Unfortunately for you, that's not the project &lt;em&gt;you're supposed to be working on&lt;/em&gt;. You stated that you're part of the software and control department. The other people on this project are counting on you to get a motor controller done and programmed so the other teams can get their portion of the project completed. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A frame that can't be actuated doesn't help anyone and looks bad on everyone. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If this was your own pet project, then I'd say go for it, but &lt;em&gt;because you're working in a team environment&lt;/em&gt;, where there are &lt;em&gt;other people depending on you to complete your work in a timely manner&lt;/em&gt;, I'd say save that project for when you have time and try to find an off-the-shelf product that meets your needs for now. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your teams are big enough you might be able to split this project off for yourself, &lt;strong&gt;after&lt;/strong&gt; you help acquire at least passable motor controllers. The problem with designing your own is that you need to:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Interface with the motor encoder, in all the formats the commercial motor controller could (or, at a bare minimum, in all the formats for the encoders you're using).&lt;/li&gt;&#xA;&lt;li&gt;Design the schematic for the power electronics capable of providing 1.2kW.&lt;/li&gt;&#xA;&lt;li&gt;Design the PCB for the schematic, including layout and trace size. 1.2kW isn't &quot;high power&quot; by any means, but it's enough that you're likely to blow up a couple boards before you get the design right. &lt;/li&gt;&#xA;&lt;li&gt;Design the housing/mount footprint for the completed circuit. &lt;/li&gt;&#xA;&lt;li&gt;Actually assemble and solder the PCB.&lt;/li&gt;&#xA;&lt;li&gt;Program the PCB, including the packet processing for EtherCAT if you go that route, the input processing and conditioning for the encoder feedbacks, and then the actual control algorithm for the motor speed control.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;This might &quot;only&quot; be a couple weeks of working full time, but there's generally a couple weeks of down time between completing the PCB design and receiving the boards, and like I mentioned I would be money you'll blow at least one board. You have to have everything perfect; all the component datasheets read correctly, transcribed to schematics correctly, transcribed to PCB correctly, components placed correctly, and then soldered correctly, and then programmed correctly, for the thing to work. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you blow a board because you didn't place or solder or program something correctly, then you're out the turnaround time on the replacement parts. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you blow a board because you didn't get the schematic right, then you're out the turnaround time on replacement boards, which again is probably a couple weeks. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How do you know the difference between blown by bad schematic and blown by bad construction? Good question. That'll probably take at least a week or two. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;And the whole time, the rest of the project is stalled while everyone else on the team waits for the motor controllers.&lt;/em&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You stated you or your team (&quot;we&quot;) don't have much experience in that area. I don't know how you were thinking you might build and test your own motor controller circuit, but a breadboard is absolutely out of the question. Breadboards can only handle 0.5 to 1 Amp max, so whatever circuit you're testing with one is certainly not a 1.2kW motor controller, or even a 700W motor controller.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2016-12-08T15:01:09.853" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="11191" PostTypeId="1" CreationDate="2016-12-08T16:28:50.377" Score="2" ViewCount="1613" Body="&lt;p&gt;I'm working on diy flight controller for quadcopter. I have a question for which I can't find a good answer. So perhaps you could help me.&#xA;I'm using a cascaded PID controller for Pitch and Roll regulation. &#xA;First there is a stabilize PID and rate PID. For the first (stab.) you input desired angle from transmitter and actual angle from IMU. then this output is feed into rate controler. From there it goes to the motors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In code I'm pooling a function with &quot;data is ready to read from IMU&quot; which happens every 1ms. In this function I'm calculating one regulator and writing to motors. Loop time when this condition is not true is way lower then that. So one regulator should be inside this slow loop and one outside. So which one should be fast and which one slow?&#xA;In my understanding, stabilize PID should be the fastest? Is that correct?&#xA;Also should both regulators be PID? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks for your help!&lt;/p&gt;&#xA;" OwnerUserId="15318" LastActivityDate="2016-12-15T15:10:59.733" Title="Cascaded PID in Quadcopter control" Tags="&lt;quadcopter&gt;&lt;pid&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11193" PostTypeId="1" AcceptedAnswerId="11194" CreationDate="2016-12-08T22:18:05.917" Score="1" ViewCount="235" Body="&lt;p&gt;I'm interested in exoskeletons and wearable rehabilitation robotics. I wonder how we can estimate/predict the intention of human body/part motion. I want to prevent the exoskeleton from interfering with human movements.  Intention reading is the process of predicting how the movement will take place and how it will happen at the beginning of any movement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is an exoskeleton example (&lt;a href=&quot;https://www.youtube.com/watch?v=BdoblvmTixA&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=BdoblvmTixA&lt;/a&gt;) which detects muscle activation with EMG and generates artificial muscle attraction. But this is only a open and close action. And it will begins after the movement. Also EMG system has a lot of disadvantage like sliding probes, affecting from other/crossing muscles. I want to estimate every motion like turn,twist, amount of contraction. I'm open to suggestions or issues (The troubles you have experienced.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.mathworks.com/videos/signal-processing-and-machine-learning-techniques-for-sensor-data-analytics-107549.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;This matlab webinar&lt;/a&gt; which is about &quot;&lt;em&gt;Signal Processing and Machine Learning Techniques for Sensor Data Analytics&lt;/em&gt;&quot; shows how to classify different actions. But this example predicts kind of motion after the motion completed. I need to know motion information at very first.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want know how can I estimate different motions at the beginning of limb action. Which system (EMG,EEG,IMU,etc.) and processing technique will be better or which combination should I use.&lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2016-12-13T21:46:54.517" LastActivityDate="2016-12-13T21:46:54.517" Title="Reading Intention for exoskeletons motion estimation" Tags="&lt;sensors&gt;&lt;robotic-arm&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="11194" PostTypeId="2" ParentId="11193" CreationDate="2016-12-09T00:41:41.963" Score="3" Body="&lt;p&gt;You have many options: encoders at exo joints to provide absolute angles, IMU on limbs for estimating motions, force sensing shoe soles for force distribution, force sensors at joints, crutches usually used by pilots wearing rehab exo can also have those sensors, e.g. at the bottom of the crutch, at hand handles, etc.&lt;/p&gt;&#xA;" OwnerUserId="9972" LastActivityDate="2016-12-09T00:41:41.963" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="11197" PostTypeId="1" AcceptedAnswerId="11201" CreationDate="2016-12-10T00:36:50.640" Score="4" ViewCount="988" Body="&lt;p&gt;I was asked this in a phone interview for a robotics job. Googling has not really helped. I assume it is some sort of state prediction model that can be used in a Kalman filter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone give me a formal description? A link to a reference would also be nice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt; to clarify, the interview was for a self-driving car company and before the question we had been discussing Kalman filters, Particle filters, and path planning algorithms (A*).&lt;/p&gt;&#xA;" OwnerUserId="9210" LastEditorUserId="9210" LastEditDate="2016-12-10T22:49:32.533" LastActivityDate="2016-12-13T14:48:34.223" Title="What is the bicycle model for a dynamic robot?" Tags="&lt;mobile-robot&gt;&lt;kalman-filter&gt;&lt;dynamics&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11198" PostTypeId="2" ParentId="11197" CreationDate="2016-12-10T03:11:32.273" Score="1" Body="&lt;p&gt;&quot;The&quot; bicycle model? No idea.  But &quot;a&quot; bicycle model is something that's a great jumping point for tons of interesting topics though...&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;holonomics&lt;/li&gt;&#xA;&lt;li&gt;closed-loop systems / feedback models&lt;/li&gt;&#xA;&lt;li&gt;torque calculations&lt;/li&gt;&#xA;&lt;li&gt;gyroscopic stabilization&lt;/li&gt;&#xA;&lt;li&gt;general stability / lyapunov theory&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Terrible question for a phone interview!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.control.lth.se/media/Staff/KarlJohanAstrom/Lectures/BikeTalkKTH2006.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Bicycle Dynamics and Control by K. J. Åström&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This PDF discusses most of those issues.&lt;/p&gt;&#xA;" OwnerUserId="9314" LastEditorUserId="2155" LastEditDate="2016-12-13T14:48:34.223" LastActivityDate="2016-12-13T14:48:34.223" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="11199" PostTypeId="2" ParentId="11193" CreationDate="2016-12-10T10:04:03.597" Score="1" Body="&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=te1RBQQlHz4&quot; rel=&quot;nofollow noreferrer&quot;&gt;MYO gesture control&lt;/a&gt; looks like a good system at least estimation on arm and hand motions. It includes multiple EMG and IMU sensors. &lt;/p&gt;&#xA;" OwnerUserId="9748" LastActivityDate="2016-12-10T10:04:03.597" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11200" PostTypeId="1" AcceptedAnswerId="11214" CreationDate="2016-12-10T22:20:44.947" Score="3" ViewCount="194" Body="&lt;p&gt;I'm planning to build a Balance Bot and I would like to know which design should I go with. There's a vertical design such as the ArduRoller and on the other hand, there's the typical stacked type of deign. I have attached images below for both of them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although both of these are based on the principle of Inverted Pendulum, how do these differ from each other in terms of stability and response (assuming both the designs are of the same size)? Is the mass distribution in the vertical design better? Also, is there a difference in programming them?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/eLuzb.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/eLuzb.jpg&quot; alt=&quot;Vertical Design&quot;&gt;&lt;/a&gt; &lt;a href=&quot;https://i.stack.imgur.com/EXS6x.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/EXS6x.png&quot; alt=&quot;Stacked Design&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15516" LastActivityDate="2016-12-13T23:26:17.790" Title="Comparison of Balance Bot design" Tags="&lt;design&gt;&lt;stability&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11201" PostTypeId="2" ParentId="11197" CreationDate="2016-12-11T09:08:11.733" Score="3" Body="&lt;p&gt;The bicycle model is a simplified model of vehicle dynamics. It's really common so I'm not sure why a web search did not get any results for you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A random paper, first one in my search that had a diagram and was not behind a paywall...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://pdfs.semanticscholar.org/2da2/1fdadb16e8448555f2bd248e1451eead6e2e.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Modification of Vehicle Handling Characteristics via Steer-by-Wire &#xA;By Paul Yih, Jihan Ryu, and J. Christian Gerdes.&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="2155" LastEditDate="2016-12-13T14:48:29.373" LastActivityDate="2016-12-13T14:48:29.373" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="11202" PostTypeId="1" CreationDate="2016-12-11T23:59:41.660" Score="3" ViewCount="291" Body="&lt;p&gt;I recently read a paper titled &lt;a href=&quot;http://www.roboticsproceedings.org/rss09/p31.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Finding Locally Optimal, Collision-Free&#xA;Trajectories with Sequential Convex Optimization&lt;/a&gt; by &lt;em&gt;John Schulman, Jonathan Ho, Alex Lee, Ibrahim Awwal, Henry Bradlow and Pieter Abbeel&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The authors mention that the end-effector final pose constraint can be readily incorporated in the planning scheme which is based on solving an unconstrained optimization with the equality and inequality constraints added in penalty function.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let $F_{targ} \in $ SE(3) be the desired pose and $F_{cur}(\theta)$ be the current pose, then the pose error is given as $F^{-1}_{targ}F_{cur}(\theta)$. However, I am wondering that if we plan motion in the joint space, then how can this error be incorporated in the objective function as a penalty term?,since $F_{cur}(\theta)$ is a highly nonlinear, $nonconvex$ forward kinematics map, are we linearizing the forward kinematics map to make it convex and add it in the penalty formulation?&lt;/p&gt;&#xA;" OwnerUserId="15491" LastEditorUserId="37" LastEditDate="2016-12-14T10:59:26.833" LastActivityDate="2017-02-12T20:29:10.557" Title="Motion planning with sequential convex optimization" Tags="&lt;motion-planning&gt;&lt;humanoid&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11203" PostTypeId="1" AcceptedAnswerId="11205" CreationDate="2016-12-12T05:34:00.583" Score="2" ViewCount="1097" Body="&lt;p&gt;I want to do forward dynamics but before that I got struck in inverse kinematics for 4 dof. My code is given below:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;preach = [0.2, 0.2, 0.3];&#xA;% create links using D-H parameters&#xA;L(1) = Link([ 0 0 0 pi/2 0], 'standard');&#xA;L(2) = Link([ 0 .15005 .4318 0 0], 'standard');&#xA;L(3) = Link([0 .0203 0 -pi/2 0], 'standard');&#xA;L(4) = Link([0 .4318 0 pi/2 0], 'standard');&#xA;%define link mass&#xA;L(1).m = 4.43;&#xA;L(2).m = 10.2;&#xA;L(3).m = 4.8;&#xA;L(4).m = 1.18;&#xA;%define center of gravity&#xA;L(1).r = [ 0 0 -0.08];&#xA;L(2).r = [ -0.216 0 0.026];&#xA;L(3).r = [ 0 0 0.216];&#xA;L(4).r = [ 0 0.02 0];&#xA;%define link inertial as a 6-element vector&#xA;%interpreted in the order of [Ixx Iyy Izz Ixy Iyz Ixz]&#xA;L(1).I = [ 0.195 0.195 0.026 0 0 0];&#xA;L(2).I = [ 0.588 1.886 1.470 0 0 0];&#xA;L(3).I = [ 0.324 0.324 0.017 0 0 0];&#xA;L(4).I = [ 3.83e-3 2.5e-3 3.83e-3 0 0 0];&#xA;% set limits for joints&#xA;L(1).qlim=[deg2rad(-160) deg2rad(160)];&#xA;L(2).qlim=[deg2rad(-125) deg2rad(125)];&#xA;L(3).qlim=[deg2rad(-270) deg2rad(90)];&#xA;%build the robot model&#xA;rob = SerialLink(L, 'name','rob');&#xA;qready = [0 -pi/6 pi/6 pi/3   ];&#xA;m = [1 1 1 1 0 0];   % mask matrix&#xA;T0 = fkine(rob, qready);&#xA;t = [0:.056:2];&#xA;% do inverse kinematics&#xA;qreach =  rob.ikine(T0, preach, m); &#xA;[q,qd,qdd]=jtraj(qready,qreach,t);&#xA;%compute inverse dynamics using recursive Newton-Euler algorithm&#xA;tauf = rne(rob, q, qd, qdd);&#xA;% forward dynamics&#xA;[t1,Q,Qd] = rob.fdyn(2,tauf(5,:),q(5,:), qd(5,:));&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But due to&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;qreach =  rob.ikine(T0, preach, m); &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;it shows error&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Index exceeds matrix dimensions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Error in SerialLink/jacobn (line 64) U = L(j).A(q(j)) * U;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Error in SerialLink/jacob0 (line 56) Jn = jacobn(robot, q); % Jacobian from joint to wrist space&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Error in SerialLink/ikine (line 153) J0 = jacob0(robot, q);&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anybody explain me why this is happening and how to resolve it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="14024" LastActivityDate="2016-12-13T09:31:18.347" Title="showing error while using inverse kinematics &quot;ikine&quot; for 4 dof robotic arm" Tags="&lt;kinematics&gt;&lt;inverse-kinematics&gt;&lt;matlab&gt;&lt;manipulator&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11204" PostTypeId="1" CreationDate="2016-12-12T11:46:14.640" Score="0" ViewCount="362" Body="&lt;p&gt;I want to make path planning algorithm for a quadrotor with RRT in my thesis. I have searched lots of articles and come up with the concept of &quot;dynamic RTT&quot; and one of the articles has a title &quot;kinodynamic RRT*&quot;. I have emailed the author of the article with no response. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main point that I couldn't understand is, we need to sample random state for dynamic RRT like 2 position and 2 velocity values for planar vehicle or an angle and its rate in case of 2D-quadrotor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How should the samples be so that speeds and positions does not confused and when should I consider the saturation limits of the actuators or vehicle acceleration limits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't understand how to handle what if two consecutive samples for positions are A(0,0) and B(10,10) this needs positive velocity at the point B but sampling can cause negative velocity. Am I wrong?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other issue is, how should the control signal be determined so that it can be applied for duration of delta t to move as close as possible to the sampled point. I am not sure how to determine the input or move the vehicle. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do I need optimizations so that it can reach to the sampled point in shortest time possible?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please let me know if there is a missing part to be understood.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Wish a hopeful new year.&lt;/p&gt;&#xA;" OwnerUserId="15133" LastActivityDate="2017-01-11T16:33:07.597" Title="How to make RRT to work for dynamic systems?" Tags="&lt;quadcopter&gt;&lt;control&gt;&lt;motion-planning&gt;&lt;rrt&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="11205" PostTypeId="2" ParentId="11203" CreationDate="2016-12-12T14:37:19.490" Score="2" Body="&lt;p&gt;In the Robotics Toolbox &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;SerialLink.ikine()&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;can only be used for &lt;a href=&quot;http://www.petercorke.com/RTB/r9/html/SerialLink.html#ikine&quot; rel=&quot;nofollow noreferrer&quot;&gt;6 dof or higher structures&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The masking option you have used, can be used fo underactuated robots. There is an example in the documentation, how a 3dof robot could be considered a 6dof underactuated robot. However, it is also stated in the manual, that:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;For robots with 4 or 5 DOF this method is very difficult to use since&#xA;  orientation is specified by T in world coordinates and the achievable&#xA;  orientations are a function of the tool position.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Using SerialLink.ikcon() instead might be viable alternative. &lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2016-12-13T09:31:18.347" LastActivityDate="2016-12-13T09:31:18.347" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="11207" PostTypeId="2" ParentId="11204" CreationDate="2016-12-12T16:14:16.600" Score="1" Body="&lt;p&gt;Dynamic Systems are described via system identification. That is a procedure to generate a physic engine on-the-fly. The physic engine can predict the future state of the system. An example: the quadrotor has a speed of 10 mph and runs into a wall. The physics engine aka &quot;dynamic system&quot; can predict the collison.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;RRT is used for solving the optimal control problem. It calculates the control signals for the quadcopter for reaching a given goal like &quot;fly to a point&quot;, &quot;be in balance&quot;. The paper which is cited in the comments tries to adapt RRT for kinodynamic planning with the aim of reducing the search space. According to my research the best RRT-like algorithm for solving optimal control is DARRT which was invented by BostonDynamics engineer Jennifer Barry.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2016-12-12T16:14:16.600" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="11208" PostTypeId="1" CreationDate="2016-12-12T17:13:19.730" Score="2" ViewCount="993" Body="&lt;p&gt;I am using gyroscope only to get real time angles as I move the IMU using a micro controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am able to get angles at a pretty decent accuracy(2 to 3 degree error). I am using quaternions for obtaining angles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The angles are with respect to the initial position of the IMU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I rotate the IMU around individual axis i.e around any one Axis at a time, I get good accuracy. But when I rotate around all axis at once the problem starts as stated below.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Problem:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem here is when I give a pitch and then yaw all seems fine. Now at this position of pitch and yaw, I give a roll, the other two angles also change. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The gyroscope gives raw angular rate in DPS, which is converted to radian/sec for processing. The quaternions are calculated from raw angular rate.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The code to convert quaternions to euler angles is as follows,&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;//Local variables for clarity&#xA;fqw = gsangleparam.fquaternion[0];&#xA;fqx = gsangleparam.fquaternion[1];&#xA;fqy = gsangleparam.fquaternion[2];&#xA;fqz = gsangleparam.fquaternion[3];&#xA;&#xA;&#xA;//Calculate Angles*/&#xA;gsangles.yaw = atan2(2 * (fqx*fqy + fqw*fqz), (fqw*fqw + fqx*fqx - fqy*fqy -    fqz*fqz)) * 180/PI;&#xA;&#xA;gsangles.pitch = asin(-2 * (fqx*fqz - fqw*fqy)) * 180/PI;&#xA;&#xA;gsangles.roll = atan2(2 * (fqy*fqz + fqw*fqx), (fqw*fqw - fqx*fqx - fqy*fqy  + fqz*fqz)) * 180/PI;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The Problem of roll is present only when initial position(and also 180 deg counterpart) is as follows:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;X - Facing left&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Y - Facing towards us &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Z - Facing UP&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The problem is&lt;/strong&gt;, When I give a pitch(around X here),yaw(around Z) and then roll(around Y here) or any sequence of roll pitch and yaw, then yaw changes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact whenever I rotate about Y axis(roll here), Yaw(around Z) changes. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is no problem when the initial position is(and also 180 deg counterpart) as follows, &lt;/p&gt;&#xA;&#xA;&lt;p&gt;X - Facing away from us &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Y - Facing towards us&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Z - Facing UP&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;There is no problem&lt;/strong&gt;. i.e When I give a pitch(around Y here),yaw(around Z) and then roll(around X here) or any sequence of roll pitch and yaw, there is no problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why is this happening?? can anyone please explain. &#xA;Thanks in advance.&lt;/p&gt;&#xA;" OwnerUserId="14376" LastEditorUserId="14376" LastEditDate="2016-12-13T11:25:00.537" LastActivityDate="2016-12-13T11:25:00.537" Title="Angles from gyroscope readings using quaternions" Tags="&lt;accelerometer&gt;&lt;gyroscope&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="11209" PostTypeId="2" ParentId="11208" CreationDate="2016-12-12T19:32:37.827" Score="2" Body="&lt;p&gt;I'll link you to some &lt;a href=&quot;http://planning.cs.uiuc.edu/node102.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;math&lt;/a&gt; but try to give a conceptual explanation, too. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider a case where you want to start with the IMU upright and pointed forward and want to end with the IMU upside-down (new +z = old -z) but still pointed forward (new +x = old +x). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How do you get from the starting position to the end position?&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Easiest way is to rotate about +x an angle of 180 degrees. (Roll) &lt;/li&gt;&#xA;&lt;li&gt;You could rotate about +y an angle of 180 degrees and &lt;em&gt;then&lt;/em&gt; rotate about the new +z axis an angle of 180 degrees (Pitch then Yaw)&lt;/li&gt;&#xA;&lt;li&gt;You could rotate about +z an angle of 180 degrees and then rotate about the new +y axis an angle of 180 degrees (Yaw then Pitch)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;There are other ways you could do it, too - you could rotate about successive axes in 90 degree increments, a bunch of little increments, etc. The point is, &lt;em&gt;you need to define what your order of rotations are&lt;/em&gt; to get from one particular starting orientation to get to a particular ending orientation for your rotation angles to make sense. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem that you're seeing is that your gyroscope is likely setup to assume a &lt;em&gt;roll first&lt;/em&gt;, followed by a &lt;em&gt;pitch&lt;/em&gt;, followed by a &lt;em&gt;yaw&lt;/em&gt;. That's (again, probably - check your datasheet) the order of rotations the gyro is giving you, but &lt;em&gt;you&lt;/em&gt; are giving &lt;em&gt;it&lt;/em&gt; a a pitch first, then yaw, which are the last two rotations in the sequence, then giving it the first rotation - roll. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You're giving it the first motion &lt;em&gt;last&lt;/em&gt;, which means that it has to go &quot;back&quot; and update the pitch/yaw angles to correct for the fact that you didn't rotate &lt;em&gt;it&lt;/em&gt; the way it wants to report the angles to you. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Try doing a roll &lt;em&gt;first&lt;/em&gt;, followed by a pitch then a yaw and see if your angles hold steady with that order of rotations. Check your datasheet for specifics, but I think most systems are setup for roll/pitch/yaw (rpy) order.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-12-12T19:32:37.827" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="11210" PostTypeId="2" ParentId="10788" CreationDate="2016-12-12T20:26:10.617" Score="0" Body="&lt;p&gt;On their own, the resolution of the wheel encoders is pretty good.  With a wheel diameter of 72 mm, and 508.8 counts per revolution, there is about 0.44 mm per count.  And the angular resolution is also good.  Turning in place with 1 encoder count yields 0.00378 radians (0.217 degrees).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, for motions like going forward 10 m, the robot can only perform open-loop control.  Because there is no overarching ground-truth to close the loop.  (For example with a motion capture system like OptiTrack).  So the robot is at the mercy of environmental factors like carpet drift, differences in wheel diameter, differences in motor torque, wheel slippage, etc.  This, combined with low-cost electronics which limit the resolution of the velocity controller (about 28.5 mm/s per step), make it so the robot might not actually drive very straight.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I mentioned earlier, this is largely due to external conditions so iRobot makes no claims regarding the accuracy of the Create2.  It is up to you to test under your own conditions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S. All specs above are mentioned in the &lt;a href=&quot;http://www.irobotweb.com/~/media/MainSite/PDFs/About/STEM/Create/iRobot_Roomba_600_Open_Interface_Spec.pdf?la=en&quot; rel=&quot;nofollow noreferrer&quot;&gt;OI Spec&lt;/a&gt; document.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2016-12-12T20:26:10.617" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11214" PostTypeId="2" ParentId="11200" CreationDate="2016-12-13T23:26:17.790" Score="1" Body="&lt;p&gt;The &quot;Balance Bot&quot; robot you describe is widely known as the &quot;inverted pendulum on a cart&quot;. For static balancing (keeping the body upright), it is generally desired to have as much as possible time to recover from toppling. This implies that it is desired to have the natural toppling speed of the pendulum as low as possible, or equivalently, to have the toppling duration as long as possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you probably know, balancing a pencil on your finger is much harder than balancing a broom, which is due to the fact that the broom topples slower. It turns out that it topples slower because it is longer. This will also be true for your balancing robot. &lt;em&gt;The model that has the center of mass highest from the ground is the best candidate for balancing, which seems to be the second robot&lt;/em&gt; because the (heavy) battery pack is placed on top.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;What is then the relation between length and toppling speed?&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A measure that can be used to describe toppling speed is the time constant of toppling $\tau$. The higher this value, the longer the duration of toppling (i.e. toppling is slower), and thus the easier it is to balance. The time constant of toppling for a simple point mass inverted pendulum is $\tau=\sqrt{L/g}$ for small toppling angles, with $L$ the length of the pendulum (defined by the distance between the hinge and the center of mass) and $g$ the gravitational acceleration. For example, a robot with a center of mass that is 4 times higher will topple approximately 2 times slower. Or, if it is not feasible to make your robot sufficiently tall, you can always send it off to another planet with lower gravity...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for your second sub-question, programmability, I do not see how placing the microcontroller either vertically or horizontally should make a difference. It is furthermore up to you to pick the microcontroller of your choice when building your own machine.&lt;/p&gt;&#xA;" OwnerUserId="10547" LastActivityDate="2016-12-13T23:26:17.790" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11216" PostTypeId="1" CreationDate="2016-12-14T07:35:45.290" Score="1" ViewCount="182" Body="&lt;p&gt;I'm a beginner for quadcopter construction with PID controller and PIC 16F877 microcontroller. Now, I'm troubling with how do make the control process with mathematical model for my quadcopter :( and how to draw flow chart for this?&lt;/p&gt;&#xA;" OwnerUserId="15553" LastEditorUserId="37" LastEditDate="2016-12-14T11:00:14.920" LastActivityDate="2016-12-14T11:00:14.920" Title="How can i get the Laplace Transfer function for control process for quadcopter?" Tags="&lt;quadcopter&gt;&lt;control&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11217" PostTypeId="1" CreationDate="2016-12-14T10:29:58.280" Score="4" ViewCount="3321" Body="&lt;p&gt;Currently, I'm building a quadcopter using Arduino. To make the copter able to stabilize I use an mpu6050 accelerometer + gyroscope.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I understand that I can get the angle of rotation by integrating the values of the gyro. I understand too that I can calculate the angle using the amount of G working on the different axes of the accelerometer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But from the accelerometer I get values from around 1000 to 14000.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;What are these values?&lt;/li&gt;&#xA;&lt;li&gt;How can I get the angle from these values?&lt;/li&gt;&#xA;&lt;li&gt;How can I turn these values into motor rotation?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="15555" LastEditorUserId="158" LastEditDate="2016-12-14T16:41:05.270" LastActivityDate="2016-12-14T16:41:05.270" Title="How to interpret and use values of an accelerometer" Tags="&lt;accelerometer&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11218" PostTypeId="2" ParentId="11217" CreationDate="2016-12-14T14:41:31.063" Score="7" Body="&lt;p&gt;You should really &lt;a href=&quot;https://www.invensense.com/wp-content/uploads/2015/02/MPU-6000-Datasheet1.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;read the datasheet&lt;/a&gt; that &lt;a href=&quot;https://robotics.stackexchange.com/questions/11217/how-to-interpretet-and-use-values-of-an-accelerometer#comment20280_11217&quot;&gt;acs linked&lt;/a&gt; in a comment to your question. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The device you're using has a set of 16-bit analog to digital converters (ADCs) that convert the actual outputs of the gyroscopes and accelerometers to a digital format the microcontrollers can process. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The device outputs positive and negative accelerations and speeds, which means the output needs to be interpreted as a &lt;em&gt;signed&lt;/em&gt; 16-bit integer. That is, the raw (unsigned) 16-bit number would normally read from 0 to 65535, but it's &lt;em&gt;signed&lt;/em&gt; so you need to interpret the output as existing between -32768 to 32767.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you get the raw output put into the correct signed integer output, you need to &lt;em&gt;scale&lt;/em&gt; it to get the reading of the sensor. This depends on the &quot;full scale selection&quot; you make when you configure the device. On page 12 of the datasheet, you can see, for the gyroscope, the &quot;Sensitivity Scale Factor&quot; for each selection.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{array}{}&#xA;\mbox{PARAMETER}                &amp;amp; \mbox{CONDITIONS} &amp;amp; \mbox{TYP} &amp;amp; \mbox{UNITS} \\&#xA;\mbox{Sensitivity Scale Factor} &amp;amp; \mbox{FS_SEL=0}   &amp;amp; 131        &amp;amp; \mbox{LSB}\left(^\circ /s\right) \\&#xA;                                &amp;amp; \mbox{FS_SEL=1}   &amp;amp; 65.5       &amp;amp; \mbox{LSB}\left(^\circ /s\right) \\&#xA;                                &amp;amp; \mbox{FS_SEL=2}   &amp;amp; 32.8       &amp;amp; \mbox{LSB}\left(^\circ /s\right) \\&#xA;                                &amp;amp; \mbox{FS_SEL=3}   &amp;amp; 16.4       &amp;amp; \mbox{LSB}\left(^\circ /s\right)&#xA;\end{array}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you take your signed integer, divide by the value given for the scale factor (again, based on how you have the device configured), and get your reading. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you've got the maximum value, 32767, and you've got FS_SEL=2, then your sensor is reading (32767/32.8) = 998.99 $^\circ /s$, which is approximately the +1000 degrees per second limit for that FS_SEL setting. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The accelerometer scale settings are given on the next page (13), but generally speaking it works the same. The accelerometer reading is also a signed 16-bit output. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;As you correctly stated in your question, you need to numerically integrate the outputs to get to positions and angles. The accelerometer outputs an acceleration, so you need to integrate once to get speed and then again to get position. The gyroscope outputs angular velocities and thus needs to be integrated once to get to angular positions (angles). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Generically, numeric integration is done as follows:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\mbox{output}_k = \mbox{output}_{k-1} + \mbox{input}_k \Delta T \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The current value for the integrated term is the previous value plus the rate term multiplied by the sample interval. So, for example, current speed is previous speed plus acceleration multiplied by the sample interval. Angle is the previous angle plus angular speed multiplied by the sample interval. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;I'm not sure what your background is or how you got to work on this project, but getting from the output of an inertial measurement unit (IMU, a device that gives accelerometer and gyro readings) to a flight controller is quite a step. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are lots of questions here (and elsewhere) about quadrotor flight controllers. Generally speaking, most flight controllers operate on PID control loops. You provide, via control inputs, the desired angular positions, angular rates, linear speeds, etc., as the &quot;reference input.&quot; The controller subtracts the IMU feedback from the reference input to get a &quot;control error.&quot; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to go forward, and the vehicle is stationary, the control error is (+v - 0) = +v, which means the vehicle should move forward. You can modify the error terms by multiplying the errors by &quot;control gains.&quot; The gains scale the error terms. Bigger gains make the controller &quot;think&quot; there is more error and force a larger response.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A lot of tuning is trial and error; too little throttle and you don't get a response. &lt;a href=&quot;https://www.youtube.com/watch?v=jfuDx2hRLlQ&quot; rel=&quot;nofollow noreferrer&quot;&gt;Too much throttle and the system goes unstable&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most of what I've said about controls and controllers is hand waving; if you don't have controls experience then I'd recommend doing &lt;em&gt;just&lt;/em&gt; a controls project; if you don't have programming experience, I'd recommend doing &lt;em&gt;just&lt;/em&gt; a programming project, etc. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Trying to go from no experience to building your own quadrotor from scratch is a good way to get really discouraged fast. There are &lt;em&gt;so many&lt;/em&gt; things to try to manage that it's not a good way to build fundamental experience.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2016-12-14T14:41:31.063" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="11219" PostTypeId="2" ParentId="11202" CreationDate="2016-12-14T15:20:17.233" Score="2" Body="&lt;p&gt;This isn't my area of expertise, but it looks like your guess in your question is correct. From &lt;a href=&quot;http://www.roboticsproceedings.org/rss09/p31.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;the paper&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Let $F_{\mbox{targ}}$ denote the target pose of the gripper, and let $F_{\mbox{cur}}(\theta)$ be the current pose. Then $F^{-1}_{\mbox{targ}} F_{\mbox{cur}}(\theta)$ gives the pose error, measured in the frame of&#xA;  the target pose. This pose error can be represented as the six dimensional&#xA;  error vector $h(\theta) = (t_x, t_y, t_z, r_x, r_y, r_z)$ (26).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Earlier in the paper, it is stated, &quot;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Sequential convex optimization solves a non-convex optimization&#xA;  problem by repeatedly constructing a convex subproblem — an approximation to the problem around the current iterate x. The subproblem is used to generate a step&#xA;  ∆x that makes progress on the original problem.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;And, earlier still,&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Robotic motion planning problems can be formulated as non-convex optimization problems, i.e., minimize an objective subject to inequality and equality constraints:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;$$ &#xA;\begin{array}{ll}&#xA;\mbox{minimize } f(x) &amp;amp; (1) \\&#xA;\mbox{subject to}    &amp;amp; (2) \\&#xA;g_i(x) ≤ 0, i = 1, 2, . . . , n_{\mbox{ineq}} &amp;amp; (3) \\&#xA;h_i(x) = 0, i = 1, 2, . . . , n_{\mbox{eq}} &amp;amp; (4)&#xA;\end{array}&#xA;$$&#xA;  where $f$, $g_i$, $h_i$, are scalar functions.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;[...later...]&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The nonlinear constraints are incorporated into the problem as penalties, while the linear constraints are directly imposed in the convex subproblems.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So, in &lt;strong&gt;Algorithm 1&lt;/strong&gt;, line 15 gives where the $h(\theta)$ error vector is incorporated:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;x \leftarrow \mbox{arg min}\tilde{f}(x) + \mu \Sigma_{i=1}^{n_{\mbox{ineq}}} \left|\tilde{g}_i(x)\right|^+ + \mu \Sigma_{i=1}^{n_{\mbox{eq}}} \left|\tilde{h}_i(x)\right|&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wish there were more detail or a worked example; I don't see where &quot;TrueImprove&quot; or &quot;ModelImprove&quot; is given, I don't see how the initial convex approximations are calculated, etc. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-12-14T15:20:17.233" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11220" PostTypeId="2" ParentId="11202" CreationDate="2016-12-14T15:58:28.793" Score="0" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;are we linearizing the forward kinematics map to make it convex and&#xA;  add it in the penalty formulation?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No. The reason is that &quot;convex optimization&quot; is not the solution it is the problem description like &quot;minimize the function f(x) with constraints a,b and c&quot;. The same mistake made Emo Todorov in his paper &lt;a href=&quot;https://pdfs.semanticscholar.org/3e67/7b1fa07d66f539f8086046779190694327eb.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;A convex, smooth and invertible contact model for trajectory optimization&lt;/a&gt;. The trajectory optimization problem is described as logic calculus but that shows only that we have a np-hard problem which is not solvable on current hardware.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastEditorUserId="37" LastEditDate="2016-12-14T19:54:11.117" LastActivityDate="2016-12-14T19:54:11.117" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11222" PostTypeId="2" ParentId="11191" CreationDate="2016-12-14T22:40:44.797" Score="1" Body="&lt;p&gt;I had some trouble understanding your current setup, But generally you will have an interrupt pin connected to your IMU, and every time the IMU has new data, you process the Rate control loop then the Stabilize control loop, then update the motor output. You want the shortest possible time from the reading of the IMU data to the processing of the rate control loop to the output of the motor commands. Generally you can update the stabilize loop ~5 times slower than the rate loop to save time. I would shoot to run the rate loop as fast as you can update the motors (50Hz for pwm 400+Hz if your using Oneshot or Fast PWM), and to save time you can run the stabilized loop at 10-50Hz.&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2016-12-14T22:40:44.797" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11223" PostTypeId="2" ParentId="8094" CreationDate="2016-12-15T03:58:10.277" Score="2" Body="&lt;p&gt;A Linear–quadratic regulator (LQR) controller with an accurate state-space representation is implemented in Gajamohan's first and second paper. A high quality motor controller with torque-control is also necessary for the system to work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The learning algorithm is called gradient descent algorithm. It is used to find the local minimum, and is used to find the initial wheel velocities.  They mentioned in this robohub post[1] is to implement the learning algorithm, and is finally implemented by Mr. Muehlebach three years afterwards[2] in 2016.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[1] G. Mohanarajah and M. Waibel, &quot;Cubli – A cube that can jump up, balance, and walk across your desk&quot;, Robohub, 2013, &lt;a href=&quot;http://robohub.org/swiss-robots-cubli-a-cube-that-can-jump-up-balance-and-walk-across-your-desk/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://robohub.org/swiss-robots-cubli-a-cube-that-can-jump-up-balance-and-walk-across-your-desk/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[2] M. Muehlebach, and R. D'Andrea, &quot;Nonlinear Analysis and Control of a Reaction Wheel-Based 3-D Inverted Pendulum&quot;, in IEEE Transactions on Control Systems Technology, 2016.&lt;/p&gt;&#xA;" OwnerUserId="15561" LastEditorUserId="15561" LastEditDate="2017-01-07T09:07:16.787" LastActivityDate="2017-01-07T09:07:16.787" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11225" PostTypeId="2" ParentId="11191" CreationDate="2016-12-15T15:04:48.850" Score="0" Body="&lt;p&gt;A cascaded PID controller is normally used when multiple sensors are available. In a normal PID controlled system, you have the measurement from your sensor and your setpoint (both used to calculate your error), and your PID controller which acts to reduce the error through the P, I and D gains. A cascaded PID controller is a nested PID controller, meaning it consists of an inner PID loop which supposedly is faster and an outer PID loop. If applied correctly the faster inner PID loop controller can buffer the impact on the slower outer PID controller resulting in a smoother dynamic performace. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Normally in a quadcopter, the inner/faster loop is the rate loop. The rate loop regulates the angular velocity given a setpoint and the rate measurement usually from the gyroscope. The outer loop/slower loop is the stabilize loop which uses angle input setpoints and measurements from fusing the angles computed from the accelerometer and angles integrated from the gyroscope via sensor fusion (eg. kalman, complementary filter, etc.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mathematically, in this case a normal/traditional PID controller (PID) would be equivalent to a cascaded PID controller (P-PI). Where your Kp(traditional) is equivalent to Kp(stab), Ki(traditional) is equvalent to Kp(stab)*Ki(rate) and lastly your Kd(traditional) to Kp(stab)*Kp(rate). See Edouard Leurent's easy to understand explanation/comment here: &lt;a href=&quot;https://www.quora.com/What-is-rate-and-stabilize-PID-in-quadcopter-control&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.quora.com/What-is-rate-and-stabilize-PID-in-quadcopter-control&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm really sorry because I did not quite understand your question but I hope this helps :)&lt;/p&gt;&#xA;" OwnerUserId="11311" LastEditorUserId="11311" LastEditDate="2016-12-15T15:10:59.733" LastActivityDate="2016-12-15T15:10:59.733" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11228" PostTypeId="1" CreationDate="2016-12-15T23:43:03.090" Score="4" ViewCount="4541" Body="&lt;p&gt;I am doing a project on calibrating stereo ZED camera and  finding its accuracy and compare with the Manufacturer's accuracy of &lt;strong&gt;1% at 1m depth accuracy&lt;/strong&gt;.&#xA;For this purpose , the formula to calculate the depth accuracy  is&#xA;$dz = (z^2 * de) / (f * b)$&#xA;but how do we calculate $z$ , $de$ and $f$. Is is taken from matlab stereo-callibration app which gives 'Stereoparameter' ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$dz$ is the depth error in meters, $z$ is the depth in meters, $de$ is the disparity error in pixels, $f$ is the focal length of the camera in pixels and $b$ is the camera baseline in meters.&lt;/p&gt;&#xA;" OwnerUserId="15569" LastEditorUserId="7360" LastEditDate="2016-12-16T16:05:10.277" LastActivityDate="2018-08-10T15:56:33.820" Title="Depth accuracy of the stereo camera" Tags="&lt;computer-vision&gt;&lt;stereo-vision&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="11229" PostTypeId="1" AcceptedAnswerId="11844" CreationDate="2016-12-16T09:55:01.193" Score="2" ViewCount="470" Body="&lt;p&gt;I have been working on writing a code to control the iRobot Create movements (forward, backward, right, left and stop) from serial monitor and finally I got the correct code. I was trying to understand how to make stop moving when it face an obstacle but I couldn't get it. Also, I didn't know how to make move for a specific distance. Could anyone help me with this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is my code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &quot;Arduino.h&quot;&#xA;#include &quot;Morse.h&quot;&#xA;#include &amp;lt;SoftwareSerial.h&amp;gt;&#xA;#define rxPin 10&#xA;#define txPin 11&#xA;SoftwareSerial softSerial = SoftwareSerial(rxPin, txPin);&#xA;char inByte = 0; // incoming serial byte&#xA;&#xA;irobot::irobot(int pin)&#xA;{&#xA;  pinMode(pin, OUTPUT);&#xA;  _pin = pin;&#xA;}&#xA;&#xA;&#xA;void irobot::Begin()&#xA;{&#xA;   delay(2000); // Needed to let the robot initialize&#xA;// define pin modes for software tx, rx pins:&#xA; pinMode(rxPin, INPUT);&#xA; pinMode(txPin, OUTPUT);&#xA;// start the the SoftwareSerial port 19200 bps (robotís default)&#xA; softSerial.begin(19200);&#xA;// start hardware serial port&#xA;Serial.begin(19200);&#xA;softSerial.write(128); // This command starts the OI.&#xA;softSerial.write(131); // set mode to safe (see p.7 of OI manual)&#xA;delay(2000);&#xA;}&#xA;&#xA;void irobot::runIt()&#xA;{&#xA;    softSerial.write(142); // requests the OI to send a packet of&#xA;    // sensor data bytes&#xA;    softSerial.write(9); // request cliff sensor value specifically&#xA;    delay(250); // poll sensor 4 times a second&#xA;    if (Serial.available() &amp;gt; 0) {&#xA;        inByte = Serial.read();&#xA;        if(inByte == '8')&#xA;        {&#xA;            goForward();&#xA;        }&#xA;        if(inByte == '2'){&#xA;            goBackward();&#xA;        }&#xA;        if(inByte == '4')&#xA;            goLeft();&#xA;        if(inByte == '6')&#xA;            goRight();&#xA;        if(inByte == '5')&#xA;            stop();&#xA;    }&#xA;    Serial.println(inByte);&#xA;}&#xA;&#xA;&#xA;void irobot::goForward()&#xA;{&#xA;   // Drive op code&#xA;    softSerial.write(137);&#xA;    // Velocity (-500 ñ 500 mm/s)&#xA;    softSerial.write((byte)0);&#xA;    softSerial.write((byte)200);&#xA;    //Radius (-2000 - 2000 mm)&#xA;    softSerial.write((byte)128);&#xA;    softSerial.write((byte)0);&#xA;}&#xA;&#xA;&#xA;&#xA;void irobot::goBackward()&#xA;{&#xA;    // Drive op code&#xA;    softSerial.write(137);&#xA;    // Velocity (-500 ñ 500 mm/s)&#xA;    softSerial.write(255);&#xA;    softSerial.write(56);&#xA;    //Radius (-2000 - 2000 mm)&#xA;    softSerial.write((byte)128);&#xA;    softSerial.write((byte)0);&#xA;}&#xA;&#xA;&#xA;&#xA;void irobot::goLeft()&#xA;{&#xA;    // Drive op code&#xA;    softSerial.write(137);&#xA;    // Velocity (-500 ñ 500 mm/s)&#xA;    softSerial.write((byte)0);&#xA;    softSerial.write((byte)200);&#xA;    //Radius (-2000 - 2000 mm)&#xA;    softSerial.write((byte)0);&#xA;    softSerial.write((byte)1);&#xA;}&#xA;&#xA;&#xA;void irobot::goRight()&#xA;{&#xA;    // Drive op code&#xA;    softSerial.write(137);&#xA;    // Velocity (-500 ñ 500 mm/s)&#xA;    softSerial.write((byte)0);&#xA;    softSerial.write((byte)200);&#xA;    //Radius (-2000 - 2000 mm)&#xA;    softSerial.write((byte)255);&#xA;    softSerial.write((byte)255);&#xA;}&#xA;&#xA;void irobot::stop()&#xA;{&#xA;    softSerial.write(137);&#xA;    softSerial.write((byte)0);&#xA;    softSerial.write((byte)0);&#xA;    //Radius (-2000 - 2000 mm)&#xA;    softSerial.write((byte)0);&#xA;    softSerial.write((byte)0);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="15305" LastEditorUserId="37" LastEditDate="2017-03-13T12:07:20.637" LastActivityDate="2018-04-08T14:08:18.820" Title="iRobot Create2+Arduino: Make the robot stop when facing an obstacle" Tags="&lt;arduino&gt;&lt;irobot-create&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11232" PostTypeId="2" ParentId="11228" CreationDate="2016-12-17T13:56:45.160" Score="1" Body="&lt;p&gt;You have to &quot;estimate&quot; your disparity error somehow (depending you the stereo matching algorithm used etc.) and you should be set. f and b are camera constants and z is the depth in which you make the measurement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can also see my answer on a related question: &lt;a href=&quot;https://robotics.stackexchange.com/a/9714/1021&quot;&gt;How can I improve ZED Camera precision?&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="1021" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2016-12-17T13:56:45.160" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11233" PostTypeId="1" AcceptedAnswerId="11239" CreationDate="2016-12-17T15:01:06.123" Score="4" ViewCount="267" Body="&lt;p&gt;In my course of &quot;Advanced Robotics&quot; with &quot;Fundamental of Robotic Mechanical Systems&quot; as the reference book I saw the following equation as the velocity relation for parallel manipulators such as the one depicted on the pic. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\mathbf{J}\mathbf{\dot{\theta}}=\mathbf{K}\mathbf{t}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\mathbf{\dot{\theta}}$ is the joint rate vector and $\mathbf{t}$ is the twist.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/6RZcn.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6RZcn.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $\theta_{J1}$ for $1\leq J\leq 3$ is the actuator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was indicated there that usually the matrix $\mathbf{J}$ is a diagonal matrix referring to the borders of the work space. But the proof for this velocity relation was just given case by case. In another word there was no general proof of this equation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So here are my questions&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Is there a way to derive a general velocity formula for parallel manipulators ? (a formula that would show the relation between joint rates and twists). &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Are there cases in which $\mathbf{J}$ is not a diagonal matrix ?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="15163" LastEditorUserId="15163" LastEditDate="2020-03-09T08:02:22.507" LastActivityDate="2020-03-09T08:02:22.507" Title="Velocity Relation for Parallel Robots" Tags="&lt;kinematics&gt;&lt;forward-kinematics&gt;&lt;jacobian&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11234" PostTypeId="1" CreationDate="2016-12-17T18:42:32.037" Score="0" ViewCount="852" Body="&lt;p&gt;I'm doing inverse kinematics for 4 dof robot using robotics toolbox matlab. The code is given below:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    preach = [0.326 0.223 0.342]; % reach point of end-effector&#xA;% create links using D-H parameters&#xA;% Link('d', 0.15005, 'a', 0.0203, 'alpha', -pi/2)&#xA;L(1) = Link([0  0     0.15   pi/2    0], 'standard');&#xA;L(2) = Link([0  0     0.15   0       0], 'standard');&#xA;L(3) = Link([0  0     0.15   0       0], 'standard');&#xA;L(4) = Link([0  0     0.15   0       0], 'standard');&#xA;  % set limits for joints&#xA; L(1).qlim=[deg2rad(-160) deg2rad(160)];&#xA; L(2).qlim=[deg2rad(-45) deg2rad(45)];&#xA; L(3).qlim=[deg2rad(-60) deg2rad(60)];&#xA; L(4).qlim=[deg2rad(-50) deg2rad(50)];&#xA; %build the robot model&#xA;rob = SerialLink(L, 'name','rob');&#xA;qready = [0 0 0 0]; % initial position of robot&#xA;plot(rob,qready,'noname');&#xA;T1= transl(preach); % convert of reach point of 4x4 homogenous matrix&#xA;[qreach,err] =  rob.ikcon(T1, qready); % find inverse kinematics with error&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Matlab shows results like this(using robotics toolbox ):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    &amp;gt;&amp;gt; [qreach,err] =  rob.ikcon(T1, qready)&#xA;qreach =&#xA;    2.7925    0.7854    1.0472    0.8727&#xA;err =&#xA;    9.6055&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I'm not taking preach = [0.326 0.223 0.342]; randomly. Infact, first I do forward kinemtics to get these points. code is below:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    % to find forward kinemtics&#xA;qreadyrr = [0.6 0.45 0.63 0.22]; % setting the four angles randomly within range to get preach&#xA;T0 = fkine(rob, qreadyrr);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;then, I got T0 as&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;     &amp;gt;&amp;gt; T0&#xA;T0 =&#xA;    0.2208   -0.7953    0.5646    0.3267&#xA;    0.1510   -0.5441   -0.8253    0.2235&#xA;    0.9636    0.2675    0.0000    0.3421&#xA;         0         0         0    1.0000&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Also, when I put this T0 in place of T1 in inverse kinematics code as given above, the values I got is very accurate with negligible error.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    &amp;gt;&amp;gt; [qreach,err] =  rob.ikcon(T0, qready)&#xA;qreach =&#xA;    0.6002    0.4502    0.6296    0.2204&#xA;err =&#xA;   4.6153e-07&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The point is, in my case, I have only px, py and pz values for transformation matrix but with this, inverse kinematics is not solving it correctly. I want to do inverse kinematics px, py and pz values. how can I do it correctly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="14024" LastEditorUserId="-1" LastEditDate="2019-08-04T19:02:14.107" LastActivityDate="2019-08-04T19:02:14.107" Title="Inverse kinematics showing incorrect results for 4 dof robot in MATLAB using Robotics Toolbox" Tags="&lt;robotic-arm&gt;&lt;inverse-kinematics&gt;&lt;matlab&gt;&lt;forward-kinematics&gt;&lt;robotics-toolbox&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11235" PostTypeId="1" CreationDate="2016-12-18T08:27:55.447" Score="0" ViewCount="84" Body="&lt;p&gt;I saw this &lt;a href=&quot;https://www.instagram.com/p/BOEpUnQjgnb/&quot; rel=&quot;nofollow noreferrer&quot;&gt;link&lt;/a&gt; today. This robot seems real, but redditors on a reddit &lt;a href=&quot;https://www.reddit.com/r/robotics/comments/5iwpj6/a_large_bipedal_robot/&quot; rel=&quot;nofollow noreferrer&quot;&gt;thread&lt;/a&gt; argued that it might be CGI. It doesn't seem unfeasible to make such as robot IMO. There isn't anything out of the norm from the video except the size. Plus, there exist Kurata and Megabot, though they don't make bipedal robot, the scale is similar. From roboticist's point view, is this robot real? What are the technological limitation preventing such a robot being developed if it's fake? &lt;/p&gt;&#xA;" OwnerUserId="9972" LastActivityDate="2016-12-18T18:19:07.330" Title="Is this large bipedal robot real or realizable?" Tags="&lt;design&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11236" PostTypeId="2" ParentId="11234" CreationDate="2016-12-18T13:42:32.060" Score="1" Body="&lt;p&gt;The &lt;code&gt;T0&lt;/code&gt; matrix in your code has an orientation component which (since it comes from the forward kinematics) is a reachable orientation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;T1&lt;/code&gt; matrix in your code has been created with the command: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;T1= transl(preach);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It most probably look like this&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;T1 =&#xA;1.0000   0.0000    0.0000    0.3267&#xA;0.0000   1.0000    0.0000    0.2235&#xA;0.0000   0.0000    1.0000    0.3421&#xA;     0         0        0    1.0000&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This specifies that the orientation of the end-effector is &lt;code&gt;[0, 0, 0]&lt;/code&gt;. This orientation might not be possible to reach in the position you have specified.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2016-12-18T13:42:32.060" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="11238" PostTypeId="2" ParentId="11235" CreationDate="2016-12-18T18:19:07.330" Score="2" Body="&lt;p&gt;On the video is a 4 meter tall mecha robot which makes heavy noise while walking forward. To determine if this is a real robot or fake, the first step is to enter the name of creator Vitaly Bulgarov into a search engine like Linkedln to find more about him. Linkedln says that Bulgarov works for the gaming-industry and is an artist. So it is normal, that Google Scholar and ResearchGate has no papers from him. From a academic point of view, he doesn't exists. If this is a real robot, it wasn't created by any universities worldwide. From the technical point of view this kind of mechanic is possible. The most advanced university driven project is until now is &quot;SRI DURUS&quot;.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2016-12-18T18:19:07.330" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11239" PostTypeId="2" ParentId="11233" CreationDate="2016-12-18T20:48:56.673" Score="4" Body="&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;If you can write the forward kinematics equations of a parallel robot in an explicit form, you can derivate those equations and you get the formula for the velocities. This is  generally valid approach for &lt;em&gt;all&lt;/em&gt; robots, but the formulae obtained are only valid for the specific structure. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If the jacobi matrix is diagonal it means that the motions of the robot are decoupled. i.e. if only one joint moves, only one component of the 6 (or 3 the planar case) velocities of the end effector will change. The ISOGlide type parallel structures have a diagonal jacobi matrix, as published &lt;a href=&quot;https://www.researchgate.net/publication/226125804_Theoretical_and_Experimental_Research_on_the_Dynamics_of_a_4DOF_Isoglide_4-T3R1_Parallel_Robot&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. Portal or Cartesian type structures, like &lt;a href=&quot;http://machinedesign.com/site-files/machinedesign.com/files/uploads/2013/09/121213-6-Cartesian-robot-supports.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt;,  also have a diagonal jacobi matrix. &lt;a href=&quot;https://en.wikipedia.org/wiki/Delta_robot&quot; rel=&quot;nofollow noreferrer&quot;&gt;Delta robots&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/Stewart_platform&quot; rel=&quot;nofollow noreferrer&quot;&gt;Stewart platfroms&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/SCARA&quot; rel=&quot;nofollow noreferrer&quot;&gt;Scara robots&lt;/a&gt; and 6 axis &lt;a href=&quot;https://en.wikipedia.org/wiki/Programmable_Universal_Machine_for_Assembly&quot; rel=&quot;nofollow noreferrer&quot;&gt;puma robots&lt;/a&gt; do not have a diagonal jacobi matrix. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;(By looking at the schematic you attached, and not doing the math, I am not convinced that the robot you described has a diagonal jacobi matrix)&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2016-12-18T20:48:56.673" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="11240" PostTypeId="1" AcceptedAnswerId="11241" CreationDate="2016-12-18T23:02:03.043" Score="2" ViewCount="194" Body="&lt;p&gt;Let the forward kinematics map be denoted by $\mathcal{F}$ such that&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\mathcal{F}: \theta \in \mathbb{R}^{n} \rightarrow g \in SE3$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let the minimal representation of $g$ be given by $x \in \mathbb{R}^{6}$ using axis-angle or other forms of attitude parametrization. If we differentiate the forward kinematics map, we get&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\dot{x} = J_{a}\dot{\theta}$, where $J_{a}$ is the analytical Jacobian. This equation is commonly used in numerical inverse kinematics. However, can we do the reverse?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$x(t_{f})-x(t_0) = \int^{t_{f}}_{t_{0}}J_{a}\dot{\theta}dt$&lt;/p&gt;&#xA;" OwnerUserId="15491" LastActivityDate="2016-12-19T14:24:04.937" Title="Integrating Forward Kinematics Map" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;forward-kinematics&gt;&lt;jacobian&gt;&lt;manipulator&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11241" PostTypeId="2" ParentId="11240" CreationDate="2016-12-18T23:23:48.400" Score="4" Body="&lt;p&gt;(EDITED TO CLARIFY PARENTHETICAL ABOUT CARTESIAN MANIPULATORS)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your equation is true in general only for those manipulators in which $J_a$ is independent of $\theta$ (such as with Cartesian manipulators).  Otherwise, the expression is only true in the small (the region of $\theta$ close to $\theta_{t=0}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The equation is not true in general because elements of $J_a$ often contain functions of $\theta$.  I suppose if you &lt;em&gt;could&lt;/em&gt; integrate the expression it would be true, but that just gets you back to  your original kinematics function.  The Jacobian represents a linearization of the kinematic mapping.  It is only a first-order approximation, so the expression does not hold globally. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;(EDIT BASED ON OP COMMENT)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you do want to numerically integrate using your equation, you would need to modify (update) $J_a$ at each iteration based on the new values of $\theta$.  This would then be similar to the algorithm for velocity control, although I believe your timestep would be finer.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastEditorUserId="11125" LastEditDate="2016-12-19T14:24:04.937" LastActivityDate="2016-12-19T14:24:04.937" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="11244" PostTypeId="1" AcceptedAnswerId="11246" CreationDate="2016-12-19T12:34:10.580" Score="1" ViewCount="1016" Body="&lt;p&gt;I'm using simulink support package for arduino to read serial data from port2 in Arduino due. My plan is to read signed integers (-415 for example) representing motor speed and feed it to the pid controllers as in the image.&lt;a href=&quot;https://i.stack.imgur.com/QDlA1.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QDlA1.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;from the far end i'm sending delimited data in the following shape . The matlab function in sumlink is supposed to read the received ASCII characters and add them to a variable until it reaches the end character '&gt;'. I'm using the following simple code just to give the output on both the Right and Left to check if I'm receiving the correct data, However I'm not. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    function [Right ,Left] = fcn(data,status)&#xA;&#xA;&#xA;SON = '&amp;lt;';&#xA;EON = '&amp;gt;';&#xA;&#xA; persistent receivedNumber;&#xA; receivedNumber = 0;&#xA;&#xA; persistent negative;&#xA; negative = false;&#xA;&#xA;&#xA; if(status ==1)&#xA;&#xA;    switch(data)&#xA;&#xA;    case EON&#xA;        if (negative)&#xA;            receivedNumber = -1*receivedNumber;&#xA;&#xA;&#xA;        else&#xA;            receivedNumber = 1*receivedNumber;&#xA;        end&#xA;&#xA;&#xA;    case SON&#xA;        receivedNumber = 0;&#xA;        negative = false;&#xA;&#xA;&#xA;    case {'0','1','2','3','4','5','6','7','8','9'}&#xA;        receivedNumber = 10*receivedNumber;&#xA;        receivedNumber = receivedNumber + double((data - 48));&#xA;&#xA;&#xA;    case '-'&#xA;        negative = true;  &#xA;&#xA;&#xA;&#xA;    end       &#xA;&#xA; end&#xA;&#xA;    Right = receivedNumber;&#xA;    Left = receivedNumber;&#xA;&#xA;&#xA;&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Can anybody tells if there are any other approaches to read multiple signed digits in simulink? Taking into consideration that I have to use the support package for Arduino since my pid controllers are already configured in Simulink and interfaced with port2 in Arduino (which will be connected to BeagleBone black)    &lt;/p&gt;&#xA;" OwnerUserId="2525" LastActivityDate="2016-12-20T16:46:27.180" Title="Reading multiple signed digits from serial port" Tags="&lt;arduino&gt;&lt;matlab&gt;&lt;serial&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11246" PostTypeId="2" ParentId="11244" CreationDate="2016-12-19T16:06:49.997" Score="3" Body="&lt;p&gt;It looks like you're doing this in a very round-about manner. You said, &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The matlab function in sumlink is supposed to read the received ASCII characters and add them to a variable until it reaches the end character '&gt;'.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It looks like you are thinking the &quot;signed numbers&quot; are coming in as a string that you'll read one digit at a time, where the entire string is delimited by a start and stop &lt;a href=&quot;https://en.wikipedia.org/wiki/Magic_number_(programming)&quot; rel=&quot;nofollow noreferrer&quot;&gt;magic number&lt;/a&gt; (the '&amp;lt;' and '&gt;' symbols).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A couple of things I would point out:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;First and foremost, typically a signed integer is just sent as a byte or (more typically) a series of bytes. For example, a 16-bit signed integer (short signed integer) is composed of two 8-bit bytes. To convert to the signed 16-bit integer, just use the Matlab function &lt;a href=&quot;https://www.mathworks.com/help/matlab/ref/int16.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;int16&lt;/a&gt;. You're doing it the especially long and painful way of sending a string, with delimiters, then reading that string in one digit at a time, converting the characters to numbers, then multiplying the current number by 10 every time you want to concatenate a new digit. &lt;/li&gt;&#xA;&lt;li&gt;Probably where you're running into more trouble code-wise is that you're not using the Matlab &lt;code&gt;persistent&lt;/code&gt; function correctly. &lt;a href=&quot;https://www.mathworks.com/help/matlab/ref/persistent.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;From the documentation&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If the persistent variable does not exist the first time you issue the persistent statement, &lt;strong&gt;it is initialized to the empty matrix.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This is the check you should be making. If the variable you want to be persistent is empty, then initialize it to zero. &lt;strong&gt;You are currently declaring it persistent and then immediately setting it to zero every function call!&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your code is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;persistent receivedNumber;&#xA;receivedNumber = 0;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;when it &lt;strong&gt;should&lt;/strong&gt; be:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;persistent receivedNumber;&#xA;if isempty(receivedNumber)&#xA;    receivedNumber = 0;&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This way, &lt;code&gt;receivedNumber&lt;/code&gt; only gets set to zero IF IT IS EMPTY (meaning it was just created). In all other cases it should be retaining the value it had and thus would be NOT empty. For the record, you need to do the same thing for &lt;code&gt;negative&lt;/code&gt;; they're both being implemented incorrectly. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, about your other question,&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Can anybody tells if there are any other approaches to read multiple signed digits in simulink?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, there are a couple things you could do. First, you could just concatenate the string and convert to double when you're done. That would look something like the following:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;if(status ==1)&#xA;    switch(data)&#xA;        case EON&#xA;            output = str2double(receivedNumber);&#xA;        case SON&#xA;            receivedNumber = char;&#xA;        otherwise&#xA;            receivedNumber(end+1) = data;&#xA;    end&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This code creates &lt;code&gt;output&lt;/code&gt; by converting the running &lt;code&gt;receivedNumber&lt;/code&gt; to a 'double' format when you hit the end of number delimiter. On receiving the start of number delimiter, output is reinitialized to an empty character array. Any other input appends whatever the current character is to the string.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In going through the code looking for your output variable, I noticed that you have &lt;code&gt;Left&lt;/code&gt; and &lt;code&gt;Right&lt;/code&gt;, which output your current &lt;code&gt;receivedNumber&lt;/code&gt;. I'd point out that, generally speaking, &lt;code&gt;receivedNumber&lt;/code&gt; is an intermediate result. I would create a persistent variable called &lt;code&gt;output&lt;/code&gt; instead, assign &lt;code&gt;Left&lt;/code&gt; and &lt;code&gt;Right&lt;/code&gt; to the output, and then only update &lt;code&gt;output&lt;/code&gt; when you have a full number to report. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could further &quot;bulletproof&quot; the function by checking that the output of the &lt;code&gt;str2double&lt;/code&gt; command is, in fact, a number, and that you didn't pick up a mis-transmitted byte somewhere along the way that would look something like &lt;code&gt;-1Q65&lt;/code&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Right now you don't have any error checking in your inputs; if you get a mis-transmitted byte that is not a valid digit then you just skip handling it &lt;em&gt;and then treat the next valid digit as correct&lt;/em&gt;. This is probably not what you should be doing; if, for example, you should have gotten &lt;code&gt;-1065&lt;/code&gt; and got &lt;code&gt;-1Q65&lt;/code&gt; instead, your code would output:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;0;&#xA;1;&#xA;1;&#xA;16;&#xA;165;&#xA;-165;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The first zero is the output when you get '&amp;lt;', then you output 1 when you receive it, then you output 1 again because you don't handle &lt;code&gt;Q&lt;/code&gt;, then you output 16, then 165, then you apply the negative sign when you hit the end delimiter &lt;code&gt;&amp;gt;&lt;/code&gt;. The way I would suggest doing it instead would be:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;persistent output;&#xA;persistent receivedNumber;&#xA;if isempty(output)&#xA;    output = 0;&#xA;    receivedNumber = char;&#xA;end&#xA;if status == 1&#xA;    switch(data)&#xA;        case '&amp;lt;'&#xA;            receivedNumber = char;&#xA;        case '&amp;gt;'&#xA;            tempResult = str2double(receivedNumber);&#xA;            if ~isnan(tempResult)&#xA;                output = tempResult;&#xA;            end&#xA;        otherwise&#xA;            receivedNumber(end+1) = data;&#xA;    end&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Now your output is all zeros until the number is done being parsed, then it's the output number. The &lt;em&gt;more important thing&lt;/em&gt; here is that, when you start receiving the next number, &lt;em&gt;the output continues to be the previous number&lt;/em&gt; until the current number is done being parsed. If there is a misformed byte somewhere, the &lt;code&gt;str2double&lt;/code&gt; conversion will output a &lt;code&gt;NaN&lt;/code&gt; (Not A Number), and the &lt;code&gt;~isnan()&lt;/code&gt; (not isnan; Matlab uses &lt;code&gt;~&lt;/code&gt; instead of &lt;code&gt;!&lt;/code&gt;) check catches the mis-created number and the result is discarded. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider your previous code getting &lt;code&gt;-1065&lt;/code&gt;, &lt;code&gt;-1Q65&lt;/code&gt;, and then &lt;code&gt;-1064&lt;/code&gt;. There's almost no difference there, so I wouldn't expect much response from your PID controller, but the way you're handling your feedback will give you nothing but headaches. You would get:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;0;&#xA;1;&#xA;10;&#xA;106;&#xA;1065;&#xA;-1065;&#xA;0;&#xA;1;&#xA;1;&#xA;16;&#xA;165;&#xA;-165;&#xA;0;&#xA;1;&#xA;10;&#xA;106;&#xA;1064;&#xA;-1064;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;There are 18 numbers there, only three of them have the correct sign, and only two of them are actually correct. Granted you were given a faulty input, but &lt;em&gt;what should your system do in that circumstance&lt;/em&gt;? Error out, discard the input, or pass the faulty input as truth?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Whatever your decision on how an error should be handled, &lt;em&gt;for control purposes&lt;/em&gt;, you should only be releasing complete and valid data.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;:EDIT:&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I just re-read my answer, and thought I'd reiterate that the persistent function isn't being used correctly. All of my examples of what your output would be are assuming you fix that. Otherwise, you code would output only whatever the current digit is.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2016-12-20T16:46:27.180" LastActivityDate="2016-12-20T16:46:27.180" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="11249" PostTypeId="2" ParentId="7178" CreationDate="2016-12-19T21:43:45.000" Score="2" Body="&lt;p&gt;Disclaimer:&#xA;This answer is somehow a reaction to the Shahbaz' post, so it has a pro-ROS bias. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do not think that ROS is mandatory, but it is a great starting point and worth the time to invest. It started within Willow Garage, but this company vanished and&#xA;ROS is still alive, used and developed. Most of ROS is fully open source and also&#xA;commercially usable so there is no way that ROS is just going to vanish if a company is no longer interested in it. &#xA;The code quality of course differs between the core modules and implementations of cutting edge algorithms that some phd student published with his paper. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;ROS is picking up more and more speed in industrial settings (I'd be surprised if there is a significant portion of robotics startup worldwide that do not use ROS). &#xA;Some algorithms are going to be further maintained and developed by the ros-industrial consortium and if you have a look at the members, it's a good bet that ROS is going to become a standard in the industry:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://ROS%20industrial%20consortium&quot;&gt;http://rosindustrial.org/ric/current-members/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The distributed way of using ROS helps a lot to create and maintain new packages, especially within teams. The message and action definitions help a lot in defining interfaces so that hardware and algorithms can be exchanged quickly. It also helps to integrate new team members as a new node will node bring down other nodes if it crashes (as long as it does not eat all the RAM..) so it's rather safe to integrate partially working nodes into the running system as their effect is limited. The communication uses TCP which is reliable and fast (on a local machine), so that message passing is very quick (several hundred Hz for a control loop is possible). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Non-Real-Time&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ROS is currently not realtime as the vast majority of algorithms have no need for realtime. Sensing or planning does not have realtime constraints in most cases (how many people are building self driving high speed cars?). It's enough if the final control loop runs in realtime and this can in many cases be done directly on the motor (to which the final position is send e.g. via CAN). Real Time however is one of the core goals of ROS2 (&lt;a href=&quot;https://github.com/ros2/ros2/wiki/Real-Time-Programming&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/ros2/ros2/wiki/Real-Time-Programming&lt;/a&gt;) so even if you need this in the future for the whole system, ROS has you covered. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you really want to run stuff embedded, there is of course a connection to arduino, so that you can write ROS messages directly on the arduino which then are send via serial connection. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Running ROS on Windows is currently rather a pain, but as Windows is moving closer to Linux (even starting to have something bash-like), it's only a matter of time until it's possible. (But who wants to run a robot with windows anyway?)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hardware Interfaces and Algorithms:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think this really is a strong point for ROS. A lot of commercially available robots already come with a ROS interface or someone already invested some time to implement the interface. Most commercial arms can be used in MoveIt so much of the work to get an application to run with a specific arm can be reused with another hardware. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Community:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another strong point for ROS. New algorithms get a ROS-interface very quickly and a lot of people had the same problems as you so you will find someone to help you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://ROS%20metrics&quot;&gt;http://download.ros.org/downloads/metrics/metrics-report-2016-07.pdf&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="23196" LastActivityDate="2016-12-19T21:43:45.000" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11251" PostTypeId="1" CreationDate="2016-12-20T18:28:39.350" Score="1" ViewCount="4026" Body="&lt;p&gt;Rewriting this whole question as I've learned a lot more since I first tried to ask.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm building a tiny bot and looking to use two motorized wheels for movement, but only one motor. I'll have a 3rd wheel (caster) for balance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My goal is to have the wheels move opposite to each other when the motor turns and each wheel reverse direction when the motor reverses direction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The tricky part is I want the ratio to be uneven between the wheels. By this, I mean when one wheel rotates clockwise, it should rotate faster than the other wheel rotating counter-clockwise. This needs to hold true regardless of which wheel is rotating which way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The end result should be that I could run the motor in one direction continuously to have my bot drive in a small circle. If I switch motor directions, it would drive in the same size circle the opposite direction. If I alternate motor directions frequently enough, the bot should move in a fairly straight line (or if I alternate the motor too infrequently, an S like pattern).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The closest I can envision so far (thanks to those that have responded here) is to use bevel/miter gears to have my wheels rotate opposite to each other and then to use two differently sized ratcheting mechanisms per wheel working in opposite directions. This would allow each ratcheting mechanism to trigger only in one direction and the RPM per direction would be related to the size of that direction's ratcheting mechanism.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this the best way to achieve my goal? Is there a name for this concept or is it so uncommon I'll have to build/fabricate it all myself? As far as a ratcheting mechanism, I believe I'd be looking to use a freewheel clutch or I'd need an oscillating lever carrying a driving pawl over top a ratchet gear. My biggest struggle in finding affordable parts is the ratcheting mechanism.&lt;/p&gt;&#xA;" OwnerUserId="15603" LastEditorUserId="15603" LastEditDate="2016-12-21T15:15:50.147" LastActivityDate="2017-02-19T16:20:28.310" Title="One motor, two wheels (motor direction rotates one wheel forward, reverse for other wheel)?" Tags="&lt;motor&gt;&lt;gearing&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11252" PostTypeId="2" ParentId="11251" CreationDate="2016-12-20T20:44:41.717" Score="1" Body="&lt;p&gt;Are you talking about a bevel gear? &lt;a href=&quot;https://www.youtube.com/watch?v=qx_kYB4jwhY&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here's a video&lt;/a&gt; - the gold gear would be connected to the motor and the blue gears would be connected to your wheels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both wheels are always powered - one is powered in forward and the other is powered in reverse. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You're not clear on the purpose of this device, so I don't know if this fits your needs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A &lt;a href=&quot;https://www.youtube.com/watch?v=K4JhruinbWc&amp;amp;t=3m15s&quot; rel=&quot;nofollow noreferrer&quot;&gt;differential&lt;/a&gt; allows the wheels to rotate at different speeds, but they generally still rotate in the same direction. You could use a brake band or something similar to lock an output axle and force all of the drive power to be delivered to the other wheel, but then one wheel is &lt;em&gt;locked&lt;/em&gt; and not able to turn freely.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hopefully this helps, but again I'm not clear on what you want to do. Generally it's best to provide your end application if you're looking for help on naming a particular mechanism.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2016-12-20T20:44:41.717" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="11253" PostTypeId="2" ParentId="11251" CreationDate="2016-12-20T21:38:13.820" Score="0" Body="&lt;p&gt;Do you want the non-engaged wheel to be locked in place while the other wheel is rotating?  If so, I cannot think of any transmission that will do this easily without getting rather complicated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you can accept the non-engaged wheel being free to rotate (as if in neutral), then you may be able to take advantage of a clever arrangement of simple mechanisms to do the job.  The two that come to mind are both described at Carnegie-Mellon's &lt;a href=&quot;https://www.cs.cmu.edu/~rapidproto/mechanisms/chpt8.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Introduction to Mechanisms course&lt;/a&gt;.  You could place a ratchet that engages in one direction to drive the ratchet wheel attached to one wheel's axle, and does not engage when it is rotated the other direction.  Then do the reverse ratchet design for the other wheel.  You could also use two opposite-direction engaging overdriven clutches to accomplish the same purpose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both of these implementations will have considerable backlash, and the non-driven wheel will be uncontrolled.  It is not clear if that is acceptable to your application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do not know of any common term for such a device, but it sounds like fun to develop!&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2016-12-20T21:38:13.820" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="11254" PostTypeId="2" ParentId="9677" CreationDate="2016-12-21T00:16:58.270" Score="0" Body="&lt;p&gt;I'd recommend putting a layer between your internal DH-model and the manufacturers axis conventions. (The differ for different manufacturers, so your IK will not be reusable otherwise. Zero positions varies as well.) KUKA likely does something similar given that you find stuff like this in &lt;code&gt;$machine.dat&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;&#xA;$AXIS_DIR[1]=-1&#xA;$AXIS_DIR[2]=1&#xA;$AXIS_DIR[3]=1&#xA;$AXIS_DIR[4]=-1&#xA;$AXIS_DIR[5]=-1&#xA;$AXIS_DIR[6]=-1&#xA;&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding the &quot;reverse engineering&quot; mentioned in the other answer: The file mentioned above contains lots of kinematic parameters as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: Just noticed the post date. Why did this show up in my sidebar?&lt;/p&gt;&#xA;" OwnerUserId="3871" LastEditorUserId="3871" LastEditDate="2016-12-21T00:29:05.283" LastActivityDate="2016-12-21T00:29:05.283" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11255" PostTypeId="2" ParentId="11251" CreationDate="2016-12-21T00:53:52.810" Score="1" Body="&lt;hr&gt;&#xA;&#xA;&lt;p&gt;A freewheel clutch attached to each wheel will do what you want.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When turned in one direction the clutch will transmit power to the wheel but in the opposite direction it will free spin.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This way when the motor is turned in one direction one wheel will turn and in the other direction the other wheel will turn in the same direction as the first.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The catch is you will have no ability to reverse.&lt;/p&gt;&#xA;" OwnerUserId="15607" LastActivityDate="2016-12-21T00:53:52.810" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11256" PostTypeId="1" CreationDate="2016-12-21T01:36:25.333" Score="0" ViewCount="59" Body="&lt;p&gt;If I can constrain two robots to a hypothetical box, what sensors or common formal methods exist that would enable the two robots to meet? I am specifically interested in the communication of relative position between robots.&lt;/p&gt;&#xA;" OwnerUserId="15609" LastActivityDate="2016-12-21T02:40:47.180" Title="Sensors, Methods for Finding Other Robots" Tags="&lt;communication&gt;&lt;swarm&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11257" PostTypeId="2" ParentId="11256" CreationDate="2016-12-21T01:42:28.403" Score="0" Body="&lt;p&gt;Found a great platform just by Googling &quot;communication between robots&quot; called Jasmine. By &quot;great&quot;, I mean well documented. I am reading through their &lt;a href=&quot;http://www.swarmrobot.org/Communication.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Communication&lt;/a&gt; documentation, now. It starts out (in the very first paragraph) by saying: &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Communication works different in most robotic swarms, depending mostly&#xA;  on factors like the environment, the size of the robots, the budget of&#xA;  the project and on the limitations set by creators or other instances.&#xA;  The larger the robots are, the more possibilities are there for&#xA;  building up a properly working communication between the robots. Some&#xA;  ways of communication are bluetooth, wireless LAN, communication via&#xA;  the environment(stigmergy) or like in the case of Jasmine via infrared&#xA;  LEDs.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="15609" LastActivityDate="2016-12-21T01:42:28.403" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11258" PostTypeId="2" ParentId="11256" CreationDate="2016-12-21T02:40:47.180" Score="1" Body="&lt;p&gt;I would recommend using the XBee protocol to develop a point to point communication unit. What you need is an xbee adapter - which contains both a transmitter and a receiver. You can transmit data serially between the two robots which allows you to send the position of each robot. The implementation details (error checking, parity codes, parsing) are abstracted away from you when using the Xbee and you can set up an xbee connection between two robots like a serial connection. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are focussing on getting two robots to meet, you can transmit their position with respect to a fixed coordinate frame in the box using two Xbees and then calculating the relative position of one robot from the other robot and control their heading to intersect each other's center of mass. This way you are guaranteed that the two robots will move towards each other. This is not an optimal way to get to robots to move towards each other in the presence of obstacles - in which case you should go for more sophisticated path planning algorithms like A*, D* Lite etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The range is governed by the type of antenna, the transmitting power and the frequency of transmission. Lower frequency com equipment tends to have larger penetration power and thus more range. However, legal restrictions on the frequencies civilians can use depends on the country you are in. (900 Mhz is legal in the US but illegal in India. 2.4GHz is legal, free to use ISM band worldwide). The more your transmitting power, the more the range you will get but this too is regualated by the RF restrictions in your country. &lt;/p&gt;&#xA;" OwnerUserId="15348" LastActivityDate="2016-12-21T02:40:47.180" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11260" PostTypeId="2" ParentId="4364" CreationDate="2016-12-21T07:24:57.730" Score="-1" Body="&lt;p&gt;I'm a Chinese college student and also find this problem when learning industral robot. &#xA;If you clearly identify the motion of the SCARA robot, you'll find that the distance of each joint is stable, for example the distance of joint 1 and 2 is always the b1. So just review the definition of bi: the joint offect. I think you're correct. &#xA;Please find the Page 110 5.17- from the book , written by SAHA. There is clear dipict of sturature about SCARA robot.&#xA;Any commutation, welcome to e-mail me. &#xA;sailong.wu@gmail.com&lt;/p&gt;&#xA;" OwnerUserId="15612" LastActivityDate="2016-12-21T07:24:57.730" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11261" PostTypeId="1" AcceptedAnswerId="11549" CreationDate="2016-12-21T11:33:57.367" Score="0" ViewCount="249" Body="&lt;p&gt;As part of my PhD field work it would be useful to have latitude/longitude measurements for the locations of ant nests that I am working on. These ant nests can be as close as 50cm together so the accuracy of the system would (I think) need to be higher than is available from a phone or basic GPS system. Does anyone know what system would be best for getting this sort of accuracy? My budget is probably only around £200. If it isn't possible in that price range it would be good to know what system I would need to use so that I can see if I can just borrow such a system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks a lot! &lt;/p&gt;&#xA;" OwnerUserId="15615" LastActivityDate="2017-02-04T21:38:06.007" Title="Cheapest GPS that is accurate to ca. 30cm in woodland" Tags="&lt;gps&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="11262" PostTypeId="1" AcceptedAnswerId="11263" CreationDate="2016-12-21T12:51:11.587" Score="0" ViewCount="922" Body="&lt;p&gt;I need to use the parallel axis theorem to determine the moment of inertia of each robotic arm link referred to the joints of the 3 DOF manipulator. The moments of each link's centre of mass are:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Tuyb3.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Tuyb3.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The link joints are located according to the following coordinates from each link's centre of mass and the link masses are specified as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/XIaoZ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XIaoZ.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that solve Izz, Iyy and Ixx to use the following equations:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ixx = Ixx + m(ry^2 + rz^2)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Izz = Izz + m(rx^2 + ry^2)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Iyy = Iyy + m(rx^2 + rz^2)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I'm not sure how to solve this particular problem, I was thinking since y1 and z1 both equal 0, to solve the question for that link I need to solve I1yy and I1zz is that right?&lt;/p&gt;&#xA;" OwnerUserId="15616" LastActivityDate="2016-12-21T14:03:42.867" Title="Parallel axis theorem to determine the moment of inertia" Tags="&lt;robotic-arm&gt;&lt;dynamics&gt;&lt;joint&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11263" PostTypeId="2" ParentId="11262" CreationDate="2016-12-21T14:03:42.867" Score="1" Body="&lt;p&gt;If the distance between the axes is zero, then there is no change in the inertia for that specific axis. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can verify your calculations with a CAD software. Most of them (Solid Works, Inventor, Catia, etc.) can calculate the intertia of solid bodies in any defined reference frame (coordiante system).&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2016-12-21T14:03:42.867" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11265" PostTypeId="1" AcceptedAnswerId="11289" CreationDate="2016-12-21T16:49:47.413" Score="0" ViewCount="661" Body="&lt;p&gt;I'm current workin on an EKF for an carlike robot and I'm not sure how to transform the IMU accelerometer data to offset the roll, pitch and yaw and get the acceleration with respect to the ground.&#xA;I'm only computing the x,y position of the robot and the yaw of this vehicle.&lt;/p&gt;&#xA;" OwnerUserId="15604" LastActivityDate="2016-12-27T10:53:00.957" Title="How to transform Accelerometer data from the robots frame to the world frame" Tags="&lt;accelerometer&gt;&lt;ekf&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11267" PostTypeId="1" CreationDate="2016-12-21T21:48:19.217" Score="0" ViewCount="108" Body="&lt;p&gt;Given the differential equation of a current controlled electric actuator, how would I convert the differential equation into its Laplace transform?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ J \frac{d^2 \phi(t)}{dt^2} + D \frac{d \phi(t)}{dt} + H \phi(t) = K i(t) = 0 $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know the reason you're meant to convert this to laplace is because it's easier to work with but I'm finding it difficult to understand why you do certain things in certain parts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any concrete method on how to convert this would be appreciated.&lt;/p&gt;&#xA;" OwnerUserId="15624" LastEditorUserId="158" LastEditDate="2016-12-21T22:50:22.903" LastActivityDate="2016-12-22T03:02:18.000" Title="Converting a differential equation into its Laplace transform" Tags="&lt;actuator&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11268" PostTypeId="2" ParentId="11267" CreationDate="2016-12-21T22:27:55.137" Score="1" Body="&lt;p&gt;If J, D, H, and K are independent of time, you use the property of the Laplace transform that the derivative in the time domain is the same as multiplying by $s$ in the frequency domain.  Then you have to subtract off the initial condition as shown in the first two examples on these &lt;a href=&quot;http://mathfaculty.fullerton.edu/mathews/c2003/LaplaceDiffIntegrateMod.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Cal State Fullerton math pages&lt;/a&gt;.  But really, any web search for differentiation and Laplace transform will get you multiple hits that explain it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the Laplace transform of your equation would be&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ J (s^2 \Phi(s) - s \phi(0) - \phi\prime(0)) + D (s \Phi(s) - \phi(0)) + H \Phi(s) = K I(s) $$&lt;/p&gt;&#xA;" OwnerUserId="11125" LastEditorUserId="11125" LastEditDate="2016-12-22T03:02:18.000" LastActivityDate="2016-12-22T03:02:18.000" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11269" PostTypeId="1" AcceptedAnswerId="11270" CreationDate="2016-12-22T11:27:13.780" Score="0" ViewCount="60" Body="&lt;p&gt;I was wondering if anyone knew of any easy-to-use plug and play systems, that allow you to build and programme a number of actuators and motors quickly and easily?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm thinking something like Lego Mindstorms, but for adults. I.e. with more powerful motors. I need to be able to generate a torque of around 10 Nm, at a speed of around 10 rpm, and I need to control the rotation angles. Could be either stepper motors, or normal DC motors with hall sensors to measure number of rotations. I'm at the beginning of my journey into robotics, so don't mind paying a bit more for the parts in favour of speeding up my learning curve!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it's not clear already, I'm looking for an &quot;off-the-shelf&quot; product, with a range of products I can browse, and accumulate an increasing number of components over the years.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many thanks in advance for any suggestions!&lt;/p&gt;&#xA;" OwnerUserId="15627" LastEditorUserId="15627" LastEditDate="2016-12-22T12:03:00.110" LastActivityDate="2016-12-22T15:12:23.390" Title="Plug &amp; play motors, actuators and drivers system" Tags="&lt;motor&gt;&lt;actuator&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11270" PostTypeId="2" ParentId="11269" CreationDate="2016-12-22T15:12:23.390" Score="0" Body="&lt;p&gt;Maybe you are interested on the Maxon motor kit, but is a little expensive, but, you can control DC motors precisely like servos, because they comes with rotation encoders and are very powerful and enough RPM's for big scale robotic, using positioning controllers over CANopen protocol or if you prefer, can control motors using Arduino or PI sending signals to the drivers, but it includes his own software...&#xA;Maxon motors are used for the most sophisticated applications on robotics, take a tour for the Maxon's web: &lt;a href=&quot;http://www.maxonmotor.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.maxonmotor.com/&lt;/a&gt; you can request catalogs and find many other resources for learning...&lt;/p&gt;&#xA;" OwnerUserId="14806" LastActivityDate="2016-12-22T15:12:23.390" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11274" PostTypeId="1" CreationDate="2016-12-23T12:42:16.893" Score="1" ViewCount="85" Body="&lt;p&gt;If Amazon plans to deliver packages using drones, how does it ensure the drones reach their destination safely and come back? Won't thieves be able to easily steal packages and drones by shooting them down? What about threat from birds like falcons?&lt;/p&gt;&#xA;" OwnerUserId="15635" LastActivityDate="2017-01-26T21:16:06.290" Title="How does Amazon ensure its drones are not shot down or captured when in service" Tags="&lt;uav&gt;" AnswerCount="1" CommentCount="3" ClosedDate="2017-02-03T15:37:38.157" ContentLicense="CC BY-SA 3.0" />
  <row Id="11275" PostTypeId="1" CreationDate="2016-12-23T15:21:37.903" Score="2" ViewCount="192" Body="&lt;p&gt;I have an M5 threaded rod that penetrates a box. Outside it is driven by a motor and it rotates a part inside the box. The box is sealed and I would like to seal the area around the rod as well. I have seen double lip oil seals but I don't think they will work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The oil is very runny, like water and the reason I am not using a smooth rod (which would be simpler to use in this application) is mainly in order to save on tooling costs as I can get the rods already threaded for very cheap.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help would be appreciated!&lt;/p&gt;&#xA;" OwnerUserId="15637" LastActivityDate="2020-01-19T06:47:26.193" Title="How to seal a threaded rod so I won't lose oil?" Tags="&lt;mechanism&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11276" PostTypeId="1" CreationDate="2016-12-23T17:10:09.330" Score="0" ViewCount="86" Body="&lt;p&gt;Is learning microcontroller programming useful for one who want to specialize in robotics I don't mean platforms like Arduino , Teensy , I mean mcu itself like Arm cortex etc.&lt;/p&gt;&#xA;" OwnerUserId="11772" LastEditorUserId="37" LastEditDate="2017-01-02T12:51:33.233" LastActivityDate="2017-01-02T12:51:33.233" Title="Learning micro-controller programming" Tags="&lt;microcontroller&gt;" AnswerCount="2" CommentCount="1" ClosedDate="2016-12-27T10:28:06.290" ContentLicense="CC BY-SA 3.0" />
  <row Id="11277" PostTypeId="2" ParentId="11276" CreationDate="2016-12-23T22:36:43.013" Score="1" Body="&lt;p&gt;I would say yes. At the lowest level in terms of robotic project development, you need to interface with hardware, e.g. sensors, motors, etc. So there's always demand in those area. As of if ARM uCs are worth learning, I would say yes also, since they are the most popular uCs on the market, you can find them on many platforms. &lt;/p&gt;&#xA;" OwnerUserId="9972" LastActivityDate="2016-12-23T22:36:43.013" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11278" PostTypeId="1" CreationDate="2016-12-25T07:04:47.810" Score="1" ViewCount="507" Body="&lt;p&gt;I'm studying for an exam and I came across these questions where you have to determine the number of possible inverse kinematic equations like&lt;img src=&quot;https://i.gyazo.com/8aa5c2730c44db473af111e62129147d.png&quot; alt=&quot;these&quot; /&gt; (qs from Craig Introduction To Robotics, 3rd Edition)&lt;/p&gt;&#xA;&lt;p&gt;How exactly do you find the number of solutions? I know how to find the DH parameters and then the inverse kinematics but is there some way to calculate the number of solutions quickly like this question suggests? Like, I can visualize it (4 for the second one) but is there a proper way?&lt;/p&gt;&#xA;" OwnerUserId="15646" LastEditorUserId="19515" LastEditDate="2020-07-27T18:27:47.457" LastActivityDate="2020-07-27T18:27:47.457" Title="How many solutions are there to this?" Tags="&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11279" PostTypeId="2" ParentId="11276" CreationDate="2016-12-25T07:56:55.510" Score="1" Body="&lt;p&gt;Depending on which area of robotics you would like to specialize in, knowing what assembler is and how it should be used might indirectly help you to write more efficient code. It helps you less in industrial robotics, it helps you more in diy robotics. However, I doubt that you will ever write asm code, but I am sure that a solid understanding of bit and hex representation of variables will help you a lot. Assembler can give you this knowledge at a steep learning curve.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since I think that general knowledge about assembler helps you, not specifically one complex mcu, I would recommend learning a simpler arhitecture like avr (arduino) at a low level (just to know how assembler works) It offers you a good insight into porgrammjng but you will most probably never write assembly code directly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Furthermore, I would recommend knowing C/C++ well, since most microcontroller applications are written using these languages.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2016-12-25T07:56:55.510" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11280" PostTypeId="2" ParentId="11278" CreationDate="2016-12-25T11:46:13.973" Score="1" Body="&lt;p&gt;The number of solutions come from the multiple solutions to the inverse kinematics equations. You can easily develop an intuition for different groups of mechanisms and identify correctly the number of solutions, but this is based on experience and intuition, not on a mathematical formalism. This however is only the theoretical side of the problem. In practice, the joint limits play an important role in limiting the number of theoretical solutions practically achievable. &lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2016-12-25T11:46:13.973" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11281" PostTypeId="1" AcceptedAnswerId="11286" CreationDate="2016-12-25T23:19:29.030" Score="0" ViewCount="97" Body="&lt;p&gt;I'm new here, my name is Mark, I'm 24 years old and I'm a Linux lover, by 2020 I intend to build up a wildlife guardian drone based on the Raspberry pi which will be connected to the internet but that will operate by its own using artificial intelligence.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Talking about this to a technician at my school in Italy, I have been told that the Raspberry is not suitable for an important project but just for little experiments.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The way he said that seemed to me just a bit too dismissive but he made me become doubtful about the Raspberry's quality so I hope you guys can help me understand if the Raspberry can suite my ambitious plan to build a guardian drone to protect the wildlife of a very little Papua New Guinea island or if it will break the first time it encounters trouble.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is the Raspberry pi 3 only for little experiments or will it also work for very important stable projects like building robots?&lt;/p&gt;&#xA;" OwnerUserId="15648" LastEditorUserId="184" LastEditDate="2016-12-27T21:19:41.183" LastActivityDate="2016-12-29T13:24:51.387" Title="Reliability of Raspberry Pi in Wild Life Guardian Drone project" Tags="&lt;raspberry-pi&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11282" PostTypeId="2" ParentId="11275" CreationDate="2016-12-26T16:20:42.957" Score="2" Body="&lt;p&gt;Have you considered putting the motor inside the same oil-filled box as the part that needs to move?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many electric motors -- such as the coolant motor in practically all household refrigerators -- run in a bath of oil. Electric motors often work &lt;em&gt;better&lt;/em&gt; covered in oil than they do dry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sealing a hole with an electric cable running through it is much easier than sealing a hole with a rotating rod running through it.&lt;/p&gt;&#xA;" OwnerUserId="187" LastActivityDate="2016-12-26T16:20:42.957" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11283" PostTypeId="2" ParentId="8403" CreationDate="2016-12-26T16:49:24.973" Score="0" Body="&lt;p&gt;Perhaps a mirror tilted 45 degrees on the end of a motor shaft might work?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;top view, camera looking horizontally:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;                 .&#xA;                 .&#xA;                 ./&#xA;[camera]&amp;lt;| . . . /=== motor&#xA;                /&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;front view, camera looking horizontally directly at you:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[camera]&amp;lt;| . . . |(mirror)|===(motor)&#xA;   ||                            ||&#xA;  ---------------(ground)-----------&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;front view, camera looking down:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[camera]&amp;lt;| . . . . . \========(motor)&#xA;   ||                .           ||&#xA;  ---------------(ground)-----------&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;front view, camera looking up:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;                     .&#xA;                     .&#xA;                     .&#xA;[camera]&amp;lt;| . . . . . /========(motor)&#xA;   ||                            ||&#xA;  ---------------(ground)-----------&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Forgive the crude ASCII art. I hope this makes sense to you.&lt;/p&gt;&#xA;" OwnerUserId="187" LastActivityDate="2016-12-26T16:49:24.973" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11284" PostTypeId="2" ParentId="11281" CreationDate="2016-12-26T16:57:13.857" Score="0" Body="&lt;p&gt;From what I've seen other people using RaspberryPi, they sometimes had reliability issues with it when used in bad conditions (Thrown around in boxes, lots of interference, dubious power supplies and cables -- This was when they were used for driving displays at a competition, not in robotics though), so there might be a point to what people at your school tell you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But while building a robot, you will likely be doing a lot of little experimenting anyway :). You can start with a RaspberryPi if you have it available and then move to something else if you find out it's not good enough for you. Buying some expensive hardware only to find out a month later that you actually needed the other one is not so much fun :-)&lt;/p&gt;&#xA;" OwnerUserId="482" LastActivityDate="2016-12-26T16:57:13.857" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11286" PostTypeId="2" ParentId="11281" CreationDate="2016-12-27T03:15:27.637" Score="0" Body="&lt;p&gt;If you want your drone to operate by itself, it must have some degree of intelligence, which means powerful computation resources are needed. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming you intend to use computer vision for the drone to navigate, then it needs to process video stream real time, which is far beyond what Raspberry can do. However, if you construct an super &quot;elegant&quot; AI, a Raspberry would suffice. But this takes a lot of effort. MIT has built a system that can make an aircraft navigate in the forest, which is very impressive. Since details of the project is not shown in the question, I don't know what kind of intelligence it requires.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the way, Raspberry alone is not capable of controlling a drone. You are going to need ESC(electronic speed control) to control the motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another solution is that the drone transmits all data to the server, where AI algorithms process the data then give the drone commands. But the method involves other problems. First, it's hard for the drone to transmit the data for long distance. If you want to make the wireless communication reliable and keep the cost down, 2Km might be the limit on complicated terrain. In your case, 2Km may be able to cover the island. You also need to make sure the transmitter won't overheat during operation. Second, real-time processing cannot be guaranteed. If the velocity of  your drone surpass 20m/s, the command delay would be a disaster. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In conclusion. Raspberry is not well-suited for your project, but it's still possible. I found that innovation often comes from those outsiders. So try it, even others tell you it's not possible. Some axiom may be true, but they are only applicable to most people in most conditions, not all.&lt;/p&gt;&#xA;" OwnerUserId="15656" LastEditorUserId="15656" LastEditDate="2016-12-29T13:24:51.387" LastActivityDate="2016-12-29T13:24:51.387" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11287" PostTypeId="2" ParentId="11281" CreationDate="2016-12-27T06:41:53.910" Score="0" Body="&lt;p&gt;By all means start with a raspberry pi and see where that leads you. If you write your AI, control and other algorithms nice and modular, moving to another platform would be quite simple, and shouldn't be a problem since this is a long-term project. Afterall, you would still be using Linux, gcc, glibc and all sorts of libraries that are portable across Linux distributions and the architecture is running on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One thing I often experience is that version 1 of anything is very flawed. It's hard to predict all the requirements and challenges of a problem beforehand, so version 1 ends up being patched over patched and ugly. Learning everything from that, version 2 becomes a much better design, more efficient and overall much better. So start with a raspberry pi, knowing that you might even decide to redo the whole thing after initial experimentation, at which point you would be glad you didn't waste a long time trying to find the best platform to do something you weren't entirely sure what it was!&lt;/p&gt;&#xA;" OwnerUserId="158" LastActivityDate="2016-12-27T06:41:53.910" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11288" PostTypeId="2" ParentId="11281" CreationDate="2016-12-27T10:25:33.630" Score="0" Body="&lt;p&gt;There is no definite answer to your question. In any case you should define specific requirements for you system, including:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;processing power needed&lt;/li&gt;&#xA;&lt;li&gt;maximum power consumption&lt;/li&gt;&#xA;&lt;li&gt;operating temperature range &lt;/li&gt;&#xA;&lt;li&gt;should the system be dust/water proof&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;What's more, for a drone you will probably need additional board for running motors control loop. Raspberry isn't a good choice here because of real time requirements, but can be good choice for higher level control unit (image processing, navigation etc.) Even if it fails, the motor control could be programmed to safely get a drone to the ground by slowly lowering altitude. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As Shahbaz said, at prototype stage it is a good choice. You will probably want to change it at some point, but first gather more experience on the project.&lt;/p&gt;&#xA;" OwnerUserId="7360" LastActivityDate="2016-12-27T10:25:33.630" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11289" PostTypeId="2" ParentId="11265" CreationDate="2016-12-27T10:53:00.957" Score="1" Body="&lt;p&gt;If you are only computing the x, y and yaw (as I understand, these are the degrees of freedom of the robot) then:&#xA; 1. The yaw acceleration is just what you measure&#xA; 2. x and y acceleration is what you measure but rotated by the yaw angle (e.g phi) around the z axis. So you just need to rotate it back to the world frame. you can do it with this rotation matrix multiplied by the x, y vector:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(cos(phi), sin(phi); -sin(phi), cos(phi)) * (x, y)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I dont understand what do you mean by:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;transform the IMU accelerometer data to offset the roll, pitch and yaw&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Assuming the ground is flat and the IMU z axis is in the same direction of the world z axis (perpendicular to the gound), you shouldn't have changes in the roll and pitch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you do want to take them into account, you should take the roll, pitch and yaw angles and transform your measurements with one of the methods stated &lt;a href=&quot;https://en.wikipedia.org/wiki/Rotation_formalisms_in_three_dimensions&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Usually, in robotics, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Quaternion&quot; rel=&quot;nofollow noreferrer&quot;&gt;Quaternions&lt;/a&gt; are used for this purpose.&lt;/p&gt;&#xA;" OwnerUserId="15659" LastActivityDate="2016-12-27T10:53:00.957" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11291" PostTypeId="1" AcceptedAnswerId="11296" CreationDate="2016-12-27T14:51:43.647" Score="1" ViewCount="116" Body="&lt;p&gt;Do we need to install extra software on the EV3 or does Robotary (&lt;a href=&quot;https://robotaryapp.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://robotaryapp.com/&lt;/a&gt;) install programs just like the default LEGO Software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks, Josh&lt;/p&gt;&#xA;" OwnerUserId="15664" LastActivityDate="2016-12-28T07:39:14.043" Title="Do I need extra software on the EV3 to use Robotary?" Tags="&lt;mindstorms&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11292" PostTypeId="1" CreationDate="2016-12-27T19:10:44.087" Score="0" ViewCount="2082" Body="&lt;p&gt;I'm working on a TWDD line-following robot using qtr-8a reflectance sensor array.&#xA;The sensors are connected to BeagleBone Black, and BBB is sending the speed serially to an arduino Due.&#xA;My approach is using a PID controller for the sensor so the error equals to zero when the robot is centred on the line and a positive/negative error depending on the robot's position. Applying Trial and error method I finally reached a Kp value that tracks straight lines perfectly. However, I'm still unable to turn and stay on the line even on a similarly smooth turns. I guess this is related to the Kd value. I'm not using the integral part Ki since the error is keep increasing. I tried to set conditions when the robots is drifting away from the line but it's not working probably (even without the conditions it is somehow turning smoother but then losing the line)&#xA;I'm using the following draft code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;from bbio import *&#xA;import time&#xA;&#xA;&#xA;integral = 0&#xA;last_prop = 0&#xA;Kp = 20&#xA;Ki= 0&#xA;Kd = 150&#xA;amax = list(0 for i in range(0,8))&#xA;amin = list(1024 for i in range(0,8))&#xA;timeout = time.time() + 10&#xA;&#xA;# Read ADC data from MCP3008&#xA;# ch: 0-7, ADC channel&#xA;# cs: 0-1, SPI chip select&#xA;# See MCP3008 datasheet p.21&#xA;def adc_read(cs, ch):&#xA;    spidata = SPI1.transfer(cs, [1,(8+ch)&amp;lt;&amp;lt;4, 0])&#xA;    data = ((spidata[1] &amp;amp; 3) &amp;lt;&amp;lt; 8) + spidata[2]&#xA;&#xA;    return data&#xA;&#xA;def setup():&#xA;# SPI1 setup&#xA;    Serial2.begin(9600)&#xA;    Serial5.begin(9600)&#xA;    pinMode(GPIO1_7, OUTPUT)&#xA;    digitalWrite(GPIO1_7, LOW)&#xA;    SPI1.begin()&#xA;    SPI1.setMaxFrequency(0,50000)  # =&amp;gt; ~47kHz, higher gives occasional false readings&#xA;  #  SPI1.setMaxFrequency(1,50000)&#xA;    calibrate()&#xA;&#xA;# reading the IR sensor data    &#xA;def read_sensors():&#xA;    sensors = []&#xA;    for i in range(8):&#xA;        sensors.append(adc_read(0,i))&#xA;&#xA;    return sensors&#xA;# calculating the error from PID controller&#xA;def calc_pid(x,sp):&#xA;    global  integral, last_prop , Kp, Ki ,Kd&#xA;    set_point = sp&#xA;    pos = sensor_average(x)/sensor_sum(x)&#xA;    prop = pos - set_point&#xA;    integral = integral + prop&#xA;    deriv = prop - last_prop&#xA;    last_prop = prop&#xA;    error = (prop*Kp + integral*Ki + deriv*Kd)/100&#xA;&#xA;    return error&#xA;&#xA;def get_position(s):&#xA;    return sensor_average(s)/sensor_sum(s)        &#xA;&#xA;def sensor_average(x):&#xA;    avg = 0&#xA;    for i in range(8):&#xA;        avg += x[i]*i*100&#xA;&#xA;    return avg&#xA;&#xA;def sensor_sum(x):&#xA;    sum = 0  &#xA;    for i in range(8):&#xA;        sum += x[i] &#xA;    return sum&#xA;&#xA;&#xA;def get_sensor(x):&#xA;    j= read_sensors()[x]&#xA;    return j&#xA;&#xA;def calc_setpoint(x,y):&#xA;    avg = 0&#xA;    sum = 0&#xA;    for i in range(8):&#xA;        avg += (x[i]-y[i])*i*100&#xA;        sum += x[i]-y[i]&#xA;    return avg/sum&#xA;# calibrate the sensors reading to fit any given line&#xA;def calibrate():&#xA;    global amin&#xA;    global amax&#xA;&#xA;    while(time.time() &amp;lt; timeout):&#xA;        for i in range(0,8):&#xA;            amin[i] = min(amin[i],read_sensors()[i])&#xA;            amax[i] = max(amax[i],read_sensors()[i])&#xA;            digitalWrite(GPIO1_7, HIGH)&#xA;    digitalWrite(GPIO1_7,LOW)&#xA;&#xA;&#xA;# calculating the correspondent speed&#xA;def calc_speed(error):&#xA;    avg_speed = 150&#xA;    min = 100&#xA;    pos = get_position(read_sensors())&#xA;    speed = []&#xA;    if(error &amp;lt; -35):&#xA;        right = avg_speed -(2*error)&#xA;        left = avg_speed + (2*error)&#xA;    elif(error &amp;gt; 35):&#xA;        right =avg_speed - (2*error)&#xA;        left = avg_speed + (2*error)&#xA;    else:      &#xA;        right = avg_speed - (error)&#xA;        left = avg_speed + (error)&#xA;    speed.append(right)&#xA;    speed.append(left)&#xA;    return speed&#xA;&#xA;&#xA;def loop():&#xA;&#xA;    s = read_sensors()&#xA;    setpoint = calc_setpoint(amax,amin)&#xA;    position = get_position(s)&#xA;    err = calc_pid(s,setpoint)&#xA;&#xA;    print err&#xA;&#xA;    #print &quot;divided by 100:&quot;&#xA;    speeds = calc_speed(err) &#xA;    print speeds&#xA;    right_motor = speeds[0]&#xA;    left_motor = speeds[1]&#xA;&#xA;&#xA;    Serial2.write(right_motor)&#xA;&#xA;    Serial5.write(left_motor)&#xA;    delay(10)&#xA;&#xA;run(setup,loop)        &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;PS: the sent speed over serial is limited to 255 and I'm multiplying it by a factor from the Arduino side.&lt;/p&gt;&#xA;" OwnerUserId="2525" LastActivityDate="2016-12-28T03:07:15.260" Title="Tuning PID controller for sharp turns in line follower robot" Tags="&lt;pid&gt;&lt;python&gt;&lt;line-following&gt;&lt;beagle-bone&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11293" PostTypeId="2" ParentId="11274" CreationDate="2016-12-27T20:43:18.533" Score="0" Body="&lt;p&gt;Mister Frauke Zeller is a researcher in the field of &quot;how the environment reacts to robots&quot;. He questions about how a robot have to be designed in a way that his human environment acts in a friendly or not so friendly manner. The best example is the hitchbot project, which was not a experiment on how to create a robot, but a study what people will do if they see such robot &lt;a href=&quot;http://wi.mobilities.ca/wp-content/uploads/2016/02/wi_journal_10.1.5_zellersmith.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Post-hitchBOT-ism&lt;/a&gt;. There are also experiments in the wild, how birds are interacting with drones &lt;a href=&quot;https://www.youtube.com/watch?v=ZMnZ7RS88so&quot; rel=&quot;nofollow noreferrer&quot;&gt;DRONES UNDER ATTACK - Drone Fails&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2016-12-27T20:43:18.533" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11294" PostTypeId="2" ParentId="11292" CreationDate="2016-12-28T03:07:15.260" Score="1" Body="&lt;p&gt;While calculating speeds, you are multiplying by 2*error. If PID (or PD) calculates an error, I believe it should be fed directly to the motors because in each loop it does not account for an additional 2* multiplier in speed in the next loop. That would act like an unforeseen impulse that is unaccounted for by the PID. So for starters, I would suggest try removing the 2*error term, compare to a smaller error (or as required) and go without the last else-if condition like below:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;if(error &amp;lt; -20):&#xA;        right = avg_speed -(error)&#xA;        left = avg_speed + (error)&#xA;elif(error &amp;gt; 20):&#xA;        right =avg_speed - (error)&#xA;        left = avg_speed + (error)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Secondly; If you are going with hit-&amp;amp;-trial calculation of the PID constants, I would suggest, start with just P and get a decent line following (with manageable oscillations at low speeds). Then add an integral term (PI controller) and test it out.The Differential term can be added once the other two are giving a suitable response. &lt;/p&gt;&#xA;" OwnerUserId="14999" LastActivityDate="2016-12-28T03:07:15.260" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11295" PostTypeId="1" AcceptedAnswerId="11586" CreationDate="2016-12-28T06:19:53.197" Score="4" ViewCount="68" Body="&lt;p&gt;For a sorting machine where the objects to be sorted have various sizes, color, shapes, and patterns, is it more optimal (in terms of minimal time of the overall process and maximal precision and accuracy) to use a sorting algorithm or to use different dimensions in the physical design to do the sorting?&lt;/p&gt;&#xA;" OwnerUserId="14767" LastEditorUserId="16013" LastEditDate="2017-02-07T21:36:45.107" LastActivityDate="2017-02-08T03:28:44.630" Title="Is it better to use software or hardware for object sorting?" Tags="&lt;sensors&gt;&lt;design&gt;&lt;automation&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11296" PostTypeId="2" ParentId="11291" CreationDate="2016-12-28T07:39:14.043" Score="0" Body="&lt;p&gt;I contacted the developers and no, you do not need external software, but your mac has to be running for the software to work on the EV3. They are connected via bluetooth or USB.&lt;/p&gt;&#xA;" OwnerUserId="15664" LastActivityDate="2016-12-28T07:39:14.043" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11297" PostTypeId="2" ParentId="11295" CreationDate="2016-12-28T07:43:26.243" Score="3" Body="&lt;p&gt;You would have to do both. It's very very challenging to move an object without using hardware, and it's incredibly hard to see the colour of a brick with hardware. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'd have to break it down into a few pieces:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Hardware&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Shape and size (you can't detect the size and shape with a robot easily)&lt;/li&gt;&#xA;&lt;li&gt;Movement of pieces&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Software&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Color&lt;/li&gt;&#xA;&lt;li&gt;Patterns&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="15664" LastActivityDate="2016-12-28T07:43:26.243" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11298" PostTypeId="1" CreationDate="2016-12-28T22:02:02.493" Score="2" ViewCount="1996" Body="&lt;p&gt;I’m in the early stages of designing a self-balancing robot as a way to refresh my knowledge on control theory, which has been gradually slipping away since graduating about a year and a half ago. I'm wondering if anyone has any input on how best to approach this problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My plan is to use a 6 DOF IMU as an angle sensor, and to control the pitch by accelerating and decelerating the cart. I'm looking for robust response to disturbance, and to add in RC differential drive capabilities later on. This block diagram is a pretty close match for what I was planning to do,  (source: Sebastian Nilsson's Blog):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/CD0Qy.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/CD0Qy.png&quot; alt=&quot;Source: Sebastian Nilsson’s Blog&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would this be a good approach? Any recommended alternatives? Thanks.&lt;/p&gt;&#xA;" OwnerUserId="15673" LastEditorUserId="7360" LastEditDate="2016-12-30T20:52:48.753" LastActivityDate="2017-01-08T14:57:02.460" Title="Self balancing robot control system strategies" Tags="&lt;control&gt;&lt;wheeled-robot&gt;&lt;imu&gt;&lt;two-wheeled&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ClosedDate="2018-04-12T10:44:11.173" ContentLicense="CC BY-SA 3.0" />
  <row Id="11299" PostTypeId="1" CreationDate="2016-12-29T10:31:58.240" Score="-1" ViewCount="73" Body="&lt;p&gt;Earlier while writing by hand, I was wondering if anyone could build a pen holder, that could write for me? Maybe you could make some good business from them. Thanks for your time.&lt;/p&gt;&#xA;" OwnerUserId="15676" LastEditorUserId="15676" LastEditDate="2016-12-29T15:24:04.690" LastActivityDate="2016-12-30T13:32:46.443" Title="Could anyone complete my challenge?" Tags="&lt;wheeled-robot&gt;&lt;line-following&gt;&lt;wifi&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2016-12-30T14:03:17.523" ContentLicense="CC BY-SA 3.0" />
  <row Id="11300" PostTypeId="2" ParentId="10743" CreationDate="2016-12-29T15:11:00.967" Score="2" Body="&lt;p&gt;I would highly recommend using the encoders over estimating travel distance by rpm + time.  Estimating motor velocity is notoriously tricky.  Especially at slow speeds.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A direct measurement is always better.  &lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2016-12-29T15:11:00.967" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11301" PostTypeId="1" CreationDate="2016-12-29T17:02:35.943" Score="2" ViewCount="205" Body="&lt;p&gt;I have a transfer function G(s)=1/s(s+10) with sampling and holding, it is easy to relocate poles at 0.5 and -0.5 using a state feedback controller. But if the proportional controller is added to the transfer function, as in G(s)=K/s(s+10), how can the state feedback controller be designed?&lt;/p&gt;&#xA;" OwnerUserId="15678" LastActivityDate="2017-02-01T09:11:37.430" Title="Proportional controller with state feedback controller" Tags="&lt;control&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11303" PostTypeId="2" ParentId="11299" CreationDate="2016-12-30T13:32:46.443" Score="1" Body="&lt;p&gt;Yes, robotic arms or other devices could write for you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They can even be more prolific than Shakespeare.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But probably the poetry they write is not your desideratum.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you plant numerous electrodes in your head to monitor the spikes your neurons generate, the robotic arm may have a chance to share your thoughts thereby writing for you as you wish. However, I do not encourage you to try that. Because currently we do not have the technology at such an applicable level.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In short, the robotic arm doesn't know your heart.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So this is inevitably a heartbreaking story. &lt;/p&gt;&#xA;" OwnerUserId="15656" LastActivityDate="2016-12-30T13:32:46.443" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="11304" PostTypeId="1" CreationDate="2016-12-31T00:22:02.320" Score="1" ViewCount="936" Body="&lt;p&gt;I just bought the &lt;a href=&quot;https://www.bitcraze.io/crazyflie-2/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Crazyflie 2.0&lt;/a&gt; drone. This is my first drone, and it is my first time programming a drone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My first goal is simple: &lt;em&gt;Make the drone hover in place stably for 10 seconds.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found a simple example script that turns up the thrust and then lands the drone. I modified this to 1) extend the time to 10 seconds, 2) reverse thrust if the drone starts tipping, and 3) constantly display the roll, pitch, and yaw in the console.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I run this, the drone often flies randomly around the room and runs into things; it does not just lift up and hover stably. Why is this? How can I improve things so that it's much more stable? Do I need more sensors, or can I pull this off with just programming?&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&quot;&quot;&quot;&#xA;Simple example that connects to the first Crazyflie found, hovers, and disconnects.&#xA;&quot;&quot;&quot;&#xA;&#xA;import time&#xA;import sys&#xA;from threading import Thread&#xA;import logging&#xA;&#xA;import cflib  # noqa&#xA;from cfclient.utils.logconfigreader import LogConfig  # noqa&#xA;from cflib.crazyflie import Crazyflie  # noqa&#xA;&#xA;logging.basicConfig(level=logging.ERROR)&#xA;&#xA;&#xA;class HoverTest:&#xA;    &quot;&quot;&quot;Example that connects to the first Crazyflie found, hovers, and disconnects.&quot;&quot;&quot;&#xA;&#xA;    def __init__(self, link_uri):&#xA;        &quot;&quot;&quot; Initialize and run the example with the specified link_uri &quot;&quot;&quot;&#xA;&#xA;        self._cf = Crazyflie()&#xA;&#xA;        self._cf.connected.add_callback(self._connected)&#xA;        self._cf.disconnected.add_callback(self._disconnected)&#xA;        self._cf.connection_failed.add_callback(self._connection_failed)&#xA;        self._cf.connection_lost.add_callback(self._connection_lost)&#xA;&#xA;        self._cf.open_link(link_uri)&#xA;&#xA;        self._status = {}&#xA;        self._status['gyro.x'] = 0&#xA;        self._status['gyro.y'] = 0&#xA;        self._status['gyro.z'] = 0&#xA;&#xA;        print(&quot;Connecting to %s&quot; % link_uri)&#xA;&#xA;    def _connected(self, link_uri):&#xA;        &quot;&quot;&quot; This callback is called form the Crazyflie API when a Crazyflie&#xA;        has been connected and the TOCs have been downloaded.&quot;&quot;&quot;&#xA;        print(&quot;Connected to %s&quot; % link_uri)&#xA;&#xA;        # The definition of the logconfig can be made before connecting&#xA;        self._lg_gryo = LogConfig(name=&quot;gyro&quot;, period_in_ms=10)&#xA;        self._lg_gryo.add_variable(&quot;gyro.x&quot;, &quot;float&quot;)&#xA;        self._lg_gryo.add_variable(&quot;gyro.y&quot;, &quot;float&quot;)&#xA;        self._lg_gryo.add_variable(&quot;gyro.z&quot;, &quot;float&quot;)&#xA;&#xA;        # Adding the configuration cannot be done until a Crazyflie is&#xA;        # connected, since we need to check that the variables we&#xA;        # would like to log are in the TOC.&#xA;        try:&#xA;            self._cf.log.add_config(self._lg_gryo)&#xA;            # This callback will receive the data&#xA;            self._lg_gryo.data_received_cb.add_callback(self._gryo_log_data)&#xA;            # This callback will be called on errors&#xA;            self._lg_gryo.error_cb.add_callback(self._gryo_log_error)&#xA;            # Start the logging&#xA;            self._lg_gryo.start()&#xA;        except KeyError as e:&#xA;            print(&quot;Could not start log configuration,&quot;&#xA;                  &quot;{} not found in TOC&quot;.format(str(e)))&#xA;        except AttributeError:&#xA;            print(&quot;Could not add gyro log config, bad configuration.&quot;)&#xA;&#xA;        # Start a separate thread to do the motor test.&#xA;        # Do not hijack the calling thread!&#xA;        Thread(target=self._hover).start()&#xA;&#xA;    def _connection_failed(self, link_uri, msg):&#xA;        &quot;&quot;&quot;Callback when connection initial connection fails (i.e no Crazyflie&#xA;        at the specified address)&quot;&quot;&quot;&#xA;        print(&quot;Connection to %s failed: %s&quot; % (link_uri, msg))&#xA;&#xA;    def _connection_lost(self, link_uri, msg):&#xA;        &quot;&quot;&quot;Callback when disconnected after a connection has been made (i.e&#xA;        Crazyflie moves out of range)&quot;&quot;&quot;&#xA;        print(&quot;Connection to %s lost: %s&quot; % (link_uri, msg))&#xA;&#xA;    def _disconnected(self, link_uri):&#xA;        &quot;&quot;&quot;Callback when the Crazyflie is disconnected (called in all cases)&quot;&quot;&quot;&#xA;        print(&quot;Disconnected from %s&quot; % link_uri)&#xA;&#xA;    def _gryo_log_error(self, logconf, msg):&#xA;        &quot;&quot;&quot;Callback from the log API when an error occurs&quot;&quot;&quot;&#xA;        print(&quot;Error when logging %s: %s&quot; % (logconf.name, msg))&#xA;&#xA;    def _gryo_log_data(self, timestamp, data, logconf):&#xA;        &quot;&quot;&quot;Callback froma the log API when data arrives&quot;&quot;&quot;&#xA;        # print(&quot;[%d][%s]: %s&quot; % (timestamp, logconf.name, data))&#xA;&#xA;        self._status['gyro.x'] = data['gyro.x']&#xA;        self._status['gyro.y'] = data['gyro.y']&#xA;        self._status['gyro.z'] = data['gyro.z']&#xA;&#xA;    def _hover(self):&#xA;        start_time = time.time()&#xA;        run_time = 7&#xA;&#xA;        thrust_multiplier = 1&#xA;        thrust_step = 500&#xA;        thrust = 20000&#xA;        max_thrust = 39000&#xA;        roll = -1.00&#xA;        pitch = -2.00&#xA;        yaw = 0&#xA;&#xA;        # Unlock startup thrust protection.&#xA;        self._cf.commander.send_setpoint(0, 0, 0, 0)&#xA;&#xA;        # Turn on altitude hold.&#xA;        self._cf.param.set_value(&quot;flightmode.althold&quot;,&quot;True&quot;)&#xA;&#xA;        while thrust &amp;gt;= 20000:&#xA;            # Update the position.&#xA;            self._cf.commander.send_setpoint(roll, pitch, yaw, thrust)&#xA;&#xA;            time.sleep(0.01)&#xA;&#xA;            if thrust &amp;gt;= max_thrust and time.time() - start_time &amp;gt;= run_time:&#xA;                # Reverse thrust&#xA;                thrust_multiplier = -1&#xA;&#xA;            if thrust &amp;lt;= max_thrust or thrust_multiplier == -1:&#xA;                thrust += thrust_step * thrust_multiplier&#xA;&#xA;            # Reverse thrust if the drone tips over.&#xA;            if abs(self._status['gyro.x']) &amp;gt;= 75 or abs(self._status['gyro.y']) &amp;gt;= 75:&#xA;                print('Aborting')&#xA;                thrust_multiplier = -2&#xA;&#xA;            print(self._status['gyro.x'], self._status['gyro.y'], self._status['gyro.z'])&#xA;&#xA;        self._cf.commander.send_setpoint(0, 0, 0, 0)&#xA;&#xA;        # Make sure that the last packet leaves before the link is closed&#xA;        # since the message queue is not flushed before closing&#xA;        time.sleep(0.1)&#xA;        self._cf.close_link()&#xA;&#xA;&#xA;if __name__ == '__main__':&#xA;    # Initialize the low-level drivers (don't list the debug drivers)&#xA;    cflib.crtp.init_drivers(enable_debug_driver=False)&#xA;    # Scan for Crazyflies and use the first one found&#xA;    print(&quot;Scanning interfaces for Crazyflies...&quot;)&#xA;    available = cflib.crtp.scan_interfaces()&#xA;    print(&quot;Crazyflies found:&quot;)&#xA;    for i in available:&#xA;        print(i[0])&#xA;&#xA;    if len(available) &amp;gt; 0:&#xA;        le = HoverTest(available[0][0])&#xA;    else:&#xA;        print(&quot;No Crazyflies found, cannot run example&quot;)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;As you can see, I tried simply adjusting the roll and pitch (to -1.00 and -2.00), but that did not help much. When I use the GUI and a joystick to control the drone and I adjust the roll and pitch trim values to -1.00 and -2.00, this definitely helps stabilize the drone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any ideas are welcome. Thank you!&lt;/p&gt;&#xA;" OwnerUserId="15691" LastEditorUserId="15691" LastEditDate="2016-12-31T01:14:27.087" LastActivityDate="2017-02-14T12:55:49.633" Title="Possible stabilize Crazyflie 2.0 drone autonomous flight without additional sensors?" Tags="&lt;quadcopter&gt;&lt;uav&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11309" PostTypeId="2" ParentId="11298" CreationDate="2017-01-02T09:43:41.150" Score="3" Body="&lt;p&gt;I can recommend an alternative which has worked for me quite well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I derived the dynamical model of a inverted pendulum, then linearised it around the stable operating point. With this simplified model I found the LQR controller which keeps my robot upright and tracks my desired linear and angular velocities.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The robot working: &lt;a href=&quot;https://www.youtube.com/watch?v=USnkWeM0EHY&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=USnkWeM0EHY&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For learning more about control, linearising and LQR: &lt;a href=&quot;https://www.coursera.org/learn/mobile-robot&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.coursera.org/learn/mobile-robot&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For specific example with self-balance robot: Lecture 4.4 – The Segway Robot of the same course.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The paper which I based my derivation of the dynamical system: Dynamic Analysis of a Nonholonomic Two-Wheeled Inverted Pendulum Robot, YEONHOON KIM*, SOO HYUN KIM and YOON KEUN KWAK, Journal of Intelligent and Robotic Systems (2005) 44: 25–46&lt;/p&gt;&#xA;" OwnerUserId="13361" LastActivityDate="2017-01-02T09:43:41.150" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11310" PostTypeId="1" CreationDate="2017-01-02T09:55:31.203" Score="0" ViewCount="1616" Body="&lt;p&gt;Would you happen to know some good books, tutorials or articles on how to detect objects and their poses, using 2D laser scanners?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My goal is to equip a mobile robot with a laser scanner for object detection in a industrial like environment. I would like to detect legs, some pallets and some trolleys, and measure their poses as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My first intuition is extracting lines from the 2D readings. But then I'm somewhat lost in the next steps.&lt;/p&gt;&#xA;" OwnerUserId="13361" LastActivityDate="2017-01-04T08:39:23.230" Title="Resources for object detection with 2D Laser Scanner (planar only)" Tags="&lt;laser&gt;&lt;lidar&gt;&lt;pose&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11312" PostTypeId="1" CreationDate="2017-01-02T11:14:41.803" Score="1" ViewCount="780" Body="&lt;p&gt;I am working on a MEMS based project which requires me to calculate the orientation(Euler Angles) of an object using only GYROSCOPES.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The GYROSCOPE BIAS is calculated in the beginning for 2 seconds keeping it stationary. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Right now GYROSCOPES give me an accuracy of 2 degrees for a period of 3-4 mins of continuous movement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now if there is continuous movement beyond 3-4 mins, the GYROSCOPE BIAS would have changed and hence the errors increases rapidly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My Question is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1). If the bias drift changes randomly(as read),the angles start increasing in one direction, then why cant we track it for first ten seconds and then keep subtracting the present angles from  initially calculated angles,for every ten seconds during movement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried this out, but it does not work as expected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can GYROSCOPE BIAS be tracked by any way?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance.&lt;/p&gt;&#xA;" OwnerUserId="14376" LastEditorUserId="14376" LastEditDate="2017-01-03T05:29:48.300" LastActivityDate="2017-01-09T12:09:54.993" Title="Handling GYROSCOPE BIAS DRIFT" Tags="&lt;gyroscope&gt;&lt;orientation&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="11313" PostTypeId="1" CreationDate="2017-01-02T19:48:16.037" Score="0" ViewCount="989" Body="&lt;p&gt;I'm using MPU6050(accelerometer+gyro) connected to ATmega328P microcontroller, but probably it isn't even important in my case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my project, I need an angle around the X axis. And it's calculated like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;angle = -(atan2(acc.XAxis, sqrt(acc.YAxis*acc.YAxis + acc.ZAxis*acc.ZAxis))*180.0)/M_PI;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where acc is vector of accelerations in all directions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is, that it gives me credible value only when angle between Z axis and ground is right (so it's not rotated around Y axis). When I start to rotate it around Y axis it also changes value of X axis rotation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/ar0t9Lag.png&quot; alt=&quot;sketch&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know, that it's due to YAxis acceleration in my algorithm, but I have no idea how to get rid of it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I solve this problem?&lt;/p&gt;&#xA;" OwnerUserId="15704" LastEditorUserId="15704" LastEditDate="2017-01-02T19:55:15.597" LastActivityDate="2017-01-05T19:18:55.520" Title="Problem with angle calculation" Tags="&lt;accelerometer&gt;&lt;gyroscope&gt;&lt;rotation&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="11314" PostTypeId="2" ParentId="8893" CreationDate="2017-01-03T13:46:21.307" Score="1" Body="&lt;p&gt;Your first line is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;virtual bool SetParam   (   const std::string &amp;amp;     _key,&#xA;unsigned int    _index,&#xA;const boost::any &amp;amp;  _value &#xA;)       &#xA;pure virtual&#xA;Set a non-generic parameter for the joint.&#xA;&#xA;replaces SetAttribute(Attribute, int, double) List of parameters: &quot;friction&quot; Axis Coulomb joint friction coefficient. &quot;hi_stop&quot; Axis upper limit. &quot;lo_stop&quot; Axis lower limit.&#xA;&#xA;Parameters&#xA;[in]    _key    String key.&#xA;[in]    _index  Index of the axis.&#xA;[in]    _value  Value of the attribute.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And the second one is based on this member function of joint class from Gazebo API &lt;a href=&quot;http://osrf-distributions.s3.amazonaws.com/gazebo/api/7.1.0/classgazebo_1_1physics_1_1Joint.html#ae32987acf99308e4aca7f2c399f3e731&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;virtual void SetVelocity    (   unsigned int    _index,&#xA;double  _vel &#xA;)       &#xA;pure virtual&#xA;Set the velocity of an axis(index).&#xA;&#xA;Parameters&#xA;[in]    _index  Index of the axis.&#xA;[in]    _vel    Velocity.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So yes your robot joint will move depending on the parameter _vel. Don't just depend on Gazebo Tutorials if you want to make your own robot, it's not enough. See also Gazebo API, if you're not good in C++ that much then first learn the important aspects of C++ like inheritance, access specifiers, object classes, friend functions. &lt;/p&gt;&#xA;" OwnerDisplayName="user14148" LastEditorDisplayName="user9480" LastEditDate="2017-04-22T18:07:44.190" LastActivityDate="2017-04-22T18:07:44.190" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11315" PostTypeId="2" ParentId="11312" CreationDate="2017-01-03T13:56:52.820" Score="2" Body="&lt;p&gt;You say,&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Then why can't we track [the angles] for first ten seconds and then keep subtracting the present angles from initially calculated angles for every ten seconds during movement?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You can't subtract &lt;em&gt;angles&lt;/em&gt; from a gyroscope reading because the gyroscope measures angular &lt;em&gt;velocity&lt;/em&gt;. This is kind of like asking why you can't subtract your odometer reading in your car from your speedometer - you're talking about a distance and a speed. Well, an angle is an angular &lt;em&gt;position&lt;/em&gt; or an angular &lt;em&gt;distance&lt;/em&gt;, and again, the gyroscope measures an angular &lt;em&gt;speed&lt;/em&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can &quot;calibrate&quot; a gyroscope by controlling its speed (generally ensuring it's stationary) and measuring the output. Then you average the output and offset it such that it reads the known speed (again, this usually means averaging and subtracting whatever that average is from future readings). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem you'll have with trying to do this continuously is that the actual (physical) input to the gyroscope is probably not zero-mean. So, if you average the angular speed (angular velocity, angular rate, etc.) over some period of time, you don't have a good way of separating the actual input signal from the bias (&quot;offset&quot;) of the gyroscope. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, if you read an average angular speed of 1.5 deg/s for 10 seconds, is that reading correct, or is it actually 1 deg/s and a bias of +0.5 deg/s, or is it actually 2 deg/s and a bias of -0.5 deg/s?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's the problematic part of what you're doing - when you take that average and subtract it from all future readings, you are &lt;em&gt;mathematically&lt;/em&gt; stating that the gyroscope is, on average, &lt;strong&gt;stationary&lt;/strong&gt; for that 10 second interval because the very next sample you get that says it's rotating at 1.5 deg/s, you're going to subtract the running average from that and get (1.5-1.5) = 0 deg/s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only way you can do what you're talking about - averaging angular &lt;strong&gt;speed&lt;/strong&gt; and using that to correct future samples - is to &lt;em&gt;know&lt;/em&gt; that the device will be &quot;stationary&quot; over the average of whatever your sampling interval is. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you might be able to do is to take &lt;em&gt;multiple&lt;/em&gt; units, and average their output, use that average as truth, and then conclude that the bias is the difference between the individual unit's reading and the averaged output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, if you had two units, and one read 1.5 deg/s averaged over 10 seconds, and the other read 2.0 deg/s averaged over the &lt;em&gt;same&lt;/em&gt; interval, then you could say that the &quot;true&quot; motion was 1.75 deg/s, and the first unit has a bias offset of -0.25 deg/s and the second has a bias offset of +0.25 deg/s. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The more units you get, the better your results will be. It would of course be extremely important that the units are all rigidly coupled; any significant flexing of the substrate between sensors would ruin your data. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-01-03T13:56:52.820" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="11316" PostTypeId="2" ParentId="2494" CreationDate="2017-01-03T18:30:55.557" Score="1" Body="&lt;p&gt;I think you should look comparison of SLAM algorithms. There is a benchmark list for visual odoemetry/SLAM in Karlsruhe Institue of Technology named &lt;a href=&quot;http://www.cvlibs.net/datasets/kitti/eval_odometry.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;KITTI Vision Benchmark Suite&lt;/a&gt;. Their bench marking includes  Stereo vision and Laser Points&lt;/p&gt;&#xA;" OwnerUserId="9504" LastActivityDate="2017-01-03T18:30:55.557" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11317" PostTypeId="2" ParentId="2494" CreationDate="2017-01-04T01:44:56.470" Score="1" Body="&lt;p&gt;Gmapping is a good algorithm if you can modify it to meet your needs.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&quot;I would like to know how efficient is using the existing SLAM algorithms&quot; ?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If you're new to the world of slam, you'd better use already developed algorithms or use one of them as a starting base.&lt;/p&gt;&#xA;" OwnerUserId="14590" LastEditorUserId="14590" LastEditDate="2017-01-04T19:56:17.470" LastActivityDate="2017-01-04T19:56:17.470" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11318" PostTypeId="2" ParentId="11310" CreationDate="2017-01-04T08:39:23.230" Score="2" Body="&lt;p&gt;I think you can divide your problem into two subproblems:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) Partition your 2D scan into segments/clusters which represent single objects. A basic algorithm could be:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Start at first laser reading and create a new cluster&lt;/li&gt;&#xA;&lt;li&gt;Add next reading (neighbor) to cluster, if the range difference is below a threshold&lt;/li&gt;&#xA;&lt;li&gt;Else create a new cluster&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;This approach can be enhanced with a slightly better &quot;adding-condition&quot; (2.) as demonstrated in e.g. &lt;a href=&quot;http://www.ipb.uni-bonn.de/wp-content/papercite-data/pdf/bogoslavskyi16iros.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.ipb.uni-bonn.de/wp-content/papercite-data/pdf/bogoslavskyi16iros.pdf&lt;/a&gt; but applied in 2D.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) Find labels for those clusters (leg, pallet, trolley etc.) -Classification. For this purpose you need to find features/properties of clusters, e.g. width, depth (max. range difference) or gather data and make use of classification algorithms like SVMs etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Especially 2) seems to be vary hard using only a 2D laser scanner. One also could imagine to combine multiple scans and create a map (-&gt; SLAM algorithms) which also contains your obstacles, and subsequently find and classify the objects. For this purpose, ROS (&quot;Robot Operating System&quot;) is a good starting point as many algorithms, such as SLAM, e.g. &lt;a href=&quot;http://wiki.ros.org/gmapping&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://wiki.ros.org/gmapping&lt;/a&gt;, are already implemented.&lt;/p&gt;&#xA;" OwnerUserId="15715" LastActivityDate="2017-01-04T08:39:23.230" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11319" PostTypeId="2" ParentId="11301" CreationDate="2017-01-04T12:49:36.243" Score="1" Body="&lt;p&gt;Using given transfer function you can get your state space model by &lt;a href=&quot;https://en.wikipedia.org/wiki/State-space_representation&quot; rel=&quot;nofollow noreferrer&quot;&gt;control canonical form&lt;/a&gt; and you get your A,B,C,D matrix after that you can derive your P gain or feedback control gain by this equation&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P=1/(C*(B*K-1)^(-1)*B)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where K = Feedback control gain [-0.5 -0 5]&#xA;      and P = Proportional Control Gain (in your case it is K)&lt;/p&gt;&#xA;" OwnerUserId="15026" LastEditorUserId="15026" LastEditDate="2017-02-01T09:11:37.430" LastActivityDate="2017-02-01T09:11:37.430" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11320" PostTypeId="1" CreationDate="2017-01-04T13:27:38.813" Score="3" ViewCount="851" Body="&lt;p&gt;First of all, this might be a stupid or bad question but i am quite new to this topic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to build a rc transmitter (with some joystick buttons, an arduino and a hc-12 transceiver). I've searched a lot about this topic. But i still have a question that rests unanswered. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why is it necessary to use multiple channnels to control for example pitch,jaw,throttle of a quadcopter. &lt;a href=&quot;https://hobbyking.com/en_us/hobby-king-2-4ghz-6ch-tx-rx-v2-mode-2.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;transmitters in shops&lt;/a&gt; have 4 or 6 channels but i don't understand why these different channels are necessary. These transmitter send the information of each button over a different channel, why is this necassary?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it not possible to send the commands over one channel (all at the same frequency)? For example send p30 for a pitch of 30 degrees and j30 for a jaw of 30 degrees? Than, the receiver can interpret this as well?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I guess it is to send al the commands on the same time?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance &lt;/p&gt;&#xA;" OwnerUserId="15716" LastEditorUserId="15716" LastEditDate="2017-01-04T17:41:39.683" LastActivityDate="2017-01-17T14:02:53.760" Title="remote controlled quadcopter : Why is it not possible to send all the commands over one channel?" Tags="&lt;quadcopter&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11321" PostTypeId="2" ParentId="11304" CreationDate="2017-01-04T15:45:11.023" Score="1" Body="&lt;p&gt;tl;dr - You can't control the aircraft's side-to-side motion because you are only modifying &quot;thrust&quot;, which controls the up-and-down motion. If you want to control roll and pitch (side-to-side motion), then you need to write to each motor individually. There are other problems, too - read on for more. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;In looking at your code, I found a couple points where you might be having issues:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;You initialize &lt;code&gt;thrust&lt;/code&gt; to 20000, which means you enter the loop in the code. This locks you in the &lt;code&gt;while&lt;/code&gt; loop for an indeterminate amount of time. This is because you stay locked in the loop until you can get &lt;code&gt;thrust&lt;/code&gt; below 20000. The only way that you can decrement thrust is if you &lt;em&gt;both&lt;/em&gt; are at or above &lt;code&gt;max_thrust&lt;/code&gt; &lt;em&gt;and&lt;/em&gt; you have exceeded your time limit &lt;code&gt;run_time&lt;/code&gt;. If you just exceed &lt;code&gt;run_time&lt;/code&gt; but you are &lt;em&gt;not&lt;/em&gt; at or above &lt;code&gt;max_thrust&lt;/code&gt;, then you do &lt;em&gt;not&lt;/em&gt; decrement thrust. This is problematic because...&lt;/li&gt;&#xA;&lt;li&gt;You don't have any bounds checking on &lt;code&gt;thrust&lt;/code&gt;. The way your code is currently set up, you check if &lt;code&gt;thrust &amp;lt;= max_thrust&lt;/code&gt;, which means that if &lt;code&gt;thrust == max_thrust&lt;/code&gt;, you &lt;em&gt;enter&lt;/em&gt; the case and proceed to tack on another &lt;code&gt;thrust_step&lt;/code&gt; to your current &lt;code&gt;thrust&lt;/code&gt; value, putting &lt;code&gt;thrust = max_thrust + thrust_step&lt;/code&gt;. From that point on, your thrust is &lt;em&gt;strictly greater than&lt;/em&gt; &lt;code&gt;max_thrust&lt;/code&gt; and thus you cannot enter that &lt;code&gt;if&lt;/code&gt; statement ever again &lt;em&gt;unless&lt;/em&gt; your &lt;code&gt;thrust_multiplier&lt;/code&gt; is &lt;em&gt;exactly -1&lt;/em&gt;. This is an issue where...&lt;/li&gt;&#xA;&lt;li&gt;Say you detect the the aircraft is tipping and now your &lt;code&gt;thrust_multiplier&lt;/code&gt; is negative two. Well, you only modify &lt;code&gt;thrust&lt;/code&gt; if your current thrust is &lt;code&gt;&amp;lt;= max_thrust&lt;/code&gt; &lt;em&gt;OR&lt;/em&gt; your &lt;code&gt;thrust_multiplier == -1&lt;/code&gt;. As I state above, your code &lt;em&gt;will&lt;/em&gt; wind up with a &lt;code&gt;thrust&lt;/code&gt; value of &lt;code&gt;max_thrust + thrust_step&lt;/code&gt; and, with &lt;code&gt;thrust_multiplier = -2&lt;/code&gt;, you will not enter the statement that modifies thrust again. You will stay &quot;locked out&quot; of that statement until your elapsed time exceeds &lt;code&gt;run_time&lt;/code&gt;, at which point &lt;code&gt;thrust_multiplier&lt;/code&gt; gets set to &lt;code&gt;-1&lt;/code&gt;, which then &quot;unlocks&quot; that &lt;code&gt;if&lt;/code&gt; statement and (presumably) allows you to land. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;So, these are code issues right now. To summarize, you can exceed &lt;code&gt;max_thrust&lt;/code&gt; because you don't have bounds checking on &lt;code&gt;thrust&lt;/code&gt;, which then locks you out of being able to modify thrust again until you get &lt;code&gt;thrust_multiplier&lt;/code&gt; set to &lt;em&gt;exactly -1&lt;/em&gt;, which then only happens when you exceed the time limit. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, even if you fix this (add bounds checking to &lt;code&gt;thrust&lt;/code&gt; after you modify it!), you are still not likely to get the &quot;hover in place&quot; performance that you're looking for. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To be explicitly clear, I'm assuming you are actually &lt;em&gt;writing&lt;/em&gt; thrust correctly. I don't see where thrust is used beyond your modifying the value. I &lt;em&gt;do&lt;/em&gt; see that you wrote &lt;code&gt;self._cf.commander.send_setpoint(0, 0, 0, 0)&lt;/code&gt;; I'm not sure if that's the correct command or if you need to include &lt;code&gt;thrust&lt;/code&gt; somewhere in there or not. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyways, back to flight - you're not going to get the hover in place functionality you want for several reasons:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Biggest reason is that you appear to only be modifying the &lt;em&gt;total&lt;/em&gt; thrust. You check if the x gyro &lt;em&gt;OR&lt;/em&gt; the y gyro are reading over 75 and take the &lt;strong&gt;same action&lt;/strong&gt; regardless of which axis is rotating. If you wanted to &quot;correct&quot; the tip, then you need to modify the thrust about the particular axis that is &quot;tipping&quot;. &lt;strong&gt;SIDE NOTE&lt;/strong&gt; - You just check if the readings are &quot;over 75&quot; but there aren't any units there. Sub-problem (A) here is that a gyro outputs an angular &lt;em&gt;velocity&lt;/em&gt;, not an &lt;em&gt;angle&lt;/em&gt;, so you might not even be measuring the angle about that axis, and sub-problem (B) is those units might be &lt;em&gt;degrees&lt;/em&gt; or &lt;em&gt;radians&lt;/em&gt;. 75 radians is almost 4,300 degrees, or almost 12 revolutions. &lt;/li&gt;&#xA;&lt;li&gt;The next problem is that you just appear to &quot;land quickly&quot; if you detect a tipping condition. Once you set the &lt;code&gt;thrust_multiplier&lt;/code&gt; to &lt;code&gt;-2&lt;/code&gt;, there's no way in your loop to ever set it positive again. If you did modify your code to counter-act roll or pitch, you have no way of resetting it once you stabilized (or got close to stabilized).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;My advice:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Print the value of &lt;code&gt;thrust&lt;/code&gt; to your monitor and verify that it does exceed &lt;code&gt;max_thrust&lt;/code&gt; then enforce limit checking that caps &lt;code&gt;thrust&lt;/code&gt; at &lt;code&gt;max_thrust&lt;/code&gt;. &lt;/li&gt;&#xA;&lt;li&gt;Verify that &lt;code&gt;thrust&lt;/code&gt; is actually being used correctly. Can you hard-code a different value for thrust? Does that actually appear to make the change you expected?&lt;/li&gt;&#xA;&lt;li&gt;If you want to control roll and pitch, you need to write to the individual motors, not overall thrust.&lt;/li&gt;&#xA;&lt;li&gt;For roll and pitch control, you'll want something more sophisticated than just incrementing/decrementing the thrust by fixed amounts. Look up some flight controller PID control examples. If this is an open-source quadcopter then there should be a tutorial/manual published for the unit that would show you how to access those control gains. &lt;/li&gt;&#xA;&lt;li&gt;Even if you can get everything setup to control roll and pitch, your quality of control is really only ever as good as your feedback. If you are using a low-quality IMU then you'll get some pretty significant drift and there really isn't much you can do about it.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-01-04T15:45:11.023" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11322" PostTypeId="1" CreationDate="2017-01-04T16:10:28.673" Score="0" ViewCount="799" Body="&lt;p&gt;Is gmapping on OpenSLAM.org still maintained? Or is the maintenance entirely over in ROS ( &lt;a href=&quot;https://github.com/ros-perception/slam_gmapping/tree/hydro-devel/gmapping&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/ros-perception/slam_gmapping/tree/hydro-devel/gmapping&lt;/a&gt; ). When trying to compile gmapping without ROS I noticed that it still has Qt3 as a dependency which made me think no one uses or maintains OpenSLAM's gmapping anymore. Is this accurate? How does OpenSLAM's gmapping vs ROS's gmapping compare in terms of performance and accuracy?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="10828" LastActivityDate="2018-06-19T04:40:57.463" Title="Using gmapping without ROS?" Tags="&lt;localization&gt;&lt;slam&gt;&lt;ros&gt;&lt;mapping&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11323" PostTypeId="1" CreationDate="2017-01-04T21:00:42.823" Score="1" ViewCount="946" Body="&lt;p&gt;I am making a robotic device with the following servo motors.&#xA;How do I go about calculating the battery capacity?&#xA;It is supposed to run for 10 minutes.&#xA;I am bit confused as to use the no-load current or load current or the stall current to add up the amps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&#xA;Ro&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;HS-422  &lt;/li&gt;&#xA;&lt;li&gt;HS-485HB  &lt;/li&gt;&#xA;&lt;li&gt;HS-645MG &lt;/li&gt;&#xA;&lt;li&gt;HS-755HB&lt;/li&gt;&#xA;&lt;li&gt;HS-805BB&lt;/li&gt;&#xA;&lt;li&gt;HS-85BB&lt;/li&gt;&#xA;&lt;li&gt;HS-785HB&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="15719" LastEditorUserId="15719" LastEditDate="2017-01-04T21:06:51.767" LastActivityDate="2017-01-07T09:48:43.537" Title="How to calculate battery size for servo motors?" Tags="&lt;battery&gt;&lt;servomotor&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="11324" PostTypeId="1" AcceptedAnswerId="11326" CreationDate="2017-01-04T21:55:14.513" Score="1" ViewCount="493" Body="&lt;p&gt;In my project, there are two types of servos ( 6v and 12v supply needs ).&#xA;I need to power with the same battery. &#xA;How should I go about it?&#xA;Use a 6v battery with a step-up voltage regulator? &#xA;How does that impact the battery power calculations?&#xA;If voltage regulator should be used please recommend one.&#xA;Thanks&#xA;Ro&lt;/p&gt;&#xA;" OwnerUserId="15719" LastActivityDate="2017-01-04T23:03:25.637" Title="Powering a 6v servo and 12v servo" Tags="&lt;battery&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11325" PostTypeId="1" CreationDate="2017-01-04T23:02:43.790" Score="2" ViewCount="37" Body="&lt;p&gt;Am building a device that will use two stepper motors and a servo. One of the main requirements, is that the on-board &lt;strong&gt;battery&lt;/strong&gt; cannot exceed 9.6 volts.&#xA;The stepper motors have not been picked yet, and thus I have the option of choosing one with a lower voltage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which method would be the best:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Use two 12v stepper motors with a 9.6 volt battery, and simply have them run at lower voltage.&lt;/li&gt;&#xA;&lt;li&gt;Or, Use two 12v steppers, and use a DC to DC voltage booster to increase voltage to 12v. ( I don't know how well this would work, regarding constant current and whatnot.)&lt;/li&gt;&#xA;&lt;li&gt;Or, Use two 6v steppers, and use a ~6v battery. (Not fond of this idea, as 6v steppers seem to have much different specs than normal Nema17 12v ones. However, I would still use them if needed.)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="15559" LastEditorUserId="15559" LastEditDate="2017-01-04T23:13:19.990" LastActivityDate="2017-01-31T12:38:29.157" Title="Going around Voltage Limitation on Battery for Steppers?" Tags="&lt;battery&gt;&lt;stepper-motor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11326" PostTypeId="2" ParentId="11324" CreationDate="2017-01-04T23:03:25.637" Score="0" Body="&lt;p&gt;Sticking with a 6 volt battery would require you to use something like a boost converter, but the current to the servos would go down as a result. Current lowers in your circuit due to the increase in voltage as the equation P=V*I must be satisfied, where your P (power) is constant.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It will most likely be easier to use a 12 volt battery with a voltage regulatory to step down to 6 volts. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming you wont go over 1.5A on the 6V motor, you can use something like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.digikey.com/product-detail/en/micro-commercial-co/MC7806CT-BP/MC7806CT-BPMS-ND/804683&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.digikey.com/product-detail/en/micro-commercial-co/MC7806CT-BP/MC7806CT-BPMS-ND/804683&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="14923" LastActivityDate="2017-01-04T23:03:25.637" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11329" PostTypeId="2" ParentId="11313" CreationDate="2017-01-05T19:18:55.520" Score="1" Body="&lt;p&gt;Your equation is formed so that the angle can be zero only when the projection of the gravity vector onto the X axis is zero.  That gives zero when the system is oriented vertically, because the gravity vector is aligned with the -Y axis.  But you also will get a zero angle result if the gravity vector lies &lt;strong&gt;exactly&lt;/strong&gt; in the Y-Z plane, regardless of the system's angle to the vertical.  That's because there is no projection of the gravity vector into the X direction in that scenario, no matter how you twist the system about the X axis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/zL6vV.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zL6vV.png&quot; alt=&quot;a vector with respect to system axes&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you just want the angle of tilt of your system from the vertical, use:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;tilt = acos(-acc.Yaxis)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;which will be zero when your system is vertical, and +/- 90 degrees when the system is as far away from vertical as possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Angles must always be defined very specifically to match the way you want to use them.  I recommend drawing a diagram and using trigonometry to derive the equations that you use to compute them.  Don't forget that in 3D, multiple angles must always be applied in a specific order, and their values interact within the final result.&lt;/p&gt;&#xA;" OwnerUserId="2546" LastActivityDate="2017-01-05T19:18:55.520" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="11330" PostTypeId="2" ParentId="11320" CreationDate="2017-01-06T09:44:47.700" Score="1" Body="&lt;p&gt;It's a bit more complex than that. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically, it is &lt;em&gt;several channels&lt;/em&gt; multiplexed and all transmitted on &lt;em&gt;one channel&lt;/em&gt;, yet constantly being switched between &lt;em&gt;various channels&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That sounds confusing so let me explain what I mean.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's take as an example of a classic four &lt;em&gt;channel&lt;/em&gt; RC system. You'd have roll, yaw, pitch and throttle. Each control stick axis is on a separate channel electronically, but then they are multiplexed together into a single &lt;em&gt;channel&lt;/em&gt; and the receiver will demultiplex them back out into their various control channels so that each can move a servo or signal a microprocessor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the case of a DSM type transmitter this single multiplexed channel is encoded so that a single receiver alone (the one that you bind to) can understand your transmitter. This allows several users to coexist all in the same 2.4GHz band of frequencies. The fact that several users are all transmitting signals to their own vehicles at the same time potentially leads to interference problems and so the transmitter now uses frequency or &lt;em&gt;channel&lt;/em&gt; hopping algorithms in order to avoid the interference from all the other users nearby.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So here we have used the word channel to refer to several different things:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;several &lt;em&gt;channels&lt;/em&gt;, one for each dimension of control&lt;/li&gt;&#xA;&lt;li&gt;a single multiplexed &lt;em&gt;channel&lt;/em&gt; of info transmitted to the receiver&lt;/li&gt;&#xA;&lt;li&gt;signal hopping between various &lt;em&gt;channels&lt;/em&gt; to avoid interference&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;RC controllers have evolved through many generations and are quite good today at allowing numerous users to coexist in the same area.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sure, you could design a transmitter that sends all the information you want on a single radio &lt;em&gt;channel&lt;/em&gt; as &lt;a href=&quot;http://www.rcuniverse.com/forum/golden-age-vintage-antique-rc-196/9741452-2-4ghz-single-channel.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this person seems to have done&lt;/a&gt;. But I think that they would soon learn of the shortcomings of their design if they tried to use that one design on multiple vehicles at the same place and time.&lt;/p&gt;&#xA;" OwnerUserId="1075" LastActivityDate="2017-01-06T09:44:47.700" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11331" PostTypeId="2" ParentId="11323" CreationDate="2017-01-06T16:35:54.510" Score="2" Body="&lt;p&gt;This typically requires a bit of testing with your actual payload. You can try to model it mathematically, but it's easier and more accurate to just plug it in and measure the current draw.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Current draw in a motor increases with the amount of torque required. No load current is how much current the servo will draw if you move it with nothing attached to the shaft at all. The stall current is how much it will draw if you clamp the shaft in place (say, with a vice grip) and tell it to move. Keeping that in mind, your real-world current draw will be somewhere in between those two numbers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A reasonable approximation for an arm like you're building would be to measure the average current for each time you pick up and move your payload and how long that (averaged out) current draw occurs for per motion. If you know how many of those motions per minute you need to do (or more conservatively, are capable of doing), then you can figure out how much power you're going to draw over the course of your 10 minute runtime.&lt;/p&gt;&#xA;" OwnerUserId="308" LastActivityDate="2017-01-06T16:35:54.510" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11332" PostTypeId="1" AcceptedAnswerId="11334" CreationDate="2017-01-06T19:29:25.873" Score="1" ViewCount="685" Body="&lt;p&gt;I've read that recent Roomba 6XX from iRobot got a serial connector, but I removed the cover on my Roomba 681, and I haven't found any. From what I've found, 681 hasn't the same cover than other 6XX robots. Does this model have an accesible serial port?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/fZy84.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fZy84.jpg&quot; alt=&quot;Roomba 681&quot;&gt;&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="15732" LastActivityDate="2018-09-01T20:47:23.467" Title="Does iRobot 681 have a serial interface?" Tags="&lt;irobot-create&gt;&lt;serial&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11333" PostTypeId="2" ParentId="11323" CreationDate="2017-01-07T09:48:43.537" Score="0" Body="&lt;p&gt;First, can you add as much battery as you wanted? Meaning, is there a technical or score-wise drawback to the amount of battery? Or mass?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does the servo load increase with the increased battery amount? (Probably not). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The above considerations would require a precise battery sizing. Otherwise, taking a rough estimation and then buying one size bigger and smaller batteries would be the fastest and most pragmatic road to success. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you do not want to purchase unnecessary items, you can calculate the energy consumption using power utilization as below:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) divide the total operational time into phases. Like, phase 1. startup and waiting&#xA;Phase 2. Competition run&#xA;Phase 3. Wait for Xxx&#xA;Phase 4. Run-2&#xA;Phase 5. Finished and waiting&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) In each of these phases determine the power drawn from the battery, and multiply that with the amount of time of that phase. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;3) And when you find the exact number, add 20% for uncertainties. This would help select the required battery. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Notes: 1) temperature is ignored (assume the competition is indoors). &#xA;2) validating this method can be done by literally testing it 2-3 times for especially the operational cases (competition runs). &lt;/p&gt;&#xA;" OwnerUserId="9570" LastActivityDate="2017-01-07T09:48:43.537" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11334" PostTypeId="2" ParentId="11332" CreationDate="2017-01-07T15:44:18.990" Score="3" Body="&lt;p&gt;The 68x series has a Mini-DIN connector on the top surface, toward the robot's right side, but it's now under the translucent diffuser surrounding the buttons. It is held in by snaps. Lift the handle, stick your fingers under, and pull the plastic piece up and out.&lt;a href=&quot;https://i.stack.imgur.com/G9Hji.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/G9Hji.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please note that I am an iRobot employee, but the postings on this site are my own and don't necessarily represent iRobot's positions, strategies, or opinions.&lt;/p&gt;&#xA;" OwnerUserId="7665" LastEditorUserId="7665" LastEditDate="2018-07-18T13:27:52.433" LastActivityDate="2018-07-18T13:27:52.433" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11335" PostTypeId="2" ParentId="11088" CreationDate="2017-01-07T20:05:39.290" Score="0" Body="&lt;p&gt;Specific number? no. there will be some inaccuracy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also note that your servo output is a period of time at high voltage, then a long gap at ground. So if you just use analogRead then you will only ever get high or low value (seemingly at randomly as your Arduino and ardupilot drift in and out of phase).&#xA;You would have to (unless there already exists a library) time the ms the channel stays high for.&#xA;Or you could try and smooth this signal with a capacitor and use analogRead as normal (very inaccurate BTW, but could easily determine an on/off signal from a transmitter).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively, use I2C, this will allow you to send precise data between your 2 devices. But you will have to find out how to instruct your Ardupilot on what to send over the I2C bus.&lt;/p&gt;&#xA;" OwnerUserId="15739" LastActivityDate="2017-01-07T20:05:39.290" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11337" PostTypeId="1" CreationDate="2017-01-08T09:52:21.983" Score="0" ViewCount="142" Body="&lt;p&gt;I am working on a project and I need to know what is the exact model number of the CPU that is in the Lego Mindstorms RCX 1.0 . It would be nice if you listed the specs of the CPU, beacause I am looking for its MIPS performance.&lt;/p&gt;&#xA;" OwnerUserId="15746" LastActivityDate="2017-01-09T14:11:21.983" Title="Lego Mindsotrms RCX 1.0 CPU" Tags="&lt;microcontroller&gt;&lt;mindstorms&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11338" PostTypeId="2" ParentId="11337" CreationDate="2017-01-08T11:41:58.007" Score="1" Body="&lt;p&gt;From wikipedia follows, that it is a 8-bit Renesas/Hitachi H8/300 16 MHz CPU with 32KB RAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Source: &lt;a href=&quot;https://en.wikipedia.org/wiki/Lego_Mindstorms&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Lego_Mindstorms&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13043" LastEditorUserId="13043" LastEditDate="2017-01-08T11:55:58.060" LastActivityDate="2017-01-08T11:55:58.060" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11340" PostTypeId="2" ParentId="11298" CreationDate="2017-01-08T14:57:02.460" Score="0" Body="&lt;p&gt;I would say gyroscopes, they are what is used in every other engineering discipline. However, I have no experience using gyroscopes with robotics. &lt;/p&gt;&#xA;" OwnerUserId="15676" LastActivityDate="2017-01-08T14:57:02.460" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="11341" PostTypeId="1" CreationDate="2017-01-08T15:48:44.667" Score="2" ViewCount="74" Body="&lt;p&gt;Is there a possibility of making robots which utilise  raw materials to create more versions of themselves? Clarifying the point what I would like to ask is that whether there are are any projects or research on robots that can reproduce!!!&lt;/p&gt;&#xA;" OwnerUserId="15750" LastEditorUserId="37" LastEditDate="2017-01-11T10:08:12.653" LastActivityDate="2017-01-11T10:08:12.653" Title="Are the any self reproducing robots?" Tags="&lt;manufacturing&gt;" AnswerCount="0" CommentCount="7" ClosedDate="2017-01-10T10:38:45.833" ContentLicense="CC BY-SA 3.0" />
  <row Id="11343" PostTypeId="2" ParentId="11337" CreationDate="2017-01-09T14:11:21.983" Score="-1" Body="&lt;p&gt;I tried looking it up on wikipedia, but there was only the group of processors listed in the article and not the exact CPU model, so I could not find out its specs, because there are multiple CPU of the kind, mentioned in the wikipedia article.&lt;/p&gt;&#xA;" OwnerUserId="15747" LastActivityDate="2017-01-09T14:11:21.983" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11344" PostTypeId="2" ParentId="3159" CreationDate="2017-01-09T15:45:30.000" Score="1" Body="&lt;p&gt;To help people who may find this answer later, it's worth knowing that iRobot just published a guide to connect the Create 2 to ROS and a PrimeSensor; it can be found at &lt;a href=&quot;http://www.irobotweb.com/~/media/MainSite/PDFs/About/STEM/Create/Create2_PrimeSense.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.irobotweb.com/~/media/MainSite/PDFs/About/STEM/Create/Create2_PrimeSense.pdf&lt;/a&gt; .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt; Please note that I am an iRobot employee, but the postings on this site are my own and don't necessarily represent iRobot's positions, strategies, or opinions. &lt;/sup&gt;&lt;/p&gt;&#xA;" OwnerUserId="7665" LastEditorUserId="7665" LastEditDate="2018-07-18T13:39:50.983" LastActivityDate="2018-07-18T13:39:50.983" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11345" PostTypeId="2" ParentId="11320" CreationDate="2017-01-10T04:24:11.840" Score="0" Body="&lt;p&gt;Arduino, HC-12 transceivers and a KY-023-type X and Y Joystick?&#xA;I shall be able to respond it to you in a few days time.&#xA;I got my remote control already working, a 50k Potentiometer to send to the ESC on the plane the motor speed that I desire and the KY-023. I am using an Arduino Nano (Micro or Uno would work great as well), however, on the receiver side(plane), I am using an Arduino based on Atmega32u4, a little more expensive. Why? For better performance, and in order to avoid interference with the servos, so you need a physical serial UART port, and the other Arduinos(with the exception of the 32u4-based and the Mega) have only one, witch is used to upload the code and debug (the Serial instance). This one has Serial and Serial1, Serial1 being represented by a pair of distinct pins on the board, that provides you with a hardware-based serial UART interface (avoiding running the HC-12 over a software-based one) that will give you better IO performance and also avoid conflicts with the Servo.h lib that uses Timer1. The only reason that I can't give you the answer now, is that I burned my receiver by accident while connecting it to a drop-down voltage regulator in order to start outdoor testing. Indoors it was moving the servos with quite acceptable delay, however, due to current limitations I had to buy those external power supplies, coz the onboard ones were not holding voltage while dealing with 2 servos plus the transceiver. I was using factory default configuration, Serial1 set to 9600bps. Data format is: 1000,110,89 -&gt; First value meant to be ESC speed control, second one to be X servo position and third to be Y servo position. The manual(datasheet) says it has a time between 4-80mS per byte sent, so, do not abuse it. I also read that if you send and receive too much data at the same time, it gets as slow as 1 sec. per cycle. So this is it! As soon as I get a new board I will start outdoor testing and post the results.&lt;/p&gt;&#xA;" OwnerUserId="15760" LastEditorUserId="15760" LastEditDate="2017-01-10T04:39:43.123" LastActivityDate="2017-01-10T04:39:43.123" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11347" PostTypeId="2" ParentId="8432" CreationDate="2017-01-10T09:09:00.057" Score="0" Body="&lt;p&gt;Use single ultrassonic sensor with DOF mechanism &amp;amp; try use arduino board,&#xA;create a node for gmapping use ultrasonic simple arduino code swap the variable in gmapping node code. Once you get distance it would easy for you to publish these variable of a network you can use as you want.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The most difficult task is swapping variable in arduino code. You must use your programming skills for swapping these variable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One thing I'm not sure about rate of &quot;distance variable&quot;, it would be sufficient or not for gmaaping. Maybe by using laser sensor rate of distance variable is higher.&lt;/p&gt;&#xA;" OwnerUserId="15764" LastEditorUserId="37" LastEditDate="2017-01-10T10:32:23.660" LastActivityDate="2017-01-10T10:32:23.660" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11350" PostTypeId="2" ParentId="10472" CreationDate="2017-01-10T13:31:35.570" Score="1" Body="&lt;p&gt;I suspect you may have a bad cable. Have you verified that the pin is changing level on the end of the Mini-DIN (with a voltmeter)? If it is not, and you are using an iRobot cable, contact create@irobot.com referencing this post.&lt;/p&gt;&#xA;" OwnerUserId="7665" LastActivityDate="2017-01-10T13:31:35.570" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11352" PostTypeId="1" AcceptedAnswerId="11358" CreationDate="2017-01-10T17:46:42.010" Score="4" ViewCount="225" Body="&lt;p&gt;I'm designing a joint which will have to move with a velocity of ~60RPM and I have to come up with resolution requirement for the encoders within this joint. I notice however that this is easier said than done.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A 1m beam will be connected to the joint, I figured I would need to know the position of the tip of the beam with a resolution of approximately 1mm. with some simple calculations I found that for this a 12-bit encoder will be sufficient.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I was wondering whether this would be sufficient to actually control the joint in a smooth manner. I found some information about how the resolution influences the joint behavior but didn't find anything about how to use this to find resolution requirements. For example I found:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&quot;When you tune the constants right, you should be able to run your arm&#xA;  at a constant speed. However, this is dependent that you have a fairly&#xA;  high-resolution encoder,&quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I have no idea what a &quot;fairly high-resolution encoder&quot; is. I was wondering if any of you have any experience with this or know any methods to determine the required resolution.&lt;/p&gt;&#xA;" OwnerUserId="15496" LastActivityDate="2019-03-11T11:15:11.593" Title="How do I determine the required encoder resolution for a control system?" Tags="&lt;control&gt;&lt;sensors&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11353" PostTypeId="2" ParentId="5283" CreationDate="2017-01-10T18:28:22.973" Score="3" Body="&lt;p&gt;This is another more recent one, based on the paper &lt;a href=&quot;http://vision.in.tum.de/_media/spezial/bib/engel2016monodataset.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;A Photometrically Calibrated Benchmark For Monocular Visual Odometry by Engel et al&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://vision.in.tum.de/data/datasets/mono-dataset&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://vision.in.tum.de/data/datasets/mono-dataset&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This gives both indoor and outdoor scenes, with calibration (or the corresponding sequences so you can calibrate yourself). I haven't tested it fully myself but it seems a rather complete dataset.&lt;/p&gt;&#xA;" OwnerUserId="15770" LastActivityDate="2017-01-10T18:28:22.973" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11354" PostTypeId="1" CreationDate="2017-01-10T20:45:34.803" Score="0" ViewCount="60" Body="&lt;p&gt;I have a quadcopter using image processing to detect shapes on the ground to the determine x,y position. It works ok. My problem is that if the illumination isnt perfect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;I would like to know if there's a way to fuse the image processing data with another kind of way to find the position x,y of the quadcopter.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;My teacher told me about Bluetooth Low Energy&lt;/em&gt; and some beacons but I dont think it will work.&lt;/p&gt;&#xA;" OwnerUserId="15772" LastActivityDate="2017-01-11T19:46:23.230" Title="Locate a quadcopter in x,y space" Tags="&lt;quadcopter&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2017-01-11T10:32:24.997" ContentLicense="CC BY-SA 3.0" />
  <row Id="11355" PostTypeId="2" ParentId="11354" CreationDate="2017-01-11T00:45:05.173" Score="1" Body="&lt;p&gt;There are a number of things you can do, the first is it seams that you have the opportunity to increase your computer vision systems effectiveness, I am unsure what you are doing now but off the top of my head:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Do your work in the &lt;a href=&quot;https://en.wikipedia.org/wiki/HSL_and_HSV&quot; rel=&quot;nofollow noreferrer&quot;&gt;HSV&lt;/a&gt; space instead of the &lt;a href=&quot;https://en.wikipedia.org/wiki/RGB_color_model&quot; rel=&quot;nofollow noreferrer&quot;&gt;RGB&lt;/a&gt; space it generally gives better results becouse it splits the actual color from the brightness or hue&lt;/li&gt;&#xA;&lt;li&gt;Use easier to identify glyphs, tune the sizes and types to suit your environment, generally if your lighting is going to be consistent you can use colored glyphs which can allow you to make them smaller, or if you have widely variable lighting conditions you can use black and white glyphs, which will reduce your information density somewhat.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;But if you want to use another localization method as well, you can use one of the simple radio location methods, that uses &lt;a href=&quot;https://locatify.com/blog/indoor-positioning-systems-ble-beacons/&quot; rel=&quot;nofollow noreferrer&quot;&gt;BLE or Wifi&lt;/a&gt;, which generally will integrate all the bluetooth (or wifi) stations within range calculating the round trip time to them, as well as the received power in dB, they can then use the predetermined station locations and the approximate distances in order to calculate a xy, or xyz location. Generally in practice the location accuracy can be very poor, around 10-20ft.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another location technology that can give better readings is a Ultra Wideband system like &lt;a href=&quot;https://www.pozyx.io/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pozyx&lt;/a&gt; based on the &lt;a href=&quot;http://www.decawave.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Decawave&lt;/a&gt; system (which has some &lt;a href=&quot;https://github.com/thotro/arduino-dw1000&quot; rel=&quot;nofollow noreferrer&quot;&gt;Open Source Libraries&lt;/a&gt; available). These can give you an accuracy better than 10 cm but can get pretty expensive depending on the area you need to cover.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally for indoor robotics research there is the 8,000lb gorilla, the Motion Capture Systems like &lt;a href=&quot;https://www.vicon.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Vicon&lt;/a&gt;, and &lt;a href=&quot;http://www.qualisys.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Qualisys&lt;/a&gt;. These systems can run $50K or more, but can give you amazing volumes of information like 1cm accuracy at 100 or 500 Hz depending on your setup.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This all assumes your inside, if your outside you might want to check out systems like &lt;a href=&quot;https://en.wikipedia.org/wiki/Real_Time_Kinematic&quot; rel=&quot;nofollow noreferrer&quot;&gt;RTK GPS&lt;/a&gt;, and &lt;a href=&quot;https://en.wikipedia.org/wiki/Differential_GPS&quot; rel=&quot;nofollow noreferrer&quot;&gt;DGPS&lt;/a&gt;. both can give you sub 10cm locations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can take all the information you get from sources like this, along with your vehicle's Gyroscope, Accelerometer and Magnetometer, and throw it into a &lt;a href=&quot;https://en.wikipedia.org/wiki/Kalman_filter&quot; rel=&quot;nofollow noreferrer&quot;&gt;Kalman Filter&lt;/a&gt; in order to get the best possible location estimate.&lt;/p&gt;&#xA;" OwnerUserId="7066" LastEditorUserId="7066" LastEditDate="2017-01-11T19:46:23.230" LastActivityDate="2017-01-11T19:46:23.230" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11356" PostTypeId="2" ParentId="5283" CreationDate="2017-01-11T11:08:35.497" Score="3" Body="&lt;p&gt;&lt;a href=&quot;http://vision.in.tum.de/data/datasets/rgbd-dataset&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://vision.in.tum.de/data/datasets/rgbd-dataset&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a set of recordings for the Kinect and Asus Xtion pro, which are all indoors (in offices and a hangar). It comes with precise ground truth from a motion capturing system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The data is available as ROS bag files, but also as a tarball with png images with a text file for the trajectory. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are also some scripts to benchmark your results against the ground truth.&lt;/p&gt;&#xA;" OwnerUserId="15778" LastActivityDate="2017-01-11T11:08:35.497" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11357" PostTypeId="2" ParentId="6508" CreationDate="2017-01-11T16:54:48.093" Score="1" Body="&lt;p&gt;Not sure how well this will run on a Raspberry Pi but the Zed stereo camera does most of the processing istelf with makes it ideal for this type of thing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.stereolabs.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.stereolabs.com/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15781" LastActivityDate="2017-01-11T16:54:48.093" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11358" PostTypeId="2" ParentId="11352" CreationDate="2017-01-11T18:53:59.783" Score="9" Body="&lt;p&gt;First I would question your math that got you to the 12b sensor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have a $dy$ of 1 mm over an arm that is $r = 1$ m long, then $\sin(\theta) = dy/r \rightarrow \theta = \mbox{asin}(dy/r)$. If you make the small angle approximation $\sin{\theta} \approx \theta$, then $\theta \approx dy/r$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is $\theta$ in radians, so you're looking at a full circle (complete revolution) of 2$\pi$. In order to resolve $\theta$, you need a &quot;segment&quot; of the circle to be &lt;em&gt;at most&lt;/em&gt; the size of $\theta$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If $\theta \approx dy/r$, then $\theta \approx 0.001/1 = 0.001$. For a full revolution of $2\pi \approx 6.283$, you're going to need there to be $(6.283/0.001)$ &quot;segments&quot; in the revolution, or 6,283. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A 12 bit sensor has a range of [0,(2^12)-1], or [0,4095]. This means that you only get 4096 segments of the revolution, and each segment spans an arc of 0.0015 radians. This corresponds to about (again, small angle approximation) a $dy \approx 1.5$mm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you need to bump the sensor resolution by at least double, to a 13b sensor. This gets you 2^13 segments, 8,192, putting your smallest measurable $dy$ around 0.77 mm. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're looking to &lt;em&gt;control&lt;/em&gt; to that degree of precision, you need to be sure that your signal doesn't get lost in the noise. Typically a datasheet will give a specification to accuracy and/or noise in terms of the least significant bit. Generally this would be something like +/- 3 LSB or +/- 5 LSB, etc. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, in this case, with a 13b sensor, the least significant bit represents 0.77 mm in your system, so you're trying to control to +/- 1mm but your noise, at +/- 3 LSB, is actually +/- 2.3 mm, so that's not possible. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Increase the resolution to 14b to half the LSB, and then your +/- 3 LSB becomes half of the +/- 2.3 mm, or about +/- 1.15 mm. So, maybe then that's still not reasonable for you. I don't recall seeing 15b sensors even though 13b seems to be relatively common. That means you'd probably go on up to a 16b sensor. This puts the LSB at one fourth the value of the 14b sensor, or one fourth of +/- 1.15 mm. Now you're looking at noise of just under +/- 0.3mm. This is probably the sensor you would want to use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now you'll also see why industrial controls, unlike academic controls, generally don't use a derivative (D) term in the PID controller. Industrial controls are generally just PI controllers because the derivative term is so sensitive to noise. In the example above, you could very realistically get a swing from -3 LSB to +3 LSB, or -0.3mm to +0.3mm, in one sample period, and that's &lt;em&gt;IF&lt;/em&gt; the system being measured doesn't move. At a relatively low sample rate of 25Hz, 0.6 mm/0.04 s = 15 mm/s, or a &quot;phantom&quot; speed of over half an inch per second. This signal goes &lt;strong&gt;up&lt;/strong&gt; the faster your sample time is, leading to very large incorrect readings. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, tl;dr - pick a sensor that gets the &lt;strong&gt;signal&lt;/strong&gt; on par with what you're trying to control. Sensors all have noise and choosing the sensor that &lt;em&gt;barely&lt;/em&gt; meets your requirements is not the right way to do it. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-01-11T18:53:59.783" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11359" PostTypeId="1" CreationDate="2017-01-12T07:45:01.933" Score="5" ViewCount="1919" Body="&lt;p&gt;so I am working on a Self Balancing Bot with Arduino Mega. I'm using 12V 200 RPM motors with built in 840 PPR quadrature encoders. The torque rating is as follows:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Rated Torque: 2.4 Kg-cm&#xA;Stall Torque: 6 Kg-cm&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As of now I've implemented a simple PID controller (based on Brett Beauregard's PID library) to minimize only the tilt angle error. Still haven't implemented PID using the encoder for the position error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've tried a lot to tune the PID values. The robot is quite stable when it is standing its own. However, here's the issue, when the robot tilts by an angle greater than 7-8 degrees (or when it is pushed slightly) from its stable position, the motors start rotating at the maximum speed (PWM: 255) and the robot still doesn't seem to recover back and just keeps running and then finally falls down in the direction in which it was moving. It doesn't seem to recover at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it just a problem with the PID tuning? As I said earlier, it's stable for the range -5 to +5 degrees (0 degrees is the upright position) without oscillating much. However it is not able to recover for errors greater than 7 degrees.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or could this be an issue with the robot being too heavy and insufficient counter motor torque? Total weight of the robot is around 1 kg (including the motors). I'm using 2200 mAh LiPo battery and have placed it at the highest level so as to decrease the angular acceleration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would implementing the PID feedback for encoders as well solve this issue? Also do suggest some links on how to implement dual PID using an IMU and encoders to correct tilt angle and position. I'm planning to use cascaded PID controllers in which the encoder PID measures the error in position and its output will be the set-point for the angle PID loop which in turn will control the PWM of the motors. So if there's an offset in position the angle set-point will change to, let say -2 degrees (from upright 0 degrees). So now the angle PID will make the robot move in order to correct the angle offset and therefore the position error also gets corrected. Is this a good method. Any other suggestions or different approaches to this?&lt;/p&gt;&#xA;" OwnerUserId="15516" LastActivityDate="2017-01-12T10:31:13.847" Title="Balance Bot PID tuning" Tags="&lt;arduino&gt;&lt;pid&gt;&lt;balance&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11360" PostTypeId="2" ParentId="11359" CreationDate="2017-01-12T10:31:13.847" Score="4" Body="&lt;p&gt;Just a hint from my extensive experience from self balancing robots:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The most important aspect of a self balancing robot, is the actuator acceleration (torque) control.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;(...) the motors start rotating at the maximum speed (PWM: 255) and the robot still doesn't seem to recover back and just keeps running and then finally falls down in the direction in which it was moving. It doesn't seem to recover at all.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Because to balance, the robot needs shifts in velocity, i.e. acceleration (produced by motor torque). If your motor saturates, the control cannot execute the balancing action: accelerate to shift the center of mass.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Furthermore, the relationship between the tilt angle, and the required motor acceleration is not linear. i.e. to recover from 5 deg may require 0.1 N.m from the motors, and to recover from 7 deg may require 1.0 N.m.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Would implementing the PID feedback for encoders as well solve this issue?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You definitely should have PID for motor control. How do you make sure the motors are performing the velocity/torque that the balancing PID requested?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I'm planning to use cascaded PID controllers in which the encoder PID measures the error in position and its output will be the set-point for the angle PID loop which in turn will control the PWM of the motors. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yest, looks good! See similar question: &lt;a href=&quot;https://robotics.stackexchange.com/questions/11298/self-balancing-robot-control-system-strategies/&quot;&gt;Self balancing robot control system strategies&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13361" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2017-01-12T10:31:13.847" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="11361" PostTypeId="5" CreationDate="2017-01-12T15:11:39.260" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2017-01-12T15:11:39.260" LastActivityDate="2017-01-12T15:11:39.260" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11362" PostTypeId="4" CreationDate="2017-01-12T15:11:39.260" Score="0" Body="Multi-rotor is a rotorcraft with more than two rotors. Multi-rotors can be quadcopter, tricopter, octocopter, hexacopter etc." OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-01-12T15:23:31.227" LastActivityDate="2017-01-12T15:23:31.227" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11363" PostTypeId="5" CreationDate="2017-01-12T15:32:26.563" Score="0" Body="&lt;p&gt;Navigation includes:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;exploration: the strategy that guides the robot to select the next direction to go&lt;/li&gt;&#xA;&lt;li&gt;mapping: the construction of a spatial representation by using the sensory information perceived.&lt;/li&gt;&#xA;&lt;li&gt;localization: the strategy to estimate the robot position within the spatial map&lt;/li&gt;&#xA;&lt;li&gt;path planning: the strategy to find a path towards a goal location being optimal or not&lt;/li&gt;&#xA;&lt;li&gt;path execution: where motor actions are determined and adapted to environmental changes. &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-01-13T09:47:18.397" LastActivityDate="2017-01-13T09:47:18.397" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11364" PostTypeId="4" CreationDate="2017-01-12T15:32:26.563" Score="0" Body="Navigation is a field of study that focuses on the process of monitoring and controlling the movement of a craft or vehicle from one place to another. Robot navigation includes exploration, mapping, localization, path planning and path execution" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-01-13T09:46:47.600" LastActivityDate="2017-01-13T09:46:47.600" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11365" PostTypeId="5" CreationDate="2017-01-12T15:33:27.543" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2017-01-12T15:33:27.543" LastActivityDate="2017-01-12T15:33:27.543" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11366" PostTypeId="4" CreationDate="2017-01-12T15:33:27.543" Score="0" Body="path planning is the strategy to find a path towards a goal location being optimal or not" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-01-13T09:46:36.793" LastActivityDate="2017-01-13T09:46:36.793" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11367" PostTypeId="5" CreationDate="2017-01-12T15:34:10.580" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2017-01-12T15:34:10.580" LastActivityDate="2017-01-12T15:34:10.580" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11368" PostTypeId="4" CreationDate="2017-01-12T15:34:10.580" Score="0" Body="mapping is the construction of a spatial representation by using the sensory information perceived" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-01-13T09:47:10.047" LastActivityDate="2017-01-13T09:47:10.047" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11369" PostTypeId="5" CreationDate="2017-01-12T15:35:22.377" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2017-01-12T15:35:22.377" LastActivityDate="2017-01-12T15:35:22.377" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11370" PostTypeId="4" CreationDate="2017-01-12T15:35:22.377" Score="0" Body="Motion planning (also known as the navigation problem or the piano mover's problem) is a term used in robotics for the process of breaking down a desired movement task into discrete motions that satisfy movement constraints and possibly optimize some aspect of the movement." OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-01-13T09:46:59.870" LastActivityDate="2017-01-13T09:46:59.870" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11372" PostTypeId="1" CreationDate="2017-01-13T13:20:59.323" Score="4" ViewCount="2050" Body="&lt;p&gt;I have been searching for days looking for a dedicated software for easily draw kinematic diagrams of robotics like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/nwvIN.png&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/nwvIN.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I came by &lt;a href=&quot;http://alexdu.github.io/sketch-lib/&quot;&gt;this software&lt;/a&gt; but it is a bit hard to grasp. Is there any GUI based software instead?&lt;/p&gt;&#xA;" OwnerUserId="15791" LastActivityDate="2017-04-29T01:49:17.657" Title="Any free or paid software for graphical drawing of Robotics Kinematic Scheme?" Tags="&lt;kinematics&gt;" AnswerCount="0" CommentCount="3" FavoriteCount="1" ClosedDate="2017-05-01T10:17:17.843" ContentLicense="CC BY-SA 3.0" />
  <row Id="11373" PostTypeId="1" CreationDate="2017-01-13T17:14:27.073" Score="2" ViewCount="3017" Body="&lt;p&gt;I'm working on pick and place robotic arm with 4 dof. I'm using MATLAB for inverse kinematics. But, I want to know how to decide links length. Say, I have four point in space upto where my robotic arm should reach i.e at upper most point, lower most point, extreme right point and extreme left point.I want theory or any approach so that I can calculate link length using these points.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: Add picture of robotic arm.&lt;a href=&quot;https://i.stack.imgur.com/CtdN6.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/CtdN6.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="14024" LastEditorUserId="14024" LastEditDate="2017-01-15T16:42:41.190" LastActivityDate="2017-01-20T05:47:39.120" Title="How to decide links length of manipulator?" Tags="&lt;robotic-arm&gt;&lt;manipulator&gt;" AnswerCount="3" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="11377" PostTypeId="2" ParentId="1564" CreationDate="2017-01-14T17:29:55.943" Score="3" Body="&lt;p&gt;A better approach would be to first ssh into the remote computer. In the remote terminal, run&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;export MASTER_URI = http://IP_address_master:Port_number&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where &lt;code&gt;IP_address_master&lt;/code&gt; should be the IP address of the computer on which you want to run the master node. IP address could either be of your local machine or remote computer. &lt;code&gt;Port_number&lt;/code&gt; is the port of your master node (generally it is &lt;code&gt;11311&lt;/code&gt;). On the same terminal, run&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;export ROS_IP = IP_address_remote&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where &lt;code&gt;IP_address_remote&lt;/code&gt; is the IP of your remote computer.&#xA;In the terminal of your local machine (not the one where you are running ssh from), run the following commands:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;export MASTER_URI = http://IP_address_master:Port_number&#xA;export ROS_IP = IP_address_local&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where, &lt;code&gt;IP_address_master&lt;/code&gt; and &lt;code&gt;Port_number&lt;/code&gt; is same as above but &lt;code&gt;IP_address_local&lt;/code&gt; should be the IP address of your local computer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, you are ready to launch the file from your remote terminal. Your no longer require a separate launch file. In the ssh terminal, run the launch file &lt;code&gt;kinect_left.launch&lt;/code&gt; directly as:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;roslaunch openni_launch_marvin kinect_left.launch&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="15798" LastActivityDate="2017-01-14T17:29:55.943" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11384" PostTypeId="2" ParentId="10169" CreationDate="2017-01-15T22:49:09.767" Score="0" Body="&lt;p&gt;You do not require &quot;Linux kernel development&quot; or &quot;device driver development in Linux&quot; before starting ROS. As ROS allows you to write programs in either C++ or python, familiarity with these two languages would be helpful. As you are familiar with C, learning C++ may not be that difficult. In addition to that, familiarity using linux terminal would be beneficial. However, even if you are not comfortable with linux terminal, you can start learning ROS. In that case, first start following the ROS tutorials step-by-step and if you are not familiar with commands mentioned in the tutorials you can always search what actions those commands perform. I would suggest you to start the ROS tutorials and always learn the dependencies on the go.&lt;/p&gt;&#xA;" OwnerUserId="15798" LastActivityDate="2017-01-15T22:49:09.767" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11388" PostTypeId="1" AcceptedAnswerId="12857" CreationDate="2017-01-16T18:13:11.613" Score="0" ViewCount="1118" Body="&lt;p&gt;The purpose of the SLAM system is very specific, for detecting cones in an image and triangulate their position to create a map.&lt;br&gt;&#xA;The data input would be the camera data, odometry and the LIDAR data.&lt;br&gt;&#xA;I have been going through SLAM algorithms on &lt;a href=&quot;http://openslam.org&quot; rel=&quot;nofollow noreferrer&quot;&gt;openSLAM.org&lt;/a&gt; and through other implementations of SLAM systems.&lt;br&gt;&#xA;I would like to know if there are a set of SLAM algorithms specific for the problem I have and what are the most efficient and least time consuming SLAM algorithms available. Any leads would be helpful. &lt;/p&gt;&#xA;" OwnerUserId="15813" LastActivityDate="2017-07-19T11:55:20.813" Title="SLAM system for LIDAR and Stereo camera for cone detection for Autonomous driving" Tags="&lt;slam&gt;&lt;autonomous-car&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11389" PostTypeId="2" ParentId="11388" CreationDate="2017-01-16T20:48:06.890" Score="0" Body="&lt;p&gt;I did a little search and I found some existing research for cone detections in Youtube. One of them is:&#xA;OpenCV Traffic Cone Detection Tutorial in Visual Basic&#xA;&lt;a href=&quot;https://youtu.be/Y7SkyY58aUw&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://youtu.be/Y7SkyY58aUw&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I saw in the title you mentioned LIDAR and Stereo camera, however, in the first sentence you just mentioned image rather than 3D point cloud. So I wonder if you mean to get a 3D map first and then detect cones from the 3D map. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as I know it is a really challenge to detect objects in 3D maps. It just like an extension of the image processing problem in RGB images.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe you want to learn something like this. It seems to be a cutting-edge technology.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Real-Time Semi-Automatic Object Detection and Measurement with Intel RealSense&#xA;&lt;a href=&quot;https://www.youtube.com/watch?v=nH-bKOZjOec&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=nH-bKOZjOec&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you don't mind the short detect range, the RGBD camera like Intel RealSense should be a good option for you.&lt;/p&gt;&#xA;" OwnerUserId="15667" LastActivityDate="2017-01-16T20:48:06.890" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11392" PostTypeId="2" ParentId="11373" CreationDate="2017-01-17T01:44:47.620" Score="0" Body="&lt;p&gt;I don't think there is a theoretically best set of link lengths for a set of end-effector poses.  Since inverse kinematics is typically only concerned with the ability or not of achieving the target pose.  So if you find a set that can achieve all 4 poses, then IK doesn't help much more.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Best&lt;/em&gt; means optimizing some metric.  &lt;a href=&quot;https://robotics.stackexchange.com/questions/9228/evaluating-the-similarity-of-two-7-degree-of-freedom-arms/9230#9230&quot;&gt;My answer to this question&lt;/a&gt; lists a number of metrics you can use to evaluate a given arm configuration and compare it to another.  For example: distance from joint limits, manipulability measure, and condition number.  I'd also add the total power required from all your actuators (assuming your payloads and the weight of the arm are non-negligible).  &lt;a href=&quot;https://robotics.stackexchange.com/questions/2889/static-equilibrium-for-7-dof-manipulator/2896#2896&quot;&gt;My answer in this other question&lt;/a&gt; describes some ways to do that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So pick some link lengths and do some calculations, see how they compare, then repeat.  One word of caution though, some of these metrics can't really be directly compared across arms with different parameters.  &lt;/p&gt;&#xA;" OwnerUserId="110" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2017-01-17T01:44:47.620" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11393" PostTypeId="1" AcceptedAnswerId="11395" CreationDate="2017-01-17T06:50:39.380" Score="2" ViewCount="2641" Body="&lt;p&gt;I define my robotic arm with following code&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;% Link('d', 0.15005, 'a', 0.0203, 'alpha', -pi/2)&#xA;L(1) = Link([0  0.15   0    pi/2     0], 'standard');&#xA;L(2) = Link([0  0     0.15   0       0], 'standard');&#xA;L(3) = Link([0  0     0.15   0       0], 'standard');&#xA;L(4) = Link([0  0     0.15   0       0], 'standard');&#xA;% set limits for joints&#xA; L(1).qlim=[deg2rad(-45) deg2rad(45)];&#xA; L(2).qlim=[deg2rad(-45) deg2rad(45)];&#xA; L(3).qlim=[deg2rad(-60) deg2rad(60)];&#xA; L(4).qlim=[deg2rad(-50) deg2rad(50)];&#xA; %build the robot model&#xA;rob = SerialLink(L, 'name','rob');&#xA;qready = [0 0 0 0]; % initial position of robot&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And I solve inverse kinematic and plot robotic arm with code&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; Td = transl([0.05 0 -0.20]);&#xA;q = rob.ikine(Td, qready,[1 1 1 0 0 0]);&#xA;plot(rob,q,'noname');&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Its results are &lt;code&gt;0  -139.0348635    82.65184319 -1.286384217&lt;/code&gt; which is four angles named theta1, theta2, theta3 and theta4 respectively. Now the point is I gave joint limit for theta2 as &lt;strong&gt;&lt;em&gt;-45 to 45 degree&lt;/em&gt;&lt;/strong&gt; but result output is &lt;strong&gt;&lt;em&gt;-139 degree&lt;/em&gt;&lt;/strong&gt;. Same case with theta3. Why it is so? Another thing is when I plot these angles &lt;em&gt;robotic arm cross each other&lt;/em&gt; as shown in figure. I want to know what is wrong with code or I'm missing any thing. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/5eenk.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/5eenk.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="14024" LastActivityDate="2017-02-16T07:47:51.790" Title="Problem with inverse kinematics in robotic arm using Matlab" Tags="&lt;robotic-arm&gt;&lt;inverse-kinematics&gt;&lt;matlab&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11394" PostTypeId="2" ParentId="11373" CreationDate="2017-01-17T07:06:02.967" Score="0" Body="&lt;p&gt;I agree with Ben that there is no established algorithm which you follow and get the link lengths. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fomrulating an optimization problem and then solving it is one of the viable solutions, as Ben suggested. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A bit more simplistic is just to rely on kinematic capablities, Joint positioning will be always a tradoff between positioning resolution of the end-effector and maximum velocity. The closer the joints are to the end-effector (and to eachother) the more postitioning resolution will the robot have. The further they are (and closer to the base) the faster it will be. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you take a look at a 6 dof industrial robot like &lt;a href=&quot;https://www.robots.com/media/articles/1460040132_1.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt;, you can see that the wrist joints are as close as possible to the endeffector, increasing positioning resolution. These are used to &quot;compensate&quot; for fine motions the first 3 axes cannot make. The first two axes are as close as possible to the base to give velocity. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am aware that this effect is included in Bens answer, if you optimize for manipulability and load you will get the same effect, however, before formulating and solving a complex optimisation problem a bit of a trial and error experimetns may be helpful. &lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2017-01-17T07:06:02.967" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11395" PostTypeId="2" ParentId="11393" CreationDate="2017-01-17T07:16:07.290" Score="2" Body="&lt;p&gt;In the &lt;a href=&quot;http://www.petercorke.com/RTB/r9/html/SerialLink.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;documentation&lt;/a&gt; of the Robotics Toolbox by Peter Corke it is stated that the ikine() method does not regard motion limits. (Notes -&gt; Joint limits are not considered in this solution.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can cosider using ikcon() instead. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Solving the inverse kinematics does not guarentee a colision free pose of the robot. That is only guaranteed if a colision check is carried out or if the joint limits are respected (adn set correctly).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Furthermore I would advise to check the exit flag of the method solving the inverse kinematics to make sure that indeed it has found a solution&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2017-01-17T07:16:07.290" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11397" PostTypeId="2" ParentId="11320" CreationDate="2017-01-17T14:02:53.760" Score="0" Body="&lt;p&gt;Well, today I was able to finally get my hands on a new Hc-12 transceiver, since one the last batch was burned out by accident and I had to give my project a pause. So today, I lowered the baud rate of both boards to 2400bps, since it offers the best rage and transmitting power possible, and changed from the default channel-01 to channel-02. If I may, let me share a couple of important things about these little things. First, &lt;strong&gt;always&lt;/strong&gt;, if powering from 4.5v to 5v, always use a 1N4007 diode in series with the module, specially if you're transmitting all the time. My transmitter got so hot that I though it was gone for good, lucky enough, I saw this information on the manuals before loosing it. A 100uf decoupling electrolytic capacitor is also recommended, to be put in direct contat with the board after the diode. I think the pourpose here is decoupling, power reservoir and/or noise filtering. It is raining down here, and probably will still rain for a few days, so I am not so eager to take the pair outside for a real trial run. I will need binoculars and a few aluminum foil pieces glued to a stick and then glued to the servos, so I can observe from a certain distance. What I can tell for the indoors performance is that it looks sharp. But the KY-023-type X and Y Joystick really requires skill to operate, it requires you to have hands of a fairy, only after training for like 1h I could move it to the desired positions without making the servos jump around. You need to go slowly but surely. Lag is almost non-existent, I would say looks pretty much real time. What really scared me is the current-hungry pair of sg90 servos! 4 AA batteries are not enough to power them directly and the 32u4-based Arduino board + transceiver. So I am looking into C-type batteries or even a power bank to be able to test outside. Really! This servo-current thing is really giving me something else to think about......&lt;/p&gt;&#xA;" OwnerUserId="15760" LastActivityDate="2017-01-17T14:02:53.760" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="11399" PostTypeId="1" CreationDate="2017-01-17T21:08:58.737" Score="1" ViewCount="834" Body="&lt;p&gt;I have to solve an exercise for the Digital Control System course (using MATLAB software) which stands:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/aBDSH.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/aBDSH.png&quot; alt=&quot;Problem diagram.&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;A ball is suspended inside a vertical tube by airflow 'u' and connected via a spring of stiffness K to the bottom of the tube. The ball is subjected to gravity and a viscous friction with coefficient 'B'. The force 'F' exerted on the ball by the airflow is proportional to the airflow 'u' via the constant G; airflow can only be positive (entering the tube).&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have also all the data needed to solve the problem numerically, but this is not important for the question. What I need to do is: &quot;Write the system equations in state space form with airflow as input and the ball vertical position 'z' as output.Then, select a sampling time and design a digital control system that regulates the ball position by acting on the airflow to the following specifications:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Zero steady-state error (in response to the desired altitude step input).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Max overshoot: 30%;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Settling time at 5% less than 8 seconds.&quot;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;After this, we have to compute the transfer function of the plant and put it in unitary feedback with the compensator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I usually write first the system dynamics equations, then from these I choose a suitable set of state variables and I write the matrices A, B, C and D according to the state variables (I use the 'ss' function). The problem is that I don't know how to consider the gravity in this case because it comes in the system dynamics as a constant term (-g*m). For example by considering the state variables as [z' z] I obtained the following matrices:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A = [-B/m -K/m; 1 0];&lt;/p&gt;&#xA;&#xA;&lt;p&gt;B = [G/m; 0];&lt;/p&gt;&#xA;&#xA;&lt;p&gt;C = [0 1];&lt;/p&gt;&#xA;&#xA;&lt;p&gt;D = 0;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ZbHAF.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZbHAF.png&quot; alt=&quot;Simulink model.&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried to design the compensator (a simple PID) without considering the gravity and by adding it later in the Simulink model used to test the system (after designing the compensator we have to build a Simulink model in which the discrete time compensator is tested with the transfer function of the continuous time system) but of course the system output is no more able to meet the requirements.&#xA;For the gravity transfer function I considered to have the mass as input and the position as output&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Am I wrong in not considering the gravity when designing the compensator? Or perhaps, if correctly implemented the gravity should not affect the system output?&lt;/p&gt;&#xA;" OwnerUserId="15826" LastActivityDate="2017-01-18T16:24:50.823" Title="How to consider gravity in the design of a compensator?" Tags="&lt;control&gt;&lt;pid&gt;&lt;matlab&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11400" PostTypeId="1" CreationDate="2017-01-18T01:12:57.887" Score="0" ViewCount="549" Body="&lt;p&gt;If I am trying to model the dynamics of a double-pendulum (on a horizontal plane without the effects of gravity), in which the second angle is constrained to range between values of [-10 deg, 10 deg], how would I derive the equations of motion? I'm having trouble identifying whether I would use some method involving solving the Lagrangian with holonomic or non-holonomic constraints. &lt;/p&gt;&#xA;" OwnerUserId="15828" LastActivityDate="2017-04-23T14:51:04.163" Title="Constrained Second Angle Double Pendulum" Tags="&lt;dynamics&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11401" PostTypeId="2" ParentId="11373" CreationDate="2017-01-18T06:37:31.773" Score="1" Body="&lt;p&gt;There may not be a direct way, however, you can derive the forward kinematics to give you more insight in how the links are operating with respect to one another. I have worked out the forward kinematics below:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/nRGO7.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/nRGO7.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For this particular serial linkage robot, I locked joints 3 and 4 to stay at 0 degrees since this will maximize reach as far as possible (obtained by observation). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the bottom right are the X, Y and Z equations. Just stick a point in 3D space that your wanting to reach in the X, Y, and Z variables.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lets call (L2 + L3 + L4) = a&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This will give you:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;X = a*c1*c2&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Y = a*s1*c2&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Z = a*s2&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lets say I wanted to know what the cumulative link length should be if I wanted to reach point (300, 300, 300):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;300 = a*c1*c2&lt;/p&gt;&#xA;&#xA;&lt;p&gt;300 = a*s1*c2&lt;/p&gt;&#xA;&#xA;&lt;p&gt;300 = a*s2&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because there are 3 equations and 3 unknowns, we could try systems of equations, after which I obtain:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Theta1 = 45&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Theta2 = 35.2644&lt;/p&gt;&#xA;&#xA;&lt;p&gt;a = 519.615&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which means you can play around with link lengths L2, L3, and L4, but they must combine to equal 519.615.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: Because we are dealing with something as nonlinear as sines and cosines, there may be more solutions to the equation than what I provided.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Overall, messing around with the end equation I provided by selecting various points in 3D space you want to reach or selecting angles of interest for theta 1 and theta 2 is the best way I can think of to determine link lengths.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another thought could be to use the equations I provided to create an ellipsoid/sphere that touches your farthest points you can reach based on your link lengths; don't know quite how I would go about doing that of the top of my head though.&lt;/p&gt;&#xA;" OwnerUserId="14923" LastEditorUserId="14923" LastEditDate="2017-01-20T05:47:39.120" LastActivityDate="2017-01-20T05:47:39.120" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="11402" PostTypeId="2" ParentId="11399" CreationDate="2017-01-18T08:54:06.593" Score="1" Body="&lt;p&gt;The presence of gravity does impact on how fast you can achieve steady-state with zero error, because the integral part of your PID compensator needs to charge in order to counteract the term $mg$. As a result, you won't meet the requirement on the settling time, with the same setting of the gains.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's still possible to follow your design steps if you consider adding eventually a &lt;strong&gt;feed-forward term&lt;/strong&gt; $u_{ff}=mg/G$ to sum up at the output of your PID.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore,&#xA;$$&#xA;u=u_{PID}+u_{ff}&#xA;$$&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2017-01-18T16:24:50.823" LastActivityDate="2017-01-18T16:24:50.823" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11403" PostTypeId="2" ParentId="11399" CreationDate="2017-01-18T11:57:04.477" Score="1" Body="&lt;p&gt;Why don't you use pole placement method to meet your control objective. Since you already have a state space model it is much easier. You have to just check the controllability of your system and then based on control requirement decide on the poles. You can use cmu's Controll tutorial. &lt;a href=&quot;http://ctms.engin.umich.edu/CTMS/index.php?example=Introduction&amp;amp;section=ControlStateSpace&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://ctms.engin.umich.edu/CTMS/index.php?example=Introduction&amp;amp;section=ControlStateSpace&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the same time it doesn't not make sense to me to model the whole system just to make a PID controller. With a good enough system model you can make better controllers such lqr etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However if you are hell bent on using a PID controller, you can still improve your PID controllers performance by making use of anti-windup and thereby making integral term much more aggressive which will increasing the response time. PID controllers don't require gravity compensators (PD controller does), but you can assist it by providing feed forward and you can always tune it to meet your requirement. At the same time you can use bode plot to check whether it is theoretically possible to attain such a bandwidth of the system without making it unstable.&lt;/p&gt;&#xA;" OwnerUserId="11722" LastEditorUserId="11722" LastEditDate="2017-01-18T13:45:22.240" LastActivityDate="2017-01-18T13:45:22.240" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11404" PostTypeId="2" ParentId="11400" CreationDate="2017-01-18T12:44:44.507" Score="0" Body="&lt;p&gt;I don't think you need to worry about the constraint. You can derive the non linear equation using Lagrangian. Once you have the non linear model, you will have to linearize it at the equilibrium point which is simply valid only for angle around 0 deg. This condition is much more strict then your mechanical limitations. Therefore you don't need to consider the limitations that you have mentioned. And I assume you will modeling the friction as a viscous damper which is a linear model. This assumption makes the system holonomic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here I assume that you will use linear model to control the system. However, if you want to use non linear control then you will probably need to worry about the constraints.&lt;/p&gt;&#xA;" OwnerUserId="11722" LastEditorUserId="11722" LastEditDate="2017-01-18T12:50:37.267" LastActivityDate="2017-01-18T12:50:37.267" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11410" PostTypeId="2" ParentId="10607" CreationDate="2017-01-19T22:00:22.387" Score="0" Body="&lt;p&gt;All of the effort and credit for this answer go to Keith Selbo, I am simply reproducing his work here to make the explanation public.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Development of a Method for Translating Hanging Carver  (X, Y) Coordinates Into Suspension Lengths That Accounts for Sled Tilt and Finite  Radius of the Suspension Anchors&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;The figure on the next page represents the convex quadrilateral formed by components of a vertical carver; a plotter that suspends a router sled from two points and moves it about the plotting surface by varying the length of the suspension lines. This development encompasses a sled with center of mass  not co-located with the plotter bit, causing the sled to adopt a  tilt to an angle at which the moment  of the sled mass cancels the net moments exerted by the lateral and vertical forces exerted by the sled suspension.  Also covered is an offset from the plot origin of  the suspension anchor points due to the finite radius of a windlass or sprocket used for pay-out and take-up of the suspension lines as the sled is moved.  This offset results in movement of the effective anchor  point of  the suspension which in turn affects the equilibrium tilt of the sled. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The inputs to the algorithm are the plotter geometry and the x, and y coordinates of the desired bit placement.  The output is the length of the left and right suspension lines.  It includes the straight portion from the attachment at the sled to the variable tangent on the suspension anchor plus the curved portion of the line from the tangent to the top center of the anchor disk. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The sled tilt angle, and the variable left and right anchor points result in three non-linear equations in three unknowns.  The expedient of adding an imaginary extension of the suspension line (see drawing) past the anchor point (tangent) to the y axis allows the use of a pseudo-anchor point that varies only in the y direction which simplifies the equations and the computation.  A simple transformation corrects the line length after the solution is obtained.  This transformation is included in the final equations for the length of the suspension lines. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There was no obvious closed form solution to the equations, so multi-variate a Newton-Raphson algorithm is used to estimate the three unknowns.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/nJRTQ.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/nJRTQ.jpg&quot; alt=&quot;figure&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Net Forces:&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;$$\vec{f}_{y_1} + \vec{f}_{y_2} = -\vec{W}\tag{a}$$&#xA;$$\vec{f}_{x_1} + \vec{f}_{x_2} = 0\tag{b}$$&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Net Moment:&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;$$\vec{h_1}\times\vec{f}_{y_1}+\vec{h_2}\times\vec{f}_{y_2} +\vec{h_3}\times\vec{W}=0\tag{c}$$&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Definitions:&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;$$\vert\vec{h_1}\vert = \vert\vec{h_2}\vert = h\tag{d}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\vert\vec{h_3}\vert = h_3\tag{e}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\vert\vec{f_{x_1}}\vert = \vert\vec{f_{x_2}}\vert = fx(f)\tag{f}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\vert\vec{W}\vert = W\tag{g}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\phi_1 = \theta - \phi, \phi_2 = \theta + \phi \tag{h}$$&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Moment Cross Product:&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;$$\vert\vec{h_3}\vert\vert\vec{W}\vert\sin{\phi}+\vert\vec{f_{x_2}}\vert\vert\vec{h_2}\vert\sin{\phi_2}-\vert\vec{f_{x_1}}\vert\vert h_1\vert\sin{\phi_1}+\vert\vec{f_{y_1}}\vert\vert\vec{h_1}\vert\cos{\phi_1} - \vert\vec{f_{y_2}}\vert\vert\vec{h_2}\vert\cos{\phi_2} = 0\tag{i}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given that:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\tan{\gamma} = \frac{y+y_1^+-h\sin{\phi_1}}{x-h\cos{\phi_1}}\tag{j}$$&#xA;and:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$f_{y_1} = fx\tan{\gamma}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\tan{\gamma} = \frac{y+y_2^+-h\sin{\phi_2}}{D-(x+hcos{\phi_2})}\tag{k}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$fy_2 = fx\tan{\lambda}\tag{l}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Combining $(a),(j)$ and $(l)$ yields:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$W = fx(\tan{\lambda}+\tan{\gamma})\tag{m}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\frac{W}{tan{\lambda}+tan{\gamma}} = fx\tag{n}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then the net moment is zero when:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$h_3W\sin{\phi}+ \left\vert\frac{Wh}{\tan{\lambda}+\tan{\gamma}}\right\vert(\sin\phi_2 - \sin\phi_1+\tan\gamma\cos\phi_1 - \tan\lambda\cos\phi_2) = 0 \tag{o}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which simplifies to:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$f(\phi) = h_3\sin{\phi}+ \left\vert\frac{h}{\tan{\lambda}+\tan{\gamma}}\right\vert(\sin\phi_2 - \sin\phi_1+\tan\gamma\cos\phi_1 - \tan\lambda\cos\phi_2) = 0 \tag{1}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the sprocket detail in the figure we have: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$y_1^+ = r\sqrt{1+tan^2\gamma}\tag{p}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which yields&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\tan\gamma = \frac{\sqrt{{(y_1^+)}^2-r^2}}{r} = \frac{y+y_1^+-h\sin\phi_1}{x-h\cos\phi_1}\tag{q}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;or&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\frac{\sqrt{{(y_1^+)}^2-r^2}}{r} - \frac{y+y_1^+-h\sin\phi_1}{x-h\cos\phi_1} = 0\tag{2}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;similarly&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\frac{\sqrt{(y_2^+)^2-r^2}}{r} - \frac{y+y_2^+-h\sin\phi_2}{D-(x+h\cos\phi_2)} = 0 \tag{3}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We now have a nonlinear system F(x), consisting of equations (1), (2), and (3):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\begin{bmatrix}f_1(\phi,y_1^+, y_2^+) \\ f_2(\phi, y_1^+, y_2^+) \\ f_3(\phi, y_1^+, y_2^+)\end{bmatrix}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Applying the  Newton-raphson Method we iteratively solve $J_F(x_n)(\Delta x) = -F(x_n)\tag{r}$ where J is the system Jacobian, x is the vector:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\begin{bmatrix}\phi \\ y_1^+ \\ y_2^+\end{bmatrix}  and x_{n+1} = x_n+\Delta x \tag{s}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Until&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$F(X_n+1) \approx 0 \tag{t}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$LeftChain = \sqrt{(x-h\cos(\phi_1))^2+(y+y_1^+-h\sin(\phi_1))^2}-r \tan(\gamma)+r\gamma \tag{u}$$&#xA;$$RightChain = \sqrt{(D-(x+h\cos(\phi_2)))^2 + (y+y_2^+-h\sin(\phi_2))^2}-r\tan(\lambda)+r\lambda \tag{v}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Again, a HUGE thank you to Keith Selbo for this solution.&lt;/p&gt;&#xA;" OwnerUserId="14659" LastEditorUserId="14659" LastEditDate="2017-02-06T21:52:17.050" LastActivityDate="2017-02-06T21:52:17.050" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11411" PostTypeId="1" AcceptedAnswerId="11435" CreationDate="2017-01-19T22:03:35.307" Score="1" ViewCount="104" Body="&lt;p&gt;I'm trying to make a lightweight method of outdoor road following for a small ground robot. In nearly all road detection work that I've seen, they all assume that the robot is already on the road, which allows for techniques like finding the vanishing point or sampling pixels near the bottom of the camera frame. However in my application, the robot can be a few meters away from the road and needs to first find the road. As the robot computation runs on an Android phone, I'm hoping to avoid heavy computer vision techniques, but also be robust to variable outdoor lighting conditions. Obviously there is a trade-off, but I'm willing to sacrifice some accuracy for speed and ease of computation. Any ideas on how to achieve this?&lt;/p&gt;&#xA;" OwnerUserId="15850" LastEditorUserId="15850" LastEditDate="2017-01-19T22:09:03.850" LastActivityDate="2017-01-20T09:37:23.610" Title="Road Detection When the Robot is Off-Road" Tags="&lt;wheeled-robot&gt;&lt;computer-vision&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="11413" PostTypeId="1" CreationDate="2017-01-20T01:13:44.860" Score="1" ViewCount="1218" Body="&lt;p&gt;I came across the standard representation of stereo cameras where they are side to side and the epipolar lines are the same image scan line and the cameras have the same focal length. &#xA;&lt;a href=&quot;https://i.stack.imgur.com/fRhr4.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fRhr4.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;Source: &lt;a href=&quot;http://vision.deis.unibo.it/~smatt&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://vision.deis.unibo.it/~smatt&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, do &lt;em&gt;all&lt;/em&gt; stereo camera pairs need to have the same focal length? And if not then how does that change the stereo depth calculation? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you. &lt;/p&gt;&#xA;" OwnerUserId="7266" LastActivityDate="2017-01-23T19:12:24.943" Title="Stereo camera pair focal lengths" Tags="&lt;stereo-vision&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11417" PostTypeId="5" CreationDate="2017-01-20T07:30:30.043" Score="0" Body="&lt;p&gt;A &lt;strong&gt;robotic arm&lt;/strong&gt; is a type of mechanical arm, usually programmable, with similar functions to a human arm; an &lt;em&gt;arm&lt;/em&gt; may a whole robot or just a part of a more complex robot. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Robotic arms come in all shapes and sizes. Most robotic arms are described by their &lt;a href=&quot;https://en.wikipedia.org/wiki/Degrees_of_freedom_(mechanics)&quot; rel=&quot;nofollow noreferrer&quot;&gt;degrees of freedom&lt;/a&gt;, or &quot;The number of independent parameters that define its configuration&quot;. These parameters traditionally refer to rotations at locations or joints, such as &quot;Shoulder&quot; or &quot;Elbow&quot; or &quot;Wrist&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the ARM CPU, use the tag &lt;a href=&quot;/questions/tagged/arm-cpu&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;arm-cpu&amp;#39;&quot; rel=&quot;tag&quot;&gt;arm-cpu&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="37" LastEditDate="2019-07-21T09:25:59.510" LastActivityDate="2019-07-21T09:25:59.510" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11418" PostTypeId="4" CreationDate="2017-01-20T07:30:30.043" Score="0" Body="The arm tag is intended to be used for questions relating to robotic arms from, small hobby arms with only 1 or 2 degrees of freedom to large industrial robots with complex joint assemblies. For the ARM CPU, use the tag arm-cpu." OwnerUserId="9504" LastEditorUserId="37" LastEditDate="2019-07-21T09:25:59.510" LastActivityDate="2019-07-21T09:25:59.510" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11419" PostTypeId="5" CreationDate="2017-01-20T07:34:30.827" Score="0" Body="&lt;p&gt;Mechanical, electronic or programmatic design of a robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mechanics is about:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;how forces are transferred between the different parts of a construction.&#xA;where the center of gravity lies.&#xA;friction&#xA;position, speed, acceleration&#xA;Newton's laws&#xA;inertia&#xA;material properties&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Electronics is about:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Electronic Components&#xA;Analog Circuits&#xA;Digital Logic&#xA;MicroControllers&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Computer programming is about:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Control structures (sequence, selection, iteration)&#xA;Data types (constants, variables, integer, real, string,...)&#xA;Algorithms&#xA;Hardware control (setting and reading registers, interrupts,...)&#xA;logic&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-01-23T12:14:55.660" LastActivityDate="2017-01-23T12:14:55.660" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11420" PostTypeId="4" CreationDate="2017-01-20T07:34:30.827" Score="0" Body="Mechanical, electronic or programmatic design of a robot." OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-01-23T12:17:00.087" LastActivityDate="2017-01-23T12:17:00.087" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11421" PostTypeId="5" CreationDate="2017-01-20T07:36:08.730" Score="0" Body="&lt;p&gt;Torque, moment, or moment of force is the tendency of a force to rotate an object around an axis, fulcrum, or pivot.&lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-01-23T12:15:11.373" LastActivityDate="2017-01-23T12:15:11.373" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11422" PostTypeId="4" CreationDate="2017-01-20T07:36:08.730" Score="0" Body="Torque, moment, or moment of force is the tendency of a force to rotate an object around an axis, fulcrum, or pivot." OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-01-23T12:15:19.657" LastActivityDate="2017-01-23T12:15:19.657" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11423" PostTypeId="5" CreationDate="2017-01-20T07:36:44.487" Score="0" Body="&lt;p&gt;&lt;strong&gt;Forward kinematics&lt;/strong&gt; refers to the use of the kinematic equations of a robot to compute the position of the end-effector from specified values for the joint parameters&lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-01-23T12:15:22.310" LastActivityDate="2017-01-23T12:15:22.310" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11424" PostTypeId="4" CreationDate="2017-01-20T07:36:44.487" Score="0" Body="Forward kinematics refers to the use of the kinematic equations of a robot to compute the position of the end-effector from specified values for the joint parameters" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-01-23T12:15:38.447" LastActivityDate="2017-01-23T12:15:38.447" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11425" PostTypeId="5" CreationDate="2017-01-20T07:39:22.130" Score="0" Body="&lt;p&gt;&lt;strong&gt;gazebo&lt;/strong&gt; is a simulator makes it possible to rapidly test algorithms, design robots, perform regression testing, and train AI system using realistic scenarios. &lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-01-23T12:14:41.720" LastActivityDate="2017-01-23T12:14:41.720" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11426" PostTypeId="4" CreationDate="2017-01-20T07:39:22.130" Score="0" Body="gazebo is a simulator makes it possible to rapidly test algorithms, design robots, perform regression testing, and train AI system using realistic scenarios. " OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-02-05T08:02:09.477" LastActivityDate="2017-02-05T08:02:09.477" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11427" PostTypeId="5" CreationDate="2017-01-20T08:00:47.973" Score="0" Body="&lt;p&gt;In robotics and computer vision, &lt;strong&gt;visual odometry&lt;/strong&gt; is the process of determining the position and orientation of a robot by analyzing the associated camera images.&lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-01-23T12:15:15.820" LastActivityDate="2017-01-23T12:15:15.820" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11428" PostTypeId="4" CreationDate="2017-01-20T08:00:47.973" Score="0" Body="visual odometry is the process of determining the position and orientation of a robot by analyzing the associated camera images." OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-01-23T12:15:07.663" LastActivityDate="2017-01-23T12:15:07.663" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11429" PostTypeId="5" CreationDate="2017-01-20T08:03:04.163" Score="0" Body="&lt;p&gt;&lt;strong&gt;Steering&lt;/strong&gt; robots (or programmable steering controllers) apply precise, repeatable inputs to a vehicle's steering system.Also it is a behavior in swarm robotics.&lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-01-23T12:16:10.247" LastActivityDate="2017-01-23T12:16:10.247" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11430" PostTypeId="4" CreationDate="2017-01-20T08:03:04.163" Score="0" Body="Steering robots (or programmable steering controllers) apply precise, repeatable inputs to a vehicle's steering system. Also it is a behavior in swarm robotics." OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-01-23T12:16:38.037" LastActivityDate="2017-01-23T12:16:38.037" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11431" PostTypeId="5" CreationDate="2017-01-20T08:03:44.167" Score="0" Body="&lt;p&gt;A &lt;strong&gt;multi-agent system (M.A.S.)&lt;/strong&gt; is a computerized system composed of multiple interacting intelligent agents within an environment. Multi-agent systems can be used to solve problems that are difficult or impossible for an individual agent or a monolithic system to solve. Intelligence may include some methodic, functional, procedural approach, algorithmic search or reinforcement learning. &lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-01-23T12:16:19.413" LastActivityDate="2017-01-23T12:16:19.413" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11432" PostTypeId="4" CreationDate="2017-01-20T08:03:44.167" Score="0" Body="A multi-agent system (M.A.S.) is a computerized system composed of multiple interacting intelligent agents within an environment. " OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-01-23T12:14:59.347" LastActivityDate="2017-01-23T12:14:59.347" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11433" PostTypeId="5" CreationDate="2017-01-20T08:04:38.087" Score="0" Body="&lt;p&gt;Underwater robotics is a branch of robotics. Underwater robots can be autonomous, or they can be remotely operated. This is an emerging science, which has become more popular with evolving technology. &lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-01-23T12:16:01.443" LastActivityDate="2017-01-23T12:16:01.443" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11434" PostTypeId="4" CreationDate="2017-01-20T08:04:38.087" Score="0" Body="Underwater robotics is a branch of robotics. Underwater robots can be autonomous, or they can be remotely operated. This is an emerging science, which has become more popular with evolving technology. " OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-01-23T12:15:02.280" LastActivityDate="2017-01-23T12:15:02.280" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11435" PostTypeId="2" ParentId="11411" CreationDate="2017-01-20T09:37:23.610" Score="1" Body="&lt;p&gt;You may be interested in what is called &quot;terrain classification&quot; - not detecting the road itself, but classifying different regions of an image taken by the camera as grass, gravel, road, etc. This will help you to find the road, where you can apply more efficient methods of road following.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A paper &quot;High Resolution Visual Terrain Classification for Outdoor Robots&quot; by Yasir Niaz, Khan Philippe Komma and Andreas Zell, that discusses approach based on SURF features can be found here: &lt;a href=&quot;http://www.cogsys.cs.uni-tuebingen.de/publikationen/2011/khan2011iccvworkshop.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.cogsys.cs.uni-tuebingen.de/publikationen/2011/khan2011iccvworkshop.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A list of some other papers on the subject: &lt;a href=&quot;http://www2.ift.ulaval.ca/~pgiguere/terrainID.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www2.ift.ulaval.ca/~pgiguere/terrainID.html&lt;/a&gt; (note that last modification is from 2014, so there may be some new research worth investigating).&lt;/p&gt;&#xA;" OwnerUserId="7360" LastActivityDate="2017-01-20T09:37:23.610" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11437" PostTypeId="5" CreationDate="2017-01-20T20:19:01.387" Score="0" Body="&lt;p&gt;&lt;strong&gt;stereo vision&lt;/strong&gt; is the extraction of 3D information from digital images, such as obtained by a CCD camera.&lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-01-23T12:15:31.397" LastActivityDate="2017-01-23T12:15:31.397" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11438" PostTypeId="4" CreationDate="2017-01-20T20:19:01.387" Score="0" Body="stereo vision is the extraction of 3D information from digital images, such as obtained by a CCD camera." OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-01-23T12:16:26.600" LastActivityDate="2017-01-23T12:16:26.600" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11439" PostTypeId="1" CreationDate="2017-01-21T00:54:12.597" Score="0" ViewCount="737" Body="&lt;p&gt;I had this idea of using the PID Controller as the algorithm of the line following mechanism for my Robot. The problem (which is a nature behavior of the PID controller ) on the line gaps ( where there are no line e.g. 10 cm) the robot doesn't go straight forward but turns right . &#xA;I thought about it a lot , and i couldn't find any better idea for modifying this algorithm to work in this situation but, adding two more sensors and specify the (white area on the 3 sensors  ) as a special situation where the robot should go straight forward .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now my question is is there any better idea , that i can use ? &lt;/p&gt;&#xA;" OwnerUserId="15863" LastActivityDate="2017-03-24T15:42:25.363" Title="PID Controller for line following robot" Tags="&lt;pid&gt;&lt;not-exactly-c&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11440" PostTypeId="2" ParentId="11439" CreationDate="2017-01-21T03:20:24.003" Score="0" Body="&lt;p&gt;There are a lot of methods if your just search this forum of just google it.... For example, please see a similar problem (recapturing when there is a large gap in lines for line tracking) &lt;a href=&quot;https://stackoverflow.com/questions/40939967/implementing-pid-algorithm-in-line-following-robot/40966558#40966558&quot;&gt;implementing PID algorithm in line following robot&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="14999" LastEditorUserId="-1" LastEditDate="2017-05-23T12:37:11.430" LastActivityDate="2017-01-21T03:20:24.003" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11441" PostTypeId="1" AcceptedAnswerId="11442" CreationDate="2017-01-21T07:12:42.610" Score="1" ViewCount="303" Body="&lt;p&gt;I'm using Robotics Toolox Matlab and I did Reverse dynamics using code below.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[qreach,err] =  rob.ikcon(T1, qready);&#xA;[q,qd,qdd]=jtraj(qready,qreach,t);&#xA;    %compute inverse dynamics using recursive Newton-Euler algorithm&#xA;tauf = rne(rob, q, qd, qdd);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And when I plotted angular velocity and torque it shows some negative values as shown in Fig. &lt;a href=&quot;https://i.stack.imgur.com/3J3tG.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3J3tG.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;I want to know why so and what is the physical significance of negative veloity and torque in robotics.&#xA;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="14024" LastActivityDate="2017-01-21T16:00:48.810" Title="Negative torque and negative velocity during reverse dynamics in Matlab Robotics Toolox." Tags="&lt;robotic-arm&gt;&lt;inverse-kinematics&gt;&lt;matlab&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11442" PostTypeId="2" ParentId="11441" CreationDate="2017-01-21T16:00:48.810" Score="1" Body="&lt;p&gt;If you are thinking about a robotic joint as &lt;em&gt;power comes into the motor and causes the link to move,&lt;/em&gt; then you're missing part of the picture.   I say this because in some ways you could then imagine a negative torque meaning that something pushes on the link and provides power back to the motor.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reality is that each actuator must be given an axis about which to rotate.   Rotation in one direction is given a positive meaning - for example, maybe the encoder counts up when the link moves in a counterclockwise direction.  A positive torque would be required to move the link about the axis in that direction, and would result in a positive velocity.   The positive torque is provided by commanding the motor to spin its shaft in a certain direction.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A negative velocity is simply a motion of that same link, but in the opposite direction.  In the example above, it would be a clockwise speed about the axis.   The motor must exert a negative torque to cause this motion.   In other words, it must be commanded to rotate in the other direction.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's that simple.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2017-01-21T16:00:48.810" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11443" PostTypeId="2" ParentId="11413" CreationDate="2017-01-21T16:33:20.123" Score="1" Body="&lt;p&gt;You're just using the focal length as part of a camera model. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;All you really care about is exactly what the image you posted depicts - that you can  correlate a particular pixel with an &lt;em&gt;angle&lt;/em&gt;. If you know the angle to a point of interest from one camera, and you know the angle to the same point of interest from another camera, and you know how far the cameras are apart, then the law of sines can tell you where that point of interest is actually located.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Like I said above - what you really want to know is how a &lt;em&gt;pixel&lt;/em&gt; relates to an &lt;em&gt;angle&lt;/em&gt;. If you know that your key point is located 15 pixels from the left edge (the right camera in your image), what &lt;em&gt;angle&lt;/em&gt; does that make between the image receptor and that key point? That depends on the &lt;em&gt;focal length&lt;/em&gt; of the camera. A lot of techniques use the pinhole camera model, and I believe this is sufficient for most cameras, but especially if you wanted to use a fisheye lens or similar then you need to rectify your output image in addition to applying the camera model. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This might be a straightforward process, but it can definitely get complicated in a hurry, especially if you can't find documentation regarding the characteristics of the lens you're using.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-01-21T16:33:20.123" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11444" PostTypeId="2" ParentId="11400" CreationDate="2017-01-22T01:05:31.500" Score="1" Body="&lt;p&gt;The derivation of double pendulum system is indeed trivial but tedious because of computing some derivatives. The first step is to tackle the problem from a geometric perspective. My drawing of double pendulum is shown in the following picture:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/nrD2v.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/nrD2v.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the preceding figure, we can write down some equations. The derivatives of these equations are needed subsequently, therefore, we compute them as well. The independent time variable is omitted for the sake of simplicity. &#xA;$$&#xA;\begin{array}&#xA;xx_1 = a_1 \sin\theta, &amp;amp;&#xA;\qquad y_1  = -a_1 \cos\theta, \\&#xA;\dot{x}_1  = a_1 \dot{\theta} \cos\theta, &amp;amp;&#xA;\qquad \dot{y}_1  =  a_1 \dot{\theta} \sin\theta, \\&#xA;%####################################################&#xA;x_2 = x_1 + a_2 \sin\phi, &amp;amp;&#xA;\qquad y_2 = y_1 - a_2 \cos\phi, \\&#xA;\dot{x}_2 = \dot{x}_1 + a_2 \dot{\phi} \cos\phi, &amp;amp;&#xA;\qquad \dot{y}_2 = \dot{y}_1 + a_2 \dot{\phi} \sin\phi,&#xA;\end{array}&#xA;$$&#xA;To derive the dynamics equation of the system, I will use the Lagrangian approach. We need the kinetic and potential energies of masses. Let's start off with the kinetic energy. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The kinetic energy of $m_1$ is computed as follows:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{align}&#xA;\mathcal{K}_1 &amp;amp;= \frac{1}{2}m_1 v^2_1 \\&#xA;              &amp;amp;= \frac{1}{2}m_1 (\dot{x}^{2}_1+\dot{y}^{2}_1) \\&#xA;              &amp;amp;= \frac{1}{2}m_1 (a^{2}_1 \dot{\theta}^{2} \cos^{2}\theta+a^{2}_1 \dot{\theta}^{2} \sin^{2}\theta) \\&#xA;&amp;amp;= \frac{1}{2}m_1 [a^{2}_1 \dot{\theta}^{2} (\cos^{2}\theta+ \sin^{2}\theta)] \\&#xA;&amp;amp;= \frac{1}{2}m_1 a^{2}_1 \dot{\theta}^{2} &#xA;\end{align}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The kinetic energy of $m_2$ is computed as follows:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{align}&#xA;\mathcal{K}_2 &amp;amp;= \frac{1}{2}m_2 v^2_2 \\&#xA;              &amp;amp;= \frac{1}{2}m_2 (\dot{x}^{2}_2+\dot{y}^{2}_2) \\&#xA; &amp;amp;= \frac{1}{2}m_2 [(\dot{x}_1 + a_2 \dot{\phi} \cos\phi)^{2}+(\dot{y}_1 + a_2 \dot{\phi} \sin\phi)^{2}] \\&#xA;%===============================================&#xA;&amp;amp;= \frac{1}{2}m_2 [(\dot{x}^{2}_1 + 2a_2 \dot{\phi} \cos\phi \dot{x}_1 + a^{2}_2 \dot{\phi}^{2} \cos^{2}\phi) + \\  &amp;amp; \qquad \ \ \  \quad  (\dot{y}^{2}_1 + 2a_2 \dot{\phi} \sin\phi \dot{y}_1 + a^{2}_2 \dot{\phi}^{2} \sin^{2}\phi)] \\&#xA;%===============================================&#xA;&amp;amp;= \frac{1}{2}m_2 [(a^{2}_1 \dot{\theta}^{2} \cos^{2}\theta + 2a_2 \dot{\phi} \cos\phi a_1 \dot{\theta} \cos\theta + a^{2}_2 \dot{\phi}^{2} \cos^{2}\phi) + \\  &amp;amp; \qquad \ \ \  \quad  (a^{2}_1 \dot{\theta}^{2} \sin^{2}\theta + 2a_2 \dot{\phi} \sin\phi a_1 \dot{\theta} \sin\theta + a^{2}_2 \dot{\phi}^{2} \sin^{2}\phi)] \\&#xA;%===============================================&#xA;&amp;amp;= \frac{1}{2}m_2 [a^{2}_1 \dot{\theta}^{2} [\cos^{2}\theta+\sin^{2}\theta] + 2a_2 a_1 \dot{\phi} \dot{\theta}[ \cos\theta \cos\phi  + \sin\theta \sin\phi ] + \\  &amp;amp; \qquad \qquad a^{2}_2 \dot{\phi}^{2}[ \cos^{2}\phi+\sin^{2}\phi] ] \\&#xA;%===============================================&#xA;&amp;amp;= \frac{1}{2}m_2 [a^{2}_1 \dot{\theta}^{2}  + 2a_2 a_1 \dot{\phi} \dot{\theta} \cos(\theta-\phi) +  a^{2}_2 \dot{\phi}^{2} ]  &#xA;\end{align}&#xA;$$&#xA;The kinetic energy of the whole system is then:&#xA;$$&#xA;\begin{align}&#xA;\mathcal{K} &amp;amp;= \mathcal{K}_1 + \mathcal{K}_2 \\&#xA;&amp;amp;= \frac{1}{2}m_1 a^{2}_1 \dot{\theta}^{2} + &#xA;\frac{1}{2}m_2 [a^{2}_1 \dot{\theta}^{2}  + 2a_2 a_1 \dot{\phi} \dot{\theta} \cos(\theta-\phi) +  a^{2}_2 \dot{\phi}^{2} ]&#xA;\end{align}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second step is to compute the potential energy of the whole system. We start off with the potential energy of $m_1$ which is computed as follows:&#xA;$$&#xA;\begin{align}&#xA;\mathcal{P}_1 &amp;amp;= m_1 y_1 g \\ &amp;amp;= m_1(-a_1 \cos\theta)g \\ &amp;amp;= -a_1 m_1 g \cos\theta&#xA;\end{align}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The potential energy of $m_2$ is  computed as follows:&#xA;$$&#xA;\begin{align}&#xA;\mathcal{P}_2 &amp;amp;= m_2 y_2 g \\ &amp;amp;= m_2(y_1 - a_2 \cos\phi)g \\ &#xA;&amp;amp;= m_2(-a_1 \cos\theta - a_2 \cos\phi)g \\&#xA;&amp;amp;= -a_1 m_2 g \cos\theta - a_2 m_2 g \cos\phi  &#xA;\end{align}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The potential energy of the whole system is then:&#xA;$$&#xA;\begin{align}&#xA;\mathcal{P} &amp;amp;= \mathcal{P}_1 + \mathcal{P}_2 \\&#xA;&amp;amp;= -a_1 m_1 g \cos\theta -a_1 m_2 g \cos\theta - a_2 m_2 g \cos\phi &#xA;\end{align}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To construct the Lagrangian equation, we take the difference between the kinetic $\mathcal{K}$ and potential $\mathcal{P}$ energies of the whole system, hence:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{align}&#xA;\mathcal{L} &amp;amp;= \mathcal{K} - \mathcal{P} &#xA;\end{align}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At this moment, we will compute dynamics equation of the double pendulum system. Remember this system has two degrees of freedom, therefore, we need two differential equations to describe the motion of the system. Let's start off with the first equation (i.e. the equation for $\theta$). This can be done by determining the following equations:&#xA;$$&#xA;\frac{\partial \mathcal{L}}{\partial \dot{\theta} }, \ \  &#xA;\frac{d}{dt} \left( \frac{\partial \mathcal{L}}{\partial \dot{\theta} } \right)&#xA;\text{and}&#xA;\frac{\partial \mathcal{L}}{\partial \theta}.&#xA;$$&#xA;For the second equation of dynamics equation, we do the following:&#xA;$$&#xA;\frac{\partial \mathcal{L}}{\partial \dot{\phi} }, \ \  &#xA;\frac{d}{dt} \left( \frac{\partial \mathcal{L}}{\partial \dot{\phi} } \right)&#xA;\text{and}&#xA;\frac{\partial \mathcal{L}}{\partial \phi}.&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I will leave the rest as an exercise. Once you came up with the dynamics equation, you can use some controllers to limit the range of the second pendulum. &lt;/p&gt;&#xA;" OwnerUserId="2155" LastActivityDate="2017-01-22T01:05:31.500" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11446" PostTypeId="1" AcceptedAnswerId="11481" CreationDate="2017-01-22T04:59:17.807" Score="0" ViewCount="144" Body="&lt;p&gt;I work with a XL20 robotic tube sorter(lets say it's called X) which is connected to lets say computer(Y - IP: 10.216.1.222 - Running win7) through serial(com port 8 at 9600 baud and odd parity). If I open putty at computer Y and send my commands to the Xl 20, it works just fine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I have a computer(Z- ip: 10.216.1.223 - Running win7) which is in the same network and I want to connect and send instruction to the Xl20 from this computer via putty or some other means.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically I'm trying to remotely communicate to the XL20 which is connected to a computer through serial port, so can anyone point me to any useful guide, documentation, clue or suggestion about how can I do this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="15869" LastActivityDate="2017-01-24T16:06:52.970" Title="How to remotely send command to a robot connected to a separate machine through serial port?" Tags="&lt;serial&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11449" PostTypeId="1" AcceptedAnswerId="11450" CreationDate="2017-01-23T01:41:11.133" Score="3" ViewCount="324" Body="&lt;p&gt;Is there a way to convert the EM field that surrounds high voltage power lines for direct usable electricity for air or ground drones for continuous flight or travel?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Added: Yes could the EM field be used for a guide as well?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://electronics.stackexchange.com/questions/280558/can-high-voltage-power-lines-provide-a-super-highway-for-drones&quot;&gt;https://electronics.stackexchange.com/questions/280558/can-high-voltage-power-lines-provide-a-super-highway-for-drones&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15868" LastEditorUserId="15868" LastEditDate="2019-01-11T20:22:41.310" LastActivityDate="2019-01-11T20:22:41.310" Title="Can high voltage power lines provide a super highway for drones?" Tags="&lt;quadcopter&gt;&lt;sensors&gt;&lt;power&gt;&lt;electronics&gt;&lt;machine-learning&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11450" PostTypeId="2" ParentId="11449" CreationDate="2017-01-23T08:55:19.837" Score="3" Body="&lt;p&gt;Sure, a drone can land on a powerline. That's a standard task like the &quot;peg in hole problem&quot; for robotarms. The aim is to maneuver a UAV near to a highvoltage line and eating all the energy. The earliest paper was written in 2009 and has a nice plotchart of the Electro-Magnetic Field on page 8 &lt;a href=&quot;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.719.650&amp;amp;rep=rep1&amp;amp;type=pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Powerline perching with a fixed-wing UAV&lt;/a&gt; for directing the UAV in 2D space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A little bit more tricky is the question of how to program such a device, that it can lands autonomously. A behaviortree which is implemented as a Python thread would be a good starting point. Some routines for goalfinding, fallback handling and number of trials has to be implemented.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In pseudocode the landing procedure is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;class BehaviortreePerching():&#xA;  def __init__(self):&#xA;    pass&#xA;  def BTstart(self):&#xA;    t = threading.Thread(target=self.taskmain)&#xA;    t.start()&#xA;  def taskmain(self):&#xA;    if self.landing()==success: self.harvesting()&#xA;    else self.retry()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2017-01-23T08:55:19.837" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11451" PostTypeId="2" ParentId="11449" CreationDate="2017-01-23T09:12:05.853" Score="3" Body="&lt;p&gt;I think yes it can but how? My options are here:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Static system&lt;/strong&gt; for conventional systems&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It should stand or hang to line/pole/special place like birds. Please watch video for an example: &lt;a href=&quot;https://www.youtube.com/watch?v=MvRTALJp8DM&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=MvRTALJp8DM&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Dynamic system&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Harmless/secure distance present day wireless charging methods: use low energy harvesting drone or an alternative design like blimp-drone and use wireless charging along the line.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="9504" LastActivityDate="2017-01-23T09:12:05.853" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11453" PostTypeId="2" ParentId="11413" CreationDate="2017-01-23T19:12:24.943" Score="0" Body="&lt;p&gt;There is nothing that forces both cameras to have the same focal length, but there is also no reason to use different cameras. In a stereo setup you want both cameras to see the same region of the world as only the objects in the overlapping region can be reconstructed. If you use a zoom-lense and fisheye, the overlapping region would be minimal and you could only use a small path of your fisheye-image. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You also want to match the two images so that both camera should have a similar characteristic (consisting of lense, sensor and settings). The similar both cameras are, the better the matching. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you could built a stereo camera with different camera, but you don't want to. &lt;/p&gt;&#xA;" OwnerUserId="23196" LastActivityDate="2017-01-23T19:12:24.943" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11455" PostTypeId="1" AcceptedAnswerId="11476" CreationDate="2017-01-24T03:07:13.507" Score="3" ViewCount="1342" Body="&lt;p&gt;I am working on scara robot project and I have one big confusion.  I am using simple trigonometric way(tan inverse traingl formula) to calculate inverse kinematics . But lot of people suggested me to use DH algorithm to calculate inverse kinematics .&#xA;Which one is better and faster algorithm for scara robot .&lt;/p&gt;&#xA;" OwnerUserId="15807" LastActivityDate="2017-01-24T15:21:21.047" Title="Which is best way to calculate inverse kinematics for scara robot?" Tags="&lt;robotic-arm&gt;&lt;inverse-kinematics&gt;&lt;software&gt;&lt;dh-parameters&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11456" PostTypeId="5" CreationDate="2017-01-24T08:17:43.303" Score="0" Body="&lt;p&gt;In robotics a &lt;strong&gt;manipulator&lt;/strong&gt; is a device used to manipulate materials without direct contact.&lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-01-24T14:07:49.077" LastActivityDate="2017-01-24T14:07:49.077" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11457" PostTypeId="4" CreationDate="2017-01-24T08:17:43.303" Score="0" Body="manipulator is a device used to manipulate materials without direct contact. " OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-01-24T14:06:48.333" LastActivityDate="2017-01-24T14:06:48.333" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11458" PostTypeId="5" CreationDate="2017-01-24T08:22:51.810" Score="0" Body="&lt;p&gt;Particle filtering is a general Monte Carlo (sampling) method for performing inference in state-space models where the state of a system evolves in time and information about the state is obtained via noisy measurements made at each time step&lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-01-24T14:06:57.123" LastActivityDate="2017-01-24T14:06:57.123" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11459" PostTypeId="4" CreationDate="2017-01-24T08:22:51.810" Score="0" Body="Particle filtering is a general Monte Carlo (sampling) method for performing inference in state-space models where the state of a system evolves in time and information about the state is obtained via noisy measurements made at each time step" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-01-24T14:07:08.387" LastActivityDate="2017-01-24T14:07:08.387" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11460" PostTypeId="5" CreationDate="2017-01-24T08:27:16.613" Score="0" Body="&lt;p&gt;&lt;strong&gt;Ardupilot&lt;/strong&gt; is a professional  autopilot that is based on the Arduino platform.  This autopilot can control fixed-wing aircraft, multi-rotor helicopters, as well as traditional helicopters.  It is a full autopilot capable for autonomous stabilisation, way-point based navigation and two way telemetry with Xbee wireless modules. &lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="15160" LastEditDate="2018-08-14T15:28:36.233" LastActivityDate="2018-08-14T15:28:36.233" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11461" PostTypeId="4" CreationDate="2017-01-24T08:27:16.613" Score="0" Body="Ardupilot is an autopilot that is based on the Arduino platform.  &#xD;&#xA;" OwnerUserId="9504" LastEditorUserId="15160" LastEditDate="2018-10-08T15:04:20.577" LastActivityDate="2018-10-08T15:04:20.577" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11462" PostTypeId="5" CreationDate="2017-01-24T08:28:28.870" Score="0" Body="&lt;p&gt;Ultrasonic sensors are divided into three broad categories: transmitters, receivers and transceivers. Transmitters convert electrical signals into ultrasound, receivers convert ultrasound into electrical signals, and transceivers can both transmit and receive ultrasound.&lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-01-24T13:58:33.277" LastActivityDate="2017-01-24T13:58:33.277" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11463" PostTypeId="4" CreationDate="2017-01-24T08:28:28.870" Score="0" Body="Ultrasonic sensors are divided into three broad categories: transmitters, receivers and transceivers. Transmitters convert electrical signals into ultrasound, receivers convert ultrasound into electrical signals, and transceivers can both transmit and receive ultrasound." OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-01-24T14:07:51.967" LastActivityDate="2017-01-24T14:07:51.967" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11464" PostTypeId="5" CreationDate="2017-01-24T08:28:59.767" Score="0" Body="&lt;p&gt;An &lt;strong&gt;embedded system&lt;/strong&gt; is a computer system with a dedicated function within a larger mechanical or electrical system, often with real-time computing constraints&lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-01-24T14:06:39.147" LastActivityDate="2017-01-24T14:06:39.147" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11465" PostTypeId="4" CreationDate="2017-01-24T08:28:59.767" Score="0" Body="An embedded system is a computer system with a dedicated function within a larger mechanical or electrical system, often with real-time computing constraints" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-01-24T14:07:01.230" LastActivityDate="2017-01-24T14:07:01.230" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11466" PostTypeId="5" CreationDate="2017-01-24T08:30:35.847" Score="0" Body="&lt;p&gt;A &lt;strong&gt;magnetometer&lt;/strong&gt; is an instrument that measures magnetism—either magnetization of magnetic material like a ferromagnet, or the strength and, in some cases, direction of the magnetic field at a point in space&lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-01-24T14:08:04.723" LastActivityDate="2017-01-24T14:08:04.723" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11467" PostTypeId="4" CreationDate="2017-01-24T08:30:35.847" Score="0" Body="A magnetometer is an instrument that measures magnetism—either magnetization of magnetic material like a ferromagnet, or the strength and, in some cases, direction of the magnetic field at a point in space" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-01-24T14:08:08.867" LastActivityDate="2017-01-24T14:08:08.867" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11468" PostTypeId="5" CreationDate="2017-01-24T08:31:22.920" Score="0" Body="&lt;p&gt;&lt;strong&gt;Computer Numeric Control (CNC)&lt;/strong&gt; is the automation of machine tools that are operated by precisely programmed commands encoded on a storage medium (computer command module, usually located on the device) as opposed to controlled manually by hand wheels or levers, or mechanically automated by cams alone. Most NC today is computer (or computerized) numerical control (CNC), in which computers play an integral part of the control.&lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-01-24T14:07:28.877" LastActivityDate="2017-01-24T14:07:28.877" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11469" PostTypeId="4" CreationDate="2017-01-24T08:31:22.920" Score="0" Body="Computer Numeric Control (CNC) is the automation of machine tools that are operated by precisely programmed commands encoded on a storage medium (computer command module, usually located on the device) as opposed to controlled manually by hand wheels or levers, or mechanically automated by cams alone. Most NC today is computer (or computerized) numerical control (CNC), in which computers play an integral part of the control." OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-01-24T14:07:36.557" LastActivityDate="2017-01-24T14:07:36.557" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11470" PostTypeId="5" CreationDate="2017-01-24T08:32:45.850" Score="0" Body="&lt;p&gt;Pose is a typical task is to identify specific objects in a space and to determine each object's position and orientation relative to some coordinate system.&lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="15160" LastEditDate="2018-11-13T10:30:08.903" LastActivityDate="2018-11-13T10:30:08.903" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11471" PostTypeId="4" CreationDate="2017-01-24T08:32:45.850" Score="0" Body="Pose is a typical task is to identify specific objects in a space and to determine each object's position and orientation relative to some coordinate system." OwnerUserId="9504" LastEditorUserId="15160" LastEditDate="2018-11-13T10:30:15.943" LastActivityDate="2018-11-13T10:30:15.943" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11472" PostTypeId="5" CreationDate="2017-01-24T08:34:38.190" Score="0" Body="&lt;p&gt;A camera is an optical instrument for recording or capturing images, which may be stored locally, transmitted to another location, or both.&lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-01-24T14:08:01.643" LastActivityDate="2017-01-24T14:08:01.643" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11473" PostTypeId="4" CreationDate="2017-01-24T08:34:38.190" Score="0" Body="A camera is an optical instrument for recording or capturing images, which may be stored locally, transmitted to another location, or both." OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-01-24T14:08:15.587" LastActivityDate="2017-01-24T14:08:15.587" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11476" PostTypeId="2" ParentId="11455" CreationDate="2017-01-24T11:35:34.703" Score="2" Body="&lt;p&gt;The geometric method of computing inverse kinematics (which you are calling the trigonometric way) and the Denavit-Hartenburg method result in the same kinematic equations.  Neither is &lt;em&gt;better,&lt;/em&gt; although DH can be generalized more easily to suit a variety of arm geometries.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding which algorithm is &lt;em&gt;faster,&lt;/em&gt; it depends on how you implement the equations in code.   Optimizing the calculations in your software will probably yield performance improvements (I am basing this on assumptions I'm making when reading your question).   But calculating the equations using a different approach should have no impact.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2017-01-24T11:35:34.703" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11477" PostTypeId="1" CreationDate="2017-01-24T13:44:51.290" Score="1" ViewCount="712" Body="&lt;p&gt;Can a PID with variable setpoint work?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have already done tests, but these are not conclusive. On the other hand I am not certain of this algorithm.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Background&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;This project involves improving the tracking speed of a telescope.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An Arduino card (UNO32) that I program gives the instructions in &quot;Pulse and Dir&quot; mode to a driver. This driver controls a two-phase step motor (200 steps) in micro step mode (128 micro steps per step). This stepper motor rotates a worm screw against a wheel that has 360 teeth. And finally, this wheel rotates the axis of the telescope to make one revolution per day.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To reduce the speed error caused by imprecision of the wheel and screw, a high precision encoder (1800 000 PPR) is placed at the end of the axis of rotation of the telescope. My goal is to work in closed loop with the stepper motor and the encoder feedback.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need your advice for the PID algorithm. Here is my idea but I am not sure that this is valid:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1)   SP (Setpoint) :  the desired position of the encoder. The encoder is in  4x reading mode. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;At time t, this gives :  SP(t)= ( t sec) * (4* 1800000 PPR)/(86164 sec/day)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can convert into micro-step :&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(360 turns_motor)&lt;em&gt;(200 steps)&lt;/em&gt;(128 micro-steps) = 4*1800 000 encoder pulses&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2)   PV : the process variable. This is the measured position of the encoder.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3)   E :  the error , E= SP-PV&lt;/p&gt;&#xA;&#xA;&lt;p&gt;4)   Command :  I act on the frequency of the pulses to vary the speed of the motor according to this error&lt;/p&gt;&#xA;" OwnerUserId="15887" LastEditorUserId="37" LastEditDate="2017-01-24T14:02:42.543" LastActivityDate="2017-01-24T15:48:28.107" Title="PID for variable Setpoint" Tags="&lt;algorithm&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11478" PostTypeId="2" ParentId="11455" CreationDate="2017-01-24T15:21:21.047" Score="2" Body="&lt;p&gt;The solution of the inverse kinematics problem and the Denavit Hartenberg method (or algorithm) are two very different things. The DH provides rules on how to define coordinate systems, but it does not constrain or guide to on how to solve the inverse kinematics problem. These are two distinct steps.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Setting the coordinate systems&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The DH method is used to set the coordinate systems in the joints of the robot. It is one method of doing this, you do not necesarily have to follow this convention, you can just define which is the positivie and which is the negative direction of tha angle in any arbitrary way you like. It is recommended to use the DH method to set the coordinate systems if you are planning to give the robot to other rooticits who are used to this convention. &lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;Solving the inverse kinematics problem comes after setting the coordinate systems (or at least positive and negative directions of the axis angle)&#xA;At this point, you are free to chose:&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;a matrix based appraoch (sometimes referred to incorrectly as the DH method), where you write all the transformation matrices and identify usefull equation in the elements of the matrices. The DH convention oly helps you to build the transformation matrix, but transfomration matrices can be built also without applying the DH convention.&lt;/li&gt;&#xA;&lt;li&gt;a geometrical approach, where you do not use matrix relations, but try to find equations based on geometrical equalities&lt;/li&gt;&#xA;&lt;li&gt;a quaternion based approach, again, it can be in DH defeined coordinate systems or not. &lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The first two methods lead (as SteveO correctly stated) to exactly the same equations, or at least with equations with very similar complexity. The third methods might lead to equations where elements are calculated redundanlty. However I do not think there is a very significant difference in calculation complexit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a Scara robot, I do not think it matters which inverse kinematics solution method you choose, you will end up with roughly (or maybe even exaclty) the same equations. If you plan to interact with ither roboticists, I would definetly recommend defining the joint coordinate systems as the DH convention specifies.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2017-01-24T15:21:21.047" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11479" PostTypeId="2" ParentId="11477" CreationDate="2017-01-24T15:48:28.107" Score="2" Body="&lt;p&gt;As a general answer:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yes, PID controller use variable setpoints, in fact, this is what makes them usefull, that you can always change the setpoint of your system (regardless of this varis slowly or fast, stepwise or not).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The general algorithm you have specified is also correct, however you have to make sure that the variable typse you use can handle that large numbers. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;SP(t)= ( t sec) * (4* 1800000 PPR)/(86164 sec/day) seems like a really large number if all terms are implemented as variables and are not simplified apriori (at implementation or maybe by the compiler?).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would recommend giving the setpoint as a float in degrees and converting the encoder readings to degrees when calculating PV. This is just for conveniece.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Acting on the frequency of the pulses is also good idea in general. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your specific case:&#xA;Please keep in mind that in theory you have approx 5 motor microsteps per encoder tick. (200*128*360 = 9 216 000 microsteps and 1 800 000 tocks). This means that you have to have a PID controller that can do very fine adjustments. This should be something doable if overshot of the controller is not a problem. Problems arrise on the practical side.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Microsteps are not very exact. It depends very much on the quality of the motor, usually a half step is correct, hover anything below half of step is not necesarily evenly distribuited between the steps. Ideally you would get 360/(128*200) degrees of rotation for each microstep, however in reality, you might be very far from this. You might have far smaller microsteps and far larger microsteps (but their summ would give you a full step). If the far larger means 5x larger than you cannot position to the given end sensor tick. For motors which are not of high quality, 5x or larger microsteps in my opinion can happen. but I am not a stepper motor expert, you should test the length of your microsteps to make sure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to hit exactly all ticks with precision it might be a problem. If you want to be only in a certain range, you could add a deadband to your PID and so you can avoid any ocilations caused by not being able to exactly hit one encoder tick.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2017-01-24T15:48:28.107" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11481" PostTypeId="2" ParentId="11446" CreationDate="2017-01-24T16:06:52.970" Score="0" Body="&lt;p&gt;What you need is a TCP server running on computer Y, which listens to any incoming TCP connections. After a TCP connection is established with computer Y it forwards incoming data to X and the responce form X gets forwarded to the incomind connection. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can find hardware boxes that do this, like &lt;a href=&quot;http://www.hw-group.com/products/hw_vsp/index_en.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt;. This yould replace PC Y. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A free software solution would be &lt;a href=&quot;https://sourceforge.net/projects/combytcp/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2017-01-24T16:06:52.970" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11482" PostTypeId="1" AcceptedAnswerId="11483" CreationDate="2017-01-24T20:18:53.453" Score="1" ViewCount="477" Body="&lt;p&gt;We're students trying to make a clawbot for a Science Seminar class. However, for some reason, whenever we try to move the arm or the claw in a certain way, it will lock up and only move that direction. Code attached. Please help.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#pragma config(Motor, port1, frWheel, tmotornormal, openLoop, reversed) //Setting up the motors&#xA;#pragma config(Motor, port5, brWheel, tmotornormal, openLoop, reversed)&#xA;#pragma config(Motor, port3, flWheel, tmotornormal, openLoop)&#xA;#pragma config(Motor, port4, blWheel, tmotornormal, openLoop)&#xA;#pragma config(Motor, port10, Arm, tmotornormal, openLoop)&#xA;#pragma config(Motor, port6, Claw, tmotornormal, openLoop)&#xA;&#xA;task main() &#xA;{&#xA;    int a = 0; //Arm integer&#xA;    int c = 0; //Claw integer&#xA;    while(true) &#xA;    {&#xA;        motor[frWheel] = vexRT(Ch2); //Wheels&#xA;        motor[brWheel] = vexRT(Ch2);&#xA;        motor[flWheel] = vexRT(Ch3);&#xA;        motor[blWheel] = vexRT(Ch3);&#xA;        if(a &amp;gt;= -30 &amp;amp;&amp;amp; a &amp;lt;= 30)  {&#xA;            if(vexRT[Btn8D] == 1) //If arm down button pressed...&#xA;            {&#xA;                motor[Arm] = --a; //then arm will go down.&#xA;            }&#xA;            else if(vexRT[Btn8U] == 1)&#xA;            {&#xA;                motor[Arm] = ++a;&#xA;            }&#xA;            else(vexRT[Btn8U] == 0 &amp;amp;&amp;amp; vexRT[Btn8D] == 0);&#xA;            {&#xA;                motor[Arm] = a;&#xA;            }&#xA;        }&#xA;        else&#xA;        {&#xA;&#xA;        }&#xA;&#xA;        if(c &amp;lt;= 30 &amp;amp;&amp;amp; c &amp;gt;= -30)&#xA;        {&#xA;            if(vexRT[Btn7U] == 1) //If claw up button pressed...&#xA;            {&#xA;                motor[Claw] = ++c; //Claw will open.&#xA;            }&#xA;            else if(vexRT[Btn7D] == 1)&#xA;            {&#xA;                motor[Claw] = --c;&#xA;            }&#xA;            else(vexRT[Btn7D] == 0 &amp;amp;&amp;amp; vexRT[Btn7U] == 0);&#xA;            {&#xA;                motor[Claw] = c;&#xA;            }&#xA;        }&#xA;        else&#xA;        {&#xA;&#xA;        }&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="15890" LastEditorUserId="7360" LastEditDate="2017-01-25T18:32:18.303" LastActivityDate="2017-01-25T22:47:47.520" Title="Robot won't work properly, claw will only go one way and will only open or close once per cycle" Tags="&lt;robotic-arm&gt;&lt;wheeled-robot&gt;&lt;c&gt;&lt;vex&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11483" PostTypeId="2" ParentId="11482" CreationDate="2017-01-24T22:30:04.723" Score="0" Body="&lt;p&gt;Your conditional logic needs to be improved.  Consider the following scenario:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;a&lt;/code&gt; is initialized to zero.&lt;/li&gt;&#xA;&lt;li&gt;The operator presses &lt;code&gt;Btn8d&lt;/code&gt; (arm down)&lt;/li&gt;&#xA;&lt;li&gt;a is decremented to -1, then -2, etc.&lt;/li&gt;&#xA;&lt;li&gt;If the button continues to be pressed, &lt;code&gt;a&lt;/code&gt; eventually reaches -30.  Depending on the loop rate, this may happen very quickly.&lt;/li&gt;&#xA;&lt;li&gt;When &lt;code&gt;a == 30&lt;/code&gt; the statement &lt;code&gt;if(a &amp;gt;= -30 &amp;amp;&amp;amp; a &amp;lt;= 30)&lt;/code&gt; is still true.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;a&lt;/code&gt; is decremented to -31.&lt;/li&gt;&#xA;&lt;li&gt;Recovery is not possible because the conditional will never be true again.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Your code needs to handle this corner condition.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, when is the vexRT[] array updated?  If it is not continuously updated with the values of the button presses, then you will need to update it at the top of your &lt;code&gt;while&lt;/code&gt; loop.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2017-01-24T22:30:04.723" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11484" PostTypeId="1" CreationDate="2017-01-25T05:20:12.823" Score="1" ViewCount="130" Body="&lt;p&gt;I want to dispense water/cut-vegetables from a glass/bowl(240 ml) by turning it upside down. The screencast shows the idea:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://media.giphy.com/media/bbgAE0GyCDodi/giphy.gif&quot; alt=&quot;Idea&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can directly mount the clamp on a servo motor, but I think that will be a lot put a lot of downward force on the shaft. What will be a good mechanical arrangement to do this? Thanks!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ref:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Servo MG996R with Metal Gears&lt;/li&gt;&#xA;&lt;li&gt;Cup: &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://images-na.ssl-images-amazon.com/images/I/31K89PT5m-L.jpg&quot; alt=&quot;cup img&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="14639" LastEditorUserId="37" LastEditDate="2017-03-09T18:27:20.243" LastActivityDate="2017-05-13T12:40:53.397" Title="How can I turn a bowl/glass upside down?" Tags="&lt;motor&gt;&lt;robotic-arm&gt;&lt;actuator&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11485" PostTypeId="2" ParentId="11482" CreationDate="2017-01-25T07:45:53.670" Score="0" Body="&lt;p&gt;There are two reasons reason for your problem:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The main loop is executed very fast - you only check conditionals and assign some values to variables. Total execution time will be probably in order of milliseconds. That means that when you press the button for even as short as 0.1s the loop will execute thousands of times. I would advice on checking the button states only every 50-200 milliseconds.&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;As already mentioned by SteveO, there is also an error in your logic. When variables &lt;code&gt;a&lt;/code&gt; and &lt;code&gt;c&lt;/code&gt; reach their maximum values, there is no way to reset them to their original state. I would do that like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;if(buttonIsPressed()) {&#xA;  changeVariable();&#xA;}&#xA;if(variable &amp;gt; maxValue) {&#xA;  variable = maxValue;&#xA;} &#xA;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="7360" LastEditorUserId="7360" LastEditDate="2017-01-25T22:47:47.520" LastActivityDate="2017-01-25T22:47:47.520" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="11488" PostTypeId="1" CreationDate="2017-01-25T21:33:43.270" Score="-2" ViewCount="124" Body="&lt;p&gt;It seems like humanoid robots is the hottest field of research in robotics. Government agencies are giving huge sums of money to private firms and labs to develop them (For example, Boston Dynamics has developed some really amazing humanoid robots, and some of them look scary!).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is: The human body is highly inefficient. We can't run for very long times, have to learn for several months before we start walking, have only two hands, and are slow. Then why spend so much money and effort emulating such an inefficient thing? May be it is time that we took a step away from getting &quot;inspired&quot; by Nature, and build a man-made, highly efficient body. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;An example: Balancing a robot on two legs in very difficult. My question is, then why use some other method for locomotion, that is easier and more effective. A robot on two legs can run only so much faster. Why not come-up with some optimal shape, and then model your robots on it?&lt;/p&gt;&#xA;" OwnerUserId="15903" LastActivityDate="2017-01-28T07:20:36.813" Title="Why there is so much research going on in humanoid robots?" Tags="&lt;mobile-robot&gt;&lt;humanoid&gt;" AnswerCount="4" CommentCount="2" ClosedDate="2017-01-28T10:49:38.200" ContentLicense="CC BY-SA 3.0" />
  <row Id="11489" PostTypeId="2" ParentId="11488" CreationDate="2017-01-26T02:21:46.963" Score="0" Body="&lt;p&gt;If you can design a robot that consumes meat and vegetables to recharge its power then you will really have something! &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are so many different robot concepts and designs that it is not a productive discussion to lump them into a single category of being designed to mimic the human body.   I can think of many robots that are not like this.   A great example is the Odex 1 from the mid-80's, seen &lt;a href=&quot;http://www.theoldrobots.com/odex.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here.&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, if you think about the tasks that many robots are asked to perform, you will find that most of those tasks were designed to accommodate the human body.   Any assembly line that grows from manual, low-volume, production, into a high-speed automation line would be a great example.   Since the tools and tasks started as human-capable chores, it is natural that we would design robots that can accomplish the same chores.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additionally, many robotic implementations are able to restructure the tools and tasks such that they greatly outperform any human capability.  A simple example is a tool-changing end effector.   I don't know of any humans who are born with a tool turret at the end of their arm!  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also question your statements about human inefficiencies.   For some tasks you are 100% correct.   Running a long distance fast, as you mention, is a good example.   But we can also climb mountains, jump chasms, and ride motorcycles.   &lt;em&gt;Inefficient&lt;/em&gt; in one thing might be a consequence of superb adaptability for many things.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The objective way of looking at this question is to first ask, &lt;em&gt;what is the robot being designed to do?&lt;/em&gt;  Starting with real requirements is the first step to designing a robotic (or other) system to meet those requirements.   Overly general statements about whether or not the design is anthropomorphic do nothing to lead a robot designer toward a proper solution for the tasks that the device is intended to accomplish.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2017-01-26T02:21:46.963" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11490" PostTypeId="1" CreationDate="2017-01-26T07:39:22.760" Score="0" ViewCount="119" Body="&lt;p&gt;I have to determine speed and torque suitable for my combat robot.&#xA;I've done some calculations and I need to know whether they're right or not (because they don't seem to be right).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Suppose I have 10kg robot, I want to push other 10kg robot to the arena walls. Let's first assume opposite robot is not opposing my push. Suppose I want it to move it with acceleration of 10cm/sec/sec (also lemme know if acceleration assumed is suitable for robowar or not).&#xA;Then force required will be,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;F = (total mass to be moved) * (acceleration) = (10+10)*(10e-2) = 2 N.&#xA;Assume opposite robot is also pushing with me same force, in that case I will need another 2 N for opposing his push, Now taking into account frictional retardation, suppose I need another 2 N so total would be 6 N.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming velocity = 10cm/sec, then Power required will be 6 * velocity = 6*10e-2 = 600mW. For 12V motor even with 20% efficiency it would cause current of 250mA only. Also output power = speed X torque.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I've heard that robowars usually require motor with high full load current otherwise they'll be damaged.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So it looks like I am somewhere wrong in my calculations. If so, lemme know where,am I wrong where I assumed that opposing robot will cause just 2 N,  because generally they'd be fitted with more high torque motors. But is it the only thing which goes wrong in above calculations? If opposite bot had to just exert 2N on my bot, are calculations right?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS: By side-shaft geared motors, it is meant that it is internally geared with horizontal shaft, right? Or &quot;side-shaft&quot; means something more?&lt;/p&gt;&#xA;" OwnerUserId="15908" LastActivityDate="2017-09-23T15:19:08.440" Title="Permanent Magnet DC Motor Calcuations" Tags="&lt;mobile-robot&gt;&lt;motor&gt;&lt;wheeled-robot&gt;&lt;design&gt;&lt;torque&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11491" PostTypeId="2" ParentId="11490" CreationDate="2017-01-26T10:14:22.227" Score="1" Body="&lt;p&gt;The logic for the calculation seems ok, you can also check the results &lt;a href=&quot;http://www.robotshop.com/blog/en/drive-motor-sizing-tool-9698&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;http://www.servomagazine.com/uploads/issue_downloads/pdf/Tips%20For%20Selecting%20DC%20Motors%20For%20Your%20Mobile%20Robot.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When building robots that would oviously benefit from as much force (motor torque) as possible, I would suggest the following approach.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Rather than defining speed and acceleration requirements, I would approximate what is the maximum amount of force the wheels can apply to the ground without causing the wheels to slip. This would lead to the maximum torque of the motor by calculating backwards from the wheel force to the motor torque. If you consider that this amount of torque has to be applied to the ground also when the maximum velocity of the robot is reached,  you have defined the motor. You can then check what acceleration will the motor provide. Since it is limited by wheel friction, even if you would increase motor torqe, the acceleration would not incears, since wheels would start to spin.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This way you exploint your wheels to their maximum amount and so deliver the maximum force possible to the oponent robot.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2017-01-26T10:14:22.227" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="11492" PostTypeId="5" CreationDate="2017-01-26T10:37:58.820" Score="0" Body="&lt;p&gt;A mechanism is a device designed to transform input forces and movement into a desired set of output forces and the movement. &lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-02-03T15:34:31.157" LastActivityDate="2017-02-03T15:34:31.157" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11493" PostTypeId="4" CreationDate="2017-01-26T10:37:58.820" Score="0" Body="A mechanism is a device designed to transform input forces and movement into a desired set of output forces and the movement. " OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-02-03T15:33:59.033" LastActivityDate="2017-02-03T15:33:59.033" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11494" PostTypeId="5" CreationDate="2017-01-26T10:38:44.827" Score="0" Body="&lt;p&gt;In physics, power is the rate of doing work. &lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-02-03T15:34:05.430" LastActivityDate="2017-02-03T15:34:05.430" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11495" PostTypeId="4" CreationDate="2017-01-26T10:38:44.827" Score="0" Body="In physics, power is the rate of doing work. " OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-02-03T15:34:21.937" LastActivityDate="2017-02-03T15:34:21.937" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11496" PostTypeId="5" CreationDate="2017-01-26T10:39:41.387" Score="0" Body="&lt;p&gt;Dynamics is a branch of applied mathematics (specifically classical mechanics) concerned with the study of forces and torques and their effect on motion, as opposed to kinematics, which studies the motion of objects without reference to its causes.&lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-02-03T15:34:17.897" LastActivityDate="2017-02-03T15:34:17.897" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11497" PostTypeId="4" CreationDate="2017-01-26T10:39:41.387" Score="0" Body="Dynamics is a branch of applied mathematics (specifically classical mechanics) concerned with the study of forces and torques and their effect on motion, as opposed to kinematics, which studies the motion of objects without reference to its causes." OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-02-03T15:34:37.210" LastActivityDate="2017-02-03T15:34:37.210" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11498" PostTypeId="5" CreationDate="2017-01-26T10:40:18.107" Score="0" Body="&lt;p&gt;An industrial robot is a robot system used for manufacturing. Industrial robots are automated, programmable and capable of movement on two or more axes&lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-02-03T15:34:34.333" LastActivityDate="2017-02-03T15:34:34.333" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11499" PostTypeId="4" CreationDate="2017-01-26T10:40:18.107" Score="0" Body="An industrial robot is a robot system used for manufacturing. Industrial robots are automated, programmable and capable of movement on two or more axes" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-02-03T15:34:14.927" LastActivityDate="2017-02-03T15:34:14.927" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11500" PostTypeId="2" ParentId="11490" CreationDate="2017-01-26T10:48:16.490" Score="1" Body="&lt;p&gt;I affraid you are very wrong with your assumptions. I'm not exactly sure what competition are you going to start in, but take a look at some videos with 3kg sumo robots:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Vienna: &lt;a href=&quot;https://youtu.be/7T0en-RcljE&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://youtu.be/7T0en-RcljE&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Riga: &lt;a href=&quot;https://youtu.be/Z_WE-ppaE5A&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://youtu.be/Z_WE-ppaE5A&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Japan: &lt;a href=&quot;https://youtu.be/lUpUQf16qzQ&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://youtu.be/lUpUQf16qzQ&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;On all of these videos you will see robots that reach speeds of couple m/s and accelerate in less than 1s. Some of these competitions may be played on metal rings and magnets on the robots to increase friction and in result maximum possible accelerations. Still, I think the smallest reasonable speed is 1-1.5m/s with acceleration at least $1m/s^2$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, let's find out how much force do you need to push your opponent. For a moment let's assume it just a 10kg block of rubber (because a robot will likely have rubber wheels). From a &lt;a href=&quot;http://www.engineeringtoolbox.com/friction-coefficients-d_778.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;table of friction coefficients&lt;/a&gt; you select one between rubber and whatever material the arena is made of - let's say dry concrete. That means that friction coefficient $\mu = 0.85$. Now the friction force $F_f = \mu * m * g$, so for 10kg block of rubber it will be around 85N and that's under the assumption your opponent is doing nothing!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To sum up aim for the biggest motors you can pack in your robot. Also, keep in mind that the more friction you have, the more push you will get. That means that good tires for your wheels are as important as the motors.   &lt;/p&gt;&#xA;" OwnerUserId="7360" LastActivityDate="2017-01-26T10:48:16.490" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="11501" PostTypeId="2" ParentId="11488" CreationDate="2017-01-26T12:21:05.310" Score="3" Body="&lt;p&gt;From another point of view, bipeds(humanoids) are regardless of their use interesting since they are high dimensional nonlinear hybrid systems. Sure, there are more systems with those qualifications, but the special thing with bipeds is that we have a clear intuition of what is right and wrong even without any mathematical background. Furthermore, take a quadruped(4 legs), those robots are arguably more inherently stable, while with two legs, especially if you remove the feet, that is a different story. So in a way, those humanoids are perfect tools to center nonlinear control theory around.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think you can cook up a similar argument from an AI point of view. However, I agree with you that for many practical problems a biped makes no sense. &lt;/p&gt;&#xA;" OwnerUserId="15909" LastEditorUserId="15909" LastEditDate="2017-01-26T14:21:34.253" LastActivityDate="2017-01-26T14:21:34.253" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11503" PostTypeId="2" ParentId="11488" CreationDate="2017-01-26T16:32:26.893" Score="0" Body="&lt;p&gt;Fully exploring the reasons for designing humanoid robots would need to explore human psychology and involve lots of discussion with no clear answer, however there is one very concrete reason.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many robots are given a humanoid form because they must operate in an environment designed for humans, and must use tools designed for humans. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was the primary criteria for the &lt;a href=&quot;http://archive.darpa.mil/roboticschallenge/teams.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;DARPA Robotics Challenge&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2017-01-26T16:32:26.893" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11506" PostTypeId="1" CreationDate="2017-01-27T22:03:15.080" Score="1" ViewCount="76" Body="&lt;p&gt;I am currently working on a prototype device to &lt;strong&gt;&lt;em&gt;automate cloth ironing task&lt;/em&gt;&lt;/strong&gt;. So basically the mechanical design involves 4 manipulators and a separate manipulator arm with a &lt;strong&gt;&lt;em&gt;hot pad (iron)&lt;/em&gt;&lt;/strong&gt;  to manipulate a given cloth to perform the ironing task. I understand its a very complicated task and I have come up with the following steps to potentially go about solving this problem. &lt;strong&gt;&lt;em&gt;I would appreciate any kind input on the plausibility of this idea (mechanical and software challenges).&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;For my first EB (Engineering build), I'm solely focusing on solving this problem for a T-shirt&lt;/em&gt;&lt;/strong&gt;, probably extend this solution to other cloth types with modifications. &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;From a pile of clothes, choose a certain cloth for ironing using background subtraction and colour based image segmentation (already programmed this part and its working!)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Classify or recognise the chosen cloth into one of any known classes using CNN (Convoluted neural networks). &lt;strong&gt;&lt;em&gt;I personally think this part is quite achievable given that I have enough training data to train my network.&lt;/em&gt;&lt;/strong&gt; &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;This is where the problem begins!. &lt;strong&gt;&lt;em&gt;After classifying the given cloth, find coordinates of points of interest to manipulate the cloth in a certain 'predetermined' mechanical movement to facilitate the manipulation of cloth&lt;/em&gt;&lt;/strong&gt;. What I mean by points of interest here is, for example, in the case of a T-shirt (see image below); &lt;strong&gt;&lt;em&gt;the algorithm should localise the locations&lt;/em&gt;&lt;/strong&gt; the following parts&#xA;1) Midpoint of T-shirt hem (see image for details)&#xA;2) Corner point of T-shirt hem (see image for details)&#xA;2) Start of yoke&#xA;3) End of the yoke&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;I believe (through my mental visualisation) that these are the key points to place the T-shirt flat on the surface (a known STATE)&lt;/em&gt;&lt;/strong&gt;. When the T-shirt is flat on the surface, it could be stretched just enough to make the cloth wrinkle free to facilitate ironing through some kind of force sensing mechanism (Haven't really though about it, but I presume its not huge challenge).&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;4&quot;&gt;&#xA;&lt;li&gt;When the cloth is in a known STATE, proceed to ironing using path planning algorithms. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/OWWpO.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OWWpO.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do  understand that this is a very complex problem, just want to get some inputs to see if I am on the right path. &lt;strong&gt;&lt;em&gt;I am really not sure if STEP 4 is mechanically achievable since non-rigid body manipulation is a huge problem for robots.&lt;/em&gt;&lt;/strong&gt; &lt;strong&gt;&lt;em&gt;I am quite confident on the software aspect of the project, I believe a large enough data set and well tested algorithm will help me identify the afore-mentioned points of interest in a test cloth. But I would like hear the mechanical challenges and plausibility of this project from design engineers standpoint. Hope I'm clear about my query.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any input is appreciated.&#xA;Thank you so much and cheers :)&lt;/p&gt;&#xA;" OwnerUserId="7278" LastEditorUserId="7278" LastEditDate="2017-01-29T08:29:18.723" LastActivityDate="2017-01-29T08:29:18.723" Title="Cloth (non-rigid body) manipulation with computer vision?" Tags="&lt;robotic-arm&gt;&lt;computer-vision&gt;&lt;mechanism&gt;&lt;manipulator&gt;" AnswerCount="0" CommentCount="4" ClosedDate="2017-01-28T16:22:23.290" ContentLicense="CC BY-SA 3.0" />
  <row Id="11507" PostTypeId="2" ParentId="11488" CreationDate="2017-01-28T07:20:36.813" Score="0" Body="&lt;p&gt;A car is good at driving high speeds on flat ground. A car cannot use a drill. A car cannot climb stairs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A dishwasher is good at cleaning dishes. A dishwasher also cannot use a drill. A dishwasher also cannot climb stairs. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The human body is highly inefficient. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;On the contrary, the human body is extremely efficient. 100 food calories (kcal) will power a person for about a mile (running). A 12oz can of Coke has 140 calories, and there are 128oz in a gallon. That means a person running gets about 15 miles per gallon. If you walk you can double that because walking a mile only burns about 50kcal. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, 15-30 miles per gallon on soda, to put it into a format that allows for better comparison to cars. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;We can't run for very long times&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;We can run longer than just about any other animal. The earliest form of hunting was the &lt;a href=&quot;https://en.wikipedia.org/wiki/Persistence_hunting&quot; rel=&quot;nofollow noreferrer&quot;&gt;endurance hunt&lt;/a&gt; where you basically chase an animal until it collapses. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;May be it is time that we took a step away from getting &quot;inspired&quot; by Nature, and build a man-made, highly efficient body.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Build a highly efficient body to do what, exactly? Can you make a list of all the things you want this &quot;body&quot; to do, and then explain how exactly that body is going to traverse sand, rocks, grass, and stairs? &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-01-28T07:20:36.813" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11509" PostTypeId="1" CreationDate="2017-01-28T22:47:21.753" Score="1" ViewCount="2778" Body="&lt;p&gt;I want to design a linear controller for a quadcopter which is 6dof nonlinear.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have non-linear equations. But in order to design a linear controller, I need to find a linear state-space model of the vehicle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I skimmed bunch of articles and thesis without any result. Most of them have some approximations for separate parts of the model to linearize.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need the state-space as a form like below,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\dot{x}=Ax(t)+Bu(t)$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I couldn't find the $A$ and $B$ matrices. I made the small angle and hover condition approximations so that equations become simpler yet they are still non-linear.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Non-simplified equations are as follow,&#xA;&lt;a href=&quot;https://i.stack.imgur.com/nr0HV.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/nr0HV.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15133" LastEditorUserId="15133" LastEditDate="2017-01-29T22:15:17.770" LastActivityDate="2021-05-16T12:21:09.437" Title="How to find state-space representation of quadcopter?" Tags="&lt;quadcopter&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="11511" PostTypeId="1" AcceptedAnswerId="11513" CreationDate="2017-01-29T15:12:16.560" Score="0" ViewCount="828" Body="&lt;p&gt;I am new in robotics. I am playing with a 4 axis robotic arm called &lt;a href=&quot;https://media.readthedocs.org/pdf/uarmdocs/latest/uarmdocs.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;uArm&lt;/a&gt; and I was wondering how to draw a circle with it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For this I mean the math of describing a circle in task space for the robot joints to achieve with the implementation of the algorithm in code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What will be the best approach? Any sources where to research? I tried to research around the web but I did not find anything useful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you in advance&lt;/p&gt;&#xA;" OwnerUserId="15928" LastEditorUserId="15928" LastEditDate="2018-06-10T12:00:42.387" LastActivityDate="2018-06-10T12:00:42.387" Title="Draw circle with 4-axis robotic arm" Tags="&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11512" PostTypeId="1" AcceptedAnswerId="11515" CreationDate="2017-01-29T20:26:11.370" Score="1" ViewCount="41" Body="&lt;p&gt;I am building a (fork of) the Lawnbot-400 robot found on Instructables.com and in the book Arduino Robotics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The author, while brilliant, tends to gloss over and omit details, one of those being how he actually connected the 2 recommended 12 V DC batteries to anything (I realize for the more experienced builder this is probably obvious though).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could you please provide guidance on the types of cables to use to do this? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems like I have seen some which use little clamps on one end and / or which have a plastic terminal in the middle of the cable that can be disconnected while the other 2 ends are connected to the battery and motor controller. Do I need those features?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The batteries I am using are Mighty Max 12 V 6 Ah high-rate gel series.&lt;/p&gt;&#xA;" OwnerUserId="4537" LastEditorUserId="10596" LastEditDate="2017-01-30T14:42:05.507" LastActivityDate="2017-01-30T14:42:05.507" Title="Proper cable to connect 12 V, DC 6 Ah batteries to Sabertooth Motor Controller for Lawnbot?" Tags="&lt;motor&gt;&lt;battery&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11513" PostTypeId="2" ParentId="11511" CreationDate="2017-01-29T21:38:04.680" Score="0" Body="&lt;p&gt;Your question is still &quot;I need help with everything about this,&quot; so I'll provide a pretty generic response that should get you started.  As you dive into the details you may consider posting questions about specific areas that remain challenges to you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Overall, you need to accomplish the following steps:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;define the circle you are trying to draw in global coordinates (the &lt;em&gt;O&lt;/em&gt; system in the document you linked to)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;break the circle down into a series of target points that you want the pen to move between.  If you divide the circle into 10 points, you will have a poor approximation to a circle, but it will get you started.  If you break it into 1,000 points, you will follow the circle fairly closely.  You will need to experiment to see what accuracy you want to achieve (you could define this mathematically but that seems beyond the scope of what you are trying to do)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;for each target point, define the robot joint angles that will achieve the target position.  This is called Inverse Kinematics.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;program the robot to cycle between the target points&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Defining the circle in the XY plane is straightforward:  $$z = C$$&#xA;$$(x - x_0)^2 + (y - y_0)^2 = r^2$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where C is the height of the circle above the ground, x and y are the variables of interest, the point $(x_0, y_0, C)$ represents the coordinates of the center of the circle, and $r$ is the circle's radius.  In your case, I believe $z$ is a constant due to the kinematics of the arm and its inability to rotate the pen through any angle other than vertical.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The inverse kinematics will be a bit challenging for a newbie.  From the mechanics of that arm, however, it appears the two parallel 4-bar mechanisms will keep the end effector perpendicular to the ground.  That simplifies your task a bit.  Basically you need to find, for each (x, y, z) target position, what joint angles will achieve this position.  There are many papers and sites that describe the inverse kinematics of an articulated arm manipulator - I'd start with these if I were you, and post specific questions when you get stuck.  It is too broad to describe in this general answer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you have the inverse kinematics, you simply program the arm to cycle from one pose to the next. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you post follow-up questions, if necessary, please describe in detail the steps you've taken that have resulted in you getting stuck. &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2017-01-29T21:38:04.680" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11515" PostTypeId="2" ParentId="11512" CreationDate="2017-01-30T12:31:13.727" Score="1" Body="&lt;p&gt;If you search for &quot;battery quick connect&quot; you will see for little plastic connectors that will enable you to connect/disconnect the batteries.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These are not 100% necessary, yet they do make life easier when working with things: you just unplug the batteries when you don't want your circuits &quot;live&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &quot;cables to use to do this&quot;, just your regular cables.  The size of the cable depends on what power you will be transmitting through it.  There are nice charts on the net giving you info on what size you should use depending on the power draw.  You can search for &quot;cable sizing chart&quot; to check which would work for you.&lt;/p&gt;&#xA;" OwnerUserId="15912" LastActivityDate="2017-01-30T12:31:13.727" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11517" PostTypeId="1" AcceptedAnswerId="11552" CreationDate="2017-01-30T17:00:37.450" Score="1" ViewCount="323" Body="&lt;p&gt;I want to develop an application for NAO robot using ROS (I already started to use ROS with NAO). But I don't know how to choose a scenario for my robot depending on ROS packages (SLAM, objects recognition...).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is: is there any ROS packages for NAO applications that i can started with (turtlebot robot for example has the navigation stacks -SLAM- in ROS).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone help me please??&lt;/p&gt;&#xA;" OwnerUserId="13022" LastActivityDate="2017-02-07T01:59:15.857" Title="NAO applications using ROS" Tags="&lt;ros&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11518" PostTypeId="1" CreationDate="2017-01-30T22:44:32.280" Score="3" ViewCount="137" Body="&lt;p&gt;In the environment, I have two robots and a couple of fixed obstacles. In order to detect obstacles I am using ultrasonic sensors. For robots, they need to detect each other and from which side other robot is coming (front, left, right or back), and do this during the motion. For this purpose, I cannot use PIR sensors, because robots are constantly moving. Also, I need to differentiate between moving robots and stationary obstacles, so ultrasonic sensors are also not helpful. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I came up with idea to somehow mark the robots with some property unique to environment, so when we detect object with that property, we know that it is a robot, and not another obstacle. One of ideas might be to put lasers on one robot, and on other robot put four laser sensors, one for each side, so we precisely can say from which side the other robot came from. Another option might be to use IR transmitters on one robot and four IR receivers on other robot? What do you suggest, is there any other type of sensors that might help?&lt;/p&gt;&#xA;" OwnerUserId="15942" LastEditorDisplayName="user9480" LastEditDate="2017-05-01T10:25:43.443" LastActivityDate="2019-09-18T10:35:14.063" Title="Robot detection in motion" Tags="&lt;sensors&gt;&lt;ultrasonic-sensors&gt;" AnswerCount="4" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11519" PostTypeId="1" AcceptedAnswerId="11525" CreationDate="2017-01-30T22:44:55.883" Score="2" ViewCount="1934" Body="&lt;p&gt;I want to calculate 'r'&#xA;&lt;a href=&quot;https://i.stack.imgur.com/CALUW.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/CALUW.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know &lt;a href=&quot;https://i.stack.imgur.com/4BaS6.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4BaS6.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;, and the Position of(X, Z)&#xA;But I don't know how to apply it in this robot.&lt;/p&gt;&#xA;" OwnerUserId="15940" LastActivityDate="2017-02-09T09:34:39.073" Title="How can I calculate Center of mass for each link of Robot?" Tags="&lt;mobile-robot&gt;&lt;robotc&gt;&lt;humanoid&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11521" PostTypeId="1" AcceptedAnswerId="11522" CreationDate="2017-01-31T02:07:44.373" Score="2" ViewCount="111" Body="&lt;p&gt;I bought some batteries for a project with the recommended voltage but too weak Ah.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The batteries are to be connected in parallel. I can't currently afford to upgrade both batteries, but I was curious if I can try upgrading one of them and connecting it in parallel to one of the ones I have now? My robot is going to weigh less than the one on which it is based, so perhaps just upgrading one is sufficient. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or is that unsafe?&lt;/p&gt;&#xA;" OwnerUserId="4537" LastActivityDate="2019-03-13T09:41:34.753" Title="Parallel connection of batteries with equal voltage but different Ah?" Tags="&lt;battery&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11522" PostTypeId="2" ParentId="11521" CreationDate="2017-01-31T05:18:59.927" Score="4" Body="&lt;p&gt;You aren't being specific enough. Some chemistries would possibly allow this but others would not. If the batteries have the same nominal voltage than &lt;strong&gt;theoretically&lt;/strong&gt; they &lt;em&gt;should&lt;/em&gt; work fine in parallel with no issues. The problem is when you start discharging them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See the graph below:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/DE5Ry.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/DE5Ry.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;br&gt;&#xA;&lt;sub&gt;(source: &lt;a href=&quot;http://www.mpoweruk.com/images/discharge-chemistry.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;mpoweruk.com&lt;/a&gt;)&lt;/sub&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Batteries with different capacities would discharge at different rates, so if you had two batteries in parallel of say 1000mAh and 500mAh, there would be a heavy imbalance in the rates of discharge, causing them to be at different state-of-charge percentages. If one were at 80% and another at 40% then there would be a huge issue because even though the difference in the voltages could be as small as .1v it would be enough to cause a short and cause heavy damage to your batteries. This is true for all batteries, though some like the NiMH batteries are more tolerant and could potentially survive if the currents aren't that far off. But definitely NEVER try this with a LiPo unless you are a fan of melting your hands off.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To quote SparkFun:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Be careful when connecting batteries in parallel! All the cells should have the same nominal voltage and same charge level. If there are any voltage differences, a short circuit could occur causing overheating and possibly fire.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;TL;DR Hella unsafe, use at your own risk. I would not recommend.&lt;/p&gt;&#xA;" OwnerUserId="15947" LastEditorUserId="15160" LastEditDate="2019-03-12T23:30:16.650" LastActivityDate="2019-03-12T23:30:16.650" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="11523" PostTypeId="2" ParentId="11518" CreationDate="2017-01-31T07:47:35.477" Score="1" Body="&lt;p&gt;My solution disadvantages/limitations are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Needs computation/processing power&lt;/li&gt;&#xA;&lt;li&gt;Robots should move slowly&lt;/li&gt;&#xA;&lt;li&gt;Robots scan environment quickly as possible as you can&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Here are the steps:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Create a radar like system with a servo and two ultrasonic distance sensor or use 360 deg. servo and a ultrasonic. (&lt;a href=&quot;http://www.instructables.com/id/Arduino-HC-SR04-Ultrasonic-Rover/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.instructables.com/id/Arduino-HC-SR04-Ultrasonic-Rover/&lt;/a&gt;) &lt;/li&gt;&#xA;&lt;li&gt;Add a compass sensor for deciding absolute angle of ultrasonic sensor.&lt;/li&gt;&#xA;&lt;li&gt;detect the environment by scanning.&lt;/li&gt;&#xA;&lt;li&gt;after the scan, you have signal which have a size of 360 in each robot. Because of static obstacles, the scan signals should have similarities. you can compare scans with correlation / convolution. delay gives you distance vector of your robot. (&lt;a href=&quot;https://www.mathworks.com/help/signal/ref/xcorr.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.mathworks.com/help/signal/ref/xcorr.html&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;li&gt;also you can compare the the scan signals and decide where is the other moving robots. Moving robots creates difference in correlation and you can detect it.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-02-03T22:34:36.387" LastActivityDate="2017-02-03T22:34:36.387" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11524" PostTypeId="2" ParentId="11325" CreationDate="2017-01-31T12:38:29.157" Score="1" Body="&lt;p&gt;I use Step-Up breakouts from SparkFun and Pololu all the time. They provide a consistent, continuous flow at the desired voltage. I recommend &lt;a href=&quot;https://www.pololu.com/product/2117&quot; rel=&quot;nofollow noreferrer&quot;&gt;this one&lt;/a&gt;, or if you need more than 1.4A current than &lt;a href=&quot;https://www.pololu.com/product/2568&quot; rel=&quot;nofollow noreferrer&quot;&gt;this one&lt;/a&gt;. Beware that these components can be easily damaged by heat, and too much will damage the Step-Up, causing it to actually &lt;em&gt;lower&lt;/em&gt; the voltage. As long as you don't burn the thing it will provide more than useful.&lt;/p&gt;&#xA;" OwnerUserId="15947" LastActivityDate="2017-01-31T12:38:29.157" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11525" PostTypeId="2" ParentId="11519" CreationDate="2017-01-31T15:50:46.850" Score="2" Body="&lt;p&gt;Since it is not sure that your robot is in a plane or not, I would consider it in 3D. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You have all the geometrical dimensions of the robot. And I assume you have also all angles in all joints. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You need to calculate the X Y and Z coordinates of all centers of masses on the image, relative to the same coordinate system. It is important that they are computed relative to the same coordinate system. In order to compute them in the same coordinate system you need to know all the joint angles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The X coordinate of the center of mass ($x_{CoG}$) will equal, as the formula says:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$x_{CoG} = \frac{\sum{m_i \cdot x_i}}{M}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;the same is true for all other coordinates:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$y_{CoG} = \frac{\sum{m_i \cdot y_i}}{M}$; $z_{CoG} = \frac{\sum{m_i \cdot z_i}}{M}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If all y coordinates are 0 (i.e. the robot is in a plane) obviously $y_{coG}$ will also be zero.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can define a &lt;a href=&quot;https://en.wikipedia.org/wiki/Transformation_matrix&quot; rel=&quot;nofollow noreferrer&quot;&gt;transformation&lt;/a&gt; matrix for each joint. The transformation matrices should be set up according to the &lt;a href=&quot;https://en.wikipedia.org/wiki/Denavit%E2%80%93Hartenberg_parameters&quot; rel=&quot;nofollow noreferrer&quot;&gt;D-H convention&lt;/a&gt;. This is not a must.  The only variable in the transformation matrix will be the joint angle. You will need a vector which points to the CoG from the joint. This will be a constant vector (without variables), form the joint to the CoG (as it seems $[r,0,0]$). Please note that if you are not using the D-H convention the vector coordinates are not valid!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let the reference coordinate system be $CS_a$ in the ankle. &#xA;Assuming you have a 2 dof joint in the &quot;ankle&quot; of the robot&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{pmatrix} &#xA;x_m5 \\&#xA;y_m5 \\&#xA;z_m5 \\&#xA;1&#xA;\end{pmatrix}&#xA;= &#xA;T_a \cdot T_{ankle_1}(q_{a1}) \cdot T_{ankle2}(q_{a2}) \cdot T_{ll} \cdot T_{knee}(q_k) \cdot&#xA;\begin{pmatrix} &#xA;r_5 \\&#xA;0 \\&#xA;0 \\&#xA;1&#xA;\end{pmatrix}  $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where $T_a$ is the transformation matrix of the reference coordiante system ($CS_a$). If indeed this it the reference coordinat system then it equals the $4x4$ identiy matrix $I_{4x4}$. $T_{ankle1}$ is the Dh transformation matrix of the first ankle rotation $T_{ankle2}$ is the transformation matrix f the second ankle joint. $q_{a1}$ and $q_{a2}$ are the joint angles. The translation from the anle joint to the knee joint is sperated to a constant transformation matrix, $T_{ll}$, corresponding to the lower leg. &#xA;$$ T_{ll} = &#xA;\begin{pmatrix} &#xA;1 &amp;amp; 0 &amp;amp; 0 &amp;amp; L_6 \\&#xA;0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\&#xA;0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0\\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1&#xA;\end{pmatrix}  $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thre reason behing this speparation is that this way you can caluclate the coordinates of the CoG in the lower leg as:&#xA;$$&#xA;\begin{pmatrix} &#xA;x_m6 \\&#xA;y_m6 \\&#xA;z_m6 \\&#xA;1&#xA;\end{pmatrix}&#xA;= &#xA;T_a \cdot T_{ankle_1}(q_{a1}) \cdot T_{ankle2}(q_{a2}) \cdot&#xA;\begin{pmatrix} &#xA;r_6 \\&#xA;0 \\&#xA;0 \\&#xA;1&#xA;\end{pmatrix}  $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can calcualte similarly all coordinates of the centers of masses expressed in the same coordinate system (in this case the ankle coordinate system) and the mass associated with each center of mass. Then you start multiplying the masses with the coordinates and summing them up, divided by the total mass (similar to the same equation above). In your case 7 times.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I must add that this formula is used for calculating the center of mass of rigid bodies. I am not sure how well it performs for linkages. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the robot is in motion, in order to calculate the positions of the CoGs, the same principles have to be applied, but cyclically. &lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2017-02-09T09:34:39.073" LastActivityDate="2017-02-09T09:34:39.073" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="11526" PostTypeId="1" CreationDate="2017-01-31T18:04:01.257" Score="2" ViewCount="48" Body="&lt;p&gt;While stereo algorithms perform matching, they usually compare pixels within a region around the feature. I would like to know what effect the size of that search window has on the matching performance. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And what sort of features don't get detected if you go on increasing the size?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you.  &lt;/p&gt;&#xA;" OwnerUserId="7266" LastActivityDate="2017-01-31T18:04:01.257" Title="What is the effect that the size of the correlation window (in pixels) has on the matching performance of stereo algorithms?" Tags="&lt;stereo-vision&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11528" PostTypeId="1" CreationDate="2017-02-01T10:27:54.830" Score="0" ViewCount="218" Body="&lt;p&gt;I came across RL to program robotic manipulators. But according to the website, currently supported websites are Ubuntu and Windows only. Since Ubuntu and Mac OS are based on UNIX kernel, is it possible to deploy RL on MacOS Xcode?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Link : &lt;a href=&quot;http://www.roboticslibrary.org&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.roboticslibrary.org&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you.&lt;/p&gt;&#xA;" OwnerUserId="7278" LastEditorUserId="10748" LastEditDate="2017-03-30T18:42:12.223" LastActivityDate="2017-03-30T18:42:12.223" Title="How to use RL (Robotics Library) with Xcode?" Tags="&lt;inverse-kinematics&gt;&lt;forward-kinematics&gt;&lt;manipulator&gt;&lt;robotics-library&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11529" PostTypeId="2" ParentId="11528" CreationDate="2017-02-01T10:58:58.957" Score="1" Body="&lt;p&gt;The RL is an open source project, therefore you have access to the source code. The sour code may have references to operating system specific functions and libraries, but offering compatibilitz to linux and windows is a good sign. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I recommend that you download the sourcecode and try to integrate it to a simple XCode project as c++ source code (assuming RL is C++). If it shows a few errors you can try to solve them one by one. If there are too many you should look for a guidance on porting or migrating source code from Win/Linux to XCode. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can probably get good help on this on StackOverflow. e.g. start &lt;a href=&quot;https://stackoverflow.com/questions/5034286/import-existing-c-project-into-xcode-ide&quot;&gt;here&lt;/a&gt; or &lt;a href=&quot;https://stackoverflow.com/questions/10128646/getting-xcode-to-include-compile-and-link-existing-c-codebase-in-xcode-4-3&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="-1" LastEditDate="2017-05-23T12:37:11.430" LastActivityDate="2017-02-01T11:10:42.767" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="11533" PostTypeId="1" CreationDate="2017-02-02T18:17:53.267" Score="1" ViewCount="1063" Body="&lt;p&gt;as the title says, i want to calculate how much km/h is required to lift 1kg of weight.&#xA;Please explain this to me as simple as you can since i'm really noob in this.&#xA;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="15976" LastActivityDate="2017-02-03T14:45:49.147" Title="How to calculate what wind speed is required to lift 1kg?" Tags="&lt;motor&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ClosedDate="2017-02-03T15:55:31.223" ContentLicense="CC BY-SA 3.0" />
  <row Id="11534" PostTypeId="2" ParentId="11518" CreationDate="2017-02-02T23:03:40.317" Score="0" Body="&lt;p&gt;First: You have said that robot do not communicate with each other. But can they communicate with a third party (not necessarily a robot). Then you can mark your robots - objects with some kind of code (Like QR) and put a camera (Observer) on top of the environment. Then send the message to each robot about their relative position to each other. (Since there is only one way communication: Master -&gt; Slave this will be a simpler network then creating a network between all robots.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If they can not communicate in high level at all, lets think about all the mediums and signals that can deliver some data and from your description this &lt;strong&gt;data should indicate the ID of robot, not just identify it as robot&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;There is light as you have guessed. Other then what you have suggested already (IR sensors) you can put camera on each of them and mark objects and robots (with their different sides) but both material and computation is costly. There are various ways to do it and a lot of challenges you need to face. Even with IR sensors you need to make sure data from different source will not mix (may be use time dividing).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;There is sound: &lt;a href=&quot;https://en.wikipedia.org/wiki/Sound_localization&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sound Localization&lt;/a&gt; : You can &lt;strong&gt;combination of Frequency Modulation and Sound Localization&lt;/strong&gt;. If all robots (and object can too but may seem unreasonable) continuously produce a sound in a unique frequency. Then each robot will get two (or more) microphones. You can use Time-to-Frequency Domain transformations (like fourier) to filter unrelated sounds and identify different sources and their stregths. Then use differential signal strength or phase from all microphones to approximately locate direction and distance of other robots. It is mechanically simple, requires some computation (FT is not that costly). You may even find-design digital circuit to process the signals instead of programming.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;There is electromagnetic waves: Many RF devices provide information on signal strength from unique sources, and there are really cheap RF modules in market. It will not give you idea about direction but only distance. And since the electromagnetic waves travel way more faster then sound, it is really hard to differentiate difference between signals (you need very accurate hardware) so we can not use a technique easily like sound localization.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Of course there must be more ways but right now these are all i can think of on top of my head.&lt;/p&gt;&#xA;" OwnerUserId="5704" LastActivityDate="2017-02-02T23:03:40.317" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11537" PostTypeId="2" ParentId="11533" CreationDate="2017-02-03T14:45:49.147" Score="1" Body="&lt;p&gt;That is a very difficult question and as far as I know it is nearly impossible to answer in that way. You need to define the &quot;sail&quot; you use further. Read &lt;a href=&quot;https://en.wikipedia.org/wiki/Forces_on_sails#Forces_on_sails&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; and specify your problem further.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Perhaps this is enugh for you:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Energy of moving air&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$E = \frac{1}{2} \cdot \rho \cdot A \cdot v_{wind}^3 \cdot t$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;E - Energy&lt;/li&gt;&#xA;&lt;li&gt;$\rho$ - Density of air&lt;/li&gt;&#xA;&lt;li&gt;A - Area of the sail&lt;/li&gt;&#xA;&lt;li&gt;v - velocity of the wind&lt;/li&gt;&#xA;&lt;li&gt;t - time&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Energy of lifted weight&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$ E = m \cdot g \cdot h(t) = m \cdot g \cdot v_{lifitng} \cdot t $&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;m - mass of the object&lt;/li&gt;&#xA;&lt;li&gt;g - 9.81 m/s^2&lt;/li&gt;&#xA;&lt;li&gt;h(t) - height at time t&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Assuming that you have a system which can convert the wind energy in a perfect way to potential energy, than you can at least calculate some boundary values. If you want your question answered, specify the geometry of the sail, wind angle etc. further.&lt;/p&gt;&#xA;" OwnerUserId="15982" LastActivityDate="2017-02-03T14:45:49.147" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11538" PostTypeId="1" AcceptedAnswerId="11539" CreationDate="2017-02-03T18:38:45.960" Score="4" ViewCount="7240" Body="&lt;p&gt;I want to write my own kinematics library for my project in C++. I do understand that there are a handful of libraries like RL (Robotics Library) and ROS with inverse kinematics solvers. But for my dismay, these libraries DO NOT support MacOS platform. I have already written the Forward Kinematics part, which was quite straight forward. But for the Inverse Kinematics part, I am quite skeptical since the solution to a IK problem involves solving sets of non-linear simultaneous equation. I found out the Eigen/Unsupported 3.3 module has a APIs to non-linear equations. But before I begin on this uncertain path, I want to get some insight from you guys on the plausibility and practicality of writing my IK library. My manipulator design is rather simple with 4 DoF and the library will not be used for other designs of manipulators. So what I am trying to achieve is taylor-made IK library for my particular manipulator design than a rather a 'Universal' library.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Am I simply trying to reinvent the wheel here by not exploring the already available libraries? If yes, please suggest examples of IK libraries for MacOS platform.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Has anyone written their own IK library? Is it a practical solution? Or is it rather complex problem which is not worth solving for a particular manipulator design?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or should I just migrate all my project code (OpenCV) to a Linux environment and develop the code for IK in Linux using existing libraries?&lt;/p&gt;&#xA;" OwnerUserId="7278" LastEditorUserId="37" LastEditDate="2017-05-07T00:05:55.227" LastActivityDate="2017-05-07T00:07:34.267" Title="Programming Inverse Kinematics in C++" Tags="&lt;ros&gt;&lt;inverse-kinematics&gt;&lt;c++&gt;&lt;forward-kinematics&gt;&lt;linux&gt;" AnswerCount="5" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11539" PostTypeId="2" ParentId="11538" CreationDate="2017-02-03T18:52:37.293" Score="5" Body="&lt;p&gt;It is rather straightforward to implement inverse kinematics for a particular manipulator in C++.   Of course, you need to begin with the inverse kinematic equations themselves.   Putting those into code will only involve a few trigonometric functions such as acos, asin, and atan2 (use atan2 instead of atan), and probably a couple of square and square root terms.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will learn a lot by doing this.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2017-02-03T18:52:37.293" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11540" PostTypeId="1" AcceptedAnswerId="11544" CreationDate="2017-02-03T21:26:47.747" Score="1" ViewCount="43" Body="&lt;p&gt;Suppose you have a control card. We do not have access to the control card's code and we do not know which control algorithm is used (PID, PD, PI, Fuzzy, ...). We can only measure the control inputs we apply and the output signals the card generates. For examples a quadrotor card, inputs are yaw, pitch roller and throttle and the outputs are propeller pwm signals. Can we predict the algorithm and coefficients/properties used? Is there such a method or study? There are many ready to use control cards, we can imitate or improve for robot control. I think it is important to develop a method for extraction/prediction of algorithm on control board. Thank you for your help and your views.&lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-02-04T08:20:12.650" LastActivityDate="2017-02-04T13:44:24.857" Title="Prediction of Ready to Use Robotic Control Cards Codes" Tags="&lt;mobile-robot&gt;&lt;control&gt;&lt;pid&gt;&lt;algorithm&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11542" PostTypeId="2" ParentId="11538" CreationDate="2017-02-04T01:49:46.340" Score="6" Body="&lt;p&gt;I agree with SteveO that there is nothing wrong with reinventing the wheel if you want to learn about wheels.  And for a single application, 4 DoF arm, the IK is probably not too hard.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I feel like I should mention that most of the kinematics libraries out there are mostly targeted towards Linux.  And as such, probably not too hard to compile from source for MacOS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are some common libraries:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.petercorke.com/Robotics_Toolbox.html&quot; rel=&quot;noreferrer&quot;&gt;Robotics Toolkit&lt;/a&gt; - Matlab, so will work in Mac out of the box.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.orocos.org/&quot; rel=&quot;noreferrer&quot;&gt;Orocos&lt;/a&gt; - C++, &lt;a href=&quot;http://www.orocos.org/wiki/installing-orocos-toolchain-27-source-mac-osx&quot; rel=&quot;noreferrer&quot;&gt;supports Mac OSX&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://openrave.org/&quot; rel=&quot;noreferrer&quot;&gt;OpenRave&lt;/a&gt; - C++ and Python.  Binaries for Linux and Windows, but there are &lt;a href=&quot;http://openrave.org/docs/latest_stable/coreapihtml/installation_macosx.html&quot; rel=&quot;noreferrer&quot;&gt;instructions for compiling for Mac OSX&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;ROS &lt;a href=&quot;http://moveit.ros.org/&quot; rel=&quot;noreferrer&quot;&gt;MoveIt!&lt;/a&gt; - This might be most difficult to install on a Mac.  It looks like &lt;a href=&quot;http://wiki.ros.org/jade/Installation/OSX/Homebrew/Source&quot; rel=&quot;noreferrer&quot;&gt;ROS Jade&lt;/a&gt; has more complete instructions for building for Mac than &lt;a href=&quot;http://wiki.ros.org/kinetic/Installation/OSX/Homebrew/Source&quot; rel=&quot;noreferrer&quot;&gt;ROS Kinetic&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="110" LastActivityDate="2017-02-04T01:49:46.340" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11544" PostTypeId="2" ParentId="11540" CreationDate="2017-02-04T13:44:24.857" Score="2" Body="&lt;p&gt;What you are trying to do is to identify a system. Since you kind of know what to expect, your system is not black box, it is grey box or white box. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a lot of theory on how to identify these systems. The field itself is called System Identification and you can find a lot of books and publications for all kinds of systems (blackbox, greybox, whitebox etc.)&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2017-02-04T13:44:24.857" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="11545" PostTypeId="1" AcceptedAnswerId="11546" CreationDate="2017-02-04T15:58:29.500" Score="0" ViewCount="588" Body="&lt;p&gt;I have Arduino and Matlab which has hardware support package for Arduino.&#xA;I want to create SPWM signal (sinusoidal pulse width modulation) to be the output of the Arduino board.&#xA;I could generate the signal required in Matlab using this code&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;function spwm = SinWave(frequency)&#xA;nsamples = 1250 * frequency;&#xA;t = linspace(0,1,nsamples);&#xA;sn = sin(2*pi*frequency*t);&#xA;st = sawtooth(2*pi*frequency*10*t);&#xA;spwm = abs(sn) &amp;gt; abs(st);&#xA;plot(t, sn);&#xA;hold on;&#xA;plot(t, st);&#xA;plot(t,spwm);&#xA;axis([0,1,-1.2,1.2]);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Now SPWM has the samples for the signal, I tried sending it on pin 13 using the following function&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;function writeSPWM(arduino, spwm)&#xA;for k=1:length(spwm)&#xA;    writeDigitalPin(arduino, 'D13' ,spwm(k))&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then I used the following two lines in command window&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;a = arduino()&#xA;writeSPWM(a, SinWave(5))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I getting my signal shape with very low frequency(it is really much bigger)&#xA;Is there a better way to achieve my goal? using Matlab is necessary but I have no problem if I have to combine coding throw Matlab and Arduino C.&lt;/p&gt;&#xA;" OwnerUserId="14985" LastActivityDate="2017-02-04T16:44:34.477" Title="Arduino output SPWM using Matlab" Tags="&lt;arduino&gt;&lt;matlab&gt;&lt;pwm&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11546" PostTypeId="2" ParentId="11545" CreationDate="2017-02-04T16:07:01.397" Score="1" Body="&lt;p&gt;It seems that all the code you wrote is in Matlab, and at each cycle it should communicate via the USB port with arduino to turn the pin on or off. This take a lot of time. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The fastest solution would be to write the whole algorithm as an Arduino sketch, and only get the current desired frequency via the Serial (USB) connection from Matlab. Matlab would set the desired frequency, send it via serial to the arduino. From there the latency of the USB (Serial) connection would not intervene. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you do the Arduino programming, make sure to use the PWM pins in PWM mode and not as a simple digital output turned on or off. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.arduino.cc/en/Tutorial/PWM&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here&lt;/a&gt; is a PWM tutorial for the arduino. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;for SPWM the duty cycle has to be changed frequently. You will not be able to change it for each cycle, but maybe for every 10 cycles. It will be still ok. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could start by calculating a sinus on the arduino using an interrupt that is set for maybe every 2 milliseconds. That interrupt should increment your time variable (make sure that it does not overflow, or it overlfows in a controlled manner and make sure to use some sort of scaling to get seconds). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This will be the t from the sinus time signal equation:&#xA;$SPWM(t) = A\sin (\omega t + \phi)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A (amplitude) I think in this case is irrelevant. probably the phase shift ($\phi$) is also irrelevant. $\omega$ you can calculate form your frequency. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\omega = 2 \pi f$, where $f$ is the frequency.&#xA;You set to constant value at first, afterwards you make function that gets it form the serial port form Matlab (make sure NOT to include this in the interrupt, because it is slow)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the end of the interrupt you update the PWM duty cycle basted on the SPWM(t) value the interrupt calculated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am sure there are many other approaches, but for me this seems the simplest one which delivers acceptable performance. Also, please make sure that the cycle time of the interrupt is longer than the runtime of the code in the interrupt. &lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2017-02-04T16:44:34.477" LastActivityDate="2017-02-04T16:44:34.477" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11547" PostTypeId="1" CreationDate="2017-02-04T20:00:20.777" Score="1" ViewCount="220" Body="&lt;p&gt;I am trying to perform uncertainty aware planning, where my planner tries to connect start and goal in such a way that the resultant path provides the least covariance at the end. This is inspired by techniques such as LQG. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The way I 'estimate' what covariance would result from a certain path is by using the EKF equations while assuming maximum likelihood observations, and I am trying to test what's called the 'light-dark' scenario that was used in many papers: where a 2D robot is traversing the environment, and there's a specific region where it would receive measurements that would reduce the covariance greatly. Hence, the uncertainty aware planner tries to take the robot to this 'light' area, receive good measurements, and then proceed to the goal. As seen in this picture from [1], the final covariance drops significantly by using this modified path, than the shortest path from start to goal (ignore the red line).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/dPYDC.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://i.stack.imgur.com/dPYDC.jpg&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am trying to replicate similar behavior with my planner, which does result in covariance reduction compared to some other path that doesn't visit the good area, but the reduction isn't significant at all. In my sample environment, which is a 20x20 grid, the X coordinate of 17 represents the 'light' area, so I express the environmental noise as a matrix which is written as &#xA;$\begin{bmatrix} x-17+0.01 &amp;amp;&amp;amp; 0 \\ 0 &amp;amp;&amp;amp; x-17+0.01 \end{bmatrix}$,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;, hence would get a (0.01,0.01) matrix whenever I'm precisely at the x=17 column in the grid. Problem is, my result looks something like this, with the covariance ellipses plotted in red (the span of which I obtain from the Eigen values of the matrix). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/PMv5n.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/PMv5n.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although the robot does visit the good area thanks to the planner, my covariance still increases rapidly once I leave: so I'm guessing I am making a mistake in my EKF equations. This is how I am 'simulating' the covariance at coordinates x2, when stepping from x1 to x2 with P1 being the covariance at x1 (adapted from equations in some open source code).&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;function P2 = predictCovariance(P1, x1, x2)&#xA;H = eye(2);&#xA;u = x2-x1; &#xA;&#xA;G = [u(1) 0 ; 0 u(2)];&#xA;Q = eye(2);&#xA;R = eye(2);&#xA;M = [(x2(1)-17 + 0.01) 0 ; 0 (x2(1)-17 + 0.01)];&#xA;P = P1 + G*Q*G';&#xA;S = H*P*H' + M*R*M';&#xA;K = (P*H')/S;&#xA;P2 = (eye(2)-K*H)*P;&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;[1] Van Den Berg, Jur, Sachin Patil, and Ron Alterovitz. &quot;Motion planning under uncertainty using iterative local optimization in belief space.&quot; The International Journal of Robotics Research 31.11 (2012): 1263-1278.&lt;/p&gt;&#xA;" OwnerUserId="15992" LastEditorUserId="10310" LastEditDate="2017-02-08T14:35:16.460" LastActivityDate="2017-03-11T05:24:04.577" Title="Question about EKF covariance equations" Tags="&lt;kalman-filter&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11548" PostTypeId="2" ParentId="11538" CreationDate="2017-02-04T21:02:18.253" Score="1" Body="&lt;p&gt;I did several implementations of IK with different setups (up to 8-DOF)&#xA;Of course you can just sit down and write the algorithms on your own. (Assuming you know what are you doing) For this approach I suggest using the Eigenlib and some basic maths.&#xA;Anywas the more elegant approach ( from my point of view) is using matlab: implement the algorithm as you like and let matlab generate the code for you. The matlab code generation feature is pretty nice tool and its reliable (haven't found any errors in the generated code so far). After you have this generated code write any wrapper for any os you like. &#xA;These are just my two cents&lt;/p&gt;&#xA;" OwnerUserId="6911" LastActivityDate="2017-02-04T21:02:18.253" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11549" PostTypeId="2" ParentId="11261" CreationDate="2017-02-04T21:38:06.007" Score="0" Body="&lt;p&gt;I suggest you are going to look into Chen at al 2015&#xA;&quot;Computationally efficient carrier integer ambiguity resolution in multiepoch gps/ins: a common-position-shift approach&quot;&#xA;This is a very good paper, which allows location down to a centimeter level.&#xA;Anyway this approach is not plug and play, I fear you have to implement it on your own.&#xA;I'm not aware of any open source implementation so far.&#xA;More over if you are trying to locate the ants within a forest, then gps is a not the best approach. Gps uses some wavelengths which are absorbed easily by water and well the trees do contain at lot of water. Long story told short: gps in the forest will never be as accurate as you need.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know this is not the answer you expected, hope it can help a bit&lt;/p&gt;&#xA;" OwnerUserId="6911" LastActivityDate="2017-02-04T21:38:06.007" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11550" PostTypeId="2" ParentId="11010" CreationDate="2017-02-04T21:54:45.460" Score="1" Body="&lt;p&gt;There are different approaches to your issue.&#xA;First and most likely easiest one is the approach suggested by 50k4.&#xA;With a simplfied model you can tune some basic controller like PID.&#xA;But there are tons of nice Design approaches, which can work totally without the model.&#xA;Those controllers are usually grouped under the name &quot;soft controllers&quot;&#xA;Some key words are Fuzzy, genetic algorithm or neural network....&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically for every controling process you need some knowledge; in most cases you just take the mathematical description of the system.&#xA;For those soft controlling approaches you take your own expert knowledge of the system... sounds a bit strange but it can work out pretty nicely.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the end you are able to control systems where it is impossible to get a mathematical system description&lt;/p&gt;&#xA;" OwnerUserId="6911" LastActivityDate="2017-02-04T21:54:45.460" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11551" PostTypeId="1" CreationDate="2017-02-05T02:52:47.270" Score="2" ViewCount="7587" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/TZ58w.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/TZ58w.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;I am doing a project, to draw images provided using robotic arm. Initially edge detection is done on image to be drawn and coordinate value is obtained as (x,y).&#xA;How to calculate 3 joint angles inverse kinematics from this value.&lt;/p&gt;&#xA;" OwnerUserId="14345" LastEditorUserId="14345" LastEditDate="2017-02-09T08:47:15.873" LastActivityDate="2017-02-09T09:00:16.400" Title="Inverse kinematics Calculation for 3dof robotic arm" Tags="&lt;inverse-kinematics&gt;" AnswerCount="1" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="11552" PostTypeId="2" ParentId="11517" CreationDate="2017-02-05T03:36:14.610" Score="0" Body="&lt;p&gt;There are quite a few NAO related packages available for ROS. One of them is a Kinect based teleoperation package: which may not have been updated recently.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://wiki.ros.org/nao/Tutorials/Using%20Kinect%20to%20Teleoperate%20Nao%20without%20cross-compiling%20%28electric%20on%20NaoQi%201.12%29&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://wiki.ros.org/nao/Tutorials/Using%20Kinect%20to%20Teleoperate%20Nao%20without%20cross-compiling%20%28electric%20on%20NaoQi%201.12%29&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But on the bigger scheme of things, perhaps you can try setting up MoveIt! for NAO, and subsequently use it for motion planning on the arms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/ros-naoqi/nao_moveit_config/blob/master/tuto/tuto_moveit.rst&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/ros-naoqi/nao_moveit_config/blob/master/tuto/tuto_moveit.rst&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is also a NAO path follower stack at &lt;a href=&quot;http://wiki.ros.org/nao_path_follower&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://wiki.ros.org/nao_path_follower&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10310" LastEditorUserId="10310" LastEditDate="2017-02-07T01:59:15.857" LastActivityDate="2017-02-07T01:59:15.857" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="11553" PostTypeId="5" CreationDate="2017-02-05T11:35:50.707" Score="0" Body="&lt;p&gt;he action or process of moving or of changing place or position;&lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-02-08T14:33:47.367" LastActivityDate="2017-02-08T14:33:47.367" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11554" PostTypeId="4" CreationDate="2017-02-05T11:35:50.707" Score="0" Body="the action or process of moving or of changing place or position" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-02-08T14:33:35.667" LastActivityDate="2017-02-08T14:33:35.667" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11555" PostTypeId="5" CreationDate="2017-02-05T11:37:18.310" Score="0" Body="&lt;p&gt;the state or quality of being stable. &lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-02-08T14:33:39.847" LastActivityDate="2017-02-08T14:33:39.847" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11556" PostTypeId="4" CreationDate="2017-02-05T11:37:18.310" Score="0" Body="the state or quality of being stable. " OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-02-08T14:33:27.993" LastActivityDate="2017-02-08T14:33:27.993" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11557" PostTypeId="5" CreationDate="2017-02-05T11:39:48.920" Score="0" Body="&lt;p&gt;means of sending messages, orders, etc., through the transmission media like air, conductor. ...&lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-02-08T14:35:23.903" LastActivityDate="2017-02-08T14:35:23.903" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11558" PostTypeId="4" CreationDate="2017-02-05T11:39:48.920" Score="0" Body="means of sending messages, orders, etc., through the transmission media like air, conductor. ..." OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-02-08T14:35:32.370" LastActivityDate="2017-02-08T14:35:32.370" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11559" PostTypeId="5" CreationDate="2017-02-05T11:40:32.257" Score="0" Body="&lt;p&gt;control of mechanisms other than signaling apparatus at a distance by radio waves&lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-02-08T14:33:43.863" LastActivityDate="2017-02-08T14:33:43.863" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11560" PostTypeId="4" CreationDate="2017-02-05T11:40:32.257" Score="0" Body="control of mechanisms other than signaling apparatus at a distance by radio waves" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-02-08T14:31:01.417" LastActivityDate="2017-02-08T14:31:01.417" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11561" PostTypeId="5" CreationDate="2017-02-05T11:41:23.207" Score="0" Body="&lt;p&gt;The point of contact between elements of a robot with the parts that surround and support it.&lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="15160" LastEditDate="2018-11-13T10:30:28.753" LastActivityDate="2018-11-13T10:30:28.753" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11562" PostTypeId="4" CreationDate="2017-02-05T11:41:23.207" Score="0" Body="The point of contact between elements of a robot with the parts that surround and support it " OwnerUserId="9504" LastEditorUserId="15160" LastEditDate="2018-11-13T10:30:34.040" LastActivityDate="2018-11-13T10:30:34.040" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11563" PostTypeId="5" CreationDate="2017-02-05T11:42:19.997" Score="0" Body="&lt;p&gt;movements. actions or activities, as of a robot or a body of robots.  &lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-02-08T14:35:27.560" LastActivityDate="2017-02-08T14:35:27.560" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11564" PostTypeId="4" CreationDate="2017-02-05T11:42:19.997" Score="0" Body="movements. actions or activities, as of a robot or a body of robots. " OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-02-08T14:34:06.413" LastActivityDate="2017-02-08T14:34:06.413" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11565" PostTypeId="5" CreationDate="2017-02-05T11:43:23.557" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2017-02-05T11:43:23.557" LastActivityDate="2017-02-05T11:43:23.557" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11566" PostTypeId="4" CreationDate="2017-02-05T11:43:23.557" Score="0" Body="Two Wheeled mobile robot" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-02-08T14:33:31.377" LastActivityDate="2017-02-08T14:33:31.377" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11567" PostTypeId="1" CreationDate="2017-02-05T15:34:26.173" Score="2" ViewCount="307" Body="&lt;p&gt;Does the Create 2 have firmware support (navigation, brush &amp;amp; fan control, ...) to support the vacuum functionality? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can I use parts from my 655 or 805 Roomba to convert the Create 2 back to a vacuum?&lt;/p&gt;&#xA;" OwnerUserId="15998" LastActivityDate="2017-06-05T21:55:09.673" Title="iRobot Create 2 to Vacuum (2)?" Tags="&lt;irobot-create&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11568" PostTypeId="2" ParentId="11567" CreationDate="2017-02-05T18:21:24.083" Score="2" Body="&lt;p&gt;Yes and yes.  The Create2 has the same firmware as any other 600 series Roomba.  There is nothing preventing you from replacing the missing components to have a functional vacuum. &lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2017-02-05T18:21:24.083" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11569" PostTypeId="2" ParentId="2871" CreationDate="2017-02-05T19:11:55.167" Score="1" Body="&lt;p&gt;If you build a robot in simulator only, then the data association is not a problem. The true landmarks would the robot see at time $t$ can be given by hand. But if you equip a small vehicle with a laser scanner or depth camera and willing to run a real SLAM job, then data association is a really big problem you have to solve, especially for a grid-based map. By the way, it seems that you can implement a landmark based SLAM by SURF feature, but in fact, it requires a lot of computing resources - especially for EKF SLAM and it can make your job fail.&lt;/p&gt;&#xA;" OwnerUserId="15995" LastEditorUserId="7360" LastEditDate="2017-02-08T14:34:02.060" LastActivityDate="2017-02-08T14:34:02.060" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11571" PostTypeId="2" ParentId="11518" CreationDate="2017-02-06T13:02:15.260" Score="-1" Body="&lt;p&gt;Use a Lidar system and then elaborate the data using a point cloud libray( i've never done this but i just want to tell you that it's a possible solution)&lt;/p&gt;&#xA;" OwnerUserId="15288" LastActivityDate="2017-02-06T13:02:15.260" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11572" PostTypeId="1" AcceptedAnswerId="11575" CreationDate="2017-02-06T21:08:00.257" Score="0" ViewCount="1352" Body="&lt;p&gt;I want to make a 4 legged robot like spider or dog, but I don't know how I can use kinematics to make it walk and run. I didn't find any resource to know how these types of robots walk and run by balancing their center of gravity balanced in each step and how they move their legs to move any direction. Right now I am trying to make a robot in gazebo simulation and test its working, only then I'll go for real hardware.&lt;/p&gt;&#xA;" OwnerDisplayName="user14148" LastEditorDisplayName="user9480" LastEditDate="2017-03-12T00:27:26.183" LastActivityDate="2021-05-21T05:57:40.120" Title="Inverse kinematics for a four-legged robot" Tags="&lt;inverse-kinematics&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11573" PostTypeId="2" ParentId="11484" CreationDate="2017-02-07T00:14:45.863" Score="2" Body="&lt;h1&gt;Here's an idea&lt;/h1&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/snamp.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/snamp.png&quot; alt=&quot;Bowl Rotation Concept&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1&gt;Explanation&lt;/h1&gt;&#xA;&lt;p&gt;Instead of the servo bearing the weight, there is an axis through the bowl that the servo is attached to. This takes all of the strain off of the servo. The servo arm is attached to the bowl and rotates the bowl on the shaft through the bowl.&lt;/p&gt;&#xA;" OwnerUserId="16011" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2017-02-07T00:14:45.863" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11575" PostTypeId="2" ParentId="11572" CreationDate="2017-02-07T09:07:07.547" Score="3" Body="&lt;p&gt;You do not (only) need inverse kinematics. Inverse kinematics can give you e.g. the angles in your leg joints for a particular leg position, however it does not define a gait type. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For 4 legged robots there are many possible gait types you can implement. You have static gait types where the projection center of gravity is always inside your support triangle and you only lift 1 leg up at at time, or you can have dynamic gait types which is the opposite (CoG not in support triangle, not only 1 leg lifted)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Simpler are the static gait types. For static gait types you have periodic, where you do the same steps over and over again or non-periodic, where leg placement is dependent e.g on ground conditions. Also here, obviously the periodic gait type is the simpler. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can find an example and implementation of a static periodic gait type for a quadruped robot &lt;a href=&quot;http://makezine.com/2016/11/22/robot-quadruped-arduino-program/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. Also &lt;a href=&quot;https://oscarliang.com/arduino-quadruped-robot-stalker/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; you can find an interesting approach implemented in Excel.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="15912" LastEditDate="2017-02-07T17:30:39.163" LastActivityDate="2017-02-07T17:30:39.163" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11576" PostTypeId="1" AcceptedAnswerId="11578" CreationDate="2017-02-07T10:30:18.460" Score="3" ViewCount="322" Body="&lt;p&gt;I am currently considering joining the MicroTransat challenge and develop an autonomous boat able to survive the harsh Ocean environment.&#xA;However, as for security and to ensure the boat doesn't sink due to collisions, I am looking for possible ways to implement a basic obstacle avoidance system. &lt;br&gt;The prototype will harvest power from solar panels (and maybe a Stirling engine) and will run a Raspberry Pi as route planner.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Up to now I have come up with the following:&lt;br&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;AIS receiver: can be useful to track ships above 300t and simple receivers don't use too much power;&lt;/li&gt;&#xA;&lt;li&gt;Hydrophones array: may sense boat engines and the sound origin, very unreliable as a system;&lt;/li&gt;&#xA;&lt;li&gt;Lidar/ultrasonic rangefinder: not suitable for marine environment;&lt;/li&gt;&#xA;&lt;li&gt;Computer vision: difficult to implement but highly reliable, I guess sea waves will be a issue.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Ideally, the boat should keep away from other boats, floating objects and rocks, yet just ship avoidance would be very helpful.&lt;br&gt;&#xA;Which one(s) do you believe can be included to offer a basic obstacle avoidance ability?&lt;/p&gt;&#xA;" OwnerUserId="16015" LastActivityDate="2017-02-07T15:14:04.007" Title="Autonomous boat obstacle avoidance" Tags="&lt;control&gt;&lt;navigation&gt;&lt;research&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11577" PostTypeId="1" CreationDate="2017-02-07T13:48:51.397" Score="1" ViewCount="94" Body="&lt;p&gt;I have radar mounted on a car.  For each detection, the radar returns these variables.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;relative distance between the object/host vehicle in forward direction&lt;/li&gt;&#xA;&lt;li&gt;standard deviation of the relative forward distance&lt;/li&gt;&#xA;&lt;li&gt;relative distance between the object/host vehicle in left/right direction&lt;/li&gt;&#xA;&lt;li&gt;standard deviation of the relative left/right distance&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I'm trying to do coordinate transform of the above data, so that I get relative distance/standard deviation in global coordinates (North, South, East, West)&#xA;Distance is easy since it only requires to rotate the axis by the amount of angle between the vehicle body-fixed axis and the global axis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How about standard deviation?  How do I transform the standard deviation from the vehicle body-fixed axis to global axis?&lt;/p&gt;&#xA;" OwnerUserId="16019" LastEditorUserId="37" LastEditDate="2017-02-09T10:55:10.270" LastActivityDate="2017-02-09T11:38:34.633" Title="Standard Deviation from one axis to another axis" Tags="&lt;localization&gt;&lt;statistics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11578" PostTypeId="2" ParentId="11576" CreationDate="2017-02-07T15:14:04.007" Score="3" Body="&lt;p&gt;Have you considered forward-looking &lt;a href=&quot;http://en.wikipedia.org/wiki/sonar&quot; rel=&quot;nofollow noreferrer&quot;&gt;active sonar&lt;/a&gt; ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Perhaps using off-the-shelf &lt;a href=&quot;http://en.wikipedia.org/wiki/fishfinder&quot; rel=&quot;nofollow noreferrer&quot;&gt;fishfinder&lt;/a&gt; hardware?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My understanding is that active sonar sensitive enough to detect (relatively soft) fish a hundred feet away can detect icebergs,  large boats, rocks, &lt;a href=&quot;http://ieeexplore.ieee.org/document/1151206/&quot; rel=&quot;nofollow noreferrer&quot;&gt;shoreline&lt;/a&gt;, etc. over a mile away, because they are harder and so more reflective to the sonar.&#xA;(My understanding is that the &lt;a href=&quot;http://en.wikipedia.org/wiki/Fessenden_oscillator&quot; rel=&quot;nofollow noreferrer&quot;&gt;first successful acoustic echo ranging device&lt;/a&gt; was specifically created for obstacle detection -- to detect icebergs in response to the RMS &lt;em&gt;Titanic&lt;/em&gt; disaster of 1912).&lt;/p&gt;&#xA;" OwnerUserId="187" LastActivityDate="2017-02-07T15:14:04.007" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="11579" PostTypeId="1" CreationDate="2017-02-07T16:49:26.973" Score="0" ViewCount="1266" Body="&lt;p&gt;Actually i am trying to write my own Flight Controller for Quad-Copter that is controlled by Remote over radio signals.So for a flight controller i have to buy a inertial measurement unit(IMU).So problem is that i visit a two different sites both selling a MPU6050 Triple Axis Accelerometer and Gyro.But both sites name it same but it's look different IMU unit &lt;a href=&quot;https://i.stack.imgur.com/wzzzT.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;that one is buying from hallroad.org&lt;/a&gt;.and that one is &lt;a href=&quot;https://i.stack.imgur.com/fcY0x.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fcY0x.jpg&quot; alt=&quot;buying from spartfun&quot;&gt;&lt;/a&gt;.is that same IMU or different if they are different what is difference b/w them?Which is best for Quad-Copter Flight-Controller?&lt;/p&gt;&#xA;" OwnerUserId="10807" LastActivityDate="2017-02-08T12:22:31.393" Title="which is best IMU for Quad-Copter" Tags="&lt;quadcopter&gt;&lt;imu&gt;&lt;accelerometer&gt;&lt;gyroscope&gt;" AnswerCount="1" CommentCount="5" ClosedDate="2017-02-08T14:26:13.777" ContentLicense="CC BY-SA 3.0" />
  <row Id="11582" PostTypeId="1" CreationDate="2017-02-07T20:23:24.983" Score="2" ViewCount="270" Body="&lt;p&gt;I have a Chinese drone (cost less than $100), that works with a 2.4Ghz transmitter of 2.4. I am trying to build an application in C++ to control the drone with PC. I am thinking of using an ARDUINO and a NRF24L01 module.  But I have not been able to establish communication with the drone. I don`t understanding the form of communication very well, is there a post, information, book, blog or idea that can help me?&lt;/p&gt;&#xA;" OwnerUserId="16023" LastEditorUserId="7066" LastEditDate="2017-02-10T16:51:03.057" LastActivityDate="2017-02-10T16:51:03.057" Title="How do I hack RC transmitter of my drone by realised communication with my PC?" Tags="&lt;quadcopter&gt;&lt;arduino&gt;&lt;control&gt;&lt;radio-control&gt;" AnswerCount="0" CommentCount="1" ClosedDate="2017-02-08T14:22:51.730" ContentLicense="CC BY-SA 3.0" />
  <row Id="11586" PostTypeId="2" ParentId="11295" CreationDate="2017-02-08T03:28:44.630" Score="4" Body="&lt;p&gt;It really depends on the objects you are sorting, and the flexibility you're looking for as the system is maintained over the years.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using physical methods to sort is very reliable.  Many times you can align the parts, such as by using curves, chutes, vibration, and parts feeding mechanisms.   Look up vibratory bowl feeders and cap feeders for examples.   You can sometimes pre-sort a large collection of different products into smaller groups of products, too, and the solution for one group may be different from the solution for the other groups.  If you can properly orient and align the objects, it may be simpler to use physical sorting methods than trying to identify the different parts using software.   But this isn't a black-and-white statement.   For instance, if one of your parts is always higher than the rest of the parts, a simple through-beam sensor located higher than all but the tallest product, tied to an ejecting cylinder is quite straightforward to implement.   In this case, there is both software and hardware involved.   However, as the product mix changes over time, you may have to redesign the hardware sorting mechanisms to accomodate those changes.   This redesign can sometimes be quite difficult.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want the most flexibility (as in the case where the parts you are sorting may change over time), then a vision-guided system offers this.   However, even these systems will benefit by first controlling the fed parts before they encounter the vision system.   This is especially true if the objects have different visual characteristics when viewed from one side as compared to being viewed from another side.  You can use speed changes of conveyors to guarantee spacing between parts to facilitate the vision processing, plus other parts feeding techniques that reduce the area in which your vision system must operate.  So again, it is a combination of mechanical and software means.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The software-guided sorting usually takes longer to set up and train, and you'll have to deal with things like color variations, structured lighting, and possibly speed issues.   But it offers greater flexibility as requirements change.   Many robotics manufacturers offer very powerful vision-based add-ons (Fanuc is one), which help shorten the vision-to-robot integration time.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore &quot;it depends.&quot;&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2017-02-08T03:28:44.630" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11589" PostTypeId="2" ParentId="11579" CreationDate="2017-02-08T12:22:31.393" Score="1" Body="&lt;p&gt;Both products are based on the same chip - MPU6050. I won't be surprised if passive components used in both modules will be the same too. That means, that from performance side, there will be probably no visible difference. The only thing that differs those two is their interfaces - the red one has two additional pins. Check what they do, and think if you need them.&lt;/p&gt;&#xA;" OwnerUserId="7360" LastActivityDate="2017-02-08T12:22:31.393" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11591" PostTypeId="1" AcceptedAnswerId="11603" CreationDate="2017-02-08T16:14:38.557" Score="0" ViewCount="1217" Body="&lt;p&gt;I am developing a line follower robot and I am not sure about how many motors should I use: two or four. I'm thinking of using four, but I do not know if it's worth it (it will let the car be heavier, consume more power...). Does anyone have an idea? I'm planning in use something like this design here, of Aniki Hirai: &lt;a href=&quot;http://anikinonikki.cocolog-nifty.com/.shared/image.html?/photos/uncategorized/2014/11/19/cartsix04.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://anikinonikki.cocolog-nifty.com/.shared/image.html?/photos/uncategorized/2014/11/19/cartsix04.jpg&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The engine I'll use is a micro-metal motor, from Pololu, just like in the link:&#xA;&lt;a href=&quot;https://www.pololu.com/product/3048&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.pololu.com/product/3048&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know the question is a little bit vague, but I don't know another way to ask this.&lt;/p&gt;&#xA;" OwnerUserId="16031" LastEditorUserId="16031" LastEditDate="2017-02-11T19:58:37.780" LastActivityDate="2017-02-11T19:58:37.780" Title="Line follower robot with 2 or 4 motors?" Tags="&lt;motor&gt;&lt;design&gt;&lt;line-following&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11594" PostTypeId="2" ParentId="11547" CreationDate="2017-02-09T05:22:20.243" Score="1" Body="&lt;p&gt;There seem to be several problems with the EKF equations in the code snippet: which I've come across before as part of an LQG related code available online. I am by no means an authoritative reference on filtering equations, but this is out of my own experience working in belief space and the 'light-dark' scenario.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;That's not how the $G$ matrix works in the prediction equation. $G$ is the process noise Jacobian. $G$ could literally just be an identity matrix, with the predicted covariance equation reading&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;$ \bar{P} = A*P_{prev}*A^T + Q $&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $Q$ is the process noise covariance matrix.&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;Exactly similar to point 1: the $M$ matrix does not represent what you've coded it to: it's the measurement &lt;em&gt;noise Jacobian&lt;/em&gt;. The measurements are encoded in the $H$ matrix, which is the measurement Jacobian: hence, how far you are from your 'light' area needs to be represented in the $H$ matrix, not the noise matrices. Hence $M$ can be set to $I$, and $R$ can be any Gaussian noise you choose. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Once you fix these problems and obtain right values for $H$, $\bar{P}$ and $S$, rest of the equations should be fairly straightforward, and are correctly written in the code.&lt;/p&gt;&#xA;" OwnerUserId="10310" LastActivityDate="2017-02-09T05:22:20.243" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11595" PostTypeId="2" ParentId="11551" CreationDate="2017-02-09T09:00:16.400" Score="2" Body="&lt;p&gt;The manipulator in the figure seems like an planar manipulator with 3 degrees of freedom (DoF). However, from the description it seems that you only have 2 coordinates as reference coordinates. As the 3 DoF of the manipulator suggests, you would need 3. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The simplets is just to set the third one to zero, and solve the IK for (x, y, 0). You can come up with better approaches. If you want to draw something you might have a felt tipped pen where the orientation does not matter or if you have a pen, it might matter. In this case you can derive a way to make sure that the orientation matches the heading direction (you can take the next (x,y) sample to calculate the orientation)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can find a detailed example of how to calculate joint angles for a RRR planar manipulator &lt;a href=&quot;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.65.5698&amp;amp;rep=rep1&amp;amp;type=pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; or &lt;a href=&quot;http://www-cvr.ai.uiuc.edu/~lab/ece470/docs/planar_rrr.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2017-02-09T09:00:16.400" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11596" PostTypeId="2" ParentId="11577" CreationDate="2017-02-09T11:38:34.633" Score="1" Body="&lt;p&gt;Standard deviation is used to represent probability distribution - in your case if you have $\sigma = 1m$ for forward distance it means that there is ~68% chance of true forward distance to the obstacle be less than 1m away from your measurement. You have two variables, so you should project your probability distribution on a 2D surface - you will get something like that:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/BRPLl.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/BRPLl.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each line represents points of equal probability of being a true position. Center of ellipsis is your measurement and has a highest probability.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, when you project these values to global coordinate system you will likely get something like:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/IGXFU.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/IGXFU.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You cannot represent such a probability distribution using only two variables - you have to use 2x2 &lt;a href=&quot;https://en.wikipedia.org/wiki/Covariance_matrix&quot; rel=&quot;nofollow noreferrer&quot;&gt;covariance&lt;/a&gt; matrix.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Good tutorial on graphical interpretations of covariance matrix can be found here: &lt;a href=&quot;http://www.visiondummy.com/2014/04/geometric-interpretation-covariance-matrix/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.visiondummy.com/2014/04/geometric-interpretation-covariance-matrix/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general you can find your covariance matrix for global coordinate system with: $\Sigma = R S S R^{-1}$ where $R$ is rotation matrix from local to global coordinates and $S$ is diagonal matrix with your variances as diagonal elements.&lt;/p&gt;&#xA;" OwnerUserId="7360" LastActivityDate="2017-02-09T11:38:34.633" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11597" PostTypeId="1" CreationDate="2017-02-09T20:48:09.050" Score="6" ViewCount="542" Body="&lt;p&gt;I am about to build my own quadcopter from scratch. However i am having problem with understanding how it is possible to control the quadcopter without knowing the current rpm of the BLDC motors. According to my understanding the rpm is needed to calculate thrust force etc. in the mathematical model, which will be used for regulation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ESCs I have seen have two wires to connect them to the flight controller. The first one is GND and the second is signal wire, which are used for sending PWM signal- no information about the motor speed. There is also the  IMU unit, which provides information about the acceleration of the whole aircraft- but again no information about the motor speed. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would be grateful if someone could explain it in details how this is. &lt;/p&gt;&#xA;" OwnerUserId="16043" LastEditorUserId="7066" LastEditDate="2017-02-11T19:06:33.650" LastActivityDate="2017-04-04T15:15:07.660" Title="Explanation of Quadcopter Dynamics, Components and Control" Tags="&lt;quadcopter&gt;&lt;control&gt;&lt;imu&gt;&lt;accelerometer&gt;&lt;brushless-motor&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11598" PostTypeId="2" ParentId="11597" CreationDate="2017-02-10T01:50:17.337" Score="7" Body="&lt;p&gt;A couple things, the first is that the controller does not really care what the &quot;real&quot; values are. Everything is relative, if the controller sees that it is sinking it will increase the thrust until it is not sinking. If it is tilting too far to the left it will decrease the right thrust and increase the left thrust. (&lt;a href=&quot;http://blog.owenson.me/build-your-own-quadcopter-flight-controller/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here&lt;/a&gt; is a good resource if you want to design your own controller)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other thing is that we normally assume that thrust response from the motor, ESC, prop combo is instantaneous so in an ideal world if we told the motor to change from 5% speed to 100% speed in an instant it would happen but in the real world there is some delay this is normally modeled as the difference between a sine wave input at a certain frequency and its output. This is called &lt;a href=&quot;https://www.youtube.com/watch?v=ThoA4amCAX4&quot; rel=&quot;nofollow noreferrer&quot;&gt;Phase and Gain margins&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="7066" LastEditorUserId="7066" LastEditDate="2017-04-04T15:15:07.660" LastActivityDate="2017-04-04T15:15:07.660" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11599" PostTypeId="1" CreationDate="2017-02-10T02:26:09.253" Score="2" ViewCount="187" Body="&lt;p&gt;In my program, I'm need to detect if the NXT touch sensor is pressed.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;var nxt = new Brick&amp;lt;Sensor, Sensor, Sensor, Sensor&amp;gt;(&quot;usb&quot;);&#xA;nxt.Connection.Open();&#xA;nxt.Sensor1 = new TouchSensor();&#xA;nxt.Sensor1.Reset(false);&#xA;nxt.Sensor1.Initialize();&#xA;Console.WriteLine(nxt.Sensor1);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;When I start the program, the sensor value always reads 0. But I discovered that if I go into the &quot;View&quot; menu in the NXT and see the touch sensor value, the program value reads 1. I can't do that for my setup. Also, I can't use Bluetooth; my computer doesn't have it. Can someone help me?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: my full code&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;using System;&#xA;using System.Collections.Generic;&#xA;using System.Linq;&#xA;using System.Text;&#xA;using System.Threading.Tasks;&#xA;using MonoBrick.NXT;&#xA;using MonoBrick;&#xA;using System.Windows.Forms;&#xA;using System.Reflection;&#xA;using System.Threading;&#xA;&#xA;namespace MonoBrick&#xA;{&#xA;    class Program&#xA;    {&#xA;        [STAThread]&#xA;        static void Main(string[] args)&#xA;        {&#xA;            try&#xA;            {&#xA;                var nxt = new Brick&amp;lt;Sensor, Sensor, Sensor, Sensor&amp;gt;(&quot;usb&quot;);&#xA;                nxt.Connection.Open();&#xA;                nxt.Sensor1 = new TouchSensor();&#xA;                nxt.Sensor1.Reset(false);&#xA;                nxt.Sensor1.Initialize();&#xA;                Console.WriteLine(nxt.Sensor1.ReadAsString());&#xA;                nxt.Beep(500);&#xA;                System.Windows.Application application = new System.Windows.Application();&#xA;                application.Run(new Window1());&#xA;                nxt.Connection.Close();&#xA;            }&#xA;&#xA;            catch (Exception e)&#xA;            {&#xA;                Console.WriteLine(&quot;Error: &quot; + e.Message);&#xA;                Console.WriteLine(&quot;Press any key to end...&quot;);&#xA;                Console.ReadKey();&#xA;            }&#xA;        }&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="16044" LastEditorUserId="7066" LastEditDate="2017-11-10T05:57:28.160" LastActivityDate="2021-04-17T13:42:13.053" Title="Monobrick Communication Library-reading nxt sensors" Tags="&lt;nxt&gt;&lt;mindstorms&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11600" PostTypeId="2" ParentId="11599" CreationDate="2017-02-10T03:49:06.347" Score="0" Body="&lt;p&gt;You need to read the value continually in order to get the updated value, see the &lt;a href=&quot;http://www.monobrick.dk/guides/communication-library-guides/monobrick-guide/&quot; rel=&quot;nofollow noreferrer&quot;&gt;tutorial on there website&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is what the code to do that might look like (untested as I do not have a NXT):&#xA;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;using System;&#xA;using MonoBrick.EV3;&#xA;public static class Program{&#xA;    static void Main(string[] args)&#xA;    {&#xA;        var nxt = new Brick&amp;lt;Sensor, Sensor, Sensor, Sensor&amp;gt;(&quot;usb&quot;);&#xA;        nxt.Connection.Open();&#xA;        nxt.Sensor1 = new TouchSensor();&#xA;        nxt.Sensor1.Reset(false);&#xA;        nxt.Sensor1.Initialize();&#xA;        ConsoleKeyInfo cki;  &#xA;        Console.WriteLine(&quot;Press Q to quit&quot;);  &#xA;        do   &#xA;        {  &#xA;            cki = Console.ReadKey(true); //press a key  &#xA;            Console.WriteLine(nxt.Sensor1);                       &#xA;            }  &#xA;        } while (cki.Key != ConsoleKey.Q);&#xA;        ev3.Connection.Close();&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2017-02-10T03:49:06.347" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="11601" PostTypeId="2" ParentId="11591" CreationDate="2017-02-10T04:09:32.670" Score="0" Body="&lt;p&gt;If you're using four traditional wheels (all have friction) you should power all of them (skid steer). Otherwise your robot has to drag the unpowered wheels when you turn. You can also over come this problem by using two unpowered frictionless wheels instead giving you differential steering.&lt;/p&gt;&#xA;" OwnerUserId="14284" LastActivityDate="2017-02-10T04:09:32.670" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11602" PostTypeId="1" CreationDate="2017-02-10T06:04:31.207" Score="2" ViewCount="167" Body="&lt;p&gt;On the attached figure, I show a graphical representation of the problem I am facing. I have developed a humanoid robot with a thigh which makes an angle with respect to the leg. It means that there is always a constant distance (R) – whatever the rotation of the thigh is - between the Pelvic and the leg. Besides, the foot is articulated with a forefoot and a midfoot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/PACpb.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/PACpb.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I want to compute the orientation of the leg and thigh with respect to a given position and orientation of the Pelvic (represented by the point $C$) and the Foot (represented by $A$ the position of the ankle and $\vec{U}$ the orientation of the foot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I come up with the geometrical problem of computing a plane $P$, passing through $C$ with one orientation given by $\vec{U}$, which is tangent to a sphere whose center is the extremity of the Pelvic (point $C$).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Knowing the point of tangency $T$ I can compute the position of the knee $K$ and then the angular values for the leg and the thigh.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I cannot find the equations to solve it so far... or may be there is another geometrical solution I did not think of?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am trying to find a geometrical answer before going through a DH description + finding the values via decoupling and so on...(&quot;classical&quot; Ik resolution).&lt;/p&gt;&#xA;" OwnerUserId="16030" LastActivityDate="2017-02-10T06:04:31.207" Title="Geometrical solution to an IK problem for a humanoid robot leg" Tags="&lt;inverse-kinematics&gt;&lt;humanoid&gt;" AnswerCount="0" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11603" PostTypeId="2" ParentId="11591" CreationDate="2017-02-10T10:24:33.853" Score="0" Body="&lt;p&gt;The best option would be to use two wheels. Then one motor for each wheel in total two. Then, you can use roller coaster at the front. You do not need to provide power to that. Just provide power to back two wheels. By varying the speed of two back wheels (differential drive) you can move straight and turn as well.&lt;/p&gt;&#xA;" OwnerUserId="14471" LastActivityDate="2017-02-10T10:24:33.853" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11604" PostTypeId="1" AcceptedAnswerId="11692" CreationDate="2017-02-10T14:23:30.927" Score="0" ViewCount="297" Body="&lt;p&gt;I am new to the MPC idea and I am trying to understand the key concepts but there are two things which I found confusing and I didn't find answers regarding to them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first one is about the optimized control signal sequence which can be computed from the cost function. If we want to predict, say five steps further, then we will have 5 control signals. After the calculation is done, we will apply only the first signal from the sequence to our system, and them remaining four will be &quot;wasted&quot; (I read that it can be used as an initial guess for the next optimization but thats not my point here). My first question is why don't we just predict one step further, and instead of optimizing five signals, we restrict our optimization to just one, which makes the computation faster?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second question is about constraints. Lets say that I have some restriction on my input signal, say $0 &amp;lt; u &amp;lt; 5$. With some math, we can include these constraints to the optimization task but it takes more time to solve. Why don't we just do an unconstrainted optimization and after our input signals are ready we apply our contraints on them? Obviously this can not be done for state contraints, but i am interested about input constraints.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks for your answers in advance.&lt;/p&gt;&#xA;" OwnerUserId="16047" LastEditorUserId="16047" LastEditDate="2017-02-10T14:29:21.707" LastActivityDate="2017-02-24T01:52:30.917" Title="Model Predictive Control (MPC) horizon and constraints" Tags="&lt;control&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11605" PostTypeId="2" ParentId="11604" CreationDate="2017-02-10T15:17:04.007" Score="0" Body="&lt;p&gt;To your first question: That is because you optimize with those next steps in mind. Intuitively, you don't have to apply a &quot;ridiculous amount&quot; of input if you know that you are also fine if you keep on applying a &quot;normal amount&quot; of input for a while. You apply only the first control, but the rest is part of the calculation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To your second question: You calculate specific inputs, if you cut them off after the calculation, then why would your controller still work? &lt;/p&gt;&#xA;" OwnerUserId="15909" LastActivityDate="2017-02-10T15:17:04.007" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11608" PostTypeId="1" CreationDate="2017-02-11T15:50:18.790" Score="2" ViewCount="253" Body="&lt;p&gt;I would appreciate your help for choosing the appropriate real-time SLAM algorithm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am interested in having autonomous robot, thus a SLAM component is needed for autonomous navigation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The platform is Kobuki robot (Turtlebot2 without Kinect) which has wheel odometry.&#xA;To get a better localization, I want to use camera (Fisheye) - optionally looking upwards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a lot of algorithms available online, most of them output 6DoF (do I need 6DoF for a wheeled robot? (x,y,theta) is enough, right?). I tried using several algorithms, but still didn't find the optimal one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I believe that Loop-Closure is needed as well, because the final application would be to have a robot that coverage the area (visit each point once).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ROS is used to implement this robot, with small dev board (Intel Atom x5 processor).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in Advance&lt;/p&gt;&#xA;" OwnerUserId="16054" LastActivityDate="2017-02-11T15:50:18.790" Title="Visual SLAM for wheeled robot" Tags="&lt;slam&gt;&lt;wheeled-robot&gt;&lt;odometry&gt;&lt;visual-odometry&gt;" AnswerCount="0" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="11610" PostTypeId="1" CreationDate="2017-02-11T21:03:28.610" Score="1" ViewCount="131" Body="&lt;p&gt;I am trying to write an EKF that can estimate the covariance of a pose estimate, where the estimation is being done by a PNP algorithm and 3D-2D correspondences in images. Although EKF based camera SLAM is pretty common, I've noticed that usually those techniques tend to integrate IMU data, as well as try to refine the map points along with the pose of the robot itself, thus considering both the map and localization somewhat unknown. But if I want to consider the map points as predefined and stable, and just want to compute the pose of a camera in 6 DOF, a relationship that is expressed simply between 3D and 2D points as:  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$ \begin{bmatrix}&#xA;             x \\ y \\ 1 &#xA;    \end{bmatrix} &#xA;    = &#xA;    K*\begin{bmatrix} R &amp;amp;&amp;amp; t \end{bmatrix} * \begin{bmatrix} X \\ Y \\ Z \\ 1 \end{bmatrix} $&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $R$ and $t$ are the unknowns. This result can further be optimized by trying to minimize the reprojection error, but I am wondering how this can be reconstructed as an EKF measurement equation, and thereby estimate the state covariance, with my state containing 3D coordinates and the Euler angles of the camera pose as $[x, y, z, r, p, y]$.&lt;/p&gt;&#xA;" OwnerUserId="10310" LastEditorUserId="10310" LastEditDate="2017-02-12T01:03:14.333" LastActivityDate="2017-02-12T01:03:14.333" Title="How does a measurement model for camera based PNP work?" Tags="&lt;localization&gt;&lt;kalman-filter&gt;&lt;cameras&gt;" AnswerCount="0" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11611" PostTypeId="1" CreationDate="2017-02-11T23:17:34.800" Score="3" ViewCount="67" Body="&lt;p&gt;Any ideas on ways to install a kill switch on the Create 2?  I saw how the battery attaches to the main board with springs, so that blocks me from using a plain old battery switch.  Are there any test points that can be grounded to shut down when in full mode?&lt;/p&gt;&#xA;" OwnerUserId="16056" LastActivityDate="2018-07-18T13:29:08.483" Title="Create 2 kill switch?" Tags="&lt;irobot-create&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11612" PostTypeId="1" CreationDate="2017-02-12T05:37:59.570" Score="6" ViewCount="1860" Body="&lt;p&gt;I am aware that algorithm for monocular SLAM is complex compared to stereo SLAM. But my question is if by any means it is possible to do SLAM using one camera why one should use two cameras to do the same thing?&lt;/p&gt;&#xA;" OwnerUserId="11751" LastActivityDate="2017-02-12T13:55:42.417" Title="SLAM: Why use two cameras (stereo) if SLAM can be done using single camera (monocular)?" Tags="&lt;slam&gt;&lt;computer-vision&gt;&lt;navigation&gt;&lt;visual-odometry&gt;&lt;monocular&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11614" PostTypeId="2" ParentId="11612" CreationDate="2017-02-12T13:55:42.417" Score="5" Body="&lt;p&gt;The most important point is the scale. If you do monocular SLAM, your map will only be accurate up to scale so that you e.g. cannot compute the length of the travelled path in meters. The scale between your map and the world is not even constant over time so that if you come back to your starting point, it's going to be difficult to match the beginning and end of you map as they have a different scale. &lt;/p&gt;&#xA;" OwnerUserId="23196" LastActivityDate="2017-02-12T13:55:42.417" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="11615" PostTypeId="1" CreationDate="2017-02-12T18:25:28.430" Score="1" ViewCount="118" Body="&lt;p&gt;I've implemented a simple robot simulation based on the equations from &lt;a href=&quot;http://probabilistic-robotics.informatik.uni-freiburg.de/corrections1/pg204-206.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;EKF localization with known correspondence&lt;/a&gt; found in Probabilistic Robotics by Thrun et. al. Everything seems to be working but I noticed the covariance matrix has an odd behavior when doing prediction only. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I move the robot with a forward velocity and some angular velocity and no correction the covariance grows (size of eigenvalues), as expected. But when I move the robot backwards with some angular velocity the covariance shrinks a bit before growing again. I expect the covariance to always increase if there is no correction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I checked my implementation many times for errors but I now suspect this issue may be attributed to the fact that the Jacobians V and M uses signed values of velocity and angular velocity, instead of absolute?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a video showing the covariance shrinking and growing. In this video the true pose of the robot is in green with an imaginary depth sensor shown as a green cone. There are no landmarks, so no correction step. The gray is the estimated pose plus covariance ellipse at 95% confidence interval.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=RcHkCijyG7c&amp;amp;feature=youtu.be&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=RcHkCijyG7c&amp;amp;feature=youtu.be&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt;&#xA;I've attached a graph that illustrates this issue better. Two graphs are shown below. The graph in red is running the EKF prediction on noise free input and plotting the area of the ellipsoid of the covariance. The area (uncertainty) monotonically increases as expected. I repeat the same thing but at t=10 I inverted the velocity, resulting in the blue graph. There is an oscillation in the area for some reason yet to be determined.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/zXZHc.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zXZHc.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Octave script I wrote can be found here &lt;a href=&quot;http://pastebin.com/rQyczVbm&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://pastebin.com/rQyczVbm&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="16061" LastEditorUserId="16061" LastEditDate="2017-02-18T07:44:10.420" LastActivityDate="2017-02-18T07:44:10.420" Title="Strange EKF localization covariance behavior during prediction only" Tags="&lt;localization&gt;&lt;ekf&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11616" PostTypeId="2" ParentId="11611" CreationDate="2017-02-12T18:28:34.200" Score="2" Body="&lt;p&gt;Something I've always wanted to try (but never have) is to use two pieces of copper tape, back-to-back (with something thin and insulating like packing tape between them) to interrupt the connection between the one of the spring terminals and one of the battery contacts. Then, this thin conductor sandwich could be brought out to somewhere more convenient to install a kill switch. (You could solder wires to the copper tape once you're somewhere less constrained.) Let us know how it goes!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please note that I am an iRobot employee, but the postings on this site are my own and don't necessarily represent iRobot's positions, strategies, or opinions.&lt;/p&gt;&#xA;" OwnerUserId="7665" LastEditorUserId="7665" LastEditDate="2018-07-18T13:29:08.483" LastActivityDate="2018-07-18T13:29:08.483" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11618" PostTypeId="1" AcceptedAnswerId="11637" CreationDate="2017-02-12T21:30:33.890" Score="1" ViewCount="1369" Body="&lt;p&gt;I have a project that I'm working on that needs data about which directions something has moved and how quickly from a given point (accelerometer and magnetometer?). I have the working python code for the BNO055, I'm just having trouble interpreting it. I guess these are my specific questions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Is the data from a starting point (doesn't seem likely) or a set time period that continues? If so, what is that time interval? Do I define it by how often I ask for the data?&lt;/li&gt;&#xA;&lt;li&gt;Is magnetometer and accelerometer data what I should be using for my task?&lt;/li&gt;&#xA;&lt;li&gt;What is a &lt;strong&gt;rough&lt;/strong&gt; pseudocode outline for how I could convert this data into something easier to understand (i.e. an updating distance or x,y,[z] coord system)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="16064" LastActivityDate="2019-04-07T14:41:09.503" Title="How to make sense of IMU (BNO055) data" Tags="&lt;imu&gt;&lt;python&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11619" PostTypeId="1" CreationDate="2017-02-13T18:01:27.227" Score="2" ViewCount="64" Body="&lt;p&gt;I am taking a course on AI robotics from a computer science department but my background is in mechanical engineering. I am having some difficulty with ambiguous terminology in virtual potential fields. All of the sources I have seen to define the virtual potential fields with a physics basis:&#xA;$$F(q) = \nabla U(q) $$&#xA;or that the force imposed by the potential field is the gradient of the potential function.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, the CS sources I have seen will later set the velocity set point of the robot controller equal to:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\mathbf{q}_s = \nabla U(q)$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;essentially using the imposed force as a velocity setpoint. But none of the sources mention this swap. So am I missing something, or is the term &lt;em&gt;virtual potential field&lt;/em&gt; sort of a misnomer? Maybe it should be &lt;em&gt;virtual &lt;strong&gt;velocity&lt;/strong&gt; potential field&lt;/em&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are some CS course slides I am looking at:&#xA;&lt;a href=&quot;http://cs.gmu.edu/~kosecka/cs685/cs685-potential-fields.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://cs.gmu.edu/~kosecka/cs685/cs685-potential-fields.pdf&lt;/a&gt;&#xA;&lt;a href=&quot;http://www.cs.cmu.edu/~motionplanning/lecture/Chap4-Potential-Field_howie.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.cs.cmu.edu/~motionplanning/lecture/Chap4-Potential-Field_howie.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you!&lt;/p&gt;&#xA;" OwnerUserId="9071" LastEditorUserId="9071" LastEditDate="2017-02-13T19:56:36.910" LastActivityDate="2017-02-13T19:56:36.910" Title="Need clarification on potential fields for robotics" Tags="&lt;mobile-robot&gt;&lt;artificial-intelligence&gt;&lt;path-planning&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11620" PostTypeId="2" ParentId="11619" CreationDate="2017-02-13T18:40:33.627" Score="1" Body="&lt;p&gt;It is possibly a misnomer. We CS people shouldn't really be talking physics ;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nevertheless, the idea used here is quite simple. Simple enough that many people have &quot;invented&quot; it on their own before learning its existence. I believe the reason it's called a potential field is due to the way many people implement the idea.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's take an example. For me, the moment of &quot;inventing&quot; this method was in a head-to-head Snake game, so say you are navigating an environment where there is a goal you want to go towards but also dangerous locations you want to avoid. In the case of Snake, the goal was the apples and the dangerous locations were your and your opponent's bodies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now say you want to simply have a &quot;tendency&quot; towards the goal which is stronger the closer you are to it, and a tendency to avoid danger which is also stronger the closer you are to it. Out of purely non-scientific intuition, let's say the strength of this tendency ($T$) is relative to the inverse distance ($R$) squared. So:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$T \sim \dfrac{1}{R^2}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Naturally, there is a $\sum$ for every source of tendency)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In physics, &quot;the strength is relative to the inverse of distance squared&quot; looks like potential fields, and I believe that's where the name of this method came from.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now in different applications of this method, you might do a different thing with the calculated $T$. You could use it in a physically meaningful way (as if it really were a potential field), but that often leads to problems. In the navigation problem above, you would likely end up orbiting your goal instead of reaching it. More easily, you could set your velocity to the same value as the strength of your potential field and screw physics.&lt;/p&gt;&#xA;" OwnerUserId="158" LastActivityDate="2017-02-13T18:40:33.627" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11625" PostTypeId="1" CreationDate="2017-02-14T01:31:09.567" Score="1" ViewCount="131" Body="&lt;p&gt;Can anyone give me a typical frequency that a driverless vehicle could generate steering and motor thrust commands? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am trying to model a driverless vehicle in MatLab. Right now the vehicle is generating commands at 50Hz and the integrator is solving the dynamics at a 0.01s timestep (100Hz). I just want to know if this is realistic. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would be even more grateful if you could point to a published source for this number.&lt;/p&gt;&#xA;" OwnerUserId="16075" LastActivityDate="2018-01-20T06:19:50.873" Title="How quickly can a driverless vehicle generate control commands?" Tags="&lt;control&gt;&lt;navigation&gt;&lt;matlab&gt;&lt;self-driving&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11627" PostTypeId="2" ParentId="11304" CreationDate="2017-02-14T12:55:49.633" Score="1" Body="&lt;p&gt;You will not be able to achieve stable horizontal flight without external sensors. The reason is that the Crazyflie 2.0 quadcopter does not have sensors to know where it is in the room, it only has sensor to know its orientation and its altitude (using a pressure sensor).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Chuck is correct in saying that a quadcopter only pushed thrust downwards. The crazyflie runs a stabilisation loop that uses Gyroscope and Accelerometer to measure and correct its orientation. There is also an altitude-hold loop that uses the pressure sensor and accelerometer to keep a stable altitude. This also means that you do not need to care about the current orientation: just send the wanted orientation setpoint and the onboard control loop will do its best to keep the platform at the given setpoint.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To have a stable horizontal flight you should be able to ask for roll and pitch of 0, and alt-hold with a rising rate of 0m/s (this is encoded with thrust=32568 for the moment in the Crazyflie when alt-hold is enabled).  In theory this should result in zero horizontal acceleration since the propeller would only push downwards. Unfortunately, practically this is not working because this is open-loop control and any imperfection in the sensors, motors, motor orientation, or anything else physical, will result in the quadcopter drifting away.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only way against this drift is to have another sensor, aware of the environment, that can correct this physical imperfection thus closing the position loop. This could be anything from onboard motion sensor to external positioning or camera systems.&lt;/p&gt;&#xA;" OwnerUserId="13313" LastActivityDate="2017-02-14T12:55:49.633" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11629" PostTypeId="2" ParentId="11538" CreationDate="2017-02-14T15:58:00.170" Score="1" Body="&lt;p&gt;I suggest adopting an existing library. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;ROS can be &lt;a href=&quot;https://github.com/mikepurvis/ros-install-osx&quot; rel=&quot;nofollow noreferrer&quot;&gt;installed on OS X&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://github.com/jrl-umi3218/Tasks&quot; rel=&quot;nofollow noreferrer&quot;&gt;Tasks&lt;/a&gt; also runs on OS X.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Each can also be integrated with V-REP or gazebo fairly easily for simulation and visualization. I have also created a &lt;a href=&quot;https://github.com/ahundt/homebrew-robotics&quot; rel=&quot;nofollow noreferrer&quot;&gt;homebrew-robotics tap&lt;/a&gt; for installing various robotics related tools on OS X via &lt;a href=&quot;http://brew.sh&quot; rel=&quot;nofollow noreferrer&quot;&gt;homebrew&lt;/a&gt; and a set of Linux setup scripts in &lt;a href=&quot;https://github.com/ahundt/robotics_setup&quot; rel=&quot;nofollow noreferrer&quot;&gt;robotics_setup&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="304" LastEditorUserId="304" LastEditDate="2017-03-19T19:54:41.997" LastActivityDate="2017-03-19T19:54:41.997" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11630" PostTypeId="1" CreationDate="2017-02-15T11:47:06.540" Score="3" ViewCount="1088" Body="&lt;p&gt;I would like to know how to go about evaluating 3D occupancy grid maps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a SLAM system that produces a 3D OGM (in .bt format using octomap/octovis)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also have a ground truth OGM in same .bt format.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How do I compare the accuracy of my map to the ground truth map in a qualitative and quantitative way?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Important notes:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The two maps may not be the same scale.&lt;/li&gt;&#xA;&lt;li&gt;One map may be less dense than the other.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;One method I have thought about using is &lt;a href=&quot;http://www.mrpt.org/paper-occupancy-grid-matching/&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;MRPT&amp;#39;s occupancy grid matching application&quot;&gt;MRPT's occupancy grid matching application&lt;/a&gt;&#xA;This would require me to send both 3d maps as a message to the octomap_server node in ROS, get the resulting map in Rviz, save the image 2D image of each separately, and then somehow convert the images to MRPT's .simplemap file format, and then run MRPT's grid matching program on the two files.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Surely there is a better/more accurate way?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT:&#xA;So I did more research and another route I could go is Matthew's Correlation Coefficient (&lt;a href=&quot;https://en.wikipedia.org/wiki/Matthews_correlation_coefficient&quot; rel=&quot;nofollow noreferrer&quot;&gt;MCC&lt;/a&gt;). I could compare two maps and iterate over each cell to compare my result to a ground truth, counting the True and False Positives and Negatives. &#xA;Only problem with this is that I have to assume that the two maps are the same scale, and also in the same orientation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have any ideas on solving these scale and orientation issues don't be shy.&lt;/p&gt;&#xA;" OwnerUserId="7376" LastEditorUserId="7376" LastEditDate="2017-02-16T19:52:33.403" LastActivityDate="2017-09-12T03:39:17.360" Title="How to evaluate 3D Occupancy grid maps" Tags="&lt;mapping&gt;&lt;occupancygrid&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11633" PostTypeId="1" CreationDate="2017-02-15T21:20:32.393" Score="4" ViewCount="1199" Body="&lt;p&gt;I am currently working on a self balancing robot project. I am going to use a MPU6050 to get data from both the accelerometer and the gyroscope. Since I need to get accurate data in a very small amount of data I need to filter the raw data I get. So many people have suggested me to use the Kalman Filter but I could not comprehend it (the maths behind it). Are there any other types of filters I can use in my project?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance.&lt;/p&gt;&#xA;" OwnerUserId="16041" LastActivityDate="2017-02-17T14:48:43.663" Title="Alternatives to Kalmam Filter" Tags="&lt;arduino&gt;&lt;kalman-filter&gt;&lt;balance&gt;&lt;filter&gt;" AnswerCount="4" CommentCount="8" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="11634" PostTypeId="1" AcceptedAnswerId="11638" CreationDate="2017-02-16T04:53:32.260" Score="0" ViewCount="428" Body="&lt;p&gt;I am trying to understand optimal control theory which forms the base for reinforcement learning techniques in AI. Whenever I open a lecture or a book or any online notes, everything starts with an ODE and then derivation goes the payoff function which is straight forward.&lt;/p&gt;&#xA;&lt;p&gt;I am trying hard to comprehend why an ODE models any system? Many say it easy to begin with but why this model?&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$dx/dt = f(x(t))$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;I could not find the reason and decided to ask for help.&lt;/p&gt;&#xA;" OwnerUserId="16093" LastEditorUserId="19515" LastEditDate="2020-07-25T00:36:12.063" LastActivityDate="2020-07-25T23:44:13.357" Title="Why ODE for optimal control theory?" Tags="&lt;control&gt;&lt;theory&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11635" PostTypeId="2" ParentId="11633" CreationDate="2017-02-16T08:49:25.727" Score="2" Body="&lt;p&gt;Particle filters (epecially in &lt;a href=&quot;https://en.wikipedia.org/wiki/Monte_Carlo_localization&quot; rel=&quot;nofollow noreferrer&quot;&gt;Monte Carlo localization&lt;/a&gt;) always seemed easy to intuitively understand to me. You basically simulate bunch of possible states of your robot, rank them with probabilities and occasionally you throw away the improbable ones.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's obviously more to it (and more math), but this should be enough to make a small working test.&lt;/p&gt;&#xA;" OwnerUserId="482" LastActivityDate="2017-02-16T08:49:25.727" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="11636" PostTypeId="2" ParentId="11633" CreationDate="2017-02-16T11:10:14.623" Score="5" Body="&lt;p&gt;A good choice for sensor fusion with the MPU6050 is a second order complementary filter, which I used for the orientation estimation in a project. The complementary filter is computational cheap and so a good choice for a microcontroller. A paper about the implementation you can find here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.academia.edu/6261055/Complementary_Filter_Design_for_Angle_Estimation_using_MEMS_Accelerometer_and_Gyroscope&quot; rel=&quot;noreferrer&quot;&gt;http://www.academia.edu/6261055/Complementary_Filter_Design_for_Angle_Estimation_using_MEMS_Accelerometer_and_Gyroscope&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="13043" LastActivityDate="2017-02-16T11:10:14.623" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11637" PostTypeId="2" ParentId="11618" CreationDate="2017-02-16T14:40:18.850" Score="1" Body="&lt;p&gt;So, it sounds like you're trying to get rough odometry of a hexapod using a accelerometer and magnetometer. You are right to be choosing a sensor to get lateral and angular accelerations, but I think the magnetometer is not as good of a choice as a MEMS gyroscope, which should be about the same price but not affected by magnetic fields. In my experience, the environment indoors is not a terribly friendly one for magnetometers, as there are a lot of pieces of metal around, and even less friendly when you're near a source of stray electromagnetic fields (like near motors). That answers your second question, I think.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the first question, according to the API I sent and you confirmed, the data that comes to you from the sensor is some form of the instantaneous acceleration and magnetic field &quot;felt by&quot; the sensor when you read it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as your third question, there's no simple answer, but I'd refer you to this question: &lt;a href=&quot;https://stackoverflow.com/questions/26476467/calculating-displacement-using-accelerometer-and-gyroscope-mpu6050&quot;&gt;https://stackoverflow.com/questions/26476467/calculating-displacement-using-accelerometer-and-gyroscope-mpu6050&lt;/a&gt; .&lt;/p&gt;&#xA;" OwnerUserId="7665" LastEditorUserId="-1" LastEditDate="2017-05-23T12:37:11.430" LastActivityDate="2017-02-16T14:40:18.850" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11638" PostTypeId="2" ParentId="11634" CreationDate="2017-02-16T18:32:24.197" Score="1" Body="&lt;p&gt;The reason why ODE's are used is simply: physics. It would be great if any system could be modelled by a simple linear function like $x(t)=at$, but nature is not so simple, or linear. Even when you neglect nature, dynamical systems, like $\dot{x}(t)=f(x(t))$ still pop up everywhere, like CroCo said, it is the basis of the mathematical modelling of many systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would suggest looking into differential equations first before starting with reinforcement learning. &lt;/p&gt;&#xA;" OwnerUserId="15909" LastActivityDate="2017-02-16T18:32:24.197" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="11641" PostTypeId="1" CreationDate="2017-02-17T09:11:19.493" Score="2" ViewCount="294" Body="&lt;p&gt;In humanoid robot, Which way we determine DH Parameter:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;DH parameter for each leg separability.&lt;/li&gt;&#xA;&lt;li&gt;Or, DH-Parameter for two leg together.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;and if I can calculate from any way, what about trunk how can insert it in DH calculation?&lt;/p&gt;&#xA;" OwnerUserId="15940" LastActivityDate="2017-06-18T09:28:28.503" Title="Denavit-Hartenberg Humanoid robot" Tags="&lt;forward-kinematics&gt;&lt;dh-parameters&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11642" PostTypeId="1" CreationDate="2017-02-17T11:15:33.903" Score="2" ViewCount="1225" Body="&lt;p&gt;The following code applies a force to the joint in an update method call. &lt;strong&gt;The problem is that the force seems to dissipate / is applied consecutively to other parts of the model, specifically the chassis, which holds the rotating laser. How can I circumvent that?&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The chassis shold be a moving vehicle so I can't just fix it to the ground plane, using a fixed joint.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is my onUpdate() from within the gazebo plugin. Essentially its making the joint rotate back and forth on a specified axis.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;public: void OnUpdate(const common::UpdateInfo &amp;amp; /*_info*/){&#xA;&#xA;    rotation = this-&amp;gt;joint-&amp;gt;GetAngle(0);&#xA;    this-&amp;gt;joint-&amp;gt;SetStopDissipation(0,0);&#xA;    double degree = rotation.Degree();&#xA;    if (degree &amp;lt;= -90) {&#xA;            this-&amp;gt;joint-&amp;gt;SetForce(rotationAxis,effort*2);&#xA;    }&#xA;    else if (degree &amp;gt;= 90) {&#xA;            this-&amp;gt;joint-&amp;gt;SetForce(rotationAxis,-effort*2);&#xA;    }&#xA;    std::cerr &amp;lt;&amp;lt; degree &amp;lt;&amp;lt; &quot;\n&quot;; }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The definition from the model.sdf is this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    &amp;lt;joint name=&quot;back_and_forth_joint&quot; type=&quot;revolute&quot;&amp;gt;&#xA;        &amp;lt;child&amp;gt;laser&amp;lt;/child&amp;gt;&#xA;        &amp;lt;parent&amp;gt;chassis&amp;lt;/parent&amp;gt;&#xA;        &amp;lt;axis&amp;gt;&#xA;            &amp;lt;xyz&amp;gt;1 0 0&amp;lt;/xyz&amp;gt;&#xA;            &amp;lt;limit&amp;gt;&#xA;                &amp;lt;lower&amp;gt;-1.57079633&amp;lt;/lower&amp;gt;&#xA;                &amp;lt;upper&amp;gt;1.57079633&amp;lt;/upper&amp;gt;&#xA;            &amp;lt;/limit&amp;gt;&#xA;        &amp;lt;/axis&amp;gt;&#xA;    &amp;lt;/joint&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of the possibilities is to simply add mass to the chassis like so:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;        &amp;lt;link name='chassis'&amp;gt;&#xA;        &amp;lt;pose&amp;gt;0 0 .1 0 0 0&amp;lt;/pose&amp;gt;&#xA;        &amp;lt;inertial&amp;gt;&#xA;          &amp;lt;mass&amp;gt;10&amp;lt;/mass&amp;gt;&#xA;        &amp;lt;/inertial&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="16105" LastEditorUserId="16105" LastEditDate="2017-02-17T11:24:03.877" LastActivityDate="2017-03-19T19:34:48.303" Title="Gazebo joint-&gt;SetForce() call applies forces to the whole model. How to circumvent that?" Tags="&lt;ros&gt;&lt;gazebo&gt;&lt;joint&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11643" PostTypeId="2" ParentId="11641" CreationDate="2017-02-17T12:13:38.003" Score="1" Body="&lt;p&gt;If you have no idea about where to start the best is to google Nao + DarwinOP + HUBO2 + DH and you will have lot of pdf articles and reports coming out that you may read. For each humanoid robot you will have a description of kinematic chains and DH modeling.  &lt;/p&gt;&#xA;" OwnerUserId="16030" LastActivityDate="2017-02-17T12:13:38.003" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11644" PostTypeId="2" ParentId="11633" CreationDate="2017-02-17T13:50:59.480" Score="1" Body="&lt;p&gt;Check this website &lt;a href=&quot;http://blog.tkjelectronics.dk/2012/09/a-practical-approach-to-kalman-filter-and-how-to-implement-it/&quot; rel=&quot;nofollow noreferrer&quot;&gt;pratical approach to kalman filter&lt;/a&gt; it will give you a comprehensive description of kalman filter for a balancing robot (like yours) both theoritical and pratical (you have the code as well). And it runs on an Arduino !&lt;/p&gt;&#xA;" OwnerUserId="16030" LastActivityDate="2017-02-17T13:50:59.480" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11645" PostTypeId="1" CreationDate="2017-02-17T14:19:08.997" Score="2" ViewCount="113" Body="&lt;p&gt;I'm working on a robotics project and I've got this idea for a self learning algorithm. I'm looking for some feedback on this, and specifically on whether this is a more common way of doing things. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I simply want to store a lot of numerical log data of previous actions the robot took and the results it got. I then want to let it search through the DB multiple times per second so that the robot can make decisions based on that and thus learn from it's actions (like humans do).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I constantly log a lot of data. One simple log record could be for example:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;speed: 5.43&lt;/li&gt;&#xA;&lt;li&gt;altitude: 35.23&lt;/li&gt;&#xA;&lt;li&gt;wind_speed: 6.19&lt;/li&gt;&#xA;&lt;li&gt;direction: 27&lt;/li&gt;&#xA;&lt;li&gt;current position: [12, -20]&lt;/li&gt;&#xA;&lt;li&gt;desired position: [18, -25]&lt;/li&gt;&#xA;&lt;li&gt;steering decision: 23&lt;/li&gt;&#xA;&lt;li&gt;success: 12&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;desired_position&lt;/code&gt; are coordinates on a 2 dimensional matrix and the &lt;code&gt;success&lt;/code&gt; is how close it came to the desired position within 10 seconds (so the lower the better).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I then have a certain situation for which I want to find a comparable experience in the database. So let's say my current situation is this:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;speed: 5.13 &lt;/li&gt;&#xA;&lt;li&gt;altitude: 35.98 &lt;/li&gt;&#xA;&lt;li&gt;wind_speed: 7.54 &lt;/li&gt;&#xA;&lt;li&gt;direction: 24 &lt;/li&gt;&#xA;&lt;li&gt;current position: [14, -22]&lt;/li&gt;&#xA;&lt;li&gt;desired_position: [17, -22]&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;As you can see it doesn't have a &lt;code&gt;steering decision&lt;/code&gt; or a &lt;code&gt;success&lt;/code&gt; yet, because it still has to make a steering decision and only after taking that action and seeing the result the success rate can be calculated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I want to search for the record &quot;closest&quot; to my current situation within certain boundaries, and which has the best (lowest) success rate. So for example, the boundaries could be that the &lt;code&gt;direction&lt;/code&gt; cannot be more than 10% difference, and the &lt;code&gt;heading&lt;/code&gt; cannot be more than 15% difference. So I first make a selection based on that. I'm left with A LOT of records. I then calculate for every field in every record the percentage difference, and accumulate those per record so that I get some sort of “closeness factor”. Once that's done I combine the closeness with the success, order by that number, and take the top record to base my decision on for the action to be taken. I take the steering decision of that record and randomly change it to something which is within a certain change percentage range. I do this because people also experiment, you try something new every time. And as the system becomes better at steering the robot (success factors get better) I also reduce the randomization change percentage. This is because as people get better, they also know that they are closer to the objective and they don't need to experiment as much any more.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So to steer my robot I will run the following process as often as possible (I will try to run it 20 times per second) and use this system to steer my robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my questions are; &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Do you think that this can work? &lt;/li&gt;&#xA;&lt;li&gt;Is this kind of thing used more often? &lt;/li&gt;&#xA;&lt;li&gt;Does anybody know a database which would make it possible to query based on a dynamically calculated factor (the closeness factor)?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="1050" LastEditorUserId="1050" LastEditDate="2017-02-17T15:06:44.203" LastActivityDate="2017-02-20T18:35:57.457" Title="Self learning robotics algoritm: feedback needed" Tags="&lt;algorithm&gt;&lt;steering&gt;&lt;self-driving&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11646" PostTypeId="2" ParentId="11633" CreationDate="2017-02-17T14:48:43.663" Score="1" Body="&lt;p&gt;Want to get orientations from accelerometers and gyroscopes? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Use the &lt;a href=&quot;http://x-io.co.uk/open-source-imu-and-ahrs-algorithms/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Madgwick filter&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the &lt;a href=&quot;http://x-io.co.uk/res/doc/madgwick_internal_report.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;paper&lt;/a&gt;, &quot;Results indicate the filter achieves levels of accuracy exceeding that of the Kalman-based algorithm.&quot; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As @CroCo mentioned, the Kalman filter &lt;em&gt;is&lt;/em&gt; the optimal estimator.... for a linear system signal in the presence of &lt;em&gt;zero-mean, Gaussian noise&lt;/em&gt;. Accelerometers and gyroscopes have a non-zero bias, and they also experience bias drift which means that, even if you could measure and offset the bias, the bias isn't stable and changes over time. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Madgwick filter is free, and even better, there are already efficient implementations of the filter already written in C, C#, and Matlab. You can learn the math if you want, but again the math has already been done and the finished product - the filter - is free to download and use. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-02-17T14:48:43.663" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11647" PostTypeId="2" ParentId="11642" CreationDate="2017-02-17T18:41:47.027" Score="2" Body="&lt;p&gt;As you mentioned in your update,&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;One of the possibilities is to simply add mass to the chassis&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This works because, at some point, you need a &lt;em&gt;reaction&lt;/em&gt; force. An applied force (or torque) at any point in a structure will be transmitted through the structure back to a &quot;fixed&quot; object. The fixed object is generally the Earth, and connection to the Earth is through poles or other supports inserted into the Earth (a foundation) or through a friction contact with the surface (such as tires, etc.) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You are correct in that you can't connect a &lt;em&gt;mobile&lt;/em&gt; vehicle to the Earth using a &lt;em&gt;fixed&lt;/em&gt; joint, but you can use a series of flexible joints to simulate contact with the Earth. How are you simulating motion right now? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you're experiencing, by the way, is the same behavior you'd see if you &lt;a href=&quot;https://www.youtube.com/watch?v=BPMjcN-sBJ4&quot; rel=&quot;nofollow noreferrer&quot;&gt;applied a force to an object in space&lt;/a&gt; where there is no &quot;fixed&quot; object to apply the reaction force. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Earth is essentially infinitely massive, for the purposes of providing reaction forces for anything you or I would ever do. What you're looking for, if you can't or won't model the connection between the wheels and the ground, is to make the chassis &quot;sufficiently massive&quot; such that it doesn't generate an appreciable acceleration when your external force is applied.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you've watched Battlebots, then you've probably &lt;a href=&quot;https://www.youtube.com/watch?v=CA5tTosVFeo&amp;amp;t=15s&quot; rel=&quot;nofollow noreferrer&quot;&gt;seen instances where the chassis is NOT sufficiently massive&lt;/a&gt; and the robot flips when an actuator is used. There's nothing to absorb the reaction force, so the entire body moves. The effect is more pronounced as ratio of applied force the mass of the &quot;base&quot; body is increased. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-02-17T18:41:47.027" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11649" PostTypeId="1" CreationDate="2017-02-18T05:16:44.983" Score="0" ViewCount="373" Body="&lt;p&gt;I have a robot with a 4 wheel drive using mecanum wheels to allow for more mobility. For the engineering documentation I am looking to find both the translational velocity and rotational velocity of the robot. To begin I started with the (incorrect) assumption that the tangential velocity of the wheels was the overall linear velocity, but that yielded unreasonably high values. What is the correct way to mathematically evaluate the translational and rotational velocity of the robot?&lt;/p&gt;&#xA;" OwnerUserId="14767" LastActivityDate="2017-02-18T13:57:26.313" Title="How to Calculate the Translational and Rotational Velocity of a 4 Wheeled Robot?" Tags="&lt;wheeled-robot&gt;&lt;kinematics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11650" PostTypeId="2" ParentId="11641" CreationDate="2017-02-18T07:26:05.493" Score="0" Body="&lt;p&gt;When establishing a set of kinematic frames for a humanoid robot, it's common to use a frame on the torso as the base frame and then branch out to the limbs from there. So there is a tree of kinematic frames. The base frame is a floating frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DH parameterization of the kinematics can be useful for drawings and showing or communicating the relative positioning of joints, but you will probably find that it's easier to work with full SE3 transforms between frames instead of trying to use DH parameters. &lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2017-02-18T07:26:05.493" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11651" PostTypeId="2" ParentId="11649" CreationDate="2017-02-18T13:57:26.313" Score="1" Body="&lt;p&gt;The problem you describe, calculating the cartesian velocity form the wheel velocities is known as the direct kinematic problem of the mobile robots. You can find a detailed explanation on who to do this for 4 wheeled robots with mecanum wheels &lt;a href=&quot;http://research.ijcaonline.org/volume113/number3/pxc3901586.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2017-02-18T13:57:26.313" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11652" PostTypeId="1" AcceptedAnswerId="11658" CreationDate="2017-02-19T08:26:14.850" Score="0" ViewCount="579" Body="&lt;p&gt;I try to find command to identify if call is received and when user press any button of number on their phone. I use arduino + sim900A + Ethernet. I try alot but still no see command to do that. Are there any way exit ? If you know, please help me.&lt;/p&gt;&#xA;" OwnerUserId="16119" LastEditorUserId="16119" LastEditDate="2017-02-19T08:58:06.357" LastActivityDate="2017-03-23T10:29:19.040" Title="Arduino + SIM900: Identify if call is received?" Tags="&lt;arduino&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11653" PostTypeId="1" CreationDate="2017-02-19T11:58:08.013" Score="0" ViewCount="4885" Body="&lt;p&gt;I am currently coding a Forward and Inverse Kinematics solver for a PUMA 560 robot. For the Inverse Kinematics part I am using the closed for solution given in this &lt;a href=&quot;https://deepblue.lib.umich.edu/bitstream/handle/2027.42/6192/bac6709.0001.001.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;paper&lt;/a&gt;. But my issue is, my solution for IK for a given set of (x,y,z) does not return the same values returned by my FK values. The reason I am doing this is to verify my code accurately computes the FK and IK.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These are the DH parameters for my robot (These are Python code, since I was testing my algorithm on Spyder IDE before implementing on C++).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;b&gt;DH Parameters &lt;/b&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Link lengths &lt;br&gt;&#xA;   &lt;code&gt;a = [0, 650, 0, 0, 0, 0]&lt;/code&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Link offsets&lt;br&gt;&#xA;  &lt;code&gt;d = [0, 190, 0, 600, 0, 125]&lt;/code&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Link twist angle&lt;br&gt;&#xA;  &lt;code&gt;alpha = [-pi/2, 0, pi/2, -pi/2, pi/2, 0]&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So basically I finding the &lt;code&gt;T&lt;/code&gt; transformation matrix for each link from the the &lt;code&gt;base frame {B}&lt;/code&gt; to &lt;code&gt;wrist frame {W}&lt;/code&gt;. This is my code;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;b&gt; Function to compute Forward Kinematics&lt;/b&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;def forwardK(q):&#xA;&#xA;#T06 is the location of Wrist frame, {W}, relative to Base frame, {B} &#xA;T01 = genT(q[0],0,d[0],0)&#xA;T12 = genT(q[1],a[0],d[1],alpha[0])&#xA;T23 = genT(q[2],a[1],d[2],alpha[1])&#xA;T34 = genT(q[3],a[2],d[3],alpha[2])&#xA;T45 = genT(q[4],a[3],d[4],alpha[3])&#xA;T56 = genT(q[5],a[4],d[5],alpha[4])&#xA;&#xA;#Tool frame {T}&#xA;#T67 = genT(0,0,d[5],0)&#xA;&#xA;T03 = matmul(T01,T12,T23)&#xA;T36 = matmul(T34,T45,T56)&#xA;T06 = matmul(T03,T36)    &#xA;#T07 = matmul(T06,T67)&#xA;&#xA;x = T[0][3]&#xA;y = T[1][3]&#xA;z = T[2][3]&#xA;&#xA;print(&quot;X: &quot;,x)&#xA;print(&quot;Y: &quot;,y)&#xA;print(&quot;Z: &quot;,z,&quot;\n&quot;)&#xA;print(&quot;T: &quot;,T,&quot;\n&quot;)&#xA;&#xA;return T06  &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;b&gt; The function to compute &lt;/b&gt; &lt;code&gt;T Matrix&lt;/code&gt; &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;def genT(theta, a, d, alpha):&#xA;T =  array([[cos(theta), (-sin(theta)), 0, a],&#xA;    [sin(theta)*cos(alpha), (cos(theta)*cos(alpha)), -sin(alpha), (-   d*sin(alpha))],&#xA;    [sin(theta)*sin(alpha), cos(theta)*sin(alpha), cos(alpha), cos(alpha)*d],&#xA;    [0, 0, 0, 1]])&#xA;&#xA;return T&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;from the &lt;code&gt;T Matrix&lt;/code&gt; relating the &lt;code&gt;{B} frame to the {W} frame&lt;/code&gt; position vector of the &lt;code&gt;{w}&lt;/code&gt; &lt;code&gt;[x y z]&lt;/code&gt; is extracted. &lt;code&gt;R Matrix&lt;/code&gt; (orientation) of the &lt;code&gt;{W}&lt;/code&gt; relative to the &lt;code&gt;{B}&lt;/code&gt; is obtained by the following piece of code;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;T = forwardK([30,-110,-30,0,0,0])&#xA;x = T[0][3]&#xA;y = T[1][3]&#xA;z = T[2][3]&#xA;R = T[0:3,0:3]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Where &lt;code&gt;T&lt;/code&gt; is the transformation matrix relating &lt;code&gt;{W}&lt;/code&gt; to &lt;code&gt;{B}&lt;/code&gt;. Then this information is fed in to the &lt;code&gt;invK(x,y,z,R,ARM,ELOBOW,WRIST)&lt;/code&gt; function to check if the algorithm returns the same set of angles fed to the &lt;code&gt;forwardK(q1,q2,q3,q4,q5,q6)&lt;/code&gt; function. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In the &lt;code&gt;invK(x,y,z,R,ARM,ELOBOW,WRIST)&lt;/code&gt;&#xA;      - &lt;code&gt;ARM, ELBOW, WRIST&lt;/code&gt; are orientation specifiers to describe various possible configurations of the manipulator. Each of these parameters are either &lt;code&gt;{+1,-1}&lt;/code&gt;. These values are then used in the closed form geometrical solution presented by the afore-mentioned paper.&lt;br&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;I did not post the code for the&lt;/em&gt;&lt;/strong&gt; &lt;code&gt;invK(x,y,z,R,ARM,ELOBOW,WRIST)&lt;/code&gt; &lt;strong&gt;&lt;em&gt;since it is a direct implementation of the closed form solution presented in the paper and also it significantly long hence making it highly unreadable.&lt;/em&gt;&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What do you think I am doing wrong? I am quite sure the way I am computing the FK is correct but I could be wrong. The matrix multiplications of my &lt;code&gt;Python&lt;/code&gt; code are correct since I double checked them with &lt;code&gt;Matlab&lt;/code&gt;. Any advice is appointed. &lt;/p&gt;&#xA;" OwnerUserId="7278" LastActivityDate="2017-08-18T09:02:46.257" Title="Programming Forward and Inverse Kinematics of PUMA 560?" Tags="&lt;robotic-arm&gt;&lt;inverse-kinematics&gt;&lt;industrial-robot&gt;&lt;forward-kinematics&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11654" PostTypeId="1" AcceptedAnswerId="11657" CreationDate="2017-02-19T14:04:44.217" Score="1" ViewCount="841" Body="&lt;p&gt;I've been thinking about making myself a fancy data glove. Now that I'm looking into it, I notice a lot of DIY stuff works with these so called flex sensor based on conductive carbon ink. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not familiar with these sensors but from what I have learned so far, they are more expensive and less accurate compared to a simple strain gauge. Or are they just hard to use because of the length and bend radius of the finger?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So actually I'm just wondering what the pros and cons are of these sensors when faced with data gloves.&lt;/p&gt;&#xA;" OwnerUserId="16123" LastEditorDisplayName="user9480" LastEditDate="2017-05-01T10:25:17.810" LastActivityDate="2017-05-01T10:25:17.810" Title="Strain gauges or flex sensors" Tags="&lt;sensors&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11655" PostTypeId="2" ParentId="11653" CreationDate="2017-02-19T17:07:42.493" Score="0" Body="&lt;p&gt;Take a look at the DH matrices on the &lt;a href=&quot;https://en.wikipedia.org/wiki/Denavit%E2%80%93Hartenberg_parameters&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia page&lt;/a&gt;. I think, at a minimum, you have some sign errors. It also looks like maybe you use the same T matrix in both directions; from the base to the end effector and the other way. You can't do that. The way it's (almost) written, you have a T matrix that goes from the link coordinates backward; it doesn't go forward, but you're still using it in your forward kinematics calculations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Try using one known set of parameters and invoke your genT function. Verify that the result gets you moved correctly, but I don't think it will. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;:EDIT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your matrix is &lt;strong&gt;not&lt;/strong&gt; the same. The matrix $^{n-1}T_n$ is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\left[&#xA;\begin{array}{cccc}&#xA;\cos{\theta} &amp;amp; -\sin{\theta}\cos{\alpha} &amp;amp; \sin{\theta}\sin{\alpha} &amp;amp; r\cos{\theta} \\&#xA;\sin{\theta} &amp;amp; \cos{\theta}\cos{\alpha} &amp;amp; -\cos{\theta}\sin{\alpha} &amp;amp; r\sin{\theta} \\&#xA;0 &amp;amp; \sin{\alpha} &amp;amp; \cos{\alpha} &amp;amp; d \\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1&#xA;\end{array}&#xA;\right]&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;which can be viewed as a conglomeration of the rotation matrix and translation vector:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\left[&#xA;\begin{array}{c|c}&#xA;R &amp;amp; T \\ \hline&#xA;0 &amp;amp; 1&#xA;\end{array}&#xA;\right]&#xA;$$&#xA;The inverse of that, $^nT_{n-1}$, is:&#xA;$$&#xA;\left[&#xA;\begin{array}{cccc}&#xA;\cos{\theta} &amp;amp; \sin{\theta} &amp;amp; 0 &amp;amp; -r \\&#xA;-\sin{\theta}\cos{\alpha} &amp;amp; \cos{\theta}\cos{\alpha} &amp;amp; \sin{\alpha} &amp;amp; -d\sin{\alpha} \\&#xA;\sin{\theta}\sin{\alpha} &amp;amp; -\cos{\theta}\sin{\alpha} &amp;amp; \cos{\alpha} &amp;amp; -d\cos{\alpha} \\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &#xA;\end{array}&#xA;\right]&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;which is the same as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\left[&#xA;\begin{array}{c|c}&#xA;R^{\mbox{T}} &amp;amp; -RT \\ \hline&#xA;0 &amp;amp; 1&#xA;\end{array}&#xA;\right]&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The inverse of a rotation matrix is the same as the transpose of the rotation matrix. The $\sin{\theta}$ term in the rotation matrix (at 2,1 or 1,2) is positive in both cases; yours is negative. That alone leads me to think your formulation is wrong. The signs on the other terms seem incorrect also.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I mentioned before, try using a basic setup that you know the answer to, plug that into your T matrix function, and verify it gives you the correct output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With software especially, any time you create a function you should try to perform a &quot;&lt;a href=&quot;https://en.wikipedia.org/wiki/Unit_testing&quot; rel=&quot;nofollow noreferrer&quot;&gt;Unit Test&lt;/a&gt;&quot; to ensure that you are getting valid outputs from every sub-function you write.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My preference would be to do something graphically (hand-drawn), where maybe you have a link with a length of 1, and you rotate it 30, 45, 60, and 90 degrees. Verify that the resulting frames are all located in the correct places. You should consider also trying locations in all four quadrants - atan is the devil. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2017-02-24T14:24:51.000" LastActivityDate="2017-02-24T14:24:51.000" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11656" PostTypeId="1" CreationDate="2017-02-19T19:36:09.060" Score="2" ViewCount="116" Body="&lt;p&gt;This article discusses how the robots sent to explore the Fukushima reactors have been damaged by radiation that exceeds 650 sieverts per hour:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.theverge.com/2017/2/17/14652274/fukushima-nuclear-robot-power-plant-radiation-decomission-tepco&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.theverge.com/2017/2/17/14652274/fukushima-nuclear-robot-power-plant-radiation-decomission-tepco&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the seventh such robot that has died probing the reactor.  I assume the robots are well-shielded....&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What exactly is damaging the robots (alpha, beta, gamma particles) and how? Is the damage permanent? &lt;/p&gt;&#xA;" OwnerUserId="4545" LastActivityDate="2017-04-21T17:08:14.930" Title="What is killing the robots exploring Fukushima?" Tags="&lt;sensors&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11657" PostTypeId="2" ParentId="11654" CreationDate="2017-02-19T21:07:47.007" Score="-1" Body="&lt;p&gt;The sensors, which are called flexible or bending sensors, are actually capacitors or coils.  If you bend the structure the value of capacitor or coil going to  be changed. If you can produce the flexible sensor correctly and precisely, you will get good results. However, the sensor used as a strain gauges are includes crystals like piezo and these crystals produces electric vibrations in case of load vibration or bending.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/LB148.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/LB148.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9504" LastActivityDate="2017-02-19T21:07:47.007" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11658" PostTypeId="2" ParentId="11652" CreationDate="2017-02-20T08:11:47.537" Score="0" Body="&lt;p&gt;AT + CLCC will get back number to know status of recipient&lt;/p&gt;&#xA;" OwnerUserId="16119" LastEditorUserId="10748" LastEditDate="2017-02-21T09:35:06.800" LastActivityDate="2017-02-21T09:35:06.800" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11659" PostTypeId="2" ParentId="1758" CreationDate="2017-02-20T08:33:01.080" Score="1" Body="&lt;p&gt;Old post, still answering for other people's reference.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am working on a similar project. Even to me a friend had suggested to use timer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally my suggestion would be to use as high speed controller as possible (mine is 80MHz). Use 5us Timer Interrupt (Scheduler). Do the following in this  Scheduler Interrupt Routine:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;CheckSensors()&lt;/li&gt;&#xA;&lt;li&gt;ClockActuators() (if using Steppers then make all the Clk pins low initially  and then high the Clk for whichever motor needs to run)&lt;/li&gt;&#xA;&lt;li&gt;StateChange() / ApplicationRoutine() / SwitchContext() (for more info on State Machine refer: &lt;a href=&quot;https://barrgroup.com/Embedded-Systems/How-To/State-Machines-Event-Driven-Systems&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://barrgroup.com/Embedded-Systems/How-To/State-Machines-Event-Driven-Systems&lt;/a&gt;) (to be frank, could not digest the ending part of the article but got the idea. I am using simple Switch Case in StateChange().)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;In main()'s while(1) loop:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Check Input from Keypad / Touch Screen / Serial Comm etc.&lt;/li&gt;&#xA;&lt;li&gt;Update Display (If this is too long and makes Keypad response slow then try to put the above step i.e checking keypad/touch/serial in interrupt.)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="16130" LastEditorUserId="16131" LastEditDate="2017-02-21T10:26:37.923" LastActivityDate="2017-02-21T10:26:37.923" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11660" PostTypeId="2" ParentId="11656" CreationDate="2017-02-20T16:36:45.080" Score="1" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Ionizing_radiation&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ionizing radiation&lt;/a&gt; can induce a voltage by freeing electrons in a material. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the radiation is capable of freeing electronics at a rate faster than the material is capable of dissipating it, then the voltage grows to the point that it reaches the &lt;a href=&quot;https://en.wikipedia.org/wiki/Breakdown_voltage&quot; rel=&quot;nofollow noreferrer&quot;&gt;breakdown voltage&lt;/a&gt; of the material, at which point the material conducts electricity. This usually &quot;fries&quot; the object. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Support structures don't generally care about the induced voltages, but electronics would. The article you linked stated, as @Paul mentioned, that one robot failed because the tracks got stuck; on a previous unit the &lt;a href=&quot;http://www.tepco.co.jp/en/press/corp-com/release/2017/1375551_10469.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;camera failed&lt;/a&gt; due to higher-than-anticipated radiation levels. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-02-20T16:36:45.080" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11661" PostTypeId="2" ParentId="9848" CreationDate="2017-02-20T17:58:10.310" Score="3" Body="&lt;p&gt;I would recommend using an RRT or FMT sampling based path planner. The basic idea is to sample your state space and build a tree which connects your starting state to the goal state. Each time you connect two samples, you check for a collision: if there is no collision then you add the connection to your tree search, otherwise you move on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is your responsibility to write a collision checker routine, since this is a fairly application specific task. If you add some more detail to your set-up I could make the answer more specific (are you using an occupancy grid? Are there dynamic constraints?). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I'm not mistaken you can represent an occluded view as a collision, in which case the algorithm will find a path which gets from start to finish without occlusions. Your sphere's idea is not too dissimilar from how the proof for the FMT algorithm works. For FMT (which I am more familiar with), a recent dissertation is &lt;a href=&quot;https://asl.stanford.edu/wp-content/papercite-data/pdf/Starek.PhD16.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; (look at &quot;Avoiding plume impingement&quot; as a way to avoid occlusions), and a complete description is &lt;a href=&quot;https://web.stanford.edu/~pavone/papers/Janson.Pavone.ISRR13.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;, with open source implementation &lt;a href=&quot;https://github.com/schmrlng/MotionPlanning.jl/tree/master/src&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might also be interested in &quot;next best view&quot; planners. &lt;/p&gt;&#xA;" OwnerUserId="16134" LastActivityDate="2017-02-20T17:58:10.310" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11662" PostTypeId="2" ParentId="11645" CreationDate="2017-02-20T18:35:57.457" Score="2" Body="&lt;p&gt;What you are describing seems a lot like &lt;a href=&quot;https://en.wikipedia.org/wiki/Reinforcement_learning&quot; rel=&quot;nofollow noreferrer&quot;&gt;reinforcement learning&lt;/a&gt;, and yes, it works well for this sort of scenario. It is a popular enough approach that you should be able to find starter code in whatever language you prefer.  This &lt;a href=&quot;ftp://ftp.idsia.ch/pub/juergen/icra06.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;paper&lt;/a&gt; looks like it could be interesting for you.&lt;/p&gt;&#xA;&lt;h2&gt;Basic set-up&lt;/h2&gt;&#xA;&lt;p&gt;Typically the way the problem is set up is that we want to find a function called a &lt;em&gt;policy&lt;/em&gt; which maps &lt;em&gt;state&lt;/em&gt;/&lt;em&gt;action&lt;/em&gt; pairs to &lt;em&gt;rewards&lt;/em&gt;. For your problem, the state is all of the information besides &lt;code&gt;steering_decision&lt;/code&gt; and &lt;code&gt;success&lt;/code&gt;, your action is &lt;code&gt;steering_decision&lt;/code&gt; and your reward is &lt;code&gt;success&lt;/code&gt;. The goal is to find a policy that gives the best reward, where &amp;quot;best&amp;quot; could be the highest mean, lowest risk, etc. depending on the setting.&lt;/p&gt;&#xA;&lt;h2&gt;Importance of exploration&lt;/h2&gt;&#xA;&lt;p&gt;The randomization idea you propose is crucial, known as &amp;quot;exploration&amp;quot; in the reinforcement learning community. If you want to go really deep into how to best trade-off exploration and exploitation, statisticians have been studying the &amp;quot;Multi-armed bandit&amp;quot; problem for a few decades. If you're ok with exploration that is &amp;quot;good enough&amp;quot;, then a linearly decreasing exploration factor will work fine.&lt;/p&gt;&#xA;&lt;h2&gt;Making it fast&lt;/h2&gt;&#xA;&lt;p&gt;As you note the amount of data you have to sift through makes it difficult to compute this policy quickly, so what typically happens is that we run a &lt;em&gt;training&lt;/em&gt; phase off line (either based on historical data or simulated data) in order to find a good policy.  Then we use this policy (without changing it) on-line. If you store the policy as a look-up table (for example by hashing your state), then the on-line computation will be very fast. Off-line training will work well as long as your environment is fairly static, or you are able to capture the time-variation in your state (for example by including weather or time-of-day information).&lt;/p&gt;&#xA;&lt;h2&gt;Comparing &amp;quot;similar&amp;quot; states&lt;/h2&gt;&#xA;&lt;p&gt;The last piece of the puzzle is to formalize the &amp;quot;closeness&amp;quot; concept, where you decide what information is relevant. There are quite a few ways to do this, but I would recommend looking into a Gaussian process approach (see &lt;a href=&quot;http://www.gaussianprocess.org/gpml/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this on-line book&lt;/a&gt;), where you define a &lt;em&gt;kernel function&lt;/em&gt;, which takes in two state vectors &lt;span class=&quot;math-container&quot;&gt;$x_1$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$x_2$&lt;/span&gt;, and returns a number which represents how similar the states are. The reason to use this approach is that you can use your historical data to fit a statistical model for the reward distribution given a state &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt;, even if you haven't seen the state before.&lt;/p&gt;&#xA;" OwnerUserId="16134" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2017-02-20T18:35:57.457" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11663" PostTypeId="1" AcceptedAnswerId="11665" CreationDate="2017-02-20T20:30:28.013" Score="1" ViewCount="121" Body="&lt;p&gt;I am trying to design a bot, it has to measure the temp I am using an 8051 so the adc is taking up a lot of i/o pins so I am thinking of switching it out with a thermostat or put another controller and interface them (which also has the advantage of letting me add more features) But I wanted to make sure in general is it a good design to add multiple micro-controllers on the same pcb, will it cause hardware problems?&lt;/p&gt;&#xA;" OwnerUserId="16136" LastActivityDate="2017-02-20T22:34:43.320" Title="is designing a pcb with multiple controllers a good schematic design?" Tags="&lt;microcontroller&gt;&lt;design&gt;&lt;circuit&gt;&lt;hardware&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11664" PostTypeId="1" CreationDate="2017-02-20T22:23:47.263" Score="1" ViewCount="214" Body="&lt;p&gt;I am using LSA-08 self calibrating sensor for line following purpose. But the problem with my sensor is it can't distinguish between faint blue color and white color (having RGB values 185, 217, 235). Is there any technique for distinguishing them ?&lt;/p&gt;&#xA;" OwnerUserId="16137" LastActivityDate="2017-10-29T10:37:30.020" Title="issues with LSA-08 line sensor for line tracing" Tags="&lt;line-following&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11665" PostTypeId="2" ParentId="11663" CreationDate="2017-02-20T22:34:43.320" Score="2" Body="&lt;p&gt;&lt;em&gt;Will it cause hardware problems?&lt;/em&gt; Theoretically, no. This is done quite often, so there is no inherent limitation there. If you design the board badly on the other hand, well that's just bad design!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using multiple microcontrollers is a great thing, because it lets you parallelize your tasks and can make life a lot easier on that front. However, with that comes a somewhat more complex firmware as you now need to synchronize the microcontrollers, make them communicate, and handle relevant errors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In short, &lt;em&gt;in general&lt;/em&gt; it's not at all a bad idea to put multiple controllers on the same PCB. Just be sure you understand the implications on your firmware design. Sometimes it may be a lot simpler to use a slightly larger microcontroller.&lt;/p&gt;&#xA;" OwnerUserId="158" LastActivityDate="2017-02-20T22:34:43.320" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11666" PostTypeId="1" CreationDate="2017-02-21T03:48:26.150" Score="0" ViewCount="56" Body="&lt;p&gt;Inspecting the PWM set point mode it seems HSIN2 is the PWM input, and HSIN1 is the PWM direction input.  Is it possible to reverse this, so that it's more consistent with step and direction mode wiring?  I would like HSIN1 as the PWM input, and HSIN2 as the PWM direction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could the function of HSIN1, and HSIN2 be selected in Granity, once the setpoint type is chosen?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most grateful for your help,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mark&lt;/p&gt;&#xA;" OwnerUserId="14696" LastActivityDate="2018-06-02T22:58:29.980" Title="Granite Devices Ioni Pro. PWM set point mode" Tags="&lt;motor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11669" PostTypeId="1" CreationDate="2017-02-21T16:24:50.097" Score="1" ViewCount="87" Body="&lt;p&gt;I've been working on a robot lamp.&#xA;Looking something like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/qA1XJ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qA1XJ.png&quot; alt=&quot;looking something like this&quot;&gt;&lt;/a&gt;&#xA;&lt;br&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So i had a few questions. I've decided to simplify the movements by giving the head a fixed orientation like you see in the picture. The lamp can move around it's own center, but those movements are directly relatable to the X Y Z position of the end effector. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I have understood all I've read correctly, I'll be able to calculate the other angles, which are now all in the same 2d plane, just by using some geometry right? I've worked out these formula's already (haven't tested anything yet). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If i do want the head to also move around the same plane, the calculations would get A LOT harder and more complicated and there would be a lot of possible solutions, is that right? Or is there an easy step to get to this point when i already did it with the fixed orientation? And even if it would be manageable, would it be a good addition? Because I want the lamp to look at you, and the generated angles could make it look in a weird direction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is writing an algorithm the way to go, or would i be better of just hardcoding movements? What would be your tips if you were to make something like this, regarding movement?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank for reading and i hope someone can tell me if i'm on the right track here, thanks.&lt;/p&gt;&#xA;" OwnerUserId="16146" LastEditorUserId="16146" LastEditDate="2017-02-21T16:30:50.470" LastActivityDate="2017-02-21T16:30:50.470" Title="Inverse kinematics for a robot lamp" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;inverse-kinematics&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11674" PostTypeId="1" CreationDate="2017-02-22T01:20:50.793" Score="1" ViewCount="467" Body="&lt;p&gt;This is for a high school project that I'm doing. The sensor should be able to detect the movement of a moving inanimate object and convert into electrical energy, and be fairly cheap to buy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have looked into a few sensors but most of them seem to be geared towards detecting HUMAN movement, eg. PIR sensors. I am looking for the type of sensor that is able to detect non-human movement at close range (about 1/2 metres). Any suggestions? &lt;/p&gt;&#xA;" OwnerUserId="16152" LastActivityDate="2017-08-21T22:01:41.727" Title="Simple sensor to detect motion of inanimate objects" Tags="&lt;sensors&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11675" PostTypeId="2" ParentId="11674" CreationDate="2017-02-22T11:44:28.773" Score="1" Body="&lt;p&gt;There are a range of solutions based on the type of environment you are gonna implement your system;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I will list the possible solutions and the respective best possible implementation conditions.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;You can use IR sensors to detect motion. Given your sensors are setup&#xA;in a controlled environment where the ambient lighting is consistent,&#xA;you can setup IR to read ranges from a given distance. For example&#xA;lets say you object is at 1 m from  the sensor; your MCU can&#xA;constantly read the voltage drop from IR sensor and detect 'motion'&#xA;when there is change in these voltage readings. This only works if&#xA;your sensors are stationary relative to your detecting object. This&#xA;is a very cheap solution. Can easily program using Arduino. You can&#xA;even use code already written from other users.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Using an ultrasound module. This works by sending a 'ping' and&lt;br&gt;&#xA;listens for the echo. Motion can be detected by monitoring the width &#xA;of the 'echo' pulse. This solution doesn't not require a controlled&lt;br&gt;&#xA;lighting environment unlike IR. But on the flip side, ultrasound&lt;br&gt;&#xA;signals are not directional like IR; and hence your system maybe&lt;br&gt;&#xA;prone to noise from other reflected 'echo' pulses off target. But&lt;br&gt;&#xA;this can be implemented successfully by properly thresholding your&lt;br&gt;&#xA;signals. This too can be implemented using Arduino easily. Check PING&#xA;example in Arduino IDE. This requires your system to be stable&lt;br&gt;&#xA;relative to your target.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;As mentioned earlier, camera is another solution. It could&lt;br&gt;&#xA;implemented intelligently regardless whether your system is&lt;br&gt;&#xA;stationery relative to your target. But this requires you to have&lt;br&gt;&#xA;some kind computer vision/programming background. Since you mentioned&#xA;you are from high school, I presume this will be a bit challenging&lt;br&gt;&#xA;for you. But you always try. OpenCV, and Matlab CV toolbox are a good&#xA;starting point. But this solution is relatively expensive. Camera is &#xA;relatively expensive compared to IR and Ultrasound. And if you are&lt;br&gt;&#xA;looking for a embedded solution, you need a much powerful MCU than an&#xA;Arduino to deploy your project.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Cheers and good luck&lt;/p&gt;&#xA;" OwnerUserId="7278" LastActivityDate="2017-02-22T11:44:28.773" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11676" PostTypeId="2" ParentId="7460" CreationDate="2017-02-22T12:07:15.690" Score="-2" Body="&lt;p&gt;Short answer is : it depends.&#xA;Variables such a motors, propellers and body construction are very important. I have been building drones in my garage as a hobby for years. You'd be surprised what difference can propellers make.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since building heavy lift drone can be extremely hard, most of people should be satisfied by buying some &lt;a href=&quot;http://www.dronesglobe.com/guide/heavy-lift-drones/&quot; rel=&quot;nofollow noreferrer&quot;&gt;heavy lift drone&lt;/a&gt;. There are several models available on amazon so it's probably good idea to check what market has to offer.&lt;/p&gt;&#xA;" OwnerUserId="16154" LastActivityDate="2017-02-22T12:07:15.690" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11679" PostTypeId="1" CreationDate="2017-02-22T19:57:47.707" Score="2" ViewCount="5574" Body="&lt;p&gt;I am making a bot with 4 &lt;a href=&quot;https://robu.in/product/planetary-dc-geared-motor-468-rpm-72-6n-cm-24v-encoder/&quot; rel=&quot;nofollow noreferrer&quot;&gt;motors&lt;/a&gt; with a stall current rating of 11.7A. I was using 4 separate &lt;a href=&quot;http://robokits.co.in/motor-drives/dual-dc-motor-driver-20a&quot; rel=&quot;nofollow noreferrer&quot;&gt;motor controllers&lt;/a&gt; which has a peak current rating of 20A to control each motor. But when I gave power to the motors in my bot, the motor drivers blew off within a second. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Was it due to the starting peak current of the motors? If yes, then how can I reduce the starting current? If no, then what could be other possible problems and their corresponding problems?&lt;/p&gt;&#xA;" OwnerUserId="16163" LastActivityDate="2017-02-26T11:51:11.250" Title="How to reduce the DC motor starting current?" Tags="&lt;motor&gt;&lt;driver&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11680" PostTypeId="2" ParentId="10940" CreationDate="2017-02-23T01:36:58.373" Score="1" Body="&lt;p&gt;Yes, you will have saturations on your torque and thrust outputs that you will send to your motors after the mapping. However this will be machine specific and needs to be handled in your code. You may also require saturations to maximum pitch angle as this PD controller will not handle large angles very well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The desired acceleration is a feed forward term carried over from the derivatives of the trajectory that you want to pursue. Yes, you can safely ignore this and still converge to the desired setpoint/trajectory albeit with lower performance. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should re-tune your gains and add the correct saturations so that your simulation makes sense physically. And make sure that you use a complementary filter to estimate your orientation as simply integrating the gyroscope rates will cause drift in your states. Despite this you will find it hard to control a quadrotor with just PD as you may have model uncertainties and disturbances. Some &lt;a href=&quot;https://arxiv.org/abs/1003.2005v1&quot; rel=&quot;nofollow noreferrer&quot;&gt;researchers&lt;/a&gt; have developed controllers which map your angle errors in SO(3) preventing singularities and allowing you to reach the harder orientations.&lt;/p&gt;&#xA;" OwnerUserId="16167" LastActivityDate="2017-02-23T01:36:58.373" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11681" PostTypeId="2" ParentId="11634" CreationDate="2017-02-23T02:05:19.930" Score="1" Body="&lt;p&gt;Appending to @WalterJ's answer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Linear and nonlinear systems which form the basis for subjects like optimal control theory have rigorous math fundamentals which allow you to analyze ODEs without actually solving them and mathematically prove whether is system is stable, how fast your convergence will be or define a safe operating region. This makes representing systems as ODEs very useful in control systems. ODE representation also makes it clear how your states (eg: position, velocity, acceleration for cars) interact with each other (is there any coupling between the states?). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Coming back to optimal control, the cost functional is expressed as functions of your states and/or control inputs. Say you want to minimize distance, your cost functional will be the integral over the velocity for all time. As you expressed your system as an ODE, you already have access to this expression. &lt;/p&gt;&#xA;" OwnerUserId="16167" LastActivityDate="2017-02-23T02:05:19.930" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11682" PostTypeId="2" ParentId="11679" CreationDate="2017-02-23T03:48:23.707" Score="0" Body="&lt;p&gt;Could be the starting current, try adding an inductance in series with the motor that will limit the rate of the current change. Once the motor starts spinning the current will stabilize. This will however make your motor more inert (respond slower to the change of the supplied voltage).&lt;/p&gt;&#xA;" OwnerUserId="4017" LastActivityDate="2017-02-23T03:48:23.707" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11683" PostTypeId="1" CreationDate="2017-02-23T05:01:29.573" Score="4" ViewCount="124" Body="&lt;p&gt;For stereo cameras on the market, two cameras are always mounted side by side and with a displacement that is perpendicular to the cameras’ optical axes. I take this setup for granted. One idea came to my mind whether this is necessary? If two cameras are not parallel and have different focal length, camera calibration can correct the difference. Why are two cameras mounted in parallel? My guess is that two cameras can have a large overlapping region. Am I correct?&lt;/p&gt;&#xA;" OwnerUserId="15460" LastActivityDate="2018-08-23T01:50:01.820" Title="Why are two cameras mounted in paralle in stereo application?" Tags="&lt;cameras&gt;&lt;stereo-vision&gt;&lt;calibration&gt;&lt;3d-reconstruction&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11684" PostTypeId="2" ParentId="11683" CreationDate="2017-02-23T10:44:46.790" Score="4" Body="&lt;p&gt;Each camera needs to be defined by 6 variables (3 position, 3 orientation). This would mean that during the calibration process, a solver needs to find 12 variables. As this is done usually with an nonlinear optimization process, the solutions are quite sensitive to the initial guess. By making them parallel and giving them a fixed width, you can give the solver a much nicer initial guess (which can converge to the correct solution). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Aside from this of course, we do get large overlapping areas which become important when creating depth maps.&lt;/p&gt;&#xA;" OwnerUserId="16167" LastEditorUserId="16167" LastEditDate="2017-02-23T14:52:50.330" LastActivityDate="2017-02-23T14:52:50.330" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="11685" PostTypeId="1" AcceptedAnswerId="11687" CreationDate="2017-02-23T11:46:48.183" Score="1" ViewCount="160" Body="&lt;p&gt;When using Hidden Markov Models in Global Localization problems on the prediction step there is a need to calculate the probability of robot's pose given the actions (control &lt;em&gt;u&lt;/em&gt;, odometry):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;p(Xt|Xt−1, Ut−1)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where xt-1 and ut-1 are the robot's previous pose and control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are different tutorials (this &lt;a href=&quot;http://www1.cs.columbia.edu/~allen/F15/NOTES/localization_1_to_4.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;one&lt;/a&gt; for instance) and articles on the web with the examples, but most of these examples are for the 1D localization problem where action simply equals to 1 if the odometry is perfect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What if I am considering 2D space?&#xA;For example in 1D example for time step T=1 I would compute like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;p(Xt = 2 | Xt-1 = 1, Ut = 1) = 1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;How should I do the computations for 2D case?&lt;/p&gt;&#xA;" OwnerUserId="14864" LastActivityDate="2017-02-23T16:58:30.423" Title="Markov Localization using control as an input" Tags="&lt;localization&gt;&lt;odometry&gt;&lt;probability&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11687" PostTypeId="2" ParentId="11685" CreationDate="2017-02-23T16:58:30.423" Score="2" Body="&lt;h2&gt;Multi-dimensional models&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;In the 2D case, $x_t$ is a vector with two components (e.g. position in $x$, $y$), but why stop at 2D? Often, the state vector $x_t$ will have your position in two or three dimensions, in addition to velocity and acceleration. Oftentimes we also include angular state in $x_t$ such as the heading and angular rate of change. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your control is also often multi-dimensional, for example if you have a wheeled robot it could be the velocity of the left and right wheels. &lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Linear case (Kalman filter!)&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Typically we have a model that maps the previous state and control actions to a new state and control action. In the linear, time invariant case, we have matrices $A$ and $B$, and &#xA;$$x_t = A x_{t-1} + B u_t $$&#xA;in this setting we would probably use a &lt;a href=&quot;http://www.cs.unc.edu/~welch/kalman/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Kalman filter&lt;/a&gt; to keep track of our belief about the distribution of $x_t$.  The Kalman filter is nice because it gives a closed form solution to the estimation problem which is correct if noise/uncertainty is Gaussian. &lt;/p&gt;&#xA;&#xA;&lt;h2&gt;More general models&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The markov approach (as I understand it) let's us move past these assumptions (linearity and Gaussian noise) by using approximation methods such as particle filters to estimate the belief distribution of our state $x_t$. The markov assumption is saying that we only need the distribution of $x_t$ (and don't need to use the distribution of $x_{t-1},x_{t-2},\dots$) when computing the distribution of $x_{t+1}$. I think the figure on slide 30 of the link you posted illustrates this quite well. &lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Discrete (small) state space&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;As for your last question about how to find your belief: it depends on your application. If your state/controls are discrete, and you don't have very many of them, you can explicitly write down all of the transition probabilities $p(x_t \mid x_{t-1}, u_t)$ for every possible $x_t$, $x_{t-1}$ and $u_t$. Then when you do your estimation, you just look up the appropriate value. &lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Further reading&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Typically states are continuous, or there are too many to compute/store every possible transition.  If you're just getting started in this, try a Kalman filter and see how that works for you (there are many tutorials on them). If you want to see what else is out there, I recommend the &lt;a href=&quot;http://www.probabilistic-robotics.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Probabilistic Robotics&lt;/a&gt; book, which gives a still quite good overview of different approaches (including Kalman filters) for this localization problem. &lt;/p&gt;&#xA;" OwnerUserId="16134" LastActivityDate="2017-02-23T16:58:30.423" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11688" PostTypeId="2" ParentId="2556" CreationDate="2017-02-23T17:18:30.383" Score="0" Body="&lt;p&gt;Very intuitive explanation with geometric interpretation for covariance and its decomposition. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.visiondummy.com/2014/04/geometric-interpretation-covariance-matrix/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.visiondummy.com/2014/04/geometric-interpretation-covariance-matrix/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="16176" LastActivityDate="2017-02-23T17:18:30.383" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11689" PostTypeId="1" CreationDate="2017-02-23T21:13:54.910" Score="0" ViewCount="795" Body="&lt;p&gt;I am looking for a high speed usb webcam.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The plan is to rotate the camera at about 20-30 revolutions per second, the problem is this requires me to have a framerate of about 120fps (depending on the lense...) and secondary the exposure time needs to be really short for the image not to be blurred (and still have a decent quality).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the moment i am using a 120fps USB-Webcam by ELP but the results are not satisfiying (the image is used by a computer-vision algorithm which needs a more or less sharp image).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any camera available which can achieve the desired results (and is quite small and lightweight). Money is not our primary concern.&lt;/p&gt;&#xA;" OwnerUserId="16181" LastActivityDate="2017-02-25T20:34:55.480" Title="High speed usb webcam" Tags="&lt;cameras&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11690" PostTypeId="2" ParentId="11689" CreationDate="2017-02-23T21:31:00.647" Score="0" Body="&lt;p&gt;I would contact the professional computer vision folks, such as Cognex, and maybe National Instruments.  Your camera requirements are quite challenging for off-the-shelf USB cameras which are not designed to support high-speed automation.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2017-02-23T21:31:00.647" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11691" PostTypeId="2" ParentId="11625" CreationDate="2017-02-23T22:54:05.913" Score="0" Body="&lt;p&gt;&lt;a href=&quot;http://www.me.berkeley.edu/~frborrel/pub.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;MPC lab&lt;/a&gt; from Berkeley uses about 50-100 Hz. Although, I think it might be closer to 500Hz-1kHz for the low-level control (motor speeds etc.) implementations (this is close to the rates at which you control quadrotors as well) - I will post links here if I come across any publications that use a faster update rate.&lt;/p&gt;&#xA;" OwnerUserId="16167" LastActivityDate="2017-02-23T22:54:05.913" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11692" PostTypeId="2" ParentId="11604" CreationDate="2017-02-24T01:52:30.917" Score="0" Body="&lt;p&gt;Both questions come down to stability. However the a long finite horizon does still not guarantee stability, so often a base policy is assumed afterwards, which is not computationally expensive and can be calculated for an infinite horizon.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;For example if you have a mass (of 1 kg) on a fiction less finite surface to which you can apply a force $u$ (in Newtons), so the system can be simply modeled as,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{bmatrix}&#xA;\dot{x} \\ \ddot{x}&#xA;\end{bmatrix} = &#xA;\begin{bmatrix}&#xA;0 &amp;amp; 1 \\ 0 &amp;amp; 0&#xA;\end{bmatrix}&#xA;\begin{bmatrix}&#xA;x \\ \dot{x}&#xA;\end{bmatrix} + &#xA;\begin{bmatrix}&#xA;0 \\ 1&#xA;\end{bmatrix} u. \tag{1}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are also constraints to this system. Namely, &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\left\{\begin{matrix} -1&amp;lt;u&amp;lt;\frac12 \\ -0.1&amp;lt;x&amp;lt;1.1\end{matrix}\right. \tag{2}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Usually for MPC a discrete model is considered. Using a sampling time of 1 second and zero order hold for $u$, then the given continues time model can be converted into the following discrete time model,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{bmatrix}&#xA;x_{k+1} \\ \dot{x}_{k+1}&#xA;\end{bmatrix} = &#xA;\begin{bmatrix}&#xA;1 &amp;amp; 1 \\ 0 &amp;amp; 1&#xA;\end{bmatrix}&#xA;\begin{bmatrix}&#xA;x_{k} \\ \dot{x}_{k}&#xA;\end{bmatrix} + &#xA;\begin{bmatrix}&#xA;0.5 \\ 1&#xA;\end{bmatrix} u_{k}. \tag{3}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We want to use MPC to find a sequence $\mathbb{u}=\{u_0,u_1,\cdots,u_{N-1}\}$ which minimizes,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\min_\mathbb{u}\sum_{k=0}^N x_{k}^2, \tag{4}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;subjected to $(2)$ and $(3)$. So $x_k$ should be steered towards zero.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The initial condition is given to be $x_0=1$ and $\dot{x}_0 = 0$. If the horizon would be taken to be one, so $N=1$, then solving $(4)$ would yield $u_0=-1$. The state of the system after this input would be $x_1=0.5$ and $\dot{x}_1=-1$. But for the next time step it is not possible to apply a suitable control input, which satisfies the first half of $(2)$ such that the position constraint from $(2)$ will still be met the next time step. Namely applying $u_1=0.5$ would still yield $x_2 = -0.25$ and $\dot{x}_2=-0.5$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you need a longer horizon in order to find a $u$ which guarantees that $(2)$ will always be satisfied. When initially neglecting the input constraint and solving $(4)$ for $u_k$ and then saturating the applied input afterwards nullifies the entire remainder of the calculated inputs/states. So nothing can be said based on this applied input about whether system would ever violate $(2)$. For this system this might never be the case, but if you would for example have time dependent inequality constraints then this system might become unstable when neglecting the constraint on $u$ when solving $(4)$.&lt;/p&gt;&#xA;" OwnerUserId="1487" LastActivityDate="2017-02-24T01:52:30.917" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11695" PostTypeId="1" CreationDate="2017-02-24T09:33:47.287" Score="0" ViewCount="428" Body="&lt;p&gt;'m trying to detect all the post-it in an image and get them into an arrayList. I tried many alternatives (removing backgroud -&amp;gt; detecting contours, haar Cascade&#xA;classifier, detecting rectangular objects...) but none of them gave me good results. &lt;a href=&quot;https://i.stack.imgur.com/m29Pz.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/m29Pz.jpg&quot; alt=&quot;this is an example of input image.&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Any Idea how to proceed? Any help will be appreciated.&lt;/p&gt;&#xA;" OwnerUserId="16186" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2017-02-27T16:04:34.343" Title="detect post-it from an image of a visual management Board" Tags="&lt;computer-vision&gt;&lt;opencv&gt;" AnswerCount="1" CommentCount="6" ClosedDate="2017-03-02T11:01:26.857" ContentLicense="CC BY-SA 3.0" />
  <row Id="11696" PostTypeId="1" CreationDate="2017-02-24T09:53:04.670" Score="1" ViewCount="32" Body="&lt;p&gt;I build 3d models using Agisoft and need to record the position of the Ground Control Points as accurately as possible, latitude , longitude and altitude. What is the best way of doing this?&lt;/p&gt;&#xA;" OwnerUserId="16187" LastActivityDate="2017-02-24T15:39:57.600" Title="Recording GPS position" Tags="&lt;quadcopter&gt;&lt;gps&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2017-02-27T13:06:37.340" ContentLicense="CC BY-SA 3.0" />
  <row Id="11700" PostTypeId="2" ParentId="11696" CreationDate="2017-02-24T15:39:57.600" Score="1" Body="&lt;p&gt;The most accurate position is probably calculated by using a sensor-fusion algorithm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As sensors you can use:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;GPS for absolute (but relatively inprecise position)&lt;/li&gt;&#xA;&lt;li&gt;Distance sensors (either via triangulation with multiple ground stations or via a SLAM algorithm)&lt;/li&gt;&#xA;&lt;li&gt;Odometric data from your quadrocopter (motor power)&lt;/li&gt;&#xA;&lt;li&gt;Acceleration (lot's of drift over time but precise for a short time)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This sensor data can be fused used something like a Kalman-Filter.&lt;/p&gt;&#xA;" OwnerUserId="16181" LastActivityDate="2017-02-24T15:39:57.600" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11702" PostTypeId="2" ParentId="11695" CreationDate="2017-02-25T14:44:12.827" Score="1" Body="&lt;p&gt;As HighVoltage already suggested this should be an easy task using the HSV spectrum.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your code could look something like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;// img is a Mat containing your image&#xA;&#xA;// Convert your image into HSV&#xA;Mat imgHSV = img.clone();&#xA;cvtColor(img, imgHSV, CV_BGR2HSV);&#xA;&#xA;// Blur to reduce noise&#xA;blur(imgHSV, imgHSV, Size(3,3), Point(-1,-1));&#xA;&#xA;// Threshold image to only accept a certain saturation&#xA;inRange(imgHSV, Scalar(0, 127, 0), Scalar(255, 255, 255)), imgHSV);&#xA;&#xA;// If you have to much noise you can erode and dilate at this point&#xA;&#xA;// Find contours in your image&#xA;vector&amp;lt;vector&amp;lt;Point&amp;gt; &amp;gt; contours;&#xA;vector&amp;lt;Vec4i&amp;gt; hierarchy;&#xA;findContours(imgHSV, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0));&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The contours contain a list of a list of points, each inner list represents the contour of one object. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can for example use contourArea(contour[n]) to get the area of the nth contour.&lt;/p&gt;&#xA;" OwnerUserId="16181" LastActivityDate="2017-02-25T14:44:12.827" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11703" PostTypeId="1" CreationDate="2017-02-25T20:15:37.880" Score="2" ViewCount="1409" Body="&lt;p&gt;I am planning to build robot like irobot Roomba. So cleaning in a spiral pattern is required like the image shown starting from the center:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/yUkB1.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/yUkB1.jpg&quot; alt=&quot;Spiral&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This code is part of my full code which doesn't give me spiral pattern:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void spiralling() {&#xA;  for(int i=0;i&amp;lt;=2;i++) {&#xA;    digitalWrite(motor1,HIGH);&#xA;    digitalWrite(motor2,LOW);&#xA;    digitalWrite(motor3,HIGH);&#xA;    digitalWrite(motor4,LOW);&#xA;    analogWrite(pwm1,180);&#xA;    analogWrite(pwm2,80);&#xA;    delay(300);&#xA;    p=1;&#xA;  }&#xA;  analogWrite(pwm2,250); &#xA;  delay(150); &#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So my question is how can I make my bot trace &lt;strong&gt;spiral pattern&lt;/strong&gt; (algorithm?,Logic? to use), as the only way to change the direction is with two wheels on sides.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any code which constantly increases the radius of bot movement from center to radially outwards?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My robot has arduino uno ,l293d motordriver,two geared motors on either sides as shown in image and castor wheel in front:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/yWwLz.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/yWwLz.jpg&quot; alt=&quot;My robot has arduino uno ,l293d motordriver,two geared motors on either sides as shown in image and castor wheel in front&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11448" LastEditorUserId="37" LastEditDate="2017-02-27T12:41:45.760" LastActivityDate="2017-05-02T21:33:16.937" Title="Arduino robot to move spirally" Tags="&lt;arduino&gt;&lt;wheeled-robot&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11704" PostTypeId="1" AcceptedAnswerId="11709" CreationDate="2017-02-25T20:17:45.803" Score="0" ViewCount="1942" Body="&lt;p&gt;What exactly does a  motor driver do? Why do we need an additional power supply for motors? I'm a hobbyist and making a line follower from scratch.&lt;/p&gt;&#xA;" OwnerUserId="16209" LastEditorUserId="19515" LastEditDate="2020-07-25T00:36:34.907" LastActivityDate="2020-07-25T00:36:34.907" Title="What exactly does a motor driver do? Why do we need an additional power supply for motors?" Tags="&lt;arduino&gt;&lt;motor&gt;&lt;servomotor&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11705" PostTypeId="2" ParentId="11689" CreationDate="2017-02-25T20:34:55.480" Score="1" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/peQXq.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/peQXq.jpg&quot; alt=&quot;With a 1.4 gigapixel-per-second throughput, you can capture stunning high-speed video at up to 1280x1024 resolution. Frame rate ranges from 1,057fps at full resolution, up to 21,500fps at minimum resolution.​ but the price is bit absurd.&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/6Hcdr.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6Hcdr.jpg&quot; alt=&quot;These are the frame rates&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With a 1.4 gigapixel-per-second throughput, you can capture stunning high-speed video at up to 1280x1024 resolution. Frame rate ranges from 1,057fps at full resolution, up to 21,500fps at minimum resolution.​ but the price is bit absurd.&#xA;I guess this will do.&lt;/p&gt;&#xA;" OwnerUserId="16209" LastActivityDate="2017-02-25T20:34:55.480" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11707" PostTypeId="1" CreationDate="2017-02-26T00:01:22.427" Score="0" ViewCount="113" Body="&lt;p&gt;I am trying to help my son program his robot using RobitC graphical. He has it doing most of what he wants it to do but the code is stuck and won't continue past the arm raise/ hold. What it is supposed to be doing at the point where it gets stuck is raise the arms (to lift an object) Hold the arms up while reversing Turn 90 degrees Reverse (This is as far as he's created as he realized it isn't working) Turn 90 degrees Reverse to the basket and raise the arms again&lt;/p&gt;&#xA;&#xA;&lt;p&gt;His code is trying to say to hold the arms up until he creates a new set point&lt;/p&gt;&#xA;&#xA;&lt;p&gt;He has tried both of these codes&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know it says (left drive) instead of (arm) on one bit that was corrected and still doesn't work correctly&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was asked in the comments on my other question to post which line it fails. I believe it fails at 18. The arms stay up but the bot does not continue the program (reverse). I could not respond in the comments as I do not have a high enough rating. &lt;img src=&quot;https://i.stack.imgur.com/qYk5z.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hGfzZ.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="16200" LastActivityDate="2018-02-21T17:50:05.907" Title="RobotC graphical raise arms while reversing" Tags="&lt;mobile-robot&gt;&lt;robotic-arm&gt;&lt;programming-languages&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11708" PostTypeId="2" ParentId="11704" CreationDate="2017-02-26T04:11:54.057" Score="0" Body="&lt;p&gt;At a high level, a motor driver takes a &quot;logic-level&quot; input (desired &quot;effort&quot;) and delivers a corresponding &quot;high-side&quot; output to the motor. Exactly what is inside the motor driver depends on the motor and driver (for example brushed and brushless motors are driven very differently).  Larger motors like the ones in quadcopters or higher end remote control cars tend to be &lt;a href=&quot;https://en.wikipedia.org/wiki/Brushless_DC_electric_motor&quot; rel=&quot;nofollow noreferrer&quot;&gt;brushless motors&lt;/a&gt;, which are driven using carefully offset sinusoidal inputs (very roughly speaking).  A smaller line-follower robot will typically use a &lt;a href=&quot;https://en.wikipedia.org/wiki/Brushed_DC_electric_motor&quot; rel=&quot;nofollow noreferrer&quot;&gt;brushed motor&lt;/a&gt;, which can be controlled using simpler circuits such as an &lt;a href=&quot;https://en.wikipedia.org/wiki/H_bridge&quot; rel=&quot;nofollow noreferrer&quot;&gt;H-bridge&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are several reasons to &quot;isolate&quot; the motor and control power supplies.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Motors have a lot of electrical &quot;inertia&quot; (inductance) which translates into a lot of electrical noise pushed back into the power supply. Microcontrollers are built assuming that the input supply is reasonably &quot;clean&quot;, and this noise can reset your control circuitry (best case), or burn out internal components (worst-case). &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Motors often have higher voltage and current requirements than control circuitry. For example the digital outputs of an aruino can put out around 100mA at 5 volts (which &lt;em&gt;might&lt;/em&gt; be enough for a small line follower). A brushless motor used on a small fixed wing aircraft such as the Zephyr II can draw 100 amps at 12 volts.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Note that you do not &lt;em&gt;need&lt;/em&gt; a separate battery for the controls and motor power, but you &lt;em&gt;should&lt;/em&gt; have separate circuitry which &quot;cleans&quot; the raw battery voltage (such as an &lt;a href=&quot;https://en.wikipedia.org/wiki/Low-dropout_regulator&quot; rel=&quot;nofollow noreferrer&quot;&gt;LDO&lt;/a&gt; or &lt;a href=&quot;https://en.wikipedia.org/wiki/Buck_converter&quot; rel=&quot;nofollow noreferrer&quot;&gt;buck converter&lt;/a&gt;) before sending it to the control circuitry.&lt;/p&gt;&#xA;" OwnerUserId="16134" LastActivityDate="2017-02-26T04:11:54.057" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11709" PostTypeId="2" ParentId="11704" CreationDate="2017-02-26T04:13:24.313" Score="0" Body="&lt;p&gt;If a DC motor is being connected to something like a microcontroller's I/O, the I/O pins usually are only capable of supplying currents in the order of mA. Motors need much higher current to actuate themselves, so typically a motor driver is used. A motor driver is merely a current amplifier, even a push-pull transistor pair can be used to achieve that. Another function that motor drivers commonly perform is to isolate low power electronics from the high power supply that usually runs a motor. A more commonly used implementation is called an H-bridge: &lt;a href=&quot;https://en.wikipedia.org/wiki/H_bridge&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/H_bridge&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're talking about stepper motors though, this becomes a more complicated process. Stepper motor operation involves attraction between rotor and stator magnets, and a reversal of stator poles is one of the things that takes place. But the motor winding, being a coil, usually has its own inductance, and high drive voltages are necessary to overcome this inductance and cause the reversal. Hence, stepper motor driver circuits are usually more complicated, which are responsible for both generating high voltages and also controlling current to each winding, making sure it doesn't exceed a certain value etc. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So mainly, any motor usually needs a driver circuit because its voltage/current requirements are different from the device that's trying to control it. &lt;/p&gt;&#xA;" OwnerUserId="10310" LastActivityDate="2017-02-26T04:13:24.313" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11710" PostTypeId="2" ParentId="11704" CreationDate="2017-02-26T06:56:11.787" Score="0" Body="&lt;p&gt;Main work of motor driver is to supply power to motor from external source by taking inputs from logics from microcontroller because microcontroller output will be in milliamps.Another use is to change the direction of rotation of motor &lt;/p&gt;&#xA;" OwnerUserId="11448" LastActivityDate="2017-02-26T06:56:11.787" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11711" PostTypeId="2" ParentId="11679" CreationDate="2017-02-26T07:13:00.523" Score="1" Body="&lt;p&gt;DC motor draw more current initially because when motor is in normal speed it creates back emf which reduces drawing current .So initially when DC motor is powered there is no back emf so current drawn is more.&#xA;Solution a capacitor in parallel to DC motor which will provide more current from its reservoir when motor is initially powered....&lt;/p&gt;&#xA;" OwnerUserId="11448" LastActivityDate="2017-02-26T07:13:00.523" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11712" PostTypeId="2" ParentId="11707" CreationDate="2017-02-26T09:12:40.063" Score="1" Body="&lt;p&gt;In both of the pictures, line 19 has a &quot;wait&quot; command. The execution of the program will progress past this line when the condition in the parenthesis has been met.  You mentioned, that you have changed Ldrive to Larm and Rdrive to Rarm, however the motor brakes for these motors are set only after line 19. The command at line 19 is waiting for the brakes to be active, but there has been no command issued which would activate the brakes. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would suggest that you try moving the set brake commands for the Larm and Rarm before the waituntil command. &lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2017-02-26T09:12:40.063" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11713" PostTypeId="2" ParentId="11679" CreationDate="2017-02-26T11:51:11.250" Score="1" Body="&lt;p&gt;Motors when starting can draw ca. 10x their nominal current. You mentioned that you have a driver attached to the motor. Do you use PWM to control the motor? A soft start when the motor is accelerated in a controlled manner to the required velocity helps limiting this initial large current. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When starting the motor, instead of just setting the required pin to 1, use the PWM function and increase the duty cycle of the PWM slowly (from 0 to 100% min ca. 1-2 seconds). That should reduced the current and make the motor accelerate smoothly to its maximum velocity. You can find a tutorial &lt;a href=&quot;http://www.circuitstoday.com/pwm-generation-and-control-using-arduino&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;, &lt;a href=&quot;https://www.arduino.cc/en/Tutorial/SecretsOfArduinoPWM&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;https://circuitdigest.com/microcontroller-projects/dc-motor-control-with-arduino-uno-pwm&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As the other answers suggested, adding a capacitor can help, but this is a hardware solution, and I would suggest a software approach. The driver you are using seems to already have capacitors.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2017-02-26T11:51:11.250" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11715" PostTypeId="1" AcceptedAnswerId="11723" CreationDate="2017-02-27T02:37:25.983" Score="2" ViewCount="440" Body="&lt;p&gt;I am having a hard time understanding how to relate forward kinematics to things one can control in a robot like PWM and reading encoder values.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, how to relate the encoder values from motors and RPM to PWM values of the motors to make a robot follow a curved path?&lt;/p&gt;&#xA;" OwnerUserId="16196" LastActivityDate="2017-02-27T17:56:40.573" Title="How to relate forward kinematics into PWM/speed?" Tags="&lt;motion&gt;&lt;forward-kinematics&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="11716" PostTypeId="1" CreationDate="2017-02-27T08:21:07.100" Score="1" ViewCount="873" Body="&lt;p&gt;I'm using simulink to get joints torque by giving motion input. I create very simple CAD model in solidworks to learn simulink. Simulink model is showing in below figure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/GuOb7.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/GuOb7.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;During update it shows no error but when I Run it shows error as&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/pQsFq.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/pQsFq.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3D-CAD model is shown below figure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/JDsDK.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JDsDK.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anybody help me to solve this problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="14024" LastActivityDate="2017-02-27T08:21:07.100" Title="Matlab Simulink showing following errror: kinematic constraints cannot be maintained" Tags="&lt;robotic-arm&gt;&lt;matlab&gt;&lt;simulation&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="11721" PostTypeId="1" AcceptedAnswerId="11731" CreationDate="2017-02-27T16:18:37.097" Score="5" ViewCount="6081" Body="&lt;p&gt;I am struggling to find any clear documentation on how to create MAVlink commands using python.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am looking to create an autonomous glider and require some of the basic functions&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Retrieve GPS Data and store into a file&lt;/li&gt;&#xA;&lt;li&gt;Import GPS data in Python function&lt;/li&gt;&#xA;&lt;li&gt;Send waypoint lat, long, alt to the autopilot (APM)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I am currently using MAVProxy as my GCS and the ErleBrain 3 as my autopilot hardware but the aim is to not require a GCS and just have a python script to automatically add and remove waypoints based on the received GPS data&lt;/p&gt;&#xA;" OwnerUserId="16233" LastEditorUserId="7066" LastEditDate="2017-02-28T21:21:24.183" LastActivityDate="2017-03-02T15:18:12.627" Title="Creating MAVLink commands from python" Tags="&lt;python&gt;&lt;ardupilot&gt;&lt;mavlink&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11722" PostTypeId="2" ParentId="11715" CreationDate="2017-02-27T16:41:10.750" Score="1" Body="&lt;p&gt;Usually you do this by implementing a feedback-loop.&lt;/p&gt;&#xA;&lt;h2&gt;Theory&lt;/h2&gt;&#xA;&lt;p&gt;By generating a PWM Signal you are (over time average) generating a voltage at your motor. As a approximitation the voltage is proportional to the speed of the motor (this could be redefined by measuring the relationship between voltage and speed).&lt;/p&gt;&#xA;&lt;p&gt;This could be decribed by:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://latex.codecogs.com/gif.latex?r(p)&amp;space;=&amp;space;r_%7Bmax%7D&amp;space;%5Ccdot&amp;space;%5Cfrac%7Bp%7D%7Bp_%7Bmax%7D%7D&quot; title=&quot;r(p) = r_{max} \cdot \frac{p}{p_{max}}&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;where r is the rotation as a function of the duty-cycle p.&lt;/p&gt;&#xA;&lt;p&gt;Now you know which rotation your motor should have. Now you can implement a feedback loop, you know how fast your motor is running and how fast your motor is actually running so you can define delta r:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://latex.codecogs.com/gif.latex?%5Cdelta_r&amp;space;=&amp;space;r(p)&amp;space;-&amp;space;r_%7Bmeasured%7D&quot; title=&quot;\delta_r = r(p) - r_{measured}&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;This delta r can be used to implement a PID Controller so your motor always rotates at the speed it should. The power P of your PID controller is defined by (the three constant P,I,D are device dependent):&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://latex.codecogs.com/gif.latex?P_%7BMotor%7D(%5Cdelta_r)=P_%7Bconstant%7D&amp;space;%5Ccdot&amp;space;%5Cdelta_r&amp;space;&amp;plus;&amp;space;I_%7Bconstant%7D&amp;space;%5Ccdot&amp;space;%5Cint_%7B0%7D%5Et&amp;space;%5Cdelta_r&amp;space;%5Ctext%7B&amp;space;d%7Dt&amp;space;&amp;plus;&amp;space;D_%7Bconstant%7D&amp;space;%5Ccdot&amp;space;%5Cfrac%7B%5Ctext%7Bd%7D%5Cdelta_r%7D%7B%5Ctext%7Bd%7Dt%7D&quot; title=&quot;P_{Motor}(\delta_r)=P_{constant} \cdot \delta_r + I_{constant} \cdot \int_{0}^t \delta_r \text{ d}t + D_{constant} \cdot \frac{\text{d}\delta_r}{\text{d}t}&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;With a good setup your motor rotates now more or less always at the exact speed it should. The distance s your robots travells over time is now given by:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://latex.codecogs.com/gif.latex?s(t)&amp;space;=&amp;space;%5Cint_%7B0%7D%5Et&amp;space;r(p(t))&amp;space;%5Ctext%7Bd%7Dt&quot; title=&quot;s(t) = \int_{0}^t r(p(t)) \text{d}t&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;with p(t) beeing the power as a function of time.&lt;/p&gt;&#xA;&lt;h2&gt;Implementation&lt;/h2&gt;&#xA;&lt;p&gt;In this example motorPower(int16_t power) is a function which controls the motor with a power between -255 and 255. This function does not reads the current motor speed. The function currMotorSpeed() returns the current speed of the motor, for simplicity reasons also a value between -255 and 255. The constant dt is the time between each execution of the PID controller.&lt;/p&gt;&#xA;&lt;p&gt;Implementation in C++:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;// PID Controll for the motor&#xA;int16_t motorPowerControlled(int16_t motorPower){&#xA;    static int iArea, dLastValue;&#xA;    int16_t deltaPower = currMotorSpeed() - motorPower;&#xA;&#xA;    int16_t pValue = deltaPower * P_CONSTANT&#xA;&#xA;    iArea += deltaPower;&#xA;    int16_t iValue = iArea * dT * I_CONSTANT&#xA;&#xA;    int16_t dValue = (deltaPower-dLastValue)/dt * D_FACTOR;&#xA;    dLastValue = deltaPower;&#xA;&#xA;    return pValue + iValue + dValue;&#xA;}&#xA;&#xA;&#xA;int main(void){&#xA;    int16_t distanceDriven = 0;&#xA;    const int16_t POWER = 100;&#xA;&#xA;    while(true){&#xA;        motorPowerController(POWER);&#xA;        distanceDriven += POWER * dt;&#xA;        delay_ms(dt);&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="16181" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2017-02-27T16:41:10.750" CommentCount="1" CommunityOwnedDate="2017-02-27T16:41:10.750" ContentLicense="CC BY-SA 3.0" />
  <row Id="11723" PostTypeId="2" ParentId="11715" CreationDate="2017-02-27T17:56:40.573" Score="1" Body="&lt;p&gt;Forward kinematics is used to compute the pose (position and orientation) the end-effector of a robot from the joint angles. Simialry, higher order forward kineamtics can be defined to calcualte the velocities of the end-effector from the volocities (and angular positions) of the joints. The same can be done for accelerations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Inverse kinematics represents the same transformation  but in a reversed direction. It is used to calculate the joint angles from the end-effectro pose. Simialry, higher order inverse kinematics can be defined for calculating joint velocities from end-effectro velocities (and pose). The same can be done for accelerations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A curve is given in Cartesian space as a string of points. For each point the inverse kinematics problem can be solved, and so, a string of points in joint space can be computed. This string of points will consist of joint angle coordinates. If the joints are set to thee values, one after another, the end-effectro will describe the given path. Please be advised, that the points have to be close to one another. The closer they are, the more precise the curve will be. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The motors of all joints have to be commanded to turn in the positive or negative direction in order to reach the desired point. This is what the PID controller does. It gets the reference value (the desired angle) and then calculates the PWM duty cycle toe make the motor move. The PWM duty cycle, as a simplistic explanation, is proportional to the maximum speed of the motor. 100% duty cycle will turin the motor with full speed, 50% will turin the motor with half speed. The PID Controller calcultes the PWM duty cycle based on how far the desired point is from the current point. If far, high speeds will be reached, if it is near, only slow speed will be necesary. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, if you want to make the robot follow a path, a simplisic approach is to:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Define the curve in cartesian space a string of points&lt;/li&gt;&#xA;&lt;li&gt;Compute the joint coordinates of the robot for each point&lt;/li&gt;&#xA;&lt;li&gt;Select the First point in the list&lt;/li&gt;&#xA;&lt;li&gt;Command the motors of the robot to turn to the selected point&lt;/li&gt;&#xA;&lt;li&gt;Wait for the robot to arrive&lt;/li&gt;&#xA;&lt;li&gt;If there are point left in the list select the next point in the list and go to 3 if not end&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;A more advancced appraoch would need also velocity information from the Cartesian Space and would transfomr those velocitey to joint space and not just set motor positions but also motor velocities to generate a smoother motion. &lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2017-02-27T17:56:40.573" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11724" PostTypeId="1" AcceptedAnswerId="11745" CreationDate="2017-02-27T19:22:11.803" Score="1" ViewCount="627" Body="&lt;p&gt;I bought a little toy helicopter, namely the Revell Control 23982. After flying a few batteries I was wondering whether I could hack it in such a way, that my Arduino Uno can control/manipulate the signals from the transmitter to the receiver on board. However, to me it seems like I have big trouble getting started on the right path.&#xA;Can anyone spot out my mistakes?&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Hardware hack&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;My first attempt was to bridge the potentiometers in the transmitter with the Arduino, this did not work at all. I think this is because the Arduino is using PWM and no true DC. Also I do not understand how the potentiometer (shown in the picture) works, where two of the three terminals are connected to each other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/4dLuU.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4dLuU.jpg&quot; alt=&quot;Bottom side of PCB&quot;&gt;&lt;/a&gt;&lt;br&gt;&#xA;NOTE: The soldered cable is a result of some unsuccessful hardware soldering.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;EDIT&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Here is further information according to @combos comment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/P3hZO.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/P3hZO.png&quot; alt=&quot;Excerpt&quot;&gt;&lt;/a&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;NOTE: The diagram is missing a connection between the line that connects all potentiometers and a 3v pin on the IC. Sorry for that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a simple excerpt of the actual PCB, however, it should be the one which is important for my question. It is true that two terminals of the potentiometers are connected, and all the potentiometers are additionally soldered to ground via their housing. I was not able to find any information about the IC labelled &quot;???&quot;. It contains the transmitter, that is clear.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A test with my multi-meter showed, that there is a maximum current flow of three volts on the single line of each potentiometer, and the connection between all of them is 3v consistent.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Software hack&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;My second attempt was trying to reverse engineer the 2.4GHz transmission via an nrf24l01 module, as some other people on the internet have been successful doing this with some other toys. I tried to scan the frequency bands, however with no successful outcome. I have no clue which transmitter module is being used on the board.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;TL;/DR;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;My questions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Is it even possible to achieve what I want?&lt;/li&gt;&#xA;&lt;li&gt;If yes, what do I need to do?&lt;/li&gt;&#xA;&lt;li&gt;If not, what did others do to achieve this kind of behaviour?&lt;/li&gt;&#xA;&lt;li&gt;Which circuit do I need to convert digital PWM in analog? &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;If you need any additional information please let me know!&lt;/p&gt;&#xA;" OwnerUserId="16235" LastEditorUserId="37" LastEditDate="2017-05-01T08:24:45.357" LastActivityDate="2017-05-01T08:24:45.357" Title="2.4GHz helicopter hack [Edited]" Tags="&lt;electronics&gt;&lt;radio-control&gt;" AnswerCount="2" CommentCount="9" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11725" PostTypeId="1" CreationDate="2017-02-27T20:20:27.707" Score="2" ViewCount="390" Body="&lt;p&gt;I've been looking into path planning for a non-holonomic robot with 3 DOF in a 2D plane and recently learned about Voronoi diagrams but I cannot find any open source planning libraries that use this technique. Are there any open source implementations of using Voronoi diagrams (preferably in C++)? If yes, then where? If not, then why? &lt;/p&gt;&#xA;" OwnerUserId="7441" LastActivityDate="2017-02-27T20:20:27.707" Title="Are there any open source path planning libraries that implement Voronoi diagram techniques?" Tags="&lt;mobile-robot&gt;&lt;motion-planning&gt;&lt;navigation&gt;&lt;path-planning&gt;" AnswerCount="0" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="11726" PostTypeId="1" CreationDate="2017-02-28T07:01:48.607" Score="0" ViewCount="367" Body="&lt;p&gt;Where I can buy an actuator that consists of a motor that turns a screw that moves a rod? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/FtqmQ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FtqmQ.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="16238" LastActivityDate="2017-03-31T22:44:23.993" Title="motor to turn a screw to move a lever" Tags="&lt;actuator&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2017-04-01T15:11:35.243" ContentLicense="CC BY-SA 3.0" />
  <row Id="11728" PostTypeId="2" ParentId="6508" CreationDate="2017-02-28T12:00:25.173" Score="0" Body="&lt;p&gt;If you're working with the TK1 and stereo camera, you might consider this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://devtalk.nvidia.com/default/topic/994170/jetson-tk1-and-stereo-vision/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://devtalk.nvidia.com/default/topic/994170/jetson-tk1-and-stereo-vision/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These stereo cameras are supports ROS: &lt;a href=&quot;http://rosindustrial.org/news/2016/1/13/3d-camera-survey&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://rosindustrial.org/news/2016/1/13/3d-camera-survey&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="16240" LastActivityDate="2017-02-28T12:00:25.173" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11729" PostTypeId="1" CreationDate="2017-02-28T14:37:01.697" Score="2" ViewCount="122" Body="&lt;p&gt;I'm studying an optimal control for the inverted pendulum in the following figure&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/LM8I8.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/LM8I8.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;the state and the output of the system are defined as&#xA;$$x=\begin{bmatrix}r &amp;amp; \theta &amp;amp; \dot{r} &amp;amp; \dot{\theta} \end{bmatrix}^T, \quad y=\begin{bmatrix}r &amp;amp; \theta-\alpha &amp;amp; \dot{r} \end{bmatrix}^T$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;so the continuous state space model at the upright equilibrium is&#xA;\begin{cases}&#xA;\dot{x}(t)&amp;amp;=Ax(t)+B_u u(t)+B_\alpha \alpha(t)+B_\tau \tau(t)+B_{F_s}F_s\text{sign}(\dot{r}(t)) \\&#xA;y(t)&amp;amp;=Cx(t)+D_\alpha\alpha(t)&#xA;\end{cases}&#xA;where the disturbance inclination $\alpha$ is suppose constant, $\tau$ is a torque disturbance,$B_{F_s}F_s\text{sign}(\dot{r}(t))$ is a Coulomb's friction term and $u$ is the input force applied at the cart. The numerical values for the transfer matrices are&#xA;$$A=\begin{bmatrix}0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\ 0 &amp;amp; 2.8040 &amp;amp; -5.2658 &amp;amp; 0 \\ 0 &amp;amp; 18.5885 &amp;amp; -19.6959 &amp;amp; 0 \end{bmatrix}, \quad B_u=\begin{bmatrix}0 \\ 0 \\ 3.7629 \\ 5.5257 \end{bmatrix}, \quad B_\alpha=\begin{bmatrix}0 \\ 0 \\ -12.6447 \\ 18.5885 \end{bmatrix}, \quad B_\tau=\begin{bmatrix}0 \\ 0 \\ 0.5650 \\ 3.7629 \end{bmatrix}, \quad B_{F_s}=\begin{bmatrix}0 \\ 0 \\ -1.1187 \\ -0.5650\end{bmatrix}  $$&#xA;$$C=\begin{bmatrix} I_3 &amp;amp; 0_{3\times1}\end{bmatrix} ,\qquad D_\alpha=\begin{bmatrix}0 &amp;amp; -1 &amp;amp; 0\end{bmatrix}^T$$&#xA;where $I_n$ is the identity matrix $n\times n$ and $0_{m\times n}$ is the null matrix $m\times n$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a digital implementation is required a suitable sampling of the previous system, so the discrete relative state-space model is in the form&#xA;\begin{cases}&#xA;x_{k+1}&amp;amp;=\Phi x_k+\Gamma_u u_k+\Gamma_\alpha \alpha_k+\Gamma_\tau \tau_k+N_k(\dot{r}_k) \\&#xA;y_k&amp;amp;=Cx_k+D_\alpha\alpha_k&#xA;\end{cases}&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now there is my problem. To counteract the effects of constant rail inclinations a discrete-time integrator is appended to the model $(\Phi,\Gamma_u)$. It is taken in the simple form&#xA;\begin{equation}\tag{1} w_{k+1}=w_k+r_k\end{equation}&#xA;so the extended state of the system become&#xA;$$x^{\text{e}}=\begin{bmatrix}x &amp;amp; w\end{bmatrix}^T$$&#xA;and the control state feedback is designed by minimization the cost function&#xA;$$J(u)=\sum_{k=0}^\infty (x_k^\text{e})^TQx_k^\text{e}+Ru_k^2$$&#xA;where the cost's matrices $Q$ must be semi-defined positive and the scalar cost $R$ must be strictly positive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't understand the function of the integrator $(1)$. The rail inclination affect both input and output of the system, so the integral action counteracts only the effect on output. Moreover, the state matrix $A$ is singular, so the system at least has one integral action by itself, and no more integrator has to appended to the system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe the integrator $(1)$ is considerer for drive the position of the cart to the start of the rail, i.e. $r=0$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance for any suggestion.&lt;/p&gt;&#xA;" OwnerUserId="11791" LastEditorUserId="18235" LastEditDate="2017-10-05T15:36:22.777" LastActivityDate="2017-10-05T15:36:22.777" Title="LQR for Inverted pendulumn" Tags="&lt;control&gt;" AnswerCount="0" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11731" PostTypeId="2" ParentId="11721" CreationDate="2017-02-28T15:56:52.977" Score="4" Body="&lt;p&gt;There are a couple libraries for doing what you want to to, the first is &lt;a href=&quot;https://github.com/ArduPilot/pymavlink&quot; rel=&quot;nofollow noreferrer&quot;&gt;pyMAVlink&lt;/a&gt; and the second is &lt;a href=&quot;https://github.com/dronekit/dronekit-python&quot; rel=&quot;nofollow noreferrer&quot;&gt;dronekit-python&lt;/a&gt; it is going to be easiest to use dronekit as it handles a lot of the lower level stuff like processing incoming packets and connecting over your preferred interface for you automatically. I assume you want to  load waypoints from a file and have your UAV fly them? In that case you probably want to set your UAV into Guided mode (for a description of modes on Ardupilot see the docs &lt;a href=&quot;http://ardupilot.org/copter/docs/flight-modes.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;) this will tell Ardupilot that you are going to command it step by step what to do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is some example code form there wiki that does what you want to do you'll just have to load your files and transform the coordinates to lat lon points:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;def arm_and_takeoff(aTargetAltitude):&#xA;    while not vehicle.is_armable:&#xA;        print &quot; Waiting for vehicle to initialise...&quot;&#xA;        time.sleep(1)&#xA;    vehicle.mode = VehicleMode(&quot;GUIDED&quot;)&#xA;    vehicle.armed = True&#xA;&#xA;    while not vehicle.armed:      &#xA;        print &quot; Waiting for arming...&quot;&#xA;        time.sleep(1)&#xA;&#xA;    print &quot;Taking off!&quot;&#xA;    vehicle.simple_takeoff(aTargetAltitude)&#xA;    # Wait for takeoff to finish&#xA;    while True:&#xA;        print &quot; Altitude: &quot;, vehicle.location.global_relative_frame.alt      &#xA;        if vehicle.location.global_relative_frame.alt&amp;gt;=aTargetAltitude*0.95: #Trigger just below target alt.&#xA;            print &quot;Reached target altitude&quot;&#xA;            break&#xA;        time.sleep(1)&#xA;&#xA;def get_distance_metres(aLocation1, aLocation2):&#xA;    dlat = aLocation2.lat - aLocation1.lat&#xA;    dlong = aLocation2.lon - aLocation1.lon&#xA;    return math.sqrt((dlat*dlat) + (dlong*dlong)) * 1.113195e5&#xA;&#xA;# define connection method &#xA;# see all the methods at http://python.dronekit.io/guide/connecting_vehicle.html&#xA;connection_string = &quot;127.0.0.1:14550&quot;&#xA;&#xA;# Connect&#xA;vehicle = connect(connection_string, wait_ready=True)&#xA;# arm and takeooff to 10m&#xA;arm_and_takeoff(10)&#xA;# set airspeed to 3 m/s&#xA;vehicle.airspeed = 3&#xA;&#xA;point1 = LocationGlobalRelative(-35.361354, 149.165218, 20)&#xA;vehicle.simple_goto(point1)&#xA;&#xA;while vehicle.mode.name==&quot;GUIDED&quot;: #Stop action if we are no longer in guided mode.&#xA;        remainingDistance=get_distance_metres(vehicle.location.global_frame, point1)&#xA;        print &quot;Distance to target: &quot;, remainingDistance&#xA;        if remainingDistance&amp;lt;=targetDistance*0.01: #Just below target, in case of undershoot.&#xA;            print &quot;Reached target&quot;&#xA;            break;&#xA;        time.sleep(2)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Per request I have some example pymavlink code, you can see some more examples &lt;a href=&quot;https://github.com/ArduPilot/pymavlink/tree/master/examples&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;, sending messages is a pain, you need to identify what type of packet you need to send, and fill it's paramaters acording to &lt;a href=&quot;http://mavlink.org/messages/common&quot; rel=&quot;nofollow noreferrer&quot;&gt;the standard&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;from pymavlink import mavutil&#xA;&#xA;data = mavutil.mavlink_connection('udp:localhost:14551', planner_format=False,&#xA;                                  notimestamps=True,&#xA;                                  robust_parsing=True)&#xA;&#xA;while True:&#xA;    msg = data.recv_match();&#xA;    #If we have a valid message&#xA;    if msg is not None:&#xA;        #print msg.get_type()&#xA;        if msg.get_type() is &quot;HEARTBEAT&quot;:&#xA;            print msg.autopilot&#xA;        elif msg.get_type() is &quot;NAV_CONTROLLER_OUTPUT&quot;:&#xA;            print msg&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="7066" LastEditorUserId="7066" LastEditDate="2017-03-02T15:18:12.627" LastActivityDate="2017-03-02T15:18:12.627" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="11733" PostTypeId="1" CreationDate="2017-02-28T18:54:46.693" Score="0" ViewCount="609" Body="&lt;p&gt;I have a robot that moves around autonomously. Very often I want to push the robot several feet to start a test over again, or sometimes I want to wheel the robot outside to my car or to a nearby field.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pushing my robot is pretty tough. Its 60lbs (27kg) and when I push it with the motors engaged its very difficult. I want a way to decouple the 2 back wheels so I can haul it around like a suit case. I've seen similar posts to this one where people suggested just leaving them coupled and recharging the battery. I don't really care to exert that much of my own energy just to recharge the battery. I just want to make transporting easier.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also Want to be able to engage and disengage without the robot being on. This means that electromagnet clutches are out. Id like the solution to be under $300 and to be fairly easy to machine. I have access to a lathe, mill, welder... etc and can machine some complex stuff, but I don't want it to be like making a custom gear box. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone have any suggestions? I'm using standard dolly wheels from Northern tool. (&lt;a href=&quot;http://www.northerntool.com/images/product/2000x2000/425/42570_2000x2000.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.northerntool.com/images/product/2000x2000/425/42570_2000x2000.jpg&lt;/a&gt;) I've considered a quick release pin but given the geometry of the dolly wheel that would be tough. The pin would hit the rim as you are pulling it out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance for any suggestions.&lt;/p&gt;&#xA;" OwnerUserId="15781" LastActivityDate="2017-03-01T21:03:41.553" Title="Robot clutch to disengage wheels" Tags="&lt;motor&gt;&lt;gearing&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11735" PostTypeId="1" CreationDate="2017-02-28T21:33:08.247" Score="2" ViewCount="1242" Body="&lt;p&gt;I am trying to calculate the angular velocity of end effector of two-link robot arm. Can anyone help me to find it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If $q_1$, $q_2$  are joint angular position and $\dot{q_1}$ and $\dot{q_2}$ are joint angular velocities, and $\omega$ is angular velocity of end effector, then I use $\omega=\dot{q_1}+\dot{q_2}$.&#xA;Is that correct?&lt;/p&gt;&#xA;" OwnerUserId="16248" LastEditorUserId="110" LastEditDate="2017-03-01T01:51:55.517" LastActivityDate="2018-11-09T09:20:02.893" Title="how to calculate the angular velocity of end effector of two link robot arm?" Tags="&lt;robotic-arm&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11736" PostTypeId="2" ParentId="11735" CreationDate="2017-03-01T14:33:00.910" Score="0" Body="&lt;p&gt;angular velocity is wrt the center axis.  a simple way to account for that is to calculate absolute cartesian velocities, it's something like&lt;/p&gt;&#xA;&#xA;&lt;p&gt;v1 = cos(q1) I + sin(q1) J &lt;/p&gt;&#xA;&#xA;&lt;p&gt;v2_absolute = v1 + cos(q2) I + sin(q2) J &lt;/p&gt;&#xA;&#xA;&lt;p&gt;where I and J are the unit vectors in the x, and y direction&lt;/p&gt;&#xA;" OwnerUserId="16255" LastActivityDate="2017-03-01T14:33:00.910" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11737" PostTypeId="2" ParentId="11735" CreationDate="2017-03-01T14:59:13.360" Score="3" Body="&lt;p&gt;Yes, angular velocities are additive if that is all you're looking for (&lt;em&gt;i.e.,&lt;/em&gt; $\omega_2$ expressed in the base frame of $\omega_1$).  If you are trying to find the velocity of a point on link 2, then you need to add an $\omega $x$ r$ term.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastEditorUserId="11125" LastEditDate="2017-03-01T15:35:08.523" LastActivityDate="2017-03-01T15:35:08.523" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11738" PostTypeId="1" AcceptedAnswerId="12577" CreationDate="2017-03-01T15:16:32.223" Score="1" ViewCount="3402" Body="&lt;p&gt;I've recently tried to get the remote ROS node on a mobile robot through wifi. This is as below picture.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ek7fG.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ek7fG.png&quot; alt=&quot;Laptop and Mobile robot connection&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I've run &lt;code&gt;roscore&lt;/code&gt; command on both laptop and mobile robot and when I run the &lt;code&gt;roscore&lt;/code&gt; command, I get the following warning message on my laptop server:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;WARNING: ROS_MASTER_URI [http://192.168.7.2:11311] host is not set to this machine&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre&gt;&lt;code&gt;auto starting new master&#xA;process[master]: started with pid[2719]&#xA;ROS_MASTER_URI=http://192.168.7.2:11311/&#xA;&#xA;setting /run_id to 4ef6c0f8-bfdf-11d3-a450-4e699f75a6e7&#xA;process[rosout-1]:started with pid[2732]&#xA;started core service[/rosout]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;But, when I run &lt;code&gt;rosparam list&lt;/code&gt; command on my laptop, I've got the following results:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;root@duminda-laptop:~#rosparam list&#xA;/rosdistro&#xA;/roslaunch/uris/host_192_168_7_2_35078&#xA;/rosversion&#xA;/run_id&#xA;root@duminda-laptop:~#rosparam get /rosdistro&#xA;hydro&#xA;root@duminda-laptop:~#rosparam get /roslaunch/uris/host_192_168_7_2_35078&#xA;http://192.168.7.2:35078&#xA;root@duminda-laptop:~#rosparam get /run_id&#xA;4ef6c0f8-bfdf-11d3-a450-4e699f75a6e7&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;These results show that both laptop and mobile robot connected ok.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Is my setup to receiving the mobile robots data to my laptop is ok?&lt;/li&gt;&#xA;&lt;li&gt;Why there is a warning message like above when starting the &lt;code&gt;roscore&lt;/code&gt;?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="15103" LastEditorUserId="19515" LastEditDate="2020-07-25T00:36:41.373" LastActivityDate="2020-07-25T00:36:41.373" Title="How to call remote ROS node on mobile robot through laptop using wifi?" Tags="&lt;slam&gt;&lt;ros&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11739" PostTypeId="2" ParentId="11733" CreationDate="2017-03-01T17:38:35.270" Score="1" Body="&lt;p&gt;How about a electronix solution, at the moment i guess your motors are controlled by a H-Bridge or similar, by rotating the motor you are generating a current which generates a magnetic field in your motor (see Maxwells Laws for more information). If your motor is not connected the only fricition you have is the friction of your gears.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you can use a simple mosfet to disconnect your motors from their driver, if your motor uses a lot of current you may use a relay (or a IGBT) but the idea is the same.&lt;/p&gt;&#xA;" OwnerUserId="16181" LastActivityDate="2017-03-01T17:38:35.270" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11740" PostTypeId="2" ParentId="11733" CreationDate="2017-03-01T21:03:41.553" Score="1" Body="&lt;p&gt;If your robot's drive wheels always move in the forward direction, you may be able to design in a wrap slip clutch device.  This device would tighten a beefy spring around the driven shaft when the input is turned in the forward direction, but would loosen itself and decouple from the motor when the robot is pushed in reverse.  Here is an example:  &lt;a href=&quot;http://machinedesign.com/mechanical-drives/getting-speed-wrap-spring-clutchbrakes&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wrap slip clutch article from Machine Design 1/25/2007&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your drive wheels move bidirectionally, you can probably come up with a different, more standard, slip clutch device that allows you to manually engage/disengage the tangs between the input and output shaft for when you want to push the robot.  You'd need a mechanism to overcome the spring force that engages the tangs, and a method of locking it in place.  However, before thinking too hard about the design, I'm concerned if you can really get any manual clutch to work given that you are challenged on space for even a quick-release mechanism.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2017-03-01T21:03:41.553" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11741" PostTypeId="2" ParentId="11726" CreationDate="2017-03-01T21:50:10.380" Score="1" Body="&lt;p&gt;Are you talking about a worm drive (pictured below)?&#xA;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/c/c3/Worm_Gear.gif&quot; alt=&quot;Worm Drive&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If so there are plenty of places to get one depending on your needs, I have linked some below:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;From &lt;a href=&quot;http://www.vexrobotics.com/gears.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Vex&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;From &lt;a href=&quot;http://www.andymark.com/product-p/am-0917.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Andymark&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Plenty of people on &lt;a href=&quot;http://www.ebay.com/bhp/worm-gear-set&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ebay&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;From &lt;a href=&quot;http://www.pitsco.com/TETRIX_Worm_Gear_Box&quot; rel=&quot;nofollow noreferrer&quot;&gt;Tetrix&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;And many others, if you could tell us more about what you want to do we could be more helpful.&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2017-03-01T21:50:10.380" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11742" PostTypeId="1" AcceptedAnswerId="11769" CreationDate="2017-03-02T06:04:11.737" Score="0" ViewCount="1235" Body="&lt;p&gt;I am doing robotic arm simulation in Matlab Simulink but get the error. How I can resolve this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/HbGWK.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HbGWK.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My model given below.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/ndBYG.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ndBYG.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other details:&#xA;1. image of coordinates with world coordinates.&#xA;2. 6 DOF joint setting&#xA;&lt;a href=&quot;https://i.stack.imgur.com/33owH.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/33owH.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/yZjVe.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/yZjVe.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="14024" LastEditorUserId="14024" LastEditDate="2017-03-03T12:22:12.460" LastActivityDate="2020-07-24T21:40:03.933" Title="Robot arm matlab Simulink simulation error" Tags="&lt;robotic-arm&gt;&lt;matlab&gt;&lt;simulation&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="11743" PostTypeId="1" CreationDate="2017-03-02T12:02:40.280" Score="1" ViewCount="197" Body="&lt;p&gt;I have implemented a stable monocular slam tracking system, based on ORBSLAM2. I am trying to find a way to add real-world distance/scale to this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the same time, I am running a (less stable) stereo slam system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What i would like to do is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using the correct scale of the stereo data, figure out the scale factor that is need to correct the mono to real-world scale, and multiply the output by this factor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do not want to adjust the slam algorithm, I need to take the two output streams (currently an Eigen::Vector3f for each stream) and find an algorithm that I can run for 30 seconds or so to find the scale difference, and therefore the factor that I need to multiply the mono by.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am currently:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;//Start system.&#xA;&#xA;//Store both values as Eigen::Vector3f;&#xA;&#xA;Eigen::Vector3f initialWrong;&#xA;Eigen::Vector3f initialTruth;&#xA;&#xA;//sleep the thread for a few seconds, and move the sensors.&#xA;&#xA;&#xA;// get the distances&#xA;float stopWrong = CurrentWrong - initialWrong;&#xA;float stopTruth = CurrentTruth - initialTruth;&#xA;&#xA;scaleFactor = stopTruth / stopWrong ;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This works, within a margin of error, but is very manual. I am looking for a more automatic / iterative way to do this that will minimize the error as much as possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I use a ground truth to scale monocular slam in real time?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any thought or tips here would be greatly appreciated.&#xA;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="9859" LastEditorUserId="9859" LastEditDate="2017-03-03T09:41:42.020" LastActivityDate="2017-03-03T09:41:42.020" Title="Scaling monocular SLAM with another source?" Tags="&lt;slam&gt;&lt;stereo-vision&gt;&lt;c++&gt;&lt;monocular&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11744" PostTypeId="2" ParentId="11738" CreationDate="2017-03-02T15:17:33.080" Score="2" Body="&lt;p&gt;You only need one &lt;code&gt;roscore&lt;/code&gt;. It should be run by the &quot;host,&quot; which is the mobile robot, if I understand correctly. Then you can connect to it with your laptop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Following &lt;a href=&quot;http://wiki.ros.org/ROS/Tutorials/MultipleMachines&quot; rel=&quot;nofollow noreferrer&quot;&gt;this tutorial&lt;/a&gt; with the &quot;talker&quot; being your mobile robot and the &quot;listener&quot; being your laptop:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Start the &lt;code&gt;roscore&lt;/code&gt; on the host (mobile robot).&lt;br&gt;&#xA;&lt;code&gt;$ roscore&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Configure &lt;code&gt;ROS_MASTER_URI&lt;/code&gt; on the host (mobile robot).&lt;br&gt;&#xA;&lt;code&gt;$ export ROS_MASTER_URI=http://192.168.7.1:11311&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Now, do that same step on your laptop.&lt;br&gt;&#xA;&lt;code&gt;$ export ROS_MASTER_URI=http://192.168.7.1:11311&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I've personally tried using hostnames, but sometimes it can't resolve it, so I've stuck to using the complete address.&lt;/p&gt;&#xA;" OwnerUserId="14902" LastActivityDate="2017-03-02T15:17:33.080" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11745" PostTypeId="2" ParentId="11724" CreationDate="2017-03-02T17:57:58.607" Score="-1" Body="&lt;p&gt;As @combo pointed out, the solution to my problem was that the potentiometers are driving &lt;em&gt;current&lt;/em&gt; rather than voltage! I just connected another one in parallel and the hack was done. &#xA;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="16235" LastActivityDate="2017-03-02T17:57:58.607" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11746" PostTypeId="1" AcceptedAnswerId="11752" CreationDate="2017-03-02T18:57:17.883" Score="0" ViewCount="14" Body="&lt;p&gt;I am currently working with a combination of Tamiya and T-connectors. I have not previously had issues with either, but the T-connectors I'm using currently do not seem to be maintaining a connection. If I torque the T-connectors in a particular way they will start working, but if I leave them &quot;floating&quot; they disengage. My first thought was that the problem was I had 2 different brands of T connectors, but it turns out, after switching all to one brand, that some of them do not work properly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My first question is if there are known problems with T connectors or if I probably just got a bad batch?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My second question is if there are better interconnects out there than either Tamiya or T? (specifically for wiring a motor to its driver and the battery to the driver)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let me be clear, I am NOT looking for opinions. I obviously realize this could be based on personal preference, but I am specifically asking if there are engineering principles at play in the choice being made. If it really just comes down to preference, then I am only interested in the first question. I also realize the possibility of avoiding interconnects, but let's assume that's not an option.&lt;/p&gt;&#xA;" OwnerUserId="16268" LastActivityDate="2017-03-03T18:00:32.710" Title="What are the recommended interconnects for wiring a battery to a motor via its driver?" Tags="&lt;wiring&gt;&lt;connector&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11748" PostTypeId="2" ParentId="10616" CreationDate="2017-03-03T10:50:43.617" Score="1" Body="&lt;p&gt;A bipedal robot is essentially unstable - a little knock will cause it to fall over. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A commercial aircraft is essentially stable - a little gust of wind might move it off course, but it will keep flying the right way up and not simply fall out the sky. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although aircraft with &lt;a href=&quot;https://en.wikipedia.org/wiki/Relaxed_stability&quot; rel=&quot;nofollow noreferrer&quot;&gt;relaxed stability&lt;/a&gt; do exist, but for relaxed stability it is only recently that they can be controlled using fairly complicated automated control systems, and even then they are not anything like as unstable as a bipedal robot.&lt;/p&gt;&#xA;" OwnerUserId="1321" LastActivityDate="2017-03-03T10:50:43.617" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11749" PostTypeId="1" CreationDate="2017-03-03T12:31:06.730" Score="5" ViewCount="5267" Body="&lt;p&gt;I would like to get a rough estimate of the depth accuracy / uncertainty of a stereo camera system. For this I would like to use the basic formula in the attached image. What is still unclear to me is what's a reasonable choice for the disparity error &lt;span class=&quot;math-container&quot;&gt;$\Delta$&lt;/span&gt;D. Unfortunately, for example &lt;a href=&quot;https://robotics.stackexchange.com/a/938&quot;&gt;this answer (in point &quot;Resolution&quot;)&lt;/a&gt; describes the assumption of the size of the disparity error only very quickly. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is a reasonable assumption just the width of one pixel? Why yes, why not?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ozwDm.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ozwDm.png&quot; alt=&quot;Formula&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="16275" LastEditorUserId="7266" LastEditDate="2019-07-12T18:27:14.060" LastActivityDate="2019-07-12T18:27:14.060" Title="Estimate Disparity Error for Depth Accuracy Estimation" Tags="&lt;stereo-vision&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="11751" PostTypeId="1" AcceptedAnswerId="11756" CreationDate="2017-03-03T17:43:52.683" Score="0" ViewCount="144" Body="&lt;p&gt;I'm trying to understand the dynamic equations for the cart pole system according to &lt;a href=&quot;http://ctms.engin.umich.edu/CTMS/index.php?example=InvertedPendulum&amp;amp;section=SystemModeling&quot; rel=&quot;nofollow noreferrer&quot;&gt;this control tutorial from the University of Michigan&lt;/a&gt;, where the angular acceleration equation can be written as&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$(I+ml^2)\ddot{\theta}+mglsin(\theta)+ml\ddot{x}cos(\theta)=0$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm having trouble understanding what forces are represented separately by the terms  $ml^2\ddot{\theta}$ and $I\ddot{\theta}$.  Both seem to represent a moment force exerted by the mass of the pole, so they almost seem to represent exactly the same thing.  My intuition tells me that I really only need the term $ml^2\ddot{\theta}$, but the fact that there is an additional $I\ddot{\theta}$ term suggests that my intuition is not accounting for some other force present in the system.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help to clarify and distinguish the meaning behind these two terms would be greately appreciated! &lt;/p&gt;&#xA;" OwnerUserId="2295" LastActivityDate="2017-03-07T17:03:31.110" Title="Why do I need an additional moment of inertia term in the cart-pole dynamics equation?" Tags="&lt;dynamics&gt;&lt;balance&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11752" PostTypeId="2" ParentId="11746" CreationDate="2017-03-03T18:00:32.710" Score="1" Body="&lt;p&gt;Anderson Power Poles (APP's) are your best source for a good connection. I have had MANY failures due to Tamiya, especially when with any kind of impact. I finally learned my lesson after being introduced to APP's. Never had any issues. &lt;/p&gt;&#xA;" OwnerUserId="16276" LastActivityDate="2017-03-03T18:00:32.710" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11755" PostTypeId="2" ParentId="11703" CreationDate="2017-03-03T20:44:54.047" Score="1" Body="&lt;p&gt;the code should be like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;int tourtime=1000; // circle tourtime. it is about intersection areas between each spiral. it should be less than circle time&#xA;int increasetime=10; // time for next tour, larger spiral needs more time&#xA;int numberofspiral=10; // number of circle&#xA;int minspeed=50; // initial speed for spiral. &#xA;int maxspeed=200;// max speed &#xA;void spiralling() {&#xA;  digitalWrite(motor1,HIGH);&#xA;  digitalWrite(motor2,LOW);&#xA;  digitalWrite(motor3,HIGH);&#xA;  digitalWrite(motor4,LOW);&#xA;&#xA;  for(int i=0;i&amp;lt;=numberofspiral;i++) {&#xA;    analogWrite(pwm1,maxspeed);&#xA;    analogWrite(pwm2,minspeed);&#xA;    minspeed=minspeed+1;// increase the speed to increase radius&#xA;    delay(tourtime);&#xA;    tourtime=tourtime+increasetime;// increase the time for scan optimum area&#xA;  }&#xA;  analogWrite(pwm2,250); &#xA;  delay(150); &#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="9504" LastActivityDate="2017-03-03T20:44:54.047" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11756" PostTypeId="2" ParentId="11751" CreationDate="2017-03-04T01:51:00.627" Score="1" Body="&lt;p&gt;Look up an explanation of the parallel axis theorem for the mass moment of inertia.   The two terms do represent similar things, but the axis of rotation is different.  The term $I \ddot\theta$ comes from summing the moments about the centroid of the link, whereas the term $m l^2 \ddot \theta$ comes from summing the horizontal forces from the free body diagram.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastEditorUserId="11125" LastEditDate="2017-03-07T17:03:31.110" LastActivityDate="2017-03-07T17:03:31.110" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="11759" PostTypeId="1" AcceptedAnswerId="11760" CreationDate="2017-03-04T10:28:15.550" Score="0" ViewCount="767" Body="&lt;p&gt;I want to know which motors or smart servos are used in boston dynamics spot robot. Where can i read its spicification and is it possible to buy the motor? &lt;/p&gt;&#xA;" OwnerDisplayName="user14148" LastEditorUserId="110" LastEditDate="2017-03-04T11:49:47.223" LastActivityDate="2017-03-04T11:51:23.740" Title="Which motors are used in boston spot robot" Tags="&lt;motor&gt;&lt;servomotor&gt;&lt;actuator&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11760" PostTypeId="2" ParentId="11759" CreationDate="2017-03-04T11:51:23.740" Score="0" Body="&lt;p&gt;Most of Boston Dynamics' robots are hydraulic driven including this one.  I believe it is mostly composed of off-the shelf hydraulic components, but they are very expensive.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2017-03-04T11:51:23.740" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11762" PostTypeId="1" CreationDate="2017-03-04T18:55:20.853" Score="0" ViewCount="1373" Body="&lt;p&gt;I am making a hexapod project with my friend. There is a issue about its walking style. Generally tripod gait is formed as two steps: first move legs 1,3,5, then 2,4,6 which corresponds to moving one leg from one side and two legs from other side but the legs are located circular instead side by side. So, this situation makes us wondering if it would rotate or not instead of moving forward when the &#xA;tripod gait is implemented.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Our robot's legs are like this one: &lt;a href=&quot;https://www.youtube.com/watch?v=iPdRUbJcNzM&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=iPdRUbJcNzM&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What kind of walking algorithm is suitable for that kind of robot? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance.&lt;/p&gt;&#xA;" OwnerUserId="15352" LastActivityDate="2018-05-03T15:46:54.067" Title="Hexapod walking algorithm" Tags="&lt;hexapod&gt;&lt;walk&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11765" PostTypeId="1" CreationDate="2017-03-05T03:31:04.060" Score="0" ViewCount="102" Body="&lt;p&gt;I am planning to use this motor: &lt;a href=&quot;http://www.adrirobot.it/robot_kit/feetech_FT-DC-002/TGP01D-A130_TT-Motor.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.adrirobot.it/robot_kit/feetech_FT-DC-002/TGP01D-A130_TT-Motor.pdf&lt;/a&gt; Model: TGP01DA130 12215-48.&#xA;But I have some questions: How much a robot will be slower if it has 1 motor and one 180 degree servo instead of just 2 motors? And which one is the best option?&lt;/p&gt;&#xA;" OwnerDisplayName="user16291" LastEditorDisplayName="user16291" LastEditDate="2017-03-19T18:36:57.540" LastActivityDate="2017-03-19T18:36:57.540" Title="1 motor and 180 degree servo or just 2 motors?" Tags="&lt;mobile-robot&gt;&lt;raspberry-pi&gt;&lt;servomotor&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11766" PostTypeId="1" AcceptedAnswerId="11789" CreationDate="2017-03-05T04:36:03.947" Score="0" ViewCount="272" Body="&lt;p&gt;The equations of motion for a cart-pole (inverted pendulum) system are given as  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$(I+ml^2)\ddot{\theta}+mglsin(\theta)+ml\ddot{x}cos(\theta)=0$$  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$(M+m)\ddot{x}+ml\ddot{\theta}cos(\theta)-ml\dot{\theta}^2sin(\theta)=F$$  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I want to model a two wheeled segway-like robot with motion constrained to only forward and backward actions (effectively restricting motion in 1D).  I initially thought that I could model such a constrained segway robot by modeling a cart-pole system with a massless cart (M=0).  Is this the right approach to model the dynamics of a 1D segway robot?  Or is there a better model for the dynamics of such a robot in 1D?  &lt;/p&gt;&#xA;" OwnerUserId="2295" LastActivityDate="2017-03-08T13:12:20.567" Title="Can I model a 1D segway as a cart-pole system?" Tags="&lt;control&gt;&lt;balance&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11767" PostTypeId="2" ParentId="10755" CreationDate="2017-03-05T05:42:22.570" Score="1" Body="&lt;p&gt;any times when people say &quot;servo motor&quot; they are talking about the model airplane style square black plastic box.   That is not what you want here.   You would be looking at the industrial type servo.  These are larger sized DC motors when optical encoders on the motor shaft.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You do NOT need absolute position sensors.  All you need is a quadrature sensor and you keep count of the &quot;ticks&quot; in each direction.   At some place in th system there is a &quot;home&quot; switch.  On power on you slowly move until the home switch is tripped then the count is reset to zero.   From there you count.  As long as you don't miss a coubtthe position is accurate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cost can be nearly zero if you salvage parts from broken ink jet printers or copy machines.   They are a good source of encoders, and optical limit switches and motors and gears.   Old inline skates are a good source of ball bearings.  Can make arms from wood.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Path planning is th hardest part of the controller.   You need to accelerate the motors and arms so that the X motor and Y motor each reach their target position and velocity at eat same time.  Typically this solution is re-computed using feedback many times per second.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A good drive system if you can't use gears or timing belts is to wrap kevlar cord or steel cable around a driven drum then around a second drum and then connect the ends of the cord with a spring.   As long as you keep the spring between the drums &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also for air hockey 2 DOF is not enough.  You You need to control the X, Y position and also the ANGLE of the paddle.  Unless you are using a disk shaped paddle like hitting a puck with a puck.&lt;/p&gt;&#xA;" OwnerUserId="2609" LastActivityDate="2017-03-05T05:42:22.570" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11769" PostTypeId="2" ParentId="11742" CreationDate="2017-03-05T07:54:19.553" Score="0" Body="&lt;p&gt;You cane find a detailed explanation on how to set the joint actuation types &lt;a href=&quot;http://www.mathworks.com/help/physmod/sm/ug/joint-actuation.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. It seems that you need to set the torques as automatically computed, otherwise these are set to zero.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Furthermore, as it seems, the robot only moves in the x-y plane, but there is a z offset wrt the world coordinate system. Please make sure that this is handled correctly (you can use the same offset before the 6dof joint or you can allow for z axis movement) &lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2017-03-05T07:54:19.553" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="11770" PostTypeId="1" CreationDate="2017-03-05T11:43:12.823" Score="2" ViewCount="549" Body="&lt;p&gt;I want to implement a FPGA-based real-time stereo vision system for long range (up to 100m) depth estimation. Also, I want to use two ip cameras in the system. I have calculated depth error using the equation below with these parameteres:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;baseline = 1m&lt;/code&gt; (at the expense of increased frontal blind zone area), &lt;code&gt;z = 100m&lt;/code&gt;, &lt;code&gt;f = 4mm&lt;/code&gt;, &lt;code&gt;pixel_size = 4um&lt;/code&gt;, &lt;code&gt;disparity_accuracy = 0.25px&lt;/code&gt;,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;depth_error = dz = ((z^2)/b.f)*dp = 2.5m&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My questions are: Are these calculations and equation above valid for long range stereo vision?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any other considerations for designing this long range stereo vision system which may not be important in typical (short range) stereo vision systems?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I will be grateful for any information you can provide.&lt;/p&gt;&#xA;" OwnerUserId="16292" LastEditorUserId="16292" LastEditDate="2017-03-06T22:23:41.053" LastActivityDate="2017-03-06T22:23:41.053" Title="real-time stereo vision system for long range (up to 100m) depth estimation" Tags="&lt;cameras&gt;&lt;stereo-vision&gt;&lt;real-time&gt;&lt;errors&gt;&lt;rangefinder&gt;" AnswerCount="0" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="11771" PostTypeId="1" AcceptedAnswerId="11784" CreationDate="2017-03-05T16:34:00.560" Score="0" ViewCount="1025" Body="&lt;p&gt;The dynamics equation is T=M(q)*q''+C(q,q')*q'+G(q).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can somebody provide me with the M(q), C(q,q') and G(q) matrices of a 3R manipulator with link mass,length and rotational inertia m_i, l_i and Inertia_i respectively?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/vttH3.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vttH3.jpg&quot; alt=&quot;3Rserial&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="16294" LastEditorUserId="37" LastEditDate="2017-03-07T13:55:13.583" LastActivityDate="2017-03-07T13:58:31.387" Title="Dynamics of a 3R planar robot manipulator,matrices M(q),C(q,q') and G(q)" Tags="&lt;dynamics&gt;&lt;manipulator&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11772" PostTypeId="1" CreationDate="2017-03-05T21:36:41.790" Score="0" ViewCount="55" Body="&lt;p&gt;How can I calculate the rigid-body transformation [R|t] between two 3d triangles, but restricted to a given N degrees of freedom (for N = 1..6) ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know for N=6 I can get a least-squares solution via SVD of a certain matrix, but how can I integrate further constraints (fewer DOF) into the system?&lt;/p&gt;&#xA;" OwnerUserId="15898" LastEditorUserId="10748" LastEditDate="2017-03-06T20:02:58.700" LastActivityDate="2017-07-05T13:51:12.593" Title="Calculate Transformation between two point sets - but with constrained Degrees of Freedom" Tags="&lt;computer-vision&gt;&lt;kinematics&gt;&lt;inverse-kinematics&gt;&lt;rotation&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11777" PostTypeId="1" AcceptedAnswerId="11799" CreationDate="2017-03-06T07:41:18.743" Score="0" ViewCount="247" Body="&lt;p&gt;I am coding a little robot controlled by a raspberry pi zero. &#xA;&lt;em&gt;Disclaimer&lt;/em&gt;: This is a more general development question, and only indirectly related to raspberry pi. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Background&lt;/strong&gt;: I don't want to test everything on the robot directly, this is too time consuming. Therefore I am trying to implement mock interfaces. For example, I'd am using a set of fake sensor readings and feed them to the class responsible for sensing and driving. Running this code in command line should for example print out &quot;driving left&quot; instead of starting the right motor and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Question: How to mock a device so that I can use the main code without modification on my robot.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Code examples&lt;/strong&gt;&#xA;I have currently the following file structure:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;main.py: running the loop so the robot is doing something and       currently holding mock sensor data.  &lt;/li&gt;&#xA;&lt;li&gt;acc.py: AutonomousCruiseControl class: taking care of the process of       measuring and steering  &lt;/li&gt;&#xA;&lt;li&gt;hcsr04.py: a class mocking the sonar    distance reader device  &lt;/li&gt;&#xA;&lt;li&gt;servo.py: currently doing nothing: Should    contain a mock device writing to console what motor is turned  into    what direction&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In the following code examples, you can see e.g. in the drive() method, that I have code purely for testing mixed with the code destined for production.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;main.py&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#!/usr/bin/env python3&#xA;# coding=UTF-8&#xA;&#xA;from navigation import AutonomousCruiseControl&#xA;&#xA;&#xA;def main():&#xA;    #self.objectColisionRange = [10,15,20,15,10]&#xA;    readings = [&#xA;        [11, 16, 21, 16, 11],       # path free&#xA;        [100, 100, 19, 100, 100],   # front blocked&#xA;        [9, 100,20, 100, 100],      # center &amp;amp; left blocked&#xA;        [100, 100, 10, 100, 10],    # center &amp;amp; right blocked&#xA;        [10, 100, 10, 100, 10],     # center, left &amp;amp; right blocked&#xA;        [100, 10, 100, 100, 100],   # center free, left front object to avoid&#xA;        [100, 100, 100, 10, 100],   # center free, right front object to avoid&#xA;        [100, 10, 100, 10, 100]     # center free, but left and right (45°) objects too narrow&#xA;    ]&#xA;&#xA;    ACC = AutonomousCruiseControl()&#xA;    # range second parameter is numbers to generate not the right boundary&#xA;    for i in range(0,8):&#xA;        ACC.front_sonar.readings = readings[i]&#xA;        print(&quot;{}. reading: {}&quot;.format(i, ACC.read_front_sonar()))&#xA;        print(&quot;{}. FOS: {}&quot;.format(i, ACC.get_front_object_status()))&#xA;        ACC.drive()&#xA;&#xA;if __name__ == '__main__':&#xA;    main()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;acc.py&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#!/usr/bin/env python3&#xA;# coding=UTF-8&#xA;&#xA;from navigation.hcsr04 import Hcsr04&#xA;from navigation.servo import Servo&#xA;from random import randint&#xA;&#xA;&#xA;class AutonomousCruiseControl:&#xA;    &quot;&quot;&quot;helping to steer a robot trough obstacles&quot;&quot;&quot;&#xA;&#xA;    def __init__(self, object_colision_range=None, front_sonar_angles=None):&#xA;        # initiate sensors&#xA;        self.front_sonar = Hcsr04()&#xA;        self.front_sonar_servo = Servo()&#xA;        self.collision_distance = 20&#xA;&#xA;        if object_colision_range is None:&#xA;            self.object_colision_range = [10, 15, 20, 15, 10]&#xA;        else:&#xA;            self.object_colision_range = object_colision_range&#xA;&#xA;        if front_sonar_angles is None:&#xA;            self.front_sonar_angles = [0, 45, 90, 135, 180]&#xA;        else:&#xA;            self.front_sonar_angles = front_sonar_angles&#xA;&#xA;        self.front_sonar_distances = [200, 200, 200, 200, 200]&#xA;        self.read_front_sonar()&#xA;        print(self.front_sonar_distances)&#xA;&#xA;        self.front_object_status = [0, 0, 0, 0, 0]&#xA;&#xA;    def read_front_sonar(self):&#xA;        &quot;&quot;&quot; Setting the angle and calling the read_distance method. &quot;&quot;&quot;&#xA;        # TODO implement reading from right to left and left to right, so both servo swings can be used&#xA;        # go through all angles and read distance put it into front_sonar_distances&#xA;        # initiate only once for test cases, to not mix values&#xA;        for i in range(0, len(self.front_sonar_angles)):&#xA;            # set servo to angle&#xA;            angle = self.front_sonar_angles[i]&#xA;            # read distance&#xA;            distance = self.read_distance(self.front_sonar, angle)&#xA;            # print(&quot;distance is {}\n&quot;.format(distance))&#xA;            self.front_sonar_distances[i] = distance&#xA;        return self.front_sonar_distances&#xA;&#xA;    def get_front_object_status(self):&#xA;        &quot;&quot;&quot; Creating a simplified form of the distance measures. Currently if a reading is equal or below the&#xA;            reading angle specific collision range, the status is set to 1. Zero means, no obstacle. &quot;&quot;&quot;&#xA;        for i in range(0, len(self.front_sonar_distances)):&#xA;            if self.front_sonar_distances[i] &amp;lt;= self.object_colision_range[i]:&#xA;                self.front_object_status[i] = 1&#xA;            else:&#xA;                self.front_object_status[i] = 0&#xA;        return self.front_object_status&#xA;&#xA;    def read_distance(self, sensor, angle):&#xA;        &quot;&quot;&quot; Remove angle later from this method and from hcsr04. &quot;&quot;&quot;&#xA;        if sensor is self.front_sonar:&#xA;            # TODO: implement servo, set angle&#xA;            # print(&quot;Set servo to angle {} °&quot;.format(angle))&#xA;            # angle/index won't be necessary after the real servo routine is working&#xA;            # this just helps the dry run tests&#xA;            index = self.front_sonar_angles.index(angle)&#xA;            return self.front_sonar.get_distance(index)&#xA;&#xA;    def drive(self):&#xA;        &quot;&quot;&quot; Contolling the motors with obstacle avoidance switch.&#xA;            Light search is not yet implemented. The robot should aimlessly&#xA;            cruise around without hitting detectable obstacles. &quot;&quot;&quot;&#xA;&#xA;        stat = self.front_object_status&#xA;        dist = self.front_sonar_distances&#xA;&#xA;        if stat[1] + stat[2] + stat[3] is 0:&#xA;            # road is free&#xA;            print(&quot;Road free: L(eft) &amp;amp; R(ight) forward&quot;)&#xA;        elif stat[1] is 1:&#xA;            # left blocked&#xA;            print(&quot;Obstacle left: L(eft) faster  &amp;amp; R(ight) slower forward&quot;)&#xA;        elif stat[3] is 1:&#xA;            # right blocked&#xA;            print(&quot;Obstacle right: L(eft) slower  &amp;amp; R(ight) faster forward&quot;)&#xA;        elif stat[2] is 1 or (stat[1] + stat[3] is 2):&#xA;            # front blocked&#xA;            print(&quot;obstacle front: stop all&quot;)&#xA;            dist_sum_left = dist[0] + dist[1]&#xA;            dist_sum_right = dist[3] + dist[4]&#xA;&#xA;            if dist_sum_left == dist_sum_right:&#xA;                # both sides are free and distance the same&#xA;                # choose randomly left and right 0 is left and 1 is right&#xA;                rand = randint(0, 1)&#xA;                if rand is 0:   # left&#xA;                    print(&quot;Random turn left, L backw, R forw&quot;)&#xA;                else:           # right&#xA;                    print(&quot;Random turn right, R backw, L forw&quot;)&#xA;            elif dist_sum_left &amp;gt; dist_sum_right:&#xA;                # left has more leeway&#xA;                print(&quot;Left leeway, turn left&quot;)&#xA;            elif dist_sum_left &amp;lt; dist_sum_right:&#xA;                # right has more leeway&#xA;                print(&quot;Right leeway, turn right&quot;)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;hcsr04.py&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#!/usr/bin/env python3&#xA;# coding=UTF-8&#xA;&#xA;# Test method&#xA;&#xA;class Hcsr04:&#xA;    'this just fakes the reading from sonar it needs the servo angle where the reading should come from'&#xA;    def __init__(self):&#xA;        self.readings = [88, 88, 88, 88, 88]&#xA;&#xA;    def get_distance(self, index):&#xA;        return self.readings[index]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="16305" LastActivityDate="2017-03-07T19:04:11.010" Title="How to mock a device during development?" Tags="&lt;raspberry-pi&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11779" PostTypeId="2" ParentId="11666" CreationDate="2017-03-06T08:06:24.807" Score="1" Body="&lt;p&gt;Currently it's not possible to change the HSIN pin functions in Granity. We'll check if it's easily feasible to implement to the firmware.&lt;/p&gt;&#xA;" OwnerUserId="13118" LastEditorUserId="37" LastEditDate="2017-03-09T11:11:39.287" LastActivityDate="2017-03-09T11:11:39.287" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11780" PostTypeId="1" CreationDate="2017-03-06T09:32:58.310" Score="1" ViewCount="91" Body="&lt;p&gt;I am currently in the process of implementing a Fanuc robotic arm at our company and have just received the pneumatic gripper end effector to go on the end of the arm (which we won't have for about a week). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The end effector has come with both NPN and PNP sensors which attach into machined slots in the side of the gripper.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have very little experience or understanding of electronics so my question is really, what is the purpose of these sensors when used in conjunction with an end effector. Do they enable and disable the gripper or is that done through controlling the air supply?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many thanks for any help!&lt;/p&gt;&#xA;" OwnerUserId="16308" LastActivityDate="2017-07-04T22:37:18.180" Title="Robot end effector sensor query" Tags="&lt;robotic-arm&gt;&lt;sensors&gt;" AnswerCount="1" CommentCount="3" ClosedDate="2017-07-05T14:00:54.590" ContentLicense="CC BY-SA 3.0" />
  <row Id="11781" PostTypeId="2" ParentId="11780" CreationDate="2017-03-06T20:00:23.353" Score="0" Body="&lt;p&gt;The PNP and NPN sensors differ in the output signal. The robot controller it is connected to must have matching inputs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The sensor is most likely sense one of these two thing:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;It might be used for detecting if there is an object gripped&lt;/li&gt;&#xA;&lt;li&gt;It might detect the end of travel for the gripper claws. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Without documentation these are of course only guesses. &lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2017-03-06T20:00:23.353" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11782" PostTypeId="1" AcceptedAnswerId="11783" CreationDate="2017-03-07T03:41:42.813" Score="0" ViewCount="378" Body="&lt;p&gt;If I can control a small hobby servo motor then can I control high torque servo motor in same way? I want to make a robot which needs a high torque and speed motors. But first before buying some industrial servo motors I want to first test the kinematics of my robot with small cheap servo motors. I will be using ros-orocos toolchain to control the robot and to make an efficient motion planning algorithm. Why I can't go for expensive servo motors right now is that first I want to test the working of the robot arm, whether it moves as expected or not. Although I think it is possible, I want to be sure.&lt;/p&gt;&#xA;" OwnerDisplayName="user14148" LastEditorDisplayName="user9480" LastEditDate="2017-04-22T18:07:28.917" LastActivityDate="2017-04-22T18:07:28.917" Title="Is the working principle of all servo motors the same?" Tags="&lt;ros&gt;&lt;servomotor&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11783" PostTypeId="2" ParentId="11782" CreationDate="2017-03-07T04:42:06.637" Score="0" Body="&lt;p&gt;For the most part, yes, the working principle is the same.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All servo motors I've ever encountered use PWM to control them (sometimes called PPM).  So the code you use to turn your test motor ought to be reusable with the high torque motor, or in fact any other servo. But be aware of the following possible issues that you may or may not need to account for:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the neutral point might not be in the middle of the PWM range&lt;/li&gt;&#xA;&lt;li&gt;the direction of motion of servos is not standardized, so while one might turn clockwise from low PWM to high, another might turn counterclockwise&lt;/li&gt;&#xA;&lt;li&gt;most servos work in the range of a 1000μs pulse to a 2000μs pulse for a total rotation of 180° but this is not necessarily true for all, some may work from 800-2200μs or from 1200-1800μs, for example&lt;/li&gt;&#xA;&lt;li&gt;the time to turn from one extreme to another might vary greatly between two servos&lt;/li&gt;&#xA;&lt;li&gt;50Hz (or 20ms updates) is pretty standard but some servos (esp. digital servos) may be capable of much quicker updates&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.pololu.com/blog/17/servo-control-interface-in-detail&quot; rel=&quot;nofollow noreferrer&quot;&gt;This article on the pololu site&lt;/a&gt; is very good at describing the reactions to expect from the various signals and how they might vary between servos. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Good servo code will allow you to tweak the performance by adjusting parameters in the code rather than rewriting the code.&lt;/p&gt;&#xA;" OwnerUserId="1075" LastEditorUserId="1075" LastEditDate="2017-03-07T04:51:25.060" LastActivityDate="2017-03-07T04:51:25.060" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11784" PostTypeId="2" ParentId="11771" CreationDate="2017-03-07T07:07:05.437" Score="0" Body="&lt;p&gt;The simplest approach for deriving the dynamics equation of the manipulator is via Lagrangian approach. I've hand-written in a hurry the equations that you need to start computing the Lagrangian equation in the following picture and I leave the rest for you:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/W6Ag9.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/W6Ag9.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2155" LastActivityDate="2017-03-07T07:07:05.437" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11785" PostTypeId="1" AcceptedAnswerId="11810" CreationDate="2017-03-07T09:50:44.153" Score="4" ViewCount="2860" Body="&lt;p&gt;I am currently thinking about making a robot that will autonomously drive around the place. The place I want this robot to drive in however contains quite a few glass walls. When mapping the area I would need to be able to see the glass. For this reason I am in need of a sensor that can see the glass, and not see through it. What kind of sensor would be the best for me? I need it to have a maximum range of about 2-10 meters and a minimum range of about 0.25 meters (preferably as small as possible). I was thinking about maybe using ultrasonic, but I was told that a laser-based sensor would probably be best. I could however only find industrial grade laser sensors that could see glass/transparent objects.&lt;/p&gt;&#xA;" OwnerUserId="16316" LastEditorUserId="16316" LastEditDate="2017-03-09T09:50:52.510" LastActivityDate="2019-05-16T11:03:03.193" Title="A sensor that can see glass/transparent objects and surfaces" Tags="&lt;sensors&gt;&lt;slam&gt;&lt;mapping&gt;&lt;ultrasonic-sensors&gt;&lt;laser&gt;" AnswerCount="3" CommentCount="4" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11787" PostTypeId="2" ParentId="11772" CreationDate="2017-03-07T10:56:59.517" Score="1" Body="&lt;p&gt;Regardless of the number and kind of degrees of freedom you are using this is a least squares optimization problem. A basic approach is:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;write the transformation matrices that you are planning to use as a parameterized function&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;use an initial guess to get the results for the triangle coordinates and calculte the obtained coordinates using the initial&#xA;guess paramters&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;calculate the distance from the obtained points in step 2 to the required points&lt;/li&gt;&#xA;&lt;li&gt;iterate and refine the intial guess using an optimisation method (e.g. a simple gradient descent) until you reac a certein desired precision&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The above algorithm is similar (maybe more simplistic) to the &lt;a href=&quot;https://en.wikipedia.org/wiki/Iterative_closest_point&quot; rel=&quot;nofollow noreferrer&quot;&gt;Iterative Closes Point&lt;/a&gt; algorithm, used for &lt;a href=&quot;https://en.wikipedia.org/wiki/Simultaneous_localization_and_mapping&quot; rel=&quot;nofollow noreferrer&quot;&gt;SLAM&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2017-03-07T10:56:59.517" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11788" PostTypeId="2" ParentId="11765" CreationDate="2017-03-07T11:45:48.127" Score="1" Body="&lt;p&gt;If you want to use the second motor/servo for steering, I suggest you used a servo. To me, It's easier to operate for steering and more accurate.&lt;/p&gt;&#xA;" OwnerUserId="11472" LastActivityDate="2017-03-07T11:45:48.127" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11789" PostTypeId="2" ParentId="11766" CreationDate="2017-03-07T14:06:32.703" Score="4" Body="&lt;p&gt;Let's start by defining some of the quantities in the equations you gave:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;$I$ Inertia of the pendulum about its center of gravity&lt;/li&gt;&#xA;&lt;li&gt;$M$ Mass of the cart&lt;/li&gt;&#xA;&lt;li&gt;$m$ Mass of the pendulum&lt;/li&gt;&#xA;&lt;li&gt;$l$ Distance between pendulum CG and its pivot&lt;/li&gt;&#xA;&lt;li&gt;$x$ Displacement of the cart&lt;/li&gt;&#xA;&lt;li&gt;$\theta$ Angle between a vertical axis and the pendulum&lt;/li&gt;&#xA;&lt;li&gt;$F$ Driving force acting on the cart&lt;/li&gt;&#xA;&lt;li&gt;$g$ Acceleration due to gravity&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Note that I chose a different sign convention for gravity than in the original question.  In my answer, $g$ has a positive value, while in the original question $g$ must be negative.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now let's compare this system and to a &quot;segway-like&quot; balancing robot.  The balancing robot's wheels are analogous to the cart, but in addition to translating, they also rotate.  This rotation means that for a given mass $M$, the balancing robot will require more energy to accelerate, since it needs to translate and also rotate.  So instead of zero cart mass, we expect an &lt;strong&gt;additional&lt;/strong&gt; term that corresponds to this additional required effort.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another difference is that instead of a linear force acting on the cart, we have a moment applied to the wheels, &lt;strong&gt;and an equal and opposite moment applied to the pendulum&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To derive the equations for the balancing robot, we need an additional two quantities, and we'll use $T\!\left( t \right)$ for the driving torque in place of $F$:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;$r$ Radius of the wheels&lt;/li&gt;&#xA;&lt;li&gt;$I_D$ Inertia of the rotating components in the drivetrain&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;And we end up with&#xA;$$&#xA;\left(I + m l^2\right) \ddot{\theta} - m g l \sin \left( \theta \right) + m l \ddot{x} \cos \left( \theta \right) = - T\!\left( t \right)&#xA;$$&#xA;$$&#xA;\left( \frac{I_D}{r^2} + M + m \right) \ddot{x} + m l \ddot{\theta} \cos \left( \theta \right) - m l \dot{\theta}^2 \sin \left( \theta \right) = \frac{T\!\left( t \right)}{r}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;EDIT:&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Since the real system isn't as simple as two bodies connected with a revolute joint, here is some guidance on where to &quot;count&quot; the mass and inertia of system components.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If we can assume we've already decided to model the system as two bodies (i.e. wheels/drivetrain and pendulum), then for each component, you need to ask &quot;with which body does this component move?&quot;  Let's say there are two wheels which are secured to the pendulum by bearings.  Let's also say that the wheels are driven by motors acting through gearboxes and there are couplings connecting the motors and wheels to the gearboxes (we'll call the couplings between the wheels and gearboxes &quot;low-speed&quot; and the couplings between the motors and gearboxes &quot;high-speed&quot;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's fairly obvious that the wheels and low-speed couplings move as a unit.  And it doesn't take much more thought to see that the inner race of the bearings, the internals of the gearbox and the motor rotors all move with the wheels as well.  In your question, you constrain the robot to linear travel, so we will assume that the two wheels move as a unit, too.  When there is a gearbox involved, the inertia of the motor and high-speed coupling (and sometimes the gearbox, depending on the convention used on the datasheet -- read carefully!) needs to be reflected to the opposite side of the gearbox.  The relationship is given by&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;I_{low-speed} = R^2 I_{high-speed}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the drivetrain inertia would look something like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;I_D = 2 \left( I_{wheel} + I_{low-speed coupling} + I_{gearbox} + R^2 \left( I_{high-speed coupling} + I_{motor} \right) \right)&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would treat the mass similarly.  The gearbox housing, motor stator and outer race of the bearing move with the pendulum, so their masses should add to $m$, while the wheels, all four couplings, gearbox internals and motor rotors should add to $M$.  In practice, I've never seen the mass of the gearbox internals on a datasheet, and I doubt that it's significant anyway.  But it is likely that the mass and inertia of the motors and at least the high-speed couplings are important, if not also the low-speed couplings.  For bearings, I usually assign half of the mass and inertia to each body and assume that it's close enough.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's also worth mentioning that we have kind of a funny case where both the gearbox housing and the output shaft can be moved while keeping the other stationary.  The motor will rotate in response to both of these motions.  I haven't put much thought into the &quot;correct&quot; way to account for this effect (possibly adding a small additional term to the pendulum inertia?), but with my engineering hat on, I would feel comfortable neglecting this effect and assuming the controller will compensate anyway.&lt;/p&gt;&#xA;" OwnerUserId="16321" LastEditorUserId="16321" LastEditDate="2017-03-08T13:12:20.567" LastActivityDate="2017-03-08T13:12:20.567" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="11791" PostTypeId="2" ParentId="11785" CreationDate="2017-03-07T15:18:44.827" Score="2" Body="&lt;p&gt;Unless you need very good resolution or a very tight detection pattern, I would go with an ultrasonic sensor. They can be very cheap and easily meet your detection range specs, for the very low end look at something like the &lt;a href=&quot;https://www.sparkfun.com/products/13959&quot; rel=&quot;nofollow noreferrer&quot;&gt;HC-SR04&lt;/a&gt;, and for more serious applications &lt;a href=&quot;http://www.maxbotix.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Maxbotix&lt;/a&gt; offers a wide range of sensors.&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2017-03-07T15:18:44.827" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11792" PostTypeId="2" ParentId="10994" CreationDate="2017-03-07T15:44:25.930" Score="1" Body="&lt;p&gt;The alexmos and other similar gimbal controllers, are using the camera mounted accelerometer and gyroscope in order to identify the angle and angular rate (and possibly higher order dynamics) of the camera platform, in an attempt to keep the angle the same as the set point. You are right that if the platform was doing it's job perfectly that the sensors would &quot;see&quot; no change, but this is not the case. The platform moves constantly but the sensors are able to sense very small movements very quickly much smaller than could be picked up by the cameras themselves and correct before they become errors that could be see in the video. Some controllers take input from the flight controller or gyros onboard the craft in order to predict or lead movements, in order to make the response to stimuli faster, and enable proactive correction as opposed to just reactive movement.&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2017-03-07T15:44:25.930" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11793" PostTypeId="1" AcceptedAnswerId="11797" CreationDate="2017-03-07T16:44:22.243" Score="3" ViewCount="598" Body="&lt;p&gt;I'm building a kite flying robot, in which I've already got some sensors built in. I now also want to measure the pulling force on the rope which is attached to the kite. So I thought of attaching a hanging digital scale to the rope which can then measure the pulling force in kilograms. I of course need to read out the data from the scale using GPIO pins or USB. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Furthermore, I also have a raspberry pi installed within the kite and I want to measure some pull on ropes in the air. So if possible, I also need very small/light scales from which I can read out the data. It would be great if the scales can measure up to about 50kg, but with some pulleys about 20kg would be fine as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately I can't find any digital hanging scale with a possibility to read out the data and which is reasonably light. There are some simple USB powered hanging scales, but I think they just use USB for charging, not for reading out data. And I also found &lt;a href=&quot;https://www.alibaba.com/product-detail/Kingtype-electronics-digital-luggage-crane-scale_857579100.html?s=p&quot; rel=&quot;nofollow noreferrer&quot;&gt;this one&lt;/a&gt;, but that's a bit overkill (too heavy and too expensive).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;So question #1: Does anybody know where I can get a simple existing hanging scale from which I can read out data?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If needed I can also build something, but I just wouldn't know where to start. I did find &lt;a href=&quot;https://www.alibaba.com/product-detail/100kg-hanging-scale-with-rs232-or_60558881053.html?s=p&quot; rel=&quot;nofollow noreferrer&quot;&gt;this page&lt;/a&gt; on Alibaba, where they show the contents of the scale they offer:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/17oNM.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/17oNM.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So as far as I understand I need the component which I highlighted. But I have no idea how that component is called (what do I search for?) and whether it is actually doable to read it out from a Raspberry Pi.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Question #2: does anybody know what the highlighted component is called, where I could possibly get it and if I can read it out from a Raspberry Pi?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In conclusion; can anybody point me in the right direction?&lt;/p&gt;&#xA;" OwnerUserId="1050" LastEditorUserId="1050" LastEditDate="2017-03-08T08:36:38.367" LastActivityDate="2017-03-08T20:05:09.740" Title="How to measure pull force on a (kite) rope?" Tags="&lt;mobile-robot&gt;&lt;sensors&gt;&lt;raspberry-pi&gt;&lt;uav&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11794" PostTypeId="2" ParentId="9001" CreationDate="2017-03-07T18:01:21.683" Score="-2" Body="&lt;p&gt;Wheels with dc motors should b on front. And coster wheel at back. Then it will move straight only in forward direction&lt;/p&gt;&#xA;" OwnerUserId="16324" LastActivityDate="2017-03-07T18:01:21.683" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11795" PostTypeId="2" ParentId="11782" CreationDate="2017-03-07T18:04:07.530" Score="1" Body="&lt;p&gt;No, industrial servo motors are not generally controlled in the same way as hobby servos.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The servo motor, motor drive and position sensors which are combined in a hobby servo are separate items in industrial systems, and the control system is responsible for position feedback. Similar to hobby servos, the motor drive may take a PWM signal or a digital signal, but that signal will usually be the desired drive speed. The motor drive will then attempt to drive the motor at that speed. Look around a supplier's site such as &lt;a href=&quot;http://www.emersonindustrial.com/en-US/controltechniques/products/servodrives/Pages/servodrives.aspx&quot; rel=&quot;nofollow noreferrer&quot;&gt;Emerson&lt;/a&gt; or &lt;a href=&quot;http://www.schneider-electric.com/en/product-subcategory/2935-servo-drives-and-motors/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Schneider&lt;/a&gt; for examples of servo motors and drives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want position control, or force control, then you need to put your own sensor in a feedback loop and request the desired motor speed, rather than requesting a position as you do in most hobby servos - somewhat similar to continuous rotation hobby servos. &lt;/p&gt;&#xA;" OwnerUserId="1321" LastActivityDate="2017-03-07T18:04:07.530" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11797" PostTypeId="2" ParentId="11793" CreationDate="2017-03-07T18:22:33.270" Score="4" Body="&lt;p&gt;The component you highlighted is called a &lt;a href=&quot;https://www.google.co.uk/search?q=tensile%20load%20cell&amp;amp;tbm=isch&quot; rel=&quot;noreferrer&quot;&gt;tensile load cell&lt;/a&gt;. You could buy one from a supplier, but it probably would be cheaper to buy a cheap digital hanging scale and taking the sensor out of it - at least I couldn't find one less than $100, ten times the price of a 50kg digital hanging scale.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will need to do some analog conversion and amplification of the signal and then convert to digital with an ADC; I haven't done so myself but &lt;a href=&quot;https://learn.sparkfun.com/tutorials/getting-started-with-load-cells&quot; rel=&quot;noreferrer&quot;&gt;Sparkfun's load cell tutorial&lt;/a&gt; seems a good start.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other means is to create your own scale, with a stiff spring and some sensor detecting its movement, such as a digital depth gauge - which costs $3 and has a serial output.&lt;/p&gt;&#xA;" OwnerUserId="1321" LastActivityDate="2017-03-07T18:22:33.270" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11798" PostTypeId="1" CreationDate="2017-03-07T18:55:58.683" Score="0" ViewCount="123" Body="&lt;p&gt;I'm adapting a KF orientation filter that represents the orientation as quaternion, and uses a 3x3 covariance matrix. Would someone know what 3x3 covariance represents in the case of a quaternion, and how that representation would relate to euler angles ?&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2017-03-07T18:55:58.683" Title="What's the mathematical definition of quaternion 3x3 covariance matrices, and how does it relate to euler angles?" Tags="&lt;kalman-filter&gt;" AnswerCount="0" CommentCount="3" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11799" PostTypeId="2" ParentId="11777" CreationDate="2017-03-07T19:04:11.010" Score="0" Body="&lt;p&gt;The general name for what you're looking for is &lt;strong&gt;dependency injection&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The pattern is to ensure that the sensors (&quot;the dependencies&quot;) are provided to the main control system at configuration time, instead of being hardcoded deep-down. You can then have two toplevel paths. One creates the objects that connect to the actual devices and passes them when creating the main control system. The other one creates the mock objects.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Generally speaking, if you start having these kind of issues, consider using the frameworks that already exist (ROS, Rock, ...).&lt;/p&gt;&#xA;" OwnerUserId="56" LastActivityDate="2017-03-07T19:04:11.010" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11800" PostTypeId="2" ParentId="9082" CreationDate="2017-03-07T19:51:37.937" Score="1" Body="&lt;p&gt;Since your control input to the system acts only on the cart, then you can influence the pendulum angle only due to the coupling between the cart motion and the pendulum motion.  If you were to put the pendulum CG at the pivot, there is no coupling between the cart and the pendulum, and the pendulum angle is no longer controllable.  This can be verified by checking the system's controllability matrix.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On paper, having a non-zero $l$ is good enough - the system is controllable as soon as the CG is not on the pivot axis.  In practice, however, you need to be able to control the pendulum angle when a reasonable amount of force is applied to the cart (what is reasonable depends on your preferences and budget).  When the pendulum is vertical ($\theta$ = 0), the pendulum acceleration is proportional to the cart acceleration:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\ddot{\theta} I = -\ddot{x} m l&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your goal is just to stabilize the pendulum, it may be desirable to have a large $m l$ and a small $I$ - so your control inputs more directly affect the pendulum angle.  If you have constraints on force (and power), cart displacement, etc. or if you have other goals then you may have to choose these parameters differently.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As pointed out in other answers, some systems are more stable when the CG is lower.  An inverted pendulum, however, is unstable (or for $\theta = 0$, marginally stable) for all (non-zero) values of $l$, so this theory doesn't apply.  In general, it is desirable to have a large $l$ and small $I$ because it makes it easier to control the pendulum.&lt;/p&gt;&#xA;" OwnerUserId="16321" LastActivityDate="2017-03-07T19:51:37.937" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11805" PostTypeId="1" CreationDate="2017-03-08T06:50:15.240" Score="0" ViewCount="455" Body="&lt;p&gt;I want to make a matlab (simulink) control model for the system in the image below.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://culearn.carleton.ca/moodle/pluginfile.php/2052516/mod_resource/1/MECH5503_Midterm_2017_2.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dKWF2.png&quot; alt=&quot;MECH5503_Midterm_2017_2.pdf&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;The original pdf is only accessible if logged in Carleton's Learning Management System.&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How do I get the dynamics of the system with given details in the image?&lt;/p&gt;&#xA;" OwnerUserId="15569" LastEditorUserId="37" LastEditDate="2017-03-09T10:17:34.073" LastActivityDate="2017-03-09T10:17:34.073" Title="Mathematical modelling of system dynamic on matlab" Tags="&lt;matlab&gt;&lt;dynamics&gt;" AnswerCount="2" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="11806" PostTypeId="2" ParentId="11805" CreationDate="2017-03-08T10:01:37.573" Score="-3" Body="&lt;p&gt;A very broad but a valid question. Simulink and the Simscape Addon are used both as a physical simulation toolkit and as an environment for controller development. On the concept drawing in the OP a marsrover is seen which probably should move around and make some tricks. The first thing is to create a simulation. Thats like a computergame where Simulink works as a physics engine. One step further is to develop a controller on top of the simulation. In most cases this is done with a Domain Specific Language. An example for the &quot;Differential Drive implementation&quot; is given on &lt;a href=&quot;http://www.best-of-robotics.org/pages/publications/UniBergamo_Robotica2012-DCML.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;A Domain Specific Language for Modeling Differential Constraints of Mobile Robots, page 4&lt;/a&gt; That paper is not Simulink specific but gives a more general idea.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2017-03-08T10:01:37.573" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11807" PostTypeId="1" AcceptedAnswerId="11808" CreationDate="2017-03-08T10:56:26.830" Score="0" ViewCount="232" Body="&lt;p&gt;I have a motoman robot for use in a pick and place application. It has a DX100 controller which has an ethernet interface which could be used to control a slave device using the Modbus TCP protocol. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The DX100 controller also supports Ethernet/IP and DeviceNet.&#xA;I know Modbus can be quite complex for first timers and I have little experience when it comes to programming these devices. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to know, if someone here has ever worked with this controller, which communication protocol they used and why.  &lt;/p&gt;&#xA;" OwnerUserId="16336" LastEditorUserId="10748" LastEditDate="2017-03-08T10:57:06.510" LastActivityDate="2017-03-08T11:03:36.290" Title="DX100 controller communication protocol" Tags="&lt;microcontroller&gt;&lt;serial&gt;&lt;communication&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11808" PostTypeId="2" ParentId="11807" CreationDate="2017-03-08T11:03:36.290" Score="0" Body="&lt;p&gt;I did not work with Motoman controllers, but I did work with other robots, Modbus and DeviceNet. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Modbus TCP is probably the easiest to use from the client side. On the DX100 Side you need to check which modbus address coresponds to the functionalites you would prefer. If you want to move the robot along the X axis, you need to check in the documentation which Modbus register(s) you need to write to make the robot move. (Please note that since I do not know the Motoman controller it is not sure that moving the robot via modbus is possible.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After you have identified the needed registers, you can connect a freely available modbus slave (or master, depending on configuration) running on a normal PC to see if the robot moves when you write the registers. You can find a number of programs capable of doing this &lt;a href=&quot;http://www.modbus.org/tech.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I assume it is needed that the robot is not connected to a PC but to a PLC via Modbus. If you have correctly identified the required registers via the PC software, you can cofigure the PLC to do the same, read/write the required Modbus registers and you are done. &lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2017-03-08T11:03:36.290" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11809" PostTypeId="1" AcceptedAnswerId="11813" CreationDate="2017-03-08T16:22:57.903" Score="1" ViewCount="86" Body="&lt;p&gt;I was reading the encoder value in arduino uno. But the output is not comming properly. It is coming like this:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/MMtD4.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MMtD4.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;I am using this arduino code to read encoder:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/* Rotary encoder read example */&#xA;#define ENC_A 14&#xA;#define ENC_B 15&#xA;#define ENC_PORT PINC&#xA;&#xA;void setup()&#xA;{&#xA;  /* Setup encoder pins as inputs */&#xA;  pinMode(ENC_A, INPUT);&#xA;  digitalWrite(ENC_A, HIGH);&#xA;  pinMode(ENC_B, INPUT);&#xA;  digitalWrite(ENC_B, HIGH);&#xA;  Serial.begin (115200);&#xA;  Serial.println(&quot;Start&quot;);&#xA;}&#xA;&#xA;void loop()&#xA;{&#xA; static uint8_t counter = 0;      //this variable will be changed by encoder input&#xA; int8_t tmpdata;&#xA; /**/&#xA;  tmpdata = read_encoder();&#xA;  if( tmpdata ) {&#xA;    Serial.print(&quot;Counter value: &quot;);&#xA;    Serial.print(counter, DEC);&#xA;    counter += tmpdata;&#xA;  }&#xA;}&#xA;&#xA;/* returns change in encoder state (-1,0,1) */&#xA;int8_t read_encoder()&#xA;{&#xA;  static int8_t enc_states[] = {0,-1,1,0,1,0,0,-1,-1,0,0,1,0,1,-1,0};&#xA;  static uint8_t old_AB = 0;&#xA;  /**/&#xA;  old_AB &amp;lt;&amp;lt;= 2;                   //remember previous state&#xA;  old_AB |= ( ENC_PORT &amp;amp; 0x03 );  //add current state&#xA;  return ( enc_states[( old_AB &amp;amp; 0x0f )]);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerDisplayName="user14148" LastActivityDate="2017-03-08T20:52:46.520" Title="serial monitor not showing proper output" Tags="&lt;arduino&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11810" PostTypeId="2" ParentId="11785" CreationDate="2017-03-08T18:00:04.483" Score="3" Body="&lt;p&gt;I'm pretty sure that a &lt;a href=&quot;http://denkovi.com/infrared-proximity-sensor-20-150cm?CurrencyID=CAD&amp;amp;gclid=CI37--i9x9ICFQx_fgod9PcI_Q&quot; rel=&quot;nofollow noreferrer&quot;&gt;very basic IR proximity sensor&lt;/a&gt; would do the trick. Glass is opaque to all but visible light. IR (as well as UV) will not penetrate the glass and you ought to be getting reliable distance measurements to the glass's surface.&lt;/p&gt;&#xA;" OwnerUserId="1075" LastActivityDate="2017-03-08T18:00:04.483" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11811" PostTypeId="2" ParentId="11805" CreationDate="2017-03-08T19:37:26.907" Score="5" Body="&lt;p&gt;the Simulink diagram is straightforward. It is a matter of connecting blocks. For the differential equations provided in your post, the simulink is &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/I4Vvg.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/I4Vvg.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For $u_1$ and $u_2$, I've chosen the unit step. You can change that of course. For $L$, I've set it to 0.5 since you didn't provide the actual value. The result of the position of the vehicle is shown below:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/H9Y2r.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/H9Y2r.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2155" LastActivityDate="2017-03-08T19:37:26.907" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11812" PostTypeId="2" ParentId="11793" CreationDate="2017-03-08T20:05:09.740" Score="0" Body="&lt;p&gt;What about a flex sensor? &lt;a href=&quot;https://www.sparkfun.com/products/10264&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here's one for less than $10 at Sparkfun.&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Wherever there is tension there must also be flexsion in a crossmember of the kite or in the membrane. A little bit of experimentation might get you the data you seek.&lt;/p&gt;&#xA;" OwnerUserId="1075" LastActivityDate="2017-03-08T20:05:09.740" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11813" PostTypeId="2" ParentId="11809" CreationDate="2017-03-08T20:52:46.520" Score="2" Body="&lt;p&gt;Looks line your terminal has the wrong baud rate, in your code you set it to 115200 baud with the line &lt;code&gt;Serial.begin (115200);&lt;/code&gt; You can change th baud rate on your serial terminal by using the highlighted drop down menu:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/baTrN.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/baTrN.png&quot; alt=&quot;menu&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2017-03-08T20:52:46.520" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11814" PostTypeId="5" CreationDate="2017-03-09T00:37:32.963" Score="0" Body="&lt;p&gt;Mavlink is a community created and driven standards for Unmanned Systems, from air to ground to Underwater vehicles. The official standard can be found at &lt;a href=&quot;http://mavlink.org&quot; rel=&quot;nofollow noreferrer&quot;&gt;mavlink.org&lt;/a&gt;. The initial experimental MAVLink was created 2008 and it's usage grew from there. Popularized by its use in Ardupilot it has grown to be the defacto standard for Small Consumer UAVs, used widely by everything from Ardupilot to the Parrot bebop.&lt;/p&gt;&#xA;" OwnerUserId="7066" LastEditorUserId="7066" LastEditDate="2017-03-09T10:22:02.560" LastActivityDate="2017-03-09T10:22:02.560" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11815" PostTypeId="4" CreationDate="2017-03-09T00:37:32.963" Score="0" Body="Mavlink is a community created and driven standards for Unmanned Systems, from air to ground to Underwater vehicles." OwnerUserId="7066" LastEditorUserId="7066" LastEditDate="2017-03-09T10:22:30.113" LastActivityDate="2017-03-09T10:22:30.113" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11816" PostTypeId="5" CreationDate="2017-03-09T00:41:07.277" Score="0" Body="&lt;p&gt;The programming-languages tag is intended for questions about what programming languages might be most appropriate for a subject, or what ones are industry standard for certain applications.&lt;/p&gt;&#xA;" OwnerUserId="7066" LastEditorUserId="7066" LastEditDate="2017-03-09T10:21:50.680" LastActivityDate="2017-03-09T10:21:50.680" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11817" PostTypeId="4" CreationDate="2017-03-09T00:41:07.277" Score="0" Body="The programming-languages tag is intended for questions about what programming languages might be most appropriate for a subject, or what ones are industry standard for certain applications." OwnerUserId="7066" LastEditorUserId="7066" LastEditDate="2017-03-09T10:21:46.843" LastActivityDate="2017-03-09T10:21:46.843" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11822" PostTypeId="2" ParentId="11749" CreationDate="2017-03-09T11:16:10.610" Score="2" Body="&lt;p&gt;The answer is that the Disparity error depends on the accuracy of the matching algorithm which matches the points in the two images. Some of these algorithms have an accuracy of one pixel, some achieve even sub-pixel accuracy.&lt;/p&gt;&#xA;" OwnerUserId="16275" LastActivityDate="2017-03-09T11:16:10.610" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11823" PostTypeId="1" AcceptedAnswerId="11829" CreationDate="2017-03-09T14:50:59.450" Score="4" ViewCount="850" Body="&lt;p&gt;I'm working through the Inverse Kinematic example for the Unimation PUMA 560  from Introduction to Robotics by Craig. In it he specifies the IK equations like so:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/cAvD2.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/cAvD2.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my software program I have three sliders on the screen that will give me the rotation of the end point in x, y, z like so (this is in Unity):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/8zxIT.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8zxIT.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each one of these sliders will control a float variable in the code (C#) and I can read these into my script (Using Unity 5). I am trying to replicate the inverse kinematic solution for this PUMA robot inside Unity, so that for a given position and rotation of the end effector the link rotations will update accordingly. I have already written out the IK equations that Craig specified in the example to calculate theta(i), but how do I &quot;read&quot; the slider values and &quot;input&quot; them to these equations? If I am not making any sense I apologize, I have been chipping away at this for some time and hit a mental blank wall. Any advice appreciated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: So in my near-delirious state I have not posited my question properly. So far, these are the equations I have written so far in code:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;public class PUMA_IK : MonoBehaviour {&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;GameObject J1, J2, J3, J4, J5, J6;&#xA;&#xA;public Vector3 J2J3_diff, J3J4_diff;&#xA;&#xA;public Slider px_Slider;    &#xA;public Slider py_Slider;    &#xA;public Slider pz_Slider;    &#xA;public Slider rx_Slider;    &#xA;public Slider ry_Slider;    &#xA;public Slider rz_Slider;    &#xA;&#xA;public float Posx, Posy, Posz, Rotx, Roty, Rotz;&#xA;&#xA;float a1, a2, a3, a4, a5, a6;   //Joint twist&#xA;float r1, r2, r3, r4, r5, r6;   //Mutual perpendicular length&#xA;float d1, d2, d3, d4, d5, d6;   //Link offset&#xA;public float t1, t2, t23, t3, t4, t5, t6;   //Joint angle of rotation&#xA;&#xA;public float J1Rot, J2Rot, J3Rot, J4Rot, J5Rot, J6Rot;&#xA;&#xA;float r11, r21, r31, r12, r22, r32, r13, r23, r33, c23, s23, Px, Py, Pz, phi, rho, K;&#xA;&#xA;int pose;   //1 - left hand, 2 = right hand&#xA;&#xA;// Use this for initialization&#xA;void Start ()&#xA;{&#xA;    pose = 1;&#xA;&#xA;    J1 = GameObject.FindGameObjectWithTag(&quot;J1&quot;);&#xA;    J2 = GameObject.FindGameObjectWithTag(&quot;J2&quot;);&#xA;    J3 = GameObject.FindGameObjectWithTag(&quot;J3&quot;);&#xA;    J4 = GameObject.FindGameObjectWithTag(&quot;J4&quot;);&#xA;    J5 = GameObject.FindGameObjectWithTag(&quot;J5&quot;);&#xA;    J6 = GameObject.FindGameObjectWithTag(&quot;J6&quot;);&#xA;&#xA;    J2J3_diff = J3.transform.position - J2.transform.position;&#xA;    J3J4_diff = J4.transform.position - J3.transform.position;&#xA;&#xA;&#xA;&#xA;    //Init modified DH parameters&#xA;&#xA;    //Joint twist&#xA;&#xA;    a1 = 0;&#xA;    a2 = -90;&#xA;    a3 = 0;&#xA;    a4 = -90;&#xA;    a5 = 90;&#xA;    a6 = -90;&#xA;&#xA;    //Link length&#xA;&#xA;    r1 = 0;&#xA;    r2 = Mathf.Abs(J2J3_diff.x);&#xA;    r3 = Mathf.Abs(J3J4_diff.x);&#xA;    r4 = 0;&#xA;    r5 = 0;&#xA;    r6 = 0;&#xA;&#xA;    //Link offset&#xA;&#xA;    d1 = 0;&#xA;    d2 = 0;&#xA;    d3 = Mathf.Abs(J2J3_diff.z);&#xA;    d4 = Vector3.Distance(J4.transform.position, J3.transform.position);&#xA;    d5 = 0;&#xA;    d6 = 0;&#xA;&#xA;}&#xA;&#xA;void Update ()&#xA;{&#xA;    Posx = px_Slider.value;&#xA;    Posy = py_Slider.value;&#xA;    Posz = pz_Slider.value;&#xA;&#xA;    Rotx = rx_Slider.value;&#xA;    Roty = ry_Slider.value;&#xA;    Rotz = rz_Slider.value;&#xA;&#xA;    Px = Posx;&#xA;    Py = Posy;&#xA;    Pz = Posz;&#xA;&#xA;    c23 = ((cos(t2)*cos(t3)) - (sin(t2)*sin(t3)));&#xA;    s23 = ((cos(t2)*sin(t3)) + (sin(t2)*cos(t3)));&#xA;&#xA;    rho = Mathf.Sqrt(Mathf.Pow(Px, 2) + Mathf.Pow(Py, 2));&#xA;    phi = Mathf.Atan2(Py, Px);&#xA;&#xA;    if (pose == 1)&#xA;    {&#xA;        t1 = Mathf.Atan2(Py, Px) - Mathf.Atan2(d3, Mathf.Sqrt(Mathf.Pow(Px, 2) + Mathf.Pow(Py, 2) - Mathf.Pow(d3, 2)));&#xA;    }&#xA;&#xA;    if (pose == 2)&#xA;    {&#xA;        t1 = Mathf.Atan2(Py, Px) - Mathf.Atan2(d3, -Mathf.Sqrt(Mathf.Pow(Px, 2) + Mathf.Pow(Py, 2) - Mathf.Pow(d3, 2)));&#xA;    }&#xA;&#xA;    K = (Mathf.Pow(Px, 2)+ Mathf.Pow(Py, 2) + Mathf.Pow(Px, 2) - Mathf.Pow(a2, 2) - Mathf.Pow(a3, 2) - Mathf.Pow(d3, 2) - Mathf.Pow(d4, 2)) / (2 * a2);&#xA;&#xA;    if (pose == 1)&#xA;    {&#xA;        t3 = Mathf.Atan2(a3, d4) - Mathf.Atan2(K, Mathf.Sqrt(Mathf.Pow(a2, 2) + Mathf.Pow(d4, 2) - Mathf.Pow(K, 2)));&#xA;    }&#xA;&#xA;    if (pose == 2)&#xA;    {&#xA;        t3 = Mathf.Atan2(a3, d4) - Mathf.Atan2(K, -Mathf.Sqrt(Mathf.Pow(a2, 2) + Mathf.Pow(d4, 2) - Mathf.Pow(K, 2)));&#xA;    }&#xA;&#xA;    t23 = Mathf.Atan2(((-a3 - (a2 * cos(t3))) * Pz) - ((cos(t1) * Px) + (sin(t1) * Py)) * (d4 - (a2 * sin(t3))), ((((a2 * sin(t3)) - a4) * Pz) - ((a3 + (a2 * cos(t3))) * ((cos(t1) * Px) + (sin(t1) * Py)))));&#xA;&#xA;    t2 = t23 - t3;&#xA;&#xA;    if (sin(t5) != 0)   //Joint 5 is at zero i.e. pointing straight out&#xA;    {&#xA;        t4 = Mathf.Atan2((-r13 * sin(t1)) + (r23 * cos(t1)), (-r13 * cos(t1) * c23) + (r33 * s23));&#xA;    }&#xA;&#xA;    float t4_detection_window = 0.00001f;&#xA;&#xA;    if ((((-a3 - (a2 * cos(t3))) * Pz) - ((cos(t1) * Px) + (sin(t1) * Py)) &amp;lt; t4_detection_window) &amp;amp;&amp;amp; (((-r13 * cos(t1) * c23) + (r33 * s23)) &amp;lt; t4_detection_window))&#xA;    {&#xA;        t4 = J4Rot;&#xA;    }&#xA;&#xA;    float t5_s5, t5_c5; //Eqn 4.79&#xA;&#xA;    t5_s5 = -((r13 * ((cos(t1) * c23 * cos(t4)) + (sin(t1) * sin(t4)))) + (r23 * ((sin(t1) * c23 * cos(t4)) - (cos(t1) * sin(t4)))) - (r33 * (s23 * cos(t4))));&#xA;&#xA;    t5_c5 = (r13 * (-cos(t1) * s23)) + (r23 * (-sin(t1) * s23)) + (r33 * -c23);&#xA;&#xA;    t5 = Mathf.Atan2(t5_s5, t5_c5);&#xA;&#xA;    float t5_s6, t5_c6; //Eqn 4.82&#xA;&#xA;    t5_s6 = ((-r11 * ((cos(t1) * c23 * sin(t4)) - (sin(t1) * cos(t4)))) - (r21 * ((sin(t1) * c23 * sin(t4)) + (cos(t1) * cos(t4)))) + (r31 * (s23 * sin(t4))));&#xA;&#xA;    t5_c6 = (r11 * ((((cos(t1) * c23 * cos(t4)) + (sin(t1) * sin(t4))) * cos(t5)) - (cos(t1) * s23 * sin(t5)))) + (r21 * ((((sin(t1) * c23 * cos(t4)) + (cos(t1) * sin(t4))) * cos(t5)) - (sin(t1) * s23 * sin(t5)))) - (r31 * ((s23 * cos(t4) * cos(t5)) + (c23 * sin(t5))));&#xA;&#xA;    t6 = Mathf.Atan2(t5_s6, t5_c6);&#xA;&#xA;    //Update current joint angle for display&#xA;&#xA;    J1Rot = J1.transform.localRotation.eulerAngles.z;&#xA;    J2Rot = J2.transform.localRotation.eulerAngles.y;&#xA;    J3Rot = J3.transform.localRotation.eulerAngles.y;&#xA;    J4Rot = J4.transform.localRotation.eulerAngles.z;&#xA;    J5Rot = J5.transform.localRotation.eulerAngles.y;&#xA;    J6Rot = J6.transform.localRotation.eulerAngles.z;&#xA;&#xA;}&#xA;&#xA;void p(object o)&#xA;{&#xA;    Debug.Log(o);&#xA;}&#xA;&#xA;float sin(float angle)&#xA;{&#xA;    return Mathf.Rad2Deg * Mathf.Sin(angle);&#xA;}&#xA;float cos(float angle)&#xA;{&#xA;    return Mathf.Rad2Deg * Mathf.Cos(angle);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;}&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The issue is not with the mathematics of what is going on per se, I am just confused at how I interface the three values of the X, Y, and Z rotation for the sliders (which represent the desired orientation) with these equations. For the translation component it is easy, the slider values are simply equal to Px, Py and Pz in the IK equation set. But in his equations he references r11, r23, etc, which are the orientation components. I am unsure how to replace these values (r11, r12, etc) with the slider values.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any ideas?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit 2: I should also say that these sliders would be for positioning the tool center point. The XYZ sliders will give the translation and the others would give the orientation, relative to the base frame. I hope this all makes sense. The goal is to be able to use these sliders in a similar fashion to how one would jog a real robot in world mode (as opposed to joint mode). I then pass these calculated angle values to the transform.rotation component of each joint in Unity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what I am really asking is given the three numbers that the rotation sliders produce (XRot, YRot and ZRot), how do I plug those three numbers into the IK equations?&lt;/p&gt;&#xA;" OwnerUserId="16348" LastEditorUserId="16348" LastEditDate="2017-03-09T19:18:33.793" LastActivityDate="2017-03-10T10:20:25.173" Title="Help with setting up Inverse Kinematics" Tags="&lt;inverse-kinematics&gt;" AnswerCount="4" CommentCount="6" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11824" PostTypeId="2" ParentId="10805" CreationDate="2017-03-09T15:36:02.943" Score="1" Body="&lt;p&gt;Unfortunately, there is no RobotC version you can run on your computer as configured - RobotC is currently (as of March 2017) only available for Windows.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depending on your Chromebook, there may be a way to run Windows software - check out this guide:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.howtogeek.com/173353/how-to-run-windows-software-on-a-chromebook/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.howtogeek.com/173353/how-to-run-windows-software-on-a-chromebook/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="16350" LastActivityDate="2017-03-09T15:36:02.943" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11825" PostTypeId="2" ParentId="4591" CreationDate="2017-03-09T15:48:05.533" Score="0" Body="&lt;p&gt;Your comparison is wrong - &lt;code&gt;sensorColorBLUE&lt;/code&gt; is a sensor setting, not a color. To detect a color, you need your sensor in RGB mode, and your comparison needs to be against a &lt;code&gt;TColors&lt;/code&gt; type. Change the code as follows:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#pragma config(Sensor, S1,     colorSensor,    sensorColorNxtFULL)&#xA;//*!!Code automatically generated by 'ROBOTC' configuration wizard               !!*//&#xA;&#xA;task main()&#xA;{&#xA;    while(true)&#xA;    {&#xA;        if((TColors)SensorValue[colorSensor] == BLUECOLOR)&#xA;        {&#xA;            motor[motorB] = 0;&#xA;            motor[motorC] = -50;&#xA;        }&#xA;        else&#xA;        {&#xA;            motor[motorB] = -50;&#xA;            motor[motorC] = 0;&#xA;        }&#xA;    }&#xA;    wait1Msec(1);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I kept the rest of your code [almost] as-is, however I suggest naming the sensor, as shown in my code. I also suggest naming your motors in &quot;Motors and Sensors setup&quot;; if you're applying -50 power because the motor is reversed, you should reverse the motors in setup. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, you don't need the &lt;code&gt;wait1Msec(1)&lt;/code&gt; command - that doesn't do anything at all here - the NXT color sensor will take about 3ms to scan, this additional delay is not at all necessary.&lt;/p&gt;&#xA;" OwnerUserId="16350" LastActivityDate="2017-03-09T15:48:05.533" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11826" PostTypeId="2" ParentId="11823" CreationDate="2017-03-09T16:28:55.173" Score="3" Body="&lt;p&gt;If I have correctly understood your question, you have those values (the angles that you want for the pose of the end-effector of the robot) but you don't actually know how to use them, since in the rotation matrix there are 9 parameters r i,j that look uncorrelated from the three angles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, the first thing that probably you have seen in Craig's book is that a rotation matrix, even though it has 9 parameters, has actually only 3 dof in space. You can represent a rotation in space with only 3 angles: these are called Euler angles, or RPY angles, depending on your choice. Euler angles are three rotations around X,Y,Z angles (there are actually 12 combinations possible, like Y,Z,X, X,Y,X and so on), but they are made around &lt;strong&gt;moving axes&lt;/strong&gt;: after you do your first rotation, your reference frame will rotate accordingly, and you execute the second rotation around your new axis (be it X,Y, or Z depending on your formalization). You can have a more accurate explanation on the textbook if you wish.&#xA;Roll Pitch Yaw angles are similar, but they are around &lt;strong&gt;fixed angles&lt;/strong&gt;, i.e. you do three rotations around X, Y and Z around the fixed axis from which you start. &#xA;You can search for visual examples on the web that will make you understand these concepts very clearly.&#xA;So, all this introduction is to say that you first have to model your problem: do you want these three sliders to set angles around moving or fixed angles? After you have modeled your representation, you can &lt;strong&gt;compute the rotation matrix&lt;/strong&gt; from these three simple rotations around a single axis. You will end up with three simple rotation matrices around one axis, and you just multiply those three. You will end up with a new 3x3 matrix, that is your &lt;strong&gt;complete rotation matrix&lt;/strong&gt;, the same that you see in that example: from that, you can extract each value of r i,j and evaluate the inverse kinematic according to your algorithm.&lt;/p&gt;&#xA;" OwnerUserId="16351" LastActivityDate="2017-03-09T16:28:55.173" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11827" PostTypeId="2" ParentId="11823" CreationDate="2017-03-09T17:15:46.573" Score="2" Body="&lt;p&gt;There is a very good &lt;em&gt;Handbook of Robotics&lt;/em&gt; from Ken Waldron and Jim Schmiedeler that provides the equations you're looking for.  The book can be purchased at &lt;a href=&quot;http://link.springer.com/referencework/10.1007%2F978-3-540-30301-5&quot; rel=&quot;nofollow noreferrer&quot;&gt;this Springer site&lt;/a&gt;, and you may be able to search to find other copies. As @dante mentions, the mapping of the 3x3 rotation matrix to wrist orientation depends on the type of angles you are using to describe the wrist orientation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In Table 1.2 of the referenced book they show how Euler angles can be obtained from the rotation matrix:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Z-Y-X Euler Angles $[\alpha, \beta, \gamma]$ are obtainable as:&#xA;$$ \beta = {\mathbb {Atan2}}(-r_{31}, \sqrt{r^2_{11} + r^2_{21}}) $$&#xA;$$ \alpha = {\mathbb {Atan2}}(r_{21} / {\cos \beta}, r_{11} / {\cos \beta})$$&#xA;$$ \gamma = {\mathbb {Atan2}}(r_{32} / {\cos \beta}, r_{33} / {\cos \beta})$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similarly, the X-Y-Z Fixed Angles mapping is also given in the paper's Table 1.2:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;X-Y-Z Fixed Angles $[\psi, \theta, \phi]$:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ \theta = {\mathbb {Atan2}}(-r_{31}, \sqrt{r^2_{11} + r^2_{21}})$$&#xA;$$ \psi = {\mathbb {Atan2}}(r_{21} / \cos \theta, r_{11} / \cos \theta)$$&#xA;$$ \phi = {\mathbb {Atan2}}(r_{32} / \cos \theta, r_{33} / \cos \theta)$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The authors also show conversions from a couple of additional wrist rotation coordinate systems.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastEditorUserId="11125" LastEditDate="2017-03-09T18:42:49.313" LastActivityDate="2017-03-09T18:42:49.313" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11828" PostTypeId="2" ParentId="11088" CreationDate="2017-03-09T18:46:04.767" Score="1" Body="&lt;p&gt;The best way to achieve this would be with RC channel pass through, you can configure any channel from 7-14 for &lt;a href=&quot;http://ardupilot.org/copter/docs/parameters.html#servo8-function-servo-output-function&quot; rel=&quot;nofollow noreferrer&quot;&gt;RC passthrough&lt;/a&gt; (technically you can configure lower channels for this but this can cause weird things to happen as they might be sharing your pitch/roll/yaw/throttle/mode setting) You can then read in the servo value on the arduino with the &lt;a href=&quot;https://www.arduino.cc/en/Reference/pulseIn&quot; rel=&quot;nofollow noreferrer&quot;&gt;pulseIn&lt;/a&gt; function, Ideally the servo output should be very accurate but for robustness I would have 10 µs ranges, allowing you to have over 100 unique outputs. As a bonus you can use the &lt;a href=&quot;http://ardupilot.org/copter/docs/common-mavlink-mission-command-messages-mav_cmd.html#mav-cmd-do-set-servo&quot; rel=&quot;nofollow noreferrer&quot;&gt;Do_Set_Servo&lt;/a&gt; command using pre programmed missions to activate your arduino at specific waypoints.&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2017-03-09T18:46:04.767" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11829" PostTypeId="2" ParentId="11823" CreationDate="2017-03-09T19:12:21.407" Score="2" Body="&lt;p&gt;You need to turn each rotation angle (XRot, YRot, ZRot) into their own 3x3 rotation matrix. Once you have three 3x3 rotation matrices, you multiply them all together to get a singular &quot;final&quot; 3x3 rotation matrix that describes how the ending orientation is related to the starting orientation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How you define these rotation matrices (global frame or body frame) and how you apply them (x/y/z, z/y/x, y/z/x, etc.) determines the result you'll get. For me, I found that body-centric coordinates made the most intuitive sense. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Imagine a ship whose y-axis points forward, z-axis points up, and x-axis points right (starboard). If you define roll as about the y-axis, pitch about the x-axis, and yaw about the z-axis, then (to me at least) those terms make the most sense when you say that first you yaw, then you pitch, then you roll. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, first you yaw, using $R_z(\theta_z)$:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;R_z(\theta_z) = \left[&#xA;\begin{array}{ccc}&#xA;\cos{\theta_z} &amp;amp; -\sin{\theta_z} &amp;amp; 0 \\&#xA;\sin{\theta_z} &amp;amp; \cos{\theta_z} &amp;amp; 0 \\&#xA;0 &amp;amp; 0 &amp;amp; 1&#xA;\end{array} \right]&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then you pitch, using $R_x(\theta_x)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;R_x(\theta_x) = \left[&#xA;\begin{array}{ccc}&#xA;1 &amp;amp; 0 &amp;amp; 0 \\&#xA;0 &amp;amp; \cos{\theta_x} &amp;amp; -\sin{\theta_x} \\&#xA;0 &amp;amp; \sin{\theta_x} &amp;amp; \cos{\theta_x} \\&#xA;\end{array} \right]&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then you roll, using $R_y(\theta_y)$&#xA;$$&#xA;R_y(\theta_y) = \left[&#xA;\begin{array}{ccc}&#xA;\cos{\theta_y} &amp;amp; 0 &amp;amp; \sin{\theta_y} \\&#xA;0 &amp;amp; 1 &amp;amp; 0 \\&#xA;-\sin{\theta_y} &amp;amp; 0 &amp;amp; \cos{\theta_y} \\&#xA;\end{array} \right]&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, when you multiply them all together, you do matrix multiplication from right to left, you get&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;R = R_y R_x R_z&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I used the y-axis as the &quot;long&quot; or longitudinal axis here because, at my company, that's how we set up our jobs: y-axis is generally the longer axis. I've seen online that typically the x-axis is the long axis, but it's all in how you define your axes. The $R_x$, $R_y$, and $R_z$ matrices I've given are the correct form to use for those axes, so if you redefine the axes for yourself to be something different just be sure to use the correct axis. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, once you get your overall $R$ matrix, that's where you get your $r_11$, $r_21$, etc. values.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-03-09T19:12:21.407" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11832" PostTypeId="1" CreationDate="2017-03-10T01:18:11.747" Score="0" ViewCount="97" Body="&lt;p&gt;The goal of my project is to get a real-time location information of roobma. The information includes the x position, the y position and the angle (12 o'clock direction is 0 degree, 3 o'clock is 90 degree and so on).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am using C++ to program the roomba.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to use &quot;Stream&quot; (Opcode: 148) to get the date, but it doesn't work for me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the part I am getting stuck at:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;unsigned char streamCommand[3];&#xA;streamCommand[0]=148;&#xA;streamCommand[1]=1;&#xA;streamCommand[2]=19;&#xA;write(robot,&amp;amp;streamCommand,3);&#xA;signed char readStream[6];&#xA;&#xA;&#xA;bool indicator=true;&#xA;while(indicator){&#xA;    string command=&quot;&quot;;&#xA;    cout&amp;lt;&amp;lt;&quot;Please input your command&quot;&amp;lt;&amp;lt;endl;&#xA;    cin&amp;gt;&amp;gt;command;&#xA;    action(command);&#xA;    read(robot,&amp;amp;readStream,6);&#xA;    cout&amp;lt;&amp;lt;&quot;[0]=&quot;&amp;lt;&amp;lt;readStream[0]&amp;lt;&amp;lt;endl;&#xA;    cout&amp;lt;&amp;lt;&quot;[1]=&quot;&amp;lt;&amp;lt;readStream[1]&amp;lt;&amp;lt;endl;&#xA;    cout&amp;lt;&amp;lt;&quot;[2]=&quot;&amp;lt;&amp;lt;readStream[2]&amp;lt;&amp;lt;endl;&#xA;    cout&amp;lt;&amp;lt;&quot;[3]=&quot;&amp;lt;&amp;lt;readStream[3]&amp;lt;&amp;lt;endl;&#xA;    cout&amp;lt;&amp;lt;&quot;[4]=&quot;&amp;lt;&amp;lt;readStream[4]&amp;lt;&amp;lt;endl;&#xA;    cout&amp;lt;&amp;lt;&quot;[5]=&quot;&amp;lt;&amp;lt;readStream[5]&amp;lt;&amp;lt;endl;&#xA;}&#xA;&#xA;return 0;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;}&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;streamCommand&lt;/code&gt; is a read command to ask roomba to send back data in stream.&lt;br&gt;&#xA;&lt;code&gt;readStream&lt;/code&gt; is the array that I store my retrieve data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why is this code not working?&lt;/p&gt;&#xA;" OwnerUserId="16355" LastEditorUserId="12910" LastEditDate="2019-01-31T14:05:51.037" LastActivityDate="2019-01-31T14:05:51.037" Title="Retrieving distance and angle of roobma create2" Tags="&lt;control&gt;&lt;sensors&gt;&lt;roomba&gt;&lt;programming-languages&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="11833" PostTypeId="1" CreationDate="2017-03-10T03:35:47.670" Score="2" ViewCount="1578" Body="&lt;p&gt;I am building a quadcopter using the tutorial &lt;a href=&quot;https://www.instructables.com/id/The-Ultimate-PVC-Quadcopter/&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Ultimate PVC Quadcopter&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When ever I go to lift off, at full throttle, the motors spin but the quadcopter doesn't go anywhere. I have checked again and again and the motors are spinning in the right direction, and have the right propellers. Does anybody know why my quad won't fly?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am using a KK2.1.5 flight controller, propellers marked with &lt;em&gt;1045r&lt;/em&gt; on the counter clockwise motors and the propellers just marked with &lt;em&gt;1045&lt;/em&gt; on the clockwise motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I switch the propellers, &lt;em&gt;1045r&lt;/em&gt; clockwise and &lt;em&gt;1045&lt;/em&gt; counter clockwise, then my quadcopter flips over.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The layout of the motors is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;1. CW     2. CCW&#xA;4. CCW    3. CW&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I am a beginner and this is the first drone I have built/owned.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S. My quadcopter weighs 3.2 pounds, is using 980&amp;nbsp;kv motors, 10&quot; propellers, 20&amp;nbsp;A ESCs, and a 3S 50C 2200&amp;nbsp;mAh Li-Po battery.&lt;/p&gt;&#xA;" OwnerUserId="16356" LastEditorUserId="9176" LastEditDate="2017-06-04T11:38:55.570" LastActivityDate="2019-10-27T16:10:03.023" Title="Why do the motors of my quadcopter not deliver sufficient power?" Tags="&lt;quadcopter&gt;&lt;radio-control&gt;&lt;multi-rotor&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11834" PostTypeId="2" ParentId="11823" CreationDate="2017-03-10T08:35:16.103" Score="1" Body="&lt;p&gt;All other answers describe well how your problem can be answered generally, and include very useful information, but again for very generalized cases. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The point that I feel is missing, is that you are working in Unity, which has builtin solutions for most of your problems. You can reimplement euler angle calculations rotarion matrix calculations, but it will be hard to mainaint, even harder to document well. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;4x4 Transformation matrices are well known and used in the paper posted by you. &lt;a href=&quot;https://docs.unity3d.com/ScriptReference/Matrix4x4.TRS.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here&lt;/a&gt; is a Unity exampe on how to uses 4x4 transformation matrices (scaling is not important for you, just use 0, 0, 0 for scaling).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://docs.unity3d.com/ScriptReference/Transform-eulerAngles.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here&lt;/a&gt; is how Unity uses Euler angles. &lt;a href=&quot;https://docs.unity3d.com/ScriptReference/Quaternion.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here&lt;/a&gt; is how can quaterions be used and converted. You can also find &lt;a href=&quot;http://answers.unity3d.com/questions/875348/generate-a-3x3-rotation-matrix-from-a-matrix4x4.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;examples&lt;/a&gt; on how to convert transformation matrices to rotation matrices. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Furthermore, &lt;a href=&quot;https://forum.unity3d.com/threads/understanding-rotations-in-local-and-world-space-quaternions.153330/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; is an example on how to compute rotations in world coordinate systems and local coordinate systems. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main point is, that if you have a transformation matrix in Unity you can used the builtin Unity functions the get the rotation in many possible variant, and vice-versa, if you have angles, you can get other representations (transformation matrix, quaterions) using builtin Untiy functions without the need for implementing code which is hard to test, maintain and document.  &lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2017-03-10T10:20:25.173" LastActivityDate="2017-03-10T10:20:25.173" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11835" PostTypeId="1" AcceptedAnswerId="11890" CreationDate="2017-03-10T12:50:37.153" Score="0" ViewCount="800" Body="&lt;p&gt;I am currently trying to implement a particle filter an a robot in a view to localize it on a 2D plane (i.e. to determine &lt;code&gt;x&lt;/code&gt;, &lt;code&gt;y&lt;/code&gt; and its orientation &lt;code&gt;theta&lt;/code&gt; ). I am using a LIDAR which give me &lt;code&gt;(alpha, d)&lt;/code&gt; with alpha the angle of measurement and d the distance measured at this angle. For now, I can compute the theoretical measures for each of my particle. But I am struggling with the evaluation function (the function that will give me the probability (or weight) of a particle considering the real measures).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Suppose my LIDAR give me 5 values per rotation (0°, 72°, 144°, 216°, 288°), thus I store one rotation in an array (5000mm is my maximum value) :&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Real LIDAR value : &lt;code&gt;[5000, 5000, 350, 5000, 5000]&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Particle 1 : &lt;code&gt;[5000, 5000, 5000, 350, 5000]&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Particle 2 : &lt;code&gt;[5000, 5000, 5000, 5000, 350]&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In this example, I want the function to return a higher probability (or weight) for Particle 1 than for Particle 2 (72° error vs 144°). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For now I am just doing the invert of the sum of the absolute difference between the two value at the same place in the array (e.g. for Particle 1 : &lt;code&gt;1 / (5000-5000 + 5000-5000 + 5000-350 + 5000-350 + 5000-5000)&lt;/code&gt;). The problem with this method is that, in this example, Particle 1 and 2 have the same probability.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, what kind of function should I use to have the probability of a particle to be the right one with those kind of measurements ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS : I am trying to adapt what is in this course : &lt;a href=&quot;https://classroom.udacity.com/courses/cs373/lessons/48704330/concepts/487500080923#&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://classroom.udacity.com/courses/cs373/lessons/48704330/concepts/487500080923#&lt;/a&gt; to my problem.&lt;/p&gt;&#xA;" OwnerUserId="14524" LastEditorUserId="14524" LastEditDate="2017-03-10T15:53:55.243" LastActivityDate="2017-03-25T05:45:40.873" Title="How to make a particle filter evaluation function with LIDAR sensing?" Tags="&lt;localization&gt;&lt;particle-filter&gt;&lt;lidar&gt;" AnswerCount="1" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="11836" PostTypeId="2" ParentId="11833" CreationDate="2017-03-10T13:45:05.193" Score="2" Body="&lt;p&gt;If I'm understanding you correctly, you are saying that the motors spin, but they don't spin fast enough to generate enough thrust to get the drone off the ground. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It sounds to me, if this is the case, that you maybe haven't done the speed calibration for the electronic speed controllers (ESCs). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.hobbywingdirect.com/collections/xrotor-user-manual&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here is the Hobbywing page on calibration&lt;/a&gt;, if you are using the same speed controllers used in the tutorial you linked; &lt;a href=&quot;http://ardupilot.org/copter/docs/esc-calibration.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here is another tutorial&lt;/a&gt; for more generic instructions (go to the &quot;Manual ESC-by-ESC Calibration&quot; section).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically you need to be sure that the speed controller &quot;understands&quot; that the full throttle signal you're providing it actually means full speed. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, the other obvious problem might be a dead battery. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-03-10T13:45:05.193" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="11837" PostTypeId="2" ParentId="9899" CreationDate="2017-03-10T14:30:29.483" Score="1" Body="&lt;p&gt;I don't know about VFH, but VFH+ has the ability to just &quot;drive around&quot; without a goal. A very clear explanation of VFH+ can be found &lt;a href=&quot;http://www-personal.umich.edu/~johannb/Papers/paper73.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&#xA;On page 5 they start choosing what direction to move in. I don't know how much of your code you'll be able to reuse, but I hope this helps...&lt;/p&gt;&#xA;" OwnerUserId="16361" LastActivityDate="2017-03-10T14:30:29.483" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11838" PostTypeId="2" ParentId="11832" CreationDate="2017-03-10T15:06:26.963" Score="1" Body="&lt;p&gt;You say, &quot;It doesn't work for me.&quot; What does that mean? You get nothing? You get numbers that don't make sense? Does it lock up? Something else? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, I'd refer you to the &lt;a href=&quot;https://cdn-shop.adafruit.com/datasheets/create_2_Open_Interface_Spec.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Create2 Documentation&lt;/a&gt; where I'd suggest you read up on the Opcode 148 protocol, starting on Page 20. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Notably:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Serial sequence: [148] [Number of packets] [Packet ID 1] [Packet ID 2] etc.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In your question title you say you want distance and angle (packets 19 and 20) but in your question you say you want a date (which doesn't exist). In your code though, you're only requesting packet 19, not 19 and 20. Your code should be:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;streamCommand[0]=148;&#xA;streamCommand[1]=2;&#xA;streamCommand[2]=19;&#xA;streamCommand[3]=20;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;On the next page in the documentation:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The format of the data returned is:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;[19][N-bytes][Packet ID 1][Packet 1 data...][Packet ID 2][Packet 2 data...][Checksum]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So, let's say for the moment that you really DO just want packet 19 right now, for troubleshooting/development purposes. In that case, the data coming back to you would look like the following:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[19][3][19][2 bytes of data][checksum]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first byte is the header, 19.&#xA;The second byte is the number of bytes between the second byte and the checksum, which is three: the packet ID (the number 19) and the two bytes of data for that packet. &#xA;The third byte is the packet ID (19)&#xA;The fourth and fifth bytes are the data for that packet. &#xA;The sixth byte is the checksum. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem here that you might be having if you're getting data but it doesn't look correct is that you don't appear to ever check that you're starting in the right location; you need to &lt;em&gt;parse&lt;/em&gt; the data you read to be sure that you're getting &lt;em&gt;valid&lt;/em&gt; data. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ideally, you should read bytes one at a time until you get the correct header (19). Then you should read the next byte, which is supposed to be the number of &quot;data&quot; bytes. Then you read however many bytes the second byte tells you to (3), then you read one more for the checksum. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Run the checksum calculation and compare your calculated checksum to the provided checksum. If the values don't match, then you either have bad data or the header you read (19) isn't the actual header but something else (maybe the packet ID - it's also 19). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your case, you might be able to skate by knowing that you should expect [19][3][19] (or, when you get to reading distance AND angle, [19][6][19]). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have a three-byte sequence that goes [19][3][19], then you could probably assume that's [header][number of bytes][packet ID]. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Again, though, you should really be checking the checksum, because it could be [packet ID][byte 1][byte 0], where byte 1 is 3 and byte 0 is 19. Not likely to happen, but definitely could. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also keep in mind that the Create2 starts writing data to you every 15ms after you issue the stream command; I'm not sure how your language/hardware handles buffers but you might get a buffer overflow and/or garbage data if you don't periodically clear that input buffer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can handle that by reading the entire buffer, parse the data for the first (or last, or arbitrary, etc.) message, then ignoring/deleting the rest of the data, or you could enter a while/for loop to read through all the data and display all of the valid data contained in the buffer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a final note, again you're constantly getting data returned to you right now, but you're pausing for input in your while loop. The messages will continue to back up while you're paused, and again you don't read/clear the buffer after the pause, you only read the first six bytes. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-03-10T15:06:26.963" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11839" PostTypeId="1" CreationDate="2017-03-10T15:40:21.763" Score="4" ViewCount="5693" Body="&lt;p&gt;I want to implement a real-time stereo vision system for long range (up to 100m) depth estimation. I know that there are some general considerations as described in this &lt;a href=&quot;https://robotics.stackexchange.com/questions/896/how-to-select-cameras-for-a-stereo-vision-system?rq=1&quot;&gt;SOV post&lt;/a&gt;. I have seen some typical cameras such as zed stereo cameras which has limited range (max. 20m).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maximum allowable baseline distance between cameras is 0.5m and about field of view, i think that a camera with 8mm (or 12 or 16) focal length can provide reasonable FOV. I need depth resolustions at 100m to be 1% or maybe lower. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are ip cameras proper for such applications? If no, Can anyone please suggest proper cameras for application in long range stereo vision system?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I will be grateful for any information you can provide.&lt;/p&gt;&#xA;" OwnerUserId="16292" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2017-12-02T01:19:45.143" Title="Camera selection for long range stereo vision system (up to 100 meters)" Tags="&lt;cameras&gt;&lt;stereo-vision&gt;&lt;real-time&gt;&lt;errors&gt;&lt;rangefinder&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="11842" PostTypeId="1" CreationDate="2017-03-11T19:22:14.593" Score="2" ViewCount="896" Body="&lt;p&gt;I am learning Simmechanics Matlab to do inverse dynamics for 4 DOF robotic arm. I read many examples to input motion to revolute joints like through PID, slider gain, sine waves, signal Builder etc. But these are not fulfilling my purpose as I have to rotate angles within limits and automatically. For example when I used sine wave signal, it continuously rotate until simulation time is not over. So, basically what I have is angles to rotate (through inverse kinematics) and now I want to find out torque required to reach that pose. How I can do this? How to create signal which fit in this scenario.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="14024" LastActivityDate="2017-04-11T14:05:45.090" Title="Inverse dynamics for robotic arm using Matlab Simmechanics" Tags="&lt;robotic-arm&gt;&lt;inverse-kinematics&gt;&lt;matlab&gt;&lt;dynamics&gt;&lt;simulation&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11844" PostTypeId="2" ParentId="11229" CreationDate="2017-03-12T07:20:58.813" Score="1" Body="&lt;p&gt;All you need is a ultrasonic sensor to detect objects. You can buy one at aliexpress. Then you must download a library named &lt;a href=&quot;https://bitbucket.org/teckel12/arduino-new-ping/wiki/Home&quot; rel=&quot;nofollow noreferrer&quot;&gt;NewPing Arduino Library for Arduino&lt;/a&gt; which is compatible with a wide range of ultrasonic sensors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can download it from &lt;a href=&quot;https://bitbucket.org/teckel12/arduino-new-ping/downloads/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Arduino New Ping at Bitbucket&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It contains functions to take distance between the sensor and the obstacle. Then you can set a condition using if statement that of the distance between the obstacle and robot is less than, say, 5 CM, then stop all motors. For more information consult instuctables website. &lt;/p&gt;&#xA;" OwnerUserId="16373" LastEditorUserId="37" LastEditDate="2017-03-13T12:12:03.607" LastActivityDate="2017-03-13T12:12:03.607" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11845" PostTypeId="1" AcceptedAnswerId="11846" CreationDate="2017-03-12T09:18:04.117" Score="0" ViewCount="76" Body="&lt;p&gt;I have this figure in which motion is given to revolute joint in Simmechanics. &lt;a href=&quot;https://i.stack.imgur.com/rc4Wd.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rc4Wd.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this, constant 2 is used and then integration is used. I want to  know what will be effect of 2 here and how integration is happening. What is the actual value of input here. Is it 2 degree or 2 degree/sec or something else. Is 2 is the upper limit of motion or lower limit? What will happen if replace 2 with 5.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks. &lt;/p&gt;&#xA;" OwnerUserId="14024" LastActivityDate="2017-03-12T11:14:52.030" Title="Motion input in Simmechanics Matlab." Tags="&lt;matlab&gt;&lt;simulation&gt;&lt;simulator&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11846" PostTypeId="2" ParentId="11845" CreationDate="2017-03-12T11:14:52.030" Score="1" Body="&lt;p&gt;2 represents a constant acceleration of the revolute joint. It's unit of measure cannot be determined from this screenshot, since it is a parameter of the joint actuator (to my knowledge it can be set to deg/sec^2 or rad/sec^2). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It effect is a constant acceleration to the joint. Let's assume that in the joint actuator block the unit of measure is set to deg/s^2. It this case your mechanism will rotate with an increasing velocity. After 1 second of simulation time the velocity will be 2 deg/s. After 2 seconds of simulation time its velocity will be 4 deg/s. and so on. There is no limit to what the velocity will reach, the longer the simulation time the faster your mechanism will spin.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2017-03-12T11:14:52.030" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11847" PostTypeId="2" ParentId="11842" CreationDate="2017-03-12T11:19:15.120" Score="1" Body="&lt;p&gt;For each revolute joint in the robot you can add a joint sensor. The sensors can be configured to output all joint forces and torques. That way you can compute reaction and motor forces and torques for a specified motion or pose of the robot. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please make sure that you carefully select the reference frames for the measurements. &lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2017-03-12T11:19:15.120" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11851" PostTypeId="1" CreationDate="2017-03-13T02:19:34.970" Score="3" ViewCount="383" Body="&lt;p&gt;I have an accelerometer mounted to an inverted pendulum (i.e. a cart-pole robot) which I'm using to measure the tilt angle from the vertical upright position (+y direction).  If the inverted pendulum is held motionless at a fixed angle, the accelerometer essentially detects the gravity direction as a vector $(g_x,g_y)$ and the tilt angle $\theta$ can be determined by&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\theta=tan^{-1}(\frac{g_x}{\sqrt{g_x^2+g_y^2}}).$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, if the inverted pendulum is in motion (e.g. if I'm dynamically trying to balance it like a cart-pole system), the pendulum itself is accelerating the accelerometer in a direction which is not necessarily the gravity direction.  Acceleration from the cart may also distort the measurement of the gravity direction by the accelerometer as well.  In such a case, I don't think the formula above is necessarily appropriate.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, I'm not 100% sure that the swinging motion of the pendulum and the forward-backward motion of the cart are significant enough to distort the angle measurement on the accelerometer.  I presume that if I start with initial conditions close to $\theta=0$ on the pendulum, it shouldn't be that significant.  Nonetheless, if the pendulum is significantly perturbed by a disturbance force, I think the accelerometer's measurements must be compensated in some way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I compensate for pendulum and cart accelerations when using an accelerometer to detect the tilt angle?  &lt;/p&gt;&#xA;" OwnerUserId="2295" LastEditorUserId="2295" LastEditDate="2017-03-14T20:46:19.843" LastActivityDate="2017-11-28T01:41:14.110" Title="How can I compensate for pendulum and cart motion when using an accelerometer to detect the tilt angle?" Tags="&lt;sensors&gt;&lt;accelerometer&gt;&lt;balance&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11855" PostTypeId="2" ParentId="11839" CreationDate="2017-03-13T13:58:00.657" Score="7" Body="&lt;p&gt;I still think this is off-topic, but it seems I need more space than a comment to show (answer?) why that is so. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You are starting from some performance specifications and are looking to get to a set of features you need in your camera. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://zone.ni.com/reference/en-XX/help/372916P-01/nivisionconceptsdita/guid-10d358bd-3dcd-4ccd-a73c-672e48aed39a/&quot; rel=&quot;noreferrer&quot;&gt;Here is a post from NI about stereo vision&lt;/a&gt; that gives a formula for depth resolution:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\Delta z = \frac{z^2}{fb}\Delta d \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $z$ is the depth of the object from the stereo system, $\Delta d$ is the depth resolution, $f$ is the focal length of the camera, $b$ is the baseline, and $d$ is the image disparity. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, you want 1% depth resolution at 100 meters, or a depth resolution of 1 meter. A focal length of 8 millimeters, or 0.008 m, and a baseline of 0.5 m.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Rearranging the equation, it looks like you'll need a camera capable of registering a disparity of:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\Delta d = \Delta z \frac{fb}{z^2} \\&#xA;\Delta d = 1 \frac{(0.008)(0.5)}{100^2} \\&#xA;\Delta d = 4 x 10^-7 m \\&#xA;\Delta d = 0.4 \mu m \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming pixel accuracy (not sub-pixel accuracy), you'll want one pixel to be 0.4 $\mu$m or smaller, so the 0.4 $\mu$m disparity is registered as a one pixel shift between cameras. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Image_sensor_format#Table_of_sensor_formats_and_sizes&quot; rel=&quot;noreferrer&quot;&gt;Here's a list of sensor formats and sizes&lt;/a&gt;. I'm assuming these cameras all do &quot;full HD&quot;, at a resolution of 1920x1080. Looking at the 2/3&quot; format, the sensor width is 8.8 mm. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You need to register 0.4 $\mu$m, how does that compare to the 2/3&quot; format? Well, at a width of 0.0088 m, with 1920 pixels across that width, the 2/3&quot; format has a pixel width of $0.0088/1920 = 4.58\mu m$. So, off by a factor of 10. You need the pixel width to be about 11 times smaller. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So let's look at the 1/3&quot; format - as in the iPhone 6. There the width is 4.8mm, so about half as wide, meaning you still need the pixels to be about 5-6 times smaller than the camera sensor in the iPhone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is also assuming you want to use every pixel in a full HD format - this will result in a high computation time. Most of the stereo vision projects I've seen have used cameras with lower resolutions or downsampled the image to a format like 640x480, but of course that means that the pixels are much (3x) larger.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You ask if &quot;IP Cameras&quot; are &quot;proper,&quot; but IP cameras come in lots of styles. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hopefully this will help you as a guide for your iterations. Plainly speaking, I don't think you'll ever find anything (that is reasonably affordable) that would do the depth resolution at the baseline you're talking about. I would imagine the baseline would be more on the range of 5-10 meters to get what you need. At 10 meters, fyi, the pixel size becomes 8 $\mu$m. At that point, most/all of the HD cameras should be able to do what you want, but again HD is computationally expensive because there are so many pixels to correlate. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This will be an iterative process. Work forward and backward and forward and backward until you get the design that meets your needs. You'll find you need to make tradeoffs along the way, and that's the core of engineering - finding the &quot;optimal&quot; balance of specifications. Cost, performance, size, cost, weight, interface, lead time, cost, cost, cost.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-03-13T13:58:00.657" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="11856" PostTypeId="2" ParentId="11839" CreationDate="2017-03-13T16:20:27.747" Score="2" Body="&lt;p&gt;I'll try to explain this in terms of software. Firstly, it is just next to impossible to have 100 metres (practically, 3 metres is like the best depth accuracy) and we need to be sure that the cameras are capturing images properly with all practical features (vibration-free and even under sunlight or rain)! (Else features will be lost and we end up with almost 'plain' features resulting in poor mapping) While it has to deal largely with resolution, color, focal length etc, it is definitely practically impossible with normal IP camera and some specialised stereo-vision cameras may have to be employed as mentioned in Chuck's answer (0.4 micrometer?).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, I would suggest the use of Stereo-vision or Laser scan for reinforcement learning (links not hyper-referenced deliberately).&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&quot;High Speed Obstacle Avoidance using Monocular Vision and Reinforcement Learning&quot; &lt;a href=&quot;http://www.cs.cornell.edu/~asaxena/rccar/icml_obstacleavoidance.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.cs.cornell.edu/~asaxena/rccar/icml_obstacleavoidance.pdf&lt;/a&gt; &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&quot;Depth Estimation using Monocular and Stereo Cues&quot;&lt;br&gt;&#xA;&lt;a href=&quot;https://pdfs.semanticscholar.org/4953/1103099c8d17ea34eb09433688e84de4f35f.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://pdfs.semanticscholar.org/4953/1103099c8d17ea34eb09433688e84de4f35f.pdf&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;These describe detecting features and associating depth-information with every feature and training it continuously for better and even better results. First paper uses LIDAR and that can be a bit costly for you. As 2D LIDAR is being used, the features of the image are sampled in columns and those features are mapped to image-kernels and the depth is thus estimated. In second case, stereo-vision is being used to train (note: this is high quality data as this is used for training) and as we have complete 3D information, features are being trained in a similar fashion as deep-nets and depth information is being obtained by comparing layers of information in image. These techniques can identify upto &lt;a href=&quot;http://www.cs.cornell.edu/~asaxena/learningdepth/ijcv_monocular3dreconstruction.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;50m or so&lt;/a&gt; effectively.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, I would suggest OP about asking a single question instead of asking duplicates like &lt;a href=&quot;https://robotics.stackexchange.com/questions/11770/real-time-stereo-vision-system-for-long-range-up-to-100m-depth-estimation&quot;&gt;this&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Summary: It is practically next to impossible to get 100m depth with off-shelf cameras and no additional softwares.&lt;/p&gt;&#xA;" OwnerUserId="15014" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2017-03-13T16:20:27.747" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11860" PostTypeId="2" ParentId="1997" CreationDate="2017-03-14T02:19:44.573" Score="1" Body="&lt;p&gt;Please correct me if I am wrong. Let's check if the Jacobian matrix loses it's rank (for example using Matlab or Octave). This should indicate the singularity. Then let's try to check the rank of sub-matrices of the Jacobian, to find which degree of freedom is lost.&lt;/p&gt;&#xA;" OwnerUserId="16304" LastActivityDate="2017-03-14T02:19:44.573" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11864" PostTypeId="2" ParentId="11630" CreationDate="2017-03-15T02:59:03.740" Score="0" Body="&lt;p&gt;I'd be (pleasantly) surprised to hear that there is a way to get the output you want based on your available inputs, but this problem seems incomplete. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The most accurate map is the one that gets you to your precise destination. To quantitatively measure that accuracy, you'd have to use your map to navigate from point A to point B, then compare that final position to the one you'd get with the ground-truth map.  It sounds like you only have point A (the origin) defined for both maps, so you have no way to measure point B's error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the very least, you would need to start with a set of points that are defined on both maps. (I say &quot;points&quot; meaning &quot;2 or more&quot;; I can't convince myself that a round-trip measurement -- starting and ending at the origin -- would properly explore the space.)&lt;/p&gt;&#xA;" OwnerUserId="350" LastActivityDate="2017-03-15T02:59:03.740" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11865" PostTypeId="1" AcceptedAnswerId="11871" CreationDate="2017-03-15T04:28:29.657" Score="0" ViewCount="277" Body="&lt;p&gt;void setup() {&#xA;  pinMode(A0, INPUT);&#xA;  Serial.begin(9600);&#xA;}&lt;/p&gt;&#xA;&#xA;&lt;p&gt;void loop() {&#xA;  if (digitalRead(A0)== HIGH) {&#xA;    Serial.println(&quot;YES&quot;);&#xA;  }&#xA;}&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not giving any input when i am supplying input via push button. I have 5 v supply through 10 kohm resistor to push button and then have other side to A0 and a led to ground. It takes input when I take out wire connected to A0 and just leave it unconnected.&lt;/p&gt;&#xA;" OwnerUserId="16402" LastActivityDate="2017-03-15T14:03:39.483" Title="Arduino uno A0 pin not working properly" Tags="&lt;arduino&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11869" PostTypeId="2" ParentId="11865" CreationDate="2017-03-15T12:58:18.083" Score="1" Body="&lt;p&gt;The A0 pin is an analog pin, so you'd have to use &lt;code&gt;analogRead()&lt;/code&gt;, which would give you a value. If you want to use &lt;code&gt;digitalRead()&lt;/code&gt; and compare it to &lt;code&gt;HIGH&lt;/code&gt;/&lt;code&gt;LOW&lt;/code&gt;, use a digital pin.&lt;/p&gt;&#xA;" OwnerUserId="14902" LastActivityDate="2017-03-15T12:58:18.083" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11870" PostTypeId="1" AcceptedAnswerId="11881" CreationDate="2017-03-15T13:48:38.330" Score="2" ViewCount="188" Body="&lt;p&gt;For a home robotics project I just bought a &lt;a href=&quot;http://ozzmaker.com/product/berryimu-accelerometer-gyroscope-magnetometer-barometricaltitude-sensor/&quot; rel=&quot;nofollow noreferrer&quot;&gt;BerryIMU&lt;/a&gt; to connect it to my Raspberry Pi. After hooking it up I ran the &lt;a href=&quot;https://github.com/mwilliams03/BerryIMU/blob/master/python-BerryIMU-gryo-accel-compass/berryIMU.py&quot; rel=&quot;nofollow noreferrer&quot;&gt;provided Python code&lt;/a&gt; to read out some values while moving it around.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I keep the IMU (more or less) straight and in Northern direction I get the following line of output:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ACCX Angle  0.60 &#xA;ACCY Angle  4.58       &#xA;GRYX Angle -125.14  &#xA;GYRY Angle 114.15  &#xA;GYRZ Angle 93.74     &#xA;CFangleX Angle -0.26   &#xA;CFangleY Angle  4.45  &#xA;HEADING   1.02  &#xA;tiltCompensatedHeading  3.73  &#xA;kalmanX  0.48   &#xA;kalmanY  4.43&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I am most interested in the compass (in 360 degrees), and how much it tilts right/left and front/back.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as I understand, the &lt;code&gt;tiltCompensatedHeading&lt;/code&gt; tells me that it points 3.73 degrees right of the magnetic north. And I think &lt;code&gt;kalmanX&lt;/code&gt; and &lt;code&gt;kalmanY&lt;/code&gt; should give me the tilting of the IMU to the left/right (X) and to the front/back (Y) (compensated by a Kalman filter for smoothening).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I played around with it and saw what the numbers did. In the images below I look slightly down on it. I hope the description on it explains how you see it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/LUPkL.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/LUPkL.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From what you see here the X and Y degrees independently behave as I would expect them to. But what I don't understand is why &quot;the other one&quot; is always between 90 and 130. So if I tilt it 90 degrees forward I would expect &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;X ≈ 0&#xA;Y ≈ 90&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;similarly, if I tilt it 90 degrees backward, I would expect &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;X ≈ 0&#xA;Y ≈ -90&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Instead &lt;code&gt;X&lt;/code&gt; is around &lt;code&gt;100&lt;/code&gt; for both of them and I really don't understand why it's not around &lt;code&gt;0&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anybody see the logic in this? What am I missing?&lt;/p&gt;&#xA;" OwnerUserId="1050" LastActivityDate="2017-03-17T14:32:47.500" Title="Why does one IMU axis influence another?" Tags="&lt;sensors&gt;&lt;kalman-filter&gt;&lt;imu&gt;&lt;gyroscope&gt;&lt;noise&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="11871" PostTypeId="2" ParentId="11865" CreationDate="2017-03-15T14:03:39.483" Score="1" Body="&lt;p&gt;As an alternative to &lt;a href=&quot;https://robotics.stackexchange.com/a/11869/9720&quot;&gt;ChrisVolkoff's answer&lt;/a&gt;, you may not be getting a high enough voltage to reach the ON threshold. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your circuit is setup:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[Vin]-----[10k Resistor]---[switch]---[pin]---[LED]---[Gnd]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The forward bias of the LED is generally about 1.8 volts so, when you push the switch, the voltage at the pin is only about 1.8 volts. Typically, with a boolean pin, &quot;HIGH&quot; is triggered for voltages above about 60% of Vin, &quot;LOW&quot; is triggered for voltages below about 30% of Vin, and anything in between is unreliable and, depending on the system, either ignored or may be counted as high or low.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My advice would be to put the 10k resistor between the input pin and the LED, so when you close the switch the input pin is reading 5V. If you don't want the full 5V on the pin, then you could set up a voltage divider by putting one smaller resistor between 5V and the pin, and another one (the remainder of the 10k of resistance you were originally using) between the pin and the LED. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not familiar enough with the Arduino to know what your maximum allowable voltage is on the input pin (5V or 3.3V), so we'll consider a couple cases. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, is that you're allowed to put 5V on the input pin. In that case, just move the full 10k between the input pin and the LED:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[Vin]----[switch]---[pin]---[10k Resistor]---[LED]---[Gnd]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second is that you're only allowed 3.3V on the input pin. In this case, I would suggest you first measure voltage at the positive end of the LED when the circuit is completed. 1.8V is a general assumption; it might be different based on LED color. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You want 3.3V, but there is some voltage drop at the LED that fixes the &quot;minimum&quot; voltage you can get - let's call it V_LED. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you want to do is to make up the difference between V_LED and 3.3V to get 3.3V on the input pin. Your input voltage is 5V, so you want a voltage divider that gives you:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(5V to 3.3V) on the high end&#xA;(3.3V to V_LED) on the low end. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The total voltage drop should be (5V to V_LED), so you want one resistor that is&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(5V-3.3V)/(5V-V_LED) * 10k&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and one resistor that is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(3.3V - V_LED)/(5V-V_LED) * 10k&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming again that V_LED is 1.8V, this means that you should get:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;R_1 = \frac{5-3.3}{5-1.8}*10k\Omega \\&#xA;R_1 = \frac{1.7}{3.2}*10k\Omega \\&#xA;R_1 = 5.3 k\Omega \\&#xA;$$&#xA;$$ &#xA;R_2 = \frac{3.3-1.8}{5-1.8}*10k\Omega \\&#xA;R_2 = \frac{1.5}{3.2}*10k\Omega \\&#xA;R_2 = 4.7 k\Omega \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[Vin]-----[switch]-----[5.3k Resistor]----[pin]----[4.7k Resistor]---[LED]---[Gnd]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can see, $R_1 + R_2 = 10k\Omega$, so you still get the 10k resistance you need for the LED, but now the voltage at the input pin is 3.3V instead of the 1.8V (or V_LED, whatever it measures to be). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general, when you are trying to measure a HIGH input value, you should attempt to send the nominal HIGH voltage that the input is expecting. Trying to send borderline values (minimum value for HIGH, etc.) is begging for trouble. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2017-03-15T14:03:39.483" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="11874" PostTypeId="1" AcceptedAnswerId="11883" CreationDate="2017-03-16T01:18:28.270" Score="1" ViewCount="236" Body="&lt;p&gt;I am creating a biped robot with an arduino and I have the lower part of the body complete, the legs and hip joints. Before I am going to 3D print the top part of the body I wanted to make sure that it would walk. So when I started the walking tests I could not get the robot to go onto one foot no matter what I tried. The foot would just raise up the body and not lift the other foot here is a picture of what is happening:&lt;a href=&quot;https://i.stack.imgur.com/ZIo2Y.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZIo2Y.jpg&quot; alt=&quot;What is happening&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and this is what I want to happen:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/02Ll0.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/02Ll0.jpg&quot; alt=&quot;What I want to happen&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does it just need more weight on the top or is there a specific sequence of movements that I can do? I have two hip servo that moves left and right, a knee servo and a foot servo that move side to side.&lt;/p&gt;&#xA;" OwnerUserId="16413" LastEditorUserId="37" LastEditDate="2018-08-15T15:21:58.643" LastActivityDate="2018-08-15T15:21:58.643" Title="Biped Robot not getting on one foot" Tags="&lt;mobile-robot&gt;&lt;arduino&gt;&lt;rcservo&gt;&lt;walking-robot&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11876" PostTypeId="2" ParentId="11874" CreationDate="2017-03-16T13:48:10.190" Score="3" Body="&lt;p&gt;You got the second picture by physically manipulating the robot to get the center of mass above the rotated foot. What you need to do is to get the robot to shift its own center of mass in a similar fashion. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should do some research into &lt;a href=&quot;https://en.wikipedia.org/wiki/Support_polygon&quot; rel=&quot;nofollow noreferrer&quot;&gt;support polygons&lt;/a&gt;. The center of mass of the robot is not above the polygon made by the contact area between the foot and ground. In order to shift the center of mass that far, I think you'll find that you need to move the hip joints and ankle joints in tandem to shift the floor-leg-hip-leg quadrilateral from a rectangle to a parallelogram, or you'll need to make one leg shorter (e.g., bend the knee) to shift the same quadrilateral to a trapezoid. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once the center of mass is above the foot, then you can take corrective/restorative action to finish in the pose you desire. For example, you would roll one ankle out and adduct the hip on the same leg, while simultaneously rolling the other ankle in and abducting that hip. Once the center of mass is over the foot, put the hips back in position, then put the other ankle back in position. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-03-16T13:48:10.190" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11877" PostTypeId="1" AcceptedAnswerId="12497" CreationDate="2017-03-16T13:54:20.723" Score="2" ViewCount="325" Body="&lt;p&gt;I am stuck with understanding how can I make my robot move along planned path. For instance, if we have a grid map of an environment and applied, for example, A* to plan a path then after that we have to make our robot move through each cell in our path. Assuming that we know center coordinates of cells, the task is to generate control commands which will lead robot along the trajectory. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have two differential wheeled robot so equations of motion are going to be like these, where &lt;code&gt;b&lt;/code&gt; is a distance between wheels:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$v = \frac{1}{2}(v_{1}+v_{2})\\&#xA;\dot\theta=\frac{1}{b}(v_{2}-v_{1})\\&#xA;\theta = \frac{\delta t}{b}(v_{2}-v_{1}) + \theta_{0}\\&#xA;\dot x = v\cos(\theta)\\&#xA;\dot y = v\sin(\theta)\\&#xA;x = x_{0} + \frac{b(v_{1}+v_{2})}{2(v_{2}-v_{1})}(\sin(\theta)-\sin(\theta_{0}))\\&#xA;y = y_{0} - \frac{b(v_{1}+v_{2})}{2(v_{2}-v_{1})}(\cos(\theta)-\cos(\theta_{0}))&#xA;$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Suppose that we can control speeds of both wheels therefore we are able to set any possible angular and linear velocities. So what actually I have to do with these equations to make robot move through each cell?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Moreover there may be different constraints like moving with constant linear speed etc. I understand that I have to solve these equations somehow.&#xA;Will appreciate practical advises, certain names of algorithms and etc. Thanks!  &lt;/p&gt;&#xA;" OwnerUserId="15392" LastEditorUserId="15392" LastEditDate="2017-03-16T17:47:31.613" LastActivityDate="2017-05-31T15:00:13.827" Title="Motion planning and robot controlling" Tags="&lt;mobile-robot&gt;&lt;control&gt;&lt;wheeled-robot&gt;&lt;motion-planning&gt;&lt;motion&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11878" PostTypeId="1" CreationDate="2017-03-17T00:09:43.293" Score="2" ViewCount="6451" Body="&lt;p&gt;I'm trying to apply modified DH parameters (from Craig's version) to Puma 560.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As per modified DH says,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/AKkP1.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/AKkP1.jpg&quot; alt=&quot;Modified DH Parameter Convention&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And the robot Puma 560 with axes and frame are,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/4IZ4x.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4IZ4x.png&quot; alt=&quot;Puma 560&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As per above sign convention, the sign of d2 and d3 should be negative. However, for the correct result, it seems that the sign of d2 should be positive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is, should the sign here be positive and if yes, then doesn't it contradict the sign convention for above mentioned modified DH convention?&lt;/p&gt;&#xA;" OwnerUserId="16407" LastEditorUserId="16407" LastEditDate="2017-03-17T00:22:11.387" LastActivityDate="2020-12-25T08:55:41.540" Title="Modified DH Parameter for Puma 560" Tags="&lt;dh-parameters&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11880" PostTypeId="2" ParentId="11877" CreationDate="2017-03-17T09:51:32.113" Score="1" Body="&lt;p&gt;I found what I was looking for. It is called &lt;a href=&quot;http://www.scielo.br/scielo.php?pid=S0103-17592008000400003&amp;amp;script=sci_arttext&quot; rel=&quot;nofollow noreferrer&quot;&gt;tangential escape&lt;/a&gt;. In general it is used to move from point A to point B avoiding obstacles, but as we have already planned path we can omit the last part.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The idea is to define the model in polar coordinates which describes distance to a target and the angle between current position and target position, therefore our aim is to set $\rho = 0, \alpha=0$. After that use this model with Lyapunov function:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$V(\rho, \alpha) = \frac{1}{2}\rho^{2} + \frac{1}{2}\alpha^2$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is necessary that derivative of $V$ must be negative in order to make the system stable. Then inserting our model into $\dot V$ we can find such linear and angular velocities functions that will make our derivative negative. Finally we will get these equations for them:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\begin{cases}&#xA;v=v_{max}\tanh\rho\cos(\alpha)\\&#xA;w=k_{w}\alpha+v_{max}\frac{\tanh\rho}{\rho}\sin(\alpha)\cos(\alpha),k_{w}&amp;gt;0&#xA;\end{cases}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It may seem like a hard math but actually just read the &lt;a href=&quot;http://www.scielo.br/scielo.php?pid=S0103-17592008000400003&amp;amp;script=sci_arttext&quot; rel=&quot;nofollow noreferrer&quot;&gt;original article&lt;/a&gt; carefully.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://m.habrahabr.ru/post/277829/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here&lt;/a&gt; you can find example of code at the very end of the article. This article is written in Russian but nevertheless code examples might appear to be very useful.&lt;/p&gt;&#xA;" OwnerUserId="15392" LastEditorUserId="15392" LastEditDate="2017-03-17T10:06:17.580" LastActivityDate="2017-03-17T10:06:17.580" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11881" PostTypeId="2" ParentId="11870" CreationDate="2017-03-17T12:32:31.003" Score="1" Body="&lt;p&gt;The problem is estimating angles in regions of instability. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let us look at equations used for estimation of pitch and roll angles. For aerospace rotation sequence e.g. $xyz$:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\tan(roll)=\frac{G_{y}}{G_{z}}\\&#xA;\tan(pitch)=\frac{-G_{x}}{\sqrt{G_{y}^2+G_{z}^2}}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now imagine that you rotated IMU around $y$ axis by 90 degrees so that $G_{x}=-g, G_{y}=0, G_{z}=0$ and look at the first equation. Since both parts of it are close to zero, $atan(\frac{\approx 0}{\approx 0})$, inverse tangent deals almost only with noise therefore you get unpredicted results. The second equation is $atan(\frac{g}{\approx0})=\frac{\pi}{2}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the $yxz$ rotation sequence so the equations are:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\tan(roll)=\frac{G_{y}}{\sqrt{G_{x}^2+G_{z}^2}}\\&#xA;\tan(pitch)=\frac{-G_{x}}{G_{z}}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This way your region includes cases when $y$ axis points upwards or downwards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The possible solution is to modify unstable equations, for $yxz$ it would be:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\tan(pitch)=\frac{-G_{x}}{sign(G_{z})\sqrt{G_{z}^2+\mu G_{y}^2}}$ where $\mu$ is a small scale factor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Adding small amount of $G_{y}$ will prevent  denominator from being zero ever. And it can be shown that until you are in unstable region the values estimated by original and modified equations are almost equal. However when we are in unstable region, pitch becomes just an approximation but still very close to the true result.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Actually I can not understand why you have wrong results in both cases: rotating around $x$ axis and $y$ axis. If we rotate sensor around $x$ axis  so that $G_{x} = 0, G_{y}=g, G_{z} = 0$ and insert them into $xyz$ equations we will get $roll=atan(\frac{g}{\approx 0}) \approx \frac{\pi}{2}$ and $pitch=atan(\frac{\approx 0}{g})\approx0$. This case is stable as you can see.&lt;/p&gt;&#xA;" OwnerUserId="15392" LastEditorUserId="15392" LastEditDate="2017-03-17T14:32:47.500" LastActivityDate="2017-03-17T14:32:47.500" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11882" PostTypeId="2" ParentId="11878" CreationDate="2017-03-17T13:10:09.160" Score="1" Body="&lt;p&gt;I'm not sure if there's a typo in your question (maybe you're asking the question after working in a zero-based programming language?) but you're asking about the signs of d2 and d3, but I don't see a d2 anywhere in Picture 1 or Table 1. Do you mean d3 and d4? I'll assume this is the case for the answer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider your statement,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\mbox{Offset length, } d_i \mbox{ is the distance from } x_{i-1} \mbox{ to } x_{i} \mbox{ measured along } z_i \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, &lt;em&gt;start&lt;/em&gt; at $x_{i-1}$, go to $x_i$, and compare the direction you're going to the direction that $z_i$ points. If you're moving in the same direction, it's positive. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, I get that both $d_3$ and $d_4$ are &lt;em&gt;positive&lt;/em&gt;; here's my work:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/UvzN2.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/UvzN2.png&quot; alt=&quot;Modified DH parameter orientation&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Again, in the top image I'm comparing the line &lt;em&gt;from&lt;/em&gt; $x_2$ &lt;em&gt;to&lt;/em&gt; $x_3$ to the orientation of $z_3$. They point in the same direction, so $d_3$ is &lt;em&gt;positive&lt;/em&gt;. The same goes for the bottom graphic. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-03-17T13:10:09.160" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="11883" PostTypeId="2" ParentId="11874" CreationDate="2017-03-17T15:18:20.917" Score="2" Body="&lt;p&gt;You might be able to use the the opposite foot to begin the rotation of your chassis, but it will be dependent on your chassis and foot geometry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using your photos for reference, the left foot would push up beginning the chassis rotation, while the right foot would rotate simultaneously.  At some point the center-of-gravity (CoG) would shift enough so that the remainder of the chassis rotation could be done only on the right root.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a similar robot. It has an extra DoF, but if you ignore the knee joint, it is similar to your design.  These pictures show the basic idea.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Exaggerated rotation of opposite foot only:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/7zry8.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7zry8.png&quot; alt=&quot;Exaggerated Pose&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Rotation of both feet simultaneously:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Z9XtL.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Z9XtL.png&quot; alt=&quot;Normal Pose&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Whether or not this will work for you is dependent on a few things:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;If your legs are too far apart (hip too wide), then this might not work because the opposite foot will never be able to help shift CoG enough that the primary foot can take over and keep balance.&lt;/li&gt;&#xA;&lt;li&gt;Your foot joint location and geometry must be such that it can initiate enough of the rotation. &#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Consider that you can rotate the opposite foot in either direction to start the shift, and if the joint is not centered on the foot, then the direction you rotate the foot will change the amount of much leverage available to that foot.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Your opposite foot servo must have enough power to begin the chassis rotation by lifting a portion of the machine.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="167" LastActivityDate="2017-03-17T15:18:20.917" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11884" PostTypeId="2" ParentId="4632" CreationDate="2017-03-17T16:39:19.090" Score="1" Body="&lt;p&gt;I found, that carefully filing the shaft down to 2mm will make it a perfect fit for lego gears. &#xA;You will have to file the flat sides. You can check uniformity of your work by light reflection. The shaft indentation in the front works as center guide, so you take off from both sides evenly. You also might have to slightly round the edges. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you don't like that, try an adapter: check whether your local library has a 3d printer (some are setting up science labs for kids). &#xA;There are a handful adapters for this motor (lego, round axis, servo,..) which you can download and print on a 3d printer. &lt;/p&gt;&#xA;" OwnerUserId="16419" LastActivityDate="2017-03-17T16:39:19.090" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11885" PostTypeId="1" AcceptedAnswerId="12180" CreationDate="2017-03-17T18:18:36.730" Score="2" ViewCount="5257" Body="&lt;p&gt;I am using the ros_arduino_bridge to control a robot, by connecting the Arduino to a main pc with a usb cable. I was thinking of using the Arduino with main pc with a serial cable and then doing real time control of the Arduino by using the real time clock. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it possible to communicate with the Arduino in hard real time by using the real time clock and serial connections? I want to use Arduino board as a bridge between the main computer and the sensor and motors. And i want to control those sensors and motors in real time. All the high level processing tasks like computer vision and motion planning will be running in the main computer which then sends the commands to motors from the Arduino. So it is just acting like a bridge. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason I want hard real time is so that my robot can control its joints at very high and accurate speed so that the robot can do human level tasks like running, jumping, assembling some parts, balancing its body while moving(walking, running, jumping) at any speed (which requires the joints to be controlled at very high speed and accuracy) etc. I will be using gazebo simulator to test most of the tasks.&lt;/p&gt;&#xA;" OwnerDisplayName="user14148" LastEditorUserId="184" LastEditDate="2017-04-21T12:53:07.547" LastActivityDate="2017-04-21T13:46:14.903" Title="Is it possible to use an arduino in hard real time" Tags="&lt;arduino&gt;&lt;ros&gt;&lt;real-time&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11886" PostTypeId="2" ParentId="6581" CreationDate="2017-03-17T18:25:47.193" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Kinect is an active 3D depth estimation setup that employs IR laser&#xA;  structured patterns for Depth calculation and are reliable for Indoor&#xA;  applications only.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Whereas,&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Stereo Camera setup is a passive 3d depth estimation setup that&#xA;  typically involves use of Stereo calibration procedure in order to&#xA;  compute projection matrix that will transform a 2D point(generally&#xA;  observed in left camera) into a 3D point in the left camera coordinate&#xA;  system(assuming left camera is at origin[0,0,0]). These stereo camera&#xA;  setups performs way better than Kinect in case of outdoor&#xA;  applications.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="16421" LastActivityDate="2017-03-17T18:25:47.193" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11887" PostTypeId="1" CreationDate="2017-03-17T21:16:11.583" Score="1" ViewCount="1335" Body="&lt;p&gt;In continuation of my question on modified parameter for Puma 560 posted here &lt;a href=&quot;https://robotics.stackexchange.com/questions/11878/modified-dh-parameter-for-puma-560&quot;&gt;Modified DH Parameters for Puma 560&lt;/a&gt;. Further I used a available dimension for Puma 560 here (FYI: the figure shows dimension in inches, but all following dimensions in DH parameters for length are converted to mm), [&lt;img src=&quot;https://i.stack.imgur.com/SjXiJ.png&quot; alt=&quot;Dimension for Puma 560]&quot;&gt; and trial version of RoboDK simulator to check my result. I assigned the frame as show in the figure from first link, the last link is placed to the flange in the figure below with z6 pointing downward while keeping x6 in same direction as x5. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the DH parameter looked liked, &#xA;    double alpha[6] = { 0, -90, 0, -90, 90, -90 };&#xA;    double a[6] = { 0, 0, 431.80, 0, 0, 0 };&#xA;    double d[6] = { 0, 0, 139.7, 433.07, 0, 55.88 };&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I started with joint angles (theta) &#xA;double theta[6] = { 0, 0, 0, 0, 0, 0 };&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My calculations give me same position as Puma 560 simulator except z values are negatives. Correct position for joint angles of zeroes is x = 431.800, y = 139.700, z = 489.580. I get x = 431.800, y = 139.700, z = -489.580.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But if I put double d[6] = { 0, 0, 139.7, -433.07, 0, -55.88 }; then I get the correct value, x = 431.800, y = 139.700, z = 489.580.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tested with other joint angles, for which I am getting correct values with negative -433.07 and -55.88 in above. So, they must be negatives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is, why I have to take negative values for d to get correct result? Does this is because the value in this case should be assigned as per base frame (all value above base frame is assigned positive and all below should be assigned negative irrespective of convention.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Base frame is located at same position as frame 1 (refer to the top most link) I used the same procedure as described in &quot;Introduction to Robotics&quot; by J.J. Craig. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt; below is the codes I am using for the computation. Alpha and theta is converted to radians.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    ////// Craig Matrix - Modified DH Parameters Convention&#xA;    mat[0] = cos(theta);&#xA;    mat[1] = -1 * sin(theta);&#xA;    mat[2] = 0;&#xA;    mat[3] = a;&#xA;&#xA;    mat[4] = sin(theta) * cos(alpha);&#xA;    mat[5] = cos(theta) * cos(alpha);&#xA;    mat[6] = -1 * sin(alpha);&#xA;    mat[7] = -1 * sin(alpha) * d;&#xA;&#xA;    mat[8] = sin(theta) * sin(alpha);&#xA;    mat[9] = cos(theta) * sin(alpha);&#xA;    mat[10] = cos(alpha);&#xA;    mat[11] = cos(alpha) * d;&#xA;&#xA;    mat[12] = 0;&#xA;    mat[13] = 0;&#xA;    mat[14] = 0;&#xA;    mat[15] = 1;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Above codes will give a 4 x 4 DH transformation matrix for each frame as per Modified DH conventions (Refer to Modified DH parameters on Wikipedia or J.J. Craig book, the matrix is defined there.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, we multiply all matrices as per, &lt;a href=&quot;https://i.stack.imgur.com/vggHY.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vggHY.png&quot; alt=&quot;order of multiplication&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;starting with matrix for frame 6 on the right hand side and multiplying it with preceding joint from left hand side. Repeating the same sequence as noted above. This should give as the location of origin of frame 6 with respect to the base frame of the robot.&lt;/p&gt;&#xA;" OwnerUserId="16407" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2017-08-17T15:12:21.990" Title="Modified DH Parameters for Puma 560 - Wrong Results" Tags="&lt;dh-parameters&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="11888" PostTypeId="2" ParentId="11885" CreationDate="2017-03-18T01:42:13.850" Score="0" Body="&lt;p&gt;Are you willing to put an RTOS on the Arduino, or do you want to make your program deterministic with bare metal code?   If you are willing to use an RTOS, there are several to choose from.  For example, FreeRTOS and RTuinOS are available.  Check out this Dr Dobbs article from a couple of years ago for some additional options:   &lt;a href=&quot;http://www.drdobbs.com/embedded-systems/arduino-real-time/240165395&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.drdobbs.com/embedded-systems/arduino-real-time/240165395&lt;/a&gt;. &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2017-03-18T01:42:13.850" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="11889" PostTypeId="1" AcceptedAnswerId="11969" CreationDate="2017-03-18T05:22:15.837" Score="1" ViewCount="484" Body="&lt;p&gt;I am working on obstacle avoidance and path planning in robotics using X80SV robot. The obstacle avoidance module of the robot works well. The programming language I have used in this work is C#. Next, I wanted to visualize the real-time motion of the robot. What should be done? The robot is equipped with ultrasonic sensors, infrared sensors, camera, human sensors etc. &lt;/p&gt;&#xA;" OwnerUserId="15503" LastActivityDate="2017-03-29T13:27:40.067" Title="How to Visualize a real robot's movements on a map?" Tags="&lt;mobile-robot&gt;&lt;path-planning&gt;&lt;visualization&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11890" PostTypeId="2" ParentId="11835" CreationDate="2017-03-18T19:01:53.683" Score="1" Body="&lt;p&gt;Having your &quot;real&quot; measurement, particles' state and model of taking &quot;virtual&quot; measurements from particles, you can define multivariate Gaussian and exploit it in order to get your probability.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Multivariate normal distribution has density function:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$f(x) = \frac{1}{\sqrt{(2\pi)^{k} |\boldsymbol{\sum}|}}\exp(-\frac{1}{2}(x-u)^{T}\sum^{-1}(x-u))$ where $x$ and $u$ are measurements vectors of size [k x 1] and $\sum$ is a covariance matrix of size [k x k]. As $u$ you use your &quot;real&quot; measurements taken by robot, as for $x$, it contains &quot;virtual&quot; measurements taken from particles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your case you have 5 measurements so $x$ is going to have a size of [5 x 1] and $\sum$ --- [5 x 5]. Since measurements are independent, off-diagonal elements of covariance matrix are going to be zeros and diagonal elements define how uncertain your measurements are. So covariance matrix looks like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\sum = &#xA;\begin{bmatrix}&#xA;q_{0} &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0\\ &#xA;0 &amp;amp; q_{1} &amp;amp; 0 &amp;amp; 0 &amp;amp; 0\\&#xA;0 &amp;amp; 0 &amp;amp; q_{2} &amp;amp; 0 &amp;amp; 0\\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; q_{3} &amp;amp; 0\\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; q_{4}\\&#xA;\end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And because all your measurements are taken by the same LIDAR $q = q_{0} = ... =q_{4}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now having a state of your particle you can obtain &quot;virtual&quot; measurement and feed it to your density function and as an output you will get the probability $p(z|x)$ which describes how likely this &quot;virtual&quot; measurement  is your &quot;real&quot; measurement. Then based on that probability you can resample your particles.&lt;/p&gt;&#xA;" OwnerUserId="15392" LastEditorUserId="15392" LastEditDate="2017-03-25T05:45:40.873" LastActivityDate="2017-03-25T05:45:40.873" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="11891" PostTypeId="1" AcceptedAnswerId="11892" CreationDate="2017-03-18T20:50:18.607" Score="1" ViewCount="773" Body="&lt;p&gt;I am using arduino with FreeRTOS and a computer with patched xenomai linux. I am using python library called pyserial to communicate with arduino. Right now I am using simple servo motors. I want to be sure that whether the communication between the arduino and my main computer is real time or not. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I check this, properly. I want hard real time communication between arduino and computer for balancing robot.&lt;/p&gt;&#xA;" OwnerDisplayName="user14148" LastEditorUserId="7066" LastEditDate="2017-03-18T21:21:46.240" LastActivityDate="2017-03-18T21:21:46.240" Title="Is pyserial real time" Tags="&lt;arduino&gt;&lt;ros&gt;&lt;python&gt;&lt;real-time&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11892" PostTypeId="2" ParentId="11891" CreationDate="2017-03-18T21:21:08.093" Score="0" Body="&lt;p&gt;pyserial and more generally python is not suited to hard real time systems, as it was simply not designed for that application, due to duck typing and other runtime provisions cannot provide deterministic latency. Depending on what you want to do you can write all your hard real time subsystems in C or some other system that is suitable for hard realtime systems and then do data processing in the background in python. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could test this behaviour by sending a byte, having pyserial read it and do some operation (say multiply them by 2) and spit the serial string back out. You could then probe the TX and RX lines on an oscilloscope and find the latency between the first byte in and the first byte out and I would guess that you would see a jitter of 1ms or more, in most hard real time systems I have worked with the jitter is below 10us (100 times less).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Though for a balancing robot you might find that that latency and jitter is acceptable, I would suggest you try it out and see how it works and if it does not work for you then move on to writing your code in a language that is suited for Hard Realtime.&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2017-03-18T21:21:08.093" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="11895" PostTypeId="1" CreationDate="2017-03-19T03:12:48.813" Score="0" ViewCount="457" Body="&lt;p&gt;I create a simple simulink model using Matlab Function block to calculate angles of 4 dof robotic arm using Robotic toolbox Matlab while input is x, y and z values. I used forward kinematics to calculate angles. Model and error is shown in below images:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/fJHDv.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fJHDv.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/ciEkN.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ciEkN.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My code is given below (which is put in matlab funcrion block):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;function [theta1,theta2,theta3,theta4]=invkin(px,py,pz)&#xA;% code to find inverse kinematics solution for 4 dof rootic arm&#xA;preach = [px py pz]; % reach point of end-effector&#xA;theta1 = 0;  theta2 = 0; theta3 = 0; theta4 = 0;&#xA;% create links using D-H parameters&#xA;L(1) = Link([ 0 0 0 pi/2 0], 'standard');&#xA;L(2) = Link([ 0 .15005 .4318 0 0], 'standard');&#xA;L(3) = Link([0 .0203 0 -pi/2 0], 'standard');&#xA;L(4) = Link([0 .4318 0 pi/2 0], 'standard');&#xA;%define link mass&#xA;L(1).m = 4.43;&#xA;L(2).m = 10.2;&#xA;L(3).m = 4.8;&#xA;L(4).m = 1.18;&#xA;%define center of gravity&#xA;L(1).r = [ 0 0 -0.08];&#xA;L(2).r = [ -0.216 0 0.026];&#xA;L(3).r = [ 0 0 0.216];&#xA;L(4).r = [ 0 0.02 0];&#xA;%define link inertial as a 6-element vector&#xA;%interpreted in the order of [Ixx Iyy Izz Ixy Iyz Ixz]&#xA;L(1).I = [ 0.195 0.195 0.026 0 0 0];&#xA;L(2).I = [ 0.588 1.886 1.470 0 0 0];&#xA;L(3).I = [ 0.324 0.324 0.017 0 0 0];&#xA;L(4).I = [ 3.83e-3 2.5e-3 3.83e-3 0 0 0];&#xA;% set limits for joints&#xA; L(1).qlim=[deg2rad(-160) deg2rad(160)];&#xA; L(2).qlim=[deg2rad(-125) deg2rad(125)];&#xA; L(3).qlim=[deg2rad(-270) deg2rad(90)];&#xA; L(4).qlim=[deg2rad(-170) deg2rad(110)];&#xA;   %build the robot model&#xA;  rob = SerialLink(L, 'name','Puma56');&#xA;  qready = [0 -pi/4 pi/4 0]; % initial position of robot&#xA;T1= transl(preach); % convert of reach point of 4x4 homogenous matrix&#xA;[qreach,err,exitflag] =  rob.ikcon(T1, qready); % find inverse kinematics with error&#xA;%rob.fkine(qreach);&#xA;theta1 = qreach(1,1);  theta2 = qreach(1,2); theta3 = qreach(1,3); theta4 = qreach(1,4);&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;How to solve these errors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="14024" LastEditorUserId="14024" LastEditDate="2017-03-20T21:56:42.660" LastActivityDate="2019-07-23T17:04:46.670" Title="Error when using Matlab Function block in Simechanics (nested functions and parsing of Matlab function both error)" Tags="&lt;robotic-arm&gt;&lt;matlab&gt;&lt;simulation&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11897" PostTypeId="1" AcceptedAnswerId="11905" CreationDate="2017-03-19T10:07:48.207" Score="2" ViewCount="25736" Body="&lt;p&gt;How can i make pyserial read and write at same time or at same program? Right now i only know how to either write or to read but not both simultaneiously. So how can i do it? I tried this simple code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;int incomingByte = 0;&#xA;&#xA;void setup() {&#xA;&#xA;Serial.begin(9600); // opens serial port, sets data rate to 9600 bps&#xA;&#xA;}&#xA;&#xA;void loop() {&#xA;&#xA;incomingByte = Serial.read(); // read the incoming byte:&#xA;&#xA;Serial.print(&quot; I received:&quot;);&#xA;&#xA;Serial.println(incomingByte);&#xA;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and python program is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;import serial&#xA;ser = serial.Serial('/dev/ttyACM0',9600)&#xA;ser.write(&quot;333&quot;)&#xA;ser.close()&#xA;ser.open()&#xA;data = ser.readline()&#xA;print data&#xA;ser.close()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerDisplayName="user14148" LastActivityDate="2019-11-27T20:27:56.560" Title="how to read and write data with pyserial at same time" Tags="&lt;arduino&gt;&lt;serial&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11898" PostTypeId="2" ParentId="11895" CreationDate="2017-03-19T12:32:14.737" Score="0" Body="&lt;p&gt;In Simulink the Matlab embedded function block supports only a subset of the available commands in Matlab. If you want to use external functions, you have to declare these using &lt;a href=&quot;https://www.mathworks.com/help/simulink/slref/coder.extrinsic.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;coder.extrinsic()&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the problem is with nested functions and not with declaring the external function, you could try to de-nest the function, by simply deleting the 'value' function from the file it is defined in and create a new, separate file for the function on the same path. Please keep in mind that this is a workaround, not really a fix. &lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2017-03-20T18:03:42.663" LastActivityDate="2017-03-20T18:03:42.663" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11899" PostTypeId="1" AcceptedAnswerId="11900" CreationDate="2017-03-19T21:43:02.257" Score="5" ViewCount="301" Body="&lt;p&gt;I am planning to build a omnidirectional holonomic robot, and checking what I should use for the hardware, I saw many people using a Raspberry to compute most stuff, which in turn calls an Arduino to control the motors. But since the Arduino will have to drive some H-bridges, and the board computer is probably a lot more powerful, it seems to me that those drivers for the motors could be controlled by the Raspberry-ish board.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What am I missing?&#xA;Why so many people use both at the same time?&lt;/p&gt;&#xA;" OwnerUserId="10795" LastActivityDate="2017-03-20T01:15:55.523" Title="Why to combine a Raspberry Pi (or similar board computer) and an Arduino for controlling motors?" Tags="&lt;arduino&gt;&lt;control&gt;&lt;motor&gt;&lt;raspberry-pi&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11900" PostTypeId="2" ParentId="11899" CreationDate="2017-03-20T01:15:55.523" Score="5" Body="&lt;p&gt;The reason is Clock on the Raspberry Pi. Note that the raspberry is powerful but not that powerful that it can run an OS and simultaneously give you precisely timed PWM outputs. I assume that you'll be handling the motors with PWM on the Enable pin on the motors.&#xA;Reasons:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;As stated, it is more on getting precise PWM outputs on for the motor driver. The Arduino as a slave controller drive it better.&lt;/li&gt;&#xA;&lt;li&gt;Sure the Raspi is powerful but it is advised to keep the computationally expensive task on the Board and leave everything to the slave controller to ensure an isolation between two.&lt;/li&gt;&#xA;&lt;li&gt;A small reason is also to ensure that running higher voltages(9V,12V) and currents(sometimes &gt;1000 mA) shouldn't damage your more expensive and OS running board.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Have stated the same in my &lt;a href=&quot;http://techspirityou.blogspot.com&quot; rel=&quot;noreferrer&quot;&gt;blog&lt;/a&gt; for my ball tracker.&lt;/p&gt;&#xA;" OwnerUserId="11048" LastActivityDate="2017-03-20T01:15:55.523" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11901" PostTypeId="1" AcceptedAnswerId="11906" CreationDate="2017-03-20T01:53:38.230" Score="0" ViewCount="2410" Body="&lt;p&gt;Suppose I have a Robot Arm with 3 joint(revolute)( 3 DOF) as shown below , and I'm given &lt;/p&gt;&#xA;&#xA;&lt;p&gt;-The ranges of each joint q1,q2,q3&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-The lengths of each link L1,L2,L3&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-Load on the end effector [Fx Fy M]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;how can I calculate the max torque at each joint of the robot ? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;*image below describes the robot configuration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I missed any details , mention it in a comment and I will add it .&#xA;Thanks in advance&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/8Vdu2.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8Vdu2.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="16431" LastEditorUserId="16431" LastEditDate="2017-03-20T14:32:02.973" LastActivityDate="2017-03-20T17:01:30.340" Title="How to get Max Torque on Robot arm 's Joints (RRR)" Tags="&lt;robotic-arm&gt;&lt;matlab&gt;&lt;torque&gt;&lt;jacobian&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11902" PostTypeId="2" ParentId="11897" CreationDate="2017-03-20T12:02:21.137" Score="0" Body="&lt;p&gt;What you're looking for is called &quot;full duplex&quot; serial, in that you want to read and write at the same time. In looking around, it appears that this would typically be done with distinct &lt;a href=&quot;https://stackoverflow.com/a/8808218/5171120&quot;&gt;threads&lt;/a&gt;, where one is doing the writing and the other is independently doing the reading. Unfortunately, &lt;a href=&quot;https://arduino.stackexchange.com/a/288&quot;&gt;you can't multithread with the Arduino&lt;/a&gt;. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="-1" LastEditDate="2017-05-23T12:37:11.430" LastActivityDate="2017-03-20T12:02:21.137" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11904" PostTypeId="2" ParentId="11887" CreationDate="2017-03-20T12:50:28.447" Score="1" Body="&lt;p&gt;I think the problem is with your simulator. You said,&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Base frame is located at same position as frame 1 (refer to the top most link)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;And, from the &lt;a href=&quot;https://robotics.stackexchange.com/q/11878/9720&quot;&gt;previous question you asked&lt;/a&gt;, there is the following picture where I have highlighted the first frame:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/xOcyM.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xOcyM.png&quot; alt=&quot;Global coordinates&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So here you can see how the global frame is oriented. Now, compare the global/world frame to the end effector location:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/g7QcM.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/g7QcM.png&quot; alt=&quot;Relative location&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You've got the coordinates clearly labeled now on these drawings and you can, at a glance, see what the end effector's &lt;em&gt;position&lt;/em&gt; is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You move along the positive x axis 17 inches, you move along the positive y axis 5.5 inches, and you move along the NEGATIVE z axis (17.05 + 2.2) inches. So, &lt;em&gt;per your drawing&lt;/em&gt;, the output you're calculating is correct; it should be +17,+5.5,-19.25 inches, or +431.8,+139.7,-488.95 mm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My suggestion to you would be to find the discrpancy in your simulator. It looks like there's an offset somewhere on your z-axis measurement. I would say that maybe the base frame there is considered the base of the robot, but that doesn't make sense per the x/y coordinates. Your x/y values are pretty close to equal, which means the end effector should be located close to a (+/-) 45 degree line from the origin. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2017-03-20T12:50:28.447" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="11905" PostTypeId="2" ParentId="11897" CreationDate="2017-03-20T13:40:55.313" Score="2" Body="&lt;p&gt;It's not entirely clear what you mean by &quot;write and read at the same time&quot; because that can refer to different contexts.  It can be confusing because people tend to mix the meanings of full-duplex/half-duplex when switching back-and-forth in discussion of the hardware and software layers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;True full-duplex serial communications requires hardware level support. Separately, to make use of full-duplex communications, your serial library and program itself must be written to support full-duplex.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most simpler two-way serial devices will only respond after receiving a command. For example, you send a command (write), and then expect a response (read). This is sometimes referred to as half-duplex and this is what your current program example is doing. However, you shouldn't be closing and reopening the serial port.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the serial device you are working with is such that you can write at any time &lt;em&gt;and&lt;/em&gt; you can independently expect to receive something from the device at any time, then you are working with a full duplex serial device.  In that case, your options are either multi-threading or doing writing/reading sequentially without the reads blocking your program indefinitely.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Multithreaded programming with python is possible on most arduinos. (Again, this gets confusing. Another answer here indicated that arduinos do not support multithreading. That is true for most arduinos at the hardware level. But there are ways to simulate multithreading at the software level, and python does this.)  A multi-threaded solution to your problem can get complex. Here are some examples though:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/questions/14487151/pyserial-full-duplex-communication&quot;&gt;https://stackoverflow.com/questions/14487151/pyserial-full-duplex-communication&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://github.com/headrotor/Python-Arduino-example&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/headrotor/Python-Arduino-example&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;If multi-threading is not available to you, then you can use a single thread where the writes are before reads, and the reads are done only if bytes are available or with a short timeout. Psuedo program loop:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Is there data to write? If so, write it.&lt;/li&gt;&#xA;&lt;li&gt;Attempt to read anything that has been received since last time tried to read.&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If serial library/hardware can provide &quot;bytes available&quot; on the read line, check that to determine if you should try reading anything.&lt;/li&gt;&#xA;&lt;li&gt;If library/hardware can not provide &quot;bytes available&quot; on the read line, then set a short time out for the read. This will block program until timeout waiting for anything to come in. If bytes do come in, start processing them.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Loop (or if nothing to do, sleep a little to prevent 100% cpu)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The single thread approach works as long as your hardware read buffers are large enough to hold the inbound data until you are able to read it and clear the buffer. Examples:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/questions/19908167/reading-serial-data-in-realtime-in-python&quot;&gt;https://stackoverflow.com/questions/19908167/reading-serial-data-in-realtime-in-python&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://forum.arduino.cc/index.php?topic=297609.0&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://forum.arduino.cc/index.php?topic=297609.0&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;If going with this approach, be aware that while &lt;a href=&quot;https://pythonhosted.org/pyserial/shortintro.html#readline&quot; rel=&quot;nofollow noreferrer&quot;&gt;readLine&lt;/a&gt; is probably safe, using &lt;a href=&quot;http://pyserial.readthedocs.io/en/latest/pyserial_api.html#serial.Serial.read&quot; rel=&quot;nofollow noreferrer&quot;&gt;read(size&gt;1)&lt;/a&gt; can be non trivial when using a timeout, because it's possible that timeout will occur before a complete multi-byte &quot;message&quot; has been received.&lt;/p&gt;&#xA;" OwnerUserId="167" LastEditorUserId="-1" LastEditDate="2017-05-23T12:37:11.430" LastActivityDate="2017-03-20T13:48:43.767" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11906" PostTypeId="2" ParentId="11901" CreationDate="2017-03-20T17:01:30.340" Score="3" Body="&lt;p&gt;Torque is pretty easy to calculate for a single static arm configuration.  Torque is just the length of the moment arm * the perpendicular force.  And it is easy to decompose the problem into X and Y components, then sum.  So in your example you would have the torque about joint 1 to be:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;T_1 = a * F_y + b * F_x&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Assuming $F_x$ and $F_y$ are in the global frame).  You don't list the masses of the links, (which is typically not negligible), but you would want to add those in too.  You should check out this &lt;a href=&quot;http://www.societyofrobots.com/robot_arm_calculator.shtml&quot; rel=&quot;nofollow noreferrer&quot;&gt;arm torque calculator&lt;/a&gt;.  The &lt;a href=&quot;http://www.societyofrobots.com/robot_arm_tutorial.shtml&quot; rel=&quot;nofollow noreferrer&quot;&gt;robot arm tutorial&lt;/a&gt; on that same site also has lots of helpful info.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For very complicated arms or dynamic situations, you might want the help of some code.  See my answers to these other similar questions for pointers.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/2889/static-equilibrium-for-7-dof-manipulator/&quot;&gt;Static equilibrium for 7 dof manipulator&lt;/a&gt; &lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/10256/dynamic-torque-simulation-for-a-6-dof-robotic-arm&quot;&gt;Dynamic torque simulation for a 6 DOF robotic arm&lt;/a&gt; &lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/7837/type-of-servo-and-torque-calculation-required-for-a-2axis-robot-arm&quot;&gt;Type of servo and torque calculation required for a 2axis robot arm&lt;/a&gt; &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="110" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2017-03-20T17:01:30.340" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11907" PostTypeId="2" ParentId="11895" CreationDate="2017-03-20T19:32:57.077" Score="1" Body="&lt;p&gt;After looking closer at your code, I'll reiterate my comment - why are you doing this in Simulink? I'll make your code briefer for clarity:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;function [theta]=invkin(px,py,pz)&#xA;theta = 0;&#xA;L = &amp;lt;const&amp;gt;;&#xA;preach = &amp;lt;const&amp;gt;;&#xA;rob = f(L);&#xA;qready = &amp;lt;const&amp;gt;;&#xA;T1= f(preach);&#xA;qreach = f(rob,T1,qready);&#xA;theta = qreach;&#xA;end;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So,&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;You aren't using the inputs at all.&lt;/li&gt;&#xA;&lt;li&gt;You're constantly resetting &lt;code&gt;theta&lt;/code&gt; to zero at the start of the script, so if you did happen to make the inputs time-varying, I don't think the time-varying output would be what you want because you're not progressing through time. Your script would run a complete simulation at every call. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Imagine plotting this from a Matlab script - &lt;code&gt;plot(time,theta)&lt;/code&gt; - again, there's no time dependence here. You just have one value, &lt;code&gt;theta&lt;/code&gt;, that describes the joint angles required to achieve the desired end effector position. Your plot would be a horizontal line. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would imagine this might be contributing to the &lt;a href=&quot;https://www.mathworks.com/matlabcentral/answers/330602-error-when-using-matlab-function-block-in-simechanics-nested-functions-and-parsing-of-matlab-functi#comment_438477&quot; rel=&quot;nofollow noreferrer&quot;&gt;trouble you're having implementing the fix you were given&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2019-07-23T17:04:46.670" LastActivityDate="2019-07-23T17:04:46.670" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="11909" PostTypeId="1" CreationDate="2017-03-20T23:09:24.337" Score="1" ViewCount="835" Body="&lt;p&gt;I came to know that matlab released robotics system toolbox in 2016 version but I'm using Matlab 2014b. At that time I installed Peter Corke Robotics toolbox matlab and start working on it. I develop few GUI and wrote others code too using the same Peter Corke Robotics toolbox. But now I want to install new official version of robotics toolbox. But my doubt is if I install new version then what happen to older one. Will I  able to run my old codes (which used old toolbox) on matlab after installing new official version or it may vanish older one. Will matlab shows error in my codes or GUI after installing new version. I want to work with both toolbox.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="14024" LastEditorUserId="21223" LastEditDate="2019-08-03T23:30:03.753" LastActivityDate="2019-08-03T23:30:03.753" Title="About official robotics system toolbox Matlab and Peter Corke Robotics toolbox matlab" Tags="&lt;robotic-arm&gt;&lt;matlab&gt;&lt;robotics-toolbox&gt;&lt;robotics-system-toolbox&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="11910" PostTypeId="1" CreationDate="2017-03-21T03:36:17.417" Score="1" ViewCount="122" Body="&lt;p&gt;I am working on an estimation application for multiple robots, each of which uses measurements from various sources to calculate position and orientation data. For now, I am looking at about three sources: &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Orientation from an IMU&lt;/li&gt;&#xA;&lt;li&gt;Both position and orientation from a camera&lt;/li&gt;&#xA;&lt;li&gt;Position and orientation from relative measurements w.r.t another robot.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Naturally, the most widely used technique that combines a model with measurements is something like an EKF. But in my case, the orientation data (IMU) comes from an autopilot, which already has an EKF onboard, and hence provides covariance estimates as well. The vision based estimation (both individual and relative) are computed through a few iterations of bundle adjustment, and the bundle adjustment solver also provides covariance of its resultant estimate. Finally, I am not really interested in utilizing a complex, non linear model for the robot, but mostly in just fusing the measurements to provide one final pose estimate. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have read about the concept of &lt;a href=&quot;https://en.wikipedia.org/wiki/Covariance_intersection&quot; rel=&quot;nofollow noreferrer&quot;&gt;'covariance intersection'&lt;/a&gt; in the context of Kalman filtering, which has been implemented in cooperative pose estimation using multiple data sources. I was wondering if I could get some advice as to whether Kalman filters etc. would still be applicable in my case, and if so, how to adapt them?&lt;/p&gt;&#xA;" OwnerUserId="10310" LastActivityDate="2017-03-21T03:36:17.417" Title="Help with fusing multiple measurements with known covariances" Tags="&lt;localization&gt;&lt;kalman-filter&gt;&lt;pose&gt;" AnswerCount="0" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11913" PostTypeId="1" CreationDate="2017-03-21T14:50:07.697" Score="2" ViewCount="68" Body="&lt;p&gt;I am doing a project to build an autonomous lawn mower and I need to decide several type of sensor to complete the features. one of my features is the vehicles need to stop running when someone held it on the air. so i decide to use 9 DOF IMU for this features. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;as i know that 9 DOF IMU already have 3 axes magnetometer that can read the angular yaw position. so i just confused that do I still need to add another gyro sensor to make sure that my lawn mower do a turning 180deg? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks for any words on this.  &lt;/p&gt;&#xA;" OwnerUserId="16441" LastActivityDate="2017-03-21T15:41:48.867" Title="Do I need gyro sensor to make sure my automower turn 180deg if I already used 9DOF IMU?" Tags="&lt;imu&gt;&lt;gyroscope&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11914" PostTypeId="2" ParentId="11913" CreationDate="2017-03-21T15:41:48.867" Score="1" Body="&lt;p&gt;A 6 DOF IMU refers to 3-axis accelerometers and 3-axis gyroscopes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A &lt;a href=&quot;http://en.wikipedia.org/wiki/unmanned_aerial_vehicle#Sensors&quot; rel=&quot;nofollow noreferrer&quot;&gt;9 DOF IMU&lt;/a&gt; refers to a 6 DOF IMU plus a 3-axis magnetometer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since you already have 3-axis gyroscopes in your 9 DOF IMU, adding another gyro sensor would be redundant.&#xA;You don't need it.&lt;/p&gt;&#xA;" OwnerUserId="187" LastActivityDate="2017-03-21T15:41:48.867" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11915" PostTypeId="1" AcceptedAnswerId="12422" CreationDate="2017-03-22T01:52:58.983" Score="0" ViewCount="343" Body="&lt;p&gt;I came across the paper(link given below) which discusses about bounded deviation joint path for straight line motion. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Planning and Execution of Straight Line Manipulator Trajectories (RH Taylor)&#xA;&lt;a href=&quot;https://pdfs.semanticscholar.org/e01a/58608f4e68f31c7b9e7cdbddceae645727bb.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://pdfs.semanticscholar.org/e01a/58608f4e68f31c7b9e7cdbddceae645727bb.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this method, the assumption is that the maximum deviation happens at or near the midpoint between the start and end point. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) Is this assumption true in all cases? &#xA;2) Even if the assumption may not be true, will resulting trajectory be a straight line if this method is used for trajectory planning?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope someone shed some light on this. Thank you.&lt;/p&gt;&#xA;" OwnerUserId="10435" LastActivityDate="2017-07-21T06:23:48.910" Title="bounded deviation for straight line motion" Tags="&lt;motion-planning&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11916" PostTypeId="2" ParentId="11915" CreationDate="2017-03-22T02:07:12.660" Score="0" Body="&lt;p&gt;I don't know about the algorithms for a lot of industrial manipulators, but I suspect that the two main approaches cited by Taylor: that of velocity control by Whitney, and that of rapid position computational updates by Paul, are still primary approaches taken.   Note that the computing power to calculate these inverse solutions is magnitudes higher with today's robots compared with 1979.   The drawbacks of Paul's approach using 100ms updates are likely eliminated since we can update more than 10 times as quickly now.   The important innovations over the past two decades, in my opinion, are related to incorporating advanced dynamic models into manipulator control.  We kind of take for granted the ability to compute positions or velocities much more rapidly than is required for accurate kinematics.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2017-03-22T02:07:12.660" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11919" PostTypeId="1" CreationDate="2017-03-22T15:38:02.977" Score="1" ViewCount="788" Body="&lt;p&gt;A I wanting to build a robotic hand, a big one at that. Similar to this one but in a much larger scale:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.instructables.com/id/DIY-Robotic-Hand-Controlled-by-a-Glove-and-Arduino/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.instructables.com/id/DIY-Robotic-Hand-Controlled-by-a-Glove-and-Arduino/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does it really matter how large the servo is, just as long as it has a power source? Or are there other things I need to know?&lt;/p&gt;&#xA;" OwnerUserId="16453" LastActivityDate="2017-03-22T17:34:45.243" Title="Can an arduino control a large servo motor?" Tags="&lt;arduino&gt;&lt;robotic-arm&gt;&lt;servomotor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11920" PostTypeId="2" ParentId="11919" CreationDate="2017-03-22T17:34:45.243" Score="1" Body="&lt;p&gt;It does matter how large/small the servo is.&lt;br&gt;&#xA;The bigger you get (in the arm), the more you will have to account for the inertia of the moving arm.&#xA;There are a lot of types of servos... from micro ones, to really big ones.&#xA;I would suggest building the current arm as-is, and then actually building the bigger one.&lt;/p&gt;&#xA;" OwnerUserId="15912" LastActivityDate="2017-03-22T17:34:45.243" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="11922" PostTypeId="1" CreationDate="2017-03-22T20:56:16.657" Score="0" ViewCount="758" Body="&lt;p&gt;I'm working on an assignment where I need to derive IK for 5 DOF Youbot kuka robotic arm manipulator&lt;a href=&quot;http://www.youbot-store.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;official website&lt;/a&gt;. I'm using inverse kinematics decoupling and following a geometrical approach using simulink and matlab. The answer of the IK problem is 5 angles but when I apply those angles to the forward kinematics I'm receiving a different coordinates. Is that normal or am I supposed to get the exact coordinates?&#xA;I'm using the following Matlab code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; function [angles, gripperOut, solution] = IK(pos,toolangle,gripperIn)&#xA;l=[0.147 0.155 0.135 0.081 0.137];&#xA;x = pos(1);&#xA;y= pos(2);&#xA;z = pos(3);&#xA;&#xA;surfangle = toolangle(2);&#xA;&#xA; theta1= atan2(y,x); % atan2(y/x) for theta1&#xA; s=z-l(2); %  S = Zc - L2&#xA; r=sqrt(x.^2+y.^2)-l(1);&#xA; D = (r^2 + s^2 -l(3)^2 -l(4)^2)/2*l(3)*l(4);&#xA; %D = (pow2(r)+pow2(s) -pow2(l(3)) -pow2(l(4)))/2*l(3)*l(4);&#xA; D2 = sqrt(1-D.^2); &#xA;if D2&amp;lt;0&#xA;    theta3 = 0;&#xA;    theta2 = 0;&#xA;    solution = 0;&#xA;else&#xA; theta3=atan2(D2,D);&#xA; theta2=atan2(r,s)-atan2(l(4)*sin(theta3),l(3)+l(4)*cos(theta3));&#xA; solution = 1;&#xA;end&#xA;&#xA;%  R35 = subs(R35,[theta(1) theta(2) theta(3)],[theta1 theta2 theta3]);&#xA;%  theta4=atan2(R35(1,3),R35(3,3));&#xA;%  theta5=atan2(R35(2,1),R35(2,2));&#xA;&#xA;theta4 = surfangle-theta2-theta3; &#xA;theta4 = atan2(sin(theta4),cos(theta4));&#xA;theta5 = toolangle(1);&#xA;&#xA; angles=[theta1 theta2 theta3 theta4 theta5];&#xA; if(solution == 0)&#xA;    angles = [0 0 0 0 0];&#xA;end&#xA;&#xA; gripperOut = gripperIn;&#xA;&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;as shown I'm kind of fixing the last two angles for the tool so I can avoid using the subs command which is not supported for code generation.&#xA;Any help would be very appreciated. &lt;/p&gt;&#xA;" OwnerUserId="2525" LastActivityDate="2017-12-20T15:54:32.367" Title="Inverse kinematic solution not giving the same forward kinematics answer" Tags="&lt;inverse-kinematics&gt;&lt;matlab&gt;&lt;kuka&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="11923" PostTypeId="2" ParentId="11922" CreationDate="2017-03-22T23:37:18.533" Score="1" Body="&lt;p&gt;Debugging this situation can be done pretty easily - or at least you can easily narrow down the possible problems.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, plug the joint angles you received from your inverse kinematics algorithm into your forward kinematics equations.   Do they provide the same end effector coordinates that you entered into your inverse kinematics routine?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If not, you have an error in either the forward or inverse equations.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If, however, the end effector coordinates are the same, then you have found a different &lt;em&gt;pose&lt;/em&gt; of the robot.  Perhaps your solution has the robot's base turned 180 degrees and it is reaching back over its shoulder.   Or, the elbow may be either below or above the line connecting the shoulder and wrist.   Or, the wrist may be angled either down or up.   You need to pay attention to the multiple angles which can result in the same answer for atan2, acos, and asin.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2017-03-22T23:37:18.533" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11924" PostTypeId="1" CreationDate="2017-03-23T20:00:21.487" Score="2" ViewCount="392" Body="&lt;p&gt;For a University project I have to use computer vision to detect small drones within 40 feet. I know there exists a pixycam for this purpose, but I was not happy with it, when I used it for CV.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a normal digital camera which is 16 Megapixels (pic &amp;amp; video), which I don't use anymore. Before I dissect the camera, I was wondering if it is practically possible to train this digital camera for computer vision - detecting small flying drones.  Any thoughts on this - using a digital camera for CV? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks &lt;/p&gt;&#xA;" OwnerUserId="16467" LastActivityDate="2017-05-03T12:21:52.023" Title="Using Standard Digital camera for Computer Vision" Tags="&lt;computer-vision&gt;&lt;cameras&gt;&lt;stereo-vision&gt;&lt;machine-learning&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11931" PostTypeId="2" ParentId="11400" CreationDate="2017-03-24T14:50:35.200" Score="0" Body="&lt;p&gt;At first it is important to understand the double pendulum problem as a hybrid system. To solve these kinds of task a combination of a finite state machine plus mathematical equations are the best way. On page 26 of &lt;a href=&quot;https://deepblue.lib.umich.edu/bitstream/handle/2027.42/43263/11044_2005_Article_269.pdf?sequence=1&amp;amp;isAllowed=y&quot; rel=&quot;nofollow noreferrer&quot;&gt;On-Line Symbolic Constraint Embedding for Simulation of Hybrid Dynamical Systems&lt;/a&gt; is a automaton given which consists of three modes: double-pendulum, slider-crank and stuck. Additional sourcecode in Matlab are not given, but this paper is the way to go.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A sourcecode for a simpler version (the single pendulum problem) is the following:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;def fsmstart(self):&#xA;  # strategy: if pole is on 180 Degree, move in other direction&#xA;  for i in range(10000):&#xA;    a1=self.angPole()&#xA;    pygame.time.wait(50)&#xA;    a2=self.angPole()&#xA;    middle=False&#xA;    if a1&amp;gt;160 and a1&amp;lt;200: middle=True&#xA;    direction=&quot;left&quot;&#xA;    if a2&amp;lt;a1: direction=&quot;right&quot;&#xA;    if middle==True: &#xA;      print direction&#xA;      if direction==&quot;right&quot;: self.setspeed(0, .7) # move left&#xA;      if direction==&quot;left&quot;: self.setspeed(0, -.7) # move right&#xA;      pygame.time.wait(500)&#xA;      self.setspeed(0, 0) &#xA;def angPole(self):&#xA;  return self.getangle(4)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2017-03-24T14:50:35.200" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11932" PostTypeId="2" ParentId="11439" CreationDate="2017-03-24T15:42:25.363" Score="1" Body="&lt;p&gt;Using PID control in Line Follower of course require you to define the Error value for every condition of sensors, treat empty line just like straight line: which is 0 error. You should provide more info about your sensor setup, though it is better to have many sensors aligned in the front of the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;following is simple illustration example of the error look-up table based on sensors reading if you have 8 sensors, bit 1 represents reading of black Line:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sensor   : error&#xA;11000000 :-3&#xA;01100000 :-2&#xA;00110000 :-1&#xA;00011000 : 0&#xA;00000000 : 0 # line gap&#xA;00001100 :+1&#xA;00000110 :+2&#xA;00000011 :+3&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;with 0 error, PID calculation should result in straight forward move&lt;/p&gt;&#xA;" OwnerUserId="16472" LastActivityDate="2017-03-24T15:42:25.363" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11934" PostTypeId="1" CreationDate="2017-03-24T15:58:48.653" Score="0" ViewCount="851" Body="&lt;p&gt;I am trying to make a robotic arm that mimics the movement of the user's arm, They way I need it to work is to detect nerve signals and send them to an arduino. The arduino would then have a servo motor mimic the movement of the user's arm when the arduino tells it how quickly to rotate and to what point to rotate, based on the user's input.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any ideas on how this can be done?&lt;/p&gt;&#xA;" OwnerUserId="16453" LastActivityDate="2017-03-25T02:47:27.640" Title="How do you make a device that can pick up nerve signals?" Tags="&lt;arduino&gt;&lt;control&gt;&lt;robotic-arm&gt;&lt;servomotor&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2017-03-27T15:41:13.677" ContentLicense="CC BY-SA 3.0" />
  <row Id="11935" PostTypeId="1" AcceptedAnswerId="11936" CreationDate="2017-03-25T00:37:47.723" Score="0" ViewCount="28" Body="&lt;p&gt;Position control versus  torque control. What method is commonly used in industral manipulators&lt;/p&gt;&#xA;" OwnerUserId="16478" LastActivityDate="2017-03-25T01:59:08.407" Title="What method is commonly used in industral manipulators" Tags="&lt;torque&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2017-03-27T15:39:38.170" ContentLicense="CC BY-SA 3.0" />
  <row Id="11936" PostTypeId="2" ParentId="11935" CreationDate="2017-03-25T01:59:08.407" Score="1" Body="&lt;p&gt;In my experience, most pick and place robots use a version of position control, which they augment with feedforward dynamic models for improved speed and reduced errors.   Those robots which maintain contact with the environment (such as grinding, deburring, cutting, etc) usually implement a hybrid force/position control.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2017-03-25T01:59:08.407" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11937" PostTypeId="2" ParentId="11934" CreationDate="2017-03-25T02:47:27.640" Score="1" Body="&lt;p&gt;There are much better solutions to the project which you are trying to accomplish. First off, what I think you are really asking is how to detect muscle movement - not nerve signals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could do this by following the 1st solution shown below, but as you will see this method provides limited feedback and is expensive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;1st way:&lt;/strong&gt; Use Myoware - Myoware is a myoelectric sensor that if placed correctly on the desired muscle will sense its movement. This can be used to signal an actuator from the Arduino. To open and close the fingers the sensor would be placed over the flexor digitorum profundus, to move the elbow joint the sensor would be placed over the triceps, and finally, to move the shoulder joint the sensor could be placed on the pectoralis muscle.&lt;strong&gt;Note that this method is very inefficient and expensive - I am also unsure of how to detect the motion of the users wrist through this&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;2nd way&lt;/strong&gt; Use Accelerometers/gyroscopes - By placing accelerometers and gyroscopes over each section of the user's arm (which are only a couple of bucks each) you can detect the position, speed, acceleration, etc. of the user's motion along multiple different points. This cannot be done through detecting muscle signals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;3rd way&lt;/strong&gt; Use force/IR sensors - This method is not as good as the 2nd solution presented however is certainly better than the first. By placing a force sensor or a very precise IR sensor over the flexor digitorium profundus, the triceps, and the pectoralis, you can detect the movement of the muscle from the skins surface (eg: when the muscle contracts, more force will be applied to the pressure sensor or the distance from the IR sensor will shrink.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;4th way&lt;/strong&gt; Use flexor sensors - Flexor sensors are basically bendy potentiometers. By placing flexor sensors over the user's joints and on each individual finger, you will be able to gain sensory feedback of the position of each joint. The benefit to this is that it allows for more position control (you can control each finger individually), and combined with an accelerometer could also offer information on the speed and acceleration of the movement of each joint.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have used all 4 methods before in similar projects to yours. In my experience, all though seemingly easier, by trying to use feedback from the user's muscles, you sacrifice a lot of control. These muscle detecting sensors are also quite pricey.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;RECOMMENDED SETUP&lt;/strong&gt;&#xA;I highly recommend that you use a gyroscope and accelerometer on the elbow, shoulder, and wrist joints to detect their movement and speed. A potentiometer on each of the user's fingers along with an accelerometer will also allow you to control the position and speed of each finger of the robotic hand.&lt;/p&gt;&#xA;" OwnerUserId="16481" LastActivityDate="2017-03-25T02:47:27.640" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="11941" PostTypeId="1" AcceptedAnswerId="11952" CreationDate="2017-03-26T06:22:39.037" Score="1" ViewCount="912" Body="&lt;p&gt;The outputs of most hobby servos is a spline. To mount a custom gear on the spline so that the servo turns the gear, how should it be best done? I see that some people just screw the gear into the threaded hole in the spline, but wouldn't this be inadequate?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/q38mh.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/q38mh.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It'd just be the bottom of the screw touching the gear.&lt;/p&gt;&#xA;" OwnerUserId="11489" LastEditorUserId="37" LastEditDate="2018-08-15T15:22:40.877" LastActivityDate="2018-08-15T15:22:40.877" Title="Mounting gear on a servo" Tags="&lt;rcservo&gt;&lt;gearing&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11944" PostTypeId="1" AcceptedAnswerId="11955" CreationDate="2017-03-27T06:33:47.737" Score="2" ViewCount="102" Body="&lt;p&gt;Suppose we have an $n$-DOF robot manipulator and let $q \in \mathbf{R}^n$ denotes a robot joint configuration. Then a &lt;em&gt;singular&lt;/em&gt; configuration $q'$ is a configuration at which the Jacobian $J(q')$ does not have maximum rank. Let $S$ be the set of all singular configurations of a given robot&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any (general) result regarding characterization of the set $S$? Any work discussing or answering questions such as &quot;Is $S$ a manifold?&quot;, &quot;Does $S$ contain only isolated points?&quot;, etc.?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So far I have found quite a few work talking about classification of singular configurations. I think they still do not really answer my questions. Can anyone point me to some related stuff?&lt;/p&gt;&#xA;" OwnerUserId="7610" LastActivityDate="2017-03-28T13:07:54.867" Title="How big is the set of kinematics singularities?" Tags="&lt;kinematics&gt;&lt;singularity&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="11946" PostTypeId="1" AcceptedAnswerId="11956" CreationDate="2017-03-27T13:39:06.483" Score="4" ViewCount="2910" Body="&lt;p&gt;I am trying to implement a RL algorithm for an adaptive PID in a robot system. My doubt consists in the creation of the possible states in the problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I mean, I understand quite well the problem when the possible states are door numbers, but I don't know know what to do with PID. Do I have to create a finite number of possible PID values in which the algorithm learns?&lt;/p&gt;&#xA;" OwnerUserId="10539" LastEditorUserId="10748" LastEditDate="2017-04-27T09:31:55.687" LastActivityDate="2017-12-19T16:22:46.277" Title="PID tuning with (Deep) Reinforcement Learning" Tags="&lt;pid&gt;&lt;machine-learning&gt;&lt;reinforcement-learning&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="11947" PostTypeId="1" CreationDate="2017-03-27T14:07:23.340" Score="5" ViewCount="590" Body="&lt;p&gt;I have developed a 7DOF arm for a humanoid robot (see pic below for more details) &#xA;I have implemented the IK using a closed form solution and of course I come up with eight solutions - each one is actually positioning the end effector at the right position and orientation (I implemented the method described in the paper: &lt;a href=&quot;https://www.google.fr/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;cad=rja&amp;amp;uact=8&amp;amp;ved=0ahUKEwi10M-l5_bSAhWTDRoKHSP2B9cQFggcMAA&amp;amp;url=http%3A%2F%2Fwww.golems.org%2Fpapers%2FOFlaherty13-hubo-kinematics-techreport.pdf&amp;amp;usg=AFQjCNHzioDUf5YclQWgxNYxgSti_BadBg&amp;amp;sig2=RpSqZ9veAMRDUJfcjCi8tg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;Kinematics and Inverse Kinematics for the Humanoid Robot HUBO2+&quot;&lt;/a&gt;).&#xA;The question now is how to choose the right one, knowing the fact that the end effector will follow a trajectory. The idea is to compute iteratively the $[N, S, A, P]$ matrix that will be provided to the IK module. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;One solution I am thinking off is to choose the joint solution in the decision table that will minimize the given metrics:&#xA;$$\sum_i (\theta_i^{current} - \theta_i^{next})^2$$&#xA;where $\theta_i^{current}$ represents the the current value of the $i^{th}$ joint and $\theta_i^{next}$ is the computed value in the decision table.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do you think it is the right approach or there are other methods out there to find the best joint solution from the decision table. &#xA;&lt;a href=&quot;https://i.stack.imgur.com/AvKwb.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/AvKwb.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="16030" LastEditorUserId="110" LastEditDate="2017-03-31T14:58:27.473" LastActivityDate="2017-03-31T14:58:27.473" Title="Humanoid robot arm - inverse kinematics - choose joint solutions" Tags="&lt;robotic-arm&gt;&lt;inverse-kinematics&gt;&lt;humanoid&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11948" PostTypeId="1" CreationDate="2017-03-27T19:01:11.167" Score="1" ViewCount="43" Body="&lt;p&gt;Before I buy any arduino products, I want to make sure that I can use this website:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://create.arduino.cc&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://create.arduino.cc&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;to create the code for the arduino. The thing is, I do not know if I can use this to export the code to the arduino. Can someone please tell me if I can use it to program an actual arduino instead of simulating one?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the way, the I do not have an actual computer, just a chromebook thinkpad (lenovo EDU series), so I can not use windows or apple software, it must be usable on the chrome web browser.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="16453" LastActivityDate="2017-03-27T19:29:49.550" Title="I want to code with arduino, but do not have a good computer" Tags="&lt;arduino&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11949" PostTypeId="2" ParentId="11948" CreationDate="2017-03-27T19:29:49.550" Score="1" Body="&lt;p&gt;You need to be able to install the Arduino Plugin for that to work.&#xA;If your computer is based on regular Windows and can run Chrome, that should work fine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your computer is a Chromebook, or Windows RT (for the ARM based surfaces) that will perhaps not work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general, if you can install your own software, it's better to use the Arduino IDE. Most computers, even pretty old ones, should be able to run the Arduino IDE, assuming you can download and install it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you can install the plugin on the website, then yes, the website tool will let you download your compiled code and upload it to a real Arduino board.&lt;/p&gt;&#xA;" OwnerUserId="88" LastActivityDate="2017-03-27T19:29:49.550" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="11950" PostTypeId="2" ParentId="11947" CreationDate="2017-03-27T19:34:56.227" Score="3" Body="&lt;p&gt;That looks like a fun pair of arms :-)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yes, if you already have a known pose, choosing a solution that minimizes movement is a decent choice. The obvious draw-back is that which choice is made for a particular pose then depends on history, which may make validation harder.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another choice would be the one that minimizes the torque (because of gravity/load) on the weaker servos. I notice that you use a MX-28 in the shoulder, but AX-12 in the elbow. With the weight of the gripper and load, and the length of your arms, you should probably not plan on lifting any great weights in that configuration!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was asked to elaborate on &quot;obvious draw-back.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When validating that a mechanical system is safe to use in a particular environment, such as around human beings, you need to be able to validate that the system will never be in a &quot;bad&quot; configuration. When the configuration of time T depends on the configuration in time T-1, then you can't create a closed-form formula that describes exactly where the system will be for a given set of inputs, and thus validation degrades to either assuming the most pessimistic assumptions (everything within the theoretically possible movement range will happen,) or you have to degrade to manual testing, which is notoriously bad at finding rare edge cases.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similarly, when something goes wrong, you're going to have a hard time reproducing the conditions for the failure, so that you can study them, fix them, and then add some kind of test to make sure the failure will never happen again. If the pose of an armature is dependent not just on known current inputs, but on all inputs that have been fed to the robot since power-on, you're going to have to log and study a whole lot more data than if the pose is &quot;closed form.&quot; (For simple time-dependent systems, storing just the output state of time T-1, and the new input state, may be enough to reproduce movement -- consider this for your system.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another option is to say &quot;the system is weak enough to never hurt humans, and it's only for cosmetic display, so if it breaks, there's no money on the line.&quot; That's a fine way of doing systems analysis. In the past, I've designed systems with MX servos, that, because of a bug, moved into interference (stalled against themselves,) and before I could cut power (a few seconds,) the delicate Maxxon motors in those servos had already burned out their brushes, necessitating a $90 replacement for each servo motor. There is an &quot;overheating&quot; and &quot;stalled movement&quot; safety in the controller for the servo, but the timing for those safeties is 5-7 seconds, and the timing for burning out a motor at the highest rated voltage of 4S LiPos is more like 2 seconds...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, validation is not just about keeping humans safe, it's also about saving money. To avoid this, you'll have to guarantee that no link in your arm will interfere with (be blocked by) the body of the robot, or another link of the arm, when you do the iterative solution. When using a closed form solution, you can bake that guarantee into the solution, and rest assured that there will never be such a problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All in all, iterative solutions are SO MUCH SIMPLER, and also often &quot;look better&quot; aesthetically, so many solutions end up doing just that, and living with the, now obvious, draw-backs related to validation :-)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Please accept this answer if you find it to be helpful.)&lt;/p&gt;&#xA;" OwnerUserId="88" LastEditorUserId="88" LastEditDate="2017-03-29T16:06:20.277" LastActivityDate="2017-03-29T16:06:20.277" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11952" PostTypeId="2" ParentId="11941" CreationDate="2017-03-27T19:52:35.150" Score="2" Body="&lt;p&gt;The attachment of something that's screwed in is not so much the screw, as it is the friction between the material around the screw (the &quot;faying surfaces.&quot;)&#xA;If you have good friction, and the load/torque isn't higher than the friction, this will work fine.&#xA;A drop of super glue can also help this along!&#xA;This works with both plastic and metal gears.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another option includes using the stock horn (injection molded) that come with the servo and screwing the gear into that horn. This is the option used by dedicated robotics servos like Dynamixels, although you can also use this with RC hobby servos and the round horns.&#xA;This also works with both plastic and metal gears.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A third option is to laser-cut a hole in the center of your gear (assuming it's made of Delrin or something else that's laser cuttable) with a pattern and diameter that matches the output spline on the servo.&#xA;This only works with laser-cuttable plastics. You can use a washer to keep the gear in place axially.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, you can machine the gears with the right kind of spline. Broaching or wire EDM can generate splines of the right dimension. I wouldn't try to cut it on a mill; the micro-sized end mills are still hard to get small enough, deep enough, and oriented enough to cut a good spline of that size.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pulling up the rear in complexity comes designing your own die cast or injection molding tooling to make the gears matching the spline. Not for those low on cash or time :-)&lt;/p&gt;&#xA;" OwnerUserId="88" LastActivityDate="2017-03-27T19:52:35.150" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11953" PostTypeId="1" CreationDate="2017-03-28T00:42:18.433" Score="1" ViewCount="84" Body="&lt;p&gt;Hey looking for recommendations. Right now I am using a sabertooth 2x25 motor controller for my drive train, receiving signals from a raspberry pi. From what I am seeing online - there is a lot of mixed reviews regarding this sort of setup. Everything seems to be running fine on my end, but I am curious to see what is the best optimal way to interface and program a large DC motor. Reasons why I decided to use a pi was because I needed ROS to be set up with my robot to perform autonomous tasks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I understand that the pi's clock is not powerful enough to give precise PWM output signals, while its running computations at the same time. Is there a board out there that could possibly handle both?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: Around 6A continuous load for the motors, 12 V&lt;/p&gt;&#xA;" OwnerUserId="16507" LastEditorUserId="16507" LastEditDate="2017-03-28T01:19:46.890" LastActivityDate="2017-03-28T01:19:46.890" Title="Single Board Computer/Microcontroller Recommendations for controlling large DC motors?" Tags="&lt;motor&gt;&lt;microcontroller&gt;" AnswerCount="0" CommentCount="5" ClosedDate="2017-03-28T09:35:22.130" ContentLicense="CC BY-SA 3.0" />
  <row Id="11955" PostTypeId="2" ParentId="11944" CreationDate="2017-03-28T02:29:28.840" Score="1" Body="&lt;p&gt;According to &lt;a href=&quot;http://www.dtic.mil/get-tr-doc/pdf?AD=ADA210116&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pai and Leu, 1989&lt;/a&gt;, for a generic manipulator (which includes all 6R robots with a spherical wrist), &lt;em&gt;the set of singular points of rank r are smooth manifolds in joint space of codimension (j - r)(k - r), where j is the dimension of joint space and k is the dimension of task space.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="11125" LastEditorUserId="11125" LastEditDate="2017-03-28T13:07:54.867" LastActivityDate="2017-03-28T13:07:54.867" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="11956" PostTypeId="2" ParentId="11946" CreationDate="2017-03-28T07:53:11.970" Score="3" Body="&lt;p&gt;I read a bit more and realized that in RL states and rewards accept a wide variety of interpretations and this is the real complexity nowadays of this learning problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case of PID values, problem can be formulated as the following:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;imagine a Kp value, it represents a state. Next state could be increase or decrease 0.1. Same with the next state, and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Moreover, in some research problems, when talking not about controllers, but about external efforts, they simplify the problem to three possible states: fixed positive value, fixed negative value or 0 value. It is complicated to apply this idea to controllers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am almost sure that my particular problem could be more easily formulated if I used as states another kind of variables, such as &quot;advancing forward, backwards or not moving&quot;. RL allows it.&lt;/p&gt;&#xA;" OwnerUserId="10539" LastActivityDate="2017-03-28T07:53:11.970" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11957" PostTypeId="2" ParentId="11947" CreationDate="2017-03-28T09:39:38.173" Score="2" Body="&lt;p&gt;You can use differential IK to solve for a set of IK solutions along a given trajectory. The idea is that you use the IK solution of the current time step, to compute an IK solution for the next time step.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Suppose $q$ is your IK solution at the current time step and $x^+$ is the desired end-effector pose at the next time step. You may compute $q^+$ by iteratively updating $q$:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;q \leftarrow q + dq,&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $dq = J^{\dagger}(q)dx$, $J^{\dagger}$ is a pseudo inverse of the Jacobian matrix, and $dx$ is the difference between the current end-effector pose and the desired one. If a solution exists, this procedure should converge in only a few iterations (e.g. less than $10$ iterations). The converged value is taken as $q^+$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An advantage of this method is that in the end you will have a smooth joint trajectory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the way, to select the initial IK solution for the trajectory, you may choose one which is well away from the configuration space boundary so that you wouldn't hit a boundary while following the end-effector trajectory.&lt;/p&gt;&#xA;" OwnerUserId="7610" LastEditorUserId="7610" LastEditDate="2017-03-28T23:49:08.340" LastActivityDate="2017-03-28T23:49:08.340" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11958" PostTypeId="1" CreationDate="2017-03-28T09:50:03.463" Score="0" ViewCount="322" Body="&lt;p&gt;I am trying to implement an indirect/error state kalman filter following &lt;a href=&quot;http://www.iri.upc.edu/people/jsola/JoanSola/objectes/notes/kinematics.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Quaternion kinematics for the error-state Kalman filter&lt;/a&gt;.&#xA;However, instead of modelling the orientation and error in orientation I have chosen to &lt;a href=&quot;http://x-io.co.uk/res/doc/madgwick_internal_report.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;utilize Madwick&lt;/a&gt; to estimate the orientation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is that when I create the transition matrix from the &lt;a href=&quot;http://www.iri.upc.edu/people/jsola/JoanSola/objectes/notes/kinematics.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;first paper&lt;/a&gt; it expects the orientation error which it multiplies with the skew matrix of the measured acceleration and the accelerometer bias (page 40, equation 204). Since I have removed that from my states I can't use it, but then the measured acceleration is never considered (which I assume makes the filter worse). Is there any change I can make to the transition matrix so that it accounts for the acceleration?&lt;/p&gt;&#xA;" OwnerUserId="16509" LastEditorUserId="20709" LastEditDate="2019-04-27T11:57:59.613" LastActivityDate="2021-05-16T17:00:40.053" Title="How to model transition matrix in indirect kalman filter with external orientation estimate" Tags="&lt;kalman-filter&gt;&lt;sensor-fusion&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="11960" PostTypeId="1" CreationDate="2017-03-28T17:15:06.750" Score="1" ViewCount="1444" Body="&lt;p&gt;I want to control a DVD drive's stepper motor with an arduino uno, but at the moment I'm not sure what kind of motor driver will work for that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am currently looking at &lt;a href=&quot;https://www.robotics.org.za/stepper-motor-driver-1a-pololu-original.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this one&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have no idea about the specs of a motor driver, so any help would be greatly appreciated!&lt;/p&gt;&#xA;" OwnerUserId="16514" LastActivityDate="2017-09-01T20:48:41.490" Title="What stepper motor driver to use?" Tags="&lt;arduino&gt;&lt;stepper-motor&gt;&lt;stepper-driver&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11961" PostTypeId="2" ParentId="11960" CreationDate="2017-03-28T19:18:10.493" Score="1" Body="&lt;p&gt;That is a very good choice since DVD motor operate under 2A.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm using the very same driver to manage my DVD drivers also NEMA23.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You just need to take care about trimming the current limit very well and concern about chinese production because they differ between resistors. Note that the original StepStick stepper driver boards use 0.2 Ohm current sense resistors (Rs) while the original Pololu A4988 stepper driver boards uses 0.05 Ohm current sense resistors. However, the Made in China A4988 stepper driver boards use various current sense resistors depending on the manufacturer (usually either 0.05 Ohm, 0.1 Ohm or 0.2 Ohm). The current sense resistors are the two small black components next to the main chip. Compare the pictures above and check the detail below: the green Made in China A4988 board was fit with 0.1 Ohm resistors (labeled with &quot;R100&quot;) while the red StepStick Made in China clone was fit with 0.2 Ohm resistors (labeled with &quot;R200&quot;), while other Made in China A4988 boards may come with 0.05 Ohm (labeled with &quot;R050&quot;) current sense resistors. So it is very important that you closely examine your stepper driver boards and use the exact values for the current sense resistors when calculating the Vref formula (see an example below).&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;A4988 Resistor&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/PzwTd.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/PzwTd.jpg&quot; alt=&quot;A4988 Rsistor&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Tuning motor current:&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Per the A4988 datasheet, the calculation for the maximum trip current is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;I_TripMax= Vref/(8*Rs) &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;With Pololus, the sensing resistors are Rs=0.05 ohm, so a Vref of 0.4 should produce a maximum current of 0.4/(8*0.05)=1A. Clockwise increases the current which will make the motor run hotter and counterclockwise reduces it which will cool it down (see forum thread 159081).&#xA;As another example, aiming for 50% temperature rise on 1A rated steppers by using max 0.7A, so rearrange it as:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Vref = I_TripMax * 8 * Rs&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;or&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; Vref = 0.7A * 8 * 0.05 = 0.280V&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;With a measured Vref of 0.273V, I should expect 0.6825A, and I measured the current through one coil as 0.486A in full step mode, which should be 0.7071 of the full trip current, or I_TripMax= 0.486/0.7071= 0.687A, which seems close enough.&#xA;The Vref signal is accessible as the &quot;VREF&quot; pin on the carriers with voltage regulators, as the through-hole via on the carriers without, and also as the wiper on the trim pot itself on both carriers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;example of a v-ref checking, + probe on the turnpot and - on a ground pin&#xA;Note 1: for StepStick, the Rs=0.2 ohm, so you'd get 4 times the Vref at the same current.&#xA;Note 2: most &quot;Made in China&quot; A4988 Pololu knock-offs have Rs=0.1 ohm&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Example of a v-ref checking, + probe on the turnpot and - on a ground pin&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/fd1QH.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fd1QH.jpg&quot; alt=&quot;example of a v-ref checking, + probe on the turnpot and - on a ground pin&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;How to wire and control your stpper motor:&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Start with the 2 pins on the botton right side for powering the driver, the VDD and Ground pins that we need to connect them to a power supply of 3 to 5.5 V and in your case that will come from your controller, the Arduino Board which will provide 5 V.  The following 4 pins are for connecting the motor. The 1A and 1B pins will be connected to one coil of the motor and the 2A and 2B pins to the other coil of the motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/j0gC9.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/j0gC9.png&quot; alt=&quot;A4988-Wiring-Diagram&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The next two 2 pins, Step and Direction are the pins that we actually use for controlling the motor movements. The Direction pin controls the rotation direction of the motor and we need to connect it to one of the digital pins on our microcontroller, or in our case I will connect it to the pin number 4 of my Arduino Board.  With the Step pin we control the mirosteps of the motor and with each pulse sent to this pin the motor moves one step. So that means that we don’t need any complex programming, phase sequence tables, frequency control lines and so on, because the built-in translator of the A4988 Driver takes care of everything. Here we also need to mention that these 2 pins are not pulled to any voltage internally, so we should not leave them floating in our program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next is the SLEEP Pin and a logic low puts the board in sleep mode for minimizing power consumption when the motor is not in use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next, the RESET pin sets the translator to a predefined Home state. This Home state or Home Microstep Position can be seen from these Figures from the A4988 Datasheet. So these are the initial positions from where the motor starts and they are different depending on the microstep resolution. If the input state to this pin is a logic low all the STEP inputs will be ignored. The Reset pin is a floating pin so if we don’t have intention of controlling it with in our program we need to connect it to the SLEEP pin in order to bring it high and enable the board.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The next 3 pins (MS1, MS2 and MS3) are for selecting one of the five step resolutions according to the above truth table. These pins have internal pull-down resistors so if we leave them disconnected, the board will operate in full step mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/0Ncvl.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0Ncvl.png&quot; alt=&quot;step resolutions&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Don't forget&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;The only thing you need to real concern is if your motor is Unipolar or Bipolar. A4988 are designed to control bipolar stepper motors, but you can set your Unipolar motor as Bipolar.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To make sure about your stepper motor, just look for his datasheet using his product number or model number on Google. If you can't find this, please look how to wire your stepper motor using the following links as source:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.linengineering.com/resources/wiring-connections/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.linengineering.com/resources/wiring-connections/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://reprap.org/wiki/Stepper_wiring&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://reprap.org/wiki/Stepper_wiring&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://digital.ni.com/public.nsf/allkb/B1CC4C64ABBC7D3C86257BC70017B9E2&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://digital.ni.com/public.nsf/allkb/B1CC4C64ABBC7D3C86257BC70017B9E2&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10581" LastEditorUserId="10581" LastEditDate="2017-09-01T20:48:41.490" LastActivityDate="2017-09-01T20:48:41.490" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11962" PostTypeId="1" CreationDate="2017-03-29T02:29:48.663" Score="0" ViewCount="1331" Body="&lt;p&gt;I'm trying to mount a rod on a micro servo's horn. The horn has several 1mm wide through holes. Does anyone know what sort of (tapping?) screws should be used for tapping 1mm plastic holes? Are M1.2 too small since the threads will be just 0.1mm deep?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there canonical approaches to choosing the appropriate self-tapping screw size given hole diameter?&lt;/p&gt;&#xA;" OwnerUserId="11489" LastEditorUserId="37" LastEditDate="2018-08-15T15:14:57.000" LastActivityDate="2018-08-15T15:14:57.000" Title="Mounting on servo horn" Tags="&lt;servomotor&gt;&lt;rcservo&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11963" PostTypeId="1" CreationDate="2017-03-29T04:05:06.933" Score="2" ViewCount="936" Body="&lt;p&gt;I have seen this example ( &lt;a href=&quot;http://in.mathworks.com/matlabcentral/fileexchange/14932-3d-puma-robot-demo/content/puma3d.m&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://in.mathworks.com/matlabcentral/fileexchange/14932-3d-puma-robot-demo/content/puma3d.m&lt;/a&gt;) in file exchange and want to do similar thing with 4 dof rootic arm. I follow below steps. 1. Create a very simple 4 dof roots links using Solid Works and convert it into .stl file (ASCII) by using cad2matdemo.m file and store all data manually. 2. Alter the code according to my requirements. But I'm unable to create 3d model in Matlab GUI. My code is given below.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;function rob3d&#xA;    loaddata&#xA;    InitHome&#xA;        function InitHome&#xA;            % Use forward kinematics to place the robot in a specified&#xA;            % configuration.&#xA;            % Figure setup data, create a new figure for the GUI&#xA;            set(0,'Units','pixels')&#xA;            dim = get(0,'ScreenSize');&#xA;            % fig_1 = figure('doublebuffer','on','Position',[0,35,dim(3)-200,dim(4)-110],...&#xA;            % 'MenuBar','none','Name',' 3D Puma Robot Graphical Demo',...&#xA;            % 'NumberTitle','off','CloseRequestFcn',@del_app);&#xA;            fig_1 = figure('doublebuffer','on','Position',[0,35,dim(3)-200,dim(4)-110],...&#xA;                'MenuBar','figure','Name',' 3D Puma Robot Graphical Demo',...&#xA;                'NumberTitle','off');&#xA;            hold on;&#xA;            %light('Position',[-1 0 0]);&#xA;            light                               % add a default light&#xA;            daspect([1 1 1])                    % Setting the aspect ratio&#xA;            view(135,25)&#xA;            xlabel('X'),ylabel('Y'),zlabel('Z');&#xA;            title('Robot');&#xA;            axis([-1000 1000 -1000 1000 -1000 1000]);&#xA;            plot3([-1500,1500],[-1500,-1500],[-1120,-1120],'k')&#xA;            plot3([-1500,-1500],[-1500,1500],[-1120,-1120],'k')&#xA;            plot3([-1500,-1500],[-1500,-1500],[-1120,1500],'k')&#xA;            plot3([-1500,-1500],[1500,1500],[-1120,1500],'k')&#xA;            plot3([-1500,1500],[-1500,-1500],[1500,1500],'k')&#xA;            plot3([-1500,-1500],[-1500,1500],[1500,1500],'k')&#xA;            s1 = getappdata(0,'Link1_data');&#xA;            s2 = getappdata(0,'Link2_data');&#xA;            s3 = getappdata(0,'Link3_data');&#xA;            s4 = getappdata(0,'Link4_data');&#xA;            s5 = getappdata(0,'Link5_data');&#xA;            a2 = 300;&#xA;            a3 = 300;&#xA;            a4 = 300;&#xA;            d1 = 300;&#xA;            d2 = 50;&#xA;            d3 = 50;&#xA;            d4 = 50;&#xA;            %The 'home' position, for init.&#xA;            t1 = 0;&#xA;            t2 = 0;&#xA;            t3 = 0;&#xA;            t4 = 0;&#xA;            % Forward Kinematics&#xA;            % tmat(alpha, a, d, theta)&#xA;            T_01 = tmat(90, 0, d1, t1);&#xA;            T_12 = tmat(0, a2, d2, t2);&#xA;            T_23 = tmat(0, a3, d3, t3);&#xA;            T_34 = tmat(0, a4, d4, t4);&#xA;            % Each link fram to base frame transformation&#xA;            T_02 = T_01*T_12;&#xA;            T_03 = T_02*T_23;&#xA;            T_04 = T_03*T_34;&#xA;            % Actual vertex data of robot links&#xA;            Link1 = s1.V1;&#xA;            Link2 = (T_01*s2.V2')';&#xA;            Link3 = (T_02*s3.V3')';&#xA;            Link4 = (T_03*s4.V4')';&#xA;            Link5 = (T_04*s5.V5')';&#xA;            % points are no fun to watch, make it look 3d.&#xA;            L1 = patch('faces', s1.F1, 'vertices' ,Link1(:,1:3));&#xA;            L2 = patch('faces', s2.F2, 'vertices' ,Link2(:,1:3));&#xA;            L3 = patch('faces', s3.F3, 'vertices' ,Link3(:,1:3));&#xA;            L4 = patch('faces', s4.F4, 'vertices' ,Link4(:,1:3));&#xA;            L5 = patch('faces', s5.F5, 'vertices' ,Link5(:,1:3));&#xA;            Tr = plot3(0,0,0,'b.'); % holder for trail paths&#xA;            setappdata(0,'patch_h',[L1,L2,L3,L4,L5,Tr]);&#xA;            %&#xA;            set(L1, 'facec', [0.717,0.116,0.123]);&#xA;            set(L1, 'EdgeColor','none');&#xA;            set(L2, 'facec', [0.216,1,.583]);&#xA;            set(L2, 'EdgeColor','none');&#xA;            set(L3, 'facec', [0.306,0.733,1]);&#xA;            set(L3, 'EdgeColor','none');&#xA;            set(L4, 'facec', [1,0.542,0.493]);&#xA;            set(L4, 'EdgeColor','none');&#xA;            set(L5, 'facec', [0.216,1,.583]);&#xA;            set(L5, 'EdgeColor','none');&#xA;            %&#xA;            setappdata(0,'ThetaOld',[0,0,0,0]);&#xA;            %&#xA;        end&#xA;        function T = tmat(alpha, a, d, theta)&#xA;            % tmat(alpha, a, d, theta) (T-Matrix used in Robotics)&#xA;            % The homogeneous transformation called the &quot;T-MATRIX&quot;&#xA;            % as used in the Kinematic Equations for robotic type&#xA;            % systems (or equivalent).&#xA;            %&#xA;            % This is equation 3.6 in Craig's &quot;Introduction to Robotics.&quot;&#xA;            % alpha, a, d, theta are the Denavit-Hartenberg parameters.&#xA;            %&#xA;            % (NOTE: ALL ANGLES MUST BE IN DEGREES.)&#xA;            %&#xA;            alpha = alpha*pi/180;    %Note: alpha is in radians.&#xA;            theta = theta*pi/180;    %Note: theta is in radians.&#xA;            c = cos(theta);&#xA;            s = sin(theta);&#xA;            ca = cos(alpha);&#xA;            sa = sin(alpha);&#xA;            T = [c -s*ca s*sa a*c; s c*ca -c*sa a*s; 0 sa ca d; 0 0 0 1];&#xA;        end&#xA;        function del_app(varargin)&#xA;            delete(fig_1);&#xA;        end&#xA;        function loaddata&#xA;            % Loads all the link data from file linksdata.mat.&#xA;            % This data comes from a Pro/E 3D CAD model and was made with cad2matdemo.m&#xA;            % from the file exchange.  All link data manually stored in linksdata.mat&#xA;            [linkdata1]=load('linksdata.mat','s1','s2','s3','s4','s5');&#xA;            %Place the robot link 'data' in a storage area&#xA;            setappdata(0,'Link1_data',linkdata1.s1);&#xA;            setappdata(0,'Link2_data',linkdata1.s2);&#xA;            setappdata(0,'Link3_data',linkdata1.s3);&#xA;            setappdata(0,'Link4_data',linkdata1.s4);&#xA;            setappdata(0,'Link5_data',linkdata1.s5);&#xA;        end&#xA;    end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Below figure shows desired and actual comes out model.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/DwqYc.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/DwqYc.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All others thing, which may be useful (like linksdata file, sw model etc.) I shared on dropbox. Anybody can accesss from there. Dropox link: &#xA;   &lt;a href=&quot;https://www.dropbox.com/sh/llwa0chsjuc1iju/AACrOTqCRBmDShGgJKpEVAlOa?dl=0&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.dropbox.com/sh/llwa0chsjuc1iju/AACrOTqCRBmDShGgJKpEVAlOa?dl=0&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to know to connect two components in 3d model in Matla gui. Any study about this will be very helpful. Thanks.&lt;/p&gt;&#xA;" OwnerUserId="14024" LastActivityDate="2019-05-15T18:46:26.627" Title="Using 3D graphics animate the robot in Matlab GUI" Tags="&lt;robotic-arm&gt;&lt;matlab&gt;&lt;simulation&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11964" PostTypeId="1" CreationDate="2017-03-29T08:27:47.170" Score="0" ViewCount="191" Body="&lt;p&gt;In &lt;a href=&quot;https://link.springer.com/chapter/10.1007/978-3-642-83957-3_3&quot; rel=&quot;nofollow noreferrer&quot;&gt;this paper&lt;/a&gt; by J. W. Burdick, the main result basically says that&lt;/p&gt;&#xA;&#xA;&lt;p&gt;for a redundant manipulator, &lt;em&gt;infinity solutions corresponding to one end-effector pose can be grouped into a finite set of smooth manifolds.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But later in the paper, the author said only revolute jointed manipulators would be considered in the paper. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does this result (grouping of solutions into a finite set of manifolds) hold for redundant robots with prismatic joint(s) as well? Is there any significant difference in analysis and result when prismatic joints are included? So far I couldn't find anyone explicitly address the case of robots with prismatic joints yet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(I am not sure if this site or &lt;a href=&quot;https://math.stackexchange.com/&quot;&gt;math.stackexchange.com&lt;/a&gt; would be the more appropriate place to post this question, though.)&lt;/p&gt;&#xA;" OwnerUserId="7610" LastEditorUserId="-1" LastEditDate="2017-04-13T12:19:24.817" LastActivityDate="2017-03-29T11:32:51.413" Title="Self-Motion Manifolds" Tags="&lt;inverse-kinematics&gt;&lt;redundant-robots&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11965" PostTypeId="2" ParentId="11724" CreationDate="2017-03-29T09:20:28.533" Score="0" Body="&lt;p&gt;I guess this uses PWM (from what I understand from the question's description). Almost all standard flight-controllers use PWM values ranging from 1000 microseconds to 2000 microseconds refreshed at 50 Hz.&#xA;Regarding potentiometer, it is used to control voltage (and some people do use it to drive current; But, it has drawbacks which I'll discuss later). The Vin and the ground are the top and bottom pins while a &lt;a href=&quot;https://en.wikipedia.org/wiki/Voltage_divider&quot; rel=&quot;nofollow noreferrer&quot;&gt;potential divider&lt;/a&gt; circuit creates a potential (w.r.t ground) which is proportional to the variable resistance between Vout and ground while total resistance of both resistances remains same due to resistance strip. More info on Wikipedia: &lt;a href=&quot;https://en.wikipedia.org/wiki/Potentiometer#Theory_of_operation&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Potentiometer#Theory_of_operation&lt;/a&gt; and &lt;a href=&quot;http://lmgtfy.com/?q=potentiometer&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://lmgtfy.com/?q=potentiometer&lt;/a&gt; .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding the potentiometer, it is used because it is intuitive for us to use; We just use potentiometer angle as a measure of proportional linear actuation metric. (instead of 1 millisecond to 2 millisecond PWM train of 20 milliseconds as in standard OverrideRC methods which are counter-intuitive &lt;a href=&quot;http://answers.ros.org/question/197109/how-does-mavros-rc-override-work/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://answers.ros.org/question/197109/how-does-mavros-rc-override-work/&lt;/a&gt;) You can connect potentiometer to arduino or so and then use PWM as output of Arduino and input of flight controller. But, if you use this to &lt;strong&gt;drive&lt;/strong&gt; current, then, the potential divider calculations must be done for &lt;strong&gt;three&lt;/strong&gt; resistors including the load resistance and thus, this resistance in parallel causes a non-linear relation with the input potentiometer angle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would have probably answered better if I were to have known &lt;strong&gt;both&lt;/strong&gt; sides of the PCB as I could not gather much info online apart from some vague description like &lt;a href=&quot;https://www.amazon.fr/Revell-Control-23982-Commande-H%C3%A9licopt%C3%A8re/dp/B00E9S1G7K&quot; rel=&quot;nofollow noreferrer&quot;&gt;this one on Amazon&lt;/a&gt;. +1 for the hack and attempt.&lt;/p&gt;&#xA;" OwnerUserId="15014" LastEditorUserId="15014" LastEditDate="2017-03-29T09:38:55.397" LastActivityDate="2017-03-29T09:38:55.397" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11966" PostTypeId="2" ParentId="11964" CreationDate="2017-03-29T11:32:51.413" Score="1" Body="&lt;p&gt;I am not sure if it applies here, but it is usual way in mathematic to prove something simple and then say, that other cases can be transformed to the simple case, so it is proven for them too (usually in some ineffective long way, but it does not matter, if you want to prove existence of solution).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Prismatic joint can be replaced with three revolute joints connected with long enough rodes, working in cooperative way, maybe it is enought to do substitution for the case in the papers?&lt;/p&gt;&#xA;" OwnerUserId="16496" LastActivityDate="2017-03-29T11:32:51.413" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11967" PostTypeId="2" ParentId="6532" CreationDate="2017-03-29T11:44:05.123" Score="0" Body="&lt;p&gt;This answer is specifically meant to help OP. Assuming you are from developing country like India, I can say that the current implementations of robotics is bleak (apart from some nice stuffs in cities like Bangalore and other metropolitan cities; like Team Indus trying to launch a rover on moon, Team Dhanvantari building IoT devices etc).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, I would suggest something like trying to get some hands-on experience during free time. (Say, trying to control a remote robotic arm just by sitting and clicking something in your browser and developing codes from scratch and trying even better stuffs like RTOS for arm and learning the development of beautiful web interface at the same time; Personally I wish I had learnt RTOS and web development also during college days) That way, even if robotics/automation goes out of hand, still there will be some web development as a by-product 'scope'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S.: I would edit this and add more info if needed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Reference: Google and &lt;a href=&quot;https://www.quora.com/What-is-the-future-scope-of-robotics-in-India&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.quora.com/What-is-the-future-scope-of-robotics-in-India&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15014" LastActivityDate="2017-03-29T11:44:05.123" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11969" PostTypeId="2" ParentId="11889" CreationDate="2017-03-29T13:27:40.067" Score="2" Body="&lt;p&gt;There seems to be two questions in one:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;How should I visualise the trajectory (planned and traversed paths)?&lt;/li&gt;&#xA;&lt;li&gt;How should I combine &quot;ultrasonic sensors, infrared sensors, camera, human sensors etc. &quot; into path planning?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Also, I didn't get how obstacle avoidance is working 'well' (if it is binary obstacle or a gradient based obstacle marking probability fields). While code snippets are the ideal solutions, I would suggest adding more details to the question and the attempts you have tried.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nevertheless, I shall attempt to solve that problem.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;We need visualisation; So, we need an off-board computer. If we want real-time visualisation, we need to transmit data (planned and traversed path) to the off-board computer. Else, we can store this data and at the end of the run, we can just gather the data.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;So, my suggestion: Use WiFi/USB/Bluetooth to transmit data back to computer.&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;&lt;p&gt;We need path planning (for this I am assuming that SLAM isn't needed because we are talking about path &lt;strong&gt;planning&lt;/strong&gt;); Use any path planning technique as described in this &lt;a href=&quot;http://ai.stanford.edu/~ddolgov/papers/dolgov_gpp_stair08.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://ai.stanford.edu/~ddolgov/papers/dolgov_gpp_stair08.pdf&lt;/a&gt; (most of it assumes binary ostacles - Obstacle is either present or absent) If probabilistic obstacles are considered, it is a kind of local optimisation problem and more details are definitely necessary. &lt;a href=&quot;https://www.researchgate.net/publication/2287847_Probabilistic_Methods_for_State_Estimation_in_Robotics&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.researchgate.net/publication/2287847_Probabilistic_Methods_for_State_Estimation_in_Robotics&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;How should I fuse sensor data? &lt;a href=&quot;https://robotics.stackexchange.com/questions/1393/what-is-the-cheapest-easiest-way-of-detecting-a-person&quot;&gt;What is the cheapest / easiest way of detecting a person?&lt;/a&gt; (Because of &quot;human sensors&quot;) &lt;a href=&quot;https://stanford.edu/class/ee267/lectures/lecture11.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://stanford.edu/class/ee267/lectures/lecture11.pdf&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;How do I visualise data? This is the simplest. Use Python/Octave/MATLAB and visualise. There are many plotters that use CSV format. &lt;a href=&quot;http://lmgtfy.com/?q=visualising+3D+plots&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://lmgtfy.com/?q=visualising+3D+plots&lt;/a&gt; (&lt;a href=&quot;https://in.mathworks.com/help/matlab/2-and-3d-plots.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://in.mathworks.com/help/matlab/2-and-3d-plots.html&lt;/a&gt;) (You can also explore GNU Plot, Qti Plot etc)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="15014" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2017-03-29T13:27:40.067" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11971" PostTypeId="1" CreationDate="2017-03-29T15:42:41.503" Score="4" ViewCount="209" Body="&lt;p&gt;Currently I working on a humanoid robot using inverted pendulum model and use LQR for walking stabilizer. Input u is Torque, State x is angle and angular velocity and y output is angle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/mN85g.png&quot; alt=&quot;State Space with K gain feedback&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I got the gain K value that meet my control specification (rise time, steady state error, etc) and the feedback control law like this&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/9pIwZ.png&quot; alt=&quot;feedback control law&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So now I got u(torque) value, but I don't know how to use u(torque) to move my actuator (to control 2 angkle servo) because my servo only move using angle as the command input, not torque. Is there any step that must be done to convert torque to angle? Or something? Thank You for the help, need this for my final project.&lt;/p&gt;&#xA;" OwnerUserId="16525" LastEditorUserId="37" LastEditDate="2017-06-28T08:22:17.070" LastActivityDate="2017-07-08T19:59:43.837" Title="Biped State Space Implementation" Tags="&lt;control&gt;&lt;dynamics&gt;&lt;rcservo&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="11972" PostTypeId="1" CreationDate="2017-03-29T18:19:58.137" Score="5" ViewCount="851" Body="&lt;p&gt;I'm using OpenCV 3 in Python 2.7 on a Raspberry Pi 3. My project's aim is to build an autonomous lane departing robot that can detect the two lanes on its sides and continuously correct itself to remain within them. I want to achieve something like this project: &lt;a href=&quot;https://www.youtube.com/watch?v=R_5XhnmDNz4&quot; rel=&quot;noreferrer&quot;&gt;https://www.youtube.com/watch?v=R_5XhnmDNz4&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So far I've done the line detection part from the live video feed using both HoughLines and HoughLinesP. Here is a screenshot from my video feed and the outputs I'm getting so far:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/pOvgJ.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/pOvgJ.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Till now my logic for detecting if the robot is going left or right is based on the (rho,theta) output of the HoughLines function. What I want to achieve is a more robust way of tracking how the robot is departing from the lanes. Some sort of central line marker that can be used to detect if the robot has moved away from the center. I'm still new to OpenCV and python and the part where I'm stuck at is converting the logic of detecting the lane departure of the robot. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My understanding is that averaging the lines on the lanes into two lines (left and right lanes) and then working with their slopes should give some result. However, I've not been able to transform this into code. I'd appreciate any suggestions on ways to detect lane departure of the robot. Thanks!! :)&lt;/p&gt;&#xA;" OwnerUserId="9047" LastActivityDate="2017-05-09T17:48:40.293" Title="How to check lane departure in OpenCV?" Tags="&lt;mobile-robot&gt;&lt;computer-vision&gt;&lt;raspberry-pi&gt;&lt;opencv&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11973" PostTypeId="1" CreationDate="2017-03-30T00:19:51.023" Score="2" ViewCount="176" Body="&lt;p&gt;I have a pretty simple 2d manipulator which uses an arduino to control a payload weighing about 2kg. I want to implement a simple 2d path planner which takes as input:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Current position, velocity, acceleration as 2d vectors&lt;/li&gt;&#xA;&lt;li&gt;Target position as 2d vector&lt;/li&gt;&#xA;&lt;li&gt;Bounding box as min/max x/y&lt;/li&gt;&#xA;&lt;li&gt;Maximum acceleration&lt;/li&gt;&#xA;&lt;li&gt;Maximum Jerk&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;... and outputs a path (function from time to (x,y)) which leads me to the target point as quickly as possible without violating the constraints.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to specify the initial velocity and acceleration (not just position) because a movement instruction might interrupt a movement already underway.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to specify the bounding box so that my payload doesn't hit any walls.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to specify a maximum acceleration so that the inertia of my payload doesn't overwhelm my control authority.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to specify a maximum jerk so that the springiness of my manipulator doesn't absorb some acceleration and whip it back at the end of travel. (I'm not sure whether I really care about maximum jerk except at the end of travel.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I don't think the math here is very hard. I don't want to reinvent the wheel, but neither do I want to spend a week learning how to use a complicated and overpowered general kinematics library. Is there a very simple library that I can plug into my arduino IDE that could accomplish this for me?&lt;/p&gt;&#xA;" OwnerUserId="16528" LastActivityDate="2017-03-30T00:19:51.023" Title="Simple inertial 2d path planning library for arduino" Tags="&lt;arduino&gt;&lt;path-planning&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11975" PostTypeId="1" CreationDate="2017-03-30T04:43:34.677" Score="2" ViewCount="415" Body="&lt;p&gt;I am doing inverse dynamics in Matlab simmechanics in which position and orientation will be input to the end effector. &#xA;But it shows error as below.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Error originates in Mechanical block rob33/Subsystem2/Subsystem1/Custom Joint. The coordinate systems attached to this joint must lie on the prismatic axis (for 1 axis) or in the plane of the prismatic axes (for 2 axes). If joint has no prismatic axes, the attached coordinate systems must be collocated, within tolerances.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Model is given below.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/v1YJu.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/v1YJu.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In subsystem1, I used custom joint to give orientaion input. Susystem1 model and  custom joint block parameters is given below figure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/KEWHm.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KEWHm.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Parameters of link1-1 and parallel constaints is given in below figure. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/xoZhq.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xoZhq.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How do I correct this error?&lt;/p&gt;&#xA;" OwnerUserId="14024" LastEditorUserId="37" LastEditDate="2017-03-31T09:36:00.940" LastActivityDate="2020-08-13T01:04:25.537" Title="Error in simmechanics matlab while doing inverse dynamics using custom joint" Tags="&lt;inverse-kinematics&gt;&lt;matlab&gt;&lt;simulation&gt;&lt;simulator&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11976" PostTypeId="1" AcceptedAnswerId="11980" CreationDate="2017-03-30T07:25:47.547" Score="2" ViewCount="1827" Body="&lt;p&gt;I am new to electronics.the question is buzzing in my head since i first saw the H bridge configuration.please answer the question briefly&lt;a href=&quot;https://i.stack.imgur.com/LVWts.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/LVWts.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="16491" LastActivityDate="2019-09-25T08:06:37.150" Title="What is the direction of current flowing through the freewheeling diodes in H-bridge if I use BJT?" Tags="&lt;h-bridge&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11977" PostTypeId="1" CreationDate="2017-03-30T10:42:32.633" Score="1" ViewCount="477" Body="&lt;p&gt;I have written a matlab code to solve IK for 6 DOF robotic arm. I use Newton method to numerically solve IK. Also i use Tikhonov regularization to hand bad conditioned Jacobians. It works fast and reliable when i want just to move the last link in certain position, when i use difference between X,Y,Z coordinates as condition to interrupt loop of Newtoon method. But when i want also to get into the right orientation (use difference between Euler angles as interrupt condition) it takes a very long time 2, 5, 10 minutes even more, regardless i want to get to the right coordinates also or not. So there are questions:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;How can i accelerate calculations, or why is it so slow?&lt;/li&gt;&#xA;&lt;li&gt;Can i use quternions instead of Euler angles? Quternions will increase dimension of Jacobian so it will not be a square matrix anymore and it will not be possible to use Tikhonov regularization that works so good.&lt;/li&gt;&#xA;&lt;li&gt;How often people use numerical methods to solve such things? I saw may examples of using analitycal solutions but not numerical.&lt;/li&gt;&#xA;&lt;li&gt;How to get sure that programm will find solution using Newton method and programm will find it in finite number of interations?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;UPD: here is my matlab code, that was rewritten using damped least squares method and quaternion. But still i have the same problem.&#xA;In this code we move along trajectory, but we can remove it and try to jump directly to the destination point.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;%Derivative step for Jacobian composing&#xA;step = 0.01;&#xA;&#xA;%Generalized coordinates for start position&#xA;q_prev = [34; 89; 1; 1; 89; 0];&#xA;&#xA;%Generalized coordinates for end position. To be sure we can reach it&#xA;q_fin = [170; 150; 120; 156; 9; 158];&#xA;&#xA;%get_coordinates() function returns 4x4 matrix of homogeneous transformations. It contains forward kinematics equations&#xA;%Coordinates we are at &#xA;A_forward = get_coordinates( q_prev ); &#xA;&#xA;%Coordinates we need to reach&#xA;Dest = get_coordinates( q_fin );&#xA;&#xA;%Getting rotation matrices for start and finish positions&#xA;rotmat_curr = A_forward(1:3, 1:3);&#xA;rotmat_dest = Dest(1:3, 1:3);&#xA;&#xA;%Matrix_to_quat() - is my analog of rotm2quat() function&#xA;%Getting quternions for start and finish positions&#xA;quat_curr = matrix_to_quat(rotmat_curr);&#xA;quat_dest = matrix_to_quat(rotmat_dest);&#xA;&#xA;%Next steps are not inmportant, but i still comment them&#xA;&#xA;%Here i make a trajectory, and move along it with small steps. It was&#xA;%needed for Newton's method but also useful if it is needed to move along a&#xA;%real trajectory&#xA;                       %X coordinate    Y coordinate    Z coordinate    Quaternion&#xA;coordinates_current = [ A_forward(1,4); A_forward(2,4); A_forward(3,4); quat_curr ];&#xA;coordinates_destination = [ Dest(1,4); Dest(2,4); Dest(3,4); quat_dest ];&#xA;&#xA;%Coordinate step&#xA;step_coord = 5; &#xA;&#xA;%Create table - trajectory&#xA;distance = sqrt( (coordinates_destination(1) - coordinates_current(1)).^2 + (coordinates_destination(2) - coordinates_current(2)).^2 +(coordinates_destination(3) - coordinates_current(3)).^2 );&#xA;&#xA;%Find out the number of trajectory points&#xA;num_of_steps = floor(distance / step_coord);&#xA;&#xA;%Initialize trajectory table&#xA;table_traj = zeros(7,(5*num_of_steps));&#xA;&#xA;%Calculate steps size for each coordinate&#xA;step_x = (coordinates_destination(1) - coordinates_current(1)) / num_of_steps;&#xA;step_y = (coordinates_destination(2) - coordinates_current(2)) / num_of_steps;&#xA;step_z = (coordinates_destination(3) - coordinates_current(3)) / num_of_steps;&#xA;step_qw = (coordinates_destination(4) - coordinates_current(4)) / num_of_steps;&#xA;step_qx = (coordinates_destination(5) - coordinates_current(5)) / num_of_steps;&#xA;step_qy = (coordinates_destination(6) - coordinates_current(6)) / num_of_steps;&#xA;step_qz = (coordinates_destination(7) - coordinates_current(7)) / num_of_steps;&#xA;&#xA;new_coord = coordinates_current;&#xA;%Fill trajectory table&#xA;for ind = 1:num_of_steps&#xA;    new_coord = new_coord + [step_x; step_y; step_z; step_qw; step_qx; step_qy; step_qz];&#xA;    table_traj(:,ind) = new_coord;  &#xA;end;&#xA;&#xA;%Set lambda size. I found out that algorithm works better when lambda is&#xA;%small&#xA;lambda = 0.1;&#xA;&#xA;%In next steps i inialize Jacobian, build new destination matrix, calculate&#xA;%orientation error at the first step. As orientation error i use max&#xA;%element of quaternions difference.&#xA;for ind = 1:num_of_steps&#xA;    J = zeros(7, 6);&#xA;&#xA;    %quat_to_matrix() - analog of quat2rotm() function&#xA;    rot_matr = quat_to_matrix(table_traj(4:7, ind));&#xA;&#xA;    Dest = [ rot_matr, table_traj(1:3, ind);&#xA;             0, 0, 0, 1  ]; &#xA;&#xA;    %mat_to_coord_quat() function takes matrix of homogeneous&#xA;    %transformations and returns 7x1 vector of coorditaes&#xA;    %X Y Z and quaternion&#xA;    differ = mat_to_coord_quat(Dest) - mat_to_coord_quat(A_forward);&#xA;    error = max(abs(differ(4:6)));&#xA;&#xA;    %Here is the algorithm. It works until we have coordinates and&#xA;    %orientation error less that was set&#xA;     while (abs(differ(1)) &amp;gt; 0.05) || (abs(differ(2)) &amp;gt; 0.05) || (abs(differ(3)) &amp;gt; 0.05) || error &amp;gt; 0.01&#xA;&#xA;         %first - calculating Jacobian&#xA;         for ind2 = 1:6  %for every coordinate&#xA;                %Calculating of partial derivatives:&#xA;                q_prev_m1 = q_prev;&#xA;                q_prev_m1(ind2) = q_prev_m1(ind2) - step;&#xA;                q_prev_p1 = q_prev;&#xA;                q_prev_p1(ind2) = q_prev_p1(ind2) + step;&#xA;                Fn1 = mat_to_coord_quat(get_coordinates(q_prev_m1)); % in q_prev vector ind1 element is one step smaller than in original q_prev&#xA;                Fn2 = mat_to_coord_quat(get_coordinates(q_prev_p1)); % in q_prev vector ind1 element is one step bigger than in original q_prev&#xA;                deltaF = Fn2 - Fn1; %delta functions vector&#xA;                deltaF = deltaF/(2*step); %devide by step to get partial derivatives for every function&#xA;                %composing Jacobian from column of partian derivatives&#xA;                J(:,ind2) = deltaF;&#xA;        end;&#xA;        %Next according to damped least squares method&#xA;        %calculate velosities along all coordinates&#xA;            A_forward = get_coordinates( q_prev );&#xA;            differ = mat_to_coord_quat(Dest) - mat_to_coord_quat(A_forward);&#xA;&#xA;            %calculating generalized coordinates velosities&#xA;            dq = (J.'*J + lambda * eye(6))\ J.' * differ;&#xA;&#xA;            %integrate generalized coordinates velosities&#xA;            q_prev = q_prev + dq;&#xA;&#xA;            %calculate max orientation error&#xA;            error = max(abs(differ(4:7)));   &#xA;    end;&#xA;end;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="9468" LastEditorUserId="9468" LastEditDate="2017-04-06T12:31:47.323" LastActivityDate="2017-04-08T18:48:37.347" Title="Very slow calculations of link orientation for 6DOF IK" Tags="&lt;robotic-arm&gt;&lt;inverse-kinematics&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="11978" PostTypeId="2" ParentId="11975" CreationDate="2017-03-30T11:27:01.307" Score="2" Body="&lt;p&gt;I solved this problem by seeing below image from internet. This image explain the constraints in coordinate system in simulink. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;R = revolute ; S = spherical; W = weld; P = prisimatic&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/lOtCt.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/lOtCt.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I have custom joint (in between ground and link 1-1) with R1R2R3 joints so body1 CS and body2 CS should coincident. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To do this, I copy &lt;strong&gt;CS3 of link1-1&lt;/strong&gt; and paste it into &lt;strong&gt;CS of ground&lt;/strong&gt;.  &lt;/p&gt;&#xA;" OwnerUserId="14024" LastActivityDate="2017-03-30T11:27:01.307" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11979" PostTypeId="2" ParentId="11975" CreationDate="2017-03-30T11:46:43.933" Score="2" Body="&lt;p&gt;SimMechanics isn't an &quot;inverse dynamics&quot; engine, it's not an inverse kinematics engine, it's a &quot;forward dynamics&quot; or just &quot;dynamics&quot; engine. You provide link dimensions, inertias, and joint constraints. Then you provide either an applied force or an applied motion, SimMechanics propagates those forces (or equivalent forces, in the even of applied motions) through your model, and you get an output that shows what your system does in the presence of those forces. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know what you think your Subsystem1 is supposed to be doing, but it's not doing it. Here is what is actually happening:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Each joint or link has an input location (&quot;Base&quot;) and an output locations (&quot;Follower&quot;). Links have inertias and fixed transforms between base and follower, joints have no inertias and obviously have variable transforms between base and follower. &lt;/li&gt;&#xA;&lt;li&gt;Each &lt;strong&gt;system&lt;/strong&gt; has one &lt;strong&gt;and only one ground&lt;/strong&gt;. This provides your zero-reference. &lt;/li&gt;&#xA;&lt;li&gt;So, reading your first diagram from left to right, you have a &quot;Root Ground&quot;, a welded base, then you start building your robot with joint, link, joint, link, etc. &lt;/li&gt;&#xA;&lt;li&gt;Eventually you get to &quot;Link 4-1&quot;, which I'm assuming is supposed to be an end effector. &lt;/li&gt;&#xA;&lt;li&gt;Here's where you get into trouble - you tie some coordinate frame from the end effector to &quot;Subsystem1&quot; by attaching it to the follower (output) of a pair of parallel constraints. &lt;/li&gt;&#xA;&lt;li&gt;Those parallel constraints are attached to the follower of a link, which is the follower of a custom joint, which is attached to ground!&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;You have made a closed loop, starting and ending at a ground connection. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem with this is that SimMechanics seems to be especially terrible at solving for initial conditions. If your starting/default orientation for the revolute joints and those linkages doesn't result in an end effector pose that &lt;em&gt;exactly&lt;/em&gt; matches the starting/default orientation for the custom joint and the subsystem1 link, then you get this error because the difference in pose matching results in a separated joint somewhere - typically where you tie back to ground. This is in Subsystem, where the ground connection attaches to custom joint 1, which is where you're getting the error. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It looks like maybe you're trying to do inverse kinematics by creating a &quot;puppet&quot; - you provide a position and an orientation and rely on the SimMechanics solver to find the joint angles that allow the arm to reach that pose. Again, the problem here is if you start with a set of initial conditions where your initial input pose doesn't correspond to your initial robot pose. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could also get this error if you use your input pose to drive the arm to an unreachable subspace. At that point, the arm &quot;locks up,&quot; the input continues to move, and in one time step a joint separates somewhere and you hit a &quot;not coincident&quot; error like this again. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My suggestion would be to check the default orientation of the arm by commenting out the input subsystem1 code (highlight, right click, and choose &quot;comment out). Then uncomment the input, comment out the robot arm (except the end effector, of course), and see if the end effector is in the same position. If it's not, there's your problem. Adjust your default input/robot joint angles as required to get the two to mesh. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-03-30T11:46:43.933" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11980" PostTypeId="2" ParentId="11976" CreationDate="2017-03-30T12:22:46.863" Score="2" Body="&lt;p&gt;Basically (in reality anything have a sligth aspeact of everything else, nothing is ideal) the DC motor is mainly inductance in serie with small resistance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your typical use is close Q2+Q3 and send PWM to Q1+Q4 (or vice versa).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When PWN is on, Q1+Q4 are open and current goes to DC motor from left to rigth. It start to rotate (or increase rotation when rotating) (slowly as incductace resist change of current, mechanical inertia also works against change). Nothing fancy here. Current goes PWR-Q1-DC-Q4-GND&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then the PWM goes down, Q1+Q4 closes, but morot is rotating (mechanical inertia) and its inductance tries to force current thru from left to right. At the moment it behave as dynamo (or a battery) and voltage goes so high so to force the current of the same value and direction. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And now the diodes kick in. On DC there is - on the left and + on the right (as on baterry forcing the current the same way) and when it reach some limit D2 opens (as there is minus under GND 0 V voltage on the DC left) and the D3 opens (as there is voltage higher than PWR on DC right) and the current flows thru DC in the same way back to main battery. GND-D2-DC-D3-PWR.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the DC (and everything else) have some resistance, which burns the energy and its inductance have only limited capacity (even if enforced by mechanical inertia of rotating motor) so the current goes slowly down (and will stop eventually as the DC motor would slower so much, that there would be not enought voltage to open diodes and overcome main battery at the same time).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But your PWM goes up again much sooner thant this stop happens, so the DC just slows a little and those Q1 and Q4 opens and main battery suplies current again which forces the DC to rotate faster.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The rate (speed) of PWM is so fast, that mechanical inertia makes that invisible and only statistical difference matters here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Dependind on the time the PWM is on(up) and time it is off(down) the DC motor have just part of the maximal possible power and so its rotation is slower then maximal possible. As on open Q1+Q4 there is full current from battery it have much better force to move, than if you limit the current with eq. resistor. (if goes full strenght for moment, then no strenght at all instead of going only half streng all the time - so it is able to overcome more resist of environment, even if it is not able to rotate fast) &#xA;&lt;a href=&quot;https://i.stack.imgur.com/FIbsb.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FIbsb.jpg&quot; alt=&quot;H bridge with PWM&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="16496" LastEditorUserId="16496" LastEditDate="2017-03-31T14:35:07.447" LastActivityDate="2017-03-31T14:35:07.447" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="11981" PostTypeId="2" ParentId="11976" CreationDate="2017-03-30T14:09:59.103" Score="2" Body="&lt;p&gt;keep it simple:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;when A is H-Level and B L-Level then Q1 and Q4 are in the  saturation region so the current flows in the direction as follow:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/xkGIa.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xkGIa.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;on the other option: A is L-Level and B H-Level&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/5NP5l.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/5NP5l.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;the rest of the options: A=B= H-Level or A=B= L-Level are not going to move the motor&lt;/p&gt;&#xA;" OwnerUserId="14175" LastActivityDate="2017-03-30T14:09:59.103" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11982" PostTypeId="1" AcceptedAnswerId="11987" CreationDate="2017-03-30T16:16:16.083" Score="1" ViewCount="104" Body="&lt;p&gt;I am Planning to make a crawling bot which will follow a baby,having a pillow on the board.The Problem with the project is:&#xA;Suppose a case when the baby falls, the bot should come exactly at the place where the baby's head will hit the ground?&#xA;Any idea of how i can make the bot move to that point before the baby's head hit the ground ?&lt;/p&gt;&#xA;" OwnerUserId="16532" LastActivityDate="2017-04-01T01:13:37.327" Title="Baby Child Following Robot" Tags="&lt;arduino&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="11983" PostTypeId="5" CreationDate="2017-03-30T18:43:17.400" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2017-03-30T18:43:17.400" LastActivityDate="2017-03-30T18:43:17.400" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11984" PostTypeId="4" CreationDate="2017-03-30T18:43:17.400" Score="0" Body="The Robotics Library (RL) is a self-contained C++ library for robot kinematics, motion planning and control. It covers mathematics, kinematics and dynamics, hardware abstraction, motion planning, collision detection, and visualization." OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2017-03-31T08:28:44.190" LastActivityDate="2017-03-31T08:28:44.190" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11985" PostTypeId="1" AcceptedAnswerId="11990" CreationDate="2017-03-30T19:41:51.603" Score="1" ViewCount="1661" Body="&lt;p&gt;I was trying to run &lt;a href=&quot;http://wiki.ros.org/urdf/Tutorials/Using%20urdf%20with%20robot_state_publisher&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; tutorial in python code, but i got above error when i try to run it. My python converted program of given tutorial is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#!/usr/bin/env python&#xA;&#xA;import rospy&#xA;from sensor_msgs.msg import JointState&#xA;from std_msgs.msg import Header&#xA;import tf&#xA;import geometry_msgs.msg&#xA;import math&#xA;&#xA;def talker():&#xA;    pub = rospy.Publisher('joint_states', JointState, queue_size=1)&#xA;    rospy.init_node('state_publisher')&#xA;&#xA;broadcaster = tf.TransformBroadcaster()   &#xA;rate = rospy.Rate(30) # 10hz &#xA;M_PI = 3.145&#xA;degree = M_PI/180;&#xA;&#xA;# robot state&#xA;tilt = 0 &#xA;tinc = degree &#xA;swivel=0 &#xA;angle=0 &#xA;height=0 &#xA;hinc=0.005&#xA;&#xA;# message declarations&#xA;t = geometry_msgs.msg.TransformStamped()&#xA;hello_str = JointState()&#xA;t.header.frame_id = &quot;odom&quot;&#xA;t.child_frame_id = &quot;axis&quot;&#xA;&#xA;while not rospy.is_shutdown():&#xA;    # update joint_state&#xA;    hello_str.header.stamp = rospy.Time.now()&#xA;    hello_str.name = ['swivel','tilt','periscope']&#xA;    hello_str.position = swivel&#xA;    hello_str.velocity = tilt&#xA;    hello_str.effort = height&#xA;&#xA;    t.header.stamp = rospy.Time.now()&#xA;    t.transform.translation.x = math.cos(angle)*2&#xA;    t.transform.translation.y = math.sin(angle)*2&#xA;    t.transform.translation.z = .7&#xA;    #t.transform.rotation = tf.createQuaternionMsgFromYaw(angle+M_PI/2)&#xA;    t.transform.rotation = tf.transformations.quaternion_from_euler(0, 0, angle)&#xA;    # send the joint state and transform&#xA;    pub.publish(hello_str)&#xA;    broadcaster.sendTransform(t)&#xA;&#xA;    # Create new robot state&#xA;    tilt += tinc&#xA;    if (tilt&amp;lt;-.5 or tilt&amp;gt;0):&#xA;       tinc *= -1&#xA;    height += hinc&#xA;    if (height&amp;gt;.2 or height&amp;lt;0):&#xA;      hinc *= -1&#xA;    swivel += degree&#xA;    angle += degree/4&#xA;&#xA;    rate.sleep()&#xA;&#xA;if __name__ == '__main__':&#xA;    try:&#xA;        talker()&#xA;    except rospy.ROSInterruptException:&#xA;        pass&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;How can i remove this, i am using ros indigo. Even if i change that line with :&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;broadcaster.sendTransform((0.5,1.0,0),tf.transformations.quaternion_from_euler(0, 0, angle+M_PI/2),rospy.Time.now(),&quot;odom&quot;,&quot;axis&quot;)&lt;/code&gt; &#xA;Its not working. Than it shows error:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; field position must be a list or tuple type&#xA;[state_pub-2] process has died [pid 11654, exit co&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerDisplayName="user14148" LastActivityDate="2017-04-01T04:34:54.253" Title="sendTransform() takes exactly 6 arguments (2 given)" Tags="&lt;ros&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11986" PostTypeId="2" ParentId="11985" CreationDate="2017-03-30T19:50:56.447" Score="0" Body="&lt;p&gt;&quot;transformations&quot;, if I remember right was initially part of an external script, where quaternion_from_euler returns a numpy array of four values. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://w3.cs.jmu.edu/spragunr/CS354_S14/labs/tf_lab/html/tf.transformations-module.html#quaternion_from_euler&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://w3.cs.jmu.edu/spragunr/CS354_S14/labs/tf_lab/html/tf.transformations-module.html#quaternion_from_euler&lt;/a&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://gist.github.com/baalexander/5225140&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://gist.github.com/baalexander/5225140&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;sendTransform on the other hand, expects a &lt;strong&gt;list&lt;/strong&gt; of values for the rotation argument. The way you're passing the rotation part right now, as the output of quaternion_from_euler would cause a numpy array to be passed instead of a list. You'd probably have to load the numpy array contents manually into a list and pass it to sendTransform.&lt;/p&gt;&#xA;" OwnerUserId="10310" LastEditorUserId="10310" LastEditDate="2017-04-01T04:34:54.253" LastActivityDate="2017-04-01T04:34:54.253" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11987" PostTypeId="2" ParentId="11982" CreationDate="2017-03-30T21:00:33.867" Score="1" Body="&lt;p&gt;Start first with a robot that can &quot;come exactly at the place&quot; where you throw a ball.&#xA;Once you have that, you will gain experience necessary to create the other phase of the project (going towards the baby).&#xA;Start simple, then make it more complicated.&#xA;Start with a four-wheeled robot (or maybe three-wheeled).&lt;/p&gt;&#xA;" OwnerUserId="15912" LastActivityDate="2017-03-30T21:00:33.867" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11989" PostTypeId="2" ParentId="11977" CreationDate="2017-03-31T01:55:30.513" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;How can i accelerate calculations, or why is it so slow?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I think the reason it is really slow is that your calculated joint velocities do not steer the system towards a solution. Consider the time derivative of the forward kinematics equation&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{bmatrix}&#xA;v\\ \omega&#xA;\end{bmatrix} = &#xA;\begin{bmatrix}&#xA;J_v\\ J_\omega&#xA;\end{bmatrix}&#xA;\dot{q},&#xA;$$&#xA;where $v, \omega$ are the end-effector linear and angular velocities, respectively, and $J_v, J_\omega$ map the joint velocity to $v, \omega$ respectively. Difference in X, Y, Z coordinates is actually $v$ in the above equation, that is why you can get $\dot{q}$ (or rather $dq$) that drives the system towards the correct position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now the problem is that the difference in Euler angles do not give you angular velocity suitable to use in the above equation. Changing the orientation representation to axis-angle representation should solve the problem.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Can i use quternions instead of Euler angles? Quternions will increase dimension of Jacobian so it will not be a square matrix anymore and it will not be possible to use Tikhonov regularization that works so good.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, you can. But the lower part of the Jacobian, i.e., $J_\omega$, needs to be changed to something like $J_{quat}$ which is a $4 \times n$ matrix ($n$ is the dimension of the joint vector). So the velocity equation above will be&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{bmatrix}&#xA;v \\ u&#xA;\end{bmatrix} = &#xA;\begin{bmatrix}&#xA;J_v\\ J_{quat}&#xA;\end{bmatrix}&#xA;\dot{q},&#xA;$$&#xA;where $u$ can be thought of as a difference in quaternion. (Actually &lt;a href=&quot;http://openrave.org/docs/latest_stable/&quot; rel=&quot;nofollow noreferrer&quot;&gt;OpenRAVE&lt;/a&gt; does have a function for calculating Jacobians suitable to use with quaternions.) It's true that the overall Jacobian will then not a square matrix but as far as I know, that should not prevent you from using Tikhonov regularization.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How often people use numerical methods to solve such things? I saw may examples of using analitycal solutions but not numerical.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I'm not sure how most people do but solving for IK solutions numerically is useful when one needs their robot to track some end-effector trajectory. Although one may be able to solve for an IK solution analytically, there can be multiple solutions for a single end-effector pose and it is not obvious how one can choose a solution for each time step such that the resulting joint trajectory is smooth. Instead, the IK solution for the consecutive time step along the trajectory is computed numerically by using a differential IK method, which is actually based on the Jacobian equation above.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How to get sure that programm will find solution using Newton method and programm will find it in finite number of iterations?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Convergence of Newton method depends on a number of factors. I'm not sure if we can have such universal criteria.&lt;/p&gt;&#xA;" OwnerUserId="7610" LastActivityDate="2017-03-31T01:55:30.513" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="11990" PostTypeId="2" ParentId="11985" CreationDate="2017-03-31T05:14:02.720" Score="1" Body="&lt;p&gt;That is because in Python, the function &lt;code&gt;sendTransform&lt;/code&gt; has interface a but different from the same function in &lt;code&gt;C++&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you run the following code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;import tf&#xA;br = tf.TransformBroadcaster()&#xA;br.sendTransform?&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;you will see that &lt;code&gt;sendTransform&lt;/code&gt; should be called like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;br.sendTransform(translation, rotation, time, child, parent)&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may have a look at &lt;a href=&quot;http://wiki.ros.org/tf/Tutorials/Adding%20a%20frame%20(Python)&quot; rel=&quot;nofollow noreferrer&quot;&gt;this page&lt;/a&gt; for an example code.&lt;/p&gt;&#xA;" OwnerUserId="7610" LastActivityDate="2017-03-31T05:14:02.720" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="11992" PostTypeId="2" ParentId="11924" CreationDate="2017-03-31T06:31:37.160" Score="1" Body="&lt;p&gt;If the university project is not directly about making a drone detection system using visual technic, it may not be worth the effort to connect the &quot;camera&quot; to the computer. (You may have to install new drivers, etc). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, technically it's quite possible to run a feature-detection-code once you can integrate the camera to that code. There are several open source and free (as in freedom) image / video processing algorithms that are able to detect features. See GitHub for some examples.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, they are not tuned for drones. You could help out others by sharing your experience; be it in academic studies or open sharing. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem with visual detection is that it will not detect drones at poor visibility conditions, night, fog etc. Implementing an IR camera could help a little.&lt;/p&gt;&#xA;" OwnerUserId="9570" LastActivityDate="2017-03-31T06:31:37.160" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11995" PostTypeId="2" ParentId="11982" CreationDate="2017-03-31T15:25:15.817" Score="2" Body="&lt;p&gt;Let's first assume that the baby can move in all directions but fall only backwards. Under this assumption, the robot would need to track two things (1) the position of the baby (2) the direction of movement (so that it could always position itself behind the baby&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next it would need to be able to recognise when the baby is losing balance and predict where exactly the baby would fall. Finally it would have to carry out some basic inverse kinematics to get its end-effector to put the pillow in the right position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To accomplish this you would probably need to use a visual tracking library like OpenCV. To process the data you would need a reasonably fast, lightweight computer such as a Raspberry Pi and finally a microcontroller like an Arduino to command the wheels and the servo actuators. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If on the other hand, the baby is allowed to fall in ANY direction, then there is no way of accomplishing this with ANY robot that does not SURROUND the baby at all times. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But most importantly, I think putting human babies and electronics/ wiring/ high power batteries/ metal frames in close proximity is not a very good idea.&lt;/p&gt;&#xA;" OwnerUserId="16501" LastEditorUserId="16501" LastEditDate="2017-04-01T01:13:37.327" LastActivityDate="2017-04-01T01:13:37.327" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11996" PostTypeId="1" AcceptedAnswerId="12000" CreationDate="2017-03-31T16:45:10.437" Score="0" ViewCount="278" Body="&lt;p&gt;I'm working with a robotic arm and needed to compute the jacobian matrix of it in order to send torque commands. THe arm has 6 joints all revolute. After calculating the jacobian matrix from the DH parameters provided in the datasheet, I noticed that the jacobian has dependency only from the first five joints.&#xA;The sixth joint corresponds to the hand which only rotates over itself. My question here is: Can the jacobian have no dependency from a joint? On which cases can this happen?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="16543" LastActivityDate="2017-04-01T01:54:16.563" Title="Jacobian Matrix and joint dependecies" Tags="&lt;jacobian&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="11997" PostTypeId="1" CreationDate="2017-03-31T17:20:01.377" Score="0" ViewCount="651" Body="&lt;p&gt;I'm new to robotics and I've been reading some slides online regarding motion planning. Due to my lack of knowledge in mechanical engineering, I'm having a difficult time understanding what holonomic and non-holonomic constraints mean. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I saw a post &lt;a href=&quot;https://robotics.stackexchange.com/questions/9642/whats-the-difference-between-a-holonomic-and-a-nonholonomic-system&quot;&gt;here&lt;/a&gt; and it says Holonomic system is when a robot can move in any direction in the configuration space, and Nonholonomic systems are systems where the velocities (magnitude and or direction) and other derivatives of the position are constraint.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems like holonomic system differs from holonomic constraint. What is holonomic constraint and when do we need it? What is non-holonomic constraint and when do we need that?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance.&lt;/p&gt;&#xA;" OwnerUserId="15801" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2017-04-04T13:20:54.900" Title="holonomic and non holonomic constraints in layman's term" Tags="&lt;dynamics&gt;&lt;movement&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11998" PostTypeId="1" CreationDate="2017-03-31T17:40:26.300" Score="0" ViewCount="980" Body="&lt;p&gt;I'm at the stage where I assembled a balancing robot and it's not maintaining a stable position. This is not a surprise I just started testing last night.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My code is &lt;a href=&quot;https://github.com/owhite/balancing_bot&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;, views of the device are &lt;a href=&quot;https://raw.githubusercontent.com/owhite/balancing_bot/master/docs/Resized_20170331_091818.jpeg&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Briefly, it's based on a teensy 3.2, a brushless motor controller that receives I2C commands that drives brushless gimbal motors. It uses an MPU9250 for angle measurement. I'm using PID control, and I made a tkinter-based interface that allows me to send it P/I/D values for realtime testing. I plan on implementing a bluetooth based serial to reduce wires going to the device. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;At this stage I'm not asking people for specific help on debugging what's going wrong, I'm asking about a general strategy for testing. I have used the RAM on the teensy before to record PID response time and then send that data to pyplot, which was very informative before. I was wondering if it would be a good idea to detach my wheels and mount the motors to a rigid pedestal - and to do some PID tuning using that system to tweak the wobbliness/stability. My reasoning being &quot;hey if I can't get this thing to stay upright when it's rigidly mounted to the bench, why would it work when it's got wheels on it?&quot; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any comments on this strategy, and would anyone want to offer other ways to go at the problem at this point? Yes, I've read the many posts on PID tuning, I'll follow them as best I can. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can post pictures and other code examples but newbies only get to put two links into the OP.&lt;/p&gt;&#xA;" OwnerUserId="16544" LastEditorDisplayName="user9480" LastEditDate="2017-04-24T06:51:54.183" LastActivityDate="2017-10-21T09:09:31.993" Title="Balancing robot tuning approach" Tags="&lt;arduino&gt;&lt;pid&gt;&lt;balance&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="11999" PostTypeId="2" ParentId="11960" CreationDate="2017-04-01T01:30:40.690" Score="1" Body="&lt;p&gt;The A4988 is an excellent choice to drive a stepper motor. It supports step resolution upto 1/16 of a step and can be set up so that it uses just two of your Arduino's pins. Each A4988 can drive one stepper motor with input voltages upto 35V and current draw upto 2A.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Highly recommended for your project.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a sample pin-out you could use to drive a stepper motor...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Vdd - 5V&lt;/p&gt;&#xA;&#xA;&lt;p&gt;GND - GND&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Vmot - DC power source for your motor (Upto 35V)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1A,1B - To stepper motor first winding&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2A,2B - To stepper motor second winding &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Connect RESET and SLEEP together&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Step - Any Arduino digital pin (stepPin)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Dir - Any Arduino digital pin (dirPin)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To control the motor direction, use &lt;code&gt;digitalWrite(dirPin, HIGH);&lt;/code&gt; and &lt;code&gt;digitalWrite(dirPin, LOW);&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To step the motor use &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;digitalPin(stepPin, HIGH);&#xA;delayMicroseconds(500);&#xA;digitalPin(stepPin, LOW);&#xA;delayMicroseconds(500);&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to control the step resolution, you need to set the MS1, MS2 and MS3 pins HIGH/LOW according to &lt;a href=&quot;https://www.pololu.com/file/download/a4988_DMOS_microstepping_driver_with_translator.pdf?file_id=0J450&quot; rel=&quot;nofollow noreferrer&quot;&gt;Page 6, Table 1 of the A4988 datasheet&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="16501" LastActivityDate="2017-04-01T01:30:40.690" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12000" PostTypeId="2" ParentId="11996" CreationDate="2017-04-01T01:54:16.563" Score="2" Body="&lt;p&gt;The Jacobian matrix itself can sometimes not contain some joint variables. See, for example, this &lt;a href=&quot;http://smpp.northwestern.edu/savedLiterature/Spong_Textbook.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;textbook&lt;/a&gt;, p.115, where they derive the Jacobian for a SCARA manipulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The thing is that even though the Jacobian itself does not contain, for example, the $6^\text{th}$ joint variable, &lt;em&gt;that joint still can contribute to changes in position and orientation of the end-effector.&lt;/em&gt; Consider the equation&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{bmatrix}v \\ \omega\end{bmatrix} = J(q)\dot{q},&#xA;$$&#xA;where $v$ and $\omega$ are the end-effector linear and angular velocities, $\dot{q}$ is the joint velocities, and $J$ is the Jacobian (in your case it should be a $6 \times 6$ matrix). If you examine closely, you can see that your $6^\text{th}$ joint can still contribute to $v$ and $\omega$ via the last (right-most) column of $J$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A Jacobian can be seen as how each joint (velocity) contributes to the end-effector velocities. When a Jacobian does not contain some particular joint variable, it means that the joint configuration does not really affect how other joints can contribute to end-effector velocities. &lt;/p&gt;&#xA;" OwnerUserId="7610" LastActivityDate="2017-04-01T01:54:16.563" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12001" PostTypeId="1" CreationDate="2017-04-01T06:07:22.730" Score="0" ViewCount="393" Body="&lt;p&gt;I know at least 3 different solutions to inverse kinematics problem. They are pseudo inverse jacobian, cyclic coordinate descent and ANFIS networks. I would like to know their advantages and disadvantages comparing to each other.&lt;/p&gt;&#xA;" OwnerUserId="15392" LastEditorUserId="15392" LastEditDate="2017-04-02T10:22:13.380" LastActivityDate="2017-04-02T10:22:13.380" Title="Inverse kinematics solutions pros and cons" Tags="&lt;inverse-kinematics&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12005" PostTypeId="2" ParentId="11998" CreationDate="2017-04-02T04:18:09.073" Score="1" Body="&lt;p&gt;Well assuming you are using a filter(Kalman or Complementary) for the IMU, the PID tuning can be quite a cumbersome task. There is not a fixed end approach on tuning your PID. It took my &lt;a href=&quot;https://www.youtube.com/watch?v=kIL92MyehYI&quot; rel=&quot;nofollow noreferrer&quot;&gt;Self-Balancing Robot&lt;/a&gt; three days to tune. But here is a general tuning strategy you could use:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Set your &lt;code&gt;Ki&lt;/code&gt; and &lt;code&gt;Kd&lt;/code&gt; to zero and tune your &lt;code&gt;Kp&lt;/code&gt; such that it is just able to balance itself with large oscillations.&lt;/li&gt;&#xA;&lt;li&gt;Start with your &lt;code&gt;Kd&lt;/code&gt; and see to that the oscillations are going away.&lt;/li&gt;&#xA;&lt;li&gt;Now comes the optimisations and the hard part. You have to now fine tune both &lt;code&gt;Kp&lt;/code&gt; and &lt;code&gt;Kd&lt;/code&gt; so that oscillations go away and robot is able to balance.&lt;/li&gt;&#xA;&lt;li&gt;Using the &lt;code&gt;Ki&lt;/code&gt; is quite tricky as it slows down your system as you are continuously adding a term. I haven't played much with the &lt;code&gt;Ki&lt;/code&gt; term, though people now and then have used it.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="11048" LastActivityDate="2017-04-02T04:18:09.073" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12007" PostTypeId="2" ParentId="11597" CreationDate="2017-04-02T18:23:28.853" Score="2" Body="&lt;p&gt;You're right. You should know the rpm of your propellers to build a mathematical model of your quadcopter and if you already have a mathematical model of your brushless DC motors you could compute them based on the PWM signal that you send to the motors (plus other factors depending on how much the model is accurate). This complex model is useful for simulations but it's not necessary to control your system in a real environment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As answered before, to actually control your system the controller doesn't need the rpm values of you propellers but only the values of the trust. You can use a PID controller based only on the values given by your IMU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a more complex controller you may need approximated relationships between trust and PWM signal but I don't think that exists any controller that rely on rpm of the propellers, it will be a waste of computational resources.&lt;/p&gt;&#xA;" OwnerUserId="16555" LastActivityDate="2017-04-02T18:23:28.853" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12008" PostTypeId="1" AcceptedAnswerId="12014" CreationDate="2017-04-02T20:11:38.557" Score="1" ViewCount="365" Body="&lt;p&gt;I have a slam algorithm that outputs at around 30Hz, an implementation of ORBSLAM2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/raulmur/ORB_SLAM2&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/raulmur/ORB_SLAM2&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am reading this into a renderer that expects 60+ Hz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because my sample speed is low, I am getting 'shuddering' in the display, as the renderer adds linear 'steps' between the samples. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, I am seeing a result like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;time   sample    result&#xA;&#xA;1         20          20&#xA;2         n/a         20&#xA;3         n/a         20&#xA;4         22          22&#xA;5         n/a         22&#xA;6         n/a         22&#xA;7         24          24&#xA;8         n/a         24&#xA;9         n/a         24&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;What i need to do, is predict the next sample, and fill in the gaps, so to speak, so that I end up with something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;time   sample    result&#xA;&#xA;1         20          20&#xA;2         n/a         20.66&#xA;3         n/a         21.33&#xA;4         22          22&#xA;5         n/a         22.66&#xA;6         n/a         23.66&#xA;7         24          24&#xA;8         n/a         24.33&#xA;9         n/a         25.66&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I need to predict 6DOF, for which i have translation xyz, and a quaternion xyzw.&#xA;But if I can find a way to predict even one axis, for a start, that would be great.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have the data outputting as xyz and xyzw, at around 30Hz. I also have an xsens IMU, which i am using to pass in an initial rotation value.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can i use a predictive filter for this purpose? Is a kalman suitable? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am looking at:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/simondlevy/TinyEKF&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/simondlevy/TinyEKF&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and a Bayes filter:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://bayesclasses.sourceforge.net/Bayes++.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://bayesclasses.sourceforge.net/Bayes++.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But am a little out of my depth.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you, please ask if I have not made sense!&lt;/p&gt;&#xA;" OwnerUserId="9859" LastEditorUserId="9859" LastEditDate="2017-04-03T14:30:13.453" LastActivityDate="2017-04-03T21:34:59.067" Title="Can i use a predictive kalman filter to 'increase' my sample rate?" Tags="&lt;slam&gt;&lt;kalman-filter&gt;&lt;c++&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="12010" PostTypeId="2" ParentId="11958" CreationDate="2017-04-03T14:18:30.263" Score="0" Body="&lt;p&gt;After careful reading of the first paper I think the solution to the problem is to simply not include the multiplication. From the proof of 172b and equation 177, in my filter I have $R_t$ (since I get that from the Madgwick filter) and can simply apply that to the error state. So equation 195b is instead $\delta v  = \delta v - (R\delta a_b - \delta g)\Delta t + \mathbf{v_i}$, note that we don't multiply with $\theta$ since the Madgwick filter models that error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The transition matrix does then not have to include any terms related to $\theta$ which means we only relate error in speed with error in accelerometer $\delta a_b$ and error in the gravity vector $\delta g$. In essence we remove the skew matrix multiplication.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: I will hold of accepting this answer either until I have a chance to try the improvement or until someone else can vouch for it. Other answers are very welcome!&lt;/p&gt;&#xA;" OwnerUserId="16509" LastEditorUserId="16509" LastEditDate="2017-04-06T08:54:15.407" LastActivityDate="2017-04-06T08:54:15.407" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12011" PostTypeId="1" CreationDate="2017-04-03T14:33:48.840" Score="1" ViewCount="22" Body="&lt;p&gt;I am doing to research about why you cannot use IMU acceleration the integrate to get velocity.  Everyone says you cannot do that due to there being error but what error is this exactly and where does it come from?&lt;/p&gt;&#xA;" OwnerUserId="16561" LastActivityDate="2017-04-03T14:33:48.840" Title="Getting velocity from IMU acceleration" Tags="&lt;imu&gt;" AnswerCount="0" CommentCount="5" FavoriteCount="1" ClosedDate="2017-04-03T14:55:38.720" ContentLicense="CC BY-SA 3.0" />
  <row Id="12013" PostTypeId="1" AcceptedAnswerId="12034" CreationDate="2017-04-03T14:56:44.393" Score="1" ViewCount="84" Body="&lt;p&gt;I have to study the controllability of the kinematic model of a Cycab:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/zkQKI.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zkQKI.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\dot{q}=g_1(q)v+g_2(q)\omega_R+g_3(q)\omega_L$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\dot{q}=\begin{bmatrix}\dot{x}\\\dot{y}\\\dot{\theta}\\\dot{\gamma}\\\dot{\phi}\end{bmatrix}$ $g_1(q)=\begin{bmatrix}cos(\theta+\gamma)\\sin(\theta+\gamma)\\\frac{sin(\phi-\gamma)}{lcos(\phi)}\\0\\0\end{bmatrix}$  $g_2(q)=\begin{bmatrix}0\\0\\0\\1\\0\end{bmatrix}$  $g_3(q)=\begin{bmatrix}0\\0\\0\\0\\1\end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;with $x$ and $y$ the Cartesian coordinates of the midpoint of the rear segment joining the two rear wheels and $\theta$ the direction of the midpoints of the two segments joining the wheels centers with respect to the axis $x$. So, I have to study the accessibility distribution $\{g_1,g_2,g_3.[g_1,g_2],[g_2,[g_1,g_2]],...\}$ so I computed&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$[g_1,g_2]=\begin{bmatrix}sin(\theta+\gamma)\\-cos(\theta+\gamma)\\\frac{cos(\phi-\gamma)}{lcos(\phi)}\\0\\0\end{bmatrix}$   $[g_2,[g_1,g_2]]=\begin{bmatrix}-cos(\theta+\gamma)\\-sin(\theta+\gamma)\\\frac{-sin(\phi-\gamma)}{lcos(\phi)}\\0\\0\end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;so the rank of $[g_1,g_2,g_3,[g_1,g_2],[g_2,[g_1,g_2]]]$ is equal to 5 so we can say that the system is controllable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, is it correct to study the accessibility distribution without using the vector field $g_3$, so is it correct to say that the system is controllable without using the vector field $g_3$?&lt;/p&gt;&#xA;" OwnerUserId="16562" LastEditorUserId="16562" LastEditDate="2017-04-07T10:11:06.353" LastActivityDate="2017-04-07T10:11:06.353" Title="Accessibility distribution of three vector fields" Tags="&lt;mobile-robot&gt;&lt;control&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="12014" PostTypeId="2" ParentId="12008" CreationDate="2017-04-03T16:22:19.787" Score="2" Body="&lt;p&gt;In this situation, you probably shouldn't use a Kalman filter for &quot;filling&quot; in the gaps. Typically, you use a Kalman filter (or Bayes filter etc...) to fuse information from different sources.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your case, you have are using SLAM for localization. The SLAM algorithm is taking in data and estimating the pose of the camera as well as a sparse 3D reconstruction of the environment. Internally, this probably already performs some type of prediction/update for tracking etc...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem you are having is that the algorithm is only running at 30Hz, and you need 60Hz of pose data if I understand correctly. If I were you, I would take the states (position and velocity) at each time step and propagate them forward (at 60Hz).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To propagate them forward, I mean integrate your pose using your previous state estimates. For example, if your states were x position, y position, x velocity, and y velocity, then you can assume your velocity is constant and propagate your position using that velocity. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$x_{k+1} = x_k + v_{x,k} \Delta t$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$y_{k+1} = y_k + v_{y,k} \Delta t$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that you will need to write out the equations for your system. In the above equations, the $k$ is the previous time step, and $\Delta t$ is the change in time between the previous time step and the current time step. Once you receive another measurement from the SLAM algorithm, use that measurement instead of the propagated state, then repeat. You can keep the intermediate propagated states, but you don't want to perform an update because your propagated states are not based on sensor measurements. So, basically in between the measurements you get from ORBSLAM, you will have these intermediate measurements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: Keep in mind that the question you asked is about how to fill in the gaps given low frequency data. I am assuming you do not have extra sensors such as IMU, GPS, encoders, etc... Regardless, if additional sensors are available, this still doesn't address how to obtain data at a higher frequency (although it is likely the IMU will operate above 50Hz). I am suggesting an approach to fill in missing data without adding complexity to your system. Assuming constant velocity is reasonable if the motion isn't highly dynamic. If you do have additional sensors you want to incorporate, I think you would want to reconsider your overall approach because you can use IMU and encoders to improve the feature tracking and reconstruction.&lt;/p&gt;&#xA;" OwnerUserId="15213" LastEditorUserId="15213" LastEditDate="2017-04-03T21:34:59.067" LastActivityDate="2017-04-03T21:34:59.067" CommentCount="12" ContentLicense="CC BY-SA 3.0" />
  <row Id="12017" PostTypeId="1" AcceptedAnswerId="12042" CreationDate="2017-04-03T20:14:45.523" Score="2" ViewCount="995" Body="&lt;p&gt;I have archlinux indigo ros.&#xA;My probelm is that when I type in terminal:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ gzclient&#xA;Segmentation fault (core dumped)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;...  &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ roslaunch turtlebot_gazebo turtlebot_world.launch&#xA;    ... logging to /home/islam/.ros/log/0f56780c-18b0-11e7-966d-642737d9d3b9/roslaunch-CatchMe-11800.log&#xA;    Checking log directory for disk usage. This may take awhile.&#xA;    Press Ctrl-C to interrupt&#xA;    Done checking log file disk usage. Usage is &amp;lt;1GB.&#xA;&#xA;    started roslaunch server http://localhost:44337/&#xA;&#xA;    SUMMARY&#xA;    ========&#xA;&#xA;    PARAMETERS&#xA;     * /bumper2pointcloud/pointcloud_radius: 0.24&#xA;     * /cmd_vel_mux/yaml_cfg_file: /opt/ros/indigo/s...&#xA;     * /depthimage_to_laserscan/output_frame_id: /camera_depth_frame&#xA;     * /depthimage_to_laserscan/range_min: 0.45&#xA;     * /depthimage_to_laserscan/scan_height: 10&#xA;     * /robot_description: &amp;lt;?xml version=&quot;1....&#xA;     * /robot_state_publisher/publish_frequency: 30.0&#xA;     * /rosdistro: indigo&#xA;     * /rosversion: 1.11.20&#xA;     * /use_sim_time: True&#xA;&#xA;    NODES&#xA;      /&#xA;        bumper2pointcloud (nodelet/nodelet)&#xA;        cmd_vel_mux (nodelet/nodelet)&#xA;        depthimage_to_laserscan (nodelet/nodelet)&#xA;        gazebo (gazebo_ros/gzserver)&#xA;        gazebo_gui (gazebo_ros/gzclient)&#xA;        laserscan_nodelet_manager (nodelet/nodelet)&#xA;        mobile_base_nodelet_manager (nodelet/nodelet)&#xA;        robot_state_publisher (robot_state_publisher/robot_state_publisher)&#xA;        spawn_turtlebot_model (gazebo_ros/spawn_model)&#xA;&#xA;    auto-starting new master&#xA;    process[master]: started with pid [11824]&#xA;    ROS_MASTER_URI=http://localhost:11311&#xA;&#xA;    setting /run_id to 0f56780c-18b0-11e7-966d-642737d9d3b9&#xA;    process[rosout-1]: started with pid [11837]&#xA;    started core service [/rosout]&#xA;    process[gazebo-2]: started with pid [11852]&#xA;    process[gazebo_gui-3]: started with pid [11861]&#xA;    process[spawn_turtlebot_model-4]: started with pid [11868]&#xA;    process[mobile_base_nodelet_manager-5]: started with pid [11873]&#xA;    process[cmd_vel_mux-6]: started with pid [11878]&#xA;    process[bumper2pointcloud-7]: started with pid [11880]&#xA;    process[robot_state_publisher-8]: started with pid [11882]&#xA;    process[laserscan_nodelet_manager-9]: started with pid [11896]&#xA;    process[depthimage_to_laserscan-10]: started with pid [11905]&#xA;    /opt/ros/indigo/lib/gazebo_ros/gzclient: line 25: 11916 Segmentation fault      (core dumped) GAZEBO_MASTER_URI=&quot;$desired_master_uri&quot; gzclient $final&#xA;    [gazebo_gui-3] process has died [pid 11861, exit code 139, cmd /opt/ros/indigo/lib/gazebo_ros/gzclient __name:=gazebo_gui __log:=/home/islam/.ros/log/0f56780c-18b0-11e7-966d-642737d9d3b9/gazebo_gui-3.log].&#xA;    log file: /home/islam/.ros/log/0f56780c-18b0-11e7-966d-642737d9d3b9/gazebo_gui-3*.log&#xA;    /opt/ros/indigo/lib/gazebo_ros/gzserver: line 30: 11978 Segmentation fault      (core dumped) GAZEBO_MASTER_URI=&quot;$desired_master_uri&quot; gzserver $final&#xA;    [gazebo-2] process has died [pid 11852, exit code 139, cmd /opt/ros/indigo/lib/gazebo_ros/gzserver -e ode /opt/ros/indigo/share/turtlebot_gazebo/worlds/playground.world __name:=gazebo __log:=/home/islam/.ros/log/0f56780c-18b0-11e7-966d-642737d9d3b9/gazebo-2.log].&#xA;    log file: /home/islam/.ros/log/0f56780c-18b0-11e7-966d-642737d9d3b9/gazebo-2*.log&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and here is the output of debug:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Reading symbols from gzserver...(no debugging symbols found)...done.&#xA;[Thread debugging using libthread_db enabled]&#xA;Using host libthread_db library &quot;/usr/lib/libthread_db.so.1&quot;.&#xA;[New Thread 0x7fffd4e6d700 (LWP 16809)]&#xA;[New Thread 0x7fffd038d700 (LWP 16810)]&#xA;&#xA;Thread 1 &quot;gzserver&quot; received signal SIGSEGV, Segmentation fault.&#xA;0x00007ffff2838390 in gazebo::event::Connection::Id() const ()&#xA;from /usr/lib/libgazebo_common.so.8&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;My GPU is intel HD3000 , core i5 INSPIRON N5110. I have noted that &lt;a href=&quot;http://answers.ros.org/question/63413/gazebo-crashes-when-starting/&quot; rel=&quot;nofollow noreferrer&quot;&gt;intel hd3000 works with gazebo&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance.&lt;/p&gt;&#xA;" OwnerUserId="13502" LastEditorUserId="13502" LastEditDate="2017-04-03T21:15:02.407" LastActivityDate="2017-04-05T21:04:16.027" Title="gzclient: segmentation fault" Tags="&lt;ros&gt;&lt;gazebo&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12018" PostTypeId="2" ParentId="12008" CreationDate="2017-04-03T20:36:57.257" Score="2" Body="&lt;p&gt;Short answer, yes, if you use your IMU to fill in the gaps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can use additional Bayesian filtering to fill in the pose gaps as long as you fuse in your IMU data. The IMU (assuming it has reasonable covariance and frequency) will be closer to the ground truth between the gaps than the forward propogation cBEiN recommends. cBEiN gives the solution for constant velocity between frames, but if you can't assume your robot has zero acceleration or angular acceleration (e.g. it's vibrating) between frames, you have all the tools you need at your fingertips in your trusty IMU. There's not so much drift creating a full state estimate in just 33ms. Integrating the IMU data to create poses between fused states (that is, state estimates made using both IMU and visual data) can fill in the time between your visual frames. An additional benefit is that it will account for sharp accelerations that are too blurry on camera to properly estimate your pose. These are situations which would often result in loss of localization, but by feeding the fused estimate back into your visual SLAM when its covariance is better than the visual odometry's covariance, it ought to put you back on track and prevent some of the major distortions that require additional loop closures to correct. Lastly, if you're using a depth camera, many of these cameras suffer from depth distortion during lateral movements or rotations, which can throw off your localization. If you notice these effects, it's again a great opportunity to fuse your IMU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're using ROS, this is a great use-case for the &lt;code&gt;robot_localization&lt;/code&gt; package.&lt;/p&gt;&#xA;" OwnerUserId="16566" LastEditorUserId="16566" LastEditDate="2017-04-03T20:42:33.877" LastActivityDate="2017-04-03T20:42:33.877" CommentCount="12" ContentLicense="CC BY-SA 3.0" />
  <row Id="12019" PostTypeId="1" AcceptedAnswerId="12029" CreationDate="2017-04-03T21:00:24.817" Score="0" ViewCount="302" Body="&lt;p&gt;Can a Compact 4 Node Raspberry Pi 3 Cluster be enough powerful to elaborate videostreaming input data in real time for a drone?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you for any answer&lt;/p&gt;&#xA;" OwnerUserId="15648" LastEditorUserId="15648" LastEditDate="2017-04-04T13:31:19.593" LastActivityDate="2017-04-04T15:25:06.777" Title="Compact 4 Node Raspberry Pi 3 Cluster for Robots?" Tags="&lt;raspberry-pi&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12023" PostTypeId="1" AcceptedAnswerId="12030" CreationDate="2017-04-04T10:32:39.863" Score="0" ViewCount="517" Body="&lt;p&gt;I have raw GPS data (see end of the question for details if you think the protocols are relevant), and I need to extract/compute ephemeris and pseudoranges (my goal is to replace the recursive least squares that the receiver solves to compute the position with a home-brewed method based on sensor fusion). Concerning the ephemeris, I have access to the 3 first subframes of each of the 25 frames of the GPS message. Documentations/books/etc that I have found just vaguely mention that the first subframe contains clock data, and the two others contain ephemeris data. However, none of them precisely says what the words in these subframes are, and how I can use them to compute orbital information (I'm assuming that I only want satellite positions?). Can anyone give me pointers to some references on how to do this? Or (even better), is there any open-source code that already implements this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I really appreciate your help.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Details on the data:&lt;/strong&gt; They have been transmitted by a Ublox EVK-7p using the UBX RXM-EPH and RXM-RAW protocols.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;RXM-EPH: satellite ID (4 byes), HOW word (4 bytes), followed by three 32-byte arrays corresponding to subrames 1 to 3 of the GPS message.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;RXM-RAW: time of week, week, num of satellites, reserved (?) , carrier phase, pseudo-range, doppler, and so on....&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; I found &lt;a href=&quot;https://www.google.fr/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=2&amp;amp;ved=0ahUKEwjBgcb6movTAhVBiRoKHT9EBNUQFggrMAE&amp;amp;url=http%3A%2F%2Fwww.gps.gov%2Ftechnical%2Fps%2F1995-SPS-signal-specification.pdf&amp;amp;usg=AFQjCNG1d7nRQ7jgaMjYFqK0afiJU8a0yw&amp;amp;sig2=lVReCa_IZFZwcYSk5ZAydQ&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; which seems to answer most of my questions. It is from 1995 though.&lt;/p&gt;&#xA;" OwnerUserId="2541" LastEditorUserId="2541" LastEditDate="2017-04-04T16:25:06.990" LastActivityDate="2017-07-11T20:52:19.770" Title="GPS message: compute ephemeris data and pseudo-ranges from subframes" Tags="&lt;sensors&gt;&lt;gps&gt;&lt;pseudo-ranges&gt;&lt;ephemeris&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12024" PostTypeId="1" AcceptedAnswerId="12025" CreationDate="2017-04-04T11:05:34.230" Score="0" ViewCount="490" Body="&lt;p&gt;Hope this is the right place to ask.. I'm a Mechatronic Engineering student and am having difficulty programming the mill to cut diagonal edges of contours.  I've worked through &lt;a href=&quot;http://cncsimulator.info/index.php?option=com_content&amp;amp;view=article&amp;amp;id=48&quot; rel=&quot;nofollow noreferrer&quot;&gt;this tutorial&lt;/a&gt; which I understand. The problem I'm having is milling around the &lt;em&gt;outside&lt;/em&gt; of the diagonal edge, not &lt;em&gt;on&lt;/em&gt; it.  I hope that makes sense. I'm unsure about the tool positioning at the start/end of cut, for example. Can someone explain how to do it? Thanks.&lt;/p&gt;&#xA;" OwnerUserId="7820" LastActivityDate="2017-04-04T12:08:16.970" Title="CNC Programming - How to mill diagonal edge of a contour (CNC Simulator Pro)?" Tags="&lt;cnc&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12025" PostTypeId="2" ParentId="12024" CreationDate="2017-04-04T12:08:16.970" Score="0" Body="&lt;p&gt;The feature you are describing is called the cutter radius correction. You can activate/deactivate it with the G-codes G40, G41, G42.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These will displace the path with the radius of the active cutter in positive or negative direction.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2017-04-04T12:08:16.970" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12026" PostTypeId="1" CreationDate="2017-04-04T12:57:08.173" Score="0" ViewCount="1062" Body="&lt;p&gt;Most servos and steppers I've worked with are able to spin manually when no power is applied, but I've come across a couple which are stuck in their position. I'm not sure if they are just very difficult to spin manually, or if they would break if forced. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, I have this &lt;a href=&quot;https://arduino-info.wikispaces.com/SmallSteppers&quot; rel=&quot;nofollow noreferrer&quot;&gt;stepper&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=_f3m2cNWxoY&quot; rel=&quot;nofollow noreferrer&quot;&gt;servo&lt;/a&gt; which seem impossible to turn manually.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a specification that would tell you whether or not the motor can spin without power?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/V3lk0m.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/V3lk0m.jpg&quot; alt=&quot;Small Stepper Motor and Driver Board&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/S1upVm.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/S1upVm.jpg&quot; alt=&quot;DH-03X&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15237" LastEditorUserId="37" LastEditDate="2018-08-16T09:11:10.023" LastActivityDate="2018-08-16T09:11:10.023" Title="Why are some motor shafts stiff while others spin freely when not powered?" Tags="&lt;servomotor&gt;&lt;stepper-motor&gt;&lt;rcservo&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12027" PostTypeId="2" ParentId="11997" CreationDate="2017-04-04T13:20:54.900" Score="1" Body="&lt;p&gt;A constraint on the $k$ coordinates $r_1,r_2,...,r_k$ is &lt;strong&gt;holonomic&lt;/strong&gt; if it is an equality constraint of the form $$g(r_1,...,r_k)=0,$$ and &lt;strong&gt;nonholonomic&lt;/strong&gt; otherwise. These sorts of constraints arise frequently in mechanical systems (e.g. when deriving Euler-Lagrange equations of motion). A holonomic system is one that is subject to holonomic constraints, and a nonholonomic system is one that is subject to nonholonomic constraints. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;An example of a holonomic system is a sphere on a surface, which can roll in any direction. In contrast, a wheel on a surface without slipping is an example of a non-holonomic system because it cannot roll in any direction--it can only roll forward/backward at some heading.  &lt;/p&gt;&#xA;" OwnerUserId="9585" LastActivityDate="2017-04-04T13:20:54.900" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12029" PostTypeId="2" ParentId="12019" CreationDate="2017-04-04T15:25:06.777" Score="1" Body="&lt;p&gt;Possibly depending on what you want to do, one &lt;a href=&quot;http://bennycheung.github.io/raspberry-pi-3-for-computer-vision&quot; rel=&quot;nofollow noreferrer&quot;&gt;could be plenty powerful enough&lt;/a&gt;. I have done several projects using the Raspberry pi camera module and a single raspberry pi to do optical flow at several frames per second and had plenty of power left over to do other stuff. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But if you need it to go faster you could in theory split the processing over more than one raspberry pi by distributing the frames, but In reality I think the overhead of that would dominate unless processing was taking more than 1 second per frame. for the price of a 4 raspberry pi cluster (~\$190 after all the accessories and say at least 400g).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For that price and a lower weight you could get a much more powerful &lt;a href=&quot;http://www.nvidia.com/object/jetson-tk1-embedded-dev-kit.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Nvidia Jetson TK1&lt;/a&gt; (\$190 120g) which is powerful enough to apply deep neural networks, or stereo vision in real time and be much easier to use and develop with than some custom 4 raspberry pi solution&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2017-04-04T15:25:06.777" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12030" PostTypeId="2" ParentId="12023" CreationDate="2017-04-04T18:50:27.997" Score="1" Body="&lt;p&gt;The GPS standard has been the same since the first GPS satellites were launched, so sources from 1995 are very relevant In fact that is the document I would point you to. One of the best libraries for decoding GPS is &lt;a href=&quot;http://gnss-sdr.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;gnss-sdr&lt;/a&gt;, You can look at how they are doing protocol decoding in order to get an idea of how to implement it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other docs I would point you would be the &lt;a href=&quot;http://www.gps.gov/&quot; rel=&quot;nofollow noreferrer&quot;&gt;official GPS website&lt;/a&gt; and the &lt;a href=&quot;http://www.gps.gov/technical/icwg/&quot; rel=&quot;nofollow noreferrer&quot;&gt;interface control documents&lt;/a&gt;. There is a ton of useful information there.&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2017-04-04T18:50:27.997" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12033" PostTypeId="2" ParentId="12013" CreationDate="2017-04-05T11:04:57.767" Score="0" Body="&lt;p&gt;I noticed that $g_1$ and $[g_2,[g_1,g_2]]$ are not linearly independent so I computed the Lie bracket $[g_3,[g_1,g_2]]$ that is equal to $\begin{bmatrix}0\\0\\\frac{-cos(\gamma)}{lcos(\phi)}\\0\\0\end{bmatrix}$ and the rank of $[g_1,g_2,g_3,[g_1,g_2],[g_3,[g_1,g_2]]]$ is equal to 5 and the system should be controllable&lt;/p&gt;&#xA;" OwnerUserId="16562" LastActivityDate="2017-04-05T11:04:57.767" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12034" PostTypeId="2" ParentId="12013" CreationDate="2017-04-05T11:53:07.590" Score="0" Body="&lt;p&gt;&lt;strong&gt;Chow's Theorem&lt;/strong&gt; states that:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The driftless system $$\dot q=g_1(q)u_1+...+g_m(q)u_m$$ is locally controllable at $q_0\in\mathbb{R}^n$ if $\text{rank}\bar\Delta(q_0)=n.$&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Here, $\bar\Delta$ is the involutive closure of the distribution $\Delta=\text{span}\{g_1,...,g_m\}$ (i.e. the smallest involutive distribution containing $\Delta$). $\bar\Delta,$ also known as the Control Lie Algebra, is found by forming successively larger distributions by repeated computation of the Lie Brackets until an involutive distribution is found. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To answer your question, there is nothing about $\bar \Delta$ that requires the use of $g_3$ as long as $\bar \Delta$ contains $\Delta,$ so we can make statements about the local controllability without including $g_3$ in the distribution. Because this is a local result, you will have to prove that the system is controllable to any point in $\mathbb{R}^n$ in order to say that the system is controllable.&lt;/p&gt;&#xA;" OwnerUserId="9585" LastActivityDate="2017-04-05T11:53:07.590" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="12035" PostTypeId="2" ParentId="12026" CreationDate="2017-04-05T11:53:48.573" Score="2" Body="&lt;p&gt;IMHO it depends on two factors:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;if there is gear on the servo (so to motor rotates fast, the result is slow precise motion with high force), then moving it manually even little means to rotate the motor fast, which accumulats resistance araound the all way, multiplied by the gear ratio&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;if there is some electronics, then it can switch to &quot;braking&quot; state when powered off for security reasons, so moving it is much harder, than free rotating unconnected motor.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;On many servos the two combines.&lt;/p&gt;&#xA;" OwnerUserId="16496" LastActivityDate="2017-04-05T11:53:48.573" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12037" PostTypeId="1" CreationDate="2017-04-05T14:34:41.557" Score="5" ViewCount="469" Body="&lt;p&gt;I am currently working on a line follower buggy and have managed to tune the PID constants​ manually. The buggy follows the line at a moderate speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I will now like to take things further and learn new things as well. I read about Q-learning and will like to ask if what I am about to implement is on the right track.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have chosen:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Three states: last three positions of line sensors&lt;/li&gt;&#xA;&lt;li&gt;Three rewards: middle position, end of track and less wobbling (measured with gyroscope).&lt;/li&gt;&#xA;&lt;li&gt;Four actions: $Kp$, $Ki$, $Kd$, and Max speed.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The computation will be made on a PC as the robot is wirelessly connected.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Am I on the right track?&lt;/li&gt;&#xA;&lt;li&gt;How do I make the 3 constants have &quot;states&quot; because as I understand, the actions have to be non-analog ?&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Do I create a range of numbers close to the constants I have now and the Q-learning decides which is best ? (It's inefficient to just try random numbers)&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="16585" LastEditorUserId="2289" LastEditDate="2017-04-12T17:15:00.880" LastActivityDate="2019-01-05T04:04:40.813" Title="Tuning Line follower PID constants with Q-learning" Tags="&lt;pid&gt;&lt;wheeled-robot&gt;&lt;artificial-intelligence&gt;&lt;line-following&gt;&lt;reinforcement-learning&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12038" PostTypeId="1" CreationDate="2017-04-05T15:01:40.927" Score="2" ViewCount="524" Body="&lt;p&gt;Using a PID with encoders, I can make the robot move straight but there is a 0.5 degrees drift and it eventually hits a wall so I need to adjust to center it between the two walls. I have a sensor on each side that gives me the distance from the wall, so What's the best approach to make the robot adjust when it comes to close to one wall?&lt;/p&gt;&#xA;" OwnerUserId="16546" LastActivityDate="2017-09-03T21:38:30.157" Title="Making a robot move straight between two maze walls" Tags="&lt;arduino&gt;&lt;sensors&gt;&lt;pid&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12039" PostTypeId="1" CreationDate="2017-04-05T17:57:20.987" Score="1" ViewCount="1183" Body="&lt;p&gt;We need a SLAM system for mobile platform which will be used in on-site construction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We are to build a 3D map from clouds of points and need localization in it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We don’t need fast localization, but we need high accuracy of localization, error of localization should be around 1mm at a distance up to 5 meters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which sensor will suit for this - maybe it will be enough only a stereo vision (can it give us required accuracy?), or only LiDAR sensor (what’s about accuracy and usage in direct sunlight?) or we need to use something different and combine several type of sensors?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can you advise the best solution for this task?&lt;/p&gt;&#xA;" OwnerUserId="16588" LastActivityDate="2018-03-05T01:21:34.127" Title="Which sensors will best suited for indoor/outdoor SLAM system with high accuracy of localization?" Tags="&lt;mobile-robot&gt;&lt;localization&gt;&lt;slam&gt;" AnswerCount="3" CommentCount="2" ClosedDate="2018-03-05T08:00:38.960" ContentLicense="CC BY-SA 3.0" />
  <row Id="12040" PostTypeId="2" ParentId="12038" CreationDate="2017-04-05T18:31:45.613" Score="1" Body="&lt;p&gt;Just make the error term in your pid the difference between the sensors you have.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;i.e. $$ Error = d_{left} - d_{right} $$&#xA;Where a positive error means you are too far right and you need to turn left and a negative error means you are too far to the left and need to turn right. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might then feed the output of the PID as a delta speed (or power or whatever) into your motors. So say the output of your PID was -8 (you are too far to the left) and your nominal motor power is 50%, you might feed 50+8=58% into your left motor and 50-8=42% into your right motor. Putting you back on track.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just beware for openings in your maze!&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2017-04-05T18:31:45.613" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12041" PostTypeId="1" CreationDate="2017-04-05T20:52:50.560" Score="0" ViewCount="35" Body="&lt;p&gt;I was having a chat with a robotic expert recently. The guy told me that for an arm with motor drives running at 5kHz your are to set the control so that someone can grasp the end effector and move it around (something like the usual teach mode for an arm).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyone knows what kind of control this expert was mentioning? What setup this involves? Any doc on this subject? Any input is welcome...&lt;/p&gt;&#xA;" OwnerUserId="763" LastActivityDate="2017-04-06T19:43:06.220" Title="5kHz arm control, grasp end effector" Tags="&lt;control&gt;&lt;motor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12042" PostTypeId="2" ParentId="12017" CreationDate="2017-04-05T21:04:16.027" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;It seems that Gazebo 8 is based on Qt5 instead of Qt4. The dependencies should be updated and most importantly, we need to install qwt-qt5 instead of qwt, otherwise our executable is linked to both Qt4 and Qt5 which leads to segmentation fault at start.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Here is my PKGBUILD for Gazebo:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;a href=&quot;https://gist.github.com/lyx-x/e6908ef82351b462d4b2e480a43b076c&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://gist.github.com/lyx-x/e6908ef82351b462d4b2e480a43b076c&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;reference: &lt;a href=&quot;https://aur.archlinux.org/packages/gazebo/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://aur.archlinux.org/packages/gazebo/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13502" LastActivityDate="2017-04-05T21:04:16.027" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12043" PostTypeId="1" CreationDate="2017-04-05T21:43:42.750" Score="1" ViewCount="81" Body="&lt;p&gt;For a four-legged robot (like Big Dog or the &lt;a href=&quot;https://www.google.com/url?sa=i&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=images&amp;amp;cd=&amp;amp;ved=&amp;amp;url=http%3A%2F%2F3.bp.blogspot.com%2F-fc-WNjd-2n8%2FVEQF-_7c_KI%2FAAAAAAAAAgk%2F86G04y2V65A%2Fs1600%2Fspider.png&amp;amp;psig=AFQjCNG_sJUTqABEPm0keA5rVeh9DrAh6A&amp;amp;ust=1491514754428834&quot; rel=&quot;nofollow noreferrer&quot;&gt;one shown here&lt;/a&gt;) how are the joint angles and &quot;feet&quot; position related to the body's frame in the world/inertial frame? For example, if I know the body's position and orientation in the world frame, and the joint angles, how do I derive the relationship that tells me where the robots &quot;feet&quot; are? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For simplification, if I assume the legs can be represented as a planar 3R manipulator (where the end effector is the foot), it's easy enough to derive the relationship between the end effector and the angles. But the &quot;base&quot; is the robot's body, which will change position and orientation when the joint angles change. So do I have to find the matrix which relates the body to the world frame, then find the position of the foot with respect to the world? Or am I thinking of this the wrong way?&lt;/p&gt;&#xA;" OwnerUserId="16589" LastActivityDate="2017-07-20T03:43:41.030" Title="How do the joint angles of a 4-legged impact the body's position with respect to the world frame?" Tags="&lt;kinematics&gt;&lt;dh-parameters&gt;&lt;walking-robot&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12045" PostTypeId="1" AcceptedAnswerId="12046" CreationDate="2017-04-05T23:30:39.717" Score="0" ViewCount="77" Body="&lt;p&gt;I have a skid steer drive train with an encoder on each side of the robot along with a gyro to measure the angle of the robot. The width of the robot is 26 inches. Using the encoders I would like to set up an x and y coordinate grid to know the pose of the robot and set up the system to go through waypoints to reach a destination. The robot has a starting reference point and I would like to go to another point in the area. Anybody have an idea of how to approach this?&lt;/p&gt;&#xA;" OwnerUserId="16593" LastActivityDate="2017-04-07T09:23:39.673" Title="Localization on a robot grid" Tags="&lt;localization&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12046" PostTypeId="2" ParentId="12045" CreationDate="2017-04-06T02:04:50.030" Score="0" Body="&lt;p&gt;Possible approach:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Mapping&lt;/li&gt;&#xA;&lt;li&gt;Localisation&lt;/li&gt;&#xA;&lt;li&gt;Path planning (+ obstacle avoidance if there a need)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;You can check out ROS (Robotic Operating System), which consists of many libraries and tools (including those for robot localization, mapping, path planning, etc.)&#xA;Here is the link: &lt;a href=&quot;http://ros.org&quot; rel=&quot;nofollow noreferrer&quot;&gt;ROS&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13436" LastActivityDate="2017-04-06T02:04:50.030" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12047" PostTypeId="2" ParentId="12045" CreationDate="2017-04-06T02:09:45.740" Score="0" Body="&lt;p&gt;If that's  all what  you have&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1- write a kinematic model  of the robot &lt;/p&gt;&#xA;&#xA;&lt;p&gt;2- use any filtering  technique  to improve  your pose  estimate by using  the data from  gyro &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's  all  you can do with  encoders and a gyro&lt;/p&gt;&#xA;" OwnerUserId="14590" LastActivityDate="2017-04-06T02:09:45.740" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12051" PostTypeId="1" CreationDate="2017-04-06T09:21:47.567" Score="0" ViewCount="37" Body="&lt;p&gt;We are building a plane which should fly autonomously, to achieve best results in the enviroment we are flying in (many Hills and Mountains) we need some sort of reliable height readings.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We already get some information using a barometer and the google maps elevation API but especially for landing and low alltitude flights we need a precise height.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most sensors have a bad performance on grass (SRF-08 achieves about 1m; Lidar Lite about 3-4m). Is there some (not to expensive) sensor which can measure distances to at least 50m with a precision of about 20cm? Which method would be suitable for this application?&lt;/p&gt;&#xA;" OwnerUserId="16181" LastActivityDate="2017-04-06T16:03:01.380" Title="Long range distance measurements" Tags="&lt;ultrasonic-sensors&gt;&lt;lidar&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12052" PostTypeId="1" AcceptedAnswerId="12053" CreationDate="2017-04-06T15:09:17.570" Score="2" ViewCount="181" Body="&lt;p&gt;I am looking at the possibility of using LIDAR to do obstacle avoidance for a robotics project I am working on but the project involves avoiding a chain link fence. Has anyone used LIDAR to detect fences and if so how well did it work? Thanks for your help.&lt;/p&gt;&#xA;" OwnerDisplayName="user16549" LastActivityDate="2017-04-06T15:24:18.720" Title="Will Lidar see a fence?" Tags="&lt;mobile-robot&gt;&lt;mapping&gt;&lt;lidar&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12053" PostTypeId="2" ParentId="12052" CreationDate="2017-04-06T15:24:18.720" Score="0" Body="&lt;p&gt;In my experience depending on the point density and the distance to the fence you will see noise where the fence is but it will be far from a flat wall. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can do some basic math, finding the width of a square in your fence and taking that over the width of the wire used in the fence. you can find the probability of a lidar point &quot;hitting&quot; the fence. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Divide by the total number of points pointed toward the fence, and you can get a rough idea of how many returns from the fence you will get. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you predict around 10 that would probably be far too small to get a good return, shoot for at least 100-300 depending on what you are trying to achieve.&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2017-04-06T15:24:18.720" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12054" PostTypeId="2" ParentId="12051" CreationDate="2017-04-06T16:03:01.380" Score="1" Body="&lt;p&gt;I am guessing that because the surface is non-flat and has different levels of reflective that your readings are very noisy. You might get better results if you do sensor fusion between all the sensors and/or just filter the results with a LPF.&lt;/p&gt;&#xA;" OwnerDisplayName="user16549" LastActivityDate="2017-04-06T16:03:01.380" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12055" PostTypeId="2" ParentId="12038" CreationDate="2017-04-06T17:16:10.357" Score="1" Body="&lt;p&gt;You need to do some basic trig/geometry to calculate your robots x position and it's heading. Then you can use PID to correct for both. In the past I have just added the output of two PID loops to correct for heading and distance offset. You will probably have to play with constants to get it tuned properly. This should work better than just trying to get the two sensors to the same reading because the difference in sensor and your motor speeds don't form a Linear Time Invariant (LTI) system. The more nonlinear the system the worst standard PID will work.&lt;/p&gt;&#xA;" OwnerDisplayName="user16549" LastActivityDate="2017-04-06T17:16:10.357" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12057" PostTypeId="2" ParentId="12038" CreationDate="2017-04-06T18:34:43.427" Score="0" Body="&lt;p&gt;For constructing a Finite State Machien the first step is to analyze your problem on a linguistic level. According to the OP, there are two walls and two sensor measurements. So the robot can be in state:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;left_from_center&lt;/li&gt;&#xA;&lt;li&gt;right_from_center&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The next step is is to determine the center of the wall. This can be done also with a state:&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;3&quot;&gt;&#xA;&lt;li&gt;calculate_center&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;And last but not least the robot can drive to:&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;4&quot;&gt;&#xA;&lt;li&gt;drive_left&lt;/li&gt;&#xA;&lt;li&gt;drive_right&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;So we have a list of 5 states which are well named and can be implemented in the programming language of your choice. Than a little bit testing is necessary for the &quot;calculate_center&quot; state which uses a absolute value for the width of the path and perhaps some other optimization are needed for the action of the robot, e.g. how much drive the robot to left?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is not as easy as to program a simple PID Controller which consists of only one equation, but a finite state machine give us a nice opportunity for program debugging if the system is working suboptimal. Thanks for the nice question and good luck.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2017-04-06T18:34:43.427" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12058" PostTypeId="2" ParentId="10502" CreationDate="2017-04-06T19:35:43.760" Score="1" Body="&lt;p&gt;Check out this hackaday project. They use micro stepper motors from aliexpress. They include a link as well. The steppers are a little annoying to interface with but they are cheap and they work for this application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://hackaday.io/project/10849-refreshable-braille-display&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://hackaday.io/project/10849-refreshable-braille-display&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerDisplayName="user16549" LastActivityDate="2017-04-06T19:35:43.760" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12059" PostTypeId="2" ParentId="6565" CreationDate="2017-04-06T19:39:00.660" Score="1" Body="&lt;p&gt;The beagle bone black is just a linux computer without the monitor. Look at the user guide (&lt;a href=&quot;https://www.pololu.com/docs/0J40&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.pololu.com/docs/0J40&lt;/a&gt;). It shows examples of writing software to interface with the servo controller.&lt;/p&gt;&#xA;" OwnerDisplayName="user16549" LastActivityDate="2017-04-06T19:39:00.660" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12060" PostTypeId="2" ParentId="12041" CreationDate="2017-04-06T19:43:06.220" Score="1" Body="&lt;p&gt;It sounds like you want to do &lt;strong&gt;gravity compensation&lt;/strong&gt; for the arm with user feedback to allow changes. Basically makes the arm weightless but allows a user to move it. You need to measure arm position and arm torque (measured using current).&lt;/p&gt;&#xA;" OwnerDisplayName="user16549" LastActivityDate="2017-04-06T19:43:06.220" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="12061" PostTypeId="1" AcceptedAnswerId="12097" CreationDate="2017-04-06T21:21:07.183" Score="2" ViewCount="822" Body="&lt;p&gt;I'm stuck at computing forward kinematics equations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have configuration of the first two joints like on the following image:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/rsIl2.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rsIl2.png&quot; alt=&quot;Arm configuration&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Transformation from the origin to the first joint basis is trivial: just translation by $\vec{OO_{1}}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second transform from joint 1 to joint 2 basis makes me nervous throughout this day. First of all it is a rotation around $Z$ axis. So rotational part will look like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$&#xA;R_{12}=&#xA;\begin{pmatrix}&#xA;cos(q_{1}) &amp;amp; -sin(q_{1}) &amp;amp; 0\\&#xA;sin(q_{1}) &amp;amp; cos(q_{1}) &amp;amp; 0\\&#xA;0 &amp;amp; 0 &amp;amp; 1&#xA;\end{pmatrix}&#xA;$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Problems are all about the translation part. I see two approaches here.&#xA;Since angle between $\vec{O_{1}O_{2}}$ and plane $X_{1}O_{1}Y_{1}$ is constant because rotation is performed around $Z$ axis, length of projection of $\vec{O_{1}O_{2}}$ onto $X_{1}O_{1}Y_{1}$ is constant. Here it is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\vec{v} = O_{2} - O_{1} = \begin{pmatrix} v_{x}\\ v_{y}\\ v_{z} \end{pmatrix}&#xA;$&#xA;Its' projection onto $X_{1}O_{1}Y_{1}$ is $\vec{v_{p}} = \begin{pmatrix} v_{x}\\ v_{y}\\ 0 \end{pmatrix}$ and it's magnitude is $m=\sqrt{v_{x}^2 + v_{y}^2}=const$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now let's look at what happens after rotation:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/yEOUg.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/yEOUg.png&quot; alt=&quot;Projection after rotation&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the translation matrix looks like:&#xA;$&#xA;S_{12}=&#xA;\begin{pmatrix}&#xA;m\cdot cos(\alpha+q_{1})\\ m\cdot sin(\alpha+q_{1})\\ v_{z}&#xA;\end{pmatrix}&#xA;$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And full transformation matrix from joint 1 to joint 2 basis is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$&#xA;T_{12}=&#xA;\begin{pmatrix}&#xA;R_{12} &amp;amp; S_{12}\\&#xA;0 &amp;amp; 1&#xA;\end{pmatrix}&#xA;$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately it gives me wrong results even when $q_{1}=0$. Can not see where my reasoning is wrong.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Second approach&lt;/strong&gt; is more straightforward. Being able to calculate $\vec{O_{1}O_{2}}$ in initial configuration makes it possible just to rotate this vector by $q_{1}$ around $Z$ axis and this has to be our translation vector. Nevertheless I can't make it work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$R_{z}=&#xA;\begin{pmatrix}&#xA;cos(q_{1}) &amp;amp; -sin(q_{1}) &amp;amp; 0\\&#xA;sin(q_{1}) &amp;amp; cos(q_{1}) &amp;amp; 0\\&#xA;0 &amp;amp; 0 &amp;amp; 1&#xA;\end{pmatrix}\\&#xA;\vec{v} = O_{2} - O_{1} = \begin{pmatrix} v_{x}\\ v_{y}\\ v_{z} \end{pmatrix}\\&#xA;R_{z}\vec{v}= &#xA;\begin{pmatrix}&#xA;v_{x}cos(q_{1})-v_{y}sin(q_{1})\\&#xA;v_{x}sin(q_{1})+v_{y}cos(q_{1})\\&#xA;v_{z}&#xA;\end{pmatrix}\\&#xA;T_{12}=&#xA;\begin{pmatrix}&#xA;R_{12} &amp;amp; R_{z}\vec{v}\\&#xA;0 &amp;amp; 1&#xA;\end{pmatrix}&#xA;$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It works until I rotate the first joint(i.e. only when $q_{1}=0$).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Under &lt;code&gt;works&lt;/code&gt; I mean &quot;calculates position of joint 2 origin right&quot;. This is done by multiplying transformation matrix $T_{02} = T_{01}T_{12}$ by $\begin{pmatrix} 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1\end{pmatrix}^{T}$&lt;/p&gt;&#xA;" OwnerUserId="15392" LastEditorUserId="15392" LastEditDate="2017-04-07T20:06:38.770" LastActivityDate="2017-04-10T11:03:40.560" Title="Forward kinematics equations" Tags="&lt;kinematics&gt;&lt;forward-kinematics&gt;&lt;robotic-arm&gt;" AnswerCount="3" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="12063" PostTypeId="2" ParentId="12045" CreationDate="2017-04-07T09:23:39.673" Score="0" Body="&lt;p&gt;Look up differential drive model. That will give you the basic equations to control the robot but generally speaking you will probably use the gyro to turn toward a specific target waypoint and encoders to drive to them. Don't try and use the encoders for the turn because skid steer robots will have a lot of slip. Also note that because you are basically dead reckoning you will drift over time. The best way to correct for that is to take readings that reference the environment. &lt;/p&gt;&#xA;" OwnerDisplayName="user16549" LastActivityDate="2017-04-07T09:23:39.673" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12064" PostTypeId="1" CreationDate="2017-04-07T11:50:53.700" Score="4" ViewCount="1466" Body="&lt;p&gt;I am trying to calculate the max lifting capability of the OWI 535 arm. The robot has 3 DOF and 3 three 3 DC motor with the robot power source delivers an Operating Voltage current of 3 Volts. The motors have a Stall Torque 60g-cm. I would like to know how to do the math to calculate the lifting capacity. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Robot has a wrist motion of 120 degrees, an extensive elbow range of 300 degrees, base rotation of 270 degrees, base motion of 180 degrees, vertical reach of 15 inches, horizontal reach of 12.6 inches, and lifting capacity of 100g&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Again, I am attempting to use the robot information on the Society of Robots &lt;a href=&quot;http://www.societyofrobots.com/robot_arm_calculator.shtml&quot; rel=&quot;noreferrer&quot;&gt;http://www.societyofrobots.com/robot_arm_calculator.shtml&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have middle and high school student that want to be able to calculate this information.&lt;/p&gt;&#xA;" OwnerUserId="16610" LastEditorUserId="37" LastEditDate="2017-04-07T13:18:28.310" LastActivityDate="2017-07-13T00:33:55.223" Title="How to calculate the max load that owi 535 arm can lift?" Tags="&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12066" PostTypeId="2" ParentId="12061" CreationDate="2017-04-07T14:08:40.340" Score="2" Body="&lt;p&gt;You are complicating the translation part of the transformation matrix way to much. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The rotational part:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$&#xA;R_{12}=&#xA;\begin{pmatrix}&#xA;cos(q_{1}) &amp;amp; -sin(q_{1}) &amp;amp; 0\\&#xA;sin(q_{1}) &amp;amp; cos(q_{1}) &amp;amp; 0\\&#xA;0 &amp;amp; 0 &amp;amp; 1&#xA;\end{pmatrix}&#xA;$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;takes care of the q1 rotation. There is no further need to include q1 in the translation part. In the rotated coordinate system you make a translation on the x and y axis which is constant. You can express it in function of alpha, but there is no need to, since it is constant, you can use: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$&#xA;Tr_{12} = \begin{pmatrix} v_{x}\\ 0 \\ v_{z} \end{pmatrix}&#xA;$&#xA; as the translation part.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the transformation Matrix will look like:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$&#xA;T_{12}=&#xA;\begin{pmatrix}&#xA;R_{12} &amp;amp; Tr_{12}\\&#xA;0 &amp;amp; 1&#xA;\end{pmatrix}&#xA;$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also please note that the coordinate system definitions you posted are not conform the Denavit-Hartenberg convention. &lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2017-04-07T14:08:40.340" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="12069" PostTypeId="1" AcceptedAnswerId="12081" CreationDate="2017-04-07T16:23:46.590" Score="0" ViewCount="101" Body="&lt;p&gt;i used ATmega328p chip to make a car, but its the car is always controlled by me.&#xA;my question is in robotic arms , the arm moves using the kinematics that i put, what chip and programming language should i use? i know of matlab which works with matrices, but what chip works with it?&lt;/p&gt;&#xA;" OwnerUserId="16614" LastActivityDate="2017-04-09T12:31:12.030" Title="what controller do we use in robots that has forward and inverse kinematics?" Tags="&lt;control&gt;&lt;microcontroller&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12070" PostTypeId="2" ParentId="12039" CreationDate="2017-04-07T17:17:30.150" Score="0" Body="&lt;p&gt;I recommend using LIDAR because stereo cameras don't work well in low lighting so if it gets shady your robot will do worst.&lt;/p&gt;&#xA;" OwnerDisplayName="user16549" LastActivityDate="2017-04-07T17:17:30.150" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12071" PostTypeId="1" CreationDate="2017-04-07T20:03:17.310" Score="0" ViewCount="216" Body="&lt;p&gt;I almost finished my first quad and first time it just flipped(the back over the front 360 degrees)...the motors and  props are installed correctly..i triple checked but i'm still a  noob in this...my quad specs are q330 frame with naza m lite (with gps),hobbywing 30a esc,rs 2205 motors ,flysky fs i6 with ia6b,3s battery ... maybe someone can help with my problem...i don't want to loose to many props or even worse...thanks&lt;/p&gt;&#xA;" OwnerUserId="16615" LastEditorUserId="7066" LastEditDate="2017-04-07T22:44:49.857" LastActivityDate="2017-12-05T12:38:41.023" Title="unstable quad with naza m lite" Tags="&lt;quadcopter&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12072" PostTypeId="2" ParentId="12039" CreationDate="2017-04-08T01:53:38.403" Score="0" Body="&lt;p&gt;First of all, performance of localization depends more on the processing power and the algorithms you have on your robot and &lt;strong&gt;less&lt;/strong&gt; on the sensor you choose. Also, almost none of the SLAM algorithms and sensors you would use will give you  1mm of accuracy. Having said this here would be some options for you:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Kinect :&#xA;Kinect or an stereo camera can be a pretty good sensor for localization. It can give you 3D point cloud and can be used as a 2D LIDAR too. If you don't want to spend much of money, this is a good option. But again, this has limited range, FOV and can't be used in direct sunlight.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Lidar: These are better than stereo vision cameras and have wider and larger scanning range. Since you'll be using this on a construction site and assuming a cluttered environment, you would need a 3D lidar. Again these are very costly and if you're just using it to just autonomously navigate through your construction site, a 2D laser scanner is cheaper and more efficient option. &lt;a href=&quot;http://www.robotshop.com/en/rplidar-a2-360-laser-scanner.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;This&lt;/a&gt; is viable option and I have used it extensively without any problems.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="11048" LastActivityDate="2017-04-08T01:53:38.403" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12073" PostTypeId="1" CreationDate="2017-04-08T15:03:16.993" Score="0" ViewCount="119" Body="&lt;p&gt;I'm a programmer. I had a tiny amount of experience building robots in college a few years ago, but haven't done anything since.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd like to build a robot that can move around my house, pick items up and put them down... IE, a robot that could get items out of the dishwasher and put them away.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was thinking it would have a square base with a wheel at each corner for moving around the floor, a scissor jack so it can adjust its height (I'm hoping to be able to be able to move between 1 foot tall and 7 feet tall), and then a scissor jack at the top for moving a gripper towards or away from it (between a couple of inches and 3 feet away).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are two scissor jacks actually what I want? It seems like 90+% of robots with grippers go with arms instead, but it seems to me that those are more complicated and would be less precise. I have no robotic experience beyond little car like things - I've never built one with any sort of gripper or actuator, so advise would be much appreciated. (Huh - there's not even a tag for scissor or jack... what do you guys call them?)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also... do people normally build these parts themselves, or do they buy them? I've searched around but I can't find any scissor jack kit or anything like that. If I need to build it myself... how would I do that? What would I build it out of?&lt;/p&gt;&#xA;" OwnerUserId="16618" LastActivityDate="2017-04-08T18:24:40.793" Title="Are scissors what I want for moving straight up and out?" Tags="&lt;actuator&gt;&lt;manipulator&gt;&lt;robotic-arm&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12074" PostTypeId="2" ParentId="10805" CreationDate="2017-04-08T16:56:41.037" Score="0" Body="&lt;p&gt;You might be able to get it to run via wine. If that doesn't work you can definitely get it running in a virtual machine.&lt;/p&gt;&#xA;" OwnerDisplayName="user16549" LastActivityDate="2017-04-08T16:56:41.037" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12075" PostTypeId="2" ParentId="12073" CreationDate="2017-04-08T17:12:29.637" Score="1" Body="&lt;p&gt;The reason most robots use arms is because they are simple and easier to do inverse kinematics on than other mechanisms. Also you don't want to do a 7ft scissor lift because you will end up needing a lot of torque and your control suffers from the change in extension rate based on the height. You will probably end up making your own arm because buying premade arms get expensive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With respect to your driveline, make sure your base is not too small. If you raise something to 7 ft you start to have center of gravity (CG) problems given your base is probably small for use in a house. Consider the robot on an incline plane. All your robot needs to tip is for your CG to move beyond your lowest wheel which is your lowest contact point. For example if your CG moves to 4.5 ft when your lift is 7 ft height and you have a 2ftx2ft square chassis then your robot will tip at an incline of ~12.5 degrees. This means that if it manages to tilt 12.5 degrees from something like it being bumped then it will fall over. Also if it's going to be autonomous you might want to avoid skid steering because it makes encoder readings worst.&lt;/p&gt;&#xA;" OwnerDisplayName="user16549" LastActivityDate="2017-04-08T17:12:29.637" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12076" PostTypeId="1" CreationDate="2017-04-08T17:43:21.017" Score="1" ViewCount="449" Body="&lt;p&gt;I'd like to implement those algorithms by using ROS packages to solve one way the SLAM problem. I know that gmapping, Rviz, slam_gmapping and robot_pose_ekf (for extended kalman filter) could be useful packages, but I'm kind of lost. I don't ask a tutorial because the next days I'm going to start studying deeper this subject, but I need orientation in the procedure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;a possible way to implement RANSAC algorithm&quot; &lt;a href=&quot;http://pointclouds.org/documentation/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://pointclouds.org/documentation/&lt;/a&gt;...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: I'm planning to do something like this indoors. &lt;a href=&quot;https://www.youtube.com/watch?v=17W8dkzkvWA&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=17W8dkzkvWA&lt;/a&gt;.&#xA;I'm working on ubuntu. I have the &quot;kinect&quot; (xbox360), and for now I don't know what kind of cheap 2WD robotic platform choose in pages as amazon, robotshop and ebay (although Canakit 2WD, DFrobot 2WD and alphabot seems to be a good option). More than anything, I need orientation about how to mix everything to solve the SLAM problem with a 2WD robotic platform, the kinect and ROS packages :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance&lt;/p&gt;&#xA;" OwnerUserId="16619" LastEditorUserId="16619" LastEditDate="2017-04-08T18:46:48.887" LastActivityDate="2019-08-27T13:03:50.500" Title="How to implement RANSAC and kalman filter or particle filter algorithms with ROS packages?" Tags="&lt;slam&gt;&lt;ros&gt;&lt;kinect&gt;&lt;filter&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="12077" PostTypeId="2" ParentId="12076" CreationDate="2017-04-08T18:16:43.447" Score="1" Body="&lt;p&gt;Like with anything in engineering, you first need a good definition of what &quot;success&quot; (or &quot;done&quot;) means. SLAM running how fast? Under what particular lighting and environmental conditions? Using what kind of processing power, what kind of weight, driving what kind of chassis, with what kind of battery lifetime?&#xA;Then, you need to break the problem backwards into sub-components, and establish parameters for those components.&#xA;Then, you need to go looking for solutions that exist to fulfill each of the tasks of those components.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems like you're going to other way -- &quot;Here's a pile of parts, what can I build with this?&quot;&#xA;That's okay for exploratory investigation, and creativity (a box of Legos!) but it's a bit harder to hit any PARTICULAR goal using that method.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, to build &quot;forward&quot; like you're attempting to, you still need a way to monitor what's going on. Thus, you want to make sure that your development platform (the computer on the robot) has some kind of monitor, or remote access. X Windows over WiFi might work. A 10&quot; LCD on the robot with a wireless keyboard/mouse may work, if it's easy to read from where you need to be to monitor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you can measure and inspect everything, then it's a process of adding each component from the bottom, poking it with expected stimuli, and making sure it performs as expected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Screw wheels to motors, and connect encoders and motor drive to motor controller. Send commands to motor controller -- do the wheels move as you expect them to?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Add a ROS program to drive your robot. Make sure it connects to the overall ROS system on the control computer. Add a component for driving the motor controllers. Make your program send the appropriate command to make the motors move half a foot. Does the robot move half a foot?&#xA;This will also make you familiar with how different processes/modules within a ROS system communicate using the ROS message bus topics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, add a ROS module to read the Kinect data and display it on the monitor. Does it look okay? Can you read this from your control program?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep adding bits and pieces, verifying that each piece performs in the way you expect. Ideally, also verify what the piece does when you drive it outside its &quot;sweet spot&quot; or when it loses control or gets a bad command -- saftey is important!&lt;/p&gt;&#xA;" OwnerUserId="88" LastActivityDate="2017-04-08T18:16:43.447" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12078" PostTypeId="2" ParentId="12073" CreationDate="2017-04-08T18:24:40.793" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;a robot that could get items out of the dishwasher and put them away&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This is an active research topic. Toyota has a whole division working on assistive robotics, close to Stanford in Palo Alto. It is by no means a solved problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That being said, scissors are a fine way to guide motion in a single dimension, when you can afford the additional size perpendicular to the axis of motion. Scissors expand sideways a lot when they are close to the minimum extension point.&#xA;Also, the backlash in the scissor joints adds up, so a four-joint scissors has four times as much backlash as a single-joint mechanism. Backlash in turn adds to flex and imprecision in movement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're running this in your home, also consider the pinching hazard for pet tails, child fingers, and the occasional forgetful owner.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another option, that is often used, and that uses less space, is a linear actuator. This can be as simple as a worm screw driven by a gear motor or stepper, and some kind of sensor. Open loop stepper counts, encoder motor counts, potentiometer, distance sensor, ... plus a homing / zero sensor / limit switch.&#xA;Add parallel linear rails/rods with appropriate bearings and you get a high-precision, high-strength assembly.&lt;/p&gt;&#xA;" OwnerUserId="88" LastActivityDate="2017-04-08T18:24:40.793" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12079" PostTypeId="2" ParentId="12039" CreationDate="2017-04-08T18:32:35.063" Score="0" Body="&lt;p&gt;A high-performance outdoors LIDAR is almost certainly going to be part of the solution. You still won't get 1mm out to 5m, though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another sensor I would add would be stereo vision. Kinects are kind-of bad in direct sunlight; they are indoor devices; the later RealSense sensors from Intel are better in that regard but certainly not perfect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, consider that dust, sparks, and smoke in a construction site will impede the ability to localize. If you need really precise localization of the robot (rather than other objects) then you can put a number of beacons around the construction site, and let the robot localize using millimeter radio instead. Look for example at &lt;a href=&quot;https://www.pozyx.io/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.pozyx.io/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="88" LastActivityDate="2017-04-08T18:32:35.063" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12080" PostTypeId="2" ParentId="12061" CreationDate="2017-04-08T18:38:13.183" Score="1" Body="&lt;p&gt;In general, when you apply &quot;rotation around a point,&quot; you construct that matrix by doing:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;translate the center of rotation to world origin&lt;/li&gt;&#xA;&lt;li&gt;apply rotation around world origin&lt;/li&gt;&#xA;&lt;li&gt;translate the world origin back to the center of rotation&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Also note that there are two matrix conventions, and nobody agrees which one is &quot;standard&quot;: row vectors on the left, with translation in the bottom row of the matrix, or column vectors on the right, with translation in the right column of the matrix. As long as you know which one you're using, and rigorously stick to it, and know to translate if you import data/formulas from another source, you'll do fine. (The translation of a matrix between conventions is a simple transpose.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Separately, there's the &quot;left handed&quot; versus &quot;right handed&quot; world coordinate interpretation conventions that may also vary, but luckily, the math is the same for both, so it doesn't change the matrices. A 90 degree rotation of unit X around the Z axis yields the unit Y vector, in either convention; the different only happens on translation to/from world coordinate space.&lt;/p&gt;&#xA;" OwnerUserId="88" LastActivityDate="2017-04-08T18:38:13.183" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12081" PostTypeId="2" ParentId="12069" CreationDate="2017-04-08T18:42:42.717" Score="0" Body="&lt;p&gt;Matlab doesn't run on the Atmega328p. You have to use a separate computer, which runs Matlab, and then use some kind of data transmission from the computer to the chip to tell it where to go. I e, the chip would receive solved joint angles from the transmission, and drive the actuators to those angles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you need to run the Matlab on your particular robot, then you need a computer on the robot that can run Matlab. An Intel NUC is a good choice for this. You'll still need some way to get the data from Matlab to the actuators; either use actuators with a built-in serial bus (such as Robotis Dynamixel servos and the USB2Dynamixel serial interface) or use your Atmega328p as a translator from Matlab commands to actuator signals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another option is to write the forward kinematics directly in C++ code. This requires that you're OK with linear algebra details and with C++ programming. Most microcontrollers can do well in this situation, but I'd recommend something reasonably modern an powerful, such as the Teensy 3.5 from PJRC: &lt;a href=&quot;https://www.pjrc.com/store/teensy35.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.pjrc.com/store/teensy35.html&lt;/a&gt;&#xA;It has a hardware floating point unit, which is great, and a good set of libraries and integration into the Arduino IDE, so it will look similar to what you're used to.&lt;/p&gt;&#xA;" OwnerUserId="88" LastActivityDate="2017-04-08T18:42:42.717" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12082" PostTypeId="2" ParentId="11977" CreationDate="2017-04-08T18:48:37.347" Score="0" Body="&lt;p&gt;If you have 6 DOF in your joints, and you want a particular 6 DOF pose, and you have some kind of preferred movement envelope, then there is at most one solution. There is also a closed-form solution to this that you can calculate. Typically, you'll want to design your armature to make this solution easy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have a known desired XYW position and UVW orientation of the end effector, and each axis of rotation is individually controlled, then you can start by posing the endmost three axes (presumably with short translations) to get you to an &quot;ideal plane&quot; for positioning, and then post the other three axes (presumably with longer translations) to get to the point of wherever the third-outmost actuator ended up when getting orientation right.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another option, which is useful when you have a &quot;desired shape&quot; and &quot;desired end goal&quot; incrementally from the current position, is to simply minimize the amount of joint movement (or some other penalty function, such as desired shape) to move between the current state and the desired end state. As long as the end state varies smoothly, the incremental movement between each solution step is small, and the solution converges quickly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That being said, 1 minutes to solve a 6DOF system sounds wrong. Either you're running into numerical problems (denormalized numbers?) or you're implementing the solution wrong, or you're running on some piece of hardware that is not suitable for the task (like, an 8-bit microcontroller without floating point support.)&lt;/p&gt;&#xA;" OwnerUserId="88" LastActivityDate="2017-04-08T18:48:37.347" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12083" PostTypeId="1" CreationDate="2017-04-08T19:53:50.700" Score="4" ViewCount="396" Body="&lt;p&gt;I am using the MPU6050 in conjunction with an Arduino and Jeff Rowberg's i2cdev library, and my project requires that the gyro rate outputs be more precise than the default setting, which is 1/16.4 of a degree (+/-2000 deg/sec range). The gyro outputs can be changed with &lt;code&gt;mpu.setFullScaleGyroRange(uint8_t range)&lt;/code&gt; for which I passed in &lt;code&gt;MPU6050_GYO_FS_500&lt;/code&gt; for range to get a higher precision&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this project, I also need the YPR position, which I obtain through &lt;code&gt;mpu.dmpGetQuaternion(&amp;amp;q, fifoBuffer)&lt;/code&gt; and &lt;code&gt;mpu.dmpGetGravity(&amp;amp;gravity, &amp;amp;q)&lt;/code&gt; and &lt;code&gt;mpu.dmpGetYawPitchRoll(ypr, &amp;amp;q, &amp;amp;gravity)&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is with the new gyro output range, the YPR position changes drastically when the MPU is being rotated and slowly catches up again once the MPU is held still. I think there is an error in the filter that combines the gyro and accel data that is making the gyro to sensitive. Maybe the DMP is dividing the GYRO rate data by the default sensitivity factor (16.4) when it should be dividing by the new one (131)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;How can I get accurate YPR readings without delay?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a screenshot of the data. The axis aren't labeled, but the x-axis represents about 16 seconds of time. The blue line is the &lt;strong&gt;gyro rate data&lt;/strong&gt;, and the pink line is the &lt;strong&gt;roll position&lt;/strong&gt; of the MPU. The graph shows two rotations of the MPU.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/QzjDx.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QzjDx.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="16620" LastEditorUserId="16620" LastEditDate="2017-09-30T04:41:15.377" LastActivityDate="2021-04-12T19:02:15.173" Title="MPU6050: Changing Gyro Output Range Throws off Positional Reading" Tags="&lt;quadcopter&gt;&lt;arduino&gt;&lt;imu&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12084" PostTypeId="1" CreationDate="2017-04-08T23:32:40.340" Score="2" ViewCount="250" Body="&lt;p&gt;When using Paden-Kahan Sub-problems to solve the inverse kinematics of manipulators, 'r' is described as the intersection point between the first and second twist axes. But how is this r actually found?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Referencing Murray (&lt;a href=&quot;http://www.cds.caltech.edu/~murray/books/MLS/pdf/mls94-complete.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;), on page 122.&lt;/p&gt;&#xA;" OwnerUserId="16589" LastActivityDate="2017-08-08T19:47:37.887" Title="For the second Paden-Kahan Sub-problem, how is 'r' determined?" Tags="&lt;inverse-kinematics&gt;&lt;dh-parameters&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12085" PostTypeId="1" CreationDate="2017-04-09T04:57:39.507" Score="1" ViewCount="271" Body="&lt;p&gt;I've been working on this Arduino-MPU6050 quadcopter for a while now, and it looks like it's close to being finished. I have programmed it in rate mode, so the PID's control the rotational velocity. Once I get those perfected I will write an outer set of positional PID's to control the rate ones.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But anyway, I'm still having issues getting the drone perfectly stable, and it drifts around more than it should. Below you can see a screenshot of a program I wrote, which shows the angular velocity in blue and the angular position in pink:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/HrQkR.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HrQkR.png&quot; alt=&quot;A fun little line-graph&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can see, the quadcopter is wobbling around pretty much randomly, and since there aren't any steady oscillations I'm guessing my PID is okay and that the instability is from something physical like vibration. &lt;em&gt;Is this a reasonable assumption?&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am looking for any suggestions/possible explanations for this instability, and guidance on what I should do next. Invest in ant-vibration foam? Revise my PID?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I should also mention that I have not flown the quadcopter. I have it suspended using ropes attached to the legs of an upside down chair so that I can test one axis at a time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;General List of thing's I've Tried:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Modified the Arduino Servo.h to update the ESC's more frequently.&lt;/li&gt;&#xA;&lt;li&gt;Changed the precision of my gyro from default 1/16.4 deg to 1/65.5 deg.&lt;/li&gt;&#xA;&lt;li&gt;Balanced the props with bits of electrical tape.&lt;/li&gt;&#xA;&lt;li&gt;Adjusted PID gains.&lt;/li&gt;&#xA;&lt;li&gt;PID sample rate set to 3ms (333hz).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt;&#xA;Here is a snippet of my PID:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;if (millis() - updateTimerPID &amp;gt;= sampleMillisPID) {&#xA;    if (thrust &amp;lt;= 1200) { // Don't turn on PID until sufficient throttle is reached.&#xA;      NWPower = thrust; //&#xA;      NEPower = thrust; // If PID not activated, set motors to base-throttle.&#xA;      SWPower = thrust; //&#xA;      SEPower = thrust; //&#xA;&#xA;      inAutoRoll = false;  // Roll-Axis PID not activated.&#xA;      inAutoPitch = false; // Pitch-Axis PID not activated.&#xA;      inAutoYaw = false;   // Yaw-Axis PID not activated.&#xA;&#xA;      I_rollRate = 0;   // Reset roll rate integral term. &#xA;      I_pitchRate = 0;  // Reset pitch rate integral term.&#xA;      I_yawRate = 0;    // Reset yaw rate integral term.&#xA;&#xA;    } else { //PID is active - adjust Roll/Pitch/Yaw.&#xA;&#xA;      adjustRollRate();&#xA;  //  adjustPitchRate();&#xA;  //  adjustYawRate();&#xA;    }&#xA;    updateTimerPID = millis(); // Reset PID timer.&#xA;  } &#xA;&#xA;void adjustRollRate () {&#xA;  float offset = requestedRollRate - rollRate; //How far off from the wanted roll angular velocity.&#xA;&#xA;  I_rollRate += KrI * offset; // Adjust roll rate integral term.&#xA;&#xA;  if(!inAutoRoll) { // Did the PID just turn on?&#xA;    lastRollRateOffset = offset; // The previous offset is set to the current one (D-term is now zero for this instance).&#xA;    inAutoRoll = true; // The PID is now on.&#xA;  }&#xA;&#xA;  float adjust = (KrP * offset) + I_rollRate + (KrD * (offset -lastRollRateOffset)); // Motor power adjust value.&#xA;&#xA;  NWPower += adjust; //&#xA;  NEPower -= adjust; // Adjust the motor powers.&#xA;  SWPower += adjust; //&#xA;  SEPower -= adjust; //&#xA;&#xA;  if (NWPower &amp;gt; maxOutPID)NWPower = maxOutPID;&#xA;  else if (NWPower &amp;lt; minOutPID)NWPower = minOutPID;&#xA;&#xA;  if (NEPower &amp;gt; maxOutPID)NEPower = maxOutPID;&#xA;  else if (NEPower &amp;lt; minOutPID)NEPower = minOutPID;&#xA;&#xA;  if (SWPower &amp;gt; maxOutPID)SWPower = maxOutPID;&#xA;  else if (SWPower &amp;lt; minOutPID)SWPower = minOutPID;&#xA;&#xA;  if (SEPower &amp;gt; maxOutPID)SEPower = maxOutPID;&#xA;  else if (SEPower &amp;lt; minOutPID)SEPower = minOutPID;&#xA;&#xA;&#xA;  lastRollRateOffset = offset;    // Remember the offset for next time.&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="16620" LastEditorUserId="16620" LastEditDate="2017-04-16T22:00:47.750" LastActivityDate="2017-04-16T22:00:47.750" Title="Is it my PID that is unstable or my physical system? (Quadcopter)" Tags="&lt;quadcopter&gt;&lt;arduino&gt;&lt;pid&gt;&lt;imu&gt;" AnswerCount="0" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="12086" PostTypeId="2" ParentId="12071" CreationDate="2017-04-09T08:07:48.570" Score="1" Body="&lt;p&gt;There are multiple possibilities for the flip of quadrotor.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;It can be because of incorrect prop directions (in X or + configuration, the diagonally opposite props must have same rotational direction and adjacent props must have opposite rotational direction; This is all about compensation of angular momentum).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;It can be because of a faulty ESC or improperly tuned ESC. There are several ways to tune ESCs properly. (Like this: &lt;a href=&quot;https://librepilot.atlassian.net/wiki/display/LPDOC/ESC+Calibration&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://librepilot.atlassian.net/wiki/display/LPDOC/ESC+Calibration&lt;/a&gt; )&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;It can be an issue of PID tuning. (&lt;a href=&quot;http://myfirstdrone.com/tutorials/how-to-tune-a-quadcopter/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://myfirstdrone.com/tutorials/how-to-tune-a-quadcopter/&lt;/a&gt; &lt;a href=&quot;https://oscarliang.com/quadcopter-pid-explained-tuning/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://oscarliang.com/quadcopter-pid-explained-tuning/&lt;/a&gt; )&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;IMU may not be calibrated properly and the EKF estimates may be wrong. (&lt;a href=&quot;https://fpv-flightclub.com/quadcopter-flips-takeoff/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://fpv-flightclub.com/quadcopter-flips-takeoff/&lt;/a&gt; Accelerometer and Gyro orientation along with Compass need to be properly set up)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;(Rare) GPS functionality might be malfunctioning ending that up with GPS locks for inaccurate location estimates.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;BTW, there are many forums that address this issue and simple Google search is ending up with results like:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://oscarliang.com/quadcopter-flies-unstable-flips-troubleshoot/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://oscarliang.com/quadcopter-flies-unstable-flips-troubleshoot/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://diydrones.com/forum/topics/quadcopter-flips-on-liftoff&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://diydrones.com/forum/topics/quadcopter-flips-on-liftoff&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.rcgroups.com/forums/showthread.php?2284434-My-x-quadcopter-flips-on-takeoff&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.rcgroups.com/forums/showthread.php?2284434-My-x-quadcopter-flips-on-takeoff&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please consider mentioning what you have tried and what hasn't worked (otherwise this question is 'too broad' with many Google results popping up for same).&lt;/p&gt;&#xA;" OwnerUserId="15014" LastActivityDate="2017-04-09T08:07:48.570" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12087" PostTypeId="2" ParentId="9819" CreationDate="2017-04-09T08:13:33.693" Score="1" Body="&lt;p&gt;Referencing my answer from &lt;a href=&quot;https://robotics.stackexchange.com/a/12086/15014&quot;&gt;https://robotics.stackexchange.com/a/12086/15014&lt;/a&gt; ,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are multiple possibilities for the flip of quadrotor.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;It can be because of incorrect prop directions (in X or + configuration, the diagonally opposite props must have same rotational direction and adjacent props must have opposite rotational direction; This is all about compensation of angular momentum).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;It can be because of a faulty ESC or improperly tuned ESC. There are several ways to tune ESCs properly. (Like this: &lt;a href=&quot;https://librepilot.atlassian.net/wiki/display/LPDOC/ESC+Calibration&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://librepilot.atlassian.net/wiki/display/LPDOC/ESC+Calibration&lt;/a&gt; )&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;It can be an issue of PID tuning. (&lt;a href=&quot;http://myfirstdrone.com/tutorials/how-to-tune-a-quadcopter/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://myfirstdrone.com/tutorials/how-to-tune-a-quadcopter/&lt;/a&gt; &lt;a href=&quot;https://oscarliang.com/quadcopter-pid-explained-tuning/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://oscarliang.com/quadcopter-pid-explained-tuning/&lt;/a&gt; )&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;IMU may not be calibrated properly and the EKF estimates may be wrong. (&lt;a href=&quot;https://fpv-flightclub.com/quadcopter-flips-takeoff/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://fpv-flightclub.com/quadcopter-flips-takeoff/&lt;/a&gt; Accelerometer and Gyro orientation along with Compass need to be properly set up)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;(Rare) GPS functionality might be malfunctioning ending that up with GPS locks for inaccurate location estimates.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;BTW, there are many forums that address this issue and simple Google search is ending up with results like:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://oscarliang.com/quadcopter-flies-unstable-flips-troubleshoot/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://oscarliang.com/quadcopter-flies-unstable-flips-troubleshoot/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://diydrones.com/forum/topics/quadcopter-flips-on-liftoff&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://diydrones.com/forum/topics/quadcopter-flips-on-liftoff&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.rcgroups.com/forums/showthread.php?2284434-My-x-quadcopter-flips-on-takeoff&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.rcgroups.com/forums/showthread.php?2284434-My-x-quadcopter-flips-on-takeoff&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please consider mentioning what you have tried and what hasn't worked (otherwise this question is 'too broad' with many Google results popping up for same).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;+1 for @Chuck 's comment: &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Without any data, anyone that answers will be guessing at what could&#xA;  be wrong. Can you provide any data? Pictures of your quadcopter, your&#xA;  test setup, data from the flight controller, etc.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="15014" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.040" LastActivityDate="2017-04-09T08:13:33.693" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12088" PostTypeId="2" ParentId="10808" CreationDate="2017-04-09T10:44:37.193" Score="1" Body="&lt;p&gt;100 feet seems too far given the occlusions (like player's hands masking or player's body covering the ball while dribbling). So, I would suggest multiple cameras with linear Kalman tracking (According to my experience this works really well when the problem involves practical limits; Like humans' running velocity is fairly predictable; Dribbling rate is predictable etc) and then adding sophisticated trackers like deep-nets if necessary. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If two cameras are used near two hoops, programming will be significantly simplified regarding the scoring. However, for tracking (3D positional information of the ball), we have two sources of information: Players' movements and ball's movement. We can use multiple cameras like this &lt;a href=&quot;https://pdfs.semanticscholar.org/fb69/2c04d7720a68c49efb1cc4608b6fc90e4ca0.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://pdfs.semanticscholar.org/fb69/2c04d7720a68c49efb1cc4608b6fc90e4ca0.pdf&lt;/a&gt; and detect people like this &lt;a href=&quot;http://onlinepresent.org/proceedings/vol16_2012/6.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://onlinepresent.org/proceedings/vol16_2012/6.pdf&lt;/a&gt; .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We can use detection and tracking of people (with second Kalman filter and other sophisticated algorithms can be added later if necessary) for two reasons:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;We can detect all the elements on the ground and subtract people; This gives us ball in most cases.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;We can use conditional state-estimate probability to figure out the probability of the states of the ball when it is occluded. (For example, players who are near the ball are generally frenzied and they tend to be crowded near the ball and they will generally be running at a faster rate)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;+1 for awesome question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: 100 feet with stereo vision is difficult; I am referencing my previous answer here &lt;a href=&quot;https://robotics.stackexchange.com/a/11856/15014&quot;&gt;https://robotics.stackexchange.com/a/11856/15014&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Basically, off-the-shelf cameras do not provide such information and associative learning can give out some information for upto 50 metre. So, there must be a great training information as the machine 'learns' just that)&lt;/p&gt;&#xA;" OwnerUserId="15014" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2017-04-09T10:51:30.450" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12089" PostTypeId="1" AcceptedAnswerId="12160" CreationDate="2017-04-09T11:40:16.113" Score="0" ViewCount="182" Body="&lt;p&gt;I'm looking for a good breakdown and explanation of Google's 'Tango' AR platform.  Specifically how the hardware works together to generate depth maps and the SDK's use of it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know the hardware composes of a fisheye lens camera and an RGB-I camera.  I am only familiar with stereo vision with identical cameras and disparity maps, I am thinking the different lenses and camera elements make it easier to distinguish variations in the environment but must have some very special (and proprietary) algorithms.  However, there must actually some special hardware and dedicated chipsets for processing the depth map to take the burden off the CPU/GPU?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, for the AR software implementation, I assume the SDK has some GPU utilization built into it like OpenCL or CUDA (but specific for the Adreno GPU).  Does it simply use OpenCL (this is supported by the Adreno GPU) or does it have something proprietary from Google similar to CUDA for the nVidia chipsets?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basis for the question - I work with OpenCV some and am experimenting with stereo vision applications, but would like to move on to developing apps for specialized hardware and this sounds like the right (maybe only?) platform.&lt;/p&gt;&#xA;" OwnerUserId="14775" LastEditorUserId="14775" LastEditDate="2017-04-09T12:12:45.327" LastActivityDate="2017-04-19T01:33:16.127" Title="Google's 'Tango' - How it works and what's special about the hardware?" Tags="&lt;computer-vision&gt;&lt;stereo-vision&gt;&lt;opencv&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12090" PostTypeId="2" ParentId="12069" CreationDate="2017-04-09T12:31:12.030" Score="1" Body="&lt;p&gt;There are a number of way to integrate code written in Matlab to a number of platforms. For a robot arm, you would most likely need a processor with a floating point unit. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Probably the most cost effective solution is to use a Raspberry Pi. It is officially supported as a platform by Matlab (Simulink), so you may be able to transfer matlab code directly to the Pi (please look up the limitations &lt;a href=&quot;https://www.mathworks.com/hardware-support/raspberry-pi-simulink.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Arduino is also supported by Matlab (however computational performance is more limited then the rPi).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to use different chips, Matlab can generare C/C++ code from Matlab or Simulink applications. It require some coding knowledge, but you can incorporate these to an IDE using the same language and use them even if Matlab does not officially support the integration to that IDE.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2017-04-09T12:31:12.030" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12091" PostTypeId="2" ParentId="4717" CreationDate="2017-04-09T15:37:30.970" Score="1" Body="&lt;p&gt;There are couple of ways to detect road surface. One is to use planar gradients (like linear gradients in 3D) as mentioned in @ArminMeisterhirn 's answer. (&lt;a href=&quot;http://www.pointclouds.org/assets/uploads/3DRP-PCL14_Bellone.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.pointclouds.org/assets/uploads/3DRP-PCL14_Bellone.pdf&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;p&gt;Other one is to use associative learning; We can identify objects in image (like cars, roads etc some hints can be found in this video &lt;a href=&quot;https://www.youtube.com/watch?v=j8zj5lBpFTY&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=j8zj5lBpFTY&lt;/a&gt; ) and use corresponding point cloud data and train the second stage with corresponding 3D objects. (Like using CNN for object classification/ training as per &lt;a href=&quot;http://www.image-net.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;ImageNet&lt;/a&gt;) (Example attempt: &lt;a href=&quot;https://people.csail.mit.edu/fisher/publications/papers/mastin09cvpr.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://people.csail.mit.edu/fisher/publications/papers/mastin09cvpr.pdf&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;p&gt;I prefer second option and usage of AI. There is a database containing both images and other sensors' data timestamped by software automatically as available &lt;a href=&quot;http://grandchallenge.mit.edu/wiki/index.php?title=PublicData&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://grandchallenge.mit.edu/wiki/index.php?title=PublicData&lt;/a&gt; .&lt;/p&gt;&#xA;" OwnerUserId="15014" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2017-04-09T15:37:30.970" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12092" PostTypeId="2" ParentId="11972" CreationDate="2017-04-09T16:01:35.473" Score="2" Body="&lt;p&gt;One of the best ways is to use a combination of hough-transform (what you have achieved is nice) and inverse perspective transform (as in &lt;a href=&quot;http://www.vision.caltech.edu/malaa/publications/aly08realtime.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.vision.caltech.edu/malaa/publications/aly08realtime.pdf&lt;/a&gt;). This is because, inverse perspective transform fails at 'very near' and 'very far' distances and hough transform can be compensated for that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, once we get parallel lines, we can use that information for localisation; if one of the two edges is missing, then, it means that the robot is not on lane most probably; We can figure out mid-line (average of two edges after inverse perspective transform and filtered by hough-line fusion) and use an evaluation function to figure out how distant the robot is from the centre of the lane.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This solution definitely fails in cases of intersection and parallel lanes (one lane next to another and both lanes are detected simultaneously). In such cases, some sort of mapping or path planning is mandatory (with costs associated for change of lane and wrong routes at intersections). Thus, this solution only applies locally.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For some more learning, auto-encoders can be used for steering angle estimation (as in &lt;a href=&quot;https://arxiv.org/pdf/1608.01230.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://arxiv.org/pdf/1608.01230.pdf&lt;/a&gt; ; But, too much blurring can mean simple averaging and very precise auto-encoding reproduction means over-fitting; Dataset can be found here &lt;a href=&quot;https://github.com/commaai/research&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/commaai/research&lt;/a&gt;).&lt;/p&gt;&#xA;" OwnerUserId="15014" LastActivityDate="2017-04-09T16:01:35.473" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12097" PostTypeId="2" ParentId="12061" CreationDate="2017-04-10T09:57:58.670" Score="0" Body="&lt;p&gt;Firstly, I have to say that all the problems was because of my inattentiveness. Nothing was wrong with rotating $O_{1}O_{2}$ by $q_{1}$. The problem was about rotating first joint about global coordinates $Z$ axis instead of its' axis. Therefore I got an error between calculation and position in my modelling environment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Several times I was told that I have not to include $q$ in the translation part. Not only here but also in some other sources. However it is not true and I wonder why so many people have told me about that. Let us look at what actually happens here. For simplicity we will look at the planar case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assume initial configuration like pictured below: &#xA;&lt;a href=&quot;https://i.stack.imgur.com/znzNr.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/znzNr.png&quot; alt=&quot;Explanation not rotated&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's describe two transformation matrices: one which includes $q_{1}$ in translation part and one that does not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$&#xA;T_{01}=\begin{pmatrix}&#xA;cos(q_{1}) &amp;amp; -sin(q_{1}) &amp;amp; a_{1}\\&#xA;sin(q_{1}) &amp;amp; cos(q_{1}) &amp;amp; 0\\&#xA;0 &amp;amp; 0 &amp;amp; 1&#xA;\end{pmatrix}\\&#xA;T_{01}'=\begin{pmatrix}&#xA;cos(q_{1}) &amp;amp; -sin(q_{1}) &amp;amp; a_{1}cos(q_{1})\\&#xA;sin(q_{1}) &amp;amp; cos(q_{1}) &amp;amp; a_{1}sin(q_{1})\\&#xA;0 &amp;amp; 0 &amp;amp; 1&#xA;\end{pmatrix}\\&#xA;$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Vector $\vec{a_{2}}$ in $O_{1}$ frame is $\vec{a_{2}} = \begin{pmatrix}&#xA;x_{0}'\\y_{0}'\\1\end{pmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now let's rotate our $\vec{a_{1}}$ by some angle $q_{1}$&#xA;&lt;a href=&quot;https://i.stack.imgur.com/0kI5R.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0kI5R.png&quot; alt=&quot;Explanation rotated&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What coordinates in origin frame vector $\vec{a_{2}}$ has? Geometrically easy to find that $\vec{a_{2}^{0}} = \begin{pmatrix}&#xA;cos(q_{1})x_{0}'-sin(q_{1})y_{0}'+a_{1}cos(q_{1})\\&#xA;sin(q_{1})x_{0}'+cos(q_{1})y_{0}'+a_{1}sin(q_{1})\\&#xA;1&#xA;\end{pmatrix}&#xA;$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now let's multiply our transformation matrices by $a_{2}$ and we should get the same result.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$&#xA;T_{01}\vec{a_{2}}=\begin{pmatrix}&#xA;cos(q_{1})x_{0}'-sin(q_{1})y_{0}'+a_{1}\\&#xA;sin(q_{1})x_{0}'+cos(q_{1})y_{0}'\\&#xA;1&#xA;\end{pmatrix}\\\\&#xA;T_{01}'\vec{a_{2}}=\begin{pmatrix}&#xA;cos(q_{1})x_{0}'-sin(q_{1})y_{0}'+a_{1}cos(q_{1})\\&#xA;sin(q_{1})x_{0}'+cos(q_{1})y_{0}'+a_{1}sin(q_{1})\\&#xA;1&#xA;\end{pmatrix}&#xA;$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And you see the difference: first transformation does not consider $O_{1}$ coordinate changes introduced by $q_{1}$ and it shifts our vector by the whole $a_{1}$ along $X$ and by 0 along $Y$. Therefore IF next joint coordinates are changed by current joint angle, you have to find projections in your translation part or if you know initial vector between their origins, you can rotate it by $q_{1}$. However the latter approach is more computationally expensive. Otherwise if coordinates are not going to be changed, you can throw out unnecessary calculations.&lt;/p&gt;&#xA;" OwnerUserId="15392" LastEditorUserId="15392" LastEditDate="2017-04-10T11:03:40.560" LastActivityDate="2017-04-10T11:03:40.560" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12098" PostTypeId="2" ParentId="12084" CreationDate="2017-04-10T17:56:41.520" Score="1" Body="&lt;p&gt;The subproblem starts with the assumption that $\xi_1$ (axis one) and $\xi_2$ (axis two) intersect. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each axis has a unit normal, $\omega_1$ and $\omega_2$, that points in the direction of their respective axes. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You are told that the two axes intersect, but you can verify that for yourself by checking that the cross product of the two axes is nonzero. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If $\omega_1 \times \omega_2 \neq 0$, then there is an intersection. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;From there, you can find the intersection of the two axes using an &lt;a href=&quot;https://en.wikipedia.org/wiki/Line%E2%80%93line_intersection#Given_two_points_on_each_line&quot; rel=&quot;nofollow noreferrer&quot;&gt;intersection test&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-04-10T17:56:41.520" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12101" PostTypeId="2" ParentId="10642" CreationDate="2017-04-10T21:26:12.083" Score="1" Body="&lt;p&gt;Gyros measure angular velocity without the insane drift that comes from integrating accelerometer data. Integrating accelerometers for velocity or position is not a good idea because any noise gets integrated. In theory if the noise was perfectly random this wouldn't be a problem but the noise almost never is.&lt;/p&gt;&#xA;" OwnerDisplayName="user16549" LastActivityDate="2017-04-10T21:26:12.083" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12102" PostTypeId="1" AcceptedAnswerId="12113" CreationDate="2017-04-10T22:06:56.647" Score="0" ViewCount="440" Body="&lt;p&gt;First of all sorry for the confusing question title. I am also confused about the concept.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have implemented a quadcopter and its controller. Controller finds the rotor speeds based on the position and yaw angle references.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The thing that I don't understand is, let's say I want the vehicle to climb 5m up and then 5m left. At this point, I think I need to create a vector containing the reference values. By the way, the model is discretized by some deltaT time interval so the reference vector. This does not coincide and well behave according to the dynamics of the vehicle. Let's say, the reference input for altitude is 5m until 5sec and 0 for [5,10]sec. But it is not guaranteed that the vehicle will reach to 5m altitude in 5sec. Thus, my intention is, that reference vector shouldn't rely on the time. Therefore, my perception is to use some if condition to check if the vehicle is reached for the first waypoint and then, register the next one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which is a simple if-else statement? This makes me think what is the mathematical or analytical background in this. Is it just the following of the line between two waypoints by geometrical analysis like Line of Sight guidance law things.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can you give me some insight about the concept which makes me confused?&lt;/p&gt;&#xA;" OwnerUserId="15133" LastActivityDate="2017-04-11T15:18:51.503" Title="How path following works analytically for way points?" Tags="&lt;mobile-robot&gt;&lt;control&gt;&lt;path-planning&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12103" PostTypeId="1" AcceptedAnswerId="12104" CreationDate="2017-04-11T00:28:32.287" Score="0" ViewCount="396" Body="&lt;p&gt;(full disclosure: this is homework)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a twist expressed in frame B:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\zeta_b = \begin{bmatrix}1\\3\\-2\\0\\-2\\4\end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And a general transformation matrix:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$g_{ab} = \begin{bmatrix}-0.4749 &amp;amp; 0.8160 &amp;amp; 0.3294 &amp;amp; -1.5\\-0.2261 &amp;amp; -0.4749 &amp;amp; -0.8505 &amp;amp; -1\\-0.8505 &amp;amp; -0.3294 &amp;amp; 0.4100 &amp;amp; 2\\0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1\end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How would I go about converting my twist into frame A?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suspect I would break $\zeta_b$ into its component $\omega$ and $v$ vectors using the knowledge that:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\zeta = \begin{bmatrix}v \\ \omega\end{bmatrix} = \begin{bmatrix}-\omega \times q \\ \omega\end{bmatrix}$ (where $q$ is a point on $\omega$)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I am unsure.&lt;/p&gt;&#xA;" OwnerUserId="16367" LastEditorUserId="10414" LastEditDate="2021-01-25T16:09:53.293" LastActivityDate="2021-01-25T16:09:53.293" Title="Convert Twist from frame B to frame A" Tags="&lt;rotation&gt;&lt;screw-theory&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2017-04-11T13:49:06.683" ContentLicense="CC BY-SA 3.0" />
  <row Id="12104" PostTypeId="2" ParentId="12103" CreationDate="2017-04-11T03:58:31.693" Score="3" Body="&lt;p&gt;Hint: First, write the transformation matrix as&#xA;$$&#xA;T = \begin{bmatrix}&#xA;R &amp;amp;p\\0_{1\times3} &amp;amp;1&#xA;\end{bmatrix}.&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now we use the relations $\omega_a = R\omega_b$ and $q_a = Rq_b + p$. Then since $v_a = -\omega_a \times q_a$, we can derive $v_a$ in terms of all the known quantities.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;In fact, two twists representing the same screw motion described in different reference frames are related to each other by an &lt;em&gt;adjoint map&lt;/em&gt;. That is given $S_a = (\omega_a, v_a)$ and $S_b = (\omega_b, v_b)$, we have&#xA;$$&#xA;S_a = [Ad_{T_{ab}}](S_b)\\&#xA;S_b = [Ad_{T_{ba}}](S_a),&#xA;$$&#xA;where $[Ad_T] = \begin{bmatrix}&#xA;R &amp;amp; 0\\&#xA;[p]R &amp;amp; R&#xA;\end{bmatrix}$ and $[p]$ is the screw symmetric matrix constructed from $p$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found the material of &lt;a href=&quot;https://www.edx.org/course/robot-mechanics-control-part-i-snux-snu446-345-1x&quot; rel=&quot;nofollow noreferrer&quot;&gt;this edX course&lt;/a&gt; really helpful for me to understand this topic. Maybe you want to check it out.&lt;/p&gt;&#xA;" OwnerUserId="7610" LastActivityDate="2017-04-11T03:58:31.693" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="12105" PostTypeId="1" AcceptedAnswerId="12116" CreationDate="2017-04-11T07:16:37.057" Score="0" ViewCount="309" Body="&lt;p&gt;As we know, we can calculate altitude from barometer readings, and a UAV can hold height by referring to these data. However the real air pressure is varying with many conditions. These variance will cause the UAV's height unstable. Is it possible to avoid height drifting due to pressure changes using sensor fusion without GPS?&lt;/p&gt;&#xA;" OwnerUserId="16390" LastEditorUserId="16390" LastEditDate="2017-04-12T05:44:02.277" LastActivityDate="2017-04-12T05:44:02.277" Title="Is it possible that a quadcopter hold height for long time stable only using IMU (without GPS) and barometer?" Tags="&lt;quadcopter&gt;&lt;sensors&gt;&lt;kalman-filter&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12106" PostTypeId="2" ParentId="12105" CreationDate="2017-04-11T13:23:02.720" Score="0" Body="&lt;p&gt;You would probably get better altitude hold using an IMU barometer sensor fusion scheme because IMU is accurate short term and you can prevent drift with the barometric reading. Also the barometric pressure doesn't change that much if you temperature compensate.&lt;/p&gt;&#xA;" OwnerDisplayName="user16549" LastActivityDate="2017-04-11T13:23:02.720" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12107" PostTypeId="2" ParentId="12102" CreationDate="2017-04-11T13:32:34.110" Score="3" Body="&lt;p&gt;Most people just create a queue of waypoints on the path and go through one at a time. There are more complex path execution schemes that are more continuous but your application I doubt this is required. If your interested in looking for more complex schemes you can use B-Splines(&lt;a href=&quot;https://en.wikipedia.org/wiki/B-spline&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/B-spline&lt;/a&gt;) between waypoints. You hit the nail on the head when you brought up that you might not be at the target location when you think you will be there. Usually people get around that by having a good controller and recomputing the path as needed.&lt;/p&gt;&#xA;" OwnerDisplayName="user16549" LastActivityDate="2017-04-11T13:32:34.110" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12108" PostTypeId="1" AcceptedAnswerId="12110" CreationDate="2017-04-11T13:50:40.697" Score="3" ViewCount="4135" Body="&lt;p&gt;I have a two port powerbank capable of supplying a maximum of 5V 2.1A&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm using it to power an Arduino and a L293D IC connected to two DC motors which have the following specifications:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Working voltage : 3V to 9V&lt;/li&gt;&#xA;&lt;li&gt;No-load current = 60 mA, Stall current = 700 mA&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The setup is not working and I have made the following observations&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) The voltage across the output terminals of the powerbank is read as 4.9V (when the arduino is not powered either from the other port of the power bank or another power supply all together)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) The voltage across the output terminals of the powerbank is read as 4.0V when the Arduino is powered either from the other port of the power bank or my laptop&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This voltage is given to the L293D Pin 8 (That is meant to be given 12V). A 12V to 5V buck provides the 5V to the IC itself (this is part of the motor driver board)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3) When only one motor is switched on, the voltage provided to that motor is 2.8V. The motor rotates only when given some manual force on the axle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;4) When both motors are switched on, the voltage provided to each motor is around 0.5V. Both the motors don't rotate at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;5) When only one motor is switched on, the voltage reads around 0.2V until given manually rotating the axle after which it picks up speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I couldn't measure the current (or rather measured current to be 0A) anywhere as the motors don't rotate at all if I connect the ammeter. I understand that the power bank supplies power only when the load connected to it demands the power (due to smart sensing).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What should I do so that the power bank continually provides 5V and this 5V is delivered to each motor?&lt;/p&gt;&#xA;" OwnerUserId="16642" LastActivityDate="2017-08-05T10:44:15.313" Title="Supplying power from a power bank to an arduino and DC Motors" Tags="&lt;arduino&gt;&lt;motor&gt;&lt;power&gt;" AnswerCount="3" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="12109" PostTypeId="2" ParentId="11842" CreationDate="2017-04-11T14:05:45.090" Score="0" Body="&lt;p&gt;You can use Simscape Multibody (the new name for what was SimMechanics) as a two-step process.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Joints in the package generally allow for one of two inputs to be used - force/torque or position. If you choose to provide joint torque, then the resulting output motion is calculated by the dynamics of the system. If you choose to provide joint position, then Simscape calculates the force/torque required to achieve that motion, then applies that to the system dynamics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The process I would use for designing would go something like this:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Create a motion profile that you deem is representative of the tasks the robot is supposed to perform. &lt;/li&gt;&#xA;&lt;li&gt;Calculate the inverse kinematics to get the required joint angles to achieve the motion profile. &lt;/li&gt;&#xA;&lt;li&gt;Use the &lt;a href=&quot;https://robotics.stackexchange.com/a/11847/9720&quot;&gt;joint sensors 50k4 mentioned&lt;/a&gt; to trend/plot the joint forces and torques required to achieve your motion profile. &lt;/li&gt;&#xA;&lt;li&gt;Choose the peak force/torque for each axis of motion, add some performance margin, and choose actuators that at least provide that performance. &lt;/li&gt;&#xA;&lt;li&gt;Generate a model for the actuators you selected. This model includes whatever actuator dynamics there are along with whatever input conditioning you're expecting to use. For example, how are you expecting to have the actuators in real life track joint angle? PID control of angle error? That's what you model. &lt;/li&gt;&#xA;&lt;li&gt;Replace your ideal multibody joints with your detailed actuator models. &lt;/li&gt;&#xA;&lt;li&gt;Re-run your simulation and verify you're getting the performance you want.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Important to note - try to model weight and bulk as accurately as you can. Masses and inertias can, in some instances, have a very dramatic and negative impact on performance.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="-1" LastEditDate="2017-04-13T12:49:18.317" LastActivityDate="2017-04-11T14:05:45.090" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12110" PostTypeId="2" ParentId="12108" CreationDate="2017-04-11T14:10:11.763" Score="2" Body="&lt;p&gt;Are you sure the problem is about smart sensing ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should look about your 12V to 5V converter. Most of these devices require a minimum voltage above the desired voltage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typically, many 5V regulators requires 7V input.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, is this regulator necessary ? Since your powerbank supply 5V, you don't need to lower the voltage.&lt;/p&gt;&#xA;" OwnerUserId="16643" LastActivityDate="2017-04-11T14:10:11.763" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="12111" PostTypeId="2" ParentId="12108" CreationDate="2017-04-11T14:10:20.507" Score="0" Body="&lt;p&gt;A powerbank is a battery. It sounds like your battery is not charged. When was the last time you charged it? What happens when you try to charge it now?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would suggest putting it on to charge for an hour at least and checking if performance is better or worse.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-04-11T14:10:20.507" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="12112" PostTypeId="1" CreationDate="2017-04-11T14:32:02.760" Score="2" ViewCount="1139" Body="&lt;p&gt;I am Carlos Barreiro and I am studying a Robotics Master. Now I am working with my Thesis. The project consists in the teleoperation of the a robot with Kinect (model 1). More specifically, I am working with the humanoid robot Pepper which is developed by Aldebaran (Softbank).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the skeleton tracking in real time I am using the Kinect for Windows SDK (v1.8).  Because with the kinect 1 I can’t obtain the Skeleton tracking in Linux :-(. It is not a problem, I think that I can continue with Windows for a few time.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For this project I use Python because I have more experience with this language and it is easier communicate with Naoqi (the robot middleware). For the communication with Kinect I am using the library PyKinect, it is a wrapper from the C++ Windows SDK.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My problem is calculating the rotation angle for the arm actuators. The robot needs translate the positions of the points of the skeleton to an angle for each motor (Pitch Roll or Yaw) like the bellow picture.  So I need to get the shoulder pitch, should roll, elbow roll and elbow Yaw.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/l2i0j.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/l2i0j.png&quot; alt=&quot;Arms actuator of Pepper&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The skeleton that I got from Kinet gives me the 3d point and the quaternions of each joint  (shoulder, elbow, …)&lt;br&gt;&#xA;I am trying different ways but the result could be improved a lot of.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;CASE A:&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I am using the joint 3D position for calculate the angle between two points.&lt;br&gt;&#xA;For example :&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The shoulder robotics has two actuators: the shoulder Roll and the Shoulder Pitch.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this function takes I pass two arguments, in this case the 3D position point of the shoulder and the elbow and then I calculate the angle between each axis.&#xA;Code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;def angulosXplano (puntoA, puntoB):&#xA;&#xA;def calcularAngulo(uno, dos):&#xA;    # Compute the angle&#xA;    rads = math.atan2(-dos,uno)&#xA;    rads %= 2*math.pi&#xA;    degs = math.degrees(rads)&#xA;    return degs&#xA;&#xA;dx = puntoB.x - puntoA.x&#xA;dy = puntoB.y - puntoA.y&#xA;dz = puntoB.z - puntoA.z&#xA;&#xA;yaw  = calcularAngulo(dx, dy)&#xA;roll = calcularAngulo(dy, dz)&#xA;pitch = calcularAngulo(dx, dz)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;For calculating the shoulderPitch angle of the robot  I use the roll angle (that I got from the fuction angulosXplano) and for the shoulderRoll I use the  pitch angle.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason of calculating the angles in this way is because I get better results than the results obtained if I calculate the shoulderPitch with the pitch angle and the shoulderRoll with the roll angle.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The angular movement for the shoulder roll is good, but the should pitch is moderate and the roll elbow movement is the worst because the shoulder movement affects to the elbow movement.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;CASE B:&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Also I try to get the shoulder pitch and roll and the elbow yaw and roll with the quaternions of the SDK of the Microsoft.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this case I tried the quaternions for the elbow, I obtain the quaternion like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;data.calculate_bone_orientations()[JointId.WristRight].hierarchical_rotation.rotation_quaternion&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;For the elbow I use the Wrist-Right because I read that the position of the joint depends on the previous joint.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;After obtain this quaternion, I convert it to Euler angles, the next code it’s a method of a class that I had developed. The class has got the qw, qx, qy and qz quaternions params.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;def quaternion2euler(self):&#xA;    q = self&#xA;    qx2 = q.x * q.x&#xA;    qy2 = q.y * q.y&#xA;    qz2 = q.z * q.z&#xA;&#xA;    test = q.x*q.y + q.z*q.w&#xA;&#xA;    if (test &amp;gt; 0.499):&#xA;        roll    = math.radians(360/math.pi*math.atan2(q.x,q.w))&#xA;        pitch = math.pi/2&#xA;        yaw     = 0&#xA;    elif (test &amp;lt; -0.499):&#xA;        roll    = math.radians(-360/math.pi*math.atan2(q.x,q.w))&#xA;        pitch = -math.pi/2&#xA;        yaw     = 0&#xA;&#xA;    else:&#xA;        roll = math.atan2(2 * q.y * q.w - 2 * q.x * q.z, 1 - 2 * qy2 - 2 * qz2)&#xA;        pitch = math.asin(2*q.x*q.y+2*q.z*q.w)&#xA;        yaw = math.atan2(2*q.x*q.w-2*q.y*q.z,1-2*qx2-2*qz2)&#xA;&#xA;    return [roll, pitch, yaw]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If use the yaw for the robot elbow roll, the results for the elbow roll improve a lot compared to the previous method. But I can’t find the angle for the robot elbow yaw.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;FUTURE CASE C:&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;My next step would be try the case A but with vectors instead of 3D points. For example the vector A (middle-Shoulder and right-Shoulder) and the vector B (right-Shoulder and elbow). But I have not developed anything yet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help that can help me to improve the code,  some bibliography or any better idea would be welcome.&lt;/p&gt;&#xA;" OwnerUserId="13521" LastEditorUserId="37" LastEditDate="2018-03-08T11:23:19.080" LastActivityDate="2018-03-08T11:23:19.080" Title="Get the arm joint angles with kinect 1" Tags="&lt;robotic-arm&gt;&lt;kinect&gt;&lt;forward-kinematics&gt;&lt;humanoid&gt;&lt;pepper&gt;" AnswerCount="0" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12113" PostTypeId="2" ParentId="12102" CreationDate="2017-04-11T15:18:51.503" Score="1" Body="&lt;p&gt;You have a waypoint, which is some $&amp;lt;x,y,z&amp;gt;_\mbox{waypoint}$ coordinate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should have some internal position estimate, $&amp;lt;x,y,z&amp;gt;_\mbox{quadcopter}$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the waypoint coordinates are $x_w,y_w,z_w$, and the quadcopter coordinates are $x_q,y_q,z_q$, then you can calculate your distance to the waypoint as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;r = \sqrt{(x_q-x_w)^2 + (y_q-y_w)^2 + (z_q-z_w)^2}\\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now you have a singular value that indicates how close you are to the waypoint. You can also check speeds by looking at the quadcopter's speed on each axis - &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\dot{s} = \sqrt{\dot{x}_q^2 + \dot{y}_q^2 + \dot{z}_q^2} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can check now that you're at target along two criteria. For example, maybe your position tracking has some degree of overshoot, and you'd like to be sure that the quadcopter has &lt;em&gt;stabilized&lt;/em&gt; at the waypoint before continuing on to the next point. Maybe the first waypoint is at the entrance to a duct or pipe, and the second waypoint is in the duct/pipe.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, then you'd want to make sure that your distance to the waypoint, $r$, is small, and that your vehicle speed $\dot{s}$ is also small. If your position error $r$ is big but your speed $\dot{s}$ is small, then maybe you're at the previous waypoint and about to start moving. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your position error $r$ is small but your speed $\dot{s}$ is big, then you're close to your waypoint but you're moving quickly and are about to overshoot it. You might not care, or you might care a lot. It depends on the type of maneuver you're trying to complete and the allowable deviation from your waypoint-to-waypoint path is. If you overshoot the first waypoint by a lot and then immediately proceed to the second, then you're not actually taking the desired path to the second waypoint. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Last piece of advice I could offer is to make sure that your waypoint coordinates and quadcopter coordinates are in the same frame of reference. You wouldn't want a quadcopter in real GPS coordinates trying to track a relative waypoint coordinate - your quadcopter might autonomously take off for the intersection of the prime meridian and the equator. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-04-11T15:18:51.503" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="12114" PostTypeId="1" AcceptedAnswerId="12117" CreationDate="2017-04-11T17:40:28.043" Score="1" ViewCount="78" Body="&lt;p&gt;I'm working with a robot intended to be placed in a tele-echography environment. To control the robot I'm using a 6D space mouse that control each degree of freedom of the robot. However, since the rotation is made in the end effector, the end user would have difficulties in understanding where to move the mouse in order to do the desired motion, since the end effector's reference is constantly changing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, I'm thinking of doing a graphical representation of the motion of the robot in real time while the user controls the robot. The robot comes andith many API's to control it and to get sensor data. I'm currently using Qt Creator (C/C++) in order to send the mouse's commands to the robot, so I would like to integrate in my program some kind of simulator. What do you recommend as a C++ package / program in order to accomplish this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="16543" LastActivityDate="2017-04-12T07:20:40.250" Title="Robot Graphical Representation in Real Time" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;c++&gt;&lt;manipulator&gt;&lt;c&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12116" PostTypeId="2" ParentId="12105" CreationDate="2017-04-12T00:58:32.250" Score="1" Body="&lt;p&gt;You could not prevent long term barometer offset just by using the barometer and IMU, as both are accurate in the fairly short term but both are susceptible to drifting over time, as pressures change over the course of the day or error builds in your IMU position solution. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Over a Baro only solution a Baro + IMU will perform better, but again will not provide long term stability. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are looking for a long term solution I would suggest an Ultrasonic sensor or 1D LIDAR sensor to provide an absolute altitude reading.&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2017-04-12T00:58:32.250" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12117" PostTypeId="2" ParentId="12114" CreationDate="2017-04-12T07:20:40.250" Score="3" Body="&lt;p&gt;If you are already using Qt, then Q3 3D would be an obviuos choice for 3D representations. Gaming engines like Unity (C#/JavaScript) or the Unreal Engine (C++) are also a suitable choice for representing robots in 3D. You will find plenty of exmples like &lt;a href=&quot;https://www.youtube.com/watch?v=9DqRkLQ5Sv8&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using directly OpenGL is also an option, but if you want anything else then just simple 3D rerpesentations, probably a gaming engine would be a better option.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2017-04-12T07:20:40.250" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12120" PostTypeId="1" AcceptedAnswerId="12121" CreationDate="2017-04-13T07:23:14.943" Score="1" ViewCount="113" Body="&lt;p&gt;I am seeing on some videos robots picking items and putting them somewhere in order.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are some examples:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=wg8YYuLLoM0&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=wg8YYuLLoM0&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://youtu.be/ggFdvUlp8YU?t=38&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://youtu.be/ggFdvUlp8YU?t=38&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;How are these types of manipulators called and where can I find schematic illustration explaining principles of its work?&lt;/p&gt;&#xA;" OwnerUserId="10234" LastEditorUserId="10234" LastEditDate="2017-04-13T08:43:27.160" LastActivityDate="2017-04-13T08:47:22.463" Title="What's the name of a robot manipulator construction with multiple thin arms joined together?" Tags="&lt;robotic-arm&gt;&lt;mechanism&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12121" PostTypeId="2" ParentId="12120" CreationDate="2017-04-13T08:47:22.463" Score="3" Body="&lt;p&gt;They are &lt;em&gt;parallel manipulators&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may find chapters on parallel manipulators in robotics textbooks, for example, &lt;a href=&quot;http://www.cds.caltech.edu/~murray/books/MLS/pdf/mls94-complete.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;A Mathematical Introduction to&#xA;Robotic Manipulation&lt;/a&gt;, useful. There are also a number of articles related to kinematics analysis of those manipulators (such as &lt;a href=&quot;http://www.cis.umac.mo/~yangmin/journalpdf/J07-4-Li-Xu-RCIM.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this article&lt;/a&gt;).&lt;/p&gt;&#xA;" OwnerUserId="7610" LastActivityDate="2017-04-13T08:47:22.463" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12123" PostTypeId="2" ParentId="4632" CreationDate="2017-04-13T16:22:37.757" Score="0" Body="&lt;p&gt;It is amazing that there are so few solutions for power transfer for such a common motor. I have looked at ebay and amazon. Gears are available in a wide range of prices, none that are in the same scale as the price of this cheap motor. There is a gear generator at &lt;a href=&quot;http://woodgears.ca/gear/help3/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://woodgears.ca/gear/help3/index.html&lt;/a&gt; for wood gears. This or 3d printing gives you the flexibility of gear ratios and shaft sizes. I just wanted to be able to connect a programmable motor to a drive that would actually do something.  &lt;/p&gt;&#xA;" OwnerUserId="16664" LastActivityDate="2017-04-13T16:22:37.757" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12126" PostTypeId="1" AcceptedAnswerId="12140" CreationDate="2017-04-13T23:30:46.457" Score="2" ViewCount="501" Body="&lt;p&gt;So I'm trying to incorporate pose graph optimization into a mapping framework using a Lidar. So I basically have all the relative transformations between the pointclouds and I have pairs of pointclouds which satisfy my place recognition algorithm so I know which poses to complete the loop with, now the question I have is given that I only have these relative transformations (1) how do I calculate the error&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://latex.codecogs.com/gif.latex?e%28i%2C%20j%29%20%3D%20z%28i%2C%20j%29%20-%20%5Chat%7Bz%7D%28i%2C%20j%29&quot; alt=&quot;e = z- z&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $\hat{z}$ is the ground truth since I only have one set of measurements which are my R,t estimate from consecutive pointclouds?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(2) How do I loop close using g2o?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(3) What will my information matrix be isn't it supposed to be a property of the sensor itself?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you.&lt;/p&gt;&#xA;" OwnerUserId="16667" LastActivityDate="2017-04-16T20:29:28.357" Title="Regarding Pose Graph Slam using Lidar" Tags="&lt;slam&gt;&lt;mapping&gt;&lt;lidar&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12127" PostTypeId="1" AcceptedAnswerId="12574" CreationDate="2017-04-14T01:37:57.443" Score="2" ViewCount="900" Body="&lt;p&gt;i am building a rc/robot mower.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;most of the youtube videos show the sabertooth motor controllers being used to connect the rc receiver to the dc motors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But here in Australia, the sabertooth i need cost about 200 dollars. RC esc sell for about 10 dollars. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the difference between the esc and the sabertooth and can i use an esc instead? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;the specs i have on the motor and battery are 12v 10amp normal, 35amp stall. and my rc is a flysky&lt;/p&gt;&#xA;" OwnerUserId="16668" LastActivityDate="2017-12-18T05:42:24.343" Title="difference between sabertooth motor controller and rc esc?" Tags="&lt;motor&gt;&lt;esc&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12128" PostTypeId="2" ParentId="12127" CreationDate="2017-04-14T15:19:09.983" Score="0" Body="&lt;p&gt;The Sabertooth Motor Controller is for driving DC motors, where most RC escs are for driving AC (brushless) motors. If the motor you have is a DC motor there are plenty of other motor drivers out there that can supply the 35A stall current, that you might find cheaper in your country.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have listed some below&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.vexrobotics.com/vexpro/motors-electronics/217-9090.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Victor&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.pololu.com/product/2397&quot; rel=&quot;nofollow noreferrer&quot;&gt;RoboClaw 2x45A&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.robotshop.com/en/cytron-single-10--45v-40a-brushed-dc-motor-controller.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Cytron 40A&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2017-04-14T15:19:09.983" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12129" PostTypeId="1" CreationDate="2017-04-14T16:55:08.570" Score="1" ViewCount="135" Body="&lt;p&gt;I'm currently programming in RobotC, for a Vex 2.0 Cortex. I'm using encoders to make my robot go straight.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is my code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#pragma config(I2C_Usage, I2C1, i2cSensors)&#xA;#pragma config(Sensor, dgtl2,  ,               sensorDigitalIn)&#xA;#pragma config(Sensor, dgtl7,  ,               sensorDigitalOut)&#xA;#pragma config(Sensor, I2C_1,  ,               sensorQuadEncoderOnI2CPort,    , AutoAssign )&#xA;#pragma config(Sensor, I2C_2,  ,               sensorQuadEncoderOnI2CPort,    , AutoAssign )&#xA;#pragma config(Motor,  port1,           RM,            tmotorVex393_HBridge, openLoop, reversed, encoderPort, I2C_2)&#xA;#pragma config(Motor,  port10,          LM,            tmotorVex393_HBridge, openLoop, encoderPort, I2C_1)&#xA;//*!!Code automatically generated by 'ROBOTC' configuration wizard               !!*//&#xA;&#xA;/* Port 1 is right motor*/&#xA;&#xA;//all functions expect no reverse motors (in port menu)&#xA;//**GLOBAL VARIABLES**&#xA;int buttonSTATE = 0;&#xA;&#xA;//**MOVE FUNCTIONS**&#xA;void goforwards(int time)&#xA;{&#xA;    int Tcount = 0;&#xA;    int speed1 = 30;&#xA;    int speed2 = 30;&#xA;    int difference = 5;&#xA;&#xA;&#xA;    motor[LM] = speed1;&#xA;    motor[RM] = speed2;&#xA;    while (Tcount &amp;lt; time)&#xA;    {&#xA;        nMotorEncoder[RM] = 0;&#xA;        nMotorEncoder[LM] = 0;&#xA;&#xA;        while(nMotorEncoder[RM]&amp;lt;3000)&#xA;        {&#xA;            int REncoder = -nMotorEncoder[RM];&#xA;            int LEncoder = -nMotorEncoder[LM];&#xA;&#xA;            if (LEncoder &amp;gt; REncoder)&#xA;            {&#xA;                motor[LM] = speed1 - difference;&#xA;                motor[RM] = speed2 + difference;    &#xA;            }&#xA;            if (LEncoder &amp;lt; REncoder)&#xA;            {&#xA;                motor[LM] = speed1 + difference;&#xA;                motor[RM] = speed2 - difference;&#xA;            }&#xA;            wait1Msec(100);&#xA;        }&#xA;        Tcount ++;&#xA;    }&#xA;}&#xA;&#xA;//**CONTROL STRUCTURE:**&#xA;task main()&#xA;{&#xA;&#xA;    goforwards(1);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;When I execute the code, the Robot's encoder values are very close, but the robot quickly starts to veer to the left. What are possible causes of this? Is it something in the code?&lt;/p&gt;&#xA;" OwnerUserId="16674" LastActivityDate="2017-08-20T20:16:16.600" Title="Robot Veering to the Left" Tags="&lt;mobile-robot&gt;&lt;movement&gt;&lt;robotc&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12130" PostTypeId="1" AcceptedAnswerId="12136" CreationDate="2017-04-14T18:11:12.563" Score="1" ViewCount="374" Body="&lt;p&gt;I'd like to know how to form my pose graph if the only information I have available is that from a camera,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(1) What are my poses? Are they just the accumulated transformations from pairwise matching?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(2) And then what are my edges?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(3) If I have already detected the loops, how would I loop correct?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you. &lt;/p&gt;&#xA;" OwnerUserId="16667" LastActivityDate="2017-04-15T18:13:00.627" Title="Pose-graph-slam:using only a camera" Tags="&lt;slam&gt;&lt;mapping&gt;&lt;visual-odometry&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12131" PostTypeId="2" ParentId="12129" CreationDate="2017-04-14T20:01:23.273" Score="1" Body="&lt;p&gt;Lets suppose, that left wheel is blocked, so &lt;code&gt;nMotorEncoder[LM]&lt;/code&gt; is constantly zero, while &lt;code&gt;nMotorEncoder[RM]&lt;/code&gt; counts something. Correct behavior is for right motor to effectively stop (or jumping little back and forth the same lenght).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now &lt;code&gt;LEncoder&lt;/code&gt; is 0, &lt;code&gt;REncoder&lt;/code&gt; is negative, &lt;code&gt;LEncoder &amp;gt; REncoder&lt;/code&gt; so&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;            motor[LM] = speed1 - difference;&#xA;            motor[RM] = speed2 + difference;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;left motor slowes, right motor goes faster. This is not, what you want, in next step &lt;code&gt;nMotorEncoder[RM]&lt;/code&gt; goes positive again (&lt;code&gt;nMotorEncoder[LM]&lt;/code&gt; is still zero), right motor tries to move faster, while left motor tries to be even slower. Soon left motor is going backward full speed, right motor going forward full speed, no stabilizing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Usually the motor are not totally equal (and usually they turn one way better, than the opposite way), so it is possible, that your left motor is a little slower/weaker, than right. Even if it is not much and can be compensated for, the way you are doing it is making it more and more visible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Try to remove the minuses on &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;        int REncoder = -nMotorEncoder[RM];&#xA;        int LEncoder = -nMotorEncoder[LM];&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;of change the direction of comparing &lt;code&gt;LEncoder &amp;gt; REncoder&lt;/code&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;BTW: I am not sure, but you probably also should limit the maximal/minimal speed&lt;/p&gt;&#xA;" OwnerUserId="16496" LastActivityDate="2017-04-14T20:01:23.273" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12132" PostTypeId="1" CreationDate="2017-04-15T06:44:53.710" Score="0" ViewCount="190" Body="&lt;p&gt;I want to control &lt;a href=&quot;https://www.fabtolab.com/solenoid-electromagnet-micro-5v&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; solenoid from Arduino, but I am confused which transistors, resistors and diodes to choose. I have seen a lot of tutorials about controlling solenoid from Arduino, but all of them are for 12 volt solenoid or are using some relays which I don't want to use. I will be using 6 of these solenoids for my project.  &lt;/p&gt;&#xA;" OwnerDisplayName="user14148" LastEditorDisplayName="user9480" LastEditDate="2017-04-22T18:07:50.543" LastActivityDate="2019-05-25T07:01:36.457" Title="How to control 6v micro solenoid from arduino" Tags="&lt;control&gt;&lt;motor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12133" PostTypeId="2" ParentId="12132" CreationDate="2017-04-15T08:09:30.033" Score="1" Body="&lt;p&gt;Most of 12V solenoid tutorials would work here too, if you use just 6V instead of 12V. Post here links to some 12V tutorial, I will look at that and say you, if they are easy to adjust and how. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or as last resort - your selenoid is rated 6V/0.35A - that is 17.14 Ohm, you can buy power resistor 17-20 Ohm with minimal of 7 Watt (can be much more Watt, no problem - probably big ceramic one) and just connet it in serie with your solenoid and then follow ANY 12V solenoid tutorial verbatim (with this combination in place for 12V solenoid - as it is de-facto 12V / 0.35A solenoid together)&lt;/p&gt;&#xA;" OwnerUserId="16496" LastActivityDate="2017-04-15T08:09:30.033" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="12134" PostTypeId="1" CreationDate="2017-04-15T13:53:58.060" Score="2" ViewCount="47" Body="&lt;p&gt;I am using the &lt;a href=&quot;http://gnss-sdr.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;gnss-sdr&lt;/a&gt; library to compute ephemeris from the GPS message, and to try to make sense of things, I am reading the well-known &lt;a href=&quot;http://www.gps.gov/technical/icwg/IS-GPS-200E.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;IS-GPS-200E&lt;/a&gt; specification. To compute ephemeris, the &lt;em&gt;time from ephemeris reference ephoch&lt;/em&gt; is defined as (page 101, table 20-IV)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$t_k=t-t_{oe}.$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am unsure about how $t$ is defined, and I find the specification unclear on that. Rummaging in the source code of the aforementioned library, I found out that $t$ seems to be computed as follows:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$t=t_{x}-b$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $b$ is the satellite clock bias, and &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$t_x=R_x- (\text{pseudo-range})/c$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $c$ is the speed of light. However, I have been unable, so far, to find out what $R_x$ exactly refers to. It seems to correspond to &quot;time of week at current symbol&quot;, but there is no documentation/precison on that. I suppose that an expert could very simply deduce what $R_x$ is just from the formulas, though. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my question is: what is $R_x$? What time system is it expressed in (satellite time? gps time? receiver time?). And if someone could explain to me what those formula are doing or give me pointers, I'd be extremely grateful.&lt;/p&gt;&#xA;" OwnerUserId="2541" LastEditorUserId="2541" LastEditDate="2017-04-15T16:43:43.963" LastActivityDate="2017-07-12T14:41:03.963" Title="Confused about time systems in ephemeris computation (from GPS subframes)" Tags="&lt;sensors&gt;&lt;gps&gt;&lt;gnss&gt;&lt;pseudo-ranges&gt;&lt;ephemeris&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12136" PostTypeId="2" ParentId="12130" CreationDate="2017-04-15T18:13:00.627" Score="1" Body="&lt;p&gt;(1) Usually, the poses are just your &lt;em&gt;absolute&lt;/em&gt; camera poses, &lt;em&gt;i.e&lt;/em&gt; $[R,T]$ where $R$ is a rotation matrix and $T$ is a translation, expressed in world coordinates. You can add a scale factor to that if you want.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(2) Usually, the edges are the relative displacements between your cameras. That is , if you have cameras $C_1=[R_1,T_1]$ and $C_2=[R_2,T_2]$, then, noting $X_w$ a point in world coordinates and $X_1$, $X_2$ its representations in (respectively) cameras $C_1$ and $C_2$, we will have&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$X_w=R_1X_1+T_1$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$X_w=R_2X_2+T_2$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\Rightarrow X_1=R_1^{t}R_2X_2+R_1^t(T_2-T_1)\triangleq R'X_2+T'.$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, your edges are just defined as the &lt;em&gt;relative&lt;/em&gt; transformation $[R',T']$. Once again, you can add a scale factor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(3)  Let $P_1,...,P_n$ be the &lt;em&gt;relative&lt;/em&gt; poses computed between cameras $1,...n,n+1$ by your SLAM algorithm. Now, you detect a loop between cameras $n$ and $n+1$, and this says that your relative transformation should be $T_n$, not $P_n$ .  The difference between $T_n$ and $R_n$ is often important, and you want to propagate this large error to previous cameras. Thus, what you want to do is this: you want to change all absolute camera poses in a way that does not significantly change the relative poses $P_1,...,P_{n-1}$, all the while making the transformation between cameras $n$ and $n+1$ as close to $T_n$ as possible. Let us write $A_i$ the &lt;em&gt;absolute&lt;/em&gt; pose of camera $i$, and assume that $A_i^{-1}A_j$ gives us the relative transformation between $i$ and $j$. Now, we can state our goal clearly:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\{P_1,...,P_{n-1}\}\cup{T_n}   \ \ \ \text{these are our constants}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\{A_1,...,A_n,A_{n+1}\} \ \ \ \ \text{These are the variable we optimize}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$argmin_{A_i}\Sigma_{i=1}^{n-1}d(A_i^{-1}A_{i+1},P_i)+d(A_{n}^{-1}A_{n+1},T_n) \ \ \ \text{what we want to solve}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $d$ is a function measuring the distance between its two arguments. Its actual definition will depend on how you actually parametrize your transformations (&lt;em&gt;e.g&lt;/em&gt; Lie algera, quaternions, etc...). Usually, any iterative minimization algorithm will do. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A really great resource to understand loop closure is Hauke Strasdat's &lt;a href=&quot;https://www.google.fr/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;ved=0ahUKEwj4_6LW9KbTAhWJvBoKHaupDnwQFgglMAA&amp;amp;url=https%3A%2F%2Fwww.doc.ic.ac.uk%2F~ajd%2FPublications%2Fstrasdat_phd2012.pdf&amp;amp;usg=AFQjCNGS3GlobmpFFkXj95ZUaH0vFy2nvQ&amp;amp;sig2=WXAaseSAiXLyPIF-PeMgqg&amp;amp;cad=rja&quot; rel=&quot;nofollow noreferrer&quot;&gt;phd thesis&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="2541" LastActivityDate="2017-04-15T18:13:00.627" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="12139" PostTypeId="1" AcceptedAnswerId="12141" CreationDate="2017-04-16T10:57:33.070" Score="0" ViewCount="3742" Body="&lt;p&gt;I'm trying to make swarm robots that use 8 IR LEDs and 8 Photodiodes arranged alternately along the circumference of the circular body to determine the range and bearing of other nearby swarm robots (similar ro Rice University's &lt;a href=&quot;http://mrsl.rice.edu/projects/r-one&quot; rel=&quot;nofollow noreferrer&quot;&gt;r-one&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each IR LED and Photodiode is wired as shown below:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/HJKz0.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HJKz0.png&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The IR LED's and Photo-diodes on one robot are separated by some opaque object. The intention is that when a high analog value is read from certain Photo-diode(s) of the 8 present, another robot's relative range and bearing can be estimated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is that a high analog value is read even when the robot is near an obstacle because of the reflect infrared light from it's own LED's.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any way for a robot to determine if a high analog value read is because of another robot or because of an obstacle?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance!&lt;/p&gt;&#xA;" OwnerUserId="16642" LastActivityDate="2017-04-18T01:51:29.210" Title="Using IR LED and photodiode to estimate range and bearing of other Swarm Robots" Tags="&lt;arduino&gt;&lt;localization&gt;&lt;swarm&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12140" PostTypeId="2" ParentId="12126" CreationDate="2017-04-16T20:29:28.357" Score="1" Body="&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;In the context of a pose graph / factor graph SLAM backend, $e\left(i,j\right)$ actually reduces to the difference between the current estimate of pose $x_j$ and the predicted pose $\hat{x}_j$ given the current estimate of pose $x_i$ and the constraint / pose graph edge $c_{ij}$:&#xA;$$&#xA;e\left(i,j\right)=x_j-\hat{x}_j=x_j-x_i\cdot c_{ij}=x_j-\left(R_{ij}\cdot x_i+t_{ij}\right)&#xA;$$&#xA;where $R_{ij},t_{ij}$ are the parametrization of the transformation between poses $x_i$ and $x_j$ as given by constraint / edge $c_{ij}$. If you are using g2o, then this is not something you need to calculate yourself, you only need to provide an initial estimate for every pose, as well as the edge measurements ($R,t$) and their information matrices $\mathcal{I}$.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Depending on whether you are operating in SE3 or SE2, add an edge (&lt;code&gt;EdgeSE2&lt;/code&gt; / &lt;code&gt;EdgeSE3&lt;/code&gt;) between the two vertices where the loop closure was determined, using the registration data (transformation and information matrix) of the two associated point clouds to specify the edge constraint. &lt;br&gt;&lt;br&gt;&#xA;I would strongly advise you to look into robust methods like Dynamic Covariance Scaling (Agarwal et al., ICRA 2013), Switchable Constraints (Sünderhauf et al., IROS 2012) and RRR (Lasif et al., IJRR 2013), as erroneous loop closure constraints will wreak havok on the shape of your optimization problem / pose graph.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;If you are talking about the information matrix of the edges / constraints between poses, then they will come from your registration algorithm, odometry system, IMU, etc. Anything that measures the geometric offset between two poses should provide an estimate of the certainty or uncertainty of this measurement. In Pose Graph SLAM you will typically have constraints generated by Odometry or IMU, and / or from registration algorithms such as ICP. &lt;br&gt;&lt;br&gt;Depending on your parametrization of the transformation, this uncertainty is represented as a covariance matrix $\Sigma^{n\times n}$ where $n$ is the dimensionality of your transformation representation (e.g. in 2D we would have $n=3$). The Fisher information matrix $\mathcal{I}$ required by e.g. g2o is simply the inverse of the covariance matrix $\Sigma$ , i.e.&#xA;$$&#xA;\mathcal{I}_{ij}={\Sigma_{ij}}^{-1}&#xA;$$&#xA;&lt;br&gt;&#xA;Hope this helps.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="16684" LastActivityDate="2017-04-16T20:29:28.357" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="12141" PostTypeId="2" ParentId="12139" CreationDate="2017-04-17T01:15:34.867" Score="0" Body="&lt;p&gt;There is a lot of ways. Maybe the most simple is to use some pin to drive those LEDs (via transistor, as you need a lot of current for 8 LEDs, I would use it even for 1). Then in some random (or pseudorandom) interval turn those LED off and then make your measurment, so you do not see your light, then tourn them on again, so others can see you. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would suggest leaving relatively long intervals of ON and doing fast reading just time to time. Also you want somehow make those intervals random, so not to get to synchronized state, when all robots turn light off at the same time and so nobody see nobody.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The least is use cycles like [5,7,11,13] to get out of sync, better is use some kind of noise, eg if you have other sensors too (like ultrasound or gyro or compass), then add last few digits/bits of result to the interval, as they get more noise than information and it helps to make those interval more random. &lt;/p&gt;&#xA;" OwnerUserId="16496" LastActivityDate="2017-04-17T01:15:34.867" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12144" PostTypeId="1" CreationDate="2017-04-17T03:37:35.187" Score="3" ViewCount="26028" Body="&lt;p&gt;I need to use continuously rotating servo for a camera stabilization system. My professor bought servos that have already been modified for continuous motion--there's no stop in the gears, and the potentiometer allows it to spin 360+ degrees.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am currently using PWM with an Arduino Uno. The servo does spin continuously, but not in a stable way. I've also taken out the potentiometer in another one of the servo, and on a third servo I used a voltage divider in place of the potentiometer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've tried static values and a &quot;sweep&quot; from 0% duty cycle to 100% to get a feeling for how they work, but I just cannot figure it out. I greatly would appreciate any tips on this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is my code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; //PWM test for continious motion Servo&#xA;&#xA; int servoPin = 9; // connect servo to pin 10&#xA; int pwmVal = 0; // declare pulse width modulation value&#xA;&#xA;void setup(void) {&#xA;  pinMode(servoPin, OUTPUT); //set up the servoPin as an output pin&#xA;  Serial.begin(9600); // begin serial monitor&#xA;}&#xA;&#xA;void loop(void) {&#xA;&#xA;  //for loop that sweeps values from 0 to 255&#xA;  for (pwmVal = 0; pwmVal &amp;lt;= 253; pwmVal += 1) {&#xA;    analogWrite(servoPin, pwmVal);&#xA;    Serial.println(pwmVal);&#xA;    delay(100);&#xA;  }&#xA;  for (pwmVal = 253; pwmVal &amp;gt;= 0; pwmVal -= 1) {&#xA;    analogWrite(servoPin, pwmVal);&#xA;    Serial.println(pwmVal);&#xA;    delay(100);&#xA;  }&#xA;&#xA;&#xA;  //assign a static pwm value&#xA;  pwmVal = 0;&#xA;  analogWrite(servoPin, pwmVal);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="16687" LastActivityDate="2019-09-16T14:10:56.333" Title="How to program a continuous servo motor? (Arduino)" Tags="&lt;arduino&gt;&lt;servomotor&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12145" PostTypeId="1" AcceptedAnswerId="12146" CreationDate="2017-04-17T03:52:05.887" Score="2" ViewCount="1251" Body="&lt;p&gt;I have installed and am trying to run a turtlebot package using gazebo and roslaunch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Installation seems to have gone fine and I am now following the first tutorial, which just explains how to get the simulation started. The tutorial can be found here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://wiki.ros.org/turtlebot_gazebo/Tutorials/indigo/Gazebo%20Bringup%20Guide&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://wiki.ros.org/turtlebot_gazebo/Tutorials/indigo/Gazebo%20Bringup%20Guide&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I entered the command: &lt;code&gt;source /opt/ros/indigo/setup.bash&lt;/code&gt;&#xA;That seemed to go fine, there were no errors.&#xA;Then I entered the command: &lt;code&gt;roslaunch turtlebot_gazebo turtlebot_world.launch&lt;/code&gt;, which resulted in the following error log:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    while processing /opt/ros/indigo/share/turtlebot_gazebo/launch/includes/kobuki.launch.xml:&#xA;    Invalid  tag: Cannot load command parameter [robot_description]: command [/opt/ros/indigo/share/xacro/xacro.py '/opt/ros/indigo/share/turtlebot_description/robots/kobuki_hexagons_asus_xtion_pro.urdf.xacro'] returned with code [1]. &#xA;&#xA;    Param xml is (param command=&quot;$(arg urdf_file)&quot; name=&quot;robot_description&quot;/)&#xA;    The traceback for the exception was written to the log file&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I tried asking on the ROS Answers website first but got no answer, so I'm hoping the good people of Stack Exchange can help me figure out what is causing this problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additional information: The version of ROS I have installed is Indigo, and I'm on Ubuntu 14.04&lt;/p&gt;&#xA;" OwnerUserId="14689" LastActivityDate="2017-04-17T04:38:13.313" Title="Roslaunch Gazebo Turtlebot Simulation Not Working" Tags="&lt;ros&gt;&lt;gazebo&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12146" PostTypeId="2" ParentId="12145" CreationDate="2017-04-17T04:38:13.313" Score="1" Body="&lt;p&gt;I've figured out what the problem was.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ubuntu was running a non-default version of python that I had installed for a University python project a couple of years go. I deleted it and now the default version of python is being used, which has solved the problem.&lt;/p&gt;&#xA;" OwnerUserId="14689" LastActivityDate="2017-04-17T04:38:13.313" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12147" PostTypeId="1" CreationDate="2017-04-17T14:42:16.187" Score="2" ViewCount="903" Body="&lt;p&gt;I am controlling a 6-DOF robot. For this, I want to compute the Coriolis Matrix. From my study of examples, I understand there are several ways of going about it. At the moment, I am using the theory based on, &quot;A Lie group formulation of Robot dynamics&quot; [p. 615] by Park et al. But this is not computationally efficient as my simulations are very slow.&#xA;Based on my study of several projects on Github, I understand many people choose symbolic approach. I was also considering numerical differentiation to get the Christoffel symbols.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like seek some guidance regarding the pros and cons of the different methods. I would really appreciate any references that I can use to study.&lt;/p&gt;&#xA;" OwnerUserId="14215" LastActivityDate="2017-04-17T14:42:16.187" Title="Computation of Coriolis Matrix" Tags="&lt;control&gt;&lt;dynamics&gt;" AnswerCount="0" CommentCount="6" ClosedDate="2018-01-11T13:47:16.773" ContentLicense="CC BY-SA 3.0" />
  <row Id="12148" PostTypeId="1" AcceptedAnswerId="12166" CreationDate="2017-04-17T16:31:59.637" Score="1" ViewCount="1058" Body="&lt;p&gt;What exactly is the difference between both the above terms? From some of the papers I realize that force closure depends on the frictional forces. Is it correct?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Suppose I  to grasp a cylindrical object with my hand, which closure will it be considered?&lt;/p&gt;&#xA;" OwnerUserId="16691" LastEditorUserId="11125" LastEditDate="2017-04-17T18:30:07.387" LastActivityDate="2017-04-19T09:07:25.463" Title="Difference between form closure and force closure" Tags="&lt;robotic-arm&gt;&lt;design&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12149" PostTypeId="2" ParentId="12139" CreationDate="2017-04-18T01:51:29.210" Score="1" Body="&lt;p&gt;One way for a robot to determine if the light detected by a photodiode is from another robot, or from itself reflected off an obstacle, is to blink the LEDs in a pattern.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A blink detected by a robot when all of its own LEDs are turned off must have come from some other robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are &lt;a href=&quot;https://en.wikipedia.org/wiki/Gold_code&quot; rel=&quot;nofollow noreferrer&quot;&gt;ways of designing a set of blink patterns&lt;/a&gt;, encoding a unique ID number in each pattern, such that, even with a simple binary sensor that only distinguishes between &quot;at least one robot has its LED turned on&quot; vs &quot;none of the robots in range have any LEDs turned on, not even me&quot;, it's possible to not only detect that some other robot is in range, but also the unique ID numbers of which specific other robots are in range.&#xA;You might find it interesting to give each specific LED its own blink pattern, so that you can detect which specific LEDs of your own and other robots are in range of some specific photodiode.&lt;/p&gt;&#xA;" OwnerUserId="187" LastActivityDate="2017-04-18T01:51:29.210" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12150" PostTypeId="1" CreationDate="2017-04-18T03:17:49.537" Score="1" ViewCount="63" Body="&lt;p&gt;I'm using a brushless motor of 1000kv and an ESC simon30A. I power the motor using arduino adapter AC/DC 9v. When I try to run the motor using sweep example. The motor will only run when the value is between 170-180. How come other values below 170 won't run the motor? Is my ESC broken?? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The model of bldc is A212/3T. 1000kv and ESC is Simon 30A . I'm using servo Library to control the speed.&lt;/p&gt;&#xA;" OwnerUserId="16698" LastActivityDate="2017-07-19T19:09:56.313" Title="Why does the motor only run between 170-180?" Tags="&lt;arduino&gt;" AnswerCount="1" CommentCount="3" ClosedDate="2017-07-19T20:05:03.727" ContentLicense="CC BY-SA 3.0" />
  <row Id="12151" PostTypeId="1" AcceptedAnswerId="12169" CreationDate="2017-04-18T09:34:22.863" Score="0" ViewCount="1625" Body="&lt;p&gt;I have an array (2x4) in Matlab which may contains integer values as well as values in decimals. For example: &lt;em&gt;[1.1, 23, 1.56, 5.29; 2.14, 2.39, 67, 4.001]&lt;/em&gt;. I have to send these values to arduino using matlab. How to do so? I know how to &lt;em&gt;send integer values to arduino from matla&lt;/em&gt;b but it is &lt;strong&gt;&lt;em&gt;not working with decimal values.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Matlab Code to send integer values is below:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;portName = 'COM5';&#xA;s = serial(portName,'BaudRate',9600,'Terminator','LF');&#xA;s.timeout = 1;&#xA;try &#xA;    try&#xA;        fopen(s);&#xA;    catch&#xA;        delete(s);&#xA;        fopen(s);&#xA;    end&#xA;catch&#xA;    disp('Unable to open the port ');&#xA;end&#xA;&#xA;angle = [1.3,2];&#xA;    dataOut = angle;&#xA;    dataOut_ = char(dataOut);&#xA;    fprintf(s,'%d',dataOut_);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Arduino code is given below:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;int d1,d2;&#xA;char d[4];&#xA;&#xA;    void setup() {&#xA;  // put your setup code here, to run once:&#xA;Serial.begin(9600);&#xA;pinMode(13, OUTPUT);&#xA;}&#xA;&#xA;void loop() {&#xA;  // put your main code here, to run repeatedly:&#xA;if(Serial.available()&amp;gt;0)&#xA;{&#xA;  for(int i=0; i&amp;lt;3;i++)&#xA;  {&#xA;    d[i]= Serial.read();&#xA;  }&#xA;  d1 = d[0]-'0';&#xA;  if (d1 == 1.3)&#xA;  {&#xA;    digitalWrite(13, HIGH);   // turn the LED on (HIGH is the voltage level)&#xA;  delay(2000);              // wait for a second&#xA;  digitalWrite(13, LOW);    // turn the LED off by making the voltage LOW&#xA;  delay(1000);              // wait for a second&#xA;  }&#xA;}&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="14024" LastEditorUserId="14024" LastEditDate="2017-04-18T18:39:04.060" LastActivityDate="2017-04-20T09:56:49.693" Title="Send numerical values from Matlab to arduino" Tags="&lt;arduino&gt;&lt;matlab&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12152" PostTypeId="2" ParentId="6617" CreationDate="2017-04-18T11:21:17.723" Score="3" Body="&lt;p&gt;&lt;a href=&quot;https://robotics.stackexchange.com/a/6636&quot;&gt;Ugo's answer&lt;/a&gt; refers to &lt;a href=&quot;http://www.springer.com/de/book/9781846286414&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;Sciavicco-Siciliano&quot;&lt;/a&gt; which is a good book I'll quote as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Chapter 3.6 introduces the so-called analytical Jacobian which is not the same as the so called geometrical Jacobian as it shows up in:&#xA;$&#xA;\omega=J_{geom} \cdot \dot{q},&#xA;$&#xA;but has to be obtained from $J_{geom}$ with the help of the transformation matrix $T_A$:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$&#xA;J_{analytical}=T_A \cdot J_{geom}&#xA;$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;or even more informative:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$&#xA;\dot{\phi}=J_{analytical} \cdot \dot{q}    &#xA;$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I allow myself one quotation from this chapter:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;From a physical viewpoint, the meaning of $\omega_e$ is more intuitive&#xA;  than that of $\dot{\phi}_e$. The three components of ωe represent the&#xA;  components of angular velocity with respect to the base frame.&#xA;  Instead, the three elements of $\dot{\phi}_e$ represent nonorthogonal&#xA;  components of angular velocity defined with respect to the axes of a&#xA;  frame that varies as the end-effector orientation varies. On the other&#xA;  hand, while the integral of $\dot{\phi}_e$ over time gives $\phi_e$,&#xA;  the integral of $\omega_e$ does not admit a clear physical&#xA;  interpretation...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So the good news is that we can work with $\phi_e$ -- orientation of the end effector expressed in Euler angles, the bad news is that the transformation matrix $T_A$ introduces singularities which makes the authors of &lt;a href=&quot;http://www.springer.com/de/book/9781846286414&quot; rel=&quot;nofollow noreferrer&quot;&gt;2&lt;/a&gt; abandon&#xA;the concept of analytical Jacobian.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But here comes OpenRave:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;manip=robot.GetManipulators()[0]&#xA;# we calculate the rotational Jacobian in quaternion space&#xA;quatJ = manip.CalculateRotationJacobian()&#xA;quatManip0 = manip.GetTransformPose()[0:4]&#xA;# order of multiplication may be wrong in the next line&#xA;quatManipTarget = qmult(quatManip0, deltaQuat) # &#xA;wSol=np.linalg.lstsq(quatJ, quatManipTarget)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;s&gt;So by using the analytical Jacobian in quaternion space you avoid the singularities of the transformation matrix $T_A$. Your Jacobian can still have numeric instability, but this is something different. &lt;/s&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;:&#xA;I thought again about the singularities of $T_A$ and possible numeric instabilities of the analytical Jacobian in quaternion space. Indeed my previous claim about the singularities in $\mathbb{R}^3$ being not the same as numeric instabilities in quaternion space is too &quot;strong&quot;.  &lt;/p&gt;&#xA;" OwnerUserId="15695" LastEditorUserId="15695" LastEditDate="2017-04-25T12:23:55.717" LastActivityDate="2017-04-25T12:23:55.717" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12153" PostTypeId="2" ParentId="6956" CreationDate="2017-04-18T11:51:50.200" Score="1" Body="&lt;p&gt;I think you are confusing two distinct things here. You can of course use Wi-Fi signals for SLAM, but you cannot use them to create a map &lt;em&gt;directly&lt;/em&gt; from the RSS. As you have already stated yourself, this only gives you information about where the access point / router might be located, i.e. $\left(x_{ap},y_{ap}\right)$. There is hardly any information about the structure of the room in this data, and pursuing this to build a map is not going to be very productive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What Wi-Fi and similar beacon-like systems like GPS are typically used for, is providing constraints for the dead reckoning via odometry / IMU. By integrating this external positioning data, e.g. using a Kalman Filter or a graph based representation of a MLE problem, you can reduce the estimation error over the robot's trajectory while performing SLAM. Basically it would act like a weak loop closure algorithm, which corrects the robot current pose (and consequently the prior trajectory) by integrating external &quot;semi-ground truth&quot; data. Having a better estimation of the robot trajectory, i.e. the localization aspect of SLAM, can be automatically translated into more accurate mapping. After all, if you knew the ground truth trajectory of the robot, creating the map would simply require translating all sensor measurements to their accurate measurement poses and then combining them into one large measurement (e.g. a point cloud or an occupancy grid / voxel map). This still assumes a &lt;strong&gt;dense metric sensor&lt;/strong&gt; like a LIDAR or a 3D depth camera to actually get sensor measurements of the structure of the environment!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All of this being said, you can of course create a map simply from the RSS of the Wi-Fi. This would be estimating a sparse representation of the environment, where the estimated state of the environment comprises solely of the locations of the access points. This kind of map would allow you to localize the robot to some degree and even navigate (in the absence of obstacles), but I am quite certain this is not what you are after.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In summary, I think you are confusing metric mapping (dense SLAM) and landmark based mapping (sparse SLAM). Positioning systems like Wi-Fi/GPS can either supplement dense SLAM (requiring a dense metric sensor though), or provide the landmarks for sparse SLAM. Sparse SLAM will not typically give you a metric map of an environment though, but rather a map that spatially relates abstract landmarks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for your question about correspondences, it refers to observing landmarks at two distinct timesteps $t$ and $t+1$, and identifying these landmarks in the associated sensor measurements $z_t$ and $z_{t+1}$. Correspondences therefore represent a mapping $\lbrace a : z_t\rbrace\rightarrow\lbrace b : z_{t+1}\rbrace$ where $a=b$ are the same landmark observed in sensor observations $z_t$ and $z_{t+1}$. Correspondences indicate a geometric constraint between observation poses $x_t$ and $x_{t+1}$, as the same feature of the environment was observed, which is &lt;strong&gt;the&lt;/strong&gt; information SLAM is based on.&lt;/p&gt;&#xA;" OwnerUserId="16684" LastActivityDate="2017-04-18T11:51:50.200" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12154" PostTypeId="1" AcceptedAnswerId="12157" CreationDate="2017-04-18T11:53:40.643" Score="0" ViewCount="155" Body="&lt;p&gt;I am working with a raspberry pi which has some positional sensors and I manage it from my mobile with an app I am developing. Now I am trying to understand how to implement this algorithm to code, but I don't really know how to start, so I would be really great if someone can help me with some starting code or similar because I cant find this algorithm implementation.&lt;/p&gt;&#xA;" OwnerUserId="16701" LastEditorUserId="37" LastEditDate="2017-04-19T10:06:13.427" LastActivityDate="2017-04-19T10:06:13.427" Title="Navigation Potential fields algorithm" Tags="&lt;mobile-robot&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ClosedDate="2017-04-19T10:07:03.507" ContentLicense="CC BY-SA 3.0" />
  <row Id="12155" PostTypeId="2" ParentId="12151" CreationDate="2017-04-18T15:08:07.720" Score="2" Body="&lt;p&gt;You haven't posted any of the code you're using to receive the values, but I'm guessing the problem is with your casting and decoding of the &lt;code&gt;dataOut&lt;/code&gt; value. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider the following (direct from my copy of Matlab):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;dataOut = 1.3;&#xA;dataOut_ = char(dataOut);&#xA;fprintf('%d\n',dataOut_);&#xA;&#xA;1 &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This is because your &lt;code&gt;dataOut_&lt;/code&gt; variable is not a string or character array of values! If you were to instead try &lt;code&gt;fprintf('%d\n',dataOut);&lt;/code&gt; (note the lack of trailing underscore), you get:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;fprintf('%d\n',dataOut);&#xA;&#xA;1.300000e+00&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If you want to convert &lt;code&gt;1.3&lt;/code&gt; to a character array (what I'm assuming you actually want to do, but again &lt;em&gt;you never posted the receiving code&lt;/em&gt; so I don't know really what you're anticipating receiving), then you should use either the long-hand form:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;dataOut_ = char(string(dataOut));&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;or the built-in function that does the same thing:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;dataOut_ = num2str(dataOut);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Both of those return the same:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;dataOut_ = char(string(dataOut));&#xA;fprintf('%d\n',dataOut_);&#xA;49&#xA;46&#xA;51&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;These are bytes that correspond to Unicode characters. You can translate those bytes back to characters by casting them to ascii/unicode on the receiving end, BUT then you also need to put those characters into a character array and then convert that character array back to a number. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Matlab has a built in function that could do that, but you're (presumably) not using Matlab on the receiving end:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt; dataIn = native2unicode([49,46,51])&#xA;&#xA;dataIn =&#xA;&#xA;1.3&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But again, that &lt;code&gt;1.3&lt;/code&gt; is a character array. You need to cast it to a number, usually with &lt;code&gt;double(dataIn)&lt;/code&gt;. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;There is an easier solution.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Multiply the number by 100. Round using the Matlab command &lt;code&gt;round&lt;/code&gt;, pass that value. On the receiving end, divide by 100. Now you have timing control to a hundredth of a second. A uint8 could do up to 2.55 seconds, a uint16 could do up to 655.35 seconds. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind that you'll need to send multiple bytes anyways if you're planning on converting a floating point number to a character array, so using a uint16 shouldn't be a problem as far as your data packets go.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;dataOut = 1.3;&#xA;dataOut_ = round(dataOut*100);&#xA;fprintf('%d\n',uint16(dataOut_));&#xA;130&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2&gt;:EDIT:&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;OP posted some more code, but it doesn't look like everything, but I can comment from here:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;I don't see where you multiply by 100 in your transmit code. Is that code current? &lt;/li&gt;&#xA;&lt;li&gt;In your Arduino code, you use &lt;code&gt;Serial.read();&lt;/code&gt; but you don't ever cast the output. This means that each byte of &lt;code&gt;d&lt;/code&gt; is a number from 0-255. If you want to use it as a character array, you (probably) need to cast it to a string/char before you make the comparison check. &lt;/li&gt;&#xA;&lt;li&gt;In your Arduino code, you're just checking if &lt;code&gt;d&lt;/code&gt; is the floating point number 1.3. You haven't done anything (like &lt;code&gt;char(1.3)&lt;/code&gt; or &lt;code&gt;string(1.3)&lt;/code&gt;) to cast 1.3 to a character array so you can do byte-by-byte comparisons.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;You have a number of options here, but I'm not sure what you want to do:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Cast the floating point number to a byte array, send the resulting byte array, and then recast the byte array back to floating point. In Matlab, use &lt;code&gt;fprintf('%d\n',typecast(1.3,'uint8'))&lt;/code&gt;. &lt;/li&gt;&#xA;&lt;li&gt;Cast the floating point number to a character (Unicode) byte array, transmit the byte array, and then convert the byte array back to characters, then convert the characters back to a number. In Matlab, use &lt;code&gt;fprintf('%d\n',char(string(1.3)))&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Multiply from fractional seconds to tenths or hundredths or milliseconds, etc. Round/truncate the number, transmit the number, then convert back to fractional seconds. In Matlab, use &lt;code&gt;fprintf('%d\n',uint16(round(1000*1.3)))&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Matlab inherently uses 64 bit (double) numbers for everything, so keep that in mind when you try to reassemble the bytes on the Arduino end. If you want to transmit the byte array for a 32 bit number, use the &lt;code&gt;single()&lt;/code&gt; command, as in &lt;code&gt;fprintf('%d\n',typecast(single(1.3),'uint8'))&lt;/code&gt;. This produces a four byte array, as opposed to the eight byte array produced when you run the same command without the &lt;code&gt;single&lt;/code&gt; command. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2017-04-18T19:20:41.033" LastActivityDate="2017-04-18T19:20:41.033" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12156" PostTypeId="2" ParentId="1192" CreationDate="2017-04-18T16:46:30.150" Score="0" Body="&lt;p&gt;For any given algoritm (which does not know the maze beforehand) there is a particular maze, where the argorithm does not choose the fastest way on first try.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many algorithms do the trick, that they travel all ways in maze first, recording the way, than they find optimal way and on second try they drive just to the target by the fastest way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your maze is known to be a tree (no loops), with ways just wide for the robot to move, but not too wide and if it have just right angles (which many simple mazes are), then you can use some tricks to solve it faster second time:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;side sensors would help a lot, so you would not be forced to constantly turn around&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;if it is not possible and you have range sensor (usually ultrasound) rather then just obstacle sensor (maybe plain bumper), you can restrict it to narrow beam and choose to just wave a little and see, if the distance is changing consistently, or if there is a hole (which means side way) and how far the hole is. Then you can run fast near to the crossing and then only slow and go full range rotations to excactly find the side way.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;also having the sensor on &quot;tank-like&quot; rotating base would allow you to drive stight and rotate just the sensosr, which is faster, than rotating whole robot&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;if the ways are narrow, you can consider to add bumpers to sides and just bumping to the sides to feel them instead of rotation on place to sensor them properly. Bonus if you can have bug-like antennas to feel both sides at the same time (but they need to be flexible to not break and you need at least 3 state sensors for them (2 bits) - no touch - light touch - hard touch: no touch means side way, light touch means you are just on straight row in centre, hard touch means obstacle or turnining too much to side)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Anyway:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;you go your usual &quot;right hand on wall&quot; way, until you find target, then continue to sthe start the same style, so you travel all the maze first time.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;you mark any crossing on the way and count them creating kind of map (bonus if you measure the distance), then, when on the start back you go travel the map in memory and when you return to a crossing, you know, that you can skip the first way, that you had choose there, as it does not reach the target and it returns back. Continue, until you find target and you have half of the map solved. Then do it in reverse way from end and solve the other half of map. You should get the same result - if not, you made a mistake or the maze is not a tree.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;on the second try you know, which side ways you can skip and which way you have to choose on which crossing, so you go the shorter way to target.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;if you also marked the distances, you know, how far next turn should be and you can drive really fast for nearly all the distance, before you need to scan for turn precisely (and probably more slowly) &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;if your robot construction allows it, you even can ignore the walls and let them lightly bump you back to the centre of that way, so you need a lot less delicate navigation, so you can run even faster. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The same goes to turns, where you can stick to the wall and push a little all the time you think you are approaching turn, until it let you go in, so you know your turn is here. Again much simpler navigation, much less data to evaluate, so much faster speed possible.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If you want to be extra ultra fast, you record this run too and use that for third run, where you know, how long you have to run before turn, with all the acceleration and irrgularities of fast run versus carefull and slow exploring is already accounted for.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="16496" LastActivityDate="2017-04-18T16:46:30.150" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12157" PostTypeId="2" ParentId="12154" CreationDate="2017-04-18T18:27:08.183" Score="0" Body="&lt;p&gt;I have studied this algorithm couple months before and i'll give you my thoughts about it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should really start by defining the positions of your sensor. Their position is crucial for good working algorithm. I will continue with an imaginary example robot which has a circular shape. Then i placed 8 sensors on its edge with 45degree gap. Each sensor read will return only the distance to the nearest target if in detectable range else a 0.&#xA;You can represent each vector as like this:&#xA;$$\vec {V}_{direction} = - \phi$$&#xA;Since you want to &lt;strong&gt;move away&lt;/strong&gt; from the obstacle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\vec {V}_{magnitute} = c $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But there is an important part in here. You have 3 policies to choose from when evaluating the sensor values:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;Constant Magnitude&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;This profile has some important problems. It causes jerky motion on the perimeter of potential field so i dont recommend it.&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;&lt;strong&gt;Linear Dropoff&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;This profile says that the magnitude of vector decreases linearly with the distance. So if you double the distance, your magnitude cuts to the half.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3.&lt;strong&gt;Exponential Dropoff&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This profile seems to be the best suit for most of the cases. Your magnitude decreases linearly with the square of the distance ie. if you double the distance your magnitude will be %25 of the original magnitude.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After the policy select, its really easy. You read the sensors, you evaluate its values according to selected policy then for each vector you obtained(in our example 8) you sum them &lt;strong&gt;as vectors&lt;/strong&gt;. The vector you obtained has everything you need: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Its magnitude is your motors base speed.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Its direction is the measure of angle you should turn.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I will give one last example about the functions and the program flow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I will have a simple linear dropoff potential field which will only turn the opposite way of the obstacle. In this case i only have my front sensor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\vec{V}_{direction} = -180 $$&#xA;$$\vec{V}_{magnitude} = \begin {cases}d \gt D,&amp;amp;0 \\&#xA;d \lt D,&amp;amp; \frac {(D - d)}{D}\end {cases}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where D is the max distance you sense.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;vector repulsive(double d, double D)                { &#xA; if (d &amp;lt;= D) { &#xA;   outputVector.direction =   -180;&#xA;   outputVector.magnitude = (D-d)/D;} &#xA; else {&#xA;   outputVector.direction=0.0 &#xA;   outputVector.magnitude=0.0 &#xA; } &#xA;   return    outputVector; &#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This part is the sensing part which is so simple. You can build upon this by changing the policy and reading more sensors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope it's helpful.&lt;/p&gt;&#xA;" OwnerUserId="14329" LastActivityDate="2017-04-18T18:27:08.183" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12158" PostTypeId="2" ParentId="9417" CreationDate="2017-04-18T22:42:07.197" Score="0" Body="&lt;p&gt;The best way to measure battery capacity is Watt Hours (WHr) because they are a measure of energy. Amp hour ratings are based on the batteries nominal voltage. This is especially important if you end up using switch mode regulators later.&lt;/p&gt;&#xA;" OwnerDisplayName="user16549" LastActivityDate="2017-04-18T22:42:07.197" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12160" PostTypeId="2" ParentId="12089" CreationDate="2017-04-19T01:33:16.127" Score="1" Body="&lt;p&gt;I suspect, but don't know, that the Tango uses a variant of volumetric reconstruction using a Truncated Signed Distance Function (Good intro at &lt;a href=&quot;http://www.cs.nyu.edu/courses/fall12/CSCI-GA.2945-001/dl/jiakai-slides.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.cs.nyu.edu/courses/fall12/CSCI-GA.2945-001/dl/jiakai-slides.pdf&lt;/a&gt;) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It uses structured IR light to obtain a dense depth map, projects these points back into 3-space as a point cloud, probably turns this into a mesh by triangulating it and then projects it into a TSDF volume representing the space being mapped.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Marching Cubes or similar algorithm can then be used to extract the 0 crossing of this isosurface into a mesh.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given that the Tango seems to bee able to map quite large areas, I would assume that either the mapping resolution is quite coarse or else Google have implemented a streaming algorithm to move the volumetric reconstruction into and out of GPU memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The seminal paper here is KinectFusion (&lt;a href=&quot;https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/ismar2011.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/ismar2011.pdf&lt;/a&gt;) which describes how this was done with a Kinect using depth only data.&lt;/p&gt;&#xA;" OwnerUserId="16712" LastActivityDate="2017-04-19T01:33:16.127" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12161" PostTypeId="1" CreationDate="2017-04-19T04:30:00.640" Score="0" ViewCount="221" Body="&lt;p&gt;I have been using ardupilot on drones for a while and I don't exactly know what it does. I know it keeps a drone leveled, lets us set way points and automatically fly through them, etc. Is that it? If so why is the pixhawk so expensive? don't you just need a cheap imu and gps with a $5 pi zero. I might be mixing up pixhawk's hardware and ardupilot. But yeah what do they do individually? and how do they do it? It it just hard coded to add more thrust to a few motors if its tilted, just use gps to go to a location, etc or is there more to it.&lt;/p&gt;&#xA;" OwnerUserId="16713" LastActivityDate="2017-04-19T06:53:00.617" Title="What does ardupilot do and how does it do it?" Tags="&lt;imu&gt;&lt;ardupilot&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12162" PostTypeId="2" ParentId="12161" CreationDate="2017-04-19T06:53:00.617" Score="-1" Body="&lt;p&gt;Quick answer: &#xA;Hardware wise the Ardupilot is based on the &quot;Arduino&quot;, I can't remember what chip it actually uses, but it's Arduino  compatible.&#xA;Pixhawk uses a 32-bit chip, this chip is faster than the Ardu's chip.&lt;/p&gt;&#xA;" OwnerUserId="16714" LastActivityDate="2017-04-19T06:53:00.617" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12166" PostTypeId="2" ParentId="12148" CreationDate="2017-04-19T09:07:25.463" Score="2" Body="&lt;p&gt;It depends on how you grasp the object. If you grip very tightly on the cylinder with your hand and prevent it from moving in certain directions using friction then you are using a force closure. If you enclose the object so that it cannot rotate/translate then it is a form closure.&lt;/p&gt;&#xA;" OwnerUserId="7537" LastActivityDate="2017-04-19T09:07:25.463" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12167" PostTypeId="2" ParentId="12144" CreationDate="2017-04-19T12:19:29.843" Score="0" Body="&lt;p&gt;Doing a sweep across a range of PWM value will not results in a continous motion, since the delay times between the different vales are not correlated with the time required for the servo to arrive to the given position. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depending on how the motor functions:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suggest you only give 2 commands, the minimum PWM value and the maximum PWM value. This should do a complete rotations continously, if the duty cylcle of your PWM is proportional to the position of the motor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your motor has been modified and the pwm duty cycle is not proportional to the position of the motor, but to its velocity, then a constant PWM duty cylce should rotate the motor with a constant velocity. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also please increase delay times to a few seconds in both cases to make sure that the motor has enough time to execute the commands.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2017-04-19T12:19:29.843" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12168" PostTypeId="1" CreationDate="2017-04-19T23:55:52.943" Score="0" ViewCount="127" Body="&lt;p&gt;Disclaimer: I am a beginner, both to this forum and to robotics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I work in IT, and the guys in my department have decided we would like to build a robot for the office, as a sort of hobby/team-building exercise of sorts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Our goal is to create a robot that is spherical, like BB8, but randomly navigates the room like a Roomba. I've seen examples of BB8-like robots online before, but all the ones I have found have used a remote to manually control their movements. This seems like a difficult first project, and personally I would like to try something more basic to begin with, but I figured I might as well look at feasibility of the project before I rain on their parade.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The way I see it, there's two possible ways we could go about this:&#xA;1. Use an iRobot Create 2 and somehow adapt it to a spherical body&#xA;2. Start from scratch on a BB8 robot, and write a program that mimics a Roomba's behavior. (I have seen several examples of this online using Arduino and Raspberry Pi)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is: how difficult is it to write a program mimicing the Roomba's behavior? If it is very difficult, then perhaps I should simply buy a Create 2 and go from there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sorry if this is a broad question. If it is not appropriate for this forum, please direct me to a more suitable forum for beginners in robotics who have stupid questions like mine :p&lt;/p&gt;&#xA;" OwnerUserId="16723" LastActivityDate="2018-12-27T08:10:46.273" Title="Recreating Roomba behavior in a spherical robot" Tags="&lt;arduino&gt;&lt;raspberry-pi&gt;&lt;irobot-create&gt;&lt;roomba&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12169" PostTypeId="2" ParentId="12151" CreationDate="2017-04-20T09:56:49.693" Score="1" Body="&lt;p&gt;What I've found out that using char([float]) converts decimal numbers into the integer numbers in MATLAB 2016a.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt; x = [1.1, 23, 1.56, 5.29; 2.14, 2.39, 67, 4.001]&#xA;&#xA;x =&#xA;&#xA;    1.1000   23.0000    1.5600    5.2900&#xA;    2.1400    2.3900   67.0000    4.0010&#xA;&#xA;&amp;gt;&amp;gt; xch = char(x)&#xA;&#xA;xch =&#xA;&#xA;&#xA;C&#xA;&#xA;&amp;gt;&amp;gt; fprintf('%f\n',xch)&#xA;1.000000&#xA;2.000000&#xA;23.000000&#xA;2.000000&#xA;1.000000&#xA;67.000000&#xA;5.000000&#xA;4.000000&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So you can send the values as&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;fprintf('%f\n',x)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and at the arduino end you can receive the data as&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;float d1,d2;&#xA;float d[4];&#xA;&#xA;    void setup() {&#xA;Serial.begin(9600);&#xA;pinMode(13, OUTPUT);&#xA;}&#xA;&#xA;void loop() {&#xA;if(Serial.available()&amp;gt;0)&#xA;{&#xA;  for(int i=0; i&amp;lt;3;i++)&#xA;  {&#xA;    d[i]= Serial.parseFloat();&#xA;  }&#xA;  d1 = d[0];&#xA;  if (d1 == 1.3)&#xA;  {&#xA;    digitalWrite(13, HIGH);&#xA;  delay(2000);&#xA;  digitalWrite(13, LOW);&#xA;  delay(1000);&#xA;  }&#xA;}&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="16725" LastActivityDate="2017-04-20T09:56:49.693" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12170" PostTypeId="1" AcceptedAnswerId="12171" CreationDate="2017-04-20T12:28:33.837" Score="5" ViewCount="4258" Body="&lt;p&gt;Can anyone explain me in detail, what a industrial robotic arm controller does? What are its components? Does the industry use the opensource controllers like Arduino? I saw most of industrial controllers look very big whereas the hobby robot arms are having small controllers mostly made from arduino? Also, if I were to reconstruct it, what are the topics that I need to learn?&lt;/p&gt;&#xA;" OwnerUserId="15956" LastEditorUserId="26766" LastEditDate="2020-10-06T23:53:14.967" LastActivityDate="2020-10-06T23:53:14.967" Title="How to create a Industrial Robotic arm controller?" Tags="&lt;control&gt;&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="12171" PostTypeId="2" ParentId="12170" CreationDate="2017-04-20T14:05:16.723" Score="9" Body="&lt;p&gt;Industrial robots (e.g. Kuka, ABB, Fanuc) use a control cabinet which has the following main components:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Drive amplifiers (controllers):&lt;/strong&gt;&#xA;The drive amplifiers are responsible for the closed loop control of the motors in the structure of the robot (and the external axes, if present). The number of drive amplifiers usually matches the number of motors. Their main function is to receive the position (and/or velocity) commands from the robot controller and to control the motors to execute the commands. In most cases some kind of communication protocol (mostly &lt;a href=&quot;https://drstienecker.com/tech-332/15-networking/&quot; rel=&quot;noreferrer&quot;&gt;Ethernet based&lt;/a&gt;) is used to transmit these commands. In some cases the drive amps have additional safety functions (&lt;a href=&quot;http://new.abb.com/drives/functional-safety/typical-safety-functions&quot; rel=&quot;noreferrer&quot;&gt;e.g.&lt;/a&gt; Safe Torque Off and Safe Brake Control) to enable a limited human robot interaction. When compared to &quot;hobby&quot; robots, the drive amplifiers offer much more functionality for smooth motions (e.g. jerk limiting, filtering) and motor protection (e.g. current limiting, voltage limiting) furthermore, in many cases these have &lt;a href=&quot;https://www.boschrexroth.com/country_units/america/united_states/sub_websites/brus_dcc/documentation_downloads/ProductDocumentation/CurrentProducts/Drives/IndraDrive/firmware/MPx02/MPx_02VRS_PA02.pdf&quot; rel=&quot;noreferrer&quot;&gt;thousands&lt;/a&gt; (!) of parameters to fine tune their performance. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Robot controller:&lt;/strong&gt; the main function of the robot controller is to interpret the robot application program and convert the commands in the source code to motion or other commands given to the IOs or to the drive amplifiers. The robot controller has an internal model of the kinematic (and dynamic) structure of the robot and has advanced trajectory planning and synchronization capabilities. It can synchronize the motions commanded by each individual drive amplifier in a precise manner. A robot controller also has thousands (!) of parameters to make sure the robot can be set up according to the requirements of its task. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;HMI:&lt;/strong&gt; Industrial robots usually have some sort of pendant or HMI useful for programming the robot. During operation the application program will be displayed here. Also different setting are available on the HMI (e.g. teach in of a new task). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Application program:&lt;/strong&gt; Hobby robots usually have a &quot;firmware&quot; running on the arduino which determines their behavior. Robot controllers are more like a PC. They have an operating system and only execute something if somebody writes a program that is called. That program is the application program and is written in a robot manufacturer specific language (e.g. &lt;a href=&quot;https://www.dropbox.com/s/dq13pca7416cvvu/System%20Software%208.2%20Programming%20Manual%20for%20System%20Integrators.pdf&quot; rel=&quot;noreferrer&quot;&gt;KRL&lt;/a&gt; for KUKA, &lt;a href=&quot;https://library.e.abb.com/public/688894b98123f87bc1257cc50044e809/Technical%20reference%20manual_RAPID_3HAC16581-1_revJ_en.pdf&quot; rel=&quot;noreferrer&quot;&gt;Rapid&lt;/a&gt; for ABB, Java language can be used to program the Kuka iiwa, their light weight robot arm). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Tech support:&lt;/strong&gt; one feature that hobby robots do not have is tech support. Industrial robot manufacturers offer courses, hotline telephone support in case there are difficulties in using/programming their robot. Furthermore, industrial robots come with necessary certificates (CE, UL, etc.) for industrial use. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you would like to build a robot controller which is at least comparable to today's industrial robot controllers, starting from scratch, you would need:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;select industrial motors and drive amplifiers (e.g. from &lt;a href=&quot;http://www.boschrexroth.com/dcc/Vornavigation/Vornavi.cfm?Language=EN&amp;amp;VHist=g97568&amp;amp;PageID=g96067&quot; rel=&quot;noreferrer&quot;&gt;Rexroth&lt;/a&gt;, &lt;a href=&quot;http://www.industry.usa.siemens.com/drives/us/en/motion-control-systems-and-solutions/motion-control-products/servo-drives/Pages/servo-drives.aspx&quot; rel=&quot;noreferrer&quot;&gt;Siemens&lt;/a&gt;, etc.)&lt;/li&gt;&#xA;&lt;li&gt;select an industrial PC and a real-time operating system (or extension, &#xA;e.g. WindRiver, QNX, RTLinux) and a non-real time OS (.g. Windows or Linux)&lt;/li&gt;&#xA;&lt;li&gt;design and build a control cabinet&lt;/li&gt;&#xA;&lt;li&gt;develop your control architecture (which module communicates with what, how are they interfaced, what needs to run in real-time what not)&lt;/li&gt;&#xA;&lt;li&gt;develop/implement a trajectory planning module&lt;/li&gt;&#xA;&lt;li&gt;develop/implement an IO handling module&lt;/li&gt;&#xA;&lt;li&gt;develop/implement an interpreter for the application programming language you have selected (or define a new language and an interprtere for it), complete with variable stacks (global and local), (soft and hard) interrupts, subroutines, timers and counters, coordinate system transformations, motion commands, flow control commands, basic types, math library, etc.&lt;/li&gt;&#xA;&lt;li&gt;&quot;glue&quot; together the interpreter with the motion module and the IO module&lt;/li&gt;&#xA;&lt;li&gt;develop/implement (or buy) a communication stack to communicate with the drive amplifier&lt;/li&gt;&#xA;&lt;li&gt;develop/implement an HMI that can be used for parameterizing the drives, the motion module, the IO module, and can be used for writing and executing application programs with the defined language&lt;/li&gt;&#xA;&lt;li&gt;document everything (!)&lt;/li&gt;&#xA;&lt;li&gt;test test test and test even more&lt;/li&gt;&#xA;&lt;li&gt;get the whole thing certified by a certification body&lt;/li&gt;&#xA;&lt;li&gt;market and sell it&lt;/li&gt;&#xA;&lt;li&gt;offer tech support, warranty, etc.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2017-10-03T12:21:27.360" LastActivityDate="2017-10-03T12:21:27.360" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="12173" PostTypeId="2" ParentId="12168" CreationDate="2017-04-20T16:34:46.393" Score="1" Body="&lt;p&gt;I'd imagine this would be pretty difficult for a beginner. I think you'd be better off making a differential-drive robot first, since the kinematics are much more straight-forward. Either way, you're in for a lot more math than you might realize.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The primary goal will be to abstract away the low-level motor mechanics from the high level behaviors. You'll want to be able to tell the robot to turn 180 degrees if it detects a wall, for instance, but without some abstraction, you won't know exactly what low-level motor commands are required to do this. This is achieved by closing the feedback loop between the output commands and what the robot's actually doing, which can be done through some sort of tilt sensor and perhaps an accelerometer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you've closed the feedback loop, you can use &lt;a href=&quot;https://en.wikipedia.org/wiki/PID_controller&quot; rel=&quot;nofollow noreferrer&quot;&gt;PID controllers&lt;/a&gt; to apply commands based on some error between desired state and actual state. For instance, you'll be able to calculate the error between the actual robot's tilt and the desired tilt and tie that to some motor command that can directly control the error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you've achieved balancing and movement, you can add on other behaviors, such as avoiding obstacles. I'd recommend using a Subsumption architecture to determine which behavior takes priority over another (i.e. go forward or avoid obstacle).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The obstacle avoidance behavior will require a distance sensor; you're probably constrained to an IR sensor if you're wanting to build a BB8 clone. There'll be a whole bunch of vector math necessary to calculate the appropriate angle to turn based on what the robot is reading from the distance sensors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I recommend you watch &lt;a href=&quot;https://www.youtube.com/watch?v=8CXReb7f0Eo&quot; rel=&quot;nofollow noreferrer&quot;&gt;this YouTube video&lt;/a&gt; by David Anderson, which is probably the best intro to mobile robotics that I've seen. I've watched the whole thing probably 5 times.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope this was helpful. Best of luck!&lt;/p&gt;&#xA;" OwnerUserId="16624" LastActivityDate="2017-04-20T16:34:46.393" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12174" PostTypeId="2" ParentId="12150" CreationDate="2017-04-20T18:34:49.423" Score="1" Body="&lt;p&gt;The sweep example is for servos. A brushless motor is not a servo. The sweep example attempts to turn the servo from 0 to 180 degrees and back to 0. So, the 0 - 180 value is not necessarily a PWM signal; it represents the rotation of a servo.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A DC motor won't turn without enough power being applied to overcome the static magnetic pull--you can feel if you try to turn the motor shaft. So, if you only apply small voltage (below whatever voltage 170 represents in your example), then the motor will just hum.&lt;/p&gt;&#xA;" OwnerUserId="16624" LastActivityDate="2017-04-20T18:34:49.423" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12175" PostTypeId="1" AcceptedAnswerId="12176" CreationDate="2017-04-20T21:32:33.653" Score="0" ViewCount="113" Body="&lt;p&gt;I am really new to the topic. There doesn't seem to be lot of overlap between Industrial robotics and Hobby robotics (atleast in certain areas like control etc).Please correct me if i am wrong. I actually tried going through Fanuc website, and most of the content is restricted. I would like to know if there is any course on how to operate Industrial robots? its PLC programming? or any application specific course etc?&lt;/p&gt;&#xA;" OwnerUserId="15956" LastActivityDate="2017-04-22T06:55:54.050" Title="Are there any comprehensive video courses or lecture notes on Industrial robotics?" Tags="&lt;robotic-arm&gt;&lt;industrial-robot&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12176" PostTypeId="2" ParentId="12175" CreationDate="2017-04-20T23:11:43.643" Score="0" Body="&lt;p&gt;To directly answer your question, you can take a look at some of the &lt;a href=&quot;https://www.youtube.com/watch?v=eMlGV94c5WU&quot; rel=&quot;nofollow noreferrer&quot;&gt;ROS MoveIt! Videos&lt;/a&gt;. Check out the &lt;a href=&quot;https://www.udacity.com/robotics&quot; rel=&quot;nofollow noreferrer&quot;&gt;Udacity robotics courses&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;To give a more opinionated answer...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've worked both with industrial robots and mobile robots, so my opinion is that if you learn mobile robotics concepts including manipulators and become familiar with robot system design, you'll be able to do well in industrial robotics. However, industrial robots are typically programmed in a very different way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mobile robots are designed to &lt;em&gt;sense&lt;/em&gt; and &lt;em&gt;respond&lt;/em&gt; to their environments.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Industrial robots are primarily designed to follow &lt;em&gt;pre-planned instructions&lt;/em&gt; and &lt;em&gt;manipulate&lt;/em&gt; their environments.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So industrial robots are typically not designed with a wide array of sensors and complex conditional logic. It's a lot of sequential programming in specialized languages such has RAPID (ABB), KUKA Robot Language, KAREL, Fanuc TP (each robot manufacturer has its own, and there are some industry standards). It's a lot more like CNC programming, but without G and M code and rather a list of human-readable sequential steps. You can watch YouTube to get up to speed on any of these languages, but none of them are that revolutionary. If you're already a programmer, you'll probably cringe a little and roll your eyes when you see these languages.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The skills in mobile robotics transfer over, and you can even make big improvements to the industrial robotics world by bringing in the more traditional skillset (which sensors, algorithms to use, metrology, etc.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most training on industrial robots is either done at universities that have partnerships with the robotics companies or at companies that have purchased these robots. Thus it's hard to get into the details of this field without being there. But you're not missing much in my humble opinion. I've been through those trainings and I mostly rolled my eyes because industrial robotics seems to be miles behind the rest of the robotics industry in terms of how the &lt;em&gt;user&lt;/em&gt; would program them. Thus just learning robotics in general will help a lot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most industrial robots just perform DSP on the motor signals to figure out where they are. It's amazing and kind of scary, but there's no physical positioning feedback. The error adds up through the chain out to the end effector and it's a pain. Some of the more advanced robotics groups thus measure the end effector from the outside to correct these estimates, and that's done with expensive software rather than someone actually programming anything.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general, if you learn MoveIt!, you've read about robotic arm path planning, and you are familiar with robotics concepts in general, you'll be ready to jump into the world of industrial robots, and you might even cringe a little when you see how the robots that run factories really work.&lt;/p&gt;&#xA;" OwnerUserId="16566" LastActivityDate="2017-04-20T23:11:43.643" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="12178" PostTypeId="1" CreationDate="2017-04-21T10:58:51.027" Score="2" ViewCount="1230" Body="&lt;p&gt;Is monocular visual odometry able to estimate relative scale? Say I have a sequence of 10 images that are taken on a single track each 1 m after the previous. Can some mono odometry method distinguish relative scale when it processes image pairs that are in various distances from each other? I mean like processing 1st vs 10th image and 9th vs 10th image - will the fist give 10x relative scale than the second?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am examining OpenCV based odometry code (&lt;a href=&quot;https://github.com/avisingh599/mono-vo&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/avisingh599/mono-vo&lt;/a&gt;) but it only gives something like &quot;translation vector&quot; that always has a size of 1 regardless the distance measured. I know mono odometry can not do absolute scale but I thought it can do relative (question is what &quot;relative&quot; actually means here). Seems like OpenCV's recoverPose only do a translation vector that has always the same size (I guess the size is 1)?&lt;/p&gt;&#xA;" OwnerUserId="1021" LastActivityDate="2017-04-25T20:59:32.463" Title="Scale problem with monocular visual odometry" Tags="&lt;cameras&gt;&lt;opencv&gt;&lt;visual-odometry&gt;&lt;scale-model&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12179" PostTypeId="2" ParentId="11885" CreationDate="2017-04-21T13:35:54.627" Score="1" Body="&lt;p&gt;There are multiple different parts to your question. &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Can an Ardiuno be used &quot;in in real-time&quot;?&#xA;Yes it can, it has hw timer interrupts, the tolerance of your oscillator will give the precision of the interrupt. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Can you communicate with an Ardiuno in real-time?Yyes, you can. A synchroneus communication, e.g. SPI is realtime capable. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Can you communicate with an Ardiuino over serial in real-time?&#xA;The serial port is an async communication. If you implement the other protocol layers ontop if it with care (e.g. maximized message length), I assume it can be done. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;can you use USB to communicate with an Arduino in real-time?&#xA;No. USB is not real-time capable. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;All the high level processing tasks like computer vision and motion planning will be running in the main computer which then sends the commands to motors from the Arduino. So it is just acting like a bridge. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In this case, which entity performs the closed loop control? Your description suggests, that the arduino is. It is then not a simple bridge. However, sending commands to an arduino does not necesarily need real-time communication capabilites:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PC computes the reference values for the control system, these are then transfered to the arduino over a non-realtime channel. Tha arduino reads this channel in a non-real time part (i.e. not in the interrupt) and the interrupt on the arduino runs the control loop making sure that the reference value is mainained. You only have to take care that the time required to execute the task in the interrupt is less then (and not equal) the interrupt cycle time. This way the processor can process the communication task &quot;between&quot; two interrupts. The question how much less dies it have to be depends on how often you get a command and how fast do you want to react to a new command.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the communication is not part of a closed control loop (i.e. it only sends reference values for the outmost loop in a cascasded loop), it does not have to be real-time capable.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2017-04-21T13:35:54.627" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12180" PostTypeId="2" ParentId="11885" CreationDate="2017-04-21T13:46:14.903" Score="1" Body="&lt;p&gt;The short answer is no, you will not be able to create a distributed system that meets the criteria of 'hard real time' using the approach you describe.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The more nuanced answer is: It is theoretically possible with a heck of a lot of work. You will have the most problems in achieving hard real time from the USB communications, the ROS code, and using python. You will need understand the details of how USB communications work, how your USB bus is physically arranged, and use a real time capable driver like &lt;a href=&quot;http://rtcl.kaist.ac.kr/rtca/&quot; rel=&quot;nofollow noreferrer&quot;&gt;usb4rt&lt;/a&gt;. ROS is not real time capable, but once you have finished the difficult effort of achieving realtime in the USB communications, an orocos module to replace the functionality of ros_arduino_bridge should be easy for you. Python &lt;a href=&quot;https://stackoverflow.com/a/15011981/734383&quot;&gt;can be used in realtime if you are careful&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One small change you could make to simplify the amount of work would be to use direct RS232 serial communications instead of USB communications. I would expect realtime serial drivers to be easier to set up and work with.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Distributed real time systems are difficult to get right. If you are able to design your system such that there is only the main PC and no arduinos, you will simplify things and be able to make progress towards your goals much more quickly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, it's likely that you don't really need hard real time. After all, humans do all the tasks you want to do and we do not have hard real time processing. Many robotics algorithms have a basic assumption of a constant time period, and these are the ones that cause robots to work incorrectly when realtime processing is not maintained. It is possible to derive alternate algorithms that do the same thing, but without the constant time period assumption for most of them. &lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="-1" LastEditDate="2017-05-23T12:37:11.430" LastActivityDate="2017-04-21T13:46:14.903" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12181" PostTypeId="2" ParentId="10701" CreationDate="2017-04-22T01:18:18.390" Score="0" Body="&lt;p&gt;Some solutions:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Zero your drift when you know you are not moving.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Use better accelerometers (i.e. more bits of resolution, higher G values, and faster measurements).  Because you are integrating, any sensor noise will get amplified.  Also, if the sensor saturates at its max G value, that will also throw off your results.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Use an angular velocity sensor, aka a &quot;gyro&quot; instead.  They will give you a more direct measurement without needing to integrate.  &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Typically, accelerometers and gyros are used in conjunction and thrown into a kalman filter together.  The accelerometer is used for transnational acceleration/velocity/position by integrating once and twice, and the gyro is used for angular velocity and position by integrating once. &lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2017-04-22T01:18:18.390" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12183" PostTypeId="2" ParentId="12083" CreationDate="2017-04-22T08:32:53.107" Score="0" Body="&lt;p&gt;I'm having a similar issue and think it may be that when set to the more sensitive scale (250dps), your gyro readings are clipped. I.e. you turn at a rate of 400dps, but the gyro's output has a max value of 250dps, hence the YPR output values lag reality until the small proportion of accel fed in to stop gyro drift (presuming this is the technique) gradually corrects it. Guess Guess.&lt;/p&gt;&#xA;" OwnerUserId="16743" LastActivityDate="2017-04-22T08:32:53.107" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12184" PostTypeId="2" ParentId="10099" CreationDate="2017-04-22T09:43:13.610" Score="1" Body="&lt;p&gt;Hubsan is a proprietary drone if I am right. But, there are several reasons why black-outs can happen.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;The image-sensor/camera may be faulty (The photosensitive material may not be generating signals through photo-voltaic effect).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;There may be proprietary protocols which may drop frames if parity checks are failing and faulty image-capture can be causing this.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Problems with software - This may be due to problems with post-processing and the meta-data is getting retained (may be due to hardware image buffer problems).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;This question is vague without videos/descriptions/logs of the same.&lt;/p&gt;&#xA;" OwnerUserId="15014" LastActivityDate="2017-04-22T09:43:13.610" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12185" PostTypeId="2" ParentId="9370" CreationDate="2017-04-22T09:57:28.253" Score="0" Body="&lt;p&gt;@Chuck 's comment is correct; You can have some sort of polling software which detects some image (continuously tries to detect an object from image stream).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Else, if this does not work, then, it is better to add some other sensor like proximity sensor or so to detect objects like human and then turn on thermal camera if a threshold is crossed. But, as @Chuck mentions, unless the objectives are known, it is difficult to help you out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If an image-array is obtained, then image-processing can be done through many libraries. Some of the libraries which I remember are OpenCV, MATLAB, PIL (Python Imaging Library), BoofCV, JavaCV, SimpleCV etc (depending on your programming language).&lt;/p&gt;&#xA;" OwnerUserId="15014" LastActivityDate="2017-04-22T09:57:28.253" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12186" PostTypeId="2" ParentId="12144" CreationDate="2017-04-22T10:52:44.820" Score="0" Body="&lt;p&gt;I have a gut-feeling that the question cannot be answered without the details of the motors. I see that &lt;code&gt;analogWrite()&lt;/code&gt; is being used along with a delay of 0.1s . In Arduino, &lt;code&gt;analogWrite()&lt;/code&gt; is a &lt;a href=&quot;https://www.arduino.cc/en/Reference/analogWrite&quot; rel=&quot;nofollow noreferrer&quot;&gt;PWM itself running at about 490Hz/980Hz&lt;/a&gt; and additional delays may not be necessary. Servos generally use 1 milli-second to 2 milli-second 50 Hz PWM as mentioned in this description &lt;a href=&quot;https://learn.sparkfun.com/tutorials/pulse-width-modulation&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://learn.sparkfun.com/tutorials/pulse-width-modulation&lt;/a&gt; . Servo motors use feedback and internal softwares most of the times - &lt;a href=&quot;http://www.electronicshub.org/servo-motors/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.electronicshub.org/servo-motors/&lt;/a&gt; . So, it is better to use &lt;a href=&quot;https://www.arduino.cc/en/reference/servo&quot; rel=&quot;nofollow noreferrer&quot;&gt;Arduino Servo Library&lt;/a&gt; and program using 'servo angles' like this: &lt;a href=&quot;https://learn.adafruit.com/adafruit-arduino-lesson-14-servo-motors/arduino-code-for-sweep&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://learn.adafruit.com/adafruit-arduino-lesson-14-servo-motors/arduino-code-for-sweep&lt;/a&gt; .&lt;/p&gt;&#xA;" OwnerUserId="15014" LastActivityDate="2017-04-22T10:52:44.820" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12187" PostTypeId="2" ParentId="12129" CreationDate="2017-04-22T14:32:47.983" Score="1" Body="&lt;p&gt;There are 4 possibilities:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;One of the wheels' centre is displaced slightly.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Wheel encoders are not properly positioned and this is causing issues (like wheel pausing at odd positions while microcontroller 'thinks' it has achieved the right position)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;One of the wheels' radius is lesser than the other one.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;As per @GurkanSetin 's comment, friction might be causing some issue.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;It is better to timestamp every count (some counts are getting missed probably) and post logs here and use some sort of feedback; preferably imaging and using some sort of minimal localisation to correct that; preferably something like this &lt;a href=&quot;https://www.ais.uni-bonn.de/papers/ICRA_2008_Orthogonal_Wall_Correction.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.ais.uni-bonn.de/papers/ICRA_2008_Orthogonal_Wall_Correction.pdf&lt;/a&gt; . Even visual SLAM can be used. Some 'basic' tutorial can be found here: &lt;a href=&quot;https://ocw.mit.edu/courses/aeronautics-and-astronautics/16-412j-cognitive-robotics-spring-2005/projects/1aslam_blas_repo.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://ocw.mit.edu/courses/aeronautics-and-astronautics/16-412j-cognitive-robotics-spring-2005/projects/1aslam_blas_repo.pdf&lt;/a&gt; (Some people place one camera sideways - orthogonal to motion of robot for monocular vision and just use template matching/image-difference)&lt;/p&gt;&#xA;" OwnerUserId="15014" LastActivityDate="2017-04-22T14:32:47.983" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12188" PostTypeId="2" ParentId="7287" CreationDate="2017-04-23T07:03:10.503" Score="4" Body="&lt;p&gt;Dead reckoning is determining pose (position and rotation) using speed estimates from sensors. For example, you know your initial position and use sensors such as encoder, accelerometers, gyros, etc... to estimate your current position by integrating sensor measurements. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Odometer is determining the pose using only the rotation of the wheels of a robot. Sometime people talking about visual odometry, and visual odometry is the same except cameras are used instead of wheel encoders.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically, odometry is a type of dead reckoning. &lt;/p&gt;&#xA;" OwnerUserId="15213" LastActivityDate="2017-04-23T07:03:10.503" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12189" PostTypeId="1" CreationDate="2017-04-23T08:05:43.283" Score="2" ViewCount="1506" Body="&lt;p&gt;I am working on an ground surveillance robot using an Arduino mega for programming, am using components like the HMC5883L compass, Adafruit GPS for assigning of coordinates (latitude and longitude) which are the way points, I have written up the code for both the compass and the GPS and am able to get information from them, but now what I want for my robot to move to those specified coordinates (latitude and longitude waypoints) which I don't know how to do if anyone could just write an example code for me or push me to the write place I could get a sample code please do pardon me for asking such question cause I am new to coding GPS and compass and I would appreciate it if anyone could help me out or explain a bit in details what I need to do please find my code here &lt;a href=&quot;http://textuploader.com/drqwv&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://textuploader.com/drqwv&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="16746" LastActivityDate="2017-06-22T09:51:54.740" Title="how to move my robot to the assigned coordinates" Tags="&lt;arduino&gt;&lt;c++&gt;&lt;programming-languages&gt;&lt;c&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12190" PostTypeId="2" ParentId="12189" CreationDate="2017-04-23T09:33:43.003" Score="2" Body="&lt;p&gt;The GPS gives the actual coordinates. The compass gives the orientation. The waypoints also have coordinates, and as I see in your code, you have defined movement primitives for your robot. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the actual and waypoint coordinates you cen compute the heading vector required. You can compare that with the current heading vector from the compass. Your goal is to match the required heading and then match the coordinates of the waypoints. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have a current measured value and a desired, waypoint value, in most cases you use a closed loop controller to make the actual value equal your desired value. &lt;a href=&quot;https://en.wikipedia.org/wiki/PID_controller&quot; rel=&quot;nofollow noreferrer&quot;&gt;PID&lt;/a&gt; controllers are used frequently for this. Arduino implementation &lt;a href=&quot;http://playground.arduino.cc/Code/PIDLibrary&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your problem still is that you have defined discrete motion primitives for moving the robot, so either you go left or forward. It would help you to implement a more flexible motion submodule, which can take a direction vector and move in that direction. This direction vector should come from the unit vector of the difference for between the current position and the waypoint (desired, reference) position. The speed of the motion could (or should) be correlated with the distance between the current position and the waypoint with a threshold at the end.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A function with the header:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;void move_robot(Vector2 dir, float speed)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;would make it possible to use a PID controller for the heading and another PID controller for the velocity. One takes care of the heading ant the other one of the speed. Both run in the same interrupt. &lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2017-04-23T09:38:52.720" LastActivityDate="2017-04-23T09:38:52.720" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12191" PostTypeId="1" CreationDate="2017-04-23T12:53:20.583" Score="0" ViewCount="755" Body="&lt;p&gt;When ever i move the servo motors from the arduino, it produces sound. I don't want the servos to make this sound. How can i remove this sound. As i think this sound must be coming from the gears used inside the servo motor, but how can i silent those sound?&lt;/p&gt;&#xA;" OwnerDisplayName="user14148" LastEditorUserId="37" LastEditDate="2018-08-15T15:15:04.917" LastActivityDate="2018-08-15T15:15:04.917" Title="How to remove sound comming from servo motor?" Tags="&lt;arduino&gt;&lt;servomotor&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12193" PostTypeId="2" ParentId="12191" CreationDate="2017-04-23T18:30:07.157" Score="1" Body="&lt;p&gt;If you have the skill, it may help to open the servo and apply some vaseline to the gear, while not messing with the electronic. If you are not totally sure you have the required skill, you probably have not and will just destroy the servo.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you have just the normal way to suppress sound:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;put it inside box&lt;/li&gt;&#xA;&lt;li&gt;use foam around the box&lt;/li&gt;&#xA;&lt;li&gt;attach the servo well, so it would not vibrate&lt;/li&gt;&#xA;&lt;li&gt;suppress those vibration too (usually put some rubber between servo and the base and/or between the base and rest of your device)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Keep in mind, that the servo is manipulating something, so there must be free way for it and that the servo generate a lot of heat, when it moves or protects from move, so it may need also cooling&lt;/p&gt;&#xA;" OwnerUserId="16496" LastActivityDate="2017-04-23T18:30:07.157" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12195" PostTypeId="1" AcceptedAnswerId="12201" CreationDate="2017-04-24T21:25:26.423" Score="1" ViewCount="567" Body="&lt;p&gt;I have a problem with the Orocos IK solver, especially with the KDL::Rotation matrix input. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I try to call my KDL IK solver with a normal vector and a rotation. If I use the example values for the rotation everything went well. But as I tried to use my &quot;own&quot; orientation, the IK solver didn't find a solution.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; KDL::Vector vektor(0.457101 , -0.629513, -0.627317); &#xA; KDL::Rotation rotation(1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0); //myValues&#xA; KDL::Frame end_effector_pose(rotation, vektor);&#xA;&#xA; rc=kdl_solver.CartToJnt(origin,end_effector_pose,result);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;As you can see it's a simple identity matrix -&gt; no rotation -&gt; in my opinion it should work. Anyway, if I try to call it with any other rotation matrix, it doesn't find a solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just in case of &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;KDL::Rotation rotation(-0.0921467,0.939391, 0.330232, 0.925128, 0.203433,-0.32055,-0.368302,0.275969,-0.887803);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;it terminates with a valid solution. These values are test values from my robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do I have a wrong comprehension of the rotation matrix ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you very much for your time&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Devel&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDITE:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With .msg communication it works. I have no idea why ?&#xA;Does anyone know how the following lines construct the rotation matrix ??&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;geometry_msgs::PoseStamped pose_msg_in = pose_stamp; &#xA;tf::Stamped&amp;lt;tf::Pose&amp;gt; transform;     &#xA;tf::Stamped&amp;lt;tf::Pose&amp;gt; &amp;gt; transform_root;&#xA;tf::poseStampedMsgToTF(pose_msg_in, transform); &#xA;&#xA;&#xA;tf_listener.transformPose(root_name, transform, transform_root);&#xA;&#xA;KDL::Frame F_dest;  tf::transformTFToKDL(transform_root, F_dest);&#xA;&#xA;int ik_valid = ik_solver_pos-&amp;gt;CartToJnt(jnt_pos_in, F_dest, jnt_pos_out);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Or is the matrix related to something? I get the feeling that I miss a important information.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;SOLVED:&lt;/strong&gt; Sorry, for the delay. Shahbaz answer was totally right. I simply overestimated the capabilities of my robot. The position was not reachable. After using Moveit(visualisation), it became clear that the orientation is not possible for the robot at that position (x,y,z). THANKS&lt;/p&gt;&#xA;" OwnerUserId="16764" LastEditorUserId="16764" LastEditDate="2017-06-09T15:16:28.617" LastActivityDate="2017-06-09T15:16:28.617" Title="Orocos KDL issue with Rotation (matrix) - Inverse Kinematics" Tags="&lt;robotic-arm&gt;&lt;ros&gt;&lt;kinematics&gt;&lt;inverse-kinematics&gt;&lt;rotation&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12196" PostTypeId="2" ParentId="11625" CreationDate="2017-04-25T02:37:16.260" Score="1" Body="&lt;p&gt;Tom Sheridan from MIT used to say (I am paraphrasing from 25 years ago so I am sure to have some of this wrong) that robots which operate only in free space should update around 10 Hz; if they interact with environmental impedances then they should update around 100 Hz; if they have to go from free space to hard contact with a stiff environment, then at least 1 kHz.   Based on that I would recommend starting at 100 Hz and adjusting from there, depending on the additional dynamics of the system.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2017-04-25T02:37:16.260" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12197" PostTypeId="1" AcceptedAnswerId="12198" CreationDate="2017-04-25T06:31:43.387" Score="1" ViewCount="288" Body="&lt;p&gt;I am trying to simulate the experiments in the paper &lt;a href=&quot;http://220.68.68.1/papers/tdpc_hi.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;Time-Domain Passivity Control of Haptic Interfaces&quot;, Hanaford and Ryu, 2002, IEEE transactions on robotics and automation vol .18, No1&lt;/a&gt;&#xA;about the simulation in Fig.8 and its results are fig.9 and fig.10. I don't know an exact model of fig.9 which I can draw again in Matlab/simulink to run. I tried drawing spring and damper as in fig.6 of the same paper, but I don't know which is my input ( force, velocity or position) and also the type of signal of input (sine, step,...) to get a similar result as the paper. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I added 2 images, one is model which i drew and another is the signal of position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am really confused about initial condition of position . should either I choose a initial condition at Discrete-Time Integrator1, or adding a difference of 2 adders into position.&#xA;In here: damping=0 ( i want to check the case without Passivity controller)&#xA;k=30000 and I added initial condition to Discrete-Time Integrator1 is 50&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/GZYf7.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/GZYf7.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;[![enter image description here][3]][3]&lt;/p&gt;&#xA;" OwnerUserId="16769" LastEditorUserId="16769" LastEditDate="2017-04-26T02:01:43.063" LastActivityDate="2020-03-02T02:10:42.440" Title="What is exact model of haptic interface system in the paper &quot;Time-Domain Passivity Control of Haptic Interfaces&quot;?" Tags="&lt;matlab&gt;&lt;algorithm&gt;&lt;theory&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12198" PostTypeId="2" ParentId="12197" CreationDate="2017-04-25T10:03:10.330" Score="2" Body="&lt;p&gt;It's usually best to contact the author directly if you have a specific question about a specific paper. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The simulations are there only to illustrate the principal of the passivity observer and controller, so it makes sense they did not elaborate on them too much.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first simulation uses velocity and position as the input and appears to have an initial position just outside the wall.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second simulation probably has no inputs and just lets an initial condition evolve over time, with an initial position 50mm outside the wall. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Oddly, the experimental data has the exact same starting and wall position. This either indicates a meticulous attention to detail when creating the simulation or, more likely, instead of making a model of the human and haptic interface (which is complicated and problematic) they grabbed experimental data that illustrates the point they were trying to make in the paper and used that instead for the plots. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The model of Fig. 6 is the Virtual Environment and Series PC of Fig. 8. (which includes the $F=0$ when $ x(t) &amp;lt; 0$ nonlinearity). You will need to add models for the Human Operator and Haptic Interface to complete the model.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will need to model the haptic interface as a non-passive system. A mass+damper with a negative coefficient would be the minimum model. They mention an active friction compensation algorithm which would behave like this to some degree. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you would have the human (mass+spring), the device (mass+negative damper), and environment (spring+damper with dirac-delta wall boundary) all in series.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The neutral point (where the forces of the human spring and wall spring are equal) should be some distance inside the wall. The initial conditions should be outside the wall with the human spring compressed (and the wall spring at 0 deflection because of the nonlinear condition).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the correct damping coefficients you should be able to get an oscillation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You would need a much more complex model to get the results they claim are from simulation 2. An out-of-phase negative damping to account for sensor latency and a model of device actuator force saturation might do it. Again, my guess is that they are showing data from an experiment on the physical device rather than simulation results.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you understand the concept of the passivity observer and passivity controller, you can move on to the next paper without fear of missing something in this one. Most of the passivity work in haptics is in response to implementation issues in real devices and the non-linearities they inflict on the previous generations shiny clean control equations. You will need to work with real haptics devices to get a good understanding of this. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: The simulink model you show is only part of the model. It would be better if you write the equation for the model. The position of the Human is different than the position of the proxy and appears to be missing (or viewed another way, the length of the spring between the human and device). The non-linearity of the wall also appears to be missing. If it helps your intuition, think of the human position as the position of the shoulder, the device (and proxy) position where the hand is, and the spring for the human is the tendons in the elbow and wrist.&lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="184" LastEditDate="2017-04-26T10:53:51.253" LastActivityDate="2017-04-26T10:53:51.253" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="12201" PostTypeId="2" ParentId="12195" CreationDate="2017-04-25T14:34:44.467" Score="2" Body="&lt;p&gt;The vector and rotation together define the pose of the end-effector, which means its position and orientation. There are 6 degrees of freedom here (presumably), so you can think of the position as a point and the orientation as a direction (I'm avoiding &quot;vector&quot; to avoid confusion):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; |&#xA; |&#xA; |       P .-----&amp;gt; O&#xA; |&#xA; |             &#xA; +--------------------------&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Where:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;P&lt;/code&gt; is the position of the end-effector (defined with &lt;code&gt;vector&lt;/code&gt; in your example)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;O&lt;/code&gt; is the orientation of the end-effector (defined with &lt;code&gt;rotation&lt;/code&gt; in your example)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So, what does the identity mean for the rotation matrix? It means the end-effector has the same orientation as a predefined original orientation. This could be different per robot. Let's say the original orientation has &lt;code&gt;z&lt;/code&gt; upwards and &lt;code&gt;x&lt;/code&gt; westwards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you are asking the solver is to solve IK for the end-effector at a given position and pointing upwards. As the function fails, it's clear that such a pose is unreachable by the robot.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Do I have a wrong comprehension of the rotation matrix ?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Can't tell without knowing what your comprehension of the rotation matrix is! But the rotation matrix as I said defines the orientation based on some original orientation. The identity matrix is not a magic matrix where everything should work.&lt;/p&gt;&#xA;" OwnerUserId="158" LastActivityDate="2017-04-25T14:34:44.467" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="12205" PostTypeId="2" ParentId="12178" CreationDate="2017-04-25T20:59:32.463" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;processing 1st vs 10th image and 9th vs 10th image - will the fist give 10x relative scale than the second?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It depends. In the simplest perspective, 'relative' means what the transformation is from one view to another, given two images. So if you just use multiple view geometry techniques to find the transformation between any two images, you'll always end up with a unit vector. (This is what the OpenCV based odometry code is doing, through the findEssentialMat/recoverPose function). Without any additional initialization or accumulation of external information, relative translation will always be a unit vector: i.e., just the bearing/direction between the views, and the definition of 'relative' is &quot;view 2 relative to view 1&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But let's say you capture 10 images with equal intervals in between, moving in a straight line. If you use the 1st and the 10th image (which, naturally, would be described through a relative translation of magnitude 1), you can reconstruct the environment you were observing in 3D up to (arbitrary) scale through triangulation. Now if you use this 3D set of points to localize the rest of the images and obtain the distance between 5 and 6, or view 9 and 10 for instance, you'll see that the relative distance now, is 0.1. Here, the definition of 'relative' becomes &quot;relative distance between view x and view y with respect to a 3D environment that I've already triangulated&quot;.&lt;/p&gt;&#xA;" OwnerUserId="10310" LastActivityDate="2017-04-25T20:59:32.463" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12207" PostTypeId="1" AcceptedAnswerId="12210" CreationDate="2017-04-26T03:16:58.760" Score="1" ViewCount="497" Body="&lt;p&gt;I have a standard VEX Clawbot, which I've been trying to make go straight for some time. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've been following this guide:&#xA;&lt;a href=&quot;http://www.education.rec.ri.cmu.edu/products/cortex_video_trainer/lesson/3-5AutomatedStraightening2.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.education.rec.ri.cmu.edu/products/cortex_video_trainer/lesson/3-5AutomatedStraightening2.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is my code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#pragma config(I2C_Usage, I2C1, i2cSensors)&#xA;#pragma config(Sensor, I2C_1,  ,               sensorQuadEncoderOnI2CPort,    , AutoAssign )&#xA;#pragma config(Sensor, I2C_2,  ,               sensorQuadEncoderOnI2CPort,    , AutoAssign )&#xA;#pragma config(Motor,  port1,           leftMotor,     tmotorVex393_HBridge, openLoop, driveLeft, encoderPort, I2C_1)&#xA;#pragma config(Motor,  port10,          rightMotor,    tmotorVex393_HBridge, openLoop, reversed, driveRight, encoderPort, I2C_2)&#xA;//*!!Code automatically generated by 'ROBOTC' configuration wizard               !!*//&#xA;&#xA;void GOforwards()&#xA;{&#xA;    nMotorEncoder[rightMotor]=0;&#xA;    nMotorEncoder[leftMotor]=0;&#xA;    int rightEncoder = abs(nMotorEncoder[rightMotor]);&#xA;    int leftEncoder = abs(nMotorEncoder[leftMotor]);&#xA;&#xA;    wait1Msec(2000);&#xA;    motor[rightMotor] = 60;&#xA;    motor[leftMotor] = 60;&#xA;&#xA;    while (rightEncoder &amp;lt; 2000)&#xA;    {&#xA;        if (rightEncoder &amp;gt; leftEncoder)&#xA;        {&#xA;            motor[rightMotor] = 50;&#xA;            motor[leftMotor] = 60;&#xA;        }&#xA;        if (rightEncoder &amp;lt; leftEncoder)&#xA;        {           &#xA;            motor[rightMotor] = 60;&#xA;            motor[leftMotor] = 50;&#xA;        }&#xA;        if (rightEncoder == leftEncoder)&#xA;        {&#xA;            motor[rightMotor] = 60;&#xA;            motor[leftMotor] = 60;&#xA;        }&#xA;    }&#xA;    motor[rightMotor] = 0;&#xA;    motor[leftMotor] = 0;&#xA;}&#xA;&#xA;&#xA;task main()&#xA;{&#xA;GOforwards();&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I am using integrated Encoders.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I run the code my robot runs without stopping and the Encoder values diverge quickly. This is a video of the code running from the debugger windows:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?time_continue=2&amp;amp;v=vs1Cc3xnDtM&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?time_continue=2&amp;amp;v=vs1Cc3xnDtM&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not sure why the power to the wheels never changes, or why it seems to believe that the Encoder values are equal... much less why it runs off into oblivion when the code should exit the while loop once the right encoder's absolute value exceeds 2000.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help would be appreciated.&lt;/p&gt;&#xA;" OwnerUserId="16674" LastActivityDate="2017-04-26T13:29:00.293" Title="RobotC Code Malfuncion (VEX Robotics Clawbot)" Tags="&lt;robotc&gt;&lt;quadrature-encoder&gt;&lt;vex&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12208" PostTypeId="1" AcceptedAnswerId="12209" CreationDate="2017-04-26T10:58:11.793" Score="0" ViewCount="223" Body="&lt;p&gt;I know,this question is irrelevant.But,while working suddenly this question came through my head..my point is there should not be any difference between a voltage source and a current source.cause,these two are dependent on each other.if there is a  potential difference then,there will be a current flow...similarly,if there is a flow of current then there must be a voltage difference....isn't it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;please,make the topic clear.....&lt;/p&gt;&#xA;" OwnerUserId="16491" LastActivityDate="2017-04-26T22:20:39.533" Title="what is the difference between a voltage source and current source?" Tags="&lt;current&gt;" AnswerCount="2" CommentCount="1" ClosedDate="2017-04-27T10:34:37.170" ContentLicense="CC BY-SA 3.0" />
  <row Id="12209" PostTypeId="2" ParentId="12208" CreationDate="2017-04-26T12:43:56.360" Score="1" Body="&lt;p&gt;You are correct in that they are related, via Ohm's law:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;V = IR \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The difference is in what gets regulated. A voltage source will keep supply voltage at a constant level by altering the current that is supplied. If the effective (&lt;a href=&quot;https://en.wikipedia.org/wiki/Th%C3%A9venin%27s_theorem&quot; rel=&quot;nofollow noreferrer&quot;&gt;Thevenin&lt;/a&gt;) resistance goes down, then the applied current must go up to keep the supplied voltage constant.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similarly, if you rearrange Ohm's law to look at the supplied current:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;I = V/R \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can see that, for a &lt;em&gt;current&lt;/em&gt; source, if the effective resistance goes down, the applied voltage must also go down in order to keep the supplied current constant.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-04-26T12:43:56.360" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12210" PostTypeId="2" ParentId="12207" CreationDate="2017-04-26T13:29:00.293" Score="0" Body="&lt;p&gt;It looks like you don't ever update the encoder values after you initialize them. The problem seems to be that maybe you're thinking that the left and right encoder values will update automatically, but that is generally not the case. The exception &lt;em&gt;might&lt;/em&gt; be if those variable names are actually protected variable names that have special meaning in your development environment - more on that later. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know about VEX robotics, but I'll caution you that your left and right encoders are based on &lt;code&gt;nMotorEncoder&lt;/code&gt; and, just like how &lt;code&gt;leftEncoder&lt;/code&gt; and &lt;code&gt;rightEncoder&lt;/code&gt; doesn't get updated anywhere in your loop, &lt;strong&gt;&lt;code&gt;nMotorEncoder&lt;/code&gt; doesn't get updated anywhere either.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, that said, try using the following:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void GOforwards()&#xA;{&#xA;    nMotorEncoder[rightMotor]=0;&#xA;    nMotorEncoder[leftMotor]=0;&#xA;    int rightEncoder = abs(nMotorEncoder[rightMotor]); // &amp;lt;----- Define&#xA;    int leftEncoder = abs(nMotorEncoder[leftMotor]);   // &amp;lt;----- Define&#xA;&#xA;    wait1Msec(2000);&#xA;    motor[rightMotor] = 60;&#xA;    motor[leftMotor] = 60;&#xA;&#xA;    while (rightEncoder &amp;lt; 2000)&#xA;    {&#xA;        rightEncoder = abs(nMotorEncoder[rightMotor]); // &amp;lt;----- Update&#xA;        leftEncoder = abs(nMotorEncoder[leftMotor]);   // &amp;lt;----- Update&#xA;&#xA;        if (rightEncoder &amp;gt; leftEncoder)&#xA;        {&#xA;            motor[rightMotor] = 50;&#xA;            motor[leftMotor] = 60;&#xA;        }&#xA;        if (rightEncoder &amp;lt; leftEncoder)&#xA;        {           &#xA;            motor[rightMotor] = 60;&#xA;            motor[leftMotor] = 50;&#xA;        }&#xA;        if (rightEncoder == leftEncoder)&#xA;        {&#xA;            motor[rightMotor] = 60;&#xA;            motor[leftMotor] = 60;&#xA;        }&#xA;    }&#xA;    motor[rightMotor] = 0;&#xA;    motor[leftMotor] = 0;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;By adding the two lines inside the while loop, now you are checking and updating the encoder counts every time you step into a new loop. This is one of the tricky things with debugging - you have to be looking at the correct variables! In your video, you are looking at &lt;code&gt;leftMotor&lt;/code&gt; and &lt;code&gt;rightMotor&lt;/code&gt;, and what appears to be fields for those motors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You were NOT looking at the actual variables that control which case gets selected! Those variables are &lt;code&gt;leftEncoder&lt;/code&gt; and &lt;code&gt;rightEncoder&lt;/code&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And again, final warning - it looks like you're counting on things like &lt;code&gt;motor&lt;/code&gt; and &lt;code&gt;nMotorEncoder&lt;/code&gt; to be function names or keywords that do something, because otherwise it just looks like you enter an infinite loop that never actually writes any values to the motors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would have expected something more along the lines of a speed assignment &lt;em&gt;followed by writing that speed to a function&lt;/em&gt;, but that second step never happens. For example, I would have thought you'd do something like the following:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;motor[leftMotor] = 60;&#xA;motor[rightMotor] = 60;&#xA;WriteMotorSpeed(motor);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But that last function, &lt;code&gt;WriteMotorSpeed()&lt;/code&gt; never happens. Similarly, there is no &lt;em&gt;function&lt;/em&gt; that returns an updated encoder count. Here too it looks like you're expecting the &lt;code&gt;nMotorEncoder&lt;/code&gt; variable name to auto-magically update, where I would have expected you to need to call a function that &lt;em&gt;returns&lt;/em&gt; an updated value, like the following:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;nMotorEncoder = GetEncoderCounts([leftMotor,rightMotor]);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;or something similar. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I could absolutely be wrong; it looks like you're using ROBOTC, and also it's VEX robotics, so there could 100% be a set of pre-defined keywords or key variable names that hold special meaning in that development environment, but again I'm just pointing out what I see versus what I would expect to see. I would &lt;em&gt;highly suggest&lt;/em&gt; you check the documentation to see if those values automatically update or if there is, in fact, a function you should be calling to read/write encoder counts and motor speeds. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-04-26T13:29:00.293" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12212" PostTypeId="1" CreationDate="2017-04-26T15:35:36.637" Score="1" ViewCount="377" Body="&lt;p&gt;I have been reading this paper (&lt;a href=&quot;https://arxiv.org/pdf/1509.06113.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://arxiv.org/pdf/1509.06113.pdf&lt;/a&gt;), which is about control of a robotic arm. They learn a mapping from robot state to robot control, where the state is the positions and velocities of the arm's joints, and the control is the joint torques.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One passage I am struggling to understand is:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Since we use torque control, the robot and its environment form a second-order dynamical system, and we must include both the joint positions and their velocities.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(I've edited this slightly for readability, but effectively it is the same).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please can somebody explain what this means? What is a second-order dynamical system? And why does this mean that velocities are required as part of the state?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="8880" LastActivityDate="2017-04-27T21:21:32.843" Title="Second-order dynamical systems" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;dynamics&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12213" PostTypeId="1" CreationDate="2017-04-26T17:15:21.473" Score="0" ViewCount="1689" Body="&lt;p&gt;Lately I've been thinking about 6 axis robots and noticed that all examples that I've seen on the internet use the same configuration of axes:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/xg4Dw.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xg4Dw.jpg&quot; alt=&quot;typical 6 axis robot&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Vertical axis waist (1), horizontal axis shoulder (2) and then the axes are perpendicular (3), parallel (4), perpendicular (5) and parallel (6) with the previous link. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This means at least three different types of joints, one for waist (1), one perpendicular (2, 3 and 5) and one parallel (4 and 6). &#xA;I was wondering if comparable range of motion can be achieved by having only one type of joint in addition to waist.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I thought that having only axes perpendicular to previous segments (like 2 and 3 in the picture), but instead of consecutive pairs of axes being parallel to each other, have them twisted by some fixed angle (45 degrees?) relative to each other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would an idea like this work? Would it have any significant disadvantages? Is there some general method to visualise what positions can be reached with a given configuration of axes?&lt;/p&gt;&#xA;" OwnerUserId="482" LastActivityDate="2017-04-27T07:50:47.783" Title="6 axis robot arm with non-perpendicular axes?" Tags="&lt;robotic-arm&gt;&lt;geometry&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12217" PostTypeId="2" ParentId="12208" CreationDate="2017-04-26T22:20:39.533" Score="0" Body="&lt;p&gt;As Chuck told. But maybe you are asking for more visual example - imagine, that you are creating robot with a microprocessor and some motors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You know, that the microprocessor needs a constatn voltage to work correctly (usually 5V, or 3.3V - depending on the exact type). On the other hand the motors would need no power, when your robot is standing still, but would need a lot of power for the robot to drive fast to the hill. So you need source, which provides those 5V regardless of what current is taken from it, be it some mA when the robot is still and the processor just waits for your commands, or couple of Amperes, when you command it to run fast to hill. Such source is called Voltage source, as it keeps the same voltage, regardless how much current you take from it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand the LED needs specific current to shine as much as it can, but not be destroyed. And different LEDs of the same kind little differs in characteristics, while different kinds of LEDs differs wildly (some works best around 2.5V, others at 0.6V). So if you are building source for illuminating something with LEDs, you want it supply only so much current, that LEDs can manage safely (usually around 20mA) regardless of Voltage which it tooks. Especially, if you want to connect those LEDs in series. And if you want to connect different number of them each time. You still want just 20mA current per branch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Such source would provide just the right current, regardless of which voltage it needs to force that current thru and so it is called Current source.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you change them, than it will result in dissaster - when your robot would stop, only microprocessor would consume energy and Current source would try increase the Voltage high enougth to ensure the same Amperes are forced inside, as they was when the motors drive the robot to the hill. The only way to have the current the same is to increase Voltage really high (like thousand volts) and it would destroy the microprocessor instantly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, if you connect long line of LEDs to Voltage source, which would provide voltage exactly as high as needed to force 20mA thru and then changed your mind and attached just half of those LEDs, then the Voltage source would keep the same Voltage and the current would not be 20mA as needed, even not 40mA which would destroy those LEDs, but as each LED just substract constant voltage, then there would be effectively such current, that the remaining voltage would be distributed over wires (and source internal resistence), which means a lot of Amperes and your LEDs would literally burn instantly in flame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you need the right kind of source for the right kind of work. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Voltage source keeps Voltage the same even if it means to provide different current into the circuit, (if the circuit resistance would change) and have easiest time when nosting is connected, as it have no need to provide any curreent at all&lt;/li&gt;&#xA;&lt;li&gt;Current source keeps Current the same, even if it means to provide different voltage. And will be more happy with just wire between connectors, as it means nearly no voltage to provide for reaching demanded current.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;(Of course real sources cannot go to extreme values, so if you take more and more power, than you reach the limit, where they can regulate and they else shut down, or burn or provide less, then they should.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And with the right circuit you can (to some level) change one type of source to another.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example if you connect resistor in serie with your load on Voltage source, then the resistor would limit how much current can go to the load (if the load is shortcuted, then all voltage is on the resistor and so the current is not higher, then I=U/R - it is used for LEDs in many schemas - there is resistor near them limiting the maximal current, even when it means the LED is not at its total optimum).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand if you take Current source and shortcut it with low resistor, then the maximal voltage there would be U=IR and if you connect in paralel any load (usually with a lot higher resistence than R), than the current is divided into both branches, but mainly goes thru the small shortcut R and the voltage over the load is limited to the U maximial, but less if the load takes more current thru it. It is used for Amper Metters, where you let go the main current thru piece of wire and measure the voltage over the piece of wire with voltmeter (with usually really high resistence) so you can count the current with the formula U=IR (we know the R and measuerd the U), so I = U/R (where the U is voltage lost over the shortcut wire and R is resistence of the wire)&lt;/p&gt;&#xA;" OwnerUserId="16496" LastActivityDate="2017-04-26T22:20:39.533" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12218" PostTypeId="2" ParentId="12212" CreationDate="2017-04-26T22:44:55.057" Score="0" Body="&lt;p&gt;Some systems are just linear (input and output are bound with something like O=a+bI) and it is simple to regulate, some systems are more like quadratic (O=a+bI+cI^2) and there is problem, that when you reach some point, they may start to repond reversly. Some systems are even more complicated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have just linear system, it is easy to regulate it, as you need to know only &quot;how far&quot; are you from wanted point and you can simply calculete &quot;how much&quot; you need to add to reach it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On higher order systems you need also know &quot;where are you&quot;, as the response would not be linear and you need more knowledge to reach your destination.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have system, where you can controll only torque (so the force you are using) and want to reach some target point, then you need to know not only how far are you, but also how fast you are moving.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Imagine you are liting a weight to the table. If you are moving too fast, you need to brake (otherwise you overshoot), if you are moving too slow, you need to accelerate (otherwise it would stop before reaching target). If you are moving just right, you need not apply any force. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you know your position, but not your velocity, you cannot decide, whether apply positive force, negative force or no force at all. To know, whether (or when) to push and when to brake (and how much) you need to know your velocity too, not only position.&lt;/p&gt;&#xA;" OwnerUserId="16496" LastActivityDate="2017-04-26T22:44:55.057" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="12221" PostTypeId="2" ParentId="12212" CreationDate="2017-04-27T01:27:25.400" Score="0" Body="&lt;p&gt;The angular acceleration of a joint of the robot should be (when neglecting friction, external forces and finite structural stiffness for now) roughly proportional to the torque applied. Since angular acceleration is the time derivate of angular velocity, which is the time derivate of the joint angle, therefore a robot arm is second order system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another way of formulating the definition of the order of a system is how often you need to differentiate the outputs (in this case the joints angles) until you see the input signal back.&lt;/p&gt;&#xA;" OwnerUserId="1487" LastActivityDate="2017-04-27T01:27:25.400" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12222" PostTypeId="1" CreationDate="2017-04-27T04:36:49.643" Score="1" ViewCount="348" Body="&lt;p&gt;I am using Hitec Servo Motor in my 6 Dof Robotic Arm. I am going to run an open loop response and compare it with simulation which using a transfer function in MATLAB. But I could not find any parameters that I need in a transfer function. For example, moment of inertia, damping, electric resistance, electric inductance, and back-emf constant. What I had found on the data sheet are operating speed, output torque,idle current,running current and dead bandwidth. How to relate all these to get the parameters that I need to develop my transfer function ?&lt;/p&gt;&#xA;" OwnerUserId="16787" LastActivityDate="2017-04-28T08:50:23.087" Title="Transfer Function for Hitec Servo Motor" Tags="&lt;robotic-arm&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12223" PostTypeId="2" ParentId="2251" CreationDate="2017-04-27T05:44:08.713" Score="-1" Body="&lt;p&gt;Page 151 should help,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://users.aalto.fi/~ssarkka/pub/cup_book_online_20131111.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://users.aalto.fi/~ssarkka/pub/cup_book_online_20131111.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where u is a sample (particle without weight)&lt;/p&gt;&#xA;" OwnerUserId="16788" LastActivityDate="2017-04-27T05:44:08.713" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12224" PostTypeId="2" ParentId="12213" CreationDate="2017-04-27T07:50:47.783" Score="1" Body="&lt;p&gt;The sketch seems to represent a Kuka KR60-HA, doesn't it?&#xA;First of all, one might ask oneself, why, for instance, the rotation axis of joints 4 and 6 is the same. My ad-hoc answer would be that Kuka KR60-HA is praised for its high accuracy and &quot;&lt;em&gt;highest performance in terms of cycle time&lt;/em&gt;&quot;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;These characteristics almost answer the second part of your question, namely, if the the work space can be reached with a different configuration of joints. Suppose, it does, but if you get back to the first part of my answer, you'll see that kinematics (accuracy, reachability space) only is not enough for production environment, you'll have to invest in dynamics -- &lt;em&gt;performance in terms of cycle time&lt;/em&gt;, which can make &quot;&lt;em&gt;consecutive pairs of axes being parallel to each other&lt;/em&gt;&quot; necessary.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you like fancy reachability maps, try out these examples&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://openrave.org/docs/latest_stable/openravepy/databases.kinematicreachability/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://openrave.org/docs/latest_stable/openravepy/databases.kinematicreachability/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://openrave.org/docs/latest_stable/openravepy/examples.tutorial_inversereachability/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://openrave.org/docs/latest_stable/openravepy/examples.tutorial_inversereachability/&lt;/a&gt; &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;of OpenRAVE.&lt;/p&gt;&#xA;" OwnerUserId="15695" LastActivityDate="2017-04-27T07:50:47.783" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12225" PostTypeId="2" ParentId="11946" CreationDate="2017-04-27T08:35:52.763" Score="3" Body="&lt;p&gt;Many reainforcement learning methods require descrete actions. As you indentified, increasing and decreasing the values is one option. If it is an adaptive PID, then it might take some time to incerase the parameters if you only have an increase by the factor of 0.1. I would recommend more then one increasing factor as possible action. Increase by 0.1, 1, 10, 20, 50, 100 etc. Also, increasing with a certain amount might also help you. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is however a different option. The Deep Deterministic Policy Gradient approach can deal with continous states, so using this method, there is no need for discretization. You can find more information &lt;a href=&quot;https://arxiv.org/pdf/1509.02971.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;http://www.ausy.tu-darmstadt.de/uploads/Site/EditPublication/Ramstedt_BscThesis_2016.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2017-04-27T09:33:06.557" LastActivityDate="2017-04-27T09:33:06.557" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12226" PostTypeId="1" CreationDate="2017-04-27T10:28:28.200" Score="0" ViewCount="90" Body="&lt;p&gt;Is there a formula to compute the field of view of a robot when it is obstructed by other objects like in this &lt;a href=&quot;https://www.researchgate.net/publication/221065724/figure/fig1/AS:305453201412101@1449837126943/Fig-1-a-Robot-with-a-limited-field-of-view-in-an-unknown-environment-with-fixed-and.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;picture&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When it is a full circle it should be  &lt;code&gt;FoV = (x-c1)² + (y-c2)² &amp;lt; r²&lt;/code&gt; Where &lt;code&gt;(c1,c2)&lt;/code&gt; are the coordinates of the robot and &lt;code&gt;r&lt;/code&gt; is the range of the sensor.    &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you!&lt;/p&gt;&#xA;" OwnerUserId="484" LastActivityDate="2020-05-19T07:05:01.213" Title="How to compute the field of view of a robot when obstacles are around?" Tags="&lt;mobile-robot&gt;&lt;sensors&gt;&lt;kinect&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12227" PostTypeId="2" ParentId="12226" CreationDate="2017-04-27T12:52:48.253" Score="1" Body="&lt;p&gt;Yes, you &quot;simply&quot; geometrically substract those objects and everything behind them from your FoV. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But it make not much sense to create such formula, as its precise formulation would be dependent on position of the robot (and you pictured it with wheels, so it will be probably moving) and on position of all those obstacles (which in real world you would not know, as anything can change anytime (for example another robot came to range and its shape will be highly irregular, somebody came and move chair or anything else)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It would probably help much more, if you say, for which use you want to know such formula - if you know, where some objects are and want place robot to specified place, or if you want your robot to sense objects around with sensors and then decide, how to avoid them (or hit them, or create map, or so)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ususally you do not need formula for sensor range, as you can just use your sensors, look around and see, how far you can see. And maybe save it in some array as vectors with direction and distance free in that direction and then either use it directly to find free way, or indirectly to calculate some parts of borders of obstacles around you, then move a little, do it again and get better idea, what kind of obstacles are there (eg. if the blue walls are cubes, or just plates, or long prism pointing away your initial position.)&lt;/p&gt;&#xA;" OwnerUserId="16496" LastActivityDate="2017-04-27T12:52:48.253" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12228" PostTypeId="2" ParentId="12212" CreationDate="2017-04-27T14:11:27.517" Score="2" Body="&lt;h2&gt;Dynamical system&lt;/h2&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What is a second-order dynamical system?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Let's firstly clear up some confusion about the term dynamical system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The term in your document refers to the &lt;strong&gt;mathematical definition&lt;/strong&gt;, where a function describes the time dependency of a point (or multiple points) in space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A first-order dynamical system involves one derivative. It can be described by one characteristic. An example of such a system is the current-voltage relation of a capacitor in electronics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A second-order dynamical system involves two derivatives. It can be described by two characteristics. An example is a mass-spring-damper system, which is a mechanical system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;In mechanics&lt;/strong&gt;, we refer to dynamic (not dynamical) systems more specifically when we describe time-dependent movement of mass in space. According to Newton's law, we can &lt;em&gt;instantaneously&lt;/em&gt; apply finite acceleration by applying finite force. We are eventually interested in position, which is two derivatives apart from acceleration. Every mechanical dynamic system is thus &lt;em&gt;at least&lt;/em&gt; a second-order dynamical system. In fact, a mechanical system with $n$ degrees of freedom is a $2n$th-order dymamical system: the state of every degree of freedom can be described by a position and velocity, as both variables &lt;em&gt;cannot be changed instantaneously&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is possible to express a $2n$th-order dymamical system as a set of $n$ second-order dynamical systems or a set of $2n$ first-order dynamical systems, but it is incorrect to say that a (mechanical) dynamic system with multiple degrees of freedom is a second-order dynamical system. The &quot;robot and environment&quot; in your example however can be correct if they refer only to the robot-environment interface,  described by a single position and velocity variable.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Control&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;For purposes of control, it is thus useful to have both position and velocity as feedback because neither of them can be changed instantaneously: they essentially define the (instantaneous) state of the dynamic system, i.e. they are used as &lt;em&gt;state variables&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt; - If you're the driver of a car and $100~\mathrm{m}$ from your target, then what are you (the controller) going to do: accelerate or decelerate? This question is difficult to answer unless you know your current velocity. If your velocity is zero, then obviously you want to accelerate or you're not getting anywhere. If your velocity is $200~\mathrm{km/h}$, then, well... good luck finding that brake pedal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All nice and dandy, but you might have found in literature that some mechanical systems are controlled by using only position variables. This is reasonable if you can assume that velocity can be changed instantaneously, which is a valid assumption if systems are to be operating excruciatingly slow, where maximum velocity is simply capped or if the system suffers from enormous amounts of viscous friction (where force is essentially proportional to velocity instead of acceleration).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt; - If you're the driver of a car and $100~\mathrm{m}$ from your target, and if you know that the maximum velocity of the car is $5~\mathrm{km/h}$, then what are you (the controller) going to do: accelerate or decelerate? You will obviously accelerate, if not already driving at the excruciatingly slow $5~\mathrm{km/h}$...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Trivia: In the realm of mechanics, for systems that are modelled to not or partially include velocity related terms, the term &lt;em&gt;pseudo-dynamic system&lt;/em&gt; has been coined.&lt;/p&gt;&#xA;" OwnerUserId="10547" LastEditorUserId="10547" LastEditDate="2017-04-27T21:21:32.843" LastActivityDate="2017-04-27T21:21:32.843" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12232" PostTypeId="2" ParentId="12222" CreationDate="2017-04-27T17:33:34.270" Score="1" Body="&lt;p&gt;$Resistance = \frac{operating voltage}{stall current}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$BackEMF = (Voperating-(Resistance*FreeRunningCurrent))/RPM$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As to the rest they are a lot harder to get without a datasheet or a test rig.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would also look at putting an impulse or step function into the motor and measuring the response if you want an accurate transfer function. You should look up system identification because that's what you are trying to do.&lt;/p&gt;&#xA;" OwnerDisplayName="user16549" LastActivityDate="2017-04-27T17:33:34.270" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12233" PostTypeId="1" AcceptedAnswerId="12235" CreationDate="2017-04-27T18:17:41.843" Score="3" ViewCount="70" Body="&lt;p&gt;Searching for electronic gyros doesn't turn up what I am after. Rather than an instrument to measure rotation, what I want is a device that I can mount in a flying machine, where I can apply a certain moment in order to have the flying machine react with the opposite moment in order to control attitude.  A classic physical gyroscope behaves like this, but I am unsure if there are any available with electronic controls. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Is there a name for such devices&lt;/strong&gt;, that I can Google for?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To clarify, this isn't asking for a product recommendation, just want to know if such a thing exists and what it would be called.&lt;/p&gt;&#xA;" OwnerUserId="1075" LastEditorUserId="1075" LastEditDate="2017-04-27T18:27:44.577" LastActivityDate="2017-04-27T19:29:48.010" Title="Is there a commercially available inertial gyro with electronic control?" Tags="&lt;control&gt;&lt;gyroscope&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12235" PostTypeId="2" ParentId="12233" CreationDate="2017-04-27T19:29:48.010" Score="4" Body="&lt;p&gt;The device you describe is known as a Control Moment Gyroscope (CMG).  These devices are mostly used for attitude control in &lt;em&gt;spacecraft&lt;/em&gt;, but are also commercially available. &lt;/p&gt;&#xA;" OwnerUserId="10547" LastActivityDate="2017-04-27T19:29:48.010" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12237" PostTypeId="1" CreationDate="2017-04-28T03:24:06.647" Score="0" ViewCount="57" Body="&lt;p&gt;I have known for a while now that robotics is something I am very passionate about. Im beginning my studies now in university and am trying to decide between the best major to prepare me for advanced robotics work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm currently in between Math/CS ECE/CS and Stats/CS&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that Mech E is not for me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Thoughts on the matter? What is the best for general development? Research/ theoretical? Applied robotics?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Specifically I would love to hear how each major may be more useful to each aspect of robotics development.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;I understand this post lacks a specific problem, but I figured I may ask any way given the collective knowledge of this community - if there is a more appropriate place to post this please let me know!&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="15605" LastActivityDate="2017-04-28T09:23:08.103" Title="Area of Study for Advanced Robotics Work" Tags="&lt;arduino&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ClosedDate="2017-04-28T12:08:20.483" ContentLicense="CC BY-SA 3.0" />
  <row Id="12240" PostTypeId="2" ParentId="12222" CreationDate="2017-04-28T08:50:23.087" Score="-1" Body="&lt;p&gt;I do not think you can test the open loop responce of a Hitec servo if you do not modify the hardware. It is a closed loop system which has a position control loop, reacting the commands sent in the from of impulses (it might depend on the exact model). The motor values are only one of your problems, the gears of the servo has a high translation ratio and high friction. Probably that influences the dynamics of the system heavily. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since it is a servo motor, with integrated controller and not a system for which you have to tune the controller, I would recommend modelling it as rotational joint (if you are usgin SimMechanics) with motion input. Make sure that you limit the max velocity and acceleration. &lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2017-04-28T08:50:23.087" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12241" PostTypeId="2" ParentId="12237" CreationDate="2017-04-28T09:23:08.103" Score="1" Body="&lt;p&gt;It depends on the kind of robotics you want to get into. Robotics is, as you know, tremendously multidisciplinary.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Math will be beneficial in having PDE and linear algebra knowledge. There is basically no getting away from these. Discrete math, game theory, and graph theory will also be really valuable to robotics, especially if you like the more theoretical/design aspects of robotic systems. You'll get those in CS. Vector calculus is great for drivetrains, supporting mechanical systems and manipulators, etc. All the math will also help with advanced physics problems in the sensor data realm. You should go out of your way to learn Jacobians. A shocking number of math majors I've met get out of school not knowing them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ECE would provide you some good embedded systems knowledge (seek it out wherever you can). Learning DSP, FPGAs, CPLDs, control systems, etc. is highly valuable. Understanding low-level code, being prepared to understand and extend microcontroller code, and knowing a hardware description language will be beneficial. Understanding wireless communications and knowing a little something about electrodynamics, waves, optics will help a ton. Ultimately, this is useful for sensor systems, control systems, and robot software as a whole.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Stats is necessary even if you don't take it as a major. You should be familiar with Bayesian methods, be thinking about the distribution of the data you're dealing with, know how to measure covariance properly, be comfortable with the associated matrix algebra, etc. This all comes in handy for state estimation, which is a huge piece of almost every robotic system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CS is largely going to be valuable for abstract thinking. And knowing C++. In addition to all of the basics being really valuable, if you take the time to learn machine learning or computer vision, you'll be ahead of the game. And always be thinking about algorithms. In particular (you'll get it in your ECE as well, possibly as an elective), you should take some time to study RTOS. Being able to write deterministic algorithms is the difference between life and death in some robots. Not every robot needs to be real-time safe, but if you have that skill, it opens up a whole range of really need opportunities.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You probably already knew most of this. Generally, the roboticist needs to know a little about everything. Don't shy away from mechanical- even if you don't like it, you should spend some time in physics, statics, dynamics, and strengths of materials. Noise and vibes is a lot of math, but I find it really useful for robotics, and it translates right into ECE and embedded systems. It doesn't need to be your major, but you shouldn't draw a blank with terms like &lt;em&gt;Cauchy stress tensor&lt;/em&gt; and &lt;em&gt;moment of inertia.&lt;/em&gt; You're going to be working with a lot of mechanical engineers in robotics, and the knowledge will only help you better integrate systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I watched a team spend three weeks tuning an aerobot's PID, then I stepped in and made some electrical tweaks to reduce reflections, noise, and EMI. Suddenly the robot had much better stability and the team was able to tune the PID much more easily.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I changed the stiffness of a beam and saved another team a great deal of debugging headache.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I swapped a material on a plate and significantly improved the wireless range of another robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I once programmed a robot drivetrain with inspiration from torque vectoring differentials.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a &lt;em&gt;FIRST&lt;/em&gt; Robotics Competition, I studied the fluid dynamics of a frisbee and implemented software to autonomously launch that frisbee with the needed angle, velocity, and angular velocity based on the robot's state vector which came largely from computer vision. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Point being, robotics is all about integration. So building the broadest base of knowledge you can and thinking about problems holistically is key, and thus being ready to apply any field to your work depending on the situation, or at least speaking the language to help others apply their knowledge to the problem, is the hallmark of the roboticist.&lt;/p&gt;&#xA;" OwnerUserId="16566" LastActivityDate="2017-04-28T09:23:08.103" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12245" PostTypeId="1" CreationDate="2017-04-29T14:51:33.257" Score="2" ViewCount="53" Body="&lt;p&gt;Texture is very helpful for stereo matching. However in real environment, untextured areas always exit. Consistent semi-global matching is proposed to deal with untextured regions. I start to read the paper &lt;strong&gt;&lt;em&gt;Stereo Vision in Structured Environments by Consistent Semi-Global Matching&lt;/em&gt;&lt;/strong&gt;. Fixed bandwidth Mean Shift segmentation is used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If some have some experience with Consistent Semi-Global Matching, I hope to learn whether the algorithm is good for untextured regions. How about the complexity of the algorithm? Is there any better way to deal with untextured regions?&lt;/p&gt;&#xA;" OwnerUserId="15460" LastActivityDate="2017-05-03T09:35:35.570" Title="Is there a better way to deal with untextured regions in stereo matching" Tags="&lt;computer-vision&gt;&lt;cameras&gt;&lt;stereo-vision&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12247" PostTypeId="1" CreationDate="2017-04-29T23:35:21.087" Score="5" ViewCount="471" Body="&lt;p&gt;I am currently working on a project for a Lego Mindstorms EV3 autopilot using Matlab/Simulink. Basically, I am using a closed loop control system with a PID controller for the control of the control surfaces. I'm using Simulink to construct the autopilot block diagram. The feedback loop consists of the gyro sensor. Now the gyro sensor is not accurate in the sense that it has some offset. It does not have any bias or noise. I need to get rid of the offset to give me the actual angle of the device. How could I solve this problem? I could use a low pass filter but how do I know what transfer function to use in Simulink?&lt;/p&gt;&#xA;" OwnerUserId="16814" LastEditorUserId="37" LastEditDate="2017-05-01T10:21:02.870" LastActivityDate="2021-04-12T08:03:55.450" Title="Lego Mindstorms EV3 gyro sensor offset fix" Tags="&lt;matlab&gt;&lt;gyroscope&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12248" PostTypeId="2" ParentId="12247" CreationDate="2017-04-30T10:25:43.843" Score="0" Body="&lt;p&gt;Not sure about matlab/simulink, but siply substracting the offset is not possible? I would solve it in code, just &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;...&#xA;dx=readDx();&#xA;dx=dx-offsetdx;&#xA;...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="16496" LastActivityDate="2017-04-30T10:25:43.843" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="12249" PostTypeId="1" AcceptedAnswerId="12250" CreationDate="2017-04-30T23:40:03.487" Score="1" ViewCount="389" Body="&lt;p&gt;How does one go about testing the robot once it is built? How does one predict the number of hours it can operate? I see most of the industrial robots for instance robotic arms have warranty of 12-18 months, how did they arrive at such an estimate, clearly testing for 12-18 months is not on option, so what is the procedure for determining the lifespan? &lt;/p&gt;&#xA;" OwnerUserId="15956" LastActivityDate="2017-08-04T23:12:28.080" Title="Testing and Lifespan of Industrial Robots?" Tags="&lt;robotic-arm&gt;&lt;industrial-robot&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12250" PostTypeId="2" ParentId="12249" CreationDate="2017-05-01T07:47:27.517" Score="1" Body="&lt;p&gt;Testing of each individual robot produced (or any other product) is manufacturer and product specific. The tests will be small and quick, looking for unexpected problems in the manufacturing process.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Manufactures will test a few robots (that they don't sell) extensively so that they can make predictions about how the robot will perform over time, find unanticipated problems, learn how to improve future models, and how to manage customer expectations. Designs can be, and are, tested for years. The manufacturer will rely on good manufacturing practices and random sampling to insure that the actual device you receive has a performance similar to the tested devices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Design engineers use lifespan calculations when designing. For many of the components like bearings, transmissions, and flexible wiring, the manufacturers provide data and calculations to estimate life based on the operating conditions. This data and calculations are derived from testing the manufacturer does on their own products.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2017-05-01T07:47:27.517" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12251" PostTypeId="1" AcceptedAnswerId="12289" CreationDate="2017-05-01T09:38:35.980" Score="-1" ViewCount="57" Body="&lt;p&gt;I foud tons of answer how glue with syringe, but I need to glue syriges together to be airtight and glue some silicon tube there too  and cannot find a hint how to do it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anybody know what glue does stick with syringe (eventually dissolve it a little)?&lt;/p&gt;&#xA;" OwnerUserId="16496" LastEditorUserId="16496" LastEditDate="2017-05-05T07:07:21.080" LastActivityDate="2017-05-05T07:07:21.080" Title="(solved) How to glue syringe?" Tags="&lt;robotic-arm&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12252" PostTypeId="2" ParentId="7634" CreationDate="2017-05-01T13:06:16.303" Score="0" Body="&lt;p&gt;I find that the off brand Arduino boards work as well as the original. A lot of the off brand ones have the same schematic but are made super cheap in china. For your application you probably will not have any problems with an off brand arduino and it will save you a few dollars.&lt;/p&gt;&#xA;" OwnerDisplayName="user16549" LastActivityDate="2017-05-01T13:06:16.303" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12253" PostTypeId="2" ParentId="4625" CreationDate="2017-05-01T15:27:35.967" Score="1" Body="&lt;p&gt;Just gonna add one here as I researched this topic thoroughly.&#xA;The best one I found so far is the fully functioning AERobot: 20$ without shipping and programmable:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.seeedstudio.com/AERobot-p-2531.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.seeedstudio.com/AERobot-p-2531.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="16822" LastActivityDate="2017-05-01T15:27:35.967" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12257" PostTypeId="1" CreationDate="2017-05-01T21:40:46.783" Score="1" ViewCount="39" Body="&lt;p&gt;I am considering writing a program to communicate with a Thermo Scientific F3 robot arm in order to eliminate their obsolete C500C controller.  Does anyone know the communications protocol to/from the F3?  All I know is that it is RS485.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="16569" LastActivityDate="2017-05-01T21:40:46.783" Title="F3 robot communications protocol?" Tags="&lt;robotic-arm&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12259" PostTypeId="1" CreationDate="2017-05-02T03:19:41.587" Score="3" ViewCount="763" Body="&lt;p&gt;I would like to build a simple mobile robot with differential wheels, and I am currently design the wheel speed controller. After reading some papers, I noticed that to realize a straight line moving, the linear speed and angular speed of the mobile robot have to be controlled at the same time, which makes the system a Multi-input-multi-output (MIMO) system. I plotted two different controller structures I came across while reading materials. Both of them have angular speed feedback and control, but one with linear speed feedback and control, the other without. In the picture, Gl(s) and Gr(s) refer to the motor transfer function, and &lt;em&gt;vl&lt;/em&gt; and &lt;em&gt;vr&lt;/em&gt; are the measured wheel speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would anyone please suggest which controller structure is more reasonable and can realize better straight line moving?&#xA;&lt;a href=&quot;https://i.stack.imgur.com/u0Imr.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/u0Imr.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Updates&lt;/strong&gt;&#xA;v* and w* are linear speed reference and angular speed reference respectively that could either be fixed values or come from trajectory generation; corrected a typo in the motor block in structure 2, as @Chuck pointed out, and changed G1(s) and G2(s) to Gl(s) and Gr(s) for better illustration. &lt;/p&gt;&#xA;" OwnerUserId="16828" LastEditorUserId="16828" LastEditDate="2017-05-03T05:11:36.497" LastActivityDate="2018-08-28T17:11:42.890" Title="Mobile robot speed synchronization for straight line moving" Tags="&lt;mobile-robot&gt;&lt;motor&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="12260" PostTypeId="1" CreationDate="2017-05-02T07:01:48.263" Score="7" ViewCount="4965" Body="&lt;p&gt;I have been looking around in the forums, but could not find any answer for how to go about getting the wheel odometry covariance matrix for a custom built planar robot (I found some posts related to EKF, but could not find any clear solution). I need this in order to for e.g. fuse wheel odometry with other types of odometry, etc... I really would only need the covariance for the global planar velocities (which are directly related to the encoders/inputs), and determining the position or acceleration covariances seem to be able to be derived from there. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I will try posting the answers to this as I find them, and perhaps this could also help future roboticists (hobbysts!?) that want to build a new mobile robot but may be confused about this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's say I have a custom planar robot with N number of motors/wheels/encoders, and a defined kinematic model.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That is, I have a mapping:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;(Vx, Vy, AngVel) -&gt; ( W1, W2, ..., Wn)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;where W's are each motor's angular velocities. I am not sure if the inverse mapping always exists, but I could assume that it does just for now.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By reading around the forums, I found that first we should calibrate for the systematic errors (e.g., due to unequal wheel diameters, etc..). For differential wheeled robots, this can be done with the UMBMark algorithm. This still does not give any specific information on how to get the covariance matrix tho.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I imagine there are two options, using a static covariance matrix (predetermined by calibration), or dynamically adjusting them (let's say through a Kalman filter).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A static covariance matrix is probably less accurate, but simpler to determine. However, I have no idea how to go about choosing these values (should I make the robot move back and forth several times and use the error as the Vx variance?). Are there any basic guidelines for filling up the covariance matrix statically?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another (more difficult) option seems to be to use a Kalman filter, and update the covariance matrices dynamically. But I am unsure what to choose as the inputs, nor white gaussian noise values for process/observation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Imagine there's some sort of local controller that I just give desired angular velocities and it tries to produce them. Should I go as low level as defining my inputs as the currents, and then go through the motor model? Or should I just choose the inputs to be my commanded angular velocities? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But if my inputs are the desired angular velocities, then the state doesn't seem to depend on the previous state, and doesn't follow the kalman filter convention for the process (i.e. the new state would only depend on the input, as I am controlling the planar velocities directly from the wheels, and it is not affected by the previous state)!?&#xA;At least the sensor model seems to be quite easy to derive from the kinematic model.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can probably see, I am extremely confused for something that most likely has to be determined for most mobile robots out there. I am finding little to no clear documentation, which is weird for such a (very common!?) problem. If anyone could point me in the right direction I'd be extremely happy! &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!!&lt;/p&gt;&#xA;" OwnerUserId="16830" LastActivityDate="2018-08-03T12:01:06.007" Title="Wheel Odometry Covariance Matrix for Custom Robot" Tags="&lt;mobile-robot&gt;&lt;odometry&gt;&lt;calibration&gt;&lt;wheel&gt;&lt;sensor-error&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="12261" PostTypeId="1" CreationDate="2017-05-02T12:00:19.803" Score="0" ViewCount="446" Body="&lt;p&gt;In the camera module assembly process, parameters of camera modules vary due to manufacturing tolerance.&#xA;Camera calibration is performed to obtain actual parameters. &#xA;In the paper &lt;strong&gt;&lt;em&gt;Effects of camera alignment errors on stereoscopic depth estimates&lt;/em&gt;&lt;/strong&gt;, the &#xA;author analyzes relative sensitivity/importance of camera calibration/alignment parameters &#xA;on the performance of stereoscopic depth reconstruction. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For dual camera system, five sources of error are listed&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Binocular error effects:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;depth error due to rotation/roll between two cameras&lt;/li&gt;&#xA;&lt;li&gt;depth error due to pitch between two cameras&lt;/li&gt;&#xA;&lt;li&gt;depth error due to yaw between two cameras&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Monocular error effects:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;depth error due to nonparallel CCD array and lens&lt;/li&gt;&#xA;&lt;li&gt;depth error due to lens distortion.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;In practical applications, camera rectification&#xA;will use these parameters to align two images. &#xA;Why do we need to analyze the effect of various&#xA;errors?&lt;/p&gt;&#xA;" OwnerUserId="15460" LastActivityDate="2017-05-02T12:44:06.000" Title="Effect of camera misalignment errors in dual cameras" Tags="&lt;cameras&gt;&lt;stereo-vision&gt;&lt;calibration&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12262" PostTypeId="2" ParentId="12261" CreationDate="2017-05-02T12:44:06.000" Score="1" Body="&lt;p&gt;Because each have diferent reasons (and so can be helped/worsened in different ways). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And the calibration will help only in specific setup and needs be done differently for different setups.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The easiest way to understand is if you take two cameras, whitch are ideal, just not parallel - then you get the image of the same on different parts of resulting image and it would be worse with distance, so you can set it up perfectly for one distance and aproximate that for all other distances.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand if your cameras are ideal, just their distance is not perfect, you get the same image as in previous case, but this time the solution is to just substract the missalignemnt from the position and the error would became less with distance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But if your cameras are rotated, you need to transform the whole picture of one of them to align the item on both - again different problem and solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The lens distortion can be the same for full image, or can differ in different parts - mainly in corners - so if your object of interest would not be in centre, you have another complicated problem to solve.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if you are to use it at given angle and distance, you calibration can be a lot simpler, then if you want to use it on wide range of distances and angles to measured object.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And if you want to write your own software/dirvers/addons, you need to know all those sources of errors, as you may need to include them (and their respective corrections) in your software. And it is better to measure them yourself with your piece of HW, than to rely on average tolerance given by manufacturer for the whole production line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also the corrections can be done fast (and somewhat inaccurate) with a little space needed, or slow with a lot of sources consumed but giving better precision - even if manufacturer provides some correction method, it is necessarry compromise to somehow fit needs of mayority of perceived customers while not taking too much time and sources.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But you particular application may have different criteria and would like to have at least some results really fast (racing car), or need as precise results as possible (scientific observation), or needs just something with less work needed (hobby project), so it is good to mention, what sources of error are there and how they differs, so you can choose the approach optimal for you.&lt;/p&gt;&#xA;" OwnerUserId="16496" LastActivityDate="2017-05-02T12:44:06.000" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="12263" PostTypeId="1" CreationDate="2017-05-02T13:26:30.123" Score="0" ViewCount="141" Body="&lt;p&gt;I am trying to 3D reconstruct a room that has been freshly constructed but the walls have not yet been either plastered or painted/wallpapered. So far I have tried using mapping techniques(like rtab map) on KinectV2 but they don't work as these techniques rely on features to stitch point clouds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am currently looking at buying either &lt;a href=&quot;https://structure.io/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Structure sensor&lt;/a&gt; or Google's Project Tango on &lt;a href=&quot;http://www3.lenovo.com/us/en/smart-devices/-lenovo-smartphones/phab-series/c/phab-series&quot; rel=&quot;nofollow noreferrer&quot;&gt;Phab2Pro&lt;/a&gt;. Since, these are a little expensive (post shipping and customs) I want to be sure of a few things before I begin experimenting.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Do these sensors use something other than features to register point clouds (the phone's accelerometer, for example)?&lt;/li&gt;&#xA;&lt;li&gt;Is one sensor better at it than the other at this job? If so, why?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;If any one of you could somehow attach a point cloud or an image captured using these sensors, it would be of plenty help. Also, feel free to suggest better alternatives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="16833" LastActivityDate="2020-04-17T16:03:25.363" Title="Accuracy of 3D scanners in featureless environments" Tags="&lt;sensors&gt;&lt;3d-reconstruction&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12264" PostTypeId="2" ParentId="12259" CreationDate="2017-05-02T14:00:08.427" Score="2" Body="&lt;p&gt;There are really &lt;strong&gt;two&lt;/strong&gt; problems here:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;You are trying to derive an appropriate speed command to send to the motors, and&lt;/li&gt;&#xA;&lt;li&gt;You are trying to drive the vehicle in a straight line. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Suppose you get the &quot;perfect&quot; control scheme that sends exactly the correct signals to the motors. The problem then becomes: What if one wheel runs over a piece of paper and just spins for a little bit instead of generating traction? What if one wheel runs over some dust that sticks to the tire and now it's a little bigger than the other wheel?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm assuming here that your wheel odometry is coming off of encoders on the motor, but the same arguments are true if you've got an idle wheel to do odometry measurements. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming some rotation of the motor $\theta$, each wheel should traverse a distance of $r\theta$, where $r$ is the wheel radius. However, if one wheel is slightly larger than the other $(r+\epsilon)$, then one wheel traverses $r\theta$ while the other traverses $(r+\epsilon)\theta$, or $r\theta + \epsilon \theta$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your vehicle will then turn (assuming a differentially steered or two-wheel robot) an angle of $\psi = \epsilon \theta / d$, where $d$ is the wheel base (distance between the two wheels. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can see now that the angle your vehicle turns, $\psi$, is a linear function of how far your wheels turn, $\theta$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have &lt;a href=&quot;https://robotics.stackexchange.com/a/9006/9720&quot;&gt;posted an answer like this before&lt;/a&gt; - The only way you can be sure to drive in a straight line is to &lt;em&gt;measure&lt;/em&gt; where the robot is relative to the straight line. This could be LIDAR, a localization routine (like SLAM), overhead webcam watching the robot, compass/magnetometer, etc. There will &lt;strong&gt;always&lt;/strong&gt; be variations that prevent your vehicle from going exactly straight, so you need to be able measure how you're travelling and be able to adjust accordingly. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;With regards to your original question though, first I'll comment that you're looking to provide only a wheel speed, so if anything it's multi-input &lt;em&gt;single&lt;/em&gt;-output. If you're looking for someone to comment specifically on the block diagrams you've provided, then you need to explain what they mean. Typically the symbols $x$, $v$, and $a$ are used for linear position, speed, acceleration, respectively, and $\theta$, $\omega$, $\alpha$ are used for &lt;em&gt;angular&lt;/em&gt; position, speed, and acceleration. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You use $v$* and $\omega$*, which looks like linear speed and angular speed, so I don't know what your inputs are, or what the star means, or why there aren't any integrator or derivative blocks (how are you getting between position and speed?), or why Structure 1 has G1 and G2 where Structure 2 has G1 and G1, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to drive in a straight line without measuring the orientation of the vehicle, send the same speed signal to both motors. That's probably the best you can do. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-05-02T14:00:08.427" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12265" PostTypeId="1" AcceptedAnswerId="12266" CreationDate="2017-05-02T17:38:14.377" Score="1" ViewCount="250" Body="&lt;p&gt;There are certain tracking devices for cameras on the market these days. &lt;a href=&quot;https://soloshot.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here is one example&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The concept is, you wear a tag or a wristband and the tripod knows to track you while you're out surfing or racing around a track or running back and forth on a soccer field. I always assumed these work via GPS. But there is &lt;a href=&quot;https://photo.stackexchange.com/questions/89118/how-are-spacex-rocket-launches-filmed&quot;&gt;this other very recent question&lt;/a&gt; where it's been implied that tracking technology has been around since the 60s. While military GPS has probably been around that long, it also occurred to me that GPS perhaps doesn't have the high level of accuracy one would need to track precisely.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm curious to know what sort of technology these personal tripods use? How does it track its target?&lt;/p&gt;&#xA;" OwnerUserId="1075" OwnerDisplayName="Octopus" LastActivityDate="2017-05-03T10:14:17.777" Title="How does a personal tracking tripod work?" Tags="&lt;automation&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="12266" PostTypeId="2" ParentId="12265" CreationDate="2017-05-02T18:05:01.880" Score="1" Body="&lt;p&gt;On the page you provided (&lt;a href=&quot;https://soloshot.com/#features-lightbox&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://soloshot.com/#features-lightbox&lt;/a&gt;), the technical characteristics for the &lt;em&gt;tag&lt;/em&gt; indicate (the &lt;em&gt;tag&lt;/em&gt; is what you need to have on you for the camera to follow you):&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;SS Link: 2.4 GHz&lt;/p&gt;&#xA;&lt;p&gt;Wi-Fi: 802.11 b/g/n&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;And as for the Range:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Range (SS Link): 2,000 ft&lt;/p&gt;&#xA;&lt;p&gt;Range (Wi-Fi): 30 ft&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The 2.4 GHz is probably a data link between the &lt;em&gt;tag&lt;/em&gt; and the tripod (Wifi or &lt;a href=&quot;https://en.wikipedia.org/wiki/ZigBee&quot; rel=&quot;nofollow noreferrer&quot;&gt;Zigbee&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;h1&gt;It's GPS !&lt;/h1&gt;&#xA;&lt;p&gt;Extract from &lt;a href=&quot;https://thetechnologyteacher.wordpress.com/2014/05/29/robotic-camera-follow-soloshot-swivl-aime&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://thetechnologyteacher.wordpress.com/2014/05/29/robotic-camera-follow-soloshot-swivl-aime&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;First onto the scene was SoloShot. It was designed for surfers to record their practice runs. As such, it works great outdoor, it’s&#xA;water proof, and it has an incredible range. &lt;strong&gt;The technology it is&#xA;built on is Xigbee&lt;/strong&gt; [typo: probably &lt;a href=&quot;https://en.wikipedia.org/wiki/ZigBee&quot; rel=&quot;nofollow noreferrer&quot;&gt;Zigbee&lt;/a&gt;] &lt;strong&gt;wireless communication and GPS&lt;/strong&gt;. You do not need to&#xA;maintain line-of-sight with the marker armband. Unfortunately, it&#xA;does not work indoors, and can’t do anything close range.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;For a better accuracy, you can use &lt;a href=&quot;https://en.wikipedia.org/wiki/Differential_GPS&quot; rel=&quot;nofollow noreferrer&quot;&gt;differential GPS&lt;/a&gt;. It will yield an accuracy of about 20 cm. Extract from &lt;a href=&quot;https://en.wikipedia.org/wiki/Differential_GPS&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Differential Global Positioning System (DGPS) is an enhancement to&#xA;Global Positioning System that provides improved location accuracy,&#xA;from the 15-meter nominal GPS accuracy to about 10 cm in case of the&#xA;best implementations.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h3&gt;or unlikely Directional antenna&lt;/h3&gt;&#xA;&lt;p&gt;A &lt;a href=&quot;https://en.wikipedia.org/wiki/Directional_antenna&quot; rel=&quot;nofollow noreferrer&quot;&gt;directional antenna&lt;/a&gt; may be used with a small low power emitter in the &lt;em&gt;tag&lt;/em&gt; device. The camera then simply try to keep pointed to the emitter with a more or less basic filter to smooth the tracking.&lt;/p&gt;&#xA;&lt;p&gt;This technology is used to retrieve UAV if something &lt;em&gt;broke&lt;/em&gt; in the UAV navigation system (for example when the USA is flying over a desert or over the see, with no visual helpful information, even if you still have the data-link on).&lt;/p&gt;&#xA;&lt;p&gt;If the accuracy is very good, a big antenna is needed and probably won't fit on the tripod.&lt;/p&gt;&#xA;&lt;h3&gt;or very unlikely WIFI and MIMO&lt;/h3&gt;&#xA;&lt;p&gt;using &lt;a href=&quot;https://en.wikipedia.org/wiki/Wi-Fi_positioning_system&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wifi's MIMO capability&lt;/a&gt;, you could also detect the angle of arrival of the Wifi signal using multiple antennas as receivers... but I doubt that this is a good solution.&lt;/p&gt;&#xA;" OwnerUserId="16835" OwnerDisplayName="Olivier" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2017-05-02T18:53:49.610" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12267" PostTypeId="2" ParentId="12263" CreationDate="2017-05-03T02:13:03.857" Score="1" Body="&lt;p&gt;For Kinect Fusion, and mostly all other point cloud fusion algorithms, ICP is used for aligning the clouds and creating the mesh. In a feature-less scene, ICP does not work, as there is no easy way to calculate local minimum errors to align the clouds so the stitching is almost impossible over a larger space. &#xA;There is additional research work available online for eg (&lt;a href=&quot;https://graphics.stanford.edu/~mdfisher/papers/inertialNavigation.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://graphics.stanford.edu/~mdfisher/papers/inertialNavigation.pdf&lt;/a&gt;) that use accelerometer data to improve the fusion process, but if there are no features to align, the accelerometer data might not be able to help much (&lt;em&gt;From the paper: &quot;We use the rigid transform estimated by inertial navigation to provide a significantly better initial guess for the ICP algorithm&quot;&lt;/em&gt;. &lt;strong&gt;ICP would still require features to align&lt;/strong&gt;). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just for reference, I'm working on Kinect in an environment that limits the point cloud generation to a very small region. Since the point cloud reduces and becomes sparse, i'm facing the same issue of ICP alignment, as the number of features are reduced. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;An easier solution for your case would be to temporarily hang a few pictures or wall hanging accessories, as well as place a few plants or objects etc on the ground to create some features that help ICP align the clouds. &lt;/p&gt;&#xA;" OwnerUserId="14999" LastActivityDate="2017-05-03T02:13:03.857" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12268" PostTypeId="1" AcceptedAnswerId="12317" CreationDate="2017-05-03T07:29:54.567" Score="0" ViewCount="313" Body="&lt;p&gt;I follow the tutorials  &lt;a href=&quot;http://sdk.rethinkrobotics.com/wiki/MoveIt_Tutorial&quot; rel=&quot;nofollow noreferrer&quot;&gt;Rethink Robotics MoveIt tutorial&lt;/a&gt; to install my baxter with MoveIt. When I run&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ ./baxter.sh&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It shows:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;EXITING - Please edit this file, modifying the 'baxter_hostname' variable to reflect Baxter's current hostname.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I don't have a real baxter robot,how can I simulate it with MoveIt ?&lt;/p&gt;&#xA;" OwnerUserId="16842" LastEditorUserId="2289" LastEditDate="2017-05-03T09:01:40.827" LastActivityDate="2017-05-07T21:07:57.843" Title="How can I simulate baxter in MoveIt without a real baxter?" Tags="&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12269" PostTypeId="2" ParentId="12245" CreationDate="2017-05-03T09:35:35.570" Score="1" Body="&lt;p&gt;I don't know about stereo matching but there are some &quot;direct&quot; monocular odometry/SLAM libraries that do not use common image features but rather whole image edges and gradients and are said to need very little texture. Monocular odometry basically also performs triangulation like stereo vision. See my post &lt;a href=&quot;https://robotics.stackexchange.com/questions/10728/how-do-monocular-visual-odometry-algorithms-work&quot;&gt;here&lt;/a&gt;: I mean especially LSD-SLAM and DSO. There may also be a library that uses &quot;direct&quot; approach for stereo vision (I dont know any myself though).&lt;/p&gt;&#xA;" OwnerUserId="1021" LastActivityDate="2017-05-03T09:35:35.570" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12270" PostTypeId="2" ParentId="12265" CreationDate="2017-05-03T10:14:17.777" Score="2" Body="&lt;p&gt;&lt;strong&gt;Soloshot 2&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the beginning of a session the tag must be collocated with the pan-tilt unit (held over the camera). There is only a GPS receiver in the tag and none on the pan-tilt unit. The system measures the camera position, the starting angle, and is able to calculate the pointing angle from the updated GPS measurements of the tag.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;GPS accuracy &lt;a href=&quot;https://en.wikipedia.org/wiki/Error_analysis_for_the_Global_Positioning_System&quot; rel=&quot;nofollow noreferrer&quot;&gt;varies depending on a number of factors&lt;/a&gt; between roughly 5-15m. If one only considers absolute measurements, this is almost, but not quite, good enough for tracking when the camera is zoomed in enough for a human subject. However we are not using absolute measurements, but instead using the relative position to calculate the pan-tilt units angle. In this case, some of the factors that cause errors in the absolute measurement cause less error in the differential measurement (Ionospheric effects for instance). So while the absolute accuracy is insufficient, the differential accuracy is good enough.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Soloshot 3&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the soloshot 3, based on the FAQ, it appears the technology is improved and 2 GPS receivers are used, one in the tag and one in the pan-tilt unit. You no longer have to collocate the tag and the pan-tilt unit on startup. And you can reposition the base if you want. With 2 receivers they would be able to further improve the accuracy of the differential measurement by eliminating drift caused by changes in the error (changes in the ionosphere) over time.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2017-05-03T10:14:17.777" CommentCount="0" CommunityOwnedDate="2017-05-03T10:14:17.777" ContentLicense="CC BY-SA 3.0" />
  <row Id="12271" PostTypeId="2" ParentId="7634" CreationDate="2017-05-03T12:16:48.683" Score="0" Body="&lt;p&gt;If the price is cheap enough I'd recommend always buying an extra. Similarly for the GPS/GPRS modems. So for whatever reason one stops working you can always fall back to the spare. You don't &lt;strong&gt;have to&lt;/strong&gt; get an original arduino, you can get a compatible one (clone/w.e) but it would be great if you can ask the vendor if there is any warranty and driver support for the same.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also you need to take care of the polarity when you power up anything. The only non exciting part would be the board not working or getting some other part of your loop damaged (eg: short circuit/over current draw from your USB port).&lt;/p&gt;&#xA;" OwnerUserId="7049" LastActivityDate="2017-05-03T12:16:48.683" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12272" PostTypeId="2" ParentId="11924" CreationDate="2017-05-03T12:21:52.023" Score="1" Body="&lt;p&gt;First make sure you have the camera's drivers available for the operating system you'll be running your code on. If drivers are available for your platform check what resolutions and fps(s) you can read from the camera using the driver. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you have those things in place you'll be able to do anything in cv that will accept raw (YUV or YUV2 or whatever your camera output's via the driver). &lt;/p&gt;&#xA;" OwnerUserId="7049" LastActivityDate="2017-05-03T12:21:52.023" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12273" PostTypeId="2" ParentId="9729" CreationDate="2017-05-03T13:30:48.563" Score="0" Body="&lt;p&gt;It appears the industry need to consider some standardization of the terms. In my search I have found differing definitions for the term DOF. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;From Yaskawa/Motoman: &quot;Degrees Of Freedom : The number of independent directions or joints of the robot (R15.07), which would allow the robot to move its end effector through the required sequence of motions. For arbitrary positioning, 6 degrees of freedom are needed: 3 for position (left-right, forward-backward, and up- down) and 3 for orientation (yaw, pitch and roll).&quot;&#xA;Note: R15.07 would appear to reference the ANSI/RIA/ISO materials but at RIA, I only found reference to R15.06.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From Robot Worx: Degrees of Freedom - The amount of values in a system possible of variation. A robotic joint is equal to one degree of freedom.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From ATI automation another RIA member: &quot;Six Degrees of Freedom  - A fancy way of saying Fx, Fy, Fz, Tx, Ty and Tz.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would have to disagree with the Robot Worx, because at a minimum both directions of rotation or travel must be considered for each plane. So Yaskawa's explanation of 3 planar linear directions and three planar rotations makes more sense as well as the definition from ATI. If this is accepted, then what of DOM? This term must inevitably be more complex and account for many things other than direction. I see no terminology so far that accounts for actual degrees of motion of servos/actuators for example servos designed for 180°/360° motions. There should be some way to relate this functionality in the glossary of terms whether it be DMO or yet another term. Some method of using all the available functions of a robotic device should be somehow described.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my opinion there should also be a standard definition for a description that includes, such other functions as: time, acceleration, speed, grip/release, etc.&lt;/p&gt;&#xA;" OwnerUserId="16845" LastActivityDate="2017-05-03T13:30:48.563" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12274" PostTypeId="1" CreationDate="2017-05-03T16:42:51.263" Score="0" ViewCount="88" Body="&lt;p&gt;I've tried to drill a number of holes in Irobot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've missed one of them and I need the electronic scheme of Irobot-Creator 2 for trying to restore this input of the data cable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can you help me with that, please?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Raz&#xA;&lt;a href=&quot;https://i.stack.imgur.com/23kdS.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/23kdS.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://i.stack.imgur.com/8gd6K.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;enter image description here&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="16847" LastActivityDate="2018-07-19T12:54:15.247" Title="I need the scheme of Irobot creator 2" Tags="&lt;irobot-create&gt;&lt;mechanism&gt;&lt;electronics&gt;&lt;electric&gt;" AnswerCount="1" CommentCount="5" ClosedDate="2017-05-10T13:04:58.163" ContentLicense="CC BY-SA 3.0" />
  <row Id="12276" PostTypeId="1" CreationDate="2017-05-03T18:54:32.097" Score="2" ViewCount="1392" Body="&lt;p&gt;I'm building a kite flying robot, for which I want to measure air speed. So I combined &lt;a href=&quot;https://www.aliexpress.com/item/Ardupilot-Arduplane-Air-Speed-meter-Sensor-Gauge-with-Differential-Pitot-Tube-for-APM-2-5-2/32464559707.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;a Pitot tube&lt;/a&gt; with &lt;a href=&quot;https://www.aliexpress.com/item/MCP3008-I-P-MCP3008-I-MCP3008-3008-I-P-3008-2pcs-lot/32761721518.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;an ADC&lt;/a&gt; and connected it to my Raspberry Pi using &lt;a href=&quot;https://learn.adafruit.com/raspberry-pi-analog-to-digital-converters/mcp3008&quot; rel=&quot;nofollow noreferrer&quot;&gt;this tutorial&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems to work perfect, in that it receives data, but I'm not sure what this data tells me. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I get a constant stream of numbers, mostly between 502 and 504 when nothing happens. When I blow on the tube the number increases to 550-600, or even up to 1000 when I put my lips on the tube and blow with force. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is now; what does this tell me about the air speed in meters per second? 500 seems to be zero air speed, but what does 550 or 600 tell me? Is there some kind of conversion table for this? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;All tips are welcome!&lt;/p&gt;&#xA;" OwnerUserId="1050" LastActivityDate="2017-12-04T22:35:36.060" Title="How to convert raw Pitot tube readings to air speed in m/s?" Tags="&lt;sensors&gt;&lt;python&gt;&lt;uav&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12277" PostTypeId="1" CreationDate="2017-05-03T23:16:44.630" Score="2" ViewCount="59" Body="&lt;p&gt;As irobot do not sell the create in Australia and will not ship to Australia I am considering buying a second hand roomba to convert to a create.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this possible, what models should be avoided and any advise?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="1819" LastActivityDate="2017-05-03T23:16:44.630" Title="Is it possible to turn an irobot roomba into a create" Tags="&lt;irobot-create&gt;&lt;roomba&gt;" AnswerCount="0" CommentCount="0" ClosedDate="2017-05-05T07:10:50.593" ContentLicense="CC BY-SA 3.0" />
  <row Id="12278" PostTypeId="2" ParentId="12276" CreationDate="2017-05-04T04:49:40.807" Score="1" Body="&lt;p&gt;In a classic pitot tube setup, we make use of a liquid (density $\rho$)in a U tube. One end of the U tube is connected to the dynamic pressure source (front of the pitot) and the other end is connected to the static pressure source (side/ below the pitot).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now as the air (density $\rho_{air}$) speed increases, the dynamic pressure pushes on the liquid in the U tube and raises the level (by $h$ metres) in the static arm of the U tube. Using Bernoulli's principle, we determine the velocity (in $\frac{m}{s^2}$) by the formula,&#xA;$$v=\sqrt{\frac{2\rho g h}{\rho_{air}}}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking at your sensor, it is unlikely that it consists of a U tube mechanism. Instead it probably uses a diaphragm of some sort with static and dynamic pressures pushing from opposite sides.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this situation, unless you can find a calibration graph from the manufacturer, you have very little option but to manually graph the output against known air velocities and then build a look-up table of some sort. You could do this with a variable speed fan and a handheld anemometer.&lt;/p&gt;&#xA;" OwnerUserId="16501" LastEditorUserId="16501" LastEditDate="2017-05-04T05:14:15.730" LastActivityDate="2017-05-04T05:14:15.730" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12280" PostTypeId="1" AcceptedAnswerId="12302" CreationDate="2017-05-04T10:25:35.333" Score="1" ViewCount="201" Body="&lt;p&gt;I don't know if this is a purely &quot;robot&quot; question or a more DIY/hackish one, but let's give it a try.&lt;br&gt;&#xA;I currently have a set of cards that I want to sort based on several criteria.&lt;br&gt;&#xA;My setup includes:  &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://shop.mime.co.uk/&quot; rel=&quot;nofollow noreferrer&quot;&gt;MeArm&lt;/a&gt; A 4 DOF robot arm  &lt;/li&gt;&#xA;&lt;li&gt;Raspberry Pi 3 + Shields for controlling the arm&lt;/li&gt;&#xA;&lt;li&gt;A mini vacuum pump, hold in place by the gripper&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;These are the steps:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Move the arm on top of pile of cards&lt;/li&gt;&#xA;&lt;li&gt;Turn on the vacuum pump&lt;/li&gt;&#xA;&lt;li&gt;Pick the first card&lt;/li&gt;&#xA;&lt;li&gt;Move the arm in the right spot&lt;/li&gt;&#xA;&lt;li&gt;Turn off the pump and let the card fall&lt;/li&gt;&#xA;&lt;li&gt;Repeat&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Everything is working fine, my only main issue occurs when I'm lifting the arm. It seems that between the cards there are some kind of forces and under the first one, several others come up, attached.&lt;br&gt;&#xA;I tried to shake the arm and make them fall, but it's not working.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any suggestions? Maybe I'm missing some simple/obvious solution.&lt;/p&gt;&#xA;" OwnerUserId="16855" LastActivityDate="2017-05-05T22:54:48.410" Title="How to pick up a card from a pile" Tags="&lt;robotic-arm&gt;&lt;raspberry-pi&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="12281" PostTypeId="1" AcceptedAnswerId="12311" CreationDate="2017-05-04T11:39:06.227" Score="-1" ViewCount="90" Body="&lt;p&gt;Starting in the code and through the hardware, what is the &quot;path&quot; that explains the robotic movement. Are there electrical signals involved? How they are initiated and formed and/or interpreted then by the &quot;machine&quot;/robot? Can you explain what happens from code to robotic action? &lt;/p&gt;&#xA;" OwnerUserId="16856" LastActivityDate="2017-05-07T04:14:11.273" Title="What happens from code to robotic action?" Tags="&lt;industrial-robot&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12282" PostTypeId="2" ParentId="12274" CreationDate="2017-05-04T12:57:15.860" Score="1" Body="&lt;p&gt;The schematic for the main board on the iRobot Create 2 is currently not available. It is advised to remove the plastic top cover before drilling into the electronics below. (This is good practice for all electronics!) As suggested by another user, perhaps the manufacturer will be able to help you directly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;Please note that while I'm an iRobot employee, the postings on this site are my own and don't necessarily represent iRobot's positions, strategies, or opinions.&lt;/sup&gt;&lt;/p&gt;&#xA;" OwnerUserId="7665" LastEditorUserId="7665" LastEditDate="2018-07-19T12:54:15.247" LastActivityDate="2018-07-19T12:54:15.247" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12284" PostTypeId="1" AcceptedAnswerId="12287" CreationDate="2017-05-04T17:39:07.353" Score="1" ViewCount="1738" Body="&lt;p&gt;I'm looking at the data sheet for a DC motor that states:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Current consumption at nominal torque (mA): 380&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I have a power supply that can deliver 500 mA. Can I take the above statement to indicate that the motor will never draw more than 380 mA, or does it mean that it usually uses 380 mA, and that I should probably choose a different power supply?&lt;/p&gt;&#xA;" OwnerUserId="16859" LastActivityDate="2017-05-06T13:19:39.327" Title="DC motor - max current" Tags="&lt;motor&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12285" PostTypeId="2" ParentId="12284" CreationDate="2017-05-04T21:32:29.857" Score="2" Body="&lt;p&gt;You should compare the torque will your application require with the nominal torque specified in the datasheet. You should also check the instantaneous current the motor can require (can be higher when powering up -- also known as the stall current) and also if the power supply can deliver 500mA continuously or only instantaneously. Be sure that the maximum current time for the power supply is larger than the required by the motor.&lt;/p&gt;&#xA;" OwnerUserId="16863" LastEditorUserId="10748" LastEditDate="2017-05-06T13:19:39.327" LastActivityDate="2017-05-06T13:19:39.327" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12286" PostTypeId="2" ParentId="12281" CreationDate="2017-05-04T22:03:17.337" Score="0" Body="&lt;p&gt;Rotot maker(s) make decisions, how to make robot and then they really build it physically. Also decisions about its behavior are made by the way and when all is clear, programming can start.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Programator (human) thinks about all different needed alogorithms and then write the code and compiles it (with some kind of compiler) to form usable by the robot (usually the code is written as program lines on some PC or so, which means electrical signals involved as anything elese done on PC).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then the (compiled) program is uploaded to robots memory (again electrical signal all the way), which is othen part of the main microcontroler. Anything stored in memory is stored as electrical signals, of course.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the robot is started, it usually means connecting it to electrical source (batteries), so electricity runs everywhere, where is needed (all logic circuits and a lot of motor, sensors etc.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The controller (processor) of course runs by the means of electrical signals - simplest way is to send signal ot memory bus and then to control lines to obtain instruction from memory in form of electrical signals. The instruction is then decoded (a lot of circuits using electrical signals to inform each other, what is required to fullfill the instruction). The result is usually to set some variables (so more electrical signals) and/or to change state of some device (motor, servo, sensor), again lot of elecrical signals. If it is case of some motor (to drive robot forward maybe), usually the processor sends electrical signals to motor driver, which decode the signals and direct high electrical currents to the motor accordingly. the motor transfor the electrical current to magnetic field, which then is transformed to mechanical force to rotate the motor. Then usually came some gears and wheels and robot start to move forward.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In meantime the processor sends requests (a lot of electrical signals) to sensors, which process those commands similar way, as processor did with its program - so sending electrical signals between its (sensors) circuits until it is somehow transformed to another kind of energy (light, sound, and such), then the sensor is detecting returned signal by the way of changes in its internal electrical signals (like detecting arriving sound as electrical pulses in microphone and electrically comparing them to requeierd pattern and in case of match electrically computing the distance of obstacle.) Then the sensor sends a lot of electrical signals to processor as a form of message, what was sensed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The processor by changing its internal electrical signals accordingly runs one instruction after another (requesting them from memory with appropriate electrical signals), until (at the athors intent) some criteria are met and the processor sends another group of electrical signals to motor driver to change speed/direction of motor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And it goes again and again, until the battery dies or is disconnected. Even waiting contains a lot of electrical signals in processor to measure the time and ensure the waiting is prolonged to required time span or interrupted by other electrical signals as was decided.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So nearly everything in robot are electrical signals in some circuits, except the most final part of communicating with world(like moving, or sensing obstacles). Even communication can be done as sending electrical signals to antenae to use local wifi/xbee/another wireless protocol. Or to LEDs, where the signals are converted to light (which is kind of electrical, or electromagnetical signal itself too).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are interested, how are electrical signals treated by the processor, you can read the datasheets of any one. Its hundreds and hundreds pagges, how the electrical signals are used inside to initiate and run the processor. And it is usually covered on high level, so you can then study thousands of book, how exactly are the electrical signals managed by perticular logical gates, which are constructed from transistors, so you can find another thousands of books about transistors, how they treat electrical signals. And it is of course not the end, you can go even deeper and spend thousands life just studying all aspects of electrical signals in single robot on all possible levels. Depends only on you, how much you want to know.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Not much robots are nowadays run on pure steam and mechanical gears, without any kind of electrical signals involved.)&lt;/p&gt;&#xA;" OwnerUserId="16496" LastActivityDate="2017-05-04T22:03:17.337" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12287" PostTypeId="2" ParentId="12284" CreationDate="2017-05-04T22:20:27.490" Score="2" Body="&lt;p&gt;Nominal torque is usually on some nominal rotation speed, which should be mentioned too. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maximal torque is usually on zero speed (or even more if you force it to rotate backwards). And the maximal current is usually a lot higher than the nominal on nominal speed and torque.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So it says, that if your motor is running at nominal, it would take the 380mA. You can safely assume, that at many occassions, even in normal usage, the current will be temporary a lot higher.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Power supplies usually state how much current they can provide for a long time (nominal current); good power supplies also state maximal current and how long it can provide it (might also be called surge current).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I personally would consider the 500mA highly underrated for full usage of the motor, but if the power supply is over-current resistant (be it by detection and sophisticated construction, or be it just &quot;weak&quot; source with high inside resistance), then it may work well enough, just sometimes the motor would seem &quot;weak&quot; as the voltage would need to drop in order to keep step with current provided by source. And low voltage means low current means low torque there. On some application it dos not matter, it would just move slower, on other applications that may be a critical flaw - it is you, who decides, what is acceptable and what not.&lt;/p&gt;&#xA;" OwnerUserId="16496" LastEditorUserId="7665" LastEditDate="2017-05-05T06:59:36.263" LastActivityDate="2017-05-05T06:59:36.263" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12288" PostTypeId="2" ParentId="12251" CreationDate="2017-05-05T02:47:49.723" Score="2" Body="&lt;p&gt;I agree this question isn't really appropriate for this forum. That said, if you search &quot;syringe plastic material,&quot; you'll find this Stack Exchange answer: &lt;a href=&quot;https://chemistry.stackexchange.com/questions/65887/what-kind-of-materials-are-plastic-syringes-made-from&quot;&gt;https://chemistry.stackexchange.com/questions/65887/what-kind-of-materials-are-plastic-syringes-made-from&lt;/a&gt;, which suggests many syringes are made of polypropylene. If indeed that's what your syringes are made from, go get some glue appropriate for that material.&lt;/p&gt;&#xA;" OwnerUserId="7665" LastActivityDate="2017-05-05T02:47:49.723" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12289" PostTypeId="2" ParentId="12251" CreationDate="2017-05-05T07:06:16.337" Score="1" Body="&lt;p&gt;I used just hot soldering rod and it went well. I need to keep the heat low, but was able to solder the plastick together to be airtight. Just to be sure more I use the hot glue afteward to enforse the connections and make them more smooth. Not exactly nice looking, but works well enough.&lt;/p&gt;&#xA;" OwnerUserId="16496" LastActivityDate="2017-05-05T07:06:16.337" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12298" PostTypeId="1" CreationDate="2017-05-05T19:28:36.187" Score="1" ViewCount="93" Body="&lt;p&gt;I am using an IR camera to track N mobile robots driving about on the floor. Each robot has a few IR LEDs on its head in known locations, all at the same height above the floor. Each robot has 5 degrees of freedom, X, Y, theta, rotation rate, and velocity. All the camera sees is a bunch of blobs. I have a working blob detector, and can calculate the coordinates of visible blobs in world space. Now I would like to implement a particle filter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have two options:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Implement a single particle filter with a state space of 5xN dimensions.&lt;/li&gt;&#xA;&lt;li&gt;Implement N particle filters with 5 dimensional state spaces.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;My feeling is that 1. is the correct way to approach the problem, because otherwise each particle filter could easily get confused about which particle belongs to which robot. But, on the other hand, it seems like a lot of dimensions, and could be slow.&lt;/p&gt;&#xA;" OwnerUserId="40" LastActivityDate="2017-05-07T19:12:53.473" Title="How to track multiple robots with particle filter" Tags="&lt;particle-filter&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12300" PostTypeId="2" ParentId="12298" CreationDate="2017-05-05T22:07:03.347" Score="2" Body="&lt;p&gt;This is a good question, in that it's actually two good questions.  The answer to which of those two options to use, is that they are the same.  Your idea of &quot;confusion&quot; is intuitively correct, but is not a function of how you structure the state, but is instead about how you associate the measurements to part of the state (which robot was observed).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Problem 1: What red dot is attached to which robot.  That's the &lt;a href=&quot;https://robotics.stackexchange.com/questions/3073/data-association-with-ekf&quot;&gt;data association problem&lt;/a&gt;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Problem 2: How to use a particle filter to track $N$ robots.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Those problems are independent* of each other, and choosing a $5xN$ state versus five $N$ states doesn't help you resolve the &quot;confusion&quot; of which dot corresponds to which robot. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: How large of a state would you need to also estimate the association between measurements and robots as well as robot states?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Suppose you have 1 measurement, you need to estimate which robot it is associated with (let's call that $m_1$).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Say, $m_1=1$ with probability $p_1$, $m_2=2$ with probability $p_2$, etc.  So, the state of the robot &quot;fragments&quot;. Even for robot 1, you have its PDF as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ p(R_1) = p(R_1|m_1=1)p(m_1=1)+p(R_1|m_1=2)p(p_1=2)+p(R_1|m_1=3)p(m_1=3)...$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;or for a few robots:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ p(R_j) = \sum p(R_j|m_1=i)p(m_1=i)$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, what if you have two measurements:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ &#xA;\begin{align}&#xA;p(R_1) &amp;amp;= p(R_1|m_1=1,m_2=1)p(m_1=1,m_2=1)\\&#xA;&amp;amp;+p(R_1|m_1=1,m_2=2)p(m_1=1,m_2=2) \\ &#xA;...\\&#xA;&amp;amp;+p(R_1|m_1=2,m_2=1)p(m_1=2,m_2=1)\\&#xA;&amp;amp;+p(R_1|m_1=2,m_2=2)p(m_1=2,m_2=2)\\&#xA;...\\&#xA;&amp;amp;+p(R_1|m_1=3,m_2=1)p(m_1=3,m_2=1)\\&#xA;&amp;amp;+p(R_1|m_1=3,m_2=2)p(m_3=3,m_2=2)\\&#xA;...\\&#xA;&amp;amp;+p(R_1|m_1=5,m_2=1)p(m_1=5,m_2=1)\\&#xA;&amp;amp;+p(R_1|m_1=5,m_2=2)p(m_3=5,m_2=2)\\&#xA;\end{align}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are $2^K$ possible combinations / associations of measurements for each robot and $K$ measurements... and that's just one robot's state estimate. You need $N$ total.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In short, the state space &lt;em&gt;explodes in size&lt;/em&gt; when you try to associate a PDF over combinations of measurements. You'll need a hugely increasing number of particles to even have a chance at approximating the real state.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are very advanced filters that try to do this (see Probability Hypothesis Density Filter). But in general, estimating the mapping between measurements and robots is, as mentioned, the &lt;a href=&quot;https://robotics.stackexchange.com/questions/3073/data-association-with-ekf&quot;&gt;data association problem&lt;/a&gt;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, bringing it back down to earth, what you want to do is come up with a way to do good associations before you run your filter.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Some commentary:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Particle filters are not methods for tracking points that appear on robots. Not really. Particle filters sample the possible states for each robot, and assign a liklihood of that sample being correct.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you &lt;em&gt;could&lt;/em&gt; do, is run through possible associations of spots to robots and simultaneously estimate the states of the robots assuming that association is correct. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's a paper that might help. &lt;a href=&quot;http://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=4632390&quot; rel=&quot;nofollow noreferrer&quot;&gt;Particle filters and data association for multi-target&#xA;tracking by Mats Ekman &lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's just the first one that popped up in a google search, and talks about how to choose data association techniques while also using a particle filter to estimates state.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;This is an oversimplification. You can use a PF to solve both simultaneously by having a PDF over measurement associations and also sampling that. But I doubt that's what you're asking. Also, if the robot positions are correllated, then option 1 and 2 are not equivalent. However, this is not often assumed.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="163" LastEditorUserId="163" LastEditDate="2017-05-07T19:12:53.473" LastActivityDate="2017-05-07T19:12:53.473" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12301" PostTypeId="2" ParentId="12260" CreationDate="2017-05-05T22:20:51.900" Score="2" Body="&lt;p&gt;The covariance matrix of &lt;em&gt;the control inputs&lt;/em&gt; is measured and known.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That is, following the EKF equations on &lt;a href=&quot;https://en.wikipedia.org/wiki/Extended_Kalman_filter&quot; rel=&quot;nofollow noreferrer&quot;&gt;this page&lt;/a&gt;, the covariance of the control, $Q$ is (often) a diagonal matrix, where the diagonal terms are the variances of the control effects.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a planar 2d robot, where odometery is used as a surrogate of control, the $Q$ matrix has two non-zero elements, which coorespond to the error in distance measurements from odometry. Stated another way, if the odometers return $d$ as distance travelled, and they have error $\sigma_d$, then your covariance matrix for control is $\begin{bmatrix} \sigma^2_d, 0 \\ 0, \sigma^2_d \end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's it. Just estimate how bad your measurements are.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I would not go all the way down to voltages, I would trust the local controller and measure how bad it is to get the sigma above&lt;/li&gt;&#xA;&lt;li&gt;If your robot does not have inertia, then yes, angular velocity is independent across states. This is not a KF problem, you could include it if you wanted&lt;/li&gt;&#xA;&lt;li&gt;You need a book, and to start simple. Start with odometry. Do a 3D (x,y, theta) state, and see if you can go from there.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The covariance matrix of the &lt;em&gt;robot state&lt;/em&gt; is constructed by the jacobian of the state with respect to the control inputs, and is part of the EKF update equations.  (or, for non-parametric estimators, it's often just the actual variance of the samples).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Some details and references:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;if your state (position, velocity) is a function of the wheels speeds (controls), first construct the functions $x=f(u), y=f(u), s=f(u), \omega = f(u)$... (for x,y position, speed, and rotational speed).  You can go as crazy as you want for $u$, it could be just wheel speeds, or some hugely complex modelling of the whole world, if mercury is in retrograde, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typically, I use &lt;a href=&quot;https://robotics.stackexchange.com/a/134/163&quot;&gt;this&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, construct the &lt;a href=&quot;https://en.wikipedia.org/wiki/Jacobian_matrix_and_determinant&quot; rel=&quot;nofollow noreferrer&quot;&gt;jacobian&lt;/a&gt;, and let's call it $F$, etc, etc, following the &lt;a href=&quot;https://en.wikipedia.org/wiki/Extended_Kalman_filter&quot; rel=&quot;nofollow noreferrer&quot;&gt;ekf equations&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="163" LastActivityDate="2017-05-05T22:20:51.900" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12302" PostTypeId="2" ParentId="12280" CreationDate="2017-05-05T22:54:48.410" Score="1" Body="&lt;p&gt;If your cards are like playing cards, they are likely very smooth. Cards like this can adhere or bond together in a similar way to &quot;wringing&quot; gauge blocks: &lt;a href=&quot;http://en.wikipedia.org/wiki/Gauge_block#Wringing&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://en.wikipedia.org/wiki/Gauge_block#Wringing&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The phenomena isn't that well understood, but is thought to be a combination of air pressure, surface tension and/or molecular attraction when two very flat surfaces are brought into contact.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To pick up a single card, you could try a different movement to help break the adhesion between cards, or, if possible, modify the cards to make them less likely to adhere. For example, roughing up the card surfaces may help.&lt;/p&gt;&#xA;" OwnerUserId="1360" LastActivityDate="2017-05-05T22:54:48.410" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12305" PostTypeId="2" ParentId="11538" CreationDate="2017-05-06T10:26:33.310" Score="0" Body="&lt;p&gt;I also have the same paper and I am going to do following&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Simulate angles in excel by putting in equations.&lt;/li&gt;&#xA;&lt;li&gt;Make an autocad or solidworks 3d model of the robot and test the resultant angles from excel file on this model.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;This I will be doing because I do not want to install Linux on my PC for running just a simulation software. Of course, we can use Virtual machine on windows but time is a precious commodity for doing all this.&lt;/p&gt;&#xA;" OwnerUserId="16882" LastEditorUserId="37" LastEditDate="2017-05-07T00:07:34.267" LastActivityDate="2017-05-07T00:07:34.267" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12308" PostTypeId="1" CreationDate="2017-05-06T21:03:07.720" Score="4" ViewCount="956" Body="&lt;p&gt;I need to control 24 servos but I do not know how to do with I2C.&#xA;I saw some componentes that do it with USB, but I need to do it with I2c.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am working in a robot with 8 legs and 3 degree of freedom in each leg, so i need to connect and control 24 servos to any arduino board, could be possible with an arduino mega and a sensor shield like that show in &lt;a href=&quot;https://arduino-info.wikispaces.com/SensorShield&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://arduino-info.wikispaces.com/SensorShield&lt;/a&gt; but I want to do it using two &quot;16-channel servo  drive&quot; like this &lt;a href=&quot;https://www.adafruit.com/product/1411&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.adafruit.com/product/1411&lt;/a&gt;, each of these can control 16 servos using only 2 pins from the board and it is “Chain-able” design so i could connect 2 of this to an Arduino Uno board or Raspberry but I do not know how to do.&#xA;Any one can help me with I2C chains connections.&lt;/p&gt;&#xA;" OwnerUserId="16886" LastEditorUserId="16886" LastEditDate="2017-05-22T20:18:06.903" LastActivityDate="2018-10-15T01:00:12.187" Title="How can i connect two adafruit 16-channel 12-bit PWM/Servo Driver I2C interface (pac9685) to Raspberry or Arduino" Tags="&lt;arduino&gt;&lt;raspberry-pi&gt;&lt;i2c&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12309" PostTypeId="1" CreationDate="2017-05-07T01:38:27.457" Score="0" ViewCount="2865" Body="&lt;p&gt;Trying to set up Hector SLAM with the RPLidar A2.  I downloaded both &lt;code&gt;rplidar_ros-master&lt;/code&gt; and &lt;code&gt;hector_slam-catkin&lt;/code&gt;; extracted them into my &lt;code&gt;catkin_ws/src&lt;/code&gt; folder and ran &lt;code&gt;catkin_make&lt;/code&gt;. Then I edited the &lt;code&gt;mapping_default.launch file&lt;/code&gt; and changed the next to last line:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;node pkg=&amp;quot;tf&amp;quot; type=&amp;quot;static_transform_publisher&amp;quot; name=&amp;quot;base_to_laser_broadcaster&amp;quot;&#xA; args=&amp;quot;0 0 0 0 0 0 base_link laser 100&amp;quot; /&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Then, after running the &lt;code&gt;roslaunch&lt;/code&gt; command on &lt;code&gt;rplidar.launch&lt;/code&gt; and on &lt;code&gt;tutorial.launch&lt;/code&gt;  RVIZ starts but fails to generate a map and gives the warning:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;No tf data. Actual error: Fixed Frame [map] does not exist&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Do I need to add the 'map' Fixed Frame to the tf node in my &lt;code&gt;mapping_default.launch&lt;/code&gt; file?&lt;/p&gt;&#xA;" OwnerUserId="16821" LastEditorUserId="19515" LastEditDate="2020-08-07T17:20:01.240" LastActivityDate="2021-05-04T21:10:03.430" Title="Hector SLAM in ROS with RPLidar" Tags="&lt;ros&gt;&lt;raspberry-pi&gt;&lt;lidar&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12310" PostTypeId="1" CreationDate="2017-05-07T02:47:52.097" Score="0" ViewCount="340" Body="&lt;p&gt;In the stereo camera system, two cameras are needed and should be mounted side by side. I see someone just glues two cameras to a wooden board. However one mobile phone manufacture claimed that the two lens of dual camera modules on phones produced by them are parallel within 0.3 degree. Why do two lens on mobile phones need such high precise assembly? Does this will bring any benefit?&lt;/p&gt;&#xA;" OwnerUserId="15460" LastActivityDate="2017-05-07T21:09:44.817" Title="setup requirement of stereo camera" Tags="&lt;computer-vision&gt;&lt;cameras&gt;&lt;stereo-vision&gt;&lt;calibration&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12311" PostTypeId="2" ParentId="12281" CreationDate="2017-05-07T04:14:11.273" Score="0" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;what is the &quot;path&quot; that explains the robotic movement&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Normally, a path refers to a path in the robot &lt;em&gt;configuration space&lt;/em&gt;. Think of it like this. Suppose a robot has 6 joints. When you want to move the robot from pose A, at which the values of those motors -- a configuration -- are $q_A = [0, 0, 0, 0, 0, 0]$, to pose B, with $q_B = [1, 1, 1, 1, 1, 1]$. (Each of the numbers may be specified in radian, for example.) Roughly speaking, a path for that robot is a (continuous) vector-valued function $p$. It takes a time parameter $t$ as an input and outputs the configuration on the path at time $t$. So if the above motion takes $5$ seconds, $p(0) = q_A$ and $p(5) = q_B$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But when one actually &lt;em&gt;communicates&lt;/em&gt; with the robot (or rather with the robot controller), one does not tell the robot where it is supposed to be at every single time instant. Instead, one only gives the robot a set of &lt;strong&gt;waypoints&lt;/strong&gt; -- points spread along the path $p$ that the robot needs to pass through. (Those waypoints are generally not too far from one another.) And then the controller then kind of guess what is between two waypoints and tells the robot to move accordingly.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Are there electrical signals involved?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How they are initiated and formed and/or interpreted then by the &quot;machine&quot;/robot?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;For industrial robots, we communicate with the robot through its controller. I will talk about the robots that we are using. (I think other robots should be more or less similar, though.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The codes or commands that we want to execute (for example, in C++) are translated and sent to the controller through ethernet as &lt;em&gt;packets&lt;/em&gt;. Something like&#xA;&lt;code&gt;01 10 00 00 00 00 00 00 00 01 00 00 00 00 00 04&lt;/code&gt; (numbers are in hexadecimal). Then the controller will tell the robot (I mean, the motors) what to do. But for the controller level, I don't know much.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The controller also communicates back to us the same way, i.e., sending packets, for example, when we ask it what the values of the motors are.&lt;/p&gt;&#xA;" OwnerUserId="7610" LastActivityDate="2017-05-07T04:14:11.273" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12313" PostTypeId="1" CreationDate="2017-05-07T20:54:02.540" Score="2" ViewCount="1044" Body="&lt;p&gt;I have a &lt;code&gt;.bag&lt;/code&gt; which contains recorded messages on topics &lt;code&gt;/topic1&lt;/code&gt; and &lt;code&gt;/topic2&lt;/code&gt;. The messages have &lt;code&gt;/world&lt;/code&gt; as &lt;code&gt;frame_id&lt;/code&gt;, so both of the messages associated with these topics are stamped, i.e. they have a header.&lt;/p&gt;&#xA;&lt;p&gt;The same &lt;code&gt;.bag&lt;/code&gt; file also contains recorded messages on the topic &lt;code&gt;/tf&lt;/code&gt; (of type &lt;a href=&quot;http://docs.ros.org/jade/api/geometry_msgs/html/msg/TransformStamped.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;tf2_msgs/TFMessage&lt;/code&gt;&lt;/a&gt;). These transform messages have the &lt;code&gt;frame_id&lt;/code&gt; set to &lt;code&gt;/world&lt;/code&gt; and the &lt;code&gt;child_frame_id&lt;/code&gt; set to the local frames associated with the IMUs from which the messages are being sent over respectively topic &lt;code&gt;/topic1&lt;/code&gt; and &lt;code&gt;/topic2&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Now, I need the messages sent over the &lt;code&gt;/topic1&lt;/code&gt; and &lt;code&gt;/topic2&lt;/code&gt; to be converted to their corresponding local frame (i.e. the child frame or &lt;code&gt;child_frame_id &lt;/code&gt;) from the (fixed) frame &lt;code&gt;/world&lt;/code&gt;. Since both the &lt;code&gt;/tf&lt;/code&gt; messages and the messages of the topics &lt;code&gt;/topic1&lt;/code&gt; and &lt;code&gt;/topic2&lt;/code&gt; are stamped, I thought we could do this without much trouble, but I'm not sure since I'm very new to ROS.&lt;/p&gt;&#xA;&lt;p&gt;I've looked around for various solutions, but I didn't find an exact solution for my problem, maybe because I didn't recognize it as such, given my limited knowledge of ROS, as I said.&lt;/p&gt;&#xA;&lt;p&gt;I would appreciate a step by step description of the approach and, if you don't want to write a full solution with code (preferably in Python), at least point me to the similar examples. Please, do not suggest me to read the tutorials of &lt;code&gt;/tf&lt;/code&gt;, I've partially done it, and it didn't help much.&lt;/p&gt;&#xA;" OwnerDisplayName="user10072" LastEditorDisplayName="user10072" LastEditDate="2021-02-02T17:41:09.887" LastActivityDate="2021-02-02T17:41:09.887" Title="Transform timestamped messages recorded in a bag file using tf messages" Tags="&lt;ros&gt;&lt;python&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12314" PostTypeId="2" ParentId="12310" CreationDate="2017-05-07T21:00:39.103" Score="1" Body="&lt;p&gt;If you glue two cameras to a wooden board, and then write your code with the assumption that your translation matrix is perfectly or really close to [1, 0, 0], once the cameras are slightly displaced, depth errors start creeping up in your stereo applications such as reconstruction. In mobile phones, the drivers and the rest of the API code would be preprogrammed, and most probably cannot be changed later on: which means the geometry needs to be described as accurately as possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, as you go smaller on your baseline, which is the case for mobile phone cameras, even tiny imprecisions in the setup of the cameras can cause a huge difference in the geometry and depth computations. On the contrary, you can probably get away with a few centimeters of movement on the Z axis when your cameras' baseline is 1 m on the X axis.&lt;/p&gt;&#xA;" OwnerUserId="10310" LastEditorUserId="10310" LastEditDate="2017-05-07T21:09:44.817" LastActivityDate="2017-05-07T21:09:44.817" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12315" PostTypeId="1" AcceptedAnswerId="12347" CreationDate="2017-05-07T21:02:15.857" Score="0" ViewCount="796" Body="&lt;p&gt;I plan to make a mouse or a gesture control robot like this video on YouTube : &lt;a href=&quot;https://www.youtube.com/watch?v=3bywmHWcgdA&quot; rel=&quot;nofollow noreferrer&quot;&gt;ABB Externally guided motion&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a 6-axes robot, I could implement it by using ABB’s EGM (Externally Guided Motion) option, which allows to send a Cartesian position and pose of TCP, and all the tedious calculation was handled by its controller. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, when I started to work on YuMi, I noticed that EGM’s position guide control cannot be applied to the 7-axes robot (For YuMi, a joint control mode in EGM is only available). Are there any recommendations to implement what I described above? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, I'm guessing that I need to implement IK class to get the correct joints' angles from a desirable TCP position. Maybe using OpenRAVE or OMPL? If you have any recommendation to calculate IK / Inverse Jacobian, please let me know too.&lt;/p&gt;&#xA;" OwnerUserId="15905" LastEditorUserId="2289" LastEditDate="2017-05-08T10:39:17.273" LastActivityDate="2017-05-10T11:30:18.453" Title="Real-time TCP position/pose control on a robotic arm such as YuMi: recommendation to calculate IK/Inverse Jacobian?" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;inverse-kinematics&gt;&lt;motion-planning&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12316" PostTypeId="2" ParentId="12309" CreationDate="2017-05-07T21:04:07.990" Score="0" Body="&lt;p&gt;Could you please add the entire launch script? Looks like some sort of mismatch. First thing I'd check is that the frame name in the line  &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;param name=&quot;base_frame&quot; value=&quot;/base_frame&quot;/&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;needs to match the frame name in the line &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;node pkg=&quot;tf&quot; type=&quot;static_transform_publisher&quot; name=&quot;base_to_laser_broadcaster&quot; args=&quot;0 0 0 0 0 0 base_frame laser 100&quot; /&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Unless you've manually modified your launch script to read base frame as base link, your static transform should also say base frame. As to your last question, /map is already predefined in mapping_default.launch: you shouldn't have to add it again.&lt;/p&gt;&#xA;" OwnerUserId="10310" LastActivityDate="2017-05-07T21:04:07.990" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12317" PostTypeId="2" ParentId="12268" CreationDate="2017-05-07T21:07:57.843" Score="0" Body="&lt;p&gt;If you wish to use the Baxter simulation, you need to first download and install the simulation framework according to the instructions at &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://sdk.rethinkrobotics.com/wiki/Simulator_Installation&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://sdk.rethinkrobotics.com/wiki/Simulator_Installation&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you've done that, you'll have to replace the baxter.sh line in your MoveIt command with this command &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/baxter.sh sim&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="10310" LastActivityDate="2017-05-07T21:07:57.843" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12318" PostTypeId="1" CreationDate="2017-05-08T01:13:23.110" Score="2" ViewCount="2355" Body="&lt;p&gt;I have a Robotic Arm with a camera mounted above it looking down at a slight angle. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming I know the height of the camera, the angle of tilt and the small distance from the center of the robot which is considered (0, 0) what else would I need to convert the image coordinates to the distance from the center of the robotic arm?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am also assuming all the objects will have a z=0 because they will be sitting on the same platform as the arm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have the inverse kinematics worked out to control the arm, I just need to give it coordinates to move to.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it helps I am using Python and OpenCV. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt; Clarification&lt;/p&gt;&#xA;" OwnerUserId="16895" LastEditorUserId="16895" LastEditDate="2017-05-08T14:38:56.467" LastActivityDate="2017-08-12T13:40:25.037" Title="Converting Image Coordinates to (x, y) Position for Robotic Arm" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;computer-vision&gt;&lt;python&gt;&lt;opencv&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12320" PostTypeId="1" AcceptedAnswerId="12322" CreationDate="2017-05-08T12:25:46.947" Score="0" ViewCount="48" Body="&lt;p&gt;I'm working on a hexapod that uses A3C to learn how to walk. Ideally I would test it all in a simulator for some structure to the weights/policy but I don't have enough time for that. Obviously there are specific degrees of freedom that would hit each other at certain points, so how could I implement a failsafe that stopped certain movements without messing up the algorithm? If I were to just not allow a movement if I thought it would be dangerous after the algorithm but before the movement, would that disrupt it?&lt;/p&gt;&#xA;" OwnerUserId="16064" LastActivityDate="2017-05-08T14:36:37.223" Title="Add failsafe to reinforcement learning algorithm" Tags="&lt;reinforcement-learning&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12321" PostTypeId="1" CreationDate="2017-05-08T14:34:43.277" Score="2" ViewCount="73" Body="&lt;p&gt;I want to track a robot's orientation in space and wanted to choose quaternions for their many advantages.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However I have a few questions that I haven't found to be solved anywhere. &lt;a href=&quot;https://arc.aiaa.org/doi/abs/10.2514/2.4654&quot; rel=&quot;nofollow noreferrer&quot;&gt;The method I use to get quaternions from a rotation matrix is the one by Bar-Itzhack (2000)&lt;/a&gt;. I want to use the &quot;version 3&quot; method always whether or not the rotation matrix is imprecise since the method for precise matrix (version 1) also involves almost the same computational effort (contructing some matrix and getting eigen*)and this way it is more robust if my matrix happens to be imprecise. My questions regarding quaternions are the following:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;How unique are they when tracking in 3D space? Can I track the rotations of the tool frame without worrying about going through discontinuities in space? (E.g. like with axis-angle representation when the angle gets close to 0° or 180° and even is undefined for those) And no arbitrary outcomes.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;In the method mentioned above a special matrix is constructed from the rotation matrix and then the eigenvector of the highest eigenvalue is used as the resulting quaternion. I wanted to confirm the correctness with the following test. However the resulting fixed-angle is often negative. So I started to just negate the quaternion but I suspect that there may be cases where this is wrong, so what is the method to determine the sign? This is my verification method:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Get rotation matrix of a fixed rotation around an axis (e.g. +42° about x)&lt;/li&gt;&#xA;&lt;li&gt;From this rotation, apply the linked method above (version 3) to get the quaternion.&lt;/li&gt;&#xA;&lt;li&gt;Get a rotation matrix from the quaternion back (method used by Craig)&lt;/li&gt;&#xA;&lt;li&gt;And finally I convert the rotation matrix back into fixed angle representation and see if the angle is the same.&lt;/li&gt;&#xA;&lt;/ol&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Any help would be much appreciated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On this project I am not using ROS, everything is self-build.&lt;/p&gt;&#xA;" OwnerUserId="16899" LastActivityDate="2017-05-08T15:16:21.627" Title="How unique are Quarternions and what about the sign?" Tags="&lt;robotic-arm&gt;&lt;orientation&gt;&lt;frame&gt;" AnswerCount="0" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="12322" PostTypeId="2" ParentId="12320" CreationDate="2017-05-08T14:36:37.223" Score="0" Body="&lt;p&gt;If I understand correctly, you are planning to use a real structure, instead of a simulation and you are woried about collisions of the legs of the robot during locomotion learning. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yes, failsafes can and should be implemented. Workspace limits for each leg should be added to the control system. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A conservative and simple approach would be to add joint limits to each leg joints in a way that no collision in possible for any joint values. This would essentially mean that the volumes inside which the legs can move do not intersect eachother. Depending on the size (length) of your hexapod, this might mean serious restrictions or might not make a difference.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can define joint limits dynamically, based on current values of the adjoining legs. I.e if the left forward legs first joint (I assume only first joints are mainly responsible for collisions) has a certain current (measured) value, the joint limits of the left middle legs first joint (again assuming these are mainly responsible for collisions) has a motion range expressed (restricted) in function of the first leg (and vice versa). If the front leg is in a frontal position the middle leg can move freely forward, however, if the first leg is in a rear position the middle leg can only move a limited amount forward. And vice-versa. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;These dynamic limits will affect the RI algorithm, since there are motions which cannot be executed these have to be penalized by the loss function. I assume this will cause longer learning times. Furthermore it will also mean the your loss function will not only contain the reward for reaching the goal, but has to either model the joint limits exactly as your control system or get a feedback from your control system that the RI algorithm issued a command (action) which cannot be executed (woud lead to collision) and has to be penalized. I assume if the loss function takes care of the penalties, and the penalties are high enough, these limtis will not affect the state transitions of the robot, since these actions will never be further explored, since the penalty on them is so high. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is however a different challenge, not just collisions. Your hexapod can fall down. Now this is a bit more harder to detect by the control system then the adding joint limits. It basically means that your control system will have to calculate the CoG of the robot and make sure that its projection remains inside the support polygon. This means that the control system wil have to simulate the robot motion, before carring out the action. If the action would lead to the robot falling down, again the control system will have to signal this to the loss function and the loss function has to penalize the actions.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2017-05-08T14:36:37.223" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="12324" PostTypeId="1" CreationDate="2017-05-08T15:06:04.397" Score="5" ViewCount="1531" Body="&lt;p&gt;I'm just starting up with IMU's and I really want to work on my own flight controller, but a question always hits my mind and I am not able to find answer anywhere, so I'm here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Will multiple IMUs will help improving stability of a quadcopter? averaging out the values of all the multiple IMUs should reduce the drift, which is a function of time, but I have no experience with IMUs and just cant figure out about the amount of error correction by adding one extra IMU, will it be just additive? or Exponential? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sub&gt;This question was also posted on the &lt;em&gt;&lt;a href=&quot;https://electronics.stackexchange.com/q/304128/3774&quot;&gt;Electrical Engineering&lt;/a&gt;&lt;/em&gt; Stack Exchange site.&lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="11234" LastEditorUserId="37" LastEditDate="2017-05-09T09:52:50.283" LastActivityDate="2017-05-09T09:52:50.283" Title="Does multiple IMU increase accuracy" Tags="&lt;quadcopter&gt;&lt;imu&gt;&lt;accelerometer&gt;&lt;gyroscope&gt;&lt;gps&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12325" PostTypeId="1" CreationDate="2017-05-08T15:14:52.713" Score="4" ViewCount="6106" Body="&lt;p&gt;According to this document from Gazebo's &lt;strong&gt;&lt;a href=&quot;http://gazebosim.org/tutorials?tut=guided_b1&amp;amp;cat=&quot; rel=&quot;nofollow noreferrer&quot;&gt;(Beginner:Overview)&lt;/a&gt;&lt;/strong&gt; online web site, for the installation of Gazebo version &lt;strong&gt;7.0&lt;/strong&gt; on Ubuntu OS, these are the following System Requirements:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A dedicated GPU (Nvidia cards tend to work well in Ubuntu)&lt;/li&gt;&#xA;&lt;li&gt;A CPU that is at least an Intel I5, or equivalent.&lt;/li&gt;&#xA;&lt;li&gt;At least 500MB of free disk space,&lt;/li&gt;&#xA;&lt;li&gt;Ubuntu Trusty or later installed.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Then, I would like the following questions to clarify some doubts that I have:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;How much of &lt;strong&gt;RAM&lt;/strong&gt; memory is needed for good performance?&lt;/li&gt;&#xA;&lt;li&gt;Has anyone already tested &lt;strong&gt;Gazebo&lt;/strong&gt; with Intel HD Graphics?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerDisplayName="user16902" LastEditorUserId="9570" LastEditDate="2017-05-15T11:04:15.300" LastActivityDate="2019-01-22T13:06:18.103" Title="System Requirements for Gazebo" Tags="&lt;gazebo&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12326" PostTypeId="2" ParentId="12324" CreationDate="2017-05-08T15:24:40.520" Score="1" Body="&lt;p&gt;Multiple IMU systems are used to make more accurate measurements. However, the main purpose of these systems is to take multiple measurements and make use of the differences between these measurements to obtain the most accurate result. The use of multiple sensors in the robotics is used for measurement of different body parts. In order to increase the accuracy of measurement with the use of more than one IMU, the position and fusion method of the sensors are important. You probably will not see much change if you place each sensor at the same place or very close. However, if you are installing sensors for the center and arms separately for a multicopter, you can provide insulation by removing the arm vibrations (propeller or motor vibration). So you have made a more accurate measurement.&lt;/p&gt;&#xA;" OwnerUserId="9504" LastActivityDate="2017-05-08T15:24:40.520" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12327" PostTypeId="2" ParentId="12324" CreationDate="2017-05-08T15:35:24.550" Score="1" Body="&lt;p&gt;Already from a probability point of view one can argue that the standard deviation of the mean drift goes down when stacking multiple IMU's together. However, things might also turn out nastier when the odds are not in your favour (e.g. in the unlucky event that both IMU's have exactly the same drift).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are ways in which you can benefit much more from having multiple IMU's though, rather than just stacking them together. If placing them on different locations of the body, then you end up with more measurements than system states (i.e. an overdefined observation space). These different measurements can be combined using observers (e.g. by using a Kalman filter) to get much more accurate results.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Example:&#xA;Consider a 2D pendulum in a gravityless environment of length $r$ with two IMU's, located at $r/2$ and at $r$ from the joint to which the pendulum is connected. The centripetal acceleration measured at $r$ should be double that of the one measured at $r/2$ (i.e. $r\omega^2$ instead of $r\omega^2/2$, where $\omega$ is the rotational velocity of the pendulum). If it's not, then you know something is wrong. A bit of smart observing will (in most cases) help you track down the error.&lt;/p&gt;&#xA;" OwnerUserId="10547" LastEditorUserId="10547" LastEditDate="2017-05-08T15:39:08.993" LastActivityDate="2017-05-08T15:39:08.993" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12328" PostTypeId="2" ParentId="12324" CreationDate="2017-05-08T16:35:56.717" Score="1" Body="&lt;p&gt;For a quadcopter, I would argue that the benefit of multiple imu's does not justify the effort. The bias issue you mentioned &lt;em&gt;might&lt;/em&gt; be reduced but unless you can guarantee zero bias you still have to run the exact same bias compensation algorithms (which are pretty mature anyhow).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could try gain benefit by somehow averaging the redundant readings but even that's non-trivial because you have to account for how much of the differences in readings is due to difference sensor locations. While straight-forward theoretically, it still requires significant effort to implement correctly plus eats up cpu cycles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For robotics in general, multiple imu's are most useful in situations where parts move relative to each other (e.g., a robot arm with a sensor on different links). Quadcopter's are generally treated as rigid bodies; and if it's not rigid you need to put your effort into making it rigid.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2017-05-08T16:35:56.717" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12329" PostTypeId="2" ParentId="12276" CreationDate="2017-05-08T19:38:39.253" Score="0" Body="&lt;p&gt;First, the method you have followed should work quite well. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The pitot setup you mention already gives you differential pressure, which means all you have to do is convert the pressure data (whatever the unit) into airspeed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The pitot sensor page says that it's already used in APM 2.5 (ardupilot mega). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://ardupilot.org/plane/docs/airspeed.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this is general info for airspeed sensors, from APM web page&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://ardupilot.org/plane/docs/calibrating-an-airspeed-sensor.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;calibration technics and flight test procedures&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The basic formula is like this: dynamic pressure equals to 0.5 x rho x V^2 ;&#xA;Inversely &lt;/p&gt;&#xA;&#xA;&lt;p&gt;V = sqrt (P_dyn / (2x rho))&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Check your units of measurement (what is the unit of 504 in your reading?).&lt;/li&gt;&#xA;&lt;li&gt;Convert dynamic pressure to Pascals&lt;/li&gt;&#xA;&lt;li&gt;use a rough number for air density (1.225 kg/m3 at sea level). &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;And there you have Airspeed (V) in m/sec. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Good luck. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sorry for the bad notation. (Typed on mobile). &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;attention: your readings will be sensor local speed, and this can be quite important if you really want to get accurate results.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="9570" LastActivityDate="2017-05-08T19:38:39.253" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12330" PostTypeId="1" AcceptedAnswerId="12376" CreationDate="2017-05-09T01:13:45.457" Score="-1" ViewCount="5999" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/kLJMq.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kLJMq.png&quot; alt=&quot;root locos for the transfer function with matlab&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a transfer function and i want to calculate the speed of each pole and i do not know how to do that&lt;/p&gt;&#xA;" OwnerUserId="16907" LastActivityDate="2017-05-11T13:12:48.757" Title="Determining the speed of each pole for a transfer function" Tags="&lt;control&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="12332" PostTypeId="1" CreationDate="2017-05-09T07:43:13.560" Score="0" ViewCount="825" Body="&lt;p&gt;I am implementing a 3D pose estimation algoriothm on mobile device (Android) which has Gyro, Accelerometer and Magnetometer sensors. I have already develeoped a Visual SLAM algoirthm to estimate full 3D camera pose. I want to estimate same pose just by using these sensors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have seen the code for EKF based sensor fusion techniques, Attitude estiamtor, etc. But none of these give full 3D Pose. Insted these give only orientation (and not scale and translation)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could any one suggest an open source C++ implementation (Not using ROS) for the problem?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Few links which I have already found:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/simondlevy/TinyEKF&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/simondlevy/TinyEKF&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/AIS-Bonn/attitude_estimator&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/AIS-Bonn/attitude_estimator&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15563" LastActivityDate="2017-05-09T11:58:36.563" Title="Full 3D Pose (Scale, Rotation and Translation) Estimation using Gyro and Acceleromter sensors fusion" Tags="&lt;odometry&gt;&lt;pose&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12333" PostTypeId="2" ParentId="12332" CreationDate="2017-05-09T10:02:18.710" Score="1" Body="&lt;p&gt;I think you're looking at the problem the wrong way. Once you have an orientation, that gives you the transform between local (phone) and world coordinates. Then all you need to do is to transform your accelerometer data into the world frame and proceed with numeric integration.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-05-09T10:02:18.710" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12334" PostTypeId="2" ParentId="12332" CreationDate="2017-05-09T11:58:36.563" Score="2" Body="&lt;p&gt;The packages you've found don't estimate scale or 3d pose because that's not really feasible using just an imu. The only way to get 3d pose from an imu is to integrate acceleration (adjusting for attitude) but all real sensors have sensor bias so the error in the integration will grow unbounded. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To account for that, another sensor needs to be used to provide correction and bias estimation. In your case, the 3d pose estimation from the visual slam could perform this role. Other options include lidar based slam or gps.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2017-05-09T11:58:36.563" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12335" PostTypeId="1" CreationDate="2017-05-09T16:54:42.120" Score="0" ViewCount="171" Body="&lt;p&gt;I have a Large linear actuator from Hiwin, the serial number is LAS3-1-1-500-24GE. the data sheet for the LAS3 can be seen on page 18 of the following link: &lt;a href=&quot;http://www.hiwin.com/pdf/linear_actuators.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.hiwin.com/pdf/linear_actuators.pdf&lt;/a&gt; .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to be able to use this to generate some small sinusoidal motion in the actuator. The speed of this does not matter. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am looking to control this using an arduino uno and an H-bridge along with a power supply. For an example of the H-bridge: &lt;a href=&quot;https://www.amazon.co.uk/gp/product/B00M1JZ7HY/ref=ox_sc_act_title_1?smid=AONS7HEF348I5&amp;amp;psc=1&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.amazon.co.uk/gp/product/B00M1JZ7HY/ref=ox_sc_act_title_1?smid=AONS7HEF348I5&amp;amp;psc=1&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What would be the most convenient method of generating this sinusoidal motion? is an arduino and the linked H-bridge appropriate?&lt;/p&gt;&#xA;" OwnerUserId="16912" LastEditorUserId="37" LastEditDate="2017-05-10T13:14:09.830" LastActivityDate="2017-05-10T13:14:09.830" Title="Control method of large linear actuator" Tags="&lt;arduino&gt;&lt;control&gt;&lt;actuator&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2017-05-10T13:31:46.930" ContentLicense="CC BY-SA 3.0" />
  <row Id="12336" PostTypeId="1" AcceptedAnswerId="12341" CreationDate="2017-05-09T17:11:54.713" Score="1" ViewCount="3692" Body="&lt;p&gt;How do I create a push and pull mechanism using a standard hobby servo? Eg. SG-5010&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Preferably without the need of 3D printing. &lt;/p&gt;&#xA;" OwnerUserId="16913" LastEditorUserId="37" LastEditDate="2018-08-15T15:26:49.240" LastActivityDate="2018-08-15T15:26:49.240" Title="How to create push and pull mechanism using Servo" Tags="&lt;arduino&gt;&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;rcservo&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2017-05-10T13:00:38.990" ContentLicense="CC BY-SA 4.0" />
  <row Id="12338" PostTypeId="1" CreationDate="2017-05-09T18:44:02.057" Score="2" ViewCount="562" Body="&lt;p&gt;I'm trying to build the dynamic model of a 6DOF robot, and the company that has built it, kindly provides a document having the masses, centres of mass, principal axes of inertia and principal moments of inertia taken at the center of mass, taken at the center of mass and aligned with the output coordinate system, and taken at the output coordinate system (I've come to known that this was obtained from a tool in SolidWorks)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The robot has 6 actuators responsible for the motion of each one of the 6 links available. The problem that I have here is the way I should calculate the inertia matrix $M(q)$. Since the matrix has to have a 6x6 dimension, I know that I have to do some kind of &quot;combining&quot; between one link and the correspondent actuator. &#xA;The problem is that I don't really know how can I find the respective centre of mass between the two &quot;objects&quot; and the respective moment of inertia of the &quot;multiobject&quot;. I've seen people saying that it is simply the summation of the respective moments of inertia but they need to be in respect to the same orientation and translation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone shed some light into this? Suggestions would be greatly appreciated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="16543" LastActivityDate="2019-01-01T23:05:25.483" Title="Combining centres of mass and Inertia tensors" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;dynamics&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="12339" PostTypeId="2" ParentId="12335" CreationDate="2017-05-09T21:01:19.770" Score="2" Body="&lt;p&gt;The LAS3 actuator draws a current of 2.5 Amps @ 24Volts and has a DC motor, so the H-Bridge in the link can be used to control it. It is even a bit overdimensioned. You can link the Ardunio to the H Bridge. The PWM pin should be a PWM output of the Arduino and the Dir pin should be a digital output of the arduino. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Having a sinusoidal motion on the actuator is as simple as giving a pwm with a sinusoidal duty cycle (in absolute value, no negative values) form the arduino  and switching the direction output at the end of each sinus half period. You can read more about the Arduino PWM &lt;a href=&quot;https://www.arduino.cc/en/Tutorial/PWM&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems that your actuator is equipped with a linear optical sensor. To make a closed loop control, you need to downstep the signal voltages to the TTL  (arduino 5V) level and decode those signals in an arduino sketch. You can find more information here about decoding an encoder signal &lt;a href=&quot;http://playground.arduino.cc/Main/RotaryEncoders&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2017-05-09T21:01:19.770" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12340" PostTypeId="2" ParentId="8008" CreationDate="2017-05-10T00:57:11.050" Score="0" Body="&lt;p&gt;There is a mistake in calculating ds; it should be:&#xA; ds = L*vc instead of ds = vc&lt;/p&gt;&#xA;" OwnerUserId="16915" LastActivityDate="2017-05-10T00:57:11.050" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12341" PostTypeId="2" ParentId="12336" CreationDate="2017-05-10T01:47:27.043" Score="1" Body="&lt;p&gt;Really simply - suppose you want to push-pull a switch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You fix the servo and the switch (or any other manipulateable object) to some base.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then set the servo to center position, put the plastic cross/handle/other connecting element of servo in place such way, that its end point is in right angle to the switch (and fix it with a little screw to servo). The switch should be oriented such way, that it moves toward/from the end point. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then connect the switch and the endpoint with some hard rod (you can use wood or some piece of hard plastics for this. Cut the right shape/lenght with sharp knive). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then you loosely screw the rod to the endpoint of servo on one side and the switch (moved to central position) on other side.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;then if you rotate the servo toward the switch, it is pushed away by the rod, if you rotate the servo on the othe side, the switch is pulled back.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(It is wonderfull how many mechanical pieces you can do fast with simple piece of wood and sharp knife. Much faster, that to print them in 3D (design included). I do a lot of parts from wood, usually I do not need to re-make them later, when the machine is finished, from any &quot;better material&quot;, as the wood is good enought.)&lt;/p&gt;&#xA;" OwnerUserId="16496" LastActivityDate="2017-05-10T01:47:27.043" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="12342" PostTypeId="2" ParentId="12260" CreationDate="2017-05-10T03:44:36.103" Score="1" Body="&lt;p&gt;Josh, thank you for your help!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From my understanding it seems that a basic process for determining the velocity covariance matrices of a 3D (X,Y, Theta) robot with N wheels would then be (please correct me if I am wrong!):&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Define the state of the robot. For example, this could be (x Velocity $\dot{x}$, y velocity $\dot{y}$, theta velocity $\dot{\theta}$).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Define a mapping function $x=f_x(u), y=f_y(u), \theta=f_{\theta}(u)$ of the control inputs $u$ to the state variables. This would depend on the kinematic model of the robot. For example, the control inputs could be the wheel velocities $w_1, w_2, ..., w_n$ for $N$ wheels.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Place the robot at a reference position on the floor. Give control inputs to move it in the X direction (for e.g. 0.5 m/s), measure the real velocity the robot moved in X (e.g. 0.45 m/s). Repeat this several times for the forward direction, and obtain the standard deviation in x velocity based on statistical measurements. Do the same process for y velocity and Theta velocity.&#xA;This constant covariance matrix we will call Q:&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;Q = \begin{bmatrix}&#xA;\sigma_{\dot{x}}^2 &amp;amp;0  &amp;amp;0 \\ &#xA; 0&amp;amp;  \sigma_{\dot{y}}^2&amp;amp;0 \\ &#xA; 0&amp;amp;  0&amp;amp; \sigma_{\dot{\theta}^2}&#xA;\end{bmatrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;3&quot;&gt;&#xA;&lt;li&gt;&lt;p&gt;Compute the transition matrix $F$, which is constructed from the jacobian of the state function $f$ with respect to the states. Refer to &lt;a href=&quot;https://en.wikipedia.org/wiki/Extended_Kalman_filter&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia&lt;/a&gt; for the matrix equations.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Define the sensor model. This maps the state variables to sensor values. For wheeled robots with $N$ encoders $p_1, p_2, ..., p_N$, this would be a map of the form $p_1 = h_1(\dot{x},\dot{y},\dot{\theta});p_2 = h_2(\dot{x},\dot{y},\dot{\theta});... $. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Define the sensor error covariance matrix $R$. A wheel can be turned to a specific value, and the real measurements compared with the encoder outputs. When done several times, its statistics can be determined (similar to above):&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;R = \begin{bmatrix}&#xA;\sigma_{p_1}^2 &amp;amp;0  &amp;amp;0 \\ &#xA; 0&amp;amp;  \sigma_{p_2}^2&amp;amp;0 \\ &#xA; 0&amp;amp;  0&amp;amp; ...&#xA;\end{bmatrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;6&quot;&gt;&#xA;&lt;li&gt;&lt;p&gt;Compute the matrix $H$, as the jacobian of the sensor model function $h$ to the state variables.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Now you can start the kalman filter loop. Choose matrix $P_0$ as an initial guess (you can choose all 0 for the beginning). Follow the equations in &lt;a href=&quot;https://en.wikipedia.org/wiki/Extended_Kalman_filter&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia&lt;/a&gt; and solve for the state and odometry covariance matrix $P$ at every frame! This result (state, covariance) can be read by for example, the robot_localization package in ROS to fuse several sets of data and get a better odometry approximation!&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;P.S. I am not really sure if this is correct, but I hope someone can tell me if it is (or any mistakes that I may have done along the way!)!&lt;/p&gt;&#xA;" OwnerUserId="16830" LastEditorUserId="16830" LastEditDate="2017-05-10T03:50:31.050" LastActivityDate="2017-05-10T03:50:31.050" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12343" PostTypeId="2" ParentId="12338" CreationDate="2017-05-10T03:54:28.303" Score="0" Body="&lt;p&gt;&lt;a href=&quot;http://studywolf.wordpress.com/2013/09/07/robot-control-3-accounting-for-mass-and-gravity/amp/&quot; rel=&quot;nofollow noreferrer&quot;&gt;This site about robotics&lt;/a&gt; walks you through how you can define the link inertias in the local frame, then use transformations to come up with $M$.  It is pretty straightforward.  Just remember to define link parameters locally, then premultipy by the appropriate transformation. &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2017-05-10T03:54:28.303" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="12345" PostTypeId="1" AcceptedAnswerId="12377" CreationDate="2017-05-10T04:43:53.413" Score="1" ViewCount="896" Body="&lt;p&gt;I'm familiar with Chebychev-Kutzbach-Grubler method to determine degree of freedom of a robot arm. But it seems this method fails to calculate the mobility of some parallel robots, as explained &lt;a href=&quot;http://dx.doi.org/10.1109/ISCID.2015.163&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However I cannot understand screw theory well and I do not know how to apply it to determine DOF.&#xA;So I wanna know what is the idea behind screw method to determine DOF?&#xA;And could anyone explain with a simple example how Screw method works?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;EDIT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could you please explain how we can determine total DOF of ,for example, SCARA Arm via screw method?&#xA;&lt;a href=&quot;https://i.stack.imgur.com/F4QDm.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/F4QDm.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="16865" LastEditorUserId="110" LastEditDate="2021-01-23T20:19:12.650" LastActivityDate="2021-01-23T20:19:12.650" Title="Different methods to determine DOF: Chebychev-Kutzbach-Grubler method vs. Screw method" Tags="&lt;mechanism&gt;&lt;manipulator&gt;&lt;screw-theory&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12347" PostTypeId="2" ParentId="12315" CreationDate="2017-05-10T11:30:18.453" Score="1" Body="&lt;p&gt;You have to differ between motion planning and control approaches:&#xA;What you want is control (no fancy planning algorithms in the loop).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding the IK problem, this is the lib that you want to use:&#xA;&lt;a href=&quot;https://bitbucket.org/traclabs/trac_ik&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://bitbucket.org/traclabs/trac_ik&lt;/a&gt;&#xA;It is amazingly fast and super easy to use (given you have a URDF description of your robot). And it combines different IK approaches that run concurrently under the hood.&#xA;It is also available as a ROS package.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BUT: You have to take care about pose changes! So with a six / seven axis robot you can reach TCP poses with a variety of joint configurations. And if you just query the IK algorithm, it could spit out altering configurations, which would mean huge motions for your robot.&#xA;So thats why TracIK must be initialized with the current joint angles, so that it can chose a solution that is similar to the current one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On top I would suggest a sanity check (accumulated joint distance threshold), so that you do not execute jumps, if Trac delivers a solution that implies a configuration change.&lt;/p&gt;&#xA;" OwnerUserId="9208" LastActivityDate="2017-05-10T11:30:18.453" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12349" PostTypeId="1" AcceptedAnswerId="12384" CreationDate="2017-05-10T13:52:44.527" Score="0" ViewCount="74" Body="&lt;p&gt;This is my first project using Bluetooth module HC-05. I am using two of these modules. One is connected to an Arduino Nano(slave) and another one is connected to an Arduino Uno(master). I have paired them through AT commands.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For testing, I was giving a pulse in pin 7 on the Nano. If there is a pulse, then slave will send character &quot;1&quot;. If not, then it will send &quot;0&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the Uno there is an LED connected to pin 13. If the master receives '1', then the LED will on and if receives '0', the LED will remain off.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;here is my source code ----------&lt;/p&gt;&#xA;&#xA;&lt;p&gt;slave code=&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/tkmSx.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tkmSx.png&quot; alt=&quot;slave code&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;master code=&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/AENgf.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/AENgf.png&quot; alt=&quot;master code&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Arduino IDE isn't showing any bug, but the code is not working at all. Although I am giving a pulse in pin 7 of the Nano, the LED is remaining off in the Uno. I am at a loss now. I have a lot to do after this and my project submission is knocking at the door. Please help me as soon as possible.&lt;/p&gt;&#xA;" OwnerUserId="16491" LastEditorUserId="14782" LastEditDate="2017-05-13T07:11:58.120" LastActivityDate="2017-05-15T11:04:05.627" Title="How to work with arduino softwareserial communication?" Tags="&lt;arduino&gt;&lt;communication&gt;" AnswerCount="1" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="12351" PostTypeId="2" ParentId="12345" CreationDate="2017-05-10T16:42:44.133" Score="0" Body="&lt;p&gt;The most popular introductory text for screw theory on robotics is &quot;A mathematical introduction to robotic manipulation&quot; which can be found &lt;a href=&quot;http://www.cds.caltech.edu/~murray/books/MLS/pdf/mls94-complete.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; for free.  A more mathematically advanced text (perhaps too advanced) is &quot;Geometric Fundamentals of robotics&quot; but it is not free. Another text discussing screw theory is &quot;Rigid Body Dynamics algorithms&quot; by Roy Featherstone. You might want to check his &lt;a href=&quot;http://royfeatherstone.org/spatial/index.html#spatial-software&quot; rel=&quot;nofollow noreferrer&quot;&gt;website&lt;/a&gt;, he has some introductory material before he goes to the full-blown dynamics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am probably oversimplifying things, but a screw is a 6D vector that has the linear and the rotational velocity of movement and is accompanied by a wrench which is a 6D vector with the linear forces and the torques. They might look like they are two 3D vectors stacked together, and is some cases behave like that, but they have their own vector properties.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The paper you are referencing should make more sense once you read Chapter 2 and 3 of the book I am linking.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this will give you a good starting point.&lt;/p&gt;&#xA;" OwnerUserId="16911" LastActivityDate="2017-05-10T16:42:44.133" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12352" PostTypeId="1" CreationDate="2017-05-10T19:28:45.003" Score="0" ViewCount="44" Body="&lt;p&gt;How robot industry perceives the idea about the use of universal humanoid robots for the &lt;strong&gt;agile, rapidly reconfigurable&lt;/strong&gt; manufacturing and services? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there examples of such use? E.g. are there examples of use of Nao robots or similar robots in food industriy (where manual work is required) and in hotel services? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And do the developers of humanoid robots take into account the potential use of their products in the manufacturing and services?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Aparently the manufacturing worflow rapidly evolves and universal, multi-functional robots can be especially suitable for such use.&lt;/p&gt;&#xA;" OwnerUserId="809" LastActivityDate="2017-05-11T00:32:40.757" Title="Use of universal humanoid robots for lean and agile manufacturing and services?" Tags="&lt;industrial-robot&gt;&lt;humanoid&gt;&lt;manufacturing&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2017-05-11T09:36:57.713" ContentLicense="CC BY-SA 3.0" />
  <row Id="12354" PostTypeId="2" ParentId="12352" CreationDate="2017-05-11T00:32:40.757" Score="1" Body="&lt;p&gt;There is the problem, that human-like robots are not yet able to move as reliably as humans. Not far ago was there content for robots to get out of car, walk to doors, open the handle and walk inside - a lot of participants failed miserably at such &quot;simple&quot; work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is so much possibilities for movements, lot of inertia, not well defined ground and not perfect visual recognition in real time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand machine-like robots can move on rails, have perfect information about its position, only few axes, all programmed for optimal movement and stable envirnment. They are able to do limited number of action much faster and with a lot higher precision, than humans can.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So for ongoing couple of years the non-human robots would be used more, as it is much simple to get much better result from them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only field, where human looking robots can be better is interraction with people, for psychological reasons. But while from X-Y-Z laser you expect getting some king of high-tech program and then cut material fast and effectively, doing many times the same movements, form human looking robot you would expect human-like behavior, mainly ability to recognize gestures and face-expression, native language and vague defined commands like &quot;I would like something sweet, but without too much suggar and rather mildly flavoured as I am on the diet&quot; - which is a too much more difficult task to respond as expected from human like inteligent being.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And the reconfigurability is higher if you can just change some robotic arm ot drilling tool, in contrast to difficulty to teach effectively manage tool designed for human hands (which cannot be hold as firm and in perfect position, as something, where you screw two linear plates together to make standardized connection and wire the motor to the driver, instead of pressing some oddly shaped switch with hand full of servos.&lt;/p&gt;&#xA;" OwnerUserId="16496" LastActivityDate="2017-05-11T00:32:40.757" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12355" PostTypeId="1" AcceptedAnswerId="12365" CreationDate="2017-05-11T03:36:34.123" Score="2" ViewCount="949" Body="&lt;p&gt;In some papers and books we can see that authors using symbols to represent robot arms. My question is, is there a convention for such sketches? If so could you provide a reference which shows how these symbols should be used?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/t67hk.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/t67hk.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/NFvnI.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/NFvnI.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="16865" LastEditorUserId="16865" LastEditDate="2017-05-11T04:02:10.260" LastActivityDate="2019-02-12T12:41:28.270" Title="Symbolic Representaion of Links and Joints: How to sketch complex manipulators using simple symbols?" Tags="&lt;manipulator&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12357" PostTypeId="5" CreationDate="2017-05-11T11:57:47.033" Score="0" Body="&lt;p&gt;A &lt;strong&gt;P&lt;/strong&gt;rogrammable &lt;strong&gt;L&lt;/strong&gt;ogic &lt;strong&gt;C&lt;/strong&gt;ontroller (&lt;strong&gt;PLC&lt;/strong&gt;), or programmable controller is an industrial digital computer which has been ruggedised and adapted for the control of manufacturing processes, such as assembly lines, or robotic devices, or any activity that requires high reliability control and ease of programming and process fault diagnosis.&lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-05-11T14:17:32.773" LastActivityDate="2017-05-11T14:17:32.773" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12358" PostTypeId="4" CreationDate="2017-05-11T11:57:47.033" Score="0" Body="A programmable logic controller (PLC), or programmable controller is an industrial digital computer which has been ruggedised and adapted for the control of manufacturing processes, such as assembly lines, or robotic devices, or any activity that requires high reliability control and ease of programming and process fault diagnosis." OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-05-11T14:18:43.933" LastActivityDate="2017-05-11T14:18:43.933" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12359" PostTypeId="5" CreationDate="2017-05-11T11:58:45.343" Score="0" Body="&lt;p&gt;Air muscle or Pneumatic artificial muscles (PAMs) are contractile or extensional devices operated by pressurized air filling a pneumatic bladder. In a vague approximation of human muscles, PAMs are usually grouped in pairs: one agonist and one antagonist.&lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-05-11T14:18:08.057" LastActivityDate="2017-05-11T14:18:08.057" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12360" PostTypeId="4" CreationDate="2017-05-11T11:58:45.343" Score="0" Body="Air muscle or Pneumatic artificial muscles (PAMs) are contractile or extensional devices operated by pressurized air filling a pneumatic bladder. In a vague approximation of human muscles, PAMs are usually grouped in pairs: one agonist and one antagonist." OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-05-11T14:17:39.643" LastActivityDate="2017-05-11T14:17:39.643" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12361" PostTypeId="5" CreationDate="2017-05-11T12:00:40.743" Score="0" Body="&lt;p&gt;Gait is the pattern of movement of the limbs of animals, including robots, during locomotion over a solid substrate. Most animals use a variety of gaits, selecting gait based on speed, terrain, the need to maneuver, and energetic efficiency. &lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-05-11T14:17:30.033" LastActivityDate="2017-05-11T14:17:30.033" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12362" PostTypeId="4" CreationDate="2017-05-11T12:00:40.743" Score="0" Body="Gait is the pattern of movement of the limbs of animals, including robots, during locomotion over a solid substrate. Most animals use a variety of gaits, selecting gait based on speed, terrain, the need to maneuver, and energetic efficiency. " OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-05-11T14:17:27.400" LastActivityDate="2017-05-11T14:17:27.400" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12363" PostTypeId="5" CreationDate="2017-05-11T12:01:47.660" Score="0" Body="&lt;p&gt;The RepRap is a low-cost 3D printer that can print most of its own components, but it is now made up of hundreds of collaborators world wide. RepRap is short for replicating rapid prototyper.&lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="15160" LastEditDate="2018-10-08T15:04:14.853" LastActivityDate="2018-10-08T15:04:14.853" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12364" PostTypeId="4" CreationDate="2017-05-11T12:01:47.660" Score="0" Body="The RepRap is a low-cost 3D printer that can print most of its own components, but it is now made up of hundreds of collaborators world wide. RepRap is short for replicating rapid prototyper." OwnerUserId="9504" LastEditorUserId="15160" LastEditDate="2018-10-08T15:04:10.907" LastActivityDate="2018-10-08T15:04:10.907" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12365" PostTypeId="2" ParentId="12355" CreationDate="2017-05-11T12:06:33.200" Score="1" Body="&lt;p&gt;There are usually only two kinds of joints you would use in a robot - a revolute (rotational) joint and a prismatic (translational) joint. Every reference I've seen uses a cylinder to represent revolute joints and a cube or prism to represent a prismatic joint. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might be able to argue that a cylinder should represent a cylindrical joint, but in reality a cylindrical joint is a combination revolute and prismatic joint. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are spherical (ball) joints, but I have never seen an actuated spherical joint before. They're more used as a kinematic constraint in shoulder joints or suspension design, in which cases the joint is a &lt;em&gt;pivot&lt;/em&gt; and the &lt;em&gt;actuation&lt;/em&gt; is still done by prismatic joints.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-05-11T12:06:33.200" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12366" PostTypeId="5" CreationDate="2017-05-11T12:08:09.413" Score="0" Body="&lt;p&gt;Robotic systems that have more components or individuals to accomplish a task are called redundant-robots.&lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="15160" LastEditDate="2018-08-31T15:16:09.077" LastActivityDate="2018-08-31T15:16:09.077" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12367" PostTypeId="4" CreationDate="2017-05-11T12:08:09.413" Score="0" Body="Robotic systems that have more components or individuals to accomplish a task are called redundant-robots." OwnerUserId="9504" LastEditorUserId="15160" LastEditDate="2018-08-31T15:15:54.353" LastActivityDate="2018-08-31T15:15:54.353" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12368" PostTypeId="5" CreationDate="2017-05-11T12:09:44.930" Score="0" Body="&lt;p&gt;Automation or automatic control, is the use of various control systems for operating equipment such as machinery, processes in factories, boilers and heat treating ovens, switching on telephone networks, steering and stabilization of ships, aircraft and other applications and vehicles with minimal or reduced human intervention. Some processes have been completely automated.&lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-05-11T14:18:15.080" LastActivityDate="2017-05-11T14:18:15.080" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12369" PostTypeId="4" CreationDate="2017-05-11T12:09:44.930" Score="0" Body="Automation or automatic control, is the use of various control systems for operating equipment such as machinery, processes in factories, boilers and heat treating ovens, switching on telephone networks, steering and stabilization of ships, aircraft and other applications and vehicles with minimal or reduced human intervention. Some processes have been completely automated." OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-05-11T14:18:04.743" LastActivityDate="2017-05-11T14:18:04.743" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12370" PostTypeId="5" CreationDate="2017-05-11T12:11:37.530" Score="0" Body="&lt;p&gt;Association football, more commonly known as football or &lt;strong&gt;soccer.&lt;/strong&gt; A &lt;strong&gt;soccer robot&lt;/strong&gt; is a specialized autonomous robot and mobile robot that is used to play variants of soccer.&lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-05-11T14:18:11.660" LastActivityDate="2017-05-11T14:18:11.660" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12371" PostTypeId="4" CreationDate="2017-05-11T12:11:37.530" Score="0" Body="Association football, more commonly known as football or soccer. A soccer robot is a specialized autonomous robot and mobile robot that is used to play variants of soccer." OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-05-11T14:18:01.543" LastActivityDate="2017-05-11T14:18:01.543" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12372" PostTypeId="5" CreationDate="2017-05-11T12:12:21.940" Score="0" Body="&lt;p&gt;Swarm robotics is an approach to the coordination of multirobot systems which consist of large numbers of mostly simple physical robots. It is supposed that a desired collective behavior emerges from the interactions between the robots and interactions of robots with the environment. This approach emerged on the field of artificial swarm intelligence, as well as the biological studies of insects, ants and other fields in nature, where swarm behaviour occurs.&lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-05-11T14:17:20.943" LastActivityDate="2017-05-11T14:17:20.943" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12373" PostTypeId="4" CreationDate="2017-05-11T12:12:21.940" Score="0" Body="Swarm robotics is an approach to the coordination of multirobot systems which consist of large numbers of mostly simple physical robots. It is supposed that a desired collective behavior emerges from the interactions between the robots and interactions of robots with the environment. " OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-05-11T14:18:23.287" LastActivityDate="2017-05-11T14:18:23.287" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12374" PostTypeId="5" CreationDate="2017-05-11T12:13:29.423" Score="0" Body="&lt;p&gt;Visual servoing, also known as vision-based robot control and abbreviated VS, is a technique which uses feedback information extracted from a vision sensor (visual feedback) to control the motion of a robot. One of the earliest papers that talks about visual servoing was from the SRI International Labs in 1979.&lt;/p&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-05-11T14:18:48.643" LastActivityDate="2017-05-11T14:18:48.643" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12375" PostTypeId="4" CreationDate="2017-05-11T12:13:29.423" Score="0" Body="Visual servoing, also known as vision-based robot control and abbreviated VS, is a technique which uses feedback information extracted from a vision sensor (visual feedback) to control the motion of a robot. One of the earliest papers that talks about visual servoing was from the SRI International Labs in 1979." OwnerUserId="9504" LastEditorUserId="9504" LastEditDate="2017-05-11T14:16:56.890" LastActivityDate="2017-05-11T14:16:56.890" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12376" PostTypeId="2" ParentId="12330" CreationDate="2017-05-11T13:12:48.757" Score="2" Body="&lt;p&gt;What are you doing that you're being asked to find the speed of a pole? If this is a course (online or actual), then I would expect the material would have been covered already. Any time I've heard of &quot;speed&quot; mention with regards to a pole, it's how &quot;fast&quot; or &quot;slow&quot; the pole is, which means how far or close the pole is to the imaginary axis (respectively). A pole that is very close to the imaginary axis will take a long time to settle; one that is very far from the imaginary axis will settle very quickly. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is how you get into the &quot;dominant pole(s)&quot; or &quot;dominant response&quot; - the &quot;faster&quot; dynamics (poles) settle quickly and the &quot;slower&quot; dynamics (poles) are left, and so at the medium- to long-term, the only observable dynamics are those of the &quot;slower&quot; poles. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I remember learning to compare pole speed by looking at their natural frequencies, but in researching for your question I've seen several posts stating it's the distance from the imaginary axis (-$\xi \omega_n$), which I believe makes more sense than just the natural frequency ($\omega_n$).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From &lt;a href=&quot;http://www.facstaff.bucknell.edu/mastascu/econtrolhtml/pid/pid1a.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this site&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In this system, as the poles begin to move from the open loop poles, the &quot;slow&quot; pole (It doesn't move slower, but because it is closer to the imaginary axis the response due to that pole is slower.) at s = -1 initially moves to the left, indicating a faster response in that component of the response.  The &quot;fast&quot; pole starts from s = -2, and move to the right, indicating that that portion of the response slows down.  Still, the overall effect will be a speedup in the system, at least until the poles become complex.  You can see that in this clip that shows the unit step response of the system with the root locus above.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://engineering.purdue.edu/~sundara2/misc/ece380_notes.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here&lt;/a&gt; is a PDF on control engineering that makes numerous references to how fast the system responds with respect to damping ratios and natural frequencies. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So again, I would imagine you didn't ask yourself to do this problem, so &lt;em&gt;talk to the person that gave you the problem&lt;/em&gt; and ask them what they mean when they say speed. If I had to guess, I would say to find $-\xi \omega_n$ for each pole. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-05-11T13:12:48.757" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="12377" PostTypeId="2" ParentId="12345" CreationDate="2017-05-11T20:26:09.423" Score="3" Body="&lt;p&gt;I will try not to skip too many steps. Assuming a Global coordinate frame at the base and the arm is fully extended along the &lt;strong&gt;Y&lt;/strong&gt;-axis of the base frame. &#xA;&lt;a href=&quot;https://i.stack.imgur.com/HE9ds.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HE9ds.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since SCARA has four joints, we will create four 6D spatial vectors (screws) ${ξ}_{i}$ with respect to a global coordinate frame. Keep in mind that &lt;strong&gt;all spatial vectors are described with respect to the global frame&lt;/strong&gt;. Also ${ξ}_{i}$ will describe the axis around which rotation takes place and along which translation takes place. Basically, we assume a screw motion for every joint along its &lt;strong&gt;Z&lt;/strong&gt;-axis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first three elements of vector ${ξ}_{1}$ (for joint 1) will the linear velocity on the screw axis, let's call it ${v}_{i}$. The last three elements are the rotation of the joint with respect to the global coordinate frame, regardless if there are other joints preceding it. Let's call it ${ω}_{i}$ and it will always be a unit vector.$${ξ}_{ι}=\left[{\begin{matrix}{v}_{i}\\{ω}_{i} \end{matrix}}\right]$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the first joint the axis of rotation coincides with the global &lt;strong&gt;Z&lt;/strong&gt;-axis. Therefore ${ω}_{1}$ is $${ω}_{1}=\left[{\begin{matrix}0\\0\\1 \end{matrix}}\right]$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are not sure how I came up with it consider the following. if the z axis of the joint was along the y axis of the global frame then the ${ω}_{1}$ would be $${ω}_{y}=\left[{\begin{matrix}0\\1\\0 \end{matrix}}\right]$$. if it was along the x-axis then it would be $${ω}_{x}=\left[{\begin{matrix}1\\0\\0 \end{matrix}}\right]$$. And of course it was along the z axis but pointing downwards then: $${ω}_{-z}=\left[{\begin{matrix}0\\0\\-1 \end{matrix}}\right]$$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now let's focus on ${v}_{1}$. We need a point ${q}_{1}$ that will give us the distance of the joint from the origin. The distance is L1 along the z-axis, therefore: $${q}_{1}=\left[{\begin{matrix}0\\0\\L1 \end{matrix}}\right]$$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;We rotate ${q}_{1}$ with the unit angular velocity ${ω}_{1}$ (cross product) and we have $${v}_{1}=\left[-{ω}_{1} \times {q}_{1} \right] =- \left[{\begin{matrix}0\\0\\1 \end{matrix}}\right] \times \left[{\begin{matrix}0\\0\\L1 \end{matrix}}\right] = \left[{\begin{matrix}0\\0\\0 \end{matrix}}\right] $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore $${ξ}_{1}=\left[{\begin{matrix}{v}_{1}\\{ω}_{1} \end{matrix}}\right]=\left[{\begin{matrix}0\\0\\0\\0\\0\\1 \end{matrix}}\right]$$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Simillarly we have $${ξ}_{2}=\left[{\begin{matrix}{v}_{2}\\{ω}_{2} \end{matrix}}\right]=\left[{\begin{matrix}L2\\0\\0\\0\\0\\1 \end{matrix}}\right]$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the third joint the ${ω}_{3}$ is &lt;strong&gt;0&lt;/strong&gt; because it is prismatic and ${v}_{3}$ is the unit vector $${v}_{3}=\left[{\begin{matrix}0\\0\\1 \end{matrix}}\right]$$ making ${ξ}_{3}$ $${ξ}_{3}=\left[{\begin{matrix}{v}_{3}\\0 \end{matrix}}\right]=\left[{\begin{matrix}0\\0\\1\\0\\0\\0 \end{matrix}}\right]$$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For joint 4 $${v}_{4}=-\left[{\begin{matrix} 0\\0\\1\end{matrix}}\right] \times \left[{\begin{matrix}0\\L2+L3\\L1-d1\end{matrix}}\right] = \left[{\begin{matrix}0\\L2+L3\\0\end{matrix}}\right]$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$${ξ}_{4}=\left[{\begin{matrix}0\\L2+L3\\0\\0\\0\\1\end{matrix}}\right]$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now the spatial vectors ${ξ}_{i}$ describe the axes of rotation of all the joints. Keep in mind that some authors have $v$ and $ω$ switch places. For example the paper you are mentioning. This is fine as long as you are consistent throughout. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This example is being worked out in &quot;A mathematical introduction to robotic manipulation&quot; I have linked in my previous answer on page 88. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;These are the basics of the screw theory description. Similarly we can create a wrench 6D vector &lt;strong&gt;φ&lt;/strong&gt; with the linear and the angular (torques) forces. As you can tell by now, screw theory is a method to describe the manipulator (like the DH parameters) and not a mobility formula like the Chebychev-Kutzbach-Grubler method. The paper you are referencing stacks the spatial vectors (it calls them twists) ${ξ}_{i}$ and the wrenches ${φ}{i}$ to create a twist matrix and then analyze their constraint using the union and the reciprocal of the twists. Those are vector functions that the screw theory can take advantage of.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not sure if my answer helps you but the paper you are mentioning requires a relatively strong understanding of screw theory and vector algebra to make sense.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please let me know if you need more clarifications.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cheers.&lt;/p&gt;&#xA;" OwnerUserId="16911" LastActivityDate="2017-05-11T20:26:09.423" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12378" PostTypeId="1" AcceptedAnswerId="12427" CreationDate="2017-05-12T02:44:39.577" Score="0" ViewCount="603" Body="&lt;p&gt;I'm struggling to find the DH parameters for this PUMA-type manipulator that yield the same results as the author (1):&#xA;&lt;a href=&quot;https://i.stack.imgur.com/HzYxf.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HzYxf.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The way I'm checking if the parameters I have are correct is by comparing the resulting J11, J21 &amp;amp; J22 matrices with the author. These sub-matrices are the constituents of the wrist Jacobian matrix (Jw).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried many different combinations of the DH parameters including:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&amp;#945;&#xA;=[0,90,0,-90,90,-90]&lt;br&gt;&#xA; &amp;#952;&#xA;=[0,0,0,0,0,0]&lt;br&gt;&#xA;a=[0,0,a2,-a3,0,0]&lt;br&gt;&#xA;d=[d1,-d2,0,-d4,0,0]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which result in the same matrices as the author except for some minor differences. The general wrist Jacobian matrix and the sub-matrices obtained by the author are given by:  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/K0vvn.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/K0vvn.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Whereas the result I got for J11 was:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\left[&#xA;\begin{array}{ccc}&#xA; -d_2 c_1-s_1 (a_2 c_2-a_3 c_{23}+d_4 s_{23}) &amp;amp; c_1 (d_4 c_{23}-a_2 s_2+a_3 s_{23}) &amp;amp; c_1 (d_4 c_{23}+a_3 s_{23}) \\&#xA; c_1 (a_2 c_2-a_3 c_{23}+d_4 s_{23})-d_2 s_1 &amp;amp; s_1 (d_4 c_{23}-a_2 s_2+a_3 s_{23}) &amp;amp; s_1 (d_4 c_{23}+a_3 s_{23}) \\&#xA; 0 &amp;amp; a_2 c_2-a_3 c_{23}+d_4 s_{23} &amp;amp; d_4 s_{23}-a_3 c_{23} \\&#xA;\end{array}\right]&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And for the J22 matrix I got:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\left[&#xA;\begin{array}{ccc}&#xA; -c_1 s_{23} &amp;amp; c_4 s_1+c_1 c_{23} s_4 &amp;amp; s_1 s_4 s_5-c_1 (c_3 (c_5 s_2+c_2 c_4 s_5)+s_3 (c_2 c_5-c_4 s_2 s_5)) \\&#xA; -s_1 s_{23} &amp;amp; c_{23} s_1 s_4-c_1 c_4 &amp;amp; -c_5 s_1 s_{23}-(c_2 c_3 c_4 s_1-c_4 s_2 s_3 s_1+c_1 s_4) s_5 \\&#xA; c_{23} &amp;amp; s_{23} s_4 &amp;amp; c_{23} c_5-c_4 s_{23} s_5 \\&#xA;\end{array}\right]&#xA;$$&#xA;And the same J12 matrix as the author.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Perhaps the most pronounced difference here is that every Sin&#xA;  [&#xA;  &#xA;   &amp;#952;2&#xA;   +&#xA;   &amp;#952;3&#xA;  &#xA;  ]&#xA; &#xA; is replaced with  Cos&#xA;  [&#xA;  &#xA;   &amp;#952;2&#xA;   +&#xA;   &amp;#952;3&#xA;  &#xA;  ]&#xA; &#xA; and vice versa, in addition to some sign differences.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where am I going wrong here?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;(1) Wenfu Xu, Bin Liang, Yangsheng Xu, &quot;Practical approaches to handle the singularities of a wrist-partitioned space manipulator&quot;.&lt;/em&gt; &lt;/p&gt;&#xA;" OwnerUserId="16685" LastEditorUserId="9720" LastEditDate="2017-05-23T11:43:32.573" LastActivityDate="2017-05-23T12:02:24.757" Title="DH parameters of a PUMA-type manipulator" Tags="&lt;robotic-arm&gt;&lt;manipulator&gt;&lt;dh-parameters&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="12379" PostTypeId="1" CreationDate="2017-05-12T04:43:50.270" Score="0" ViewCount="67" Body="&lt;p&gt;I am writing some logic for a PID controlled catapult (In order to improve precision). That is all fine and well. However, if, for some reason, the encoder wire disconnects, the motor spins continuously in the opposite direction, which breaks my catapult. To solve this, I would like to write a function to catch the failure of the wire, and use that to switch the runmode to not using the encoder. I have both control functions working properly. My issue is the transition. How can I detect when an encoder disconnects.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt;&#xA;I have thought about writing a function to checks the return value of the encoder to see if it is disconnected, but I no not know what is returned by the getPosition function when the encoder is disconnected. Is it 0, is it null, or is it something else entirely?&lt;/p&gt;&#xA;" OwnerUserId="14767" LastActivityDate="2017-05-12T11:16:47.600" Title="Can you detect if encoder wire is connected on a motor?" Tags="&lt;motor&gt;&lt;first-robotics&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="12380" PostTypeId="1" AcceptedAnswerId="12382" CreationDate="2017-05-12T05:42:10.827" Score="0" ViewCount="52" Body="&lt;p&gt;Bit of an engineering question. If a snake robot is 100 cm long, and every 10 cm is another motor. Would the robot lift more weight, the longer/more motors attached to it.. or is lifting ability solely based on a single motor lifting.&lt;/p&gt;&#xA;" OwnerUserId="16938" LastEditorUserId="16938" LastEditDate="2017-05-13T22:01:40.653" LastActivityDate="2017-05-14T23:00:14.727" Title="Will this have more or less lifting strength" Tags="&lt;motor&gt;&lt;power&gt;&lt;stepper-motor&gt;&lt;torque&gt;&lt;force&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="12382" PostTypeId="2" ParentId="12380" CreationDate="2017-05-12T11:14:03.733" Score="3" Body="&lt;p&gt;Every action has an equal and opposite reaction. Each motor/joint in a linear chain of actuators (snake) needs to be capable of supplying the &lt;em&gt;appropriate&lt;/em&gt; reaction forces. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This mean that, if you have a 100cm long snake robot with a motor every 10cm, the first/&quot;neck&quot; joint (at 10cm) needs to support 8 other motors and 90cm of snake body. The second joint needs to support 7 other motors and 80cm of snake. This chain continues. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So no, making it longer and/or adding more motors doesn't really help anything because you'll need to make the existing motors bigger to be able to handle extra length and new motor(s). The new motors don't &quot;help&quot; because they provide a reaction force/torque which just gets passed off to the next actuator. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The existing actuators wind up still &quot;seeing&quot; all the load forces that the new motors are trying to interact with, but now they have to carry the bonus motors in addition to the load.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-05-12T11:14:03.733" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12383" PostTypeId="2" ParentId="12379" CreationDate="2017-05-12T11:16:47.600" Score="2" Body="&lt;p&gt;If you have a situation where your motor can break your system, for a small DC motor then rather than relying on a solution which requires the software to detect the condition, instead add limit switches to prevent it running beyond a point by inserting a diode in series with the motor when the switch is activated. For BLDC motors or more powerful motors then have the limit switches feed into the controller instead. If the limit switches are not in series with the motor, then use normally closed ones so a disconnection also trips the fault condition.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it is a open collector optical encoder, then you will already be using pull-up resistors and still get consistent values when fully disconnected, so detect the case that the motor is running for more than a given timeout with the encoder state not changing. An intermittent disconnection is harder to detect as it may produce valid sequences of pulses ( you don't state whether it's a single or dual pulse encoder; a dual one will have invalid sequences that can be detected), in which case limit switches would again be a reliable answer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you don't have a suitable mechanism to use a mechanical limit switch, then optical detectors can be used instead. &lt;/p&gt;&#xA;" OwnerUserId="1321" LastActivityDate="2017-05-12T11:16:47.600" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12384" PostTypeId="2" ParentId="12349" CreationDate="2017-05-12T14:43:47.627" Score="2" Body="&lt;p&gt;I had connected some pins the wrong way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I had connected the &quot;EN&quot; pin with 5V even after pairing. I was out of my brain. As soon as it came to my sight I disconnected the &quot;EN&quot; pin from 5V. After a few seconds it started to work....&lt;/p&gt;&#xA;" OwnerUserId="16491" LastEditorUserId="14782" LastEditDate="2017-05-15T11:04:05.627" LastActivityDate="2017-05-15T11:04:05.627" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12386" PostTypeId="1" CreationDate="2017-05-13T09:00:32.693" Score="1" ViewCount="40" Body="&lt;p&gt;After a few days,there will held a competition in our varsity.in this competition the task is,my robot will have to play soccer.this is a one to one manual game.I am thinking of building a robot consists of 4 wheel and the structure will look like a pyramid.but the difference between the outer surface of the pyramid and my bot is,the outer plane of my bot will be like a concave slope/curve.so that,when the opponent's bot will come to attack my bot,then it's wheel will go over my bot and will loose it's balence.I will take the chance and push that away from my path.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;the dimentions of my bot must have to be between-&lt;br&gt;&#xA;&lt;strong&gt;length&lt;/strong&gt;=25cm&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;width&lt;/strong&gt;=20cm&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;height&lt;/strong&gt;=20cm&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;weight&lt;/strong&gt;=3kg&lt;/p&gt;&#xA;&#xA;&lt;p&gt;but,my main problem is to make the concave slope.if the wheel diameter is large the it is impossible to make a perfect slop on which the opponent will easily ride.but if the diameter is small then it is possible to make a good slope.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;now,this is the question.whether the small wheel will have any effect on the other sides of the bot like speed,friction or not ???&lt;/p&gt;&#xA;&#xA;&lt;p&gt;please suggest anything...you can..........what should I do? &lt;/p&gt;&#xA;" OwnerUserId="16491" LastActivityDate="2017-05-13T09:00:32.693" Title="What type of wheel is preferable for a soccerbot?" Tags="&lt;wheeled-robot&gt;&lt;wheel&gt;&lt;soccer&gt;" AnswerCount="0" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12387" PostTypeId="2" ParentId="11484" CreationDate="2017-05-13T12:40:53.397" Score="0" Body="&lt;p&gt;You can take the shear force onto a bearing housing. And the servo can only deal with the rotation of the bowl.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To do so, you need a bearing which carries the mass of the load (bowl). And through this bearing a shaft is attached onto the bowl. And the servo drives this shaft. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Two bearings at each side would make the system more stable, and possibly decrease any extra friction due to the bending moments. &lt;/p&gt;&#xA;" OwnerUserId="9570" LastActivityDate="2017-05-13T12:40:53.397" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12388" PostTypeId="1" AcceptedAnswerId="12393" CreationDate="2017-05-13T17:50:08.817" Score="0" ViewCount="2321" Body="&lt;p&gt;I have been learning forward kinematics and having some trouble with coordinate systems and dh parameters with prismatic joints. Trying to work through this question.&lt;a href=&quot;https://i.stack.imgur.com/6Laqb.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6Laqb.png&quot; alt=&quot;&quot;&gt;&lt;/a&gt; Trying to work this out I ended up with this system.&lt;a href=&quot;https://i.stack.imgur.com/OxvYx.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OxvYx.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA; However running through matlab it appears to be wrong. If anyone is able to point out my mistake, or help point me in the right direction, would be appreciated!&lt;/p&gt;&#xA;" OwnerUserId="16948" LastActivityDate="2017-05-14T09:48:14.800" Title="DH Parameters of RRP planar manipulator" Tags="&lt;forward-kinematics&gt;&lt;dh-parameters&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12392" PostTypeId="2" ParentId="12318" CreationDate="2017-05-14T08:26:56.563" Score="1" Body="&lt;p&gt;A quite simple math is involved in this task, but you need to be aware of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Pinhole_camera_model&quot; rel=&quot;nofollow noreferrer&quot;&gt;pinhole camera model&lt;/a&gt; as well as of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Homography_(computer_vision)&quot; rel=&quot;nofollow noreferrer&quot;&gt;homographic projection&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The pinhole camera model gives you the 3D position $(x,y,z)$ of a point in the space whose projection in the image plane corresponds to the $(u,v)$ pixel at a distance $\lambda$ from the image plane (considered infinite):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\left( \begin{array}{c} x \\ y \\ z \\ 1 \end{array} \right) = \Pi^\dagger \cdot \left( \begin{array}{c} \lambda \cdot u \\ \lambda \cdot v \\ \lambda \end{array} \right),&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $\Pi^\dagger$ is the pseudoinverse of the matrix $\Pi \in \mathbb{R}^{3 \times 4}$ that incorporates both the &lt;em&gt;intrinsic parameters&lt;/em&gt; of your camera (i.e. the focal length, the pixel ratio and the position of the principal point) and the &lt;em&gt;extrinsic parameters&lt;/em&gt; accounting for the position of the camera reference frame expressed in the world frame (i.e. a $\mathbb{R}^{4 \times 4}$ roto-translation matrix).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You have now to use the concept of homography, because you know that the object of interest lies on the plane $z=0$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To do so, let's define the following quantities:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;$\mathbf{p}_0$, a point in the plane $z=0$; in particular, $\mathbf{p}_0=(0,0,0)$ is fine.&lt;/li&gt;&#xA;&lt;li&gt;$\mathbf{z}$, the normal to the plane $z=0$, that is $\mathbf{z}=(0,0,1)$.&lt;/li&gt;&#xA;&lt;li&gt;$\mathbf{c}$, the 3D position of the camera frame expressed in the world frame.&lt;/li&gt;&#xA;&lt;li&gt;$\mathbf{p}_1$, a 3D point that corresponds to the pixel $(u,v)$ at a distance $\lambda=1$.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Your final point $\mathbf{p}^*$ is therefore:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\mathbf{p}^*=\mathbf{c}+\frac{(\mathbf{p}_0-\mathbf{c}) \cdot \mathbf{z}}{(\mathbf{p}_1-\mathbf{c}) \cdot \mathbf{z}} (\mathbf{p}_1-\mathbf{c}).&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, the strong assumption we're making here is that the object of interest is squashed on the plane $z=0$, that is it has a null height, which is not reasonable. To compensate for that, you could include such an information in the above process and replace the plane $z=0$ with $z=h$, where $h$ represents a suitable height.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2017-05-14T11:42:29.103" LastActivityDate="2017-05-14T11:42:29.103" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12393" PostTypeId="2" ParentId="12388" CreationDate="2017-05-14T08:35:43.550" Score="0" Body="&lt;p&gt;Frame 3 (transform from 2 to 3) does not match the parameters in column 2. DH parameters cannot describe the transform you sketched. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;See if the frames below help. Remember that DH is a mathematical way to reduce the number of parameters for when you need to manipulate the equations by hand. Frames that fit the DH parameterization for a given kinematic topology don't necessarily match the frames that humans might choose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pro-tip. Don't use DH if you are doing numerical analysis. People (designers) tend to think of robot kinematic neutral positions along orthogonal directions. As such, writing the transform matrix directly, augmented with a parameterization along Z, is easy to do, and lets you put the link frames wherever you like without problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/NeSnW.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/NeSnW.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="184" LastEditDate="2017-05-14T09:48:14.800" LastActivityDate="2017-05-14T09:48:14.800" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12394" PostTypeId="1" AcceptedAnswerId="12727" CreationDate="2017-05-14T14:06:26.583" Score="1" ViewCount="1074" Body="&lt;p&gt;Hey all I would like to know what type of coupler I would need for this type of &lt;a href=&quot;https://us.banggood.com/Wholesale-Warehouse-JX-PDI-6221MG-20KG-Large-Torque-Digital-Coreless-Servo-For-RC-Model-wp-Usa-973947.html?rmmds=myorder&quot; rel=&quot;nofollow noreferrer&quot;&gt;servo&lt;/a&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/nZmaZ.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/nZmaZm.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The specs are:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/VGT0S.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/VGT0S.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm guessing that the &lt;strong&gt;25T&lt;/strong&gt; means it has 25 teeth in the part that holds the adapters?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I would guess I would need something like this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/OJ8Zg.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OJ8Zgm.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I also would like to know what &lt;strong&gt;size&lt;/strong&gt; those are called for my servo. I've seen them advertised as 5mm to 8mm. 6mm to 8mm, etc etc so I don't know if those are going to work? Some also just have a smooth round hole without the &lt;strong&gt;teeth&lt;/strong&gt; and I'm not sure if that's something I could use as well?&lt;/p&gt;&#xA;" OwnerUserId="16960" LastEditorUserId="37" LastEditDate="2018-08-15T15:15:33.300" LastActivityDate="2018-08-15T15:15:33.300" Title="Servo coupler size needed" Tags="&lt;arduino&gt;&lt;stepper-motor&gt;&lt;rcservo&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12395" PostTypeId="1" CreationDate="2017-05-14T18:02:29.033" Score="2" ViewCount="85" Body="&lt;p&gt;I just wanted to know if scale is conserved across multiple images, when doing a process such as monocular odometry. I know in reality the scale tends to drift over time due to accumulation of small errors, mismatching of features and other problems. However, if I had a perfect system with perfect correspondences and perfect relative pose estimation would the scale also drift over time. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;While working through the problem I believe it should not as long as each pair of images has correspondences in common with the previous image pair. However, I would like if someone could just confirm this theory of mine. Also if you have any proof as to why this is or a paper that explains it in depth that would also be very helpful.&lt;/p&gt;&#xA;" OwnerUserId="15265" LastActivityDate="2017-06-25T22:51:50.220" Title="Consitent Scale in Monocular pose estimation" Tags="&lt;computer-vision&gt;&lt;geometry&gt;&lt;visual-odometry&gt;&lt;monocular&gt;" AnswerCount="0" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12397" PostTypeId="2" ParentId="230" CreationDate="2017-05-15T07:04:53.467" Score="2" Body="&lt;p&gt;Yes. Sure. We've been doing this long time.&lt;br&gt;&#xA;ROS is not an &amp;quot;OS&amp;quot; and it's not big. It's just &amp;quot;middleware&amp;quot; which runs well in &amp;quot;Raspbian&amp;quot;.&lt;br&gt;&#xA;We just burn with the official Raspbian(so we hope it can make us work on a &amp;quot;stable&amp;quot; environment) and compile the ROS with source. Here's the step-by-step link(for ROS Kinetic): &lt;br&gt;http://wiki.ros.org/ROSberryPi/Installing%20ROS%20Kinetic%20on%20the%20Raspberry%20Pi  &lt;br&gt;&#xA;you can try ros_comm or desktop.  &lt;br&gt;&#xA;I tried ros_comm and then add other packages later.&lt;/p&gt;&#xA;" OwnerUserId="16966" LastEditorUserId="26747" LastEditDate="2021-04-20T18:20:50.263" LastActivityDate="2021-04-20T18:20:50.263" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="12399" PostTypeId="2" ParentId="10743" CreationDate="2017-05-15T11:49:25.420" Score="1" Body="&lt;p&gt;A good way to work once you have your map : turn your map in a weighted graph, were where the vertices are only at crosses and the weight is the length beetween the points represented by the vertices.&#xA;Then running an A* or a djikstra will be simple.&lt;/p&gt;&#xA;" OwnerUserId="16643" LastActivityDate="2017-05-15T11:49:25.420" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12401" PostTypeId="1" CreationDate="2017-05-16T14:49:09.110" Score="1" ViewCount="1538" Body="&lt;p&gt;I've been looking at existing this &lt;a href=&quot;https://robotics.stackexchange.com/questions/11137/ur3-tcp-ip-communication-protocol/11140#11140&quot;&gt;UR TCP/IP communication protocol answer&lt;/a&gt;, the data linked but I'm still a little confused to how I could retrieve values from calculations, for example &lt;code&gt;get_inverse_kin()&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've tried to figure it out based on the available articles on the Universal Robots support site, but even that has a usage guide: &quot;How to use this Support site&quot; :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can receive the Realtime data and parse it based on the Client_Interface.xlsx specifications, but that does not include calculations done via the motion module.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other thing I have in mind is writing a URScript along these lines:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;store the result of the get_inverse_kin() in a float[] (e.g. &lt;code&gt;angles = get_inverse_kin(pose_here)&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;make a string representation of the data (e.g. &lt;code&gt;str = &quot;{\&quot;angles:\&quot;:[0,1,2,3,4,5]}&quot;&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;open a socket to the computer to send the data (e.g. &lt;code&gt;socket_open(&quot;COMPUTER_IP_HERE&quot;, 50000, &quot;motion_results&quot;&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;Send the angles string (e.g. &lt;code&gt;socket_send_line(str, &quot;motion_results&quot;)&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;This feels a bit long-winded though. Is how values should be sent ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the most efficient way of receiving URScript motion module results on a computer connected to the Control Box ?&lt;/p&gt;&#xA;" OwnerUserId="269" LastActivityDate="2017-09-18T07:05:04.550" Title="How to receive messages from a UR10 URScript?" Tags="&lt;robotic-arm&gt;&lt;communication&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12406" PostTypeId="1" CreationDate="2017-05-17T19:41:07.363" Score="2" ViewCount="1269" Body="&lt;p&gt;So I have -32768 to +32768 coming out from MPU9255 (gx,gy,gz) which is converted to 0-250 dps(degrees per second) using 131 which is Gyro's sensitivity. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question would be how do you use this data to convert it into Roll and Pitch? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am trying to make a stabiliser. I have tried using &#xA;$$&#xA;\theta = \sum^n_n\omega*\delta(t) &#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where n = infinity&#xA;I don't if my equation is wrong or not here is my code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;dt = now_c - pr_dt;&#xA;pr_dt = dt;&#xA;Pitch_gyro += Gxyz[1]*(dt/1000000.0);&#xA;Roll_gyro += Gxyz[0]*(dt/1000000.0); &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This is my function:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Gxyz[0] = (double)(gx/131);//131;&#xA;Gxyz[1] = (double)(gy/131);//131;// 250/32768.0;&#xA;Gxyz[2] = (double)(gz/131);//131;// 250/32768.0;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Any guide as to how to solve this I have looked into euler angles. I still don't understand how you get the angles given angular velocity which is from gyro.&lt;/p&gt;&#xA;" OwnerUserId="16994" LastEditorUserId="16994" LastEditDate="2017-05-18T07:41:06.867" LastActivityDate="2018-02-10T16:22:25.423" Title="MPU9255 gyro data to roll pitch?" Tags="&lt;arduino&gt;&lt;quadcopter&gt;&lt;imu&gt;&lt;gyroscope&gt;&lt;c&gt;" AnswerCount="2" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="12407" PostTypeId="2" ParentId="4312" CreationDate="2017-05-19T07:06:18.707" Score="2" Body="&lt;p&gt;Ublox sell an &lt;a href=&quot;https://www.u-blox.com/en/centimeter-level-precise-positioning&quot; rel=&quot;nofollow noreferrer&quot;&gt;RTK solution&lt;/a&gt; which provides 2cm accuracy. The &lt;a href=&quot;https://www.u-blox.com/en/product/c94-m8p&quot; rel=&quot;nofollow noreferrer&quot;&gt;evaluation kit&lt;/a&gt; is €359 and it works beautifully.&lt;/p&gt;&#xA;" OwnerUserId="3901" LastEditorUserId="3901" LastEditDate="2018-01-21T22:23:06.113" LastActivityDate="2018-01-21T22:23:06.113" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12408" PostTypeId="1" CreationDate="2017-05-19T15:17:00.833" Score="2" ViewCount="74" Body="&lt;p&gt;the problem I have is the following (see picture below), I am able to compute a starting frame $F_S (X_S, Y_S, Z_S)$, an ending frame $F_E (X_E, Y_E, Z_E)$ and a path from $F_S$ to $F_T$ and what I want to do it to compute a serie of transformations that will transform $F_S$ into $F_E$ along the path.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Naively I computed the Euler angles for $F_E$ end $F_S$, compute the differences and incrementally built the transformations but it does not work. Does somebody can give me some hints or pointers towards existing solutions?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The application is related to the computation of a path for an arm and so the frames are associated with the end effector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/TNPr9.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/TNPr9.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="16030" LastActivityDate="2017-05-20T12:27:40.030" Title="How to compute a path from a Frame A to a Frame B" Tags="&lt;robotic-arm&gt;&lt;path-planning&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12409" PostTypeId="2" ParentId="1393" CreationDate="2017-05-19T18:15:54.583" Score="0" Body="&lt;p&gt;I tried using PIR but it has problems with handling and delays. It is not an efficient choice for human detection to be honest.&#xA;You can use Capacitive Sensing Technique as it is the cheapest and easiest way for human detection(A smart choice) and it is less complex too. You can make a sensor for yourself at very low cost and it is good for small projects. I have used one in my &quot;Human Detection Robot&quot; Project. You can watch my video at: &lt;a href=&quot;https://youtu.be/ZToxCdzIqlY/&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Capacitive-Based Human Detection&quot;&gt;Capacitive-Based Human Detection&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="17007" LastActivityDate="2017-05-19T18:15:54.583" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12410" PostTypeId="2" ParentId="12408" CreationDate="2017-05-19T21:09:56.147" Score="2" Body="&lt;p&gt;Quaternions and SLERP is what you want.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2017-05-19T21:09:56.147" CommentCount="1" CommunityOwnedDate="2017-05-19T21:09:56.147" ContentLicense="CC BY-SA 3.0" />
  <row Id="12411" PostTypeId="2" ParentId="7803" CreationDate="2017-05-20T00:25:50.217" Score="1" Body="&lt;p&gt;Please refer to this Article &quot;Keeping a Good Attitude: A Quaternion-Based Orientation Filter for IMUs and MARGs&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They are using low-pass filter at stationary gyro to estimate the gyro bias and then subtract it from the original signal. They are doing that only if the gyro is stationary. However, I recommend to remove the bias when the gyro is stationary by means of subtracting the mean value. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The method of subtracting the bias only when the gyro is stationary based on low pass filter is called online gyro compensation.&lt;/p&gt;&#xA;" OwnerUserId="17009" LastEditorUserId="110" LastEditDate="2017-05-21T01:20:36.133" LastActivityDate="2017-05-21T01:20:36.133" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12412" PostTypeId="2" ParentId="12408" CreationDate="2017-05-20T09:10:53.870" Score="1" Body="&lt;p&gt;There are a number of ways to do so. Using quaternions has already been mentioned so I will go with (4x4) transformation matrices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let a transformation matrix $T$ be&#xA;$$&#xA;T = \begin{bmatrix}R &amp;amp; p\\ 0 &amp;amp; 1\end{bmatrix},&#xA;$$&#xA;where $R$ is a rotation matrix and $p$ is a position vector. I will write $T = (R, p)$ for short.&#xA;You want to generate a path connecting $T_1= (R_1, p_1)$ and $T_2= (R_2, p_2)$. The problem then boils down to generating a rotational path and a translational path, separately. For translation, a path can be generated pretty easily using any method like polynomial interpolation or using splines. For rotation, it's a bit more complicated but in the end it can also be done using methods like polynomial interpolation. So I will talk a bit about rotation here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The thing is that any rotation matrix can be written as&#xA;$$R = e^{[r]},$$&#xA;where $r \in \mathbf{R}^3$, $[\cdot]$ maps a vector to a unique skew symmetric matrix, and $e^{[r]}$ is the matrix exponential&#xA;$$&#xA;e^{[r]} = \sum_{k = 0}^{\infty}\frac{1}{k!}[r]^k.&#xA;$$&#xA;(Of course, there is a formula for that without evaluating that infinite sum.) So actually a rotational path may be generated as&#xA;$$R(t) = R_0e^{[r(t)]},$$&#xA;where $r(t)$ is a polynomial vector and $R_0$ is some constant rotation matrix. Then you just need to find $r(t)$ such that $R_0e^{[r(0)]} = R_1$ and $R_0e^{[r(T)]} = R_2$, so as to meet your boundary conditions. For more details, you may have a look at &lt;a href=&quot;http://robotics.snu.ac.kr/fcp/files/_pdf_files_publications/5_mdc/smooth_invariant_interpolation.pdf&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;this paper&quot;&gt;this paper&lt;/a&gt;, for example.&lt;/p&gt;&#xA;" OwnerUserId="7610" LastEditorUserId="7610" LastEditDate="2017-05-20T12:27:40.030" LastActivityDate="2017-05-20T12:27:40.030" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12414" PostTypeId="1" AcceptedAnswerId="12416" CreationDate="2017-05-20T13:04:15.930" Score="0" ViewCount="211" Body="&lt;p&gt;So I am working with a UR10 manipulator which doesn't have a direct torque interface. However, it provides torque/velocity/position feedback for each joint as well as position/velocity interfaces for joint control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a feeling the answer is &quot;yes&quot;, but I've been having trouble finding examples and comments on the feasibility of this approach.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="17012" LastActivityDate="2017-05-21T13:15:15.737" Title="Is it possible to control joint torque using the position input and torque feedback?" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;ros&gt;&lt;torque&gt;&lt;manipulator&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12416" PostTypeId="2" ParentId="12414" CreationDate="2017-05-21T13:15:15.737" Score="1" Body="&lt;p&gt;If you're trying to do torque control, then you'll probably get best results if you could work with joint accelerations, because:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\tau = I \alpha \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where $\tau$ is joint torque, $I$ is the moment of inertia, and $\alpha$ is the joint angular acceleration. It's a linear relationship and should be pretty straightforward to control with a PID controller. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You don't have an acceleration input for your joint, though. What you have is a speed input for your joint. SO, what you could do is to setup a PID controller with torque error as your input, joint acceleration reference as your output, and then perform a numeric integration of the output to get a speed reference. This would look like:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ &#xA;\tau_{\mbox{err}} = \tau_{\mbox{ref}} - \tau_{\mbox{fbk}} \\&#xA;e_P = \tau_{\mbox{err}} \\&#xA;e_I = e_I + e_P*\Delta t \\&#xA;e_D = \frac{e_P - e_{P_{\mbox{prev}}}}{\Delta t} \\&#xA;e_{P_{\mbox{prev}}} = e_P \\&#xA;a_{\mbox{ref}} = (K_P e_P) + (K_I e_I) + (K_D e_D) \\&#xA;v_{\mbox{ref}} = v_{\mbox{ref}} + a_{\mbox{ref}} * \Delta t \\&#xA;$$&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-05-21T13:15:15.737" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12417" PostTypeId="1" AcceptedAnswerId="12419" CreationDate="2017-05-21T15:08:22.513" Score="2" ViewCount="393" Body="&lt;p&gt;Let's assume the very simple case of a particle and a control system in one dimensional space therefore our particle can move only in a straight line and dynamics of system is described by:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$m\vec{a} = u$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Now the problem:&lt;/strong&gt; we would like to make our particle move from point $A$ to point $B$ in time $t$ and constrain our acceleration with some  value $a_{m}$ i.e. $a$ can not exceed $a_{m}$ at any moment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How would one do this assuming that our control system allows us to control either velocity or acceleration?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The most important things here are names of mathematical methods behind this task and explanation of how to apply them. &#xA;Also consider that&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$x(0) = A = 0\\ x(t) = B\\ v(0)=0\\a(0)=0\\ v(t)=0\\ a(t)=0$&lt;/p&gt;&#xA;" OwnerUserId="15392" LastEditorUserId="15392" LastEditDate="2017-05-21T17:03:00.207" LastActivityDate="2017-05-23T11:42:07.373" Title="Math behind trajectory planning" Tags="&lt;control&gt;&lt;motion-planning&gt;&lt;movement&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12419" PostTypeId="2" ParentId="12417" CreationDate="2017-05-21T17:49:34.423" Score="4" Body="&lt;p&gt;Since the problem is one dimensional, you are actually asking to compute a &lt;em&gt;velocity profile&lt;/em&gt;. (A velocity profile is the information of how a path is traversed with respect to time.) Now the problem is &quot;How to travel for $B$ units within time $T$?&quot; (Let's call the duration $T$ instead.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A velocity profile can be viewed as a curve in the $v$-$t$ (velocity vs time) plane. And as we all know, the area under a curve in that $v$-$t$ plane is the displacement. So any curve which passes through points $(v_0, t_0) = (0, 0)$ and $(v_2, t_2) = (0, T)$ with the area $B$ will be what you are looking for.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One velocity profile which solves the problem is as shown below.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/I2rMV.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/I2rMV.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;It contains two segments. From time $0$ to $t_s$, you travel with a constant positive acceleration. Then after that you travel with a constant negative acceleration (of equal magnitude). The peak velocity $v_p$ can be easily computed since we know that &#xA;$$&#xA;\frac{1}{2}v_{p}(T) = B.&#xA;$$&#xA;This is fine as long as the magnitude of acceleration of both parts, $|a| = v_p/t_s = 2v_p/T$, does not exceed $a_m$.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Normally, people would ask how to get from $x_0 = A$ to $x_1 = B$ the &lt;em&gt;fastest possible&lt;/em&gt;. When there are only velocity and acceleration limits, the &lt;em&gt;time-optimal&lt;/em&gt; velocity profile can be computed analytically (see, e.g., &lt;a href=&quot;https://pdfs.semanticscholar.org/c468/4d698ce0ba92706f5b70fdab9e09c1caa834.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this paper&lt;/a&gt; ) using &lt;strong&gt;polynomial interpolation&lt;/strong&gt;. People may also be interested in other higher-order constraints such as &lt;em&gt;jerk limits&lt;/em&gt; (i.e., limits on the rate of change of acceleration).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't think there is any more specific name for these things than something like trajectory generation using polynomials or splines, etc.&lt;/p&gt;&#xA;" OwnerUserId="7610" LastEditorUserId="7610" LastEditDate="2017-05-22T02:08:49.383" LastActivityDate="2017-05-22T02:08:49.383" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12420" PostTypeId="1" CreationDate="2017-05-21T19:29:28.587" Score="1" ViewCount="122" Body="&lt;p&gt;I am researching on mechanical design of &lt;a href=&quot;https://en.wikipedia.org/wiki/Remote_Center_Compliance&quot; rel=&quot;nofollow noreferrer&quot;&gt;remote compliance devices (RCC)&lt;/a&gt;&lt;sup&gt;&amp;dagger;&lt;/sup&gt;. In the RCC, manufactured by ATI, they use shear pads for lateral compliance. They mention that shear pads are elastomers bonded with metal shims. I couldn't find how it is being made. Are there layers of elastomers between wedging pieces (shims) or something else? How is adhesion being achieved?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/B72PH.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/B72PH.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;&amp;dagger; From wikipedia: &quot;In robotics, a Remote Center Compliance, Remote Center of Compliance or RCC is a mechanical device that facilitates automated assembly by preventing peg-like objects from jamming when they are inserted into a hole with tight clearance.&quot;&lt;/sup&gt;&lt;/p&gt;&#xA;" OwnerUserId="17018" LastEditorUserId="37" LastEditDate="2017-05-23T14:26:49.367" LastActivityDate="2017-05-23T14:26:49.367" Title="How is a shear pad of remote compliance device formed?" Tags="&lt;design&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12422" PostTypeId="2" ParentId="11915" CreationDate="2017-05-22T04:33:47.203" Score="0" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;1) Is this assumption true in all cases?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I think it is pretty difficult to conclude that the assumption is true in &lt;em&gt;all&lt;/em&gt; cases, as it depends on so many factors such as robot geometries. However, as the sampled points are closer to one another, it is reasonable to assume that the maximum deviation happens &lt;em&gt;near&lt;/em&gt; the midpoint (as can be seen from Figure 3 in the paper you mentioned).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;2) Even if the assumption may not be true, will resulting trajectory be a straight line if this method is used for trajectory planning?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If you are referring to the second method discussed in the paper (&lt;strong&gt;bounded deviation joint paths&lt;/strong&gt;), the resulting trajectory &lt;strong&gt;is not a straight line&lt;/strong&gt; in the Cartesian space and that does not really depend on the validity of the assumption. The assumption is stated just for them to have a reasonable method to select more intermediate points if the particular trajectory segment exceeds the deviation bound. The generated trajectory will (only) follow the straight line &lt;em&gt;closely&lt;/em&gt; enough that it does not deviates from the real straight line more than the specified maximum deviation allowed.&lt;/p&gt;&#xA;" OwnerUserId="7610" LastActivityDate="2017-05-22T04:33:47.203" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12423" PostTypeId="1" CreationDate="2017-05-22T09:08:35.380" Score="1" ViewCount="509" Body="&lt;p&gt;I need to connect two servo motors (with internal position control) to rotate one shaft (to control its position), is that possible? and how to avoid synchronization problems?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.jx-servo.com/english/Product/742691516.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;the servo motor&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am making a robotic arm, my problem here is that the servos are internally controlling position, which means that if only one of them arrived to the target and the other one haven't yet, it will still try to get to it (even if it is just 0.5 degree away).. i am afraid that this will make the &lt;strong&gt;system vibrate&lt;/strong&gt; around the required position , &lt;em&gt;or&lt;/em&gt; make one motor to &lt;strong&gt;continuously drag current&lt;/strong&gt;, &lt;em&gt;or&lt;/em&gt; it might &lt;strong&gt;hurt the servo shafts and gears&lt;/strong&gt;, &#xA; I am thinking of using pulleys and a synchronous belts to connect the servos to the shaft, this could absorb the bad effects.&#xA;so please let me know if you consider this to be safe, or if there is something i can do to improve the performance and the reliability of the system. &lt;/p&gt;&#xA;" OwnerUserId="17023" LastEditorUserId="17023" LastEditDate="2017-05-23T21:06:59.087" LastActivityDate="2017-05-23T21:06:59.087" Title="Connecting two servo motors to drive one shaft" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;mechanism&gt;&lt;servomotor&gt;" AnswerCount="1" CommentCount="5" ClosedDate="2017-05-22T12:07:32.123" ContentLicense="CC BY-SA 3.0" />
  <row Id="12424" PostTypeId="2" ParentId="12423" CreationDate="2017-05-22T10:53:36.643" Score="0" Body="&lt;p&gt;One bigger servo is better.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can just hook them both to the same shaft. If you give them the same command, they will fight each other a bit and waste some energy but should work. To improve performance you can calibrate one motor to the other. For each command value of motor A find the command that moves servo B to the same position.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2017-05-22T10:53:36.643" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12426" PostTypeId="2" ParentId="12417" CreationDate="2017-05-23T11:42:07.373" Score="0" Body="&lt;p&gt;I think you are talking about velocity profiles.. as I know if you have a limit for the acceleration and a limit for the velocity then the fastest way to move from A to B is called &lt;strong&gt;Trapezoidal velocity model&lt;/strong&gt;, which uses max acceleration until it reaches the max velocity as this image shows and the inverse when it stops,&#xA;&lt;a href=&quot;https://i.stack.imgur.com/zVofg.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zVofg.png&quot; alt=&quot;Trapezoidal velocity model(acceleration, velocity, position)&quot;&gt;&lt;/a&gt;&#xA;all the equations can be found if you consider that the space under the velocity curve equals to the total distance (Xf - Xi), thus you can find the minimum &lt;strong&gt;T&lt;/strong&gt; if the acceleration limit and velocity limit are known&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other common profiles are &lt;strong&gt;bang-bang acceleration&lt;/strong&gt;, &lt;strong&gt;Smoothed trapezoidal velocity model&lt;/strong&gt;, &lt;strong&gt;third or fifth degree trajectory&lt;/strong&gt;, They are well explained in &lt;a href=&quot;https://books.google.com/books?id=nyrY0Pu5kl0C&amp;amp;pg=PA321&amp;amp;lpg=PA321&amp;amp;dq=robotic%20bang-bang%20acceleration%20profile%20model&amp;amp;source=bl&amp;amp;ots=c4avXjvXb6&amp;amp;sig=xiBWfPo00pr9TkQP4foMBTh-qWE&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ved=0ahUKEwiphsbI9oXUAhVnIJoKHUoVD5sQ6AEIJjAA#v=onepage&amp;amp;q=robotic%20bang-bang%20acceleration%20profile%20model&amp;amp;f=false&quot; rel=&quot;nofollow noreferrer&quot;&gt;Modelling identification and control of Robots By W Khalil &amp;amp; E Dombre&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="17023" LastActivityDate="2017-05-23T11:42:07.373" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12427" PostTypeId="2" ParentId="12378" CreationDate="2017-05-23T12:02:24.757" Score="0" Body="&lt;p&gt;In looking at your matrices, I would guess that you (or the author!) have made a mistake somewhere in your alpha $\alpha$ terms. Recall the &lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_trigonometric_identities#Shifts_and_periodicity&quot; rel=&quot;nofollow noreferrer&quot;&gt;period shift&lt;/a&gt; identity that states:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\sin{\left(\theta + \pi/2 \right)} = +\cos{\theta} \\&#xA;\cos{\left(\theta + \pi/2 \right)} = -\sin{\theta} \\&#xA;$$&#xA;So, if you (or again, the author) were off by 90 degrees ($\pi/2$), then that would explain the fact that you appear to have some sines and cosines swapped and some sign errors, too. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't have the time at the moment to go through each step by hand and try to evaluate where you've gone wrong, but I would imagine that you should be able to compare individual joint transforms and find the ones that don't match. Try changing the $\alpha$ values for that joint by $\pm \pi/2$ and see if what you have matches what the author has. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Authors can and do make mistakes, and if you're positive the author made a mistake then the professional thing to do would be to contact that author and/or the journal that published the paper and alert them to the mistake. I would just double- and triple-check that the author was incorrect before taking that step, though (run it by your professors, etc.) &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-05-23T12:02:24.757" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12428" PostTypeId="2" ParentId="6683" CreationDate="2017-05-24T04:06:17.093" Score="1" Body="&lt;p&gt;Sometimes the two words are used interchangeably. However, there are some subtle nuances between &lt;strong&gt;motion planning&lt;/strong&gt; and &lt;strong&gt;trajectory generation&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When talking about &lt;strong&gt;motion planning&lt;/strong&gt;, it is planning motions for robots to move from point $A$ to point $B$ (such as for mobile robots, etc.) or pose $A$ to pose $B$ (such as for manipulators, etc.). In order to do so, a number of constraints need to be taken into account: collision avoidance, joint limits, velocity/acceleration limits, jerk limits, dynamic balance, torque bounds, and many more. In this sense, not only the  the robots is considered but also its environment (e.g., to avoid collision, to how remain balanced). Considering this, motion planning is kind of trajectory generation with lots of constraints. They may be considered the same thing. So, yes, you &lt;em&gt;can&lt;/em&gt; use them interchangeably.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When talking about &lt;strong&gt;trajectory generation&lt;/strong&gt;, the scope can be narrower than that of motion planning. Often time, in trajectory generation, people really focus on generating a trajectories---with joint limits, velocity and acceleration constraints---and just that. One case I can think of which is called trajectory generation but not motion planning (or at least, that's what I perceive) is as follows. Think of when we want to execute a trajectory on a manipulator. We send commands to the controller as a set of &lt;em&gt;waypoints&lt;/em&gt;, i.e., discrete points (supposedly closed to one another) spread across the trajectory, often at a fixed interval equal to the controller's sampling time. The controller then has to regenerate trajectory segments between two consecutive waypoints, such that manipulator reaches the next waypoint within the fixed time interval while staying within joint limits, velocity limits, and acceleration limits. However, the controller does not really consider even collision avoidance or anything else. &lt;em&gt;That&lt;/em&gt; is called trajectory generation.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Sometimes, people may think of motion planning as &lt;em&gt;path planning&lt;/em&gt;. That's another thing since, strictly speaking, &lt;strong&gt;a path is not equal to a trajectory&lt;/strong&gt;. A trajectory is a path &lt;em&gt;and&lt;/em&gt; information of how to traverse the path with respect to time, a.k.a &lt;em&gt;a velocity profile&lt;/em&gt;. Considering this, trajectory generation is kind of a bigger thing.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;tl;dr&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Generally, motion planning and trajectory generation are kind of interchangeable.&lt;/li&gt;&#xA;&lt;li&gt;Sometimes, trajectory generation can be viewed as a subclass of motion planning.&lt;/li&gt;&#xA;&lt;li&gt;If motion planning is viewed as path planning, then trajectory generation is a bigger thing.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="7610" LastActivityDate="2017-05-24T04:06:17.093" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12429" PostTypeId="1" CreationDate="2017-05-24T05:40:08.950" Score="0" ViewCount="657" Body="&lt;p&gt;I am able to connect the create 2 robot to my laptop with a serial cable.  I am using putty_beta terminal to run. I am not able to key in commands in the terminal. but I am able to receive information from the robot. I want to achieve two way serial connection. What can I do?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/w0yhg.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/w0yhg.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="16991" LastActivityDate="2017-06-05T13:50:38.603" Title="Irobot Create 2 Open Interface Communication" Tags="&lt;irobot-create&gt;&lt;serial&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12430" PostTypeId="1" AcceptedAnswerId="12433" CreationDate="2017-05-24T09:39:17.290" Score="2" ViewCount="436" Body="&lt;p&gt;I'm using the MPU-6050 accelerometer + gyro with the library &lt;a href=&quot;https://www.i2cdevlib.com/devices/mpu6050#source&quot; rel=&quot;nofollow noreferrer&quot;&gt;I2Cdev&lt;/a&gt; which outputs: quaternion, euler angles and YPR angles. The equations used for calculating the YPR are:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;uint8_t MPU6050::dmpGetYawPitchRoll(float *data, Quaternion *q, VectorFloat *gravity) {&#xA;  // yaw: (about Z axis)&#xA;  data[0] = atan2(2 * q -&amp;gt; x * q -&amp;gt; y - 2 * q -&amp;gt; w * q -&amp;gt; z, 2 * q -&amp;gt; w * q -&amp;gt; w + 2 * q -&amp;gt; x * q -&amp;gt; x - 1);&#xA;  // pitch: (nose up/down, about Y axis)&#xA;  data[1] = atan(gravity -&amp;gt; x / sqrt(gravity -&amp;gt; y * gravity -&amp;gt; y + gravity -&amp;gt; z * gravity -&amp;gt; z));&#xA;  // roll: (tilt left/right, about X axis)&#xA;  data[2] = atan(gravity -&amp;gt; y / sqrt(gravity -&amp;gt; x * gravity -&amp;gt; x + gravity -&amp;gt; z * gravity -&amp;gt; z));&#xA;  return 0;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I want to stabilize a quadcopter with these values and 3 PID regulators like this:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;FL = Throttle + (-PitchPID) + (-RollPID) + (+YawPID)&lt;/li&gt;&#xA;&lt;li&gt;FR = Throttle + (-PitchPID) + (+RollPID) + (-YawPID)&lt;/li&gt;&#xA;&lt;li&gt;RL = Throttle + (+PitchPID) + (-RollPID) + (+YawPID)&lt;/li&gt;&#xA;&lt;li&gt;RR = Throttle + (+PitchPID) + (+RollPID) + (-YawPID)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The pitch and roll values are between -90 and +90 degrees (0 degrees is horizontal and +-90 is vertical). The problem is that when the quad starts tipping over, the error will start decreasing and will stabilize upside down.&lt;/p&gt;&#xA;" OwnerUserId="9016" LastActivityDate="2017-07-23T14:55:02.053" Title="Stabilising a quadcopter using YPR" Tags="&lt;quadcopter&gt;&lt;pid&gt;&lt;imu&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12431" PostTypeId="1" AcceptedAnswerId="12442" CreationDate="2017-05-24T11:26:40.290" Score="0" ViewCount="252" Body="&lt;p&gt;I am modelling a quadrotor and I need to choose an order for the rotations that transfer vectors which are represented in Earth Frame to the Body Frame.   &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;what is the most logical order for these rotations?&lt;/li&gt;&#xA;&lt;li&gt;which order is likely used?&lt;/li&gt;&#xA;&lt;li&gt;does the order have a big effect on the control of the quadrotor?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Thanks in advance for any answers&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="17038" LastEditorUserId="17038" LastEditDate="2017-05-24T18:47:59.560" LastActivityDate="2019-01-05T20:07:27.150" Title="Euler Angles Order For Quadrotor Modelling" Tags="&lt;quadcopter&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12432" PostTypeId="1" AcceptedAnswerId="12443" CreationDate="2017-05-24T12:55:49.487" Score="1" ViewCount="1627" Body="&lt;p&gt;&lt;em&gt;This is my first post here, so if I unknowingly vioated any rules, mods are welcome to edit my post accordingly.&lt;/em&gt;&lt;br&gt;&#xA;Ok, so my problem is that following Craig's conventions, I can't seem to find the expected homogeneous transform after a series of transformations.&lt;br&gt;&#xA;I have included the image for clarity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We are given the initial frame {0} as usual and then:&lt;br&gt;&#xA;-$\{A\}$ is the frame under rotating {0} $90^\circ$ around $z$ and translating, with $OA = \begin{bmatrix}&#xA;1&#xA;\\ 1&#xA;\\ 1&#xA;\end{bmatrix}$&lt;br&gt;&#xA;-$\{B\}$ is obtained after translating $A$ by $AB = \begin{bmatrix}&#xA;-2&#xA;\\ -2&#xA;\\ 0&#xA;\end{bmatrix}$ &lt;br&gt;&#xA;&lt;strong&gt;What I found is:&lt;/strong&gt; &lt;br&gt; &#xA;$$ {}_A^OT = \left[ {\begin{array}{*{20}{c}}&#xA;0&amp;amp;-1&amp;amp;0&amp;amp;1\\&#xA;1&amp;amp;0&amp;amp;0&amp;amp;1\\&#xA;0&amp;amp;0&amp;amp;1&amp;amp;{1}\\&#xA;0&amp;amp;0&amp;amp;0&amp;amp;1&#xA;\end{array}} \right], \;\;{}_B^AT=\left[ {\begin{array}{*{20}{c}}&#xA;1&amp;amp;0&amp;amp;0&amp;amp;-2\\&#xA;0&amp;amp;1&amp;amp;0&amp;amp;-2\\&#xA;0&amp;amp;0&amp;amp;1&amp;amp;{0}\\&#xA;0&amp;amp;0&amp;amp;0&amp;amp;1&#xA;\end{array}} \right],\\ {}_B^OT = {}_A^OT  {}_B^AT=\left[ {\begin{array}{*{20}{c}}&#xA;0&amp;amp;-1&amp;amp;0&amp;amp;3\\&#xA;1&amp;amp;0&amp;amp;0&amp;amp;-1\\&#xA;0&amp;amp;0&amp;amp;1&amp;amp;{1}\\&#xA;0&amp;amp;0&amp;amp;0&amp;amp;1&#xA;\end{array}} \right] $$&#xA;&lt;strong&gt;This is wrong, since the last column should obviously have the coordinates $-1,-1,1$, the origin of B&lt;/strong&gt;&lt;br&gt;&#xA;What am I missing? &lt;br&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/kpdEY.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kpdEY.jpg&quot; alt=&quot;series of transformations&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="17040" LastActivityDate="2017-05-25T15:24:46.293" Title="Confusion about order of homogeneous transform multiplication" Tags="&lt;kinematics&gt;&lt;frame&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12433" PostTypeId="2" ParentId="12430" CreationDate="2017-05-24T13:20:42.087" Score="0" Body="&lt;p&gt;You can't use an absolute value for the feedback in a PID controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Integral error &lt;strong&gt;accumulates&lt;/strong&gt; the control error, which is the difference between what you want and what you have. So, consider a basic case where you want level flight (reference = 0). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you take the absolute value of the feedback, then in ALL cases your feedback is either zero or positive. That means that the control error (reference - feedback), is ALWAYS NEGATIVE.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The integral error term can ONLY accumulate negative values. Typically you would overshoot the reference, at which point the sign would flip on the feedback and you could begin accumulating POSITIVE values, which would &quot;bleed&quot; the integral error term.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;You have no means to reduce integral error.&lt;/strong&gt; It will be a large negative number that will only ever get more negative (until you reset it or it overflows).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can't just flip the sign on the output of the PID controller when a feedback signal changes signs &lt;em&gt;because that doesn't do anything to correct the error terms that drive the controller.&lt;/em&gt; &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Contributing to the problems you're having with the IMU are the facts that it looks like you're not converting from the quaternion to Euler angles correctly, and maybe also that you're not even getting a quaternion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any time you see an &lt;code&gt;atan&lt;/code&gt; function your first thought should be, &quot;Something's wrong.&quot; The &lt;code&gt;atan&lt;/code&gt; function cannot differentiate between $(-y/x)$ and $(y/-x)$, so it can't always give you a correct solution. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I &lt;a href=&quot;https://github.com/jrowberg/i2cdevlib/blob/master/Arduino/MPU6050/MPU6050_6Axis_MotionApps20.h&quot; rel=&quot;nofollow noreferrer&quot;&gt;can see where you got the calculations&lt;/a&gt; and I understand that a &lt;code&gt;sqrt()&lt;/code&gt; function will always return a positive value, but that's a problem too, isn't it? If your denominator is always positive then you &lt;em&gt;know&lt;/em&gt; that you're never going to get a value of $-x$ and thus you &lt;em&gt;know&lt;/em&gt; that you're not going to get a full range of angles from the calculation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would suggest using the &lt;a href=&quot;https://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles#Source_Code_2&quot; rel=&quot;nofollow noreferrer&quot;&gt;code provided on Wikipedia&lt;/a&gt; if you're going to do this conversion yourself:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;&lt;pre&gt;&lt;code&gt;static void toEulerianAngle(const Quaterniond&amp;amp; q, double&amp;amp; roll, double&amp;amp; pitch, double&amp;amp; yaw)&#xA;{&#xA;  double ysqr = q.y() * q.y();&#xA;&#xA;  // roll (x-axis rotation)&#xA;  double t0 = +2.0 * (q.w() * q.x() + q.y() * q.z());&#xA;  double t1 = +1.0 - 2.0 * (q.x() * q.x() + ysqr);&#xA;  roll = std::atan2(t0, t1);&#xA;&#xA;  // pitch (y-axis rotation)&#xA;  double t2 = +2.0 * (q.w() * q.y() - q.z() * q.x());&#xA;  t2 = t2 &amp;gt; 1.0 ? 1.0 : t2;&#xA;  t2 = t2 &amp;lt; -1.0 ? -1.0 : t2;&#xA;  pitch = std::asin(t2);&#xA;&#xA;  // yaw (z-axis rotation)&#xA;  double t3 = +2.0 * (q.w() * q.z() + q.x() * q.y());&#xA;  double t4 = +1.0 - 2.0 * (ysqr + q.z() * q.z());  &#xA;  yaw = std::atan2(t3, t4);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;But again, back to the source of the quaternion - how are you getting &lt;em&gt;that&lt;/em&gt; value? From &lt;a href=&quot;https://www.i2cdevlib.com/devices/mpu6050#source&quot; rel=&quot;nofollow noreferrer&quot;&gt;the documentation page you linked&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Currently, the source code available will only provide basic device configuration and &lt;strong&gt;raw accel/gryo readings.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;When I searched the &lt;a href=&quot;https://www.invensense.com/products/motion-tracking/6-axis/mpu-6050/&quot; rel=&quot;nofollow noreferrer&quot;&gt;PDF files at the bottom of the product's website&lt;/a&gt;, there were NO mentions of &quot;quaternion&quot; or &quot;Euler&quot; or &quot;angle,&quot; so I'm not sure what the &quot;motion processing&quot; feature of the chip is or what it's supposed to do. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, in summary:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Double check how/where/if you are actually getting a quaternion,&lt;/li&gt;&#xA;&lt;li&gt;Check the math on how you are converting a quaternion to an Euler angle and verify that math checks out for all angles, and &lt;/li&gt;&#xA;&lt;li&gt;Always use signed feedback for a PID controller. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-05-24T13:20:42.087" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="12434" PostTypeId="1" CreationDate="2017-05-24T13:23:46.257" Score="1" ViewCount="85" Body="&lt;p&gt;I have two situations-&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A) One, the body with sensor embedded in it kept at rest. &#xA;B) Second, the body is at rest for 10 secs, then undergoes some movement randomly and comes back to the exact orientation as the initial one (at rest) and kept there for rest for 10 secs again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the first case, the quaternion values are constant and that is what is expected. But in the second case, these values from the first 10 secs do not match with the last 10 secs. As the orientation is unchanged in both the situations, how can the quaternion values be different? Also, the accelerometer, gyroscope and magnetometer values for corresponding situations is same. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The sensors which I am using are accelerometer and gyroscope. I dont know the exact way how the quaternion values are getting computed from these sensor values here but I will try to give you a better understanding. So, the quaternion values initially at rest are [1,0,0,0]. If the object is kept at rest, it remains the same (should be like that) but if it moves randomly and then again comes to rest with the exact same orientation as the initial point, the quaternion values are [0.708547,-0.4962,-.4316,-0.2556]. If this is not matching, then what are the absolute quaternion values signifying?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any flaw from my end in understanding the derivation of quaternion values at the conceptual level or I am missing something substantial?&lt;/p&gt;&#xA;" OwnerUserId="17041" LastEditorUserId="17041" LastEditDate="2017-05-24T17:01:38.560" LastActivityDate="2017-05-24T17:01:38.560" Title="How can there be a difference in quaternion values of two points taken from sensors where the orientation is exactly same?" Tags="&lt;sensors&gt;&lt;accelerometer&gt;&lt;gyroscope&gt;&lt;robotics-library&gt;" AnswerCount="0" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="12435" PostTypeId="2" ParentId="2610" CreationDate="2017-05-24T19:35:06.830" Score="2" Body="&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&quot;PIDControl&quot; directive allows the internal to do closed loop feedback control on the motors. You do want this on. Without going into greater detail, you should leave it there so that you can have use more robust motor motions. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You do not use encoders to control speed. You use encoders to control distance.  Now, having said that, if you want to get higher performance of motor control, such as eliminate overshooting, you will need to use the encoder to tell the maximum distance (equivalent to the encoder value, you need simple gear math work here, of course). Use the &lt;code&gt;setMotorTarget(...)&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="17044" LastEditorUserId="9176" LastEditDate="2017-05-30T15:29:12.107" LastActivityDate="2017-05-30T15:29:12.107" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12436" PostTypeId="1" CreationDate="2017-05-24T20:25:53.017" Score="1" ViewCount="128" Body="&lt;p&gt;Looking at the Li-Ion battery packs from Servocity, part #605056, 12V, 6000maH battery pack. Any reason I shouldn't put these in parallel with each other? Any idea on what these might weigh? I've got a robot project going, currently running on a very heavy 12V lead acid RV battery, essentially a small car battery.&lt;/p&gt;&#xA;" OwnerUserId="17045" LastEditorUserId="37" LastEditDate="2017-05-24T22:54:42.880" LastActivityDate="2017-05-26T18:15:25.667" Title="using Li-Ion batteries in parallel" Tags="&lt;battery&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12437" PostTypeId="2" ParentId="12432" CreationDate="2017-05-24T21:53:19.547" Score="0" Body="&lt;p&gt;In order to find the correct translation you need to rotate the origin of frame B by $^{A}_{B}{R}$ and then add the origin of frame A. Check eq. 2.41 page 35 of Craig's &lt;a href=&quot;http://www.mech.sharif.ir/c/document_library/get_file?uuid=5a4bb247-1430-4e46-942c-d692dead831f&amp;amp;groupId=14040&quot; rel=&quot;nofollow noreferrer&quot;&gt;Introduction to Robotics&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="16911" LastEditorUserId="7610" LastEditDate="2017-05-25T15:24:46.293" LastActivityDate="2017-05-25T15:24:46.293" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12438" PostTypeId="2" ParentId="12436" CreationDate="2017-05-25T02:35:22.473" Score="2" Body="&lt;p&gt;Hoo boy, let's tackle this one part at a time.&lt;/p&gt;&#xA;&lt;h1&gt;Weight&lt;/h1&gt;&#xA;&lt;p&gt;You're in luck! Lithium-based batteries are some of the lightest in the business! Obviously you could go lighter if you had Lithium Polymer instead of Lithium Ion but that's beside the point. This would certainly weight a fraction of what your RV battery weighs. Unfortunately, because your listed part doesn't have very good datasheets I can't tell if it actually is a Li-Ion since there isn't much to go on and the voltages are a little odd (more on that later).&lt;/p&gt;&#xA;&lt;h1&gt;Parallel&lt;/h1&gt;&#xA;&lt;p&gt;Again, easy as cake. Simply connect any group of batteries of the same values and you'll be golden. Though those odd voltages... anyways see below for a lil' demonstration.&lt;a href=&quot;https://i.stack.imgur.com/KQHb0.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KQHb0.png&quot; alt=&quot;Multiple AA batteries in parallel.&quot; /&gt;&lt;/a&gt;&#xA;As you can see, if we add together a bunch of batteries in parallel, they're voltage will remain the same, and the total capacity for this would become 8000 mAh. However, try to keep the specifications for the batteries exactly the same, else you could have problems (see &lt;a href=&quot;https://robotics.stackexchange.com/questions/11521/parallel-connection-of-batteries-with-equal-voltage-but-different-ah/11522#11522&quot;&gt;here&lt;/a&gt; for an explanation). Though I will warn you, be mindful of the difficulties of charging an array of Li-Ion batteries. There are specialized chargers but it might be safest to charge them all seperately.&lt;/p&gt;&#xA;&lt;h1&gt;The battery itself&lt;/h1&gt;&#xA;&lt;p&gt;Ah yes, now we must look at the problems I see with your choice of battery. First, the &amp;quot;datasheet&amp;quot;: &lt;a href=&quot;https://i.stack.imgur.com/uVcv4.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/uVcv4.png&quot; alt=&quot;Selected battery's datasheet.&quot; /&gt;&lt;/a&gt;&#xA;That is, first of all, not a datasheet. That is a user manual. Why is this a problem? We don't know how many batteries are in there, what kind actually are in there, and what their characteristics are. In reality, it could be a NiMH battery and that would ruin everybody's day (also, they're heavier). Normally, LiPo and Li-Ion batteries have a nominal voltage of 3.7v. However, these listed voltages are not divisible by the nominal voltage values slapped onto Lithium-based batteries (multiples would give us the number of cells). Say we take nominal voltage with it's 3.7v, 7.4v, 11.1v, or 14.8v. Neither 12.6v or 8.4v fits. Let's try the maximum voltage at 4.2v, 8.4v, and 12.6v. Ah, a match. It would appear that this might be listing the range, which would mean that 8.4v is the voltage you would be able to pull from the battery before permanently damaging it. So it's definitely a 3-cell 6Ah Li-Ion. HOWEVER, its nominal voltage is 11.1v, which means that 90% of the time you will be getting less than 12v, which I assume is not what you want.&lt;/p&gt;&#xA;&lt;h1&gt;In summary&lt;/h1&gt;&#xA;&lt;p&gt;No problem, it'll be lighter; make sure you account for possible issues charging arrays, and you'll be fine. However, this battery may not be quite what you are looking for with a nominal voltage of 11.1v compared to your SLA's 12v.&lt;/p&gt;&#xA;&lt;p&gt;Sorry some of it got long, I got carried away. Credit to SparkFun for the parallel battery image.&lt;/p&gt;&#xA;" OwnerUserId="15947" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2017-05-25T02:35:22.473" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12439" PostTypeId="2" ParentId="12432" CreationDate="2017-05-25T02:52:55.390" Score="0" Body="&lt;p&gt;It is the &lt;em&gt;order&lt;/em&gt; of multiplication.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Suppose you have a frame $A$ and you want to apply the transformation $T_B$ to $A$:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If $T_B$ is described in the &lt;em&gt;global&lt;/em&gt; frame, you &lt;strong&gt;pre-multiply&lt;/strong&gt; $T_A$ with $T_B$. This is your desired solution: you want to translate $A$ by $(-2, -2, 0)$, i.e., $-2$ in the world's $x$-direction and $-2$ in the world's $y$-direction.&lt;/li&gt;&#xA;&lt;li&gt;If $T_B$ is described in the $A$ frame, you &lt;strong&gt;post-multiply&lt;/strong&gt; $T_A$ with $T_B$. This is what you did.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="7610" LastActivityDate="2017-05-25T02:52:55.390" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12441" PostTypeId="1" AcceptedAnswerId="12446" CreationDate="2017-05-25T05:09:00.990" Score="0" ViewCount="1439" Body="&lt;p&gt;I am trying to create a sphere that I can control through pybullet. I have a basic urdf specification that looks like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&quot;0.0&quot; ?&amp;gt;&#xA;&amp;lt;robot name=&quot;urdf_robot&quot;&amp;gt;&#xA;&amp;lt;link name=&quot;base_link&quot;&amp;gt;&#xA;  &amp;lt;contact&amp;gt;&#xA;    &amp;lt;rolling_friction value=&quot;0.005&quot;/&amp;gt;&#xA;    &amp;lt;spinning_friction value=&quot;0.005&quot;/&amp;gt;&#xA;  &amp;lt;/contact&amp;gt;&#xA;  &amp;lt;inertial&amp;gt;&#xA;    &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;    &amp;lt;mass value=&quot;0.17&quot;/&amp;gt;&#xA;    &amp;lt;inertia ixx=&quot;1&quot; ixy=&quot;0&quot; ixz=&quot;0&quot; iyy=&quot;1&quot; iyz=&quot;0&quot; izz=&quot;1&quot;/&amp;gt;&#xA;  &amp;lt;/inertial&amp;gt;&#xA;  &amp;lt;visual&amp;gt;&#xA;    &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;    &amp;lt;geometry&amp;gt;&#xA;      &amp;lt;mesh filename=&quot;textured_sphere_smooth.obj&quot; scale=&quot;0.5 0.5 0.5&quot;/&amp;gt;&#xA;    &amp;lt;/geometry&amp;gt;&#xA;    &amp;lt;material name=&quot;white&quot;&amp;gt;&#xA;      &amp;lt;color rgba=&quot;1 1 1 1&quot;/&amp;gt;&#xA;    &amp;lt;/material&amp;gt;&#xA;  &amp;lt;/visual&amp;gt;&#xA;  &amp;lt;collision&amp;gt;&#xA;    &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;    &amp;lt;geometry&amp;gt;&#xA;      &amp;lt;sphere radius=&quot;0.5&quot;/&amp;gt;&#xA;    &amp;lt;/geometry&amp;gt;&#xA;  &amp;lt;/collision&amp;gt;&#xA;&amp;lt;/link&amp;gt;&#xA;&amp;lt;/robot&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But to control velocity instead of only external force I need add a joint. I tried adding a floating joint: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;joint name=&quot;control&quot; type=&quot;fixed&quot;&amp;gt;&#xA;  &amp;lt;parent link=&quot;base_link&quot;/&amp;gt;&#xA;  &amp;lt;child link=&quot;internal_link&quot;/&amp;gt;&#xA;  &amp;lt;origin xyz=&quot;0.0 0.0 0.5&quot;/&amp;gt;&#xA;&amp;lt;/joint&amp;gt;&#xA;&amp;lt;link name=&quot;internal_link&quot;&amp;gt;&#xA;  &amp;lt;inertial&amp;gt;&#xA;    &amp;lt;mass value=&quot;0.1&quot;/&amp;gt;&#xA;    &amp;lt;origin xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;    &amp;lt;inertia ixx=&quot;1&quot; ixy=&quot;0.0&quot; ixz=&quot;0.0&quot; iyy=&quot;1&quot; iyz=&quot;0.0&quot; izz=&quot;0.01&quot;/&amp;gt;&#xA;  &amp;lt;/inertial&amp;gt;&#xA;&amp;lt;/link&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;but pybullet crashes when trying to load that without a helpful message. I don't know urdf well. Any ideas? Thanks!&lt;/p&gt;&#xA;" OwnerUserId="7762" LastActivityDate="2017-05-25T16:05:41.957" Title="Adding a floating joint to a sphere in urdf" Tags="&lt;control&gt;&lt;ros&gt;&lt;simulation&gt;&lt;joint&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12442" PostTypeId="2" ParentId="12431" CreationDate="2017-05-25T06:41:58.920" Score="0" Body="&lt;p&gt;I don't understand what you mean by order. I have always seen the quadrotor modelled like &lt;a href=&quot;http://andrew.gibiansky.com/blog/physics/quadcopter-dynamics/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt;, for instance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For your question of how to represent the body-frame vectors into inertial frames, no quadrotor knowledge is necessary. Just Applied Mechanics, where the rotation matrix R showed in previous link is necessary.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It has no influence on the control, as the control is usually modelled with body-frame angles of the quadrotor.&lt;/p&gt;&#xA;" OwnerUserId="10539" LastActivityDate="2017-05-25T06:41:58.920" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12443" PostTypeId="2" ParentId="12432" CreationDate="2017-05-25T09:15:12.027" Score="3" Body="&lt;p&gt;The mistake is in the second matrix $T_B$ in the last column&lt;br&gt;&#xA;this column means that you want to transfer the Frame by -2 in &lt;strong&gt;&lt;em&gt;it's&lt;/em&gt;&lt;/strong&gt; X direction and by -2 in &lt;strong&gt;&lt;em&gt;it's&lt;/em&gt;&lt;/strong&gt; Y direction which in your case is like this:&lt;br&gt;&#xA;The X vector of the second Frame &lt;strong&gt;(A-Frame)&lt;/strong&gt; is the Y Vector of the world Frame &lt;strong&gt;(O-Frame)&lt;/strong&gt;&lt;br&gt;&#xA;The Y vector of the second Frame &lt;strong&gt;(A-Frame)&lt;/strong&gt; is the opposite of X Vector of the world Frame &lt;strong&gt;(O-Frame)&lt;/strong&gt;&lt;br&gt;&#xA;so if you want to transfer the new Frame by (-2, -2, 0) according to the world Frame you need to transfer it by (-2, 2, 0) according to the new Frame.. so the last column in the second matrix needs to be (-2, 2, 0, 1)&lt;br&gt;&#xA;in this case the last column of the total matrix will be as you expected (-1, -1, 1, 1)    &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;in general&lt;/strong&gt; you need to write the transferring vector always in the last frame coordinates, so you need to apply all the previous transformations on it before you use it in the new transfer matrix&lt;br&gt;&#xA;you need to multiply the (-2, -2, 0) vector by the inverse of first rotating matrix $T_A$ which is ($T_A^T$)  and you will get the new transferring vector (-2, 2, 0) &lt;/p&gt;&#xA;" OwnerUserId="17038" LastActivityDate="2017-05-25T09:15:12.027" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12444" PostTypeId="2" ParentId="10720" CreationDate="2017-05-25T09:34:55.437" Score="0" Body="&lt;p&gt;I really like the answer of Gouda. &#xA;One question though, you state &quot;Pixel space observations are usually randomly Caushy distributed&quot; how does this come about? Could you point me to some references or give an intuitive explanation? Thanks!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding outlier robust Kalman filtering there are two similar approaches to the paper High-Voltage included. &#xA;One is based on L1-regularization, see &lt;a href=&quot;https://www.dtc.umn.edu/s/resources/tsp2011oct_drs.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Doubly Robust Smoothing of Dynamical Processes via Outlier Sparsity Constraints&lt;/a&gt;, and the other is based on sparse Bayesian learning, see &lt;a href=&quot;http://www.isiweb.ee.ethz.ch/papers/docu/fewa-lubr-jdau-aloe-2016.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Outlier-insensitive Kalman Smoothing and Marginal Message Passing&lt;/a&gt;. &lt;/p&gt;&#xA;" OwnerUserId="17049" LastEditorUserId="9176" LastEditDate="2017-05-30T15:32:23.457" LastActivityDate="2017-05-30T15:32:23.457" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12445" PostTypeId="1" AcceptedAnswerId="12450" CreationDate="2017-05-25T14:40:24.747" Score="0" ViewCount="266" Body="&lt;p&gt;I have an object to whom I know the x,y,z position, length, width, height, and x,y velocities. Is there a possibility to compute the yaw angle from this information?  &lt;/p&gt;&#xA;" OwnerUserId="17052" LastActivityDate="2017-05-26T14:37:32.030" Title="Computing Yaw angle from position and velocities" Tags="&lt;mobile-robot&gt;&lt;dynamics&gt;&lt;motion&gt;" AnswerCount="1" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="12446" PostTypeId="2" ParentId="12441" CreationDate="2017-05-25T16:05:41.957" Score="1" Body="&lt;p&gt;The joint type you've added to the &lt;code&gt;URDF&lt;/code&gt; is &lt;code&gt;fixed&lt;/code&gt; rather than the desired &lt;code&gt;floating&lt;/code&gt;. Fortunately, &lt;code&gt;floating&lt;/code&gt; is indeed a type of joint listed in the &lt;a href=&quot;http://wiki.ros.org/urdf/XML/joint#Attributes&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;URDF&lt;/code&gt; Joint spec&lt;/a&gt;. I am not familiar with &lt;code&gt;pybullet&lt;/code&gt; so I can't speak to whether this is the underlying issue with it crashing. It could also be an issue with the &lt;code&gt;XML&lt;/code&gt; version being &lt;code&gt;0.0&lt;/code&gt;; it needs to be at least &lt;code&gt;1.0&lt;/code&gt;. As for your updated &lt;code&gt;URDF&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; ?&amp;gt;&#xA;&amp;lt;robot name=&quot;urdf_robot&quot;&amp;gt;&#xA;&amp;lt;joint name=&quot;control&quot; type=&quot;floating&quot;&amp;gt;&#xA;  &amp;lt;parent link=&quot;base_link&quot;/&amp;gt;&#xA;  &amp;lt;child link=&quot;internal_link&quot;/&amp;gt;&#xA;  &amp;lt;origin xyz=&quot;0.0 0.0 0.5&quot;/&amp;gt;&#xA;&amp;lt;/joint&amp;gt;&#xA;&amp;lt;link name=&quot;internal_link&quot;&amp;gt;&#xA;  &amp;lt;inertial&amp;gt;&#xA;    &amp;lt;mass value=&quot;0.1&quot;/&amp;gt;&#xA;    &amp;lt;origin xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;    &amp;lt;inertia ixx=&quot;1&quot; ixy=&quot;0.0&quot; ixz=&quot;0.0&quot; iyy=&quot;1&quot; iyz=&quot;0.0&quot; izz=&quot;0.01&quot;/&amp;gt;&#xA;  &amp;lt;/inertial&amp;gt;&#xA;&amp;lt;/link&amp;gt;&#xA;&amp;lt;link name=&quot;base_link&quot;&amp;gt;&#xA;  &amp;lt;contact&amp;gt;&#xA;    &amp;lt;rolling_friction value=&quot;0.005&quot;/&amp;gt;&#xA;    &amp;lt;spinning_friction value=&quot;0.005&quot;/&amp;gt;&#xA;  &amp;lt;/contact&amp;gt;&#xA;  &amp;lt;inertial&amp;gt;&#xA;    &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;    &amp;lt;mass value=&quot;0.17&quot;/&amp;gt;&#xA;    &amp;lt;inertia ixx=&quot;1&quot; ixy=&quot;0&quot; ixz=&quot;0&quot; iyy=&quot;1&quot; iyz=&quot;0&quot; izz=&quot;1&quot;/&amp;gt;&#xA;  &amp;lt;/inertial&amp;gt;&#xA;  &amp;lt;visual&amp;gt;&#xA;    &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;    &amp;lt;geometry&amp;gt;&#xA;      &amp;lt;mesh filename=&quot;textured_sphere_smooth.obj&quot; scale=&quot;0.5 0.5 0.5&quot;/&amp;gt;&#xA;    &amp;lt;/geometry&amp;gt;&#xA;    &amp;lt;material name=&quot;white&quot;&amp;gt;&#xA;      &amp;lt;color rgba=&quot;1 1 1 1&quot;/&amp;gt;&#xA;    &amp;lt;/material&amp;gt;&#xA;  &amp;lt;/visual&amp;gt;&#xA;  &amp;lt;collision&amp;gt;&#xA;    &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;    &amp;lt;geometry&amp;gt;&#xA;      &amp;lt;sphere radius=&quot;0.5&quot;/&amp;gt;&#xA;    &amp;lt;/geometry&amp;gt;&#xA;  &amp;lt;/collision&amp;gt;&#xA;&amp;lt;/link&amp;gt;&#xA;&amp;lt;/robot&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="4054" LastActivityDate="2017-05-25T16:05:41.957" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12447" PostTypeId="1" AcceptedAnswerId="12594" CreationDate="2017-05-25T17:01:27.757" Score="3" ViewCount="507" Body="&lt;p&gt;Would an Arduino Uno have the precision-timing required (using only firmware) to control a two-wheeled inverted pendulum robot, or would it need a RTOS?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: Thanks for both answers, they both helped a lot.  I just chose the last answer as the accepted answer.&lt;/p&gt;&#xA;" OwnerUserId="7820" LastEditorUserId="7820" LastEditDate="2017-06-10T23:36:54.323" LastActivityDate="2017-06-11T02:05:35.597" Title="Two-wheeled self-balancing robot - Choosing the control system" Tags="&lt;arduino&gt;&lt;control&gt;&lt;microcontroller&gt;&lt;wheeled-robot&gt;&lt;balance&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12448" PostTypeId="1" CreationDate="2017-05-26T06:40:59.133" Score="1" ViewCount="83" Body="&lt;p&gt;My robot system uses a 3D mouse to teleoperate the robotic arm's TCP. The robot returns its TCP's position every 10-20 milliseconds to the remote PC. The remote PC returns the new destination based on the current position and an input from the 3D mouse (new destination = current position + delta input from the mouse).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is that the communication between the robot and the remote PC has delay around 100 milliseconds. Because of this condition, the robot can't generate a smooth trajectory, but it goes back and forth (jittered motion), or it repeats stop and start to move. I understand that this is because the current position is not updated in real-time and that leads to generating a wrong destination (even backward when the robot moves forward). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;One thing I already tried was to filter out the target if the length between it and the current position was smaller than the one between the previous destination and the current position. However, I couldn't succeed because the robot requires the target update every 10-20 msec, and if not sending (or if sending the previous destination again), the robot stopped to move. So, this solution didn't work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know how to calculate/update the new destination every cycle in this condition? Do I need to forecast the new destination based on the past trajectory?&lt;/p&gt;&#xA;" OwnerUserId="15905" LastActivityDate="2017-11-22T11:04:30.680" Title="How to update the cartesian target when the robotic arm has a communication delay?" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;industrial-robot&gt;&lt;forward-kinematics&gt;&lt;communication&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12449" PostTypeId="2" ParentId="12448" CreationDate="2017-05-26T08:09:10.147" Score="2" Body="&lt;p&gt;You should update the robot references (and current position) independently if there is an update from the mouse or not. If there is an update (i.e. after 100 ms) you should update the value sent each 20ms to the robot. This way the robot shoudl never move backwards. I assume the backwards motion comeing from sending a new target position, and then sending the old (not updated) current position with a 0 delta. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Furhter improvmnet can be made by sending velocity references not postion references. Instead of positon targets, get directions and amplitude from the 3D mouse and use it as a velocities reference. Instead of &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;new destination = current position + delta input&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;use&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;new velocity = mouse direction + amplitude&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This way you can control he velocity of the robot from the mouse which is helpful in many scenarios. A more advanced approach which is used by many is a hybrid approach. If the motion amplitude on the mouse is low, then it is a position control if the amplitude is high then it is a velocity reference. This alows both comfortable input of large amplitude motions and precise fine positioning. &lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2017-05-26T08:09:10.147" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12450" PostTypeId="2" ParentId="12445" CreationDate="2017-05-26T14:37:32.030" Score="0" Body="&lt;p&gt;if you mean by the &quot;x,y,z positions and x,y velocities&quot; just for one point of the object for example: &lt;strong&gt;&lt;em&gt;The Mass Center&lt;/em&gt;&lt;/strong&gt; or &lt;strong&gt;&lt;em&gt;The Geometrical Center&lt;/em&gt;&lt;/strong&gt; so the answer is &lt;strong&gt;No it is not possible&lt;/strong&gt;, because it's possible for any point of the object to have any value for this parameters &quot;x,y,z positions and x,y velocities&quot; for different Yaw angles&lt;br&gt;&#xA;but if you have another constrain or information about the object it may become possible to compute the yaw angle from this information&lt;/p&gt;&#xA;" OwnerUserId="17038" LastActivityDate="2017-05-26T14:37:32.030" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12452" PostTypeId="2" ParentId="12436" CreationDate="2017-05-26T18:15:25.667" Score="0" Body="&lt;p&gt;Thanks Bakna! I got a response back from Servo City that this would be OK, I ordered a couple of these battery packs. I've got a project going where I took my daughter's old kiddy car and turned it into our own mars-rover type vehicle. I control it via wi-fi to a raspberry pi mounted on the vehicle and a Python GUI I run from a pc in the house. The raspberry pi controls an h bridge I built out of relays, with a big FET on the bottom that is driven by the PWM output on the raspberry pi for speed control. The real problem with the weight of the SLA battery is that I have a steep driveway, and with any speed at all, the momentum with the weight of the heavy SLA battery means that there is just no stopping the thing going downhill. This ought to solve that problem as well as help with overall load on the motors. Take care, thanks again! &lt;/p&gt;&#xA;" OwnerUserId="17045" LastActivityDate="2017-05-26T18:15:25.667" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12453" PostTypeId="1" CreationDate="2017-05-26T19:38:37.527" Score="0" ViewCount="41" Body="&lt;p&gt;For a science project, I'm looking for a way to actuate a spring, connecting two ~ 1 cm Styrofoam spheres to each other, at frequencies around 1-60 Hz. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In other words, I want to be able vibrate 2 connected spheres around their center of mass.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is this spring I'm looking for?&lt;/p&gt;&#xA;" OwnerUserId="17071" LastActivityDate="2017-08-24T23:41:49.077" Title="Electronic Spring Vibrating Spheres" Tags="&lt;kinematics&gt;&lt;actuator&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12454" PostTypeId="2" ParentId="12453" CreationDate="2017-05-26T22:18:57.450" Score="1" Body="&lt;p&gt;The term for the electrical component that actuated (vibrates) at a selectable frequency is &quot;Piezoelectric actuator&quot;. You can also examine vibration motors, like in the mobile phones or in the toothbrushes, which vibrate at predefined frequencies. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However if you are allowed to pick your own spring, and/or if you can change the masses attached, you can use even a sound card or a direct impulse on the spring, or a vibration motor to generate a vibration of need. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the piezoelectric actuator, you supply voltage and it resonates accordingly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the mass (or spring) changing method, you will solve some good and simple physics problems. I would recommend professor Walter Levin's lectures, which are  funny and seriously great classes, available on the Internet. &lt;/p&gt;&#xA;" OwnerUserId="9570" LastActivityDate="2017-05-26T22:18:57.450" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12456" PostTypeId="2" ParentId="8419" CreationDate="2017-05-27T02:42:42.647" Score="0" Body="&lt;p&gt;The problem is not with the code, but with the point you want to send the arm in the simulation. Whats going is the goal's points constitute a cartesian distance larger than the manipulator can catch. It occurs cause in python may have some numerical errors when the simulation is running.&lt;/p&gt;&#xA;" OwnerUserId="17076" LastActivityDate="2017-05-27T02:42:42.647" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12458" PostTypeId="1" CreationDate="2017-05-27T08:19:38.150" Score="0" ViewCount="115" Body="&lt;p&gt;I am starting to work with 4 DOF Robotic Arm project.it has the following specs:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1- the speed of the tip of the end-effector is constant and adjustable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2- the robot is controlled via joysticks which determine the direction of movement of the end-effector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3- also the orientation of the end-effector is controlled.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;to implement these specs I need a processor that can handle forward kinematics, inverse kinematics, trajectory related calculations in addition to reading from sensors and camera.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;can Arduino Handle all that?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;what are alternatives available?&lt;/p&gt;&#xA;" OwnerUserId="17081" LastActivityDate="2017-05-27T15:01:15.337" Title="Do Arduino Boards contain enough processing power for 4 DOF Robotic Arm" Tags="&lt;arduino&gt;&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2017-05-29T11:41:20.240" ContentLicense="CC BY-SA 3.0" />
  <row Id="12459" PostTypeId="2" ParentId="12458" CreationDate="2017-05-27T15:01:15.337" Score="1" Body="&lt;p&gt;I dont think that a single arduino board will be able to handle all that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe start out with implementing controllers on your arduino? And let your computer handle the kinematics, camera and so on? Then you will also learn about communication between your computer and a Arduino board.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another alternative may be a Raspberry PI, but I don't know about the computational power in that one. I think your biggest limitation is the camera, but I may be wrong.&lt;/p&gt;&#xA;" OwnerUserId="16909" LastActivityDate="2017-05-27T15:01:15.337" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12463" PostTypeId="1" CreationDate="2017-05-28T11:51:59.650" Score="0" ViewCount="126" Body="&lt;p&gt;I am writing a bachelor's diploma on vSLAM. I learned and programmed EKF-SLAM like it's written in MonoSLAM paper, and I was going to write, that I can't use KF and have to use EKF because of non-linearity of observation function, but wait, how is it possible, if everything is linear?! &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I understand, that if I store direction of a camera in form of axis-angle vector or quaternion then there will be something non-linear, but what if I will store it directly as values of rotation matrix? Then my observation function is just going to be a multiplication of matrices, which is a linear operator, and therefore linear. Am I wrong?&lt;/p&gt;&#xA;" OwnerUserId="17039" LastActivityDate="2017-05-30T17:39:19.140" Title="Why EKF-SLAM uses EKF instead of linear Kalman Filter?" Tags="&lt;slam&gt;&lt;kalman-filter&gt;&lt;ekf&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12465" PostTypeId="1" CreationDate="2017-05-28T13:52:17.057" Score="1" ViewCount="399" Body="&lt;p&gt;For a project we use a brushless DC (BLDC) motor. Everything works fine until we tried to reach high velocities. I will first explain my setup, and than explain our problems using some graphs.&lt;/p&gt;&#xA;&lt;h1&gt;1.0 Setup&lt;/h1&gt;&#xA;&lt;p&gt;The following hardware is used in the setup:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;BLDC motor: Tiger motor U8 (135kV)&lt;/li&gt;&#xA;&lt;li&gt;Motion controller: SOMANET DC 1K&lt;/li&gt;&#xA;&lt;li&gt;Encoder: RM08 12 bit absolute encoder&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;An overview of the setup is shown below:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/pvr9a.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/pvr9a.jpg&quot; alt=&quot;Tiger motor test setup&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2&gt;1.1 Requirements and Parameters&lt;/h2&gt;&#xA;&lt;p&gt;We need about 4800 [RPM] from the motor. The Tiger motor has a kv value of 135 [RPM/V], connecting it to a 48 [V] supply means it theoretically should be able to go up to 6500 [RPM]. The specsheat includes a scenario where it reaches 5000 [RPM] while a propeller is connected to it, so 4800 [RPM] with no load should not be a problem.&lt;/p&gt;&#xA;&lt;h1&gt;2.0 Problem&lt;/h1&gt;&#xA;&lt;p&gt;We are not even getting close to the 4800RPM, a plot of the motor velocity vs phase current is shown below. We can identify 2 problems from this plot.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/tEtav.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tEtav.jpg&quot; alt=&quot;Current vs velocity plot&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2&gt;2.1 Inefficient commutation&lt;/h2&gt;&#xA;&lt;p&gt;The first thing which was remarkable from the test is that about 10 [A] was already required to turn at 3200 [RPM] without any load connected. This seems to be caused by inefficient commutation, we figured there are two main possible causes for this.&lt;/p&gt;&#xA;&lt;h3&gt;2.1.1 Phase offset error&lt;/h3&gt;&#xA;&lt;p&gt;Their might be an error in the phase offset used, this will cause an linear increase in required current with velocity. This can be best solved by finetuning the offset at a high velocity. However our curve does not seem linear, thus this does not seem to be the case.&lt;/p&gt;&#xA;&lt;h3&gt;2.1.2 Delay error&lt;/h3&gt;&#xA;&lt;p&gt;There is a certain amount of delay in between requesting the position from the RM08 and applying the new voltage. This delay can cause the current to exponential increase with motor velocity, which is true in our case.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/lKkzK.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/lKkzK.png&quot; alt=&quot;Estimated delay&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;By adding up al delays we found a total delay of ~0.1 ms in the system (see above). Spinning at 3000RPM = 50Hz and using 21 pole pairs means that the electrical turning frequency is 1050Hz, than a delay of 0.1 ms would cause a 37.8 electrical degree error, This likely causes the inefficiency!&lt;/p&gt;&#xA;&lt;h2&gt;2.2 Control going crazy&lt;/h2&gt;&#xA;&lt;p&gt;if we try to go above ~3200 RPM, the motor starts pulling a lot of current and makes a lot of noise. This means the motor is not operational above 3000RPM, this seems to be the most urgent problem at the moment.&lt;/p&gt;&#xA;&lt;h3&gt;Voltage dependency&lt;/h3&gt;&#xA;&lt;p&gt;Normally the motor velocity is limited by back-EMF, if the back EMF would be causing this issue the problem would be voltage dependent. Therefore some measurements where done at different voltage levels, see the two images below:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/mk56h.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/mk56h.png&quot; alt=&quot;Velocity setpoint VS Actual velocity&quot; /&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/irHiT.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/irHiT.png&quot; alt=&quot;Actual velocity VS current&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The moment where the motor stops following the velocity sweep seems to increase linearly with voltage. Another interesting outcome is that at 30V the motor just stops following the velocity sweep, while at the higher voltages (40V and 43V) the motor suddenly dropped to a lower velocity. Note that the 46V test stopped before this moment because to high current peaks were flowing trough the SOMANET (35A).&#xA;However it seems unlikely the back-EMF is the problem since Tiger has been able to reach 5000RPM themselves.&lt;/p&gt;&#xA;&lt;h1&gt;Solutions&lt;/h1&gt;&#xA;&lt;p&gt;For the first problem we thought we could use something like:&lt;/p&gt;&#xA;&lt;p&gt;Pcorr = Penc + t_delay * Vel.&lt;/p&gt;&#xA;&lt;p&gt;With:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Vel: angular velocity&lt;/li&gt;&#xA;&lt;li&gt;t_delay: the delay compensation gain&lt;/li&gt;&#xA;&lt;li&gt;Penc: the encoder position for the rotor&lt;/li&gt;&#xA;&lt;li&gt;Pcor: the delay compensated position&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;However this didn't save the problem at all. Do you have any other suggestions?&lt;/p&gt;&#xA;&lt;p&gt;For the second problem we can't think of any cause, can you think of any?&lt;/p&gt;&#xA;" OwnerUserId="15496" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2017-05-29T12:05:56.970" Title="Brushless DC motor problems at high velocities" Tags="&lt;control&gt;&lt;brushless-motor&gt;&lt;current&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12466" PostTypeId="1" AcceptedAnswerId="12493" CreationDate="2017-05-29T02:55:54.027" Score="3" ViewCount="211" Body="&lt;p&gt;I am making a Ping pong-playing robot, &lt;a href=&quot;https://www.youtube.com/watch?v=NjLHnT9ZtPw&quot; rel=&quot;nofollow noreferrer&quot;&gt;like the one in this video&lt;/a&gt;, and i am intending to use two cameras to trace the ball in 3D space. Supposing that the robot is playing against a beginner player, the ball takes about &lt;strong&gt;0.7 second&lt;/strong&gt; to travel from one side of the table to the other. but during this time the robot should process number of frames and predict the rest of the ball track, and the robotic arm should  move to the required position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I read some papers talking about the same project, but I found a big difference from one to another(some paper used 30 FPS, while other one used 120 FPS). I didn't order the cameras yet, and I can't try more than once because it is a graduating project, so the time and the budget are limited. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;So is there any way to predict the minimum Frame rate of the cameras?&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also heard that some projects are using &lt;a href=&quot;https://en.wikipedia.org/wiki/Kinect&quot; rel=&quot;nofollow noreferrer&quot;&gt;Kinect&lt;/a&gt; instead of using two cameras or 3D vision,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Is the &lt;strong&gt;Kinect&lt;/strong&gt; fast and precise enough for my project?&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="17023" LastActivityDate="2017-05-30T23:24:44.337" Title="I am making a Ping pong-playing robot using two cameras to trace the ball (3D vision),what is the minimum Frame rate of the cameras?" Tags="&lt;robotic-arm&gt;&lt;cameras&gt;&lt;kinect&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12467" PostTypeId="1" CreationDate="2017-05-29T03:33:01.437" Score="2" ViewCount="61" Body="&lt;p&gt;In stereo vision, the camera is calibrated using the popular chessboard before use. During the course of use, the camera maybe be subject to environmental factors such as vibrations.This may cause calibration parameters to drift. I hope to correct calibration parameters online without using the chessboard. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Currently I assume: &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;focal length and principal points of two camera are constant,&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;the distance between them is constant &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;only  orientations of two camera changes.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The initial calibration parameters are available. Left/right images are undistorted using each individual camera calibration parameters.&#xA;Corresponding points can be established by detecting feature points and matching them from undistorted left/right images&#xA;Fundamental matrix can be calculated. I will call it calculated  fundamental matrix.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fundamental matrix can be derived from calibration parameters of stereo system, and I will call it derived fundamental matrix.&#xA;The two fundamental matrix should be same if calibration parameters of stereo system doesn't change.&#xA;Otherwise I can get rotation matrix between the equation relating fundamental matrix to ration matrix and translation between two cameras&#xA;and each camera intrinsic matrix.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am new to multiple view geometry. Is this a viable method? Is there any other method for that?&#xA;Any link to websites and papers are appreciated.&lt;/p&gt;&#xA;" OwnerUserId="15460" LastActivityDate="2017-05-29T15:58:37.093" Title="Correct calibration parameters of stereo system due to vibrations" Tags="&lt;cameras&gt;&lt;stereo-vision&gt;&lt;calibration&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12469" PostTypeId="1" CreationDate="2017-05-29T11:43:24.510" Score="1" ViewCount="832" Body="&lt;p&gt;I would like to know if it is possible (and if it is possible how can it be done) to estimate the yaw angle and yaw rate of a vehicle in front of me knowing the following information:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-my speed (x,y,z),my position(x,y,z),my yaw angle and my yaw rate&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-the relative speed to me(on x and y) of the vehicle/robot to which I want to find the yaw and yaw rate&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-the position(x,y,z) of a point on the vehicle( corner of a vehicle) the length, width and height of the vehicle&lt;/p&gt;&#xA;" OwnerUserId="17052" LastActivityDate="2018-12-21T07:01:30.303" Title="Estimating yaw angle and yaw rate for a frontal vehicle" Tags="&lt;mobile-robot&gt;&lt;control&gt;&lt;dynamics&gt;&lt;motion&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12470" PostTypeId="2" ParentId="12465" CreationDate="2017-05-29T12:05:56.970" Score="1" Body="&lt;p&gt;Nice detail in your question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The somanet site makes a big deal about their firmware being open source, so you should be able to check the timing in the code (or otherwise get the help of the somanet engineers). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A 15kHz PWM is the slowest I've seen in a long time and could indicate that that they had trouble fitting the commutation algorithm to their architecture. Or maybe they are optimizing switching losses which is all good.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Either way the PWM frequency is not part of the commutation calculation or estimated latency. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The commutation should use velocity and encoder latency in it's calculation. If not, and the math indicates it can't keep up, use a separate lower res encoder for commutation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Verify that the noise on the motor bus is not affecting the encoder signal. &lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2017-05-29T12:05:56.970" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="12471" PostTypeId="2" ParentId="12469" CreationDate="2017-05-29T13:17:18.810" Score="1" Body="&lt;p&gt;You need to state some other piece of information, which might be obvious in your mind:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Are the two vehicles exactly the same?&lt;/li&gt;&#xA;&lt;li&gt;Do you know the motion equations of them?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Any angular acceleration is a torque divided by the inertia moment, and by numeric integration or any other method, you usually can calculate the angular rate and instantaneous value. This is the correct method as far as I know.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I only can guess of sort of rather not series methods to try to guess the yaw of that vehicle, which would imply the usage of rule of three. But I insist on that, more data is needed, and that calculus is no reliable at all. &lt;/p&gt;&#xA;" OwnerUserId="10539" LastEditorUserId="10539" LastEditDate="2017-05-29T14:52:06.180" LastActivityDate="2017-05-29T14:52:06.180" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12474" PostTypeId="2" ParentId="12467" CreationDate="2017-05-29T15:58:37.093" Score="1" Body="&lt;p&gt;You could use &lt;a href=&quot;https://github.com/RainerKuemmerle/g2o&quot; rel=&quot;nofollow noreferrer&quot;&gt;g2o&lt;/a&gt; library for this. With it you can make a graph whose nodes are estimates of some states (point positions in 3d, point positions on images, extrinsic calibration parameters) and edges are cost functions. The library then alters the estimates to minimize the overall cost. You can assign confidence to estimates so that it changes less the estimates that you are very sure about.&lt;/p&gt;&#xA;" OwnerUserId="4017" LastActivityDate="2017-05-29T15:58:37.093" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12476" PostTypeId="1" AcceptedAnswerId="12489" CreationDate="2017-05-29T18:13:02.153" Score="0" ViewCount="641" Body="&lt;p&gt;I've been planning to make an electric skateboard for a while now. All the tutorials that I have seen use brushless motors. However, where I live, its not possible to get the exact ones as shown in those tutorials. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ones I can buy are somewhat like &lt;a href=&quot;http://www.amazon.in/1000kv-Outrunner-Brushless-conectors-REES52/dp/B01BQJ2T7U/ref=pd_sim_328_7?_encoding=UTF8&amp;amp;psc=1&amp;amp;refRID=1Q958P0BJH68GE8C59VJ&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The one shown in the tutorials is &lt;a href=&quot;http://alienpowersystem.com/shop/brushless-motors/alien-5065-sensored-outrunner-brushless-motor-270kv-2200w-2/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am new to brushless motors. The one in the tutorial in 270kv and the one I can buy is 1000kv (and above) but they both differ greatly in size. Plus there's this &quot;outrunner&quot; thing. The ones I can buy seem to be made for quadcopters and similar stuff.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So am I okay using the ones I can buy? The little 1000 kv ones, considering the fact that they need to run a 14T to 36T pulley system with approx 70kgs of weight on the board.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or maybe I could just use the 12v 10Amp 1000RPM DC Motor that I have lying around?&lt;/p&gt;&#xA;" OwnerUserId="13533" LastActivityDate="2017-05-30T16:05:07.767" Title="Motor for DIY Electric skateboard" Tags="&lt;motor&gt;&lt;brushless-motor&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12477" PostTypeId="2" ParentId="12476" CreationDate="2017-05-29T18:20:42.100" Score="1" Body="&lt;p&gt;The 1000kv motor will probably not have enough torque, and the 10A motor will drain your battery (I am assuming you will be running on a battery) way too fast. &#xA;The motors you want are a lower kv that might not spin as fast, but will have enough starting torque to get you moving from a standstill.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://oscarliang.com/quadcopter-motor&quot; rel=&quot;nofollow noreferrer&quot;&gt; Here is some good information on the types of motors you are talking about that might help you out. It applies to quadcopters but will help you understand the basics about motors and what their values and capabilities are.  &lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13204" LastActivityDate="2017-05-29T18:20:42.100" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12479" PostTypeId="2" ParentId="12466" CreationDate="2017-05-29T22:53:49.330" Score="1" Body="&lt;ul&gt;&#xA;&lt;li&gt;First you need to calculate the maximum processing period time you can accept, preferably use &lt;strong&gt;(motor response time)/5&lt;/strong&gt; or less to be sure that the motors move smoothly ..  &lt;/li&gt;&#xA;&lt;li&gt;also you need to calculate the time you need to process the image because the processor that you use has a processing limit that you need to consider.. &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;so the frame rate you need should be fast enough to achieve the first condition, but it would be waste to make faster than what your processor can handle.&lt;br&gt;&#xA;but in general for graduating project 30 FPS is probably enough.. it will provide a good information to predict the trajectory of the ball.&lt;/p&gt;&#xA;" OwnerUserId="17038" LastActivityDate="2017-05-29T22:53:49.330" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12480" PostTypeId="1" CreationDate="2017-05-30T01:13:26.233" Score="2" ViewCount="133" Body="&lt;p&gt;I have a 6 DOF arm robot with a mobile base, and a given x/y/z/quaternion vector that the end effector must match. I am to determine the most optimal position of the mobile base such that an IK solution for the arm can be constructed from the end effector vector. I already have an IK method for the arm alone, but not one that includes the mobile base. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not to mention, there is a collision aspect to this too. There is collision that the arm must avoid around the vector, which can easily be filtered with my simulator, but is just something that must be considered. Could anybody point out any algorithms that could possibly help? Thank you for your time.&lt;/p&gt;&#xA;" OwnerUserId="11004" LastActivityDate="2018-09-23T03:01:13.490" Title="Algorithm for Determining Mobile Base Positioning Given End Effector Pose" Tags="&lt;mobile-robot&gt;&lt;inverse-kinematics&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12484" PostTypeId="2" ParentId="12480" CreationDate="2017-05-30T13:03:05.480" Score="0" Body="&lt;p&gt;If you have acces to academic sources (google scholar), relevant publications are from Vahrenkamp, Stulp and Zacharias.&lt;/p&gt;&#xA;" OwnerUserId="17117" LastActivityDate="2017-05-30T13:03:05.480" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12485" PostTypeId="1" CreationDate="2017-05-30T13:45:08.443" Score="1" ViewCount="91" Body="&lt;p&gt;I bought a qx95 and after a few flights, maybe 3, there was black smoke that fizzled out of the what looks like the flight controller. And since then, anytime I give throttle - the fpv video feed cuts signal. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm assuming what I fizzled was some sort of limiter / power converter for the video? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is - what do I need to replace? Was that the flight controller or camera? Any thoughts on what I need to replace or repair? &lt;/p&gt;&#xA;" OwnerUserId="17118" LastEditorUserId="37" LastEditDate="2017-05-30T17:24:34.087" LastActivityDate="2017-06-30T06:47:59.713" Title="Quadcopter flight controller - black smoke?" Tags="&lt;quadcopter&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12486" PostTypeId="1" CreationDate="2017-05-30T14:59:41.283" Score="2" ViewCount="199" Body="&lt;p&gt;Is there an exact definition for conventional and unconventional path planning methods? What are the features that help distinguish conventional and unconventional path planning methods? What is an example of conventional and unconventional path planning methods? &lt;/p&gt;&#xA;" OwnerUserId="17119" LastEditorUserId="9176" LastEditDate="2017-05-30T15:36:12.050" LastActivityDate="2017-05-30T20:53:47.613" Title="What is the difference between conventional and unconventional path planning methods?" Tags="&lt;motion-planning&gt;&lt;path-planning&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12488" PostTypeId="2" ParentId="12485" CreationDate="2017-05-30T15:59:29.890" Score="1" Body="&lt;p&gt;Double check whether it was the flight controller that burnt out, if it was the flight controller, then you should clearly see a difference in flight.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, throttle input and the fpv video aren't related unless you are using a power distribution board of some sort that can't take the high voltages or amperage. Check if all the wires and PCBs are ok.&lt;/p&gt;&#xA;" OwnerUserId="11688" LastActivityDate="2017-05-30T15:59:29.890" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="12489" PostTypeId="2" ParentId="12476" CreationDate="2017-05-30T16:05:07.767" Score="1" Body="&lt;p&gt;Check the legal requirements of the motors for your area.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The little 1000kV motors wouldn't have sufficient torque...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Look for anything below 600kV and the motor should be equal to or under the legal limit of the motor wattage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just to let you know...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;kV means RPM per volt&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 'k' is the constant&#xA;The 'V' is the volts&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1000 kV means 1000 RPM per volt &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Normally, higher kV motors have less torque and they are mainly used for small multicopters&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Higher kV would have a lower top speed and much higher torque and they can be used for larger multicopter or projects like electric long board or e-bikes.&lt;/p&gt;&#xA;" OwnerUserId="11688" LastActivityDate="2017-05-30T16:05:07.767" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="12490" PostTypeId="2" ParentId="11833" CreationDate="2017-05-30T16:11:34.487" Score="1" Body="&lt;p&gt;Either the battery levels are low or the flight controller hasn't been set up yet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, calibrate the flight controller sensors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After, Calibrate the ESCs. (Do this without props!)&#xA;Then set up the flight controller, so set the motor max values and min values.&lt;/p&gt;&#xA;" OwnerUserId="11688" LastEditorUserId="11688" LastEditDate="2019-10-27T16:10:03.023" LastActivityDate="2019-10-27T16:10:03.023" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12491" PostTypeId="2" ParentId="12463" CreationDate="2017-05-30T17:39:19.140" Score="1" Body="&lt;p&gt;Well in EKF SLAM, the underlying assumption is that all states are gaussian in nature and we can linearize the motion and observation models around the mean at each instant. This is done to write the equations in a form similar to what you see in the Kalman Filter. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Note:&lt;/em&gt; This linearization is just an approximation that we have made. It leads to error due to which nowadays we use other methods like Graph SLAM or particle filters. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even if you represent the angles in form of a rotation matrix, the cosine and sine functions are non- linear in nature which we can't get rid of easily. The states contain angles and model is a function of states which is non- linear in nature. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can store them in your state space however that just increases the dimension of your state space since instead of three euler angles, you now have 6 terms (cosine and sine value of each angle). This is really undesirable in nature as it unnecessarily increases the computation time of the over all algorithm (which is of the order $O(n^{2.4})$ in EKF SLAM. &lt;/p&gt;&#xA;" OwnerUserId="17122" LastActivityDate="2017-05-30T17:39:19.140" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12492" PostTypeId="2" ParentId="12486" CreationDate="2017-05-30T20:53:47.613" Score="1" Body="&lt;p&gt;Conventional methods relate to Djikstra algorithm, A-star algorithm or any other direct methods to find the path. Non conventional ones usually refer to genetic algorithms, particular swarm optimization, neural networks... Which are not thought for this geometrical issue, but for other kind of problems.&lt;/p&gt;&#xA;" OwnerUserId="10539" LastActivityDate="2017-05-30T20:53:47.613" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12493" PostTypeId="2" ParentId="12466" CreationDate="2017-05-30T21:49:43.580" Score="3" Body="&lt;p&gt;The movement of the ping pong ball is going to be ballistic, so you really only need to know its 3d position in 3 different locations in order to fully constrain its motion. In reality, you will probably want more. This excellent paper &lt;a href=&quot;http://scholarworks.rit.edu/cgi/viewcontent.cgi?article=1582&amp;amp;context=other&quot; rel=&quot;nofollow noreferrer&quot;&gt;An Application of human-robot interaction: Development of a ping-pong playing robotic arm&lt;/a&gt; uses around 8-10 locations in order to fully constrain the ballistic motion, including the bounce off the table. It also has a review of past systems and approaches.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You really need to think not about the frame rate of the camera but the processing rate of the system.If you say you need 6 3d locations between both sides of the table then having more than:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ \frac{6 frames}{.7 sec} = 8.5 fps $$&#xA; does not really help you, but it imposes another limitation, you need to be able to capture, transfer and process images in less than:&#xA;$$ \frac{1 sec}{8.5} = 117ms $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This usually ends up being the limitation for these kinds of systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additional food for thought, syncing the camera's shutter is usually pretty important or at least sampling the images close to one another. For example with two 30FPS cameras the maximum time between two frames acquired by the computer at the &quot;same&quot; time is 33ms but in the time the ball will have traveled &#xA;$$ \left(\frac{2.7m}{0.7 sec} * 33ms \right) = 12.8 cm $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depending on how your analyzing the data this might be significant (hint it probably is) This is why some people might be using 120fps cameras reducing the max error to around 3.2cm or you might use cameras that have a global shutter clock/sync to make sure that every image captured by all your cameras are taken at the same instant. The &lt;a href=&quot;https://www.ptgrey.com/firefly-mv-usb2-cameras&quot; rel=&quot;nofollow noreferrer&quot;&gt;Firefly MV&lt;/a&gt; camera series is an inexpensive example of cameras that can have their shutters synchronized. &lt;/p&gt;&#xA;&#xA;&lt;h3&gt;TL;DR&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The Kinect is probably fast enough for your purpose, it's certainly cheaper than using Point Grey cameras, so I would give it a shot, I think moving a robot arm fast and accurate enough will be a bigger challenge.&lt;/p&gt;&#xA;" OwnerUserId="7066" LastEditorUserId="7066" LastEditDate="2017-05-30T23:24:44.337" LastActivityDate="2017-05-30T23:24:44.337" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12494" PostTypeId="1" CreationDate="2017-05-31T02:26:27.163" Score="2" ViewCount="83" Body="&lt;p&gt;So I have a quad with a black-box estimator on it. The black box estimates the pose of the quad. I also have a Vicon system that I'm using to get the ground truth pose of the quad. I'm trying to transform the output from the black-box system into the coordinate frame of the Vicon system so I can compare the two.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have two series' of points recorded using the whole setup that I am trying to use to compute this transformation (from one world frame to the other world frame).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're not familiar, it is possible to compute a transformation between two frames given a set of points in each frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have implemented the method described in the paper &lt;a href=&quot;https://igl.ethz.ch/projects/ARAP/svd_rot.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Least-Squares Rigid Motion Using SVD&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I'm getting wonky results:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/OyAVL.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OyAVL.png&quot; alt=&quot;X position: Transformation fitted over first 100 data points&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it's not clear, if the transformation were working correctly, the points labeled 'transformed' displayed on the graph below would roughly overlap with those labeled 'Vicon'. As you can see, they only overlap for less than half a second.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any suggestions? Ideas about what could be wrong?&lt;/p&gt;&#xA;" OwnerUserId="17127" LastEditorUserId="17127" LastEditDate="2017-05-31T17:46:43.013" LastActivityDate="2017-09-12T20:44:48.170" Title="Problem with Coordinate Transformation" Tags="&lt;quadcopter&gt;&lt;frame&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12495" PostTypeId="1" AcceptedAnswerId="12498" CreationDate="2017-05-31T06:10:30.607" Score="1" ViewCount="277" Body="&lt;p&gt;I have seen that it is possible to use MoveIt! for path planning and obstacle avoidance for quadcopters/quadrotors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=NRzeQD_Etog&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=NRzeQD_Etog&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=VlBQLbmc03g&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=VlBQLbmc03g&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Is MoveIt! as suitable for path planning and obstacle avoidance for fixed-wings aircraft as it is for quadrotors? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main difference I can think of is that quadrotors can stop at will, while fixed-wing aircraft have to continue moving to stay in the air. Will this be a problem for path-planning and obstacle avoidance in MoveIt?&lt;/p&gt;&#xA;" OwnerUserId="17129" LastActivityDate="2017-05-31T15:22:32.373" Title="Is MoveIt! suitable for fixed-wing aircraft path planning and obstacle avoidance?" Tags="&lt;ros&gt;&lt;uav&gt;&lt;path-planning&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12497" PostTypeId="2" ParentId="11877" CreationDate="2017-05-31T15:00:13.827" Score="2" Body="&lt;p&gt;The model you have given is called the unicycle model and is widely used n robotics. In general the model is given by&#xA;\begin{eqnarray}&#xA;\dot{x} &amp;amp;= v\cos \theta \\&#xA;\dot{y} &amp;amp;= v\sin \theta \\&#xA;\dot{\theta} &amp;amp;= \omega&#xA;\end{eqnarray}&#xA;where $v = 1/2(v_1+v_2)$ and $\omega = 1/b(v_2-v_1)$ are the controls of the robot. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The method that you have mentioned is a waypoint following method, where the destination would be updated as you reach a point along a path. The problem is, due to the Lyapunov design, the destination is approached exponentially, i.e, as $t\rightarrow \infty$. Thus, the robot would slow down exponentially as it approaches the target.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One way to overcome this is to use design process that uses feedback linearization. But first you need to parameterize the path you get from A* with time to get a desired trajectory $\mathbf{x_d}(t)$. This is easy to do by selecting a speed for the robot to traverse the path.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next select a point $p$ that is a distance $d$ away from the point of rotation of the robot, along the central axis of the robot. Assume that this point $p$ has a fully actuated kinematic model given by,&#xA;$$ \mathbf{\dot{x}_p} = \mathbf{v_p}$$ where $\mathbf{v_p}$ is the control for this point. If we set, &#xA;$$ \mathbf{v_p} = k_v(\mathbf{x_d}(t) - \mathbf{x_p}(t) ) + \mathbf{\dot{x}_d}(t), $$ then $\mathbf{x_p} \rightarrow \mathbf{x_d}$ exponentially, i.e., the point $p$ will follow the path. Note that its the point $p$ that follows the path and not the rotation center of the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Control Design,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next you should set the controls $v$ and $\omega$ of the robot so that point $p$ has this desired control $\mathbf{v_p}$. The position of the point $p$ can be written as,&#xA;$$ \mathbf{x_p} = \mathbf{x_0} + d[\cos \theta, \sin \theta ]^T.$$ Thus the velocity of the point $p$ is,&#xA;$$ \mathbf{\dot{x}_p} = \mathbf{\dot{x}_0} + d\dot{\theta}[-\sin \theta, \cos \theta ]^T.$$&#xA;Using the kinematic model of the robot to substitute for $\mathbf{x_0}$ and $\dot{\theta}$, this can be written as,&#xA;\begin{equation}&#xA;\mathbf{\dot{x}_p} = &#xA;\left[ &#xA;  \begin{array}[c c]&#xA;     g\cos\theta &amp;amp; -d\sin \theta\\&#xA;    \sin\theta &amp;amp; d\cos \theta &#xA;  \end{array}&#xA;\right]&#xA;\left[ &#xA;  \begin{array}[c]&#xA;     sv\\ \omega&#xA;  \end{array}&#xA;\right].&#xA;\end{equation}&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to get $p$ to follow the trajectory, we need $\mathbf{\dot{x}_p} = \mathbf{v_p} = k_v(\mathbf{x_d}(t) - \mathbf{x_p}(t) ) + \mathbf{\dot{x}_d}(t)$. Thus, the required controls are given by,&#xA;\begin{equation}&#xA;\left[ &#xA;  \begin{array}[c]&#xA;     sv\\ \omega&#xA;  \end{array}&#xA;\right] = &#xA;1/d\left[ &#xA;  \begin{array}[c c]&#xA;     gd\cos\theta &amp;amp; d\sin \theta\\&#xA;    -\sin\theta &amp;amp; \cos \theta &#xA;  \end{array}&#xA;\right]\bigg(k_v(\mathbf{x_d}(t) - \mathbf{x_p}(t) ) + \mathbf{\dot{x}_d}(t)\bigg).&#xA;\end{equation}&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once the controls are set, the wheel speeds can be set as,&#xA;\begin{eqnarray} &#xA;v_1 = \frac{2v +b\omega}{2}\\&#xA;v_2 = \frac{2v -b\omega}{2}&#xA;\end{eqnarray}&lt;/p&gt;&#xA;" OwnerUserId="17133" LastActivityDate="2017-05-31T15:00:13.827" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12498" PostTypeId="2" ParentId="12495" CreationDate="2017-05-31T15:22:32.373" Score="3" Body="&lt;p&gt;Not really MoveIt! is designed for robotic arms, and is being heavily adapted for the applications you see here, fixed wing aircraft typically use very diffrent types of motion planning becouse of the fact that they must maintain some forward velocity that is related to its bank angle. Aircraft motion planning typically also contains maxium g force constraints as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When picking a motion planning algorithm you need to pick what you want to optimize, typically Speed or Energy. Depending on your environment you might find the excellent thesis &lt;a href=&quot;http://e-collection.library.ethz.ch/eserv/eth:49050/eth-49050-01.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Path Planning for Fixed-Wing Unmanned Aerial Vehicles&lt;/a&gt; to be helpful, using a sampling based path planning from OMPL.&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2017-05-31T15:22:32.373" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12501" PostTypeId="2" ParentId="12406" CreationDate="2017-05-31T21:41:05.787" Score="1" Body="&lt;p&gt;The problem you have is that the gyro is outputting angular velocity. Taking the integral of the angular velocity you only get the angle offset from some constant c, normally you would deal with this by initializing the system with some known orientation, typically by letting it rest flat for a moment before using it to track angle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But there is another problem, gyros have some implicit bias in them. This means that when it is not moving it will still report that it is, you have to take this into account when you build your system saving them when you boot up during that time when your device is not moving.&#xA;millisecond&#xA;So your code might look like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;init(){&#xA;    bias_x = Gxyz[0];&#xA;    bias_y = Gxyz[1];&#xA;    bias_z = Gxyz[2];&#xA;}&#xA;&#xA;loop(){&#xA;    dt = now_c - pr_dt;&#xA;    pr_dt = dt;&#xA;    // x, y, z gyro are in deg/millisecond&#xA;    x_gyro += (Gxyz[0] + bias_x)*(dt/1000.0);&#xA;    y_gyro += (Gxyz[1] + bias_y)*(dt/1000.0); &#xA;    z_gyro += (Gxyz[2] + bias_z)*(dt/1000.0); &#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But there is another problem the measured angle will diverge over time from the actual angle becouse of the accuracy of the gyroscope, $0.1^\circ/s$ after 5 minutes the gyro will read $ 30^\circ$ off where it should be, and after an hour it will be $ 360^\circ$ off the original position, you will have no information on the orientation at all.&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2017-05-31T21:41:05.787" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="12503" PostTypeId="1" CreationDate="2017-05-31T22:39:44.967" Score="-1" ViewCount="48" Body="&lt;p&gt;I tried getting pack sensors for packet group 100. What I noticed was the order of the packets did not match what's in the document. Anyone notice the same problem?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example here is the output of packet group 6 &amp;amp; 101 - which should be the same at 100 but that's not the case. It would seem like the order of the packets are not the same in group 100.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is packet group 6:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;2017/05/31 193538 PACKET GROUP 6 len:52&#xA;        Bump &amp;amp; Wheel Drop:  0  - 1&#xA;                     Wall:  0  - 1&#xA;               Cliff Left:  0  - 1&#xA;         Cliff Front Left:  0  - 1&#xA;        Cliff Front Right:  0  - 1&#xA;              Cliff Right:  0  - 1&#xA;             Virtual Wall:  0  - 1&#xA;        Wheel Overcurrent:  0  - 1&#xA;              Dirt Detect:  0  - 1&#xA;                 Unused 1:  0  - 1&#xA;             Omni IR Code:  161  - 1&#xA;                  Buttons:  0  - 1&#xA;                 Distance:  0 - 2&#xA;                    Angle:  0 - 2&#xA;                 Charging:  0  - 1&#xA;                  Voltage:  15140 - 2&#xA;                  Current:  -211 - 2&#xA;              Temperature:  25  - 1&#xA;           Battery Charge:  2234 - 2&#xA;         Battery Capacity:  2696 - 2&#xA;              Wall Signal:  0 - 2&#xA;        Cliff Left Signal:  2938 - 2&#xA;  Cliff Front Left Signal:  2047 - 2&#xA; Cliff Front Right Signal:  1399 - 2&#xA;       Cliff Right Signal:  2232 - 2&#xA;                 Unused 2:  0  - 1&#xA;                 Unused 3:  0 - 2&#xA;          Charging Source:  0  - 1&#xA;                  OI Mode:  1  - 1&#xA;              Song Number:  0  - 1&#xA;             Song Playing:  0  - 1&#xA;       Num Stream Packets:  0  - 1&#xA;            Req. Velocity:  0 - 2&#xA;              Req. Radius:  0 - 2&#xA;      Req. Right Velocity:  0 - 2&#xA;       Req. Left Velocity:  0 - 2&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Here is packet group 101:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;2017/05/31 193859 PACKET GROUP 101 len:28&#xA;             Left Encoder:  10 - 2&#xA;            Right Encoder:  6 - 2&#xA;                   Bumper:  0  - 1&#xA;       Bumper Left Signal:  11 - 2&#xA; Bumper Front Left Signal:  6 - 2&#xA;Bumper Center Left Signal:  8 - 2&#xA;Bumper Center Right Signal:  0 - 2&#xA;Bumper Front Right Signal:  11 - 2&#xA;      Bumper Right Signal:  0 - 2&#xA;             IR Code Left:  0  - 1&#xA;            IR Code Right:  0  - 1&#xA;       Left Motor Current:  0 - 2&#xA;      Right Motor Current:  0 - 2&#xA;       Main Brush Current:  0 - 2&#xA;       Side Brush Current:  0 - 2&#xA;                   Stasis:  0  - 1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And here is packet group 100:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;2017/05/31 193654 PACKET GROUP 100 len:80&#xA;        Bump &amp;amp; Wheel Drop:  0  - 1&#xA;                     Wall:  0  - 1&#xA;               Cliff Left:  0  - 1&#xA;         Cliff Front Left:  0  - 1&#xA;        Cliff Front Right:  0  - 1&#xA;              Cliff Right:  0  - 1&#xA;             Virtual Wall:  0  - 1&#xA;        Wheel Overcurrent:  0  - 1&#xA;              Dirt Detect:  0  - 1&#xA;                 Unused 1:  0  - 1&#xA;             Omni IR Code:  161  - 1&#xA;                  Buttons:  0  - 1&#xA;                 Distance:  0 - 2&#xA;                    Angle:  0 - 2&#xA;                 Charging:  0  - 1&#xA;                  Voltage:  15140 - 2&#xA;                  Current:  -219 - 2&#xA;              Temperature:  25  - 1&#xA;           Battery Charge:  2230 - 2&#xA;         Battery Capacity:  2696 - 2&#xA;              Wall Signal:  0 - 2&#xA;        Cliff Left Signal:  2950 - 2&#xA;  Cliff Front Left Signal:  2198 - 2&#xA; Cliff Front Right Signal:  0 - 2&#xA;       Cliff Right Signal:  3072 - 2&#xA;                 Unused 2:  0  - 1&#xA;                 Unused 3:  0 - 2&#xA;          Charging Source:  0  - 1&#xA;                  OI Mode:  0  - 1&#xA;              Song Number:  0  - 1&#xA;             Song Playing:  0  - 1&#xA;       Num Stream Packets:  0  - 1&#xA;            Req. Velocity:  0 - 2&#xA;              Req. Radius:  0 - 2&#xA;      Req. Right Velocity:  0 - 2&#xA;       Req. Left Velocity:  0 - 2&#xA;&#xA;             Left Encoder:  8 - 2&#xA;            Right Encoder:  4 - 2&#xA;                   Bumper:  0  - 1&#xA;       Bumper Left Signal:  11 - 2&#xA; Bumper Front Left Signal:  6 - 2&#xA;Bumper Center Left Signal:  9 - 2&#xA;Bumper Center Right Signal:  0 - 2&#xA;Bumper Front Right Signal:  0 - 2&#xA;      Bumper Right Signal:  0 - 2&#xA;             IR Code Left:  0  - 1&#xA;            IR Code Right:  0  - 1&#xA;       Left Motor Current:  0 - 2&#xA;      Right Motor Current:  0 - 2&#xA;       Main Brush Current:  0 - 2&#xA;       Side Brush Current:  0 - 2&#xA;                   Stasis:  0  - 1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="17139" LastEditorUserId="37" LastEditDate="2017-06-06T10:26:03.263" LastActivityDate="2017-06-06T10:26:03.263" Title="Create 2 packet group 100" Tags="&lt;irobot-create&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2017-06-06T10:26:40.983" ContentLicense="CC BY-SA 3.0" />
  <row Id="12504" PostTypeId="2" ParentId="12429" CreationDate="2017-05-31T22:42:35.487" Score="1" Body="&lt;p&gt;I was not able to send commands just using putty, because putty sends every character individually. You need to write your own code or use something  like &lt;a href=&quot;https://github.com/xa4a/go-roomba&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/xa4a/go-roomba&lt;/a&gt; to communicate with the roomba&lt;/p&gt;&#xA;" OwnerUserId="17139" LastActivityDate="2017-05-31T22:42:35.487" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12505" PostTypeId="1" AcceptedAnswerId="12506" CreationDate="2017-05-31T23:04:22.950" Score="2" ViewCount="159" Body="&lt;p&gt;I had a discussion with a study colleague about the IK solver. The question was: Does IK need the current joint values to calculate the requested position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think it doesn't need it. From my understanding, IK only needs a translation and rotation respected to the e.g. base frame, but no information about the current joint values or e.g. gripper frame for the calculation itself. My study colleague argue that we always give the IK Solver the current joint values through our .msg file and that's right. However, I'm sure that the IK solver doesn't use it for the calculation. Maybe, in case of optimization if it finds more than one possible solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would be nice if anyone can help&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Greetings&lt;/p&gt;&#xA;&#xA;&lt;p&gt;R.Devel&lt;/p&gt;&#xA;" OwnerUserId="16764" LastActivityDate="2017-06-01T04:14:17.990" Title="Does Inverse Kinematics need the current joint angles?" Tags="&lt;kinematics&gt;&lt;inverse-kinematics&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12506" PostTypeId="2" ParentId="12505" CreationDate="2017-06-01T04:14:17.990" Score="5" Body="&lt;p&gt;It depends on the method that you use for computing an IK solution. If you have an analytic formula for IK solutions then you do not need the current joint values of the robot. You just plug in the translation and rotation of the end-effector to the formula and you get a solution (or a set of solutions). (Sometimes knowing the current joint angles is better, though, because you might want to select which IK solutions you want based on your current joint angles.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, when using iterative methods such as differential IK, you will need an initial point to start with. The algorithm will kind of &lt;em&gt;drive&lt;/em&gt; the robot from the initial joint values towards your desire end-effector position. That's when the current joint values come into play.&lt;/p&gt;&#xA;" OwnerUserId="7610" LastActivityDate="2017-06-01T04:14:17.990" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12507" PostTypeId="1" AcceptedAnswerId="12508" CreationDate="2017-06-01T05:07:21.227" Score="0" ViewCount="82" Body="&lt;p&gt;This question assumes an ideal system with 100% efficiency.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lets say I have this propeller which if spun at 1000 RPM in water will need a 48 Watt motor to drive it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I get a 1000 Kv 16V motor and a gear reduction of 1:16 so now it will spin at 1000 RPM and thus will use 48 watts of power.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That means that the ESC will be using 3 Amp to power the motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now if I power the ESC with 48V instead of 16V and set it to 33% instead of 100% &#xA;The effective voltage on the motor is still 16V and the motor will still use 48W, but since the ESC is getting 48V it will use 1 Amp not 3.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I want to choose a brush-less motor for an ROV propeller that will need 200W of power at 1000RPM and the voltage applied to the ESC varies between 12V and 48V.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I choose a motor and gearbox that when 10V (headroom to allow the motor to slow down a little and still maintain enough speed to drive the prop) is applied to it, it spins at 1000RPM and it has max power of 300W.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then in the control system I have Voltage and current sensors in the ESC and I drive the motor at constant power mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The system would now what voltage is the ESC running at and vary the PWM signal till reaching wanted power.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this right or am I missing something?&lt;/p&gt;&#xA;" OwnerUserId="17142" LastEditorUserId="2289" LastEditDate="2017-06-01T09:25:59.683" LastActivityDate="2017-07-31T22:14:47.187" Title="Confirm my understanding on BLDC motors" Tags="&lt;brushless-motor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12508" PostTypeId="2" ParentId="12507" CreationDate="2017-06-01T12:13:33.053" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Now if i power the ESC with 48V instead of 16V and set it to 33% instead of 100% The effective voltage on the motor is still 16V and the motor will still use 48W, but since the ESC is getting 48V it will use 1 Amp not 3.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This is not a good mental model. Perhaps you are mixing the instantaneous voltages seen by the inverter switching with the smoother currents experienced by the windings due to their inductance? The following is a typical rough model:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$V_{ESC}-V_{emf}=L_{motor}\frac{dI}{dt}+R_{motor}I$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The voltage is changing at the switching frequency and the current must be changed from positive to negative as the poles of the motor rotate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind that the supply voltage  will not be nicely constant. It will drop (greatly if poorly designed) when you drive the motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Design Approach&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All that said, when dealing with the system level, I think it's good that you are using power as your design variable. Power translates across electrical-mechanical systems well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are energy losses throughout the system. Enough that you should be careful to mention for each power value, where in the system it is. (eg output of the gearbox, output of the motor, output of the esc, input to the esc).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You need 200W at the propeller (I'll assume you have accounted for losses when delivering  propeller energy to the water). $1000RPM\implies\frac{200W}{105 Rad/sec} \implies 1.9 Nm$ of torque ($P = \tau\omega$) delivered by the gearbox. More due to losses. Let's say 2.3Nm (An uneducated guess).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At 85% efficiency for a 16:1 gear you need 235W at the motor output. $200W/.85$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(side note, nobody uses the same units for velocity constants which is really annoying. Google tells me that hobby motors like to use Kv for units of RPM/V so I'm going to go with that. )&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Torque constants and velocity constants are the same number with units of $Nm/Amp$ and $V/(Rad/Sec)$. Our $1000\frac{RPM}{V}\implies105\frac{Rad/Sec}{V}\implies0.0095Nm/Amp$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Estimating the torque required:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\frac{2.3Nm}{16\times.85}=.17Nm$ Motor Torque$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Taking the motor as a system, Power out = Power in - Losses,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$P_{in}=IV$, $P_{loss}=I^2R+{other}$, $P_{out}=\omega\tau$, and $\tau=IK$ where $K$ is the torque (velocity) constant.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$P_{in}=P_{loss}+P_{out}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$IV = I^2R + \omega IK \implies V=IR+\omega K \implies V=IR+V_{emf}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can compare this equation to the typical rough model from the start and see that we have arrived at the same point, with some differences due to ignoring different parts of the system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So we need $16000RPM/(1000RPM/V)=16V$ to counteract back-emf, plus some Volts for our motor losses. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;12V is your minimum design voltage so that motor won't work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you really need a 12V minimum voltage, you can see that you need higher Kv motor. Make sure it has enough torque as well. The torque listed in the datasheet is unlikely to be for the RPM you need, so it is not useful when designing. Resistance is more constant (it changes as the motor heats up) and is a better motor characteristic to use when designing. You can use the equations above to calculate what R needs to be for a given voltage.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Is it possible to use a 12v motor with a 48v bus by limiting the voltage&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes. You don't need to limit the voltage. But for your 200W output design goal you said you will controlling the voltage and current. The controlled voltage will be about 12v.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can see from the equations that saying a motor is an X volt motor or Y amp motor has no clear meaning because those are things you are changing and controlling. Better to specify the motor constant K, the winding resistance R, and the inductance L. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are looking at hobby outrunner motors and they say it is a 12v motor, what they really mean is that 12v will be  enough to overcome back-emf during typical RPMs needed to fly a typical propeller in air. That same &quot;12v&quot; motor will not necessarily have enough torque to drive a propeller in water.. Easier to just choose a motor with a K and R that fits your needs.&lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="184" LastEditDate="2017-06-01T21:38:15.750" LastActivityDate="2017-06-01T21:38:15.750" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12510" PostTypeId="1" AcceptedAnswerId="12511" CreationDate="2017-06-01T15:51:33.130" Score="2" ViewCount="527" Body="&lt;p&gt;Is there any possibility to have a robot with &lt;strong&gt;less than six degrees of freedom&lt;/strong&gt; &amp;amp; still be able to achieve &lt;strong&gt;any position &amp;amp; orientation around end effector&lt;/strong&gt;?&lt;/p&gt;&#xA;" OwnerUserId="17146" LastActivityDate="2017-06-04T10:54:15.873" Title="Robots with less than 6 degrees of freedom" Tags="&lt;inverse-kinematics&gt;&lt;first-robotics&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12511" PostTypeId="2" ParentId="12510" CreationDate="2017-06-01T19:22:28.580" Score="2" Body="&lt;p&gt;Short answer: No.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Long answer: In how many dimensions you are defining 'any'?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The best way to understand it is actually through math.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's say you have a desired position $$p=\left[\begin{matrix}x\\y\\z\end{matrix}\right]$$ and an orientation $$\omega=\left[\begin{matrix}\chi\\\psi\\\zeta\end{matrix}\right]$$ in three dimensions. &#xA;Now let's say we have a robot with six degrees of freedom $$Q=\left[\begin{matrix}q1\\q2\\q3\\q4\\q5\\q6\end{matrix}\right]$$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming you know your position and orientation you are trying to find your joint angles. This can be written in matrix form.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\left[\begin{matrix}q1\\q2\\q3\\q4\\q5\\q6\end{matrix}\right]= F\left[\begin{matrix}x\\y\\z\\\chi\\\psi\\\zeta\end{matrix}\right]$$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where F a 6x6 matrix with your inverse kinematics functions. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Notice how you have 6 knowns (your position and orientation) and six unknown (your joint angles). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically you have a 6-by-6 system to solve. If you have fewer degrees of freedom then you have fewer unknowns which means that you can't solve independently. Meaning your position and orientation are linearly dependent.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example changing your position $x$, will change your $\chi$ or your $\psi$ or even your $y$. Imagine trying to move a glass of water in a straight line and suddenly the glass turns over and then back again. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So think a robot with less than six degrees of freedom as a robot that you can't control its behavior at any time rather than a robot that can't reach a certain position at any time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now if you have a task that does not require to move along and rotate around an axis (e.g. $z$ &amp;amp; $\zeta$) then you can ignore them and now you have a 4-by-4 system to worry about. Therefore, for this 2D task, a robot with four degrees of freedom can achieve 'any' position and orientation. Similarly, if you put a constraint on the force along the $x$ direction, you now have an $F_x$ variable that entered your system making it a 7-by-7 system that requires seven degrees of freedom to achieve 'any' position and orientation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Generally, 6 degrees of freedom is the standard robot because it can control its end effector along each dimension independently. Any fewer degrees of freedom can still be useful in some more limited tasks. Higher degrees of freedom can tackle more complicated tasks, though in those case there is a selection whether all parameters will be satisfied independently or no. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The bottom line is, for general cases in a 3D environment you need 6 degrees of freedom. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried to keep my answer short without using too much math but let me know if you are still unsure about the effect the number of degrees of freedom have on the position and orientation of the end effector.&lt;/p&gt;&#xA;" OwnerUserId="16911" LastActivityDate="2017-06-01T19:22:28.580" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="12512" PostTypeId="1" CreationDate="2017-06-01T20:02:40.033" Score="4" ViewCount="534" Body="&lt;p&gt;I have a question about something that seems like it would be pretty basic, but so fair I haven't been able to find a whole lot of discussion on the issue. It's possible I'm not not familiar enough with the terminology. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a rigid body with an accelerometer/gyro IC dev board nailed to it. I would like to know what the accelerometer would measure at another point on this board, in this case, the sensor of a camera that is also nailed to it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My thinking is that I can use the accelerator, gyroscope and differentiated gyroscope data and the equation $a_t = a_m + \omega' \times r + \omega \times (\omega \times r)$, where &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$a_t$ = transformed acceleration&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$a_m$ = measure acceleration&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\omega$ = measured gyroscope reading&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\omega'$ = first derivative of the gyroscope reading&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$r$ = the vector between the accelerometer/gyro and the point I want transformed to. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My plan is to get $\omega'$ with a Savitzky-Golay filter, though this makes implementation a lot less convenient, because I have to buffer my data, and try to figure out how the filter effects the noise variance of the sensor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does this plan make sense? Is there a better accepted way that I don't know about? I'm surprised that ROS or tf2 doesn't have a built in function for this. Is there something I am missing? Thanks!&lt;/p&gt;&#xA;" OwnerUserId="17148" LastEditorUserId="184" LastEditDate="2017-06-01T23:02:23.710" LastActivityDate="2018-07-31T04:00:34.680" Title="Coordinate transform of accelerometer on rigid body" Tags="&lt;accelerometer&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12513" PostTypeId="1" CreationDate="2017-06-01T21:21:51.110" Score="3" ViewCount="88" Body="&lt;p&gt;I have an iRobot Create 2 and I am connected to it with the 7-pin connector to a desktop machine via USB.  Serial communication is working fine under that configuration.  I can tell it to restart with ctrl-G and read the messages it sends back.  On power up the serial port outputs the following:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2015-08-24-1648-L&lt;BR&gt;&#xA;r3-robot/tags/release-3.5.x-tags/release-3.5.4:6058 CLEAN&lt;P&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;bootloader id: 4701 5652 7E52 3FFF&lt;BR&gt;&#xA;assembly: 3.5-lite&lt;BR&gt;&#xA;revision: 2&lt;BR&gt;&#xA;flash version: 10&lt;BR&gt;&#xA;flash info crc passed: 1&lt;P&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;battery-current-zero 257&#xA;&#xA;&lt;p&gt;When I plug in the raspberry pi 3 board with a 7-pin connector to the on-board UART, I can communicate with the iRobot without issue.  However, the iRobot starts to continuously sound &quot;uh-oh&quot; every few seconds (no other beeps follow)  after about 20 or so seconds of powering up the raspberry pi until the robot enters sleep mode.  The iRobot serial port outputs the following message to the raspberry pi every time the robot sounds &quot;uh-oh&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;4701 5652 7E52 3FFF&lt;BR&gt;&#xA;ERROR: language set error type 2&lt;P&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know what this error means?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My last resort is to scope the serial port from the raspberry pi to check for noise; unfortunately I don't have access to my scope at the moment.&lt;/p&gt;&#xA;" OwnerUserId="17149" LastActivityDate="2017-06-01T23:12:07.923" Title="iRobot Create 2 -language set error type 2" Tags="&lt;raspberry-pi&gt;&lt;irobot-create&gt;&lt;serial&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12514" PostTypeId="2" ParentId="12513" CreationDate="2017-06-01T23:12:07.923" Score="2" Body="&lt;p&gt;Scope showed data being sent to the robot.  I discovered the console was enabled on the raspberry pi 3 and disabled it; the problem is now resolved.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Specifically, run the following commands&lt;BR&gt;&#xA;sudo systemctl stop serial-getty@ttyS0.service&lt;BR&gt;&#xA;sudo systemctl disable serial-getty@ttyS0.service&lt;BR&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then edit /boot/cmdline.txt and remove the following option from the file&lt;/p&gt;&#xA;&#xA;&lt;p&gt;console=serial0,115200&lt;BR&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Save and reboot.  For more information see &#xA;&lt;a href=&quot;http://spellfoundry.com/2016/05/29/configuring-gpio-serial-port-raspbian-jessie-including-pi-3/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://spellfoundry.com/2016/05/29/configuring-gpio-serial-port-raspbian-jessie-including-pi-3/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="17150" LastActivityDate="2017-06-01T23:12:07.923" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12515" PostTypeId="2" ParentId="12510" CreationDate="2017-06-01T23:34:31.417" Score="1" Body="&lt;p&gt;In abstract theory, yes. You can have a body constrained to a path (1 Dof, forward and back along the path) and the path can loop through all possible orientations. Likewise you can constrain the body to a higher order manifold (a surface allows 2 or 3Dof depending on the physical mechanism of constraint).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mechanisms that we can build have other requirements (like supporting loads and forces) that limit what we can do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's a simple example of a practical mechanism. Say you have a 2 DoF mechanism that controls orientation and distance along a line. The accuracy of the distance, and orientation, is limited to the precision of your encoders. You can replace that 2Dof mechanism with a 1DoF screw who's pitch is equal to the linear encoder resolution. As the output spins on the screw, it can reproduce every position and orientation that the 2Dof mechanism could. The cost is that you have to spin around a full revolution to move one step in the linear direction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another good example is a car. A 2DoF mechanism on a 3DoF plane. You can achieve any position and orientation with a car, but you may need to do some loops or back-and-forth driving to get there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, keeping in mind that a 6DoF robot has limited positions and orientations that it can reach, and limited resolution, Yes, there is the possibility that a 5 or fewer Dof machine could achieve the same range of position and orientations.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2017-06-01T23:34:31.417" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12516" PostTypeId="1" CreationDate="2017-06-02T08:08:52.620" Score="0" ViewCount="685" Body="&lt;p&gt;I have a data point array. Which is recorded at 20Hz(0.05 second. It can be 30Hz, 40Hz, 50Hz. &lt;em&gt;20Hz is an example value&lt;/em&gt;)&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&lt;a href=&quot;https://i.imgur.com/iUpa8HI.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.imgur.com/iUpa8HI.jpg&quot; alt=&quot;little t&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I want to interpolate this data to bigger frequency for example 1kHz(0.001 second) with cubic interpolation to get smooth data set. &#xA;&lt;strong&gt;y(t) = at^3 + bt^2 + ct + d&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&lt;a href=&quot;https://i.imgur.com/0Y26575.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.imgur.com/0Y26575.jpg&quot; alt=&quot;little t&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;But I can't figure out how can I derive the function and implement with C.&lt;/p&gt;&#xA;" OwnerUserId="17156" LastActivityDate="2017-07-03T11:37:50.173" Title="How to derive the Cubic Interpolation algorithm?" Tags="&lt;motion-planning&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12517" PostTypeId="2" ParentId="12516" CreationDate="2017-06-02T10:49:09.177" Score="0" Body="&lt;p&gt;As I understand it, you want to fit a degree three polynomial to course data to be able to use the polynomial to interpolate between the course data points.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To be able to fit the coefficients ($a$, $b$, $c$, and $d$) of the degree three polynomial so that it goes through the original data points, you need exactly four data points, $(t_1,y_1), \cdots, (t_4,y_4)$.  If you have more than four data points, the polynomial values will not necessarily go through the original data points.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit: Calculation of Polynomial Coefficients&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For four sequential data points ($i,i+1,i+2,i+3$), the following equations must hold:&#xA;\begin{eqnarray}&#xA;at_i^3 +bt_i^2 +ct_i + d &amp;amp;=&amp;amp; y_i \\&#xA;at_{i+1}^3 +bt_{i+1}^2 +ct_{i+1} + d &amp;amp;=&amp;amp; y_{i+1} \\&#xA;at_{i+2}^3 +bt_{i+2}^2 +ct_{i+2} + d &amp;amp;=&amp;amp; y_{i+2} \\&#xA;at_{i+3}^3 +bt_{i+3}^2 +ct_{i+3} + d &amp;amp;=&amp;amp; y_{i+3} &#xA;\end{eqnarray}&#xA;This can be written as a matrix-vector equation&#xA;$$&#xA;\left[\begin{array}{llll}&#xA;t_i^3 &amp;amp; t_i^2 &amp;amp; t_i &amp;amp; 1 \\&#xA;t_{i+1}^3 &amp;amp; t_{i+1}^2 &amp;amp; t_{i+1} &amp;amp; 1 \\&#xA;t_{i+2}^3 &amp;amp; t_{i+2}^2 &amp;amp; t_{i+2} &amp;amp; 1 \\&#xA;t_{i+3}^3 &amp;amp; t_{i+3}^2 &amp;amp; t_{i+3} &amp;amp; 1 &#xA;\end{array}\right]&#xA;\left[\begin{array}{c}&#xA;a \\ b \\ c \\ d&#xA;\end{array}\right] =&#xA;\left[\begin{array}{l}&#xA;y_i \\ y_{i+1} \\ y_{i+2} \\ y_{i+3}&#xA;\end{array}\right] &#xA;$$&#xA;which can be solved for the vector of unknown coefficients  ($a$, $b$, $c$, and $d$) using&#xA;$$&#xA;\left[\begin{array}{c}&#xA;a \\ b \\ c \\ d&#xA;\end{array}\right] =&#xA;\left[\begin{array}{llll}&#xA;t_i^3 &amp;amp; t_i^2 &amp;amp; t_i &amp;amp; 1 \\&#xA;t_{i+1}^3 &amp;amp; t_{i+1}^2 &amp;amp; t_{i+1} &amp;amp; 1 \\&#xA;t_{i+2}^3 &amp;amp; t_{i+2}^2 &amp;amp; t_{i+2} &amp;amp; 1 \\&#xA;t_{i+3}^3 &amp;amp; t_{i+3}^2 &amp;amp; t_{i+3} &amp;amp; 1 &#xA;\end{array}\right]^{-1}&#xA;\left[\begin{array}{l}&#xA;y_i \\ y_{i+1} \\ y_{i+2} \\ y_{i+3}&#xA;\end{array}\right] &#xA;$$&#xA;These coefficients can then be used to calculate the value of $y$ for a given $t$ where $t_i&amp;lt;t&amp;lt;t_{i+3}$:&#xA;$$&#xA;y = at_3 + bt^2 +ct +d&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would recommend using a cubic spline interpolation method so that you will get a smooth interpolating curve that goes through all the original data points and that can handle more that four data points. See &lt;a href=&quot;http://dl.acm.org/citation.cfm?id=1403886&quot; rel=&quot;nofollow noreferrer&quot;&gt;Numerical Recipes 3rd Edition: The Art of Scientific Computing&lt;/a&gt; by Press, et al. for very good C or C++ code to perform cubic spline interpolation.&lt;/p&gt;&#xA;" OwnerUserId="13926" LastEditorUserId="13926" LastEditDate="2017-07-03T11:37:50.173" LastActivityDate="2017-07-03T11:37:50.173" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12518" PostTypeId="1" AcceptedAnswerId="12521" CreationDate="2017-06-02T11:08:30.780" Score="1" ViewCount="595" Body="&lt;p&gt;I am trying to understand the stepper motor to Mach3 type software control interfaces, mostly from a logical perspective, deducing most of everything because I have no concrete resource to refer.&lt;/p&gt;&#xA;&lt;p&gt;So basically I have purchased a &amp;quot;LinkSprite&amp;quot; 3 axis engraver. It says it comes with Arduino GRBL board which interprets G-code. Sends it to stepper driver shields.&lt;/p&gt;&#xA;&lt;h3&gt;Bottom&lt;/h3&gt;&#xA;&lt;p&gt;I can see the drivers need to send a approximate sign wave of some sort to one or both windings to actuate them.&lt;/p&gt;&#xA;&lt;h3&gt;Top&lt;/h3&gt;&#xA;&lt;p&gt;Mach3 I read essentially transmits two signals per axis to the motion controller/breakout board (which in turn is connected to the drivers), one being the number of steps the other the direction and probably via parallel ports GPIO or something.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;So what underlying transmission protocol carries mach3 signals, like i2c or something via the parallel poet? How is steps and direction, and axis encoded?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;What does the motion controller do exactly? Minimally does it just breakout out the signal to the drivers? What is the drivers inputs?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;My Arduino GRBL board I read interprets G-code, but isn't that what Mach3 does?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;How can I connect from stepper motor waveform on windings to some interface like Mach3 the encodings and concrete information of this logical path of the workings of the control of the stepper motors?&lt;/p&gt;&#xA;" OwnerUserId="17158" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2017-06-08T22:03:13.280" Title="Stepper motor control" Tags="&lt;control&gt;&lt;microcontroller&gt;&lt;stepper-driver&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12519" PostTypeId="2" ParentId="12510" CreationDate="2017-06-02T13:48:51.650" Score="1" Body="&lt;p&gt;Physically Speaking &lt;strong&gt;No&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even most 6-axis (6DoF) industrial robots are unable to achieve full range of motion within their work envelope (or the work envelope is artificially restricted as more commonly seen). 7-axis (7DoF) robotic arms (commonly know as collaborative robots) have a much greater flexibility; They are generally only restricted by physical interference with their own casting (body).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the below link, the author discusses the relative restrictions on modeling an Nth degree robotic arm. Specifically, as to how difficult it is to model how the casting restricts End-of-arm-Tooling in both position and orientation, as the mathematics can produce a valid result that results in an unattainable position (robot physically intersecting itself).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sources: &lt;a href=&quot;http://ieeexplore.ieee.org/abstract/document/1086995/&quot; rel=&quot;nofollow noreferrer&quot;&gt;A complete generalized solution to the inverse kinematics of robots&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="17160" LastEditorUserId="9176" LastEditDate="2017-06-04T10:54:15.873" LastActivityDate="2017-06-04T10:54:15.873" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12520" PostTypeId="2" ParentId="12516" CreationDate="2017-06-02T14:31:09.253" Score="1" Body="&lt;p&gt;Maybe you are looking for &lt;a href=&quot;https://en.wikipedia.org/wiki/Spline_interpolation&quot; rel=&quot;nofollow noreferrer&quot;&gt;spline interpolation&lt;/a&gt; such as &lt;a href=&quot;https://en.wikipedia.org/wiki/Cubic_Hermite_spline&quot; rel=&quot;nofollow noreferrer&quot;&gt;Cubic Hermite Splines&lt;/a&gt;, etc. However, it really depends on how you want you path looks. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If it is something like&#xA;&lt;a href=&quot;https://i.stack.imgur.com/xUFou.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xUFou.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;and you want something of third order (specifically, a velocity profile of third order), you can solve for a function $P_{01}(t) = at^3 + bt^2 + ct + d$ which satisfies, for example,&#xA;$$&#xA;\begin{align}&#xA;P_{01}(t_0) &amp;amp;= x_0\\&#xA;P_{01}(t_0) &amp;amp;= x_1\\&#xA;P_{01}'(t_0) &amp;amp;= 0\\&#xA;P_{01}'(t_1) &amp;amp;= 0\\&#xA;P_{01}''(t_0) &amp;amp;= 0\\&#xA;P_{01}''(t_1) &amp;amp;= 0,&#xA;\end{align}&#xA;$$&#xA;where $P'$ indicates the first time derivative of $P$, etc.&#xA;You can substitute all the boundary conditions above to the function and solve for all the coefficients $a$, $b$, $c$, and $d$. You may want to have a look at &lt;a href=&quot;https://en.wikipedia.org/wiki/Polynomial_interpolation&quot; rel=&quot;nofollow noreferrer&quot;&gt;polynomial interpolation&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Vandermonde_matrix&quot; rel=&quot;nofollow noreferrer&quot;&gt;Vandermonde matrix&lt;/a&gt;. Note that if you change boundary conditions, you can also make the path looks smooth (i.e., not so zigzaggy).&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If you just want a straight line between two consecutive points, you can even do&#xA;$$&#xA;P_{01}(t) = x_0 + \left(\frac{x_1 - x_0}{t_1 - t_0}\right)(t - t_0).&#xA;$$&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;You don't need to use higher-order polynomials.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If you, instead, want something like&#xA;&lt;a href=&quot;https://i.stack.imgur.com/NEyKC.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/NEyKC.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Spline_interpolation&quot; rel=&quot;nofollow noreferrer&quot;&gt;Spline interpolation&lt;/a&gt; might be more suitable.&lt;/p&gt;&#xA;" OwnerUserId="7610" LastActivityDate="2017-06-02T14:31:09.253" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12521" PostTypeId="2" ParentId="12518" CreationDate="2017-06-02T17:06:32.390" Score="2" Body="&lt;p&gt;So you have three different questions here I will answer them separately:&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Q: How is Mach 3 controlling steppers?&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Mach 3 normally uses a step and direction interface where it is abusing the parallel port on your PC to output signals. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A step and direction port does just what it sounds like, it has one pin where every transition of the signal from low to high to low (or vice versa) commands the motor to take one &quot;step&quot; (fraction of a rotation) forward, the other signal indicates what direction the step should go, where high is forward and low is reverse or vice versa. There are 7 data pins on a parallel port enough to control 3 steppers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These step and direction commands are going to servo drivers that interpret those commands and move the stepper, the motion controllers are normally very dumb with minimal logic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/9AGaQ.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9AGaQ.gif&quot; alt=&quot;Step and Direction&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Q: How is GRBL controlling steppers?&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;GRBL is just interpreting the G-Code line by line and controlling the steppers, which brings us to your last question.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Q: How does G-code translate to real world movement?&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/G-code&quot; rel=&quot;nofollow noreferrer&quot;&gt;G-Code&lt;/a&gt; is a standard numerical control programming language for encoding moving things. &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;G-Code is first parsed by a parser that decodes the commands, say a movement command like G01 X1 (Fast move to x value of 1)&lt;/li&gt;&#xA;&lt;li&gt;The parsed command is then compared to the current state of the machine to find out what needs to change, so in our example say we were at x 0 (the origin) it would find out that we need to move 1 unit in the x direction&lt;/li&gt;&#xA;&lt;li&gt;The controller would then command the appropriate number of steps at the appropriate speed to complete the desired movement, for our example if our controller was told that 100 steps corresponded to 1 unit, it would command 100 steps in the forward direction&lt;/li&gt;&#xA;&lt;li&gt;The Servo driver then outputs the right waveforms to move the stepper.&lt;/li&gt;&#xA;&lt;li&gt;The controller would then loop to step 1 to interpret the next line of G-Code&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;A GRBL/Stepper shield is handling steps 1-4 all on its own, with the computer feeding in lines of G-Code as it needs it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mach 3 is handling lines 1-3 and just outputting the resulting step and direction command to a separate box with Servo Drivers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My example is very basic, normally the Motion control software is pretty sophisticated, handling things like relative vs absolute position movements, soft limits feed rated coordinated axis movement etc... but that should give you an idea of how it works under the hood.&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2017-06-02T17:06:32.390" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="12522" PostTypeId="1" AcceptedAnswerId="12526" CreationDate="2017-06-02T18:05:08.907" Score="0" ViewCount="351" Body="&lt;p&gt;Let's say I have multiple (8 bit) sensors which are sending signals to two microcontrollers simultaneously. In this case, I am looking to harness the parallel processing capability of the two microcontrollers to process the signals at the same time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I am curious whether I can substitute the above setup by using only one 16-bit microcontroller? Then, would sending two 8-bit signals simultaneously be possible, using the 16-bit bus on the microcontroller?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming in both cases above, they are running at the same clock speed (MHz).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edited&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sorry, this is all still new to me. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;One aspect that I'd like to understand is: Can we make two 8-bit signals from two different 8-bit sensors share the 16-bit bus at the same time?&lt;/p&gt;&#xA;" OwnerUserId="10691" LastEditorUserId="10691" LastEditDate="2017-06-04T14:03:50.243" LastActivityDate="2017-06-04T14:03:50.243" Title="Will two 8-bit microcontrollers running in parallel perform similarly to a single 16-bit microcontroller?" Tags="&lt;arduino&gt;&lt;mobile-robot&gt;&lt;microcontroller&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12524" PostTypeId="1" AcceptedAnswerId="12529" CreationDate="2017-06-02T18:24:34.297" Score="1" ViewCount="1616" Body="&lt;p&gt;I would really appreciate it if somebody could help me calculate the singular configuration of this simple manipulator&lt;a href=&quot;https://i.stack.imgur.com/lDvcf.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/lDvcf.jpg&quot; alt=&quot;3 link manipulator&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am confused since J is a 2x3 matrix and I cannot simply calculate the derivative.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance.&lt;/p&gt;&#xA;" OwnerUserId="16294" LastEditorUserId="16294" LastEditDate="2017-06-02T18:30:16.973" LastActivityDate="2017-06-03T16:38:38.477" Title="Calculating the singular configuration of a 3 revolute joint manipulator" Tags="&lt;inverse-kinematics&gt;&lt;manipulator&gt;&lt;jacobian&gt;&lt;singularity&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12525" PostTypeId="1" AcceptedAnswerId="12537" CreationDate="2017-06-02T19:09:28.570" Score="3" ViewCount="6039" Body="&lt;p&gt;I'm making a quadcopter for the first time and want to be as low cost as possible, and when it comes to flight controllers APM is the best open-source project, and is compatible with Raspberry Pi.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is, will it perform as good as of the shelf APMs, if I add GPS, IMUs, and all of the other sensors, the same as in ready-made?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider that APM is clone from ebay.&lt;/p&gt;&#xA;" OwnerUserId="11234" LastEditorUserId="9176" LastEditDate="2017-06-04T11:25:07.763" LastActivityDate="2017-06-05T15:04:18.217" Title="Ardupilot on Raspberry Pi" Tags="&lt;quadcopter&gt;&lt;imu&gt;&lt;gps&gt;&lt;multi-rotor&gt;&lt;ardupilot&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12526" PostTypeId="2" ParentId="12522" CreationDate="2017-06-02T23:43:08.413" Score="2" Body="&lt;p&gt;Your question is really missing critical informations about your setup, so answer cannot catch all possibilities.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But if we assume the typical Arduino setup, than the sensors would not use 8 wires, but some serial protocol (Serial, I2C,...). Especially if you mentioned multiple of them. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also usually processor asks sensor for data and sensor reply with values, not that sensor is spamming the processor on its own (or not more, than sends interrupt, when data are collected)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also they would probably not send data to both processors simultaneously, as it would mean, that both processors would be blocked by reading one pice of data - better setup is to send half sensors to one processor, second half to other and synchronise only minimum of processed data between processors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the speed of the protocol would be one of very limiting facts here (400&amp;nbsp;kbit/s ~ 50&amp;nbsp;kbyte/sec for fast I2C on 16&amp;nbsp;MHz Arduino means, that while receiving one byte=8bits, your processor is able to do like 16.000.000/50.000 = 320 instructions, for asking sensor for value you address the sensor and send register number, so at least 3 bytes are transferred, also there are some kinds of handshaking - so we have more like 960 instructions per byte) and the transfers usually cannot go in parallel, as they are using the same wires.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;two processors would be able serve more data, as each of them can have its own data line and so two sensors can be questioned in paralel. 900 instructions may be enough to do some simple data manipulation over collected values.&lt;/li&gt;&#xA;&lt;li&gt;16-bit processor cannot generally process two independent data in one instruction, even if it have 2x longer registers. So the there would not be gain from longer word in this way&lt;/li&gt;&#xA;&lt;li&gt;on the other hand 16-bit processor can make computations faster if it comes to bigger data types, like int/long/real (to contrast only bytes), many times more than 2x faster. But jumps, loops and so are not such faster, as well as 8-bit calculation. So it deeply depends on how you process the data (how much computation and what kind you do).&lt;/li&gt;&#xA;&lt;li&gt;if the sensors would send data only occasionally (as many sensors need a time to collect something) and you would do a lot of complicated computations over them, and those computations would need (nearly) raw data from all sensors (not just average over half second or so), then the 16-bit can win with sheer computing power and lack of need to synchronize data over more units&lt;/li&gt;&#xA;&lt;li&gt;if there would be too much data from sensors and such data could be computed independently and mainly in 8-bit logic (&lt;code&gt;if (dist &amp;lt;128) near=true;&lt;/code&gt;), the 8-bits can win with two communication lines to sensors and two computing units (so 2x number of instruction/sec) - but in robotic it is not so simple usually (left half of robot is not independent from right).&lt;/li&gt;&#xA;&lt;li&gt;for many cases also the size of disposable RAM is factor&lt;/li&gt;&#xA;&lt;li&gt;complexity of programming differs in single-unit(16-bit) and two or more networked units (8-bit)&lt;/li&gt;&#xA;&lt;li&gt;Many Arduino libraries and examples are not very excellent, when it comes to parallel processing more inputs at the same time (first of all you must have forgot, that something like &lt;code&gt;delay()&lt;/code&gt; exists, then lot of communications (like Wire for i2C) happily waits for the full request fulfilled (so waste a lot of instructions just waiting for communication be completed))&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;so you can spend more time in inefficient library implementation than in the rest of program. This is not problem for simple scratches, for which Arduino is planned, but is serious limitation in more complex computations &lt;/li&gt;&#xA;&lt;li&gt;so you may use different approach to the same HW and use AVR rather then Arduino way (but it needs a lot more skills and knowledge).&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Lots of 16-bit processors have a faster clock, more RAM and more and more elaborated HW build in devices, so they can do even more work faster. Some have two or more I2C subsystems, so they can communicate with two buses at the same time and share the results inside without transferring them around&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;so usually you have two different architectures which cannot be simply compared with just &quot;it has the same clock, but 16-bits&quot;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So your question cannot be answered simply, without knowing what sensors you are going to use, how many, which processors you are considering, how you want process your data and what peripherals you want to manipulate.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;If you are all confused now, then simply start with the processor you currently have and just few sensors and try to solve only small part of final project. You will learn a lot along the way. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If it works with one sensor but not two, you have problem in your programming and you have the simplest case to learn, how to solve it.&lt;/li&gt;&#xA;&lt;li&gt;If it works with four sensors but not five, you are probably hitting some limits&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;try to measure, where you spend more time, if in the logic, or the communication&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;if communication is the main problem, try other libraries or more independent processors&lt;/li&gt;&#xA;&lt;li&gt;if logic is the limit, use better algorithm or faster processor, or split it in net, if everything else fails&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;if you hit RAM limit reconsider the algorithm, or use processor with more RAM or try to split it to two cooperating units, each with half of sensors&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;But first of all - start playing and having fun, usually it is much faster way to some results, then theorising over all possible details of the Death Star Project at one time before you manage even driving straight with two wheels.&lt;/p&gt;&#xA;" OwnerUserId="16496" LastEditorUserId="9176" LastEditDate="2017-06-04T13:34:21.690" LastActivityDate="2017-06-04T13:34:21.690" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="12527" PostTypeId="2" ParentId="12524" CreationDate="2017-06-03T02:49:25.970" Score="2" Body="&lt;p&gt;Singular configurations are configurations at which the Jacobian is rank-deficient. In this case $J$ is a square matrix, you can find conditions for singularity by solving $\det(J) = 0$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The last row of $J$ being all ones means that no matter the configuration, you can always generate some angular velocity. This actually implies that the conditions you get from solving $\det(J) = 0$ will be the conditions for linear velocity singularities.&lt;/p&gt;&#xA;" OwnerUserId="7610" LastActivityDate="2017-06-03T02:49:25.970" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12528" PostTypeId="2" ParentId="12522" CreationDate="2017-06-03T11:49:31.683" Score="3" Body="&lt;p&gt;It really depends on the problem, ideally two 8 bit processors work in parallel while one 16 bit processor works by itself. What if the problem is add three 3bit numbers (a+b+c). Can two 8 bit processors take advantage or maybe the single 16 bit? Now if we add three 8bit numbers the single 16 bit processor will be quicker. Alternatively if we ask to add four 3bit numbers (a+b+c+d) then the two 8 bit processors will be superior because one can compute x=a+b and another y=c+d in one instruction time then z=x+y in a second instruction requiring only two instruction time periods while the 16bit would need three.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now consider the last problem but if there are allowed abcd to be 8bits then its not even clear, we need more information and the same is for your problem. Clearly there is no simple rule or way to answer your question as you naïvely hoped. So do some studying and figure it out for yourself. Or at least provide a coherent question.&lt;/p&gt;&#xA;" OwnerUserId="17158" LastEditorUserId="17158" LastEditDate="2017-06-04T04:08:50.123" LastActivityDate="2017-06-04T04:08:50.123" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="12529" PostTypeId="2" ParentId="12524" CreationDate="2017-06-03T16:38:38.477" Score="1" Body="&lt;p&gt;If $J$ is not square, solve $$|J^TJ| = 0$$ for $\theta_i$.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2017-06-03T16:38:38.477" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12531" PostTypeId="1" CreationDate="2017-06-03T21:08:15.040" Score="1" ViewCount="99" Body="&lt;p&gt;I have a robot that is inherently symmetric in nature. Sometimes one side is the base while the other is the end-effector and vice versa. This 'mode' can change while the robot is moving around. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Judging from the &lt;a href=&quot;http://wiki.ros.org/urdf/Tutorials&quot; rel=&quot;nofollow noreferrer&quot;&gt;URDF tutorials wiki&lt;/a&gt;, it looks like the commonly used &lt;code&gt;URDF&lt;/code&gt; package in &lt;code&gt;ROS&lt;/code&gt; is static and so the base of the robots is assumed to stay the base. Are there ways to get around this so that I can still use the &lt;code&gt;TF&lt;/code&gt; package?&lt;/p&gt;&#xA;" OwnerUserId="9070" LastEditorUserId="9176" LastEditDate="2017-06-04T10:55:58.603" LastActivityDate="2017-10-10T12:08:24.893" Title="Handling changing frames in ROS" Tags="&lt;ros&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12532" PostTypeId="1" CreationDate="2017-06-03T23:09:07.077" Score="1" ViewCount="100" Body="&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;I have a BeagleBone Black, an Arduino Duemilanove and a WS2812b LED strip driven with 5&amp;nbsp;V.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I have no level shifters, nor I intend to order one.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The Arduino works perfectly with a LED strip, and I need the BeagleBone Black just to send simple commands like 0, 1, 2, 3, 4, 5... to make the Arduino perform one of five modes.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The BeagleBone Black's USB port is taken by other device that I need, and I do not intend to use USB splitters.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;What is the best way to communicate between the BeagleBone Black and the Arduino in this situation? If I do not want to use level shifter I2C and RS232 TTL communication is impossible? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it OK to use for example just one wire (plus ground) and communicate via the analog port using &lt;code&gt;analogWrite()&lt;/code&gt; on the BeagleBone Black and &lt;code&gt;analogRead()&lt;/code&gt; on the Arduino, and is there some additional advice on communicating this way? &lt;/p&gt;&#xA;" OwnerUserId="17171" LastEditorUserId="9176" LastEditDate="2017-06-04T10:48:56.800" LastActivityDate="2017-06-04T10:50:52.243" Title="BeagleBone to Arduino analog communication" Tags="&lt;arduino&gt;&lt;beagle-bone&gt;" AnswerCount="2" CommentCount="1" ClosedDate="2017-06-05T10:50:26.127" ContentLicense="CC BY-SA 3.0" />
  <row Id="12533" PostTypeId="1" CreationDate="2017-06-04T00:19:54.680" Score="1" ViewCount="71" Body="&lt;p&gt;I want to use DGPS on a robot. I understand how DGPS works but I am having trouble figuring out what specific hardware I need. Is there a good resource for how to actually setup DGPS? Thanks for your help&lt;/p&gt;&#xA;" OwnerDisplayName="user16549" LastActivityDate="2017-06-05T16:31:22.510" Title="Differential GPS" Tags="&lt;localization&gt;&lt;gps&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12534" PostTypeId="2" ParentId="12532" CreationDate="2017-06-04T00:25:28.517" Score="0" Body="&lt;p&gt;It should be possible to make pseudo logic lines over analog between the BBB and the arduino using analog signals. The only real downside is that it will be slower and you have to write more code. Just be sure that you keep in mind the analog pins on the BBB only accept 1.8v so don't put anything beyond that on it.&lt;/p&gt;&#xA;" OwnerDisplayName="user16549" LastActivityDate="2017-06-04T00:25:28.517" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12535" PostTypeId="1" CreationDate="2017-06-04T06:01:35.810" Score="1" ViewCount="130" Body="&lt;p&gt;In case anyone is interested, I build a dashboard for the icreate 2.(&lt;a href=&quot;http://blog.mindfront.net/2017/06/roomba-dashboard-cli-dashboard-for.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://blog.mindfront.net/2017/06/roomba-dashboard-cli-dashboard-for.html&lt;/a&gt;)&lt;/p&gt;&#xA;" OwnerUserId="17139" LastActivityDate="2017-06-04T06:01:35.810" Title="Dashboard for IRobot Create 2" Tags="&lt;control&gt;&lt;irobot-create&gt;" AnswerCount="0" CommentCount="4" ClosedDate="2017-06-06T10:34:28.537" ContentLicense="CC BY-SA 3.0" />
  <row Id="12536" PostTypeId="2" ParentId="12532" CreationDate="2017-06-04T07:00:35.643" Score="0" Body="&lt;p&gt;BeagleBone black has 6 UART ports - you can connect one of them to the Arduino digital pins and use software serial on the Arduino. See:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://beaglebone.cameon.net/home/serial-ports-uart&quot; rel=&quot;nofollow noreferrer&quot;&gt;Using the BeagleBone‎ &gt; ‎Serial ports / UART&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.arduino.cc/en/Reference/softwareSerial&quot; rel=&quot;nofollow noreferrer&quot;&gt;SoftwareSerial Library&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="9504" LastEditorUserId="9176" LastEditDate="2017-06-04T10:50:52.243" LastActivityDate="2017-06-04T10:50:52.243" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12537" PostTypeId="2" ParentId="12525" CreationDate="2017-06-04T11:09:04.047" Score="2" Body="&lt;p&gt;Firstly, you may be confusing ArduPilot/ArduCopter software with the ArduPilot Mega (APM) hardware platform. ArduPilot/ArduCopter is indeed a great piece of software and is still maintained. The ArduPilot Mega (APM) has been discontinued, and as such, has very limited support and development.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regardless of that, I looked into this whole issue, of which hardware platform to choose, a while back, see &lt;a href=&quot;https://gr33nonline.wordpress.com/2016/09/15/flight-controllers/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Flight Controllers&lt;/a&gt;. What you need to remember is that some of the newer, and smaller, FCs are using very fast processors (i.e. STM32F4), which are dedicated to the flight controller, without having to use a portion of their limited processing power/time to deal with unnecessary I/O activities, which could affect the Pi.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, the newer processors used in the SP3 Racing F3 and the Naze32 and even the underpowered CC3D running OpenPilot/LibrePilot can be, or &lt;em&gt;feel&lt;/em&gt;, more responsive, than a fully loaded &lt;a href=&quot;https://emlid.com/navio-apm/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pi running ArduPilot/ArduCopter&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Admittedly the ArduPilot software is &lt;em&gt;very expansive&lt;/em&gt; and fully featured, but has, over the years, become rather demanding, so much so that it has outgrown its AVR platform - that is to say, the latest version (3.3.x) will not run on an Arduino Mega (or Uno) (i.e. ArduPilot Mega (APM) 2.6 is no longer supported and which is limited to version 3.2.1), and requires a PixHawk, or one of its derivatives, to provide sufficient processing power for the drone not to fall out of the sky, or even take off.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It depends what you want the software to do. If you need high response speeds (for racing) then maybe the Pi is not the way to go. I you want an all singing and dancing flight controller then a PixHawk might be a better bet.  However, the Pi does have its advantages. The question is do you require those advantages?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, you say that the APM you want is from eBay, so (as I have already stated above) that will be a APM 2.6, or if you are unlucky, or cheap, APM 2.5. This will not run that latest version of ArduPilot/ArduCopter, but probably perfectly adequate for a starter quadcopter. However, if you want all of the latest ArduPilot/ArduCopter software, then a PixHawk, or clone thereof, is going to last you longer, and provide much better performance, but cost twice as much (\$40 vs \$20). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, if you use the Pi and then have to buy all of the additional sensors separately, then it will cost [much] more than if you had bought a fully featured Naze32 &lt;em&gt;Full&lt;/em&gt; (not just 10DOF) Revision 6.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to save money, get a CC3D or a Naze32 and run LibrePilot. You can always upgrade at a later point. I, also, wanted an APM, or Arduino based board, but after &lt;em&gt;really&lt;/em&gt; looking into it, I realised that it just wasn't worth it anymore, and that the software has outpaced the hardware. Three or four years ago, it probably would have been perfect - now, not so. Likewise, I wanted to use a Pi, but then realised that it would be too slow (i.e. unresponsive) for my requirements. I ended up getting the latest and greatest Naze32, and a SP3 Racing F3. However, I still want to use ArduPilot/ArduCopter, and will do, in a few years, when maybe, probably, an even better platform than the PixHawk will come around...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Disclaimer: Please note that the above is only my opinion, and, as such, others may choose to disagree, or have a completely different take on things.&lt;/p&gt;&#xA;" OwnerUserId="9176" LastEditorUserId="9176" LastEditDate="2017-06-05T15:04:18.217" LastActivityDate="2017-06-05T15:04:18.217" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12538" PostTypeId="1" AcceptedAnswerId="12539" CreationDate="2017-06-04T14:06:31.017" Score="0" ViewCount="792" Body="&lt;p&gt;I came across many good books on robotics. In particular I am interested in Inverse kinematic of 6dof robot. All books have example which goes on like this &quot;given homogeneous transformation matrix as below, find the angles ?&quot;.. Problem, is how do I find components of a homogeneous transformation. matrix in real world? i.e. how do i practically derive 9 components of the rotation matrix embeded in homogeneous transformation matrix?.....&lt;/p&gt;&#xA;" OwnerUserId="16882" LastActivityDate="2017-06-07T16:17:05.997" Title="Help !!Homogeneous transformation matrix" Tags="&lt;inverse-kinematics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12539" PostTypeId="2" ParentId="12538" CreationDate="2017-06-04T16:08:35.663" Score="0" Body="&lt;p&gt;The upper left 3x3 submatrix represents the rotation of the end effector coordinate frame relative to the base frame.   In this submatrix, the first column maps the final frame's x axis to the base frame's x axis; similarly for y and z from the next two columns.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first three elements of the right column of the homogeneous transform matrix represent the position vector from the base frame origin to the origin of the last frame.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT BASED ON COMMENT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are several ways to define the nine components of the rotation submatrix, $R$, given a particular task in space.  Note that $R$ is orthonormal, so you don't really need to define all 9 based on just the task.  A very common approach is to represent the task orientations (with respect to the global coordinate system) using Euler angles.  With this representation, each column of $R$ describes a rotation about one of the axes.  Be careful with Euler angles, though, because the order of rotation matters.  Commonly, but not exclusively, the first column of $R$ describes a rotation about the global $z$ axis; the second column describes a rotation about the now-rotated $y$ axis; and the third column describes a rotation about the $x$ axis, which has been rotated by the two previous angles.  There are other Euler angle representations, also.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are other ways to use $R$ to describe the task orientation.  I find Waldron's text very readable for this.  Check out section 1.2.2 of his draft &lt;a href=&quot;http://www.cc.gatech.edu/~hic/4632B-07/kinematics-draft.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;Handbook of Robotics&lt;/em&gt;&lt;/a&gt; sourced by Georgia Tech.  In this section he describes not only Z-Y-X Euler angles, but also Fixed Angles, quaternions, and Angle-Axis representations for orientation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The important thing is to ensure you consider whatever representation you use for $R$ when you compute the inverse kinematics.  The homogeneous transformation describes how the position and rotation vary based on joint angles, but you need to ensure that your definition for $R$ is properly inverted in computing the final three joint angles for your robot.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Blockquote&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="11125" LastEditorUserId="11125" LastEditDate="2017-06-07T16:17:05.997" LastActivityDate="2017-06-07T16:17:05.997" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="12540" PostTypeId="1" AcceptedAnswerId="12546" CreationDate="2017-06-04T16:53:48.860" Score="1" ViewCount="272" Body="&lt;p&gt;The idea of using Kalman gain in EKF SLAM is to figure out how much we trust our motion model and sensor/observation model. As explained in &lt;a href=&quot;https://home.wlu.edu/~levys/kalman_tutorial/kalman_05.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Extended Kalman Filter: An Interactive Tutorial for Non-Experts - Part 5: Computing the Gain&lt;/a&gt;, the Kalman gain can be calculated as,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$K_t = \frac{p}{(p +r)}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $p$ denotes prediction error and $r$ denotes sensor noise. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, if we look into the equation in &lt;a href=&quot;https://i.stack.imgur.com/XLGZZ.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;the image&lt;/a&gt;, &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$K_t = \bar{\Sigma_t}H_t^T(H_t\bar{\Sigma_t}H_t^T +Q_t)^{-1}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;we can see that Kalman gain is calculated using Covariance matrix ($\Sigma$), Jacobian of observation model ($H$) and Sensor noise ($Q$). Comparing with earlier equation, $p$ can be considered equivalent of $\Sigma$, while $r$ can be equivalent of $Q$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How does $H$ fit in, in this equation? What would be an intuitive explanation?&lt;/p&gt;&#xA;" OwnerUserId="10959" LastEditorUserId="9176" LastEditDate="2017-06-05T01:33:55.343" LastActivityDate="2017-06-05T04:23:14.237" Title="What is the intuitive explanation of using Jacobian of observation model while calculating Kalman gain in EKF SLAM?" Tags="&lt;mobile-robot&gt;&lt;slam&gt;&lt;kalman-filter&gt;&lt;navigation&gt;&lt;ekf&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12541" PostTypeId="1" AcceptedAnswerId="12549" CreationDate="2017-06-04T17:13:48.513" Score="1" ViewCount="534" Body="&lt;p&gt;I am a junior web developer working mainly with Bash, Javascript, and Drupal. I'm more fascinated writing scripts and programs that do certain concrete actions instead of querying and manipulating databases.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do desire to step into robotics in the future (after completions) and had the following question in my mind:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do robots usually have databases (similar to these of websites in quality and quantity) and if so, please give a practical example what are they using for? Maybe in the context of machine vision or machine motion.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Update (13/11/19):&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;All the answers here are good in my opinion. If I could I would accept all of them, I suggest to start by reading the answer of user16549 which makes an introduction to DBs in robots, then continue to the answer by FooTheBar, and then read other answers.&lt;/p&gt;&#xA;" OwnerDisplayName="user16003" LastEditorDisplayName="user16003" LastEditDate="2019-11-13T09:13:44.967" LastActivityDate="2019-11-13T12:38:51.320" Title="Do robots usually have databases?" Tags="&lt;data-association&gt;" AnswerCount="5" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="12543" PostTypeId="1" CreationDate="2017-06-04T21:11:43.827" Score="2" ViewCount="22" Body="&lt;p&gt;I need an urgent help in my graduation project on unmanned guard boat. &#xA;I need to control the boat autonomously and manually using ArduPilot and Arduino Uno.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I just ask if anyone has the code, that can be written on the ArduPilot, that enables control both:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;autonomously, using way-points, and;&lt;/li&gt;&#xA;&lt;li&gt;manually, using LabVIEW,&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;and then sends the data through the Arduino to complete the movement of the boat as the motors are connected to the Arduino. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Furthermore I need to know to send GPS coordinates using a U-blox NEO-7M connected to ArduPilot running on an Arduino to be displayed through the serial port of PC on the software. &lt;/p&gt;&#xA;" OwnerUserId="17179" LastEditorUserId="9176" LastEditDate="2017-06-05T01:37:14.973" LastActivityDate="2017-06-05T01:37:14.973" Title="Unmanned guard boat" Tags="&lt;simulation&gt;&lt;simulator&gt;" AnswerCount="0" CommentCount="2" FavoriteCount="1" ClosedDate="2017-06-05T10:48:33.883" ContentLicense="CC BY-SA 3.0" />
  <row Id="12544" PostTypeId="2" ParentId="12541" CreationDate="2017-06-04T21:54:22.070" Score="2" Body="&lt;p&gt;Most robots I have encountered don't have databases. I think this is mostly because there is usually only one process or &quot;user&quot; that needs the data they store in memory. With that said robots can often store a lot of data in log files for debugging purposes.&lt;/p&gt;&#xA;" OwnerDisplayName="user16549" LastActivityDate="2017-06-04T21:54:22.070" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12546" PostTypeId="2" ParentId="12540" CreationDate="2017-06-05T04:23:14.237" Score="2" Body="&lt;p&gt;Let's try breaking it down.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Projection of uncertainty&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;$H\Sigma H^T$ is projecting the state uncertainty into measurement space. How do we know that?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\Sigma$ denotes the the covariance of our belief in the filter's &lt;em&gt;state&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$h(x)$ maps some belief about state to a measurement that we would expect if that were the true state&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$H(x)$ is a linear approximation of $h(x)$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why? Covariance itself provides little intuition for what is happening under the &quot;hood&quot;. What is more informative is a &lt;em&gt;square root&lt;/em&gt; of the covariance. Imagine that $\Sigma = LL^T$ for some $L$. $L$ is what is really stretching the space in a linear fashion. If you were to deform the unit circle by $L$, you would get the uncertainty ellipse that we all know and love. By stretching and shrinking $L$, we can change our distribution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That means that $HL$ would first deform the unit circle into an ellipse governed by $L$, and then $H$ would stretch and shear that ellipse into a different ellipse. Now we can recover the covariance of the deformed points: it would be $HL(HL)^T$, which is $HLL^TH^T = H\Sigma H^T$&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Why does any of this matter?&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;The kalman gain is like a ratio, governing how much we should trust a new measurement. Often, your measurements will have different dimension and different units than your state. So you need to express uncertainty in the filter state as uncertainty in observation space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first equation is meaningless if $p$ and $r$ are different shapes or different units. We need to munge $p$ into the same shape and units as $r$ by projecting into $p$ observation space. The above rambling outlines how one does that.&lt;/p&gt;&#xA;" OwnerUserId="10847" LastActivityDate="2017-06-05T04:23:14.237" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12547" PostTypeId="1" CreationDate="2017-06-05T05:58:22.617" Score="3" ViewCount="854" Body="&lt;p&gt;There are a lot of questions regarding this topic, but I am trying to get a more clear picture from these questions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am trying to calibrate a fish eye camera and I am using OpenCV &lt;code&gt;cv::omnidir&lt;/code&gt; class functions to find the camera intrinsics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am getting fair results. The problem is, at the image edges, the objects get stretched and I am, also, losing some information at the edges.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Here is my input image:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ooWHX.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ooWHX.jpg&quot; alt=&quot;Input image&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Here is my output image:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/9AWqe.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9AWqe.jpg&quot; alt=&quot;Output image&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can see, I am losing some information at the edges (left and right) and also the images start stretching at the edges.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My questions are as follows:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;How I can I include more FOV in the corrected image at the edges, where the information is lost?&lt;/li&gt;&#xA;&lt;li&gt;How can I reduce the blur effect at the edges?&lt;/li&gt;&#xA;&lt;li&gt;During calibration, should I cover the entire FOV of the camera so that the corners are present at the edges also?&lt;/li&gt;&#xA;&lt;li&gt;What is the correct way of showing the patterns while calibration?&lt;/li&gt;&#xA;&lt;li&gt;Are there any online tool boxes which provides fish eye calibration.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Here is my code snippet for calibration and testing:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;//Calibration&#xA;Mat K, xi, D, idx;&#xA;int flags=0|omnidir::CALIB_FIX_SKEW | omnidir::CALIB_FIX_K1 | &#xA; omnidir::CALIB_FIX_K2;&#xA;&#xA;TermCriteria critia(cv::TermCriteria::COUNT + cv::TermCriteria::EPS, 200, &#xA;0.0001);&#xA;&#xA;vector&amp;lt;cv::Mat&amp;gt; rvecs, tvecs;&#xA;&#xA;double rms = cv::omnidir::calibrate(obj_points, image_points, image_size, K, &#xA;xi, D, rvecs, tvecs, flags, critia, idx);&#xA;&#xA;&#xA;//Testing&#xA;Mat R = Mat::eye(3, 3, CV_32F);&#xA;Mat Mapx, Mapy;&#xA;Mat New_camera_mat(3,3,CV_32F);&#xA;&#xA;//New_camera_mat tries to get entire FOV,but it is losing some information &#xA;  at edges&#xA;&#xA;New_camera_mat.at&amp;lt;float&amp;gt;(0, 0) = 100; New_camera_mat.at&amp;lt;float&amp;gt;(0, 1) = 0; &#xA;New_camera_mat.at&amp;lt;float&amp;gt;(0, 2) = 1280/2;&#xA;&#xA;New_camera_mat.at&amp;lt;float&amp;gt;(1, 0) = 0; New_camera_mat.at&amp;lt;float&amp;gt;(1, 1) = 100; &#xA;New_camera_mat.at&amp;lt;float&amp;gt;(1, 2) = 720/2 ;&#xA;&#xA;New_camera_mat.at&amp;lt;float&amp;gt;(2, 0) = 0; New_camera_mat.at&amp;lt;float&amp;gt;(2, 1) = 0; &#xA;New_camera_mat.at&amp;lt;float&amp;gt;(2, 2) = 1;&#xA;&#xA;cv::omnidir::initUndistortRectifyMap(K, D, xi_Right, R, New_camera_mat, &#xA;image_size, CV_32F, Mapx, Mapy, cv::omnidir::RECTIFY_PERSPECTIVE);&#xA;&#xA;remap(distorted_frame, undistorted_out_frame, Mapx, Mapy, INTER_CUBIC);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="15089" LastEditorUserId="9176" LastEditDate="2017-06-05T06:06:48.377" LastActivityDate="2018-02-20T01:14:36.330" Title="Correct Fish eye camera radial distortion and blurry stretch at the image edges" Tags="&lt;computer-vision&gt;&lt;cameras&gt;&lt;calibration&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12548" PostTypeId="2" ParentId="12541" CreationDate="2017-06-05T06:26:19.940" Score="0" Body="&lt;p&gt;In the hardware or controller itself, I haven't seen the use of database. Anyway, having databases can be useful in planning for, e.g., motions or grasps for robots. For example, having a database of a manipulator's kinematic reachability can speed up motion planning. Another common example is a grasp database: for a given object, a set of possible grasps is computed and stored for further use in planning.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might want to explore &lt;a href=&quot;http://openrave.org/docs/latest_stable/&quot; rel=&quot;nofollow noreferrer&quot;&gt;OpenRAVE&lt;/a&gt;, a robot simulation environment, where there are scripts provided specifically for computing &lt;a href=&quot;http://openrave.org/docs/latest_stable/databases/#openrave-database-generators&quot; rel=&quot;nofollow noreferrer&quot;&gt;various databases&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="7610" LastActivityDate="2017-06-05T06:26:19.940" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12549" PostTypeId="2" ParentId="12541" CreationDate="2017-06-05T07:47:15.947" Score="0" Body="&lt;p&gt;Databases are important for robots to store information...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;...about itself:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Where was I when I was turned off&lt;/li&gt;&#xA;&lt;li&gt;How is my hardware configuration (e.g. intrinsic calibration for cameras)&lt;/li&gt;&#xA;&lt;li&gt;How warm was my motor when I used it last time for 10 minutes (important to detect defects)&lt;/li&gt;&#xA;&lt;li&gt;How did I move my arm the last time to grasp (caching of planned movements)&lt;/li&gt;&#xA;&lt;li&gt;How far did I drive with this set of wheels?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;...about the environment:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;a map&lt;/li&gt;&#xA;&lt;li&gt;important positions in the map (a table, a door, a CNC machine)&lt;/li&gt;&#xA;&lt;li&gt;where am I not allowed to drive to&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;...about objects:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;how does this coke-bottle look like that I have to bring to my owner&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;...about jobs:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;What was I doint when I had to stop for a recharge&lt;/li&gt;&#xA;&lt;li&gt;How fast did I finish this task the last 500 Times&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Persistent storage is very important for robots. Some information (like calibration) is only important for a single robot, other infos like maps or object descriptions should be shared between robots and have to be synced. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So databases are very important for modern robots. &lt;/p&gt;&#xA;" OwnerUserId="23196" LastEditorUserId="23196" LastEditDate="2017-06-05T07:53:07.457" LastActivityDate="2017-06-05T07:53:07.457" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12551" PostTypeId="2" ParentId="12429" CreationDate="2017-06-05T13:50:38.603" Score="1" Body="&lt;p&gt;The Roomba expects binary data.  When you type in the PuTTY terminal, you are sending &lt;a href=&quot;http://www.asciitable.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;ASCII&lt;/a&gt; data.  For example when you type &quot;128&quot; into the terminal, you are actually sending 3 bytes of data: [49 50 56].  And because many commands of the &lt;a href=&quot;http://www.irobot.com/~/media/MainSite/PDFs/About/STEM/Create/create_2_Open_Interface_Spec.pdf?la=en&quot; rel=&quot;nofollow noreferrer&quot;&gt;OI Spec&lt;/a&gt; are outside the typeable ASCII range, using the terminal in this manner won't work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should use a programming language such as &lt;a href=&quot;https://robotics.stackexchange.com/questions/7158/c-and-create2&quot;&gt;C&lt;/a&gt;, &lt;a href=&quot;https://robotics.stackexchange.com/questions/7018/irobot-create-2-c-connection&quot;&gt;C#&lt;/a&gt;, &lt;a href=&quot;https://robotics.stackexchange.com/questions/6831/where-can-i-get-openinterface-py&quot;&gt;Python&lt;/a&gt;, etc. to send the data packet.  There are many libraries for the Create2 freely available online.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2017-06-05T13:50:38.603" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12553" PostTypeId="2" ParentId="12503" CreationDate="2017-06-05T14:44:54.390" Score="1" Body="&lt;p&gt;I don't see an order difference in the list you have posted here, so I'm not sure what your question is. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also went back and checked the original source code (I am the author) and there is no discrepancy. The contents of packets 6 + 101 do equal packet 100.&lt;/p&gt;&#xA;" OwnerUserId="4373" LastActivityDate="2017-06-05T14:44:54.390" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="12554" PostTypeId="2" ParentId="12533" CreationDate="2017-06-05T16:31:22.510" Score="1" Body="&lt;p&gt;Basically, you need the following:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A target DGPS-capable unit&lt;/li&gt;&#xA;&lt;li&gt;A source DGPS unit&lt;/li&gt;&#xA;&lt;li&gt;A data link to carry the differential data from source to target &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;and of course necessary software and cabling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can find several white papers and application notes on manufacturers' internet pages. One of them is the following : &lt;a href=&quot;http://www.trimble.com/gps_tutorial/dgps-how.aspx&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;trimble&quot;&gt;trimble&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A poor man's DGPS setup could be experimented, where you simply use two GPS Receivers and use the difference to correct the target GPS pos. This would not technically be as accurate as the complete DGPS solution. But, for hobby purposes this would probably be enough (not sure, never tried). &lt;/p&gt;&#xA;" OwnerUserId="9570" LastActivityDate="2017-06-05T16:31:22.510" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12555" PostTypeId="1" CreationDate="2017-06-05T17:55:18.223" Score="2" ViewCount="42" Body="&lt;p&gt;I am about to build a water surface vehicle (a kind of boat). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was looking for different type motors and ruled out the stepper and servo motors. But I got confused between brushed and brushless dc motors. Brushless motors on one hand are more efficient but brushed are low cost and less complex. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can you explain to me or get me some resource on how to find the best motor for low as well as for high budget? I am expecting the load to be around 12&amp;nbsp;kg. Please draw my attention to the necessary requirements that need to be keep in mind while choosing the motors. Also suggest me link where I can study about water thrusters and the propellers.  &lt;/p&gt;&#xA;" OwnerUserId="10946" LastEditorUserId="9176" LastEditDate="2017-06-06T01:23:26.437" LastActivityDate="2017-06-06T01:23:26.437" Title="How to choose a motor for water surface vehicle?" Tags="&lt;mobile-robot&gt;&lt;motor&gt;&lt;underwater&gt;" AnswerCount="0" CommentCount="1" FavoriteCount="2" ClosedDate="2017-06-06T10:22:35.263" ContentLicense="CC BY-SA 3.0" />
  <row Id="12556" PostTypeId="1" CreationDate="2017-06-05T20:15:59.263" Score="3" ViewCount="185" Body="&lt;p&gt;I am currently undertaking a competition called CanSat, in which you build a satellite in the form of a standard soda can. It will in turn then be launched 30&amp;nbsp;meters, 100&amp;nbsp;meters and then finally 500&amp;nbsp;meters into the sky. I'm stuck on something and I need a little bit of help.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically I am looking at streaming low quality video (480p-10fps/ 240p-30fps), using an Arduino Uno/Mega, inside of a can. The spacial limitations I mentioned above are 115&amp;nbsp;mm in height and 65&amp;nbsp;mm in diameter. I will not be able to use a conventional IP camera, due to the limitations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was thinking about using a Bluetooth V2 Chip in order to achieve the transfer rate to stream to a PC. &lt;strong&gt;I am looking for the following help:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;What camera to use&lt;/li&gt;&#xA;&lt;li&gt;What software to use to receive the video on a PC &lt;/li&gt;&#xA;&lt;li&gt;And finally any other relevant information about the limitations of the Arduino and streaming.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="17195" LastEditorUserId="9176" LastEditDate="2017-06-06T01:25:36.427" LastActivityDate="2017-10-18T08:41:07.897" Title="Live Streaming video via Arduino with limited space" Tags="&lt;arduino&gt;&lt;cameras&gt;" AnswerCount="1" CommentCount="3" ClosedDate="2017-10-18T20:52:48.997" ContentLicense="CC BY-SA 3.0" />
  <row Id="12557" PostTypeId="2" ParentId="12512" CreationDate="2017-06-05T21:20:10.950" Score="1" Body="&lt;p&gt;I believe this is correct, with the caveat that the acceleration will still be in the frame of the accelerometer. You'll need to multiply by the rotation matrix from m to t to know the acceleration in the t frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reasons this isn't usually done include (1) the measurement errors of the accelerometer will be (mostly) statistically independent in the IMU frame but will have dependencies in the transformed frame, so any sort of signal processing should be done in the IMU frame, and (2) differentiating a gyro signal will add a ton of noise and the result will probably suck.&lt;/p&gt;&#xA;" OwnerUserId="13844" LastActivityDate="2017-06-05T21:20:10.950" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12558" PostTypeId="2" ParentId="12531" CreationDate="2017-06-05T21:24:09.600" Score="0" Body="&lt;p&gt;Possible approaches:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1: Choose one end as the primary end, and set its position from your own calculations. Don't use URDF and write your own robot state publisher.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2: Maintain two models and switch between them. You publish which TF chain is valid, downstream nodes that care use that to choose which to use.&lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="184" LastEditDate="2017-06-10T21:55:18.250" LastActivityDate="2017-06-10T21:55:18.250" CommentCount="1" CommunityOwnedDate="2017-06-05T21:24:09.600" ContentLicense="CC BY-SA 3.0" />
  <row Id="12559" PostTypeId="1" AcceptedAnswerId="12575" CreationDate="2017-06-06T05:56:22.417" Score="1" ViewCount="606" Body="&lt;p&gt;I have this servo motor (&lt;a href=&quot;http://robokits.co.in/motors/high-torque-encoder-dc-servo-motor-60rpm-with-uart-i2c-ppm-drive?gclid=CLHf9_fCqNQCFVAeaAodhM0Ddg&amp;amp;&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://robokits.co.in/motors/high-torque-encoder-dc-servo-motor-60rpm-with-uart-i2c-ppm-drive?gclid=CLHf9_fCqNQCFVAeaAodhM0Ddg&amp;amp;&lt;/a&gt;). Generally, I have seen servo motor with three wires only but this servo motor have 6 wires. I want to rotate this using PPM signal and accordingly I made connection as described in motor manual. Arduino Code to rotate motor is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;// Include the Servo library &#xA;#include &amp;lt;Servo.h&amp;gt; &#xA;// Declare the Servo pin &#xA;int servoPin = 10; &#xA;// Create a servo object &#xA;Servo Servo1; &#xA;void setup() { &#xA;   // We need to attach the servo to the used pin number &#xA;   Servo1.attach(servoPin); &#xA;}&#xA;void loop(){ &#xA;   // Make servo go to 0 degrees &#xA;   Servo1.write(0); &#xA;   delay(1000); &#xA;   // Make servo go to 90 degrees &#xA;   Servo1.write(90); &#xA;   delay(1000); &#xA;   // Make servo go to 180 degrees &#xA;   Servo1.write(180); &#xA;   delay(1000); &#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But what the motor does is it continuously turning. &#xA;How to control motor position using PPM.&#xA;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="14024" LastActivityDate="2017-06-08T04:10:07.470" Title="Rotate DC servo motor with ARDUINO" Tags="&lt;arduino&gt;&lt;servomotor&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12561" PostTypeId="1" CreationDate="2017-06-06T11:40:49.663" Score="0" ViewCount="113" Body="&lt;p&gt;What is the general &lt;em&gt;structure&lt;/em&gt; of &lt;strong&gt;.launch&lt;/strong&gt; file for using a sensor?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;For example:&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1.Following code is example for using a JoyStick to control TurtleSim&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;launch&amp;gt;&#xA;  &amp;lt;node pkg=&quot;turtlesim&quot; type=&quot;turtlesim_node&quot; name=&quot;sim&quot;/&amp;gt;&#xA;  &amp;lt;node pkg=&quot;chapter4_tutorials&quot; type=&quot;example1&quot; name=&quot;example1&quot; /&amp;gt;&#xA;  &amp;lt;param name=&quot;axis_linear&quot; value=&quot;1&quot; type=&quot;int&quot; /&amp;gt;&#xA;  &amp;lt;param name=&quot;axis_angular&quot; value=&quot;0&quot; type=&quot;int&quot; /&amp;gt;&#xA;  &amp;lt;node respawn=&quot;true&quot; pkg=&quot;joy&quot;type=&quot;joy&quot; name=&quot;teleopJoy&quot;&amp;gt;&#xA;    &amp;lt;param name=&quot;dev&quot; type=&quot;string&quot; value=&quot;/dev/input/js0&quot; /&amp;gt;&#xA;    &amp;lt;param name=&quot;deadzone&quot; value=&quot;0.12&quot; /&amp;gt;&#xA;  &amp;lt;/node&amp;gt;&#xA;&amp;lt;/launch&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;2.Using a Laser Range finder&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;launch&amp;gt;&#xA;  &amp;lt;node pkg=&quot;hokuyo_node&quot; type=&quot;hokuyo_node&quot; name=&quot;hokuyo_node&quot;/&amp;gt;&#xA;  &amp;lt;node pkg=&quot;rviz&quot; type=&quot;rviz&quot; name=&quot;rviz&quot;&#xA;        args=&quot;-d $(find chapter4_tutorials)/example2.vcg&quot;/&amp;gt;&#xA;  &amp;lt;node pkg=&quot;chapter4_tutorials&quot; type=&quot;example2&quot; name=&quot;example2&quot; /&amp;gt;&#xA;&amp;lt;/launch&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;What exactly is the &lt;strong&gt;syntax&lt;/strong&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why do we have two &lt;strong&gt;&lt;code&gt;&amp;lt;node pkg&amp;gt;&lt;/code&gt;&lt;/strong&gt;?&lt;/p&gt;&#xA;" OwnerUserId="17146" LastEditorUserId="37" LastEditDate="2017-06-06T12:50:24.910" LastActivityDate="2018-11-29T08:02:45.527" Title=".launch file associated while using a sensor" Tags="&lt;sensors&gt;&lt;ros&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12562" PostTypeId="2" ParentId="12561" CreationDate="2017-06-06T11:54:45.290" Score="1" Body="&lt;p&gt;The first node, hokuyo_node, is the driver for the sensor.&#xA;The second node, rviz, is for visualizing the data coming from the hokuyo_node.&#xA;The third node is the tutorial program. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://wiki.ros.org/roslaunch&quot; rel=&quot;nofollow noreferrer&quot;&gt;launch file&lt;/a&gt;  format is well documented. However it assumes that you understand the basic organization of ROS, what nodes are, and how they interact.&lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="184" LastEditDate="2017-06-06T20:43:06.563" LastActivityDate="2017-06-06T20:43:06.563" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12564" PostTypeId="1" AcceptedAnswerId="12565" CreationDate="2017-06-07T02:48:01.780" Score="3" ViewCount="346" Body="&lt;p&gt;While formulating a state matrix of a system, say a system of a typical cruise controller,&#xA;\begin{equation}&#xA;\begin{bmatrix}&#xA;\dot{v}&#xA;\end{bmatrix} = \begin{bmatrix} -\frac{b}{m} \end{bmatrix} \begin{bmatrix} v \end{bmatrix} + \begin{bmatrix} -\frac{1}{m} \end{bmatrix} \begin{bmatrix} u \end{bmatrix}&#xA;\end{equation}&#xA;\begin{equation}&#xA;y = \begin{bmatrix} 1 \end{bmatrix} \begin{bmatrix} v \end{bmatrix}&#xA;\end{equation}&#xA;If we consider $b = 0$ (negligible), then does this state space matrix make sense any more and is it viable? A state matrix without state variable influence in equation?&lt;/p&gt;&#xA;" OwnerUserId="17205" LastEditorUserId="9176" LastEditDate="2017-06-07T06:33:34.560" LastActivityDate="2017-06-07T17:52:39.960" Title="Can a state matrix have a row of zeros?" Tags="&lt;control&gt;&lt;design&gt;&lt;dynamics&gt;&lt;self-driving&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12565" PostTypeId="2" ParentId="12564" CreationDate="2017-06-07T08:47:32.833" Score="8" Body="&lt;p&gt;Yes, a state matrix with zero rows and/or columns makes sense and is viable.  It typically signify pure integrators in the system.  In the example you give, &#xA;$$&#xA;\dot{v} = -\frac{b}{m} v +\frac{1}{m} u&#xA;$$&#xA;where $v$ is the speed, $u$ is the externally applied force, and $bv$ is some viscous damping force. Now if the viscous damping coefficient is zero (no retarding force acting on the object of mass $m$, the differential equation becomes &#xA;$$&#xA;\dot{v} = \frac{1}{m} u&#xA;$$&#xA;The $\dot{v}$ is integrated kinematically to obtain $v$, and your state-space model becomes&#xA;\begin{eqnarray*}&#xA;[\dot{v}] &amp;amp;=&amp;amp; [0][v] + [1/m][u] \\ &#xA;y &amp;amp;=&amp;amp; [1][v]&#xA;\end{eqnarray*} &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another way to look at it is to obtain the transfer function from $u$ to $y$ (the transfer function of the plant which you want to control), which becomes&#xA;$$&#xA;\frac{Y}{U} = \frac{1}{m}\cdot\frac{1}{s+b/m}&#xA;$$&#xA;which is a constant term ($1/m$) times a first-order lag.  For $b=0$, the transfer function becomes&#xA;$$&#xA;\frac{Y}{U} = \frac{1}{m}\cdot\frac{1}{s}&#xA;$$&#xA;which is simply a constant term ($1/m$) times an integrator ($1/s$).&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Edit: Controllability of the System&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;If the externally applied force is zero (i.e., $u=0$) the output of the integrator ($v$) remains constant; if $u&amp;gt;0$, the resulting acceleration ($\dot{v}=u/m$) is integrated &quot;up&quot; and the speed increases; if $u&amp;lt;0$, $\dot{v}$ is integrated &quot;down&quot; and the speed decreases.  Speed, of course, is the state variable in your system.  Thus, it is possible to transfer the system state from any initial state, $v(t_0)$, to any other state, $v(t_f)$, in a finite time by means of the input, &lt;em&gt;irrespective of the value of&lt;/em&gt; $b$. So, by purely physical reasoning we can say thet the system is controllable. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since this is a linear time-invariant system, the controllability matrix &#xA;$$&#xA;\mathbf{Q} = \left[ &#xA;\begin{array}{cccc}&#xA;\mathbf{B} &amp;amp; \mathbf{A}\mathbf{B} &amp;amp; \cdots &amp;amp; \mathbf{A}^{n-1}\mathbf{B}&#xA;\end{array}&#xA;\right]&#xA;$$&#xA;where $\mathbf{A}=[-b/m]$ is the state matrix, $\mathbf{B}=[1/m]$ is the input matrix, and $n=1$ is the number of state variables. For your system,&#xA;$$&#xA;\mathbf{Q} = \mathbf{B} = \left[ &#xA;\begin{array}{c}&#xA;1/m&#xA;\end{array}&#xA;\right]&#xA;$$&#xA;i.e., a non-zero scalar which can be inverted (it is non-singular).  Thus, the rank of $\mathbf{Q}$ is one, and the system is controllable. &lt;/p&gt;&#xA;" OwnerUserId="13926" LastEditorUserId="13926" LastEditDate="2017-06-07T17:52:39.960" LastActivityDate="2017-06-07T17:52:39.960" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12568" PostTypeId="1" CreationDate="2017-06-07T11:49:38.617" Score="3" ViewCount="252" Body="&lt;p&gt;I have a dataset where measurements were taken at 1&amp;nbsp;Hz, and I am trying to use a Kalman filter to add predicted samples in between the measurements, so that my output is at 10&amp;nbsp;Hz. I have it working ok when the velocity is linear, but when the direction changes, the filter takes a while to catch up. I am new to Kalman models, so am very likely making some mistakes in my settings. What can I do to improve this? See &lt;a href=&quot;https://drive.google.com/open?id=0B4RPGA-5qhz0OE5HY3pIR1VBdTN5WU1FTlZsc3B2LU4zS240&quot; rel=&quot;nofollow noreferrer&quot;&gt;attached image&lt;/a&gt; for an example, the red is measured data, with stepping in between measurements. The blue is the Kalman corrected. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;std::vector&amp;lt;double&amp;gt; measurements&lt;/code&gt; is a dummy data array I am testing with.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main Kalman code is based on &lt;a href=&quot;https://github.com/hmartiro/kalman-cpp/blob/master/kalman.cpp&quot; rel=&quot;nofollow noreferrer&quot;&gt;Github: hmartiro/kalman-cppkalman.cpp&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My code is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;int main(int argc, char* argv[]) {&#xA;&#xA;  int n = 3; // Number of states&#xA;  int m = 1; // Number of measurements&#xA;&#xA;  double dt = 1.0/30; // Time step&#xA;&#xA;  Eigen::MatrixXd matA(n, n); // System dynamics matrix&#xA;  Eigen::MatrixXd matC(m, n); // Output matrix&#xA;  Eigen::MatrixXd matQ(n, n); // Process noise covariance&#xA;  Eigen::MatrixXd matR(m, m); // Measurement noise covariance&#xA;  Eigen::MatrixXd matP(n, n); // Estimate error covariance&#xA;&#xA;  // Discrete motion, measuring position only&#xA;  matA &amp;lt;&amp;lt; 1, dt, 0, 0, 1, dt, 0, 0, 1;&#xA;  matC &amp;lt;&amp;lt; 1, 0, 0;&#xA;&#xA;  // Reasonable covariance matrices&#xA;  matQ &amp;lt;&amp;lt; 0.001, 0.001, .0, 0.001, 0.001, .0, .0, .0, .0;&#xA;  matR &amp;lt;&amp;lt; 0.03;&#xA;  matP &amp;lt;&amp;lt; .1, .1, .1, .1, 10000, 10, .1, 10, 100;&#xA;&#xA;  // Construct the filter&#xA;  KalmanFilter kf(dt,matA, matC, matQ, matR, matP);&#xA;&#xA;  // List of noisy position measurements (yPos)&#xA;  std::vector&amp;lt;double&amp;gt; measurements = {&#xA;     10,11,13,13.5,14,15.2,15.6,16,18,22,20,21,19,18,17,16,17.5,19,21,22,23,25,26,25,24,21,20,18,16&#xA;  };&#xA;&#xA;  // Best guess of initial states&#xA;  Eigen::VectorXd x0(n);&#xA;  x0 &amp;lt;&amp;lt; measurements[0], 0, 0;&#xA;  kf.init(dt,x0);&#xA;&#xA;  // Feed measurements into filter, output estimated states&#xA;  double t = 0;&#xA;  Eigen::VectorXd y(m);&#xA;&#xA;&#xA;  for(int i = 0; i &amp;lt; measurements.size(); i++) { //ACTUAL MEASURED SAMPLE&#xA;&#xA;      yPos &amp;lt;&amp;lt; measurements[i];&#xA;&#xA;      kf.update(yPos);&#xA;&#xA;      for (int ji = 0; ji &amp;lt; 10; ji++)  // TEN PREDICTED SAMPLES&#xA;      {&#xA;          t += dt;       &#xA;&#xA;         kf.update(yPos);&#xA;&#xA;&#xA;          yPos &amp;lt;&amp;lt; kf.state().transpose(); //USE PREDICTION AS NEW SAMPLE&#xA;&#xA;      }&#xA;  }&#xA;&#xA;  return 0;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="9859" LastEditorUserId="9176" LastEditDate="2017-06-07T19:22:27.587" LastActivityDate="2017-06-08T06:27:39.323" Title="Kalman filter prediction questions" Tags="&lt;kalman-filter&gt;&lt;c++&gt;" AnswerCount="2" CommentCount="2" ClosedDate="2017-06-08T15:18:20.820" ContentLicense="CC BY-SA 3.0" />
  <row Id="12573" PostTypeId="2" ParentId="12568" CreationDate="2017-06-07T23:33:31.153" Score="1" Body="&lt;p&gt;This is what I believe is happening from a 1 min glance over your code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You are passing true measurement data to your KF at 3 hz. Between the actual measurements you are passing the new state estimates to your KF as if they were measurements. This is incorrect. What you should be doing is  calling the prediction update. What you are doing now will artificially drive down the covariance of your KF because it thinks it is getting new measurements. This would explain why the filter responds slowly to actual measurements. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;These are the lines from the git page that you want to run each time you want a new state estimate(without a new measurement!!!)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;x_hat_new = A * x_hat;&#xA; P = A*P*A.transpose() + Q;&lt;/code&gt;&lt;/p&gt;&#xA;" OwnerUserId="8842" LastActivityDate="2017-06-07T23:33:31.153" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12574" PostTypeId="2" ParentId="12127" CreationDate="2017-06-08T02:28:30.320" Score="0" Body="&lt;p&gt;i have ended up using 2 RC ESCs they can easily handle the 35 amps and 12v.  the flysky remote also allows mixing so that the 2 motors/escs can handle skid steering on one stick of the remote.  So much cheaper&lt;/p&gt;&#xA;" OwnerUserId="16668" LastActivityDate="2017-06-08T02:28:30.320" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12575" PostTypeId="2" ParentId="12559" CreationDate="2017-06-08T04:10:07.470" Score="0" Body="&lt;p&gt;Read this : &lt;a href=&quot;http://www.robokits.co.in/documentation/RMCS220x_DCServo_Driver.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.robokits.co.in/documentation/RMCS220x_DCServo_Driver.pdf&lt;/a&gt;&#xA;This is not exactly a servo. But it is a brushed DC motor coupled with an encoder and an inbuilt microcontroller to control the position from encoder feedback. The datasheet clearly says you can use PPM signal for speed control (RPM control) and not position control. Hence it does not work as a servo with PPM signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You need to use UART or I2C using Arduino  to communicate with the motor, which is simple.&#xA;You can check this tutorial on serial with Arduino : &#xA;&lt;a href=&quot;https://www.arduino.cc/en/reference/serial&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.arduino.cc/en/reference/serial&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Out of the six wires, only 4 will be used in case of controlling via UART:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;V+ = 12V &lt;/li&gt;&#xA;&lt;li&gt;UART RXD = Arduino TXD &lt;/li&gt;&#xA;&lt;li&gt;UART TXD = Arduino RXD &lt;/li&gt;&#xA;&lt;li&gt;GND = Arduino GND and power source ground&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Now either you can program Arduino to send UART commands or use Arduino's Serial Terminal directly in the way the mentioned in &lt;em&gt;Page 4&lt;/em&gt;. &lt;strong&gt;Make sure the baud rate is 9600&lt;/strong&gt; For a servo action you will mostly be using the commands :&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;GXXX&lt;/li&gt;&#xA;&lt;li&gt;RXXX&#xA;where XXX can be replaced with suitable encoder value. By using encoder specification from &lt;em&gt;Page 3&lt;/em&gt; :&#xA;\begin{equation}&#xA;XXX = \frac{Angle (in\hspace{5pt}degrees)}{0.2}&#xA;\end{equation} &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="17205" LastActivityDate="2017-06-08T04:10:07.470" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12576" PostTypeId="2" ParentId="12568" CreationDate="2017-06-08T06:27:39.323" Score="1" Body="&lt;p&gt;Your dT is 1/30 for some reason, but you said you had 1 Hz (1/1) and wanted 10 Hz (1/10). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But to your question, I would propagate the &quot;filler&quot; samples by &lt;em&gt;basing&lt;/em&gt; off the last Kalman estimate, then resetting the filler states to the Kalman states whenever the Kalman filter updates. Your path will be a little jerky, but right now you're treating future estimates as measurements, so your predicted states and measured states are identical, which means it's going to screw with your filter's covariance estimates. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would only update the filter when you have a real measurement. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, for example, right now you have something like:&lt;/p&gt;&#xA;&#xA;&lt;pre class=&quot;lang-matlab prettyprint-override&quot;&gt;&lt;code&gt;fastTs = 1/10; % High speed sample rate&#xA;while (true)&#xA;    if (currentMeasurementExists)&#xA;        KalmanStates = KalmanFilter(KalmanStates, Measurement, fastTs);&#xA;    else&#xA;        KalmanStates = KalmanFilter(KalmanStates, FillerMeasurement, fastTs);&#xA;    end&#xA;    FillerMeasurement = C*KalmanStates; % C is the output matrix that converts states to measurements&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;What I would suggest instead is:&lt;/p&gt;&#xA;&#xA;&lt;pre class=&quot;lang-matlab prettyprint-override&quot;&gt;&lt;code&gt;fastTs = 1/10;&#xA;slowTs = 1/1;&#xA;fastA = A(fastTs); % Sorry, no easy way to show this because dT is tucked away&#xA;slowA = A(slowTs); % in your 'A' matrix, but you need to use the correct sample times in the correct locations.&#xA;while (true)&#xA;    if (currentMeasurementExists)&#xA;        KalmanStates = KalmanFilter(KalmanStates, Measurement, slowTs);&#xA;        FillerStates = KalmanStates;&#xA;    else&#xA;        FillerStates = fastA*FillerStates; % Remember to use fastTs for filler, slowTs for real measurements. &#xA;    end&#xA;    FillerMeasurements = C*FillerStates;&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So to reiterate again, you are treating filler samples as real measurements and updating the Kalman filter accordingly, which is updating your Kalman states (and updating Kalman covariances to expect better samples). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I think you should do instead is to split the Kalman filter off to do &lt;em&gt;only&lt;/em&gt; filtering on &lt;em&gt;only&lt;/em&gt; real measurements. You know how your system should progress - this is the &lt;code&gt;A&lt;/code&gt; matrix. So, evolve the system from the last known &quot;good&quot; state (last Kalman update) using the &lt;code&gt;A&lt;/code&gt; matrix. When you get a new &quot;good&quot; state (new Kalman update), then reset the filler states to the Kalman states and continue propagating. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would bet the biggest performance hit you're taking on this is that you're screwing up the covariance estimates, because all of your &quot;measurements&quot; are exactly what the filter would predict.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-06-08T06:27:39.323" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="12577" PostTypeId="2" ParentId="11738" CreationDate="2017-06-08T07:27:23.377" Score="1" Body="&lt;p&gt;This is how I make changes to my robot according to the book &lt;strong&gt;&lt;em&gt;&quot;Mastering ROS for Robotics Programming&quot;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;configuring mobile robot as ROS master&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#setting LAPTOP_IP as mobile robot's ip&#xA;export LAPTOP_IP=192.168.7.2&#xA;&#xA;#setting ROS_IP variable as laptop's ip&#xA;export ROS_IP=$LAPTOP_IP&#xA;&#xA;#setting ROS_MASTER_URI as mobile robot's_ip&#xA;export ROS_MASTER_URI=http://192.168.7.2:11311&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;configuring laptop as ROS computing node&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#setting LAPTOP_IP as laptop's ip&#xA;export LAPTOP_IP=192.168.7.1&#xA;&#xA;#setting ROS_IP variable as laptop's ip&#xA;export ROS_IP=$LAPTOP_IP&#xA;&#xA;#setting ROS_MASTER_URI as mobile robot's_ip&#xA;export ROS_MASTER_URI=http://192.168.7.2:11311&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Also I've first tried this with different ros versions,&lt;em&gt;ROS groovy&lt;/em&gt; on mobile robot and &lt;em&gt;ROS indigo&lt;/em&gt; on my laptop . So as a result of that there was an error occurred described as in my question and in this attempt I've tried this configuration in both laptop and in the mobile robot using same &lt;em&gt;ROS indigo&lt;/em&gt; versions. Hope this will help to others. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Update 2017.08.28&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally I've experimented that it is ok with using two versions of &lt;strong&gt;&lt;em&gt;ROS&lt;/em&gt;&lt;/strong&gt; for this . Using &lt;strong&gt;&lt;em&gt;ROS groovy&lt;/em&gt;&lt;/strong&gt; for mobile robot and &lt;strong&gt;&lt;em&gt;ROS indigo&lt;/em&gt;&lt;/strong&gt; for our pc/laptop . The &lt;strong&gt;&lt;em&gt;ROS master&lt;/em&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;em&gt;ROS computing node&lt;/em&gt;&lt;/strong&gt; ip configurations must be properly set as mentioned above in this answer.  &lt;/p&gt;&#xA;" OwnerUserId="15103" LastEditorUserId="15103" LastEditDate="2017-12-08T10:09:28.120" LastActivityDate="2017-12-08T10:09:28.120" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12578" PostTypeId="2" ParentId="11738" CreationDate="2017-06-08T13:33:25.620" Score="0" Body="&lt;p&gt;From &lt;a href=&quot;https://github.com/nubot-nudt/gazebo_visual#configuration-of-computer-a-and-computer-b&quot; rel=&quot;nofollow noreferrer&quot;&gt;Configuration of computer A and computer B&lt;/a&gt; on &lt;strong&gt;nubot-nudt/gazebo_visual&lt;/strong&gt;:&lt;/p&gt;&#xA;&lt;h1&gt;Configuration of computer A and computer B&lt;/h1&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/qLcpL.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qLcpL.png&quot; alt=&quot;configuration&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Computer A runs one ROS node called N1 (i.e. Gazebo in the figure above) along with &lt;strong&gt;roscore&lt;/strong&gt;. Computer B runs another ROS node called N2 (i.e. Coach 1 and Robot team 1 can be treated as one combined node in the figure above).&lt;/p&gt;&#xA;&lt;p&gt;The communication between computer A and computer B is via ROS master. The following is the configuration steps:&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;In computer A, add computer B's IP address in /etc/hosts; and in computer B, add computer A's IP address in /etc/hosts&#xA;e.g. In computer A, &lt;code&gt;$ sudo gedit /etc/hosts and add &amp;quot;Maggie 192.168.8.100&amp;quot;&lt;/code&gt;&#xA;In computer B, &lt;code&gt;$ sudo gedit /etc/hosts and add &amp;quot;Bart   192.168.8.101&amp;quot;&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;In computer A, run node N1; In computer B, before you run node N2, you should export ROS_MASTER_URI.&#xA;e.g. In computer B, &lt;code&gt; $ export ROS_MASTER_URI=http://Bart:11311&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="17221" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2017-06-10T10:21:41.410" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12580" PostTypeId="1" AcceptedAnswerId="12601" CreationDate="2017-06-08T21:09:25.520" Score="3" ViewCount="181" Body="&lt;p&gt;I am interested in mission planning for multi-robot systems. Given multiple robots and multiple tasks and an environment, I need to specify missions and software should plan for the robot team to accomplish the mission. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To be more precise, tasks are just a bunch of waypoints with or without time-stamps or deadlines. More elaborately, a task in abstract sense is something like patrol location A using two robots which essentially can be coded up as two sets of way-points or trajectories for the robots. hence the assertion above that tasks can just be viewed as a bunch of waypoints.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So there are multiple tasks and what tasks have to be executed in which order has to be planned by user or software so as to fulfil a mission. I am looking for Github repositories where people have tackled such problems to take inspiration. I am open to any software framework.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a prime example of the kind of work or software I am looking for, &lt;a href=&quot;http://cs.gssi.infn.it/files/flyaq.mp4&quot; rel=&quot;nofollow noreferrer&quot;&gt;FLYAQ - An open source platform for mission planning of autonomous quadrotors&lt;/a&gt; is an example. Please share any code or PDF links, if possible.&lt;/p&gt;&#xA;" OwnerUserId="14868" LastEditorUserId="9176" LastEditDate="2017-06-11T04:59:10.857" LastActivityDate="2017-06-12T17:50:55.890" Title="Software for mission planning in multi-robot systems" Tags="&lt;mobile-robot&gt;&lt;motion-planning&gt;&lt;algorithm&gt;&lt;multi-agent&gt;&lt;reference-request&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12581" PostTypeId="2" ParentId="12518" CreationDate="2017-06-08T22:03:13.280" Score="0" Body="&lt;p&gt;Well, I guess the most difficult part is implementing the functions that calculate the Linear/Circular Interpolations and translating those to stepper motion. I've been working on a similar project, however, most of the motion required relies only on absolute positioning. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 6-axis motion controller that I have designed for this project is built around the dSPIN L6470 from STMicroelectronics. ST Provides a decent library to program the device and the integrated motion-engine makes the job a lot easier.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, it turns out that this approach is not as reliable for a CNC or even a 3D printer application, where a simple Go_To(abs_value); command is not sufficient to do the mission. Simply because the trajectory of the motion is unpredictable. Another drawback is the speed, aka the Feed Rate. There's no way to achieve a target speed with each absolute positioning command having its own distance and trajectory. I believe here comes into play what the &quot;planner&quot; does in GRBL and other implementations out there that are based on the same rule of thumb. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried to understand how GRBL does all of that, but because the functions concerned are distributed across different modules and they are all dependent on each other, I found it waste of time to dig more into this, as my own g-code interpreter follows a different path/approach and I'm quite satisfied with the results I have achieved so far. However, I would love to get a clear picture of other implementations and compare the performance with mine and see what's the best in different scenarios. &lt;/p&gt;&#xA;" OwnerUserId="17224" LastActivityDate="2017-06-08T22:03:13.280" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12582" PostTypeId="2" ParentId="12447" CreationDate="2017-06-09T08:18:17.133" Score="0" Body="&lt;p&gt;There are several aspects that you have to consider.  If the size of the balancing robot is small, you can easily control two 5V small dc motors directly with arduino/RPi-3. But, if the motors are big, then you would need 2 big motors (12V) and you would need a Raspberry Pi 3 + motor controllers or Arduino + motor controllers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your choice of control algorithm (LQR, PID, etc) will affect the type of microcontroller board that you shuold use. But, Raspberry Pi-3 should be able to do the job as Arduino is lacking in the computational power when running complex algorithm.&lt;/p&gt;&#xA;" OwnerUserId="10691" LastActivityDate="2017-06-09T08:18:17.133" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12583" PostTypeId="1" AcceptedAnswerId="14243" CreationDate="2017-06-09T11:53:35.123" Score="2" ViewCount="652" Body="&lt;p&gt;I have a servo motor (&lt;a href=&quot;http://robokits.download/documentation/RMCS220x_DCServo_Driver.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://robokits.download/documentation/RMCS220x_DCServo_Driver.pdf&lt;/a&gt;). I wrote a code in Arduino to rotate it in some defined angles and position. Code is given below:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;SoftwareSerial.h&amp;gt;&#xA;// software serial #1: RX = digital pin 10, TX = digital pin 11&#xA;// I have Arduino Uno so I created extra RX and TX to send and receive data. &#xA;// Becuase using inbuilt RX0 and TX0, I was unable to transfer data to motor &#xA;// and get feedack in PC&#xA;SoftwareSerial serial1(10, 11); &#xA;&#xA;void setup()&#xA;{&#xA;  Serial.begin(9600);&#xA;  serial1.begin(9600);&#xA;}&#xA;&#xA;void loop()&#xA;{&#xA;&#xA;  if (Serial.available() &amp;gt; 0)&#xA;  {&#xA;    delay(5);&#xA;    serial1.println(Serial.readString());&#xA;  }&#xA;&#xA;&#xA;  if (serial1.available() &amp;gt; 0)&#xA;  {&#xA;    delay(5);&#xA;    Serial.println(serial1.readString());&#xA;    delay(5);&#xA;  }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Using this code what I am able to do is, in terminal I enter some value say &quot;&lt;em&gt;G400&lt;/em&gt;&quot; or &quot;&lt;em&gt;R821&lt;/em&gt;&quot; etc. and motor rotate accordingly. But, this is not my aim. I don't want to put values manually, instead I used matlab script which give me some angle after calculations. I have to send this value to motor. Say, after calculations, matlab gives 26.4 degree, then I have input value to motor &lt;em&gt;26.4/0.2 = 132&lt;/em&gt; counts i.e. &quot;&lt;em&gt;G132&lt;/em&gt;&quot;. Value changes every time for next calculation it may be 40 degree. What should be the  coding for this in Arduino as well as in MATLAB. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="14024" LastEditorUserId="14024" LastEditDate="2017-09-18T04:33:00.660" LastActivityDate="2017-09-18T04:33:00.660" Title="Driving Rhino DC servo motor using Arduino through commands sending from MATLAB" Tags="&lt;arduino&gt;&lt;matlab&gt;&lt;servomotor&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="12584" PostTypeId="1" CreationDate="2017-06-09T12:35:02.940" Score="1" ViewCount="1029" Body="&lt;p&gt;I'm a beginner in controls system, so if there is a nice tutorial on this, please let me know. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a Simulink model like the following:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/us9lk.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/us9lk.png&quot; alt=&quot;Simulink model&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It takes roll and pitch commands and output velocities and positions. I want to create a PD controller so that the quadcopter in the simulation can move in a 10x10 meter shaped square(starting from bottom left corner) in a clock-wise direction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not sure how to go about this so I've been watching &lt;a href=&quot;https://www.coursera.org/instructor/~14347503&quot; rel=&quot;nofollow noreferrer&quot;&gt;Vijay Kumar&lt;/a&gt;'s &lt;a href=&quot;https://www.coursera.org/learn/robotics-flight&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ariel Robotics lectures&lt;/a&gt; on Coursera and it seems like I need to create desired position, velocity, and acceleration at every time step which I think I can do (make a trapezoidal velocity profile and compute the rest). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then Kumar talks about a nested control structure where there are two controllers: a position controller that takes in the desired position, velocity, and acceleration; and there is attitude controller which I believe is the one I have. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is how do I create a position controller? And is the position controller the one that converts my desired position,velocity, and acceleration into a roll/pitch command?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2Xxr1.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2Xxr1.png&quot; alt=&quot;Position controller&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15801" LastEditorUserId="9176" LastEditDate="2017-06-11T04:55:38.890" LastActivityDate="2017-09-28T17:09:35.443" Title="2D quadcopter simulation position controller and PD controller" Tags="&lt;quadcopter&gt;&lt;pid&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12585" PostTypeId="1" AcceptedAnswerId="14863" CreationDate="2017-06-09T15:31:20.657" Score="2" ViewCount="41" Body="&lt;p&gt;Anyone know of sample Python code, or a tutorial, on the polar coordinate math for recognizing that three ultrasonic distance readings form a straight line?&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Deg  Distance&#xA;&#xA;-10°  20 cm  &#xA;  0°  18 cm&#xA;+10°  16 cm&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Once I understand the math, I'll have to deal with the lack of precision.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want my bot to recognize a wall, and eventually recognize a corner.&lt;/p&gt;&#xA;" OwnerUserId="10195" LastEditorUserId="9176" LastEditDate="2017-06-09T18:04:45.820" LastActivityDate="2017-12-26T19:28:57.247" Title="Recognizing a line from three r-theta ultrasonic distance readings?" Tags="&lt;ultrasonic-sensors&gt;&lt;geometry&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12586" PostTypeId="1" AcceptedAnswerId="12609" CreationDate="2017-06-10T05:38:25.387" Score="2" ViewCount="214" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/NK3Dt.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/NK3Dt.jpg&quot; alt=&quot;Rubik&amp;#39;s Cube Robot&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am trying to the read the quadrature encoder on a &lt;a href=&quot;https://www.servocity.com/624-rpm-premium-planetary-gear-motor-w-encoder&quot; rel=&quot;nofollow noreferrer&quot;&gt;ServoCity 624 RPM Premium Planetary Gear Motor w/Encoder&lt;/a&gt; with a SparkFun ESP32 Thing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am supposed to see 228 counts per revolution, but I see 230-232 instead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is my Arduino code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;// Global variables modified by ISR&#xA;int state;&#xA;unsigned int count;&#xA;&#xA;int error;&#xA;&#xA;// ISR called on both edge of quadrature signals&#xA;void handleInterrupt()&#xA;{&#xA;  // Shift old state into higher bits&#xA;  state = ( state &amp;lt;&amp;lt; 2 ) &amp;amp; 15;&#xA;&#xA;  // Get current state&#xA;  if( digitalRead(34) ) state |= 2;&#xA;  if( digitalRead(35) ) state |= 1;&#xA;&#xA;  // Check state change for forward or backward quadrature&#xA;  // Flag any state change errors&#xA;  switch( state )&#xA;  {&#xA;    case 1:&#xA;    case 7:&#xA;    case 14:&#xA;    case 8:&#xA;      count--;&#xA;      break;&#xA;    case 11:&#xA;    case 13:&#xA;    case 4:&#xA;    case 2:&#xA;      count++;&#xA;      break;&#xA;    default:&#xA;      error++;&#xA;  }&#xA;}&#xA;&#xA;void setup()&#xA;{&#xA;  pinMode(33, OUTPUT); // PWM&#xA;  pinMode(32, OUTPUT); // DIR&#xA;&#xA;  pinMode(34, INPUT_PULLUP); // QB&#xA;  pinMode(35, INPUT_PULLUP); // QA&#xA;&#xA;  attachInterrupt( digitalPinToInterrupt(34), handleInterrupt, CHANGE );&#xA;  attachInterrupt( digitalPinToInterrupt(35), handleInterrupt, CHANGE );&#xA;&#xA;  Serial.begin(74880);&#xA;}&#xA;&#xA;void loop()&#xA;{&#xA;  int new_state;&#xA;  int old_state;&#xA;&#xA;  // Start motor&#xA;  digitalWrite(32, HIGH); // clockwise&#xA;  digitalWrite(33, HIGH);&#xA;&#xA;  // 57*4-17 found by trial and error to make a complete revolution&#xA;  for( int i = 0; i &amp;lt; (57*4-17); i++ )&#xA;  {&#xA;    // Busy wait for change&#xA;    do&#xA;    {&#xA;      // Get current state&#xA;      new_state = 0;&#xA;      if( digitalRead(34) ) new_state |= 2;&#xA;      if( digitalRead(35) ) new_state |= 1;&#xA;    }&#xA;    while( old_state == new_state );&#xA;    old_state = new_state;&#xA;  }&#xA;&#xA;  // Stop motor&#xA;  digitalWrite(33, LOW);&#xA;  delay( 1000 );&#xA;&#xA;  Serial.print( &quot; state=&quot; );&#xA;  Serial.print( state );&#xA;  Serial.print( &quot; count=&quot; );&#xA;  Serial.print( count % 228 );&#xA;  Serial.print( &quot; error=&quot; );&#xA;  Serial.println( error );&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;On my scope, quadrature signals are very clean&lt;/li&gt;&#xA;&lt;li&gt;I instrumented the code to look at interrupts and they appear to be in the right places and not too close together.&lt;/li&gt;&#xA;&lt;li&gt;I don't see mechanical slipping, and it would be obvious because&#xA;over 100 revs, the count slips an entire revolution.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;But the bottom line is: How can this be failing?  If the CPU is missing transitions, I would get illegal transitions and errors.  Noise would also cause errors.  But I am not getting any errors at all (except a single error at startup).&lt;/p&gt;&#xA;" OwnerUserId="17232" LastEditorUserId="9176" LastEditDate="2017-06-10T08:04:12.633" LastActivityDate="2017-06-13T21:22:37.260" Title="How can reading a quadrature encoder fail?" Tags="&lt;quadrature-encoder&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="12588" PostTypeId="2" ParentId="10642" CreationDate="2017-06-10T07:09:21.703" Score="1" Body="&lt;p&gt;An accelerometer triad measures the non-field specific force vector ($\mathbf{f}$) at it's location. If it is located at the centre of mass of the body, it will measure &#xA;$$&#xA;\mathbf{f} = \mathbf{\dot{v}} - \mathbf{g}&#xA;$$&#xA;where $\mathbf{\dot{v}}$ is the translational acceleration of the body and $\mathbf{g}$ is the acceleration due to gravity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To be able to measure angular acceleration around the centre of mass, the accelerometer triad needs to be displaced a distance $\mathbf{\rho}$ from the centre of mass.  In that case it will measure &#xA;$$&#xA;\mathbf{f'} = \mathbf{f} + \mathbf{\dot{\omega}\times\rho} +\mathbf{\omega\times}(\mathbf{\omega\times\rho}) &#xA;$$&#xA;where $\mathbf{\omega}$ is the angular velocity of the body.  So, to be able to use the accelerometer to (indirectly) measure angular acceleration, you will need to measure the acceleration of the centre of mass as well.  This can be done by having two accelerometer triads mounted to the body.  Then, you have to solve the equation given above to obtain $\mathbf{\dot{\omega}}$ and integrate it to obtain $\mathbf{\omega}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Gyroscopes do drift, yes.  But accelerometers also have biases, they are very noisy, and will also measure vibrations in your system.  These biases and noises will, of course, be integrated. &lt;/p&gt;&#xA;" OwnerUserId="13926" LastActivityDate="2017-06-10T07:09:21.703" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12589" PostTypeId="1" CreationDate="2017-06-10T10:00:22.307" Score="3" ViewCount="460" Body="&lt;p&gt;I designed a mobile robot with my colleagues for our graduation project, the purpose of it is to detect mines (metals) in a specific area&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We are programming the robot using Python on Raspberry Pi 3&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want it to avoid obstacles using the Pi camera, is that possible through computer vision?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I searched a lot but I can't find a full reference that guides me to do it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it is too hard we'll use an ultrasonic sensor but can it, at least, make a graphical updated map, that marks the position of mines and obstacles on it?&lt;/p&gt;&#xA;" OwnerUserId="17236" LastEditorUserId="9176" LastEditDate="2017-06-15T04:16:05.463" LastActivityDate="2017-06-15T04:16:05.463" Title="Obstacle avoiding by Pi camera" Tags="&lt;mobile-robot&gt;&lt;raspberry-pi&gt;&lt;mapping&gt;&lt;python&gt;&lt;opencv&gt;" AnswerCount="0" CommentCount="3" FavoriteCount="2" ClosedDate="2017-06-12T16:09:42.167" ContentLicense="CC BY-SA 3.0" />
  <row Id="12591" PostTypeId="2" ParentId="10642" CreationDate="2017-06-10T15:37:58.043" Score="1" Body="&lt;p&gt;Accelerometers (not gyroscopes) are by far the most common way of &lt;a href=&quot;https://www.digikey.com/en/articles/techzone/2011/may/using-an-accelerometer-for-inclination-sensing&quot; rel=&quot;nofollow noreferrer&quot;&gt;sensing inclination&lt;/a&gt;, in other words the rotation angle relative to &quot;down&quot;, and adjusting the mobile phone screen and camera to &quot;portrait mode&quot; or &quot;landscape mode&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unlike gyroscopes, this method of measuring pitch and roll generally does not have long-term drift (although it often does have a lot of short-term errors).&lt;/p&gt;&#xA;" OwnerUserId="187" LastActivityDate="2017-06-10T15:37:58.043" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12592" PostTypeId="1" CreationDate="2017-06-10T19:01:16.970" Score="1" ViewCount="736" Body="&lt;p&gt;I am currently working at a project involving a heavy disc rotating around its center. The disc weights around 2&amp;nbsp;kg and has a radius of 0,25&amp;nbsp;m. At every angle &amp;pi;/6, there exists smaller discs of masses from range 0,1&amp;nbsp;kg to 1&amp;nbsp;kg 0,15 m from the center. The radius for these are 0,05&amp;nbsp;m.&#xA;A picture to illustrate:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/RezPH.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/RezPH.png&quot; alt=&quot;2D-view of the rotating disc&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have roughly calculated the moment of inertia when all smaller discs weight 1&amp;nbsp;kg. Using the formula for a circular plate and Steiner's theorem, the result is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ Inertia = \frac{0,25^2}{2} + 12(\frac{0,05^2}{4} + 0,15^2) = 0,34 kgm^2$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I want the disc to be able to spin and stop at these specific angles. Say for instance I want the disc to rotate from 0 to &amp;pi;. This means I need a precise way to control my disc. My plan is to use a servo and some gears to drive this. I need the disc to turn 180° in at least 3 seconds (preferably less). With this angular velocity and inertia, I have realized it might not be the easiest thing to stop this spinning wheel, let alone accelerate it. Here is another image:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/kb4iB.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kb4iB.png&quot; alt=&quot;3D-image of the disc&quot;&gt;&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The motor does not need to be positioned like that, it would also be possible to drive the disc by positioning the motor on the edge of the disc for example.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What kind of motor should I be looking for, how would I handle stopping the disc? I am looking for general tips on how to accomplish this.&lt;/p&gt;&#xA;" OwnerUserId="17238" LastEditorUserId="9176" LastEditDate="2017-06-11T02:03:16.473" LastActivityDate="2017-06-11T02:03:16.473" Title="Starting and stopping a heavy rotating disc" Tags="&lt;motor&gt;&lt;torque&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12593" PostTypeId="2" ParentId="12592" CreationDate="2017-06-10T20:50:42.933" Score="1" Body="&lt;p&gt;Some of the issues here are the same as in &lt;a href=&quot;https://robotics.stackexchange.com/q/4713&quot;&gt;&lt;em&gt;Rotate (and stop) a large disk in very tiny increments&lt;/em&gt;&lt;/a&gt;, and some are different.  See the second answer there for drawings of one possible arrangement of the motor driving the plate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think it would make sense to use parts that now are widely used for 3D printer axis motion, such as &lt;a href=&quot;http://www.mosaic-industries.com/embedded-systems/microcontroller-projects/stepper-motors/specifications&quot; rel=&quot;nofollow noreferrer&quot;&gt;Nema 17 stepper motors&lt;/a&gt;, encoders, timing-belt pullies / sprockets, and timing belts or timing belt material.  If a timing belt wraps around the 25-cm disk and then is driven by a 1-cm timing-belt pulley flanked by two tension idlers, the 25:1 mechanical reduction drops the required motor torque into the range that Nema 17 stepper motors can handle while running at a speed high enough to meet your requirements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Such motors can run at 6000 to 7000 half-steps per second when providing 0.03 Nm torque.  (See, for example, the &quot;Pull out Torque Curve&quot; diagram in &lt;a href=&quot;https://cdn-shop.adafruit.com/product-files/324/C140-A+datasheet.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;C140-A+datasheet.jpg&lt;/a&gt; at adafruit.com.)  This is 900 to 1050 RPM, somewhat above the necessary 250 RPM stepper speed to rotate the large disk half a turn in 3 seconds, which is 10 RPM.  (Ie, 10 RPM = (0.5/3 RPS)*60 S/M.)  The required torque at the stepper appears to be just under 0.03 Nm, as follows:  For the large disk, &lt;em&gt;τ = Ia&lt;/em&gt;, where &lt;em&gt;τ&lt;/em&gt; is torque, in Nm;  &lt;em&gt;I&lt;/em&gt; is moment of inertia, listed in the question as 0.34 kg m&lt;sup&gt;2&lt;/sup&gt;; and &lt;em&gt;a&lt;/em&gt; is angular acceleration.  Here, the required angular acceleration is positive for 1.5 seconds and negative for 1.5 seconds, assuming the disk is at rest, moves, and is again at rest.  Moving π radians in 3 seconds from rest to rest is π/3 radians per second net, via sustained accelerations of ±2π/3 radians per second&lt;sup&gt;2&lt;/sup&gt;.  Thus &lt;em&gt;τ&lt;/em&gt; = 0.34 kg m&lt;sup&gt;2&lt;/sup&gt; * 2π/3 /s&lt;sup&gt;2&lt;/sup&gt; = 0.712 Nm.  Divided by 25, this is 0.028 Nm. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note, running the stepper motor at a given angular-acceleration rate implies accelerating and decelerating it, vs immediately starting it out at 250 RPM.  That is, you would start out sending a fairly slow train of pulses to the stepper; during 1.5 seconds increase to maximum rate of 500 RPM; then for 1.5 seconds decrease the pulse rate back to zero.  Without stepper acceleration and deceleration, you risk losing pulses, which would lead to inaccuracy, due to exceeding stepper motor torque limits.  &lt;sub&gt;&lt;sup&gt;[&lt;em&gt;Note:&lt;/em&gt; edit 1 revised this paragraph]&lt;/sup&gt;&lt;/sub&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note, it would make sense to have an encoder attached to the large wheel, to track its position rather than depending on open-loop operation of the stepping system.&lt;/p&gt;&#xA;" OwnerUserId="478" LastEditorUserId="478" LastEditDate="2017-06-10T21:54:25.443" LastActivityDate="2017-06-10T21:54:25.443" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12594" PostTypeId="2" ParentId="12447" CreationDate="2017-06-10T21:25:00.310" Score="1" Body="&lt;p&gt;You only have to do simple calculations. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;We have done it with different hardware: first with a Lego mindstorm to prototype and then with a powerfull myRIO. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The hardware used:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Prototype: &lt;a href=&quot;https://youtu.be/8T92fWLFEiI&quot; rel=&quot;nofollow noreferrer&quot;&gt;Balancing on four wheels&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Final device: &lt;a href=&quot;https://youtu.be/3lb_8nmy90c&quot; rel=&quot;nofollow noreferrer&quot;&gt;Scalevo - The Stairclimbing Wheelchair - ETH Zurich&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="11885" LastEditorUserId="9176" LastEditDate="2017-06-11T02:05:35.597" LastActivityDate="2017-06-11T02:05:35.597" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12595" PostTypeId="1" CreationDate="2017-06-10T21:41:20.613" Score="1" ViewCount="407" Body="&lt;p&gt;I need to find a linear actuator that can extend to multiple times it's length. I am going to be fixing the actuator horizontally and it will carry a light vertical load. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So far I have thought of using something similar to the mechanism in a scissor lift. However, this is intended for a CNC application and needs high precision, and I'm not sure a scissor lift design would be rigid enough vertically when place horizontal. The system will eventually be feedback controlled so some give can be tolerated. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there something other than a scissor lift design that would be better suited to this application?&lt;/p&gt;&#xA;" OwnerUserId="14845" LastEditorUserId="9176" LastEditDate="2017-06-11T02:06:17.777" LastActivityDate="2017-10-09T05:02:05.747" Title="Telescoping linear actuator" Tags="&lt;motor&gt;&lt;actuator&gt;&lt;cnc&gt;" AnswerCount="1" CommentCount="3" ClosedDate="2017-10-10T18:16:45.930" ContentLicense="CC BY-SA 3.0" />
  <row Id="12596" PostTypeId="2" ParentId="12595" CreationDate="2017-06-10T22:10:30.310" Score="0" Body="&lt;p&gt;You could use a linear motor like this one we use on our wheelchair(to push the seat up):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://youtu.be/3lb_8nmy90c&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://youtu.be/3lb_8nmy90c&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thouse motors are calles lamba motors and are made from phoenix mecano.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The have smaller and bigger one, the new version of the wheelchair has 1 stronger one. &lt;/p&gt;&#xA;" OwnerUserId="11885" LastActivityDate="2017-06-10T22:10:30.310" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12597" PostTypeId="1" AcceptedAnswerId="12599" CreationDate="2017-06-12T02:52:21.330" Score="1" ViewCount="345" Body="&lt;p&gt;I'm studying the Technical Report of VINS-Mono: A Robust and Versatile Monocular Visual-Inertial State Estimator available at: &lt;a href=&quot;https://github.com/HKUST-Aerial-Robotics/VINS-Mono/blob/master/support_files/paper/tro_technical_report.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/HKUST-Aerial-Robotics/VINS-Mono/blob/master/support_files/paper/tro_technical_report.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In section V, where Loop Closure is discussed is writen:&#xA;&quot;The IMU measurements render roll and pitch angle fully&#xA;observable, so the accumulated drift only occurs in four&#xA;degrees-of-freedom (x, y, z and yaw angle). To avoid importing&#xA;spurious information, we directly optimize pose graph on these&#xA;four degrees-of-freedom.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm having trouble to understand this, in my conception, imu noise should propagate in all degrees of freedom. This might have something to do with the gravity vector?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank You All&lt;/p&gt;&#xA;" OwnerUserId="15119" LastActivityDate="2017-06-12T06:55:27.770" Title="Why the IMU measurements only accumulate drift in 4DOF" Tags="&lt;slam&gt;&lt;imu&gt;&lt;odometry&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12598" PostTypeId="2" ParentId="8480" CreationDate="2017-06-12T03:25:12.500" Score="-3" Body="&lt;p&gt;Sr. no  Point of Difference Feedback control system Feed Forward Control system:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Definition  &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Systems in which corrective action is taken after disturbances affect the output &lt;/li&gt;&#xA;&lt;li&gt;Systems in which corrective action is taken before disturbances affect the output&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Necessary requirement   &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Not required &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Measurable Disturbance or noise&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Corrective action   &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Corrective action taken after the disturbance occurs on the output.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Corrective action taken before the actual disturbance occurs on the output.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Block Diagram   &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;enter image description here &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;enter image description here&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Control Variable adjustment &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Variables are adjusted depending on errors.  &lt;/li&gt;&#xA;&lt;li&gt;Variables are adjusted based on prior knowledge and predictions.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Example &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Use of roll sensor as feedback element in ship stabilization system.&lt;/li&gt;&#xA;&lt;li&gt;Use of flowmeter as feed forward block in temperature control systems.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="17243" LastEditorUserId="9176" LastEditDate="2017-06-12T05:15:50.577" LastActivityDate="2017-06-12T05:15:50.577" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12599" PostTypeId="2" ParentId="12597" CreationDate="2017-06-12T06:55:27.770" Score="2" Body="&lt;p&gt;Correct, it's all about the gravity vector. I would argue that it is NOT necessarily possible to get the gravity vector out of the measurement, but that's because it's possible to put the IMU in a constant acceleration state that would skew the gravity vector (i.e. a rotation). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Check out Sebastian Madgwick's paper on IMU filtering. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically, if it's level, z-axis reads gravity and x- and y-axes read zero. As you tilt the IMU, the gravity vector projects onto the associated axis. Gravity is a constant (hand waving) so you know the input vector (0;0;g), the output vector, and you solve for the rotation matrix that gives you the roll and pitch values. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The trouble is that gravity isn't the same everywhere, may slowly shift over time (tidal motion), and it's not possible to discern gravitational acceleration from external acceleration. The solution seems to be to normalize the accelerometer outputs and change the input vector from (0;0;g) to (0;0;1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This means that you wind up skewing the gravitational vector's orientation, but the effects seem to be minimal with regards to orientation. I haven't tried on a rotating platform though. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-06-12T06:55:27.770" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12601" PostTypeId="2" ParentId="12580" CreationDate="2017-06-12T17:50:55.890" Score="1" Body="&lt;p&gt;First, it's important to note that depending on your problem specifications, we may not know of any good algorithms to solve it - this is especially true when you start to add in more problem constraints. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are three levels of abstraction here - your question primarily deals with the highest level, but FLYAQ covers all three so I include them here as well.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;High level: Task assignment and ordering&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Given a list of tasks, constraints, and costs, we first find the best set of ordered sets of waypoints for each robot in your team respects the constraints. This is generally called the &quot;vehicle routing problem&quot;, and has &lt;em&gt;many&lt;/em&gt; variants. One open source software is  &lt;a href=&quot;https://www.optaplanner.org/learn/useCases/vehicleRoutingProblem.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;OptaPlanner&lt;/a&gt;. The &lt;a href=&quot;http://dev.heuristiclab.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;HeuristicLab&lt;/a&gt; also has an impressively mature software stack for these problems. You could also consider solving these problems using a linear program solver such as &lt;a href=&quot;http://www.gurobi.com&quot; rel=&quot;nofollow noreferrer&quot;&gt;Gurobi&lt;/a&gt; or &lt;a href=&quot;http://www.gurobi.com/resources/switching-to-gurobi/open-source-solvers-2&quot; rel=&quot;nofollow noreferrer&quot;&gt;open source alternatives&lt;/a&gt;. If you have a more specific problem in mind, create another question and I'll post an answer (this is my area of research).&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Mid-level: Trajectory planning&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Once a robots has been assigned an ordered set of waypoints to visit, it still needs to decide how to connect the dots. Depending on your hardware this might already be abstracted away (e.g. with MotionPlanner and Ardu* planners). If you need to solve this problem, there are a few very good libraries for this, such as &lt;a href=&quot;http://www.ros.org/news/2011/01/open-motion-planning-library-ompl-released.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Open Motion Planning Library&lt;/a&gt; and &lt;a href=&quot;http://drake.mit.edu/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Drake&lt;/a&gt;. The output of this layer is typically a polynomial or spline representation of a trajectory that is guaranteed to be collision free. &lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Low level: Rate control&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;At the lowest level the robot needs to translate a desired trajectory into rate commands for its actuators. This is entirely dependent on your hardware platform, and is often abstracted away. If you already have hardware, then see if a google search yields an example of how to go from a waypoint list or trajectory to rate commands. &lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Putting everything together&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;A typical software set-up will separate each level of abstraction into different applications, since they run at different rates (typically high level is ~0.1-1Hz, mid level is 1-10Hz, low level is 10-100Hz). One very popular middleware is the &lt;a href=&quot;http://www.ros.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Robot Operating System&lt;/a&gt;, which has an active community and many tutorials. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This answer is vague by necessity - your question covers a range of topics which has thousands of published work on. If you have a more specific problem or abstraction layer in mind, there are definitely more specific answers available.&lt;/p&gt;&#xA;" OwnerUserId="16134" LastActivityDate="2017-06-12T17:50:55.890" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12602" PostTypeId="1" AcceptedAnswerId="12605" CreationDate="2017-06-12T18:41:24.210" Score="1" ViewCount="64" Body="&lt;p&gt;I am learning how to make rigs for high speed motion control. Basically, whatever action needs to be executed must be done by a rig that is triggered at an exact moment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this particular case, I need something that pulls out extremely fast, so that the element that is on top falls without any alteration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In these two pictures I've highlighted the rig that is being used:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/WVTwHm.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/WVTwHm.jpg&quot; alt=&quot;This is the rig before being triggered&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/6sz6em.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6sz6em.jpg&quot; alt=&quot;And this is after being triggered&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Zoomed in on the relevant sections:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/wENtx.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wENtx.jpg&quot; alt=&quot;Before and after, side by side.&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This action happens in 1/2 a second, give or take. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the motor capable of pulling out that fast, without altering the object on top? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this case the burger bun falls intact, it lands perfectly.&lt;/p&gt;&#xA;" OwnerUserId="17247" LastEditorUserId="37" LastEditDate="2017-06-13T10:11:47.770" LastActivityDate="2017-06-13T11:37:13.390" Title="I need help figuring out what motor is used in this design" Tags="&lt;motor&gt;&lt;kinematics&gt;&lt;mechanism&gt;&lt;identification&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12604" PostTypeId="1" CreationDate="2017-06-12T22:46:17.913" Score="2" ViewCount="282" Body="&lt;p&gt;I'm trying to obtain the dynamics of a 6DOF robot. Firstly, I calculated the combined centres of mass (between each link and the respective actuator) in order to calculate the gravity term, since it only depends on the combined centre of mass the the angles of the joints (Yes, I know there's another way which basically takes into account the centre of mass of the links and the actuators, but I just didn't follow that path). My calculations are correct since the robot is effectively compensating the gravity, but now I want to calculate the remaining terms (mass and coriolis).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since I have the combined centre of mass between each &quot;system&quot; (link + actuator), and the datasheet of this robot only gives me the Inertia tensors at the center of mass of each part, I need to know the equivalent inertia tensor in the &quot;new&quot; centre of mass (the combined one).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, I've done my research and found little information on the web about this. I did found out that I could probably follow the parallel axis theorem, but I've seen people saying that it is based on the premise that the object is planar (which means it would only be applied to 2D objects). My question is: can I apply this theorem in 3D? If so, please explain to me what exactly do I have to do, and if not, what other options I have to follow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let me know if you understood what I'm after and thanks in advance.&lt;/p&gt;&#xA;" OwnerUserId="16543" LastActivityDate="2017-06-12T22:46:17.913" Title="Inertia Tensors in 3D objects for robot dynamics" Tags="&lt;robotic-arm&gt;&lt;dynamics&gt;" AnswerCount="0" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12605" PostTypeId="2" ParentId="12602" CreationDate="2017-06-13T10:57:42.577" Score="2" Body="&lt;p&gt;This looks to me like a &lt;a href=&quot;https://en.wikipedia.org/wiki/Linear_actuator#Pneumatic_actuators&quot; rel=&quot;nofollow noreferrer&quot;&gt;linear pneumatic actuator&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pneumatic cylinders can be very fast acting, depending on the air pressure on hand, but they can be hard to control at any position other than their end stops, so they are usually used to switch between a limited number of fixed positions. Although the actuators themselves can be small, they require significant infrastructure to run (air compressors, filters, pipes, valves, pressure gauges &amp;amp; limiters etc.).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pneumatic cylinders are typically single or double acting:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/File:Einfachwirkender_Zylinder_funktionsprinziep.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/WkNN4.gif&quot; alt=&quot;Single acting pneumatic cylinder animation&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://en.wikipedia.org/wiki/File:Doppelwirkender_Zylinder_Funktionsprinziep.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/nWz7M.gif&quot; alt=&quot;Double acting pneumatic cylinder animation&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Simple pneumatic actuators have valves which direct either atmospheric pressure, or pressurised air into the cylinder, so you might have one pneumatic &lt;a href=&quot;https://en.wikipedia.org/wiki/Solenoid_valve&quot; rel=&quot;nofollow noreferrer&quot;&gt;solenoid valve&lt;/a&gt; for a single acting cylinder, while for a double acting cylinder you might have two pneumatic solenoid valves or a single three-way value depending on whether you want to &lt;a href=&quot;https://www.festo.com/wiki/en/Cylinder_actuation#Moving_pneumatic_cylinders_more_quickly&quot; rel=&quot;nofollow noreferrer&quot;&gt;pre-exhaust for faster actuation&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;To answer the other part of your question. This system basically performs the &lt;a href=&quot;https://www.stevespanglerscience.com/lab/experiments/trick-with-tablecloth/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Tabelcloth Trick&lt;/a&gt; with a burger bun. All you really need is for the mass of the bun, and thus it's inertia, to be high enough that it stays in place against the friction of the mechanism which hold it, for the time it takes for that mechanism to get out of the way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The higher the &lt;a href=&quot;https://en.wikipedia.org/wiki/Jerk_(physics)&quot; rel=&quot;nofollow noreferrer&quot;&gt;jolt (or jerk)&lt;/a&gt; of the move, the more likely it is that the &lt;a href=&quot;https://en.wikipedia.org/wiki/Friction&quot; rel=&quot;nofollow noreferrer&quot;&gt;kinetic friction&lt;/a&gt; will dominate over the (usually higer) &lt;a href=&quot;https://en.wikipedia.org/wiki/Stiction&quot; rel=&quot;nofollow noreferrer&quot;&gt;stiction (static friction)&lt;/a&gt;, and a pneumatic actuator with no flow limiter has the potential to have quite a high jolt coefficient.&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="37" LastEditDate="2017-06-13T11:37:13.390" LastActivityDate="2017-06-13T11:37:13.390" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12606" PostTypeId="1" CreationDate="2017-06-13T15:59:59.113" Score="1" ViewCount="68" Body="&lt;p&gt;I am a programmer with a lot of experience in IoT but somewhat new to actuators and robotics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to create a &quot;Cable Car&quot; which consists of two stepper motors and a pulley. The motors would be located one next to the other, and the pulley on the opposite wall. Each stepper motor would have a spool and be connected with fishing wire. In the middle would be a styrofoam boat. The idea would be to move the boat along the wire from one wall to another based on different metrics and calculations. Ideally it will travel from one end to the other in a months time and in slow increments.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Diagram using ASCII:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;&#xA;|___________________|&#xA;|x                 o|&#xA;|x_________________o|&#xA;|      |  |         |&#xA;|  &amp;lt;-- BOAT --&amp;gt;     |&#xA;|                   |&#xA;|                   |&#xA;x = stepper motor&#xA;o = pulley&#xA;_ = fishing wire (starts at top motor, goes to pulley(s), continues and ends at bottom motor)&#xA;| = wall&#xA;&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is: What type of stepper motors should and controller should I use? I estimate that the wire + the styrofoam boat will not weigh more than 3 pounds total. It will it hang at a height of 10 feet from the floor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am hoping to achieve this with a Rasperry Pi I have lying around.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am confused about various torque requirements, voltage &amp;amp; amperage ratings etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If someone has a recommendation for hardware I would be extremely grateful.&lt;/p&gt;&#xA;" OwnerUserId="17250" LastEditorUserId="9176" LastEditDate="2017-06-14T01:21:06.207" LastActivityDate="2017-06-14T01:21:06.207" Title="Stepper Motor For &quot;Cable Car&quot; System" Tags="&lt;raspberry-pi&gt;&lt;stepper-motor&gt;&lt;stepper-driver&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12607" PostTypeId="2" ParentId="2754" CreationDate="2017-06-13T16:55:33.097" Score="0" Body="&lt;p&gt;&lt;strong&gt;&lt;em&gt;Linear servo actuator&lt;/em&gt;&lt;/strong&gt;, combined with a &lt;strong&gt;&lt;em&gt;load-cell&lt;/em&gt;&lt;/strong&gt;, inline, to measure the load that is transferred between the actuator and the load that it is connected to. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main advantage of a load cell is that it gives analog output (voltage) that can be sensed. They don't require bridges to convert weak signals to senseable signals as do the strain gauges.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This combination is used for advanced robots, that have to be rapid for better control and also especially for back-driving the robot's manipulators.&lt;/p&gt;&#xA;" OwnerUserId="9570" LastActivityDate="2017-06-13T16:55:33.097" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12609" PostTypeId="2" ParentId="12586" CreationDate="2017-06-13T21:22:37.260" Score="1" Body="&lt;p&gt;ServoCity 624 RPM Premium Planetary Gear Motor w/Encoder has the encoder on the motor and a 19:1 gear reduction on the output shaft.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mechanical tolerance in the gearbox accounts for the difference between 228 counts per revolution that I expected and 230.7 counts per revolution that I measured.&lt;/p&gt;&#xA;" OwnerUserId="17232" LastActivityDate="2017-06-13T21:22:37.260" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12610" PostTypeId="1" AcceptedAnswerId="12628" CreationDate="2017-06-13T21:43:01.343" Score="3" ViewCount="719" Body="&lt;p&gt;I'm are going to create a LQR to control a system. The problem is to choose the Q and R weighting matrices for the cost function. The Q and R matrices are going to minimize the cost function so the system are going to be optimal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm using Scilab and Scilab have a good library for optimal control. Scilab have a built function named &lt;code&gt;lqr()&lt;/code&gt; to compute the gain matrix K, which is the LQ regulator. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the problem is still to choose those weighting matrices. I don't know here to start. I just might start with the identity matrix as Q and just a constant as R. But the gain matrix K does not make my model go smooth. No one can say that this is the real Q and R weighting matrices for the system. As a developer, I choose the weighting matrices. But why should I do that when I can choose the K gain matrix directly?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I just made up my own numbers for the gain matrix K and now my model is very smooth. All I did just do was to guess some numbers for the gain matrix K and simulate and look at the result. Was it still bad, I might change the first element for the gain matrix to increase the position, or change the second element in the gain matrix K, to speed up the velocity for the position. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This works great for me! Guessing and simulate and look at the results.&#xA;I choosing the LQ-technique for two main reasons: It gives multivariable action and can reduce noise by using a kalman filter. A PID cannot do that. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;But here is my question:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Will this method give me an optimal control just by guessing the gain matrix K and changing the values depending how the simulation results looks like?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm I happy with the results, I might quit there and accept the gain matrix K as the optimal LQR for the system.&lt;/p&gt;&#xA;" OwnerUserId="17252" LastEditorUserId="9176" LastEditDate="2017-06-14T01:24:22.587" LastActivityDate="2017-06-15T23:33:58.760" Title="Guessing the K matrix gain for the Optimal Control LQR?" Tags="&lt;control&gt;&lt;pid&gt;&lt;microcontroller&gt;&lt;kalman-filter&gt;&lt;dynamics&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12615" PostTypeId="1" CreationDate="2017-06-15T00:34:00.290" Score="1" ViewCount="60" Body="&lt;p&gt;I'm trying to get a deeper understanding of the theory behind wheeled self-balancing robots. Can anyone point me to a text on dynamic modelling and control theory that might help?&lt;/p&gt;&#xA;" OwnerUserId="7820" LastEditorUserId="7820" LastEditDate="2017-06-16T11:47:59.403" LastActivityDate="2017-06-16T11:47:59.403" Title="Theory behind wheeled inverted pendulum robots" Tags="&lt;control&gt;&lt;wheeled-robot&gt;&lt;dynamics&gt;&lt;theory&gt;&lt;balance&gt;" AnswerCount="0" CommentCount="2" ClosedDate="2017-06-15T09:45:51.537" ContentLicense="CC BY-SA 3.0" />
  <row Id="12616" PostTypeId="1" CreationDate="2017-06-15T08:51:42.543" Score="4" ViewCount="905" Body="&lt;p&gt;I am currently working on a project which which involves surround view.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have 4 fish eye cameras and are fixed at 4 sides of a car.The fish eye cameras are corrected for radial distortion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After radial correction,Each camera sees a pattern in the Common FOV of adjacent camera to get the points on the ground plane.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Pattern in the common FOV of adjacent camera&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/z6CsL.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/z6CsL.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now for each camera I need to warp those points to a plane which is the birds eye view. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Right now I choose those 8 red points, map first 4 points on a square and the other 4 points on another square on the same line,since I know that both squares lie parallel to each other at some distance,for front and back images and use the same points for left and right also appropriately so that left image comes left and right image comes right of the result.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then I calculate Homography Matrix for each image(front,left,right and back) using the points in the Image and the birds eye plane.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I map the points such that warped front image sits at the top, left sits at the left side and right at the right side and then back sits at bottom of image .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Example, Front sits at the top of result image&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/OcIHK.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OcIHK.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Left sits at the Left of result image&lt;/strong&gt;&lt;a href=&quot;https://i.stack.imgur.com/6TxeV.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6TxeV.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do this so that I can stitch properly,forming a composite view.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;My final stitched image looks like below.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/pN7bN.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/pN7bN.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can see, the geometrical alignment is not proper.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;QUESTIONS&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;What is the right way of registering each image with the ground plane.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;From the object points shown as red dots, &lt;strong&gt;what is the proper way to get the corresponding points in the bird's eye plane.&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="15089" LastEditorUserId="15089" LastEditDate="2017-06-15T10:33:35.620" LastActivityDate="2018-03-06T18:14:12.120" Title="Image registration with ground plane for surround view" Tags="&lt;cameras&gt;&lt;opencv&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12617" PostTypeId="2" ParentId="12406" CreationDate="2017-06-15T09:43:45.840" Score="0" Body="&lt;p&gt;For those of you looking for How to read gyro data from MPU9255. I manage to solve it some what. Like the answer above said you need the gyro bias to be initialised. I have looped it 2000 times to get reading from gyro then averaged it to find a good value for the bias. I myself don't understand it properly why it work. But to put it blandly, to get the angular rate you simply divide it by 131 given that you are using 250 dps check the link to MPU9255 register maps sheet. Then you further divide it by your sample rate which should be 8000 by default again that is if you are using 250 dps it is also the default setting when you initialise MPU9255. I was just tinker around with the code to give me the right values and it seems to do that. I do have a problem with the drift. So if anyone can point me in the right direction. I don't know if I am implementing complementary filter the right way or not, I came across a normal filterish don't know what it's called that seems to work pretty well. However it assumes that the value from accel is absolute or it gives pretty precise. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &quot;Arduino.h&quot;&#xA;#include &amp;lt;Wire.h&amp;gt;&#xA;#include &quot;I2Cdev.h&quot;&#xA;#include &quot;MPU9250.h&quot;&#xA;&#xA;MPU9250 accelgyro;&#xA;volatile float Gxyz[3] = {0,0,0};&#xA;volatile float Axyz[3] = {0,0,0};&#xA;//raw acc, gyro, compass values&#xA;int16_t ax,ay,az,gx,gy,gz,mx,my,mz = 0;&#xA;//gyro calibration&#xA;volatile float G_cal_x,G_cal_y,G_cal_z = 0;&#xA;volatile float angle_x,d_angle_x,angle_y,d_angle_y = 0;&#xA;//accel and complimentary variables&#xA;volatile float Roll, Pitch, Roll_output, Pitch_output = 0;&#xA;//PID compute variables&#xA;volatile float Kp = 0;&#xA;volatile float Output,error,Set_point,Input_angle = 0;&#xA;&#xA;void get_gyro();&#xA;void get_accel();&#xA;void PID_compute();&#xA;&#xA;void setup()&#xA;{&#xA;  Wire.begin();&#xA;  //initialise the clock speed, gyroscope, accel,&#xA;  accelgyro.initialize();&#xA;  //serial communication begin&#xA;  for(int i = 0; i &amp;lt; 2000; i++)&#xA;     {&#xA;       get_gyro();&#xA;       G_cal_x += Gxyz[0];&#xA;       G_cal_y += Gxyz[1];&#xA;       G_cal_z += Gxyz[2];&#xA;       delay(3);&#xA;     }&#xA;  G_cal_x /= 2000;&#xA;  G_cal_y /= 2000;&#xA;  G_cal_z /= 2000;&#xA;  Serial.begin(115200);&#xA;}&#xA;&#xA;void loop()&#xA;{&#xA; //gets gyro and accelerometer values&#xA;  get_accel();&#xA;  get_gyro();&#xA;&#xA;  //gyro to roll and pitch calculation d_angle_x and d_angle_y are roll and pitch&#xA;  Gxyz[0] = Gxyz[0] - G_cal_x;&#xA;  Gxyz[1] = Gxyz[1] - G_cal_y;&#xA; //here is the sample rate and 131 value which is 0.000000954 it seem&#xA; //when you call accel function as well you need to multiply it by 2&#xA;  angle_x += Gxyz[0]*(0.000000954*2);&#xA;  angle_y += Gxyz[1]*(0.000000954*2);&#xA;&#xA;  d_angle_x = angle_x*180;&#xA;  d_angle_y = angle_y*180;&#xA;  //accel calculation&#xA;  Roll = (float)atan2(Axyz[1],Axyz[2])*(180/3.1415);&#xA;  Pitch = (float)(-atan2(-Axyz[0], sqrt((Axyz[1] * Axyz[1]) + (Axyz[2] * Axyz[2]))) * (180 / 3.1415));&#xA;  //complimentary filter&#xA;  Roll_output = 0.98*(0.1*Roll_output+0.9*d_angle_x) + 0.02*Roll;&#xA;  Pitch_output = 0.98*(0.1*Roll_output+0.9*d_angle_y) + 0.02*Pitch;&#xA;&#xA;  //Normal filter&#xA;  // Roll_output = d_angle_x + 0.75(Roll-d_angle_x);&#xA;  // Pitch_output = d_angle_y + 0.75(Pitch-d_angle_y);&#xA;&#xA;  // printing to see the values&#xA;  Serial.print(d_angle_x);&#xA;  Serial.print(&quot; &quot;);&#xA;  Serial.print(d_angle_y);&#xA;  Serial.print(&quot; &quot;);&#xA;  Serial.print(Roll_output);&#xA;  Serial.print(&quot; &quot;);&#xA;  Serial.print(Pitch_output);&#xA;  Serial.println();&#xA;}&#xA;&#xA;//initialising or getting the gyro data&#xA;void get_gyro()&#xA;{&#xA;  accelgyro.getMotion9(&amp;amp;ax,&amp;amp;ay,&amp;amp;az,&amp;amp;gx,&amp;amp;gy,&amp;amp;gz,&amp;amp;mx,&amp;amp;my,&amp;amp;mz);&#xA;  Gxyz[0] = gx;&#xA;  Gxyz[1] = gy;&#xA;  Gxyz[2] = gz;&#xA;}&#xA;&#xA;void get_accel()&#xA;{&#xA;  accelgyro.getMotion9(&amp;amp;ax,&amp;amp;ay,&amp;amp;az,&amp;amp;gx,&amp;amp;gy,&amp;amp;gz,&amp;amp;mx,&amp;amp;my,&amp;amp;mz);&#xA;  Axyz[0] = (float)ax/16384;&#xA;  Axyz[1] = (float)ay/16384;&#xA;  Axyz[2] = (float)az/16384;&#xA;}&#xA;// Proportional Intergal and differentiate&#xA;void PID_compute()&#xA;{&#xA; error = Set_point - Input_angle;&#xA; Output = Kp * error;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://stanford.edu/class/ee267/misc/MPU-9255-Register-Map.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://stanford.edu/class/ee267/misc/MPU-9255-Register-Map.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="16994" LastEditorUserId="16994" LastEditDate="2017-06-15T11:16:46.310" LastActivityDate="2017-06-15T11:16:46.310" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12618" PostTypeId="1" AcceptedAnswerId="12619" CreationDate="2017-06-15T10:13:44.790" Score="2" ViewCount="330" Body="&lt;p&gt;At every timestep my robot gets sensor measurements from a scanner that finds three beacons with known poses $B_1 = (B_{1x}, B_{1y})^T, B_2 = (B_{2x}^T, B_{2y}) , B_3 = (B_{3x}, B_{3y})^T$ these measurements include the distance and angle to the beacon, the measuremnt for $B_1$ would be $m_{1t} = (d_{it}, \omega_{1t})^T$. and equivalently for the other beacons.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From these measurements i want to calculate the robots pose containing its position and orientaion $x_t = (p_{xt}, p_{yt}, \Theta_{xt})^T$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Calculating the position can be done by trilateration, but I can't seem to find a way to get the orientation of the robot from these measurements. Is there possible a model to calculate both in a single calculation?   If not a solution for finding the orientation of the robot would be great.&lt;/p&gt;&#xA;" OwnerUserId="17266" LastEditorUserId="17266" LastEditDate="2017-06-15T10:45:22.763" LastActivityDate="2017-06-15T17:56:10.037" Title="Find the robot pose from three beacon measurement" Tags="&lt;mobile-robot&gt;&lt;localization&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12619" PostTypeId="2" ParentId="12618" CreationDate="2017-06-15T10:36:17.817" Score="1" Body="&lt;p&gt;If you have already computed the position of the robot, a single(!) angle towards a beacon is sufficient to get its orientation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The computation could look roughly like&lt;/p&gt;&#xA;&#xA;&lt;p&gt;// b1 is position of beacon1, r is computed position of robot&#xA;alpha = atan2(b1.x-r.x, b1.y-r.y)  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if the robot is looking towards east, the angle-measurement of B1 should alpha. So roughly alpha-b1.w is your robot's orientation. &lt;/p&gt;&#xA;" OwnerUserId="23196" LastActivityDate="2017-06-15T10:36:17.817" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12620" PostTypeId="1" CreationDate="2017-06-15T13:04:31.687" Score="2" ViewCount="158" Body="&lt;p&gt;We have a high-resolution Riegl laser scanner and mounted atop it a Resonon Pika L, which is a hyperspectral camera which records one spatial column at a time, using the second dimension of the sensor for the wavelength spectrum from 400 to 1000 nanometers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now we would like to label each scan point with hyperspectral data. For this, we &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;record a fixed angular window with the laser scanner&lt;/li&gt;&#xA;&lt;li&gt;stitch together the individual spatial columns from the hyperspectral camera rotating with the scanner &lt;/li&gt;&#xA;&lt;li&gt;Identify chessboard corners in the point cloud &lt;/li&gt;&#xA;&lt;li&gt;also find them in the stitched hyperspectral panorama (reduced to rgb).&lt;/li&gt;&#xA;&lt;li&gt;Using OpenCV's &lt;code&gt;calibrateCamera&lt;/code&gt; we try to get a camera matrix, which I assume will only be valid for this particular panorama size (if at all) &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;and then we could in theory obtain rotation and translation between scanner and panorama coordinates using &lt;code&gt;solvePnP&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this a valid way to go about solving this problem? There doesn't seem to be much prior art in this regard.&lt;/p&gt;&#xA;" OwnerUserId="17267" LastActivityDate="2017-09-13T21:05:18.060" Title="Calibrating a laser scanner to a line camera" Tags="&lt;mobile-robot&gt;&lt;sensor-fusion&gt;&lt;calibration&gt;&lt;laser&gt;&lt;point-cloud&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12621" PostTypeId="2" ParentId="12618" CreationDate="2017-06-15T17:05:15.117" Score="0" Body="&lt;p&gt;You cannot directly find the direction (heading) of your robot. You only can derive the triangulated x, y positions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, if you have some constraints in motion dynamics (for example if your robot only moves in its body-x direction when steering is zero) you may have a time-derivative of the position and find the velocity vector. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And if you filter the velocity and position data to an estimation algorithm (I.e. Kalman filter) you may get an accurate position and velocity in time. Naturally, it does not give a solution when the robot is stationary.&lt;/p&gt;&#xA;" OwnerUserId="9570" LastActivityDate="2017-06-15T17:05:15.117" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12622" PostTypeId="2" ParentId="12618" CreationDate="2017-06-15T17:56:10.037" Score="0" Body="&lt;p&gt;I'm not sure where you're having the trouble with this. As you mention:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Step 1&lt;/strong&gt; - Find the position of the robot by trilateration with the three beacon distances. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Step 2&lt;/strong&gt; - Find the heading of a straight line between the location you are at and any of the three beacons&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Step 3&lt;/strong&gt; - Find your heading by subtracting your local heading from the result of Step 2&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Step 4&lt;/strong&gt; - Put bounds on your heading (0-360 degrees, for example).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, for instance, say you have beacons at (x,y) positions of (1,0), (1,1), and (0,1). You trilaterate your own location to be (0,0), because the distance reading from each beacon was 1. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Great. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, you have to define what &quot;heading&quot; means to you. Is this an &quot;engineering&quot; heading, where 0 is the +x-axis and the angle goes positive counter-clockwise? Or is this a navigation heading where 0 is &quot;up&quot; (North) and the angle goes positive clockwise? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Whatever the case, let's chose to look at the beacon located at (1,0). There is a heading &lt;em&gt;from&lt;/em&gt; your location &lt;em&gt;to&lt;/em&gt; that beacon. If you're using navigation coordinates, it's 90 degrees (East).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, what is the angle of that beacon &lt;em&gt;as it appears to your robot&lt;/em&gt;? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are measuring it with an angle of zero, then that means that you are pointed directly at it, which means that your heading is the same as the heading between your point and that beacon, which means that your (navigation) heading is also 90 degrees. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Say you measure it as being at -90 degrees relative to your robot (again, on a navigation setup). If the beacon is -90 degrees relative to you, then &lt;em&gt;you&lt;/em&gt; are +90 degrees relative &lt;em&gt;to the beacon&lt;/em&gt;. This means that your heading is whatever the heading is to the beacon, &lt;em&gt;plus&lt;/em&gt; 90 degrees. That is, your robot's heading is 180 degrees (South). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should be able to do this with any of the beacons and get the same answer. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-06-15T17:56:10.037" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12623" PostTypeId="1" CreationDate="2017-06-15T18:39:59.470" Score="1" ViewCount="74" Body="&lt;p&gt;I have a 1-DOF electromechanical application whereby I am controlling the contact-force at the tip of the end-effector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The force sensor on the end-effector unfortunately gives me force data and an incredibly low sampling rate at 20 Hz, and I cannot do anything about it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I generated a linear model for my plant and determined I will probably need a sampling rate of at least 320 Hz to follow the rule of thumb (Ts is 1/10th of your time constant). With the current setup, I of course have poor disturbance rejection (i.e., when the surface moves into the end-effector) with a PI controller . &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fortunately, the wall motion is periodic and fairly predictable. I implemented a modified Smith predictor that can reject periodic disturbances. This works fairly well but I am interested in exploring other options. Is there anything else I can take a look into that may help with this situation? For instance, I was considering taking a look into implementing a Kalman filter, since I can use it to predict the next sample in the loop, which may improve performance - I am not sure if that is right. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regards,&lt;/p&gt;&#xA;" OwnerUserId="17268" LastActivityDate="2017-08-14T19:53:55.753" Title="PI with poor sampling rate" Tags="&lt;arduino&gt;&lt;pid&gt;&lt;dynamics&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12624" PostTypeId="2" ParentId="12623" CreationDate="2017-06-15T19:09:56.797" Score="1" Body="&lt;p&gt;You're really, really vague about your application, setup, hardware, etc., so I don't know that it's possible to really give any meaningful advice. Regarding the Kalman filter, you are correct in that &lt;em&gt;part&lt;/em&gt; of the filter predicts the next sample, but that's just the linearized model that you said you already have. You could &lt;a href=&quot;https://robotics.stackexchange.com/a/12576/9720&quot;&gt;propagate that model to generate filler samples&lt;/a&gt;, but again that would just be using your system model.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know what kind of a force sensor you would be using that would only output that low of a force, or what your system is, but maybe you could get (noisier) higher-frequency samples via other means, like strain gauges, shunt resistors (to measure current), etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The biggest suggestion I think I could give you would be that, if you have a system model, you switch from a PI controller to a state feedback controller. That uses a built-in linearized model of your plant to provide better control. If you have the linearized model already, then it should be pretty straightforward to generate the controller. This of course won't fix your sampling rate, but you might get better performance with a more robust controller.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-06-15T19:09:56.797" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12626" PostTypeId="2" ParentId="12620" CreationDate="2017-06-15T19:54:31.050" Score="1" Body="&lt;p&gt;I converted my comments to an actual answer:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I understand your setup correctly, you're saying you have a line scan camera mounted to the top of the rotating head of a laser scanner, and all you're looking for is the one-time transform matrix between the scanner and camera coordinate frames. Is this correct? If so, why not just perform the test in a controlled environment where the features are easy to discern? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;[The spectral camera doesn't really have] a 1d image if you have the encoder feedback from the Riegl. But yes, if you could generate a shape (easily detectable by the laser scanner) that also had some interesting spectral content (easily detectable by the hyperspectral camera), then you could compare encoder counts where the same feature were located in both systems. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As your spectral camera appears to cover the visible spectrum, you could use an exterior door (presumably the wall is one color, and outside is &quot;noisy&quot; colors), or a table, or an open window, or a or a monitor or any colored, physical object.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know if you're trying to mass produce something, but probably the easiest way to do this is just to manually align the two outputs until you have good coherence. I don't know if this is the point of what you're trying to do or not, but again you have visible spectrum data from your line camera. You could segment out the RGB information from that data, use it to texture your point cloud, and then tweak the transform values until your texture overlay &quot;fits&quot; with the depth information you've got from the laser scanner.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course if you're mass producing the thing and/or you plan on constantly re-aligning the data, then you would probably want some way to automate this, &lt;em&gt;but automation is not always the answer.&lt;/em&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It would be really neat if it could align itself, but please &lt;em&gt;please&lt;/em&gt; consider the time cost of just doing the alignment manually versus the time cost of writing a custom alignment algorithm for scratch. If you have a rigid coupling between the two sensors (your project doesn't seem to be hurting for money!!) then you shouldn't need to do the alignment more than once. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-06-15T19:54:31.050" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="12627" PostTypeId="1" AcceptedAnswerId="12629" CreationDate="2017-06-15T22:02:03.093" Score="2" ViewCount="32" Body="&lt;p&gt;I am considering competing in the robogames, but the rules require that R/C bots have  digitally-mated pairs. I am not sure what these pairs are. For reference here are the rules for robot sumo and combots.&lt;br&gt;&#xA;&lt;a href=&quot;http://robogames.net/rules/all-sumo.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;Robot Sumo Rules&lt;/a&gt;&#xA;&lt;br&gt;&#xA;&lt;a href=&quot;http://robogames.net/rules/combat.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;Combot Rules&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="17270" LastActivityDate="2017-06-16T09:54:28.763" Title="What is are digitally-mated pairs" Tags="&lt;wheeled-robot&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12628" PostTypeId="2" ParentId="12610" CreationDate="2017-06-15T23:24:25.767" Score="1" Body="&lt;p&gt;If you want to avoid having to deal with the non-uniqueness of a state space model representations of LTI systems and want to have some more control of the impact that changing $Q$ has on the resulting controller, then you could define the cost you want to minimize as&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;J(u) = \int_0^\infty\left(y^\top\!(t)\, \hat{Q}\, y(t) + u^\top\!(t)\, \hat{R}\, u(t) + 2\,y^\top\!(t)\, \hat{N}\, u(t)\right) dt.&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your state space model is of the form&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\left\{\begin{array}{l}&#xA;\dot{x} = A\, x + B\, u \\&#xA;y = C\, x + D\, u&#xA;\end{array}\right.&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;then you can rewrite the cost function into a form which can be solved with LQR as follows&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;J(u) = \int_0^\infty\left(x^\top\!(t)\, Q\, x(t) + u^\top\!(t)\, R\, u(t) + 2\,x^\top\!(t)\, N\, u(t)\right) dt,&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;with&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;Q = C^\top \hat{Q}\, C,&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;R = \hat{R} + D^\top \hat{Q}\, D + D^\top \hat{N} + \hat{N}^\top D,&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;N = C^\top \hat{N} + C^\top \hat{Q}\, D.&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now you could start with $\hat{R}$ equal identity, $\hat{N}$ equal zero and $\hat{Q}$ diagonal (with only positive numbers on the diagonal), for example identity. Now by doing a simulation of your closed-loop system using the obtained LQR controller you can see if you have desired performance. If for example the $k$th output decays too slowly, you could increase the value of the $k$th diagonal element of $\hat{Q}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you would also like to guarantee internal stability of the system you could also add an identity matrix multiplied by a small positive number to the expression for $Q$. In order to get some estimate of the size of this small number you could maybe use a couple of orders of magnitude smaller (say $10^{-6}$) than the largest eigenvalue of the initially obtained $Q$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So using this transformation of $(\hat{Q},\hat{R},\hat{N})\to(Q,R,N)$ should give you some more intuitive tuning nobs when designing a LQR controller. This method should also not be affected by the state space realization you are using of the LTI system.&lt;/p&gt;&#xA;" OwnerUserId="1487" LastEditorUserId="1487" LastEditDate="2017-06-15T23:33:58.760" LastActivityDate="2017-06-15T23:33:58.760" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="12629" PostTypeId="2" ParentId="12627" CreationDate="2017-06-16T09:11:51.433" Score="1" Body="&lt;p&gt;This means that you have to make sure that your remote talks only to your own robot and you doesn't interfere with the commands of other robots. This could be an encryption so that no other robot understands your commands. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;From &lt;a href=&quot;http://robogames.net/rules/combat.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;Combat Robot Rules&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;All robots (including insect classes) MUST use a radio system with digitally coded, mated pairs between transmitter and receiver. This means that no other transmitter, operating on the same frequency, can communicate with your receiver, and your transmitter cannot send signals to any receiver other than your own. Examples of such systems are Spektrum, IFI, and XPS XtremeLink - these are just examples and should not be taken as a comprehensive list or an endorsement.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="23196" LastEditorUserId="37" LastEditDate="2017-06-16T09:54:28.763" LastActivityDate="2017-06-16T09:54:28.763" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12632" PostTypeId="1" CreationDate="2017-06-16T18:44:53.113" Score="0" ViewCount="76" Body="&lt;p&gt;I have a 1100kv brushless motor from dys with a propeller as shown.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/1gk7y.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1gk7y.jpg&quot; alt=&quot;motor with propellor&quot;&gt;&lt;/a&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have attached this motor to two pvc pipes joined together as shown and packed the electronics inside polyform to protect from water.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/rM4Pj.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rM4Pj.jpg&quot; alt=&quot;Two PVC pipes join together to float&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I did the test run of this model the boat didn't move. The motor was just creating the turbulence in the water.&#xA;So I your help of where I am going wrong&#xA; 1. Is it wrong to place brushless motor in water(although have seen videos of&#xA;people placing their motors in water) ?&#xA; 2. Is the propeller design/size is wrong (maybe its a simple fan propeller not made for water, really no idea)?&#xA; 3. Or the motor rating is not enough (thought lower kv rating would generate more torque and therefore more thrust) ?&#xA;I used a 11.2V 2200 mah 25C lipo battery.&lt;/p&gt;&#xA;" OwnerUserId="10946" LastActivityDate="2017-06-16T19:04:51.293" Title="Why the bldc motor not able to move my water boat?" Tags="&lt;mobile-robot&gt;&lt;brushless-motor&gt;&lt;underwater&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12633" PostTypeId="1" CreationDate="2017-06-16T19:03:07.583" Score="0" ViewCount="2312" Body="&lt;p&gt;I am trying to use a multilayer perceptron to make a flight controller for a ROV. I have a MPU-9250 IMU and I need to remove the noise from the sensor before I can train my MLP. The IMU has a accelerometer, gyro and a magnetometer. I know my state vector is supposed to be &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[acc_x, Acc_y, Acc_z, gyro_x, gyro_y, gyro_z, mag_x, magy, mag_z]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I am not sure about the rest. Since I want the clean Acc, gyro and mag's x, y and z values can I just use an identity matrix for everything in EKF?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to pass the IMU data to the MLP after cleaning it and try to predict the control signal for all my thrusters. For my dataset I recoded the IMU information from a ROV2 and I also recorded the pwm signals for each thruster. If it does work I won't be able to control things like PID values of the thrusters but for now I don't really care about it.&lt;/p&gt;&#xA;" OwnerUserId="17276" LastEditorUserId="17276" LastEditDate="2017-06-17T20:06:17.413" LastActivityDate="2017-08-16T21:51:34.497" Title="Extended Kalman Filter for IMU" Tags="&lt;ekf&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="12634" PostTypeId="2" ParentId="12632" CreationDate="2017-06-16T19:04:51.293" Score="1" Body="&lt;p&gt;It sounds to me like you've got cavitation. Basically, the blades are turning so fast that the water around the blades boils. Boiling can happen at normal pressure and high temperature, like on a stove, or at normal temperature and low pressure, as in your case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The blades boil the water, then the prop is surrounded by vapor instead of water and there isn't anything to push. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.rcgroups.com/forums/showthread.php?559284-What-causes-cavitation&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here's a hobby thread on cavitation&lt;/a&gt;, where the OP complains,&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I was driving my boat on saturday and I noticed sometimes my motor would spin very fast and the boat would go no where as if it were not spinning the prop. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;and another poster replies, in part,&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Cavitation is caused by the prop spinning too fast... You get something simular if the prop is 'too far' out of the water at some point. &lt;strong&gt;Lots of 'splashing', not much water moving.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(Emphasis added). That post goes on to say that it's not exactly cavitation, but it 100% is cavitation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You need to slow the prop down. You basically have three options to slow the prop down:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Write smaller values to the ESC to request a lower speed (easiest), or&lt;/li&gt;&#xA;&lt;li&gt;Use a gearbox to change motor speed to prop speed (most efficient), or&lt;/li&gt;&#xA;&lt;li&gt;Get a larger and/or more aggressive prop such that the torque required to turn the prop naturally lowers the motor speed (least efficient). &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The problem with option 1 is that there is some &quot;maximum throttle&quot; at which you'll start cavitating, and then you're limited to the power and speed output of the motor from 0% to whatever that maximum throttle is. Even a low kV BLDC motor like you have still naturally spins very fast. You may have controller issues running a BLDC motor under relatively high torque at such a low speed. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Option 2 is the most expensive because it requires you to purchase a gearbox, but that's the way it's done on commercial and military ships - run the (steam or gas) turbines at high speed, where they operate most efficiently, then gear that down to a low speed, where the prop operates most efficiently. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Option 3 is probably not going to get you very far, because you'll probably find it hard to get a suitable prop installed in the correct location. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, there's an option 4 also: replace the motor. You would want to go for the lowest speed motor you could find; something like a 100rpm motor would probably be perfect.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-06-16T19:04:51.293" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12638" PostTypeId="1" AcceptedAnswerId="12645" CreationDate="2017-06-17T10:24:28.923" Score="1" ViewCount="59" Body="&lt;p&gt;Do we have to take Electronic Speed Controllers (ESC) into account when calculating the total current draw of the system?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as I can understand, the motor and ESC are connected in series, so we take the component that draws the most current, which is the motor in this case. Then, all combinations of a motor and ESC are connected in parallel, thus the currents add up. Am I thinking right? Or am I missing something here?&lt;/p&gt;&#xA;" OwnerUserId="17282" LastEditorUserId="9176" LastEditDate="2017-06-17T12:29:39.763" LastActivityDate="2017-06-18T02:27:10.050" Title="Electronic speed controllers and total current draw" Tags="&lt;esc&gt;&lt;current&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12639" PostTypeId="2" ParentId="12633" CreationDate="2017-06-17T14:30:31.423" Score="0" Body="&lt;p&gt;When I was writing my own flight for quad-copter, this article helped me a lot and I think it could help: &#xA;&lt;a href=&quot;http://www.starlino.com/imu_kalman_arduino.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Arduino code for IMU Guide algorithm. Using a 5DOF IMU (accelerometer and gyroscope combo)&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This article introduces an  implementation of a simplified filtering algorithm that was inspired by Kalman filter. The Arduino code is tested using a 5DOF IMU unit from GadgetGangster – &lt;a href=&quot;http://www.gadgetgangster.com/367&quot; rel=&quot;nofollow noreferrer&quot;&gt;Acc_Gyro&lt;/a&gt;. The theory behind this algorithm was first introduced in my &lt;a href=&quot;http://www.starlino.com/imu_guide.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Imu Guide article&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="10807" LastEditorUserId="9176" LastEditDate="2017-06-17T18:43:56.243" LastActivityDate="2017-06-17T18:43:56.243" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12640" PostTypeId="1" CreationDate="2017-06-17T20:52:27.243" Score="3" ViewCount="219" Body="&lt;p&gt;So the questions from the title is a bit hard to explain, so here is a better explanation of my question. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to get into the FPV quad flying hobby, so I decided to pick up a very starter quad, it's the Eachine Wizard X220. From the specs of the quad its lift off weight is 535 grams and the quad itself (without the battery but with all electronics) weights in at 364 grams. So I just need to pickup a battery everything else is accounted for. I want to get a 4S battery 1500 mAh which is 160 grams but that brings the total weight to 524. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, my question is would the quad not be as efficient with this weight. Or should I just stick a 3S 1300 mAh and have a total weight of 484 grams? &lt;/p&gt;&#xA;" OwnerUserId="17283" LastEditorUserId="18235" LastEditDate="2017-09-29T08:42:51.620" LastActivityDate="2017-09-29T08:42:51.620" Title="Would the quad fly better with a 3S or 4S based on the weights of the batteries?" Tags="&lt;quadcopter&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12642" PostTypeId="1" CreationDate="2017-06-18T00:04:33.730" Score="1" ViewCount="326" Body="&lt;p&gt;I don't know if someone can help me with this but I'm calculating the dynamics of a 6DOF robot using the Newton-Euler iterative dynamics algorithm. I'm following the recursive method (inwards and outwards) explained in the book &lt;em&gt;Introduction to Robotics Mechanics and Control&lt;/em&gt; (Pages 175-176). After putting down on MATLAB the calculations, I started to check if the gravity compensation, &lt;em&gt;g&lt;/em&gt; term, made sense. I had calculated the gravity term from the Lagrange approach before so I knew the set of torques had to be the same for a specific pose. Although the values are almost similar (one actuator has some considerable deviation, still unknown to me as to why). Now, here's the thing: the robot is the Kinova JACO v2 arm, and if one assumes that only the gravity effect is taking place,  no torque is assumed for the first actuator (its associated link is at the base). Indeed this is visually clear, and the Lagrangian approach based on the potential energy corroborates that, giving me a torque vector with no torque being sent to the first actuator. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My problem is just that... The Newton-Euler iterative algorithm is based on the balance of the forces between the links. And since the contributions of the forces are summed up (when performing the outwards calculations) the torque sent for the actuator 1 is not zero and has actually the value that would be sent to the actuator 2. Basically a &quot;shift&quot; was made, and the torque for actuator 1 should've been for actuator 2, and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know if you can get any insight from this... But I've tried to recheck my calculations and I can't seem to find any problem with them... Please if you have any suggestions I'll be grateful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="16543" LastActivityDate="2017-06-18T02:20:27.267" Title="6DOF Robot Dynamics from Newton-Euler Iterative Algorithm" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;dynamics&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2017-06-19T12:22:04.317" ContentLicense="CC BY-SA 3.0" />
  <row Id="12643" PostTypeId="1" CreationDate="2017-06-18T02:12:41.847" Score="1" ViewCount="299" Body="&lt;p&gt;I've written a grid based DFS algorithm with a PID-based steering system to maneuver a 30cm&lt;sup&gt;2&lt;/sup&gt; square-grid maze all in Python. The robot is a 4 wheel drive with an approximate size of 20&amp;nbsp;cm. The robot has a BeagleBone Green Wireless controller which is connected by USB to the RPLIDAR A1. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;At this current moment, the robot is underutilizing the LIDAR and I want to begin to learn SLAM. However, the environment is highly predictable which I think makes a full SLAM counterintuitive. I would also like the code to be low CPU strain. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've seen people converting a conventional SLAM into a grid based but only after the calculations are complete. I was wondering if there is a way to do a Grid Based SLAM right from the start (assume its position and map with a grid). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Accuracy isn't hugely important here as long as it understands a tile and the robot is able to avoid walls.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any advice, tips or suggestion is appreciated. How would you store the map? How would you locate the position of the robot? How would you map the LIDAR's values?&lt;/p&gt;&#xA;" OwnerUserId="17285" LastEditorUserId="9176" LastEditDate="2017-06-18T05:20:17.450" LastActivityDate="2020-02-14T18:35:47.637" Title="Grid based SLAM using BeagleBone Green Wireless and RPLIDAR" Tags="&lt;mobile-robot&gt;&lt;localization&gt;&lt;slam&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12644" PostTypeId="2" ParentId="12642" CreationDate="2017-06-18T02:20:27.267" Score="1" Body="&lt;p&gt;Since you include no equations, all we can say is that yes, the Newton-Euler algorithm works and the fact that you are not getting the expected results means that you implemented the algorithm incorrectly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sounds like either a labeling/indexing problem. Perhaps you are extracting the actuator torque incorrectly from wrong set of resultant forces.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Try writing the equations and free-body diagram for a 1dof robot and compare that to what your algorithm does. &lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2017-06-18T02:20:27.267" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12645" PostTypeId="2" ParentId="12638" CreationDate="2017-06-18T02:27:10.050" Score="0" Body="&lt;p&gt;You are correct. There will be a small amount of current used for the ESC electronics that are not in series with the motor, but that should be negligible. &lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2017-06-18T02:27:10.050" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12646" PostTypeId="2" ParentId="12643" CreationDate="2017-06-18T08:52:36.957" Score="1" Body="&lt;p&gt;I have little experience with SLAM but I have played with Bitmaps in python and they sound like they could be used as a means of storing the map. A bitmap is fundamentally a 2D array in which you can change the &quot;pixels&quot; to show walls and other objects in your maze. If you do a scale of 30:1 to store the grid map.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are two methods of storing the slam data in bitmaps. &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A 2D array of &quot;tiles&quot; (bitmaps) sized 10 x 10 bits that can be formatted to show &quot;walls&quot;&lt;/li&gt;&#xA;&lt;li&gt;A huge single bitmap&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;You can learn more about bitmaps in Python here, &lt;a href=&quot;https://stackoverflow.com/questions/8729459/how-do-i-create-a-bmp-file-with-pure-python&quot;&gt;How do I create a BMP file with pure Python?&lt;/a&gt;. If you need an example of a bitmap this image will help &lt;a href=&quot;http://www.scan2cad.com/wp-content/uploads/2016/09/how-bitmap-images-are-stored.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;What a Bitmap Looks Like.&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="17287" LastEditorUserId="17285" LastEditDate="2017-06-20T01:03:36.137" LastActivityDate="2017-06-20T01:03:36.137" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12648" PostTypeId="1" CreationDate="2017-06-19T04:59:05.303" Score="0" ViewCount="20" Body="&lt;p&gt;I am using SLAM for the autonomous vehicle navigation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to the specify the working zone for the vehicle before the start of navigation, or can we restrict the working zone of the vehicle using SLAM approach for navigation.&lt;/p&gt;&#xA;" OwnerUserId="17293" LastEditorUserId="9176" LastEditDate="2017-06-19T05:05:45.733" LastActivityDate="2017-06-19T08:36:46.290" Title="Can we specify the working zone for the robot using SLAM approach for navigation?" Tags="&lt;slam&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12649" PostTypeId="2" ParentId="12640" CreationDate="2017-06-19T05:33:53.693" Score="1" Body="&lt;p&gt;Adding more weight to a quadcopter will inevitably make the handling worse and reduce the flight time per Mah. However, we are talking about a 40-gram difference between these two batteries. It all depends on what matters the most to you when it comes to flight time and speed tradeoff.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A bigger battery is the better idea if you want the longest flight time possible. The trade off for more weight is less speed especially if the overall thrust of the engines is only 780g. &lt;a href=&quot;https://www.banggood.com/Eachine-Wizard-X220-FPV-Racer-Blheli_S-Naze32-6DOF-5_8G-48CH-200MW-700TVL-Camera-w-FlySky-I6-RTF-p-1077100.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Aircraft specs from here&lt;/a&gt;. That being said, you would most likely only gain 1-3 minutes at the cost of speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would suggest the smaller battery as its an FPV drone and more speed makes the whole experience more enjoyable. What I have learned over my many years of using quadcopters including both the DJI Mavik Pro and countless custom drones is that it doesn't necessarily matter if the battery on the drone is small. The thing that does matter is that you have spare batteries to swap out when the battery on the drone dies. &lt;/p&gt;&#xA;" OwnerUserId="17285" LastActivityDate="2017-06-19T05:33:53.693" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12650" PostTypeId="2" ParentId="12640" CreationDate="2017-06-19T07:12:25.310" Score="1" Body="&lt;p&gt;3S makes more sense on lighter quads but a 4S may give you more flight time, if you're running a mid range weight quad. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have raised this question on many occasions when building custom quads for friends.&lt;/p&gt;&#xA;" OwnerUserId="10468" LastEditorUserId="9176" LastEditDate="2017-06-19T13:28:08.830" LastActivityDate="2017-06-19T13:28:08.830" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12651" PostTypeId="2" ParentId="12648" CreationDate="2017-06-19T08:36:46.290" Score="1" Body="&lt;p&gt;In theory that is possible. A SLAM (&lt;em&gt;Simultaneous localization and mapping&lt;/em&gt;) algorithm, as the name suggests, will build a map of the environment and infer the vehicles position in that environment. Based on that information it should be possible to limit a vehicles navigation to a certain &quot;working zone&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In practice the properties of the operational environment in combination with what vehicles, sensors and SLAM algorithms are used will determine if and what kind of &quot;working zones&quot; can be enforced. But without further information it is impossible to make a statement about any more concrete practical implications.&lt;/p&gt;&#xA;" OwnerUserId="17296" LastActivityDate="2017-06-19T08:36:46.290" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12652" PostTypeId="1" CreationDate="2017-06-19T10:03:24.123" Score="1" ViewCount="683" Body="&lt;p&gt;As a part of my research work I'm supposed to build or use an existing autonomous vehicle simulator, in which I can also control the behaviour of the traffic in the system, I was searching on Google and posted on reddit to check if there is any such simulator (open source), After all the exhaustive attempts, I haven't found anything yet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm trying to build this in V-rep or any other ROS compatible simulators. The end product has to look something like the one shown here, &lt;a href=&quot;https://www.youtube.com/watch?v=RhzZ6Ao6Shc&quot; rel=&quot;nofollow noreferrer&quot;&gt;YouTube - Webots: The autonomous vehicle simulator&lt;/a&gt;, and would also give control over the traffic behaviour. Any help/suggestion is greatly appreciated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS: I do know that there's this one written in Unity, &lt;a href=&quot;https://github.com/udacity/self-driving-car-sim&quot; rel=&quot;nofollow noreferrer&quot;&gt;Github:A self-driving car simulator built with Unity&lt;/a&gt; (&lt;a href=&quot;http://udacity.com/self-driving-car&quot; rel=&quot;nofollow noreferrer&quot;&gt;An Open Source Self-Driving Car&lt;/a&gt;), but we are looking to import OSM data and also Unity doesn't have a good ROS integration mechanism.&lt;/p&gt;&#xA;" OwnerUserId="14644" LastEditorUserId="9176" LastEditDate="2017-06-19T13:27:28.650" LastActivityDate="2017-06-19T13:27:28.650" Title="Is there an open source autonomous vehicle simulator with control over traffic?" Tags="&lt;motion-planning&gt;&lt;navigation&gt;&lt;simulation&gt;&lt;autonomous-car&gt;" AnswerCount="0" CommentCount="7" ClosedDate="2017-06-19T13:24:21.993" ContentLicense="CC BY-SA 3.0" />
  <row Id="12655" PostTypeId="1" CreationDate="2017-06-19T15:58:52.730" Score="1" ViewCount="22" Body="&lt;p&gt;We're using a stepper motor to control a knob on a piece of audio equipment.  The stepper is coupled to the potentiometer shaft with a simple coupler. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Right now, in order to get to &quot;zero&quot; on the potentiometer, we &quot;crank&quot; the stepper motor -3600 steps (about one full rotation).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This creates unnecessary torque on the pot. I'm looking for a hardware solution to avoid this.  Here are a few ideas I had:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Some sort of zero detection - Know when the knob gets to 0 and stop the stepper from turning when it reaches that point.&lt;/li&gt;&#xA;&lt;li&gt;A coupler that can detect excessive force on the shaft.  Basically some sort of spring loaded coupler that will &quot;click&quot; when the rotation gets to &quot;zero&quot; and close a circuit.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Also open to other ideas...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We're currently using Arduinos with Firmata firmware connected to Node.JS, but this is mostly a hardware issue.&lt;/p&gt;&#xA;" OwnerUserId="17303" LastEditorUserId="37" LastEditDate="2017-06-20T13:53:15.350" LastActivityDate="2017-06-20T13:53:32.917" Title="Detecting &quot;zero&quot; when turning a potentiometer from a stepper motor" Tags="&lt;stepper-motor&gt;" AnswerCount="0" CommentCount="2" FavoriteCount="1" ClosedDate="2017-06-20T13:53:50.340" ContentLicense="CC BY-SA 3.0" />
  <row Id="12657" PostTypeId="1" CreationDate="2017-06-19T20:47:46.127" Score="1" ViewCount="103" Body="&lt;p&gt;I am interested in knowing a software platform which deals with multi-robot navigation and:-&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;has implemented local  collision  avoidance  algorithms for each robot to prevent collisions between robots&lt;/li&gt;&#xA;&lt;li&gt;has independent controllers such as PID for each robot&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Most likely such a framework will be in ROS or python. I am interested in open source codes such as those in github. The goal is to have a platform where a set of way-points can be assigned to each robot and they can avoid collisions and reach their way-points. At least this much ability should be already implemented.&lt;/p&gt;&#xA;" OwnerUserId="14868" LastActivityDate="2017-06-19T20:47:46.127" Title="Open-source software that supports multi robot simulation and navigation capabilities" Tags="&lt;control&gt;&lt;ros&gt;&lt;motion-planning&gt;&lt;simulation&gt;&lt;multi-agent&gt;" AnswerCount="0" CommentCount="1" ClosedDate="2017-06-20T13:51:19.190" ContentLicense="CC BY-SA 3.0" />
  <row Id="12658" PostTypeId="1" AcceptedAnswerId="12659" CreationDate="2017-06-20T00:51:37.877" Score="3" ViewCount="63" Body="&lt;p&gt;I'm trying to do a simple communication between an Intel Edison and Open Mv 7 Camera through UART (Tx/Rx). I assumed this would be a simple task but both sides receive &quot;�&quot;. Both are using python, the Intel Edison using  Pyserial to communicate while OpenMv7 is using PYB library. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Open Mv7.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;import time&#xA;from pyb import UART&#xA;&#xA;uart = UART(3, 9600)&#xA;&#xA;&#xA;while(True):&#xA;    if(uart.any() &amp;gt; 0):&#xA;        print(uart.read())&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Intel Edison&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;import serial&#xA;import time &#xA;&#xA;ser = serial.Serial(port = &quot;/dev/ttyO1&quot;, baudrate=9600)&#xA;ser.close()&#xA;ser.open()&#xA;&#xA;print(&quot;Online&quot;)&#xA;&#xA;ser.write(&quot;Hello World!&quot;)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="17287" LastEditorUserId="17285" LastEditDate="2017-06-20T00:59:44.573" LastActivityDate="2017-06-20T00:59:44.573" Title="Communication between Intel Edison and Open Mv7" Tags="&lt;serial&gt;&lt;communication&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12659" PostTypeId="2" ParentId="12658" CreationDate="2017-06-20T00:58:50.917" Score="2" Body="&lt;p&gt;Seems like the code should work. I can suggest 3 things that might be of assistance. &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Make sure you have a prominent Common Ground Sometimes your PC isn't enough&lt;/li&gt;&#xA;&lt;li&gt;Increase the BraudRate on both devices.&lt;/li&gt;&#xA;&lt;li&gt;Most important make sure both devices are running at the same voltage. The Intel Edison is 1.8V without the Arduino Expander and the Arduino expander has a jumper that allows it to work at both 3.3V and 5V. You might need to switch it to 5V.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="17285" LastActivityDate="2017-06-20T00:58:50.917" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12660" PostTypeId="1" CreationDate="2017-06-20T11:09:06.913" Score="2" ViewCount="77" Body="&lt;p&gt;I am curious to know why we can't apply control algorithm like PID on the weighted signal of Roll and Roll rate in a quad-copter instead of using two loops to control them independently. Fundamentally PID will make the input signal to approach $0$. In the case of (Roll + Roll-Rate), which would be $ w_1\theta + w_2\dot\theta$, the sum becomes $0$ when individually both tend to $0$; since we have an exponentially decaying curve.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So why do people generally use sequential loops to control each of them separately? (Roll is just for example)&lt;/p&gt;&#xA;" OwnerUserId="6823" LastActivityDate="2017-06-20T11:56:06.340" Title="What's wrong in controlling Roll+Roll rate in a quad-copter instead of using 2 separate loops for each?" Tags="&lt;quadcopter&gt;&lt;control&gt;&lt;pid&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12661" PostTypeId="2" ParentId="12660" CreationDate="2017-06-20T11:56:06.340" Score="4" Body="&lt;p&gt;That only works when the desire roll angle is 0. What happens if you are trying to turn and have a desired roll angle of 1deg? Even changing your sum to match the angle error, $w_1 (\theta - \theta_d) + w_2 \dot{\theta}$ you are still not guaranteed to reach $\theta=\theta_d$; you're only driving towards $w_1 (\theta - \theta_d) = -w_2 \dot{\theta}$. For most situations this will not be a stable equilibrium so then you'll oscillate back the other direction.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2017-06-20T11:56:06.340" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12665" PostTypeId="2" ParentId="10050" CreationDate="2017-06-20T23:20:53.830" Score="0" Body="&lt;p&gt;My bet is 1 &amp;amp; 5. The agent or robot quickly orients itself to its environmental position. 1 satisfies this question. 5 satisfies the agent requirement.&lt;/p&gt;&#xA;" OwnerUserId="17319" LastActivityDate="2017-06-20T23:20:53.830" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12668" PostTypeId="2" ParentId="10110" CreationDate="2017-06-21T15:40:10.553" Score="1" Body="&lt;p&gt;I'm sure you've tried this, but if you follow the links in that YouTube video, you'll see that its author has posted the source code.  See:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://x-io.co.uk/gait-tracking-with-x-imu/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Gait tracking with x-IMU&lt;/a&gt;, and; &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/xioTechnologies/Gait-Tracking-With-x-IMU&quot; rel=&quot;nofollow noreferrer&quot;&gt;Github: xioTechnologies/Gait-Tracking-With-x-IMU&lt;/a&gt; &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Yes, it's written in MATLAB, but &quot;for anything MATLAB can do, there's a corresponding Python library&quot;.  :)   In particular, you might want to investigate the quaternion package(s) in NumPy -- that's where the magic happens.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That should get you started.&lt;/p&gt;&#xA;" OwnerUserId="17325" LastEditorUserId="17325" LastEditDate="2017-06-26T12:43:30.987" LastActivityDate="2017-06-26T12:43:30.987" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12669" PostTypeId="1" AcceptedAnswerId="12670" CreationDate="2017-06-21T18:19:13.747" Score="0" ViewCount="1530" Body="&lt;p&gt;I am working on a 7 DOF serial manipulator and was trying to use ikine to get the joint coordinates for simple 2 DOF robot. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even though I am using the masking vector as &lt;code&gt;[ 1 1 0 0 0 0 ]&lt;/code&gt;, I am getting error stating: &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Number of robot DOF must be &gt;= the same number of 1s in the mask matrix&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This is my 2 DOF robot &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;L1 = Link('d', 0, 'a', 1, 'alpha', 0);&#xA;L1.m=50;&#xA;L1.r=[0.5,0,0];&#xA;L1.I=[0,0,0;0,0,0;0,0,10];&#xA;L1.G=1;&#xA;L1.Jm=0;&#xA;&#xA;L2=Link(L1);&#xA;&#xA;r2=SerialLink([L1,L2]);&#xA;&#xA;r2.name='POLIrobot';&#xA;r2.gravity=[0;9.81;0];&#xA;&#xA;q0=r2.ikine([eye(3),[0.2;0;0];[0,0,0,1]],[0,0],[1 1 0 0 0 0]);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Can anyone please help and explain why is it happening?&lt;/p&gt;&#xA;" OwnerUserId="16943" LastEditorUserId="9176" LastEditDate="2017-06-25T14:12:39.723" LastActivityDate="2019-07-23T14:59:05.230" Title="Facing problems in Mask vector in Robotics toolbox" Tags="&lt;robotic-arm&gt;&lt;inverse-kinematics&gt;&lt;robotics-library&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12670" PostTypeId="2" ParentId="12669" CreationDate="2017-06-21T18:42:52.720" Score="0" Body="&lt;p&gt;What are the options you're passing to the &lt;code&gt;r2.ikine&lt;/code&gt; function? I believe that, at a minimum, you need to identify them. Try something like the following:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;q0 = r2.ikine([eye(3),[0.2;0;0];[0,0,0,1]],'mask',[1 1 0 0 0 0]);&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't tell what your &lt;code&gt;[0,0]&lt;/code&gt; is (and neither can the function!), so I don't know what to suggest for that. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-06-21T18:42:52.720" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="12671" PostTypeId="1" CreationDate="2017-06-21T19:05:15.197" Score="6" ViewCount="1855" Body="&lt;p&gt;Which is the best visual fiducial marker (2D barcode) for detection and robust and accurate pose estimation? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Im not looking for a fiducial marker which can store lot of information. The main goal is just to get the pose of the marker with respect to the camera as accurate as possible. &lt;/p&gt;&#xA;" OwnerUserId="11751" LastActivityDate="2017-08-26T09:46:29.300" Title="Which is the best visual fiducial marker (2D barcode)?" Tags="&lt;computer-vision&gt;&lt;opencv&gt;&lt;pose&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12672" PostTypeId="1" AcceptedAnswerId="12673" CreationDate="2017-06-21T19:35:05.083" Score="3" ViewCount="607" Body="&lt;p&gt;Look at this picture. This is the seperation principle diagram. &#xA;&lt;a href=&quot;https://i.stack.imgur.com/lWXlR.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/lWXlR.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is an LQG controller which going to control the real life process. What I want to do, is to create a state space model for this seperation principle system, including the real life process. A LQG controller is a LQR controller together with the Kalmanfilter. Kalmanfilter is also called an observer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The LQR controler is a feedback gain matrix &lt;strong&gt;L&lt;/strong&gt; and the kalmanfilter is just a mathematical description of the real life system with a gain matrix &lt;strong&gt;K&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;r(t)&lt;/strong&gt; is the reference signal vector which describe how the system's states should hold e.g. temperature or pressure. &#xA;&lt;strong&gt;y(t)&lt;/strong&gt; is the output from the real life process.&#xA;$\hat{y}$ is the estimated output from the kalmanfilter.&#xA;&lt;strong&gt;d(t)&lt;/strong&gt; is the disturbance vector for the input. That's a bad thing, but the Kalman filter are going to reduce the disturbance and noise. &#xA;&lt;strong&gt;u(t)&lt;/strong&gt; is the in signal vector to the real life system and the kalmanfilter.&#xA;&lt;strong&gt;n(t)&lt;/strong&gt; is the noise vector from the measurement tools.&#xA;&lt;strong&gt;x(t)&lt;/strong&gt; is the state vector for the system.&#xA;$\dot{x}$ is the state vector derivative for the system.&#xA;$\hat{x}$ is the estimated state vector for the system.&#xA;$\dot{\hat{x}}$ is the estimated state vector derivative for the system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;A&lt;/strong&gt; is the system matrix. &lt;strong&gt;B&lt;/strong&gt; is the in signal matrix. &lt;strong&gt;C&lt;/strong&gt; is the output matrix. &lt;strong&gt;L&lt;/strong&gt; is the LQR controler gain matrix. &lt;strong&gt;K&lt;/strong&gt; is the kalmanfilter gain matrix. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So....a lot of people create the state space system as this: $$ $$&#xA;For the real life system:&#xA;$$ \dot{x} = Ax + Bu + d$$&#xA;For the kalmanfilter:&#xA;$$\dot{\hat{x}} = A\hat{x} + Bu + Ke$$&#xA;But $u(t)$ is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$u = r - L\hat{x}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And $e(t)$ is:&#xA;$$e = y + n - \hat{y} = Cx + n - C\hat{x} $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And then...for some reason, people says that the state space model should be model by the state estimation error:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\dot{\tilde{x}} = \dot{x} - \dot{\hat{x}}  = (Ax + Bu + d) - (A\hat{x} + Bu + Ke)&#xA;$$&#xA;$$ \dot{\tilde{x}}  = (Ax + Bu + d) - (A\hat{x} + Bu + K(Cx + n - C\hat{x})$$&#xA;$$ \dot{\tilde{x}} = Ax - A\hat{x} + d - KCx - Kn + KC\hat{x} $$&#xA;And we can say that:&#xA;$$\tilde{x} = x - \hat{x} $$&#xA;Beacuse:&#xA;$$\dot{\tilde{x}} = \dot{x} - \dot{\hat{x}}$$&#xA;The kalmanfilter will be:&#xA;$$ \dot{\tilde{x}} = (A - KC)\tilde{x} + Kn$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The real life process will be:&#xA;$$ \dot{x} = Ax + Bu + d = Ax + B(r - L\hat{x}) + d = Ax + Br - BL\hat{x} + d$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But:&#xA;$$\tilde{x} = x - \hat{x} \Leftrightarrow  \hat{x} = x - \tilde{x}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So this will result for the real life process:&#xA;$$ \dot{x} =  Ax + Br - BL(x - \tilde{x}) + d = Ax + Br - BLx + BL\tilde{x} + d$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the whole state space model will then be:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\ \begin{bmatrix} \dot{x} \\ \\\dot{\tilde{x}} \end{bmatrix} =\begin{bmatrix} A - BL&amp;amp; BL \\ 0 &amp;amp; A-KC \end{bmatrix} \begin{bmatrix} x\\ \tilde{x} \end{bmatrix}+\begin{bmatrix} B &amp;amp; I &amp;amp; 0\\ 0 &amp;amp; 0 &amp;amp; K \end{bmatrix}\begin{bmatrix} r\\ d\\ n \end{bmatrix}\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Youtube example:&#xA;&lt;a href=&quot;https://youtu.be/H4_hFazBGxU?t=2m13s&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://youtu.be/H4_hFazBGxU?t=2m13s&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$I$ is the identity matrix. But doesn't need to be only ones on digonal form. &#xA;$0$ is the zero matrix.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The Question:&lt;/strong&gt; $$ $$&#xA;If I write the systems on this forms:&#xA;$$ \dot{x} = Ax + Bu + d = Ax + B(r - L\hat{x}) + d$$&#xA;For the kalmanfilter:&#xA;$$\dot{\hat{x}} = A\hat{x} + Bu + Ke = A\hat{x} + B(r - L\hat{x}) + K(y + n - \hat{y})$$&#xA;Beacuse $u(t)$ and $e(t)$ is:&#xA;$$u = r - L\hat{x}$$&#xA;$$e = y + n - \hat{y} = Cx + n - C\hat{x} $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I get this:&#xA;$$\dot{x} = Ax + Br - BL\hat{x} + d$$&#xA;$$\dot{\hat{x}} = A\hat{x} + Br - BL\hat{x} + KCx + Kn - KC\hat{x}$$&#xA;Why not this state space form:&#xA;$$&#xA; \begin{bmatrix} \dot{x} \\ \\\dot{\hat{x}} \end{bmatrix} =\begin{bmatrix} A &amp;amp; -BL \\ KC &amp;amp; [A-BL-KC] \end{bmatrix} \begin{bmatrix} x\\ \hat{x} \end{bmatrix}+\begin{bmatrix} B &amp;amp; I &amp;amp; 0\\ B &amp;amp; 0 &amp;amp; K \end{bmatrix}\begin{bmatrix} r\\ d\\ n \end{bmatrix}\&#xA;$$&#xA;Youtube example:&#xA;&lt;a href=&quot;https://youtu.be/t_0RmeSnXxY?t=1m44s&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://youtu.be/t_0RmeSnXxY?t=1m44s&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Who is best? Does them both works as the LQG diagram shows? Which should I use?&lt;/p&gt;&#xA;" OwnerUserId="17252" LastEditorUserId="17252" LastEditDate="2017-06-21T20:42:52.783" LastActivityDate="2017-06-22T17:57:49.213" Title="Can I write the seperation principle for LQG controllers in this state space form?" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;kalman-filter&gt;&lt;matlab&gt;&lt;noise&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12673" PostTypeId="2" ParentId="12672" CreationDate="2017-06-21T21:02:28.670" Score="3" Body="&lt;p&gt;This is really a lot to look at, but the most glaring issue I noticed off the bat is your definition of the control signal $u(t)$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;What is the input to your controller?&lt;/em&gt; What &lt;em&gt;should&lt;/em&gt; be the input to your controller? &lt;em&gt;What is the output of the controller?&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;State feedback controllers (and LQR controllers) attempt to drive the system states to zero. The control law for these controllers is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;u = -Lx \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;or, in the case of a state estimator (Kalman filter, EKF, etc.), is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;u = -L\hat{x} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You are attempting to implement reference tracking by passing an input $r(t)$ to the controller. With a state feedback controller, this is generally done with integral control by adding a state to the state matrix such that:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\dot{e_I} = r(t) - x(n) \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $x(n)$ is the state you're trying to control. Consider, for instance, an oscillating system (spring/mass/damper, etc.) where you're trying to control position. The states would all be the same (position/speed/acceleration), so how would your controller &quot;know&quot; that you're attempting to control position and not speed if you're using a control signal of $u(t) = r(t) - Kx$? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So again, for an oscillator, your system might look like:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\left[\begin{array}{c}&#xA;\dot{x} \\&#xA;\ddot{x} \\&#xA;\end{array}\right] = \left[\begin{array}{cc}&#xA;0 &amp;amp; 1 \\&#xA;-\omega_n^2 &amp;amp; 0 \\ &#xA;\end{array}\right]\left[\begin{array}{c}&#xA;x \\&#xA;\dot{x} \\&#xA;\end{array}\right]&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your integral controller then appends a state. Now, if you're trying to control position, you get:&#xA;$$&#xA;\left[\begin{array}{c}&#xA;\dot{x} \\&#xA;\ddot{x} \\&#xA;\dot{e_I} \\&#xA;\end{array}\right] = \left[\begin{array}{ccc}&#xA;0 &amp;amp; 1 &amp;amp; 0 \\&#xA;-\omega_n^2 &amp;amp; 0 &amp;amp; 0\\&#xA;-1 &amp;amp; 0 &amp;amp; 0 \\&#xA;\end{array}\right]\left[\begin{array}{c}&#xA;x \\&#xA;\dot{x} \\&#xA;e_I \\&#xA;\end{array}\right]&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note the $\dot{e_I}$ state - the derivative of an integral error is just the control error. The integral error term $e_I$ doesn't impact either the $x$ or $\dot{x}$ states, but it gives you a new state for control purposes, $u(t) = -Kx$. Now you get a third gain to tune (third pole to place). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Again, this is all specific for state feedback controllers, but the method works the same for integral control of an LQR system - this is referred to as &lt;a href=&quot;https://www.mathworks.com/help/control/ref/lqi.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;linear-quadratic-integral control&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now you can also clearly change which states you're trying to control by altering how the $\dot{e_I}$ term is defined. You can &quot;pick&quot; the position state with $[1,0]$, or the speed state with $[0,1]$, or the acceleration state by recognizing the definition from the state space form: $\ddot{x} = [-w_n^2,0][_{\dot{x}}^{x}]$.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;In re-reading your question, it looks like there may be some confusion too on observer setup/design. Observer design is commonly referred to as the &quot;dual&quot; of the controller design because they take similar forms and you can generally do the same steps to get the answer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A state feedback controller attempts to drive the states to zero. With an observer, you commented:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;And then...for some reason, people says that the state space model should be model by the state estimation error&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Correct. The observer &quot;states&quot; are the &lt;em&gt;errors&lt;/em&gt; between the modeled states and the actual system states. This is where duality comes in. A state feedback controller and an observer BOTH attempt to drive their states to zero.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a controller, the states are the actual system states. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In an observer, the states are the differences between actual and modeled system states. When the observer has done its job, the modeled states should be exactly equal to the actual system states. In order for the observer to have a meaningful use for the controller, the observer should converge &lt;strong&gt;faster&lt;/strong&gt; than the controller such that the controller has the actual system states (or very close to) by the time the controller begins to respond. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the basis for the thumb rule that the observer poles should be &quot;faster&quot; than the control poles (I've read and generally use 5-10 times faster). The observer will cause the modeled states to fluctuate while it converges (hunts) to the correct state measurement, so it's important for that fluctuation to happen faster than the system is able to respond so it doesn't ripple through the controller output. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;SO, that's the reasoning for observer design - it's basically a second controller that exists to drive &lt;em&gt;state error&lt;/em&gt; to zero. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;:EDIT: - I removed the previous last section here because I mis-read $\tilde{x}$ in the first set of equations as $\hat{x}$ and then confused myself comparing the two. That said, I think the second form is still a &lt;em&gt;little&lt;/em&gt; incorrect (assuming the first form is correct) because of how the exogenous inputs are incorporated. Working entirely from the first form, it starts as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\ \begin{bmatrix} \dot{x} \\ \\\dot{\tilde{x}} \end{bmatrix} =\begin{bmatrix} A - BL&amp;amp; BL \\ 0 &amp;amp; A-KC \end{bmatrix} \begin{bmatrix} x\\ \tilde{x} \end{bmatrix}+\begin{bmatrix} B &amp;amp; I &amp;amp; 0\\ 0 &amp;amp; 0 &amp;amp; K \end{bmatrix}\begin{bmatrix} r\\ d\\ n \end{bmatrix}\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, recognize that the state error $\tilde{x} = x-\hat{x}$, and then look just at the first row:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\dot{x} = \left[A-BL\right]x + \left[BL\right]\tilde{x} + Br + Id \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the purposes of the rest of this, I'm just going to refer to $Id$ as $d$. So, substitute in the definition of $\tilde{x}$:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\dot{x} = \left[A-BL\right]x + \left[BL\right]\left(x-\hat{x}\right) + Br + d \\&#xA;$$&#xA;$$&#xA;\dot{x} = \left[A-BL\right]x + \left[BL\right]\left(x\right) + \left[BL\right]\left(-\hat{x}\right) + Br + d \\&#xA;$$&#xA;$$&#xA;\dot{x} = \left[A-BL+BL\right]x + \left[-BL\right]\hat{x} + Br + d \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\boxed{\dot{x} = \left[A\right]x + \left[-BL\right]\hat{x} + Br + d} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Great! This is the same first row as the second form. Now, to the second row of the first form:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\dot{\tilde{x}} = [A-KC]\tilde{x} + Kn \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Again, make the substitutions of $\tilde{x} = x-\hat{x}$ and now also $\dot{\tilde{x}} = \dot{x} - \dot{\hat{x}}$:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\dot{x} - \dot{\hat{x}}= [A-KC]\left(x-\hat{x}\right) + Kn \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Expand the $x-\hat{x}$ term:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\dot{x} - \dot{\hat{x}}= [A-KC]x - [A-KC]\hat{x} + Kn \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To get rid of the $\dot{x}$ on the left hand side, just use the definition of $\dot{x}$ from the result of the first row!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\dot{x} = \left[A\right]x + \left[-BL\right]\hat{x} + Br + d&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\left[A\right]x + \left[-BL\right]\hat{x} + Br + d - \dot{\hat{x}}= [A-KC]x - [A-KC]\hat{x} + Kn \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Rearrange:&#xA;$$&#xA;\left[A\right]x + \left[-BL\right]\hat{x} + Br + d - \left([A-KC]x - [A-KC]\hat{x} + Kn\right) = \dot{\hat{x}}\\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\dot{\hat{x}} = \left[A\right]x + \left[-BL\right]\hat{x} + Br + d - \left([A-KC]x - [A-KC]\hat{x} + Kn\right)\\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Distribute the negative:&#xA;$$&#xA;\dot{\hat{x}} = \left[A\right]x + \left[-BL\right]\hat{x} + Br + d + \left(-[A-KC]x + [A-KC]\hat{x} - Kn\right)\\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\dot{\hat{x}} = \left[A\right]x + \left[-BL\right]\hat{x} + Br + d - [A-KC]x + [A-KC]\hat{x} - Kn\\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Rearrange again:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\dot{\hat{x}} = \left[A\right]x - [A-KC]x + [A-KC]\hat{x} + \left[-BL\right]\hat{x} + Br + d - Kn\\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Simplify one last time:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\boxed{\dot{\hat{x}} = [KC]x + [A-BL-KC]\hat{x} + Br + d - Kn}\\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is &lt;em&gt;almost&lt;/em&gt;, but not quite what is given as the second row of the second form. This equation has the term $d$ (really $Id$) included and also has $-Kn$ instead of $Kn$. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2017-06-22T17:57:49.213" LastActivityDate="2017-06-22T17:57:49.213" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="12674" PostTypeId="1" AcceptedAnswerId="12676" CreationDate="2017-06-21T23:12:34.037" Score="1" ViewCount="118" Body="&lt;p&gt;I have created a robotic gripper. However, I need help in the control circuit:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/c4lpD.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/c4lpD.png&quot; alt=&quot;Control schematic&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are two buttons, the upper and lower one (connected to the timer):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;the upper one is two states timer either up or down (will be replaced with an active low pin in PCB design).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;the lower one is a push button that must be pushed and  let back to its initial position to give a pulse to the monostable timer to make the servo rotate long enough to just close the gripper (calculate with the RC circuit). &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;My problem: I want to replace the down button with some component so as to give a quick pulse when the upper button change state.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, the button was 0 and went 1 -&gt; Component -&gt; a small pulse to drive the timer (not a pulse that will last until the state changes):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/uLzw7.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/uLzw7.png&quot; alt=&quot;Timing diagram&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where,&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Green: is button state&lt;/li&gt;&#xA;&lt;li&gt;Red: trigger pulse needed.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="17330" LastEditorUserId="9176" LastEditDate="2017-06-25T14:05:40.740" LastActivityDate="2017-06-25T14:05:40.740" Title="Control a robotic gripper" Tags="&lt;control&gt;&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12676" PostTypeId="2" ParentId="12674" CreationDate="2017-06-22T01:49:18.477" Score="0" Body="&lt;p&gt;This can be easily done with a 555 timer, or even a flip flop and a counter.   Are you looking for design concepts or a detailed design?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Check out &lt;a href=&quot;http://www.electronics-tutorials.ws/waveforms/monostable.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this site&lt;/a&gt; for a simple edge-triggered one-shot that uses two nor gates and an R-C (scroll down to the &lt;em&gt;NOR Gate Monostable&lt;/em&gt; section).   I can't draw the circuit on here using my phone so I apologize about just providing a link.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastEditorUserId="11125" LastEditDate="2017-06-22T03:54:11.803" LastActivityDate="2017-06-22T03:54:11.803" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="12677" PostTypeId="2" ParentId="12672" CreationDate="2017-06-22T01:58:32.607" Score="4" Body="&lt;p&gt;Both state space representations are equivalent. For example the eigenvalues of the two closed-loop system matrices should be the same. However when implementing LQG you only have access to the outputs and the variables you introduced yourself, so either $\hat{x}$ or $\tilde{x}$. But you are still limited by the given dynamics of the states of the system you want to control&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\dot{x} = A\,x+B\,u,&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where only $u$ can be chosen freely. As stated before, the true state $x$ is not known. This together implies that the matrix entry of the closed-loop system matrix at the first row and first column should remain $A$, as in your last state space form with $\hat{x}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However your first state space with $\tilde{x}$ is often used to proof stability. Namely the eigenvalues of the closed-loop system matrix are equal to the combination of the eigenvalues of $A-B\,L$ and $A-K\,C$, which should both be Hurwitz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As also stated in the answer of Chuck, your incorporation of the reference signal $r$ in the feedback law will in general not give good (steady state) tracking. Namely LQR is only good at controlling the state space to zero. If you do want good reference tracking you should look at Linear Quadratic Integral, or add feed forward.&lt;/p&gt;&#xA;" OwnerUserId="1487" LastActivityDate="2017-06-22T01:58:32.607" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="12678" PostTypeId="1" CreationDate="2017-06-22T04:05:46.417" Score="1" ViewCount="789" Body="&lt;p&gt;I'm learning about inverse kinematics with Jacobians, and getting a little confused. So, let's say I have a robot arm with two joints with angles &lt;code&gt;Y = (a, b)&lt;/code&gt; whose tip I want to move along a certain direction in 2D space &lt;code&gt;X = (u, v)&lt;/code&gt;. The Jacobian &lt;code&gt;J&lt;/code&gt; tells me how much the arm will move in 3D space, with respect to rotations of the joints: &lt;code&gt;J = dY/dX&lt;/code&gt;. Then, in order to move the arm in a certain direction, I can find the inverse of the Jacobian &lt;code&gt;J-inv&lt;/code&gt;, and then multiply this by the 3D direction I want the tip to move in: &lt;code&gt;X = J_inv * Y&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, let's say that at a particular joint configuration, the first joint (with angle &lt;code&gt;a&lt;/code&gt;) is much more able to move the tip in the desired direction, than the second joint. So, &lt;code&gt;dY/da &amp;gt;&amp;gt; dY/db&lt;/code&gt;. Intuitively, it would therefore make sense that greater velocity is given to the first joint than the second joint, to take advantage of this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But this does not seem to be the case. If &lt;code&gt;X = J_inv * Y&lt;/code&gt;, then &lt;code&gt;J_inv&lt;/code&gt; will cause a greater response from the joint which finds it harder to move the tip in the desired direction, i.e. the second joint, because &lt;code&gt;J_inv&lt;/code&gt; is effectively finding &lt;code&gt;db\dY&lt;/code&gt;, which is greater than &lt;code&gt;da\dY&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So why would the joint which finds it harder to move the tip along the desired direction, actually be given a higher velocity than the joint which finds it easier?&lt;/p&gt;&#xA;" OwnerUserId="8880" LastEditorUserId="37" LastEditDate="2017-06-22T11:13:26.220" LastActivityDate="2017-07-14T23:47:25.373" Title="Understanding inverse kinematics with the Jacobian" Tags="&lt;kinematics&gt;&lt;inverse-kinematics&gt;&lt;jacobian&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12681" PostTypeId="1" CreationDate="2017-06-22T17:09:03.920" Score="0" ViewCount="40" Body="&lt;p&gt;I have an Orange Pi which I would like to use as the computer for a robotic project. It supplies around 15&amp;nbsp;mAh power directly from the board, barely enough for a single LED so I will have to use a motor controller and an external power supply. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is, is there a limit to how big of a motor I use with this small orange Pi zero? As long as I have the appropriate power supply and controller for the motor I feel it shouldn't be an issue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What are some things to keep in mind?&lt;/p&gt;&#xA;" OwnerUserId="17342" LastEditorUserId="9176" LastEditDate="2017-06-25T14:08:14.437" LastActivityDate="2017-06-25T14:08:14.437" Title="Motor Controller Power Supply" Tags="&lt;mobile-robot&gt;&lt;control&gt;&lt;motor&gt;&lt;microcontroller&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12682" PostTypeId="2" ParentId="12681" CreationDate="2017-06-22T20:04:19.953" Score="2" Body="&lt;p&gt;Dependings on what type of motor driver you use...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you drive transistors directly from an orange PI output, you need to make sure that the PI can supply enough current to saturate the transistors (this is mainly true for BJT type transistors, less problematic for FET or IGBTs, which you most probably drive with a transistor driver). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the transistor gates are not driven directly (e.g. are optically isolated or you have a transistor driver IC) by the PI you only need to make sure that the voltage levels of the PI and the IC driving the transistors match.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the motor driver is driven by an analog signal (e.g. 4-20mA signal or 0-10V signal) driving it directly from the PI will probably be problematic since max current for the first case or max voltage for the second case probably cannot be achieved. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If there is a communication protocol between the transistor driver and the motor driver unit, maximum current will definitely not be an issue. In this case you need to match the communication protocol pins (e.g. i2c or SPI)&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2017-06-22T20:04:19.953" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12683" PostTypeId="1" AcceptedAnswerId="12765" CreationDate="2017-06-22T20:06:02.093" Score="4" ViewCount="194" Body="&lt;p&gt;I have a state space model which look like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\ \begin{bmatrix} \dot{x} \\ \\\dot{\tilde{x}} \end{bmatrix} =\begin{bmatrix} A - BL&amp;amp; BL \\ 0 &amp;amp; A-KC \end{bmatrix} \begin{bmatrix} x\\ \tilde{x} \end{bmatrix}+\begin{bmatrix} B &amp;amp; I &amp;amp; 0\\ 0 &amp;amp; 0 &amp;amp; K \end{bmatrix}\begin{bmatrix} r\\ d\\ n \end{bmatrix}\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{bmatrix} y\\ e \end{bmatrix} = \begin{bmatrix} C &amp;amp;0 \\ 0&amp;amp; C \end{bmatrix}\begin{bmatrix} x\\ \tilde{x} \end{bmatrix} + \begin{bmatrix} 0 &amp;amp; 0 &amp;amp;0 \\ 0 &amp;amp; 0 &amp;amp;1 \end{bmatrix}\begin{bmatrix} r\\ d\\ n \end{bmatrix} &#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This state space model represents this picture:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/XpqhH.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XpqhH.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you still not understand how. Look at this video:&#xA;&lt;a href=&quot;https://youtu.be/H4_hFazBGxU?t=2m13s&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://youtu.be/H4_hFazBGxU?t=2m13s&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Notice the estimation error: $\tilde{x} = x - \hat{x}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I've made som Octave code which are very similar to MATLAB code if you have the MATLAB control package installed. Octave have a free control package and symbolic package to use.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;clc&#xA;clear&#xA;&#xA;% ladda bibliotek - Load GNU octave library - Free to download &#xA;pkg load symbolic&#xA;pkg load control&#xA;&#xA;&#xA;% Parametrar &#xA;m1 = 10; m2 = 7; M = 1000;&#xA;Ap = 40; Am = 20; &#xA;Pp = 20; Pm = 10;&#xA;b1 = 3000; b2 = 1000;&#xA;L = 0.1; g = 9.82; mu = 0.3;&#xA;&#xA;% Tillstånd vid statiskt - When this model are a statical point &#xA;% the state are:&#xA;x1 = 0.65;&#xA;x2 = 0; &#xA;x3 = 0.2;&#xA;x4 = 0;&#xA;x5 = 5*pi/180;&#xA;x6 = 0;&#xA;&#xA;% Symboliska variabler&#xA;syms k1 k2 k3&#xA;&#xA;% Statisk beräkning - Statistical calculations using symbolic solve&#xA;Equation1 = -k1/m1*x1 + k1/m1*x3 - b1/m1*x2 + b1/m1*x4 + Ap*10/m1*Pp - Pm*Am*10/m1*x2;&#xA;Equation2 = k1/M*x1 - k1/M*x3 + b1/M*x2 - b1/M*x4 - g*mu*x4 - k2/M*x3 + k2*L/M*x5;&#xA;Equation3 = 3*k2/(m2*L)*x3 - 3*k2/m2*x5 - 3*k3/(m2*L^2)*x5 - 3*b2/(m2*L^2)*x6 + 3*g/(2*L)*x5;&#xA;&#xA;&#xA;[k1, k2, k3] = solve(Equation1 == 0, Equation2 == 0, Equation3 == 0, k1, k2, k3);&#xA;k1 = double(k1);&#xA;k2 = double(k2);&#xA;k3 = double(k3);&#xA;&#xA;% Dynamisk beräkning - Dynamical calculations for the state space model&#xA;A = [0 1 0 0 0 0;&#xA;     -k1/m1 (-b1/m1-Pm*Am*10/m1) k1/m1 b1/m1 0 0;&#xA;     0 0 0 1 0 0;&#xA;     k1/M b1/M (-k1/M -k2/M) (-b1/M -g*mu) k2*L/M 0;&#xA;     0 0 0 0 0 1;&#xA;     0 0 3*k2/(m2*L) 0 (-3*k2/m2 -3*k3/(m2*L^2) + 3*g/(2*L)) -3*b2/(m2*L^2)];&#xA;&#xA;B = [0; Ap*10/m1; 0 ; 0; 0; 0]; % Input matrix&#xA;C = [0 1 0 0 0 0]; % Output matrix&#xA;I = [0; 1; 0 ; 0; 0; 0]; % Disturbance matrix. &#xA;&#xA;% LQR&#xA;Q = diag([0 0 0 40 0 0]);&#xA;R = 0.1;&#xA;L = lqr(A, B, Q, R); % The control law - LQR gain matrix&#xA;&#xA;% LQE&#xA;Vd = diag([1 1 1 1 1 1]);&#xA;Vn = 1;&#xA;K = (lqr(A',C',Vd,Vn))'; % A way to use LQR command to compute the Kalman gain matrix&#xA;&#xA;% LQG&#xA;a = [(A-B*L) B*L; zeros(6,6) (A-K*C)];&#xA;b = [B I zeros(6,1); zeros(6,1) zeros(6,1) K];&#xA;c = [C zeros(1,6); zeros(1,6) C];&#xA;d = [0 0 0; 0 0 1];&#xA;sysLQG = ss(a, b, c, d);&#xA;&#xA;% Simulate the LQG with disturbance and white gaussian noise&#xA;t = linspace(0, 2, 1000);&#xA;r = linspace(20, 20, 1000);&#xA;d = 70*randn(size(t));&#xA;n = 0.1*randn(size(t));&#xA;x0 = zeros(12,1);&#xA;lsim(sysLQG, [r' d' n'], t, x0)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This will result if I got noise $0.1*randn(size(t))$ . $y1 = y$ and $y2 = e$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gqG2m.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gqG2m.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But let say I got no noise at all! I got this: &#xA;&lt;a href=&quot;https://i.stack.imgur.com/yPWGB.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/yPWGB.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That means that $\tilde{x}$ has no function at all! Something is wrong. I have tried diffrent values at the $C$ matrix, but have not get an estimation error to look at. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Question:&lt;/strong&gt; $$ $$&#xA;What is wrong with my model? I want to control this so the model and stand against the disturbance and noise. But now, the model just accepting the disturbance and noise. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does the observer(kalmanfilter) need to have disturbance too? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt; $$ $$&#xA;If I simulate this new state space model with the same options and code I had before:&#xA;$$&#xA;\ \begin{bmatrix} \dot{x} \\ \\\dot{\tilde{x}} \end{bmatrix} =\begin{bmatrix} A - BL&amp;amp; BL \\ 0 &amp;amp; A-KC \end{bmatrix} \begin{bmatrix} x\\ \tilde{x} \end{bmatrix}+\begin{bmatrix} B &amp;amp; B &amp;amp; 0\\ 0 &amp;amp; B &amp;amp; K \end{bmatrix}\begin{bmatrix} r\\ d\\ n \end{bmatrix}\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{bmatrix} y\\ e \end{bmatrix} = \begin{bmatrix} C &amp;amp;0 \\ 0&amp;amp; C \end{bmatrix}\begin{bmatrix} x\\ \tilde{x} \end{bmatrix} + \begin{bmatrix} 0 &amp;amp; 0 &amp;amp;0 \\ 0 &amp;amp; 0 &amp;amp;1 \end{bmatrix}\begin{bmatrix} r\\ d\\ n \end{bmatrix} &#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I get this. All I did was to add disturbance to the kalmanfilter too. And insted of $I$ matrix, I replace it with $B$ matrix. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/S0UPe.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/S0UPe.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the problem is that if I simulate an LQR with only state feedback, not the kalmanfilter (observer). I get this:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/jjknH.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/jjknH.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are both red and green color in this picture. You have to zoom in. The red color is the LQG simulation and the green color is the LQR simulation(the simulation wihout the kalmanfilter). You can se that the kalmanfilter does not filter anything. Why?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a short code sample:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;% LQG&#xA;a = [(A-B*L) B*L; zeros(6,6) (A-K*C)];&#xA;b = [B B zeros(6,1); zeros(6,1) B K];&#xA;c = [C zeros(1,6); zeros(1,6) C];&#xA;d = [0 0 0; 0 0 1];&#xA;sysLQG = ss(a, b, c, d);&#xA;&#xA;% Simulate the LQG with disturbance and no white gaussian noise&#xA;t = linspace(0, 2, 1000);&#xA;r = linspace(20, 20, 1000);&#xA;d = 2*randn(size(t));&#xA;n = 0*randn(size(t));&#xA;x0 = zeros(12,1);&#xA;[yLQG, t, xLQG] = lsim(sysLQG, [r' d' n'], t, x0);&#xA;&#xA;% Simulera LQR med störning &#xA;sysLQR = ss(A-B*L, [B B], C, [0 0])&#xA;x0 = zeros(6,1);&#xA;[yLQR, t, xLQR] = lsim(sysLQR, [r' d'], t, x0);&#xA;&#xA;plot(t, yLQR, 'g', t, yLQG(:,1), 'r');&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="17252" LastEditorUserId="17252" LastEditDate="2017-06-23T11:22:30.413" LastActivityDate="2017-07-05T09:12:04.013" Title="Why doesn't this kalmanfilter filter anything? Reduce disturbances and noises with LQG controller" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;kalman-filter&gt;&lt;matlab&gt;&lt;noise&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12684" PostTypeId="1" AcceptedAnswerId="12698" CreationDate="2017-06-22T21:52:29.623" Score="0" ViewCount="190" Body="&lt;p&gt;Arduino is a digital mikrocontroller. But I wonder if it's possible to implement an continuous time feedback regulator in an Arduino microprocessor?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Continuous time feedback regulators such as PID:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;K = P(e(t)-D\frac{\mathrm{d} }{\mathrm{d} x}e(t) + I\int_{0}^{\infty} e(t) dt)&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or LQG regulator (this is a LQR with kalmanfilter only, not the model):&#xA;$$&#xA;\dot{\hat{x}} = (A - KC)\hat{x} + Bu + Ky + Kn - KC\hat{x}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;u = r - K\hat{x} $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or do it need to be a digital feedback regulator?  I mean....those feedback regulators works exellent by using operational amplifiers. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that operational amplifier works in real time. But an Arduino working in 16 Mhz speed, and that's very fast too. &lt;/p&gt;&#xA;" OwnerUserId="17252" LastActivityDate="2017-06-26T18:20:56.363" Title="Can I implement continuous time feedback regulator in an Arduino microcontroller?" Tags="&lt;arduino&gt;&lt;control&gt;&lt;microcontroller&gt;&lt;kalman-filter&gt;&lt;matlab&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12686" PostTypeId="1" CreationDate="2017-06-23T19:18:24.427" Score="3" ViewCount="422" Body="&lt;p&gt;I have an MPU6050 IMU and I would like to mount it on an FSAE car and use it to measure the yaw, pitch, roll, and angular velocities as it drives. As it's impossible to mount it perfectly flat and align the IMU axes with the axes of the car, I am looking for a way to calibrate and compensate for the rotational offset of the car's frame and the IMU's frame. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the IMU I can get quaternions, Euler angles, raw acceleration and angular velocity data, or yaw, pitch, and roll values. I imagine the solution will involve matrix and trig calculations, but I didn't pay nearly enough attention in multivariable calc to figure this out.&lt;/p&gt;&#xA;" OwnerUserId="17350" LastEditorUserId="9176" LastEditDate="2017-06-25T14:07:16.193" LastActivityDate="2019-09-19T18:49:44.973" Title="Compensation for IMU mounting misalignment" Tags="&lt;kinematics&gt;&lt;imu&gt;&lt;accelerometer&gt;&lt;gyroscope&gt;&lt;motion&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12687" PostTypeId="2" ParentId="12686" CreationDate="2017-06-23T20:49:34.607" Score="3" Body="&lt;p&gt;You need the transformation from the car to the IMU. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can get this by recording the IMU published attitude with the car in known orientations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should be able to construct the IMU to car transformation by grabbing the IMU orientation while the car is flat, pitched up a bit (30 deg would should enough), and rolled (again, 30 deg should be enough).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using the three known car attitudes and the three measured IMU attitudes you should be able to construct the car IMU transformation.&lt;/p&gt;&#xA;" OwnerUserId="8842" LastActivityDate="2017-06-23T20:49:34.607" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12688" PostTypeId="1" AcceptedAnswerId="12697" CreationDate="2017-06-24T17:14:07.897" Score="0" ViewCount="232" Body="&lt;p&gt;This is a kalmanfilter&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/eM2QC.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/eM2QC.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can see, the process noise(disturbance) is not going to the kalmanfilter. But the state space model for the state feedback system is written as this: &lt;a href=&quot;https://youtu.be/H4_hFazBGxU?t=5m43s&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://youtu.be/H4_hFazBGxU?t=5m43s&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what is right and what is wrong? Should a kalmanfilter have disturbance as input too?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Like this. With disturbance as input:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\ \begin{bmatrix} \dot{x} \\ \\\dot{\tilde{x}} \end{bmatrix} =\begin{bmatrix} A - BL&amp;amp; BL \\ 0 &amp;amp; A-KC \end{bmatrix} \begin{bmatrix} x\\ \tilde{x} \end{bmatrix}+\begin{bmatrix} I &amp;amp; 0\\ I &amp;amp; K \end{bmatrix}\begin{bmatrix} d\\ n \end{bmatrix}\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or this. Without disturbance as input:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\ \begin{bmatrix} \dot{x} \\ \\\dot{\tilde{x}} \end{bmatrix} =\begin{bmatrix} A - BL&amp;amp; BL \\ 0 &amp;amp; A-KC \end{bmatrix} \begin{bmatrix} x\\ \tilde{x} \end{bmatrix}+\begin{bmatrix} I &amp;amp; 0\\ 0 &amp;amp; K \end{bmatrix}\begin{bmatrix} d\\ n \end{bmatrix}\&#xA;$$&lt;/p&gt;&#xA;" OwnerUserId="17252" LastActivityDate="2017-10-24T17:18:27.480" Title="Should the kalmanfilter have disturbance as input?" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;kalman-filter&gt;&lt;matlab&gt;&lt;noise&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12689" PostTypeId="1" AcceptedAnswerId="12736" CreationDate="2017-06-25T06:22:41.943" Score="3" ViewCount="748" Body="&lt;p&gt;RC Servos are great because they are low cost, widely available, easy to control, and pretty accurate.  One disadvantage is that they usually have very limited range of motion.  This is because they are mostly for use on actuating RC control surfaces that rarely move more than 120 degrees.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/6wqS3.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6wqS3m.jpg&quot; alt=&quot;various rcservos&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Our FTC robotics teams uses them a lot; but, often we need to rotate more than 120 deg and often would like 360 deg or more.  Robot design requires the solution to be small and light weight as it will usually be at the end of an extension arm.  The game rules (and practicality) requires the solution to use a 3-wire RC servo.  Also, space and alignment issues usually make using external gear sets problematic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Last season we needed a large &quot;grabber&quot; at the end of our arm and resorted to using a continuous rotation servo the rotated until it torque limited.  This worked but was far from ideal as it over-stressed the servo and we had minimal control on the &quot;grabber&quot; - we could open it or close it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Our ideal solution would be small, light-weight, and inexpensive (add less than 50% to the weight, cost, or the length of any dimension of motor).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given our constraints, how can we rotate an axis more than 360 deg and still maintain positional accuracy?&lt;/p&gt;&#xA;" OwnerUserId="462" LastEditorUserId="37" LastEditDate="2018-08-15T15:15:51.630" LastActivityDate="2018-08-15T15:15:51.630" Title="How can I use an RC servo to rotate more than 360 deg and still maintain positional accuracy?" Tags="&lt;rcservo&gt;&lt;first-robotics&gt;" AnswerCount="1" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12691" PostTypeId="2" ParentId="7864" CreationDate="2017-06-25T18:15:25.477" Score="1" Body="&lt;p&gt;Regarding the first statement in your question:&#xA;&quot;I know that RC servo motors are designed for precise movement, rather than a D.C. motors' continual rotation. Are most RC servo motors limited to movement within one rotation or can they actually be made to continually rotate?&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;A Continuous Rotation RC Servo is NOT a Servo&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is why&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;What is a Servo&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A &lt;a href=&quot;https://en.wikipedia.org/wiki/Servomotor&quot; rel=&quot;nofollow noreferrer&quot;&gt;Servo (Servomotor)&lt;/a&gt; is a motor with a position sensor and a closed-loop controller that adjusts the motor power to assure the motor is accurately held at the commanded position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;What is an RC Servo&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An RC Servo is a small DC motor geared down to a drive shaft that has a &lt;a href=&quot;https://www.youtube.com/watch?v=cnOKG0fvZ4w&quot; rel=&quot;nofollow noreferrer&quot;&gt;potentiometer (rotary resistor)&lt;/a&gt; for its position sensor and is controlled by a pulse train.  The width of the pulse (PW) determines the drive shaft position. The controller compares the PW to the potentiometer position and the motor is driven to compensate for the error.  In a typical RC Servo, a 1.5 ms pulse is center position.  For an example, in this case, the pulse is compared to the center resistance value of potentiometer.  If the potentiometer is at its center value, no power is applied to the motor.  If, however, the servo is clockwise (CW) of center then the potentiometer value will be lower and the servo controller will apply power to turn the motor counter-clockwise (CCW) to bring it back to center. The bigger the error, the more power will be applied to the motor.  If the error is in the opposite direction, the motor will be driven CW.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The advantage of this design is that you can produce a very light weight servo out of small inexpensive components.  The limitation of this design is that the travel of the drive shaft is limited by the rotational travel of the potentiometer.  For RC that is not generally an issue as RC servos are usually used to drive control services that have very limited travel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Why a &quot;Continuous Rotation&quot; RC Servo is not a Servo&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As @Greenonline mentioned, you can modify an RC Servo for continuous rotation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note is the &lt;a href=&quot;https://www.youtube.com/watch?v=cnOKG0fvZ4w&quot; rel=&quot;nofollow noreferrer&quot;&gt;video&lt;/a&gt; what they guy does&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;He removes the end stop that protects the potentiometer&lt;/li&gt;&#xA;&lt;li&gt;He cuts the wires from the controller to the potentiometer and connects a fixed resistor&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;So, going back to my description of an RC Servo, what does that result in?&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Since the position sensor (potentiometer) is gone, there is no longer a control loop so it is no longer a Servo.&lt;/li&gt;&#xA;&lt;li&gt;If you were to send in a PW of 1.5 ms, the controller would see the resistance at center point and would not apply power to the motor.&lt;/li&gt;&#xA;&lt;li&gt;If you were to send in a PW of &amp;lt;1.5 ms (commanding a position CCW of center), the controller would see the resistance at center point and drive the motor CCW to get there (which it never will) and hence it will rotate continuously CCW.&lt;/li&gt;&#xA;&lt;li&gt;Because there is no feedback control you will not be able to rely on the speed or accuracy of the motor; but, you will have a small DC motor that you can command using a RC Servo controller (or a using a PW)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="462" LastEditorUserId="462" LastEditDate="2017-06-28T19:01:18.930" LastActivityDate="2017-06-28T19:01:18.930" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="12693" PostTypeId="1" CreationDate="2017-06-26T00:26:02.290" Score="1" ViewCount="797" Body="&lt;p&gt;I'm repairing (hopefully) a 12 V DC motor (Johnson Electric HC971(2)LG-101).&lt;/p&gt;&#xA;&lt;p&gt;The motor has a coil in the motor cap between each terminal and the corresponding brush - two coils (inductors) one on each side of the armature electrically speaking. It also has what I think is a resistor on one side and what I think is a (broken) capacitor between the two terminals.&lt;/p&gt;&#xA;&lt;p&gt;What is the function of the two inductors in series between the terminals and brushes?&lt;/p&gt;&#xA;&lt;p&gt;I'm sure this info it's out there somewhere but I haven't found it online after several days of searching.&lt;/p&gt;&#xA;" OwnerUserId="17366" LastEditorUserId="9176" LastEditDate="2020-08-21T16:29:44.150" LastActivityDate="2020-08-21T16:29:44.150" Title="What is the function of inductors in series between the terminals and the brushes of a DC motor?" Tags="&lt;motor&gt;&lt;electric&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="12694" PostTypeId="2" ParentId="12693" CreationDate="2017-06-26T02:22:20.457" Score="1" Body="&lt;p&gt;Likely the series induction prevent higher frequencies from making it back from the motor to the power supply. The inductors looks like an open circuit to higher frequencies. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A parallel capacitor can also help as it shorts the higher frequencies preventing them from getting back to the power supply.&lt;/p&gt;&#xA;" OwnerUserId="17364" LastActivityDate="2017-06-26T02:22:20.457" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12696" PostTypeId="2" ParentId="11962" CreationDate="2017-06-26T06:02:52.843" Score="1" Body="&lt;p&gt;With plastic holes especially on Servo Horns, the best solution is to use screws that are slightly bigger than the hole. Depending on the strength needed for this connection there are two methods which would work. &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Add screws to every hole&lt;/li&gt;&#xA;&lt;li&gt;Buy Metal Servo Horn with tapped holes &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="17285" LastActivityDate="2017-06-26T06:02:52.843" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12697" PostTypeId="2" ParentId="12688" CreationDate="2017-06-26T15:38:07.683" Score="1" Body="&lt;p&gt;I don't like the format you're using, with $\tilde{x}$, because it masks the fact that it is actually $x-\hat{x}$. In generally, you don't actually care about the state error; what you really should care about are the states themselves. The state error &lt;em&gt;drives&lt;/em&gt; your state estimates to be equal to the actual states (eventually), but beyond that they shouldn't really be providing any useful information. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I say this because, as written, it &lt;em&gt;looks&lt;/em&gt; like the actual system states $x$ aren't a part of your state error calculations because there's a big fat zero in the bottom-left of the system matrix. In reality though, again, you've masked the fact that you're actually using the system states twice - once directly as $x$ and then again as $x - \hat{x}$. There's a zero in the bottom-left of the system matrix because it's &lt;em&gt;redundant&lt;/em&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;All this is a preface to two points:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Your input disturbances $d$ will propagate to the Kalman filter naturally because they affect the system states, which in turn are measured and used as part of the input to the Kalman filter, AND&lt;/li&gt;&#xA;&lt;li&gt;You &lt;em&gt;can't&lt;/em&gt; include input disturbances in a Kalman filter in real life because you can't measure them, in the same way you can't &quot;know&quot; what the measurement noise is.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Use the first form. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-06-26T15:38:07.683" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="12698" PostTypeId="2" ParentId="12684" CreationDate="2017-06-26T17:12:12.617" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;continuous time feedback regulator in an Arduino microprocessor.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You can get at most a very accurate &lt;strong&gt;approximation&lt;/strong&gt; of the continuous time system using Arduino by converting the continuous time model of your system into a discrete-time version: once you have the transfer function of you continuous time control system (filter or controller) you can operate a discretization through some well-known method such as the &#xA;Bilinear transform and then obtaining the digital (dicrete-time) version to implement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS: do not confuse the &lt;a href=&quot;https://en.wikipedia.org/wiki/Real-time_computing&quot; rel=&quot;nofollow noreferrer&quot;&gt;real-time&lt;/a&gt; with the continuous time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: Every time you deal with the &quot;digital world&quot; (memories, sample&amp;amp;hold processing) you need a discrete-time version of your continuous time model. You cannot directly implement it as it is (beside using an automatic code generator, but even in that case an automatic conversion continuous-to-discrete is also needed).&#xA;Just to have an example, if you have a simple low-pass filter, easy to build with analog electronic components (resistor and capacitor) as:&#xA;$$W(s) = \frac{1}{1+sRC}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;to implement it into a discrete-time system (such as microcontroller) you need its discrete time version which will have &lt;strong&gt;comparable&lt;/strong&gt; performance under certain conditions:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$W(z) = {\frac  {1+z^{{-1}}}{(1+2RC/T)+(1-2RC/T)z^{{-1}}}}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The most important thing to observe when a model of a system is converted is &lt;a href=&quot;https://en.wikipedia.org/wiki/Nyquist%E2%80%93Shannon_sampling_theorem&quot; rel=&quot;nofollow noreferrer&quot;&gt;Nyqvist-Shannon sampling theorem&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="17372" LastEditorUserId="17372" LastEditDate="2017-06-26T18:20:56.363" LastActivityDate="2017-06-26T18:20:56.363" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12701" PostTypeId="1" AcceptedAnswerId="12705" CreationDate="2017-06-26T20:56:57.217" Score="4" ViewCount="1650" Body="&lt;p&gt;I hope you can help me and this is the right forum to ask.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the process of building and programming my own Quadcopter, I encountered the term Euler angles. I took some time to understand them and then wondered why they are used in multicopter systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my understanding Euler angles are used to rotate a point or vector in a coordinate system/ to express that rotation. I now wonder why i should use Euler angles to compute the orientation of the quadcopter as I could easily(at least i think so) compute the angles by themself, like&#xA;$$&#xA;\theta = arctan(y/z)&#xA;$$&#xA;$$&#xA;\phi = arctan(x/z)&#xA;$$&#xA;(just using accelerometer, where $x, y, z$ are axis accelerations and $\theta, \phi$ are pitch and roll, respectively. In the actual implementation I do &lt;em&gt;not&lt;/em&gt; only use the accelerometer, this is just simplified to make the point clear).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where exactly are Euler angles used?&#xA;Are they only used to convert desired trajectory in the earth frame to desired trajectory in the Body frame?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would be very glad if anyone could point this out and explain the concept/ why and where they are used further.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To clarify: I do know that Euler angles encounter gimbal lock, that they are three rotations about $x, y, z$ axis and &#xA;how they generally work(I think). @Christo gave a very good explanation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question now is, why are &lt;em&gt;they&lt;/em&gt; used? Isn't it counterproductive to apply the yaw rotation, then pitch, and then roll?&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;-Earth frame X,Y,Z&#xA;rotation about Z(psi)&#xA;-&amp;gt;Frame 1 x', y', z'&#xA;rotation about y'(theta)&#xA;-&amp;gt;Frame 2 x'', y'', z''&#xA;rotation about x''(phi)&#xA;-&amp;gt;Body frame x, y, z&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and vice versa.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why? I would just have said:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;pitch = angles between X and x&#xA;roll = angle between Y and y&#xA;yaw = angle between x-y-projection of the magnetic field-vector and the starting vector(yaw is kinda different).&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(Notice the difference between uppercase and lowercase, look at the Earth-to-Body-Frame for notation).&#xA;Tied with this i wonder why the correct formula for pitch($\theta)$ should be $$\theta = \tan^{-1}\left(-f_x/\sqrt{f_y^2+f_z^2}\right)$$&#xA;I would have thought $$\theta = \tan^{-1}\left(-f_x/f_z\right)$$ suffices.&#xA;Maybe I have some flaw in my knowledge or a piece of the puzzle is still missing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope this is understandable, if not feel free to ask. If this gets too crowded, I can always ask another question, just make me aware of it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If anyone could explain how to use quaternions to express orientation I would be very thankful, but I can also just ask another time. I get the concept of Quaternions, just not how to use them to express &lt;em&gt;orientation&lt;/em&gt; not &lt;em&gt;rotation&lt;/em&gt;.&lt;/p&gt;&#xA;" OwnerUserId="17373" LastEditorUserId="9176" LastEditDate="2017-06-28T08:20:52.883" LastActivityDate="2017-08-30T08:39:20.093" Title="Multicopter: What are Euler angles used for?" Tags="&lt;quadcopter&gt;&lt;algorithm&gt;&lt;multi-rotor&gt;&lt;orientation&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="12702" PostTypeId="2" ParentId="12701" CreationDate="2017-06-26T21:46:49.213" Score="2" Body="&lt;p&gt;Your own equations make a lot of assumptions about the problem you are trying to solve. They are sufficient to solve your problem, but will not work for certain conditions (z = 0 for instance). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Euler angles are similar. A way describe orientation (we typically use orientation to mean all angles, not just pitch and roll as you are using here). Euler angles have limitations similar to your equations and won't work for a lot of situations (Search: gimbal lock). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my own career, I have never used euler angles. I find them confusing since there are so many permutations of them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Direction cosines (3x3 rotation matrices) are much easier to visualize for me and I use them when doing things by hand. Since they are also the primary way to do transforms, it's also the way that most use to do calculations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Quaternions work great for calculation. Convert your orientation to a quaternion using the typical equations, do your slerp or whatever, and convert them back to an orientation when you need to transform coordinates or vectors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My recommendation would be to learn to use rotation matrices and quaternions when working with orientations, and leave representations that use angles to the primary school kids.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2017-06-26T21:46:49.213" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12703" PostTypeId="1" CreationDate="2017-06-26T23:51:39.813" Score="3" ViewCount="583" Body="&lt;p&gt;As part of a project I need an encoder to determine the angle that this, &lt;a href=&quot;https://www.adafruit.com/product/154&quot; rel=&quot;nofollow noreferrer&quot;&gt;Continuous Rotation Servo - FeeTech FS5103R&lt;/a&gt;, has rotated through. The resolution needs to be fairly high as I will be using it to automate a process and so I want to make sure it's accurate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The shaft it will be mounted to will be custom built so I'm just looking for standalone encoders right now. What are the pros and cons of different styles of rotary encoders?&lt;/p&gt;&#xA;" OwnerUserId="17374" LastEditorUserId="9176" LastEditDate="2017-06-28T08:18:14.617" LastActivityDate="2017-06-28T08:18:14.617" Title="High Res Rotary Encoders" Tags="&lt;arduino&gt;&lt;sensors&gt;&lt;servomotor&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="2" ClosedDate="2017-06-28T15:36:16.010" ContentLicense="CC BY-SA 3.0" />
  <row Id="12704" PostTypeId="2" ParentId="12703" CreationDate="2017-06-27T04:10:34.497" Score="1" Body="&lt;p&gt;RC Servos are servos that use a potentiometer as their position sensor.&#xA;To make a continuous rotation RC servo, the potentiometer is replaced with a fixed resistor so the servo loop is lost and thus the accuracy and position information as well. &#xA;See &lt;a href=&quot;https://robotics.stackexchange.com/questions/7864/can-rc-servo-motors-continually-rotate/12691#12691&quot;&gt;A Continuous Rotation RC Servo is NOT a Servo&lt;/a&gt; for more details.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BUT... if you do the modification yourself (like is the guy in this &lt;a href=&quot;https://www.youtube.com/watch?v=cnOKG0fvZ4w&quot; rel=&quot;nofollow noreferrer&quot;&gt;video&lt;/a&gt; did) then the potentiometer is still there and it should provide a really inexpensive and pretty accurate way to know the motor's position.  To use it, route the wires out and use an Analog Input on your processor to measure the absolute position of the motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;OK, here it where I divert into something I believe will work but haven't tested.  I believe if you alter the procedure to ONLY cut the center wire to the potentiometer and still do the rest of the modification then route that center wire out, the wire will have a voltage that represents the location of the motor shaft.  This is because the outer wires are just to provide power and powering both resistor stacks should not be a problem and the voltage on the wire will be a voltage between the servo supply voltage and ground.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another option is to use an actual optical encoder.  Note that this is a significantly more expensive and complicated solution because:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Optical encoders can be expensive&lt;/li&gt;&#xA;&lt;li&gt;You will need to figure a way to directly couple the encoder to the shaft.&lt;/li&gt;&#xA;&lt;li&gt;If you get a standard quadrature encoder, you will need to add a home sensor since the encoder (unlike the potentiometer) has no concept of absolute position&lt;/li&gt;&#xA;&lt;li&gt;You will have to know how to decode and use quadrature signals to count position.  This is really easy to mess up for cases like an encoder vibrating on an edge.&lt;/li&gt;&#xA;&lt;li&gt;You will also need to make sure your design is fast enough that you can catch all the transitions when running at full speed (interrupt based or custom hardware).  For a 1024 count encoder and a 55rpm motor then your are going to need to sample the encoder at least every 500us or faster.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;.... shall I continue&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would recommend you use the potentiometer in the servo.&lt;/p&gt;&#xA;" OwnerUserId="462" LastEditorUserId="462" LastEditDate="2017-06-27T20:10:31.567" LastActivityDate="2017-06-27T20:10:31.567" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12705" PostTypeId="2" ParentId="12701" CreationDate="2017-06-27T05:22:58.680" Score="0" Body="&lt;p&gt;Euler angle can be used to describe the orientation of the quadcopter relative to the local level surface and relative to a azimuth reference (typically true north). The roll ($\phi$) and pitch ($\theta$) angles describe the tilt of the quadrotor relative to the local vertical; i.e., relative to the gravity vector.  The yaw angle ($\psi$) describes the amount of rotation around the local vertical direction. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typically, the roll and pitch angles are used to control the direction of the quadcopter's total thrust vector.  If they are zero, the thrust vector will point directly upwards, opposite to the direction of the gravity vector. Non-zero values of roll and pitch can be used to tilt the thrust vector so that the resultant horizontal component of the thrust vector can be used for translational motion. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is generally not a good idea to use accelerometer measurements to calculate roll and pitch angles:&lt;br&gt;&#xA;Accelerometers measure the specific force vector in body axes.  Three accelerometers aligned along the body axes will measure&#xA;\begin{eqnarray}&#xA;f_x &amp;amp;=&amp;amp; a_x-g\sin\theta \\&#xA;f_y &amp;amp;=&amp;amp; a_y+g\cos\theta\sin\phi \\&#xA;f_z &amp;amp;=&amp;amp; a_z+g\cos\theta\cos\phi&#xA;\end{eqnarray}&#xA;where $a_x$, $a_y$, and $a_z$ are components of the kinematic acceleration in body axes, and $g$ is the acceleration due to gravity.  If your Quadcopter is &lt;em&gt;not&lt;/em&gt; accelerating, such as when it is stationary, the $a_x$, $a_y$, and $a_z$ components become zero. And &lt;em&gt;only then&lt;/em&gt; can you use the accelerometer measurements to calculate the roll and pitch angles:&#xA;\begin{eqnarray}&#xA;\phi &amp;amp;=&amp;amp; \tan^{-1}\left(f_y/f_z\right) \\&#xA;\theta &amp;amp;=&amp;amp; \tan^{-1}\left(-f_x/\sqrt{f_y^2+f_z^2}\right)&#xA;\end{eqnarray}&#xA;This is a common method used to initialize the roll and pitch angles in a stationary IMU.  In flight, the accelerometers will also measure the components of its kinematic acceleration and the equations given above cannot be used to measure the roll and pitch angles. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Euler angles is one of three methods commonly used to describe the orientation of the quadcopter relative to the earth.  The other two are quaternions, and  direction cosines.  Each of these methods have advantages and disadvantages, and we can easily convert from one representation to another.  But, this a probably a topic for a next question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit: Description of Conventional Euler Angles&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, we need to define two Cartesian frames with their origins located at the centre of mass of the quadrotor.  The body frame is fixed to the vehicle, with its $x$-axis parallel to the plane of the rotors pointing &quot;forward&quot;, its $y$-axis is parallel to the plane of the rotors and perpendicular to the $x$-axis pointing to the right, and its $z$-axis perpendicular to the $xy$-plane pointing down. The origin of the local-level local north (LLLN) frame translates with the body frame, but always remain level with its $N$-axis pointing north, its $E$-axis pointing east, and its $D$-axis pointing down. The orientation of the quadrotor relative to the Earth is then described by the orientation of the body frame relative to the LLLN frame.  Euler angles are a set of three rotations taken about a single axis at a time in a specified order to generate the orientation of the body frame relative to the LLLN frame.  The so-called &quot;conventional&quot; Euler angles used in the aerospace industry are yaw ($\psi$), pitch ($\theta$), and roll ($\phi$) obtained from a particular sequence of rotations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the body frame initially aligned with the LLLN frame so that the $x,y,z$ axes are aligned with the $N,E,D$ axes and $\psi=\theta=\phi=0$, or stated differently, that the plane of the rotors is horizontal and the quadrotor's nose is pointing north, perform the following three rotations:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;First, the body frame is rotated through the yaw angle in a positive sense around its $z$-axis. &lt;/li&gt;&#xA;&lt;li&gt;Then the displaced body frame is rotated through the pitch angle in a positive sense around the displaced $y$-axis.&lt;/li&gt;&#xA;&lt;li&gt;Finally, the displaced body frame is rotated through the roll angle in a positive sense around the displaced $x$-axis to obtain its final arbitrary orientation relative to the LLLN frame.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;(Use a little model to visualize these three rotations.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that these three rotations are not commutative (angle are not vectors) so that a different sequence of rotations will result in a different final orientation.&lt;/p&gt;&#xA;" OwnerUserId="13926" LastEditorUserId="13926" LastEditDate="2017-06-27T13:19:38.447" LastActivityDate="2017-06-27T13:19:38.447" CommentCount="14" ContentLicense="CC BY-SA 3.0" />
  <row Id="12706" PostTypeId="1" CreationDate="2017-06-27T13:51:10.090" Score="1" ViewCount="33" Body="&lt;p&gt;Tried searching for this answer in a simple way but can't seem to find the answer..&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a 3 axis Bipolar Nema 17(Took off my 1st 3d printer =) ) robotic arm(Homemade) and provides 28oz-57oz of Torque as per datasheet,  now i am trying to figure out how much that can lift in Grams/lbs&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anybody help?? Or if someone can give me a REALLY Simplified version on how to calculate and get the answer myself, which would be useful for future projects.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanxs&#xA;P&lt;/p&gt;&#xA;" OwnerUserId="17381" LastActivityDate="2017-06-27T13:51:10.090" Title="Stepper Motor Torque" Tags="&lt;robotic-arm&gt;&lt;stepper-motor&gt;&lt;torque&gt;&lt;first-robotics&gt;" AnswerCount="0" CommentCount="1" ClosedDate="2017-06-27T18:29:25.830" ContentLicense="CC BY-SA 3.0" />
  <row Id="12709" PostTypeId="1" AcceptedAnswerId="13895" CreationDate="2017-06-27T17:10:43.943" Score="2" ViewCount="953" Body="&lt;p&gt;So let's say I have a three degrees-of-freedom robot with twists ${\xi}_{1}$, ${\xi}_2$, and ${\xi}_3$. The spatial Jacobian is given by &#xA;$$&#xA;J = \begin{bmatrix}\xi_1 &amp;amp; Ad_{g1}{\xi}_2 &amp;amp; Ad_{g12}{\xi}_3\end{bmatrix}&#xA;$$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that &#xA;$$&#xA;Ad_{g1} = \begin{bmatrix}R_1 &amp;amp; p \times R_1\\ 0 &amp;amp; R_1\end{bmatrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However I am not sure how to calculate $Ad_{g12}$. Do I multiply $Ad_{g1} *Ad_{g2}$ or do I get the Transformation matrix of $\xi_1$ and $\xi_2$ and then use the formula for the adjoint?&lt;/p&gt;&#xA;" OwnerUserId="16911" LastEditorUserId="10414" LastEditDate="2021-01-25T16:24:04.920" LastActivityDate="2021-01-25T16:24:04.920" Title="How to find the Adjoint matrix of multiple twists" Tags="&lt;jacobian&gt;&lt;screw-theory&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12711" PostTypeId="2" ParentId="11971" CreationDate="2017-06-27T21:06:11.417" Score="2" Body="&lt;p&gt;The problem with most papers about &lt;a href=&quot;https://en.wikipedia.org/wiki/Linear%E2%80%93quadratic_regulator&quot; rel=&quot;nofollow noreferrer&quot;&gt;LQR&lt;/a&gt; controller is, that they are describing only the half of whole problem. The key aspect of understanding LQR is that an additional &quot;Finite State Machine&quot; (&lt;a href=&quot;https://en.wikipedia.org/wiki/Finite-state_machine&quot; rel=&quot;nofollow noreferrer&quot;&gt;FSM&lt;/a&gt;) is used which controls the robot. A good paper which combines LQR with FSM for bipedal locomotion is &lt;a href=&quot;http://spiral.imperial.ac.uk:8080/bitstream/10044/1/15225/8/LION8.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Bayesian Gait Optimization for Bipedal Locomotion&lt;/a&gt;&lt;sup&gt;&amp;dagger;&lt;/sup&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The walking modes are given by the FSM and the parameters are optimized with Bayesian optimization. LQR means only that values inside the programcode are adjusted to the robot. This is good if the same code should control a 2 cm leg and also a 3 cm leg. But LQR itself isn't enough for controlling the robot. A dedicated sourcecode in form of a Finite State Machine has to be implemented first. That's the same principle like Walking with neural networks, machine learning or apprenticeship learning works. These stochastic optimization algorithm can only be used for subspace adjusting of a given robot controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;&amp;dagger; Roberto Calandra, Nakul Gopalan, Andre Seyfarth, Jan Peters, and Marc Peter Deisenroth&lt;/sup&gt;&lt;/p&gt;&#xA;" OwnerUserId="14283" LastEditorUserId="37" LastEditDate="2017-06-28T16:51:41.257" LastActivityDate="2017-06-28T16:51:41.257" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12713" PostTypeId="1" AcceptedAnswerId="12714" CreationDate="2017-06-28T08:51:11.690" Score="2" ViewCount="731" Body="&lt;p&gt;I'm new to the field of robotics, so this is a pretty basic question:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm assigned with the task of constructing a linear state space model of a 6DOF robotic arm that moves in 3D space. I believe the goal is to transform the original nonlinear problem to a piecewise linear problem for the purpose of designing a controller based on gain scheduling for example, and thus making use of the powerful linear control techniques and design tools. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm in the process of linearizing the dynamics using the small disturbance theory, but it is a lengthy, time-consuming process that I feel is not very practical considering the alternatives. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is: Is this a common practice in robotics? If not, is it practical and has it ever been done before, or should I consider an alternative approach?&lt;/p&gt;&#xA;" OwnerUserId="16685" LastActivityDate="2017-06-28T13:58:53.003" Title="Linear State Space of a 6DOF robot" Tags="&lt;robotic-arm&gt;&lt;dynamics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12714" PostTypeId="2" ParentId="12713" CreationDate="2017-06-28T13:58:53.003" Score="2" Body="&lt;p&gt;No, this is not a common practice in robotics. You might have heard of an approach sometimes called &quot;computed torque&quot; which is a common implementation of the nonlinear control technique of feedback linearization (based on geometric nonlinear control theory). Most introductory robotics textbooks cover this control technique. Basically, it involves using your model of the robot to cancel out the nonlinear dynamics and provide a stable PD (proportional-derivative) feedback outer loop. It's stability depends on the accuracy of your dynamic model.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem with linearization is that it's based on operation (or disturbance) about a set point. However, your set point (desired joint angles) change drastically when operating a 6DoF robot. You can do a linearization at each time-step but that is usually applied to less complex nonlinear systems and estimation (the Extended Kalman Filter, for example). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also I would only trust using a symbolic math toolbox for your derivations and verify with an independent dynamic model/simulation. It sounds like you might be doing the linearization by hand and I think that is unreasonable for a robotics application with anything other than the simplest 2-3 DoF manipulators. Sympy is free, Matlab has the symbolic toolbox, and Maple is a solid choice as well.&lt;/p&gt;&#xA;" OwnerUserId="10243" LastActivityDate="2017-06-28T13:58:53.003" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="12715" PostTypeId="2" ParentId="6754" CreationDate="2017-06-28T14:23:31.753" Score="2" Body="&lt;p&gt;Long formulas are to be expected. I actually have derived such equations of motion for a planar RRRR manipulator. I assumed real symbolic variables &lt;code&gt;assume(A, 'real')&lt;/code&gt; and run &lt;code&gt;simplify()&lt;/code&gt;. Generating code with MATLAB also creates intermediate variables. For the code output (in C) of a lower-triangular column-major order &lt;code&gt;D(q)&lt;/code&gt; matrix, I got the following (after some manual clean-up):  &lt;/p&gt;&#xA;&#xA;&lt;pre class=&quot;lang-c prettyprint-override&quot;&gt;&lt;code&gt; void Mlt (&#xA;    const double *restrict in,&#xA;    const double *restrict pc,&#xA;    const double *restrict ma,&#xA;    const double *restrict a,&#xA;    const double *restrict q,&#xA;    const double *restrict g,&#xA;    double *restrict M)&#xA;{&#xA;/* inputs *&#xA; * ****** *&#xA;Inertia and mass&#xA;double in[24]; [Ixx, Iyy, Izz, Ixy, Ixz, Iyz]&#xA;double pc[12]; [cog_x, cog_y, cog_z]&#xA;double ma[4]; [mass]&#xA;&#xA;DH parameters&#xA;a is distance along x-axis (linkage length)&#xA;double a[4];&#xA;&#xA;generalized coordinates&#xA;double q[4];&#xA;&#xA;gravitational constant&#xA;double g[1];&#xA; * ****** */&#xA;&#xA;/* outputs *&#xA; * ******* *&#xA;double M[16];&#xA; * ******* */&#xA;&#xA;  double t[64];&#xA;  t[0] = a[0]*a[0];&#xA;  t[1] = a[1]*a[1];&#xA;  t[2] = a[2]*a[2];&#xA;  t[3] = q[1]+q[2];&#xA;  t[4] = cos(t[3]);&#xA;  t[5] = q[2]+q[3];&#xA;  t[6] = cos(t[5]);&#xA;  t[7] = cos(q[1]);&#xA;  t[8] = cos(q[2]);&#xA;  t[9] = cos(q[3]);&#xA;  t[10] = q[1]+q[2]+q[3];&#xA;  t[11] = cos(t[10]);&#xA;  t[12] = ma[1]*t[1];&#xA;  t[13] = ma[2]*t[1];&#xA;  t[14] = ma[3]*t[1];&#xA;  t[15] = ma[2]*t[2];&#xA;  t[16] = ma[3]*t[2];&#xA;  t[17] = a[3]*a[3];&#xA;  t[18] = ma[3]*t[17];&#xA;  t[19] = pc[3]*pc[3];&#xA;  t[20] = ma[1]*t[19];&#xA;  t[21] = pc[6]*pc[6];&#xA;  t[22] = ma[2]*t[21];&#xA;  t[23] = pc[9]*pc[9];&#xA;  t[24] = ma[3]*t[23];&#xA;  t[25] = pc[4]*pc[4];&#xA;  t[26] = ma[1]*t[25];&#xA;  t[27] = pc[7]*pc[7];&#xA;  t[28] = ma[2]*t[27];&#xA;  t[29] = pc[10]*pc[10];&#xA;  t[30] = ma[3]*t[29];&#xA;  t[31] = a[1]*ma[1]*pc[3]*2.0;&#xA;  t[32] = a[2]*ma[2]*pc[6]*2.0;&#xA;  t[33] = a[3]*ma[3]*pc[9]*2.0;&#xA;  t[34] = a[1]*a[3]*ma[3]*t[6]*2.0;&#xA;  t[35] = a[1]*ma[3]*pc[9]*t[6]*2.0;&#xA;  t[36] = sin(t[3]);&#xA;  t[37] = sin(t[5]);&#xA;  t[38] = a[1]*a[2]*ma[2]*t[8]*2.0;&#xA;  t[39] = a[1]*a[2]*ma[3]*t[8]*2.0;&#xA;  t[40] = a[2]*a[3]*ma[3]*t[9]*2.0;&#xA;  t[41] = a[1]*ma[2]*pc[6]*t[8]*2.0;&#xA;  t[42] = a[2]*ma[3]*pc[9]*t[9]*2.0;&#xA;  t[43] = sin(q[1]);&#xA;  t[44] = sin(q[2]);&#xA;  t[45] = sin(q[3]);&#xA;  t[46] = sin(t[10]);&#xA;  t[47] = a[0]*a[2]*ma[2]*t[4];&#xA;  t[48] = a[0]*a[2]*ma[3]*t[4];&#xA;  t[49] = a[0]*ma[2]*pc[6]*t[4];&#xA;  t[50] = a[0]*a[3]*ma[3]*t[11];&#xA;  t[51] = a[0]*ma[3]*pc[9]*t[11];&#xA;  t[52] = a[1]*a[3]*ma[3]*t[6];&#xA;  t[53] = a[1]*ma[3]*pc[9]*t[6];&#xA;  t[54] = a[1]*a[2]*ma[2]*t[8];&#xA;  t[55] = a[1]*a[2]*ma[3]*t[8];&#xA;  t[56] = a[1]*ma[2]*pc[6]*t[8];&#xA;  t[57] = a[2]*a[3]*ma[3]*t[9];&#xA;  t[58] = a[2]*ma[3]*pc[9]*t[9];&#xA;  t[59] = q[0]+q[1]+q[2]+q[3];&#xA;  t[60] = cos(t[59]);&#xA;  t[62] = sin(t[59]);&#xA;  t[61] = a[3]*t[60]+pc[9]*t[60]-pc[10]*t[62];&#xA;  t[63] = a[3]*t[62]+pc[9]*t[62]+pc[10]*t[60];&#xA;  M[0] = in[2]+in[8]+in[14]+in[20]+t[12]+t[13]+t[14]+t[15]+t[16]+t[18]+t[20]+t[22]+t[24]+t[26]+t[28]+t[30]+t[31]+t[32]+t[33]+t[34]+t[35]+t[38]+t[39]+t[40]+t[41]+t[42]+ma[0]*t[0]+ma[1]*t[0]+ma[2]*t[0]+ma[3]*t[0]+ma[0]*(pc[0]*pc[0])+ma[0]*(pc[1]*pc[1])+a[0]*ma[0]*pc[0]*2.0+a[0]*a[2]*ma[2]*t[4]*2.0+a[0]*a[1]*ma[1]*t[7]*2.0+a[0]*a[2]*ma[3]*t[4]*2.0+a[0]*a[1]*ma[2]*t[7]*2.0+a[0]*a[1]*ma[3]*t[7]*2.0+a[0]*a[3]*ma[3]*t[11]*2.0+a[0]*ma[2]*pc[6]*t[4]*2.0+a[0]*ma[1]*pc[3]*t[7]*2.0+a[0]*ma[3]*pc[9]*t[11]*2.0-a[0]*ma[2]*pc[7]*t[36]*2.0-a[1]*ma[3]*pc[10]*t[37]*2.0-a[0]*ma[1]*pc[4]*t[43]*2.0-a[1]*ma[2]*pc[7]*t[44]*2.0-a[0]*ma[3]*pc[10]*t[46]*2.0-a[2]*ma[3]*pc[10]*t[45]*2.0;&#xA;  M[1] = in[8]+in[14]+in[20]+t[12]+t[13]+t[14]+t[15]+t[16]+t[18]+t[20]+t[22]+t[24]+t[26]+t[28]+t[30]+t[31]+t[32]+t[33]+t[34]+t[35]+t[38]+t[39]+t[40]+t[41]+t[42]+t[47]+t[48]+t[49]+t[50]+t[51]+a[0]*a[1]*ma[1]*t[7]+a[0]*a[1]*ma[2]*t[7]+a[0]*a[1]*ma[3]*t[7]+a[0]*ma[1]*pc[3]*t[7]-a[0]*ma[2]*pc[7]*t[36]-a[1]*ma[3]*pc[10]*t[37]*2.0-a[0]*ma[1]*pc[4]*t[43]-a[1]*ma[2]*pc[7]*t[44]*2.0-a[0]*ma[3]*pc[10]*t[46]-a[2]*ma[3]*pc[10]*t[45]*2.0;&#xA;  M[2] = in[14]+in[20]+t[15]+t[16]+t[18]+t[22]+t[24]+t[28]+t[30]+t[32]+t[33]+t[40]+t[42]+t[47]+t[48]+t[49]+t[50]+t[51]+t[52]+t[53]+t[54]+t[55]+t[56]-a[0]*ma[2]*pc[7]*t[36]-a[1]*ma[3]*pc[10]*t[37]-a[1]*ma[2]*pc[7]*t[44]-a[0]*ma[3]*pc[10]*t[46]-a[2]*ma[3]*pc[10]*t[45]*2.0;&#xA;  M[3] = in[20]+t[18]+t[24]+t[30]+t[33]+t[50]+t[51]+t[52]+t[53]+t[57]+t[58]-a[1]*ma[3]*pc[10]*t[37]-a[0]*ma[3]*pc[10]*t[46]-a[2]*ma[3]*pc[10]*t[45];&#xA;  M[5] = in[8]+in[14]+in[20]+t[12]+t[13]+t[14]+t[15]+t[16]+t[18]+t[20]+t[22]+t[24]+t[26]+t[28]+t[30]+t[31]+t[32]+t[33]+t[34]+t[35]+t[38]+t[39]+t[40]+t[41]+t[42]-a[1]*ma[3]*pc[10]*t[37]*2.0-a[1]*ma[2]*pc[7]*t[44]*2.0-a[2]*ma[3]*pc[10]*t[45]*2.0;&#xA;  M[6] = in[14]+in[20]+t[15]+t[16]+t[18]+t[22]+t[24]+t[28]+t[30]+t[32]+t[33]+t[40]+t[42]+t[52]+t[53]+t[54]+t[55]+t[56]-a[1]*ma[3]*pc[10]*t[37]-a[1]*ma[2]*pc[7]*t[44]-a[2]*ma[3]*pc[10]*t[45]*2.0;&#xA;  M[7] = in[20]+t[18]+t[24]+t[30]+t[33]+t[52]+t[53]+t[57]+t[58]-a[1]*ma[3]*pc[10]*t[37]-a[2]*ma[3]*pc[10]*t[45];&#xA;  M[10] = in[14]+in[20]+t[15]+t[16]+t[18]+t[22]+t[24]+t[28]+t[30]+t[32]+t[33]+t[40]+t[42]-a[2]*ma[3]*pc[10]*t[45]*2.0;&#xA;  M[11] = in[20]+t[18]+t[24]+t[30]+t[33]+t[57]+t[58]-a[2]*ma[3]*pc[10]*t[45];&#xA;  M[15] = in[20]+ma[3]*(t[61]*t[61])+ma[3]*(t[63]*t[63]);&#xA;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="10243" LastEditorUserId="9176" LastEditDate="2017-06-28T16:23:51.497" LastActivityDate="2017-06-28T16:23:51.497" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12717" PostTypeId="1" CreationDate="2017-06-28T17:03:31.500" Score="0" ViewCount="38" Body="&lt;p&gt;I am looking forward for a method to sense in real time, using computer vision for a control application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For this I am unsure of which is the right platform . I am well versed with MATLAB, but I am wondering if it will be able to do the image processing in real time or not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If there are other platforms which are much quicker, you can please recommend me.&lt;/p&gt;&#xA;" OwnerUserId="16691" LastActivityDate="2017-07-30T13:43:59.993" Title="Sensing an actuator using vision" Tags="&lt;control&gt;&lt;computer-vision&gt;" AnswerCount="3" CommentCount="2" ClosedDate="2017-07-31T13:09:40.747" ContentLicense="CC BY-SA 3.0" />
  <row Id="12718" PostTypeId="1" CreationDate="2017-06-28T20:09:44.440" Score="3" ViewCount="149" Body="&lt;p&gt;The flight controller is setup using LibrePilot, no propellers are fitted, when I put the throttle of the transmitter to full the motors go to full RPM and then slowly decrease to zero RPM with no change in the position of the throttle. This repeats over time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Check this video for visual symptoms: &lt;a href=&quot;https://www.youtube.com/watch?v=7-MfsQCzoV8&quot; rel=&quot;nofollow noreferrer&quot;&gt;Quad motors slowly decrease RPM over time with full throttle&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This also happens when all the props are fitted.&lt;/p&gt;&#xA;" OwnerUserId="17392" LastEditorUserId="9176" LastEditDate="2017-06-28T21:42:36.913" LastActivityDate="2017-06-28T21:42:36.913" Title="Why do my quad copter motors slowly decrease RPM with full throttle?" Tags="&lt;quadcopter&gt;" AnswerCount="0" CommentCount="4" FavoriteCount="1" ClosedDate="2018-02-05T21:55:04.337" ContentLicense="CC BY-SA 3.0" />
  <row Id="12719" PostTypeId="1" CreationDate="2017-06-28T21:18:09.080" Score="0" ViewCount="560" Body="&lt;p&gt;I am developing an RRT (rapidly exploring random tree) for car-like robots in SE2 space using Dubins steering function and have a question that has implications on the performance of RRTs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order for an RRT to be performant, an efficient nearest neighbor data structure needs to be used. There are efficient nearest neighbor data structures for metric spaces (like Euclidean space), however, none that I know of for a non-metric space (like the Dubins space).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This leads me to wonder if I can use a different distance function than the Dubins curve length in my RRT despite using the Dubins steering function to connect states.&lt;/p&gt;&#xA;" OwnerUserId="16611" LastActivityDate="2017-06-29T17:31:51.263" Title="Do the distance function and steering function in an RRT have to be related?" Tags="&lt;wheeled-robot&gt;&lt;motion-planning&gt;&lt;path-planning&gt;&lt;rrt&gt;&lt;steering&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12720" PostTypeId="1" CreationDate="2017-06-29T12:50:55.147" Score="1" ViewCount="148" Body="&lt;p&gt;I want to build a robot, but I don't know if I want to build a quadrapod or a hexapod. I would like to use three servos/leg. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Can you tell me what are the pros and cons of quadrapods compared to hexapods? &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerDisplayName="user17396" LastEditorUserId="37" LastEditDate="2018-08-16T09:12:07.837" LastActivityDate="2018-08-16T09:12:07.837" Title="Quadrapod vs Hexapod" Tags="&lt;mobile-robot&gt;&lt;legged&gt;&lt;hexapod&gt;" AnswerCount="0" CommentCount="3" FavoriteCount="1" ClosedDate="2017-06-30T10:37:15.027" ContentLicense="CC BY-SA 3.0" />
  <row Id="12722" PostTypeId="2" ParentId="12719" CreationDate="2017-06-29T17:31:51.263" Score="1" Body="&lt;p&gt;I asked this question on OMPL's mailing list. OMPL is an very popular motion planning library. Here is the response: &lt;a href=&quot;https://sourceforge.net/p/ompl/mailman/message/35918890/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://sourceforge.net/p/ompl/mailman/message/35918890/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The answer is yes, they should be related.&lt;/p&gt;&#xA;" OwnerUserId="16611" LastActivityDate="2017-06-29T17:31:51.263" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12723" PostTypeId="2" ParentId="12717" CreationDate="2017-06-29T21:16:37.153" Score="0" Body="&lt;p&gt;MATLAB is a very powerful platform for doing such applications. I recommend you using it. You can get your images using a USB camera, implement whatever functions to your captured images and then plot your results in a GUI charts or tabs. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other software you can use is LabVIEW of NI, but you have to know how to use a function block diagram programming language.&lt;/p&gt;&#xA;" OwnerUserId="17327" LastEditorUserId="9176" LastEditDate="2017-06-30T04:45:25.430" LastActivityDate="2017-06-30T04:45:25.430" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12724" PostTypeId="1" CreationDate="2017-06-29T22:19:09.930" Score="0" ViewCount="73" Body="&lt;p&gt;How can you control a servo driver (delta, ...) with an industrial PC?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To control position and velocity of a servo you need PWM signal to the servo drive (amplifier), but how do we create the signal and using which component?  Would a 555 timer be sufficient?&lt;/p&gt;&#xA;" OwnerUserId="17403" LastEditorUserId="9176" LastEditDate="2017-06-30T04:44:04.747" LastActivityDate="2017-06-30T04:44:04.747" Title="Controllling an industrial robotic arm" Tags="&lt;robotic-arm&gt;&lt;precise-positioning&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12725" PostTypeId="1" AcceptedAnswerId="12726" CreationDate="2017-06-30T02:33:38.723" Score="2" ViewCount="464" Body="&lt;p&gt;Brushless motors, like regular motors, have different parts (commutator, stater, etc).&lt;br&gt;&#xA;What do these various parts weigh?&lt;/p&gt;&#xA;" OwnerUserId="17194" LastActivityDate="2017-06-30T19:47:45.717" Title="What is the typical weight distribution for a brushless motor?" Tags="&lt;motor&gt;&lt;brushless-motor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12726" PostTypeId="2" ParentId="12725" CreationDate="2017-06-30T02:33:38.723" Score="3" Body="&lt;p&gt;I took apart a &lt;a href=&quot;https://hobbyking.com/en_us/turnigy-d2836-8-1100kv-brushless-outrunner-motor.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Turnigy D2836&lt;/a&gt; brushless DC motor. Despite the weight listed on the website, the actual weight of the motor &lt;em&gt;without the mounting equipment&lt;/em&gt; is &lt;strong&gt;54 Grams&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the breakdown&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Magnets: 9 grams, 16.7%&lt;/li&gt;&#xA;&lt;li&gt;Bottom Can: 6 grams, 11.1%&lt;/li&gt;&#xA;&lt;li&gt;Top Can: 4.5 grams, 8.33%&lt;/li&gt;&#xA;&lt;li&gt;Main Axle: 1.5 grams, 2.78%&lt;/li&gt;&#xA;&lt;li&gt;Middle can: 9 grams, 16.7%&lt;/li&gt;&#xA;&lt;li&gt;Coils: 6 grams, 11.1%&lt;/li&gt;&#xA;&lt;li&gt;Leads &amp;amp; plugs: 4 grams, 7.41%&lt;/li&gt;&#xA;&lt;li&gt;Ferrite core: 14 grams, 25.93%&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This motor is an out-runner, so the bottom can and the ferrite core have a ball bearing that is included in the weight, but I did not measure it separately. This can be used as a guide for other motors.&lt;/p&gt;&#xA;" OwnerUserId="17194" LastEditorUserId="17194" LastEditDate="2017-06-30T19:47:45.717" LastActivityDate="2017-06-30T19:47:45.717" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12727" PostTypeId="2" ParentId="12394" CreationDate="2017-06-30T02:49:48.793" Score="1" Body="&lt;p&gt;RC Servos come with several different styles of exit shafts (often called splines due to the teeth that are cut into them).  There are quite a few different styles.  Tooth count (yes, 25T means 25 tooth) is a major indicator of the styles; but, some styles have the same tooth count but different diameter so you cannot go by tooth count alone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Two of the most popular RC Servo Manufacturers are &lt;a href=&quot;http://hitecrcd.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;HiTEC&lt;/a&gt; and &lt;a href=&quot;http://www.futabarc.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Futaba&lt;/a&gt;&#xA;The companies make motors with several different spline/shaft sizes&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Futaba's most common sizes are 1F(15 tooth),2F(21 tooth),3F(25 tooth),4F(25 tooth)&lt;a href=&quot;https://i.stack.imgur.com/dFXyz.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dFXyz.jpg&quot; alt=&quot;Futaba Splines&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;HiTEK's most common sizes are A1(15 tooth),B1(25 tooth),C1(24 tooth),D1(15 tooth) &lt;a href=&quot;https://i.stack.imgur.com/YSXPP.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/YSXPP.jpg&quot; alt=&quot;HiTEK Splines&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;HiTEK also some motors with an H25T spline which matches the popular Futaba 3F spline.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't tell for sure; but, it looks like the JX Servo uses a  25T (probably 3F-style) spline.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.servocity.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;ServoCity&lt;/a&gt; lists has several different &lt;a href=&quot;https://www.servocity.com/servos/servo-accessories/servo-attachments/couplers&quot; rel=&quot;nofollow noreferrer&quot;&gt;Servo Couplers&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.servocity.com/25t-futaba-set-screw-shaft-coupler&quot; rel=&quot;nofollow noreferrer&quot;&gt;This coupler&lt;/a&gt; is a 3F style&lt;/p&gt;&#xA;" OwnerUserId="462" LastActivityDate="2017-06-30T02:49:48.793" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12728" PostTypeId="2" ParentId="12724" CreationDate="2017-06-30T03:50:10.273" Score="1" Body="&lt;p&gt;&lt;strong&gt;Controlling a Servo from a PC is more than just generating a PWM signal&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The indication that you want to control the PWM signal for the Servo from a PC implies that your want to close the servo control loop yourself.  I have done that before and it is VERY HARD (it took us several thousand man hours to create).  Much of the code has to reside in the Windows Driver/HAL layer to get the response time you need.  PC's (or at least Windows PC's) are not designed for the realtime response that is needed to close a servo control loop (typically 500uS loop time with better than 5uS determinism).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to control an industrial servo from a PC, I recommend you either use an external diver/controller Ex: &lt;a href=&quot;http://www.sureservo.com/drives.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;SureServo&lt;/a&gt;; or, if you are going to use a desktop PC, you could use one of the PCI controllers Ex: &lt;a href=&quot;http://www.omsmotion.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;OmsMotion&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A lot of the decision depends on what exactly you want to do (high power complex coordinated motion profiles, simple on/off high power motor, or low power control).&lt;/p&gt;&#xA;" OwnerUserId="462" LastActivityDate="2017-06-30T03:50:10.273" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12730" PostTypeId="2" ParentId="12717" CreationDate="2017-06-30T06:18:39.040" Score="0" Body="&lt;p&gt;I didn't work on matlab with vision,but if you want another choice you can always use c++/in visual studio with opencv libraries &#xA;Or java in eclipse,but opencv function for c++ are easier and there are much more tutorials&lt;/p&gt;&#xA;" OwnerUserId="17403" LastActivityDate="2017-06-30T06:18:39.040" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12731" PostTypeId="2" ParentId="12485" CreationDate="2017-06-30T06:47:59.713" Score="1" Body="&lt;p&gt;If the quad is a manufactured model, not a home built one, then the power would follow the same grouping I would take a look at the regulator circuit as it sounds that the voltage is dropping due the amp supply not being great enough. I would assume controller board being that it sounds like the regulator cooked and that's where it would be located.&lt;/p&gt;&#xA;" OwnerUserId="10468" LastActivityDate="2017-06-30T06:47:59.713" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12732" PostTypeId="1" CreationDate="2017-06-30T06:59:27.767" Score="0" ViewCount="118" Body="&lt;p&gt;Would a 12V geared DC motor (about 140rpm) (with an encoder) PID controlled as a servo give a study response when subjected to a load?&lt;/p&gt;&#xA;" OwnerUserId="17403" LastEditorUserId="2289" LastEditDate="2017-06-30T08:43:04.370" LastActivityDate="2017-06-30T08:43:04.370" Title="DC motor pid control" Tags="&lt;control&gt;&lt;motor&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2017-06-30T11:48:12.737" ContentLicense="CC BY-SA 3.0" />
  <row Id="12733" PostTypeId="2" ParentId="12732" CreationDate="2017-06-30T08:20:25.540" Score="1" Body="&lt;p&gt;I'm assuming you mean 12V geared DC motor.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It can give a stable response.  In fact, this is done all the time.   Plus, if the load is relatively stable, and the gears and other transmission elements have enough friction, you may not even need to use PID - a simple proportional controller might be good enough.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But your question is not sufficient for providing a specific answer to a particular design option, because you can also implement a PID controller for a 12V geared motor under load and have it not work.   It just depends on the specifications of motor, the gears, the power supply, the controller (amp), the software, and the load.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2017-06-30T08:20:25.540" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12734" PostTypeId="1" CreationDate="2017-06-30T08:52:01.167" Score="2" ViewCount="365" Body="&lt;p&gt;My goal is to locate precision within a known map. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the size of the map is known, a rectangle 4 x 3 m, and I know the initial position and orientation of the robot, after a certain period of time here moved randomly, can you know at what point of the map I am? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I use the MPU 9250 sensor, gyro, accelerometer and magnetometer sensor.&lt;/p&gt;&#xA;" OwnerUserId="17406" LastEditorUserId="9176" LastEditDate="2017-06-30T18:41:34.017" LastActivityDate="2017-07-01T20:30:39.880" Title="Localization within a map with gyro, accelerometer and magnetometer" Tags="&lt;kinematics&gt;&lt;raspberry-pi&gt;&lt;mapping&gt;&lt;python&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12735" PostTypeId="2" ParentId="12734" CreationDate="2017-06-30T09:07:45.420" Score="1" Body="&lt;p&gt;From the acceleration relatively to time you can get  velocity and distance simply by ingrating ,and by how much you have moved added to your initail position  with respect to the orientation you get the position,meaning imagine you moved forward orientation is the same you add the distance to y then moved to right straight you add the distance to x,but when you move in x,y together  imagine you are in a triangle with the orientation as your angle &lt;/p&gt;&#xA;" OwnerUserId="17403" LastActivityDate="2017-06-30T09:07:45.420" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12736" PostTypeId="2" ParentId="12689" CreationDate="2017-06-30T15:34:44.287" Score="3" Body="&lt;p&gt;While originally creating this question I ended up finding an RC servo that can do this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;HiTECH makes an RC servo (&lt;a href=&quot;http://hitecrcd.com/products/servos/boat-servos/hs-785hb-3.5-turn-winch-servo/product&quot; rel=&quot;nofollow noreferrer&quot;&gt;HS-785HB&lt;/a&gt;) that uses a muti-turn potentiometer rather than a standard rotary potentiometer is its position senor.  This allow the servo to rotate 3.5 turns (1260 degrees!!!) while still maintaining positional control.  It is pretty slow (almost 10 sec to do a full rotation) but it has an immense (1.8A) stall torque.  The thing is a beast!&#xA;&lt;a href=&quot;http://hitecrcd.com/products/servos/boat-servos/hs-785hb-3.5-turn-winch-servo/product&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/IvWOBm.jpg&quot; alt=&quot;HS-785HB&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is also called a Winch Servo (as @tuskiomi mentioned) since it is commonly used as a sheet winch on RC sailboats.  Note that from what I have seen, not all Winch Servos are multi-turn.  So far this is the only one I have found.&lt;/p&gt;&#xA;" OwnerUserId="462" LastEditorUserId="462" LastEditDate="2017-07-05T15:57:24.160" LastActivityDate="2017-07-05T15:57:24.160" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12737" PostTypeId="1" AcceptedAnswerId="12738" CreationDate="2017-06-30T18:22:28.170" Score="2" ViewCount="74" Body="&lt;p&gt;I have a 9.8kW Component that runs at 51.8 Volts. That means I need a battery that has about 9.8kWh of energy to run the component for an hour&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the sake of simplicity, say I have some batteries that just happened to match that voltage (51.8V) simply laying around. How many mAh would that battery need to be to run this for an hour? My instinct is to simply say 98 Ah, but this doesn't seem right..&lt;/p&gt;&#xA;" OwnerUserId="17194" LastActivityDate="2017-06-30T19:10:23.670" Title="What battery capacity would be required to run a component for an hour?" Tags="&lt;battery&gt;&lt;power&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12738" PostTypeId="2" ParentId="12737" CreationDate="2017-06-30T19:10:23.670" Score="3" Body="&lt;p&gt;Power (Watts, milliWatts, etc.) is given by:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;P = IV \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $I$ is current in (milli)Amps, $V$ is voltage in Volts, and $P$ is power in (milli)Watts, respectively. Energy (Watt-hours, milliWatt-hours, etc.) is given by:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;E = P\Delta t \\&#xA;$$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;(assuming constant power output), where $E$ is energy in (milli)Watt-hours and $t$ is time in hours. Finally, electric charge is given by:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;Q = I \Delta t \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $Q$ is current charge in (milli)Amp-hours and $I$ and $t$ are as defined before. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, if you have an application where you want 9.8 kW to run for an hour, then ideally you would want an &lt;strong&gt;available&lt;/strong&gt; energy reserve of:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;E = P\Delta t \\&#xA;E = (9.8\mbox{kW})(1\mbox{hr}) \\&#xA;\boxed{E = 9.8 \mbox{kWh}} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you've hinted at, batteries aren't rated in &lt;em&gt;Watt&lt;/em&gt;-hours; they're generally rated in &lt;em&gt;Amp&lt;/em&gt;-hours. There's an easy conversion, though - substitute the equation for power!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, instead of:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;E = P\Delta t \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You would use:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;E = (IV) \Delta t \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;which you can rearrange for the battery's current charge:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;E = V(I \Delta t) \\&#xA;E = VQ \\&#xA;\boxed{Q = \frac{E}{V}} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now you know the energy reserve you'd like to have: 9.8 kWh, and you know the voltage you're going to operate at: 51.8 V, so plug those in and get the answer:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;Q = \frac{9.8 \mbox{kWh}}{51.8\mbox{V}} \\&#xA;\boxed{Q = 0.189 \mbox{kAh}} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Note the units because they're important&lt;/strong&gt;. If you use energy as &lt;em&gt;kilo&lt;/em&gt;Watt-hours, then the output is &lt;em&gt;kilo&lt;/em&gt;Amp-hours. Multiply by 1,000 to get to Amp-hours:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\boxed{Q = 189 \mbox{Ah}} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;I'll make an important note now about an aspect of this problem that you didn't ask. I mentioned &lt;em&gt;available&lt;/em&gt; energy reserves because you generally can't get all of the charge from a battery without physically damaging the battery. Allowable depths of discharge vary by battery style and chemistry, so a deep-cycle lead-acid battery might allow you to get down to 10-20% of full charge without damage, but a lithium ion battery might only let you get to 40% of full charge without damage. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Generally speaking, a quality battery manufacturer should provide a plot of expected battery life in charge/discharge cycles versus &lt;em&gt;depth of discharge&lt;/em&gt;. It's up to you, the engineer, to choose what tradeoffs are allowable. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, you might choose to use a deep discharge (down to 5-10% of full charge) and knowingly damage the battery in exchange for longer operation between charges and/or a lower pack weight - this might be the case for a robotics competition. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or, you could use a small discharge (only down to 80% of full charge) because it is acceptable to have a large battery bank - this might be the case for a solar power installation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Whatever the case, you should recognize that your &lt;em&gt;available&lt;/em&gt; charge is some percentage of the rated battery charge:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;Q_{\mbox{available}} = \eta Q_{\mbox{rated}} \\&#xA;\boxed{Q_{\mbox{rated}} = \frac{Q_{\mbox{available}}}{\eta}} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, if you know that you want to discharge down to 40% of full charge, then you are saying that you want to &lt;em&gt;use&lt;/em&gt; 60% of the full charge of the battery. If you know how much charge you would like to have, then you can calculate that you need a battery rated to:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;Q_{\mbox{rated}} = \frac{ Q_{\mbox{available}} } {0.6} \\&#xA;\boxed{Q_{\mbox{rated}} = (1.67) Q_{\mbox{available}}} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You need a battery rated to 67% more (or higher) than what you calculated you need to ensure you only ever discharge to 40%. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-06-30T19:10:23.670" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="12739" PostTypeId="1" CreationDate="2017-06-30T21:37:28.470" Score="1" ViewCount="13" Body="&lt;p&gt;I have a Bugs 3 quadcopter, can I use a better transmitter from a helicopter for instance, a 2.4&amp;nbsp;GHz?&lt;/p&gt;&#xA;" OwnerUserId="17409" LastEditorUserId="9176" LastEditDate="2017-07-01T04:55:10.943" LastActivityDate="2017-07-01T04:55:10.943" Title="Using a different T/X on my quadcopter" Tags="&lt;quadcopter&gt;" AnswerCount="0" CommentCount="3" FavoriteCount="1" ClosedDate="2017-07-05T14:12:32.183" ContentLicense="CC BY-SA 3.0" />
  <row Id="12740" PostTypeId="1" CreationDate="2017-07-01T05:28:37.817" Score="1" ViewCount="27" Body="&lt;p&gt;For a while now I have been trying to build my own robotic platform, kind of like a turtlebot. However, I have kept running into an issue with controlling the motors. My main controller for sensor data input and motor driving output is the tiva c TM4C123G launchpad, which operates at 3.3V so I shift the signals to 5V (which the motor driver operates on).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The motor driver seems to respond correctly when the actual motor is not attached, but the LEDs that indicate the ouput do not shine when the motor is plugged in.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a video which explains my problem: &lt;a href=&quot;https://www.youtube.com/watch?v=j-Da2iAS8L8&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=j-Da2iAS8L8&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have tried using an arduino mega instead of the launchpad, but unfortunately the 64 CPR encoders are too fast for the mega to read and I need the encoder data (I'm trying to perform SLAM).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I honestly have no idea what is wrong with my circuit/boards I appreciate any help or insight on this problem! Thank you!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since I'm also a high schooler I unfortunately do not have access to nicer tools such as oscilloscopes...&lt;/p&gt;&#xA;" OwnerUserId="17411" LastActivityDate="2017-07-01T05:28:37.817" Title="Issues with the dual VNH2SP30 motor carrier and 131:1 metal gearmotor 37Dx73L mm w/ 64 cpr encoders" Tags="&lt;mobile-robot&gt;&lt;motor&gt;&lt;electronics&gt;&lt;circuit&gt;&lt;driver&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12741" PostTypeId="1" CreationDate="2017-07-01T07:09:47.230" Score="0" ViewCount="4199" Body="&lt;p&gt;In undistortPoints function from OpenCV, the documentations says that&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://docs.opencv.org/2.4/modules/imgproc/doc/geometric_transformations.html#undistortpoints&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://docs.opencv.org/2.4/modules/imgproc/doc/geometric_transformations.html#undistortpoints&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where undistort() is an approximate iterative algorithm that estimates the normalized original point coordinates out of the normalized distorted point coordinates (“normalized” means that the coordinates do not depend on the camera matrix).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems that the normalized point coordinates is obtained by adding 1 to the third coordinate. What does normalized point coordinates means? How can it be used for?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the above, there are two lines&lt;/p&gt;&#xA;&#xA;&lt;p&gt;x&quot; = (u - cx)/fx&lt;/p&gt;&#xA;&#xA;&lt;p&gt;y&quot; = (v - cy)/fy&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there one term for the coordinates(x'', y'')?&lt;/p&gt;&#xA;" OwnerUserId="15460" LastActivityDate="2017-08-19T04:03:02.937" Title="normalized point coordinates in undistortPoints function" Tags="&lt;computer-vision&gt;&lt;cameras&gt;&lt;calibration&gt;&lt;opencv&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12742" PostTypeId="1" CreationDate="2017-07-01T13:05:08.430" Score="2" ViewCount="185" Body="&lt;p&gt;For the shown general serial link n-DOF robotic arm the joint inertial positions are given by $p_i$, where $i=1,...n$: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/YRoUz.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/YRoUz.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I learned that the joints' inertial positions can be calculated in one of two ways:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1- $p_i=r_o + b_o + \sum _{k=1}^{i} (a_k+b_k)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2- As the first three elements of $\bar{p}_i$, where:&#xA;  $\bar{p}_i=T_o$ $^oT_1\text{...}$ $^{i-1}T_i$ $\bar{p}_0,$ $^{i-1}T_i$ is the homogeneous transformation matrix from coordinate $(i)$ to coordinate $(i-1)$, and $\bar{p}_0=\left(&#xA;\begin{array}{c}&#xA; 0 \\&#xA; 0 \\&#xA; 0 \\&#xA; 1 \\&#xA;\end{array}&#xA;\right). [1]$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By definition, the two methods should yield identical results. The problem is that they don't for a $\textbf{ wrist-partitioned manipultor}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\textbf{My question is: Where could I be going wrong?}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the following I describe the specifics of my calculations:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1- $a_i$ is calculated as $a_i=A_o$ $^oA_1 ...$ $^{i-1}A_i$  $^ia_i$ (where $^{i-1}A_i$ is the rotation matrix). $b_i$ is calculated in a similar manner.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2- The homogeneous transformation matrix is &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$^{i-1}T_i=\left(&#xA;\begin{array}{cccc}&#xA; \cos \left(\theta _i\right) &amp;amp; -\sin \left(\theta _i\right) &amp;amp; 0 &amp;amp; a_i \\&#xA; \cos \left(\alpha _i\right) \sin \left(\theta _i\right) &amp;amp; \cos \left(\alpha _i\right) \cos \left(\theta _i\right) &amp;amp; -\sin \left(\alpha _i\right) &amp;amp; -d_i \sin \left(\alpha _i\right) \\&#xA; \sin \left(\alpha _i\right) \sin \left(\theta _i\right) &amp;amp; \sin \left(\alpha _i\right) \cos \left(\theta _i\right) &amp;amp; \cos \left(\alpha _i\right) &amp;amp; d_i \cos \left(\alpha _i\right) \\&#xA; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\&#xA;\end{array}&#xA;\right)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where the rotation matrix,$^{i-1}A_i$, is the $3\times{3}$ top-left matrix. And $T_o$ is given by:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$T_o=\left(&#xA;\begin{array}{cc}&#xA; A_o &amp;amp; r_o \\&#xA; 0 &amp;amp; 1 \\&#xA;\end{array}&#xA;\right)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$A_o=\left(&#xA;\begin{array}{ccc}&#xA; \cos \left(\theta _{b_z}\right) &amp;amp; -\sin \left(\theta _{b_z}\right) &amp;amp; 0 \\&#xA; \sin \left(\theta _{b_z}\right) &amp;amp; \cos \left(\theta _{b_z}\right) &amp;amp; 0 \\&#xA; 0 &amp;amp; 0 &amp;amp; 1 \\&#xA;\end{array}&#xA;\right).\left(&#xA;\begin{array}{ccc}&#xA; \cos \left(\theta _{b_y}\right) &amp;amp; 0 &amp;amp; \sin \left(\theta _{b_y}\right) \\&#xA; 0 &amp;amp; 1 &amp;amp; 0 \\&#xA; -\sin \left(\theta _{b_y}\right) &amp;amp; 0 &amp;amp; \cos \left(\theta _{b_y}\right) \\&#xA;\end{array}&#xA;\right).\left(&#xA;\begin{array}{ccc}&#xA; 1 &amp;amp; 0 &amp;amp; 0 \\&#xA; 0 &amp;amp; \cos \left(\theta _{b_x}\right) &amp;amp; -\sin \left(\theta _{b_x}\right) \\&#xA; 0 &amp;amp; \sin \left(\theta _{b_x}\right) &amp;amp; \cos \left(\theta _{b_x}\right) \\&#xA;\end{array}&#xA;\right)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;represents the rotation of the base. For fixed base systems $A_o$ and $T_o$ are identity matrices. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\underline{EDIT}$:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My robot model and the DH parameters I obtained for it are shown below:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/S2YPa.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/S2YPa.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$ \alpha =[0^{\circ},90^{\circ},0^{\circ},-90^{\circ},0^{\circ},-90^{\circ}] \\&#xA;a=[0,0,a_2,0,0,0] \\&#xA;d=[d_1,d_2,0,d_4,0,0] \\&#xA;\theta =[\theta_1(t),\theta_2(t),\theta_3(t),\theta_4(t),\theta_5(t),\theta_6(t)] \\$&#xA;$\text{Where:} \\&#xA;$ &#xA;$d_2=L_2 \\&#xA;d_1=L_1 \\&#xA;a_2=L_3 \\&#xA;d_4=L_5 $&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$[1]$ Liu Haitao, Zhang Tie, &quot;A New Approach to Avoid Singularities of&#xA;6-DOF Industrial Robot&quot; &lt;/p&gt;&#xA;" OwnerUserId="16685" LastEditorUserId="16685" LastEditDate="2017-07-08T19:17:00.783" LastActivityDate="2017-07-14T05:31:43.867" Title="Postion of Robotic Arm Joints" Tags="&lt;robotic-arm&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12743" PostTypeId="1" AcceptedAnswerId="12745" CreationDate="2017-07-01T16:30:30.623" Score="1" ViewCount="377" Body="&lt;p&gt;Does the robot described by Double Integrator Model is holonomic ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's say we have a robot with dynamics described by equations&lt;/p&gt;&#xA;&#xA;&lt;p&gt;\begin{cases}&#xA;\dot x = v,  &amp;amp;  \\&#xA;\dot v = \frac {1}{m}u&#xA;\end{cases}&#xA;Where, $x$ is the position of the robot, $v$ is the velocity and $u$ is robot's control input.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can we call this robot a holonomic robot ?&lt;/p&gt;&#xA;" OwnerUserId="17413" LastEditorUserId="17413" LastEditDate="2017-07-01T17:46:16.850" LastActivityDate="2017-07-01T23:50:18.273" Title="Robot with Double Integrator Model" Tags="&lt;dynamics&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2018-07-30T14:13:47.037" ContentLicense="CC BY-SA 3.0" />
  <row Id="12744" PostTypeId="2" ParentId="12734" CreationDate="2017-07-01T20:30:39.880" Score="1" Body="&lt;p&gt;As @Abdul mentioned, and accelerometer measures acceleration which when integrated (adding together successive measurements over time) becomes velocity and when velocity is integrated you get position.  So (in theory) you can use the accelerometer to track position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The challenge with this is that in the real world you have error.  As error is integrated over time it gets works and then when that is also integrated it gets WAY worse.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Last year our robotics team made a robot that focused on autonomy (the ability to drive itself).  Initially we used the drive encoders to track robot position and orientation; but, when the wheels slipped or the robot was bumped it would go off path.  To fix that, we added and accelerometer to correct.  The initial results were impressive.  You could bump the robot and it would return to the target path.  Then one competition we had a several minute delayed start and rather than driving straight it immediately turned right and climbed the ramp.  Epic Fail.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are ways to correct (some) for the accumulated error.  One technique is to use a &lt;a href=&quot;https://en.wikipedia.org/wiki/Kalman_filter&quot; rel=&quot;nofollow noreferrer&quot;&gt;Kalman Filter&lt;/a&gt;.  Since the robot starts and stops a lot, the average acceleration should be zero.  Also, you can compensate for bearing errors by using the magnetometer to detect and compare bearing changes.  Another option is to use points where you know your robot's position, velocity, or orientation to correct calculated values.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The bottom line is that yes you can use and accelerometer to track potion; but, you will have to deal with accumulated error.  The better you handle that the better your positional accuracy will be.&lt;/p&gt;&#xA;" OwnerUserId="462" LastActivityDate="2017-07-01T20:30:39.880" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12745" PostTypeId="2" ParentId="12743" CreationDate="2017-07-01T23:50:18.273" Score="2" Body="&lt;p&gt;A holonomic robot is one where the number of degrees of freedom is equal to the number of controllable axes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your case, you are controlling acceleration (one axis of control) but there is also only one degree of freedom - position. So, the robot is holonomic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An example of a non-holonomic robot would be a differentially steered robot, like a micro mouse or a tank. There you can only control the left and right wheel speeds, but you can move to any x/y position AND you can be at any position with any heading. You can control two things, but the vehicle can move in three ways - forward/backward, rotate, and then left and right by rotating, driving forward, then rotating again. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similarly, an Ackerman steered vehicle is also non-holonomic. There you can only control speed and steering angle, but again you can arrive at any x/y position with any heading. Again, two axes of control but three degrees of freedom. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-07-01T23:50:18.273" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12747" PostTypeId="1" AcceptedAnswerId="13938" CreationDate="2017-07-02T01:58:19.070" Score="1" ViewCount="239" Body="&lt;p&gt;A couple of years ago I bought a WLToys V222 quadcopter.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/ZrnW0.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZrnW0.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;br&gt;&#xA;I would like to know if there is a way to use the transmitter to control some DIY projects?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know how I could do that?&lt;/p&gt;&#xA;" OwnerUserId="462" LastActivityDate="2017-07-30T21:31:52.580" Title="RC Transmitter for DIY" Tags="&lt;quadcopter&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12748" PostTypeId="1" CreationDate="2017-07-03T01:01:35.073" Score="1" ViewCount="34" Body="&lt;p&gt;In camera imaging, there are several terms for point coordinates.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;World coordinates: [X, Y, Z] in physical unit&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Image coordinates: [u, v] in pixel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do these coordinates become homogeneous coordinates by appending with a 1? Sometimes in books and paper it is represented by [x, y w]. When is w is used? When is 1 used?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the function initUndistortRectifyMap, &lt;a href=&quot;http://docs.opencv.org/2.4/modules/imgproc/doc/geometric_transformations.html#void%20initUndistortRectifyMap(InputArray%20cameraMatrix,%20InputArray%20distCoeffs,%20InputArray%20R,%20InputArray%20newCameraMatrix,%20Size%20size,%20int%20m1type,%20OutputArray%20map1,%20OutputArray%20map2)&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://docs.opencv.org/2.4/modules/imgproc/doc/geometric_transformations.html#void%20initUndistortRectifyMap(InputArray%20cameraMatrix,%20InputArray%20distCoeffs,%20InputArray%20R,%20InputArray%20newCameraMatrix,%20Size%20size,%20int%20m1type,%20OutputArray%20map1,%20OutputArray%20map2)&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;the following process is applied&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/L0g2M.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/L0g2M.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there one term for the coordinates [x y 1]? I don't understand why R can be applied to [x y 1]? In my view, R is the transformation in 3D. Is [x y 1] is one 2d point or one 3d point?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[u v]-&gt;[x y]-&gt;[x y 1]-&gt;[X Y W]-&gt;[x' y'] The coordinates are processed according to the above chain. What is the principle behind it?&lt;/p&gt;&#xA;" OwnerUserId="15460" LastActivityDate="2017-07-03T01:01:35.073" Title="Are homogeneous coordinates represented by appending image coordinates with a 1 in camera imaging" Tags="&lt;cameras&gt;&lt;calibration&gt;&lt;opencv&gt;" AnswerCount="0" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12751" PostTypeId="1" CreationDate="2017-07-03T12:03:21.720" Score="1" ViewCount="57" Body="&lt;p&gt;&lt;a href=&quot;https://math.stackexchange.com/questions/2344912/pab-c-pab-pac&quot;&gt;I asked the following question in math.stackexchange&lt;/a&gt;, but realized that this might be the more appropriate place to post it: How did Thrun derive the following formula: &lt;a href=&quot;https://books.google.de/books?id=2Zn6AQAAQBAJ&amp;amp;lpg=PA140&amp;amp;ots=vHnEODAD_A&amp;amp;dq=probabilistic%20robotics%205.48&amp;amp;pg=PA140#v=onepage&amp;amp;q=probabilistic%20robotics%205.48&amp;amp;f=false&quot; rel=&quot;nofollow noreferrer&quot;&gt;(Context here)&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/odBTR.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/odBTR.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think that this formula might either be wrong or make assumptions that are not guarantueed to be true (like statistical independence), but am not sure which ones exactly. Any pointers are welcome :)&lt;/p&gt;&#xA;" OwnerUserId="17423" LastActivityDate="2017-07-03T12:03:21.720" Title="Probabilistic Robotics: Map-based motion model" Tags="&lt;localization&gt;&lt;probability&gt;" AnswerCount="0" CommentCount="3" ClosedDate="2017-07-03T15:23:57.483" ContentLicense="CC BY-SA 3.0" />
  <row Id="12752" PostTypeId="1" CreationDate="2017-07-03T12:37:34.733" Score="0" ViewCount="293" Body="&lt;p&gt;I am building a small robot on wheels. The robot will be moving at a &lt;em&gt;small&lt;/em&gt; speed in a square area of known dimensions. I need to locate the robot and know its position at any given moment so I can correct its trajectory.&#xA;I can add parts to the robot, like some sort of flag or lighting object.&#xA;It's preferable not to put any border around the area, since it would limit the flexibility of the project.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Added Info&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The size of the robot is about 28 x 25 x 11cm. It will go on land and&#xA;the surface will be ideally flat (but since the friction between the&#xA;surface and the wheels can vary in different places, I need to know&#xA;if the robot arrived to the destination or not, and corrections need&#xA;to be done respectively). &lt;/li&gt;&#xA;&lt;li&gt;I can place beacons around the field or any sort of sensors, as long as I can remove them easily and transport them.&lt;/li&gt;&#xA;&lt;li&gt;The surface will be about 1.5x1.5m, depending on the range of the sensors, or the method used for localization.&lt;/li&gt;&#xA;&lt;li&gt;The robot can start from a determined position.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Some methods&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I thought of triangulating the position using two ultrasonic sensors placed at the two edges of the field. Although I am not sure if the US sensors will provide a sufficient angle and range to cover the entire area. I am also concerned about the precision.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Someone pointed to me that I could use two infrared sensors placed at the two edges, and make them turn 90deg both ways and scan the area. As soon as they find something, the position of the object can be found using triangulation.&#xA;Although I still don't know if these methods work well for a moving object.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you think that one of the methods that I described is the way to go, please give me more insight on how to implement it in my project.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is an illustration of the path that the robot should go along. The basic idea of the project is that the robot should sow seeds at regular intervals, for example every 10cm; this is why I need to know if the robot &lt;em&gt;really&lt;/em&gt; covered 10cm after the seed before, and if it has to turn.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I thought of making an imaginary grid: I tell the robot the position that it has to reach, then knowing the position of the robot I can make it turn until it is pointing in the direction of the arriving point and then it covers the distance between it's position and the arriving point. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/xB07S.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xB07S.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am very new to robotics, therefore I would really appreciate a detailed answer.&lt;/p&gt;&#xA;" OwnerUserId="17424" LastEditorUserId="17424" LastEditDate="2017-07-04T11:28:36.280" LastActivityDate="2018-02-02T05:27:32.827" Title="How to locate an object on a known surface" Tags="&lt;arduino&gt;&lt;sensors&gt;&lt;wheeled-robot&gt;&lt;ultrasonic-sensors&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12753" PostTypeId="1" CreationDate="2017-07-03T15:36:18.687" Score="1" ViewCount="203" Body="&lt;p&gt;&lt;strong&gt;How to control an industrial servo motor?&lt;/strong&gt;&lt;br&gt;&#xA;The specific motor dive I am looking at is a Delta adsa-a2 series AC Servo Drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that we can connect the motor driver to the software that the company provides; but, i want to control it using a code written in c++ or c.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I see it has a USB connector&lt;a href=&quot;https://i.stack.imgur.com/IYoUU.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/IYoUU.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What data should i send?&lt;/p&gt;&#xA;" OwnerUserId="17403" LastEditorUserId="462" LastEditDate="2017-07-04T15:55:31.203" LastActivityDate="2017-07-04T15:55:31.203" Title="Industrial servo motor" Tags="&lt;microcontroller&gt;&lt;servomotor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12754" PostTypeId="1" AcceptedAnswerId="12755" CreationDate="2017-07-01T17:16:30.747" Score="0" ViewCount="170" Body="&lt;p&gt;Does the robot described by Double Integrator Model is holonomic ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's say we have a robot with dynamics described by equations&lt;/p&gt;&#xA;&#xA;&lt;p&gt;\begin{cases}&#xA;\dot x = v,  &amp;amp;  \\&#xA;\dot v = \frac {1}{m}u&#xA;\end{cases}&#xA;Where, $x$ is the position of the robot, $v$ is the velocity and $u$ is robot's control input.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can we call this robot a holonomic robot ?&lt;/p&gt;&#xA;" OwnerUserId="17413" OwnerDisplayName="kiabonov" LastEditorUserId="15160" LastEditDate="2018-07-30T10:01:32.133" LastActivityDate="2018-07-30T10:01:32.133" Title="Robot with Double Integrator Model" Tags="&lt;dynamics&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="12755" PostTypeId="2" ParentId="12754" CreationDate="2017-07-01T21:35:41.417" Score="0" Body="&lt;p&gt;Holonomic means that the controllable degrees of freedom in a system is equal to the total degrees of freedom.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm guessing you might be having difficulty differentiating between &lt;em&gt;states&lt;/em&gt; and &lt;em&gt;degrees of freedom&lt;/em&gt; which are both simple concepts, but sometimes confused with one another.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1st comment: The [robot] system you describe has a single degree of freedom. It just translates in a single direction like forwards and backwards. But not side to side, nor does it spin. Not a very interesting robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2nd comment: The double integrator has two &lt;em&gt;states&lt;/em&gt;. You can assign them as&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$x_1 = x$$&#xA;and&#xA;$$x_2 =v$$&#xA;3rd comment: The system has one input, $u$, a force&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So Answer: Yes, it's holonomic. There are two states (position and velocity), but only one degree of freedom and one controllable degree of freedom (forwards and backwards).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Example of a non-holonomic system: A wheel that rolls but also 'yaws' to steer a vehicle&lt;/p&gt;&#xA;" OwnerDisplayName="docscience" LastActivityDate="2017-07-01T21:35:41.417" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12756" PostTypeId="2" ParentId="12753" CreationDate="2017-07-04T00:50:02.130" Score="2" Body="&lt;p&gt;&lt;strong&gt;The answer is yes you can&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I looked at at the &lt;a href=&quot;http://www.delta.com.tw/product/em/motion/motion_servo/download/manual/DELTA_IA-ASDA_A2_UM_EN_20141212.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;users manual for the asda-a2&lt;/a&gt; and it looks like it will close the servo control loop for you and also gives you several good control options.  All the Sections I refer to are in that &lt;a href=&quot;http://www.delta.com.tw/product/em/motion/motion_servo/download/manual/DELTA_IA-ASDA_A2_UM_EN_20141212.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;manual&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;First - This looks to be a very powerful AC Servo.  &lt;strong&gt;BE CAREFUL!!!&lt;/strong&gt;  You can easily break an finger or maybe even sever one off.  Be sure to install a cover to protect yourself as well as a safety interlock and Emergency Stop (E-Stop) button that will interrupt power to the motor.  There has been more than one time my code did not work as I expected it to or something else happened.  &lt;/li&gt;&#xA;&lt;li&gt;There are several control options available that you can use depending on the level of control you want/need.&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;You can configure the drive to operate off of discrete signals (see section 3.4).  That way the controlling computer just has to turn a line on or off to execute the pre-programmed operation (like start and stop) or set a voltage to control speed, etc. (no commands required).&lt;/li&gt;&#xA;&lt;li&gt;You can send the drive commands over RS232/RS485 (see diagram in 3.6.2) or USB (see section 3.7) or CANopen (see section 3.9).  With the commands I saw, it looks like you do pretty much anything.  It looks like they use ModBUS which is a pretty easy protocol and there are libraries to support it depending on what type of computer you are going to use.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Control modes (and commands) are described in Sections 6-9&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;It will be a bit to learn; but, the drive seems well documented.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I recommend you start simple (AND SLOW!) and move up from there.  Start by configuring things mostly from the Control Panel and execute the commands from there. Maybe just a simple velocity control (start/stop) or positional control (jog).  Always have your (or somebody else's hand on the E-Stop just in case.&lt;/p&gt;&#xA;" OwnerUserId="462" LastEditorUserId="462" LastEditDate="2017-07-04T01:50:31.220" LastActivityDate="2017-07-04T01:50:31.220" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12757" PostTypeId="1" AcceptedAnswerId="12760" CreationDate="2017-07-04T01:25:44.243" Score="0" ViewCount="138" Body="&lt;p&gt;I am fairly knowledgeable about robotics programming, and stuff like that; but, I am a total ignorant about how to actually &quot;build&quot; a robot. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is: What materials do you recommend to build a robot and where can I buy them. It does not matter &lt;em&gt;what kind&lt;/em&gt; of robot. I know that a robotic arm is very different from a mobile robot.  I know the theory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other than Lego bricks (which I have heard of), I am imaging silicon frames... I really don't know.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have developed some very fair and nice devices with image processing, computer vision and stuff. I also know how to program several kinds of motors etc. &#xA;&lt;em&gt;I just don't know how to put all of this inside a nice frame and show it to the world&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="17427" LastEditorUserId="462" LastEditDate="2017-07-04T02:43:53.820" LastActivityDate="2017-07-04T06:22:32.737" Title="Build (Assembly kits?) the frame of a robot" Tags="&lt;manufacturing&gt;&lt;frame&gt;" AnswerCount="1" CommentCount="4" ClosedDate="2017-07-04T15:59:48.607" ContentLicense="CC BY-SA 3.0" />
  <row Id="12758" PostTypeId="2" ParentId="12752" CreationDate="2017-07-04T02:48:19.460" Score="1" Body="&lt;p&gt;Robots usually locate themselves on a field using sensors.  None of the sensors are perfect as they each have their own limitations; hence, the more sensors the better.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are some sensor options:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Motor Encoders on the wheels to track the distance and turns&lt;/li&gt;&#xA;&lt;li&gt;IMU/Gyro to track acceleration and calculate speed and position&lt;/li&gt;&#xA;&lt;li&gt;Magnetometer to correct bearings against magnetic north&lt;/li&gt;&#xA;&lt;li&gt;GPS (usually for large outdoor distance)&lt;/li&gt;&#xA;&lt;li&gt;Range detectors to look for walls or objects to reference off&lt;/li&gt;&#xA;&lt;li&gt;Line detector (for lines or path markers on the floor)&lt;/li&gt;&#xA;&lt;li&gt;Optical Surface Texture detection (like a laser mouse uses)&lt;/li&gt;&#xA;&lt;li&gt;LIDAR imaging&lt;/li&gt;&#xA;&lt;li&gt;Camera imaging (sometimes stereo-graphic)  &lt;/li&gt;&#xA;&lt;li&gt;Beacon detector (some fields have beacons placed on them for reference)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Generally the &lt;a href=&quot;https://www.firstinspires.org/robotics/ftc&quot; rel=&quot;nofollow noreferrer&quot;&gt;FTC (First Technology Challenge)&lt;/a&gt; robots that have good autonomous programs have at least four different sensor types that they use for positioning.&lt;/p&gt;&#xA;" OwnerUserId="462" LastEditorUserId="462" LastEditDate="2018-02-02T05:27:32.827" LastActivityDate="2018-02-02T05:27:32.827" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12760" PostTypeId="2" ParentId="12757" CreationDate="2017-07-04T03:08:33.943" Score="1" Body="&lt;p&gt;I mentor several FTC (First Tech Challenge) Robotics Teams.  These teams build medium size robots (about 50cm cube starting size).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For this size, there are four Building Systems that are the most common&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.tetrixrobotics.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Tetrix&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.modernroboticsinc.com/matrix&quot; rel=&quot;nofollow noreferrer&quot;&gt;Matrix&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.servocity.com/actobotics&quot; rel=&quot;nofollow noreferrer&quot;&gt;Actobotics&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.8020.net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;8020 Extrusions&lt;/a&gt; (There are lots of other suppliers too)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;These solutions are all very flexible allow a large about of options on how to build frames and attach motors, wheels, sensors, etc. and are designed for reuse.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hotwired Robotics (one of our local FTC teams) wrote a great overview of the different &lt;a href=&quot;http://hotwiredrobotics.org/wp-content/uploads/2016/09/HW-Robot-Build-Systems.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Building Systems&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Shameless Plug&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why not &lt;a href=&quot;https://www.firstinspires.org/team-event-search#type=teams&amp;amp;sort=name&amp;amp;programs=FLLJR,FLL,FTC,FRC&amp;amp;year=2017&quot; rel=&quot;nofollow noreferrer&quot;&gt;find a First Robotics Team near you&lt;/a&gt; and offer to be a help Mentor?  You can learn from them how to build a robot and they can learn from you how to program one.&lt;/p&gt;&#xA;" OwnerUserId="462" LastEditorUserId="462" LastEditDate="2017-07-04T06:22:32.737" LastActivityDate="2017-07-04T06:22:32.737" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12764" PostTypeId="1" AcceptedAnswerId="12818" CreationDate="2017-07-05T00:58:50.047" Score="0" ViewCount="3369" Body="&lt;p&gt;I'm following these instructions on how to install Indigo: &lt;a href=&quot;http://wiki.ros.org/indigo/Installation/Ubuntu&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://wiki.ros.org/indigo/Installation/Ubuntu&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I enter the command: &lt;code&gt;sudo apt-get install ros-indigo-desktop-full&lt;/code&gt; I get the following output:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Some packages could not be installed. This may mean that you have&#xA;requested an impossible situation or if you are using the unstable&#xA;distribution that some required packages have not yet been created&#xA;or been moved out of Incoming.  &#xA;The following information may help to resolve the situation:&#xA;&#xA;The following packages have unmet dependencies:&#xA;&#xA;ros-indigo-desktop-full :  &#xA;Depends: ros-indigo-desktop but it is not going to be installed  &#xA;Depends: ros-indigo-perception but it is not going to be installed  &#xA;Depends: ros-indigo-simulators but it is not going to be installed  &#xA;Depends: ros-indigo-urdf-tutorial but it is not going to be installed  &#xA;&#xA; unity-control-center :  &#xA;Depends: libcheese-gtk23 (&amp;gt;= 3.4.0) but it is not going to be installed  &#xA;                        Depends: libcheese7 (&amp;gt;= 3.0.1) but it is not going to be installed  &#xA;&#xA;E: Error, pkgProblemResolver::Resolve generated breaks, this may be caused by held packages.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;According to the instructions I am following, unmet dependencies should be solved with either the command &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sudo apt-get install xserver-xorg-dev-lts-utopic mesa-common-dev-lts-utopic libxatracker-dev-lts-utopic libopenvg1-mesa-dev-lts-utopic libgles2-mesa-dev-lts-utopic libgles1-mesa-dev-lts-utopic libgl1-mesa-dev-lts-utopic libgbm-dev-lts-utopic libegl1-mesa-dev-lts-utopic&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;or&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sudo apt-get install libgl1-mesa-dev-lts-utopic&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;However when I try to use these commands I get unable to locate package errors such as&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;E: Unable to locate package libgl1-mesa-dev-lts-utopic&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I'd appreciate any advice on how to solve these dependency issues.&#xA;I've already asked on ROS Answers but received no answer, and the technician in charge of the computer lab I'm working in hasn't yet found a solution, so... help me stack exchange, you're my only hope.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S. I'm assuming that this question goes in the robotics section because it's related to ROS, but if this belongs in the Ubuntu or main stack overflow section please let me know.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: things I have tried so far&lt;br&gt;&#xA;1. &lt;code&gt;sudo apt-get update&lt;/code&gt; and &lt;code&gt;sudo apt-get upgrade&lt;/code&gt;, changed nothing.&lt;br&gt;&#xA;2. When I type in &lt;code&gt;apt-cache libgl1-mesa-dev-lts-utopic&lt;/code&gt; I get &lt;code&gt;E: Invalid operation libgl1-mesa-dev-lts-utopic&lt;/code&gt;&lt;br&gt;&#xA;3. When I type in &lt;code&gt;apt-cache search libgl1-mesa-dev-lts-utopic&lt;/code&gt; I get no output.&lt;br&gt;&#xA;4. When I type in &lt;code&gt;ls /etc/apt/sources.list.d&lt;/code&gt; I get &lt;code&gt;ros-latest.list  ros-latest.list.save&lt;/code&gt;&lt;/p&gt;&#xA;" OwnerUserId="14689" LastEditorUserId="14689" LastEditDate="2017-07-05T01:50:54.207" LastActivityDate="2018-06-19T05:15:41.433" Title="Unmet dependencies error when installing ROS indigo on Ubuntu 14.04.3" Tags="&lt;ros&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12765" PostTypeId="2" ParentId="12683" CreationDate="2017-07-05T09:12:04.013" Score="1" Body="&lt;p&gt;I'm not sure if this answers the question but I think there is a mismatch between the block diagram and the state equations. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the first block of the state transition matrix (top-left $A-BL$) you use the state $x$ to control your system, but that's what you're estimating with the Kalman filter, so you don't know $x$. My guess, that part should be $\dot{x}=Ax$. That means you've to change the sign of the top-right block to get $\dot{x}=Ax-BL\tilde{x}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, from the measurement equations, your Kalman filter does not get the sensor noise, so you probably need to change your matrices to get $y=Cx+n$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's as far as I can get. Hope this helps.&lt;/p&gt;&#xA;" OwnerUserId="16039" LastActivityDate="2017-07-05T09:12:04.013" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12767" PostTypeId="1" CreationDate="2017-07-05T18:09:30.623" Score="1" ViewCount="286" Body="&lt;p&gt;I want to recover the trajectory of a vehicle using a monocular camera via the computation of the essential matrix between &lt;code&gt;t-1&lt;/code&gt; and &lt;code&gt;t&lt;/code&gt;.&#xA;When I used OpenCV, I got correct trajectory wrt the ground truth. However, I want to code all the functions in Matlab but I got garbage when I plotted the trajectory and I think it is related to a scale factor problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, the outputted essential matrix from opencv function is the following (between two consecutive frames)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ E = \begin{bmatrix}&#xA; 0.0052 &amp;amp; -0.7068 &amp;amp;  0.0104\\&#xA; 0.0052 &amp;amp; -0.7068 &amp;amp;  0.0104\\&#xA; 0.7063 &amp;amp;  0.0050 &amp;amp; -0.0305\\&#xA;-0.0113 &amp;amp;  0.0168 &amp;amp;  0.0002\\&#xA;\end{bmatrix}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After decomposing it into Rotation and translation and triangulating for 5 2D points, I got the following 3D points:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$   X1 =\begin{bmatrix}&#xA;       -0.0940&amp;amp; 0.0478&amp;amp; -0.4984\\&#xA;       -0.0963&amp;amp; 0.0497&amp;amp; -0.4987\\&#xA;        0.3033&amp;amp; 0.1009&amp;amp; -0.5202\\&#xA;       -0.0065&amp;amp; 0.0636&amp;amp; -0.5053\\&#xA;       -0.0737&amp;amp; 0.0653&amp;amp; -0.5011\\&#xA; \end{bmatrix}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, for the essential matrix outputted by Matlab functions, it is the following:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$   E2=\begin{bmatrix}&#xA;       -0.2153 &amp;amp; 0.9573 &amp;amp; 0.1626\\&#xA;        0.8948 &amp;amp; 0.2456 &amp;amp;-0.3474\\&#xA;        0.1003 &amp;amp; 0.1348 &amp;amp;-0.0306\\&#xA; \end{bmatrix}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When decomposing it into rotation and translation as well, and triangulating points, I got the following 3D points:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$  X2 =\begin{bmatrix}&#xA;        0.1087&amp;amp;   -0.0552&amp;amp;    0.5762\\&#xA;        0.1129&amp;amp;   -0.0578&amp;amp;    0.5836\\&#xA;        0.4782&amp;amp;    0.1582&amp;amp;   -0.8198\\&#xA;        0.0028&amp;amp;   -0.0264&amp;amp;    0.2099\\&#xA;        0.0716&amp;amp;   -0.0633&amp;amp;    0.4862\\&#xA; \end{bmatrix}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To verify the results, I did:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ X1./X2 =\begin{bmatrix}&#xA;       -0.8644 &amp;amp;   -0.8667 &amp;amp;   -0.8650\\&#xA;       -0.8524 &amp;amp;   -0.8603 &amp;amp;   -0.8546\\&#xA;        0.6343 &amp;amp;    0.6376 &amp;amp;    0.6346\\&#xA;       -2.3703 &amp;amp;   -2.4065 &amp;amp;   -2.4073\\&#xA;       -1.0288 &amp;amp;   -1.0320 &amp;amp;   -1.0305\\&#xA; \end{bmatrix}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And an almost constant scale factor seems to exist between the first and second estimations. &#xA;I think that the scale factor have to be the same for all 3D points to get a correct trajectory when plotting it. How to maintain the scale factor?&lt;/p&gt;&#xA;" OwnerUserId="17442" LastEditorUserId="17442" LastEditDate="2017-07-07T11:38:01.450" LastActivityDate="2017-07-07T11:38:01.450" Title="Maintaining scale factor for essential matrix" Tags="&lt;computer-vision&gt;&lt;matlab&gt;&lt;opencv&gt;&lt;monocular&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12768" PostTypeId="1" CreationDate="2017-07-05T19:42:13.087" Score="1" ViewCount="37" Body="&lt;p&gt;I need help finding a linear actuator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I only need it to move 15 mm but it also needs to move extremely fast. Preferably 1 inch per second. It needs to be capable of holding a 10 lb weight. The stroke speed is at full load. Also, I would greatly prefer it to be fairly cheap because I need to buy 4.&lt;/p&gt;&#xA;" OwnerUserId="17305" LastEditorUserId="9176" LastEditDate="2017-07-06T19:36:19.620" LastActivityDate="2017-07-06T19:36:19.620" Title="Help finding a linear actuator" Tags="&lt;motor&gt;" AnswerCount="0" CommentCount="2" ClosedDate="2017-07-06T20:46:51.010" ContentLicense="CC BY-SA 3.0" />
  <row Id="12769" PostTypeId="1" CreationDate="2017-07-06T01:04:59.223" Score="1" ViewCount="187" Body="&lt;p&gt;My setup is such that my tools reside on a wall and table directly adjacent to my work bench. I wish to build an arm that will ultimately grab tools and give them to me without me having to move from my bench. I'm wondering if a scara or articulated robotic arm is better suited for this task. Payloads shouldn't exceed 5kg and distance is not fully a factor since the robot might ride a track&lt;/p&gt;&#xA;" OwnerUserId="17452" LastActivityDate="2017-07-06T01:04:59.223" Title="Scara vs. Articulated arm robot" Tags="&lt;robotic-arm&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12771" PostTypeId="1" CreationDate="2017-07-06T06:43:55.430" Score="1" ViewCount="345" Body="&lt;p&gt;In papers the terms &lt;em&gt;object pose estimation&lt;/em&gt; and &lt;em&gt;object tracking&lt;/em&gt; are used side by side with different meanings. Can somebody explain me the difference?&lt;/p&gt;&#xA;" OwnerUserId="17455" LastEditorUserId="2289" LastEditDate="2017-07-06T17:26:23.143" LastActivityDate="2017-07-06T17:26:23.143" Title="What is the difference between object pose estimation and object tracking?" Tags="&lt;pose&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12772" PostTypeId="2" ParentId="12771" CreationDate="2017-07-06T11:49:02.363" Score="1" Body="&lt;p&gt;&quot;Pose&quot; is a commonly used term that means position and orientation, where object tracking would just care about position but not necessarily the orientation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, for a vehicle on the street, you would want to know its pose so you could determine both where it is and if it is facing you or not. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For other applications, position alone is sufficient; think objects on a ballistic trajectory like basketballs, baseballs, etc. There the orientation doesn't matter. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-07-06T11:49:02.363" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12773" PostTypeId="2" ParentId="12771" CreationDate="2017-07-06T12:44:46.163" Score="0" Body="&lt;p&gt;When someone is referring to object tracking, he most likely talks about estimating the location of an object in an ordered sequence of images (e.g. a video). In this case, for most images, you already know where to expect an object (namely close to its location in the last image) and can use several detections to estimate the speed so that your prediction gets better. The location in tracking can be the region in the image in which the object is visible or even the 6d pose of the object. Main problems in tracking are occlusions or several similar objects in the scene. (think about a person walking through a group of other people)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pose estimation is rather referring to computing the pose given a single image, in most cases with prior knowledge (e.g. texture or shape) of the object. Pose estimation can be used while tracking an object. &lt;/p&gt;&#xA;" OwnerUserId="23196" LastActivityDate="2017-07-06T12:44:46.163" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12775" PostTypeId="1" AcceptedAnswerId="12780" CreationDate="2017-07-06T19:24:22.223" Score="0" ViewCount="762" Body="&lt;p&gt;I have an IMU that is outputting the following for its measurements:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;accelx= 0.000909228 (g's)&#xA;accely= -0.000786797 (g's)&#xA;accelz= -0.999432 (g's)&#xA;rotx= 0.000375827 (radians/second)&#xA;roty= -0.000894705 (radians/second)&#xA;rotz= -0.000896965 (radians/second)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I would like to calculate the roll, pitch and yaw and after that the orientation matrix of the body frame relative to the NED frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I do&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;roll = atan2(-accely,-accelz);&#xA;pitch =atan2(-accelx/sqrt(pow(accely,2)+pow(accelz,2)));&#xA;sinyaw = -rotycos(roll)+rotzsin(roll);&#xA;cosyaw = rotxcos(pitch)+rotysin(roll)sin(pitch)+rotzcos(roll)*sin(pitch);&#xA;yaw = atan2(sinyaw,cosyaw);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and I get:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;roll = 0.000787244&#xA;pitch = -0.000909744&#xA;yaw = 1.17206&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;in radians.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However the IMU is also outputting what &lt;em&gt;it&lt;/em&gt; calculates for roll, pitch and yaw.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the IMU, I get:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;roll: -0.00261682&#xA;pitch: -0.00310018&#xA;yaw: 2.45783&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Why is there is a mismatch between my roll, pitch and yaw and that of the IMU's?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additionally, I found this formula for the initial orientation matrix.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2DrpH.png&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Initial orientation matrix formula&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2DrpH.png&quot; alt=&quot;Initial orientation matrix formula&quot; title=&quot;Initial orientation matrix formula&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which way of calculating the orientation matrix is more correct.&#xA;&lt;code&gt;R1(roll)*R2(pitch)*R3(yaw)&lt;/code&gt;, or the form above?&lt;/p&gt;&#xA;" OwnerUserId="17461" LastEditorUserId="17461" LastEditDate="2017-07-07T12:32:28.930" LastActivityDate="2017-08-29T09:36:45.237" Title="IMU alignment methods" Tags="&lt;imu&gt;" AnswerCount="1" CommentCount="9" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12777" PostTypeId="1" CreationDate="2017-07-07T02:10:43.303" Score="0" ViewCount="97" Body="&lt;p&gt;I am designing a robot which irons and folds clothes autonomously. For this purpose, I need the robot to detect a certain number of key points in a given cloth in order to execute a certain folding or ironing algorithm. The following images best describe what I actually mean by key points&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/7DgHt.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7DgHt.png&quot; alt=&quot;For example a T-shirt&quot;&gt;&lt;/a&gt;;,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example for a T-shirt, the above image shows the desired key points.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/Qp1t9.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Qp1t9.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example for a trouser, the above image shows the desired key points.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;My first thoughts:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;&#xA;My first plans were to use neural networks detect various key points after recognising if the cloth is a t-shirt, trouser etc. But I believe, the problem with this approach is that collecting a lot of data sets to train the neural network to detect these key points is a massive task. Furthermore, I am not even sure if neural networks can produce the results I am looking for because generally, neural networks work well differentiating well defined varying classes of items like for example cats and dogs. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my question is, is there a better way to achieve what I am trying to do? Any help is appreciated thank you. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;UPDATE&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;&#xA;Ideally, what I want to do is identify or recognise each of these key points precisely; meaning, for example, the system should know where the collar region for a t-shirt and track its location at all times. I need to know what each key points are (is it a zip area or shirt's shoulder or a collar region) in order to execute a certain folding algorithm. So in this case, I believe, convexity defects do not work. &lt;/p&gt;&#xA;" OwnerUserId="7278" LastEditorUserId="7278" LastEditDate="2017-07-08T02:47:50.040" LastActivityDate="2017-09-06T04:12:08.623" Title="Best way to detect a range of key points in the image of a given cloth article" Tags="&lt;computer-vision&gt;&lt;artificial-intelligence&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12778" PostTypeId="2" ParentId="12777" CreationDate="2017-07-07T08:40:10.720" Score="1" Body="&lt;p&gt;Neural networks are not the solution to every problem in robotics. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Have a look at the convex hull of the object and convexity defects. &lt;/p&gt;&#xA;" OwnerUserId="23196" LastActivityDate="2017-07-07T08:40:10.720" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12779" PostTypeId="2" ParentId="5" CreationDate="2017-07-07T12:27:31.393" Score="0" Body="&lt;p&gt;A simple option for approximate neighbor search in non-euclidean spaces is using $sqrt(N)$ samples in the search. This has been implemented in OMPL, see &lt;a href=&quot;http://ompl.kavrakilab.org/classompl_1_1NearestNeighborsSqrtApprox.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;ompl::NearestNeighborsSqrtApprox&amp;lt; _T &amp;gt;&lt;/code&gt; Class Template Reference&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This reduces complexity to $O(sqrt(N))$.&lt;/p&gt;&#xA;" OwnerUserId="16611" LastEditorUserId="9176" LastEditDate="2017-07-08T19:44:29.777" LastActivityDate="2017-07-08T19:44:29.777" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12780" PostTypeId="2" ParentId="12775" CreationDate="2017-07-07T12:36:29.460" Score="1" Body="&lt;p&gt;The roll and pitch angles that you calculate using the accelerometer measurements will only be correct if (1) the IMU is non-accelerating (e.g., stationary), and (2) the accelerometer measurements are perfect. Thus, they can only be used to initialize the tilt (roll and pitch) of the IMU, not to calculate roll and pitch during acceleration. An external measurement of yaw angle is required to initialize the yaw angle.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;See these answers:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://robotics.stackexchange.com/a/10047/13926&quot;&gt;What information an IMU gives to a drone?&lt;/a&gt;  &lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://robotics.stackexchange.com/a/12705/13926&quot;&gt;Multicopter: What  are Euler angles used for?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;for some background.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Say the accelerometer measurements are $f_x$, $f_y$, and $f_z$; the gyro measurements are $\omega_x$, $\omega_y$, and $\omega_z$, and the magmetometer measuremenst are $b_x$, $b_y$, and $b_z$.  The roll angle ($\phi$) and pitch ($\theta$) angle can be initialized if the IMU is not accelerating using &#xA;\begin{eqnarray}&#xA;\phi_0 &amp;amp;=&amp;amp; \tan^{-1}\left(f_y/f_z\right) \\&#xA;\theta_0 &amp;amp;=&amp;amp; \tan^{-1}\left(-f_x/\sqrt{f_y^2+f_z^2}\right)&#xA;\end{eqnarray}&#xA;The yaw angle ($\psi$) can be initialized using the magnetometer measurements. Given the roll and pitch angles, the magnetic heading ($\psi_m$) can be calculated from $b_x$, $b_y$, and $b_z$. Given the magnetic declination at the system location, the true heading (or initial yaw angle, $\psi_o$) can be calculated.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once the IMU is initalized in an unaccelerated state, the gyro measurements can be used to calculate the rates of change of the Euler angles while the IMU is moving:&#xA;\begin{eqnarray}&#xA;\dot\phi &amp;amp;=&amp;amp; \omega_x +\tan\theta\sin\phi\,\omega_y +\tan\theta\cos\phi\,\omega_z \\  &#xA;\dot\theta &amp;amp;=&amp;amp; \cos\phi\,\omega_y -\sin\phi\,\omega_z \\ &#xA;\dot\psi   &amp;amp;=&amp;amp; \sec\theta\sin\phi\,\omega_y +\sec\theta\cos\phi\,\omega_z &#xA;\end{eqnarray}&#xA;The rates of change of the Euler angles are then numerically integrated to propagate the Euler angles.  The coordinate transformation matrix at each instant of time can then be obtained from the Euler angles.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This will work if your IMU never pitches up or down to $\pm90^\circ$.  In that case it will be better to calculate and propagate quaternions instead of Euler angles. (Euler angles can always be calculated from the quaternions.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alas, the gyros are not perfect.  Say that the gyros have bias errors, then these bias errors will also be integrated with time to result in the Euler angled &quot;drifting&quot;.  For this reason, an extended Kalman filter is often used to calculate the orientation of the IMU, aided by other measurements (magnetometer, accelerometer, and a GPS, for example). But that's another topic :) &lt;/p&gt;&#xA;" OwnerUserId="13926" LastActivityDate="2017-07-07T12:36:29.460" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12782" PostTypeId="1" CreationDate="2017-07-08T01:56:19.117" Score="3" ViewCount="1804" Body="&lt;p&gt;I have a body with origin at point A which is represented in homogeneous coordinate of matrix 4x4 and I would like to rotate it around an arbitrary vector in 3D space. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I understand how to rotate the body around its own frame axis, but I'm not sure how to rotate it around any vector in space.&lt;/p&gt;&#xA;" OwnerUserId="17472" LastEditorUserId="9176" LastEditDate="2017-07-08T19:45:15.987" LastActivityDate="2017-07-09T03:00:50.677" Title="How rotate a point around an arbitrary line in 3D?" Tags="&lt;kinematics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12783" PostTypeId="1" AcceptedAnswerId="12791" CreationDate="2017-07-08T08:48:04.960" Score="0" ViewCount="88" Body="&lt;p&gt;Why are there no simple industrial robots (mainly for simpler tasks like pick and place) that are:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Cheap (&amp;lt;=3000$), &lt;/li&gt;&#xA;&lt;li&gt;Lightweight (&amp;lt;=10kg),&lt;/li&gt;&#xA;&lt;li&gt;Fast (600mm/s at end effector),&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Most of the robots I have looked at cost more than 10K$. Many of cheap ones use 3D printed (plastic) components.  I'm not sure whether these robots can survive the continuous and long operating hours in factories.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What's the bottleneck developing such a system? &#xA;Why haven't established companies not entered this market?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could someone give some insight on this?&lt;/p&gt;&#xA;" OwnerUserId="10435" LastEditorUserId="462" LastEditDate="2017-07-08T20:13:30.277" LastActivityDate="2017-07-09T18:24:37.720" Title="Cheap light fast industrial robot?" Tags="&lt;industrial-robot&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12787" PostTypeId="2" ParentId="11971" CreationDate="2017-07-08T19:54:29.070" Score="1" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Servomotor&quot; rel=&quot;nofollow noreferrer&quot;&gt;The servomotor&lt;/a&gt; is already a closed-loop servomechanism that uses position feedback to control its motion and final position. Your servo is an &lt;a href=&quot;https://en.wikipedia.org/wiki/Servomotor#Integrated_servomotors&quot; rel=&quot;nofollow noreferrer&quot;&gt;integrated servomotor&lt;/a&gt;, and then it contains the following equipment in a single package:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;a small closed-loop controller (e.g. PI) which regulates the physical greetness per kind of motor directly linked to the produced torque (e.g. the absorbed current of the internal DC motor). In the industrial servos, the controllers are a standard industrial component on power electronics components like MOSFETs or IGBTs;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;a rotable potentiometer feeding the current value of the angle back to the controller (so that you can also get the angle value over the command channel) and then closes the loop;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The motor.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Therefore, in order to implement  $u = -Kx$ you would need to get control of the signal (now computed by the internal controller) &lt;strong&gt;directly&lt;/strong&gt; linked to the torque (e.g. the absorbed current in the case of DC motor).&lt;/p&gt;&#xA;" OwnerUserId="17372" LastEditorUserId="17372" LastEditDate="2017-07-08T19:59:43.837" LastActivityDate="2017-07-08T19:59:43.837" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12788" PostTypeId="1" AcceptedAnswerId="12789" CreationDate="2017-07-08T20:56:20.700" Score="0" ViewCount="476" Body="&lt;p&gt;I'm working on a self-balancing robot project and am in the process of motor sizing. I've read that with self-balancing robots the motors need to switch direction quickly, which can cause them to briefly draw more than twice the stall current if changing from full speed in one direction to full speed in the other direction. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I'm wondering if, when I find a motor with a suitable rated torque to drive the robot, would I need to work out if the battery can supply a current twice (or more) times the stall current of the motors/how long it would last before being drained?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;e.g. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Motor Stall Current: 5000mA = 5A&lt;br&gt;&#xA;12v Ni-MH Battery: 3800mAh = 3.8Ah&#xA;$$I_{stall} = (5A*2) = 10A \,\,\,\,\,(2\, motors)$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$C_{battery} = 3.8Ah$$&#xA;$$$$&#xA;$$I_{stall} = \frac {C_{battery}}{t}$$&#xA;$$t = \frac {C_{battery}}{I_{stall}}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$t = \frac {3.8Ah}{10A} = 0.38h$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the battery could supply twice the stall current for 0.19h.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Am I understanding this correctly?  &lt;/p&gt;&#xA;" OwnerUserId="7820" LastActivityDate="2017-07-08T21:37:36.273" Title="DC gearmotor stall current and battery capacity" Tags="&lt;motor&gt;&lt;battery&gt;&lt;two-wheeled&gt;&lt;current&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12789" PostTypeId="2" ParentId="12788" CreationDate="2017-07-08T21:37:36.273" Score="0" Body="&lt;p&gt;You will almost never get the motors to sink their stall currents... But yes, your robot will last 0.38 hours.&#xA;Also, it's good to know that you should not reach the 80% of the battery's nominal voltage (at least not in LiPo or NiMh). So be careful!&lt;/p&gt;&#xA;" OwnerUserId="17483" LastActivityDate="2017-07-08T21:37:36.273" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="12790" PostTypeId="1" CreationDate="2017-07-08T22:48:54.037" Score="2" ViewCount="206" Body="&lt;p&gt;I am trying to create the following set up as a project in education:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;QAV250 quad with CC3D controller&lt;/li&gt;&#xA;&lt;li&gt;2xBBC Micro:bits used as the receiver, giving out 50 Hz PWM signals to the CC3D controller - one does throttle and yaw, one does pitch and roll.&lt;/li&gt;&#xA;&lt;li&gt;2xBBC Micro:bits sending out controlling signals&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I can get past the receiver setup wizard and even arm the quad, however I'm getting erratic behaviour, particularly for the throttle. Despite commanding it low, the throttle sometimes remains high.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know if this is linked but on the receiver calibration page of LibrePilot, the input values only update every second (PC plugged into the CC3D). Should these update more frequently? Also, the image of where the sticks are during calibration rarely moves.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Possible reasons I have thought of are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;BBC Micro:bit runs at 3 V. Is this insufficient for the PWM signal (although I just tried with a Raspberry Pi and Adafruit PWM adaptor and the same laggy behaviour shows on LibrePilot)&lt;/li&gt;&#xA;&lt;li&gt;Is there a syncing issue in the PWM? (i.e. two Micro:bits outputting PWM signals which aren't synchronised). Unfortunately the Micro bit doesn't reliably cope with four simultaneous PWMs, hence the need to use two.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;My goal is to show the power of the Micro:bit, despite the fact it's aimed at children, but is this just too much for it?!&lt;/p&gt;&#xA;" OwnerUserId="17470" LastEditorUserId="9176" LastEditDate="2017-07-10T14:33:53.920" LastActivityDate="2018-03-08T18:36:11.760" Title="BBC Micro bit PWM link to CC3D quad controller" Tags="&lt;quadcopter&gt;&lt;pwm&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12791" PostTypeId="2" ParentId="12783" CreationDate="2017-07-09T00:15:44.067" Score="0" Body="&lt;p&gt;High quality, low backlash gear reducers cost almost \$1,000 a piece. You need one on all 6 joints. High powered servo motors cost $500+ each. High quality bearings that allow for high pre-loading are a few hundred each. Add the electronics, aluminum body, labor, etc. and it adds up quickly.&lt;/p&gt;&#xA;" OwnerUserId="17485" LastEditorUserId="17485" LastEditDate="2017-07-09T18:24:37.720" LastActivityDate="2017-07-09T18:24:37.720" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="12792" PostTypeId="2" ParentId="12782" CreationDate="2017-07-09T03:00:50.677" Score="2" Body="&lt;p&gt;For a general point in 3D space, $P=(x,y,z)$, and a vector, $V$, which is defined by a line between two points, $P_1=(x_1,y_1,z_1)$ and $P_2=(x_2,y_2,z_2)$, (i.e. $V=P_2-P_1$), the transformation of the point around that vector by an angle, $\theta$, is given by:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\left(&#xA;\begin{array}{c}&#xA; x' \\&#xA; y' \\&#xA; z' \\&#xA; 1 \\&#xA;\end{array}&#xA;\right)=T^{-1}.R_x{}^{-1}.R_y{}^{-1}.R_z.R_y.R_x.T.\left(&#xA;\begin{array}{c}&#xA; x \\&#xA; y \\&#xA; z \\&#xA; 1 \\&#xA;\end{array}&#xA;\right)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$P_{transformed}=(x',y',z') \\$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$T=\left(&#xA;\begin{array}{cccc}&#xA; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; -x_1 \\&#xA; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; -y_1 \\&#xA; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; -z_1 \\&#xA; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\&#xA;\end{array}&#xA;\right) \\$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$R_x=\left(&#xA;\begin{array}{cccc}&#xA; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\&#xA; 0 &amp;amp; \frac{c}{d} &amp;amp; -\frac{b}{d} &amp;amp; 0 \\&#xA; 0 &amp;amp; \frac{b}{d} &amp;amp; \frac{c}{d} &amp;amp; 0 \\&#xA; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\&#xA;\end{array}&#xA;\right) \\$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$R_y=\left(&#xA;\begin{array}{cccc}&#xA; d &amp;amp; 0 &amp;amp; -a &amp;amp; 0 \\&#xA; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\&#xA; a &amp;amp; 0 &amp;amp; d &amp;amp; 0 \\&#xA; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\&#xA;\end{array}&#xA;\right) \\$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$R_z=\left(&#xA;\begin{array}{cccc}&#xA; \cos (\theta ) &amp;amp; -\sin (\theta ) &amp;amp; 0 &amp;amp; 0 \\&#xA; \sin (\theta ) &amp;amp; \cos (\theta ) &amp;amp; 0 &amp;amp; 0 \\&#xA; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \\&#xA; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\&#xA;\end{array}&#xA;\right) \\$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$d=\sqrt{b^2+c^2} \\$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$U=(a,b,c): \text{A unit vector in the direction of the vector, V.}$&lt;/p&gt;&#xA;" OwnerUserId="16685" LastActivityDate="2017-07-09T03:00:50.677" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12793" PostTypeId="1" CreationDate="2017-07-09T04:04:16.763" Score="3" ViewCount="10282" Body="&lt;p&gt;I am relatively new to using drones and was wondering if someone more experienced in the topic could lend a hand. I am familiar with C++ and OpenCV, a facial recognition software that has libraries in C++. I would like to be able to use the software to control the drone (engaging it/turning off or on. Flight patterns would be a plus). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In other words I need someone to point me in the right direction to finding the right materials so that my C++ code can control the drone. If anyone can point me to the reading materials or specific drones to purchase I would be extremely grateful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Note, I used quadcopter as a tag because I did not have enough reputation to use drone&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="17487" LastActivityDate="2017-07-11T18:31:50.933" Title="Using C++ to control a drone" Tags="&lt;quadcopter&gt;&lt;computer-vision&gt;&lt;artificial-intelligence&gt;" AnswerCount="4" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12795" PostTypeId="1" AcceptedAnswerId="12813" CreationDate="2017-07-09T17:11:54.540" Score="2" ViewCount="545" Body="&lt;p&gt;I want to plot the path of a vehicle via the estimation of egomotion based on essential matrix.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Everything was fine with openCV and the following function.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;function [ xnow] = estimate_pose_test( points1, points2, K,xLast )&#xA;&#xA;&#xA;%%%%OpenCV%%%%%&#xA;&#xA;  E = cv.findEssentialMat(points1, points2, 'CameraMatrix',K, 'Method','Ransac');&#xA; [R, t] = cv.recoverPose(E, points1, points2,'CameraMatrix',K);&#xA; ry= asin(R(1,3));&#xA; u=[t(1,1);t(3,1);ry];&#xA;&#xA;%%%%%%%%%Opengv%%%%%%&#xA;% for i=1:size(points1,2)&#xA;%     I1(:,i)=points1{i}';&#xA;%     I2(:,i)=points2{i}';&#xA;% end&#xA;%  temp = K \ [I1; ones(1,size(I1,2))];&#xA;%  I1_norms = sqrt(sum(temp.*temp));&#xA;%  I1n = temp ./ repmat(I1_norms,3,1);&#xA;%  &#xA;%  temp = K \ [I2; ones(1,size(I2,2))];&#xA;%  I2_norms = sqrt(sum(temp.*temp));&#xA;%  I2n = temp ./ repmat(I2_norms,3,1);&#xA;%  &#xA;%  X = opengv('fivept_nister_ransac',I1n,I2n);&#xA;%  R = X(:,1:3);&#xA;%  t = X(:,4);&#xA;%  ry= asin(R(1,3));&#xA;%  u=[t(1,1);t(3,1);ry];&#xA;%  &#xA;&#xA;&#xA; theta=xLast(3)+u(3);&#xA;&#xA; if(theta&amp;gt;pi)&#xA;    theta=theta-2*pi;&#xA;elseif(theta&amp;lt;-pi)&#xA;    theta = theta+2*pi;&#xA; end&#xA;&#xA;s = sin(xLast(3));&#xA;c = cos(xLast(3));&#xA;% actual value added with the new control vector&#xA;&#xA;xnow=[xLast(1:2)+[c s; -s c]*u(1:2);theta];&#xA;&#xA;&#xA;&#xA;&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;points1 and points2 are corresponding SURF features.&#xA;  K is internal calibration matrix.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I want to use &lt;a href=&quot;https://i.stack.imgur.com/jgXz9.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;OpenGV&lt;/a&gt; librairy. OpenGV expects normalized coordinates on the unit sphere, so I started by transforming the measurements as recommended in the previous link and shown in the commented part in the above function.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The plotted path was totally wrong and the results between Opencv and Opengv are different.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example for the same two consecutive frames, from opencv, I obtained the following rotation and translation:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;R1 =&#xA;&#xA;    0.9999    0.0016   -0.0153&#xA;   -0.0017    1.0000   -0.0054&#xA;    0.0153    0.0055    0.9999&#xA;&#xA;t1 =&#xA;&#xA;    0.1159&#xA;    0.1042&#xA;   -0.9878&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And with OpenGv,&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;R2 =&#xA;&#xA;    0.9998   -0.0059   -0.0167&#xA;    0.0060    1.0000    0.0050&#xA;    0.0166   -0.0051    0.9998&#xA;&#xA;t2 =&#xA;&#xA;    0.2776&#xA;   -0.0771&#xA;    0.6458&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;There is not even a constant scale factor between t2 and t1.&#xA;Where is the problem? in plotting the resuts or in the estimation itself?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt;&#xA;I know that the function I wrote dosen't really make sense but it is just a test function to illustrate the problem I faced with OpenGV.&#xA;First, what I want to do is to track the state of a vehicle defined by a reduced state vector $q_k=(x,z,\theta)$ in order to estimate, afterwards, the uncertainty on the position, because I'm working with a probabilistic approach where:&#xA;$q_{k|k-1}=f(q_{k|k-1},u_{k-1})$ &#xA;So, I need the values of control vector $u$ that's why I'm deriving $dx$, $dz$ and $d\theta$ from the outputted $R$ and $t$. Then, I'm plotting the path from the control vector values just to verify that i'm deriving them correctly by comparing the plotted path to the ground truth.&#xA;Regarding the coordinate reference system, I'm using the following definition:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/jgXz9.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/jgXz9.png&quot; alt=&quot;Coordinate system&quot;&gt;&lt;/a&gt; so the vehicle is moving in the $XZ$ plane and the rotation is around the $Y$ axis that's why I'm using $t(1), t(3)$ as position and $ry$ as rotation in the the control vector.&lt;/p&gt;&#xA;" OwnerUserId="17442" LastEditorUserId="17442" LastEditDate="2017-07-12T13:36:30.273" LastActivityDate="2017-07-12T13:36:30.273" Title="Mobile robot pose estimation" Tags="&lt;mobile-robot&gt;&lt;computer-vision&gt;&lt;opencv&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="12798" PostTypeId="2" ParentId="12793" CreationDate="2017-07-09T21:57:49.853" Score="2" Body="&lt;p&gt;From a very basic standpoint, you're talking about turning on and off motors using code. I'm not sure what drone you're planning on using (building your own?), but there's a lot of great motor controllers out there. &lt;a href=&quot;http://rads.stackoverflow.com/amzn/click/B014KTSMLA&quot; rel=&quot;nofollow noreferrer&quot;&gt;Adafruit&lt;/a&gt; makes some great motor hats that work with a Raspberry Pi, if you decide to go that route (you'll still need an H Bridge). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want something more advanced, like a full on flight controller, I'd point you to &lt;a href=&quot;https://github.com/search?l=C%2B%2B&amp;amp;q=quadcopter%20control&amp;amp;type=Repositories&amp;amp;utf8=%E2%9C%93&quot; rel=&quot;nofollow noreferrer&quot;&gt;GitHub&lt;/a&gt; as a starter, where there's a lot of stuff already out there. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It may be a good first start to get a motor (or motors) running as a sort of 'hello world', and then move to drone control from there.&lt;/p&gt;&#xA;" OwnerUserId="17479" LastActivityDate="2017-07-09T21:57:49.853" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12800" PostTypeId="2" ParentId="12793" CreationDate="2017-07-10T13:17:59.050" Score="1" Body="&lt;p&gt;I propose to use a flight controller (FC software like &lt;a href=&quot;https://github.com/betaflight/betaflight/releases&quot; rel=&quot;nofollow noreferrer&quot;&gt;Betaflight&lt;/a&gt;) connected to an Arduino or Raspberry Pi.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The new F3 or F4 flight controllers have, in general, I2C/SPI interfaces where you can call the FC functions.  &lt;/p&gt;&#xA;" OwnerUserId="16396" LastEditorUserId="16396" LastEditDate="2017-07-10T15:36:37.967" LastActivityDate="2017-07-10T15:36:37.967" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12802" PostTypeId="1" AcceptedAnswerId="12809" CreationDate="2017-07-10T22:44:58.683" Score="0" ViewCount="493" Body="&lt;p&gt;I've seen with drones that the norm of programming them is to create three loops,  for each axis, but I'm not quite sure what a control loop is when the code must run in a sequential manner. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Programmatically,  what IS a control loop? &lt;/p&gt;&#xA;" OwnerUserId="17194" LastActivityDate="2017-07-11T16:26:10.840" Title="What is a control loop?" Tags="&lt;control&gt;&lt;dynamic-programming&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12803" PostTypeId="1" AcceptedAnswerId="14015" CreationDate="2017-07-10T23:51:07.680" Score="2" ViewCount="1987" Body="&lt;p&gt;There a two controllers named $H_2$ and $H_\infty$.&#xA;Can someone explain if:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;They have have guaranteed stability margins?&lt;/li&gt;&#xA;&lt;li&gt;Do they have a Kalman filter?&lt;/li&gt;&#xA;&lt;li&gt;Are they for both SISO and MIMO systems?&lt;/li&gt;&#xA;&lt;li&gt;Can I use them with LQG?&lt;/li&gt;&#xA;&lt;li&gt;Which one is best?&lt;/li&gt;&#xA;&lt;li&gt;If you know how to create a basic $H_2$ and $H_\infty$. Can you please show me step by step?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="17252" LastActivityDate="2017-08-14T23:17:05.310" Title="What's the diffrence between $H_2$ and $H_\infty$ controll?" Tags="&lt;mobile-robot&gt;&lt;control&gt;&lt;kalman-filter&gt;&lt;dynamics&gt;&lt;simulation&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="12804" PostTypeId="1" CreationDate="2017-07-11T00:22:10.427" Score="0" ViewCount="119" Body="&lt;p&gt;I am programming my Create 2 with Arduino Uno. It worked fine a few weeks ago, then I just left it there, charging it about once a week. Now when I try to play with it again, I find that it starts to send weird sensor data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, the value of light bumper data (package ID 45) supposes to be within the range of 0-127. It used to be fine. But now I receive 254 when there is no obstacle in front of the robot. Same issue happens to many different sensor readings. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can someone help me with this problem?&lt;/p&gt;&#xA;" OwnerUserId="17500" LastEditorUserId="9176" LastEditDate="2017-07-11T09:48:45.657" LastActivityDate="2017-07-26T17:45:11.093" Title="Create 2 weird sensor reading 254" Tags="&lt;irobot-create&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="12805" PostTypeId="2" ParentId="12803" CreationDate="2017-07-11T02:20:36.463" Score="5" Body="&lt;p&gt;In short answer:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;yes&lt;/li&gt;&#xA;&lt;li&gt;Kalman filter is a special case of an $H_2$ observer&lt;/li&gt;&#xA;&lt;li&gt;Yes&lt;/li&gt;&#xA;&lt;li&gt;Yes ... LQG is just Kalman filter + LQR controller, which are both special cases of $H_2$&lt;/li&gt;&#xA;&lt;li&gt;Depends on use case. $H_2$ minimizes maximum error while $H_{\infty}$ minimizes error function 2-norm &lt;/li&gt;&#xA;&lt;li&gt;Very complicated&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The somewhat longer answer:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$H_2$ and $H_{\infty}$ control are both advanced robust-control strategies used for linear systems considering a bounded range of external disturbances plus modelling uncertainties (e.g. element 1,1 of the system $A$ matrix is in the range 1.1-1.5). For such systems, these controllers have the advantages of:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;(sub)optimal control&lt;/li&gt;&#xA;&lt;li&gt;robust&lt;sup&gt;1&lt;/sup&gt; performance and stability guarantees&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;A more complete description of $H_{\infty}$is &lt;a href=&quot;https://en.wikipedia.org/wiki/H-infinity_methods_in_control_theory&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The theory behind them is significantly more complex than Kalman or LQR. Matlab does have tools for designing these controllers (e.g. &lt;a href=&quot;https://www.mathworks.com/help/robust/ref/hinfsyn.html?requestedDomain=www.mathworks.com&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;) but even knowing the theory the tools are somewhat cumbersome to use. I can't imagine trying to use those tools not knowing the theory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt;This means for any real system with parameters within the specified uncertainty ranges the performance will be within a calculated bound.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2017-07-11T02:20:36.463" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="12807" PostTypeId="2" ParentId="12793" CreationDate="2017-07-11T11:06:51.710" Score="3" Body="&lt;p&gt;You could use &lt;a href=&quot;http://www.ros.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;ROS&lt;/a&gt;. There's  &lt;a href=&quot;http://wiki.ros.org/ardrone_autonomy&quot; rel=&quot;nofollow noreferrer&quot;&gt;AR Drone Autonomy&lt;/a&gt; for well.. Parrot AR-Drones. &#xA;&lt;a href=&quot;http://wiki.ros.org/tum_ardrone&quot; rel=&quot;nofollow noreferrer&quot;&gt;TUM ARDrone&lt;/a&gt; from the Technical University of Munich, who used that with OpenCV to control a drone.&#xA;You can simulate a drone using &lt;a href=&quot;http://wiki.ros.org/hector_quadrotor&quot; rel=&quot;nofollow noreferrer&quot;&gt;Hector&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or simply search google for &lt;code&gt;quadcopter ROS&lt;/code&gt;&lt;/p&gt;&#xA;" OwnerUserId="14108" LastActivityDate="2017-07-11T11:06:51.710" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12808" PostTypeId="2" ParentId="12790" CreationDate="2017-07-11T12:56:30.777" Score="1" Body="&lt;p&gt;Ok I think I'm getting somewhere. Two issues found:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;When the Micro:bit runs off two AA batteries the 3v output can drop significantly as the batteries run down. The CC3D wasn't liking the even lower voltage. I've now cut a USB cable up and wired it to the ESCs' BEC output at 5v. Much better signal now. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;When the throttle is raised above the neutral detent, I was expecting a gentle increase in motor power. Instead you get a power a little below take off power. This scared me before even fitting the props! Now I've got some more confidence in the system, I've managed to sustain a good hover. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Still need to improve stability but that is normal  use of LibrePilot. &lt;/p&gt;&#xA;" OwnerUserId="17470" LastActivityDate="2017-07-11T12:56:30.777" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12809" PostTypeId="2" ParentId="12802" CreationDate="2017-07-11T13:09:49.217" Score="4" Body="&lt;p&gt;A control loop is:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Get a reference&lt;/li&gt;&#xA;&lt;li&gt;Get a feedback&lt;/li&gt;&#xA;&lt;li&gt;&quot;Decide what to do&quot; given the reference and feedback&lt;/li&gt;&#xA;&lt;li&gt;Perform an action (or not) based on the decision.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;This process continuously repeats. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Generally, if you have multiple control loops on one controller, you perform each step in turn for each control loop - get &lt;em&gt;all&lt;/em&gt; references, get &lt;em&gt;all&lt;/em&gt; feedbacks, run the actual control algorithm to generate the control signal, then write the control signal as appropriate.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-07-11T13:09:49.217" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12810" PostTypeId="2" ParentId="12802" CreationDate="2017-07-11T16:26:10.840" Score="2" Body="&lt;p&gt;I think Chuck's answer is quite accurate. Just to add, there are two types of control loops. What Chuck has described is a &lt;strong&gt;closed control loop&lt;/strong&gt;, and hence has a feedback loop to make sure the output is same as reference input or the set point. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Open loop&lt;/strong&gt;, on the other hand, doesn't need a feedback loop as the control action is independent of the process output.&lt;/p&gt;&#xA;" OwnerUserId="13969" LastActivityDate="2017-07-11T16:26:10.840" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12811" PostTypeId="2" ParentId="12793" CreationDate="2017-07-11T18:31:50.933" Score="2" Body="&lt;p&gt;&lt;a href=&quot;http://rosflight.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;ROSflight&lt;/a&gt; is a relatively new ROS-based autopilot built on top of STM32 family of microcontrollers -- most notably the F1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was built mainly as a research platform so the code is very organized and lean. It was first written in C and is now being ported to C++. The flight controller firmware talks to an on-board companion computer using the MAVLink protocol and exposes IMU (and other sensors) at a rate of 1000Hz through the ROS network using pub/sub.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ROSflight autopilot firmware takes care of attitude estimation, stabilization, mixing, and RC while the high-level controllers written in C++/Python (using ROS) run on the on-board computer and direct the autopilot based on your specific application. This is where you would use OpenCV to do image segmentation / recognition and control off of visual information.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The same research lab that built ROSflight has publicly available ROS high-level controller starter code for &lt;a href=&quot;https://github.com/byu-magicc/ros_copter&quot; rel=&quot;nofollow noreferrer&quot;&gt;multirotors&lt;/a&gt; and fixed wing planes (github.com/rosplane).&lt;/p&gt;&#xA;" OwnerUserId="14272" LastActivityDate="2017-07-11T18:31:50.933" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12813" PostTypeId="2" ParentId="12795" CreationDate="2017-07-11T19:54:24.247" Score="0" Body="&lt;p&gt;I'm having a really hard time understanding what you're doing or why, so I'm going to try to break down your code as I understand it, pointing out along the way why I think what you're doing doesn't make sense. This isn't meant to be demeaning or anything, it's &lt;em&gt;my&lt;/em&gt; problem in that I haven't done enough (any) CV work to make sense of it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here goes: &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;&lt;pre&gt;&lt;code&gt;%%%%OpenCV%%%%%`&#xA;&#xA;E = cv.findEssentialMat(points1, points2, 'CameraMatrix',K, 'Method','Ransac');&#xA;[R, t] = cv.recoverPose(E, points1, points2,'CameraMatrix',K);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Okay, great - give some key points between two frames and see how they shift, then estimate your (change in) position given those points and the camera matrix. I understand this. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;&lt;pre&gt;&lt;code&gt;ry= asin(R(1,3));&#xA;u=[t(1,1);t(3,1);ry];&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Okay you lost me. You are given a perfectly good rotation matrix &lt;code&gt;R&lt;/code&gt;, and then... what? You're trying to find the rotation about the &lt;em&gt;y-axis&lt;/em&gt;? It looks like you're trying to use the definition of a rotation matrix, given on the &lt;a href=&quot;https://en.wikipedia.org/wiki/Rotation_matrix#Basic_rotations&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia page&lt;/a&gt; as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;R_y(\theta) = \left[\begin{array}{ccc}&#xA;\cos\theta &amp;amp; 0 &amp;amp; \sin\theta \\&#xA;0 &amp;amp; 1 &amp;amp; 0 \\&#xA;-\sin\theta &amp;amp; 0 &amp;amp; \cos\theta \\&#xA;\end{array}\right]&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, the problem here is those zeros - you don't have them in your output $R$ matrix. You &lt;em&gt;do not have&lt;/em&gt; a matrix that is strictly a rotation about the $y$ axis. What's more is the fact that &lt;a href=&quot;https://robotics.stackexchange.com/questions/12795/mobile-robot-pose-estimation?noredirect=1#comment22487_12795&quot;&gt;you said&lt;/a&gt;,&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I want to estimate the pose of a robot defined by (x,y,theta).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So, what rotation are you expecting? If you rotate about the $y$ axis, then what you're saying is that you want to rotate points &lt;strong&gt;in the x-z plane&lt;/strong&gt;. But, if you don't have any z-axis points, then all you're doing is rotating the x-axis points &lt;em&gt;and you're not rotating the y-axis points at all.&lt;/em&gt; Verify this by looking at the second row of that matrix definition: &#xA;$\left[\begin{array}{ccc}&#xA;0&amp;amp;1&amp;amp;0 \\&#xA;\end{array}\right]$ - it exactly preserves the second row (y-values) of your points matrix. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe this is what you want though, because the points you keep from the translation vector are the first and third, the $x$ and $z$ values. But again, you &lt;em&gt;said&lt;/em&gt; you want to keep the $x$ and $y$ values, and this is where my lack of understanding of your inputs is hurting me. Maybe you &lt;em&gt;are&lt;/em&gt; providing the inputs &lt;code&gt;points1&lt;/code&gt; and &lt;code&gt;points2&lt;/code&gt; as a 3xn matrix of points, [x;0;z], and everything is processing correctly. However, I &lt;em&gt;did&lt;/em&gt; note that you can also pass a 2xn matrix of points, so again I'm not sure what your data set is or how you're expecting the output to look. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But beyond that, I'll skip the OpenGV section as it's commented out and go to:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;&lt;pre&gt;&lt;code&gt;theta=xLast(3)+u(3);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So here it looks like you're attempting a successive rotation by adding the previous rotation angle &lt;code&gt;ry&lt;/code&gt;, from &lt;code&gt;xLast&lt;/code&gt;, to the current value of rotation, &lt;code&gt;ry&lt;/code&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;(Side note here - I would call the rotation something like &lt;code&gt;dTheta&lt;/code&gt; to show it's a difference value, like dx/dt, for example, but that's a nit-picky kind of point.)&lt;/em&gt; &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;&lt;pre&gt;&lt;code&gt;if(theta&amp;gt;pi)&#xA;  theta=theta-2*pi;&#xA;elseif(theta&amp;lt;-pi)&#xA;  theta = theta+2*pi;&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Bounds checking, okay. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;&lt;pre&gt;&lt;code&gt;s = sin(xLast(3));&#xA;c = cos(xLast(3));&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Setting up for... a rotation matrix??&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;&lt;pre&gt;&lt;code&gt;% actual value added with the new control vector&#xA;xnow=[xLast(1:2)+[c s; -s c]*u(1:2);theta];&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;And now mashing up the new rotation matrix with the previous information. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I mentioned the term &quot;successive rotations&quot; a bit ago, but you should &lt;a href=&quot;http://www.springer.com/cda/content/document/cda_downloaddocument/9789048137756-c2.pdf?SGWID=0-0-45-1123955-p173940737&quot; rel=&quot;nofollow noreferrer&quot;&gt;read more about the homogeneous transform&lt;/a&gt; (PDF). Basically, you're allowed to do successive transforms just by multiplying the two together. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, compose the matrix:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;H = \left[\begin{array}{ccc}&#xA;R &amp;amp; t \\&#xA;\left[\begin{array}{ccc}&#xA;0 &amp;amp; 0 &amp;amp; 0 \\&#xA;\end{array}\right] &amp;amp; 1 \\&#xA;\end{array}\right]&#xA;$$&#xA;Any time you get a new update, just post-multiply the new matrix. So, for example, on your first iteration, you'll get the pose of the second frame relative to the first:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;^1H_2 = \left[\begin{array}{ccc}&#xA;^1R_2 &amp;amp; ^1t_2 \\&#xA;\left[\begin{array}{ccc}&#xA;0 &amp;amp; 0 &amp;amp; 0 \\&#xA;\end{array}\right] &amp;amp; 1 \\&#xA;\end{array}\right]&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your second iteration will give you the third frame relative to the second:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;^2H_3 = \left[\begin{array}{ccc}&#xA;^2R_3 &amp;amp; ^2t_3 \\&#xA;\left[\begin{array}{ccc}&#xA;0 &amp;amp; 0 &amp;amp; 0 \\&#xA;\end{array}\right] &amp;amp; 1 \\&#xA;\end{array}\right]&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BUT, what you really care about is the third frame relative to the first, so just multiply the two transforms together:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;^1H_3 = (^1H_2)(^2H_3) \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Want to get the fourth frame relative to the first? Easy - &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;^1H_4 = (^1H_3)(^3H_4) \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And so on. You'll get:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;^1H_n = (^1H_{n-1})(^{n-1}H_n) \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The incremental adjustment, $^{n-1}H_n$, is the output of each iteration because you get $^{n-1}R_n$, the incremental rotation, and $^{n-1}t_n$, the incremental translation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;All this is to say&lt;/strong&gt; that (I think) you should stop re-inventing the wheel. You dissolve a rotation matrix into an angle just to re-create a rotation matrix later. If you want to get the rotation matrix and translation vector at the end, just pull the appropriate parts: &lt;code&gt;R = H(1:3,1:3);&lt;/code&gt; and &lt;code&gt;t = H(1:3,4);&lt;/code&gt;. If you want, you can pull the individual components &lt;code&gt;dX = t(1);&lt;/code&gt;, &lt;code&gt;dY = t(2);&lt;/code&gt;, and &lt;code&gt;dZ = t(3);&lt;/code&gt;. I use the delta variable names &lt;code&gt;dX&lt;/code&gt;, etc. as a reminder that these are all &lt;em&gt;relative&lt;/em&gt; translations from the first frame. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding orientation, you should really be looking at a more proper conversion of the rotation matrix. You could use Euler angles or quaternions, but you really should &lt;strong&gt;not&lt;/strong&gt; be trying to pull a single rotation angle from a single value in a matrix.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, if I had your code to write again, I would probably go:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;function [ xnow] = estimate_pose_test( points1, points2, K,xLast )&#xA;%%%%OpenCV%%%%%&#xA;&#xA;E = cv.findEssentialMat(points1, points2, 'CameraMatrix',K, 'Method','Ransac');&#xA;[R, t] = cv.recoverPose(E, points1, points2,'CameraMatrix',K);&#xA;xnow = xLast*[R,t; zeros(1,3),1];&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This keeps &lt;code&gt;xnow&lt;/code&gt; and &lt;code&gt;xLast&lt;/code&gt; as the 4x4 transform, but again if you really wanted the x/y/z values they're just the 3x1 vector starting at (1,4) in the homogeneous transform. Also, as mentioned, you should really be using a different method of displaying the rotation angle. You can keep the rotation matrix for internal stuff, but maybe Euler angles or Tait-Bryan angles would be the best for displaying a value to a user.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS - I would guess the &lt;code&gt;X&lt;/code&gt; you get from the OpenGV code is actually the full homogeneous transform matrix, so you save a step by not needing to make it yourself (not that it's hard). &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-07-11T19:54:24.247" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="12814" PostTypeId="2" ParentId="12804" CreationDate="2017-07-11T20:31:17.487" Score="2" Body="&lt;p&gt;Try to reset your Create 2:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Send a 7 via the serial port to reset it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;OR&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Press and hold &lt;em&gt;Dock&lt;/em&gt; and &lt;em&gt;Spot&lt;/em&gt; on the robot for 10 seconds. When the button is released, Roomba will play the reset tone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This helped me once when I had problems with the serial interface.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind that the baudrate will be reset to 115200.&lt;/p&gt;&#xA;" OwnerUserId="17446" LastActivityDate="2017-07-11T20:31:17.487" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12815" PostTypeId="2" ParentId="12023" CreationDate="2017-07-11T20:52:19.770" Score="1" Body="&lt;p&gt;So the RXM-RAW and RXM-EPH messages come from IS-GPS-200H interface control document found here. &#xA;&lt;a href=&quot;http://www.gps.gov/technical/icwg/IS-GPS-200H.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.gps.gov/technical/icwg/IS-GPS-200H.pdf&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But these are not exactly the same as RXM-RAW RXM-EPH messages. Namely there is a byte offset because the ublox messages contain a header and a checksum. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But this file here should be helpful to what you want to do.&#xA;&lt;a href=&quot;http://gnsstk.sourceforge.net/gps_8c-source.html#l00714&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://gnsstk.sourceforge.net/gps_8c-source.html#l00714&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Remember to multiply by the correct scale factor to make sure your units are right. (semi circles are not the same thing as radians). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A good method for checking your work would be to use rtklib to get your ublox to output it's messages to a a rinex.o file and compare to the code that you wrote.&lt;/p&gt;&#xA;" OwnerUserId="17461" LastActivityDate="2017-07-11T20:52:19.770" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12816" PostTypeId="1" CreationDate="2017-07-11T21:15:28.437" Score="0" ViewCount="585" Body="&lt;p&gt;Do other Roombas have an Open Interface like the Create2? Can I send commands to my 780 like the Create 2?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am trying to control my Roomba 780 I made a 8pin FDTI connector to USB and my roomba beep once when plugged in. The logic level is 3.3V &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is my python code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#!/usr/bin/env python&#xA;&#xA;import serial&#xA;import time&#xA;&#xA;#start usb connection able with Roomba&#xA;usbCom = serial.Serial(port='/dev/ttyAMA0', baudrate=115200)&#xA;&#xA;#initialze roomba and put it in safe mode&#xA;usbCom.write(bytes.fromhex('80'))&#xA;time.sleep(.1)&#xA;usbCom.write(bytes.fromhex('83'))&#xA;time.sleep(.1)&#xA;&#xA;#spot mode clean&#xA;usbCom.write(bytes.fromhex('87'))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I've sent my serial data from my Raspberry PI to my Roomba but it is not responding, it seems to stop at the first line when I send a byte.&lt;/p&gt;&#xA;" OwnerUserId="17511" LastEditorUserId="37" LastEditDate="2017-07-12T14:31:12.953" LastActivityDate="2017-07-14T18:26:23.897" Title="Programming Roomba other than Create 2 using RaspberryPi" Tags="&lt;raspberry-pi&gt;&lt;irobot-create&gt;&lt;python&gt;&lt;serial&gt;&lt;roomba&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ClosedDate="2017-07-18T13:26:44.673" ContentLicense="CC BY-SA 3.0" />
  <row Id="12817" PostTypeId="2" ParentId="12816" CreationDate="2017-07-11T22:35:19.193" Score="0" Body="&lt;p&gt;Problem solved.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was connected to the wrong serial port.  Connecting to '/dev/ttyUSB0' fixed it.&lt;/p&gt;&#xA;" OwnerUserId="17511" LastEditorUserId="110" LastEditDate="2017-07-14T17:33:05.353" LastActivityDate="2017-07-14T17:33:05.353" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12818" PostTypeId="2" ParentId="12764" CreationDate="2017-07-12T04:53:43.447" Score="1" Body="&lt;p&gt;libgl1-mesa-dev-lts-utopic has been moved to xenial:release repository. &lt;a href=&quot;https://www.ubuntuupdates.org/package/core/xenial/main/proposed/libgl1-mesa-dev-lts-utopic&quot; rel=&quot;nofollow noreferrer&quot;&gt;See This.&lt;/a&gt;&#xA;In order to install it follow &lt;a href=&quot;http://answers.ros.org/question/203610/ubuntu-14042-unmet-dependencies-similar-for-14043/?answer=203724#post-id-203724&quot; rel=&quot;nofollow noreferrer&quot;&gt;this link&lt;/a&gt; or execute &lt;code&gt;sudo apt-get install --install-recommends linux-generic-lts-xenial xserver-xorg-core-lts-xenial xserver-xorg-lts-xenial xserver-xorg-video-all-lts-xenial xserver-xorg-input-all-lts-xenial libwayland-egl1-mesa-lts-xenial           xserver-xorg-dev-lts-xenial mesa-common-dev-lts-xenial libxatracker-dev-lts-xenial libgles2-mesa-dev-lts-xenial libgles1-mesa-dev-lts-xenial libgl1-mesa-dev-lts-xenial libgbm-dev-lts-xenial libegl1-mesa-dev-lts-xenial&lt;/code&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And after succesfully completing it execute &lt;code&gt;sudo apt-get install ros-indigo-desktop-full&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: If you are reinstalling ros on the machine then do this-&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sudo apt-get purge ros-indigo*&#xA;sudo apt-get autoremove&#xA;sudo apt-get install ros-indigo-desktop-full&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="17515" LastEditorUserId="17515" LastEditDate="2017-07-12T05:12:55.730" LastActivityDate="2017-07-12T05:12:55.730" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12819" PostTypeId="2" ParentId="11322" CreationDate="2017-07-12T05:37:43.533" Score="1" Body="&lt;p&gt;Gmapping at openslam is not maintained by anyone now. You can use ros gmapping. Its accuracy will depend on your sensor but it will work pretty good if numbers of points are sufficient for scan match e.g. indoor conditions.&lt;/p&gt;&#xA;" OwnerUserId="17515" LastActivityDate="2017-07-12T05:37:43.533" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12820" PostTypeId="2" ParentId="12531" CreationDate="2017-07-12T05:53:20.837" Score="0" Body="&lt;p&gt;Always save the last transforms and whenever the base_link changes publish all the transforms using saved ones accordingly.&lt;/p&gt;&#xA;" OwnerUserId="17515" LastActivityDate="2017-07-12T05:53:20.837" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12821" PostTypeId="2" ParentId="12134" CreationDate="2017-07-12T12:17:54.223" Score="1" Body="&lt;p&gt;My understanding is that $R_x$ is the receiver time when the signal is received. So that would make $t_x$ the transmission time. And you subtract the bias to get a more accurate transmission time.&lt;/p&gt;&#xA;" OwnerUserId="17461" LastEditorUserId="37" LastEditDate="2017-07-12T14:41:03.963" LastActivityDate="2017-07-12T14:41:03.963" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12822" PostTypeId="1" AcceptedAnswerId="12823" CreationDate="2017-07-12T04:31:14.750" Score="0" ViewCount="56" Body="&lt;p&gt;I’m building a robot by raspberry pi and arduino . I want it can charge automatic.I mean the robot can find the charger station by itself. But I don’t know what kind of sensor can make it true. Wifi and bluetooth not a good choose. So any ideas can make it true? Thank you!&lt;/p&gt;&#xA;" OwnerUserId="17527" OwnerDisplayName="Cheng Jeiry" LastActivityDate="2017-07-12T16:50:30.737" Title="I’m building a robot.what kind of sensor can find the way home" Tags="&lt;sensors&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12823" PostTypeId="2" ParentId="12822" CreationDate="2017-07-12T04:53:12.813" Score="1" Body="&lt;p&gt;This problem has been solved in automated commercial vacuum cleaners.  However most articles on the subject simply state the cleaners find the infrared signal and follow it back to the charger.  The details are missing. Regardless we can speculate.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider the charger station constantly emits a modulated infrared signal similar to that of a TV remote control.  Consider the robot has an infrared receiver similar to that of a TV designed to detect the modulated infrared signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem, this will not work as the infrared receiver used in TVs and other entertainment equipment contains an Automated Gain Control (AGC) circuit which will compensate for weak signals making it impossible to tell which direction the signal is the strongest in.  In other words, which direction the charger is in.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To solve this we need to use an infrared beam interrupter receiver.  This is similar to the infrared receivers found in TV but with out the AGC circuit.  They are designed to detect when an object is in the way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using an infrared beam interrupter receiver, we can rotate or oscillate the robot as it moves to find the direction in which the charger is in. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The more infrared beam interrupter receivers placed on the robot and pointed in slightly different directions, the less the robot has to rotate or oscillate to find the direction in which the charger is in.&lt;/p&gt;&#xA;" OwnerUserId="17364" OwnerDisplayName="st2000" LastActivityDate="2017-07-12T04:53:12.813" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="12824" PostTypeId="1" CreationDate="2017-07-12T20:24:05.150" Score="1" ViewCount="56" Body="&lt;p&gt;I have a mobile robot which receives GPS position (lat/lon) and has an IMU for handling gaps in GPS service. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to be able to conduct short distance planning in a Cartesian plane, but the robot will ultimately be traveling over long distances. Most references I have found describe using a tangential North-East-Down (NED) frame starting at the robot initial position for local planning. This is fine but I am not sure how to go about updating this plane as the robot moves. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I was to update (change the origin) for the frame every 5 min, then I would need to compute many new transformations at this time and potentially introduce a repeating lag in the system. How can I avoid this?&lt;/p&gt;&#xA;" OwnerUserId="17524" LastEditorUserId="9176" LastEditDate="2017-07-13T12:11:35.293" LastActivityDate="2017-07-15T00:24:13.870" Title="How to efficiently update a local Cartesian frame when traveling over long distances on a curved earth" Tags="&lt;localization&gt;&lt;ros&gt;&lt;motion-planning&gt;&lt;gyroscope&gt;&lt;navigation&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12825" PostTypeId="2" ParentId="12064" CreationDate="2017-07-13T00:33:55.223" Score="2" Body="&lt;p&gt;To solve this analytically you need the following information (I have &lt;strong&gt;bolded&lt;/strong&gt; that which you have not provided):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Stall torque for each joint&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Mass and COM of each joint&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;Orientation of each joint relative to its parent joint (not given but I know the robot, they are all parallel to the ground)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Mass and COM of each link&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Length of each link&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I use the word &lt;em&gt;joint&lt;/em&gt; and not &lt;em&gt;motor&lt;/em&gt; here for simplicity. If you want to include things like gearing and other things which may make the joint stall torque different from the motor stall torque, then you will need to know these factors. If your motors are directly connected, you can assume the motor torque is the joint torque for simplicity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am also going to ignore the Omi 535's base joint (it is actually 4DOF) since it is orthogonal to the ground. Not having a go, I assume you ignore it too because you knew it experiences no torque due gravity, but it's probably worth mentioning for completeness.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since all your motors are the same and aligned parallel to the floor, your job is easier. You just need to find the highest possible torque on any joint for any given payload, and then calculate the value of that payload that equals the joint stall torque.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a robotic arm like yours where all joint axes are parallel to the ground in all configurations, the maximum torque for any joint occurs at the first joint when the arm is stretched out horizontally. This is because torque due to gravity is: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\tau = m \cdot g \cdot r_{xy}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That is, mass times gravity times the horizontal distance from the mass to the joint. You can see how the further any mass gets away from the joint horizontally, the higher the torque at the joint. The first joint has to deal with the mass of all the links and other joints plus the payload, and all these masses are furthest away from the first joint horizontally when the arm is fully outstretched.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The total torque at the first joint can be calculated by adding up the torque contributed by each mass along the arm (i.e the links, other joints and finally the payload):&#xA;\begin{align}&#xA;\tau_{max} &amp;amp;= \sum_im_i\cdot g \cdot r_i\\&#xA;&amp;amp;= g\sum_im_i \cdot r_i \\&#xA;&amp;amp;= g \cdot (m_{l_1} \cdot r_{l_1} + m_{j_2} \cdot r_{j_2} + m_{l_2} \cdot r_{l_2} + m_{j_3} \cdot r_{j_3} + m_{l_3} \cdot r_{l_3} + m_{payload} \cdot r_{payload})&#xA;\end{align}&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each $r$ value is the horizontal distance from that component's center of mass to the joint. If the COM of each joint lies on the joint axis, you can simply add up the lengths of the links preceding, since the arm is stretched horizontally. The $r_{payload}$ value should be simply the addition of all the lengths of the links.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only variable on the RHS of the above equation that is unknown at this stage is $m_{payload}$. We want to know what this value is, when we set $\tau_{max}$ to our stall torque. By solving this equation we get the maximum payload of the arm:&#xA;\begin{align}&#xA;\tau_{stall} &amp;amp;= g \cdot (m_{l_1} \cdot r_{l_1} + m_{j_2} \cdot r_{j_2} + m_{l_2} \cdot r_{l_2} + m_{j_3} \cdot r_{j_3} + m_{l_3} \cdot r_{l_3} + m_{payload} \cdot r_{payload})\\&#xA;\frac{\tau_{stall}}{g} &amp;amp;= m_{l_1} \cdot r_{l_1} + m_{j_2} \cdot r_{j_2} + m_{l_2} \cdot r_{l_2} + m_{j_3} \cdot r_{j_3} + m_{l_3} \cdot r_{l_3} + m_{payload} \cdot r_{payload}\\&#xA;m_{payload} \cdot r_{payload} &amp;amp;= \frac{\tau_{stall}}{g} - m_{l_1} \cdot r_{l_1} - m_{j_2} \cdot r_{j_2} - m_{l_2} \cdot r_{l_2} + m_{j_3} \cdot r_{j_3} - m_{l_3} \cdot r_{l_3}\\&#xA;m_{payload} &amp;amp;= \frac{\frac{\tau_{stall}}{g} - m_{l_1} \cdot r_{l_1} - m_{j_2} \cdot r_{j_2} - m_{l_2} \cdot r_{l_2} + m_{j_3} \cdot r_{j_3} - m_{l_3} \cdot r_{l_3}}{r_{payload}}\\&#xA;\end{align}&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This value is the mass at which the arm will not be able to move when holding it in this stretched out configuration. It does not mean it cannot hold this weight at all, since for any other configuration the maximum torque on any joint will be less.&lt;/p&gt;&#xA;" OwnerUserId="17383" LastActivityDate="2017-07-13T00:33:55.223" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12826" PostTypeId="1" AcceptedAnswerId="12864" CreationDate="2017-07-13T00:51:44.240" Score="1" ViewCount="399" Body="&lt;p&gt;I am not an expert on this topic and I know this is kind of old thread but im facing the same issue and I would like some help or advice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am using and Arduino and a Roboclaw 2x7A (old version)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At first I was also stopping the motors using&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;roboclaw.SpeedAccelM2(address, 0, 0);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;on each one and it worked, but later I saw it is still consuming current. I used your suggestion and it works, but only for M1, M2 doesn't seem to stop recieving current, less than an ampere, but i would like it to be zero.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am uploading a piece of code so I can explain myself and to show you what I am doing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the part where it checks if error (difference between origin and goal) is greater than deadzone, if greater then keep moving, if lower, it would stop by itself but also it must stop giving current to that motor.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  // M1 &amp;gt; Azimut&#xA;  //M2 &amp;gt; Zenith&#xA;&#xA;  if (abs(error1) &amp;gt; deadzone1) {&#xA;    roboclaw.SpeedAccelDeccelPositionM1(address, 0, 0, 0, posicionM1, depth1);&#xA;  } else {&#xA;    Serial.println(&quot;Azimut - error es menor que deadzone&quot;);&#xA;    roboclaw.DutyM1(address, 0);&#xA;  }&#xA;  if (abs(error2) &amp;gt; deadzone2) {&#xA;    roboclaw.SpeedAccelDeccelPositionM2(address, 0, 0, 0, posicionM2, depth2);&#xA;  } else {&#xA;    Serial.println(&quot;Zenith - error es menor que deadzone&quot;);&#xA;    roboclaw.DutyM2(address, 0);&#xA;  }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And this is the output (with some extra info)&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Azimut - error es menor que deadzone&#xA;Zenith - error es menor que deadzone&#xA;Encoder1:15531 80 Speed1:0    Temp:  47.10   error : -24&#xA;Encoder2:15474 80 Speed2:0    Temp2: 0.00   error : -81&#xA;Pos Obj       - M1 : 15555&#xA;Pos Real      - M1 : 19.97&#xA;azimuthGlobal - M1 : 20.00&#xA;Pos Obj       - M2 : 15555&#xA;Pos Real      - M2 : 19.90&#xA;zenithGlobal  - M2 : 20.00&#xA;PWM        Zen : 0   Azi : 0&#xA;switch Pin Zen : 0      Azi : 0&#xA;e-Stop : 0&#xA;total revs Zen : 280000   Azi : 280000&#xA;Corrientes Zen : 0.06   Azi : 0.00&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;At the end, as you can see, Zen motor is still recieving 0.06 A, but the other motor is fully stopped.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why does this only works with one of them?, Or. Is there some configuration I am doing wrong?.&lt;/p&gt;&#xA;" OwnerUserId="17526" LastActivityDate="2017-07-21T17:09:05.980" Title="Stop giving current to motor with Roboclaw" Tags="&lt;arduino&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12827" PostTypeId="2" ParentId="12824" CreationDate="2017-07-13T01:31:59.047" Score="1" Body="&lt;p&gt;Caveat: This is outside my area of expertise so I'm just making stuff up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The best approach I have thought of so far that avoids extra computation, is to use a distance metric that is a hybrid of true distance and plane approximation distance. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/MoSvq.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MoSvq.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The coordinate of objects, observations, used for planning and navigation are the plane cartesian coordinate, and which mesh element that coordinate is relative to. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For local planning, whose horizon is contained within a mesh element, you can use only the local coordinate. For global planning, the distance between objects is the sum of the great circle between mesh element origins and the local vectors to the start and end point. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Planning and pathfinding with meshes is well researched I think, though you will want to use the great circle distance between nodes rather than the cartesian distance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should be able to find a mesh size that works for you. One for which the error in distance is acceptable for the simplification of using a plane approximation locally. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the boundary you need to convert objects in the current 100m window from the last origin to the next one. This is a simple plane translation or transform which can be done at object creation to spread out the computation cost. You'll need some hysterisis to prevent switching too often at the boundary.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back of the envelope calcs give about 1mm of error from true position at a 5Km radius. So you could probably get away with increasing your mesh size.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bottom line, used many fixed location local maps and jump from one to the other rather than dragging the origin of a single map along with you.&lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="184" LastEditDate="2017-07-15T00:24:13.870" LastActivityDate="2017-07-15T00:24:13.870" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12830" PostTypeId="1" AcceptedAnswerId="13900" CreationDate="2017-07-13T10:57:18.917" Score="2" ViewCount="1011" Body="&lt;p&gt;I've been a fan of first person view drone Racing for years now and, in thinking of building a new quadcopter, I have a question I'm unable to resolve myself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please correct me if I'm wrong:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As i understand, a brushless motor has a maximum torque and power (Watts), if you push it beyond its limits it will start heating and eventually burn.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A brushless motor will always try to match the speed required drawing as much amps as is needed so increasing the power used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any brushless motor has a Kv value related to the coils windings that determines the rpm it will get without load per volt applied.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, can I say, for example, 1000 Kv at 1 volt will be equivalent to 500 Kv at 2 volts in terms of power, rpm and torque? So could I say it will generate the same lift?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course more voltage will reduce the amps but that's not related to the question, I think.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If this is true, I can't understand why actual drones do not run on bigger Kv and fewer cells since cells add weight and Kv not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a example of my question the DRL RacerX has broke the speed world record using T-motor f80 wich is a 2408 at 2500kv the manufacturer says it should be run at 16V achieving 680W but the 1900kv says 22V around 1000W.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The DRL used it at 42V (the 2500kv version) still with a 5 inch prop (Sure the motor will not survive for a long time), they just seemed to increase the amp rating of the controllers and just hope the motor will last long enought.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why did they use such a high voltaje (2 x 5s) since that will not only increase the total weight but that will also increase the amps needed (as its increasing the load).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Im sure they had done their research and made the best they could but i want to understand why is that the best way of achieving it, the main question that comes to my mind is why not a larger prop? it should be much more efficient right? and still that drone is for a max speed record maneuverability is not needed&lt;/p&gt;&#xA;" OwnerUserId="11111" LastEditorUserId="11111" LastEditDate="2017-07-26T12:40:24.410" LastActivityDate="2017-07-27T06:49:17.153" Title="Is a larger Kv equivalent to more voltage?" Tags="&lt;quadcopter&gt;&lt;brushless-motor&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12831" PostTypeId="1" CreationDate="2017-07-13T12:44:28.870" Score="1" ViewCount="112" Body="&lt;p&gt;I am considering designing an equatorial mount for astrophotography. I have been researching on the best way to do that and I am thinking on using a stepper motor with a gearbox. The thing is that it needs to turn at a really low speed, 1 rev/day. &#xA;If I pick any Nema X motor I can get it to step 200/400 steps without a gearbox. The most reductions I have found are 1:100 (this is an example: &lt;a href=&quot;http://www.ebay.com/itm/Nema17-23-34-Planetary-Gear-Ratio-5-1-10-1-15-1-20-1-30-1-40-1-50-1-100-1-Reduce-/201844830182?var=&amp;amp;hash=item2efee3afe6:m:mPuljSiQP2wMMZ69Cmf4BYA&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.ebay.com/itm/Nema17-23-34-Planetary-Gear-Ratio-5-1-10-1-15-1-20-1-30-1-40-1-50-1-100-1-Reduce-/201844830182?var=&amp;amp;hash=item2efee3afe6:m:mPuljSiQP2wMMZ69Cmf4BYA&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That means that I can get 20.000 steps/rev (400 step/rev motor) which would mean running the motor at 20.000/60*24 = 14 steps/min --&gt; 4.34 sec/ step. I don't think the operation is smooth enough so it will might show in the pictures.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have been researching on other similar projects and I have seen that they picked 1rpm as acceptable for that smoothness (0.15sec/ step for a 400 step motor). That means that I need a gearbox capable of around 1500:1. My questions is as follows:&#xA;- Does it make sense to add 2-3 gearboxes in series to get that value? Like those ones and adaptors for the output shafts since they are different in size to the input shafts: &lt;a href=&quot;http://www.ebay.com/itm/NEMA34-NEMA23-Stepper-Motor-Planetary-Gearbox-36-1-30-1-24-1-16-1-10-1-6-1-4-1/122395466919?_trksid=p2047675.c100005.m1851&amp;amp;_trkparms=aid%3D222007%26algo%3DSIM.MBE%26ao%3D2%26asc%3D44757%26meid%3D57a6af176f9b48e0b9f2042efc480bc1%26pid%3D100005%26rk%3D3%26rkt%3D6%26sd%3D122395466919&amp;amp;var=422871734736&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.ebay.com/itm/NEMA34-NEMA23-Stepper-Motor-Planetary-Gearbox-36-1-30-1-24-1-16-1-10-1-6-1-4-1/122395466919?_trksid=p2047675.c100005.m1851&amp;amp;_trkparms=aid%3D222007%26algo%3DSIM.MBE%26ao%3D2%26asc%3D44757%26meid%3D57a6af176f9b48e0b9f2042efc480bc1%26pid%3D100005%26rk%3D3%26rkt%3D6%26sd%3D122395466919&amp;amp;var=422871734736&lt;/a&gt;. An example could be adding first 30:1, second 30:1, 2:1 (1800:1 all together). &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Would it be better to design a planetary/spur gearbox to satisfy those requirements?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Thank you. I hope this is the right forum. I haven't find one suitable for mechanics&lt;/p&gt;&#xA;" OwnerUserId="17533" LastActivityDate="2017-07-13T12:44:28.870" Title="Design of an equatorial mount" Tags="&lt;motor&gt;&lt;stepper-motor&gt;&lt;gearing&gt;" AnswerCount="0" CommentCount="6" ClosedDate="2017-07-13T14:18:49.763" ContentLicense="CC BY-SA 3.0" />
  <row Id="12832" PostTypeId="1" AcceptedAnswerId="12833" CreationDate="2017-07-13T15:44:15.103" Score="1" ViewCount="144" Body="&lt;p&gt;I'd like a two-wheeled robot to travel at 1m/s, given a wheel radius of 0.03m. I've calculated the rated speed required by the gearmotor as 318.28RPM:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$v = \omega r$, $\displaystyle{\frac{v}{r} = \omega}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\displaystyle{\frac{1 \mathrm{\frac{m}{s}}}{0.03 \,\mathrm{m}}} = $ $33.33 \mathrm{\frac{radians}{s}}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$33.33 \mathrm{\frac{radians}{s}} \left(\frac{1 \,\mathrm{rev}}{2 \pi \, \mathrm{radians}}\right) \left(\frac{60 \, \mathrm{s}}{1 \, \mathrm{min}}\right)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$= 318.28 \mathrm{\frac{rev}{min}}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this correct? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;On a side note, would an acceleration value of 0.5m/s^2 be a good choice for the robot, based on the velocity I've chosen? Help appreciated, thanks.&lt;/p&gt;&#xA;" OwnerUserId="7820" LastActivityDate="2017-07-13T18:13:26.950" Title="Determining rated speed (RPM) required for a DC gearmotor" Tags="&lt;motor&gt;&lt;two-wheeled&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12833" PostTypeId="2" ParentId="12832" CreationDate="2017-07-13T18:13:26.950" Score="2" Body="&lt;p&gt;Yes, that's correct. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A &quot;good choice&quot; for acceleration has nothing to do with velocity. Generally, acceleration limits are chosen based on motor thermal ratings. You should have some design load the motor should accelerate, that design load should require some quantity of torque, the motor constant relates torque to current, and then the current heats the motor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typically you would see &quot;duty cycle&quot; ratings for the motor - 20%, 30%, etc. That means you should only run at full power for 20% of the time to avoid overheating the motor. Generally those duty cycle ratings will also come with design durations - run at full power for 20 seconds then turn off for at least 80 seconds, etc. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could &lt;em&gt;probably&lt;/em&gt; run at 20% power for an unlimited period of time, but you should really contact the manufacturer to verify that. So then you have 20% of power as the limit, and you have a design load moment of inertia $I$, torque is $\tau = I\alpha$, or moment of inertia times angular acceleration, and power is $P = \tau\omega$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The duty cycle rating cascades down from the power rating to an acceleration limit:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;P_{\mbox{max}} = \left(\tau_{\mbox{max}}\right)\omega \\&#xA;P_{\mbox{max}} = I\left(\alpha_{\mbox{max}}\right)\omega \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here it's assumed that your angular speed $\omega$ is fixed, because you have some design speed you want to operate at, and the moment of inertia $I$ is fixed, because you have to operate at your design speed with a target load, and so then the only thing that you can vary to get below the power rating is the motor acceleration:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\alpha_{\mbox{max}} = \frac{P_{\mbox{max}}}{I\omega} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is how you would arrive at an acceleration limit. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should also include a factor of safety or some other margin in the design, and you should also look at accounting for viscous friction. There are power losses due to friction, and friction force (torque) is proportional to the motor speed:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\tau_{\mbox{friction}} = b \omega \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where $b$ is the viscous friction constant for the motor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, if you were to combine the above with the power equation, you get a more complete model:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;P_{\mbox{max}} = \left(\tau_{\mbox{acceleration}} + \tau_{\mbox{friction}}\right)\omega \\&#xA;P_{\mbox{max}} = \left(\tau_{\mbox{acceleration}}\right)\omega + b\omega\omega \\&#xA;P_{\mbox{max}} = I\left(\alpha_{\mbox{max}}\right)\omega + b\omega^2 \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That speed squared term is the real killer, and it's why accounting for it is important. Increasing speed by a factor of 10 increases the friction power requirement by a factor of 100.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, rearrange to get the fuller model for the acceleration limit:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\alpha_{\mbox{max}} = \frac{P_{\mbox{max}}-b\omega^2}{I\omega} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, the only good way to get the viscous friction constant value is by empirical testing. It's complicated by the fact that real motors are inefficient, otherwise you could just calculate input power ($P=IV$), get unloaded top speed $\omega$, and determine the friction constant that way. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The trick would be to alter input power (by varying input voltage) and making a &lt;em&gt;plot&lt;/em&gt; of input power versus top speed. You should see that top speed drops off as $1/\sqrt{P}$, but there should be an offset to the data as well. The curve would give you the friction coefficient and the offset gives you the efficiency.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;But again, this all requires you to get a quality estimate of the design load (moment of inertia) and top speed. The moment of inertia calculation will be a little harder, but you should be able to do it with a good solid modeling software kit like Solidworks or Inventor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could also just try to get motor that is very oversized to what you need and then set the acceleration limit after the fact. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-07-13T18:13:26.950" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12834" PostTypeId="2" ParentId="12742" CreationDate="2017-07-13T21:50:01.090" Score="0" Body="&lt;p&gt;No valid dh parameters are possible for the transform from frame 1 to 2.  Try using a different configuration of the robot to find your DH parameters. Or don't use DH parameters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also remember that a constant offset in theta is one of the dh parameters if you care about where your joint zero is. $\theta = [\theta_{1DH}+\theta_{1}(t), ...]$&lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="184" LastEditDate="2017-07-14T01:23:50.067" LastActivityDate="2017-07-14T01:23:50.067" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12836" PostTypeId="1" CreationDate="2017-07-14T00:01:44.523" Score="2" ViewCount="315" Body="&lt;p&gt;I'm currently working on calibration of robot tool. I have found some simple methods to get the tool centre point.&#xA;But I'm sure how to get the tool orientation wrt the robot's tip (the point where the tool is attached to the robot). The assumption here is that the tool-free robot is calibrated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm looking for solution which doesn't use camera and expensive sensors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT:&#xA;The robot is 6dof. The accuracy I'm looking at is approximately 0.1mm. The programming will be C language (How is this info related to the calibration method?). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could someone guide in this aspect? &lt;/p&gt;&#xA;" OwnerUserId="10435" LastEditorUserId="110" LastEditDate="2018-02-19T00:09:39.123" LastActivityDate="2021-05-04T23:03:55.357" Title="Tool calibration- orientation" Tags="&lt;robotic-arm&gt;&lt;industrial-robot&gt;&lt;calibration&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="12837" PostTypeId="2" ParentId="12742" CreationDate="2017-07-14T05:31:43.867" Score="2" Body="&lt;p&gt;Between frame 2 and 3, there should be a net 180° rotation about the Z axis. However, your second and third DH parameter seem to only have a net rotation of 90°.&lt;/p&gt;&#xA;" OwnerUserId="17504" LastActivityDate="2017-07-14T05:31:43.867" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12838" PostTypeId="1" CreationDate="2017-07-14T15:22:11.113" Score="3" ViewCount="1681" Body="&lt;p&gt;I am trying to move a robot in a straight line from point A, to point B. The robot's primary sensor is a Hokuyo URG-04LX-UG01 LIDAR that gives me the magnitude and direction of each point it detects in the form of two arrays. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also have the wheel encoders on each motor of the robot, so I can obtain some odometry of the robot even though its accuracy will diminish over time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem that I have is that there are obstacles in the path of point A and point B that the robot must go around. I am not sure how to take the readings from the LIDAR, and convert them into movements that go around the obstacle, while also heading to B. Sorry if that doesn't make sense, but I am really confused on how to solve this problem. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this an easy problem to solve and I am just over complicating it? Does anyone know of a way to do this? Any help or guidance would be greatly appreciated. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/iU9YB.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/iU9YB.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="17550" LastActivityDate="2017-09-17T21:57:55.487" Title="How to move a robot to a point while avoiding obstacles?" Tags="&lt;wheeled-robot&gt;&lt;motion-planning&gt;&lt;navigation&gt;&lt;lidar&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12839" PostTypeId="2" ParentId="7165" CreationDate="2017-07-14T19:28:38.193" Score="2" Body="&lt;p&gt;There are at least two different ways to get it:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Explanation 1) &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;For a very special class of &lt;a href=&quot;https://en.wikipedia.org/wiki/Hamiltonian_mechanics&quot; rel=&quot;nofollow noreferrer&quot;&gt;mechanical systems&lt;/a&gt; like the robotics manipulator, the control law $u=-K_pe+g(q)$ with $K_p$ symmetric positive definite matrix, $e=q_d-q$ (with $q_d$ the set-point and $q$ the actual angular position from the encoders) and $g(q)$ gravitational component leads to have:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$M(q)\ddot{q} + C(q)\dot{q} + g(q) = u + g(q)$$ (supposing no forces applied to the end-effector) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;and then an internal energy as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$V(q,\dot{q}) = \frac{1}{2}\dot{q}{^T}M(q)\dot{q} + \frac{1}{2}e^{T}K_pe + U(q)$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;with $U(q)$ the potential energy per gravity compensation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It can be shown that assuming that energy as &lt;a href=&quot;https://en.wikipedia.org/wiki/Lyapunov_function&quot; rel=&quot;nofollow noreferrer&quot;&gt;Lyapunov candidate function&lt;/a&gt; leads to have the system asintotically internally stable and the state variable $q$ convergent to $q_d$ like a spring of stiffness $K_p$. If during this regulation we want to adjust also convergence rate and/or accuracy we can extend the same concept by introducing respectively the symmetric positive definite matrices $K_d$ and $K_i$ with the respective errors $\dot{e}=\dot{q_e}-\dot{q}$ and $\int e(t)dt$.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Explanation 2)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;the substitution operated in your paper in (15) drives the substitution of nonlinear terms due to $M(q)$, $C(q)$, $g(q)$ with linear ones, and provides a &quot;global&quot; linearity to the system since the relationship input-output becomes described by the linear ODE:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$u = K_p(q_d − q) − K_d(\dot{q_d}-\dot{q})$$&lt;/p&gt;&#xA;" OwnerUserId="17372" LastActivityDate="2017-07-14T19:28:38.193" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12841" PostTypeId="2" ParentId="12678" CreationDate="2017-07-14T23:47:25.373" Score="1" Body="&lt;p&gt;Really good question!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And here's the solution: you're making a mistake in your matrix inversion. In your coordinate system, $\frac{\partial{b}}{\partial{Y}}$ does NOT equal $\frac{\partial{Y}}{\partial{b}}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Remember how you have that crazy formula for inverting a 2x2 matrix? The one where you swap about the elements, make some negative, and then divide the whole thing by the determinant?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That formula is the key to solving your puzzle. Write it out on paper and let us know what you get! It should all work out as expected :)&lt;/p&gt;&#xA;" OwnerUserId="17557" LastActivityDate="2017-07-14T23:47:25.373" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12842" PostTypeId="2" ParentId="12043" CreationDate="2017-07-15T01:20:10.947" Score="1" Body="&lt;p&gt;If you know all the joint angles, to fill in all the world frame information, all you need to know is the pose of &lt;strong&gt;something&lt;/strong&gt; in the world frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You first ask how to find the feet position given the pose of the body and the joint angles. I'll explain that and then I'll explain how to find the body pose from a foot pose (and therefore the poses of all the other feet).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm going to assume you understand &lt;a href=&quot;https://en.wikipedia.org/wiki/Forward_kinematics&quot; rel=&quot;nofollow noreferrer&quot;&gt;homogeneous transformation matrices&lt;/a&gt; for computing forward kinematics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'll be using the notation:&#xA;\begin{equation}^AT_B\end{equation}&#xA;To denote the transform from frame B to frame A. Or alternatively, the pose of B expressed in frame A.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Body pose known&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;So we know the joint angles $\theta$ and the pose of the body in the world frame $^WT_B$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By representing the the four legs as 3DOF arms where the feet are end-effectors and the body is the &quot;base&quot;, we can calculate the position and orientation of each foot &lt;strong&gt;relative to the body&lt;/strong&gt;. This is the same as saying that we have the poses of the feet expressed in the body frame as a function of the joint angles:&#xA;\begin{equation}&#xA;^BT_{f_i}(\theta)&#xA;\end{equation} &#xA;Where $f_i$ represents each of the four feet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We therefore can easily calculate the pose of each foot in the world frame by transforming the pose of the foot in the body frame into the world frame:&#xA;\begin{equation}&#xA;^WT_{f_i}(\theta) = ^WT_B \cdot ^BT_{f_i}(\theta)&#xA;\end{equation}&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;A foot pose known&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Now let's say we know the pose of a single foot in the world frame $^WT_{f_i}$ and all the joint angles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since you know the &lt;strong&gt;pose&lt;/strong&gt; and not just the position, you can completely calculate the pose of the body based on that one foot. If this is not intuitive, think of the fact that for any set of joint angles, if you move the body in any way, the position and/or orientation of every foot will change, i.e. every combination of body and joint angles corresponds to a unique foot pose).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;\begin{align}&#xA;^WT_B(\theta) &amp;amp;= ^WT_{f_i} \cdot ^BT_{f_i}^{-1}(\theta) \\&#xA;^WT_B(\theta) &amp;amp;= ^WT_{f_i} \cdot ^{f_i}T_B(\theta)&#xA;\end{align}&lt;/p&gt;&#xA;" OwnerUserId="17383" LastEditorUserId="17383" LastEditDate="2017-07-20T03:43:41.030" LastActivityDate="2017-07-20T03:43:41.030" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12843" PostTypeId="2" ParentId="12838" CreationDate="2017-07-15T06:55:16.193" Score="0" Body="&lt;p&gt;&lt;strong&gt;What you are talking about is &lt;a href=&quot;http://ais.informatik.uni-freiburg.de/teaching/ss11/robotics/slides/18-robot-motion-planning.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Robotic Path Planning&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding your specific questions&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&quot;Is this an easy problem to solve&quot; - For the specific problem you show, no.  It is 2D Configuration Space with defined goal and obstacles.  If you expand that to an loosely defined goal and undefined obstacles in a 3D space then NO!!&lt;/li&gt;&#xA;&lt;li&gt;&quot;Does anyone know of a way to do this?&quot;  - There are LOTS of people who have been doing this and researching it for a while.  Google &quot;Robotics Path Planning&quot;.  There are products that do it from the Roomba to the Mars Exploration Rover.  They can both path plan; but, I'm sure both have situations where they will get stuck or confused.&lt;/li&gt;&#xA;&lt;li&gt;&quot;Any help or guidance&quot;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Read and learn from others&lt;/li&gt;&#xA;&lt;li&gt;Try something simple&lt;/li&gt;&#xA;&lt;li&gt;Once you have simple working, add some complexity and the go back to the first step (read) and continue&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;start small and grow from there&lt;/p&gt;&#xA;" OwnerUserId="462" LastActivityDate="2017-07-15T06:55:16.193" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12844" PostTypeId="1" CreationDate="2017-07-15T07:28:13.373" Score="1" ViewCount="132" Body="&lt;p&gt;I'm puzzling over the remake of an impact testing machine. It's a sort of a robot arm that pushes a probe against a target to test its characteristics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Right now the machine use air pistons, because it's easier to decide the force to exert. The probe is a ball of about 0.5 kg and 8 cm in diameter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The machine should control three main parameters:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;speed at the moment of the impact (roughly between 100 mm/s and 20 m/s)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;force to exert against the target (roughly between 5 N and 100 N)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;duration of the holding after the impact (between 100 ms and 10+ s)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The goal is to try to redesign the machine using only electrical actuators, like steppers or other motors, avoiding the pneumatic systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm looking for some ideas how to design the mechanical device to fit the requirements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some idea that won't work:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;using a standard linear actuator or a stepper coupled with an endless screw: you can easily control parameters 1 and 3, but 2 it's very hard to achieve&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;using a cam to accelerate and launch the probe without a hard-link to the mechanism: you cannot control the third parameter and hence neither the second&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Any thought?&lt;/p&gt;&#xA;" OwnerUserId="17561" LastActivityDate="2017-07-17T18:08:43.927" Title="Linear actuator for impact tests" Tags="&lt;motor&gt;&lt;robotic-arm&gt;&lt;mechanism&gt;" AnswerCount="1" CommentCount="4" ClosedDate="2017-07-18T13:41:06.107" ContentLicense="CC BY-SA 3.0" />
  <row Id="12846" PostTypeId="1" CreationDate="2017-07-15T10:17:34.533" Score="3" ViewCount="432" Body="&lt;p&gt;Sorry for asking again, but there is still no solution and I am not able to comment this question from Aaron: &lt;a href=&quot;https://robotics.stackexchange.com/q/9684/17446&quot;&gt;Cannot disable sleep in passive mode for iRobot Create 2&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.irobot.com/~/media/MainSite/PDFs/About/STEM/Create/create_2_Open_Interface_Spec.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Create 2 spec&lt;/a&gt; says:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In Passive mode, Roomba will go into power saving mode to conserve battery power after five minutes of inactivity. To disable sleep, pulse the BRC pin low periodically before these five minutes expire. Each pulse resets this five minute counter. (One example that would not cause the baud rate to inadvertently change is to pulse the pin low for one second, every minute, but there are other periods and duty cycles that would work, as well.) &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Here you see the signal at the BRC pin at the connector:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/dcSBf.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dcSBf.jpg&quot; alt=&quot;Signal&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a newer firmware? Roomba output:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;bl-start&#xA;STR730&#xA;bootloader id: #x47135160 6BFA3FFF&#xA;bootloader info rev: #xF000&#xA;bootloader rev: #x0001&#xA;2007-05-14-1715-L   &#xA;Roomba by iRobot!&#xA;str730&#xA;2012-03-22-1549-L   &#xA;battery-current-zero 258&#xA;2012-03-22-1549-L   &#xA;r3_robot/tags/release-3.2.6:4975 CLEAN&#xA;bootloader id: 4713 5160 6BFA 3FFF &#xA;assembly: 3.3&#xA;revision: 0&#xA;flash version: 10&#xA;flash info crc passed: 1&#xA;processor-sleep&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If Roomba is already sleeping it wakes up from the pulse. So there is no chance for not receiving it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any idea? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/BGDAp.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/BGDAp.jpg&quot; alt=&quot;Roomba with Raspberry Pi&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="17446" LastActivityDate="2018-04-30T22:48:47.970" Title="iRobot Roomba 620 (similar to create 2) enters power saving mode although the is a pulse at BRC pin and wakes up at next pulse" Tags="&lt;irobot-create&gt;&lt;roomba&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12847" PostTypeId="1" CreationDate="2017-07-16T08:49:57.937" Score="5" ViewCount="383" Body="&lt;p&gt;I am building a 4 wheel rover and am using PID DC motor control for the back set of wheels. The feedback for the speed is provided by Hall effect sensors, with two pulses per rotation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This means with the motor as 100% duty, the sensor returns a 240Hz signal (4.2ms between pulses) and at the lowest duty for when the wheels are turning 20% duty, the sensor returns a 14.33 Hz signal (74.2 ms between pulses).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm using a STM32 Cortex-M3 part for the controller and a timer to capture the hall effect input and convert this to frequency. This is done by comparing two capture samples through a ISR that triggers on each rising edge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The issue I have is the PID loop is running at a rate of 50Hz, so when the motor is running at low speeds and a timer compare has not been done, it returns the last calculated value. This is fine, but I could also find myself in the situation where the motor has stopped spinning and I haven't been able to update the captured frequency due to the second pulse not having arrived. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Im just wonder if there is a sensible way of handling this ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="17566" LastActivityDate="2017-07-28T17:42:20.197" Title="Handling PID DC motor control at low speeds" Tags="&lt;motor&gt;&lt;pid&gt;&lt;wheeled-robot&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12848" PostTypeId="1" CreationDate="2017-07-16T22:15:34.813" Score="4" ViewCount="3111" Body="&lt;p&gt;I'm trying to work out the wheel force and torque required for a TWIP robot, so that I can size a motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've calculated a maximum traction force of $\small6.51\mathrm N$. &#xA;My understanding is that a torque force at the wheels of up to and including $\small6.51\mathrm N$ can be applied, to drive the robot without the wheels slipping. This would give the robot a maximum acceleration of $\small3.92\mathrm{ms}^{-2}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, assuming I wanted to achieve the maximum force to drive the robot, and hence the maximum acceleration (assuming pendulum is balanced), I would need a wheel force of $\small6.51\mathrm N$.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is also resistance against the direction of motion/driving force of the robot, in the form of &lt;em&gt;rolling resistance&lt;/em&gt; and &lt;em&gt;aerodynamic drag&lt;/em&gt;. From what I've read &lt;em&gt;rolling resistance&lt;/em&gt; (a type of static friction) is a resistive moment to wheel rotation, which needs to be overcome by the wheel torque force in order to produce acceleration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/pqOZN.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/pqOZN.jpg&quot; alt=&quot;rolling resistance&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've calculated a rolling resistance value of $\small0.16\mathrm N$.  The robot is intended for indoor use but in case I take it outside I calculated an aerodynamic drag value of $\small0.14\mathrm N$, using an average wind flow velocity of $\small3\frac{\mathrm m}{\mathrm s}$ for my location.  Taking these resistive forces into account I calculated a wheel force of $\small6.81\mathrm N$ and axle torque of $\small0.20\mathrm{Nm}$, for maximum acceleration of the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've considered the maximum torque exerted by the pendulum i.e. when it's pitch angle/angle of inclination is at +- 90° from the stable vertical position at 0°.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This torque needs to be matched (or exceeded) by the torque/moment exerted about the pivot by the wheel force, accelerating the robot horizontally.&#xA;The wheel force and axle torque required to stabilise the pendulum I've calculated as $\small13.7340\mathrm N$ and $\small0.4120\mathrm{Nm}$ respectively, and an axle torque of $\small\approx0.2\mathrm{Nm}$ for one motor. I ignored rolling resistance and aerodynamic drag for these calculations. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The motor will be a brushed DC motor, so I think $\small0.2\mathrm{Nm}$ should be 25% or less of the motor's stall torque.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can you please tell me if this is correct?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are my calculations and FBD:$$$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Maximum tractive force&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\begin{align} &#xA;F_{t(max)}&amp;amp;=μN\qquad\qquad\qquad\qquad\qquad\qquad Mass\,of\,robot: 1.66\mathrm{kg}\\&#xA;&amp;amp;=(0.4)*(16.28\mathrm N)\qquad\qquad\qquad\,\,\,\,Weight\,of\,robot:16.28\mathrm N\\&#xA;&amp;amp;=6.51\mathrm N\qquad\qquad\qquad\qquad\qquad\,\,\,\,\,\,Number\,of\,wheels:2\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\,\,\,\,\,Wheel\,radius: 0.03\mathrm m\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\,\,\,\,\,Mass\,of\,pendulum:1.4\mathrm{kg}\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\,\,\,\,\,Distance\,from\,axle\,to\,pendulum\,COM:0.2575\mathrm m&#xA;\end{align}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$F_{t(max)}$: Maximum tractive force&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$μ$: Coefficient of friction&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$N$: Normal force at wheel$$$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Maximum acceleration of robot&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\begin{align}&#xA;a_{r(max)}&amp;amp;=\frac{F_{t(max)}}{m}\\&#xA;&amp;amp;=\frac{6.51\mathrm N}{1.66\mathrm{kg}}\\&#xA;&amp;amp;=3.92\mathrm{ms}^{-2}\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad&#xA;\end{align}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$a_{r(max)}$: Maximum acceleration of robot&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$F_{t(max)}$: Maximum tractive force&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$m$: Mass of robot$$$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Rolling resistance force&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\begin{align}&#xA;F_{rr} &amp;amp;= C_{rr}N\\&#xA;&amp;amp;=(0.01)*(16.28\mathrm N)\\&#xA;&amp;amp;=0.16\mathrm N\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad&#xA;\end{align}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$F_{rr}$: Rolling resistance force&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$C_{rr}$: Rolling resistance coefficient&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$N$: Normal force at wheel$$$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Drag resistance force&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\begin{align}&#xA;F_{d} &amp;amp;= C_{d}\left(\frac{ρ*v^2}{2}\right)A\\&#xA;&amp;amp;=1.28\left(\frac{1.2\frac{\mathrm {kg}}{\mathrm m^3}*(3\frac{\mathrm m}{\mathrm s})^2}{2}\right)0.06\mathrm m^2\\&#xA;&amp;amp;=0.14\frac{\mathrm{kg}\cdot\mathrm m}{\mathrm s^2}=0.14\mathrm N\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad&#xA;\end{align}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$F_{d}$: Drag resistance force&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$C_{d}$: Drag coefficient&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$ρ$: Mass density of fluid&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$v$: Flow velocity of fluid relative to object&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$A$: Reference area/projected frontal area of object$$$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Wheel force/tractive force for maximum acceleration of robot&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\begin{align}&#xA;F_t-F_{rr}-F_d&amp;amp;=ma_{r(max)}\\&#xA;F_t-0.16\mathrm N -0.14\mathrm N &amp;amp;=(1.66\mathrm{kg})*(3.92\mathrm{ms}^{-2})\\&#xA;F_t&amp;amp;=(1.66\mathrm{kg})*(3.92\mathrm{ms}^{-2})+0.16\mathrm N +0.14\mathrm N\\&#xA;&amp;amp;=6.81\mathrm N&#xA;\end{align}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad$&#xA;OR&#xA;$\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\begin{align}&#xA;F_w&amp;amp;=F_{t(max)}+F_{rr}+F_d\\&#xA;&amp;amp;=6.51\mathrm N +0.16\mathrm N +0.14\mathrm N\\&#xA;&amp;amp;=6.81\mathrm N\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad&#xA;\end{align}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$F_t$: Tractive force&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$F_{rr}$: Rolling resistance force&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$F_{d}$: Drag resistance force&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$m$: Mass of robot&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$a_{r(max)}$: Maximum acceleration of robot&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$F_w$: Wheel force&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$F_{t(max)}$: Maximum tractive force$$$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Axle/wheel torque for maximum acceleration of robot&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\begin{align}&#xA;T_a&amp;amp;=F_w r\\&#xA;&amp;amp;=(6.81\mathrm N)*(0.03\mathrm m)\\&#xA;&amp;amp;=0.20\mathrm{Nm}\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad&#xA;\end{align}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$T_a$: Axle/wheel torque&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$F_w$: Wheel force&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$r$: Wheel radius (lever arm length)$$$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Maximum torque exerted by pendulum&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/rjwYR.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rjwYR.png&quot; alt=&quot;Pendulum at +/- 90 degrees&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\begin{align}&#xA;T_{p(max)}&amp;amp;=F_p r\\&#xA;&amp;amp;=(1.4\mathrm{kg}*9.81)*(0.2575\mathrm m)\\&#xA;&amp;amp;=3.5365\mathrm{kg}\cdot \mathrm m\\&#xA;&amp;amp;=3.5365\mathrm{Nm}\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad&#xA;\end{align}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$T_{p(max)}$: Maximum torque exerted by pendulum&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$F_p$: Force applied to pendulum&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$r$: Distance from axle to pendulum COM (lever arm length at +/- 90° )$$$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Wheel force to stabilise pendulum&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\begin{align}&#xA;T_{p(max)}&amp;amp;=F_w r\\&#xA;3.5365\mathrm{Nm}&amp;amp;=F_w*(0.2575\mathrm m)\\&#xA;F_w&amp;amp;=\frac{3.5365\mathrm{Nm}}{0.2575\mathrm m}\\&#xA;&amp;amp;=13.7340\mathrm N\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad&#xA;\end{align}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$T_{p(max)}$: Maximum torque exerted by pendulum&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$F_w$: Wheel force&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$r$: Distance from axle to pendulum COM$$$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Axle/wheel torque to stabilise pendulum&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\begin{align}&#xA;T_a&amp;amp;=F_w r\\&#xA;&amp;amp;=13.7340\mathrm N*(0.03\mathrm m)\\&#xA;&amp;amp;=0.4120\mathrm{Nm}\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad&#xA;\end{align}$&#xA;$\therefore$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\begin{align}&#xA;T_{a(one\,motor)}&amp;amp;=\frac{0.4120\mathrm{Nm}}{2}\\&#xA;&amp;amp;=0.2060\mathrm{Nm}\\&#xA;&amp;amp;\approx0.2\mathrm{Nm}\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad&#xA;\end{align}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$T_a$: Axle/wheel torque&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$F_w$: Wheel force&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$r$: Wheel radius (lever arm length)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$T_{a(one\,motor)}$: Axle/wheel torque for one motor$$$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;FBD&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/fnMNT.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fnMNT.png&quot; alt=&quot;FBD&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7820" LastEditorUserId="7820" LastEditDate="2017-09-06T20:12:54.537" LastActivityDate="2017-09-06T20:12:54.537" Title="Force calculations for a wheeled robot" Tags="&lt;two-wheeled&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="12850" PostTypeId="2" ParentId="12844" CreationDate="2017-07-17T18:08:43.927" Score="0" Body="&lt;p&gt;Do you have the space to implement a straight-line 4-bar mechanism?  These devices take a rotary input and generate straight-line motion for a point on the coupler.  There are exact straight-line mechanisms as well as approximate straight-line mechanisms.  Challenges may be range of motion, plus the need to implement additional (passive) rotary joints without compromising the dynamics or accuracy of the device.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2017-07-17T18:08:43.927" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="12851" PostTypeId="1" CreationDate="2017-07-17T21:24:33.037" Score="13" ViewCount="9131" Body="&lt;p&gt;How can I setup the C++ IDE &lt;a href=&quot;https://www.jetbrains.com/clion/&quot; rel=&quot;noreferrer&quot;&gt;CLion&lt;/a&gt; to display documentation and auto completion correctly when working with ROS?&lt;/p&gt;&#xA;" OwnerUserId="16710" LastActivityDate="2019-03-29T22:04:23.053" Title="How to setup CLion for ROS?" Tags="&lt;ros&gt;&lt;c++&gt;" AnswerCount="5" CommentCount="0" FavoriteCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="12852" PostTypeId="2" ParentId="12851" CreationDate="2017-07-17T21:24:33.037" Score="6" Body="&lt;p&gt;Integrating CLion with ROS is actually straight forward and works out of the box if one knows how to do it:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;With your console, go into your ROS workspace and source the respective &lt;code&gt;setup.bash&lt;/code&gt; file.&lt;/li&gt;&#xA;&lt;li&gt;Go to the &lt;code&gt;src&lt;/code&gt; directory of your workspace.&lt;/li&gt;&#xA;&lt;li&gt;Start CLion from the console from your &lt;code&gt;src&lt;/code&gt; directory.&lt;/li&gt;&#xA;&lt;li&gt;Close any open projects  in CLion and select &lt;code&gt;Import Project from Sources&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Select &lt;strong&gt;ONLY&lt;/strong&gt; the &lt;code&gt;src&lt;/code&gt; directory in your workspace for the import.&lt;/li&gt;&#xA;&lt;li&gt;If CLion complains about &lt;code&gt;CMakeList.txt&lt;/code&gt; already existing simply click &lt;code&gt;Open Project&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;CLion will build symbols for several minutes, then you should be ready to go.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;If it still doesn't work make sure that you delete all &lt;code&gt;.idea&lt;/code&gt; files from your workspace, that might have been created in previous attempts at using CLion with ROS.&lt;/p&gt;&#xA;" OwnerUserId="16710" LastActivityDate="2017-07-17T21:24:33.037" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12853" PostTypeId="1" CreationDate="2017-07-18T06:53:30.353" Score="1" ViewCount="99" Body="&lt;p&gt;Do I need to use separate function in PID algorithm to make the bot go LEFT or RIGHT?&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/**************************&#xA;  Author-&#xA;  Project- PID Code V-2&#xA;**************************/&#xA;&#xA;float Kp = 0, Ki = 0, Kd = 0;&#xA;float error = 0, P = 0, I = 0, D = 0, PID_value = 0;&#xA;float previous_error = 0, previous_I = 0;&#xA;int sensor[5] = {0, 0, 0, 0, 0};&#xA;int initial_motor_speed = 100;&#xA;&#xA;void read_sensor_values(void);&#xA;void calculate_pid(void);&#xA;void motor_control(void);&#xA;void motor_left(void);&#xA;void motor_right(void);&#xA;void setup()&#xA;{&#xA;  pinMode(3, OUTPUT); //PWM Pin 1;9;EN PIN&#xA;  pinMode(5, OUTPUT); //PWM Pin 2;10;EN PIN&#xA;  pinMode(12, OUTPUT); //Left Motor Pin 1;4&#xA;  pinMode(13, OUTPUT); //Left Motor Pin 2;5&#xA;  pinMode(7, OUTPUT); //Right Motor Pin 1;6&#xA;  pinMode(8, OUTPUT); //Right Motor Pin 2;7&#xA;&#xA;  Serial.begin(9600); //Enable Serial Communications&#xA;}&#xA;&#xA;void loop()&#xA;{&#xA;  read_sensor_values();&#xA;  delay(15);&#xA;  calculate_pid();&#xA;  delay(15);&#xA;  motor_control();&#xA;}&#xA;&#xA;void read_sensor_values()&#xA;{&#xA;  sensor[0] = digitalRead(A0);&#xA;  Serial.print(&quot;Sensor[0]:&quot;);&#xA;  Serial.println(sensor[0]);&#xA;  sensor[1] = digitalRead(A1);&#xA;  Serial.print(&quot;Sensor[1]:&quot;);&#xA;  Serial.println(sensor[1]);&#xA;  sensor[2] = digitalRead(A2);&#xA;  Serial.print(&quot;Sensor[2]:&quot;);&#xA;  Serial.println(sensor[2]);&#xA;  sensor[3] = digitalRead(A3);&#xA;  Serial.print(&quot;Sensor[3]:&quot;);&#xA;  Serial.println(sensor[3]);&#xA;  sensor[4] = digitalRead(A4);&#xA;  Serial.print(&quot;Sensor[4]:&quot;);&#xA;  Serial.println(sensor[4]);&#xA;  delay(3);&#xA;&#xA;//  for(int i=0; i&amp;lt;5; i++)&#xA;//  {&#xA;//    sensor[i] = digitalRead(i);&#xA;//    Serial.print(&quot;Sensor[i]:&quot;);&#xA;//    Serial.println(sensor[i]);&#xA;//  }&#xA;&#xA;  if ((sensor[0] == 0) &amp;amp;&amp;amp; (sensor[1] == 0) &amp;amp;&amp;amp; (sensor[2] == 0) &amp;amp;&amp;amp; (sensor[4] == 0) &amp;amp;&amp;amp; (sensor[4] == 1))&#xA;    error = 4;&#xA;  else if ((sensor[0] == 0) &amp;amp;&amp;amp; (sensor[1] == 0) &amp;amp;&amp;amp; (sensor[2] == 0) &amp;amp;&amp;amp; (sensor[4] == 1) &amp;amp;&amp;amp; (sensor[4] == 1))&#xA;    error = 3;&#xA;  else if ((sensor[0] == 0) &amp;amp;&amp;amp; (sensor[1] == 0) &amp;amp;&amp;amp; (sensor[2] == 0) &amp;amp;&amp;amp; (sensor[4] == 1) &amp;amp;&amp;amp; (sensor[4] == 0))&#xA;    error = 2;&#xA;  else if ((sensor[0] == 0) &amp;amp;&amp;amp; (sensor[1] == 0) &amp;amp;&amp;amp; (sensor[2] == 1) &amp;amp;&amp;amp; (sensor[4] == 1) &amp;amp;&amp;amp; (sensor[4] == 0))&#xA;    error = 1;&#xA;  else if ((sensor[0] == 0) &amp;amp;&amp;amp; (sensor[1] == 0) &amp;amp;&amp;amp; (sensor[2] == 1) &amp;amp;&amp;amp; (sensor[4] == 0) &amp;amp;&amp;amp; (sensor[4] == 0))&#xA;    error = 0;&#xA;  else if ((sensor[0] == 0) &amp;amp;&amp;amp; (sensor[1] == 1) &amp;amp;&amp;amp; (sensor[2] == 1) &amp;amp;&amp;amp; (sensor[4] == 0) &amp;amp;&amp;amp; (sensor[4] == 0))&#xA;    error = -1;&#xA;  else if ((sensor[0] == 0) &amp;amp;&amp;amp; (sensor[1] == 1) &amp;amp;&amp;amp; (sensor[2] == 0) &amp;amp;&amp;amp; (sensor[4] == 0) &amp;amp;&amp;amp; (sensor[4] == 0))&#xA;    error = -2;&#xA;  else if ((sensor[0] == 1) &amp;amp;&amp;amp; (sensor[1] == 1) &amp;amp;&amp;amp; (sensor[2] == 0) &amp;amp;&amp;amp; (sensor[4] == 0) &amp;amp;&amp;amp; (sensor[4] == 0))&#xA;    error = -3;&#xA;  else if ((sensor[0] == 1) &amp;amp;&amp;amp; (sensor[1] == 0) &amp;amp;&amp;amp; (sensor[2] == 0) &amp;amp;&amp;amp; (sensor[4] == 0) &amp;amp;&amp;amp; (sensor[4] == 0))&#xA;    error = -4;&#xA;  else if ((sensor[0] == 0) &amp;amp;&amp;amp; (sensor[1] == 0) &amp;amp;&amp;amp; (sensor[2] == 0) &amp;amp;&amp;amp; (sensor[4] == 0) &amp;amp;&amp;amp; (sensor[4] == 0))&#xA;    if (error == -4) error = -5;&#xA;    else error = 5;&#xA;}&#xA;&#xA;void calculate_pid()&#xA;{&#xA;  P = error;&#xA;  I = I + previous_I;&#xA;  D = error - previous_error;&#xA;&#xA;  PID_value = (Kp * P) + (Ki * I) + (Kd * D);&#xA;&#xA;  previous_I = I;&#xA;  previous_error = error;&#xA;}&#xA;&#xA;void motor_control()&#xA;{&#xA;  // Calculating the effective motor speed:&#xA;  int left_motor_speed = initial_motor_speed - PID_value;&#xA;  int right_motor_speed = initial_motor_speed + PID_value;&#xA;&#xA;  // Constraining the motor speed:&#xA;  constrain(left_motor_speed, 0, 255);&#xA;  constrain(right_motor_speed, 0, 255);&#xA;&#xA;  analogWrite(3, initial_motor_speed - PID_value); //Left Motor Speed&#xA;  analogWrite(5, initial_motor_speed + PID_value); //Right Motor Speed&#xA;&#xA;  //goForward:&#xA;&#xA;  /*The pin numbers and high, low values are configurable depending on connections */&#xA;  digitalWrite(12, HIGH);&#xA;  digitalWrite(13, LOW);&#xA;  digitalWrite(7, HIGH);&#xA;  digitalWrite(8, LOW);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="17581" LastEditorUserId="2289" LastEditDate="2017-07-18T08:42:35.110" LastActivityDate="2017-07-18T19:18:17.163" Title="Do I need to use separate function in PID algorithm to make the bot go LEFT or RIGHT?" Tags="&lt;pid&gt;&lt;wheeled-robot&gt;&lt;line-following&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12854" PostTypeId="2" ParentId="12853" CreationDate="2017-07-18T13:19:46.270" Score="7" Body="&lt;p&gt;No, but you &lt;em&gt;do&lt;/em&gt; need to calculate the P/I/D terms correctly. You have:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;I = I + previous_I;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;followed by:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;previous_I = I;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;With&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;I = 0;&#xA;previous_I = 0;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;declared at the start. So your &lt;code&gt;I&lt;/code&gt; term will always be zero here. What it &lt;em&gt;should&lt;/em&gt; be is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;error = reference - feedback;&#xA;P_error = error;&#xA;I_error = I + (error*timeStep);&#xA;D_error = (error - previous_error)/timeStep;&#xA;prevous_error = error;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;That is the most bullet-proof way to implement the PID loop. If your loop time is relatively stable, then you can absorb the time steps (the elapsed time between function calls) into the control gains:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;P_term = P_gain * P_error;&#xA;I_term = I_gain * I_error;&#xA;D_term = D_gain * D_error;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Expanding this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;P_term = P_gain * (error);&#xA;I_term = I_gain * (&amp;lt;sum_0^k&amp;gt;(error*timeStep));&#xA;D_term = D_gain * ((error - previous_error)/timeStep);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I used a &lt;code&gt;&amp;lt;sum_0^k&amp;gt;&lt;/code&gt; term (the &quot;sum from zero to k&quot;) there to highlight the fact the integral term is a numeric integral composed of:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;I_error = (error_0 * timeStep_0) + (error_1 * timeStep_1) + ... + (error_k * timeStep_k);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And if your &lt;code&gt;timeStep&lt;/code&gt; is constant at every point, then you can factor it out and say:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;I_error = timeStep*(error_0 + error_1 + ... + error_k);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So, regrouping the PID terms:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;P_term = (P_gain) * error;&#xA;I_term = (I_gain*timeStep) * (&amp;lt;sum_0^k&amp;gt;error);&#xA;D_term = (D_gain/timeStep) * (error - previous_error);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;At last, you can see that, &lt;em&gt;if your time steps are relatively constant&lt;/em&gt;, you can say:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Effective_P_gain = P_gain;&#xA;Effective_I_gain = I_gain*timeStep;&#xA;Effective_D_gain = D_gain/timeStep;&#xA;&#xA;P_error = error;&#xA;I_error = I_error + error;&#xA;D_error = error - previous_error;&#xA;previous_error = error;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Here you can see that &lt;code&gt;I_error&lt;/code&gt; accumulates the error terms. I frequently see the &lt;code&gt;timeStep&lt;/code&gt; being left off of the PID error terms, which I grudgingly accept because, as shown above, it's mathematically possible to do, but the problem is that:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;If you build modular code (which you should), then gain values you test when you're just doing motor tuning may fail when you add more detailed logic (or remove faulty logic) later in the development cycle. This is because addition or removal of program logic will alter the total time between function calls. The PID loop becomes highly sensitive to logic changes and thus also becomes very difficult to tune. &lt;/li&gt;&#xA;&lt;li&gt;You can't use empirical tuning methods like &lt;a href=&quot;https://en.wikipedia.org/wiki/Ziegler%E2%80%93Nichols_method&quot; rel=&quot;noreferrer&quot;&gt;Ziegler-Nichols&lt;/a&gt; because those tuning methods require you to be using the &lt;em&gt;true&lt;/em&gt; PID gains, not the modified gains. The &lt;code&gt;timeStep&lt;/code&gt; term scales the integral and derivative gains, and the values diverge pretty quickly. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;If your sample time is 10Hz, then your time step is (1/10) seconds, so integral gain is reduced by a factor of ten and your derivative gain is increased by a factor of ten, meaning they're a factor of ONE HUNDRED apart from one another. Ziegler-Nichols and others requires you to tune one gain until you see a particular system response, then set the remaining gains based on a formula that uses the first gain as an input. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your gains aren't scaled correctly, those tuning methods will all fail. Now you're having twice the difficulty in tuning your PID controller:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;You can't use established tuning guidelines to tune the system, so you're guessing at the gains, then&lt;/li&gt;&#xA;&lt;li&gt;Once you do finally find good gains, your system becomes highly sensitive to changes in logic, which means you'll have to re-tune (entirely by guessing) again. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;It's a huge time suck and a big distraction from the project.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2017-07-18T19:18:17.163" LastActivityDate="2017-07-18T19:18:17.163" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="12856" PostTypeId="1" CreationDate="2017-07-18T21:42:12.333" Score="0" ViewCount="1191" Body="&lt;p&gt;I'm trying to figure out to a problem with a planar manipulator.&#xA;The manipulator has a base effector and L1 and L2 with 3 joints.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/HubGl.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HubGl.jpg&quot; alt=&quot;The rrr planar model in the cartesians axis&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Question: &lt;em&gt;INVERSE KINEMATICS&lt;/em&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Given the &lt;code&gt;posit_ion(x, y, z)&lt;/code&gt; of the tool I calculate the values of the joint variables ($\theta_1$, $\theta_2$, $\theta_3$ and $\gamma$) as follow:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the &lt;code&gt;position(x, y, z)&lt;/code&gt; I calculate:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;$\gamma= atan2(z, x)$&lt;/li&gt;&#xA;&lt;li&gt;$x'= \cos(\gamma)*x + \sin(\gamma)*z$&lt;/li&gt;&#xA;&lt;li&gt;$y'= y$&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I used $x'$ and $y'$ to calculate (through) the angles of joints like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/AV4j0.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/AV4j0.jpg&quot; alt=&quot;Angles formula&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;is it correct?&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;Question &lt;em&gt;FORWARD KINEMATICS&lt;/em&gt;:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Given the joints variables ($\theta_1$, $\theta_2$, $\theta_3$ and $\gamma$) I need to calculate the &lt;code&gt;position(x, y, z)&lt;/code&gt; of the tool. &#xA;In this case I don't know how to continue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyone can help me?&lt;/p&gt;&#xA;" OwnerUserId="17588" LastEditorUserId="2289" LastEditDate="2017-07-19T09:31:06.500" LastActivityDate="2017-09-28T19:57:34.213" Title="forward and inverse kinematics of arm" Tags="&lt;inverse-kinematics&gt;&lt;forward-kinematics&gt;&lt;manipulator&gt;&lt;rotation&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12857" PostTypeId="2" ParentId="11388" CreationDate="2017-07-19T11:55:20.813" Score="3" Body="&lt;p&gt;You should probably also add information regarding your sensors, for instance what LIDAR are you to use 2D or 3D etc. The nature of SLAM algorithm shall also depend upon what kind of system do you need to use it on specifically what are the rates that you need, do you need the SLAM to be online or offline etc. Further the machine you run your algorithms may also be the reason which decides which algorithm you finally use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regardless I think these are some SLAM algorithms that may help you :&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Orb SLAM : &lt;a href=&quot;http://webdiis.unizar.es/~raulmur/orbslam/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://webdiis.unizar.es/~raulmur/orbslam/&lt;/a&gt; uses only camera information but performs very well at least the RGB-D version.&lt;/li&gt;&#xA;&lt;li&gt;Google Cartographer : &lt;a href=&quot;https://github.com/googlecartographer/cartographer&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/googlecartographer/cartographer&lt;/a&gt; needs no introduction.&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You should also checkout gmapping - slam-gmapping&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Definitely checkout the LOAM algorithm, it uses only LIDAR data but produces very good quality maps, you can use EKF on the odometry that it provides with the one you have, that should give you a good positional estimate.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="15453" LastActivityDate="2017-07-19T11:55:20.813" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12860" PostTypeId="2" ParentId="12643" CreationDate="2017-07-19T20:10:12.140" Score="0" Body="&lt;p&gt;I would highly recommend you to go through &lt;a href=&quot;http://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=4084563&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;Improved Techniques for Grid Mapping With Rao-Blackwellized Particle Filters&quot;&lt;/a&gt; by Grisetti, Stachniss, and Burgard. There is quite a good implementation of it which can found at the &lt;a href=&quot;http://www.openslam.org&quot; rel=&quot;nofollow noreferrer&quot;&gt;OpenSLAM.org&lt;/a&gt;. This website is a gold mine for SLAM algorithms and their implementations. You can learn a lot from there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The algorithm from the paper, &quot;Improved Techniques in grid mapping with Rao Blackwellized particle filters&quot; is implemented as gmapping (or slam gmapping) and it does precisely what you want. The source code can be found on github.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this helps.&lt;/p&gt;&#xA;" OwnerUserId="15453" LastEditorUserId="9720" LastEditDate="2017-07-20T13:39:17.247" LastActivityDate="2017-07-20T13:39:17.247" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12861" PostTypeId="2" ParentId="12838" CreationDate="2017-07-19T20:45:42.573" Score="1" Body="&lt;p&gt;&lt;strong&gt;First off&lt;/strong&gt;, I would highly recommend checking &lt;strong&gt;ROS (Robot Operating System)&lt;/strong&gt; out, the ROS community includes researchers and enthusiasts as well as professionals from all around the world and thus most of what you need to solve the problem is already available there. You would have to just implement what others have done, on your system.&lt;/p&gt;&#xA;&lt;p&gt;I, rather me and my team, have done the exact same thing as you want and the problem becomes much easier if you are using ROS.&lt;/p&gt;&#xA;&lt;p&gt;There are pre-built SLAM packages available open source which you can use and for making maps and localizing your robot. Once you have the robot's position in a map that also contains all of the obstacles, you just have to do the path planning so that you do not hit any of the obstacles and reach your goal as fast as possible. Then break your path into neared goal points which are simpler to reach so that just by getting to these points your robot can get to the final goal.&lt;/p&gt;&#xA;&lt;p&gt;As the problem you have put forth is a rather large problem, I feel it is hard to explain it completely here, but I will try to do as much as I can (When I get time I will add more links to help).&lt;/p&gt;&#xA;&lt;p&gt;Let us break this problem into several parts,&lt;/p&gt;&#xA;&lt;p&gt;(Don't worry about some occasional ROS &lt;em&gt;jargon,&lt;/em&gt; you'll catch them during the tutorials).&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;If you are unaware of ROS, I suggest taking a look at it and here is a place where you can learn it &lt;a href=&quot;http://wiki.ros.org/ROS/Tutorials&quot; rel=&quot;nofollow noreferrer&quot;&gt;hands-on&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Next you will have to get your sensors working with ROS, this should be easy as for most of them you will have &lt;code&gt;packages&lt;/code&gt; already made and open source.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Once all your sensors are working with ROS, you will have &lt;code&gt;topics&lt;/code&gt; which contain have current sensor data, now you can do anything with them, i would use filters on the data and fuse to find your robots estimated pose. (You should also look into &lt;strong&gt;Kalman&lt;/strong&gt; and &lt;strong&gt;Extended Kalman Filters&lt;/strong&gt; at this point.)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Now is the time when you can use some &lt;strong&gt;SLAM (Simultaneous Localization and Mapping)&lt;/strong&gt; algorithms to have a map with obstacles and your robot at all times.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Do the &lt;strong&gt;Motion Planning&lt;/strong&gt;, break the path into smaller pieces and feed them to your robot in the format it wants (You will need some knowledge about &lt;strong&gt;Control Systems&lt;/strong&gt; at this point).&lt;/p&gt;&#xA;&lt;p&gt;From my experience you can use these packages : &lt;a href=&quot;http://wiki.ros.org/gmapping&quot; rel=&quot;nofollow noreferrer&quot;&gt;gmapping&lt;/a&gt;, robot-poe-ekf, moveit. (Google these by adding ros)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;I hope this helps, and all the best man.&lt;/p&gt;&#xA;" OwnerUserId="15453" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2017-07-19T20:45:42.573" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12862" PostTypeId="1" CreationDate="2017-07-19T22:36:46.390" Score="3" ViewCount="974" Body="&lt;p&gt;I have a sensor outputting correct, calibrated North-East-Down referenced quaternions describing the orientation of the sensor. It also outputs raw, sensor referenced acceleration data, &lt;strong&gt;inclusive&lt;/strong&gt; of gravity. I want NED free acceleration, without gravity. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I have been doing is rotating the acceleration data by the quaternion, and subtracting gravity from the z axis. this doesnt really make sense to me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think it should be something more like &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Rotate acceleration data by the quaternion (brings data to some strange frame?&lt;/li&gt;&#xA;&lt;li&gt;Subtract gravity from z axis&lt;/li&gt;&#xA;&lt;li&gt;Inverse rotation (back to sensor frame?)&lt;/li&gt;&#xA;&lt;li&gt;Second inverse rotation? (goes to NED frame??)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Any explanation would be appreciated&lt;/p&gt;&#xA;" OwnerUserId="17602" LastActivityDate="2021-04-01T05:06:25.667" Title="Correctly calculating free acceleration given NED referenced orientation quaternion and sensor referenced acceleration data" Tags="&lt;imu&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12863" PostTypeId="1" CreationDate="2017-07-20T00:18:50.047" Score="2" ViewCount="540" Body="&lt;p&gt;I'm working on a masters thesis and need to calculate Mass inertia matrix ($M$), Coriolis/Centrifugal matrix ($C$), and the gravity matrix ($G$) in the equation $M\ddot{\theta} + C\theta + G = \tau$ (to get the dynamic model).&#xA;I'm trying to calculate PD control in matlab, but I'm unsure if I need to calculate $M$, $C$, $G$ for every orientation of the robot as it moves.&#xA;I assume so, but I don't want to code it and then find out I didn't need to.&#xA;Please advise.&lt;/p&gt;&#xA;" OwnerUserId="17603" LastEditorUserId="9720" LastEditDate="2017-07-20T17:58:23.037" LastActivityDate="2017-07-20T17:58:23.037" Title="Euler-Lagrange Dynamic model" Tags="&lt;matlab&gt;&lt;dynamics&gt;&lt;manipulator&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12864" PostTypeId="2" ParentId="12826" CreationDate="2017-07-20T01:05:00.197" Score="1" Body="&lt;p&gt;Solved.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Controller error, even when the controller &quot;says&quot; there is current, actually there isn't any!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is inside the controller Roboclaw. Roboclaw's forum moderator says the problem is because current is too low to get an accurate measure.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;A current of .06 amps is noise, not actual current. Anythign under 1&#xA;  amp isnt really accurate and even with no motors attached(so there is&#xA;  definitely no current) you will usually see readings from 60 to 200ma,&#xA;  .06 to .2, coming from the current sensors.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Also, the sensor is not very good calibrated, and there is no way a user can calibrate that. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The current sense is measuring .001v/amp. We already do a lot of&#xA;  filtering to get reasonably good values but there is no way to&#xA;  completely elliminate the noise or offset error(not without adding&#xA;  craszy costs).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt; Just ignore any current under 1 amp. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Robloclaw's forum moderator solution:&lt;/strong&gt; You should use a conditional in your code to display zero if the value is less than around 200ma to 1amp.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More info &lt;a href=&quot;http://forums.ionmc.com/viewtopic.php?f=2&amp;amp;t=44#p1621&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="17526" LastEditorUserId="17526" LastEditDate="2017-07-21T17:09:05.980" LastActivityDate="2017-07-21T17:09:05.980" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="12865" PostTypeId="2" ParentId="12848" CreationDate="2017-07-20T02:07:34.937" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I've calculated a max. traction force of 6.51N. Does this mean a&#xA;  torque force at the wheels of up to and including 6.51N can be&#xA;  applied, to drive the robot without the wheels slipping?&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;...&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;$max(F_{t}) = μN$&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Traction_(engineering)&quot; rel=&quot;nofollow noreferrer&quot;&gt;traction force equation&lt;/a&gt; means that the wheels can push on that surface with up to and including that force (and the surface pushes back with an equal and opposite force, accelerating the robot) without the wheels slipping.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Also, I've calculated a rolling resistance value of 0.16N. Am I&#xA;  correct in thinking this value needs to be added to the wheel force,&#xA;  so as to provide enough force to overcome it?&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;...&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;$F_{rr} = C_{rr}N$&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, &lt;a href=&quot;https://en.wikipedia.org/wiki/Rolling_resistance&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia defines &quot;specific rolling resistance&quot;&lt;/a&gt; $C_{rr}$ as &quot;the force per unit vehicle weight required to move the vehicle on level ground at a constant slow speed where aerodynamic drag (air resistance) is insignificant and also where there are no traction (motor) forces or brakes applied.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Newton's second law $\vec{F} = m\vec{A}$ applies to this free body diagram -- the acceleration of your vehicle, times its mass, equals the net total force.&#xA;The net total force in the horizontal direction on your vehicle appears to be the traction force $F_t$ of the ground on the contact patch of the wheel (this actual traction force is almost always far less than the maximum traction force $max(F_{t})$), the (effective) rolling resistance $F_{rr}$, and the force due to aerodynamic drag -- forces that in some cases may align in the same direction and add up, but in more common cases are opposing and partially cancel out.&lt;/p&gt;&#xA;" OwnerUserId="187" LastActivityDate="2017-07-20T02:07:34.937" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="12867" PostTypeId="2" ParentId="12862" CreationDate="2017-07-20T12:47:54.527" Score="0" Body="&lt;p&gt;I think you have the concept down. I'm not sure what the &quot;some strange frame&quot; would be, or how you would have a transform to that frame. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You know, by physics, that gravity points down in the world frame. You know, by your sensor's orientation quaternion, how the sensor is oriented relative to the world.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, as you mention:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Rotate acceleration data by the quaternion &lt;strong&gt;from&lt;/strong&gt; the sensor frame &lt;strong&gt;to&lt;/strong&gt; the world frame. &lt;/li&gt;&#xA;&lt;li&gt;Subtract gravity from the down axis (typically z or y - be sure to read the sensor's data sheet!)&lt;/li&gt;&#xA;&lt;li&gt;Rotate the acceleration data &lt;strong&gt;from&lt;/strong&gt; the world frame &lt;strong&gt;to&lt;/strong&gt; the sensor frame. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I'm not positive why you would want that last step though, unless you were doing something &lt;strong&gt;strictly&lt;/strong&gt; in the local frame. Generally you would care about how an object is oriented or how it moves &lt;em&gt;with regards to an arbitrary start location in the world frame.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That is, once you rotate the acceleration data to the world frame, you can remove gravity, and then perform your single and double integrations to get speed and position &lt;em&gt;with respect to the world frame.&lt;/em&gt; I'm not sure what you get by going &lt;em&gt;back&lt;/em&gt; to the sensor frame after removing gravity. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe this is your fourth point? &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Second inverse rotation? (goes to NED frame??)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Right, because again you care about how the object moves &lt;em&gt;with respect to the world&lt;/em&gt;. If you don't care about that relationship then you're in a pretty small minority of IMU applications, and I personally can't really imagine the scenario you're working with. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, if you look, your points three and four cancel and you're left with one and two - rotate to world frames, remove gravity. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-07-20T12:47:54.527" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="12868" PostTypeId="2" ParentId="12863" CreationDate="2017-07-20T13:08:42.847" Score="2" Body="&lt;p&gt;You haven't included a diagram of your robot, so I don't know how big or complex these matrices are to calculate, but I would argue that you might not need to constantly recalculate the values if your controller isn't &lt;em&gt;sensitive&lt;/em&gt; to the parameter changes. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the master's level, I would hope you have a good grasp on dynamics and kinematics and would be able to know what the &quot;best&quot; and &quot;worst&quot; case scenarios are for loading on your joint(s). For example, an arm that is fully extended would provide maximal torque to a shoulder joint, and arm that is curled up would provide the minimal torque to the shoulder joint.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Calculate your matrices at the nominal or average use case, then calculate your gains for that case. &lt;em&gt;Then&lt;/em&gt;, calculate your matrices at the minimum and maximum use cases and compare performance with the nominal gains. This is referred to as a &lt;a href=&quot;https://en.wikipedia.org/wiki/Sensitivity_analysis#One-at-a-time_.28OAT.2FOFAT.29&quot; rel=&quot;nofollow noreferrer&quot;&gt;sensitivity analysis&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you can prove that there is a &quot;negligible&quot; difference in performance between the min/max cases when you use the nominal control gains, then you're in the clear. If you fail this test (if there is a &quot;non-negligible&quot; difference in performance) then you &lt;em&gt;need&lt;/em&gt; to calculate the system parameters in order to maintain satisfactory performance. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;A couple notes:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Be careful with PD control - the integral term &lt;code&gt;I&lt;/code&gt; is what eliminates steady-state error. Derivative control is &lt;em&gt;highly sensitive&lt;/em&gt; to noise. &lt;/li&gt;&#xA;&lt;li&gt;If you're going to go through the effort of modelling the system (&quot;plant&quot;), then you may want to consider using a more advanced control mechanism like a state feedback controller. &lt;/li&gt;&#xA;&lt;li&gt;On that note, also be careful with the state feedback controllers - they are for use with &lt;strong&gt;L&lt;/strong&gt;inear, &lt;strong&gt;T&lt;/strong&gt;ime-&lt;strong&gt;I&lt;/strong&gt;nvariant (LTI) systems. LTI means that your model must be linear and the &lt;strong&gt;only&lt;/strong&gt; thing that is allowed to change with respect to time is the state vector. I would suggest you look at LQR control for nonlinear systems. &lt;/li&gt;&#xA;&lt;li&gt;Finally, with regards to calculating the new matrices with every orientation, I would suggest you read more about Jacobian matrices. The Jacobian is basically a vector of vectors (matrix) that gives the mathematical expression for how a particular value changes when the underlying parameters change. It's a matrix of partial differentials, and you can use it to find how each of your control matrices changes when things like the joint angles change. A change of XX percent on a particular joint causes a YY percent change in your matrix, etc.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-07-20T13:08:42.847" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12869" PostTypeId="1" CreationDate="2017-07-20T14:04:50.733" Score="1" ViewCount="290" Body="&lt;p&gt;On my Bit:Bot from 4Tronix ([see here])&lt;a href=&quot;http://4tronix.co.uk/blog/?p=1490&quot; rel=&quot;nofollow noreferrer&quot;&gt;1&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have an HC-SR04 ultrasound sensor attached. It uses solely pin15, for both trig and echo.  I am able to use Microsoft MakeCode 'block editor' to get a reading (&lt;a href=&quot;https://i.stack.imgur.com/4aKqz.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4aKqz.png&quot; alt=&quot;see attachment&quot;&gt;&lt;/a&gt;) but am unable to find a working solution for MicroPython.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The closest I've found is this one on GitHub (below), but I just keep getting error message of '-11' scrolling across the Microbit's LED Matrix. I've checked for error code -11 but nothing exists.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;from microbit import *&#xA;class HCSR04:&#xA;&#xA;def __init__(self, tpin=pin15, epin=pin15, spin=pin13):&#xA;    self.trigger_pin = tpin&#xA;    self.echo_pin = epin&#xA;    self.sclk_pin = spin&#xA;&#xA;def distance_mm(self):&#xA;    spi.init(baudrate=125000, sclk=self.sclk_pin,&#xA;             mosi=self.trigger_pin, miso=self.echo_pin)&#xA;    pre = 0&#xA;    post = 0&#xA;    k = -1&#xA;    length = 500&#xA;    resp = bytearray(length)&#xA;    resp[0] = 0xFF&#xA;    spi.write_readinto(resp, resp)&#xA;    # find first non zero value&#xA;    try:&#xA;        i, value = next((ind, v) for ind, v in enumerate(resp) if v)&#xA;    except StopIteration:&#xA;        i = -1&#xA;    if i &amp;gt; 0:&#xA;        pre = bin(value).count(&quot;1&quot;)&#xA;        # find first non full high value afterwards&#xA;        try:&#xA;            k, value = next((ind, v)&#xA;                            for ind, v in enumerate(resp[i:length - 2]) if resp[i + ind + 1] == 0)&#xA;            post = bin(value).count(&quot;1&quot;) if k else 0&#xA;            k = k + i&#xA;        except StopIteration:&#xA;            i = -1&#xA;    dist= -1 if i &amp;lt; 0 else round((pre + (k - i) * 8. + post) * 8 * 0.172)&#xA;    return dist&#xA;&#xA;    sonar = HCSR04()&#xA;    while True:&#xA;        test = sonar.distance_mm()&#xA;        display.scroll(str(test))&#xA;        sleep(1000)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Please help if you can.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="17610" LastActivityDate="2017-07-20T14:04:50.733" Title="Continual error attempting to use MicroPython with HC-SR04 sensor on Bit:Bot" Tags="&lt;python&gt;&lt;ultrasonic-sensors&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12870" PostTypeId="2" ParentId="12862" CreationDate="2017-07-20T14:24:50.560" Score="0" Body="&lt;p&gt;Accelerometer frames are kind of tricky.  They treat the sign differently for gravity and regular accelerations.  This is the equation they use:&#xA;$$&#xA;a_{accelerometer} = a_{sensorFrame} - g &#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See this question for more info:&#xA;&lt;a href=&quot;https://robotics.stackexchange.com/questions/1858/why-do-3-axis-accelerometers-seemingly-have-a-left-handed-coordinate-system&quot;&gt;Why do 3-axis accelerometers seemingly have a left-handed coordinate system?&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2017-07-20T14:24:50.560" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="12874" PostTypeId="2" ParentId="12830" CreationDate="2017-07-21T13:10:16.540" Score="1" Body="&lt;p&gt;It is helpful if you think of this in terms of overall power, rather than just voltage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Imagine you have a machine which requires 100W per motor for your desired flight performance characteristics. This 100W can be delivered to the motor using any voltage/current combination you wish.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For instance, you could deliver it by supplying 100V at 1A, or 1V at 100A, or any other combination.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your proposed approach, using higher KV motors, would mean using lower voltage but higher current. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The electrical engineering problems that you experience with higher current are harder to solve than those you experience at higher voltages (at least in this range of voltage and current). Switching 100V at 1A is much easier than switching 1V at 100A. &lt;/p&gt;&#xA;" OwnerUserId="17622" LastActivityDate="2017-07-21T13:10:16.540" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12875" PostTypeId="2" ParentId="12830" CreationDate="2017-07-21T13:11:48.483" Score="1" Body="&lt;p&gt;Power is power is power. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you mention in your post,&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Of course more voltage will reduce the amps but that's not related to the question, I think.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Well, it is related to the question, because&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;P = IV \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have constant power output, then current decreases as voltage increases because you can rearrange that as $I = P/V$. In this expression, you can clearly see that a bigger denominator (bigger voltage) means smaller current, again for a constant power output. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I mentioned, power is power; you seem to have a good feeling for the &lt;em&gt;electrical&lt;/em&gt; power, but consider also that there is a &lt;em&gt;mechanical&lt;/em&gt; power:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;P = \tau \omega \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That is, power is torque ($\tau$) times speed ($\omega$). Now you can hopefully see where I'm going. Just like the constant power expression for &lt;em&gt;electrical&lt;/em&gt; power shows that current declines for increasing voltage, mechanical power can be rearranged to show:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\boxed{\tau = \frac{P}{\omega}} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Torque declines with increasing speed for a constant power!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Torque is important because it affects your ability to accelerate:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\tau = I \alpha \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where $I$ is the moment of inertia of the load and $\alpha$ is the angular &lt;em&gt;acceleration&lt;/em&gt;. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Now, with some of the math explained, consider the &lt;em&gt;performance&lt;/em&gt; of a racing vehicle. &lt;em&gt;Depending on the course&lt;/em&gt;, you may want a vehicle with a higher top speed, or you &lt;strong&gt;may&lt;/strong&gt; want a vehicle with more acceleration. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assume for a moment that the maximum power output of the drone is fixed by the &quot;class&quot; or performance tier for the competition. For example, single A racing might have a 10 watt limit, but triple A racing might have a 250 watt limit. &lt;em&gt;This is hypothetical,&lt;/em&gt; but a good argument for the need for a constant power assumption.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You, as the designer and/or crew chief, would obviously want a motor that performs at the maximum allowable power output for your class. Now, if you have a track that requires a lot of turns, you want to be able to change the speed quickly. Changing speed requires an &lt;em&gt;acceleration&lt;/em&gt;, and again, your acceleration is a linear function of your available &lt;em&gt;torque&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want a more maneuverable, agile drone, you would pick a motor with a &lt;strong&gt;lower&lt;/strong&gt; Kv constant. This reduces the &lt;em&gt;top speed&lt;/em&gt; of the drone in exchange for more &lt;em&gt;torque&lt;/em&gt;, meaning you are able to change the speed of the props (and thus change directions) with more authority. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want a drone with a higher top speed, then you would pick a motor with a &lt;strong&gt;higher&lt;/strong&gt; Kv constant. This sacrifices torque (and thus maneuverability) for a higher top speed. This would be used for a drone equivalent of &lt;a href=&quot;https://en.wikipedia.org/wiki/Drag_racing&quot; rel=&quot;nofollow noreferrer&quot;&gt;drag racing&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ultimately it is up to the crew chief, pilot, designer, etc. - whoever makes the hardware decisions - to pick the motors that provide the best performance &lt;em&gt;for a given track&lt;/em&gt;. As mentioned at the top of the post, it all has to do with the trade-off imposed by the constant power assumption.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-07-21T13:11:48.483" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="12876" PostTypeId="1" AcceptedAnswerId="13940" CreationDate="2017-07-21T15:38:02.090" Score="1" ViewCount="540" Body="&lt;p&gt;I am looking for a library (or algorithm) that computes 3D scene (point cloud) from 2 consecutive images of a monocular sequence. I mean something like &lt;a href=&quot;https://github.com/mapillary/OpenSfM&quot; rel=&quot;nofollow noreferrer&quot;&gt;OpenSfM&lt;/a&gt; but only for 2 consecutive frames and also with a known camera calibration data (I dont need to do &quot;bundle adjustment&quot; like most of the SfM libraries do). I do know my absolute camera translation for the scale.&lt;/p&gt;&#xA;" OwnerUserId="1021" LastActivityDate="2017-07-31T12:50:03.550" Title="Forward monocular stereo vision (Structure from Motion)" Tags="&lt;stereo-vision&gt;&lt;3d-reconstruction&gt;&lt;monocular&gt;&lt;point-cloud&gt;&lt;structure-from-motion&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12877" PostTypeId="1" CreationDate="2017-07-21T18:23:54.993" Score="1" ViewCount="1031" Body="&lt;p&gt;suppose there are two bots.their task is to detect each other and hit one another(as,i am participating in a sumo-bot competition). but if the two of them are using the same kind of sensors like ultrasonic or ir proximity (for object detection) then ,what will happen if they fight face to face?&#xA;won't there be an interference of the ultrasonic sound wave or infrared ray of two bots?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;what will happen??&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and what is the solution if this happens? &lt;/p&gt;&#xA;" OwnerUserId="16491" LastEditorUserId="16491" LastEditDate="2017-07-22T02:29:02.457" LastActivityDate="2017-10-09T22:38:47.533" Title="If two ir proximity sensors or two ultrasonic sensors are kept face to face , will they give bad readings for interference?" Tags="&lt;sensors&gt;&lt;ultrasonic-sensors&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="12879" PostTypeId="2" ParentId="2491" CreationDate="2017-07-21T22:09:10.720" Score="1" Body="&lt;p&gt;This is a common problem in First Lego League, and, while legos are simple, the approach would hold for many other environments. Here is a video showing a way to &lt;a href=&quot;https://www.youtube.com/watch?v=n3HrnskQ92E&quot; rel=&quot;nofollow noreferrer&quot;&gt;follow the middle of the line using two color sensors&lt;/a&gt;. And here is an article &lt;a href=&quot;http://www.legoengineering.com/inside-a-two-step-simple-line-follower/&quot; rel=&quot;nofollow noreferrer&quot;&gt;showing the principles of how to do it&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In short, the algorithm is like this (assuming you are following the right side of the line)&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Calibrate the difference in color between &quot;the line&quot; and &quot;not the&#xA;line&quot;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;As you drive, continually measure the color, assume you should be measuring half way between &quot;the line&quot; and &quot;not the line&quot;.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;If the measured color is closer to &quot;the line&quot; then you are too much on the line and need to steer away from it.&#xA;the line.&lt;/li&gt;&#xA;&lt;li&gt;If the measured color is closer to &quot;not the line&quot; then you are too far off the line, and need to steer towards it.&lt;/li&gt;&#xA;&lt;/ol&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="17626" LastActivityDate="2017-07-21T22:09:10.720" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="12880" PostTypeId="1" CreationDate="2017-07-21T23:54:40.203" Score="1" ViewCount="1062" Body="&lt;p&gt;How to make a configuration space of a robot manipulator from a work space ? it's robot manipulator is 3 degree of freedom. Is a robot manipulator with more degrees of freedom the same process ?. Do more links affect the config space?&lt;/p&gt;&#xA;" OwnerUserId="17627" LastActivityDate="2017-08-04T10:07:53.727" Title="how to make a configuration space of a robot manipulator?" Tags="&lt;robotic-arm&gt;&lt;manipulator&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="13880" PostTypeId="2" ParentId="12836" CreationDate="2017-07-22T04:05:05.433" Score="0" Body="&lt;p&gt;You can also use a touch sensor, that can be as simple as a conductive pad that completes a circuit when a tool touches it to determine initial position with the distance of the tool length accounted for. It won't work unless you want the tool to return home for recalibration periodically though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also look into&#xA;&lt;a href=&quot;http://m.controleng.com/index.php?id=9113&amp;amp;tx_ttnews%5Btt_news%5D=143467&amp;amp;cHash=8bd8aeca180b32fec4c2cb8787c8f8f9&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;teach-position method&quot;&gt;teach position method&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13204" LastEditorUserId="13204" LastEditDate="2017-07-22T04:24:09.053" LastActivityDate="2017-07-22T04:24:09.053" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="13881" PostTypeId="1" AcceptedAnswerId="13891" CreationDate="2017-07-22T05:16:48.480" Score="-2" ViewCount="46" Body="&lt;p&gt;I ordered this cool little USB endoscope camera, but the cord does not look like any type of USB I have ever seen. I would eventually like to make this act like a webcam, so does that make a difference? It looks like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The back is just flat. I tried plugging in an Arduino RedBot cord because I had one lying around, it doesn't fit.&lt;/p&gt;&#xA;" OwnerUserId="17628" LastEditorUserId="17628" LastEditDate="2018-07-22T22:19:38.223" LastActivityDate="2018-07-22T22:19:38.223" Title="My Plug Says It's USB, I can't Identify" Tags="&lt;cameras&gt;&lt;usb&gt;&lt;identification&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="13882" PostTypeId="1" CreationDate="2017-07-22T08:50:45.693" Score="0" ViewCount="29" Body="&lt;p&gt;Hello every one hope you all alrigt &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am working on a mecanum wheel robot and now I am facing a problem to afford a lipo battery which the required voltage to power my robot is 12 &#xA;So I think that I can exploit the 12v adapter to power my robot and I want to know if its possible or no &lt;/p&gt;&#xA;&#xA;&lt;p&gt;First I have a cotroller which takes a rated voltage 6v - 12v and rated current 1.5 A&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And tow motor drivers with driving voltage of 6 - 12 v and driving current of 8A&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My idea is to take an adapter like this one &#xA;&lt;a href=&quot;https://i.stack.imgur.com/ozRKb.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ozRKb.jpg&quot; alt=&quot;12v 2A adapter&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And connect in parallel with these three chips to power my robot &#xA;Is that possible ?&lt;/p&gt;&#xA;" OwnerUserId="15380" LastActivityDate="2017-08-26T16:10:37.690" Title="Powering a robot using the 12v adapter" Tags="&lt;battery&gt;&lt;power&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="13883" PostTypeId="1" AcceptedAnswerId="13884" CreationDate="2017-07-22T11:49:43.760" Score="3" ViewCount="6199" Body="&lt;p&gt;I have:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Raspberry Pi 3.&lt;/li&gt;&#xA;&lt;li&gt;Pi camera.&lt;/li&gt;&#xA;&lt;li&gt;CC3D flight controller.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I have already developed a Python script that decides whether the quadcopter dron has to turn left/right, move straight on or to stop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a way to connect the Raspberry Pi to the flight controller to send it the commands?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it as easy as it sounds?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt;: I can change the flight controller if necessary.&lt;/p&gt;&#xA;" OwnerUserId="17631" LastEditorUserId="17631" LastEditDate="2017-07-22T11:59:40.750" LastActivityDate="2018-03-15T19:52:31.087" Title="Quadcopter controlled by Raspberry Pi" Tags="&lt;quadcopter&gt;&lt;raspberry-pi&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="13884" PostTypeId="2" ParentId="13883" CreationDate="2017-07-22T12:03:24.337" Score="3" Body="&lt;p&gt;The easiest way to do this would be using UART for serial communication. The CC3D has TX/RX/GND pins which you connect to Raspberry Pi. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now you will need some sort of protocol or data framing to send pitch/roll/yaw/throttle values to the flight controller and differentiate these values somehow. You can implement and use the &lt;a href=&quot;http://www.multiwii.com/wiki/index.php?title=Multiwii_Serial_Protocol&quot; rel=&quot;nofollow noreferrer&quot;&gt;MultiWii Serial Protocol&lt;/a&gt; for this purpose. Flight controller firmware such as CleanFlight already support MSP. On the RaspPi, &lt;a href=&quot;https://github.com/alduxvm/pyMultiWii&quot; rel=&quot;nofollow noreferrer&quot;&gt;PyMultiWii&lt;/a&gt; can be used to handle MSP frames. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the format or range of the controls the python script decides for the quadcopter? You will have to convert or map these values into MSP RC frame format. The pitch/roll/yaw/throttle range in MSP is 1000-2000 (centered at 1500 at pitch/roll/yaw) and 1000 for throttle stops all motors and 2000 is the max value for throttle. The RC frame also support 4 AUX channels, where you can send any sort of data you want. Here's a good &lt;a href=&quot;https://github.com/heethesh/eYSIP-2017_Control_and_Algorithms_development_for_Quadcopter/blob/master/documents/tutorials/multiwii_serial_protocol/Tutorial-3-MultiWii-Serial-Protocol.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;tutorial&lt;/a&gt; for implementing MSP with python and STM32 microntroller (which is used on CC3D).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Tip: You can also make use of the MSP attitude and heading frame to get the pitch, roll and yaw computed from the IMU on the flight controller and integrate this with your Python script on RaspPi for better control!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/aQUlZ.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/aQUlZ.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/baqqs.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/baqqs.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9059" LastEditorUserId="9059" LastEditDate="2017-07-22T12:15:32.063" LastActivityDate="2017-07-22T12:15:32.063" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="13885" PostTypeId="2" ParentId="12877" CreationDate="2017-07-22T15:33:18.517" Score="2" Body="&lt;p&gt;Because you have not specified any particular Infrared nor ultrasonic device only generic responses possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Infrared range finder devices which triangulate normally project a small focused light on the target.  The receiver likely is only looking for the refection in a defined area.  So interference from reflection of other infrared signals should be unlikely.  However, if an infrared source was aimed at the receiver, it could flood it and cause an incorrect reading.  Since normal transmitters project a small focused light, this too should be unlikely.  But if the opponent wanted to, it may be possible to flood the play area with correctly modulated infrared light.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ultrasonic range finders transmit and receive sounds waves timing all events.  So there is only a small window when the range finder is expecting to hear an echo.  Any sounds heard outside this window of time are likely ignored.  It would appear unlikely that two independent ultrasonic range finders would encounter overlapping windows where they would be susceptible to unexpected interference. That said, it may be possible to flood the play area with the correct ultrasonic sound to cause the opponent problems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Software solutions exist to deal with unintentional interference.  Values that are known to be impossible can be rejected.  Minimum of, say, 3 samples and Maximum of, say, 3 samples can be used to remove outliers.  And averaging can be used to remove noise.&lt;/p&gt;&#xA;" OwnerUserId="17364" LastEditorUserId="17364" LastEditDate="2017-10-09T22:38:47.533" LastActivityDate="2017-10-09T22:38:47.533" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="13886" PostTypeId="1" CreationDate="2017-07-22T18:16:50.183" Score="1" ViewCount="138" Body="&lt;p&gt;I am doing mobile robot localisation as a project. Now I stuck in obtaining the equations of EKF localisation. My robot moves straight for 10 seconds parallel to x-axis and robot equipped with 2 sonars - in front and in right side. As a landmark I have two lines in front of the robot and on the right side parallel to x-axis. Could you please help me to obtain the equations?! The map looks like this:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/7RBzn.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7RBzn.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The robot is in the origin (0, 0), the landmark line parallel to X-axis coordinate is y=-2000mm, the landmark parallel to y-axis is x=4000. I already implemented the motion-based control which returns estimated pose of the robot and covariance matrix. The estimated pose of the robot is given by S=[Sx, Sy, Sth]. Please help me to find matrices of the correction step&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is my observation model Jacobian matrix?!&#xA;The papers in internet gives me only Jacobian matrix form for nonlinear model, but in my case as my teacher said the model is linear, but I dont know how to obtain this Jacobian matrix which has dimension H[2][3] matrix&lt;/p&gt;&#xA;" OwnerUserId="17633" LastEditorUserId="17633" LastEditDate="2017-07-26T18:58:38.347" LastActivityDate="2017-07-26T18:58:38.347" Title="Kalman filter localisation equations" Tags="&lt;mobile-robot&gt;&lt;sensors&gt;&lt;localization&gt;&lt;slam&gt;&lt;ekf&gt;" AnswerCount="0" CommentCount="16" ContentLicense="CC BY-SA 3.0" />
  <row Id="13887" PostTypeId="1" AcceptedAnswerId="13890" CreationDate="2017-07-23T19:54:04.470" Score="0" ViewCount="504" Body="&lt;p&gt;I'm a Mechatronics Student Engineer, and still new with the computer vision field and am now working on a project that needs to Tracks a small ball and need to determine it's (x,y,z).&#xA;1st) Kinect was bad for detecting small objects.&#xA;2nd) Stereo with 2 cameras not hardware synchronized isn't accurate.&#xA;3rd) Single Stereo Camera is very expensive and I don't have any information of how dealing with it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So how Can I track a ball to return its coordinates(x,y,z) ?&lt;/p&gt;&#xA;" OwnerUserId="17641" LastEditorUserId="17641" LastEditDate="2017-07-25T19:06:19.840" LastActivityDate="2017-07-25T19:06:19.840" Title="Tracking a ball returning its x,y,z coordinates" Tags="&lt;computer-vision&gt;&lt;matlab&gt;&lt;opencv&gt;" AnswerCount="1" CommentCount="4" ClosedDate="2017-07-25T13:12:31.700" ContentLicense="CC BY-SA 3.0" />
  <row Id="13888" PostTypeId="2" ParentId="9054" CreationDate="2017-07-23T20:53:08.513" Score="1" Body="&lt;p&gt;I am not sure what exactly your question is. Here is something that might help.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The rotation matrix converts inertial matrix with respect to body fixed frame (F$_1$) to that in space fixed frame (F$_0$) in which the angular velocity has been expressed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you carefully read the derivation of Lagrange equation, you can see that both the Inertial matrix and angular velocity must be expressed in the same reference frame.&lt;/p&gt;&#xA;" OwnerUserId="17504" LastActivityDate="2017-07-23T20:53:08.513" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="13890" PostTypeId="2" ParentId="13887" CreationDate="2017-07-24T15:27:33.613" Score="0" Body="&lt;p&gt;I did this for my project usingb 2 webcams,to get x,y,z it is a very hard topic you need to be well informed in computer vision,even you get a stero vision camera you need to threads,so you wont be dealing with low fps ,since you are using computer vision in 2 camera frame,getting depth from stero vision is hard,also the accuracy in stereo vision is less than a kinect,and takes a big amount of time,i recommend you use kinenct or a 3d camera,and it is not the camera that is important the more important thing is your code and your method to track the ball,there are alot of method to track it ,in kinect or any other3d vision system getting x,y,z is easy since you know the depth,otherwise if you want to use normal or fast camera,if you are not well informed  in computer vision ,i recommend you change the project&lt;/p&gt;&#xA;" OwnerUserId="17403" LastActivityDate="2017-07-24T15:27:33.613" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="13891" PostTypeId="2" ParentId="13881" CreationDate="2017-07-24T18:16:30.420" Score="2" Body="&lt;p&gt;USB is more than just a connector.  It is a standard communications protocol, voltage levels, and even wiring colors.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/yMonZ.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/yMonZ.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suggest you get a standard USB cable, cut it in half, then splice in your wires.  &lt;a href=&quot;http://wikipedia.org/wiki/USB&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://wikipedia.org/wiki/USB&lt;/a&gt; does a good job of describing the pin outs on the various USB connectors.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2017-07-24T18:16:30.420" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="13895" PostTypeId="2" ParentId="12709" CreationDate="2017-07-25T05:31:41.340" Score="2" Body="&lt;p&gt;You want to use the product of exponentials to calculate the transformation of $\zeta_1$ and $\zeta_2$ for $\theta_1$ and $\theta_2$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To be more clear, using your notation of $g_{12}$:&#xA;\begin{equation}&#xA;g_{12} = e^{\hat{\zeta_1} \theta_1} \cdot e^{\hat{\zeta_2} \theta_2} &#xA;\end{equation} &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where $\hat{\zeta_i}$ is the skew-symmetric matrix representation of the twist. Then you want to use the adjoint transformation of that resulting transformation matrix.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is the transformation that takes the third joint's frame from its reference pose to it's current pose, and thus the adjoint transformation of this transforms the third joints unit twist to the current configuration.&lt;/p&gt;&#xA;" OwnerUserId="17383" LastActivityDate="2017-07-25T05:31:41.340" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="13899" PostTypeId="1" AcceptedAnswerId="14555" CreationDate="2017-07-26T04:38:50.773" Score="6" ViewCount="1672" Body="&lt;p&gt;I want to implement Inverse Kinematics and i understand the inverse jacobian method but the servos i have only have a range from -90 to +90 degrees, how can i implement this detail in the algorithm? I can't simply set each joint to its maximum/minimum if the calculated angle is above/below the constraints because if i do future calculations will not understand that the maximum angle is not the correct path&lt;/p&gt;&#xA;" OwnerUserId="17658" LastActivityDate="2017-11-03T22:22:51.783" Title="How to apply Inverse Kinematics with angle constrained servos?" Tags="&lt;robotic-arm&gt;&lt;inverse-kinematics&gt;&lt;jacobian&gt;" AnswerCount="3" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="13900" PostTypeId="2" ParentId="12830" CreationDate="2017-07-26T05:29:20.513" Score="2" Body="&lt;p&gt;&lt;strong&gt;OK so lets start with&lt;/strong&gt;  &lt;code&gt;Please correct me if I'm wrong&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;As I understand, a brushless motor has a maximum torque and power (Watts), if you push it beyond its limits it will start heating and eventually burn.   &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Yes(mostly).&lt;/strong&gt;   &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A motor has a maximum torque called the &quot;stall torque&quot; that occurs when the motor is kept from moving (stalled).  The current that flows in that condition is called the &quot;stall current&quot;.  In this case, all the energy that is going into the motor is producing heat and if the motor cannot get rid of it, the temperature will rise until something bad (and often irreversible) happens.&lt;/li&gt;&#xA;&lt;li&gt;When a motor is operating it can also overheat; but, often in an aircraft the prop wash will help to cool the motor to reduce the risk of that.&lt;/li&gt;&#xA;&lt;li&gt;Another failure mode can happen as you push to higher RPMs.  Every motor has a breaking point.  Here is a &lt;a href=&quot;https://www.youtube.com/watch?v=WEEDJiC8Jqc&quot; rel=&quot;nofollow noreferrer&quot;&gt;video of a really cool 3D printed motor&lt;/a&gt; that the author was able to get to 30,000 RPM!!! Note what happened at max RPM - it didn't burn up.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;A brushless motor will always try to match the speed required drawing as much amps as is needed so increasing the power used.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Again, Yes(mostly).&lt;/strong&gt;   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The nature of an open loop DC Motor is that the motor output power (&lt;code&gt;Power = RPM*Torque&lt;/code&gt;) will rise to the point that it matches the power available to it (&lt;code&gt;input power - losses&lt;/code&gt;). RPM is not the only thing that limits this.  An example of this is when you grab the chuck of an electric drill and it slows down because the fixed power available forces the RPM to drop to compensate for the increased torque required.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Any brushless motor has a Kv value related to the coils windings that determines the rpm it will get without load per volt applied.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Yes&lt;/strong&gt; &#xA;Kv is a pretty good model of what drives the RPM on an unloaded motor.  What is happening is that a motor also acts as a generator.  As the RPM increases, it generates a Voltage (called the Back EMF) that increases pretty linearly with the RPM.  This voltage works against the source voltage.  At some point the EMF will rise to match the source voltage and no more current will be able to flow into the motor.  If $V_{emf} = K_e  \omega \\$ then $K_v = 1 / K_e$.  This is where the $K_v$ comes from.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Then, can I say, for example, 1000 Kv at 1 volt will be equivalent to 500 Kv at 2 volts in terms of power, rpm and torque? So could I say it will generate the same lift?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;NO&lt;/strong&gt;  Generating lift means torque (load) and $K_v$ only applies in the theoretical world of no load.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since &lt;code&gt;lift = work&lt;/code&gt; and &lt;code&gt;work = power&lt;/code&gt;, then (for a lossless motor) the same amount of power will be required to produce the same lift and if you are using the same propeller, the relationship between lift/torque and RPM will be the same; so, the required RPM and torque will be the same regardless of the $K_v$ of the motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the real world there is another parameter $K_i$ and this parameter establishes the relation between current and Torque.  And, due to some interesting (and insidious) math (which I will get to in a bit) $K_i \propto 1 / K_v$.  So, as you get a bigger $K_v$ and get more RPM for the same voltage, you will get a smaller $K_i$ and get less torque for the same current.  &lt;strong&gt;The same power will be required and still no one will get a free lunch.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If this is true, I can't understand why actual drones do not run on&#xA;  bigger Kv and fewer cells since cells add weight and Kv not.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So from the above discussion, $K_v$ really has not affect on the number of batteries that are required for the same performance.  If you increase $K_v$, sure you need less voltage; but, you will draw more current either requiring more cells to reach the required current or to match the battery life.  The power required by the motor times the run time will result in the energy required in Joules which also will be the battery capacity in Ah times its voltage (which also is Joules).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Now, regarding the &lt;code&gt;T-motor f80 2408&lt;/code&gt; you mentioned, Mini Quad did a pretty detailed &lt;a href=&quot;http://www.miniquadtestbench.com/assets/components/motordata/motorinfo.php?uid=95&quot; rel=&quot;nofollow noreferrer&quot;&gt;Bench Test&lt;/a&gt;.  Here is some of the data.  It looks pretty sweet to me.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/O0NLb.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/O0NLb.jpg&quot; alt=&quot;T-motor f80 2408 Bench Test&quot;&gt;&lt;/a&gt;&#xA;Note that for the 5&quot; prop it hits about 28,000 RPM at 16V (28000/16=1750$K_v$???) - &lt;strong&gt;NO&lt;/strong&gt; - this is loaded &lt;strong&gt;not unloaded&lt;/strong&gt;.  Also note how much current was required - &lt;strong&gt;30A Average&lt;/strong&gt; with &lt;strong&gt;162A peak&lt;/strong&gt;.  Max nominal discharge for a battery is normally about 25C.  That would mean you would need to use a 16V, 1200mAh battery pack. The real limit, however, will likely be peak current.  I believe a LIPO battery probably can't do more than 50C discharge rate; so, 162/50 means you will probably need at least a 16V 3200mAh battery which will &lt;strong&gt;NOT&lt;/strong&gt; be small.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is also going to be some magic in the Motor Controller to be able to get the full power out of this motor by optimizing the voltage on each motor phase and also managing the currents.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope this helping you understand that there is &lt;strong&gt;A LOT&lt;/strong&gt; more to getting the maximum power to weight than just having a large $K_v$.&lt;/p&gt;&#xA;" OwnerUserId="462" LastEditorUserId="462" LastEditDate="2017-07-27T06:49:17.153" LastActivityDate="2017-07-27T06:49:17.153" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="13902" PostTypeId="1" CreationDate="2017-07-26T10:12:04.643" Score="1" ViewCount="38" Body="&lt;p&gt;I am reading particle filtering for robot localisation and specifically the resampling step to avoid particle degeneracy.  Can anyone explain me what MC (Monte Carlo) variation means? I saw it couple of times as a benefit of some resampling techniques against others.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, &quot;Systematic resampling is the scheme preferred by the authors [since it is simple to implement, takes O(N) time, and minimizes the MC variation]&quot; (Arulampalam et al., 2002).&lt;/p&gt;&#xA;" OwnerUserId="17669" LastEditorUserId="17669" LastEditDate="2017-07-26T10:25:06.410" LastActivityDate="2017-07-26T10:25:06.410" Title="Resampling step for MC variation reduction" Tags="&lt;localization&gt;&lt;algorithm&gt;&lt;particle-filter&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="13903" PostTypeId="1" CreationDate="2017-07-26T10:18:07.893" Score="6" ViewCount="466" Body="&lt;p&gt;When solving the kinematics problem for a robot using DH parameters, if there are some passive joints between the actuator and the end effector, do I have to define the axis and transformations of passive joints too just like for active joints?&lt;/p&gt;&#xA;" OwnerUserId="17670" LastEditorUserId="37" LastEditDate="2017-07-27T08:39:07.727" LastActivityDate="2020-12-11T22:06:40.583" Title="DH parameters to solve forward kinematics problem" Tags="&lt;dh-parameters&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="13904" PostTypeId="2" ParentId="13899" CreationDate="2017-07-26T10:49:04.170" Score="0" Body="&lt;p&gt;it depends on your design,how many joints you have,&#xA;all the movement might happen in 180 degree/depending on the work space you want&#xA;,let say for a x,y,z point for the end effector ,you could have multiple  angles but different paths to get to same,for a point you might have multiple set of angles for each joint. you could use limits to pick one set of angles which doesnt have any degree more than 180, but if a point which cant be reached unless you need to have an angle that is more than 90/-90 then you cant go there,as i said it depends on your workspace and design&#xA;also be aware from singularity points,&lt;/p&gt;&#xA;" OwnerUserId="17403" LastActivityDate="2017-07-26T10:49:04.170" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="13905" PostTypeId="1" CreationDate="2017-07-26T13:35:03.863" Score="1" ViewCount="42" Body="&lt;p&gt;I am using the &quot;Choreography&quot; software to interact with Pepper. I can create english dialogs there. But I have problems to change the language to (e.g.) German.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the settings of a Dialog I can choose other languages (e.g. German). &lt;strong&gt;But&lt;/strong&gt; when I create a &quot;Topic&quot; there is only a checkbox for English. So I am confused at this point.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;:EDIT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The properties of the project itself does have language settings, too. There you have to check the languages you want to support. Then they are available for the modules.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/RJLlD.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/RJLlD.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Currently I need to restrict my answer to the &quot;Choreography&quot; software only. The software now offers &quot;Topics&quot; in &quot;German&quot;. But Pepper now does nothing. There is a problem I currently can not identify.&lt;/p&gt;&#xA;" OwnerUserId="10747" LastEditorUserId="37" LastEditDate="2018-03-08T11:22:05.490" LastActivityDate="2018-03-08T11:22:05.490" Title="Make Pepper understanding and speaking German or other none-english languages" Tags="&lt;speech-processing&gt;&lt;pepper&gt;" AnswerCount="0" CommentCount="5" ClosedDate="2017-08-02T19:22:55.627" ContentLicense="CC BY-SA 3.0" />
  <row Id="13911" PostTypeId="1" CreationDate="2017-07-27T04:01:49.063" Score="2" ViewCount="159" Body="&lt;p&gt;I have succesfully gotten my inverse kinematics method working using damped least squares and it has some really good results.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My target position also includes a target angle for the end effector, which i calculate in in forward kinematics by adding the angles of the three elevation joints. The problem that occurs though is that when i set an unrealistic target angle it tries to accomplish it before actually getting to the target.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So for instance, if i tell it to go to the a point (for example (2,-2,0) as showing below) with a Z height of zero and also tell it that it needs to come in at an angle of pi/2 (facing +Z direction) it has a ton of trouble because it's not physically possible for it to do so. &lt;a href=&quot;https://media.giphy.com/media/xUPGGCHkt5JjgRNUcM/giphy.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;Animation.&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But if i tell it to go to the same point and come in at a more reasonable angle of -pi/3 (facing downward towards -Z with some angle) it does a lot better because thats a physically realizable angle. &lt;a href=&quot;https://media.giphy.com/media/3ohzgXW3iVRLEc5Rug/giphy.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;Animation&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've tested the same algorithm without the target angle (which changes the jacobian because the target angle is no longer a part of the forward kinematics) and it works great, but i want to be able to have some control over the target angle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How do i implement logic that tells it to focus on getting to the target position first and THEN attempt to get as close to the target angle as possible without compromising the position?&lt;/p&gt;&#xA;" OwnerUserId="17658" LastEditorUserId="17658" LastEditDate="2017-07-27T04:07:50.250" LastActivityDate="2019-01-12T16:22:39.797" Title="How to prioritize target position over target angle in Inverse Kinematics?" Tags="&lt;robotic-arm&gt;&lt;inverse-kinematics&gt;&lt;jacobian&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="13912" PostTypeId="1" CreationDate="2017-07-27T10:30:54.743" Score="0" ViewCount="94" Body="&lt;p&gt;Would appreciate if anyone could help me understand the how if equation 6 and 7 are derived. Helping with any one D22 and C32 would suffice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/YVswN.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/YVswN.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15411" LastEditorUserId="15411" LastEditDate="2017-07-27T17:37:51.053" LastActivityDate="2017-07-27T19:34:58.520" Title="clarity in understanding the moment of inertia matrix D and Coriolisis and centripetal matrix C as per attached equations" Tags="&lt;kinematics&gt;&lt;dynamics&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="13914" PostTypeId="2" ParentId="13882" CreationDate="2017-07-27T15:17:30.677" Score="1" Body="&lt;p&gt;You have to check how much current your power adapter can draw.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If i understand correctly, you need at least 12v 9.5A to make your robot work. (~8A+1.5A).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The kind of power adapter you showed on the picture generally does not provide this much current.&lt;/p&gt;&#xA;" OwnerUserId="17688" LastActivityDate="2017-07-27T15:17:30.677" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="13915" PostTypeId="1" AcceptedAnswerId="13918" CreationDate="2017-07-27T15:47:45.567" Score="0" ViewCount="33" Body="&lt;p&gt;I'm making an Iron Man costume for Comic-Con and it has electronics in the hand and head.&#xA;I'm going to route both to the back to be handled. There is a certain type of wire connector that I want to use to connect across the shoulder and neck and I don't know what it's called. The connector is the same one that small lipo batteries and pc fans use, the one with the clip to prevent unwanted detachment but pushing on it allows for easy removal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is this type of wire connector called?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I uploaded some pictures to make sure you know which ones I'm taking about. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;imgur.com/a/afeEw&lt;/p&gt;&#xA;" OwnerUserId="17691" LastEditorUserId="17691" LastEditDate="2017-07-27T21:05:55.303" LastActivityDate="2017-07-27T21:18:02.643" Title="Wire connectors" Tags="&lt;electronics&gt;&lt;connector&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="13916" PostTypeId="2" ParentId="11653" CreationDate="2017-07-27T17:23:02.723" Score="1" Body="&lt;p&gt;You can't really make progress until you are sure the FK calculations are correct.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Think about the angles you are setting the joints to and where you expect the robot to be, and how you expect it to look. It is worth working through the DH transformations and drawing out all the frames in your own diagram.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Make sure you know whether you are using DH or Modified DH notation, as 50k4 mentions, and use one approach consistently. Make sure the link parameters match with the method.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If using DH you should have:&lt;br&gt;&#xA;&lt;br&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/U0kpp.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/U0kpp.png&quot; alt=&quot;DHtransformation&quot;&gt;&lt;/a&gt;&lt;br&gt;&#xA;&lt;br&gt;&#xA;For Modified DH your reference is:&#xA;&lt;br&gt;&#xA;&lt;br&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/zspwh.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zspwh.png&quot; alt=&quot;modDHtransformation&quot;&gt;&lt;/a&gt;&#xA;&lt;br&gt;&#xA;&lt;br&gt;&#xA;It looks like Lee and Zeigler are using DH so I would stick with that if you are wanting to use their solution.&#xA;&lt;br&gt;&#xA;&lt;br&gt;&#xA;To code up the FK and IK, these are the steps I normally use:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Split up your matrix multiplications and calculate the joint positions, joint by joint and test with known angles to check you have the correct positions.&lt;/li&gt;&#xA;&lt;li&gt;Using the above calculations, plot your links using matplotlib or matlab. This will give you a visual reference.&lt;/li&gt;&#xA;&lt;li&gt;Code up the solution for the FK and IK using the equations in Lee and Ziegler. You can test against this.&lt;/li&gt;&#xA;&lt;li&gt;Generate a large range of angle inputs and output positions from your code&lt;/li&gt;&#xA;&lt;li&gt;Write unit tests for your solvers using the output of 4&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Once you have done this, work through the joints systematically trying different poses. Also once you have the FK solution correct, this will give you a test for your IK as you can then solve forwards and back and you should get to your original joint inputs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are still stuck after doing this, then you will be in a better position to ask more specific questions here.&lt;/p&gt;&#xA;" OwnerUserId="11547" LastEditorUserId="11547" LastEditDate="2017-08-18T09:02:46.257" LastActivityDate="2017-08-18T09:02:46.257" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="13917" PostTypeId="2" ParentId="13912" CreationDate="2017-07-27T19:10:58.083" Score="1" Body="&lt;p&gt;Where did this example come from? It looks like maybe a class handout or similar. I don't agree with all of the formulas given, but I'll try to explain where I think they &lt;em&gt;should&lt;/em&gt; be coming from. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The $\bf{D}$ matrix is pretty straightforward - the key here is to understand the &lt;a href=&quot;https://en.wikipedia.org/wiki/Parallel_axis_theorem#Mass_moment_of_inertia&quot; rel=&quot;nofollow noreferrer&quot;&gt;parallel axis theorem&lt;/a&gt;, which is a formula for finding the moment of inertia at one point given the moment of inertia at the center of mass and the mass:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;I_{\mbox{new}} = I_{\mbox{center of mass}} + mr^2 \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The linkages form a &lt;a href=&quot;https://en.wikipedia.org/wiki/Kinematic_chain&quot; rel=&quot;nofollow noreferrer&quot;&gt;kinematic tree&lt;/a&gt;, where each joint &quot;feels&quot; the mass of its &quot;downstream&quot; link and the effective masses of all links attached after it as well. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, start with the last term in the matrix - $\bf{D}_{44}$:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;D_{44} = I_{bu} + M_{bu}r_4^2 \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is exactly the parallel axis theorem. You transfer the moment of inertia from the center of mass of the bucket to the stick-bucket joint, because that's where you're rotating. The next step is a little tricky because everything has already been reduced. I'll walk through the derivation of $\bf{D}_{33}$ and then hand-wave the rest saying the method is similar. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The distance from $O_2$ to $O_3$ is $a_3$. The distance from $O_3$ to $G_4$ is $r_4$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you wanted to get the distance from $O_2$ to $G_4$, then you could use the Pythagorean theorem, but &lt;em&gt;that's only applicable for right triangles&lt;/em&gt;, so what you have to use instead is the &lt;a href=&quot;https://en.wikipedia.org/wiki/Law_of_cosines&quot; rel=&quot;nofollow noreferrer&quot;&gt;law of cosines&lt;/a&gt;, which is a generalization of the Pythagorean theorem that applies to &lt;em&gt;all&lt;/em&gt; triangles:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;c^2 = a^2 + b^2 - 2ab\cos{\gamma} \\&#xA;$$&#xA;Where $\gamma$ is the angle between $a$ and $b$. Side note: for right triangles, they're &quot;right&quot; because the angle between $a$ and $b$ is a right angle (90 degrees), so the cosine of 90 is zero, so that term drops off and you're left with the Pythagorean theorem. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, for your example, you need not just the angle of the stick-bucket joint, but also the angle from that joint to the center of mass. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The angle of the stick-bucket joint is $\pi + \theta_4$, per the drawing, and now you need the angle from the $O_3 - O_4$ joint to the center of mass of the bucket; this is given as $\alpha_4$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, going back to the parallel axis theorem, if you wanted the moment of inertia for the &lt;em&gt;bucket&lt;/em&gt; about the stick-boom joint, you need the moment of inertia for the bucket &lt;em&gt;at the bucket's center of mass&lt;/em&gt;, and then you need the &lt;em&gt;straight-line distance&lt;/em&gt; from the bucket-stick joint out to the center of mass of the boom. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Call that distance $c$, call the distance from the boom-stick (&lt;a href=&quot;https://www.youtube.com/watch?v=pFriRcIwqNU&amp;amp;t=29s&quot; rel=&quot;nofollow noreferrer&quot;&gt;joke&lt;/a&gt;) joint to the stick-bucket joint $a$, and the distance from the stick-bucket joint to the bucket center of mass $b$, then what you get is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;I_{\mbox{bucket about boom-stick joint}} = I_bu + M_{bu}c^2 \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;c^2 = a^2 + b^2 - 2ab\cos{\left(\mbox{joint angle} + \mbox{center of mass angle}\right)} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;c^2 = a_3^2 + r_4^2 - 2a_3r_4\cos{\left(\left(\pi + \theta_4\right) + \left(\alpha_4\right)\right)} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now a little regrouping in the cosine term:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;c^2 = a_3^2 + r_4^2 - 2a_3r_4\cos{\left(\pi +\left(\theta_4 + \alpha_4\right)\right)} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And finally a &lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_trigonometric_identities#Shifts_and_periodicity&quot; rel=&quot;nofollow noreferrer&quot;&gt;period shift identity&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\cos(\pi + \theta) = -\cos{\theta} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And you get:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;c^2 = a_3^2 + r_4^2 - 2a_3r_4\left(-\cos{\left(\theta_4 + \alpha_4\right)}\right) \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Distribute the negative:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;c^2 = a_3^2 + r_4^2 + 2a_3r_4\cos{\left(\theta_4 + \alpha_4\right)} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;NOW FINALLY plug this $c^2$ back into the shifted moment of inertia equation:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{array}{ccl}&#xA;I_{\mbox{bucket about boom-stick joint}} &amp;amp; = &amp;amp; I_{bu} + M_{bu}c^2 \\&#xA;&amp;amp; = &amp;amp; I_{bu} + M_{bu}(a_3^2 + r_4^2 + 2a_3r_4\cos{\left(\theta_4 + \alpha_4\right)}) \\&#xA;&amp;amp; = &amp;amp; I_{bu} + M_{bu}r_4^2 + M_{bu}(a_3^2 + 2a_3r_4\cos{\left(\theta_4 + \alpha_4\right)}) \\&#xA;\end{array}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now recognize that $D_{44} = I_{bu} + M_{bu}r_4^2$, meaning that:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;I_{\mbox{bucket about boom-stick joint}} = D_{44} + M_{bu}(a_3^2 + 2a_3r_4\cos{\left(\theta_4 + \alpha_4\right)}) \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So that's the moment of inertia of the &lt;em&gt;bucket&lt;/em&gt; about the boom-stick joint, now you also need to add the moment of inertia of the stick about the boom-stick joint, &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;I_{\mbox{stick about boom-stick joint}} = I_{st} + M_{st}r_3^2 \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Put it all together and get:&#xA;$$&#xA;\begin{array}{ccl}&#xA;I_{33} = D_{33}&amp;amp; = &amp;amp; I_{\mbox{stick about boom-stick joint}} + I_{\mbox{bucket about boom-stick joint}} \\&#xA;&amp;amp; = &amp;amp; I_{st} + M_{st}r_3^2 + D_{44} + M_{bu}(a_3^2 + 2a_3r_4\cos{\left(\theta_4 + \alpha_4\right)}) \\&#xA;&amp;amp; = &amp;amp; \boxed{D_{44} + I_{st} + M_{st}r_3^2 + M_{bu}(a_3^2 + 2a_3r_4\cos{\left(\theta_4 + \alpha_4\right)})} \\&#xA;\end{array}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2&gt;Short P.S. -&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The trouble with calculating the Coriolis force (why I'm not willing to do it at the moment) is that it's a &lt;em&gt;cross-product&lt;/em&gt;. You're looking at a singular plane, but it looks like the axes are flipping for some reason; $O_3$ and $O_4$ seem to be rotated about the y-axis? Or maybe the y- and x-axes? I can't tell if that's a typo or not. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyways, you should take the cross-product and then keep the terms about the axes you care about; the forces about the axes in the plane don't affect the solution. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, there are a lot of typos in the document; &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;$D_{44} = I_{bu} + M_{bu}R_4^2$ should be $D_{44} = I_{bu} + M_{bu}r_4^2$, &lt;/li&gt;&#xA;&lt;li&gt;$D_{24} = D_{42} + D_{34} + (...)$ should probably be $D_{24} = D_{42} = D_{34} + (...)$,&lt;/li&gt;&#xA;&lt;li&gt;I &lt;em&gt;think&lt;/em&gt; that the signs are wrong on the off-diagonal $D$ terms, but I'm not willing to study the problem hard enough to verify,&lt;/li&gt;&#xA;&lt;li&gt;there are $\dot{\theta}_{234}$ terms that aren't defined, etc. &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I would definitely question the source/author of the paper you've acquired. Generally speaking, the method is as I've described above. Start where the only force is the local one, then work your way up (or down) the kinematic chain. Subsequent forces are the new &lt;em&gt;local&lt;/em&gt; forces plus all of the &lt;em&gt;previous&lt;/em&gt; forces &lt;strong&gt;expressed relative to the local frame&lt;/strong&gt;. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2017-07-27T19:34:58.520" LastActivityDate="2017-07-27T19:34:58.520" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="13918" PostTypeId="2" ParentId="13915" CreationDate="2017-07-27T20:22:52.097" Score="1" Body="&lt;p&gt;Computer fans usually use Molex connectors, however there are different versions of Molex connectors:&#xA;&lt;a href=&quot;https://en.wikipedia.org/wiki/Computer_fan#Connectors&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Computer_fan#Connectors&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Small LiPo batteries often use JST connectors. Again there are different versions and the Internet often does not differentiate correctly. Popular JST versions are JST XH and JST RCY. Bigger batteries might use custom connectors.&#xA;&lt;a href=&quot;http://www.rchelicopterfun.com/rc-lipo-battery-connector.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.rchelicopterfun.com/rc-lipo-battery-connector.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For examples:&#xA;(I currently can't post more than two links)&#xA;Check your favourite supplier shop and search for Molex and JST. Just as a shop-example I'll mention: &lt;a href=&quot;https://www.reichelt.com/de/en/&quot; rel=&quot;nofollow noreferrer&quot;&gt;reichelt&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="17678" LastEditorUserId="9720" LastEditDate="2017-07-27T21:18:02.643" LastActivityDate="2017-07-27T21:18:02.643" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="13923" PostTypeId="2" ParentId="12847" CreationDate="2017-07-28T17:42:20.197" Score="2" Body="&lt;p&gt;I came up with a solution in the end.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Fire a periodic interrupt at a fixed rate (In my case, I configured the STM32 to fire a systick interrupt every 1ms&lt;/li&gt;&#xA;&lt;li&gt;In the ISR for the 1ms timer, decrement a global variable down to zero (stopping at zero)&lt;/li&gt;&#xA;&lt;li&gt;In the ISR for compare and capture timer that detects the pulse from the Hall effect sensor, set the same global variable above to a &quot;time-out value&quot; (In my case 100). This is the millisecond value to denote the maximum period for the pulses.&lt;/li&gt;&#xA;&lt;li&gt;When polling for frequency of the hall effect sensor, I now check if the global variable is zero. If it is, I return zero (It would have decremented down to zero if no pulses have been received for 100ms) else I return the last measured frequency.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;As I said above the slowest period I detect before the motor becomes stationary is 73.2ms, so the 100ms timeout gives me some buffer for example if the robot is moving down hill and can actually register a speed slower than this.&lt;/p&gt;&#xA;" OwnerUserId="17566" LastActivityDate="2017-07-28T17:42:20.197" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="13924" PostTypeId="1" CreationDate="2017-07-28T18:50:35.607" Score="6" ViewCount="3021" Body="&lt;p&gt;I'm new to all this robotics stuff. Especially to Kalman filter. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;My initial goal is to have velocity as accurate as possible&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is my case: &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I have a phone which is mounted, for example in the car. So it has low cost GPS and IMU sensors. 2D&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;GPS gives me:&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;position (longitude, latitude, &lt;s&gt;altitude&lt;/s&gt;)&lt;/li&gt;&#xA;&lt;li&gt;position accuracy (&lt;strong&gt;error&lt;/strong&gt; can't be split into &lt;code&gt;east, north, up&lt;/code&gt; directions)&lt;/li&gt;&#xA;&lt;li&gt;speed&lt;/li&gt;&#xA;&lt;li&gt;speed accuracy (&lt;strong&gt;error&lt;/strong&gt; can't be split into &lt;code&gt;east, north, up&lt;/code&gt; directions)&lt;/li&gt;&#xA;&lt;li&gt;heading angle&lt;/li&gt;&#xA;&lt;li&gt;heading angle accuracy&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;IMU: (separated accelerometer, gyroscope and magnetometer). I fuse them myself&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Actually it's needed to be mentioned that I can't use magnetometer in my case. Since &quot;car&quot; is faraday cage. So I only can fuse accelerometer and gyroscope. Both of them are outputs from &lt;strong&gt;Madgwick AHRS&lt;/strong&gt; (can get from here rotation matrix, quaternion if needed) and represented in &lt;code&gt;North&lt;/code&gt;, &lt;code&gt;East&lt;/code&gt;, &lt;code&gt;Up&lt;/code&gt; dimensions. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I've done so far:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I've implemented linear KF with position &amp;amp; velocity states. But I didn't achieve desired accuracy.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/yrotV.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/yrotV.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Get rid of IMU data from chart above.&#xA;&lt;br&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/6PYEl.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6PYEl.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's IMU causes that drift. I have GPS updates every 1 second. And IMU with 13 Hz frequency. We can see here that every 13th iteration we have GPS updates and then IMU goes rogue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Used approach:&lt;/strong&gt;&lt;br&gt;&#xA;Since I have GPS 1Hz and IMU upto 100Hz. But I took 13Hz in my case. Since I don't need to have so many updates.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;predict when IMU fires event&lt;/li&gt;&#xA;&lt;li&gt;When GPS fires event. I take latest IMU data. Do predict and then gps (position, velocity) update.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Since my primary goal is to have accurate velocity&lt;/strong&gt;.&lt;br&gt;&#xA;I don't care much about position and heading angle but... Since velocity correlates with them they can be added to Kalman Filter. &lt;strong&gt;Am I right?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my Kalman states are &lt;code&gt;position&lt;/code&gt;, &lt;code&gt;velocity&lt;/code&gt; and &lt;code&gt;heading angle&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can I use something like?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;x = x_i + v_i\Delta t + \frac{a_i\Delta t}{2}&#xA;$$&#xA;$$&#xA;v = v_i + a_i\Delta t&#xA;$$&#xA;$$&#xA;\theta = \theta_i + w_i\Delta t&#xA;$$&#xA;Questions:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Could velocity benefit from adding position and heading angle as states to Kalman Filter. Since there is some correlation between them. (Angular velocity impacts on velocity itself).&lt;/li&gt;&#xA;&lt;li&gt;Is it OK to use formulas from Linear motion? Because I have Curvilinear motion in my case.&lt;/li&gt;&#xA;&lt;li&gt;Almost all papers describe (position, velocity) model with KF. Can I take advantage in using EKF? I found some papers that mention &lt;strong&gt;&lt;em&gt;odometry&lt;/em&gt;&lt;/strong&gt; word. And seems like they have the same model. (pos, velocity, angle)&lt;/li&gt;&#xA;&lt;li&gt;What if after all manipulations velocity is still inaccurate? Should I apply additional instruments after KF?&lt;/li&gt;&#xA;&lt;li&gt;Can I somehow take advantage of current location and prev. location points? (For example, calculate velocity from two points. Of course it means that my unit moves linear and not by curve). Then somehow correct my predicted KF result with this velocity.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Please help me with modeling Kalman Filter. And give an advice how to achieve best velocity accuracy.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="17703" LastEditorUserId="17703" LastEditDate="2017-08-01T14:15:56.070" LastActivityDate="2021-03-16T20:15:38.573" Title="Kalman filter GPS + IMU fusion get accurate velocity with low cost sensors" Tags="&lt;localization&gt;&lt;kalman-filter&gt;&lt;imu&gt;&lt;gps&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="13926" PostTypeId="1" CreationDate="2017-07-29T12:22:43.317" Score="0" ViewCount="521" Body="&lt;p&gt;I am trying to convert a laser scan into point cloud so i can use its cartesian cordintes for computer vision purpose. But when i do it it seems like the width of point cloud converted is only 1. Before this i was using kinect sensor where both height and width were not 1. i'm getting confused to use the hokuyo sensor/multisense sensor. I am using gazbo for getting the lidar scan data. To convert lidar scan into pointcloud2 data i'm using this &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;program:&#xA;#include &amp;lt;ros/ros.h&amp;gt;&#xA;#include &amp;lt;tf/transform_listener.h&amp;gt;&#xA;#include &amp;lt;laser_geometry/laser_geometry.h&amp;gt;&#xA;&#xA;class My_Filter {&#xA;     public:&#xA;        My_Filter();&#xA;        void scanCallback(const sensor_msgs::LaserScan::ConstPtr&amp;amp; scan);&#xA;     private:&#xA;        ros::NodeHandle node_;&#xA;        laser_geometry::LaserProjection projector_;&#xA;        tf::TransformListener tfListener_;&#xA;&#xA;        ros::Publisher point_cloud_publisher_;&#xA;        ros::Subscriber scan_sub_;&#xA;};&#xA;&#xA;    My_Filter::My_Filter(){&#xA;            scan_sub_ = node_.subscribe&amp;lt;sensor_msgs::LaserScan&amp;gt; (&quot;/multisense/lidar_scan&quot;, 100, &#xA;&#xA;&amp;amp;My_Filter::scanCallback, this);&#xA;            point_cloud_publisher_ = node_.advertise&amp;lt;sensor_msgs::PointCloud2&amp;gt; (&quot;/my_cloud&quot;, 100, false);&#xA;                tfListener_.setExtrapolationLimit(ros::Duration(0.1));&#xA;        }&#xA;&#xA;    void My_Filter::scanCallback(const sensor_msgs::LaserScan::ConstPtr&amp;amp; scan){&#xA;        sensor_msgs::PointCloud2 cloud;&#xA;        projector_.transformLaserScanToPointCloud(&quot;/head&quot;, *scan, cloud, tfListener_);&#xA;        point_cloud_publisher_.publish(cloud);&#xA;    }&#xA;&#xA;int main(int argc, char** argv)&#xA;{&#xA;    ros::init(argc, argv, &quot;my_filter&quot;);&#xA;&#xA;    My_Filter filter;&#xA;&#xA;    ros::spin();&#xA;&#xA;    return 0;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Here when i run this node, the height of point cloud is fine but width is only 1. and when i visualize the laser scan or pointcloud or pointcloud2 in rviz even when the lidar is rotating i can only see 2-d points as shown in below screenshot. Why is this happening. what should i do to convert it into 3d point cloud? Here all the point lies in single plane. &#xA;&lt;a href=&quot;https://i.stack.imgur.com/C85OS.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/C85OS.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerDisplayName="user14148" LastActivityDate="2017-09-28T14:42:44.493" Title="how to get h*w point cloud from laser scan not just planer" Tags="&lt;ros&gt;&lt;gazebo&gt;&lt;lidar&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="13927" PostTypeId="1" CreationDate="2017-07-29T13:14:31.540" Score="1" ViewCount="52" Body="&lt;p&gt;I have seen the methods to make a bipedal robot stand and walk keeping its center of gravity in stable mode, but how can i make the robot stand if it falls in ground? For example right now i'm using valkyrie robot in a gazebo, but the problem is once it falls in ground i've to again restart the simulator or respawn the robot. hers the screen shot of this:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/P02tt.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/P02tt.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In internet also their are methods describing ways to make a bipedal robot stable while walking and standing but no way to make it stand after its fallen state. So if anyone knows the method or algorithm or have any reference than you can tell me.&lt;/p&gt;&#xA;" OwnerDisplayName="user14148" LastActivityDate="2017-07-29T13:14:31.540" Title="how to make a robot stand after it has fallen" Tags="&lt;stability&gt;" AnswerCount="0" CommentCount="2" FavoriteCount="1" ClosedDate="2017-07-31T13:26:55.290" ContentLicense="CC BY-SA 3.0" />
  <row Id="13928" PostTypeId="1" CreationDate="2017-07-29T16:35:20.380" Score="0" ViewCount="3054" Body="&lt;p&gt;I am a beginner on Drones. I would like to understand the how each motor contribute to thrust on the whole drone. And what is the direction of torque created on each propeller. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Everywhere I find a tutorials with complex formulas. It would be great to have a simple answer about how the thrust system works on Quad rotor and the torque mechanism of it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It would be great to know how lowering the speed of one propeller causes the movement in certain direction, and also the relation of propeller motion with pitch, yaw and roll.&lt;/p&gt;&#xA;" OwnerUserId="2665" LastActivityDate="2018-04-26T19:21:06.110" Title="Thrust and Torque on Quad Rotor" Tags="&lt;quadcopter&gt;&lt;torque&gt;&lt;motion&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="13929" PostTypeId="1" AcceptedAnswerId="13934" CreationDate="2017-07-30T05:41:07.273" Score="0" ViewCount="178" Body="&lt;p&gt;I want to control a arduino based robot in real time , i am confused whether simulink real time control is a better option or Using ROS ?? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am familiar with the simulink , My application is to controlling the robot using controller with time delay .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone suggest me which way should i go ?&lt;/p&gt;&#xA;" OwnerUserId="16943" LastActivityDate="2017-07-30T13:53:10.607" Title="Robot real time control" Tags="&lt;arduino&gt;&lt;robotic-arm&gt;&lt;ros&gt;&lt;matlab&gt;&lt;real-time&gt;" AnswerCount="1" CommentCount="3" ClosedDate="2017-07-31T13:05:47.543" ContentLicense="CC BY-SA 3.0" />
  <row Id="13930" PostTypeId="1" AcceptedAnswerId="13946" CreationDate="2017-07-30T06:17:00.573" Score="4" ViewCount="1014" Body="&lt;p&gt;I am stuck at a problem of solving DH parameters for a simple test mechanism. I know that the given mechanism is a structure but just for pure academic purposes assume that it's a real system. I only want to know the correct way to solve a system with DH parameters, when there is only one active joint and more than one passive joints that depend totally on the command of the actuated joint.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-- Joints (All joints are Revolute): J1 (Actuated by some motor)&#xA;        J2 (Passive)&#xA;        J3 (Passive)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-- Links: L1,L2 (Rigid Links)&#xA;The link 1 and link 2 are not directly connected at joint J2 but there is a small link that connects link L1 with joint J2. It is not visible in top view but it allows the system to work in real life. But please just ignore it for this example!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-- The images are the top view with the z axis for each joint coming out of the paper.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-- Assuming clockwise rotation as positive for this problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://preview.ibb.co/jyfjfQ/IMG_20170730_075747.jpg&quot; alt=&quot;Page#1&quot;&gt;&#xA;![Page#1] &#xA;[edit]I realize that the transformations below are wrong and not done by following the DH convention. I should have but instead I followed the standard method. But once I apply DH coordinate axis, I should use the DH method. But this still does not change the real question in the last picture. Thank you&#xA;&lt;img src=&quot;https://preview.ibb.co/dZRCZk/IMG_20170730_080135.jpg&quot; alt=&quot;Page#2&quot;&gt;&#xA;![Page#2]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;@Chuck:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Problem: J1 is the only active joint in the system. j2 and J3 are passive joints. I want to find the kinematic equations of the system(basically, I want to find the Joint angle of J3(Pitch) as a function of Joint angle of J1). I have shown the DH coordinate axis in the first picture. I can only measure J1 angle with an encoder but J2 and J3 are passive, so I have to find their relation with J1 to get their value for the transformation matrix. Since the choice of first joints x axis is arbitrary in DH method, I chose x0 axis parallel to link L2 and then found theta2 as a function of theta1. I want to know, is this the correct way to find the passive joints angle as a function of an active joint?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If my solution of joint paramter Theta2 = 180 - Theta1 is not correct, then how would you find the joint parameter Theta2 as a function of Theta1, since you can not measure Theta2(for it is passive), you can only find Theta2 mathematically and its very important to find Theta2 to get the transformation matrix from J3 coordinate system to J1 coordinate system(The goal)... &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I expect the system to move like this when the Joint 1 motor is actuated in clockwise direction&#xA;&lt;img src=&quot;https://i.imgur.com/wbe0g2F.jpg&quot; alt=&quot;Page#3&quot;&gt;&#xA;![Page#3]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hey chuck, As the following sketch shows, the motor housing is fixed on the box, it rotates with the same angle as the box about joint J4. The blue dot in the previous image is the motor axis of rotation which I called J1 because it links the motor shaft with the link L12. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the motor shaft is rotated anti-clockwise by an angle Pfi, it makes the whole box move with it but not with the same angle. I have to find the box rotation about joint J4 as a result of this rotation of motor shaft about J1 by Phi..&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you explained, I can solve the 4 bar mechanism but how can this motors angle of rotation be related to the 4 bar mechasim's four angles Theta12,Theta23,Theta34 and Theta41 ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/6OzCjmK.jpg&quot; alt=&quot;Page#4&quot;&gt;&#xA;![Page#4]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After anti clockwise rotation..&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/cRMNB7W.jpg&quot; alt=&quot;Page#5&quot;&gt;&#xA;![Page#5]&lt;/p&gt;&#xA;" OwnerUserId="17554" LastEditorUserId="17554" LastEditDate="2017-08-03T21:35:42.813" LastActivityDate="2017-08-03T21:35:42.813" Title="DH parameters solution for forward kinematics" Tags="&lt;dh-parameters&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="13931" PostTypeId="1" CreationDate="2017-07-30T09:25:40.703" Score="2" ViewCount="98" Body="&lt;p&gt;What is the dimension of the Jacobian of a robot with 9 actuators and 6 degrees of&#xA;freedom? 6 x 9 is my guess but not sure. Can someone please explain ?&lt;/p&gt;&#xA;" OwnerUserId="17716" LastActivityDate="2017-07-30T15:20:31.597" Title="Jacobian of a Robot" Tags="&lt;jacobian&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="13932" PostTypeId="1" CreationDate="2017-07-30T09:46:20.150" Score="4" ViewCount="118" Body="&lt;p&gt;I am trying to solve for the Forward kinematics of a spatial parallel manipulator. Its loop closure (LC) equations are pretty long, and are being solved using numerical methods. As I am adding more links to my manipulator, loop closure equations are becoming bigger and more difficult for the numerical method to handle. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It just struck me then. In a CAD program, when I create an assembly of a manipulator and make its links move by dragging the links using mouse, CAD program is instantly solving forward kinematics of that manipulator. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How come the CAD programs respond so fast? Are they solving LC equations all the time? Even if I add more links to my manipulator in CAD program, it has no difference/delay in response!! &lt;/p&gt;&#xA;" OwnerUserId="7676" LastActivityDate="2020-12-05T09:35:10.083" Title="How do CAD programs solve for Inverse/Forward Kinematics problem in Assembly?" Tags="&lt;kinematics&gt;&lt;inverse-kinematics&gt;&lt;forward-kinematics&gt;&lt;visualization&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="13933" PostTypeId="2" ParentId="12717" CreationDate="2017-07-30T13:43:59.993" Score="2" Body="&lt;p&gt;The branch of science that is binding vision and control is called visual servoying. You can find visp written in cpp or matlab implementations. Check also if visp is having a matlab bridge/api. If you have a professional robot (not a diy one ) i think ROS + visp will be a good start.&lt;/p&gt;&#xA;" OwnerUserId="17718" LastActivityDate="2017-07-30T13:43:59.993" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="13934" PostTypeId="2" ParentId="13929" CreationDate="2017-07-30T13:53:10.607" Score="0" Body="&lt;p&gt;ROS is not offering real time(RT) control by default. Specially ROS 1.0, ROS 2.0 is still under development. Though there are many hacky/tweaky ways to let ROS perform in soft RT. I wouldn't recommend it unless you have some maturity in ROS. &lt;/p&gt;&#xA;" OwnerUserId="17718" LastActivityDate="2017-07-30T13:53:10.607" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="13935" PostTypeId="2" ParentId="13931" CreationDate="2017-07-30T15:20:31.597" Score="3" Body="&lt;p&gt;Yes, 6x9.   Since $$\dot{x} = J \dot{\theta}$$ each column of the Jacobian represents the differential change in one of the six $x$ coordinates with respect to each of the joints.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2017-07-30T15:20:31.597" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="13937" PostTypeId="1" CreationDate="2017-07-30T20:20:25.997" Score="1" ViewCount="200" Body="&lt;p&gt;I am working on a project &quot;ROS enabled Quadcopter&quot;, and am using hector_quadrotor package. But I am facing problems in Flight controller. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My world and quadcopter is running in gazebo but I don't know how to fly a quadcopter. There are many controller packages inside hector_quadrotor package.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Moreover, I want to run the same on real quadcopter with raspberry pi.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyone who can help me and send me some reference material. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank You in advance.&lt;/p&gt;&#xA;" OwnerUserId="17720" LastActivityDate="2017-07-30T20:20:25.997" Title="How to make ROS enabled Quadrotor with raspberry pi?" Tags="&lt;quadcopter&gt;&lt;ros&gt;&lt;raspberry-pi&gt;&lt;simulation&gt;&lt;gazebo&gt;" AnswerCount="0" CommentCount="2" FavoriteCount="1" ClosedDate="2017-07-31T12:52:56.770" ContentLicense="CC BY-SA 3.0" />
  <row Id="13938" PostTypeId="2" ParentId="12747" CreationDate="2017-07-30T21:18:42.107" Score="1" Body="&lt;p&gt;I opened up the quadcopter and Identified the chips it uses&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.icbase.com/File/PDF/NUV/NUV00161201.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mini54 microcontroller&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.invensense.com/products/motion-tracking/6-axis/mpu-6050/&quot; rel=&quot;nofollow noreferrer&quot;&gt;MPU-6050 Motion Tracking Device&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.inhaos.com/uploadfile/otherpic/BK2423%20Datasheet%20v2.0.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;BK2423 2.4 GHz Transceiver&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Based on this, I found the NRF24L01 which appeared to be compatible which I purchased on eBay for a whopping $0.67US&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After a bit of time and part in hand I hooked it up to an Arduino and I was able to control a servo using my inexpensive wireless controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/PRkPN.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/PRkPN.jpg&quot; alt=&quot;My Setup&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;SUCCESS!!&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you would like more information, Up Vote this and add a comment.&lt;/p&gt;&#xA;" OwnerUserId="462" LastEditorUserId="462" LastEditDate="2017-07-30T21:31:52.580" LastActivityDate="2017-07-30T21:31:52.580" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="13940" PostTypeId="2" ParentId="12876" CreationDate="2017-07-31T10:34:52.130" Score="1" Body="&lt;p&gt;It turns out this can easily be done with OpenCV - just find image features (FAST etc.) in first image, track them to the second image (get a set of corresponding features between two images) and then use triangulatePoints function to get the 3D scene.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;triangulatePoints accepts two projection matrices - one for each image. Each projection matrix defines camera intrinsic (focal + principal point) and extrinsic (rotation + translation) parameters. Intrinsics will be the same for both images, first image may have R+t all zero (coordinates origin) so just use R+t for your second image (compared back to zero).&lt;/p&gt;&#xA;" OwnerUserId="1021" LastEditorUserId="1021" LastEditDate="2017-07-31T12:50:03.550" LastActivityDate="2017-07-31T12:50:03.550" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="13941" PostTypeId="1" CreationDate="2017-07-31T15:09:33.383" Score="0" ViewCount="509" Body="&lt;p&gt;Consider the following Arm:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;https://www.bcn3dtechnologies.com/en/bcn3d-moveo-the-future-of-learning/&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I looked for the DH-Parameters of this arm and I found this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;https://github.com/BCN3D/BCN3D-Moveo/issues/15&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/rZbRf.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rZbRf.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although I don't think that this is correct because I think that the first Alpha should not be 0.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S: A clear photo of the arm:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/9xZm6.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9xZm6.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="17724" LastActivityDate="2018-02-09T08:07:45.183" Title="DH- Parameters of BCN3D Arm" Tags="&lt;kinematics&gt;&lt;dh-parameters&gt;&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="13946" PostTypeId="2" ParentId="13930" CreationDate="2017-08-01T02:36:37.703" Score="3" Body="&lt;p&gt;Ah ha! From my comment earlier - &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If it's kinematics, then none of the joints are a function of any of the other joints. The only exception is if you had a kinematic loop, like a four bar mechanism, or a rocker, or a crank.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;What you have is a &lt;a href=&quot;https://en.wikipedia.org/wiki/Four-bar_linkage#Design_of_four_bar_mechanisms&quot; rel=&quot;nofollow noreferrer&quot;&gt;four bar mechanism&lt;/a&gt;, and it has probably been giving you trouble because:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;It's just a hard problem to begin with, and&lt;/li&gt;&#xA;&lt;li&gt;You haven't been drawing the complete diagram for your analysis. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;There are four links (or &quot;bars&quot;) and they form a kinematic loop. Two are obvious, one is a little less obvious, and the last one is disguised. Your links are:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The link from J1 to J2,&lt;/li&gt;&#xA;&lt;li&gt;The link from J2 to J3,&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;those you already have and have been giving for the problem statement, BUT you also have:&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;3&quot;&gt;&#xA;&lt;li&gt;The wall, which acts as a link between J3 and J4, and&lt;/li&gt;&#xA;&lt;li&gt;The box itself, which acts as a link between J4 and J1.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;You can see that the links go J1 -&gt; J2 -&gt; J3 -&gt; J4 -&gt; J1, and so they form the loop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm on mobile for the rest of the night, so it'll be tomorrow before I can give a fuller answer (at the earliest), but you should look up the &quot;Freudenstein equation&quot; as a starting point for the solution. Springer has a decent paper on it, but you have to pay for it, of course. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The gist is to label all of your angles, theta 1 through 4, and then to work your way top to bottom using and terms like &lt;code&gt;L1 sin(theta1) + ... + L4 sin(theta4) = 0&lt;/code&gt; and similarly with cosine from left to right. The key concept here is that you're forming a closed LOOP, so you &lt;strong&gt;must&lt;/strong&gt; end where you started when you add together all the vertical (or horizontal) components of each link. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The biggest pain there is to be really consistent with your notation, but that's true of all engineering, isn't it? You may find that the vertical component of a link might involve a cosine term, and vice versa, depending on how you defined the datums (data) and positive conventions, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'll draw a picture later, but hopefully that's enough to get you started. &lt;/p&gt;&#xA;&#xA;&lt;h2&gt;:EDIT:&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Okay, some drawings to go with the answer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, re-draw the problem with all the links. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/OaRZz.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OaRZz.jpg&quot; alt=&quot;Step 1&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, &lt;strong&gt;be consistent&lt;/strong&gt; with notation. In my method of solving, I assume +y is up and +x is to the right. Then I use the right hand rule that the angle should be positive in a counter-clockwise direction (right hand rotation about +z axis, which points &quot;up out of the page.&quot;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/n593R.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/n593R.png&quot; alt=&quot;Step 2&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the picture above, you can make a couple equations. First, combine all of the vertical components of the linkages:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;L_{12}\sin{\theta_{12}} + L_{23}\sin{\theta_{23}} + L_{34}\sin{\theta_{34}} + L_{41}\sin{\theta_{41}} = 0 \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, do the same for the horizontal components: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;L_{12}\cos{\theta_{12}} + L_{23}\cos{\theta_{23}} + L_{34}\cos{\theta_{34}} + L_{41}\cos{\theta_{41}} = 0 \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, two equations and two unknowns - you need at least one more. For that, look at the interior angles. To do that, try to &quot;rephrase&quot; the interior angles in terms of the angles as already defined.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, use the alternate interior angles: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/C216L.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/C216L.png&quot; alt=&quot;Step 3&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, &quot;clip&quot; the other angles in preparation for using THEIR alternate interior angles:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/4zZsC.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4zZsC.png&quot; alt=&quot;Step 4&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now you have a good setup to getting the interior angles:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Eglh9.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Eglh9.png&quot; alt=&quot;Step 5&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/uJotL.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/uJotL.png&quot; alt=&quot;Step 6&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And now, finally, you get the formulas for the interior angles:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{array}{ccc}&#xA;\theta_{{J_1}_{\mbox{interior}}} &amp;amp; = &amp;amp; \theta_{12} - \left(\theta_{41} - \pi \right) \\&#xA;\theta_{{J_2}_{\mbox{interior}}} &amp;amp; = &amp;amp; \left(\theta_{23} - \pi \right) - \theta_{12} \\&#xA;\theta_{{J_3}_{\mbox{interior}}} &amp;amp; = &amp;amp; \left(\theta_{23} - \pi \right) - \theta_{34}\\&#xA;\theta_{{J_4}_{\mbox{interior}}} &amp;amp; = &amp;amp; \left(\theta_{41} - \pi \right) - \theta_{34}\\&#xA;\end{array}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The last step now is to recognize that the sum of interior angles, $\theta_{J_1} ... \theta_{J_4}$ is 360 degrees, or $2\pi$:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\theta_{J_1} + \theta_{J_2} + \theta_{J_3} + \theta_{J_4} = 2\pi \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This now gives you three equations and four unknowns, which means you can now express any one of the angles $\theta_{J_2} .. \theta_{J_4}$ in terms of the actuated joint $\theta_{J_1}$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;NOTE THAT&lt;/strong&gt; my expression for $\theta_{J_1}$, or $\theta_{41}$, is &lt;em&gt;not&lt;/em&gt; the same as your $\theta_1$ and is not necessarily the same as the DH representation for the joint either. You'll have to re-express the joint angles (again), but hopefully I've outlined the process for you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Final note - you might not be able to get a &quot;clean&quot; solution to this set of equations because they are nonlinear (thanks, trig -.-). You are likely to need a numeric solver to get the answer for the joint angles. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2017-08-01T14:35:19.697" LastActivityDate="2017-08-01T14:35:19.697" CommentCount="13" ContentLicense="CC BY-SA 3.0" />
  <row Id="13947" PostTypeId="1" AcceptedAnswerId="13952" CreationDate="2017-08-01T03:38:38.233" Score="0" ViewCount="867" Body="&lt;p&gt;I wonder how to generate double s-curve velocity profile for multiple DOF trajectory. Since there are constraints on initial and final velocities which can be non-zero it is necessary to synchronize each DOF in time. Therefore firstly I would like to compute trajectory for DOF with the largest displacement and then trying to fit other DOFs in the computed execution time for the former. However I was not able to find anything about generating s-curve profile with given time. Having tried to solve it by myself I came up with a conviction that it is an optimization problem. I tried several approaches but they all seemed to have non-convex cost function and hardly could they satisfy constraints on final velocity. Having spent much time I wondered if there is an easy way to synchronize them?&lt;/p&gt;&#xA;" OwnerUserId="15392" LastEditorUserId="15392" LastEditDate="2017-08-01T10:46:51.327" LastActivityDate="2017-08-01T16:02:42.880" Title="Generating double s-curve velocity profiles with given time" Tags="&lt;control&gt;&lt;motion-planning&gt;&lt;algorithm&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="13948" PostTypeId="1" CreationDate="2017-08-01T04:56:32.963" Score="3" ViewCount="432" Body="&lt;p&gt;Consider a multibody robotic system with Lagrangian $ L = \dot{q}^{T}M\dot{q} + V $ and equations of motion of the form&#xA;$$M(q)\ddot{q}+C(q,\dot{q})\dot{q}+A^{T}(q)\lambda+N(q)=0 $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $N=\frac{\partial V(q)}{\partial q}$  and $\lambda$ represents the Lagrange multipliers for the constraint forces (MLS pg. 269; pg. 287 in pdf). $A$ is the constraint matrix from the Pfaffian form $A\dot{q}=0$. We are concerned with &lt;strong&gt;holonomic&lt;/strong&gt; constraints, which can be differentiated to obtain the Pfaffian form.&#xA;$ C=\sum_{k=1}^{n} \Gamma_{ijk}  \dot{q_{k}} $ where $\Gamma_{ijk}$ are the Christoffel symbols of the first kind.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Lagrange multipliers can be calculated using the formula (MLS pg. 270, pg. 288 in pdf)&#xA;$$\lambda =-(AM^{-1}A^{T})^{-1}AM^{-1}(C\dot{q}-N)$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This gives the holonomic constraint forces $A^{T}\lambda$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;I would like to see some examples of this method for calculating the holonomic constraint forces for planar systems.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have seen this method being applied to calculate the tension in a simple pendulum (MLS pg. 270, pg. 288 in pdf), but I would like to see examples of &lt;strong&gt;planar&lt;/strong&gt; systems with more degrees of freedom. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm specifically interested in the case of a 2R manipulator shown below.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/fQMXv.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fQMXv.png&quot; alt=&quot;Planar 2R manipulator&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The equations of motion are on pg. 164-165 (pg. 182-183 in the pdf) in MLS. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My objectives are:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Apply the holonomic constraint $\theta_{1}(t)=0$ and obtain the holonomic constraint force.&lt;/li&gt;&#xA;&lt;li&gt;Show that we get the dynamics of a simple pendulum for the&#xA;constrained system for initial conditions $\theta_{2}(0)=0, \dot{\theta_{2}}(0)=0$.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I have done the calculation for the constraint $\theta_{1}(t)=0$ but I'm not able to show 2. The expression I get for $\lambda$ is &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\lambda=&#xA;\begin{array}{c}&#xA; \frac{g (d \text{m2} \text{r2} (\sin  \text{t2})-\text{m2} \text{r2} (\cos  \text{t2}) ((\cos  \text{t2}) b+d))+b d (\sin  \text{t2}) \dot{\text{t2}} \dot{\text{t2}}}{d} \\&#xA;\end{array}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $(t1, t2)=(\theta_{1},\theta_{2})$ and $a, b, d$ are the geometric and inertial parameters $\alpha, \beta, \delta$ described in MLS (pg. 165; pg. 183 in the pdf).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Suggestions for other methods to calculate holonomic constraint forces would be helpful too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;References:&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MLS refers to &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Murray, R. M., Li, Z., Sastry, S. S., &amp;amp; Sastry, S. S. (1994). &lt;a href=&quot;http://www.cds.caltech.edu/~murray/books/MLS/pdf/mls94-complete.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;A&#xA;  mathematical introduction to robotic manipulation&lt;/a&gt;. CRC press.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="16132" LastEditorUserId="16132" LastEditDate="2017-08-01T15:26:39.580" LastActivityDate="2017-08-01T15:26:39.580" Title="Holonomic constraint forces using Lagrange multipliers" Tags="&lt;robotic-arm&gt;&lt;dynamics&gt;" AnswerCount="0" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="13949" PostTypeId="1" CreationDate="2017-08-01T07:46:33.343" Score="2" ViewCount="134" Body="&lt;p&gt;my question is about localizing points in 2D space. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know exact position (x,y,alpha) of my robot in some room. In room there are two points of unknow location.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Robot can find angle between he and two points in room. Also robot can move on room, and find more angles between this two points and his.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How to solve this problem, when I want to discover the position of this two points in room? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can move robot where it's needed, but what should I do to discover this positions?? &lt;/p&gt;&#xA;" OwnerUserId="17736" LastActivityDate="2017-08-01T18:02:35.483" Title="Localizing two points using self position and angle between this points" Tags="&lt;mobile-robot&gt;&lt;localization&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="13950" PostTypeId="2" ParentId="13947" CreationDate="2017-08-01T10:28:51.040" Score="1" Body="&lt;p&gt;Yes, this is indeed a difficult non-convex optimization problem. But if, say, second-order polynomial (parabolic) trajectories work for you, then there are some heuristics that you might want to look into.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For parabolic trajectories, the procedure for computing the time-optimal (1D) trajectory exists (see e.g., &lt;a href=&quot;https://pdfs.semanticscholar.org/c468/4d698ce0ba92706f5b70fdab9e09c1caa834.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this paper&lt;/a&gt;). So first you can compute 1D velocity profiles for all DOFs and see which DOF takes the most time. Suppose DOF $i$ takes time $T$ to reach its destination, you need to synchronize other DOFs with time $t =T$, because DOF $i$ cannot go any faster.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then the next step is kind of &lt;em&gt;velocity profile stretching&lt;/em&gt;, &lt;em&gt;i.e.&lt;/em&gt;, for each DOF $j \neq i$ we stretch the velocity profile such that it has duration $t$ as specified earlier. For this steps, many heuristics can be used. One of them is described in the paper I mentioned above (this method is somewhat constrained due to some assumptions made in the paper). Another one is implemented in OpenRAVE, see &lt;a href=&quot;https://github.com/rdiankov/openrave/blob/production/plugins/rplanners/rampoptimizer/interpolator.cpp&quot; rel=&quot;nofollow noreferrer&quot;&gt;this file&lt;/a&gt; (the detail of the method implemented was given alongside of the code, this method is less constrained than the first).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that given a duration $t$ to synchronize a trajectory with, the problem is &lt;em&gt;not&lt;/em&gt; always feasible due to &lt;em&gt;inoperative time interval&lt;/em&gt; (&lt;a href=&quot;https://pdfs.semanticscholar.org/4d1c/e503a7fcbdde42e40fcc6fd70851b860f228.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this paper&lt;/a&gt; mentioned this topic a bit). Basically, due to velocity and acceleration limits of the robot joints, given a set of boundary conditions (such as initial and final velocities), there might exists some time interval $\tau = [t_0, t_1]$ such that there exists no trajectory which satisfies the boundary conditions &lt;strong&gt;and&lt;/strong&gt; has a duration $t \in \tau$.&lt;/p&gt;&#xA;" OwnerUserId="7610" LastActivityDate="2017-08-01T10:28:51.040" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="13951" PostTypeId="2" ParentId="13949" CreationDate="2017-08-01T14:07:05.090" Score="0" Body="&lt;p&gt;I assume that (x,y,alpha) represents the pose of the robot with (x,y) as the origin of the robot frame with respect to the reference frame in the corner (image shown below). And alpha is the angle of the vector connecting the origin of our reference frame to the origin of robot frame (you could also call it rotation around Z axis pointing out of the screen). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example in this diagram, the &lt;code&gt;alpha&lt;/code&gt; angle is zero:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/0YBoe.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0YBoe.png&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if you now look closely to the figure, you find what I think is the solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The angle $\alpha$ shown in the figure is the angle between the robot and the unknown point in the reference XY plane. If you go from position 1 to position 2 where the angle $\alpha$ stays constant or ($180+\alpha$) and go to position 3 &amp;amp; 4 where you know a second angle, you can calculate the position of the point.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The point lies on the cross of the two lines connecting 1 to 2 and 3 to 4. But you have to be sure you cross the unknown point.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the meantime while writing this, I have a second solution:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;You move in the +X direction. &lt;/li&gt;&#xA;&lt;li&gt;If angle is increasing, once you are at 90 $\deg$, the robot has the same $y$ value as the point.&lt;/li&gt;&#xA;&lt;li&gt;If it's constant you have the $y$ already.&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If it decreases you are going in the wrong direction and have to go -X direction.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Then you repeat the same for the +Y motion.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="16104" LastActivityDate="2017-08-01T14:07:05.090" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="13952" PostTypeId="2" ParentId="13947" CreationDate="2017-08-01T16:02:42.880" Score="0" Body="&lt;p&gt;I have found a solution. Quiet simple actually. To generate minimum time double s-curve profile I used algorithm presented in &lt;a href=&quot;http://www.springer.com/us/book/9783540856283&quot; rel=&quot;nofollow noreferrer&quot;&gt;this wonderful book&lt;/a&gt;. After computing trajectory for the first DOF I perform the same algorithm for the other DOFs but if trajectory is infeasible with given time, it is appeared to be a good idea to make maximum possible acceleration smaller and smaller with some factor(I use 0.95) which leads to longer trajectory execution. Moreover we can do the same with maximum velocity and jerk constraints which will make more trajectories to be feasible. However this will take significantly more time and since all my tests passed with only decreasing acceleration I am satisfied.&lt;/p&gt;&#xA;" OwnerUserId="15392" LastActivityDate="2017-08-01T16:02:42.880" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="13953" PostTypeId="2" ParentId="13949" CreationDate="2017-08-01T18:02:35.483" Score="1" Body="&lt;p&gt;I don't have the time at the moment to post a full answer with every step shown, but consider the following diagram:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/IUOXq.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/IUOXq.png&quot; alt=&quot;Triangulation Diagram&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Your robot starts at origin 1, &lt;span class=&quot;math-container&quot;&gt;$O_1$&lt;/span&gt;, and moves some distance &lt;span class=&quot;math-container&quot;&gt;$d$&lt;/span&gt; to get to the second origin, &lt;span class=&quot;math-container&quot;&gt;$O_2$&lt;/span&gt;. Each origin has its own &lt;span class=&quot;math-container&quot;&gt;$&amp;lt;x,y&amp;gt;$&lt;/span&gt; coordinate.&lt;/p&gt;&#xA;&lt;p&gt;You can measure the angle to point 1, &lt;span class=&quot;math-container&quot;&gt;$a_1$&lt;/span&gt;, at the first origin. When you re-measure a new angle, &lt;span class=&quot;math-container&quot;&gt;$a_2$&lt;/span&gt;, at the second origin, you can find the second interior angle of the triangle &lt;span class=&quot;math-container&quot;&gt;$O_1$&lt;/span&gt; &lt;span class=&quot;math-container&quot;&gt;$\mbox{pt}_1$&lt;/span&gt; &lt;span class=&quot;math-container&quot;&gt;$O_2$&lt;/span&gt; as &lt;span class=&quot;math-container&quot;&gt;$\pi-a_2$&lt;/span&gt;. Now, with two angles and a side, you can use the &lt;a href=&quot;https://en.wikipedia.org/wiki/Law_of_sines&quot; rel=&quot;nofollow noreferrer&quot;&gt;law of sines&lt;/a&gt; to calculate the distance from &lt;span class=&quot;math-container&quot;&gt;$O_1$&lt;/span&gt; to &lt;span class=&quot;math-container&quot;&gt;$\mbox{pt}_1$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$r_{a_1}$&lt;/span&gt;, and the distance from &lt;span class=&quot;math-container&quot;&gt;$O_2$&lt;/span&gt; to &lt;span class=&quot;math-container&quot;&gt;$\mbox{pt}_1$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$r_{a_2}$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;You can imagine this as the intersection of two circles now:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/HZxci.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HZxci.png&quot; alt=&quot;Triangulation 2&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;And, indeed, you can solve the problem with the formula for &lt;a href=&quot;http://mathworld.wolfram.com/Circle-CircleIntersection.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;the intersection of two circles&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;There are two intersections shown in the image above, and the circle intersection formula will also give two answers, but &lt;strong&gt;only one&lt;/strong&gt; will correspond with the angles you found.&lt;/p&gt;&#xA;&lt;p&gt;Please give this method a try. If you find you have more questions, please start a new question and link this one in the post.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2017-08-01T18:02:35.483" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="13955" PostTypeId="1" AcceptedAnswerId="14002" CreationDate="2017-08-02T20:07:36.637" Score="3" ViewCount="164" Body="&lt;p&gt;I am working on writing code for a coordinated multi-robot rapidly exploring random tree (RRT) based planner, which would naturally involve a lot of sampling, nearest neighbor searching and 'radius' searching. Because this is a coordinated/cooperative planning step, all robots' paths are incrementally created in every iteration until all robots reach their respective goals, and the planner needs all the robots' positions during the planning phase.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a basic framework for this working in MATLAB, which was only a proof of concept and not really efficient: but I am not sure what the best way to program it in, say, C++ would be. Normally for an RRT, I would go for a KD tree implementation, but in a multi-robot point of view, the environment would be a joint configuration space and this would mean a pseudo-high-dimensional KD tree: which is not actually high dimensional, but just needs to perform nearest neighbor searches in a space that combines the states (x,y,z, yaw) of all the robots - over and over again during the planning phase. The metric is simple enough, as it is just Euclidean distance, but I don't know if using KD trees for this will be computationally efficient. I'm looking for some suggestions on how to describe the configuration space for an efficient multi-robot RRT (I am thinking of a maximum of five robots) with a state dimension of 4. &lt;/p&gt;&#xA;" OwnerUserId="10310" LastEditorUserId="10310" LastEditDate="2017-08-02T20:33:22.693" LastActivityDate="2017-08-13T17:55:28.583" Title="Computationally efficient way to represent joint C space for a multi-robot RRT" Tags="&lt;algorithm&gt;&lt;c++&gt;&lt;path-planning&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="13956" PostTypeId="2" ParentId="12880" CreationDate="2017-08-02T20:31:34.243" Score="1" Body="&lt;p&gt;I am not exactly sure what the question is, (maybe you are confused on terminology), but I will take a shot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Forward Kinematics&lt;/em&gt; (FK) defines the transform between a robot's joint space (aka configuration space) and its end-effector's task space (aka operational space).  While &lt;em&gt;Inverse Kinematics&lt;/em&gt; (IK) defines the opposite; the transform from task space to joint space.  A robot's workspace is simply the volume of space that the end-effector can reach.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For serial-link arms (aka open kinematic chain), &quot;regular&quot; robot arms, computing the FK gets more complicated as you add degrees of freedom, but is still relatively straight-forward.  There are closed-form solutions for IK for certain arm styles and DoF, but is more complicated in general.  Typically this is done numerically for larger DoF.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2017-08-02T20:31:34.243" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="13957" PostTypeId="1" AcceptedAnswerId="14600" CreationDate="2017-08-02T22:07:50.917" Score="1" ViewCount="1159" Body="&lt;p&gt;We got a IROBOT Roomba 960 for our new apartment. The apartment has however in one door frame there's a step of about 26mm (roughly 1 inch).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What's the best way for the Roomba to overcome this obstacle. I was thinking about building a small ramp. Is there a better/easier way to achieve this (except for lifting it manually to the other room)? If not, what angle should I use for the ramp, that the Roomba will be able to climb it on it's own?&lt;/p&gt;&#xA;" OwnerUserId="17017" LastActivityDate="2018-10-08T20:00:29.080" Title="Best way for IROBOT Roomba 960 to &quot;climb&quot; 26mm step" Tags="&lt;roomba&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="13959" PostTypeId="1" CreationDate="2017-08-03T15:02:04.583" Score="1" ViewCount="891" Body="&lt;p&gt;I am trying to implement FastSLAM 1.0 and I am using sensory and control data acquired from Pepper via ROS to evaluate my implementation. However I am having major issues when I try and control Pepper's movement via ROS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am using Ubuntu 16.04 and ROS kinetic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I set up my NAOqi bridging using the NAOqi driver command&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ roslaunch naoqi_driver naoqi_driver.launch nao_ip:=&amp;lt;MY_ROBOT_IP&amp;gt; roscore_ip:=localhost network_interface:=wlp1s0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(I was originally using the pepper_bringup package to set up the brigde, however ran into errors stating I had not set up the PYTHONPATH to the NAOqi API properly&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ roslaunch pepper_bringup pepper_full_py.launch nao_ip:=&amp;lt;yourRobotIP&amp;gt; roscore_ip:=&amp;lt;roscore_ip&amp;gt;)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I then run RViz, having sourced my setup.bash&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ rosrun rviz rviz&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I then find and load pre-configured RViz configuration in my catkin workspace into RViz&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;src/pepper_robot/pepper_description/config/pepper.rviz&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;From there I am able to see Pepper in RViz along with the camera images and sonar .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then I set up moveit so I can control Pepper with the commands&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ export NAO_IP=&amp;lt;YOUR_ROBOT_IP&amp;gt;&#xA;&#xA;$ roslaunch pepper_dcm_bringup pepper_bringup.launch&#xA;&#xA;$ roslaunch pepper_moveit_config moveit_planner.launch&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This starts the Moveit RViz GUI where I start my planning of the route I want Pepper to execute, following &lt;a href=&quot;https://github.com/ros-naoqi/pepper_moveit_config&quot; rel=&quot;nofollow noreferrer&quot;&gt;this documentation&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However whenever I execute it, it always fails and the error message I get from the terminal says that it cannot access any controls, (I thought I had a screen shot saved of the message, however I don't, but will be working on Pepper again tomorrow, so can acquire one then)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Has anyone got experience controlling Pepper using ROS and Moveit and may have had similar issues which they managed to resolve?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Otherwise has anyone any tips on how to control Pepper through other means? I have found documentation on ways to control it with a joystick, again if anyone has tried this and been successful, I would be grateful for some advise on how they managed to get it working.&lt;/p&gt;&#xA;" OwnerUserId="17434" LastEditorUserId="37" LastEditDate="2018-03-08T11:20:14.550" LastActivityDate="2020-08-05T07:39:00.107" Title="Controlling Pepper using ROS" Tags="&lt;ros&gt;&lt;navigation&gt;&lt;pepper&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="13963" PostTypeId="2" ParentId="12880" CreationDate="2017-08-04T10:07:53.727" Score="1" Body="&lt;p&gt;Let's start from the definition. (Well, there are actually a few possible definitions depending on the system but let's talk about a basic one first.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A configuration $q$ is a vector of robot joint values. So as in your case, a configuration is a 3D vector. The configuration space $\mathcal{C}$ is then the space of those configurations, i.e., $\mathcal{C} = \mathbf{R}^{3}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are two types of configurations in $\mathcal{C}$, those that are in collision and those that are collision-free (i.e., not colliding with itself or any environment). To &lt;em&gt;construct&lt;/em&gt; a configuration space is then equivalent to creating a map of $\mathcal{C}$ which shows collision region (obstacles). To explicitly do that, you need to &lt;em&gt;discretize&lt;/em&gt; $\mathcal{C}$ then test at each discretized configuration if it is collision-free. For example, suppose all of your three joints can move from $-180^\circ$ to $180^\circ$ with discretization resolution of $1^\circ$, you then have a grid of the size $361^3$. This means you need to test all of $361^3$ (almost 50 million) points to explicitly construct the collision regions and hence the map of $\mathcal{C}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This process is the same for more DOFs as well. And having more links means that your configuration space will be of higher dimension. We cannot tell anything much about the obstacle regions in the configuration space since their geometries will generally be very complex.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can see from above that even constructing the map of $\mathcal{C}$ of dimension $3$ is a very computationally expensive process. Therefore, people generally &lt;em&gt;do not&lt;/em&gt; construct explicitly the configuration space. For example, in motion planning, using a sampling-based planner together with a collision detection module can efficiently substitute the construction of the full map of $\mathcal{C}$.&lt;/p&gt;&#xA;" OwnerUserId="7610" LastActivityDate="2017-08-04T10:07:53.727" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="13966" PostTypeId="2" ParentId="12249" CreationDate="2017-08-04T23:12:28.080" Score="1" Body="&lt;p&gt;In general, robotic arm is more mechanical than electrical. Manufacturers would use power law to increase vibration stress to accelerate life of their products. They will pick several product, estimate mean life and predict reliability and life of the model. It is called accelerated life test and can be used for failure analysis and life predict. Highly accelerated life testing (HALT) also accelerates life of product, but it cannot predict life range of tested unit. It is widely used to cause failures and thus improve design by exposing weakness of product.&lt;/p&gt;&#xA;" OwnerUserId="17762" LastActivityDate="2017-08-04T23:12:28.080" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="13967" PostTypeId="1" CreationDate="2017-08-05T08:05:15.007" Score="0" ViewCount="404" Body="&lt;p&gt;I am trying to make my First Quadcopter but having problem with cc3d connection, The CC3D cable seems extremely complicated. I would have figured the pin out would have started with a red/black/white for the power/ground/signal for the first port of the receiver but the colors are all weird. They are in order:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Black&#xA;Red&#xA;Blue&#xA;Yellow&#xA;White&#xA;Green&#xA;Blue&#xA;Yellow&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The duplicate colors and the white in the middle is throwing me off. I've searched openpilot.org but can't seem to find a wiring diagram or a pin out diagram to tell whats what. Just wondering if someone can help me out. How should I connect these in Flysky FS-i6 Receiver?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;cable sequence is below&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/4wOv7.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4wOv7.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="14713" LastActivityDate="2017-08-07T13:14:17.387" Title="CC3D connector cable connection with receiver" Tags="&lt;quadcopter&gt;&lt;radio-control&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="13968" PostTypeId="2" ParentId="12108" CreationDate="2017-08-05T10:44:15.313" Score="0" Body="&lt;p&gt;It's important to know how much mAh (miliAmperes per hour) is capable your power bank. And also, specially for DC motors to know peak current that could provide too.&lt;/p&gt;&#xA;" OwnerUserId="17766" LastActivityDate="2017-08-05T10:44:15.313" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="13969" PostTypeId="1" CreationDate="2017-08-05T14:10:08.977" Score="1" ViewCount="81" Body="&lt;p&gt;At 11:13 or 2:22 &lt;a href=&quot;https://www.youtube.com/watch?v=wrkiylHe3QY&quot; rel=&quot;nofollow noreferrer&quot;&gt;of this video&lt;/a&gt; or 0:09 &lt;a href=&quot;https://www.youtube.com/watch?v=j0JF97Y7aH4&quot; rel=&quot;nofollow noreferrer&quot;&gt;of this second video&lt;/a&gt; the drone itself is on flat surface but the flight controller itself must have been placed in tilted position (not intentionally) on frame a little so the Pitch and Roll angles are not perfectly 0 degrees. When the PID makes corrections to make FC  at 0 degree level for hovering over, the drone itself will be tilted so the drone will go in x or y direction. Should we mount FC with this manner to the drone's frame (in a way we read exactly 0 degrees) or are we making correction to these things during flyting with remote controller to make it stable. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or is there a code trick in flight controller like taking the start angles as flat degrees so -2 for example is flat level for it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope i am clear. Any help is appriciated.&lt;/p&gt;&#xA;" OwnerUserId="17721" LastEditorUserId="17721" LastEditDate="2017-08-05T14:15:42.417" LastActivityDate="2017-08-06T05:54:27.750" Title="Quadcopter Flat Surface Roll Pitch angle not 0 Degree" Tags="&lt;quadcopter&gt;&lt;pid&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="13971" PostTypeId="2" ParentId="13969" CreationDate="2017-08-06T05:54:27.750" Score="2" Body="&lt;p&gt;As demonstrated in your second video you can give the FC an angle offset (it does not have to be a multiple op 90°). In order to find the appropriate offset you can place the quadcopter on a level surface use the angles you measure then as offset.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is also possible to make a controller which controls the x and y position or velocity of the quadcopter using the pitch and roll as outputs (this is also known as consecutive loop closing). By using a PID controller for this then the integral action can also counteract the offset of the FC orientation.&lt;/p&gt;&#xA;" OwnerUserId="1487" LastActivityDate="2017-08-06T05:54:27.750" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="13973" PostTypeId="1" AcceptedAnswerId="13975" CreationDate="2017-08-06T13:01:55.550" Score="0" ViewCount="95" Body="&lt;p&gt;I am currently making a 2 wheeled SLAM robot that will use an array of either ultrasonic or sharp IR sensors with a particle filter. I also have a MPU-6050 and GY-271 and i am looking to turn it into an AHRS. However, considering that the map is going to be on a 2-D plane, do i really need a full AHRS? Can i not just use a magnetometer to create a compass for rotation readings?&lt;/p&gt;&#xA;" OwnerUserId="17771" LastEditorUserId="17771" LastEditDate="2017-08-06T15:09:49.710" LastActivityDate="2017-08-06T15:09:49.710" Title="Do i really need an AHRS for 2D maps?" Tags="&lt;slam&gt;&lt;imu&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="13975" PostTypeId="2" ParentId="13973" CreationDate="2017-08-06T14:47:45.473" Score="0" Body="&lt;p&gt;AHRS will yield roll, pitch and yaw values.  In your case, you would only need the yaw reading. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could use just the magnetometer for yaw or rotation headings, but I would not recommend it. This is because the magnetometer is susceptible to magnetic interference. If the sensor is mounted on a chassis nearby ferrous metal, this also could be a source of problem. In this case, you would have to cover it with a magnetic shielding material.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For your information, there are algorithms like complementary filter, EKF and DCM that you could use to obtain the yaw value.&lt;/p&gt;&#xA;" OwnerUserId="10691" LastActivityDate="2017-08-06T14:47:45.473" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="13976" PostTypeId="1" AcceptedAnswerId="14187" CreationDate="2017-08-06T18:40:56.893" Score="0" ViewCount="703" Body="&lt;p&gt;I am trying to build a low-cost SLAM system with an MPU-6050 and GY-271 (magnetometer). Currently, i have a robot with an Arduino that collects the sensor data and a Raspberry Pi that (hopefully) will do the SLAM calculations. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want my robot to be able to use all three sensor readings in SLAM to create a 2D map of the environment. However, considering that i want a 2D map, i will not need all the axis readings correct?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I read another post on here where one of the answers said that only the yaw from the gyroscope, and the x and y from the accelerometer would be needed.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;My question is, how would i implement this into my SLAM robot? I was thinking of passing the accelerometer and odometry readings through a kalman filter on the Arduino and then the same for the gyro and magnetometer readings. Would that be correct?&lt;/li&gt;&#xA;&lt;li&gt;Would i also need to use all the axis (x, y, and z) readings from the magnetometer? Or just one or two axis?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="17771" LastEditorUserId="17771" LastEditDate="2017-08-06T21:43:43.180" LastActivityDate="2017-09-10T04:12:06.847" Title="How would i implement position and heading readings into my SLAM system?" Tags="&lt;slam&gt;&lt;imu&gt;&lt;accelerometer&gt;&lt;gyroscope&gt;&lt;magnetometer&gt;" AnswerCount="2" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="13978" PostTypeId="2" ParentId="13967" CreationDate="2017-08-07T13:14:17.387" Score="1" Body="&lt;p&gt;Got it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some connectors comes with same color for some wires.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Try to follow the connection from left to right, as shown on the pictures on the course.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first cable that goes to the receives has 3 wires, the rest are only one. Follow according to the position,&#xA;first cable on first channel of the receiver and so on. Ignore the collors and follow the picture:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/hqDVY.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hqDVY.png&quot; alt=&quot;CC3D wire diagram&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Throttle is channel 1, Roll is channel 2 and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Btw, on the receiver follow the correct polarity for the first cable. Black wire goes outside. The other wires (the alone ones) should be in the same position as the white whire of the first channel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This could be the problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope that helps! &lt;/p&gt;&#xA;" OwnerUserId="17781" LastActivityDate="2017-08-07T13:14:17.387" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="13982" PostTypeId="2" ParentId="8152" CreationDate="2017-08-08T16:20:15.513" Score="0" Body="&lt;p&gt;It would stumble along the landing gear like that. Your UAV should be suspended in the air. Tie the harnesses to a heavy object on the sides of the UAV and keep them very taught to minimise any movement on it's other axis of rotation.&lt;/p&gt;&#xA;" OwnerUserId="8838" LastActivityDate="2017-08-08T16:20:15.513" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="13984" PostTypeId="2" ParentId="13976" CreationDate="2017-08-09T04:29:28.117" Score="0" Body="&lt;p&gt;Maybe you can checkout ROS on Raspberry Pi, they have various libraries and SLAM algorithms (such as Gmapping &amp;amp; Hector SLAM) that you can use.&lt;/p&gt;&#xA;" OwnerUserId="13436" LastActivityDate="2017-08-09T04:29:28.117" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="13986" PostTypeId="1" CreationDate="2017-08-09T20:44:28.717" Score="1" ViewCount="169" Body="&lt;p&gt;I have a couple of tightly related questions regarding EKF-based visual SLAM. It is common in the Kalman based VSLAM litterature to marginalize 3d points and past poses. Condsidering the EKF as a bayesian filter, one can write its prediction step &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\tag{1} P(x_t|z_1,...,z_{t-1})=\int_{x_{t-1}} P(x_t,x_{t-1}|z_1,...,z_{t-1})dx_{t-1}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;with $x_i$ and $z_i$ respectively denoting states and measurements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The right side of (1) clearly marginalizes the past state. So, here are the questions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I understand that in EKF based SLAM, the current state needs to contain new features (&lt;em&gt;e.g.&lt;/em&gt; newly triangulated points) but does not contain those that are not viewed anymore. So, $x_t$ and $x_{t-1}$ are not exactly the states of the same system. However, I don't see any other way of marginalizing older feature points than using (1). Is this the manner in which older points/features are magrinalized, or are there other intermediary steps?&lt;/li&gt;&#xA;&lt;li&gt;In Key-frame based Bundle Adjustment approaches, one discards redundant information by dropping key-frames (although nowadays, more and more sytems take the filtering approach here and marginalize instead of discarding). I was wondering, since I couldn't find anything relevant, if there exists Key-frame EKFs? Is there an inherent property of the EKF that makes it incompatible with Key-frame selection?  &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="2541" LastActivityDate="2017-08-09T20:44:28.717" Title="EKF based SLAM, marginalization and key-frames" Tags="&lt;localization&gt;&lt;slam&gt;&lt;kalman-filter&gt;&lt;ekf&gt;&lt;visual-odometry&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="13988" PostTypeId="1" CreationDate="2017-08-10T09:43:23.067" Score="1" ViewCount="76" Body="&lt;p&gt;I'm strugling on that problem for a while, so any help is welcome.&#xA;I need a trajectory representation that is performant for optimization, i.e. I want something that computes quickly. The function I want to optimize takes into account the duration of the trajectory, and samples some points along it to compute some costs related to the environment (distance to obstacles, time to collision,...) and the trajectory (local speed, acceleration and jerk limitation,...).&#xA;For now I'm using a method based on waypoints and a dynamic local method that is too heavy for my usage. My optimization variables are the waypoints (position and a few derivatives), and the local method computes a spline between each successive waypoint. I think I can make profit of a less accurate method: I don't need to control the exact speed of each waypoints, nor their exact position and timing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To be more specific, here are a few constraint I can think of:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the optimization algorithm can have some control on the speed along the trajectory (e.g. by constraining the duration on portions of the trajectory, or specifying speed vector on waypoints...). The speed may strongly vary along the trajectory;&lt;/li&gt;&#xA;&lt;li&gt;I need a quick answer about the feasibility of the trajectory (low CPU usage);&lt;/li&gt;&#xA;&lt;li&gt;In the case the method is based on waypoints, I can use only the waypoints to compute my cost, then the computation of a specific state along the trajectory can be slow, I don't care;&lt;/li&gt;&#xA;&lt;li&gt;Otherwise, I need to quickly access a certain number of states to sample costs along the trajectory.&lt;/li&gt;&#xA;&lt;li&gt;Start and final positions of the trajectory are fixed. I may need to specify their speeds also;&lt;/li&gt;&#xA;&lt;li&gt;The trajectory is continuous in position, speed and acceleration, and jerk is bounded;&lt;/li&gt;&#xA;&lt;li&gt;For now I'm focusing on holonomic problems: 2D/3D navigation, with orientation, arm motion...&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I've been thinking of B-Splines, or Bézier curves, but I don't know much of their maths, and I'm not sure whether they fit my requirements...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope my question is clear enough, any advice is welcome!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: I'm not looking for a motion-planner, I want to optimize an existing trajectory to global/local optimum regarding some cost and constraints.&lt;/p&gt;&#xA;" OwnerUserId="17801" LastActivityDate="2017-08-10T09:43:23.067" Title="Which Trajectory representation for optimization" Tags="&lt;software&gt;&lt;motion&gt;&lt;movement&gt;&lt;geometry&gt;&lt;hri&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="13990" PostTypeId="2" ParentId="13955" CreationDate="2017-08-10T13:15:14.957" Score="0" Body="&lt;p&gt;I'd start by considering your problem as a single K-dimensional problem (K would be 4 DoF by the number of robot, so K=20 in the case you mention), and have a look to &lt;a href=&quot;http://www.cs.ubc.ca/research/flann/&quot; rel=&quot;nofollow noreferrer&quot;&gt;FLANN&lt;/a&gt;, which is distributed as a C++ library, for the nearest neighbors search.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or simply start by an exhaustive search using Euclidean distance in that K-dimensional space.&#xA;Also, I don't have a reference at hand, but I think you can use a search among some randomly sampled points of you graph: on each nearest-neighbor search, pick randomly n points in your graph and exhaustively look for the nearest-neighbor in that subset. It will degrade some qualities of your tree, but may result faster, depending on the value for n you pick.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the solution you need depends a lot on your problem specification, mainly size and clutteredness of your environment, presence of bottlenecks...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope it helps...&lt;/p&gt;&#xA;" OwnerUserId="17801" LastActivityDate="2017-08-10T13:15:14.957" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="13993" PostTypeId="2" ParentId="12531" CreationDate="2017-08-11T09:40:44.250" Score="1" Body="&lt;p&gt;Your system looks similar to walking robots, like humanoids. You may set the base as an other joint/link, that in your case would your symmetry center. In the case of humanoids it is usually the pelvis, where all the kinematics chains originate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All the rest is only software, you never have to touch your URDF. You will need to remember in which mode your robot is. You'll also need something to keep your odometry (if needed) up to date when it switches. But I guess you already have done this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may have a look to ROS packages for humanoid robots, like &lt;a href=&quot;https://wiki.ros.org/nao&quot; rel=&quot;nofollow noreferrer&quot;&gt;Nao&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="17801" LastActivityDate="2017-08-11T09:40:44.250" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="13998" PostTypeId="2" ParentId="11630" CreationDate="2017-08-13T03:03:59.937" Score="1" Body="&lt;p&gt;Actually, evaluating maps with different scales and densities happens to be part of my research for my PhD so here goes the two ways I can think of on the top of my head:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Visually: it is always the first step but not the only one ;).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Map matching methods as in &lt;a href=&quot;https://link.springer.com/article/10.1007/s10514-015-9493-5&quot; rel=&quot;nofollow noreferrer&quot;&gt;this paper&lt;/a&gt; by Sören Schwertfeger. That sounds like the idea you had first and I think it would probably be the best way to go about it.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Sören Schwertfeger's method is based on the Voronoi diagram and thus goes away your scale and density problem by have some fuzzy limits on the angle and length of the edges of the Voronoi diagram. I used &lt;a href=&quot;https://malcolmmielle.wordpress.com/2017/08/11/drawing-to-get-a-robot-where-you-want-it-to-be/&quot; rel=&quot;nofollow noreferrer&quot;&gt;a similar method&lt;/a&gt; to match hand drawn sketch maps onto ground truth maps using Voronoi diagrams, and I did not consider &lt;em&gt;at all&lt;/em&gt; the angle and length of Voronoi edges, just their order. That's probably the worst case of &quot;maps with different scale and density you can have&quot; and the matching was &lt;a href=&quot;https://mro.oru.se/wp-content/material/pdf/1054805.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;not half bad&lt;/a&gt;. Thus, I believe that should be a pretty solid solution, especially if you have occupancy grid maps; you'll be able to take in account angles in between Voronoi edges to get a better precision.&lt;/p&gt;&#xA;" OwnerUserId="1615" LastActivityDate="2017-08-13T03:03:59.937" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="13999" PostTypeId="2" ParentId="13941" CreationDate="2017-08-13T04:53:03.960" Score="1" Body="&lt;p&gt;There are two conventions followed while deciding DH parameters.&#xA;1) Where the parameters are calculated with respect to the ith and the (i+1)th link &lt;a href=&quot;http://www.roboanalyzer.com/uploads/2/5/8/8/2588919/dhparams.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;(Excerpt from Chapter 5 of the book “Introduction to Robotics” by S.K. Saha,&#xA;Tata McGraw-Hill, New Delhi, 2008)&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) Where the parameters are calculated with respect to the (i-1)th and the ith link &lt;a href=&quot;http://nptel.ac.in/courses/112108093/module2/lecture.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;(slide no. 38)&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cross check the methods to ensure you are using the same convention followed by the Github user. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The final answer remains the same while only the formulation of the transformation matrix changes.&lt;/p&gt;&#xA;" OwnerUserId="17504" LastActivityDate="2017-08-13T04:53:03.960" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14000" PostTypeId="1" AcceptedAnswerId="14005" CreationDate="2017-08-13T08:35:37.970" Score="0" ViewCount="324" Body="&lt;p&gt;I like to know are there simple equations to find how much motor power is needed to lifting 1 KG with a quad rotor?&#xA;Also if we use gas powered engine, how can we find a relation between lifting weigh and fuel consumption?&lt;/p&gt;&#xA;" OwnerUserId="17822" LastActivityDate="2017-08-14T09:29:55.000" Title="Simple relation between lifting weight and power of the motor in quad-rotors?" Tags="&lt;quadcopter&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14001" PostTypeId="1" CreationDate="2017-08-13T09:33:30.560" Score="0" ViewCount="141" Body="&lt;p&gt;I have gone through my lecture notes but I can't seem to figure out the five different steps of a Kalman filter and how these steps are  Divided into prediction and correction and how the state and the uncertainty evolves with each step. I would appreciate it if someone could explain it to me please &lt;/p&gt;&#xA;" OwnerUserId="16746" LastEditorUserId="16746" LastEditDate="2017-08-13T10:39:11.450" LastActivityDate="2017-10-13T20:26:56.060" Title="explanation of kalman filter" Tags="&lt;mobile-robot&gt;&lt;localization&gt;&lt;kalman-filter&gt;&lt;c&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14002" PostTypeId="2" ParentId="13955" CreationDate="2017-08-13T17:55:28.583" Score="1" Body="&lt;p&gt;I don't want to sound too pessimistic, but from my experience a straightforward RRT approach for multiple robots would not be able to scale well with the number of robots, due to excessive collision checking. Therefore, nearest-neighbor search (NN) would certainly not be the bottleneck, as you will not be able to experiment with more than 10 robots, at best. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you do manage to experiment, possible by using a different method, with a large fleet of robots, and the high-dimensional NN technique turns out to be the bottleneck, it might be worth to consider a dimension reduction: for $m$ robots having $d$ degrees of freedom you might be able to efficiently encode the distance relations between $md$-dimensional composite configuration using &lt;a href=&quot;https://en.wikipedia.org/wiki/Dimensionality_reduction&quot; rel=&quot;nofollow noreferrer&quot;&gt;dimension reduction&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may want to elaborate on the reason you chose to implement an direct RRT approach, so that we can help in finding a better alternative. &lt;/p&gt;&#xA;" OwnerUserId="1684" LastActivityDate="2017-08-13T17:55:28.583" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14003" PostTypeId="1" AcceptedAnswerId="14036" CreationDate="2017-08-13T18:57:26.783" Score="0" ViewCount="89" Body="&lt;p&gt;I am trying to figure out if WiFi from TP-Link N450 Wireless WiFi Router could reliably get through lexan. I need the wifi to be able to have a constant, reliable signal.&lt;/p&gt;&#xA;" OwnerUserId="17270" LastActivityDate="2017-08-17T19:23:29.627" Title="Do Polycarbonates (lexan) block wifi" Tags="&lt;wifi&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14004" PostTypeId="1" CreationDate="2017-08-13T19:17:31.797" Score="1" ViewCount="325" Body="&lt;p&gt;Can anyone please share me the command how can i find the frequency of CAN send and CAN receive messages. I'm sending CAN messages using a serial port and receiving it with a peak CAN usb. There is no error no drop messages between both receving and sending sides but i don't know the command to get the frequency. I'm using only simple candump and can send commands in Ubuntu. I know the bps but i want to know the frequency of sending and receiving sides. Thank you&lt;/p&gt;&#xA;" OwnerUserId="13774" LastActivityDate="2017-10-29T07:28:03.770" Title="finding the frequency of CAN send and CAN receive messages using CAN in Ubuntu" Tags="&lt;linux&gt;&lt;can&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14005" PostTypeId="2" ParentId="14000" CreationDate="2017-08-13T21:25:34.910" Score="2" Body="&lt;p&gt;In order to lift the weight of $mg$, you need at least a trust $T=mg$. The trust of a quadrotor with four identical motors is given by $T=4 k_T \omega^2$, in which $k_T$ is a parameter that depends on your motor/rotor and $\omega$ is the angular velocity. From this, you can estimate at which $\omega$ your motor has to operate. Additionally, to this, you will have to overcome the air drag due to rotation of the blades. This air drag needs to be overcome by a torque $M=4k_M \omega^2$. So you have to check if your motor does supply this torque $M$ at $\omega$. So if you combine this information you can estimate your power by $P=M\omega$. Remember that this is just a lower bound and you should rather select a better motor in order to allow a certain level of agility.&lt;/p&gt;&#xA;" OwnerUserId="17069" LastEditorUserId="17069" LastEditDate="2017-08-14T08:07:16.907" LastActivityDate="2017-08-14T08:07:16.907" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14006" PostTypeId="2" ParentId="12616" CreationDate="2017-08-13T23:54:12.087" Score="2" Body="&lt;p&gt;I don't know what the proper way to do this is but I can give you ideas to make it better:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;define an exact transformation for each camera. You could calibrate each camera using a grid pattern and by using a bigger one, multiple pictures, and averaging the transforms, you could define the transformation between the fish eye view and the normal view more accurately and wouldn't need the pattern on the image later on. Im on my phone so I can find any more info or links on this but there are plenty :).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;use image registration techniques. Use keypoints and descriptors on the image and register then using something like ransac for example. A good library to do that is openCV. Look at &lt;a href=&quot;http://vgg.fiit.stuba.sk/2016-06/panorama-image-registration/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this for example&lt;/a&gt; but I think you can find plenty of better tutorials.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Ideally, you should use both of those technics :).&lt;/p&gt;&#xA;" OwnerUserId="1615" LastActivityDate="2017-08-13T23:54:12.087" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14008" PostTypeId="2" ParentId="14000" CreationDate="2017-08-14T09:29:55.000" Score="0" Body="&lt;p&gt;The thrust to weight ratio of your quadcopter should be at least 2 to for a decently manoeuvrable quadcopter. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, if your quadcopter has mass m, then your motors need to provide a total thrust of m*g to hover. Look for motors that can provide a thrust of mg/4 each (assuming 4 rotors) at 50% throttle. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most motor manufacturers today actually provide performance statistics of their motors with various prop sizes so finding the right motors should not be too difficult.&lt;/p&gt;&#xA;" OwnerUserId="8838" LastActivityDate="2017-08-14T09:29:55.000" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14010" PostTypeId="1" CreationDate="2017-08-14T10:40:56.047" Score="1" ViewCount="45" Body="&lt;p&gt;Different question from the last one since I still struggle with the concept.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In his book &quot;Probabilistic Robotics&quot;, Thrun has the following equation: &lt;a href=&quot;https://books.google.de/books?id=2Zn6AQAAQBAJ&amp;amp;lpg=PA140&amp;amp;ots=vHnEODAD_A&amp;amp;dq=probabilistic%20robotics%205.48&amp;amp;pg=PA142#v=onepage&amp;amp;q=probabilistic%20robotics%205.48&amp;amp;f=false&quot; rel=&quot;nofollow noreferrer&quot;&gt;(Context here)&lt;/a&gt; (5.49)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$p(x_t|u_t,x_{t-1},m) = \eta p(m|x_t,u_t,x_{t-1})p(x_t|u_t,x_{t-1})   $&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can't really wrap my head around any probability that involves $p(m)$ or  $p(m|...)$. What is the probability of a map? Isn't it always 1, because i have just one map? How do I have to imagine $p(m|x_t,u_t,x_{t-1}$)? In his book, he kind of just handwaves it...&lt;/p&gt;&#xA;" OwnerUserId="17423" LastActivityDate="2017-09-13T16:05:00.120" Title="$p(m|x_t, u_t, x_{t-1})$ What does Thrun mean with the &quot;map probability&quot;?" Tags="&lt;localization&gt;&lt;probability&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14011" PostTypeId="2" ParentId="14001" CreationDate="2017-08-14T10:50:04.943" Score="0" Body="&lt;p&gt;Here is a &lt;a href=&quot;https://www.youtube.com/watch?v=X9cC0o9viTo&quot; rel=&quot;nofollow noreferrer&quot;&gt;video&lt;/a&gt; by Professor Michel Van Biezen that I found very useful while reading up on Kalman filter. It also includes an example problem along with the steps needed very clearly defined.&lt;/p&gt;&#xA;" OwnerUserId="17504" LastActivityDate="2017-08-14T10:50:04.943" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14013" PostTypeId="2" ParentId="14010" CreationDate="2017-08-14T15:58:24.643" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;How do I have to imagine $p(m|x_t,u_t,x_{t-1}$)? In his book, he kind&#xA;  of just handwaves it...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In SLAM, you need to build two entities, the robot's state (i.e. position and direction) and the map. In deterministic approaches, the probability of both robot's state and the map is one, meaning you know these entities with an absolute true (&lt;em&gt;i.e.&lt;/em&gt; zero uncertainty). In probabilistic approaches, you can't know the robot's state and the map with an absolute true that is because sensors have noise, therefore, the probability principle is the right choice to handle this kind of problems. Now what is this probability $p(m|x_t,u_t,x_{t-1}$)? This is a conditional probability, the inputs are the previous state of the robot, the current state of the robot, and the current control input that drives the robot whereas the output is the probability of the map. Remember the probability here reflects the certainty of the knowledge about the map. For example, if the probability is 0.9, it means we are 90% sure about the location of the map and 10% is the uncertainty. &lt;/p&gt;&#xA;" OwnerUserId="2155" LastActivityDate="2017-08-14T15:58:24.643" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14015" PostTypeId="2" ParentId="12803" CreationDate="2017-08-14T23:17:05.310" Score="2" Body="&lt;p&gt;The H2 control problem is to find a proper, real rational controller K that stabilizes G internally and minimizes the H2 norm of the transfer matrix Tzw from w to z, see the figure below&lt;a href=&quot;https://i.stack.imgur.com/ZxOr3.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZxOr3.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is well-known that a system with LQR controller has at least 60o phase margin and 6 dB gain margin. However, it is not clear whether these stability margins will be preserved if the states are not available and the output feedback H2 (or LQG)controller has to be used. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;for more information on stability margins of the H2 control, see the book, Essentials of Robust Control / chapter 13 / page 265 / section 13.6.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;on the other hand, Optimal H-infinity Control: Find all admissible controllers K(s) such that infinity norm of Tzw is minimized. additionally, &#xA;Suboptimal H-infinity Control: Given gamma &gt; 0, find all admissible controllers&#xA;K(s), if there are any, such that infinity norm of Tzw &amp;lt; gamma. &#xA;.&lt;/p&gt;&#xA;" OwnerUserId="17832" LastActivityDate="2017-08-14T23:17:05.310" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14016" PostTypeId="2" ParentId="7333" CreationDate="2017-08-15T05:33:15.647" Score="0" Body="&lt;p&gt;I think it sounds like your motor mounting bolts are too long pressing against or dangerously near the motor windings &lt;/p&gt;&#xA;" OwnerUserId="17836" LastActivityDate="2017-08-15T05:33:15.647" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14017" PostTypeId="1" AcceptedAnswerId="14293" CreationDate="2017-08-15T06:28:03.120" Score="0" ViewCount="265" Body="&lt;p&gt;This is a homework question from edx course &lt;a href=&quot;https://courses.edx.org/courses/SNUx/SNU446.345.2x/2T2014/course/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Robot Mechanics and Control, Part II&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given the following&#xA;&lt;a href=&quot;https://i.stack.imgur.com/KXbuK.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KXbuK.png&quot; alt=&quot;Figure&quot;&gt;&lt;/a&gt;&#xA;and expressing its forward kinematics as $T = e^{[S_1]\theta_1} ... e^{[S_6]\theta_6}M$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is can be found (and also shown in the answer) that&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ [S_2] = &#xA;        \begin{bmatrix}&#xA;        0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\&#xA;        0 &amp;amp; 0 &amp;amp; -1 &amp;amp; -2L \\&#xA;        0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\&#xA;        0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\&#xA;        \end{bmatrix}&#xA;$$ and&#xA;$$ M = &#xA;        \begin{bmatrix}&#xA;        0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\&#xA;        1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 3L \\&#xA;        0 &amp;amp; 0 &amp;amp; -1 &amp;amp; -2L \\&#xA;        0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\&#xA;        \end{bmatrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Part 4b) requires expressing the forward kinematics in the form of $T = Me^{[B_1]\theta_1} ... e^{[B_n]\theta_n}$ and finding $[B_2]$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wanted to try deriving the answer using the following property (as found in the &lt;a href=&quot;http://robotics.snu.ac.kr/edX/2014-1/lecturenotes/SNUx_Chapter_5.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;lecture notes&lt;/a&gt; page 20 and in the &lt;a href=&quot;https://www.youtube.com/watch?v=3AMX59sex4M&quot; rel=&quot;nofollow noreferrer&quot;&gt;lecture&lt;/a&gt; around 3:00, basically using property $Pe^A = e^{PAP^{-1}}P$ for any invertible $P$):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$e^{[S_1]\theta_1} ... e^{[S_n]\theta_n}M = Me^{[B_1]\theta_1} ... e^{[B_n]\theta_n}$$ where $$[B_i] = M^{-1}[S_i]M$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I get&#xA;$$ M^{-1} = &#xA;        \begin{bmatrix}&#xA;        0 &amp;amp; 1 &amp;amp; 0 &amp;amp; -3L \\&#xA;        1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\&#xA;        0 &amp;amp; 0 &amp;amp; -1 &amp;amp; -2L \\&#xA;        0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\&#xA;        \end{bmatrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using the property $$[B_i] = M^{-1} [S_i] M$$ to calculate $B_2$ and I get&#xA;$$&#xA;[B_2] = &#xA;        \begin{bmatrix}&#xA;        0 &amp;amp; 0 &amp;amp; 1 &amp;amp; -3L \\&#xA;        0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\&#xA;        -1 &amp;amp; 0 &amp;amp; 0 &amp;amp; -5L \\&#xA;        0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\&#xA;        \end{bmatrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;which is obviously wrong.  What am I doing incorrectly?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The correct answer is&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ &#xA;[B_2] = &#xA;        \begin{bmatrix}&#xA;        0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \\&#xA;        0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\&#xA;        -1 &amp;amp; 0 &amp;amp; 0 &amp;amp; -3L \\&#xA;        0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\&#xA;        \end{bmatrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Full question with answers below:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/xbKat.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xbKat.jpg&quot; alt=&quot;Full question&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerDisplayName="user16060" LastEditorUserId="10414" LastEditorDisplayName="user16060" LastEditDate="2021-01-25T16:23:22.833" LastActivityDate="2021-01-25T16:23:22.833" Title="Converting product of exponentials from base frame to end-effector frame" Tags="&lt;forward-kinematics&gt;&lt;product-of-exponentials&gt;&lt;screw-theory&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14021" PostTypeId="1" AcceptedAnswerId="14045" CreationDate="2017-08-15T17:08:58.900" Score="0" ViewCount="73" Body="&lt;p&gt;The current Kawasaki robot controllers are equipped with a power connector different than the one on prior controllers (see pictures below). I need to order this type of plug and can not find out the type of the connector or any information about it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone recognise this connector and could provide it's type or any information that could lead to the type?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/CjO5A.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/CjO5A.jpg&quot; alt=&quot;Top view&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://i.stack.imgur.com/x4An9.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/x4An9.jpg&quot; alt=&quot;Diagonal view&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://i.stack.imgur.com/QEwO8.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QEwO8.jpg&quot; alt=&quot;Front view&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13314" LastEditorUserId="17865" LastEditDate="2017-08-18T12:18:05.407" LastActivityDate="2017-08-18T13:58:08.303" Title="Type of power connector on the new Kawasaki controller" Tags="&lt;robotic-arm&gt;&lt;industrial-robot&gt;&lt;connector&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14023" PostTypeId="1" AcceptedAnswerId="14024" CreationDate="2017-08-16T09:27:21.880" Score="3" ViewCount="500" Body="&lt;p&gt;I have a robotic system to develop, in first phase of the project I need to track an object. So I placed a geometrical marker on the object to estimate it's pose (rotation, translation). It all works fine until the target object moves a little faster and motion blur is introduced to the input images from camera. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I have two options:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Either deconvolve the images to remove blur before object tracking&lt;/li&gt;&#xA;&lt;li&gt;OR use a camera with very high frames per second&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The problem is first solution is too slow for a real-time system and second option is too expensive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please tell me if there is a more efficient technique than older ones (Weiner, Lucy-Richardson, Blind Deconvolution) to remove motion blur. I believe there must be something, because mobile robot need real-time calculations from their camera inputs and motion blur is a common problem when robot or the target object is moving. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm using Python 2.7 with Opencv 3 and ROS Kinetic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Otherwise let me know how many fps are sufficient to observe a human who can walk, run, fall from a distance of 10-20 ft. I can't go and buy a 400-1000 fps camera just to check the output. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Below are the images of some sample markers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Actual Markers:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/2fK2y.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2fK2y.png&quot; alt=&quot;Sample Markers&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Blurred Image when Moving &#xA;&lt;a href=&quot;https://i.stack.imgur.com/whIqi.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/whIqi.png&quot; alt=&quot;Blurred Markers&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="17812" LastEditorUserId="17812" LastEditDate="2017-08-16T09:41:36.530" LastActivityDate="2017-08-16T10:33:50.213" Title="How to eliminate motion blur with realtime performance" Tags="&lt;mobile-robot&gt;&lt;computer-vision&gt;&lt;cameras&gt;&lt;real-time&gt;&lt;hri&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14024" PostTypeId="2" ParentId="14023" CreationDate="2017-08-16T10:33:50.213" Score="1" Body="&lt;p&gt;You don't need more frames per second, you need a shorter exposure time. &lt;/p&gt;&#xA;" OwnerUserId="8842" LastActivityDate="2017-08-16T10:33:50.213" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="14025" PostTypeId="1" AcceptedAnswerId="14039" CreationDate="2017-08-16T11:08:18.857" Score="0" ViewCount="56" Body="&lt;p&gt;I think there are some quad-copter at the market those can find you from your smart phone. I don't know how accurate it is and how does it works? Is there a solution that I can build an android/ios application that quad-copter can find exactly the smart phone which has this app installed?&lt;/p&gt;&#xA;" OwnerUserId="17822" LastActivityDate="2017-10-18T07:38:27.443" Title="How to find a smartphone with a quadcopter?" Tags="&lt;quadcopter&gt;&lt;localization&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14027" PostTypeId="2" ParentId="12633" CreationDate="2017-08-16T21:51:34.497" Score="1" Body="&lt;p&gt;There are a couple of potential traps with the scenario you seem to be outlining. Many of them have already been addressed in literature on inertial navigation. You can find many good references on inertial navigation and dead reckoning using IMUs, and you may want to look into that, depending on your goals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you are asking for is a method to clean up your raw IMU data using an EKF. This is a bit of a strange request, because the EKF is generally designed for dynamic systems. In our context, it's sufficient to say that dynamic systems are driven by some known process in between measurements; for instance, if you were estimating position and velocity, there is a known relationship (derivative) that describes how the velocity affects position in between measurements from, e.g., a GPS receiver. You have not mentioned any other measurements, like GPS, that you want to use in the filter. If you don't have any other measurements available, then an EKF is not going to buy you anything in practice, and is probably much more challenging to set up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If all you want is filtered accelerometer, gyroscope, and magnetometer data, then I would suggest designing a low-pass filter to smooth those data instead. You would also want to make sure to calibrate the bias of the accelerometer and gyros by reading the first N measurements, and then subtracting the average of those values from all subsequent measurements. Depending on your application and the motion of your vehicle, you might have usable data for as many as several minutes. I'm making some fairly wild guesses about your IMU bias drift rates, since I'm not familiar with the MPU-9250. In general, I would not trust a MEMS IMU output for too long, since there will always be bias drift. There are ways to address this limitation: you could augment the IMU with additional sensors, or you could re-calibrate periodically by stopping the vehicle and taking measurements. Unfortunately, the latter approach is only really very realistic if you have a ground vehicle moving over fairly level terrain.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's not clear if your application is for a flying vehicle or for an underwater one, nor is it clear what your desired inputs and outputs for an ANN-based controller are. For instance, if all you are giving the controller is IMU data, what will be its objectives? It sounds like what you may want to do is perform inertial navigation. Assuming you have an underwater vehicle, you will mostly likely want to perform dead reckoning. Essentially, dead reckoning integrates the accelerometer histories twice to estimate the position of the vehicle, and the gyro histories once to estimate its orientation. If you have estimates of the position, then you could give your controller simple commands, such as &quot;go to position X = 5 m&quot; and then have the controller try to do that. (You can do the same thing with accelerations, of course, but I'm not sure what the point would be, since the vehicle won't be capable of even basic autonomy.)&lt;/p&gt;&#xA;" OwnerUserId="17859" LastActivityDate="2017-08-16T21:51:34.497" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14028" PostTypeId="1" CreationDate="2017-08-16T23:44:08.990" Score="2" ViewCount="820" Body="&lt;p&gt;I have several questions about the process of marginalization in SLAM algorithms:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;0 - What are the mathematic intuition behind marginalization process&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1 -  I know marginalization of states or points is related with removing nodes from the graph and keeping the information they have, how this information is kept? I mean, how the information of the marginalized states are passed to the remaining state?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2 - Why in bundle adjustment, the points are set marginalized? (example of ORBSLAM implementation)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you very much!&lt;/p&gt;&#xA;" OwnerUserId="15119" LastActivityDate="2018-07-09T20:39:04.637" Title="Marginalization in Graph SLAM" Tags="&lt;slam&gt;&lt;computer-vision&gt;&lt;sensor-fusion&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2018-07-12T14:19:47.983" ContentLicense="CC BY-SA 3.0" />
  <row Id="14029" PostTypeId="1" CreationDate="2017-08-17T09:53:44.727" Score="3" ViewCount="919" Body="&lt;p&gt;I am doing a project where I've robot which will be using kinect + ROS for Simultaneous Localization and Mapping. Which board should I use? I've heard that Raspberry pi , beaglebone are not sufficient. &lt;/p&gt;&#xA;" OwnerUserId="16137" LastActivityDate="2017-08-18T00:12:34.460" Title="ROS + SLAM + kinect. which platform to use?" Tags="&lt;slam&gt;&lt;ros&gt;&lt;raspberry-pi&gt;&lt;kinect&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14030" PostTypeId="1" AcceptedAnswerId="14267" CreationDate="2017-08-17T12:28:30.483" Score="3" ViewCount="580" Body="&lt;p&gt;I like to know can we make a web site or application(or using something free like google map) to routing a way and our robot can follow the line exactly? For example I like to build a quad-copter and specify some streets on the map and my quad-copter flies upon that specified streets.&lt;/p&gt;&#xA;" OwnerUserId="17822" LastActivityDate="2017-09-20T19:27:19.017" Title="How to build an autonomous navigation system for robots?" Tags="&lt;gps&gt;&lt;automatic&gt;&lt;autonomous-car&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14032" PostTypeId="1" CreationDate="2017-08-17T14:43:52.860" Score="1" ViewCount="94" Body="&lt;p&gt;If I use an industrial robot with its hardware controller, should I install linux hard real-time like xenomai to use this kind of hardware controller?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If not, when is the case to use xenomai?&lt;/p&gt;&#xA;" OwnerUserId="708" LastEditorUserId="2289" LastEditDate="2017-08-18T13:25:08.530" LastActivityDate="2017-08-22T17:28:57.383" Title="When is the case to use hard real time?" Tags="&lt;real-time&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14036" PostTypeId="2" ParentId="14003" CreationDate="2017-08-17T19:23:29.627" Score="2" Body="&lt;p&gt;LEXAN  has low absorption and reflection to WiFi as long as not touching say a dielectric antenna where it might shift tuning but unlikely in your situation.&lt;/p&gt;&#xA;" OwnerUserId="17865" LastActivityDate="2017-08-17T19:23:29.627" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14037" PostTypeId="2" ParentId="14029" CreationDate="2017-08-17T19:26:13.167" Score="3" Body="&lt;p&gt;There are several platforms possible, depending on your experience level and needs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are comfortable working with the Raspberry Pi or the Beagle Bone... the next step up might be the &lt;a href=&quot;http://www.nvidia.com/object/embedded-systems-dev-kits-modules.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Jetson TX1 or TX2 from Nvidia&lt;/a&gt;.  Please note that the default install of OpenCV4Tegra does not include the slam modules, so you will have to install OpenCV from source if you plan on using that library for SLAM/SIFT.  ROS can be installed on the Jetson following &lt;a href=&quot;http://www.jetsonhacks.com/2016/10/12/robot-operating-system-ros-on-nvidia-jetson-tx1/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this guide&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Qualcomm also makes the snapdragon line or processors and there are many other chips out there, too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please &lt;a href=&quot;https://robotics.stackexchange.com/help/dont-ask&quot;&gt;review the guidelines&lt;/a&gt; for your question since it seems highly opinion based.  Consider rephrasing/asking a more specific, technical question.&lt;/p&gt;&#xA;" OwnerUserId="17744" LastActivityDate="2017-08-17T19:26:13.167" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14038" PostTypeId="1" CreationDate="2017-08-17T20:01:49.190" Score="0" ViewCount="274" Body="&lt;p&gt;I would like to generate a trajectory for a quadrotor UAV and I am using an architecture which allows to do so only by specifying position, velocity and acceleration. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I only know that I want to do a circle in 2D (fixed z for example) and therefore I should give a sine wave on the x and a cosine on the y. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So far everything is ok. I am working in MATLAB/Simulink and therefore to generate the position I simply use an integrator block and I get it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What about the Acceleration? If I do just a derivative of the velocity my trajectory is not working, I don't know why. Is there a better way to do that? A friend suggested me a second order filter to generate the trajectory but I don't know what he really means.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could you please help me?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks. &lt;/p&gt;&#xA;" OwnerUserId="10852" LastActivityDate="2017-09-28T15:30:23.913" Title="Generation of a trajectory (position,velocity,acceleration) from velocity" Tags="&lt;quadcopter&gt;&lt;motion-planning&gt;&lt;matlab&gt;&lt;uav&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14039" PostTypeId="2" ParentId="14025" CreationDate="2017-08-17T20:28:16.957" Score="1" Body="&lt;p&gt;You can make an app that send the location of your phone, then you can use sensor fusion using Wi-Fi and IMU to enhance the precision.&#xA;But to locate people, like spying you only need Kali Linux, a few exploitables, you don`t need a drone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I understood you want to build a drone that follows you. There are some you can buy, but DIY is more fun. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This can be modified to do what you want using ROS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/trancept/ROS-Autonomous-Quadcopter-Flight&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/trancept/ROS-Autonomous-Quadcopter-Flight&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="17866" LastActivityDate="2017-08-17T20:28:16.957" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14040" PostTypeId="2" ParentId="10416" CreationDate="2017-08-17T22:43:20.823" Score="0" Body="&lt;p&gt;ST Robotics have an infra-red sensor system that will stop the robot if you get into the workspace. &lt;a href=&quot;https://www.youtube.com/watch?v=WqJK1xXTWJQ&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=WqJK1xXTWJQ&lt;/a&gt;. You still cant actually share the workspace but can work next to it. ~~ David Sands&lt;/p&gt;&#xA;" OwnerUserId="17869" LastEditorUserId="17869" LastEditDate="2017-08-17T23:07:42.513" LastActivityDate="2017-08-17T23:07:42.513" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="14041" PostTypeId="1" CreationDate="2017-08-17T23:33:41.823" Score="1" ViewCount="510" Body="&lt;p&gt;I understand that motors come with recommended speed controllers, be it encoders or esc. But what is the difference between the two?&lt;/p&gt;&#xA;" OwnerUserId="17871" LastActivityDate="2017-08-19T06:52:32.013" Title="What is the difference between speed encoders and esc" Tags="&lt;esc&gt;&lt;quadrature-encoder&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14042" PostTypeId="1" CreationDate="2017-08-17T23:58:54.053" Score="1" ViewCount="218" Body="&lt;p&gt;I am developing an inverted pendulum that uses a differential drive robot as base. The goal is to create a benchmark to practice my control using ROS, so I can implement what I learn on the Modern Control Engineering (5th Edition) [Katsuhiko Ogata] , and other books and Journals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I am running into problems because of my lack of experience. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My hardware is composed of 2 Nema 17 stepper motors, 1 Energizer XP18000 as main battery,2 Motor Drivers DRV8825, 1 Arduino Mega, 1 Raspberry Pi 3, 1 Honeywell rotary Encoder 600 series.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I originally tried to do something similar to the &lt;a href=&quot;http://www.jjrobots.com/projects-2/b-robot/&quot; rel=&quot;nofollow noreferrer&quot;&gt;b-robot&lt;/a&gt; but it ended being better to build a cart for benchmark because it is more stable and I can use an encoder to know the position of the rod. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problems are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;low torque and too much mass, the robot is slow due to inertia.&lt;/li&gt;&#xA;&lt;li&gt;Arduino Mega, and basically any AVR microcontroller is too slow for&#xA;Real-Time, the fastest I can communicate with Raspberry Pi3 is 30Hz.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I am thinking to do these changes:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Change the Arduino by a Nucleo Mbed board.&lt;/li&gt;&#xA;&lt;li&gt;Running the Raspberry pi on non-gui or snap like the&#xA;ubuntu core, but with Ubuntu Mate.&lt;/li&gt;&#xA;&lt;li&gt;Change the motor for DC or Servo motor.&lt;/li&gt;&#xA;&lt;li&gt;I need to redesign the robot structure, making it small and light.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I would like advises on which hardware select for developing a precision robot. Which motors and motor drivers. If Nucleo boards would work well. This kind of things. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also would like to know the best practices for programming the controllers for ROS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I attached an image of the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/uZlQO.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/uZlQO.jpg&quot; alt=&quot;This is the robot&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="17866" LastActivityDate="2017-08-17T23:58:54.053" Title="Controls Project, Inverted Pendulum. Design issues" Tags="&lt;mobile-robot&gt;&lt;control&gt;&lt;ros&gt;" AnswerCount="0" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14043" PostTypeId="2" ParentId="14029" CreationDate="2017-08-18T00:12:34.460" Score="1" Body="&lt;p&gt;Nvidia Jetson TX2, I have one and it is pretty fast. There are so many boards, I prefer ARM for prototyping, but you can use notebooks, Intel IoT boards, Mbed like Nucleo, small motherboards. It is huge the number of possibilities.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Kinetic does not need much processing for create a point cloud so you don`t need nothing fancy.&lt;/p&gt;&#xA;" OwnerUserId="17866" LastActivityDate="2017-08-18T00:12:34.460" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14044" PostTypeId="2" ParentId="14032" CreationDate="2017-08-18T08:24:43.013" Score="4" Body="&lt;p&gt;In general, hard real-time OSes are used when there is a (usually periodic) task that is terminally critical, i.e. a process that needs to be run every few milliseconds, for example, and which, when queued, &lt;strong&gt;must&lt;/strong&gt; be completed within a given time window to avoid a system failure. Note that &quot;system failure&quot; in this case doesn't have to mean that it will fry your CPU or break your robot, but instead that the resulting behaviour is considered a breach of the system's &lt;strong&gt;critical&lt;/strong&gt; specifications, such as user safety or the like.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may want to check out &lt;a href=&quot;https://en.wikipedia.org/wiki/Real-time_computing#Criteria_for_real-time_computing&quot; rel=&quot;nofollow noreferrer&quot;&gt;the criteria for different categories of real-time computing on Wikipedia&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="17875" LastActivityDate="2017-08-18T08:24:43.013" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14045" PostTypeId="2" ParentId="14021" CreationDate="2017-08-18T13:58:08.303" Score="1" Body="&lt;p&gt;The connector has &quot;TE&quot; and &quot;DYNA CLAMP&quot; emobssed on it. TE would be TE Connectivity, so I went to their site and searched Dyna Clamp. Got some results, went to &lt;a href=&quot;https://www.digikey.com&quot; rel=&quot;nofollow noreferrer&quot;&gt;Digi-key&lt;/a&gt; and did some checking, and it looks like the connector you have is (drum roll)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A &lt;a href=&quot;https://www.digikey.com/product-detail/en/te-connectivity-amp-connectors/1-917807-2/A29741-ND/664470&quot; rel=&quot;nofollow noreferrer&quot;&gt;TE Connectivity AMP Connector, p/n 1-917807-2&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The link above will take you to the Digi-key page for the part that &lt;em&gt;you&lt;/em&gt; have. If you scroll down the page a little you will see a section of &quot;mating connectors,&quot; of which there appear to be four:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A &lt;a href=&quot;https://www.digikey.com/product-detail/en/te-connectivity-amp-connectors/1-917809-2/A29753-ND/664482&quot; rel=&quot;nofollow noreferrer&quot;&gt;panel mount plug, for installation in a piece of sheet stock, p/n 1-917809-2&lt;/a&gt;,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A &lt;a href=&quot;https://www.digikey.com/product-detail/en/te-connectivity-amp-connectors/1-1123309-2/A29759-ND/664488&quot; rel=&quot;nofollow noreferrer&quot;&gt;through hole, right angle plug, for installation in a circuit board, p/n 1-1123309-2&lt;/a&gt;,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A &lt;a href=&quot;https://www.digikey.com/product-detail/en/te-connectivity-amp-connectors/1-1318983-6/A29819-ND/664538&quot; rel=&quot;nofollow noreferrer&quot;&gt;through hole, right angle plug, for installation in a circuit board, p/n 1-1318983-6&lt;/a&gt; (the connector here is rotated 90 degrees, so it lays &quot;side down.&quot;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And finally, the one you may be after:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A &lt;a href=&quot;https://www.digikey.com/product-detail/en/te-connectivity-amp-connectors/1-917808-2/A29747-ND/664476&quot; rel=&quot;nofollow noreferrer&quot;&gt;free-hanging (in-line) plug, p/n 1-917808-2&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;I personally think Digi-key charges an arm and a leg for shipping, so be sure to order all the parts you need at once. Don't forget the connection tabs, which are the actual little metal blades that make up the connections - these are &lt;strong&gt;not&lt;/strong&gt; generally sold with the connectors. There's a crimping tool that you should probably get if you're going to be making up a bunch of these connectors, but you could probably get by with pliers if you're only doing a couple. I'd definitely buy a lot more of the little blades than you think you'll need and practice before you do it for real.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's also a removal tool that I'd suggest getting, again if you're planning on making up a lot of these. I don't think I've used these connectors specifically before, but I think you can generally release the TE connector pins if you have a pick or very small screwdriver. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-08-18T13:58:08.303" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14047" PostTypeId="2" ParentId="12741" CreationDate="2017-08-19T04:03:02.937" Score="1" Body="&lt;p&gt;&lt;a href=&quot;http://docs.opencv.org/2.4/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://docs.opencv.org/2.4/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html&lt;/a&gt;, this link maybe helpful. Here is my answer based on that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;1.What does normalized point coordinates means?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the pinhole camera model&#xA;$$&#xA;\begin{bmatrix}&#xA;x \\ y \\ z&#xA;\end{bmatrix}&#xA;= R&#xA;\begin{bmatrix}&#xA;X \\ Y \\ Z&#xA;\end{bmatrix}&#xA;+ t&#xA;$$&#xA;$$x'= x/z$$&#xA;$$y'= y/z$$&#xA;$$u = f_x * x' + c_x$$&#xA;$$v = f_y * x' + c_y$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;so (x', y', 1) is the normalized point, it means two things:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;normalized point does not depends on the camera matrix&lt;/li&gt;&#xA;&lt;li&gt;normalized point does not depends on the scale factor&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In fact, (x, y, z) are the coordinates of a 3D point in the camera coordinate space&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;2. How can it be used for?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before explaining how i use it, i'd like to give you the pinhole camera model with distortion consideration, so the equation above is extended as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/HgUUm.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HgUUm.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my application, i use it to do back projection of 2D image point to 3D model point:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;use undistortPoints function to get undistorted normalized point (x', y');&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;solve the pinhole camera model equation to get 3D model point.&#xA;$$&#xA;z\begin{bmatrix}&#xA;x' \\ y' \\ 1&#xA;\end{bmatrix}&#xA;= R&#xA;\begin{bmatrix}&#xA;X \\ Y \\ Z&#xA;\end{bmatrix}&#xA;+ t&#xA;$$&#xA;where $Z$ is known.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;3. Is there one term for the coordinates(x'', y'')?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;i'm not sure about that~&lt;/p&gt;&#xA;" OwnerUserId="17793" LastActivityDate="2017-08-19T04:03:02.937" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14048" PostTypeId="2" ParentId="14041" CreationDate="2017-08-19T05:00:45.103" Score="1" Body="&lt;p&gt;If you are talking about an encoder that would be used on a motor, an encoder is the device that encodes the position of the motor into a particular format, so used to determine the exact physical position of the motor at any one time, where as an ESC or Electronic Speed Controller is used to actually drive the motor to a different speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Generally speaking, the ESC would be used to make the motor turn and the encoder would be used to tell you what position the motor is in. Some ESC's have a sort of inbuilt encoder that detects what phase angle the motor is in so it can control the motor effectively, this is usually used on brushless DC motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this helps.&lt;/p&gt;&#xA;" OwnerUserId="17883" LastActivityDate="2017-08-19T05:00:45.103" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14049" PostTypeId="2" ParentId="14041" CreationDate="2017-08-19T06:52:32.013" Score="0" Body="&lt;p&gt;ESC can use back EMF or encoder to know the speed of motor, they can balance current to keep torque or speed constant.&#xA;I you are going to use a BLDC motor I suggest using VESC, is a very good esc, opensource and lots of people use it.&lt;/p&gt;&#xA;" OwnerUserId="17866" LastActivityDate="2017-08-19T06:52:32.013" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14050" PostTypeId="2" ParentId="14032" CreationDate="2017-08-19T07:04:04.840" Score="0" Body="&lt;p&gt;hard RTOS is up to few microseconds to nanoseconds, soft RTOS is between miliseconds to microseconds. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It depends how fast you are getting data from the sensors and how fast you need the controller to react. Most cases ubuntu works fine and you can use ROS. In cases of hard RTOS I prefer micro kernels like QNX. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If really want to get the best out of your industrial robot just go for a micro-kernel like QNX, there are ways to install modified versions of ROS then you can work over built controllers by the community. There are lots of good things already developed that will spare a good time.&lt;/p&gt;&#xA;" OwnerUserId="17866" LastActivityDate="2017-08-19T07:04:04.840" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14051" PostTypeId="1" CreationDate="2017-08-19T23:36:09.453" Score="3" ViewCount="299" Body="&lt;p&gt;I mounted VLP-16 on the roof of my car while driving, I was expecting the lidar to detect the lanes on the ground since the white lines should have higher reflectivity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But in fact I cannot see any patterns on the ground.  &lt;a href=&quot;https://i.stack.imgur.com/a68JA.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/a68JA.png&quot; alt=&quot;image&quot;&gt;&lt;/a&gt; This is  my rviz screenshot, I can get some higher intensity value on vertical objects, but cannot detect the lanes on the ground.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this normal? Do I need to calibrate my lidar for lane detection?&lt;/p&gt;&#xA;" OwnerUserId="17889" LastActivityDate="2018-02-20T00:49:51.590" Title="Cannot see ground plane patterns with LiDAR" Tags="&lt;lidar&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14052" PostTypeId="1" CreationDate="2017-08-20T01:03:46.107" Score="1" ViewCount="1043" Body="&lt;p&gt;I am doing the robot localisation project. Now I stuck on the effect of measurement and process noise in Kalman filtering. Could you please explain what impacts they have while estimating the position of the robot?! I mean how the error ellipsoid(which shows the pose uncertainty) changes with respect to changes in process and measurement noise?!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To estimate the pose of the robot, the two sources of information (dead-reckoning estimation and sensor measurements) are combined with Kalman filter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cheers, &#xA;nekromant&lt;/p&gt;&#xA;" OwnerUserId="17633" LastEditorUserId="17633" LastEditDate="2017-08-20T01:13:03.530" LastActivityDate="2017-09-19T04:08:22.933" Title="Process noise and Measurement noise in Kalman filter" Tags="&lt;mobile-robot&gt;&lt;localization&gt;&lt;kalman-filter&gt;&lt;errors&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14053" PostTypeId="2" ParentId="14052" CreationDate="2017-08-20T02:24:02.637" Score="2" Body="&lt;p&gt;Basically, the relative magnitude between process and measurement noise determines how much to trust a new sensor measurement. In one extreme, if the process noise is zero the kalman filter will effectively ignore new sensor measurements because you've told it the process model is perfect (i.e. zero noise). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the other extreme, if you set the process noise very large and the sensor noise very small it is like resetting the state to match the sensor reading. If your time updates happen at the same time as sensor updates, then this is effectively the same as just using the sensor without a filter. If your time updates happen faster than sensor readings, then you'll see the state drift according to your model during time updates and then do a sharp reset when the sensor reading arrives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In practice you likely have a noisy sensor and probably don't want to follow it exactly so you need to keep the sensor noise magnitude sufficiently large. If the system is drifting too much because of inaccuracies in the process model you add more process noise until you hopefully reach a happy medium.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2017-08-20T02:24:02.637" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14056" PostTypeId="2" ParentId="14051" CreationDate="2017-08-20T20:08:17.827" Score="0" Body="&lt;p&gt;VLP - 16, isn't capable of detecting lanes / strips on road, this lidar is not that sensitive, as per my research**&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You are more likely to get interest into image processing or look how a line follower robot works.&lt;/p&gt;&#xA;" OwnerUserId="16724" LastActivityDate="2017-08-20T20:08:17.827" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14057" PostTypeId="2" ParentId="12129" CreationDate="2017-08-20T20:16:16.600" Score="0" Body="&lt;p&gt;You can troubleshoot, send some value which lock at certain speed to left motor and read the speed,&#xA;Send same vlaues to right motor and again read the speed again.&#xA;Compare results,Watch for current draw in both the cases.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Try switching the channel of motors on bridge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the values are same and you get different speed, then there should be problem in hardware.&lt;/p&gt;&#xA;" OwnerUserId="16724" LastActivityDate="2017-08-20T20:16:16.600" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14058" PostTypeId="2" ParentId="6649" CreationDate="2017-08-21T02:18:29.163" Score="1" Body="&lt;p&gt;As you are using the Arduino, you should leverage the most from the community libraries. My advice would be to use the &lt;a href=&quot;https://playground.arduino.cc/Code/PIDLibrary&quot; rel=&quot;nofollow noreferrer&quot;&gt;PID library&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a detailed explanation about how the library works in that page. It is a link to the creators's blog. Also with explanations about how to tune up the Kp, Ki and Kd.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a similar project and it turned out to be too imprecise for us to use only a magnetometer. The worst scenario for a robot is to be next to a source of interference ( like a TV or a big metallic structure ) and then move several meters based on the decision taken when turning. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To solve these issues, we used a gyroscope ( L3G4200D in our case ). This is the code that we ended up using:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  unsigned long amount_off_target ;&#xA;  L3G4200D gyroscope;&#xA;  while (!gyroscope.begin(L3G4200D_SCALE_250DPS, L3G4200D_DATARATE_400HZ_50))  // Set scale 250 dps and 400HZ Output data rate (cut-off 50)&#xA;  {&#xA;    Serial.println(&quot;Could not find a valid L3G4200D sensor, check wiring!&quot;);&#xA;    return;&#xA;  }&#xA;  gyroscope.calibrate(100);&#xA;&#xA;  // here it goes some code referred to our encoders&#xA;&#xA;  double Setpoint = 0, Input = 0, Output = 0;&#xA;  const double scale_factor = 7000000.0f;&#xA;  PID myPID(&amp;amp;Input, &amp;amp;Output, &amp;amp;Setpoint, 9.5 / scale_factor, 4 / scale_factor, 3.5 / scale_factor, DIRECT);&#xA;&#xA;  myPID.SetMode(AUTOMATIC);&#xA;&#xA;&#xA;  myPID.SetOutputLimits(-50, 50);   // these parameters are related to your particular motor PWM values&#xA;  int min_power = MN_POWER+35;&#xA;&#xA;  long z_total = 0;&#xA;  Input = 0;&#xA;  const long target_z = long(float(degs) * (90000000.0f / 90.0f));&#xA;  unsigned long last_off_target = millis();&#xA;  unsigned long last_read_sensor = micros();&#xA;  const unsigned long started_turn = millis();&#xA;&#xA;  Setpoint = target_z;&#xA;  // Grace period to start moving&#xA;  long last_not_moving = millis() + 50;&#xA;&#xA;&#xA;  int direction;&#xA;&#xA;  while ((millis() - last_off_target) &amp;lt; 100L &amp;amp;&amp;amp; (millis() - started_turn) &amp;lt; 2000L)&#xA;  {&#xA;   // more code about our encoders goes here&#xA;    const long now_millis = millis();&#xA;    const long bump_min_speed_frequency = 10;&#xA;&#xA;&#xA;    amount_off_target = abs(z_total - target_z);&#xA;    if (amount_off_target &amp;gt; 2506516L) {   // here you decide that you are on target&#xA;      last_off_target = millis();&#xA;    }&#xA;&#xA;    const unsigned long read_sensor_time = micros();&#xA;    Vector norm = gyroscope.readNormalize();&#xA;    const long time_since_read = (read_sensor_time - last_read_sensor);&#xA;    last_read_sensor = read_sensor_time;&#xA;&#xA;    long yaw = (long)norm.ZAxis;&#xA;    z_total += yaw * time_since_read;&#xA;&#xA;    Input = double(z_total);&#xA;    myPID.Compute();&#xA;&#xA;    if (Output &amp;gt; 0) {&#xA;      direction = 1;&#xA;    }&#xA;    else {&#xA;      direction = -1;&#xA;    }&#xA;&#xA;    int mtr_pwr = min_power + abs(Output);&#xA;&#xA;&#xA;      motorRight( mtr_pwr, -direction);&#xA;      motorLeft( mtr_pwr, direction);&#xA;&#xA;  }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I hope that this works as a general principle of implementation. The main code structure can be easily understood if you look at this &lt;a href=&quot;http://www.modernroboticsinc.com/Content/Images/uploaded/Sensors/Modern_Robotics_Gryo_Sensor-Steering_Tutorial.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;PDF explaining it&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The code was tuned up by a real rockstar coder that worked with our team and it works surprisingly well in many diverse surfaces. You might notice that it overshoots a bit when it's on glass and undershoots when it's on a thick rug.&lt;/p&gt;&#xA;" OwnerUserId="17897" LastActivityDate="2017-08-21T02:18:29.163" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14059" PostTypeId="2" ParentId="14032" CreationDate="2017-08-21T03:21:00.540" Score="1" Body="&lt;p&gt;You should find it useful to read this &lt;a href=&quot;https://www.researchgate.net/project/A-Preview-of-Introduction-to-Fundamental-Principles-of-Dynamic-Real-Time-Systems&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.researchgate.net/project/A-Preview-of-Introduction-to-Fundamental-Principles-of-Dynamic-Real-Time-Systems&lt;/a&gt;. &quot;Hard&quot; real-time is a special case of the general case of &quot;real-time.&quot; You can easily find that there are as many ad hoc &quot;definitions&quot; of all real-time terms as there are sources for those &quot;definitions.&quot; That is a major disruption to both commerce and R&amp;amp;D in the real-time field. Such a thing is unimaginable in any other engineering or science field.&lt;/p&gt;&#xA;" OwnerUserId="17898" LastEditorUserId="17898" LastEditDate="2017-08-22T17:28:57.383" LastActivityDate="2017-08-22T17:28:57.383" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14061" PostTypeId="1" AcceptedAnswerId="14116" CreationDate="2017-08-21T10:16:15.667" Score="5" ViewCount="1109" Body="&lt;p&gt;As part of an internship I was asked to design and develop the core control system for an autonomous small-scale (2m length) solar vessel to be able to sail around the Baltic Sea.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The boat should be able to sail following predefined waypoints but, thanks to AIS, Camera (collision avoidance) and a path planning algorithm, redefine its route according to the obstacles sensed. For the hardware part it runs a Raspberry Pi with the high level navigation system and an Arduino to control propeller and actuators as well as provide basic navigation functions in case of Raspberry failure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, before digging into coding I checked for existing solutions and found out the ROS (Robot OS) middleware, which comes with interesting abstractions for the multi-threading and multi-processing, message exchange locally and among diverse hardware architectures (Raspberry and Arduino in this case). However, I am concerned ROS would add considerable load on the Raspberry processor and increase power consumption and it would prevent fine-grained control over hardware, probably system instability too on the long run. The control software has to access sleep functions on sensors and on the Pi itself, in case of power shortages, to dynamically suspend and restart processes and it needs to run 24/7 for months without human interaction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is ROS suited for these tasks or should I think about creating a custom software from scratch? Thanks&lt;/p&gt;&#xA;" OwnerUserId="16015" LastActivityDate="2017-09-07T00:24:12.387" Title="ROS for an autonomous boat" Tags="&lt;ros&gt;&lt;research&gt;&lt;automation&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14062" PostTypeId="1" AcceptedAnswerId="14063" CreationDate="2017-08-21T11:34:56.307" Score="1" ViewCount="107" Body="&lt;p&gt;I would bet that usually these are compiled for better performance, and of lawful reasons (make it harder for any user to save code without decompiling), though I'm not sure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In any case, I believe performance is the major consideration (I'm very new to programming and cannot tell how data processing of robots is different, say, than that of high-end PC games or heavy PC software and if performance considerations will be usually similar or how different).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are robot's codes usually installed when compiled from source code in an external computer or as pure source codes interpreted by some engine installed on the robots operating system?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(please example on JavaScript and Raspberry pi if possible at the moment).&lt;/p&gt;&#xA;" OwnerDisplayName="user16003" LastEditorUserId="158" LastEditDate="2017-08-22T13:49:58.437" LastActivityDate="2018-04-11T08:53:32.467" Title="Are robot's codes usually compiled or interpreted?" Tags="&lt;raspberry-pi&gt;&lt;power&gt;&lt;electronics&gt;&lt;programming-languages&gt;&lt;movement&gt;" AnswerCount="2" CommentCount="8" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14063" PostTypeId="2" ParentId="14062" CreationDate="2017-08-21T12:08:40.383" Score="4" Body="&lt;p&gt;Robots tend to be portable devices powered by batteries.  Portable battery operated devices tend to use embedded processors with limited power and memory. Compiled code has several advantages over interpreted code in such applications:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Compiled code usually takes up less space.  So you can have more code&#xA;in the same amount of space.&lt;/li&gt;&#xA;&lt;li&gt;Compiled code usually execute faster.  So batteries last longer.&lt;/li&gt;&#xA;&lt;li&gt;An interpreter does not need to be installed into the robot's limited&#xA;memory.  This frees up more space for code or data storage.&lt;/li&gt;&#xA;&lt;li&gt;As compiled code usually requires less resources on the mobile&#xA;platform, the mobile platform can be made with less expensive&#xA;parts.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;That said, it is not necessarily true that compiling code obfuscates it.  If enough effort is invested, nearly any compiled code can be understood.  It then becomes a matter of which is more efficient.  Replicating the features or backward engineering the compiled code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why most people tend to use interpretive languages such a Python on a Raspberry Pi is confusing.  (The Raspberry Pi is fast becoming a complete computer.)  This is likely because interpretive languages tend to be less confusing to use.  Where compiling code adds steps to the development process, interpretive code is simply run after specifying the interpreter.&lt;/p&gt;&#xA;" OwnerUserId="17364" LastEditorUserId="17364" LastEditDate="2017-08-21T12:17:41.933" LastActivityDate="2017-08-21T12:17:41.933" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14066" PostTypeId="1" CreationDate="2017-08-21T20:28:24.053" Score="3" ViewCount="92" Body="&lt;p&gt;I have a &lt;em&gt;Roomba 871&lt;/em&gt; and I am trying to communicate with it through the sci port.&#xA;I am using &lt;code&gt;RealmTerm&lt;/code&gt; for testing, I am trying it with the &lt;a href=&quot;http://www.robotappstore.com/Knowledge-Base/How-to-Use-a-RealTerm-Terminal/16.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;How to Program Roomba - RealTerm Terminal&lt;/a&gt; guide.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I try it with a baud rate of &lt;em&gt;57600&lt;/em&gt; the only thing I am able to is to get the Roomba to perform an spot cleaning. To get to that the only thing I have to do is to send it an value of &lt;code&gt;130-139, 230-239, 330-33&lt;/code&gt;... But I have to send it as ASCII not as Numbers, like mentioned in the description above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I try it with a baud rate of &lt;em&gt;115200&lt;/em&gt; the only thing I am able to do is to switch it off. But then it is switched off until I lift the Roomba up. Pushing the Power button does noting in that case. To switch it off I send the numbers like in the description above: &lt;code&gt;140 0 1 62 32&lt;/code&gt;  but send as numbers!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So this is quite strange and I really don't know what to do, so please help.&lt;/p&gt;&#xA;" OwnerUserId="17911" LastEditorUserId="2289" LastEditDate="2017-08-24T18:51:18.183" LastActivityDate="2017-09-23T20:26:47.990" Title="Communicate with Roomba 871" Tags="&lt;roomba&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14069" PostTypeId="2" ParentId="14066" CreationDate="2017-08-22T07:41:48.390" Score="1" Body="&lt;p&gt;The right baud rate is 115200. If you did not changed it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You need to send decimalcodes:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;128&lt;/code&gt; to start the interface.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;135&lt;/code&gt; to start or stop cleaning.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Try &lt;code&gt;128 135&lt;/code&gt; at first.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please refer to &lt;a href=&quot;https://www.irobot.com/~/media/MainSite/PDFs/About/STEM/Create/create_2_Open_Interface_Spec.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;iRobot® Create® 2 Open Interface (OI) Specification&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here you find HTerm with roomba commands: &lt;a href=&quot;http://static.vvcc.de/roomba/hterm_roomba.zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://static.vvcc.de/roomba/hterm_roomba.zip&lt;/a&gt;. Maybe it helps you. Just drag and drop &lt;code&gt;roomba.cfg&lt;/code&gt; to &lt;code&gt;HTerm.exe&lt;/code&gt;. No installation needed.&lt;/p&gt;&#xA;" OwnerUserId="17446" LastEditorUserId="17446" LastEditDate="2017-08-22T20:53:21.200" LastActivityDate="2017-08-22T20:53:21.200" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14071" PostTypeId="1" CreationDate="2017-08-22T13:34:15.080" Score="0" ViewCount="7697" Body="&lt;p&gt;My stepper motor specifications:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Phase = 2 &lt;/li&gt;&#xA;&lt;li&gt;step angle = 200 step/rev &lt;/li&gt;&#xA;&lt;li&gt;voltage = 12 V &lt;/li&gt;&#xA;&lt;li&gt;current = 0.33A/phase &lt;/li&gt;&#xA;&lt;li&gt;resistance = 34ohm/phase &lt;/li&gt;&#xA;&lt;li&gt;Inductance = 46omh/phase &lt;/li&gt;&#xA;&lt;li&gt;holding torque = 23N.cm min &lt;/li&gt;&#xA;&lt;li&gt;detent torque = 4.6N.cm min &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I am making a CNC machine so I need the power supply to power 3 of my stepper motor with these ratings. Can someone calculate the power supply voltage and the current I should get to power my CNC stepper motors? &lt;/p&gt;&#xA;" OwnerUserId="17919" LastEditorUserId="2289" LastEditDate="2017-08-26T17:57:19.230" LastActivityDate="2019-07-07T17:56:19.457" Title="How to calculate my power supply voltage and current?" Tags="&lt;stepper-motor&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14074" PostTypeId="1" AcceptedAnswerId="15850" CreationDate="2017-08-22T15:22:54.970" Score="2" ViewCount="94" Body="&lt;p&gt;If I have the following objects: A and B. A is a distance &quot;Y&quot; from the ultrasonic sense and B is a distance &quot;x&quot;.&#xA;If B is fix and A is moving, does the ultrasonic sense receive and detects A distance?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/9pYAj.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9pYAj.png&quot; alt=&quot;Ultrasonic sense and positions of objects&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="17922" LastEditorUserId="17922" LastEditDate="2018-04-05T00:32:49.420" LastActivityDate="2018-10-12T12:00:29.767" Title="How do ultrasonic range behave with two objects at differents distance?" Tags="&lt;arduino&gt;&lt;sensors&gt;&lt;ultrasonic-sensors&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14075" PostTypeId="1" AcceptedAnswerId="14079" CreationDate="2017-08-22T22:10:47.093" Score="2" ViewCount="90" Body="&lt;p&gt;We know that the Ultrasonic sensors can't accurately measure the distance to an object that&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;is more than 3 meters away (the distance may vary on brands)&lt;/li&gt;&#xA;&lt;li&gt;has it's reflective surface at a shallow angle (the angle may vary on brands)&lt;/li&gt;&#xA;&lt;li&gt;is too small to reflect enough sound&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://image.ibb.co/jesTj5/1.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://image.ibb.co/jesTj5/1.jpg&quot; alt=&quot;Ultrasonic Sensor&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also the environmental influences such as air tempereture, air pressure, air currents, humidity, mist and types of gas cause inaccurate measurements. Which sensor should i use to get the best measurements ?&lt;/p&gt;&#xA;" OwnerUserId="17914" LastActivityDate="2017-08-23T13:18:12.737" Title="Is there a better type of sensor to measure the distance instead of Ultrasonic sensors" Tags="&lt;sensors&gt;&lt;ultrasonic-sensors&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14079" PostTypeId="2" ParentId="14075" CreationDate="2017-08-23T13:18:12.737" Score="1" Body="&lt;p&gt;Yes, there are IR sensors as well, which provide ranges up to 3-4 meters &lt;a href=&quot;https://www.pololu.com/category/79/sharp-distance-sensors&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Pololu Range Finders&quot;&gt;Pololu Range Finder&lt;/a&gt;. Also, we can find Laser range finders that measure up to 30m distance. But these Laser range finders are expensive in compared to ultrasonic sensors and mostly used for mapping purposes.&lt;/p&gt;&#xA;" OwnerUserId="14471" LastActivityDate="2017-08-23T13:18:12.737" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14083" PostTypeId="1" CreationDate="2017-08-23T15:52:00.810" Score="0" ViewCount="207" Body="&lt;p&gt;I have a closed-loop system with the following discrete-time plant:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$P(z) = \frac{0.1262}{z^2-0.3303z+0.07517}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With a fixed (and horrendously low) sampling time of 0.05 seconds. The plant has a time constant of approximately 0.03 seconds - this was calculated using MATLABs System Identification Toolbox.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am trying to design a PI/PID controller that will attenuate load disturbances (injected after the plant) with frequencies &amp;lt; 1 Hz without amplifying higher frequencies. No matter how much I play with the gain and phase margins, I cannot seem to achieve this. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Seen below, is a picture showing a nasty bump between 1 and 6 Hz (circled in red) that I cannot seem to remove and retaining disturbance rejection at low frequencies. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/R5qpV.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/R5qpV.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I believe that this is an impossible task to accomplish with such a low sampling rate. If so, are there any other control typologies I can take a look at? In the past, I designed a &lt;a href=&quot;https://www.mathworks.com/help/control/examples/control-of-processes-with-long-dead-time-the-smith-predictor.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Smith predictor&lt;/a&gt;, and yes it improved disturbance rejection but not by very much - I am still getting amplification at higher frequencies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you,&lt;/p&gt;&#xA;" OwnerUserId="17268" LastActivityDate="2017-08-25T08:23:03.017" Title="Disturbance rejection of PID controller with low sampling rate" Tags="&lt;arduino&gt;&lt;control&gt;&lt;matlab&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14084" PostTypeId="1" CreationDate="2017-08-23T20:05:47.070" Score="5" ViewCount="183" Body="&lt;p&gt;I'm programming a quadcopter controller. I've managed to make it fly. But, I'm not sure how to set up the timings schedule for each part of the software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have several sensors (gyro, accelerometer, magnetometer, barometer) with output at various frequencies. Those data go into the sensor fusion. Then, the fused data goes through a PID controller. The PID output goes into the motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, my questions are:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;How often should I read samples from a sensor (read the register over i2c) with relation to the frequency I configure the sensor to? &lt;/li&gt;&#xA;&lt;li&gt;How should hardware filters such as a low pass filter on the accelerometer be applied here?&lt;/li&gt;&#xA;&lt;li&gt;How quickly (frequency wise) should I use that data during sensor fusion (such as a complementary filter)? Should the fusion timing be based on when a new sample is ready or do I run the fusion faster or slower than I sample? &lt;/li&gt;&#xA;&lt;li&gt;How do sensors sampling at different speeds affect fusion? For example, my magnetometer has a max data rate of 100hz, but currently, my gyroscope is running at 200hz.&lt;/li&gt;&#xA;&lt;li&gt;Should the PID controller run at a different rate from the fusion?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="17846" LastEditorUserId="9570" LastEditDate="2017-08-24T18:53:57.983" LastActivityDate="2017-10-02T10:22:46.707" Title="How do timings affect input, sensor fusion, and output?" Tags="&lt;quadcopter&gt;&lt;sensors&gt;&lt;pid&gt;&lt;sensor-fusion&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14085" PostTypeId="1" CreationDate="2017-08-24T09:09:38.503" Score="0" ViewCount="2687" Body="&lt;p&gt;Heres the Matlab code, I start with x and y and when I pass it through IK and Fk I get back the correct x and y thus I am confident that IK and Fk are correct.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;x = 10; y = 10; z = 0;&#xA;a2 = 7.5; a3 = 9;&#xA;r = sqrt(z^2 + y^2);&#xA;&#xA;th1 = atan2(y,x);&#xA;th3 = acos((r^2 + x^2 - (a2^2 + a3^2))/(2*a2*a3));&#xA;th2 = atan2(x,z) - atan2(a3*sin(th3), (a2 + a3*cos(th3)));&#xA;T0 = compute_dh_matrix(0,0,0,0);&#xA;T01 = T0*compute_dh_matrix(0, -pi/2, 0, th1);&#xA;T02 = T01 *compute_dh_matrix(7.5, 0, 0, th2-pi/2);&#xA;T03 = T02 *compute_dh_matrix(9, 0,0 , th3);&#xA;T03(1:3,4)&#xA;&#xA;%ans =&#xA;%&#xA;%    10.0&#xA;%    10.0&#xA;%       0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I have tower pro micro servos SG90 for base, shoulder and elbow joints.I am giving power using a mobile charger which outputs 5V and 2A.Now I want to try drawing some simple shapes with this robot I tried giving it the sequence of x and y locations with z=0, but the results seem not good.Do I need another DOF on the end effector?Is there any way to map x-y to the theat_start - theta_end for every angle?This is the diagram of the robot,&#xA; I have a small change as my zero position is upright not with a bend like below but the rotation and angles are the same.&lt;a href=&quot;https://i.stack.imgur.com/gwuep.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gwuep.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I am trying to draw in X, Y plane as Z is zero all the time.a2 and a3 are the link lengths.I don't know how to control the speed of the servos I just hacked the sweep code from Arduino.I just want to draw some basic shapes or a line, I tried giving (9,9), (10,10) and (11,11) thinking it will draw a line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/c1T7z.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/c1T7z.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These images show my setup in detail.I haven't taken all the offsets yet.I was getting close but not exact x and y that I entered into the IK-&gt;FK functions so I thought I could just work with less accuracy to get results quick.If you can help with IKfor offsets it would be great too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I really hope this is a problem that you guys consider as per the rules and as I have done work on FK and IK I hope this question makes sense.Thank you.&lt;/p&gt;&#xA;" OwnerUserId="14190" LastEditorUserId="14190" LastEditDate="2017-08-31T09:21:29.473" LastActivityDate="2017-11-30T09:32:12.257" Title="How can I draw with a 3 DOF RRR arm ,I have done the Forward and Inverse KInematics" Tags="&lt;robotic-arm&gt;&lt;motion&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14086" PostTypeId="1" AcceptedAnswerId="14087" CreationDate="2017-08-24T16:21:11.273" Score="1" ViewCount="47" Body="&lt;p&gt;I am trying to understand this IMU calibration video.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=xF7sLU0fX7k&amp;amp;feature=em-comments&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=xF7sLU0fX7k&amp;amp;feature=em-comments&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the video the operator gets accelerometer data when pointing each axis in the gravity direction. He then has an algorithm at minute 6:34. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know where this algorithm comes from.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My understanding of how you get an accelerometer bias is you add the output when an axis is pointing in the gravity direction to the output when that axis is pointing antiparallel to gravity and then you divide by 2. Where is he getting this algorithm?&lt;/p&gt;&#xA;" OwnerUserId="17461" LastActivityDate="2017-09-23T17:24:00.293" Title="Can someone explain what is going on in this calibration video?" Tags="&lt;imu&gt;&lt;calibration&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14087" PostTypeId="2" ParentId="14086" CreationDate="2017-08-24T16:41:48.457" Score="1" Body="&lt;p&gt;Let b, the bias error of a sensor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you take two measurements of a known value (gravitational acceleration in this case), in opposite directions, say m1 and m2, without any bias towards any direction the following is true:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) m1 + m2 = 0.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, if there's a directional bias error, the sensor readings become:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) (m1 + b) + (m2 + b) = 2b.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this gives some explanation.&lt;/p&gt;&#xA;" OwnerUserId="9570" LastActivityDate="2017-08-24T16:41:48.457" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14088" PostTypeId="1" AcceptedAnswerId="14161" CreationDate="2017-08-24T16:59:43.170" Score="4" ViewCount="155" Body="&lt;p&gt;I'm working on a self-balancing TWIP (Two-Wheel Inverted-Pendulum) robot project which will be using two brushed DC gearmotors with encoders.  As there were no speed constraints for the robot (and given a wheel radius of 0.03m) I chose a top speed of 1 m/s for the robot, giving a rated speed requirement of 318.28RPM for the gearmotor.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;From what I understand, a high enough RPM is required to prevent the motor speed from saturating while the robot is balancing, as this can prevent the robot from maintaining balance i.e. the wheels can’t keep up with the body of the robot, and it falls over.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, an encoder allows for direct measurement and control of the motor's speed, which can prevent it saturating i.e. it can prevent the motor from approaching speeds it can’t handle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, will the RPM I’ve calculated be fast enough for the robot or, since I’m using motors with encoders, can any motor speed be used?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/sRjUb.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/sRjUb.jpg&quot; alt=&quot;Robot specs&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/VHnNa.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/VHnNa.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="7820" LastEditorUserId="7820" LastEditDate="2017-09-06T20:14:31.310" LastActivityDate="2017-09-07T12:40:13.527" Title="TWIP robot - DC gearmotor speed/Encoders" Tags="&lt;motor&gt;&lt;wheeled-robot&gt;&lt;two-wheeled&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14089" PostTypeId="2" ParentId="14085" CreationDate="2017-08-24T23:06:48.940" Score="0" Body="&lt;p&gt;If you consider your robot's pose &lt;em&gt;in the plane of the upper arm and forearm,&lt;/em&gt; you'll see that you have a 2dof planar mechanism which gets rotated by the waist joint.   With only 2 dof in that plane, you can specify the x and y coordinates where you want to draw, but you cannot independently change the angle of the tool tip - it will be whatever it needs to be to reach those coordinates.  Your only options are to draw with a pen or brush that has a very large drawing tip (and hopefully circular or spherical), or to add a single wrist motor with which you can change the angle of the pen.   You'll have to solve for 4 dof inverse kinematics in this case.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2017-08-24T23:06:48.940" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="14090" PostTypeId="1" CreationDate="2017-08-24T23:12:42.390" Score="1" ViewCount="60" Body="&lt;p&gt;In our lab we mostly use ATI 6DOF force sensors, but they are so difficult that I just want to kill myself every time I have to use them. The reasons I don't like them are:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;For the version I have (&lt;a href=&quot;http://www.ati-ia.com/products/ft/ft_models.aspx?id=Mini45&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mini45&lt;/a&gt;), I have to use a NI DAQ to read data from and NI DAQmx drivers are only x86 and mostly windows, not compatible with mac, &lt;a href=&quot;https://arduino.stackexchange.com/questions/43990/how-to-read-data-from-an-ni-daq/44015?noredirect=1#comment86883_44015&quot;&gt;Arduino&lt;/a&gt; or &lt;a href=&quot;https://raspberrypi.stackexchange.com/questions/71614/how-to-read-data-from-an-ni-daq-usb-6259&quot;&gt;Rasperry pi&lt;/a&gt; which I use to control experimental setups.&lt;/li&gt;&#xA;&lt;li&gt;I could have used one of those &lt;a href=&quot;http://www.ati-ia.com/products/ft/ft_NetFT.aspx&quot; rel=&quot;nofollow noreferrer&quot;&gt;NetBoxes&lt;/a&gt;, but I have to pay a couple of thousands to buy one, probably a couple of thousands to calibrate the sensor, and wait a couple of month to get it calibrated and etc.&lt;/li&gt;&#xA;&lt;li&gt;They are so difficult to use. They have this GUI (only windows) which you have to install (which BTW reminds me of the kind of software we used to use in 90s). They have also some LabView examples. These  are way too complicated to get around!&lt;/li&gt;&#xA;&lt;li&gt;Even when you get them to work the signal is horribly noisy and you have to do all kind of magic filtering to get something useful. &lt;/li&gt;&#xA;&lt;li&gt;they are very sensitive. For example if they are in contact with a cold metal or there is air blowing at them (which in my experiments including pneumatics happening a lot), they just give wrong measurements.&lt;/li&gt;&#xA;&lt;li&gt;They are so delicate that if you bend the cable too much or screw them to your structure too hard they are broken and you have to pay a couple of thousands to send them back and fix!&lt;/li&gt;&#xA;&lt;li&gt;the whole sensor+driver+DAQ is like a whole table full of cables and boxes! &lt;/li&gt;&#xA;&lt;li&gt;customer service is bad. They are just like chatbots giving you pre-prepared answers!&lt;/li&gt;&#xA;&lt;li&gt;no forum or user community (to my knowledge)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I just don't know why everyone keep using them. I'm really tired of all that wasting my time and resources. I was wondering if you could give me some suggestions. What I need&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;one dimensional force sensor&lt;/li&gt;&#xA;&lt;li&gt;5V analogue output which I can measure with for example Arduino. Or a USB serial port which I can read with PuTTy for example.&lt;/li&gt;&#xA;&lt;li&gt;up to 1200N&lt;/li&gt;&#xA;&lt;li&gt;resolution is not that important. If I use an Arduino to read then 1200/1023 is the maximum resolution I can read anyway.&lt;/li&gt;&#xA;&lt;li&gt;It must be affordable. not more than 100€ lets say&lt;/li&gt;&#xA;&lt;li&gt;available here in Europe. with good local customer service&lt;/li&gt;&#xA;&lt;li&gt;with good examples and tutorials and good user community&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I did google first, but there seems to be way too much options that I'm confused which one to choose. Thought maybe you can share experience and give me some insights.&lt;/p&gt;&#xA;" OwnerUserId="13596" LastEditorUserId="13596" LastEditDate="2017-08-28T13:13:16.230" LastActivityDate="2017-08-28T13:13:16.230" Title="affordable and easy to use one dimensional force sensor or load-cell" Tags="&lt;force-sensor&gt;" AnswerCount="0" CommentCount="4" FavoriteCount="1" ClosedDate="2017-09-04T15:16:46.427" ContentLicense="CC BY-SA 3.0" />
  <row Id="14091" PostTypeId="1" CreationDate="2017-08-25T06:33:05.530" Score="1" ViewCount="223" Body="&lt;p&gt;I want to design an octocopter that will respond to incidences of crime and terrorist attacks. Survey and gather intel and come back to HQ. I have used a &lt;a href=&quot;http://www.genstattu.com/tattu-16000mah-15c-6s1p-lipo-battery-pack-with-ec5-plug.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;16000mAh 6S lipo battery&lt;/a&gt; with no lead, but only can  flight 20mins.&#xA;I want this Octocopter to carry radioactive/chemical testing equipment and have a flight time of 45 mins&#xA;How likely am i to achieve 45min flight times? &#xA;There must be a way of optimizing flight time. I know i can double the amount of batteries but this may make the craft unstable I may need to scale up on motor size to make payload less of an issue..&#xA;The larger the craft the more dangerous and costly the craft. So i'm really interested in optimizing it the best i can.&#xA;I know there are hydrogen fuel cells, maybe some other sort of alternative battery.&#xA;Please help thanks&lt;/p&gt;&#xA;" OwnerUserId="17800" LastActivityDate="2019-05-15T03:45:29.460" Title="How to get longest flight time on octocopter that has decent payload already on it?" Tags="&lt;quadcopter&gt;" AnswerCount="4" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14092" PostTypeId="2" ParentId="14083" CreationDate="2017-08-25T08:23:03.017" Score="1" Body="&lt;p&gt;Because the plant has a delay of two samples it will never be possible to cancel the disturbances completely, because then you would have to predict the disturbance those two samples ahead of time. Also a Smith predictor is therefore only useful for obtaining a desirable complementary sensitivity transfer function.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also believe your are limited by the &lt;a href=&quot;https://en.wikipedia.org/wiki/Bode%27s_sensitivity_integral&quot; rel=&quot;nofollow noreferrer&quot;&gt;waterbed effect&lt;/a&gt;. According to this attenuating below 1 Hz and not amplify above that would be impossible. I gave it a try myself and was able to limit the peek of the sensitivity function to 4.06 dB while still satisfying the attenuating below 1 Hz. However lowering it to attenuating below 0.6 Hz gave me a peek of only 1.54 dB. Namely the waterbed effect roughly says that if you want to lower the magnitude of the sensitivity in a certain frequency range, then it has to go up somewhere else.&lt;/p&gt;&#xA;" OwnerUserId="1487" LastActivityDate="2017-08-25T08:23:03.017" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14093" PostTypeId="1" CreationDate="2017-08-26T00:51:59.440" Score="2" ViewCount="169" Body="&lt;p&gt;I have recently finished the &lt;a href=&quot;https://www.coursera.org/learn/robotics-motion-planning/home/welcome&quot; rel=&quot;nofollow noreferrer&quot;&gt;coursera Motion Planning&lt;/a&gt; course and I am looking for a project to do, using ROS, OpenRave, Gazebo and similar tools. My project would be in the area of motion planning for a mobile robot. The objective is to take a &lt;a href=&quot;http://www.turtlebot.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;turtlebot&lt;/a&gt; from point A to point B in an environment with dynamic obstacles. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am looking for suggestions regarding the software architecture and how to connect the above mentioned tools together.&lt;/p&gt;&#xA;" OwnerUserId="10959" LastActivityDate="2017-08-26T00:51:59.440" Title="Getting started with motion planning" Tags="&lt;ros&gt;&lt;motion-planning&gt;&lt;gazebo&gt;" AnswerCount="0" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14095" PostTypeId="2" ParentId="12671" CreationDate="2017-08-26T09:30:29.550" Score="6" Body="&lt;p&gt;AprilTag is the state-of-the-art solution for pose estimation. The library itself already has pre-built functions to compute the marker position, given its size. The pose is estimated by homography decomposition and it's quite good if you don't go too far (2 or 3 meters for a 20cm marker). There is the C implementation made by the authors at University of Michigan (now AprilTag 2, look &lt;a href=&quot;https://april.eecs.umich.edu/software/apriltag.html&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;) or you can go with the MIT C++ implementation of the original algorithm, &lt;a href=&quot;http://people.csail.mit.edu/kaess/apriltags/&quot; rel=&quot;noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are many kind of fiducial markers anyway, and it is very difficult to tell which should be the best for you. For a recent project in which I had to estimate the marker poses from a monocular camera mounted on a quadcopter I made a modified version of the AprilTag adding circles around the marker to improve pose stability. Also, I preferred to compute the pose using the Perspective-N-Point method, by using the &lt;a href=&quot;http://docs.opencv.org/2.4/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html#solvepnp&quot; rel=&quot;noreferrer&quot;&gt;solvePnP&lt;/a&gt; function included in OpenCV.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I see now this nice novelty, &lt;a href=&quot;https://arxiv.org/abs/1707.06292&quot; rel=&quot;noreferrer&quot;&gt;STag&lt;/a&gt;: you could also give it a try... seems promising, never used though, is really new (July 2017)&lt;/p&gt;&#xA;" OwnerUserId="17030" LastEditorUserId="17030" LastEditDate="2017-08-26T09:46:29.300" LastActivityDate="2017-08-26T09:46:29.300" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14099" PostTypeId="2" ParentId="14071" CreationDate="2017-08-27T06:38:41.677" Score="1" Body="&lt;p&gt;The given current per phase is an approximate value which you could have calculated by Ohm's Law - it is just the voltage (12V) divided by the resistance per phase (34 ohms):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;12 / 34 = 0.353A&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the maximum current that the motor windings can handle without overheating (which is why they're rounded it down to 0.33A/phase).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How much current the stepper motor will actually draw depends on how you intend to use it. However, stepper motors draw the most current when they are standing still. This means that Ohm's law (above) can to used to calculate the current requirements of the driver.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You have 2 phases, and a current per phase of 0.33A, so your total current shouldn't exceed 0.66A per motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're using 3 motors, and a 12V power supply, your total current should not exceed 0.66A per motor x 3 motors = 1.98A.&lt;/p&gt;&#xA;" OwnerUserId="17029" LastActivityDate="2017-08-27T06:38:41.677" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14100" PostTypeId="2" ParentId="14091" CreationDate="2017-08-27T12:05:14.120" Score="0" Body="&lt;p&gt;Hello I have experience in building rigs for all sorts of uses. If you are from any rescue service I suggest you contact someone proffesionally. Hydrogen fuel cells I think are overkill. Try 20000mah batteryes and make a hexacopter or quadcopter with more powerfull motors to compensate wattage. I am guessing your best bet in flight time is about 30-40 mins since the record is just bellow an hour. I guess you are informed on long range systems and athaurized to fly in urban areas. You should set a budget since this builds get extreemly expensive. Good flight times are achived trying. And about the chemical stuff I don´t think you can fly that over an urban area&lt;/p&gt;&#xA;" OwnerUserId="17963" LastActivityDate="2017-08-27T12:05:14.120" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14101" PostTypeId="1" CreationDate="2017-08-27T12:09:58.780" Score="7" ViewCount="1328" Body="&lt;p&gt;I'm a beginner in robotics and I'm planning to do a basic navigation problem for differential drive robot. I know the concept involved and can code it in the arduino but I came to know about ROS and other robotic toolbox.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How is it useful if I wanted to improve myself in the concepts from scratch?&lt;/p&gt;&#xA;" OwnerUserId="17901" LastEditorUserId="2289" LastEditDate="2017-08-28T18:16:35.607" LastActivityDate="2017-08-28T18:16:35.607" Title="Why do we need ROS?" Tags="&lt;ros&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14102" PostTypeId="2" ParentId="14101" CreationDate="2017-08-27T13:11:46.917" Score="10" Body="&lt;p&gt;I think it is safe to say that ROS adds a lot of value to many robotics applications, but it definitely isn't appropriate for &lt;em&gt;every&lt;/em&gt; robotics application&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, the &lt;a href=&quot;http://www.ros.org/&quot; rel=&quot;noreferrer&quot;&gt;ROS website&lt;/a&gt; has a series of pages that address that very point. These pages explain&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the major &lt;a href=&quot;http://www.ros.org/is-ros-for-me/&quot; rel=&quot;noreferrer&quot;&gt;broad advantages of using ROS&lt;/a&gt;,&lt;/li&gt;&#xA;&lt;li&gt;the &lt;a href=&quot;http://www.ros.org/core-components/&quot; rel=&quot;noreferrer&quot;&gt;core components that go to make up ROS&lt;/a&gt;, and also&lt;/li&gt;&#xA;&lt;li&gt;describe how ROS &lt;a href=&quot;http://www.ros.org/integration/&quot; rel=&quot;noreferrer&quot;&gt;integrates with other libraries&lt;/a&gt; used in&#xA;robotics.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The single major disadvantage with ROS is actually the time that it takes to learn ROS. It is not an easy learning-curve for people new to robotics, and it can take a long time before you are able to enjoy the benefits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, there are now rather more &quot;accessible&quot; texts on ROS available on the market. For example, &lt;a href=&quot;https://www.cse.sc.edu/~jokane/agitr/&quot; rel=&quot;noreferrer&quot;&gt;A Gentle Introduction to ROS&lt;/a&gt; and &lt;a href=&quot;https://books.google.co.uk/books?id=3_1vDQAAQBAJ&amp;amp;printsec=frontcover#v=onepage&amp;amp;q&amp;amp;f=false&quot; rel=&quot;noreferrer&quot;&gt;ROS Robotics By Example&lt;/a&gt;. These can make that learning-curve a little less daunting.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;In your specific case, where you are looking at coding for a basic navigation problem for a differential drive robot using an Arduino, it is unlikely that ROS would be appropriate. It isn't possible to run ROS on an Arduino (although it is perfectly possible to run ROS on a Raspberry Pi).&lt;/p&gt;&#xA;" OwnerUserId="17029" LastEditorUserId="17029" LastEditDate="2017-08-27T14:26:08.237" LastActivityDate="2017-08-27T14:26:08.237" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14104" PostTypeId="1" AcceptedAnswerId="14395" CreationDate="2017-08-28T12:06:28.360" Score="2" ViewCount="514" Body="&lt;p&gt;I read in this &lt;a href=&quot;http://rpg.ifi.uzh.ch/docs/teaching/2016/13_visual_inertial_fusion_advanced.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;set of slides&lt;/a&gt; on p.11 that the IMU measurements, such as acceleration are affected by bias and noise, as expressed in this equation:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$_B \mathbf {\tilde a} _{WB}(t) =\  \mathbf R_{BW}(t)(_W \mathbf a_{WB}(t) -\ _W \mathbf g) + \mathbf b^a(t) + \mathbf n^a(t)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $b^a(t)$ is the bias of the accelerometer, $n^a(t)$ is the noise of the accelerometer, ${\tilde a}(t)$ is the measured acceleration, and a(t) is the true acceleration. As for notations:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Left subscript denotes the reference frame in which the quantity is expressed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Right subscript {Q}{Frame1}{Frame2} denotes Q of Frame2 with respect to Frame1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Last of all, noises and bias are all in the body frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;What I would like to ask is what does the $R$ term in the equation mean and do?&lt;/strong&gt; I'm guessing it is a rotation, but why is it needed? Sorry if this question seems trivial, but I'm new to all this and my physics is terrible... Thank you!&lt;/p&gt;&#xA;" OwnerUserId="17977" LastEditorUserId="17977" LastEditDate="2017-08-28T12:27:53.383" LastActivityDate="2017-10-08T02:28:24.217" Title="IMU measurement model" Tags="&lt;kinematics&gt;&lt;imu&gt;&lt;accelerometer&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14109" PostTypeId="1" CreationDate="2017-08-29T10:31:17.757" Score="-1" ViewCount="196" Body="&lt;p&gt;I used EKF to observe the quaternion and extract the roll, pitch  and yaw angles. The used sensors are Gyro sensor and acceleration sensor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The roll and pitch angle looks like proper but the yaw angle is not proper.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this case , I can't get the correct yaw angle? If I add a magnetic sensor and estimate the state using EKF, could I  get the proper yaw angle?&lt;/p&gt;&#xA;" OwnerUserId="17920" LastEditorUserId="18235" LastEditDate="2018-03-28T18:34:44.353" LastActivityDate="2018-07-26T21:01:03.287" Title="Calculated yaw angle is not poper (EKF)" Tags="&lt;ekf&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14110" PostTypeId="2" ParentId="14109" CreationDate="2017-08-29T11:13:07.727" Score="0" Body="&lt;p&gt;Yes, you need to add another sensor such as magnometer. The accelerometer tells you which direction is 'down'. Whether you are facing north, east, south, or west 'down' is still the same so the accelerometer alone can't tell you that information but a magnometer can. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;One thing to be careful of is the magnometer will also provide some information about roll/pitch but usually you don't want this. You can either use the magnometer values outside the EKF to estimate yaw, which is fine if you are close to zero roll/pitch, or you can make sure the magnometer weights are smaller than the accelerometer weights.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2017-08-29T11:13:07.727" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="14112" PostTypeId="1" CreationDate="2017-08-28T17:07:18.307" Score="0" ViewCount="23" Body="&lt;p&gt;I'm dealing with a problem where sometimes an object I'm looking at using RF signals can appear to be somewhere it's not due to the bouncing of the waves.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Currently what I have in place is a circular buffer that keeps the past 200 timestamps correlated to when it was seen it in that zone. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once it sees that the object has been seen in two different zones it calculates the average time it was seen in both zones and returns the zone with the greater time. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This works pretty great under ideal conditions but sometimes the zones can be in a tight clusters so it's possible it sees 3 or more zones at once. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I understand this isn't exactly an easy problem to solve and I'm not looking for an answer on exactly what to do. I'm not sure if it's even possible to get something with 100 percent correct results but maybe some advice to improve what I have. &lt;/p&gt;&#xA;" OwnerDisplayName="Sam" LastEditorUserId="9176" LastEditDate="2018-11-08T16:02:02.113" LastActivityDate="2018-11-08T16:02:02.113" Title="How to improve confidence an object is in a particular place" Tags="&lt;sensors&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="14113" PostTypeId="1" AcceptedAnswerId="14114" CreationDate="2017-08-29T16:14:14.527" Score="1" ViewCount="71" Body="&lt;p&gt;I've been working on a module that takes in planar poses $\begin{bmatrix} x_{t_{k}} &amp;amp;   y_{t_{k}} &amp;amp; \theta_{t_{k}}\end{bmatrix}^{T}$ and spits out expected robot states $\begin{bmatrix} x_{t_{k}} &amp;amp;   y_{t_{k}} &amp;amp; \theta_{t_{k}} &amp;amp; \dot{x}_{t_{k}} &amp;amp;   \dot{y}_{t_{k}} &amp;amp; \dot{\theta}_{t_{k}} \end{bmatrix}^{T}$. Essentially, I'm giving the velocity I expect the robot to reach at each pose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've been looking for the proper terminology for a module like this, both so I can write more readable code and so that I can do a better literature search. What would this kind of thing be called? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="17996" LastActivityDate="2017-08-30T17:53:20.327" Title="Is there a formal name for translating poses into robot states?" Tags="&lt;mobile-robot&gt;&lt;control&gt;&lt;motion-planning&gt;&lt;path-planning&gt;" AnswerCount="2" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="14114" PostTypeId="2" ParentId="14113" CreationDate="2017-08-29T23:22:00.370" Score="1" Body="&lt;p&gt;It is a little tough to tell what you are asking because of the limited information.  It would be helpful if you would show how these vectors fit in your control scheme.  However, I'll start an answer and maybe we can arrive at the one you need.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are strictly talking about the positions and velocities &lt;em&gt;without regard for how to control them to achieve those poses,&lt;/em&gt; then you are just describing differential, or velocity, kinematics.  The arrangement into new pose vectors isn't meaningful in this case.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are trying to do this to achieve positional via points which are arrived at with a certain velocity, you may benefit from studying velocity control.  Off the top of my head I believe Hollerbach had some seminal work in this, but I could be mistaken.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are actually concerned with the robot's position and velocities as states to feed into a controller, then you should study state space control.  @Chuck has answered some questions with excellent descriptions of state space, and there are numerous other public sources available.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT BASED ON OP's COMMENT&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks for describing the scheme.  It would be best to put that into your question since comments can disappear eventually. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You are describing an aspect of robotic controls that is generally called path planning, trajectory generation, or sometimes trajectory planning.  Purists will differentiate between path planning and trajectory planning in that path planning refers to the geometry of the path (in operational and/or configuration space) only, whereas trajectory planning includes a time element.  So your approach is really about trajectory planning, although the literature doesn't always separate the two like that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The literature in this field includes planning for robotic manipulators, redundant robots, and mobile robots.  Often the path planning problem includes avoiding obstacles or optimizing some run-time criterion.  However, there are also many earlier papers which describe the planning aspect of manipulators without regard to obstacles.  Frequently those papers describe time-optimal methods for achieving target trajectories.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may want to start your research looking for work by Bruno Siciliano.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastEditorUserId="11125" LastEditDate="2017-08-30T17:53:20.327" LastActivityDate="2017-08-30T17:53:20.327" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14115" PostTypeId="2" ParentId="14113" CreationDate="2017-08-30T00:34:23.847" Score="0" Body="&lt;p&gt;It depends on how you compute those velocity coordinates.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, if you compute the velocity based on the information about previous (and probably future) poses, it is called &lt;em&gt;interpolation&lt;/em&gt;. Literature in this area focuses mainly on &lt;em&gt;polynomial&lt;/em&gt; or &lt;em&gt;spline&lt;/em&gt; interpolation. But if you do the search, the papers likely appear under the term &lt;em&gt;trajectory generation&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If there are also sensor data and other stuff coming in real-time that you take into account, you might want to search &lt;em&gt;on-line trajectory generation&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you codes are for mobile robots, you might also want to study &lt;em&gt;nonholonomic constraints&lt;/em&gt; as well. (The constraints basically say that an ordinary car cannot move sideways, etc.) So that you can generate achievable velocity.&lt;/p&gt;&#xA;" OwnerUserId="7610" LastActivityDate="2017-08-30T00:34:23.847" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14116" PostTypeId="2" ParentId="14061" CreationDate="2017-08-30T04:49:14.623" Score="4" Body="&lt;p&gt;ROS will work fine for this task. It will add some additional overhead for your Raspberry Pi but it is fairly small provided you only install the Robotic or Base configuration instead of the Full configuration and are using a headless (no GUI) Raspberry Pi install. My company uses ROS on self-driving cars and ROS has, so far, never been the cause of a fault - it has always been hardware- or coding-related. Here is your trade-off:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ROS Pros:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Fairly complete, stable messaging framework.&lt;/li&gt;&#xA;&lt;li&gt;Allows inter-process message passing without network overhead (see nodelets).&lt;/li&gt;&#xA;&lt;li&gt;Large library of pre-defined message types and utilities (like &lt;code&gt;tf&lt;/code&gt; which does coordinate transforms with very little effort).&lt;/li&gt;&#xA;&lt;li&gt;Community support for portions of your framework that you wouldn't otherwise have.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;ROS Cons:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Some overhead associated with running &lt;code&gt;roscore&lt;/code&gt; and the message serialization/deserialization process.&lt;/li&gt;&#xA;&lt;li&gt;Without implementing the features on your own, there is very little in the way of Quality of Service regarding message transport (this is coming in ROS 2.0).&lt;/li&gt;&#xA;&lt;li&gt;Only supports Python and C++. This is not a problem for some people but could be a drawback for others.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="837" LastActivityDate="2017-08-30T04:49:14.623" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14117" PostTypeId="2" ParentId="14004" CreationDate="2017-08-30T05:04:39.750" Score="0" Body="&lt;p&gt;You can pipe the output to &lt;a href=&quot;https://en.wikipedia.org/wiki/Wc_%28Unix%29&quot; rel=&quot;nofollow noreferrer&quot;&gt;wc&lt;/a&gt; with the &lt;code&gt;-l&lt;/code&gt; flag for line counting:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;candump can0 | wc -l&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="837" LastActivityDate="2017-08-30T05:04:39.750" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14118" PostTypeId="5" CreationDate="2017-08-30T05:08:49.047" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2017-08-30T05:08:49.047" LastActivityDate="2017-08-30T05:08:49.047" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14119" PostTypeId="4" CreationDate="2017-08-30T05:08:49.047" Score="0" Body="Questions related to Controller Area Network (CAN) protocol, physical bus configuration, or the transmission, reception, and parsing of CAN messages." OwnerUserId="837" LastEditorUserId="837" LastEditDate="2017-08-30T21:13:50.067" LastActivityDate="2017-08-30T21:13:50.067" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14124" PostTypeId="2" ParentId="14061" CreationDate="2017-08-30T17:41:40.427" Score="2" Body="&lt;p&gt;For an autonomous boat, you might want to look into MOOS-IVP: &lt;a href=&quot;http://oceanai.mit.edu/moos-ivp/pmwiki/pmwiki.php?n=Main.HomePageFull&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://oceanai.mit.edu/moos-ivp/pmwiki/pmwiki.php?n=Main.HomePageFull&lt;/a&gt;.  It is similar to ROS in many respects, but geared towards autonomous boats instead of land vehicles.  However, both middlewares are sufficiently abstract that they can handle land or sea vehicles just fine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However I can't speak to it's ease of integration w.r.t. ROS, or its ability to run on small processors like the RasPi.  But see comments below.&lt;/p&gt;&#xA;" OwnerUserId="110" LastEditorUserId="110" LastEditDate="2017-08-31T19:34:27.847" LastActivityDate="2017-08-31T19:34:27.847" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="14125" PostTypeId="1" CreationDate="2017-08-30T17:56:49.003" Score="0" ViewCount="89" Body="&lt;p&gt;I am working on a project which involves multiple quadcopters working about 5 km away from the ground control station. The communication is planned to be done using RFD868+ modules on each of the drones from jdrones. When these quadcopters are in motion, will there be packet loss in the telemetry commands sent to the individual quadcopters due to the doppler effect? I believe there should not be any issue as the velocity of the quadcopters is miniscule when compared to the speed of light. Am i right ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also when multiple quadcopters are trying to communicate using this system, is there any alternative to CSMA CD ? (It is in a mesh topology)&lt;/p&gt;&#xA;" OwnerUserId="18007" LastActivityDate="2017-09-05T11:06:57.030" Title="Doppler effect in long distance communication using 868MHz band for telemetry signals" Tags="&lt;quadcopter&gt;&lt;communication&gt;&lt;swarm&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14126" PostTypeId="1" AcceptedAnswerId="14174" CreationDate="2017-08-30T19:22:46.710" Score="3" ViewCount="401" Body="&lt;p&gt;I wonder if Extended Kalman Filter(EKF) is used in robotics, or is only Kalman Filter(KF) used in robotics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Kalman Filter is included in Linear Quadratic Gaussian(LQG) controllers. But how would EKF work i practice?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know how to build a Extended Kalman Filter just by linearizing the mathematical model in the estimated state vector. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is your experience in EKF? &lt;/p&gt;&#xA;" OwnerUserId="17252" LastActivityDate="2017-09-07T15:39:45.140" Title="Extended Kalman Filter in robotics - Worth it?" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;kalman-filter&gt;&lt;industrial-robot&gt;" AnswerCount="1" CommentCount="7" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14128" PostTypeId="2" ParentId="14061" CreationDate="2017-08-30T21:55:11.100" Score="1" Body="&lt;p&gt;What you are looking to produce is certainly achievable using the ROS middleware. As Joshua has already pointed out, there will be some additional overhead but this should be relatively small.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is probably worth carrying out a literature search to investigate how other Autonomous Surface Vehicles (ASVs) have incorporated ROS into their software architecture. Published papers on ASVs like the &lt;a href=&quot;https://www.researchgate.net/publication/289795245_Squirtle_An_ASV_for_Inland_Water_Environmental_Monitoring&quot; rel=&quot;nofollow noreferrer&quot;&gt;Squirtle&lt;/a&gt; should provide you with a useful overview of the pros and cons of incorporating ROS into your design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As regards the &quot;harsh&quot; environment of the Baltic, I'm aware of a number of ASVs that have been deployed there, for example &lt;a href=&quot;http://hiswasymposium.com/assets/files/pdf/2012/Stelzer.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Roboat&lt;/a&gt;, (although I'm not sure whether Roboat actually incorporated ROS). Again, a search of the literature should help you quantify the potential issues and help you decide whether ROS is appropriate.&lt;/p&gt;&#xA;" OwnerUserId="17029" LastEditorUserId="17029" LastEditDate="2017-09-07T00:24:12.387" LastActivityDate="2017-09-07T00:24:12.387" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14131" PostTypeId="1" AcceptedAnswerId="14137" CreationDate="2017-08-31T08:47:52.540" Score="1" ViewCount="603" Body="&lt;p&gt;i have been trying to extract rate random walk paramater from the data sheet but couldnt find any clue ...&#xA;is there any way to do  that or what ? how should it be calculated  ?&#xA;thanks !&lt;/p&gt;&#xA;" OwnerUserId="18011" LastActivityDate="2017-08-31T22:47:33.343" Title="Rate random walk from datasheet MPU6050" Tags="&lt;gyroscope&gt;" AnswerCount="1" CommentCount="3" ClosedDate="2017-09-01T14:46:57.587" ContentLicense="CC BY-SA 3.0" />
  <row Id="14132" PostTypeId="1" CreationDate="2017-08-31T12:09:41.370" Score="0" ViewCount="54" Body="&lt;p&gt;I am working on a robot project in which I use an arduino mega as the main processing unit, &lt;a href=&quot;http://lampatronics.com/wp-content/uploads/2015/03/L298StepperController__79861.1411263026.1280.1280.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;L298N h bridge module&lt;/a&gt; as the motor driver and motors like  &lt;a href=&quot;https://images-na.ssl-images-amazon.com/images/I/71-pS1LHYWL._SY355_.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;these&lt;/a&gt; in a differential drive configuration. I have a problem dealing with this robot which is simply that the open loop behavior is not consistent. For example, if I give the left and right motors the same PWM input, making sure that both motors have the same effective input (measured by a voltmeter), sometimes the robot goes straight ahead, and sometimes veers to the right. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a problem for me because I am trying to build a model for the robot's behavior (knowing the trajectory given the motor input voltages) and at some point I have to estimate the robot parameters (motor constants, robot inertia and other properties) using the parameter estimation toolbox in simulink. Having inconsistent behavior like this causes the estimated parameters to be strange and unrealistic. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Has anybody faced such a problem? what may be the potential causes? non reliable hardware? battery problems? terrain problems (or interaction with the ground)? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance.&lt;/p&gt;&#xA;" OwnerUserId="18014" LastActivityDate="2017-08-31T14:12:58.363" Title="Inconsistent robot behavior" Tags="&lt;mobile-robot&gt;&lt;control&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14133" PostTypeId="2" ParentId="14132" CreationDate="2017-08-31T14:12:58.363" Score="2" Body="&lt;p&gt;You should use feedback. Motor parameters such as internal resistance, torque constant, effective flux per pole would have slight variations even in two identical motors which would result in two slightly different rates of rotation, hence your robot turning. You are also assuming there is uniform grip so equal traction for both wheels, which would not be the case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Use PID to control your motors and you should be fine. &lt;a href=&quot;https://globaljournals.org/GJRE_Volume14/1-Kinematics-Localization-and-Control.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;This&lt;/a&gt; paper  should be helpful for your particular problem.&lt;/p&gt;&#xA;" OwnerUserId="8838" LastActivityDate="2017-08-31T14:12:58.363" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14135" PostTypeId="1" CreationDate="2017-08-31T19:22:33.023" Score="5" ViewCount="1080" Body="&lt;p&gt;I’m working on the hand eye calibration for the robotic arm. I attached the camera near the tip of the robot (or end effector) and took around 40 pictures of an asymmetric circles pattern. I implemented the basic hand-eye calibration code (at the bottom) based on the papers such as this (&lt;a href=&quot;http://people.csail.mit.edu/tieu/stuff/Tsai.pdf&quot; rel=&quot;noreferrer&quot;&gt;http://people.csail.mit.edu/tieu/stuff/Tsai.pdf&lt;/a&gt;). I referred the similar questions such as &lt;a href=&quot;https://robotics.stackexchange.com/questions/7163/hand-eye-calibration&quot;&gt;Hand Eye Calibration&lt;/a&gt; or &lt;a href=&quot;https://robotics.stackexchange.com/questions/7953/hand-eye-calibration-solver&quot;&gt;Hand Eye Calibration Solver&lt;/a&gt;. The implementation is almost same as this (&lt;a href=&quot;http://lazax.com/www.cs.columbia.edu/~laza/html/Stewart/matlab/handEye.m&quot; rel=&quot;noreferrer&quot;&gt;http://lazax.com/www.cs.columbia.edu/~laza/html/Stewart/matlab/handEye.m&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I ran my code, I noticed that the quality of the result was very bad, especially in the rotation matrix. I calculated the quality based on R squared or the coefficient of determination. R2 for the rotation matrix after the least square regression was always around &lt;strong&gt;0.2~0.3&lt;/strong&gt; (regarding the translation vector, R2 was around 0.6). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I compared the returned homogeneous matrix from the ground truth (which I measured and calculated carefully by hand), they are very different as shown below. The rotation around z axis should be around -90 degrees, but the output was around a half.:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The output from the code&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Homogeneous matrix:&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;[[  0.6628663   0.74871869  0.02212943   44.34775423]&#xA;[  -0.74841069   0.66234872  0.02672996  -21.83390692]&#xA;[  0.00534759   -0.0342871   0.99939772  39.74953567]&#xA;[  0.           0.           0.           1.        ]] &lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Rotation radian (rz, ry, rx):&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;(-0.8461431892931816, -0.005347615473812833, -0.03429431203996466)&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Ground truth&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Homogeneous matrix:&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;[[ -0.01881762   0.9997821   -0.00903642 -70.90496041]&#xA;[ -0.99782701  -0.01820849   0.06332229 -19.55120885]&#xA;[  0.06314395   0.01020836   0.99795222  60.04617152]&#xA;[  0.           0.           0.           1.        ]]&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Rotation radian (rz, ry, rx):&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;(-1.5896526911533568, -0.06318598618916291, 0.01022895059953901)&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;My questions are &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Is it common to get the poor result from the vanilla Tsai’s method? &lt;/li&gt;&#xA;&lt;li&gt;If yes, how can I improve the result?&lt;/li&gt;&#xA;&lt;li&gt;If no, where did I make a mistake?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Here is the code I used:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;import numpy as np&#xA;from transforms3d.axangles import mat2axangle, axangle2mat&#xA;def find_hand_to_camera_transform(list_of_cHo, list_of_bHe):&#xA;&quot;&quot;&quot;&#xA;:param list_of_cHo: List of homogeneous matrices from Camera frame to Object frame(calibration pattern such as chessboard or asymmetric circles)&#xA;:param list_of_bHe: List of homogeneous matrices from robot's Base frame to End effector (hand) frame&#xA;:return: eHc: Homogeneous matrix from End effector frame to Camera frame&#xA;Notation:&#xA;- H: 4x4 homogeneous matrix&#xA;- R: 3x3 rotation matrix&#xA;- T: 3x1 translation matrix (vector)&#xA;- P: Axis vector for Axis-Angle representation&#xA;- TH: Angle (theta) for Axis-Angle representation&#xA;&quot;&quot;&quot;&#xA;&#xA;# Calculate rotational component&#xA;lhs = []&#xA;rhs = []&#xA;for i in range(num_of_poses):&#xA;    bRei = extract_rotation(list_of_bHe[i])&#xA;    ciRo = extract_rotation(list_of_cHo[i])&#xA;    for j in range(i + 1, num_of_poses):  # We don't to use two times same couples&#xA;        bRej = extract_rotation(list_of_bHe[j])&#xA;        cjRo = extract_rotation(list_of_cHo[j])&#xA;        eiRej = np.dot(bRei.T, bRej)  # Rotation from i to j&#xA;        ciRcj = np.dot(ciRo, cjRo.T)  # Rotation from i to j&#xA;        eiPej, eiTHej = mat2axangle(eiRej)  # Note: mat2axangle returns with normalization (norm = 1.0)&#xA;        ciPcj, ciTHcj = mat2axangle(ciRcj)&#xA;        lhs.append(find_skew_matrix(eiPej + ciPcj))&#xA;        rhs.append(ciPcj - eiPej)&#xA;&#xA;lhs = np.array(lhs)&#xA;lhs = lhs.reshape(lhs.shape[0] * 3, 3)&#xA;rhs = np.array(rhs)&#xA;rhs = rhs.reshape(rhs.shape[0] * 3)&#xA;cPe_, res, _, _ = np.linalg.lstsq(lhs, rhs)&#xA;r2_rot = 1 - res / (rhs.size * rhs.var())&#xA;&#xA;cTHe = 2 * np.arctan(np.linalg.norm(cPe_))&#xA;cPe = 2 * cPe_ / np.sqrt(1 + np.dot(cPe_.reshape(3), cPe_.reshape(3)))&#xA;cPe = cPe / np.linalg.norm(cPe)&#xA;cRe = axangle2mat(cPe, cTHe, is_normalized=True)&#xA;eRc = cRe.T&#xA;&#xA;# Calculate translational component&#xA;lhs = []&#xA;rhs = []&#xA;for i in range(num_of_poses):&#xA;    bRei = extract_rotation(list_of_bHe[i])&#xA;    bTei = extract_translation(list_of_bHe[i])&#xA;    ciTo = extract_translation(list_of_cHo[i])&#xA;    for j in range(i + 1, num_of_poses):  # We don't to use two times same couples&#xA;        bRej = extract_rotation(list_of_bHe[j])&#xA;        bTej = extract_translation(list_of_bHe[j])&#xA;        cjTo = extract_translation(list_of_cHo[j])&#xA;        eiRej = np.dot(bRei.T, bRej)&#xA;        eiTej = np.dot(bRei.T, bTei - bTej)&#xA;        lhs.append(eiRej - np.eye(3))&#xA;        rhs.append(np.dot(eRc, ciTo) - np.dot(np.dot(eiRej, eRc), cjTo) + eiTej)&#xA;&#xA;lhs = np.array(lhs)&#xA;lhs = lhs.reshape(lhs.shape[0] * 3, 3)&#xA;rhs = np.array(rhs)&#xA;rhs = rhs.reshape(rhs.shape[0] * 3)&#xA;eTc, res, _, _ = np.linalg.lstsq(lhs, rhs)&#xA;r2_trans = 1 - res / (rhs.size * rhs.var())&#xA;&#xA;eHc = np.eye(4)&#xA;eHc[:3, :3] = eRc&#xA;eHc[0:3, 3] = eTc&#xA;return eHc&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="15905" LastActivityDate="2021-04-19T08:47:46.667" Title="Poor accuracy of hand eye calibration when using vanilla Tsai's method" Tags="&lt;robotic-arm&gt;&lt;cameras&gt;&lt;calibration&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14136" PostTypeId="1" AcceptedAnswerId="14143" CreationDate="2017-08-31T19:42:39.160" Score="1" ViewCount="276" Body="&lt;p&gt;i am working on a firefighting robot and i am struggling to find a way to search all rooms in an arena like this&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Yo8Tb.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Yo8Tb.png&quot; alt=&quot;arena&quot;&gt;&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;i thought of using the Wall follower rule but it will miss a room , if i am understanding it correctly.&lt;/p&gt;&#xA;" OwnerUserId="18020" LastActivityDate="2017-09-01T16:22:35.743" Title="Fire Fighting robot searching for fire in arena algorithm" Tags="&lt;wheeled-robot&gt;&lt;raspberry-pi&gt;&lt;ultrasonic-sensors&gt;&lt;research&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14137" PostTypeId="2" ParentId="14131" CreationDate="2017-08-31T22:47:33.343" Score="0" Body="&lt;p&gt;As far as I am aware, figures for random noise coefficients like the &lt;em&gt;Rate Random Walk&lt;/em&gt;, or &lt;em&gt;Drifting balance&lt;/em&gt;, are not usually included in accelerometer or gyro datasheets (not just the MPU-6050).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Values are normally obtained by creating an Allan Deviation plot as described in this &lt;a href=&quot;http://cache.freescale.com/files/sensors/doc/app_note/AN5087.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Application Note&lt;/a&gt; from Freescale Semiconductor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did a brief online search, and I found a &lt;a href=&quot;https://arxiv.org/pdf/1608.07053.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;paper&lt;/a&gt; describing the process for calculating and plotting the Allan deviation function to obtain the Rate Random Walk for an IMU-based attitude sensor using the MPU-6050, which might contain the information you are looking for.&lt;/p&gt;&#xA;" OwnerUserId="17029" LastActivityDate="2017-08-31T22:47:33.343" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14138" PostTypeId="1" CreationDate="2017-08-31T23:46:36.700" Score="2" ViewCount="25" Body="&lt;p&gt;Well im trying to model a gyroscope which is MPU-6050 and i am stuck in getting the missalignment and scale factor parameters from its datasheet ... &#xA;And there is another problem that the names in each datasheet differs from the others &#xA;My question is how to get those parameters?&#xA;Thanks ! &lt;/p&gt;&#xA;" OwnerUserId="18011" LastActivityDate="2017-08-31T23:46:36.700" Title="Gyroscope modeling parameters" Tags="&lt;gyroscope&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14141" PostTypeId="2" ParentId="14136" CreationDate="2017-09-01T09:20:58.540" Score="0" Body="&lt;p&gt;According to the given map, the robot is the circle and the goals are the crosses. To move to every room a path must be generated first. The path, the robot will travel, is a subgraph of a navmesh. A navmesh consists of possible waypoints which can be visited without bouncing to an obstacle. The most dominant algorithm for finding a navmesh and a path for the robot is the Rapidly-exploring random tree algorithm. A simple version can be found on the homepage of Steve LaValle &lt;a href=&quot;http://msl.cs.illinois.edu/~lavalle/sub/rrt.py&quot; rel=&quot;nofollow noreferrer&quot;&gt;RRT python&lt;/a&gt;. For implmenting a more sophisticated pathplanner which copes with the obstacles the paradigma of objectorientied programming is a good practice. The idea is to use one or more classes for building the obstacle detection, find the shortest path, extend the RRT tree and perhaps visualize the graph in the map.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As inspiration please visit the UML Chart on page 42, &lt;a href=&quot;http://www.diva-portal.org/smash/get/diva2:7803/FULLTEXT01.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Morten Strandberg: Robot Path Planning:&#xA;An Object-Oriented Approach, 2004&lt;/a&gt; Thats not a class diagram for a firefighting robot, but gives an impression that building a path planner is done with different classes, which are combined together to a more complex system.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2017-09-01T09:20:58.540" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14143" PostTypeId="2" ParentId="14136" CreationDate="2017-09-01T16:22:35.743" Score="0" Body="&lt;p&gt;Wall following is a good &lt;em&gt;local&lt;/em&gt; strategy, but as you point out it might miss a room because it does not consider the global map. Your problem could be cast as a simultaneous localization and mapping problem (SLAM), where the robot builds a map while it travels around. This way, it can track where it has/has not been and find rooms it missed earlier. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In 2D, you would represent the map using an &lt;em&gt;occupancy grid&lt;/em&gt;, which assigns values (occupied, unknown, free) to small squares of space. There many algorithms for handling how to use sensor data to estimate which cells are free/occupied - let's ignore that for now. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming you have perfect knowledge of where you are and what you are seeing, then your grid cells will be in one of three states: occupied, unknown and free. A simple but effective strategy for exploring a room is called &lt;em&gt;next-best view&lt;/em&gt; planning, where the robot travels to the location where it thinks it will see the most. This depends on a sensor model (e.g. &quot;can see 5 cells away in all directions but not through walls&quot;), and a model of the room (e.g. &quot;assume straight walls continue going straight&quot;). This planner is greedy, so you will want to enforce some common sense rules to keep it from going to the other side of the room unless there's nothing left where it is. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a fundamental problem for roboticists, and there are quite a few packages out there for solving the exploration problem. This &lt;a href=&quot;http://wiki.ros.org/next_best_view&quot; rel=&quot;nofollow noreferrer&quot;&gt;ROS package&lt;/a&gt; looks like a good starting place (or &lt;a href=&quot;https://github.com/ethz-asl/nbvplanner&quot; rel=&quot;nofollow noreferrer&quot;&gt;this one&lt;/a&gt;). &lt;/p&gt;&#xA;" OwnerUserId="16134" LastActivityDate="2017-09-01T16:22:35.743" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14146" PostTypeId="1" AcceptedAnswerId="14157" CreationDate="2017-09-01T19:32:33.533" Score="2" ViewCount="114" Body="&lt;p&gt;I have a Raspberry Pi 1 Model A and am interested in attaching a buzzer to its GPIO pins so that the software (running on the pi) can turn the buzzer on/off by sending signals to the GPIO pins.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm new to electronics so I'm looking for the simplest setup possible. I watched &lt;a href=&quot;https://www.youtube.com/watch?v=6rbgsIRun1o&quot; rel=&quot;nofollow noreferrer&quot;&gt;this Youtube video&lt;/a&gt; where the author just plops a buzzer down into a breadboard and uses jumper wires to connect the breadboard/buzzer to the pi's GPIO pins. I'd like a similar (simple!) setup.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm wondering what the make/model/specs are for that buzzer so that I can buy the same one and attach it to my pi/breadboard the exact same way (or if there's a simpler way out there, I'm open to that as well!). Any ideas what the voltage/amperage ratings would need to be so as to be compatible with the pi (without the need for additional things like circuit drivers, resistors, transistors, etc.)? Remember, I'm a total newb here and simpler == better!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance!&lt;/p&gt;&#xA;" OwnerUserId="9888" LastActivityDate="2017-09-04T14:16:44.790" Title="Raspberry Pi and Buzzers: Simple solution" Tags="&lt;raspberry-pi&gt;&lt;electronics&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="2" ClosedDate="2017-09-05T10:59:30.370" ContentLicense="CC BY-SA 3.0" />
  <row Id="14147" PostTypeId="1" AcceptedAnswerId="14148" CreationDate="2017-09-01T21:15:59.200" Score="2" ViewCount="59" Body="&lt;p&gt;I'm new, please be gentle :-)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd like to control the position of a single-axis joint using one cable for flexion and another for extension.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In many of the anthropomorphic designs I've seen each of these cables are controlled by a separate servos, and I'm wondering why.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd think the simplest approach would be to use a single servo, and wrap each cable around its spool in opposite directions. Is there a problem with this approach?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(if not, I assume the dual servo design is to control not only the position of the joint, but its stiffness/rigidity?)&lt;/p&gt;&#xA;" OwnerUserId="18030" LastActivityDate="2017-09-02T00:58:31.723" Title="cable-controlled flexion and extension" Tags="&lt;robotic-arm&gt;&lt;servomotor&gt;&lt;torque&gt;&lt;joint&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14148" PostTypeId="2" ParentId="14147" CreationDate="2017-09-02T00:38:50.997" Score="0" Body="&lt;p&gt;Generally speaking, you can't push with a rope. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Tie a rope to a doorknob. From across the room, you can &lt;strong&gt;pull&lt;/strong&gt; the door open, but you cannot &lt;strong&gt;push&lt;/strong&gt; the door closed; the rope just goes slack. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ropes are only useful when they're in &lt;em&gt;tension&lt;/em&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;:edit:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Re-read your question and realize I didn't answer it all all. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Suppose you have a hinge joint. Use the door example again. The cable actuators attach to either side of the door. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As the door rotates, each side scribes an arc, but because the door has a thickness, and because the hinge is on one side of the door, those arcs with have different arc lengths. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Kind of hard to describe without a picture (on mobile), but side one scribes $r\theta$, where $r$ is the distance between hinge center and the hinge side of the door, and the other side scribes $(r+d)\theta$, where $d$ is the thickness of the door. $\theta$ is how far open the door is. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hopefully you can see that, if you wrapped a string from one side around a drum and back, the drum would have to &quot;take up&quot; a quantity of rope $r\theta$ while it tries to &quot;pay out&quot; a quantity $(r+d)\theta$, or vice-versa. This is not possible with a regular drum. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Welcome to the frustrating world of web tension control. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2017-09-02T00:58:31.723" LastActivityDate="2017-09-02T00:58:31.723" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="14152" PostTypeId="1" AcceptedAnswerId="14170" CreationDate="2017-09-02T16:17:51.560" Score="1" ViewCount="51" Body="&lt;p&gt;From any robot spec sheet:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/PtdCB.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/PtdCB.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am assuming that the range of motion given for the J3 or 'U' axis is specified as a function of the position of the lower or J2 axis. Correct?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How do I find the absolute range of motion of J2 from the spec sheet? That is, what is the maximum positive and negative value that J3 can rotate? Because if I were to rotate using the range given for J2 then the arm would collide with the base.&lt;/p&gt;&#xA;" OwnerUserId="16348" LastActivityDate="2017-09-07T05:30:53.320" Title="Calculating J3 rotation relative to J2?" Tags="&lt;robotic-arm&gt;&lt;precise-positioning&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14153" PostTypeId="2" ParentId="7163" CreationDate="2017-09-04T04:11:06.490" Score="0" Body="&lt;p&gt;I agree with Ben, your situation is eye-to-hand(camera outside robot) and AX=XB,the X is pose between camera and the robot base(but you get the fucucial with the end-effector).&#xA;And in eye-in-hand(camera bind to robot tip) the X is the pose between camera and the robot's end-effector. There is another Matlab code (Dual Quaternions)in &lt;a href=&quot;http://math.loyola.edu/~mili/Calibration/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://math.loyola.edu/~mili/Calibration/index.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18044" LastActivityDate="2017-09-04T04:11:06.490" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14154" PostTypeId="1" AcceptedAnswerId="14155" CreationDate="2017-09-04T13:07:49.077" Score="5" ViewCount="1476" Body="&lt;p&gt;I've come across the abbreviation SE several times recently. I know it has to do with the pose of the robot, and the degrees of freedom. Most recently I found it on page 8 of this paper: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;D. Kragic and H. I. Christensen, “Survey on visual servoing for manipulation,” Royal Institute of Technology (KTH), Stockholm, Sweden, Tech. Rep. ISRN KTH/NA/P-02/01-SE, CVAP259, 2002. &lt;/p&gt;&#xA;" OwnerUserId="10303" LastActivityDate="2021-04-13T18:54:39.707" Title="What does SE mean in robotics literature?" Tags="&lt;dynamics&gt;&lt;motion&gt;&lt;movement&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14155" PostTypeId="2" ParentId="14154" CreationDate="2017-09-04T13:25:53.927" Score="6" Body="&lt;p&gt;In that context, SE means &amp;quot;Special Euclidean&amp;quot; group, e.g. &lt;a href=&quot;http://planning.cs.uiuc.edu/node147.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;SE(3&lt;/a&gt;)* which is shorthand for &amp;quot;the special Euclidean group of rigid body displacements in three-dimensions&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;*Planning Algorithms, Steven M LaValle 2012-04-20&lt;/p&gt;&#xA;" OwnerUserId="17029" LastEditorUserId="13197" LastEditDate="2021-04-13T10:32:31.263" LastActivityDate="2021-04-13T10:32:31.263" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14156" PostTypeId="2" ParentId="14154" CreationDate="2017-09-04T13:47:02.013" Score="4" Body="&lt;p&gt;It is a mathematical concept call the &quot;Special Euclidean&quot; group. Roughly, it is a combination of a rotation and translation. You'll also frequently see SO3, which is the special orthogonal group which means rotations.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2017-09-04T13:47:02.013" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14157" PostTypeId="2" ParentId="14146" CreationDate="2017-09-04T14:16:44.790" Score="2" Body="&lt;p&gt;For a beginner, it is always best to follow / copy an existing example.  Fortunately, a tutorial about connecting a sound device to a Raspberry Pi and parts are available &lt;a href=&quot;https://learn.adafruit.com/piezo-ring-tones-with-raspberry-pi&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. Also, there is a &lt;a href=&quot;https://raspberrypi.stackexchange.com&quot;&gt;Raspberry Pi Stackexchange web site&lt;/a&gt; (should you have more Raspberry Pi questions).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any device connected to an embedded processor must operate at the voltages the embedded processor is operating at and must not draw more current than the embedded processor can supply safely.  The voltage and current ratings of the Raspberry Pi's GPIO pins are discussed &lt;a href=&quot;https://raspberrypi.stackexchange.com/questions/9298/what-is-the-maximum-current-the-gpio-pins-can-output&quot;&gt;here&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The above tutorial is more complex than a simple buzzer.  As it appears to be able to play music.  But the tutorial is complete and physically it does not appear any more complex than the circuit in the youtube video linked to in the question.  Rather, the complexity is in the software which likely can just be downloaded and used.&lt;/p&gt;&#xA;" OwnerUserId="17364" LastActivityDate="2017-09-04T14:16:44.790" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="14160" PostTypeId="2" ParentId="14125" CreationDate="2017-09-05T11:06:57.030" Score="1" Body="&lt;p&gt;You are totally right, the speed of the drones is ridiculous when compared to the speed of light, thus the &lt;em&gt;relativistic&lt;/em&gt; doppler effect is totally neglegible. Nevertheless, you may encounter communication problems due to the distance at which they are operating, which causes signal degradation, and due to interference, which may be relevant with the high amplification that you are gonna need in order to receive at that distance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;About the other question I don't know, but that might be material for another post, since it's just vaguely related with the title.&lt;/p&gt;&#xA;" OwnerUserId="18057" LastActivityDate="2017-09-05T11:06:57.030" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14161" PostTypeId="2" ParentId="14088" CreationDate="2017-09-05T13:44:34.987" Score="3" Body="&lt;h2&gt;:EDIT:&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Let me put some numbers on this. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's say you want to get from any angle to vertical in half a second. Say for now (more on this &lt;em&gt;unrealistic&lt;/em&gt; scenario later) that you want to get from &quot;laying down&quot; (90 degrees from vertical) to upright in half a second. This is &lt;strong&gt;just&lt;/strong&gt; for the purposes of coming up with a spec. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The position equation:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\theta = \theta_0 + \dot{\theta}_0 t + \frac{1}{2}\ddot{\theta}t^2 \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(It's equally valid for linear or angular positions/speeds). You would think that you need to accelerate from 90 to 0 degrees, but then you'd hit 0 with some velocity. In reality, you're looking to get to 45 degrees in a quarter second, then spend the other quarter second decelerating. So, if you want a quarter second to go from $\theta = 90^{\circ}$ to $\theta = 45^{\circ}$, then:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;45^{\circ} = 90^{\circ} + (0^{\circ}/s)t + \frac{1}{2}\ddot{\theta}(0.25 \mbox{s})^2 \\&#xA;$$&#xA;$$&#xA;\frac{-45^{\circ}}{(0.25\mbox{s})^2} = \ddot{\theta} \\&#xA;$$&#xA;$$&#xA;\ddot{\theta} = 720 ^{\circ}/\mbox{s}^2 \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the acceleration you need &lt;em&gt;beyond gravity&lt;/em&gt; to get the &lt;em&gt;performance&lt;/em&gt; you want. You could accelerate &lt;em&gt;slower&lt;/em&gt; if you want to - again, it's up to you to specify. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Check the top speed. At that acceleration, 720 degrees per second for a quarter second, you go from $\dot{\theta} = 0$ to $\dot{\theta} = (720^{\circ}/\mbox{s})(0.25\mbox{s})$, or $\dot{\theta} = 180^{\circ}/\mbox{s}$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now let's lower the speed requirement. Say instead of having the pendulum &quot;pop&quot; up from laying down in half a second, you're okay with it taking two seconds. Do the same steps as above, but now when it accelerates for half the time, it's accelerating for 1 second. It again decelerates for 1 second. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;45^{\circ} = 90^{\circ} + (0^{\circ}/s)t + \frac{1}{2}\ddot{\theta}(1 \mbox{s})^2 \\&#xA;$$&#xA;$$&#xA;\frac{-45^{\circ}}{(1\mbox{s})^2} = \ddot{\theta} \\&#xA;$$&#xA;$$&#xA;\ddot{\theta} = 45 ^\circ/\mbox{s}^2 \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now you run at that acceleration for a full second, and get $\dot{\theta} = 45^{\circ}/\mbox{s}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Seems reasonable so far, &lt;strong&gt;but&lt;/strong&gt; you have to torque the pendulum by accelerating the base. Find the projection of the arm to the +y-axis, using the angle the arm makes with the vertical ($\theta$), to see how the base acceleration impacts the and then see that the base generates an angular acceleration at $\ddot{\theta} = \frac{1}{\ell} \cos(\theta) \ddot{x}$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, at 90 degrees, $\cos(\theta) = 0$, so the angular acceleration you get is &lt;strong&gt;zero&lt;/strong&gt; for any $\ddot{x}$. No amount of base acceleration will get the pendulum upright. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Say though that you want to start at 89 degrees instead. Now $\cos(89^{\circ}) = 0.0175$, so&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\ddot{x} = \frac{\ell}{0.0175} \ddot{\theta} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or&#xA;$$&#xA;\ddot{x} = (53.3)(\ell)(\ddot{\theta}) \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if $\ell$, the distance from the cart to the center of mass were 1 meter, then the cart has to accelerate 53 times the angular acceleration number. 720 degrees per second squared is 12.5 rad/s2, so you need your cart to accelerate about $(1\mbox{m})(53*12.5 \mbox{rad/s}^2) = 662.5 \mbox{m/s}^2$. At a gravitational constant of $9.81 \mbox{m/s}^2$, you're looking at a linear acceleration of about 67g.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the slower case, 45 deg/s2 = 0.7854 rad/2, so now the cart would need to accelerate at $(1\mbox{m})(53*0.7854 \mbox{rad/s}^2) = 41.6 \mbox{m/s}^2$, or about 4.25g.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The faster case is accelerating at 67g for a quarter second, so $x_f = x_0 + v_0t + 1/2 at^2$, or $x_f = (0.5)(67\mbox{g})(9.81\mbox{m/s}^2/\mbox{g})(0.25\mbox{s}^2) = 20.54m$, versus the slower acceleration's case of $x_f = (4.25)(9.81)(1^2) = 20.84m$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For top speeds, $(67)(9.81)(0.25) = 164 \mbox{m/s}$, versus the slower acceleration's $(4.25)(9.81)(1) = 41.7\mbox{m/s}$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my gut reaction earlier, that the slower acceleration would result in a higher top speed, was wrong. It can result in a longer &lt;em&gt;distance&lt;/em&gt; traveled, but it looks like the top speed is lower. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, I hope you can see that &quot;popping up&quot; from laying down is not realistic. You'd be better off to have some kind of spring-loaded trigger that pushed up instead of accelerating the base. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This still doesn't take into account the mass or moment of inertia; it's just looking at the base acceleration's relationship to a massless rod. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="7820" LastEditDate="2017-09-07T12:40:13.527" LastActivityDate="2017-09-07T12:40:13.527" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14166" PostTypeId="1" CreationDate="2017-09-06T08:26:52.440" Score="3" ViewCount="61" Body="&lt;p&gt;Does computer vision intentionally mimic the vision of a human or is it just coincidental that a good computer vision system (with convolutional neural networks for example) reassembles some properties of the human vision apparatus?&lt;/p&gt;&#xA;" OwnerUserId="11626" LastActivityDate="2017-09-06T16:50:34.993" Title="Why is a computer vision system similar to the human vision" Tags="&lt;computer-vision&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14167" PostTypeId="1" AcceptedAnswerId="15819" CreationDate="2017-09-06T09:32:16.960" Score="3" ViewCount="185" Body="&lt;p&gt;I am trying to do hand eye calibration between the robotic arm end effector and Kinect V1. I am using &lt;a href=&quot;https://github.com/jhu-lcsr/handeye_calib_camodocal&quot; rel=&quot;nofollow noreferrer&quot;&gt;handeye_calib_camodocal&lt;/a&gt; repository for calibration and trying to find $X$ by solving the equation:  $$AX=XB$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have following 82 &lt;a href=&quot;https://codepad.co/snippet/heLW4ggh&quot; rel=&quot;nofollow noreferrer&quot;&gt;transform pairs&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have following support/holder between Kinect and Robotic arm :&#xA;&lt;a href=&quot;https://i.stack.imgur.com/9z8U1.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9z8U1.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But i am getting the following translation in meters which is wrong because camera can not be in such a distance from end effector:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Translation: 0.690257 0.102063 0.459878&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I have following launch file:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;launch&amp;gt;&#xA;  &amp;lt;!-- TF names--&amp;gt;&#xA;  &amp;lt;arg name=&quot;EETF&quot;              default=&quot;/tool0_controller&quot; /&amp;gt;&#xA;  &amp;lt;arg name=&quot;baseTF&quot;            default=&quot;/base_link&quot; /&amp;gt;&#xA;  &amp;lt;arg name=&quot;ARTagTF&quot;           default=&quot;/chess&quot; /&amp;gt;&#xA;  &amp;lt;arg name=&quot;cameraTF&quot;          default=&quot;/camera_rgb_frame&quot; /&amp;gt;&#xA;  &amp;lt;!--&amp;lt;arg name=&quot;data_folder&quot;       default=&quot;$(find hand_eye_calib)/launch&quot; /&amp;gt;--&amp;gt;&#xA;  &amp;lt;arg name=&quot;data_folder&quot;       default=&quot;$(find hand_eye_calib)&quot; /&amp;gt;&#xA;  &amp;lt;arg name=&quot;filename&quot;          default=&quot;TransformPairs_HEcalibInput.yml&quot; /&amp;gt;&#xA;  &amp;lt;arg name=&quot;calibrated_filename&quot;          default=&quot;CalibratedTransform_HEcalibOutput.yml&quot; /&amp;gt;&#xA;&#xA;  &amp;lt;!-- running handeeye_calib_camodocal node--&amp;gt;&#xA;  &amp;lt;node pkg=&quot;hand_eye_calib&quot; type=&quot;hand_eye_calib&quot; name=&quot;hand_eye_calib&quot; output=&quot;screen&quot;&amp;gt;  &#xA;  &amp;lt;!-- hand_eye_calib arg pass --&amp;gt;&#xA;    &amp;lt;param name=&quot;ARTagTF&quot;       type=&quot;str&quot; value=&quot;$(arg ARTagTF)&quot; /&amp;gt;&#xA;    &amp;lt;param name=&quot;cameraTF&quot;      type=&quot;str&quot; value=&quot;$(arg cameraTF)&quot; /&amp;gt;&#xA;    &amp;lt;param name=&quot;EETF&quot;          type=&quot;str&quot; value=&quot;$(arg EETF)&quot; /&amp;gt;&#xA;    &amp;lt;param name=&quot;baseTF&quot;        type=&quot;str&quot; value=&quot;$(arg baseTF)&quot; /&amp;gt;&#xA;    &amp;lt;param name=&quot;load_transforms_from_file&quot; type=&quot;bool&quot; value=&quot;false&quot;/&amp;gt;&#xA;    &amp;lt;param name=&quot;transform_pairs_record_filename&quot; type=&quot;str&quot; value=&quot;$(arg data_folder)/$(arg filename)&quot; /&amp;gt;&#xA;    &amp;lt;!-- &amp;lt;param name=&quot;transform_pairs_load_filename&quot;  type=&quot;str&quot; value=&quot;$(arg data_folder)/$(arg filename)&quot; /&amp;gt; --&amp;gt;&#xA;    &amp;lt;param name=&quot;output_calibrated_transform_filename&quot; type=&quot;str&quot; value=&quot;$(arg data_folder)/$(arg calibrated_filename)&quot; /&amp;gt;&#xA;  &amp;lt;/node&amp;gt;&#xA;&#xA;  &amp;lt;!-- running camera_to_ros node--&amp;gt;&#xA;  &amp;lt;!-- node pkg=&quot;camera_to_ros&quot; type=&quot;camera_to_ros&quot; name=&quot;camera_to_ros&quot; output=&quot;screen&quot;/--&amp;gt;&#xA;&#xA;  &amp;lt;!-- running extrinsic_calibration node--&amp;gt;&#xA;  &amp;lt;node pkg=&quot;camera_calibration&quot; type=&quot;extrinsic_calibration&quot; name=&quot;extrinsic_calibration&quot; output=&quot;screen&quot;/&amp;gt;&#xA;&#xA;  &amp;lt;!-- running DK node--&amp;gt;&#xA;&#xA;&amp;lt;/launch&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="18063" LastActivityDate="2020-03-25T01:36:42.400" Title="Hand eye calibration wrong result" Tags="&lt;robotic-arm&gt;&lt;kinect&gt;&lt;industrial-robot&gt;&lt;calibration&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14168" PostTypeId="2" ParentId="14166" CreationDate="2017-09-06T16:50:34.993" Score="5" Body="&lt;p&gt;I would argue that the similarities are largely superficial. More &quot;classical&quot; machine vision approaches focused on finding features a human can identify such as lines, texture and blobs of color.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Neural networks were originally designed based on what was known of neurons at the time, for example the activation functions are loosely based on how signals in the brain propagate. However, it is important not to take this analogy too far - there are many ways and nuances to how the brain operates and we are a long long way from being able to fully describe the brain.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While it's easy to anthropomorphize CNNs by saying things like &quot;this layer pulls out background&quot; or &quot;this layer looks for edges&quot;, they are really just a bunch of stacked filters which are trained for a specific set of data. Ian Goodfellow has &lt;a href=&quot;http://www.popsci.com/byzantine-science-deceiving-artificial-intelligence&quot; rel=&quot;noreferrer&quot;&gt;done some good work&lt;/a&gt; showing how these networks can be fooled by adding imperceptible (to a human) amounts of noise.&lt;/p&gt;&#xA;" OwnerUserId="16134" LastActivityDate="2017-09-06T16:50:34.993" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14169" PostTypeId="2" ParentId="14135" CreationDate="2017-09-06T19:18:25.743" Score="0" Body="&lt;p&gt;The most likely issues are too much noise, inaccurate camera calibration, not ensuring everything has settled when you take each data point, your camera and robot not being fixed rigidly enough, or your transforms being transposed or otherwise inconsistent.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A detailed overview of pitfalls and how to improve your results can be found at &lt;a href=&quot;https://github.com/jhu-lcsr/handeye_calib_camodocal&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/jhu-lcsr/handeye_calib_camodocal&lt;/a&gt;. Many of the instructions there apply to any method of solving for hand eye calibration and I've been updating the document and code every time someone encounters a new problem over the last two years, so at this point it should be pretty good.&lt;/p&gt;&#xA;" OwnerUserId="304" LastActivityDate="2017-09-06T19:18:25.743" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14170" PostTypeId="2" ParentId="14152" CreationDate="2017-09-07T05:30:53.320" Score="1" Body="&lt;p&gt;I think from the spec sheet, it means that &lt;strong&gt;at some configurations&lt;/strong&gt;, J3 could actually reach +255$^\circ$. For example, when J2 = -100$^\circ$, J3 may be able to reach that maximum of 255$^\circ$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In other words, the range of J3, for example, depends on a specific value of J2. To find out the exact range of J3 given a specific value of J2, you may need a 3D model of the robot.&lt;/p&gt;&#xA;" OwnerUserId="7610" LastActivityDate="2017-09-07T05:30:53.320" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14172" PostTypeId="2" ParentId="12851" CreationDate="2017-09-07T13:19:59.863" Score="12" Body="&lt;ol&gt;&#xA;&lt;li&gt;Start CLion from a commandline with your sourced ROS workspace (i.e. after calling &lt;code&gt;source devel/setup.bash&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;Open a project's CMakeLists.txt, and tell it to open it as a project rather than as a file.&lt;/li&gt;&#xA;&lt;li&gt;That's it, you've got your workspace integrated :)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Debugging: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Debugging built files (nodes which you run through &lt;code&gt;rosrun&lt;/code&gt;) is easy, you just normally run them in the IDE&lt;/li&gt;&#xA;&lt;li&gt;Debugging launch files is more complicated, as they cannot be launched by the IDE. You can launch the launch file from command-line, then find the PID of the node you want to debug, and connect the IDE debugger to it (&quot;Run -&gt; Attach to local process&quot;). Of course this is difficult to use for capturing initialization bugs.&lt;/li&gt;&#xA;&lt;li&gt;Debugging nodes that are shell scripts or scripts in unsupported languages is impossible.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;There are several more steps you could do to deepen the integration:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Set the CMake Generation path in &quot;Build, ... -&gt; CMake -&gt; Generation Path&quot; to your workspace's build directory, so that you can compile only once in the IDE and have the results available in console (otherwise, you'll have two different builds, one in IDE, and one in console). Unfortunately, until &lt;a href=&quot;https://youtrack.jetbrains.com/issue/CPP-1887&quot; rel=&quot;noreferrer&quot;&gt;https://youtrack.jetbrains.com/issue/CPP-1887&lt;/a&gt; is fixed, you cannot use any variables in the default generation path, so setting up the catkin layout requires some manual work.&lt;/li&gt;&#xA;&lt;li&gt;To automatically source ROS when launching CLion, you can add the sourcing to &lt;code&gt;~/.xsessionrc&lt;/code&gt;. This might, however, have unexpected consequences. If you don't want to do that, use the following approach.&lt;/li&gt;&#xA;&lt;li&gt;Create a desktop launcher that launches CLion from the system menu (Dash, launcher panel etc.) with correct environment (if you source ROS in your &lt;code&gt;.bashrc&lt;/code&gt;): I edited the desktop file &lt;code&gt;~/.local/share/applications/jetbrains-clion.desktop&lt;/code&gt; to look like the following. You also have to make sure the file is not writable for your updater scripts/Jetbrains toolbox, otherwise they'll overwrite it with each update.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[Desktop Entry]&#xA;Version=1.0&#xA;Type=Application&#xA;Name=CLion&#xA;Icon=/home/peci1/bin/jetbrains/apps/CLion/.icon.svg&#xA;Exec=bash -i -c &quot;/path/to/clion/bin/clion.sh&quot; %f&#xA;Comment=A smart cross-platform IDE for C and C++&#xA;Categories=Development;IDE;&#xA;Terminal=false&#xA;StartupWMClass=jetbrains-clion&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;If you're using Jetbrains toolbox to install CLion (which you should IMO), the path to the binary changes with every update (until &lt;a href=&quot;https://youtrack.jetbrains.com/issue/ALL-653&quot; rel=&quot;noreferrer&quot;&gt;https://youtrack.jetbrains.com/issue/ALL-653&lt;/a&gt; is resolved), but you can use this trick to always launch the latest installed version:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;Exec=bash -i -c &quot;$(ls -td /path/to/jetbrains/apps/CLion/ch-0/*/ | head -n1)/bin/clion.sh&quot; %f&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Install the Python support plugin to be able to code in both C++ and Python from the single IDE.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="2676" LastEditorUserId="2676" LastEditDate="2017-09-07T13:31:49.697" LastActivityDate="2017-09-07T13:31:49.697" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14173" PostTypeId="1" CreationDate="2017-09-07T14:36:58.300" Score="5" ViewCount="253" Body="&lt;p&gt;Not a robotics question in the strictest sense, I guess, but related closely enough, I hope:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have an arm-like articulated two(-plus-one)-joint appliance that I want to use as a 3D input device. It uses an angle measurement device and two IMUs, which are placed as depicted schematically below:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/hM5w3.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hM5w3.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The blue boxes depict the positioning and orientation of the IMUs (the arrows point to the IMU's relative &quot;forward&quot; direction). The blue dot/highlighted angle represent the angle being measured. The base can rotate around its centre, counting as the third joint, technically, but shouldn't be of too much relevance here. The arm joint rooted at the base has two rotational degrees of freedom, indicated by the red-ish arrows (it can't rotate around the base's up-direction). The unfilled rectangle represents the data I'd like to infer from the other measurements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;edit&lt;/strong&gt;: I cannot post more accurate schematics here, but if you want to visualise this apparatus a bit better, think of a &lt;a href=&quot;http://www.geomagic.com/files/9513/4876/1872/Premium_3-small.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;Geomagic Phantom&lt;/a&gt;, except that the lower arm joint is not rotational, but is built more like a &lt;a href=&quot;https://upload.wikimedia.org/wikipedia/commons/4/44/Ch_products_mach_2_joystick.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;classic analog joystick&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: The positioning of the sensors, especially of the IMUs at the base and on the second arm joint are fixed, so please do not suggest changing these (I can't).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm now wondering how to compute the orientation of the middle link from the data I have: both IMUs return quaternions $q_0$ and $q_2$, respectively (relative to the magnetic north, measured from their relative forward-direction). My representation for the relative rotation between the two arm links is a quaternion ($q_a$) as well (even though it could just as well be directly represented as an angle, but since I'm performing quaternion math anyways, I might as well have it in this form, too). I'm pretty sure that there must be some way to basically compute what an IMU on the middle link (let's call it $q_1$) would measure from the data I have, but I'm not quite sure about my maths here...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My intuition was to compute $q_1 = q_0^{-1} * q_2 * q_a^{-1}$, following from the assumed identity $q_2 = q_0 * q_1 * q_a$, but that doesn't seem to hold. As I feared that the rotation of $q_2$ relative to the joint it resides on influences the computation result, I also computed $q_1 = q_0^{-1} * q_2 * q_{z\pi} * q_a^{-1}$, where $q_{z\pi}$ represents a 90° rotation around the up(=z)-axis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, my measurements still seem off when I visualise the movements (the $q_1$ movement seems exaggerated compared to the actually induced movement). What else might I miss here? Is my math faulty, or is it possibly only an implementation mistake I made?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT2:&lt;/strong&gt; I found that one major flaw of my maths was the lack of calibration. Adding a calibration pose, I was able to compute the relative orientation between the two IMUs in both the visual model and the actual device and go from there. However, to compute the lower link's orientation, I still rely on an equation like $q_1 = q^*_2 * q_a^{-1}$, with $q^*_2$ being the quaternion that rotates from the relative orientation between $q_0$ and $q_2$ in the calibration pose towards their current relative orientation. I'm still not quite sure if that equation is fully appropriate, but it appears to work okay so far.&lt;/p&gt;&#xA;" OwnerUserId="17875" LastEditorUserId="17875" LastEditDate="2017-10-16T15:22:26.787" LastActivityDate="2021-03-30T04:07:15.697" Title="Inferring joint orientation on multi-joint arm" Tags="&lt;imu&gt;&lt;forward-kinematics&gt;&lt;joint&gt;&lt;orientation&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14174" PostTypeId="2" ParentId="14126" CreationDate="2017-09-07T15:39:45.140" Score="3" Body="&lt;p&gt;The &lt;em&gt;Kalman filter&lt;/em&gt; is an optimal &lt;strong&gt;linear&lt;/strong&gt; filter in the presence of Gaussian noise. It is optimal in the sense that it minimizes the mean-squared error. This means that the covariance of the estimated states will be minimized:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;P = E\{(x_k - \hat{x}_{k|k})(x_k - \hat{x}_{k|k})^T\}.&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As this covariance is minimized, the goal of any kind of estimation filtering is accomplished -- the error between the true state $x_k$ and the estimated state $\hat{x}_{k|k}$ is driven to zero [1] [2].&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;em&gt;Extended Kalman filter&lt;/em&gt; is more or less a mathematical &quot;hack&quot; that allows you to apply these techniques to &lt;strong&gt;mildly nonlinear&lt;/strong&gt; systems. I say &quot;hack&quot; because it is sub-optimal, i.e., it does not have any mathematical guarantees like the KF does. If you initialize the filter with poor conditions (i.e., the initial state), it will quickly diverge. If propagation and/or measurement updates happen at too great a timestep, it will quickly diverge. As you state in your question, you build an EKF by linearizing your system -- which implies that you loose information about your system and if you operate too far from your linearization point, the solution will be incorrect (like trying to fit a line to a quadratic).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is another standard implementation of Kalman filters called the &lt;em&gt;Unscented Kalman Filter&lt;/em&gt; (UKF). The UKF is ideal for &lt;strong&gt;grossly nonlinear&lt;/strong&gt; systems because: (1) you don't have to do the math / computation to linearize, and (2) it intelligently chooses &lt;em&gt;sigma points&lt;/em&gt; to propagate (instead of an entire model) that best represent the statistics of the system. The UKF kind of bridges &quot;the best of both worlds&quot; from Kalman filtering (which assumes a Gaussian noise and belief propagation) and nonlinear &lt;em&gt;Particle filtering&lt;/em&gt; (which makes no assumption of the form of the belief propagation), another type of Bayes filter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my experience (3-wheeled ground robots, aerial robots), and EKF is a nice and computationally efficient way to estimate state and fuse information from multiple sensors (accel, gyro, airspeed, camera). Tuning can often be a pain, but the more intuition about your system and the noise of your sensors, the easier it becomes. Because of the EKF's efficiency, relative ease-of-implementation, and demonstrated effectiveness it is used widely in robotics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For more information on applying an EKF to wheeled robots (or aircraft) I would direct you Dr. Randy Beard's &lt;a href=&quot;http://rwbclasses.groups.et.byu.net/lib/exe/fetch.php?media=robot_soccer:material:robot_soccer_notes.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;notes on Robot Soccer&lt;/a&gt; and Rober Labbe's &lt;a href=&quot;https://github.com/rlabbe/Kalman-and-Bayesian-Filters-in-Python&quot; rel=&quot;nofollow noreferrer&quot;&gt;iPython Notebooks on Bayesian filters&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;[1] R. W. Beard and T. W. McLain, Small Unmanned Aircraft. Princeton, New Jersey: Princeton University Press, 2012.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[2] R. Faragher, “Understanding the basis of the kalman filter via a simple and intuitive derivation [lecture notes],” IEEE Signal Process. Mag., vol. 29, no. 5, pp. 128–132, 2012.&lt;/p&gt;&#xA;" OwnerUserId="14272" LastActivityDate="2017-09-07T15:39:45.140" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14176" PostTypeId="1" CreationDate="2017-09-07T22:36:15.160" Score="0" ViewCount="351" Body="&lt;p&gt;I am trying to setup a two way communication with the Baxter Robot using the Robotics System Toolbox from MATLAB. However, I am unable to move the arms or record a trajectory using the rosactionclient command. Is there a method to solve this problem? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The examples in the documentation provided by MATLAB uses rosactionclient for the PR2 arm, but is it the same for Baxter as well ?&lt;/p&gt;&#xA;" OwnerUserId="17858" LastEditorUserId="37" LastEditDate="2019-08-20T15:32:28.407" LastActivityDate="2019-09-19T16:01:45.180" Title="Baxter and Robotics System Toolbox" Tags="&lt;matlab&gt;&lt;robotics-system-toolbox&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14178" PostTypeId="1" AcceptedAnswerId="14183" CreationDate="2017-09-08T08:42:30.213" Score="7" ViewCount="670" Body="&lt;p&gt;I'm reading Mechanics of Robotic Manipulation by Matthew T Mason and I stumbled upon the concept of kinematic constraints. The book mentioned about two types of constraints: holonomic and nonholonomic constraints&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Following is one example of a &lt;strong&gt;holonomic constraint&lt;/strong&gt; mentioned in the book: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/IA0w9.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/IA0w9.png&quot; alt=&quot;holonomic constraint&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A rectangular block sliding in a channel with free variations in the coordinates x,y,and theta. The channel imposes a constraint so that the rectangle's y value is fixed. The holonomic constraint is described below:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/OVV6Z.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OVV6Z.png&quot; alt=&quot;holonomic constraint equation&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While the following is an example of a &lt;strong&gt;nonholonomic constraint&lt;/strong&gt; mentioned: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/aaxfC.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/aaxfC.png&quot; alt=&quot;nonholonomic&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Suppose that we add a wheel to the block, so it behaves like a unicycle or an ice skate. At any given point in time, the block can move forward and backward, it can rotate about the wheel center, but it cannot move sideways. The nonholonomic constraint equation is described below as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Jm9xc.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Jm9xc.png&quot; alt=&quot;nonholonomic equation&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The author also wrote that:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&quot;.. it is evident that each independent holonomic constraint reduces&#xA;  the degrees of freedom of the system by one, but a nonholonomic&#xA;  constraint does not.&quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;All of the explanations so far seem to contradict my understanding of the physical meaning of robotic holonomic movement:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;I've always thought that a holonomic robot means that it can move in all directions and hence the total number of controllable degrees of freedom is equal to the total degrees of freedom. But how is that possible when every holonomic constraint reduces the degree of freedom of the system?&lt;/li&gt;&#xA;&lt;li&gt;And how come doesn't a nonholonomic constraint reduce the degree of freedom of the system? Isn't the unicycle constraining the block from moving sideways? Why is the degree of freedom of the system not considered as reduced then?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I hope someone can help to clarify my understanding.&lt;/p&gt;&#xA;" OwnerUserId="17472" LastEditorUserId="15160" LastEditDate="2019-03-28T10:35:39.900" LastActivityDate="2019-04-01T23:08:48.817" Title="Holonomics Movement vs Holonomics Constraint" Tags="&lt;kinematics&gt;&lt;wheeled-robot&gt;&lt;navigation&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14179" PostTypeId="1" AcceptedAnswerId="14180" CreationDate="2017-09-08T20:09:37.583" Score="2" ViewCount="829" Body="&lt;p&gt;&lt;strong&gt;Hi,&lt;/strong&gt; I want to control the speed of a conveyor belt. I can measure the linear velocity of the belt using a encoder mounted at the roller of the belt. My confusion is not with the PID but only the mapping of PID output to PWM for the motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PID error is in terms of meter/seconds(m/s) of the conveyor belt. The P, I and, D parts are summed to give a control signal. The motor interprets 0 as 0 PWM and 16393 as 100% PWM. The range from 0 to 16393 is serially communicated to the motor. I want this to be from the PID.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;My question is: How do I map the PID output based on error(m/s) to PWM for the motor.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Example: I am using just PI and ignoring D for now to avoid noise amplification issues. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The maximum speed of the belt is when 16393 is sent to it and the speed is 0.5 m/s. I set desired speed as 0.2 m/s,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the start, error = 0.2 m/s&#xA;Lets say Kp = 4, Ki = 2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;output = Kp * error + Ki * sum_of_errors * sampling_time&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would get a PID output but it would be very small compared to 16393 needed for the 100 % PWM for the motor. I need 100 % PWM to power motor in the start and gradually decrease the PWM as the belts speed goes from 0 m/s to 0.2 m/s. How can I map this small PID output to 16393 need for the Motors 100 % PWM?&lt;/p&gt;&#xA;" OwnerUserId="17554" LastActivityDate="2017-09-08T21:07:31.653" Title="PID Controller Output Mapping for Motor Speed Control" Tags="&lt;control&gt;&lt;pid&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14180" PostTypeId="2" ParentId="14179" CreationDate="2017-09-08T21:07:31.653" Score="3" Body="&lt;p&gt;Convert your PWM units to belt velocity units, or vice-versa.  The quick and dirty way of doing this is to multiply your P, I, and D terms by $16,393 \over 0.5$.  The PWM-to-belt velocity mapping won't be exactly linear, like this method assumes, but it will be close enough that your controller can squash any residual errors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Caution:  since you are controlling the velocity of the belt, in which the speed of the conveyor is sure to lag behind the speed of your control input, you should consider setting your I gain to 0 until you are &quot;close&quot; to the desired speed.  Otherwise that windup will induce overshoot in your conveyor speed.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2017-09-08T21:07:31.653" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="14181" PostTypeId="1" AcceptedAnswerId="14186" CreationDate="2017-09-08T21:44:32.957" Score="1" ViewCount="358" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/XAHir.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XAHir.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am trying to implement a scan matcher using Scan based sensor model but I cant figure out how to estimate likelihood for a particular scan. Is there any implementation available ? Would be thankful for help&lt;/p&gt;&#xA;" OwnerUserId="16715" LastActivityDate="2017-09-10T04:03:58.497" Title="How can we estimate the likelihood field for a particular scan in probabilistic terms?" Tags="&lt;slam&gt;&lt;probability&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14183" PostTypeId="2" ParentId="14178" CreationDate="2017-09-09T09:21:30.177" Score="10" Body="&lt;p&gt;You can look at degrees of freedom as if they were the number of variables that you need to use to describe your system. So, for a robot moving in a 2D plane, its state would be represented by:&#xA;$$&#xA;s=\begin{bmatrix}&#xA;   x  \\&#xA;   y \\&#xA;   \theta \\&#xA;\end{bmatrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a robot moving in a 2D plane to be holonomic, it must have the ability to change any state variable at any given time, no matter the value that the other variables have at the moment. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, for instance, this means that in order to be holonomic, the robot must be able to change its $Y$ variable to any value it wants without altering $X$ and $\theta$. In the example you give for a non-holonomic constraint, while it is possible for the robot to reach any $X$, $Y$ and $\theta$ values, it has a limit on the number of paths that it must take (one such impossible path would be to move sideways!).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Generally speaking, in order to be holonomic, the number of degrees of fredoom must be the same as the number of differentiable degrees of freedom:&#xA;$$DOF=DDOF$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DOFs define the possibility of reaching various configurations, e.g. position ($X$ and $Y$) and orientation ($\theta$)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DDOFs define the number of independently admissible velocities, e.g. linear velocity ($\dot{X}$ and $\dot{Y}$) and angular velocity ($\dot{\theta}$).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Holonomic restrictions limit the number of DOFs. For instance, your wheeled robot cannot fly, hence $Z$ (height) does not belong in the state.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Non-holonomic restrictions limit the ability to change the derivative of the state at will&lt;/strong&gt;, hence they reduce the number of DDOFs. For instance, you cannot have your unicycle rotating (constant $\dot{\theta}$) while only moving in the $X$ direction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Interestingly enough, a lighthouse is holonomic!&#xA;&lt;a href=&quot;https://i.stack.imgur.com/RAU5i.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/RAU5i.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Everything that is stationary is holonomic because it has 0 DOFs and 0 DDOFs!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, in a nutshell:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) DOFs = number of variables in the state&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) DDOFs = velocities that can be changed independently&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3) Holonomic restrictions reduce DOFs&lt;/p&gt;&#xA;&#xA;&lt;p&gt;4) Non-holonomic restrictions reduce DDOFs&lt;/p&gt;&#xA;&#xA;&lt;p&gt;5) A robot is holonomic if, and only if, DOFs=DDOFs&lt;/p&gt;&#xA;" OwnerUserId="17761" LastActivityDate="2017-09-09T09:21:30.177" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14186" PostTypeId="2" ParentId="14181" CreationDate="2017-09-10T04:03:58.497" Score="0" Body="&lt;p&gt;It looks like ROS has a few packages (in rough order of apparent usefulness): &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://wiki.ros.org/canonical_scan_matcher&quot; rel=&quot;nofollow noreferrer&quot;&gt;Scan matcher&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://wiki.ros.org/laser_scan_matcher&quot; rel=&quot;nofollow noreferrer&quot;&gt;laser scan matcher&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://wiki.ros.org/local_map&quot; rel=&quot;nofollow noreferrer&quot;&gt;Local map&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://wiki.ros.org/crsm_slam&quot; rel=&quot;nofollow noreferrer&quot;&gt;crsm-slam&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://wiki.ros.org/mrpt_localization&quot; rel=&quot;nofollow noreferrer&quot;&gt;mrpt-localization&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://wiki.ros.org/amcl&quot; rel=&quot;nofollow noreferrer&quot;&gt;amcl&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="16134" LastActivityDate="2017-09-10T04:03:58.497" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14187" PostTypeId="2" ParentId="13976" CreationDate="2017-09-10T04:12:06.847" Score="0" Body="&lt;p&gt;Based on your comments thread, I think what you want is a &lt;a href=&quot;https://en.wikipedia.org/wiki/Kalman_filter&quot; rel=&quot;nofollow noreferrer&quot;&gt;Kalman filter&lt;/a&gt;. I think this &lt;a href=&quot;https://github.com/jpalves/IMU-MPU6050&quot; rel=&quot;nofollow noreferrer&quot;&gt;ahrs&lt;/a&gt; implementation will be helpful for you. If you search &quot;mpu6050 ahrs&quot; you'll also find a dozen or so other implementations to look through. If you want you can modify it so that it explicitly sets the Z coordinate to zero, but it should actually figure that out automatically. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To map the room (and do SLAM), you will need a sensor which can tell you how far away the walls are. Sonor tends to be a good low-cost entry point, though it has plenty of implementation difficulties.&lt;/p&gt;&#xA;" OwnerUserId="16134" LastActivityDate="2017-09-10T04:12:06.847" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14189" PostTypeId="1" AcceptedAnswerId="14199" CreationDate="2017-09-10T13:26:44.927" Score="3" ViewCount="35" Body="&lt;p&gt;I understand that choosing a microcontroller is all based on the needs and that there is no perfect Mcu.presently I have to select an MCU for a robot my team is building for the 2018 Abu robotics competition and I want to know how does the specs matter like what clocking speeds are ideal for what applications etc... while selecting one.&lt;/p&gt;&#xA;" OwnerUserId="18026" LastActivityDate="2017-09-12T04:02:46.253" Title="What parameters can be/should be looked on while deciding to work with a microcontroller in a bot" Tags="&lt;microcontroller&gt;&lt;wheeled-robot&gt;&lt;industrial-robot&gt;&lt;first-robotics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14191" PostTypeId="1" CreationDate="2017-09-11T00:55:36.063" Score="1" ViewCount="687" Body="&lt;p&gt;I made an autonomous robot with 3 ultrasonic sensors. I want to reduce the noise between the 3 sensors and make it gradually slow when it approaches an obstacle. My code is mentioned below. Please help me in this.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Distance 1 is front sensor&lt;/li&gt;&#xA;&lt;li&gt;Distance 2 is left sensor&lt;/li&gt;&#xA;&lt;li&gt;Distance 3 is right sensor.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;If you can suggest any  improvements to this code, I would be grateful.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;//CODE FOR AUTONOMOUS WITH 3 ULTRASONIC SENSORS &#xA;/*code written By &#xA;Faraz Hassan&#xA;For Autonomous Rover Obstacle Avoidance */&#xA;//include newping and adafruit libraries to the code&#xA;#include &amp;lt;NewPing.h&amp;gt;&#xA;#include &amp;lt;AFMotor.h&amp;gt;&#xA;&#xA;AF_DCMotor motor1(1);&#xA;AF_DCMotor motor2(2);&#xA;AF_DCMotor motor3(3);&#xA;AF_DCMotor motor4(4);&#xA;&#xA;int trigger_c = A0;          // Controls the pulse sent from the right sensor&#xA;int echo_c    = A1;          // Controls the pulse received from the right sensor&#xA;int trigger_a = A2;          // Controls the pulse sent from the left sensor&#xA;int echo_a    = A3;          // Controls the pulse received from the left sensor&#xA;int trigger_b = A4;          // Controls the pulse sent from the front sensor&#xA;int echo_b    = A5;          // Controls the pulse received from the front sensor&#xA;&#xA;int tp = 250;//delay&#xA;&#xA;long  duration_b,duration_a, duration_c, distance1, distance2, distance3; &#xA;&#xA;void setup()&#xA;{&#xA;// set all the motor control pins to outputs&#xA;&#xA; Serial.begin(9600);&#xA;        pinMode(trigger_b, OUTPUT);    // Arduino signal output from trigger_front&#xA;        pinMode(echo_b, INPUT);        // Arduino signal input from echo_front&#xA;        pinMode(trigger_a, OUTPUT);    //Arduino signal output from trigger_left&#xA;        pinMode(echo_a, INPUT);        // Arduino signal input from echo_left&#xA;        pinMode(trigger_c, OUTPUT);    // Arduino signal output from trigger_right&#xA;        pinMode(echo_c, INPUT);        //Arduino signal input from echo_right&#xA;&#xA;}&#xA;&#xA;void loop()&#xA;{&#xA;// Find distance Sonar….&#xA;// Clears the trigPin&#xA;digitalWrite(trigger_b, LOW);       //Sends a 2 µs LOW signal to the trigPin to make sure it’s turned off at the beginning of the program loop.&#xA;delayMicroseconds(2);&#xA;// Sets the trigPin on HIGH state for 10 micro seconds&#xA;digitalWrite(trigger_b, HIGH);     // Sends a 10 µs HIGH signal to the trigPin to initiate the sequence of eight 40 KHz ultrasonic pulses sent from the transmitting transducer.&#xA;delayMicroseconds(10);&#xA;digitalWrite(trigger_b, LOW);&#xA;// Reads the echoPin, returns the sound wave travel time in microseconds&#xA;duration_b= pulseIn(echo_b, HIGH);  //Defines the duration variable as the length (in µs) of any HIGH input&#xA;                                    //signal detected at the echoPin. &#xA;                                    //The Echo pin output = time it takes the trigger pin emitted ultrasonic pulse to travel to the object and back to the sensor.&#xA;// Calculating the distance&#xA;distance1= duration_b*0.034/2;       // Defines the distance variable as the duration (time in d = s x t) multiplied by the speed of sound converted from meters per second to centimeters per µs (0.0344 cm/µs). &#xA;        //(d=s*t) * speed of sound converted from meters per second to centimeters per µs (0.0344 cm/µs).                          &#xA;// Prints the distance on the Serial Monitor&#xA;&#xA;Serial.print(&quot;front:   &quot;);&#xA;Serial.print(distance1);&#xA;Serial.print(&quot;  &quot;);&#xA;Serial.print(&quot;left:  &quot;);&#xA;Serial.print(distance2);&#xA;Serial.print(&quot;  &quot;);&#xA;&#xA;Serial.print(&quot;right:  &quot;);&#xA;Serial.print(distance3);&#xA;Serial.println(&quot;  &quot;);&#xA;&#xA;&#xA;// Find distance Sonar2….&#xA;// Clears the trigPin&#xA;digitalWrite(trigger_a, LOW);&#xA;delayMicroseconds(2);&#xA;// Sets the trigPin on HIGH state for 10 micro seconds&#xA;digitalWrite(trigger_a, HIGH);&#xA;delayMicroseconds(10);&#xA;digitalWrite(trigger_a, LOW);&#xA;// Reads the echoPin, returns the sound wave travel time in microseconds&#xA;duration_a = pulseIn(echo_a, HIGH);&#xA;// Calculating the distance&#xA;distance2= duration_a*0.034/2;&#xA;// Prints the distance on the Serial Monitor&#xA;digitalWrite(trigger_c, LOW);&#xA;delayMicroseconds(2);&#xA;// Sets the trigPin on HIGH state for 10 micro seconds&#xA;digitalWrite(trigger_c, HIGH);&#xA;delayMicroseconds(10);&#xA;digitalWrite(trigger_c, LOW);&#xA;// Reads the echoPin, returns the sound wave travel time in microseconds&#xA;duration_c = pulseIn(echo_c, HIGH);&#xA;// Calculating the distance&#xA;distance3= duration_c*0.034/2;&#xA;&#xA;&#xA;motor1.setSpeed(255);&#xA;motor2.setSpeed(255);&#xA;motor3.setSpeed(255);&#xA;motor4.setSpeed(255);&#xA;motor1.run(FORWARD);&#xA;motor2.run(FORWARD); &#xA;motor3.run(FORWARD);&#xA;motor4.run(FORWARD);&#xA; if(Serial.available()&amp;gt;0)//Checking is Serial data available&#xA;  {&#xA;    int input = Serial.read(); //Storing value of read data into variable assigned&#xA;//    switch(input)&#xA;//    {&#xA;//     case 'o' : forward(); //Calling respective functions if mathced with case label &#xA;//     break;&#xA;// &#xA;//     case 'x' : stopMotors();&#xA;//     break;&#xA;//     default : break;&#xA;//    }&#xA;  } &#xA;if (distance1 &amp;lt; 28|| distance2 &amp;lt; 28|| distance3 &amp;lt; 28)       //DISTANCE1 FRONT SENSOR  DISTANCE2 LEFT SENSOR  DISTANCE 3 RIGHT SENSOR&#xA;{ stopMotors();&#xA;delay (1000);&#xA;if (distance2 &amp;lt; distance3)   //  LEFT SENSOR DISTANCE &amp;lt; RIGHT SENSOR DISTANCE&#xA;{ stopMotors();&#xA;   delay (1000);&#xA;  turnRight();&#xA;delay (700); &#xA;revers();&#xA;delay(700);&#xA;}&#xA;if (distance2 &amp;gt; distance3)  //  LEFT SENSOR DISTANCE &amp;gt;  RIGHT SENSOR DISTANCE&#xA;{ stopMotors();&#xA;delay (1000);&#xA;  turnLeft();&#xA;delay (700);&#xA;revers();&#xA;delay(700);&#xA;}&#xA;if (distance2 == distance3)  //  LEFT SENSOR DISTANCE ==  RIGHT SENSOR DISTANCE&#xA;{ revers();&#xA;delay (1000);&#xA;&#xA;}&#xA;}&#xA;&#xA;if (distance1 &amp;gt; 28) &#xA;forward();   // FRONT SENSOR  DISTANCE &amp;gt; 25&#xA;&#xA;}&#xA;&#xA;void revers()&#xA;{&#xA;// turn on motor A&#xA;   Serial.println(&quot;&amp;lt;Mars Rover&amp;gt; Backward&quot;);&#xA;motor1.run(BACKWARD);&#xA;motor2.run(BACKWARD); &#xA;motor3.run(BACKWARD);&#xA;motor4.run(BACKWARD);&#xA;&#xA; motor1.setSpeed(190);&#xA; motor2.setSpeed(190);&#xA; motor3.setSpeed(190);&#xA;  motor4.setSpeed(190);&#xA;  delay(tp);&#xA;}&#xA;void forward()&#xA;{&#xA;       Serial.println(&quot;&amp;lt;Mars Rover&amp;gt; Forward&quot;);&#xA;       motor1.setSpeed(255);&#xA;       motor2.setSpeed(255);&#xA;       motor3.setSpeed(255);&#xA;       motor4.setSpeed(255);&#xA;       motor1.run(FORWARD);&#xA;       motor2.run(FORWARD); &#xA;       motor3.run(FORWARD);&#xA;       motor4.run(FORWARD);&#xA;        delay(tp);&#xA;&#xA;}&#xA;void turnRight()&#xA;{&#xA;  Serial.println(&quot;&amp;lt;Mars Rover&amp;gt; Right&quot;);&#xA;       motor1.setSpeed(255);&#xA;       motor2.setSpeed(255);&#xA;       motor3.setSpeed(255);&#xA;       motor4.setSpeed(255);&#xA;       motor1.run(FORWARD);&#xA;       motor2.run(FORWARD); &#xA;       motor3.run(BACKWARD);&#xA;       motor4.run(BACKWARD);&#xA;&#xA;// Turn period&#xA;delay(tp);&#xA;&#xA;}&#xA;void turnLeft()&#xA;{  Serial.println(&quot;&amp;lt;Mars Rover&amp;gt; Left&quot;);&#xA;       motor1.setSpeed(255);&#xA;       motor2.setSpeed(255);&#xA;       motor3.setSpeed(255);&#xA;       motor4.setSpeed(255);&#xA;       motor1.run(BACKWARD);&#xA;       motor2.run(BACKWARD); &#xA;       motor3.run(FORWARD);&#xA;       motor4.run(FORWARD);&#xA;&#xA;//Turn period&#xA;delay(tp);&#xA;&#xA;}&#xA;void stopMotors()&#xA;{&#xA;// Stop motors&#xA;  Serial.println(&quot;&amp;lt;Mars Rover&amp;gt; Stop&quot;);&#xA;      motor1.setSpeed(0);&#xA;       motor2.setSpeed(0);&#xA;       motor3.setSpeed(0);&#xA;       motor4.setSpeed(0);&#xA;       delay(tp);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="18088" LastEditorUserId="17029" LastEditDate="2017-09-11T18:33:01.023" LastActivityDate="2020-06-08T00:53:24.920" Title="Reducing noise between 3 ultrasonic sensors and make Autonomous Robot more precise" Tags="&lt;arduino&gt;&lt;pid&gt;&lt;kalman-filter&gt;&lt;ultrasonic-sensors&gt;&lt;autonomous-car&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14193" PostTypeId="1" AcceptedAnswerId="14231" CreationDate="2017-09-11T16:36:55.623" Score="2" ViewCount="207" Body="&lt;p&gt;&lt;strong&gt;Please note:&lt;/strong&gt; Although this question &lt;em&gt;tangentially&lt;/em&gt; involves a Raspberry Pi, this is really more just a pure robotics question at heart.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;I'm trying to connect my Raspberry Pi 1 Model A to &lt;a href=&quot;https://www.radioshack.com/products/radioshack-6vdc-mini-buzzer&quot; rel=&quot;nofollow noreferrer&quot;&gt;this buzzer&lt;/a&gt;. I've seen wiring diagrams of this in action, and &lt;em&gt;believe&lt;/em&gt; I need to put a resistor in between the buzzer and the (3.3V) output GPIO pin. If this is incorrect, &lt;strong&gt;please begin by correcting me!&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;My question is: how do I calculate the required ohms of this resistor?&lt;/strong&gt; This particular buzzer is rated at 6VDC.&lt;/p&gt;&#xA;" OwnerUserId="9888" LastActivityDate="2017-09-16T05:41:04.590" Title="Calculating the resistor for a buzzer" Tags="&lt;raspberry-pi&gt;&lt;electronics&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14194" PostTypeId="2" ParentId="14191" CreationDate="2017-09-11T20:30:57.247" Score="2" Body="&lt;p&gt;There are two issues in the question:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;noise (interference) among the three sensors&lt;/li&gt;&#xA;&lt;li&gt;how to handle the motion with relation to the sensor readings&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The noise between sensors is most probably a hardware issue (cabling or EMI) or it might be related to the sensors being close to each other. Without more info about the current implementation, this is all I can say at first thought. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Coming to the motion algorithms:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The current distance to action decisions are based on distinct cases (for example the distances being smaller than a treshold) however gradual motion requires a proportional control mechanism. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Proportional control can be applied to any sensed variable that you want to keep in control. Applying it to the distance variable, you could set up a speed - distance relationship, as follows:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;d_min_allowed = 10 //the distance that you want the robot to completely stop&#xA;d_slowdown_start = 28 //the distance that you want the robot to start slowing down)&#xA;distance = (distance1+distance2+distance3)/3   // updated sensor readings&#xA;&#xA;if (distance &amp;lt; d_slowdown_start) {&#xA;// start slowdown&#xA;error = (distance - d_min_allowed);&#xA;motorspeed = Kp*(error);&#xA;(Kp=255/ (d_slowdown_start-d_min_allowed) = 255 / 18)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Once you get this one running, setting up similar proportional control mechanisms for steering will be a joyful challenge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For more information and background, you can check the following topics online: system control, proportional control, PID control.&lt;/p&gt;&#xA;" OwnerUserId="9570" LastActivityDate="2017-09-11T20:30:57.247" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14195" PostTypeId="1" CreationDate="2017-09-11T21:54:21.010" Score="1" ViewCount="1284" Body="&lt;p&gt;I'd like to get the object pose based on the attached AR marker to the object. I believe I only need one tag to get the 6D pose. However, I sometimes see more than one AR markers are used in the research papers or the demos by Boston Dynamics (&lt;a href=&quot;https://boygeniusreport.files.wordpress.com/2016/02/screenshot-76.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://boygeniusreport.files.wordpress.com/2016/02/screenshot-76.png&lt;/a&gt;) or by the team at Amazon Robotics Challenge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do I need to use more than one marker? If so, how can I calculate the 6D pose from more than one marker's information?&lt;/p&gt;&#xA;" OwnerUserId="15905" LastActivityDate="2017-09-12T02:06:54.187" Title="How many AR markers should I use to get the object pose?" Tags="&lt;computer-vision&gt;&lt;pose&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14197" PostTypeId="2" ParentId="14195" CreationDate="2017-09-12T02:06:54.187" Score="2" Body="&lt;p&gt;Without knowing exactly what &lt;em&gt;type&lt;/em&gt; of AR marker you are interested in, I'll talk about two types that I am familiar with: ArUco and April Tags. Both are AR markers that have open source libraries with stripped down (and possibly outdated) versions &lt;a href=&quot;http://docs.opencv.org/3.1.0/d5/dae/tutorial_aruco_detection.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;implemented in OpenCV&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These libraries will give you the full pose of the camera based on the marker in the field-of-view. The library uses the physical marker size and camera calibration parameters to estimate the pose of the camera w.r.t an individual marker or set of markers. You may use multiple markers in the form of a marker map to enhance the estimate of the camera pose. I imagine when people use multiple markers as in the Boston Dynamics example it is to ensure track continuity as markers enter/leave the field-of-view or to mark specific aspects of a scene.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are interested in using ROS, perhaps this &lt;a href=&quot;https://github.com/plusk01/aruco_localization&quot; rel=&quot;nofollow noreferrer&quot;&gt;aruco_localization repo&lt;/a&gt; will be of use. It was set up to localize a mini-quadrotor with an upwards facing camera, as seen &lt;a href=&quot;https://github.com/plusk01/desktopquad/blob/master/doc/report/figures/sim_pic.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="14272" LastActivityDate="2017-09-12T02:06:54.187" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="14199" PostTypeId="2" ParentId="14189" CreationDate="2017-09-12T04:02:46.253" Score="1" Body="&lt;p&gt;Typically a decision like this is made based on a list of design requirements. Have you listed these out? What do you expect the MCU to do? How many peripherals will you have?  Since you have a deadline, I would focus first on getting something to work very quickly using a simple board such as an Arduino or teensy. This buys you two things: (1) You have &lt;em&gt;something&lt;/em&gt; working, even if it doesn't have all the bells and whistles you wanted. (2) You learn your design requirements thoroughly enough to pick a good part.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based on their 2017 rulebook, it looks like they don't say anything about how many processors you can have. In that case, I would recommend using something like an odroid for your higher level computer, which will give you enough power to do some lightweight computer vision and all of the planning/SLAM you could want. It has the added bonus of running linux, which gives you access to ROS rather than reimplementing everything in embedded C on an MCU. &lt;/p&gt;&#xA;" OwnerUserId="16134" LastActivityDate="2017-09-12T04:02:46.253" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14201" PostTypeId="1" CreationDate="2017-09-12T15:20:10.520" Score="1" ViewCount="107" Body="&lt;p&gt;Let us assume that I am able to create a 3D map (octree) based on information gathered by a Lidar and/or a camera on a quadrotor. Now based on the current 3D representation of the world, I want to go from the current pose to another one (which is in the known 3D environment).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To do so I want:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;First to create a set of waypoints by using rrt*;&lt;/li&gt;&#xA;&lt;li&gt;Then based on the waypoints, build polynomial curves.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So I took a look at OMPL, and although I understood the basics (well I think), I am still do not understand how to define the geometry of the robot (a box in my case) and how to define the working space (here a binary octree for instance).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the examples I found, I see that goal and start spaces are defined, then a planner along with the problem definition is chosen, and finally solve. But I cannot see where the geometry and/or kinematics is defined no the world space...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sorry for the naive question, but if somebody can provide a hint it will be very helpfull&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you&lt;/p&gt;&#xA;" OwnerUserId="16030" LastActivityDate="2017-09-12T15:20:10.520" Title="How to include a space and robot geometry with OMPL" Tags="&lt;quadcopter&gt;&lt;rrt&gt;" AnswerCount="0" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14202" PostTypeId="2" ParentId="12494" CreationDate="2017-09-12T20:44:48.170" Score="1" Body="&lt;p&gt;Turns out I was transforming before interpolating the data, and my interpolation function assumed that the two streams of data were taken at the same time stamps. A simple mistake. So I was comparing data from different points in time. Consequently, it makes sense that resulting fitted transformation was incorrect. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;@Chuck -- The resulting (correct) transform could indeed look like it involves scaling because I am dealing with 3-D data. Above, only a single axis of data is displayed. When rotating a a vector from one frame to another, the magnitude of the x-component may very well change -- what falls along the 'x-axis' depends on the frame definition.  &lt;/p&gt;&#xA;" OwnerUserId="17127" LastActivityDate="2017-09-12T20:44:48.170" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14204" PostTypeId="2" ParentId="10799" CreationDate="2017-09-13T05:18:56.323" Score="1" Body="&lt;p&gt;This looks similar to &lt;a href=&quot;http://stackoverflow.com/questions/40593473/problems-during-compilation-of-ros-indigo-qt-gui-cpp-in-arch-linux-arm&quot;&gt;this problem&lt;/a&gt;, where the user was missing qt5-base. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;(added this as an answer to make the community bot happy)&lt;/p&gt;&#xA;" OwnerUserId="16134" LastActivityDate="2017-09-13T05:18:56.323" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14205" PostTypeId="1" CreationDate="2017-09-13T11:34:22.460" Score="2" ViewCount="72" Body="&lt;p&gt;My robot needs to obtain visual odometry, with a condition that the used algorithm has to have as low computational requirements as possible and the used camera/sensor shouldn't be very expensive. The thing is that it'll run on a platform like Jetson together with lots of other CPU expensive processes. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Currently I'm trying monocular odometry packages from ROS (fovis, svo...) with an ASUS Xtion sensor which doesn't give very good results (due to computational power with fovis or probably insufficient FOV with svo). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I don't have a stereo camera to compare it with and I don't want to buy one until I don't know if it helps, I want to ask whether stereo algorithms would be a better choice here (are they more effective?), having in mind the low-cost budget and low cpu requirements. The robot also has to keep the depth sensor (doesn't have to be strictly ASUS Xtion), so the possibilities are to use a different sensor usable for obtaining visual odometry or to equip the robot with another camera. If you have any other suggestions I will appreciate it. Thank you in advance!&lt;/p&gt;&#xA;" OwnerUserId="18111" LastEditorUserId="18111" LastEditDate="2017-09-14T07:42:10.070" LastActivityDate="2017-09-14T07:42:10.070" Title="Effectiveness of visual odometry algorithms (CPU usage)" Tags="&lt;stereo-vision&gt;&lt;odometry&gt;&lt;visual-odometry&gt;&lt;monocular&gt;" AnswerCount="0" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14208" PostTypeId="1" AcceptedAnswerId="16196" CreationDate="2017-09-13T19:21:52.983" Score="0" ViewCount="85" Body="&lt;p&gt;The specifications at &lt;a href=&quot;https://www.lego.com/en-us/mindstorms/downloads/download-software&quot; rel=&quot;nofollow noreferrer&quot;&gt;Lego official site here&lt;/a&gt; say that Dual Core 2.0GHz CPU or better is needed. Still, maybe quad core with 1.8 GHz (like &lt;a href=&quot;https://www.devicespecifications.com/en/model/94412f99&quot; rel=&quot;nofollow noreferrer&quot;&gt;Prestiogio Multipad Visconte&lt;/a&gt;'s Intel Atom quad core) would work smoothly enough?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Have anyone tried to run Lego Mindstorms EV3 on such kind of CPU?&lt;/p&gt;&#xA;" OwnerUserId="18115" LastActivityDate="2018-08-07T12:14:55.717" Title="Can Lego Mindstorms EV3 be run on Intel Atom 1.33 GHz CPU?" Tags="&lt;mindstorms&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14212" PostTypeId="2" ParentId="2209" CreationDate="2017-09-14T07:53:08.950" Score="2" Body="&lt;p&gt;Hysteresis Motors &lt;/p&gt;&#xA;&#xA;&lt;p&gt;With respect to the supply frequency, the speed is uniquely related and it is one of the rarest features of synchronous motors. There are lots of applications of for several special types of synchronous motors in devices like tape recorders, clocks, and photographs. The most frequently used motor is the hysteresis motor which is composed of a rotor with a ring of semi-permanent magnet material like a high-carbon steel. By pulling the rotor out of synchronism, the speed is reduced by the stator field which leads to the rotor material to be magnetized. Good starting torque is provided by these motors with low ripple and is very silent. It has low efficiency and only small power ratings applications are permitted.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Reluctance Motors&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Iron poles are caused to hold a magnetic flux for aligning with each other that forced by the Reluctance motors to work on this principle. There is no electrical windings and has four iron poles.  There are six poles in the stator with a current carrying coil in each.  Similar to an induction motor, the stator is made and has a controllable supply with three phase. Isolated by non-magnetic spacers, the rotors include longitudinal iron laminations. There are salient poles in the rotor without any field windings. You can also find a damper winding in the rotor surface that helps the machine to start the induction motor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;for more types: &lt;a href=&quot;http://crbtech.in/Electrical-Training/various-types-of-electric-motors/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Electric motor&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18123" LastActivityDate="2017-09-14T07:53:08.950" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14213" PostTypeId="1" CreationDate="2017-09-14T13:16:53.000" Score="2" ViewCount="1286" Body="&lt;p&gt;I am currently working on a robotics project in which I wish to integrated a depth/object scanner. Now my focus is currently on an IR camera in combination with some sort of IR pattern projector. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I am having a hard time finding any sort of IR projector which can project a pattern. I have found several topics suggesting that I use an IR-LED and create a pattern in front of it, but that would mean the &lt;code&gt;projector&lt;/code&gt; would take up significant space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any projectors out on the market in a sensible form-factor for consumers? I came across the Structure Core, but that's only available to OEMs. &lt;/p&gt;&#xA;" OwnerUserId="18125" LastActivityDate="2021-02-09T13:31:01.050" Title="IR pattern projector" Tags="&lt;mobile-robot&gt;&lt;arduino&gt;&lt;sensors&gt;" AnswerCount="4" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14215" PostTypeId="1" AcceptedAnswerId="14225" CreationDate="2017-09-15T00:17:51.280" Score="1" ViewCount="27" Body="&lt;p&gt;Most home or entertainment robots I see are either manual human remote control or have the processor on-board and are completely self contained. Contrast to this robots which are neither, but are controlled wirelessly by a cpu elsewhere not in the body. Another cpu in the body is there merely to relay commands and readings back wirelessly to and from the main cpu. A hypothetical example of this are the &lt;a href=&quot;http://starwars.wikia.com/wiki/Battle_droid&quot; rel=&quot;nofollow noreferrer&quot;&gt;battle droids&lt;/a&gt; from Star Wars, which were controlled by a &quot;droid control ship&quot;, without which they were helpless. So this is the type of robotics architecture I am referring to. I have built such a robot already, so this is really a robotics question, not a science fiction question. I just wanted to convey the architecture I am referring to with a well known example.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the term for the physical shell? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the term for the main external cpu that houses the actual algorithm?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the term &quot;robot&quot; applies, Which entity is the term &quot;robot&quot; more appropriately applied to? Or are there other actual industry terms which specifically classify the components in this architecture? I'm after the most widely accepted terms that still are precise.&lt;/p&gt;&#xA;" OwnerUserId="17503" LastActivityDate="2017-09-15T20:14:20.237" Title="Question about terminology of robotic architecture" Tags="&lt;mobile-robot&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14217" PostTypeId="1" CreationDate="2017-09-15T07:04:24.597" Score="1" ViewCount="281" Body="&lt;p&gt;I am searching for an open source simulation software which is able to simulate robots and their movements in a factory. I would like to send control signals and receive sensor data back. This software should allow me to communicate with it. I want to use java to send control signals and be able to receive back sensor data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My goal is it to use the simulation software on a Raspberry Pi.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would be grateful for any kind of help.&lt;/p&gt;&#xA;" OwnerUserId="18128" LastActivityDate="2017-09-18T13:28:22.943" Title="Any open source simulation software which is able to simulate robots and their movements?" Tags="&lt;raspberry-pi&gt;&lt;industrial-robot&gt;&lt;simulation&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14218" PostTypeId="1" AcceptedAnswerId="14228" CreationDate="2017-09-15T07:39:10.743" Score="0" ViewCount="136" Body="&lt;p&gt;I saw some radio controllers for kids robots alike xbox/playstion game pads few months ago. But I couldn't find them by searching. I am looking for some cheap radio controllers for RC cars or other kids robots like console game pads.May you help me?&lt;/p&gt;&#xA;" OwnerUserId="17822" LastEditorUserId="17822" LastEditDate="2017-09-16T04:11:00.270" LastActivityDate="2017-09-18T15:48:22.530" Title="Looking for cheap Xbox/playstation like remote controller for robots" Tags="&lt;radio-control&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14223" PostTypeId="2" ParentId="9851" CreationDate="2017-09-15T14:45:52.117" Score="-2" Body="&lt;p&gt;In college I served as the team leader in development of an autonomous underwater vehicle (AUV).  In the beginning we were confronted with very much the same question you are presenting right now.  Ultimately it came down to, we knew that we didn't know what we didn't know.  Collectively we had all had some amount of embedded systems development experience, but jumping from making a small dual axis gimbal project to making a completely autonomous robot capable of interpreting it's environment was massive, and we had no idea the level of computing we would need.  That being said, we were relying heavily on vision systems which, from doing some small experiments with a Raspberry pi attempting to interpret live video feeds, we knew was going to be processor intensive.  Therefore, our solution was to GO BIG.  As the centeral processor we crammed in a Gigabyte Core i7-6500U.  It more than adequately addressed all our requirements.  With something like this, you can't necessarily know what all you are going to need system wise until you are done.  Then you can look at how much your system requires and scale down to more appropriate hardware afterwards.&#xA;I hope this helps.  I know it's a frustrating situation to be in.&lt;/p&gt;&#xA;" OwnerUserId="18135" LastActivityDate="2017-09-15T14:45:52.117" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14225" PostTypeId="2" ParentId="14215" CreationDate="2017-09-15T20:14:20.237" Score="1" Body="&lt;p&gt;Disclaimer: This is not a perfect answer. I liked the topic so much, I've not held back and I'm giving my thoughts on it. I can improve it or delete it, according to comments.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The dumb bots would be called &lt;strong&gt;agents&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main intelligent brain would be called &lt;strong&gt;the central command and control system&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Robot is by definition &lt;em&gt;a mechanism that reacts (manipulates) to its environment through its senses (sensors).&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this topology (hierarchical control), I'd say the whole thing forms the &quot;&lt;strong&gt;Robot system&lt;/strong&gt;&quot;. However, the agents would be called &quot;robots&quot; too, because for an outsider they are interacting with the environment themselves.&lt;/p&gt;&#xA;" OwnerUserId="9570" LastActivityDate="2017-09-15T20:14:20.237" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14226" PostTypeId="1" CreationDate="2017-09-15T22:17:10.383" Score="1" ViewCount="816" Body="&lt;p&gt;I'm looking for any recommended approaches to be able to digitally process a room full people, like an auditorium or a movie theater and output the following information:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;How many people are in the room&lt;/li&gt;&#xA;&lt;li&gt;Locate unoccupied and available seating&lt;/li&gt;&#xA;&lt;li&gt;Display the available seating to ushers, or people attending late, on an iPad or TV outside the auditorium. Similar to viewing airplane seat occupancy online.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Some sensors I'm considering&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;LiDar Scanning&lt;/li&gt;&#xA;&lt;li&gt;Many ceiling (IR) cameras looking straight down (or perpendicular to the seating if the seating is inclined)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Some Challenges: Be able to take accurate enough measurements when:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The lights are on&lt;/li&gt;&#xA;&lt;li&gt;The lights are off or in low light&lt;/li&gt;&#xA;&lt;li&gt;People are standing&lt;/li&gt;&#xA;&lt;li&gt;People are sitting&lt;/li&gt;&#xA;&lt;li&gt;Seating is a long bench, not a chair&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Constraints:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Individual sensors for each seat isn't ideal, as we need to count people when they are standing as well. &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Thoughts on LiDar:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I like the thought of scanning the room with LiDar to develop a 3D Map from which I can determine the number of prominent heads to count, and distance/location of each head to identify a seat that is taken or open.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any affordable (under $10,000) LiDar scanners that make this easy?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Thoughts on Top Down Infrared (IR) Cameras :&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The auditorium seats 700 people and has a balcony. If the cameras are positioned in a top-down perspective, we would need to install about 22 cameras. It would be nice to have less of an installation overhead. Also, we'd like to respect the audience and not look down shirts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Thoughts on 1 or 2 Infrared (IR) Cameras Viewing the Crowd from the stage:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This could work for counting faces (using OpenCV or other Computer Vision library) but would make it difficult to tell what seats are open and available, especially when people are standing. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Images of the Auditorium:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/4aWY4.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4aWY4s.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt; &lt;a href=&quot;https://i.stack.imgur.com/QeWed.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QeWeds.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt; &lt;a href=&quot;https://i.stack.imgur.com/koXRv.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/koXRvs.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18140" LastEditorUserId="37" LastEditDate="2018-04-11T11:04:27.873" LastActivityDate="2018-04-11T11:04:27.873" Title="Scan an Auditorium, Count People, and Display Open Seats" Tags="&lt;sensors&gt;&lt;computer-vision&gt;&lt;lidar&gt;&lt;opencv&gt;" AnswerCount="2" CommentCount="8" ClosedDate="2018-04-11T11:13:30.117" ContentLicense="CC BY-SA 3.0" />
  <row Id="14228" PostTypeId="2" ParentId="14218" CreationDate="2017-09-16T04:24:20.280" Score="1" Body="&lt;p&gt;What about using an inexpensive 2.4GHz RC transmitter?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I already had one for a WLToys V222 quadcopter&#xA;If you don't already have one, you can pick one up on ebay for \$5 to \$15.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I opened up the quadcopter and Identified the chips it used&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.icbase.com/File/PDF/NUV/NUV00161201.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mini54 microcontroller&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.invensense.com/products/motion-tracking/6-axis/mpu-6050/&quot; rel=&quot;nofollow noreferrer&quot;&gt;MPU-6050 Motion Tracking Device&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.inhaos.com/uploadfile/otherpic/BK2423%20Datasheet%20v2.0.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;BK2423 2.4 GHz Transceiver&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Based on this, I found the NRF24L01 which appeared to be compatible which I purchased on eBay for a whopping \$0.67US.  Add a \$15 Arduino Mega (or a $2 Arduino Nano clone) and you are all set to go.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After a bit of time and part in hand I hooked it up to the Arduino and I was able to control a servo using my inexpensive wireless controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/PRkPN.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/PRkPN.jpg&quot; alt=&quot;My Setup&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;SUCCESS!!&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My guess is that the protocol varies depending manufacturer; so, a bit of reverse protocol engineering may be required.  If you would like more information on the code and config for the controller I used, Up Vote this and add a comment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/u7qTfm.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/u7qTfm.jpg&quot; alt=&quot;2.4GHz gamepads&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are also 2.4GHz gamepads available for a similar price.  Their protocol might also be a bit different; so, a bit of reverse protocol engineering may be required in that case as well.&lt;/p&gt;&#xA;" OwnerUserId="462" LastEditorUserId="462" LastEditDate="2017-09-18T15:48:22.530" LastActivityDate="2017-09-18T15:48:22.530" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="14229" PostTypeId="2" ParentId="14217" CreationDate="2017-09-16T04:36:25.827" Score="1" Body="&lt;p&gt;You should check out Robot OS at www.ros.org. ROS is basically an OS (a term I am using loosely in this context) that comes with different libraries that give you the capability to build a robot. There is a a publish/subscribe feature that lets you asynchronously capture data from nodes (sensors) so you can create a robot that can graph nodes that can communicate with one another using what ROS terms as topics. A node can also be a graphical view of the entire system you want to build.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ROS also includes a robot geometry library that keeps track of where different parts of the robot are with respect to each other. Ultimately, the Geometry library gives you the ability to visualize the state of the system being developed. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately it is in C++, although I believe you can use Python also, and I do not think it will provide functionality in Java.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I know is that every serious Robotics project I have seen uses ROS.&lt;/p&gt;&#xA;" OwnerUserId="9292" LastEditorUserId="9292" LastEditDate="2017-09-18T13:28:22.943" LastActivityDate="2017-09-18T13:28:22.943" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14230" PostTypeId="2" ParentId="14226" CreationDate="2017-09-16T04:45:45.413" Score="0" Body="&lt;p&gt;Consider normal COTS video feed under good lighting conditions and using OpenCV to count people.  You would have to make general assumptions about what qualities make an image of a person.  Find how well it works.  Then refine your assumptions.  You may want to eventually try training OpenCV.  There exist OpenCV examples files for face recognition, cat recognition, eye recognition, ect.  However, in your case, you need body recognition from above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Likely, over time, you will develop a complex procedure to identify people, stop counting people in walk ways and tell the difference between a person and a purse. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The initial attempt may be to record an empty room, subtract that image from an image of a full room and detect / count the areas which are different.  &lt;/p&gt;&#xA;" OwnerUserId="17364" LastActivityDate="2017-09-16T04:45:45.413" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14231" PostTypeId="2" ParentId="14193" CreationDate="2017-09-16T05:41:04.590" Score="2" Body="&lt;p&gt;Without a more detailed spec sheet I can't say for sure, but this is my understanding: &#xA;The buzzer has a self-drive circuit is rated for input 6V max, at which point it will pull 45mA and oscillate at 300-500Hz.&#xA;You don't need to explicitly limit the current into the buzzer, however 3.3V may not be enough to turn on the drive circuit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also recommend enabling in software the pull-down resistor of the pin you will be using.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Putting a resistor between the output pin and the buzzer will decrease the voltage across the buzzer and limit the current through it, which will reduce the volume.&#xA;It can also cause unwanted ringing without the use of a capacitor in parallel. See page 31 of &lt;a href=&quot;https://www.arduino.cc/documents/datasheets/PIEZO-PKM22EPPH4001-BO.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this document&lt;/a&gt; for an example.&lt;/p&gt;&#xA;" OwnerUserId="8859" LastActivityDate="2017-09-16T05:41:04.590" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14234" PostTypeId="2" ParentId="14226" CreationDate="2017-09-16T12:16:30.390" Score="1" Body="&lt;p&gt;A Near-IR or IR camera which can rotate and tilt, that is installed over the stage would probably be an acceptable and fairly well performing solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Installation would be simple: screw on, and take the cable down (hidden somehow), to a computer system for processing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This would take several pictures/or continuous video and an image processing software can determine how many people are seated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One particular point is that, the seats are in fact long and non-discrete sofas. So, the software should assume a capacity for each of the seats.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If this is a one time installation, you could sort things out on the way. However, if this is for a product to be installed at several stations, more generic systems would be preferred.&lt;/p&gt;&#xA;" OwnerUserId="9570" LastActivityDate="2017-09-16T12:16:30.390" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14236" PostTypeId="1" AcceptedAnswerId="14256" CreationDate="2017-09-16T16:50:15.520" Score="3" ViewCount="863" Body="&lt;p&gt;I have built a quadcopter from scratch, including my own flight controller. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have implemented a sensor fusion algorithm (Madgwick algorithm), which returns me current Yaw, Pitch and Roll angles. Then, a PID control algorithm based on these measured angles and desired angles (which are set by the control sticks on a transmitter) adjusts the speed of the motors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For pitch and roll controls the algorithm is obvious and works just fine (i.e, pitch stick is 100% forward - desired pitch is &quot;30 degrees&quot;, and current measured pitch is trying to catch up with that value using PID control). However for Yaw I would like the yaw stick to rotate the quad in the corresponding direction as long as I am holding the &quot;yaw stick&quot; in a non-zero position, with a rotating speed, proportional to the yaw stick angle. Since I have current measured Yaw angle (relative to a &quot;reference yaw&quot; which is the yaw that the quad had when the throttle was zero, not relative to the &quot;absolute magnetic North-origined yaw&quot;), I am basically just adding a &quot;quadRotationSpeed = yawStickValue*delta_t&quot; to the &quot;desired yaw angle&quot; in each iteration of the control loop, and then do the rest as a regular PID control: based on desiredYaw and measuredYaw I am calculating the motor torques.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now the questions:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) Is this approach wrong?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) When I turn the yaw stick, the quad seems to be rotating with the speed, proportional to the stick angle, but when I let go off the stick, it rapidly turns back half way and then keeps turning slowly back to the &quot;desired angle&quot; I set with the yaw stick.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3) After this yaw maneuver the quad seems to be much less stable during the flight, but gradually it stabilizes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My quad is about 800 grams and is quite large, about 60 cm in diagonal.&lt;/p&gt;&#xA;" OwnerUserId="18145" LastActivityDate="2019-08-11T00:03:20.457" Title="Correct Quadcopter Yaw control implementation" Tags="&lt;quadcopter&gt;&lt;control&gt;&lt;pid&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14237" PostTypeId="2" ParentId="14213" CreationDate="2017-09-16T17:08:29.057" Score="1" Body="&lt;p&gt;Consider using &lt;a href=&quot;https://en.wikipedia.org/wiki/Coherence_(physics)&quot; rel=&quot;nofollow noreferrer&quot;&gt;coherent light&lt;/a&gt; from an infrared laser and an &lt;a href=&quot;https://en.wikipedia.org/wiki/Interference_(wave_propagation)&quot; rel=&quot;nofollow noreferrer&quot;&gt;interference&lt;/a&gt; pattern.  Examples of this technique include the &lt;a href=&quot;http://www.cs.upc.edu/~virtual/RVA/CourseSlides/Kinect.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Kinect&lt;/a&gt; box.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A non-repeating totally random pattern across the entire field of view is ideal.  However would likely be difficult to create.  Recall the pattern from such a projector is actually constructed using a hologram. A more regimented pattern which repeats may be easer to create.  However, this limits the depth perception to less then that which creates a reflected pattern 360 degrees out of phase based on the parallax of the projector and camera.&lt;/p&gt;&#xA;" OwnerUserId="17364" LastEditorUserId="17364" LastEditDate="2017-09-16T17:36:05.137" LastActivityDate="2017-09-16T17:36:05.137" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="14238" PostTypeId="1" CreationDate="2017-09-17T02:38:04.610" Score="2" ViewCount="107" Body="&lt;p&gt;I was playing at connecting wires to 'get the feel of it' when I accidentally connected the servo connector red wire to the arduino 5V pin while the arduino is connected to my comp, (and hence powered). I did not connect a battery to the ESC though.&#xA;Did I just effectively ran 5 V through my BEC and risk damaging it?&#xA;What I only managed to find online is I shouldn't have done that when the battery is connected because I will burn out my Arduino. But since I didnt have my battery connected to the ESC, will my BEC get damaged instead?&#xA;I couldn't check my ESC now because I don't have any suitable batteries with me right now and I have to wait till Monday to get my batteries. Just thought I can find a quicker answer here.&lt;a href=&quot;https://i.stack.imgur.com/qHXoI.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qHXoI.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18142" LastEditorUserId="110" LastEditDate="2017-12-19T19:32:04.717" LastActivityDate="2018-11-15T02:01:40.270" Title="What happens when I connected my unpowered servo connector power wire to the powered arduino 5V pin?" Tags="&lt;arduino&gt;&lt;rcservo&gt;&lt;esc&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14239" PostTypeId="1" CreationDate="2017-09-17T10:06:42.580" Score="4" ViewCount="49" Body="&lt;p&gt;In &lt;a href=&quot;https://ocw.mit.edu/courses/aeronautics-and-astronautics/16-412j-cognitive-robotics-spring-2005/projects/1aslam_blas_repo.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;SLAM for Dummies&lt;/a&gt; there is on page 40 this formula:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$X = X+K(z-h)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is $z-h$ in updating $X$?&lt;/p&gt;&#xA;" OwnerUserId="18147" LastEditorUserId="2289" LastEditDate="2017-09-18T19:12:28.620" LastActivityDate="2017-09-19T18:58:02.463" Title="In the SLAM for dummies what is z-h in updating X?" Tags="&lt;slam&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14240" PostTypeId="1" CreationDate="2017-09-17T11:49:57.097" Score="1" ViewCount="210" Body="&lt;p&gt;I am a High School student and a beginner coming to Robotics and I have no idea where to start. I have spent days searching tutorials and books I could read to start building and programming my first robot but most of them just makes me much more confuse, most of them requires me to buy pre-assembled components and just assemble the components I ordered as a puzzle, but I want to learn to build a robot from scratch. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My questions are:&#xA; 1. What should I read / learn first?&#xA; 2. What programming language should I use? (I know a variety of programming languages. C++ being the one I know the best ) &#xA; 3. What should I learn from physics? ( Circuits, Electricity, etc )&#xA; 4. How do you think I should start from this point where I know absolutely nothing but to program?&lt;/p&gt;&#xA;" OwnerUserId="18149" LastActivityDate="2019-05-02T05:53:06.127" Title="First steps in robotics" Tags="&lt;wheeled-robot&gt;&lt;first-robotics&gt;&lt;circuit&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14241" PostTypeId="2" ParentId="14240" CreationDate="2017-09-17T13:31:29.830" Score="1" Body="&lt;p&gt;I am a graduate student whose research is applied to robotics. I recommend:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Linear algebra and Calculus&lt;/li&gt;&#xA;&lt;li&gt;Basic programming skills, learn arduino and another language&lt;/li&gt;&#xA;&lt;li&gt;Electronics courses - basic electric circuits&lt;/li&gt;&#xA;&lt;li&gt;Mechanics courses - statics and dynamics&lt;/li&gt;&#xA;&lt;li&gt;Control theory - as much as you can&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I would recommend pursuing a degree in either electrical engineering, computer science, or mechanical engineering. Also, I cannot over emphasize how important learning control theory is. It is the basis for getting your robot to perform in an optimal manner. However, you really should learn the above first before moving on to control theory.&lt;/p&gt;&#xA;" OwnerUserId="10303" LastActivityDate="2017-09-17T13:31:29.830" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14242" PostTypeId="1" AcceptedAnswerId="14302" CreationDate="2017-09-17T18:25:55.470" Score="5" ViewCount="655" Body="&lt;p&gt;I am analyzing a concept of a surgical robot with 4 revolute joints and one sliding joint. I am not able to fix the coordinate frame for last prismatic joint.&#xA;Following are the schematics of robot and DH frames I have fixed&#xA;&lt;a href=&quot;https://i.stack.imgur.com/xYWwR.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xYWwR.jpg&quot; alt=&quot;Schematic&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/LwoXy.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/LwoXy.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As X4 axis and X5 axis are intersecting each other, I am not able to capture joint distance variable(di) for the slider. How can I fix this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Following are the parameters for rest of the frames&#xA;&lt;a href=&quot;https://i.stack.imgur.com/ijW2u.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ijW2u.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Updated Frames:&lt;a href=&quot;https://i.stack.imgur.com/21c3x.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/21c3x.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10758" LastEditorUserId="10758" LastEditDate="2017-09-21T15:37:45.637" LastActivityDate="2017-09-28T17:33:35.930" Title="Confusion in fixing DH frames" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;forward-kinematics&gt;&lt;dh-parameters&gt;&lt;frame&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14243" PostTypeId="2" ParentId="12583" CreationDate="2017-09-18T04:17:12.297" Score="0" Body="&lt;p&gt;After trying so many times, I came out with a solution to operate above-mentioned motor through Matlab. Here, I will rotate single motor only but in actual I have to rotate 4 motors for my robotic arm. So here is my &lt;code&gt;arduino mega&lt;/code&gt; code to receive data from Matlab.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;int doi;&#xA;char d[5];&#xA;int d1;int d2;int d3;int d4;&#xA;String stringG1 ; String stringG2 = &quot;G&quot;; String stringG3 = &quot;G&quot;; String stringG4 = &quot;G&quot;;&#xA;void setup()&#xA;{&#xA;  Serial.begin(9600);&#xA;  Serial1.begin(9600);&#xA;  }&#xA;void loop()&#xA;{&#xA;&#xA;  if(Serial.available()&amp;gt;0)&#xA;  {&#xA;    d1 = Serial.parseFloat();d2 = Serial.parseFloat();d3 = Serial.parseFloat();d4 = Serial.parseFloat();&#xA;&#xA;&#xA;    stringG1 = &quot;G&quot; + String(d1);&#xA;    Serial1.println(stringG1);&#xA;&#xA;    if (Serial1.available()&amp;gt;0)&#xA;    {&#xA;      Serial.print(Serial1.readString());&#xA;    }  &#xA;&#xA;  }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In above code, I used &lt;code&gt;d1,d2,d3, and d4&lt;/code&gt; because I have to send four angle values to &lt;code&gt;four DC motor&lt;/code&gt;. But at this moment I have only 1 motor with me so I tested this code for single motor only. In future, I will extend this code to rotate all four motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Matlab side code to tansfer angle values to Arduino Mega is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;portName = 'COM9';&#xA;s = serial(portName,'BaudRate',9600,'Terminator','LF');&#xA;s.timeout = 1;&#xA;try &#xA;    try&#xA;        fopen(s);&#xA;    catch&#xA;        delete(s);&#xA;        fopen(s);&#xA;    end&#xA;catch&#xA;    disp('Unable to open the port ');&#xA;end&#xA;%%&#xA;angle = [250,200,50,120];&#xA;    %dataOut = angle;&#xA;    fprintf(s,'%d\n',angle);&#xA;   % fread(s)&#xA;&#xA;&#xA;%%&#xA;&#xA;    try&#xA;       fclose(s);&#xA;       try&#xA;           delete(instrfind('port','COM9'));&#xA;       catch&#xA;       end&#xA;catch&#xA;    disp('Unable to close the port ');&#xA;    end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In above Matlab code one most important thing is be noted is that this piece of code&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;portName = 'COM9';&#xA;    s = serial(portName,'BaudRate',9600,'Terminator','LF');&#xA;    s.timeout = 1;&#xA;    try &#xA;        try&#xA;            fopen(s);&#xA;        catch&#xA;            delete(s);&#xA;            fopen(s);&#xA;        end&#xA;    catch&#xA;        disp('Unable to open the port ');&#xA;    end &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;will take some time to established connection between Matlab and Arduino Mega. If you try to run whole code at once it will do nothing. To run above code first we have to establish connection between Matlab and Arduino. For that first run only above piece of code. Then run &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;angle = [250,200,50,120];&#xA;        %dataOut = angle;&#xA;        fprintf(s,'%d\n',angle);&#xA;       % fread(s)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;as many times as you want to change the values in angle array. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To close the connection between Matlab and Arduino run the last remaining piece of code. Look carefully, I have inserted &lt;code&gt;%%&lt;/code&gt; in Matlab code to break down code in sections which eases me to run code section wise using &lt;code&gt;run section&lt;/code&gt; command in Matlab.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Any suggestions to improve code will be most welcomed.&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="14024" LastActivityDate="2017-09-18T04:17:12.297" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14245" PostTypeId="1" CreationDate="2017-09-18T06:25:49.947" Score="0" ViewCount="134" Body="&lt;p&gt;Whatever literature I've read on quad-copter dynamics, the state of a quad copter is define as a 12x1 vector, containing the coordinate positions (x,y,z) and velocity (xdot, ydot, zdot) in Earth frame, euler angles (theta, phi, psi) and euler angle derivatives (thetadot, phidot, psidot). However, this &lt;a href=&quot;https://github.com/skylarcox/DroneSim&quot; rel=&quot;nofollow noreferrer&quot;&gt;code&lt;/a&gt; that I am reading seems to have modeled the state vector as a 13x1 vector. It's modeled as : [x,y,z,xdot,ydot,zdot,qw,qx,qy,qz,p,q,r]. I am lost at these last 7 variables. In the initialization module, (qw,qx,qy,qz) are initialized as Quat(1),Quat(2),Quat(3),Quat(4) respectively, and (p,q,r) are all zero. I'm guessing the (p,q,r) are derivatives hence are set to zero during initialization. The Quat() is supposed to be the vector of quaternions, which is again something I haven't found in most literature on modeling of quad-copter dynamics. What is this and why is it needed? &#xA;I have no prior background in robotics or control systems! &lt;/p&gt;&#xA;" OwnerUserId="18110" LastActivityDate="2017-09-28T12:36:40.783" Title="State vector for a Quad-copter?" Tags="&lt;quadcopter&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14246" PostTypeId="2" ParentId="12401" CreationDate="2017-09-18T07:05:04.550" Score="1" Body="&lt;p&gt;did you take a took at &lt;a href=&quot;http://www.zacobria.com/universal-robots-knowledge-base-tech-support-forum-hints-tips/knowledge-base/client-interfaces-cartesian-matlab-data/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt;? Reading data from the URRobot is not possible via the commands but the robot sends its state messages as Matlab data which can be shown in the linked forum of how to get the TCP Position for example. He uses Python as the interfacing software.&lt;/p&gt;&#xA;" OwnerUserId="18072" LastActivityDate="2017-09-18T07:05:04.550" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14247" PostTypeId="2" ParentId="14245" CreationDate="2017-09-18T11:53:21.017" Score="0" Body="&lt;p&gt;Quaternions are just another way of modelling space orientation of a body. They are used in the same way you would use Euler angles. You can find algorithms (check Wikipedia, I found some there written in several programming languages) to go from quaternions to Euler and reverse. &#xA;There is no real reason to use them instead of Euler angles, I prefer using the latter, but in some projects I encountered quaternions and simply made the conversion. &lt;/p&gt;&#xA;" OwnerUserId="16351" LastActivityDate="2017-09-18T11:53:21.017" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14248" PostTypeId="2" ParentId="14245" CreationDate="2017-09-19T00:06:11.447" Score="1" Body="&lt;p&gt;Just an additional point: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Representing the orientation through Euler angles limits the maneuvers (essentially angle of rotation). For example: won't be able to execute a 360-degree flip. Using quaternions to represent the dynamics avoids that. A better alternative is to use rotational matrices (known also as direction cosine matrices). Rotational matrices are 3x3 matrices that uniquely represent the orientation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, note that the relation between quaternion $ Q =[q_v, q_0] $ and the &quot;angular velocity&quot; is given by &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ \frac{d}{dt}[q_v,q_0] = \frac{1}{2}[q_0 \omega + q_v\times\omega, - q_v\cdot \omega] $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here $ q_v, \omega $ are three-dimensional vectors and $ q_0 $ is a scalar.&lt;/p&gt;&#xA;" OwnerUserId="18160" LastActivityDate="2017-09-19T00:06:11.447" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14249" PostTypeId="2" ParentId="14240" CreationDate="2017-09-19T02:35:27.370" Score="1" Body="&lt;p&gt;I agree with what @PrestonRoy regarding the academic aspects.&lt;/p&gt;&#xA;&lt;p&gt;But, there is a big &lt;strong&gt;learning by doing&lt;/strong&gt; component too.  The earlier you start the better.  Don't wait until you &amp;quot;know everything you need to&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;JOIN A ROBOTICS TEAM AND DIVE IN!&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;In the process of doing, you will learn a lot about what robotics is what your need to learn.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/yWftE.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/yWftE.jpg&quot; alt=&quot;FRC&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Last year my Freshman son told me he was joining our Robotics Team.  When I asked him what her wa going to do, he said &amp;quot;they need a CAD guy&amp;quot;.  My response: &amp;quot;Jeremy, you don't know anything about CAD.&amp;quot;  His response: &amp;quot;Dad, have you ever heard of YouTube?&amp;quot;  LOL.  Last year our team won our first award for Robotics Design, thanks A LOT to his CAD work.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;There are LOTS of opportunities at the High School Level&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Here are the programs our High School participates in:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://www.firstinspires.org/robotics/frc&quot; rel=&quot;nofollow noreferrer&quot;&gt;First Robotics FRC&lt;/a&gt; (the photo above is from FRC)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://www.firstinspires.org/robotics/ftc&quot; rel=&quot;nofollow noreferrer&quot;&gt;First Robotics FTC&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://www.vexrobotics.com/vexedr/competition&quot; rel=&quot;nofollow noreferrer&quot;&gt;VEX Robotics Competition&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.marinetech.org/rov-competition/&quot; rel=&quot;nofollow noreferrer&quot;&gt;MATE&lt;/a&gt; (underwater)&lt;/p&gt;&#xA;&lt;p&gt;For more options, here is another &lt;a href=&quot;https://robotics.nasa.gov/events/competitions.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;Long list from NASA&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;FINALLY&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If your High School has a team, join it.&lt;/li&gt;&#xA;&lt;li&gt;If not, find another one locally.&lt;/li&gt;&#xA;&lt;li&gt;If not, start a team.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;If you need help, I can help - I would just need a bit more regarding where you are located.&lt;/p&gt;&#xA;" OwnerUserId="462" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2017-09-19T02:35:27.370" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14252" PostTypeId="1" CreationDate="2017-09-19T10:04:52.890" Score="0" ViewCount="1729" Body="&lt;p&gt;I want to estimate the covariance matrix of a measurement for a robot evolving on plane and having the following state vector.&#xA;$$&#xA;X&#xA;= &#xA;\begin{bmatrix}&#xA;x\\&#xA;y\\&#xA;\theta&#xA;\end{bmatrix}&#xA;$$&#xA;$x$ and $y$ are the coordinates in $XY$ plane et $\theta$ the heading angle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The measurement is taken from a place recognition algorithm which returns an pose&#xA;         $$z=&#xA;      \begin{bmatrix}&#xA;         x_{m}\\&#xA;         y_{m}\\&#xA;        \theta_{m}&#xA;      \end{bmatrix}&#xA;       $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The covariance matrix of the measurement should have the following form&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\Sigma&#xA;= &#xA;\begin{bmatrix}&#xA;\sigma_{x}^2 &amp;amp; 0 &amp;amp; 0 \\&#xA;0 &amp;amp; \sigma_{y}^2 &amp;amp; 0 \\&#xA;0 &amp;amp; 0 &amp;amp; \sigma_{\theta }^2 \\&#xA;\end{bmatrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How to calculate $\sigma_{x}$ for example given that I have the ground truth pose  $$ground_{truth}=&#xA;      \begin{bmatrix}&#xA;         x_{gt}\\&#xA;         y_{gt}\\&#xA;        \theta_{gt}&#xA;      \end{bmatrix}&#xA;       $$&#xA;and the measurement $z$&lt;/p&gt;&#xA;" OwnerUserId="17442" LastActivityDate="2018-02-20T03:07:49.797" Title="Calculating the covariance matrix of a measurement" Tags="&lt;slam&gt;&lt;kalman-filter&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14254" PostTypeId="1" CreationDate="2017-09-19T11:36:17.577" Score="1" ViewCount="37" Body="&lt;p&gt;it is widely discussed in this forum, how to sync multiple cameras (e.g. best done via hardware trigger).&#xA;Now I'd like to know how to actually determine the time delay between two image streams and the overall offset between a real event, and the moment when the captured frame is available in the PCs buffer.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;So I have a picture P which captured an event at time T, so the captured image will be available at P(T+dT).&#xA;&lt;strong&gt;How to determine dT?&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I have two cameras capturing picture P1 and P2.&#xA;But due to two unsynchronized shutter, P_1 will be captured at T_1 and P_2 will be captured at T_2.&#xA;&lt;strong&gt;How to determine dt=T2-T1?&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;PS.: I really don't want to synchronize the cameras, just determining these delays.&#xA;I searched intuitivley for publications on &lt;strong&gt;multi camera/Kinect tracking&lt;/strong&gt; or &lt;strong&gt;Event Related Synchronisation&lt;/strong&gt; but weren't lucky at all.&#xA;Does someone has some suggestions?&lt;/p&gt;&#xA;" OwnerUserId="1926" LastEditorUserId="10596" LastEditDate="2017-09-19T13:17:19.690" LastActivityDate="2017-09-27T14:48:25.193" Title="Determining time difference of image capturing in multi camera setup" Tags="&lt;cameras&gt;" AnswerCount="1" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="14255" PostTypeId="1" AcceptedAnswerId="14281" CreationDate="2017-09-19T15:40:51.160" Score="3" ViewCount="381" Body="&lt;p&gt;I am trying to fuse a ublox M8 (&lt;a href=&quot;https://www.u-blox.com/sites/default/files/products/documents/u-blox8-M8_ReceiverDescrProtSpec_(UBX-13003221)_Public.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.u-blox.com/sites/default/files/products/documents/u-blox8-M8_ReceiverDescrProtSpec_(UBX-13003221)_Public.pdf&lt;/a&gt;) with a MicroStrain IMU (&lt;a href=&quot;http://www.microstrain.com/inertial/3dm-gx4-25&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.microstrain.com/inertial/3dm-gx4-25&lt;/a&gt;) via a loosely coupled architecture.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was wondering if there are any suggestions or insights based on the results that I am getting. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I based most of my code off of Paul Grove’s 2nd edition book.&#xA;I did a six-point tumble test to calibrate my IMU to get the accelerometer fixed bias, the accelerometer scale factor and the accelerometer misalignment. I also got gyroscope fixed bias. I don’t have a rate table so I can’t get the gyroscope scale factor and misalignment yet.&#xA;The filter is not currently estimating any calibration information.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I ran a test of the code for about 6 hours and 40 minutes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a couple of questions about the procedure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1)  My main difficulty is that I am not sure what I should be expecting from the hardware/integration architecture that I am using. What would you expect after a test of 6 hours with a loosely coupled architecture?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2)  I am also having difficulty deciding on how to tune the filter. Are there any papers/procedures that you recommend for deciding what should go into Q and R Matrices? I tried propagating the IMU standalone to see how quickly it diverged from it’s initial position. I also took gps data to see how it diverged from it’s initial position. I am wondering If the tuning would be a function of my update interval, as well as how long it takes the two systems to diverge to a specified distance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For my R matrix, I am taking the uncertainty posted by the GPS.&#xA;For my Q matrix, I am using the power spectral density. I do have some difficulty understanding the reasoning behind this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3)  Finally, I am wondering how much you think that estimating calibration information in my filter would help with a long term solution. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/WPDHm.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/WPDHm.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/9B1vg.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9B1vg.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/FdnBn.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FdnBn.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/FPlCU.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FPlCU.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/kd34I.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kd34I.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT:: Please ignore the xlable for the figures. It says time in seconds was about 28 days. But the test lasted for just 6 hrs and 40 minutes.&lt;/p&gt;&#xA;" OwnerUserId="17461" LastEditorUserId="17461" LastEditDate="2017-09-25T13:32:19.543" LastActivityDate="2017-09-25T13:32:19.543" Title="I fused a GPS and IMU and I am wondering if my results make sense" Tags="&lt;kalman-filter&gt;&lt;imu&gt;&lt;gps&gt;" AnswerCount="1" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14256" PostTypeId="2" ParentId="14236" CreationDate="2017-09-19T16:51:52.103" Score="0" Body="&lt;p&gt;So I reimplemented the whole Yaw control thing using PID on raw gyro data, ignoring the sensor fusion current Yaw angle, which turned out to work perfectly. Since gyro returns the speed of change of the yaw angle, and I wanted to control the speed of change of the angle using control sticks, doing so directly is the most natural approach.&lt;/p&gt;&#xA;" OwnerUserId="18145" LastActivityDate="2017-09-19T16:51:52.103" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14257" PostTypeId="2" ParentId="14238" CreationDate="2017-09-19T18:24:47.247" Score="1" Body="&lt;p&gt;Should be fine. If I remember correctly, the inputs to the ESC (more or less) control power mosfets. Putting input to a mosfet without power does not hurt it.&lt;/p&gt;&#xA;" OwnerUserId="16134" LastActivityDate="2017-09-19T18:24:47.247" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14258" PostTypeId="2" ParentId="14239" CreationDate="2017-09-19T18:58:02.463" Score="2" Body="&lt;p&gt;This is a good question, as the document is not clear. It appears that $z$ is the range/bearing measurement to the landmark (see discussion about $J_z$ on page 35), and $h$ is the estimate for range/bearing that the EKF gives (see page 38). This means that $z-h$ is the error (also called the innovation, for historic reasons). In the update we increment $X$ by the Kalman gain $K$ times the error $z-h$. &lt;/p&gt;&#xA;" OwnerUserId="16134" LastActivityDate="2017-09-19T18:58:02.463" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14259" PostTypeId="2" ParentId="380" CreationDate="2017-09-19T21:38:22.467" Score="1" Body="&lt;p&gt;This is a much bigger project than you think, and processing power is the least of your concerns. You may want to skip straight to step #9. Otherwise, here are some questions you need to ask yourself, based on my experience of building something very similar as a hobby project (I used a desktop PC for processing):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1: &lt;strong&gt;Exactly&lt;/strong&gt; how far should the robot reach? You say 1.25 meters - but at what height, and in what direction? If it absolutely must reach anything within a 1.25 meter dome around its base, then either it's maximum reach must be longer, or you have a very big engineering challenge. Look at some of the robots from Fanuc or Kuka; their online catalogs have cutout views that show how far the arm will reach in each direction, and those areas are never perfect domes. Also, how close to the base must the robot reach? If the first arm (from the base) is significantly longer than the 2nd arm, then it won't be able to reach anything close to the base. Also, 6 DOF DOESN'T MEAN IT CAN HAVE ANY POSITION WITH ANY MOVEMENT! The shoulder and elbow joints of robot arms are almost always in the same DOF (and sometimes the wrist too). You can move the arm in any direction or hold the grasper in any orientation, but you can't do both at the same time. If you look at the human arm, the shoulder has 3 DOF, the elbow has one, the forearm has one, and the wrist has two. That's 7 in total, and that's what you need for total flexibility. If you search for 7 DOF, you'll see examples showing how they can move in ways that 6 DOF arms can't. This may not be important for your project, but it's important to know because otherwise you may do a lot of needless debugging.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2: Start with the grasper first. There are companies that make these specially, and it's best to look at their work to see what you might need. These can be very expensive parts if they need motors or sensors. This is the most important part of the arm, and fortunately it's the first part you can prototype and test. Figure out what you want, cheaply and quickly fabricate a version yourself, and move it around by hand to ensure it actually does what you want it to do. You may find that it needs to do more or less than you expected. I've seen people learn a lot simply by using a pair of popsickle sticks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3: &lt;strong&gt;Exactly&lt;/strong&gt; how much force should the arm lift? Start with the outermost part, the end effector (aka grasper/gripper/whatever). That needs to have a grip capable of holding 2kg, or roughly 20 newton-meters (you'll be doing all forces in newton-meters now; it's a lot easier than foot-pounds because 1kg is 9.8NM, and it's best to round up). How does it hold it? Does it pinch sideways? If so, it needs to have some amount of grip. If it lifts from the bottom like a fork, it needs to have a certain amount of torque in the last up/down DOF. We'll come back to this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;4: (AKA #3 part 2) Now that you know what the end effector needs to do, you can get a better idea of how it should be shaped and how much it will weigh. And after going through step 1 and lots of graph paper, you may know how long each segment of the arm needs to be. With this knowledge, you can start calculating how much each segment will weigh and therefore how much force each DOF needs to support. It's safest to calculate this with each segment fully outstretched, but for the lowest 2 joints you may be able to estimate that they will always be at an angle and therefore don't need quite as much force.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;5: Time to look at motors, the beautiful yet evil Medusa of robotics. Again, what does the robot need to do? Does it need to be fast, or powerful, or precise? If it needs precision but can be slow, you may need geared stepper motors. If it needs to be fast or powerful, you may need geared DC or AC motors. Speaking of which, DC motors will probably be easier to control. But each of these options have problems; stepper motors are quite weak and they don't know their position, while DC and AC motors simply don't know their positions. You'll need rotary encoders for DC/AC motors (incremental encoders at minimum), and may need absolute encoders no matter which motor type you choose. Absolute encoders tell you the exact angle of the arm, incremental ones will only tell you the change in angle. So, absolute encoders are better, but they are also much more expensive. You can avoid this problem by purchasing industrial servo motors (which look a lot like the stepper motors), but those are much more expensive because they have rotary encoders already built in. But those servos may be worth it just for the easier integration, if the maker has a nice software package that you can use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;6: You'll need to power all these motors (probably through drivers, which are another piece of hardware), and also power all the sensors and controllers, and they probably won't require the same voltage. Hopefully your motors can at least share a single voltage. You can buy velcro loops and labels in bulk.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;7: Don't forget the weight of the motors in the arm; you'll need to include that when calculating the torque required for the next motor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;8: Make sure you have some arrangement for fast and cheap shipping of new components, and whatever discounts possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;9: Realize this is way too complicated, and look up a robot refurbisher/supplier in your area. Retired industrial robots are much cheaper than new ones, and they can help you get set up and figure out what adjustments you need.&lt;/p&gt;&#xA;" OwnerUserId="18168" LastEditorUserId="18168" LastEditDate="2017-09-22T14:48:21.900" LastActivityDate="2017-09-22T14:48:21.900" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14260" PostTypeId="2" ParentId="14242" CreationDate="2017-09-19T23:14:07.170" Score="4" Body="&lt;p&gt;Add a coordinate system that matches the previous coordinate system exactly.   The last rotary joint will be the parameter for the next-to-last coordinate system, and the link length will be the parameter for the prismatic joint.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note:  a simpler approach is possible, but this gets the job done easily.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2017-09-19T23:14:07.170" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14261" PostTypeId="1" AcceptedAnswerId="14262" CreationDate="2017-09-20T08:18:28.607" Score="5" ViewCount="90" Body="&lt;p&gt;Does the literature on swarm robotics define the smallest number of robots required to make a &quot;swarm&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it 10, 20 or 100 robots, or does the name depend on something other than the number of robots?&lt;/p&gt;&#xA;" OwnerUserId="17413" LastEditorUserId="17029" LastEditDate="2017-09-21T15:31:00.740" LastActivityDate="2017-09-21T15:31:00.740" Title="How many robots is considered to be a robotic swarm not a group of robots?" Tags="&lt;mobile-robot&gt;&lt;swarm&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14262" PostTypeId="2" ParentId="14261" CreationDate="2017-09-20T11:47:13.033" Score="7" Body="&lt;p&gt;A robot &lt;a href=&quot;https://en.wikipedia.org/wiki/Swarm_robotics&quot; rel=&quot;noreferrer&quot;&gt;swarm&lt;/a&gt; is defined by its behaviour, rather than the number of robots it contains. Swarm robots:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&quot;... are coordinated in a distributed and decentralised way&quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;[Iñaki Navarro and Fernando Matía: &lt;a href=&quot;https://www.hindawi.com/journals/isrn/2013/608164/&quot; rel=&quot;noreferrer&quot;&gt;An Introduction to Swarm Robotics&lt;/a&gt;, 2012]&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The key feature of swarm behaviour is &lt;em&gt;self-organisation&lt;/em&gt;, i.e. the emergence of a global, complex pattern of behaviour based on local-level interactions between low-level, &quot;simple&quot; but autonomous components of the system.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&quot;Swarms&quot; are typically described in the literature as &quot;large&quot; numbers of robots. However, there is no real reason why much smaller groups of robots couldn't exhibit &quot;swarm behaviour&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the case of just two robots, they would probably be described as &quot;&lt;em&gt;paired robots&lt;/em&gt;&quot;, rather than as a swarm. However, I have seen groups of three robots described as &quot;swarms&quot; in research papers (for example, in this 2015 description of a &lt;a href=&quot;https://www.doc.ic.ac.uk/~pk3510/publications/papers/AAAI15.pdf&quot; rel=&quot;noreferrer&quot;&gt;Counter Abstraction Technique for the Verification of Robot Swarms&lt;/a&gt; from UCL).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;It should be noted that in many applications, a distinction is drawn between &quot;multi-robot systems&quot;, where inter-robot communication is not essential to the operation of the system, and true &quot;robot swarms&quot;, which are defined by inter-robot communication. The two systems may involve similar, large numbers of robots, but are distinguished on the basis of their behaviour. This idea is explored in some depth in this 2011 paper on &lt;a href=&quot;http://agents.fel.cvut.cz/eumas2014/papers/111110164.pdf&quot; rel=&quot;noreferrer&quot;&gt;multi-robot exploration&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="17029" LastActivityDate="2017-09-20T11:47:13.033" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14263" PostTypeId="1" AcceptedAnswerId="14264" CreationDate="2017-09-20T14:13:12.587" Score="1" ViewCount="263" Body="&lt;p&gt;&lt;strong&gt;Please note:&lt;/strong&gt; although this question &lt;em&gt;involves&lt;/em&gt; a Raspberry Pi (hereafter &lt;strong&gt;RPi&lt;/strong&gt;), it is really a pure robotics question at heart!&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;I am trying to connect my RPi 1 Model A to a breadboard with a single, simple LED on it. The LED is rated at 1.7V and 20mA. The RPi's GPIO pins are providing 3.3V of power and are not really meant to exceed 16mA. So my circuit needs a resistor, and I believe its calculation is as follows:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;R = V differential / I&#xA;  = (3.3V - 1.7V) / .02A&#xA;  = 1.6V / .02A&#xA;  = 80 ohms&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If I'm understanding this calculation correctly, that means that providing my LED circuit with 80 ohms &lt;strong&gt;or higher&lt;/strong&gt; will safely limit the current on the circuit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Problem is, I only have 47-ohm resistors available to me. &lt;strong&gt;So I'm wondering if I can daisy chain two 47-ohm resistors (for a total of 94 ohms, which is greater than the 80-ohm requirement) and not fry the RPi and/or the LED?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's my wiring:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/kkMoC.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kkMoC.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the pic above:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A red jumper connects a GPIO pin to a place on the breadboard; this feeds power to...&lt;/li&gt;&#xA;&lt;li&gt;The first 47-ohm resistor; this then feeds power to...&lt;/li&gt;&#xA;&lt;li&gt;The 2nd 47-ohm resistor; this then feeds power to...&lt;/li&gt;&#xA;&lt;li&gt;The LED's anode; the LED is powered and power flows out of the cathode to...&lt;/li&gt;&#xA;&lt;li&gt;A pair of jumpers (small yellow one and then a brown one) that lead back to the &lt;code&gt;GND&lt;/code&gt; on the RPi&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Here's a slightly better angle of the breadboard:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/OyBbk.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OyBbk.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I ask: will I fry my pi with this setup? Have I calculated resistance correctly (80 ohms)? Can I daisy chain two 47-ohm resistors together? Anything look &quot;off&quot; about my wiring setup in general? Thanks in advance!&lt;/p&gt;&#xA;" OwnerUserId="9888" LastActivityDate="2017-09-20T17:06:06.280" Title="Daisy chaining resistors for an LED circuit" Tags="&lt;raspberry-pi&gt;&lt;wiring&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14264" PostTypeId="2" ParentId="14263" CreationDate="2017-09-20T15:44:50.613" Score="1" Body="&lt;p&gt;Short answer: this will work unless you keep the LED on more than 94% of the time. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The diode will turn on at 1.7V and take as much current as the circuit can provide. Your equation is correct, if you want the circuit to pull current $I$, then your resistance is:&#xA;$$R = (3.3-1.7)/I = 1.6/I$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using $R=80 \Omega$ will set your current to 20mA, but this is what your &lt;strong&gt;LED&lt;/strong&gt; is rated for and exceeds the raspberry pi's specs. To stay below 16mA, you want $R\ge 100\Omega$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In practice the limit for the raspberry pi will be based on average power rather than a maximum current. Using your $94\Omega$ resistor should be fine if you use a PWM signal with less than 94% duty cycle. Even with 100% duty cycle you're probably within the margins built into the specifications, but I would advise against it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to get really fancy, you can put two $47\Omega$ resistors in series with another 8 resistors in parallel to get a $99.875\Omega$ equivalent resistor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your wiring set-up looks good, assuming you connect the yellow wire to ground. &lt;/p&gt;&#xA;" OwnerUserId="16134" LastEditorUserId="16134" LastEditDate="2017-09-20T17:06:06.280" LastActivityDate="2017-09-20T17:06:06.280" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="14265" PostTypeId="1" CreationDate="2017-09-20T16:56:16.873" Score="3" ViewCount="29" Body="&lt;p&gt;I am trying to build an autonomous vessel able to plan the best route to a certain waypoint or to follow a pre-defined route.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Currently, I have imported Esri GIS files containing elevation data (coordinates can be extracted from grid size and lower left corner position), and the robot automatically loads in a dynamic vector the correct map using a geofencing algorithm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The idea is to use elevation data to keep the boat away from shallow water and land, possibly using a D* algorithm to determine the best route.&#xA;However, those GIS datasets are discrete and sometimes have a pretty low accuracy, while the GPS on board uses RTK to get a 2cm accuracy.&#xA;The problem comes when I try to convert a discrete distribution in a continuous map, especially for elevation data: there are certain areas where altitude goes from -10 (underwater) to 100 from one point to another. Any ideas?&lt;/p&gt;&#xA;" OwnerUserId="16015" LastActivityDate="2017-09-20T16:56:16.873" Title="Robotic vessel navigation using GIS datasets" Tags="&lt;navigation&gt;&lt;gps&gt;&lt;path-planning&gt;" AnswerCount="0" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14266" PostTypeId="1" CreationDate="2017-09-20T18:21:16.083" Score="2" ViewCount="440" Body="&lt;p&gt;I'm reading the book &lt;a href=&quot;https://mitpress.mit.edu/books/introduction-ai-robotics&quot; rel=&quot;nofollow noreferrer&quot;&gt;Introduction to AI Robotics&lt;/a&gt; By Robin R. Murphy and it the first character said, more or less, that after chapter 5 I will be able to design and implement my own robots, either in a real robot or in simulation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't have a lot of money to buy the components to implement a robot, so I want to do it in simulation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is: where I can do a robot simulation?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've found ROS is suitable for this but I'm not sure. Is a good idea to use ROS with this book?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have no idea about how to do it or what do I need because this is the first time I do something with robotics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have also found this &lt;a href=&quot;https://www.nvidia.com/en-us/deep-learning-ai/industries/robotics/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Virtual Simulator For Robots&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="18173" LastEditorUserId="18173" LastEditDate="2017-09-22T09:37:15.217" LastActivityDate="2018-02-02T22:56:52.330" Title="Introduction to AI Robotics book: robot implementation, with ROS?" Tags="&lt;ros&gt;&lt;artificial-intelligence&gt;&lt;books&gt;" AnswerCount="3" CommentCount="9" ContentLicense="CC BY-SA 3.0" />
  <row Id="14267" PostTypeId="2" ParentId="14030" CreationDate="2017-09-20T19:27:19.017" Score="2" Body="&lt;p&gt;In order to implement the line following function you need to make several design choices which will affect your robot performance and accuracy.&lt;br/&gt;&#xA;Here are some examples:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;em&gt;GPS Coordinates&lt;/em&gt;: using a GPS receiver the robot can navigate through a set of waypoints represented as coordinates (or elevated coordinates for an UAV) to follow;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;em&gt;Compass Heading&lt;/em&gt;: using a calibrated compass can lead the vehicle on a certain path with a given set of headings;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;em&gt;Inertial Navigation&lt;/em&gt;: using a IMU and EKF the robot can estimate its position knowing the starting point, however the accuracy will be highly dependent on the quality of the sensors (commercial grade IMUs are not suitable for precise odometry).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;To set up waypoints on the run you can use either a radio, a web (socket, HTTPSync, REST, ...) or satellite link.&#xA;There's lots of choices for the GUI too, ranging from a native app to a web interface or a traditional software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To recap, if you can specify the sensors you would like to use and the communication channel I can expand on that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;References&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Inertial_navigation_system&quot; rel=&quot;nofollow noreferrer&quot;&gt;Inertial Navigation System&lt;/a&gt; &lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://openhomeautomation.net/getting-started-digital-compass-arduino-robot-navigation&quot; rel=&quot;nofollow noreferrer&quot;&gt;Compass navigation for robots&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://ardupilot.org/planner/&quot; rel=&quot;nofollow noreferrer&quot;&gt;ArduPilot Mission Planner&lt;/a&gt; &lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://robotwebtools.org&quot; rel=&quot;nofollow noreferrer&quot;&gt;ROS web interface builder&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="16015" LastActivityDate="2017-09-20T19:27:19.017" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14268" PostTypeId="1" AcceptedAnswerId="14270" CreationDate="2017-09-21T04:25:01.947" Score="0" ViewCount="399" Body="&lt;p&gt;I am a 1st-year grad student majoring in robotics. I have the opportunity to select and execute my own projects for a course called Robot Modeling. For the project, I have decided to model a UR5 and perform trajectory planning. The task would be to pick an object from one place and deploy it to another place while avoiding any obstacles in between. I am constrained to use MATLAB Simscape multibody for my project and it will only be a simulation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is the problem statement challenging enough to be completed in 8 weeks?(assuming I can dedicate 5 hours a week). I would love to hear some take on problem statements that would make this more interesting or challenging problem statement for me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="18175" LastActivityDate="2017-09-21T11:47:56.363" Title="Project ideas for Robot modeling" Tags="&lt;robotic-arm&gt;&lt;inverse-kinematics&gt;&lt;motion-planning&gt;&lt;matlab&gt;&lt;simulation&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14269" PostTypeId="2" ParentId="14252" CreationDate="2017-09-21T11:05:08.550" Score="0" Body="&lt;p&gt;The co-variance matrix of the whole system reflects the uncertainty in the system. $\sigma_{xx}$ more precisely than $\sigma_x$ reflects the uncertainty in the x position. Since the off-diagonal elements are zeros (i.e. it is not always the case but for the sake of simplicity one assumes so), there is no correlation. This means the uncertainty in x position has no effect on the y position and the heading angle. The first element in the co-variance matrix is $\sigma^2_{xx}$ in your case, therefore, taking the square root of it, it gives you the uncertainty $\sigma_{xx}$ in the x position. &lt;/p&gt;&#xA;" OwnerUserId="2155" LastActivityDate="2017-09-21T11:05:08.550" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="14270" PostTypeId="2" ParentId="14268" CreationDate="2017-09-21T11:42:06.653" Score="0" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Is the problem statement challenging enough to be completed in 8&#xA;  weeks?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It is hard to tell. In this project, you are tackling several problems at once. All of them requires a solid and at least an advanced-intermediate level of knowledge in physics, math, programming and robotics. For real-case scenario, probably the problems are less in comparison with simulation because you don't need to handle modeling the system. What I would say is 8 weeks are enough but you need extra work than 5 hours (i.e. may be 10). For your case, what I would suggest is to do the following:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1- (&lt;strong&gt;Half Week&lt;/strong&gt;) Finish modeling the system (i.e. requires physics knowledge and half week for this problem is enough). Use Newton's or &lt;a href=&quot;https://robotics.stackexchange.com/questions/11400/constrained-second-angle-double-pendulum/11444#11444&quot;&gt;Lagrangian&lt;/a&gt;'s approaches. Come up with the differential equations that govern the motion of the system. For saving time, you may consider reading some articles that already done this work with this robot. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;2- (&lt;strong&gt;Half Week&lt;/strong&gt;) Finish solving the differential equations (i.e. requires math and in particular numerical method knowledge and programming, matlab will do the hard work for you). Put the ODEs equations in a compact form. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;3- (&lt;strong&gt;One Week&lt;/strong&gt;) Choose control approach to move your robot from one point to another. In your case, I will carry out the &lt;a href=&quot;https://robotics.stackexchange.com/questions/9967/how-to-further-understand-the-computed-torque-model-controller/9977#9977&quot;&gt;PD-computed torque&lt;/a&gt; controller. It is simple and efficient if you don't have uncertainty in the system, if you do then choose PID-computed torque approach. Perform several tests to make sure that the robot is ready to follow the trajectory efficiently with a reasonable speed. At this stage your robot can move and follow any trajectory BUT it doesn't react with the environment. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;4- (&lt;strong&gt;Two Weeks&lt;/strong&gt;) Be acquainted with how the robot interacts with the environment in order to pick up objects (i.e. requires some robotics knowledge). Also, you need to understand how to get data from sensors and let the robot decide for a proper action. For example, when the robot should pick up an object? How does robot know? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;5- (&lt;strong&gt;Two Weeks&lt;/strong&gt;) understand obstacles avoidance approaches (i.e. requires some robotics knowledge). Pick up the simplest approach since you don't have an ample time to handle different approaches.   &lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="2155" LastEditDate="2017-09-21T11:47:56.363" LastActivityDate="2017-09-21T11:47:56.363" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="14274" PostTypeId="2" ParentId="4486" CreationDate="2017-09-21T19:59:57.797" Score="2" Body="&lt;p&gt;I am not sure if this is what you are looking for but the simplest odometry equations for ackermann steering go as follows:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;//basic velocity inputs&#xA;propel = 0.0; //m/s from rear wheels&#xA;steer_angle = a; //radians&#xA;delta_t = 0.03; //seconds&#xA;&#xA;//compute odometry values from joint angles&#xA;//first get the theta update&#xA;delta_th = (propel/L)*std::tan(steer_angle);&#xA;&#xA;//compute odometry update values&#xA;delta_x = propel*std::cos(position_th + ((delta_th*delta_t)/2.0));&#xA;delta_y = propel*std::sin(position_th + ((delta_th*delta_t)/2.0));&#xA;&#xA;//now update our pose estimate&#xA;position_x = position_x + delta_x*delta_t;&#xA;position_y = position_y + delta_y*delta_t;&#xA;position_th = position_th + delta_th*delta_t;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Maybe this will help someone.&lt;/p&gt;&#xA;" OwnerUserId="18181" LastActivityDate="2017-09-21T19:59:57.797" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14275" PostTypeId="1" CreationDate="2017-09-21T20:22:01.767" Score="2" ViewCount="153" Body="&lt;p&gt;Question &lt;a href=&quot;https://robotics.stackexchange.com/questions/1153/when-should-fpgas-be-used-in-robotics&quot;&gt;here&lt;/a&gt; opened the discussion on FPGAs on robotics applications. I would like to teach a LSTM RNN/CNN on border detection and feature detection on FPGA. Feature detection methods I would like to have contain image morphology algorithms and basic ML algorithms to start with. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;What are the most common machine learning libraries or deep learning algorithms to be used on FPGAs? Is it feasible to use traditional ML libraries such as H2O on FPGAs?&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="640" LastEditorUserId="640" LastEditDate="2017-09-21T20:44:39.633" LastActivityDate="2018-10-10T08:28:38.193" Title="Machine Learning or Deep Learning libraries used in Robotics with FPGAs?" Tags="&lt;machine-learning&gt;&lt;research&gt;&lt;logic-control&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14278" PostTypeId="1" CreationDate="2017-09-22T07:55:31.863" Score="1" ViewCount="81" Body="&lt;p&gt;I am new to this space and the field. Please pardon my lack of intuition or knowledge. I have a recording stand with a join in between. a pair of screws through which the whole apparatus pivots like a hand. I am trying to convert into a robotic hand&#xA;&lt;a href=&quot;https://i.stack.imgur.com/kh62b.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kh62b.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;br&gt;&#xA;I am trying to add a servo motor at the joint such that the whole apparatus can adjust its height accordingly. My question is, how can I replace the screw area with the screws with a motor.&#xA;I have MG995 Towerpro servo motor but I am not sure, how to connect the two things together. Please help!&#xA;&lt;a href=&quot;https://i.stack.imgur.com/LKuW2.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/LKuW2.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18184" LastEditorUserId="37" LastEditDate="2018-08-15T15:16:20.293" LastActivityDate="2018-08-15T15:16:20.293" Title="Replace screws with motors!" Tags="&lt;robotic-arm&gt;&lt;motor&gt;&lt;actuator&gt;&lt;rcservo&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14280" PostTypeId="1" AcceptedAnswerId="14283" CreationDate="2017-09-22T17:59:44.943" Score="0" ViewCount="1401" Body="&lt;p&gt;I have a robot that takes a measurement of its current pose in the form&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;z&#xA;= &#xA;\begin{bmatrix}&#xA;x\\&#xA;y\\&#xA;\theta&#xA;\end{bmatrix}&#xA;$$&#xA;$x$ and $y$ are the coordinates in $XY$ plane et $\theta$ the heading angle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also have ground truth poses &#xA;$$&#xA;z_{gt}&#xA;= &#xA;\begin{bmatrix}&#xA;x_{gt}\\&#xA;y_{gt}\\&#xA;\theta_{gt}&#xA;\end{bmatrix}&#xA;$$&#xA;I want to estimate the standard deviation of the measurement.&#xA;As the standard deviation formula is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\sigma=\sqrt{\frac{1}{N}\sum_{i=0}^{i=N}(x_{i}-\mu)^2}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it correct to calculate in this case where I have only one measurement, i.e &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$N=1$:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\sigma_{xx}=\sqrt{(x-x_{gt})^2}$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;and the same for $\sigma_{yy}$ and $\sigma_{\theta\theta}$ ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt;&#xA;The measurement is taken from a place recognition algorithm where for a query image, a best match from a database of images is returned. To each image in the database is associated a pose where this image has been taken, i.e $z_{gt}$. That's why I only have one measurement. In order to integrate it into the correction step of Kalman filter, I want a model of measurement standard deviation to estimate the covariance having the following form:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\Sigma&#xA;= &#xA;\begin{bmatrix}&#xA;\sigma_{x}^2 &amp;amp; 0 &amp;amp; 0 \\&#xA;0 &amp;amp; \sigma_{y}^2 &amp;amp; 0 \\&#xA;0 &amp;amp; 0 &amp;amp; \sigma_{\theta }^2 \\&#xA;\end{bmatrix}&#xA;$$&lt;/p&gt;&#xA;" OwnerUserId="17442" LastEditorUserId="17442" LastEditDate="2017-09-22T21:28:10.873" LastActivityDate="2017-09-22T21:28:10.873" Title="Standard deviation calculation for a single measurement" Tags="&lt;kalman-filter&gt;&lt;statistics&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14281" PostTypeId="2" ParentId="14255" CreationDate="2017-09-22T18:08:37.103" Score="3" Body="&lt;p&gt;Do you have a simulation? I would recommend that you simulate the data first to debug and tune your KF. The simulation should model the true IMU outputs (Grove has some details on that) and true position with error models. Start with truth to make sure the KF estimates zero errors, and then add errors one at a time (bias, SF, Misalignment, noise, etc.) to see if those can be estimated. Since it is a simulation you know truth, so you know how well it is working. Once it is debugged and tuned with the errors turned on, then try real data.&lt;/p&gt;&#xA;" OwnerUserId="18190" LastActivityDate="2017-09-22T18:08:37.103" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14282" PostTypeId="2" ParentId="14280" CreationDate="2017-09-22T19:44:02.817" Score="2" Body="&lt;p&gt;Short answer: You need at least two measurements and you should use many more. &lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Definitions&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The standard deviation is defined as &#xA;$$\sigma = \mathbb{E}[x^2]-\mathbb{E}[x]^2,$$&#xA;which is the difference between the first and second moments of $x$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;em&gt;sample&lt;/em&gt; standard deviation estimates this using $N+1$ samples, &#xA;$$\hat{\sigma} = \sqrt{\frac{1}{N}\sum_{i=0}^N (x_i-\bar{x})^2}.$$&#xA;Which converges to $\sigma$ as $N\to\infty$. Note that if you use a single sample, then $\bar{x} = x$, and so you get $\hat{\sigma} = 0/0$, which is undefined. This makes sense, since &lt;strong&gt;you cannot infer variance&lt;/strong&gt; (or standard deviation) from a single point.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Convergence Rate&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The problem is that $\hat{\sigma}$ is just an estimate of $\sigma$, and that estimate can be very bad for small $N$. &lt;a href=&quot;https://en.wikipedia.org/wiki/Variance#Distribution_of_the_sample_variance&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia has a good article&lt;/a&gt; on the convergence properties of the sample standard deviation. For the normal case, the variance of $\hat{\sigma}^2$ is $2\sigma^4/(N-1)$, but in general it may not converge this quickly.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Noise distribution&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;One last (very important) point: instead of trying to find the standard deviation of the &lt;em&gt;measurement&lt;/em&gt;, you should be looking at the standard deviation of the &lt;em&gt;error&lt;/em&gt;. So in this case, your $x_i$ are the difference between the ground truth and observed value, and $\sigma_{xx}$ is the standard deviation of the error. The reason to consider error is that this way you don't conflate motion with noise. Furthermore, since you have the Kalman filter tag, the covariance that the filter is expecting is for the errors. &lt;/p&gt;&#xA;" OwnerUserId="16134" LastEditorUserId="16134" LastEditDate="2017-09-22T20:14:01.607" LastActivityDate="2017-09-22T20:14:01.607" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14283" PostTypeId="2" ParentId="14280" CreationDate="2017-09-22T19:45:08.377" Score="1" Body="&lt;p&gt;In short; no, you can't estimate standard deviation from a single measurement. Your last equation, assuming $\mu = x_{gt}$ is invalid because you have no guarantee that the mean measurement will match the ground truth (the sensor could have bias error).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first formula you give is used only if you sample the entire population of possible values, which means the distribution would have to be discrete. I'm guessing in your case the distribution includes all real numbers (a continuous distribution) so the best you can do is estimate the real standard deviation via the sample distribution. In this case the formula you want is:&#xA;$$s = \sqrt{\frac{\sum_{i=1}^N \left ( x_i - \bar{x} \right )^2}{N-1}}$$&#xA;where as $N \rightarrow \infty, s \rightarrow \sigma ^{(a)}$. Since the denominator is zero for $N=1$ the sample distribution would be undefined.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can approximate it in a few ways. Most common is to take many measurements and apply the sample standard deviation formula. Another rough option is to look for accuracy specs from the vendor and assume that full range means 6 standard deviations (e.g. $\pm 1$cm -&gt; range of 2cm -&gt; $\sigma = \frac{2}{6}$cm). This is further assuming a normal distribution and the accuracy spec covers 99% of all values.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;$^{a}$This isn't exactly true, even for the unbiased estimate I gave, but it's close enough to true to be the most commonly used form&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2017-09-22T19:45:08.377" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14284" PostTypeId="1" CreationDate="2017-09-22T20:31:18.930" Score="0" ViewCount="633" Body="&lt;p&gt;I've got a project in university to build a vehicle on Arduino and I'd like to implement reinforcement learning for it. The processors on Arduino, of course, are too slow for this task so here is my question. Is it possible to perform all the learning in the cloud which will communicate with the vehicle via wifi? And if so, I would really appreciate some hints or references. Thanks.&lt;/p&gt;&#xA;" OwnerUserId="18191" LastActivityDate="2018-01-19T09:13:59.807" Title="Is it possible to use neural networks with Arduino?" Tags="&lt;arduino&gt;&lt;machine-learning&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14285" PostTypeId="2" ParentId="14284" CreationDate="2017-09-23T00:31:11.870" Score="1" Body="&lt;p&gt;In general, yes. Just create the network so that it can be run on another machine or the cloud for training. Training basically consists of running many, many test scenarios through the network, and this gradually assigns values to each 'neuron' and connection (I oversimplify slightly). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once the network is trained, you can copy the trained network onto your Arduino device and use it in your 'real world' experiments. There will be some saved document or file that contains all those weights and biases for the network. The TensorFlow neural network library, for example, has a guide for saving the weights and biases at &lt;a href=&quot;https://www.tensorflow.org/programmers_guide/saved_model&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.tensorflow.org/programmers_guide/saved_model&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I do not know which neural network libraries can run on Arduino as well as other platforms. And as a sidenote, if you have a budget you may want to look into Nvidia's Jetson platform/chip at &lt;a href=&quot;http://www.nvidia.com/object/embedded-systems.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.nvidia.com/object/embedded-systems.html&lt;/a&gt;    as it is made for both deep learning and embedded systems (arduino is a low-end form of an embedded system). It's not as expensive as I expected, but still may be out of budget and the community isn't anywhere near as large - but it's good to know that the hardware already exists.&lt;/p&gt;&#xA;" OwnerUserId="18168" LastEditorUserId="18168" LastEditDate="2017-09-23T14:23:34.450" LastActivityDate="2017-09-23T14:23:34.450" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14286" PostTypeId="1" AcceptedAnswerId="14314" CreationDate="2017-09-23T04:10:32.193" Score="1" ViewCount="515" Body="&lt;p&gt;I am working on a concept of robotic arm for which I have fixed DH frames and parameters. Is there any way to validate the correctness of DH parameters and frames ?&#xA;&lt;a href=&quot;https://i.stack.imgur.com/sXcnY.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/sXcnY.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10758" LastActivityDate="2018-12-30T01:57:26.293" Title="Validation of dh parameters" Tags="&lt;robotic-arm&gt;&lt;simulation&gt;&lt;manipulator&gt;&lt;simulator&gt;&lt;dh-parameters&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14287" PostTypeId="1" CreationDate="2017-09-23T13:04:53.350" Score="1" ViewCount="98" Body="&lt;p&gt;I am building a beach cleaning robot. I am having problems with it moving on the Sand. I have attached a video of it struggling to move. How can I proceed (I think it has enough torque) . it moves comfortably on normal ground. Do I need diff wheels, motors, wheel size etc? &lt;a href=&quot;https://www.youtube.com/watch?v=7Ri1gwZjr9c&amp;amp;feature=youtu.be&quot; rel=&quot;nofollow noreferrer&quot;&gt;Video of slippage&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18194" LastActivityDate="2017-09-23T13:57:19.600" Title="Beach Cleaning Robot - Wheel Slip problem" Tags="&lt;control&gt;&lt;motor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14288" PostTypeId="1" CreationDate="2017-09-23T13:16:34.463" Score="0" ViewCount="75" Body="&lt;p&gt;I have been looking into non-linear control algorithms for controlling a quadcopter. I know that we have total 6 DOF for a quad (3 translation and 3 rotation) and our input belongs to $\mathbb{R}^4$, i.e. the 4 motor inputs. So if I look at a quad following a specified trajectory $x(t)$, where $x\in \mathbb{R}^3 $. Then I am actually controlling only the desired position coordinates. Angles and angular velocity vary such that position is attained, but we don't actually command the angles. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, my doubt is we have 4-degree input but only 3-degree controlled output. Is it possible to have position tracking along with a particular angle, such as yaw tracking? Controlling 4 states using 4 commands? Am I fundamentally wrong in my reasoning?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively, in terms of movements being directly actuated, we do have 3-moment torques and a thrust as an input. Would we consider this as 4 DOF command instead?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any reference or paper would be welcome too. &lt;/p&gt;&#xA;" OwnerUserId="6823" LastActivityDate="2017-12-27T14:20:22.310" Title="Is it possible to achieve control of 4 DOF in quadcopter?" Tags="&lt;quadcopter&gt;&lt;control&gt;&lt;algorithm&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14289" PostTypeId="2" ParentId="14287" CreationDate="2017-09-23T13:57:19.600" Score="2" Body="&lt;p&gt;I'd consider using tracks on your robot. Your video shows the very reason why the military use tracks on vehicles intended for operation on sand.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, you can see one example of a beach cleaning robot from DronyX. They use their tracked vehicle for their Solaryno &lt;a href=&quot;http://www.dronyx.com/solarino-beach-cleaner/&quot; rel=&quot;nofollow noreferrer&quot;&gt;beach cleaning robot&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, that is just one example of a beach cleaning robot. &lt;a href=&quot;https://www.google.co.uk/search?q=beach%20cleaning%20robot&amp;amp;source=lnms&amp;amp;tbm=isch&amp;amp;sa=X&amp;amp;ved=0ahUKEwj_r5DpurvWAhWhK8AKHXsKAbYQ_AUICygC&amp;amp;biw=1527&amp;amp;bih=845&quot; rel=&quot;nofollow noreferrer&quot;&gt;Google&lt;/a&gt; will show you plenty of others, and a majority seem to use tracked propulsion.&lt;/p&gt;&#xA;" OwnerUserId="17029" LastActivityDate="2017-09-23T13:57:19.600" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14290" PostTypeId="2" ParentId="14278" CreationDate="2017-09-23T14:47:57.323" Score="1" Body="&lt;p&gt;You are best off using the servo's horn/hub (the plastic or metal disk or arm that you attach to the servo), and screwing the arm to the hub. You get buy some larger horns for fairly cheap, and that will make it easier.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The arm of that desk stand doesn't have any single screw as the center of rotation - each joint has a pair of metal arms on each side, and the center of rotation is at the midpoint of the pair. You could stick the servo into one of the screw holes and make it work, but the movement would be off-axis, awkward, and the connection would be fragile. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you really want to try attaching the servo through an existing screw hole, the easiest way is to unscrew one of the screws, drill out the hole so it's large enough, stick the servo spindle into the hole, and add some solder to hold the spindle to the arm. You'll also need to screw the servo to the joint piece, otherwise the servo casing will spin rather than the arm. This is a rather permanent and destructive approach (and you really need to be careful with the solder), but honestly the time required to properly machine the arm and set it all up so you can remove the servo later is a lot more of a commitment than the $40 you'd spend on the arm and servo. The hard part of such a 'proper' approach is getting the servo spindle to fit the hole perfectly. That's why I recommend using a large hub instead - that already fits the spindle, and you can attach the hub to an arm spoke with only 1 new screw hole. You'll still need to screw the servo casing to the joint piece.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only caveat is that most servo spindles have 25 splines or teeth, but some have 24 (usually represented as 24T and 25T) - you'll need to ensure that the hub has the same number as the servo. I think HiTec is the only major maker that does 24 teeth, but some of their servos have 25 because they realized they aren't following the defacto standard. HiTec's website is very good at saying how many teeth their servos have.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additionally, look for servos with high torque. Many are made for speed rather than torque, because that's what RC cars needed, but for an early experiement like this the speed isn't really important - you just want to have enough torque to ensure that it can move the arm. You can find some no-brand servos on Amazon with around 20kg/cm torque (they claim, but I've never checked that aim for accuracy) for around $25. They're not super precise or quiet, but if you want both torque and accuracy you'd pay at least twice as much. For your first go at this, you don't need to move in increments of fractions of a degree; the less-accurate servo will work just fine.&lt;/p&gt;&#xA;" OwnerUserId="18168" LastActivityDate="2017-09-23T14:47:57.323" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14291" PostTypeId="2" ParentId="2110" CreationDate="2017-09-23T19:05:44.873" Score="0" Body="&lt;p&gt;The typical solution to this is not to try to inject commands into the existing remote control encoder, but rather to replace it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typically you start by connecting a simple USB-based logic analyzer to the signals feeding the RF submodule that is attached at the top of the board.  You can do some initial identification of the lines (almost always an SPI bus, possibly with an additional enable, but very rarely a custom baud rate UART) with the analzyer's GUI interface (or a scope if available).  Once you know the electrical format, you identify operations on various registers and figure out which RF chip is being used from comparison to data sheets of the likely suspects (nRF24/Beken, A7105, XN297, etc).  Then you write a custom streaming decoder for the packet registers for that to plug into logic analyzer software like sigrok, so that you can move the sticks and see which parts of the transmitted packet change.  And you figure out the channel hopping scheme from the writes to the channel registers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With all of that, you have what you need to make an Arduino-like board run the RF module - or often an alternate sourced one.  People have also working out how to make the nRF24L01+ talk to some similar concept chips with notably different on-air format like the X297.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's quite likely though that you will not have to do this entire task yourself.  Typically, the R/C hobby community quickly reverse engineers all of this for any interesting inexpensive toy aircraft, and creates code to the able to operate it from a hobby grade transmitter, either running the &quot;Deviation&quot; firmware or as a plug-in-module which takes legacy multi-channel PPM input and uses an Arduino-like MCU to encode any one of a number of toy protocols.  So first do some looking on places like rcgroups for existing work on this particular toy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, the &lt;a href=&quot;https://www.deviationtx.com/wiki/supported_models&quot; rel=&quot;nofollow noreferrer&quot;&gt;Deviation project Wiki&lt;/a&gt; lists the WL-v262 as using an nRF24L01-compatible radio, with what has come to be called the &quot;V202&quot; protocol, so likely everything you need is already available between that and the more Arduino-ish PPM translator implementation at &lt;a href=&quot;https://github.com/pascallanger/DIY-Multiprotocol-TX-Module&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/pascallanger/DIY-Multiprotocol-TX-Module&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="18198" LastEditorUserId="18198" LastEditDate="2017-09-23T19:13:09.650" LastActivityDate="2017-09-23T19:13:09.650" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14292" PostTypeId="1" CreationDate="2017-09-24T09:22:21.827" Score="2" ViewCount="304" Body="&lt;p&gt;I know Android uses Linux kernel. And nowadays processors going to be more powerful and robots going to be more interactive with graphical user interface and Android is good in this field. &#xA;So, is it a good idea to investing time on Android and leaving Linuxes like Ubuntu?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can we do some classifying and say for which robots it's better to use Android and for which Linux is better choice? I ask this because I think Linux is faster than Android, am I thinking true?&lt;/p&gt;&#xA;" OwnerUserId="18204" LastActivityDate="2017-09-24T15:13:01.957" Title="Is it good idea to build robots with Android OS?" Tags="&lt;linux&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14293" PostTypeId="2" ParentId="14017" CreationDate="2017-09-24T14:44:30.750" Score="0" Body="&lt;p&gt;So I finally found my mistake...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The mistake was in the matrix form of the screw&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$ [S_2] = &#xA;        \begin{bmatrix}&#xA;        0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\&#xA;        0 &amp;amp; 0 &amp;amp; -1 &amp;amp; -2L \\&#xA;        0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\&#xA;        0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\&#xA;        \end{bmatrix}&#xA;$ &#xA;should be &#xA;$ [S_2] = &#xA;        \begin{bmatrix}&#xA;        0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\&#xA;        0 &amp;amp; 0 &amp;amp; -1 &amp;amp; -2L \\&#xA;        0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\&#xA;        0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\&#xA;        \end{bmatrix}&#xA;$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;and I misinterpreted the answer...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$&#xA;[B_2] = &#xA;        \begin{bmatrix}&#xA;        0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \\&#xA;        0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\&#xA;        -1 &amp;amp; 0 &amp;amp; 0 &amp;amp; -3L \\&#xA;        0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\&#xA;        \end{bmatrix}&#xA;$&#xA;should be &#xA;$ &#xA;[B_2] = &#xA;        \begin{bmatrix}&#xA;        0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \\&#xA;        0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\&#xA;        -1 &amp;amp; 0 &amp;amp; 0 &amp;amp; -3L \\&#xA;        0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\&#xA;        \end{bmatrix}&#xA;$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What a fool...&lt;/p&gt;&#xA;" OwnerDisplayName="user16060" LastActivityDate="2017-09-24T14:44:30.750" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14295" PostTypeId="2" ParentId="14292" CreationDate="2017-09-24T15:13:01.957" Score="4" Body="&lt;p&gt;(This questions asks for an opinion which, in most stackexchange.com forums, is discouraged.  I'll answer, but would appreciate knowing what is allowed in the robotics.stackexchange.com forum.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The major difference between most Linux distributions and Android is that features normally relegated to different users are relegated to different applications on an Android device.  That is to say, all the Linux security efforts for isolating one user from another built up over the past several decades has been re-purposes to isolate one application from another.  In this way, an Android device can safely run multiple applications fairly independent of one another.  For example, your web browser should not be able to affect nor read the application you use for banking.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this good for controlling robots?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you plan on controlling your robot from 1 application I would say it does not make any difference.  But, if you plan on controlling your robot from multiple applications, using an Android OS would make it more difficult.  Why?  If you use an application for computer vision and another for mapping and yet another for motor control - how will they freely talk with one another?  Likely it is not impossible.  But such communication between programs is common place in most Linux distributions.  &lt;/p&gt;&#xA;" OwnerUserId="17364" LastActivityDate="2017-09-24T15:13:01.957" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14296" PostTypeId="2" ParentId="11962" CreationDate="2017-09-24T20:03:40.367" Score="2" Body="&lt;p&gt;While all sorts of things get used in experiments, screws really intended to tap into plastic have larger more aggressive threads than those intended to go into a pre-tapped hole in a harder material like metal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Generally speaking, you want the screw's &lt;code&gt;minor diameter&lt;/code&gt; (which is to say that of the body between the threads) to fit through the hole, with only the threads cutting into the walls.  If the body itself has to be forced, breaking the plastic horn is more common.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is also quite commonplance to drill out servo horn holes to a slightly larger size when needed - typically you would do this by rotating the drill bit by hand in a pin vise, not with a an electric drill.  Of course enlarging the hole weakens the servo horn.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another option is to buy a miniature machine screw and matching nylon insert nut to install on the reverse side.  You may find it easier to install if you remove the servo horn from the servo.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Traditionally hobby shops had lots of small generic fasteners; that seems to be less true today with the prevalence of ready-to-go models vs kits assembled with components purchased individually.  However sometimes you can buy a full set of replacement screws for an RC car or helicopter, which will give you a variety of sizes to choose from.&lt;/p&gt;&#xA;" OwnerUserId="18198" LastActivityDate="2017-09-24T20:03:40.367" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14297" PostTypeId="1" AcceptedAnswerId="14298" CreationDate="2017-09-25T05:22:39.330" Score="0" ViewCount="77" Body="&lt;p&gt;I need help converting this project to reality for my office that I currently work in. I basically want to have sensors(idk which or what kind) behind a bookshelf in individual racks and have those sensors communicate with an app to tell if that rack is full or not. I have no background in programming or robotics but I am willing to learn and read as much as possible if someone can guide me in the right direction it would be really helpful. I also wan it to be as cheap as possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have attached an image of how I want the setup to be. Thanks in advance &lt;a href=&quot;https://i.stack.imgur.com/iI7XJ.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/iI7XJ.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="18209" LastEditorUserId="23196" LastEditDate="2017-09-25T16:26:53.873" LastActivityDate="2017-09-25T16:26:53.873" Title="How to detect books in a bookshelf?" Tags="&lt;arduino&gt;&lt;sensors&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2017-09-25T16:29:03.253" ContentLicense="CC BY-SA 3.0" />
  <row Id="14298" PostTypeId="2" ParentId="14297" CreationDate="2017-09-25T12:23:44.617" Score="0" Body="&lt;p&gt;I would suggest to start with something simple and later on work out the small details.&lt;br/&gt;&#xA;For a fast Proof of Concept you can use an Arduino Yun which comes with built-in WiFi connectivity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Arduino will be connected to an array of proximity sensors, either ultrasonic or IR, and will return the racks with books, simply check if the distance retrieved by the sensor is less than x cm, where x is the length of the single rack. Obviously you should take an average of several measurements with a small delay (say 10 uS) because these sensors are subject to heavy fluctuations and may cause false positives/negatives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then the Arduino will connect to a backend and stream all the data using one of the several available protocols. You can use an online ready to use backend such as &lt;a href=&quot;https://temboo.com/arduino&quot; rel=&quot;nofollow noreferrer&quot;&gt;Temboo&lt;/a&gt; to visualise data and later on develop a smartphone app.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further improvements can be on the uC and code side, maybe using a raw ESP8266 to be put in sleep mode and enabled once a while to poll sensors and trasmit data to go back in low power mode.&lt;/p&gt;&#xA;" OwnerUserId="16015" LastActivityDate="2017-09-25T12:23:44.617" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14299" PostTypeId="2" ParentId="7176" CreationDate="2017-09-25T14:53:30.137" Score="1" Body="&lt;p&gt;I would go with the PCA9685 16-channel PWM controller (12-bit and I2C) that will set you back about €2.10 when ordered on ebay. It uses i2c and you can chain up to 64 of these controllers. So you will need only two of them probably. You just need a few pins to connect them to either a raspberry or an arduino. The module itself has a small form-factor. Software support is also great: &lt;a href=&quot;https://github.com/adafruit/Adafruit_Python_PCA9685&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/adafruit/Adafruit_Python_PCA9685&lt;/a&gt;. I did learn also about the adafruit solution, but I'm glad the price has made me look a bit further.&lt;/p&gt;&#xA;" OwnerUserId="18210" LastActivityDate="2017-09-25T14:53:30.137" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14300" PostTypeId="1" CreationDate="2017-09-25T15:50:51.123" Score="2" ViewCount="47" Body="&lt;p&gt;I mean some bricks like Lego/Meccano with a community like Instructables site, those share their models and robots with others. Also the 3D models of bricks(in solidworks format for example) are free to use or the parts are available to buy at the market!&lt;/p&gt;&#xA;" OwnerUserId="18204" LastActivityDate="2018-02-10T00:09:48.957" Title="Are there any Open-Source bricks projects for robotics?" Tags="&lt;mobile-robot&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14301" PostTypeId="1" CreationDate="2017-09-25T16:16:25.163" Score="2" ViewCount="851" Body="&lt;p&gt;Are there any programmable microcontrollers or add-on boards that contain an IMU, or ESCs? I've looked at the arducopter but this board's code is not open source, and I need something that can be programmed.&lt;/p&gt;&#xA;" OwnerUserId="18176" LastActivityDate="2017-09-26T07:15:37.857" Title="Programmable Microcontroller for Drones" Tags="&lt;microcontroller&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="0" ClosedDate="2017-10-02T16:18:08.777" ContentLicense="CC BY-SA 3.0" />
  <row Id="14302" PostTypeId="2" ParentId="14242" CreationDate="2017-09-25T17:54:34.973" Score="5" Body="&lt;p&gt;The updated image solves the problem. You did not consider the end-effector coordinate frame earlier.&#xA;Also, the crosses (going into) in the diagrams should be replaced by dots(coming out), because the crosses don't hold the right hand rule in case you are using a right hand coordinate system.&lt;/p&gt;&#xA;" OwnerUserId="17205" LastActivityDate="2017-09-25T17:54:34.973" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14303" PostTypeId="1" AcceptedAnswerId="14309" CreationDate="2017-09-25T22:07:26.247" Score="2" ViewCount="170" Body="&lt;p&gt;Let me start by saying that I know nothing about robotics.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My wife goes a little crazy with Halloween decorations. She judges success by how many children she can make cry.  Last year I built her a coffin with a hinged lid that we prop a skeleton in.  I'd like to punch it up this year and have the lid open with some actuators.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have no idea what parts I would need to make this work.  I'm thinking I need something weather resistant and powerful enough to lift a wooden lid.  I'll probably attach a skeleton prop to the underside of the lid so it looks like he's sitting up when the lid opens.  For controls I'd like just a switch that we can turn on/off or maybe get fancy and add a motion sensor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help you can give is appreciated.  Thanks in advance.&lt;/p&gt;&#xA;" OwnerUserId="18212" LastEditorUserId="23196" LastEditDate="2017-09-29T08:41:50.293" LastActivityDate="2017-09-29T08:41:50.293" Title="How to open a coffin for halloween decoration?" Tags="&lt;motor&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14304" PostTypeId="1" CreationDate="2017-09-26T03:54:54.297" Score="3" ViewCount="1260" Body="&lt;p&gt;I am interested in using a cheap LiDAR module for an outdoor robot I am building. The LiDAR modules that I am looking at are not waterproof and I was wondering how hard it would be to build a waterproof case and how much that would impact performance. If anyone has experience related to this and can give some advise that would be greatly appreciated.&lt;/p&gt;&#xA;" OwnerDisplayName="user16549" LastActivityDate="2017-09-26T04:29:03.303" Title="Waterproofing LiDAR?" Tags="&lt;lidar&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14305" PostTypeId="1" AcceptedAnswerId="14312" CreationDate="2017-09-26T04:13:16.517" Score="2" ViewCount="1255" Body="&lt;p&gt;&lt;strong&gt;note:&lt;/strong&gt; I'm just a day or so into the use of inertial measurements and trying to learn everything at once, this may be a noob question (it's my first here).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have seen this image of &quot;Figure 8&quot; in several sites &lt;a href=&quot;http://www.geekmomprojects.com/gyroscopes-and-accelerometers-on-a-chip/&quot; rel=&quot;nofollow noreferrer&quot;&gt;geekmomprojects&lt;/a&gt;, &lt;a href=&quot;http://www.makerworkshop.com.au/emitcollect/electronics/complimentary-filters-in-inertia-measurement-units/&quot; rel=&quot;nofollow noreferrer&quot;&gt;makerworkshop&lt;/a&gt;, &lt;a href=&quot;http://husstechlabs.com/projects/atb1/using-the-accelerometer/&quot; rel=&quot;nofollow noreferrer&quot;&gt;husstechlabs&lt;/a&gt;, &lt;a href=&quot;http://aros.se/blog2013/101&quot; rel=&quot;nofollow noreferrer&quot;&gt;aros.se&lt;/a&gt;, but I don't understand it or how the equations are derived. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I set an accelerometer on a table so that $a_x$ and $a_y$ are nulled and rotate it around the $\hat{z}$ axis, I'm changing the yaw of the accelerometer but of course there is no change in the value of $\theta$ away from zero as given by the last equation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So how is this a measurement of yaw? Or am I missing something obvious? What do these three expression actually mean? I'm beginning to think that the first two expressions are simply the &quot;tilt angles&quot; and the third is some geometrical angle that is not actually independent of the other two.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/wh0F7.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wh0F7.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="17872" LastEditorUserId="17872" LastEditDate="2017-10-03T08:13:21.223" LastActivityDate="2017-10-03T08:13:21.223" Title="Yaw from accelerometer? No! So what do these equations actually mean?" Tags="&lt;imu&gt;&lt;accelerometer&gt;&lt;orientation&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14306" PostTypeId="2" ParentId="14304" CreationDate="2017-09-26T04:29:03.303" Score="3" Body="&lt;p&gt;So I just found this in the Sweep LiDAR datasheet(&lt;a href=&quot;https://s3.amazonaws.com/scanse/Sweep_user_manual.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://s3.amazonaws.com/scanse/Sweep_user_manual.pdf&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Sweep uses 905nm laser light, which passes through several kinds of clear glass and plastic very well. Based on our testing, clear Polycarbonate plastic is one of the best choices, as it can be molded to fit the profile of the application’s enclosure, is very inexpensive, and in most cases,is more than 95% translucent to Sweep’s light &#xA;  beam.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Factors that can affect the performance of a window are:&lt;/p&gt;&#xA;  &#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;&lt;p&gt;Thickness of the window. Thicker windows will block more light, as well as bend the light more if the beam is &#xA;  not hitting the window normal to the surface.&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;li&gt;&lt;p&gt;Scratches and dust. The presence of scratches and dust on the window will scatter the laser light, and may reflect some of the light back into the sensor’s detector, causing measurement errors.&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;li&gt;&lt;p&gt;Surface coatings. There are a variety of coatings that can help with the performance of windows. One is an anti-reflective (AR) coating, which can help reduce the amount of laser light that is reflected as it passes through the window’s surface.&lt;/p&gt;&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerDisplayName="user16549" LastActivityDate="2017-09-26T04:29:03.303" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14307" PostTypeId="2" ParentId="14303" CreationDate="2017-09-26T07:04:00.460" Score="0" Body="&lt;p&gt;I think the easiest way would be to attach a rope that pulls up the lid. You then just need a motor to wind up the rope. If you have no idea of hardware, this can also be done manually if your development fails and you need to have something working at Halloween. &lt;/p&gt;&#xA;" OwnerUserId="23196" LastActivityDate="2017-09-26T07:04:00.460" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14308" PostTypeId="2" ParentId="14301" CreationDate="2017-09-26T07:15:37.857" Score="1" Body="&lt;p&gt;For drones you may check out the &lt;a href=&quot;https://pixhawk.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;PixHawk&lt;/a&gt;, whose &lt;a href=&quot;https://raw.githubusercontent.com/PX4/Hardware/master/FMUv2/PX4FMUv2.4.5.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;schematics&lt;/a&gt; and software (&lt;a href=&quot;https://github.com/ArduPilot/ardupilot&quot; rel=&quot;nofollow noreferrer&quot;&gt;ArduPilot&lt;/a&gt;) are open-source and expandable. If you prefer you can also connect a companion computer via MAVlink and perform heavy-duty tasks on it, such as computer vision or obstacle avoidance.&#xA;Apart from that, there are countless IMU boards which can be easily interfaced with popular uC like Arduino simply using I²C or SPI, from Chinese low-cost modules to thousand dollars ones used for advanced INS and dead reckoning.&lt;/p&gt;&#xA;" OwnerUserId="16015" LastActivityDate="2017-09-26T07:15:37.857" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14309" PostTypeId="2" ParentId="14303" CreationDate="2017-09-26T07:24:54.083" Score="0" Body="&lt;p&gt;You can use a heavy-duty linear actuator paired with a simple motor controller board (such as the &lt;a href=&quot;https://www.pololu.com/category/94/pololu-simple-motor-controllers&quot; rel=&quot;nofollow noreferrer&quot;&gt;Polou one&lt;/a&gt;) and a vibration motor to make the skeleton move.&#xA;A PIR, passive infra-red, sensor and an Arduino can do the job, so that whenever someone drops by, the coffin will be lifted and the skeleton tremble and shake.&lt;br/&gt;&#xA;Some nice additions could be RGB leds and sound effects, the latter easily integrated using a sound board (like &lt;a href=&quot;https://www.adafruit.com/product/2133&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; one).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a reference, this is a linear actuator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/i8SQq.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/i8SQq.jpg&quot; alt=&quot;a linear actuator&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="16015" LastActivityDate="2017-09-26T07:24:54.083" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14310" PostTypeId="1" AcceptedAnswerId="14313" CreationDate="2017-09-26T07:55:19.923" Score="1" ViewCount="153" Body="&lt;p&gt;&lt;a href=&quot;https://robotics.stackexchange.com/q/14179/17554&quot;&gt;Previous Question&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hello, In continuation of my question above, I have another question. I have managed to control the speed of the treadmill using a PID and StevO mentioned to me how the scaling from process variable(speed) to control signal (pwm) is done.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, I want to control the position of the robot at a fixed position on the treadmill. I want to use the first approach shown in picture below. Note that the labeling is for a quadcopter. I want to use the same approach but the labeling is different in my case. For me the input to Stabilize PID is desired robot positon on treadmill and actual robot position on treadmill.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/PmQBipe.png&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Rate PID is up and working. I want to use the Stabilize PID to make the robot hold a fixed position on the treadmill. I can measure the position of the robot using a distance sensor and find the error = desired distance - actual distance. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My problem is that the error is in terms of distance(meters) but the control signal needs to be speed that would be fed to the speed control. The speed controller would do its job.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;To sum up, my question is that for the Stabilitze PID block, by using a process variable which is position (meters), how can I get a control signal that would be speed?, what kind of scaling should be done here?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you.&lt;/p&gt;&#xA;" OwnerUserId="17554" LastActivityDate="2017-09-27T03:29:24.940" Title="Robot Position Control on Treadmill" Tags="&lt;mobile-robot&gt;&lt;motor&gt;&lt;pid&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14312" PostTypeId="2" ParentId="14305" CreationDate="2017-09-26T11:38:12.660" Score="1" Body="&lt;p&gt;Not sure if I understand your question exactly, but the scenario you point out is the blind spot of imus: they can't tell you the rotation about the gravity vector. It's nothing specific to yaw per se; if you put the imu on edge then you couldn't get rotation about the x or y axis, depending on which was aligned with the gravity vector. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically, when the imu is sitting still is tells you which direction gravity points, but this is only 1 axis of a coordinate system so doesn't fully define your orientation. This is why systems will frequently add another measurement such as a magnometer which can generally be used to know which direction is north. With these two directions you can fully define the orientation.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2017-09-26T11:38:12.660" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14313" PostTypeId="2" ParentId="14310" CreationDate="2017-09-26T14:47:48.890" Score="1" Body="&lt;p&gt;Consider using calculus or rather derivatives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You have stumbled upon the relationship between velocity and position.  This can be extended to include acceleration.  Simply put, velocity is the derivative of position.  And taking the derivative of position gives acceleration. Instead of writing an equation and actually taking the derivative, computers simply takes samples and divide the samples by time.  A good example might be an electronic bicycle speedometer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For your project, you can get velocity by dividing the change in the distance sensors position value by an arbitrary but consistent time interval.  Then correcting the robot's velocity relative to the treadmill.&lt;/p&gt;&#xA;" OwnerUserId="17364" LastEditorUserId="17364" LastEditDate="2017-09-27T03:29:24.940" LastActivityDate="2017-09-27T03:29:24.940" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14314" PostTypeId="2" ParentId="14286" CreationDate="2017-09-26T18:42:37.853" Score="2" Body="&lt;p&gt;The easiest way to validate a set of DH parameters is to plug them directly into a simulator which can build a robot model from a DH table. Once you've got the DH-generated robot model, you can verify that the robotic structure that is generated is what you would expect based on your DH table.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The most common DH-table based robot simulation package that I've worked with is the Robotics Toolbox for MATLAB written by Peter Corke: &lt;a href=&quot;http://petercorke.com/wordpress/toolboxes/robotics-toolbox&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://petercorke.com/wordpress/toolboxes/robotics-toolbox&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="10414" LastActivityDate="2017-09-26T18:42:37.853" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14315" PostTypeId="2" ParentId="14091" CreationDate="2017-09-27T02:59:22.647" Score="0" Body="&lt;p&gt;Since you want to keep the mass of the vehicle constant, I suggest you focus on the efficiency of the propellers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Area 1 to look at is optimizing the propeller shape for the exact speed and thrust you need for your vehicle. (The motors you are using will have an optimal operating point that defines the ideal speed). There are electric helicopter enthusiasts that compete for long duration flights (Which can last more than 60 min for some configurations if I remember correctly); so that is probably a good place to start looking for information. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Area 2: Each propeller you remove from the system will reduce the overhead in mass and system losses. A helicopter is more efficient than a quad or octo copter. Quadcopters are popular because of their mechanical simplicity but you pay for this in efficiency (flight time). &lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2017-09-27T02:59:22.647" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14317" PostTypeId="1" AcceptedAnswerId="14325" CreationDate="2017-09-27T11:04:48.607" Score="1" ViewCount="166" Body="&lt;p&gt;I'm building a 7oF arm with series elastic compliant joints. I need series elasticity because I'm training the robot to do autonomous manipulation using machine learning, and I want force control (and prevent the arm from killing itself if it hits something). I want the final joint to be something like &lt;a href=&quot;https://www.youtube.com/watch?v=KFW0SQhc5vU&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm having real trouble finding plans online for any kind of rotary series elastic joint. I wonder why this is, given how easy it is to find arm plans.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm going to add it to &lt;a href=&quot;https://www.youtube.com/watch?v=CCgI4R1TEzI&amp;amp;t=620s&quot; rel=&quot;nofollow noreferrer&quot;&gt;this robot&lt;/a&gt;. An example of the kind of motor I'll be sticking it on is &lt;a href=&quot;https://www.omc-stepperonline.com/geared-stepper-motor/nema-17-stepper-motor-bipolar-l48mm-w-gear-raio-51-planetary-gearbox-17hs19-1684s-pg5.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;5:1 planetary gear stepper motor&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My plan right now is to buy a &lt;a href=&quot;http://www.zettlex.com/products/incoder/&quot; rel=&quot;nofollow noreferrer&quot;&gt;rotary magnetic absolute encoder&lt;/a&gt; and a &lt;a href=&quot;http://www.centuryspring.com/torsion&quot; rel=&quot;nofollow noreferrer&quot;&gt;torsional spring&lt;/a&gt;. I don't really know if there's a standard way to mount these things.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if anyone could point me in the right direction, that would be great :)&lt;/p&gt;&#xA;" OwnerUserId="17557" LastEditorUserId="17557" LastEditDate="2017-09-28T08:01:25.953" LastActivityDate="2017-09-28T08:50:22.940" Title="Rotary Serial Elastic Actuator" Tags="&lt;control&gt;&lt;actuator&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14318" PostTypeId="2" ParentId="14317" CreationDate="2017-09-27T12:32:42.587" Score="1" Body="&lt;p&gt;There was a &lt;a href=&quot;https://pdfs.semanticscholar.org/770c/2cd3719451cb2956d0de44893b041db2a873.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;paper&lt;/a&gt; describing a rotary series elastic actuator for human-assistive systems in IEEE/ASME Transactions on Mechatronics, Vol. 17, No. 2 (April 2012).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The paper included diagrams of the mechanism and a description of the controller design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is that the sort of thing you were looking for?&lt;/p&gt;&#xA;" OwnerUserId="17029" LastActivityDate="2017-09-27T12:32:42.587" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14319" PostTypeId="1" CreationDate="2017-09-27T14:31:50.697" Score="2" ViewCount="52" Body="&lt;p&gt;Are there any specific tools or practices which robotics companies use in order to keep track of errors in:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Sensors/Actuators malfunctioning or returning unexpected results&lt;/li&gt;&#xA;&lt;li&gt;Programming errors or exception states&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The aim of tracking this diagnostics information would be to:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Remote diagnosis of errors&lt;/li&gt;&#xA;&lt;li&gt;Root cause analysis&lt;/li&gt;&#xA;&lt;li&gt;Understanding of errors which 'cascade' from devices/robots to platforms and cloud services&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I'm interested specifically in the parallels between normal software tools, e.g. &lt;a href=&quot;https://sentry.io&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sentry&lt;/a&gt; or &lt;a href=&quot;https://rollbar.io&quot; rel=&quot;nofollow noreferrer&quot;&gt;Rollbar&lt;/a&gt; for exception tracking, APM systems such as &lt;a href=&quot;https://dynatrace.com&quot; rel=&quot;nofollow noreferrer&quot;&gt;Dynatrace&lt;/a&gt; and the distributed and long lived state of the autonomous systems world. These systems seem to be better suited to errors in a request/response format, where the history of a device does not have as much affect on it's future as in the autonomous systems world.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So far the only tool I've seen is the diagnosis tools built into the &lt;a href=&quot;http://wiki.ros.org/diagnostics&quot; rel=&quot;nofollow noreferrer&quot;&gt;ROS messaging bus&lt;/a&gt;, however it does not seem well suited to production.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How are teams currently doing this in production?&lt;/p&gt;&#xA;" OwnerUserId="18228" LastActivityDate="2017-10-01T22:32:37.860" Title="How do robotics companies track faults in production systems?" Tags="&lt;industrial-robot&gt;&lt;software&gt;&lt;communication&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14320" PostTypeId="2" ParentId="14254" CreationDate="2017-09-27T14:36:53.340" Score="1" Body="&lt;p&gt;Consider using infrared transmitters to flood the area of interest with short bursts of infrared light while using video cameras sensitive to infrared light or both infrared and visible light.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By flooding the area of interest with detectable pulses, the video from each camera can be analyzed such that any time discrepancies due to unexpected latencies can be mitigated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The location of objects in three dimensional space can be improved as video from various angles can be combined without concern regarding when in time a particular image from a particular camera was taken.&lt;/p&gt;&#xA;" OwnerUserId="17364" LastEditorUserId="17364" LastEditDate="2017-09-27T14:48:25.193" LastActivityDate="2017-09-27T14:48:25.193" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14321" PostTypeId="1" CreationDate="2017-09-27T16:17:56.800" Score="2" ViewCount="43" Body="&lt;p&gt;I have been asking a couple of questions here and around on autonomous boats and finally I decided to post the design and gather some feedback.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The idea is to build a small vessel capable of advanced autonomous navigation (on a given path), path optimisation and obstacle avoidance, being at the same time completely independent from fuel thanks to renewable energy sources, only relying on solar panels and thermoelectric generators.&#xA;The displacement of the boat is around 2m, with a bulb at the bottom containing LiFePo batteries.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the electronics side, I thought to split tasks into several units, made of microcontrollers running a RTOS (ChibiOs or FreeRTOS, I still have to choose) and a Single Board Computer with Arch Linux.&#xA;Up to now the units identified are:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;em&gt;High level navigation unit&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Low level navigation unit&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Power unit&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Engine unit&lt;/em&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The &lt;strong&gt;High level navigation unit&lt;/strong&gt; would perform the following tasks:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Path planning: global route calculation, considering shorelines, high-traffic routes and sea bathymetry to avoid groundings;&lt;/li&gt;&#xA;&lt;li&gt;Obstacle Avoidance: using a forward-looking sonar for underwater obstacles, AIS for boats, a thermal imaging camera and maybe a small radar for other types of objects;&lt;/li&gt;&#xA;&lt;li&gt;Local navigation: optimise the path taking into account the general predefined path (from the path planner), use Inertial Navigation and dead reckoning in case of GPS failure.&lt;/li&gt;&#xA;&lt;li&gt;Local System Management: put sensors in sleep mode when they're not needed or in case of power shortages.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The &lt;strong&gt;Low level navigation unit&lt;/strong&gt; is responsible for:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Local navigation&lt;/li&gt;&#xA;&lt;li&gt;Local System Management&lt;/li&gt;&#xA;&lt;li&gt;Communication: transmit and receive messages via radio link or satellite;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The &lt;strong&gt;Power unit&lt;/strong&gt; contains a MPPT solar charger and a battery monitor and is responsible for:&#xA; - Charging and powering the units;&#xA; - Sensing the battery and informing other units on the charge status;&#xA; - Disabling units to go in low power mode (one after the other).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The last unit is simply an interface to the engines, basically it's an ESC connected to the other units.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The backbone of the boat would be the well-established CAN Bus running NMEA2000 since almost all sensors use this protocol, and both the SBC and the uC would share messages via CanBus.&#xA;Locally, the SBC will have a CanBus interface and a MessageBus where threads responsible for the aforementioned tasks will stream messages (inter-thread) and eventually publish frames on the Can Bus to interface with sensors (say put the Sonar in sleep mode) or the other units.&#xA;Ideally in case of failure the boat should be able to navigate with just one of the two navigation units, obviously losing some functionalities.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My main concern is to reduce failure points so that a single error or broken sensor/unit would not compromise the whole system. Ideally there could be failsafe additions such as a Draculino, an Arduino running on RF and piezoelectric harvested energy to stream QRSS and morse position messages to nearby boats, but probably it's useless.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/mOOwL.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/mOOwL.jpg&quot; alt=&quot;design&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fun fact: this design should be COLREG compliant due to the several anti-collision features and some small details I didn't mention such as the navigation light or the manoeuvre normaliser (to make the boat steer in a human-understandable way).&lt;/p&gt;&#xA;" OwnerUserId="16015" LastActivityDate="2020-11-06T13:38:06.963" Title="Autonomous vessel general design" Tags="&lt;design&gt;&lt;navigation&gt;&lt;automation&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14324" PostTypeId="2" ParentId="14319" CreationDate="2017-09-28T07:42:11.500" Score="1" Body="&lt;p&gt;Company size and market expectations shape the specific tools used. Almost always kept confidential to some degree.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Issue tracking, remote diagnosis (and device security), and stochastic monitoring of hardware and software are common practice. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Failure prediction modeling is common where the economics make failure costly. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are no specific tools and best practice is sector specific.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might gain some insight looking at the practices of academic projects that require a large number of robots to be created and shared with other universities (&lt;a href=&quot;http://www.icub.org/%20%22iCub&quot; rel=&quot;nofollow noreferrer&quot;&gt;iCub for instance&lt;/a&gt;); or by looking at robotics companies that have a strong open source commitment. But projects like these are biased by what tools the project leaders are willing to pay for.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are part of a team in a new company with no experience in this you are probably better off hiring an expert or two in your sector than reinventing 100 wheels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT Note that robotics hardware products can take 5 to 10 years to develop into a mature product, be deployed for another decade or two, and best practices will be from the era of development. &lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="184" LastEditDate="2017-10-01T22:32:37.860" LastActivityDate="2017-10-01T22:32:37.860" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14325" PostTypeId="2" ParentId="14317" CreationDate="2017-09-28T08:50:22.940" Score="1" Body="&lt;p&gt;For an arm with series elastic actuators I'm not aware of an open source design. There are many mechanisms you can find in research papers if you search for them. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For force control you have a few other options. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can use an efficient backdrivable transmission (direct drive or spur or planetary or capstan all work) and control the current in a permanent magnet motor which will have a linear relationship between current and torque/force.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you only interact with the world (payload) at the end-effector, you can put a force-torque sensor there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For safety you can use clutches instead of compliance in many cases.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In all cases you will need to invest some time and learning. Maybe buddy up with a mechanical engineer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a side note, there are cheaper ways to measure the deflection (the original used a potentiometer) and finding the correct geometry and size of spring to match the operating conditions is a challenge in itself. &lt;a href=&quot;http://expo21xx.com/automation21xx/17515_st2_university/biologically_inspired_actuation.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;These guys&lt;/a&gt; used compression spring for a rotary actuator and you could probably find enough &lt;a href=&quot;http://www.viactors.org/Documents/Papers/2009_IITpaperICRA1.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;public information&lt;/a&gt; plus some simple equations to use that approach in your own design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A final comment is that since you tagged visual servoing in your other question and your are talking about machine learning, you might consider keeping things more simple. Don't worry about force control, add whatever compliance you need for safety in any form (a rubber section in the link perhaps) and let the learning algorithm handle the control details... &lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2017-09-28T08:50:22.940" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14326" PostTypeId="1" CreationDate="2017-09-28T09:02:37.190" Score="1" ViewCount="49" Body="&lt;p&gt;Im currently working on a small robot that uses an ardupilot for its control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As Im working indoor, I can't use a real GPS so I'm making a dummy GPS based on UWB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From UWB I get a position at +/- 10cm in cartesian coordinates.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To make it easier I convert my position to latitude &amp;amp; longitude using:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;double Phi = this-&amp;gt;latitude_0 * M_PI /380;&#xA;this-&amp;gt;lat_to_meter = 111132.92 - 558.82*cos(2*Phi) + 1.175*cos(4*Phi) - 0.0023*cos(6*Phi);&#xA;this-&amp;gt;lon_to_meter = 111412.84 * cos(Phi) - 93.5 * cos(3*Phi) + 0.118 * cos(5*Phi);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and latitude_0 being 0 (all my reference are shifted to the point 0,0 close to the west of Africa).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Im building GPGA, GPRMC &amp;amp; GPVTG frames to feed the ardupilot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;GPS is detected &amp;amp; position is updated without any troubles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I'm struggling with the the Track Made good for the GPRMC &amp;amp; GPVTG sentences. &lt;a href=&quot;http://aprs.gids.nl/nmea/&quot; rel=&quot;nofollow noreferrer&quot;&gt;GPGA, GPRMC &amp;amp; GPVTG definitions&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Speed &amp;amp; everything else is trivial to calculate, but I can't understand the Track.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If Im not mistaken the track is the angle to the true north of the course i.e. the distance orientation (?).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my question is given 2 coordinates in latitude &amp;amp; longitude (conversion to meter is trivial) : how can I calculate the Track ?&lt;/p&gt;&#xA;" OwnerUserId="18234" LastActivityDate="2017-09-28T09:02:37.190" Title="Create a dummy GPS" Tags="&lt;gps&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14327" PostTypeId="1" CreationDate="2017-09-28T11:24:19.587" Score="1" ViewCount="24" Body="&lt;p&gt;I am looking for a rotational actuator with high torque and one whose rotation angle can be controlled using the arduino control signals &#xA;The project is an e-brake for an e-bike.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Working mechanism&lt;/strong&gt;&#xA;&lt;em&gt;The control input from sensor is fed to arduino and from arduino to an actuator .&#xA;The actuator(to which the brake wire is connected)should rotate a predefined angle so that the brakes are engaged&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any suggestions on implementing this?&#xA;Or any other alternative mechanisms for suggestion?&lt;/p&gt;&#xA;" OwnerUserId="18236" LastActivityDate="2017-09-28T19:28:52.740" Title="Suggestions for a rotational actuator" Tags="&lt;arduino&gt;&lt;motor&gt;&lt;actuator&gt;" AnswerCount="1" CommentCount="3" ClosedDate="2017-09-29T08:47:24.937" ContentLicense="CC BY-SA 3.0" />
  <row Id="14328" PostTypeId="2" ParentId="14091" CreationDate="2017-09-28T11:57:54.543" Score="1" Body="&lt;p&gt;Actually the constraints you set of using an Octorotor is already impeding the autonomy of the system. Indeed multi-rotor platforms are a trade-off between on one hand the ability to over and a simple dynamics of the system and on the other hand the flight efficiency and thus higher payload. &#xA;My answer to your question&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How likely am i to achieve 45min flight times?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;is that I think it is very unlikely if you platform weights around 1.5kg and you want to carry around 1kg of payload. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To your question&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How to get longest flight time on octocopter ?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;lest first review your strategies:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;blockquote&gt;&#xA;  &lt;p&gt;I can double the amount of batteries but this may make the craft unstable &lt;/p&gt;&#xA;&lt;/blockquote&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Double the battery is just embedding more energy on board (i.e. reducing the payload) but should not bring you platform to instability as long as your flight controller knows the mass and center of mass of the platform. Note that the more you increase the payload the closer you get to the actuation limits of you motor+propeller, what can happen is then that you use almost all your control authority for weight compensation and that nothing is left to allow attitude control, resulting in unstable behavior.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I may need to scale up on motor size to make payload less of an issue&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Scaling up the motor alone is a partial solution. As the thrust is produced by the combination motor+propeller, you can increase the thrust by tunning your motor+propeller combination. As noted by @hauptmech, propeller shape can be optimized to improvement the performances, but this is not trivial due to the aerodynamic at play and the interferences between the different propeller, the relative wind and so on. Note that increasing motor &quot;size&quot; will most likely lead in an increase in current consumption and so you might need to change your ESCs, also it will drain more power so you will need more battery and we are back to the same issue as described above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I know there are hydrogen fuel cells, maybe some other sort of alternative battery&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Hydrogen fuel cells is very new for multi-rotor and seems to not be super mature technologies, so it comes with potentially high development costs.&#xA;The idea fuel cells is that the power density of battery is rather low, another approach in the same direction is to have a gasoline motor and an alternator, but then even if you store more energy in the tank the weight of the full machinery doesn't scale for typical multi-rotor size.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Lastly my solution&lt;/strong&gt;, from a system engineering point of view I would recommend you to start the design from the problem; monitoring which kind of area, is stationary flight required, typical payload weight, typical payload power consumption, desired autonomy, and so on and so fourth. And based on those info choose the more adapted hardware for both your payload and your flying platform.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2017-09-28T11:57:54.543" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14329" PostTypeId="2" ParentId="14288" CreationDate="2017-09-28T12:22:41.677" Score="1" Body="&lt;p&gt;You are fundamentally right in your description of the quadrotor system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One thing that you oversaw a bit is how your four inputs are mapping to the system dynamics, indeed here 4 motors leads to 4 controllable quantities but it's not always the case. Think for example of an octorotor, with quadrotor configuration, ie, 2 motors per corner of the frame.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Is it possible to have position tracking along with a particular angle, such as yaw tracking?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This is typically what is done in linear control of quadrotor, by relying on the near-hovering approximation. An outer control loop generates the orientation, and its derivative, to be tracked to follow a position trajectory, when an inner loop tracks the orientation and its derivative, the yaw can be chosen arbitrarily at this stage (or set to follow a trajectory). Note that from the quadrotor design this is only possible for yaw, as yaw orientation doesn't influence the total thrust orientation.&#xA;A complete introduction paper on quadrotor is DOI: 10.1109/MRA.2012.2206474&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for more complex control in SE(3) you can look for  DOI: 0.1109/CDC.2010.5717652 &lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2017-09-28T12:22:41.677" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14330" PostTypeId="2" ParentId="14245" CreationDate="2017-09-28T12:36:40.783" Score="0" Body="&lt;p&gt;Quaternion are used to avoid gimbal Lock. As Euler-angle suffer from singularity configuration and the gimbal lock needs to be treated explicitly in your algorithm. Quaternion only suffer from a slight singularity in the sense that you express the rotation by a vector (3d) and a rotation around this vector (1d), so one rotation can also be represented by the opposite vector and the opposite angle (ie kind of multiplying the quaternion by -1) . The best is to use rotation matrices to be on the clean side, but it's usually heavier to implement. Using rotation matrices a nice paper is DOI: 0.1109/CDC.2010.5717652 &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another point in favor of rotation matrices or quaternion is that the number of convention is sensibly lower from more than 12 for Euler-angles, to 2 for quaternions and 1 for matrices. This is especially good when you work with other people/other software to be sure to be easily interfaced. See more on rotation in general &lt;a href=&quot;https://www.astro.rug.nl/software/kapteyn/_downloads/attitude.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.astro.rug.nl/software/kapteyn/_downloads/attitude.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A last remark, in general  for quadrotors the translational dynamics is expressed in world frame and the rotational dynamic is expressed in body frame, which simplifies expression of the control  matrix.  So naturally [p,q,r] are the angular velocities along the main axis of the body frame.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2017-09-28T12:36:40.783" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14331" PostTypeId="2" ParentId="14038" CreationDate="2017-09-28T12:53:16.640" Score="2" Body="&lt;p&gt;With the method you describe you are bound to have non zero velocity or non acceleration (based on if you consider a + pi/2 offset or not).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Despite @combo answer I would suggest you a second order filter or heaven higher to generate a smooth trajectory up to the n-th order. Typically in my lab we try to impose up to smooth jerk or snap, for high agility maneuvers.&#xA;I want to comment on the lag induced by such a filter, first of all it is small but most importantly it is irrelevant because it is in the planning side ! &#xA;Let me elaborate, if you filter any signal in your control loop loop you induce delay, if this delay is not taken into account by advanced control scheme this results in instability, which is bad.&#xA;However, what you try to do is to generate a feasible trajectory, so by using such a filter what happens is that your position input is such that you reach half the circle at a given time, then the filter output is going to be  bit delayed this delay is constant an related to the time constant of your filter. If you have time constraints in your trajectory you can take it into account but by experience in the majority of application it is not necessary. &#xA;So using a n-th order filter you just produce a smooth trajectory. Be careful to use as desired position the one given out of the filter so that it matches the velocity and acceleration.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastEditorUserId="18235" LastEditDate="2017-09-28T15:30:23.913" LastActivityDate="2017-09-28T15:30:23.913" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14332" PostTypeId="2" ParentId="13926" CreationDate="2017-09-28T14:42:44.493" Score="1" Body="&lt;p&gt;I think, that the following two video tutorials can help you with your problem. The first one shows how to convert a laser scan into a pointcloud, and the second shows how to mix several laser scans into a single pointcoud.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1- &lt;a href=&quot;https://www.youtube.com/watch?v=GvilxcePD64&quot; rel=&quot;nofollow noreferrer&quot;&gt;How to convert a laser scan into a pointcloud&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2- &lt;a href=&quot;https://www.youtube.com/watch?v=6O3QKhkg8zo&quot; rel=&quot;nofollow noreferrer&quot;&gt;How to assemble several laser scans into a single PointCloud&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18238" LastActivityDate="2017-09-28T14:42:44.493" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14333" PostTypeId="2" ParentId="13928" CreationDate="2017-09-28T16:05:55.553" Score="1" Body="&lt;p&gt;As you pointed out there are a lot of tutorial online see DOI: 10.1109/MRA.2012.2206474 for example. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think that the section &lt;a href=&quot;https://en.wikipedia.org/wiki/Quadcopter#Flight_dynamics&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Quadcopter#Flight_dynamics&lt;/a&gt; from wikipedia is quite simple, and neglects cumbersome aerodynamic effects that can arise for fast maneuvers. I will take a picture from there as it's open source.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's consider the quadrotor&#xA;&lt;a href=&quot;https://i.stack.imgur.com/RzV2R.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/RzV2R.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The propellers are numbered from 1 to 4, and assume that the center of mass of the quadrotor is at the origin of the frame. The propellers are each exerting force along the z-axis in body frame (pointing toward you) and the sum of the 4 thrusts gives the total thrust. Also assume that the relation between thrust and drag is directly proportional to spinning velocity, ie 10% more spinning velocity results in 10% more drag and thrust. From start consider that all 4 propellers spin at the same velocity, so that the total thrust produced balances the quadrotor weight.  This is called hovering, the sum of the propeller forces and torque is a force compensating for weight and no torque.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First notice that 2 are rotating clockwise and 2 counter clockwise, in order to balance the drag torque that they generate along th z-axis. So if you want to exert torque around the z axis you need to have the even propellers spinning more (less) than the uneven one. If you spin the even ones by 10% more and the uneven one by 10% less, the weight is still balance but a torque around z-axis is exerted. This would describe the yaw motion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the roll and pitch the reasoning is equivalent, so I will only present one. Consider that the pitch corresponds to the rotation around the y-axis [a]. The propeller 1 and 3 being located on that axis have obviously no role in the toque generation. Then the drag torque generated by the propeller is around z-axis so it's also not affecting the  pitch motion.&#xA;The torque generated along y for one propeller (2,4), is depending of two quantities the distance between the propeller center (where the force is exerted) and the thrust produced by the propeller. In general of their vector product but for the co-planar case one can just consider the thrust magnitude and the distance in the plan. So from the hovering condition if you spin 2 faster (an reduce all other 3 accordingly) you will get a negative pitch, quadrotor flying toward x negative. Conversely spinning less will generate positive pitch quadrotor flying toward x positive. The fact that the position change is due to the dynamical coupling and underactuation of quadrotors. But in general due to the high symmetry of the platform one augment the velocity of 2 and diminish the one of 4  (or the converse) at the same time to exert higher torque but most importantly to make the total thrust balance simpler.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that some people consider other frame conventions, like NED or with the frame not aligned with the propellers but the points between to propellers. The discussion remains the same, it's all about balancing force with the total thrust and playing on differential to exerted desired torque.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope this is as complete as possible without being cryptic, feel free to interact with me to refine my answer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[a] note for aeronautics enthusiasts, as the frame is not following North East Down convention positive pitch do not match to &quot;rise&quot; of the flying vehicle as it would be the case for a plane&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2017-09-28T16:05:55.553" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14334" PostTypeId="2" ParentId="12584" CreationDate="2017-09-28T17:09:35.443" Score="1" Body="&lt;p&gt;As you pointed out the typical control loop for a quadrotor is a nested one, with a position controller and a orientation controller (I prefer to use orientation instead of attitude to avoid confusion with altitude which happens more often than not). If you want to find some literature the set up you describe is often referred as P-VTOL , for Planar Vertical Take-Off and Landing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this case &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;is the position controller the one that converts my desired position,velocity, and acceleration into a roll/pitch command? &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;the answer is yes, the position controller generate the thrust magnitude and orientation to achieve good position tracking and the orientation controller is then responsible of tracking the orientation coming from the position controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That being said in the model you posted (first figure) you have as input pitch and roll commands, which is not possible in the planar case as in the plan there is only one angle. Usually for PVTOL system input are chosen as the total thrust ($F$) and the torque $\tau$  (as in your second figure) or as the two thrust $f_1,f_2$ produced by each propeller.&#xA;The relation between the two is simple and linear&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ \begin{bmatrix} F \\ \tau \end{bmatrix} = \begin{bmatrix} 1 &amp;amp; 1 \\ d &amp;amp; -d\end{bmatrix} \begin{bmatrix}f_1 \\ f_2 \end{bmatrix}$$&#xA;Where $d$ is the distance between the propeller and the center of mass, and is assumed the same for all propellers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also note that from your second pictures it seems that you want to control at the same time 2 positions (y,z) and the orientation. This is impossible as the PVTOL is underactuated and only has 2 control inputs, you can either control the 2 positions but not the orientation or 1 poisiton and 1 orientation (usually z and $\phi$). The typical approach for near-hovering flight and non aggressive maneuvers is to give desired trajectory for the 2 position.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;how do I create a position controller? &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;To create a controller you need to consider your system model, ie the mapping between your control input and your state. The trick for quadrotor is that the  total  thrust is exerted along a fixed direction in the body frame, so to change the orientation of the thrust you need to change the orientation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here I will sketch the basic rationals behind the position controller.&#xA;Consider that you have an error in position along both axes $e_z$ and $e_y$ to make it disappear you need to move your platform in the direction defined by the vector $\begin{bmatrix} e_y \\ e_z \end{bmatrix}$, this gives you the desired orientation of your total thrust vector, ie z-axis of the PVTOL, that needs to be fed to the orientation controller which will compute $\tau$. The magnitude of the total thrust is usually regulated via PD on the errors, this directly defines $F$.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2017-09-28T17:09:35.443" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14335" PostTypeId="2" ParentId="14242" CreationDate="2017-09-28T17:33:35.930" Score="0" Body="&lt;p&gt;In the first drawing the resulting D-H would results in the last line of you r D-H table to contain both $\theta_4$ and $d_1$ as parameters, provided you choose the frame in a proper way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second drawing solves your issue, at the coast of adding and extra frame, but makes it clearer from a parameters points of view. Although as noted @aniket-sharma the frame you draw are not direct which can lead to confusion/errors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general  the D-H parametrization of an manipulator is not unique ! Because textbooks are listing to sets of rules, omitting to present the others.&#xA;In general an open question while doing a D-H parametrization is the choice of orientation and location of both the first (base) and last (end-effector) frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For clarity they can be chose in a  way that is not minimizing the total number of frames. Think for example as a manipulator mounted on a mobile base, for clarity some people consider as base frame a frame aligned with the one of the mobile center of mass, and then fix the first frame based on D-H convention.&#xA;As for the location of the frame, for a rotational joint the origin should be located on the axis of rotation and for a prismatic joint on the direction of translation. For design where those two lines do not intersect in the 3D space or when they coinciding the location of the origin is a matter of convenience (and can be optimized for readability/simplicity or for computational efficiency).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The latter being the one at hand here, where you can have a compact form as first proposed or an easier to understand as the second proposed. &lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2017-09-28T17:33:35.930" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14336" PostTypeId="2" ParentId="7456" CreationDate="2017-09-28T17:59:29.787" Score="4" Body="&lt;p&gt;You are tackling two non trivial problem at the same  time&#xA;1. Inverse kinematics of an overactuated manipulator&#xA;2. Obstacle avoidance using the null space&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By definition of the null-space projection the solution you want will only be able to avoid obstacles which are not on the desired Cartesian trajectory to be followed during the task. Think about sliding an object on a table, and the only thing you can do is moving your elbow from up to down, this is the null space motion. If you break the contact with the table it means that you motion went outside of the null space. &#xA;You will realize that you can not avoid much obstacles because our shoulder and wrist rotation limits are quite constrained, typical anthropomorphic arms are a bit better in this respect. But overall  they can not avoid much that way, it is usually preferred to project in the null space additional task like manipulability optimization or joint limit avoidance, look at DeLuca from Roma.&#xA;If you want to avoid any obstacle while manipulating, this is a path-planning question where many approach exists, both online and offline based on their computational costs and their local or global range, you can look at Haddadin collision avoidance works.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That being said if you are a total newbie I encourage you to start by a 2D example, like a 4 revolute joints planar manipulators. This will get you familiar with the concepts at hand but for a simpler problem.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2017-09-28T17:59:29.787" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14337" PostTypeId="2" ParentId="12856" CreationDate="2017-09-28T18:17:54.960" Score="2" Body="&lt;p&gt;From now, I will solely answer your second question about forward kinematics, which is usually easier to solve than inverse kinematics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First you should sketch your robot in a plan using textbook representations for revolute and prismatic joints, this will make it clearer for you and the others. I needed to look at the picture to see that the 4 rotations are not along parallel axis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are two approaches based on your degree of confidence;&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;you consider yourself at ease and you derive it from the position of the base by propagating in plans, this easily doable here are 3 joints remain in the same plan thus you only need to compute position in the plan, plus you don't have spherical joint or other complex mechanism&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;you fell less at ease and you use  a systematic way, for example one of Denawit-Hartemberg parametrization. This option is well documented in any textbook or in DeLuca's slides, freely available online. This way is systematic, and less error-prone.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Both methods boil down to the use of transformation matrices so are pretty efficient to implement nowadays.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An hint about your inverse kinematics you have 4 degrees of freedom and want to find the inverse kinematic of a 3D position, there is potentially an infinite number of solution for such a problem.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastEditorUserId="18235" LastEditDate="2017-09-28T19:57:34.213" LastActivityDate="2017-09-28T19:57:34.213" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14338" PostTypeId="2" ParentId="14327" CreationDate="2017-09-28T19:28:52.740" Score="0" Body="&lt;p&gt;Typically arduino can not directly be plugged to an actuator without a motor control board in between. A motor control board is just a power stage allowing higher voltage and current than the ouptut one provided by the arduino. Typically those board are controlled with PWM signals that can be easily generated from arduino.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to get a better answer as for the actuator you should provide a estimated of the torque needed, the desired reaction time which can of breaking system you plan to use and where you plan to break (on the wheel outside? at the crank set?)&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2017-09-28T19:28:52.740" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14339" PostTypeId="2" ParentId="11851" CreationDate="2017-09-29T00:16:48.617" Score="1" Body="&lt;p&gt;If an accelerometer is mounted along the pole axis of a pole-cart system with its axes oriented tangential and normal to the pole rotation, the components of acceleration can be found using rigid body kinematics to yield the following:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Tangential: $S_x = \ddot{X} cos(\theta)-\alpha d-g  sin(\theta)$,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Normal: $S_y = -\ddot{X} sin(\theta)-\omega^2 d-g  cos(\theta)$,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;$d$ is the distance from the sensor to the axis of rotation&lt;/li&gt;&#xA;&lt;li&gt;$\ddot{X}$ is the horizontal acceleration of the cart&lt;/li&gt;&#xA;&lt;li&gt;$\omega$ is the angular velocity of the pole, and&lt;/li&gt;&#xA;&lt;li&gt;$\alpha$ is the angular acceleration of the pole&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/7AkkL.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7AkkL.png&quot; alt=&quot;Cart-Pole System with accelerometer&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This assumes the pole can be treated as a rigid body and that the cart is limited to motion in the horizontal plane.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Estimating the pole angle, $\theta$, using the measured acceleration components will produce an error if any of $\ddot{X},\omega,\alpha$ are non-zero. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\theta \approx tan^{-1}\left ( \frac{S_x}{S_y} \right ) = sin^{-1}\left ( \frac{S_x}{\sqrt{S_x^2+S_y^2}} \right ) = cos^{-1}\left ( \frac{S_y}{\sqrt{S_x^2+S_y^2}} \right )$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Note that the equation in the OP is incorrect.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Whether this approximation will work with your system really depends on the parameters and the expected magnitudes of the angular velocity, angular acceleration, and horizontal acceleration. Compensating would likely require some additional sensors - e.g., a second accelerometer on the cart and a gyrometer on the pole. &lt;/p&gt;&#xA;" OwnerUserId="1360" LastActivityDate="2017-09-29T00:16:48.617" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14340" PostTypeId="1" AcceptedAnswerId="14341" CreationDate="2017-09-29T02:15:05.633" Score="0" ViewCount="70" Body="&lt;p&gt;I'm looking at this &lt;a href=&quot;http://hdrobotic.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Dexter robot&lt;/a&gt; that uses FPGA controllers to get really accurate position and force sensing on a cheap ($2K) arm. They say that the speed of the processor lets them get this accurate sensing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a couple of questions:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(1) What does processor speed have to with force sensing? Normal clock speeds seem pretty fast.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(2) Why do they use stepper motors if they want the robot to be cheap? Everyone I've talked to has said that for small hobby robots, Dynamixel servos are by far the best choice.&lt;/p&gt;&#xA;" OwnerUserId="17557" LastActivityDate="2017-09-29T15:00:45.660" Title="FPGAs and stepper motors for precision control" Tags="&lt;dynamics&gt;&lt;force-sensor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14341" PostTypeId="2" ParentId="14340" CreationDate="2017-09-29T06:36:54.683" Score="1" Body="&lt;p&gt;This project is very nice and I was totally obvious to it thanks for spotting it !&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general the difference between FPGAs and classical ASIC integrated circuit is that FPGAs can be re-programmed by the user to emulate certain circuitry. For some task FPGAs are faster than generic processor because of their parallel nature.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;(1) What does processor speed have to with force sensing? &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Force/torque sensors are rather expensive and the measurements are bias prone, temperature dependent and other cool stuff like that (this is changing thanks to optical force sensing but I didn't see a real life application running yet). So in robotics application they are usually not preferred and motor models based on the position,  its derivatives and current are used (from Dynamixels to kuka LBR4). &#xA;In the case of Dexter technical info &lt;a href=&quot;https://static1.squarespace.com/static/55f1275ee4b0c65e2113baa5/t/563d17e3e4b0b6d09db8cb27/1446844393614/FAB?format=1500w&quot; rel=&quot;nofollow noreferrer&quot;&gt;see here&lt;/a&gt; it is what they call Real Time Physics Engine, were they must have fairly complex model (dry friction is not easy to model) of the full robot. The faster you run your model and measurements the faster you can see discrepancies an update the model parameters to have a model matching the measurements. Also if you filter your measurements, if you do it very fast (like FPGA allows) you can reduce considerably the induced delay. Lastly as FPGA call for parallelizing you can run all your sub-model in parallel thus increasing the speed, especially if your model consists of neural network(s). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This gives you a fast model, running 500 faster than typical build (500kHz vs 1kHz, according to their sampling rate), which means that the model can adapt way faster and thus product a better force estimate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note also that their advertise their FPGA processor to be well suited for &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;vision, neural networks, and digital signal processing&#xA;  &lt;a href=&quot;http://hdrobotic.com/dexter/&quot; rel=&quot;nofollow noreferrer&quot;&gt;their website&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Which are typically applications their parallelization can be employed and speeds up the outcome.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;(2) Why do they use stepper motors if they want the robot to be cheap? Everyone I've talked to has said that for small hobby robots, Dynamixel servos are by far the best choice.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I don't think that Dynamixel are Cheap their references with torque measurements are fairly expensive (around $300 each).&#xA;From what I gathered they are using 3D printed harmonic drives, in robots like the KUKA LBR4 the harmonic drives are manufactured and this is rather expensive, so using a 3D printed counterpart saves a lot of money.&#xA;Last possibility why they use steppers is for the high position precision of the motors, this is an educated guess from going through there website quickly. But in order to have precise translational motion at one meter from the base you need to have even more precise rotational motion which will be amplified by the link length.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the drive, and design, I am really interested to see how the robot will behave with ware, will so model be good enough to compensate for it ? The 3D printing parts and the belts are going to have some evolution while being used. Typically Nao robots and Baxter robots are also cheap robots and you can literally hear the ware for intensively used robots.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastEditorUserId="18235" LastEditDate="2017-09-29T15:00:45.660" LastActivityDate="2017-09-29T15:00:45.660" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="14342" PostTypeId="2" ParentId="14176" CreationDate="2017-09-29T06:58:16.277" Score="1" Body="&lt;p&gt;The quick answer is yes. &lt;a href=&quot;http://sdk.rethinkrobotics.com/wiki/API_Reference&quot; rel=&quot;nofollow noreferrer&quot;&gt;baxter API&lt;/a&gt;  do a search in the page for &quot;Joint Trajectory Action&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You need to have all baxter related software installed.&#xA;Also from the first version of the toolbox the use of rosjava was not well documented and especially the use of custom msg/service/ was cumbersome. I hope that they fixed it by now but didn't have the time to look back.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2017-09-29T06:58:16.277" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14344" PostTypeId="2" ParentId="14173" CreationDate="2017-09-29T08:14:56.317" Score="0" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;What else might I miss here?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;As pointed out by @Ben, a clear schematics of your robot to make it easily understandable from others.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Maybe it's me missing something but IMU are typically accelerometers and gyroscopes. Meaning that the raw outputs are linear accelerations and rotational velocities. Doing some projection of the gravity vector to retrieve orientation is prone to singularities.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Your problem seems to me relatively close to some pan-tilt control with 2 IMUs.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;your intended use is very likely to prove problematic as the nozzel (or end of your arm) will not have the same orientation with respect to the base plan as the altitude evolves&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Units quaternions represent a unit vector in the base they are expressed in, associated with a rotation around that vector. So you can not use the same 'simple' math than for rotation matrix, meaning that in order to combine rotation you can not simply multiply the quaternion but need a bit more cumbersome operation &lt;a href=&quot;https://www.astro.rug.nl/software/kapteyn/_downloads/attitude.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;see&lt;/a&gt;. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I would suggest you to use transformation matrices composed of rotation matrices and translation vectors. This will prove easy to derivate from your clean model, and useful in the long run when you are going to go toward inverse kinematics of you robots. Note that the change from quaternion to rotation matrix is well documented.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;edit :&lt;/strong&gt; re work the explanation of the quaternion math&lt;/p&gt;&#xA;" OwnerUserId="18235" LastEditorUserId="18235" LastEditDate="2017-09-29T09:51:01.393" LastActivityDate="2017-09-29T09:51:01.393" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14353" PostTypeId="1" CreationDate="2017-10-01T15:50:03.470" Score="1" ViewCount="48" Body="&lt;p&gt;At my work we use the BeagleBone Blue boards to control somewhat small AUVs. &#xA;The board is placed in underwater tubes along with batteries, ESCs for thrusters and all other electronics.&#xA;We use the in-build magnometer and gyro to calculate the heading for navigating under water.&#xA;Testing the beagleboard alone on the desk shows that the heading is fairly stable and correct within reasonable limits. &#xA;The problem arises when we do offshore tests with the AUV. Here the heading will start to drift. A controller has been configured for the AUV to follow a reference heading for X amount of time. From the data we can see that the AUV actually do keep a steady heading, but from inspecting the vehicle IRL it becomes obvious that something is wrong as the vehicle will follow an arc instead of a straight line. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So to the AUV actually thinks that it keeps the same heading and actually does this for the first few meters and then starts to turn following an arc while still thinking it is on the same heading. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that we introduce quit some noise on the sensors by having the batteries, ESCs and wiring going around the board, but could this really be the course of this? Can anyone of you think of other possibilities? And can anyone suggest a solution to this (other than moving power units and wires to another shielded tube - this is not an option at this moment)?&lt;/p&gt;&#xA;" OwnerUserId="18257" LastActivityDate="2017-10-01T15:50:03.470" Title="Heading drift on Beaglebone Blue on small AUV due to power cables (I think)" Tags="&lt;beagle-bone&gt;&lt;noise&gt;&lt;auv&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14354" PostTypeId="2" ParentId="13899" CreationDate="2017-10-01T16:07:21.183" Score="0" Body="&lt;p&gt;As it seams from the comments you have some redundant mechanism is you want to track a 3D position, if you also want to track an orientation you are down to non redundant mechanism.&#xA;Which means that in the first case you might have several IK solution that satisfy your desired position and you can then pick one not violating you actuator constrains. In the second case if actuators constrains are violated by the IK it means you are out of your workspace.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is a typical approach is to compute the workspace of your arm in Cartesian space, then when you have a desired position (with or without orientation) You can check that this point is in your workspace and if not find the closest point in the workspace.&#xA;Then for this point there is a IK solution not violating your actuation limits. &#xA;Once you get a solution from the IK you should also check for self-collision, or include that in your workspace description.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2017-10-01T16:07:21.183" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14355" PostTypeId="2" ParentId="11071" CreationDate="2017-10-01T16:24:27.247" Score="1" Body="&lt;p&gt;What happens with an elastic actuator is that you have an elastic part between your motor output shaft and the link. This means that you can store energy in this elastic part during the motion, and release it at later stage in the motion. &#xA;This is cool for intrinsic mechanical compliance, explosive tasks like hammering or throwing, where a classical joint would be destroyed or not able to provide as much end link velocity. &#xA;This comes with the drawback that the control is way more complicated, you have to model the spring effects, when close to human you have to ensure safety as the spring can unload stored energy and hit human way faster than regular joint and last you don't have a very precise control of you end-effector because of all the elastic effects at play.&#xA;One way to overcome some of those troubles is to use Variable stiffness Actuators (VSA) that allow to control the stiffness and shift from almost rigid joint to very compliant joint, at the cost of mechanical complexity and additional motor to actuate the stiffness mechanism.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand you have control techniques to implement software compliance in robot manipulator. What you get is compliance by mean of software, so usually external force measurement is required (F/T sensors, &quot;torque&quot; sensor in the joint). You don't get any of the energy storage/ velocity amplification. &#xA;Those techniques are really mature (look for admittance/impedance filters, energy tank based control)  and relatively easy to implement and more importantly easy to tune for your usage. On last benefit of those methods is that you can usually chose different compliance behavior for all axes of you end-effector, eg allowing stiff rotations and stiff vertical motion while allowing very compliant horizontal motion. This is usually great for human interaction as it helps for learning by demonstration and also for assisstive robots as you can chose &quot;forbidden&quot; motion to the user.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastEditorUserId="18235" LastEditDate="2017-10-04T06:16:32.940" LastActivityDate="2017-10-04T06:16:32.940" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14356" PostTypeId="1" CreationDate="2017-10-01T20:10:45.217" Score="1" ViewCount="93" Body="&lt;p&gt;Let's say, for example, I am controlling a motor's speed by adjusting how much power I feed into it. The motor shaft is connected to some physical device with varying amounts of torque, so in order to keep the speed the same I implement a PID control loop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's say that the base power I am sending the motor is X.&#xA;The PID outputs an adjustment value, say Y.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Should I add Y to X for every loop through the PID? Or, should I add only changes in Y to X? For example, if Y changes from 5 to 10, then add 5 to X.&lt;/p&gt;&#xA;" OwnerUserId="16620" LastActivityDate="2017-10-02T11:48:02.990" Title="Simple PID Loop Question" Tags="&lt;pid&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14357" PostTypeId="1" AcceptedAnswerId="14359" CreationDate="2017-10-01T21:36:38.930" Score="3" ViewCount="97" Body="&lt;p&gt;I build a self-balancing robot, at least that what i should have been.&#xA;now i have tried implementing a complementary filter which combines gyro and accelerometer data, but the problem is that the motor and the IMU (MPU 6050) are on the same board and max. an inch away from each other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, if i get it right, the vibrations from the Motor do influence the accelerometer way to much, hence i am not getting any applicable result when the robot is set to the ground.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, what techniques can i apply to get the absolute orientation?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[EDIT]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This, right now, is my code with the complementary filter.&#xA;My problem is, that even when the motor is off, the yAngle value varies very much from the yAcc value, although the yAcc value is correct.&#xA;Is there any error in my code causing the gyro drift to break the whole filter?&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;// 100.0 is dt, 14.375 the gyro-specific resolution&#xA;float gyroY = (float)(readY()) / 14.375 / (100.0);&#xA;int z = getAccZ();&#xA;int x = getAccX();&#xA;float yAcc = atan((float)z / (float) x) / PI * 180;&#xA;yAngle = 0.98 * (yAngle + gyroY) + (0.02 * yAcc);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="18258" LastEditorUserId="18258" LastEditDate="2017-10-02T23:11:02.760" LastActivityDate="2017-10-02T23:11:02.760" Title="Self balancing roboter IMU issue" Tags="&lt;sensors&gt;&lt;imu&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14358" PostTypeId="2" ParentId="14356" CreationDate="2017-10-01T21:44:53.190" Score="-1" Body="&lt;p&gt;I recently implemented a PID loop for speed control of a treadmill. I used a position encoder to find the speed of the treadmill and used it to find error from a desired speed for the PID controller. The output of the PID controller, called the control signal, is the PWM for the motor. You should see your motors' documentation for speed commands and then serially communicate those to the motor. These speed commands can go from 0% to 100% PWM. 100% would mean that your motor is running at the highest rated voltage meaning highest rated rpm. 50% would mean it is running at half the rated voltage and resulting into half the rated maximum rpm respectively.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You have to map the speed (m/s) into PWM values. You can do this as follows:&#xA;Maximum speed = 100% PWM (Must have a value that the motor interprets as full PWM, see motor documentation)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;then,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1 = (100% PWM) / Maximum Speed)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and your final PID output should be like:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PID_OUT = (100 % PWM / Maximum Speed)*(Error * Kp + Sum_of_Erros * Ki * Loop_Time + Kd*(Error - Last_Error) / Loop_Time)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lastly, I am just a noobie. Wait for experienced people for some detailed answers :) .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope it helps.&lt;/p&gt;&#xA;" OwnerUserId="17554" LastActivityDate="2017-10-01T21:44:53.190" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14359" PostTypeId="2" ParentId="14357" CreationDate="2017-10-02T00:29:35.563" Score="1" Body="&lt;p&gt;What sort of values are you getting out of your accelerometer? The raw values you get from an accelerometer will not translate into any form of orientation. &lt;a href=&quot;http://www.instructables.com/id/Accelerometer-Gyro-Tutorial/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here&lt;/a&gt; is some good reading for how to get orientation out of such a mems device.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If noise from your motors really is the issue, I would recommend implementing a &lt;a href=&quot;https://en.wikipedia.org/wiki/Finite_impulse_response&quot; rel=&quot;nofollow noreferrer&quot;&gt;Finite Impulse Response (FIR) filter&lt;/a&gt;. For example a moving average filter might help you out. I recommend keeping the order of the filter low however, as (depending on your Samples per Second) the higher the order, the slower the response time of the data will be. This could introduce a level of error you will have to be careful of when trying to make your robot balance.&lt;/p&gt;&#xA;" OwnerUserId="10726" LastActivityDate="2017-10-02T00:29:35.563" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14360" PostTypeId="1" CreationDate="2017-10-02T09:09:08.237" Score="1" ViewCount="605" Body="&lt;p&gt;My system consists of the following: A PC with a single ethernet port and other USB ports, a robot mobile base, a SICK LMS lidar with ethernet cable, a Velodyne sensor with Ethernet cable. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The robot is connected via serial to usb converter and works fine. The lidar can also be connected to the ethernet and works fine. Now that we have acquired a velodyne 3d Lidar, I am confused as to how to connect this to the computer as there is only one ethernet port available. Should I use a router? Has anyone tried to connect multiple sensors like this. I would be thankful if you can provide details. &lt;/p&gt;&#xA;" OwnerUserId="18260" LastEditorUserId="37" LastEditDate="2017-10-02T16:21:29.093" LastActivityDate="2017-10-02T16:21:29.093" Title="Interfacing multiple ethernet sensors on ROS system (single ethernet port)" Tags="&lt;ros&gt;&lt;lidar&gt;" AnswerCount="0" CommentCount="2" ClosedDate="2017-10-02T16:29:48.927" ContentLicense="CC BY-SA 3.0" />
  <row Id="14361" PostTypeId="2" ParentId="14084" CreationDate="2017-10-02T10:22:46.707" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;ol&gt;&#xA;  &lt;li&gt;How often should I read samples from a sensor (read the register over i2c) with relation to the frequency I configure the sensor to?&lt;/li&gt;&#xA;  &lt;/ol&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If you sensor provide data at a certain rate you should not read it at a faster rate because it's note bringing any new info to you just repeating an old/depreciated info.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;ol start=&quot;2&quot;&gt;&#xA;  &lt;li&gt;How should hardware filters such as a low pass filter on the accelerometer be applied here?&lt;/li&gt;&#xA;  &lt;/ol&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You should apply you low pass filter on the raw data and feed the filtered data to the fusion algorithm, note that if you filter too much you will get time delays. If you don't explicitly account for them in the fusion and control, you will get poor results&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;ol start=&quot;3&quot;&gt;&#xA;  &lt;li&gt;How quickly (frequency wise) should I use that data during sensor fusion (such as a complementary filter)? Should the fusion timing be based on when a new sample is ready or do I run the fusion faster or slower than I sample? &lt;/li&gt;&#xA;  &lt;/ol&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You should run you fusion algorithm every time you get a new measurements, whatever it is, you can tune the frequency of every sensor to allow your fusion algorithm to finish by the time it gets a new measurements.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;ol start=&quot;4&quot;&gt;&#xA;  &lt;li&gt;How do sensors sampling at different speeds affect fusion? For example, my magnetometer has a max data rate of 100hz, but currently, my gyroscope is running at 200hz&lt;/li&gt;&#xA;  &lt;/ol&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It's not an issue a fusion algorithm takes several quantities as inputs with also their variance (ie how trustworthy is the measurements) to derivate a full state estimate. For example if you have a very precise position system but low frequency and fast accelerometers, the position model will be such that the accelerometers are integrated between the measurements of the position sensor, but once you get a next position the measurement &quot;wins&quot; against the estimate.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;ol start=&quot;5&quot;&gt;&#xA;  &lt;li&gt;Should the PID controller run at a different rate from the fusion?&lt;/li&gt;&#xA;  &lt;/ol&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Your control should run as fast a possible but not faster than the fusion because you don't have information update about your current state, typically they run at the same frequency and both as fast as possible based on your hardware power.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2017-10-02T10:22:46.707" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14362" PostTypeId="2" ParentId="14356" CreationDate="2017-10-02T11:48:02.990" Score="1" Body="&lt;p&gt;Using the same terms as your question, the PID contoller should provide a new &lt;em&gt;X,&lt;/em&gt; not an incremental value that gets summed to the previous one.  The input to the PID controller should be the difference between desired speed and measured speed in the example you describe.   We call this velocity control, compared with the more typical position control in which the difference between desired position and actual position becomes the input to the PID loop.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2017-10-02T11:48:02.990" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14364" PostTypeId="2" ParentId="9320" CreationDate="2017-10-02T16:01:26.400" Score="0" Body="&lt;p&gt;One thing you should consider is that the quadrotor is underactuated and has a strong dynamical coupling between translational and rotational dynamics. Hence not all arbitrary trajectories are feasible. You can think about an equivalent problem parallel parking, although the 2 problems are not strictly equivalent.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based on how your handle that in you planner you might run in the problem described. &lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2017-10-02T16:01:26.400" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14365" PostTypeId="1" AcceptedAnswerId="14366" CreationDate="2017-10-02T17:21:12.860" Score="0" ViewCount="115" Body="&lt;p&gt;How to shorten these values?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/W4ZvF.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/W4ZvF.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They are the result of a matrix like this.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/rqwMi.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rqwMi.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I individually run sin(theta1) and such functions, it would give me the correct value as a zero or a one (the angles I am working with are 0 or 90 degrees)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In some cases they may go on to be values like 1.574.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know there is a round off function in MATLAB, but then I would have to add that function to every element individually. Is there any easier way to achieve this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS.: ST stands for sin(Theta) SA for Sin(Alpha) CA for cos(Alpha) and so on..&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PPS. : I tried eval function, not working at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit 1:&#xA;The code I am using is as follows:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;init_lib;&#xA;clc;&#xA;load_robot;&#xA;&#xA;syms q1 q2 q3 q4 q5;&#xA;&#xA;%DH Parameters for the robot:&#xA;robot.DH.theta= '[pi/2 pi/2 0 q(4) q(5)]';&#xA;robot.DH.d='[q(1) q(2) q(3) 0.1 0.020]';&#xA;robot.DH.a='[0 0 0 0 0]';&#xA;robot.DH.alpha= '[pi/2 pi/2 0 pi/2 0]';&#xA;&#xA;% We input the joint parameters:&#xA;q = [q1 q2 q3 q4 q5];&#xA;&#xA;%Storing the evaulated values of 'q'&#xA;Theta=eval(robot.DH.theta);&#xA;d=eval(robot.DH.d);&#xA;a=eval(robot.DH.a);&#xA;alpha=eval(robot.DH.alpha);&#xA;&#xA;A01=dh(Theta(1), d(1), a(1), alpha(1));&#xA;A12=dh(Theta(2), d(2), a(2), alpha(2));&#xA;A23=dh(Theta(3), d(3), a(3), alpha(3));&#xA;A34=dh(Theta(4), d(4), a(4), alpha(4));&#xA;A45=dh(Theta(5), d(5), a(5), alpha(5));&#xA;A05 = A01*A12*A23*A34*A45;&#xA;disp(A05);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Where, dh is a function that comes from a predefined library. It basically substitutes the four values into a generalized form of the matrix I posted as the second image.&lt;/p&gt;&#xA;" OwnerUserId="18222" LastEditorUserId="18222" LastEditDate="2017-10-06T14:20:12.473" LastActivityDate="2017-11-07T11:32:17.183" Title="How to round of these values to 0" Tags="&lt;matlab&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14366" PostTypeId="2" ParentId="14365" CreationDate="2017-10-02T18:14:19.977" Score="2" Body="&lt;p&gt;As you are using the symbolic toolbox, you should declare your angles as symbolic so that the cosine of ${\pi/2}$ is  zero instead of numerically estimated to something close to zero.&#xA;Also so you can convert your expression to a function via the matlabFunction() native function from matlab.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively on matlab you can use round on a matrix and it's rounding every single entry individually. &lt;/p&gt;&#xA;" OwnerUserId="18235" LastEditorUserId="18235" LastEditDate="2017-11-07T11:32:17.183" LastActivityDate="2017-11-07T11:32:17.183" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14367" PostTypeId="2" ParentId="14365" CreationDate="2017-10-03T03:34:23.077" Score="0" Body="&lt;p&gt;The best solution that comes to my mind in vpa(). It stands for &lt;a href=&quot;https://nl.mathworks.com/help/symbolic/vpa.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;variable precision arithmetic&lt;/a&gt;. If you have a symbolic expression X (I believe a matrix with symbolic entries should work as well), then vpa(X,d) will return all the constants within X as a number with at most d significant digits.&lt;/p&gt;&#xA;" OwnerUserId="1487" LastActivityDate="2017-10-03T03:34:23.077" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14369" PostTypeId="1" CreationDate="2017-10-03T06:09:53.207" Score="0" ViewCount="170" Body="&lt;p&gt;Really confused on how to do this, a general guideline for how to do this would be very much appreciated.&lt;/p&gt;&#xA;" OwnerUserId="18270" LastActivityDate="2017-10-04T03:26:54.763" Title="How do I compute the Jacobian of a two-link manipulator arm?" Tags="&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2017-10-05T15:37:26.600" ContentLicense="CC BY-SA 3.0" />
  <row Id="14370" PostTypeId="1" CreationDate="2017-10-03T13:10:30.037" Score="0" ViewCount="48" Body="&lt;p&gt;Can anyone please tell me if the sensor output is 0 to +-10V, and I connect the sensor to a differential amplifier to get an output of 0 to 3.3V then what is the input voltage to the differential amplifier from -10v to +10v or (0 to 10 v or -10 to 0v)?&lt;/p&gt;&#xA;&lt;p&gt;If I use -10 to 10 volts then the differential amplifier adds both the input voltages and gives +20V and with gain, we can adjust it to 0 to 3.3. But, if I use 0 to 10v or 0 to -10V then I get half voltage with the above set gain.&lt;/p&gt;&#xA;&lt;p&gt;Can anyone please explain?&lt;br&gt;&#xA;Thank you!&lt;/p&gt;&#xA;" OwnerUserId="13774" LastEditorUserId="19515" LastEditDate="2020-07-25T00:36:21.967" LastActivityDate="2020-07-25T00:36:21.967" Title="How to set the output in a differential amplifier?" Tags="&lt;sensors&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14372" PostTypeId="2" ParentId="14213" CreationDate="2017-10-03T16:23:27.690" Score="0" Body="&lt;p&gt;One solution you might want to explore is the approach of the &lt;a href=&quot;https://click.intel.com/intelr-euclidtm-development-kit.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Intel Euclide sensor&lt;/a&gt;&#xA;The form factor is almost matching your specs, and it also contain a set of localization algorithms that run on-board. &#xA;The clam from the manufacturer is that the image are more stable in IR that with visible light, hence the solution consists in illuminating the scene with IR and record the image, this info is then matched with the one of visible camera.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2017-10-03T16:23:27.690" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14374" PostTypeId="2" ParentId="14369" CreationDate="2017-10-04T03:21:26.740" Score="2" Body="&lt;p&gt;Compute the forward kinematics, then take the partial derivative of each $x$ term with respect to each of the joint angles. &lt;/p&gt;&#xA;" OwnerUserId="11125" LastEditorUserId="11125" LastEditDate="2017-10-04T03:26:54.763" LastActivityDate="2017-10-04T03:26:54.763" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14376" PostTypeId="1" CreationDate="2017-10-04T20:26:18.573" Score="1" ViewCount="103" Body="&lt;p&gt;I have been working on a code where an A.R Drone 2.0 will detect color and put a red dot in the middle of the image. I am using streaming for the drone. The goal is for the drone to detect a white gutter and fly straight over it from one point to the other. Essentially following a line. I noticed when I changed the BGR to 0, 0, 255, I get the entire gutter to be distinguished but it detects white spots as well. Is there to isolate my detection just to see the gutter. Maybe using shapes, once the gutter is detected, put a bounding box. And my finally question is how do I tell my drone to follow the red dot or maybe drawing a line. I looked at &lt;a href=&quot;https://github.com/venthur/python-ardrone&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;python-AR&lt;/code&gt;&lt;/a&gt; drone libraries but don't know how to apply it.This is my code.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;import numpy as np    &#xA;import cv2        &#xA;&#xA;&#xA;# open the camera    &#xA;cap = cv2.VideoCapture('tcp://192.168.1.1:5555')&#xA;&#xA;&#xA;def nothing(x):    &#xA;    pass&#xA;&#xA;cv2.namedWindow('result')&#xA;&#xA;&#xA;# Starting with 100's to prevent error while masking    &#xA;h,s,v = 100,100,100            &#xA;# Creating track bar    &#xA;cv2.createTrackbar('h', 'result',0,179,nothing)    &#xA;cv2.createTrackbar('s', 'result',0,255,nothing)    &#xA;cv2.createTrackbar('v', 'result',0,255,nothing)    &#xA;&#xA;while True:    &#xA;    #read the image from the camera    &#xA;    ret, frame = cap.read()            &#xA;    #You will need this later    &#xA;    frame = cv2.cvtColor(frame, 35)    &#xA;&#xA;    #converting to HSV&#xA;&#xA;    hsv = cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)                   &#xA;    # get info from track bar and appy to result    &#xA;    h = cv2.getTrackbarPos('h','result')    &#xA;    s = cv2.getTrackbarPos('s','result')    &#xA;    v = cv2.getTrackbarPos('v','result')&#xA;&#xA;    # Normal masking algorithm    &#xA;    lower_blue = np.array([h,s,v])    &#xA;    upper_blue = np.array([180,255,255])        &#xA;&#xA;    mask = cv2.inRange(hsv,lower_blue, upper_blue)            &#xA;    result = cv2.bitwise_and(frame,frame,mask = mask)            &#xA;    cv2.imshow('result',result)            &#xA;    #find center    &#xA;    cnts=cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)[-2]            &#xA;    center=None        &#xA;&#xA;    if len(cnts)&amp;gt;0:    &#xA;        c=max(cnts, key=cv2.contourArea)    &#xA;        ((x,y),radius)=cv2.minEnclosingCircle(c)    &#xA;        M=cv2.moments(c)    &#xA;        center=(int(M[&quot;m10&quot;] / M[&quot;m00&quot;]), int(M[&quot;m01&quot;] / M[&quot;m00&quot;]))            &#xA;        if radius&amp;gt;10:    &#xA;            #cv2.circle(frame, (int(x),int(y)), int(radius), 2)    &#xA;            cv2.circle(frame, center,5,(0,0,255),-1)&#xA;&#xA;    # color detection limits    &#xA;    lB = 5    &#xA;    lG = 50    &#xA;    lR = 50    &#xA;    hB = 15    &#xA;    hG = 255    &#xA;    hR = 255    &#xA;    lowerLimits = np.array([lB, lG, lR])    &#xA;    upperLimits = np.array([hB, hG, hR])            &#xA;    # Our operations on the frame come here    &#xA;    thresholded = cv2.inRange(frame, lowerLimits, upperLimits)    &#xA;    outimage = cv2.bitwise_and(frame, frame, mask = thresholded)                    &#xA;    cv2.imshow('original', frame)            &#xA;    # Display the resulting frame    &#xA;    cv2.imshow('processed',outimage)&#xA;&#xA;&#xA;    # Quit the program when Q is pressed    &#xA;    if cv2.waitKey(1) &amp;amp; 0xFF == ord('q'):    &#xA;         break       &#xA;&#xA;# When everything done, release the capture    &#xA;print 'closing program'    &#xA;cap.release()&#xA;cv2.destroyAllWindows()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="18287" LastActivityDate="2017-10-04T20:26:18.573" Title="Drone Feedback: Object Detection / Color Detection" Tags="&lt;quadcopter&gt;&lt;python&gt;&lt;opencv&gt;" AnswerCount="0" CommentCount="1" ClosedDate="2017-10-05T10:41:48.070" ContentLicense="CC BY-SA 3.0" />
  <row Id="14377" PostTypeId="2" ParentId="14370" CreationDate="2017-10-04T20:28:13.340" Score="1" Body="&lt;p&gt;A differential amplifier amplifies the difference between the signals. If you had a differential amplifier that scales a ±10v differential signal to a 0 to 3.3v signal, it would expect that the maximum input would be a 20v difference between the terminals. That's why you need to apply a 20v signal to the input to get the output you want.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have a sensor that outputs from -10v to +10v then you would need to apply 10v to one side of your differential amplifier so that 0v from your sensor corresponds to 1.65v out, -10v is 0v and 10v is 3.3v&lt;/p&gt;&#xA;" OwnerUserId="7066" LastActivityDate="2017-10-04T20:28:13.340" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14378" PostTypeId="1" AcceptedAnswerId="14380" CreationDate="2017-10-05T10:42:13.823" Score="3" ViewCount="1008" Body="&lt;p&gt;For our Minor “Robotics and Vision” we need to use ROS to create a system that can navigate to and from a coffee machine. The available hardware consists of a robotic platform from &quot;Dr Robot&quot;, and a manipulator that uses actuators from Dynamixel. The system should use computer vision to navigate the robotic platform and manipulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Besides the robotic platform and manipulator, we have a limited budget of 500 euros to get all the other necessary hardware, including the processing device(s).&#xA;This/these devices need to run the ROS core and nodes that are responsible for:&#xA;-    Analyzing environment with computer vision;&#xA;-    Controlling the engines;&#xA;-    Controlling the manipulator;&#xA;-    Interfacing with a database.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After research we found that we could use a PC, like an Intel NUC or a custom PC. Or we could use several Raspberry Pi’s to run separate nodes, and let them communicate within a network. We tried to find out how much computational power was necessary to fulfill our requirements, but after searching online for a while we could not find a fitting answer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Our question is if anyone knows how much computation power we need to fulfill our aforementioned requirements, or how we could find out (without spending the entire budget).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem for us is that we are using the V-model, which means that we design our entire system before implementing it, therefore we have to decide on what type of hardware we use for the system before we &quot;are allowed&quot; to write any software. This makes it impossible to test it before ordering the computing part. &lt;/p&gt;&#xA;" OwnerUserId="18294" LastEditorUserId="18294" LastEditDate="2017-10-05T13:46:29.143" LastActivityDate="2017-10-05T16:34:03.323" Title="Nuc, custom pc or raspberry pi?" Tags="&lt;mobile-robot&gt;&lt;ros&gt;&lt;raspberry-pi&gt;&lt;dynamixel&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14380" PostTypeId="2" ParentId="14378" CreationDate="2017-10-05T12:45:59.003" Score="3" Body="&lt;p&gt;Edit:&lt;br&gt;&#xA;With the new information in your post I would highly recommend going for more computing power than you think you need. It is always to have a little extra wriggle room than to be stuck with not enough.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Raspberry Pi's have the awesome advantage of the easily accesable GPIO. ROS is good but adds extra complexity over a single system. On the flip side, using multiple Raspberry Pi's allows you to develop and prove up each system individually.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatives to the Raspberry Pi are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.linksprite.com/linksprite-pcduino/&quot; rel=&quot;nofollow noreferrer&quot;&gt;pcDuino&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://beagleboard.org/blue&quot; rel=&quot;nofollow noreferrer&quot;&gt;BeagleBone Blue&lt;/a&gt; (Has 2x 32-bit PRUs. Comparison &lt;a href=&quot;https://www.arrow.com/en/research-and-events/videos/comparing-beaglebone-boards&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;https://www.allaboutcircuits.com/news/beaglebone-blue-robotics-applications-latest-single-board-computer/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.kickstarter.com/projects/onion/omega2-5-iot-computer-with-wi-fi-powered-by-linux&quot; rel=&quot;nofollow noreferrer&quot;&gt;Onion Omega2&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.cubietech.com/product-detail/cubieboard6/&quot; rel=&quot;nofollow noreferrer&quot;&gt;CubieBoard6&lt;/a&gt; or &lt;a href=&quot;http://www.cubietech.com/product-detail/cubieaio-a20-board/&quot; rel=&quot;nofollow noreferrer&quot;&gt;CubieAIO&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Think about solving the problem differently. I get the impression that you expect to get it working first time without having to re-engineer anything. Instead consider creating a few prototypes first before designing your final system. Similar to the iteration/spiral model &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your first prototype is going to be your proof of concept. I have a philosophy of using computers/processors/equipment that far exceeds my minimum requirements for the proof of concept. That way you can prove that each system works, without having the problem of needing just a little more of this or that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your case that would mean that I would start off with a full blown computer (probably something I had lying around spare). It could even mean that you prove up each section on separate hardware and combine it at a later stage. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then you can refine your design down until you have it running on the minimum hardware required. This will most likely require you to take measurements of the resources and processing power you use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So how does this all fit into your 500 euro limit? In most cases the requirement is that the final design costs 500 euros. How you get to that final design isn't counted. Even if it is, you can usually get decent second-hand hardware for practically nothing.&lt;/p&gt;&#xA;" OwnerUserId="14782" LastEditorUserId="14782" LastEditDate="2017-10-05T16:34:03.323" LastActivityDate="2017-10-05T16:34:03.323" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14381" PostTypeId="2" ParentId="14378" CreationDate="2017-10-05T13:52:19.880" Score="1" Body="&lt;p&gt;This largely depends on the environment and the sensors on your robot. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, are you required to only use computer vision for navigation? If not, I would recommend at least adding wheel encoders. The encoder can give you pose over time that drifts while vision can update your pose. You can also add a gyro for better heading, but you need to remove bias etc...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second, can you modify the environment? You can put marker in you environment for the computer vision algorithm. There are types of marker you can use to extract the robot pose. This would probably be your best option if you want to use a computer like raspberry pi. If you are going to try slam or something, you will probably need a better computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: The Jetson computers are a pretty good for computer but may just be out of your budget.&lt;/p&gt;&#xA;" OwnerUserId="15213" LastEditorUserId="15213" LastEditDate="2017-10-05T13:57:41.217" LastActivityDate="2017-10-05T13:57:41.217" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="14383" PostTypeId="1" CreationDate="2017-10-06T05:19:53.960" Score="1" ViewCount="489" Body="&lt;p&gt;I have successfully controlled an analog 360 degree servo using a slide potentiometer, with the pot sending a 1000ms signal at one end of the pot and 2000 ms at the other. This gives me nice and smooth rotation speed control all along the pot axis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I recently got hold of TowerPro MG90D servos, which would be ideal for the app I have in mind because of size and power, but I do not seem to find the right signal to send. If I run the same code, I get the servo turning 100% clockwise first, then in the middle a jittery very small step movement, then at some point full speed counterclockwise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my question is, what is the signal I should be sending to the digital servo?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This servo is indeed a 360° servo. Please see &lt;a href=&quot;https://youtu.be/pyGhbPLZA04&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://youtu.be/pyGhbPLZA04&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many thanks in advance!&lt;/p&gt;&#xA;" OwnerUserId="18299" LastEditorUserId="18299" LastEditDate="2017-11-11T07:28:16.353" LastActivityDate="2017-11-11T07:28:16.353" Title="Controlling a digital 360 degree servo" Tags="&lt;arduino&gt;&lt;rcservo&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14387" PostTypeId="2" ParentId="628" CreationDate="2017-10-06T14:45:39.543" Score="2" Body="&lt;p&gt;I'm not sure if you still need it, but for those who happened to google for this thread, I have made one simple version of the algorithm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically, it tries to build the map of the area while it cleans, and it uses the map to find the nearest unvisted node (part of the room). When it can't find any, that means the room is cleaned (or the uncleaned parts are inaccessible by the robot).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It might be slower than other algorithm, but it can guarantee coverage regardless of starting position, direction and obstacles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/dungba88/cleaner_robot&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/dungba88/cleaner_robot&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;UPDATE: I have made a demo here and comparing it with a backtracking DFS. So even though my algorithm is O(N^2), it is much more optimized in terms of number of moves and turns.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://jenova.dungba.org/cleaner/showdown&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://jenova.dungba.org/cleaner/showdown&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18303" LastEditorUserId="18303" LastEditDate="2017-10-08T02:29:27.313" LastActivityDate="2017-10-08T02:29:27.313" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14389" PostTypeId="1" CreationDate="2017-10-06T19:21:22.817" Score="1" ViewCount="172" Body="&lt;p&gt;I'm building a LynxMotion Scout biped and believe that &lt;a href=&quot;https://en.wikipedia.org/wiki/Inverse_kinematics&quot; rel=&quot;nofollow noreferrer&quot;&gt;IK&lt;/a&gt; are the best way to develop an effective gait.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm a mechanical design engineer - I currently have minimal skills / experience with programming, which I am looking to improve.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone have any suggestions for IK resources for bipeds that would assist my learning / knowledge of IK? (I have already searched online, with little success).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would really appreciate any pointers or resources you can provide.&lt;/p&gt;&#xA;" OwnerUserId="18307" LastEditorUserId="37" LastEditDate="2018-04-12T10:04:56.877" LastActivityDate="2018-04-12T10:04:56.877" Title="Beginners guide to Inverse Kinematics for biped robots?" Tags="&lt;mobile-robot&gt;&lt;kinematics&gt;&lt;inverse-kinematics&gt;&lt;humanoid&gt;" AnswerCount="0" CommentCount="1" ClosedDate="2018-04-12T10:08:18.213" ContentLicense="CC BY-SA 3.0" />
  <row Id="14394" PostTypeId="1" AcceptedAnswerId="14396" CreationDate="2017-10-07T21:33:03.510" Score="1" ViewCount="444" Body="&lt;p&gt;Searching online I have stumbled across following type of sensors that claim to measure distance. I don't quite understand the difference between them and their pros and cons. Would appreciate if someone can explain the difference between those.&#xA;I myself trying to build a bot and want to figure out which sensor to use for opponent detection, balancing between the accuracy, speed and the sensor price)&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;Sharp Proximity IR sensors&lt;/strong&gt; (these are fairly affordable)&#xA;&lt;a href=&quot;https://i.stack.imgur.com/rSOF0.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rSOF0.jpg&quot; alt=&quot;Sharp IR proximity sensor&quot;&gt;&lt;/a&gt;&#xA;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;&lt;strong&gt;Diffuse type sensors&lt;/strong&gt; (these sensors are for some reason very expensive, why?)&#xA;&lt;a href=&quot;https://i.stack.imgur.com/ajmcG.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ajmcG.jpg&quot; alt=&quot;Diffuse type sensor&quot;&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Mini Lidar&lt;/strong&gt; (those sensors are somewhat in between, but still are on the pricey side)&#xA;&lt;a href=&quot;https://i.stack.imgur.com/1VKVG.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1VKVG.jpg&quot; alt=&quot;Mini Lidar&quot;&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="18317" LastActivityDate="2017-10-08T06:40:47.910" Title="What is the difference between &quot;Sharp Distance Sensors&quot; and &quot;Diffuse Type Sensors&quot; and others?" Tags="&lt;sensors&gt;&lt;rangefinder&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14395" PostTypeId="2" ParentId="14104" CreationDate="2017-10-08T02:28:24.217" Score="1" Body="&lt;p&gt;Maybe this answer is a bit late, but it could be useful for someone else.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since the &lt;em&gt;true&lt;/em&gt; acceleration is defined in the &lt;em&gt;world frame&lt;/em&gt;, but the IMU's measured acceleration is defined in the &lt;em&gt;body frame&lt;/em&gt; (the same as the IMU), you need the rotation matrix $_B\mathbf{\tilde{a}}_{WB}(t)$ to convert from one acceleration into the other. If you don't consider this matrix, the calculations will be wrong because you'd be mixing measurements observed from &lt;em&gt;different perspectives&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With a practical example, let's suppose you are holding your phone (which we also suppose that already includes an IMU) with the screen pointing up, and you define a vector normal to the screen as a &lt;em&gt;forward direction&lt;/em&gt; (this would be the so-called &lt;em&gt;body frame&lt;/em&gt;). Then, if you move the phone in that direction, the IMU could measure an acceleration &lt;em&gt;forward&lt;/em&gt;. However you, as an external observer, would observe that the phone moved &lt;em&gt;upward&lt;/em&gt; rather than &lt;em&gt;forward&lt;/em&gt;, because the notion of &lt;em&gt;forward&lt;/em&gt; is different from your perspective.&#xA;That apparent inconsistency is caused by the different coordinate frames we define and is fixed by knowing the relative transformation between them; in this case, that transformation is the rotation matrix we were talking before.&lt;/p&gt;&#xA;" OwnerUserId="18319" LastActivityDate="2017-10-08T02:28:24.217" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14396" PostTypeId="2" ParentId="14394" CreationDate="2017-10-08T06:31:12.907" Score="0" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Sharp Proximity IR sensors (these are fairly affordable)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This is a parallax (or triangulation) sensor.  It detects distance by &quot;watching&quot; where a focused beam of light falls on the target.  The range is usually short and different physical designs (different lenses) are used for different ranges.  The color of the object does not matter much as long as the detector can see the inferred dot.  These detectors are commonly used in copiers to detect closed lids and the presence of paper.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Diffuse type sensors (these sensors are for some reason very&#xA;  expensive, why?)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;These sensors measure distance by the amount of light that is reflected back to the sensor.  All the targets need to be of the same color and reflectivity.  This is because light or white object reflect more light and will trigger the sensor further away then a dark or black object.  Likely, these sensors are expensive because they are adjustable.  Likely, these detectors are used in manufacturing to detect the same type of object over and over again. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Parallax (or triangulation) and diffuse (or reflective) sensors are talked about &lt;a href=&quot;https://www.ia.omron.com/support/guide/43/introduction.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Mini Lidar (those sensors are somewhat in between, but still are on&#xA;  the pricey side)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There are several types of LIDAR or LIght Detection And Ranging technology.  Basically, these detectors measure the distance to the target by exploiting either the phase of the reflective light or the time it takes the light to travel the distance to the target.  Either way, a considerable investment is made into the electronics to measure such features of light.  In general, LIDAR can operate over a much wider range of distances then either of the other two methods mentioned here.  These detectors are used in autonomous automobiles and other such navigation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;LIDAR sensors are talked about &lt;a href=&quot;https://en.wikipedia.org/wiki/Lidar&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I myself trying to build a bot and want to figure out which sensor to&#xA;  use for opponent detection,&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Most people who build a Sumo-Bot use the parallax or triangulation sensors.  They are cheap and there is a model with a range that is a good fit for a Sumo-Bot arena.  For building a larger robot, especially for navigation purposes, an expensive LIDAR system using spinning mirrors may be necessary.&lt;/p&gt;&#xA;" OwnerUserId="17364" LastEditorUserId="17364" LastEditDate="2017-10-08T06:40:47.910" LastActivityDate="2017-10-08T06:40:47.910" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14398" PostTypeId="1" CreationDate="2017-10-08T10:21:56.563" Score="1" ViewCount="244" Body="&lt;p&gt;I am far from an expert on robotics, but I am currently investigating the feasibility of automating a key task in our factory. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;We have an application where we would need image recognition and depth sensing to specify a coordinate in 3d space, where an object exists. Think of this as something hanging of a small tree / bush. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then we need to make to robot arm to move there and using a cutting end effector to cut of the string to the object hanging. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as I understand it seems like most industrial robots today need to be pre programmed. Are there any good solutions where you could basically say to the robot:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;moveTo(x,y,z)&#xA;cut()&#xA;return()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where the (x,y,z) coordinates comes from a depth camera setup with image recognition. I am sorry if the questions is too non specific, but I would like to know what the current state of the technology is.&lt;/p&gt;&#xA;" OwnerUserId="18325" LastActivityDate="2017-10-09T09:34:48.983" Title="Understanding the current limitations of small industrial robots" Tags="&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="3" ClosedDate="2017-10-09T14:21:56.950" ContentLicense="CC BY-SA 3.0" />
  <row Id="14399" PostTypeId="1" CreationDate="2017-10-08T12:21:34.107" Score="4" ViewCount="311" Body="&lt;p&gt;I'm currently working with Kinect v2. I can do all sort of stuff on PC with it. What I want to do next is, to get the data I want on PC and control the Raspberry Pi with that data (for example, I will move the Pi with motors when I tilt my head to right). I have sorted out the motors and everything but I just don't know how to use that tracking data I have on PC to control the Pi.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope the question makes sense, i'm just extremely new to both Pi and Kinect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: &lt;strong&gt;Further clarification of what I'm trying to achieve.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a Raspberry Pi which is connect to 2 step-motors through a motor driver. With this setup, I can run a Python script and turn on or off the motors with that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I also have a Kinect V2 connected to my PC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I want to achieve is, to &lt;strong&gt;issue the 'turn on - turn off' commands from the Kinect which is connected to my pc&lt;/strong&gt; and not the Pi. &lt;strong&gt;I want to tell the pi from my computer, for example, when I turn my head left, turn on the motors connected to the Pi.&lt;/strong&gt; I can issue the commands through the python script inside the Pi. Now I want to issue those commands from my PC which has the Kinect data and &lt;strong&gt;I want to do it through WiFi connection.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Step1: Get the head movement data from Kinect on my PC.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Step2: Send that data to Raspberry Pi, somehow(The step where I have the problem).&lt;/strong&gt; &lt;/li&gt;&#xA;&lt;li&gt;Step3: Pi turns on motors according to that data.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I hope this clerifies the problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks for the help!&lt;/p&gt;&#xA;" OwnerUserId="18329" LastEditorUserId="18329" LastEditDate="2017-10-09T21:44:08.247" LastActivityDate="2019-01-04T16:01:25.327" Title="How can I stream Kinect V2 tracking data from PC to Raspberry Pi 3 through WiFi?" Tags="&lt;motor&gt;&lt;raspberry-pi&gt;&lt;kinect&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14400" PostTypeId="2" ParentId="479" CreationDate="2017-10-08T12:24:19.933" Score="1" Body="&lt;p&gt;I use @narayan's approach to implement my particle filter:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;new_sample = numpy.random.choice(a=particles, size=number_of_particles, replace=True, p=importance_weights)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;a is the vector of your particles to sample, size is the count of particles and p is the vector of their normalized weights. replace=True handles bootstrap sampling with replacement. The return value is a vector of new particle objects.&lt;/p&gt;&#xA;" OwnerUserId="18327" LastActivityDate="2017-10-08T12:24:19.933" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14402" PostTypeId="2" ParentId="14399" CreationDate="2017-10-08T17:03:34.737" Score="1" Body="&lt;p&gt;In general in what you describe you have 2 main hardware parts, a sensor(kinect) and actuators (motors). Each might or might not have its dedicated computer to deal with the perception algorithm or control algorithms respectively.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From a software point of view you have 3 main components; the perception algorithms retrieving informations from the sensor and processing it;  the high level decisional algorithm reacting to those information and generating response behavior for your system; and lastly the actuators making the response possible. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;considering you extended questions you have two solutions:&#xA;1. use a middleware  like ROS to handle the communication for you&#xA;2. write your own communication protocol ( most likely a kind of server client)  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Option 1 will usually bring you more tools and it will be easier to further add components / functionalities in your system. Option 2 it is dedicated you have control over everything.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastEditorUserId="18235" LastEditDate="2017-10-10T13:10:30.837" LastActivityDate="2017-10-10T13:10:30.837" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14403" PostTypeId="1" AcceptedAnswerId="14404" CreationDate="2017-10-09T04:02:35.910" Score="1" ViewCount="129" Body="&lt;p&gt;I'm a programmer and I've decided to make some bots for fun. I might start with wheels but my ultimate goal is to make bipedal robots. To that end I first decided to watch a bunch of videos of such bots to see what their motion and parts looked like. One thing that struck me as counter-intuitive is how the forward motion of the robots is being carried out in every example I see.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When a human walks forward, they walk heal-first to toe upon their stride with one leg while pushing off the ground with their opposing heal (Or is it toe). In any case, I don't see any bipedal robots doing this. But why not? It seems to me that given sufficiently replicated feet and legs, bipedal robots should be able to carry out the same motion. Sure, the programming and/or training for this might be difficult but obviously doable. Or am I missing something?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: I do realize that when a person walks, they shift their weight to perform their stride. Also doable though right? There isn't anything magical about the motion of a walking human as far as I know.&lt;/p&gt;&#xA;" OwnerUserId="13881" LastActivityDate="2017-10-09T07:03:01.193" Title="Why don't bipedal robots ever feature natural movement?" Tags="&lt;motion&gt;&lt;legged&gt;&lt;walking-robot&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14404" PostTypeId="2" ParentId="14403" CreationDate="2017-10-09T07:03:01.193" Score="2" Body="&lt;p&gt;From my side I can provide two remarks.&#xA;First the human have elastic actuators (muscles) with a lots of sensors for balance. Whereas robots have mostly rigid actuators with a few dampers here and there to avoid breaking the motors on collision, and then they have far less sensing capabilities to maintain balance. So the two are not really comparable.&#xA;Another point is that walking is very unstable, you are virtually loosing equilibrium and saving it last minute to go forward. The same strategy is usually not applicable to expensive robots. The main reason being that human have local close loop of control (reflexes) whereas robots need to have complex centralized motion algorithms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to see human like walking have a look at mechanical systems tailored for that and using the same springy behavior as humans, like&#xA;&quot;A bipedal walking robot with efficient and human-like gait&quot; from Collins at ICRA 2015.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2017-10-09T07:03:01.193" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14405" PostTypeId="1" AcceptedAnswerId="14428" CreationDate="2017-10-09T07:13:02.007" Score="0" ViewCount="399" Body="&lt;p&gt;The Extended Kalman filter is more or less a mathematical &quot;hack&quot; that allows you to apply these techniques to mildly nonlinear systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem with Extended Kalman Filter is if I initialize the filter with poor conditions (i.e., the initial state), it will quickly diverge. If propagation and/or measurement updates happen at too great a timestep, it will quickly diverge. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I my view, EKF is not good for control engineering, due to the risk of diverging.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my question is if Unscented Kalman Filter(UKF) is a better choise for me if I want to be sure that my controller is stable?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or should i use the static original Kalman-Bucy Filter? I'm working with feedback systems. &lt;/p&gt;&#xA;" OwnerUserId="17252" LastActivityDate="2017-10-14T05:28:25.470" Title="Unscented Kalman Filter VS Extended Kalman Filter on stability" Tags="&lt;robotic-arm&gt;&lt;kalman-filter&gt;&lt;ekf&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14406" PostTypeId="2" ParentId="14398" CreationDate="2017-10-09T09:34:48.983" Score="0" Body="&lt;p&gt;Yes, with some caveats, using machine vision to get the 3D pose of an object and then using an industrial robot with a cutting tool to go to a location is within the capability of current technology.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Talk to your local automation and machine vision vendors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Perhaps do a little searching on fruit picking robotics as the task is probably similar.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2017-10-09T09:34:48.983" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14412" PostTypeId="1" AcceptedAnswerId="14413" CreationDate="2017-10-10T18:12:26.907" Score="1" ViewCount="183" Body="&lt;p&gt;This is a question I have thinked about under a very long time. What are industrial controllers?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From research I found that PID is the most used in the industry. PID controllers are included in classical control. Then Model Predictive Control(MPC) are used as well. MPC controllers are included in predictive control. LQG controllers are used too and LQG controllers are included in optimal control. For nonlinear systems Fuzzy controller are used and Fuzzy controllers are included in nonlinear control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then we have two type of controllers left. They are Model reference adaptive control(MRAC) which are included in adaptive control and H-infinity control which are included in robust control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my questions for you are:&#xA;Why are Robust Control and Adaptive Control not used in the industry? Are them both still in a developement stage?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please. Correct me if I'm wrong. Because I really like Robust Control but I not going to learn it if there is not chance for me to use it in industrial work.&lt;/p&gt;&#xA;" OwnerUserId="17252" LastEditorUserId="17252" LastEditDate="2017-10-10T18:17:51.027" LastActivityDate="2017-10-10T21:21:12.223" Title="Industrial Controllers - Why not adaptive control and robust control" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;microcontroller&gt;&lt;kalman-filter&gt;&lt;industrial-robot&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14413" PostTypeId="2" ParentId="14412" CreationDate="2017-10-10T19:37:51.740" Score="3" Body="&lt;p&gt;In short, adaptive control and robust control (Hinf) are the difficult combination of computationally expensive and complicated to understand. Even if you do an excellent job of implementing one of these controllers, after you have move on to another project (or job) the company still needs someone capable of understanding the controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are applications though; for example robust control is common harddrive servos. But most industrial control problems are quite simple so will try make PID (with variations) work if possible because it's fast and many people know  how to tune them.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2017-10-10T19:37:51.740" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14414" PostTypeId="2" ParentId="14412" CreationDate="2017-10-10T21:21:12.223" Score="3" Body="&lt;p&gt;If I had to guess, I would say that, in an &lt;em&gt;industrial&lt;/em&gt; setting, you have a relatively high degree of certainty about the process you're controlling, and/or there isn't much emphasis on transient performance. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Arguably, &lt;em&gt;transient&lt;/em&gt; performance should be where a more complex controller shines. However, in an industrial setting, &lt;em&gt;once the process is running&lt;/em&gt;, all running parameters should stabilize and the entire process should reach steady state.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once in steady state, the integrator term in the PI or PID controller should drive steady state error to zero. Generally speaking, as long as you're not starting or stopping the process, then any controller that can drive steady-state error to zero is probably acceptable. At that point, as &lt;a href=&quot;https://robotics.stackexchange.com/a/14413/9720&quot;&gt;ryan0270 pointed out&lt;/a&gt;, it comes down to the controller that is easiest to implement, troubleshoot, and maintain. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further, as I mentioned above, a manufacturer should have a relatively high degree of certainty about the process they're controlling. Another place that robust control shines, in particular, is where the parameters are uncertain. However, the components being used shouldn't be a mystery. Inlet fluids have a routine viscosity, temperature, etc. - once you tune a PID controller, it should be fine as long as the inlet fluid doesn't change from water to something more or less viscous, or the metal doesn't change from steel to aluminum, etc. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And then, where more precise control is required, as you stated in the question, many industries will attempt to model the process to include feed-forward (predictive) control. You model how you think the system will respond and can take &lt;em&gt;proactive&lt;/em&gt; control instead of &lt;em&gt;reactive&lt;/em&gt; control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even with model-based control, you might use the model to establish a &quot;base&quot; (feed-forward) control signal and then a &quot;dumb&quot; PID loop to drive any subsequent errors to zero. This would be how I've seen model-based control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, to state again for emphasis - &lt;em&gt;industries typically operate at steady-state&lt;/em&gt;.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-10-10T21:21:12.223" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14415" PostTypeId="2" ParentId="4632" CreationDate="2017-10-11T04:06:57.683" Score="0" Body="&lt;p&gt;From RobotShop.com&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can use the &lt;a href=&quot;http://www.robotshop.com/en/actobotics-5mm-bore-077-set-screw-hub.html?gclid=CjwKCAjw3_HOBRBaEiwAvLBboo-F3neeR_QM3bbLIEPRD1zq_GTnVLD5QeCGFZE3SYEPn935x4NG7hoCDCkQAvD_BwE&quot; rel=&quot;nofollow noreferrer&quot;&gt;Actobotics 5mm Bore 0.77'' Set Screw Hub&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given that part, you then have lots of options.&lt;/p&gt;&#xA;" OwnerUserId="18350" LastEditorUserId="17029" LastEditDate="2017-10-11T17:40:04.517" LastActivityDate="2017-10-11T17:40:04.517" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14417" PostTypeId="1" AcceptedAnswerId="14442" CreationDate="2017-10-11T07:06:13.660" Score="3" ViewCount="805" Body="&lt;p&gt;Originally I have a image with a perfect circle grid, denoted as &lt;strong&gt;&lt;em&gt;A&lt;/em&gt;&lt;/strong&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/VOXcd.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/VOXcd.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;I add some lens distortion and perspective transformation to it, and it becomes  &lt;strong&gt;&lt;em&gt;B&lt;/em&gt;&lt;/strong&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/FPEYg.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FPEYg.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;In camera calibration, &lt;strong&gt;&lt;em&gt;A&lt;/em&gt;&lt;/strong&gt; would be my destination image, and &lt;strong&gt;&lt;em&gt;B&lt;/em&gt;&lt;/strong&gt; would be my source image.&#xA;Let's say I have all the circle center coordinates in both images, stored in &lt;em&gt;stdPts&lt;/em&gt; and &lt;em&gt;disPts&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;//25 center pts in A&#xA;vector&amp;lt;Point2f&amp;gt; stdPts;&#xA;for (int i = 0; i &amp;lt;= 4; ++i) {&#xA;    for (int j = 0; j &amp;lt;= 4; ++j) {&#xA;        stdPts[i * 5 + j].x = 250 + i * 500;&#xA;        stdPts[i * 5 + j].y = 200 + j * 400;&#xA;    }&#xA;}&#xA;//25 center pts in B&#xA;vector&amp;lt;Point2f&amp;gt; disPts = FindCircleCenter();&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I want to generate an image &lt;strong&gt;&lt;em&gt;C&lt;/em&gt;&lt;/strong&gt; that is as close as &lt;strong&gt;&lt;em&gt;A&lt;/em&gt;&lt;/strong&gt;, from input: &lt;strong&gt;&lt;em&gt;B&lt;/em&gt;&lt;/strong&gt;, &lt;em&gt;stdPts&lt;/em&gt; and &lt;em&gt;disPts&lt;/em&gt;.&#xA;I tried to use the intrinsic and extrinsic generated by cv::calibrateCamera. Here is my code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;//prepare object_points and image_points&#xA;vector&amp;lt;vector&amp;lt;Point3f&amp;gt;&amp;gt; object_points;&#xA;vector&amp;lt;vector&amp;lt;Point2f&amp;gt;&amp;gt; image_points;&#xA;object_points.push_back(stdPts);&#xA;image_points.push_back(disPts);&#xA;&#xA;&#xA;//prepare distCoeffs rvecs tvecs&#xA;Mat distCoeffs = Mat::zeros(5, 1, CV_64F);&#xA;vector&amp;lt;Mat&amp;gt; rvecs;&#xA;vector&amp;lt;Mat&amp;gt; tvecs;&#xA;&#xA;&#xA;//prepare camera matrix&#xA;Mat intrinsic = Mat::eye(3, 3, CV_64F);&#xA;&#xA;//solve calibration&#xA;calibrateCamera(object_points, image_points, Size(2500,2000), intrinsic, distCoeffs, rvecs, tvecs);&#xA;&#xA;&#xA;//apply undistortion&#xA;string inputName = &quot;../B.jpg&quot;;&#xA;Mat imgB = imread(imgName);&#xA;cvtColor(imgB, imgB, CV_BGR2GRAY)&#xA;Mat tempImgC;&#xA;undistort(imgB, tempImgC, intrinsic, distCoeffs);&#xA;&#xA;&#xA;//apply perspective transform&#xA;double transData[] = { 0, 0, tvecs[0].at&amp;lt;double&amp;gt;(0), 0, 0,,tvecs[0].at&amp;lt;double&amp;gt;(1), 0, 0,  tvecs[0].at&amp;lt;double&amp;gt;(2) };&#xA;Mat translate3x3(3, 3, CV_64F, transData);&#xA;Mat rotation3x3;&#xA;Rodrigues(rvecs[0], rotation3x3);&#xA;&#xA;Mat transRot3x3(3, 3, CV_64F);&#xA;rotation3x3.col(0).copyTo(transRot3x3.col(0));&#xA;rotation3x3.col(1).copyTo(transRot3x3.col(1));&#xA;translate3x3.col(2).copyTo(transRot3x3.col(2));&#xA;&#xA;Mat imgC;&#xA;Mat matPerspective = intrinsic*transRot3x3;&#xA;warpPerspective(tempImgC, imgC, matPerspective, Size(2500, 2000));&#xA;&#xA;//write&#xA;string outputName = &quot;../C.jpg&quot;;&#xA;imwrite(outputName, imgC); // A JPG FILE IS BEING SAVED&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And here is the result image &lt;strong&gt;&lt;em&gt;C&lt;/em&gt;&lt;/strong&gt;, which doesn't deal with the perspective transformation at all.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/1cjSN.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1cjSN.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So could someone teach me how to recover &lt;strong&gt;&lt;em&gt;A&lt;/em&gt;&lt;/strong&gt;? Thanks.&lt;/p&gt;&#xA;" OwnerUserId="18353" LastEditorUserId="18353" LastEditDate="2017-10-17T00:51:51.130" LastActivityDate="2017-10-19T07:16:43.423" Title="OpenCV get topdown view of planar pattern by using intrinsic and extrinsic from cameraCalibrate" Tags="&lt;computer-vision&gt;&lt;cameras&gt;&lt;calibration&gt;&lt;opencv&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14419" PostTypeId="2" ParentId="12037" CreationDate="2017-10-11T16:08:16.830" Score="1" Body="&lt;p&gt;I am currently working on a very similar project, the only difference is that I am using a simulation package (MATLAB Simmechanics) where I have modeled a mobile robot with 2 actuated wheels and a castor wheel. I have 4 sensors, as a result, I am not using the &quot;middle position&quot; as a reward but I can easily modify that. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My model takes parameters such as friction, backlash and motor constants into account hence it should be fairly straight forward to apply the model to a real-life scenario - just like yours. Since my line follower robot is a computer simulation I can try random values of Kp,Ki, and Kd, which is certainly an advantage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore I am suggesting you to start with a simulation and then use those Kp, Ki, Kd, and Max motor speed (PWM) values in your physical model.&lt;/p&gt;&#xA;" OwnerUserId="18352" LastActivityDate="2017-10-11T16:08:16.830" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14421" PostTypeId="1" CreationDate="2017-10-11T19:28:04.513" Score="1" ViewCount="46" Body="&lt;p&gt;I want to make a LFR using IR sensor.&#xA;Till now I coded my robot according to the track I am going to participate in. So it won't work on any other track.&#xA;But now I want to code it in a way that it will work on almost any track with any design.&lt;/p&gt;&#xA;" OwnerUserId="17581" LastActivityDate="2017-10-11T19:28:04.513" Title="What algorithm should I use to make a dynamic Line following robot?" Tags="&lt;pid&gt;&lt;wheeled-robot&gt;" AnswerCount="0" CommentCount="4" ClosedDate="2017-10-12T13:35:02.800" ContentLicense="CC BY-SA 3.0" />
  <row Id="14423" PostTypeId="1" CreationDate="2017-10-13T14:07:55.050" Score="1" ViewCount="1202" Body="&lt;p&gt;To record .avi video, I am using video_recorder for the image_view package. I want to do this through the launch file. Here is the how I put it in there&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;node pkg=&quot;image_view&quot; type=&quot;video_recorder&quot; name=&quot;video_record_$(arg camera_name)&quot; machine=&quot;$(arg machine)&quot; if=&quot;$(eval record and enable_camera)&quot;&amp;gt;&#xA;             &amp;lt;arg name=&quot;fps&quot; value=&quot;$(arg frame_rate)&quot; /&amp;gt;&#xA;             &amp;lt;arg name=&quot;codec&quot; value=&quot;HFYU&quot; /&amp;gt;&#xA;             &amp;lt;arg name=&quot;encoding&quot; value=&quot;$(arg image_encoding)&quot; /&amp;gt;&#xA;&#xA;     &amp;lt;/node&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I get error:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;WARNING: WARN: unrecognized 'arg' child tag in the parent element:&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Unfortunately I could not find a go-to syntax for this and I am new to ROS. Any help is appreciated. Feel free to ask for more details.&lt;/p&gt;&#xA;" OwnerUserId="9833" LastActivityDate="2021-03-29T12:02:45.333" Title="Error starting image_view video_recorder using launch file" Tags="&lt;ros&gt;&lt;python&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14424" PostTypeId="1" AcceptedAnswerId="14429" CreationDate="2017-10-13T17:41:13.560" Score="4" ViewCount="482" Body="&lt;p&gt;I'm looking at a pan tilt (RR) system. I want to define the kinematics between a world frame and the end effector. Every example I've seen looks at the world frame as being at the first joint (the zero frame). Can DH parameters be used with an offset base? My initial thought is yes, and that you define your world frame, your base frame, and your joint frames.Then there is an extra T matrix, but that one doesn't change since the transformation between your world frame and the fixed base frame is fixed.   Thanks&lt;/p&gt;&#xA;" OwnerUserId="18362" LastActivityDate="2017-10-14T17:52:57.383" Title="DH Parameters with offset base" Tags="&lt;kinematics&gt;&lt;dh-parameters&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14425" PostTypeId="2" ParentId="14423" CreationDate="2017-10-13T17:51:18.217" Score="0" Body="&lt;p&gt;Here is the reference you are looking for: &lt;a href=&quot;http://wiki.ros.org/roslaunch/XML&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://wiki.ros.org/roslaunch/XML&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this particular case, you probably want to use the &lt;code&gt;args&lt;/code&gt; attribute inside the &lt;code&gt;&amp;lt;node&amp;gt;&lt;/code&gt; node. From &lt;a href=&quot;http://wiki.ros.org/roslaunch/XML/node&quot; rel=&quot;nofollow noreferrer&quot;&gt;this page on the &lt;code&gt;&amp;lt;node&amp;gt;&lt;/code&gt; node&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;args=&quot;arg1 arg2 arg3&quot;(optional)&lt;br&gt;&#xA;  Pass arguments to node.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="158" LastActivityDate="2017-10-13T17:51:18.217" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14426" PostTypeId="2" ParentId="14424" CreationDate="2017-10-13T18:14:08.097" Score="0" Body="&lt;p&gt;You're correct-ish, but technically the DH parameters should go from actuated axis to actuated axis, so you would leave the (unactuated) base frame out completely and just go world coordinate to the first actuated axis. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You &lt;em&gt;could&lt;/em&gt; of course just treat the base as a joint that you just never actuate ($\theta =0$). &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-10-13T18:14:08.097" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14427" PostTypeId="2" ParentId="14001" CreationDate="2017-10-13T20:26:56.060" Score="1" Body="&lt;p&gt;The Kalman filter applies to situations where we want to track a process state using a sequence of measurements (observations). The Kalman filter gives us a recursive way to estimate the process state.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Broadly, the Kalman update can be separated into a predict stage and an update stage. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the prediction stage, we carry our estimates of the state forward in the absence of new measurements. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To start the prediction, we have an estimate of the state mean and the state error covariance. This is either from initialization conditions or from a previous update step. Further, we also have knowledge of the system dynamics, i.e. we have a model for how the system will evolve. Using this, we calculate ('predict') what the new value for the state will be.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Starting from the previous estimate of the state mean, we revise our estimate of the state mean using the system dynamics. This calculating is called prediction because we are estimating the state value in the future without any new measurements to guide us. This prediction of the state mean is the first part of the predict stage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The system model often has some source of uncertainty (process noise term). We do not know what values this noise term took. We track this increase in uncertainty by revising (predicting) the state error covariance. This is second part of prediction stage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now we can move on to the update stage. The update stage is run only in the circumstance that we obtain a new measurement. We want to use this measurement to glean some information regarding the true value of the state. Then, we want to update the state estimate (mean), and state error covariance so that we are ready to go back to the prediction.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The update step can be broadly split into 3 steps.&#xA;1. To get the information out, we calculate the 'innovation' i.e. difference between the measurement and the predicted value for the measurement.&#xA;2. We calculate a Kalman gain filter (some understanding of the MMSE estimator is helpful to track the math here).&#xA;3. Then, we update the state mean by applying the innovation. Think of this as a correction to our estimate of the state based on the observation. Similarly we update the covariance of the state error. This is to reflect the decrease in uncertainty of the state from the observation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To understand the above steps in Kalman filters, you might find it helpful to review MMSE estimators and conditional means. There are plenty of youtube videos on these topics. I suggest you start there. It will make the update steps very intuitive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A couple of related comments.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In typical textbook examples, the Kalman filter is presented as a sequence of [predict, update, predict, update, ...]. In robotics practice, it is more common to see something like [predict, predict, ..., update, predict, predict,...]&#xA;i.e. we have a lot more prediction than update, because measurements are often sporadic. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The state space of a Kalman filter is constructed with a lot of care. We want to it to be sufficiently detailed so that, conditioned on the state, the future evolution of the process is independent of the past observations. On the other hand, we want the state to be a minimal representation so that the calculations are easier. Since this influences several design choices, this is something to keep in mind.&lt;/p&gt;&#xA;" OwnerUserId="18366" LastActivityDate="2017-10-13T20:26:56.060" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14428" PostTypeId="2" ParentId="14405" CreationDate="2017-10-13T21:07:26.423" Score="2" Body="&lt;p&gt;You mentioned that EKF wasn't very robust for your application. This means that the continuous time model is considerably non-linear. In this setting, the UKF is better than the EKF and handles the non-linearity better. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The original static Kalman-Bucy filter does not seem like a promising choice since it targets continuous time linear systems. So, between them, I would still lean towards UKF. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might want to look at indirect feedback Kalman filters. Section 2 of the following reference describes a non-linear continuous time application similar to what you would encounter in robotic arm movement problems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://pdfs.semanticscholar.org/7d78/9dd851ccf6100a3045ab9347b35eb86a9106.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://pdfs.semanticscholar.org/7d78/9dd851ccf6100a3045ab9347b35eb86a9106.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18366" LastEditorUserId="18366" LastEditDate="2017-10-14T05:28:25.470" LastActivityDate="2017-10-14T05:28:25.470" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14429" PostTypeId="2" ParentId="14424" CreationDate="2017-10-14T11:51:01.483" Score="3" Body="&lt;p&gt;You are correct in the sense that you just need an extra transformation from your world frame to the first frame (fixed) in you D-H parametrization. This transformation might be fixed or time varying (if you consider a mobile base robot for instance), but is not part of the D-H parametrization.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In other words, your D-H parametrization describes the kinematic of a joint collection in a generic way, then you have a transformation from world frame to  the first joint which is not part of the D-H parametrization and should more be considered as on off-set.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2017-10-14T11:51:01.483" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14430" PostTypeId="2" ParentId="14424" CreationDate="2017-10-14T17:52:57.383" Score="0" Body="&lt;p&gt;Yes, you can just set up an additional transformation matrix from the global coordinate system to the first system at the base of the robot.  These terms will all be constants.   As @Chuck mentions, this is probably not technically D-H notation but the math works and it is simple to do.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2017-10-14T17:52:57.383" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14431" PostTypeId="1" CreationDate="2017-10-15T04:48:29.643" Score="2" ViewCount="199" Body="&lt;p&gt;I am looking for inverse kinematics library (preferably compatible with ROS) that includes functions to calculate inverse-jacobian to go from end-effector velocity (twist) to joint velocities. I've only found KDL that has this capability but before implementing KDL, I would to see if there is any other options that I can use. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also saw TRAC-IK but as I see from the source code, it only supports inverse position kinematics. &lt;/p&gt;&#xA;" OwnerUserId="15165" LastActivityDate="2017-10-15T04:48:29.643" Title="Inverse Kinematics Tools" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;jacobian&gt;" AnswerCount="0" CommentCount="4" ClosedDate="2017-10-16T17:39:42.123" ContentLicense="CC BY-SA 3.0" />
  <row Id="14432" PostTypeId="2" ParentId="10567" CreationDate="2017-10-15T05:01:48.753" Score="0" Body="&lt;p&gt;I recommend &lt;a href=&quot;http://www.orocos.org/kdl&quot; rel=&quot;nofollow noreferrer&quot;&gt;KDL&lt;/a&gt;. It is kind of &lt;em&gt;de facto&lt;/em&gt; kinematic library for the robotics community. It has both forward and inverse kinematic solver as well as generic capabilities to model your robot. You can use it as a stand-alone C++ library or with ROS.&lt;/p&gt;&#xA;" OwnerUserId="15165" LastActivityDate="2017-10-15T05:01:48.753" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14437" PostTypeId="1" AcceptedAnswerId="14438" CreationDate="2017-10-16T10:53:00.460" Score="3" ViewCount="277" Body="&lt;p&gt;I have only recently started reading Steve LaValle's book on motion planning. It mentions that a rotating link with a fixed pivot has a configuration space of a unit circle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since the configuration space is the set of all possible configurations the link can have, i.e. all possible angles from 0° to 360°, shouldn't the c-space be a line rather than a circle?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, for a 2 link robotic arm in the same plane, how is the c-space a 2-tourus even though the joints rotate in the same plane? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lastly what's the difference between the representations shown below? &#xA;&lt;a href=&quot;https://i.stack.imgur.com/BxMVe.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/BxMVe.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18378" LastActivityDate="2017-10-16T16:35:30.637" Title="Configuration space of rotating link" Tags="&lt;motion-planning&gt;&lt;path-planning&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14438" PostTypeId="2" ParentId="14437" CreationDate="2017-10-16T16:35:30.637" Score="5" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Since the configuration space is the set of all possible configurations the link can have, i.e. all possible angles from 0° to 360°, shouldn't the c-space be a line rather than a circle?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You are correct that a rotating link has one variable $\theta$ that can attain any value in the range $[0, 2\pi]$ (let's talk in radian). However, the configuration space of the link is &lt;em&gt;not&lt;/em&gt; simply a line segment because the link being at $\theta = 2\pi$ is &lt;strong&gt;identical&lt;/strong&gt; to it being at $\theta = 0$. In other words, the link can keep rotating forever while the variable $\theta$ simply runs in &lt;strong&gt;loops&lt;/strong&gt;, like a clock.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If there was an ant walking on the line segment to the right, when the ant reaches $\theta = 2\pi$, it would somehow be teleported and appear at $\theta = 0$ and continue walking like nothing happened.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is essentially the same as &lt;strong&gt;gluing&lt;/strong&gt; both ends of the line segment together. That's why you have a circle instead of only a line segment.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Also, for a 2 link robotic arm in the same plane, how is the c-space a 2-tourus even though the joints rotate in the same plane?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I understand that this may be confusion between the robot's &lt;em&gt;workspace&lt;/em&gt; and the robot's &lt;em&gt;configuration space&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The joints rotate in the same plane so their &lt;em&gt;workspace&lt;/em&gt; is a subset of that two-dimensional &lt;em&gt;plane&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now for the configuration space of this robot, the same argument as above applies. Initially, you can think of a configuration space as a square whose corners are $(\theta_1, \theta_2) = (0, 0)$, $(\theta_1, \theta_2) = (0, 2\pi)$, $(\theta_1, \theta_2) = (2\pi, 2\pi)$, and $(\theta_1, \theta_2) = (2\pi, 0)$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first link (the one attached to the base) of the robot could continue rotating forever while the joint value $\theta_1$ would only vary within the range $[0, 2\pi]$. If there was an ant walking from left to right on the square, the ant could continue walking forever as previously. It is like the left edge and the right edge are &lt;em&gt;glued&lt;/em&gt; together.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second link could also keep rotating forever while the joint value $\theta_2$ could only run between $0$ and $2\pi$. In the end, this is like gluing the top edge and the bottom edge together.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In topology, this &lt;em&gt;gluing&lt;/em&gt; process is called &lt;em&gt;identification&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, when you glue the two pairs of edges of the square together, you get a 2-torus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/kGV8A.gif&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kGV8A.gif&quot; alt=&quot;torus from rectangle&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(image from &lt;a href=&quot;https://en.wikipedia.org/wiki/Torus&quot; rel=&quot;noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Torus&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Lastly what's the difference between the representations shown below?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The two images show the same thing &lt;em&gt;before&lt;/em&gt; and &lt;em&gt;after&lt;/em&gt; the identification (gluing) process. Notice the arrow heads on the edges of the square in the left image. They tell you which sides match and how they should be aligned when being glued together.&lt;/p&gt;&#xA;" OwnerUserId="7610" LastActivityDate="2017-10-16T16:35:30.637" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="14439" PostTypeId="1" AcceptedAnswerId="14483" CreationDate="2017-10-16T17:40:47.553" Score="1" ViewCount="4564" Body="&lt;p&gt;I want to choose stepper motor screw with slider for use it to shift cube with side 5 cm and wight 250 g .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found this motor .. how can I calculate speed and torque of slider&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/rD6hY.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rD6hY.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/dt8Mu.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dt8Mu.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18381" LastEditorUserId="9720" LastEditDate="2017-10-16T17:45:34.157" LastActivityDate="2018-04-18T23:22:46.027" Title="How can I calculate speed and torque of stepper motor screw" Tags="&lt;arduino&gt;&lt;motor&gt;&lt;stepper-motor&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14440" PostTypeId="2" ParentId="14439" CreationDate="2017-10-16T17:51:05.133" Score="1" Body="&lt;p&gt;I would use input electrical power as a guideline for the output mechanical power. Power is voltage times current, (in volts and amps for a power in watts), and power is also force times speed (in newtons and meters per second for a power in watts). I would assume the motor is 80% efficient and the screw is 70% efficient for some reasonable ballpark estimates. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can convert revolutions to linear motion via the pitch - every revolution is 0.003 meters. The rated motor speed isn't listed, but you can use it to get the rated linear speed. Efficiency losses will &quot;eat&quot; your output force. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-10-16T17:51:05.133" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14442" PostTypeId="2" ParentId="14417" CreationDate="2017-10-17T00:53:25.177" Score="2" Body="&lt;p&gt;&lt;strong&gt;Added&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;OK, guys, simple mistake. I previously used &lt;em&gt;warpPerspective&lt;/em&gt; to warp images instead of restoring. Since it works that way, I didn't read &lt;a href=&quot;https://docs.opencv.org/2.4/modules/imgproc/doc/geometric_transformations.html#void%20warpPerspective(InputArray%20src,%20OutputArray%20dst,%20InputArray%20M,%20Size%20dsize,%20int%20flags,%20int%20borderMode,%20const%20Scalar&amp;amp;%20borderValue)&quot; rel=&quot;nofollow noreferrer&quot;&gt;the doc&lt;/a&gt; thoroughly. It turns out that if it is for restoring, the flag &lt;em&gt;WARP_INVERSE_MAP&lt;/em&gt; should be set. Change the function call to this, and that's it.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;warpPerspective(tempImgC, imgC, matPerspective, Size(2500, 2000), WARP_INVERSE_MAP);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Here is the &lt;strong&gt;new result image&lt;/strong&gt; &lt;strong&gt;&lt;em&gt;C&lt;/em&gt;&lt;/strong&gt;:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/Cnw6g.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Cnw6g.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only thing concerns me now is the intermediary &lt;em&gt;tempImgC&lt;/em&gt;, which is the image after &lt;em&gt;undistort&lt;/em&gt; and before &lt;em&gt;warpPerspective&lt;/em&gt;. In some tests with different artificial &lt;strong&gt;&lt;em&gt;B&lt;/em&gt;&lt;/strong&gt; s, This image could turn out to be a scaled-up version of &lt;strong&gt;&lt;em&gt;B&lt;/em&gt;&lt;/strong&gt; with distortion removed. That means a lot of information is lost in the outter area. And there is not much to use for &lt;em&gt;warpPerspective&lt;/em&gt;. I'm thinking maybe to scale down the image in &lt;em&gt;undistort&lt;/em&gt; and to scale it up in &lt;em&gt;warpPerspective&lt;/em&gt;. But I'm not sure yet how to calculate the correct scale to preserve all the information in &lt;strong&gt;&lt;em&gt;B&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Added 2&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The last piece of the puzzle is in place. Call &lt;em&gt;getOptimalNewCameraMatrix&lt;/em&gt; before &lt;em&gt;undistort&lt;/em&gt; to generate the new camera matrix that preserves all the info in &lt;em&gt;B&lt;/em&gt;. And pass this new camera matrix to &lt;em&gt;undistort&lt;/em&gt; and &lt;em&gt;warpPerspective.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Mat newIntrinsic=getOptimalNewCameraMatrix(intrinsic, distCoeffs, Size(2500, 2000), 1);&#xA;undistort(imgB, tempImgC, intrinsic, distCoeffs, newIntrinsic);&#xA;Mat matPerspective = newIntrinsic*transRot3x3;&#xA;warpPerspective(tempImgC, imgC, matPerspective, Size(2500, 2000), WARP_INVERSE_MAP);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The result image &lt;strong&gt;&lt;em&gt;C&lt;/em&gt;&lt;/strong&gt; is the same in this case. But there is a big difference for other cases. For example, with another distorted image &lt;strong&gt;&lt;em&gt;B1&lt;/em&gt;&lt;/strong&gt;.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/Z6ipj.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Z6ipj.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;The result image &lt;strong&gt;&lt;em&gt;C1&lt;/em&gt;&lt;/strong&gt; without new camera matrix looks like this.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/D8YgF.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/D8YgF.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;And the result image &lt;strong&gt;&lt;em&gt;C1&lt;/em&gt;&lt;/strong&gt; with new camera matrix maintains the information in &lt;strong&gt;&lt;em&gt;B1&lt;/em&gt;&lt;/strong&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/S4uIQ.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/S4uIQ.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Added 3&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I realized that as each frame captured by camera needs processing and efficiency is important, I can't afford to use &lt;code&gt;undistort&lt;/code&gt; and &lt;code&gt;warpPerspective&lt;/code&gt; for each frame. It's only reasonable to have one map and use &lt;code&gt;remap&lt;/code&gt; for each frame. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Actually, there is a straight forward way to that, which is &lt;code&gt;projectPoints&lt;/code&gt;. Since it generates the map from destination image to source image directly, &lt;strong&gt;no intermediary image is needed&lt;/strong&gt; and thus loss of information is avoided.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;// ....&#xA;//solve calibration&#xA;&#xA;//generate a 3-channel mat with each entry containing it's own coordinates&#xA;Mat xyz(2000, 2500, CV_32FC3);&#xA;float *pxyz = (float*)xyz.data;&#xA;for (int y = 0; y &amp;lt; 2000; y++)&#xA;    for (int x = 0; x &amp;lt; 2500; x++)&#xA;    {&#xA;        *pxyz++ = x;&#xA;        *pxyz++ = y;&#xA;        *pxyz++ = 0;&#xA;    }&#xA;&#xA;// project coordinates of destination image,&#xA;// which generates the map from destination image to source image directly&#xA;xyz=xyz.reshape(0, 5000000);&#xA;Mat mapToSrc(5000000, 1, CV_32FC2);&#xA;projectPoints(xyz, rvecs[0], tvecs[0], intrinsic, distCoeffs, mapToSrc);&#xA;Mat maps[2];&#xA;mapToSrc = mapToSrc.reshape(0, 2000);&#xA;split(mapToSrc, maps);&#xA;&#xA;//apply map&#xA;remap(imgB, imgC, maps[0], maps[1], INTER_LINEAR);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="18353" LastEditorUserId="18353" LastEditDate="2017-10-19T07:16:43.423" LastActivityDate="2017-10-19T07:16:43.423" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14443" PostTypeId="1" CreationDate="2017-10-17T05:05:10.500" Score="1" ViewCount="56" Body="&lt;p&gt;I'm a graduate student at mechanical engineering. I took computer vision(stereo vision) last semester but I'm still fairly new to this area. I wonder if I may ask 3 questions related to computer vision? We have a 6 DOF robot arm, and we want to orient the end effector(z axis of end effector) to the normal of a curved surface. The geometry of this curved surface is unknown.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;I wonder if you may suggest some good tutorials/paper/implementations of the extrinsic calibration?&lt;/em&gt;&lt;/strong&gt; Assuming I have a stereo camera(ZED for example), which is fixed in space. I want to get the camera's coordinate and therefore all the pixels coordinates expressed in the robot base frame. &lt;strong&gt;&lt;em&gt;I think this might be a hand eye calibration problem, but I think there might be a better methods?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;May I use stereo camera like ZED to get the surface normal&lt;/em&gt;&lt;/strong&gt;? Assuming I want to get the surface normal of a cylinder. Assuming I have the extrinsic calibrated camera ready, which faces this cylinder. My proposed method is that I mark 3 points a1,a2,a3 in vicinity, and I use a blue marker pen to mark these 3 points. I can get the &quot;physical coordinate&quot; of these three points in the robot base frame, then I took the cross product between the physical coordinate of (a3-a1) and the physical coordinate of (a2-a1), then I may have a normal at the physical coordinate of a1. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Any suggestions/improvements on my methods?&lt;/em&gt;&lt;/strong&gt; My biggest concern is that ZED camera may not be a good option here, after all 400 dollar is not cheap for an international student. More importantly, I always feel there must a better option here.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I'm all ears. I assume I may not have a good description of my problem. Thank you for your attention and help in advance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Best,&lt;/p&gt;&#xA;" OwnerUserId="18385" LastActivityDate="2017-10-17T05:05:10.500" Title="hand_eye_calibration, surface normal by stereo vision" Tags="&lt;localization&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14444" PostTypeId="1" CreationDate="2017-10-17T06:31:38.670" Score="0" ViewCount="32" Body="&lt;p&gt;I would like to connect my RP3 to the HKpilot. While most connections are pretty &lt;a href=&quot;http://ardupilot.org/dev/docs/raspberry-pi-via-mavlink.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;straightforward&lt;/a&gt;, I would like to know how ca I power the PI:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;It is stated in the above link that &quot;The RPi can be powered by connecting the red V+ cable to the +5V pin&quot;, can the HK32 pilot deal with the power consumption of th RP?&lt;/li&gt;&#xA;&lt;li&gt;It is also stated that &quot;The RPi can be powered ... from USB in&quot;, in this case, there is the grouding is shared? From where can I get a 5v  output? Do I need to build a voltage regulator?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Thanks,&lt;/p&gt;&#xA;" OwnerUserId="18387" LastActivityDate="2018-01-23T05:07:42.340" Title="Raspberry PI with HKpilot32" Tags="&lt;raspberry-pi&gt;&lt;ardupilot&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14445" PostTypeId="1" CreationDate="2017-10-17T10:00:50.260" Score="4" ViewCount="115" Body="&lt;p&gt;I am new to robotics, and currently trying to develop a purely numerical simulation of a quadcopter. As I understand, the problem of quadcopter control includes take-off control, hover stabilization and landing. However, I am only working with navigation control right now, foregoing take-off and landing. I am imagining a scenario wherein the quadcopter is already off the ground at a certain height (is that called hovering?) and it has to follow a trajectory in the presence of simulated noise (which I intend to introduce through random deviations in the angular orientations of the quadcopter) . The trajectory is nothing but a finely discretized curve in XYZ space (with a constant Z for now).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am trying to build on &lt;a href=&quot;http://andrew.gibiansky.com/blog/physics/quadcopter-dynamics/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; tutorial. It's a highly simplified model, just taking into account the thrust, external torques and frictional forces on the quadcopter. I have two questions here: &#xA;1. Is my setup even feasible just to demonstrate a proof of concept fuzzy control?&#xA;2. In this setup, and according to the initial condition mentioned above, I understand that if the quadcopter already has to be at a certain height h, then the net thrust in Z direction should balance the gravitational force. However, that would be the case at any height above the ground. But to get it to height h, how do I calculate the angular velocities in body frame that are required to keep it at that height? I am asking this because by means of affecting these velocities I'll be able to add some noise to the system and then work my way from there. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The platform for this numerical simulation is to be Matlab, if that information adds anything. I am planning to use only Matlab scripts for now, and not Simulink. As for my knowledge of dynamic systems, I understand basics of linear and rotational kinematics. I have only worked with implementing text book algorithms in a standard computer science course, and that's as far as my programming experience goes.  &lt;/p&gt;&#xA;" OwnerUserId="18110" LastEditorUserId="18110" LastEditDate="2017-10-18T07:32:16.187" LastActivityDate="2018-10-15T00:00:33.663" Title="Setting initial conditions in a quadcopter numerical simulation" Tags="&lt;quadcopter&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14446" PostTypeId="1" CreationDate="2017-10-17T10:47:36.947" Score="1" ViewCount="51" Body="&lt;p&gt;I am looking for something like this part in these photos:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://cdn.instructables.com/FQC/7ENO/IW5JB2UM/FQC7ENOIW5JB2UM.MEDIUM.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/jgdG6m.png&quot; alt=&quot;WHIM Wheelchair - A DIY Electric Powered WHeelchair&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://cdn.instructables.com/F3J/BE2K/IW5JB58G/F3JBE2KIW5JB58G.MEDIUM.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/LSNQJm.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;to make my robot ideas as prototype. But I don't know it's name! Also if there are better options I will happy to know.&lt;/p&gt;&#xA;" OwnerUserId="15698" LastEditorUserId="37" LastEditDate="2017-10-17T17:12:56.270" LastActivityDate="2017-10-17T17:12:56.270" Title="I am looking for some basic mechanical parts to build structures(prototypes)?" Tags="&lt;mobile-robot&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14447" PostTypeId="1" CreationDate="2017-10-17T13:17:15.950" Score="0" ViewCount="476" Body="&lt;p&gt;I tried to get the yaw, roll, pitch and throttel integers from the pi to the CC3D with python and c++ as PWM signal over the GPIOs but the output didn't seem to be right or it was delayed.&#xA;Could someone help me to program an application who knows how to program PWM, PPM, SBus or ExBus?&#xA;Or does someone know a better way to do it than a serial connection?&lt;/p&gt;&#xA;" OwnerUserId="18301" LastActivityDate="2017-11-16T20:00:01.890" Title="Build a drone with a raspberry pi 2 as receiver for the CC3D-LibrePilot" Tags="&lt;quadcopter&gt;&lt;raspberry-pi&gt;&lt;serial&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14448" PostTypeId="1" CreationDate="2017-10-17T15:01:30.237" Score="0" ViewCount="37" Body="&lt;p&gt;over the last 5 years I had 2 quadcopter as a gift.&#xA;the first one was basic, manual, I had to manually set the 4 motor speed for it not to crash during take off and I was alway controlling the amount of thrust myself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1/ Why was that necessary? if you send the same thing to the 4 motor they should spin at the same rate and thus provide the same thrust no?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second one was a smartphone controlled drone, you just hit the take off button and the thing fly and stay at the same place/altitute.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To do that I could see an ultrasonic sensor below the drone. if I made it fly above a mattress it would crash.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2/ Ok that nice but what about high altitude? what if my drone is hovering a 500m, what kind of sensor can I use to make him stay at the same place and altitude.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I already fiddled with GPS and I don't think it's fast/precise enought.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="18390" LastActivityDate="2017-10-17T15:29:06.940" Title="What kind of sensor do quadcopter uses?" Tags="&lt;quadcopter&gt;&lt;sensors&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14449" PostTypeId="2" ParentId="14446" CreationDate="2017-10-17T15:18:35.407" Score="1" Body="&lt;p&gt;Perforated square tubing or &quot;bolt together&quot; framing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might also consider 80/20-style T-slot framing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not associated with McMaster-Carr, but I'm a big fan of theirs. You can find &lt;a href=&quot;https://www.mcmaster.com/#perforated-tubing;square-tubing/&quot; rel=&quot;nofollow noreferrer&quot;&gt;perforated square tubing on their site here&lt;/a&gt; and you can find &lt;a href=&quot;https://www.mcmaster.com/#80/20-compatible-t-slotted-framing/&quot; rel=&quot;nofollow noreferrer&quot;&gt;80/20-compatible T-slot framing here.&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, if you're looking for 80/20 framing, you could always go to the &lt;a href=&quot;https://8020.net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;80/20 website.&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-10-17T15:18:35.407" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14450" PostTypeId="2" ParentId="14448" CreationDate="2017-10-17T15:29:06.940" Score="1" Body="&lt;p&gt;The first quadcopter probably only had a gyroscope to assist in roll/pitch/yaw control. For real motors, sending the same value will not provide the same rotation speed (it will always vary at least a little). Also, for 4 different real rotors, spinning at the same speed will not produce the same thrust. That is why you had to adjust takeoff motor speeds. In flight, unless you produce exactly, and I mean exactly, the correct thrust to offset the quadcopter's weight you will always need to adjust the thrust to maintain hover since the system itself doesn't know that it's rising/falling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you guessed, the second quadcopter was using an ultrasonic sensor to know it's height. It probably also had a more advanced gyroscope and algorithm to hold roll/pitch. At high altitudes where the ultrasonic is not effective, barometers are usually used. This will not be terribly accurate in an absolute sense, but it will be able to tell the computer algorithms if the system is rising or falling which is enough to hold still.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2017-10-17T15:29:06.940" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14451" PostTypeId="1" AcceptedAnswerId="14453" CreationDate="2017-10-17T16:30:52.073" Score="1" ViewCount="250" Body="&lt;p&gt;I am starting off with a very simple Kalman filter for vision based pose estimation (PnP algorithm). The filter is inspired by the constant velocity model in this &lt;a href=&quot;https://docs.opencv.org/3.3.0/dc/d2c/tutorial_real_time_pose.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;OpenCV tutorial&lt;/a&gt;, but I am ignoring roll, pitch and yaw for now and I am only estimating the XYZ pose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As PnP is formulated as a non linear least squares problem, I have access to a covariance matrix from the solver I am using (Ceres), and I am using this matrix as an estimate of the measurement noise covariance matrix $R$ at each step. Process noise covariance $Q$ remains constant. My understanding of the filter is that if I obtain more and more 'good' measurements (with low $R$), the system covariance should recursively decrease; and even if the measurements worsen later, the posteriors should not worsen &lt;em&gt;too much&lt;/em&gt;. So if I were to start from an area of bad measurements with covariance $P_1$, move to an area where I receive some good measurements and back to the area of bad measurements with covariance this time being $P_2$, $P_2 &amp;lt; P_1$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, in my formulation, my posterior covariance $P$ seems to be blindly following $R$: in my previous example of bad-good-bad areas, $P$ decreases and increases to almost the same extent, so I can't see the advantage of receiving good measurements reflected in the final covariance. On the other hand, if I reduce $Q$ even lower, I can see some variation in initial vs. final covariances, but the system is not trusting the measurements at all and is smoothing the poses out way too much. I am confused as to how to pick the best values of $Q$ and $R$, and mainly as to how I can write my filter in a way that it recognizes the advantage of getting good measurements.&lt;/p&gt;&#xA;" OwnerUserId="10310" LastActivityDate="2017-10-17T19:16:06.610" Title="Kalman filter for vision based pose estimation: 'good' measurements not improving system covariance" Tags="&lt;localization&gt;&lt;computer-vision&gt;&lt;kalman-filter&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14452" PostTypeId="2" ParentId="14447" CreationDate="2017-10-17T18:49:52.040" Score="1" Body="&lt;p&gt;The problem is with the Raspberry pi. You can't generate accurate PWM output using Raspberry Pi because it's a microprocessor running an operating system (not real-time system). So you may get unexpected delay in the GPIO.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you insist in using Raspberry Pi to drive PWM signals, you can use PWM adafruit driver with I2C interface.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I think you should really consider redesigning your whole system. Maybe building your own flight controller using Arduino. Then make Raspberry pi talk to the Arduino using serial communication. There are a plenty of tutorials that explain how to do that.&lt;/p&gt;&#xA;" OwnerUserId="18127" LastEditorUserId="18127" LastEditDate="2017-10-17T19:22:39.263" LastActivityDate="2017-10-17T19:22:39.263" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14453" PostTypeId="2" ParentId="14451" CreationDate="2017-10-17T19:16:06.610" Score="3" Body="&lt;p&gt;First, let me see if I can summarize your issue to see if I understand correctly:&#xA;1) Start in area with bad measurements (high R), get P1&#xA;2) Move to area with good measurements (low R)&#xA;3) Move back to first area (high R), get P2&#xA;And you expect P2 &amp;lt; P1, correct?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Generally speaking, yes, at some level you can think P2 should be less than P1. But the devil is in the details: over time the filter will reach a steady state so given the same state, Q, and R it will converge to the same value regardless of how you got there. If are able to instantaneously jump between the bad and good measurement regions you should initially see P2&#xA;&#xA;&lt;p&gt;The other thing to consider is the magnitude of R relative to Q; if even your &quot;good&quot; measurement R is large the filter mostly just trusts the predictive model so the quality of your measurements doesn't affect much. You can try test with a large Q (or smaller R) to trust the measurements more; but that will also make the filter adjust more quickly after changing from good-&gt;bad measurement regions.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2017-10-17T19:16:06.610" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14455" PostTypeId="1" AcceptedAnswerId="15271" CreationDate="2017-10-18T01:39:43.963" Score="2" ViewCount="149" Body="&lt;p&gt;I'm working on a smart camera that does key point prediction (predicting locations of wrists, elbow, shoulder, ears, eyes, nose, etc.) for gesture recognition.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Right now, the neural net is running on the embedded GPU (a Jetson TX2) and performance isn't ideal (&amp;lt;3 FPS). So I'm exploring whether it makes more sense to constantly upload images to the cloud, doing the predictions there, and sending the results back to the device.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm curious what approach others would recommend for a smart camera. Specifically:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Performance differences between using an embedded GPU vs. the cloud?&lt;/li&gt;&#xA;&lt;li&gt;Cost differences between using an embedded GPU vs. the cloud?&lt;/li&gt;&#xA;&lt;li&gt;What other smart cameras are doing (Nest, Lighthouse, etc.)?&lt;/li&gt;&#xA;&lt;li&gt;If there is an alternative better than the Jetson TX2 if going the embedded path?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Any advice for any of the questions would be great. &lt;/p&gt;&#xA;" OwnerUserId="18298" LastActivityDate="2018-02-28T10:29:40.370" Title="Smart camera image processing on embedded GPU vs. in the cloud" Tags="&lt;computer-vision&gt;&lt;cameras&gt;&lt;embedded-systems&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14456" PostTypeId="1" CreationDate="2017-10-18T02:06:48.593" Score="3" ViewCount="6425" Body="&lt;p&gt;I would like to determine the relative camera pose given two RGB camera frames. I assume there's overlap in field of view between the two cameras, what I am looking for ultimately is the rotation and translation between two cameras. I understand how to do this in theory, and am looking for existing openCV implementations in python. An existing one for matlab can be found here: &lt;a href=&quot;https://www.mathworks.com/help/vision/ref/relativecamerapose.html#inputarg_inlierPoints1&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.mathworks.com/help/vision/ref/relativecamerapose.html#inputarg_inlierPoints1&lt;/a&gt;. But so far as I can tell I see no openCV API in python.&lt;/p&gt;&#xA;" OwnerUserId="4024" LastActivityDate="2021-05-20T09:36:09.557" Title="Determine the relative camera pose given two RGB camera frames in openCV-python" Tags="&lt;computer-vision&gt;&lt;matlab&gt;&lt;python&gt;&lt;opencv&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14457" PostTypeId="2" ParentId="14455" CreationDate="2017-10-18T04:14:47.007" Score="0" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;If there is an alternative better than the Jetson TX2 if going the embedded path?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You can try &lt;a href=&quot;https://developer.qualcomm.com/software/snapdragon-neural-processing-engine&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://developer.qualcomm.com/software/snapdragon-neural-processing-engine&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did not see any comparison between different Snapdragon's and Jetson and I am not sure where you can find top level Snapdragon 835 except some fresh Android phones. &lt;/p&gt;&#xA;" OwnerUserId="18393" LastActivityDate="2017-10-18T04:14:47.007" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14458" PostTypeId="2" ParentId="14456" CreationDate="2017-10-18T04:23:48.070" Score="3" Body="&lt;p&gt;If you understand how relative pose estimation works in theory, it should be quite trivial to translate it into OpenCV code. First, you can pick any feature detection/description approach you like (say SIFT and brute force matching) and obtain a list of matches. But here, you need to be absolutely sure there is overlap between the images: because without feature matches, relative pose estimation would not work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you have access to these matches (pairs of features visible in both images), you can then use the &lt;a href=&quot;https://docs.opencv.org/3.0-beta/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html#findessentialmat&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;findEssentialMat()&lt;/code&gt;&lt;/a&gt; function in OpenCV, where you will have to provide the intrinsics data from the camera as well as those matching pairs you obtained in the first step. This function, using a RANSAC scheme will compute the essential matrix that encodes the transformation between the scenes. Once you obtain the matrix $E$, you can use another OpenCV function &lt;a href=&quot;https://docs.opencv.org/3.0-beta/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html#recoverpose&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;recoverPose()&lt;/code&gt;&lt;/a&gt; and pass the $E$ matrix to it, which will calculate the relative rotation (as a Rodrigues vector, if I remember right) and the relative translation up to scale. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;These functions are available in C++ as well as Python. To put you on the right path about how to go about coding it in python, here is a tutorial on how to compute the fundamental matrix through feature matches in OpenCV: this can be easily extended to the essential matrix and subsequently the relative pose. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_calib3d/py_epipolar_geometry/py_epipolar_geometry.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_calib3d/py_epipolar_geometry/py_epipolar_geometry.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10310" LastActivityDate="2017-10-18T04:23:48.070" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14459" PostTypeId="2" ParentId="14025" CreationDate="2017-10-18T07:38:27.443" Score="1" Body="&lt;p&gt;Yes, you can make an app of your own which will enhance the drone to gives you  the exact location of your mobile  phone or any buddy you make the app available on their mobile phone, is just a pity you are not a professional in this line, I would have given you some  tips which will help you out and if you seems it's hell of a work will help you make one &lt;/p&gt;&#xA;" OwnerUserId="18394" LastActivityDate="2017-10-18T07:38:27.443" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14460" PostTypeId="2" ParentId="12556" CreationDate="2017-10-18T08:41:07.897" Score="0" Body="&lt;p&gt;Based on your limitations, I would consider a &lt;a href=&quot;https://www.adafruit.com/product/3400&quot; rel=&quot;nofollow noreferrer&quot;&gt;Raspberry Pi Zero W&lt;/a&gt;, which has bluetooth built in. You can connect &lt;a href=&quot;https://www.adafruit.com/product/3099&quot; rel=&quot;nofollow noreferrer&quot;&gt;a camera that has quite a high resolution designed to operate with the Pi&lt;/a&gt; and stream the video back over whatever you choose.&lt;/p&gt;&#xA;" OwnerUserId="18395" LastActivityDate="2017-10-18T08:41:07.897" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14461" PostTypeId="1" CreationDate="2017-10-18T09:23:54.610" Score="1" ViewCount="121" Body="&lt;p&gt;To simulate a system, a global timer will be set and all submodules will be synchronized with that timer to work together. such as PID controller, kalman filter, PWM module etc.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How do you sync the timers in ROS?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) should I make a timer pointer as paramter in PID() and pass the system &quot;ros::Time xxx&quot; to this PID?  is this timer &quot;real time&quot; enough for a balance car?&lt;br&gt;&#xA;(For the PID controller I can do this because the PID controller and the PWM generater will be in the same node).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) or receive the msg from nodes and extract the time stamp and use? is the latency can be ignored or how to evaluate the latency?&lt;br&gt;&#xA;(The Kanlman filter will be in the sensors node and from the coder view we cannot pass the system timer pointer to the kalman filter such as kalman() )  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PID controller works at around 500Hz and the kalman filter works at lower speed. my PWM is 5KHz.&lt;br&gt;&#xA;Thanks a lot!&lt;/p&gt;&#xA;" OwnerUserId="16966" LastEditorUserId="16966" LastEditDate="2017-10-18T09:49:32.003" LastActivityDate="2017-10-23T08:38:45.980" Title="how to sync the timer in control system with ROS?" Tags="&lt;pid&gt;&lt;ros&gt;&lt;kalman-filter&gt;&lt;pwm&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14463" PostTypeId="1" CreationDate="2017-10-18T14:56:52.903" Score="1" ViewCount="648" Body="&lt;p&gt;I am trying to develop a line following algorithm where a drone will detect a bounding box and follow what is inside the bounding box.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am filtering all the colors to only see the color white. Once that color is detected, I want the drone to go in a straight line from one end of the box to the other. Maybe it is easier using the draw line function on openCV but I am not sure. Any way, my biggest problem is telling the drone to follow the color or in other words the detected object.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am using &lt;a href=&quot;https://github.com/tekkies/cvdrone/blob/master/src/main.cpp&quot; rel=&quot;nofollow noreferrer&quot;&gt;this repository from GitHub&lt;/a&gt;. Anyway this the code I have so far, and it only follows items that are moving. I need to follow an object that is stationary if that is possible.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &quot;ardrone/ardrone.h&quot;&#xA;&#xA;int main(int argc, char *argv[]) {&#xA;    // AR.Drone class&#xA;    ARDrone ardrone;&#xA;&#xA;    // Initialize&#xA;&#xA;    if (!ardrone.open()) {&#xA;        std::cout &amp;lt;&amp;lt; &quot;Failed to initialize.&quot; &amp;lt;&amp;lt; std::endl;&#xA;        return -1;&#xA;    }&#xA;&#xA;    // Thresholds&#xA;&#xA;    int minH = 0, maxH = 255;&#xA;    int minS = 0, maxS = 255;&#xA;    int minV = 0, maxV = 255;&#xA;&#xA;    // XML save data&#xA;&#xA;    std::string filename(&quot;thresholds.xml&quot;);&#xA;    cv::FileStorage fs(filename, cv::FileStorage::READ);&#xA;&#xA;    // If there is a save file then read it&#xA;&#xA;    if (fs.isOpened()) {&#xA;        maxH = fs[&quot;H_MAX&quot;];&#xA;        minH = fs[&quot;H_MIN&quot;];&#xA;        maxS = fs[&quot;S_MAX&quot;];&#xA;        minS = fs[&quot;S_MIN&quot;];&#xA;        maxV = fs[&quot;V_MAX&quot;];&#xA;        minV = fs[&quot;V_MIN&quot;];&#xA;        fs.release();&#xA;    }&#xA;&#xA;    // Create a window&#xA;&#xA;    cv::namedWindow(&quot;binalized&quot;);&#xA;    cv::createTrackbar(&quot;H max&quot;, &quot;binalized&quot;, &amp;amp;maxH, 255);&#xA;    cv::createTrackbar(&quot;H min&quot;, &quot;binalized&quot;, &amp;amp;minH, 255);&#xA;    cv::createTrackbar(&quot;S max&quot;, &quot;binalized&quot;, &amp;amp;maxS, 255);&#xA;    cv::createTrackbar(&quot;S min&quot;, &quot;binalized&quot;, &amp;amp;minS, 255);&#xA;    cv::createTrackbar(&quot;V max&quot;, &quot;binalized&quot;, &amp;amp;maxV, 255);&#xA;    cv::createTrackbar(&quot;V min&quot;, &quot;binalized&quot;, &amp;amp;minV, 255);&#xA;    cv::resizeWindow(&quot;binalized&quot;, 0, 0);&#xA;&#xA;    // Kalman filter&#xA;&#xA;    cv::KalmanFilter kalman(4, 2, 0);&#xA;&#xA;    // Sampling time [s]&#xA;&#xA;    const double dt = 1.0;&#xA;&#xA;    // Transition matrix (x, y, vx, vy)&#xA;&#xA;    cv::Mat1f A(4, 4);&#xA;&#xA;    A &amp;lt;&amp;lt; 1.0, 0.0,  dt, 0.0,&#xA;         0.0, 1.0, 0.0,  dt,&#xA;         0.0, 0.0, 1.0, 0.0,&#xA;         0.0, 0.0, 0.0, 1.0;&#xA;&#xA;    kalman.transitionMatrix = A;&#xA;&#xA;    // Measurement matrix (x, y)&#xA;&#xA;    cv::Mat1f H(2, 4);&#xA;&#xA;    H &amp;lt;&amp;lt; 1, 0, 0, 0,&#xA;         0, 1, 0, 0;&#xA;&#xA;    kalman.measurementMatrix = H;&#xA;&#xA;    // Process noise covairance (x, y, vx, vy)&#xA;&#xA;    cv::Mat1f Q(4, 4);&#xA;&#xA;    Q &amp;lt;&amp;lt; 1e-5,  0.0,  0.0,  0.0,&#xA;          0.0, 1e-5,  0.0,  0.0,&#xA;          0.0,  0.0, 1e-5,  0.0,&#xA;          0.0,  0.0,  0.0, 1e-5;&#xA;&#xA;    kalman.processNoiseCov = Q;&#xA;&#xA;    // Measurement noise covariance (x, y)&#xA;&#xA;    cv::Mat1f R(2, 2);&#xA;&#xA;    R &amp;lt;&amp;lt; 1e-1,  0.0,&#xA;          0.0, 1e-1;&#xA;&#xA;    kalman.measurementNoiseCov = R;&#xA;&#xA;    char textBuffer[80];&#xA;    cv::Scalar green = CV_RGB(0,255,0);&#xA;    float speed = 0.0;&#xA;    bool learnMode = false;&#xA;&#xA;    // Main loop&#xA;&#xA;    while (1) {&#xA;&#xA;        // Key input&#xA;&#xA;        int key = cv::waitKey(33);&#xA;        if (key == 0x1b) break;&#xA;&#xA;        // Get an image&#xA;&#xA;        cv::Mat image = ardrone.getImage();&#xA;&#xA;        // HSV image&#xA;&#xA;        cv::Mat hsv;&#xA;        cv::cvtColor(image, hsv, cv::COLOR_BGR2HSV_FULL);&#xA;&#xA;        // Binalize&#xA;&#xA;        cv::Mat binalized;&#xA;        cv::Scalar lower(minH, minS, minV);&#xA;        cv::Scalar upper(maxH, maxS, maxV);&#xA;        cv::inRange(hsv, lower, upper, binalized);&#xA;&#xA;        // Show result&#xA;&#xA;        cv::imshow(&quot;binalized&quot;, binalized);&#xA;&#xA;        // De-noising&#xA;&#xA;        cv::Mat kernel = getStructuringElement(cv::MORPH_RECT, cv::Size(3, 3));&#xA;        cv::morphologyEx(binalized, binalized, cv::MORPH_CLOSE, kernel);&#xA;        //cv::imshow(&quot;morphologyEx&quot;, binalized);&#xA;&#xA;        // Detect contours&#xA;&#xA;        std::vector&amp;lt;std::vector&amp;lt;cv::Point&amp;gt;&amp;gt; contours;&#xA;        cv::findContours(binalized.clone(), contours, cv::RETR_CCOMP, cv::CHAIN_APPROX_SIMPLE);&#xA;&#xA;        // Find largest contour&#xA;&#xA;        int contour_index = -1;&#xA;        double max_area = 0.0;&#xA;&#xA;        for (size_t i = 0; i &amp;lt; contours.size(); i++) {&#xA;            double area = fabs(cv::contourArea(contours[i]));&#xA;            if (area &amp;gt; max_area) {&#xA;                contour_index = i;&#xA;                max_area = area;&#xA;            }&#xA;        }&#xA;&#xA;        // Object detected&#xA;&#xA;        if (contour_index &amp;gt;= 0) {&#xA;&#xA;            // Moments&#xA;            cv::Moments moments = cv::moments(contours[contour_index], true);&#xA;            double marker_y = (int)(moments.m01 / moments.m00);&#xA;            double marker_x = (int)(moments.m10 / moments.m00);&#xA;&#xA;            // Measurements&#xA;&#xA;            cv::Mat measurement = (cv::Mat1f(2, 1) &amp;lt;&amp;lt; marker_x, marker_y);&#xA;&#xA;            // Correction&#xA;&#xA;            cv::Mat estimated = kalman.correct(measurement);&#xA;&#xA;            // Show result&#xA;&#xA;            cv::Rect rect = cv::boundingRect(contours[contour_index]);&#xA;            cv::rectangle(image, rect, cv::Scalar(0, 255, 0));&#xA;        }&#xA;&#xA;        // Prediction&#xA;&#xA;        cv::Mat1f prediction = kalman.predict();&#xA;        int radius = 1e+3 * kalman.errorCovPre.at&amp;lt;float&amp;gt;(0, 0);&#xA;&#xA;        // Calculate object heading fraction&#xA;&#xA;        float heading = -((image.cols/2)-prediction(0, 0))/(image.cols/2);&#xA;        sprintf(textBuffer, &quot;heading = %+3.2f&quot;, heading);&#xA;        putText(image, textBuffer, cvPoint(30,30), cv::FONT_HERSHEY_COMPLEX_SMALL, 0.8, green, 1, CV_AA);&#xA;&#xA;        // Show predicted position&#xA;&#xA;        cv::circle(image, cv::Point(prediction(0, 0), prediction(0, 1)), radius, green, 2);&#xA;&#xA;        //Speed&#xA;&#xA;        if ((key &amp;gt;= '0') &amp;amp;&amp;amp; (key &amp;lt;= '9')) {&#xA;            speed = (key-'0')*0.1;&#xA;            //printf(&quot;speed = %3.2f\n&quot;, speed);&#xA;        }&#xA;&#xA;        sprintf(textBuffer, &quot;speed = %3.2f&quot;, speed);&#xA;        putText(image, textBuffer, cvPoint(30,60), cv::FONT_HERSHEY_COMPLEX_SMALL, 0.8, green, 1, CV_AA);&#xA;&#xA;        // Drone control&#xA;&#xA;        double vx = 0.0, vy = 0.0, vz = 0.0, vr = 0.0;&#xA;&#xA;        // Auto-follow&#xA;&#xA;        vx = speed;&#xA;        vr = -heading;&#xA;&#xA;        if (key == 0x260000) vx =  1.0;&#xA;        if (key == 0x280000) vx = -1.0;&#xA;        if (key == 0x250000) vr =  1.0;&#xA;        if (key == 0x270000) vr = -1.0;&#xA;        if (key == 'q')      vz =  1.0;&#xA;        if (key == 'a')      vz = -1.0;&#xA;        ardrone.move3D(vx, vy, vz, vr);&#xA;&#xA;    // See you&#xA;&#xA;    ardrone.close();&#xA;&#xA;    return 0;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I also tried using PID's like so.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;        // Find largest contour&#xA;        int contour_index = -1;&#xA;        double max_area = 0.0;&#xA;        for (int i = 0; i &amp;lt; (int)contours.size(); i++) {&#xA;            double area = fabs(cv::contourArea(contours[i]));&#xA;            if (area &amp;gt; max_area) {&#xA;                contour_index = i;&#xA;                max_area = area;&#xA;            }&#xA;        }&#xA;&#xA;        // A marker detected&#xA;        if (contour_index &amp;gt;= 0) {&#xA;            // Moments&#xA;            cv::Moments moments = cv::moments(contours[contour_index], true);&#xA;            marker.y = (int)(moments.m01 / moments.m00);&#xA;            marker.x = (int)(moments.m10 / moments.m00);&#xA;&#xA;            // Show result&#xA;            cv::Rect rect = cv::boundingRect(contours[contour_index]);&#xA;            cv::rectangle(image, rect, cv::Scalar(0, 255, 0));&#xA;            //cv::drawContours(image, contours, contour_index, cv::Scalar(0,255,0));&#xA;        }&#xA;&#xA;        // Take off / Landing &#xA;        if (key == ' ') {&#xA;            if (ardrone.onGround()) ardrone.takeoff();&#xA;            else                    ardrone.landing();&#xA;        }&#xA;&#xA;        // Move using keyboard&#xA;        double vx = 0.0, vy = 0.0, vz = 0.0, vr = 0.0;&#xA;        if (key == 0x260000) vx =  1.0;&#xA;        if (key == 0x280000) vx = -1.0;&#xA;        if (key == 0x250000) vr =  1.0;&#xA;        if (key == 0x270000) vr = -1.0;&#xA;        if (key == 'q')      vz =  1.0;&#xA;        if (key == 'a')      vz = -1.0;&#xA;&#xA;        // Switch tracking ON/OFF&#xA;        static int track = 0;&#xA;        if (key == 't') track = !track;&#xA;        cv::putText(image, (track) ? &quot;track on&quot; : &quot;track off&quot;, cv::Point(10, 20), cv::FONT_HERSHEY_SIMPLEX, 0.5, (track) ? cv::Scalar(0, 0, 255) : cv::Scalar(0, 255, 0), 1, CV_AA);&#xA;&#xA;        // Marker tracking&#xA;        if (track) {&#xA;            // PID gains&#xA;            const double kp = 0.001;&#xA;            const double ki = 0.000;&#xA;            const double kd = 0.000;&#xA;&#xA;            // Errors&#xA;            double error_x = (binalized.rows / 2 - marker.y);   // Error front/back&#xA;            double error_y = (binalized.cols / 2 - marker.x);   // Error left/right&#xA;&#xA;            // Time [s]&#xA;            static int64 last_t = 0.0;&#xA;            double dt = (cv::getTickCount() - last_t) / cv::getTickFrequency();&#xA;            last_t = cv::getTickCount();&#xA;&#xA;            // Integral terms&#xA;            static double integral_x = 0.0, integral_y = 0.0;&#xA;            if (dt &amp;gt; 0.1) {&#xA;                // Reset&#xA;                integral_x = 0.0;&#xA;                integral_y = 0.0;&#xA;            }&#xA;            integral_x += error_x * dt;&#xA;            integral_y += error_y * dt;&#xA;&#xA;            // Derivative terms&#xA;            static double previous_error_x = 0.0, previous_error_y = 0.0;&#xA;            if (dt &amp;gt; 0.1) {&#xA;                // Reset&#xA;                previous_error_x = 0.0;&#xA;                previous_error_y = 0.0;&#xA;            }&#xA;            double derivative_x = (error_x - previous_error_x) / dt;&#xA;            double derivative_y = (error_y - previous_error_y) / dt;&#xA;            previous_error_x = error_x;&#xA;            previous_error_y = error_y;&#xA;&#xA;            // Command velocities&#xA;            vx = kp * error_x + ki * integral_x + kd * derivative_x;&#xA;            vy = kp * error_y + ki * integral_y + kd * derivative_y;&#xA;            vz = 0.0;&#xA;            vr = 0.0;&#xA;            std::cout &amp;lt;&amp;lt; &quot;(vx, vy)&quot; &amp;lt;&amp;lt; &quot;(&quot; &amp;lt;&amp;lt; vx &amp;lt;&amp;lt; &quot;,&quot; &amp;lt;&amp;lt; vy &amp;lt;&amp;lt; &quot;)&quot; &amp;lt;&amp;lt; std::endl;&#xA;        }&#xA;&#xA;        // Move&#xA;        ardrone.move3D(vx, vy, vz, vr);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="18398" LastEditorUserId="37" LastEditDate="2017-10-18T15:37:28.760" LastActivityDate="2017-10-18T15:37:28.760" Title="How to make a line following algortihm for an A.R Drone 2.0?" Tags="&lt;pid&gt;&lt;c++&gt;&lt;opencv&gt;&lt;first-robotics&gt;" AnswerCount="0" CommentCount="3" FavoriteCount="1" ClosedDate="2017-10-18T17:22:00.740" ContentLicense="CC BY-SA 3.0" />
  <row Id="14464" PostTypeId="1" AcceptedAnswerId="14465" CreationDate="2017-10-18T16:49:08.340" Score="1" ViewCount="85" Body="&lt;p&gt;I am reading about Condition Number which is considered as measure of manipulability of robotic arm, it is defined as&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;k = \parallel J \parallel \parallel J^{-1} \parallel&#xA;$$&#xA;Where,&#xA;$$&#xA;\parallel J \parallel = \sqrt {tr(JNJ^{T})}&#xA;$$&#xA;How this can be a unique value for given end effector location, as manipulator can reach a point in workspace with different joint variable values, which in turn will change Jacobian value ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Reference Paper&lt;/strong&gt;: Comparative study of performance indices for fundamental robot&#xA;manipulators&#xA;Serdar Kucuka,1, Zafer Bingulb,&lt;/p&gt;&#xA;" OwnerUserId="10758" LastActivityDate="2017-10-18T17:36:51.043" Title="How can serial manipulator have unique condition number for given end effector position?" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;manipulator&gt;&lt;jacobian&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14465" PostTypeId="2" ParentId="14464" CreationDate="2017-10-18T17:36:51.043" Score="5" Body="&lt;p&gt;Condition number and manipulability are measured at a specific &lt;em&gt;joint configuration&lt;/em&gt;, not end-effector location. You already understand it correctly that the values change according to the robot configuration as they are computed from the Jacobian.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may also want to check out Yoshikawa's &lt;a href=&quot;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.1019.8191&amp;amp;rep=rep1&amp;amp;type=pdf&quot; rel=&quot;noreferrer&quot; title=&quot;original paper&quot;&gt;original paper&lt;/a&gt; on manipulability.&lt;/p&gt;&#xA;" OwnerUserId="7610" LastActivityDate="2017-10-18T17:36:51.043" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14466" PostTypeId="2" ParentId="7882" CreationDate="2017-10-18T19:54:12.543" Score="1" Body="&lt;p&gt;The right hand rule will help you here. For a given joint i: your thumb will correspond to the Zi-1 axis, your index will correspond to the Zi axis and your middle finger will correspond to Xi axis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the wikipedia page on the right hand rule, I linked it so people can look at the image if ever they forgot what the rule was. &lt;a href=&quot;https://en.wikipedia.org/wiki/Right-hand_rule&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Right-hand_rule&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18400" LastEditorUserId="37" LastEditDate="2017-10-20T10:24:34.867" LastActivityDate="2017-10-20T10:24:34.867" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14468" PostTypeId="2" ParentId="14461" CreationDate="2017-10-19T06:55:08.993" Score="2" Body="&lt;p&gt;Your question kind of boils down to, what is real time ? &#xA;In the end real time is what you want/specify for your system to work, whether it be hard real time or soft real time. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In practice ROS is not hard real-time, but is sufficient enough for most robotics applications. &#xA;It seems to be that you are trying to take into account the latency between your submodules in your system. By experience I would recommend you to first try assuming there are latencies and see how your system works, and if needed investigate the latency issue. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now for the problem you describe I would rather use the time-stamp in messages because they should give you the date at which they where emitted and compare it with the current machine time (aka the time you get in 1) ). One of the main motivation of defining interfaces between component with timestamps, is to have this simple to way to check if the input that you want to use are  fresh (no latency correction needed), less fresh (latency correction to be taken into account) or old (re-design of the architecture).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now what can impact the delay/latency in the software your describe ? &#xA;It is the computational power required for your algorithms vs.  the computational power at hand to run them. From your post it's hard to see, but a small board like (Pi,beaglebone,...) should be able to handle PID and Kalman filter (for reasonable number of states). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;From a robotic perspective, balance boards are inverted pendulum so you try to stabilize an unstable equilibrium and you run your PID at 500Hz, from experience it sounds reasonable. Specifically because running faster and faster will increase your performances but at some point you will realize that the actuators are filtering the inputs so much that running the control faster dosen't bring anything.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastEditorUserId="18235" LastEditDate="2017-10-23T08:38:45.980" LastActivityDate="2017-10-23T08:38:45.980" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14469" PostTypeId="1" AcceptedAnswerId="14495" CreationDate="2017-10-19T07:47:51.020" Score="2" ViewCount="514" Body="&lt;p&gt;I am trying to formulate an optimization problem for determining link lengths of 3R manipulator shown in picture below,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/5CvsW.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/5CvsW.png&quot; alt=&quot;Schematic&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Following are the constraints,&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Robot arm should be reachable at point x = 100, y =0&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Link 3 should sweep minimum 60 deg. angle at the end point (i.e. min Φ = 240 deg, max  Φ = 300 deg)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;$ 20°\leq\theta_{1}\leq160°$, $ 200°\leq\theta_{2}\leq340°$, $ 200°\leq\theta_{3}\leq340°$&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Objective is to minimize $l_{1} + l_{2} + l_{3}$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I define 2nd constraint of minimum sweep angle mathematically?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Reference for 3R Robot kinematics:&lt;/strong&gt; &lt;a href=&quot;http://www.seas.upenn.edu/~meam520/notes/planarkinematics.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.seas.upenn.edu/~meam520/notes/planarkinematics.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Current Formulation:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$Minimize f(x) = l_{1} + l_{2} + l_{3}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$Subject \:to \: \: l_{1}\cos(\theta_{1})+l_{2}\cos(\theta_{1}+\theta_{2})+l_{3}\cos(\theta_{1}+\theta_{2}+\theta_{3}) = 100$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$ \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \:l_{1}\sin(\theta_{1})+l_{2}\sin(\theta_{1}+\theta_{2})+l_{3}\sin(\theta_{1}+\theta_{2}+\theta_{3}) = 0$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$ \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \:  20°\leq\theta_{1}\leq160°$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$ \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \:  200°\leq\theta_{2}\leq340°$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$ \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \:  200°\leq\theta_{3}\leq340°$&lt;/p&gt;&#xA;" OwnerUserId="10758" LastActivityDate="2017-10-23T00:31:52.720" Title="Optimization of link lengths for 3R serial manipulator" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;inverse-kinematics&gt;&lt;forward-kinematics&gt;&lt;manipulator&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14470" PostTypeId="1" AcceptedAnswerId="14473" CreationDate="2017-10-19T10:11:01.377" Score="0" ViewCount="119" Body="&lt;p&gt;What's technology robot vacuum cleaner used to locate it's charger when battery is low ?&lt;/p&gt;&#xA;" OwnerUserId="18406" LastActivityDate="2017-10-19T15:07:24.150" Title="How's robot vacuum cleaner back to charger when battery is low?" Tags="&lt;mobile-robot&gt;&lt;control&gt;&lt;localization&gt;&lt;raspberry-pi&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ClosedDate="2017-10-20T10:23:36.110" ContentLicense="CC BY-SA 3.0" />
  <row Id="14471" PostTypeId="1" AcceptedAnswerId="14492" CreationDate="2017-10-19T10:22:38.440" Score="0" ViewCount="582" Body="&lt;p&gt;I'm using monocular visual odometry. As in this case absolute scale can't be recovered, we rather compute relative scale for subsequent transformations as in this &lt;a href=&quot;https://docs.google.com/viewer?url=http%3A%2F%2Frpg.ifi.uzh.ch%2Fdocs%2FVO_Part_I_Scaramuzza.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;tutorial&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To do this, triple matches across three frames are required. We then triangulate two $3D$ points $X_{m}$ and $X_{n}$ from images $\{i,i+1\}$ and $\{i-1,i\}$  then the relative scale can be determined from the distance ratio between point pairs in subsequent image pairs as follows:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$r=\frac{\parallel X_{m,\{i,i+1\}}-X_{n,\{i,i+1\}}\parallel}{\parallel X_{m,\{i-1,i\}}-X_{n,\{i-1,i\}}\parallel}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question concernes the coordinate system of the triangulated $3D$ points, the points have to be expressed in the coordinate system of the first, second or third frame or it dosen't matter as we are using the norm?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The triangulation method that I'm using outputs a $3D$ point expressed in the first viewpoint. How to convert it to another viewpoint?&lt;/p&gt;&#xA;" OwnerUserId="17442" LastEditorUserId="17442" LastEditDate="2017-10-19T10:51:47.487" LastActivityDate="2021-05-14T12:43:42.573" Title="Relative scale in SfM" Tags="&lt;computer-vision&gt;&lt;3d-reconstruction&gt;&lt;structure-from-motion&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14473" PostTypeId="2" ParentId="14470" CreationDate="2017-10-19T11:28:07.820" Score="1" Body="&lt;p&gt;I can't say that all robot vacuum cleaners use it, but the models that I have played with (the &lt;a href=&quot;http://www.trustedreviews.com/reviews/neato-xv-11&quot; rel=&quot;nofollow noreferrer&quot;&gt;Neato XV-15&lt;/a&gt; and &lt;a href=&quot;https://www.vacuumsguide.com/xiaomi-mi-robot-vacuum-cleaner/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Xiaomi Mi&lt;/a&gt;) use variations of the Simultaneous Location and Mapping (&lt;a href=&quot;https://en.wikipedia.org/wiki/Simultaneous_localization_and_mapping&quot; rel=&quot;nofollow noreferrer&quot;&gt;SLAM&lt;/a&gt;) algorithm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both robots use a LIDAR as the main navigation sensor for SLAM. There is a rather nice paper available on the &lt;a href=&quot;https://www.diva-portal.org/smash/get/diva2:995686/FULLTEXT01.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Characterization of the Neato LIDAR unit&lt;/a&gt; if you would like more information.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In simple terms, the SLAM algorithm uses sensor data to create a map while the robot is cleaning. This allows it to plan a path from its current location back to the base station / charger at the end of the cleaning cycle, or when the battery charge drops below a predefined threshold.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are unfamiliar with SLAM, a good place to start is the &lt;a href=&quot;https://ocw.mit.edu/courses/aeronautics-and-astronautics/16-412j-cognitive-robotics-spring-2005/projects/1aslam_blas_repo.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;SLAM for Dummies&lt;/a&gt; guide produced by Søren Riisgaard and Morten Rufus Blas at MIT.&lt;/p&gt;&#xA;" OwnerUserId="17029" LastEditorUserId="17029" LastEditDate="2017-10-19T15:07:24.150" LastActivityDate="2017-10-19T15:07:24.150" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="14474" PostTypeId="1" CreationDate="2017-10-19T18:32:30.707" Score="2" ViewCount="91" Body="&lt;p&gt;What I've been noodling on is how to convert that energy into thrust to create an all electric model rocket. I got as far as realizing that dumping electricity from a battery into a capacitor might result in fast enough power discharge, but I am stuck on converting that electricity into thrust for a model rocket. Any ideas?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is related to the following Stack Exchange question:  &lt;a href=&quot;https://robotics.stackexchange.com/questions/7234/are-lipo-really-100-times-more-energy-dense-than-model-rockets/14454?noredirect=1#comment23511_14454&quot;&gt;Are LiPo really 100 times more energy dense than model rockets?&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18392" LastActivityDate="2017-10-19T18:32:30.707" Title="How could I make an all electric model rocket?" Tags="&lt;battery&gt;&lt;electric&gt;&lt;rocket&gt;" AnswerCount="0" CommentCount="5" ClosedDate="2017-10-19T21:17:17.137" ContentLicense="CC BY-SA 3.0" />
  <row Id="14475" PostTypeId="2" ParentId="14445" CreationDate="2017-10-19T19:12:42.660" Score="1" Body="&lt;p&gt;Here's a quick answer. We can work on it to improve. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you are searching for is the &quot;trim state&quot; of the vehicle for a given height and velocity (or hover). Methodologies for finding trim state is given in textbooks as &quot;trim theory&quot;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are a few very general &lt;strong&gt;trim search&lt;/strong&gt; methods:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) &lt;em&gt;solving an optimization problem&lt;/em&gt;: iteratively trying several values for states (attitudes, linear velocities, control positions, etc) Matlab has some built in functions for non linear optimization. Namely, &lt;em&gt;fminsearch&lt;/em&gt;, &lt;em&gt;fmincon&lt;/em&gt;, &lt;em&gt;fsolve&lt;/em&gt;, etc. of course, you could write your own optimization script as well. Not too difficult, and definitely worth the effort. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) &lt;em&gt;using a gentle autopilot&lt;/em&gt; to converge on the desired flight conditions (requires a working flight controller, at least a SAS and an attitude hold mode)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Answers to particular questions:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Is this a feasible approach? Yes. Although a bit simplified, the method results in a representative vehicle that control algorithms can be developed on. However if the research is only about the controller side, a functional, working, linearizable plant would be a better option. Consumes less energy for making it work, and leaves more energy for designing a controller.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;How to get to a particular height? You simply start your simulation at that height, and see what happens. For quadrotors, the RPM would need to be increased as air density decreases with altitude. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I couldn't understand why you'd need angular velocities in body frame, to catch an altitude. You need to have zero angular velocities during a trimmed flight condition. (Unless it's a trim of a maneuver like coordinated turn, or a wind up turn).&lt;/p&gt;&#xA;" OwnerUserId="9570" LastActivityDate="2017-10-19T19:12:42.660" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14476" PostTypeId="1" CreationDate="2017-10-20T08:03:04.477" Score="1" ViewCount="1057" Body="&lt;p&gt;I have written a MATLAB code for inverse kinematics of 3R robotic arm, which returns value of joint angles for given link lengths and end effector position and orientation. But if location of point is outside the workspace or it can’t be reached with certain orientation the program gives error.&#xA;Is there any way to check whether a particular point is reachable with a given orientation ?&lt;/p&gt;&#xA;" OwnerUserId="10758" LastActivityDate="2017-10-21T02:49:07.250" Title="How to check reachability of manipulator to a point?" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;inverse-kinematics&gt;&lt;forward-kinematics&gt;&lt;manipulator&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14477" PostTypeId="2" ParentId="14476" CreationDate="2017-10-20T08:50:42.007" Score="2" Body="&lt;p&gt;You are basically asking if a given tool transformation has a corresponding IK solutions. This question, unfortunately, currently has no universal shortcut other than trying to actually compute IK solutions and see if any exists.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nevertheless, I think there are a number of heuristics that you can use to speed up the process. For example, if the given position is farther from the base than the combined link lengths, you can be sure that no solution exists without checking further. You can also reach for works on &lt;strong&gt;reachability map&lt;/strong&gt;.&lt;/p&gt;&#xA;" OwnerUserId="7610" LastActivityDate="2017-10-20T08:50:42.007" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14479" PostTypeId="1" CreationDate="2017-10-20T11:46:13.810" Score="1" ViewCount="1000" Body="&lt;p&gt;The length of the last link (1.73) of my model (of a human finger) is not represented in any of the parameters that I calculated using the Denavit-Hartenberg algorithm, which I think can't be right. I suppose it should be represented in either a₃ or α₃, but those are both 0. It should be noted that the model has no end-effector/tool, but I aligned the z₃ with the approach vector anyway. If anyone has an idea where I'm messing up, that would be much appreciated! The model in question:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/hh5hJ.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hh5hJ.jpg&quot; alt=&quot;Denavit-Hartenberg representation of a human finger&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18408" LastEditorUserId="18408" LastEditDate="2017-10-20T12:03:05.630" LastActivityDate="2017-10-21T02:28:35.743" Title="Why does the Denavit-Hartenberg representation fail to capture the length of the last link in my model?" Tags="&lt;robotic-arm&gt;&lt;algorithm&gt;&lt;manipulator&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14480" PostTypeId="2" ParentId="14479" CreationDate="2017-10-20T14:13:06.067" Score="0" Body="&lt;p&gt;I'm not sure why you're not following your own pattern. You have&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;a1 = PP;&#xA;a2 = IP;&#xA;a3 = 0;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Why would &lt;code&gt;a3&lt;/code&gt; not be &lt;code&gt;DP&lt;/code&gt;?&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-10-20T14:13:06.067" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14482" PostTypeId="1" CreationDate="2017-10-20T17:17:04.483" Score="1" ViewCount="47" Body="&lt;p&gt;It is clear it is not a good idea to do resampling in a particle filter if the robot is not moving (there is no action), as the particles will converge towards a simple particle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, Probabilistic Robotics book quickly mentions &quot;It is usually a good idea to stop measurement integration if the robot does not move&quot;. However, I am not able to fully understand why.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My only guess is that, if robot does not move the sampling (which not resampling) will give the same particles. Therefore, is there any other negative effect other than wasting computational power? Because in a world with lots of noise I think it might be helpful to keep the sampling running to have move proper weights over time.&lt;/p&gt;&#xA;" OwnerUserId="11478" LastActivityDate="2017-10-20T17:17:04.483" Title="Why to stop a particle filter if the robot does not move?" Tags="&lt;particle-filter&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14483" PostTypeId="2" ParentId="14439" CreationDate="2017-10-20T20:33:22.397" Score="1" Body="&lt;p&gt;This has a slightly longer answer than you may prefer, but the extra knowledge is necessary to get your result.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The useful values there are the 4-6V, 500mA, and the 3mm pitch. The motor will give you up to 3 watts of power. Power = torque x speed (kinda, I oversimplify slightly but its accurate). Now here's where the stepper can be handy: you can run it 'slowly'. Take a look at the charts on &lt;a href=&quot;http://www.orientalmotor.com/stepper-motors/technology/speed-torque-curves-for-stepper-motors.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.orientalmotor.com/stepper-motors/technology/speed-torque-curves-for-stepper-motors.html&lt;/a&gt;   You don't need to study the charts in too much detail; just notice that slope, showing that they have the most force at around 200-400 RPM, almost regardless of the particular motor. Also, stepper motors often are combined with gears - that exact website sells them, and you can reduce the gearing beyond 30:1 if you want it to move really slowly. That website just so happens to have a calculator for this exact application! &lt;a href=&quot;http://www.orientalmotor.com/motor-sizing/ballLeadScrew-sizing.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.orientalmotor.com/motor-sizing/ballLeadScrew-sizing.html&lt;/a&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just be aware that you'll need at least an Arduino board and a special driver for a stepper motor. They operate differently from other motor types, hence why they have 4 wires.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wish I could give you easier answers, but unfortunately I've not found simple answers for electric motors either.  The easiest way to start is to get a simple DC motor or geared DC motor (more extreme gearing means more power, but slower) and you could attach it to a setup like that to spin the screw. You may still want/need a controller circuit for it.&lt;/p&gt;&#xA;" OwnerUserId="18168" LastActivityDate="2017-10-20T20:33:22.397" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14485" PostTypeId="2" ParentId="14479" CreationDate="2017-10-21T02:28:35.743" Score="2" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/y71MR.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/y71MR.jpg&quot; alt=&quot;3 Link Planar robot arm&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that in your drawing theta_p and theta_d angle are negative according to the right hand rule. That's the first mistake you made, to elaborate, theta_1 is equal to -theta_p.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also in the last row of your DH table, the translation of DP is in the negative Y direction. Do not forget that the order matters - although there are 5 different combinations of orders of matrix multiplications to calculate the homogeneous transformation matrix.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Forget about the 5 different combinations and stick with the standard one:&#xA;First rotation about Z&#xA;Second translation along Z&#xA;Third translation along X&#xA;Fourth rotation about X&lt;/p&gt;&#xA;" OwnerUserId="18352" LastActivityDate="2017-10-21T02:28:35.743" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14486" PostTypeId="2" ParentId="14476" CreationDate="2017-10-21T02:49:07.250" Score="1" Body="&lt;p&gt;First find the workspace of the robot arm.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The easy method is to model the robot arm and to apply ramp functions to the first two joints and a sine function to the last joint. Use the probe block to record the end effector positions. Ensure that the simulation length is sufficiently long enough. &lt;/li&gt;&#xA;&lt;li&gt;The hard method is to find it analytically as given &lt;a href=&quot;https://www.idc-online.com/technical_references/pdfs/mechanical_engineering/AN%20ANALYTICAL%20METHOD%20TO%20FIND%20WORKSPACE%20OF%20A%20ROBOTIC%20MANIPULATOR.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Second export result to MATLAB and plot a 3D graph using the plot3 command. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Third for every point you want to test; plot it on the same graph and you will immediately see if it's within the workspace or not. &lt;/p&gt;&#xA;" OwnerUserId="18352" LastActivityDate="2017-10-21T02:49:07.250" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14487" PostTypeId="2" ParentId="14284" CreationDate="2017-10-21T08:01:49.180" Score="0" Body="&lt;p&gt;If you are looking for training a neural network on Arduino, it might not be a very good idea. For this purpose, i would suggest a device with higher computation power, such as your own computer or a Raspberry-Pi .&#xA;However, if you wish to run a neural network on Arduino after training it and using the obtained weights, it can be done and there are a few libraries on the web that can help you out.&#xA;For the purpose of using cloud-based data, Tensorflow would be a good starting point.&lt;/p&gt;&#xA;" OwnerUserId="15008" LastActivityDate="2017-10-21T08:01:49.180" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14488" PostTypeId="1" CreationDate="2017-10-21T10:54:46.670" Score="2" ViewCount="376" Body="&lt;p&gt;I have this exercise&#xA;&lt;a href=&quot;https://i.stack.imgur.com/ROHtG.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ROHtG.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The dynamic model is&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$B(q)\ddot{q}+S(q,\dot{q})\dot{q}=\tau+\tau_k$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where $B(q)$ is the inertia matrix, $S(q,\dot{q})\dot{q}$ are the centrifugal and Coriolis terms, $\tau$ is the actuator input and $\tau_k=J^T(q)F$ is the torque imposed by the external force. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So since at rest $\ddot{p}=J(q)\ddot{q}$, $S(q,\dot{q})\dot{q}=0$ and we have no actuator input, substituting $\ddot{q}$ from the dynamic model we have&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\ddot{p}=J(q)B^{-1}(q)J^T(q)F$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I assume that for the point 1, for the second principle of the dynamics, the end-effector accelerates as in the case B. Now, in the point 3, if we have non-uniform masses of the links, the second principle of the dynamics is still valid? I guess I can choose an inertia matrix $B(q)$ with proper centers of mass of the three links such that at the rest configuration $q_{eq}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\ddot{p}=J(q_{eq})B^{-1}(q_{eq})J^T(q_{eq})F=\begin{bmatrix} p_1 \\ 0 \\ 0\end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and so the end effector accelerates as the case D right?&lt;/p&gt;&#xA;" OwnerUserId="16562" LastEditorUserId="16562" LastEditDate="2017-10-23T16:21:39.477" LastActivityDate="2018-03-23T11:50:08.417" Title="Dynamics of a robot manipulator with a force acting on the end-effector" Tags="&lt;dynamics&gt;&lt;manipulator&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14492" PostTypeId="2" ParentId="14471" CreationDate="2017-10-22T11:59:08.543" Score="1" Body="&lt;p&gt;The answer simply is, it does not really matter because you're using the norm. The scale is determined by the actual translation and rotation between two cameras (which in case of monocular odometry are two views from the same calibrated camera). This rotation and translation information is contained in the essential matrix (or fundamental matrix) which has a scale ambiguity. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another point I'd like to mention is, triangulation using monocular images is seldom very accurate. So if your objective is to determine the scale of subsequent images to generate a trajectory, I suggest taking a median of many ratios between many corresponding points, because it will work much better than randomly selecting two points and calculating r. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To express your 3D point to another viewpoint, use bundle adjustment.&lt;/p&gt;&#xA;" OwnerUserId="7823" LastActivityDate="2017-10-22T11:59:08.543" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14493" PostTypeId="1" CreationDate="2017-10-22T16:18:19.903" Score="1" ViewCount="5329" Body="&lt;p&gt;Since some months on many websites, I read and I have seen images of the Alibaba (the Chinese e-commerce giant) warehouses. One example is the following article: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.dailymail.co.uk/news/article-4754078/China-s-largest-smart-warehouse-manned-60-robots.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.dailymail.co.uk/news/article-4754078/China-s-largest-smart-warehouse-manned-60-robots.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems interesting and it seems really the same Amazon is doing with its Kiva Systems. &lt;strong&gt;The equivalent of Kiva Systems here should be a company called Quicktron&lt;/strong&gt; but I am not able to find anything about it on the internet. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Someone of you has any knowledge about this company? A website? &lt;/p&gt;&#xA;" OwnerUserId="10852" LastEditorUserId="37" LastEditDate="2018-06-29T15:19:25.153" LastActivityDate="2018-06-29T15:19:25.153" Title="Quicktron company - Mobile robots (Equivalent of Kiva Systems?)" Tags="&lt;mobile-robot&gt;&lt;multi-agent&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2018-06-29T15:11:52.290" ContentLicense="CC BY-SA 4.0" />
  <row Id="14494" PostTypeId="1" CreationDate="2017-10-22T20:55:02.527" Score="1" ViewCount="177" Body="&lt;p&gt;I have been searching for a solution to the mentioned above problem, but nothing was accurate enough.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am trying to find the optimal-time trajectory for an object from initial point A to final point B.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The velocity at those points is &lt;strong&gt;0&lt;/strong&gt;, and the max velocity and acceleration are &lt;strong&gt;v_max&lt;/strong&gt; and &lt;strong&gt;a_max&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can i solve this?&lt;/p&gt;&#xA;" OwnerUserId="18439" LastActivityDate="2017-10-24T09:07:38.743" Title="Optimal-Time Trajectory Planning in 1D" Tags="&lt;motion-planning&gt;&lt;path-planning&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14495" PostTypeId="2" ParentId="14469" CreationDate="2017-10-23T00:31:52.720" Score="1" Body="&lt;p&gt;You can try this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Suppose we break the chain of the original robot $R$ into two: $R_1$ with two links (the first and the second links of $R$), $R_2$ with one link. $R_1$ is based at the base of $R$ while $R_2$ is based at your grasping point. See figure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/rTHgX.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rTHgX.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When link 3 sweeps $60^\circ$, $R_2$ will trace an arc of a circle. Then what you want is that $R_1$ can also trace the arc traced by $R_2$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think it is the case that this two-link robot can trace out any smooth curve within its reachable region (the circle of radius $l_1 + l_2$ centered at the case of $R_1$). (You will need to prove (or disprove) this, but I guess it's not too difficult.) So you just need to make sure that the arc drawn by $R_2$ lies inside the reachable region of $R_1$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using some geometry, the above condition should be able to be written down as a constraint (or a set of constraints) for your optimization problem.&lt;/p&gt;&#xA;" OwnerUserId="7610" LastActivityDate="2017-10-23T00:31:52.720" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14496" PostTypeId="2" ParentId="14494" CreationDate="2017-10-23T08:46:42.083" Score="3" Body="&lt;p&gt;Hi usually the time optimal solution of a motion not having specific constraints is know as 'bang-bang'. Where you let you system accelerate and decelerate at the maximum rate possible. &#xA;In your case, you command &lt;code&gt;a_max&lt;/code&gt; until &lt;code&gt;v_max&lt;/code&gt; is reached then you stay at this speed until you need to break at &lt;code&gt;-a_max&lt;/code&gt; to reach zero velocity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also suggest to look at Pontryagin's maximum principle&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How to do that in practice, i.e. how to find the profiles of the position/velocity/acceleration ?&#xA;This is the solution that is usually described, when the dynamic of the object is not considered, that means when control authority is unlimited.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;keep in mind that the problem is symmetric, i.e. you need as much time to accelerate then to decelerate;&lt;/li&gt;&#xA;&lt;li&gt;start from position, velocity and acceleration at zero (or higher derivative);&lt;/li&gt;&#xA;&lt;li&gt;apply a discontinuous acceleration from 0 to &lt;code&gt;a_max&lt;/code&gt; until &lt;code&gt;v_max&lt;/code&gt; is reached, check the time and the distance (you will need the same to brake);&lt;/li&gt;&#xA;&lt;li&gt;apply a discontinuous acceleration from &lt;code&gt;a_max&lt;/code&gt; to 0, this keep the velocity at &lt;code&gt;v_max&lt;/code&gt; do that until you arrive at half the distance (this will also be half the time);&lt;/li&gt;&#xA;&lt;li&gt;apply a discontinuous acceleration from 0 to &lt;code&gt;-a_max&lt;/code&gt; until the velocity is zero, you should have reached the goal (this is the inverse of 2) ) set acceleration to 0.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Note that if you goal is &quot;close&quot; you might not need to reach &lt;code&gt;v_max&lt;/code&gt; and should start to break before, hence the checks in time and distance. Also the best to visualize that is to draw the profile one below the other on a sheet of paper. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To the best of my knowledge this case without the dynamics is considered as simple and I don't know a solver for that, as coding the above algorithm reasonably easy. The assumption of neglecting the object dynamics is usually good enough for simple robots and brings to feasible motion for simple robots. If you want to be more gentle for the system considering higher order derivatives (jerk, snap) is possible but there maximal values are usually not intuitive to set/find, another solution is to take the position profile and feed it to a  5/6th oder filter, to get a smooth trajectory for all derivatives considered. &#xA;The literature for 'bang-bang' controller considering dynamics and actuation constraints is vast and encompass different cases that might fit you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In short if you are an hobbyist or undergrad  try this method out, if you want more advanced stuff you will need to dig the literature to find something close to your issue.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastEditorUserId="2289" LastEditDate="2017-10-24T09:07:38.743" LastActivityDate="2017-10-24T09:07:38.743" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="14499" PostTypeId="1" AcceptedAnswerId="14516" CreationDate="2017-10-23T21:33:30.540" Score="2" ViewCount="238" Body="&lt;p&gt;Background:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am working on a design in which an autonomous RC car implements a LIDAR sensor to navigate a course.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The primary LIDAR sensor returns a 270 array of points, scanning in a line like fashion, each representing the distance at a particular angle. These can easily be converted from polar to cartesian coordinates.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Question:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given a set of points how would you estimate the number of lines that exist within this plot and the slope of each line. An explanation for a simple linear regression is not required, an explanation on how to detect discontinuities between the data is helpful.&lt;/p&gt;&#xA;" OwnerUserId="18449" LastActivityDate="2017-12-26T09:04:47.010" Title="Multiple Line Estimation" Tags="&lt;lidar&gt;&lt;statistics&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14501" PostTypeId="2" ParentId="14488" CreationDate="2017-10-24T08:50:39.377" Score="1" Body="&lt;p&gt;If you consider a null velocity when you apply the force, then you cancel out the terms in your dynamics that are multiplied by the velocity, hence you can consider $S(q,\dot{q})q$ null  and $\ddot{p} = J q$ as $\dot{J}\dot{q}$ is null leading to your expression of the instantaneous acceleration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you rewrite it in the form $\dot{p} = A f$ (prefer capital for matrix and lowercase for vector if you can), then what you want to prove is that $A \in \mathbb{R}^{3 \times 3}$ is such that it maps a vector of the form $\begin{bmatrix} 0 \\ f_2 \\ 0 \end{bmatrix}$ to an acceleration $\begin{bmatrix} \ddot{p}_1 \\ 0 \\ 0 \end{bmatrix}$. You known the analytical structure of A from the Jacobian and Inertia matrices, so you can see if it is possible to get a second column of A of the desired form.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2017-10-24T08:50:39.377" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14502" PostTypeId="2" ParentId="14499" CreationDate="2017-10-24T09:49:54.083" Score="1" Body="&lt;p&gt;From technical point of view I would refer you to this &lt;a href=&quot;http://pointclouds.org/documentation/tutorials/random_sample_consensus.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;pcl tutorial&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From you description I guess that you want to navigate the car between lines. Looking a one scan and detecting the line is quite crude, a more complex approach would be to merge the LIDAR info with odometry info and use a SLAM algorithm to at the same time build a map of the environment and localize your vehicle inside. This way the points from your LIDAR are aggregate other time and it might be easier to extract features as they are composed of more point.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also a practical thing I would recommend you not to have the LIDAR plane parallel to the floor but with a couple of degree tilting so that in your point cloud you also get information about the ground.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2017-10-24T09:49:54.083" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14504" PostTypeId="1" AcceptedAnswerId="14682" CreationDate="2017-10-24T19:11:31.610" Score="4" ViewCount="3865" Body="&lt;p&gt;Hi i´m designing a robotic arm based on this idea of the &lt;a href=&quot;https://www.behance.net/gallery/47856101/NOVABOT&quot; rel=&quot;nofollow noreferrer&quot;&gt;NOVABOT&lt;/a&gt; I only want to change its structural parts by aluminum tubes. In this design &lt;a href=&quot;https://grabcad.com/library/novabot-industrial-robot-design-concept-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;3D&lt;/a&gt; model it use the servo hs-311 wish have a max torque of 3.7 kg/cm, and its made of some plastic material.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I made my calculations following &lt;a href=&quot;http://www.societyofrobots.com/robot_arm_tutorial.shtml#joint_force&quot; rel=&quot;nofollow noreferrer&quot;&gt;this url&lt;/a&gt; and made a excel that I append here... the mass of my design have been taken from iProperties of Autodesk Inventor, so they are in mass units not in weight. And I´m dismissing the mass of the joints (m5,m6) to have a first idea of the values, because I dont have the selected motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And my problems is that I think I´m missing something here because the it results in a very high torque motors, for this simple design.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/iUUN4.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/iUUN4.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://mega.nz/#!XRwDmbQR!jY_BNDgnkUeu2V4_tonrNdlxFQoix7zs1SRXicYOdSQ&quot; rel=&quot;nofollow noreferrer&quot;&gt;here is my excel&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18458" LastEditorUserId="17029" LastEditDate="2017-10-24T20:25:52.233" LastActivityDate="2019-01-02T17:58:09.447" Title="Robotic arm select servo motors" Tags="&lt;robotic-arm&gt;&lt;servomotor&gt;&lt;torque&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14505" PostTypeId="1" CreationDate="2017-10-25T17:59:01.347" Score="0" ViewCount="159" Body="&lt;p&gt;I am trying to run &quot;px4 SITL simulation&quot; using gazebo7 on my machine with &quot;UBUNTU-14.04 LTS&quot; using these commands:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;mkdir -p ~/src&#xA;cd ~/src&#xA;git clone https://github.com/PX4/Firmware.git&#xA;cd Firmware&#xA;git submodule update --init --recursive&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But as I enter the next command i.e : &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;make posix_sitl_default gazebo&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It gives an error --&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;CMake Error: The source directory &quot;/home/arpit/src/Firmware/build/posix_sitl_default/-Wno-deprecated&quot; does not exist.&#xA;Specify --help for usage, or press the help button on the CMake GUI.&#xA;/bin/sh: 1: cd: can't cd to /home/arpit/src/Firmware/build/posix_sitl_default &#xA;make: *** [posix_sitl_default] Error 2&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Any Solutions?&lt;/p&gt;&#xA;" OwnerUserId="18467" LastEditorUserId="37" LastEditDate="2017-10-26T14:25:35.683" LastActivityDate="2021-05-10T23:06:30.573" Title="Cmake Error While Buliding Pixhawk simulator" Tags="&lt;quadcopter&gt;&lt;ros&gt;&lt;simulation&gt;&lt;gazebo&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14508" PostTypeId="2" ParentId="14504" CreationDate="2017-10-26T02:04:27.813" Score="2" Body="&lt;p&gt;Well it seems that length is your problem.I came here having a similar problem to yours with designing a robotic arm. Servos that can pull this weight go for 500+ USD. Adapt the length and weight of your joints to what your servos can lift.&#xA;I would also suggest using 6V power supply to get more torque out of your servos and while datasheets are available for cheap servos from China you should not take the listed torque for granted.&lt;/p&gt;&#xA;" OwnerUserId="18472" LastActivityDate="2017-10-26T02:04:27.813" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14511" PostTypeId="1" CreationDate="2017-10-26T05:15:55.110" Score="1" ViewCount="42" Body="&lt;p&gt;I'm building my first robotic arm and I am new to robotics generally, but I have tried to do some research. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need to build a robotic arm that will be relatively lightweight and will need to grab things off of the shelf and place them higher up and then return them later. I have attached 3 photos showing the process I am imagining. The first shows the folded arm going to grab the object from the shelf. The second shows the arm extending up and the third shows the arm completely extended and placing the object on top of the shelf. The whole arm will be about 30 inches long and weigh about 3-4 pounds including the object it will be grabbing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that stepper motors are the best route to go but what kind of holding torque will i need for that weight as well as for gripping the weight of the object which is only (120-200 grams)? Also bipolar or unipolar?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a controller I am sure I need an Arduino but will the Uno be adequate to simultaneously control 6 motors? I don't think so. Any recommendations on one that will or how I can get multiple motors to move in sync? The arm's motions will be repetitive as there will only be so many places on the shelf for the arm to go, say 200 total. The command as to which spot will be sent remotely and I know Arduino has wifi options.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I will also need darlington arrays right? One for each motor? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Am I missing anything in terms of hardware? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help you can give me would be greatly appreciated. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/D12wR.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/D12wR.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18474" LastActivityDate="2017-10-26T05:15:55.110" Title="Correct Hardware for a Small Lightweight Robotic Arm" Tags="&lt;arduino&gt;&lt;robotic-arm&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14513" PostTypeId="1" CreationDate="2017-10-26T17:50:22.667" Score="-1" ViewCount="282" Body="&lt;p&gt;If my state vector is just a representation of the error state of a quaternion represented as $[\delta \bf{q} ]$ which is a 3x1 vector and my external update is from an accelerometer, how would I compute the jacobian $\bf{H}$ matrix?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One implementation that I've found uses $$&#xA;\bf{H} = [R^w_b g]_\times&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $\times$ represents the skew symmetric matrix and $\textbf{g} = [0, 0, 9.80665]^T$, $\textbf{R}^w_g$ the rotation matrix obtained from the true state quaternion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How does $z = Hx$ make sense in this formulation? Thank you!&lt;/p&gt;&#xA;" OwnerUserId="15179" LastActivityDate="2018-11-17T05:00:41.293" Title="How to compute the observation matrix for a Kalman Filter?" Tags="&lt;kalman-filter&gt;&lt;imu&gt;&lt;jacobian&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14514" PostTypeId="1" CreationDate="2017-10-26T19:34:46.090" Score="0" ViewCount="47" Body="&lt;p&gt;Dear Robotics Community,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am participating in a Robotics tourney that will start in a few weeks. The challenge I signed up for is to deliver and dump ping pong balls to a box. I already have my robot and the ball container built, but I need some help with coding it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I just need help coding an SR04 ultrasonic sensor for my Arduino robot. I want it so that when it senses the box in front of it, the robot turns on a motor and stops when the box is a certain distance away from the robot. I also want it to back up and go back to its starting position when it is done delivering the payload. I was told by my coach that a &quot;boolean variable&quot; would do the job, but I also do not know how to program this. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Here is the robot platform I am using: &lt;a href=&quot;https://www.elegoo.com/product/elegoo-uno-project-smart-robot-car-kit-v1-0/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.elegoo.com/product/elegoo-uno-project-smart-robot-car-kit-v1-0/&lt;/a&gt;)&lt;/p&gt;&#xA;" OwnerUserId="18470" LastActivityDate="2017-11-12T13:06:18.087" Title="How Do You Program the SR04 Ultrasonic Sensor?" Tags="&lt;mobile-robot&gt;&lt;arduino&gt;&lt;sensors&gt;&lt;wheeled-robot&gt;&lt;ultrasonic-sensors&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14515" PostTypeId="1" AcceptedAnswerId="14537" CreationDate="2017-10-27T01:43:03.693" Score="3" ViewCount="585" Body="&lt;p&gt;I have been given a Jacobian for a 3 revolute joint robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need to obtain the origins of each of the joint. Origins of the joints can be obtained once I get $T^0_1$, $T^0_2$, $T^0_3$ and $T^0_4$. 4th frame is my end effector. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any way to calculate the transformation matrices from the Jacobian? I have gone through literature extensively and I can get the Jacobian from the transformation matrices using the below relations&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Jacobian is &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$J = \begin{bmatrix}&#xA;J_v\\ &#xA;J_w&#xA;\end{bmatrix}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where for revolute joints,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ J_{v_i} = z_{i-1} \times (o_n - o_{i-1}) \\&#xA;J_{w_i} = z_{i-1}$$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is the reverse possible i.e, obtaining the transformation matrices when I have the Jacobian?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any way to obtain just the origins of the frames $ o_1, o_2, o_3$  ($o_0  = \begin{bmatrix}&#xA;0 &amp;amp;0 &amp;amp;0&#xA;\end{bmatrix}^T$ ) from the given Jacobian? The reverse cross product method does not give me the complete co-ordinates of the origin. &lt;/p&gt;&#xA;" OwnerUserId="18175" LastEditorUserId="18175" LastEditDate="2017-10-27T02:26:47.817" LastActivityDate="2017-10-30T15:44:46.527" Title="Using jacobian of arm robot to calculate transformation matrices?" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;forward-kinematics&gt;&lt;jacobian&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14516" PostTypeId="2" ParentId="14499" CreationDate="2017-10-27T07:36:08.243" Score="2" Body="&lt;p&gt;You can start by using &lt;a href=&quot;http://ieeexplore.ieee.org/document/905371/&quot; rel=&quot;nofollow noreferrer&quot;&gt;split-and-merge segmentation algorithm&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are many algorithms available &lt;a href=&quot;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.149.7666&amp;amp;rep=rep1&amp;amp;type=pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;A Comparison of Line Extraction Algorithms using 2D&#xA;Laser Rangefinder for Indoor Mobile Robotics&lt;/a&gt;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to refer the code, A ROS package is available &lt;a href=&quot;https://github.com/kam3k/laser_line_extraction&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; and below picture is the result from it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/DJuJW.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/DJuJW.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="714" LastActivityDate="2017-10-27T07:36:08.243" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14518" PostTypeId="1" AcceptedAnswerId="14534" CreationDate="2017-10-27T14:29:43.023" Score="0" ViewCount="299" Body="&lt;p&gt;I would like to know if there is any software that I can 3d model my robot and insert that model into some sort of simulation software where I can run AI related code(in python). Any suggestions would be appreciated.&lt;/p&gt;&#xA;" OwnerDisplayName="user18489" LastEditorDisplayName="user18489" LastEditDate="2017-10-27T17:04:22.063" LastActivityDate="2017-11-02T06:04:21.750" Title="What software can I use to 3d model and simulate my robot?" Tags="&lt;simulation&gt;&lt;simulator&gt;&lt;humanoid&gt;&lt;3d-model&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14519" PostTypeId="2" ParentId="14505" CreationDate="2017-10-27T18:03:52.897" Score="0" Body="&lt;p&gt;There's something wrong with the Makefile where this is breaking depending on your exact setup. As a quick fix I would hack out the -Wno-deprecated from the Makefile, and I'll look at fixing this.&lt;/p&gt;&#xA;" OwnerUserId="18492" LastActivityDate="2017-10-27T18:03:52.897" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14520" PostTypeId="1" CreationDate="2017-10-28T08:14:24.293" Score="2" ViewCount="1237" Body="&lt;p&gt;I am working with a Nao robot. One if the things I want to do is the following:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Take an image of geometrical objects in front of the Nao (&lt;em&gt;done&lt;/em&gt;)&lt;/li&gt;&#xA;&lt;li&gt;Extract features from the objects in the image, such as &lt;code&gt;x&lt;/code&gt;, &lt;code&gt;y&lt;/code&gt;, &lt;code&gt;color&lt;/code&gt;, etc.. (&lt;em&gt;done&lt;/em&gt;)&lt;/li&gt;&#xA;&lt;li&gt;Make the Nao point to one of the objects (&lt;strong&gt;TO DO&lt;/strong&gt;)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;So, what I need is to transform a 2D coordinate in the image plane to a 3D coordinate in the robot's coordinate system. I have some idea on how to do this, but I am not sure if this is correct.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So, I start by transforming the 2D image coordinate to the 3D coordinate system that originates in the camera of the Nao. For this, I use height and width (in pixels) of the image ($r_w$ and $r_h$) and the horizontal and vertical camera opening ($\theta_v$ and $\theta_h$). This transformation is: $$ v_c = \left( \begin{matrix} 1 \\ -\frac{x_i}{r_h} \tan{\frac{\theta_h}{2}} \\ \frac{y_i}{r_w} \tan{\frac{\theta_v}{2}} \end{matrix} \right) $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Than, I need to translate this vector using the orientation of the head of the Nao. The resulting coordinate system is parallel to the entire robot's coordinate system. The rotation of the camera is given by $R_c$. The translation is: $$ v_t = R_c v_c $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, I project this coordinate system to the robot's coordinate system. The Nao can use 2 coordinate system, one that originates on the ground between its legs (&lt;code&gt;FRAME_ROBOT&lt;/code&gt;) or one that originates in its chest (&lt;code&gt;FRAME_TORSO&lt;/code&gt;). Which one is used has no real importance for me. Let's say the offset between the coordinate systems is given by $t_c$. The transformation is: $$ v_r = v_t + t_c $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, given a position in the image $(x_i, y_i)$, I get this position in the robot's coordinate system. &lt;strong&gt;Is this a correct approach?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="18495" LastEditorUserId="18495" LastEditDate="2017-10-28T12:10:57.047" LastActivityDate="2018-07-26T19:03:04.147" Title="Image coordinate to robot coordinate" Tags="&lt;cameras&gt;&lt;geometry&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14521" PostTypeId="1" AcceptedAnswerId="14535" CreationDate="2017-10-28T09:58:18.520" Score="1" ViewCount="52" Body="&lt;p&gt;How can I track two set-points in a system using only one output? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Example: make a motor track a position x moving in a speed y while I have only voltage as an output, speed and position as feedback.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;can this be done with PID or there is a need for more complex methods?&lt;/p&gt;&#xA;" OwnerUserId="14985" LastActivityDate="2017-11-13T14:43:20.333" Title="How to track two set-points with one output?" Tags="&lt;control&gt;&lt;pid&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14522" PostTypeId="1" CreationDate="2017-10-28T10:15:51.190" Score="1" ViewCount="696" Body="&lt;p&gt;I'm a communication engineer so my knowledge about robotics is very little. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know the basic formula of torque T=mgL&lt;/p&gt;&#xA;&#xA;&lt;p&gt;in my project I have 2 arms &amp;amp; 2 motors &lt;/p&gt;&#xA;&#xA;&lt;p&gt;i used a torque calculator online and it came out with a very high torque a s a result which I didn't even found in the market!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;here is a photo of the calculations &#xA;&lt;a href=&quot;https://i.stack.imgur.com/wlpg4.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wlpg4.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the higher torque motor should have a torque of 580 Kg cm which is equal to about 60 Nm &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I never found a stepper motor with such a great torque.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;i read somewhere else in Quora that to lift a weight of 50 KG you need only 1NM so how come my 10 KG load requires that high torque? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;so is there is something wrong with my calculations? &#xA;and what is the holding torque? is it the same one I'm calculating or it has another relation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: I'm not concerned much about torque resulted from angular acceleration as I want a constant rotational speed. &lt;/p&gt;&#xA;" OwnerUserId="18497" LastActivityDate="2017-10-28T10:15:51.190" Title="How do I choose the stepper motor torque for my robotic arm" Tags="&lt;robotic-arm&gt;&lt;servomotor&gt;&lt;stepper-motor&gt;&lt;torque&gt;" AnswerCount="0" CommentCount="2" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14523" PostTypeId="1" CreationDate="2017-10-28T15:47:05.553" Score="1" ViewCount="203" Body="&lt;p&gt;I am very new to this space and would greatly appreciate some clear guidance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a Raspberry Pi 3, Arduino Mega 2560+Shield, and Kinect v2 + PC USB cable adapter. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am currently building the &lt;a href=&quot;https://www.bcn3dtechnologies.com/en/bcn3d-moveo-the-future-of-learning/&quot; rel=&quot;nofollow noreferrer&quot;&gt;BCN3D MOVEO&lt;/a&gt; with the following goal:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To take in the right or left arm/hand motion of a person via the Kinect V2 to then be used to control the BCN3D robotic arm's stepper motors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Below is my rough idea of what I should do. I know building the robotic arm will not be a problem but I am very lost on what to do with it after that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;So I would like to know how I can take the real-time XYZ data from a user's arm/hand seen by the Kinect and convert that into G-Code?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/4hZCj.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4hZCj.png&quot; alt=&quot;Game Plan&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18501" LastActivityDate="2017-10-28T15:47:05.553" Title="Kinect V2 (Arm/Hand Reading) to G-Code" Tags="&lt;arduino&gt;&lt;motor&gt;&lt;raspberry-pi&gt;&lt;stepper-motor&gt;&lt;kinect&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14524" PostTypeId="1" AcceptedAnswerId="14525" CreationDate="2017-10-28T20:27:51.243" Score="0" ViewCount="37" Body="&lt;p&gt;Hello every one I am working on a robot and I am using kinda big motors and I made the body from 5mm plastic sheet and I found that its not strong enough to hold the robot as you see in the pic there a big curve there &#xA;And I am searching for a cheap idea to make the robot stronger &#xA;&lt;a href=&quot;https://i.stack.imgur.com/Epl5o.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Epl5o.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/XgQt1.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XgQt1.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15380" LastActivityDate="2017-10-28T22:29:29.010" Title="Searching for an idea to enhance robot chasis strength" Tags="&lt;mobile-robot&gt;&lt;chassis&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14525" PostTypeId="2" ParentId="14524" CreationDate="2017-10-28T22:29:29.010" Score="3" Body="&lt;p&gt;I would make an X shape using L channel or U channel going from corner to corner on the upper side. It is much easier to bend a flat piece of metal, plastic, wood, etc than it is to stretch or compress the same material. Think of I beams in buildings, the material at right angles causes the beam to have much more strength.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.mcmaster.com/#aluminum-angles/=1a0i7kc&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.mcmaster.com/#aluminum-angles/=1a0i7kc&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A cheap and easy way would be to mount one piece of L channel on the upper side going one direction, and the other on the underside going the other, to form the X. otherwise you're going to have to find a way to deal with the intersection of the two right angle pieces, which is still possible, just more work.&lt;/p&gt;&#xA;" OwnerUserId="18503" LastActivityDate="2017-10-28T22:29:29.010" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14527" PostTypeId="2" ParentId="14004" CreationDate="2017-10-29T07:28:03.770" Score="1" Body="&lt;p&gt;&lt;code&gt;candump&lt;/code&gt; can output the timestamp for each message in different formats. Check the usage notes of candump.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;candump -t d can0&lt;/code&gt; will give you the time difference between messages for instance.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2017-10-29T07:28:03.770" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14529" PostTypeId="2" ParentId="14520" CreationDate="2017-10-29T13:51:19.543" Score="1" Body="&lt;p&gt;The standard way to perform projection transforms between camera images and the world outside is through a projection matrix. Look at &lt;a href=&quot;https://courses.engr.illinois.edu/cs543/sp2011/lectures/Lecture%2002%20-%20Projective%20Geometry%20and%20Camera%20Models%20-%20Vision_Spring2011.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this presentation&lt;/a&gt; starting at page 25 for an introduction to the subject. But I recommend that instead of implementing your own, you rely on external libraries to perform this sort of task whenever possible, e.g. in ROS the &lt;a href=&quot;http://wiki.ros.org/image_geometry&quot; rel=&quot;nofollow noreferrer&quot;&gt;image_geometry&lt;/a&gt; package provides the &lt;a href=&quot;http://docs.ros.org/diamondback/api/image_geometry/html/c++/classimage__geometry_1_1PinholeCameraModel.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;PinholeCameraModel&lt;/a&gt; class for handling coordinate projections.&lt;/p&gt;&#xA;" OwnerUserId="4310" LastActivityDate="2017-10-29T13:51:19.543" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14530" PostTypeId="2" ParentId="12247" CreationDate="2017-10-29T14:30:17.013" Score="0" Body="&lt;p&gt;One reason is that the gyro is not being software reset. A hardware reset(unplugging and plugging in gyro) might help too&lt;/p&gt;&#xA;" OwnerUserId="17270" LastActivityDate="2017-10-29T14:30:17.013" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14533" PostTypeId="2" ParentId="2925" CreationDate="2017-10-30T06:55:41.317" Score="-1" Body="&lt;p&gt;P (Proportional) meaning how responsive the system. Not only P can control the system responsive. Clock or Sampletime can make the system more responsive. So when u try only I (Integral) if responsive system has been high so it's possible only using ID.&lt;/p&gt;&#xA;" OwnerUserId="18517" LastActivityDate="2017-10-30T06:55:41.317" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14534" PostTypeId="2" ParentId="14518" CreationDate="2017-10-30T09:17:18.103" Score="1" Body="&lt;p&gt;All depends on much &quot;standards&quot; is your robot and how much coding of the simulator you want to code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you don't want to simulate contact the easiest way is to write down your own simulator in you favorite language, based on the underlying mathematical model of your robot. If you have access to matlab the simmechanics toolbox, can be interesting because the toolbox derive the dynamical model on its own, but it is poorly documented (and expensive). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have a &quot;standard robots&quot; you can look at V-REP or gazebo, which are working standalone or in combination with ROS. Some robots models are already coded or can be easily generated. ROS is compatible with python.&#xA;You can also have a look at the MORSE simulator, which has been developed for academia. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am pretty sure that my list is non-exhaustive, but it should provide you some starting points.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2017-10-30T09:17:18.103" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14535" PostTypeId="2" ParentId="14521" CreationDate="2017-10-30T09:24:44.223" Score="2" Body="&lt;p&gt;If your position and velocity are related (i.e. the speed is derived from the position) then they are kind of matching. In this case, if you use a simple proportional controller you can track the position but if you use a PD you are providing an extra information on the derivative of the tracked position, thus you can have a better tracking because the controller also has information about the derivative.&#xA;This approach relies on feedback on the quantities, i.e., you check the discrepancy between desired and an actual values. As noted by @fibonatic, you can use mixed approach where you apply feedback on the position and a feedforward approach on the higher derivative (so you only consider the desired values not checking against the actual ones).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have position and velocities which are not matching, it is physically impossible to track both for your system. The first requirement of a trajectory generator is to produce feasible trajectories, i.e. feasible pairs of position velocity w.r.t your system dynamics. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that in practice there is potentially an infinity of such feasible trajectories (as pointed out by @Gürkan Çetin) and you could choose the &quot;best&quot; one based on your criteria (minimal time, minimal energy, ...) via optimization methods if you have a good enough model.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastEditorUserId="18235" LastEditDate="2017-11-13T14:43:20.333" LastActivityDate="2017-11-13T14:43:20.333" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14536" PostTypeId="2" ParentId="14515" CreationDate="2017-10-30T09:33:59.530" Score="0" Body="&lt;p&gt;The Jacobian corresponds to the mapping between Cartesian space and joint space at the velocity level. So from the joint coordinates to the end-effector Cartesian coordinates.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you pointed out from the transformation matrices it is easy to derivate the the Jacobian.&#xA;But if you get the Jacobian of a robot in general it's is hard to retrieve the transformation matrices because they are &quot;mixed&quot; in the term of the Jacobian, and it is impossible if you retrieve a numerical Jacobian.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I your case you have some structure so its might be possible but it would be simpler/faster to just write down a parametrization of the arm and derive the transformation matrices. If you want some generic tool look at Denavit–Hartenberg parametrization in any robotics handbook.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2017-10-30T09:33:59.530" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14537" PostTypeId="2" ParentId="14515" CreationDate="2017-10-30T10:01:26.950" Score="1" Body="&lt;p&gt;While it is not possible to completely determine all the origin given only one Jacobian, I think it's possible to obtain the origins $o_1, o_2, o_3$ from multiple Jacobians.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's write &#xA;$$J = \begin{bmatrix}J_{v1} &amp;amp; J_{v2} &amp;amp; J_{v3}\\J_{w1} &amp;amp; J_{w2} &amp;amp; J_{w3}\end{bmatrix} = \begin{bmatrix}z_0 \times o_3 &amp;amp; z_1 \times (o_3 - o_1) &amp;amp; z_2 \times (o_3 - o_2)\\ z_0 &amp;amp; z_1 &amp;amp; z_2\end{bmatrix}.$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can easily see that given one Jacobian, it's not possible to completely determine $o_3$ as we can write&#xA;$$ &#xA;o_3 = \frac{J_{v1} \times z_0}{\Vert z_0 \Vert^2} + a_0z_0,&#xA;$$&#xA;for arbitrary $a_0$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Simllarly, from $J_{v2} = z_1 \times (o_3 - o_1)$, we have&#xA;$$&#xA;o_3 - o_1 = \frac{J_{v2} \times z_1}{\Vert z_1 \Vert^2} + a_1z_1,&#xA;$$&#xA;for arbitrary $a_1$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the two equations above, we then have that&#xA;$$&#xA;o_1 = \frac{J_{v1} \times z_0}{\Vert z_0 \Vert^2} - \frac{J_{v2} \times z_1}{\Vert z_1 \Vert^2} + a_0z_0 - a_1z_1,&#xA;$$&#xA;for some arbitrary $a_0$ and $a_1$.&#xA;But $o_1$ is actually the origin of the first joint so by right, $o_1$ should remain the same at any configuration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Considering this, with another Jacobian, we may be able to calculate  $a_0$ and $a_1$ and hence $o_1$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think we can use the same trick to recover $o_2$ and $o_3$ as well.&lt;/p&gt;&#xA;" OwnerUserId="7610" LastEditorUserId="7610" LastEditDate="2017-10-30T15:44:46.527" LastActivityDate="2017-10-30T15:44:46.527" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14539" PostTypeId="1" CreationDate="2017-10-30T20:52:49.430" Score="2" ViewCount="416" Body="&lt;p&gt;I'm making an app which controls a drone (DJI) and takes photos.&#xA;In one particular feature, the user can draw a polygon (let's keep it a convex quadrilateral for now) and the app should generate a serpentine path for the drone to fly over the entire region.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/7YBOG.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7YBOG.jpg&quot; alt=&quot;Example from DJI GS Pro app&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Input: 4 vertices of the polygon&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Output: Array of coordinates of the path.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any heads up on which algorithm to use? &#xA;I've looked in to Boustrophedon Cell Decomposition, but there's not much documentation on it. &lt;/p&gt;&#xA;" OwnerUserId="18523" LastActivityDate="2018-10-26T11:00:42.750" Title="Generate a coverage path given a polygon region" Tags="&lt;uav&gt;&lt;path-planning&gt;&lt;coverage&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14540" PostTypeId="1" AcceptedAnswerId="14654" CreationDate="2017-10-30T22:18:56.520" Score="2" ViewCount="383" Body="&lt;p&gt;I'm designing an arm that can manipulate objects on a table.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is about the arrangement of the degrees of freedom.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Different robots seem do have different arrangements of the degrees of freedom,.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;e.g. the open-source &lt;a href=&quot;https://hackaday.io/project/12989-thor&quot; rel=&quot;nofollow noreferrer&quot;&gt;thor robot&lt;/a&gt; uses [yaw-roll-roll-yaw-roll-yaw], while &lt;a href=&quot;https://www.youtube.com/watch?v=fuoX_866UFg&amp;amp;t=0m14s&quot; rel=&quot;nofollow noreferrer&quot;&gt;Google's in-house arm&lt;/a&gt; uses [yaw-roll-yaw-roll-yaw-roll-roll].&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any reason you would choose one specific arrangement over another?&lt;/p&gt;&#xA;" OwnerUserId="17557" LastActivityDate="2017-11-21T20:15:14.927" Title="How do you arrange the dof in a robotic arm?" Tags="&lt;robotic-arm&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14541" PostTypeId="2" ParentId="14539" CreationDate="2017-10-31T03:06:12.640" Score="3" Body="&lt;p&gt;This thing is generally called &lt;strong&gt;coverage path planning&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are particularly interested in Boustrophedon Cell Decomposition, you may have a look at the paper introducing it: &lt;a href=&quot;https://pdfs.semanticscholar.org/d94b/903d3cffa239bfa7ea5c64b6ee1e7f73f5e8.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Choset and Pignon (1998)&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may also want to check out &lt;a href=&quot;http://dugi-doc.udg.edu:8080/bitstream/handle/10256/9088/Survey-coverage-path-planning.pdf?sequence=1&quot; rel=&quot;nofollow noreferrer&quot;&gt;this survey paper&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="7610" LastActivityDate="2017-10-31T03:06:12.640" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14542" PostTypeId="2" ParentId="14540" CreationDate="2017-10-31T08:09:56.710" Score="2" Body="&lt;p&gt;One thing you should note is the difference between the number of DoFs. Do you want a robot for a specific task or do you want a versatile robot. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want a specific task robot, chance are that you can optimize your DoFs arrangement for the task at hand. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want a generic robot then you have way more freedom. From my experience, the choice of DoFs and their arrangements is mostly constrained by the available motors and the wrench you want to exert at the end-effector. Also if the considered motor have angular limits the shape of the workspace is impacted by the arrangement of the DoFs. Lastly the location of the motor influence the inertia of the robot, hence the dynamic motion. For example for very fast motion, like pick and place delta robots are preferred as the motors are fixed to the base when the end-effector moves.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastEditorUserId="110" LastEditDate="2017-11-06T18:19:11.773" LastActivityDate="2017-11-06T18:19:11.773" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14547" PostTypeId="1" AcceptedAnswerId="14548" CreationDate="2017-10-31T14:43:25.050" Score="0" ViewCount="48" Body="&lt;p&gt;I want to compare MapleSim (Maplesoft) to SimMechanics (Mathworks) what should my criteria of comparison be?&lt;/p&gt;&#xA;" OwnerUserId="18352" LastEditorUserId="37" LastEditDate="2017-11-01T11:19:30.567" LastActivityDate="2017-11-03T08:34:23.553" Title="What criteria should be considered when comparing 2 robot simulation/modelling software?" Tags="&lt;simulation&gt;&lt;simulator&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14548" PostTypeId="2" ParentId="14547" CreationDate="2017-10-31T15:15:56.597" Score="2" Body="&lt;p&gt;I think the most important criteria are&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;the purpose of your simulator (do you need contact physics? how complex are your models? )&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;your fluency in both solutions&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;the size and quality of the documentation/community&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;is the code you are going to write for the simulator re-usable for real system ?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;what is the licencing policy of the simulator (and its price)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In general there is no magic simulator, each comes with its drawbacks and plus. So the choice of a simulator is a compromise between your needs and the solutions available on the market.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastEditorUserId="18235" LastEditDate="2017-11-03T08:34:23.553" LastActivityDate="2017-11-03T08:34:23.553" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14552" PostTypeId="1" CreationDate="2017-11-01T07:44:27.567" Score="5" ViewCount="720" Body="&lt;p&gt;I recently read a Go language(Golang) book and feel that this language is what I like.    &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I like C and Python, C can do the low level and basic jobs well. This language is also designed lovely. Also python(but python is really slow...). The Golang can also embed C. So may Golang also be good for Robot development in the future?    &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any effort bases on golang in ROS community now? Any reason that Golang is not good for ROS/robotics? &lt;/p&gt;&#xA;" OwnerUserId="16966" LastEditorUserId="16966" LastEditDate="2017-11-09T03:32:50.200" LastActivityDate="2018-05-31T05:24:18.917" Title="Is there any ROS community effort bases on golang?" Tags="&lt;ros&gt;&lt;programming-languages&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="14554" PostTypeId="1" CreationDate="2017-11-01T18:14:57.840" Score="0" ViewCount="44" Body="&lt;p&gt;I read this paper &lt;a href=&quot;https://www.researchgate.net/publication/258696480_Inversion_Based_Direct_Position_Control_and_Trajectory_Following_for_Micro_Aerial_Vehicles&quot; rel=&quot;nofollow noreferrer&quot;&gt;Inversion Based Direct Position Control and Trajectory Following for Micro Aerial Vehicles&lt;/a&gt; and despite of google it, I did not found any implementation source. if someone has a link for how it's implemented, I'd be grateful.&lt;/p&gt;&#xA;" OwnerUserId="18545" LastEditorUserId="17029" LastEditDate="2017-11-01T23:38:13.787" LastActivityDate="2017-12-12T13:37:17.487" Title="Is there an implementation of this paper? &quot;Inversion Based Direct Position Control and Trajectory Following for Micro Aerial Vehicles&quot;" Tags="&lt;control&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14555" PostTypeId="2" ParentId="13899" CreationDate="2017-11-01T20:11:00.443" Score="1" Body="&lt;p&gt;The Inverse Kinematics (IK) solver needs to be aware of the joint bounds in order to provide always a feasible solution lying in the allowed range.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In literature, there are essentially two diverse methodologies to deal with constrained IK in a principled way:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The &lt;strong&gt;Gradient Projection&lt;/strong&gt; method that makes use of the null space of the Jacobian to establish a secondary task that attempts to keep joints far from their constraints while converging to the solution of the primary task. See for example [1]. You can resort to tools like &lt;a href=&quot;http://www.orocos.org/kdl&quot; rel=&quot;nofollow noreferrer&quot;&gt;KDL&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Nonlinear optimization&lt;/strong&gt; techniques that inherently deal with bounded search regions and thus demonstrate to outperform other approaches. Nowadays, computational resources are such that these demanding techniques can be run even in real-time. See [2], [3] and [4]. Tools implementing this approach are for example &lt;a href=&quot;https://bitbucket.org/traclabs/trac_ik&quot; rel=&quot;nofollow noreferrer&quot;&gt;TRAC-IK&lt;/a&gt;, &lt;a href=&quot;http://wiki.icub.org/iCub/main/dox/html/group__iKin.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;iKin&lt;/a&gt; (&lt;a href=&quot;http://wiki.icub.org/iCub/main/dox/html/icub-tutorials_2src_2iKin_2fwInvKinematics_2main_8cpp_source.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;tutorial&lt;/a&gt; is available) and &lt;a href=&quot;https://github.com/robotology/idyntree&quot; rel=&quot;nofollow noreferrer&quot;&gt;iDynTree&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h3&gt;References&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;[1] H.-Y. Lee, B.-J. Yi, Y. Choi, “&lt;a href=&quot;https://doi.org/10.1109/ICCAS.2007.4406877&quot; rel=&quot;nofollow noreferrer&quot;&gt;A Realistic Joint Limit Algorithm for&#xA;Kinematically Redundant Manipulators&lt;/a&gt;,” IEEE International&#xA;Conference on Control, Automation and Systems, 2007.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[2] P. Beeson, B. Ames, &quot;&lt;a href=&quot;https://doi.org/10.1109/HUMANOIDS.2015.7363472&quot; rel=&quot;nofollow noreferrer&quot;&gt;TRAC-IK: An open-source library for improved solving of generic inverse kinematics&lt;/a&gt;,&quot; IEEE-RAS International Conference on Humanoid Robots, 2015.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[3] U. Pattacini, F. Nori, L. Natale, G. Metta, G. Sandini, &quot;&lt;a href=&quot;https://doi.org/10.1109/IROS.2010.5650851&quot; rel=&quot;nofollow noreferrer&quot;&gt;An experimental evaluation of a novel minimum-jerk cartesian controller for humanoid robots&lt;/a&gt;,&quot; IEEE-RSJ International Conference on Intelligent Robots and Systems, 2010.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[4] &lt;a href=&quot;https://robotics.stackexchange.com/a/10008/6941&quot;&gt;https://robotics.stackexchange.com/a/10008/6941&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2017-11-03T22:22:51.783" LastActivityDate="2017-11-03T22:22:51.783" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14557" PostTypeId="2" ParentId="14518" CreationDate="2017-11-02T06:04:21.750" Score="0" Body="&lt;p&gt;For 3D modelling go with a Solidworks and for Simulation use Matlab.These links might help you:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1- &lt;a href=&quot;https://www.youtube.com/watch?v=1nSafEJlySs&amp;amp;feature=youtu.be&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=1nSafEJlySs&amp;amp;feature=youtu.be&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2- &lt;a href=&quot;https://robotics.stackexchange.com/questions/7723/matlab-3d-simulation-with-solidworks-model?rq=1&quot;&gt;MATLAB 3D Simulation with SOLIDWORKS model&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18541" LastActivityDate="2017-11-02T06:04:21.750" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14558" PostTypeId="1" CreationDate="2017-11-02T13:00:46.043" Score="3" ViewCount="79" Body="&lt;p&gt;I am trying to express a vector defined in global coordinates in different frames using homogeneous transformation matrices. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are in total 3 frames. Frame 1 lies in the origin and is fixed to the world. Frame 2 is fixed to a floating body, with 6 degrees of freedom. Frame 3 is attached to the same floating body and has only a pure translation with respect to Frame 2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The vector $R_0$ is the vector that I'm trying to express in Frame 2 to obtain $R_2$.&#xA;For this I have constructed two homogeneous transformation matrices:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$H_{01} = \begin{bmatrix}R_{01} &amp;amp; T_{01}\\\mathbf{0} &amp;amp; 1\end{bmatrix}$ and $H_{01} = \begin{bmatrix}I &amp;amp; T_{12}\\\mathbf{0} &amp;amp; 1\end{bmatrix}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With these transformation matrices i should be able to transform a vector expressed in frame 0 to frame 2. I did this doing the following:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$R_2 = (H_{01}H_{12})^{-1}R_0$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then I plotted the frames and vector to come to the conclusion that its not quite right whenever I put in a rotation matrix $R_{01}$. To illustrate my situation some images:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I put $R_{01}$ is equal to anyhting but the identity matrix my vector does not end up in the red dot (the fixed point expressed in world coordinates).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From what i can see, the vector that I am obtaining looks correct but is now plotted in global space and not in the frame from which is should be plotted.&#xA;So basically my question becomes: how can I rotate $R_2$ back in order to plot the vector such that it ends up in the reference point?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/rmgOz.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rmgOz.png&quot; alt=&quot;R01 with only a rotation around the z-axis of 15 degrees &quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/nfFo0.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/nfFo0.png&quot; alt=&quot;top view&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/45mwg.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/45mwg.png&quot; alt=&quot;R01 is the Identity matrix and now my vector ends up in the desired location&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/MJYiZ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MJYiZ.png&quot; alt=&quot;top view of the situation with R01 = I&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18550" LastEditorUserId="18550" LastEditDate="2017-11-03T13:03:00.723" LastActivityDate="2017-11-06T14:22:31.320" Title="Expressing a global point in different frames" Tags="&lt;kinematics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14559" PostTypeId="1" CreationDate="2017-11-02T15:22:02.950" Score="2" ViewCount="388" Body="&lt;p&gt;I am formulating a problem to optimize link lengths of 3R serial manipulator shown below :&#xA;&lt;a href=&quot;https://i.stack.imgur.com/WyBrS.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/WyBrS.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do not assume any explicit relationship between the link lengths, but in one of the papers (&lt;a href=&quot;http://www.sciencedirect.com/science/article/pii/S1474667017358172&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.sciencedirect.com/science/article/pii/S1474667017358172&lt;/a&gt; , page 119, equation no.14) I am referring assumes following relationship :&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$l_1 /l_2 \geq 1.1$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$l_1 /l_2 \leq 2$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$l_2 /l_3 \geq 1.1$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$l_2 /l_3 \leq 2$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to &lt;a href=&quot;http://akademikpersonel.kocaeli.edu.tr/skucuk/sci/skucuk04.01.2011_16.30.24sci.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;another paper&lt;/a&gt; (page 569, below equation 14), the above relationship exists in a number of the industrial manipulators they studied. What's the reason behind this relationship?&lt;/p&gt;&#xA;" OwnerUserId="10758" LastEditorUserId="7610" LastEditDate="2017-11-04T06:05:35.157" LastActivityDate="2018-09-30T13:00:39.093" Title="Significance of link length ratio in serial manipulator" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;inverse-kinematics&gt;&lt;manipulator&gt;&lt;forward-kinematics&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="14561" PostTypeId="2" ParentId="14558" CreationDate="2017-11-03T09:14:30.087" Score="3" Body="&lt;p&gt;I would suggest you to clarify your notations and not use capital letter for vectors but only for matrices, calling a vector $\mathbf{R}_*$ and the rotation matrix $\mathbf{R}_{*@}$ can lead to confusions, even for you. More over your index notation  are not consistent.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That being said it seems that your math are right (provided that the index you wrote are the one I guessed).&#xA;So your trouble is most likely in plotting, if you express you original vector in the reference frame you get the red dot, if you want to check the resulting vector &quot;$\mathbf{R}_2$&quot; you need to pre-multiply it by the two transformations (in order to be in your third frame).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that you can rewrite the inverse of a transformation matrix in a more efficient way &#xA;${}_0\mathbf{T}^1 = \begin{bmatrix} {}_0\mathbf{R}^1&amp;amp; {}_0\mathbf{p}^1\\ 0 &amp;amp; 1 \end{bmatrix}$  and &#xA;${{}_0\mathbf{T}^1}^{-1} = \begin{bmatrix} {{}_0\mathbf{R}^1}^{T} &amp;amp; -{{}_0\mathbf{R}^1}^{T} {}_0\mathbf{p}^1\\ 0 &amp;amp; 1 \end{bmatrix}$ &lt;/p&gt;&#xA;" OwnerUserId="18235" LastEditorUserId="18235" LastEditDate="2017-11-06T14:22:31.320" LastActivityDate="2017-11-06T14:22:31.320" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14562" PostTypeId="2" ParentId="14559" CreationDate="2017-11-03T09:32:55.630" Score="1" Body="&lt;p&gt;I am not sere about the conclusion of the paper in general as it can be considered a bit outdated with respect to the &quot;famous&quot; manipulators configuration nowadays. You can easily find the dimensions on the manufacturer websites and check if that relation holds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general when you optimize you should state clearly your criteria, what do you want to optimize? Workspace ? Payload for given motors? maximal velocity at the end-effector? Possibilities are endless ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Concerning the paper you refer to, you can see the cost function $\kappa$ as equivalent the static force manipulability index, so the criterion used is the maximization of that index.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2017-11-03T09:32:55.630" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14563" PostTypeId="1" CreationDate="2017-11-04T03:45:40.697" Score="0" ViewCount="52" Body="&lt;p&gt;For a beginner that wants to learn how to build robots and learn as much as possible is it better to use a PIC and start from there or something more like an Arduino?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I ask because I have this book called The Robot Builder’s Cookbook (2007). It is certainly older but I feel like maybe starting at a lower level might help me learn more. Is this a logical train of thought or should I just try Arduino route?&lt;/p&gt;&#xA;" OwnerUserId="18564" LastActivityDate="2017-11-04T13:20:29.593" Title="For a beginner who wants to learn lots is it better to use a PIC and start from there or to use something like a Arduino?" Tags="&lt;arduino&gt;&lt;microcontroller&gt;&lt;beginner&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="14564" PostTypeId="1" CreationDate="2017-11-04T07:29:59.803" Score="0" ViewCount="298" Body="&lt;p&gt;I have a robot that it's down part is something like this photo: &lt;a href=&quot;http://www.sanatbazar.com/components/com_jshopping/files/img_products/full_Capture3.JPG&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.sanatbazar.com/components/com_jshopping/files/img_products/full_Capture3.JPG&lt;/a&gt; .&#xA;This chassis has 4motors and 4wheels are connected directly to motors, but my robot only has 2motors and 2 rear wheels are connected to motors directly. And the problem is about forward wheels! I am looking for a simple and cheap(but good) way to connecting them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I saw in some toy cars, they used a shaft through 2wheels and connecting them to shaft, but as I have electrical parts inside the body and need smoother movements, I prefer to use another way. I searched about bearings but don't know how to attach them to my chassis?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the end I should mention my robot has made by 3D printed parts and I can change the down part's design to matching something like bearings.Also the chassis dimension is about 16*16*6 CM^3.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: These photos are my chassis, wheel and two 3D printed white parts that I wanted to use as connection, but I saw this mechanism is very unstable and wheels slipping:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/qcWkK.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qcWkK.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/VeukL.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/VeukL.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/HNMLM.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HNMLM.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/O4obc.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/O4obc.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/65RlC.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/65RlC.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can change my chassis design and 3D print it again, but I am looking for a proper design for my purpose. I don't like to pass a shaft trough side holes, because I want to put my electronic board there!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit2: I bought a bearing with maintainer as you can see below:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/AYN85.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/AYN85.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But it's about 2times bigger and heavier than what I want! So the only other option do I have is using this simple bearings, but I don't know how to maintain them to the body: &#xA;&lt;a href=&quot;https://i.stack.imgur.com/rwOaX.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rwOaX.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/OjAQB.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OjAQB.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="17822" LastEditorUserId="17822" LastEditDate="2017-11-05T17:31:09.413" LastActivityDate="2017-11-11T20:45:59.700" Title="How to simply connect a plastic wheel to plastic body of a robot?" Tags="&lt;wheel&gt;&lt;chassis&gt;&lt;connector&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14565" PostTypeId="2" ParentId="14563" CreationDate="2017-11-04T13:20:29.593" Score="2" Body="&lt;p&gt;Assuming by PIC you meant the &lt;a href=&quot;http://www.microchip.com/design-centers/microcontrollers&quot; rel=&quot;nofollow noreferrer&quot;&gt;Microchip PIC&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because you are a beginner - it is suggested you copy rather than invent solutions to your yet to be discovered problems.  It follows that Arduino is the better choice because there are many more examples to copy from.&lt;/p&gt;&#xA;" OwnerUserId="17364" LastActivityDate="2017-11-04T13:20:29.593" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14567" PostTypeId="2" ParentId="14564" CreationDate="2017-11-04T20:34:42.277" Score="3" Body="&lt;p&gt;The problem with asking for a specific answer without providing all the requirements (it must do this, it can't do that, etc.) is that any answer becomes a circular argument as to what might work or what won't.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are many possible answers, there are many possible designs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you are asking is this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;Go find me a rock.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then someone offers up a rock without knowing your master plan.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And you reply, annoyed:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;Not that rock, a better one.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When engineers (like myself) design, they start from a specific set of requirements to avoid wasteful tautologies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before you start playing with a 3D printer you should decide major things like where do the wheels go? Must they be in the body?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If they don't have to be in the body then you could use a technique like these Badger Wheels:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2fqyH.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2fqyH.jpg&quot; alt=&quot;Badger Wheels Example&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and mount them on the outside of the chassis but still keep a single front (?) axle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Every design choice delivers you good (pro) and bad (con) consequences to your overall design. You can't keep all of them in mind when you are looking for a design one rock at a time. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Resubmit this question with a complete (exhaustive list) of requirements and someone might be able to give you the very best rock in one attempt.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given the updated post, here is a rough idea of what you want:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/9idnN.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9idnN.jpg&quot; alt=&quot;Brake caliper mounting bracket&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since you are mounting an axle that will carry 1/4 the load (vehicle mass) and the wall is plastic you need a method to reinforce the mounting location and at the same time not flex so the wheel drives straight. Short axles cause mechanical deformation if the mounting methods aren't strong enough because they are an unbalanced moment arm (see torque and inertial moment &lt;a href=&quot;https://simple.wikipedia.org/wiki/Torque&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wiki Torque&lt;/a&gt;) - the longer the moment arm the greater the torque. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$ \tau = R \times F $&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That is the reason, in general, that people normally use a single axle because it cancels out one side of the vehicle against the other in a lateral sense. Do you understand?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Reinforce the mounting area on both inside and outside the plastic wall, ideally join it to the structure. I can't guarantee this will solve your problem. The longer you can make that inner axle, the more torque it can dissipate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Use metal for the axle! Not plastic!  &lt;/p&gt;&#xA;" OwnerUserId="6804" LastEditorUserId="6804" LastEditDate="2017-11-05T12:45:56.943" LastActivityDate="2017-11-05T12:45:56.943" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="14571" PostTypeId="1" AcceptedAnswerId="14573" CreationDate="2017-11-05T21:19:15.780" Score="1" ViewCount="327" Body="&lt;p&gt;Say for example&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;                          __&#xA;         _____           |  |          ____&#xA;--------|_____|----------|  |---------|____&#xA;                         |__|&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;That ASCII art is supposed to represent a &quot;rolling&quot; revolute joint followed by a &quot;Yawing&quot; revolute joint, followed by the tool frame. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would the rows in the DH table represent&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;BASE-J1&#xA;J1-J2&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Or would they represent&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;J1-J2&#xA;J2-Tool Frame&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="18581" LastActivityDate="2017-11-06T08:47:42.550" Title="Between which joints does a given DH table row represent?" Tags="&lt;dh-parameters&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14572" PostTypeId="1" CreationDate="2017-11-06T02:26:55.677" Score="4" ViewCount="3005" Body="&lt;p&gt;I'm having trouble with getting this motor to work and could use some help/guidance, please.  I have a micro gear motor with encoder which I got from ServoCity (&lt;a href=&quot;https://www.servocity.com/90-rpm-micro-gear-motor-w-encoder&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.servocity.com/90-rpm-micro-gear-motor-w-encoder&lt;/a&gt;) and am trying to use it for a project which will require some fairly accurate movement.  I used a servo before, but it was too loud and too inaccurate for my needs, and burned out after a couple of years.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I haven't yet gotten to the encoder part of the my control (although I intend to use that to mark &quot;top center&quot;, eventually) - so right now I'm using an Arduino and a voltage step-up board.  I can make the motor turn by setting the Enable pin on the step-up board to high - however I'm unable to fine-tune the control.  It seems to do a full-spin and stop, no matter how briefly I make the pin high.  Attempting to do this with PWM doesn't seem to help or produce anything.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my research I haven't found any code specific to this motor, so I don't know if this is a complete limitation of this motor, or if I'm doing something wrong in my approach.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help/code/advice you could give would be much appreciated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="18584" LastActivityDate="2018-06-05T13:33:11.177" Title="How to finely control a gear motor with encoder using Arduino/RPi?" Tags="&lt;motor&gt;&lt;microcontroller&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14573" PostTypeId="2" ParentId="14571" CreationDate="2017-11-06T02:45:56.413" Score="1" Body="&lt;p&gt;&lt;strong&gt;tl;dr&lt;/strong&gt;&#xA;The rows (I guess you refer a row to a set of 4 DH-parameters) represent, roughly speaking, every link. So it's  &lt;code&gt;BASE-J1&lt;/code&gt;, &lt;code&gt;J1-J2&lt;/code&gt;, &lt;em&gt;and&lt;/em&gt; &lt;code&gt;J2-Tool Frame&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;When deriving DH parameters, the base frame usually situates at the robot base, where it is mounted on to floor. This DH convention is a convention that tells you how you put reference frames on a robot. How many frames you need (apart from the base frame) depends on how many joints there are. This corresponds to how many links you have.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So for a 2 degrees-of-freedom (DOF) robot as shown, you would have 3 sets of DH parameters. Each set, consisting of link length, link twist, link offset, and joint angle, describes each link.&lt;/p&gt;&#xA;" OwnerUserId="7610" LastActivityDate="2017-11-06T02:45:56.413" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14574" PostTypeId="2" ParentId="14571" CreationDate="2017-11-06T08:47:42.550" Score="0" Body="&lt;p&gt;There are a few DH convention out there, with main difference the way to chose the first and last frame to consider. Usually the emphasis is put on minimal representation, i.e., minimal number of frame. In my opinion this often leads to parametrization which are a bit more obscure to the user.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The most common DH parametrization would recommend to consider J1-J2 and J2-tool. Because in the end J1 is fixed in a frame, whether in the global frame if the arm is rigidly attached to the environment or a mobile frame if the arm is mounted on a mobile robot. In both cases the base frame of the arm is often irrelevant. Personally I don't agree that much with this approach and would consider an extra frame at the base o the robot, because by experience it's is more intuitive for debug and inverse kinematic. In particular the inverse kinematic is then conducted considering the base frame and not the first joint frame, which I think improves the intuitiveness, e.g. the arm is fixed on a table and should grasp an object on the table you can check easily that the base frame end the end-effector have the same z coordinate, if you consider the first frame in J1 you need to do an additional translation and this get more 'fun' when you attach your arm to the environment with funny configuration like &lt;a href=&quot;http://tpe-robotique-exosquelette.e-monsite.com/medias/images/p1070037.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2017-11-06T08:47:42.550" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14575" PostTypeId="2" ParentId="14572" CreationDate="2017-11-06T12:08:51.173" Score="0" Body="&lt;p&gt;The motor looks like a regular DC motor with two outputs for feedback from encoder. Looking at the waveform of the encoder output from the datasheet given on the website at &lt;a href=&quot;https://www.servocity.com/files/index/download/id/1470930141/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.servocity.com/files/index/download/id/1470930141/&lt;/a&gt;, it seems to function just like a regular rotary encoder, with two outputs A and B that would tell you the number of pulses recorded by the encoder. Many libraries for Arduino are available for the same, and a very useful tutorial is available at &lt;a href=&quot;https://playground.arduino.cc/Main/RotaryEncoders&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://playground.arduino.cc/Main/RotaryEncoders&lt;/a&gt;. The crux is, you have to connect the hall effect sensor outputs to two pins on your Arduino, and write a simple code to control the position using a feedback loop (the feedback comes from the encoder reading). The encoder is very low resolution though, and you will possibly have to take steps of 30 degrees each. Also make sure you don't supply over 5V to the power pin of the hall sensor VCC and make sure that the ground of Arduino and hall sensor is common. I hope this helps!&lt;/p&gt;&#xA;" OwnerUserId="7823" LastActivityDate="2017-11-06T12:08:51.173" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14577" PostTypeId="5" CreationDate="2017-11-06T16:16:47.663" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2017-11-06T16:16:47.663" LastActivityDate="2017-11-06T16:16:47.663" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14578" PostTypeId="4" CreationDate="2017-11-06T16:16:47.663" Score="0" Body="This is a special tag that is designed to be used only by the system for questions that have had all of their other tags removed. Do not add this tag to existing questions, it is reserved for use by the system to identify posts with no valid tags." OwnerUserId="15160" LastEditorUserId="15160" LastEditDate="2017-11-06T16:59:10.717" LastActivityDate="2017-11-06T16:59:10.717" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14579" PostTypeId="1" CreationDate="2017-11-07T11:52:38.357" Score="1" ViewCount="63" Body="&lt;p&gt;I am trying to integrate instantaneous linear and angular acceleration taken at discrete time intervals (1/100 seconds, 100hz). data is collected beforehand, and integration is done offline, I only have access to these measurements at these discretized intervals, I have been trying to integrate these accelerations to reconstruct the original trajectory (position .ie x, y, z coordinates), but even at 100hz(data logging rate) there is quite a bit of deviation from the original trajectory, I have been using SEMI-IMPLICIT Euler for doing the integration. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;and so I was wondering if there is any way to improve the accuracy of the integrated trajectory WITHOUT going significantly higher than 100hz (logging rate)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;note:&#xA;measurements are noiseless (simulator ground truth data), &#xA;logging rate has a std. deviation of 5 Hz&lt;/p&gt;&#xA;&#xA;&lt;p&gt;dataset consist of inst. angular accelerations, and inst. linear accelerations in body frame. i have access to initial orientation, velocity, position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;current code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;def integratePosition(initialPosition, initialOrientation, initialLinearVelocityBody, initialAngularVelocity,&#xA;                                    linearAccelerationsBody, angularAccelerations, frequency):&#xA;initialLinearVelocityEarth = transformToEarthFrame(initialLinearVelocityBody, eulerToQuaternion(*initialOrientation))&#xA;for a, alpha, f in zip(linearAccelerationsBody, angularAccelerations, frequency):&#xA;    initialAngularVelocity = integrateAngularVelocity(initialAngularVelocity, alpha, f)&#xA;    initialOrientation = integrateOrientation(initialOrientation, initialAngularVelocity, f)&#xA;&#xA;    initialLinearVelocityEarth += transformToEarthFrame(a, eulerToQuaternion(*initialOrientation)) / f&#xA;    initialPosition = integratePosition(initialPosition, initialLinearVelocityEarth, f)&#xA;&#xA;    yield initialPosition&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Thank you&lt;/p&gt;&#xA;" OwnerUserId="18599" LastEditorUserId="18599" LastEditDate="2017-11-07T14:18:01.120" LastActivityDate="2017-11-07T14:18:01.120" Title="Integrating Instantaneous Accelerations taken at discrete time intervals" Tags="&lt;quadcopter&gt;&lt;accelerometer&gt;&lt;simulator&gt;&lt;integration&gt;" AnswerCount="0" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="14580" PostTypeId="1" AcceptedAnswerId="14581" CreationDate="2017-11-07T13:24:31.660" Score="1" ViewCount="58" Body="&lt;p&gt;I get an object pose from the camera in quaternion. Since these are tetrahedron shaped objects, the robot needs to align the vacuum gripper to one of the sides of the object. But the yaw (rotation along surface normal) can be ignored. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried this by converting it to Euler angles, set yaw = 0, and converted back to quaternion. This works in some cases, but for certain cases, the robot picks up at an angle which seems to be 90° rotated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do I need to take care for certain cases of Euler angles or is there a better way to do this?&lt;/p&gt;&#xA;" OwnerUserId="18378" LastActivityDate="2017-11-07T15:52:04.640" Title="Ignoring yaw for pick and place" Tags="&lt;rotation&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="14581" PostTypeId="2" ParentId="14580" CreationDate="2017-11-07T15:52:04.640" Score="1" Body="&lt;p&gt;Quaternion are describing a 3D vector and a rotation around this vector, to go from the origin frame to the destination frame. So either you go in direction of quaternion math or you pass through rotation matrix and back to quaternion.&#xA;Euler angles are subject to gimbal lock in general it is better to avoid them and use rotation matrix or quaternions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that what you define as zero yaw is a bit ambiguous,What you want is that the arbitrary frame attached by your vision algorithm rotates in order to no ask for a motion of end-effector around the yaw. This is fair, but  in practice is tedious because you need to know with which configuration your EE will arrive to the surface. The best in my opinion is to control only the 3D position and the 2D orientation, you then have a redundant robots (6DOFs for 5) so you can either force the orientation or use redundancy to optimize a criterion. By forcing the orientation I mean that you can requite that the frame attached to the surface has a main axis passing by one of the vertex of the tetrahedron for example. And exploiting the redundancy can be leverage to maximize manipulability indexes or enforce to stay away from joint range limits.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2017-11-07T15:52:04.640" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14582" PostTypeId="1" CreationDate="2017-11-08T02:13:59.707" Score="1" ViewCount="84" Body="&lt;p&gt;I want to use stereovision to get 3D coordinates of a point in the camera's frame. Let's say, I can zoom in and click in the image to select my point of interest.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;I want an accuracy of about 0.05 - 0.1mm. How do I select such a stereo camera? I checked a few stereocam specs but I didnt see any specification called 'accuracy' in it. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Is there some way to compute the accuracy from all other specs mentioned in the list?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I was looking at this camera&#xA;&lt;a href=&quot;http://files.carnegierobotics.com/products/MultiSense_S7/MultiSense_Stereo_brochure.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://files.carnegierobotics.com/products/MultiSense_S7/MultiSense_Stereo_brochure.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10435" LastEditorUserId="10435" LastEditDate="2017-11-13T06:27:57.817" LastActivityDate="2017-11-13T06:27:57.817" Title="Accuracy of stereovision camera" Tags="&lt;stereo-vision&gt;" AnswerCount="0" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14584" PostTypeId="1" AcceptedAnswerId="14927" CreationDate="2017-11-08T19:17:00.890" Score="4" ViewCount="5127" Body="&lt;p&gt;I'm currently building an robotic arm and I want the elbow joint to be comparable to a human one&#xA;But here's the problem, electric linear actuators are too slow and have low torque, same goes with regular hobby servos and stepper motors&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ideally I would want a brushless motor with no gearbox that could hold a 10kg weight at an arm's distance (let's say 40 cm) and move freely at around 100rpm (about 10rad/s)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Holding force: 40 N.m&lt;/p&gt;&#xA;&#xA;&lt;p&gt;No load moving velocity: 100rpm / 10 rad/s&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was thinking sensored brushless motors could do the trick but surely that load would be too much for those...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If this cannot be achieved, would it be possible to use a 3D printed 100:1 planetary gearbox and a low kv motor to do it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance, if you have other types of motors that would be more suitable please comment them, any help is appreciated.&lt;/p&gt;&#xA;" OwnerUserId="15082" LastActivityDate="2019-05-07T00:39:39.950" Title="Using brushless motors for very high torque" Tags="&lt;robotic-arm&gt;&lt;motor&gt;&lt;brushless-motor&gt;&lt;stepper-motor&gt;&lt;torque&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="14586" PostTypeId="1" CreationDate="2017-11-09T16:02:19.917" Score="0" ViewCount="43" Body="&lt;p&gt;So I have an E-puck robot, and I'm using Tiny Bootloader from this website:&#xA;&lt;a href=&quot;http://www.etc.ugal.ro/cchiculita/software/picbootloader.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.etc.ugal.ro/cchiculita/software/picbootloader.htm&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've paired the robot up on my laptop's bluetooth. It appears in the devices window on Control Panel (I'm using a Windows 10 laptop BTW with built in blue tooth.), I pair the robot and windows gives me a COM port. So far so good.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I start Tiny Bootloader v1.98 and set it to load a .hex file so I can start making the robot do things. I find and select the right COM port and hit Write Flash.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It gives me the following message:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could not connect to com3 at 115200&#xA;ERROR!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't really know what to do next. None of the tutorials I've found regarding the use of the robot say anything about how to handle this. Other people who've experienced problems with Tiny Bootloader have at least managed to connect to their device before they get an error.&lt;/p&gt;&#xA;" OwnerUserId="18620" LastActivityDate="2018-03-10T13:45:35.750" Title="Connect to e_puck, Could not connect to com3 at 115200 ERROR!" Tags="&lt;mobile-robot&gt;&lt;microcontroller&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14587" PostTypeId="1" CreationDate="2017-11-09T17:00:22.867" Score="0" ViewCount="286" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/bu5AW.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/bu5AW.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;Note:Q is a diagonal posituve semi-definite matrix&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why is the IK formulation like that? &#xA;It looks like it's trying to find the optimum dq/dt that will minimize the magnitude dq/dt. How is that giving IK solution? and isn't the optimum value be dq/dt=0? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/3EKZH.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3EKZH.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18027" LastEditorUserId="18027" LastEditDate="2017-11-12T07:05:31.800" LastActivityDate="2017-11-12T09:56:32.700" Title="Inverse Kinematics problem formulation (optimization)" Tags="&lt;kinematics&gt;&lt;inverse-kinematics&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14588" PostTypeId="2" ParentId="14587" CreationDate="2017-11-09T17:34:38.413" Score="5" Body="&lt;p&gt;The formulation is typical for redundant robots, in which there are an infinite number of joint velocity vectors that could satisfy the $\dot{r}_{t}$ goal.  In the version you cite, the $Q$ matrix would allow you to weight the different joint velocities in order to create an optimal solution that matches that $Q$.  Other formulations of this approach specifically call out the null space of the manipulator Jacobian to be used for satisfying the optimization criteria.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, that last equation is inverted to solve for joint velocities, which makes this an approach to inverse kinematics.  With nonsquare Jacobians, pseudoinverses are used for this. &lt;/p&gt;&#xA;" OwnerUserId="11125" LastEditorUserId="11125" LastEditDate="2017-11-09T23:56:24.037" LastActivityDate="2017-11-09T23:56:24.037" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="14589" PostTypeId="1" AcceptedAnswerId="14594" CreationDate="2017-11-09T21:11:13.813" Score="0" ViewCount="54" Body="&lt;p&gt;I'm a complete novice when it comes to robotics and/or computer vision, so I'm looking for a place to start - simply googling has not located what I want.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to build a device that continuously points at a an object that's moving in 3 dimensional space.  Something like a robot shining a laser pointer at a moving quadcopter.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The target can be equipped with some sort of vision enhancement mechanism - LED blinking in a particular pattern, or displaying a particular combination, anything like that.  A closed feedback loop is also possible, but seems much more complicated to implement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't really care if this is done visually or through some other technology (radar?) though for a hobbyist visual seems the cheapest/easiest.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not looking for a product that does this off the shelf - I'm looking for ideas on how to design such a system.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So far, I've not even been able to find what keywords to search on....&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="18623" LastEditorUserId="18623" LastEditDate="2017-11-09T21:22:33.710" LastActivityDate="2017-11-10T13:27:57.850" Title="Pointing at a moving object" Tags="&lt;computer-vision&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14590" PostTypeId="1" CreationDate="2017-11-10T03:08:24.273" Score="0" ViewCount="106" Body="&lt;p&gt;I have a roomba 595. I connected it to my Pi via serial but I'm having a tough time finding commands or documentation for it. I was wondering if the same commands used for the create model roombas would work for non-create models.&lt;/p&gt;&#xA;" OwnerUserId="18624" LastActivityDate="2017-11-12T15:41:40.690" Title="Will the irobot create library work with other roomba models?" Tags="&lt;irobot-create&gt;&lt;roomba&gt;" AnswerCount="1" CommentCount="0" ClosedDate="2017-11-16T11:27:55.607" ContentLicense="CC BY-SA 3.0" />
  <row Id="14591" PostTypeId="2" ParentId="14587" CreationDate="2017-11-10T03:11:01.883" Score="2" Body="&lt;p&gt;Now that I have investigated &lt;a href=&quot;https://hal.archives-ouvertes.fr/hal-01521582/document&quot; rel=&quot;nofollow noreferrer&quot;&gt;the paper in question&lt;/a&gt;, here is my new answer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It turns out that the paper actually discusses task-based motion generation. That is, given a task (end-effector velocity trajectory) $\dot{r}(t)$, find a robot input (joint velocity trajectory) $\dot{q}(t)$ that realizes the task. &lt;em&gt;The formulated optimization problem is happening at a time instant on the trajectory.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if the Jacobian is square and full-rank, you wouldn't have to worry about this optimization problem since there can be only one $\dot{q}$ corresponding to a given $\dot{r}$. However, when the robot is redundant, there can be infinitely many $\dot{q}$ satisfying $J\dot{q} = \dot{r}$. Now that you have choices, you can do fancier things.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this case, the minimization objective is $\Vert \dot{q}^TQ\dot{q} \Vert$ to minimize the magnitude of the joint velocity. The reason is simple: one wouldn't want the joint velocity to just go unreasonably high. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, to really answer your questions&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Why is the IK formulation like that?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I think it is just that this formulation is mentioned as an example that leads to the main content of the paper. IK problems don't have to be formulated this way. There are other formulations out there.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How is that giving IK solution?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;$\dot{r}$ implicitly specifies the next end-effector pose. A solution $\dot{q}$ implicitly specifies the next IK solution to reach the specified pose.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;isn't the optimum value be dq/dt=0?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Without the equality constraint, yes. However, there is this inequality constraint. So $\dot{q}$ can be non-zero.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;(Below is my previous answer)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The formulation is general, i.e., it can be used with any types of robots.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think it may be easier to consider the discrete-time analogy of the problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given an initial point $q$ (i.e., a robot configuration), this optimization problem is actually trying to &lt;em&gt;pull&lt;/em&gt; $q$ towards some point $q^\ast$ that is an IK solution to your problem. What is effectively &lt;em&gt;steering&lt;/em&gt; the point $q$ towards a solution is the difference $\Delta r$ between your desired end-effector position and your current end-effector position. However, what you control is actually the joint values. They are related by&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$J\Delta q = \Delta r.$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can then compute the joint velocity that satisfies the above equation (given the current $\Delta r$). And since $\Delta q$ is essentially the difference of joint values between consecutive time steps, $\Delta q = q[t + \Delta t] - q[t]$, you will obtain a joint value for the next time step.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's why this is the constraint that is optimization problem is subject to.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the end, the system should stop moving when it reaches an IK solution. This means $\Delta q$ should be zero. That's why the minimization objective is to minimize a norm of $\dot{q}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think the positive semi-definite matrix $Q$ in the objective function will control how each of the joint values converges to an IK solution. For example, if $Q$ is an identity matrix, it means you place equal importance to each DOF (that is, you do not have any bias in favor of some DOFs to converge faster than the others).&lt;/p&gt;&#xA;" OwnerUserId="7610" LastEditorUserId="7610" LastEditDate="2017-11-12T09:56:32.700" LastActivityDate="2017-11-12T09:56:32.700" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="14593" PostTypeId="2" ParentId="14586" CreationDate="2017-11-10T10:43:07.893" Score="1" Body="&lt;p&gt;It seems to me that the baud rate might not be the one expected by your robot.&#xA;Try to force the baudrate of the communication to other standard ones, or look in the doc of the robot if anything is said on the expected baud rate&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2017-11-10T10:43:07.893" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14594" PostTypeId="2" ParentId="14589" CreationDate="2017-11-10T13:27:57.850" Score="0" Body="&lt;p&gt;There are a wide variety of solutions to reach your &quot;object tracking&quot; goal.  Consider using &lt;a href=&quot;https://opencv.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;OpenCV&lt;/a&gt; and any of its built in methods for tracking objects.  One of which is finding objects based on color.  Color the object different than anything else in the field of view.  Then program OpenCV to find that color and offer up that color's position.  At which point it would be a matter of proper programming for the given platform to send such information to, for example, servo motors to control the camera position.&lt;/p&gt;&#xA;" OwnerUserId="17364" LastActivityDate="2017-11-10T13:27:57.850" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14597" PostTypeId="2" ParentId="14564" CreationDate="2017-11-11T20:45:59.700" Score="1" Body="&lt;p&gt;I don't see the problem here. You just need to pass a metal shaft across the body on the underside. This shaft needs to fit the wheels but I suppose that part is sorted already. To fit the shaft to the body you could buy attachment points or make them yourself (3d print or adapt something, for instance cut a few short lengths from a thin copper pipe as used in a/c systems and attach these to the body using hot glue or even just ties, then pass the shaft through them.) Personally I prefer being inventive.. Hope that helps.&lt;/p&gt;&#xA;" OwnerUserId="7198" LastActivityDate="2017-11-11T20:45:59.700" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14598" PostTypeId="1" CreationDate="2017-11-11T23:57:55.190" Score="0" ViewCount="515" Body="&lt;p&gt;I accidently plugged 5v in to the RX UART pin 15 on my Pi, now I'm unable to receive communication on this pin from my connected device. I was wondering if it's possible to use a different GPIO pin as an RX pin to receive serial ?&lt;/p&gt;&#xA;" OwnerUserId="18624" LastActivityDate="2021-04-26T07:00:26.577" Title="Can I use another GPIO pin on the Pi 3 as a RX UART?" Tags="&lt;raspberry-pi&gt;&lt;serial&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14599" PostTypeId="1" AcceptedAnswerId="14616" CreationDate="2017-11-12T04:31:11.323" Score="1" ViewCount="111" Body="&lt;p&gt;Since urdf format serves the purpose of kinematic model but also extends for dynamical properties such as mass,moment of inertia and centre of masses, can it be considered a viable dynamical model of a robot, comparable to standard methods such as Euler-Lagrange and Newton-Euler?&lt;/p&gt;&#xA;" OwnerUserId="15008" LastEditorUserId="15008" LastEditDate="2017-11-13T19:33:18.630" LastActivityDate="2017-11-15T19:09:28.160" Title="Urdf as a way to model dynamics?" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;dynamics&gt;&lt;manipulator&gt;&lt;redundant-robots&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14600" PostTypeId="2" ParentId="13957" CreationDate="2017-11-12T12:37:24.530" Score="2" Body="&lt;p&gt;for a different vac robot brand ilife v7 we use a piece of wood (floor panel) which is 8mm thick.&lt;/p&gt;&#xA;" OwnerUserId="18640" LastActivityDate="2017-11-12T12:37:24.530" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14601" PostTypeId="2" ParentId="14554" CreationDate="2017-11-12T13:02:53.320" Score="1" Body="&lt;p&gt;I haven't search for that particular method but I'm going to answer this question as a question on how to find if a given algorithm as a public implementation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is three steps (that I use) to find a given public implementation, if it exist:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;search for it on &lt;a href=&quot;https://www.github.com&quot; rel=&quot;nofollow noreferrer&quot;&gt;GitHub&lt;/a&gt;. Usually the implementation will be available on GitHub if it's available somewhere. Bonus point if the repo is the one of the lab's university.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The lab's website. This paper was written by a lab that probably has a website and a personal page for each person. You might find the software available here, and the conditions for using it.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Finally, if you haven't found it yet, it's time to directly write to the author to ask if he has an implementation that you could use. Be sure to state what you will be doing with it and why you need it.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="1615" LastActivityDate="2017-11-12T13:02:53.320" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14602" PostTypeId="2" ParentId="14514" CreationDate="2017-11-12T13:06:18.087" Score="1" Body="&lt;p&gt;Did you try the &lt;a href=&quot;https://github.com/PaulStoffregen/NewPing&quot; rel=&quot;nofollow noreferrer&quot;&gt;newPing&lt;/a&gt; library ?&lt;/p&gt;&#xA;" OwnerUserId="1615" LastActivityDate="2017-11-12T13:06:18.087" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14603" PostTypeId="2" ParentId="14590" CreationDate="2017-11-12T15:41:40.690" Score="1" Body="&lt;p&gt;Yes, the same commands for the Create2 will work with a Roomba 595.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2017-11-12T15:41:40.690" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14605" PostTypeId="2" ParentId="14598" CreationDate="2017-11-12T21:22:56.217" Score="0" Body="&lt;p&gt;This question may sound simple.  However it is likely dependent on if the processor's hardware UART resource is mappable to different (functional) pins as well as if the Linux UART driver is flexible enough to be configurable for this alteration to the UART feature of the Raspberry Pi.  Even if both of these features are available, such a change likely involves recompiling the driver if not the kernel.  This usually involves having an installed compiler and installed kernel source code (you need the kernel source code even if you are only compiling the driver).  Not a light subject.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, people do write code to simulate a UART on other Raspberry Pi pins.  This is usually done when the actual hardware UART is committed to another activity.  In such a case, this &lt;a href=&quot;https://raspberrypi.stackexchange.com/questions/27488/pigpio-library-example-for-bit-banging-a-uart&quot;&gt;Raspberry Pi stackexchange answer&lt;/a&gt; provides a good example.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have further Raspberry Pi questions, you may have better luck if you ask them on the &lt;a href=&quot;https://raspberrypi.stackexchange.com&quot;&gt;Raspberry Pi stackexchange&lt;/a&gt; web site.&lt;/p&gt;&#xA;" OwnerUserId="17364" LastActivityDate="2017-11-12T21:22:56.217" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14607" PostTypeId="1" AcceptedAnswerId="14892" CreationDate="2017-11-13T07:40:19.537" Score="2" ViewCount="214" Body="&lt;p&gt;According to some papers about robotics soccer &lt;a href=&quot;http://www.doiserbia.nb.rs/img/doi/1820-0214/2011/1820-02141100019C.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ontology Driven Development of Domain-Specific Languages, 2000&lt;/a&gt; and &lt;a href=&quot;http://ai2-s2-pdfs.s3.amazonaws.com/3126/3a40b48b8b63e5abe8559c4326519f468807.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Domain knowledge for surveillance applications, 2007&lt;/a&gt;, i need an ontology for programming my robot control system. The main idea is to describe the domain with a vocabulary plus an inheritance network. But how exactly this can be done? In the literature are two main strategies: the first one is using Semantic Web technology like RDF-Triples and DAML Markup Language for the agents. The second strategy uses normal C++ structs which are enhanced with methods. A working example is given here &lt;a href=&quot;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.109.895&amp;amp;rep=rep1&amp;amp;type=pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Grounding Robot Sensory and Symbolic Information using the Semantic Web, 2003&lt;/a&gt; on page 8 a complete robot ontology is in the figure. But this time as some kind of UML chart. Is using a robot ontology really a good idea?&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2018-01-03T08:31:28.320" Title="How to build a robotics ontology?" Tags="&lt;control&gt;&lt;computer-vision&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14608" PostTypeId="1" CreationDate="2017-11-13T11:22:27.870" Score="2" ViewCount="185" Body="&lt;p&gt;Trying to add manipulators to the VREP Baxter robot, I can add the gripper easily enough by adding the manipulator object in a scene to the appropriate arm tip and setting its position and rotation to 0 relative to parent.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the vacuum cup appears to require changes relative to parent of:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;position (+0.0015, +0.002, -0.055)&lt;/li&gt;&#xA;&lt;li&gt;rotation: -180 degrees in Alpha &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Am I missing something or doing something wrong?&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;why isn't the vacuum cup manipulator model defined to attach to the parent model by default (zero offsets)?&lt;/li&gt;&#xA;&lt;li&gt;I arrived at the above values by trial and error; are they derivable from the model somehow?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="18650" LastEditorUserId="18650" LastEditDate="2017-11-13T16:44:33.330" LastActivityDate="2017-11-13T16:44:33.330" Title="VREP - Attaching Baxter manipulators" Tags="&lt;simulator&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14610" PostTypeId="1" AcceptedAnswerId="14612" CreationDate="2017-11-14T00:20:28.633" Score="0" ViewCount="124" Body="&lt;p&gt;I am reading tutorials on visual servoing using Hand book of robotics and there it is mentioned that in order to control camera's six dof we need atleast 3 points. I didnt quite get the idea behind it? can anyone please explain. Thanks&lt;/p&gt;&#xA;" OwnerUserId="16715" LastActivityDate="2017-11-14T23:58:46.650" Title="why atleast three points are needed to control 6 dof?" Tags="&lt;first-robotics&gt;&lt;visual-servoing&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14611" PostTypeId="1" AcceptedAnswerId="14614" CreationDate="2017-11-14T16:20:19.970" Score="1" ViewCount="172" Body="&lt;p&gt;I am supposed to design a pick-and-place robot. I have a prismatic joint to go down to a particular depth to pick an object which is located in 2D using computer vision. What is the recommended way to detect the height at which the object is placed? The object can be at a maximum vertical distance of 15 inches (around 38 cm). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What do you think is easier to implement  for sensing this height? Any suitable cheap sensors for this arrangement? Or a stereo camera system?&lt;/p&gt;&#xA;" OwnerUserId="18657" LastEditorUserId="18235" LastEditDate="2017-11-16T11:30:15.953" LastActivityDate="2017-12-03T05:59:22.057" Title="Depth sensing for a pick-and-place robot" Tags="&lt;sensors&gt;&lt;computer-vision&gt;&lt;stereo-vision&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14612" PostTypeId="2" ParentId="14610" CreationDate="2017-11-14T23:58:46.650" Score="2" Body="&lt;p&gt;We need  to be able to track 3 points, (sometimes called features), on a solid body to estimate its 6dof pose relative to the camera. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each has an estimated position in the 2D camera image. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you imagine having only two points visible on the object, you can rotate the object around the line (axis) joining the two points and the 2D position in the image will not change.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since there is no change in the position of the points in the image for this rotation, we need one more point, that is not on the line, to estimate the pose. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can also just count the Degrees of Freedom if you understand what is independent in your problem domain. In this case, each point has 2DoF, so you need 3 of them to get 6DoF.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that in practice we use more than 3 points to both average errors and to handle the fact that it is not always easy to identify which point is which.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2017-11-14T23:58:46.650" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14613" PostTypeId="2" ParentId="8879" CreationDate="2017-11-15T09:29:24.073" Score="3" Body="&lt;p&gt;I would definately look at brushed motor when the budget is low. They have a reputation of being less powerful but the main problem is they have a very high RPM. This means you either have to use very small inefficient propellers or a geared system. Brushed geared mini drones have pretty good performance when it comes to battery life because the propeller is big compared to the weight. Small, coreless brushed motors are pretty efficient but wears out after some time.&lt;/p&gt;&#xA;" OwnerUserId="18665" LastActivityDate="2017-11-15T09:29:24.073" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14614" PostTypeId="2" ParentId="14611" CreationDate="2017-11-15T10:08:39.540" Score="1" Body="&lt;p&gt;Based on your actuator and their sensor you can try force based control, relying on admittance filter. You command the arm to go down and when an external force is applied it means you pushed the object top.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively, if you don't need millimeter accuracy you can use cheap ultra-sound sensors to detect the depth. Or if you need more precision a 1 point laser range finder. Those two option should be cheap and with simple information to handle. Place the sensor between the claws of you gripper if you can.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general, if you are not confident with vision I would recommend to avoid stereo camera system, as the calibration and exploitation is not that straight forward. &#xA;In the vision department  you can also look for sensor like kinect or intel euclide. They provide depth info readily usable and based on infrared, which might be an issue in sunny places.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2017-11-15T10:08:39.540" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14616" PostTypeId="2" ParentId="14599" CreationDate="2017-11-15T19:09:28.160" Score="2" Body="&lt;p&gt;No. URDF is a convenient way to format information about the model; it is not a model itself. &lt;/p&gt;&#xA;" OwnerUserId="9585" LastActivityDate="2017-11-15T19:09:28.160" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14617" PostTypeId="1" AcceptedAnswerId="14619" CreationDate="2017-11-16T01:26:27.200" Score="2" ViewCount="1988" Body="&lt;p&gt;There is something I need to verify.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Say we have the following RPR robot manipulator. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ZpbtW.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZpbtW.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The DH table&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/9XcwG.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9XcwG.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;yields 3 rotational matrices:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;\begin{equation}&#xA;R^0_1, R^0_2,  R^0_3&#xA;\end{equation}&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using these rotational matrices, the linear velocity Jacobian matrices \begin{equation} Jv_1, Jv_2, Jv_3 \end{equation}&#xA;and angular velocity Jacobian matrices \begin{equation} Jw_1, Jw_2, Jw_3 \end{equation} are derived. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where each of these matrices are 3 by 1. So that combining the linear and angular velocity Jacobians yields the 6 by 3 Jacobian matrix of the manipulator:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;\begin{equation}&#xA;J = &#xA;\begin{bmatrix} &#xA;Jv_1 &amp;amp; Jv_2 &amp;amp; Jv_3 \\  Jw_1 &amp;amp; Jw_2 &amp;amp; Jw_3&#xA;\end{bmatrix} &#xA;\end{equation}&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Euler Lagrange dynamics equation for a 3-DOF robot manipulator is&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/tUmgZ.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tUmgZ.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where the 3 by 3 inertia matrix is given by&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/1QVC9.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1QVC9.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where n is the number of DOF of the manipulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the D(q) matrix to be 3 by 3, the linear and angular velocity Jacobian matrices must be 3 by 3 instead or 3 by 1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Can you explain the mismatch of dimensions?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Am I supposed to augment the 3 by 1 matrices and obtain 3 by 3 matrices?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="18352" LastActivityDate="2020-04-10T08:54:35.433" Title="D(q) Inertia Matrix and the Jacobian Matrix" Tags="&lt;robotic-arm&gt;&lt;dynamics&gt;&lt;manipulator&gt;&lt;jacobian&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14619" PostTypeId="2" ParentId="14617" CreationDate="2017-11-16T03:09:39.563" Score="6" Body="&lt;p&gt;I think this is a matter of notations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the given formula for $D(q)$, the matrices $J_{vi}$ and $J_{\omega i}$ are &lt;strong&gt;&lt;em&gt;not&lt;/em&gt;&lt;/strong&gt; simply the direct extraction of columns of the Jacobian of the system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$J_i$ is the matrix that relates $\dot{q}$ to the velocity (of the center of mass) of the link $i$. That is, if we write $v_1$ to denote the linear velocity of the center of mass of the first link, then $J_1$ will be such that&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$v_1 = J_1\dot{q}.$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since $\dot{q} \in \mathbf{R}^3$ and $v_1 \in \mathbf{R}^3$, the matrix $J_1$ is a $3 \times 3$ matrix.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note also that since the velocity of link i is not affected by any joint $j &amp;gt; i$, the columns $j &amp;gt; i$ of the matrix $J_i$ will be zero.&lt;/p&gt;&#xA;" OwnerUserId="7610" LastActivityDate="2017-11-16T03:09:39.563" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14620" PostTypeId="1" AcceptedAnswerId="14623" CreationDate="2017-11-16T04:35:17.230" Score="0" ViewCount="735" Body="&lt;p&gt;I am trying to simulate and implement the controller of the paper &lt;strong&gt;Geometric Tracking Control of a Quadrotor UAV on SE(3)&lt;/strong&gt;. To do this I need to first implement the dynamics of the quadrotor. According to the paper, the whole control structure looks as follows:&lt;a href=&quot;https://i.stack.imgur.com/ZRGbe.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZRGbe.png&quot; alt=&quot;Control Structure&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And the equations of motion are:&lt;a href=&quot;https://i.stack.imgur.com/Q7vPS.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Q7vPS.png&quot; alt=&quot;Equations of motion&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now according to the setup given &lt;code&gt;f&lt;/code&gt; and &lt;code&gt;M&lt;/code&gt; as input I need to calculate the equations numbered &lt;code&gt;2&lt;/code&gt; to  &lt;code&gt;5&lt;/code&gt;. I see how we can calculate equation &lt;code&gt;2&lt;/code&gt; and &lt;code&gt;3&lt;/code&gt; and that is by calculating the acceleration and integrating over &lt;code&gt;dt&lt;/code&gt; to get velocity and integrating again to  get the position. But I don't understand how to calculate equations &lt;code&gt;4&lt;/code&gt; and &lt;code&gt;5&lt;/code&gt;. In &lt;code&gt;5&lt;/code&gt; I can calculate the angular acceleration from &lt;code&gt;5&lt;/code&gt; by manipulating it but I don't know the angular velocity &lt;code&gt;omega&lt;/code&gt;. Similarly in &lt;code&gt;4&lt;/code&gt; I don't know the angular velocity &lt;code&gt;omega&lt;/code&gt; to calculate &lt;code&gt;R_dot&lt;/code&gt;. How do I calculate &lt;code&gt;omega&lt;/code&gt; given just &lt;code&gt;f&lt;/code&gt; and &lt;code&gt;M&lt;/code&gt;? Is there a flaw in my understanding? Am I missing some piece of information? The link to the paper is &lt;a href=&quot;http://ieeexplore.ieee.org/document/5717652/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. Thanks in advance&lt;/p&gt;&#xA;" OwnerUserId="7702" LastActivityDate="2017-11-16T12:58:02.103" Title="Quadrotor Dynamics: Calculating angular velocity of quadrotor" Tags="&lt;quadcopter&gt;&lt;control&gt;&lt;kinematics&gt;&lt;dynamics&gt;&lt;motion&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14623" PostTypeId="2" ParentId="14620" CreationDate="2017-11-16T11:31:14.307" Score="0" Body="&lt;p&gt;If you want to compute the quadrotor dynamics you just need to plug &lt;code&gt;M&lt;/code&gt; and &lt;code&gt;f&lt;/code&gt; in (5) and (3) to get the accelerations, then you integrate the accelerations to get the velocities and you integrate the velocities to get the position/attitude. &#xA;You will need to initialize the velocities and position/attitude to their initial values (typically zero velocity and initial position/attitude).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that $\hat{.}$ is a skew symmetric operator, and retrieving the roll pitch yaw angle from $\mathbf{R}$ an be done easily based on the expression of some of its components. The tricky part is integrating the $\dot{\mathbf{R}}$&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2017-11-16T11:31:14.307" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="14624" PostTypeId="2" ParentId="14620" CreationDate="2017-11-16T12:58:02.103" Score="0" Body="&lt;p&gt;I think what you're missing is initial conditions; you need to define $\Omega$ at $t=0$. Give that angular velocity, you can then easily solve (4) for $\dot{R}$ and (5) for $\dot{\Omega}$. From that point forward you always know what $\Omega$ is at the start of the timestep so can continue to solve in the same manner.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2017-11-16T12:58:02.103" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14631" PostTypeId="1" CreationDate="2017-11-18T15:50:32.577" Score="0" ViewCount="1614" Body="&lt;p&gt;I have recently build a quadcopter with the following specs:-&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;KK mini board&lt;/li&gt;&#xA;&lt;li&gt;4 x A2212-1000kV / 13T motors&lt;/li&gt;&#xA;&lt;li&gt;4 x 30A ESC&lt;/li&gt;&#xA;&lt;li&gt;2200mAh 25C 12.5V battery&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The issue i am facing is that once the throttle crosses close to 50% either:-&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;One or more motors would stop spinning.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=oPGH4ibbogI&quot; rel=&quot;nofollow noreferrer&quot;&gt;Motor fail video 1&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=o83q6dJ-nuk&quot; rel=&quot;nofollow noreferrer&quot;&gt;Motor fail video 2&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;All motors would slow down to min speed.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I have checked the battery voltage before running and its at 12.2 V.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It would be really helpful if you could suggest a fix.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Additional data&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Voltage across ESC with motors (All 4 connected at same time w/o propeller)&#xA;STOP =&gt; Speed at which motor stopped working.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;          +---------+---------+---------+---------+&#xA;+---------+ Motor 1 | Motor 2 | Motor 3 | Motor 4 |&#xA;|Throttle | (Volts) | (Volts) | (Volts) | (Volts) |&#xA;+---------+---------+---------+---------+---------+&#xA;|   Min   |  10.3   |  10.3   |  10.3   |  10.3   |&#xA;+---------+---------+---------+---------+---------+&#xA;|   7%    |  9.75   |         |         |         |&#xA;+---------+---------+---------+---------+---------+&#xA;|   50%   |  9.48   |         |  STOP   |         |&#xA;+---------+---------+---------+---------+---------+&#xA;|   72%   |  9.26   |         |         |         |&#xA;+---------+---------+---------+---------+---------+&#xA;|   Max   | STOP /  |  9.28   |  9.28   |  9.28   |&#xA;+---------+  9.28   +---------+---------+---------+&#xA;          +---------+                              &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Voltage across individual ESC with motors without propellers&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;          +---------+---------+---------+---------+&#xA;+---------+ Motor 1 | Motor 2 | Motor 3 | Motor 4 |&#xA;|Throttle | (Volts) | (Volts) | (Volts) | (Volts) |&#xA;+---------+---------+---------+---------+---------+&#xA;| Battery |  12.04  |  11.60  |  11.60  |  11.50  |&#xA;+---------+---------+---------+---------+---------+&#xA;|   Min   |  11.89  |  11.60  |  11.54  |  11.35  |&#xA;+---------+---------+---------+---------+---------+&#xA;|   7%    |  11.86  |  11.60  |  11.51  |  11.31  |&#xA;+---------+---------+---------+---------+---------+&#xA;|   20%   |  11.83  |  11.61  |  11.49  |  11.29  |&#xA;+---------+---------+---------+---------+---------+&#xA;|   50%   |  10.77  |  11.56  |  11.41  |  11.24  |&#xA;+---------+---------+---------+---------+---------+&#xA;|   72%   |  11.63  |  11.47  |  11.25  |  11.06  |&#xA;+---------+---------+---------+---------+---------+&#xA;|   Max   |  11.57  |  11.50  |  11.17  |  10.98  |&#xA;+---------+---------+---------+---------+---------+&#xA;+---------+---------+---------+---------+---------+&#xA;|Change in|  0.32   |  0.10   |  0.37   |  0.37   |&#xA;| voltage +---------+         +---------+---------+&#xA;| between |         |  Maybe  |                    &#xA;| 1st and |         |  error  |                    &#xA;|  last   |         |  while  |                    &#xA;| reading |         | taking  |                    &#xA;+---------+         | reading |                    &#xA;                    +---------+                    &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;NOTE: That after re-soldering, the motors run fine to full throttle without propellers. But once I attach the propellers the motor 3 stops spinning beyond 50% throttle.&lt;/p&gt;&#xA;" OwnerUserId="18694" LastEditorUserId="18694" LastEditDate="2017-11-19T06:20:16.323" LastActivityDate="2019-01-24T17:49:14.553" Title="Quadcopter motor fails beyond 50% throttle" Tags="&lt;quadcopter&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14632" PostTypeId="2" ParentId="14631" CreationDate="2017-11-18T22:31:32.713" Score="1" Body="&lt;p&gt;This issue might be caused by a voltage drop accross the system. Either your batteries aren’t charged up, your batteries are rated for a lower voltage or, the way the power is being distributed is incorrect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Steps to fix it:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Check each motor separately: connect the three wire lead coming from the ESC and plug it into the receiver (motor must be connected to the three phase cables, and ESC must be connected to the battery). If any motor starts to stutter or stall, swap the ESC and check if the ESCs are defective.&lt;/li&gt;&#xA;&lt;li&gt;If the motors and ESCs are working correctly, check if your power distribution board is working correctly. If you’re using a power distribution board, then check each solder pad and see if there’s enough contact, also check each of the 4 ESC terminals are being supplied around 12 volts. If they aren’t being supplied 12 volts, then your pdb is at fault.&lt;/li&gt;&#xA;&lt;li&gt;If there are no faults with the motors, ESCs and PDB, check all your wiring and see if there’s any loose connections and also check the settings on the KK flight controller.&lt;/li&gt;&#xA;&lt;li&gt;For the KK flight controller, first, calibrate the ESCs, REMEMBER TO TAKE ALL PROPELLERS OFF. After calibration, go through the different settings to see if there’s anything to be changed.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;During this test ALL PROPELLERS MUST BE REMOVED. After removing, you can take a small cut of electrical tape and stick it onto the motor shafts so you can feel the motor directions. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I personally don’t really like the KK flight controller because when calibrating the ESCs, a lot of things can go wrong, press the buttons for too long or too short, the motors will start spinning at full throttle. I’ve had personal experience when I left the props on and held the buttons for too long. I ended up with a shaved finger and two deep gashes near my right hand wrist.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you’ve tried all of this and it still fails, please reply with a list of all of the components used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Best of luck,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sid.&lt;/p&gt;&#xA;" OwnerUserId="11688" LastActivityDate="2017-11-18T22:31:32.713" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="14633" PostTypeId="1" AcceptedAnswerId="14804" CreationDate="2017-11-19T05:08:15.707" Score="5" ViewCount="999" Body="&lt;p&gt;I'm considering buying a vacuum robot.  At first I got excited at finding out that Roomba has an Open Interface.  Apparently this was taken out around model 800+ (?)   The newest models do not have an Open Interface.   What robot vacuums are open / hackable?   &lt;/p&gt;&#xA;" OwnerUserId="18700" LastActivityDate="2017-12-16T18:53:19.220" Title="Hacker friendly vacuum robots" Tags="&lt;roomba&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14634" PostTypeId="2" ParentId="8130" CreationDate="2017-11-19T07:51:07.113" Score="0" Body="&lt;p&gt;My suggestion is to start very slowly but comfortable. At first step, don't try to control the robot automatically, instead use manual control and see the robot as a RC-car. Drive a little bit around with the toy and have fun with the obstacles. The second step is to program the domain knowledge into the robot. This is done via a surveillance parser. The software tracks the manual actions of the human operator and prints conclusions on the screen. Like “robot drives straight ahead” “obstacle in front of robot” “robot is on the waypointline”, “robot is off road”. The third and last step is to add a recommendation function to the surveillance system. The software gives an advice what the human operator has to do next. In all steps, the human operator must stay in the loop, it should be a semiautomatic system:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;quote: “In this game, the robots are semi-autonomous: Although the&#xA;  robots have intelligence (machine low level) that allows them to&#xA;  follow colored lines, users interact with them and provide high level&#xA;  commands“ &lt;a href=&quot;https://nereus.mech.ntua.gr/Documents/pdf_ps/aim11.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Semi-autonomous Color Line-Following Educational Robots:&#xA;  Design and Implementation,&#xA;  2011&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2017-11-19T07:51:07.113" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14638" PostTypeId="1" CreationDate="2017-11-19T19:27:05.003" Score="3" ViewCount="114" Body="&lt;p&gt;(This is a little long)&lt;/p&gt;&#xA;&lt;p&gt;So I am working on a drone recently, and aim to control it using an Android device. I've read that it can be done using a Raspberry Pi and Multi Wii, but I couldn't find any crius multiwii boards for sale anywhere. So I decided to build one using a few guides.&#xA;I used an Arduino nano and an MPU 6050 to get my work done, and have made all proper connections.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;5V - VCC&lt;/p&gt;&#xA;&lt;p&gt;GND - GND&lt;/p&gt;&#xA;&lt;p&gt;A5 - SCL&lt;/p&gt;&#xA;&lt;p&gt;A4 - SDA&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I dumped the Multiwiii firmware on to the board, by making the proper adjustments in the code. And then I test the device using the Multiwiii calib tool provided.&#xA;Everything is fine, the picture of the quad rotates as I move the assembly, but the issue is that the compass tilts in its own. I thought it maybe due to some lose contact, even after thoroughly soldering it remained the same.&#xA;Essentially, the yaw and roll, and the compass indicator slowly drift even if the assembly is perfectly still. I'm unable to find a proper solution to this, as the drift should not happen in real flight. The drift is very small, +1° to the left or right for every 2-3 seconds. But over a period of time, it builds up to noticeable drift. I'm looking for a possible explanation of this, or a solution/suggestion, I'd really appreciate it.&lt;/p&gt;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="18710" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2018-10-20T19:00:00.497" Title="Flight controller drift issue" Tags="&lt;arduino&gt;&lt;first-robotics&gt;&lt;robotics-library&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14639" PostTypeId="1" AcceptedAnswerId="14641" CreationDate="2017-11-19T21:56:51.587" Score="3" ViewCount="161" Body="&lt;p&gt;I am reading about singularities and I know that those are configurations which result in the same end-effector position and orientation.&#xA;I also read that joint velocities get very high near that singularity but I don't understand why.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I get it that they have to be very high when going through that singularity because the arm has to be in multiple poses at once, but I don't know why the speed is so high if it is just near a singularity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please help me understand.&lt;/p&gt;&#xA;" OwnerUserId="18713" LastActivityDate="2017-11-20T13:39:53.800" Title="Why are joint velocities very high near a singularity?" Tags="&lt;inverse-kinematics&gt;&lt;singularity&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14641" PostTypeId="2" ParentId="14639" CreationDate="2017-11-20T02:58:31.057" Score="6" Body="&lt;p&gt;First of all, singularities are &lt;strong&gt;&lt;em&gt;not&lt;/em&gt;&lt;/strong&gt; configurations that have the same end-effector position and orientation. Those configurations are inverse kinematic (IK) solutions to that end-effector pose (position &lt;strong&gt;&lt;em&gt;and&lt;/em&gt;&lt;/strong&gt; orientation).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The formal definition of singularities is the configurations that the Jacobian loses its rank. At such configurations, the manipulator may lose its degrees-of-freedom (DOF), i.e., it may not be able to move its end-effector in some certain direction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's consider the relation&#xA;$$\dot{x} = J(q)\dot{q},$$&#xA;where $x \in \mathbf{R}^6$ is a vector representing an end-effector pose, $q \in \mathbf{R}^n$ is a robot configuration, $J(q)$ is the Jacobian at the given configuration, and $n$ is the number of DOFs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the sake of argument, consider when $n=6$, i.e., $J(q)$ is a square matrix. At a singular configuration $q^\ast$, the Jacobian loses its rank and therefore $\det(J) = 0$. Looking back to the previous relation, you may see that no matter how large the joint velocity is, it does not contribute anything to the end-effector velocity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's consider this from a mathematical point of view. From the &lt;a href=&quot;https://en.wikipedia.org/wiki/Singular-value_decomposition&quot; rel=&quot;nofollow noreferrer&quot;&gt;singular-value decomposition&lt;/a&gt; of $J(q)$, one has&#xA;$$\dot{x} = (U\Sigma V^{-1})\dot{q},$$&#xA;where $U$ and $V$ are some orthogonal matrices and $\Sigma$ is a diagonal matrix whose entries are singular values (well, not the same &lt;em&gt;singular&lt;/em&gt; as what we are discussing). With some algebraic manipulation, one has&#xA;$$\dot{x}' = \Sigma \dot{q}',$$&#xA;where $\dot{x}' = U^{-1}\dot{x}$ and $\dot{q}' = V^{-1}\dot{q}$. Those mapping by $U^{-1}$ and $V^{-1}$ can be seen as coordinate transformations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the vicinity of a singular configuration, the Jacobian nearly loses its rank. The singular values (i.e., the entries of $\Sigma$) are very small. Therefore, to attain a certain $\dot{x}'$ (that is, to be able to move in some direction), you would require a very large $\dot{q}'$.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Note, however, that after all, the high joint velocity behavior near a singular configuration is a result of using the relation $\dot{x} = J\dot{q}$ to calculate $\dot{q}$ from a given $\dot{x}$. As @Ugo pointed out in his comment, there exists methods to get around this behavior.&lt;/p&gt;&#xA;" OwnerUserId="7610" LastEditorUserId="7610" LastEditDate="2017-11-20T13:39:53.800" LastActivityDate="2017-11-20T13:39:53.800" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14643" PostTypeId="1" CreationDate="2017-11-20T16:02:10.590" Score="-1" ViewCount="53" Body="&lt;p&gt;I have a quad copter and I'm developing my own flight controller to run the code and testing it on the quad.&#xA;As you all must be knowing, this means a lot of broken propellers.&#xA;I thought of making a frame with prop protection but fabrication seemed difficult because 3d printing is proving expensive and cutting aluminum isn't that practical. Can you suggest a better way to fabricate? &lt;/p&gt;&#xA;" OwnerUserId="18717" LastActivityDate="2021-02-20T16:06:20.623" Title="How can I protect my props from being damaged?" Tags="&lt;quadcopter&gt;&lt;frame&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14644" PostTypeId="2" ParentId="14643" CreationDate="2017-11-20T17:06:47.493" Score="0" Body="&lt;p&gt;It seems odd to me that cutting aluminum is cheaper than 3d printing plastic protections. &#xA;As pointed out by @st2000, propeller protectors are available on the market, provided that you have a standard structure and propeller size. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Otherwise I would suggest that you look into polystyrene block to do your own propeller guard. This is a lightweight and cheap option.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Be aware that if you make your protection too big you will impact the aerodynamic of the airflow. This can be used as in ducted fan setups.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2017-11-20T17:06:47.493" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14646" PostTypeId="1" CreationDate="2017-11-20T21:44:44.583" Score="1" ViewCount="98" Body="&lt;p&gt;I am applying Recursive Newton Euler Inverse Dynamics to a simple two link model. If I apply the result torques and forces using PhysX or Bullet Physics I get unexpected results. The model spins and deforms instead of rising in the Y direction without rotating and deforming as the input acceleration indicates:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/fCoRK.png&quot; alt=&quot;a busy cat&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Newton Euler Inverse Dynamics (tested with RBDL and Matlab spatial_v2). Returns:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Tau = 0,6,0, -6,0,0, -3,0,0 = (force A, Torque A, Torque B)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I apply these forces and torques in PhysX and Bullet the bodies deform and rotate. The values that work in Bullet and PhysX are: Fa=0,6,0 Ta=3,0,0 Tb=3,0,0.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I feed Tau into Forward Dynamics using Composite Body or Articulated Body then the original acceleration is returned.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am wondering how one applies Tau to a model. Is there a transformation I am missing somewhere? All the joints in the model are aligned with the worldspace axis. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help would be appreciated. Thanks&lt;/p&gt;&#xA;" OwnerUserId="18722" LastActivityDate="2017-11-20T21:44:44.583" Title="How to interpret and apply results from Inverse Dynamics" Tags="&lt;dynamics&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14647" PostTypeId="2" ParentId="10314" CreationDate="2017-11-21T00:48:22.870" Score="1" Body="&lt;p&gt;I came back to this problem and just stumbled over an answer. &#xA;At the end of the simulation update step I was using:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;time.sleep(dt)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It should have been:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;env.StepSimulation(dt)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This fixed that particular problem.&lt;/p&gt;&#xA;" OwnerUserId="2178" LastActivityDate="2017-11-21T00:48:22.870" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14648" PostTypeId="1" AcceptedAnswerId="14656" CreationDate="2017-11-21T12:10:40.120" Score="2" ViewCount="1116" Body="&lt;p&gt;I have a line following differential drive robot with a PID control. I successfully tuned (try and error) the P,I,D constants for a good stability in low speeds, but when I increase the speed, everything goes sideways. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore I want to solve this with a bit of a mathematical approach. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I started logging the error (setpoint-present sensor value;input for PID) and output (from the PID; motors get values: left = speed-output, right = speed+output). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is, whether it is possible to use this data in order to further improve the PID?&lt;/p&gt;&#xA;" OwnerUserId="18731" LastActivityDate="2017-11-21T22:46:33.563" Title="Line follower PID tuning for high speed" Tags="&lt;pid&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14649" PostTypeId="1" AcceptedAnswerId="14658" CreationDate="2017-11-21T18:50:50.153" Score="1" ViewCount="90" Body="&lt;p&gt;I am trying to simulate and implement the controller in the paper &lt;a href=&quot;http://ieeexplore.ieee.org/document/5717652/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Geometric Tracking Control of a Quadrotor UAV on SE(3)&lt;/a&gt;. I have the dynamics implemented, however I am stuck at one part in the controller which is the calculation of the following equation:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$e_\Omega=\Omega-R^TR_d\Omega_{d\cdot}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have all the variables in equation (11) calculated except for $\Omega_d$ which is the desired angular velocity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From equation (4) of the paper we know the relation:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\dot{R}_d=R_d\hat{\Omega}_d$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I don't know how to calculate $\dot{R}_d$. Can someone give the exact equation for getting $\dot{R}_d$ so I can calculate $\Omega_d$ to get the error $e_\Omega$?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My code is &lt;a href=&quot;https://github.com/dani199221/ENGR-E599/blob/master/python/controller.py#L51&quot; rel=&quot;nofollow noreferrer&quot;&gt;available on github&lt;/a&gt;. &lt;/p&gt;&#xA;" OwnerUserId="7702" LastEditorUserId="37" LastEditDate="2017-11-22T11:10:16.140" LastActivityDate="2017-11-22T11:10:16.140" Title="Quadrotor SE3 Controller: Calculating Rd_dot" Tags="&lt;quadcopter&gt;&lt;control&gt;&lt;dynamics&gt;&lt;motion&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14650" PostTypeId="1" CreationDate="2017-11-21T20:11:46.953" Score="0" ViewCount="79" Body="&lt;p&gt;How much would a sex robot cost, and is it ethically correct?&lt;/p&gt;&#xA;" OwnerUserId="18735" LastActivityDate="2017-11-21T20:15:12.873" Title="Sex Robotics for everyone male and female" Tags="&lt;mobile-robot&gt;" AnswerCount="1" CommentCount="3" ClosedDate="2017-11-22T11:15:49.723" ContentLicense="CC BY-SA 3.0" />
  <row Id="14651" PostTypeId="2" ParentId="14650" CreationDate="2017-11-21T20:13:46.993" Score="1" Body="&lt;p&gt;Cost wise, the robots would only constantly decrease in price as the technology is currently infantile and very expensive but soon itll be relatively cheap and widely understood. Ethic wise, fleshlights are allowed so why wouldn't sex robots be right? ^^&lt;/p&gt;&#xA;" OwnerDisplayName="user18736" LastActivityDate="2017-11-21T20:13:46.993" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14654" PostTypeId="2" ParentId="14540" CreationDate="2017-11-21T20:15:14.927" Score="2" Body="&lt;p&gt;Good Question.  The number, arrangement, and orientation of DoFs in the robot should not be taken lightly.  It should reflect the robot's desired purpose.  Care must be taken to place the &quot;sweet spot&quot; of the arm's workspace in a good place relative to the rest of the robot.  And if there will be 2 arms, you probably also want to overlap their workspaces significantly (or not).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;N. Staub already mentioned number of DoFs and placement of the (heavy) motors.  Physical constraints like this are obviously very important.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The orientation of joints can also drastically affect the robot's workspace.  Take a look at these examples:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www-robotics.cs.umass.edu/uploads/Robots/u7_balance.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;UMass Amherst's UBot-7&lt;/a&gt; has arms that come straight out the sides of the robot's torso.&lt;/li&gt;&#xA;&lt;li&gt;The &lt;a href=&quot;https://i.ytimg.com/vi/UpyKt6mClVA/maxresdefault.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;DARPA ARM-S Robot&lt;/a&gt; has arms that come out of the torso at 45 degree angles.&lt;/li&gt;&#xA;&lt;li&gt;The original &lt;a href=&quot;https://motherboard-images.vice.com/content-images/contentimage/18440/1421780280013933.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;Boston Dynamics Atlas&lt;/a&gt; had arms that came out at upward angles.&lt;/li&gt;&#xA;&lt;li&gt;The &lt;a href=&quot;https://spectrum.ieee.org/image/MjcwNjY4Mg.jpeg&quot; rel=&quot;nofollow noreferrer&quot;&gt;ABB YuMi Robot&lt;/a&gt; has arms that come out of the torso both angled in and up.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Lastly, the arrangement of the DoFs can also change the usable workspace of the arm.  There are many metrics that can be used to determine the arm's &quot;sweet spot&quot;.  Manipulability measure is one such metric.  Here i some analysis I did on a 5 DoF humanoid arm, (3 DoF shoulder, 1 DoF elbow, 1 DoF wrist).  I analyzed 2 different shoulder configurations: Roll-Pitch-Roll, and Yaw-Pitch-Roll.  Link lengths are identical, and I think the joint limits are analogous.  Color codes denote the scale of the manipulability measure.  Red is large, Green is low.  Larger (redder) is better.  There is an isometric view in the upper left, and 3 orthogonal views.  Front view is in the lower right.  For the orthogonal views, what is shown is a slice through workspace close to the elbow joint.  The robot's torso is gray, upper arm is red, lower arm is green, and wrist is blue.  This is the robot's right arm.  As shown, the arm is sticking straight out of the torso.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/tINxU.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tINxU.png&quot; alt=&quot;RPR&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/3a8WG.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3a8WG.png&quot; alt=&quot;RPY&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can see that the shape of the sweet spot is different between the two arms.  For Roll-Pitch-Roll it is more up and down.  And for Yaw-Pitch-Roll it is more left to right.  If the X axis points forward, Y points to the left of the robot, and Z points up, then the best manipulability space for the RPR configuration is like a doughnut around Y axis, and around the Z axis for the YPR configuration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lastly, if you are interested in designing robot arms, I highly recommend the book:&#xA;&quot;Robot Evolution: The Development of Anthrobotics&quot; by Mark E. Rosheim.  &lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2017-11-21T20:15:14.927" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14655" PostTypeId="1" CreationDate="2017-11-21T22:03:56.560" Score="1" ViewCount="147" Body="&lt;p&gt;I have a controller that uses Theta,Z,Psi and Phi as a command. Now I want to create a position controller so that I can command a trajectory. I have checked a similar question raised in this attached link  &lt;a href=&quot;https://robotics.stackexchange.com/questions/4675/position-controller-for-a-quadrotor&quot;&gt;Position Controller for a Quadrotor&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I couldn't figure out how to calculate the vx and vy in this equation:&#xA;\begin{align}&#xA;\hat{\phi}^d &amp;amp;= k_{p,y} (y-y^d) + k_{d,y} (v_y - v_y^d) + k_{i,y} \int_0^t (y-y^d) dt&#xA;\\&#xA;\hat{\theta}^d &amp;amp;= -k_{p,x} (x-x^d) = k_{d,x} (v_x - v_x^d) - k_{i,x} \int_0^t (x-x^d) dt&#xA;\end{align}&#xA;Are we going to use them as one of the command input or are there other ways to calculate them from the position?&lt;/p&gt;&#xA;" OwnerUserId="18718" LastActivityDate="2017-11-21T22:03:56.560" Title="How to create a Position controller for a Quadrotor" Tags="&lt;quadcopter&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14656" PostTypeId="2" ParentId="14648" CreationDate="2017-11-21T22:46:33.563" Score="0" Body="&lt;p&gt;Yes, it is possible. Though remember, what you are measuring is error between measured value (which for your robot is direction that it is heading in 2D) and desired value (which is direction it should be heading). To use more mathematical and complicated methods, you have to know absolute heading of robot and be able to measure its &lt;a href=&quot;https://en.wikipedia.org/wiki/Step_response&quot; rel=&quot;nofollow noreferrer&quot;&gt;step response&lt;/a&gt;. For robot like that it would be response to i.e. 45 degree angle drawn on track. Also, &lt;a href=&quot;https://robotics.stackexchange.com/questions/167/what-are-good-strategies-for-tuning-pid-loops&quot;&gt;check this question&lt;/a&gt; for good PID tuning strategies. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;With trial-error method You can do well, but remember - winning robots have:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;wheels speed measurement (i.e. encoders) - best way to compensate loss of voltage on battery during run,&lt;/li&gt;&#xA;&lt;li&gt;clean and well made tires - clean before every run to get best results, &lt;/li&gt;&#xA;&lt;li&gt;proper line sensors alignment - far forward and close to each other (distance smaller than 19mm sensor to sensor).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="14673" LastActivityDate="2017-11-21T22:46:33.563" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14658" PostTypeId="2" ParentId="14649" CreationDate="2017-11-22T10:54:32.250" Score="2" Body="&lt;p&gt;In this paper rotation matrices are used to describe the orientation of the quadrotor. This is chosen because each orientation as a single representation (contrary to quaternions) and gimbal lock is not possible (contrary to any Euler angle convention).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the proposed controller, ones want to know how close the actual rotational velocities from the desired one, hence the equation (11) which provides this information as a vector from the matrix representation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That being said, $\Omega_d$ is your desired angular velocity and should come from your planner  as for the desired rotation transcribed in $R_d$. As you have the time evolution of $R_d$ you should be able to get its derivative $\dot{R}$.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2017-11-22T10:54:32.250" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14660" PostTypeId="2" ParentId="14638" CreationDate="2017-11-22T14:05:28.847" Score="1" Body="&lt;p&gt;You are using cheap MEMS components, they are typically prone to noise and drift.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know how you retrieve your angles but the sensors are giving you angular velocities and linear accelerations. Start by assessing the quality of these signals, and then see of this maps to your orientation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typically there are two ways of computing orientation, either projection the gravity $\vec{g}$ measured by the IUM (if acceleration from motion is negligible) or integrating the gyros (if noise on the gyros is small).&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2017-11-22T14:05:28.847" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14661" PostTypeId="1" AcceptedAnswerId="14667" CreationDate="2017-11-22T14:15:54.853" Score="0" ViewCount="179" Body="&lt;p&gt;I am interested to know, if I want to build middle/big size robots(50*50*150 cm^3), which material and which method is better to use?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I mean, when I want to build a robot with this size(20*20*20) I do designing with solidworks and printing by 3d-printer very happy and simple! But what if I like to bigger my robot? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think this photo may help to clarify what do I mean:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/MJvxn.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MJvxn.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If someone wants to build robots in this scale, what should he learn?(except going to university and getting a master in mechanical engineering:) ). I mean is it possible to learn or not?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: I wanted to write this for Mike but it was to big for a comment and I thought maybe it's better to add it here:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;It was a great answer, thank you! But maybe it was better to mention I&#xA;  really don't want to build a robot lonely by myself. My goal was about&#xA;  learning how can I make a big prototype of my robot? I have made a&#xA;  robot in 20*15*20 cm^3 size by 3d printer. it's an educational robot.&#xA;  I designed it by Solidworks and made it by my Prusa i3 printer. Also I&#xA;  programmed it myself. And I thought if I can build this robot in&#xA;  50*50*150 cm^3 size I can sell it to schools! or even build other&#xA;  types of robots like servants. So I was looking toward a way to build&#xA;  a prototype of that and show it to some investors and make a team to&#xA;  build it functional as you said it in your answer.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="17822" LastEditorUserId="17822" LastEditDate="2017-11-23T14:18:48.853" LastActivityDate="2017-11-23T17:52:38.853" Title="How to build big robots(Material/Method)?" Tags="&lt;mobile-robot&gt;&lt;manufacturing&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14664" PostTypeId="1" CreationDate="2017-11-23T00:34:57.730" Score="2" ViewCount="156" Body="&lt;p&gt;I am trying to integrate GPS and IMU but as a first step I am trying to use just 1d gyro and 2d accelerometer to work. Below is my model - &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/X2Gx2.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;State model and propagation&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/WA9Dk.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/WA9Dk.png&quot; alt=&quot;state transition and process noise&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, my question is .. after implementing this EKF, if I sigma_u for accelerometer is reduced to like 0.1 or less or in fact any lesser value, the error in comparison to GPS solution grows. It becomes around 50 m!! If I put in a higher value the error decreases. What am I missing in the model? Can anyone help me, please? &lt;/p&gt;&#xA;" OwnerUserId="18751" LastActivityDate="2018-10-24T06:00:40.640" Title="GPS/ 1GYRO - 2D + ACCEL+GPSEKF" Tags="&lt;imu&gt;&lt;ekf&gt;&lt;gps&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14666" PostTypeId="1" AcceptedAnswerId="14668" CreationDate="2017-11-23T06:25:49.250" Score="0" ViewCount="43" Body="&lt;p&gt;Robotics! We've got a rotation device controlled with Kollmorgen S300 servodrive. The official support is silent as Jesus, so I've decided to ask here instead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When it is given a task to set into a direct position, it comes to that position and then oscillates around it with a radius of 4-5 degrees. As we are simply C++ programmers and our job is NOT related with any mechanical devices (we don't know physics), we are stuck. So, the question comes to that:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;What are the general reasons for drive oscillation?&lt;/li&gt;&#xA;&lt;li&gt;How do we fix that?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Thank you very much in advance!&lt;/p&gt;&#xA;" OwnerUserId="18757" LastActivityDate="2017-11-23T13:40:24.330" Title="Kollmorgen S300 drive oscillation" Tags="&lt;servomotor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14667" PostTypeId="2" ParentId="14661" CreationDate="2017-11-23T13:20:44.543" Score="1" Body="&lt;p&gt;&lt;code&gt;I am interested to know, if I want to build middle/big size robots(50*50*150 cm^3), which material and which method is better to use?&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am assuming you don't want to go the way of designing a robot using a CAD software followed by tons of machining to bring all the custom parts to life. If you are looking to build a robot using off-the-shelf materials, I would say aluminum extrusion is the way to go. It is the machine builder's lego. Using aluminum extrusion and aluminum plates, you can rapidly build a large, rigid base onto which you can mount all your electronics, motors, sensors, computers, etc.... I prefer Bosch aluminum extrusion (which officially is called 'aluminum structural framing'). Have a look here: &lt;a href=&quot;https://www.boschrexroth.com/en/us/products/product-groups/assembly-technology/aluminum-structural-framing/index&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.boschrexroth.com/en/us/products/product-groups/assembly-technology/aluminum-structural-framing/index&lt;/a&gt;. For plates, round shaft, angle, etc... you can go to metal supermarkets (if you are in US or Canada. If not you should have something local). An example of an ongoing robotic project that was built with extrusion and plates can be seen here: &lt;a href=&quot;https://answers.ros.org/question/271819/please-suggest-all-packages-to-achieve-slam-for-robot/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://answers.ros.org/question/271819/please-suggest-all-packages-to-achieve-slam-for-robot/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;I think this photo may help to clarify what do I mean:&lt;/code&gt;&#xA;Aluminum extrusion will allow you to build the two robots that have a rolling base. As for the middle biped robot, you will need to get more fancy... WAY more fancy. Building biped robots is very challenging, and you will most likely will need to machine your own components around off-the-shelf parts that you are utilizing. Rolling bases with robots on top are much easier to build than biped robots. I guess I am trying to say that the images you included are robots that are not all in the same league. So far I have focused on a moving base. If you are trying to build arms with end effectors, you will need to start machining custom parts (whether your own design or open source).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;If someone wants to build robots in this scale, what should he learn?(except going to university and getting a master in mechanical engineering:) ). I mean is it possible to learn or not?&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Usually advanced robots (like the 3 you have in the image) are built by teams. Teams allow members to specialize in different disciplines (mechanical, electrical, electronics, programming, etc...) which produces the best solutions in each discipline. However, a single person can also build an advanced robot, it just takes longer, and it will be very challenging to come up with the perfect solution in every discipline every time. My question is why do you want to build a robot? if you are trying to learn, then join a robotics club, or start building miniature robots. If you are looking to build functional robots (entirely on your own), to achieve actual tasks, then I suggest you learn the following:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;CAD software - drawing your robot out will save you time as you discover issues before you start building. I recommend solid works, so you can later do 3D printing.&lt;/li&gt;&#xA;&lt;li&gt;Machining - you will need to build some pieces that link off-the-shelf parts in your mechanical design.&lt;/li&gt;&#xA;&lt;li&gt;Electrical - You can always pick up a textbook and run through basic AC/DC theory and do some experimentation. You will need to have some basic understanding to use off the shelf parts and how to integrate them together. you will need to understand how to step down/up voltage, limit amperage, etc... &lt;/li&gt;&#xA;&lt;li&gt;Mechanics - Before you start building you will need to double check your design (catch items such as robot will not flip as it's too top heavy, or motor is underpowered to move limb, etc...) &lt;/li&gt;&#xA;&lt;li&gt;Programming - May I suggest C and C++? You will need to program the robot to control all your hardware to perform the task you want. I am relying on the ROS framework.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Robotics is an amalgamation of mechanical, electrical and programming. All robots rely on these disciplines to various extents.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My advice is first figure out why you need a robot. this will guide what you will build. Then start building each system out independently of each other; once you are done amalgamate all your parts into a single unit.&lt;/p&gt;&#xA;" OwnerUserId="18167" LastActivityDate="2017-11-23T13:20:44.543" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14668" PostTypeId="2" ParentId="14666" CreationDate="2017-11-23T13:40:24.330" Score="2" Body="&lt;p&gt;I just looked up the model number and it's a servo drive. If you did not tune your servo axis then you will have very bad performance, and what is happening is to be expected. You need to tune your PID loop. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Servo systems are closed loop. This means that the encoder (or resolver) in the servo motor is sending feedback to the drive. The drive using the PID values you provided will use an algorithm which modifies the voltage output to the motor to eliminate the error (actual position vs. the position the motor is supposed to be in). If your PID is not properly set up, a mild oscillation means you are lucky... Your servo could run away and start shaking violently until the drive faults. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To solve your problem you need a tuning guide. I prefer Applied Motion Products, and as a sample of what needs to be done have a look at this document: &lt;a href=&quot;https://www.applied-motion.com/sites/default/files/QuickTuner_920-0022C_0.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.applied-motion.com/sites/default/files/QuickTuner_920-0022C_0.pdf&lt;/a&gt;. You need the same document for Kollmorgen (who I have worked with, and at the time I was not a fan.. but it was over 10 years ago, maybe they are better now).&lt;/p&gt;&#xA;" OwnerUserId="18167" LastActivityDate="2017-11-23T13:40:24.330" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14669" PostTypeId="2" ParentId="14661" CreationDate="2017-11-23T17:52:38.853" Score="1" Body="&lt;p&gt;From what I understand, your question is purely about how to manufacture a robot that looks like it when you have the know-how for programming it and stuff.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Manufacturing such robots as in your picture uses mostly polymers(fancy name for plastics). They are created using injection moulding machines and other similar processes. For the aluminium/metal parts, metal additive manufacturing or aluminium extrusion is used. All g&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, when you are scaling your robot up, you have will have different mass for every link and joint. Therefore you will have to scale up your power supply and actuators torques, and then work around with other requirements from there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now for determining the torques required at the joints, you will need to know the mass and the moment of inertia of every joint and link, which depends upon the material and design, of course.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For understanding everything, you will need to study forward and inverse kinematics and then learn about robot dynamics. Ideally, its best if you study everything from the basics and make sure you understand everything about it so that you will built a very reliable robot that does exactly the way you expect it to. I am afraid I will have to leave the part about whether it is achievable on your own or not upto your discretion. Most people who studied this subject at university with me found it quite difficult.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I know people who just winged it with simple robot designs of similar dimensions and they worked. However, If you plan on building a bi-ped robot of that scale, Gob bless you! It will involve tremendous amounts of trial and error which maybe very expensive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since you are planning on building a team to help you out, I suggest you get someone from mechatronic/mechanical, electronic and computer engineering background.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope I have answered all your queries correctly. Cheers!&lt;/p&gt;&#xA;" OwnerUserId="18222" LastActivityDate="2017-11-23T17:52:38.853" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14671" PostTypeId="2" ParentId="230" CreationDate="2017-11-23T19:46:31.173" Score="-1" Body="&lt;p&gt;You can try this tutorial for ROS run on a Raspberry Pi, it works&#xA;&lt;a href=&quot;http://www.instructables.com/id/Raspberry-Pi-and-ROS-Robotic-Operating-System/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.instructables.com/id/Raspberry-Pi-and-ROS-Robotic-Operating-System/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="14806" LastActivityDate="2017-11-23T19:46:31.173" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14672" PostTypeId="1" AcceptedAnswerId="14673" CreationDate="2017-11-24T00:53:43.767" Score="0" ViewCount="17" Body="&lt;p&gt;I am just in need of a level shifter and I want to ask if these two are doing the same job without any difference, if there is a difference I need to know &lt;/p&gt;&#xA;&#xA;&lt;p&gt;1 : &lt;a href=&quot;https://www.sparkfun.com/products/12009&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.sparkfun.com/products/12009&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2 : &lt;a href=&quot;https://www.pololu.com/product/2595&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.pololu.com/product/2595&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15380" LastActivityDate="2017-11-24T07:01:53.653" Title="are these two logic level shifters are doing the same job" Tags="&lt;mobile-robot&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14673" PostTypeId="2" ParentId="14672" CreationDate="2017-11-24T07:01:53.653" Score="0" Body="&lt;p&gt;Yep, they are pretty much the same thing.&#xA;The schematics are the same.&#xA;Specs listed in for the Pololu seems broader; but, that may be just specsmanshio&lt;/p&gt;&#xA;" OwnerUserId="462" LastActivityDate="2017-11-24T07:01:53.653" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14674" PostTypeId="1" AcceptedAnswerId="14683" CreationDate="2017-11-24T09:12:00.263" Score="-1" ViewCount="944" Body="&lt;p&gt;My application requires a DC geared motor with torque of 10 NM - 20 NM and low speed (25 RPM at most) and a small dimensions (120 mm length at most).&#xA;I failed to find my specs at eBay, and Alibaba targets only mass production. &#xA;Can you recommend me certain models of Gear, Stepper or even Servo motors that met the above specs from any online store?&lt;/p&gt;&#xA;" OwnerUserId="18497" LastActivityDate="2017-11-27T16:23:42.580" Title="DC geared Motor 20 NM 25 RPM small dimensions." Tags="&lt;motor&gt;&lt;servomotor&gt;&lt;brushless-motor&gt;&lt;stepper-motor&gt;&lt;gearing&gt;" AnswerCount="2" CommentCount="2" ClosedDate="2017-11-29T11:19:42.230" ContentLicense="CC BY-SA 3.0" />
  <row Id="14676" PostTypeId="2" ParentId="14674" CreationDate="2017-11-24T16:00:31.453" Score="0" Body="&lt;p&gt;If you want the motor to be short but don't care about the diameter, consider a pancake gear motor.&lt;br&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/5aVZe.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/5aVZe.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ex: The &lt;a href=&quot;http://www.astli.com/afg_series.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;AST 9AFG&lt;/a&gt; is less than 50mm long and has a version can deliver over 10NM at 21RPM.  They have larger ones too&lt;/p&gt;&#xA;" OwnerUserId="462" LastActivityDate="2017-11-24T16:00:31.453" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14678" PostTypeId="2" ParentId="14643" CreationDate="2017-11-25T15:41:35.247" Score="0" Body="&lt;p&gt;You can easily 3D print prop protectors on a cheap 3D printer, but there is a way to prevent breaking most of the props&#xA;Not flying indoors and flying in a large area will prevent you from breaking most of your props&lt;/p&gt;&#xA;" OwnerUserId="15082" LastActivityDate="2017-11-25T15:41:35.247" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14682" PostTypeId="2" ParentId="14504" CreationDate="2017-11-27T16:15:18.007" Score="2" Body="&lt;p&gt;There are two general categories of servos, hobbyist and industrial. Hobbyist ones generally go up to about 50kg/cm, and some will do more than that but costs multiply (sometimes these are called giant scale). Industrial servos start at around $250 minimum (400+ is more common), not including all the additional hardware to control them. And they are considerably more complicated to use, as you would expect from industrial-grade motors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you need more power, geared stepper motors are a much cheaper option, but they don't have the same position-sensing functionality. You can buy rotary encoders separately (either incremental or absolute; absolute are more expensive but more useful) and those would solve that problem, but that is an extra component and thus increases complexity. Be advised that geared stepper motors are &lt;strong&gt;heavy&lt;/strong&gt;, so you would only want to use them for the lowest DOF's. Some arm makers use steppers for the base rotation and both T1 and T2, but both joint motors are mounted to the base and one of them transmits power along a belt or driveshaft to T2. This allows the extra power without massively increasing the moving weight, and the belt or driveshaft gears can be used for additional gear reduction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you take this approach, consider that these geared steppers are also long, so if you mount them on opposite sides of the arm, that base will be very wide - probably wider than L1 is long. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And now you see why industrial robot arms are so expensive; it's hard to pack all the components into the right places and find pieces that are the exact right size. But you are definitely in the right direction by using only metric units!&lt;/p&gt;&#xA;" OwnerUserId="18168" LastActivityDate="2017-11-27T16:15:18.007" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14683" PostTypeId="2" ParentId="14674" CreationDate="2017-11-27T16:23:42.580" Score="0" Body="&lt;p&gt;You can find DC gearmotors on Amazon with roughly those specs. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This one, set with 30rpm and 24v, is fairly close: &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/B072DTMPBC&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.amazon.com/uxcell-Torque-Electric-Reduce-Turbine/dp/B072DTMPBC/ref=sr_1_5?s=hi&amp;amp;ie=UTF8&amp;amp;qid=1511799633&amp;amp;sr=1-5&amp;amp;keywords=dc%2Bgear%2Bmotor%2B25rpm&amp;amp;th=1&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This one has higher RPM, but more power, and you can add an extra 2:1 gear reduction: &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/B01N8YDOC9&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.amazon.com/dp/B01N8YDOC9/ref=sspa_dk_detail_2?psc=1&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's the smallest you'll find in fairly cheap motors. Otherwise, you'd need to custom order one, or talk with a manufacturer/supplier, which will probably be more expensive.&lt;/p&gt;&#xA;" OwnerUserId="18168" LastActivityDate="2017-11-27T16:23:42.580" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14684" PostTypeId="1" AcceptedAnswerId="14689" CreationDate="2017-11-27T17:45:33.097" Score="0" ViewCount="64" Body="&lt;p&gt;Which kind of trajectory would one use for a fine precision robot? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know trapezoidal and cubic trajectories, but errors get very high when stopping at every configuration and when speeding up to the highest possible velocity. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How is this done in practise especially when not much deviation from a straight path is wanted?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my case I try to get the end-effector to go a straight line with a three joint rotational robot.&lt;/p&gt;&#xA;" OwnerUserId="18713" LastEditorUserId="18713" LastEditDate="2017-11-27T17:55:17.343" LastActivityDate="2017-11-28T15:25:51.777" Title="State of the art trajectory for fine precision robots" Tags="&lt;actuator&gt;&lt;joint&gt;&lt;errors&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14686" PostTypeId="2" ParentId="14664" CreationDate="2017-11-27T23:31:23.227" Score="1" Body="&lt;p&gt;Low cost accelerometers have a bias that varies with temperature and from startup to startup.  Your model does not appear to have a state to simulate these accelerometer bias offsets.  Note that in order to compare the results of accelerometers with position sensors like GPS, the accelerometer data must be double-integrated.  If there is any un-modeled bias offset, this double integration causes position errors to grow quadratically over time.  If you give accelerometers a high noise value in your model, then the filter can &quot;explain away&quot; some of this error as the result of random noise.  When you tell the filter that accelerometers are very low noise, however, this forces the filter to believe the accelerometers are telling the truth, so your filter will follow the erroneous output in preference to the GPS position.&lt;/p&gt;&#xA;" OwnerUserId="2546" LastActivityDate="2017-11-27T23:31:23.227" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14687" PostTypeId="1" CreationDate="2017-11-27T23:54:44.607" Score="-1" ViewCount="39" Body="&lt;p&gt;Building an r/c crane capable of lifting and rotating 2.2 lbs. Have constructed the crane with a base on a ball bearing lazy-susan for rotation of 90 degrees. The question is: how to attach the crane base (2.38&quot;OD plastic pipe) to a servo for rotation control.&#xA;Any ideas would be appreciated. Thanks. &lt;/p&gt;&#xA;" OwnerUserId="18794" LastActivityDate="2017-11-29T23:34:51.060" Title="How to build a working r/c crane capable of lifting 2 lbs/1Kg" Tags="&lt;rcservo&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14688" PostTypeId="1" CreationDate="2017-11-28T00:11:30.107" Score="1" ViewCount="112" Body="&lt;p&gt;I'm looking for a SLAM dataset (monocular or stereo) specifically with a checkerboard, meaning the camera always has a checkerboard in frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most popular datasets provide calibration sequences, however said calibration sequences do not contain ground truth data and can only be used to calibrate the camera.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any datasets out there that provides its calibration sequence with ground truth data available?&lt;/p&gt;&#xA;" OwnerUserId="18796" LastActivityDate="2017-11-28T00:11:30.107" Title="Camera calibration sequence with ground truth data" Tags="&lt;slam&gt;&lt;stereo-vision&gt;&lt;visual-odometry&gt;&lt;monocular&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14689" PostTypeId="2" ParentId="14684" CreationDate="2017-11-28T02:56:30.017" Score="2" Body="&lt;p&gt;For very high-precision applications such as finishing, milling by CNC machines, jerk-bounded trajectories (that is, trajectories comprising polynomials of degree 3 of higher) are often used. If you search on Google Scholar using the term &quot;jerk bounded&quot;, you can find loads of methods to plan such trajectories.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;High-order polynomial trajectories (or splines) are not always necessary, however. For stiff articulated manipulators (such as position-controlled robots), they are usually stiff enough that using second-order (parabolic) polynomial trajectories is &lt;em&gt;perfectly fine&lt;/em&gt;. The effect of (theoretically) unbounded-jerk is often negligible.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;In your case, you mentioned that the errors got high when stopping and speeding up. I suspect that this might not come from the trajectory generation method you used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the robot you are using is custom-built, you might want to &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Do kinematics calibration to make sure that the locations of joints and the tool are actually where you think they are; and &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Check how well the motors can track your input commands.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Otherwise, you may check if this issue is related in any way to singularities.&lt;/p&gt;&#xA;" OwnerUserId="7610" LastEditorUserId="7610" LastEditDate="2017-11-28T15:25:51.777" LastActivityDate="2017-11-28T15:25:51.777" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14691" PostTypeId="2" ParentId="14687" CreationDate="2017-11-28T10:29:37.157" Score="0" Body="&lt;p&gt;I suggest the lazy-susan rotating base be a gear, and then you can have a smaller gear coupled with it and the servo run the gear in a vertical orientation. The following figure should give you an idea of what I mean.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/mOMfW.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/mOMfW.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18222" LastActivityDate="2017-11-28T10:29:37.157" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14692" PostTypeId="1" CreationDate="2017-11-28T11:39:15.890" Score="-1" ViewCount="160" Body="&lt;p&gt;I am working on a project related to quadcopter. I have also build a algorithm based on PID controller for controlling climb sink rate and also holding but it did not work correctly. My function to correct the motor is throttle += pid_output with the error is computed from taking the error of height and velocity by the function: error = K1*(target altitude - measure altitude) - K2*(velocity). Currently My velocity is calculated by taking the different between current altitude and the past  while altitude is measured from barometric sensor only. Does anyone here have the experience on building a holding algorithm for quadcopter before ? Could you please to have a look at my algorithm or share with me the ideas of altitude control algorithm. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many thanks,&lt;/p&gt;&#xA;" OwnerUserId="18807" LastActivityDate="2017-12-04T08:56:59.500" Title="Quadcopter holding algorithm" Tags="&lt;quadcopter&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14693" PostTypeId="1" CreationDate="2017-11-29T05:59:20.723" Score="0" ViewCount="501" Body="&lt;p&gt;Hey i am building a ROS enabled robot which relies on Odometry data from encoders for the purpose of SLAM . &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am confused between what would be more accurate in estimating the pose and robot position either using encoders mounter directly to the back of the motor shaft vs quadrature encoders attached to the wheel .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS:- I have a Ebike motor running my bot , so as you can guess it uses chain drive to turn the wheels . Please suggest me some mechanical designs by which i can attach encoders to a chain drive .&lt;/p&gt;&#xA;" OwnerUserId="18828" LastActivityDate="2017-11-29T17:46:06.263" Title="Encoder for odometry (Wheel vs motor)" Tags="&lt;odometry&gt;&lt;quadrature-encoder&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14695" PostTypeId="2" ParentId="14693" CreationDate="2017-11-29T17:46:06.263" Score="2" Body="&lt;p&gt;Since it's the wheels which change the robot's pose in the environment, I'd suggest putting the encoders to the wheels. Especially if the motor and the wheel are only connected by a chain, introducing possible slack between motor and wheel angular positions. Would the wheel sit directly on the motor axis, it would not matter.&lt;/p&gt;&#xA;" OwnerUserId="422" LastActivityDate="2017-11-29T17:46:06.263" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14696" PostTypeId="2" ParentId="14687" CreationDate="2017-11-29T23:34:51.060" Score="0" Body="&lt;p&gt;Ln_r1 ideas is very good, but I prefer the gear is on lazy susan side. So the motor is in vertical shaft position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because getting gear at lazy susan periphery is not easy, alternatively you can install a large gear below lazy susan (common shaft with lazy susan).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More easy, use pulley. Either lazy susan rim as pulley or install large pulley below lazy susan (common shaft with lazy susan).&lt;/p&gt;&#xA;" OwnerUserId="18840" LastActivityDate="2017-11-29T23:34:51.060" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14697" PostTypeId="1" CreationDate="2017-11-30T04:06:32.130" Score="0" ViewCount="104" Body="&lt;p&gt;I need to know this as i'm trying to figure out if two of these could lift approximately 170 pounds of wheight. And that's includig batterys and the motors.&lt;/p&gt;&#xA;" OwnerUserId="18849" LastActivityDate="2017-12-30T11:41:15.087" Title="How do i figure out how much thrust an 150cc Size Brushless Outrunner Motor will output with propellers?" Tags="&lt;mobile-robot&gt;&lt;quadcopter&gt;&lt;motor&gt;&lt;research&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2018-01-08T12:00:33.520" ContentLicense="CC BY-SA 3.0" />
  <row Id="14698" PostTypeId="1" CreationDate="2017-11-30T06:25:33.167" Score="1" ViewCount="103" Body="&lt;p&gt;During my design of a simple robotic arm, where I 3D printed most of the parts, then used these HS-422 servos, it turned out that for a better control precision and to be able to apply Inverse Kinematic Modeling on my arm, I need feedback positions from these servo, which HS-422 do not provide.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to keep using these Servos because the parts are designed to fit them, what options do I have to include feedback position sensors without changing the servos and re-designing the arm's parts? Or is there any servo with feedback position and close dimensions to HS-422 that I can replace with?&lt;/p&gt;&#xA;" OwnerUserId="18826" LastActivityDate="2017-12-02T08:32:18.177" Title="Position Sensor" Tags="&lt;inverse-kinematics&gt;&lt;servomotor&gt;&lt;precise-positioning&gt;" AnswerCount="2" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="14699" PostTypeId="1" AcceptedAnswerId="14700" CreationDate="2017-11-30T06:36:40.107" Score="0" ViewCount="819" Body="&lt;p&gt;I have a mapping robot , 3 ultra sound sensors HC SR04 , arduino uno board, two motors MG-6-120, power source 2 5v 4000 mAh power banks, driver L298N. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It uses a wall follower algorithm (here is the problem), if it finds a wall it should go parallel to it until it finishes the room, but as it follows the wall is oscillates heavily left and right so when it has to turn it is not parallel to the wall and sometimes misses the next wall after the turn. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I will post a picture of the problem. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S. the robot only has to make 90 deg turns.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Wall following function in a few words:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;if (dist &amp;lt; minDist) turnSoftLeft();&lt;/p&gt;&#xA;&#xA;&lt;p&gt;if (dist &gt; maxDist) turnSoftRight();&lt;/p&gt;&#xA;&#xA;&lt;p&gt;but this causes it to oscillate a lot and never go smooth parallel to the wall.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I read that I could use a PID proportional–integral–derivative, but I have no idea how to do that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/kpwGg.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kpwGg.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18851" LastEditorUserId="18851" LastEditDate="2017-11-30T06:42:46.083" LastActivityDate="2017-11-30T07:17:55.613" Title="Wall following robot oscillates heavily" Tags="&lt;arduino&gt;&lt;wheeled-robot&gt;&lt;mapping&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14700" PostTypeId="2" ParentId="14699" CreationDate="2017-11-30T07:17:55.613" Score="1" Body="&lt;p&gt;In a broad understanding of control systems, we use a sensor reading as input. we set a target for that reading and try to minimize the difference between target and input reading by performing some action and taking the input again. IN PID control,we use additional parameters(constants) to reduce the difference between input and target faster.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can follow the following algorithm without PID control and &#xA;yet achieve a proper wall following &#xA;For your problem :&lt;br&gt;&#xA;Input : Distance from Ultrasound sensors.&lt;br&gt;&#xA;Output : Motor  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming your placement of sensors on front(1),&lt;br&gt;&#xA;right(2) and left(3) face of robot.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The simple algorithm can be modelled as follows:  &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;set constants i.e min dist to move forward,min dist to make right turn,min dist to make left turn.(min dist = minimum distance)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Loop 1&lt;br&gt;&#xA;2. read from sensors 1,2,3.&lt;br&gt;&#xA;3. if(distance from 1 &gt; min dist to move forward) : actuate both motors.&lt;br&gt;&#xA;4. if(distance from 2 &amp;lt; min dist to make right turn) : actuate left motor.&lt;br&gt;&#xA;5. if(distance from 3 &amp;lt; min dist to make left turn) : actuate right motor.&lt;br&gt;&#xA;end loop1  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a 2nd loop in actuate function where&lt;br&gt;&#xA;1. Set target distance from sensor as min distance + some constant.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;loop 2&lt;br&gt;&#xA;2. compute error = target - read from the interested sensor.&lt;br&gt;&#xA;3. output:using PWM technique control motor ON-OFF actuation&lt;br&gt;&#xA;until error is zero.&lt;br&gt;&#xA;end loop2  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are interested in PID control you can follow the link&lt;br&gt;&#xA;&lt;a href=&quot;https://github.com/jdelacroix/simiam&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/jdelacroix/simiam&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is a tutorial on matlab for PID control of robot.&lt;br&gt;&#xA;you can change few scripts in the SIMIAM controller to suit your needs&#xA;It even has a implementation of ultrasound sensor.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;hope this helps&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I personally fell implementing a simple PID controller on arduino is tough&lt;br&gt;&#xA;as it needs a lot of fine tuning to make the robot move parallel to wall.&#xA;I suggest you use additional sensors like odometry or IMU to get exact parallel following&lt;/p&gt;&#xA;" OwnerUserId="17067" LastActivityDate="2017-11-30T07:17:55.613" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="14701" PostTypeId="2" ParentId="14698" CreationDate="2017-11-30T08:10:07.540" Score="0" Body="&lt;p&gt;A slightly difficult but interesting way to solve this would be to stick markers on your joints, and then you can use a camera to find the relative position of the marker wrt to the base point.&lt;/p&gt;&#xA;" OwnerUserId="18222" LastActivityDate="2017-11-30T08:10:07.540" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="14702" PostTypeId="2" ParentId="14085" CreationDate="2017-11-30T08:57:03.060" Score="1" Body="&lt;p&gt;To explain the reason why you are getting a bad output you need to understand trajectory planning.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;So you have now done the FK and IK for the robot, however now to be able to do the tasks that you have mentioned, the biggest problem is that your end effector needs to traverse a smooth continuous path. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;So feeding the robot with the end points it not enough, you need to be able to generate a trajectory using these end points. The equation for a cubic polynomial is as follows. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/uhugR.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/uhugR.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can fit the three points on this curve by analytically finding the coefficients by feeding boundary conditions for velocity, acceleration and position. This can be done using MATLAB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now the program will feed your inverse kinematics calculating program with the points on the trajectory. The gap between two points will depend upon the step that you have to determine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now take the case of the straight line motions that you want. Feed the robot with intermediate points in steady increments, that should do the trick. If it does not work, then you may consider all my other suggestions in this answer.&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;&lt;p&gt;Also your joints need to complete the task at a speed such that the motion of all the joints start and end at the same time, this enables smoother movement of your joints, again it involves trajectory planning concepts and a whole lot of theory. But you can consider this as low priority since you have individual actuators for every joint and no feedback loops.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Btw make sure the points you are feeding are not on the edge of your work space, in that case you will have a singularity and the robot would not achieve the position correctly.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;For best results replace those cardboard stuff with something more solid like some plastics using 3D printing. And then calculate mass and moments of inertia of the links and everything to calculate how much torque is required to be able to push the pen down on to the paper hard enough for the pen to create a mark.&#xA;For this you need to learn robot dynamics which involves use of manipulator jacobian and so on..&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Hope this helps.&lt;/p&gt;&#xA;" OwnerUserId="18222" LastEditorUserId="18222" LastEditDate="2017-11-30T09:32:12.257" LastActivityDate="2017-11-30T09:32:12.257" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14703" PostTypeId="1" AcceptedAnswerId="14705" CreationDate="2017-11-30T10:26:46.223" Score="0" ViewCount="867" Body="&lt;p&gt;Both of these 4 wheel drive line following robots have a fifth wheel in the rear.&#xA;My first thought is, that it is used as a braking mechanism. Would that be the case? If so, could someone explain - how does that mechanism work on the first robot?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/lAbUh.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/lAbUh.jpg&quot; alt=&quot;follower_1_1&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/k5wPA.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/k5wPA.jpg&quot; alt=&quot;follower_1&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/ZEBdR.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZEBdR.jpg&quot; alt=&quot;follower_2&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18857" LastActivityDate="2017-12-18T21:06:15.767" Title="Line-following robot with a 5th wheel" Tags="&lt;wheeled-robot&gt;&lt;line-following&gt;" AnswerCount="3" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14704" PostTypeId="2" ParentId="14697" CreationDate="2017-11-30T11:00:48.003" Score="0" Body="&lt;p&gt;The way to know that is mostly to test, usually with a regulated power (not a battery) and with a scale. Those measurements are available for a variety of motor/propeller pairs on-line, they are usually provided by re-sellers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you use those be careful about the propeller pitch do not focus only on its diameter, as the pitch  as important aerodynamics effects.&#xA;Also watch out the voltage at which the test are conducted, typically in flight with battery you have a varying voltage and you might need to take some safety margin to compensate that.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2017-11-30T11:00:48.003" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14705" PostTypeId="2" ParentId="14703" CreationDate="2017-11-30T11:50:11.207" Score="2" Body="&lt;p&gt;I m not familiar with those robots, but I will guess it's more used for odometry, in order to know the speed and the traveled distance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The design are packed so it is hard to see for sure, but it seems to me that there are only 2 wires per motor, so not enough for position/velocity feedback. So the best to get instantaneous speed would be a free wheel for odometr, but this is a guess as I am not familiar with these competitions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also it seems that the last model has an IMU, so it might use some kind of sensor fusion to get even better estimate.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2017-11-30T11:50:11.207" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14706" PostTypeId="2" ParentId="14703" CreationDate="2017-11-30T15:04:07.567" Score="1" Body="&lt;p&gt;The fifth wheel is a odometric sensor as suggested by N staub. It is not for braking. Mobile robots do not use brakes as they cause the slipping on terrain  often induce errors in odometirc position estimation using technique of dead reckoning which is most primitive and well applied. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It has IR sensor attached to it which counts  ticks i.e No of times&#xA;the IR sensor is interrupted due to turning of wheel.(Wheel has small holes along its rim).&lt;br&gt;&#xA;Then distance traveled is estimated as follows:  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;distance travelled = no of ticks * ((2*pi*radius of the wheel)/angle between 2 holes )  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;for the estimation of speed count no of ticks in a unit time.&#xA;But not higly useful info as fifth wheel does not slip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It uses Ackermann steering mechanism.&#xA;back motors drive the robot as in a car.front motors achieve turning by rotating steering motor in middle and giving more speed to motor in opposite direction of turn  i.e to turn left right motor will be powered more than left motor.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Follow this link to know more:&lt;a href=&quot;https://en.wikipedia.org/wiki/Ackermann_steering_geometry&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Ackermann_steering_geometry&lt;/a&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;hope this helps&lt;/p&gt;&#xA;" OwnerUserId="17067" LastActivityDate="2017-11-30T15:04:07.567" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14709" PostTypeId="1" CreationDate="2017-11-30T19:53:50.790" Score="0" ViewCount="1503" Body="&lt;p&gt;I am reading this paper: A survey on Policy Search for Robotics and I came across these terms. Can someone give an answer, please?&lt;/p&gt;&#xA;" OwnerUserId="15885" LastActivityDate="2017-12-21T08:23:45.333" Title="What are myopic and non-myopic policies?" Tags="&lt;reinforcement-learning&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14710" PostTypeId="2" ParentId="14709" CreationDate="2017-11-30T20:25:52.413" Score="1" Body="&lt;p&gt;A myopic policy is one that simply maximises the average immediate reward. It is &quot;myopic&quot; in the sense that it only considers the single criterion. It has the advantage of being relatively easy to implement. A fairly well-known example is the &lt;a href=&quot;https://www.tutorialspoint.com/design_and_analysis_of_algorithms/design_and_analysis_of_algorithms_hill_climbing.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;hill-climbing algorithm&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, a myopic search is particularly vulnerable to becoming trapped at a local optima, and so failing to identify a globally optimal solution. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;A non-myopic policy is one which has wider focus, considering other factors. This can greatly improve the success of the algorithm, but is generally more complex to implement.&lt;/p&gt;&#xA;" OwnerUserId="17029" LastEditorUserId="17029" LastEditDate="2017-11-30T21:34:47.343" LastActivityDate="2017-11-30T21:34:47.343" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14713" PostTypeId="2" ParentId="12259" CreationDate="2017-12-01T03:27:21.893" Score="0" Body="&lt;p&gt;For achieving exact straight line motion on a differential drive robot.&#xA;It is best to use PWM techiques to control current supplied to the motors.&#xA;Using PWM  waves generated on the micro-controller/processor, output the current to pins to which you are connecting the driver circuit(like L293D) for motors.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can follow this link for more  info:&lt;a href=&quot;http://www.i6.in.tum.de/Main/Publications/5224223.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.i6.in.tum.de/Main/Publications/5224223.pdf&lt;/a&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this helps.........&lt;/p&gt;&#xA;" OwnerUserId="17067" LastActivityDate="2017-12-01T03:27:21.893" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14714" PostTypeId="1" AcceptedAnswerId="14718" CreationDate="2017-12-01T09:33:18.270" Score="3" ViewCount="887" Body="&lt;p&gt;I'm new in robotics. My problem is the next one: I have a 6DOF robot manipulator and because the implementation was for real-time application my calculation time had to be really fast so that I used Wrist Center position(Geometrical solution). After using some calibration machine(I don't know much about this machine) I got the real DH parameters of the robot and of course are not the same. &#xA;I can't use the real DH parameters in my IK cause is no longer valid for the new DH parameters and If I implement a numerical solution I don't know really how much time it will take. So, my questions are :&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Do you know any IK method for this case with no more than 0.5ms for each IK calculation?&lt;/li&gt;&#xA;&lt;li&gt;Is there any information about how can compensate the position without change the IK but knowing the real DH information?&lt;/li&gt;&#xA;&lt;li&gt;Do you know any other solution to this problem?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Finally, I was reading kinematics calibration. I think I got the idea but in the end is the same problem, you got new DH parameters and How to use those new DH parameters or maybe I understood wrong this information, basically is using this equation:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/1IePM.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1IePM.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;Thanks for help!!!&lt;/p&gt;&#xA;" OwnerUserId="18883" LastActivityDate="2017-12-02T11:37:28.423" Title="Robot Calibration using DH parameters" Tags="&lt;inverse-kinematics&gt;&lt;industrial-robot&gt;&lt;calibration&gt;&lt;dh-parameters&gt;&lt;real-time&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14716" PostTypeId="2" ParentId="14714" CreationDate="2017-12-01T20:52:43.140" Score="0" Body="&lt;p&gt;With a 6 DoF arm, you should be able to use a closed form for IK.  I would avoid a numerical solution if you need it to be fast.  You might want to try &lt;a href=&quot;http://openrave.org/docs/latest_stable/openravepy/ikfast/&quot; rel=&quot;nofollow noreferrer&quot;&gt;IKFast&lt;/a&gt; in OpenRave.  It can supposedly handle &quot;robots with arbitrary joint complexity like non-intersecting axes&quot;.  However, after kinematic calibration my joint axes were no longer at right angles.  When I tried my new robot kinematics in IKFast it would crash and I was never able to get valid IK solutions.  I had a 7 DoF arm on a 1 DoF torso though.  You might have better luck with a 6 DoF robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't think there is a general way to use your nominal IK, then apply some transform to account for your modified kinematics.  The kinematics is just too non-linear.  But this does work in small sections of the workspace.  In fact, I wrote a paper on the subject:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;B. Axelrod, W. Huang, &quot;&lt;a href=&quot;http://ieeexplore.ieee.org/abstract/document/6215665/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Improving Hand-Eye Calibration for Robotic Grasping and Manipulation&lt;/a&gt;&quot; IEEE TePRA, 2012.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To better understand kinematic calibration, the best (clearest) source of information I could find on the subject is in the book &quot;&lt;a href=&quot;https://www.google.com/shopping/product/18328483085519729280&quot; rel=&quot;nofollow noreferrer&quot;&gt;Robotics: Modelling, Planning and Control&lt;/a&gt;&quot; by Bruno Siciliano, Lorenzo Sciavicco, Luigi Villani, Giuseppe Oriolo, chapter 2.11.  Which requires a description of the arm in DH parameters, multiplying out the kinematics equation, partial differentiation w.r.t. each DH parameter, then a least-squares fit (with the left pseudo-inverse), then iterate.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I was never able to get this technique to work for me.  What did work was using PoE (Product of Exponentials).  In PoE, the kinematic parameters of the model vary smoothly with changes in joint axes and can handle kinematic singularities naturally. I followed this paper and was successful in kinematically calibrating my 7 DoF arm:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I. Chen, G. Yang, C. Tan, and S. Yeo, “&lt;a href=&quot;http://www.sciencedirect.com/science/article/pii/S0094114X01000489&quot; rel=&quot;nofollow noreferrer&quot;&gt;Local POE model for robot kinematic calibration&lt;/a&gt;,” Mech. Mach. Theory, vol. 36, no. 11/12, pp. 1215– 1239, 2001.&lt;/p&gt;&#xA;" OwnerUserId="110" LastEditorUserId="110" LastEditDate="2017-12-02T11:37:28.423" LastActivityDate="2017-12-02T11:37:28.423" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14718" PostTypeId="2" ParentId="14714" CreationDate="2017-12-02T06:58:39.480" Score="0" Body="&lt;p&gt;The 0.5 ms limit might be a bit harsh. Usually 1 ms should be enough for solving the IK numerically on reasonable hardware (industrial PC, maybe RasPi as a worst case).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Numerical solutions always depend on the initial guess the calculations are starting from. Calibration is meant to compensate for the small misalignments in the joints. It can be concluded that the &quot;distance&quot; from the point in joint space obtained by the analytical (ideal) inverse kinematics and the numerical inverse kinematics (for the real DH values) is small. This can be exploited and the ideal analytical IK can supply the initial guess for the real numerical IK. Since the distance is small the numerical IK will converge in 3-5 iterations to a solution that is below the acceptable precision threshold.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Industrial robot controllers (e.g. ABB, Kuka) have a cycle time of 2 - 16 ms. A significant amount of the cycle time is spent on calculating different calibration and compensation functions (e.g. joint misalignment compensation, static load deflection compensation, gear backlash compensation, thermal dilatation compensation, etc.)&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2017-12-02T06:58:39.480" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14719" PostTypeId="2" ParentId="14698" CreationDate="2017-12-02T08:32:18.177" Score="1" Body="&lt;p&gt;The &lt;a href=&quot;http://forums.trossenrobotics.com/tutorials/how-to-diy-128/get-position-feedback-from-a-standard-hobby-servo-3279/&quot; rel=&quot;nofollow noreferrer&quot;&gt;suggestion&lt;/a&gt; posted by &lt;a href=&quot;https://robotics.stackexchange.com/users/18235/n-staub&quot;&gt;N. Staub&lt;/a&gt; worked well for me, I was able to perform the hack onto the HS-422 where the min and max readings of the servo potentiometer were [0.34-2.04 Vdc] and by using Arduino MEGA 2560, which has the option to provide an interval voltage reference of 2.56V, as fellows:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;analogReference(INTERNAL2V56) #Arduino MEGA Only&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;With this setup I could get a good resolution of 0-2.56V/0-1023 counts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For other boards, you can provide an &lt;em&gt;External&lt;/em&gt; Aref, using a voltage divider rule, keeping in mind that the max External Aref cannot be more than 5V otherwise you will damage the chip.&lt;/p&gt;&#xA;" OwnerUserId="18826" LastActivityDate="2017-12-02T08:32:18.177" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14720" PostTypeId="2" ParentId="12752" CreationDate="2017-12-02T08:43:16.220" Score="-1" Body="&lt;p&gt;I suggest to use a color sensor and place some RGB colours in different parts as grid to let the robot know its position.&lt;/p&gt;&#xA;" OwnerUserId="17067" LastActivityDate="2017-12-02T08:43:16.220" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14721" PostTypeId="1" CreationDate="2017-12-02T15:13:22.987" Score="2" ViewCount="83" Body="&lt;p&gt;Having a perfect gyro (with no noise/drift or bias), the gyro produces angular velocities in the form (wx, wy, wz) in rad/sec. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to convert the rate gyro readings (which are expressed in gyro's &lt;strong&gt;case frame&lt;/strong&gt;) to be in the inertial frame(&lt;strong&gt;earth&lt;/strong&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the beginning, i have a quaternion q the represents the rotation from earth's frame to gyro's starting orientation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am looking for a way to convert the &lt;strong&gt;(wx, wy, wz)&lt;/strong&gt; rates the gyro produces to be in the &lt;strong&gt;inertial frame&lt;/strong&gt; &lt;strong&gt;using the quaternion q&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you,&lt;/p&gt;&#xA;" OwnerUserId="18599" LastEditorUserId="18599" LastEditDate="2017-12-02T17:30:55.167" LastActivityDate="2017-12-04T17:01:14.517" Title="integrating perfect rate gyro data (noiseless)" Tags="&lt;quadcopter&gt;&lt;gyroscope&gt;&lt;rotation&gt;&lt;integration&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14723" PostTypeId="2" ParentId="8526" CreationDate="2017-12-02T21:02:38.660" Score="1" Body="&lt;p&gt;You can control DC motors from an Android device without a separate micro controller. The two ways I've seen this done are through a USB to parallel printer cable or through a headphone jack. Read more about these approaches at &lt;a href=&quot;http://terakuhn.weebly.com/phone_usb_controller.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://terakuhn.weebly.com/phone_usb_controller.html&lt;/a&gt; and &lt;a href=&quot;https://makezine.com/projects/make-34/smartphone-servo/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://makezine.com/projects/make-34/smartphone-servo/&lt;/a&gt; respectively. However, I'm not familiar with the L298N motor controller so I'm not sure if you could use that with either of these approaches.&lt;/p&gt;&#xA;" OwnerUserId="18922" LastActivityDate="2017-12-02T21:02:38.660" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14724" PostTypeId="1" AcceptedAnswerId="14732" CreationDate="2017-12-03T04:02:26.080" Score="0" ViewCount="30" Body="&lt;p&gt;I'm trying to do some research on a project that I'd like to work on.  My problem is that I am doing a terrible job googling, because I don't know what this technology is called.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Clhge.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Clhge.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once I know what it's called, I feel like finding systems I can buy, or build, will be much more simple.&lt;/p&gt;&#xA;" OwnerUserId="13597" LastActivityDate="2017-12-04T15:32:59.290" Title="What's the term for 2 Dimensional tracks similar to the ones used on 3D printers?" Tags="&lt;automation&gt;&lt;3d-printing&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14725" PostTypeId="2" ParentId="14724" CreationDate="2017-12-03T04:49:11.827" Score="1" Body="&lt;p&gt;By the word &quot;tracks&quot; I would assume you meant the guide rails on which&#xA;the 3D printers extruder is placed on.The rods which support the movement of the extruder are &lt;a href=&quot;https://www.diy-india.com/shop/linear-shafts-and-slides/12mm-smooth-linear-shaft-125/&quot; rel=&quot;nofollow noreferrer&quot;&gt;smooth linear shafts&lt;/a&gt;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;They are connected to a servo motors.Hope this helps....&lt;/p&gt;&#xA;" OwnerUserId="17067" LastActivityDate="2017-12-03T04:49:11.827" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14726" PostTypeId="2" ParentId="14611" CreationDate="2017-12-03T05:59:22.057" Score="0" Body="&lt;p&gt;One of the experimental methods is to mount the camera on the actuator itself(called eye in the hand). Then use vision algorithms to detect the object of interest using edge detection techniques and use the images for visual odometry.&lt;/p&gt;&#xA;" OwnerUserId="17067" LastActivityDate="2017-12-03T05:59:22.057" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14727" PostTypeId="1" CreationDate="2017-12-03T15:31:33.317" Score="1" ViewCount="50" Body="&lt;p&gt;Is there a way to convert usb wired signals to wireless Bluetooth signals?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, can a usb keyboard be converted into a wireless Bluetooth keyboard using something that the keyboard can plug into that converts the wired USB signals to wireless Bluetooth signals that can be transmitted to a Bluetooth enabled device, such as a laptop or Raspberry Pi.&lt;/p&gt;&#xA;" OwnerUserId="11688" LastActivityDate="2017-12-03T16:41:51.063" Title="Converting wired USB connection to a Bluetooth connection" Tags="&lt;wireless&gt;&lt;bluetooth&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14728" PostTypeId="1" AcceptedAnswerId="14729" CreationDate="2017-12-03T15:47:10.430" Score="1" ViewCount="186" Body="&lt;p&gt;i was wondering what could be a good laser scanner can someone get for as much as 180$ ? i am planning to use it from SLAM to build a map, so this is why i wanted to ask here ? have anyone tried something that gives a good result?&lt;/p&gt;&#xA;" OwnerUserId="18931" LastActivityDate="2017-12-03T15:55:43.083" Title="good laser scanner/ lidar for 4 wheel robot?" Tags="&lt;mobile-robot&gt;&lt;lidar&gt;&lt;laser&gt;&lt;hardware&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2017-12-05T14:32:06.810" ContentLicense="CC BY-SA 3.0" />
  <row Id="14729" PostTypeId="2" ParentId="14728" CreationDate="2017-12-03T15:55:43.083" Score="0" Body="&lt;p&gt;My suggestion would be to buy a cheap, second-hand, &lt;a href=&quot;https://www.neatorobotics.com/robot-vacuum/xv/xv-15/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Neato Robotics XV-15&lt;/a&gt; robot vacuum-cleaner and use the LIDAR from that (you may even be able to buy the LIDAR unit separately).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/iBTsy.jpg&quot; alt=&quot;Lidar&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A lot of guides to using the Neato LIDAR for robots have been published. For example this one from Hackaday describes how to use the &lt;a href=&quot;https://hackaday.com/2016/01/22/how-to-use-lidar-with-the-raspberry-pi/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Neato LIDAR with the Raspberry Pi&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just type &lt;a href=&quot;https://www.google.co.uk/search?ei=mx0kWtTINIa9gAaG1r3IAQ&amp;amp;q=Neato%20Lidar%20robot&amp;amp;oq=Neato%20Lidar%20robot&amp;amp;gs_l=psy-ab.3..0i8i30k1l2.36175.36175.0.36963.1.1.0.0.0.0.66.66.1.1.0....0...1.1.64.psy-ab..0.1.66....0.JAevagIs59M&quot; rel=&quot;nofollow noreferrer&quot;&gt;Neato Lidar robot&lt;/a&gt; into Google for more (this will also get you lots more useful background information about the LIDAR sensor itself, which is a bonus).&lt;/p&gt;&#xA;" OwnerUserId="17029" LastActivityDate="2017-12-03T15:55:43.083" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14730" PostTypeId="2" ParentId="14727" CreationDate="2017-12-03T16:36:45.083" Score="2" Body="&lt;p&gt;Likely it would be easier to use a Bluetooth keyboard to begin with.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There might be easier methods, but one approach may be to terminate the USB HID protocol to extract the key board data.  Then emulate a Bluetooth keyboard in order to complete the connection between the USB keyboard and Bluetooth device.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It would help to know that there are several different underlying protocols in both USB and Bluetooth.  Each is designed for a specific purposes.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are several USB protocols to handle the many &lt;a href=&quot;https://en.wikipedia.org/wiki/USB#Device_classes&quot; rel=&quot;nofollow noreferrer&quot;&gt;USB Device Classes&lt;/a&gt;.  For example, USB uses a different protocol for a keyboard (&lt;a href=&quot;https://en.wikipedia.org/wiki/USB#Human_interface_devices&quot; rel=&quot;nofollow noreferrer&quot;&gt;USB HID&lt;/a&gt;) then for a Thumb Drive (&lt;a href=&quot;https://en.wikipedia.org/wiki/USB#USB_mass_storage_/_USB_drive&quot; rel=&quot;nofollow noreferrer&quot;&gt;USB MSC&lt;/a&gt;).  Therefore there is no one generic solution to terminating a USB connection.  This is why most low powered embedded devices can only terminate a specific USB device.  For example a printer may only accept a Thumb Drive or a camera that looks like a Thumb Drive but nothing else.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similarly, &lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_Bluetooth_protocols&quot; rel=&quot;nofollow noreferrer&quot;&gt;Bluetooth has a number of different underlying protocols&lt;/a&gt;.  One for two channel stereo music with high latency.  Another for two way phone conversations with low latency.  And many more. Again, it would be difficult to create a generic Bluetooth interface for all situations.&lt;/p&gt;&#xA;" OwnerUserId="17364" LastEditorUserId="17364" LastEditDate="2017-12-03T16:41:51.063" LastActivityDate="2017-12-03T16:41:51.063" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14732" PostTypeId="2" ParentId="14724" CreationDate="2017-12-03T18:03:02.403" Score="4" Body="&lt;p&gt;That is called a gantry robot. &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2017-12-03T18:03:02.403" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14734" PostTypeId="2" ParentId="14692" CreationDate="2017-12-04T08:56:59.500" Score="1" Body="&lt;p&gt;I believe you are implementing PID incorrectly. For starters, you shouldn't be increasing your throttle by pid_output, you should be setting it to it.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;for each measurement step:&#xA;    error = target altitude - measured altitude&#xA;    integ = integ + error&#xA;    velocity = error - olderror&#xA;    olderror = error&#xA;    throttle = Kp * error + Ki * integ + Kd * velocity&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The assumption made here is that the target altitude won't change, if it does, it should be handled properly.&#xA;There are more things to consider like prefilter, integral windup handling, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/PID_controller&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/PID_controller&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4017" LastActivityDate="2017-12-04T08:56:59.500" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14735" PostTypeId="1" AcceptedAnswerId="14736" CreationDate="2017-12-04T12:41:40.050" Score="0" ViewCount="129" Body="&lt;p&gt;In our engineering science lesson, my class has been tasked with programming the Formula Allcode buggy to run a pre-specified circuit with smooth turns.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The issue we are having is that we do not know how to do this whatsoever. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most of us are doing this in scratch, but to explain the code a little...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;there is a function called SetMotors that allows us to set the speed of the wheels as a percentage. We don't know what its maximum speed is and we don't know how to make the buggy turn at a specific angle, nor how to straighten it out at a specific time. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The circuit has a lot of smooth corners so using the functions Left and Right are out as they simply pivot the vehicle, rather than allow it to turn while moving. It's supposed to be a race!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hopefully I've given you enough information, but I'll be glad to clarify on things as needed. &lt;/p&gt;&#xA;" OwnerUserId="18944" LastActivityDate="2017-12-04T15:28:52.543" Title="Programming the Formula Allcode to run a circuit" Tags="&lt;mobile-robot&gt;&lt;python&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14736" PostTypeId="2" ParentId="14735" CreationDate="2017-12-04T15:28:52.543" Score="0" Body="&lt;p&gt;I would suggest that you attempt to determine the values empirically. Create a start/finish line of fixed distance (1 meter, 5 meters, etc.), then time how long it takes the vehicle to cross it. Be sure to have the vehicle cross the starting line &lt;em&gt;already at top speed&lt;/em&gt; or else you'll add the time it takes to accelerate and that will screw up your measurements. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you have a top speed, you can then measure the wheel base (distance between tire axial centers) and the wheel radii and use differential drive equations to calculate how to achieve a particular turning radius. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A note from experience: centrifugal forces may cause tire slip when cornering at high speed (&quot;drifting&quot;), but you won't be able to measure how far you drift. I would &lt;em&gt;highly recommend&lt;/em&gt; you thoroughly test your cornering capabilities first and lower your cornering speeds accordingly. Professional drivers will slow down right &lt;em&gt;before&lt;/em&gt; cornering, then begin to accelerate about halfway through the turn for this reason. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, where wheel speeds of (50-5)% and (50+5)% might get you the desired wheel speed difference to make a turn, the forward speed could be faster if you did (100-10)% and (100)% instead. You still get a net 10% speed difference, so the turning radius would be the same. However, cornering at a net 95% speed might cause wheel slip. Consider lowering the net speed to something like (80-5)% and (80+5)% instead, etc. Again, &lt;em&gt;test, test, test&lt;/em&gt;. The more testing you do up front, the better you will be able to perform come race day. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-12-04T15:28:52.543" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14737" PostTypeId="2" ParentId="14724" CreationDate="2017-12-04T15:32:59.290" Score="1" Body="&lt;p&gt;Your picture is of &lt;a href=&quot;https://www.mcmaster.com/#standard-linear-bearings/=1aje3ri&quot; rel=&quot;nofollow noreferrer&quot;&gt;linear bearings&lt;/a&gt; on what looks to me to be stainless steel shafting. You can also use &lt;a href=&quot;https://www.mcmaster.com/#linear-bearings/=1aje489&quot; rel=&quot;nofollow noreferrer&quot;&gt;guide rails&lt;/a&gt;, which use a more specialized shaft than just a rod. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-12-04T15:32:59.290" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14738" PostTypeId="2" ParentId="14721" CreationDate="2017-12-04T17:01:14.517" Score="1" Body="&lt;p&gt;I think you can just convert the quaternions into a &lt;a href=&quot;https://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles#Rotation_matrices&quot; rel=&quot;nofollow noreferrer&quot;&gt;rotation matrix&lt;/a&gt;, &lt;img src=&quot;https://blog.mide.com/hs-fs/hubfs/Blog-Images/Quaternion/Rotation_Eqn.png?t=1512138603335&amp;amp;width=519&amp;amp;height=68&amp;amp;name=Rotation_Eqn.png&quot; alt=&quot;matrix equation&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and multiply the gyro vector by that. I have used this to adjust linear acceleration in the past, and I think it should work for rotation, but please let me know how it goes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The quaternion should be normalized first, meaning the sum of the squares should equal one. This is standard for quaternion orientation outputs. I discuss some quaternion basics &lt;a href=&quot;https://blog.mide.com/quaternions-for-orientation&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;, if you're unfamiliar.&lt;/p&gt;&#xA;" OwnerUserId="18948" LastActivityDate="2017-12-04T17:01:14.517" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14739" PostTypeId="1" CreationDate="2017-12-04T23:00:38.347" Score="-2" ViewCount="43" Body="&lt;p&gt;I'm trying to make a load carrying robot which will follow a line and will have capacity to carry 200 lbs on concrete surface. What should be the horsepower for electrical motor to handle this on 0 degree incline and 4 degree incline? Can I control it with Arduino or similar boards?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you very much in advance&lt;/p&gt;&#xA;" OwnerUserId="18954" LastActivityDate="2017-12-05T03:44:10.237" Title="Calculating motor power and motor needs for 200 lbs load" Tags="&lt;arduino&gt;&lt;motor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14740" PostTypeId="2" ParentId="14739" CreationDate="2017-12-05T03:44:10.237" Score="0" Body="&lt;p&gt;&lt;a href=&quot;http://www2.mae.ufl.edu/designlab/motors/EML2322L%20Drive%20Wheel%20Motor%20Torque%20Calculations.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here is a link&lt;/a&gt;&#xA; to Drive Wheel Motor Torque Calculations which is used to decide torque required by mobile robot. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this helps.....&lt;/p&gt;&#xA;" OwnerUserId="17067" LastActivityDate="2017-12-05T03:44:10.237" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14741" PostTypeId="1" AcceptedAnswerId="14742" CreationDate="2017-12-05T07:53:51.653" Score="-2" ViewCount="542" Body="&lt;p&gt;How do I model a simple robot arm as a plant?&lt;a href=&quot;https://i.stack.imgur.com/g10Al.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/g10Al.png&quot; alt=&quot;block diagram&quot;&gt;&lt;/a&gt;. I know how to model motors but, I think, controlling individual motors may not be enough; and in order to control the the arm as a plant I need to model it as a plant. In the block diagram below my trouble is in finding the hardware model of the robot arm.&lt;/p&gt;&#xA;" OwnerUserId="14415" LastActivityDate="2017-12-05T16:52:19.827" Title="How do I model a simple robot arm as a plant?" Tags="&lt;robotic-arm&gt;&lt;industrial-robot&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14742" PostTypeId="2" ParentId="14741" CreationDate="2017-12-05T12:31:51.537" Score="3" Body="&lt;p&gt;Each joint of your robot is one motor. They are coupled though kinematic relations and dynamic physics. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;One straight forward way is to derive these so called 'equations of motion' using the euler-lagrange formalism. Once you obtained your equations you can create for example a Matlab function to solve them dynamically.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But back to the modelling part, check out the slides in &lt;a href=&quot;http://www.diag.uniroma1.it/~deluca/rob2_en/03_LagrangianDynamics_1.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Dynamic model of robots: Lagrangian approach, by Prof. Alessandro De Luca &lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="18341" LastEditorUserId="37" LastEditDate="2017-12-05T16:52:19.827" LastActivityDate="2017-12-05T16:52:19.827" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="14743" PostTypeId="1" CreationDate="2017-12-05T17:25:47.753" Score="0" ViewCount="348" Body="&lt;p&gt;I have a servo motor (&lt;a href=&quot;http://robokits.download/documentation/RMCS220x_DCServo_Driver.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;details are here&lt;/a&gt;). I wrote a code in Arduino to rotate it in some defined angles and position. Code is given below:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;void setup() {&#xA;  // put your setup code here, to run once:&#xA;  Serial.begin(9600);&#xA;  Serial1.begin(9600);&#xA;  Serial1.println(&amp;quot;M40&amp;quot;);&#xA;}&#xA;&#xA;void loop() {&#xA;  // put your main code here, to run repeatedly:&#xA;  if (Serial.available() &amp;gt; 0)&#xA;  {&#xA;    Serial1.println(Serial.readString());&#xA;  }&#xA;  if (Serial1.available() &amp;gt; 0)&#xA;  {&#xA;    Serial.println(Serial1.readString());&#xA;  }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Initially, the motor rotates fine and gave me feedback also. But, since last week whenever I gave a command to rotate motor it starts shaking/vibrating. I don't know why? I used same circuit, same power source etc. as I used earlier. I contacted company's people but they are also not getting what the problem is? Using multimeter, I checked voltage and found out 12.9 V which is within the range.&lt;/p&gt;&#xA;&lt;p&gt;Can anybody help to find out the reason behind these? I have 2 motors and both are showing this behavior.&lt;/p&gt;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="14024" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2018-08-03T02:00:13.040" Title="DC servo motor shake/vibrate too much" Tags="&lt;arduino&gt;&lt;servomotor&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14747" PostTypeId="2" ParentId="14743" CreationDate="2017-12-05T22:07:37.843" Score="1" Body="&lt;p&gt;You did not specify how the motor was being controlled. If done through analog, a noisy analog signal could be the smoking gun. If done through some other (I2C or UART) there could be some interruption in the signal.&lt;/p&gt;&#xA;" OwnerUserId="18973" LastActivityDate="2017-12-05T22:07:37.843" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14748" PostTypeId="1" CreationDate="2017-12-05T23:16:59.390" Score="1" ViewCount="96" Body="&lt;p&gt;Suppose we want to track multiple objects (robots, roads, people...) using clustered particle filtering (because we don't have an idea about how many objects there'll be, and the number of these may change over time). In the literature, there's a great deal of complicated formulas that explain how the weights of the clusters are calculated and involved in the calculation of the weights of the particles... Could someone explain (in very simple terms):&lt;br/&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The main idea of clustered particle filtering&lt;br/&gt;&lt;/li&gt;&#xA;&lt;li&gt;How particles are grouped into clusters&lt;br&gt;&lt;/li&gt;&#xA;&lt;li&gt;How weights are calculated (for particles and clusters)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="6976" LastEditorUserId="19515" LastEditDate="2020-07-23T17:42:36.510" LastActivityDate="2020-07-23T17:42:36.510" Title="How does a clustered particle filter work?" Tags="&lt;particle-filter&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14749" PostTypeId="1" AcceptedAnswerId="14751" CreationDate="2017-12-06T00:04:34.447" Score="3" ViewCount="4061" Body="&lt;p&gt;Although I have an understanding of what Jacobians are in general and how to calculate Jacobians, I fail to understand how the idea of Jacobian came for use in kinematics and why they are used for turning angles into end effector position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm also wondering how we change current angles into angular velocities and use that information to calculate the end effector position, while we lack information regarding time in such a problem.&lt;/p&gt;&#xA;" OwnerUserId="11281" LastActivityDate="2017-12-06T03:59:18.403" Title="Understanding the Robot Jacobian" Tags="&lt;kinematics&gt;&lt;jacobian&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14750" PostTypeId="2" ParentId="14749" CreationDate="2017-12-06T02:28:35.383" Score="2" Body="&lt;p&gt;Jacobian defines the dynamic relationship between two different representations of a system. For example, if we have a 2-link robotic arm, there are two obvious ways to describe its current position:  &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The end-effector position and orientation(Let it be X)  and   &lt;/li&gt;&#xA;&lt;li&gt;As the set of joint angles.(Let it be Q)  &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The Jacobian for this system relates how movement of the elements of &lt;strong&gt;Q&lt;/strong&gt; causes movement of the elements of &lt;strong&gt;X&lt;/strong&gt;. Here Jacobian is a transform matrix for velocity.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://studywolf.wordpress.com/2013/09/02/robot-control-jacobians-velocity-and-force/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Click here&lt;/a&gt; for a detailed note on how Jacobian helps with time derivatives to convert angle positions into angle velocities.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this helps...&lt;/p&gt;&#xA;" OwnerUserId="17067" LastActivityDate="2017-12-06T02:28:35.383" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14751" PostTypeId="2" ParentId="14749" CreationDate="2017-12-06T03:59:18.403" Score="9" Body="&lt;p&gt;Let's start from the forward kinematics equation&#xA;$$x = f(q),$$&#xA;where $x \in \mathbf{R}^6$ is the end-effector position, $q$ is the joint angles, and $f$ is a (usually highly nonlinear) forward kinematics mapping. Due to the nature of $f$, computing the image of $q$ under $f$ (i.e. $f(q)$) is not difficult but computing the preimage of $x$ under $f$ (i.e. $f^{-1}(x)$) is a very challenging task. It is often very difficult, if not impossible, to have a closed-form formula of $f^{-1}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fortunately, regardless of how nonlinear and complicated the forward kineamtics function $f$ is, when taking the time derivative of the above equation, we always have&#xA;$$&#xA;\begin{align}&#xA;\frac{dx}{dt} &amp;amp;= \left( \frac{d f}{d q} \right)\frac{dq}{dt}\\&#xA;\dot{x} &amp;amp;= J(q)\dot{q}&#xA;\end{align},$$&#xA;which is &lt;strong&gt;always&lt;/strong&gt; a linear relation (i.e. a joint velocity is mapped to an end-effector velocity by a matrix $J$). Its linearity makes it very appealing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now when given an end-effector position $x^*$ and we want to compute a corresponding $q^*$, we can do so by using the following procedure:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Suppose the manipulator is at a an end-effector position $x_\text{current}$ and joint angles $q_\text{current}$&lt;/li&gt;&#xA;&lt;li&gt;Compute $dx$ as an increment from $x_\text{current}$ &lt;em&gt;towards&lt;/em&gt; $x^*$&lt;/li&gt;&#xA;&lt;li&gt;Compute the Jacobian $J(q_\text{current})$&lt;/li&gt;&#xA;&lt;li&gt;Compute the increment in joint angles $dq$ from $dx = Jdq$.&lt;/li&gt;&#xA;&lt;li&gt;Update $q_\text{current}$ and $x_\text{current}$&lt;/li&gt;&#xA;&lt;li&gt;If $f(q_\text{current}) = x^*$, terminates. Otherwise, go to step 2.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The above procedure is, roughly speaking, pretty easy to follow and implement compared to computing directly $f^{-1}$.&lt;/p&gt;&#xA;" OwnerUserId="7610" LastActivityDate="2017-12-06T03:59:18.403" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14752" PostTypeId="1" CreationDate="2017-12-06T04:40:26.727" Score="0" ViewCount="390" Body="&lt;p&gt;I have been recently studying about the SLAM family of algorithms, with the idea of implementing some for a multi-robot framework I have. With regards to the concept, I have a couple of related questions. For the sake of the questions, I am assuming a camera based SLAM framework.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;I read that bundle adjustment in SLAM is usually performed in the pose graph formulation of the problem (say, when a loop closure is detected, or when keyframes are added), as opposed to the EKF type of SLAM. Is that correct? How can a pose graph formulation/BA framework keep track of the covariances of the robot(s)? Assuming I am not interested in the uncertainty of the map points, but only the quality of the poses of the robot(s).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Assuming I have a known map of 3D points, and a robot that is navigating by observing these points, while computing its pose through the PNP algorithm or an equivalent. Is it possible to refine each pose individually by solving the non linear least squares problem of minimizing the reprojection error?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If I have multiple sensors on the robot, or if I have multiple robots with access to relative measurements, the conventional way of performing sensor fusion or fusion between relative and individual measurements (covariance intersection etc.) is usually geared towards a Kalman filter framework. Can additional information such as this be incorporated in a graph based SLAM as well?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="15992" LastActivityDate="2017-12-18T13:15:35.280" Title="Questions about SLAM: bundle adjustment, covariance etc" Tags="&lt;localization&gt;&lt;slam&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14753" PostTypeId="1" AcceptedAnswerId="14792" CreationDate="2017-12-06T08:35:03.823" Score="2" ViewCount="525" Body="&lt;p&gt;I am using the &lt;a href=&quot;http://petercorke.com/wordpress/toolboxes/robotics-toolbox&quot; rel=&quot;nofollow noreferrer&quot;&gt;Robotics Toolbox by Peter Corke&lt;/a&gt; to create a plot of a simple four-link robot. For an assignment, I want a figure of the robot with all frames according to the DH-convention. Though even after reading through the documentation and googling for an hour, I couldn't find an option.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.petercorke.com/RTB/r9/html/SerialLink.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Seriallink.plot(...)&lt;/a&gt; offers the options 'jaxis' and 'jvec', though they only display the joint axes, not the complete xyz-frame per link.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I get a plot of a robot with all DH frames included?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If this is not possible, is there any other way to quickly render such a plot from a DH table? I am almost tempted to do it on paper after already wasting so much time on such an easy task.&lt;/p&gt;&#xA;" OwnerUserId="18982" LastEditorUserId="110" LastEditDate="2020-05-22T00:26:52.403" LastActivityDate="2020-05-22T00:26:52.403" Title="Robotics Toolbox: Display all DH link frames in Seriallink.plot()" Tags="&lt;visualization&gt;&lt;robotics-toolbox&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14754" PostTypeId="1" CreationDate="2017-12-06T11:48:33.603" Score="4" ViewCount="87" Body="&lt;p&gt;I'm working on an assignment and was wondering aobut the degrees of freedom this system has.&#xA;The generalized coordinates are: &#xA;$\underline{q}:$&#xA;\begin{bmatrix}&#xA;x  \\&#xA;\theta_{1}  \\&#xA;\theta_{2}  \\&#xA;\end{bmatrix}&#xA;A revolute joint connects both rods. Furthermore, there is a horizontal actuation force $F_{1}$ in the revolute joint and a vertical actuation force $F_{2}$ in $CM_{1}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that there are 2 bodies so 6 DOF in total.&#xA;The revolute joint constraints 2 DOF, and both sliders also constrain 1 DOF each. The actuation focres also remove 1 DOF each. which means that the total number of DOF is $0$. Is this correct?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not sure what the spring at the bottom does.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance for any help&lt;a href=&quot;https://i.stack.imgur.com/2zm8F.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2zm8F.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18987" LastActivityDate="2017-12-06T16:06:25.503" Title="robotic arm DOF" Tags="&lt;dynamics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14755" PostTypeId="2" ParentId="14748" CreationDate="2017-12-06T14:14:42.150" Score="3" Body="&lt;p&gt;I am going to give a 5 minutes answer because I am still wondering how do I got to this page.... =P&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming you know Particle Filter concept.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1 - What is  &quot;Clustered Particle Filter&quot;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main idea of &quot;Clustered Particle Filter&quot; is to keep hypotheses alive! Imagine that in your environment you have two regions that are very similar. Almost the same. But in one of them you have a table and not in the other. Lets say your Particle Filter has converge to this two location. Now, you see clearly two &quot;groups of particles&quot; in your localization.&#xA;Then your laser sees something very similar to a table. Increases the probability of the group of particles in the room with the table and kill all particles in the room without a table. Ops, too bad, it was only a person walking and now all your particles are in one room without be sure where exactly the robot should be.&#xA;The idea of Clustered Particle Filter is to, when kill a particle, respawn it inside the same cluster. This way, you will probably keep covered more than one spot in the map, if the particles tend to converge.&#xA;This is general idea. Now: How to create new clusters? how to kill clusters? When do it?? I strongly advise you to read in papers or books about more deep answer. If the mathematical is hard, skip it for a moment, until you get the idea.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For instance: &lt;a href=&quot;https://www.aaai.org/Papers/AAAI/2002/AAAI02-087.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.aaai.org/Papers/AAAI/2002/AAAI02-087.pdf&lt;/a&gt;&#xA;Go directly to Clustered-MCL section.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2 - How they are clustered? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Several ways to do it. For instance, you could initialize your particles in clusters already! In different positions in the map. Or you could start it as one cluster only (and in a SLAM approach) and when your clustering method see two or more clusters that are separate over a specific threshold, you could start to consider more than one cluster. Let your imagination fly!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3- How weights are calculated? For particles and clusters?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both. What determines if a particle will keep alive is its probability. What determines if a cluster if a cluster should keep alive is its probability.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, you are asking if you should weight your particles inside of a cluster or globally. It depends on the method. But normally, to compute the probability of a &lt;strong&gt;cluster&lt;/strong&gt;, you should weight the particles inside that cluster globally even if the weight used to determine if a &lt;strong&gt;particle&lt;/strong&gt; should be kept alive  is computed only in respect to its cluster.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Have a nice day!&lt;/p&gt;&#xA;" OwnerUserId="18989" LastActivityDate="2017-12-06T14:14:42.150" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14756" PostTypeId="2" ParentId="14754" CreationDate="2017-12-06T16:06:25.503" Score="3" Body="&lt;p&gt;The system has 2 DOF!&#xA;Your assumption &lt;em&gt;The actuation focres also remove 1 DOF each.&lt;/em&gt; is wrong.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Generally you can always use a simple proof about the DOF.&#xA;In your system you have 3 generalized coordinates. If you fix one of them (e.g. the $x-$coordinate) you can still move the joint via $F_1$. The angles $\theta_1, \theta_2$ would change then.&#xA;If you fix another coordinate, lets say $x$ and $\theta_1$ you will not be able to move anything in the system anymore. Therefore the system has 2 degrees of freedom. &lt;/p&gt;&#xA;" OwnerUserId="18341" LastActivityDate="2017-12-06T16:06:25.503" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14761" PostTypeId="1" AcceptedAnswerId="14784" CreationDate="2017-12-07T18:11:08.370" Score="0" ViewCount="1419" Body="&lt;p&gt;First time asking a question on this Stackexchange, I hope I don't sound too dumb...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My daughter saw a documentary about robots and immediately asked me to build her a robotic arm. I found a nice one on Thingiverse: &lt;a href=&quot;https://www.thingiverse.com/thing:2433&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.thingiverse.com/thing:2433&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm done building it and I just finished wiring it up. I want to drive it from one of the Arduino Unos I have lying around at home. Starting the Sketch from the example found at Arduino.cc (&lt;a href=&quot;https://www.arduino.cc/en/Tutorial/Knob&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.arduino.cc/en/Tutorial/Knob&lt;/a&gt;) something unexpected happened when I connected just one of the DC servos it has (I haven't connected any other): as I plugged it on the board nearly ALL seven servos have begin to move erratically and for no reason at all. Not just the one I was trying to calibrate, but most of the. Even if the PWM cable of the motor was not even near to the Arduino pin.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The setup I have, is approximately the following&lt;a href=&quot;https://i.stack.imgur.com/Q220J.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Q220J.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If someone could help me to understand what's missing, I would greatly appreciate it. Again, please be kind. I'm just a hobbyist trying to make my little girl happy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance!&lt;/p&gt;&#xA;" OwnerUserId="19004" LastActivityDate="2017-12-11T17:28:12.337" Title="DC Servos moving randomly" Tags="&lt;arduino&gt;&lt;robotic-arm&gt;&lt;rcservo&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14762" PostTypeId="2" ParentId="14761" CreationDate="2017-12-07T19:12:20.840" Score="0" Body="&lt;p&gt;I'm not sure what the design behavior is with no reference input, but that might be a contributing problem. The servo is expecting a pulse every 20ms. It might also be that your battery pack is dead. It might also be that they're wired incorrectly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please measure and report the voltage on the battery pack output while the servos are jittering. Please also take an actual picture of your setup and post the actual code you're using.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My guess is the battery pack is (near) dead and not supplying the correct voltage.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-12-07T19:12:20.840" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14765" PostTypeId="1" CreationDate="2017-12-08T18:23:05.107" Score="0" ViewCount="63" Body="&lt;p&gt;I am using FPGA board and servo, I read that with PWM I can control where the servo will rotate. If the duty cycle in PWM is 1.5 ms it goes to the center, if it is 2 ms it goes to clockwise and if it is 1 ms it rotates to counter-clockwise. But, I couldn’t find any clue on how to control the speed of the servo. Can you help me please?&lt;/p&gt;&#xA;" OwnerUserId="19010" LastEditorUserId="19515" LastEditDate="2020-07-27T18:28:26.383" LastActivityDate="2020-07-29T17:21:09.427" Title="How to control the speed of servo?" Tags="&lt;servomotor&gt;&lt;pwm&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="14766" PostTypeId="2" ParentId="9502" CreationDate="2017-12-08T19:24:39.403" Score="2" Body="&lt;p&gt;Short answer: A gyroscope by itself cannot determine its global reference frame. You either need to start the device in a known initial global orientation and measure how much the orientation changes, or you need other devices to determine the &quot;initial&quot; or periodic global reference frame. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Long answer:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A gyroscope only gives you angular velocities, which then can be integrated into relative yaw, pitch, and roll from a starting point. This is a 3 degrees of freedom (3dof) system. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This can be combined with an accelerometer which measures the acceleration. If your device starts in a stationary position, the accelerometer can then be used to measure the direction of gravity and establish the initial &quot;down&quot; direction towards gravity. You now know the initial direction of down (but not north/south/east/west). This is a 6dof system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next, you can combine the above two with a magnetometer. This detects magnetic fields including magnetic north. Your device in its stationary starting position can determine which direction is north. You now know the initial down position and the initial north direction in the global reference frame. This is a 9dof system.&lt;/p&gt;&#xA;" OwnerUserId="19011" LastEditorUserId="19011" LastEditDate="2017-12-08T19:43:16.237" LastActivityDate="2017-12-08T19:43:16.237" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14767" PostTypeId="1" CreationDate="2017-12-08T19:24:48.397" Score="0" ViewCount="25" Body="&lt;p&gt;We realized that depth cameras (IFM) tend to create a lot of noise when exposed in areas with direct sunlight. Are there any approaches to deal with illuminations? Eliminating pixels for instance?&lt;/p&gt;&#xA;" OwnerUserId="19012" LastActivityDate="2017-12-09T05:09:16.433" Title="Depth cameras with varying illuminations" Tags="&lt;sensors&gt;&lt;cameras&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14768" PostTypeId="1" CreationDate="2017-12-08T19:28:17.190" Score="0" ViewCount="30" Body="&lt;p&gt;We're building a smart camera and one of our competitors is using a depth sensor we're interested in using. If we open up the product, is it common to be able to see manufacturer information for specific parts like sensors? &lt;/p&gt;&#xA;" OwnerUserId="18298" LastActivityDate="2018-01-08T05:02:08.960" Title="Finding the manufacturer for a sensor" Tags="&lt;sensors&gt;&lt;cameras&gt;&lt;manufacturing&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14769" PostTypeId="2" ParentId="14768" CreationDate="2017-12-09T04:49:02.500" Score="1" Body="&lt;p&gt;Warning: I know nothing about depth sensors in cameras. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;With that caveat out of the way, it really depends on who your &quot;competition&quot; is. I know that designing and building systems takes way more effort than you (unless you did the work) can imagine. Having said that, if your competitor has a massive research and development department, and they do massive volume (enough to justify making their own IC chips), then even a single proprietary IC can really mess up your hopes of copying a part of their design. Having said this, I would think that if you are a true competitor, simply looking at how they achieved their objective should give you enough information to achieve your objective. If they are a large volume manufacturer, they will have proprietary IC chips, but they will also have common off-the-shelf ICs. If you are capable of achieving the task on your own (your team has the skills), then having a &quot;look see&quot; will allow you an advantaged position to consider the pro's and con's and go your own way. However if you are looking to simply copy everything chip for chip... then I would avoid refering to anyone who already created a product as &quot;your competition&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your competition is someone who does not have a massive budget or massive volume, then for sure, they are using off the shelf IC chips; and opening their product will allow you to see the part numbers they are using, and you can have a really good idea how to achieve your task.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My advice is: if you can't do it on your own, you probably won't be able to copy someone else's design. It usually takes a lot of skill to reverse engineer products. If you have the skill to reverse engineer products, you have the skill to build it on your own and you wouldn't be asking this question. If all you need is a part number, then this is not the place to find it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sorry if I sound feisty... I am only trying to save you a ton of effort. I have built systems before, and it's a lot of work. If you have no clue how to do something, looking at someone else's design won't save you....&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Good luck.&lt;/p&gt;&#xA;" OwnerUserId="18167" LastActivityDate="2017-12-09T04:49:02.500" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14770" PostTypeId="2" ParentId="14767" CreationDate="2017-12-09T05:09:16.433" Score="2" Body="&lt;p&gt;depth cameras are super cool. I have never worked with them before, but guess what? I have an opinion! lol.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Have you considered using a lens to filter out the direct sunlight as a &quot;cover&quot; (kind of a baseball hat brim). I recall when there was an eclipse we looked at it through a welder's mask and it was super cool as you could see the actual eclipse! maybe putting a filter to prevent the sun hitting your sensor is the way to go; you could use the same principle to prevent the sun hitting your sensor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With most chips, the light intensity of direct sun is going to give you such a high value on those pixels that it will blind your sensor, and you won't be able to do squat about that unless you use a light filter... but then you could end up filtering the light your camera senses..&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have no idea what your application is, but touch base with your sensor manufacturer and see what they can suggest for your issue. Another &quot;in the dark&quot; idea is using an IMU to know when you are facing upwards at the sun, and knowing your data is compromised.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a closing thought, unless the light emitted by the camera is light that is outside the spectrum emitted by the sun, you cannot look at the sun and get a valid distance read (thats how &quot;anti-cop&quot; radar blinders work).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the manufacturer has no help, I would focus on either:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;figuring out when I am looking at the sun and looking away&lt;/li&gt;&#xA;&lt;li&gt;Blocking the sun out using filters as a kind of roof over the sensor.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Good luck in your adventure.&lt;/p&gt;&#xA;" OwnerUserId="18167" LastActivityDate="2017-12-09T05:09:16.433" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14772" PostTypeId="1" CreationDate="2017-12-10T06:47:13.200" Score="-1" ViewCount="29" Body="&lt;p&gt;I'm &lt;strong&gt;intermediate python&lt;/strong&gt; coder who is &lt;strong&gt;using Ubuntu 16.04&lt;/strong&gt; and has just finished the b&lt;strong&gt;eginner tutorial from ROS wiki&lt;/strong&gt; and I have realized I know very less. I pursuing my own design problem: &lt;strong&gt;Designing a bio-inspired spider that can operate with or without operator&lt;/strong&gt; .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can any one guide me through on what to do/learn next so that I'm completely ready to work on my design problem thereby saving my time in figuring out the road map for the same?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sincerely&lt;/p&gt;&#xA;" OwnerUserId="19022" LastActivityDate="2017-12-11T04:34:30.120" Title="How to proceed whith this design problem?" Tags="&lt;first-robotics&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2017-12-14T23:42:24.583" ContentLicense="CC BY-SA 3.0" />
  <row Id="14774" PostTypeId="1" AcceptedAnswerId="14776" CreationDate="2017-12-10T12:45:11.503" Score="2" ViewCount="1244" Body="&lt;p&gt;I'm fusing two vision-based algorithms using the Kalman filter to estimate the state of a vehicle $X=(x,y,\theta)$ where $x$ and $y$ are the coordinates in the plan and $\theta$ the heading.&#xA;The problem is with the matrix $R$ of the 2nd algorithm taken as the measurement model. $R$ refers to the noise covariance matrix$$&#xA;R&#xA;= &#xA;\begin{bmatrix}&#xA;\sigma_{x}^2 &amp;amp; 0 &amp;amp; 0 \\&#xA;0 &amp;amp; \sigma_{y}^2 &amp;amp; 0 \\&#xA;0 &amp;amp; 0 &amp;amp; \sigma_{\theta }^2 \\&#xA;\end{bmatrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to evaluate the variances, I tested the algorithm for example for the random variable $x$ and compared its retuned $x_{m}$ against the ground truth $x_{gt}$. Here is the histogram of $e(x)=\sqrt{{(x_{m}-x_{gt})}^2}$ in meters for $107$ measurements&#xA;&lt;a href=&quot;https://i.stack.imgur.com/fGPzP.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fGPzP.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The error is not zero-mean gaussian noise. For the gaussian shape is it correct to use maximum likelihood estimation to fit a gaussian to data, and how to deal with the non-zero mean issue?&#xA;Is it possible to use non-zero mean noise for measurement with unscented kalman filter?&lt;/p&gt;&#xA;" OwnerUserId="17442" LastEditorUserId="17442" LastEditDate="2017-12-10T13:55:22.137" LastActivityDate="2017-12-11T01:41:50.060" Title="Measurement model for Kalman filter but non-zero mean" Tags="&lt;kalman-filter&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14775" PostTypeId="1" AcceptedAnswerId="14778" CreationDate="2017-12-10T15:07:24.677" Score="1" ViewCount="162" Body="&lt;p&gt;I'm making an AUV that requires 15-20 minutes of operating time. I'm using 6 of these motors (&lt;a href=&quot;https://www.bluerobotics.com/store/thrusters/t200-thruster/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Blue Robotics T200 Thrusters&lt;/a&gt;) for propulsion; I'm looking for &lt;strong&gt;6S lipo batteries&lt;/strong&gt; (22.2V) but i don't know how to calculate the &lt;strong&gt;capacity&lt;/strong&gt; (mAh) I need to run my vehicle. Is there any &lt;strong&gt;formula&lt;/strong&gt; that allows me to calculate the required parameter? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Parameters required: Battery capacity, Maximum underwater operation time @ given load.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="13967" LastActivityDate="2017-12-12T06:52:31.213" Title="AUV Lipo Battery capacity" Tags="&lt;battery&gt;&lt;underwater&gt;&lt;lithium-polymer&gt;&lt;auv&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14776" PostTypeId="2" ParentId="14774" CreationDate="2017-12-11T01:03:16.643" Score="7" Body="&lt;p&gt;There are actually several issues in this question which I will answer separately.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;1) Error is:&lt;/strong&gt; $$\sqrt{(x_m-x_{gt})^2}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;No, error is just $$(x_m - x_{gt})$$ This may be part of your problem with zero means because any error distribution will have a positive mean if you force all errors to be positive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;2) My error distribution does not have zero mean. How do I compensate for that?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even after fixing that first issue, you may still have a non-zero mean. This can be fixed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Determine the actual mean and use that to adjust any values that you receive from the sensor. This is called sensor calibration. So if you know that your sensor has a mean error of 8.3 and you receive a sensor measurement of 15, then you should treat that as a sensor measurement of 6.7 (15 - 8.3).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;3) My error distribution is not gaussian. Is it okay to fit a gaussian to that distribution anyway?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Real error distributions are rarely gaussian, so fitting a gaussian is necessary. Unfortunately this does create a tradeoff for you to consider. If your gaussian is a good fit for the data in the 0-20 range then I think it will underestimate the probability of the outliers in the 30-50 range. That would cause your kalman filter to be overconfident and bounce around. Fitting a gaussian with larger sigma to include those values in the 30-50 range will result in smoother, but less precise output. The best result probably lies somewhere in between, so you'll need to experiment with that.&lt;/p&gt;&#xA;" OwnerUserId="18316" LastEditorUserId="18316" LastEditDate="2017-12-11T01:41:50.060" LastActivityDate="2017-12-11T01:41:50.060" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="14777" PostTypeId="2" ParentId="14772" CreationDate="2017-12-11T01:59:42.113" Score="1" Body="&lt;p&gt;1) StackExchange is really not intended for the side-by-side mentoring it seems you are looking for.  It is a good place to ask questions about specific problems you run into.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) Python is not the programming language I would recommend for the real-time control needed for a robotics/mechatronics project, especially for a beginner.  I recommend you start with something simpler like Arduino.  If you need more advanced features, you could later add an Android phone that talks to the Arduino.  This is becoming easier as Android Studio is free and picking up an obsolete Android phone can be really cheap.  Android phones have a lot of advanced capabilities like a user interface, a display, GPS, accelerometers,  cameras, and WiFi.  You could even use a 2nd phone as a remote control by using WiFi Direct to talk to the Arduino on the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3) Look locally for a mentor/club.  Depending on your location and age, you could find a High School robotics team to join, maybe take a class at a local university,  or find a local robotics or 3D printing club.  If all those are not a possibility, consider building a heavy DIY kit.  A really good option is buying a 3D printer then building a 3D printed design.&lt;br&gt;&#xA;Ex: &lt;a href=&quot;https://www.youtube.com/watch?v=9Pos9pE8xwU&quot; rel=&quot;nofollow noreferrer&quot;&gt;3D-Printed Arduino Spider Robot&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;4) Get a 3D Printer or at least find a way to access one!  I mentor a Robotics Team and 3D Printing has been a huge advance in helping me develop the students.  It allows them to take their ideas to reality very quickly and learn what works and what doesn't; and, when something doesn't work it allows them to quickly modify their design and try again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;5) Accept that learning something like this is going to take a LOT of time, passion, and commitment.  Don't expect that a mentor is going to reduce that for you.  Mentors are often passionate about helping others grow; but, generally they have a lot of other demands for their time as well.  If they see they are putting more effort into your project than you are, expect that they may move on to more fertile ground.&lt;/p&gt;&#xA;" OwnerUserId="462" LastEditorUserId="462" LastEditDate="2017-12-11T04:34:30.120" LastActivityDate="2017-12-11T04:34:30.120" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14778" PostTypeId="2" ParentId="14775" CreationDate="2017-12-11T07:08:44.453" Score="2" Body="&lt;p&gt;You don't gave all information that are needed for such calculations. However, the technical details of the Thrusters give a peak consumption of 350 Watts each. So you have 6 of them, makes overall 2.1kW/h.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lets &lt;strong&gt;assume&lt;/strong&gt; your Batteries have the following details: 6S 22.2V 3300mAh.&#xA;Therefore the amount of energy the Batterie stores is: 22.2V*3.3Ah = 73.26W/h.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Moreover &lt;strong&gt;assume&lt;/strong&gt; that you will drive only 25% full-speed in Average, 2.1kW/h * 0.25 = 525W/h.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's calculate the runtime under these &lt;strong&gt;assumptions&lt;/strong&gt;: 73.26W/h / 525W/h = 0.139542857h * 0.6 = 0,083725714 minutes runtime.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if you want to archive 20minutes operation time reaarange the formula:&#xA;525W/h * (1/3h) &lt;em&gt;((== 20 minutes))&lt;/em&gt; = ~158Wh / 22.2V = ~7.1Ah&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you need a battery which have at least 7.1Ah capacity at 22.2V, assuming an average load of 0.25%.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please consider, you will have a peak-load of 25A * 6 = 150A. This means the given battery (7100mAh) needs to support a minimum discharge current of 150A/7.1A = 21.12C. &#xA;&lt;strong&gt;If you don't respect these you battery might begin to burn, causing harm to your vehicle and the Environment&quot;.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Moreover you don't gave information about the consumption of any electronics inside the AUV, therefore this are not in the scope of this post.&lt;/p&gt;&#xA;" OwnerUserId="4508" LastEditorUserId="4508" LastEditDate="2017-12-12T06:52:31.213" LastActivityDate="2017-12-12T06:52:31.213" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="14781" PostTypeId="1" CreationDate="2017-12-11T14:31:12.417" Score="3" ViewCount="112" Body="&lt;p&gt;I am programming/using a rigid body joint-space dynamics solver for robots in which I want to implement linear force actuators between links with their equivalent torque sources that are 'spanned' by this linear actuator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider the example figure sketch below:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/qaEqm.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qaEqm.png&quot; alt=&quot;schematic&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It shows a three bar linkage floating in 3D space. We have a coordinate system $\Psi_0$ in which we can express all vectors. The left and right figure are the same, except for the fact that the linear force actuator in the left figure has been replaced by rotation actuator torques (see following text). Because they are supposed to be equivalent I have added that large 'equals' sign between the two figures.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a linear force actuator between points $\mathbf{p}_1$ and $\mathbf{p}_2$ that effectively pulls these points towards each other. This actuator delivers a force with size $F$, which is drawn along the dashed red line as $\mathbf{F}_1$ in point $\mathbf{p}_1$ and as $\mathbf{F}_2$ in point $\mathbf{p}_2$, in opposite direction, due to Newton's third law.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The three bar linkage has two &lt;em&gt;passive&lt;/em&gt; single-DOF joints whose locations in 3D-space are given by $\mathbf{j}_1$ and $\mathbf{j}_2$. These joints rotate around their axis of rotation $\hat{\mathbf{u}}_1$ and $\hat{\mathbf{u}}_2$, given with &lt;em&gt;unit length&lt;/em&gt;. The joint angles $q_1$ and $q_2$ show the angle in the respective joint.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt; I want to know the equivalent torque vectors $\mathbf{T}_1$ and $\mathbf{T}_2$ that would result from the linear force actuator $\mathbf{F}$. These torque vectors would give me the exact same dynamical behavior (I am not interested in joint constraint forces).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that the locations of $\mathbf{p}_1$, $\mathbf{p}_2$, $\mathbf{j}_1$, $\mathbf{j}_2$ are known, that vectors $\hat{\mathbf{u}}_1$ and $\hat{\mathbf{u}}_2$ are known, $\mathbf{F}_1=-\mathbf{F}_2$ is known, and that $q_1$ and $q_2$ are known. All vectors are numerically expressed in frame $\Psi_0$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Attempt:&lt;/strong&gt; &lt;em&gt;Simpler case:&lt;/em&gt; If the middle link between $\mathbf{j}_1$ and $\mathbf{j}_2$ would be missing, then we have only a single revolute joint $\mathbf{j}_1$. Then I would calculate the equivalent torque vector to be:&#xA;\begin{align}&#xA;\mathbf{T}_1 &amp;amp;= \left(\left((\mathbf{p}_1-\mathbf{j}_1)\times\mathbf{F}_1\right)\cdot\hat{\mathbf{u}}_1\right)\hat{\mathbf{u}}_1 \\&#xA;&amp;amp;= \left(\left((\mathbf{p}_2-\mathbf{j}_2)\times-\mathbf{F}_2\right)\cdot\hat{\mathbf{u}}_1\right)\hat{\mathbf{u}}_1&#xA;\end{align}&#xA;Where $a\times b$ is the 3D cross-product, and $a\cdot b$ is the dot-product. The torque applied by the actuator is simply the length of the torque vector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;General case&lt;/em&gt;: I now get pretty confused when the linear actuator spans one or more extra links and joints between the attachment points (imagine $n$ joints with arbitrary rotation direction, and $n-1$ links between the two final links that have $\mathbf{p}_1$ and $\mathbf{p}_2$ attached).&#xA;I looked into what's explained &lt;a href=&quot;http://www.shadmehrlab.org/book/force_and_torque/forcetotorque.htm&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;here&quot;&gt;here&lt;/a&gt;, but I need a method that works directly with numerical values for the vector elements for all vectors that I know.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt; am I just confusing myself and is it nothing more than Jacobian transpose (the Jacobian from joint-space to e.g. $\mathbf{p}_2$)? I'd rather not construct Jacobians for all attachment points.&lt;/p&gt;&#xA;" OwnerUserId="19032" LastEditorUserId="19032" LastEditDate="2017-12-11T15:01:55.107" LastActivityDate="2017-12-11T15:01:55.107" Title="From a linear force actuator that spans multiple links and joints to the equivalent motor torque" Tags="&lt;kinematics&gt;&lt;torque&gt;&lt;force&gt;" AnswerCount="0" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14782" PostTypeId="2" ParentId="14765" CreationDate="2017-12-11T15:17:50.920" Score="1" Body="&lt;p&gt;Vary the voltage to the servo. &#xA;If your servo operates full power at 5V at 2.5V it will operate at half speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your FPGA can output an analogue signal you could use that to drive the motor speed, otherwise you'll need to put in a DAC to get the analogue signal.&lt;/p&gt;&#xA;" OwnerUserId="18016" LastActivityDate="2017-12-11T15:17:50.920" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14783" PostTypeId="2" ParentId="14765" CreationDate="2017-12-11T16:50:24.743" Score="0" Body="&lt;p&gt;Many of the dedicated servo-controlling boards include an option to set the speed for each servo. I know for a fact that the Pololu Maestro boards do (as I've used those myself), and I'd expect that the Lynxmotion and Adafruit branded boards also have that feature. But, FPGA boards don't have it built in. You'll need to create your own function to send a signal for incremental movements at an interval. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lowering the voltage can work, but I believe that it lowers the torque as well, so that may not be ideal for your situation.&lt;/p&gt;&#xA;" OwnerUserId="18168" LastActivityDate="2017-12-11T16:50:24.743" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14784" PostTypeId="2" ParentId="14761" CreationDate="2017-12-11T17:28:12.337" Score="1" Body="&lt;p&gt;Short answer: your power supply is insufficient. You would be better off using a common wall wart charger.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the servos are connected properly, they can move under three conditions: when they are first connected to power, when the power supply is insufficient, and when they are commanded to move. If you are using 4 AA batteries to control 6 or 7 standard servos, then I bet you don't have enough amps from those batteries. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When they are first connected (or re-connected) to power, they can move to the last position they were set at. Sometimes the servo head can be rotated (often accidentally) when the servo is off; so those heads will move back when they receive that power. They should stop once they have returned to that position. I'm not certain if they move to a location stored inside the servo's circuitry, or if that location is stored on the control board - it would make a difference, but either way this movement lasts maybe a tenth of a second so it's not really important.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Your case:&lt;/strong&gt; BUT, when the power supply is insufficient, things can get weird - very weird. I've had servos jump up and down (when lifting a light load) as the batteries struggle to provide enough power. The servo was commanded to lift and did so for a bit, but then reached an angle where it didn't have sufficient torque, so the load fell instead, and this used the motor as a generator and pushed electricity back towards the batteries. After the load had fallen, less force was required to start the lift again and some of that returned power could be used, so the arm went up again - and the process repeated. AA batteries have decent amp-hours (which we incorrectly use to indicate total capacity), but really bad amperage (the actual flow rate of the energy). In fact, for usage at 1 amp, they absolutely suck. And with that many servos, you probably need 2 amps or more. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Otherwise, if the servos are moving on their own, then they are receiving a command from somewhere. It's possible/probable that they are not connected correctly, and thus are receiving signals when you don't think you are sending them. I think your diagram is correct - but keep in mind that the wiring color on these things isn't actually standardized (most of my servos are brown-red-orange, some are black-red-yellow, and some are black-red-white). It's easy to have something in backwards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Fun fact:&lt;/em&gt; most wall wart chargers are 5v or 6v, and 2 amps. The specs should be printed somewhere on the charger. You can use one instead of (or in addition to) the batteries, at least if they are the same voltage. If you need more than that (and for an arm, you will), I suggest a dedicated power supply. You can get a 6V 10Amp (or 5Amp would be sufficient) supplies from Amazon/wherever fairly cheap. Or if you have a spare old computer sitting around, the computer's power supply has a +5V output with very good amperage if you want to use it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Source: the chart on the lower-right of the first page of Duracell's AA datasheet: &lt;a href=&quot;http://media.professional.duracell.com/downloads//datasheets/product/Ultra%20Power/Ultra-Power_AA_MX1500.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://media.professional.duracell.com/downloads//datasheets/product/Ultra%20Power/Ultra-Power_AA_MX1500.pdf&lt;/a&gt;  that shows that AA cells, at 1.5V and 1000 mA, have a service life of practically no time at all. At anything above 100 mA, they are incredibly ineffective. Alkaline cells simply don't have the chemistry to deliver high current and high voltages at the same time.&lt;/p&gt;&#xA;" OwnerUserId="18168" LastActivityDate="2017-12-11T17:28:12.337" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14785" PostTypeId="1" AcceptedAnswerId="15274" CreationDate="2017-12-11T19:11:59.963" Score="2" ViewCount="1606" Body="&lt;p&gt;I am trying IK for 5-DOF robot all revolute joint.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am working IK with Jacobian inverse i.e&lt;br&gt;&#xA;end effector velocity = J inverse * error vector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In error vector I am feeding (x,y,z) positional error; this gives me correct positioning by first 3 joints only. later 2 joints are pitch and roll used for end effector orientation. How can I input my required orientation and calculate orientation error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have Jacobian matrix[6 X 5]  considering all 5 joints; so J inverse will be [5 X 6] matrix. Error vector [6 X 1] consisting first 3 element of positional error, but for last 3 element what should I feed to get required orientation for my robot and how would I calculate the orientation error and in which form I should input my orientation of end effector.&lt;br&gt;&#xA;please help me out.&lt;/p&gt;&#xA;" OwnerUserId="19034" LastActivityDate="2019-11-29T17:11:28.050" Title="Inverse kinematic orientation problem" Tags="&lt;inverse-kinematics&gt;&lt;orientation&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="14789" PostTypeId="2" ParentId="14785" CreationDate="2017-12-13T12:00:26.293" Score="1" Body="&lt;p&gt;Referring to the equation $\dot{x} = J(q)\dot{q}$, what the last three elements of $\dot{x}$ should be depends on &lt;strong&gt;what kind of Jacobian&lt;/strong&gt; you are using.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Geometric Jacobian&lt;/strong&gt;:&#xA;Suppose your Jacobian is computed as&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$J = \begin{bmatrix}J_1 &amp;amp; J_2 &amp;amp; \cdots J_n\end{bmatrix},$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$J_i = \begin{cases}&#xA;\begin{bmatrix}z_{i - 1}\\0_{3\times1}\end{bmatrix} &amp;amp; \text{the $i^\text{th}$ joint is revolute}\\&#xA;\begin{bmatrix}z_{i - 1} \times (o_n - o_{i - 1})\\z_{i - 1}\end{bmatrix} &amp;amp; \text{the $i^\text{th}$ joint is prismatic (linear)}&#xA;\end{cases},$$&#xA;$z_i$ is the axis of the $i^\text{th}$ joint and $o_i$ is the origin of the $i^\text{th}$ frame. This Jacobian is called the geometric Jacobian. In this case, the last three elements of $\dot{x}$ should be the angular velocity of the end-effector described w.r.t. the base frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Analytical Jacobian&lt;/strong&gt;: This kind of Jacobian is computed based on representation of the orientation of the end-effector frame. This Jacobian ($J_a$) is related to the geometric Jacobian by $J_a = GJ$, for some matrix $G$. If the simulator is using this kind of matrix, the last three elements of $\dot{x}$ will depend of which representation of orientation is used to calculate the Jacobian.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The easiest way to see what the three elements of $\dot{x}$ should be may be just to try out different orientation representations and see the result.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The terminology here is quoted from Chapter 5 of &lt;a href=&quot;http://home.deib.polimi.it/gini/robot/docs/spong.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Robots Dynamics and Control&lt;/a&gt; (Spong &lt;em&gt;et al.&lt;/em&gt;).&lt;/p&gt;&#xA;" OwnerUserId="7610" LastActivityDate="2017-12-13T12:00:26.293" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14790" PostTypeId="1" AcceptedAnswerId="14791" CreationDate="2017-12-13T12:26:04.613" Score="3" ViewCount="402" Body="&lt;p&gt;I'm tracking the state of a robot $X=(x,y,\theta)$ where $x$ and $y$ are the ground coordinates and $\theta$ the heading angle.&#xA;I have the ground truth states $X_{gt}=(x_{gt},y_{gt},\theta_{gt})$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to simulate the wheel odometry using the available gound truth data.&#xA;How to do it? Is it possible to only add random gaussian noise the $X_{gt}$?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this case, how much should the variances be?&lt;/p&gt;&#xA;" OwnerUserId="17442" LastActivityDate="2017-12-13T16:11:40.233" Title="Wheel odometry simulation using ground truth" Tags="&lt;mobile-robot&gt;&lt;odometry&gt;&lt;noise&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14791" PostTypeId="2" ParentId="14790" CreationDate="2017-12-13T16:11:40.233" Score="2" Body="&lt;p&gt;You can't just take the ground truth states and get wheel encoder positions, or vice-versa, because the robot is nonholonomic. Nonholonomic is a fancy word that means &quot;path dependent,&quot; essentially, and generally happens in robotics when you have fewer axes of control than degrees of freedom. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider a typical car (that uses &lt;a href=&quot;https://en.wikipedia.org/wiki/Ackermann_steering_geometry&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ackermann steering&lt;/a&gt;). In the car, you can go forward or backward (one axis of control), and you can turn the wheels left and right (a second axis of control). However, you can move sideways too, with a specific combination of moving forward and backward AND turning the wheels left and right. This is called &lt;a href=&quot;https://en.wikipedia.org/wiki/Parallel_parking&quot; rel=&quot;nofollow noreferrer&quot;&gt;parallel parking&lt;/a&gt; and is used to preserve the heading of the vehicle (parallel to the road) after moving the car to the outboard edge of the road. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, in your car, you can change the forward/backward position, and the orientation, and the side-side position. The same goes with a differential steering robot - you can control the left and right sides independently, so only two axes of control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With a differential steering robot (like a tank), you could turn right 90 degrees, move forward 10 meters, then turn left 90 degrees. The end effect is as though you translated sideways 10 meters. You could also turn right then left, then move forward 10 meters. The two turns &quot;cancel&quot; and the end result is that you've moved forward 10 meters. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you can't look at rotations independent of linear translations. Going 100 miles and turning 180 degrees is a lot different than turning 180 degrees and going 100 miles. Similarly, just because the robot is at, say, a local origin, doesn't mean you can determine the wheel encoder counts. There may have been no motion (no encoder counts), or a forward/backward motion, or a circular motion. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Driving a circle would have the outboard wheels have higher counts than the inboard wheels, but both would be some net positive number of counts. Forward/backward would give net zero counts and both encoders would be even. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;All this is to point out &lt;em&gt;why&lt;/em&gt; it's not possible to go straight from position to absolute encoder counts or vice-versa. As with any path-dependent problem, the solution is to take an integral. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's not clear how your robot is setup or how you're getting and changing the ground coordinates, but you need to convert the vehicle speed at the center of the vehicle to the linear speed at each wheel. You can then convert that to angular speed of the wheel (by dividing by the wheel circumference). Then you integrate. Multiply the angular speed of the wheel by however long the time step is in your simulation and add it to an existing &quot;position&quot; variable. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're going for high fidelity simulations, then I would personally opt to &quot;bin&quot; the results based on your simulated wheel encoder resolution than to just add bulk noise to the signal. If you had an 8 bit wheel encoder, then one rotation gets divided into 2^8 = 256 segments. Each segment is then (2*pi/256) = 24.5 mradians. You can keep an internal state that tracks the true wheel rotations, but only update the simulated wheel encoder if it rolls over into the next bin. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider the following code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;wheelLinearSpeed = &amp;lt;your wheel speed&amp;gt;;&#xA;angularSpeed = wheelLinearSpeed/wheelCircumference;&#xA;angularPosition = angularPosition + angularSpeed*dT;&#xA;encoderResolution = (2*pi) / (2^8);&#xA;encoderCounts = floor(angularPosition/encoderResolution);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Another way to consider the last two lines is, instead of:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;encoderResolution = (2*pi) / (2^8);&#xA;encoderCounts = floor(angularPosition/encoderResolution);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;you instead inverted &lt;code&gt;encoderResolution&lt;/code&gt; and multiplied:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;encoderCounts = floor(angularPosition * ((2^8) / 2*pi)) );&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This may be cleverly regrouped as:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;encoderCounts = floor( (angularPosition/(2*pi)) * (2^8));&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Hopefully that expression makes it a little more clear - you're making a &lt;em&gt;ratio&lt;/em&gt; of the current angular position to a complete revolution (&lt;code&gt;angularPosition/(2*pi)&lt;/code&gt;), and using that to find the percentage of the total number of counts for one revolution. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-12-13T16:11:40.233" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14792" PostTypeId="2" ParentId="14753" CreationDate="2017-12-13T16:42:40.303" Score="1" Body="&lt;p&gt;The easiest way to do this would be to use the &lt;code&gt;trplot&lt;/code&gt; function (documented for v9 at &lt;a href=&quot;http://www.petercorke.com/RTB/r9/html/trplot.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.petercorke.com/RTB/r9/html/trplot.html&lt;/a&gt;). You can simply call this function with the transformation matrices for each link and it will add frame axes in those locations.&lt;/p&gt;&#xA;" OwnerUserId="10414" LastActivityDate="2017-12-13T16:42:40.303" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14793" PostTypeId="1" AcceptedAnswerId="14800" CreationDate="2017-12-13T20:37:40.320" Score="1" ViewCount="38" Body="&lt;p&gt;I need help understanding the specs of &lt;a href=&quot;https://ie.rs-online.com/web/p/dc-geared-motors/2389670/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this RS Pro DC Geared Motor, Brushed, (RS: 238-9670)&lt;/a&gt;.  It has an operating range of 4.5-15V and a nominal voltage of 12V, so does that mean that it provides 0.59Nm of torque and 84RPM when it's running at 12V?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the voltage is reduced, the torque will go up and RPM will go down and if it's increased the RPM will go up and torque will go down?&lt;/p&gt;&#xA;" OwnerUserId="7820" LastEditorUserId="37" LastEditDate="2017-12-13T22:11:54.733" LastActivityDate="2017-12-15T15:14:24.913" Title="Help with DC Gearmotor Specs" Tags="&lt;motor&gt;&lt;torque&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14795" PostTypeId="1" AcceptedAnswerId="14797" CreationDate="2017-12-14T06:48:07.427" Score="0" ViewCount="188" Body="&lt;p&gt;I am trying to estimate depth of a feature point that i find in my image. I read &lt;a href=&quot;http://ieeexplore.ieee.org/document/7738210/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; paper that estimates the depth using a motionless camera and an object of known height to calculate horizon line. I was wondering if its possible to use the same approach for a camera thats moving and object thats stationary.&lt;/p&gt;&#xA;" OwnerUserId="16715" LastActivityDate="2017-12-14T22:22:40.260" Title="How can I estimate depth of a feature point / object using single camera?" Tags="&lt;computer-vision&gt;&lt;monocular&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14796" PostTypeId="1" CreationDate="2017-12-14T17:17:14.017" Score="1" ViewCount="151" Body="&lt;p&gt;i want to use a stepper motor to move a brush to a industrial scissor machine to cut material of brushes. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The stepper motor will use a worm gear box to increase torque and smooth movement. The stepper motor will produce a torque about 0,4Nm and the gear box a torque of 20Nm. The distance is 0,15m. And the brushes with other stuff are about 1kg. For my calculation i must know how much pull force is produced by scissors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can i solve it? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/21cBZ.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/21cBZ.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19040" LastEditorUserId="19040" LastEditDate="2017-12-15T17:51:47.247" LastActivityDate="2017-12-15T17:51:47.247" Title="How to calculate the pull force of scissors?" Tags="&lt;torque&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14797" PostTypeId="2" ParentId="14795" CreationDate="2017-12-14T22:22:40.260" Score="1" Body="&lt;p&gt;Researchers from Davide Scaramuzza's group authored a paper in 2014 about a probabilistic technique called REMODE that estimates depth from a single moving camera. The algorithm performs per pixel depth estimation from a camera stream and regularization based on uncertainty estimation. It should be suitable for your application involving a moving camera and a stationary object.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The paper can be found &lt;a href=&quot;http://rpg.ifi.uzh.ch/docs/ICRA14_Pizzoli.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;, and the implementation of the algorithm can be found &lt;a href=&quot;https://github.com/uzh-rpg/rpg_open_remode&quot; rel=&quot;nofollow noreferrer&quot;&gt;at this repository&lt;/a&gt;. The implementation uses CUDA libraries, so you'd need access to an NVIDIA GPU to run it.&lt;/p&gt;&#xA;" OwnerUserId="10310" LastActivityDate="2017-12-14T22:22:40.260" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14798" PostTypeId="2" ParentId="14423" CreationDate="2017-12-14T22:27:51.680" Score="0" Body="&lt;p&gt;Those values are parameters, not arguments. You can refer to &lt;a href=&quot;http://wiki.ros.org/image_view#image_view.2BAC8-diamondback.video_recorder&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://wiki.ros.org/image_view#image_view.2BAC8-diamondback.video_recorder&lt;/a&gt; for documentation about video_recorder. In that case, your launch file should treat them as parameters with the &lt;code&gt;&amp;lt;param&amp;gt;&lt;/code&gt; tag.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;node pkg=&quot;image_view&quot; type=&quot;video_recorder&quot; name=&quot;video_record_$(arg camera_name)&quot; machine=&quot;$(arg machine)&quot; if=&quot;$(eval record and enable_camera)&quot;&amp;gt;&#xA;     &amp;lt;param name=&quot;fps&quot; value=&quot;$(arg frame_rate)&quot; /&amp;gt;&#xA;     &amp;lt;param name=&quot;codec&quot; value=&quot;HFYU&quot; /&amp;gt;&#xA;     &amp;lt;param name=&quot;encoding&quot; value=&quot;$(arg image_encoding)&quot; /&amp;gt;    &#xA;&amp;lt;/node&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Notice the distinction between param and arg. 'arg' is an argument you're receiving from the commandline, which you're encoding as a parameter and sending to the node.&lt;/p&gt;&#xA;" OwnerUserId="10310" LastActivityDate="2017-12-14T22:27:51.680" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14800" PostTypeId="2" ParentId="14793" CreationDate="2017-12-15T15:14:24.913" Score="1" Body="&lt;p&gt;Yes, it will provide 0.59Nm of torque and 84RPM when it's running at 12V.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If voltage is reduced, RPM will go down and vice versa.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, torque does not go up or down according to voltage. Torque is related to current. Higher torque is needed to lift heavier load, so the motor draws the required amount of current it needs from the battery to produce the torque needed.&lt;/p&gt;&#xA;" OwnerUserId="10691" LastActivityDate="2017-12-15T15:14:24.913" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14801" PostTypeId="1" CreationDate="2017-12-15T17:05:06.650" Score="1" ViewCount="4635" Body="&lt;p&gt;I have been trying to build my ROS workspace using catkin_make, where i have cloned a repo/PACKAGE. I tried many of the things mentioned in previous answers to questions similar to my issue but without any progress. I tried building another package and it worked well. I am new to ROS and Linux, and this issue has been impeding me for a 3 days now.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many thanks in advance!&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;abouseif@abouseif-ThinkCentre-M92p:~/main/udacity/roboticsnd/robotics_term1/ROS/catkin_ws$ catkin_make&#xA;Base path: /home/abouseif/main/udacity/roboticsnd/robotics_term1/ROS/catkin_ws&#xA;Source space: /home/abouseif/main/udacity/roboticsnd/robotics_term1/ROS/catkin_ws/src&#xA;Build space: /home/abouseif/main/udacity/roboticsnd/robotics_term1/ROS/catkin_ws/build&#xA;Devel space: /home/abouseif/main/udacity/roboticsnd/robotics_term1/ROS/catkin_ws/devel&#xA;Install space: /home/abouseif/main/udacity/roboticsnd/robotics_term1/ROS/catkin_ws/install&#xA;####&#xA;#### Running command: &quot;cmake /home/abouseif/main/udacity/roboticsnd/robotics_term1/ROS/catkin_ws/src -DCATKIN_DEVEL_PREFIX=/home/abouseif/main/udacity/roboticsnd/robotics_term1/ROS/catkin_ws/devel -DCMAKE_INSTALL_PREFIX=/home/abouseif/main/udacity/roboticsnd/robotics_term1/ROS/catkin_ws/install -G Unix Makefiles&quot; in &quot;/home/abouseif/main/udacity/roboticsnd/robotics_term1/ROS/catkin_ws/build&quot;&#xA;####&#xA;-- Using CATKIN_DEVEL_PREFIX: /home/abouseif/main/udacity/roboticsnd/robotics_term1/ROS/catkin_ws/devel&#xA;-- Using CMAKE_PREFIX_PATH: /opt/ros/kinetic&#xA;-- This workspace overlays: /opt/ros/kinetic&#xA;-- Using PYTHON_EXECUTABLE: /usr/bin/python&#xA;-- Using Debian Python package layout&#xA;-- Using empy: /usr/bin/empy&#xA;-- Using CATKIN_ENABLE_TESTING: ON&#xA;-- Call enable_testing()&#xA;-- Using CATKIN_TEST_RESULTS_DIR: /home/abouseif/main/udacity/roboticsnd/robotics_term1/ROS/catkin_ws/build/test_results&#xA;-- Found gtest sources under '/usr/src/gtest': gtests will be built&#xA;-- Using Python nosetests: /usr/bin/nosetests-2.7&#xA;-- catkin 0.7.8&#xA;-- BUILD_SHARED_LIBS is on&#xA;-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&#xA;-- ~~  traversing 3 packages in topological order:&#xA;-- ~~  - gazebo_grasp_plugin&#xA;-- ~~  - kuka_arm&#xA;-- ~~  - kr210_claw_moveit&#xA;-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&#xA;-- +++ processing catkin package: 'gazebo_grasp_plugin'&#xA;-- ==&amp;gt; add_subdirectory(RoboND-Kinematics-Project/gazebo_grasp_plugin)&#xA;-- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy&#xA;-- Boost version: 1.58.0&#xA;-- Found the following Boost libraries:&#xA;--   thread&#xA;--   signals&#xA;--   system&#xA;--   filesystem&#xA;--   program_options&#xA;--   regex&#xA;--   iostreams&#xA;--   date_time&#xA;--   chrono&#xA;--   atomic&#xA;-- Found Protobuf: /usr/lib/x86_64-linux-gnu/libprotobuf.so  &#xA;-- Boost version: 1.58.0&#xA;-- Looking for OGRE...&#xA;-- OGRE_PREFIX_WATCH changed.&#xA;-- Found PkgConfig: /usr/bin/pkg-config (found version &quot;0.29.1&quot;) &#xA;-- Checking for module 'OGRE'&#xA;--   Found OGRE, version 1.9.0&#xA;-- Found Ogre Ghadamon (1.9.0)&#xA;-- Found OGRE: optimized;/usr/lib/x86_64-linux-gnu/libOgreMain.so;debug;/usr/lib/x86_64-linux-gnu/libOgreMain.so&#xA;-- Looking for OGRE_Paging...&#xA;-- Found OGRE_Paging: optimized;/usr/lib/x86_64-linux-gnu/libOgrePaging.so;debug;/usr/lib/x86_64-linux-gnu/libOgrePaging.so&#xA;-- Looking for OGRE_Terrain...&#xA;-- Found OGRE_Terrain: optimized;/usr/lib/x86_64-linux-gnu/libOgreTerrain.so;debug;/usr/lib/x86_64-linux-gnu/libOgreTerrain.so&#xA;-- Looking for OGRE_Property...&#xA;-- Found OGRE_Property: optimized;/usr/lib/x86_64-linux-gnu/libOgreProperty.so;debug;/usr/lib/x86_64-linux-gnu/libOgreProperty.so&#xA;-- Looking for OGRE_RTShaderSystem...&#xA;-- Found OGRE_RTShaderSystem: optimized;/usr/lib/x86_64-linux-gnu/libOgreRTShaderSystem.so;debug;/usr/lib/x86_64-linux-gnu/libOgreRTShaderSystem.so&#xA;-- Looking for OGRE_Volume...&#xA;-- Found OGRE_Volume: optimized;/usr/lib/x86_64-linux-gnu/libOgreVolume.so;debug;/usr/lib/x86_64-linux-gnu/libOgreVolume.so&#xA;-- Looking for OGRE_Overlay...&#xA;-- Found OGRE_Overlay: optimized;/usr/lib/x86_64-linux-gnu/libOgreOverlay.so;debug;/usr/lib/x86_64-linux-gnu/libOgreOverlay.so&#xA;CMake Warning at /opt/ros/kinetic/share/catkin/cmake/catkin_package.cmake:166 (message):&#xA;  catkin_package() DEPENDS on 'gazebo' but neither 'gazebo_INCLUDE_DIRS' nor&#xA;  'gazebo_LIBRARIES' is defined.&#xA;Call Stack (most recent call first):&#xA;  /opt/ros/kinetic/share/catkin/cmake/catkin_package.cmake:102 (_catkin_package)&#xA;  RoboND-Kinematics-Project/gazebo_grasp_plugin/CMakeLists.txt:32 (catkin_package)&#xA;&#xA;&#xA;-- +++ processing catkin package: 'kuka_arm'&#xA;-- ==&amp;gt; add_subdirectory(RoboND-Kinematics-Project/kuka_arm)&#xA;-- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy&#xA;-- kuka_arm: 0 messages, 1 services&#xA;-- +++ processing catkin package: 'kr210_claw_moveit'&#xA;-- ==&amp;gt; add_subdirectory(RoboND-Kinematics-Project/kr210_claw_moveit)&#xA;-- Configuring done&#xA;WARNING: Target &quot;trajectory_sampler&quot; requests linking to directory &quot;/opt/ros/kinetic/lib/roslib&quot;.  Targets may link only to libraries.  CMake is dropping the item.&#xA;-- Generating done&#xA;-- Build files have been written to: /home/abouseif/main/udacity/roboticsnd/robotics_term1/ROS/catkin_ws/build&#xA;####&#xA;#### Running command: &quot;make -j4 -l4&quot; in &quot;/home/abouseif/main/udacity/roboticsnd/robotics_term1/ROS/catkin_ws/build&quot;&#xA;####&#xA;Scanning dependencies of target trajectory_msgs_generate_messages_lisp&#xA;Scanning dependencies of target actionlib_msgs_generate_messages_lisp&#xA;Scanning dependencies of target trajectory_msgs_generate_messages_nodejs&#xA;Scanning dependencies of target trajectory_msgs_generate_messages_py&#xA;[  0%] Built target trajectory_msgs_generate_messages_nodejs&#xA;[  0%] Built target actionlib_msgs_generate_messages_lisp&#xA;[  0%] Built target trajectory_msgs_generate_messages_lisp&#xA;[  0%] Built target trajectory_msgs_generate_messages_py&#xA;Scanning dependencies of target trajectory_msgs_generate_messages_eus&#xA;Scanning dependencies of target gazebo_msgs_generate_messages_py&#xA;Scanning dependencies of target dynamic_reconfigure_gencfg&#xA;Scanning dependencies of target dynamic_reconfigure_generate_messages_py&#xA;[  0%] Built target trajectory_msgs_generate_messages_eus&#xA;[  0%] Built target dynamic_reconfigure_generate_messages_py&#xA;[  0%] Built target gazebo_msgs_generate_messages_py&#xA;[  0%] Built target dynamic_reconfigure_gencfg&#xA;Scanning dependencies of target dynamic_reconfigure_generate_messages_cpp&#xA;Scanning dependencies of target dynamic_reconfigure_generate_messages_eus&#xA;Scanning dependencies of target dynamic_reconfigure_generate_messages_lisp&#xA;Scanning dependencies of target tf2_msgs_generate_messages_nodejs&#xA;[  0%] Built target dynamic_reconfigure_generate_messages_cpp&#xA;[  0%] Built target dynamic_reconfigure_generate_messages_eus&#xA;[  0%] Built target dynamic_reconfigure_generate_messages_lisp&#xA;[  0%] Built target tf2_msgs_generate_messages_nodejs&#xA;Scanning dependencies of target tf2_msgs_generate_messages_lisp&#xA;Scanning dependencies of target tf2_msgs_generate_messages_eus&#xA;Scanning dependencies of target tf2_msgs_generate_messages_cpp&#xA;Scanning dependencies of target dynamic_reconfigure_generate_messages_nodejs&#xA;[  0%] Built target tf2_msgs_generate_messages_lisp&#xA;[  0%] Built target tf2_msgs_generate_messages_eus&#xA;[  0%] Built target tf2_msgs_generate_messages_cpp&#xA;[  0%] Built target dynamic_reconfigure_generate_messages_nodejs&#xA;Scanning dependencies of target std_srvs_generate_messages_cpp&#xA;Scanning dependencies of target _catkin_empty_exported_target&#xA;Scanning dependencies of target roscpp_generate_messages_nodejs&#xA;Scanning dependencies of target tf_generate_messages_eus&#xA;[  0%] Built target std_srvs_generate_messages_cpp&#xA;[  0%] Built target _catkin_empty_exported_target&#xA;[  0%] Built target roscpp_generate_messages_nodejs&#xA;[  0%] Built target tf_generate_messages_eus&#xA;Scanning dependencies of target geometry_msgs_generate_messages_nodejs&#xA;Scanning dependencies of target std_msgs_generate_messages_lisp&#xA;Scanning dependencies of target roscpp_generate_messages_lisp&#xA;[  0%] Built target geometry_msgs_generate_messages_nodejs&#xA;Scanning dependencies of target geometry_msgs_generate_messages_lisp&#xA;[  0%] Built target std_msgs_generate_messages_lisp&#xA;[  0%] Built target roscpp_generate_messages_lisp&#xA;Scanning dependencies of target std_srvs_generate_messages_lisp&#xA;Scanning dependencies of target geometry_msgs_generate_messages_eus&#xA;[  0%] Built target geometry_msgs_generate_messages_lisp&#xA;Scanning dependencies of target roscpp_generate_messages_cpp&#xA;[  0%] Built target std_srvs_generate_messages_lisp&#xA;[  0%] Built target geometry_msgs_generate_messages_eus&#xA;Scanning dependencies of target actionlib_msgs_generate_messages_py&#xA;Scanning dependencies of target std_msgs_generate_messages_py&#xA;[  0%] Built target roscpp_generate_messages_cpp&#xA;Scanning dependencies of target gazebo_msgs_generate_messages_nodejs&#xA;[  0%] Built target actionlib_msgs_generate_messages_py&#xA;[  0%] Built target std_msgs_generate_messages_py&#xA;Scanning dependencies of target gazebo_msgs_generate_messages_cpp&#xA;[  0%] Built target gazebo_msgs_generate_messages_nodejs&#xA;Scanning dependencies of target std_msgs_generate_messages_nodejs&#xA;Scanning dependencies of target geometry_msgs_generate_messages_py&#xA;[  0%] Built target gazebo_msgs_generate_messages_cpp&#xA;Scanning dependencies of target trajectory_msgs_generate_messages_cpp&#xA;[  0%] Built target std_msgs_generate_messages_nodejs&#xA;[  0%] Built target geometry_msgs_generate_messages_py&#xA;Scanning dependencies of target geometry_msgs_generate_messages_cpp&#xA;[  0%] Built target trajectory_msgs_generate_messages_cpp&#xA;Scanning dependencies of target sensor_msgs_generate_messages_nodejs&#xA;Scanning dependencies of target rosgraph_msgs_generate_messages_cpp&#xA;[  0%] Built target geometry_msgs_generate_messages_cpp&#xA;Scanning dependencies of target rosgraph_msgs_generate_messages_nodejs&#xA;[  0%] Built target sensor_msgs_generate_messages_nodejs&#xA;[  0%] Built target rosgraph_msgs_generate_messages_cpp&#xA;[  0%] Built target rosgraph_msgs_generate_messages_nodejs&#xA;Scanning dependencies of target roscpp_generate_messages_eus&#xA;Scanning dependencies of target std_msgs_generate_messages_eus&#xA;Scanning dependencies of target std_srvs_generate_messages_py&#xA;Scanning dependencies of target gazebo_msgs_generate_messages_eus&#xA;[  0%] Built target roscpp_generate_messages_eus&#xA;[  0%] Built target std_msgs_generate_messages_eus&#xA;[  0%] Built target std_srvs_generate_messages_py&#xA;[  0%] Built target gazebo_msgs_generate_messages_eus&#xA;Scanning dependencies of target rosgraph_msgs_generate_messages_eus&#xA;Scanning dependencies of target std_srvs_generate_messages_eus&#xA;Scanning dependencies of target tf_generate_messages_cpp&#xA;Scanning dependencies of target actionlib_generate_messages_eus&#xA;[  0%] Built target rosgraph_msgs_generate_messages_eus&#xA;[  0%] Built target tf_generate_messages_cpp&#xA;[  0%] Built target actionlib_generate_messages_eus&#xA;[  0%] Built target std_srvs_generate_messages_eus&#xA;Scanning dependencies of target rosgraph_msgs_generate_messages_lisp&#xA;Scanning dependencies of target std_srvs_generate_messages_nodejs&#xA;Scanning dependencies of target gazebo_ros_gencfg&#xA;Scanning dependencies of target rosgraph_msgs_generate_messages_py&#xA;[  0%] Built target rosgraph_msgs_generate_messages_lisp&#xA;[  0%] Built target gazebo_ros_gencfg&#xA;[  0%] Built target rosgraph_msgs_generate_messages_py&#xA;[  0%] Built target std_srvs_generate_messages_nodejs&#xA;Scanning dependencies of target tf_generate_messages_lisp&#xA;Scanning dependencies of target roscpp_generate_messages_py&#xA;Scanning dependencies of target tf_generate_messages_py&#xA;Scanning dependencies of target tf_generate_messages_nodejs&#xA;[  0%] Built target tf_generate_messages_lisp&#xA;[  0%] Built target roscpp_generate_messages_py&#xA;[  0%] Built target tf_generate_messages_py&#xA;[  0%] Built target tf_generate_messages_nodejs&#xA;Scanning dependencies of target sensor_msgs_generate_messages_cpp&#xA;Scanning dependencies of target gazebo_msgs_generate_messages_lisp&#xA;Scanning dependencies of target sensor_msgs_generate_messages_lisp&#xA;Scanning dependencies of target sensor_msgs_generate_messages_py&#xA;[  0%] Built target sensor_msgs_generate_messages_cpp&#xA;[  0%] Built target gazebo_msgs_generate_messages_lisp&#xA;[  0%] Built target sensor_msgs_generate_messages_lisp&#xA;[  0%] Built target sensor_msgs_generate_messages_py&#xA;Scanning dependencies of target tf2_msgs_generate_messages_py&#xA;Scanning dependencies of target actionlib_generate_messages_cpp&#xA;Scanning dependencies of target std_msgs_generate_messages_cpp&#xA;Scanning dependencies of target actionlib_msgs_generate_messages_nodejs&#xA;[  0%] Built target actionlib_generate_messages_cpp&#xA;[  0%] Built target tf2_msgs_generate_messages_py&#xA;[  0%] Built target actionlib_msgs_generate_messages_nodejs&#xA;[  0%] Built target std_msgs_generate_messages_cpp&#xA;Scanning dependencies of target actionlib_msgs_generate_messages_cpp&#xA;Scanning dependencies of target sensor_msgs_generate_messages_eus&#xA;Scanning dependencies of target actionlib_generate_messages_py&#xA;Scanning dependencies of target actionlib_generate_messages_nodejs&#xA;[  0%] Built target sensor_msgs_generate_messages_eus&#xA;[  0%] Built target actionlib_msgs_generate_messages_cpp&#xA;[  0%] Built target actionlib_generate_messages_py&#xA;[  0%] Built target actionlib_generate_messages_nodejs&#xA;Scanning dependencies of target actionlib_generate_messages_lisp&#xA;Scanning dependencies of target actionlib_msgs_generate_messages_eus&#xA;Scanning dependencies of target graph_msgs_generate_messages_lisp&#xA;Scanning dependencies of target octomap_msgs_generate_messages_cpp&#xA;[  0%] Built target actionlib_generate_messages_lisp&#xA;[  0%] Built target actionlib_msgs_generate_messages_eus&#xA;[  0%] Built target octomap_msgs_generate_messages_cpp&#xA;[  0%] Built target graph_msgs_generate_messages_lisp&#xA;Scanning dependencies of target object_recognition_msgs_generate_messages_nodejs&#xA;Scanning dependencies of target object_recognition_msgs_generate_messages_lisp&#xA;Scanning dependencies of target octomap_msgs_generate_messages_py&#xA;Scanning dependencies of target moveit_msgs_generate_messages_lisp&#xA;[  0%] Built target object_recognition_msgs_generate_messages_nodejs&#xA;[  0%] Built target object_recognition_msgs_generate_messages_lisp&#xA;[  0%] Built target octomap_msgs_generate_messages_py&#xA;[  0%] Built target moveit_msgs_generate_messages_lisp&#xA;Scanning dependencies of target moveit_msgs_generate_messages_eus&#xA;Scanning dependencies of target object_recognition_msgs_generate_messages_eus&#xA;Scanning dependencies of target visualization_msgs_generate_messages_lisp&#xA;Scanning dependencies of target moveit_msgs_generate_messages_cpp&#xA;[  0%] Built target object_recognition_msgs_generate_messages_eus&#xA;[  0%] Built target visualization_msgs_generate_messages_lisp&#xA;[  0%] Built target moveit_msgs_generate_messages_eus&#xA;Scanning dependencies of target object_recognition_msgs_generate_messages_py&#xA;[  0%] Built target moveit_msgs_generate_messages_cpp&#xA;Scanning dependencies of target graph_msgs_generate_messages_cpp&#xA;Scanning dependencies of target _kuka_arm_generate_messages_check_deps_CalculateIK&#xA;[  0%] Built target object_recognition_msgs_generate_messages_py&#xA;Scanning dependencies of target shape_msgs_generate_messages_cpp&#xA;[  0%] Built target graph_msgs_generate_messages_cpp&#xA;Scanning dependencies of target graph_msgs_generate_messages_py&#xA;[  0%] Built target shape_msgs_generate_messages_cpp&#xA;Scanning dependencies of target moveit_msgs_generate_messages_nodejs&#xA;Scanning dependencies of target shape_msgs_generate_messages_py&#xA;[  0%] Built target moveit_msgs_generate_messages_nodejs&#xA;[  0%] Built target graph_msgs_generate_messages_py&#xA;[  0%] Built target shape_msgs_generate_messages_py&#xA;Scanning dependencies of target visualization_msgs_generate_messages_cpp&#xA;Scanning dependencies of target visualization_msgs_generate_messages_py&#xA;[  0%] Built target _kuka_arm_generate_messages_check_deps_CalculateIK&#xA;[  0%] Built target visualization_msgs_generate_messages_cpp&#xA;Scanning dependencies of target visualization_msgs_generate_messages_eus&#xA;[  0%] Built target visualization_msgs_generate_messages_py&#xA;Scanning dependencies of target object_recognition_msgs_generate_messages_cpp&#xA;Scanning dependencies of target visualization_msgs_generate_messages_nodejs&#xA;[  0%] Built target visualization_msgs_generate_messages_eus&#xA;Scanning dependencies of target octomap_msgs_generate_messages_eus&#xA;[  0%] Built target object_recognition_msgs_generate_messages_cpp&#xA;[  0%] Built target visualization_msgs_generate_messages_nodejs&#xA;[  0%] Built target octomap_msgs_generate_messages_eus&#xA;Scanning dependencies of target moveit_msgs_generate_messages_py&#xA;Scanning dependencies of target octomap_msgs_generate_messages_lisp&#xA;Scanning dependencies of target graph_msgs_generate_messages_eus&#xA;Scanning dependencies of target shape_msgs_generate_messages_lisp&#xA;[  0%] Built target moveit_msgs_generate_messages_py&#xA;[  0%] Built target octomap_msgs_generate_messages_lisp&#xA;[  0%] Built target graph_msgs_generate_messages_eus&#xA;Scanning dependencies of target kuka_arm_generate_messages_py&#xA;[  0%] Built target shape_msgs_generate_messages_lisp&#xA;Scanning dependencies of target shape_msgs_generate_messages_eus&#xA;[  8%] Generating Python code from SRV kuka_arm/CalculateIK&#xA;Scanning dependencies of target octomap_msgs_generate_messages_nodejs&#xA;Scanning dependencies of target kuka_arm_generate_messages_eus&#xA;[  8%] Built target shape_msgs_generate_messages_eus&#xA;[ 16%] Built target octomap_msgs_generate_messages_nodejs&#xA;[ 16%] Generating EusLisp code from kuka_arm/CalculateIK.srv&#xA;Scanning dependencies of target moveit_ros_planning_gencfg&#xA;[ 25%] Generating EusLisp manifest code for kuka_arm&#xA;[ 25%] Built target moveit_ros_planning_gencfg&#xA;Scanning dependencies of target graph_msgs_generate_messages_nodejs&#xA;[ 25%] Built target graph_msgs_generate_messages_nodejs&#xA;Scanning dependencies of target moveit_ros_manipulation_gencfg&#xA;[ 25%] Built target moveit_ros_manipulation_gencfg&#xA;Scanning dependencies of target kuka_arm_generate_messages_cpp&#xA;[ 33%] Generating C++ code from kuka_arm/CalculateIK.srv&#xA;Scanning dependencies of target kuka_arm_generate_messages_nodejs&#xA;[ 41%] Generating Javascript code from kuka_arm/CalculateIK.srv&#xA;[ 50%] Generating Python srv __init__.py for kuka_arm&#xA;[ 50%] Built target kuka_arm_generate_messages_nodejs&#xA;Scanning dependencies of target shape_msgs_generate_messages_nodejs&#xA;[ 50%] Built target shape_msgs_generate_messages_nodejs&#xA;Scanning dependencies of target gazebo_grasp_fix&#xA;[ 50%] Built target kuka_arm_generate_messages_py&#xA;Scanning dependencies of target kuka_arm_generate_messages_lisp&#xA;[ 58%] Generating Lisp code from kuka_arm/CalculateIK.srv&#xA;[ 58%] Built target kuka_arm_generate_messages_cpp&#xA;[ 58%] Built target kuka_arm_generate_messages_lisp&#xA;[ 75%] Building CXX object RoboND-Kinematics-Project/gazebo_grasp_plugin/CMakeFiles/gazebo_grasp_fix.dir/src/GazeboGraspFix.cpp.o&#xA;[ 75%] Building CXX object RoboND-Kinematics-Project/gazebo_grasp_plugin/CMakeFiles/gazebo_grasp_fix.dir/src/GazeboGraspGripper.cpp.o&#xA;[ 75%] Built target kuka_arm_generate_messages_eus&#xA;Scanning dependencies of target kuka_arm_generate_messages&#xA;Scanning dependencies of target trajectory_sampler&#xA;[ 75%] Built target kuka_arm_generate_messages&#xA;[ 83%] Building CXX object RoboND-Kinematics-Project/kuka_arm/CMakeFiles/trajectory_sampler.dir/src/trajectory_sampler.cpp.o&#xA;/home/abouseif/main/udacity/roboticsnd/robotics_term1/ROS/catkin_ws/src/RoboND-Kinematics-Project/kuka_arm/src/trajectory_sampler.cpp: In constructor ‘TrajectorySampler::TrajectorySampler(ros::NodeHandle)’:&#xA;/home/abouseif/main/udacity/roboticsnd/robotics_term1/ROS/catkin_ws/src/RoboND-Kinematics-Project/kuka_arm/src/trajectory_sampler.cpp:180:43: error: cannot convert ‘moveit::planning_interface::MoveItErrorCode’ to ‘bool’ in initialization&#xA;     bool success = move_group.plan(my_plan);&#xA;                                           ^&#xA;/home/abouseif/main/udacity/roboticsnd/robotics_term1/ROS/catkin_ws/src/RoboND-Kinematics-Project/kuka_arm/src/trajectory_sampler.cpp:224:15: error: cannot convert ‘moveit::planning_interface::MoveItErrorCode’ to ‘bool’ in assignment&#xA;       success = move_group.execute(my_plan);&#xA;               ^&#xA;/home/abouseif/main/udacity/roboticsnd/robotics_term1/ROS/catkin_ws/src/RoboND-Kinematics-Project/kuka_arm/src/trajectory_sampler.cpp:291:39: error: cannot convert ‘moveit::planning_interface::MoveItErrorCode’ to ‘bool’ in initialization&#xA;         bool worked = move_group.move();&#xA;                                       ^&#xA;/home/abouseif/main/udacity/roboticsnd/robotics_term1/ROS/catkin_ws/src/RoboND-Kinematics-Project/kuka_arm/src/trajectory_sampler.cpp:313:13: error: cannot convert ‘moveit::planning_interface::MoveItErrorCode’ to ‘bool’ in assignment&#xA;     success = move_group.move();&#xA;             ^&#xA;/home/abouseif/main/udacity/roboticsnd/robotics_term1/ROS/catkin_ws/src/RoboND-Kinematics-Project/kuka_arm/src/trajectory_sampler.cpp:339:13: error: cannot convert ‘moveit::planning_interface::MoveItErrorCode’ to ‘bool’ in assignment&#xA;     success = move_group.move();&#xA;             ^&#xA;/home/abouseif/main/udacity/roboticsnd/robotics_term1/ROS/catkin_ws/src/RoboND-Kinematics-Project/kuka_arm/src/trajectory_sampler.cpp:351:13: error: cannot convert ‘moveit::planning_interface::MoveItErrorCode’ to ‘bool’ in assignment&#xA;     success = move_group.plan(my_plan);&#xA;             ^&#xA;/home/abouseif/main/udacity/roboticsnd/robotics_term1/ROS/catkin_ws/src/RoboND-Kinematics-Project/kuka_arm/src/trajectory_sampler.cpp:375:15: error: cannot convert ‘moveit::planning_interface::MoveItErrorCode’ to ‘bool’ in assignment&#xA;       success = move_group.execute(my_plan);&#xA;               ^&#xA;/home/abouseif/main/udacity/roboticsnd/robotics_term1/ROS/catkin_ws/src/RoboND-Kinematics-Project/kuka_arm/src/trajectory_sampler.cpp:452:39: error: cannot convert ‘moveit::planning_interface::MoveItErrorCode’ to ‘bool’ in initialization&#xA;         bool worked = move_group.move();&#xA;                                       ^&#xA;/home/abouseif/main/udacity/roboticsnd/robotics_term1/ROS/catkin_ws/src/RoboND-Kinematics-Project/kuka_arm/src/trajectory_sampler.cpp:497:13: error: cannot convert ‘moveit::planning_interface::MoveItErrorCode’ to ‘bool’ in assignment&#xA;     success = move_group.move();&#xA;             ^&#xA;/home/abouseif/main/udacity/roboticsnd/robotics_term1/ROS/catkin_ws/src/RoboND-Kinematics-Project/kuka_arm/src/trajectory_sampler.cpp: In member function ‘bool TrajectorySampler::OperateGripper(const bool&amp;amp;)’:&#xA;/home/abouseif/main/udacity/roboticsnd/robotics_term1/ROS/catkin_ws/src/RoboND-Kinematics-Project/kuka_arm/src/trajectory_sampler.cpp:543:33: error: cannot convert ‘moveit::planning_interface::MoveItErrorCode’ to ‘bool’ in initialization&#xA;   bool success = eef_group.move();&#xA;                                 ^&#xA;RoboND-Kinematics-Project/kuka_arm/CMakeFiles/trajectory_sampler.dir/build.make:62: recipe for target 'RoboND-Kinematics-Project/kuka_arm/CMakeFiles/trajectory_sampler.dir/src/trajectory_sampler.cpp.o' failed&#xA;make[2]: *** [RoboND-Kinematics-Project/kuka_arm/CMakeFiles/trajectory_sampler.dir/src/trajectory_sampler.cpp.o] Error 1&#xA;CMakeFiles/Makefile2:3178: recipe for target 'RoboND-Kinematics-Project/kuka_arm/CMakeFiles/trajectory_sampler.dir/all' failed&#xA;make[1]: *** [RoboND-Kinematics-Project/kuka_arm/CMakeFiles/trajectory_sampler.dir/all] Error 2&#xA;make[1]: *** Waiting for unfinished jobs....&#xA;[ 91%] Linking CXX shared library /home/abouseif/main/udacity/roboticsnd/robotics_term1/ROS/catkin_ws/devel/lib/libgazebo_grasp_fix.so&#xA;[ 91%] Built target gazebo_grasp_fix&#xA;Makefile:138: recipe for target 'all' failed&#xA;make: *** [all] Error 2&#xA;Invoking &quot;make -j4 -l4&quot; failed&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="18741" LastActivityDate="2020-12-28T11:00:58.153" Title="catkin_make unable to build and throws &quot;Makefile:138: recipe for target 'all' failed make: *** [all] Error 2 Invoking &quot;make -j4 -l4&quot; failed&quot;" Tags="&lt;ros&gt;&lt;linux&gt;" AnswerCount="4" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="14803" PostTypeId="2" ParentId="1051" CreationDate="2017-12-15T19:34:37.163" Score="0" Body="&lt;p&gt;Roll, pitch and yaw and they could be understood by following images&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://sky-aerotech.blogspot.com.tr/2016/06/adverse-yaw-roll-causes-yaw-and-yaw.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Explanation 1&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.spigotmc.org/threads/armor-stand-staying-to-the-right-of-a-player.157798/page-2&quot; rel=&quot;nofollow noreferrer&quot;&gt;Explanation 2&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/team401/Vision-Tutorials/wiki/Yaw-and-Pitch&quot; rel=&quot;nofollow noreferrer&quot;&gt;Explanation 3&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19066" LastActivityDate="2017-12-15T19:34:37.163" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14804" PostTypeId="2" ParentId="14633" CreationDate="2017-12-16T18:53:19.220" Score="3" Body="&lt;p&gt;iRobot actually offers a robot geared toward developers/hackers, and is fairly affordable at $199: &lt;a href=&quot;http://store.irobot.com/default/create-programmable-programmable-robot-irobot-create-2/RC65099.html?cgid=us&amp;amp;_ga=2.47072295.1402319966.1513450326-1687721061.1509919043&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://store.irobot.com/default/create-programmable-programmable-robot-irobot-create-2/RC65099.html?cgid=us&amp;amp;_ga=2.47072295.1402319966.1513450326-1687721061.1509919043&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="19071" LastActivityDate="2017-12-16T18:53:19.220" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14806" PostTypeId="1" AcceptedAnswerId="14811" CreationDate="2017-12-17T18:26:50.440" Score="5" ViewCount="210" Body="&lt;p&gt;The problem i am facing is to try and calculate the x and y position of a robot with dead reckoning.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Reading from the encoders and getting proper rotations of the wheels of my robot works. The robot has 3 wheels, where 2 of the 3 can be controlled like in this picture:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/cUVUe.jpg&quot; alt=&quot;robot&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Calculating the distance from these wheel rotations and from those distances the heading of the robot is tested and works properly. Here is the code for the heading:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void MotorHandler::UpdateHeading(Position&amp;amp; currentPosition, double leftMotorDistance, double rightMotorDistance)&#xA;{&#xA;   currentPosition.heading = (double)((int)(((rightMotorDistance - leftMotorDistance) / (2 * PI * AXLE_LENGTH)) * FULL_ROTATION_DEGREES) % 360);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Where axle_length is the length between both wheels and full_rotation_degree is 360.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But after this, when i try to calculate the x and y of the robot at any given moment i get weird results. Here is the code for calculating the x and y:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void MotorHandler::CalculateCurrentPosition(Position&amp;amp; currentPosition)&#xA;{&#xA;double leftMotorDistance = (motors[0]-&amp;gt;GetRotation()/FULL_ROTATION_PULSES) * WHEEL_CIRCUMFERENCE;&#xA;double rightMotorDistance = (motors[1]-&amp;gt;GetRotation()/FULL_ROTATION_PULSES) * WHEEL_CIRCUMFERENCE;&#xA;&#xA;double headingToRadians = (currentPosition.heading * PI) / 180;&#xA;&#xA;if (fabs(leftMotorDistance - rightMotorDistance) &amp;lt; 1.0e-6)&#xA;{&#xA;    currentPosition.X = leftMotorDistance * cos(headingToRadians);&#xA;    currentPosition.Y = rightMotorDistance * sin(headingToRadians);&#xA;}&#xA;else&#xA;{&#xA;    double wd = (rightMotorDistance - leftMotorDistance) / AXLE_LENGTH;&#xA;    double expr = (AXLE_LENGTH * (rightMotorDistance + leftMotorDistance)) / (2 * (rightMotorDistance - leftMotorDistance));&#xA;&#xA;    currentPosition.X = expr * sin(wd + headingToRadians) - expr * sin(headingToRadians);&#xA;    currentPosition.Y = -expr * cos(wd + headingToRadians) + expr *  cos(headingToRadians);&#xA;    UpdateHeading(currentPosition, leftMotorDistance, rightMotorDistance);&#xA;}&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Where the starting x, y and heading are 0. As said, calculating the heading of the robot works properly, which means that the distances of the wheels also are calculated correctly and works properly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Links used:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.cs.princeton.edu/courses/archive/fall11/cos495/COS495-Lecture5-Odometry.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.cs.princeton.edu/courses/archive/fall11/cos495/COS495-Lecture5-Odometry.pdf&lt;/a&gt; &#xA;&lt;a href=&quot;http://rossum.sourceforge.net/papers/DiffSteer/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://rossum.sourceforge.net/papers/DiffSteer/&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&quot;https://robotics.stackexchange.com/questions/1653/calculate-position-of-differential-drive-robot&quot;&gt;Calculate position of differential drive robot&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ty!&lt;/p&gt;&#xA;" OwnerUserId="19079" LastEditorUserId="17029" LastEditDate="2017-12-17T18:37:13.750" LastActivityDate="2017-12-18T19:09:30.617" Title="Robot positioning problem" Tags="&lt;wheeled-robot&gt;&lt;c++&gt;&lt;precise-positioning&gt;&lt;dead-reckoning&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14807" PostTypeId="1" CreationDate="2017-12-18T01:28:42.970" Score="1" ViewCount="165" Body="&lt;p&gt;&lt;strong&gt;Introduction:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have modeled my 5-DOF robot arm in a simulation environment to test trajectories for my physical model. I have export the joint variables from the simulation as a .csv file. Then imported this file into the code and the values are written to the servo motors in an infinite while loop. There are 400 values for a 10 second motion. The trajectory that is followed by the robot can be found here: &#xA;&lt;a href=&quot;https://www.youtube.com/watch?v=vDA3vEIyznc&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=vDA3vEIyznc&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The Problem:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I compile the code the arm follows the desired trajectory but it vibrates while doing so. My guess is that 400 values for 10 seconds is less than the resolution of the motor that it can handle. But it can also be the backlash of the motors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Additional Information:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have designed the power circuitry of the servomotors using TI's PTN78020W adjustable switching regulator. The input to the regulators are supplied by a computer power supply. The regulator circuitry is shown below.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/d8H8s.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/d8H8s.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The entire system is shown by the visual below.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/n2Pyz.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/n2Pyz.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The Request:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need suggestions on what causes the mentioned vibration and how to solve it. I can provide more information for troubleshooting on request.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;APPENDIX&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;MATLAB Code:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;clear all&#xA;clc&#xA;&#xA;myArray = linspace(0,180,404)/180;&#xA;&#xA;servoarray = csvread('C:\Users\Canberk  Gurel\Desktop\Robo1.csv',2,9);&#xA;servoarray = transpose(servoarray/180);&#xA;&#xA;%Create an arduino object&#xA;a = arduino('com4', 'Mega2560');&#xA;&#xA;% s = servo(a, 'D3');&#xA;s1 = servo(a, 'D9', 'MinPulseDuration', 700*10^-6, 'MaxPulseDuration', 2300*10^-6);&#xA;s2 = servo(a, 'D10', 'MinPulseDuration', 700*10^-6, 'MaxPulseDuration', 2300*10^-6);&#xA;s3 = servo(a, 'D11', 'MinPulseDuration', 700*10^-6, 'MaxPulseDuration', 2300*10^-6);&#xA;s4 = servo(a, 'D6', 'MinPulseDuration', 700*10^-6, 'MaxPulseDuration', 2300*10^-6);&#xA;s5 = servo(a, 'D3', 'MinPulseDuration', 700*10^-6, 'MaxPulseDuration', 2300*10^-6);&#xA;s6 = servo(a, 'D5', 'MinPulseDuration', 1*10^-3, 'MaxPulseDuration', 2*10^-3);&#xA;&#xA;while true&#xA;   for i = 1:1:403&#xA;      writePosition(s1, servoarray(1,i));&#xA;      writePosition(s2, servoarray(2,i));&#xA;      writePosition(s3, servoarray(3,i));&#xA;      writePosition(s4, servoarray(4,i));&#xA;      writePosition(s5, servoarray(5,i));&#xA;      writePosition(s6, myArray(i));&#xA;&#xA;      current_pos = readPosition(s1);&#xA;      current_pos = current_pos*180;&#xA;      fprintf('Current motor position is %d degrees\n', current_pos);&#xA;      %pause(0.1);&#xA;   end&#xA;&#xA;   for i = 403:-1:1&#xA;      writePosition(s1, servoarray(1,i));&#xA;      writePosition(s2, servoarray(2,i));&#xA;      writePosition(s3, servoarray(3,i));&#xA;      writePosition(s4, servoarray(4,i));&#xA;      writePosition(s5, servoarray(5,i));&#xA;      writePosition(s6, myArray(i));&#xA;&#xA;      current_pos = readPosition(s1);&#xA;      current_pos = current_pos*180;&#xA;      fprintf('Current motor position is %d degrees\n', current_pos);&#xA;      %pause(0.1);&#xA;    end&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Datasheet of the Servo Motors:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/1G84M.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1G84M.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Additional Visuals&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/9VtJn.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9VtJn.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18352" LastEditorUserId="18352" LastEditDate="2017-12-20T19:33:41.463" LastActivityDate="2017-12-20T19:33:41.463" Title="My robot arm vibrates during operation. Why?" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;motion&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14808" PostTypeId="2" ParentId="14801" CreationDate="2017-12-18T02:15:51.247" Score="1" Body="&lt;p&gt;Met similar problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Changed &#xA;    &lt;code&gt;bool success = move_group.move()&lt;/code&gt;&#xA;to&#xA;    &lt;code&gt;bool success = move_group.move() == moveit::planning_interface::MoveItErrorCode::SUCCESS&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;s&gt;Perhaps the update is messing with the code.&lt;/s&gt; &lt;a href=&quot;https://robotics.stackexchange.com/a/14949/19080&quot;&gt;https://robotics.stackexchange.com/a/14949/19080&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19080" LastEditorUserId="19080" LastEditDate="2018-02-09T23:41:28.907" LastActivityDate="2018-02-09T23:41:28.907" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14810" PostTypeId="2" ParentId="14752" CreationDate="2017-12-18T13:15:35.280" Score="1" Body="&lt;p&gt;An answer to Question 2:&#xA;Yes, you can refine each pose individually. PNP algorithm needs 3D-2D correspondences. Since your 3D points are known, if their corresponding pixel positions in one particular image are known, then the camera pose for that image can be solved by PNP. It is used by the researchers of this paper: &lt;a href=&quot;https://www.graphics.rwth-aachen.de/publication/0315/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.graphics.rwth-aachen.de/publication/0315/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The way to find the correspondence in your case in a computer vision problem. You can compute 2D image feature descriptors while forming the 3D map and assigning these features to the 3D points. Let's call them $F_1$. Compute descriptors $F_2$ for any new image, whose pose you need to compute. Match these descriptors and then you have correspondences.  &lt;/p&gt;&#xA;" OwnerUserId="18674" LastActivityDate="2017-12-18T13:15:35.280" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14811" PostTypeId="2" ParentId="14806" CreationDate="2017-12-18T19:09:30.617" Score="1" Body="&lt;p&gt;This is another aspect of a longer answer I wrote &lt;a href=&quot;https://robotics.stackexchange.com/a/14791/9720&quot;&gt;here&lt;/a&gt;. Briefly restated, your problem is that a wheeled robot like this is &lt;em&gt;nonholonomic&lt;/em&gt;, which means you can just use absolute encoder counts and get a valid result for position and heading. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You have &lt;strong&gt;two&lt;/strong&gt; axes of control: a left wheel and a right wheel; and you have &lt;strong&gt;three&lt;/strong&gt; degrees of freedom: left/right translation, forward/backward translation, and rotation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'll restate the example given at the other answer. Consider:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Moving forward 10 meters and turning 180 degrees, &lt;strong&gt;=OR=&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;Turning 180 degrees and moving forward 10 meters. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;How do these scenarios work in your code? It looks like your heading is probably calculated correctly, but your position is based solely on the &lt;strong&gt;current&lt;/strong&gt; heading. In both cases above, the robot ends after having turned 180 degrees. In the second case, your code should give correct answers, because there is no translation before you rotate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first case, however, would see your code correctly track the movement as it goes forward 10 meters but then, as the robot rotates, your code uses the current &lt;em&gt;heading&lt;/em&gt; to index the &lt;em&gt;distance traveled&lt;/em&gt;, and so it would appear as if your robot were quickly scribing a circle of radius 10 meters. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Again, as stated in the other answer, the solution is to do as @50k4 mentioned and accumuluate current position as a &lt;em&gt;differential quantity&lt;/em&gt; for each sample, and not just look at overall counts. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-12-18T19:09:30.617" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14813" PostTypeId="2" ParentId="14703" CreationDate="2017-12-18T21:06:15.767" Score="2" Body="&lt;p&gt;The first robot is RS-100 and it won this year's all-Japan fine following competition. &lt;strong&gt;The fifth wheel is an encoder.&lt;/strong&gt; The robots are allowed to remember the track - this is specific to this competition as the turns are marked by white markers outside of the line. Look at the winning run of the robot and you will see that it speeds up and down in fast runs (i.e. after the first run) &lt;a href=&quot;https://www.youtube.com/watch?v=960e5Q_PhWg&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=960e5Q_PhWg&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additional trivia: This year was the first in a long time that an Ackermann steering robot won (what is considered MCU-Rally style, a very popular competition in Japan). It looks like this is a good design for competitions in which there are no 90 degree turns. It beat the previous year's winner, Cartis, which is interesting in its own because it uses 4 propellers for downforce &lt;a href=&quot;http://anikinonikki.cocolog-nifty.com/.shared/image.html?/photos/uncategorized/2016/11/18/cartis45d.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://anikinonikki.cocolog-nifty.com/.shared/image.html?/photos/uncategorized/2016/11/18/cartis45d.jpg&lt;/a&gt; They banned using ducted fans (EDFs) for downforce in 2016.&lt;/p&gt;&#xA;" OwnerUserId="13505" LastActivityDate="2017-12-18T21:06:15.767" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14814" PostTypeId="1" CreationDate="2017-12-18T22:12:30.700" Score="2" ViewCount="114" Body="&lt;p&gt;I've been working on a hexapod project based around an Arduino and I'm running into issues with the servos. I've built a frame, connected the Adafruit servo driver to the Arduino and can successfully control individual servos. However, when I try to connect/control 4 or more servos they begin to jitter/whine and oftentimes become unresponsive and turn to their max (or minimum) rotation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've also tried setting the servos up in a &quot;standing position&quot; and placing it on the ground; again the servos complain as it slowly lowers to the floor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've seen a few posts that &lt;a href=&quot;https://learn.adafruit.com/16-channel-pwm-servo-driver/hooking-it-up#adding-a-capacitor-to-the-thru-hole-capacitor-slot&quot; rel=&quot;nofollow noreferrer&quot;&gt;mention connecting a capacitor&lt;/a&gt; to the servo controller, but can't find any info on what capacitor to use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone offer any pointers? At this point I'm not sure what my issue is (I'm a software engineer, no real electronics experience) so any insight will be greatly appreciated!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've also seen mention of other servo controllers: &lt;a href=&quot;https://www.pololu.com/product/1354&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mini Maestro 18-Channel USB Servo Controller&lt;/a&gt; and &lt;a href=&quot;https://www.robotshop.com/uk/lynxmotion-ssc-32u-usb-servo-controller.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Lynxmotion SSC-32U USB Servo Controller&lt;/a&gt;. Would either of these be better suited to this type of project, and perhaps solve the servo control issues?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Components used:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.amazon.co.uk/Arduino-Mega-2560-R3-Microcontroller/dp/B0046AMGW0/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Arduino Mega&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;2x &lt;a href=&quot;https://www.adafruit.com/product/815&quot; rel=&quot;nofollow noreferrer&quot;&gt;Adafruit 16-channel PWM servo driver&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;18x &lt;a href=&quot;https://www.amazon.co.uk/gp/product/B0728D4YG8/&quot; rel=&quot;nofollow noreferrer&quot;&gt;MG996R Servo motors&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;4x AA batteries in battery holder&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.robotshop.com/uk/lynxmotion-hexapod-body-hbk-03-blk.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Hexapod body&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.robotshop.com/uk/lynxmotion-phoenix-leg-pair-no-servos-brushed.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Hexapod legs&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;My setup:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/JKybP.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JKybP.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19049" LastActivityDate="2018-10-31T13:00:43.140" Title="Looking for pointers on hexapod project" Tags="&lt;arduino&gt;&lt;hexapod&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14816" PostTypeId="2" ParentId="11946" CreationDate="2017-12-19T16:22:46.277" Score="0" Body="&lt;p&gt;A PID coefficients can be estimated from data using a simple gradient descent approach. MATLAB codes &lt;a href=&quot;https://github.com/ManashRaja/learnPID&quot; rel=&quot;nofollow noreferrer&quot;&gt;link&lt;/a&gt; and detailed text &lt;a href=&quot;http://manashpratim.in/wp-content/uploads/2016/11/learnPID_report.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;link&lt;/a&gt;, that I wrote can be found in the given links.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can perform this learning iteratively to keep updating the PID coefficients.&lt;/p&gt;&#xA;" OwnerUserId="18674" LastActivityDate="2017-12-19T16:22:46.277" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14817" PostTypeId="1" AcceptedAnswerId="14818" CreationDate="2017-12-20T01:32:47.537" Score="-1" ViewCount="462" Body="&lt;p&gt;i'm a senior, i really desperate to find answers here. i am building a robotic arm with bunch of low-cost sensors , motors and other actuators. i'm using PI 3 as my Microcontroller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need helping to build the software by giving answers to my questions:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Is it efficient to us ROS with low-cost projects? if not what are my other &#xA;alternatives?&lt;/li&gt;&#xA;&lt;li&gt;also is it possible to use another microcontrollers (Arduino's or PI's) in &#xA;between so everyone of them can deal with a specific collection of sensors &#xA;and actuators ?&lt;/li&gt;&#xA;&lt;li&gt;is it possible to control stepper motors through Arduino/PI using ROS?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;This would be the easiest way to describe my project:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Master (PI 3) ---&gt; Receiving results from 4 microcontrollers ---&gt; each one controls a joint (encoders, sensors, steppermotors)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm open to suggestions from any kind i'm still in the start i have 4-6 months period to finish it, i don't know if i'm asking in the right place or not but i don't know much about blogs.&lt;/p&gt;&#xA;" OwnerUserId="19097" LastActivityDate="2018-01-05T10:45:14.450" Title="Using ROS to control a CMM (Coordinate Measuring machine)" Tags="&lt;arduino&gt;&lt;robotic-arm&gt;&lt;ros&gt;&lt;raspberry-pi&gt;&lt;python&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14818" PostTypeId="2" ParentId="14817" CreationDate="2017-12-20T04:51:12.937" Score="1" Body="&lt;p&gt;Here are my responses to your questions:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;In brief, using ROS does not depend on the project cost, rather the scale of the project. It would help you tremendously in the following cases:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Modular Application&lt;/strong&gt;: Robotic applications might need various features. For eg (in your case): &lt;code&gt;Sensor input&lt;/code&gt; (Grab data from the sensors, process it and make it available to other modules). &lt;code&gt;Frame Conversion&lt;/code&gt; (Convert sensor reading to angles and estimate transforms for arm state estimation). &lt;code&gt;Controls&lt;/code&gt; (Command the actuators to achieve specific arm state). &lt;code&gt;Calibration&lt;/code&gt; (Making sense of arm sensor data).&lt;br&gt;&#xA;Thus, as you develop each of the above features one after the other, you can simply keep creating individual ROS nodes/packages for each feature. They will be run independently with ROS managing communications between the nodes. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Communication&lt;/strong&gt;: &lt;em&gt;Simple example&lt;/em&gt;: Suppose you fix a camera on your arm. Only one application can read the camera driver to grab the images. Thus, if you need multiple applications to work with the images, you will need to create a way to make the image available through inter-process communication. In ROS, you have the scalability to simply publish the image in a topic and all others application that needs it will subscribe.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Community Support&lt;/strong&gt;: ROS has a wide community that has developed many tools that might be useful. For eg: &lt;a href=&quot;http://wiki.ros.org/rviz&quot; rel=&quot;nofollow noreferrer&quot;&gt;Rviz&lt;/a&gt; is a great tool that you can use to visualize your arm and its environment. You may use &lt;a href=&quot;http://moveit.ros.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;moveit&lt;/a&gt;, a well developed opensource ROS package to control your arm actuators.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Gazebo Simulation&lt;/strong&gt;: While Gazebo and ROS are independent. They go very well together. You can develop a model of your arm in Gazebo and develop your arm features in simulation (&lt;em&gt;Quicker hardware iterations and software development&lt;/em&gt;). Your ROS application would only deal with the ROS topics, thus, it need not know whether it is working with the simulated arm or the physical arm. (&lt;a href=&quot;https://github.com/jmichiels/arm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Example&lt;/a&gt;) &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Yes, it can be done. ROS comes to rescue again. Treat a central PI as ROS master, connect all other PIs to the same network over Wi-Fi/Ethernet and all PIs will be able to share ROS topics among themselves. Follow &lt;a href=&quot;http://wiki.ros.org/ROS/Tutorials/MultipleMachines&quot; rel=&quot;nofollow noreferrer&quot;&gt;this wiki&lt;/a&gt; on ROS to know how ROS can be setup in a network between multiple machines. You can connect the arduinos to PIs using USB and use &lt;a href=&quot;http://wiki.ros.org/rosserial&quot; rel=&quot;nofollow noreferrer&quot;&gt;rosserial&lt;/a&gt; package to output arduino sensor data as ROS topics (&lt;a href=&quot;http://wiki.ros.org/rosserial&quot; rel=&quot;nofollow noreferrer&quot;&gt;Tutorial&lt;/a&gt;).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Yes, low-level hardware commands can be generated both by PI (IO pins) and Arduino. However, it would be more convenient to use Arduino. Connect &lt;code&gt;stepper motor&lt;/code&gt; ---wire----&gt; &lt;code&gt;Arduino&lt;/code&gt; ---usb---&gt; &lt;code&gt;PI&lt;/code&gt;. Use &lt;code&gt;rosserial&lt;/code&gt; as mentioned in (2) above.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I would suggest using a more powerful central computer than PI 3. Odroid XU4 is a good option. PI 3 takes a lot of time in compiling ROS applications in C++ thus slowing down the development process. One way to circumvent this issue is to use interpreted language like python rather than C++. ROS has support for both python and C++. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can follow &lt;a href=&quot;http://moveit.ros.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;moveit&lt;/a&gt; ROS package to learn more about controlling Robot arm using ROS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope it helps.&lt;/p&gt;&#xA;" OwnerUserId="18674" LastEditorUserId="18674" LastEditDate="2017-12-20T05:03:52.767" LastActivityDate="2017-12-20T05:03:52.767" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14823" PostTypeId="1" AcceptedAnswerId="15008" CreationDate="2017-12-20T17:00:58.003" Score="0" ViewCount="171" Body="&lt;p&gt;I am trying to use the motion sequences in the dataset to create trajectories for VR systems. A major portion of the ground truth data in almost all sequences has NaN values. Is there any other source with the correct values?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or is any other good monocular visual odometry dataset with various motion sequences included available?&lt;/p&gt;&#xA;" OwnerUserId="19107" LastActivityDate="2018-01-18T16:19:53.903" Title="TU Munich Monocular Visual Odometry Dataset has NaN values in the ground truth data." Tags="&lt;computer-vision&gt;&lt;visual-odometry&gt;&lt;monocular&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14824" PostTypeId="2" ParentId="14709" CreationDate="2017-12-21T08:23:45.333" Score="0" Body="&lt;p&gt;You first have to be clear about the core RL terms, to understand myopic and non-myopic policies:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Policy&lt;/strong&gt;: Suppose each cell in the grid below is a state that the RL agent can be in. From each state, it can transition to another state. Now, the arrows that are given, shows a particular transition it would take from each state to go to another. This depicts a policy that answers (&lt;em&gt;Which direction should I go from any current state?&lt;/em&gt;)&lt;br&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/zkVOD.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zkVOD.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Reward&lt;/strong&gt;: For every transition or a sequence of transitions, the agent gets a Reward for it. It can be positive or negative.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Now, in Reinforcement learning, an agent tries to pick a policy that gives it the maximum reward in the future. The agent might just look 1 step ahead in the future or 1000 (&lt;em&gt;an arbitrary number&lt;/em&gt;) steps. If it looks 1 step ahead and based on that picks a policy that gives it a maximum reward, the policy would be myopic. On the other hand, if the agent looks 1000 steps ahead in future and then decides on the best policy, the policy would be termed non-myopic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In RL, most generally, the number of steps to look ahead in future is determined by the discounting factor $\gamma \in [0,1]$, when the total reward $G_t$ is formulated as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$G_t = R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} ...  = \sum_{k=0}^{\infty}\gamma^k R_{t+k+1}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can see, if $\gamma = 0$, the total reward $G_t$ will contain reward of only one time-step ahead in future $R_{t+1}$ (&lt;strong&gt;myopic&lt;/strong&gt;). If $\gamma = 1$, rewards till $\infty$ are considered (&lt;strong&gt;non-myopic&lt;/strong&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can follow Dr. David Silver's lecture on RL to learn more: &lt;a href=&quot;https://www.youtube.com/watch?v=2pWv7GOvuf0&amp;amp;list=PLzuuYNsE1EZAXYR4FJ75jcJseBmo4KQ9-&quot; rel=&quot;nofollow noreferrer&quot;&gt;Link&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18674" LastActivityDate="2017-12-21T08:23:45.333" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14825" PostTypeId="2" ParentId="9413" CreationDate="2017-12-21T08:40:49.077" Score="0" Body="&lt;p&gt;You can follow this GitHub repository to find RRT, RRT* and RRT with dynamic vehicle constraints (Dubin's dynamics).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/ManashRaja/rrt-star-dubins-sim&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/ManashRaja/rrt-star-dubins-sim&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It has a simple codebase to learn the implementation in C++ and modify as per your requirement.&lt;/p&gt;&#xA;" OwnerUserId="18674" LastActivityDate="2017-12-21T08:40:49.077" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14826" PostTypeId="1" AcceptedAnswerId="14828" CreationDate="2017-12-21T09:39:36.737" Score="0" ViewCount="581" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Lnr8m.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Lnr8m.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;Can anyone name a good source for a general approach (cookbook-like) for the inverse kinematics regarding a 5-DOF?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.66.5101&amp;amp;rep=rep1&amp;amp;type=pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;The paper by De Xu et al.&lt;/a&gt; is aiming for a general approach, but it doesn't work for my code. Maybe you could check that one as well?!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am new to MATLAB, the code is no masterpiece:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Parameter used:&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;a=[0 82 93 55 95 0];&lt;/p&gt;&#xA;&#xA;&lt;p&gt;d=[47 0 0 0 0 10];&lt;/p&gt;&#xA;&#xA;&lt;p&gt;alpha=[90 0 0 0 0 0];&lt;/p&gt;&#xA;&#xA;&lt;p&gt;theta=[15 30 40 -90 -15 0];&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Result for Theta 1-5:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;5,080    &lt;/li&gt;&#xA;&lt;li&gt;38,029&lt;/li&gt;&#xA;&lt;li&gt;75,947  &lt;/li&gt;&#xA;&lt;li&gt;-90,247&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;20,719&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: &#xA;The results 1-5 mentioned above are the one the code gave me. But those are wrong, because:&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Position of TCP (taken form the Forward Kinematics):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;px= -5.7853&lt;/p&gt;&#xA;&#xA;&lt;p&gt;py=  5.7606&lt;/p&gt;&#xA;&#xA;&lt;p&gt;pz=  25.908&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Position of TCP (using the calculating values for Theta 1-5):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;px=  47.0&lt;/p&gt;&#xA;&#xA;&lt;p&gt;py= -151.0&lt;/p&gt;&#xA;&#xA;&lt;p&gt;pz=  43.9430&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All values in degrees.&#xA;I am using 5 servos by Dynamixel ax-12a.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;a=[0 82 93 55 95 0];&#xA;d=[47 0 0 0 0 10];&#xA;alpha=[90 0 0 0 0 0];&#xA;theta=[15 30 -90 0 45 0];&#xA;rad=57.295779513082;&#xA;&#xA;T01=[cos(theta(1)),-sin(theta(1))*cos(alpha(1)),sin(theta(1))*sin(alpha(1)),a(1)*cos(theta(1));&#xA;    sin(theta(1)),cos(theta(1))*cos(alpha(1)),-cos(theta(1))*sin(alpha(1)),a(1)*sin(theta(1));&#xA;    0,sin(alpha(1)),cos(alpha(1)),d(1);&#xA;    0,0,0,1];&#xA;T12=[cos(theta(2)),-sin(theta(2))*cos(alpha(2)),sin(theta(2))*sin(alpha(2)),a(2)*cos(theta(2));&#xA;    sin(theta(2)),cos(theta(2))*cos(alpha(2)),-cos(theta(2))*sin(alpha(2)),a(2)*sin(theta(2));&#xA;    0,sin(alpha(2)),cos(alpha(2)),d(2);&#xA;    0,0,0,1];&#xA;T23=[cos(theta(3)),-sin(theta(3))*cos(alpha(3)),sin(theta(3))*sin(alpha(3)),a(3)*cos(theta(3));&#xA;    sin(theta(3)),cos(theta(3))*cos(alpha(3)),-cos(theta(3))*sin(alpha(3)),a(3)*sin(theta(3));&#xA;    0,sin(alpha(3)),cos(alpha(3)),d(3);&#xA;    0,0,0,1];&#xA;T34=[cos(theta(4)),-sin(theta(4))*cos(alpha(4)),sin(theta(4))*sin(alpha(4)),a(4)*cos(theta(4));&#xA;    sin(theta(4)),cos(theta(4))*cos(alpha(4)),-cos(theta(4))*sin(alpha(4)),a(4)*sin(theta(4));&#xA;    0,sin(alpha(4)),cos(alpha(4)),d(4);&#xA;    0,0,0,1];&#xA;&#xA;T45=[cos(theta(5)),-sin(theta(5))*cos(alpha(5)),sin(theta(5))*sin(alpha(5)),a(5)*cos(theta(5));&#xA;    sin(theta(5)),cos(theta(5))*cos(alpha(5)),-cos(theta(5))*sin(alpha(5)),a(5)*sin(theta(5));&#xA;    0,sin(alpha(5)),cos(alpha(5)),d(5);&#xA;    0,0,0,1];&#xA;&#xA;T56=[cos(theta(6)),-sin(theta(6))*cos(alpha(6)),sin(theta(6))*sin(alpha(6)),a(6)*cos(theta(6));&#xA;    sin(theta(6)),cos(theta(6))*cos(alpha(6)),-cos(theta(6))*sin(alpha(6)),a(6)*sin(theta(6));&#xA;    0,sin(alpha(6)),cos(alpha(6)),d(6);&#xA;    0,0,0,1];&#xA;&#xA;T06=T01*T12*T23*T34*T45*T56;        %transformation matrix&#xA;inv_T01=inv(T01);&#xA;inv_T12=inv(T12);&#xA;inv_T23=inv(T23);&#xA;inv_T56=inv(T56);&#xA;T05=T06*inv_T56;&#xA;%needed for theta4 and theta5&#xA;Inverse=inv_T23*inv_T12*inv_T01*T06*inv_T56;&#xA;T_4_5=T34*T45;&#xA;&#xA;N=T06(1:3,1);&#xA;nx=N(1,1);&#xA;ny=N(2,1);&#xA;nz=N(3,1);&#xA;O=T06(1:3,2);&#xA;ox=O(1,1);&#xA;oy=O(2,1);&#xA;oz=O(3,1);&#xA;A=T06(1:3,3);&#xA;ax=A(1,1);&#xA;ay=A(2,1);&#xA;az=A(3,1);&#xA;P=T06(1:3,4); %comapre to (17) in paper&#xA;px=P(1,1);&#xA;py=P(2,1);&#xA;pz=P(3,1);&#xA;px_2=T05(1,4);&#xA;py_2=T05(2,4);&#xA;&#xA;&#xA;%theta1&#xA;help1=px_2;               %not sure&#xA;help2=py_2;                 %not sure&#xA;help3=(px_2*(-1));         %not sure&#xA;help4=(py_2*(-1));         %not sure&#xA;&#xA;theta11=atan2(help2,help1);&#xA;theta12=atan2(help4,help3);     %using this&#xA;theta1=atan2(py,px);            %most common way&#xA;&#xA;%Theta2&#xA;B1=(az*d(6)-pz+d(1));&#xA;B2=(sqrt((-ax*d(6)+px).^2+(-ay*d(6)+py).^2))-a(1); %taking only positive value, alternative: [1 -1]*sqrt&#xA;B3=((B1.^2+B2.^2+a(2).^2-d(4).^2));&#xA;%auxiliary angle&#xA;beta=(atan2(B2,B1));&#xA;root=((a(2)*a(2))*sqrt(B1.^2+B2.^2));&#xA;&#xA;theta21=(asin(B3/root)-beta);%works best&#xA;theta22=pi-theta21;&#xA;&#xA;%theta3&#xA;&#xA;theta3=atan2(B1-a(2)*sin(theta21),B2-a(2)*cos(theta21))-theta21; %using theta21 is close to determined angle BUT still far away from acceptable&#xA;&#xA;%theta4&#xA;%auxiliary&#xA;OX=(ox*cos(theta1).*sin(theta21+theta3));&#xA;OY=(oy*sin(theta1).*sin(theta21+theta3));&#xA;OZ=(oz*cos(theta21+theta3));&#xA;theta4=atan2(-OX-OY-OZ,ox.*sin(theta1)*oy.*cos(theta1));%as in the case&#xA;&#xA;%theta5&#xA;%auxiliary&#xA;NX=(nx*cos(theta1).*cos(theta21+theta3));&#xA;NY=(ny*sin(theta1).*cos(theta21+theta3));&#xA;NZ=(nz*sin(theta21+theta3));&#xA;AX=(ax*cos(theta1).*cos(theta21+theta3));&#xA;AY=(ay*sin(theta1).*sin(theta21+theta3));&#xA;&#xA;theta5=atan2(NX+NY-NZ,-AX+AY-az*sin(theta21+theta3));%as in the case&#xA;&#xA;theta12*rad&#xA;theta21*rad&#xA;theta3*rad&#xA;theta4*rad&#xA;theta5*rad&#xA;&#xA;enter code here&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="19023" LastEditorUserId="19023" LastEditDate="2017-12-21T15:00:22.587" LastActivityDate="2017-12-21T15:28:36.437" Title="Inverse Kinematics 5DOF - general approach - Wrong solution MATLAB" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;inverse-kinematics&gt;&lt;matlab&gt;&lt;dynamixel&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14828" PostTypeId="2" ParentId="14826" CreationDate="2017-12-21T15:28:36.437" Score="0" Body="&lt;p&gt;I never saw a conversion between degrees in radians in your code, so that would be the number one problem to fix. All of your transform matrices are using &lt;code&gt;sin&lt;/code&gt; and &lt;code&gt;cos&lt;/code&gt; terms, which &lt;strong&gt;only accept values in radians&lt;/strong&gt;, and using them with values in degrees. I'm a bit busy at the moment but I'll go over the code in more detail later today. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-12-21T15:28:36.437" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14829" PostTypeId="1" AcceptedAnswerId="14833" CreationDate="2017-12-21T17:16:28.987" Score="0" ViewCount="332" Body="&lt;p&gt;I want to determine Jacobian determinant of spherical wrist structure, but my Jacobian is 6x3, so it is not square. How can I get it?&lt;/p&gt;&#xA;" OwnerUserId="19112" LastEditorUserId="9720" LastEditDate="2017-12-21T20:32:56.993" LastActivityDate="2017-12-27T14:19:09.807" Title="Jacobian determinant of three degree of freedom robot" Tags="&lt;jacobian&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14831" PostTypeId="1" AcceptedAnswerId="14838" CreationDate="2017-12-21T19:46:19.093" Score="3" ViewCount="1141" Body="&lt;p&gt;I have two 2-D point clouds obtained from LIDAR (Light Detection And Ranging) scans at two different poses (positions and orientations) inside a circular structure, where a small object (vertical cylindrical column) is placed at a fixed location. My objective here is to match as closely as possible the two point clouds and find the planar transformation (translation and rotation) to do that. One useful technique—I believe—would be the point set registration using the ICP (Iterative Closest Point) algorithm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The issue now is that the algorithm fails to match perfectly the two point clouds, specifically in terms of rotation because it didn't complete matching the data points related to the object inside the circle. Therefore, my question is: would this be a limitation of the ICP algorithm, or a problem in implementing it (which I doubt it since I double-checked with Matlab ICP embedded function)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there other methods/algorithms that can solve this problem?&lt;/p&gt;&#xA;" OwnerUserId="19046" LastEditorUserId="37" LastEditDate="2018-11-27T15:04:58.783" LastActivityDate="2018-11-27T15:04:58.783" Title="Iterative Closest Point for 2-D LIDAR Data" Tags="&lt;mobile-robot&gt;&lt;localization&gt;&lt;lidar&gt;&lt;point-cloud&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="14832" PostTypeId="1" CreationDate="2017-12-21T20:29:24.097" Score="2" ViewCount="103" Body="&lt;p&gt;I am trying to derive the inverse depth equation used in monocular SLAM algorithms. Specifically the equation 8 of the ORB SLAM &lt;a href=&quot;http://webdiis.unizar.es/~raulmur/MurTardosRSS15.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;paper&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am very close, except I do not understand where the (u_j-c) term comes form. I get the same formulae with only the c (principal point) component. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am thinking it is because u_j in this case is indexed from the start of the epipolar line instead of the image (0,0). Is this correct?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Best,&#xA;Marc&lt;/p&gt;&#xA;" OwnerUserId="19114" LastActivityDate="2017-12-21T20:29:24.097" Title="Monocular SLAM depth reconstruction" Tags="&lt;slam&gt;&lt;computer-vision&gt;&lt;3d-reconstruction&gt;" AnswerCount="0" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14833" PostTypeId="2" ParentId="14829" CreationDate="2017-12-21T20:32:03.597" Score="1" Body="&lt;p&gt;If $J(q)$ isn't square, you're looking for some alternate metric to take its place. You can take the determinant of $J(q)J^T(q)$. per &lt;a href=&quot;https://studywolf.wordpress.com/2013/10/10/robot-control-part-6-handling-singularities/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this tutorial&lt;/a&gt; or any number of other &lt;a href=&quot;https://groups.csail.mit.edu/drl/journal_club/papers/033005/buss-2004.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;pseudo-inverse methods&lt;/a&gt; (from Introduction to Inverse Kinematics with Jacobian Transpose, Pseudoinverse and Damped Least Squares methods, by Samuel Buss).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;:EDIT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As highlighted by @SteveO and @PetchPuttichai in the comments, it would appear that the $J(q)J^T(q)$ only when $J(q)$ has full row rank. In any other case, use $J^T(q)J(q)$. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2017-12-27T14:19:09.807" LastActivityDate="2017-12-27T14:19:09.807" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="14834" PostTypeId="2" ParentId="14831" CreationDate="2017-12-21T20:38:01.523" Score="0" Body="&lt;p&gt;Iterative closest point is &lt;em&gt;iterative&lt;/em&gt;. You have to seed a starting match, and it will find a &lt;strong&gt;local&lt;/strong&gt; minima from there. If you're getting poor results, try feeding a better seed guess or try increasing the size of the steps the algorithm is allowed to take.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Increasing the step size could be dangerous, though, because the results may not converge. It's not clear what the &lt;em&gt;application&lt;/em&gt; of this is; I don't know if you're just doing this to do it or if you're trying to get some kind of an automatic alignment procedure to reconcile two lidar poses (&quot;known good&quot; and unknown, maybe?) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would start by feeding it a better guess before looking to monkey with any of the ICP step sizes. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-12-21T20:38:01.523" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="14836" PostTypeId="2" ParentId="14513" CreationDate="2017-12-22T01:03:52.950" Score="0" Body="&lt;p&gt;The way to relate Accel measurements to orientation is through Gravity. When there is no user motion, only force experienced by the accel is Gravity. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your case, I think the interpretation must be:&#xA;How does my measurement of Gravity match up to predicted Gravity?&lt;/p&gt;&#xA;" OwnerUserId="19116" LastActivityDate="2017-12-22T01:03:52.950" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14837" PostTypeId="2" ParentId="14829" CreationDate="2017-12-22T08:09:22.887" Score="0" Body="&lt;p&gt;In order to answer your question it would be interesting why you need the determinandt of the Jacobian... maybe there is another way for your problem. &lt;/p&gt;&#xA;" OwnerUserId="18341" LastActivityDate="2017-12-22T08:09:22.887" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14838" PostTypeId="2" ParentId="14831" CreationDate="2017-12-22T09:25:56.517" Score="3" Body="&lt;p&gt;You can use 3D feature descriptors here to register two point clouds. I've personally used two most recent ones that performed well enough for a similar application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Following are the references to the papers:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A novel binary shape context for 3D local surface description &lt;a href=&quot;http://www.sciencedirect.com/science/article/pii/S0924271617300199&quot; rel=&quot;nofollow noreferrer&quot;&gt;link&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;TOLDI: An effective and robust approach for 3D local shape description &lt;a href=&quot;https://www.researchgate.net/publication/310815969_TOLDI_An_effective_and_robust_approach_for_3D_local_shape_description&quot; rel=&quot;nofollow noreferrer&quot;&gt;link&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The approach is: a) Detect good keypoints from the point clouds -&gt; b) Compute descriptors for them -&gt; c) Match descriptors -&gt; d) Use RANSAC to find inlier matches and compute rigid body transformation between the point clouds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the paper (1) above, methods for (a) and (b) are given. I found them to be robust enough in an application I used which is similar to yours. For (c), I used Hamming distance based descriptor matching algorithm &lt;code&gt;BFMatcher&lt;/code&gt; of OpenCV (&lt;a href=&quot;https://docs.opencv.org/2.4.13.2/modules/features2d/doc/common_interfaces_of_descriptor_matchers.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;link&lt;/a&gt;). For (d) I developed my own RANSAC implementation and used &lt;code&gt;estimateRigidTransformation&lt;/code&gt; method in pcl library (&lt;a href=&quot;http://docs.pointclouds.org/trunk/classpcl_1_1registration_1_1_transformation_estimation_s_v_d.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;link&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can follow an example implementation of point cloud registration at pcl library in this &lt;a href=&quot;http://pointclouds.org/documentation/tutorials/pairwise_incremental_registration.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;link&lt;/a&gt;, that uses different feature descriptors. It did not work for me, but you can give it a try.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you need help in implementing paper (1) above, you may follow my codes in this &lt;a href=&quot;https://bitbucket.org/castacks/aicmr_hololens/src/c0ca7db90d8cb7917fe153849f8a319e1dcaad13/Server/src/BSC.cpp?at=master&amp;amp;fileviewer=file-view-default&quot; rel=&quot;nofollow noreferrer&quot;&gt;link&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18674" LastActivityDate="2017-12-22T09:25:56.517" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14839" PostTypeId="1" CreationDate="2017-12-22T10:27:53.770" Score="1" ViewCount="85" Body="&lt;p&gt;I am trying to build a big size robot (150CM height) like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/bHa2a.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/bHa2a.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I don't have mechanical engineering knowledge for that. Also it's only a prototype to show how the robot will act(it's more relies on image/voice recognizing and processing). So I am looking for an open source project to build a robot that it's easy and cheap to build.(I mean something like instructable projects)&lt;/p&gt;&#xA;" OwnerUserId="17822" LastActivityDate="2018-01-10T23:43:21.573" Title="Are there any big size open source robot project(servant like robot maybe)" Tags="&lt;mobile-robot&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14840" PostTypeId="1" AcceptedAnswerId="14859" CreationDate="2017-12-22T10:41:27.410" Score="9" ViewCount="679" Body="&lt;p&gt;I'm currently reading on &lt;a href=&quot;https://www.google.be/search?q=self%20balancing%20robot&amp;amp;safe=off&amp;amp;source=lnms&amp;amp;tbm=isch&amp;amp;sa=X&amp;amp;ved=0ahUKEwjvxM6Gqp3YAhUBJlAKHflrBhEQ_AUICigB&amp;amp;biw=1920&amp;amp;bih=949&quot; rel=&quot;noreferrer&quot;&gt;self-balancing robots&lt;/a&gt; that use an IMU (gyroscopes + accelerometers) to estimate their current tilt angle. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most documents that I have found say the same things:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;You can't just take the arc-tangent of the accelerometers data to find the gravity direction because they are affected by &quot;inertial noises&quot;.&lt;/li&gt;&#xA;&lt;li&gt;You can't just integrate the output of the gyroscope over time because it drifts.&lt;/li&gt;&#xA;&lt;li&gt;There are two generally accepted solutions to merge those data:&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A &lt;a href=&quot;http://blog.tkjelectronics.dk/2012/09/a-practical-approach-to-kalman-filter-and-how-to-implement-it&quot; rel=&quot;noreferrer&quot;&gt;Kalman filter estimating the current tilt along with the current gyroscope bias&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;A &lt;a href=&quot;http://ieeexplore.ieee.org/document/7755240/&quot; rel=&quot;noreferrer&quot;&gt;complimentary filter&lt;/a&gt; applying a low-pass filter on the accelerometer data (they can be trusted in the long term), and a high-pass filter on the gyroscope data (it can be trusted in the short term). &lt;/li&gt;&#xA;&lt;/ol&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;All sources that I have found seem to use the raw data from the accelerometers in those filters, disregarding the fact that, in a self-balancing robot, we can have a very good estimate of the &quot;inertial noise&quot; mentioned above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's my though&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's model our robot with an inverted pendulum with a moving fulcrum and use this poor drawing as a reference.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/QRtB5.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QRtB5.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The inertial forces felt by the accelerometers at C can be derived from (if I didn't make any mistake)&#xA;$$&#xA;\begin{pmatrix}&#xA;\ddot{c_r}&#xA;\\ &#xA;\ddot{c_\Theta}&#xA;\end{pmatrix}&#xA;=&#xA;\begin{pmatrix}&#xA;-\ddot{x}\sin(\Theta)-R\dot{\Theta}^2&#xA;\\ &#xA;-\ddot{x}\cos(\Theta)+R\ddot{\Theta}&#xA;\end{pmatrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming that &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Our robot is rolling without slipping&lt;/li&gt;&#xA;&lt;li&gt;We can measure x (either by using stepper motors or DC motors with encoders)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Then we can have a good estimate of all those variables:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;$\hat{\ddot{x}}_k$ : Finite differences over our current and previous measures of $x$&lt;/li&gt;&#xA;&lt;li&gt;$\hat{\dot{\Theta}}_k$ : The current gyroscope reading&lt;/li&gt;&#xA;&lt;li&gt;$\hat{\Theta}_k$ : Previous estimation of $\Theta$ plus the integration of $\hat{\dot{\Theta}}_k$ and $\hat{\dot{\Theta}}_{k-1}$ over one $\Delta t$&lt;/li&gt;&#xA;&lt;li&gt;$\hat{\ddot{\Theta}}_k$ : Finite differences over $\hat{\dot{\Theta}}_k$ and $\hat{\dot{\Theta}}_{k-1}$&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Once we have that, we can negate the effect of the inertial forces in the accelerometers, leaving only a much better measure of the gravity.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It probably still is a good idea to use this as the input of the usual Kalman filter as in 1. above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe we can even build a Kalman filter that could estimate all those variable at once? I'm going to try that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What do you think? Am I missing something here?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;I think self-balancing-robot could be a good tag, but I can't create it&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="19119" LastEditorUserId="19119" LastEditDate="2017-12-22T12:34:24.307" LastActivityDate="2017-12-25T21:03:48.750" Title="Accelerometers in a self-balancing robot, can't we do better?" Tags="&lt;accelerometer&gt;&lt;gyroscope&gt;&lt;balance&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14841" PostTypeId="2" ParentId="14840" CreationDate="2017-12-22T15:54:20.093" Score="1" Body="&lt;p&gt;While this isn't a complete answer to your question, I want to leave some of my thoughts. I think you missed:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Gravity itself, which points downward and is typically about 9.81 m/s² but might be different dependent on your location (you only measure 0 gravity when the robot is in free fall)&lt;/li&gt;&#xA;&lt;li&gt;Sensors are typically not aligned 100% to your x/y/z-axis (the chip is not totally horizontal on the PCB... the PCB isn't mounted totally horizontal/vertically into your robot and so on); you need to compensate for this&lt;/li&gt;&#xA;&lt;li&gt;Accelerometer-sensors have an offset and gain value, which you have to compensate. They are affected by e.g. temperature and manufacturing tolerances. There are online calibration algorithms for this; but you can put these unknown variables into a Kalman-filter, too.&lt;/li&gt;&#xA;&lt;li&gt;Gyroscopes have a drift, which is also dependent on temperature. It's not a constant but might change over time. This drift can be slightly compensated with the help of a magnetometer.&lt;/li&gt;&#xA;&lt;li&gt;Magnetometers aka Compass sensors in 3D can be used to compensate the drift of Gyroscopes. However, they are sometimes affected by electromagnetic fields (motors, magnets, steel in walls etc). So they can't be totally trusted.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;A Kalman-filter model is a good approach. The more knowlege about the motion model you put into the model, the better it will work. You also need to know (co-)variances of all variables... How sure you think measurements of each sensor are.&lt;/p&gt;&#xA;" OwnerUserId="19123" LastActivityDate="2017-12-22T15:54:20.093" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14843" PostTypeId="1" CreationDate="2017-12-22T21:31:48.003" Score="0" ViewCount="1339" Body="&lt;p&gt;I found this drawing on google photos:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://photos.app.goo.gl/YbvXJRP6GYynhDRe2&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dhV3G.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't understand why he used this part.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Is it for reduction?&lt;/li&gt;&#xA;&lt;li&gt;What is its equation?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="14287" LastEditorUserId="37" LastEditDate="2018-01-02T15:35:30.660" LastActivityDate="2018-01-02T23:19:55.760" Title="Scara robot design" Tags="&lt;robotic-arm&gt;&lt;motor&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14844" PostTypeId="1" CreationDate="2017-12-22T21:59:40.327" Score="1" ViewCount="957" Body="&lt;p&gt;I was successful in running a 28BYj-48 stepper motor with 4096 steps per revolution. I am happy with the result. But there is a free movement of the motor shaft itself - you can move the motor shaft slightly with your hand without making any steps. Feels lose, but event the brand new ones has that motion, so I am sure its manufactured like that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any way to reduce that unwanted free motion? I am trying to add a hand with the motor and now that small movement became quite a noticeable gap.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is my first question on robotics - so please be pardon any mistakes.&lt;/p&gt;&#xA;" OwnerUserId="19126" LastActivityDate="2018-01-26T23:45:33.843" Title="How to reduce the small free rotation/movement of a stepper motor shaft?" Tags="&lt;motor&gt;&lt;stepper-motor&gt;&lt;rotation&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14847" PostTypeId="1" CreationDate="2017-12-23T10:11:21.857" Score="3" ViewCount="861" Body="&lt;p&gt;I am trying to run &lt;code&gt;rosrun script forward.py&lt;/code&gt; but it gives me an error saying &lt;code&gt;[rospack] Error: package 'script' not found&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my bashrc I've added these lines:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;source /opt/ros/indigo/setup.bash&#xA;source /home/hassan/catkin_ws/devel/setup.bash&#xA;export ROS_PACKAGE_PATH=/home/home/catkin_ws:/opt/ros/indigo/share:/opt/ros/indigo/stacks&#xA;export ROS_WORKSPACE=/home/hassan/catkin_ws&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;What could be the reason?&#xA;I am following this video: &lt;a href=&quot;https://www.youtube.com/watch?v=zwTnY-ZqNcM&amp;amp;t=102s&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=zwTnY-ZqNcM&amp;amp;t=102s&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19130" LastActivityDate="2020-03-11T13:02:55.340" Title="rospack Error: package 'script' not found" Tags="&lt;ros&gt;&lt;gazebo&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14849" PostTypeId="1" CreationDate="2017-12-23T14:40:41.007" Score="1" ViewCount="219" Body="&lt;p&gt;I know what subsumption architecture is, and I'm sure I should have two different hardware modules (Arduinos) taking responsibility for low level computational tasks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now my problem is I have an two Arduinos and I want Arduino A to subsume or inhibit a signal from Arduino B . Does anyone have any idea how this is done? As I can wire Arduino A to send a signal to Arduino B but I'm unsure how to subsume or inhibit the signal? I want to use the Arduino Interrupt pin and functionality; instead of simply saying if the input A signal is &amp;lt; something, do something. As Modules should be activated in their own right, right?&lt;/p&gt;&#xA;" OwnerUserId="19132" LastActivityDate="2018-12-21T19:03:25.747" Title="How to develop subsumption architecture using two Arduinos?" Tags="&lt;arduino&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14850" PostTypeId="2" ParentId="14839" CreationDate="2017-12-24T20:56:57.050" Score="1" Body="&lt;p&gt;I think that your best bet is to start with an &lt;a href=&quot;http://inmoov.fr/build-yours/&quot; rel=&quot;nofollow noreferrer&quot;&gt;InMoov&lt;/a&gt; and to customize it to add a mobile base.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;InMoov is a 3D-printed, open source, life size robot created by Gael Langevin. It's pretty amazing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Good luck!&lt;/p&gt;&#xA;" OwnerUserId="17203" LastActivityDate="2017-12-24T20:56:57.050" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14851" PostTypeId="2" ParentId="14844" CreationDate="2017-12-24T21:54:22.383" Score="2" Body="&lt;p&gt;It's a geared stepper, which means that it's a stepper (64 steps, I gather) followed by a 64:1 (approximately) gearbox.  What you're seeing is almost certainly backlash in the gear train (see where I &amp;quot;suspect a poor mechanical joint...,  below).  Any gear motor, stepper or not, is going to have backlash.  Because there's a tradeoff between the precision of the gears and how much backlash you can get out of the assembly before the thing binds up, a cheap motor is going to have more.&lt;/p&gt;&#xA;&lt;p&gt;If you can preload the motor with a constant torque that only points in one direction, then you could reduce the backlash (although maybe not eliminate it, given the amount of gear reduction and the cheapness of the unit).  If you need more precision that that, then you're going to either need a direct-drive stepper (which, thinking about, is going to be hard to find with that many steps), or possibly a geared stepper with a much higher precision gearbox, or you're going to need something like a bazillion-pole brushed or brushless &amp;quot;regular&amp;quot; motor, position feedback, and a controller.&lt;/p&gt;&#xA;&lt;p&gt;(Former answer left in because it's valid for a direct drive stepper, if you find one with 4096 steps).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;How much motion are you seeing?  Just by the way that the magnetic circuit is designed, you should expect some motion within a step (in an unpowered motor it's not terribly inaccurate to think of the rotor as being connected to the frame through a spring, at least until you overcome the motor's holding torque).&lt;/p&gt;&#xA;&lt;p&gt;If there's more slop than that (which works out to less than 1/10th of a degree in your case!) then I'd suspect a poor mechanical joint between rotor and shaft, which is just &lt;em&gt;wrong&lt;/em&gt;.  Did the motor come from a reputable source?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="1411" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2017-12-25T20:52:55.017" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14852" PostTypeId="1" AcceptedAnswerId="14854" CreationDate="2017-12-25T05:23:35.343" Score="3" ViewCount="1992" Body="&lt;p&gt;Im in the process of getting into robotics. I have decent experience with symbolic AI and am wanting to start off using symbolic AI strategies to give a wheel, arduino based robot some &quot;intelligence&quot;. (later I hope to use neural networks, but baby steps). Anyways, I started researching various symbolic approaches, and I found the the A* algorithm is one that can be used, but this puzzled me. My experience with A* is that the problem needs to be fully observable for it to work, so I dont see how a robot could use it to solve a maze for example. Would the robot first need to randomly explore the maze, store all paths taken, then apply A* to find the optimal path? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks for the help&lt;/p&gt;&#xA;" OwnerUserId="19137" LastActivityDate="2017-12-25T13:24:56.137" Title="A* algorithm for Arduino robot path planning" Tags="&lt;arduino&gt;&lt;planning&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14853" PostTypeId="2" ParentId="14852" CreationDate="2017-12-25T12:53:44.077" Score="0" Body="&lt;p&gt;Well, if you want the optimal path to be found over the entire course, irrespective of the planner you use, you will require the map before hand.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although, the issues with A* are that it is meant for a Holonomic robot (or entity for the path is being planned) and also the one you have encountered, its ease of implementation makes it so popular for planning. There are quite a few other planning algorithms which circumvent these issues. Take a look at &lt;a href=&quot;https://en.wikipedia.org/wiki/Rapidly-exploring_random_tree&quot; rel=&quot;nofollow noreferrer&quot;&gt;RRT (Rapidly-exploring Random Tree)&lt;/a&gt; and other similar algorithms for that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you wish to use A* only, and do not have prior information about the entire course, may I suggest you try using locally optimal path to navigate by generating local goal points for the observable map at every certain instance of time.&lt;/p&gt;&#xA;" OwnerUserId="15453" LastActivityDate="2017-12-25T12:53:44.077" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14854" PostTypeId="2" ParentId="14852" CreationDate="2017-12-25T13:24:56.137" Score="1" Body="&lt;p&gt;You may find this example useful. I recently used A* for highway driving in traffic, driving at 50 mph and passing other cars.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/ericlavigne/CarND-Path-Planning&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/ericlavigne/CarND-Path-Planning&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The A* algorithm supports decision-making only in discrete problems. I discretized highway driving by only considering positions that are either in the middle of a lane or halfway between lanes and by only allowing changes in direction once per second.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even with incomplete information, you can still create a cost function based on the information that you do have. A* can be used for guiding the exploration process, such as by considering &quot;explore a new area&quot; as a good result in your cost function. For highway driving, I don't know what the other cars will do even one second later, but I model their likely behavior and use A* to plan a route several seconds out.&lt;/p&gt;&#xA;" OwnerUserId="18316" LastActivityDate="2017-12-25T13:24:56.137" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="14855" PostTypeId="1" AcceptedAnswerId="14858" CreationDate="2017-12-25T15:57:06.843" Score="-2" ViewCount="47" Body="&lt;p&gt;I plan to do some scientific research, after modeling and path planning for the robot, The algorithm outputs the Joint control torque(or Joint variable), and then i want to input this result to the robot Control platform to check my algorithm, as far as I know, most robot can only provide point-to-point tracking instructions(NOT torque\joint variable input API),any robot can supports torque or joint variable as the robot input(when i input joint variable or torque, robot can move)?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I program a 6 DOF robot using torque rather than joint positions as input?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have any questions or concerns, don't hesitate to let me know.&lt;/p&gt;&#xA;" OwnerUserId="19138" LastEditorUserId="18316" LastEditDate="2017-12-26T14:05:23.857" LastActivityDate="2017-12-26T14:05:23.857" Title="how do i select light-weight 6dof robot?" Tags="&lt;robotic-arm&gt;&lt;ros&gt;&lt;design&gt;&lt;industrial-robot&gt;&lt;platform&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14856" PostTypeId="2" ParentId="4415" CreationDate="2017-12-25T16:02:56.490" Score="0" Body="&lt;p&gt;Microsoft AirSim is a photorealistic simulator for drones. You'll find videos, instructions, and downloads on this page:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/Microsoft/AirSim#welcome-to-airsim&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/Microsoft/AirSim#welcome-to-airsim&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18316" LastActivityDate="2017-12-25T16:02:56.490" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14857" PostTypeId="2" ParentId="4415" CreationDate="2017-12-25T17:42:25.033" Score="0" Body="&lt;p&gt;With Flightgear, which is open source, you can define and fly custom aircraft and custom algorithms for handling its automatic flight controller. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Flightgear allows flying all around the world, and you could add / integrate sensor models into it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It also has quite a flexible API, to integrate to existing codes, models, and algorithms.&lt;/p&gt;&#xA;" OwnerUserId="9570" LastActivityDate="2017-12-25T17:42:25.033" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14858" PostTypeId="2" ParentId="14855" CreationDate="2017-12-25T18:32:53.540" Score="0" Body="&lt;p&gt;This article explains how to implement joint-torque control on top of position-controlled robots.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Implementing Torque Control with High-Ratio Gear Boxes and without Joint-Torque Sensors&#xA;&lt;a href=&quot;https://hal.archives-ouvertes.fr/hal-01136936/document&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://hal.archives-ouvertes.fr/hal-01136936/document&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Copied from another StackExchange question:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://robotics.stackexchange.com/a/7531/18316&quot;&gt;https://robotics.stackexchange.com/a/7531/18316&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18316" LastActivityDate="2017-12-25T18:32:53.540" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14859" PostTypeId="2" ParentId="14840" CreationDate="2017-12-25T21:03:48.750" Score="1" Body="&lt;p&gt;If you properly construct a Kalman filter with an 'x' input, then yes, it'll be better.  Notably, the inertial sensor cannot give you an absolute value for x in any case, because you're (essentially) trying to double-integrate an accelerometer signal into a position, and that is exquisitely sensitive to noise in the accelerometer output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some things you may wish to consider in your travels:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A full-blown Kalman filter is computationally intense, but a steady-state Kalman is basically a complimentary filter with rolloff frequencies selected by construction rather than b'guess and b'gosh.&lt;/li&gt;&#xA;&lt;li&gt;Speaking of b'guess and b'gosh, if you want a Kalman to work well (and, sometimes, at all) you need to very accurately account for &lt;em&gt;everything&lt;/em&gt; that goes into your variances.  Kalmans are notorious for not responding well to mismatches between your model and reality.  If you're willing to do the math, look into H-infinity and other robust state estimation techniques.&lt;/li&gt;&#xA;&lt;li&gt;If you do go down the H-infinity road, you can also find the steady-state H-infinity filter and get the same computational advantage (and, in fact, the actual filter structure in your embedded code will be the same; it'll just have different values in the coefficients).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="1411" LastActivityDate="2017-12-25T21:03:48.750" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14860" PostTypeId="2" ParentId="12469" CreationDate="2017-12-26T00:24:00.083" Score="0" Body="&lt;p&gt;If you had such information for at least two different times, that could be combined to determine the yaw and yaw rate. The &quot;point on the other vehicle&quot; information would need to be the same point on the vehicle for both times. (With such information about only one time, the best you could do is make a &quot;guess&quot; such as &quot;not moving&quot; or &quot;same yaw and yaw rate as me&quot;.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You would need to use the information about your own vehicle to convert the information about the other vehicle from relative to absolute coordinates. The change in the other vehicle's position would give you the yaw. The change in the point on the other vehicle, relative to the center of the other vehicle, would represent motion in a circle around that center: the yaw rate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BTW, since you are interested in determining yaw and yaw rate based on measurements of position, you may find this project useful as an example. I used radar and lidar measurements to estimate the position, yaw, and yaw rate of a vehicle. By combining multiple measurements, it was possible to estimate position more precisely than any of the individual measurements and to estimate yaw and yaw rate which were never directly measured.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/ericlavigne/CarND-Unscented-Kalman-Filter&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/ericlavigne/CarND-Unscented-Kalman-Filter&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18316" LastEditorUserId="18316" LastEditDate="2017-12-26T00:30:10.543" LastActivityDate="2017-12-26T00:30:10.543" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14861" PostTypeId="2" ParentId="14849" CreationDate="2017-12-26T00:39:46.003" Score="0" Body="&lt;p&gt;Here is an article (videos included) about how to navigate a maze using subsumption architecture and arduino.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.codingnaked.com/post/arduino-powered-robot-solves-a-maze-using-subsumption-architecture-in-c/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.codingnaked.com/post/arduino-powered-robot-solves-a-maze-using-subsumption-architecture-in-c/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18316" LastActivityDate="2017-12-26T00:39:46.003" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14862" PostTypeId="1" CreationDate="2017-12-26T10:19:06.803" Score="-1" ViewCount="538" Body="&lt;p&gt;I am using an STM32-L432KC microcontroller to read data from an I²C Device (Bno-055) via DMA.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On a microcontroller without DMA i would try to minimize the IO-Wait by only reading the necessary registers of the device and only reading them as often as necessary (for example the calibration status only needs to be read every second etc.).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But with DMA i am thinking about just reading the first 64 registers (that's where the information is stored) at once and store them in memory. So my library is reduced to a little bit of HAL code in the interrupt and only some defines for the values. Furthermore reading values from the sensor is nothing more than reading some values from RAM which reduces IO-Wait by a lot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming i have enough memory what are problems that occour with this solution? What are the advantages of the &quot;traditional&quot; approach as opposed to my approach?&lt;/p&gt;&#xA;" OwnerUserId="16181" LastActivityDate="2017-12-28T15:44:25.410" Title="I²C read multiple registers with DMA" Tags="&lt;i2c&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14863" PostTypeId="2" ParentId="12585" CreationDate="2017-12-26T19:28:57.247" Score="1" Body="&lt;p&gt;Checking for three is a subset of checking for many; so, I am going to consider the more general solution.  I will discuss the three point solution at the end.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, convert the polar coordinates to Cartesian Coordinates.&#xA;First, to make things simple, use your robot as the reference frame (make it the center of the universe).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That means, for each target calculate:&#xA;x=Distance&lt;em&gt;cos(Deg), y=Distance&lt;/em&gt;sin(Deg)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a Post on &lt;a href=&quot;https://stackoverflow.com/questions/20924085/python-conversion-between-coordinates&quot;&gt;Converting Coordinates in Python&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After you have all these calculate the slope and intercept of the line using linear regression; then, calculate R-squared (the &lt;a href=&quot;https://en.wikipedia.org/wiki/Coefficient_of_determination&quot; rel=&quot;nofollow noreferrer&quot;&gt;Coefficient of determination&lt;/a&gt;) to determine how well the measurements fit a line.  Note: Any measurement system is going to have errors; so, the points will likely never perfectly fit a line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the number is too high, try dropping out points the deviate furthest from the line.  Maybe you could group them together and if they have a low r-squared then you have found another wall.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am sure there are lots of Python regression libraries. Here is a reference I found on &lt;a href=&quot;https://stackoverflow.com/questions/893657/how-do-i-calculate-r-squared-using-python-and-numpy&quot;&gt;Calculating R-squared in Python&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are only going to use three points, you could likely simplify this by using the middle point as your reference and see if the slope to the other two point are exactly/nearly opposite.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are some other approaches for &lt;a href=&quot;https://math.stackexchange.com/questions/701862/how-to-find-if-the-points-fall-in-a-straight-line-or-not&quot;&gt;How to find if three points fall in a straight line or not&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="462" LastActivityDate="2017-12-26T19:28:57.247" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="14864" PostTypeId="2" ParentId="12480" CreationDate="2017-12-26T20:08:09.970" Score="1" Body="&lt;p&gt;You can simply add three joints to the kinematic chain. The 6 Dof of your arm are preceeded by two prismatic and one revolute joint representing the mobile base. The resulting 9 dof chain forms a redundant manipulator. Now it depends on how you define optimality as to which ik is derived. You can look up Orocos Kdl for starters. Their chain ik solver is  initialized with a random configuration. Simply repeat the process of calculating the ik until your cost yields an acceptable level. Its somewhat brute force but should be straight forward to implement.&lt;/p&gt;&#xA;" OwnerUserId="10374" LastActivityDate="2017-12-26T20:08:09.970" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14866" PostTypeId="1" AcceptedAnswerId="14867" CreationDate="2017-12-27T13:41:03.820" Score="2" ViewCount="1347" Body="&lt;p&gt;When I run &#xA;roslaunch turtlebot_gazebo turtlebot_world.launch&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am getting this error:-&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt; from defusedxml.xmlrpc import monkey_patch ImportError: No module&#xA;&amp;gt; named defusedxml.xmlrpc while processing&#xA;&amp;gt; /opt/ros/kinetic/share/turtlebot_gazebo/launch/includes/kobuki.launch.xml:&#xA;&amp;gt; Invalid tag: Cannot load command parameter [robot_description]:&#xA;&amp;gt; command [/opt/ros/kinetic/share/xacro/xacro.py&#xA;&amp;gt; '/opt/ros/kinetic/share/turtlebot_description/robots/kobuki_hexagons_asus_xtion_pro.urdf.xacro']&#xA;&amp;gt; returned with code [1].&#xA;&#xA;Param xml is param command=&quot;$(arg urdf_file)&quot; name=&quot;robot_description&quot;/&amp;gt;&#xA;Param xml is The traceback for the exception was written to the log file&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="11238" LastEditorUserId="11238" LastEditDate="2018-01-10T10:52:54.513" LastActivityDate="2018-01-10T11:34:52.773" Title="Error during turtlebot launch in ROS" Tags="&lt;ros&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14867" PostTypeId="2" ParentId="14866" CreationDate="2017-12-27T14:16:49.587" Score="2" Body="&lt;p&gt;Since It was related import module I solved using &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;pip install defusedxml &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="11238" LastEditorUserId="11238" LastEditDate="2018-01-10T11:34:52.773" LastActivityDate="2018-01-10T11:34:52.773" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14868" PostTypeId="2" ParentId="4364" CreationDate="2017-12-27T16:54:42.867" Score="0" Body="&lt;p&gt;There is no mistake here.&#xA;The scara robot has 2 vertical Z-axis in wich it rotates.&#xA;therefore There is no real translation in the Z-direction between j0 j1 and even j2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;that's why d1 and d2 are zero because there is no change of Z opposed to the previous joints.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you would fix that mistake, you could move j0 up so it coincides with j1 and j2.&#xA;and then add a j-1 and a new row at the top of the table for joint 0. then d0 is indeed needed. (distance between X-1 and X0 along Z.&lt;/p&gt;&#xA;" OwnerUserId="19145" LastActivityDate="2017-12-27T16:54:42.867" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14869" PostTypeId="1" CreationDate="2017-12-27T19:40:40.650" Score="1" ViewCount="58" Body="&lt;p&gt;I am using a raspberry pi to practice low level development with a differential drive robot; bare metal without an OS underneath.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've gotten to the point where I have a very small, &lt;a href=&quot;https://github.com/RazazRobotics/NewRepo&quot; rel=&quot;nofollow noreferrer&quot;&gt;single purpose kernel&lt;/a&gt; that drives a couple of DC motors, and reads an IR sensor over I2C with an Analog Digital Converter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have also started writing code for a PID controller: so far so good.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I use a bootloader over USB to UART to update the Pi with new versions of the kernel, and I also started looking at the &lt;a href=&quot;https://libcheck.github.io/check/doc/check_html/check_3.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Check&lt;/a&gt; unit test framework, so I can avoid too much trial and error &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, many of the online material about robotics use simulators (which makes great sense).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am familiar with Gazeebo, and the one from GA Tech as well, and this &lt;a href=&quot;https://www.smashingrobotics.com/most-advanced-and-used-robotics-simulation-software/&quot; rel=&quot;nofollow noreferrer&quot;&gt;lists&lt;/a&gt; a great number also &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However I am having trouble understanding how I can use my C code for bare metal on one of these simulators?&lt;/p&gt;&#xA;" OwnerUserId="17047" LastActivityDate="2017-12-29T13:42:13.113" Title="How can I run Tests/Simulations of Control and Motion Planning for a Bare Metal Robot?" Tags="&lt;control&gt;&lt;raspberry-pi&gt;&lt;simulator&gt;&lt;c&gt;&lt;differential-drive&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14871" PostTypeId="1" AcceptedAnswerId="14877" CreationDate="2017-12-28T14:16:22.407" Score="0" ViewCount="38" Body="&lt;p&gt;I have purchased &lt;a href=&quot;https://www.ebay.co.uk/itm/DC-3V-6V-Mini-Planetary-Gear-Reducer-Motor-Micro-Coreless-Motor-For-DIY-Robot/131780931000?ssPageName=STRK%3AMEBIDX%3AIT&amp;amp;_trksid=p2057872.m2749.l2649&quot; rel=&quot;nofollow noreferrer&quot;&gt;a couple of nifty little planetary gear motors&lt;/a&gt; and would like to incorporate them into my next project. could anyone help identify whether the connector is a commonly used one an whether i could purchase an adapter for to make it easy to engage with other custom parts? i have a 3d printer but it is only an FDM one and not quite precise enough to print the part myself. Thanks.&lt;/p&gt;&#xA;" OwnerUserId="19154" LastActivityDate="2017-12-31T12:21:48.703" Title="Identifying the connector on a micro planetary gear motor" Tags="&lt;motor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14872" PostTypeId="2" ParentId="14862" CreationDate="2017-12-28T15:44:25.410" Score="1" Body="&lt;p&gt;DMA lets peripherals access memory directly. What component is it that is putting the information into your microcontroller's memory? It sounds like, from your post, you're having the microcontroller itself pull data on an interrupt basis. I don't think your sensor is going to push its own data to the microcontroller. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're having the microcontroller do all the work of getting the data into memory, then you're missing the point of DMA altogether, which may explain why this post is getting downvoted so much. If there is data you don't need then I don't understand why you would bother to acquire it, regardless of whether it's via DMA or not. You have to index the registers you want &lt;em&gt;somewhere&lt;/em&gt;, whether that's when you pull the data from the sensor or when your program goes to read the correct data from memory. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might be able to &quot;speed things up&quot; if you had a means to read I2C and then write to memory; an example would be getting a second microcontroller. The second microcontroller could then handle I2C comms and push the results directly to the memory of the first microcontroller. The first microcontroller is free to just use whatever's in memory. My concern here would be getting stale data and not realizing it's stale, or getting data mid-write.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In any event, if you don't have something that's not your primary microcontroller writing directly to memory, then whatever you're doing isn't DMA and your question doesn't really matter because you're not doing DMA. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To answer your question specifically, though, &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Assuming i have enough memory what are problems that occour with this solution? What are the advantages of the &quot;traditional&quot; approach as opposed to my approach?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Even if you have enough memory to bulk read every bit of data the sensor has to offer, you still have to get the &lt;em&gt;useful&lt;/em&gt; data into your program. Now, instead of having a library that indexes registers on the sensor, you have to index memory in the microcontroller. Now you need a library that can access BNO055 register data in the memory of a STM32L432KC microcontroller. That is, instead of one BNO055 library, you now have a BNO055-STM32L432KC library. If you change sensors &lt;em&gt;or&lt;/em&gt; change microcontrollers you need to re-write the library.&lt;/li&gt;&#xA;&lt;li&gt;Obviously, then, the advantage of doing it the &quot;traditional&quot; way is that you have a portable BNO055 library.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I'll also point out that, if the time it takes to communicate with your sensor is a deal breaker, your microcontroller doesn't have enough overhead and you should probably be looking to move to a different platform.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-12-28T15:44:25.410" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14873" PostTypeId="1" AcceptedAnswerId="14881" CreationDate="2017-12-28T17:21:32.690" Score="0" ViewCount="1209" Body="&lt;p&gt;I am a beginner in robotics and I have just come across the concepts of differential and steer drive. I don't understand them very clearly yet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found the following &lt;a href=&quot;http://www.robotplatform.com/knowledge/Classification_of_Robots/wheel_control_theory.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;write up&lt;/a&gt; describing differential drive as follows:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If the angular velocities are identical in terms of both values and&#xA;  direction, i.e. if both the wheels are driven at the same speed and&#xA;  same direction (either clockwise or anticlockwise) then the robot&#xA;  tends to spin around its vertical axis. This complete turn capability&#xA;  is one of the greatest advantages of a differentially driven robot&#xA;  (a.k.a zero radius turn).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Being a complete beginner, I concede I could be entirely incorrect in disagreeing with the above.&#xA;I just imagine that &quot;both wheels&quot; driving at the same speed and direction (clockwise or anticlockwise) would mean a robot is travelling along linearly i:e straight ahead.&#xA;I don't understand why the writer says the robot is actually spinning around it's Z axis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I'm wrong, please explain what I'm missing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And please, let me have links to material that would help me understand differential and steer drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance.&lt;/p&gt;&#xA;" OwnerUserId="14355" LastActivityDate="2017-12-31T00:16:08.047" Title="Understanding differential drive" Tags="&lt;differential-drive&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14874" PostTypeId="2" ParentId="14873" CreationDate="2017-12-28T18:06:30.700" Score="3" Body="&lt;p&gt;Your instincts are correct if you are talking about rotating both wheels forward (or reverse) with the same rotational speed.  In that case, the robot would move linearly forward (or backward), just as you describe.  The drawings at the link you provide seem to support this.  However, this analysis is different from what the text describes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think the problem you're having is from the text describing each wheel's rotation as either clockwise or anticlockwise.  The text seems to describe a situation in which you define the $\hat{z}$ axis of each wheel as originating at the center of the axle which connects the two wheels.  Also define each wheel's $\hat{z}$ axis with a positive direction that passes through the center of the wheel.  In other words, both of the wheels will rotate about an axis that is parallel to the axle, but the left wheel's axis of rotation will be opposite in direction to the right wheel's axis of rotation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now consider a clockwise or an anticlockwise rotation about each of these two axes.  For the wheel on the left, an anticlockwise rotation turns the wheel in the forward direction, but an anticlockwise rotation of the right wheel rotates it in the backward direction.  And so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given the above construct, the textual description of a differential drive makes sense.  It's unfortunate that the picture does not make this clear.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2017-12-28T18:06:30.700" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14875" PostTypeId="2" ParentId="9336" CreationDate="2017-12-29T12:17:11.500" Score="0" Body="&lt;p&gt;Quaternions need to have a constant length. This property will give a constraint while writing the Jacobian matrix. Maybe you can use this property to reduce the size of the matrix to 6 x 6? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Reference : &lt;a href=&quot;http://www.cs.cmu.edu/afs/cs.cmu.edu/user/spiff/www/moedit99/expmap.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Practical Parameterization of Rotations Using the Exponential Map&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="17504" LastActivityDate="2017-12-29T12:17:11.500" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14876" PostTypeId="2" ParentId="14869" CreationDate="2017-12-29T13:42:13.113" Score="1" Body="&lt;p&gt;You can alter the C code structure in the Controller, so that the code you want to test is indepencent from platfrom specific code. (You can only test the platform independent code using Software in the Loop anyways.) I am not sure what ways are available in C in order to achive this, but all &lt;a href=&quot;https://en.wikipedia.org/wiki/Inversion_of_control&quot; rel=&quot;nofollow noreferrer&quot;&gt;inversion of control&lt;/a&gt; methods, e.g. &lt;a href=&quot;https://en.wikipedia.org/wiki/Dependency_injection&quot; rel=&quot;nofollow noreferrer&quot;&gt;Dependency injection&lt;/a&gt;,  have this goal. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The platform independen code then can be compiled not only for the bare metal implementation, but also for Linux (assuming Gazeebo only runs on Linux), you will need different build settings (e.g. make file or project, depending on what you use to build the project).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The code which is platform independent can be included in a Gazeebo simulation. Since I have never used Gazeboo, I cannot help with this, but here are my assumptions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Gazeebo is aimed for developing high level algorithms, so testing code for a PID controller or similar, will probably need a different simulation software (e.g. Matlab Simulink).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You will have to re-implement all platform dependent code, this time, instead of bare metal platform dependent code it will be Gazeboo dependent. If you use dependeny injection, for one build your logic is injected with the bare metal platform specific code, for the test build it will be injected with Gazeebo specific code E.g. instead of reading a lidar, you will need to find a way to emulate that lidar read using the Gazeebo environment and feed the sam data to your logic, as it would come from the lidar.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2017-12-29T13:42:13.113" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14877" PostTypeId="2" ParentId="14871" CreationDate="2017-12-29T14:24:30.290" Score="1" Body="&lt;p&gt;I don't think this is a standard connector. So you would need to produce your own adapter or whatever you want to drive using your motors. These parts do not need to be totally accurate. Usually you need to add 0.2 mm for each dimension, if it is the outside part of a connector, so that it fits inside.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should avoid printing gears, which would need to be precise. I would either print a pulley, that can be connected or something that is put directly onto an axle. Here is some OpenSCAD example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$fn = 64;  // higher accuracy for round shapes&#xA;ar = 0.01; // anti-residual&#xA;&#xA;depth_adapter = 5;&#xA;&#xA;diam_adapter = 6;&#xA;diam_axle = 1.5;&#xA;&#xA;fit = 0.2;&#xA;shape_w = 2 + fit;&#xA;shape_h = 4 + fit;&#xA;shape_d = 3 + fit;&#xA;&#xA;&#xA;difference() {&#xA;    // outside shape of the adapter&#xA;    cylinder(h=depth_adapter, d=diam_adapter);&#xA;&#xA;    // a hole for the axle&#xA;    translate([0,0,-ar])&#xA;    cylinder(h=depth_adapter+2*ar, d=diam_axle);&#xA;&#xA;    // shape of the motor-connector&#xA;    translate([0,0,shape_d/2-ar])&#xA;      cube([shape_w, shape_h, shape_d], center=true);&#xA;    rotate([0,0,90])&#xA;    translate([0,0,shape_d/2-ar])&#xA;      cube([shape_w, shape_h, shape_d], center=true);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;which would look like this:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/CTJnH.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/CTJnH.png&quot; alt=&quot;Preview for the Code above&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course you should print this part rotated bottom-up, so you wont need any support material. And you should probably make the hole for the axle smaller than the axle actually is and then use a electric drill to drill in the hole with an accurate diameter. Also you need something that would need to keep your axle in place relative to your motor. This is where the mounting holes at the side of the motors come in handy. You should think about using bearings for holding the axle, but in some cases (slow speed) a hole that is just big enough for the axle should work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Without knowing what you want to build, it is hard to suggest any special shapes. But, I hope you got the Idea how this could look like.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have any more questions, just ask...&lt;/p&gt;&#xA;" OwnerUserId="19123" LastEditorUserId="19123" LastEditDate="2017-12-31T12:21:48.703" LastActivityDate="2017-12-31T12:21:48.703" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14878" PostTypeId="1" CreationDate="2017-12-29T15:04:13.357" Score="1" ViewCount="558" Body="&lt;p&gt;I have tried SimScape and gazebo but I did not get a solution for simulation of a swimming pool. Can somebody help with the same? Do I have to create the whole swimming pool using simple rectangular shapes and all? How to add water to it?&lt;/p&gt;&#xA;" OwnerUserId="19056" LastActivityDate="2021-03-08T18:00:45.147" Title="How to simulate water/ pool for underwater vehicle in Gazebo/SimScape?" Tags="&lt;mobile-robot&gt;&lt;simulation&gt;&lt;gazebo&gt;&lt;underwater&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14879" PostTypeId="1" AcceptedAnswerId="14880" CreationDate="2017-12-30T09:05:02.087" Score="3" ViewCount="591" Body="&lt;p&gt;I am trying to have a Kalman-Filter (or Extended-KF) give me positions for a small remotely controlled vehicle with an Ackermann steering geometry (moving on a plane surface). The control commands I can send to the vehicle are wheel speed and steering angle. To measure the position I have available an Inertial Measurement Unit, gyroscope (electronic), odometry and in the future a indoor positioning system. Trying to set up the filter, I am already stuck with the prediction phase. I assume my state vector is something like&#xA;$&#xA;x=\begin{bmatrix}&#xA;x\\&#xA;v_x\\&#xA;a_x\\&#xA;y\\&#xA;v_y\\&#xA;a_y&#xA;\end{bmatrix}&#xA;$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and having read an introduction for Kalman filters I think that I should get the new state by doing&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$x_k = A x_{k-1} + B u_{k-1}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where A is the predictor matrix, and $u_{k-1}$ the control input which I assume to be&#xA;$&#xA;u=\begin{bmatrix}&#xA;\omega\\&#xA;\alpha&#xA;\end{bmatrix}$&#xA;, where $\omega$ would be the wheel speed and $\alpha$ the steering angle. I guess A is something like&#xA;$&#xA;A=\begin{bmatrix}&#xA;1 &amp;amp; \Delta t &amp;amp;\Delta \frac{1}{2}t^2 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0\\&#xA;0&amp;amp;1&amp;amp;\Delta t &amp;amp;0 &amp;amp;0 &amp;amp;0\\&#xA;0&amp;amp;0&amp;amp;1 &amp;amp;0 &amp;amp;0 &amp;amp;0\\&#xA;0&amp;amp;0&amp;amp;0 &amp;amp;1 &amp;amp; \Delta t &amp;amp;\Delta \frac{1}{2}t^2\\&#xA;0&amp;amp;0&amp;amp;0 &amp;amp;0 &amp;amp;1  &amp;amp;\Delta t\\&#xA;0&amp;amp;0&amp;amp;0 &amp;amp;0 &amp;amp;0  &amp;amp;1\\&#xA;\end{bmatrix}&#xA;$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I don't really know how I should deal with the control input. For once, the velocity change due to a stearing angle $\alpha$ is not linear, is this a problem? Also, my control input for the wheel speed is basically the velocity already present in A. Should I then only use the wheel speed change as control input?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Furthermore: I get updates form my sensors every 10 ms. I wonder how fast the motor will react to my steering commands. Could it be that it makes sense to neglect the control inputs altogether?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you for your help!&lt;/p&gt;&#xA;" OwnerUserId="19165" LastActivityDate="2017-12-30T22:46:28.627" Title="State prediction of vehicle with Ackermann steering geometry using Kalman-Filter" Tags="&lt;kinematics&gt;&lt;kalman-filter&gt;&lt;odometry&gt;&lt;precise-positioning&gt;&lt;autonomous-car&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14880" PostTypeId="2" ParentId="14879" CreationDate="2017-12-30T20:29:50.093" Score="1" Body="&lt;p&gt;Using the commanded speed in the prediction update of a Kalman filter which estimates speed and higher order states can be entirely reasonable. In situations where the time constant of the controller is slow, you will gain a considerable amount state estimate accuracy by estimating state derivatives using the control loop dynamics. In situations where the control loop time constant is much faster than the kalman filter update rate, far less accuracy will be gained. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, in situations that have a fast control loop time constant, estimating the higher order states (in your case this is acceleration) will not benefit you a whole lot. By the time the kalman filter routine has been called, we know that the dynamics within the control loop have settled and the higher order states will be nil. Estimating something that will basically be zero at every timestep will not get you a whole lot of information.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the second case, where the control loop time constant is slow compared to the kalman filter update rate, estimating the higher order states can profit your estimates greatly. Use a model of the controller with your time step to solve for the expected state. to do this you will need some model for your controller but this can be something as simple as a first or second order system. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In both cases it is best to use your commands in the prediction step of the KF as they give you a better idea of your current state.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Now, a bit about the states you've chosen. I think it is going to be difficult to use your set of states.  I think it would be more natural to estimate position, speed, vehicle direction ( which way the body of the vehicle is pointed), and steering angle. I am completely unfamiliar with the standard approach to localizing ground vehicles, these are just my first thoughts. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;About the nonlinear aspects of your system. At the very least you will want to use an EKF. The A matrix in an EKF is a Jacobian that is evaluated at the given state estimate at every time step. To get this, you will need to derive the nonlinear relation between your state and the state time derivative. Take the Jacobian of that relation with respect to the state. This is then evaluated at every time step to get an A matrix.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Also, using only odometry and IMU data will result in a system that is not observable. This means that the error in your estimate will get worse over time because you have no way to correct for the error in your odometry readings. This isn't necessarily a problem, just know that without a measurement of position, your position estimate error will be unbounded. You'll still be able to drive around for a bit, but your estimate will get worse over time. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;I strongly recommend reading Optimal State Estimation by Simon. It's the first estimation book I turn to when I brush up. &lt;/p&gt;&#xA;" OwnerUserId="8842" LastEditorUserId="8842" LastEditDate="2017-12-30T22:46:28.627" LastActivityDate="2017-12-30T22:46:28.627" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14881" PostTypeId="2" ParentId="14873" CreationDate="2017-12-31T00:16:08.047" Score="2" Body="&lt;p&gt;The answer is very simple;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Steer drive&lt;/strong&gt; is what you know from a car where one motor powers both the wheels (either the front or the rear wheels) and then steering is achieved by turning the front wheels right or left.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Differential drive&lt;/strong&gt; means having two motors, one that powers all wheels (or the track) on the right side and one that powers all wheels on the left side, the way steering is achieved with a differential drive is by making the wheels on one side of the vehicle turn faster than the other side making the vehicle turn to the opposite side of the wheels turning faster. this is the way a tank works.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of the great advantages of differential drive is, as you quoted, that it can spin around its own axis (z-axis) if the wheels are driven in opposite direction making it capable of turning on the spot. this is not possible with steer drive because you have to move forward to turn.&lt;/p&gt;&#xA;" OwnerUserId="19170" LastActivityDate="2017-12-31T00:16:08.047" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14882" PostTypeId="1" CreationDate="2017-12-31T01:54:52.627" Score="1" ViewCount="217" Body="&lt;p&gt;I have 2x 350W wheel-hub motors taken from a self-balancing scooter, or hoverboard. My intention is to use the two of them to drive a homemade R2-D2. However, some difficulties have been encountered that make it seem as though I am missing something trivial.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ESC in question is a Hobbyking Quicrun 16BL30, driven by an HJ Servo Tester. Power supplies used include a 7.2V 1200mAh Ni-Cd battery, a 9.6V 900mAh Ni-Cd battery, and the 12V 18A rail of an ATX power supply. In testing configuration, the wheel-hub motor is clamped to the desk (no physical load). The ESC was programmed to the following values:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Running Mode: Fwd/Rev.&lt;/li&gt;&#xA;&lt;li&gt;Drag Brake Force: 0%.&lt;/li&gt;&#xA;&lt;li&gt;Low Voltage Cutoff: Disable.&lt;/li&gt;&#xA;&lt;li&gt;Start Mode (Punch): Level 5.&lt;/li&gt;&#xA;&lt;li&gt;Max. Brake Force: Disable.&lt;/li&gt;&#xA;&lt;li&gt;Max. Reverse Force: 100%.&lt;/li&gt;&#xA;&lt;li&gt;Initial Brake Force: 0%.&lt;/li&gt;&#xA;&lt;li&gt;Throttle Range: 9% (Normal).&lt;/li&gt;&#xA;&lt;li&gt;Timing: 11.25 deg.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Upon calibration and power-up, everything goes fine. However, driving forward/backward, the motor only runs for 3 seconds before stopping. The ESC light remains indicative of a load in that direction. When returned to neutral, then to run, it will go again. If done 3x or 4x, the ESC light will remain red when returned to neutral (indicative of an incorrect signal, or faulty connection to the motor). The ESC only needs reset to allow for 3s drives again. If alternated between forward and neutral at 1s intervals, it will continue running.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The instructions, manufacturer forums and google have failed to reveal another user encountering this problem. In a prior session, before accidentally resetting the ESC to all-default values, the wheel functioned perfectly for a few minutes. I feel as though I must be missing something trivial.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What am I missing?&lt;/p&gt;&#xA;" OwnerDisplayName="user17183" LastEditorDisplayName="user17183" LastEditDate="2017-12-31T03:39:23.873" LastActivityDate="2019-01-31T12:26:39.993" Title="How does one setup an ESC to drive a wheel-hub motor?" Tags="&lt;mobile-robot&gt;&lt;wheeled-robot&gt;&lt;brushless-motor&gt;&lt;esc&gt;&lt;troubleshooting&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14885" PostTypeId="1" CreationDate="2017-12-31T16:17:21.723" Score="1" ViewCount="74" Body="&lt;p&gt;I purchased one of &lt;a href=&quot;https://www.aliexpress.com/item/10pcs-lot-L9110S-DC-Stepper-Motor-Driver-Board-H-Bridge-L9110-for-arduino-Free-Shipping-Dropshipping/32251090078.html?ws_ab_test=searchweb0_0,searchweb201602_5_10152_10065_10151_10344_10068_10130_10324_10342_5000018_5060018_10547_10325_10343_51102_10340_10341_10548_5130018_10192_10190_10084_10083_10307_10301_10303_10312_10059_10313_10314_10184_10534_5790011_100031_10604_10103_10594_10142,searchweb201603_6,ppcSwitch_5&amp;amp;algo_expid=650c64a3-063a-449d-94a0-c77e6faf2a4b-3&amp;amp;algo_pvid=650c64a3-063a-449d-94a0-c77e6faf2a4b&amp;amp;rmStoreLevelAB=5&quot; rel=&quot;nofollow noreferrer&quot;&gt;these&lt;/a&gt; motor drivers and noticed that i was not getting as much time from my battery as i had expected. I tested the current draw when connecting my motor directly to the battery and then when connected via the controller. the results were disappointing, i got 70mA direct connection and 144mA using the controller so more than double the current! i then tried through a mosfet and that was good, 73mA.&#xA;If i want to get a more efficient circuit am i going to have to build an h-bridge myself or am i just using a rubbish controller? Thanks&lt;/p&gt;&#xA;" OwnerUserId="19154" LastActivityDate="2019-08-24T07:02:55.400" Title="unexpected inefficiency of a motor driver" Tags="&lt;motor&gt;&lt;h-bridge&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14886" PostTypeId="2" ParentId="14885" CreationDate="2017-12-31T23:36:05.990" Score="1" Body="&lt;p&gt;You connected your (one) motor to the battery and got 70mA draw. You use a &lt;strong&gt;two motor&lt;/strong&gt; driver and are seeing 144mA draw. I'm not sure what the problem is. What command are you sending to the second motor?&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2017-12-31T23:36:05.990" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14887" PostTypeId="1" CreationDate="2018-01-01T15:21:56.903" Score="0" ViewCount="730" Body="&lt;p&gt;I'm trying to find the most simplified (though accurate) calculations for the dynamic model of a standard 6DOF serial robot (PUMA robot).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found this great paper:&#xA;&lt;a href=&quot;https://www-cs.stanford.edu/group/manips/publications/pdfs/Armstrong_1986.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www-cs.stanford.edu/group/manips/publications/pdfs/Armstrong_1986.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The paper contains the full equations with 28 constants of the system, and it specifies the calculation for each constant.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I have a problem regarding the 6th link. It has the inertia symmetric values - Ixx6 Iyy6 Izz6, but Iyy6 never appears in any constant.&#xA;The specific robot in the paper (and actually it should be for every robot) has a 6th link that Ixx6 = Iyy6, but the same is true for Ixx5 and Iyy5 and still they both appear in the constants.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do you think this is a mistake?&#xA;I need the exact equations has I want to expand them to the case of a payload - I want to replace m6 and I6 with updated values that include the payload mass and transferred inertia and then the equilibrium Ixx6 = Iyy6 will not necessarily exist.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do you know of any other source of the full equations? Or maybe you have a solution to understand which of the Ixx6 relates to Ixx6 or Iyy6?&lt;/p&gt;&#xA;" OwnerUserId="15659" LastActivityDate="2018-04-02T09:51:37.983" Title="6DOF serial robot (PUMA robot) dynamic model equations" Tags="&lt;robotic-arm&gt;&lt;dynamics&gt;&lt;industrial-robot&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14888" PostTypeId="2" ParentId="14887" CreationDate="2018-01-02T07:38:29.120" Score="1" Body="&lt;p&gt;There are ten inertial parameters for a rigid link, namely, mass ($m$), product of mass and center of mass ($m a_x$, $m a_y$, $m a_z$), inertia tensor ($I_{xx}$, $I_{yy}$, $I_{zz}$, $I_{xy}$, $I_{yz}$, $I_{zx}$). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Case 1: Consider a rigid link, which can freely translate and rotate in space in 3D. For such a link each and every inertial parameter appears in the dynamic model and affects it simply because the body is allowed to move in all the 6 dimensions (3 translational + 3 rotational).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Case 2: Let us take the same rigid link and fix to an immovable base with a revolute joint, referred to as a 1-DoF manipulator. Such a fixture constraints the motion of the rigid link. Constraining the motion of the manipulator to only a few dimensions renders some of the inertial parameters to be purposeless to the dynamic model.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/KUjoL.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KUjoL.png&quot; alt=&quot;Link fixed to a base with a revolute joint&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Dynamic model of the 1-DoF manipulator is:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;$\tau = (I_{zx}+I_{yz}+I_{zz})\ddot{\theta_{1}} + mg(a_{x} cos(\theta_{1}) + a_{y}sin(\theta_{1}))$&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In the above dynamic model, 5 out of the 10 inertia parameters have no effect.  Similarly, when multiple links are connected to each other with 1-DoF joints it constraints the relative motion of the links, which renders some inertial parameters futile and they do not appear int he dynamic model.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To verify the equations of motions you obtained, you may use &lt;a href=&quot;http://www.redysim.co.nr/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Recursive Dynamics Simulator (ReDySim) symbolic module&lt;/a&gt;, which generates the symbolic equations of motion. &lt;/p&gt;&#xA;" OwnerUserId="11721" LastActivityDate="2018-01-02T07:38:29.120" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14889" PostTypeId="2" ParentId="14843" CreationDate="2018-01-02T15:32:01.660" Score="3" Body="&lt;p&gt;One of the problems with a belt driven SCARA system like this is that as the belts age, they stretch, so every belt should have a tensioner.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you look carefully, it is clear that plate 106 rotates around shaft 114, and you can see the spring which provides the tension below it. Cogs 102 and 104 are free running. When the belt is new, plate 106 will be pushed close to the position shown. As the belt ages, the force of the spring will rotate plate 106 anti-clockwise, maintaining the tension of the belt.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This design cleverly tensions both straight sections of belt at the same time, by the same amount, and with the same pressure. This should make the system less susceptible to problems with unidirectional repeatability (moving from -90 to 0 resulting in a different position than moving from 90 to 0 for instance).&lt;/p&gt;&#xA;" OwnerUserId="37" LastActivityDate="2018-01-02T15:32:01.660" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14891" PostTypeId="2" ParentId="14843" CreationDate="2018-01-02T17:15:34.813" Score="1" Body="&lt;p&gt;The circled assembly is a bi-directional tensioner which maintains the tension in the drive belt at a pre-determined level as the belt ages and stretches. The detailed description of the function of the assembly is explained in the &lt;a href=&quot;https://www.google.com/patents/US4693666&quot; rel=&quot;nofollow noreferrer&quot;&gt;original patent document&lt;/a&gt; (US Patent 4,693,666), available on Google patents:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The bidirectional tensioning for the belt 60 ... as shown in FIG 5, is achieved by the bidirectional belt tensioning and idler device 100 positioned within the belt loop and intermediate the toothed gears 56 and 62. &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The device 100 includes rotatable toothed rollers, or pulleys, 102 and 104 for internal engagement with opposite lengths L1 and L2 of the belt 60 which are moving in opposite directions. The rollers 102 and 104 are connected by a yoke 106 which connects the supporting axes of the rollers. The device 100 is rotated about a torquing arrangement 110 which extends through a mounting plate 112. The torquing arrangement 110 includes an adjustable tensioning element 114 for rotating the 100 relative to the belt 60 to establish the desired tensioning of the belt 60.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Once the proper tensioning is established, the device 100 is secured by the fasteners. The desired belt tension corresponds to a predetermined torque associated with the tensioning element 114 and thus the belt 60 can be pretensioned via the tensioning device 114 without requiring visual access to the interior of the primary arm assembly P.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I've included the original diagram below for ease of reference:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/Br8GP.png&quot; alt=&quot;figure 5&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;When modelling the SCARA robot, this assembly should not need to be modelled with a separate equation. The function of the unit is simply to ensure that the drive assembly performs as expected, so you do not need to modify the equations for the drive assembly to account for the drive belt ageing and stretching over time.&lt;/p&gt;&#xA;" OwnerUserId="17029" LastEditorUserId="17029" LastEditDate="2018-01-02T23:19:55.760" LastActivityDate="2018-01-02T23:19:55.760" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14892" PostTypeId="2" ParentId="14607" CreationDate="2018-01-03T08:31:28.320" Score="1" Body="&lt;p&gt;If your main question is how to work through your ontology (i.e. after defining your vocabulary you want to generate a rdf or owl file) you can look into some tools like &lt;a href=&quot;https://protege.stanford.edu/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Protege&lt;/a&gt;, which is a quite well know and well-documented tool for developing ontologies. Although, this will only help you on creating the knowledge representation (KR). If you want to use it effectively for programming your robot control system, you will need to query this KR using some query language like SWRL or SPARQL.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, if you are thinking about developing this for your case maybe you should take a look at some standards that exist concerning ontologies for robotics &lt;a href=&quot;https://standards.ieee.org/findstds/standard/1872-2015.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;IEEE ORA-P1872&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11438" LastActivityDate="2018-01-03T08:31:28.320" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14893" PostTypeId="2" ParentId="14266" CreationDate="2018-01-03T08:40:41.623" Score="0" Body="&lt;p&gt;Some well-known simulators used in robotics include &lt;a href=&quot;http://gazebosim.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Gazebo&lt;/a&gt; (probably one of the most adopted), &lt;a href=&quot;http://playerstage.sourceforge.net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Player/stage&lt;/a&gt; and Webots (this one is not free).&lt;/p&gt;&#xA;" OwnerUserId="11438" LastActivityDate="2018-01-03T08:40:41.623" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14894" PostTypeId="1" AcceptedAnswerId="14900" CreationDate="2018-01-03T08:59:30.103" Score="0" ViewCount="29" Body="&lt;p&gt;I am trying to design a very rigid tilting mechanism for my router. For this purpose I had a look at table saws, which seem to be supported by 2 mechanisms, one in front, one at the back, called &quot;trunnions&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Such a trunnion consists of part of a circle, with a circular precision ground track, and a mating mart. The part of the circle is as such that the center of rotation coincides with the surface of the table.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, when looking for &quot;trunnion&quot;, I find medieval cannons as well as brand/product-specific constructions, which seem rather expensive. Does such a mechanism have other names? The router in question is a 20kg model, just as an indication of size. My last attempt was &quot;circular track bearing&quot;, but i doubt that i am looking in the right direction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could anyone provide a pointer?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="19194" LastActivityDate="2018-01-05T07:21:47.127" Title="router tilting mechanism" Tags="&lt;design&gt;&lt;mechanism&gt;&lt;rotation&gt;&lt;routing&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14896" PostTypeId="2" ParentId="11762" CreationDate="2018-01-03T09:49:54.590" Score="0" Body="&lt;p&gt;&lt;a href=&quot;https://www.nature.com/articles/ncomms14494.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;This&lt;/a&gt; paper might help decide what sort of walking algorithm suits your purpose.&lt;/p&gt;&#xA;" OwnerUserId="17504" LastActivityDate="2018-01-03T09:49:54.590" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14897" PostTypeId="1" AcceptedAnswerId="14898" CreationDate="2018-01-03T10:41:50.277" Score="2" ViewCount="313" Body="&lt;p&gt;A robotic system is moving a getting its current location using visual odometry (incremental estimation of rotation and translation). To correct its localization, a loop closure technique may be added. However, this technique based on image comparison is costly. I want to find a way to only use this technique of loop closure only when a potential loop closure is present.&#xA;Is there a way to use the $x$ and $y$ coordinates of the vehicle provided by visual odometry to say that based on their values a loop closure may have occured?&lt;/p&gt;&#xA;" OwnerUserId="17442" LastActivityDate="2018-08-07T12:03:12.043" Title="loop closure detection in visual SLAM" Tags="&lt;mobile-robot&gt;&lt;localization&gt;&lt;slam&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14898" PostTypeId="2" ParentId="14897" CreationDate="2018-01-03T11:42:08.217" Score="1" Body="&lt;p&gt;You can of course check if the robot is close to a prior position and looking in a similar direction (after he had moved away from this position sufficiently). But if your odometry was reliable enough to do this, you wouldn't really need loop closing. Loop closing was invented for exactly the reason that you cannot trust your odometry over a long time. &lt;/p&gt;&#xA;" OwnerUserId="23196" LastActivityDate="2018-01-03T11:42:08.217" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14900" PostTypeId="2" ParentId="14894" CreationDate="2018-01-03T21:49:09.180" Score="0" Body="&lt;p&gt;Search circular motion guide.  or curved linear guide. THK's HCR product is one example. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This assumes you want to move the router while cutting. If you will lock it down, someone could cut and weld you a trunnion out of steel plate a lot cheaper than it would cost to design and fab the structure needed to mount the circular rail.&lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="184" LastEditDate="2018-01-05T07:21:47.127" LastActivityDate="2018-01-05T07:21:47.127" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14901" PostTypeId="2" ParentId="11749" CreationDate="2018-01-04T02:43:08.410" Score="1" Body="&lt;p&gt;Disparity error varies greatly with the algorithm you're using to compute stereo. There are a number of benchmarks for evaluating the quality of different stereo algorithms. See, for instance&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The Middlebury Stereo Benchmark: &lt;a href=&quot;http://vision.middlebury.edu/stereo/eval3/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://vision.middlebury.edu/stereo/eval3/&lt;/a&gt;, a pioneer in this area.&lt;/li&gt;&#xA;&lt;li&gt;The Stereo section of the KITTI scene flow benchmark: &lt;a href=&quot;http://www.cvlibs.net/datasets/kitti/eval_scene_flow.php?benchmark=stereo&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.cvlibs.net/datasets/kitti/eval_scene_flow.php?benchmark=stereo&lt;/a&gt;, which may be more relevant to robotic applications.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The KITTI benchmark's rankings are based on what percentage of pixels are outliers, where inliers are defined as being disparity error of &amp;lt; 3px or &amp;lt; 5%. Middlebury has a number of different error criteria, but the default is a similar outlier percentage, with a threshold of 2 px error. By looking through some of the other options for Middlebury error metrics, you can see that most algorithms achieve sub-pixel accuracy for the vast majority of pixels, but there are a few percent (or more) of pixels that don't get correct correspondences, which leads to outliers. The errors of these false correspondences are distributed somewhat randomly, so benchmarks opt for these thresholded metrics to avoid being too sensitive to the outliers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The choice of an appropriate value will therefore depend on what you're trying to model. If you're interested in the common case of being able to find a good match, you can look at the median error on Middlebury (metric A50), which for the leading algorithms is around half a pixel. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind, however, that many of these methods are more computationally expensive than is practical for a lot of robotics applications, with runtimes of several seconds. If you're looking for methods that will run at high frame rates, take a look at the &quot;time&quot; metric. A method like Semi-Global Block Matching (SGBM) can run several times per second, but raises median error to 1.27 for SGBM1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For any of these methods, the error from outliers can be much higher. You could try to characterize the distribution of the error for a more complete picture, though it will depend on your inputs (are they similar to those in the benchmarks?) as well as the choice of algorithm.&lt;/p&gt;&#xA;" OwnerUserId="55" LastActivityDate="2018-01-04T02:43:08.410" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14902" PostTypeId="2" ParentId="14817" CreationDate="2018-01-04T06:52:32.450" Score="-1" Body="&lt;p&gt;You may be intrested to know that there is already an Arduino library for ROS.  It is called rosserial_arduino,&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The Arduino and Arduino IDE are great tools for quickly and easily programming hardware. Using the rosserial_arduino package, you can use ROS directly with the Arduino IDE. rosserial provides a ROS communication protocol that works over your Arduino's UART. It allows your Arduino to be a full fledged ROS node which can directly publish and subscribe to ROS messages, publish TF transforms, and get the ROS system time.&#xA;  &lt;a href=&quot;http://wiki.ros.org/rosserial_arduino/Tutorials/Arduino%20IDE%20Setup&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://wiki.ros.org/rosserial_arduino/Tutorials/Arduino%20IDE%20Setup&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="19205" LastEditorUserId="23196" LastEditDate="2018-01-05T10:45:14.450" LastActivityDate="2018-01-05T10:45:14.450" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14903" PostTypeId="1" CreationDate="2018-01-04T09:16:40.717" Score="1" ViewCount="71" Body="&lt;p&gt;I'm assuming that since torque translates into acceleration, the basic transfer function from torque to position becomes  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$1/s ^ 3$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does this mean that 3 pid controllers are required to properly control the process? ie acceleration, velocity and finally position? Perhaps a two stage position+velocity controller can decently aproximate the solution, but from mathematical standpoint, how many stages are actually needed for optimal control?&lt;/p&gt;&#xA;" OwnerUserId="15812" LastActivityDate="2018-06-03T15:07:49.193" Title="How many stages necessary to stabilize position while controlling torque?" Tags="&lt;control&gt;&lt;motor&gt;&lt;theory&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14904" PostTypeId="2" ParentId="14903" CreationDate="2018-01-04T09:26:51.230" Score="1" Body="&lt;p&gt;I would say the transferfunction becomes $\frac{1}{s^2}$ iff you assume you have a perfect drive without any dynamics. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since this system is unstable you have to be careful choosing your controllers. &#xA;The best way in my opinion is to use a standard state feedback controller (&lt;a href=&quot;https://en.wikipedia.org/wiki/Linear%E2%80%93quadratic_regulator&quot; rel=&quot;nofollow noreferrer&quot;&gt;LQR&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/Ackermann%27s_formula&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ackermann&lt;/a&gt;). The huge advantage using state feedback is that you can chose the pole location (in case of Ackermann) resp. the weight (in case of LQR) for each state separately.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Loop shaping in the frequency domain will work as well, see e.g. &lt;a href=&quot;http://www.control.lth.se/media/Education/DoctorateProgram/2016/Control%20System%20Synthesis/Loopshaping.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Loop Shaping, (Department of Automatic Control LTH,&#xA;Lund University)&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="18341" LastActivityDate="2018-01-04T09:26:51.230" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="14905" PostTypeId="1" CreationDate="2018-01-04T13:01:36.850" Score="0" ViewCount="615" Body="&lt;p&gt;I've been investigating S-Curve motion profiles for CNC router and 3D printer applications, and haven't come across any definitive source that says an S-Curve profile is &lt;i&gt;necessary&lt;/i&gt; in any application.  And in fact, it may even slow down a print.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This &lt;a href=&quot;https://xenovacivus.github.io/motion-control/curve-simulator.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;simulator compares S-Curve and trapezoidal&lt;/a&gt; motion profiles, showing that with the same velocity and acceleration, a move will take longer to complete.  Interestingly, the maximum acceleration of the S-Curve profile can be increased a small amount while keeping the maximum positional error (and force) beneath that of the trapezoidal profile.  This is because the slow ramp in acceleration allows the driven object to accelerate closer to the target speed, thus reducing the overall force.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In theory, an instantaneous change in force will also excite natural vibrations in a system as well (in the same way connecting an inductor/capacitor directly to a 12v source induces ringing).  Is this a problem in real-world mechanical systems?  And in those systems, would using an S-Curve profile reduce the ringing?&lt;/p&gt;&#xA;" OwnerUserId="19208" LastActivityDate="2018-01-04T13:33:59.507" Title="Are S-Curve (constant jerk) motion profiles significantly better than constant acceleration?" Tags="&lt;control&gt;&lt;motion-planning&gt;&lt;motion&gt;&lt;cnc&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14906" PostTypeId="2" ParentId="14905" CreationDate="2018-01-04T13:33:59.507" Score="1" Body="&lt;p&gt;Short version, yes having an s-curve profile is beneficial for smoother and more accurate tracking.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Longer version:&#xA;For all real hardware systems I've worked with it has been important to use an internally consistent profile. By this I mean, the derivative of your profile needs to match your velocity and the derivative of your velocity profile needs to match your acceleration. If that's not the case you are asking the system to do something that is physically impossible. Instantaneous acceleration changes are not possible so the control system simply cannot track perfectly at those points in the profile).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, there are practical times when things are good enough without meeting this condition. Some systems are, practically speaking, velocity controlled instead of force controlled. Other systems have a lower-level controller that will effectively turn your step-acceleration profile into an s-curve by limiting jerk of the profile (often a lower-level system parameter.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2018-01-04T13:33:59.507" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14908" PostTypeId="1" CreationDate="2018-01-04T15:57:12.273" Score="0" ViewCount="96" Body="&lt;p&gt;I am working on a project in which i have a robot working with stepper motors. I wish to control this robot with simulink. How can i convert the input( Analog sin input ) into the PWM that can be used as input for the system??? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Robot is Arduino2560 Based. &lt;/p&gt;&#xA;" OwnerUserId="16943" LastActivityDate="2018-01-04T16:09:31.177" Title="How can i convert Torque input into PWM signal?" Tags="&lt;arduino&gt;&lt;robotic-arm&gt;&lt;matlab&gt;&lt;simulation&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14909" PostTypeId="2" ParentId="14908" CreationDate="2018-01-04T16:09:31.177" Score="-1" Body="&lt;p&gt;Basic  Comperator circuits/systems can be implemented. For example if your sin wave's frequency equals to some frequency value. You can compare it with another sin wave or a DC value and hence you can generate modifiable (via second input to Comperator) PWM signal.&lt;/p&gt;&#xA;" OwnerUserId="19211" LastActivityDate="2018-01-04T16:09:31.177" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14913" PostTypeId="1" AcceptedAnswerId="14970" CreationDate="2018-01-05T03:02:04.090" Score="0" ViewCount="222" Body="&lt;p&gt;I am trying to compute the relative pose between two cameras using their captured images through the usual way of feature correspondences. I use these feature matches to compute the essential matrix, decomposing which results in the rotation and translation between both the views. I am currently using David Nister's 5 point algorithm to compute the essential matrix and subsequently the relative pose. Once I compute this relative pose:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;How can I find the uncertainty of this measurement? Should I try to refine the essential matrix itself (using the epipolar error), which results in the essential matrix's covariance and is it possible to find the pose covariance from this? Or is there another way to find the uncertainty in this pose directly?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;There is also another issue in play here: While I am computing the relative pose of camera 2 (call it $P_2$) from camera 1, the pose of camera 1 (say $P_1$) would have its own covariance $\Sigma_1$. How can I consider the effect of this on the covariance of $C_2$ ($\Sigma_2$)?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="10310" LastActivityDate="2018-01-12T16:37:06.963" Title="How can I compute the covariance of a camera-based relative pose measurement?" Tags="&lt;localization&gt;&lt;computer-vision&gt;&lt;estimation&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14915" PostTypeId="2" ParentId="9301" CreationDate="2018-01-05T06:17:53.517" Score="1" Body="&lt;p&gt;The answer to your question is explained clearly and well classified in the introduction of this paper &lt;a href=&quot;https://arxiv.org/pdf/1607.02565.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Direct Sparse Odometry&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, I would recommend you to read another representative semi direct method &lt;a href=&quot;http://www.ifi.unizh.ch/dam/jcr:e9b12a61-5dc8-48d2-a5f6-bd8ab49d1986/ICRA14_Forster.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;SVO: Fast Semi-Direct Monocular Visual Odometry&lt;/a&gt;&quot; (although the author of the first paper denies that it is a true semi direct method). The author's PhD dissertation describes his work in detail.  &lt;/p&gt;&#xA;" OwnerUserId="19219" LastEditorUserId="37" LastEditDate="2018-01-05T10:51:46.360" LastActivityDate="2018-01-05T10:51:46.360" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14917" PostTypeId="2" ParentId="10811" CreationDate="2018-01-05T14:53:12.857" Score="1" Body="&lt;p&gt;There are a few things that will make ICP hard to work with here:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;ICP is very sensitive to the initialization it is given and is very likely to converge to a poor solution if it is given a bad starting point. Your point cloud will probably not give you a good initial guess for the orientation of the object.  &lt;/li&gt;&#xA;&lt;li&gt;It can be thrown off by points in your point cloud that are not part of the object. There are versions of ICP that try to be more robust to this, but it's hard to do well. i.e., your CNN detections will probably just provide a bounding box detection of the object, but the object will not entirely fill that box. The point cloud you extract will therefore contain points that are not part of the object, which could pull the translation estimate from ICP pretty far off too. You will probably need to do some kind of 3D segmentation to try to isolate points on the object, which will be tricky to tune to work in all the cases you encounter.&lt;/li&gt;&#xA;&lt;li&gt;It can also be pretty expensive...&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I'd recommend starting with something like RANSAC on interest points on the object. You can compute a set of distinctive points (e.g., corner detections or other SIFT-like features) on your object model and on your image within the bounding box provided by your CNN's 2D detections. The success of this approach will depend largely on whether your objects have good, distinctive features to detect. Then you can estimate 3D locations for each of these points from disparities in the neighborhood. Applying RANSAC to these 3D points should give pretty accurate and robust 3D pose estimates. After that, you could try using ICP to refine them if needed.&lt;/p&gt;&#xA;" OwnerUserId="55" LastActivityDate="2018-01-05T14:53:12.857" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14921" PostTypeId="1" CreationDate="2018-01-05T20:27:04.540" Score="1" ViewCount="245" Body="&lt;p&gt;I am currently trying to register a pointcloud in time to find my change in position and heading at each timestep (High speed application). So this is essentially an implementation of SLAM. I am currently using ICP with an SVD rotation solver to try to find rotation and translation. This solution works with simulated pointclouds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The issue is that reobservation of previous points is non-deterministic for the type of scanner I am using. So this makes neighbor matching between frames difficult. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any prepossessing I can do to get better matches in the neighbor finding step? or are there other methods for pointcloud registration that are more robust to noise than SVD based ICP?   &lt;/p&gt;&#xA;" OwnerUserId="19232" LastEditorUserId="19232" LastEditDate="2018-01-06T07:52:28.867" LastActivityDate="2018-01-06T07:52:28.867" Title="Methods for odometry/IMU/Gyro free lidar pointcloud registration for pose estimation" Tags="&lt;slam&gt;&lt;computer-vision&gt;&lt;lidar&gt;&lt;point-cloud&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14922" PostTypeId="2" ParentId="14897" CreationDate="2018-01-06T06:02:46.363" Score="0" Body="&lt;p&gt;Well, there is an old solution that finds a possible loop closure by a growing uncertainty of the current location which was popular in EKF based SLAMs. In such way, you can reduce the number of the candidates for the place recognition. But I guess trajectory only is probably not enough for a loop closure unless you assume a special situation.   &lt;/p&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2018-01-06T06:02:46.363" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14923" PostTypeId="2" ParentId="14921" CreationDate="2018-01-06T06:09:02.603" Score="1" Body="&lt;p&gt;I'm not sure what sort of ICP did you used but a voxel based plane-to-point ICP is robust and works well even in an unstructured environment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This or his previous paper describes the method.&#xA;&lt;a href=&quot;http://ieeexplore.ieee.org/document/6220900/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://ieeexplore.ieee.org/document/6220900/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or this one might be helpful.&#xA;&lt;a href=&quot;http://static.adrian-haarbach.de/mscthesis_adrian.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://static.adrian-haarbach.de/mscthesis_adrian.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2018-01-06T06:09:02.603" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14924" PostTypeId="2" ParentId="14572" CreationDate="2018-01-06T09:53:42.437" Score="1" Body="&lt;p&gt;Edit: please provide information on your step-up board. What you need is an H-bridge driver such as L293DNE, TB6612FNG, DRV8833, ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a regular DC motor, the 6 pins of the connector are shown on the website you linked:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/PFtA9.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/PFtA9.jpg&quot; alt=&quot;Motor pinout&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With Arduino, you should connect the Hall Sensor (the encoder) pins to supplies (GND, +5V) and to two interrupt pins (A, B). See the official attachInterrupt() function reference &lt;a href=&quot;https://www.arduino.cc/reference/en/language/functions/external-interrupts/attachinterrupt/&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;here&quot;&gt;here&lt;/a&gt; because this depends on which Arduino you are using. Make sure you set the interrupts to trigger on change and not only on rising or falling signals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The software processing consists of a) detecting rotation direction, and b) detecting rotation speed, which can be done by b1) counting pulses or b2) timing pulses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;a) to detect the rotation direction, one way to do it is to compare if the A and B signals are the same (HIGH/LOW) or different using digitalRead(...) on interrupt.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;b1) detecting speed by counting pulses is then done by incrementing or decrementing a counter variable depending on direction (needs to be global, volatile). Calculating speed in the loop() is done by dividing the number of pulses by the time and multiplying it by a factor that takes into account the encoder cpr, gear ration, and scales this to preferred units (rad/s, rpm, ...).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;b2) if your encoder does not have a lot of counts per revolution (cpr), you should consider timing the changes using micros() or using timer1 and timer3 capture modes (more difficult to set up, search for &quot;arduino input capture&quot;). It helps a lot with these encoders to do it as follows: for each change (interrupt), time the whole period of the encoder signal meaning that you need to remember the time stamps of the previous 3 changes. This reduces the variance in the measurement, because you cannot be sure that the encoder A and B signals are 50% of the time up and 50% down, and a quarter of the period apart (check them on an oscilloscope, they are not perfect!). The speed is in this case calculated by dividing a constant by the encoder signal period. The constant again depends on your counts per revolution, gear ratio, and preferred units.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you have the speed information from the encoders, use e.g. PID control to make sure that the motor rotates at the desired speed.&lt;/p&gt;&#xA;" OwnerUserId="13505" LastActivityDate="2018-01-06T09:53:42.437" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14925" PostTypeId="1" AcceptedAnswerId="14934" CreationDate="2018-01-06T17:35:09.410" Score="0" ViewCount="1459" Body="&lt;p&gt;I’ve developed a basic robot that navigates around my son’s Duplo train track.  It works find on the flat parts, but once it reached an incline at the start of a bridge, the wheels just spin and the robot stays at the bottom of the incline.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I’ve 3D printed most of the parts using PLA for everything, but printed tyres using TPU.  The tyres definitely help, as the wheels were originally spinning even on the flat.  Moving the batteries (2xAA) to sit over the drive axle also helped.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What else can I do to increase the traction and give my robot a chance of making it up the hill?&lt;/p&gt;&#xA;" OwnerUserId="19240" LastActivityDate="2018-01-09T13:58:15.433" Title="How to increase the traction of tyres/wheels" Tags="&lt;wheeled-robot&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14926" PostTypeId="1" AcceptedAnswerId="14930" CreationDate="2018-01-06T20:36:20.633" Score="2" ViewCount="66" Body="&lt;p&gt;So I thought I understood well enough what a Jacobian was (in the context of an $n$-DOF robot) -- a function that takes a vector of n joint positions and returns an $n \times n$ matrix that can be multiplied with a vector of $n$ joint velocities to return a velocity vector for the end effector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm using ROS and MoveIt, so I actually already have a function to calculate the Jacobian for my robot from the URDF.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I'm reading lecture notes from the 2005 MIT Intro to Robotics course, and in one (mission-critical, it seems) portion of &lt;a href=&quot;https://ocw.mit.edu/courses/mechanical-engineering/2-12-introduction-to-robotics-fall-2005/lecture-notes/chapter7.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;chapter 7&lt;/a&gt; (between pages 11 and 12), he refers to &quot;$3 \times n$ Jacobian matrices relating the centroid linear velocity and the angular velocity of the $i^\text{th}$ link to joint&quot; as $J^L$ and $J^A$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;He introduces Jacobians in Chapter 5, and indeed I looked through all the rest of the course material, and I don't think he ever explains what these matrices are or how to compute them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could someone enlighten me as to what he's talking about?&lt;/p&gt;&#xA;" OwnerUserId="19241" LastEditorUserId="7610" LastEditDate="2018-01-07T07:41:41.600" LastActivityDate="2018-01-07T14:16:47.867" Title="Confusion about Jacobians stemming from class notes" Tags="&lt;robotic-arm&gt;&lt;dynamics&gt;&lt;jacobian&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="14927" PostTypeId="2" ParentId="14584" CreationDate="2018-01-07T05:09:15.110" Score="7" Body="&lt;p&gt;&lt;strong&gt;Your expectations are rather aggressive for a DC motor.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First - 40Nm (350in-lbs) is A LOT of torque!  Ex: A &lt;a href=&quot;http://www.federalscrewproducts.com/torque-chart.htm&quot; rel=&quot;noreferrer&quot;&gt;max rated torque&lt;/a&gt; for 1/4-20 bolt is only 75 in-lb (8.5Nm).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second - The mechanical power of a motor results from RPM*Torque.  40Nm*100rpm is 0.56hp (420W at 100% efficiency).  That is A LOT, about 1/2 of what today's high end cordless drills can do.  Fortunately it looks like you aren't expecting high torque at the high RPM so actual power will be lower; but, those numbers are likely to affect your motor size (unless you are going to use a transmission).  You will probably need to start thinking about a torque curve.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Regarding DC motors&lt;/strong&gt;: They rely on higher RPM to deliver higher power rather than higher Torque.  This has to do with the physics of the motor.  High Torque with a DC motor is going to require some sort of a &quot;mechanical advantage&quot;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Here are some design options to consider.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;(Metal) Gears/Gearbox.  Planetary gearbox could do.  Plastic gears (at least for the load end) are likely going to fail at high torque.  They simply can't handle the sheer.  You can get some that are pretty small.  Here is gear &lt;a href=&quot;https://www.motiondynamics.com.au/56mm-pmdc-planetary-7-rpm-24nm-368-1.html&quot; rel=&quot;noreferrer&quot;&gt;motor from Motion Dynamics&lt;/a&gt; that can to 40Nm.  Here is &lt;a href=&quot;http://www.bertda.com/Companies/Midwest%20motion/motors/MMP-TM55-24V-GP52-308.htm&quot; rel=&quot;noreferrer&quot;&gt;one from Midwest Motion&lt;/a&gt; that can also do 40Nm (Note: Both use Planetary gearboxes and are pretty slow and no where close to the power you are looking for).&lt;/li&gt;&#xA;&lt;li&gt;A slight variation of the gearbox (but work mentioning separately) is a &lt;a href=&quot;https://en.wikipedia.org/wiki/Worm_drive&quot; rel=&quot;noreferrer&quot;&gt;worm gear/drive&lt;/a&gt;.  This can get you a lot of mechanical advantage; but, it will turn the axis or rotation by 90deg.&lt;/li&gt;&#xA;&lt;li&gt;Use a cord-and-spindle and pulleys if needed to gain additional mechanical advantage (this does great for pulling; but, you are going to need a spring for return).  Think garage door opener (sort of).  Also think human arm (muscles only pull).  Other linear-motion leverage options are &lt;a href=&quot;https://en.wikipedia.org/wiki/Leadscrew&quot; rel=&quot;noreferrer&quot;&gt;leadscrews&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Rack_and_pinion&quot; rel=&quot;noreferrer&quot;&gt;rack-and-pinion&lt;/a&gt; gears.&lt;/li&gt;&#xA;&lt;li&gt;Hydraulics (as mentioned).  This is how car brakes, clutches, and power steering do it.  It allows you to move the motor off the arm.  This is pretty common for large walking robots like &lt;a href=&quot;https://www.bostondynamics.com/atlas&quot; rel=&quot;noreferrer&quot;&gt;Boston Dynamics Atlas&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Note: AC motors are more efficient than DC motors if you don't need positional control.  That is likely why &lt;a href=&quot;https://electronics.stackexchange.com/questions/58236/why-does-a-tesla-car-use-an-ac-motor-instead-of-a-dc-one&quot;&gt;Tesla uses them&lt;/a&gt; in their cars.&lt;/p&gt;&#xA;" OwnerUserId="462" LastEditorUserId="462" LastEditDate="2018-01-07T15:34:13.137" LastActivityDate="2018-01-07T15:34:13.137" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="14928" PostTypeId="2" ParentId="14925" CreationDate="2018-01-07T05:11:02.437" Score="0" Body="&lt;p&gt;Quickest solution is to just roughen the surface of the track using sand paper.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But if you are talking about a modification to the robot itself, you can use different type of material for the tyre.  PU has many grades.  &lt;/p&gt;&#xA;" OwnerUserId="10691" LastActivityDate="2018-01-07T05:11:02.437" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14930" PostTypeId="2" ParentId="14926" CreationDate="2018-01-07T08:19:52.760" Score="5" Body="&lt;p&gt;&lt;strong&gt;Short answer&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=2&amp;amp;ved=0ahUKEwjExZ7IrcXYAhVJvo8KHSiDB5AQFggyMAE&amp;amp;url=http%3A%2F%2Fhome.deib.polimi.it%2Fgini%2Frobot%2Fdocs%2Fspong.pdf&amp;amp;usg=AOvVaw2x3AuuYcFw_Ql54tAiVtGu&quot; rel=&quot;nofollow noreferrer&quot;&gt;Robot Dynamics and Control&lt;/a&gt; by Spong &lt;em&gt;et al.&lt;/em&gt; (especially Chapter 5) can definitely help you on this matter.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Long answer&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First of all, you are partially correct about a Jacobian. It is indeed a function of joint values (say $q \in \mathbf{R}^n$). However, as a Jacobian maps a joint velocity to an end-effector velocity, its dimension is &lt;em&gt;not&lt;/em&gt; generally $n \times n$, but rather $m \times n$, where $n$ is the number of DOFs your robot has and $m$ is the dimension of the velocity vector you want to map a joint velocity vector to.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's consider the following equation&#xA;$$\dot{x} = J(q)\dot{q},$$&#xA;where $\dot{x}$ is an end-effector velocity vector. The vector $\dot{x}$ is generally a 6-vector that is (generally) a vertical stack of linear and angular velocity, i.e.&#xA;$$\dot{x} = \begin{bmatrix}v\\ \omega\end{bmatrix}.$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking closely, one can see that the first three rows of $J(q)$ are mapping the joint values $q$ to the &lt;em&gt;linear&lt;/em&gt; end-effector velocity $v \in \mathbf{R}^{3}$. Similarly, the last three rows are mapping $\dot{q}$ to the &lt;em&gt;angular&lt;/em&gt; end-effector velocity $\omega \in \mathbf{R}^{3}$. Therefore, one can actually writes&#xA;$$J = \begin{bmatrix}J^L\\J^A\end{bmatrix},$$&#xA;where $J^L$ and $J^A$ are such that $v = J^L \dot{q}$ and $\omega = J^A \dot{q}.$ Computing $J^L$ and $J^A$ can then be done accordingly by analyzing the relationship between the joint velocity and the end-effector velocity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For detailed analysis (and also how $J^L$ and $J^A$ can be computed), you can consult Spong's book I mentioned above.&lt;/p&gt;&#xA;" OwnerUserId="7610" LastEditorUserId="7610" LastEditDate="2018-01-07T14:16:47.867" LastActivityDate="2018-01-07T14:16:47.867" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14932" PostTypeId="1" CreationDate="2018-01-07T15:12:02.240" Score="0" ViewCount="283" Body="&lt;p&gt;I'm working on a particle filter implementation in Matlab and I found one very good in the Robotics Toolbox (available here &lt;a href=&quot;https://github.com/petercorke/robotics-toolbox-matlab&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/petercorke/robotics-toolbox-matlab&lt;/a&gt;). My problem is that I really don't know how to modify it in order to use it with a Laser scanner, I know that with a know map the laser beam will give the distance and angle (kind o like RangeAndBearing) but I haven't understood well how the likelihood field of the map fits into this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the end my question is how can I get the RangeAndBearing Measurement from a Laser scanner in order to use it in the particle filter?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance&lt;/p&gt;&#xA;" OwnerUserId="19226" LastActivityDate="2018-06-08T08:06:29.610" Title="Laser Scanner for localization in particle filter" Tags="&lt;localization&gt;&lt;matlab&gt;&lt;particle-filter&gt;&lt;laser&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14933" PostTypeId="1" AcceptedAnswerId="15132" CreationDate="2018-01-08T01:44:51.843" Score="0" ViewCount="1696" Body="&lt;p&gt;when I run roslaunch mavros px4.launch command process start and shut down.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt; ... logging to /home/yograj/.ros/log/77663396-f411-11e7-b93c-3c77e68de09b/roslaunch-yograj-Inspiron-5537-12518.log&#xA;Checking log directory for disk usage. This may take awhile.&#xA;Press Ctrl-C to interrupt&#xA;Done checking log file disk usage. Usage is &amp;lt;1GB.&#xA;&amp;gt;&#xA;&amp;gt; started roslaunch server http://yograj-Inspiron-5537:40223/&#xA;&amp;gt; &#xA;&amp;gt; SUMMARY&#xA;&amp;gt;&#xA;&amp;gt; ========&#xA;&amp;gt; &#xA;&amp;gt; CLEAR PARAMETERS&#xA;&amp;gt;&#xA;&amp;gt;  * /mavros/&#xA;&amp;gt; PARAMETERS&#xA;&amp;gt;&#xA;&amp;gt;  * /mavros/cmd/use_comp_id_system_control: False&#xA;&amp;gt;  * /mavros/conn/heartbeat_rate: 1.0&#xA;&amp;gt;  * /mavros/conn/system_time_rate: 1.0&#xA;&amp;gt;  * /mavros/conn/timeout: 10.0&#xA;&amp;gt;  * /mavros/conn/timesync_rate: 10.0&#xA;&amp;gt;  * /mavros/distance_sensor/hrlv_ez4_pub/field_of_view: 0.0&#xA;&amp;gt;  * /mavros/distance_sensor/hrlv_ez4_pub/frame_id: hrlv_ez4_sonar&#xA;&amp;gt;  * /mavros/distance_sensor/hrlv_ez4_pub/id: 0&#xA;&amp;gt;  * /mavros/distance_sensor/hrlv_ez4_pub/orientation: ROLL_180&#xA;&amp;gt;  * /mavros/distance_sensor/hrlv_ez4_pub/send_tf: True&#xA;&amp;gt;  * /mavros/distance_sensor/hrlv_ez4_pub/sensor_position/x: 0.0&#xA;&amp;gt;  * /mavros/distance_sensor/hrlv_ez4_pub/sensor_position/y: 0.0&#xA;&amp;gt;  * /mavros/distance_sensor/hrlv_ez4_pub/sensor_position/z: -0.1&#xA;&amp;gt;  * /mavros/distance_sensor/laser_1_sub/id: 3&#xA;&amp;gt;  * /mavros/distance_sensor/laser_1_sub/orientation: ROLL_180&#xA;&amp;gt;  * /mavros/distance_sensor/laser_1_sub/subscriber: True&#xA;&amp;gt;  * /mavros/distance_sensor/lidarlite_pub/field_of_view: 0.0&#xA;&amp;gt;  * /mavros/distance_sensor/lidarlite_pub/frame_id: lidarlite_laser&#xA;&amp;gt;  * /mavros/distance_sensor/lidarlite_pub/id: 1&#xA;&amp;gt;  * /mavros/distance_sensor/lidarlite_pub/orientation: ROLL_180&#xA;&amp;gt;  * /mavros/distance_sensor/lidarlite_pub/send_tf: True&#xA;&amp;gt;  * /mavros/distance_sensor/lidarlite_pub/sensor_position/x: 0.0&#xA;&amp;gt;  * /mavros/distance_sensor/lidarlite_pub/sensor_position/y: 0.0&#xA;&amp;gt;  * /mavros/distance_sensor/lidarlite_pub/sensor_position/z: -0.1&#xA;&amp;gt;  * /mavros/distance_sensor/sonar_1_sub/id: 2&#xA;&amp;gt;  * /mavros/distance_sensor/sonar_1_sub/orientation: ROLL_180&#xA;&amp;gt;  * /mavros/distance_sensor/sonar_1_sub/subscriber: True&#xA;&amp;gt;  * /mavros/fake_gps/eph: 2.0&#xA;&amp;gt;  * /mavros/fake_gps/epv: 2.0&#xA;&amp;gt;  * /mavros/fake_gps/fix_type: 3&#xA;&amp;gt;  * /mavros/fake_gps/geo_origin/alt: 408.0&#xA;&amp;gt;  * /mavros/fake_gps/geo_origin/lat: 47.3667&#xA;&amp;gt;  * /mavros/fake_gps/geo_origin/lon: 8.55&#xA;&amp;gt;  * /mavros/fake_gps/gps_rate: 5.0&#xA;&amp;gt;  * /mavros/fake_gps/mocap_transform: True&#xA;&amp;gt;  * /mavros/fake_gps/satellites_visible: 5&#xA;&amp;gt;  * /mavros/fake_gps/tf/child_frame_id: fix&#xA;&amp;gt;  * /mavros/fake_gps/tf/frame_id: map&#xA;&amp;gt;  * /mavros/fake_gps/tf/listen: False&#xA;&amp;gt;  * /mavros/fake_gps/tf/rate_limit: 10.0&#xA;&amp;gt;  * /mavros/fake_gps/tf/send: False&#xA;&amp;gt;  * /mavros/fake_gps/use_mocap: True&#xA;&amp;gt;  * /mavros/fake_gps/use_vision: False&#xA;&amp;gt;  * /mavros/fcu_url: udp://:14540@127....&#xA;&amp;gt;  * /mavros/gcs_url: &#xA;&amp;gt;  * /mavros/global_position/child_frame_id: base_link&#xA;&amp;gt;  * /mavros/global_position/frame_id: map&#xA;&amp;gt;  * /mavros/global_position/rot_covariance: 99999.0&#xA;&amp;gt;  * /mavros/global_position/tf/child_frame_id: base_link&#xA;&amp;gt;  * /mavros/global_position/tf/frame_id: map&#xA;&amp;gt;  * /mavros/global_position/tf/global_frame_id: earth&#xA;&amp;gt;  * /mavros/global_position/tf/send: False&#xA;&amp;gt;  * /mavros/global_position/use_relative_alt: True&#xA;&amp;gt;  * /mavros/image/frame_id: px4flow&#xA;&amp;gt;  * /mavros/imu/angular_velocity_stdev: 0.000349065850399&#xA;&amp;gt;  * /mavros/imu/frame_id: base_link&#xA;&amp;gt;  * /mavros/imu/linear_acceleration_stdev: 0.0003&#xA;&amp;gt;  * /mavros/imu/magnetic_stdev: 0.0&#xA;&amp;gt;  * /mavros/imu/orientation_stdev: 1.0&#xA;&amp;gt;  * /mavros/local_position/frame_id: map&#xA;&amp;gt;  * /mavros/local_position/tf/child_frame_id: base_link&#xA;&amp;gt;  * /mavros/local_position/tf/frame_id: map&#xA;&amp;gt;  * /mavros/local_position/tf/send: False&#xA;&amp;gt;  * /mavros/local_position/tf/send_fcu: False&#xA;&amp;gt;  * /mavros/mission/pull_after_gcs: True&#xA;&amp;gt;  * /mavros/mocap/use_pose: True&#xA;&amp;gt;  * /mavros/mocap/use_tf: False&#xA;&amp;gt;  * /mavros/odometry/estimator_type: 3&#xA;&amp;gt;  * /mavros/odometry/frame_tf/desired_frame: ned&#xA;&amp;gt;  * /mavros/plugin_blacklist: ['safety_area', '...&#xA;&amp;gt;  * /mavros/plugin_whitelist: []&#xA;&amp;gt;  * /mavros/px4flow/frame_id: px4flow&#xA;&amp;gt;  * /mavros/px4flow/ranger_fov: 0.118682389136&#xA;&amp;gt;  * /mavros/px4flow/ranger_max_range: 5.0&#xA;&amp;gt;  * /mavros/px4flow/ranger_min_range: 0.3&#xA;&amp;gt;  * /mavros/safety_area/p1/x: 1.0&#xA;&amp;gt;  * /mavros/safety_area/p1/y: 1.0&#xA;&amp;gt;  * /mavros/safety_area/p1/z: 1.0&#xA;&amp;gt;  * /mavros/safety_area/p2/x: -1.0&#xA;&amp;gt;  * /mavros/safety_area/p2/y: -1.0&#xA;&amp;gt;  * /mavros/safety_area/p2/z: -1.0&#xA;&amp;gt;  * /mavros/setpoint_accel/send_force: False&#xA;&amp;gt;  * /mavros/setpoint_attitude/reverse_thrust: False&#xA;&amp;gt;  * /mavros/setpoint_attitude/tf/child_frame_id: target_attitude&#xA;&amp;gt;  * /mavros/setpoint_attitude/tf/frame_id: map&#xA;&amp;gt;  * /mavros/setpoint_attitude/tf/listen: False&#xA;&amp;gt;  * /mavros/setpoint_attitude/tf/rate_limit: 50.0&#xA;&amp;gt;  * /mavros/setpoint_attitude/use_quaternion: False&#xA;&amp;gt;  * /mavros/setpoint_position/mav_frame: LOCAL_NED&#xA;&amp;gt;  * /mavros/setpoint_position/tf/child_frame_id: target_position&#xA;&amp;gt;  * /mavros/setpoint_position/tf/frame_id: map&#xA;&amp;gt;  * /mavros/setpoint_position/tf/listen: False&#xA;&amp;gt;  * /mavros/setpoint_position/tf/rate_limit: 50.0&#xA;&amp;gt;  * /mavros/setpoint_velocity/mav_frame: LOCAL_NED&#xA;&amp;gt;  * /mavros/startup_px4_usb_quirk: True&#xA;&amp;gt;  * /mavros/sys/disable_diag: False&#xA;&amp;gt;  * /mavros/sys/min_voltage: 10.0&#xA;&amp;gt;  * /mavros/target_component_id: 1&#xA;&amp;gt;  * /mavros/target_system_id: 1&#xA;&amp;gt;  * /mavros/tdr_radio/low_rssi: 40&#xA;&amp;gt;  * /mavros/time/time_ref_source: fcu&#xA;&amp;gt;  * /mavros/time/timesync_avg_alpha: 0.6&#xA;&amp;gt;  * /mavros/time/timesync_mode: MAVLINK&#xA;&amp;gt;  * /mavros/vibration/frame_id: base_link&#xA;&amp;gt;  * /mavros/vision_pose/tf/child_frame_id: vision_estimate&#xA;&amp;gt;  * /mavros/vision_pose/tf/frame_id: map&#xA;&amp;gt;  * /mavros/vision_pose/tf/listen: False&#xA;&amp;gt;  * /mavros/vision_pose/tf/rate_limit: 10.0&#xA;&amp;gt;  * /mavros/vision_speed/listen_twist: False&#xA;&amp;gt;  * /rosdistro: kinetic&#xA;&amp;gt;  * /rosversion: 1.12.12&#xA;&amp;gt; &#xA;&amp;gt; NODES&#xA;&amp;gt;   /&#xA;&amp;gt;     mavros (mavros/mavros_node)&#xA;&amp;gt; &#xA;&amp;gt; ROS_MASTER_URI=http://localhost:11311&#xA;&amp;gt; &#xA;&amp;gt; process[mavros-1]: started with pid [12536]&#xA;&amp;gt; [FATAL] [1515375213.809935923]: UAS: GeographicLib exception: File not readable /usr/share/GeographicLib/geoids/egm96-5.pgm | Run install_geographiclib_dataset.sh script in order to install Geoid Model dataset!&#xA;&amp;gt; &#xA;&amp;gt; ================================================================================&#xA;&amp;gt; &#xA;&amp;gt; REQUIRED process [mavros-1] has died!&#xA;&amp;gt; process has finished cleanly&#xA;&amp;gt; log file: /home/yograj/.ros/log/77663396-f411-11e7-b93c-3c77e68de09b/mavros-1*.log&#xA;&amp;gt; Initiating shutdown!&#xA;&amp;gt; &#xA;&amp;gt; ================================================================================&#xA;&amp;gt; &#xA;&amp;gt; [mavros-1] killing on exit&#xA;&amp;gt; shutting down processing monitor...&#xA;&amp;gt; ... shutting down processing monitor complete&#xA;&amp;gt; done&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="11238" LastEditorUserId="11238" LastEditDate="2018-01-10T12:05:06.200" LastActivityDate="2018-02-05T08:54:09.050" Title="roslaunch mavros px4.launch not working properly" Tags="&lt;ros&gt;&lt;mavlink&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14934" PostTypeId="2" ParentId="14925" CreationDate="2018-01-08T14:17:26.033" Score="3" Body="&lt;p&gt;Two seemingly contradictory approaches come to mind.  One is to increase the friction between the wheels and the track.  You can do this by coating the tires with a soft material, such as a gasket or brush-on rubber compound.  This approach also benefits if you can increase the surface area of the tire that touches the track.  Increasing the radius of the tires can help with this, as can widening them up to the width of the track.  Adding weight to the robot will also linearly increase the force of friction between the tires and the track.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A second approach is to attempt to get positive engagement between the tire and the track instead of relying on friction.  This would work if you can add teeth to your track and corresponding teeth to the wheels.  The downside of this approach is that the tires will not roll as smoothly on flat tracks.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2018-01-08T14:17:26.033" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14935" PostTypeId="2" ParentId="14932" CreationDate="2018-01-08T15:50:13.870" Score="1" Body="&lt;p&gt;The RangeBearing &quot;sensor&quot; is used to &quot;find&quot; landmarks given a map of landmarks. I looked at the source code a bit and it doesn't seem to be an especially useful or realistic &quot;sensor.&quot; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://github.com/petercorke/robotics-toolbox-matlab/blob/master/Map.m&quot; rel=&quot;nofollow noreferrer&quot;&gt;Map&lt;/a&gt; creates a set of features - &lt;code&gt;map.map = dim * (2*rand(2, nfeatures)-1);&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://github.com/petercorke/robotics-toolbox-matlab/blob/master/RangeBearingSensor.m&quot; rel=&quot;nofollow noreferrer&quot;&gt;RangeBearingSensor&lt;/a&gt; gets those set of features - &lt;code&gt;jf = 1:numcols(s.map.map);&lt;/code&gt; and then picks a random one to return - &lt;code&gt;jf = jf(i);&lt;/code&gt;, &lt;strong&gt;or&lt;/strong&gt; you can pick a particular feature - &lt;code&gt;xf = s.map.map(:,jf);&lt;/code&gt; and get the range and heading to that feature - &lt;code&gt;dx = xf(1,:) - xv(:,1); dy = xf(2,:) - xv(:,2);&lt;/code&gt; and &lt;code&gt;z = [sqrt(dx.^2 + dy.^2) atan2(dy, dx)-xv(:,3) ];&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The point is, the code &lt;em&gt;completely glosses over&lt;/em&gt; how you reconcile a feature on a map to the vehicle. You can say, &quot;where is feature XX?&quot; and the RangeBearingSensor simply returns a range and heading. There's no code in there that really explains how you determine &lt;em&gt;which&lt;/em&gt; feature in a set of scan data is feature XX.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For your case, in order to create the same functionality as &lt;code&gt;RangeBearingSensor&lt;/code&gt;, you need to know roughly where feature XX is in order to locate it in the scan data, and then you use the scan data for that feature to return where it is. Your scan data might include a bunch of features, or none, and it's up to you to:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Estimate where the features are, so you can&lt;/li&gt;&#xA;&lt;li&gt;Use the scan data to measure where the features are, so you can&lt;/li&gt;&#xA;&lt;li&gt;Supply the particle filter with measurements, so you can&lt;/li&gt;&#xA;&lt;li&gt;Estimate where the features are.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;My point is that you're not going to (easily) replicate the functionality of &lt;code&gt;RangeBearingSensor&lt;/code&gt; with your own lidar sensor code because &lt;code&gt;RangeBearingSensor&lt;/code&gt; uses knowledge that is not directly obtainable - i.e., where all the landmarks are. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might have two landmarks that are (statistically) in the same location or otherwise close enough that they are indistinguishable from your sensor's point of view. Your sensor can't tell them apart, but &lt;code&gt;RangeBearingSensor&lt;/code&gt; uses its knowledge to generate a reading anyways because it generates measurements by taking a perfect measurement to an exact landmark and then adding noise. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your scenario is trying to take noisy data and &lt;em&gt;first identify&lt;/em&gt; the landmark, then use the landmark plus the measurement to eliminate the noise.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-01-08T15:50:13.870" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14938" PostTypeId="2" ParentId="14051" CreationDate="2018-01-09T06:26:46.293" Score="1" Body="&lt;p&gt;It might work but you need an intensity calibration, to get rid of the false positive. Although, Velodyne calibrates the intensity before they ship the product it is usually not that accurate.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You need to change the color coding to gray to see the lanes with bare eyes or adjust histogram curve to observe the road marks clearly. But definitely, my vlp16 is not that sensitive and very difficult to recognize road marks. I guess a post processing is required to do that.&lt;/p&gt;&#xA;" OwnerUserId="19219" LastEditorUserId="19219" LastEditDate="2018-02-20T00:49:51.590" LastActivityDate="2018-02-20T00:49:51.590" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14939" PostTypeId="2" ParentId="10525" CreationDate="2018-01-09T06:34:49.173" Score="0" Body="&lt;p&gt;Yes, &lt;a href=&quot;http://experimentalavionics.com/2016/10/26/bno055-disappointments/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this person&lt;/a&gt;, who experimented with the BNO055 IMU and reported a lot of problems getting reliable readings from the magnetometer, said these problems were partially fixed by:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;surrounding the sensor in a Faraday cage (i.e. metal shielding)&lt;/li&gt;&#xA;&lt;li&gt;shortening the wires connecting the sensor to the other electronics&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="740" LastActivityDate="2018-01-09T06:34:49.173" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14941" PostTypeId="2" ParentId="8271" CreationDate="2018-01-09T12:21:30.080" Score="-2" Body="&lt;p&gt;For any underwater thrusters you should use a motor with as low rpm as you can (at the same time that means a bigger torgue). And as big propeller as... you should test how big it can. For very low rpm (lets to say 300-500 rpm) it can 3-4 blades).&lt;/p&gt;&#xA;" OwnerUserId="18132" LastEditorUserId="37" LastEditDate="2018-01-09T19:19:11.857" LastActivityDate="2018-01-09T19:19:11.857" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14942" PostTypeId="2" ParentId="14925" CreationDate="2018-01-09T13:52:26.213" Score="1" Body="&lt;p&gt;In addition to SteveO's approaches you could try to change the center of gravity in a way, that the mass of the robot is pushing more downwards onto the wheels when it goes uphill instead of more and more draging it in vertical direction.&#xA;This means: Adding some more mass directly above  driving wheels and/or using the rear wheels for driving the robot, might help. Also implementing an all-wheel-drive might be beneficial.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another idea is to use a tire profile, instead of &quot;slicks&quot;. But, this is intuitive and might even worse the issues if the track itself is flat and even.&lt;/p&gt;&#xA;" OwnerUserId="19123" LastEditorUserId="19123" LastEditDate="2018-01-09T13:58:15.433" LastActivityDate="2018-01-09T13:58:15.433" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14943" PostTypeId="1" AcceptedAnswerId="14944" CreationDate="2018-01-09T14:54:49.303" Score="0" ViewCount="15199" Body="&lt;p&gt;How much weight can following Brushed Motors carry together?&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;4X 12 Volt 100rpm supplied voltage =&gt; (5/17)*12&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;2X 12 Volt 100rpm supplied voltage =&gt; (7/17)*12&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;These motors are basically the wheels for my battle bot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.ebay.in/itm/172219915822?aff_source=Sok-Goog&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Here&quot;&gt;Here&lt;/a&gt; is the link to the Motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am new to this so please tell me if I'm wrong somewhere.&lt;/p&gt;&#xA;" OwnerUserId="19270" LastEditorUserId="19270" LastEditDate="2018-01-10T13:25:08.953" LastActivityDate="2018-01-15T18:02:44.310" Title="How much weight can DC Motor carry?" Tags="&lt;motor&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14944" PostTypeId="2" ParentId="14943" CreationDate="2018-01-09T17:06:47.207" Score="3" Body="&lt;p&gt;Well, to answer this question for your special case, one needs more information about the motors. Maybe, you can supply a product code. And one needs more details of the involved mechanics... is it a car-like application? Is it going up-hill or down-hill? How long needs the motion to last? How well is the cooling? And so on...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'll try to give you an idea on what all these data means which you can find out about a motor...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can approximately calculate some kind of upper limit for the &quot;power&quot; a motor can deliver for an infinite duration, due to thermal design limits at lets say 'standard conditions' (normal room temperature, normal ventilation, ...):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A Motor has one or multiple phases (coils that will induce a magnetic field), which have:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;I_max&lt;/code&gt; - a maximum design current (in the unit: Ampere or milli-Ampere),&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;R&lt;/code&gt;- an electrical resistance (given in the unit Ohms)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;U_max&lt;/code&gt; - a maximum design voltage (given in Volts)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;At least two of the above must be known. The relation between them is: R = U_max / I_max, so you can calculate the third one. You can measure the current for a given voltage or the restance of the coil, if you need to. But, make sure the motor doesn't move while measuring (e.g. by fixing the axle).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have I_max and U_max you can calculate P_max = I_max * U_max [Unit: Watts]. This will be the maximum power the Motor will -consume- without destruction under normal conditions! It can stand more power, if you improve cooling. And you can overload a motor for a limited time, until it gets too hot and finally breaks... &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each motor has an efficiency which depends on the motor itself and how fast it is spinning (see datasheet). This means the ratio of energy in form of motion or acceleration that is produced relative to its consumed energy. At optimum speed this can be as low as 50% or even higher than 90%, this depends on the motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each good motor datasheet has some kind of curve that gives you an value for efficiency (%), torque (typically in: N&lt;em&gt;cm, N&lt;/em&gt;m, mN*m) and motor current. At speed=0 the motor current is the highest (&lt;code&gt;I_max&lt;/code&gt;) and the torque (=&lt;code&gt;holding torque&lt;/code&gt;) is also at its highest value. The torque is the value for the rotational force. The holding torque is achieved when applying the nominal/design voltage of your motor at stand-still (=very short period until it moves faster) and/or blocked motion (=until not blocked anymore, good for measurements). If you use a higher voltage (which is valid but might damage the motor), the holding torque will also be higher.&#xA;You can measure the holding torque, by mounting a little lever to the motor (e.g. &lt;code&gt;r&lt;/code&gt;=10 cm=0.1m long) which the motor pushes onto e.g. a kittchen scale. The mass &lt;code&gt;m&lt;/code&gt; (in Kilograms, e.g. &lt;code&gt;m&lt;/code&gt;=34g=0.034kg) measured by the scale can then be used to calculate the force, which is &lt;code&gt;F = m * g&lt;/code&gt;, where &lt;code&gt;g&lt;/code&gt;is the earth gravity constant (approx. 9.81 m/s²). Then you can multiply the length of your lever by the measured force, you'll get the torque: M = F * r = m * g * r = 0.034kg * 9.81 m/s² * 0.1m = 0,033 Nm ... where &quot;Nm&quot; means &quot;Newton-Meters&quot; or if you use the lever length in cm it is: M = 0.034kg * 9.81 m/s² * 10cm = 3,33 Ncm (Newton-Centi-Meters). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mechanical systems usually need to overcome the stiction first, which usually depends on the mass of it (which pushes it onto a surface), the materials of the material that has contact to the surface and the material of the surface itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is Stiction? Here is a little experiment: You might have noticed that your smartphone will not slide downward an slightly inclined surface... the gravitational force is not strong enough, yet. But, if you push it a bit, it will overcome stiction (&quot;sticking to the surface&quot;) and will slide on its own. As said, how strong the stiction is depends on the material of the thing... e.g. rubber on wood has an higher stiction than flat, polished plastic on polished glass. So also the roughness of the materials have an influence.&#xA;The force to overcome Stictions can be calculated by the formula: &lt;code&gt;Fs = mu * Fg&lt;/code&gt;, were &lt;code&gt;mu&lt;/code&gt; is the constant for the materials and &lt;code&gt;Fg&lt;/code&gt; is the force that pushes the thing to the surface. In a simple case (e.g. a smartphone laying on a flat and horizontal surface, no inclination) this can be &lt;code&gt;Fg = m * g&lt;/code&gt;, where &lt;code&gt;m&lt;/code&gt; is the mass (e.g. of the phone) to be moved and &lt;code&gt;g&lt;/code&gt; = 9.81 m/s² (earth gravity constant) again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The needed torque depends on the mechanical system. In a simple case you just mount some wheels on the motor. Then the radius (half of the diameter) of your wheels are r. And your needed torque to overcome stiction will then be Ms = Fs * r. If you use larger wheels you need a higher torque. If you use gears you can also influence the needed torque (in both directions), but you'll decrease the efficiency of the system and - at the same time - introduce a now stiction torque of the gears (which might or might be significant).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As soon we've overcome stiction, you will have still friction that might stop things from moving... that means deaccelerating it until it finally stops again. But, theses forces are usually much smaller (for slow speeds only!). And remember you can - for a short period of time - drive your motor with a higher current/voltage than specified!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All those friction, which depends on a lot of other factors, limits how fast it can move (top speed)... and finally how fast it can accelerate to that speed (maximum acceleration). This all falls under the topic &quot;dynamics&quot; and there is lots of it to learn... but, the basics can be learned quite fast.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;So your implicit questions actually are:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;How much holding torque do my motors have? (needed: Motor Datasheet)&lt;/li&gt;&#xA;&lt;li&gt;How much power can my motor controller provide (for a short [or infinite] period of time)?&lt;/li&gt;&#xA;&lt;li&gt;How much torque do I need to overcome stiction? (needed: Info on mechanics, as kind of wheels, surface, style of movement)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I hope you got some information to start your further investigation on that topic. If you have more questions, just ask.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Useful Links:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Stiction&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Stiction&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Friction&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Friction&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Analytical_dynamics&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Analytical_dynamics&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2&gt;Edit&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;You provided a link to some technical data, which are:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;   Weight: 100 gm(Approx.)&#xA;   RPM: 100&#xA;   Operating Voltage: 12V DC&#xA;   Gearbox: Attached Plastic (spur)Gearbox&#xA;   Shaft diameter: 6mm&#xA;   Shaft Length: 21 mm&#xA;   Torque: 1.2 Kg-cm.&#xA;   No-load current = 60 mA(Max)&#xA;   Load current = 300 mA(Max).&#xA;   Dimensions: Body Diameter: 38mm; Motor Length with shaft: 77 mm;&#xA;   Same size motor available in various RPMs.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;As we can see, the motor already has some gearbox attached to it, which reduces the maximum rotational to 100 rpm (=rotations per minute) and increases the available torque at the same time. The maximum torque is given as 1.2 kg*cm (which includes the gearbox-transition), which means having wheels with an radius of 1 cm (or 2cm in diameter) will give you a force that is equivalent to 1.2 kg in weight at nominal voltage, as long as your electronics can provide a current of 300 mA (load current).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, 1.2 kg &quot;weight&quot; force doesn't mean, that you are limited to a weight of 1.2 kg for e.g. a robot, as 1.2 kg do not mean the weight of the &quot;thing&quot; which is moved but an equivalent force. It means a force that is equivalent to the force that gravity causes at 1.2 liters of water (in container which we asume to have no weight) to be pulled downwards. If you wanted to pull 1.2 kg in upwards direction, you would need a bit more than this force...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you just need to drive a robot on a 100% horizontal surface you need to overcome Stiction (see formulae above), which for a robot with a weight of 1.2kg on wheels is much less than a force of 1.2kg &quot;weight&quot; (=1.2kg * 9.81m/s² = 11.8N). Anyhow, your robot will also need to climb slightly upwards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lets assume 20% inclination, which means you need a force equivalent to &lt;code&gt;sin(20°)&lt;/code&gt; times the weight of the robot. And let us assume this force needed is much more than Stiction. In that case you can pull &lt;code&gt;1/sin(20°)=2.92&lt;/code&gt; times 1.2 kg = ~3.5 kg upwards on a surface with an inclination below 20° with this motor using wheels with an radius of r=1cm. If your wheels are bigger, the maximum robot weight will be less (e.g. r=2cm ==&gt; 3.5kg/2 = 1.75kg).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, your speed will get near to zero if you inclination is near to 20%. So every weight that is less than this limit ensures you some reserve for accelerating your robot, even at 20% inclination. If our maximum robot weight is 3.5 kg according to the above calculation and the real robot has a weight of 2kg, then your acceleration force will be like 1.5kg &quot;weight&quot; pulling it forward on a horizontal surface. As stated above, 1.5 kg &quot;weight&quot; means in fact a force of &lt;code&gt;1.5 kg * 9.81 m/s² = 14.715 kg*m/s²&lt;/code&gt;. Our example robot having a weight m=2kg will be accelerated by a force of F=14.716 kg*m/s². The formula that relates mass, force and acceleration is: &lt;code&gt;F = m*a&lt;/code&gt;, where &lt;code&gt;F&lt;/code&gt; is the force, &lt;code&gt;m&lt;/code&gt; is the mass and &lt;code&gt;a&lt;/code&gt; is the acceleration. So &lt;code&gt;a = F/m&lt;/code&gt; would be &lt;code&gt;14.715 kg*m/s²&lt;/code&gt; divided by 2 kg and therefore: ~7.358 m/s². This means within 1 second your robot would reach a speed of 7.36 m/s (or 26.5 km/h) if there was no friction. Also the maximum speed is 100 rpm; so having the wheel radius of r=1cm the robot will move forward U=2*r*3.14=6.28 cm. Having 100 revolutions per minute gives us 628 cm = 6.28 m per minute or 0.1046 m/s as our top speed, if there is just the friction of the motor itself within its gearbox and so on... so it moves 10,46 cm forward per second. If you need more speed you need bigger wheels or some gears... but as said, your maximum weight will drop then.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IMPORTANT: Calculation of all the friction correct is even more complicated, so dont expect the full 10,46 cm per second! This is just an upper limit that is known for sure...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And of course having 4 motors will give you 4 times the torque, but will also increase the weight of the whole robot and the overall current needed to drive the motors.&lt;/p&gt;&#xA;" OwnerUserId="19123" LastEditorUserId="19123" LastEditDate="2018-01-15T18:02:44.310" LastActivityDate="2018-01-15T18:02:44.310" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14945" PostTypeId="2" ParentId="531" CreationDate="2018-01-09T19:14:38.607" Score="0" Body="&lt;p&gt;As you said you want to use it to detect, if your robot moves forward, I think it is good enough, if your robot is big enough.&#xA;But, you need to calibrate it! (Not once but continously... before and during operation). You need of course some power supply and there should be no huge metal parts, magnets or coils in nearby, so that the magnetometer isn't disturbed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Within a controlled environment, a magnetometer will give you stable readings on the orientation (where is north as a 3D vector), which won't drift. However it is quite slow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An gyroscope is faster and will give you information on rotation. However, you'll measure some &quot;biased error&quot;. And to get your orientation, you'll sum up all measurements... that contain this biased error. And this will give you an orientation that slightly rotates, because the error isn't 0 on average but has a negative or positive offset value (for each axis!) that even changes over time (e.g. influenced by temperature, battery voltage). However, one can use the Magnetometer to detect this, as it is quite stable (if not disturbed by magnets and so on).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The accelerometer will give you the acceleration in each direction, but also with an biased error! If you integrate up the acceleration (including the error) over time, you will get the speed... which will increase more and more, due to the biased error. So even your robot doesn't move at all, it would actually give you more than the speed of light within a very short time span. Also it is biased by gravition. That means under normal conditions you measure a downwards acceleration (~9.81 m/s²) - except if the sensor is in free fall, where it measures ~0 m/s².&#xA;The only way to get around this, is to make assumptions in the motion model. For example, if you mount it to the foot/shoe of a robot (which works really good for humans). You can assume: if you only measure something near to 9.81 m² acceleration pointing downwards, the speed is 0. That means you reset your speed to 0 m/s, and only let it have different values if the accelerations differs more than a threshold value.&#xA;There are also some online-calibration algorithms for accelerometers. They assume that you either measure some acceleration close to 0 m/s² (free fall) that can be used to correct the bias. Or you measure something that is earth graviation in any direction +/- some unbiased error. You can imagine that your measurements are either assumed as a vector from the center to the sphere's surface which has a radius of approx. 9.81 [m/s²]. Note that the earth gravition isn't exact and slightly location dependent. And if your robot needs to work on other planets or in space, there will be different values, too! ;-)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An ATMega328 should be fast enough to do those calculations, but maybe not at the best possible accuracy that can be achieved by these sensors. I don't know what kind of software is delevered with this board... If nothing is provided you need to grasp the following topics: kalman filters and quaternions; or need to find some software that does it for you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think it is doable with this board, but it depends much on details of your application... needed accuracy and how big your dimensions are (is your robot 3 cm small or is it a meter in size)? Do you need motion and speed only?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyhow, for sake of simplicity, I would suggest you to use a vision based location tracking instead. You can record a video of the robots &quot;vision&quot; (or &quot;eyes&quot;) and detect the size and location of one or multiple markers in real time. If you know where the marker is and how big it is in reality, you can estimate the robots position. This is much simpler and much more accurate, but might need a bit more processing power and a camera, but saves you a lot of time.&lt;/p&gt;&#xA;" OwnerUserId="19123" LastActivityDate="2018-01-09T19:14:38.607" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14946" PostTypeId="2" ParentId="14933" CreationDate="2018-01-09T21:26:04.867" Score="0" Body="&lt;p&gt;There's an error at the end of the wall of text you pasted in that states, &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;GeographicLib exception: File not readable /usr/share/GeographicLib/geoids/egm96-5.pgm&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;strong&gt;Run install_geographiclib_dataset.sh script in order to install Geoid Model dataset!&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Did you run that script?&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-01-09T21:26:04.867" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14948" PostTypeId="1" AcceptedAnswerId="14951" CreationDate="2018-01-10T07:00:45.200" Score="0" ViewCount="1793" Body="&lt;p&gt;I run the following command to install GeographicLib datasets for mavros inside the catkin_ws directory (catkin workspace). &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;./src/mavros/mavros/scripts/install_geographiclib_datasets.sh&#xA;This script require root privileges!&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;but I get that message in return. what does it mean and how to get the above mavros dependency(GeographicLib datasets) installed successfully?&#xA;Before this command, I followed the source installation process as mentioned &lt;a href=&quot;https://github.com/mavlink/mavros/blob/master/mavros/README.md&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="11238" LastActivityDate="2018-01-10T13:54:34.803" Title="This script require root privileges! | what is going on ?" Tags="&lt;ros&gt;&lt;linux&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14949" PostTypeId="2" ParentId="14801" CreationDate="2018-01-10T07:00:56.797" Score="0" Body="&lt;p&gt;This is the reason:&#xA;make operator bool() explicit in MoveItErrorCode&#xA;&lt;a href=&quot;https://github.com/ros-planning/moveit/commit/4033e577b64ab7ef0e4473342168494f69ef9324&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/ros-planning/moveit/commit/4033e577b64ab7ef0e4473342168494f69ef9324&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19278" LastActivityDate="2018-01-10T07:00:56.797" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14951" PostTypeId="2" ParentId="14948" CreationDate="2018-01-10T13:54:34.803" Score="2" Body="&lt;p&gt;Do it with sudo:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;sudo ./src/mavros/mavros/scripts/install_geographiclib_datasets.sh&lt;/code&gt;&lt;/p&gt;&#xA;" OwnerUserId="17274" LastActivityDate="2018-01-10T13:54:34.803" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14952" PostTypeId="1" CreationDate="2018-01-10T17:08:39.340" Score="0" ViewCount="394" Body="&lt;p&gt;I've seen this equation for calculating the dynamics of a robotic arm a bunch:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\boldsymbol{\tau} = \boldsymbol{M}(\boldsymbol{q})\ddot{\boldsymbol{q}} + \boldsymbol{C}(\boldsymbol{q},\dot{\boldsymbol{q}})\dot{\boldsymbol{q}} + \boldsymbol{G}(\boldsymbol{q})$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, I believe I have the ${M}$ and ${G}$ terms calculated properly (though not through single matrices, which perhaps is an error in itself) as well as a reasonably good PID controller, so I've been researching how to get ${C}$, which represents both centrifugal and Coriolis effects. My robot is pretty unstable without it, but I cannot figure out how to compute it. I don't have access to MATLAB; I'm using C++ with ROS and MoveIt!, so I can easily get the Jacobians and many other features of my robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone help me out? Everyone seems to just be saying along the lines of &quot;Now calculate ${C}$...&quot;&lt;/p&gt;&#xA;" OwnerUserId="19241" LastEditorUserId="19143" LastEditDate="2018-01-11T20:58:38.283" LastActivityDate="2018-01-11T20:58:38.283" Title="Calculating C for a 6-DOF robotic arm" Tags="&lt;robotic-arm&gt;&lt;dynamics&gt;" AnswerCount="2" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="14953" PostTypeId="2" ParentId="14952" CreationDate="2018-01-10T20:08:48.580" Score="2" Body="&lt;p&gt;Chapter 4 of &lt;a href=&quot;http://www.cds.caltech.edu/~murray/books/MLS/pdf/mls94-manipdyn_v1_2.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this Cal tech paper&lt;/a&gt; derives C based on partial derivatives of the inertia matrix M and joint velocities.  I think their explanation, which is based on Lagrangian dynamics, is pretty clear.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2018-01-10T20:08:48.580" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="14954" PostTypeId="2" ParentId="14839" CreationDate="2018-01-10T23:43:21.573" Score="1" Body="&lt;p&gt;I would look at the Flash Robotics &quot;Flash&quot;, &lt;a href=&quot;http://flashrobotics.com/products/flash&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://flashrobotics.com/products/flash&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you follow the &quot;documentation&quot; link you will find complete documentation for the robot. Yes, it is open-source, and you can build the entire robot from their plans and BOM. There are YouTube videos if you search &quot;emys flash robot.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Emys is the head alone. There is a pro model and a kids model. I much prefer the pro model. The entire robot including the head is called &quot;Flash&quot; or &quot;Flash Robot.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I intend to build a version of the Emys head for a project I'm working on. The body would have been perfect at one time, but now I'm living in a motorhome which doesn't have enough room. :(&lt;/p&gt;&#xA;" OwnerUserId="19275" LastActivityDate="2018-01-10T23:43:21.573" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14955" PostTypeId="2" ParentId="14300" CreationDate="2018-01-11T00:03:12.450" Score="1" Body="&lt;p&gt;&lt;a href=&quot;https://www.dexterindustries.com/brickpi&quot; rel=&quot;nofollow noreferrer&quot;&gt;Dexter Industries&lt;/a&gt; has a board (the BrickPi) which attaches to the Raspberry Pi 3 and allows the Pi to control Lego Mindstorms devices. Dexter Industries hosts a &lt;a href=&quot;https://www.dexterindustries.com/brickpi3-tutorials-documentation/&quot; rel=&quot;nofollow noreferrer&quot;&gt;site&lt;/a&gt; which has directions for building various robots using this device.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did build a few robots with an earlier version of the BrickPi.&lt;/p&gt;&#xA;" OwnerUserId="19275" LastActivityDate="2018-01-11T00:03:12.450" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14956" PostTypeId="1" AcceptedAnswerId="14958" CreationDate="2018-01-11T00:09:33.790" Score="1" ViewCount="73" Body="&lt;p&gt;I have seen a lot of academic papers, but no framework that I can download and use. There are even projects, such as OpenCog, which might be usable in a few years.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to know of the existence of any open-source goal/cognitive/planning frameworks now.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a lot of software for motion planning, but I would like a way to determine where the robot wants to do before planning how to get there.&lt;/p&gt;&#xA;" OwnerUserId="19275" LastActivityDate="2018-01-16T11:04:45.553" Title="Are there any open-source congnative planing frameworks for robotics?" Tags="&lt;mobile-robot&gt;&lt;algorithm&gt;&lt;planning&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14957" PostTypeId="2" ParentId="14956" CreationDate="2018-01-11T01:11:58.647" Score="0" Body="&lt;p&gt;Have a look at ROS. They have motion planning packages. Sorry I can't provide more detail at this time, but I know ROS packages exist... and they are open source. This is a good question for their forum if you don't get a better answer here.&lt;/p&gt;&#xA;" OwnerUserId="18167" LastActivityDate="2018-01-11T01:11:58.647" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14958" PostTypeId="2" ParentId="14956" CreationDate="2018-01-11T06:22:40.487" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;KnowRob is a knowledge processing system that combines knowledge representation and reasoning methods with techniques for acquiring knowledge and for grounding the knowledge in a physical system and can serve as a common semantic framework for integrating information from different sources. KnowRob combines static encyclopedic knowledge, common-sense knowledge, task descriptions, environment models, object information and information about observed actions that has been acquired from various sources (manually axiomatized, derived from observations, or imported from the web). It supports different deterministic and probabilistic reasoning mechanisms, clustering, classification and segmentation methods, and includes query interfaces as well as visualization tools.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.knowrob.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.knowrob.org/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2018-01-11T06:22:40.487" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14959" PostTypeId="1" CreationDate="2018-01-11T07:51:27.687" Score="2" ViewCount="531" Body="&lt;p&gt;I have built a simple robot which will move from a source to destination.&#xA;I want to record a 2d path which the robot has taken in real time.&#xA;Something which is similar to the image I have take.(similar not exactly the same)&lt;a href=&quot;https://i.stack.imgur.com/8MsWr.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8MsWr.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any tool or software which will allow me to do this?&#xA;If no, is it possible to generate a similar map not in real time, but after the robot has reached its destination.&#xA;Like the robot while traversing will send out information like straight,straight, left left, straight, right, straight and so on.&#xA;Can this data be saved and a map generated? The map can be as simple as just the path of the robot.&#xA;The robot is simple one built using raspberry pi, arduino. It has components like camera, ultrasonic sensor, servo motor etc.&lt;/p&gt;&#xA;" OwnerUserId="19282" LastEditorUserId="19143" LastEditDate="2018-01-12T12:24:01.603" LastActivityDate="2018-06-19T07:37:51.717" Title="Path of the robot" Tags="&lt;arduino&gt;&lt;raspberry-pi&gt;&lt;mapping&gt;&lt;ultrasonic-sensors&gt;&lt;real-time&gt;" AnswerCount="4" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14963" PostTypeId="2" ParentId="14952" CreationDate="2018-01-11T14:49:15.863" Score="1" Body="&lt;p&gt;If you're calculating the moment of inertia for each link relative to each joint, then that's &lt;code&gt;M&lt;/code&gt;! The only &quot;tricky&quot; thing to be aware of is that the moments of inertia &lt;em&gt;compound&lt;/em&gt; - you &lt;strong&gt;must&lt;/strong&gt; take into account the &lt;em&gt;subsequent joints&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider your arm. &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;You have a hand, which has some moment of inertia. Your wrist joint must accelerate your hand to get motion from your hand. Use the parallel axis theorem to translate the moment of inertia from your hand center of mass to the wrist joint.&lt;/li&gt;&#xA;&lt;li&gt;You have a forearm, which also has some moment of inertia. Your elbow must accelerate your forearm, &lt;strong&gt;BUT&lt;/strong&gt; &lt;em&gt;IT MUST ALSO ACCELERATE YOUR HAND.&lt;/em&gt; Your hand is attached to the forearm by the wrist. Now you need the parallel axis theorem to translate the moment of inertia of your forearm to your elbow, &lt;strong&gt;AND&lt;/strong&gt; you need the parallel axis theorem to translate the moment of inertia from your hand to your elbow. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;In step 1, the distance you used for the parallel axis theorem was the distance from its center of mass to the wrist, but in step 2 you need the distance from the hand to the elbow, &lt;em&gt;which is a function of the wrist angle.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Everything compounds again when you go to the shoulder - upper arm is easy, center of mass to the shoulder, but now forearm (relative to shoulder) is a function of elbow angle and hand (relative to shoulder) is a function of wrist angle AND elbow angle. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The shoulder has to accelerate the upper arm AND the forearm AND the hand. The effective moment of inertia for the shoulder joint &lt;em&gt;must&lt;/em&gt; include the &lt;em&gt;transformed&lt;/em&gt; moments of inertia for all subsequent joints. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-01-11T14:49:15.863" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14964" PostTypeId="2" ParentId="10520" CreationDate="2018-01-11T16:39:34.687" Score="2" Body="&lt;p&gt;This will depend a bit on how you are detecting your features and how you are estimating motion between frames. Classic approaches would start with detecting SIFT-like features in each image, which provide a descriptor for each detected feature as well as the point locations. These descriptors provide evidence of whether two detected features correspond to the same world point.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In these classical approaches, you will need to do a search for corresponding feature points between successive stereo image frames in order to estimate motion, as well as possibly within the stereo pair. Depending on how your frame rate compares to camera motion, you may be able to restrict the search area for these correspondences. Then this same correspondence information provides most of what's needed for tracking.&#xA;See this &lt;a href=&quot;http://frc.ri.cmu.edu/~kaess/vslam_cvpr14/media/VSLAM-Tutorial-CVPR14-A12-StereoVO.pdf&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Stereo Visual Odometry Tutorial&quot;&gt;Stereo Visual Odometry Tutorial&lt;/a&gt; for a detailed overview of such an approach.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There may be benefit to keeping track of particular points over longer periods as well, since longer-lived features show evidence of being more stable and could be less prone to be spurious matches. To take advantage of that, you need to perform some bookkeeping of things like the quality of matching over time or its agreement with estimated motion, which you can then use to decide how much to trust the point.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also see the &lt;a href=&quot;http://www.cvlibs.net/datasets/kitti/eval_odometry.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;KITTI odometry leaderboards&lt;/a&gt; for a list of algorithms that do very well at this task. The papers linked for those entries should give a good idea of the variation in how leading approaches go about this. Note that some of these use stereo vision, and others use laser data.&lt;/p&gt;&#xA;" OwnerUserId="55" LastActivityDate="2018-01-11T16:39:34.687" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14965" PostTypeId="2" ParentId="6334" CreationDate="2018-01-11T21:10:35.287" Score="0" Body="&lt;p&gt;In addition to the reasons mentioned in other answers about the numerical conditioning of inverse depth, a major reason for this term to appear in specifically visual odometry literature is in the way that depths are computed from stereo vision: After rectification, 3D information is inferred from the distance in X between where a point appears in the two cameras' images.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depth, $Z$, is then computed from disparity, $d$, as $Z=\frac{fB}{d}$, where $f$ and $B$ are focal length (in pixels) and camera baseline (in meters) respectively. So working in the space of inverse depths puts you also in the space of disparities, the quantity directly being estimated, and it becomes easier to work with distributions or errors in that quantity.&lt;/p&gt;&#xA;" OwnerUserId="55" LastActivityDate="2018-01-11T21:10:35.287" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14966" PostTypeId="2" ParentId="445" CreationDate="2018-01-11T21:25:53.337" Score="0" Body="&lt;p&gt;Have a look at the &lt;a href=&quot;http://www.cvlibs.net/datasets/kitti/eval_scene_flow.php?benchmark=stereo&quot; rel=&quot;nofollow noreferrer&quot;&gt;KITTI Stereo Benchmark&lt;/a&gt; leaders. This benchmark penalizes algorithms for not producing a disparity at any given point, so the top performers produce dense outputs (even if they don't have much grounds for their estimate at many points). Some methods have publicly available code that is linked, which you can try out. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that they are not penalized for taking a long time, so many methods will take on the order of minutes per image to run and may not be suitable for your application. There have been many CNN-based methods introduced though that do very well, while still running in less than a second (on a GPU). At least one of these (CRL) has public code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you still don't get decent depth estimates with these on your images, then you may just be seeing the limits of what's feasible from a visible approach. There fundamentally needs to be distinctive texture in the area to be able to match points well, or you need a basis for making some strong assumptions (e.g.,  smoothness) in textureless regions.&lt;/p&gt;&#xA;" OwnerUserId="55" LastActivityDate="2018-01-11T21:25:53.337" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14967" PostTypeId="2" ParentId="1997" CreationDate="2018-01-11T22:15:41.540" Score="6" Body="&lt;p&gt;Not by merely looking at Jacobian but by looking at the &lt;a href=&quot;https://en.wikipedia.org/wiki/Singular-value_decomposition&quot; rel=&quot;noreferrer&quot;&gt;Singular Value Decomposition&lt;/a&gt; of the Jacobian, one can see the degrees of freedom that are lost, if lost. Of course it technically somehow turns up to finding the null space but yet I guess it is somewhat familiar and easier.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example let the Jacobian be:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$J = &#xA;\begin{bmatrix}&#xA;          -50     &amp;amp;     650   &amp;amp;       325  &amp;amp;          0    &amp;amp;        0     &amp;amp;       0\\&#xA;       1275.8     &amp;amp;       0   &amp;amp;         0  &amp;amp;         50    &amp;amp;        0     &amp;amp;       0\\&#xA;            0     &amp;amp; -1225.8   &amp;amp;   -662.92  &amp;amp;          0    &amp;amp;     -100     &amp;amp;       0\\&#xA;            0     &amp;amp;       0   &amp;amp;         0  &amp;amp;    0.86603    &amp;amp;        0     &amp;amp;       1\\&#xA;            0     &amp;amp;       1   &amp;amp;         1  &amp;amp;          0    &amp;amp;        1     &amp;amp;       0\\&#xA;            1     &amp;amp;       0   &amp;amp;         0  &amp;amp;        0.5    &amp;amp;        0     &amp;amp;       0&#xA;\end{bmatrix}$$&#xA;A Singular Value Decomposition of this is given by&#xA;$J=U\Sigma V^T$, where&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$U=\left[\begin{matrix}-0.46 &amp;amp; 0.01 &amp;amp; -0.89 &amp;amp; 0.0 &amp;amp; 0.0 &amp;amp; -0.02\\\\0.03 &amp;amp; -1.0 &amp;amp; -0.03 &amp;amp; 0.0 &amp;amp; 0.0 &amp;amp; 0.0\\\\0.89 &amp;amp; 0.05 &amp;amp; -0.46 &amp;amp; 0.0 &amp;amp; 0.0 &amp;amp; -0.01\\\\0.0 &amp;amp; 0.0 &amp;amp; 0.0 &amp;amp; -0.97 &amp;amp; 0.24 &amp;amp; 0.0\\\\0.0 &amp;amp; 0.0 &amp;amp; 0.02 &amp;amp; -0.02 &amp;amp; -0.07 &amp;amp; -1.0\\\\0.0 &amp;amp; 0.0 &amp;amp; 0.0 &amp;amp; -0.24 &amp;amp; -0.97 &amp;amp; 0.07\end{matrix}\right]$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\Sigma=\left[\begin{matrix}1574.54 &amp;amp; 0.0 &amp;amp; 0.0 &amp;amp; 0.0 &amp;amp; 0.0 &amp;amp; 0.0\\\\0.0 &amp;amp; 1277.15 &amp;amp; 0.0 &amp;amp; 0.0 &amp;amp; 0.0 &amp;amp; 0.0\\\\0.0 &amp;amp; 0.0 &amp;amp; 50.59 &amp;amp; 0.0 &amp;amp; 0.0 &amp;amp; 0.0\\\\0.0 &amp;amp; 0.0 &amp;amp; 0.0 &amp;amp; 1.36 &amp;amp; 0.0 &amp;amp; 0.0\\\\0.0 &amp;amp; 0.0 &amp;amp; 0.0 &amp;amp; 0.0 &amp;amp; 0.34 &amp;amp; 0.0\\\\0.0 &amp;amp; 0.0 &amp;amp; 0.0 &amp;amp; 0.0 &amp;amp; 0.0 &amp;amp; 0.0\end{matrix}\right]$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$V^T=\left[\begin{matrix}0.04 &amp;amp; -0.88 &amp;amp; -0.47 &amp;amp; 0.0 &amp;amp; -0.06 &amp;amp; 0.0\\\\-1.0 &amp;amp; -0.04 &amp;amp; -0.02 &amp;amp; -0.04 &amp;amp; 0.0 &amp;amp; 0.0\\\\0.0 &amp;amp; -0.24 &amp;amp; 0.34 &amp;amp; -0.03 &amp;amp; 0.91 &amp;amp; 0.0\\\\0.03 &amp;amp; 0.01 &amp;amp; -0.01 &amp;amp; -0.7 &amp;amp; -0.02 &amp;amp; -0.72\\\\0.03 &amp;amp; 0.01 &amp;amp; -0.01 &amp;amp; -0.71 &amp;amp; -0.02 &amp;amp; 0.7\\\\0.0 &amp;amp; -0.41 &amp;amp; 0.82 &amp;amp; 0.0 &amp;amp; -0.41 &amp;amp; 0.0\end{matrix}\right]$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, it can be seen that the 6th singular value of $\Sigma$ is zero. Therefore, the corresponding (6th) row of $U$ is $$\left[\begin{matrix}0.0 &amp;amp; 0.0 &amp;amp; 0.0 &amp;amp; -0.24 &amp;amp; -0.97 &amp;amp; 0.07\end{matrix}\right]$$, which shows the direction of singularity. It means the end effector at this instant of Jacobian can't move in this direction. In other words, the angular velocity $ω$ of the end-effector about the vector $\hat{n}=-0.24\hat{i}-0.97\hat{j}+0.07\hat{k}$ is not possible at this instant.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The corresponding (6th) column of $V^T$ is &#xA;$$\left[\begin{matrix}0.0\\\\0.0\\\\0.0\\\\-0.72\\\\0.7\\\\0.0\end{matrix}\right]$$ which is the direction of the above singularity in the joint space, which means the above singularity is caused at the end-effector when $\dot{\theta_1}=0, \dot{\theta_2}=0, \dot{\theta_3}=0, \dot{\theta_4}=-0.72$ units, $\dot{\theta_5}=0.7$ units and $\dot{\theta_6}=0$.&lt;/p&gt;&#xA;" OwnerUserId="19288" LastActivityDate="2018-01-11T22:15:41.540" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14968" PostTypeId="2" ParentId="14959" CreationDate="2018-01-11T22:51:28.250" Score="-1" Body="&lt;p&gt;Unfortunately, continuous rotation servos do not report rotations. However, if you are using steppers, you can precisely control and record the rotations. In theory you could determine the coordinates of your wheels from stepper motor data, and therefore be able to generate this image in any point plotter.&lt;/p&gt;&#xA;" OwnerUserId="17270" LastActivityDate="2018-01-11T22:51:28.250" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14970" PostTypeId="2" ParentId="14913" CreationDate="2018-01-12T16:37:06.963" Score="1" Body="&lt;p&gt;Typically, when doing this type of pose estimation, the essential matrix would be wrapped inside of RANSAC. i.e., you would have a lot of candidate point correspondences and would randomly sample 5 of them to evaluate with Nister's algorithm to give potential pose solutions, do this several times, and pick the best. If there is such a random process involved, you can repeat it many times to get an empirical estimate of the covariance. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can also do the same thing while sampling from the distribution given by $P_1$ and $\Sigma_1$ to incorporate that uncertainty, though you may need to do this a great many times to capture the effects of small terms.&lt;/p&gt;&#xA;" OwnerUserId="55" LastActivityDate="2018-01-12T16:37:06.963" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14972" PostTypeId="1" AcceptedAnswerId="14974" CreationDate="2018-01-13T03:34:32.777" Score="1" ViewCount="118" Body="&lt;p&gt;I have never built a robot before and I am looking to get started. The problem is that I have no idea what parts I will need... below are a list of things I want the robot to do.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Have a speaker&lt;/li&gt;&#xA;&lt;li&gt;Be able to sense objects around him so that he doesn't bump into them.&lt;/li&gt;&#xA;&lt;li&gt;Understand different commands&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So pretty much I want to be able to tell my robot to go to the kitchen and he could move over there and tell the person in the kitchen what that person wants. The person would then put it on the robot and he would drive back to the person that made the request. (I know there is not much use to this robot but I think it would still be pretty cool)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not worried about learning programming languages so it doesn't matter what languages the board supports. (Have some basic knowledge in Java and Python).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="19297" LastActivityDate="2018-01-25T15:34:13.027" Title="What parts do I need for my first robot?" Tags="&lt;arduino&gt;&lt;hardware&gt;" AnswerCount="2" CommentCount="2" ClosedDate="2018-01-25T17:05:20.827" ContentLicense="CC BY-SA 3.0" />
  <row Id="14974" PostTypeId="2" ParentId="14972" CreationDate="2018-01-13T14:53:19.190" Score="1" Body="&lt;p&gt;A robot that can accept voice commands and travel to a specified location, do something, and then return is not trivial. The robot you are suggesting is a rather advanced robot for a beginner. I would suggest starting with just a basic robot that can move and avoid objects. Once you get that down I would try each of your objectives one by one in a new robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Much of what you'll be able to do at first depends on how good are you with electronics, programming, and mechanics. These are the three main skills that are useful to building and programming robots. What tools do you have available to you? A 3d printer is very useful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a first robot, the first place I'd start on the web is the site &lt;a href=&quot;https://www.robotshop.com/letsmakerobots/start-here&quot; rel=&quot;nofollow noreferrer&quot;&gt;Let's Build Robots, Start Here&lt;/a&gt;. There are a number of other sites on the web that will help you with building a first robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other good starting points are the Lego Mindstorms EV3 kit. I started with an earlier version of this. Another good company is &lt;a href=&quot;http://www.vexrobotics.com/vexiq&quot; rel=&quot;nofollow noreferrer&quot;&gt;VEX Robotics&lt;/a&gt;. Yet another good company is &lt;a href=&quot;https://www.servocity.com/kits/robot-kits&quot; rel=&quot;nofollow noreferrer&quot;&gt;Servo City&lt;/a&gt;. They have a line of inexpensive robot kits along with more expensive ones. My current robot, Groucho, uses a base I bought as a kit from Servo City.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will need to learn to use microcontrollers such as the Arduino. My favorite microcontroller for both robots and other electronics is the Teensy 3.6, available from &lt;a href=&quot;http://www.adafruit.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Adafruit&lt;/a&gt;. But I'd start with an Arduino because there is so much information available about it on the web.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While building some small robots, I would suggest start experimenting with the programming side of things. You may also need some sensors. Look into the &lt;a href=&quot;http://www.ros.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Robot Operating System&lt;/a&gt;. ROS has a simulator so that you don't need to physically build all of your robots. I suggest ROS because it contains a lot of the software building blocks needed for a robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I prefer to use Linux for building my robots' brains. There are a lot of Single Board Computers (SBC's) such as the Raspberry Pi. The Pi is a good platform, not only for the &quot;brain&quot; of a robot, but also for learning Linux. It is possible to used almost any operating system to control a robot including Microsoft Windows and the Android operating system (using a tablet or phone to control a robot).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would suggest that while you're beginning with building robots, that you also learn Linux and work with various packages that you'll need for later. You could download some speech recognition packages and program a computer to answer to simple commands. You could learn ROS. You could learn computer vision. These are some of the things you'll need to use in your eventual robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are not good with mechanics, like me, then build some kits to learn. If you need to learn electronics, get a breadboard and start practicing blinking lights. If you need to learn programming, then start with a programming language and learn it. I'd suggest Python because it is easier for beginners, and then move onto Java or C/C++.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wish you luck and welcome to robot building!&lt;/p&gt;&#xA;" OwnerUserId="19275" LastActivityDate="2018-01-13T14:53:19.190" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="14975" PostTypeId="1" AcceptedAnswerId="14982" CreationDate="2018-01-13T18:23:45.340" Score="4" ViewCount="380" Body="&lt;p&gt;Many articles reference algorithms such as A*, PRM or RRT based planners to motion planning algorithms which seems unreasonable since it is still necessary to parametrize found path with time.I wonder, why? However it is not the main problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The issue is that of generating motion profile based on a given path. If there were small number of points, maybe 3 or 4, it would be relatively easy to generate some type of speed profile to follow it. Unfortunately output of A* or any of the mentioned algorithms can have large number of points. Therefore it is not clear how to built motion profile based on given points. Could anyone explain to me please how it should be done?&lt;/p&gt;&#xA;" OwnerUserId="15392" LastActivityDate="2018-01-15T02:38:22.777" Title="Motion planning from a given path" Tags="&lt;motion-planning&gt;&lt;motion&gt;&lt;path-planning&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14978" PostTypeId="1" CreationDate="2018-01-14T05:30:22.170" Score="0" ViewCount="372" Body="&lt;p&gt;&lt;strong&gt;Motor&lt;/strong&gt;&lt;br/&gt;&#xA;I am going to use &lt;a href=&quot;https://robokits.co.in/motors/100rpm-12v-dc-motor-with-gearbox?zenid=2ns5udbfjn9rnfhp2rpn4nq9g0&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Motor&quot;&gt;these&lt;/a&gt; 100rpm 12Volt Motor supplied Power given below.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Surface&lt;/strong&gt;&lt;br/&gt;&#xA;Surface will be Plain Wooden. Area of contact between 6 Tyre and surface would be maximum of 4cm&lt;sup&gt;2&lt;/sup&gt; in total.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Use&lt;/strong&gt;&lt;br/&gt;&#xA;They are basically Tyre for my Battle Bot&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Direction&lt;/strong&gt;&lt;br/&gt;&#xA;All 6 Motors will work in same direction to move my Bot Forward. Not climbing nor Coming down.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Tyre&lt;/strong&gt;&lt;br/&gt;&#xA;I'm going to use &lt;a href=&quot;https://robokits.co.in/robot-parts/wheels-pullies-belts/robot-wheel-2cm-width?cPath=67&amp;amp;zenid=2ns5udbfjn9rnfhp2rpn4nq9g0&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Tyre&quot;&gt;these&lt;/a&gt; Tyre but with different diameter for each Motor (Information given Below).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Structure &amp;amp; Design&lt;/strong&gt;&lt;br/&gt;&#xA;&lt;a href=&quot;https://drive.google.com/open?id=1vakFlsu_zVrDSN99jw5syTy5dJFyEQXT&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;3d Model&quot;&gt;Here's&lt;/a&gt; a Scaled 3D Sketch of my Battle bot. In case you need it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Voltage &amp;amp; Tyre Diameter&lt;/strong&gt;&lt;br/&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;4 Motors with 7cm Diameter and Power Ratio is 5 (each).&lt;/li&gt;&#xA;&lt;li&gt;2 Motors with 5cm Diameter and Power Ratio is 7 (each).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;What I want is the Relation Between Supplied Voltage, Supplied Current, Weight of Bot and the Speed at which Bot can move.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm new to all this so Please tell me if you need more information about anything or if I have gone Wrong Somewhere.&lt;/p&gt;&#xA;" OwnerUserId="19270" LastEditorUserId="19270" LastEditDate="2018-01-14T10:41:47.433" LastActivityDate="2019-04-09T17:03:45.753" Title="Relation between Power, Weight &amp; Speed" Tags="&lt;motor&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="14979" PostTypeId="2" ParentId="14978" CreationDate="2018-01-14T09:05:08.770" Score="1" Body="&lt;p&gt;The calculations are difficult. Here are some foundation equations. If you demonstrate interest and refine your question based on what you learn I'm sure that myself or someone else will help you build the equations to the detail you want.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The power equations are the easiest way to start. &lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Input power&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The input power is from your batteries. We start with a simple estimate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$P_{in} = EI$ where $E$ is voltage and $I$ is current.  &lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Output power&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The output power is the motion of your robot. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$P_{out} = \nu f $ where $\nu$ is velocity and $f$ is force.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Entropy&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Power is the transfer of energy from one place (batteries in your case) to another (wheels). Every time we move energy from one place to another, some gets lost. We call these losses. Every equation for power (energy transfer) inside a system includes losses. &lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Conservation of energy&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The law of conservation of energy says that the amount of energy in a system does not change. Figuring out the actual boundaries of your system and writing appropriate equations can be challenging. However for your system as you have described so far, we can say that &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$P_{out} = P_{in}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Add in the fact of entropy and the equation looks like:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$P_{out} = P_{in} - (losses)$&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Basic relationship&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;By substitution, the basic relationship between input voltage, input current and speed is the following.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$EI - (losses) = \nu f$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Energy is transferred many times (from battery to wires to motor&#xA;electronics to electromagnetic motor to wheel axle to wheel to&#xA;ground) so there are many different losses that need to be estimated&#xA;for accurate results.&lt;/li&gt;&#xA;&lt;li&gt;Newtons second law says that a body in motion (your robot) will stay in motion unless acted upon from an outside force. So you need zero force to go your max velocity. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;This means that you need zero power, plus lost power, to go your max velocity.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Next steps&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Energy is conserved. The power flows from the battery to the environment through the wheels. So the power is the same at every stage, minus entropy. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$P_{in} = P_{Hbridge} = P_{motor} = P_{wheels} = P_{robot}$ with losses at each stage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The next step is to start writing more detailed equations for each of these stages so that we can estimate the losses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will notice that $f$ is unknown in the simple relationship above. So that is where you need to improve your question. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$f=m a$ where $m$ is mass and $a$ is acceleration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mass is constant for your current question, so you need to define what acceleration you need. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Usually we define a motion profile, which defines all the velocity and acceleration changes for all the tasks of the robot. In your case, we can simplify it. You probably just want the robot to accelerate up to maximum speed as fast as it can.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given your motor specifications and wheel sizes, can you write an equation that estimates the acceleration of your robot if you have no losses? Add this to your question.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2018-01-14T09:05:08.770" CommentCount="0" CommunityOwnedDate="2018-01-14T09:05:08.770" ContentLicense="CC BY-SA 3.0" />
  <row Id="14981" PostTypeId="2" ParentId="14975" CreationDate="2018-01-14T13:26:51.283" Score="1" Body="&lt;p&gt;I have used A* for motion planning in a highway simulation with moving obstacles (other cars). The README includes a thorough description of my approach. I recommend reviewing this project to understand how A* can be used effectively for robotic motion planning. Let me know if you have any questions about how the project works, or if there are additional challenges in your project that don't seem to be covered.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://youtu.be/ouSjnpnRL7w&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://youtu.be/ouSjnpnRL7w&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/ericlavigne/CarND-Path-Planning&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/ericlavigne/CarND-Path-Planning&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18316" LastActivityDate="2018-01-14T13:26:51.283" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14982" PostTypeId="2" ParentId="14975" CreationDate="2018-01-14T14:18:48.273" Score="4" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Many articles reference algorithms such as A*, PRM or RRT based planners to motion planning algorithms which seems unreasonable since it is still necessary to parametrize found path with time.I wonder, why?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;First of all, RRT, for example, can be used to plan trajectories directly. When the robot in question has $n$ DOFs, such a planning problem happens in a space of dimension $2n$ called state-space (each point in the state-space is a pair of configuration and velocity $(q, \dot{q})$). But since the complexity of a motion planning problem grows exponentially with the dimension of the planning space, it is usually pretty difficult to solve the problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead, a more &lt;em&gt;practical&lt;/em&gt; approach is to &lt;em&gt;decouple&lt;/em&gt; a trajectory planning problem into two subproblems: (geometric) &lt;strong&gt;path planning&lt;/strong&gt; and &lt;strong&gt;time-parameterization&lt;/strong&gt;. The thing is that each subproblem can be solved really fast that solving these two subproblems is much, much faster than solving the trajectory planning problem in one shot.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Therefore it is not clear how to built motion profile based on given points.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Actually geometric motion planners (i.e. planners that plan paths in the robot configuration space) do not produce only waypoints, they output also a path between each consecutive pair of waypoints (such paths are usually linear).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To produce a trajectory, the geometric path generated by a planner is given to a time-parameterization algorithm to generate a &lt;em&gt;velocity-profile&lt;/em&gt;. A geometric path and a velocity profile together make a complete trajectory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the generated path is piecewise linear (that is, each pair of consecutive waypoints are connected by a straight-line path), then a velocity profile that makes the robot follows this path exactly &lt;strong&gt;must&lt;/strong&gt; start and stop at each waypoint (it might not be straightforward to see why, but it is not too difficult to derive this either). Then after a velocity profile has been computed, now you get a complete trajectory. (Such a trajectory is slow due to its start-stop behavior. This can be improved by using a trajectory shortcutting method.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the generated path is $C^2$-continuous, you can use fancier time-parameterization algorithms. There are quite a few approaches to solving a time-parameterization problem (&lt;a href=&quot;https://lirias.kuleuven.be/bitstream/123456789/211749/1/07-208.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;convex optimization&lt;/a&gt;, &lt;a href=&quot;https://arxiv.org/pdf/1312.6533&quot; rel=&quot;nofollow noreferrer&quot;&gt;numerical integration&lt;/a&gt;, etc.). They can give you not just any time-parameterization but &lt;em&gt;time-optimal&lt;/em&gt; parameterization (i.e. they compute the &lt;em&gt;fastest&lt;/em&gt; way for the robot to traverse the given path without violating any constraints).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: There are quite a number of names that people use to refer to the second subproblem (time-parameterization). Such terms include (but not limited to) path parameterization, path tracking, etc.&lt;/p&gt;&#xA;" OwnerUserId="7610" LastEditorUserId="7610" LastEditDate="2018-01-15T02:38:22.777" LastActivityDate="2018-01-15T02:38:22.777" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14984" PostTypeId="1" CreationDate="2018-01-14T20:06:59.933" Score="0" ViewCount="223" Body="&lt;p&gt;I have a geared DC motor with hall speed sensors. I want to count signals from the sensor to get position of the motor. Hall sensor has resolution of 12 CPR. Gear ratio is 1:810, which means that I don't really need very precise measurement to get close to the desired position. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But in reality it doesn't work. I run the motor at the same direction trying to get exactly 360 degrees. Sometimes I am close to the position I set, sometimes I am too far (like 300 degrees instead of 360). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The code is simple. I just attached the hall sensor to an interrupt pin and count raises of the signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Has anybody tried that? Does anybody knows some obvious problem which causes me to fail such miserably?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the motor I am using:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/qNEIU.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qNEIU.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19312" LastActivityDate="2018-02-15T19:20:57.570" Title="Using hall sensors to calculate position" Tags="&lt;motor&gt;&lt;hall-sensor&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14985" PostTypeId="1" AcceptedAnswerId="14996" CreationDate="2018-01-14T22:47:26.883" Score="0" ViewCount="85" Body="&lt;p&gt;There are many control methods who sounds great and have nice math etc. But many of them are not realistic in real life.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In robotics, Adaptive Control is well applied because Adaptive Control make sure that the controller is allways new and perfect for the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But then there are another control method called Robust Control. In fact, Robust Control is only a design method. It's still a LQR/LQG/PID inside, but the parameters are designed so the controller has the best strength aginst uncertainties. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then my question is: Is Robust Control well applied in robotics, or is Robust Control just another design method who does not work in reality, only in ideal simulation?&lt;/p&gt;&#xA;" OwnerUserId="17252" LastActivityDate="2018-01-16T20:29:57.633" Title="Is Robust Control and robotics well applied together?" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;pid&gt;&lt;simulation&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14987" PostTypeId="1" AcceptedAnswerId="15037" CreationDate="2018-01-15T10:06:33.010" Score="0" ViewCount="327" Body="&lt;p&gt;I wrote an Arduino program for my quadcopter that sets to power of the 4 ESC's using software.  Now I need to incorporate the gyro and add a &quot;Complementary Filter&quot; to stabilize it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am currently using a MPU 6050 for the job.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I primarily want to know what is the best approach to take for compensating the angular rate from the receiver using gyro.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Should i give the use the angle from my receiver and program my quad works to achieve that angle or should I try to control angular rate?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;e.g&#xA;angular rate:-&#xA;receiver roll stick moves produces an angular rate that my PID compares with angular rate of gyro and alters values for the esc's.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;e.g&#xA;angle:-&#xA;receiver roll stick moves produces an angle that my PID compares with the ANGLE of gyro+Accelerometer and then alters my ESC values&lt;/p&gt;&#xA;" OwnerUserId="19316" LastEditorUserId="462" LastEditDate="2018-01-23T15:06:45.683" LastActivityDate="2018-01-23T21:21:54.923" Title="Quadcopter filter and Angular rate vs angle (Arduino programming)" Tags="&lt;quadcopter&gt;&lt;arduino&gt;&lt;control&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="14989" PostTypeId="2" ParentId="8038" CreationDate="2018-01-15T16:22:27.370" Score="0" Body="&lt;p&gt;Is it your Yaw that's drifting? You'll need a magnetometer to stop Yaw drift as your accelerometer cannot give you Yaw readings and simply integrating the Gyro Z value will cause drift as you are integrating the gyro noise over time.&lt;/p&gt;&#xA;" OwnerUserId="8838" LastActivityDate="2018-01-15T16:22:27.370" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14990" PostTypeId="1" CreationDate="2018-01-15T20:20:46.583" Score="0" ViewCount="33" Body="&lt;p&gt;I have a basic question. Imagine a plate, with a hole drilled in each corner. Imagine 4 shafts in these 4 holes,attached to another plate. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Intuition tells me that it would take considerable effort to have the design as such that the plate slides without getting stuck.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's now replace one of those shafts by a leadscrew. Designs exist where the leads crew would allow to smoothly upper and lower said plate. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My intuition, however, indicates that I could never get such a conceptually simple design to work. Even with plain bearings. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What are the conditions to get this right? &lt;/p&gt;&#xA;" OwnerUserId="19194" LastEditorUserId="19194" LastEditDate="2018-01-16T10:48:55.897" LastActivityDate="2018-01-16T10:48:55.897" Title="Sliding system basic question" Tags="&lt;mechanism&gt;&lt;linear-bearing&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="14991" PostTypeId="2" ParentId="14990" CreationDate="2018-01-15T20:41:17.007" Score="2" Body="&lt;p&gt;This is a great problem to hone mechanism design skills on. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a set of dimensions for which this mechanism works fine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The condition for this is that the contact of each rod &amp;amp; hole, including the drive screw, remain on the correct side of the friction cone, for all free motion and bending of the elements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can start thinking about this by thinking of a single hole and rod. A thin plate with a large hole will jam. A thick plate with a small hole will slide.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A starting point for a basic model(equation) of this is to treat the contact between the rods and holes as flat surface contacts when estimating the friction, as well as assuming the hole edge loads do not start deforming material. You can resolve the external loads into normal contact forces and then compare the driving force (from your screw) to the friction force. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Below is a simple representation of the forces at one hole.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/agjJ3.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/agjJ3.jpg&quot; alt=&quot;Single Holes 2D Forces&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Force $D$ is the driving, actuation force at some distance away from the hole. Force $C$ is the gravitational (and if significant, inertial) force. Forces $A$ and $B$ are the reaction forces of the edge of the hole on the rod.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For our simplified model, the basic rigid body assumptions are used. Capitals are vectors and $\times$ is the cross product. $F$ are forces, $P$ are positions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\sum {forces} = m a$ or $F_A + F_B + F_C + F_D = m a$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\sum {moments} = I \alpha$ or $P_A\times F_A + P_B\times F_B + P_C\times F_C + P_D\times F_D = I \alpha$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $\alpha = 0$ since we are sliding and not rotating.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Forces $A$ and $B$ have two components. The normal forces needed to balance the moments, and the axial forces that are calculated using a basic friction model.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$F_\mu = \mu F_{normal}$ where $\mu$ is the friction coefficient.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind the friction model is discontinuous, and that the friction force component will equal $F_{D_z}+F_{C_z}$ until $F_{D_z}+F_{C_z}$ exceeds $\sum F_\mu$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Solving the above equations for $a$ is, I believe, the most basic equation that will let you estimate things. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you need to be more accurate, or aggressive in your design, then you need to worry about the bearing loads and where plastic deformation will start destroying your mechanism.&lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="184" LastEditDate="2018-01-16T02:18:50.740" LastActivityDate="2018-01-16T02:18:50.740" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14994" PostTypeId="2" ParentId="14956" CreationDate="2018-01-16T11:04:45.553" Score="0" Body="&lt;p&gt;There is a framework for motion planning in ROS, it is called MoveIt!&#xA;&lt;a href=&quot;http://moveit.ros.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://moveit.ros.org/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main limitation of it, is that it falls apart, but if you get the single configuration in which it works it can do the job.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Otherwise you will have to find your way within all the other packages developed in ROS or YARP (&lt;a href=&quot;http://www.yarp.it/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.yarp.it/&lt;/a&gt;) that do a similar job.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not aware of a state-of-the-art integrated solution yet&lt;/p&gt;&#xA;" OwnerUserId="19326" LastActivityDate="2018-01-16T11:04:45.553" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="14995" PostTypeId="2" ParentId="14984" CreationDate="2018-01-16T19:15:00.640" Score="1" Body="&lt;p&gt;Are you running a PID loop to control the motor?  Without a PID loop, the motor is going to be highly dependent on load and will likely stop differently every time.  Also, since the sensor is relative position only, you will need a way to home the motor to be able to know absolute position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you need accurate absolute position, you could use a &lt;a href=&quot;http://www.ttelectronics.com/sites/default/files/download-files/Datasheet_NonContactSingleTurn_6120Series.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;hall absolute position sensor&lt;/a&gt;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/EAdRm.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/EAdRm.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="462" LastActivityDate="2018-01-16T19:15:00.640" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="14996" PostTypeId="2" ParentId="14985" CreationDate="2018-01-16T20:29:57.633" Score="3" Body="&lt;p&gt;Robust control is used for when you &lt;em&gt;know&lt;/em&gt; that parameters are going to fall within particular bounds. For example, for a mass-produced robot arm, the arm masses fall between X and Y, the moments of inertia between I and J, etc. You don't know &lt;em&gt;exactly&lt;/em&gt; what they are, but you can analyze the boundary conditions (i.e., root locus analysis) and ensure stability and performance parameters are met at all times.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Adaptive control is used for when you &lt;em&gt;don't&lt;/em&gt; know that the parameters are going to fall within particular bounds. Maybe you've got a kite controller, but the wind can be anything between zero and a hurricane, or an autopilot system in an aircraft where the total passenger and equipment weight isn't known.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A robust controller is developed and analyzed once, and then the gains are fixed. An adaptive controller must constantly assess the system performance and attempt to adjust control gains on-the-fly. The adaptive controller must be a more computationally complex controller (for comparable systems) because it cannot leverage a priori knowledge like the robust controller. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ultimately, the best controller is the one that performs the best for your system. I would argue that robust control would probably best be applied to robots working in controlled conditions, or fabricated of mass produced parts, and adaptive control then applied to robots working in uncertain environments.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-01-16T20:29:57.633" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="14997" PostTypeId="2" ParentId="14823" CreationDate="2018-01-16T22:32:13.437" Score="2" Body="&lt;p&gt;NaN values are sometimes used to indicate unavailable data. Is it possible that these are simply portions of the dataset for which ground truth was not available, but you can still evaluate on the remainder of the sequence (and that this is in fact the standard evaluation domain)? It looks like their evaluation code checks for trajectory entries with any NaNs and ignores them with a warning.&lt;/p&gt;&#xA;" OwnerUserId="55" LastActivityDate="2018-01-16T22:32:13.437" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="14999" PostTypeId="1" CreationDate="2018-01-17T05:35:50.217" Score="2" ViewCount="583" Body="&lt;p&gt;I want to control a motor using EtherCAT protocol.&lt;br&gt;&#xA;1. I used IgH ethercat master to control motor in hard real time (1 kHz).&lt;br&gt;&#xA;2. Later I want to integrate this in ros_control with hard real-time control. The developer of ros_control are ensuring that ros_control is real time.&lt;br&gt;&#xA;3. If I want to create other application using ros/moveit/ros-android on top of ros_control &amp;amp; ethercat(driver), Can we call the system hard realtime (ros_control + igh (both are hard realtime) and ros (not realtime)) ?&lt;/p&gt;&#xA;" OwnerUserId="19338" LastEditorUserId="19338" LastEditDate="2018-02-12T11:14:38.917" LastActivityDate="2020-11-29T05:03:15.350" Title="Real time implementation of EtherCAT master with ros_control" Tags="&lt;ros&gt;&lt;real-time&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="15000" PostTypeId="2" ParentId="12308" CreationDate="2018-01-17T06:12:16.513" Score="1" Body="&lt;p&gt;You will need to control it vai I2C .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are libraries for pca9685 , if you want to control it vai an Arduino(Micro controller ) &lt;a href=&quot;https://github.com/Reinbert/pca9685&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/Reinbert/pca9685&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to use with a RPI , you can directly use python libraries and I2C vai GPIO pins .&#xA;&lt;a href=&quot;https://github.com/voidpp/PCA9685-driver&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/voidpp/PCA9685-driver&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I too am trying to build a hexapod/quadpod using tiny mg90 servo motors and 3d printed parts . &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am trying to get all of this ROS enabled so that we can perform more advanced level operations using this .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyways , for now i am trying to figure out how to operate the servo motors just for a 6 axis robotic arm i am building .&lt;/p&gt;&#xA;" OwnerUserId="19284" LastEditorUserId="19284" LastEditDate="2018-01-17T06:17:57.267" LastActivityDate="2018-01-17T06:17:57.267" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15003" PostTypeId="2" ParentId="9074" CreationDate="2018-01-17T06:40:40.100" Score="-1" Body="&lt;p&gt;&lt;strong&gt;Hard real time&lt;/strong&gt; : What ever time cycle you are setting for your loop, it should strictly follow that. In most of the robotics system they follow the cycle time to be &lt;em&gt;1ms&lt;/em&gt;. &lt;a href=&quot;https://i.stack.imgur.com/JwbxX.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JwbxX.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can go to this &lt;a href=&quot;https://roscon.ros.org/2015/presentations/RealtimeROS2.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;link&lt;/a&gt; for more information of above image. &#xA;Current ROS version are having TCPROS (non realtime) for their node to node communication but in ROS2, the community is redesigning ros for hard real time application and instead of TCPROS they are using DDS (Data Distribution Service) for node to node communication. &lt;/p&gt;&#xA;" OwnerUserId="19338" LastActivityDate="2018-01-17T06:40:40.100" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15008" PostTypeId="2" ParentId="14823" CreationDate="2018-01-18T16:19:53.903" Score="2" Body="&lt;p&gt;From the &lt;a href=&quot;https://vision.in.tum.de/data/datasets/mono-dataset&quot; rel=&quot;nofollow noreferrer&quot;&gt;webpage&lt;/a&gt; for the dataset:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;All sequences contain mostly exploring camera motion, starting and ending at the same position: this allows to evaluate tracking accuracy via the accumulated drift from start to end, without requiring ground-truth for the full sequence.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It appears as though they didn't intend the ground truth for these datasets to be complete.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For monocular odometry data with complete ground truth data, you could try &lt;a href=&quot;http://www.cvlibs.net/datasets/kitti/eval_odometry.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;KITTI&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="19347" LastActivityDate="2018-01-18T16:19:53.903" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15009" PostTypeId="1" CreationDate="2018-01-18T20:00:26.007" Score="0" ViewCount="1300" Body="&lt;p&gt;We are currently making a balancing robot as a school project. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The robot has a gyroscope and an encoder to get the angle of the robot and the rpm of the wheels. By using the current angle of the robot and defining a target angle we are able to make the robot stand still and not fall over.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We don't understand how to incorporate the encoder (that measures the angular velocity of the wheels) to make the robot stand still when he motor speed is changing. The robot only knows the angle it is at so it won't compensate for the speed. Could one perhaps use the encoder in such a way that dictates the target angle and keep the robot still or even better control it? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;We would also like to know if there is a way to automatically adjust TargetAngle to the needed one, like if the floor angle were to change.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a sample of our code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;error = TargetAngle - CurrentAngle;&#xA;integral = integral + error*ki;&#xA;derivative = (error - lastError)*kd;&#xA;&#xA;lastError = error;&#xA;&#xA;pidsum = derivative+error*kp+integral;//this is what is used for throttling the engines&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="19348" LastEditorUserId="462" LastEditDate="2018-01-23T15:06:31.507" LastActivityDate="2018-02-22T19:46:34.753" Title="Balancing robot - How to control the velocity and angle" Tags="&lt;pid&gt;&lt;wheeled-robot&gt;&lt;balance&gt;" AnswerCount="3" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="15010" PostTypeId="2" ParentId="15009" CreationDate="2018-01-18T21:34:39.300" Score="0" Body="&lt;p&gt;Consider doing a PID loop on the motor angle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Target angle can be calculated tick-by-tick based on the motion profile you want the robot to move compensated with the desired robot angle (you will likely want to lean forward when beginning to more forward, etc. like a person would do).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Actual angle can be determined by the encoder position combined with the gyro angle.&lt;/p&gt;&#xA;" OwnerUserId="462" LastActivityDate="2018-01-18T21:34:39.300" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15011" PostTypeId="2" ParentId="15009" CreationDate="2018-01-19T09:45:39.570" Score="0" Body="&lt;p&gt;Balancing problem is all about eliminating all the torque on the robot with the motors. We are currently working on a balancing system which is more advanced but the idea is almost the same. You should use torque controller using the encoders.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\frac{V - Bw}{R} = I$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where $$V$$ is the voltage you give to the motor and $$w$$ is the angular velocity of the motor. $$-Bw$$ part is the back EMF from the rotating motor. Since torque is directly proportional to current, you can use PID to calculate the required velocity of the motors. You can calculate the required torque by using the gyro.&lt;/p&gt;&#xA;" OwnerUserId="14329" LastActivityDate="2018-01-19T09:45:39.570" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15012" PostTypeId="2" ParentId="14959" CreationDate="2018-01-19T10:56:28.823" Score="0" Body="&lt;p&gt;I would recommend rotary encoded motor mostly used to track no of rotation(steps) used in roomba vacuum cleaner to record steps and compute if needed&lt;/p&gt;&#xA;" OwnerUserId="11448" LastActivityDate="2018-01-19T10:56:28.823" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15013" PostTypeId="1" CreationDate="2018-01-19T14:49:22.360" Score="2" ViewCount="1903" Body="&lt;p&gt;I don't understand how to calculate the ICC position with the given coordinates. I somehow just have to use basic trigonometry but I just can't find a way to calculate the ICC position based on the given parameters $R$ and $ \theta $. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/SEzvo.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/SEzvo.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: Sorry guys if forgot to include the drawing of the situation. Yes, ICC = Instantaneous Center of Curvature.&lt;/p&gt;&#xA;" OwnerUserId="19355" LastEditorUserId="19355" LastEditDate="2018-01-20T13:31:51.647" LastActivityDate="2018-01-20T22:18:02.707" Title="calculating differential drive robot ICC position" Tags="&lt;kinematics&gt;&lt;differential-drive&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="15015" PostTypeId="1" AcceptedAnswerId="15017" CreationDate="2018-01-19T22:26:03.190" Score="4" ViewCount="477" Body="&lt;p&gt;I am new to robotics and mechanical engineering. I am trying to understand how the Z-axis (and effector) of a SCARA robot can be driven by a stepper motor with it's shaft coaxially aligned along the same Z axis.  In the photo below, one can clearly see the Z-axis lead screw and effector on the SCARA arm.  I am familiar with lead screws in X-Y stages, where a block is pushed along the length of the screw by rotation.  In this case, the lead screw itself is being translated.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;(1) What mechanism can be used to cause the lead screw itself to translate along the Z-axis?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(2) How can the effector (say a robotic claw) be prevented from rotating while it is in motion?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/aESPb.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/aESPb.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have seen so-called &quot;through type&quot; stepper motors (see below) in which the lead screw moves right through the motor.  Since this type of motor seems less prevalent on markets such as Amazon, and more expensive, I would like to use a standard stepper motor and actuate the lead screw mechanism using a belt.  This stepper motor will have it's shaft oriented along the Z axis (and will be &quot;coaxial&quot; with the effector arm).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/XzQTT.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XzQTT.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="16783" LastActivityDate="2021-01-30T09:37:41.127" Title="How can a coaxial stepper motor be used to drive the Z axis effector of a SCARA robot?" Tags="&lt;robotic-arm&gt;&lt;actuator&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15016" PostTypeId="2" ParentId="15013" CreationDate="2018-01-19T22:31:43.697" Score="1" Body="&lt;p&gt;OK, I'm going to work on the assumption that you are trying to calculate the Instantaneous Centre of Curvature, and that the values of $R$ and $\theta$ that you have been given are the distance from the ICC to the mid-point of the wheel axle and the direction of travel relative to the x-axis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That should correspond with the diagram below, taken from &lt;a href=&quot;https://books.google.co.uk/books?id=0cggAwAAQBAJ&amp;amp;printsec=frontcover#v=onepage&amp;amp;q&amp;amp;f=false&quot; rel=&quot;nofollow noreferrer&quot;&gt;Computational Principles of Mobile Robotics&lt;/a&gt; by Dudek and Jenkin:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/OQ2Lz.png&quot; alt=&quot;diff drive robot&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, provided you know the position of the robot $(x,y)$ you can find the location of the ICC by trigonometry as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/ONn7X.png&quot; alt=&quot;trigonometry&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;ICC = [x - R sin(\theta), y + R cos(\theta)]&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;In the more usual case, we can measure the velocities of the left and right wheels, $V_{r}$ and $V_{l}$. From the diagram, we can see that:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;V_{r} = \omega (R + \frac{l}{2})&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;V_{l} = \omega (R - \frac{l}{2})&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where $\omega$ is the rate of rotation about the ICC, $R$ is the distance from the ICC to the mid-point of the wheel axle, and $l% is the distance between the centres of the wheels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Solving for $R$ and $\omega$ gives:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;R = \frac{l}{2} \frac{V_{l} + V_{r}}{V_{r} - V_{l}}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\omega = \frac{V_{r} - V_{l}}{l}&#xA;$$&lt;/p&gt;&#xA;" OwnerUserId="17029" LastEditorUserId="17029" LastEditDate="2018-01-20T22:18:02.707" LastActivityDate="2018-01-20T22:18:02.707" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="15017" PostTypeId="2" ParentId="15015" CreationDate="2018-01-20T00:05:41.570" Score="4" Body="&lt;p&gt;i found out that it is called an RZ tool ... google &lt;code&gt;scara RZ tool&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;there is a captive rotating &quot;nut&quot; on the threaded shaft that causes the shaft to move linearly&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;there is a spline (raceway) in the screw shaft to prevent turning&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;the picture that you posted probably uses a &lt;code&gt;ball screw/spine&lt;/code&gt; like this one ... &lt;a href=&quot;https://tech.thk.com/upload/catalog_claim/pdf/327E_BNS_NS.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://tech.thk.com/upload/catalog_claim/pdf/327E_BNS_NS.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;here is another closeup&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://patentimages.storage.googleapis.com/38/43/1e/12ef07c54bdf2f/US20050087034A1.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://patentimages.storage.googleapis.com/38/43/1e/12ef07c54bdf2f/US20050087034A1.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/polx1l.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/polx1l.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19143" LastEditorUserId="19143" LastEditDate="2018-04-04T00:26:00.530" LastActivityDate="2018-04-04T00:26:00.530" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15021" PostTypeId="1" CreationDate="2018-01-20T21:18:43.663" Score="3" ViewCount="476" Body="&lt;p&gt;For an accelerometer, the measurement is defined in the following way:&#xA;$$a_m = R_w^b(a_{w} - g) + b_a + v_a$$&#xA;Where $R$ is a rotation matrix, $g$ is gravity, $v_a$ is noise, and $b_a$ is the bias. With this, we can expose the bias and orientation error by rotating $g = \begin{bmatrix} 0 &amp;amp; 0 &amp;amp; 9.8 \end{bmatrix}^T$ and adding the bias:&#xA;$$h(x) = Rg + b_a$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, for a gyroscope, we don't have anything like gravity to expose this bias in the same way. How is this usually done?&lt;/p&gt;&#xA;" OwnerUserId="17846" LastActivityDate="2018-01-22T14:41:21.370" Title="How is gyroscope bias exposed and tracked?" Tags="&lt;gyroscope&gt;&lt;ekf&gt;&lt;calibration&gt;" AnswerCount="1" CommentCount="7" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="15022" PostTypeId="2" ParentId="8014" CreationDate="2018-01-21T18:15:58.450" Score="1" Body="&lt;p&gt;Since your robot is already on WiFi, the robot is on the internet. If should theoretically be possible to access the robot from any outside address. However, one of the main problems with this is that most home internet services do not give you a fixed address which makes access difficult.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One way to get around this is to use dynamic domain name service (DDNS). You will need a few things.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;A router that supports DDNS. The router handles most of the details of this.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;An external DDNS service which forwards any packets from your ip-name to your router.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;An ip-name such as myarduinorobot.net. Most of the DDNS services will help you do this. Or you can use any of the common services that register ip-names.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You will need to forward the packets from the router to your robot. If the router supports DDNS, it will support this.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.howtogeek.com/66438/how-to-easily-access-your-home-network-from-anywhere-with-ddns/&quot; rel=&quot;nofollow noreferrer&quot;&gt;HowToGeek has a good tutorial on how to set this up.&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One suggestion I will make is to somehow encrypt your commands to the robot so that some outsider won't be able to use your robot as a security hole.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another way to do this would be to use the cellular network. &lt;a href=&quot;http://www.adafruit.com&quot; rel=&quot;nofollow noreferrer&quot;&gt;Adafruit&lt;/a&gt; has several boards that access the cell network including some &lt;a href=&quot;https://www.adafruit.com/?q=Arduino%20fona&quot; rel=&quot;nofollow noreferrer&quot;&gt;Arduino shields&lt;/a&gt;. Their brand name for these are &quot;Fona&quot; and you will still need a SIM card to use one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or you could get a device that uses many different communications systems like the &lt;a href=&quot;https://www.adafruit.com/product/3613&quot; rel=&quot;nofollow noreferrer&quot;&gt;Picom FiPy&lt;/a&gt;. This is a processor that runs Python and has WiFi, Bluetooth, and cell data (when I bother to get a SIM card). You could use this as a co-processor to your Arduino.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Happy making!&lt;/p&gt;&#xA;" OwnerUserId="19275" LastEditorUserId="19275" LastEditDate="2018-01-21T22:00:47.350" LastActivityDate="2018-01-21T22:00:47.350" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15026" PostTypeId="2" ParentId="15021" CreationDate="2018-01-22T14:41:21.370" Score="2" Body="&lt;p&gt;I think you're confused. The method you're talking about would only really work if you know the magnitude and orientation of the accelerations you're trying to measure. If that's the case, then &lt;em&gt;why are you using an accelerometer?&lt;/em&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Gravity is essentially a bias. The only thing you're doing different for the accelerometer that you wouldn't do for a gyro is to remove the &lt;em&gt;known&lt;/em&gt; bias (gravity) so you can try to find the &lt;em&gt;unknown&lt;/em&gt; bias. But again, &lt;em&gt;how do you distinguish between bias and a real reading&lt;/em&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're doing this as some sort of a calibration routine - hold the sensor fixed or in some known position/pattern prior to use, then you can do &lt;em&gt;exactly the same thing&lt;/em&gt; for the gyro that you're doing for the accelerometer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As @holmeski noted in the comments, you're skipping a couple steps in your question. For example, you skip from:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;a_m=R_w^b(a_w−g)+b_a+v_a&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;straight to:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;h(x)=Rg+b_a&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The noise term went away, but the $a_w$ term conveniently went away, too. That's the &lt;em&gt;actual acceleration&lt;/em&gt;. This is where I'm making the assumption that you're doing some pre-use calibration routine, like holding the accelerometer still ($a_w = 0$) and in some known orientation ($R = \mbox{known}$) in order to estimate the bias $b_a$ prior to use. But again, you could view this as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;h(x) = \mbox{known bias} + \mbox{unkown bias} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the gyro, there just isn't any known bias like $Rg$, so you just wind up with:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;h(x)_{\mbox{gyro}} = \mbox{unknown bias} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You skip the $Rg$ step altogether.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Parting note - a calibration routine like this won't last forever because of &lt;em&gt;bias drift&lt;/em&gt; or &lt;em&gt;random walk&lt;/em&gt; in the sensor output. If the biases were &lt;em&gt;constant&lt;/em&gt;, the could be tested and removed at the factory and everyone could use really high quality IMUs for cheap. The bias changes over time, though, so you can't do that. Higher quality accelerometers or gyros have slower rates of drift, so an initial calibration would last longer, but they &lt;em&gt;all&lt;/em&gt; drift. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-01-22T14:41:21.370" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="15027" PostTypeId="1" CreationDate="2018-01-22T17:30:44.187" Score="0" ViewCount="168" Body="&lt;p&gt;Some time I found that some robot controller uses a critically damped reference control signal such as in Autonomous Surface Vehicle (ASV) heading controller. My question is how do we implement this reference signal in the actual robot implementation?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See figure &lt;a href=&quot;https://i.stack.imgur.com/T7Tgz.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/T7Tgz.png&quot; alt=&quot;heading example&quot;&gt;&lt;/a&gt;.   &lt;/p&gt;&#xA;" OwnerUserId="19379" LastActivityDate="2020-08-13T23:00:55.107" Title="How to implement reference control signal for robot heading?" Tags="&lt;mobile-robot&gt;&lt;control&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="15028" PostTypeId="1" AcceptedAnswerId="15041" CreationDate="2018-01-22T19:42:12.137" Score="1" ViewCount="1298" Body="&lt;p&gt;I'm writing an academic paper describing the calibration of a system. Part of that system is an absolute rotary encoder measuring the angle of a joint. However, the position at which the encoder gives a reading of '0' does not correspond to an angle of zero degrees (see edit). Rather than fussing with how the encoder is mounted, I simply found the value that the encoder returns when the joint is at zero degrees and subtract that value off of future measurements. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a well-established* term to describe this point/value succinctly and, if so, what is it? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have to imagine that this is an &lt;strong&gt;extremely&lt;/strong&gt; common task in robotic manipulators and I'm having a hard time describing the process without a name for the point/value/position that I'm calibrating for. Zero point? Home position? Origin? Encoder offset?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*By well established, I simply mean something that someone familiar with the field of robotics will understand to mean what I'm trying to describe. My primary field is medical imaging/image guidance so I have no idea what terminology is or is not commonly understood.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt; 'zero degrees' meaning 'zero degrees with respect to the arm'. A reading of 0 indicates, by definition, zero degrees with respect to an arbitrary position on the encoder.&lt;/p&gt;&#xA;" OwnerUserId="19381" LastEditorUserId="19381" LastEditDate="2018-01-24T18:29:28.820" LastActivityDate="2018-01-25T21:12:55.817" Title="Zero-Point/Home Position/Origin of Absolute Encoder: What is the Proper Name?" Tags="&lt;robotic-arm&gt;&lt;sensors&gt;&lt;calibration&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15030" PostTypeId="2" ParentId="14444" CreationDate="2018-01-23T05:07:42.340" Score="2" Body="&lt;p&gt;I would not attempt to power the Pi directly from the flight controller. The last thing you want is to have unexpected power demands crash your vehicle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The easiest solution is probably to grab a 5v BEC (if you don't already have a regulated 5v supply available from one of your ESCs or from your power distribution board) and wire that to the appropriate GPIO pins.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You're slightly better off if you power the Pi via the USB port, because this will keep the Pi's own voltage regulator and fuse in the loop.  To do this you would simply need to wire a microUSB connector to your 5v power supply.  &lt;a href=&quot;https://www.modmypi.com/blog/how-do-i-power-my-raspberry-pi&quot; rel=&quot;nofollow noreferrer&quot;&gt;ModMyPi&lt;/a&gt; has some more in-depth recommendations on the topic of powering a Pi.&lt;/p&gt;&#xA;" OwnerUserId="14753" LastActivityDate="2018-01-23T05:07:42.340" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15031" PostTypeId="2" ParentId="15028" CreationDate="2018-01-23T14:18:31.377" Score="1" Body="&lt;p&gt;How are you getting zero angle if it's not reading zero angle? Is this some arbitrary thing you do on startup? Was this a one-time reading you took and it works &lt;em&gt;every time&lt;/em&gt; the thing starts up, regardless of powered-down position?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I ask because it &lt;em&gt;sounds&lt;/em&gt; like you're actually using an incremental encoder. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;An incremental encoder tells you how many steps the encoder has gone in a particular direction, relative to an &lt;em&gt;arbitrary position&lt;/em&gt;, generally whatever the position was on power-on. Incremental encoders will often have an &lt;strong&gt;index&lt;/strong&gt; position that happens once per turn. This may be the term you're looking for.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A true absolute encoder will tell you exactly where it is, regardless of position on power-on. &lt;em&gt;There aren't any index positions on an absolute encoder&lt;/em&gt; because &lt;em&gt;every&lt;/em&gt; position is known.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-01-23T14:18:31.377" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="15032" PostTypeId="1" AcceptedAnswerId="15040" CreationDate="2018-01-23T15:07:59.297" Score="1" ViewCount="150" Body="&lt;p&gt;I am using a PNP algorithm to compute the rotation and translation of a camera given pre-mapped 3D points, and their corresponding projections on the 2D plane. The algorithm I am using is the one described in a &lt;a href=&quot;http://openaccess.thecvf.com/content_cvpr_2017/papers/Ke_An_Efficient_Algebraic_CVPR_2017_paper.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;CVPR 2017 paper&lt;/a&gt;, with implementations in both OpenCV and OpenMVG (I am using the latter).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Strangely, I am noticing a precise 'drift' in the position computed, that changes with the rotation angles. I.e.: If I hold the camera's position constant and just rotate it, according to the OpenCV coordinate convention, changes in pitch cause the position to drift in the Y direction, and changes in yaw cause the position to drift in the X direction (I have not tested roll yet.) When I tried to fit a curve to this dataset of pitch vs Y and yaw vs X values, I noticed a pretty constant variation. After removing scale factors and converting the angles into radians, this is the profile I see:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;\begin{eqnarray}&#xA;X \approx -4.0 * \psi \\&#xA;Y \approx 4.0 * \theta&#xA;\end{eqnarray}&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My translation units in this equation are meters but not true world units, because I removed the scale factor; angles are in radians. In true world units for the environment I tested in, the factor of 4.0 ended up being a factor of 20.0. Is this some sort of a commonly known transformation I am failing to account for? It's linear, so I am assuming it cannot be dependent on the rotation angle. I have skimmed through the paper and some relevant resources but I am unable to figure out the cause of this relationship.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Curve fitting results from MATLAB:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/atGtw.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/atGtw.png&quot; alt=&quot;Pitch curve&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/nnfNY.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/nnfNY.png&quot; alt=&quot;Yaw curve&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10310" LastEditorUserId="10310" LastEditDate="2018-01-23T16:00:38.287" LastActivityDate="2018-01-24T14:59:53.590" Title="Perspective N point solution: Position drifting linearly with rotation angles?" Tags="&lt;computer-vision&gt;&lt;pose&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15034" PostTypeId="1" CreationDate="2018-01-23T15:59:31.843" Score="1" ViewCount="63" Body="&lt;p&gt;first question in this forum :D&lt;/p&gt;&#xA;&#xA;&lt;p&gt;so i started creating a 2 link robotic arm in SIMULINK and made a function that builds its trajectory (cubic spline) and used it as an input for my joint. &#xA;so my input was position and output was the torque etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now i would like my input to be torque,how do i go about it?&#xA;should i create a transfer function out of the dynamic equation OR can i use the trajectory in someway OR is there a simple way?&#xA;If you have an answer i would appreciate if you can send a detailed explanation on  how you can do that in SIMULINK&#xA;&lt;a href=&quot;https://i.stack.imgur.com/x7u48.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/x7u48.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19387" LastEditorUserId="19387" LastEditDate="2018-01-23T16:13:08.253" LastActivityDate="2018-01-23T16:13:08.253" Title="Transforming position to torque" Tags="&lt;robotic-arm&gt;&lt;torque&gt;" AnswerCount="0" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="15037" PostTypeId="2" ParentId="14987" CreationDate="2018-01-23T20:00:40.260" Score="1" Body="&lt;p&gt;Whether to control absolute angle or angular rate depends a lot on how you want your design to work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a PID loop, the best parameter to calculate the  error for is the parameter that you want to control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you were commanding direction and had a compass sensor, it would make the most sense to control absolute angle rather than rate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your case, it seems like the the joy stick is commanding rotation rate and the gyro is measuring rotation rate as well; so, controlling rate might make the most sense in your application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;BUT&lt;/strong&gt; ... Think of the operator, what does &lt;strong&gt;HE&lt;/strong&gt; really want to be controlled.  IMHO, the operator really wants the quadcopter to hold position.  That is the most important parameter for him.  Rotation rate is only a means to an end.  He is setting rate to achieve position.  The operator's brain is actually running separate control loop that is trying to achieve the desired direction. If a wind blast comes, what does he what held - angular position or angular rate.  IMHO, he wants it to hold angular position.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know position is an inferred parameter from the gyro rate and the joystick rate; but, angular position error is what I would control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Again, the design is yours.  Only you know what is best to control.&lt;/p&gt;&#xA;" OwnerUserId="462" LastEditorUserId="462" LastEditDate="2018-01-23T21:21:54.923" LastActivityDate="2018-01-23T21:21:54.923" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="15038" PostTypeId="1" CreationDate="2018-01-24T02:59:09.563" Score="1" ViewCount="361" Body="&lt;p&gt;My motor setup is vibrating too much for my intended project. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are my assembled parts :&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;ClearPath® - Integrated Servo System motor, p/n CPM-MCVC-2310S-RQN&lt;/li&gt;&#xA;&lt;li&gt;two Actobotics 15 Tooth, Flanged XL timing pulley, p/n 615432&lt;/li&gt;&#xA;&lt;li&gt;one Actobotics 3/8” wide, 10&quot; long, 1/5 pitch XL timing belt, p/n B375-100XL&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The motor is running under the velocity controlled option and is spinning 0-4000 rpms depending on a knob setting. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;A few ideas:&lt;/em&gt; I was reading that with timing belts a larger pinion diameter could lessen vibrations. Should I search for something larger? The current pinions are around 1&quot; pitch. Also maybe my tension on the belt is not right? I'm not sure how to measure this or what tension I'm looking for. The assembly has slots, so I can move by hand to make the belt tighter or looser. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm far from an expert and this is my first project. Any advice would be much appreciated.&lt;/p&gt;&#xA;" OwnerUserId="19391" LastEditorUserId="2289" LastEditDate="2018-01-25T17:02:58.233" LastActivityDate="2018-02-02T19:14:42.840" Title="How can I reduce vibration of motor pulley assembly?" Tags="&lt;motor&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="15039" PostTypeId="2" ParentId="15038" CreationDate="2018-01-24T05:21:41.200" Score="2" Body="&lt;p&gt;A diagram would really help improve the answers you get on this. However, since it appears you are using 2 pulleys of the same size, I would guess that the belt may be flapping up and down, which might be causing some harmonic resonance throughout the entire assembly. I would try adding another pulley - an &quot;idler&quot; pulley, with a spring loaded attachment to dampen the fluctuations that are inevitable. One of Actobotics' Aluminum Robotic Shocks ( &lt;a href=&quot;https://www.servocity.com/aluminum-robot-shocks&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.servocity.com/aluminum-robot-shocks&lt;/a&gt; ) might be just what you need to do that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, a larger pulley size on the other end (not attached to the servo) might reduce some vibration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First thing to try, before everything mentioned above, is to see what kind of vibration there is with the belt removed. It &lt;strong&gt;&lt;em&gt;may&lt;/em&gt;&lt;/strong&gt; be that the motor mount or some other components or architecture  is causing the vibration. If you find the vibration is still there with the belt removed, then it could be that the way you are driving the motor (electronically) is what is really causing the vibration, and so you would need to fine tune that before moving on.&lt;/p&gt;&#xA;" OwnerUserId="19071" LastEditorUserId="19071" LastEditDate="2018-02-02T19:14:42.840" LastActivityDate="2018-02-02T19:14:42.840" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15040" PostTypeId="2" ParentId="15032" CreationDate="2018-01-24T05:35:14.687" Score="1" Body="&lt;p&gt;The problem was a bug in my code where I was accessing the translation part of the solution directly, and not the camera position, so it was indeed a missing transformation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For future reference, the true camera position from a PNP solution needs to be computed as&lt;/p&gt;&#xA;&#xA;&lt;p&gt;\begin{equation}&#xA;C = -\mathbf{R}^\top * t&#xA;\end{equation}&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\mathbf{R}$ is the rotation matrix and $t$ is the final translation vector returned by the PNP algorithm. Being a linear operator, this encodes a purely linear relationship with respect to the rotation angles.&lt;/p&gt;&#xA;" OwnerUserId="10310" LastEditorUserId="10310" LastEditDate="2018-01-24T14:59:53.590" LastActivityDate="2018-01-24T14:59:53.590" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="15041" PostTypeId="2" ParentId="15028" CreationDate="2018-01-24T21:41:01.863" Score="1" Body="&lt;p&gt;It really depends on what the what you are calling 'zero degrees'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typically 'home' refers to a well established reference point that serves as the reference point for the axis. Often the process of 'homing' reconciles the encoder measurement to this location by turning the motor until the reference location is detected then setting the encoder '0' based on that. If the encoder '0' does not correspond to 'home', this difference is often called the 'home offset'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: I found the following &lt;a href=&quot;http://servotronix.com/html/Help_CDHD_EN/HTML/home.htm#!Documents/607chhomeoffset.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;reference&lt;/a&gt; for what Servotronix refers to as 'home offset'.  It seems to fit what you are describing.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The configured difference between the zero position for the application and the machine home position.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="462" LastEditorUserId="462" LastEditDate="2018-01-25T16:44:09.057" LastActivityDate="2018-01-25T16:44:09.057" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="15044" PostTypeId="1" AcceptedAnswerId="15059" CreationDate="2018-01-25T12:00:12.993" Score="3" ViewCount="734" Body="&lt;p&gt;I'm trying to implement a simple ROS node to perform Moving Least Squares &lt;s&gt;filtering&lt;/s&gt; on a &lt;code&gt;sensor_msgs/PointCloud2&lt;/code&gt; topic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm following &lt;a href=&quot;http://pointclouds.org/documentation/tutorials/resampling.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;this PCL tutorial&lt;/a&gt;, which uses the &lt;a href=&quot;http://docs.pointclouds.org/trunk/classpcl_1_1_moving_least_squares.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;pcl/surface/mls.h&lt;/a&gt; file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My code is at &lt;a href=&quot;https://github.com/aaronsnoswell/pcl_pipeline_utils/blob/master/src/moving_least_squares.cpp&quot; rel=&quot;nofollow noreferrer&quot;&gt;this GitHub page&lt;/a&gt;, but replicated below;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;ros/ros.h&amp;gt;&#xA;&#xA;// PCL specific includes&#xA;#include &amp;lt;sensor_msgs/PointCloud2.h&amp;gt;&#xA;#include &amp;lt;pcl_conversions/pcl_conversions.h&amp;gt;&#xA;#include &amp;lt;pcl/point_cloud.h&amp;gt;&#xA;#include &amp;lt;pcl/point_types.h&amp;gt;&#xA;#include &amp;lt;pcl/io/pcd_io.h&amp;gt;&#xA;#include &amp;lt;pcl/kdtree/kdtree_flann.h&amp;gt;&#xA;#include &amp;lt;pcl/surface/mls.h&amp;gt;&#xA;&#xA;&#xA;/**&#xA; * Simple class to allow appling a Moving Least Squares smoothing filter&#xA; */&#xA;class MovingLeastSquares {&#xA;private:&#xA;    double _search_radius;&#xA;&#xA;public:&#xA;    MovingLeastSquares(double search_radius = 0.03)&#xA;        : _search_radius(search_radius)&#xA;    {&#xA;        // Pass&#xA;    };&#xA;&#xA;    ros::Subscriber sub;&#xA;    ros::Publisher pub;&#xA;    void cloudCallback (const sensor_msgs::PointCloud2ConstPtr&amp;amp; cloud_msg);&#xA;};&#xA;&#xA;&#xA;/**&#xA; * Callback that performs the Point Cloud downsapling&#xA; */&#xA;void MovingLeastSquares::cloudCallback (const sensor_msgs::PointCloud2ConstPtr&amp;amp; cloud_msg)&#xA;{&#xA;    // Container for original &amp;amp; filtered data&#xA;    pcl::PCLPointCloud2 cloud;&#xA;&#xA;    // Convert to PCL data type&#xA;    pcl_conversions::toPCL(*cloud_msg, cloud);&#xA;&#xA;    // Convert to dumbcloud&#xA;    pcl::PointCloud&amp;lt;pcl::PointXYZ&amp;gt;::Ptr dumb_cloud (new pcl::PointCloud&amp;lt;pcl::PointXYZ&amp;gt; ());&#xA;    //pcl::MsgFieldMap field_map;&#xA;    //pcl::createMapping&amp;lt;pcl::PointXYZ&amp;gt;(cloud_msg-&amp;gt;fields, field_map);&#xA;    //pcl::fromPCLPointCloud2&amp;lt;pcl::PointXYZ&amp;gt;(cloud, *dumb_cloud);&#xA;    pcl::fromPCLPointCloud2&amp;lt;pcl::PointXYZ&amp;gt;(cloud, *dumb_cloud);&#xA;&#xA;    // Create a KD-Tree&#xA;    pcl::search::KdTree&amp;lt;pcl::PointXYZ&amp;gt;::Ptr tree (new pcl::search::KdTree&amp;lt;pcl::PointXYZ&amp;gt;);&#xA;&#xA;    // Output has the PointNormal type in order to store the normals calculated by MLS&#xA;    pcl::PointCloud&amp;lt;pcl::PointNormal&amp;gt; mls_points;&#xA;&#xA;    // Init object (second point type is for the normals, even if unused)&#xA;    pcl::MovingLeastSquares&amp;lt;pcl::PointXYZ, pcl::PointNormal&amp;gt; mls;&#xA;&#xA;    mls.setComputeNormals (true);&#xA;&#xA;    // Set parameters&#xA;    mls.setInputCloud (dumb_cloud);&#xA;    mls.setPolynomialFit (true);&#xA;    mls.setSearchMethod (tree);&#xA;    mls.setSearchRadius (_search_radius);&#xA;&#xA;    // Reconstruct&#xA;    mls.process (mls_points);&#xA;&#xA;    // Convert from dumbcloud to cloud&#xA;    pcl::PCLPointCloud2 cloud_filtered;&#xA;    pcl::toPCLPointCloud2(mls_points, cloud_filtered);&#xA;&#xA;    // Convert to ROS data type&#xA;    sensor_msgs::PointCloud2 output;&#xA;    pcl_conversions::moveFromPCL(cloud_filtered, output);&#xA;&#xA;    // Publish the data&#xA;    pub.publish (output);&#xA;}&#xA;&#xA;&#xA;/**&#xA; * Main&#xA; */&#xA;int main (int argc, char** argv)&#xA;{&#xA;    // Initialize ROS&#xA;    ros::init (argc, argv, &quot;pcl_mls&quot;);&#xA;    ros::NodeHandle nh(&quot;~&quot;);&#xA;&#xA;    // Read optional leaf_size argument&#xA;    double search_radius = 0.03;&#xA;    if (nh.hasParam(&quot;search_radius&quot;))&#xA;    {&#xA;        nh.getParam(&quot;search_radius&quot;, search_radius);&#xA;        ROS_INFO(&quot;Using %0.4f as search radius&quot;, search_radius);&#xA;    }&#xA;&#xA;    // Create our filter&#xA;    MovingLeastSquares MovingLeastSquaresObj(search_radius);&#xA;    const boost::function&amp;lt; void(const sensor_msgs::PointCloud2ConstPtr &amp;amp;)&amp;gt; boundCloudCallback = boost::bind(&amp;amp;MovingLeastSquares::cloudCallback, &amp;amp;MovingLeastSquaresObj, _1);&#xA;&#xA;    // Create a ROS subscriber for the input point cloud&#xA;    MovingLeastSquaresObj.sub = nh.subscribe&amp;lt;sensor_msgs::PointCloud2&amp;gt; (&quot;/input&quot;, 10, boundCloudCallback);&#xA;&#xA;    // Create a ROS publisher for the output point cloud&#xA;    MovingLeastSquaresObj.pub = nh.advertise&amp;lt;sensor_msgs::PointCloud2&amp;gt; (&quot;/output&quot;, 10);&#xA;&#xA;    // Spin&#xA;    ros::spin ();&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This compiles fine for me, but I don't get any points coming through the output topic. Can anyone tell me what I'm doing wrong? I suspect it is something to do with the conversions at &lt;a href=&quot;https://github.com/aaronsnoswell/pcl_pipeline_utils/blob/78c88ec2bc0940556d85af81593cbfc9e1cf7b2d/src/moving_least_squares.cpp#L46&quot; rel=&quot;nofollow noreferrer&quot;&gt;line 46&lt;/a&gt; or &lt;a href=&quot;https://github.com/aaronsnoswell/pcl_pipeline_utils/blob/78c88ec2bc0940556d85af81593cbfc9e1cf7b2d/src/moving_least_squares.cpp#L74&quot; rel=&quot;nofollow noreferrer&quot;&gt;line 74&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you!&lt;/p&gt;&#xA;" OwnerUserId="19408" LastEditorUserId="19408" LastEditDate="2018-01-27T02:14:53.023" LastActivityDate="2018-01-27T02:16:05.807" Title="ROS PCL: Help with Moving Least Squares filter" Tags="&lt;ros&gt;&lt;point-cloud&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15045" PostTypeId="2" ParentId="14849" CreationDate="2018-01-25T13:38:00.537" Score="1" Body="&lt;p&gt;I would wire the two such that if A is subsuming a function of B such that the pin stays low as long as the inhibition lasts. Either B could check the state of this pin or it could have an interrupt set to signal when the pin goes low.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For B, if the action was already happening, a short interrupt routine could stop the action. If the action was about to begin then it could check the state of the pin to see if it should being.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would put all the logic on A and have B hooked up to the sensors and actutors. Every time something changed it would communicate with A and A would handle all the logic. Just my thoughts. If the logic were difficult, I would use a Raspberry Pi instead of Arduino A.&lt;/p&gt;&#xA;" OwnerUserId="19275" LastActivityDate="2018-01-25T13:38:00.537" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15046" PostTypeId="2" ParentId="14972" CreationDate="2018-01-25T15:25:06.767" Score="1" Body="&lt;p&gt;I too was a beginner (and to a large extent still am very much so) so I will share my experience with you, as maybe it might help you find your own path and avoid my mistakes! Caveat first for background - this is more about the construction then the coding as my robot was radio controlled and had no built in intelligence. However it was built from scratch from the ground up - no kit - no prior knowledge, no Autocad or 3D printer, basically nada except for youtube and a concept in my mind and a cardboard to cut out the shape and lay out the parts. In this way I essentially built a battle robot for participation in robot wars and had tight timelines and weight restrictions to contend with. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyhow, the point is that you can (as I did) build your desired robot if you (a) know what you want it to do (b) are driven enough to make the effort and sacrifices necessary. Furthermore, you can also easily do so partially from recycled (or re-purposed) items and in your case it won't be as expensive or take as long either! &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the record, my robot used 2 x 14.4 Volt ex-cordless driller motors for driving wheels (tank drive), 2 wheels from an old vacuum cleaner, brackets that hold up fire pipes as engine mounts, old printer rods as the main weapon, used ball bearings from an old scooter and from a photocopier (amazingly exactly the same) for bearings for the weapon. The body was made from an upper and lower - 3 mm poly-carbonate sheet (purchased and then hand cut with a saw), a cut up square tent pole for brackets to connect the top and bottom sheets, screws, a pulley taken from an old tape recorder, end bits of marine foam, a 2400 KV brush-less motor and 3 controllers that I purchased and batteries. Lots and lots of lithium batteries since I had no idea how long they would last in the battle. (So now I am heavily overstocked). Then I also had to buy a radio control transmitter and receiver,  chargers, and fireproof pockets for all those batteries.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There were lots and lots of wrong turnings and the whole expense came to around €300. BUT guess what? I do not regret one cent of this. Mark my words - I learnt much more actually doing than if I had attended a course and paid the same amount to the tutor - and I still have the robot and everything else, so all is good.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the record my next project will be a robot that uses Arduino, of which I am a great fan, so I might follow you in turn on this one. Anyhow, as you may know, you can get lots of cheap arduino stuff from china. I personally use &lt;a href=&quot;http://www.banggood.com&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.banggood.com&lt;/a&gt;.  Of course I had to build big and strong as it was for robot wars - but this brought along many additional expenses which you will avoid by staying small. For instance in my case if my weapon motor (brush-less type) had stalled in battle, (youtube indicated that) the current in the cables could have reached many amps, so (being afraid and not 100% sure of what might happen - melting, fire etc) I went for overkill and bought silicon cable that can take 60 amps! I then also bought XT-60 connectors to allow for fast battery swaps etc. (Turned out the battery lasted all 3 minutes of the bout easily, while driving 3 motors at once. It was a Li-PO 3S battery (11.1V nominal/12.6V when fully charged). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Getting back to Arduino (there are other boards out there too!), If you want to start with a ready made (kit form) robot, you can buy one of these &lt;a href=&quot;http://store.makeblock.com/product/mbot-robot-kit&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://store.makeblock.com/product/mbot-robot-kit&lt;/a&gt;. These are based on an Arduino platform, are cheap and pretty basic though they do take some sensors, and if you want to avoid the cost of something like a lego mindstorms, you could do worse than start here. Its a good place to start coding a robot and if you have children they will love them. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you prefer to build your own then you can simply copy them! Go to your favourite Chinese supplies store and buy an arduino (€15 approx), 2 controllers (say €10 each), a pack of sensors (say €25), and maybe some wheels and shafts (or just buy the complete motor plus wheels for almost nothing). Then all you need is a platform (can be made of plywood or whatever and a battery. Plan what you want the robot to do and start connecting! As for which software to invest time in, I found this article to be most useful &lt;a href=&quot;https://blog.robotiq.com/what-is-the-best-programming-language-for-robotics&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://blog.robotiq.com/what-is-the-best-programming-language-for-robotics&lt;/a&gt;. Of course Arduino has its own language so you can start there. Sorry this was so long but I get carried away when talking about my favourite subject. I will just end by including a photo of my robot to inspire you to be creative. Enjoy and good luck.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/x3GeC.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/x3GeC.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="11335" LastEditorUserId="11335" LastEditDate="2018-01-25T15:34:13.027" LastActivityDate="2018-01-25T15:34:13.027" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15047" PostTypeId="2" ParentId="2508" CreationDate="2018-01-25T16:16:59.690" Score="0" Body="&lt;p&gt;A company I do work for has a patented device that scans prescription bottle labels resulting in a flat image.  We have been discussing ways of scaling this up for larger cylindrical objects.  Is this still something you are interested in ?&lt;/p&gt;&#xA;" OwnerUserId="19411" LastActivityDate="2018-01-25T16:16:59.690" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15048" PostTypeId="2" ParentId="15028" CreationDate="2018-01-25T21:12:55.817" Score="0" Body="&lt;p&gt;Home positions are often used for calibration but don't necessarily coincide with zero in the coordinate frame of interest.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Encoder offset would be the term used to describe the difference between the joint position and encoder position. I'd recommend that one. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The fact that you are using a joint position that you have selected as the zero position when you are calibrating is not really important.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2018-01-25T21:12:55.817" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15049" PostTypeId="5" CreationDate="2018-01-26T01:41:32.610" Score="0" Body="&lt;p&gt;Denavit–Hartenberg parameters (also called DH parameters) are the four parameters associated with a particular convention for attaching reference frames to the links of a spatial kinematic chain, or robot manipulator:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\theta_{i}$, $d_{i}$, $a_{i}$, $\alpha_{i}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Homogeneous transformations can then be represented as the product of a series of these four basic transformations.&lt;/p&gt;&#xA;" OwnerUserId="17029" LastEditorUserId="17029" LastEditDate="2018-01-26T11:09:11.003" LastActivityDate="2018-01-26T11:09:11.003" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15050" PostTypeId="4" CreationDate="2018-01-26T01:41:32.610" Score="0" Body="Denavit–Hartenberg parameters are the parameters associated with a particular convention for attaching reference frames to the links of spatial kinematic chains, or robot manipulators." OwnerUserId="17029" LastEditorUserId="17029" LastEditDate="2018-01-26T11:09:17.173" LastActivityDate="2018-01-26T11:09:17.173" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15051" PostTypeId="1" AcceptedAnswerId="15053" CreationDate="2018-01-26T03:50:41.487" Score="1" ViewCount="480" Body="&lt;p&gt;I am trying to understand the control of the quadrotor in 2 dimensions from the Penn course on aerial robotics. The attached image describes the linearization of the control efforts assuming that the quadrotor is near the hover position. Everything seems fine except Equation 7 to me. The control effort u1 makes sense as u1 = mg + mz¨c. The original equation z¨ = − g + u1*m is solved for u1, and z¨c (the actual z acceleration) is used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the equation for u2 goes from φ¨ =u2/Ixx  to u2 =Ixx*φ¨T (t), where φ¨T (t) is the desired value of φ acceleration instead of the actual value of φ acceleration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone explain this to me?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/Bpsrt1w.png&quot; alt=&quot;2D CONTROL&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: For further clarity, let me try rephrasing this question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We start with three simplified, linearized equations:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\ddot{y} = -g * \phi&#xA;$$&#xA;$$&#xA;\ddot{z} = -g + \frac{u_1}{m}&#xA;$$&#xA;$$&#xA;\ddot{\phi} = \frac{u_2}{I_{xx}}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For $u_1$, we solve to get: &#xA;$$&#xA;u_1 = m\ddot{z} +mg&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and since our control effort is defined as: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\ddot{r_c} =  \ddot{r_T}(t) k_{v}(\dot{r_T}-\dot{r}) + k_{p}(r_T-r) + &#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;we plug in the Z part of this control effort and get &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;u_1 = m\ddot{z} +mg&#xA;$$&#xA;$$&#xA;u_1 = \ddot{z_T}(t) + k_{p,z}(\dot{z_T}(t)-z) + k_{v,z}(\dot{z_T}(t)-\dot{z}) +mg&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this case, when we took the Z part of the PD control effort, we replaced $\ddot{z}$ with the formula for $\ddot{z_c}$ (our control effort)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, that is not what happens when solving for u2. We start off &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;u_2 = I_{xx}*\ddot{\phi}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This time, when we replace $\ddot{\phi}$, I would think it would be replaced the same way as above, using $\ddot{\phi_c}$ our control effort. So it would look like this:&#xA;$$&#xA;u_2 = I_{xx}*\ddot{\phi_c}&#xA;$$&#xA;$$&#xA;u_2 = I_{xx} [\ddot{\phi_T}(t) + k_{v,\phi}(\dot{\phi_T}(t)-\dot{\phi}) + k_{p,\phi}(\phi_T(t)-\phi)]&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead, we do this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;u_2 = I_{xx}*\ddot{\phi_T}&#xA;$$&#xA;$$&#xA;u_2 = I_{xx} [\ddot{\phi_c}(t) + k_{v,\phi}(\dot{\phi_c}-\dot{\phi}) + k_{p,\phi}(\phi_c-\phi)]&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If we go back to our basic PD control effort formula, this contradicts it. With this replacement, we are saying that: &#xA;$$&#xA;\ddot{\phi_T} = \ddot{\phi_c}(t) + k_{v,\phi}(\dot{\phi_c}-\dot{\phi}) + k_{p,\phi}(\phi_c-\phi)&#xA;$$&#xA;which is not true because&#xA;$$&#xA;\ddot{r_c} =  \ddot{r_T}(t) + k_{v}(\dot{r_T}-\dot{r}) + k_{p}(r_T-r) &#xA;$$&#xA;which means that the real solution for $\ddot{\phi_T}$ would be&#xA;$$&#xA;\ddot{\phi_T} = \ddot{\phi_c}(t) - k_{v,\phi}(\dot{\phi_c}-\dot{\phi}) - k_{p,\phi}(\phi_c-\phi)&#xA;$$&#xA;That is my confusion!&lt;/p&gt;&#xA;" OwnerUserId="19415" LastEditorUserId="19415" LastEditDate="2018-01-26T19:13:15.923" LastActivityDate="2018-01-26T19:13:15.923" Title="Quadrotor 2D Dynamics" Tags="&lt;quadcopter&gt;&lt;control&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="15053" PostTypeId="2" ParentId="15051" CreationDate="2018-01-26T12:52:36.970" Score="2" Body="&lt;p&gt;Remember, the $y$ position of the quadrotor depends on the angle $\phi$, therefore, in order to control $y$, we need to control $\phi$ in a way that yields the desired $y$. To control the angle $\phi$, we start from the original equation:&#xA;$$&#xA;\ddot{\phi} = \frac{u_2}{I_{xx}}&#xA;$$&#xA;Now the goal is to design a controller by which the angle is controlled. The PD-computed torque controller has this form:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;u_2 = I_{xx} [\ddot{\phi_c} + k_{v,\phi}(\dot{\phi_c}-\dot{\phi}) + k_{p,\phi}(\phi_c-\phi)]&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now plug $u_2$ inside the original function of the angle, hence&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{align}&#xA;\ddot{\phi} &amp;amp;= \frac{u_2}{I_{xx}} \\&#xA;  &amp;amp;= \frac{I_{xx} [\ddot{\phi_c} + k_{v,\phi}(\dot{\phi_c}-\dot{\phi}) + k_{p,\phi}(\phi_c-\phi)]}{I_{xx}} \\&#xA;  &amp;amp;= \ddot{\phi_c} + k_{v,\phi}(\dot{\phi_c}-\dot{\phi}) + k_{p,\phi}(\phi_c-\phi)&#xA;\end{align}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Notice that the term $I_{xx}$ is eliminated deliberately. The notion is trivial. Relying on the mathematical model, we can design a controller that compensates for linear or nonlinear terms (e.g. as the case with $I_{xx}$). &lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="2155" LastEditDate="2018-01-26T13:11:39.907" LastActivityDate="2018-01-26T13:11:39.907" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="15054" PostTypeId="2" ParentId="15027" CreationDate="2018-01-26T13:22:00.010" Score="0" Body="&lt;p&gt;I think you misunderstood the Simulink. The transfer function is the system and the reference signal in the picture you've posted is the step function. The input for the system in the Simulink is a constant value of 20 magnitude. You can see that from the figure. The curve goes to 20 in 18 unit time and stays for the future which indicates the system is stable. &lt;/p&gt;&#xA;" OwnerUserId="2155" LastActivityDate="2018-01-26T13:22:00.010" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="15055" PostTypeId="1" CreationDate="2018-01-26T15:19:26.230" Score="4" ViewCount="1079" Body="&lt;p&gt;Hi im having problem with Inverse kinematic using RVC toolbox in matlab for RRR manipulator.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; L_1 = 20;&#xA; L_2 = 50;&#xA; L_3 = 40;&#xA; L(1) = Link([0 L_1 0 pi/2]);&#xA; L(2) = Link([0 0 L_2 0]);&#xA; L(3) = Link([0 0 L_3 0]);&#xA; Robot = SerialLink(L);&#xA; Robot.name = 'RRR_Robot';&#xA; T = [1 0 0 0; 0 1 0 0; 0 0 1 0; 0 0 0 1];&#xA; J = Robot.ikine(T, [0,0,0], [1 1 1 0 0 0]) *180/pi; &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Error using SerialLink/ikine (line 164) Number of robot DOF must be &gt;= the same number of 1s in the mask matrix&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can somone explain me why my code is not working? / how to fix it ? &lt;/p&gt;&#xA;" OwnerUserId="19418" LastEditorUserId="17029" LastEditDate="2018-01-26T15:25:58.000" LastActivityDate="2018-12-29T21:55:53.037" Title="inverse kinematics matlab RVC for 3 joint RRR" Tags="&lt;robotic-arm&gt;&lt;inverse-kinematics&gt;&lt;matlab&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15057" PostTypeId="1" CreationDate="2018-01-26T18:21:23.263" Score="0" ViewCount="798" Body="&lt;p&gt;I've used 4 sensors &amp;amp; a standard smart robot chassis kit with geared motors &amp;amp; L298 motor driver.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the difference between turning in:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;One wheel stopped, one wheel moves.&lt;/li&gt;&#xA;&lt;li&gt;Both wheels moves, but in opposite direction.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;What is the best way to go in a curve?&#xA;What is the best way to turn 90°?&lt;/p&gt;&#xA;" OwnerUserId="19420" LastEditorUserId="9176" LastEditDate="2018-10-31T18:05:26.527" LastActivityDate="2019-03-24T17:01:52.413" Title="What is the best way to turn in 2WD simple differential drive line following robot?" Tags="&lt;arduino&gt;&lt;line-following&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15058" PostTypeId="2" ParentId="14844" CreationDate="2018-01-26T23:36:44.107" Score="2" Body="&lt;p&gt;Adding a worm gear to connect the output shaft to the load you are trying to move might solve your problem, since worm gear arrangements are &quot;self locking&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a reference for you: &lt;a href=&quot;http://mechteacher.com/worm-gear/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://mechteacher.com/worm-gear/&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the way, what the others have said is 100% correct. It seems you might be wanting some way to minimize the inherent play that is always present in a gear train. Also, you might want to look on the net for different methods used to control backlash to get ideas on how to control the movement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, is the motor powered or not powered when you detect the movement? Whether or not you can keep power applied will make a difference, too.&lt;/p&gt;&#xA;" OwnerUserId="19071" LastEditorUserId="19071" LastEditDate="2018-01-26T23:45:33.843" LastActivityDate="2018-01-26T23:45:33.843" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15059" PostTypeId="2" ParentId="15044" CreationDate="2018-01-27T02:16:05.807" Score="2" Body="&lt;p&gt;Update: I got it working. Thanks for the feedback everyone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To address some of the comments:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I wasn't aware that 'filtering' has a specific meaning in the context of PCL. My code wasn't trying to implement an actual filter.&lt;/li&gt;&#xA;&lt;li&gt;I was able to compile and run the PCL tutorial no problems&lt;/li&gt;&#xA;&lt;li&gt;Sure enough, my problem was in the conversion from ROS message types to PCL point cloud types. I was essentially missing a call to pcl_conversions::toPCL().&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The working code can be seen &lt;a href=&quot;https://github.com/aaronsnoswell/pcl_pipeline_utils/blob/master/src/pcl_moving_least_squares.cpp&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="19408" LastActivityDate="2018-01-27T02:16:05.807" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15060" PostTypeId="2" ParentId="15057" CreationDate="2018-01-27T07:51:19.233" Score="0" Body="&lt;p&gt;You should use &lt;strong&gt;inverse kinematics&lt;/strong&gt; equations for teleoperation/derive your robot:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The best way to the deriving curve is use from inverse kinematics equation and the best way for turning 90 degree (Both wheels move, but in opposite direction until 90 degree (this reason to your robot's &lt;strong&gt;dimensional&lt;/strong&gt; )) which that handled by inverse kinematics too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/xFEPW.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xFEPW.jpg&quot; alt=&quot;inverse kinematics equation image&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which &lt;strong&gt;&lt;code&gt;r&lt;/code&gt;&lt;/strong&gt; is wheel radius, &lt;strong&gt;&lt;code&gt;d&lt;/code&gt;&lt;/strong&gt; is robot width, &lt;strong&gt;&lt;code&gt;v&lt;/code&gt;&lt;/strong&gt; is linear velocities, &lt;strong&gt;&lt;code&gt;w&lt;/code&gt;&lt;/strong&gt; is angular velocities, and &lt;code&gt;thetaR&lt;/code&gt; and &lt;code&gt;thetaL&lt;/code&gt; are left/right wheel RPM that you must get them.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And before these, you must obtain/solve &lt;strong&gt;&lt;code&gt;v&lt;/code&gt;, &lt;code&gt;w&lt;/code&gt;&lt;/strong&gt; from using &lt;strong&gt;wheels encoder&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In additional, check this post: &lt;a href=&quot;https://robotics.stackexchange.com/questions/15013/calculating-differential-drive-robot-icc-position&quot;&gt;calculating differential drive robot ICC position&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18870" LastEditorUserId="18870" LastEditDate="2019-03-24T17:01:52.413" LastActivityDate="2019-03-24T17:01:52.413" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15061" PostTypeId="1" AcceptedAnswerId="15062" CreationDate="2018-01-27T11:29:32.267" Score="0" ViewCount="94" Body="&lt;p&gt;I am going to realize a real time monitoring system for medical care and finally the system should make phone calls according to the severity of the result , I would like to know is it best to perform realtime signal processing on raspberry or stm , &#xA;the processed signal is ECG  and the processing will include denoising , segmentation , feature extraction , classification . I am using an ECG acquisition sensor ad8232 and I found while doing my research that stm32 provides a dsp unit(digital signal processor) , that raspberry pi is not suitable for realtime activities because it has no timer and so u need to add other components , also I found real time operating systems such as RTAI &lt;a href=&quot;https://www.rtai.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.rtai.org/&lt;/a&gt; that should work on raspberry's os &#xA;what how can I choose ?&#xA;an other question is does working on the os of the raspberry make this count as an embedded project ?&lt;/p&gt;&#xA;" OwnerUserId="19421" LastActivityDate="2018-01-27T21:01:31.507" Title="hard realtime signal processing" Tags="&lt;raspberry-pi&gt;&lt;real-time&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15062" PostTypeId="2" ParentId="15061" CreationDate="2018-01-27T20:20:54.473" Score="2" Body="&lt;p&gt;This sounds like a great project.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should have a list of at least 20 processors from at least 10 companies that you are choosing from when starting a new project. Understand your requirements and make an informed decision.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will find that most available processor manufacturers are careful about using their products in life critical systems. For example, &lt;a href=&quot;http://www.st.com/resource/en/brochure/brhealth.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;STMicroelectronics health products brochure&lt;/a&gt; says &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;UNLESS EXPRESSLY APPROVED IN WRITING BY AN AUTHORIZED ST&#xA;  REPRESENTATIVE, ST PRODUCTS ARE NOT RECOMMENDED, AUTHORIZED OR&#xA;  WARRANTED  FOR USE IN LIFE SAVING, OR LIFE SUSTAINING APPLICATIONS,&#xA;  NOR IN PRODUCTS OR SYSTEMS WHERE FAILURE OR MALFUNCTION MAY RESULT IN &#xA;  PERSONAL INJURY, DEATH, OR SEVERE PROPERTY OR ENVIRONMENTAL DAMAGE.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Most chip manufacturers have something similar.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This should not stop your project, but you should keep in mind that if you make enough progress, you will eventually need to use processors and components that can be certified for use in your country.&lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="184" LastEditDate="2018-01-27T21:01:31.507" LastActivityDate="2018-01-27T21:01:31.507" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15064" PostTypeId="1" CreationDate="2018-01-28T03:03:10.760" Score="4" ViewCount="890" Body="&lt;p&gt;So here is my problem. I need to grab an object with my robotic arm, but I don't know the position of the object. The only thing I know is the angle between object and gripper. You will maybe better understand better from this image.  &lt;a href=&quot;https://i.stack.imgur.com/eQwSu.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/eQwSu.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my question is, how do I do that my robotic arm will be approaching the possible position of object in straight line? I tried inverse kinematic but it didn't work, because I don't know position of the object although I tried set the position of the object to end of the gripper. So I think IK is not the right way.&lt;/p&gt;&#xA;" OwnerUserId="19428" LastActivityDate="2018-07-30T05:27:06.943" Title="How to move robotic arm in straight line" Tags="&lt;robotic-arm&gt;&lt;inverse-kinematics&gt;&lt;algorithm&gt;&lt;movement&gt;&lt;precise-positioning&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="15065" PostTypeId="1" CreationDate="2018-01-28T09:35:54.790" Score="2" ViewCount="4246" Body="&lt;p&gt;I'm planning to setup ROS and it's dependencies in a conda environment (similar to virtualenv). I've read a few posts where they state it's not going to be simple. Did any of you guys do it ? If you did, can you please share the steps ? Thanks in advance!&lt;/p&gt;&#xA;" OwnerUserId="19429" LastActivityDate="2021-03-20T17:05:40.523" Title="Installing ROS in a conda environment" Tags="&lt;ros&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15068" PostTypeId="1" CreationDate="2018-01-28T18:07:27.277" Score="1" ViewCount="992" Body="&lt;p&gt;I want to implement deep reinforcement learning using a UR5 robot. A little research told me nowadays researchers are using openAI gym, Mujoco, rllab as their frameworks. The thing is, I want to train my UR5 robot in virtual environment and transfer the learning to my real robot. The task can be peg insertion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Previously I worked on a project using ROS with the UR5 robot and a Kinect. In that project, we are using MoveIt for motion planning. Everything has already been set up and I'm quite familiar with ROS and MoveIt.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do you think I should bother myself modeling the UR5 robot and adding RGBD camera using Mujoco (I am not sure if I can do this in Mujoco), and after that training it using openAI gym framework, and finally transferring learning to the real robot using ROS? Or should I stick with ROS and MoveIt while incorporating openAI gym only as my reinforcement learning framework? I just don't see why I need Mujoco if I can use MoveIt and gazebo for modeling, which is already done. Thanks for your advice on this. &lt;/p&gt;&#xA;" OwnerUserId="19431" LastActivityDate="2019-08-11T12:14:44.787" Title="Mujoco and MoveIt!" Tags="&lt;ros&gt;&lt;reinforcement-learning&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15069" PostTypeId="2" ParentId="15068" CreationDate="2018-01-28T19:16:43.177" Score="0" Body="&lt;p&gt;The question would have been easier to answer had you put links to the various packages you intended to use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a reason you don't want to use Gazebo (the simulator which is normally used with ROS)? You might be able to find the UR5 robot and RGBD camera already created for Gazebo.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would do as you suggest in the last paragraph of your question. You can use whatever planner and learning you want to with ROS.&lt;/p&gt;&#xA;" OwnerUserId="19275" LastActivityDate="2018-01-28T19:16:43.177" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15070" PostTypeId="1" CreationDate="2018-01-28T21:28:05.743" Score="3" ViewCount="274" Body="&lt;p&gt;To my understanding appearance-based SLAM uses &lt;strong&gt;only&lt;/strong&gt; information coming from sensors for mapping and localization. It completely discards control information from actuators. I'm I correct?&lt;/p&gt;&#xA;" OwnerUserId="19433" LastActivityDate="2021-03-30T12:03:15.303" Title="What is appearance-based SLAM?" Tags="&lt;slam&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="15073" PostTypeId="2" ParentId="9336" CreationDate="2018-01-29T02:39:10.370" Score="1" Body="&lt;p&gt;Jacobian does not have to be a square matrix. It is a matrix that maps joint velocities $\dot{q}$ to tool velocities $\dot{x}$ so its size is whatever fits with the two velocity vectors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your case, since the tool velocity vector is $\dot{x} \in \mathbf{R}^7$, a Jacobian will be $J \in \mathbf{R}^{7 \times 6}$, when your robot has $6$ DOFs.&lt;/p&gt;&#xA;" OwnerUserId="7610" LastActivityDate="2018-01-29T02:39:10.370" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15074" PostTypeId="1" CreationDate="2018-01-29T12:52:32.507" Score="0" ViewCount="448" Body="&lt;p&gt;I am developing a GPS-Localizer using accelerometer and gyroscope sensor values. for more accuracy, i want to calculate sensor biases, so i already implemented the accelerometer calculation via matlab using an input vector $ a$ and it looks like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;function [sigma_out, mean_out, bias_out] = aCalibration (a)&#xA;&#xA;sigma_out = std(a, 0, 2);&#xA;mean_out = mean(a, 2);&#xA;&#xA;% The direction of the mean acceleraion is assumed to be the direction &#xA;% of gravity (thus down). Any other component is considered bias. This &#xA;% is by no means an acurate representation of the biases. &#xA;bias_out = mean_out - mean_out / norm(mean_out) * 9.81;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;For the Gyroscope i use an input vector $w$, so i calculate standard deviation and mean like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;function [w_sigma, w_mean, w_bias] = wCalibration (w)&#xA;&#xA;% TODO: implement the sigma/mean/bias computation&#xA;w_sigma = std(w,0,2);&#xA;w_mean = mean(w,2)&#xA;w_bias = [0; 0; 0];&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;How do i calculate the gyroscope bias $b_w$ now? i dont know i think i still need to consider some angular velocity constants but i dont know which ones.... :(&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks for the help!&lt;/p&gt;&#xA;" OwnerUserId="19355" LastActivityDate="2018-10-26T21:00:19.090" Title="How to Calculate gyroscope bias given an input vector of measurements w?" Tags="&lt;gyroscope&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15075" PostTypeId="2" ParentId="15070" CreationDate="2018-01-29T14:40:42.970" Score="0" Body="&lt;p&gt;This depends on the localization approach on your &lt;strong&gt;SLAM (Simultaneous localization and mapping)&lt;/strong&gt;, &lt;strong&gt;i.e.  AMCL&lt;/strong&gt; localization algorithm using the laser (sensor) + wheels encoders (actuators sensors).   &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;[&lt;strong&gt;Note&lt;/strong&gt;]: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This algorithm based on adaptive Monte Carlo + EKF (extended Kalman filter)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_SLAM_Methods&quot; rel=&quot;nofollow noreferrer&quot;&gt;list of SLAM&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;" OwnerUserId="18870" LastEditorUserId="18870" LastEditDate="2018-07-13T15:15:26.297" LastActivityDate="2018-07-13T15:15:26.297" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15076" PostTypeId="2" ParentId="167" CreationDate="2018-01-29T15:00:43.193" Score="0" Body="&lt;h1&gt;If you want to have a accurate PID coefficient:&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Get your statistic actuator data (i.e. &lt;kbd&gt;collecting input voltages&lt;/kbd&gt; + &lt;kbd&gt;encoder pulses&lt;/kbd&gt; in a const frequently (&lt;code&gt;0.01sec&lt;/code&gt;) time for &lt;code&gt;20secs&lt;/code&gt; as a &lt;code&gt;3&lt;/code&gt;x&lt;code&gt;2000&lt;/code&gt; matrix)&lt;/li&gt;&#xA;&lt;li&gt;Get transfer function (TF) of your actuator (using &lt;a href=&quot;https://www.mathworks.com/videos/introduction-to-system-identification-toolbox-68901.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ident&lt;/a&gt; toolbox in MATLAB).&lt;/li&gt;&#xA;&lt;li&gt;Finally, use &lt;a href=&quot;https://www.mathworks.com/videos/pid-control-design-with-control-system-toolbox-68748.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;PIDTool&lt;/a&gt; toolbox in MATLAB and upload your transform function.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;&lt;h1&gt;Or in a quick and simple manner:&lt;/h1&gt;&#xA;&lt;p&gt;There is a quicker approach called &lt;a href=&quot;https://en.wikipedia.org/wiki/Ziegler%E2%80%93Nichols_method&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ziegler–Nichols&lt;/a&gt;:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/CF9m6.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/CF9m6.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;And in this image demonstrate &lt;strong&gt;PID parameters effects&lt;/strong&gt;:&lt;br /&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/387Rz.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/387Rz.png&quot; alt=&quot;PID parameters effects&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18870" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2019-04-20T20:40:59.950" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15078" PostTypeId="2" ParentId="15074" CreationDate="2018-01-29T15:42:28.437" Score="1" Body="&lt;p&gt;Do the exact same thing you're doing for the accelerometer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the accelerometer, you're assuming that the device isn't &lt;em&gt;actually&lt;/em&gt; constantly accelerating in any particular direction. You assume that the &lt;em&gt;net long term acceleration is zero&lt;/em&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are you expecting that the gyro is constantly rotating in a particular direction? Or are you assuming that the &lt;em&gt;net long term rotational speed&lt;/em&gt; is also zero?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only difference is that you know a &quot;zero reading&quot; of an accelerometer is [0; 0; -g], and the &quot;zero reading&quot; of a gyroscope is [0; 0; 0].&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is all pretty similar to &lt;a href=&quot;https://robotics.stackexchange.com/a/15026/9720&quot;&gt;another answer I gave recently&lt;/a&gt;. You could essentially use the same function for both, as in something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;function [sigmaOut, meanOut, unknownBias] = Calibrate(data, knownBias)&#xA;sigmaOut = std(data);&#xA;meanOut = mean(data);&#xA;unknownBias = meanOut - knownBias;&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Pass in &lt;code&gt;[0; 0; -9.81]&lt;/code&gt; for an accelerometer's known bias and &lt;code&gt;[0; 0; 0]&lt;/code&gt; for the gyro. I'll point out that you don't have any rotations included in your code, so be careful there. Orientation matters!&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-01-29T15:42:28.437" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15079" PostTypeId="2" ParentId="15064" CreationDate="2018-01-29T16:01:10.803" Score="1" Body="&lt;p&gt;First of all you should start to check 2 things:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;the angle $\alpha$ is given by some sensor&lt;/li&gt;&#xA;&lt;li&gt;the object and the path to the object (blue dotted line)&#xA;both lie in the arm workspace&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;If 1. is not met, I suggest you to look in the literature of eye-in-hand servoing.&#xA;If 2.  is not met your object can not be reached ... you might still want to travel until the end of the workspace following the dotted line.&#xA;From now I assume both are met.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Concerning the following of the dotted line, you where right in your attempt of using IK, but if you only specify the location of the object the IK which is composed of a pseudo-inverse/inverse react by not following the line you describe because the inversion can be seen as least square in the joint space, so it will minimize the joint motion. If you want to follow the line, you need to generate a trajectory from you current end-effector position to somewhere further along the line (if you know where is the ground plane you can gp up to it). Then this trajectory can be fed to the IK and if it lies inside the robotic arm limits it will follow it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further consideration, based on the number of DoFs of your robot and if you go in 6D space, you might or might not be able to follow the line with any given orientation of the gripper. In your drawing for example a part of the line can be followed with the desired orientation, while an other part can be followed but only if the orientation is let free, i.e. follows the robot arm constraints.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastEditorUserId="18235" LastEditDate="2018-07-30T05:27:06.943" LastActivityDate="2018-07-30T05:27:06.943" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15080" PostTypeId="2" ParentId="15057" CreationDate="2018-01-29T16:18:21.897" Score="0" Body="&lt;p&gt;The question is subjective along two directions&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;what is best way ? Fastest turning speed or best way to conserve momentum ?&lt;/li&gt;&#xA;&lt;li&gt;How do you want to turn ? do you want to turn with the CoM remaining almost still or with the CoM following a curve ?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I guess that you would like to follow curves in general  in this case usually you command different velocities to both wheels, and in most case you don't need to stop or revert one wheel (this is conditioned by the curvature of the path and the robot kinematics/dynamics).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In small spaces or at low speed it might be useful to turn while keeping the CoM steady, ie turn instantaneously around an vertical axis passing by the middle point between you wheels, which should be where you try to have your CoM. In this case the best is to use opposite sign spinning commands of the same magnitude to your wheels so that there is no lateral motion induced.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the end, you can generate a control algorithm going from one hand of the scope to the other hand based on the desired trajectory you want to follow.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2018-01-29T16:18:21.897" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15081" PostTypeId="2" ParentId="15055" CreationDate="2018-01-29T17:13:09.553" Score="1" Body="&lt;p&gt;based on the &lt;a href=&quot;http://petercorke.com/wordpress/?ddownload=343&quot; rel=&quot;nofollow noreferrer&quot;&gt;documentation&lt;/a&gt; you shall use the mask option, see page 291.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The mask highlight  what translation/orientation should be considered in the world frame. Are you sure that your RRR robot can move follow a trajectory which is specified by xyz ? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also you ask the end-effector to go at the base of the robot that might not be physically possible ... Make sure that your goal position is comprised in the workspace. To do so the best is to use first forward kinematic with a reasonable joint configuration and then try to single to solve your issue with IK on the given position, this way you know that the goal is achievable and can play around with the parameter of th IK until you are satisfied.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2018-01-29T17:13:09.553" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15082" PostTypeId="2" ParentId="117" CreationDate="2018-01-29T18:05:11.973" Score="0" Body="&lt;p&gt;In generally there is difference between 4 and 8 neighborhood in many algorithms which are &lt;strong&gt;graph based&lt;/strong&gt;, (such as A*, MRF(markov random field), edge detection algorithm and etc).    &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This depend on computational complexity, time, performance or some things like this (Trade off/balance between of them).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I will give some examples:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;in MRF algorithm you can choose 4 neighborhood in each pixel (left, right, up, down)&lt;/li&gt;&#xA;&lt;li&gt;or you can choose 8 neighborhood in each pixel (left, right, top, down, top right, top left, down right, down left)&lt;/li&gt;&#xA;&lt;li&gt;or you can choose 8 neighborhood again in each pixel which 4 of them is assigned to current frame neighborhood pixels, and 4 of them is assigned to last frame neighborhood pixels&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/JJiWF.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JJiWF.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18870" LastEditorUserId="18870" LastEditDate="2018-01-29T18:13:34.147" LastActivityDate="2018-01-29T18:13:34.147" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15084" PostTypeId="1" CreationDate="2018-01-29T20:10:42.730" Score="1" ViewCount="492" Body="&lt;p&gt;In generally I know that no difference between 2WD and 4WD mobile base control kinematics equations.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;but is there really difference between &lt;strong&gt;two wheels differential mobile base&lt;/strong&gt; and &lt;strong&gt;tracked/continuous tracks&lt;/strong&gt; differential robot (Tank Treads) inverse kinematics equations?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I using this &lt;strong&gt;inverse kinematics of differential&lt;/strong&gt; equation:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/xFEPWl.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xFEPWl.jpg&quot; alt=&quot;differential inverse kinematics&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which &lt;strong&gt;'r'&lt;/strong&gt; is wheel radius, &lt;strong&gt;'d'&lt;/strong&gt; is robot width, &lt;strong&gt;'v'&lt;/strong&gt; is linear velocity, &lt;strong&gt;'w'&lt;/strong&gt; is angular velocity, and &lt;strong&gt;thetaR&lt;/strong&gt; and &lt;strong&gt;thetaL&lt;/strong&gt; are left/right wheel &lt;strong&gt;RPM&lt;/strong&gt; that you want them.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;For autonomous drive, I use &lt;strong&gt;DWA Planner&lt;/strong&gt; that send &lt;strong&gt;v, w&lt;/strong&gt; to my&#xA;driver which inverse kinematics is here, and my driver calculate&#xA;&lt;strong&gt;thetaR/thetaL&lt;/strong&gt; of each posted &lt;strong&gt;v,w&lt;/strong&gt;.&lt;/li&gt;&#xA;&lt;li&gt;For manualy driving, I use many of teleop node, that all of them sends &lt;strong&gt;v, w&lt;/strong&gt; too.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/wMU4nm.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wMU4nm.jpg&quot; alt=&quot;2WD robot (pioneer)&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/c899N.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/c899N.png&quot; alt=&quot;tracked robot (rescue)&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18870" LastEditorUserId="18870" LastEditDate="2018-01-30T06:05:41.253" LastActivityDate="2018-01-30T08:28:06.263" Title="What is difference between 2 wheels and 4 wheels and tracked differential mobile base kinematics?" Tags="&lt;kinematics&gt;&lt;inverse-kinematics&gt;&lt;differential-drive&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15085" PostTypeId="2" ParentId="15084" CreationDate="2018-01-29T22:33:53.340" Score="2" Body="&lt;p&gt;The short answer is that the equations/models for these different vehicle should be different but there is no value in using more accurate equations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All these equations are approximations that make assumptions about how the ground and wheels/tracks interact.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If there is 2 wheels and no slipping of the wheels on the ground, then the equation is reasonably close the reality. Otherwise the equation is equally bad for all cases. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, if there is another feedback loop, a human driver or visual servoing or slam, then the equation is good enough. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are using this equation in an open loop manner, and your wheel-ground contact is very well behaved，then you can write more accurate equations. However you are unlikely to encounter such well behaved conditions outside of a lab.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A tracked vehicle spends all its time slipping, except for when it is driving straight. For the equation to be an approximation during slipping, we are assuming the center of mass is in the middle of the vehicle and that the friction is uniform at all points under the track. If your conditions are different, then the actual motion will diverge from the prediction faster.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For some situations a small enough window or step size should work fine for those algorithms. I would not call them advanced; if they aren't working look for another approach, both in the model and in the navigation algorithms.&lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="184" LastEditDate="2018-01-30T08:28:06.263" LastActivityDate="2018-01-30T08:28:06.263" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15088" PostTypeId="2" ParentId="14493" CreationDate="2018-01-30T16:00:48.767" Score="4" Body="&lt;p&gt;The company is called Flashhold, here is the link to the website:&#xA;&lt;a href=&quot;http://www.flashhold.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.flashhold.com/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They raised more than 29M$ in aseries B funding recently and seem to gain a lot of traction&#xA;&lt;a href=&quot;https://www.chinamoneynetwork.com/2017/03/30/cainiao-softbank-lead-29m-round-in-chinese-logistic-robot-firm-flashhold&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.chinamoneynetwork.com/2017/03/30/cainiao-softbank-lead-29m-round-in-chinese-logistic-robot-firm-flashhold&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this helps, do not hesitate to exchange back if you have more info.&lt;/p&gt;&#xA;" OwnerUserId="19461" LastActivityDate="2018-01-30T16:00:48.767" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="15090" PostTypeId="1" CreationDate="2018-01-30T20:57:42.970" Score="0" ViewCount="44" Body="&lt;p&gt;over the past weeks I was trying to figure out how use the information from hall sensor to control a DC motor. Basically this is the motor which I'm using: &lt;a href=&quot;https://www.servocity.com/32-rpm-hd-premium-planetary-gear-motor-w-encoder&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.servocity.com/32-rpm-hd-premium-planetary-gear-motor-w-encoder&lt;/a&gt; I chose this motor because torque is enough for my application. Basically I would like to use the signal from hall sensor to fix several position (10 position) and make something similar to &quot;stepper motor&quot;. Briefly, my goal is create a system in which I could start the system, then the system go to a &quot;home position&quot;, and wait for &quot;go to position 1&quot; or &quot;go to position 10&quot;,  I would like to fix absolute position using the hall sensor that came with the motor (The rotational speed would be slow). Theoretically this seems to be easy but right now I'm stuck in how fix the absolute position. And probably my real question is: Using this motor and a limit switch with roller lever, is it possible to make this kind of application? Thanks a lot for read this post. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS. In case you wonder why I omit other technical details like the board, driver for the motor, connections, is because I more interesting in the odds to make this application using this motor, or it would be better make an optical encoder with shaft disk that sense 10 position. To be honest I'm looking for the most parsimonious solution.  &lt;/p&gt;&#xA;" OwnerUserId="19446" LastActivityDate="2018-01-30T21:43:25.570" Title="Probably basic question about how control a DC motor" Tags="&lt;arduino&gt;&lt;motor&gt;&lt;motion&gt;&lt;hall-sensor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15091" PostTypeId="1" CreationDate="2018-01-30T21:22:28.260" Score="0" ViewCount="128" Body="&lt;p&gt;I have the following problem: given two Input Vectors $x = \begin{pmatrix}x\\y\\z\\v_x\\v_y\\v_z\\q_1\\q_2\\q_3\\q_4\end{pmatrix}$, $u = \begin{pmatrix}a_x\\a_y\\a_z\\w_x\\w_y\\w_z\end{pmatrix}$ time $t$ and gravity $g$ calculate  $\dot{x}$. These vectors contain values recorded from an IMU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;for $\dot{x}$ I simply considered the motions of equation:&#xA;$\dot{x} = f(x,u) = \begin{pmatrix}a_x*t+v_x\\a_y*t+v_y\\a_z*t+v_z\\a_x\\a_y+g\\a_z\\\dot{q_1}\\\dot{q_2}\\\dot{q_3}\\\dot{q_4}\end{pmatrix}$. &#xA;Any $\dot{q_i}$ is calculated using a given Formula which is okay so far &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is my IMU-Model for $x$ and $\dot{x}$ correct?&#xA;I need to calculate the Jacobian $A=\frac{\partial \dot{x}}{\partial x} $. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I dont really get to calculate $A$. it has to be $A \in \mathbb{R}^{10x10}$.&#xA;But i always fail at calculating it, especially with respect to the quaternions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My First 6 Lines look like that:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\left[ {\begin{array}{cc}&#xA;   0 &amp;amp; 0 &amp;amp; 0 &amp;amp; a_x &amp;amp; 0 &amp;amp; 0 &amp;amp; ? &amp;amp; ? &amp;amp; ? &amp;amp; ?\\&#xA;   0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; a_y &amp;amp; 0 &amp;amp; ? &amp;amp; ? &amp;amp; ? &amp;amp; ?\\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; a_z &amp;amp; ? &amp;amp; ? &amp;amp; ? &amp;amp; ?\\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; ? &amp;amp; ? &amp;amp; ? &amp;amp; ?\\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; ? &amp;amp; ? &amp;amp; ? &amp;amp; ?\\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; ? &amp;amp; ? &amp;amp; ? &amp;amp; ?\\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; ? &amp;amp; ? &amp;amp; ? &amp;amp; ?\\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; ? &amp;amp; ? &amp;amp; ? &amp;amp; ?\\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; ? &amp;amp; ? &amp;amp; ? &amp;amp; ?\\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; ? &amp;amp; ? &amp;amp; ? &amp;amp; ?\\  &#xA;\end{array} } \right] $&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks for the help!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;:EDIT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As i just found out, any derivative $\frac{\partial \dot{q}}{\partial q}=0$. So i guess its:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$A=\left[ {\begin{array}{cc}&#xA;   0 &amp;amp; 0 &amp;amp; 0 &amp;amp; a_x &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0\\&#xA;   0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; a_y &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0\\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; a_z &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0\\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0\\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0\\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0\\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0\\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0\\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0\\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0\\&#xA;\end{array} } \right]$ ?&lt;/p&gt;&#xA;" OwnerUserId="19355" LastEditorUserId="9720" LastEditDate="2018-01-31T19:38:33.930" LastActivityDate="2018-01-31T19:41:30.007" Title="Jacobian of kinematic IMU Model" Tags="&lt;kinematics&gt;&lt;kalman-filter&gt;&lt;dynamics&gt;&lt;motion&gt;&lt;jacobian&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15092" PostTypeId="2" ParentId="15090" CreationDate="2018-01-30T21:43:25.570" Score="1" Body="&lt;p&gt;Since the encoder with that motor is an incremental encoder, you would have to keep track of the motor position constantly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you really want to go to a home position, you'll need another sensor, like a limit switch, to tell you when you've gotten to home.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are also physical problems such as acceleration and deceleration which makes stopping immediately difficult, and you will need to take this into account.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to get to ten spots reliably, you will probably need as much resolution in your encoder as possible.&lt;/p&gt;&#xA;" OwnerUserId="19275" LastActivityDate="2018-01-30T21:43:25.570" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15093" PostTypeId="2" ParentId="14552" CreationDate="2018-01-31T03:05:05.833" Score="1" Body="&lt;p&gt;recently I find a project called &quot;rosgo&quot; which is doing similar thing. But seems that it is not active recently. here's thel link: &lt;a href=&quot;http://wiki.ros.org/rosgo&quot; rel=&quot;nofollow noreferrer&quot;&gt;wiki.ros.org/rosgo&lt;/a&gt;&lt;br&gt;&#xA;Hope this project can go further because golang is designed well like c and alleviate the develop time problem of c/c++ &amp;amp;&amp;amp; run speed problem of python.&lt;/p&gt;&#xA;" OwnerUserId="16966" LastActivityDate="2018-01-31T03:05:05.833" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15096" PostTypeId="1" CreationDate="2018-01-31T19:36:24.650" Score="1" ViewCount="20" Body="&lt;p&gt;I am seeking to collect data for my IB Physics IA (internal assessment). My question seeks to establish the relationship between speed and torque by adjusting gear ratios. (I am aware that gear ratios add mass and thus increase the stall torque and makes data less imprecise). I am using a Vex gear shaft, Vex motor, along with Vex gears and sprockets.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am aware of the basics of torque: (Power = torque * angular velocity) and (Torque = Force * radius). Also, I am aware that: (Centripetal Force = Velocity squared * mass / radius).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can easily calculate the tangential or angular velocity of the moving shaft, but need to measure the torque.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have already researched possible methods for measuring that could do this:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Torque sensor or gauge - Very expensive but is the most precise of the devices I have already researched. Will not buy, above $100.&lt;/li&gt;&#xA;&lt;li&gt;Stress gauge - Two problems: (1) it seems to be a device that will only work on shafts with large diameters - a Vex shaft is square with side length 3-4 mm. Would it even work?; (2) stress is very loosely relative to torque. It is cheap, however, is desirable if accurate.&lt;/li&gt;&#xA;&lt;li&gt;Torque wrench - In theory, you would use it until the shaft no longer moves and you can find the torque that way. It is harmful to the motor (and thus it would no longer be a consistent control). I am unable to find a small torque wrench - can anyone find one that is precise enough. This would, in theory, be cheap. Could I make my own and how? - if this is a good idea.&lt;/li&gt;&#xA;&lt;li&gt;Similiar to 3 - Resistance encoder. Not sure if these exist but might work well. Any thoughts?&lt;/li&gt;&#xA;&lt;li&gt;Add mass to the end of the shaft until it stops - With the centripetal force equation (or it slightly modified) I can calculate the necessary tangential force required to rotate the shaft (thus the torque by multiplying by radius). (Note: I am not certain that using the centripetal force equation would be correct - is there a better equation?). Cheap, but perhaps less accurate.&lt;/li&gt;&#xA;&lt;li&gt;Other ideas?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;What would be the best method for measuring the torque of the shaft? As I am collecting data to analyze, accuracy is the highest preferred trait, although I do not want to spend a lot of money.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If necessary, I can use an Arduino to collect data from electronic devices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help would be very appreciated. Thank you. Feel free to ask more specific questions.&lt;/p&gt;&#xA;" OwnerUserId="19473" LastEditorUserId="19473" LastEditDate="2018-01-31T19:43:18.933" LastActivityDate="2018-01-31T19:43:18.933" Title="Measuring torque of Vex gear shaft - highest accuracy for lowest price" Tags="&lt;sensors&gt;&lt;torque&gt;&lt;vex&gt;&lt;force-sensor&gt;" AnswerCount="0" CommentCount="6" ClosedDate="2018-01-31T19:54:19.673" ContentLicense="CC BY-SA 3.0" />
  <row Id="15097" PostTypeId="2" ParentId="15091" CreationDate="2018-01-31T19:41:30.007" Score="1" Body="&lt;p&gt;A &lt;a href=&quot;https://en.wikipedia.org/wiki/Robot_kinematics#Robot_Jacobian&quot; rel=&quot;nofollow noreferrer&quot;&gt;robot Jacobian&lt;/a&gt; is &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The time derivative of the kinematics equations  [...] which relates the joint rates to the linear and angular velocity of the end-effector.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I'll emphasize that it &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;relates the &lt;strong&gt;joint rates&lt;/strong&gt; to the linear and angular velocity of the &lt;strong&gt;end-effector&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You give &lt;em&gt;no information&lt;/em&gt; about a physical configuration, joints, or where the IMU is located. You give &lt;em&gt;no information&lt;/em&gt; about what you're trying to do with the Jacobian. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You ask if your IMU model is correct, but then say, &lt;em&gt;&quot;any $\dot{q}_i$ is calculated using a given Formula which is okay so far.&quot;&lt;/em&gt; What is the formula? If it's working, then &lt;em&gt;what is the question?&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the linear speed terms, you're failing to take into account the linear speed caused by rotation - &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;v = \omega \times r \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's also not clear what your terms are. You have $a_N$ - are these accelerometer readings? I ask because you have $\dot{v}_y = a_y + g$. This &lt;em&gt;only works&lt;/em&gt; if $g$ is exactly colinear with the y-axis. Is this the case? &lt;strong&gt;No&lt;/strong&gt;, unless your IMU is always perfectly level. Otherwise, you're going to need to apply a rotation matrix somewhere - either to rotate gravity to the local frame, or to rotate the local measurements (IMU measurements) to the global frame.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-01-31T19:41:30.007" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15100" PostTypeId="1" CreationDate="2018-02-01T11:32:42.387" Score="1" ViewCount="331" Body="&lt;p&gt;Help me please resolve some questions in the article &lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) &quot;&lt;a href=&quot;https://www.researchgate.net/publication/3885163_A_Robust_Method_for_Computing_Vehicle_Ego-motion&quot; rel=&quot;nofollow noreferrer&quot;&gt;A Robust Method for Computing Vehicle Ego-motion&lt;/a&gt;&quot;,  Gideon P. Stein et al. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to this paper we can find three components of motion (one translation and two rotational components) using model from the article:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) &quot;&lt;a href=&quot;http://wexler.free.fr/library/files/longuet-higgins%20(1980)%20the%20interpretation%20of%20a%20moving%20retinal%20image.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;The interpretation of a moving retinal image&lt;/a&gt;&quot; Longuet-Higgins (1980). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for me, the equation (1) from the first paper doesn't correspond to the equation from the second. There are velocities in the second paper that seems to be more correct than in the first where measurement units are not matched with left and right sides. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second question is how can we find the motion parameters (translation and two rotations)? In the 1) paper they suggest to minimize cost function using gradient descent. But how can we do this? The function doesn't depend directly on motion variables $t_z, w_x, w_y $. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And the last question: if we got two subsequent frames $ I_1 $ at time $t_1$ and $I_2$ at time $t_2$, in what point of time $t$ we must consider estimated motion parameters? I guess at $(t_1 + t_2) / 2 $, but I'm not sure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Help me please with these questions.&lt;/p&gt;&#xA;" OwnerUserId="14935" LastEditorUserId="17029" LastEditDate="2018-02-01T13:08:30.340" LastActivityDate="2021-04-20T05:57:59.223" Title="Camera ego-motion estimation via dense optical flow" Tags="&lt;slam&gt;&lt;visual-odometry&gt;&lt;structure-from-motion&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15102" PostTypeId="2" ParentId="8480" CreationDate="2018-02-01T14:40:21.333" Score="0" Body="&lt;p&gt;Controllers are always reacting to something, so you're correct in thinking that &quot;being reactive&quot; is not the difference between the two.  The key is what the controllers are reacting to.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In feedback control, the controller acts to minimize an error signal.  A system including feedback control would have:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A sensor to measure system output&lt;/li&gt;&#xA;&lt;li&gt;A reference signal, to which the system output is compared&lt;/li&gt;&#xA;&lt;li&gt;A controller which operates on (i.e. &quot;reacts to&quot;) the difference between the reference and the measurement&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This type of control scheme is also referred to as &quot;closed-loop control.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In feed forward control, the controller acts without any direct knowledge of the system's response.  It may be reacting to a reference signal or output from a sensor (as long as the sensor is not measuring system output - this would create a feedback loop) or both.  This is also called &quot;open-loop control.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is more than a semantic difference.  Only a closed-loop controller has the ability to compensate for unknown parameters, modelling errors, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your question, you refer to a situation where feed forward is used as a means to achieve disturbance rejection.  The idea would be that you measure the disturbance input, model the response of the system due to the this input, calculate the required control input to counteract this response, and then apply that control input.  Since your control signal (controller output) is independent of system response, this is open-loop control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is not uncommon for controllers to be designed with both feedback and feed forward components.  In this case, I usually think of the feedback component as the primary path, and the feed forward component as supplementary, to improve performance in some way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, in motion control, a motor can be made to follow a velocity reference by using a PID controller that operates on the velocity error.  Because the PID controller operates only on the error, without any knowledge of the reference signal, there must be some error before the controller responds, so there will be some amount of delay.  You can increase the gains to minimize the delay, but because real systems are flexible, there will be some point at which the system will become unstable as the gains are increased.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can add a feed forward path, however, which operates on the derivative of the velocity reference (so, the acceleration).  If the system's inertia is constant, the feed forward controller can be a simple proportional gain times the acceleration signal, which would correspond to some additional torque.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now the motor will generate torque in response to changes in the velocity reference without waiting for the system to develop velocity error.  Because the feedback controller exists as well, any effects of friction, modelling error (i.e. if the selected feed forward gain is not exactly correct for the system's inertia), etc., the controller can still compensate and drive the error to zero.&lt;/p&gt;&#xA;" OwnerUserId="16321" LastActivityDate="2018-02-01T14:40:21.333" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15103" PostTypeId="1" CreationDate="2018-02-01T16:09:58.257" Score="1" ViewCount="84" Body="&lt;p&gt;I've got an idea for a simple robot (with an Arduino or something similar) that will play noughts-and-crosses (aka tic-tac-toe) on a chalkboard, so that kids can play against it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It will use a couple of servos to move an articulated arm holding a piece of chalk which will draw the O's and X's.  Then the opponent will draw an O or X and press a button to tell the robot to make the next move.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The tricky bit is: how will the robot know where the opponent made their mark?  I could use a camera and some sort of motion detection software, but that sounds complex.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was wondering if there's a way to detect the touch of the chalk on the board, perhaps using something like a MTCH101 chip -- one per square on the board.  The board will have a wooden wipe-clean surface, but chips could be embedded just under the surface.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone have any suggestions?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit 4 Jan 2018: Perhaps a force sensitive resistor would work -- such as &lt;a href=&quot;http://www.trossenrobotics.com/store/p/6496-1-5-Inch-Force-Sensing-Resistor-FSR.aspx&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.trossenrobotics.com/store/p/6496-1-5-Inch-Force-Sensing-Resistor-FSR.aspx&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11407" LastEditorUserId="11407" LastEditDate="2018-02-04T11:50:10.400" LastActivityDate="2018-02-05T12:52:13.677" Title="How to detect writing on a chalkboard?" Tags="&lt;sensors&gt;&lt;pose&gt;&lt;beginner&gt;&lt;force-sensor&gt;" AnswerCount="3" CommentCount="7" ClosedDate="2018-02-05T15:33:00.660" ContentLicense="CC BY-SA 3.0" />
  <row Id="15106" PostTypeId="2" ParentId="15103" CreationDate="2018-02-02T06:01:21.573" Score="2" Body="&lt;p&gt;Since you are going to have a mechanism that can draw within a square why not put a light sensor on it and use the same mechanism scan for the opponent's move?&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;At the start of the game, scan all the squares and record the brightness value for each square.  If the board is clear, all the values should be low.  &lt;/li&gt;&#xA;&lt;li&gt;After your opponent is done and before each move, scan the &quot;open&quot; squares to confirm that a move has been made and where it was made (that cell should be brighter then the original scan).  &lt;/li&gt;&#xA;&lt;li&gt;Record the square where the opponent made a move as no longer &quot;open&quot; then make your move and record that square as no longer &quot;open&quot;.&lt;/li&gt;&#xA;&lt;li&gt;Back to 2. until someone looses.&lt;/li&gt;&#xA;&lt;li&gt;Do something fun with the mechanism to show who won.  This can add &quot;personality&quot; to the game.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;This &lt;a href=&quot;https://www.adafruit.com/product/1334&quot; rel=&quot;nofollow noreferrer&quot;&gt;Color Sensor&lt;/a&gt; from adafruit works well and uses I2C so it is very easy to use with Arduino.  It has a white LED light you can turn on to improve reflective readings.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/aVq1p.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/aVq1p.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Adafruit also has a lot of &lt;a href=&quot;https://www.adafruit.com/category/61&quot; rel=&quot;nofollow noreferrer&quot;&gt;other options&lt;/a&gt; if this one doesn't work for you.  There are also sensors like the &lt;a href=&quot;https://www.aliexpress.com/item/TCS230-TCS3200-Color-Recognition-Sensor-Detector-Module-for-Arduino&quot; rel=&quot;nofollow noreferrer&quot;&gt;TCS3200&lt;/a&gt; that have more lights; but, some don't support I2C and may be be more difficult to use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: Determining whether your opponent drew an 'X' or an 'O' is really not necessary.  Just say 'X' always goes first.  If you are first assume he drew an 'O' and if he is first, assume he drew an 'X'.&lt;/p&gt;&#xA;" OwnerUserId="462" LastEditorUserId="462" LastEditDate="2018-02-02T21:24:25.543" LastActivityDate="2018-02-02T21:24:25.543" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="15107" PostTypeId="1" AcceptedAnswerId="15108" CreationDate="2018-02-02T08:07:27.447" Score="0" ViewCount="10509" Body="&lt;p&gt;I am unable to solve this problem. I tried to run catkin_make command in catkin_ws directory&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;yograj@yograj-Inspiron-5537:~/catkin_ws$ catkin_make&#xA;Base path: /home/yograj/catkin_ws&#xA;Source space: /home/yograj/catkin_ws/src&#xA;Build space: /home/yograj/catkin_ws/build&#xA;Devel space: /home/yograj/catkin_ws/devel&#xA;Install space: /home/yograj/catkin_ws/install&#xA;####&#xA;#### Running command: &quot;cmake /home/yograj/catkin_ws/src -DCATKIN_DEVEL_PREFIX=/home/yograj/catkin_ws/devel -DCMAKE_INSTALL_PREFIX=/home/yograj/catkin_ws/install -G Unix Makefiles&quot; in &quot;/home/yograj/catkin_ws/build&quot;&#xA;####&#xA;-- Using CATKIN_DEVEL_PREFIX: /home/yograj/catkin_ws/devel&#xA;-- Using CMAKE_PREFIX_PATH: /opt/ros/kinetic&#xA;-- This workspace overlays: /opt/ros/kinetic&#xA;-- Using PYTHON_EXECUTABLE: /home/yograj/anaconda2/bin/python&#xA;-- Using Debian Python package layout&#xA;-- Using empy: /usr/bin/empy&#xA;-- Using CATKIN_ENABLE_TESTING: ON&#xA;-- Call enable_testing()&#xA;-- Using CATKIN_TEST_RESULTS_DIR: /home/yograj/catkin_ws/build/test_results&#xA;-- Found gtest sources under '/usr/src/gtest': gtests will be built&#xA;-- Using Python nosetests: /usr/bin/nosetests-2.7&#xA;ImportError: &quot;from catkin_pkg.package import parse_package&quot; failed: No module named catkin_pkg.package&#xA;Make sure that you have installed &quot;catkin_pkg&quot;, it is up to date and on the PYTHONPATH.&#xA;CMake Error at /opt/ros/kinetic/share/catkin/cmake/safe_execute_process.cmake:11 (message):&#xA;  execute_process(/home/yograj/anaconda2/bin/python&#xA;  &quot;/opt/ros/kinetic/share/catkin/cmake/parse_package_xml.py&quot;&#xA;  &quot;/opt/ros/kinetic/share/catkin/cmake/../package.xml&quot;&#xA;  &quot;/home/yograj/catkin_ws/build/catkin/catkin_generated/version/package.cmake&quot;)&#xA;  returned error code 1&#xA;Call Stack (most recent call first):&#xA;  /opt/ros/kinetic/share/catkin/cmake/catkin_package_xml.cmake:74 (safe_execute_process)&#xA;  /opt/ros/kinetic/share/catkin/cmake/all.cmake:151 (_catkin_package_xml)&#xA;  /opt/ros/kinetic/share/catkin/cmake/catkinConfig.cmake:20 (include)&#xA;  CMakeLists.txt:52 (find_package)&#xA;&#xA;&#xA;-- Configuring incomplete, errors occurred!&#xA;See also &quot;/home/yograj/catkin_ws/build/CMakeFiles/CMakeOutput.log&quot;.&#xA;See also &quot;/home/yograj/catkin_ws/build/CMakeFiles/CMakeError.log&quot;.&#xA;Invoking &quot;cmake&quot; failed&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="11238" LastActivityDate="2021-05-28T12:32:32.230" Title="Invoking &quot;cmake&quot; failed" Tags="&lt;ros&gt;" AnswerCount="5" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15108" PostTypeId="2" ParentId="15107" CreationDate="2018-02-02T08:36:01.680" Score="2" Body="&lt;p&gt;I solved this problem using the following command:-&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;pip install -U rosdep rosinstall_generator wstool rosinstall six vcstools&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="11238" LastActivityDate="2018-02-02T08:36:01.680" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15109" PostTypeId="2" ParentId="14266" CreationDate="2018-02-02T11:04:16.063" Score="1" Body="&lt;p&gt;There are many tutorials and forums to help in learning ROS. It can work on a Raspberry Pi, so you don't need an expensive computer to run Linux.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ROS includes (or is associated with) Gazebo, a robot simulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With ROS you get a lot of things involving movement that are easy to use. You also get drivers for many common sensors. You get SLAM and a few kinds of path planning.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you don't get, as far as I know, is an overall goal planner. In other words, the AI part of the robot's brain. Which is good because you'll need to do that part as your degree. :)&lt;/p&gt;&#xA;" OwnerUserId="19275" LastActivityDate="2018-02-02T11:04:16.063" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15113" PostTypeId="2" ParentId="15103" CreationDate="2018-02-02T22:46:28.013" Score="0" Body="&lt;p&gt;You can set a fixed camera points towards the chalkboard to check the content in every cell. This can be done by simply crop the image taken by the camera.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, by setting a color (brightness) threshold, you should be able to isolate the hand-written content from the background. In this way you can differentiate cells with marks from the vacant ones. Note that this threshold can be dynamic: you can get the color (brightness) of the background by check the part of chalkboard that is not being used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A Handwritten Digit Recognition system (e.g. &lt;a href=&quot;http://www.denseinl2.com/webcnn/digitdemo.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;) should be able to recognize the content of the processed image (which only contains pure white and black) of each cell. A &quot;O&quot; will be recognized as number 0. &quot;X&quot; will be recognized as other values.&lt;/p&gt;&#xA;" OwnerUserId="19500" LastActivityDate="2018-02-02T22:46:28.013" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="15114" PostTypeId="2" ParentId="14266" CreationDate="2018-02-02T22:56:52.330" Score="0" Body="&lt;p&gt;I'd recommend &lt;a href=&quot;http://www.coppeliarobotics.com/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;V-REP&lt;/a&gt; for multiple reasons:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;It is a robotics simulator with GUI.&lt;/li&gt;&#xA;&lt;li&gt;It has many pre-installed robot models. &lt;/li&gt;&#xA;&lt;li&gt;It works with ROS.&lt;/li&gt;&#xA;&lt;li&gt;It has detailed tutorials and an official forum.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Check the demonstration video &lt;a href=&quot;https://www.youtube.com/watch?v=gBYqOBdIcaY&amp;amp;t=271s&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="19500" LastActivityDate="2018-02-02T22:56:52.330" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15115" PostTypeId="2" ParentId="10914" CreationDate="2018-02-03T02:03:43.900" Score="-1" Body="&lt;p&gt;I cannot answer (and I don't think anyone would be able to) the question of &quot;is this the correct method&quot;. It is subjective and, in the end, you can only try and see :).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I can tell that this would not be the way I would go with this problem. Why ?&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;In my experience, point cloud processing, especially when trying to find shapes, is slow and hard. Since you're only searching for box and you have a 2D image, I would start there. Unless you know the background and can quickly remove it, I would not do step one.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I'm not sure why finding the top view will be of any help. If anything, it will be problematic if the boxes are stacked one above the other.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h1&gt;Another idea&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Consider using &lt;em&gt;deep learning&lt;/em&gt; (or just &lt;em&gt;learning&lt;/em&gt;) on your 2D image to find the boxes and extract their pose from the point cloud once they have been found. If you need tracking after use some tracking algorithm on the 2D image.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Learning to recognize a box should be feasible given that you have a good training dataset. Then, once you have localized them in the 2D image, finding the pose is a matter of extracting it from the point cloud. Since you are using an Xtion, the point cloud and the 2D image should have a simple fixed transformation between them such that it should not be too hard to do that (hint: find the faces of the box).&lt;/p&gt;&#xA;" OwnerUserId="1615" LastActivityDate="2018-02-03T02:03:43.900" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15116" PostTypeId="1" AcceptedAnswerId="15120" CreationDate="2018-02-03T20:39:54.560" Score="2" ViewCount="442" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2WKB2.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2WKB2.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From figure above, suppose a three-dimensional vector $p(0)$ is rotated by an angle $\theta$ about the fixed rotation axis $\omega$ to $p(\theta)$. Here we assume all quantities are expressed fixed frame coordinates and $\Vert \omega \Vert = 1$. This rotation can be achieved by imagining that $p(0)$ is subject to a rotation about $\omega$ at a constant rate of $1$ rad/sec, from time $t = 0$ to $t = \theta$. Let $p(t)$ denote this path. The velocity of $p(t)$, denoted $\dot{p}$, is then given by&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{equation}&#xA;\dot{p} = \omega \times p&#xA;\end{equation}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please explain in detail as to how to derive the above equation. Thank you.&lt;/p&gt;&#xA;" OwnerUserId="19512" LastEditorUserId="10414" LastEditDate="2021-01-25T16:47:46.850" LastActivityDate="2021-01-25T16:47:46.850" Title="Explanation for exponential coordinate of rotation" Tags="&lt;motion&gt;&lt;rotation&gt;&lt;screw-theory&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="15117" PostTypeId="1" AcceptedAnswerId="15121" CreationDate="2018-02-03T20:43:32.260" Score="1" ViewCount="37" Body="&lt;p&gt;I am planning a project which compares the different techniques of 3D mapping of a setup. I understand that there are many algorithms to accomplish the same, but due to a non-existent hardware budget, I have to compare 3D techniques/algorithms that can be accomplished with the algorithm and datasets only. I have done a fair share of research that is still ongoing, but I was looking for assistance by people who may already have knowledge of this and can help me narrow down what I'm searching.&lt;br&gt;&#xA;In summary, I am looking for 3D mapping techniques/algorithms that can be accomplished using only software and datasets in order to compare them on various performance and application parameters. Since I have to compare performance, all techniques should be applied on the same dataset.&lt;br&gt;&#xA;I would appreciate any information, research papers, links, otherwise that could direct me.&lt;/p&gt;&#xA;" OwnerUserId="19511" LastActivityDate="2018-02-04T02:49:58.893" Title="3D mapping using only datasets and no hardware" Tags="&lt;3d-reconstruction&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15119" PostTypeId="2" ParentId="12313" CreationDate="2018-02-04T01:29:50.623" Score="0" Body="&lt;p&gt;As far I understand, you have a topic &lt;code&gt;/topic&lt;/code&gt; and an associated transformation on the tf topic. You then want to move the pose according to the tf transformation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;TF provides you with a tree representing all the transformations and the changes in time. It's really useful for easily tracking the position of each sensor on the robot for example. By knowing the transformation of each sensor to the base of the robot, you only need to change the transformation between the world and the base of the robot to know the position of all sensors in space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to transform &lt;code&gt;/topic&lt;/code&gt; to its actual pose in tf, you'll need first to read the &lt;a href=&quot;http://wiki.ros.org/tf/Tutorials/Writing%20a%20tf%20listener%20%28C%2B%2B%29&quot; rel=&quot;nofollow noreferrer&quot;&gt;transformation from the tf topic&lt;/a&gt; from &lt;code&gt;frame_id&lt;/code&gt; to &lt;code&gt;child_frame_id&lt;/code&gt;. Then apply this transformation to the pose in &lt;code&gt;topic&lt;/code&gt; at the same time. An efficient way to get messages at the same time is to use &lt;a href=&quot;http://wiki.ros.org/message_filters&quot; rel=&quot;nofollow noreferrer&quot;&gt;message filter&lt;/a&gt;. I'm sure you'll find plenty of example to do just that, for example &lt;a href=&quot;http://wiki.ros.org/message_filters#Time_Synchronizer&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="1615" LastActivityDate="2018-02-04T01:29:50.623" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15120" PostTypeId="2" ParentId="15116" CreationDate="2018-02-04T02:41:37.187" Score="2" Body="&lt;p&gt;First note that &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;$p(0)$ travels along an arc of the circle of radius $r = \Vert p \Vert \sin(\phi)$ centered at a point on the axis of $\omega$; and&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;the velocity $\dot{p}$ is perpendicular to the arc of the circle; and&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;(from the definition) $\omega = \dot{\theta} u$, where $u$ is a unit vector perpendicular to the plane of rotation.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Now we try to relate $\dot{p}$ to the known quantities.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We have&#xA;$$&#xA;\begin{align}&#xA;\Vert \dot{p} \Vert &amp;amp;= r\dot{\theta} &amp;amp; \text{(from 2.)}\\&#xA;&amp;amp;= (\Vert p \Vert \sin(\phi))\dot{\theta} &amp;amp; \text{(from 1.)}\\&#xA;&amp;amp;= \Vert p \Vert \Vert \omega \Vert \sin(\phi) &amp;amp; \text{(from 3.)}&#xA;\end{align}&#xA;$$&#xA;From the above, we can therefore conclude that $\dot{p} = \omega \times p$.&lt;/p&gt;&#xA;" OwnerUserId="7610" LastActivityDate="2018-02-04T02:41:37.187" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15121" PostTypeId="2" ParentId="15117" CreationDate="2018-02-04T02:49:58.893" Score="0" Body="&lt;p&gt;You need no hardware for this :) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Check out &lt;a href=&quot;https://www.openslam.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;OpenSLAM&lt;/a&gt; website, you'll find plenty of options for slam algorithms and dataset. A quick Google search gives you things such as the &lt;a href=&quot;http://www.cvlibs.net/datasets/kitti/eval_odometry.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;KITTI Dataset&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I particularly like &lt;a href=&quot;http://www2.informatik.uni-freiburg.de/~stachnis/datasets.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this webpage&lt;/a&gt; to find datasets.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most of those can be used with ROS so I would advise you to implement your comparison method in ROS. Then testing different slam algorithm and/or datasets is mainly a matter of (almost) plug and play.&lt;/p&gt;&#xA;" OwnerUserId="1615" LastActivityDate="2018-02-04T02:49:58.893" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="15123" PostTypeId="2" ParentId="15116" CreationDate="2018-02-04T08:04:34.850" Score="4" Body="&lt;p&gt;The author expects a background that includes a course in physics or mechanics where this equation is taught. When that is the case, this equation gives you instantaneous velocity of a particle (point) moving on a circular path.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The $\times$ in $\dot{p} = \omega \times p$ is the cross product. (This may already be obvious to you, it's hard to tell from the question).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The vector result of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Cross_product&quot; rel=&quot;nofollow noreferrer&quot;&gt;cross product&lt;/a&gt; will always be perpendicular to the plane that the operand vectors lie in. The magnitude of the vector result will be $\Vert \omega \Vert\Vert p \Vert  \sin(\phi)$. How to do the cross product operation is in the wikipedia article.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A break down of the equation that may answer your question is &lt;a href=&quot;https://en.wikipedia.org/wiki/Angular_velocity#Particle_in_three_dimensions&quot; rel=&quot;nofollow noreferrer&quot;&gt;on wikipedia&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a book that does a good job teaching working in exponential coordinates I highly recommend &lt;a href=&quot;https://www.cds.caltech.edu/~murray/books/MLS/pdf/mls94-complete.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;A mathematical introduction to robotic manipulation by Murray, Li, and Sastry&lt;/a&gt;. &lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2018-02-04T08:04:34.850" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15124" PostTypeId="1" CreationDate="2018-02-04T10:25:27.787" Score="-3" ViewCount="203" Body="&lt;p&gt;Can anyone please explain what is a publisher and a subscriber when we talk about ROS?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where is which of them installed and what do they do? Any simple example is appreciated.&lt;/p&gt;&#xA;" OwnerUserId="19514" LastActivityDate="2018-02-05T04:51:35.983" Title="Publisher and subscriber" Tags="&lt;ros&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="15126" PostTypeId="2" ParentId="15100" CreationDate="2018-02-04T14:59:24.777" Score="0" Body="&lt;p&gt;The equation in your first reference comes from taking the time derivative of the pixel location of a feature. I suspect that the equations are different because the second paper is looking at features projected on to a sphere, not an image plain.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It looks like all the terms you are looking for are present in the equation being solved. &lt;/p&gt;&#xA;" OwnerUserId="8842" LastActivityDate="2018-02-04T14:59:24.777" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15127" PostTypeId="1" AcceptedAnswerId="15140" CreationDate="2018-02-04T21:10:20.143" Score="-1" ViewCount="61" Body="&lt;p&gt;According to this video from Khan Academy about &lt;a href=&quot;https://youtu.be/axP8LfkPvF0?t=2m35s&quot; rel=&quot;nofollow noreferrer&quot;&gt;electronics of a DVD drive&lt;/a&gt; the position of the sled (which moves the reading head) is controlled by a &lt;strong&gt;geared DC motor&lt;/strong&gt; by using &lt;strong&gt;only timing&lt;/strong&gt; and &lt;strong&gt;one end-stop switch&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've also took apart some DVD drives and where there was a DC motor (instead of a stepper) I did not find any sensor as a feedback for closed loop control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I could not find any reference for this online. If this is really the case can anybody point me to a page/site with the explanation? Why this is not used in hobby projects?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After the feedbacks I would focus on one specific question: is it possible that a DVD drive can operate with open-loop control and a DC motor?&lt;/p&gt;&#xA;" OwnerUserId="19519" LastEditorUserId="19519" LastEditDate="2018-02-06T17:10:44.903" LastActivityDate="2018-02-06T17:59:43.213" Title="Control geared DC motor based on timing?" Tags="&lt;control&gt;&lt;motor&gt;&lt;sensors&gt;&lt;pid&gt;" AnswerCount="1" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="15128" PostTypeId="2" ParentId="15124" CreationDate="2018-02-05T03:08:56.297" Score="0" Body="&lt;p&gt;Publishers and subscribers are your own ROS nodes - programs that &lt;strong&gt;you&lt;/strong&gt; write which make use of ROS' API.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A publisher basically just puts data into a ROS topic, and a subscriber gets said data from a topic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Take a look at section 2.1:&#xA;&lt;a href=&quot;http://wiki.ros.org/ROS/Tutorials/UnderstandingTopics&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://wiki.ros.org/ROS/Tutorials/UnderstandingTopics&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Someone wrote 2 programs (or nodes). One of them is called &quot;teleop_turtle&quot; which reads your keyboard input and uses the ROS API to publish that information on a topic called &quot;/turtle1/command_velocity&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other is called &quot;turtlesim&quot; and it &quot;subscribes&quot; to that topic, meaning that a specific function in the node's code will be executed when new data is published to that topic.&lt;/p&gt;&#xA;" OwnerUserId="17761" LastActivityDate="2018-02-05T03:08:56.297" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15129" PostTypeId="2" ParentId="15124" CreationDate="2018-02-05T04:51:35.983" Score="0" Body="&lt;p&gt;Think about writing code that provides information which needs to be consumed by a number of other functions.  That information could be written to a memory structure, and sent to each routine that needs the information.  With this design, every time a new method is written that needs this information, both the source and the consumer of the data need to be rewritten to link the data from the source to the consumer.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;With a publisher-subscriber model, the integration becomes easier.   The source of the information just needs to write the results to a message.   It does not need to know who all will be consuming the data.  The subscriber(s) sign up to receive these particular messages.  When new data becomes available, the publisher sends a new message.   The subscribers all receive this data because they have signed up to receive these messages.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This design is particularly useful for state information such as health checks.  Any routine that causes motion can subscribe to a “health” message, and each of these routines can “check health” before moving a joint.   Without the publisher-subscriber model, both the motion routine and the health monitoring routine would need to be updated before this health check would work.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2018-02-05T04:51:35.983" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15130" PostTypeId="1" AcceptedAnswerId="15150" CreationDate="2018-02-05T06:36:01.570" Score="0" ViewCount="415" Body="&lt;p&gt;I followed the instruction as mentioned &lt;a href=&quot;https://dev.px4.io/en/simulation/multi-vehicle-simulation.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. Everything worked fine but at last stage when I try to run:-&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;roslaunch px4 multi_uav_mavros_sitl.launch&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I get following:-&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;... logging to /home/yograj/.ros/log/40d4394e-0a3d-11e8-a1f1-3c77e68de09b/roslaunch-yograj-Inspiron-5537-12334.log&#xA;Checking log directory for disk usage. This may take awhile.&#xA;Press Ctrl-C to interrupt&#xA;Done checking log file disk usage. Usage is &amp;lt;1GB.&#xA;&#xA;Usage: xacro.py [options] &amp;lt;input&amp;gt;&#xA;&#xA;xacro.py: error: expected exactly one input file as argument&#xA;while processing /home/yograj/src/Firmware/launch/single_vehcile_spawn.launch:&#xA;Invalid &amp;lt;param&amp;gt; tag: Cannot load command parameter [iris_1_sdf]: command [/opt/ros/kinetic/share/xacro/xacro.py /home/yograj/src/Firmware/Tools/sitl_gazebo/models/rotors_description/urdf/iris_base.xacro rotors_description_dir:=/home/yograj/src/Firmware/Tools/sitl_gazebo/models/rotors_description mavlink_udp_port:=14560 &amp;gt; iris_1.urdf ; 'gz sdf -p iris_1.urdf'] returned with code [2]. &#xA;&#xA;Param xml is &amp;lt;param command=&quot;$(arg cmd)&quot; name=&quot;$(arg vehicle)_$(arg ID)_sdf&quot;/&amp;gt;&#xA;The traceback for the exception was written to the log file&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Launch file&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;launch&amp;gt;&#xA;&#xA;    &amp;lt;!-- Posix SITL environment launch script --&amp;gt;&#xA;    &amp;lt;arg name=&quot;x&quot; default=&quot;0&quot;/&amp;gt;&#xA;    &amp;lt;arg name=&quot;y&quot; default=&quot;0&quot;/&amp;gt;&#xA;    &amp;lt;arg name=&quot;z&quot; default=&quot;0&quot;/&amp;gt;&#xA;    &amp;lt;arg name=&quot;R&quot; default=&quot;0&quot;/&amp;gt;&#xA;    &amp;lt;arg name=&quot;P&quot; default=&quot;0&quot;/&amp;gt;&#xA;    &amp;lt;arg name=&quot;Y&quot; default=&quot;0&quot;/&amp;gt;&#xA;    &amp;lt;arg name=&quot;est&quot; default=&quot;ekf2&quot;/&amp;gt;&#xA;    &amp;lt;arg name=&quot;vehicle&quot; default=&quot;iris&quot;/&amp;gt;&#xA;    &amp;lt;arg name=&quot;ID&quot; default=&quot;1&quot;/&amp;gt;&#xA;    &amp;lt;arg name=&quot;rcS&quot; default=&quot;$(find px4)/posix-configs/SITL/init/$(arg est)/$(arg vehicle)_$(arg ID)&quot;/&amp;gt;&#xA;    &amp;lt;arg name=&quot;mavlink_udp_port&quot; default=&quot;14560&quot; /&amp;gt;&#xA;&#xA;&#xA;    &amp;lt;arg name=&quot;cmd&quot; default=&quot;$(find xacro)/xacro.py $(find px4)/Tools/sitl_gazebo/models/rotors_description/urdf/$(arg vehicle)_base.xacro rotors_description_dir:=$(find px4)/Tools/sitl_gazebo/models/rotors_description mavlink_udp_port:=$(arg mavlink_udp_port) &amp;gt; $(arg vehicle)_$(arg ID).urdf ; 'gz sdf -p $(arg vehicle)_$(arg ID).urdf'&quot; /&amp;gt;&#xA;&#xA;&#xA;    &amp;lt;param command=&quot;$(arg cmd)&quot; name=&quot;$(arg vehicle)_$(arg ID)_sdf&quot; /&amp;gt;&#xA;&#xA;    &amp;lt;node name=&quot;sitl_$(arg ID)&quot; pkg=&quot;px4&quot; type=&quot;px4&quot; output=&quot;screen&quot;&#xA;        args=&quot;$(find px4) $(arg rcS)&quot;&amp;gt;&#xA;    &amp;lt;/node&amp;gt;&#xA;&#xA;    &amp;lt;node name=&quot;$(arg vehicle)_$(arg ID)_spawn&quot; output=&quot;screen&quot; pkg=&quot;gazebo_ros&quot; type=&quot;spawn_model&quot;&#xA;        args=&quot;-sdf -param $(arg vehicle)_$(arg ID)_sdf -model $(arg vehicle)_$(arg ID) -x $(arg x) -y $(arg y) -z $(arg z) -R $(arg R) -P $(arg P) -Y $(arg Y)&quot; respawn=&quot;false&quot;/&amp;gt;&#xA;&#xA;&#xA;&amp;lt;/launch&amp;gt;&#xA;&#xA;&amp;lt;!-- vim: set et ft=xml fenc=utf-8 ff=unix sts=0 sw=4 ts=4 : --&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="11238" LastEditorUserId="11238" LastEditDate="2018-02-07T07:38:08.847" LastActivityDate="2018-02-26T14:46:49.300" Title="Error during mavros Multi-Vehicle Simulation with px4 in Gazebo | Invalid &lt;param&gt; tag" Tags="&lt;ros&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15132" PostTypeId="2" ParentId="14933" CreationDate="2018-02-05T08:54:09.050" Score="0" Body="&lt;p&gt;I followed the source installation process as mentioned for &lt;a href=&quot;https://github.com/mavlink/mavros/blob/master/mavros/README.md&quot; rel=&quot;nofollow noreferrer&quot;&gt;mavros&lt;/a&gt; dependencies. And remaining problem solved &lt;a href=&quot;https://stackoverflow.com/questions/18960689/ubuntu-says-bash-program-permission-denied&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="11238" LastActivityDate="2018-02-05T08:54:09.050" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15135" PostTypeId="2" ParentId="15103" CreationDate="2018-02-05T12:52:13.677" Score="0" Body="&lt;p&gt;Ok I'm going to pitch another answer with a different take :). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Why not have the user tell the robot where they wrote their X or O?&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Make an arm with the servo motors you have as you have already planned to do. For the player to make its move, make it grab the end effector of your arm holding the chalk and write down the X or O. &#xA;Now, the robot can memorise the movement it has done through its encoders, while writing the user's answer on the board, &lt;em&gt;with the user&lt;/em&gt;. Thus it can figure out where the user drew their symbol. Then, just memorise where the robots own answers are and you can play tic-tac-toe.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I believe it would be quite fun to grab the robot arm to directly write on the board and then see the robot answer by itself :).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For added fun, make it understand when the user is erasing the board by doing it with the user. &#xA;For even more added fun, make it understand when it is drawing the double cross to play in (I don't the name of this) so you don't avec to play at a fixed location on the board.&lt;/p&gt;&#xA;" OwnerUserId="1615" LastActivityDate="2018-02-05T12:52:13.677" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="15136" PostTypeId="2" ParentId="4632" CreationDate="2018-02-05T20:44:34.013" Score="-1" Body="&lt;p&gt;The simplest, most versatile, and cheapest method I found is explained in &lt;a href=&quot;http://www.ebay.co.uk/itm/Arduino-5V-4-Phase-Stepper-Motor-with-ULN2003-Control-Board-/182162423664&quot; rel=&quot;nofollow noreferrer&quot;&gt;this ebay page&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically you can get a Lego Technic axle (part #6538), remove 2 thin flaps, and it fits perfect. This allows you to connect the DYJ48 stepper motor onto any Lego Technic wheel (there is a range of them), gear, or any other Lego Technic part.&lt;/p&gt;&#xA;" OwnerUserId="19529" LastActivityDate="2018-02-05T20:44:34.013" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="15139" PostTypeId="2" ParentId="14801" CreationDate="2018-02-06T16:53:50.217" Score="1" Body="&lt;p&gt;This is because of using a newer version of gcc compiler (C++11).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Use &lt;code&gt;static_cast&amp;lt;bool&amp;gt;()&lt;/code&gt; to resolve the issue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;example: change&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;success = move_group.move();&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;to&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;success = static_cast&amp;lt;bool&amp;gt;(move_group.move());&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="19277" LastActivityDate="2018-02-06T16:53:50.217" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="15140" PostTypeId="2" ParentId="15127" CreationDate="2018-02-06T17:59:43.213" Score="1" Body="&lt;p&gt;Just because it is not directly measuring where the sled is does not mean that it is open loop control. What matters is where the laser is in relation to the tracks on the disc, where the sled is doesn't matter - unless it's run into the end of travel, and there's a switch for that - so that isn't the variable you close the control loop around.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The tracking needs to be done to less than 1μm so is not possible without feedback from the optical system. The optical signal is split into side beams and these are compared, this then can control both the micro system adjustments and the larger sled motor movements.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The side beams created by the diffraction grating are positioned forward and back of the main beam straddling the track of pits being followed (not directly on either side as shown in the diagram - but that was easier to draw!).&#xA;  Segments on either side of the photodiode array designated E and F monitor the side beams. Tracking is perfect when the E and F signals are equal.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.repairfaq.org/sam/cdfaq.htm#cdcdopop&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.repairfaq.org/sam/cdfaq.htm#cdcdopop&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if you are oscillating a little bit off the track, then you can use the tracking coil to compensate, but if you trend continuously to one side you would move the sled. I don't know how this is done, but that looks like a job for a Kalman filter. The linked page also mentions open-loop heuristics for track seeks, but then you check the timecode where you landed and go back into closed-loop fine control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The principle here of 'measuring the effect rather than the actuator position' is commonly used in both hobby and industrial settings; it arguably is what makes closed loop control closed.&lt;/p&gt;&#xA;" OwnerUserId="1321" LastActivityDate="2018-02-06T17:59:43.213" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15141" PostTypeId="1" AcceptedAnswerId="15144" CreationDate="2018-02-07T10:16:43.630" Score="0" ViewCount="147" Body="&lt;p&gt;I'm tracking the state of a robot using an EKF defined by:&#xA;$$(x,y,\theta)$$&#xA;where $x$ and $y$ are the coordinates in the ground-plane and $\theta$ the heading angle.&#xA;I initialized the covariance matrix $P$ to the following values: &#xA;$$P&#xA;= &#xA;\begin{bmatrix}&#xA;\sigma_{xx}^2 &amp;amp; 0 &amp;amp; 0 \\&#xA;0 &amp;amp; \sigma_{yy}^2 &amp;amp; 0 \\&#xA;0 &amp;amp; 0 &amp;amp; \sigma_{\theta \theta}^2 \\&#xA;\end{bmatrix}&#xA;$$&#xA;where $\sigma_{xx}=1$, $\sigma_{yy}=1$ and $\sigma_{\theta \theta }=0.1$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the system i'm using, valid measurements are rearely obtained so the predicted covariance matrix becomes very big.&#xA;My question concerns the angle uncertainty, the angle is predicted from angle increments $\Delta_{theta}$ so, at each time stamp $k$:&#xA;$$\theta=\theta+\Delta_{theta_{k}}$$&#xA;We wrap the value of the obtained angle to make $\theta\in[-\pi,\pi]$.&#xA;Does the uncertainty have to be also wrapped to the interval $[-\pi,\pi]$? means that making $\sigma_{\theta }\in[-\pi,\pi]$?&lt;/p&gt;&#xA;" OwnerUserId="17442" LastEditorUserId="2155" LastEditDate="2018-02-07T13:19:03.237" LastActivityDate="2018-02-07T13:48:34.847" Title="Robot heading uncertainty values" Tags="&lt;mobile-robot&gt;&lt;kalman-filter&gt;&lt;ekf&gt;&lt;odometry&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="15142" PostTypeId="2" ParentId="15141" CreationDate="2018-02-07T11:14:52.773" Score="0" Body="&lt;p&gt;If your angle is oscillating by 0.2° between 259.9° and 0.1° and you apply wrapping to it before feeding back into the Kalman filter, you will get a large error; your description doesn't make it clear when you wrap $\theta$ - before calculating the error or after. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also ensure $\mid\Delta_{theta}\mid &amp;lt; 180°$ so you don't do larger jumps (or, if large rotations in a time step are possible, have a heuristic to assume the direction is the same as last time if the steps were increasing in magnitude up to the wrap point). Eventually (depending on how many times you spin round and what precision you are working with) you'll have to deal with wind up and wrap the internal state of the filter; at that point you'll have to adjust the residual to allow for the step change.&lt;/p&gt;&#xA;" OwnerUserId="1321" LastActivityDate="2018-02-07T11:14:52.773" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15144" PostTypeId="2" ParentId="15141" CreationDate="2018-02-07T13:48:34.847" Score="1" Body="&lt;p&gt;No, the uncertainty should not be wrapped.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Remember, uncertainty is fundamentally different than angle. At the most trivial level, uncertainty cannot be negative or even zero (i.e. $\sigma_\theta &amp;gt; 0$).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At another level, the angles $\pi$ and $3\pi$ represent the exact same thing, and wrapping the angle is more a nicety than an actual requirement. But $\sigma_\theta=\pi$ implies less uncertainty than $\sigma_\theta = 3\pi$ so if you wrapped you'd be fundamentally changing the uncertainty.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2018-02-07T13:48:34.847" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="15145" PostTypeId="1" CreationDate="2018-02-07T18:31:13.610" Score="0" ViewCount="55" Body="&lt;p&gt;I am building a robot that uses an &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/B01N4EP1N0&quot; rel=&quot;nofollow noreferrer&quot;&gt;Intel NUC&lt;/a&gt; (running ArchLinux) as its main processing unit to run some machine learning and ROS programs scripts.  One of the requirements for the robot is that it must fully turn off and on by a single main power switch.  By doing so, it cuts power to the entire robot, including the NUC.  I am worried that doing so will damage the NUC.  Is there any safe way to shut down a computer without having to turn it off via software. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;**One more requirement for the robot is that its electronics are sealed in in an airtight box, therefore the NUC cannot be accessed to turn off via the main power button.&lt;/p&gt;&#xA;" OwnerUserId="19544" LastActivityDate="2018-02-13T01:18:45.543" Title="Powering Off Main Processor Without Software shutdown" Tags="&lt;control&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15147" PostTypeId="1" CreationDate="2018-02-07T22:44:37.630" Score="1" ViewCount="200" Body="&lt;p&gt;I am currently working on a project that requires me to obtain &lt;strong&gt;depth&lt;/strong&gt; information and point cloud map of objects in an indoor environment ( roughly twice the size of a normal room). I would like to know -&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Would a set of &gt;=2 stereo cameras (manually calibrated wireless sricam SP019 IP cameras) be a good choice to produce a map for the entire room ? I will be using OpenCV 3.3.1 for the calibration and depth mapping.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If I wanted to increase the range of my stereo pair, would I have to -&lt;/p&gt;&#xA;&#xA;&lt;p&gt;a) increase the baseline distance and keep them parallel ? There is some &#xA; discussion &lt;a href=&quot;https://robotics.stackexchange.com/questions/896/how-to-select-cameras-for-a-stereo-vision-system&quot;&gt;here&lt;/a&gt; about the baseline and it's effect on accuracy.&#xA;However, there is no mention about the alignment of the two cameras.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;b) Align them in a tilted fashion to face each other ? Would this &#xA;be bad for Image rectification ?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;What sort of min-max Range can be achieved using &gt;=2 wireless IP cameras in a stereo-vision setup ?&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;3&quot;&gt;&#xA;&lt;li&gt;&lt;p&gt;I would like to evaluate accuracy of depth measurements obtained from the IP cameras. I am planning to use Kinect depth images (for short ranges 0.8-5 metres) as a reference. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What are better commercial solutions for obtaining depth map for &lt;strong&gt;longer&lt;/strong&gt; ranges ? I have seen a few discussions on StereoLabs Zed cameras (see &lt;a href=&quot;https://robotics.stackexchange.com/questions/7549/question-for-those-who-have-experience-using-stereo-cameras-module-e-g-zed-du&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;https://robotics.stackexchange.com/questions/7397/selecting-hardware-stereo-camera-for-beginners&quot;&gt;here&lt;/a&gt;) but none that are convincing enough to make me buy it, as it is quite expensive.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I am aware similar questions like &lt;a href=&quot;https://robotics.stackexchange.com/questions/6581/stereo-camera-vs-kinect?noredirect=1&amp;amp;lq=1&amp;amp;newreg=77b9fdaec76a4f199c9d27b80f9bd36a&quot;&gt;this&lt;/a&gt; have been asked but it did not contain any discussion on IP cameras. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am interested in the &lt;strong&gt;personal experience&lt;/strong&gt; of people who may have done something similar.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you very much for reading.&lt;/p&gt;&#xA;" OwnerUserId="19547" LastActivityDate="2018-02-07T22:44:37.630" Title="Stereo vision setup to obtain depth map" Tags="&lt;cameras&gt;&lt;stereo-vision&gt;&lt;kinect&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15149" PostTypeId="2" ParentId="15145" CreationDate="2018-02-08T07:30:48.407" Score="2" Body="&lt;p&gt;Most PCs can survive power loss.&#xA;Here is a &lt;a href=&quot;https://www.youtube.com/watch?v=9vz1fuFFuj8&quot; rel=&quot;nofollow noreferrer&quot;&gt;video&lt;/a&gt; showing how to configure the NUC BIOS to restart on Power On after Power Fail.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would be more concerned about your comment that it must be &quot;sealed in an airtight box&quot;!  PCs generate a lot of heat and they need a way to get rid of it.  If not, they will overheat.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/JY5Uz.jpg&quot; alt=&quot;PCs get hot&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a fan in most PCs.  The fan is not always obvious (they often like to hide it); but, when it is there, it needs to be able to circulate air to keep the PC cool.  Here is a &lt;a href=&quot;https://www.youtube.com/watch?v=EkimvAK1g0c&quot; rel=&quot;nofollow noreferrer&quot;&gt;video&lt;/a&gt; about that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: Even if you have a fanless computer, it will still require some sort of air flow (possibly convection) to prevent it from overheating.  For example, this &lt;a href=&quot;https://www.logicsupply.com/ml100g-10/&quot; rel=&quot;nofollow noreferrer&quot;&gt;fanless NUC&lt;/a&gt; has a max operating temp of 40C (104F).  Even a hot day WITH air circulation it can overheat it.  Without a source of fresh air, this it going to be much worse.  Remember what happens in your car on a summer's day when you leave the windows rolled up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/cY9yum.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/cY9yum.jpg&quot; alt=&quot;Hot car&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="462" LastEditorUserId="462" LastEditDate="2018-02-13T00:05:17.177" LastActivityDate="2018-02-13T00:05:17.177" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15150" PostTypeId="2" ParentId="15130" CreationDate="2018-02-08T08:36:30.040" Score="0" Body="&lt;p&gt;If you are using old version of px4 firmware. There was some problem with launch file (single_vehcile_spawn.launch). Correcting &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; &amp;lt;arg name=&quot;cmd&quot; default=&quot;$(find xacro)/xacro.py $(find px4)/Tools/sitl_gazebo/models/rotors_description/urdf/$(arg vehicle)_base.xacro rotors_description_dir:=$(find px4)/Tools/sitl_gazebo/models/rotors_description mavlink_udp_port:=$(arg mavlink_udp_port) &amp;gt; $(arg vehicle)_$(arg ID).urdf ; 'gz sdf -p $(arg vehicle)_$(arg ID).urdf'&quot; /&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;in single_vehcile_spawn.launch with&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;arg name=&quot;cmd&quot; default=&quot;$(find xacro)/xacro.py $(find px4)/Tools/sitl_gazebo/models/rotors_description/urdf/$(arg vehicle)_base.xacro rotors_description_dir:=$(find px4)/Tools/sitl_gazebo/models/rotors_description mavlink_udp_port:=$(arg mavlink_udp_port)&quot; /&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="11238" LastEditorUserId="11238" LastEditDate="2018-02-26T14:46:49.300" LastActivityDate="2018-02-26T14:46:49.300" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15151" PostTypeId="1" AcceptedAnswerId="15156" CreationDate="2018-02-08T13:05:59.777" Score="3" ViewCount="3857" Body="&lt;p&gt;How can I map a 3D environment using only a 2D lidar? The lidar would be hand held and it would have 6 DoF. So if I move it in arbitrary motion in all 6DoF, I expect my algorithm to generate a 3D map of whatever part of the environment was visible to the lidar.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've come across ways to use IMU, monocular camera or encoder motor for state estimation that is required for mapping, but I want a solution that doesn't require any other sensor except a 2D lidar like RPLidar.&lt;/p&gt;&#xA;" OwnerUserId="18674" LastActivityDate="2018-02-20T01:36:32.950" Title="3D mapping using only a 2D Lidar" Tags="&lt;slam&gt;&lt;mapping&gt;&lt;point-cloud&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15152" PostTypeId="2" ParentId="15151" CreationDate="2018-02-08T14:44:49.680" Score="1" Body="&lt;p&gt;If it was fixed:&#xA;- You can place it vertically and define a rotating mechanism so it spins on itself and the 2D beam eventually maps the 3D surroundings.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it is hand-held:&#xA;- You will have to compute the transformation matrix from the origin to the new position of the camera (lidar in your case) and apply it to perform an image/laserScan registration, such that the sensed data gets mapped on the correct spatial coordinates.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are working with ROS and have an IMU, I am pretty sure there is a package that will be able to do the registration for you. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can check the &lt;code&gt;laser_geometry&lt;/code&gt; package in the ROS wiki:&#xA;&lt;a href=&quot;http://wiki.ros.org/laser_geometry&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://wiki.ros.org/laser_geometry&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If not you will have to implement the registration by yourself and it is a task that requires time.&lt;/p&gt;&#xA;" OwnerUserId="19554" LastEditorUserId="19554" LastEditDate="2018-02-10T12:30:46.503" LastActivityDate="2018-02-10T12:30:46.503" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15154" PostTypeId="1" AcceptedAnswerId="15155" CreationDate="2018-02-08T21:17:20.320" Score="2" ViewCount="65" Body="&lt;p&gt;The paper &lt;em&gt;A Feedforward Control Approach to the Local Navigation Problem for Autonomous Vehicles&lt;/em&gt; by Alonzo Kelly uses the term &lt;strong&gt;actuation space&lt;/strong&gt;. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Feedforward solves the historically significant clothoid generation problem trivially. C space combinatoric explosion is solved by planning in &lt;strong&gt;actuation space&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I have attempted to search for this term via Google. However, I can only find applications of actuation spaces—not what an actual space actually &lt;em&gt;is&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A definition or source for further investigation would be greatly appreciated.&lt;/p&gt;&#xA;" OwnerUserId="19559" LastActivityDate="2018-02-09T00:41:56.840" Title="What is an &quot;actuation state&quot;" Tags="&lt;kinematics&gt;&lt;navigation&gt;&lt;actuator&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15155" PostTypeId="2" ParentId="15154" CreationDate="2018-02-08T23:37:47.247" Score="2" Body="&lt;p&gt;after reading this ... there are mentions of task-space, state-space, configuration-space, etc&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.researchgate.net/publication/282198949_Fuzzy_logic_control_of_a_continuum_manipulator_for_surgical_applications&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.researchgate.net/publication/282198949_Fuzzy_logic_control_of_a_continuum_manipulator_for_surgical_applications&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;then this link ... &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://helgewurdemann.files.wordpress.com/2014/10/embc-2015-embedded-electro-conductive-yarn-for-shape-sensing-of-soft-manipulators-wurdemann-sareh-shafti-noh-faragasso-chathuranga-liu-hirai-althoefer.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://helgewurdemann.files.wordpress.com/2014/10/embc-2015-embedded-electro-conductive-yarn-for-shape-sensing-of-soft-manipulators-wurdemann-sareh-shafti-noh-faragasso-chathuranga-liu-hirai-althoefer.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;contains this text ...&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;As explained in the previous section, the shape sensing system&#xA;  consists of a set of three electro-conductive yarn threads with the&#xA;  resistances [R1(s1), R2(s2), R3(s3)]. As a linear function can be&#xA;  defined describing the relation between the resistance and the length&#xA;  of the yarn thread within the elongation interval [0;156%], it is&#xA;  possible to continuously calculate and update the length of the three&#xA;  threads [s1, s2, s3]. These actuation space variables are now used to&#xA;  obtain the arc parameters as shown in Figure 5 and Equations 1-3 [16].&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I may very well be wrong about this, but to me it implies that &quot;actuation space&quot; is collection of entities or variables that relate to the physical world in which the robot operates and includes the robot itself. (there is probably a better way to word it though)&lt;/p&gt;&#xA;" OwnerUserId="19143" LastEditorUserId="19143" LastEditDate="2018-02-09T00:41:56.840" LastActivityDate="2018-02-09T00:41:56.840" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15156" PostTypeId="2" ParentId="15151" CreationDate="2018-02-09T00:10:10.440" Score="3" Body="&lt;p&gt;I don't think what you're asking is possible with the state of the art sadly. You cannot, AFAIK, generate a 3D map from a hand held 2D LIDAR without any other sensors. It's a very interesting question you're raising but I think it's a research question :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A LIDAR is going to give you a 2D &lt;em&gt;laserscan/Pointcloud&lt;/em&gt;. That 2D data will not possible to extrapolate to 3D, at least not in a straight forward way: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let say you want to something like &lt;a href=&quot;https://en.wikipedia.org/wiki/Iterative_closest_point&quot; rel=&quot;nofollow noreferrer&quot;&gt;ICP&lt;/a&gt; and match the laser scan onto each other building the map. Now you rotate your 2D laserscan by x degree along the yaw axis. Assuming in your environment walls are straight and vertical, the 2D laser scan will be slightly &lt;em&gt;larger&lt;/em&gt; than the original 2D laser scan. How will ICP be able to tell you that this laser scan is the same as the one before but tilted since they do not have overlapping regions. And that's where lies the whole problem of using a 2D laser scan to build a 3D map. &lt;strong&gt;You wont have enough of those overlaping areas&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;That said, not everything is lost and you can still make it. Here is my take on this:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Start the lidar with a horizontal scan.&lt;/li&gt;&#xA;&lt;li&gt;Use the first scan and start building a 2D map.&lt;/li&gt;&#xA;&lt;li&gt;Extrapolate the map assuming all walls are verticals and infinite.&lt;/li&gt;&#xA;&lt;li&gt;Using ICP or other algorithms to match incoming scans to your virtual walls. Correct the walls if needed.&lt;/li&gt;&#xA;&lt;li&gt;To detect roofs, progressively match incoming scans to walls until you find a scan that can't be match onto your walls.&lt;/li&gt;&#xA;&lt;li&gt;Using those scan to build &lt;em&gt;fake&lt;/em&gt; walls that are perpendicular to the closest walls in the environment, but passes by a certain number of laser points. Note on scan can create multiple fake walls.&lt;/li&gt;&#xA;&lt;li&gt;Start again using ICP against your artificial walls.&lt;/li&gt;&#xA;&lt;li&gt;After a lot of scans, you should have a 3D map of the environment.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;See how this algo &lt;em&gt;&quot;fakes&quot;&lt;/em&gt; overlapping regions and use the incoming scans to figure out which overlapping regions are the correct ones.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If this ends up being a research paper, please contact me :P. Good luck to you.&lt;/p&gt;&#xA;" OwnerUserId="1615" LastEditorUserId="1615" LastEditDate="2018-02-10T17:41:33.440" LastActivityDate="2018-02-10T17:41:33.440" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15158" PostTypeId="1" AcceptedAnswerId="15518" CreationDate="2018-02-09T03:27:25.947" Score="3" ViewCount="72" Body="&lt;p&gt;As stated in Probabalistic Robotics, the proof for correctness of a Bayesian Filter relies on the fact that &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$p(x_{t-1}|z_{1:t-1},\ u_{1:t}) = p(x_{t-1}|z_{1:t-1},\ u_{1:t-1})$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to justify this, they say&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;$u_t$ can be safely omitted ... for randomly chosen controls&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Why is that required? Isn't that true because the control input at time step t cannot possibly effect the state at time t-1?&lt;/p&gt;&#xA;" OwnerUserId="9155" LastActivityDate="2018-04-11T07:02:08.213" Title="Why does a Bayesian Filter require random controls?" Tags="&lt;kalman-filter&gt;&lt;particle-filter&gt;&lt;probability&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15160" PostTypeId="1" CreationDate="2018-02-09T09:50:07.677" Score="1" ViewCount="843" Body="&lt;p&gt;I am trying to make a quadcopter that receives commands from my android mobile phone. I currently have the following:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Raspberry Pi 3 Model B running on Raspbian.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Pi Camera&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Seriously Pro F3 Flight Controller &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I am planning on using bluetooth to send commands to my raspberry pi, but I am unable to figure out how to send commands from the raspberry pi to the flight controller. I am thus asking, how do I send commands (those of movement and throttle) from my raspberry pi to the flight controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Link to Flight Controller Documentation:&#xA;&lt;a href=&quot;http://seriouslypro.com/files/SPRacingF3-Manual-latest.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://seriouslypro.com/files/SPRacingF3-Manual-latest.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the project I am trying to make:&#xA;&lt;a href=&quot;http://www.instructables.com/id/The-Drone-Pi/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.instructables.com/id/The-Drone-Pi/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This project is made with a MultiWii flight controller, while I want to make it with a SPF3 Flight Controller, I don't know how to approach accomplishing it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm asking a similar question:&#xA;&lt;a href=&quot;https://robotics.stackexchange.com/questions/13883/quadcopter-controlled-by-raspberry-pi&quot;&gt;Quadcopter controlled by Raspberry Pi&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;but with a SPF3 Flight controller rather than CC3D Flight Controller and with a little more explanation of terms.&lt;/p&gt;&#xA;" OwnerUserId="19212" LastEditorUserId="19212" LastEditDate="2018-02-13T15:23:19.760" LastActivityDate="2018-02-13T17:45:36.060" Title="How can I send commands from raspberry pi model 3B to Seriously Pro 3 Flight controller?" Tags="&lt;quadcopter&gt;&lt;raspberry-pi&gt;&lt;python&gt;&lt;robotics-library&gt;&lt;flight-controller&gt;" AnswerCount="0" CommentCount="10" ClosedDate="2018-02-13T17:46:00.153" ContentLicense="CC BY-SA 3.0" />
  <row Id="15161" PostTypeId="1" CreationDate="2018-02-09T19:38:11.893" Score="1" ViewCount="55" Body="&lt;p&gt;Please help me to solve my problem:&#xA;This is the transfer function: $G(s)=10\frac{(s^2+1)(s-10)}{s(s+0.1)(s^2+2s+100)}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I calculated properly the whole Bode diagram apart from the phase of the complex zeros $(s^2+1)$. I would sum here at this point as usually: +180° and so does Wolfram's software in fact my result of the phase is equal to this one:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/CMVHl.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/CMVHl.jpg&quot; alt=&quot;Mine/Wolfram solution&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;the problem is that my professor uses MATLAB which gives -180° and therefore this should be the right solution&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/hkPOq.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hkPOq.jpg&quot; alt=&quot;Professor/MATLAB solution&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know which one is right and why, that's why I bother.&lt;/p&gt;&#xA;" OwnerUserId="19567" LastActivityDate="2018-02-11T10:31:28.487" Title="Strange phase case in Bode diagram of a transfer function" Tags="&lt;control&gt;&lt;theory&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2018-02-11T20:44:55.773" ContentLicense="CC BY-SA 3.0" />
  <row Id="15163" PostTypeId="1" AcceptedAnswerId="15164" CreationDate="2018-02-10T04:46:01.423" Score="0" ViewCount="46" Body="&lt;p&gt;As SE(3) does not have any bi-invariant metric, what are the available pseudo metrics for comparing two homogeneous matrices for rigid body motions ? In other words, how to compare two dual quaternions ? &lt;/p&gt;&#xA;" OwnerUserId="17858" LastActivityDate="2018-02-10T09:35:31.117" Title="Metrics for rigid body motions in SE(3)" Tags="&lt;kinematics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15164" PostTypeId="2" ParentId="15163" CreationDate="2018-02-10T09:35:31.117" Score="1" Body="&lt;p&gt;You can use&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$d(T_1, T_2) = \sqrt{a\left\Vert \log(R_1^{T}R_2) \right\Vert^{2} + b\Vert p_2 - p_1 \Vert^{2}},$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $T = \begin{bmatrix}R &amp;amp; p\\0 &amp;amp; 1\end{bmatrix}$, $a$ and $b$ are some (arbitrary) scaling factors (scalars), and $\Vert \cdot \Vert$ denotes the Euclidean norm. This metric is &lt;em&gt;left-invariant&lt;/em&gt;. (See also papers by Prof. Frank Park, for example. He has a number of works in this area.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that here the logarithm map of a matrix $R \in SO(3), \text{Tr}(R) \neq 1$ is&#xA;$$\log(R) = \frac{\phi}{2\sin\phi}(R - R^T),$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $1 + 2\cos\phi = \text{Tr}(R)$. From the above expression, $\log(R)$ is actually a skew symmetric matrix so we can write&#xA;$$\log(R) = [r]_{\times},$$&#xA;where $r \in \mathbf{R}^3$, and $[\cdot]_\times$ denotes a cross-product matrix. In this sense, the norm of $\log(R_1^TR_2)$ in the first equation should be thought of as the norm of the corresponding vector $r \in \mathbf{R}^3$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, the norm  $\left\Vert \log(R_1^{T}R_2) \right\Vert$ is actually the length of the minimal geodesic connecting $R_1$ and $R_2$ (see &lt;a href=&quot;http://robotics.snu.ac.kr/fcp/files/_pdf_files_publications/5_mdc/smooth_invariant_interpolation.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this paper&lt;/a&gt;).&lt;/p&gt;&#xA;" OwnerUserId="7610" LastActivityDate="2018-02-10T09:35:31.117" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15166" PostTypeId="2" ParentId="15151" CreationDate="2018-02-10T11:33:43.613" Score="1" Body="&lt;p&gt;As the previous answers stated: You need an additional source of information to reconstruct the orientation of the scanner. Even if only roughly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do a Google search for &quot;Zebedee scanner&quot;. The researchers from CSIRO implemented the scan registration in the most elegant way, IMHO.&#xA;And they use a cheap IMU in their device.&lt;/p&gt;&#xA;" OwnerUserId="9208" LastActivityDate="2018-02-10T11:33:43.613" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15168" PostTypeId="2" ParentId="15161" CreationDate="2018-02-10T15:38:31.770" Score="1" Body="&lt;p&gt;It's just a phase unwrapping case in MATLAB. Anyway when real parts of complex poles/zeros are null, phase jump could be +180 or -180, it's uknown therefore both diagrams are correct&lt;/p&gt;&#xA;" OwnerUserId="19567" LastActivityDate="2018-02-10T15:38:31.770" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15171" PostTypeId="1" CreationDate="2018-02-11T00:26:11.367" Score="2" ViewCount="195" Body="&lt;p&gt;I'm apart of a group at my University where we would like to build a drone/UAV and constantly add and modify parts on it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We were thinking of using an Arduino or raspberry pi, but we really don't want to mess with PID loops. However, with these microcontrollers we can easily add multiple sensors and a GPS. We can build the frame, do soldering, and everything else, but we would like some type of pre-made PID loop or flight controller so we don't need to worry about the drone falling from the sky.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would anybody have any recommendations for us? Maybe flight controllers that we can add anything else on top of, and then change the code. Or a pre-built drone where we can modify its code and add sensors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help is extremely appreciated. Thanks!&lt;/p&gt;&#xA;" OwnerUserId="19577" LastActivityDate="2018-03-02T07:56:38.163" Title="What are good options for modifying drones?" Tags="&lt;sensors&gt;&lt;pid&gt;&lt;microcontroller&gt;&lt;gps&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15172" PostTypeId="2" ParentId="15171" CreationDate="2018-02-11T00:56:30.467" Score="1" Body="&lt;p&gt;Seems like you're looking for a basic flight controller, for example, the &lt;a href=&quot;https://pixhawk.org&quot; rel=&quot;nofollow noreferrer&quot;&gt;PIXHAWK&lt;/a&gt;. It comes with onboard IMUs and GPS support, while being able to run two main types of firmware: &lt;a href=&quot;http://px4.io&quot; rel=&quot;nofollow noreferrer&quot;&gt;PX4&lt;/a&gt; and &lt;a href=&quot;http://ardupilot.org/copter/&quot; rel=&quot;nofollow noreferrer&quot;&gt;ArduCopter&lt;/a&gt;. Firmware like this contains PID loops, flight control algorithms, flight mode switching support etc. while being open source and easily customizable if you have some C++ experience. Also, PIXHAWK supports the widely used MAVLINK protocol for sending and receiving messages, which allows you to send offboard position, velocity commands etc. or write your own commands adhering to the MAVLINK protocol.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, boards like this are only good for low level control: so for anything vision based or for other kinds of sensing, you'd need a companion computer. If you have a companion computer like the RPi, you can use MAVROS to interface with the PIXHAWK(&lt;a href=&quot;https://github.com/mavlink/mavros&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/mavlink/mavros&lt;/a&gt;). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to make this whole process easier and get something off the shelf, there are some platforms like the &lt;a href=&quot;http://erlerobotics.com/blog/erle-copter/&quot; rel=&quot;nofollow noreferrer&quot;&gt;'ErleCopter'&lt;/a&gt;: it already comes with the ArduPilot flight stack and a RPi computer installed on a multirotor platform. Or if you're still interested in the custom platform route, there are also certain boards like the &lt;a href=&quot;https://emlid.com/navio/&quot; rel=&quot;nofollow noreferrer&quot;&gt;NavIO&lt;/a&gt;: (RPi + PIXHAWK) combo which you can install on your own custom platform.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this helps.&lt;/p&gt;&#xA;" OwnerUserId="10310" LastActivityDate="2018-02-11T00:56:30.467" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15178" PostTypeId="1" CreationDate="2018-02-12T14:53:28.877" Score="1" ViewCount="123" Body="&lt;p&gt;We have a tunnel and the distance from the walls to the robot is about 30cm when the robot is centered, the tunnel curves to the right. The robot has an infrared sensor on its left and one on its right and has an ultrasonic sensor at its front (so basically its eyes). How can I make the robot turn appropriately while its moving so that it's centered in the tunnel. I just need an idea for this algorithm because I can't find any. All what the infrared sensors can do is measure the distance to the walls.&lt;/p&gt;&#xA;" OwnerUserId="19590" LastEditorUserId="19143" LastEditDate="2018-02-12T20:32:42.777" LastActivityDate="2019-10-10T10:23:31.960" Title="Making a tunnel follower robot with 2 IR side sensors and 1 ultrasonic sensor" Tags="&lt;control&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15180" PostTypeId="2" ParentId="14999" CreationDate="2018-02-12T19:30:25.893" Score="1" Body="&lt;p&gt;You would confuse or mislead people if you called a non-realtime system with realtime subsystems a realtime system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your motor control is realtime, just say that. That you have realtime control of the motor position (or whatever feedback parameter is in the realtime domain). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that using realtime components incorrectly can result in non-realtime operation and the fact that you claim hard-realtime will make anyone that is evaluating your system look extra carefully to make sure this is true for the operating conditions they care about.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2018-02-12T19:30:25.893" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15181" PostTypeId="1" CreationDate="2018-02-12T19:58:16.903" Score="4" ViewCount="105" Body="&lt;p&gt;I am interested to know the basic principle of the &quot;Delayed KF&quot; when considering an underwater robot aiming to localize it self using a LBL system. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;More practically, in order to calculate the distance to each anchor,   the robot transmits a PING to and waits for the RESPONSE from the anchor. This is time consuming as the sound velocity is very  low (1500m/s). Lets say it will take order of 5/10 seconds to complete such iteration (large distances). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the robot is static (during this operation, or the anchors are very close), I can recover the two travel time,  TWTT, and after that the distance (knowing the sound velocity, divide by two etc). In that case i can include the range to my EKF navigation filter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming that the robots moves (1 m/s) this assumption does not hold anymore as I can not divide the TWTT by a factor of 2. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Searching online i found talking about the delayed EKF in which (in my understanding) having a  measurements timestamped (the real time and the time when i got it) i re-run the filter at the right time when the measurements was/or should have been done. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does this hold also for this case and how can be integrated with the navigation filter of the robot? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Geometrically to find the right distance based on the TWTT and considering the movement done during that time seems hard to me to model. At least i have not found any paper in the literature.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regards, &lt;/p&gt;&#xA;" OwnerUserId="19594" LastActivityDate="2018-10-12T03:00:48.860" Title="Delayed Kalman navigation based on two way ranges" Tags="&lt;kalman-filter&gt;&lt;navigation&gt;&lt;pseudo-ranges&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="15182" PostTypeId="1" CreationDate="2018-02-12T21:25:24.333" Score="2" ViewCount="44" Body="&lt;p&gt;I have the following setup:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;RC car chassis which can turn, go back and forward; both the turn rate and the acceleration can be controlled smoothly&lt;/li&gt;&#xA;&lt;li&gt;Raspberry Pi 3&lt;/li&gt;&#xA;&lt;li&gt;Two cameras so that depth map can be calculated on the fly for obstacle avoidance&lt;/li&gt;&#xA;&lt;li&gt;Several microphones so that direction of the voice can be determined&lt;/li&gt;&#xA;&lt;li&gt;Intertial measurement unit to keep heading at the direction of the voice&lt;/li&gt;&#xA;&lt;li&gt;Several infrared distance sensors&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;What I want to acompilish is a robot that will drive towards me when called. Voice recognition, structure from motion and handling the IMU are not a problem for me because I've done it before. What I find really problematic is how do I actively avoid obstacles, while trying to follow the voice? I assume that I can call the robot multiple times - i.e. when it gets confused. The robot will stop when a face is recognized from one of the cameras, therefore the distance to target is initially unknown. In theory I could try to create a 3d point cloud using structure from motion and determine the robot's location within the pre-built map and use it for navigation, however as far as I know, the determination of robot location within the map is a costly and uncertain computation (especially when its initial position is unknown). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I would like to learn is - are there some algorithms that allow the robot to stick to given heading while avoiding obstacles, but without a map? I would be very grateful for scientific papers, blog posts or simply algorithm names if there are any avalible. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I recently read about bug algorithms - especially dist bug. This sounds like most promising solution for me so far.&lt;/p&gt;&#xA;" OwnerUserId="19596" LastEditorUserId="19596" LastEditDate="2018-02-13T08:18:08.687" LastActivityDate="2018-02-13T18:02:10.687" Title="Navigation of a ground vehicle towards target without map" Tags="&lt;autonomous-car&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15184" PostTypeId="2" ParentId="15145" CreationDate="2018-02-13T01:18:45.543" Score="0" Body="&lt;p&gt;The main two things I do for an a linux system for which I want to be able to kill power freely are: &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Choose appropriate filesystems and configure them to recover cleanly on restart. The choice depends on your storage hardware, most journaling filesystems work fine for this. Mounting as much as you can read-only also helps. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Make sure that all processes needed for operation clean up their environments and automatically started cleanly. (Clean up temp files, rotate log files, etc)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Searching &lt;code&gt;linux filesystem power loss&lt;/code&gt; will get you started with selection and configuration recommendations. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that providing too high a voltage to the NUC can damage it and an improperly designed robot electrical system might spike high in a poorly sequenced shutdown from one of the energy storage elements (usually kinetic from the moving mass of the robot or inductive from the motor or power supply coils). &lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2018-02-13T01:18:45.543" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15185" PostTypeId="2" ParentId="15182" CreationDate="2018-02-13T01:35:50.157" Score="1" Body="&lt;p&gt;I know you said without maps but bear with me :).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would something like the A* algorithm principle, but with a unknown map in which you add obstacles work for you ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could start with an empty map and use A* to go to the target. Each time you encounter an obstacle you had it to the empty map and recalculate A*. Using you IMU you can get odometry so building that simple map should be feasible. And by starting with an empty map you don't &quot;need&quot; that expensive localization initialization since you know where you start.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Another strategy I can think of is that of simple organisms. Just go toward the (light) sound in a straight line and if you encounter an obstacle just use a &quot;wall follower&quot; behavior, always trying to get closer to the sound, and pray it was the right direction. Simple but effective.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;As you've pointed in the comment another interesting direction is to copy insect behaviors. You can look at the work done by &lt;a href=&quot;http://blog.inf.ed.ac.uk/insectrobotics/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this lab&lt;/a&gt; on desert ant navigation. I haven't read &lt;a href=&quot;https://link.springer.com/article/10.1007/s00359-015-1005-8&quot; rel=&quot;nofollow noreferrer&quot;&gt;this paper&lt;/a&gt; but I saw a presentation of it and it sounded quite interesting.&lt;/p&gt;&#xA;" OwnerUserId="1615" LastEditorUserId="1615" LastEditDate="2018-02-13T18:02:10.687" LastActivityDate="2018-02-13T18:02:10.687" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="15188" PostTypeId="1" CreationDate="2018-02-13T15:13:52.790" Score="0" ViewCount="602" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/jT4fs.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/jT4fs.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;The figure shows an articulated arm kinematic model having 3 degrees of &#xA;freedom.**Theta** represents **joint angle**, **d** represents **joint &#xA;distance**, **alpha** represents **link twist angle** and **a** represents &#xA;**link length**&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="19443" LastActivityDate="2021-04-05T18:01:25.153" Title="Why is a3 (link length) present in the DH parameter table?Shouldn't it be 0?" Tags="&lt;robotic-arm&gt;&lt;dh-parameters&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15189" PostTypeId="2" ParentId="15181" CreationDate="2018-02-13T18:59:49.063" Score="1" Body="&lt;p&gt;I believe you're not taking the problem with the right angle in mind.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your ping measurements are not delayed measurements, they are wrong. The problem is not that you are receiving them late but that, by receiving them late, you lost the actual information that they were providing you. That is because you are calculating the position this way :&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/AQ8eO.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/AQ8eO.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;Image shamelessly taken from &lt;a href=&quot;https://paginas.fe.up.pt/~dee10008/papers/201604_article_oceans_ralmeidajmelo.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this paper by Rui Almeida&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But this relationship is not 100% correct when you are moving. You could try to model this error as either a bias or a Gaussian noise but, since the error is due to the vessel movement, I believe your system is not suffering from a Gaussian noise or bias, and that would not be very effective.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From my point of view, you would have a better chance by using an EKF on the odometry model of your robot and using it to find the right TTWT from there. But i'm not a Kalman filter wizard at all so I hope someone will pass by and prove me wrong.&lt;/p&gt;&#xA;" OwnerUserId="1615" LastActivityDate="2018-02-13T18:59:49.063" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15190" PostTypeId="2" ParentId="15178" CreationDate="2018-02-13T22:01:26.483" Score="1" Body="&lt;p&gt;One possible method is to find the width of your robot, subtract that from 30 cm, then half the remaining distance and if one of the IR sensors reads less than that number, turn in the other direction.&lt;/p&gt;&#xA;" OwnerUserId="17270" LastActivityDate="2018-02-13T22:01:26.483" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15195" PostTypeId="2" ParentId="10914" CreationDate="2018-02-15T07:15:38.280" Score="0" Body="&lt;p&gt;It looks like you're using ROS which will make some of these tasks easier. To start, you will need to define some coordinate frames. If you're only using the coordinate frame of the lidar, that's fine, just make sure you know the location and orientation of your origin. It's important to be able to define the coordinate frames of other objects (like the boxes) in terms of relative transforms from other frames (like the lidar origin).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My first step in this process would be to eliminate all points which are irrelevant by knowledge of the physical system rather than through software processing. How high is the lidar off the ground? How high is the conveyor off the ground? You know that no points below the conveyor belt (or off to the sides for that matter) are going to be relevant and you know the location of the belt relative to the lidar - crop the field of view to match.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next, consider what &quot;flattening&quot; the point cloud will actually gain you. Since the lidar seems to be above the plane of the top of the objects that you're looking to find, you will get a large number of points returned from both the sides and top of the objects. This means that things like edge detection won't work on just a 2D representation of that dataset. I would recommend going down another path of &quot;known object&quot; filtering. Something like volumetric estimation or plane detection/tracking might be your best bet. Hope this helps! &lt;/p&gt;&#xA;" OwnerUserId="837" LastActivityDate="2018-02-15T07:15:38.280" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15198" PostTypeId="1" AcceptedAnswerId="15772" CreationDate="2018-02-16T12:07:16.910" Score="0" ViewCount="451" Body="&lt;p&gt;which distribution of ROS should I install on Ubuntu 17&#xA;I have searched in &lt;a href=&quot;http://wiki.ros.org/Distributions&quot; rel=&quot;nofollow noreferrer&quot;&gt;ros distributions wiki&lt;/a&gt; but couldn't find any specification &#xA;and I also found that ROS Kinetic Kame is not suitable for ubuntu 17 &lt;/p&gt;&#xA;" OwnerUserId="19421" LastEditorUserId="18235" LastEditDate="2018-05-29T11:53:05.420" LastActivityDate="2018-06-11T13:45:59.770" Title="install ROS on ubuntu 17" Tags="&lt;ros&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15202" PostTypeId="1" AcceptedAnswerId="15203" CreationDate="2018-02-17T02:35:29.730" Score="1" ViewCount="91" Body="&lt;p&gt;I am a masters student specializing in Robotics. I have a bachelors degree in Mechanical engineering and hence a bit sloppy with programming languages. MATLAB is one thing I am proficient in. But robotics requires extensive programming, especially in C++ and Python. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;From a career point of view, software development is one of the major skills to have. I have started learning C++ and OOP concepts mainly from EdX. However, I do not know how much to learn and what exactly to be proficient in terms of coding. I have talked to various professors and peers who suggest me take courses in programming and take online challenges in Hackerrank and Leetcode. I have looked at many of these sources and most of them approach coding from a software engineering point of view. I am not sure if that is the right way to learn to code from a robotics perspective.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would really appreciate some pointers and directions on how to be proficient in software development for robotics. Working on projects is one thing and I have already begun working on ROS-Indigo. However, I would like a solid foundation in software development rather than half-baked knowledge. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main thing that confuses me there are too many sources and I am not able to pin down which is the best source to learn and exactly how much to learn. From a roboticist career point of view, some guidance in this aspect would be really helpful. Thanks.&lt;/p&gt;&#xA;" OwnerUserId="18175" LastActivityDate="2018-02-17T12:06:24.600" Title="How to become proficient in software development for an aspiring roboticist?" Tags="&lt;software&gt;&lt;python&gt;&lt;c++&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="3" ClosedDate="2018-02-17T15:55:54.233" ContentLicense="CC BY-SA 3.0" />
  <row Id="15203" PostTypeId="2" ParentId="15202" CreationDate="2018-02-17T12:06:24.600" Score="4" Body="&lt;p&gt;If you make a career of robotics, you will come in contact with a lot of languages, a lot of libraries, and a lot of systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The more you know about the fundamentals, the easier it will be to adjust to something new. Likewise, if you focus your learning on whatever project or context is relevant to you at any given moment, it's more likely to stick with you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general if you learn only what you need to do the project in front of you, and then take a small amount of time to drill down and understand something about the foundation of what you are doing, you will constantly be leveling up in your robotics knowledge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since you're coming from a ME background, I'll assume you are interested in the hardware side of things as well as software. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should have a basic knowledge of &lt;a href=&quot;https://en.wikipedia.org/wiki/Introduction_to_Algorithms&quot; rel=&quot;nofollow noreferrer&quot;&gt;algorithms&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Numerical_analysis&quot; rel=&quot;nofollow noreferrer&quot;&gt;numerical analysis&lt;/a&gt;. You should know for which calculations you computer will give you erroneous results and how to mitigate them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should know that each language has it's own idioms. Many of which come in to, and go out of, fashion with each passing decade. So you need to take the extra step of learning the appropriate idiom for whatever algorithm you are using if you want others to be able to collaborate with you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should understand that microcontrollers, processors, homogeneous multi-processor architectures, and heterogeneous multi-processor architectures all require different approaches for solving the same equation or problem. I think it's easiest to start with a microcontroller like an 8 bit Atmel AVR (Arduino's use these), then ARM, x86, GPU's, (maybe OpenCL), and finally distributed systems (ROS middleware is one, limited, example). It all comes down to computation speed vs communication speed vs &lt;a href=&quot;https://en.wikipedia.org/wiki/Granularity_(parallel_computing)&quot; rel=&quot;nofollow noreferrer&quot;&gt;problem granularity&lt;/a&gt;. FPGA's are another style of computing you should know about. Software runs on hardware and roboticists often need to select the right hardware for their software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should learn a bit about the internals of &lt;a href=&quot;https://fenix.tecnico.ulisboa.pt/downloadFile/1126518382173151/04-OS-architecture.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;operating systems&lt;/a&gt;. Start with a small one, preferably a &lt;a href=&quot;http://fusion.qnx.com/2/9342/Nto_sys_arch.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;real-time one&lt;/a&gt;. They tend to be more modular and digestable. Then dig into at least one big one, &lt;a href=&quot;https://commons.wikimedia.org/wiki/Linux_kernel#/media/File:Linux_kernel_map.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;Linux&lt;/a&gt; or Windows for instance. Learn what an OS does to actually &lt;a href=&quot;http://www.manpages.info/linux/ld.so.8.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;load and run a program&lt;/a&gt;, and how to inspect and manage processes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should learn a bit about &lt;a href=&quot;https://en.wikipedia.org/wiki/Inter-process_communication&quot; rel=&quot;nofollow noreferrer&quot;&gt;IPC&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Middleware&quot; rel=&quot;nofollow noreferrer&quot;&gt;middleware&lt;/a&gt;. It's kind of silly to use ROS if you don't know which situations it's bad for.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should learn at least one full C/C++ toolchain on the &lt;a href=&quot;https://docs.microsoft.com/en-us/cpp/build/building-on-the-command-line&quot; rel=&quot;nofollow noreferrer&quot;&gt;command line&lt;/a&gt;. Command lines are more similar across operating systems than graphical environments or IDEs. Most languages and toolchains will touch or interface somehow with a C/C++ one in one way on another.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;C is still the dominant low-level language, and C++ is often used in computation intensive (robotics) code. You should know that C and C++ are &lt;a href=&quot;https://en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B&quot; rel=&quot;nofollow noreferrer&quot;&gt;different languages&lt;/a&gt; and that there are &lt;a href=&quot;https://en.wikipedia.org/wiki/ANSI_C#C89&quot; rel=&quot;nofollow noreferrer&quot;&gt;different&lt;/a&gt; &lt;a href=&quot;https://en.wikipedia.org/wiki/C%2B%2B#Standardization&quot; rel=&quot;nofollow noreferrer&quot;&gt;versions&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For C, it's worth reading old code, before the advent of java, when men were men and pointers were an elegant weapon of a more civilized age. The idioms of the time (1980 +/-) led to clear and clean code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For C++, my favorite robotics code to read is &lt;a href=&quot;https://simtk.org/projects/simbody&quot; rel=&quot;nofollow noreferrer&quot;&gt;Simbody&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Know that there are different &lt;a href=&quot;https://en.wikipedia.org/wiki/Programming_paradigm&quot; rel=&quot;nofollow noreferrer&quot;&gt;programming paradigms&lt;/a&gt;. Learning functional programming is very useful. It's the best/fastest approach for some problems. You can use functional programming in imperative languages, and you can torture your CS friends using imperative programming in a functional language.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is more that can go in this list. Beyond pointing out that C/C++ is used a lot, I did not recommend languages or libraries or frameworks on purpose. I've learned and used 10's of each, and will continue to learn them on an as needed basis. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This knowledge is fun to apply but its real power is when you are working and interfacing with domain experts. The same way you might use your tribology knowledge figure out what type of bearing to use and specify what you need for a custom one to be made, you can use the above knowledge to read through the kernels of the different physics engines Gazebo can interface with and choose one appropriate for the scenario your are trying to simulate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Don't stress too much. Be pragmatic. Learn what you need to for the project at hand and then learn a little bit of the foundation or why of what you are doing. &lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2018-02-17T12:06:24.600" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15205" PostTypeId="1" CreationDate="2018-02-17T17:47:44.293" Score="-1" ViewCount="63" Body="&lt;p&gt;Our Robotics Team (Go &lt;a href=&quot;http://tuxedopandas.org&quot; rel=&quot;nofollow noreferrer&quot;&gt;TuxedoPandas&lt;/a&gt;! ordered a mix of regular and &quot;Increased Rotation&quot; servos from Servo city.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However,it appears only the outside packaging is marked. And only with a sticker.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any visual indication on the servo that it is Increased Rotation?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/rC3sE.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rC3sE.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18994" LastEditorUserId="37" LastEditDate="2018-08-15T15:26:32.627" LastActivityDate="2021-01-06T01:05:40.637" Title="How can i tell if my HS-485HB Servo is an Increased Rotation servo?" Tags="&lt;rcservo&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15207" PostTypeId="1" CreationDate="2018-02-18T05:20:42.730" Score="1" ViewCount="569" Body="&lt;p&gt;I want to check for singular configurations of a 7-dof robotic arm (RRRRRRR). I have found the geometric Jacobian and it is a 6x7 matrix. If my theoretical background is solid when the Jacobian loses a rank (in this case &amp;lt;6) the robot is at a singularity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So one should check when the determinant of the Jacobian equals zero.In this case since it is not a square matrix i multiplied the Jacobian by its transpose and calculated that determinant in matlab.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My problem is that the elements of the matrix,well those that are not equal to zero or 1, are terrible to look at.I mean, you can see a lot of cosine and sine terms which make the computation really complicated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a way to make things easier?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I appreciate all the help,&#xA;Victor&lt;/p&gt;&#xA;" OwnerUserId="19636" LastEditorUserId="110" LastEditDate="2018-02-19T00:06:27.067" LastActivityDate="2019-02-27T06:37:33.527" Title="Singular configurations of a 7-dof robotic arm" Tags="&lt;robotic-arm&gt;&lt;jacobian&gt;&lt;singularity&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="15208" PostTypeId="1" CreationDate="2018-02-18T17:48:00.597" Score="1" ViewCount="2821" Body="&lt;p&gt;I want to learn &lt;code&gt;ros-kinetic&lt;/code&gt; from a virtual machine. I found that &lt;code&gt;ros-indigo&lt;/code&gt;  is available from &lt;a href=&quot;https://nootrix.com/diy-tutos/ros-indigo-virtual-machine/&quot; rel=&quot;nofollow noreferrer&quot;&gt;nootrix&lt;/a&gt;; similarly, is there a virtual machine with ros-kinetic version available anywhere?&lt;/p&gt;&#xA;" OwnerUserId="19639" LastEditorUserId="13222" LastEditDate="2018-03-03T00:02:46.770" LastActivityDate="2018-09-09T16:53:57.753" Title="Is a virtual machine with ros-kinetic available anywhere?" Tags="&lt;ros&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15209" PostTypeId="2" ParentId="15208" CreationDate="2018-02-18T20:40:35.870" Score="2" Body="&lt;p&gt;Hey I was wondering this same thing.. After some research there are some docker containers that you can look at &lt;a href=&quot;https://hub.docker.com/_/ros/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://hub.docker.com/_/ros/&lt;/a&gt; . If you want a virtual machine im actually working on a vagrant file that does exactly this as we speak. &lt;a href=&quot;https://github.com/joepuzzo/vagrant-turtlebot&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/joepuzzo/vagrant-turtlebot&lt;/a&gt; &#xA;You could fork that and tweak it to your needs.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;" OwnerUserId="19643" LastActivityDate="2018-02-18T20:40:35.870" CommentCount="10" ContentLicense="CC BY-SA 3.0" />
  <row Id="15211" PostTypeId="1" CreationDate="2018-02-19T11:34:48.797" Score="2" ViewCount="210" Body="&lt;p&gt;Suppose I've developed a &lt;strong&gt;monocular&lt;/strong&gt; SLAM or odometry algorithm. Then I want to test it on some dataset, for example KITTI, TUM etc. How should I deal with the absolute scale in this way? Thanks. &lt;/p&gt;&#xA;" OwnerUserId="14935" LastActivityDate="2020-12-07T12:05:55.570" Title="Scale estimation in datasets for monocular odometry" Tags="&lt;slam&gt;&lt;visual-odometry&gt;&lt;monocular&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15212" PostTypeId="1" CreationDate="2018-02-19T13:30:53.333" Score="0" ViewCount="74" Body="&lt;p&gt;I am new to the field of control systems, PID and robotics and I want to enhance my knowledge in the field. Can you recommend me books where I can start learning about control system engineering (with mathematical and practical examples) so I can finally finish my project. (I am working on quad copter and I can find all codes online but can't understand it because some people here told me that I should start reading on these subjects first).&lt;/p&gt;&#xA;" OwnerUserId="19621" LastActivityDate="2018-02-20T12:51:08.700" Title="How to start as a control system engineer and to make advanced projects using PID" Tags="&lt;control&gt;&lt;pid&gt;&lt;beginner&gt;&lt;books&gt;" AnswerCount="2" CommentCount="2" ClosedDate="2018-02-20T14:00:05.357" ContentLicense="CC BY-SA 3.0" />
  <row Id="15213" PostTypeId="1" AcceptedAnswerId="15217" CreationDate="2018-02-19T14:01:03.960" Score="1" ViewCount="381" Body="&lt;p&gt;I'm looking to use 3-phase motor without gearbox for robotics application. It will always work at near stall situation never rotating more than 360deg. I'm looking for arrangement that will produce max stall torque while drawing min current.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried both gimbal (high resistance) and BLDC (low resistance) motors and yes I could achieve high torque, but only at cost of too high current and overheating.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is both practical and theoretical: what motor or mode of operation should I choose to maximize stall torque? and what in principle can be done? Imagine I had my motor factory - how would I approach building stall torque motor?&lt;/p&gt;&#xA;" OwnerUserId="19650" LastActivityDate="2018-02-20T07:09:46.480" Title="How to maximize stall torque of a motor" Tags="&lt;motor&gt;&lt;torque&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15214" PostTypeId="2" ParentId="15213" CreationDate="2018-02-19T15:18:31.287" Score="0" Body="&lt;p&gt;So, you want to use a servo? Why not just buy a servo?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Three things are required for &quot;motor action&quot; - &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A current carrying conductor&lt;/li&gt;&#xA;&lt;li&gt;A magnetic field&lt;/li&gt;&#xA;&lt;li&gt;An applied voltage&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The result is relative motion between the conductor and the magnetic field. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Three things are also required for &quot;generator action&quot; - &#xA;1.  A current carrying conductor&#xA;2.  A magnetic field&#xA;3.  Relative motion&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The result is a voltage developed across the conductor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is important because once a motor starts it also becomes a generator of sorts, because it meets the criteria required for generator action.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The generator action in a motor will develop what is referred to as &lt;a href=&quot;https://en.wikipedia.org/wiki/Counter-electromotive_force&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;back EMF&quot;&lt;/a&gt;. It is a voltage that acts &lt;em&gt;against&lt;/em&gt; the applied voltage. The back EMF &quot;fights&quot; the applied voltage, which reduces the &lt;em&gt;net&lt;/em&gt; voltage applied to the motor, which reduces the &lt;em&gt;current&lt;/em&gt; draw. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The torque a motor can produce will always be directly related to the strength of the magnetic field inside the motor. The strength of the magnetic field is directly related to the current in the motor windings. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You make more torque in a motor by passing more current to the motor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you have noticed, more current leads to more &lt;em&gt;heat&lt;/em&gt; in the motor, because of &quot;I squared R losses.&quot; This term comes from the formula for electric power, $P = IV$, combined with Ohm's Law, $V = IR$, to give a formula for electric power in terms of current and resistance:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;P = I^2 R \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The $I^2R$ losses are the reason why &lt;em&gt;high voltage&lt;/em&gt; electric lines are used for power transmission - higher voltages reduce current. Power losses increase with current &lt;em&gt;squared&lt;/em&gt;, so it's important to get current as low as possible to reduce the power losses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, in order to get a high stall torque, you need a high applied current. As you have seen, you &lt;em&gt;cannot&lt;/em&gt; take a &quot;standard&quot; or general purpose motor and use it at stall conditions because most motors are &lt;em&gt;designed&lt;/em&gt; with back EMF in mind. The back EMF protects the motor by reducing current draw, which reduces the heat generated ($I^2R$ losses) inside the motor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To operate predominately in the stall region of a motor requires more cooling to dissipate the heat generated, and/or different wire insulation that is capable of withstanding higher winding temperatures. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A motor spec sheet should list the &quot;nominal&quot; or operating current for the motor. The alternative to buying a specialized motor &lt;strong&gt;might&lt;/strong&gt; be to operate the motor in conjunction with a &lt;em&gt;current-regulated&lt;/em&gt; power supply instead of a &lt;em&gt;voltage-regulated&lt;/em&gt; power supply. Throttle the motor to no more than the specified  operating current and the heat generated in the motor &lt;em&gt;should&lt;/em&gt; be manageable. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I say this &lt;em&gt;might&lt;/em&gt; be acceptable because most higher-power motors feature an integrated fan. If the motor has a fan, then the rated current for the motor likely depends on the fan rotating at the nominal motor speed. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can meet the requirement by creating a &lt;em&gt;blower&lt;/em&gt; for the motor - this is a common practice where slow speed, high torque motors are used, as in cranes. Essentially, you disconnect the fan from the motor you want to operate at stall condition and attach it to the output shaft of a second motor. Any time you apply power to the first motor, you spin the second motor at whatever speed the fan is supposed to turn.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now you get all the design cooling for the first motor and, assuming you're operating at or below the rated current for the first motor, you should be able to operate at or near stall torque for as long as you want. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-02-19T15:18:31.287" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="15216" PostTypeId="2" ParentId="15211" CreationDate="2018-02-19T19:21:32.650" Score="1" Body="&lt;p&gt;Assume something, then adjust your guess based on your measured distance traversed versus actual distance traversed. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you can get data from a vehicle that drove down a road, and you know the path taken, you can map that route and determine the actual distance travelled. If you assumed some arbitrary distance, and your path turned out to be 340 km, but you know from a map the actual distance traveled is 100 km, then scale your original assumed value to (1/3.4) of whatever your original guess was. Repeat until results match. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-02-19T19:21:32.650" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15217" PostTypeId="2" ParentId="15213" CreationDate="2018-02-19T20:33:27.560" Score="3" Body="&lt;p&gt;One relevant equation is the &lt;a href=&quot;https://en.m.wikipedia.org/wiki/Lorentz_force#Force_on_a_current-carrying_wire&quot; rel=&quot;nofollow noreferrer&quot;&gt;lorentz force equation.&lt;/a&gt; which suggests that if you want to reduce current then you need to increase the magnetic field. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The magnetic circuit is complex, with different materials moving relative to each other. As the rotor of the motor rotates, the magnetic field within the stator changes direction and there are &lt;a href=&quot;https://en.wikipedia.org/wiki/Magnetic_core#Core_loss&quot; rel=&quot;nofollow noreferrer&quot;&gt;losses&lt;/a&gt;. Choosing optimum materials and geometry is the subject of many books and scientific papers. In most motor design, rotation is expected and materials and geometry that is optimum for a rotating magnetic field are used. If you have a mostly non-rotating application, you may be able to select different materials and geometry that is better.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you don't want to design your own motors, the type of industrial motor that is most likely to be a bit optimized towards your requirements is called a direct drive motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The gimbals motor you linked claims to have 6Kg/cm of torque. Assuming they really mean 6 Kg*cm*9.81*m/s^2, that's about 0.6 Newton meters (Nm) of torque. A good motor that would fit the same volume could be the Kollmorgen TBM(S)-7615-X, which has about 3 Nm of stall torque, but also approximately 3 times the mass. That's a rough idea of what good design and optimization can do. About double the torque per kilogram of motor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Considering your ~$100 per motor budget, it depends on how motivated you are. If you are really motivated and like to build things, you could learn a bit of how motors are made and make your own motors (which are just some iron sheet cut out (by waterjet for instance), glued in a stack, wound with copper wire, and magnets glued to a rotor) for roughly your budget, assuming your robot has 3 or 6 motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However you may want to keep in mind that there are very few direct drive serial chain (arm or leg like) robots. The ones that exist are usually oriented horizontally so that the motors don't have to resist gravity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or you could do a bit of searching for motor (+ gears) that fits what you want to do best at your price range. You will probably have to make some compromises, but with a bit of calculation, you can be reasonably sure of the performance of the robot before you buy the motors. &lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="184" LastEditDate="2018-02-20T07:09:46.480" LastActivityDate="2018-02-20T07:09:46.480" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="15218" PostTypeId="2" ParentId="12547" CreationDate="2018-02-20T01:14:36.330" Score="1" Body="&lt;p&gt;How I can I include more FOV in the corrected image at the edges, where the information is lost?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-&gt; Just try to modify fx and fy of your intrinsic matrix. Maybe, multiplying a scalar to K(0,0) and K(1,1) will work. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I reduce the blur effect at the edges?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-&gt; Generally, it is not possible unless you create a specialized DNN. All the blurry area is because you are stretching small areas in the original image. It is an inevitable side effect when you undistort a fish-eye image.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;During calibration, should I cover the entire FOV of the camera so that the corners are present at the edges also?&#xA;-&gt; Yes&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the correct way of showing the patterns while calibration?&#xA;Are there any online tool boxes which provides fish eye calibration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-&gt; To fully observe the lens distortion characteristic you should show the pattern everywhere in the image. Try to show your board around the circular border of the image. But not too much as blurry corners will decrease the accuracy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-&gt; No open source online one as far as I know. If need one you should build one.&lt;/p&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2018-02-20T01:14:36.330" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15219" PostTypeId="2" ParentId="15151" CreationDate="2018-02-20T01:29:57.793" Score="3" Body="&lt;p&gt;That is an already solved problem. As Squelsh mentioned CSIRO released its initial version in 2009 and their work is commercialized by GEOSLAM already. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/6m3ZJ.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6m3ZJ.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;One of a CMU student released a open source version of CSIRO's work, called &lt;a href=&quot;http://www.frc.ri.cmu.edu/~jizhang03/Publications/ICRA_2015.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;LOAM&lt;/a&gt;.&#xA;Unfortunately, he also commercialized his work and closed the original git. Good news is that many people have a copy of that already:)&#xA;CSIRO's recent work combines IMU,2D LiDAR, camera, encoder and the related paper will be released soon at RAL.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This category of SLAM is called Continuous-time SLAM.&#xA;If you are writing a paper, &lt;a href=&quot;https://arxiv.org/pdf/1711.01691.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; is one of the latest CT-SLAM paper. Please, cite this:)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, check these videos &lt;a href=&quot;https://www.youtube.com/watch?v=QNNLncT9XmQ&amp;amp;t=58s&quot; rel=&quot;nofollow noreferrer&quot;&gt;1&lt;/a&gt;, &lt;a href=&quot;https://www.youtube.com/watch?v=ynu643ri5HI&quot; rel=&quot;nofollow noreferrer&quot;&gt;2&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="19219" LastEditorUserId="19219" LastEditDate="2018-02-20T01:36:32.950" LastActivityDate="2018-02-20T01:36:32.950" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15220" PostTypeId="2" ParentId="14252" CreationDate="2018-02-20T03:07:49.797" Score="1" Body="&lt;p&gt;Correct me if I'm wrong, but it sounds like you're looking for an estimate of the noise in the measurement, which is usually called 'R' in the Kalman filter (&lt;a href=&quot;https://en.wikipedia.org/wiki/Kalman_filter#Underlying_dynamical_system_model&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Kalman_filter#Underlying_dynamical_system_model&lt;/a&gt;).  If you have the ground truth and you assume that the measurements have Gaussian noise (which is assumed in the Kalman filter) and are distributed about the ground truth measurements, you can get the MLE by doing &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$ \hat{\sigma_{x}}^{2} = \frac{1}{n}\sum_{i=0}^{i=n} (x_{gt}^{i} - x_{m}^{i})^{2} $&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To get $\sigma{x}$ you would just take the square root.  You can do the same for the other variables of course.  If you are keeping $\theta$ in a bounded range make sure you are careful about subtraction when doing this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This would assume that all of the measurements come from a $\mathcal{N}(x_{gt}^{i}, \sigma_{x}^{2})$ distribution, where $x_{gt}^{i}$ is the ground truth measurement for the $i$-th measurement and $x_{m}^{i}$ is the noisy measured value.  This probably won't be strictly true in practice because the variance will likely depend on the number/type of visual features in your environment and details in your place recognition module, but you'll at least be able to smooth out the measurements a bit.  If you want to check how well this assumption holds, you can look at a histogram of the residuals $r_{i}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$r_{i} = x_{gt}^{i} - x_{m}^{i}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the assumption is correct it should look roughly normal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to get into the weeds a bit more and do this a bit more 'properly', you can get estimates of the uncertainty in the transformation from your place recognition module by examining the fit that the module does.  I won't go into it here since you didn't ask, but see Chapter 6.1.4 in Szeliski (Computer Vision: Algorithms and Applications) on 'uncertainty modeling' if you want to know more.  &lt;/p&gt;&#xA;" OwnerUserId="19654" LastActivityDate="2018-02-20T03:07:49.797" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15222" PostTypeId="2" ParentId="15188" CreationDate="2018-02-20T10:35:37.573" Score="1" Body="&lt;p&gt;There is no unique DH parametrization but a couple of variations of DH parametrization out there in textbooks. Basically they all agree on the systematic way to describe the &quot;center&quot; of robots but diverge on the way the base and end-effector are treated. This is because often the the simplest mathematical representation of the representation (i.e. with the less frame and parameters) is not matching the more intuitive one for the user/application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For you given example, I think you got confused as of where the frames for the DH parametrization are lying on the robot. Based on your table the center point of frame 0 and 1 are the same (which do not appear in your drawing). Then in your drawing you seem to have chosen to put the frame 3 at the end-effector, which makes logically the distance a3 appear, another solution would have been to have the center of frame 3 located on joint 3, then a3 should not appear in your DH table. The later solution is valid but less intuitive in my view (e.g. if you start to think about reaching location in space with your robot it's more intuitive to consider the end-effector than the joint  3 position to describe it)&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2018-02-20T10:35:37.573" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15224" PostTypeId="2" ParentId="15212" CreationDate="2018-02-20T11:14:22.393" Score="1" Body="&lt;p&gt;I can see two parts to this question!&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;You need to learn the math needed to develop such control systems in an advance manner. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Look for Author: &lt;em&gt;Norman S. Nice - Control Systems Engineering. Sixth Edition&lt;/em&gt; I found this PDF online and was used in my course.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;the programming skills needed to convert this math into a usable system.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Warning&lt;/strong&gt; - Controlling a quadcopter is not beginner level task and requires at the least. &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Good calibration and a Kaman filter on the accelerometer(acc) data.&lt;/li&gt;&#xA;&lt;li&gt;The ability to transpose the the filtered acc data to a real world coordinate frame.&lt;/li&gt;&#xA;&lt;li&gt;Power algorithm to determine the needed PWM output at a given motor to achieve flight.&lt;/li&gt;&#xA;&lt;li&gt;PID control that uses the filtered acc data to determine error between set-point and actual data.&lt;/li&gt;&#xA;&lt;li&gt;A good PID tune to make the system function as intended.&lt;/li&gt;&#xA;&lt;li&gt;Programming skills in data manipulation and math.     &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Assuming you would be using Arduino or C/C++ you could simply google &quot;quad*copter PID Arduino&quot; and you would get 100's of matches. &lt;/p&gt;&#xA;" OwnerUserId="19659" LastEditorUserId="19659" LastEditDate="2018-02-20T12:27:39.403" LastActivityDate="2018-02-20T12:27:39.403" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="15225" PostTypeId="2" ParentId="15212" CreationDate="2018-02-20T12:51:08.700" Score="1" Body="&lt;p&gt;Making advanced projects with PID control is easy. At first, a uav-testbed is needed. This consists of two UAVs at the same time. The left UAV is controlled by the human operator with a joystick. And the right UAV is controlled by the pid-tracking controller. The idea is, that the pid-controller follows the human-demonstration in realtime and reduces the error. Such a set-up results not to the Artificial Intelligence itself, but it is only a development platform for testing out different kinds of pid-controllers. A more advanced form is model-predictive control, in which the error between the demonstration and the autonomous controlled vehicle is reduced by a dedicated model which can be a physics-engine, a transfer function or a neural network.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finding good books about the topic is indeed a problem. I can only provide a link to paper which is not very useful &lt;a href=&quot;http://www.alaris.kz/wp-content/uploads/2013/11/lbr1899_Omarali.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Real-Time Predictive Control of an UR5 Robotic Arm Through Human Upper Limb Motion Tracking&lt;/a&gt; because it has nothing to do with UAV control. Another problematic source &lt;a href=&quot;https://pdfs.semanticscholar.org/f0d9/2c6618a29583136ff2c4193ab9c3d6d899b3.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Designing Interactive Blimps as Puppets&lt;/a&gt; is unscientific because it is from the area of animatronics.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2018-02-20T12:51:08.700" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15226" PostTypeId="1" AcceptedAnswerId="15404" CreationDate="2018-02-20T13:10:23.890" Score="3" ViewCount="87" Body="&lt;p&gt;Are there specific places/websites where you guys read about the topics that are being searched in Robotics, specially, for the most newest researches. I would like to know the places where the most hottest topics in Robotics are studied for both theoretical and experimental studies. The only place I know is IEEE community. They are doing great specially their magazine but I'm curious if there are any alternatives for  robotics scientists. Please include journals. &lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="2155" LastEditDate="2018-02-20T18:01:30.820" LastActivityDate="2018-03-23T20:53:21.290" Title="Places for the up-to-date topics in robotics" Tags="&lt;research&gt;" AnswerCount="2" CommentCount="1" ClosedDate="2019-01-20T23:50:49.617" ContentLicense="CC BY-SA 3.0" />
  <row Id="15227" PostTypeId="2" ParentId="15226" CreationDate="2018-02-20T18:44:03.293" Score="-3" Body="&lt;p&gt;The IEEE society has a paywall infront of their papers. To read the information, somebody has to choose between paying 30 US$ per paper, or become a member which costs hundreds of dollar per year. Additionally, the quality of the papers is in doubt, because most of the journals of IEEE have no public peer-review. In contrast, the stackoverflow and stackexchange website are a good place for discuss new developments. The quality of the postings is high, and the content is available as fulltext. If you have any questions about current robotics, for example how to win the robocup challange, feel free to ask.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2018-02-20T18:44:03.293" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15228" PostTypeId="1" AcceptedAnswerId="15231" CreationDate="2018-02-20T19:03:47.973" Score="0" ViewCount="132" Body="&lt;p&gt;I know this might sound like a stupid question, but I actually need help with this. So, I'm looking at this motor: &lt;a href=&quot;https://www.servocity.com/2737-rpm-premium-planetary-gear-motor&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.servocity.com/2737-rpm-premium-planetary-gear-motor&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a raspberry pi, and was wondering how exactly I was supposed to control this. I know that I need a motor controller to drive this thing at a reasonable speed, but I need someone to point me in the right direction as to what type of motor controller I need. Thanks!&lt;/p&gt;&#xA;" OwnerUserId="19664" LastActivityDate="2018-02-21T02:08:23.197" Title="Controlling a servocity planetary motor?" Tags="&lt;control&gt;&lt;motor&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="15230" PostTypeId="2" ParentId="15228" CreationDate="2018-02-21T00:44:30.950" Score="0" Body="&lt;p&gt;The one I'd suggest for your motors is &lt;a href=&quot;https://www.servocity.com/roboclaw-2x7a-motor-controller&quot; rel=&quot;nofollow noreferrer&quot;&gt;the RoboClaw 2x7 Motor Controller&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This takes control signals from the Raspberry Pi and powers the motor from a separate battery. The board should be able to power your Raspberry PI because it has a 5v 3amp BEC (battery eliminator circuit). You would need a battery of no more than 12 volts to power the motors.&lt;/p&gt;&#xA;" OwnerUserId="19275" LastActivityDate="2018-02-21T00:44:30.950" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15231" PostTypeId="2" ParentId="15228" CreationDate="2018-02-21T02:08:23.197" Score="0" Body="&lt;p&gt;This is just a standard brushed DC motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you use to control it (how you control it) depends most on your application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Motor Specs are: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Voltage = 3V-12V &lt;/li&gt;&#xA;&lt;li&gt;Speed = 2737 rpm (12V, No Load)&lt;/li&gt;&#xA;&lt;li&gt;Current = 0.18A  (12V, No Load) &lt;/li&gt;&#xA;&lt;li&gt;Current = 4.9A (12V, Stall)&lt;/li&gt;&#xA;&lt;li&gt;Torque = 9.72 oz-in (12V, Stall)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Some things to consider from this:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If you want to run at 2737 rpm, you better make sure you have a 12V supply and a driver than can drive 12V.  If slower is fine, lower voltage would be OK,  The rpm will scale pretty linearly with the voltage&lt;/li&gt;&#xA;&lt;li&gt;If you need to be able to support a stall condition, you should make sure the driver can support 5A (or at least as much as you supply can).&lt;/li&gt;&#xA;&lt;li&gt;Since this is a brushed DC motor, the speed is unregulated.  The speed will result from a balance between input power (V X A) and output power (rpm X torque).  You can add a separate control loop (like using an encoder) if you want to regulate speed.  Some controllers support encoders.&lt;/li&gt;&#xA;&lt;li&gt;I assume you want to regulate the motor's power.  If so, something has to do the PWM.  This can be done by the Pi or a separate controller.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="462" LastActivityDate="2018-02-21T02:08:23.197" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15232" PostTypeId="2" ParentId="15211" CreationDate="2018-02-21T04:26:22.060" Score="1" Body="&lt;p&gt;The absolute scale cannot be estimated if you are utilizing a monocular camera. Either you add an additional sensor information such as IMU or you need a size known object to be in your dataset.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As KITTI dataset has 3D LiDAR scan data as well, you can initially utilize them for finding the absolute scale.&lt;/p&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2018-02-21T04:26:22.060" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15236" PostTypeId="1" CreationDate="2018-02-21T13:14:29.907" Score="0" ViewCount="52" Body="&lt;p&gt;I am currently working on collision avoidance using &lt;a href=&quot;http://phoenix.goucher.edu/~jillz/cs325_robotics/goodrich_potential_fields.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Potential fields&lt;/a&gt; and I have visualized the same in winfom.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, I need to test the algorithm in predefined trajectory say a spline(or in a lane).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is:&#xA;Is it possible to do collision avoidance considering potential field method in a predefined trajectory? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Say the model car avoids the obstacle and returns back on its trajectory to reach the goal, created in windows form.&#xA;If, so what are the parameters and contraints should be considered?&lt;/p&gt;&#xA;" OwnerUserId="19671" LastActivityDate="2018-03-23T14:53:28.877" Title="Potential field algorithm in a predefined trajectory" Tags="&lt;algorithm&gt;&lt;autonomous-car&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15237" PostTypeId="2" ParentId="15236" CreationDate="2018-02-21T14:45:57.720" Score="1" Body="&lt;p&gt;This is not any more a pure potential field type of problem, since you already have a global trjectory which you then alter locally. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a hybrid approach. A good example for a hybrid approach is the Elastic Bands method, can be found &lt;a href=&quot;https://personalrobotics.ri.cmu.edu/files/courses/papers/QuinlanElasticBands.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. It models the path as elastic bands which are deformed by virtual (mechanical) forces (due to the presence of obstacles). Furthermore, it also includes virtual forces which deform the path back to its original shape if no obstacles are present anymore, similarly to an elastic material. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later&#xA;this method has been alterd to include robot geometry also. The Elastic Strips Method can be found &lt;a href=&quot;https://cs.stanford.edu/group/manips/publications/pdfs/Brock_2002_IJRR.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2018-02-21T14:45:57.720" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="15238" PostTypeId="2" ParentId="2921" CreationDate="2018-02-21T15:16:12.687" Score="1" Body="&lt;p&gt;I think people are getting their mS and uS mixed up! Generally it was always between 1mS and 2mS but to get the full range or extended range its said to be 0.8mS and 2.2mS (or 800uS to 2200uS) not 800 to 2200mS (I'm sure it was just a typo but to save confusion).&#xA;Obviously there needs to be a gap between the pulses so at 300Hz you would have a pulse of 2.2mS followed by a gap of 1.13mS, this is known as the Mark and the Space and can be written as a ratio or Mark/Space ratio although here it is irrelevant as I will explain.&#xA;(  300x(0.0022+0.00113)=1Second   ).&#xA;The old servos always want 50Hz which means as the Mark changed in duration (desired servo position) the Space must also change in duration to keep the frequency always at 50Hz (longer Mark needs a shorter Space to maintain the overall length of the signal and vice versa).&#xA;The new servos are quite happy to receive a position signal at 50Hz but will happily accept 300Hz so the only importance is to send the correct Mark duration for the required position and make no change to the Space in between, this makes basic interfacing with microprocessors and program writing that little bit easier for beginners as for instance you could always place a set 2.6mS Space between the Marks giving a position update frequency of between 294Hz and 208Hz(2.6mS+0.8mS and 2.6mS+2.2mS) which for many uses is more than fast enough and also makes the importance of the mark/space ratio redundant. Of course a constant update of 300Hz could be better in some cases requiring better more consistent performance but then a simple calculation is required in the program to set the space accordingly. &lt;/p&gt;&#xA;" OwnerUserId="19672" LastActivityDate="2018-02-21T15:16:12.687" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15240" PostTypeId="1" CreationDate="2018-02-21T19:57:00.987" Score="0" ViewCount="71" Body="&lt;p&gt;I am attempting to minimize the energy consumption used by an electric-motor-powered car given the speed restrictions:&#xA;$$\text{speed}: [v_{\text{min}},v_{\text{max}}]$$&#xA;Currently, we are utilizing a bang-bang controller where we tell the motor to run at full voltage until $v_\text{max}$ is reached. After this, the motor is cut. Once the speed approaches $v_\text{min}$ due to energy losses in the system, we will repeat this cycle. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;We are striving to achieve the &lt;strong&gt;least energy consumption per unit distance&lt;/strong&gt;. Is it worth while to implement some motion profiling system, or would this just increase energy consumption?&lt;/p&gt;&#xA;" OwnerUserId="19559" LastEditorUserId="19559" LastEditDate="2018-02-22T17:30:26.687" LastActivityDate="2018-07-22T19:47:09.493" Title="Motion Profiling for Decreasing Energy Consumption" Tags="&lt;microcontroller&gt;&lt;motion&gt;" AnswerCount="2" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="15241" PostTypeId="2" ParentId="15207" CreationDate="2018-02-21T22:03:12.060" Score="2" Body="&lt;p&gt;Think of those &quot;terrible to look at&quot; terms as diamonds in the rough.  Yes, they look complicated at first.  But you will find an amazing number of them will combine using basic trigonometric identities. For example, look for repeating patterns of squares of the sines and cosines of the various angles, and use those to factor out terms and combine them to equal one, or zero, or twice theta_n, or some other simplification.  I have done this for an 8R arm.  It might take a day or two, but it is achievable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the last three (or four) joints of your manipulator have axes which intersect at a point, then you can simplify the equations quite a bit.  If this is the case, your manipulator has a &lt;em&gt;spherical wrist&lt;/em&gt; geometry.  Robot manipulators with this feature can be analyzed in a partitioned fashion.  You can define the task as two related subtasks - position the center of the wrist at a certain point in space, and rotate the end effector to achieve the desired Euler angles for that pose.  The singularities of positioning the center of the wrist will be independent of the wrist joint angles, and can be found by a 3x3 $JJ^J$ instead of the 6x6 you are dealing with now.  The singularities of the end effector rotation might have terms that include all of the joint angles, but will still be calculable with a 3x3 matrix instead of a 6x6.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2018-02-21T22:03:12.060" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15242" PostTypeId="2" ParentId="15240" CreationDate="2018-02-21T22:26:22.253" Score="0" Body="&lt;p&gt;How much energy are you using now with this strategy? You can't minimize if you can't measure or estimate with equations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It appears that kinetic and potential energy both start and end at zero in your scenario. So all energy expenditure is from losses. If you make a list of your losses you will see by looking at the variables which ones are influenced by a motion profile and which are not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Air friction and wheel contact friction are only some of the losses and whether they are significant depends. You need to list the equations, assumptions, and estimates of physical parameters you are using.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a hint, battery internal losses, motor losses, gear losses and motor driver switching losses all are potentially significant depending on the size of your vehicle, the technology used, and the operating environment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This can be solved mathematically or experimentally. Experimental requires less math but takes a lot longer to do. (In truth, a mathematical  approach would end with experimental validation but take less time because your experiments would start closer to the solution). I'll expand this answer if you add details on your own progress towards a solution. &lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2018-02-21T22:26:22.253" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15243" PostTypeId="2" ParentId="15240" CreationDate="2018-02-21T22:54:38.623" Score="1" Body="&lt;p&gt;To paraphrase your question, you are using &quot;bang-bang&quot; control to keep the velocity of your vehicle within a desired range, and want to know if there is a better way to minimize energy consumption per distance traveled. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The answer is almost definitely &quot;yes,&quot; with one exception: IF $v_{min}$ and $v_{max}$ values are very close together, and IF the system contains sufficient damping so that the velocity does not overshoot the target $v$, and IF the bang-bang controller is implemented efficiently, and IF the target $v$ is at the most efficient operating point for your vehicle, then no, there would likely not be a more efficient algorithm.  But all of these conditions are probably not true.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To implement a controller that minimizes energy consumption, you really need to know the efficiency of your vehicle for the universe of operating conditions the vehicle will be subjected to.  I would map this out (experimentally or algorithmically, as @hauptmech describes), then determine the optimal operating points.  Since your vehicle probably starts from rest, you will need to integrate the energy used for various acceleration profiles when speeding up to the desired operating point in order to reduce losses at the beginning of travel, then use the optimal acceleration profile to define the velocity setpoints for the controller during a journey.  Repeat this for the deceleration period when ending a journey.  Finally, the system stability (or its ability to remain at a target $v$ over time) will determine whether or not you need to implement a more advanced controller than bang-bang.  I would start with a proportional-plus-derivative controller attempting to servo around a specific velocity target, rather than a velocity range as you have implemented.  That way you can minimize the variance from the target $v$ without allowing it to vary by an arbitrary amount. &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2018-02-21T22:54:38.623" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15246" PostTypeId="2" ParentId="15009" CreationDate="2018-02-22T19:46:34.753" Score="2" Body="&lt;p&gt;First of all, well done on getting your robot to balance! If you’ve got this far the rest should be easy.&#xA;A cascading PI loop (no D) works very well for this. You have an outer loop to control the speed and an inner loop to control the stability. In the outer PI loop, you set the speed and the necessary angle is calculated (hint: angular velocity can be calculated simply from the conversion of PE to KE). This is then passed down as the angle set point for the inner PI loop. This is what has been used &lt;a href=&quot;https://www.youtube.com/watch?v=7mCBIxrTiH4&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. I hope this helps.&lt;/p&gt;&#xA;" OwnerUserId="19685" LastActivityDate="2018-02-22T19:46:34.753" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15247" PostTypeId="1" CreationDate="2018-02-22T21:17:42.447" Score="0" ViewCount="147" Body="&lt;p&gt;I recently built a quadcopter and programmed a code to stabilise itself.&#xA;The copter takes the hight from a distancesensors and the angle from a MPU 6050 gyro and accelerometer with a complementary filter.&#xA;I currently face two Problems: &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Altough the MPU 6050 is mounted to a vibrationabsorbing platform the angle is really bad. Some ideas to lessen the vibrations would be good.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The program never worked satisfactionally: I check every Milisecond, if the Copter is stabilised and at the right height or not. If not it spinns up the motors to correct. This should start the drone and let it hover at a certain height. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;However, is the drone starting up well but shortly before take-off one side tilts up at an angle of apprximately 45° and the drone drifts of. The program could never compensate this. &#xA;Have you an idea? Or some other thoughts. (This is my first electrical Project so very basic stuff could be wrong)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks for your help.&lt;/p&gt;&#xA;" OwnerUserId="19686" LastActivityDate="2020-12-10T08:00:50.113" Title="Quadcopter stabilisation" Tags="&lt;quadcopter&gt;&lt;gyroscope&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15248" PostTypeId="1" CreationDate="2018-02-23T05:04:32.423" Score="3" ViewCount="602" Body="&lt;p&gt;I'm using an MPU6050 for a custom flight controller and I am facing an issue when reading the values from the IMU. The data shown below represents the angular velocity in the y-axis. When the angular velocity is increasing or decreasing the overall trend seems to be increasing/decreasing but there are random drops to 0 degrees / second. The end goal is to read from the accelerometer and gyroscope and calculate the current angular position of the device but the inconsistent data may produce garbage angles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The data below is taken when I am rotating the MPU6050 about its x-axis. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this behaviour normal for a gyroscope or am I doing something wrong. If this is normal, is there a filter that I can apply to get more accurate values?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MPU6050 Datasheet: &lt;a href=&quot;https://www.invensense.com/wp-content/uploads/2015/02/MPU-6000-Datasheet1.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.invensense.com/wp-content/uploads/2015/02/MPU-6000-Datasheet1.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MPU6050 Register Map: &lt;a href=&quot;https://www.invensense.com/wp-content/uploads/2015/02/MPU-6000-Register-Map1.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.invensense.com/wp-content/uploads/2015/02/MPU-6000-Register-Map1.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Specs:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Clock speed: 16MHz internal&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Communication: I2C (100KHz)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MCU: Nucleo 64 STM32f446RE&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Data:&lt;/strong&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/FadGb.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FadGb.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Sample of Data&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#    DPS&#xA;223 -6.442748&#xA;224 -2.076336&#xA;225 0.732824&#xA;226 1.664122&#xA;227 1.832061&#xA;228 -1.740458&#xA;229 -0.549618&#xA;230 5.679389&#xA;231 8.351145&#xA;232 -0.442748&#xA;233 12.045801&#xA;234 15.78626&#xA;235 19.725191&#xA;236 28.106871&#xA;237 -0.473282&#xA;238 31.709925&#xA;239 31.450382&#xA;240 -0.70229&#xA;241 -1.526718&#xA;242 29.007633&#xA;243 -1.862595&#xA;244 32.152672&#xA;245 -0.580153&#xA;246 -1.725191&#xA;247 40.229008&#xA;248 -0.687023&#xA;249 -1.587786&#xA;250 48.580154&#xA;251 51.61832&#xA;252 -0.381679&#xA;253 -0.183206&#xA;254 63.343513&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Code:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;while (1){&#xA;    MPU_config();&#xA;    MPU_getData();&#xA;}&#xA;&#xA;void MPU_config(){&#xA;    //turns off SLEEP and CYCLE mode (register 0x6B)&#xA;    i2c_txData = 0x0;&#xA;    HAL_I2C_Mem_Write(&amp;amp;hi2c1,i2c_devAddr,&#xA;    (uint16_t)PWR_MGMT_1,1,&amp;amp;i2c_txData,1,HAL_MAX_DELAY);&#xA;    // Gyro Configuration register (0x1B)&#xA;    i2c_txData = 0x08; // fullscale +-500dps (0x08)&#xA;    HAL_I2C_Mem_Write(&amp;amp;hi2c1,i2c_devAddr,&#xA;    (uint16_t)GYRO_CONFIG,1,&amp;amp;i2c_txData,1,HAL_MAX_DELAY);&#xA;    // Accelerometer Configuration (0x1C)&#xA;    i2c_txData = 0x08; // fullscale +-4g&#xA;    HAL_I2C_Mem_Write(&amp;amp;hi2c1,i2c_devAddr,&#xA;    (uint16_t)ACCEL_CONFIG,1,&amp;amp;i2c_txData,1,HAL_MAX_DELAY);&#xA;}&#xA;&#xA;void MPU_getData(){&#xA;    uint8_t ugyrox_h=0, ugyrox_l=0;&#xA;    signed char gyrox_h=0, gyrox_l=0;&#xA;&#xA;    //0x0064 (100) random delay value&#xA;   HAL_I2C_Mem_Read(&amp;amp;hi2c1,i2c_devAddr|0x1,GYRO_XOUT_H,1,&amp;amp;ugyrox_h,1,0x0064);&#xA;   HAL_I2C_Mem_Read(&amp;amp;hi2c1,i2c_devAddr|0x1,GYRO_XOUT_L,1,&amp;amp;ugyrox_l,1,0x0064);&#xA;&#xA;    // gyro data in MPU is in 2s complement&#xA;    gyrox_h = (signed char) ugyrox_h;&#xA;    gyrox_l = (signed char) ugyrox_l;&#xA;&#xA;    //gyro_500 = 1.0f/65.5f (gyro_sensitivity: 500dps)&#xA;    gyroData = ((float) ((gyrox_h&amp;lt;&amp;lt;8) | gyrox_l))*gyro_500;&#xA;&#xA;    printf(&quot;%x \t %x \t %f \n &quot;,gyrox_h,gyrox_l,gyroData);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Gyro Configuration&lt;/strong&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/QMcg4.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QMcg4.png&quot; alt=&quot;14/46 of register map document&quot;&gt;&lt;/a&gt;&#xA;FS_SEL = 1, for 500dps (page 14 of register map PDF)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sensitivity factor is 65.5, &quot;gyro_500&quot; is 1/65.5 in the code (page 12 of datasheet)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/kCp5h.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kCp5h.png&quot; alt=&quot;Page 12/52 of datasheet&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19688" LastActivityDate="2018-05-25T02:41:16.727" Title="MPU6050 inconsistent Gyro data" Tags="&lt;quadcopter&gt;&lt;pid&gt;&lt;imu&gt;&lt;gyroscope&gt;&lt;i2c&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15252" PostTypeId="2" ParentId="15247" CreationDate="2018-02-23T22:38:00.847" Score="1" Body="&lt;p&gt;It sounds like your control system is too basic for the task. Are you just firing up the motors if there is error? That is too simplistic. You should start by implementing PID control, that is not even too complicated, especially since you are using the mpu6050 where you can just read angles without doing sensor fusion yourself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding the sensor: is the angle so much better without motors on? You might try calibrating the sensor:&#xA;&lt;a href=&quot;https://github.com/kkpoon/CalibrateMPU6050&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/kkpoon/CalibrateMPU6050&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will later need to read not only the angles but also the angular rate from your sensor. A function for that can be found in Joop Brokkings flight controller, or in mine (although I do not use the mpu6050 anymore).&#xA;I am just finishing my own controller, first test flight I hope soon. If you want to see it: &lt;a href=&quot;https://github.com/barafael/raPID&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/barafael/raPID&lt;/a&gt;&#xA;There is also a blog post linked in the readme where I try to keep an up to date description of my system.&#xA;Feel free to ask questions here or to me in case you get stuck. Good luck!&lt;/p&gt;&#xA;" OwnerUserId="18709" LastActivityDate="2018-02-23T22:38:00.847" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15254" PostTypeId="1" CreationDate="2018-02-23T22:57:15.777" Score="2" ViewCount="548" Body="&lt;p&gt;there is a lot of information out there on how to tune quad PID parameters. However, they mostly regard only the master loop that takes user input and fused absolute angles. How and in which order do I tune my cascaded PID loops? Do I first do the rate loop? How can I tell if it's tuned correctly? I can cause it to spin the drone 2 times a second around itself, and that with low throttle. It stops quickly when I reset the stick position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I feel stupid because I cannot tune the controller I built myself, but maybe you can explain it to me.&lt;/p&gt;&#xA;" OwnerUserId="18709" LastEditorUserId="37" LastEditDate="2018-02-26T16:12:50.153" LastActivityDate="2018-08-09T11:01:15.990" Title="How do I tune the cascaded PID controller in my flight controller?" Tags="&lt;quadcopter&gt;&lt;flight-controller&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15255" PostTypeId="2" ParentId="15248" CreationDate="2018-02-24T01:14:38.050" Score="1" Body="&lt;p&gt;So I found a way around the issue by filtering the data. Since there are random dips to 0, I replace a 0 with the previous value which was valid. This works out since it is safe to assume that the actual value when the gyro outputted 0 was close to the previous value which was valid. So its more accurate to keep that previous value instead of using 0.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition to this, I also used the average of the last 15 samples of data as the output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Code:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need to clean up the code, but here it is...&#xA;WINDOW_SIZE is set to 15 for the graph below&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void MPU_getData(){&#xA;    uint8_t ugyrox_h=0, ugyrox_l=0, i;&#xA;    signed char gyrox_h=0, gyrox_l=0;&#xA;    int16_t tot=0;&#xA;&#xA;    if(run == WINDOW_SIZE) run = 0;&#xA;&#xA;    //0x0064 (100) random delay value&#xA;&#xA;    HAL_I2C_Mem_Read(&amp;amp;hi2c1,i2c_devAddr|0x1,GYRO_XOUT_H,1,&amp;amp;ugyrox_h,1,0x0064);&#xA;&#xA;  HAL_I2C_Mem_Read(&amp;amp;hi2c1,i2c_devAddr|0x1,GYRO_XOUT_L,1,&amp;amp;ugyrox_l,1,0x0064);&#xA;&#xA;    // gyro data in MPU is in 2s complement&#xA;    gyrox_h = (signed char) ugyrox_h;&#xA;    gyrox_l = (signed char) ugyrox_l;&#xA;&#xA;    //gyro_500 = 1.0f/65.5f (gyro_sensitivity: 500dps)&#xA;    gyroData = ((float) ((gyrox_h&amp;lt;&amp;lt;8) | gyrox_l))*gyro_2000;&#xA;&#xA;    if( (gyroData &amp;lt; 2) &amp;amp;&amp;amp; (gyroData &amp;gt; -2) ){&#xA;        gyroData = prevGyro;&#xA;    }&#xA;&#xA;    window[run] = (int)gyroData;&#xA;&#xA;    for(i=0; i&amp;lt;WINDOW_SIZE; i++){&#xA;        tot += window[i];&#xA;    }&#xA;&#xA;    ++run;&#xA;    prevGyro = gyroData;&#xA;    printf(&quot;%x \t %x \t %d \n &quot;,gyrox_h,gyrox_l,(tot/WINDOW_SIZE));&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Data:&lt;/strong&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/YUz1C.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/YUz1C.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19688" LastActivityDate="2018-02-24T01:14:38.050" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15258" PostTypeId="1" CreationDate="2018-02-26T03:45:37.647" Score="2" ViewCount="435" Body="&lt;p&gt;I am going through different texts (Spong &lt;em&gt;&lt;a href=&quot;http://home.deib.polimi.it/gini/robot/docs/spong.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Robot Modeling and Control&lt;/a&gt;&lt;/em&gt;, Murray &lt;em&gt;&lt;a href=&quot;http://www.ece.ust.hk/~atc/files/mls94-complete.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mathematical Introduction to Robotic Manipulations&lt;/a&gt;&lt;/em&gt;) and I am seeing different Jacobians developed for the same RRRP Manipulator (the SCARA). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My misunderstanding is similar as presented &lt;a href=&quot;https://robotics.stackexchange.com/questions/8940/robotic-manipulator-jacobian-by-product-of-exponentials&quot;&gt;in this question &lt;/a&gt;. Overall, I am trying to develop the forward kinematics and Jacobian for the SCARA robot using exponentials of twists to test my knowledge but keep coming to different conclusions. I have found in Peter Corke's &lt;em&gt;Robotics, Vision and Control&lt;/em&gt; this statement: &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;...compared to the Jacobian of Sect.8.1, these Jacobians give the velocity of the end effector as a &lt;em&gt;velocity twist&lt;/em&gt;, not a spatial velocity  as defined on page 65. To obtain the Jacobian as described in Sect.8.1, we must apply the transformation...&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;$J^0 = \begin{bmatrix} I_{3x3} &amp;amp; -[t_{E}^0]_x \\ 0_{3x3} &amp;amp; I_{3x3} \end{bmatrix} J^V_0$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can get to Murrays:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Y2u4s.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Y2u4s.png&quot; width=&quot;500&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I am trying to get to Spong's Jacobian:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/dbxq9.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dbxq9.png&quot; width=&quot;500&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help/clarification would be greatly appreciated!&lt;/p&gt;&#xA;" OwnerUserId="19716" LastEditorUserId="10414" LastEditDate="2021-01-25T16:21:59.153" LastActivityDate="2021-01-25T16:21:59.153" Title="Developing world-frame Jacobian using product of exponentials" Tags="&lt;robotic-arm&gt;&lt;manipulator&gt;&lt;jacobian&gt;&lt;product-of-exponentials&gt;&lt;screw-theory&gt;" AnswerCount="0" CommentCount="3" ClosedDate="2018-02-26T16:11:24.993" ContentLicense="CC BY-SA 3.0" />
  <row Id="15260" PostTypeId="2" ParentId="9642" CreationDate="2018-02-26T12:29:42.587" Score="3" Body="&lt;p&gt;Holonomic constraints are constraints that can be expressed in the form of an equation relating the coordinate of the system and time&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Non-holonomic are constraints that cannot be expressed in the form of equations but it is expressed in the form of inequality. &lt;/p&gt;&#xA;" OwnerUserId="19721" LastActivityDate="2018-02-26T12:29:42.587" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15261" PostTypeId="2" ParentId="15254" CreationDate="2018-02-26T14:54:21.420" Score="2" Body="&lt;p&gt;In general, a cascade controller is nothing more than two independent controllers in series. With independent I mean that they do not intend to control the same value (= measurment, plant output). I.e. One controls the rate and the other  the position (or what ever is the case in your specific issue). Nevertheless, you still have only one output from both the controller combined to stabilize both values of interest.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore you have to identify how the input to the plant $u_f$ - i.e. the output of the controllers - influence the outputs ($y_s$ and $y_f$!) of the plant. If you have a ruff idea about the crossover frequencies of these individual systems ($u_f \rightarrow y_f$ and $u_f \rightarrow y_s$) you can separate them into one fast and one slow subsystem. For example, you should have a look at the poles of both subsystems. The pole of the fast and slow system have to be different from each other, i.e.:&#xA;$$&#xA;\pi_{s,slowest} \neq \pi_{f,slowest}&#xA;$$&#xA;Otherwise you won't be able to tune the controllers individually!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Take this chart as a reference. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/f8h1j.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/f8h1j.png&quot; alt=&quot;Cascaded Control Loop with fast and slow controller&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;TUNE FAST CONTROLLER&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if you have identified your faster subsystem - i.e. the value that response faster to input changes - you can start tuning the corresponding controller (Fast controller $C_f$) with the help of the 'fast output' $y_f$. This can be done with the common methods like Ziegler-Nichols or whatever other P(ID) tuning method you prefer (best practice is to leave the integrator part - it only reduces the bandwidth of the controller - for this controller and use P(D) at most but this depends strongly on your system).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;TUNE SLOW CONTROLLER&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now you have to shape the outer, 'slower' controller $C_s$. For that you have to have a look at the combined closed loop system of the fast control system you just tuned. I.e:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;P_s = \frac{P\cdot C_f}{1+P\cdot C_f}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$P_s$ is your new plant. Therefore, you tune your controller on the basis of $P_s$, $r_s$ and $y_s$ as you know it. Here a PI(D) controller is recommended.&lt;/p&gt;&#xA;" OwnerUserId="19722" LastEditorUserId="19722" LastEditDate="2018-02-26T15:16:52.190" LastActivityDate="2018-02-26T15:16:52.190" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="15264" PostTypeId="1" AcceptedAnswerId="15452" CreationDate="2018-02-26T22:49:41.543" Score="3" ViewCount="2570" Body="&lt;p&gt;I have a sensor (3 axis gyroscope) which can rotate and measure angular velocity in 3 dimensions (aligned with the sensor).&#xA;I know what its current orientation is with respect to the world frame. Call this quaternion qs.&#xA;I take a reading from my gyroscope and integrate it to give me a rotation in the sensor frame. Call this quaternion qr.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I now want to apply the rotation qr to the current orientation qs to obtain the new orientation, qs'.&#xA;But I cannot use qr directly as it describes a rotation in the sensor body frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need to transform my rotation quaternion into the world frame, and then I could just apply it to the orientation i.e. qs' = qs * qr_world.&#xA;But I am really struggling to understand how I can perform this transformation qr -&gt; qr_world.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does this even make sense? I wonder if I have fundamentally misunderstood some concepts here. If it does make sense, then I am specifically interested in understanding how to do this using quaternion operations (if that is possible) rather than rotation matrices or euler angles.&lt;/p&gt;&#xA;" OwnerUserId="15397" LastEditorUserId="15397" LastEditDate="2018-02-27T09:30:42.160" LastActivityDate="2018-04-06T03:45:47.890" Title="How to rotate a rotation quaternion in the body frame to a rotation quaternion in the world frame?" Tags="&lt;rotation&gt;&lt;frame&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="15265" PostTypeId="1" CreationDate="2018-02-27T04:48:14.257" Score="4" ViewCount="1897" Body="&lt;p&gt;I am setting up a Gazebo model for use with the navigation stack. I have been reading the &lt;a href=&quot;http://wiki.ros.org/navigation/Tutorials/Navigation%20Tuning%20Guide&quot; rel=&quot;nofollow noreferrer&quot;&gt;Navigation Tuning Guide&lt;/a&gt; and am confused about the lidar data in the odom frame. I would think that the tuning guide, when it says: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;The first test checks how reasonable the odometry is for rotation. I open up rviz, set the frame to &quot;odom,&quot; display the laser scan the robot provides, set the decay time on that topic high (something like 20 seconds), and perform an in-place rotation. Then, I look at how closely the scans match each other on subsequent rotations. Ideally, the scans will fall right on top of each other, but some rotational drift is expected, so I just make sure that the scans aren't off by more than a degree or two. (Nav Stack Tuning)&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;it means that the lidar data is supposed to be in approximately the same place before, during, and after the rotation. I have been reading and it seems that these sweeping swirls that I see are correct? I have been trying to use gmapping in my simulation and whenever I rotate the map gets horridly disfigured - I believe that odometry is to blame. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://drive.google.com/file/d/1z3rb6I0C6nPDrHgPm-Hg_OowKA_BopIG/view?usp=sharing&quot; rel=&quot;nofollow noreferrer&quot;&gt;I have recorded what the lidar data looks like in the odom frame&lt;/a&gt;. Is this correct or should it look differently?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I followed &lt;a href=&quot;http://wiki.ros.org/urdf/Tutorials&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; tutorial to build the initial model and simulate it. I created a (visually) crude model with two wheels (left and right) that move and two frictionless casters (front and back) using their general framework. I changed the shape of the robot but just followed their procedure and tried to reproduce it. I have tried to flip the x rotation for the left and right wheels from -pi/2 to pi/2 and that just reversed the direction of motion, which I expected, but does not change the issue of streaky lidar from the odom frame. I am puzzled because the straight odometry data keeps the laser scans in the same position (as one would expect) but when I rotate the robot I get the streaks. I don't really know the mechanism behind calculating the odometry data in Gazebo so I am stuck as to fixing this issue. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The urdf file is shown:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot;?&amp;gt;&#xA;&amp;lt;robot name=&quot;bender&quot; xmlns:xacro=&quot;http://ros.org/wiki/xacro&quot;&amp;gt;&#xA;&#xA;    &amp;lt;xacro:property name=&quot;pi&quot; value=&quot;3.141592653589794&quot; /&amp;gt;&#xA;    &amp;lt;xacro:property name=&quot;base_len&quot; value=&quot;0.89&quot; /&amp;gt;&#xA;    &amp;lt;xacro:property name=&quot;base_wid&quot; value=&quot;0.80&quot; /&amp;gt;&#xA;    &amp;lt;xacro:property name=&quot;base_height&quot; value=&quot;0.20&quot; /&amp;gt;&#xA;    &amp;lt;xacro:property name=&quot;caster_length&quot; value=&quot;0.10&quot; /&amp;gt;&#xA;    &amp;lt;xacro:property name=&quot;caster_radius&quot; value=&quot;0.15&quot; /&amp;gt;&#xA;    &amp;lt;xacro:property name=&quot;wheel_length&quot; value=&quot;0.10&quot; /&amp;gt;&#xA;    &amp;lt;xacro:property name=&quot;wheel_radius&quot; value=&quot;0.15&quot; /&amp;gt;&#xA;    &amp;lt;xacro:property name=&quot;update_rate&quot; value=&quot;50&quot;/&amp;gt;&#xA;    &amp;lt;xacro:property name=&quot;hokuyo_size&quot; value=&quot;0.05&quot;/&amp;gt;&#xA;&#xA;    &amp;lt;xacro:macro name=&quot;default_inertial&quot; params=&quot;mass&quot;&amp;gt;&#xA;        &amp;lt;inertial&amp;gt;&#xA;          &amp;lt;mass value=&quot;${mass}&quot; /&amp;gt;&#xA;          &amp;lt;inertia ixx=&quot;1.0&quot; ixy=&quot;0.0&quot; ixz=&quot;0.0&quot; iyy=&quot;1.0&quot; iyz=&quot;0.0&quot; izz=&quot;1.0&quot; /&amp;gt;&#xA;        &amp;lt;/inertial&amp;gt;&#xA;    &amp;lt;/xacro:macro&amp;gt;&#xA;&#xA;&#xA;    &amp;lt;material name=&quot;white&quot;&amp;gt;&#xA;       &amp;lt;color rgba=&quot;1 1 1 1.5&quot;/&amp;gt;&#xA;    &amp;lt;/material&amp;gt;&#xA;&#xA;&#xA;    &amp;lt;link name=&quot;base_link&quot;&amp;gt;&#xA;        &amp;lt;visual&amp;gt;&#xA;          &amp;lt;geometry&amp;gt;&#xA;            &amp;lt;box size=&quot;${base_len} ${base_wid} ${base_height}&quot;/&amp;gt;&#xA;          &amp;lt;/geometry&amp;gt;&#xA;          &amp;lt;material name=&quot;white&quot;/&amp;gt;&#xA;        &amp;lt;/visual&amp;gt;&#xA;        &amp;lt;collision&amp;gt;&#xA;            &amp;lt;geometry&amp;gt;&#xA;              &amp;lt;box size=&quot;${base_len} ${base_wid} ${base_height}&quot;/&amp;gt;&#xA;            &amp;lt;/geometry&amp;gt;&#xA;        &amp;lt;/collision&amp;gt;&#xA;        &amp;lt;xacro:default_inertial mass=&quot;1&quot;/&amp;gt;&#xA;    &amp;lt;/link&amp;gt;&#xA;&#xA;&#xA;    &amp;lt;xacro:macro name=&quot;caster&quot; params=&quot;position reflect&quot;&amp;gt;&#xA;        &amp;lt;joint name=&quot;${position}_wheel_joint&quot; type=&quot;fixed&quot;&amp;gt;&#xA;            &amp;lt;parent link=&quot;base_link&quot;/&amp;gt;&#xA;            &amp;lt;child link=&quot;${position}_wheel&quot;/&amp;gt;&#xA;            &amp;lt;axis xyz=&quot;0 0 1&quot;/&amp;gt;&#xA;            &amp;lt;origin xyz=&quot;${reflect*(base_wid/2)} 0 ${-1 * base_height}&quot; rpy=&quot;${pi/2} 0 0&quot;/&amp;gt;&#xA;        &amp;lt;/joint&amp;gt;&#xA;        &amp;lt;link name=&quot;${position}_wheel&quot;&amp;gt;&#xA;            &amp;lt;visual&amp;gt;&#xA;                &amp;lt;geometry&amp;gt;&#xA;                    &amp;lt;sphere radius=&quot;${caster_radius}&quot;/&amp;gt;&#xA;                &amp;lt;/geometry&amp;gt;&#xA;                &amp;lt;material name=&quot;white&quot;/&amp;gt;&#xA;            &amp;lt;/visual&amp;gt;&#xA;            &amp;lt;collision&amp;gt;&#xA;                &amp;lt;geometry&amp;gt;&#xA;                  &amp;lt;sphere radius=&quot;${caster_radius}&quot;/&amp;gt;&#xA;                &amp;lt;/geometry&amp;gt;&#xA;            &amp;lt;/collision&amp;gt;&#xA;            &amp;lt;xacro:default_inertial mass=&quot;0.5&quot;/&amp;gt;&#xA;        &amp;lt;/link&amp;gt;&#xA;&#xA;&amp;lt;!-- This block provides the simulator (Gazebo) with information on a few additional&#xA;physical properties. See http://gazebosim.org/tutorials/?tut=ros_urdf for more--&amp;gt;&#xA;        &amp;lt;gazebo reference=&quot;${position}_wheel&quot;&amp;gt;&#xA;            &amp;lt;mu1 value = &quot;0.0&quot;/&amp;gt;&#xA;            &amp;lt;mu2 value = &quot;0.0&quot;/&amp;gt;&#xA;            &amp;lt;kp  value = &quot;10000000.0&quot;/&amp;gt;&#xA;            &amp;lt;kd  value = &quot;1.0&quot;/&amp;gt;&#xA;            &amp;lt;material&amp;gt;Gazebo/Grey/&amp;lt;/material&amp;gt;&#xA;        &amp;lt;/gazebo&amp;gt;&#xA;    &amp;lt;/xacro:macro&amp;gt;&#xA;&#xA;    &amp;lt;xacro:macro name=&quot;wheel&quot; params=&quot;position reflect&quot;&amp;gt;&#xA;        &amp;lt;joint name=&quot;${position}_wheel_joint&quot; type=&quot;continuous&quot;&amp;gt;&#xA;            &amp;lt;parent link=&quot;base_link&quot;/&amp;gt;&#xA;            &amp;lt;child link=&quot;${position}_wheel&quot;/&amp;gt;&#xA;            &amp;lt;axis xyz=&quot;0 0 1&quot;/&amp;gt;&#xA;            &amp;lt;origin xyz=&quot;0 ${reflect*(base_wid/2)} ${-1*base_height}&quot; rpy=&quot;${-pi/2} 0 0&quot;/&amp;gt;&#xA;        &amp;lt;/joint&amp;gt;&#xA;        &amp;lt;link name=&quot;${position}_wheel&quot;&amp;gt;&#xA;            &amp;lt;visual&amp;gt;&#xA;                &amp;lt;geometry&amp;gt;&#xA;                    &amp;lt;cylinder length = &quot;${wheel_length}&quot; radius=&quot;${wheel_radius}&quot;/&amp;gt;&#xA;                &amp;lt;/geometry&amp;gt;&#xA;                &amp;lt;material name=&quot;white&quot;/&amp;gt;&#xA;            &amp;lt;/visual&amp;gt;&#xA;            &amp;lt;collision&amp;gt;&#xA;                &amp;lt;geometry&amp;gt;&#xA;                  &amp;lt;cylinder length = &quot;${wheel_length}&quot; radius=&quot;${wheel_radius}&quot;/&amp;gt;&#xA;                &amp;lt;/geometry&amp;gt;&#xA;            &amp;lt;/collision&amp;gt;&#xA;            &amp;lt;xacro:default_inertial mass=&quot;0.5&quot;/&amp;gt;&#xA;        &amp;lt;/link&amp;gt;&#xA;&#xA;&amp;lt;!-- This block provides the simulator (Gazebo) with information on a few additional&#xA;physical properties. See http://gazebosim.org/tutorials/?tut=ros_urdf for more--&amp;gt;&#xA;        &amp;lt;gazebo reference=&quot;${position}_wheel&quot;&amp;gt;&#xA;            &amp;lt;mu1 value = &quot;200.0&quot;/&amp;gt;&#xA;            &amp;lt;mu2 value = &quot;100.0&quot;/&amp;gt;&#xA;            &amp;lt;kp value=&quot;1000000.0&quot; /&amp;gt;&#xA;            &amp;lt;kd value=&quot;1.0&quot; /&amp;gt;&#xA;            &amp;lt;fdir1 value=&quot;1 0 0&quot;/&amp;gt;&#xA;            &amp;lt;material&amp;gt;Gazebo/Grey/&amp;lt;/material&amp;gt;&#xA;        &amp;lt;/gazebo&amp;gt;&#xA;&#xA;&amp;lt;!-- This block connects the wheel joint to an actuator (motor), which informs both&#xA;   simulation and visualization of the robot --&amp;gt;&#xA;       &amp;lt;transmission name=&quot;${position}_wheel_trans&quot;&amp;gt;&#xA;        &amp;lt;type&amp;gt;transmission_interface/SimpleTransmission&amp;lt;/type&amp;gt;&#xA;             &amp;lt;actuator name=&quot;${position}_wheel_motor&quot;&amp;gt;&#xA;                  &amp;lt;mechanicalReduction&amp;gt;1&amp;lt;/mechanicalReduction&amp;gt;&#xA;             &amp;lt;/actuator&amp;gt;&#xA;         &amp;lt;joint name=&quot;${position}_wheel_joint&quot;&amp;gt;&#xA;              &amp;lt;hardwareInterface&amp;gt;hardware_interface/VelocityJointInterface&amp;lt;/hardwareInterface&amp;gt;&#xA;         &amp;lt;/joint&amp;gt;&#xA;        &amp;lt;/transmission&amp;gt;&#xA;    &amp;lt;/xacro:macro&amp;gt;&#xA;&#xA;&amp;lt;!-- Creating the actual robot --&amp;gt;&#xA;&#xA;    &amp;lt;xacro:caster position=&quot;front&quot; reflect=&quot;1&quot;/&amp;gt;&#xA;    &amp;lt;xacro:caster position=&quot;back&quot;  reflect=&quot;-1&quot;/&amp;gt;&#xA;    &amp;lt;xacro:wheel  position=&quot;right&quot; reflect=&quot;1&quot;/&amp;gt;&#xA;    &amp;lt;xacro:wheel  position=&quot;left&quot;  reflect=&quot;-1&quot;/&amp;gt;&#xA;&#xA;&#xA; &amp;lt;!-- Gazebo plugin for ROS Control --&amp;gt;&#xA;&#xA;    &amp;lt;gazebo&amp;gt;&#xA;      &amp;lt;plugin name=&quot;gazebo_ros_control&quot; filename=&quot;libgazebo_ros_control.so&quot;&amp;gt;&#xA;        &amp;lt;robotNamespace&amp;gt;/&amp;lt;/robotNamespace&amp;gt;&#xA;      &amp;lt;/plugin&amp;gt;&#xA;    &amp;lt;/gazebo&amp;gt;&#xA;&#xA;&amp;lt;!-- Hokuyo Laser Senso --&amp;gt;&#xA;    &amp;lt;link name=&quot;hokuyo_link&quot;&amp;gt;&#xA;      &amp;lt;visual&amp;gt;&#xA;        &amp;lt;origin xyz=&quot;0 0 0&quot; rpy=&quot;0 0 0&quot; /&amp;gt;&#xA;        &amp;lt;geometry&amp;gt;&#xA;          &amp;lt;box size=&quot;${hokuyo_size} ${hokuyo_size} ${1.5*hokuyo_size}&quot;/&amp;gt;&#xA;        &amp;lt;/geometry&amp;gt;&#xA;        &amp;lt;material name=&quot;Blue&quot; /&amp;gt;&#xA;      &amp;lt;/visual&amp;gt;&#xA;    &amp;lt;/link&amp;gt;&#xA;    &amp;lt;joint name=&quot;hokuyo_joint&quot; type=&quot;fixed&quot;&amp;gt;&#xA;      &amp;lt;origin xyz=&quot;${base_wid/2} 0 ${base_height+hokuyo_size/4}&quot; rpy=&quot;0 0 0&quot; /&amp;gt;&#xA;      &amp;lt;parent link=&quot;base_link&quot;/&amp;gt;&#xA;      &amp;lt;child link=&quot;hokuyo_link&quot; /&amp;gt;&#xA;    &amp;lt;/joint&amp;gt;&#xA;    &amp;lt;gazebo reference=&quot;hokuyo_link&quot;&amp;gt;&#xA;      &amp;lt;material&amp;gt;Gazebo/Blue&amp;lt;/material&amp;gt;&#xA;      &amp;lt;turnGravityOff&amp;gt;false&amp;lt;/turnGravityOff&amp;gt;&#xA;      &amp;lt;sensor type=&quot;ray&quot; name=&quot;head_hokuyo_sensor&quot;&amp;gt;&#xA;        &amp;lt;pose&amp;gt;${hokuyo_size/2} 0 0 0 0 0&amp;lt;/pose&amp;gt;&#xA;        &amp;lt;visualize&amp;gt;false&amp;lt;/visualize&amp;gt;&#xA;        &amp;lt;update_rate&amp;gt;40&amp;lt;/update_rate&amp;gt;&#xA;        &amp;lt;ray&amp;gt;&#xA;          &amp;lt;scan&amp;gt;&#xA;            &amp;lt;horizontal&amp;gt;&#xA;              &amp;lt;samples&amp;gt;720&amp;lt;/samples&amp;gt;&#xA;              &amp;lt;resolution&amp;gt;1&amp;lt;/resolution&amp;gt;&#xA;              &amp;lt;min_angle&amp;gt;-1.570796&amp;lt;/min_angle&amp;gt;&#xA;              &amp;lt;max_angle&amp;gt;1.570796&amp;lt;/max_angle&amp;gt;&#xA;            &amp;lt;/horizontal&amp;gt;&#xA;          &amp;lt;/scan&amp;gt;&#xA;          &amp;lt;range&amp;gt;&#xA;            &amp;lt;min&amp;gt;0.10&amp;lt;/min&amp;gt;&#xA;            &amp;lt;max&amp;gt;10.0&amp;lt;/max&amp;gt;&#xA;            &amp;lt;resolution&amp;gt;0.001&amp;lt;/resolution&amp;gt;&#xA;          &amp;lt;/range&amp;gt;&#xA;        &amp;lt;/ray&amp;gt;&#xA;        &amp;lt;plugin name=&quot;gazebo_ros_head_hokuyo_controller&quot; filename=&quot;libgazebo_ros_laser.so&quot;&amp;gt;&#xA;          &amp;lt;topicName&amp;gt;/scan&amp;lt;/topicName&amp;gt;&#xA;          &amp;lt;frameName&amp;gt;hokuyo_link&amp;lt;/frameName&amp;gt;&#xA;        &amp;lt;/plugin&amp;gt;&#xA;      &amp;lt;/sensor&amp;gt;&#xA;    &amp;lt;/gazebo&amp;gt;&#xA;&#xA;&#xA;&amp;lt;/robot&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I set up my differential drive controller as shown in the tutorial, with my own values, here:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;type: &quot;diff_drive_controller/DiffDriveController&quot;&#xA;publish_rate: 50&#xA;&#xA;left_wheel: ['left_wheel_joint']&#xA;right_wheel: ['right_wheel_joint']&#xA;&#xA;&#xA;# Odometry covariances for the encoder output of the robot. These values should&#xA;# be tuned to your robot's sample odometry data, but these values are a good place&#xA;# to start&#xA;pose_covariance_diagonal : [0.001, 0.001, 1000000.0, 1000000.0, 1000000.0, 1000.0]&#xA;twist_covariance_diagonal: [0.001, 0.001, 1000000.0, 1000000.0, 1000000.0, 1000.0]&#xA;&#xA;# Wheel separation and radius multipliers&#xA;wheel_separation_multiplier: 1.0 # default: 1.0&#xA;wheel_radius_multiplier    : 1.0 # default: 1.0&#xA;&#xA;&#xA;&#xA;&#xA;# Top level frame (link) of the robot description&#xA;base_frame_id: base_link&#xA;&#xA;# Velocity and acceleration limits for the robot&#xA;# default min = -max&#xA;linear:&#xA;  x:&#xA;    has_velocity_limits    : true&#xA;    max_velocity           : 5.0   # m/s&#xA;    has_acceleration_limits: true&#xA;    max_acceleration       : 0.6   # m/s^2&#xA;angular:&#xA;  z:&#xA;    has_velocity_limits    : true&#xA;    max_velocity           : 1.0   # rad/s&#xA;    has_acceleration_limits: true&#xA;    max_acceleration       : 0.5 # rad/s^2&#xA;    has_jerk_limits        : true&#xA;    max_jerk               : 2.5  # rad/s^3&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I leave the wheel_separation and wheel_radius out because I wish for them to be generated automatically. I have put in different values, including what I think they are, and it does not change the streaking in lidar data when viewed from the odom frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have also posed the question &lt;a href=&quot;https://answers.ros.org/question/283794/odometry-in-place/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Edit:&#xA;I have compiled and ran code from the Book &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/1783554711&quot; rel=&quot;nofollow noreferrer&quot;&gt;ROS Robotics Projects&lt;/a&gt;. Chapter 9 &lt;a href=&quot;https://github.com/qboticslabs/ros_robotics_projects&quot; rel=&quot;nofollow noreferrer&quot;&gt;code&lt;/a&gt; has a simulated robot. I put fixed frame to odom and when I move forward there is 'streaking' in the x direction but not when I rotate. This makes sense to me but I am wondering why my simulated robot does not behave like this. &lt;/p&gt;&#xA;" OwnerUserId="19729" LastEditorUserId="19729" LastEditDate="2018-02-27T16:18:08.387" LastActivityDate="2019-09-17T11:39:46.937" Title="ROS Gazebo Odometry Issue" Tags="&lt;ros&gt;&lt;odometry&gt;&lt;lidar&gt;&lt;gazebo&gt;&lt;differential-drive&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15267" PostTypeId="1" CreationDate="2018-02-27T08:37:44.433" Score="1" ViewCount="95" Body="&lt;p&gt;I am using ros kinetic in ubuntu 16.04. My first error is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Traceback (most recent call last):&#xA;  File &quot;/opt/ros/kinetic/share/ros/core/rosbuild/bin/check_same_directories.py&quot;, line 46, in &amp;lt;module&amp;gt;&#xA;    raise Exception&#xA;Exception&#xA;&#xA;    CMake Error at /opt/ros/kinetic/share/ros/core/rosbuild/private.cmake:102 (message):&#xA;  [rosbuild] rospack found package &quot;controller-1&quot; at &quot;&quot;, but the current&#xA;  directory is &quot;/home/robot/rtt-exercises-2.7.0/controller-1&quot;.  You should&#xA;  double-check your ROS_PACKAGE_PATH to ensure that packages are found in the&#xA;  correct precedence order.&#xA;Call Stack (most recent call first):&#xA;  /opt/ros/kinetic/share/ros/core/rosbuild/public.cmake:177 (_rosbuild_check_package_location)&#xA;  CMakeLists.txt:24 (rosbuild_init)&#xA;&#xA;&#xA;-- Configuring incomplete, errors occurred!&#xA;See also &quot;/home/robot/rtt-exercises-2.7.0/controller-1/build/CMakeFiles/CMakeOutput.log&quot;.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So when i enter command &quot; export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:~/rtt-example/rtt_examples-rtt-2.0-examples/rtt-exercises/controller-1 &quot; than i'm getting below error:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Failed to invoke /opt/ros/kinetic/bin/rospack deps-manifests controller-1&#xA;[rospack] Error: package 'controller-1' depends on non-existent package 'rtt' and rosdep claims that it is not a system dependency. Check the ROS_PACKAGE_PATH or try calling 'rosdep update'&#xA;&#xA;&#xA;CMake Error at /opt/ros/kinetic/share/ros/core/rosbuild/public.cmake:129 (message):&#xA;&#xA;&#xA;  Failed to invoke rospack to get compile flags for package 'controller-1'.&#xA;&#xA;  Look above for errors from rospack itself.  Aborting.  Please fix the&#xA;  broken dependency!&#xA;&#xA;Call Stack (most recent call first):&#xA;  /opt/ros/kinetic/share/ros/core/rosbuild/public.cmake:207 (rosbuild_invoke_rospack)&#xA;  CMakeLists.txt:24 (rosbuild_init)&#xA;&#xA;&#xA;-- Configuring incomplete, errors occurred!&#xA;See also &quot;/home/robot/rtt-exercises-2.7.0/controller-1/build/CMakeFiles/CMakeOutput.log&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I have already installed the rtt-ros-integration package and orocos-toolchain package from source. And when i enter command &quot; source ~/ws/underlay_isolated/installd_isolated/setup.sh &quot; it again repeates the first error. So how should i solve this error. I was practicing the rtt-example package tutorial to learn orocos basics. This package is also avialabe in&lt;a href=&quot;https://people.mech.kuleuven.be/~orocos/pub/stable/examples/rtt/tutorial/&quot; rel=&quot;nofollow noreferrer&quot;&gt; [here&lt;/a&gt;:]  &lt;/p&gt;&#xA;" OwnerDisplayName="user14148" LastEditorDisplayName="user14148" LastEditDate="2018-03-02T11:23:41.477" LastActivityDate="2018-03-02T11:23:41.477" Title="rtt-exercise building error-orocos-toolchain" Tags="&lt;ros&gt;&lt;real-time&gt;" AnswerCount="0" CommentCount="3" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15268" PostTypeId="2" ParentId="15208" CreationDate="2018-02-27T16:23:07.233" Score="0" Body="&lt;p&gt;There is an &lt;a href=&quot;http://www.theconstructsim.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;online resource&lt;/a&gt; I have come across that is geared towards learning. It is a paid subscription and I have not personally used the online environment. I have used some of their tutorials and it seems helpful. &lt;/p&gt;&#xA;" OwnerUserId="19729" LastActivityDate="2018-02-27T16:23:07.233" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15269" PostTypeId="2" ParentId="15198" CreationDate="2018-02-27T16:25:16.267" Score="0" Body="&lt;p&gt;ROS Lunar would be geared towards that distro I believe. I ran into this issue and just rolled back to 16.04 and Kinetic.&lt;/p&gt;&#xA;" OwnerUserId="19729" LastActivityDate="2018-02-27T16:25:16.267" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15270" PostTypeId="1" CreationDate="2018-02-28T08:59:38.737" Score="4" ViewCount="157" Body="&lt;p&gt;StackExchange community!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need the guidance what to use for the generation sensor data in Matlab. My purpose is to optimize the exploration process of unknown environment using the multi-robot system. For that, I need to simulate the sonar sensor signals. The question is how to simulate them in Matlab? &#xA;I found &lt;a href=&quot;https://www.mathworks.com/help/phased/ref/sensorsig.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;sensorsig module&lt;/a&gt; in Phased Array System Toolbox and the link to use &lt;a href=&quot;https://www.mathworks.com/help/robotics/examples/work-with-specialized-ros-messages.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;specialized ROS messages&lt;/a&gt;. Maybe, do you know some other solutions? &#xA;The requirements to sensors are a) to know the frontier points b) to detect obstacles. The noise can be ignored. &lt;/p&gt;&#xA;" OwnerUserId="19467" LastActivityDate="2018-02-28T08:59:38.737" Title="Matlab: Simulate received signals of sonar sensors" Tags="&lt;matlab&gt;&lt;mapping&gt;&lt;sonar&gt;&lt;exploration&gt;" AnswerCount="0" CommentCount="4" ClosedDate="2019-06-11T18:56:43.107" ContentLicense="CC BY-SA 3.0" />
  <row Id="15271" PostTypeId="2" ParentId="14455" CreationDate="2018-02-28T10:29:40.370" Score="4" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Performance differences between using an embedded GPU vs. the cloud?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;For your context (to my mind, gesture recognition would ideally be realtime), the latency of going over the cloud would push me towards hardware. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Cost differences between using an embedded GPU vs. the cloud?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Depends on your volume. The cloud is not necessarily cheaper than hardware in the long run, although in some ways it's less headache especially in the short run. For gesture tracking, though, the latency would be too annoying to put up with forever.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What other smart cameras are doing (Nest, Lighthouse, etc.)?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If you're considering a Lighthouse - we use a lot of Realsense here, and find it quite satisfactory. Looking at getting one of the new ones any day now. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If there is an alternative better than the Jetson TX2 if going the embedded path?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I'm not sure it's the TX2 that's the problem - 3fps, what sensor are you using? The TX2 is a beast, and given a half-decent sensor (say, Realsense R200) you almost don't need one. That stated, have you looked into incorporating a Movidius? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;HTH.&lt;/p&gt;&#xA;" OwnerUserId="13222" LastActivityDate="2018-02-28T10:29:40.370" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15273" PostTypeId="1" AcceptedAnswerId="15828" CreationDate="2018-03-01T07:08:07.030" Score="1" ViewCount="333" Body="&lt;p&gt;I am building a quadcopter and I am on the last part of it (normally the exciting part) where I bind the controller to the receiver. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can get the receiver, which is plugged into the quadcopter, to be recognized by the controller. The problem is that I can't get the controller to rotate the propellers. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;When I touch the receiver it is hot.&lt;/strong&gt; Not just warm, but very hot. I replaced the receiver already since it looked like the heat was too much and melted something on it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Any thoughts as to why the receiver is so hot?&lt;/strong&gt; Maybe it's because I hooked something up incorrectly? Perhaps the heat is causing the controller not to turn the motors?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any thoughts or suggestions would be appreciated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;HARDWARE:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Controller - FlySky FS-i6&lt;/li&gt;&#xA;&lt;li&gt;Receiver - FS-iA6 (6 channels, 2.4 GHZ)&lt;/li&gt;&#xA;&lt;li&gt;Power Supply - Tattu R-Line 14.8V 1300mAh&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The board it connects to is using 5v.&lt;/p&gt;&#xA;" OwnerUserId="19752" LastEditorUserId="19752" LastEditDate="2018-03-04T07:18:40.417" LastActivityDate="2018-06-11T07:47:19.743" Title="Receiver is getting really hot" Tags="&lt;quadcopter&gt;&lt;flight-controller&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="15274" PostTypeId="2" ParentId="14785" CreationDate="2018-03-01T10:44:34.450" Score="3" Body="&lt;p&gt;Up till now, I am using the Euler angle representation but I have not been successful. After referring to the book &quot;Robotics Modelling, Planning and control&quot; by Bruno Siciliano form Springer publication. It is concluded that the Euler angle is only used for the manipulator having spherical wrist; the robot which doesn't have one need to use another representation i.e equivalent angle representation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The orientation error vector or error in orientation can be calculated by the equivalent angle representation or angle-axis representation (both are same) of orientation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If &lt;span class=&quot;math-container&quot;&gt;$R_d$&lt;/span&gt; denotes desired orientation matrix and &lt;span class=&quot;math-container&quot;&gt;$R_e$&lt;/span&gt; denotes rotation matrix computed form joint variables, then orientation error is calculated using &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$e_{O}=r \sin \vartheta$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where &lt;span class=&quot;math-container&quot;&gt;$r$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$v(nue)$&lt;/span&gt; can be calculated from matrix multiplication as&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$${R}(\vartheta, {r})={R}_{d} {R}_{e}^{T}({q})$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This gives the &lt;span class=&quot;math-container&quot;&gt;$3 \times 1$&lt;/span&gt; vector which is the orientation error about &lt;span class=&quot;math-container&quot;&gt;$X, Y, Z$&lt;/span&gt; axis.&#xA;For more information one can refer book I mention above.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;using equation&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$\begin{array}{l}{\vartheta=\cos ^{-1}\left(\frac{r_{11}+r_{22}+r_{33}-1}{2}\right)} \\ {r=\frac{1}{2 \sin \vartheta}\left[\begin{array}{l}{r_{32}-r_{23}} \\ {r_{13}-r_{31}} \\ {r_{21}-r_{12}}\end{array}\right]}\end{array}$$&lt;/span&gt;&lt;/p&gt;&#xA;" OwnerUserId="19034" LastEditorUserId="13314" LastEditDate="2019-11-29T17:11:28.050" LastActivityDate="2019-11-29T17:11:28.050" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15276" PostTypeId="2" ParentId="15171" CreationDate="2018-03-02T07:56:38.163" Score="0" Body="&lt;p&gt;I would recommend looking at acquiring an &lt;a href=&quot;https://github.com/intel-aero/meta-intel-aero/wiki/01-About-Intel-Aero&quot; rel=&quot;nofollow noreferrer&quot;&gt;Intel Aero RTF&lt;/a&gt; (Ready-to-Fly) drone, if your group can afford it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It ships with flight controller, etc. already set up, and the Realsense camera includes IR and depth.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will have to flash the firmware before you can really do much, but the git repo wiki holds your hand through this pretty reliably. and Intel's evangalist team is very responsive and dedicated. The default examples are pretty robust and informative and you can go from unboxing to basic autonomous flight and computer vision / machine learning just by walking through the wiki. Thanks to the Intel ecosystem, it supports some really neat advanced capabilities including the Movidius VPU, NVIDIA TX2, etc. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The most annoying thing we ran into was power supply; it ships &quot;batteries not included&quot; and also with no AC power adapter. Since it also uses a hard-to-find xt60 type connection, you'll have to order an XT60 to wall solution from Amazon separately. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;HTH.&lt;/p&gt;&#xA;" OwnerUserId="13222" LastActivityDate="2018-03-02T07:56:38.163" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15281" PostTypeId="1" CreationDate="2018-03-03T07:04:52.670" Score="0" ViewCount="568" Body="&lt;p&gt;I am not very experienced in working with C++. Working with Python is much more easier for me because of the large number of built-in mathematical functions present such as multidimensional array sorting and more. I went through the Udacity document on Motion Planning (Programming a Robotic Car) in Python and it seemed simple enough for me to implement. However, I would like to use the Arduino due to its simplicity and my need to interface other modules with it. Can someone suggest me an easier way or lead me to some resources that can help me code it in C++ for the Arduino? All the A* algorithm C++ source codes I've found online are either huge or difficult to understand. In my case, I'm planning to use a simple grid based implementation of the A* Algorithm. Thanks in advance.&lt;/p&gt;&#xA;" OwnerUserId="19453" LastActivityDate="2018-05-03T00:17:34.643" Title="Can the A* Algorithm be implemented on an Arduino easily?" Tags="&lt;mobile-robot&gt;&lt;arduino&gt;&lt;path-planning&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15282" PostTypeId="1" CreationDate="2018-03-03T13:42:05.847" Score="-3" ViewCount="35" Body="&lt;p&gt;I'm building a quadrotor robot and my supervisor has asked me to make a report of the IMU modules used in previous works, I couldn't find such reports however. Does anyone know how to find such reports or how to find out what modules they've used? It's really urgent. Thank you all.&lt;/p&gt;&#xA;" OwnerUserId="19719" LastActivityDate="2018-03-05T01:51:07.993" Title="Find IMU based on previous works" Tags="&lt;quadcopter&gt;&lt;imu&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2018-03-05T17:24:14.940" ContentLicense="CC BY-SA 3.0" />
  <row Id="15284" PostTypeId="2" ParentId="15281" CreationDate="2018-03-03T22:13:00.417" Score="2" Body="&lt;p&gt;You're welcome to steal the AStar class from my C++ highway driving project.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/ericlavigne/CarND-Path-Planning&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/ericlavigne/CarND-Path-Planning&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I used AStar to control a car driving on a simulated highway with traffic. In my case, state included position (along and across the highway), speed (along the highway), and time (which implicitly included the expected positions of other cars at that time). However, this AStar class supports any definition of state, including the more common case of position-only that you are interested in.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are the file that contains the AStar class:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/ericlavigne/CarND-Path-Planning/blob/master/src/astar.h&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/ericlavigne/CarND-Path-Planning/blob/master/src/astar.h&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'll need to represent the state in order to use the AStar class. As an example, here are the files that represented my state. Your state with position only should be a trimmed down version of this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/ericlavigne/CarND-Path-Planning/blob/master/src/trajectory_state.h&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/ericlavigne/CarND-Path-Planning/blob/master/src/trajectory_state.h&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/ericlavigne/CarND-Path-Planning/blob/master/src/trajectory_state.cpp&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/ericlavigne/CarND-Path-Planning/blob/master/src/trajectory_state.cpp&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And these files show how to combine the AStar class and a state class (TrajectoryState in my case) to perform A* optimization:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/ericlavigne/CarND-Path-Planning/blob/master/src/discrete_trajectory_planner.h&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/ericlavigne/CarND-Path-Planning/blob/master/src/discrete_trajectory_planner.h&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/ericlavigne/CarND-Path-Planning/blob/master/src/discrete_trajectory_planner.cpp&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/ericlavigne/CarND-Path-Planning/blob/master/src/discrete_trajectory_planner.cpp&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18316" LastActivityDate="2018-03-03T22:13:00.417" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15285" PostTypeId="2" ParentId="15282" CreationDate="2018-03-05T01:51:07.993" Score="1" Body="&lt;p&gt;In an academic setting, look for papers describing similar work to what you're doing, read them, and see if they mention the IMU used.  If they're describing how some hardware was used to accomplish some task, then they should include that information.&lt;/p&gt;&#xA;" OwnerUserId="1411" LastActivityDate="2018-03-05T01:51:07.993" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15286" PostTypeId="2" ParentId="15273" CreationDate="2018-03-05T01:55:35.180" Score="1" Body="&lt;p&gt;Either the voltage supply to the receiver is too high, or something's not right about what you're trying to drive it with.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Compare the voltage supply to the receiver to the rated voltage of the receiver.  If the receiver specifies a voltage range (i.e. 3V - 5.5V), then the supply needs to be within that range.  If the receiver doesn't specify  a range, then +/- 10% is probably an OK range to assume.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If that's OK, try disconnecting everything from the receiver except for power, and see if it gets hot.  If you have a spare servo lying around (and if the receiver will take a servo), plug it in and see if it works.&lt;/p&gt;&#xA;" OwnerUserId="1411" LastActivityDate="2018-03-05T01:55:35.180" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15287" PostTypeId="1" AcceptedAnswerId="15288" CreationDate="2018-03-05T16:12:31.097" Score="0" ViewCount="40" Body="&lt;p&gt;We're participating in a contest with our robot, and one of the challenges is to scan a pattern and see which pattern it is. There are 2 possible images(attached below), and for each of them the robot should place a cube in a specific place. We were thinking of using a colour sensor but that's not precise enough. The robot is wired to a smartphone, so we also thought of taking a picture of the pattern and making a java program to interpret it(that's what we've programmed the robot in), but we couldn't find any tutorials about that on the internet. So we will have 2 separate programs, and the only thing we can't work out is how to process an image so we can see which image we got and tell the robot to run the corresponding program. How could actually do this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The images of the only 2 possible patterns:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/qmA56.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qmA56.jpg&quot; alt=&quot;Pattern 1&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/dBDDe.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dBDDe.jpg&quot; alt=&quot;Pattern 2&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19790" LastActivityDate="2018-03-05T16:25:01.733" Title="How to scan photo of printed image and see what pattern it represents" Tags="&lt;automation&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15288" PostTypeId="2" ParentId="15287" CreationDate="2018-03-05T16:25:01.733" Score="0" Body="&lt;p&gt;A way to tackle this problem (which is very broad in essence) is to use OpenCV to detect the hexagonal shapes in the picture taken by your smartphone. Then, once you know the locations of the figures in the image, extract the color with OpenCV as well and check if certain cell is orange/black to identify one pattern or another (you must know the existent patterns in advance).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first link I provide is for shape detection with OpenCV in Python:&#xA;&lt;a href=&quot;https://www.pyimagesearch.com/2016/02/08/opencv-shape-detection/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.pyimagesearch.com/2016/02/08/opencv-shape-detection/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This one is for object detection in Java:&#xA;&lt;a href=&quot;http://opencv-java-tutorials.readthedocs.io/en/latest/08-object-detection.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://opencv-java-tutorials.readthedocs.io/en/latest/08-object-detection.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this helps.&lt;/p&gt;&#xA;" OwnerUserId="19554" LastActivityDate="2018-03-05T16:25:01.733" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15292" PostTypeId="1" CreationDate="2018-03-06T09:21:43.153" Score="1" ViewCount="12" Body="&lt;p&gt;I am currently in the process of writing a short sci-fi play about a team of researchers on Titan. With them, I'd like to have two four-legged robots (which would be actors in costumes). I'd like them to resemble Boston Dynamic's Spot or BigDog, with skinny legs and a bulky torso.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is: would the small foot design of those robots work well in desert areas? Walking through and over dunes, sandy beaches, that kind of thing. What's the best foot design for a legged robot traveling in sand?&lt;/p&gt;&#xA;" OwnerUserId="19802" LastActivityDate="2018-03-06T09:21:43.153" Title="Legged Design for Desert/Dune Exploration" Tags="&lt;legged&gt;" AnswerCount="0" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15293" PostTypeId="1" CreationDate="2018-03-06T13:33:08.723" Score="4" ViewCount="73" Body="&lt;p&gt;I have a controller board for a motor, where I can read the motor current (to transform to torque), the position, the velocity and I can give a velocity command. There is not really a torque mode on this controller, that is I can only command velocity and read torque but I cannot give a torque reference. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can use it to give a torque reference?, hence to comply with the standard robotic equation of the type &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\tau = m \ddot{q} + H(\dot{q},q) + G(q)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That is that I get the $\tau$ value to send as reference, but in my case the controller board I have receives $\dot q$ and sends $\tau$. Is there a way to still use the standard equation for control ? &lt;/p&gt;&#xA;" OwnerUserId="19804" LastActivityDate="2020-03-07T00:02:00.513" Title="Torque commands for velocity reference motor" Tags="&lt;control&gt;&lt;torque&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15294" PostTypeId="1" CreationDate="2018-03-06T16:00:14.840" Score="3" ViewCount="315" Body="&lt;p&gt;I am implementing a Kalman Filter for the following situation.&#xA;I have a camera set in a room that can detect the position and orientation of a marker (ARUCO) in the room.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore I have the following frame transformations:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/QS27u.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QS27u.png&quot; alt=&quot;transformations&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I want to filter with the Kalman is the position and orientation of the marker: $[x, y, z, \phi, \theta, \psi]$ in the room frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I already have a prediction model for the marker (constant-velocity).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am writing the observation model equations. I have the following relationships:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ X_{observed} = X_{marker/camera} = R_{camera/room}^T \cdot X_{marker/room}$$ &#xA;and&#xA;$$R_{observed} = R_{marker/camera} = R_{camera/room}^T \cdot R_{marker/room}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With these expressions, I express the observation with respect to the estimated variables: &#xA;$$X_{marker/room} = (x,y,z)^T$$&#xA;$$R_{marker/room} = eul2mat(\phi, \theta, \psi)$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the function $eul2mat$ and the matrix multiplication introduce some non-linearity. Which forces me to use an Extended Kalman Filter. Now I still can figure out the math of this. But the math becomes too complicated for what I'm trying to solve&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Of course, if I look at the problem differently. Let's say I only try to filter the pose of the marker in the camera frame. Then the equations are much simpler (a lot of identity matrices appear), and the system is linear.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So here is my question:&lt;br&gt;&#xA;Is there a way to make the equations of this system simpler?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS : &lt;em&gt;This is a simple case, where I don't really need to estimate the full transform directly (marker to room frame). But there might be cases where I need to estimate the full transform so that the state vector might be available for another filtering.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="11462" LastActivityDate="2021-04-20T06:58:56.467" Title="Rotation composition When using Kalman Filter" Tags="&lt;computer-vision&gt;&lt;kalman-filter&gt;&lt;rotation&gt;&lt;frame&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15297" PostTypeId="2" ParentId="15294" CreationDate="2018-03-06T18:55:43.950" Score="0" Body="&lt;p&gt;Your post  makes it seem like you have the camera state. If this is true then you could estimate the pose of the marker in the camera frame. You could transform the marker  pose estimates to the room frame outside of the kalman filter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You also state you're assuming a constant velocity model. This would involve estimating the velocity of the maker in addition to the position. This is missing from your state vector which only includes position and orientation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You have not mentioned if your camera will be moving around. If the camera does move around this would slightly complicate the prediction update of your kalman filter (assuming you have information about the camera state). You will have to update the predicted marker state given the (assumed) known change in camera state. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Moreover, if you choose to estimate the velocity of the marker with in a moving and rotating camera frame, you will be estimating the velocity in a non inertial reference frame. This can be handled but you may find it easier to estimate the velocity of the marker in the room frame which is inertial. &lt;/p&gt;&#xA;" OwnerUserId="8842" LastActivityDate="2018-03-06T18:55:43.950" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="15298" PostTypeId="1" AcceptedAnswerId="15809" CreationDate="2018-03-07T10:11:02.823" Score="3" ViewCount="59" Body="&lt;p&gt;I am using Aldebaran/Softbank Robotics Pepper with Choregraphe software. There are some loan words in my dialogs. When Pepper say these words they often don't sound natural.&lt;/p&gt;&#xA;&lt;p&gt;e.g. the german word &lt;strong&gt;Demenz&lt;/strong&gt; (eng: &lt;strong&gt;dementia&lt;/strong&gt;) The first &lt;strong&gt;e&lt;/strong&gt; is to long. I imagine some synax like that &lt;code&gt;De[0.5]menz&lt;/code&gt; or phonetic transcription &lt;code&gt;[deˈmɛnʦ]&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Is this possible?&lt;/p&gt;&#xA;" OwnerUserId="10747" LastEditorUserId="17881" LastEditDate="2020-07-15T23:36:03.260" LastActivityDate="2020-07-15T23:36:03.260" Title="Can I &quot;shape&quot; the sound of words spoken by Pepper with Phonetic transcription?" Tags="&lt;speech-processing&gt;&lt;pepper&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15301" PostTypeId="1" CreationDate="2018-03-07T15:37:00.527" Score="0" ViewCount="38" Body="&lt;p&gt;I have a linear map, $J$, from one space to another. I can transform a covariance matrix, $P$, from one space to another by using:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$P' = JPJ^{T}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, in my situation I have an inverse covariance matrix, $P^{-1}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The simplest way that I can think of transforming this is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$P'^{-1} = (J(P^{-1})^{-1}J^{T})^{-1}$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;which then using&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$(A*B*C)^{-1} = C^{-1}B^{-1}A^{-1}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;should give&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$P'^{-1} = (J^{T})^{-1}P^{-1}J^{-1}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;however, when I try this in MATLAB I do not find that these two representations are equal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$(J(P^{-1})^{-1}J^{T})^{-1} = (J^{T})^{-1}P^{-1}J^{-1}$&lt;/p&gt;&#xA;" OwnerUserId="6735" LastActivityDate="2018-04-06T16:09:31.867" Title="Transforming an inverse covariance matrix" Tags="&lt;kalman-filter&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15302" PostTypeId="2" ParentId="15301" CreationDate="2018-03-07T15:45:24.157" Score="1" Body="&lt;p&gt;It is actually correct.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was comparing the two matrices using &quot;==&quot; which has no epsilon for comparing floating point numbers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$(J(P^{−1})^{−1}J^{T})^{−1} = (J^{T})^{−1}P^{−1}J^{−1} = (JPJ^{T})^{-1}$&lt;/p&gt;&#xA;" OwnerUserId="6735" LastActivityDate="2018-03-07T15:45:24.157" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15304" PostTypeId="2" ParentId="8262" CreationDate="2018-03-07T16:35:50.393" Score="0" Body="&lt;p&gt;Another option is to build your own drone, for example with a &lt;a href=&quot;https://pixhawk.org/modules/pixhawk&quot; rel=&quot;nofollow noreferrer&quot;&gt;PixHawk Autopilot&lt;/a&gt;. Then connect your PixHawk to an embedded computer as the &lt;a href=&quot;http://www.hardkernel.com/main/products/prdt_info.php?g_code=G143452239825&quot; rel=&quot;nofollow noreferrer&quot;&gt;Odroid XU-4&lt;/a&gt; or the (way more powerful) &lt;a href=&quot;https://developer.nvidia.com/embedded/buy/jetson-tx2&quot; rel=&quot;nofollow noreferrer&quot;&gt;Nvidia Jetson TX2&lt;/a&gt;. &#xA;Both of them support Linux (on the TX2 you have linux ubuntu for tegra) &#xA;Then you could choose your own camera (I am actually in the process of selecting a new camera for our drones) and interface everything through &lt;a href=&quot;http://www.ros.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;ROS&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, this is not trivial and it requires some expertise. But I firmly think it is one of the best options out there. Especially using the TX2 because it could open also to you the world of Deep Learning onboard the quadrotor. This is true because the NVIDIA Jetson TX2 has a GPU which is meant for deep learning application. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope this will help. &lt;/p&gt;&#xA;" OwnerUserId="10852" LastActivityDate="2018-03-07T16:35:50.393" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15305" PostTypeId="1" CreationDate="2018-03-08T10:56:53.587" Score="5" ViewCount="229" Body="&lt;p&gt;I have bounding boxes detected in RGB images, but no information about the camera's intrinsic properties. Using deep learning (preferably) can I find the distance to the object from the camera in real world (meters or cm)? If I find the camera pose (using PoseNet) does that help? &lt;/p&gt;&#xA;" OwnerUserId="19824" LastActivityDate="2019-03-14T18:56:05.987" Title="Can you find object distance using camera pose" Tags="&lt;computer-vision&gt;&lt;cameras&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="15307" PostTypeId="1" CreationDate="2018-03-08T21:05:30.920" Score="1" ViewCount="108" Body="&lt;p&gt;We are working in a new agricultural rover, and we opted for PixHaw-II+ROS+MavLink platform as a good control alternative. However, our project is stuck as the PixHawk seems to work only when it is using Drone configuration: using Drone mode, power is released when performing drone-commands(wheels start moving). Once the configuration is changed to 'Rover' mode, there is no power output at all, even after calibrating the sensors and the battery (with this configuration, no PWM signal is shown when hooking up an oscilloscope.&#xA;We used Qgroundcontrol and Mission planner for the configuration, but none worked.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Has someone faced the same issue? we are quite sure this is a firmware-related problem. So any advice or trouble-shooting strategy is really welcome! Thank you!&lt;/p&gt;&#xA;" OwnerUserId="19832" LastEditorUserId="19832" LastEditDate="2018-03-09T18:53:33.030" LastActivityDate="2018-03-13T09:47:13.047" Title="PixHawk I/II not working in 'Rover' mode (firmware issue?).... HELP!" Tags="&lt;ros&gt;&lt;power&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="15309" PostTypeId="1" CreationDate="2018-03-09T11:10:08.193" Score="1" ViewCount="101" Body="&lt;p&gt;I drawn the Simulink model of a quadcopter with virtual joystick input and now I want to add the wind but I am little bit confused how to add wind with that model. actually my model is like that input joystick to the rotational+ translational  and get output from 3d Animation. I add wind model to my rotational sub model my but some one says like you can not add x,y and z component to the pitch , roll and yaw. so I trying to add this wind with thrust force like toque along x direction add with wind x component and torque y with wind y component and torque z with wind z component but still I think there is problem in units like I am adding force with velocity so its not make sense. I saw some paper in which wind is added like force and momentum component but I am not clear with that idea , can anyone help how should I connect wind component and why should I add momentum and force component???&lt;/p&gt;&#xA;" OwnerUserId="19838" LastActivityDate="2018-03-11T05:04:43.160" Title="Quadcopter with wind effect" Tags="&lt;quadcopter&gt;" AnswerCount="0" CommentCount="9" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15310" PostTypeId="1" AcceptedAnswerId="15311" CreationDate="2018-03-09T14:56:21.007" Score="0" ViewCount="36" Body="&lt;p&gt;Have a bunch of work in setting up a flask webserver to control a robot from an app, and I'm not too pleased with the results for driving.  Touch sensitivity issues are driving me nuts, and looking to maybe try a slightly different route instead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The flask server has a bunch of empty page web requests(my term) where it has a page for &lt;a href=&quot;http://192.168.10.1/Forward&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://192.168.10.1/Forward&lt;/a&gt; and some python code to control the motor controller.  When you go to that URL the code executes in the background and the car goes forward. Have all the URL's mapped to buttons in an app and it works till the screen thinks you let go which is constant and pretty aggrevating.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've now setup a python script with EVDEV to find and search for joystick events which works.  I thought I could use something like this on the event:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;webbrowser.get('lynx').open('http://192.168.10.1/Forward')&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And it would goto the url with Lynx...but sadly Lynx then wants you to hit Q to Quit then you can send another Joystick command.  I guess there's a way to kill the process after each hit but that seems messy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If there another way I might be able to do something like that without installing the GUI and does not involve having to figure out how to make two scripts talk to one another a different way all together?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regards,&#xA;Matt&lt;/p&gt;&#xA;" OwnerUserId="19840" LastActivityDate="2018-03-14T12:59:48.340" Title="Talking to a Flask Webserver from a Commandline" Tags="&lt;python&gt;&lt;linux&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15311" PostTypeId="2" ParentId="15310" CreationDate="2018-03-09T15:10:50.253" Score="0" Body="&lt;p&gt;If you're already in Python, use one of the URL libraries, such as &lt;a href=&quot;https://docs.python.org/3/library/urllib.request.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;urllib.request&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the commandline, you can use &lt;a href=&quot;https://curl.haxx.se/docs/manpage.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;curl&lt;/a&gt; or &lt;a href=&quot;https://www.gnu.org/software/wget/&quot; rel=&quot;nofollow noreferrer&quot;&gt;wget&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;When you go to that URL the code executes in the background and the car goes forward. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You shouldn't really be using GET requests where there is a side effect. &lt;a href=&quot;https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="1321" LastActivityDate="2018-03-09T15:10:50.253" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15312" PostTypeId="1" CreationDate="2018-03-10T01:35:36.323" Score="2" ViewCount="344" Body="&lt;p&gt;I just completed a Raspberry Pi car setup shown in the image below.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/RNmZY.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/RNmZY.jpg&quot; alt=&quot;earlier image of the car build in progress&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With my car now assembled, I can run a simple Python script put the necessary GPIO pins HIGH or LOW and moves the car around successfully.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Now, I have added ROS to the mix and I want to drive the car around using the Turtlebot teleop package.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Roscore&lt;/strong&gt; is launched and when I execute &lt;strong&gt;rostopic list&lt;/strong&gt; I get the following:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/rosout&#xA;/rosout_agg&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Obviously, I am missing the &lt;strong&gt;/cmd_vel&lt;/strong&gt; topic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;How can I make ROS aware of the robots' mobile base in order to begin driving it around, please?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="14355" LastEditorUserId="14355" LastEditDate="2018-03-24T17:44:27.877" LastActivityDate="2018-03-25T00:55:56.767" Title="Adding ROS to Raspberry Pi car and teleoperation" Tags="&lt;mobile-robot&gt;&lt;ros&gt;&lt;raspberry-pi&gt;&lt;autonomous-car&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15313" PostTypeId="1" AcceptedAnswerId="15315" CreationDate="2018-03-10T02:06:10.053" Score="1" ViewCount="241" Body="&lt;p&gt;This may be a very basic question, but I haven't had much success finding an answer. I'm currently trying to solve the inverse kinematics of a 3-RRR Planar kinematic arm, whose purpose is to move between points on a graph. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In most theoretical cases the (x,y) coordinates and the orientation of the end effector are known. However, in my case I only know (x,y) coordinates and frankly don't actually care about the orientation of the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My current approach has been to use DH-parameters to solve for each angle. This works, assuming I know the orientation of the end effector, which I do not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help will be greatly appreciated, thank you!&lt;/p&gt;&#xA;" OwnerUserId="19844" LastActivityDate="2018-03-10T07:00:30.450" Title="Solving Inverse Kinematics with unknown orientation" Tags="&lt;inverse-kinematics&gt;&lt;rotation&gt;&lt;orientation&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15314" PostTypeId="1" CreationDate="2018-03-10T03:43:41.867" Score="1" ViewCount="38" Body="&lt;p&gt;I am interested in this robot chasis:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.robotshop.com/en/iron-man-3-4wd-all-terrain-chassis-arduino.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;4 wheel robot chasis&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is no information on how to install encoders although the manual says it has space for encoders.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The page says that the motors do not have rear shaft, so, I was wondering if I can use encoders on this chassis, and if so, how can they be mounted? I do not want to mount them on the wheels.&lt;/p&gt;&#xA;" OwnerUserId="11648" LastEditorUserId="11648" LastEditDate="2018-03-10T06:57:25.970" LastActivityDate="2018-03-10T06:57:25.970" Title="How to mount encoder without rear shaft?" Tags="&lt;wheeled-robot&gt;&lt;quadrature-encoder&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="15315" PostTypeId="2" ParentId="15313" CreationDate="2018-03-10T07:00:30.450" Score="3" Body="&lt;p&gt;There is no way that you can solve for an IK solution without you -- either explicitly or implicitly -- specifying a criterion for choosing one solution among many others. But that does not mean that solving an IK problem without having any preference on the orientation (or translation) is not possible. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you solve IK problems analytically, you can just &lt;em&gt;randomly&lt;/em&gt; select one orientation and then solve the corresponding IK problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you solve your problems numerically, you already implicitly tell the program which solution to choose by giving the program an initial condition.&lt;/p&gt;&#xA;" OwnerUserId="7610" LastActivityDate="2018-03-10T07:00:30.450" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15323" PostTypeId="1" CreationDate="2018-03-11T20:50:10.173" Score="1" ViewCount="227" Body="&lt;p&gt;Could a small drone electric hot air balloon be made to stay in the air indefinitely? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Use an electric element for heating the air. Powered and tethered from the ground like a kite on a string it would not need a battery.&lt;/p&gt;&#xA;" OwnerUserId="15868" LastActivityDate="2018-03-13T11:53:40.453" Title="Could a hot air balloon be powered from the ground like a drone?" Tags="&lt;automation&gt;&lt;hardware&gt;&lt;flight-controller&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15324" PostTypeId="1" AcceptedAnswerId="15327" CreationDate="2018-03-11T22:00:12.670" Score="0" ViewCount="324" Body="&lt;p&gt;I'm making a flight controller for quadcopter. It is very stable when regulated by angular velocity, but it is horrible when regulated by angle. What are the potential problems when regulating a quadcopter by angle?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2&gt;System description:&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Input:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm using MPU6050 configured with low-pass filter for 185Hz cut-off with 2ms delay on both the 3-axis acceleration and angular velocity data. The angular velocity is filtered again with low-pass filter:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;(AV = AVn * alpha + AVn-1 * (1-alpha)), alpha = 0.8&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The accelerometer angle is calculated using:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;pitch_a = atan2(x_a, sign(z_a) * (sqrt(sqr(z) + zqr(y) * 0.001))) * 180/pi;&#xA;roll_a = atan2(y_a, (sqrt(sqr(x) + zqr(z))) * 180/pi;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The angular velocity is integrated over the last fused angle:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;pitch_g = pitch + av.y * dt;&#xA;roll_g = roll + av.x * dt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And the resulting angle is fused with the calculated accelerometer angle using complementary filter with &lt;code&gt;alpha = 0.98&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is done with new sensor values every 2ms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Regulation:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm using cascaded PI-P controller. The inner P controller's input is angular velocity and its output is motor power difference. The outer PI controller's input is absolute angle and its output is angular velocity. The outer controller is disabled when controlling the quadcopter by angular velocity. The inner controller runs every &lt;em&gt;2ms&lt;/em&gt; with accuracy of &lt;em&gt;8us&lt;/em&gt; and output limit of &lt;em&gt;+-70&lt;/em&gt;. The outer controller runs every &lt;em&gt;8.5ms&lt;/em&gt; with accuracy of &lt;em&gt;~100us&lt;/em&gt; and output limit of &lt;em&gt;+-250&lt;/em&gt;. I'm using &lt;a href=&quot;https://github.com/br3ttb/Arduino-PID-Library&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; library, slightly modified to run when I call it, output integers, use microseconds and zero the integral sum when at very low throttle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The setpoint is sent from the remote every &lt;em&gt;50ms&lt;/em&gt;, slightly filtered.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The output from the inner controller is added and subtracted to the according motor. The motors drivers' are controlled with &lt;em&gt;8-bit 490Hz&lt;/em&gt; PWM ranging from &lt;em&gt;127&lt;/em&gt; to &lt;em&gt;254&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;When controlling the quadcopter by angular velocity it flies stable with P value ranging from &lt;em&gt;0.2&lt;/em&gt; to &lt;em&gt;0.8&lt;/em&gt;, noisy sensor input and even with one different motor. When controlling it with angle it behaves randomly. It starts to pitch or roll from level orientation, it seems to respond well to step input when it has to pitch or roll but returns to level very slow and overshoots... The angle control feels like a very bad angular velocity control (even tho the angle input is cleaner and it shouldn't have noticeable delay based on the fusion equation). The P range I have tried is approximately &lt;em&gt;0.5&lt;/em&gt; to &lt;em&gt;2.0&lt;/em&gt; and the I range is approximately &lt;em&gt;0&lt;/em&gt; to &lt;em&gt;0.3&lt;/em&gt;. The inner controller runs &lt;em&gt;4.25&lt;/em&gt; times faster the outer controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What can be the problem?&lt;/p&gt;&#xA;" OwnerUserId="9016" LastEditorUserId="9016" LastEditDate="2018-03-11T22:11:33.407" LastActivityDate="2018-03-12T08:34:29.980" Title="Quadcopter stable with angular velocity but not with absolute angle" Tags="&lt;quadcopter&gt;&lt;pid&gt;&lt;sensor-fusion&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15326" PostTypeId="2" ParentId="15324" CreationDate="2018-03-12T07:05:53.127" Score="0" Body="&lt;p&gt;I feel you are feeding Gyro angle which is not under the control of complimentary filter, as accumulation of pitch and roll would have drifts which complimentary filter will not be able to recover. Hence my suggestion is to implement as below:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;pitch = 0.98 *(pitch + av.y*dt) + 0.02*pitch_a&#xA;roll = 0.98 *(roll + av.x*dt) + 0.02*roll_a&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I believe your accumulation (basically integration) is causing problem of drift. See if you can implement as above.&lt;/p&gt;&#xA;" OwnerUserId="13865" LastActivityDate="2018-03-12T07:05:53.127" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="15327" PostTypeId="2" ParentId="15324" CreationDate="2018-03-12T08:34:29.980" Score="0" Body="&lt;p&gt;You could try using the MPU6050 integrated DMP for angle measurements. That will possibly help to locate the issue.&lt;/p&gt;&#xA;" OwnerUserId="18709" LastActivityDate="2018-03-12T08:34:29.980" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="15328" PostTypeId="2" ParentId="15254" CreationDate="2018-03-12T08:42:21.443" Score="1" Body="&lt;p&gt;I have since tuned the system just by using trial and error. The rate constants are much lower than their maximal values at which oscillation started. It helped to just measure which loop caused oscillations when they happened.&lt;/p&gt;&#xA;" OwnerUserId="18709" LastActivityDate="2018-03-12T08:42:21.443" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="15334" PostTypeId="1" AcceptedAnswerId="15347" CreationDate="2018-03-12T19:52:49.900" Score="0" ViewCount="450" Body="&lt;p&gt;I'm trying to use a linear actuator (&lt;a href=&quot;https://es.aliexpress.com/store/product/Best-Price-12-24V-36V-8inch-200mm-Stroke-1000N-100KGS-Load-Linear-Actuator-With-Potentiometer-and/1920248_32657537079.html?ws_ab_test=searchweb0_0,searchweb201602_3_10152_10151_10065_10344_10068_10342_10547_10343_10340_10548_10341_10084_10083_10618_10307_10301_10303_5711215_10313_10059_10184_10534_100031_10103_10627_10626_10624_10623_10622_5711315_10621_10620_5722415-5711215,searchweb201603_2,ppcSwitch_5&amp;amp;algo_expid=56d54525-aa86-45ee-ba84-1dac258e5c5f-0&amp;amp;algo_pvid=56d54525-aa86-45ee-ba84-1dac258e5c5f&amp;amp;priceBeautifyAB=0&quot; rel=&quot;nofollow noreferrer&quot;&gt;sample electric cylinder&lt;/a&gt;) for a soil penetration device. Originally, I thought of using a pressure sensor to know when/if I hit a rock. However, I am not seeing many linear actuators with integrated pressure sensors but they do come with potentiometers. So I am thinking, would it be possible to use the potentiometer as a rough way to know if I hit something?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically, my program would check if its position does not change for a small time interval. If the position has not changed before it extends the maximum length, then the actuator must have hit something it cannot penetrate well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyone have any ideas? &lt;/p&gt;&#xA;" OwnerUserId="19867" LastActivityDate="2018-03-14T01:02:57.120" Title="Potentiometer as pressure sensor in linear actuator?" Tags="&lt;actuator&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="15335" PostTypeId="2" ParentId="15334" CreationDate="2018-03-12T22:31:12.667" Score="0" Body="&lt;p&gt;&lt;strong&gt;Pressure:&lt;/strong&gt; First of I would prefer to use piezo pressure sensors. But you can use pressure sensitive resistor films like velostat: &lt;a href=&quot;https://www.adafruit.com/product/1361&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.adafruit.com/product/1361&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Proximity:&lt;/strong&gt; Alternatively, You can use sensors such as capacitive or inductive proximity sensors. It is used quite frequently in the industry to detect touch and contact or measure temparature or distance. For example:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://playground.arduino.cc/main/capacitivesensor?from=main.caps&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://playground.arduino.cc/main/capacitivesensor?from=main.caps&lt;/a&gt; France&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.sick.com/ag/en/proximity-sensors/capacitive-proximity-sensors/c/g201659&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.sick.com/ag/en/proximity-sensors/capacitive-proximity-sensors/c/g201659&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9504" LastActivityDate="2018-03-12T22:31:12.667" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15336" PostTypeId="1" AcceptedAnswerId="15341" CreationDate="2018-03-13T04:33:57.300" Score="0" ViewCount="311" Body="&lt;p&gt;I want to design a LQR controller for my two wheeled mobile robot. While designing the controller, I need to find gain, K for the LQR which this required the state space model of wheeled mobile robot. My question is how to find the matrix A, B, C and D for this nonlinear system by using the equations below.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/LDqsU.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/LDqsU.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The outputs are x, y and theta while inputs are v and w.&lt;/p&gt;&#xA;" OwnerUserId="19871" LastEditorUserId="19871" LastEditDate="2018-03-13T15:20:32.247" LastActivityDate="2021-05-29T22:04:38.717" Title="State space model" Tags="&lt;control&gt;&lt;kinematics&gt;&lt;wheeled-robot&gt;&lt;two-wheeled&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="15338" PostTypeId="1" CreationDate="2018-03-13T09:17:42.507" Score="1" ViewCount="158" Body="&lt;p&gt;It's me the greatest noob again.thank you very much for your last help guys.Now,this time I am with a line following robot.I want to use PID control in it.But I'm not getting any perfect resource from where I can learn it.I want to be fluent with it and learn it from the deep.please suggest me some resource from where i can get help.suggest me something that will teach me from beginner level to pro level.I want to learn it from the root and also implement it in my line follower simultaneously. you can also suggest any good algorithm or control system for my line follower.it will be very kind of you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance.you guys are awesome. &lt;/p&gt;&#xA;" OwnerUserId="16491" LastEditorUserId="16491" LastEditDate="2018-03-13T09:48:13.400" LastActivityDate="2018-08-11T04:01:38.073" Title="How to use PID control for line following robot?" Tags="&lt;pid&gt;&lt;line-following&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15340" PostTypeId="2" ParentId="15323" CreationDate="2018-03-13T11:53:40.453" Score="1" Body="&lt;p&gt;The other option would be a laser. The baloon could reach migher altitudes without the corresponding increase in wire weight. Of course, it would need some means of holding position. Which it might need anyway - a blimp, for example, will need to be flown actively against a storm when tethered.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously, the baloon needs to be made of some material which can withstand the constant firing of laser.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Microwave power could also be used. IIRC, there was some 1960's idea to power a helicopter that way...yes, here we go: &lt;a href=&quot;https://en.wikipedia.org/wiki/Beam-powered_propulsion#Non-spacecraft_applications&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Beam-powered_propulsion#Non-spacecraft_applications&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19875" LastActivityDate="2018-03-13T11:53:40.453" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15341" PostTypeId="2" ParentId="15336" CreationDate="2018-03-13T12:07:44.850" Score="1" Body="&lt;p&gt;Unfortunately, you're trying to apply a &lt;strong&gt;linear&lt;/strong&gt; controller (the L of LQR) to a &lt;strong&gt;nonlinear&lt;/strong&gt; system. In general, this doesn't work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As an approximation, you could linearize the system. If the nonlinearities are small it's common to linearize about a nominal point such as $\theta=0$, but in your case this might not work well since it would eliminate any lateral dynamics.&#xA;$$&#xA;\begin{align}&#xA;\dot{x} = v&#xA;\\&#xA;\dot{y} = 0&#xA;\\&#xA;\dot{\theta} = \omega&#xA;\end{align}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another option would be to linearize every timestep. This could get expensive though as your feedback gain matrix, $K$, also needs to be recalculated each time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, a middle ground could be to linearize about several predefined points, e.g. $\theta=[-20,-15,-10,0,10,15,20]$. At each timestep you would separately compute the control action using the $K_j$ computed for each of these linearization points and then interpolate between those values based on the current $\theta$.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastEditorUserId="2669" LastEditDate="2018-03-13T14:35:18.233" LastActivityDate="2018-03-13T14:35:18.233" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15342" PostTypeId="1" CreationDate="2018-03-13T13:47:18.960" Score="1" ViewCount="148" Body="&lt;p&gt;I have been using dual &lt;a href=&quot;https://en.wikipedia.org/wiki/Real_Time_Kinematic&quot; rel=&quot;nofollow noreferrer&quot;&gt;RTK&lt;/a&gt; receivers for my tractor projects.  This gives me reliable position, heading, and tilt at low rates (10 Hz).  I recently began working with an &lt;a href=&quot;https://en.wikipedia.org/wiki/Inertial_navigation_system&quot; rel=&quot;nofollow noreferrer&quot;&gt;INS&lt;/a&gt; (an &lt;a href=&quot;http://www.advancednavigation.com.au/product/spatial-dual&quot; rel=&quot;nofollow noreferrer&quot;&gt;Advanced Navigation Spatial Dual&lt;/a&gt;) and it's wonderful to get a full Pose from a single device at up to 1000 Hz.  The problem I have is that an INS like this is expensive (~$12K) and total overkill for what I'm doing (driving on ground at 5.5 MPH).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a way to achieve an adequate result using &lt;a href=&quot;https://www.google.co.uk/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;cad=rja&amp;amp;uact=8&amp;amp;ved=0ahUKEwi9i5Ofx-nZAhWO3KQKHcwdB1cQFggpMAA&amp;amp;url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FFree_and_open-source_software&amp;amp;usg=AOvVaw1XrL6000OuArhpMY7SYlmy&quot; rel=&quot;nofollow noreferrer&quot;&gt;FOSS&lt;/a&gt;?  The articles I find on Kalman filtering seem to always assume that the NavSatFix does not provide sufficiently accurate absolute position data.  RTK, however, does provide sufficient accuracy and precision for my needs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that while I do have radar ground speed available, my strong preference is to just use RTK receivers and a MEMS &lt;a href=&quot;https://en.wikipedia.org/wiki/Inertial_measurement_unit&quot; rel=&quot;nofollow noreferrer&quot;&gt;IMU&lt;/a&gt;.  Let's say that I want specifications comparable to my Spatial Dual but the update rate doesn't need to be over 100 Hz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Update:  I found &lt;a href=&quot;https://pdfs.semanticscholar.org/6297/fa369b62109fa3cbb482280b2fb8d1467a38.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this paper&lt;/a&gt; which addresses the constraints of a (slow land-based non-holonomic) vehicle. &lt;/p&gt;&#xA;" OwnerUserId="19877" LastEditorUserId="19877" LastEditDate="2018-03-25T13:43:47.367" LastActivityDate="2018-03-25T13:43:47.367" Title="Kalman filter for slow ground vehicle with RTK" Tags="&lt;ros&gt;&lt;kalman-filter&gt;&lt;gps&gt;&lt;sensor-fusion&gt;" AnswerCount="0" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="15343" PostTypeId="1" CreationDate="2018-03-13T17:29:56.147" Score="1" ViewCount="767" Body="&lt;p&gt;I recently had an exam in robotics and one of the questions was about forward kinematics on the Stanford manipulator below.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2zR9Q.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2zR9Q.png&quot; alt=&quot;Standford manip&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The DH parameters were given and we were asked to calculate the angular velocity $v_6$. &#xA;The question mentioned that there was a trick, a shortcut of sorts, so that we would arrive at the answer faster than going through the full forward process, calculating $v_{1-6}$ and $w_{1-6}$ using the all rotation matrices. Does anyone know that trick? Would be really helpful to understand something like that for the resit, when you only have 90min for the whole exam. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="19878" LastActivityDate="2018-03-13T17:29:56.147" Title="Forward kinematics on Stanford manipulator" Tags="&lt;forward-kinematics&gt;&lt;dh-parameters&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15344" PostTypeId="2" ParentId="15205" CreationDate="2018-03-13T19:42:11.707" Score="0" Body="&lt;p&gt;An 'Increased Rotation' servo will not have a distinctive difference just by looking at the outside.  It will become apparent when you plug it in and run it with a servo controller.  This servo will rotate approximately 0.2 degrees per microsecond change in signal.  This means it'll yield approximately 180 degrees provided a 1050-1950usec signal (change in 900usec * 0.2 degrees per usec).  A stock servo, given the same signal range would rotate approximately 90 degrees since it moves about 0.1 degrees per usec.  &lt;/p&gt;&#xA;" OwnerUserId="19498" LastActivityDate="2018-03-13T19:42:11.707" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15345" PostTypeId="1" CreationDate="2018-03-13T23:28:56.193" Score="0" ViewCount="116" Body="&lt;p&gt;I recently purchased an iRobot Create2 and have had a lot of issues in the last few weeks with the battery being dead when I go to use it. The robot almost never leaves its charger at this time because I am still working on coding it. This makes me wonder if there is a state I could be leaving the robot in that is preventing it from charging. The only way I can get it to charge is to do a hard reset which then allows it to start charging. My suspicion is that if you put it in full mode and disconnect from it that it can not charge. Can anyone confirm or deny this?&lt;/p&gt;&#xA;" OwnerUserId="19883" LastActivityDate="2018-05-30T23:21:17.227" Title="Is it possible to put the irobot create2 in a mode where it will not charge?" Tags="&lt;irobot-create&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15346" PostTypeId="2" ParentId="15334" CreationDate="2018-03-14T00:13:10.930" Score="0" Body="&lt;p&gt;Using a pot, or a linear encoder, could let you know when the actuator is no longer moving.  But I would not call that a pressure sensor.  If you want to know the actual pressure for a dirt-penetrating device, you could use a piezo crystal, or another tip device that responds to pressures (see haptic sensors).  Alternately, you could sense the current into the actuator to determine the impedance of the environment.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2018-03-14T00:13:10.930" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15347" PostTypeId="2" ParentId="15334" CreationDate="2018-03-14T00:38:41.000" Score="1" Body="&lt;p&gt;Yes, you'll see the position become fairly stable when you've hit a rock (assuming that your bot is heavy enough to stall your actuator).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Measuring current will also tell you if you've stalled/are stalling.  I have used a &lt;a href=&quot;https://www.pololu.com/product/1392&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pololu controller&lt;/a&gt; which apparently has current feedback over USB but I have not used that feature.  I suggest that you use something like this rather than building your own H-bridge and current sensor.  It will make it easy to experiment with different approaches.&lt;/p&gt;&#xA;" OwnerUserId="19877" LastEditorUserId="19877" LastEditDate="2018-03-14T01:02:57.120" LastActivityDate="2018-03-14T01:02:57.120" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15348" PostTypeId="2" ParentId="15338" CreationDate="2018-03-14T00:58:30.193" Score="1" Body="&lt;p&gt;I struggled with this for a long time.  I'm still struggling.  I've used a PID for my (RTK) line-following tractors so far.  They are barely good enough.  I'll try to describe generally how I did it.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Use a PID which varies in output from 0 to 90.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Calculate the cross-track distance (XTD).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Feed the PID with the XTD.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Use the output of the PID to determine the desired course.  0 means &quot;head parallel with the line,&quot; and 90 means &quot;head perpendicular toward the line.&quot;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Steer (using an IMU) to the desired course.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Sure, &lt;a href=&quot;https://www.youtube.com/watch?v=BKPoWE57VNw&quot; rel=&quot;nofollow noreferrer&quot;&gt;it works&lt;/a&gt;, but I recommend &lt;a href=&quot;https://www.youtube.com/watch?v=5TRFLRXuuuA&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pure Pursuit&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="19877" LastActivityDate="2018-03-14T00:58:30.193" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="15350" PostTypeId="2" ParentId="15345" CreationDate="2018-03-14T07:36:39.973" Score="2" Body="&lt;p&gt;See page 4 &lt;a href=&quot;https://www.irobot.com/~/media/MainSite/PDFs/About/STEM/Create/create_2_Open_Interface_Spec.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;create_2_Open_Interface_Spec.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In Passive mode, Roomba will sleep after 5 minutes of inactivity to preserve battery power. In Safe and Full modes, Roomba will never sleep, and if left in this state for an extended period of time, will deeply&#xA;  discharge its battery, even if plugged into the charger. &lt;strong&gt;The charger will power Roomba in all modes, but it will not charge the battery in Safe or Full mode&lt;/strong&gt;. It is important that when you are finished working with Roomba that you issue either the Passive or Stop command to protect the battery.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="17446" LastActivityDate="2018-03-14T07:36:39.973" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15353" PostTypeId="1" AcceptedAnswerId="15375" CreationDate="2018-03-14T22:23:21.087" Score="0" ViewCount="69" Body="&lt;p&gt;I need a covariance of parameter estimation for reliability estimation. According to the &lt;a href=&quot;https://stats.stackexchange.com/questions/71154/when-an-analytical-jacobian-is-available-is-it-better-to-approximate-the-hessia&quot;&gt;this&lt;/a&gt; post, I know the approximation of the Hessian can be calculated as&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ \sigma^2 H^{-1} = C $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where H is Hessian, C is the covariance and sigma is the variance of residual. I am trying to understand where it came from and how it is derived but I could not find a related material anywhere. Anyone knows a good reading material regarding this?&lt;/p&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2018-03-19T01:09:52.760" Title="Calculating covariance of parameter estimation from Hessian" Tags="&lt;computer-vision&gt;&lt;navigation&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15354" PostTypeId="1" CreationDate="2018-03-14T22:54:52.440" Score="1" ViewCount="115" Body="&lt;p&gt;Since the mini DIN power is limited to 250ma, has anyone found a way to tap the battery to supply power to added electronics?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd prefer this over adding a secondary battery and separate charger&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks,&#xA;Frank&lt;/p&gt;&#xA;" OwnerUserId="19572" LastActivityDate="2020-08-20T10:02:45.303" Title="directly tapping Create2 battery" Tags="&lt;irobot-create&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15355" PostTypeId="1" AcceptedAnswerId="15378" CreationDate="2018-03-14T23:07:14.890" Score="0" ViewCount="99" Body="&lt;p&gt;One of the nice contributions of &lt;a href=&quot;https://github.com/uzh-rpg/rpg_svo&quot; rel=&quot;nofollow noreferrer&quot;&gt;SVO&lt;/a&gt; is that it has proposed a way to use 2d edge features in pose optimization by point-to-line constraint. But in the actual code, I could not find where it is assigning any feature with edge type property. I thought the feature detector part does it but it was not. The results from the feature detector do not say whether the feature is edge type or not. Anybody know how it works?&lt;/p&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2018-03-19T06:39:49.257" Title="SVO edgelet computation" Tags="&lt;navigation&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15356" PostTypeId="1" CreationDate="2018-03-15T05:38:28.130" Score="0" ViewCount="159" Body="&lt;p&gt;I am following this &lt;a href=&quot;https://github.com/orocos/rtt_ros_integration&quot; rel=&quot;nofollow noreferrer&quot;&gt;tutorial&lt;/a&gt; to install orocos in my system with ubuntu 16.06, xenomai 3.0.5. But i'm getting error:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Orocos RTT version 2.9.0&#xA;No orocos-rtt.cmake file loaded, using default settings.See orocos-rtt.default.cmake&#xA;Detected OROCOS_TARGET environment variable. Using: xenomai&#xA;-- CMAKE_VERSION: 3.5.1&#xA;-- Found Boost Uuid in /usr/include.&#xA;-- Orocos target is xenomai&#xA;XENOMAI_INCLUDE_DIR=XENOMAI_INCLUDE_DIR-NOTFOUND&#xA;XENOMAI_NATIVE_LIBRARY=XENOMAI_NATIVE_LIBRARY-NOTFOUND&#xA;CMake Error at config/LibFindMacros.cmake:74 (message):&#xA;  Required library XENOMAI NOT FOUND.&#xA;&#xA;  Install the library (dev version) and try again.  If the library is already&#xA;  installed, set the XENOMAI_ROOT_DIR environment variable or use cmake to&#xA;  set the missing variables manually.&#xA;Call Stack (most recent call first):&#xA;  config/FindXenomai.cmake:72 (libfind_process)&#xA;  config/check_depend.cmake:164 (find_package)&#xA;  CMakeLists.txt:106 (INCLUDE)&#xA;&#xA;&#xA;-- Configuring incomplete, errors occurred!&#xA;See also &quot;/home/robot/orocos-toolchain/build_isolated/rtt/install/CMakeFiles/CMakeOutput.log&quot;.&#xA;&amp;lt;== Failed to process package 'rtt': &#xA;  Command '['/home/robot/orocos-toolchain/install_isolated/env.sh', 'cmake', '/home/robot/orocos-toolchain/src/orocos_toolchain/rtt', '-DCMAKE_INSTALL_PREFIX=/home/robot/orocos-toolchain/install_isolated', '-G', 'Unix Makefiles']' returned non-zero exit status 1&#xA;&#xA;Reproduce this error by running:&#xA;==&amp;gt; cd /home/robot/orocos-toolchain/build_isolated/rtt &amp;amp;&amp;amp; /home/robot/orocos-toolchain/install_isolated/env.sh cmake /home/robot/orocos-toolchain/src/orocos_toolchain/rtt -DCMAKE_INSTALL_PREFIX=/home/robot/orocos-toolchain/install_isolated -G 'Unix Makefiles'&#xA;&#xA;Command failed, exiting.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Before this i have sucessfully installed orocos toolchIN without the xenomai kernel. But now i'm getting the error.  &lt;/p&gt;&#xA;" OwnerDisplayName="user14148" LastActivityDate="2018-03-15T05:38:28.130" Title="Required library XENOMAI NOT FOUND" Tags="&lt;ros&gt;&lt;real-time&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="15357" PostTypeId="1" AcceptedAnswerId="15362" CreationDate="2018-03-15T06:00:19.763" Score="1" ViewCount="288" Body="&lt;p&gt;I have a data-set containing points in SE(3), i.e the 4 $\times$ 4 transformation matrices and the corresponding dual quaternions. Now, I want to plot these points in a 3D graph. How to generate this plot?&lt;/p&gt;&#xA;" OwnerUserId="17858" LastActivityDate="2019-01-13T02:59:20.713" Title="Plotting SE(3) points in a 3D graph" Tags="&lt;robotic-arm&gt;" AnswerCount="3" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15358" PostTypeId="1" CreationDate="2018-03-15T18:43:46.777" Score="1" ViewCount="167" Body="&lt;p&gt;I am building a robotic arm for pick and place application. The robot is going to recognize several objects using the RGB feed from Kinect (will use a model such as YOLOv2 for object detection, running at maybe 2-3 FPS) and find the corresponding depth map (from Kinect again) to be used with the kinematic models for the arm. The YOLOv2 network input size is 416x416 px. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I will be working on Ubuntu 16.04 with ROS Kinetic. I also plan to work on indoor mapping and autonomous navigation in the future.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is the Kinect 360 sufficient to achieve this? Is it worth buying the newer Kinect for XBOX One and will the 1080p feed make a huge difference? &lt;/p&gt;&#xA;" OwnerUserId="9059" LastActivityDate="2018-03-15T18:43:46.777" Title="Which Kinect to use for robotic arm pick and place application with object detection?" Tags="&lt;robotic-arm&gt;&lt;ros&gt;&lt;computer-vision&gt;&lt;kinect&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15362" PostTypeId="2" ParentId="15357" CreationDate="2018-03-16T10:58:41.430" Score="4" Body="&lt;p&gt;A point in SE(3) has six degrees of freedom, so the three DOF's in a 3D plot would not be sufficient to capture this. I would split it up into two 3D plots. One of them would be quite straight forward, namely just plot the 3D position vector. The other plot should capture the information of the attitude part. There are multiple ways of representing this in 3D, such as Euler angles or axis angle representation, where the axis is of unit length and then scaled that by the angle. I myself would prefer the last one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your SE(3) is represented as a 4 by 4 matrix&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;M = \begin{bmatrix}&#xA;R &amp;amp; p \\ 0 &amp;amp; 1&#xA;\end{bmatrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;with $R\in\mathbb{R}^{3\times3}$ a rotation matrix and $p\in\mathbb{R}^{3}$ the position vector. So the position vector $p$ is straight forward to extract. The axis angle information can be extracted from $R$ after some calculations&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\theta = \cos^{-1}\left(\frac{\mathrm{Tr}(R)-1}{2}\right)&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{bmatrix}&#xA;0 &amp;amp; -v_3 &amp;amp; v_2 \\&#xA;v_3 &amp;amp; 0 &amp;amp; -v_1 \\&#xA;-v_2 &amp;amp; v_1 &amp;amp; 0&#xA;\end{bmatrix} = \frac{R - R^\top}{2\,\sin\theta}&#xA;$$&lt;/p&gt;&#xA;" OwnerUserId="1487" LastActivityDate="2018-03-16T10:58:41.430" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15365" PostTypeId="1" CreationDate="2018-03-16T18:21:09.177" Score="0" ViewCount="16" Body="&lt;p&gt;Can anyone tell me the list of robotics framework or softwares which can run on xenomai patched kernal like orocos? I was learning orocos this days in normal gnulinux kernal, but after i patch xenomai it is not installing no matter what. So if their is another framework like orocos which i can use ofr hard real tiem control of robots or which runs over xenomai kindely suggest me.&lt;/p&gt;&#xA;" OwnerDisplayName="user14148" LastActivityDate="2018-03-16T18:21:09.177" Title="list of robotics framework running over xenomai" Tags="&lt;ros&gt;&lt;real-time&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="15366" PostTypeId="1" CreationDate="2018-03-16T19:01:33.023" Score="0" ViewCount="54" Body="&lt;p&gt;According to &lt;a href=&quot;http://www.harmonicdrive.net/_hd/content/catalogs/pdf/csf-csg-catalog.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;one of their brochures&lt;/a&gt;, Harmonic Drive numbers their models with numbers like 8, 11, 14, 17, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I noticed that Chinese suppliers like Laifaul have a similar numbering scheme, though it is not clear to me that they correspond to the same specs that that the Harmonic models do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do these numbers have some physical significance?  Torque?  Dimension?  Or are they just some legacy model numbering scheme?&lt;/p&gt;&#xA;" OwnerUserId="19893" LastActivityDate="2018-03-17T01:07:07.413" Title="What do the model numbers in Harmonic Drive gear drives represent?" Tags="&lt;actuator&gt;&lt;gearing&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15368" PostTypeId="2" ParentId="15366" CreationDate="2018-03-17T00:50:26.770" Score="1" Body="&lt;p&gt;It is the pitch diameter of the flex spline in inches/10. You can see it used it their equations for thrust force on the wave generator.&lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="184" LastEditDate="2018-03-17T01:07:07.413" LastActivityDate="2018-03-17T01:07:07.413" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15369" PostTypeId="1" CreationDate="2018-03-17T10:42:59.873" Score="4" ViewCount="1293" Body="&lt;p&gt;I am trying to understand how to draw coordinate system for forward kinematics. Figure is &lt;a href=&quot;https://i.stack.imgur.com/waXcW.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/waXcW.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could someone please explain how is the coordinate system drawn as per DH parameter? Basically when do we have to shift the origin of a frame and when not? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S: I mainly do not get how they drew frame 2. Why was it not shifted to frame 1's position?&lt;/p&gt;&#xA;" OwnerUserId="19913" LastEditorUserId="19913" LastEditDate="2018-03-17T10:51:34.967" LastActivityDate="2018-11-15T15:32:53.827" Title="Coordinate system of SCARA Manipulator" Tags="&lt;dh-parameters&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15370" PostTypeId="1" CreationDate="2018-03-17T22:19:11.440" Score="1" ViewCount="1170" Body="&lt;p&gt;I am kind of new to control systems and I am currently making a line follower using PID loop. I am using 6 IR LED Photo-transistor pairs to detect the line but I am not sure how to calculate the error. I searched online and many people use error = set point - position(current), but I am struggling to figure out how to use the input from the 6 sensors to get a precise position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS- I tried the loop with digital sensor input and it worked (giving each case an error value) but I am planning to analog values of sensors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The line width is approximately 1.7 cm and it is a white line on a black track. Also this project is for a competition, and I would really appreciate any advice on which micro controller to use (currently using STM32F401RE or Arduino Uno) or any other thing I can do to make the robot faster and better. Cheers!&lt;/p&gt;&#xA;" OwnerUserId="19915" LastEditorUserId="19915" LastEditDate="2018-03-17T23:26:15.700" LastActivityDate="2018-06-17T18:13:09.103" Title="Calculating error on line following robot (PID)" Tags="&lt;pid&gt;&lt;line-following&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="15371" PostTypeId="2" ParentId="15370" CreationDate="2018-03-17T22:43:42.803" Score="1" Body="&lt;p&gt;I order for you to use a PID loop for line follow, you are going to need an error that is &lt;strong&gt;proportional&lt;/strong&gt; to the distance you are from the line.  That may not be possible with the sensors you are describing.  The best you can do is when the light sensors are analog (their output is proportional the the amount of line they see and they have a beam width that is the same as the width of the line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If that is the case, line the sensors up so they are spaced one beam width apart as follows:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;L3-L2-L1-R1-R2-R3&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then error = 3*L3+2*L2+L1-R1-2*R2-3*R3&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For more information and other techniques, here is an article on &lt;a href=&quot;http://www.inpharmix.com/jps/PID_Controller_For_Lego_Mindstorms_Robots.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;PID line following techniques with LEGO Mindstorm&lt;/a&gt;.  Line follow is used a lot in FLL (First Lego League).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Follow-up:&lt;/strong&gt;&#xA;It looks like the sensor you are using (TCRT5000) can be used as an analog sensor.  It is an active sensor so that will help with ambient light rejection.  The algorithm described above for calculating error should work if you want to do PID control.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;See the &lt;a href=&quot;https://www.vishay.com/docs/80107/80107.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Application Note for the TCT5000&lt;/a&gt; for more information on how to use the sensor.  The section on 'Resolution' should help you set the sensor spacing.  If possible, set the senor height so that the resolution is smaller then the line width; but, no so small that the line could fit within the &quot;gap&quot; between the sensors (ideal is no gap).&lt;/p&gt;&#xA;" OwnerUserId="462" LastEditorUserId="462" LastEditDate="2018-03-19T15:37:39.510" LastActivityDate="2018-03-19T15:37:39.510" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15372" PostTypeId="1" AcceptedAnswerId="15374" CreationDate="2018-03-18T00:50:58.537" Score="1" ViewCount="220" Body="&lt;p&gt;I wanted to design a LQR controller for my two wheel mobile robot. What are the equation of two wheeled mobile robot can be rearranged into state space model? My two wheeled mobile robot is nonlinear system. The outputs of the system are v, linear velocity and w, angular velocity while the inputs of the system are x, y and theta. &lt;/p&gt;&#xA;" OwnerUserId="19871" LastActivityDate="2018-03-18T10:23:27.363" Title="Dynamic model of two wheeled mobile robot" Tags="&lt;wheeled-robot&gt;&lt;dynamics&gt;&lt;two-wheeled&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="15374" PostTypeId="2" ParentId="15372" CreationDate="2018-03-18T10:23:27.363" Score="-3" Body="&lt;p&gt;At first we should define what a dynamic model is. A dynamic model is equal to a physics engine. The input value is given to the engine, and the engine calculates where the robot will be in the next timestep. The calculation is done with a sinus function, &lt;a href=&quot;http://research.iaun.ac.ir/pd/abbas.chatraei/pdfs/UploadFile_5324.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Dynamic Modeling and Stabilization of Wheeled Mobile Robot &lt;/a&gt; For example: the robot looks to north, and both wheels are spinning. Then the robot will drive to north. If only the right wheel is spinning, then the robot will not drive to north but in a slightly different angle to the right.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let us increase the abstraction level a bit. Writing down the formula for a dynamic model is equal to program a physics engine from scratch. Modeling a two wheeled robot is a special case. The better approach is to use a general purpose physics engine like Physx or Box2D which can not only model a single robot, but a robot plus obstacles. These kind of general purpose physics engine are also using mathematical formulas with sin and cos but are able to model any system: a wheeled robot, a wheeled robot in a maze, an inverted pendulum and so forth. The term is used for the aim to implement real software, for example in Matlab or C++. While the term “dynamic model” is used in theoretical lectures about optimal control.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2018-03-18T10:23:27.363" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15375" PostTypeId="2" ParentId="15353" CreationDate="2018-03-19T01:09:52.760" Score="0" Body="&lt;p&gt;The following two materials explain the problem clearly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why Hessian is same as covariance matrix.&#xA;&lt;a href=&quot;https://onlinelibrary.wiley.com/doi/pdf/10.1002/9780470824566.app1&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://onlinelibrary.wiley.com/doi/pdf/10.1002/9780470824566.app1&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How JtJ can be a Hessian approximation.&#xA;&lt;a href=&quot;https://www8.cs.umu.se/kurser/5DA001/HT07/lectures/lsq-handouts.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www8.cs.umu.se/kurser/5DA001/HT07/lectures/lsq-handouts.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2018-03-19T01:09:52.760" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15377" PostTypeId="2" ParentId="15369" CreationDate="2018-03-19T06:17:21.477" Score="2" Body="&lt;p&gt;The steps to define a frame for the DH parameters are the following:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$Z_n$&lt;/span&gt; axis in the direction of motion of joint &lt;span class=&quot;math-container&quot;&gt;$n-1$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$X_n$&lt;/span&gt; axis such that it is perpendicular to both &lt;span class=&quot;math-container&quot;&gt;$Z_n$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$Z_{n-1}$&lt;/span&gt; and runs from &lt;span class=&quot;math-container&quot;&gt;$Z_{n-1}$&lt;/span&gt; to &lt;span class=&quot;math-container&quot;&gt;$Z_{n}$&lt;/span&gt; (this defines the origin). The special case here is when both Z axes are parallel and thus there are infinite solutions. In this case, you just choose one.&lt;/li&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$Y_n$&lt;/span&gt; axis to complete the right hand rule&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;What this means is that frame &lt;span class=&quot;math-container&quot;&gt;$n$&lt;/span&gt; moves with joint &lt;span class=&quot;math-container&quot;&gt;$n$&lt;/span&gt; even though its &lt;span class=&quot;math-container&quot;&gt;$Z$&lt;/span&gt; axis passes through the axis of &lt;span class=&quot;math-container&quot;&gt;$n+1$&lt;/span&gt;. This can be confusing. I'll go through each frame in your example which will hopefully make sense:&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;0&quot;&gt;&#xA;  &lt;li&gt;Does not move. &lt;span class=&quot;math-container&quot;&gt;$Z_0$&lt;/span&gt; goes through joint 1 &lt;span class=&quot;math-container&quot;&gt;$X$&lt;/span&gt; goes anywhere you like perpendicular to &lt;span class=&quot;math-container&quot;&gt;$Z$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$Y$&lt;/span&gt; follows.&lt;/li&gt;&#xA;  &lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$Z_1$&lt;/span&gt; goes through joint 2. When it comes to &lt;span class=&quot;math-container&quot;&gt;$X_1$&lt;/span&gt;, we are in the special case. Take the &lt;span class=&quot;math-container&quot;&gt;$X_1$&lt;/span&gt; currently drawn on your diagram and shift down so it intersects &lt;span class=&quot;math-container&quot;&gt;$Z_1$&lt;/span&gt; lower than the joint 2. Is it still perpendicular to &lt;span class=&quot;math-container&quot;&gt;$Z_0$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$Z_1$&lt;/span&gt;? Does it still run from &lt;span class=&quot;math-container&quot;&gt;$Z_0$&lt;/span&gt; to &lt;span class=&quot;math-container&quot;&gt;$Z_1$&lt;/span&gt;? Yep. There are infinite choices at all the possible heights which are all valid. This particular choice makes sense because it places the origin right in the middle of joint 2. So if we wanted to know the pose of joint 2, we could just take the transform of frame 1. &lt;span class=&quot;math-container&quot;&gt;$Y$&lt;/span&gt; follows as always.&lt;/li&gt;&#xA;  &lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$Z_2$&lt;/span&gt; goes through the axis of joint 3 (which is a linear axis). This is one reason why frame 2 could not be in frame 1's position, frame 2 must have a &lt;span class=&quot;math-container&quot;&gt;$Z$&lt;/span&gt; passing through the axis of joint 3 and frame 1's position does not lie on this axis. For &lt;span class=&quot;math-container&quot;&gt;$X_2$&lt;/span&gt;, we are in the special case again. Again the choice to put &lt;span class=&quot;math-container&quot;&gt;$X_2$&lt;/span&gt; at the origin of joint 3 makes it easier to identify the location of orientation of joint 3 without an extra transform.&lt;/li&gt;&#xA;  &lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$Z_3$&lt;/span&gt; goes through the axis of joint 4. Again we have a special case and again the choice makes things convenient. &lt;/li&gt;&#xA;  &lt;li&gt;End-effector frame: Technically you could choose any &lt;span class=&quot;math-container&quot;&gt;$Z_4$&lt;/span&gt; here, but your choice would influence where you can put your origin. If you choose &lt;span class=&quot;math-container&quot;&gt;$Z_4$&lt;/span&gt; as parallel to &lt;span class=&quot;math-container&quot;&gt;$Z_3$&lt;/span&gt;, we get the special case again, and can easily place the origin at a particular point of interest. This is the most common method for the end-effector frame.&lt;/li&gt;&#xA;&lt;/ol&gt; &#xA;&#xA;&lt;p&gt;Some notes:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;In some cases, you may want to choose a different end-effector &lt;span class=&quot;math-container&quot;&gt;$Z$&lt;/span&gt;, like if you had a camera on the end and cared more about the orientation of the line-of-sight. This would however constrain your origin to a particular position that may not be the 'location' of the camera.&lt;/li&gt;&#xA;&lt;li&gt;When given a free choice with the &lt;span class=&quot;math-container&quot;&gt;$X$&lt;/span&gt; axis, your choice does not affect any of the subsequent frames. You could slide the current &lt;span class=&quot;math-container&quot;&gt;$X$&lt;/span&gt; choices up and down their &lt;span class=&quot;math-container&quot;&gt;$Z$&lt;/span&gt; axes as much as you like and none of the rules would be broken.&lt;/li&gt;&#xA;&lt;li&gt;There's actually another special case, whereby the &lt;span class=&quot;math-container&quot;&gt;$Z_{n-1}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$Z_n$&lt;/span&gt; intersect. The &lt;span class=&quot;math-container&quot;&gt;$X$&lt;/span&gt; axis is the normal to the plane they form, but it's direction is a free choice, so there are two solutions rather than the usual one (or special infinite).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="17383" LastEditorUserId="17383" LastEditDate="2018-11-15T15:32:53.827" LastActivityDate="2018-11-15T15:32:53.827" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15378" PostTypeId="2" ParentId="15355" CreationDate="2018-03-19T06:39:49.257" Score="1" Body="&lt;p&gt;The open source version of SVO does not have the added option of the edgelets. That can found in SVO2 which is closed source. However, there is a fork of SVO where someone added the edgelet capability which can be found &lt;a href=&quot;https://github.com/HeYijia/svo_edgelet&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="15265" LastActivityDate="2018-03-19T06:39:49.257" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15380" PostTypeId="2" ParentId="12144" CreationDate="2018-03-19T09:50:02.193" Score="1" Body="&lt;p&gt;If your servos are just regular servos modified for continuous rotation, the way to control them is to send a 50Hz PWM signal (20ms period) with a high level time between 1ms (full left) and 2ms (full right).&#xA;You can use the Servo arduino library, which is very easy to use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, Lets assume the servo potentiometer is approximately set to what should be the middle position for the servo.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For continuous rotation to the left, just write &lt;code&gt;myServo.write(0)&lt;/code&gt;.&#xA;The servo will rotate to the left, but since the potentiometer is disconnected from the servo's head, it will never reach the good value, so the servo will keep turning.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To go to the right, use &lt;code&gt;myServo.write(180)&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Stopping the servo might be harder, since you have to find exactly the current position of the potentiometer, but you should manage to do it by several trials.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; #include &quot;Servo.h&quot;&#xA; int servoPin = 9; // connect servo to pin 10&#xA; myServo = Servo();&#xA;&#xA;void setup(void) {&#xA;  myServo.attach(servoPin);&#xA;  Serial.begin(9600); // begin serial monitor&#xA;}&#xA;&#xA;void loop(void) {&#xA;    myServo.write(0);&#xA;    Serial.println(&quot;going to the left!&quot;);&#xA;    delay(2000);&#xA;&#xA;    myServo.write(180);&#xA;    Serial.println(&quot;going to the right!&quot;);&#xA;    delay(2000);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="16643" LastEditorUserId="16643" LastEditDate="2018-03-19T09:57:11.710" LastActivityDate="2018-03-19T09:57:11.710" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15389" PostTypeId="2" ParentId="14959" CreationDate="2018-03-21T00:19:14.310" Score="0" Body="&lt;p&gt;Since you have servo motors, you can record a sequence of motor rotations when you teach the path, then have the robot repeat these saved values as an array of destinations when you repeat the path.   This teach-repeat method is common in robotics.  Other schemes include using other means to learn the path (such as gps data, visual feedback, etc), and mapping these data points to destination values as your robot traverses the path.  &lt;em&gt;Teach-repeat&lt;/em&gt; is a common method of programming robots to follow desired motion profiles. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sorry, I didn’t see your comment about just wanting to display the path until after I had posted my answer.  But the main point still holds:  you need to sample the poses of the robot (either encoder values or independent measurements) during the teaching phase, then use the forward kinematics of your robot to drive your animation.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastEditorUserId="11125" LastEditDate="2018-03-21T00:55:35.523" LastActivityDate="2018-03-21T00:55:35.523" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15390" PostTypeId="1" AcceptedAnswerId="15391" CreationDate="2018-03-21T00:28:00.300" Score="4" ViewCount="723" Body="&lt;p&gt;Our team just finished the &lt;a href=&quot;https://en.wikipedia.org/wiki/FIRST_Robotics_Competition&quot; rel=&quot;nofollow noreferrer&quot;&gt;FRC competition&lt;/a&gt; and I am trying to learn more about robots in general. I'm trying build a robot in a similar setting than the FRC competition. However the RobotRIO is out of my budget.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm currently set on buying a Raspberry PI 3B as main controller board as replacement for the robotRIO.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I do not quite understand how I'm going to power 12v motor. In our FRC build we had this &lt;a href=&quot;http://www.andymark.com/cross-the-road-power-distribution-panel-p/am-2856.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;power distribution panel&lt;/a&gt;, but I'm pretty sure I will fry my raspberry PI.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I believe I need some kind of power distribution board to have 5v and 2.5a for the Raspberry PI. And also 12v on some other pin. Does this exist or am I looking for something that do not exist.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My build would be powered by a 12v battery like these &lt;a href=&quot;http://www.andymark.com/power-patrol-sla1116-12-volt-18ah-batteries-2-pack-p/am-3062.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Interstate Batteries (am-3062)&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="19946" LastEditorUserId="37" LastEditDate="2018-03-21T11:21:39.437" LastActivityDate="2018-03-21T11:21:39.437" Title="How to handle power distribution on a robot?" Tags="&lt;raspberry-pi&gt;&lt;electric&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15391" PostTypeId="2" ParentId="15390" CreationDate="2018-03-21T06:12:26.570" Score="5" Body="&lt;p&gt;For power management, you can use either a DC/DC Convertor, a linear regulator, or a combination of the two.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;DC/DC Converter&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A &lt;a href=&quot;https://en.wikipedia.org/wiki/DC-to-DC_converter&quot; rel=&quot;noreferrer&quot;&gt;DC/DC Converter&lt;/a&gt; changes DC voltage levels.  Three common types are:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Buck_converter&quot; rel=&quot;noreferrer&quot;&gt;Buck Converter&lt;/a&gt;: Takes a higher input voltage to a lower output voltage &lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Boost_converter&quot; rel=&quot;noreferrer&quot;&gt;Boost Converter&lt;/a&gt;: Takes a lower input voltage to a higher output voltage&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/%C4%86uk_converter&quot; rel=&quot;noreferrer&quot;&gt;Cuk Converter&lt;/a&gt;: A combination of a boost and buck converter that can take an input voltage and either boost or drop it.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Linear Regulator&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A &lt;a href=&quot;https://en.wikipedia.org/wiki/Linear_regulator&quot; rel=&quot;noreferrer&quot;&gt;linear regulator&lt;/a&gt; also takes a higher input voltage and provide a lower output voltage.  Typically, the output voltage is &quot;cleaner&quot; with less noise than a DC/DC converter and you will find regulators used to power embedded computers and microcontrollers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;System Recommendations&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can use a Cuk Converter between your battery and the 12V motors.  You can also use a 5V regulator to get the necessary power to your Raspberry Pi.  Instead of using the power distribution panel, you can try everything on a breadboard and then move to a perfboard.  Many of these parts should be available on Digikey, Adafruit, or the electronics vender of your choice.&lt;/p&gt;&#xA;" OwnerUserId="17744" LastActivityDate="2018-03-21T06:12:26.570" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15392" PostTypeId="1" CreationDate="2018-03-21T18:57:35.967" Score="-2" ViewCount="1011" Body="&lt;p&gt;I'm using L298N motor driver to spin stepper motor (42BYGHM809).&#xA;When connecting it to batteries(2*9v), the batteries heats up after few minutes and stop working, and when connecting it to power source, the power source reach it's current limit. I think the driver has not enough resistance, but from searching the web I didn't see any tutorial that recommends using a resistor with the driver.&#xA;I tried to connect 100ohm resistor and it burnt and tried 450ohm resistor and the motor vibrated but didn't spin.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I saw in the web that when using high voltage it is recommended to remove the 12v connector(as seen in picture), but when removing it the driver doesn't turn on (the led remain off), like it not powered on (All the things i've tried above are &lt;strong&gt;with&lt;/strong&gt; the connector).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks for your help.&#xA;&lt;img src=&quot;https://cdn3.bigcommerce.com/s-vt19phz/product_images/uploaded_images/l298n-dual-2a-motor-driver-module-tronixlabs-australia-pinout.jpg?t=1416543556&quot; alt=&quot;jack&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Schematic: &lt;a href=&quot;https://i.stack.imgur.com/Y4O4q.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Y4O4q.png&quot; alt=&quot;Schematic&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Arduino code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;Stepper.h&amp;gt;&#xA;#include &amp;lt;SoftwareSerial.h&amp;gt;&#xA;&#xA;// *** General ***&#xA;const bool DEBUG_MODE = true;&#xA;bool new_input = false;&#xA;bool use_bt = true;&#xA;int motorSpeed = 20;&#xA;&#xA;// *** Stepper ***&#xA;const int stepsPerRevolution = 400;&#xA;Stepper myStepper(stepsPerRevolution, 4, 5, 6, 7);&#xA;float degCount = 0;&#xA;&#xA;// *** communication ***&#xA;SoftwareSerial bt (11,12);&#xA;int usr_input = 0;&#xA;char sign;&#xA;const int BT_WAIT_TIME = 3, SER_WAIT_TIME = 1;&#xA;&#xA;void setup() {&#xA;  if (use_bt){&#xA;    bt.begin(9600);&#xA;    //bt.listen();&#xA;  }&#xA;  Serial.begin(9600);&#xA;  myStepper.setSpeed(motorSpeed);&#xA;}&#xA;&#xA;void loop() {&#xA;&#xA;  // *** Get usr_input from BT or serial ***&#xA;  if (use_bt){ &#xA;    if (bt.available()){&#xA;      Serial.println(&quot;BT&quot;);&#xA;      delay(BT_WAIT_TIME);&#xA;      sign = bt.read();&#xA;      usr_input = (int)bt.read();&#xA;      if (sign == '-'){&#xA;        usr_input = -usr_input;&#xA;      }&#xA;      new_input = true;&#xA;    }&#xA;  }else{&#xA;    if (Serial.available() &amp;gt; 0) { &#xA;      usr_input = (int)Serial.parseInt();&#xA;      delay(SER_WAIT_TIME);&#xA;      while(Serial.available()) Serial.read();&#xA;      new_input = true;&#xA;    }&#xA;  }&#xA;&#xA;  if (new_input){&#xA;      new_input = false;&#xA;      if (DEBUG_MODE)&#xA;        Serial.print(&quot;User input: &quot;);Serial.println(usr_input);&#xA;      rotate(usr_input);&#xA;  }&#xA;}&#xA;&#xA;// Rotate motor approximmatly x degrees and return how much degrees it really did.&#xA;float rotate(int degrees){&#xA;  int steps = round(degrees / 360.0 * stepsPerRevolution);&#xA;  if (DEBUG_MODE)&#xA;    Serial.print(&quot;Steps: &quot;);Serial.println(steps);&#xA;  myStepper.step(steps);&#xA;  float real_degrees = steps * 360.0 / stepsPerRevolution;&#xA;  if (DEBUG_MODE)&#xA;    Serial.print(&quot;Real deg: &quot;);Serial.println(real_degrees);&#xA;  degCount += real_degrees;&#xA;  if (DEBUG_MODE)&#xA;    Serial.print(&quot;Deg count: &quot;);Serial.println(degCount);&#xA;  return real_degrees;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="19955" LastEditorUserId="19955" LastEditDate="2018-03-22T08:06:09.927" LastActivityDate="2018-03-22T14:26:12.357" Title="L298N driver takes too much current" Tags="&lt;motor&gt;&lt;stepper-motor&gt;&lt;driver&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="15393" PostTypeId="1" AcceptedAnswerId="15397" CreationDate="2018-03-21T20:56:41.660" Score="0" ViewCount="135" Body="&lt;p&gt;I see that, in the correction step of Kalman filter, there is an equation to update the covariance matrix. I have been using it in the form:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;P = (I - KH)P'&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Here &lt;code&gt;P&lt;/code&gt; is the covariance matrix, &lt;code&gt;K&lt;/code&gt; is the Kalman Gain and &lt;code&gt;H&lt;/code&gt; is the observation model. The &lt;code&gt;I&lt;/code&gt; is the identity matrix. However, I also see a different equation in some literature:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;P = P' - KSK&lt;sup&gt;T&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;where &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;S = HPH&lt;sup&gt;T&lt;/sup&gt; + Q&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;where &lt;code&gt;Q&lt;/code&gt; is the noise matrix for the observation model. Are these two equations same? If so, how to prove it?&lt;/p&gt;&#xA;" OwnerUserId="10959" LastEditorUserId="10959" LastEditDate="2018-03-22T18:42:54.913" LastActivityDate="2018-03-22T20:28:25.103" Title="The final step in kalman filter to correct/update the covariance matrix" Tags="&lt;kalman-filter&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="15395" PostTypeId="2" ParentId="15392" CreationDate="2018-03-22T14:26:12.357" Score="0" Body="&lt;p&gt;I'm going to guess that the wires from the board to the motor are not connected correctly, but you don't have a clear picture of the board or Arduino and you don't have any picture of the motor connections. What is the resistance on the A coil and B coil? What voltages are you reading if you hold the motor stationary?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is your battery voltage? From &lt;a href=&quot;https://knowledge.ni.com/KnowledgeArticleDetails?id=kA00Z000000P7kCSAS&quot; rel=&quot;nofollow noreferrer&quot;&gt;this NI article&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If the motor moves erratically or not at all, then switch one wire from phase A with one wire from phase B.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That's my best guess at the moment. This is a troubleshooting question, so we need more information about your exact setup. Schematics of how it's &lt;em&gt;supposed&lt;/em&gt; to be connected are less helpful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, if you could link a datasheet or instructions for the board you're using, then that would be a great help, too.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-03-22T14:26:12.357" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15397" PostTypeId="2" ParentId="15393" CreationDate="2018-03-22T19:59:34.577" Score="2" Body="&lt;p&gt;The Kalman Gain is defined as the following:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$K = PH^T (HPH^T + Q)^-1$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From your question, we need to prove:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$P - KSK^T = (I - KH)P$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;primes omitted for simplicity&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Canceling P, and substitute S with the provided definition:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$K (HPH^T + Q)K^T = KHP$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Substitute the first K on the left hand side with the definition of the Kalman gain provided:&#xA;$PH^T (HPH^T + Q)^-1 (HPH^T + Q)K^T = KHP$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;S and it's inverse reduces to identity, we are left with:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$PH^TK^T = KHP$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the transpose property of matrices $(ABC)^T = C^T B^T A^T$ we can rearrange LHS with $P$ as $A$, $H^T$ as $B$, and $K^T$ as $C$:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$(KHP^T)^T = KHP$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since covariance matrix is symmetric, and KHP must be symmetric (this can be inferred from $P' = P - KHP$) therefore:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$KHP = KHP$&lt;/p&gt;&#xA;" OwnerUserId="19965" LastEditorUserId="19965" LastEditDate="2018-03-22T20:28:25.103" LastActivityDate="2018-03-22T20:28:25.103" CommentCount="8" ContentLicense="CC BY-SA 3.0" />
  <row Id="15398" PostTypeId="1" CreationDate="2018-03-22T23:18:50.757" Score="-1" ViewCount="96" Body="&lt;p&gt;I have a point (x,y,z) in the 3D space. This point rotates by theta1 about the arbitrary axis ax1. This axis (ax1) rotates by theta2 about another axis ax2. What will be the new coordinates of the point. I am going to generalize this point transformation to rotation about n arbitrary axes in 3D space. What will be the procedure. Matrix rotation or Quaternion formulation. &#xA;Thank you very much.&lt;/p&gt;&#xA;" OwnerUserId="19967" LastActivityDate="2018-03-24T00:11:59.923" Title="Nested Rotation of a point around arbitrary vector in 3D" Tags="&lt;rotation&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15399" PostTypeId="1" AcceptedAnswerId="15402" CreationDate="2018-03-22T23:58:32.483" Score="2" ViewCount="61" Body="&lt;p&gt;I am building a robot and I have a concern. Will it properly connect a 11.1V 30C 4500mAh to this motor driver :&#xA;&lt;a href=&quot;https://www.pololu.com/product/708&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.pololu.com/product/708&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;thanks in advance ..&lt;/p&gt;&#xA;" OwnerUserId="15380" LastEditorUserId="19448" LastEditDate="2018-03-23T13:58:09.270" LastActivityDate="2018-03-23T15:26:20.430" Title="how to know if the LIPO battery I have is compatible with the motors and motor driver I have" Tags="&lt;battery&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="15400" PostTypeId="2" ParentId="15398" CreationDate="2018-03-23T07:19:36.803" Score="1" Body="&lt;p&gt;Rodrigues' formula rotates a vector around an arbitrary vector in space. You points of course can be considered vectors and this way you can apply this formula. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Rodrigues%27_rotation_formula&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Rodrigues%27_rotation_formula&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You compound the rotation by rotating the point around axis1 then around axis2.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2018-03-23T07:19:36.803" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15402" PostTypeId="2" ParentId="15399" CreationDate="2018-03-23T13:20:16.100" Score="4" Body="&lt;p&gt;You should check your driver specifications and get the battery accordingly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;em&gt;driver&lt;/em&gt; specs you need to check:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Voltage Rating&lt;/strong&gt;  &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The voltage range that the motor is designed to operate. Within the range you can select a voltage value that suits your needs best. &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;No Load Current&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The current drawn by the motor when its running free with nothing connected to the shaft. (For small motors, when you hold them in the hand and the shaft is not yet connect to the wheels, propellers etc).This indicates the minimum current your power supply must be able to provide in order for the motor to turn.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Stall Current&lt;/strong&gt;   &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;When you increase the load on the motor shaft, at some point of time, the motor shaft will stop turning. This is called motor stall. The current drawn by the motor in this state is called the stall current. This is also the maximum current that will be needed by the motor.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Power&lt;/strong&gt;   &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;This is generally given in “Watts”. In a large number of cases, I have seen that the watt rating is not specified. That should not be a problem as long as we have the voltage and current ratings. &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Torque&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;This is an indicator of how much weight the motor can lift at a given distance. If the rating is 1Kgcm, it means, that 1 cm from the shaft, you can attach a maximum of 1Kg load and the motor can lift it.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The &lt;em&gt;battery&lt;/em&gt; specs you need to check:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Voltage Rating&lt;/strong&gt;  &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The voltage a new battery is expected to deliver&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Current/Capacity Rating&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The maximum amount of current a battery can deliver in one hour. This is a very confusing specification. Suppose a battery is rated at 1500mAh. That means, it can deliver 1500mA in one hour. &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Discharge Rate&lt;/strong&gt;  &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;This indicates what is the maximum current a battery can deliver. A 1C rating means, the battery can discharge at Capacity x 1.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;To answer your question&lt;/em&gt;, when you compare these spec values for your driver and battery, if they're in each other's range, you can use your battery with the motor driver.&lt;/p&gt;&#xA;" OwnerUserId="19448" LastEditorUserId="19448" LastEditDate="2018-03-23T15:26:20.430" LastActivityDate="2018-03-23T15:26:20.430" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15403" PostTypeId="1" AcceptedAnswerId="15414" CreationDate="2018-03-23T20:30:58.597" Score="0" ViewCount="42" Body="&lt;p&gt;these days I'm learning Orocos patched with xenomai. Although I have found the ways to create a hard real-time control software, I didn't find any information on how I should use this to control the servo motors and sensors like encoders with them? I have thought that I may have to use Ethernet cables to connect the main PC running the real time kernel with some kind of driver/servo drive so that the PC/micro PC and the driver can communicate with each other in hard real-time. I didn't actually find a practical solution in google like how, and which external drives or hardware should I use. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So can anyone show me the way to complete this task? How should I make my linux PC or microcontroller running real-time software should communicate with industrial level of sensors and motors? I am mentioning industrial level motors cas my project needs the accuracy and control in that level. I don't want to learn any HDL or plc and make it more complicated. &lt;/p&gt;&#xA;" OwnerDisplayName="user14148" LastEditorUserId="19448" LastEditDate="2018-03-24T17:15:45.957" LastActivityDate="2018-03-24T20:07:13.267" Title="controlling industrial servo with pc" Tags="&lt;industrial-robot&gt;&lt;real-time&gt;&lt;driver&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15404" PostTypeId="2" ParentId="15226" CreationDate="2018-03-23T20:53:21.290" Score="3" Body="&lt;p&gt;This sounds a bit like a shopping question, but I'll provide what I know.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The IEEE societies have always provided me a wealth of information.  In addition to the Robotics Society, with its magazine and journal (IEEE Transactions on Robotics and Automation), they also host a fantastic annual conference.  But there are other societies with robotics-related content, also.  For example, their Systems, Man, and Cybernetics society has several journals, and many topics directly related to robotics.  They also have societies which focus on systems, medical devices, and industrial applications with relevant content to an aspiring roboticist.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ASME has similar societies with a broad array of relevant content.  Check out their Journal of Mechanisms and Robotics, or papers from their biannual Design Technical Conferences.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The International Journal of Robotics Research was a seminal journal, and continues to be a leading publisher of robotics research.  There's also the Robotics and Autonomous Systems journal, which I have not personally found too related to my interests, but is an active publication.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Springer-Verlang also publishes some interesting collections of research papers, often in book form.  Their series on Advances in Robot Kinematics has been quite interesting to me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, don't forget to include patent office searches.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm sure there are dozens more good publications.  I'd recommend finding a topic you're interested in studying, then find a seminal paper on that topic.  Tracing back through the chains of references should point you to the publications that have been most active for that topic.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2018-03-23T20:53:21.290" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15405" PostTypeId="1" AcceptedAnswerId="15423" CreationDate="2018-03-23T23:40:30.267" Score="0" ViewCount="29" Body="&lt;p&gt;What is the difference between this two. And which should i choose for hard real time control purpose? What are the cons and pros of them one to another?&lt;/p&gt;&#xA;" OwnerDisplayName="user14148" LastActivityDate="2018-03-25T17:01:31.170" Title="RTnet vs CORBA transport" Tags="&lt;real-time&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15406" PostTypeId="2" ParentId="15398" CreationDate="2018-03-24T00:11:59.923" Score="1" Body="&lt;p&gt;You should look into &lt;a href=&quot;https://en.wikipedia.org/wiki/Denavit%E2%80%93Hartenberg_parameters&quot; rel=&quot;nofollow noreferrer&quot;&gt;Denavit-Hartenberg (DH) parameters&lt;/a&gt;, which are specifically designed for describing the configuration of a robot arm that consists of a sequence of rotational linkages. This sounds like the problem you are trying to address. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The link above provides matrix rotation formulations for applying the parameters. The formulation includes a translational component for moving along each link in a sequence, but this can be zero if you are dealing with a sequence of only pure rotations (or if you rotate around multiple different axes, but about the same point).&lt;/p&gt;&#xA;" OwnerUserId="55" LastActivityDate="2018-03-24T00:11:59.923" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15407" PostTypeId="2" ParentId="15357" CreationDate="2018-03-24T00:41:33.747" Score="3" Body="&lt;p&gt;An alternative visualization would be to draw coordinate axes in the 3D plot to represent each SE(3) point. Provided you have a way to view 3D graphs, this allows the points to be all viewed without projecting down to a lower-dimensional space. e.g., you can do this in Matlab with the &lt;strong&gt;drawframe&lt;/strong&gt; function from &lt;a href=&quot;https://www.mathworks.com/matlabcentral/fileexchange/24589-kinematics-toolbox&quot; rel=&quot;nofollow noreferrer&quot;&gt;Brad Kradochvil's kinematics toolbox&lt;/a&gt;. It draws an arrow of a different color for the X, Y, and Z axes.&lt;/p&gt;&#xA;" OwnerUserId="55" LastEditorUserId="55" LastEditDate="2018-03-26T18:10:46.457" LastActivityDate="2018-03-26T18:10:46.457" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15408" PostTypeId="1" CreationDate="2018-03-24T01:02:11.603" Score="1" ViewCount="714" Body="&lt;p&gt;I would like to use(or control) a gimbal brushless motor like a servo meaning I want to control position not rotation speed. The position must be from 0 to 180 and 0 to -180 &#xA;I will use an Arduino board. And I think a ESC board &#xA;Can I use PWM control offered by servo library? Is it possible?&#xA;Have someone any idea &#xA;a) If is possible to do what I want?&#xA;b) Orientation(guideline) about library usage?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance&lt;/p&gt;&#xA;" OwnerUserId="19971" LastActivityDate="2018-04-24T01:14:41.337" Title="brushless motor as a servo" Tags="&lt;arduino&gt;&lt;brushless-motor&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="15409" PostTypeId="1" AcceptedAnswerId="15413" CreationDate="2018-03-24T06:03:21.947" Score="1" ViewCount="242" Body="&lt;p&gt;Is there a database or website that has collected the seminal papers in different disciplines of robotics like machine learning, AI, mobile robots, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By seminal I mean papers that made a path-breaking impact on the theoretical side, for example, proved a theorem that captivated and inspired a large number of derivative works. So, I am mainly looking for high-impact papers that made fundamental contributions in mathematical modeling, algorithm design etc. and not so much on the hardware application side of it because in that respect videos of Boston dynamics or festo robotics are the better sources of inspiration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know some seminal papers like:-&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Latombe's planning book&lt;/li&gt;&#xA;&lt;li&gt;Khatib's potential field method&lt;/li&gt;&#xA;&lt;li&gt;SLAM paper&lt;/li&gt;&#xA;&lt;li&gt;Kalman's derivation of his filter&lt;/li&gt;&#xA;&lt;li&gt;DP paper by Berketsas&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;But similar seminal papers are missing in say robotic formation control etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my question has someone collected papers that rigorously and mathematically showed some big result in robotics.&lt;/p&gt;&#xA;" OwnerUserId="14868" LastActivityDate="2018-03-25T10:26:03.950" Title="Source of seminal papers in robotics" Tags="&lt;mobile-robot&gt;&lt;artificial-intelligence&gt;&lt;machine-learning&gt;&lt;research&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="15411" PostTypeId="2" ParentId="15409" CreationDate="2018-03-24T09:47:42.157" Score="0" Body="&lt;p&gt;Let us first introduce what “theorem prooving” in mathematics mean. The famous book “The art of computing programming” is devoted to that principle. The idea is, that the book has a theoretical part, for example about sorting, and after each chapter there are questions for the practical part. The students can answer the question, and if they are right, they get the mark I from the professor. Theorem proofing means, to teach only material which is already known. Sometimes the algorithm, which were presented by Knuth were around 100 years old.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What does that mean for the area of robotics? Google Scholar has indeed some papers which can be used for student evaluation. They have mostly a title starting with “formal methods” or “Proof”. The idea is, to present only knowledge which is correct and asks if the students have understand it. This suppresses innovation and prevents that the students are exploring failed robotics projects. The problem in AI is, that in most cases the knowledge is not given. That means, there is no standard way in pathplanning, so it is difficult to force the students to answer such kinds of questions. But there are many subfields in Artificial Intelligence who are well suited for proofing something, for example the AIXI theory of Marcus hutter, or the students can proof that the perceptron is able to master the XOR problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A quite old paper which goes into the direction is &lt;a href=&quot;http://soton.mpeforth.com/flag/jfar/vol2/no2/article2.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Use of Forth in the Instruction of Introductory Robotics&lt;/a&gt; which is using a teaching programming language to proof on a formal level how “Learning from demonstration” works.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2018-03-24T09:47:42.157" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15412" PostTypeId="2" ParentId="15409" CreationDate="2018-03-24T12:33:47.333" Score="1" Body="&lt;p&gt;I am not aware of any online repository that particularly collects seminal papers in robotics. But I think anyone working or having worked in robotics for some time would more or less have their own collection of the so-called seminal papers in their field.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, here are &lt;strong&gt;motion planning&lt;/strong&gt;-related papers that I think are within the scope of this question. (Please feel free to edit this answer to add more content or correct what I wrote should anything is wrong.)&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;blockquote&gt;&#xA;  &lt;p&gt;Lozano-Perez, Tomas. &quot;Spatial planning: A configuration space&#xA;  approach.&quot; IEEE transactions on computers 2 (1983): 108-120.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This is kind of a paradigm shifting paper in motion planning. Previously a robot was always thought of as a 2D or 3D geometric object in the physical space. While motion planning algorithms at the time worked for problems with a 2D/3D polygonal robot moving in a 2D/3D maze and problems with an easy planar manipulator, it was very difficult to generalize such algorithms to solve complex problems consisting of a multi-DOF manipulator, for example. This paper basically says, &quot;Hey, let's treat a robot as a &lt;em&gt;point&lt;/em&gt; to a space (the so-called &lt;em&gt;configuration space&lt;/em&gt;).&quot; Then finding a path for a robot from configuration A to configuration B will simply be a problem of finding a path connecting two &lt;em&gt;points&lt;/em&gt; in the configuration space. And now pretty much any modern planning algorithms operate in configuration space.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;blockquote&gt;&#xA;  &lt;p&gt;Kavraki, Lydia E., Petr Svestka, J-C. Latombe, and Mark H. Overmars.&#xA;  &quot;Probabilistic roadmaps for path planning in high-dimensional&#xA;  configuration spaces.&quot; IEEE transactions on Robotics and Automation&#xA;  12, no. 4 (1996): 566-580.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Kuffner, James J., and Steven M. LaValle. &quot;RRT-connect: An efficient&#xA;  approach to single-query path planning.&quot; In Robotics and Automation, 2000. Proceedings. ICRA'00. IEEE International Conference on, vol. 2, pp. 995-1001. IEEE, 2000.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;These two papers presented ground-breaking motion planning algorithms called Probabilistic Roadmap (PRM) and Rapidly-exploring Random Tree (RRT), respectively. I would not go into details here. But basically they are so fundamental, yet practical. There are literally hundreds of variants being proposed in the literature after these two algorithms.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;blockquote&gt;&#xA;  &lt;p&gt;Karaman, Sertac, and Emilio Frazzoli. &quot;Sampling-based algorithms for&#xA;  optimal motion planning.&quot; The international journal of robotics&#xA;  research 30, no. 7 (2011): 846-894.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This paper presented the very first result of (asymptotically) optimal motion planning algorithms. Novelty of this paper lies not only in the presented algorithms but also the mathematical analysis that was used to prove various properties, including optimality, of planners.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;And since the question also mentioned Latombe's planning book, I would feel so wrong not mentioning the following one&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;blockquote&gt;&#xA;  &lt;p&gt;LaValle, Steven M. Planning algorithms. Cambridge university press,&#xA;  2006.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="7610" LastEditorUserId="7610" LastEditDate="2018-03-24T13:26:10.267" LastActivityDate="2018-03-24T13:26:10.267" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15413" PostTypeId="2" ParentId="15409" CreationDate="2018-03-24T13:50:47.233" Score="2" Body="&lt;p&gt;Nathan Ratliff has documented some very nice papers in Control Theory and Motion Optimization. You can access them &lt;a href=&quot;http://www.nathanratliff.com/reading-lists/2010-control-reading-group&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;http://www.nathanratliff.com/reading-lists/motion-optimization&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;, resp. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Particularly related to decision making problems, you might want to check Geoff Hollinger and Gaurav Sukhatme's &lt;a href=&quot;http://robotics.usc.edu/~geoff/cs599/&quot; rel=&quot;nofollow noreferrer&quot;&gt;course&lt;/a&gt;. The have a good list of readings in a logical flow. In general robotics, you may want to look at Pieter Abbeel's &lt;a href=&quot;https://people.eecs.berkeley.edu/~pabbeel/cs287-fa09/readings/&quot; rel=&quot;nofollow noreferrer&quot;&gt;readings list&lt;/a&gt; for CS287. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Asides for that, one of the first papers my advisor recommended me was that Alberto Rodriguez on &lt;a href=&quot;http://ieeexplore.ieee.org/document/6630599/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Effector Form Design&lt;/a&gt;. It is a beautiful paper with very appealing and seemingly useful mathematical formulation. To put his work into perspective, I think his thesis is worth a read (50 pages or so). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think generally, papers which get like Best Paper Awards in top robotics conferences have sound theoretical grounds. Also, most graduate level courses incorporate good reading material and often these courses are openly accessible.&lt;/p&gt;&#xA;" OwnerUserId="15447" LastEditorUserId="15447" LastEditDate="2018-03-25T10:26:03.950" LastActivityDate="2018-03-25T10:26:03.950" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15414" PostTypeId="2" ParentId="15403" CreationDate="2018-03-24T20:07:13.267" Score="0" Body="&lt;p&gt;Real-time control protocols for drive amplifiers are Ethernet based, but not necessarily compatible with your average Network card. &#xA;You can take a look at the following protocols and decide which is easiest to implement with your setup. Again, you may need specialized network cards for some. You can find drive amplifiers which each of these protocols from major manufacturers (e.g. Bosch-Rexroth, Siemens, Beckhoff).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just fyi in these case &quot;industrial level&quot; means a comms cycle time of downto 1-4 milliseconds. Even less in some cases.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/sercos&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sercos&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/ethercat&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ethercat&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/PROFINET&quot; rel=&quot;nofollow noreferrer&quot;&gt;Profinet&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/EtherNet/IP&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ethernet/IP&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Also, you can by ready-made protocol stack for most of these, usually through the association steering the development of the protocols. You can just embed that as a library in your source code (again, hw compatibility is not necessarily given with every network card)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might want to look at CAN and CANopen. It is not ethernet based, but one of the easiest to use and many Microcontrollers offer CAN communication ports.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You mentioned no plc-s but you might want to take a look at &lt;a href=&quot;https://revolution.kunbus.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;RevPi&lt;/a&gt;, a sort of mix between a PLC and a RasPi with linux.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2018-03-24T20:07:13.267" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="15415" PostTypeId="2" ParentId="15409" CreationDate="2018-03-24T20:22:28.733" Score="0" Body="&lt;p&gt;I would add &lt;a href=&quot;http://www.probabilistic-robotics.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Probabilistic Robotic&lt;/a&gt;s as generally a great book to start mostly mobile robotics. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For Robotics in general, I would start with the &lt;a href=&quot;http://hades.mech.northwestern.edu/index.php/Modern_Robotics&quot; rel=&quot;nofollow noreferrer&quot;&gt;Modern Robotics&lt;/a&gt; book.  &lt;a href=&quot;http://hades.mech.northwestern.edu/index.php/Modern_Robotics&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://hades.mech.northwestern.edu/index.php/Modern_Robotics&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both of these summarize the state of the art at their publication date very well. &lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2018-03-24T20:22:28.733" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15416" PostTypeId="2" ParentId="15312" CreationDate="2018-03-25T00:55:56.767" Score="1" Body="&lt;p&gt;You first need to roslaunch the turtlebot_teleop package with&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;roslaunch turtlebot_teleop keyboard_teleop.launch&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;That fires up the high level teleoperation, which publishes a geometry Twist message on the cmd_vel rostopic. Looking at the launch file, it looks like it will be called &lt;code&gt;cmd_vel_mux/input/teleop&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An option for the low level code is to create your own custom ROS node that subscribes to that specific &lt;code&gt;cmd_vel&lt;/code&gt; rostopic, takes the messages from the turtlebot_teleop and figures out how to properly control the motors.&lt;/p&gt;&#xA;" OwnerUserId="16624" LastActivityDate="2018-03-25T00:55:56.767" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15417" PostTypeId="2" ParentId="15408" CreationDate="2018-03-25T01:00:36.887" Score="1" Body="&lt;p&gt;It's possible, but you need something reading the position of the shaft, since a brushless motor is unaware of its own state. You can use potentiometers, incremental encoders, and absolute angle encoders to reach some approximate reading of the state. Then, you would need a PID controller that accepts desired state as input and as output sends current to the motor based on the error between the desired state and the actual state.&lt;/p&gt;&#xA;" OwnerUserId="16624" LastActivityDate="2018-03-25T01:00:36.887" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15420" PostTypeId="1" AcceptedAnswerId="15431" CreationDate="2018-03-25T04:45:29.377" Score="0" ViewCount="331" Body="&lt;p&gt;In my dynamic model of two wheeled mobile robot, it has the total equivalent inertia, noted $I$, described by the equation below,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gEXBA.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gEXBA.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$I_c$ is the moment of inertia of the DDMR about the vertical&#xA;axis through the center of mass and $I_m$ is the moment&#xA;of inertia of each driving wheel with a motor about the wheel diameter.&#xA;May I know how to measure or calculate $I_c$ and $I_m$? My wheeled mobile robot is Arduino Robot&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/5DuA1.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/5DuA1.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19871" LastEditorUserId="18235" LastEditDate="2018-03-28T18:34:31.170" LastActivityDate="2018-03-28T18:34:31.170" Title="Calculation of inertia values of Ic and Im" Tags="&lt;wheeled-robot&gt;&lt;dynamics&gt;&lt;two-wheeled&gt;&lt;force&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15423" PostTypeId="2" ParentId="15405" CreationDate="2018-03-25T17:01:31.170" Score="0" Body="&lt;p&gt;RTnet and its transport protocol is described at &lt;a href=&quot;http://www.rtnet.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.rtnet.org/&lt;/a&gt;. &quot;Hard Real-Time Networking for Real-Time Linux&quot; (That network and web site use one of the numerous imprecise and conflicting &quot;definitions&quot; of the term &quot;hard real-time.&quot;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are a great many descriptions of the ISO Real-Time CORBA standard on the web (Google). One major difference between RTNet and RTCORBA is that RTCORBA is intended for a wide variety of hard, soft, and non real-time distributed systems. The specification (more carefully) describes what meanings it uses for those terms. To accomplish that range of applicability--and specifically in regard to your question--the RTCORBA spec (not necessarily all vendor implementations) allows for application-specific pluggable transport protocols. Real-time and embedded CORBA products exist which are functionally and performance competitive with RTNet. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which of the two depends on your application. CORBA in general is much more versatile than you need, unless you want to use a very special application-specific (for example, military aircraft) transport protocol which might not be accommodated by RTNet but which would be accommodated by certain RTCORBA implementations. A detailed answer to your question would require a lot of information about your needs and would probably be a very lengthy answer. Start by reading the web documents, being sure you know exactly what network capabilities you need.&lt;/p&gt;&#xA;" OwnerUserId="17898" LastActivityDate="2018-03-25T17:01:31.170" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15425" PostTypeId="1" CreationDate="2018-03-26T07:36:40.020" Score="0" ViewCount="830" Body="&lt;p&gt;I'm looking here for suggestions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a HS-805BB with Torque (Kg-cm/Oz-in): 24.7/343 @ 6.0 V to rotate a robot body up and down from one side. It seems to me that this servo is always running at its maximum torque which is not good for its life span and battery consumption, so I thought of two solutions:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Install a second servo on the other side and have both servos working parallel.&lt;/li&gt;&#xA;&lt;li&gt;Build a gear box to increase the Torque limits. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;What are you suggestions as to which option is most preferable?&lt;/p&gt;&#xA;" OwnerUserId="18826" LastEditorUserId="2289" LastEditDate="2018-03-26T08:40:55.243" LastActivityDate="2018-03-26T08:40:55.243" Title="Increasing Torque by either doubling servos or building a gear box" Tags="&lt;servomotor&gt;&lt;torque&gt;&lt;gearing&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15427" PostTypeId="2" ParentId="15425" CreationDate="2018-03-26T08:01:13.387" Score="1" Body="&lt;p&gt;Installing a second servo for moving the same axis might be problematic from a controls point ofview. Since (I assume) your servos are position controlled (and not torque controlled) delays in commanding them and mechanical toleraces of the assembly may lead to sitations where the two servos act agains each other at the beginning or at the end of motions (maybe even during). E.g. fits servo recieves a command to pull, starts pulling, the other one recieves the same signal a few ms later, until then the first one is actingagainst the second one. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have rpm reserves, installing a gearbox would be a good solution. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can also install some kind of ballancing (e.g. preload with a spring) or counterweight mechanism is your application allows this (e.g. elevator have counterweights, robots have springs sometime in the lowes joint agting against gravity). &lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2018-03-26T08:01:13.387" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="15428" PostTypeId="1" AcceptedAnswerId="15438" CreationDate="2018-03-26T09:33:44.377" Score="0" ViewCount="47" Body="&lt;p&gt;I have this problem of an excavator from a test I took a while ago.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/cIkTR.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/cIkTR.png&quot; alt=&quot;Problem description&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Frame $\underline{\vec{e}}^0$ is the origin.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Frame $\underline{\vec{e}}^1$ rotates around $\underline{\vec{e}}_{3}^0$ with angle $\theta_1$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Frame $\underline{\vec{e}}^2$ rotates around $\underline{\vec{e}}_{2}^1$ with angle $\theta_2$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Frame $\underline{\vec{e}}^3$ rotates around $\underline{\vec{e}}_{2}^2$ with angle $\theta_3$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The question is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/OjF95.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OjF95.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that the velocity vector is expressed as:&#xA;$^{30}{\vec{\omega}}=\dot{\theta}_1\vec{e}_{3}^0+\dot{\theta}_2\vec{e}_{2}^1+\dot{\theta}_3\vec{e}_{2}^2$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I have some trouble expressing it in frame $\underline{\vec{e}}^3$.&#xA;This is what I've come up with:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$^{30}{\vec{\omega}}=\begin{bmatrix} 0 &amp;amp; 0 &amp;amp; \dot{\theta}_1 \end{bmatrix} \underline{A}^{32} \underline{A}^{21} \underline{\vec{e}}^3+\begin{bmatrix} 0 &amp;amp; \dot{\theta}_2 &amp;amp; 0 \end{bmatrix} \underline{A}^{32} \underline{\vec{e}}^3+\begin{bmatrix} 0 &amp;amp; \dot{\theta}_3 &amp;amp; 0 \end{bmatrix}  \underline{\vec{e}}^3$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In which $\quad$$\underline{A}^{21}=\begin{bmatrix} cos(\theta_2) &amp;amp; 0 &amp;amp; -sin(\theta_2) \\ 0 &amp;amp; 1 &amp;amp; 0 \\ sin(\theta_2) &amp;amp; 0 &amp;amp; cos(\theta_2)\end{bmatrix}$,$\quad$ $\underline{A}^{32}=\begin{bmatrix} cos(\theta_3) &amp;amp; 0 &amp;amp; -sin(\theta_3) \\ 0 &amp;amp; 1 &amp;amp; 0 \\ sin(\theta_3) &amp;amp; 0 &amp;amp; cos(\theta_3)\end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm confused about the sequence:$\underline{A}^{32} \underline{A}^{21}$, does this mean you go from frame $1$ to $2$ and then from $2$ to $3$  or should the order be reversed? There's also an expresison for $\underline{A}^{10}$ but I don't think that has to be used here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm confused and the reader that I have from my university isn't helping. Or I'm just to stupid to understand it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance&lt;/p&gt;&#xA;" OwnerUserId="18988" LastActivityDate="2018-03-28T10:06:25.230" Title="Angular velocity vector expression uncertain?" Tags="&lt;robotic-arm&gt;&lt;rotation&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15430" PostTypeId="2" ParentId="13924" CreationDate="2018-03-26T22:22:57.890" Score="2" Body="&lt;p&gt;I would say, this site may helps you to understand where the power of the Kalman-filter lies.&#xA;&lt;a href=&quot;http://www.bzarg.com/p/how-a-kalman-filter-works-in-pictures/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.bzarg.com/p/how-a-kalman-filter-works-in-pictures/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my humble opinion:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;I think basic useful Kalman-filter requires position and speed at least, because as you've said they correlate to each other.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;There is an important thing to do before even implementing anything. Doing an analysis of the motion. I mean by that, what sort of motion does your system produce? A simple Kalman-filter is best at linear motion prediction. If it is non-linear, you have to be clever on how to set up the process noise Q parameter. Let me give you and example:&#xA;You have small vessel you are tracking with a radar. It is known, that your vessel has a non-linear speed (it is not known for the process, when the vessel slows down). In order to adjust the process noise to the situation, hence increasing accuracy, you have to have imply some knowledge in the algorithm, in what cases the speed turns more non-linear. Like, small vessel is usually more manouverable, than a 200 m long one, so Q shall set considering the size for example.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;See four.&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I would say, a 3 state (pos/speed/acc) KF, should do the job if you include angle, then it is even better. Although, if you motion is simple you could also consider an alpha-beta filter as well, which is less intelligent about the history of the motion, but quite fast.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Basically the first state of the KF shall make use of the previous and current position.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I hope this gives a little kick in your project.&lt;/p&gt;&#xA;" OwnerUserId="18318" LastActivityDate="2018-03-26T22:22:57.890" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15431" PostTypeId="2" ParentId="15420" CreationDate="2018-03-26T23:17:43.560" Score="0" Body="&lt;p&gt;You can find equations for the inertia of a cylinder on Wikipedia.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using the equations for a solid cylinder will give similar results as if you calculated or measured the exact inertia of all the subcomponents.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The inertia of the wheels should include the inertia of the motor rotor and gears to be accurate. &lt;a href=&quot;https://www.engineersedge.com/motors/gear_drive_system.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;You can search for and find equations for this too.&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will need to disassemble the motor to get enough information.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Like mass, you can combine inertias by adding them together as long as they have the same reference axis (1D) or frame(3D). &lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2018-03-26T23:17:43.560" CommentCount="0" CommunityOwnedDate="2018-03-26T23:17:43.560" ContentLicense="CC BY-SA 3.0" />
  <row Id="15433" PostTypeId="1" CreationDate="2018-03-27T21:56:54.183" Score="6" ViewCount="2117" Body="&lt;p&gt;We are having an issue where after toggling the create 2 from passive to active, then waiting a few seconds and toggling back to passive while on the charger, all serial communication fails a certain percentage of the time. (Links to images of current and serial communication down below illustrating it).&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Detail&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;We are working to have the Create 2 power a NUC, auto-charge and stay alive for long (multi-month) periods of time. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because we are taking power directly off of the battery (Need higher current), we found that we have to toggle the mode from &lt;code&gt;passive&lt;/code&gt; to &lt;code&gt;full&lt;/code&gt; and back so that it checks the voltage and goes back from trickle charge to full charging if it has been a few hours and the computer has discharged the battery. This is because the trickle charge algorithm does not check voltage as it assumes the load on the roomba is not high enough to discharge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We started with it failing this way and have now verified that if we just plug a laptop into the create through the usb serial cable with nothing else plugged in and then toggle passive/full/wait/passive, a percent of the time we also get comm failures without any separate hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because the create 2 turns off after 5 minutes of no communication, we have tried toggling it every 4 minutes and see that reliably happening, so this is not an issue where the create 2 is just going into sleep mode.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Reproducibility&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;We are seeing a very repeatable issue where the serial communication (Using current generation USB serial cable from iRobot) loses serial communication with the robot some percentage of the time exactly at the point where it starts charging the robot again. After that, no packets come in from the robot for a long while. Some time later, when we have repeatedly tried to toggle from passive to full and back, communication re-appears.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We have verified this using the ROS stack (create_autonomy) and also by directly echoing characters on the command line &lt;code&gt;echo -e &quot;\x07&quot; &amp;gt; /dev/ttyUSB0&lt;/code&gt; to reset things.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When it is in this state, no software resets work, unplugging and replugging the serial cable does not work, etc. We have to take it off the charger physically (or wait for a long time until our system toggles it again and it does work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We have verified that this occurs (When the create 2 is on its charger) on:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Mac only plugged in over the create cable with no power taken from the system.&lt;/li&gt;&#xA;&lt;li&gt;NUC taking power directly off the battery through a dc/dc converter.&lt;/li&gt;&#xA;&lt;li&gt;NUC taking power off an intermediate battery charging from the create.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2&gt;Mitigating it&lt;/h2&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;We have added ferrite beads on all the cables to mitigate any high frequency noise and that does not seem to solve it either.&lt;/li&gt;&#xA;&lt;li&gt;We have also tried 3 different create cables w/ different serial/usb chips and even built our own from scratch and not fixed it.&lt;/li&gt;&#xA;&lt;li&gt;We have tried separately powered usb hubs, unpowered ones and plugging directly in to the computer.&lt;/li&gt;&#xA;&lt;li&gt;We have tried it on 3 separate create 2's.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I have attached links below with graphs of the output data when it fails. When there is a straight line on current/voltage, that is repeated data, showing that it was stuck and not updating. It always happens right when the system steps up the current to start charging again, so it seems to be linked to a current spike - but only breaks it 1 / 5 or 10 times - it just happens that once broken, it stays that way for a very long time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.dropbox.com/s/ppllkr23lsjsz6w/create%202%20battery%202.png?dl=0&quot; rel=&quot;noreferrer&quot;&gt;Communication fails after multiple successful toggles&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.dropbox.com/s/pmqz5ijdng9uuo9/create%202%20battery%201.png?dl=0&quot; rel=&quot;noreferrer&quot;&gt;Detail showing exactly when communication fails&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.dropbox.com/s/t8jp36byhor7fd3/create%202%20battery%203.png?dl=0&quot; rel=&quot;noreferrer&quot;&gt;After many minutes, it is working again&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When it has been broken, I have tried turning off our software and addressing the system by echoing data to it directly for OI to turn off, on, reset, etc and do not see communication resume correctly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If we unplug the roomba from the charger by hand (pull it off), then many times it does work, but not always. If we then reset everything by holding down the buttons, it does seem to work 95% of the time and sometimes we have even had to pull the battery itself to make it work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If someone has encountered this before, advice would be helpful. We had thought that it was ground loop issues, but given it is on so many different cables, roombas, power situations and compute devices, we are trying to figure out what is fundementally wrong with our setup.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="20005" LastActivityDate="2018-07-23T19:39:06.517" Title="Create 2 losing serial communication after toggling full to passive while charging" Tags="&lt;irobot-create&gt;&lt;serial&gt;&lt;roomba&gt;&lt;usb&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="15434" PostTypeId="1" AcceptedAnswerId="15437" CreationDate="2018-03-27T23:11:00.557" Score="1" ViewCount="194" Body="&lt;p&gt;We have used an SMC-108 IMU sensor in a hydrographic survey. This was our first time using this sensor. While processing the data, we noticed that the roll, pitch, and heave values were not right. Turns out, this IMU sensor has to be aligned in a specific orientation to be giving the correct values. We had our IMU oriented in a different direction from what it should be (See image below). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any way we can correct for this misalignment and get the correct roll, pitch and heave information?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance.&lt;a href=&quot;https://i.stack.imgur.com/OYRja.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OYRja.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="20008" LastActivityDate="2018-03-28T09:06:53.757" Title="IMU oriented wrongly. How to correct it to get correct values?" Tags="&lt;imu&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15437" PostTypeId="2" ParentId="15434" CreationDate="2018-03-28T09:06:53.757" Score="0" Body="&lt;p&gt;It seems that only the orientation is not the desired one. Hence you get correct values but they are not the one you expected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To make it systematic I would propose you to build the transformation matrix between your desired sensors location and the one what was used in the survey. This way you get a framework also working if the position of the sensor is off.&#xA;see &lt;a href=&quot;http://www.diag.uniroma1.it/~deluca/rob1_en/08_EulerRPYHomogeneous.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.diag.uniroma1.it/~deluca/rob1_en/08_EulerRPYHomogeneous.pdf&lt;/a&gt; for some theory&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then you can build the transformation matrix of your sensor reading, aka  a rotation matrix construct from the angles, then by multiplying the two transformation matrix you wold get the transformation matrix of your measurements at the give point. It is up to you to go back to roll, pitch, yaw angles. Note that RPY are ambiguous and subject to gimbals lock phenomena, hence rotation matrices are preferred even if they are less compact.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A comprehensive guide to go from one orientation representation to the next, &lt;a href=&quot;https://www.swarthmore.edu/NatSci/mzucker1/papers/diebel2006attitude.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.swarthmore.edu/NatSci/mzucker1/papers/diebel2006attitude.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2018-03-28T09:06:53.757" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15438" PostTypeId="2" ParentId="15428" CreationDate="2018-03-28T10:06:25.230" Score="1" Body="&lt;p&gt;The following holds:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\vec{\underline{e}}^1=\underline{A}^{10}\vec{\underline{e}}^0$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\vec{\underline{e}}^2=\underline{A}^{21}\vec{\underline{e}}^1$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\vec{\underline{e}}^3=\underline{A}^{32}\vec{\underline{e}}^2$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From frame $3$ to $0$ we get: $\vec{\underline{e}}^3=\underline{A}^{32}\underline{A}^{21}\underline{A}^{10}\vec{\underline{e}}^0$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From frame $0$ to $3$ we get: $\vec{\underline{e}}^0=\underline{A}^{01}\underline{A}^{12}\underline{A}^{23}\vec{\underline{e}}^3$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using that $\underline{A}^{xy}=\big(\underline{A}^{yx}\big)^T$ we get:  $\vec{\underline{e}}^0=\big(\underline{A}^{10}\big)^T\big(\underline{A}^{21}\big)^T\big(\underline{A}^{32}\big)^T\vec{\underline{e}}^3$ &lt;/p&gt;&#xA;" OwnerUserId="18988" LastActivityDate="2018-03-28T10:06:25.230" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15439" PostTypeId="1" CreationDate="2018-03-28T20:44:57.523" Score="0" ViewCount="181" Body="&lt;p&gt;I have read through lectures/ tutorials on A* but they have all been via computer simulations. I have an autonomous wheeled robot that is traversing an unknown map (essentially, it'll be a tabletop with no obstacles but has edges it can fall off of); it has an indoor GPS system, IMU, and cliff sensors. I'm trying input a desired waypoint. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does the robot assume that everywhere is traversable, break up the map into a grid, calculate the best path, and go for it OR is it supposed to iterate this process? If the latter, how should the robot proceed in iterating? I'm thinking that it would travel in the &quot;best path&quot; until the cliff sensor is triggered and it will have to recalculate a new best path.&lt;/p&gt;&#xA;" OwnerUserId="20020" LastActivityDate="2018-08-22T14:14:16.060" Title="How often does a robot perform A* (A star) path planning in an unknown map?" Tags="&lt;mobile-robot&gt;&lt;algorithm&gt;&lt;path-planning&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="15440" PostTypeId="2" ParentId="15439" CreationDate="2018-03-29T01:32:34.343" Score="2" Body="&lt;p&gt;There is a dynamic version of A* (or of Dijkstra's algorithm) that was developed to address exactly this problem of trying to do planning on a map as you discover it. It is called D* or occasionally Stentz's algorithm after the originator, Tony Stentz. Have a look at this &lt;a href=&quot;http://planning.cs.uiuc.edu/node616.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;UIUC course page&lt;/a&gt; for a good description of the formulation, and the &lt;a href=&quot;https://en.wikipedia.org/wiki/D*&quot; rel=&quot;nofollow noreferrer&quot;&gt;wikipedia entry&lt;/a&gt; has more info on variants that have been created over time.&lt;/p&gt;&#xA;" OwnerUserId="55" LastActivityDate="2018-03-29T01:32:34.343" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="15442" PostTypeId="2" ParentId="2504" CreationDate="2018-03-29T08:37:39.517" Score="1" Body="&lt;p&gt;&lt;a href=&quot;https://www.researchgate.net/publication/260145899_Robotics_Modelling_Planning_and_Control&quot; rel=&quot;nofollow noreferrer&quot;&gt;enter link description here&lt;/a&gt;You can Use Jacobian Method of course;  couple of the techniques are&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Jacobian Inverse Method&lt;/li&gt;&#xA;&lt;li&gt;Jacobian Transpose Method&lt;/li&gt;&#xA;&lt;li&gt;Jacobian Pseudo_Inverse Method.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;It depends, whether computational cost or accuracy is at stake&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Procedure is as follows:&#xA;compute Transformation Matrix&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Compute FKI (forward Kinematics)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;i.e. (base to Tool Center Point(TCP) Transformation Matrix)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$ T_{6}^{0} = T_{1}^{0}*T_{2}^{1}*T_{3}^{2}*T_{4}^{3}*T_{5}^{4}*T_{6}^{5}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Transformation matrix. In fact you can compute Transformation matrix from base to any point on any link of the robot arm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Joint Velocity and end-effect velocity are related as $\qquad (1)$&#xA;$$V_{e} = J(q)\dot q $$  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;q-&gt; joint position($\theta$),$\dot q$-&gt;joint velocity&lt;/p&gt;&#xA;&#xA;&lt;p&gt;J(q) is the Jacobian of the manipulator (6,dof) matrix&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$J(q) = [z_{i} \times r_{6}^{i};z_{i}]$ for revolute joint&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;def  Matrix Jacobian(q):&#xA;&#xA; Matrix4d tempMat; //(4x4) matrix&#xA;&#xA; for i in range(0,dof):&#xA;&#xA;    tempMat = get_T(i)  //transformation matrix from i-1 to i&#xA;&#xA;    Ri    = R[i-1]*tempMat[0:3;0:3] //orientation Matrix&#xA;    Ti    = T[i-1]*tempMat&#xA;&#xA;    zi  = Ri[:,2]&#xA;    Oi  = Ti[0:3,3]&#xA;&#xA;&#xA;    for i in range(0,dof):  &#xA;    Vector3d tempVec = zi.cross( Oi[dof] - Oi[i] )&#xA;    Jmat[0:3,i] = tempVec&#xA;    Jmat[3:6,i] = zi&#xA;&#xA;    return Jmat&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;$z_{i}$-&gt;direction axis-i $3^{rd}$ column of $T_{1}^{0}*T_{2}^{1}..*T_{i-1}^{i}$ Matrix &#xA;$r_{i}^{6} = r_{0}^{6} - r_{0}^{i}$ note(this is vector operation)is position vector from joint i to TCP(end-effector)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus to solve Inverse Kinematics&#xA;do the inverse of velocity relation equation(1) as:&#xA;$$\dot q = J^{(-1)}(q)*V_{e} $$   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$q = q_{0} + \int \dot q dt $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;or do numerical integration in case of a discrete motion (which is mostly the case in real robot control)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$q = q_{prev} + qd*\Delta t$$, $$\Delta t -&amp;gt; sampling \ time $$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;for Better and clear understanding read&#xA;&lt;a href=&quot;https://www.researchgate.net/publication/260145899_Robotics_Modelling_Planning_and_Control&quot; rel=&quot;nofollow noreferrer&quot;&gt;By these Authors&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="20022" LastEditorUserId="20022" LastEditDate="2018-03-30T04:02:11.990" LastActivityDate="2018-03-30T04:02:11.990" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15444" PostTypeId="1" CreationDate="2018-03-29T15:20:21.903" Score="2" ViewCount="262" Body="&lt;p&gt;I am working on kinematics of 5-DOF robot. I already derived geometric Jacobian for position and orientation control. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But for singularity analysis, I require a simplified jacobian. And that can be obtained on base of &lt;a href=&quot;https://en.wikipedia.org/wiki/Screw_theory&quot; rel=&quot;nofollow noreferrer&quot;&gt;screw theory&lt;/a&gt; called &lt;a href=&quot;http://mechanismsrobotics.asmedigitalcollection.asme.org/article.aspx?articleid=1451074&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;strong&gt;Screw Based Jacobian.&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I am not able to find the method to obtain screw based jacobian matrix; which completely explain the method to derive screw based jacobian.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any advice on where I can get it? Please help me out.&lt;/p&gt;&#xA;" OwnerUserId="19034" LastEditorUserId="110" LastEditDate="2021-01-23T20:18:56.573" LastActivityDate="2021-01-23T20:18:56.573" Title="Screw based Jacobian" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;jacobian&gt;&lt;screw-theory&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15448" PostTypeId="1" CreationDate="2018-03-29T19:58:52.953" Score="1" ViewCount="37" Body="&lt;p&gt;i have question about AR Drone 2.0. i am using ROS Gazebo and Python. my question is &lt;strong&gt;how to get velocity of quadcopter?&lt;/strong&gt; i need velocity to count position of quadcopter. Thankyou.&lt;/p&gt;&#xA;" OwnerUserId="20029" LastActivityDate="2018-03-29T19:58:52.953" Title="how to get velocity of Ar drone 2.0" Tags="&lt;quadcopter&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="15451" PostTypeId="2" ParentId="2504" CreationDate="2018-03-30T09:57:46.050" Score="1" Body="&lt;p&gt;Well, I totally understand your problem. You want to solve inverse kinematics problem using Jacobian inversion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) Firstly you need to compute Jacobian matrix. for that you may refer book &quot;RObotics and control&quot; by R K mittal and I J Nagrath or J Crag. you have 6 DOF manipulator, for that you will get 6 x 6 matrix. &#xA;You need to take note that which 3 rows are linar velocity and which are angular velocity. Generally first 3 rows are of liner and last 3 rows are of angular velocity(this is recommended).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) Understand jacobian kinematics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;$Ve = J(q)*Vq $&lt;/strong&gt; .....(eq 1)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where Ve is end effector velocty and  Vq is the joint velocty.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;so, for mapping joint velocty you need jacobian inverse &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;$Vq = inv(J(q))*Ve$&lt;/strong&gt; ..... (eq 2)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3) Now, how you can input Ve. So, for that you need to understand that the  that jacobian base IK is the iterative method to solve IK. You need large number of iteration to obtain the required goal position and orientation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ve can be inputted in form of error vector. Error vector is the difference between the target position vector and current or home position vector. In your case it will be 6 x 1 matrix.&#xA;Home position vector can be calculated by forward kinematcs.&#xA;And target position vector can be calculated by the matrix you provided. the vector is in form [position vector, orientation vector]. position vector is 3 x 1 vctor form right top of transformation matrix and orientatin matrix is 3 x3  matrix at left top corner, you need to convert in euler angle 3x1 matrix.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;4) Now you can apply eq-2 to solve inverse kinematics. This will approximate your solution. At the end of each iteration you need to calculte error vector. you need to define least square error when you stop iterating.&lt;/p&gt;&#xA;" OwnerUserId="19034" LastActivityDate="2018-03-30T09:57:46.050" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15452" PostTypeId="2" ParentId="15264" CreationDate="2018-03-30T16:04:45.583" Score="3" Body="&lt;p&gt;As pointed out in my earlier comment, this is actually simpler than you may think.  Remember, $qs$ and $qr$ are fundamentally &lt;a href=&quot;https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation&quot; rel=&quot;nofollow noreferrer&quot;&gt;different&lt;/a&gt;, where the former represents &lt;em&gt;orientation&lt;/em&gt; (in reference to the outside world) and the latter represents &lt;em&gt;rotation&lt;/em&gt; (irrespective of any reference coordinate system).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You're right in saying that you don't need to do any additional transformations and that your new orientation $qs'$ will be given by:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$qs' = qs \times qr$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;$qs$ is the previous &lt;a href=&quot;https://en.wikipedia.org/wiki/Position_(vector)&quot; rel=&quot;nofollow noreferrer&quot;&gt;position&lt;/a&gt;, and&lt;/li&gt;&#xA;&lt;li&gt;$qr$ is a single rotation by a given &lt;a href=&quot;https://en.wikipedia.org/wiki/Axis%E2%80%93angle_representation&quot; rel=&quot;nofollow noreferrer&quot;&gt;angle $\theta$ about a fixed axis&lt;/a&gt; (obtained from the gyroscope).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's presume a simple analogy with straight line displacement;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\delta s = v \times \delta t$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given an initial position $s$, it can be said that moving at a velocity $v$ for a period of time $t$ sees us ending up at a final position $s'$:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$s' = s + \delta s$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similarly, presume &lt;em&gt;angular&lt;/em&gt; displacement (rotation in one axis);&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\delta \theta = \omega \times \delta t$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given an initial &lt;em&gt;angular&lt;/em&gt; position $\theta$, it can be said that moving at an &lt;em&gt;angular&lt;/em&gt; velocity $\omega$ for a period of time $t$ sees us ending up at a final &lt;em&gt;angular&lt;/em&gt; position $\theta'$:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\theta' = \theta + \delta \theta$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, presume angular displacement in &lt;em&gt;three-dimensional space&lt;/em&gt; (rotation in three axes) that, according to &lt;a href=&quot;https://en.wikipedia.org/wiki/Euler%27s_rotation_theorem&quot; rel=&quot;nofollow noreferrer&quot;&gt;Euler's rotation theorem&lt;/a&gt;, is &lt;em&gt;equivalent&lt;/em&gt; to a single rotation by a given angle $\theta$ about a fixed axis $\hat \omega$;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$qr_w = \cos \dfrac{\theta}{2}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$qr_x = \omega_x \times \sin \dfrac{\theta}{2}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$qr_y = \omega_y \times \sin \dfrac{\theta}{2}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$qr_z = \omega_z \times \sin \dfrac{\theta}{2}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given initial &lt;em&gt;three-dimensional&lt;/em&gt; angular positions (orientation) $qs$, it can be said that moving at angular velocities $\omega_x$, $\omega_y$ and $\omega_z$ for a period of time $t$ sees us ending up at final &lt;em&gt;three-dimensional&lt;/em&gt; angular positions (orientation) $qs'$:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$qs' = qs \times qr$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore, as straight line displacement $\delta s$ can be accumulated to track the position along a straight line $s$, so can angular displacements about three axes (or, rather, their single &lt;em&gt;equivalent&lt;/em&gt; angular displacement about the Euler axis $qr$) be accumulated to track angular position in three-dimensional space (orientation) $qs$.&lt;/p&gt;&#xA;" OwnerUserId="9770" LastEditorUserId="9770" LastEditDate="2018-04-06T03:45:47.890" LastActivityDate="2018-04-06T03:45:47.890" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="15454" PostTypeId="1" CreationDate="2018-03-30T23:27:07.397" Score="-1" ViewCount="404" Body="&lt;p&gt;I am making a line follower to follow a white line (approx 1.7 cmm wide) on a black track. I am using an array of 5 TCRT5000 (IR led+phototransistor) to detect the line. I was previously working with PID but recently I found a few papers on fuzzy logic. Some of them showed fuzzy logic being better than PID. Is fuzzy logic a better choice than PID for my case? I want my bot to as fast as possible. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S- The bot is just following a constant width line on a track with a few slopes of 18 deg.&lt;/p&gt;&#xA;" OwnerUserId="19915" LastActivityDate="2021-01-02T11:04:25.500" Title="PID vs Fuzzy line follower" Tags="&lt;pid&gt;&lt;algorithm&gt;&lt;line-following&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="15456" PostTypeId="1" AcceptedAnswerId="20609" CreationDate="2018-03-31T05:39:49.403" Score="2" ViewCount="311" Body="&lt;p&gt;My question is a bit specific, because it is linked to a certain algorithm. Therefore I didn't find any other solutions on how to go about this problem. If you could refer me to research papers, instructions or anything similar which is already available in regard to this problem, I would really appreciate it. Thank you in advance for reading my post and taking your time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am currently trying to find out how someone would go about &lt;em&gt;supporting&lt;/em&gt; the &lt;strong&gt;pose estimation&lt;/strong&gt; in a &lt;strong&gt;Visual SLAM algorithm&lt;/strong&gt;, since the optimization procedure would overwrite that initial guess anyway. But what if I want to have the algorithm use the real world scale of the reconstructed camera trajectory? Suppose, I know the prefectly accurate trajectory of how the camera moved (&lt;em&gt;ground truth&lt;/em&gt;). In my view it should be as easy as &lt;strong&gt;setting the new poses for every frame&lt;/strong&gt;. Unfortunately my try to replace the camera poses with this information actually &quot;broke&quot; the algorithm (that is, it didn't help with the pose estimation, but lead to it failing entirely). Now, I am a bit sceptical as to whether or not this is even possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's make my question more specific:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is an algorithm called Direct Sparse Odometry (compare: &lt;a href=&quot;https://vision.in.tum.de/research/vslam/dso&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://vision.in.tum.de/research/vslam/dso&lt;/a&gt;). It is not based on detecting and matching features (so called &quot;&lt;em&gt;indirect&lt;/em&gt;&quot; methods) but operates on a direct comparison of pixel intensities (thus called a &quot;&lt;em&gt;direct&lt;/em&gt;&quot; method). At the time of this writing the current open sourced version is tailored for monocular input videos / image sequences. You can see that there are actually three parts that are central to initializing the new pose:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;1.) CoarseInitializer::setFirst()&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is called once as tracking of the camera movement starts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Source: &lt;a href=&quot;https://github.com/JakobEngel/dso/blob/master/src/FullSystem/CoarseInitializer.cpp#L771&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/JakobEngel/dso/blob/master/src/FullSystem/CoarseInitializer.cpp#L771&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;2.) CoarseInitializer::trackFrame()&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is called for the first few frames to initialize the scene based on the beginning of the recorded sequence. To me it seems like it is used to get the rotation and scaling of the cameras right at the beginning. This procedure uses a high amount of points / pixels to estimate the initial configuration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Source: &lt;a href=&quot;https://github.com/JakobEngel/dso/blob/master/src/FullSystem/CoarseInitializer.cpp#L114&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/JakobEngel/dso/blob/master/src/FullSystem/CoarseInitializer.cpp#L114&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;3.) CoarseTracker::trackNewestCoarse()&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After initialization is completed (around 10 frames), the camera pose is being tracked across the sequence. However, the number of points used to track the camera is reduced signifcantly to speed up the tracking. This method is executed in a loop until the end of the recording.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Source: &lt;a href=&quot;https://github.com/JakobEngel/dso/blob/master/src/FullSystem/CoarseTracker.cpp#L556&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/JakobEngel/dso/blob/master/src/FullSystem/CoarseTracker.cpp#L556&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Question:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How would one incoorporate the ground truth in this algorithm? Or in general: Is replacing initial poses (basically the lines in the source code where the default constructor is called to define a pose) a good idea or does it need to be more sophisticated than that?&#xA;Maybe it is even possible to get a measure of how well the estimation is (something like a hessian for the poses and not for the individual points) in order to compare, but let's clarify if the fundamental basics for such a comparison can be laid out first. ;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any input is highly appreciated. Thank you!&lt;/p&gt;&#xA;" OwnerUserId="20040" LastActivityDate="2020-05-04T09:50:29.703" Title="How to properly initialize every new pose in a Visual SLAM algorithm (namely DSO)?" Tags="&lt;odometry&gt;&lt;c++&gt;&lt;pose&gt;&lt;monocular&gt;&lt;estimation&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15460" PostTypeId="1" CreationDate="2018-04-01T11:59:43.117" Score="1" ViewCount="245" Body="&lt;p&gt;In most implementations of quadcopter control systems I've seen, each axis of the quadcopter is controlled independently. For example, to control the rate in the roll axis, the desired output is calculated using a PID controller with the error as input, and that output is applied as a difference in thrust between the corresponding motors. I know this works, It's what I currently use in my quadcopter, but it has always bothered me that the relationship between euler angles is ignored, so I've been trying to find a proper justification for this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Controlling the thrust of each motor we can directly control the torque vector, as described in the &quot;Torques&quot; section of &lt;a href=&quot;http://andrew.gibiansky.com/downloads/pdf/Quadcopter%20Dynamics,%20Simulation,%20and%20Control.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; article. In that article the quadcopter dynamics model is described, but when it starts describing the PD control part it says this as justification for setting each component of the torque proportional to an euler angle: $\text{Torques are related to our angular velocities  by } \tau = I\ddot \theta$, where $\theta$ refers to the yaw pitch roll angles vector, but unless I'm missing something that equation is valid for the angular velocity vector, not the yaw pitch roll vector. The implementation used in that article first chooses the torque vector based on the euler angles, and then solves for motor thrusts, and they  obtain good results, but I don't understand the justification.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any justification for using the euler angles to control each axis independently?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: Seeing that the equation that transforms euler angle derivatives to angular velocities is (the $\theta$ in the right is the $(\phi,\theta,\psi)$  vector) : $$\omega=\begin{bmatrix} 1 &amp;amp;0&amp;amp;-s_\theta\\&#xA;0 &amp;amp; c_\phi &amp;amp; c_\theta s_\phi\\&#xA;0  &amp;amp;-s_\theta &amp;amp;c_\theta c_\phi\end{bmatrix}\dot\theta$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems it might just be a small angle approximation (since the matrix is close to the identity when the angles are small).&lt;/p&gt;&#xA;" OwnerUserId="20051" LastEditorUserId="20051" LastEditDate="2018-04-01T15:50:53.347" LastActivityDate="2018-04-01T15:50:53.347" Title="Treatment of euler angles in quadcopter control" Tags="&lt;quadcopter&gt;&lt;pid&gt;&lt;kinematics&gt;" AnswerCount="0" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15461" PostTypeId="1" AcceptedAnswerId="15474" CreationDate="2018-04-01T14:17:27.730" Score="0" ViewCount="155" Body="&lt;p&gt;I am trying to estimate focus of expansion for a moving camera mounted in a mobile robot. I am using the method described in &lt;a href=&quot;https://www.dgp.toronto.edu/~donovan/stabilization/opticalflow.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; method page 13-14. My aim is to use it to avoid obstacle using optical flow. I have attached the code below. Calculating the terms when I display the calculated point it keeps jumping around and isnt correct. Any advice would be appreciated.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void calculate_FOE(vector&amp;lt;Point2f&amp;gt; prev_pts, vector&amp;lt;Point2f&amp;gt; next_pts)&#xA;&#xA;    MatrixXf A(next_pts.size(),2);&#xA;    MatrixXf b(next_pts.size(),1);&#xA;    Point2f tmp;&#xA;&#xA;    for(int i=0;i&amp;lt;next_pts.size();i++)&#xA;    {&#xA;&#xA;        tmp= prev_pts[i]-next_pts[i];&#xA;        A.row(i)&amp;lt;&amp;lt;prev_pts[i].x-next_pts[i].x,prev_pts[i].y-next_pts[i].y;&#xA;        b.row(i)&amp;lt;&amp;lt;(prev_pts[i].x*tmp.x)-(prev_pts[i].y*tmp.y);&#xA;&#xA;    }&#xA;&#xA;&#xA;    Matrix&amp;lt;float,2,1&amp;gt; FOE;&#xA;    FOE=((A.transpose()*A).inverse())*A.transpose()*b;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="16715" LastEditorUserId="19448" LastEditDate="2018-04-02T19:59:42.320" LastActivityDate="2018-05-03T00:31:15.060" Title="Estimation of Focus of expansion" Tags="&lt;computer-vision&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15462" PostTypeId="2" ParentId="15461" CreationDate="2018-04-01T17:10:55.390" Score="0" Body="&lt;p&gt;Have you tried reversing your derivatives so that velocities are specified forward in time? i.e., do &lt;code&gt;next_pts - prev_pts&lt;/code&gt; instead of &lt;code&gt;prev_pts - next_pts&lt;/code&gt;. Negating all the constraint equations could result in the crazy instability you describe.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It also looks like &lt;code&gt;A.row(i)&lt;/code&gt; can be simplified to just &lt;code&gt;tmp&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you haven't already, you should also try visualizing the optical flow results that are feeding into this estimation, to make sure that they look good enough for you, as a human, to identify FOE from them.&lt;/p&gt;&#xA;" OwnerUserId="55" LastEditorUserId="55" LastEditDate="2018-04-02T21:33:26.800" LastActivityDate="2018-04-02T21:33:26.800" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15464" PostTypeId="1" AcceptedAnswerId="15482" CreationDate="2018-04-02T04:31:05.043" Score="2" ViewCount="1201" Body="&lt;p&gt;A common practice in Bundle Adjustment is to reduce the state dimension by marginalizing structure or pose states to improve the optimization speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case 3d points(structure) $\textbf{p}_i$ are marginalized out as follows, $\textbf{p}_i$ are triangulated to calculate residual $\textbf{e} $.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\textbf{e} = \textbf{z}_{ij} - \pi(\textbf{T}_j\textbf{p}_i)$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $\textbf{T}_j\in SE(3), \textbf{p}_i\in R^3$ are the states we want to estimate and $\textbf{z}_{ij}$ is the observed feature in $R^2$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And just optimize the pose related terms only.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\begin{bmatrix}&#xA; \textbf{H}_{cc}&amp;amp; \textbf{H}_{cs} \\ &#xA;\textbf{H}_{sc} &amp;amp; \textbf{H}_{ss} &#xA;\end{bmatrix}&#xA;\begin{bmatrix}&#xA; \mathbf{\xi}_c \\ &#xA;\textbf{p}_s &#xA;\end{bmatrix}=&#xA;\begin{bmatrix}&#xA; \textbf{g}_{c} \\ &#xA;\textbf{g}_{s}  &#xA;\end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\bar{\textbf{H}}_{cc}=\textbf{H}_{cc}-\textbf{H}_{cs}{\textbf{H}_{ss}}^{-1}\textbf{H}_{sc}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\bar{\textbf{g}}_{c}=\textbf{g}_{c}-\textbf{H}_{cs}{\textbf{H}_{ss}}^{-1}\textbf{g}_{s}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\bar{\textbf{H}}_{cc}\mathbf{\xi}_c =\bar{\textbf{g}}_{c}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here my question arises. If we can calculate 3d points $\textbf{p}_i$ by the triangulation, only $\textbf{T}_j$ are the state variable to be estimated. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, why are we bothered to calculate marginalization related terms $-\textbf{H}_{cs}{\textbf{H}_{ss}}^{-1}\textbf{H}_{sc}$ and $-\textbf{H}_{cs}{\textbf{H}_{ss}}^{-1}\textbf{g}_{s}$ instead of optimizing only poses by ${\textbf{H}}_{cc}\mathbf{\xi}_c ={\textbf{g}}_{c}$ (note that H and g are without bar).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I guess  ${\textbf{H}}_{cc}\mathbf{\xi}_c ={\textbf{g}}_{c}$ is enough to find the optimal poses $\textbf{T}_j$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, my question is why do we use $\bar{\textbf{H}}_{cc}\mathbf{\xi}_c =\bar{\textbf{g}}_{c}$ instead of ${\textbf{H}}_{cc}\mathbf{\xi}_c ={\textbf{g}}_{c}$? &lt;/p&gt;&#xA;" OwnerUserId="19219" LastEditorUserId="19219" LastEditDate="2018-04-03T02:22:41.190" LastActivityDate="2018-04-26T19:33:23.040" Title="Why do we need a marginalization in Bundle Adjustment?" Tags="&lt;slam&gt;&lt;computer-vision&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="15465" PostTypeId="1" AcceptedAnswerId="15468" CreationDate="2018-04-02T05:31:22.307" Score="1" ViewCount="156" Body="&lt;p&gt;As far as I know, OctoMap or any other grid occupancy maps are only for mapping. How do they handle a loop closure problem? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first method came to my mind is optimizing a pose graph in the backend and send the corrected map to grid map library to fuse and build the map again from the beginning. But I dought that they do this. What's the secret?&lt;/p&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2018-04-02T08:16:02.907" Title="Do we need a backend graph optimizer for OctoMap?" Tags="&lt;occupancygrid&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15466" PostTypeId="1" CreationDate="2018-04-02T06:11:29.467" Score="1" ViewCount="59" Body="&lt;p&gt;We know that when rotational and linear velocity of the camera is high it is highly likely to get blurred images. The blurred image affects the quality of the accuracy in the feature tracking problem. Assuming that these velocities are known, how do we penalize the period of the low quality tracks?   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, let $\textbf{p}_i\in R^3$ be $i_{th}$ 3d point and $\textbf{z}_{ij} \in R^2$  $j_{th}$ projected feature at $i_{th}$ camera pose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Than, the objective function in the bundle adjustment problem is defined as&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\textbf{e} = \textbf{z}_{ij} - \pi(\textbf{T}_j\textbf{p}_i)$  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If we know the velocity at $\textbf{T}_j$ how do we apply this information to the optimization?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An instant idea came to my mind is utilizing the velocity in terms of  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$f = \textbf{e}^T\Sigma_j^{-1}\textbf{e}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where the covariance is $\Sigma_j=I_{3\times3}v$. v is velocity. It might work but looks huristic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyone knows a related literature?&lt;/p&gt;&#xA;" OwnerUserId="19219" LastEditorUserId="19219" LastEditDate="2018-04-03T06:14:55.290" LastActivityDate="2018-04-03T06:14:55.290" Title="How to penalize blurred images in Bundle Adjustment?" Tags="&lt;slam&gt;&lt;mapping&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15467" PostTypeId="1" CreationDate="2018-04-02T07:39:42.743" Score="0" ViewCount="199" Body="&lt;p&gt;My apologies but I've run out of ideas. I'm very new to python and stuck trying to execute the following code from this &lt;a href=&quot;https://admin.insights.ubuntu.com/2018/03/09/your-first-robot-the-driver-4-5/?_ga=2.86327889.810740371.1522598579-83214094.1519979733&quot; rel=&quot;nofollow noreferrer&quot;&gt;tutorial&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#!/usr/bin/env python&#xA;&#xA;import rospy&#xA;from geometry_msgs.msg import Twist&#xA;&#xA;import RPi.GPIO as GPIO&#xA;&#xA;&#xA;# Set the GPIO modes&#xA;GPIO.setmode(GPIO.BCM)&#xA;GPIO.setwarnings(False)&#xA;&#xA;_FREQUENCY = 20&#xA;&#xA;&#xA;def _clip(value, minimum, maximum):&#xA;    # &quot;&quot;&quot;Ensure value is between minimum and maximum.&quot;&quot;&quot;&#xA;&#xA;    if value &amp;lt; minimum:&#xA;        return minimum&#xA;    elif value &amp;gt; maximum:&#xA;        return maximum&#xA;    return value&#xA;&#xA;class Motor:&#xA;    def __init__(self, forward_pin, backward_pin):&#xA;        self._forward_pin = forward_pin&#xA;        self._backward_pin = backward_pin&#xA;&#xA;        GPIO.setup(forward_pin, GPIO.OUT)&#xA;        GPIO.setup(backward_pin, GPIO.OUT)&#xA;&#xA;        self._forward_pwm = GPIO.PWM(forward_pin, _FREQUENCY)&#xA;        self._backward_pwm = GPIO.PWM(backward_pin, _FREQUENCY)&#xA;&#xA;    def move(self, speed_percent):&#xA;        speed = _clip(abs(speed_percent), 0, 100)&#xA;&#xA;        # Positive speeds move wheels forward, negative speeds &#xA;        # move wheels backward&#xA;        if speed_percent &amp;lt; 0:&#xA;            self._backward_pwm.start(speed)&#xA;            self._forward_pwm.start(0)&#xA;        else:&#xA;            self._forward_pwm.start(speed)&#xA;            self._backward_pwm.start(0)&#xA;&#xA;class Driver:&#xA;    def __init__(self):&#xA;        rospy.init_node('driver')&#xA;&#xA;        self._last_received = rospy.get_time()&#xA;        self._timeout = rospy.get_param('~timeout', 2)&#xA;        self._rate = rospy.get_param('~rate', 10)&#xA;        self._max_speed = rospy.get_param('~max_speed', 0.5)&#xA;        self._wheel_base = rospy.get_param('~wheel_base', 0.091)&#xA;&#xA;        # Assign pins to motors. These may be distributed&#xA;        # differently depending on how you've built your robot&#xA;        self._left_motor = Motor(13, 15)&#xA;        self._right_motor = Motor(36, 32)&#xA;        self._left_speed_percent = 0&#xA;        self._right_speed_percent = 0&#xA;&#xA;        # Setup subscriber for velocity twist message&#xA;        rospy.Subscriber(&#xA;            'cmd_vel', Twist, self.velocity_received_callback)&#xA;&#xA;    def velocity_received_callback(self, message):&#xA;        # &quot;&quot;&quot;Handle new velocity command message.&quot;&quot;&quot;&#xA;&#xA;        self._last_received = rospy.get_time()&#xA;&#xA;        # Extract linear and angular velocities from the message&#xA;        linear = message.linear.x&#xA;        angular = message.angular.z&#xA;&#xA;        # Calculate wheel speeds in m/s&#xA;        left_speed = linear - angular*self._wheel_base/2&#xA;        right_speed = linear + angular*self._wheel_base/2&#xA;&#xA;        # Ideally we'd now use the desired wheel speeds along&#xA;        # with data from wheel speed sensors to come up with the&#xA;        # power we need to apply to the wheels, but we don't have&#xA;        # wheel speed sensors. Instead, we'll simply convert m/s&#xA;        # into percent of maximum wheel speed, which gives us a&#xA;        # duty cycle that we can apply to each motor.&#xA;        self._left_speed_percent = (100 * left_speed/self._max_speed)&#xA;        self._right_speed_percent = (100 * right_speed/self._max_speed)&#xA;&#xA;    def run(self):&#xA;        # &quot;&quot;&quot;The control loop of the driver.&quot;&quot;&quot;&#xA;&#xA;        rate = rospy.Rate(self._rate)&#xA;&#xA;        while not rospy.is_shutdown():&#xA;            # If we haven't received new commands for a while, we&#xA;            # may have lost contact with the commander-- stop&#xA;            # moving&#xA;            delay = rospy.get_time() - self._last_received&#xA;            if delay &amp;lt; self._timeout:&#xA;                self._left_motor.move(self._left_speed_percent)&#xA;                self._right_motor.move(self._right_speed_percent)&#xA;            else:&#xA;                self._left_motor.move(0)&#xA;                self._right_motor.move(0)&#xA;&#xA;            rate.sleep()&#xA;&#xA;    def main():&#xA;        driver = Driver()&#xA;&#xA;        # Run driver. This will block&#xA;        driver.run()&#xA;&#xA;if __name__ == '__main__':&#xA;    main()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I get get the following error:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;(classic)adeoduye@localhost:~/catkin_ws$ rosrun simple_robot_navigation driver_node_controller&#xA;    Traceback (most recent call last):&#xA;      File &quot;/home/adeoduye/catkin_ws/src/simple_robot_navigation/src/driver_node_controller&quot;, line 117, in &amp;lt;module&amp;gt;&#xA;        main()&#xA;    NameError: name 'main' is not defined&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;BTW, it's ROS code which I have implemented in my custom &lt;strong&gt;&lt;em&gt;catkin_ws/src/simple_robot_navigation&lt;/em&gt;&lt;/strong&gt; package. I suspect it's a python issue but I very new at python and not sure how to fix it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would appreciate any help.&lt;/p&gt;&#xA;" OwnerUserId="14355" LastActivityDate="2018-04-02T14:04:45.467" Title="Main not defined package python issue" Tags="&lt;ros&gt;&lt;python&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15468" PostTypeId="2" ParentId="15465" CreationDate="2018-04-02T08:16:02.907" Score="2" Body="&lt;p&gt;There is no secret. OctoMap was not really designed with pose refinement in mind. You can even see one of the authors of RGBD-SLAM mention it &lt;a href=&quot;https://answers.ros.org/question/170996/rgbdslam-runs-without-issues-but-octomap-does-not-connectreceive-pointcloud-transforms/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you did want to try and still use octomap with loop closure then the approach that you mention could work. You could probably make it a bit more efficient by only deleting the poses in Octomap that were affected by the loop closure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One possibility you could also use is to utilize the probabilistic aspect of OctoMap. On your first run set the pointclouds to have a very low probability. With the loop closure update you then add another set of pointclouds with a much higher probability. Octomap will take care of the fusing for you so this idea could work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you do ,however, want mapping software that is built to deal with changing poses due to loop closure and bundle adjustment then I would advise you to look into Thomas Wheelans work on deformable pose graphs specifically with Bundlefusion and Elasticfusion.&lt;/p&gt;&#xA;" OwnerUserId="15265" LastActivityDate="2018-04-02T08:16:02.907" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15470" PostTypeId="2" ParentId="15467" CreationDate="2018-04-02T14:04:45.467" Score="1" Body="&lt;p&gt;I suspect that there are some indentation error in the tutorial.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the example code, the function &lt;code&gt;main&lt;/code&gt; is defined as a function of the class &lt;code&gt;Driver&lt;/code&gt;. However, as the actual code of &lt;code&gt;main&lt;/code&gt; goes, it creates an instance of the class &lt;code&gt;Driver&lt;/code&gt; and run it. So I think the function definition should be at the same indentation level as the class definition. What you need to do is to remove the indentation of the function definition of &lt;code&gt;main&lt;/code&gt;. That is, remove four white spaces such that the function definition would be&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;def main():&#xA;    driver = Driver()&#xA;    driver.run()&#xA;&#xA;if __name__ == '__main__':&#xA;    main()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="7610" LastActivityDate="2018-04-02T14:04:45.467" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15471" PostTypeId="5" CreationDate="2018-04-02T20:54:46.263" Score="0" Body="&lt;p&gt;The Jacobian is the matrix of partial derivatives of a function. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For robot arms, the Jacobian relates joint velocities to end-effector velocity. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Jacobian Inverse Kinematic method is one method to solve inverse kinematic problems. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Jacobian method&lt;/strong&gt; was largely used in robotics research so that a robot arm could reach an object of interest. This method is very powerful, but also has the potential to be computationally expensive and unstable if it is not understood well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Jacobian methods have three main steps from a top-down perspective:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Find the joint configurations: $T$&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Compute the change in rotations: $dO$&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Compute the Jacobian: $J$&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="19448" LastEditorUserId="110" LastEditDate="2018-04-03T18:39:31.517" LastActivityDate="2018-04-03T18:39:31.517" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15472" PostTypeId="4" CreationDate="2018-04-02T20:54:46.263" Score="0" Body="The Jacobian is the matrix of partial derivatives of a function.&#xD;&#xA;&#xD;&#xA;For robot arms, the Jacobian relates joint velocities to end-effector velocity.&#xD;&#xA;&#xD;&#xA;Jacobian Inverse Kinematic method is one method to solve inverse kinematic problems." OwnerUserId="19448" LastEditorUserId="110" LastEditDate="2018-04-03T18:37:46.900" LastActivityDate="2018-04-03T18:37:46.900" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15474" PostTypeId="2" ParentId="15461" CreationDate="2018-04-02T22:57:03.677" Score="0" Body="&lt;p&gt;The focus of expansion (FOE) is the point in the image that has the smallest cross product with all of the optical flow vectors. Each optical flow vector has a previous point and a delta. Let $p_x$ and $p_y$ be the x and y positions of the previous position of an optical flow vector. Let $dx$ and $dy$ be the change in x and y position between the previous location and the current location. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The cross product between a single optical flow vector and the FOE is&#xA;\begin{equation}&#xA;M = &#xA;\begin{bmatrix}&#xA;\hat i &amp;amp; \hat j &amp;amp; \hat k \\&#xA;p_x-foe_x &amp;amp; p_y - foe_y &amp;amp;0\\&#xA;dx &amp;amp; dy &amp;amp;0&#xA;\end{bmatrix}&#xA;\end{equation}&lt;/p&gt;&#xA;&#xA;&lt;p&gt;\begin{equation}&#xA;M = \hat k \left( (p_x - foe_x)dy - (p_y - foe_y)dx \right)&#xA;\end{equation}&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The moment, $M$, is what we want to minimize. So setting $M$ equal to zero we can solve for the FOE.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;\begin{equation}&#xA;\begin{bmatrix}&#xA;-dy &amp;amp; dx \\&#xA;... &amp;amp; ... \\&#xA;\end{bmatrix}&#xA;\begin{bmatrix}&#xA;foe_x \\ foe_y\\&#xA;\end{bmatrix} = &#xA;\begin{bmatrix}&#xA;p_ydx-p_x dy \\&#xA;...\\&#xA;\end{bmatrix}&#xA;\end{equation}&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that my matrices do not match the matrices in the paper; their $v$ term is positive while I believe it should be negative.&lt;/p&gt;&#xA;" OwnerUserId="8842" LastActivityDate="2018-04-02T22:57:03.677" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15475" PostTypeId="2" ParentId="15354" CreationDate="2018-04-02T23:47:58.563" Score="1" Body="&lt;p&gt;We have tried it and have a stably working system using a DC DC voltage converter directly off the battery. We have seen issues though where it will try to run the converter even when the 14-18v battery is at 4 volts so can extremely deep discharge the battery. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you do this, I would suggest calculating your max current load you want to run and validating it won't over-tax the battery in an un-safe way or have significant spikes in power that will be a problem across the system.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Buffer voltage + UPS battery&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Therefore, we introduced a buffer inbetween (OpenUPS or battery backup battery) to buffer it, clean things up better and allow the computer to function without the create being powered.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Compute platform shutdown on low power&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;We also set up an automatic shutdown of the laptop if voltage becomes too low and &quot;return to dock&quot; commands after 15 minutes to make sure it re-charges itself as regularly as possible if not being actively used.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Check charge regularly on charger&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Additionally, we found that on the charger, when in trickle charge mode, the system does not actually test the voltage (Expects it to always be full), so the computer will discharge the battery and it won't turn the charger back on. You therefore have to pull it out of passive mode and then trigger it again (Back out then dock and charge) and it will correctly check the voltage and charge.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;State&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;This is currently not a fully tested system, but have have tried it on multiple create 2's / NUC's / Laptops and have had the system recharging itself for 10+ days in a row while powering lidar, camera, NUC, create, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you try this, would love to hear how it goes for you and improvements you see as valuable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please also just be careful and have a fire extinguisher near-by. ;-)&lt;/p&gt;&#xA;" OwnerUserId="20005" LastActivityDate="2018-04-02T23:47:58.563" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="15476" PostTypeId="2" ParentId="12846" CreationDate="2018-04-03T00:10:20.200" Score="2" Body="&lt;p&gt;We are also seeing the same problem and have identified a few things which specifically help.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We are trying to get it to stay awake on the charger so we can monitor it and therefore tried toggling into full then passive modes, however encountered a crash where it freezes communication when it toggles back in to passive mode afterwards. &lt;a href=&quot;https://robotics.stackexchange.com/questions/15433/create-2-losing-serial-communication-after-toggling-full-to-passive-while-chargi&quot;&gt;stack overflow link&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A few things to verify:&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Change Interval&lt;/h3&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;It looks like you are sending it out once a minute. Have you tried every 30 seconds? See the link below but this could be the issue where it goes to sleep every minute. Given you have older firmware this could be an issue. (Guessing it isn't, but need to note it) &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;One link I found states that there may be a bug in the firmware for the 600 series which actually makes it fall asleep after 1 minute and also not wake up: &quot;The latest Roomba 600 models will go to sleep after 1 minute on the dock. Unfortunately iRobot has disabled the serial communication when Roomba is asleep on the dock. We think this is a bug in iRobots firmware and we hope they will fix this soon.&quot; &lt;a href=&quot;http://www.thinkingcleaner.com/compatibility.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;link&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Double number of pulses&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Have you tried sending out 2 pulses in a row, a few seconds apart to see if a fast interval would work and replicate the second pulse, but faster? A solution like sending out those pulses every minute could possible make it work.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Send pulse when communication stops&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;If you are monitoring the packet rate, you can send a pulse when the packet rate goes to 0, restarting it immediately if it responds while asleep.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Charger vs not&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Are you trying this on the charger and having it fail? I would suggest trying to see if the behavior is different while on the charger and off as we have seen a fully responsive robot off the charger for toggling all states but are having trouble with stability of communications while charging where it freezes and then re-appears minutes later which confused our team a lot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; We have firmware version: &lt;code&gt;r3-robot/tags/release-stm32-3.7.5:6216&lt;/code&gt; so it is significantly newer (3.7 vs 3.2 than yours).&lt;/p&gt;&#xA;" OwnerUserId="20005" LastActivityDate="2018-04-03T00:10:20.200" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15478" PostTypeId="1" AcceptedAnswerId="15480" CreationDate="2018-04-03T15:09:51.027" Score="0" ViewCount="276" Body="&lt;p&gt;I am trying to estimate the orientation of a sensor platform using gyroscope and accelerometer. I am using a &lt;code&gt;Kalman filter&lt;/code&gt; based approach. I integrate the readings from gyro to obtain the orientation about x, y and z axis. This is will act as the process model. I am planning to use accelerometer readings as observation. I know how to estimate the angles of orientation when the accelerometer is reading only gravity, by using acceleration components in x, y and z. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, when the sensor platform is moving or accelerating (i.e. gravity is not the only acceleration the sensor is reading), can accelerometer provide orientation/ tilt estimation without the help of any other sensor? Can this approach work without using a third sensor when the sensor platform has high acceleration?&lt;/p&gt;&#xA;" OwnerUserId="10959" LastEditorUserId="10959" LastEditDate="2018-04-03T15:16:44.597" LastActivityDate="2018-04-03T16:01:56.673" Title="Orientation estimation using gyro and accelerometer when sensor platform has high acceleration" Tags="&lt;kalman-filter&gt;&lt;gyroscope&gt;&lt;accelerometer&gt;&lt;orientation&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15480" PostTypeId="2" ParentId="15478" CreationDate="2018-04-03T16:01:56.673" Score="1" Body="&lt;p&gt;General movement is not a problem even at high velocity but, as you already described, acceleration is. There are a couple mitigating factors that allow many platforms to still (mostly) assume the accelerometer is a gravity measurement&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Short bursts of acceleration can be filtered out (e.g. if $||a|| &amp;gt;&amp;gt; ||a_g||$ ignore the reading)&lt;/li&gt;&#xA;&lt;li&gt;High frequency acceleration oscillations average out to zero over time. This just means you have to increase the measurement noise parameter of the filter&lt;/li&gt;&#xA;&lt;li&gt;If you happen to know the maneuver acceleration you can simply adjust the accelerometer measurement accordingly. This case is rather unlikely though (there's a reason we need sensors in the first place)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;When this is not the case, such as for a missile which has long periods of sustained non-gravity acceleration, you simply need a different sensor.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2018-04-03T16:01:56.673" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15481" PostTypeId="1" AcceptedAnswerId="15490" CreationDate="2018-04-03T18:14:50.593" Score="2" ViewCount="106" Body="&lt;h2&gt;&lt;strong&gt;Given Data and Algorithm&lt;/strong&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I have a stream of SE3 poses supplied by a basic wheel encoder odometry through ROS message passing system. Odometry publishes data in &lt;a href=&quot;http://www.ros.org/reps/rep-0105.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;traditional&lt;/a&gt; to ROS ENU coordinate frame (X - forward, Y - left, Z - up) with right chirality.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I present this trajectory on graphs below (TX, TY, RZ):&lt;br&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/mQ1hrm.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/mQ1hrm.png&quot; alt=&quot;tx&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/aBpoNm.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/aBpoNm.png&quot; alt=&quot;ty&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/KuQvWm.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KuQvWm.png&quot; alt=&quot;rz&quot;&gt;&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It should be obvious that other 3 dimensions have all zeros in them, as the wheel odometry poses have only 3DoF.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then I rotate this stream of poses to another coordinate frame, customary for Visual SLAM (Z - forward, X - right, Y - down). The acquired result is shown below and is &lt;strong&gt;not&lt;/strong&gt; what I have expected.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;More Formally:&lt;br&gt;&#xA;Let's say agent's camera is aligned with principal axes of agent and relative translation from camera to agent center is neglected. In other words: $P_{C_i}^{B_i} = \text{Id}$.&lt;br&gt;&#xA;I have a stream of SE3 transformations from current place of agent's body to Odometry World Coordinate Frame: $$P_{B_0}^{W_O}, P_{B_1}^{W_O}, P_{B_2}^{W_O}, \dots$$&#xA;I need to observe this motion from standpoint of a Visual Slam:&lt;br&gt;&#xA;$$P_{C_0}^{W_V}, P_{C_1}^{W_V}, P_{C_2}^{W_V}, \dots$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I do this in a following manner: $$P_{C_i}^{W_V} = P_{W_O}^{W_V} \cdot  P_{B_i}^{W_O} \cdot P_{C_i}^{B_i} = P_{W_O}^{W_V} \cdot  P_{B_i}^{W_O}$$&#xA;I define $P_{W_O}^{W_V} = (\text{Quaternion}(\text{Euler}(-90, -90, 0)), (0, 0, 0))$, where Euler is intrinsic and active, and order is $(z,x,y)$. &#xA;The resulting quaternion $\text{qxyz}$ is $(\frac 1 2, \frac 1 2, -\frac 1 2, \frac 1 2)$ and Euler angles choice can be verified geometrically with the help of the following picture: &#xA;&lt;a href=&quot;https://i.stack.imgur.com/jSstum.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/jSstum.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;  &lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&lt;strong&gt;Results Interpretation and Question&lt;/strong&gt;&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I have plenty of positive X and positive Y translational movement in the start of dataset, and some yaw rotation along Z axis later on.&lt;br&gt;&#xA;So, when I look at this motion from Visual World coordinate frame, I&#xA;&lt;strong&gt;expect&lt;/strong&gt; a plenty of positive Z and negative X translational movement in the start of dataset, and some yaw rotation along -Y axis later on.&lt;br&gt;&#xA;While the linear part behaves exactly as I describe, the rotation does something else. And I am bewildered by results and count on your help.&lt;br&gt;&#xA;It's terrible to realize that these group operations on SO3 are still a mystery to me.&lt;br&gt;&#xA;Comparison graphs are shown below (TX,TY,TZ,RX,RY,RZ):&lt;br&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/xfkE9m.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xfkE9m.png&quot; alt=&quot;tx&quot;&gt;&lt;/a&gt; &#xA;&lt;a href=&quot;https://i.stack.imgur.com/xw6oym.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xw6oym.png&quot; alt=&quot;ty&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/UL0zim.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/UL0zim.png&quot; alt=&quot;tz&quot;&gt;&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/xeQdCm.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xeQdCm.png&quot; alt=&quot;rx&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/7Ebgzm.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7Ebgzm.png&quot; alt=&quot;ry&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/xsegrm.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xsegrm.png&quot; alt=&quot;rz&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sorry for the longpost!  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Meta&lt;/strong&gt;:&lt;br&gt;&#xA;I have long pondered where to post: in Math or Robotics. I have finally decided for the latter, for the question seems very &quot;applied&quot;.&lt;/p&gt;&#xA;" OwnerUserId="20068" LastEditorUserId="20068" LastEditDate="2018-04-04T09:58:44.170" LastActivityDate="2018-04-05T12:55:02.367" Title="SE3 composition operator gives unexpected results" Tags="&lt;ros&gt;&lt;odometry&gt;&lt;rotation&gt;&lt;visual-odometry&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15482" PostTypeId="2" ParentId="15464" CreationDate="2018-04-03T19:14:35.877" Score="2" Body="&lt;p&gt;I am still not entirely sure what you are asking, but I believe this may answer your question. Also note I myself don't fully understand all the details behind the marginalization trick, but I will attempt to explain why it is used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lets first setup how the optimization problem looks for your two different possibilities with just 2 cameras. So we are only solving for 1 pose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the actual bundle adjustment reprojection error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$ \displaystyle \min_{T,p} \sum_{i=1}^{p}  (P_i-T(\pi(p_i))^2 $ $\quad Eq1$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You solve for $T$(pose/transform) and $p$(points) in one optimization problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And here is the 2nd version to only find the poses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$ \displaystyle \min_{T} \sum_{i=1}^{p}  (P_i-T(\pi(p_i))^2 \quad Eq2$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After solving for the pose($T$) with $Eq2$ you would then apply some sort of triangulation method to solve for the 3d points. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lets agree on the fact that $Eq1$ will be more accurate then applying the 2nd method when it comes to finding the position of the poses. This is because it allows for error in the 3d points. The 2nd method assumes that the positions of the 3d points is correct. However, $Eq1$ is also a lot slower than $Eq2$ cause you are also optimizing for the points($p$).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now for why we use the marginalization trick. We would apply the marginalization to Eq1. You do all the math you have written above, and are able to solve for the $T$ without also optimizing the points($p$). Remember how I said $Eq1$ was more accurate, but slower. Well with the marginalization we are able to reduce the problem into only solving for the pose($T$), but still keep most of the accuracy. So with marginalization we can almost do the exact same as $Eq2$, but with the accuracy of $Eq1$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I typically know this trick as the Schur complement, however it also appears in the EKF formulations as some sort of null space trick.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;References:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://smartech.gatech.edu/bitstream/handle/1853/53717/Carlone14icra.pdf?sequence=1&amp;amp;isAllowed=y&quot; rel=&quot;nofollow noreferrer&quot;&gt;GTSAM Smart Factors&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://pdfs.semanticscholar.org/2e79/75fb0351638bd2646a217e5885ae56ca5cff.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;MSCEKF&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.cs.jhu.edu/~misha/ReadingSeminar/Papers/Triggs00.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Bundle Adjustment&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15265" LastActivityDate="2018-04-03T19:14:35.877" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="15483" PostTypeId="1" AcceptedAnswerId="15484" CreationDate="2018-04-03T21:44:34.763" Score="2" ViewCount="132" Body="&lt;p&gt;Is there a closed-form solution of $\textbf{R}\textbf{R}_1=\textbf{R}_2\textbf{R}$ with respect to $\textbf{R}\in SO(3)$?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\textbf{R}_1$, $\textbf{R}_2 \in SO(3)$ are given.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Added:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried holmeski's solution but it fails because of rank deficiency in A matrix.(why?) The following code simulates holmeski's solution in matlab. (please correct me if the code is incorrect) &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;clear all&#xA;cTl=rotx(rand*100)*roty(rand*100)*rotz(rand*100)&#xA;lTc = inv(cTl)&#xA;&#xA;for k = 1: 9&#xA;    l1Tl2{k}=rotx(rand*100)*roty(rand*100)*rotz(rand*100)&#xA;    c1Tc2{k}= cTl*l1Tl2{k}*lTc;&#xA;end&#xA;R = calib_RR1_R2R_closedform(l1Tl2,c1Tc2)  &#xA;&#xA;&#xA;function R = calib_RR1_R2R_closedform(l1Tl2,c1Tc2_klt)    &#xA;&#xA;Astack=[]&#xA;for k = 1:length(l1Tl2)&#xA;    R1 = l1Tl2{k}(1:3,1:3);&#xA;    R2 = c1Tc2_klt{k}(1:3,1:3);&#xA;    A = [ R1(1,1) + R1(1,2) + R1(1,3) - R2(1,1) - R2(1,2) - R2(1,3), R1(2,1) + R1(2,2) + R1(2,3) - R2(2,1) - R2(2,2) - R2(2,3), R1(3,1) + R1(3,2) + R1(3,3) - R2(3,1) - R2(3,2) - R2(3,3), R1(1,1) + R1(1,2) + R1(1,3) - R2(1,1) - R2(1,2) - R2(1,3), R1(2,1) + R1(2,2) + R1(2,3) - R2(2,1) - R2(2,2) - R2(2,3), R1(3,1) + R1(3,2) + R1(3,3) - R2(3,1) - R2(3,2) - R2(3,3), R1(1,1) + R1(1,2) + R1(1,3) - R2(1,1) - R2(1,2) - R2(1,3), R1(2,1) + R1(2,2) + R1(2,3) - R2(2,1) - R2(2,2) - R2(2,3), R1(3,1) + R1(3,2) + R1(3,3) - R2(3,1) - R2(3,2) - R2(3,3)]&#xA;    Astack = [Astack; A];&#xA;end&#xA;&#xA;det(Astack)&#xA;&#xA;[U S V] = svd(Astack);&#xA;x=V(:,end);&#xA;R=reshape(x,3,3);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="19219" LastEditorUserId="19219" LastEditDate="2018-04-04T20:09:54.903" LastActivityDate="2018-04-22T22:23:33.390" Title="A closed-form solution of $\textbf{R}\textbf{R}_1=\textbf{R}_2\textbf{R}$ w.r.t $\textbf{R}$" Tags="&lt;rotation&gt;" AnswerCount="3" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15484" PostTypeId="2" ParentId="15483" CreationDate="2018-04-03T22:16:55.203" Score="2" Body="&lt;p&gt;I believe you can solve this using a least squares approach since all the math in equation is linear. Rearrange the equation so&#xA;\begin{equation}&#xA;\bf RR_1 -R_2R = 0&#xA;\end{equation}&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Set up the relation &#xA;\begin{equation}&#xA;\bf Ax = b&#xA;\end{equation}&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where the vector $\bf x$ contains all values of $\bf R$, $\bf B$ is a $[9,1]$ zero vector, and $\bf A$ is a $[9,9]$ matrix which contains the $\bf R_1$ and $R_2$ terms. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then solve for $\bf x$&#xA;\begin{equation}&#xA;\bf x = A^{-1} b&#xA;\end{equation}&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'll then have to restructure the $\bf x$ vector back into $\bf R$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know this may not be exactly what you're looking for but it is a closed form solution.&lt;/p&gt;&#xA;" OwnerUserId="8842" LastActivityDate="2018-04-03T22:16:55.203" CommentCount="6" ContentLicense="CC BY-SA 3.0" />
  <row Id="15485" PostTypeId="1" CreationDate="2018-04-04T01:25:19.137" Score="0" ViewCount="74" Body="&lt;p&gt;With the conversion of the DD control line to BRC on the series 500/600/Create 2 I have not been able to find a reliable way to wake the Create 2 from sleep. The spec suggests not letting it sleep by pulsing they BRC control but that would not fit my Use Case&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyone successful in waking Create 2 after sleep?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&#xA;Frank&lt;/p&gt;&#xA;" OwnerUserId="19572" LastActivityDate="2018-06-25T20:22:03.000" Title="Waking Create 2 from sleep" Tags="&lt;irobot-create&gt;" AnswerCount="1" CommentCount="0" ClosedDate="2018-07-19T16:29:48.323" ContentLicense="CC BY-SA 3.0" />
  <row Id="15487" PostTypeId="2" ParentId="14903" CreationDate="2018-04-04T14:07:08.210" Score="1" Body="&lt;p&gt;If you are trying to implement torque control, you only need a control loop around torque. The challenge isn't in trying to integrate the torque (or acceleration) controller, and passing it to a velocity control loop, then finally passing it to a position control loop.  The challenge is in finding the torque setpoints for your torque control loop so that the manipulator achieves the desired performance.  For this you need a model of your robot + environment if you want to use torque control to follow position profiles.  That model will be where you incorporate $s^2$ differentiation to get to desired accelerations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I have to ask - &lt;em&gt;why&lt;/em&gt; are you implementing torque control to achieve positional stability?  This gets very complicated if the impedance of your robot's environment changes.  For example, of the system is lifting a box, controlling the torque can result in the desired positional profile.  But what if the robot encounters an immovable object - then you will never get the commanded positional changes.  Or, what if you have multiple heavy and light boxes?  The position-to-torque model must account for these things.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See @MarkBooth's answer to &lt;a href=&quot;https://robotics.stackexchange.com/questions/10052/position-control-vs-velocity-control-vs-torque-control&quot;&gt;this SE question about position, velocity, and torque control.&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2018-04-04T14:07:08.210" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="15488" PostTypeId="2" ParentId="15483" CreationDate="2018-04-04T18:37:27.170" Score="1" Body="&lt;p&gt;After long hours of search, I realized that it is not a simple problem at all. There are many related papers exists published back in the 1980s &lt;a href=&quot;https://arxiv.org/pdf/1706.03498.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;1&lt;/a&gt;, &lt;a href=&quot;http://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=326576&quot; rel=&quot;nofollow noreferrer&quot;&gt;2&lt;/a&gt;. The short summary is as follows&lt;/p&gt;&#xA;&#xA;&lt;p&gt;\begin{equation}&#xA;^L\textbf{R} \textbf{R}=\textbf{R} ^C\textbf{R}&#xA;\end{equation}&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$^L\textbf{R}_{i}=\boldsymbol{e}^{[^L\textbf{r}_i]_\times}&#xA;, ^C\textbf{R}_i=\boldsymbol{e}^{[^C\textbf{r}_i]_\times}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\textbf{M} = \sum_{i=1}^{I}{^L\textbf{r}_i {^C\textbf{r}_i^\top}}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\textbf{R} = (\textbf{M}^\top\textbf{M})^{-1/2}\textbf{M}^\top$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Single pair of rotation is not enough to decide the unique solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, the following post is actually asking the same question. &lt;a href=&quot;https://math.stackexchange.com/questions/206623/solution-to-ax-xb-for-3-times3-rotation-matrices&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If scale translation should be considered as well, Eq 8.27 of &lt;a href=&quot;https://link.springer.com/book/10.1007%2F978-3-662-04567-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;this book&lt;/a&gt; has the answer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is matlab implementation of this problem.&lt;a href=&quot;https://github.com/RobotMa/axxb_calibration&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19219" LastEditorUserId="19219" LastEditDate="2018-04-05T22:42:23.750" LastActivityDate="2018-04-05T22:42:23.750" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="15489" PostTypeId="1" CreationDate="2018-04-04T19:42:39.580" Score="2" ViewCount="527" Body="&lt;p&gt;I did a search and couldn't find a site that stood out as RC. I was hoping you guys would be closest. Here's my question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I bought a set of Eachine EV100 FPV goggles. Every resource I've looked at said I should update the dipole antennas. These have antenna diversity and not true diversity. I'm new to FPV and can't say I know what that means. As best I understand it true diversity has two receivers and it switches to the antenna with the strongest signal, where as antenna diversity just uses one receiver and combines the signals somehow to improve it. I could be completely pulling that out of a hat, though. It might not be right at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So one youtuber upgraded his, using a clover leaf style and a patch antenna. Another youtube source I trust suggested using two clover leaf styles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd like to know if you can use a clover and a patch together with just antenna diversity or if I would be better off getting the two pack of clover leafs the other guys recommended.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know the clover leaf is for picking up signals in 360 degrees where the patch is much stronger when it's pointed directly at the source. I just don't know how this stuff works, so I don't know if it works like that with these goggles or if they actually interfere and make it worse. If it doesn't cause issues, I'd think the patch and clover leaf would be the way to go. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks for any help you can provide, even if it's telling me the correct forum to post this in.&lt;/p&gt;&#xA;" OwnerUserId="20081" LastEditorUserId="18235" LastEditDate="2018-10-29T08:25:01.463" LastActivityDate="2021-03-02T01:09:00.970" Title="Multiple antenna styles on FPV without true diversity" Tags="&lt;quadcopter&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15490" PostTypeId="2" ParentId="15481" CreationDate="2018-04-05T12:24:02.983" Score="1" Body="&lt;p&gt;The mystery has been solved. In reality, the equality does not hold in the last part of the proposition, stated in the question:&lt;br&gt;&#xA;$$P_{C_i}^{W_V} = P_{W_O}^{W_V} \cdot  P_{B_i}^{W_O} \cdot P_{C_i}^{B_i} \ne P_{W_O}^{W_V} \cdot  P_{B_i}^{W_O}$$  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;More specifically: $$P_{C_i}^{B_i} \ne \text{Id}$$&#xA;But In reality: $$ P_{C_i}^{B_i} = \big[ P_{W_O}^{W_V} \big]^{-1} = P_{W_V}^{W_O}$$&#xA;Hence:&lt;br&gt;&#xA;$$P_{C_i}^{W_V} = P_{W_O}^{W_V} \cdot  P_{B_i}^{W_O} \cdot P_{C_i}^{B_i} = P_{W_O}^{W_V} \cdot  P_{B_i}^{W_O} \cdot P_{W_V}^{W_O} $$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Such a transformation yields correct rotation of agent in Visual World coordinate frame:&lt;br&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/JVYyIm.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JVYyIm.png&quot; alt=&quot;rx&quot;&gt;&lt;/a&gt;  &lt;a href=&quot;https://i.stack.imgur.com/LgMWqm.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/LgMWqm.png&quot; alt=&quot;ry&quot;&gt;&lt;/a&gt;  &lt;a href=&quot;https://i.stack.imgur.com/AuLmim.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/AuLmim.png&quot; alt=&quot;rz&quot;&gt;&lt;/a&gt;  &lt;/p&gt;&#xA;" OwnerUserId="20068" LastEditorUserId="20068" LastEditDate="2018-04-05T12:55:02.367" LastActivityDate="2018-04-05T12:55:02.367" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15493" PostTypeId="2" ParentId="9301" CreationDate="2018-04-05T18:12:49.040" Score="1" Body="&lt;p&gt;So there are actually 2 different definitions of semi direct. I will refer to the one used in the paper you linked.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The difference is actual trivial and explained in your first link &lt;a href=&quot;https://ait.ethz.ch/projects/2015/PhotometricEKF/downloads/iros2015photometric.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;Semi-Direct EKF-based Monocular Visual-Inertial Odometry&quot;&lt;/a&gt;. From the paper &quot;proposed  to estimate  depth  only  for  pixels  in  textured  image  areas&quot;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So basically in semi direct approaches you only run your direct algorithm over selected portions in the image. So rather then run your photometric algorithm over every single point in the image you only run it over points you find may be valuable. This cuts down on computation time as you are working on a smaller subset of the image.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How you select those portions is up to you. &lt;a href=&quot;https://vision.in.tum.de/_media/spezial/bib/schoeps14ismar.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;LSD-SLAM&lt;/a&gt; uses patches that have a high gradient value. &lt;a href=&quot;https://www.ifi.uzh.ch/dam/jcr:e9b12a61-5dc8-48d2-a5f6-bd8ab49d1986/ICRA14_Forster.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;SVO&lt;/a&gt; which the other user mentioned uses patches around FAST keypoints. &lt;/p&gt;&#xA;" OwnerUserId="15265" LastActivityDate="2018-04-05T18:12:49.040" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15499" PostTypeId="1" CreationDate="2018-04-07T03:59:00.120" Score="0" ViewCount="155" Body="&lt;p&gt;Below is the axis setup for the elbow joint manipulator. I am trying to workout the DH parameters for the manipulator. Green frame represents the base and frame1. Starting from there, I am able to get the correct values up to joint3 (purple frame). If I rotate the frame about Z, so the blue frame moves, it gives me incorrect values. Below is the DH parameter table.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is, is the DH table setup correctly? If I move the frame about q3  I am getting invalid results. You will have to set q2 to -90 to achieve the configuration in picture.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;+---+-----------+-----------+-----------+-----------+-----------+&#xA;| j |     theta |         d |         a |     alpha |    offset |&#xA;+---+-----------+-----------+-----------+-----------+-----------+&#xA;|  1|         q1|         d1|          0|        -90|          0|&#xA;|  2|         q2|          0|         a2|          0|          0|&#xA;|  3|         q3|          0|         a3|        -90|          0|&#xA;|  4|          0|         d4|          0|          0|          0|&#xA;+---+-----------+-----------+-----------+-----------+-----------+&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/0LTbS.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0LTbS.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="20106" LastActivityDate="2021-04-26T23:06:55.483" Title="DH parameters for offseted elbow joint" Tags="&lt;dh-parameters&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="15502" PostTypeId="1" CreationDate="2018-04-07T23:52:04.230" Score="2" ViewCount="45" Body="&lt;p&gt;I have been considering different distance sensing technologies for the following circumstance:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Range needs to be about 2.5 meters&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The surface being measured is a wall that is painted black&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The angle between the wall and the sensor would be at worst around 10 degrees, usually around 45 degrees (so reflective technologies will have trouble, to add to the already black wall which will absorb most light).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Preferably I would like to avoid IR because the environment is already going to have a lot of IR noise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Essentially I want to be able to triangulate the position and angle of an object placed in a rectangular box (about 2.5m x 1.8m) with black walls, with a lot of IR noise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All the technologies I have considered have issues:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;From what I understand ultrasonic will fare very poorly with the angled walls&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;TOF / lidar modules will do poorly with the black (low reflection) walls.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Infrared sensors will be interfered with by the IR noise.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I could solve the angle issue by placing 6 or so of these sensors around the object so there are sufficient sensors with a mild angle to get accurate measurements, but the trick is eliminating the sensor readings that are inacurate due to sharp angles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any thoughts?&lt;/p&gt;&#xA;" OwnerUserId="20111" LastActivityDate="2018-08-06T02:00:49.770" Title="Appropriate distance sensing technology for specified conditions" Tags="&lt;lidar&gt;&lt;ultrasonic-sensors&gt;&lt;precise-positioning&gt;&lt;sonar&gt;" AnswerCount="1" CommentCount="3" ClosedDate="2018-08-06T13:38:41.113" ContentLicense="CC BY-SA 3.0" />
  <row Id="15503" PostTypeId="2" ParentId="15502" CreationDate="2018-04-08T00:26:27.337" Score="-1" Body="&lt;p&gt;If you can instrument the object that you need to detect, consider an electromagnetic tracker, such as the &lt;a href=&quot;https://www.ndigital.com/medical/products/aurora/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Aurora&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is not susceptible to the types of challenges you've listed, but it has some of its own: a field generator produces an EM field that allows tracking of sensors that would need to be placed on objects to be tracked. I believe sensors normally require a wire, but perhaps not for all systems. And accuracy will be compromised by any conductive or ferromagnetic materials (i.e., metal) in the box.&lt;/p&gt;&#xA;" OwnerUserId="55" LastActivityDate="2018-04-08T00:26:27.337" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15504" PostTypeId="1" CreationDate="2018-04-08T05:46:08.033" Score="1" ViewCount="58" Body="&lt;p&gt;Working on stabilizing a Quad using Arduino Due. I have slightly modified one of the examples of  &lt;a href=&quot;https://github.com/jrowberg/i2cdevlib/tree/master/Arduino/MPU6050&quot; rel=&quot;nofollow noreferrer&quot;&gt;Jeff Rowberg's library&lt;/a&gt;  to give yaw, pitch and roll angles (zero initialized angles). Moreover, I am using Servo library's writeMicroseconds() to send pulses to bldc's through ESCs. One observation I have made is that there is quite a difference between the &lt;em&gt;starting pulse values&lt;/em&gt; of different ESCs. Roughly, the numbers for my 4 bldc's are 1650, 1680, 1720, 1780. So, in case the same pulse duration value of say 1780 is sent to all ESCs, one of them would just start, while the other three would be spinning at decent rpms.&lt;br&gt;&lt;br&gt; My aim is to implement PID control the speed of motors by measuiring these angles ( there is no remote control involved ). Also, the quad needs to rise up to a certain height setpoint and hover there.&lt;br&gt;So, the difficulty I am facing is that; my output speed looks something like this (just taking 1 motor here)&lt;br&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;speed += ( ± Kp_yaw*yaw_error ± kp_pitch*pitch_error ± Kp_roll*roll_error ±height_speed)&#xA;//Height speed equals a small value, say, .5 if current height  &amp;lt; setpoint height else it's -.5 if current height &amp;gt; set height, otherwise 0, if height has been achieved.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The ± depends upon motor's sense of rotation. Also, currently, I am using only P gain. &lt;strong&gt;The P constants for yaw, pitch and roll are different for all the 4 motors.&lt;/strong&gt; the quad initially struggles for a few seconds to balance itself and rise, but eventually overturns towards the weakest motor (1650 one) each time. What's wrong with this code? Also, speed variable is also different for each motor and initialized to value of 1600 for each motor.&lt;/p&gt;&#xA;" OwnerUserId="20113" LastEditorUserId="20113" LastEditDate="2018-04-08T07:30:27.280" LastActivityDate="2018-04-08T07:30:27.280" Title="Quadcopter bldc PID control" Tags="&lt;quadcopter&gt;&lt;arduino&gt;&lt;control&gt;&lt;pid&gt;&lt;flight-controller&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15505" PostTypeId="2" ParentId="11229" CreationDate="2018-04-08T14:08:18.820" Score="0" Body="&lt;p&gt;You can use the roombas' bumper and light bumper(infrared) sensors to slow down or completely avoid an object. Note: It won't work on surfaces that don't reflect light. Edit: You can use its wheel encoders to know how far it has gone.&lt;/p&gt;&#xA;" OwnerUserId="20117" LastActivityDate="2018-04-08T14:08:18.820" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15512" PostTypeId="1" AcceptedAnswerId="15523" CreationDate="2018-04-09T19:44:42.100" Score="1" ViewCount="77" Body="&lt;p&gt;I'm currently working on a teleoperation code for crazyflie. I'm not using a joystick, but I'm using leapmotion and I'm trying to understand how they code for a joystick in order to implement the same idea in my code with leapmotion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I understand the general idea of what I'm supposed to be doing; 1) subscribing to the leapmotion data; 2) writing a transformation function and then 3) publishing the goal position to be sent to my controller. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Coding is not my forte and having to deal with ROS is adding to the fun of all of this. So I'm going to ask some questions regarding this code because I don't understand it well. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#!/usr/bin/env python&#xA;&#xA;import rospy&#xA;import tf&#xA;from geometry_msgs.msg import PoseStamped&#xA;from sensor_msgs.msg import Joy&#xA;from math import fabs&#xA;&#xA;lastData = None&#xA;&#xA;def joyChanged(data):&#xA;    global lastData&#xA;    lastData = data&#xA;    # print(data)&#xA;&#xA;if __name__ == '__main__':&#xA;    rospy.init_node('publish_pose', anonymous=True)&#xA;    worldFrame = rospy.get_param(&quot;~worldFrame&quot;, &quot;/world&quot;)&#xA;    name = rospy.get_param(&quot;~name&quot;)&#xA;    r = rospy.get_param(&quot;~rate&quot;)&#xA;    joy_topic = rospy.get_param(&quot;~joy_topic&quot;, &quot;joy&quot;)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Why is it necessary to get the &lt;code&gt;joy_topic&lt;/code&gt; param?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, I'm not sure if this is correct but I believe that the x, y, z values are the position values for the joystick, so since this values are always the same they are probably using them as initial values for the position values. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    x = rospy.get_param(&quot;~x&quot;)&#xA;    y = rospy.get_param(&quot;~y&quot;)&#xA;    z = rospy.get_param(&quot;~z&quot;)&#xA;&#xA;    rate = rospy.Rate(r)&#xA;&#xA;    msg = PoseStamped()&#xA;    msg.header.seq = 0&#xA;    msg.header.stamp = rospy.Time.now()&#xA;    msg.header.frame_id = worldFrame&#xA;    msg.pose.position.x = x&#xA;    msg.pose.position.y = y&#xA;    msg.pose.position.z = z&#xA;    yaw = 0&#xA;    quaternion = tf.transformations.quaternion_from_euler(0, 0, yaw)&#xA;    msg.pose.orientation.x = quaternion[0]&#xA;    msg.pose.orientation.y = quaternion[1]&#xA;    msg.pose.orientation.z = quaternion[2]&#xA;    msg.pose.orientation.w = quaternion[3]&#xA;&#xA;    pub = rospy.Publisher(name, PoseStamped, queue_size=1)&#xA;    rospy.Subscriber(joy_topic, Joy, joyChanged)&#xA;&#xA;    while not rospy.is_shutdown():&#xA;        global lastData&#xA;        if lastData != None:&#xA;            if fabs(lastData.axes[1]) &amp;gt; 0.1:&#xA;                msg.pose.position.z += lastData.axes[1] / r / 2&#xA;            if fabs(lastData.axes[4]) &amp;gt; 0.1:&#xA;                msg.pose.position.x += lastData.axes[4] / r * 1&#xA;            if fabs(lastData.axes[3]) &amp;gt; 0.1:&#xA;                msg.pose.position.y += lastData.axes[3] / r * 1&#xA;            if fabs(lastData.axes[0]) &amp;gt; 0.1:&#xA;                yaw += lastData.axes[0] / r * 2&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Why is he dividing the values from the joystick with the rate?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is where I get lost because I don't know how I would translate this leapmotion yaw, pitch and roll values. I guess I could write an if statement saying if the pitch is within this values then hover at 1 meter.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;            quaternion = tf.transformations.quaternion_from_euler(0, 0, yaw)&#xA;            msg.pose.orientation.x = quaternion[0]&#xA;            msg.pose.orientation.y = quaternion[1]&#xA;            msg.pose.orientation.z = quaternion[2]&#xA;            msg.pose.orientation.w = quaternion[3]&#xA;            # print(pose)&#xA;        msg.header.seq += 1&#xA;        msg.header.stamp = rospy.Time.now()&#xA;        pub.publish(msg)&#xA;        rate.sleep()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="19021" LastEditorUserId="37" LastEditDate="2018-04-11T11:51:02.570" LastActivityDate="2018-04-11T11:51:02.570" Title="how to write a uav teleop code?" Tags="&lt;ros&gt;&lt;uav&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15514" PostTypeId="1" AcceptedAnswerId="15519" CreationDate="2018-04-09T22:58:11.813" Score="0" ViewCount="238" Body="&lt;p&gt;I'm interested in Robotics but not very skilled in Maths.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since I always come across some very intense looking mathematical formulae in robotic reports, books etc I just wonder what branch of Mathematics I should be learning to better understand the material I'm trying to read?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a specific branch of maths relevant to robotics &lt;strong&gt;OR&lt;/strong&gt; do I need expertise across multiple branches of maths?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is expertise in Maths necessary at all to get into robotics?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please help.&lt;/p&gt;&#xA;" OwnerUserId="14355" LastActivityDate="2018-04-11T06:39:51.627" Title="Maths in Robotics" Tags="&lt;robotc&gt;" AnswerCount="2" CommentCount="2" ClosedDate="2018-04-11T12:00:13.430" ContentLicense="CC BY-SA 3.0" />
  <row Id="15515" PostTypeId="1" CreationDate="2018-04-09T23:34:14.633" Score="2" ViewCount="245" Body="&lt;p&gt;I am trying to drive the differential drive kinematics of Turtlebot 2. However, I couldn't find the distance between 2 wheels on the datasheet. I'd appreciate if anyone could provide me this dimension. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="18352" LastActivityDate="2020-12-08T07:58:34.960" Title="Turtlebot 2 dimensions" Tags="&lt;mobile-robot&gt;&lt;ros&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15517" PostTypeId="1" AcceptedAnswerId="15527" CreationDate="2018-04-10T06:17:36.867" Score="0" ViewCount="776" Body="&lt;p&gt;I'm currently working on the iRobot Create 2 platform using a RaspberryPi (Python) and ROS. I have an indoor navigation/ GPS system, which can provide me with x,y coordinates within its coordinate system. I have thus far implemented a Kalman filter in MATLAB for practice and now am trying to implement on the Create. I also have an IMU but haven't yet implemented that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm currently trying to figure out how to subscribe to the topics from the Marvelmind indoor nav system (but that's a different issue).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My Kalman filter is using [x, y, xdot, ydot], and I believe those should be in the global frame (which I'm taking to be the coordinate system provided by the Marvelmind indoor nav system). That being the case, I can easily get my x and y position from that system; however, I'm not sure what to do about the xdot and ydot. Currently, I have that information from the Create odometry (Twist msgs), but those are in the local frame (since the robot can only go in the x (forward) direction and can't go in y (side to side)). Do I need to transform the local to the global? If yes, do I need to use the IMU to get the angle to use for the transformation?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I feel like I have many pieces, but I'm just not sure how to piece them together. Any advice would be appreciated. Thank you!&lt;/p&gt;&#xA;" OwnerUserId="20020" LastActivityDate="2018-04-11T03:16:33.273" Title="How to convert/transform robot local frame to global frame to use in Kalman Filter?" Tags="&lt;mobile-robot&gt;&lt;kalman-filter&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15518" PostTypeId="2" ParentId="15158" CreationDate="2018-04-10T07:30:15.937" Score="1" Body="&lt;p&gt;I think it is easy to see, when you take a look at the bayesian network:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/XmjIJ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XmjIJ.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, we eliminate all the variables not given in your equation:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/JZ4WY.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JZ4WY.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based on this baesian network, you can see that $u_t$ has no effect on the other variables and thus can be omitted.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This however would not work for $u_t$s that are not random. If for example $u_t$ would be dependent on $x_{t-1}$. Which means, based on the last position, the actual control is selected:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/TkV8n.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/TkV8n.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here $u_t$ can not be omitted.&lt;/p&gt;&#xA;" OwnerUserId="7133" LastEditorUserId="7133" LastEditDate="2018-04-11T07:02:08.213" LastActivityDate="2018-04-11T07:02:08.213" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="15519" PostTypeId="2" ParentId="15514" CreationDate="2018-04-10T10:17:23.597" Score="3" Body="&lt;p&gt;I cannot give you a definite answer since - as C.O.Park said - it depends so much on what you do. From my experience (doing visual SLAM and machine learning) linear algebra is (to a varying degree) an indispensable foundation in many fields like (2d) computer vision, 3d perception, robotic manipulation, path planning, optimization algorithms in machine learning, dimensionality reduction, deep learning, ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the way, I found the video lectures on linear algebra from MIT by Gilbert Strang &lt;a href=&quot;https://ocw.mit.edu/courses/mathematics/18-06-linear-algebra-spring-2010/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://ocw.mit.edu/courses/mathematics/18-06-linear-algebra-spring-2010/&lt;/a&gt; very enjoyable. The provided intuitions made many things click for me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second, since we are often dealing with probabilistic problems, good knowledge of (multivariate) statistics and probability are required, particularly when you directly or indirectly deal with sensor data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For optimization problems including most of machine learning, Calculus comes up very often, because you need gradients for optimizations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my opinion, you can also get into robotics without rigorous math knowledge, when you focus more on systems. Robots are complex beasts and companies build robots from hardware and software components, so there is a lot of integration work to be done. A high-level overview of robotics, programming skills and maybe system administration knowledge should get you quite far in this field.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also I am sure there are some fields, where math is not that important. Human-machine-interfacing comes to mind, though I lack the experience in that field.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Again, this is based on personal experience and most probably, there are various fields where these skills may not be relevant at all while other skills are required.&lt;/p&gt;&#xA;" OwnerUserId="15778" LastActivityDate="2018-04-10T10:17:23.597" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="15520" PostTypeId="1" CreationDate="2018-04-10T11:45:19.937" Score="1" ViewCount="105" Body="&lt;p&gt;I am trying to design a system to measure snow depth during snow production on a tiny ski resort in Denmark.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My idea is simple: Drive a rover over the ground during the summer, and obtain height data with lat long. During snow production, drive it again, and compare the height data with the height data from the summer. Provide snow depths to the people working, such that snowproduction can be optimal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I need 1-2 cm accuracy in the vertical direction for this to be useful - and my readings have led me to believe I need to use a base station and RTK to get the needed accuracy. I expect the rover speed to be no more than 2 m/s (although higher speeds would be great, of course). I will (try to) design and build the rover to fit the project, so weight is not an issue, and I can probably add pretty large batteries to it. (The rover will need to reliably climb 30% snow covered inclines, and be able to either use GSM for communications or be able to communicate at least 500 meters using radio. It will also need to be robust enough to be covered in artificial snow during operation, etc.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have read a lot of blog posts and whatnot, that wants to use RTK lib and low cost receivers, but this question : &lt;a href=&quot;https://robotics.stackexchange.com/questions/4312/low-cost-centimeter-accurate-satellite-positioning-gnss-gps&quot;&gt;Low-cost centimeter accurate satellite positioning (GNSS/GPS)&lt;/a&gt; - seems to suggest that this product : &lt;a href=&quot;http://navspark.mybigcommerce.com/ns-hp-gl-gps-glonass-rtk-receiver/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://navspark.mybigcommerce.com/ns-hp-gl-gps-glonass-rtk-receiver/&lt;/a&gt; - is sort of the solution to all my problems, wrapped in a simple package? (Its sort of cheap too, I think, at least not very expensive.) The question is from 2014 though, and it seems a lot have happened in this space since then?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am sorry to ask a question that may be somewhat opinion based, but would a solution based on two NH-HP-GL be suitable for this project? (Denmark is in Europe, so I reckon it would have to be the GL model, right?). If yes, any recommendations on models, given the target speed of 2 m/s?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also: I have not decided on what computing platform to base the rover on - any comments on Arduino or Raspberry (or entirely different) for this project? The biggest unknown in this project to me is the high accuracy GNSS, but radio communication from the base station to the rover is part of this and something I have not done with neither Arduino or Raspberry - so thanks for helping out.&lt;/p&gt;&#xA;" OwnerUserId="20135" LastActivityDate="2018-04-10T11:45:19.937" Title="Easy cm accurate GNSS / GPS for rover with base station?" Tags="&lt;mobile-robot&gt;&lt;gps&gt;&lt;beginner&gt;&lt;precise-positioning&gt;" AnswerCount="0" CommentCount="3" FavoriteCount="1" ClosedDate="2018-04-11T11:57:17.777" ContentLicense="CC BY-SA 3.0" />
  <row Id="15521" PostTypeId="1" CreationDate="2018-04-10T14:00:18.043" Score="0" ViewCount="53" Body="&lt;p&gt;While researching different physics engines for dynamic simulations in robotics I found the following statement on the MoJoCo documentation website:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Physics engines have traditionally separated in two categories. Robotics and biomechanics engines (MATLAB Robotics Toolbox, SD/FAST, OpenSim) use efficient and accurate recursive algorithms in generalized or joint coordinates. However they either leave out contact dynamics, or rely on the earlier spring-damper approach which has fallen out of favor for good reason. Gaming engines (ODE, Bullet, PhysX, Havoc) use the modern approach where contact forces are found by solving an optimization problem at each time step.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Link: &lt;a href=&quot;http://www.mujoco.org/book/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.mujoco.org/book/index.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the &quot;good reason&quot; for spring-damper not commonly being used anymore to model contacts in dynamic simulations?&lt;/p&gt;&#xA;" OwnerUserId="20136" LastActivityDate="2018-04-10T20:30:52.600" Title="&quot;modern contact dynamics&quot; - Why are spring-damper contact models not being used anymore for dynamic simulations in robotics?" Tags="&lt;dynamics&gt;&lt;simulation&gt;&lt;simulator&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15522" PostTypeId="1" CreationDate="2018-04-10T14:18:16.443" Score="0" ViewCount="72" Body="&lt;p&gt;I am building my first quadcopter and have multiple questions. I am using a Crius MWC Multiwii SE 2.6 flight controller which will get input from a Raspberry Pi Zero. &#xA;I have &lt;a href=&quot;https://www.banggood.com/Racerstar-RS20Ax4-20A-4-in-1-Blheli_S-Opto-ESC-2-4S-Support-Oneshot42-Multishot-for-FPV-Racer-p-1068210.html?rmmds=myorder&amp;amp;cur_warehouse=CN&quot; rel=&quot;nofollow noreferrer&quot;&gt;this 4in1 ESC&lt;/a&gt; and &lt;a href=&quot;https://www.banggood.com/Matek-Systems-PDB-XT60-W-BEC-5V-12V-2oz-Copper-For-RC-Multirotors-p-1049051.html?rmmds=myorder&amp;amp;cur_warehouse=CN&quot; rel=&quot;nofollow noreferrer&quot;&gt;this PDB&lt;/a&gt;. The battery is LiPo 4S 45C 1550mAh.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1.) Since the 4in1 ESC has one output for each of the 4 motors. Can I connect these to the corresponding inputs on the MultiWii that would normally be used if I had 4 separate ESCs? When using 4 separate ESCs each would have additional Ground and Voltage which would be missing when using the 4in1 ESC. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My idea was to connect the 5V input and GND of the MultiWii to the PDB but I am not sure if this will suffice in powering the entire MultiWii. &#xA;I want to connect the Raspberry to the MultiWii via TX/RX Pins, same question as as before: Do I need additional GND and 5V here if I connect the entire Multiwii to the PDB? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;2.) I wanted to connect the Pi Zero also to the PDB. I read that its more secure to use PWR USB port. I am thinking of sacrificing an USB cable and soldering the ends to the PDB. Is this really more secure than using the GPIO Pins and can I power both, Raspberry and MultiWii through the PDB?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance&lt;/p&gt;&#xA;" OwnerUserId="20138" LastActivityDate="2018-08-09T13:33:46.177" Title="Compatibility of my quadcopter build" Tags="&lt;quadcopter&gt;&lt;raspberry-pi&gt;&lt;battery&gt;&lt;flight-controller&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15523" PostTypeId="2" ParentId="15512" CreationDate="2018-04-10T15:21:48.820" Score="0" Body="&lt;p&gt;It would be clearer if you explain were you got the source code you use as an example and what it's suppose to do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Concerning the first question, the code is taking initialization parameters.&#xA;See &lt;a href=&quot;http://wiki.ros.org/rospy/Overview/Parameter%20Server&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://wiki.ros.org/rospy/Overview/Parameter%20Server&lt;/a&gt;&#xA;The x,y,z do not come from the joypad but from an init file, the joy_topic parameter is the actual name of the topic you want to subscribe, also taken from init file (it is cleaner than hardcoded values in the code because if you change topic name you don't need to recompile)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Concerning the second question, it seems unclear what you want to use as commands for your drone. In the given example, position and yaw is used which is a flat output for quadrotors. But  the leapmotion will give you access to, the orientation of your hand and to the angular rate of your hand, which could also be used to control the quadrotor. &#xA;Lastly note that from your input device motion (Joypad or leapmotion) you need as scaling factor for the real world displacement. For example value of a joypad between 0 and 1024 need to be converted to meter some how.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastEditorUserId="18235" LastEditDate="2018-04-10T15:27:55.903" LastActivityDate="2018-04-10T15:27:55.903" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="15526" PostTypeId="2" ParentId="15521" CreationDate="2018-04-10T20:30:52.600" Score="4" Body="&lt;p&gt;The author appears to be writting in a self promotional style, where the details listed about other work are simplified or ignored so that their claim, that their approach is better, can be established.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suspect the author is making the statement 'for good reasons' because they don't really know.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would ignore their claims and go read their calculations document to see if it was useful to me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Contact is difficult to model and one needs to choose the approach that works for their assumptions, goals, and computational resources.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For all simulation, you should understand the phenomenon you are trying to predict and choose appropriate math for that prediction. If a spring-damper works, use it. If it does not, don't. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You (and the author) need to specify the context in which the spring damper model is being used before we can talk about why it is a good or bad choice.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2018-04-10T20:30:52.600" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15527" PostTypeId="2" ParentId="15517" CreationDate="2018-04-11T03:16:33.273" Score="0" Body="&lt;p&gt;It sounds like you are saying that the navigation system tells you the robot's x and y position within a global reference frame and that the IMU tells you the robot's speed (but not direction) within the same global reference frame. Let's say that these are your two types of measurement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The kalman filter requires that you provide a transformation from the robot's state space [x,y,xdot,ydot] into the measurement spaces for each of your types of measurements. Here are the two transformations:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;GPS: [x,y,xdot,ydot] -&gt; [x,y]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IMU: [x,y,xdot,ydot] -&gt; sqrt(xdot^2 + ydot^2)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Kalman filter also requires a motion model. I think you already have that part, but I'll include it just in case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Motion: [x,y,xdot,ydot] -&gt; [x + xdot * deltat, y + ydot * deltat, xdot, ydot]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's okay if some parameters in your state, such as xdot and ydot, are not directly measurable. The kalman filter would still be able to make use of those parameters and narrow down their likely values based on how they affect x and y over time, even if you didn't have speed measurements. Just let the kalman filter work its magic. :-)&lt;/p&gt;&#xA;" OwnerUserId="18316" LastActivityDate="2018-04-11T03:16:33.273" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="15528" PostTypeId="2" ParentId="15515" CreationDate="2018-04-11T03:36:15.743" Score="1" Body="&lt;p&gt;The specs are listed here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.active-robots.com/fileuploader/download/download/?d=0&amp;amp;file=custom%2Fupload%2FFile-1434995349.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.active-robots.com/fileuploader/download/download/?d=0&amp;amp;file=custom%2Fupload%2FFile-1434995349.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While they don't directly list the distance between wheels, they do list everything that you need for a kinematics model. I would especially focus on these two numbers:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Maximum translational velocity: 70 cm/s&lt;/li&gt;&#xA;&lt;li&gt;Maximum rotational velocity: 180 deg/s&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="18316" LastActivityDate="2018-04-11T03:36:15.743" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15529" PostTypeId="2" ParentId="11054" CreationDate="2018-04-11T03:45:26.003" Score="0" Body="&lt;p&gt;If you have a parameterized motion model for your robot, you can include each of those parameters as part of the state space for a kalman filter. Use the parameterized motion model as the kalman filter's motion model and treat the robot's position over time as measurements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I took this approach in a recent project because I didn't have direct access to the robot and needed the details of its motion model to be calculated automatically. In the following links, kalman.py is a general kalman filter implementation (unscented) and gain_controller.py uses that kalman filter to determine the motion model and choose appropriate values of throttle and brake to achieve a desired acceleration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/ericlavigne/CarND-Capstone-Wolf-Pack/blob/gain_kalman_2018-03-18/ros/src/twist_controller/kalman.py&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/ericlavigne/CarND-Capstone-Wolf-Pack/blob/gain_kalman_2018-03-18/ros/src/twist_controller/kalman.py&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/ericlavigne/CarND-Capstone-Wolf-Pack/blob/gain_kalman_2018-03-18/ros/src/twist_controller/gain_controller.py&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/ericlavigne/CarND-Capstone-Wolf-Pack/blob/gain_kalman_2018-03-18/ros/src/twist_controller/gain_controller.py&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18316" LastActivityDate="2018-04-11T03:45:26.003" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15530" PostTypeId="2" ParentId="15514" CreationDate="2018-04-11T06:39:51.627" Score="1" Body="&lt;p&gt;As you mentioned that SLAM is your interest, the following are the courses that you need to understand a modern SLAM algorithm. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Very important courses:&#xA;Linear Algebra,&#xA;Optimization,&#xA;State Estimation,&#xA;Dynamics,&#xA;Computer Vision,&#xA;Random Process&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Optional:&#xA;Lie algebra,&#xA;Optics,&#xA;Signal Processing,&#xA;Pattern Recognition,&#xA;Nemerical Analysis&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But it is not necessary to learn all of the courses above because they contain too many unnecessary things for SLAM (except Linear Algebra). I recommend you take SLAM courses on youtube first.&lt;/p&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2018-04-11T06:39:51.627" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15531" PostTypeId="2" ParentId="15522" CreationDate="2018-04-11T07:39:57.500" Score="1" Body="&lt;p&gt;1) you 4in1 ESC as 3 outputs per motor and 1 input per motor... &#xA;Your description of the brushless motor seems very confused. Brushless motor are commanded with 3 phases, theirs switching patterns makes the motor turn. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;1b)Concerning power you need to check what the PDB specification are for its 5V line, if the current supported is high enough you can power both our multiWii and the Pi. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) the usb line as some kind of regulation and fuse that the GPIO doesn't have, see &lt;a href=&quot;https://raspberrypi.stackexchange.com/questions/1617/how-do-i-supply-power-through-the-gpio&quot;&gt;https://raspberrypi.stackexchange.com/questions/1617/how-do-i-supply-power-through-the-gpio&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2018-04-11T07:39:57.500" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15533" PostTypeId="2" ParentId="14062" CreationDate="2018-04-11T08:53:32.467" Score="1" Body="&lt;p&gt;Many people use Python to control robots. While it does use more computing resources to interpret the python code, it may take less time for the programmer to develop in an interpreted language.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Advantages of Python:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Many programmers are familiar with Python because it is often taught as a first language in schools.&lt;/li&gt;&#xA;&lt;li&gt;It can be faster to program in Python than in c/c++ because you don't constantly have the compile/test cycles.&lt;/li&gt;&#xA;&lt;li&gt;There are even &lt;a href=&quot;https://micropython.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;versions of python&lt;/a&gt; that will run on microcontrollers similar to the Arduino. The one I'm thinking of is MicroPython, but there is also WiringPi.&lt;/li&gt;&#xA;&lt;li&gt;There are often Python API's for compiled robot software. For example, ROS is usable through Python.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The main disadvantage is that you need something like a Raspberry Pi (at a minimum) to the full version of Python. Even the Raspberry Pi Zero is a powerful brain for a robot.&lt;/p&gt;&#xA;" OwnerUserId="19275" LastActivityDate="2018-04-11T08:53:32.467" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15540" PostTypeId="1" CreationDate="2018-04-12T14:55:21.533" Score="0" ViewCount="114" Body="&lt;p&gt;For the head in a 2D plotter I have 4 gears in an X configuration in the same plane. The gears are driven by belts from the outside in different combinations. The top and bottom gear can be turned in opposite direction as indicated by green arrows. Or the left and right wheels can be turned in opposite directions as indicated by the red arrows. Both of those can happen simultaneously. The gears can also be driven all in the same direction as indicated by the blue arrows. Or all directions can be reversed. This is part of a larger construct and the belt movement already has effects there so they can't be changed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Nx6bQ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Nx6bQ.png&quot; alt=&quot;motion of gears&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now what I want to build is some mechanical contraption that turns the blue arrow movement into an upward (or downward if reversed) movement to rise (or lower) the pen of the plotter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If all wheels turn anti clockwise the pen should rise. If all wheels turn clockwise the pen should lower (or vice versa).&lt;/p&gt;&#xA;" OwnerUserId="20154" LastActivityDate="2021-04-27T02:12:21.277" Title="How to turn direction of 4 planar wheels into up/down motion?" Tags="&lt;mechanism&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="15541" PostTypeId="2" ParentId="2443" CreationDate="2018-04-12T15:09:53.650" Score="1" Body="&lt;p&gt;The point of a loop would be that it can, well, loop around. The belt never stops. You can't link the ends into a seamless loop. Better buy a looped belt of approximate size and add something to adjust your construct to match the loop size. Leading the belt around 2 wheels in a // shape can help you tighten the loop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But if you don't really need an endless loop, if you have something that is connected to the &quot;loop&quot; at a fixed point, like in your picture, then that is a different question. In both your picture and the one in the comments the belt isn't looped. Instead one end is simply folded over itself so the teeth bite and prevent it from slipping.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An alternative to this I like is to take both ends of the belt and turn them by 90° with the tooth facing inwards. Place a worm gear between those two ends and a hollow cylinder around it so both belt ends are pressed into the worm gear with their teeth. Now you can turn the worm gear to tighten or loosen the belt &quot;loop&quot;. You can 3D print the worm gear and enclosing cylinder to match your belt tooth profile and thickness.&lt;/p&gt;&#xA;" OwnerUserId="20154" LastActivityDate="2018-04-12T15:09:53.650" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15542" PostTypeId="2" ParentId="15499" CreationDate="2018-04-12T15:12:04.350" Score="0" Body="&lt;p&gt;You can simplify the robot configuration by connecting the &lt;strong&gt;Purple&lt;/strong&gt; frame to the &lt;strong&gt;Blue&lt;/strong&gt; frame with a &lt;em&gt;link&lt;/em&gt;.&#xA;The length of the new &lt;em&gt;link&lt;/em&gt; can be easily calculated with the Pythagorean theorem.&#xA;Now you can obtain the DH parameters more easily.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This setup will reach the same results as the original setup, but it is easier to obtain the DH parameters in this case.&lt;/p&gt;&#xA;" OwnerUserId="20155" LastActivityDate="2018-04-12T15:12:04.350" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15543" PostTypeId="2" ParentId="15540" CreationDate="2018-04-12T15:39:25.317" Score="0" Body="&lt;p&gt;&lt;strong&gt;A-&lt;/strong&gt; Imagine a hollow cylinder with the following design,&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The outside surface of the cylinder can mesh with the four gears in the image and it will be placed among them. &lt;/li&gt;&#xA;&lt;li&gt;the inside of the cylinder has a helical groove spanning the length of the cylinder (from top to bottom)&lt;/li&gt;&#xA;&lt;li&gt;the cylinder can only rotate (no upward or downward motion)&lt;/li&gt;&#xA;&lt;li&gt;the cylinder is open from top and bottom.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;B-&lt;/strong&gt; Now for the part that would hold the pen,&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;this part will be placed inside the cylinder.&lt;/li&gt;&#xA;&lt;li&gt;this part will have pins that are meshing the inside grooves of the cylinder.&lt;/li&gt;&#xA;&lt;li&gt;this part cannot rotate. it can only move up or down.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;When the gears rotate according to the blue arrows &gt;&gt;&gt; the cylinder will rotate (meaning that the groves will rotate) &gt;&gt;&gt; and since the pen holder cannot rotate, the groves will force it to move up or down.&#xA;The below figure shown the same idea but with a cylinder that has an outside groove.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ZvYBn.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZvYBn.png&quot; alt=&quot;Figure 1: Cam Follower Example&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="20155" LastEditorUserId="20155" LastEditDate="2018-04-12T15:45:32.927" LastActivityDate="2018-04-12T15:45:32.927" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="15544" PostTypeId="1" AcceptedAnswerId="16022" CreationDate="2018-04-13T08:38:42.173" Score="2" ViewCount="878" Body="&lt;p&gt;I am working on an ABB IRB120 simulation using MATLAB Simulink. I use the decoupling method to solve the inverse kinematic of the robot. However, I have some questions related to the computation of the last three joints (spherical wrist).&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;I have read many books and I found that the solutions for the last 3 joints are not the same for theta 5,theta 4, theta 6 consequently. My question is that: Those formulas that I found in books or in the INTERNET, aren't they the same, or dependent on the D-H parameters of the robot (how we choose alpha, adding special angles 0,pi,pi/2 to Theta...). If they are dependent on the D-H parameters, then how could I choose the easiest posture to solve the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;a. In the book Robot modeling and control (Siciliano), he chose the the final coordinate frame for the anthromopophic arm’s end-effector with X pointing upward (No special angle added to Theta6). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;b. However, in RoKiSim, X points downward (Pi is added to Theta6). Thus, I have looked at other papers and I saw different formulas. The question is: Why they choose these postures, and how they got those formulas.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;When I run the simulation, I saw that there are some points, the Theta 4 and Theta 5 rotate 180 degrees (change of signs), however, the end-effector is the same. Is there anyway for me to know if my code is correct (sample codes/ papers/ softwares…) so I can know I’m still on the right track. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I have built the robot and ready to implement the code at any time. I have built the controller and the only thing left is the kinematic itself. Should I keep enhancing my decoupling method inverse kinematic or move to analytical solutions, or any method that suit me. Please give me advice on this (I use 32bit ARM chip for the controller). &lt;/p&gt;&#xA;" OwnerUserId="20160" LastEditorUserId="9176" LastEditDate="2019-07-19T17:59:20.817" LastActivityDate="2019-07-19T17:59:20.817" Title="Solving Inverse Kinematics for ABB IRB 120" Tags="&lt;robotic-arm&gt;&lt;inverse-kinematics&gt;&lt;industrial-robot&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15547" PostTypeId="1" AcceptedAnswerId="16028" CreationDate="2018-04-13T22:18:36.863" Score="3" ViewCount="885" Body="&lt;p&gt;I am currently trying to run the test cow and lady dataset with &lt;a href=&quot;https://github.com/ethz-asl/voxblox/blob/master/README.md#running-voxblox&quot; rel=&quot;nofollow noreferrer&quot;&gt;Voxblox&lt;/a&gt;.  The process appears to execute properly in the terminal, but I cannot view the mesh in RViz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I try to add the topic &lt;code&gt;voxblox_node/mesh&lt;/code&gt; to RViz, the topic name is greyed out and I cannot add the topic.  This topic is listed under &quot;unvisualizable topics&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/kyTxq.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kyTxq.png&quot; alt=&quot;Unvisualizable Topics&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In Rviz, I tried creating a topic of type &lt;code&gt;MarkerArray&lt;/code&gt; and manually typing in the topic name to add it.  This does not work and I get the following error:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;process[voxblox_node-2]: started with pid [18452]&#xA;[ INFO] [1523646547.806476760]: Opening /media/ubuntu/jetsontx2b/data/voxblox/data.bag&#xA;[ INFO] [1523646548.104770697]: Static transforms loaded from file.&#xA;T_B_D:&#xA;    0.971048      0.15701    -0.180038 -0.000432202&#xA;   -0.120915     0.973037     0.196415   -0.0522007&#xA;    0.206023    -0.168959      0.96385   -0.0341353&#xA;           0            0            0            1&#xA;T_B_C:1 0 0 0&#xA;0 1 0 0&#xA;0 0 1 0&#xA;0 0 0 1&#xA;[ERROR] [1523646548.172363508]: Client [/rviz_1523646021870801813] wants topic /voxblox_node/mesh to have datatype/md5sum [visualization_msgs/MarkerArray/d155b9ce5188fbaf89745847fd5882d7], but our version has [voxblox_msgs/Mesh/ca70fabcc211b61f795cb5e7c8210eb6]. Dropping connection.&#xA;[ INFO] [1523646549.056998208]: Updating mesh.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://github.com/ethz-asl/voxblox/blob/master/README.md#voxblox-node&quot; rel=&quot;nofollow noreferrer&quot;&gt;Voxblox documentation&lt;/a&gt; states that the node &lt;code&gt;voxblox_node&lt;/code&gt; publishes:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;code&gt;mesh&lt;/code&gt; of type &lt;code&gt;visualization_msgs::MarkerArray&lt;/code&gt;. A visualization topic showing the mesh produced from the tsdf in a form that can be seen in RViz.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Why doesn't Rviz recognize &lt;code&gt;mesh&lt;/code&gt; as a &lt;code&gt;MarkerArray&lt;/code&gt;? What do I need to do to get Rviz to visualize &lt;code&gt;/voxblox_node/mesh&lt;/code&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="17744" LastActivityDate="2018-12-10T06:47:11.910" Title="RViz: How to Visualize a Voxblox Mesh as a MarkerArray?" Tags="&lt;ros&gt;&lt;visualization&gt;&lt;rviz&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15550" PostTypeId="2" ParentId="15181" CreationDate="2018-04-14T23:02:46.363" Score="0" Body="&lt;p&gt;I will answer with respect to the unscented kalman filter (ukf) instead of the extended kalman filter (ekf) because I think the ukf is easier to understand. You can either switch to using ukf yourself (as I have) or translate the idea back into ekf. They are similar enough that the same idea would work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In ukf the probability distribution of your state space is represented by a swarm of &quot;sigma points.&quot; When receiving a new measurement, we need to translate each of the sigma points into measurement space so that so that they can be compared with the actual measurement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's say your state includes variables x, y, vx, and vy to represent both position and velocity. Each sigma point would have these same variables. The anchor has position anx, any. The main challenge is to calculate the expected return time (rt) of a sonar ping that reaches you now and starts at your previous position at rt time ago. If you can do that for each individual sigma point, then combining those results into an overall state update is just following the usual ekf recipe. We'll assume that velocity was constant during the period of time that this measurement took place.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Current position: x, y&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Previous position: px = x - vx * rt, py = y - vy * rt&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Expected rt: rt = ((distance from x,y to anx,any) + (distance from px,py to anx,any)) / (speed of sound)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ideallly you would treat these as a system of equations with rt completely unknown, but that's probably more trouble than it's worth. You can get away with using the measured value of rt for estimating the previous position part. The rt that you calculate in that last equation is what you'll compare with the measured rt.&lt;/p&gt;&#xA;" OwnerUserId="18316" LastActivityDate="2018-04-14T23:02:46.363" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15552" PostTypeId="1" CreationDate="2018-04-15T07:57:58.260" Score="0" ViewCount="30" Body="&lt;p&gt;We are very new in the game of robotics and we are dealing with a power delivery issue for our motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We are using two 12V DC motors to give motion to our robot.&#xA;We are using the L293D motor driver to control the  motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But motors are not receiving enough power so that they may give enough torque. I measured the power output to the motors and it is 3.7V.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For power we are using an 9V DC battery. We are using an Adriano UNO board as our microcontroller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Full list of parts used:-&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Ardriuno UNO&lt;/li&gt;&#xA;&lt;li&gt;9V battery &lt;/li&gt;&#xA;&lt;li&gt;L293D motor driver&lt;/li&gt;&#xA;&lt;li&gt;UV sensor&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Now how can we deliver addition power direct to the motors using the L293D motor drivers. Please help &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Code: &lt;a href=&quot;https://github.com/pantharshit00/robo&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/pantharshit00/robo&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="20173" LastActivityDate="2018-05-15T14:54:00.050" Title="Power delivery issue for our human following robot project" Tags="&lt;motor&gt;&lt;power&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15553" PostTypeId="1" CreationDate="2018-04-15T08:22:56.667" Score="-1" ViewCount="27" Body="&lt;p&gt;I am confused about autonomous drone flight. Thats why I am asking the question here so that a drone expert can help me to understand.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have heard about tow kinds of drone&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;drones that work through controller based on radio transmitter &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;GPS based drones that work together with autopilot and make autonomous flight possible. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Is there any third category available or do I understand it wrong? I mean if you have an autopilot then can you make autonomous flight. Do radio transmitter based drone usually don't have autopilot and GPS facility? &lt;/p&gt;&#xA;" OwnerUserId="15610" LastEditorUserId="18235" LastEditDate="2018-04-24T12:56:18.833" LastActivityDate="2018-04-24T12:56:18.833" Title="Drones classification based on flying mechanism and communication link" Tags="&lt;quadcopter&gt;&lt;gps&gt;&lt;radio-control&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15555" PostTypeId="2" ParentId="15552" CreationDate="2018-04-15T14:20:53.880" Score="1" Body="&lt;p&gt;It would be nice to know more about your robot. I've built robots in that range, and can make some suggestions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, if you're using a 9v battery such as the ones used in smoke detectors, you need a better battery. These just don't put out enough current to run everything a robot requires. I'd suggest a set of 6 AA batteries in series. This will provide you with the same voltage, but much more current.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second, test the L293D motor driver by connecting the Arduino to the motor driver and motor and the power batter. Program the Arduino such that the pins will set the motor running at full speed with absolutely no PWM. Then edit your question to show the voltage across the motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Third, I believe that the Arduino Uno uses 5V logic, but I'm not absolutely sure that there isn't a 3v3 version of it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fourth, when putting together a robot, it's best to do one system at a time, get that working, and then add a new system. In this case, I'd suggest getting the motors working, and only then add the UV sensor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fifth, when asking a question, it's a good thing to provide links to everything necessary. It's even better to include these things in the question. It would be nice to have a schematic of the circuit to see if perhaps the pins are hooked up correctly. Not all the Arduino pins work the same.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I may have given too much information. I think that the main problem is the 9v battery.&lt;/p&gt;&#xA;" OwnerUserId="19275" LastActivityDate="2018-04-15T14:20:53.880" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15556" PostTypeId="1" CreationDate="2018-04-15T14:22:24.007" Score="0" ViewCount="92" Body="&lt;p&gt;I am planning to build some primary level of project like home made robot, which I need to explore an image recognition and path recognition(using four wheels vehicle). So I am looking to buy a device like Raspberry pi. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What other equipment or hardwares I should buy along with raspberry pi.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which one is better Arduino or raspberry pi for robotics using AI. &lt;/p&gt;&#xA;" OwnerUserId="20175" LastActivityDate="2018-04-16T22:42:45.123" Title="What other equipment or hardwares I should buy along with raspberry pi" Tags="&lt;arduino&gt;&lt;raspberry-pi&gt;&lt;hardware&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2018-04-19T16:12:31.890" ContentLicense="CC BY-SA 3.0" />
  <row Id="15560" PostTypeId="1" CreationDate="2018-04-16T06:29:17.843" Score="0" ViewCount="51" Body="&lt;p&gt;I'm making a consumer camera prototype and want to make the front look as clean as possible. Right now I use a completely transparent material and the camera and the IR Lights (with their red hue) are clearly visible. I'd like to move to a dark (as black as possible) material that makes the cover look flush and hides the sensors as much as possible. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;What materials should I consider, if I want to minimize the impact on what the sensors perceive?&lt;/strong&gt; &lt;/p&gt;&#xA;" OwnerUserId="18298" LastActivityDate="2018-08-17T07:01:05.760" Title="What materials can I put in front of a RGB camera and LED IR lights to hide the sensors as much as possible?" Tags="&lt;cameras&gt;" AnswerCount="2" CommentCount="7" ContentLicense="CC BY-SA 3.0" />
  <row Id="15563" PostTypeId="2" ParentId="15556" CreationDate="2018-04-16T22:42:45.123" Score="3" Body="&lt;p&gt;First, it is important to understand the differences between the Arduino and the Raspberry Pi.  You can read more &lt;a href=&quot;https://makezine.com/2015/12/04/admittedly-simplistic-guide-raspberry-pi-vs-arduino/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;https://www.digitaltrends.com/computing/arduino-vs-raspberry-pi/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The &lt;strong&gt;Arduino&lt;/strong&gt; is a &lt;a href=&quot;https://en.wikipedia.org/wiki/Microcontroller&quot; rel=&quot;nofollow noreferrer&quot;&gt;microcontroller&lt;/a&gt;.  It is a specialized board that handles low level, often repetitive tasks like reading a sensor or controlling a motor with a motor driver.  &lt;/li&gt;&#xA;&lt;li&gt;The &lt;strong&gt;Raspberry Pi&lt;/strong&gt; is a complete Linux computer that typically runs on the Raspbian OS.  While the Raspberry Pi has a set of GPIO ports that can interface with sensors and motor drivers, the Pi can also process higher level tasks.  The Pi is capable of running python and C/C++ libraries such as OpenCV and other AI frameworks.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Using the two boards in a project are not mutually exclusive!  You can use the Arduino for controlling motors and processing sensors while using the Raspberry Pi for your AI libraries and decision making steps.&lt;/p&gt;&#xA;" OwnerUserId="17744" LastActivityDate="2018-04-16T22:42:45.123" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15565" PostTypeId="2" ParentId="15433" CreationDate="2018-04-18T05:07:56.670" Score="0" Body="&lt;p&gt;When the Create 2 gets into the state where you can't communicate with it, have you tried manually pressing the Clean button?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If that reliably works, have you considered adding a relay controlled by the NUC to close those contacts through a direct connection to the Clean button contacts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An alternative is to add a NUC solenoid or servo with an arm to manually push the Clean button&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Frank&lt;/p&gt;&#xA;" OwnerUserId="19572" LastActivityDate="2018-04-18T05:07:56.670" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="15566" PostTypeId="1" AcceptedAnswerId="15574" CreationDate="2018-04-18T10:21:55.767" Score="0" ViewCount="585" Body="&lt;p&gt;I have written simple RRT planner however I am not sure how to apply it to a robotic arm path planning.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The issue is that of analytical solution absence to inverse kinematics problem. Let me explain.&#xA;There are two possible spaces which can be used to plan path:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Joint space.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since we know exact joints' angles at each planning step it allows us to easily account for end effector orientation and collisions. However it requires goal position to be defined in joint space which requires inverse kinematics solution but I am not sure how to solve IK for the exact angles without analytical solution which not always exists. I use inverse jacobian method which is iterative and requires small timestamps(i.e. trajectory and not a geometric path) to have precise movement therefore it is not clear how to use it to calculate goal position in joint space. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Operational space&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does not require goal to be defined in joint space however on each planning step it is also necessary to solve IK to be able to account for orientation and collisions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only way I can see is to make RRT step small enough to be able iteratively compute IK on each planning step however it casts doubts on performance. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Question&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the question is how can I account for orientation and collisions(including self collisions) when planning motion without analytical solution to inverse kinematics problem?&lt;/p&gt;&#xA;" OwnerUserId="15392" LastEditorUserId="15392" LastEditDate="2018-04-18T11:17:22.503" LastActivityDate="2018-04-19T23:38:46.400" Title="How to plan path for robotic arm with RRT?" Tags="&lt;motion-planning&gt;&lt;robotic-arm&gt;&lt;path-planning&gt;&lt;rrt&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="15569" PostTypeId="1" AcceptedAnswerId="15576" CreationDate="2018-04-19T02:15:10.637" Score="1" ViewCount="1374" Body="&lt;p&gt;I'm in the process of learning Tensor Flow, and I really want to use it on a new robot I'm going to build. I want the robot to be able to do image recognition, and move towards an image of interest, or follow a path, using neural networks. Is this even possible with tensor flow?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is the Arduino capable of running neural network frameworks, such as Tensor Flow?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="19137" LastEditorUserId="17744" LastEditDate="2018-04-20T16:18:52.457" LastActivityDate="2019-05-14T02:48:30.537" Title="How to use tensor flow on arduino robot" Tags="&lt;arduino&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15570" PostTypeId="2" ParentId="15560" CreationDate="2018-04-19T03:04:34.160" Score="0" Body="&lt;p&gt;You probably want a plastic cover that is opaque to visible light but transparent to IR, like is used over the LEDs in many TV remote controls. Then the lights will not be visible, but the relevant illumination can still get in and out. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The camera will also see much less visible light that's not coming from your own illumination, but that may be a pro or a con depending on whether you care about seeing anything besides returned IR.&lt;/p&gt;&#xA;" OwnerUserId="55" LastActivityDate="2018-04-19T03:04:34.160" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15573" PostTypeId="1" AcceptedAnswerId="15726" CreationDate="2018-04-19T21:39:14.540" Score="2" ViewCount="172" Body="&lt;p&gt;I have an iRobot Create 2 and am currently using the create_autonomy package. Currently, they have cliff sensors as a &quot;planned&quot; feature. I see in the documentation that there are 4 cliff sensors (which can return 0 (no cliff) and 1 (yes cliff)) and their &quot;Packet ID&quot; numbers. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It also mentions this note for each sensor: &quot;NOTE: This packet is a binary version of the “Cliff Front Left Signal” (ID: 29) packet.&quot; I don't understand what this means or if it's relevant to what I'm doing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I read this cliff sensor data (in order to publish a topic with it)?&lt;/p&gt;&#xA;" OwnerUserId="20020" LastActivityDate="2018-05-22T21:31:06.940" Title="How can I access the cliff sensors on an iRobot Create 2 via ROS/ Python?" Tags="&lt;sensors&gt;&lt;ros&gt;&lt;irobot-create&gt;&lt;python&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15574" PostTypeId="2" ParentId="15566" CreationDate="2018-04-19T23:38:46.400" Score="1" Body="&lt;p&gt;Maybe there is a bit of misunderstanding about iterative methods for solving IK problems. Actually, an iterative IK solver does not necessarily require timestamps (or anything related to time). The general principle is that you start with some robot configuration (i.e. joint values) then you iteratively modify the configuration such that it eventually satisfies IK relation (kind of like gradient descent). There should be no problem using an iterative IK method regardless of the space in which RRT operates.&lt;/p&gt;&#xA;" OwnerUserId="7610" LastActivityDate="2018-04-19T23:38:46.400" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15575" PostTypeId="2" ParentId="11142" CreationDate="2018-04-20T00:34:02.657" Score="4" Body="&lt;p&gt;The kalman filter that you've already been using on single robots can be broadened to apply to the swarm of robots. If you previously represented the state of a single robot with 5 variables, and you have 3 robots, then combine all 3 robot states into one state with 15 variables. That larger state representing the entire group could reasonably be called the &quot;joint belief of the entire group&quot; and would be updated in response to any sensor measurement by any member of the group.&lt;/p&gt;&#xA;" OwnerUserId="18316" LastActivityDate="2018-04-20T00:34:02.657" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15576" PostTypeId="2" ParentId="15569" CreationDate="2018-04-20T01:23:34.713" Score="2" Body="&lt;p&gt;The Arduino is a microcontroller and not a &quot;full&quot; computer.  (See my other answer &lt;a href=&quot;https://robotics.stackexchange.com/questions/15556/what-other-equipment-or-hardwares-i-should-buy-along-with-raspberry-pi/15563#15563&quot;&gt;here&lt;/a&gt;.) As such, you will have a difficult time running TensorFlow on the Arduino.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Deploying TensorFlow, or another Neural Network Framework, on your robot has at least two parts:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Training: teaching your network, best performed on a computer or server with a powerful GPU&lt;/li&gt;&#xA;&lt;li&gt;Deployment: loading your trained model onto your platform for realtime operation.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;You would have an easier time training on a desktop computer and deploying to a robotic platform that uses a Raspberry Pi for high-level tasks and an Arduino for low-level tasks.  On the Pi, you could use TensorFlow or OpenCV in either C/C++ or Python.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depending on your objectives, you may be able to get away with using specialized camera hardware like the &lt;a href=&quot;http://charmedlabs.com/default/pixy-cmucam5/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pixy&lt;/a&gt;, which would work directly with the Arduino. &lt;/p&gt;&#xA;" OwnerUserId="17744" LastActivityDate="2018-04-20T01:23:34.713" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="15577" PostTypeId="1" CreationDate="2018-04-20T09:03:41.560" Score="1" ViewCount="39" Body="&lt;p&gt;I want to use information together received from the different ROS subscriber nodes. One way I think of is to make separate callback functions for each subscriber node and then receive messages from corresponding nodes, store info of messages in some global variable and the use other function for manipulation of those variables or there is a better way to do this.&lt;/p&gt;&#xA;" OwnerUserId="11238" LastActivityDate="2018-05-24T07:34:17.000" Title="Better way to use info. received from ROS subscriber nodes" Tags="&lt;ros&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15579" PostTypeId="1" CreationDate="2018-04-21T11:08:06.337" Score="1" ViewCount="95" Body="&lt;p&gt;I am running ROS Kinetic, on a Turtlebot3 Burger with a Raspberry Pi3. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The goal here is to remotely control the Turtlebot from another Raspberry Pi. The remote controller Pi sends movement information over a socket connection. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have delay problems when publishing into /cmd_vel (60 seconds delay) and again delay of 60 seconds from when the Twist message is echoed in the topic /cmd_vel to when the Turtlebot starts moving. I cannot locate why this 2 x 60 seconds delay occurs. I think that I might be pushing the raspberry pi too much. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I do the following steps: &#xA;The Turtlebot3 is the ROS MASTER.&#xA;1. From remote SSH into the Raspberry Pi --&gt; roslaunch turtlebot3_bringup turtlebot3_robot.launch&#xA;2. From remote SSH into the Raspberry Pi -- &gt;roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Everything works fine no delays. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I do: &#xA;The Turtlebot3 is the ROS MASTER.&#xA;1. From remote SSH into the Raspberry Pi --&gt; roslaunch turtlebot3_bringup turtlebot3_robot.launch&#xA;2. From remote SSH into the Raspberry Pi -- &gt;python post_office.py //python script posted below. &#xA;3. From remote SSH into the Raspberry Pi -- &gt;rostopic echo /cmd_vel &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The messages get into /cmd_vel with a 60 seconds delay. &#xA;The Turtlebot3 starts moving after 120 seconds delay. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I do: &#xA;The REMOTE PC is the ROS MASTER.&#xA;1. roscore on remote pc&#xA;2. From remote SSH into the Raspberry Pi --&gt; roslaunch turtlebot3_bringup turtlebot3_robot.launch&#xA;3. From remote SSH into the Raspberry Pi -- &gt;python post_office.py //python script posted below. &#xA;4. Remote pc -- &gt;rostopic echo /cmd_vel &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The messages get into /cmd_vel with a 0 seconds delay. &#xA;The Turtlebot3 starts moving after 35 seconds delay.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;env | grep ROS gives the following when Turtlebot3 is ROS MASTER:&#xA;ROS_ETC_DIR=/opt/ros/kinetic/etc/ros&#xA;ROS_ROOT=/opt/ros/kinetic/share/ros&#xA;ROS_MASTER_URI=&lt;a href=&quot;http://192.168.1.39:11311&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://192.168.1.39:11311&lt;/a&gt;&#xA;ROS_PACKAGE_PATH=/home/pi/catkin_ws/src:/opt/ros/kinetic/share&#xA;ROSLISP_PACKAGE_DIRECTORIES=/home/pi/catkin_ws/devel/share/common-lisp&#xA;ROS_HOSTNAME=192.168.1.39&#xA;ROS_DISTRO=kinetic &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the post_office.py running on the Turtlebot3. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;import socket&#xA;import json&#xA;import rospy&#xA;from geometry_msgs.msg import Twist&#xA;import thread&#xA;import time&#xA;&#xA;HOST = ''&#xA;PORT = 50007&#xA;s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)&#xA;s.bind((HOST, PORT))&#xA;s.listen(1)&#xA;conn, addr = s.accept()&#xA;print ('Connected by', addr)&#xA;&#xA;twist = Twist()&#xA;lin = 0.0&#xA;ang = 0.0&#xA;pub = rospy.Publisher('/cmd_vel', Twist, queue_size=5) #queqe size can be adjusted maybe&#xA;&#xA;def publish_cmd_vel():&#xA;    while not rospy.is_shutdown(): #checking the rospy.is_shutdown() flag and then doing work. You have to check is_shutdown() to check if your program should exit (e.g. if there is a Ctrl-C or otherwise).&#xA;        twist.linear.x = lin; twist.linear.y = 0; twist.linear.z = 0 #liniar has to be .x value to change&#xA;        twist.angular.x = 0; twist.angular.y = 0; twist.angular.z = ang #angular has to be .z value to change&#xA;        try:&#xA;            pub.publish(twist)&#xA;        except:&#xA;            print('unable to publish')&#xA;&#xA;def recv_from_controller():&#xA;    while True:&#xA;        global lin, ang&#xA;        move_bytes = conn.recv(1024) #receive information as bytes&#xA;        move_info = json.loads(move_bytes) #decode into a dictionary&#xA;        lin = move_info['lin']&#xA;        ang = move_info['ang']&#xA;        print(type(lin), lin, type(ang), ang)&#xA;&#xA;&#xA;thread.start_new_thread( recv_from_controller, ())    &#xA;&#xA;rospy.init_node('post_office', anonymous = False)&#xA;&#xA;while True:     &#xA;    publish_cmd_vel()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Any ideas to why I get these delays?&lt;/p&gt;&#xA;" OwnerUserId="18117" LastActivityDate="2018-04-21T11:08:06.337" Title="ROS: TurtleBot3 motors runs 60 seconds after message is seen in topic /cmd_vel" Tags="&lt;mobile-robot&gt;&lt;ros&gt;&lt;raspberry-pi&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15582" PostTypeId="2" ParentId="15483" CreationDate="2018-04-22T21:03:52.367" Score="2" Body="&lt;p&gt;This problem can be made easier when formulating an equivalent problem using &lt;a href=&quot;https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation&quot; rel=&quot;nofollow noreferrer&quot;&gt;unit quaternions&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;q\,q_a = q_b\,q \tag{1}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where each quaternions can be expressed as $w + x\,i + y\,j + z\,k$ while satisfying that $w^2 + x^2 + y^2 + z^2 = 1$, where $i^2 = j^2 = k^2 = i\,j\,k = -1$ (it can be noted that $i$, $j$ and $k$ do not &lt;a href=&quot;http://mathworld.wolfram.com/Commute.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;commute&lt;/a&gt;, for example $i\,j \neq j\,i$).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For quaternions multiplication it can be shown that it can be written as a matrix vector product, where the matrix is a function of one of the two quaternions. Namely when considering the quaternions $q = q_1 + q_2\,i + q_3\,j + q_4\,k$ and $r = r_1 + r_2\,i + r_3\,j + r_4\,k$, then their product can be written as&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{align}&#xA;q\,r &amp;amp;= &#xA;\begin{bmatrix}&#xA;1 &amp;amp; i &amp;amp; j &amp;amp; k&#xA;\end{bmatrix}&#xA;\begin{bmatrix}&#xA;q_1 &amp;amp; -q_2 &amp;amp; -q_3 &amp;amp; -q_4 \\&#xA;q_2 &amp;amp;  q_1 &amp;amp; -q_4 &amp;amp;  q_3 \\&#xA;q_3 &amp;amp;  q_4 &amp;amp;  q_1 &amp;amp; -q_2 \\&#xA;q_4 &amp;amp; -q_3 &amp;amp;  q_2 &amp;amp;  q_1&#xA;\end{bmatrix}&#xA;\begin{bmatrix}&#xA;r_1 \\ r_2 \\ r_3 \\ r_4&#xA;\end{bmatrix} \\&#xA;&amp;amp;= &#xA;\begin{bmatrix}&#xA;1 &amp;amp; i &amp;amp; j &amp;amp; k&#xA;\end{bmatrix}&#xA;\begin{bmatrix}&#xA;r_1 &amp;amp; -r_2 &amp;amp; -r_3 &amp;amp; -r_4 \\&#xA;r_2 &amp;amp;  r_1 &amp;amp;  r_4 &amp;amp; -r_3 \\&#xA;r_3 &amp;amp; -r_4 &amp;amp;  r_1 &amp;amp;  r_2 \\&#xA;r_4 &amp;amp;  r_3 &amp;amp; -r_2 &amp;amp;  r_1&#xA;\end{bmatrix}&#xA;\begin{bmatrix}&#xA;q_1 \\ q_2 \\ q_3 \\ q_4&#xA;\end{bmatrix}&#xA;\end{align}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Dividing by a unit quaternions is the same as multiplication with its conjugate, which is defined as negating the complex parts: $w - x\,i - y\,j - z\,k$. This allows us to write equation $(1)$ as&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;q\,q_a\,q^{-1} = q_b&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;which is equivalent to&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{bmatrix}&#xA;q_1 &amp;amp; -q_2 &amp;amp; -q_3 &amp;amp; -q_4 \\&#xA;q_2 &amp;amp;  q_1 &amp;amp; -q_4 &amp;amp;  q_3 \\&#xA;q_3 &amp;amp;  q_4 &amp;amp;  q_1 &amp;amp; -q_2 \\&#xA;q_4 &amp;amp; -q_3 &amp;amp;  q_2 &amp;amp;  q_1&#xA;\end{bmatrix}&#xA;\begin{bmatrix}&#xA; q_1 &amp;amp;  q_2 &amp;amp;  q_3 &amp;amp;  q_4 \\&#xA;-q_2 &amp;amp;  q_1 &amp;amp; -q_4 &amp;amp;  q_3 \\&#xA;-q_3 &amp;amp;  q_4 &amp;amp;  q_1 &amp;amp; -q_2 \\&#xA;-q_4 &amp;amp; -q_3 &amp;amp;  q_2 &amp;amp;  q_1&#xA;\end{bmatrix}&#xA;\begin{bmatrix}&#xA;q_{a,1} \\ q_{a,2} \\ q_{a,3} \\ q_{a,4}&#xA;\end{bmatrix} = &#xA;\begin{bmatrix}&#xA;q_{b,1} \\ q_{b,2} \\ q_{b,3} \\ q_{b,4}&#xA;\end{bmatrix}. \tag{2}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It can be shown that, while using the fact that $q$ is a unit quaternion, the two matrices in the above equation can be combined into the following expression&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{bmatrix}&#xA;q_1 &amp;amp; -q_2 &amp;amp; -q_3 &amp;amp; -q_4 \\&#xA;q_2 &amp;amp;  q_1 &amp;amp; -q_4 &amp;amp;  q_3 \\&#xA;q_3 &amp;amp;  q_4 &amp;amp;  q_1 &amp;amp; -q_2 \\&#xA;q_4 &amp;amp; -q_3 &amp;amp;  q_2 &amp;amp;  q_1&#xA;\end{bmatrix}&#xA;\begin{bmatrix}&#xA; q_1 &amp;amp;  q_2 &amp;amp;  q_3 &amp;amp;  q_4 \\&#xA;-q_2 &amp;amp;  q_1 &amp;amp; -q_4 &amp;amp;  q_3 \\&#xA;-q_3 &amp;amp;  q_4 &amp;amp;  q_1 &amp;amp; -q_2 \\&#xA;-q_4 &amp;amp; -q_3 &amp;amp;  q_2 &amp;amp;  q_1&#xA;\end{bmatrix} = &#xA;\begin{bmatrix}&#xA;1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\&#xA;0 &amp;amp; 1-2(q_3^2+q_4^2) &amp;amp; 2(q_2q_3-q_1q_4) &amp;amp; 2(q_2q_4+q_1q_3) \\&#xA;0 &amp;amp; 2(q_2q_3+q_1q_4) &amp;amp;  1-2(q_2^2+q_4^2) &amp;amp; 2(q_3q_4-q_1q_2) \\&#xA;0 &amp;amp; 2(q_2q_4-q_1q_3) &amp;amp; 2(q_3q_4+q_1q_2) &amp;amp; 1-2(q_2^2+q_3^2)&#xA;\end{bmatrix} \tag{3}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;the lower right $3\times3$ matrix of the the right hand side of $(3)$ is just the rotation matrix representation of $q$, denoted as $R(q)$. Substituting this result back into equation $(2)$ then we can conclude that there can only be a solution for $q$ given $q_a$ and $q_b$ if and only if $q_{a,1} = q_{b,1}$. This essentially comes down to that both $q_a$ and $q_b$ represent a rotation of the same angle, which would be identical to the requirement that the rotation matrices $R_1$ and $R_2$ have the same eigenvalues/are similar. Another way of writing a quaternion is the axis-angle representation $\cos\left(\theta\over2\right) + \sin\left(\theta\over2\right)(u_x\,i+u_y\,j+u_z\,k)$, where $\theta$ is the angle and $\begin{bmatrix}u_x &amp;amp; u_y &amp;amp; u_z\end{bmatrix}^\top$ the (unit-)axis of rotation. So therefore we can conclude from equation $(2)$ and $(3)$ that $R(q)$ has to map the rotation axis of $q_a$, $\vec{u}_a$, to the rotation axis of $q_b$, $\vec{u}_b$, so $\vec{u}_b = R(q)\,\vec{u}_a$. There are infinitely many rotations which would satisfy this mapping.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The rotations with the smallest angle can be found by using a rotation axis perpendicular to both given axes, which can be obtained using the cross product of the two axes&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;q_{\min} = \sqrt{\frac{1 + \vec{u}_a \cdot \vec{u}_b}{2}} + \sqrt{\frac{1 - \vec{u}_a \cdot \vec{u}_b}{2}}&#xA;\begin{bmatrix}&#xA;i &amp;amp; j &amp;amp; k&#xA;\end{bmatrix}&#xA;\frac{\vec{u}_a \times \vec{u}_b}{\|\vec{u}_a \times \vec{u}_b\|} \tag{4}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $\vec{u}_a$ and $\vec{u}_b$ are both assumed to be of unit length.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The rotations with the largest angle can be found by rotating 180° around the average of the two axis&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;q_{\max} = &#xA;\begin{bmatrix}&#xA;i &amp;amp; j &amp;amp; k&#xA;\end{bmatrix}&#xA;\frac{\vec{u}_a + \vec{u}_b}{\|\vec{u}_a + \vec{u}_b\|}. \tag{5}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And if it is desired these could be converted to rotation matrices. For example the rotation matrix corresponding to equation $(5)$ can simplified down to the following expression&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;R_{\max} = \frac{1}{s_1^2 + s_2^2 + s_3^2}&#xA;\begin{bmatrix}&#xA;s_1^2-s_2^2-s_3^2 &amp;amp; 2\,s_1\,s_2 &amp;amp; 2\,s_1\,s_3 \\&#xA;2\,s_2\,s_1 &amp;amp; s_2^2-s_1^2-s_3^2 &amp;amp; 2\,s_2\,s_3 \\&#xA;2\,s_3\,s_1 &amp;amp; 2\,s_3\,s_2 &amp;amp; s_3^2-s_1^2-s_2^2&#xA;\end{bmatrix} \tag{6}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;with $s_n = q_{a,n+1} + q_{b,n+1}\ \forall\,n\in\{1,2,3\}$.&lt;/p&gt;&#xA;" OwnerUserId="1487" LastEditorUserId="1487" LastEditDate="2018-04-22T22:23:33.390" LastActivityDate="2018-04-22T22:23:33.390" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15583" PostTypeId="1" AcceptedAnswerId="18692" CreationDate="2018-04-23T14:22:15.693" Score="4" ViewCount="153" Body="&lt;p&gt;I am developing C++ code to estimate roll and pitch of a camera using accelerometer and gyroscope. The roll, pitch and yaw are in my state space ($X_t$) and the process is modeled as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\bar{X_t} = X_{t-1} + Eu$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here $u$ is a vector of gyro rates in x, y and z axis while $E$  is the matrix to convert gyro rates to Euler rates. Note that even though yaw is part of the state space, it is not corrected by accelerometer. It is present so that the short term reliability of gyros can be made use of, in the future development of the project. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, the covariance matrix($P_t$) is calculated as: &#xA;$\bar{P_t} = GP_{t-1}G^T + Q$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and the Kalman gain($K_g$) is calculated as:&#xA;$K_g = PH^T(HPH^T + R)^{-1}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The $Q$ is the process noise matrix and $R$ is the observation noise matrix. The $G$ is the Jacobian of process model. The observation model $H$ is an identity matrix (This model gets multiplied by state space vector to produce predicted observation. The actual observation contains roll and pitch angles calculated from accelerometer, and yaw angle which simply is a copy of predicted yaw). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am getting good results in most poses of the camera. However, when one of the angles (roll or pitch) is close to zero, I see drift or zero crossing patterns in the plots of roll or pitch. &lt;strong&gt;Can I avoid them by better modeling or tuning parameters?&lt;/strong&gt; I would like to know if there are any systematic methods for modeling:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) The process noise $Q$? I am currently using a Gaussian matrix with  mean = 0 and std deviation of 1. I used &lt;a href=&quot;https://www.geeksforgeeks.org/gaussian-filter-generation-c/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; as reference. How can I model them better? What should be its order of magnitude?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) All diagonal values of $P$ are set to an initial value of 0.05 to represent uncertainty in initialization. The initialization of state space vector is done by calculating roll and pitch values from initial readings of accelerometer. The yaw is initially set to 0. I prefer the accelerometer to be trusted more than gyro. Hence the initial uncertainty, 0.05, is a value lower than the lowest value(0.059) in $Q$. Is this a good approach? Are there better ways?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3) The observation noise $R$? Right now, I have calculated std deviation of accelerometer readings in x, y and z. I use their square as first, second and third diagonal elements of $R$. The rest of the values in the matrix are 0. As I type this question, I have realized that I should first convert accelerometer readings to roll, pitch angles before calculating std deviation. However, are there better suggestions to model this? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt;: &#xA;1) In the above situation only either roll or pitch are close to zero. Not both.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) My intention is to code the Gaussian noise models in C++, rather than using readily available functions in Matlab or Excel, if they are the most suitable models. I am also looking for suggestions on better models, if any.&lt;/p&gt;&#xA;" OwnerUserId="10959" LastEditorUserId="10959" LastEditDate="2018-04-24T13:14:43.057" LastActivityDate="2019-04-24T15:35:38.400" Title="KF/ EKF - Modelling and tuning noise matrices and other parameters" Tags="&lt;kalman-filter&gt;&lt;gyroscope&gt;&lt;accelerometer&gt;&lt;noise&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15584" PostTypeId="2" ParentId="15553" CreationDate="2018-04-23T14:43:04.323" Score="0" Body="&lt;p&gt;Drones is a commonly used terms for Unmanned Aerial Vehicles (UAVs) also named Unmanned Aerial Systems (UASs). The name drone comes from the first UAVs prototype which was making a humming noise like the drone (male bee). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The terms UAV or UAS are clearer, they define unmanned systems, meaning that there is no human operator inside the system.&#xA;So how is it flying ?&#xA;Well  as you pointed out there are two solutions:&#xA;1. remote piloting (a human operator flies the system remotely)&#xA;2. autonomous piloting (a computer flies the system on-board or remotely)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you pointed out remote piloting relies on radio transmission. &#xA;The autonomous piloting, do not necessarily relies on GPS, other sensors might be available to provide enough information for autonomous flight (cameras, laser sensor, ...).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course the possibility to have a system allowing both remote piloting and autonomous flight is possible, and advisable for testing the autonomous algorithms. There can also be so kind of complementarity for example for position control, when the low-level control (i.e. attitude and position stabilization) is done autonomously while high-level way-points are define by remote operator.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2018-04-23T14:43:04.323" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15586" PostTypeId="1" CreationDate="2018-04-23T19:33:46.730" Score="0" ViewCount="309" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Dbg1s.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Dbg1s.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;if we just examine the translational dynamics (X and Y direction), the dynamics are coupled, So if I want to design a PID controller to control the position, the outcome will be unpredictable because of the coupling.I some research papers , I have seen people assume  (psi =0 ) at the equilibrium point  to remove the coupling in x and y dynamics. But I would like to design a controller along with the couple system? Is there any solution like decoupling the dynamics equations or something. &lt;/p&gt;&#xA;" OwnerUserId="20229" LastActivityDate="2018-11-21T02:13:14.247" Title="Quadcopter mathematical model and controller design" Tags="&lt;quadcopter&gt;&lt;control&gt;&lt;dynamics&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="15588" PostTypeId="2" ParentId="15583" CreationDate="2018-04-24T06:49:26.167" Score="0" Body="&lt;p&gt;You are suffering from “gimbal lock” when roll and pitch are close to zero. If you want to minimize the effects of that you might consider using quaternions, it is another form of representing angles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the standard deviation of the signals is simple. Just give the sensor a fixed input value and read the output. The output has to be a noisy signal around the mean, so you can make a Gaussian fit of that (excel, matlab can do it) and get the standard deviation. &lt;/p&gt;&#xA;" OwnerUserId="11648" LastActivityDate="2018-04-24T06:49:26.167" CommentCount="2" ContentLicense="CC BY-SA 3.0" />
  <row Id="15589" PostTypeId="2" ParentId="15577" CreationDate="2018-04-24T06:53:44.523" Score="1" Body="&lt;p&gt;You can have as many callbacks as you want in a single program. Usually I save the values in internal variables within the program. They do not have to be global, that depends on your application.&lt;/p&gt;&#xA;" OwnerUserId="11648" LastActivityDate="2018-04-24T06:53:44.523" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15590" PostTypeId="2" ParentId="15586" CreationDate="2018-04-24T08:45:36.487" Score="0" Body="&lt;p&gt;Quadrotors are coupled systems because you  have 4 inputs for 6D motions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Usually people are using cascade controllers to regulate both orientation and position and assume that desired orientation is achieved when considering the control of position. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;see this famous RAM tutorial paper to get familiar with quadrotors: &lt;a href=&quot;https://ieeexplore.ieee.org/document/6289431/?arnumber=6289431&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://ieeexplore.ieee.org/document/6289431/?arnumber=6289431&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, quadrotors are flat, in the &lt;a href=&quot;https://en.wikipedia.org/wiki/Flatness_(systems_theory)&quot; rel=&quot;nofollow noreferrer&quot;&gt;control theory sens&lt;/a&gt;, for position and yaw, this means that the internal orientation dynamics are stable, if the flat output are stabilized. That is the reason why you can easily fly them controlling the position.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastEditorUserId="18235" LastEditDate="2018-04-24T15:32:35.323" LastActivityDate="2018-04-24T15:32:35.323" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15592" PostTypeId="1" AcceptedAnswerId="15593" CreationDate="2018-04-24T15:50:58.010" Score="0" ViewCount="54" Body="&lt;p&gt;I try to understand some MATLAB code (see below) i found from the web for inter-robot collision avoidance. But I'm not really understand, how the theory behind this code work. Can anyone help me explained the theory behinds this code?  &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;% Collision avoidance using distance-based velocity scaling (scale by alpha)&#xA;% along the vector between an agent and the agent nearest to it&#xA;%        1 |          _______&#xA;%  alpha   |        /&#xA;%          |      /&#xA;%        0 |___ /&#xA;%          0   R2    R1    ++++&#xA;%            distance&#xA;%  u: velocity&#xA;%  p: position&#xA;&#xA;&#xA;    function u = avoidCollisions(states, n, u)&#xA;&#xA;        R1 = COLLISION_RAD*3;&#xA;        R2 = COLLISION_RAD;&#xA;        dist = Inf;&#xA;        % checking for the nearest robot&#xA;        for j = 1:N&#xA;            d = norm(states(n).p-states(j).p);&#xA;            if (j ~= n) &amp;amp;&amp;amp; (d &amp;lt; dist)&#xA;                k = j;&#xA;                dist = d;&#xA;            end&#xA;        end&#xA;        pDiff = states(n).p - states(k).p;&#xA;&#xA;        if dist &amp;gt; R2&#xA;            alpha = (dist-R2)/(R1-R2);&#xA;        else&#xA;            alpha = 0;&#xA;        end&#xA;        if dot(u, pDiff) &amp;lt; 0&#xA;            v2 = project(u, [pDiff(2); -pDiff(1)]);&#xA;            u = alpha*u + (1-alpha)*v2;   &#xA;        end        &#xA;    end&#xA;&#xA;% Vector projection of b onto a&#xA;    function v = project(b, a)&#xA;        v = dot(a, b)/sum(a.^2)*a;&#xA;    end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="19379" LastActivityDate="2018-04-25T06:08:57.587" Title="Inter-robot Collision Avoidance" Tags="&lt;mobile-robot&gt;&lt;control&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15593" PostTypeId="2" ParentId="15592" CreationDate="2018-04-24T18:20:02.660" Score="0" Body="&lt;p&gt;&lt;strong&gt;General Idea&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This assume that each agent as a velocity trajectory it is following, to avoid collision this velocity is going to be scaled by a factor $\alpha$ computed at each step.&#xA;At every step, the distance to the nearest agent is computed, then as the illustration at the beginning of the code suggests&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;if the distance is superior than $R_1$ then $\alpha=1$, i.e. no&#xA;scaling of the velocity;&lt;/li&gt;&#xA;&lt;li&gt;if the distance is smaller than $R_2$ then  $\alpha=0$, i.e. the agent stops; &lt;/li&gt;&#xA;&lt;li&gt;if the distance is between the two radius then a linear scaling is applied&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;This means that when the agents are sufficiently far away the collision avoidance has not impact on them. If they come close in a certain neighborhood they will slow down, and if they are to close they will stop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Implementation&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the codes it seems that the parameters of the function avoidCollisions are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;states: the state of all agent&lt;/li&gt;&#xA;&lt;li&gt;n: the index of the considered agent&lt;/li&gt;&#xA;&lt;li&gt;u: the desired velocity of this agent&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;It also seems that this is applied to 2D cases.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the code once the smallest closest agent is found (index k) the distance is stored (dist) and also the relative coordinates of the agent n w.r.t. to agent k (&lt;code&gt;pDiff&lt;/code&gt;).&#xA;The value of $\alpha$ is computed as described below put leaving the possibility to have it greater than 1 if the distance is greater than $R_1$.&#xA;Then the code check if the desired velocity is orthogonal to the position of the agent k relatively to agent n, if this is the case n is not going toward k so no collision avoidance is necessary (not that if &lt;code&gt;pDiff&lt;/code&gt; was the relative position of agent k w.r.t. agent n, the sign would be more intuitive). &#xA;Then $v_2$ is introduced, it is the projection a vector orthogonal to the position of agent k relative to agent n, and the velocity vector u. &#xA;This way the velocity u is scaled by alpha only in the direction non-orthogonal to the relative position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that $\alpha$ should be forced to remain less than or equal to 1.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastEditorUserId="18235" LastEditDate="2018-04-25T06:08:57.587" LastActivityDate="2018-04-25T06:08:57.587" CommentCount="5" ContentLicense="CC BY-SA 3.0" />
  <row Id="15594" PostTypeId="1" CreationDate="2018-04-25T04:08:15.527" Score="0" ViewCount="74" Body="&lt;p&gt;I am preparing for Trinity Firefighting Robot Contest America. and I need fast legged robot of the max size 30cm X 30cm X 30cm that use RX-24 servo  from Robotis.  The arena will be maze and perfectly flat. My robot upper body is perfectly symmetric so its  lower body or leg doesn't need to rotate its face to another direction but still need turn its motion for maneuver inside the maze. &lt;/p&gt;&#xA;" OwnerUserId="20236" LastEditorUserId="18235" LastEditDate="2018-04-25T13:21:15.740" LastActivityDate="2018-04-25T21:38:46.823" Title="Which one is faster? Hexapod or Quadruplets" Tags="&lt;hexapod&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="15598" PostTypeId="1" AcceptedAnswerId="15612" CreationDate="2018-04-25T20:30:58.123" Score="0" ViewCount="59" Body="&lt;p&gt;It is easy to understand how a robot can avoid obstacle if the goal point is not within the obstacle (Point A) as shown in the figure. But I'm curious how could a robot know that the the goal point is within the obstacle (Point B)? For example in an area exploration using random motion, the way-point is generated randomly. If the generated way-point located inside the obstacle, how could robot know? How to detect this problem?&lt;br&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/nefiP.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/nefiP.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19379" LastActivityDate="2018-04-28T04:47:11.160" Title="Obstacle Avoidance: Detection of goal inside the obstacle" Tags="&lt;mobile-robot&gt;&lt;control&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15599" PostTypeId="2" ParentId="15594" CreationDate="2018-04-25T21:38:46.823" Score="1" Body="&lt;p&gt;Hexapod robot with tripod gait cycle will be both more stable and faster in terms of the locomotion speed. It is more stable because the support polygon of the tripod gait is a triangle. But in return you have 6 more joints and hence 6 more servo motors, which increases the power consumption and the complexity of the system.&lt;/p&gt;&#xA;" OwnerUserId="18352" LastActivityDate="2018-04-25T21:38:46.823" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15601" PostTypeId="1" CreationDate="2018-04-25T22:51:53.380" Score="2" ViewCount="840" Body="&lt;p&gt;When thinking about robots that emulate animals, I would think roboticists would try to emulate humans which have distinctly forward jointed legs. Yet, I see in many instances that robots have more bird-like legs with shorter femurs. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why are robots designed with these legs? What advantage do they provide over more human-like legs?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/8mSp0.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8mSp0.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="20245" LastEditorUserId="20245" LastEditDate="2018-04-25T23:03:06.467" LastActivityDate="2018-04-26T12:43:33.540" Title="Why do roboticists choose a bird-like leg over a humanoid leg?" Tags="&lt;legged&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 3.0" />
  <row Id="15602" PostTypeId="1" AcceptedAnswerId="15617" CreationDate="2018-04-26T02:38:10.603" Score="0" ViewCount="167" Body="&lt;p&gt;I thought marginalization does not change the number of the edges but &lt;a href=&quot;http://slideplayer.com/slide/4546563/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; material (page 11) describes that as a result of marginalization we will have more edges in graph. Why does it increase the edges?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For those who does not want to open the page, it is written as follows.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Marginalization: Cons&#xA;Con: More edges in graph&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Feature with N observations leads to O(N2) edges&lt;/li&gt;&#xA;&lt;li&gt;Slower/harder to solve, (Information Matrix less sparse)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="19219" LastEditorUserId="19219" LastEditDate="2018-04-26T03:21:29.950" LastActivityDate="2018-04-29T06:01:01.547" Title="Does marginalization increase the number of edges in Graph SLAM?" Tags="&lt;slam&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15603" PostTypeId="1" CreationDate="2018-04-26T03:21:17.177" Score="3" ViewCount="3147" Body="&lt;p&gt;Our team is planning to go for European Rover Challenge (ERC) 2018 for which we are designing an Autonomous rover. In order to implement SLAM, we need a way of mapping (with a range of atleast 2-4 meters) for which we considered using a LIDAR or a stereo cam. Could anyone suggest a good, cheap and accurate enough LIDAR, Stereo cam or some other option by which we could achieve this?&lt;/p&gt;&#xA;" OwnerUserId="20246" LastEditorUserId="20246" LastEditDate="2018-04-27T04:22:51.347" LastActivityDate="2021-02-08T22:15:35.423" Title="Which is a good and cheap 3D LIDAR or other options?" Tags="&lt;mobile-robot&gt;&lt;slam&gt;&lt;localization&gt;&lt;mapping&gt;&lt;autonomous-car&gt;" AnswerCount="4" CommentCount="5" ClosedDate="2019-05-28T09:20:17.517" ContentLicense="CC BY-SA 3.0" />
  <row Id="15604" PostTypeId="2" ParentId="15603" CreationDate="2018-04-26T05:53:47.400" Score="1" Body="&lt;p&gt;There is no cheap outdoor 3D LiDAR (as long as the definition of your &quot;cheap&quot; is under USD1000).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=AFH2yN3rM78&quot; rel=&quot;nofollow noreferrer&quot;&gt;This&lt;/a&gt; might suit your purpose. There are low cost (USD100~500) 2D LiDARs. You may need to combine camera and LiDAR if you need to cope with pattern-less scenes or dark scenes. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the way, a good engineer should not use terms such as &quot;good, cheap, accurate&quot; without explanation. Try to quantify your requirements next time.&lt;/p&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2018-04-26T05:53:47.400" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15605" PostTypeId="2" ParentId="15601" CreationDate="2018-04-26T10:53:13.640" Score="2" Body="&lt;p&gt;One chooses different leg designs for different reasons. Sometimes there are specific design goals, involving the workspace, manipulability, and dynamics,  but sometimes the designs are less intentional, with choices made for other reasons.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Petman, the predecessor to the Atlas series was designed to mimic human kinematics for testing protective clothing. The iCub series were also specifically mimicking humans rather than designed to a performance spec, and the first generation of those could not walk. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hurst (the lead person behind Cassie which is the robot you pictured) switched from his previous approach (Atrius) to the bird approach after collaborating with people that studied bird walking. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://jeb.biologists.org/content/217/21/3786&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://jeb.biologists.org/content/217/21/3786&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="184" LastEditDate="2018-04-26T12:43:33.540" LastActivityDate="2018-04-26T12:43:33.540" CommentCount="4" ContentLicense="CC BY-SA 3.0" />
  <row Id="15608" PostTypeId="2" ParentId="15464" CreationDate="2018-04-26T19:33:23.040" Score="0" Body="&lt;p&gt;Let's have a look at the Hessian H of simulated BA.&#xA;&lt;img src=&quot;https://copark86.github.io/images/Hessian.jpg&quot; alt=&quot;1&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yello represents non zero element and upper 60 by 60 matrix represent ${\textbf{H}}_{cc}$. When a structure is observed over multiple poses, Hessian make correlation terms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://copark86.github.io/images/Marginalization.jpg&quot; alt=&quot;2&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obiously, ${\textbf{H}}_{cc}\mathbf{\xi}_c ={\textbf{g}}_{c}$ ignores the correlation terms. Therefore, each poses loose information of linkage, whereas in $\bar{\textbf{H}}_{cc}\mathbf{\xi}_c =\bar{\textbf{g}}_{c}$ off diagonal terms are added to Hessian which represents the rumped relationship miginalized from $-\textbf{H}_{cs}{\textbf{H}_{ss}}^{-1}\textbf{H}_{sc}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The benefit are faster convergence and low final error in optimization. &lt;/p&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2018-04-26T19:33:23.040" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15610" PostTypeId="1" AcceptedAnswerId="15616" CreationDate="2018-04-27T02:03:48.333" Score="2" ViewCount="56" Body="&lt;p&gt;I'm looking to start a project that incorporates some form of state estimation and path planning for a simple simulated robot dynamic model, in an environment that contains obstacles. I'm hoping to use the combination of state estimation and path planning to allow the robot to efficiently navigate through its environment from an arbitrary starting position A, to another arbitrary ending position B, but was unsure where to start. With regards to the state estimation, I thought it would be good to implement a variant of SLAM (possibly Fast SLAM if it isn't too complicated), but I'm quite lost about where to start when it comes to the path planning side of the project, since there seem to be many different ways to do it. The first algorithms that seem to pop up are variants of A* and RRT*, but I was wondering if there are any &quot;state-of-the-art&quot; algorithms that may allow for real-time path planning. My previous work has looked at the use of convex optimization for optimal guidance and control of various dynamic systems, but it seems that using convex optimization would be very difficult in a highly constrained environment (i.e. environment with lots of obstacles). Any help would be much appreciated. &lt;/p&gt;&#xA;" OwnerUserId="20223" LastActivityDate="2018-04-29T05:08:41.367" Title="Methods for state estimation and real-time path planning of a mobile robot" Tags="&lt;mobile-robot&gt;&lt;path-planning&gt;&lt;estimation&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15611" PostTypeId="2" ParentId="11322" CreationDate="2018-04-27T23:04:01.733" Score="0" Body="&lt;p&gt;Open slam is completely out of updating better you can go with the ROS stack for perception thereby you can work on your stuffs to run the codes&lt;/p&gt;&#xA;" OwnerUserId="20257" LastActivityDate="2018-04-27T23:04:01.733" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15612" PostTypeId="2" ParentId="15598" CreationDate="2018-04-28T04:47:11.160" Score="1" Body="&lt;p&gt;The same obstacle detection and path planning approach that can get you from O to A should be able to also tell you that B is not reachable. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It will depend on the planning strategy for how this manifests. It should be able to say though that either every option has been exhausted (if that's finite and realistically achievable) or that it needs to give up after making a reasonable number of attempts. It may, therefore, not always be possible (or at least practical) to distinguish between B being fully inside an obstacle versus being surrounded by obstacles with only a very narrow opening between them. &lt;/p&gt;&#xA;" OwnerUserId="55" LastActivityDate="2018-04-28T04:47:11.160" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15616" PostTypeId="2" ParentId="15610" CreationDate="2018-04-29T05:08:41.367" Score="1" Body="&lt;p&gt;I am assuming that by real time path planning, you mean starting off in a partially known environment and updating your 'plan' as you gain more knowledge through your SLAM algorithm. For a real world scenario, two of the biggest concerns here would be a) taking into account new information from the sensors to update your obstacle map and plan, b) being computationally efficient to actually compute plans quickly during navigation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Real time sampling based path planning has been examined in some recent papers: for state of the art algorithms, you can possibly look into &lt;a href=&quot;https://users.aalto.fi/~hamalap5/FutureGameAnimation/p113-naderi.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Real Time RRT* (RT-RRT*)&lt;/a&gt; or &lt;a href=&quot;http://robot.cmpe.boun.edu.tr/wafr2014/papers/paper_35.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;RRTx&lt;/a&gt;, that does real time replanning as the environment information changes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are various other perspectives of looking at this as well. On the most basic end of the spectrum, if you're only concerned about, say, dynamically moving obstacles, the simplest algorithm to implement that can deal with planning in that scenario would be the &lt;a href=&quot;https://www.ri.cmu.edu/pub_files/pub4/likhachev_maxim_2005_1/likhachev_maxim_2005_1.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;D* algorithm or its anytime variants&lt;/a&gt;. On the more advanced side, you can look into the idea of &lt;a href=&quot;http://dnc.tamu.edu/projects/cooperative/splam.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;SLAP: simultaneous localization and planning&lt;/a&gt;, that attempts to capture factors such as uncertainty and rewiring path plans as SLAM builds your environment and constructs the robot's belief.&lt;/p&gt;&#xA;" OwnerUserId="10310" LastActivityDate="2018-04-29T05:08:41.367" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15617" PostTypeId="2" ParentId="15602" CreationDate="2018-04-29T06:01:01.547" Score="1" Body="&lt;p&gt;Exact marginalization will change the number of edges, because once a node (pose) is eliminated, the information in the edges that were incident to that node would have to be stored as edges between the existing nodes. This densification of the graph automatically means that the information matrix is dense because of the newly added edges. This results in what is known as an 'elimination clique'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A nice example of this is shown in &lt;a href=&quot;https://pdfs.semanticscholar.org/066d/6c2d24c82ef3fc5ea49afdd1256b783fe442.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this paper&lt;/a&gt;, which I am reproducing here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/kS4fC.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kS4fC.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When moving from pose $x_t$ to $x_{t+1}$, the SLAM algorithm would naturally want to marginalize the $x_t$ node away: but that means the direct landmark-pose observations that were encoded in the edges connecting $x_t$ and $L_i$ would now have to be rewired to be incident on $x_{t+1}$, which is equivalent to obtaining new observations of $L_i$. Notice how the information matrix becomes denser.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The alternative to this is called approximate marginalization. As an example, &lt;a href=&quot;http://www2.informatik.uni-freiburg.de/~stachnis/pdf/kretzschmar11iros.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this paper&lt;/a&gt; attempts approximate marginalization by using Chow-Liu trees, where the graph is pruned such that each node connects only to one other node that affords the maximum mutual information.&lt;/p&gt;&#xA;" OwnerUserId="10310" LastActivityDate="2018-04-29T06:01:01.547" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15621" PostTypeId="1" CreationDate="2018-04-30T05:07:52.340" Score="0" ViewCount="239" Body="&lt;p&gt;I would like to freely move my UR10 arm in response to an external force, just like the zero-g mode for Baxter robot, which can be activated by holding its wrist. The Baxter documentation on zero-g mode says the following:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Zero-G mode can often be confused with the mode obtained by disabling the gravity compensation torques. By default, the gravity compensation torques will always be applied when the robot is enabled. In Zero-G mode, the controllers are disabled and so the arm can be freely moved across. In this case, the effect of gravity would be compensated by the gravity compensation model applying gravity compensation torques across the joints, there would be no torques from the controllers since they would not be active, and so the arm can be moved freely around, hence the name.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So apparently this means that the controller torques need to be disabled in order to achieve the zero-g mode. I am using &lt;code&gt;ur_modern_driver&lt;/code&gt; for my UR10 arm. Any ideas on how can I implement this mode with the running modern driver?&lt;/p&gt;&#xA;" OwnerUserId="15447" LastActivityDate="2018-05-04T00:05:41.663" Title="zero-g mode for UR10 gravity compensation" Tags="&lt;control&gt;&lt;manipulator&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15622" PostTypeId="2" ParentId="15345" CreationDate="2018-04-30T22:42:25.443" Score="0" Body="&lt;p&gt;While the Roomba is charging in a trickle mode it will only supply enough power for its internal circuity. If your controller is using power from the min-din the battery will run down as its supplying the extra power. You can confirm this by using the OI to note the &quot;-&quot; sign on the charge current during Passive mode trickle charging&lt;/p&gt;&#xA;" OwnerUserId="19572" LastActivityDate="2018-04-30T22:42:25.443" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15623" PostTypeId="2" ParentId="12846" CreationDate="2018-04-30T22:48:47.970" Score="0" Body="&lt;p&gt;I have the same problem in that pulsing the BRC line keeps the Roomba alive when its OFF the charger, but not when its ON the charger&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm starting to wonder if the &quot;iRobot Create 2 Open Interface (OI) Spec&quot; was only referring to the undocked state&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;To disable sleep, pulse the BRC pin low periodically before these five minutes expire. Each pulse resets this five minute counter.&lt;/strong&gt; &lt;/p&gt;&#xA;" OwnerUserId="19572" LastActivityDate="2018-04-30T22:48:47.970" CommentCount="1" ContentLicense="CC BY-SA 3.0" />
  <row Id="15624" PostTypeId="2" ParentId="9495" CreationDate="2018-04-30T22:52:42.167" Score="1" Body="&lt;p&gt;The Create 2 is a remanufactured series 600 Roomba. In my case, mine was a Roomba 650 as evidenced by pulling back the little &quot;2&quot; sticker over the location where 650 was marked&lt;/p&gt;&#xA;" OwnerUserId="19572" LastActivityDate="2018-04-30T22:52:42.167" CommentCount="0" ContentLicense="CC BY-SA 3.0" />
  <row Id="15626" PostTypeId="1" CreationDate="2018-05-01T10:47:40.347" Score="1" ViewCount="73" Body="&lt;p&gt;I remember seeing a video of the Prusa i3 Mk3 printer. It can detect when&#xA;the stepper motor misses a step, so it can home itself again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to know how this is done!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are a few options I can imagine:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;This can be done using standard stepper motors and stepper motor drivers, the detection is done entirely in software.&lt;/li&gt;&#xA;&lt;li&gt;This can be done using standard stepper motors, but requires some extra circuitry as well as software.&lt;/li&gt;&#xA;&lt;li&gt;This can only be done with special stepper motors and other components and special software.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Which option is correct? Any of the above, or something completely different? If you have any references, such a links, articles or blog posts on how to do missed step detection, it would be very interesting also!&lt;/p&gt;&#xA;" OwnerUserId="9658" LastEditorUserId="9658" LastEditDate="2018-05-02T21:38:53.767" LastActivityDate="2018-05-02T21:38:53.767" Title="Is missed step detection of a stepper motor done is software or hardware?" Tags="&lt;stepper-motor&gt;&lt;embedded-systems&gt;&lt;stepper-driver&gt;" AnswerCount="0" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="15628" PostTypeId="1" CreationDate="2018-05-01T11:43:41.670" Score="0" ViewCount="46" Body="&lt;p&gt;It should be possible to take the formal description of robotics components (in form of ontology, formal API descriptions or other kind of formal specification of the capabilities and requirements of this component) and import them in universal design studio and then use this studio for the integration and the building of the final robot of the final robotics systems. There are BPEL, component service architecture and business services in software development that offers to build the final software by simply integrating available services. So - my thought is - that there should be similar ecosystem for building robots and robotic systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have heard about ROS and that each component provider tries to create ROS API/interface for its own component to facilitate the easy use of its component from the ROS-based robot. I am looking something like that but with self-description capabilities (as BPEL services self-describe themselves). And I am looking also for the Integrated Development Environment that can use those component descriptions, that can import them, that can model and simulate and build (compile) the final robot desing. There are lot of CAD software for architecture, for mechanical design, for EM design but is there CAD for final multipurpose robot?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;May dream is to use off-the-shelf components and compose in optimal way using &lt;a href=&quot;https://math.stackexchange.com/questions/1083338/structural-design-meta-optimization-is-there-mathematical-theory-optimiza&quot;&gt;https://math.stackexchange.com/questions/1083338/structural-design-meta-optimization-is-there-mathematical-theory-optimiza&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Structured_prediction&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Structured_prediction&lt;/a&gt; In some cases I dream to achive the optimal robot and in some cases I dream to arrive the formal specification of the component that is not yet available but whose design (e.g. for 3D printing or other kind of manufacturing) I can derive from design of my robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that Stack prohibits asking for direct recommendations of some software of components but in my case I am not asking for direct recommendation. I have idea about workflow of robot development and I am just interested: &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;How acceptable and desirable is such workflow?;&lt;/li&gt;&#xA;&lt;li&gt;Is such workflow already implemented in one or other way?; &lt;/li&gt;&#xA;&lt;li&gt;Maybe my idea about workflow is the failure and I should look for other kind workflow (what?) which is already implemented in the community and which  achieve the same goals that my idea.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="809" LastEditorUserId="2289" LastEditDate="2018-05-02T08:09:03.297" LastActivityDate="2018-05-02T09:09:43.363" Title="Ontology/marketplace of robotics components and integration environment (BPEL or CAD for robotics)?" Tags="&lt;ros&gt;&lt;design&gt;&lt;software&gt;&lt;simulator&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15632" PostTypeId="2" ParentId="15628" CreationDate="2018-05-02T09:09:43.363" Score="1" Body="&lt;p&gt;Do professional robot designers use semi or fully automated toolchains to implement physical systems?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course. Especially if you broaden your definition of robot to electro-mechanical system. Proprietary toolchains have different levels of sophistication, some no more than an internal process to speed things up, others integrating solid modeling kernels and custom electro-mechanical math models to let you input specs and speed through design trade-off selection to a final design quickly. I have helped develop both ends of the spectrum.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These are kept as trade secrets. If you find much public info on them, someone messed up...&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2018-05-02T09:09:43.363" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15634" PostTypeId="2" ParentId="15433" CreationDate="2018-05-02T17:45:54.800" Score="0" Body="&lt;p&gt;I have one more suggestion for you as disassembling the Create 2 to access the Clean button contacts is quite a bit of work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I purchased a standard Roomba IR Remote and added a relay that the EZB controller can activate.  I can happily report that it DOES indeed wake a sleeping trickle charging Roomba on its dock. In fact, it does acts very similar to pushing the Clean button.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By using this technique, you would NOT have to disassemble the Roomba to add a relay across the Clean button contacts. You could clean up this mod by replacing the IR remote with an Arduino board with a IR LED and software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I need to warn you about a couple of non-show stopping issues. The IR remote acts similar to the Clean button but not exactly the same. A short press on the Clean button turns on the green LED and a second short press starts the cleaning cycle. A long press has no effect. Short presses can be used to interrupt and restart the cleaning cycle&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the IR remote, a short pulse (500ms) will do nothing while docked, but a single long pulse (&gt; 1500ms) will start the cleaning cycle. &#xA;You can interrupt the cleaning cycle and restart the cleaning cycle with short pulses. Long pulses just seem to toggle the green LED.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One more thing… If you choose to stop the cleaning cycle using the OI movement commands from the controller, which is what we really want to do for a telepresence robot, the IR pulses will no longer be able to control the Roomba. If you wish to regain control via IR, you must send a Stop (173) command&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can find some additional details here. &lt;a href=&quot;http://www.ez-robot.com/Community/Forum/posts.aspx?threadId=10953&amp;amp;page=11&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.ez-robot.com/Community/Forum/posts.aspx?threadId=10953&amp;amp;page=11&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="19572" LastActivityDate="2018-05-02T17:45:54.800" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15635" PostTypeId="2" ParentId="15281" CreationDate="2018-05-03T00:17:34.643" Score="0" Body="&lt;p&gt;Adafruit.com has a version of python that will work on the Arduino, Circuit Python. It's downloadable for free. I'm not sure who created it.&lt;/p&gt;&#xA;" OwnerUserId="19275" LastActivityDate="2018-05-03T00:17:34.643" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15636" PostTypeId="2" ParentId="15621" CreationDate="2018-05-03T08:55:35.190" Score="1" Body="&lt;p&gt;If I understand your question correctly, You want to move the robot freely, its possible but only in the following case( as far as my understanding goes, in fact my experience on other robot):&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The control mode should be in torque mode( mean the controller output is torque not position i.e send torque command not a position to each joint)&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Compensate the torque of gravity which is induced to each joint based on the specific robot configuration, mass of each link, and center of mass of each link.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The equivalent way to say this is do dynamic modeling of your robot &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;i.e. &lt;a href=&quot;https://i.stack.imgur.com/zJX86.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zJX86.png&quot; alt=&quot;Inverse Dynamics control&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$a_{g} = [0,0,-g_{0}],g_{0} = 9.8$ this is acceleration due to gravity in base coordinate frame (CF)so you need to use Transformation matrix to have acceleration due to gravity for each link in its joint CF&lt;/p&gt;&#xA;&#xA;&lt;p&gt;in fact its the right technical term is inverse dynamics control.              &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your goal is gravity compensation only you need to know(you can estimate from CAD robot model or given by manufacturer):&#xA; the mass, the center of mass of each robot link and current joint configuration ($q_i$ i=1,...,6). &#xA;Then you can determine torque required to support the robot at the given configuration recursively(start from last joint and determine sequentially for the other joints/links ).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;for more refer:&#xA; &lt;a href=&quot;https://studywolf.wordpress.com/2013/09/07/robot-control-3-accounting-for-mass-and-gravity/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://studywolf.wordpress.com/2013/09/07/robot-control-3-accounting-for-mass-and-gravity/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="20022" LastEditorUserId="20022" LastEditDate="2018-05-04T00:05:41.663" LastActivityDate="2018-05-04T00:05:41.663" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15639" PostTypeId="1" CreationDate="2018-05-03T15:46:07.270" Score="1" ViewCount="36" Body="&lt;p&gt;&lt;strong&gt;Hi all ,&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;i got stuck in a problem and really need your help.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt;&#xA; I want to move little Toy vehicle autonomously (localization and mapping) and want to get distance covered by vehicle using DSO in real time. For now i want to move vehicle in square of 2x2 meters using dso_ros.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Work Done:&lt;/strong&gt;&#xA;I'm getting coordinates of live camera by using dso_ros, I'm getting a matrix (camToWorld.matrix 3x4() in publishPoseCam SampleOutputWrapper.h), where first 3x3 is for rotations and last 3x1 is for translation(x,y,z if i'm not wrong). &#xA;When i move camera straight forward from any position then i got change in X-coordiante (it starts from 0.000 and ends on 0.7 when camera moved 2 meters forward ). Then i stopped it and take turn and move forward for 2 meters and so on (to draw square of 2x2 meters).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt;&#xA;When i take first turn (left/right) and then move it forward then no one coordinate gets change or update, dso gives me coordinates continuously but with very minor changes. I don't know which coordinate now i have to use to calculate distance after taking turn, so i get lost when i take first turn and not be able to draw square.  Please help me with this and guide me where i am wrong, I shall be very very thankful to you. I have been stuck in it from past 2 weeks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="20273" LastActivityDate="2018-05-03T15:46:07.270" Title="DSO_ROS is not giving right coordinates after taking turn (left/right)" Tags="&lt;ros&gt;&lt;autonomous-car&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15640" PostTypeId="2" ParentId="11762" CreationDate="2018-05-03T15:46:54.067" Score="1" Body="&lt;p&gt;It does not matter whether the legs are mounted in a circle or not. You should be using &lt;a href=&quot;https://en.m.wikipedia.org/wiki/Inverse_kinematics&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;inverse kinematics&quot;&gt;inverse kinematics&lt;/a&gt; to place the tip of each foot on the ground.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you know the dimensions of your robot and share the hexagon arm is attached you can account for the joint offset in your calculations. After that, there is some geometry involved to solve for the angles. &lt;/p&gt;&#xA;" OwnerUserId="7537" LastActivityDate="2018-05-03T15:46:54.067" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15646" PostTypeId="1" AcceptedAnswerId="15659" CreationDate="2018-05-05T13:04:16.797" Score="2" ViewCount="373" Body="&lt;p&gt;Im trying to implement an ackermann motion model which estimates the x,y and theta for a robot I have.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a gazebo simulation running which publishes a steering angle for the virtual tricycle wheel and I have a linear velocity for the back wheel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I publish the ground truth odometry and transform which I can display in Rviz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I then use the published values to compute a deltaX, deltaY and deltaTheta for a pose update. If the steering angle is 0, it works fine as the deltaX = linear velocity. However, when I have both values non zero, my robot moves in an arc, but my motion model turns on the spot instead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The formulae for motion estimation and pose update are taken from &quot;Simultaneous Localization and Mapping for Mobile Robotics&quot; by Juan Antonio Fernandez-Madrigal. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any ideas where I have made a mistake?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: I will provide the formulae I use here&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$ u = (v,alpha)$ , where v is the linear velocity form the driving wheels and alpha is the steering angle (in radians)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$ l = wheel base$ i.e the distance between the front and back wheel&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$ w = \frac{v*sin(alpha)}{l}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$ dx = \frac{l * sin(w)}{tan(alpha)}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$ dy = \frac{l * (1-cos(w))}{tan(alpha)}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pose Update:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$ x_{new} = x + (dx*cos(theta) - dy*sin(theta))*dt $&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$ y_{new} = y + (dx*sin(theta) + dy*cos(theta))*dt $&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$ theta_{new} = theta + w*dt $&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ofcourse if alpha = 0 then $delta_x = v$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;edit #2. I fixed the problem, but I do not understand the solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first issue was that I did not incorporate the linear velocity into my equation when rotating.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This gives :&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$ dx = \frac{v*l * sin(w)}{tan(alpha)}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$ dy = \frac{v*l * (1-cos(w))}{tan(alpha)}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now the robot drives in an arc! But the arc is wrong. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/oCOFP.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/oCOFP.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I changed the update equation to:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$ dx = \frac{v*l * cos(w)}{tan(alpha)}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$ dy = \frac{v*l *sin(w)}{tan(alpha)}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/q7TyS.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/q7TyS.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The rotational arc now seems correct. The rotational speed is still lower (not such an issue), but I dont understand why this works rotation works. I.e. why the $1-cos(x)$ factor gets changed to $sin(x)$ etc.&lt;/p&gt;&#xA;" OwnerUserId="19114" LastEditorUserId="19114" LastEditDate="2018-05-07T11:15:47.667" LastActivityDate="2018-05-09T15:12:48.600" Title="Ackermann Motion Model Does not Drive in an Arc, but Turns on the Spot" Tags="&lt;ros&gt;&lt;motion&gt;&lt;odometry&gt;&lt;gazebo&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15649" PostTypeId="2" ParentId="15646" CreationDate="2018-05-06T02:02:05.060" Score="0" Body="&lt;p&gt;You may get this behavior if your model has no offset between the steering and drive wheels.&lt;/p&gt;&#xA;" OwnerUserId="55" LastActivityDate="2018-05-06T02:02:05.060" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15651" PostTypeId="1" AcceptedAnswerId="15653" CreationDate="2018-05-06T16:04:00.420" Score="1" ViewCount="77" Body="&lt;p&gt;For a longer time I'm looking for some kind of robotic set, which is programmable, but most things I've found are related to child education or involves a lot of putting all the hardware parts together by yourself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm working as a Software engineer for a longer time, so I have a good knowledge of software languages also on c/c++ . &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've taken several steps in on the Raspberry pi which was very interesting but shortly it turns out I'm not that much interested in soldering hardware parts or something like that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can you guys give me some advice on where to start with robotic Programming for adults, without getting to deep into elektronics or hardware engineering, if possible, but to conenctrate on Programming?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any advice would be great&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="20303" LastActivityDate="2019-09-28T13:38:00.793" Title="Beginner Sets for intermediate devs" Tags="&lt;programming-languages&gt;&lt;first-robotics&gt;&lt;beginner&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15653" PostTypeId="2" ParentId="15651" CreationDate="2018-05-07T02:14:27.043" Score="2" Body="&lt;p&gt;If you want to start programming a robot that's already built, the &lt;a href=&quot;https://www.parallax.com/product/28333&quot; rel=&quot;nofollow noreferrer&quot;&gt;Scribbler 3 (S3) robot by Parallax, inc.&lt;/a&gt; is relatively affordable and comes already assembled. The programming relies on Blockly, a GUI-based programming language for robotics systems. I think it's popular in schools.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're interested in something a bit more robust, why not look into the &lt;a href=&quot;http://www.irobot.com/About-iRobot/STEM/Create-2.aspx&quot; rel=&quot;nofollow noreferrer&quot;&gt;iRobot Create® 2 Programmable Robot&lt;/a&gt;? It's built from remanufactured Roomba® platforms and comes preassembled. You could customize and program it (direct connection, Arduino, or RaspberryPi).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, since you are already and experienced software engineer and are not interested in assembling hardware, you could look into &lt;a href=&quot;http://gazebosim.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Gazebo&lt;/a&gt; and &lt;a href=&quot;https://moveit.ros.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;MoveIt!&lt;/a&gt; which are two robot simulation system used in the industry (as far as I understand). They both offer a bridge to &lt;a href=&quot;https://ros.org&quot; rel=&quot;nofollow noreferrer&quot;&gt;ROS&lt;/a&gt; the Robot Operating System.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope this helps!&lt;/p&gt;&#xA;" OwnerUserId="17203" LastActivityDate="2018-05-07T02:14:27.043" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15655" PostTypeId="1" CreationDate="2018-05-07T11:42:05.200" Score="-1" ViewCount="72" Body="&lt;p&gt;Just asking a quick question about implementing some python AI. I have a home built circuit running an ATmega32u2 chip and I was wondering if it’s possible to use this code on the chip? Or do I have to code that in C?&lt;/p&gt;&#xA;" OwnerUserId="20309" LastActivityDate="2018-05-13T17:12:49.207" Title="Using python to create AI" Tags="&lt;robotic-arm&gt;&lt;microcontroller&gt;&lt;artificial-intelligence&gt;&lt;circuit&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15657" PostTypeId="1" CreationDate="2018-05-07T13:44:44.283" Score="1" ViewCount="122" Body="&lt;p&gt;I'm currently working of a 5 DOF robot, for which i'd like to compute the dynamic model through identification. I have experimental data representing torques (inputs) and positions (outputs). How can i obtain the closest dynamic model to the structure? and how to validate the obtained model. The objective is to design some non linear control using the obtained model. Could you help me out. Thank you so much. Regards  &lt;/p&gt;&#xA;" OwnerUserId="20300" LastActivityDate="2018-09-20T14:00:04.150" Title="Dynamic model using identification for control" Tags="&lt;control&gt;&lt;dynamics&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15658" PostTypeId="2" ParentId="15651" CreationDate="2018-05-07T17:08:51.453" Score="0" Body="&lt;p&gt;The &lt;a href=&quot;http://www.robotis.us/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Turtlebot 3 robots&lt;/a&gt; are designed to be ROS (Robot Operating System) reference implementations. There are two versions, the Burger and the Waffle. The Burger is the least expensive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They are built of plastic pieces which need to be bolted together. They are very sturdy. It is also possible to use a 3d printer to make more pieces if you want a larger robot, and they have instructions for different types of robots if you don't want one with differential steering.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.dexterindustries.com/shop/brickpi-starter-kit/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Dexter Industries&lt;/a&gt; sells a board that allows a Raspberry Pi to connect to Lego Mindstorms sensors and motors. This allows you to use a much more powerful computer to control robots using the Lego Mindstorms system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And then are a number of systems from &lt;a href=&quot;https://www.vexrobotics.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Vex Robotics&lt;/a&gt;. They might look like toys, but I put them a bit above the Lego Mindstorms in strength.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you prefer metal, then &lt;a href=&quot;http://www.servocity.com&quot; rel=&quot;nofollow noreferrer&quot;&gt;Servo City&lt;/a&gt; has a number of kits and parts (including motors, motor controllers, beams, plates, hardware, wheels, etc.) to build robots, though generally you'll have to do your own electronics. I'm planning on using the electronics that came with my Turtlebot 3 robots with my tracked robot from ServoCity. Plus a bunch of other stuff I've collected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One thing I suggest if you want to build less toy-like robots is a 3d printer. This can be useful to make parts that would be difficult or expensive to buy. YMMV, but I prefer the &lt;a href=&quot;https://www.prusa3d.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Original Prusa i3 MK3.&lt;/a&gt; Of course, I say that because it's what I'm used to.&lt;/p&gt;&#xA;" OwnerUserId="19275" LastActivityDate="2018-05-07T17:08:51.453" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15659" PostTypeId="2" ParentId="15646" CreationDate="2018-05-07T21:26:44.437" Score="1" Body="&lt;p&gt;The first ackermann model presented is based on dead reckoning, i.e. it needs wheel encoders. The ackermann model in edit 2 is based of velocity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It can be found here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://pdfs.semanticscholar.org/5849/770f946e7880000056b5a378d2b7ac89124d.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://pdfs.semanticscholar.org/5849/770f946e7880000056b5a378d2b7ac89124d.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19114" LastEditorUserId="19114" LastEditDate="2018-05-09T15:12:48.600" LastActivityDate="2018-05-09T15:12:48.600" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15663" PostTypeId="2" ParentId="14399" CreationDate="2018-05-09T00:07:56.853" Score="1" Body="&lt;p&gt;You either need to write a communications layer that will allow the PC to send commands to the Pi, or use a system that already has this communications layer in place.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You also need to write programs for both the PC and the Pi that implement this communications layer, as well as the logic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PC program needs to read the kinect and figure out what the Pi needs to do. Then send the information to the Pi&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Pi program needs to listen to the communications layer and translate the communication into movements of the motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The communications layer will probably (if I were writing it) use TCP/IP sockets.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or you could use ROS which has all of the implementation details done so that you can just work on the logic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of the easiest communication layers to set up is MQTT. I currently have a mosquito (sudo apt install mosquito) server running on a Raspberry Pi. This can be the same machine that is running your motors. Or you could run the server on another machine, it doesn't matter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are libraries and clients for MQTT available for most languages. Currently I'm running my commands using &lt;a href=&quot;https://gobot.io&quot; rel=&quot;nofollow noreferrer&quot;&gt;Gobot&lt;/a&gt;, which is a robot/IoT framework written in the Go language. This uses a basic publish/subscribe system. To be notified of messages with a specific topic, a program subscribes to the topic. To send a message to all the subscribers of a topic, you publish a message with that topic. In addition to the topic, there is also a message, which is an array of bytes defined by the user. You can also use the topic as a way of passing the message.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, the &quot;motors-on&quot; topic could tell the Pi to turn on the motors. The &quot;motors-off&quot; topic could tell the Pi to turn off the motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My test program used the same program as both publisher and subscriber.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It really is that simple.&lt;/p&gt;&#xA;" OwnerUserId="19275" LastEditorUserId="19275" LastEditDate="2018-06-08T12:36:16.230" LastActivityDate="2018-06-08T12:36:16.230" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15664" PostTypeId="1" CreationDate="2018-05-09T05:11:51.317" Score="0" ViewCount="448" Body="&lt;p&gt;I'm trying to display an image on top of a box in a .urdf file. How could I achieve this?&lt;/p&gt;&#xA;" OwnerUserId="20324" LastActivityDate="2021-04-11T01:03:30.420" Title="Add image onto box in URDF file" Tags="&lt;ros&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15667" PostTypeId="1" AcceptedAnswerId="15699" CreationDate="2018-05-10T05:20:32.687" Score="4" ViewCount="1182" Body="&lt;p&gt;I would like to have a Raspberry Pi robot that can find its location in a room relative to an origin point. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;What methods would be cheapest? &lt;/li&gt;&#xA;&lt;li&gt;What would the most accurate be?&lt;/li&gt;&#xA;&lt;li&gt;Are there any others that might be in a sweet spot between the two that I should look into?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="20339" LastEditorUserId="20346" LastEditDate="2018-05-10T20:22:26.317" LastActivityDate="2018-05-16T16:06:39.157" Title="Finding relative location of Raspberry Pi robot indoors" Tags="&lt;raspberry-pi&gt;&lt;precise-positioning&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15670" PostTypeId="1" CreationDate="2018-05-11T12:01:30.030" Score="0" ViewCount="72" Body="&lt;p&gt;Weight of the Drone in total will be 240 Kg.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It Will be a quad copter drone setup but with 8 rotors(two on each corner) for redundancy purpose.&#xA;Aim is achieve Thrust/weight ratio of 2.&#xA;So need total needed thrust will be 500 KG.&#xA;Considering 500 kg thrust by 4 rotors only(because the 2nd rotor on each corner if fails the 1st motor should be able to compensate thrust) , each should be able to produce 125 kg thrust.&#xA;The propeller Diameter will be 1.2 m  ( Total 8 propeller)&#xA;Now coming to the question:&#xA;What should be the power rating of the motor if i want 125 kg thrust from each Propeller (When running at 85%-95% of the max RPM.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have any Doubts or any details please ask ,will reply as soon as possible.&lt;/p&gt;&#xA;" OwnerUserId="20348" LastEditorUserId="20709" LastEditDate="2018-07-11T15:50:45.830" LastActivityDate="2018-07-11T15:50:45.830" Title="Doing a project for college for a manned drone theortically only" Tags="&lt;quadcopter&gt;&lt;dynamics&gt;&lt;brushless-motor&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="15672" PostTypeId="2" ParentId="15670" CreationDate="2018-05-11T16:20:11.020" Score="1" Body="&lt;p&gt;Thrust vs. power is not constant -- it depends strongly on prop diameter (bigger diameter = more thrust/watt).  It depends less strongly on a bunch of other factors that I would know in detail if I were an aerodynamics expert, which I'm not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Getting that part right would be a huge part of a real design.  I suggest, since this is a theoretical preliminary study, that you find some books on propeller design, and some on helicopter rotor design, and make a stab at estimating the prop size and motor power, with enough material for a section on the relevant trade-offs so that your instructors know you paid attention to it, and so that any follow-on researchers know where to look for more information.&lt;/p&gt;&#xA;" OwnerUserId="1411" LastActivityDate="2018-05-11T16:20:11.020" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15673" PostTypeId="1" AcceptedAnswerId="15703" CreationDate="2018-05-11T18:34:16.547" Score="-1" ViewCount="54" Body="&lt;p&gt;I'm trying to model this arm and I'm having a problem knowing what way could I use to make the red part always parallel to the surface of the table &lt;a href=&quot;https://i.stack.imgur.com/wP493.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wP493.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="20351" LastActivityDate="2018-05-17T13:09:53.363" Title="How to transfer motion between these two parts?" Tags="&lt;robotic-arm&gt;&lt;mechanism&gt;&lt;servomotor&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15674" PostTypeId="1" AcceptedAnswerId="15677" CreationDate="2018-05-11T20:01:23.173" Score="2" ViewCount="262" Body="&lt;p&gt;I'm trying to track an accelerating vehicle using a camera, an IMU, and a GPS.&#xA;I use for the state space equation a constant acceleration model:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/9ZscU.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9ZscU.jpg&quot; alt=&quot;state space equation. Ts is the sampling time, p the position, v the velocity, and a the acceleration.&quot;&gt;&lt;/a&gt;&#xA;The states are the position, the velocity, and the acceleration of the vehicle in the x- and y-direction. No input is used.&#xA;All the measurement equations are linear.&#xA;I'm wondering if I should use a discrete normal Kalman filter, or a discrete extended Kalman filter. (i.e. is my process non linear?)&lt;/p&gt;&#xA;" OwnerUserId="20353" LastEditorUserId="20353" LastEditDate="2018-05-12T07:10:54.763" LastActivityDate="2018-05-12T11:56:42.353" Title="Tracking vehicle 6 states extended kalman filter required?" Tags="&lt;kalman-filter&gt;&lt;ekf&gt;&lt;filter&gt;&lt;estimation&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15675" PostTypeId="1" CreationDate="2018-05-11T20:53:24.543" Score="0" ViewCount="158" Body="&lt;p&gt;I learned recently that robotc has a command called startMotor. it has two parameters, a motor and a speed, and it sets the motor to the speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the same thing can be accomplished in one line like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;motor[desiredMotor] = desiredSpeed;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;the above line is perfectly readable, and doesn't push a whole new frame to the call stack. Why would anybody choose to use startMotor in this case?&lt;/p&gt;&#xA;" OwnerUserId="20354" LastActivityDate="2021-03-30T06:07:50.960" Title="RobotC startMotor command useless?" Tags="&lt;robotc&gt;&lt;vex&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15677" PostTypeId="2" ParentId="15674" CreationDate="2018-05-12T11:56:42.353" Score="1" Body="&lt;p&gt;If you can write the dynamics with a matrix, which you have, then a normal kalman filter will be best.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, your measurements will probably be nonlinear. You will find that you won't be able to write your measurements equations using matrices. You will almost certainly need an extended kalman filter because your measurements will be nonlinear. &lt;/p&gt;&#xA;" OwnerUserId="8842" LastActivityDate="2018-05-12T11:56:42.353" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15680" PostTypeId="1" AcceptedAnswerId="15687" CreationDate="2018-05-12T21:03:15.120" Score="4" ViewCount="948" Body="&lt;p&gt;Currently, I am thinking that since electromagnetic waves loose energy over distance, you might be able to figure out the relative distance to each of three radio &quot;beacons&quot; and use this information to triangulate the position of a Raspberry Pi robot with a radio sensor on-board.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What kind of radio receiver may I need to use, and what information about the radio signal could I use to calculate the distance to the beacon? Amplitude, perhaps? The entire system would be running indoors as an Indoor Positioning System.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In short, my question is what specific type of radio receiver would be adequate for using radio signal strength for triangulation. If amplitude contains the information of the strength of the signal, then I need a sensor that is sensitive enough to pick that up, and can provide amplitude readings in the first place.&lt;/p&gt;&#xA;" OwnerUserId="20339" LastEditorUserId="20339" LastEditDate="2018-05-13T03:18:10.867" LastActivityDate="2018-05-16T15:33:28.763" Title="Radio triangulation with Raspberry Pi" Tags="&lt;raspberry-pi&gt;&lt;precise-positioning&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15683" PostTypeId="2" ParentId="15655" CreationDate="2018-05-13T17:12:49.207" Score="1" Body="&lt;p&gt;For that microcontroller yes, you need to program in C++. But likely it's not powerful enough to do what you want to do. You should consider using a Raspberry Pi, or doing the higher-level computations on a desktop or laptop and communicating decisions about motor control etc to the atmega over serial.&lt;/p&gt;&#xA;" OwnerUserId="1073" LastActivityDate="2018-05-13T17:12:49.207" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15684" PostTypeId="2" ParentId="15667" CreationDate="2018-05-13T17:21:22.147" Score="2" Body="&lt;p&gt;I think that the methods which require no modification to the environment--e.g. &lt;a href=&quot;http://wiki.ros.org/slam_gmapping&quot; rel=&quot;nofollow noreferrer&quot;&gt;gmapping with 2D lidar&lt;/a&gt; or &lt;a href=&quot;http://webdiis.unizar.es/~raulmur/orbslam/&quot; rel=&quot;nofollow noreferrer&quot;&gt;ORB-slam&lt;/a&gt; with camera--are probably too computationally intense it to run on the pi alone. You would need to run a separate server and connect over Wi-Fi. This approach works, and I've actually gotten it to work over the internet instead of just a local network.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, if you're willing to limit yourself to one room, you could try putting up some &lt;a href=&quot;https://github.com/UbiquityRobotics/fiducials&quot; rel=&quot;nofollow noreferrer&quot;&gt;visual fiducials&lt;/a&gt; with known locations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could try an approach somewhat like what Paul suggests in a comment, with a bird's eye view camera that just tracks the robot as it moves around the room and computes its location directly. With this approach, you're going to need an external computer anyway, so you might as well do &lt;a href=&quot;https://courses.cit.cornell.edu/ece6930/ECE6930_Spring16_Final_MEng_Reports/SLAM/Real-time%20ROSberryPi%20SLAM%20Robot.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;visual slam&lt;/a&gt; with a camera mounted on the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A &lt;a href=&quot;https://www.ebay.com/p/Camera-Module-Board-5mp-Webcam-Video-1080p-720p-for-Raspberry-Pi-3/690883884?iid=132281479607&amp;amp;chn=ps&quot; rel=&quot;nofollow noreferrer&quot;&gt;camera is significantly cheaper&lt;/a&gt; than a lidar, though you can get a salvaged &lt;a href=&quot;https://www.ebay.com/itm/Neato-XV-Lidar-Distance-Sensor-XV-11-12-14-15-21-Signature/263486972175?hash=item3d590c210f:g:5-4AAOSwwvZZOM~o&quot; rel=&quot;nofollow noreferrer&quot;&gt;Neato xv 2d lidar on eBay&lt;/a&gt; for about $70.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All of this would be easier if you had wheel encoders to provide an odometry estimate.&lt;/p&gt;&#xA;" OwnerUserId="1073" LastActivityDate="2018-05-13T17:21:22.147" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15685" PostTypeId="2" ParentId="11106" CreationDate="2018-05-14T06:25:35.120" Score="1" Body="&lt;p&gt;Maybe you should rectify the wide-angle camera images with cv::fisheye::stereoRectify, which outputs a pair of undistort images with aligned epipolar lines.&lt;/p&gt;&#xA;" OwnerUserId="20366" LastActivityDate="2018-05-14T06:25:35.120" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15687" PostTypeId="2" ParentId="15680" CreationDate="2018-05-14T19:31:16.693" Score="0" Body="&lt;p&gt;Unfortunately, There is too much interference for this to work probably, as &lt;a href=&quot;https://engineering.stackexchange.com/users/624/olin-lathrop&quot;&gt;Olin Lathrop&lt;/a&gt; said &lt;a href=&quot;https://engineering.stackexchange.com/questions/21732/radio-triangulation-with-raspberry-pi/21737#21737&quot;&gt;here&lt;/a&gt; on the Engineering SE:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;While your concept is theoretically correct, it doesn't work well in practice except for rough locations.&lt;/p&gt;&#xA;&lt;p&gt;The problem is interference. Radio waves get absorbed, reflected, diffracted, and in some cases even refracted. All those mean that there isn't just a single point source from the receiver's point of view. The various components of the signal bouncing around the environment can interfere constructively and destructively, making received amplitude only a very rough estimate of distance.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="20339" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2018-05-14T19:31:16.693" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15689" PostTypeId="2" ParentId="15675" CreationDate="2018-05-14T20:39:17.890" Score="0" Body="&lt;p&gt;You have to set something else, cause this instruction is telling the programm to set the motor speed to x and because after that, there is nothing else to do, it is going to end the programm, faster then it is able to turn on the motors.&#xA;In order for it to do something, you have to make it do something else.&#xA;e.g. idle&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;wait1Msec(100);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You could also put it into a while loop&lt;/p&gt;&#xA;&#xA;&lt;p&gt;eather &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;while(true){motor[desiredMotor] = desiredSpeed;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;or you can do something like this&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;while(SensorValue[light]&amp;gt; 50) {motor[desiredMotor] = desiredSpeed;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;or &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;motor[desiredMotor] = desiredSpeed;&#xA;waituntil(SensorValue[light]&amp;gt; 50)&#xA;motor[desiredMotor] = 0;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;you are welcome to use this function I found and edited to move a fixed distance&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;const float WHEEL_DIAMETER = 55; //diameter of the wheel in mm.&#xA;const float DISTANCE_BETWEEN_WHEELS = 140;//distance between wheels in mm.&#xA;const float ENCODER_RESOLUTION = 360; //the encoder's resolution.&#xA;const float MOVEMENT_FACTOR =((WHEEL_DIAMETER * PI) / ENCODER_RESOLUTION);&#xA;// for using just red motor speeds do (red motor value * MOVEMENT_FACTOR )&#xA;&#xA;void drive2distance(int FLEngineSpeed, int FREngineSpeed,int FLEmm, int FREmm)&#xA;{&#xA;// set distance&#xA;nMotorEncoderTarget[FLEngine] = FLEmm / MOVEMENT_FACTOR;&#xA;nMotorEncoderTarget[FREngine] = FREmm / MOVEMENT_FACTOR;&#xA;&#xA;//straight&#xA;&#xA;motor[FLEngine] = FLEngineSpeed;&#xA;motor[FREngine] = FREngineSpeed;&#xA;&#xA;while (nMotorRunState[FLEngine] != runStateIdle || nMotorRunState[FREngine] != runStateIdle) {}&#xA;&#xA;//stop&#xA;&#xA;motor[FLEngine] = 0;&#xA;motor[FREngine] = 0;&#xA;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="20373" LastEditorUserId="20373" LastEditDate="2018-05-14T20:47:31.853" LastActivityDate="2018-05-14T20:47:31.853" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15690" PostTypeId="1" CreationDate="2018-05-15T11:58:05.607" Score="0" ViewCount="548" Body="&lt;p&gt;I am having a bit of trouble with the pictured question:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/bzNjW.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/bzNjW.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am able to do part a and b, however c is proving very difficult. My lecturer never really explained much beyond what is asked in a and b. Any hints about how to do it would be greatly appreciated. I have looked at inverse kinematics but that seems to be for determining the angles of the joints, not the length of links and distances. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance for any help!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Paul&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the diagram of the robot also:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2c68v.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2c68v.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="20378" LastEditorUserId="20378" LastEditDate="2018-05-16T11:19:01.937" LastActivityDate="2018-05-16T11:19:01.937" Title="Denavit-Hartenberg Exam Question" Tags="&lt;kinematics&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15691" PostTypeId="2" ParentId="15690" CreationDate="2018-05-15T14:47:32.487" Score="2" Body="&lt;p&gt;The question is meant to see if you have learned anything about the underlying math and geometry associated with kinematics rather than just blindly following the basic steps for calculation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Draw the robot, compare the symbolic version of the calculation with the numerical results listed, and it should be straight forward. Using what you know about figure Q1 will let you simplify the symbolic calc.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2018-05-15T14:47:32.487" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15693" PostTypeId="1" CreationDate="2018-05-16T00:33:52.463" Score="0" ViewCount="133" Body="&lt;p&gt;What's a good calibration object for the extrinsic calibration (rotation + translation) of a depth camera (&lt;strong&gt;no&lt;/strong&gt; color sensor, &lt;strong&gt;only&lt;/strong&gt; depth)? With RGB, people seem to typically use chessboard pattern or some kind of markers. Is there something similar that would work without RGB?&lt;/p&gt;&#xA;" OwnerUserId="7280" LastActivityDate="2021-04-01T15:05:40.570" Title="Extrinsic Calibration Target Depth Camera" Tags="&lt;cameras&gt;&lt;calibration&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15694" PostTypeId="2" ParentId="15690" CreationDate="2018-05-16T08:19:32.943" Score="0" Body="&lt;p&gt;The question makes you reflects on the meaning of the transform matrix (which construction process w.r.t. DH parameter is given).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A transformation matrix denotes the transformation from one frame to the next, by mean of both a rotation matrix ($R$) of the second frame w.r.t the first frame expressed in the first frame, and a position vector ($p$) of the second frame origin expressed in the first frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The transformation matrix is constructed as follows:&#xA;$T=\begin{bmatrix} R &amp;amp; p \\ 0~0~0 &amp;amp; 1 \end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thenn what I would do, although it is bit unclear from the formulation, I would suspect that the information given relative to the distance between link 2 and 5 (is 5 the end effector?) are given in the base frame (0), otherwise the information relative to $^2_5T$ are not useful.&#xA;From there using the transformation matrix at hand and considering the suggested vector you get a system of equations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That gives you relationships between all the mentioned quantities, but there I am blocked by the information concerning the the $y$ component of the position of end-effector w.r.t 2 expressed in 0, as it didn't match my result and left me with $d_5$ unknown (same if I make the assumption that the information about the vector are expressed in 2). Although if the vector component information concerns $x$ than it is possible to get a numerical evaluation of $d_3$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;NOTE: done during my coffee break&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2018-05-16T08:19:32.943" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15697" PostTypeId="2" ParentId="15680" CreationDate="2018-05-16T15:33:28.763" Score="0" Body="&lt;p&gt;I believe there has been some research done on robot localization based on Wifi signal strength.  For example: &lt;a href=&quot;http://robotics.usc.edu/~ahoward/projects_wifi.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://robotics.usc.edu/~ahoward/projects_wifi.php&lt;/a&gt; and &lt;a href=&quot;http://www.cs.cmu.edu/~mmv/papers/10icra-joydeep.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.cs.cmu.edu/~mmv/papers/10icra-joydeep.pdf&lt;/a&gt;.  But I believe accuracy is very rough (maybe meters of error).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For more precise radio localization (cm level), you can use ultrawideband (UWB) radios which can measure the time of flight between endpoints.  Yes, there are multipath issues indoors, but there are ways to mitigate this.  There are two main players here: &lt;a href=&quot;https://www.decawave.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.decawave.com/&lt;/a&gt; and &lt;a href=&quot;http://bespoon.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://bespoon.com/&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also FYI, triangulation is when you know the angle to the fixed beacons, trilateration is when you know the range.  See: &lt;a href=&quot;https://en.wikipedia.org/wiki/Trilateration&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Trilateration&lt;/a&gt;.  Your proposed application would be trilateration.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2018-05-16T15:33:28.763" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15699" PostTypeId="2" ParentId="15667" CreationDate="2018-05-16T16:06:39.157" Score="2" Body="&lt;p&gt;For high cost and high accuracy, you can use motion capture systems such as &lt;a href=&quot;https://www.vicon.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.vicon.com/&lt;/a&gt;, &lt;a href=&quot;https://optitrack.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://optitrack.com/&lt;/a&gt;, or &lt;a href=&quot;http://phasespace.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://phasespace.com/&lt;/a&gt;.  These systems will typically have a dedicated (Windows) computer driving the cameras.  You will have some code to write to pull this data out and transmit to the robot (if that is where you want it).  On the plus side, the hardware on the robot is minimal, just a few retro-reflector spheres or LEDs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For even higher cost and higher accuracy, you can use a laser based metrology system such as: &lt;a href=&quot;https://www.nikonmetrology.com/en-us/product/igps&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.nikonmetrology.com/en-us/product/igps&lt;/a&gt; or &lt;a href=&quot;http://www.hexagonmi.com/products/laser-tracker-systems&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.hexagonmi.com/products/laser-tracker-systems&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A camera and known-location fiducials like ARTags is another option.  Accuracy depends on the number and size of fiducials, and how much effort you put into to calibrating your camera and locations of landmarks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;UWB radios which can measure the time of flight between endpoints is another option. There are two main players here: &lt;a href=&quot;https://www.decawave.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.decawave.com/&lt;/a&gt; and &lt;a href=&quot;http://bespoon.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://bespoon.com/&lt;/a&gt;.  Accuracy will depend on number and placement of beacons.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2018-05-16T16:06:39.157" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15700" PostTypeId="2" ParentId="15693" CreationDate="2018-05-17T06:12:24.940" Score="0" Body="&lt;p&gt;You can use a 3d Marker, e.g. a cube or a another arrangement of three planes. Finding these planes in the Pointcloud/Depth Image is not hard and provides a 6D Pose (if you can distinguish the planes which can be done by using non-90-deg angles). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you also add visual markers (e.g. checkerboard pattern) to the planes, you can first use a 2d Camera to measure the relative poses of the planes. &lt;/p&gt;&#xA;" OwnerUserId="23196" LastActivityDate="2018-05-17T06:12:24.940" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15701" PostTypeId="1" AcceptedAnswerId="15705" CreationDate="2018-05-17T08:36:42.200" Score="0" ViewCount="576" Body="&lt;p&gt;&lt;strong&gt;*I'm rewriting the question after I deleted the previous one because I wasn't clear enough. Hope it's fair&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given a system of the general form:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;\begin{align}&#xA;x_{[k+1]} &amp;amp;= A\,x_{[k]} + B\,u_{[k]} \\&#xA;y_{[k]} &amp;amp;= C\,x_{[k]} + D\,u_{[k]}&#xA;\end{align}&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to know how I should place the poles for the closed-loop observer system $A−L\,C$. &#xA;I know that the observer has to be faster than the real system poles so the poles of $A-LC$ should be more close to zero than $A+B\,K$. But I don't know about any other constraint of the position. If there isn't any other bound why we don't place the poles at 0 and make $A-L\,C$ converge in one step?&lt;/p&gt;&#xA;" OwnerUserId="20369" LastEditorUserId="1487" LastEditDate="2018-05-18T13:18:33.040" LastActivityDate="2018-06-24T09:22:20.473" Title="Pole placement of the observer closed loop system (A-LC) in discrete system" Tags="&lt;control&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15702" PostTypeId="1" AcceptedAnswerId="15739" CreationDate="2018-05-17T08:37:00.763" Score="0" ViewCount="415" Body="&lt;p&gt;I am using ROS on the Turtlebot3 and try to teleop the robot with an XBOX 360 controller without success. I'm already able to teleop the robot via keyboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Setup:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Ubuntu 16.04&lt;/li&gt;&#xA;&lt;li&gt;ROS Kinetic&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;What I've already tried:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Console 1: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[Remote]-$ roscore&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Console 2: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[Remote]-$ rosrun joy joy_node&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Console 3: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[Remote]-$ roslaunch teleop_twist_joy teleop.launch &#xA;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Console 4: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[Pi]-$ roslaunch turtlebot3_bringup turtlebot3_robot.launch&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Console 5:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[Pi]-$ rostopic echo joy&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I can already see, that the Raspberry receives the command messages from the controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the robot doesn't move. Any ideas?&lt;/p&gt;&#xA;" OwnerUserId="20394" LastEditorUserId="20394" LastEditDate="2018-05-17T09:07:20.243" LastActivityDate="2019-01-29T05:11:05.260" Title="Turtlebot3 Burger - XBOX360 Controller" Tags="&lt;ros&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15703" PostTypeId="2" ParentId="15673" CreationDate="2018-05-17T13:09:53.363" Score="1" Body="&lt;p&gt;I believe what you are looking for is a &lt;a href=&quot;https://en.wikipedia.org/wiki/Four-bar_linkage&quot; rel=&quot;nofollow noreferrer&quot;&gt;4 bar linkage&lt;/a&gt;.  When opposite links are equal in length, they stay parallel.  &lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2018-05-17T13:09:53.363" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15704" PostTypeId="2" ParentId="12308" CreationDate="2018-05-17T20:09:55.780" Score="0" Body="&lt;p&gt;Adafruit has versions for both the Pi and the Arduino. Right in the web page describing each product they state you can stack up to 62 shields (or hats). Nobody would really do that, but it is obviously made for such abuse.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'd have to either use right-hand headers or else solder the ends of the servo wires to the board.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do with they'd been able to get 18 on a board because hexapods require 18. But then I'd always want another one. They're like Lays potato chips. :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And Adafruit has the libraries for this.&lt;/p&gt;&#xA;" OwnerUserId="19275" LastActivityDate="2018-05-17T20:09:55.780" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15705" PostTypeId="2" ParentId="15701" CreationDate="2018-05-17T20:10:08.350" Score="1" Body="&lt;p&gt;For LTI systems you can design the observer and state feedback separately, due to &lt;a href=&quot;https://en.wikipedia.org/wiki/Stochastic_control#Certainty_equivalence&quot; rel=&quot;nofollow noreferrer&quot;&gt;certainty equivalence&lt;/a&gt;. So the observer does not have to be faster then the state feedback in order to ensure stability.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Often a system will have input constraints (such as saturation), which will indirectly place constraints on $K$. However for your observer model there are no such constraints, so it is possible to place the observer poles closer to the origin then the state feedback poles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However placing the observer poles much closer to the origin gives less and less performance gains, since the error dynamics will eventually be dominated by the slowest pole (usually from the state feedback). Another side effect of placing the observer poles closer to the origin is that the start up transient often has a bigger overshoot compared with slower observer poles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another important aspect which can be taken into consideration is the effects of noise/disturbances on the system, because a fast observer might amplify those more than a slower observer.&lt;/p&gt;&#xA;" OwnerUserId="1487" LastActivityDate="2018-05-17T20:10:08.350" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15706" PostTypeId="1" CreationDate="2018-05-18T06:04:08.597" Score="0" ViewCount="172" Body="&lt;p&gt;I am new to the small servo area.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I bought a eBay 6DOF Robotic Arm, and 12 mg996r servos to go with it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using an arduino and I2C PCA9685 16 X PWM board, with the example code from adafruit, I set up 5 of the servos with conservative values for an overnight test.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2 of the servos died, and individually, zero response from voltage applied to them (no hum, no increase or decrease in mechanical moving, no heat).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since then, I've had another one die.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this common on buying &quot;bottom feeder&quot; prices on ebay?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was wanting to get into this area without spending a bundle, but 25% failure rates seems excessive even for ebay.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks for any guidance.&lt;/p&gt;&#xA;" OwnerUserId="20400" LastEditorUserId="15387" LastEditDate="2019-12-22T16:33:07.347" LastActivityDate="2021-05-15T18:08:25.863" Title="are mg996r servo failures common?" Tags="&lt;servomotor&gt;&lt;pwm&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15707" PostTypeId="1" CreationDate="2018-05-18T22:07:06.257" Score="0" ViewCount="82" Body="&lt;p&gt;A recent startup named Skydio develops autonomous drones for photography. The drone is named as R1 and utilizes 13 cameras to map its surroundings for localization and motion planning. The brain of this drone is Nvidia Jetson TX1. While the number of cameras that a TX1 board can support is 6. I'm wondering how did they manage to use 13 cameras. &#xA;Can anyone know the answer to this question?&lt;/p&gt;&#xA;" OwnerUserId="19148" LastActivityDate="2018-07-22T17:39:10.257" Title="More than 6 cameras in Nvidia Jetson boards" Tags="&lt;quadcopter&gt;&lt;localization&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15708" PostTypeId="1" CreationDate="2018-05-19T04:48:25.950" Score="0" ViewCount="175" Body="&lt;p&gt;I need some help with a project where I am trying to operate a unipolar stepper motor with a raspberry pi's using the 4 GPIO pins and using a L293D IC as an amp to get it to the operating 12V of the stepper motor. The problem is that to use the method I have which is choose the + or - pairs of each coil on the stepper and switch between them whilst using the 5th wire as a common ground, I need the GPIO pins that are not set to HIGH to not become a ground connection. Any help would be appreciated or another method that I haven't thought of would be good to.&lt;/p&gt;&#xA;" OwnerUserId="20011" LastActivityDate="2018-12-27T16:03:00.630" Title="raspberry pi operating a unipolar stepper motor with a L293D IC" Tags="&lt;raspberry-pi&gt;&lt;stepper-motor&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15709" PostTypeId="2" ParentId="15560" CreationDate="2018-05-19T05:35:37.540" Score="1" Body="&lt;p&gt;How about a cloth mesh. It won't cover up things as well as a dark plastic would, but it might be a good compromise between hiding things and still allowing the camera to work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It will, however, block some of the light.&lt;/p&gt;&#xA;" OwnerUserId="19275" LastActivityDate="2018-05-19T05:35:37.540" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15710" PostTypeId="1" AcceptedAnswerId="15714" CreationDate="2018-05-20T01:31:57.737" Score="3" ViewCount="1743" Body="&lt;p&gt;I am wiring up a kids ride-on toy (Powerwheels) to control both speed and steering with an Arduino. The ultimate goal is to have the Arduino take analog inputs from the driver (steering and acceleration) as well as digital inputs from a Radio Control source. The Arduino will combine these inputs such that the Radio inputs override the driver, but otherwise the driver is free to operate the vehicle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The vehicle is driven by 2 motors, Fisher Price part 00968-9015. From what I can find on the internet they are 12v DC brushed motors that run @ 1.25amps with no load, and supposedly hit 70 amps during stall.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I plan to drive the motors with the &lt;a href=&quot;https://www.servocity.com/actoboticsr-dual-motor-controller-assembled&quot; rel=&quot;nofollow noreferrer&quot;&gt;Actobotics Dual Motor Controller&lt;/a&gt; in split mode. Channel 1 will operate Steering with a 4&quot; Stroke 25 lb Thrust &lt;a href=&quot;https://www.servocity.com/hda4-2&quot; rel=&quot;nofollow noreferrer&quot;&gt;Heavy Duty Linear Actuator&lt;/a&gt; from #ServoCity. Channel 2 would operate the above mentioned set of Fisher Price motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have 2 SLA batteries that are connected in parallel for longer run time while maintaining a 12v output. The positive(+) terminal goes through a &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/B01H3DKGFK&quot; rel=&quot;nofollow noreferrer&quot;&gt;30Amp DC circuit breaker&lt;/a&gt; before going to the rest of the system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm a software engineer so programming the Arduino isn't a concern, but the I have to admit I'm out of my comfort zone with wiring and electronics. I could use any input on the wiring of this project. If I'm wiring something wrong, or should be using other/different components - suggestions are welcome!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Question 1: Can I run two 12v motors in parallel on channel 2 of the &lt;a href=&quot;https://www.servocity.com/actoboticsr-dual-motor-controller-assembled&quot; rel=&quot;nofollow noreferrer&quot;&gt;Actobotics Dual Motor Controller&lt;/a&gt; from #ServoCity? (can Channel 2 handle that load)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Question 2: Will the parallel 12v SLA batteries (as shown) be sufficient to run both motors, the Linear Actuator and an Arduino without any problem or is there a more appropriate power configuration? I would like to avoid making the worlds slowest Powerwheels car.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;#Actobotics&#xA; #ServoCity&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/kYHl5.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kYHl5.png&quot; alt=&quot;CarPlan&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="20412" LastEditorUserId="18235" LastEditDate="2018-05-22T23:16:49.870" LastActivityDate="2018-05-22T23:16:49.870" Title="Arduino RC Kids Ride-On car: wiring help needed" Tags="&lt;arduino&gt;&lt;rcservo&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15712" PostTypeId="1" AcceptedAnswerId="15716" CreationDate="2018-05-20T13:14:11.783" Score="0" ViewCount="83" Body="&lt;p&gt;I have system of two equations that describes position of robot end-effector ($X_C, Y_C, Z_C$), in accordance to prismatic joints position ($S_A, S_B$):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$S^2_A - \sqrt3(S_A + S_B)X_C = S^2_B + (S_A - S_B)Y_C$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$X^2_C + Y^2_C + Z^2_C = L^2 - S^2_A + S_A(\sqrt3X_C + Y_C)+M(S^2_A+S_BS_A + S^2_B)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where M and L are constants.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In paper, author states that differentiating this system at &#xA;given point ($X_C, Y_C, Z_C$) gives the &quot;differential relationship&quot; in form:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$a_{11}\Delta S_A + a_{12}\Delta S_B = b_{11}\Delta X_C + b_{12}\Delta Y_C + b_{13}\Delta Z_C$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$a_{21}\Delta S_A + a_{22}\Delta S_B = b_{21}\Delta X_C + b_{22}\Delta Y_C + b_{23}\Delta Z_C$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later on, author uses those parameters ($a_{11}, a_{12}, b_{11}...$)&#xA;to construct matrices, and by multiplying those he obtains Jacobian&#xA;of the system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Im aware of partial differentiation, but I have never done this for system of equations, neither I understand how to get those delta parameters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone explain what are the proper steps to perform partial differentiation&#xA;on this system, and how to calculate delta parameters?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Following advice given by N. Staub, I differentiated equations w.r.t time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First equation:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$S^2_A - \sqrt3(S_A + S_B)X_C = S^2_B + (S_A - S_B)Y_C$&#xA;$=&amp;gt;$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$2S_A \frac{\partial S_A}{\partial t} -\sqrt3S_A \frac{\partial X_C}{\partial t} -\sqrt3X_C \frac{\partial S_A}{\partial t} -\sqrt3S_B \frac{\partial X_C}{\partial t} -\sqrt3X_C \frac{\partial S_B}{\partial t} = 2S_B\frac{\partial S_B}{\partial t} + S_A\frac{\partial Y_C}{\partial t} + Y_C\frac{\partial S_A}{\partial t} - S_B\frac{\partial Y_C}{\partial t} - Y_C\frac{\partial S_B}{\partial t}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second equation:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$X^2_C + Y^2_C + Z^2_C = L^2 - S^2_A + S_A(\sqrt3X_C + Y_C)+M(S^2_A+S_BS_A + S^2_B)$ $=&amp;gt;$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$2X_C \frac{\partial X_C}{\partial t} + 2Y_C \frac{\partial Y_C}{\partial t} + 2Z_C \frac{\partial Z_C}{\partial t} = -2S_A \frac{\partial S_A}{\partial t} + \sqrt3S_A \frac{\partial X_C}{\partial t} +\sqrt3X_C \frac{\partial S_A}{\partial t} + S_A \frac{\partial Y_C}{\partial t} + Y_C \frac{\partial S_A}{\partial t} + 2MS_A \frac{\partial S_A}{\partial t} + MS_B \frac{\partial S_A}{\partial t} + MS_A \frac{\partial S_B}{\partial t} + 2MS_B \frac{\partial S_B}{\partial t}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;then, I multiplied by $\partial t$, and grouped variables:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First equation:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$(2S_A -\sqrt3X_C - Y_C)\partial S_A +(-2S_B -\sqrt3X_C + Y_C)\partial S_B =  (\sqrt3S_A +\sqrt3S_B)\partial X_C + (S_A - S_B)\partial Y_C$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second equation:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$(-2S_A+\sqrt3X_C+Y_C+2MS_A + MS_B)\partial S_A + (MS_A + 2MS_B)\partial S_B = (2X_C-\sqrt3S_A)\partial X_C + (2Y_C-S_A)\partial Y_C + (2Z_C)\partial Z_C$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;therefore I assume that required parameters are:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$a_{11} = 2S_A -\sqrt3X_C - Y_C$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$a_{12} = -2S_B -\sqrt3X_C + Y_C$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$a_{21} = -2S_A + \sqrt3X_C + Y_C + 2MS_A + MS_B$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$a_{22} = MS_A + 2MS_B$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$b_{11} = \sqrt3S_A +\sqrt3S_B$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$b_{12} = S_A - S_B$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$b_{13} = 0$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$b_{21} = 2X_C - \sqrt3S_A$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$b_{22} = 2Y_C - S_A$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$b_{23} = 2Z_C$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now. According to paper, jacobian of the system can be calculated as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$J = A^{-1} B$,&#xA;where&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$A=(a_{ij})$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$B=(b_{ij})$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;so I im thinking right, it means:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;A =&#xA;    \begin{matrix}&#xA;    a_{11} &amp;amp; a_{12} \\&#xA;    a_{21} &amp;amp; a_{22} \\&#xA;    \end{matrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;B =&#xA;    \begin{matrix}&#xA;    b_{11} &amp;amp; b_{12} &amp;amp; b_{13} \\&#xA;    b_{21} &amp;amp; b_{22} &amp;amp; b_{23} \\&#xA;    \end{matrix}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and Jacobian is multiplication of reverse A matrix and B matrix.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next, author states that Jacobian at given point, where&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$X_C = 0$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$S_A=S_B=S$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$Y_C = l_t-\Delta\gamma$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;is equal to:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;J =&#xA;    \begin{matrix}&#xA;    \frac{\sqrt3S}{2S-l_t+\Delta\gamma} &amp;amp; -\frac{\sqrt3S}{2S-l_t+\Delta\gamma}\\&#xA;    \frac{2(l_t-\Delta\gamma)-S}{6cS-2S+l_t-\Delta\gamma} &amp;amp; \frac{2(l_t-\Delta\gamma)-S}{6cS-2S+l_t-\Delta\gamma} \\&#xA;    \frac{2Z_C}{6cS-2S+l_t-\Delta\gamma} &amp;amp; \frac{2Z_C}{6cS-2S+l_t-\Delta\gamma} \\&#xA;    \end{matrix} ^T&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Everything seems fine. BUT! After multiplicating my A and B matrices I get some monster matrix, that I am unable to paste here, becouse it is so frickin large!&#xA;Substituting variables for values given by author does not give me proper jacobian (i tried substitution before multiplying matrices (on parameters), and after multiplication (on final matrix)).&#xA;So clearly Im still missing something. Either Ive done error in differentiation, or Ive done error in matrix multiplication (I used maple) or I dont understand how to subsititue those values. Can anyone point me in to right direction?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt;&#xA;Problem solved! Parameters that I calculated were proper, I just messed up simplification of equations in final matrix. Using snippet from Petch Puttichai I was able to obtain full Jacobian of system. Thanks for help!&lt;/p&gt;&#xA;" OwnerUserId="20360" LastEditorUserId="20360" LastEditDate="2018-05-27T21:41:02.643" LastActivityDate="2018-05-27T21:41:02.643" Title="Help to get robot jacobian from system of implicit equations" Tags="&lt;kinematics&gt;&lt;jacobian&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15713" PostTypeId="1" CreationDate="2018-05-20T15:08:59.237" Score="1" ViewCount="105" Body="&lt;p&gt;I am building a robot (2 powered wheels and one ball bearing). The problem is that I can't seem to make it drive straight. I literally find it impossible, I have been trying for weeks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have two gyro sensors (on each wheel) and the current motor rotations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The end result would be to have the gyros at 0 degrees, I do not really care for motor rotations. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried to search on Google but most results are GPS related. Is there a way I can do this?&lt;/p&gt;&#xA;" OwnerUserId="20415" LastActivityDate="2021-04-11T13:08:10.930" Title="Sensor fusion with gyroscope and motor rotations" Tags="&lt;sensor-fusion&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="15714" PostTypeId="2" ParentId="15710" CreationDate="2018-05-20T16:08:30.990" Score="2" Body="&lt;p&gt;I suspect that you will need a more powerful motor controller. This one is a 10 amp controller, and I suspect that the motors will have a higher stall amperage than that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.servocity.com/roboclaw-2x30a-motor-controller&quot; rel=&quot;nofollow noreferrer&quot;&gt;The RoboClaw 2x30 amp motor controller&lt;/a&gt; is the minimum I'd use, and can be bought from the same place (I use ServoCity as well). I might go up to the 45 amp version. I build robots that are much lighter than this car (with kid) and i use the 45 amp version. But I often over-build so that my bot's don't set themselves on fire.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For steering I think I'd use a small electric motor like &lt;a href=&quot;https://www.servocity.com/32-rpm-hd-premium-planetary-gear-motor&quot; rel=&quot;nofollow noreferrer&quot;&gt;this one&lt;/a&gt; for the steering. I'd either use a belt that could slip or a 3d-printed gear that would break if there was too much resistance. Or I'd find the plans for a slip-clutch to make sure that the motor won't use more torque than X, where X is an experimentally determined value. I'd put the steering motor behind the dash panel so that the kids can't get their fingers caught in the belt or gear.&lt;/p&gt;&#xA;" OwnerUserId="19275" LastActivityDate="2018-05-20T16:08:30.990" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15716" PostTypeId="2" ParentId="15712" CreationDate="2018-05-21T09:29:30.083" Score="0" Body="&lt;p&gt;Recall that the Jacobian can be interpreted as the matrix which maps the joint velocity to end-effector velocity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$ \dot{x} = J(\theta)~\dot{\theta} $&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your case $x = [x_c,y_c,z_c] $ (prefer lower case for vectors and scalar) and $\theta = [s_A,s_B] $. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you differentiate the system as suggested you should get the second set of equations with $\Delta s_A, s_A, \Delta s_B, s_B, ...$.&#xA;To do so you can do the partial time differentiation and multiply your result by $\Delta t$ as for any time dependent variable $u$, $\frac{\partial u}{ \partial t } = \frac{\Delta u }{\Delta t}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;NOTE : your first equation can be rewritten &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$ (\sqrt{3} x_c +y_x ) (s_A+s_B) = {s_A}^2 + {s_B}^2 - 2s_A$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;which make the distance (the second equation) expressed only from the system ($L,M$)  and joint ($s_A,s_B$) parameters.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2018-05-21T09:29:30.083" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15717" PostTypeId="2" ParentId="15707" CreationDate="2018-05-21T09:38:48.563" Score="1" Body="&lt;p&gt;From the &lt;a href=&quot;https://devblogs.nvidia.com/jetson-tx2-delivers-twice-intelligence-edge/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Nvidia Jetson datasheet &lt;/a&gt;, it seems that 12 cameras are supported. The bandwith per camera is just smaller when you have more cameras as there is a limitation in the number of lanes and you get more cameras per lane. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suspect that the 13th camera is the one actually filming the subjects but it's a bit unclear from Skydio  website, which is legitimate for a high-tech product.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastEditorUserId="20709" LastEditDate="2018-07-22T17:39:10.257" LastActivityDate="2018-07-22T17:39:10.257" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15718" PostTypeId="1" AcceptedAnswerId="15719" CreationDate="2018-05-21T10:20:48.807" Score="0" ViewCount="128" Body="&lt;p&gt;I am planning to make a 4 Degree of Freedom(DOF) robotic arm. I have a confusion in mechanical design of the robot. Shall I use two 4 bar mechanisms to reduce the number of actuators? or a stepper motor on every linkage? Also, a gripper will be attached. So which will have higher payload?  &lt;/p&gt;&#xA;" OwnerUserId="20066" LastActivityDate="2018-05-21T11:44:35.307" Title="Two 4 bar mechanism vs stepper motor on each linkage in a 4 DOF robotic arm" Tags="&lt;robotic-arm&gt;&lt;dynamics&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15719" PostTypeId="2" ParentId="15718" CreationDate="2018-05-21T11:44:35.307" Score="1" Body="&lt;p&gt;Since a four-bar mechanism is a one dof device, you couldn’t get by with just two four-bars (or else you would end up with a two dof robot).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Four bars can be implemented to reduce the moving mass for a robot.  The parallelogram mechanisms that Fanuc made so popular for controlling the elbow rotation are a good example.   But you still only get one dof for each four bar.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding payload, etc, there are too many design options to consider to be able to answer.  Start with the requirements for your design, including payload, weight, size, cost, accuracy, and allowable controllers, then you can start to address how to implement the design.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2018-05-21T11:44:35.307" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15720" PostTypeId="2" ParentId="15657" CreationDate="2018-05-22T02:46:16.817" Score="1" Body="&lt;p&gt;Before identification of dynamic parameters, you need to know the kinematic parameters with reasonable accuracy either from kinematic calibration or CAD design.&#xA;As dynamic identification concerned, you need to develop the dynamic model either from energy of the system or recursive modelling all in all torque dynamic parameters(link center of gravity,mass, and inertia) relation is given as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;\begin{equation}&#xA;\tau = Y(q,q^{.},q^{..})\pi&#xA;\end{equation}&#xA;Y is called Regressor matrix and computed from Lagrangian L = T - V and its a function of joint configuration and $1^{st}$ and $2^{nd}$ derivative of the same.&#xA;$\tau$ is the measured joint torque vector,$\pi$ is the parameter vector you intend to determine. So you may need to have $n$ equation of the above relation for the number of measurements(M) you have(different joint configurations).further $M&amp;gt;&amp;gt; p$ where p is number of parameters you need to determine.&lt;/p&gt;&#xA;" OwnerUserId="20022" LastActivityDate="2018-05-22T02:46:16.817" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="15721" PostTypeId="1" CreationDate="2018-05-22T02:52:13.767" Score="0" ViewCount="90" Body="&lt;p&gt;I'm working on a wheeled-robot platform. My team is implementing some algorithms on MCU to&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;keep getting sensors reading (sonar array, IR array, motor encoders,&#xA;IMU) &lt;/li&gt;&#xA;&lt;li&gt;receive user command (via a serial port connected to a tablet)&lt;/li&gt;&#xA;&lt;li&gt;control actuators (motors) to execute user commands. &lt;/li&gt;&#xA;&lt;li&gt;keep sending sensor readings to the tablet for more complicated algorithms.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;We currently implement everything inside a global while-loop, while I know most of the other use-cases do the very same things with a real-time operating system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please tell me the benefits and reasons to use a real-time os instead of a simple while-loop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="10204" LastActivityDate="2018-05-23T22:59:30.123" Title="The reason(s)/benefit(s) to use realtime operating system instead of while-loop on MCU" Tags="&lt;microcontroller&gt;&lt;wheeled-robot&gt;&lt;real-time&gt;&lt;embedded-systems&gt;&lt;operating-systems&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15723" PostTypeId="2" ParentId="667" CreationDate="2018-05-22T06:44:10.203" Score="0" Body="&lt;p&gt;You could use a simplified Linux (without the X-Windowing and other graphics utilities that a robot may not need). Raspian-Lite is one such OS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then there are a number of robot frameworks that will run on the Raspberry Pi. They run under the Linux OS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ROS (the Robot Operating System) is one of the most popular frameworks, but also the most complicated to learn. As Peter Parker learned: With Great Power Comes a Great Learning Curve. :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ROS is written in C++, but can be accessed in a number of languages including Java and Python.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://gobot.io/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Gobot&lt;/a&gt;. This is a framework written in the language Go. It has a number of sensors and boards that the framework knows about. You can put the main intelligence onto a large computer and use a smaller board with a wireless connection on the robot. Gobot has sister projects (Artoo - uses Ruby, and Cylon.js - uses JavaScript).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Go is a C-like language that is fairly easy to use, created by Google. I think of it as C's BASIC (Go is to C like BASIC is to Fortran). It compiles very quickly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am thinking of starting a Rust port of Gobot (Rust is yet another C-like language similar to Go, but it was designed to be as type-safe as possible. Many pointer errors common to C/C++ are caught by the Rust compiler.&lt;/p&gt;&#xA;" OwnerUserId="19275" LastEditorUserId="19275" LastEditDate="2018-05-22T13:21:50.947" LastActivityDate="2018-05-22T13:21:50.947" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15725" PostTypeId="2" ParentId="15721" CreationDate="2018-05-22T11:23:25.067" Score="0" Body="&lt;p&gt;IT all depends on the complexity of your system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typically micro-controller can handle, under hard real time constraint, simple computations related to one pr two peripheral (actuator, sensor) and communication. So  they are well suited for low-level interfaces.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But if you want to have more complex, i.e. computational intensive, process, like path planning, action planning, ...&#xA;You will need to switch to CPU or GPU based boards.&#xA;At that point if you still want to met real time constraint you need to have a real time OS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that for some application the real time constraints for high level algorithms are soft, hence there is no necessity to have a real time OS/system.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2018-05-22T11:23:25.067" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15726" PostTypeId="2" ParentId="15573" CreationDate="2018-05-22T21:31:06.940" Score="1" Body="&lt;p&gt;It is possible to subscribe to the cliff state using ROS. The topic is /cliff_state, and it is of type Int16. Below is what I used in my code, where callback_cliff is my callback function.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;rospy.Subscriber('/cliff_state', Int16, callback_cliff)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I'm still not sure what the packet ID numbers are.&lt;/p&gt;&#xA;" OwnerUserId="20020" LastActivityDate="2018-05-22T21:31:06.940" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15729" PostTypeId="1" AcceptedAnswerId="15732" CreationDate="2018-05-23T11:03:25.770" Score="1" ViewCount="4210" Body="&lt;p&gt;Apparently, there are active and passive sensors. An &lt;em&gt;infrared proximity sensors&lt;/em&gt; should be an active sensor, whereas a &lt;em&gt;gyroscope&lt;/em&gt; should be a passive sensor. Why is that the case? In general, what is the difference between an active and a passive sensor? Multiple examples (with appropriate explanations) may be helpful to clarify the distinction.&lt;/p&gt;&#xA;" OwnerDisplayName="user10072" LastActivityDate="2018-05-26T11:57:22.170" Title="What is the difference between active and passive sensors?" Tags="&lt;sensors&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15732" PostTypeId="2" ParentId="15729" CreationDate="2018-05-23T14:26:56.173" Score="6" Body="&lt;p&gt;Let's recall that sensors are used to measure a physical quantity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The distinction between passive and active sensor characterize the sensor ability to retrieve a measurement without or with inputing energy (mechanic or electromagnetic or else) in the environment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, an infrared proximity sensor is active because the sensor needs to actively emit infrared waves in order to retrieve the measurement of the distance. So, any sensor which requires to input energy to the environment in order to retrieve the measurement is active (laser range finder, ultrasound range finder, sonar, lidar, time of flight camera, etc.).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, sensors like gyroscope or accelerometers are named passive because they are able to retrieve a measurement without actively interacting with the environment. Other examples are: encoder, switch, camera, magnetometer, barometer, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More complex sensor like microsoft kinect or intel euclide are composed of several sensors both passive (visible camera, IMU) and active (IR camera and lighting), thus making the full sensor an active sensor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: added sensors based on comment&lt;/p&gt;&#xA;" OwnerUserId="18235" LastEditorUserId="18235" LastEditDate="2018-05-24T14:59:05.827" LastActivityDate="2018-05-24T14:59:05.827" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15734" PostTypeId="1" CreationDate="2018-05-23T19:23:56.373" Score="2" ViewCount="53" Body="&lt;p&gt;Given a CAN bus with one master and any number of motor drivers, is there a way to measure the time between sending a command from the master (e.g. a PC running ROS) and the execution of the said command (e.g. the motor starting to move)?&lt;br&gt;&#xA;This matters since it affects the maximum update rate of the robot's control loop.&lt;/p&gt;&#xA;" OwnerUserId="20441" LastActivityDate="2018-05-23T21:38:30.423" Title="How can I measure latency in a CAN bus?" Tags="&lt;real-time&gt;&lt;can&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15736" PostTypeId="2" ParentId="15734" CreationDate="2018-05-23T21:38:30.423" Score="2" Body="&lt;p&gt;Use an oscilloscope.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Place oscilloscope probes on an i/o line on the master and a motor phase line on the slave. Toggle the i/o line just before sending the can bus command for a step change in the motor control. Measure the time difference between i/o trigger and pwm step change. Blocking the motor so it's angle does not change makes it easier to see the pwm change.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are many variations on this depending on your system. For some pc's (new laptops) getting access to an i/o line is not trivial. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Measurement of latency using code only by capturing time stamps and sending messages is less accurate because you start making assumptions about what the latency in the controller is.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2018-05-23T21:38:30.423" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15737" PostTypeId="2" ParentId="15721" CreationDate="2018-05-23T21:52:17.917" Score="1" Body="&lt;p&gt;Using an RTOS on a microcontroller is for reducing the complexity of developing your solution, and reduces the need for programmer expertise for device drivers, at cost of increasing the complexity of your code base and often a reduction in the efficiency of your code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bare metal code (your while loop) is usually cleaner and more efficient for small solutions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have a bare metal solution that works, keep it! &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you find that your complexity grows to the point where you are writing something that looks like scheduler code or inter process communications code to solve your problems, your are writing your own RTOS and should consider using and existing one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should read the documentation and code of a small RTOS for your own education as soon as you can. It will help you make this choice easier in the future.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2018-05-23T21:52:17.917" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15738" PostTypeId="2" ParentId="15721" CreationDate="2018-05-23T22:59:30.123" Score="0" Body="&lt;p&gt;In addition to the other answers, I would add that determinism provides a large benefit with an RTOS.   Your while loop may execute faster sometimes, and slower other times, depending on the computations and conditional results.  An RTOS can guarantee a minimum loop execution rate, or a fixed rate (which I usually prefer), given that deterministic programming practices are followed.   You can do this with bare metal code, but in my experience it is not done and you just try to execute the loop as fast as possible.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2018-05-23T22:59:30.123" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15739" PostTypeId="2" ParentId="15702" CreationDate="2018-05-24T15:13:53.430" Score="1" Body="&lt;p&gt;It is now running. The problem was, that I didn't know, that I should hold the Windows Logo Button while using the joystick to move the bot. Alternativly you can push the joystick on the right down to activate the left joystick.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This works with the Xbox 360 and the Xbox One S controller :)&lt;/p&gt;&#xA;" OwnerUserId="20394" LastActivityDate="2018-05-24T15:13:53.430" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15744" PostTypeId="1" CreationDate="2018-05-25T14:58:19.303" Score="0" ViewCount="69" Body="&lt;p&gt;I know, robotics may refer to many things and it's extremely large field today. But if I can narrow the topic to something like Aldebaran(the company makes Nao robots), what knowledge should I have as a founder and manager of this company?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I really love to have a company like that, and know somethings from OpenCV to ARM-microcontrollers programming, and few experience in Solidworks and Altium designer!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But as you know this is a very big field and the more I read/learn, the more I'm disappointed! I think I can't to reach a point that I can say tomorrow I will create a team and start my first robot project, Cause I think there are many many things that I don't know and many skills that I don't have!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So it made me to ask this question here to know, what knowledge or skills really needed to establish some company like Aldebaran or similar companies?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;NOTE: I don't talk about simple robot projects like line following robots, I am talking about Humanoid intelligent robots with Machine Vision, Listening/Speaking abilities and good mechanical ability(icub robot for another example)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Who with what knowledge can make such company and lead a great engineering team of computer/electronics/mechanics/others?&lt;/p&gt;&#xA;" OwnerUserId="17822" LastActivityDate="2018-05-26T10:13:11.920" Title="What knowledge should I have if I want to establish a robotics company?" Tags="&lt;mobile-robot&gt;&lt;artificial-intelligence&gt;&lt;machine-learning&gt;&lt;humanoid&gt;&lt;manufacturing&gt;" AnswerCount="3" CommentCount="2" ClosedDate="2018-07-23T18:54:25.470" ContentLicense="CC BY-SA 4.0" />
  <row Id="15745" PostTypeId="1" CreationDate="2018-05-25T15:00:24.937" Score="3" ViewCount="269" Body="&lt;p&gt;I installed a command line tool which accepts genicam packets from a device as input into a docker image. If I use the option &lt;code&gt;--network host&lt;/code&gt; in the &lt;code&gt;run&lt;/code&gt; command for the container the packets are received. If I use &lt;code&gt;-p 3956:3956/udp&lt;/code&gt; to expose the Genicam default port &lt;code&gt;3956&lt;/code&gt; (e.g. stated here: &lt;a href=&quot;http://www.roborealm.com/help/GenICam.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;RoboRealm - GenICam - Instructions&lt;/a&gt;) in the &lt;code&gt;run&lt;/code&gt; command of the container I don't get packets. What did I wrong? Could the port be different from the default? How could I get the changed port then?&lt;/p&gt;&#xA;" OwnerUserId="19069" LastActivityDate="2021-03-17T04:06:50.837" Title="How can I receive Genicam packets from a device in a docker container?" Tags="&lt;computer-vision&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15747" PostTypeId="2" ParentId="15744" CreationDate="2018-05-25T15:39:47.880" Score="3" Body="&lt;p&gt;You need enough domain knowledge to be able to tell if someone is bullshitting you or not, to be able to determine when someone has an achievable or unachievable project idea, to be able to determine who has talent and who doesn't, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And money. A lot of money. Quality engineers don't work for free.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-05-25T15:39:47.880" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="15748" PostTypeId="1" CreationDate="2018-05-25T15:47:03.870" Score="0" ViewCount="173" Body="&lt;p&gt;I bought a Roboclaw controller. Since then, have looked around for other.  The software support seems to be the same (to me:sad) state.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They all seem to provide Arduino code examples, however, then I guess it's up to me to find / guess about the headers?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I don't want to use python, and instead I want to use C / C++, how to best go about doing so for a Raspberry Pi?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It would just seem to me that if I spent maybe several hundred dollars on some hardware, it shouldn't be this hard to get some use out of it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Am I missing something here?&lt;/p&gt;&#xA;" OwnerUserId="20298" LastActivityDate="2018-05-27T14:40:44.557" Title="using motor controllers with Raspberry instead of Arduno. Is it just me or is everyone ok with bad sofftware support?" Tags="&lt;arduino&gt;&lt;raspberry-pi&gt;&lt;microcontroller&gt;&lt;software&gt;&lt;c++&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15750" PostTypeId="2" ParentId="15744" CreationDate="2018-05-25T22:00:10.023" Score="1" Body="&lt;p&gt;If having a company is more important to you than working in robotics for someone else, business skills and people skills are more important than technical skills. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Being successful requires experience, acquired over a lot of time with a lot of learning opportunities (failure). It also requires a good network of people you can draw on for knowledge, resources, and mentorship. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;One leads with the passion and big idea that is so compelling that others will come with for you or invest in you. You don't lead and guide experts. You point then towards a problem and then listen to their advice. To check if their advice is good, you use multiple experts and compare their advice.&lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="184" LastEditDate="2018-05-26T04:07:45.667" LastActivityDate="2018-05-26T04:07:45.667" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15751" PostTypeId="1" AcceptedAnswerId="15757" CreationDate="2018-05-26T08:56:28.343" Score="3" ViewCount="550" Body="&lt;p&gt;I'm a newbie on ROS and I'm trying to figure out how ROS works so I'm installing ROS from source.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've found that most of ROS packages contains two kinds of codes: C++ and Python. For example, here is the architecture of &lt;code&gt;src&lt;/code&gt; of the ROS package &lt;code&gt;actionlib&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;src/&#xA;├── actionlib&#xA;│   ├── action_client.py&#xA;│   ├── action_server.py&#xA;│   ├── exceptions.py&#xA;│   ├── goal_id_generator.py&#xA;│   ├── handle_tracker_deleter.py&#xA;│   ├── __init__.py&#xA;│   ├── server_goal_handle.py&#xA;│   ├── simple_action_client.py&#xA;│   ├── simple_action_server.py&#xA;│   └── status_tracker.py&#xA;├── connection_monitor.cpp&#xA;└── goal_id_generator.cpp&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I'm thinking if I can remove all of python scripts and only &lt;code&gt;cmake &amp;amp;&amp;amp; make&lt;/code&gt; the c++ files to use the ROS package actionlib?&lt;/p&gt;&#xA;" OwnerUserId="20463" LastActivityDate="2018-05-26T15:44:50.910" Title="Are both of C++ and Python necessary in ROS" Tags="&lt;ros&gt;&lt;python&gt;&lt;c++&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15752" PostTypeId="2" ParentId="15744" CreationDate="2018-05-26T10:13:11.920" Score="1" Body="&lt;p&gt;To create a company of any kind you need both business skills and interpersonal skills. The main domain knowledge should come from your CTO (Chief Technical Officer) and your engineers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your main job will be to secure funding for the company.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the company is small enough that you are the CTO also, then you need to be able to impress the engineers. You don't have to be better than they are, but you have to know robotics. If the company specializes in humanoid robotics, then you should have built a human robot that does some of what your company is planning to do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would even go so far as to say that if you haven't built a complicated autonomous robot then you don't have the passion to create a robotics company like you are describing. Even a hexapod with vision capabilities would be a good start. This would give you some of the background knowledge that you need to evaluate the engineers' recommendations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It doesn't sound like you've built any kind of robot. Start small and eventually get to something more complex. You'll know when you're ready.&lt;/p&gt;&#xA;" OwnerUserId="19275" LastActivityDate="2018-05-26T10:13:11.920" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15753" PostTypeId="2" ParentId="15748" CreationDate="2018-05-26T11:09:53.697" Score="1" Body="&lt;p&gt;I looked fast Roboclaw on Pololu and there was libraries for C++. For Rapsbery you just need the underlying Wiring level (or the part which is actually used)  modified to connect to RPi to its GPIO pins.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Arduino anything is C++ with Wiring library and all sources are able to download for free on Arduino site, libraries for special HW are provided by HW suppliers.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;BTW: about hunderds dollars HW usability - did you try get source for basic libraries for some smartphone? Not mentioned for modern PC with not obsolete graphic card ... the Arduino support is light years  more opened and accessible.&lt;/p&gt;&#xA;" OwnerUserId="16496" LastActivityDate="2018-05-26T11:09:53.697" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15754" PostTypeId="2" ParentId="15729" CreationDate="2018-05-26T11:57:22.170" Score="0" Body="&lt;p&gt;Every sensor is used (or meant to) sense something about its environment, so it needs to &quot;listen&quot; to something (sound, light, magnetic field, ... ) generally be somehow affected by its environment to have some idea, what is around.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Pasive&lt;/strong&gt; sensors just use, what came and do not actively emit that, what they are measuring. (well nearly anything emits some kind of energy (wires with electricity emits some small electromagnetic fields around, mechanical parts make noise when working, etc ...), but here the emited energy is not used for the detection)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Active&lt;/strong&gt; sensors on the other hand &lt;strong&gt;DO&lt;/strong&gt; emit something and then measure, how the environment is interacting with that emited energy (like ultrasound emits high frequency sound and then listen how it is reflected back, to measure distance)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Take example from horror movie:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if you are just sitting on ground, silently hear to incoming steps, looking, if you can see someone comming, then you are &lt;strong&gt;pasive&lt;/strong&gt; sensor (both for sound and light). You can then found, that hear some steps, thats are heavy and slow and increase in volume over time and have big echo, so probably it is huge man comming to you and you are in some big cave or extra large room. Then you see small red light approaching and smell smoke and deside, that he is probably smoking cigarette, is about 2m high and 10m away this direction (deciding from the burning point of cigarette and its movements) and you are still &lt;strong&gt;passive sensor&lt;/strong&gt;, as you do not send anything out to get this informations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then you scream with fear and echo tells you, that the place, where are you is really huge, like 50m around you (as the echo of your scream take some time to reflect from walls and go back to your ears) and now you are &lt;strong&gt;active sensoring&lt;/strong&gt; (with emiting scream to know the size of the cave) and he can simply listen to your signal and decide, that you are really there and you are scared (from sound of your voice) - he is &lt;strong&gt;passively&lt;/strong&gt; sensoring you on sound. As you already given your presence, you light a torch and see, that it is big man in black suit with big gun in hand - you see it in light of your own light source, so now you are &lt;strong&gt;active sensoring&lt;/strong&gt; on visible light too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Should that happen on day, say in forrest, you would not need yor torch to see him in detail, so you will be &lt;strong&gt;pasivelly sensoring&lt;/strong&gt; him on visible light and will not give out your position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Well, you are still heavy braething and your heart pounds fast, but as you are not using this sounds for detecting anything, then it does not count as &lt;strong&gt;active&lt;/strong&gt; sensoring (even when you are trying to hear his steps), just as a noise produced by you. Still he can sense that (pasively hearing) and find you in your hiding.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Lot of pasive sensors use something already existing around - light sensors use the light from sun and detect shadow cast by someone in proximity, or can detect burning torch in dark. Heat sensors can detect any heat source near and decide, that it is aproching (or appeared now) and react on that, press sensors use weight of item to measure it (kichen scale eq.), normal camera use daily light to get photo (camera with flash/lamp attached is active, ofc.), switch use the force of your finger to connect wires (the electricity there is not emited out for measuring, so it is passive), proximity sensors may sence difference in capacity and increased static and be passive, or may send out some signals and detect echo and be active and so on ...&lt;/p&gt;&#xA;" OwnerUserId="16496" LastActivityDate="2018-05-26T11:57:22.170" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15755" PostTypeId="1" CreationDate="2018-05-26T13:15:02.150" Score="1" ViewCount="24" Body="&lt;p&gt;Not sure if this is the proper community, apologies if not. I'm wanting to start a DIY project at home to automate my blinds through Alexa. I'm comfortable with the tech from the microcontroller up, but it's been quite a while since I've interfaced with any motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm leaning towards brushless motors, mostly because I'm somewhat familiar with them. I need something that can spin several rotations, something that I can keep track of position (or better, power required for rotation so that if it gets &gt; some value, I know the blinds are fully shut or closed due to that resistance), and ultimately something somewhat energy efficient so I don't have to change the AA batteries every week. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any suggestions to get me going would be greatly appreciated.&lt;/p&gt;&#xA;" OwnerUserId="20465" LastActivityDate="2018-05-27T04:40:05.587" Title="What motor features should I consider for automated blinds?" Tags="&lt;motor&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15756" PostTypeId="2" ParentId="15712" CreationDate="2018-05-26T14:37:41.223" Score="0" Body="&lt;p&gt;Actually you only got some errors when computing matrix elements. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The matrices A and B should be&#xA;$$&#xA;A = \begin{bmatrix}2S_A - \sqrt{3}X - Y &amp;amp; -2S_B - \sqrt{3}X + Y\\&#xA;-2S_A + \sqrt{3}X + Y + 2MS_A + MS_B &amp;amp; MS_A + 2MS_B\end{bmatrix}&#xA;$$&#xA;and&#xA;$$&#xA;B = \begin{bmatrix}\sqrt{3}S_A + \sqrt{3}S_B &amp;amp; S_A - S_B &amp;amp; 0\\&#xA;2X - \sqrt{3}S_A &amp;amp; 2Y - \sqrt{3}S_A &amp;amp; 2Z\end{bmatrix}.&#xA;$$&#xA;Using the above two matrices should give you the desired result, which can be verified by the following python snippet.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;import sympy as sp&#xA;# Declare symbolic variables. (I also use r for sqrt(3))&#xA;x, y, z, s, sa, sb, m, r = sp.symbols('x, y, z, s, sa, sb, m, r')&#xA;A = sp.Matrix([[2*sa - r*x - y, -2*sb - r*x + y],&#xA;               [-2*sa + r*x + y + 2*m*sa + m*sb, m*sa + 2*m*sb]])&#xA;B = sp.Matrix([[r*sa + r*sb, sa - sb, 0],&#xA;               [2*x - r*sa, 2*y - r*sb, 2*z]])&#xA;Ainv = sp.Matrix.inv(A)&#xA;res = Ainv.multiply(B)&#xA;J = res.subs({sa: s, sb: s, x: 0}) # do the substitution&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;To print out the element $(i, j)$ of $J$ (indices start from 0), do&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;print sp.simplify(J[3*i + j])&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="7610" LastActivityDate="2018-05-26T14:37:41.223" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15757" PostTypeId="2" ParentId="15751" CreationDate="2018-05-26T15:44:50.910" Score="-1" Body="&lt;p&gt;You can program in ROS using either ROS or Python. It just depends on your preferences. Actually, it is very common to mix both languages to create some programs that run C++ and others that run Python, since they can talk to each other using only the ROS environment (topics, services, messages...). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My advice is that you do not uninstall anything that comes with the default installation unless you are sure that you are not going to use it. For instance, you may have later the problem that you install a third party code that do uses Python.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are a newbie to ROS, I recommend you to start learning ROS with Python until you grasp how it works. Then you can move to ROS with C++.&#xA;Also I recommend you our online academy where you learn ROS in an already setup environment with simulations of robots running. You only need a web browser. Here the link: &lt;a href=&quot;http://robotignite.academy&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://robotignite.academy&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="20466" LastActivityDate="2018-05-26T15:44:50.910" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15758" PostTypeId="2" ParentId="15664" CreationDate="2018-05-26T15:48:32.343" Score="0" Body="&lt;p&gt;I recomend you to watch this ROS Developers Live Class where it is explained how to build a URDF model of a robot: &lt;a href=&quot;https://youtu.be/q01dDxeHTMs&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://youtu.be/q01dDxeHTMs&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The key point here is that you understand what is the difference between the collision and visual of the model, as well as the pose of those.&lt;/p&gt;&#xA;" OwnerUserId="20466" LastActivityDate="2018-05-26T15:48:32.343" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15761" PostTypeId="2" ParentId="15755" CreationDate="2018-05-27T04:40:05.587" Score="1" Body="&lt;p&gt;You will probably need a motor with lots of torque to run your blinds. Factoring in that you also want to track position, a brushless motor is not the best solution for this problem. You are best off using a stepper motor. They have lots of torque and can continuously rotate and track position. &lt;/p&gt;&#xA;" OwnerUserId="16011" LastActivityDate="2018-05-27T04:40:05.587" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15762" PostTypeId="2" ParentId="15713" CreationDate="2018-05-27T04:49:21.300" Score="0" Body="&lt;p&gt;If you’re using your gyros to measure the direction your bot is moving, you will need to use a PID system to adjust your direction based on the feedback your bot provides. This type of system continuously measures the state of your gyro and applies it to the speed of each wheel. This should keep your bot running straight. If you are using the gyros to measure the rotation of each wheel, then you should be using a rotary encoder instead. Two rotary encoded motors and a gyro will solve your problem completely &lt;/p&gt;&#xA;" OwnerUserId="16011" LastActivityDate="2018-05-27T04:49:21.300" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15763" PostTypeId="1" CreationDate="2018-05-27T07:00:39.090" Score="2" ViewCount="341" Body="&lt;p&gt;Consider a simple example of Bundle Adjustment where I have robot and landmark poses $x = \left[ x_p \text{ } x_m\right]^T$ and measurements given by $z$, such that a simple factor graph can be generated with the nodes containing poses and edges containing the measurements. I'll have to solve for a non-linear least squares problem of the form $C(x) = \frac{1}{2}|| r(x) ||^2$ where $r(x)$ denotes the residuals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can implement and use any non-linear least squares optimization algorithm such as Gauss-Newton or use a popular library like ceres-solver.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;My question is&lt;/strong&gt;: Now suppose out of the state variables $x = \left[ a \text{ } b\right]^T$, I need to marginalize some variables $b$, while keeping the rest $a$. How do I apply this in terms of Gauss-Newton Algorithm and ceres-solver?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I understand the Gauss-Newton Algorithm and Schur Complement.&#xA;If the original covariance of the system is &#xA;\begin{equation} K = &#xA;\begin{bmatrix}&#xA;    A &amp;amp; C^T \\&#xA;    C &amp;amp; D&#xA;\end{bmatrix}&#xA;\end{equation}&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Original Information &#xA;\begin{equation} K^{-1} = &#xA;\begin{bmatrix}&#xA;    \Lambda_{aa} &amp;amp; \Lambda_{ab} \\&#xA;    \Lambda_{ba} &amp;amp; \Lambda_{bb}&#xA;\end{bmatrix}&#xA;\end{equation}&#xA;Marginalized covariance $K_m = [A]$ and marginalized information $K_m^{-1} = A^{-1}$ where is $A$ is computed by the schur complement $A^{-1} = \Lambda_{aa} - \Lambda_{ab}\Lambda_{bb}^{-1}\Lambda_{ba}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, what do I do when new poses and measurements are added to the system and optimization is done?&lt;/p&gt;&#xA;" OwnerUserId="18674" LastActivityDate="2018-05-27T07:00:39.090" Title="How does marginalization of variables effect least squares SLAM energy function?" Tags="&lt;slam&gt;&lt;computer-vision&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15764" PostTypeId="2" ParentId="15748" CreationDate="2018-05-27T14:40:44.557" Score="1" Body="&lt;p&gt;The Roboclaw documentation is excellent.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://downloads.ionmc.com/docs/roboclaw_user_manual.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;The PDF is available for download.&lt;/a&gt; I never even looked at a library for something that I could just use by following the manual. The RoboClaw is an extremely powerful motor controller. It isn't just an inexpensive board where you put PWM in and get voltage out. You can use many methods for controlling the motor. This is part of the reason for the expense.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've almost always used control by usb or serial because I'm lazy. It worked just as the manual said it would. Unfortunately this was a few years ago and the computer I used is gone. In the next few months I'm going to have to do this again, and I'll probably publish a library for &lt;a href=&quot;http://gobot.io&quot; rel=&quot;nofollow noreferrer&quot;&gt;Gobot (a framework for robotics written in Go)&lt;/a&gt;. Perhaps I'll write one in Java also.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/ColinHeffernan/roboclaw&quot; rel=&quot;nofollow noreferrer&quot;&gt;There is Colin's library in C++ for ROS&lt;/a&gt;. It's freely available on Github, but it says it hasn't been fully tested.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/SorcererX/RoboClaw&quot; rel=&quot;nofollow noreferrer&quot;&gt;SorcererX has a C library for Linux using serial&lt;/a&gt;. It's also on Github.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, there are a lot of other libraries available for the RoboClaw. Ion Motion Control (the sellers of the RoboClaw) have multiple libaries. These are meant as examples. If you don't want to use python, then just translate it into c++. Or write your own given the information in the manual.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The biggest mistake I've seen with these modules is that people will often buy the controller based on normal motor current rather than stall current. This leads to melted controllers eventually.&lt;/p&gt;&#xA;" OwnerUserId="19275" LastActivityDate="2018-05-27T14:40:44.557" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15766" PostTypeId="1" CreationDate="2018-05-28T02:14:23.877" Score="0" ViewCount="499" Body="&lt;p&gt;Is there any cheap way to measure how hard a servo is turning? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am looking to measure changes of about 0.1 oz-in. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What are the common ways to measure servo torque, how much do they cost, and how precise are they? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit for clarification: I am looking to turn the servo at a constant speed, and measure how much the object it is turning is &quot;fighting back.&quot;&lt;/p&gt;&#xA;" OwnerUserId="20477" LastActivityDate="2018-06-29T21:24:18.210" Title="How can I measure the torque a servo motor is applying very precisely?" Tags="&lt;servomotor&gt;&lt;torque&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15767" PostTypeId="2" ParentId="4885" CreationDate="2018-05-28T04:10:32.490" Score="1" Body="&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;You can use the &lt;a href=&quot;http://wiki.ros.org/tum_ardrone&quot; rel=&quot;nofollow noreferrer&quot;&gt;tum_ardrone ROS package&lt;/a&gt; to do visual navigation.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Another option is to use MoveIt! to generate the trajectories for your drone and then apply them to the drone movement. Check out &lt;a href=&quot;https://github.com/eYSIP-2017/eYSIP-2017_Navigation-in-Indoor-Environments-using-drone/wiki/Setup-MoveIt!-for-Drone&quot; rel=&quot;nofollow noreferrer&quot;&gt;eYSIP-2017_Navigation-in-Indoor-Environments-using-drone&lt;/a&gt; for how to do it.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In case you find it complex, I recommend you an &lt;a href=&quot;https://goo.gl/2KxX96&quot; rel=&quot;nofollow noreferrer&quot;&gt;online course&lt;/a&gt; we created that teaches how to make drones navigate using that PTAM-visualization package and also how to use MoveIt! to navigate in a 3D environment. We use simulations to make you practice on the spot how everything works.&lt;/p&gt;&#xA;" OwnerUserId="20466" LastEditorUserId="37" LastEditDate="2018-05-28T10:34:17.460" LastActivityDate="2018-05-28T10:34:17.460" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15770" PostTypeId="1" CreationDate="2018-05-28T10:55:37.150" Score="2" ViewCount="106" Body="&lt;p&gt;I want to design an EKF to estimate the position of a UAV. If I were doing this with Euler angles then I would have a state vector that would look like &#xA;\begin{bmatrix}north&amp;amp;east&amp;amp;down&amp;amp;vel_x&amp;amp;vel_y&amp;amp;vel_z&amp;amp;a_x&amp;amp;a_y&amp;amp;a_z&amp;amp;y&amp;amp;p&amp;amp;r&amp;amp; \omega_x&amp;amp;\omega_y&amp;amp;\omega_z\end{bmatrix}&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With velocities and accelerations being in body frame and exactly like I obtain from the sensors. These would be connected to the position states via the angles of roll, pitch, yaw. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, now I have quaternions and I don't know how to form the dynamical system. Based on what I have read the state has to be:&#xA;\begin{bmatrix}north&amp;amp;east&amp;amp;down&amp;amp;vel_n&amp;amp;vel_e&amp;amp;vel_d&amp;amp;a_n&amp;amp;a_e&amp;amp;a_d&amp;amp;q_1&amp;amp;q_2&amp;amp;q_3&amp;amp;q_4&amp;amp; \omega_x&amp;amp;\omega_y&amp;amp;\omega_z\end{bmatrix}&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The relationship between $ \dot{q} $ and $q$ is &#xA;$ \dot{q} = \frac{S(\omega)}{2} q$, where&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$S(\omega) = \begin{bmatrix} &#xA;0 &amp;amp; -\omega_x &amp;amp; -\omega_y &amp;amp;-\omega_z\\ &#xA;\omega_x &amp;amp; 0 &amp;amp; \omega_z &amp;amp;-\omega_y\\&#xA;\omega_y &amp;amp; -\omega_z &amp;amp; 0 &amp;amp;\omega_x\\&#xA;\omega_z &amp;amp; \omega_y &amp;amp;-\omega_x&amp;amp;0\\&#xA;\end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the major difference is that I use the world frame for the velocities and accelerations. I presume this would require a preprocessing step using the orientation of the vehicle to transform the measurements for acceleration from body frame to world frame during the kalman correction step. The Kalman filter is given measurements in world frame which is not exactly what I get from the sensors so I imagine my measurement noise will not be populated using values I get from a spec sheet but I will rather have to measure those. The nonlinearity in the system comes only from the $S(\omega)$ function. Does this sound like I'm on the right track?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If anyone has some tutorial that shows exactly how to do this I would greatly appreciate it.&lt;/p&gt;&#xA;" OwnerUserId="10542" LastActivityDate="2018-05-28T10:55:37.150" Title="Position-Attitude Kalman filter with Quaternions" Tags="&lt;kalman-filter&gt;&lt;navigation&gt;&lt;sensor-fusion&gt;&lt;uav&gt;" AnswerCount="0" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15772" PostTypeId="2" ParentId="15198" CreationDate="2018-05-29T06:36:41.450" Score="1" Body="&lt;p&gt;I would suggest to have a look to  &lt;a href=&quot;http://www.ros.org/reps/rep-0003.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;ros wiki on target platfrom&lt;/a&gt; for each ROS distro, which was linked too in the page you cited. In your case it seems that you have a choice between Lunar and Morenia. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then it is up to you to choose between the two based on your requirements on stability and maintainability.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that ubuntu 17.04 and 17.10 are not LTS, so that means that they wont' have long time support from the community and your are more likely to have to update them to a newer release in some near future to get proper support. This is usually breaking parts of your application and time consuming. That's the reason why people developing complex robotics solutions tend to stick to LTS as much as possible, so that they can do distro update every 2 years if they want the new features or keep their systems for 5 year with support.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastEditorUserId="18235" LastEditDate="2018-06-11T13:45:59.770" LastActivityDate="2018-06-11T13:45:59.770" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15773" PostTypeId="1" CreationDate="2018-05-29T11:07:49.203" Score="1" ViewCount="405" Body="&lt;p&gt;I have a picture on my C# software and the corresponding object in real world on 2d plane of motorized XY axis table. What I want is when I select a pixel on my picture, the motorized table should be moving to the exact same point of the real world object.&#xA;The real world object and its picture may have distortion and rotation differences and the picture on the software is not perfect too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;I use 4 points on each to map all the points in between, example:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Normal picture (x,y): [250, 25] , [250, 287] , [399, 287] , [400, 28] (in pixels)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Table coordinates (x,y): [0, 0] , [2098, 29538] , [19127, 28164] , [17097, -1200] (in microsteps)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;I tried using OpenCV's homography:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I used &lt;em&gt;FindHomography()&lt;/em&gt; to get the H matrix and I transform the picture point choosed using &lt;em&gt;PerspectiveTransform()&lt;/em&gt; which give me the corresponding point in microsteps on the real world to move the motorized XY axis table.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;OpenCvSharp.Mat hCv = OpenCvSharp.Cv2.FindHomography(srcPoints, dstPoints);&#xA;OpenCvSharp.Point2d[] resultCv = OpenCvSharp.Cv2.PerspectiveTransform(targetCv, hCv);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I also manualy calculated the homography matrix using this anwser : &lt;a href=&quot;https://math.stackexchange.com/a/2619023&quot;&gt;https://math.stackexchange.com/a/2619023&lt;/a&gt;&#xA;But I both cases I always get an error when transforming one of the four reference point like for [250, 25] the corresponding point should be [0, 0] but instead I get something like [-25, 245].&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Question :&lt;/strong&gt; I there a different way to link pictures coordinates to real world coordinates accuratly ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit, more explanations:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To get my 8 points I select four points of the picture and then in real world I move my table to the four corresponding points manually. Let say I took a picture of my smartphone. I will get my points on the four edges of the phone. Then if I choose the X, Y pixel position corresponding to the front camera of my phone, my motorized table should move to get a landmark above the front camera of my real phone.&lt;/p&gt;&#xA;" OwnerUserId="20485" LastEditorUserId="20485" LastEditDate="2018-05-29T13:00:38.513" LastActivityDate="2021-04-13T22:47:52.800" Title="Pictures coordinates to robot coordinates" Tags="&lt;control&gt;&lt;computer-vision&gt;&lt;opencv&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15775" PostTypeId="2" ParentId="15773" CreationDate="2018-05-29T11:49:18.940" Score="0" Body="&lt;p&gt;First note that for px =250 (picture x) you get two different table values tx=0 and tx=2098, then for a difference of 1 unit in px you get a difference of around 2000 in tx (table x). From that it seems that your measurement is not super reliable. I would suggest you to center the table reading on the center of the equivalent pixels.&#xA;For py=287 you get two values separated by approx. 1500 units on the table. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you know that the mapping is linear you should just find the coefficients such that $px = \alpha ~tx$  and $py = \beta ~ty$. &#xA;To do so, consider $n_{px}$ the number of pixel along x-direction and $n_{tx}$ the number of motor counts from the center of the first pixel to the center of the last one. Then $\alpha = (n_{px} -1 ) / n_{tx}$. Doing that on the full length of the table should give you better accuracy than doing it for two adjacent pixels. Then you just need to determine the offset between the two set of coordinate (i.e. put one set at [0,0] an see the value of the other).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At that point you have everything to construct the affine relation between your set of coordinates. You might want to watch carefully your sign and offset based on what you define as origins on both the table and picture (if both are the same corner it is easier).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want you can write this affine relation in matrix form.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\begin{bmatrix} px \\ py \end{bmatrix} = \begin{bmatrix} \alpha  &amp;amp; 0 \\ 0 &amp;amp; \beta \end{bmatrix} \begin{bmatrix} tx \\ ty \end{bmatrix} + offset $&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2018-05-29T11:49:18.940" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15777" PostTypeId="1" AcceptedAnswerId="15778" CreationDate="2018-05-29T14:44:31.643" Score="0" ViewCount="63" Body="&lt;p&gt;I have an old powered wheelchair motor from a Hoveround.  I have removed the gearbox and I would like to attach a lawnmower blade directly to the shaft.&lt;/p&gt;&#xA;&lt;p&gt;As you can see from the photo, it has 7 helical splines.  Am I correct in assuming that I need a helical splined hub to mesh with it, which would either have a threaded shaft on the other side to hold the mower blade, or a method by which a threaded shaft can be connected?&lt;/p&gt;&#xA;&lt;p&gt;If that's not the name of the part I need, what would it be?  I've looked at many stores (McMaster, Servo City, etc) but can't seem to find something like this, which makes me think I am calling it the wrong thing.&lt;/p&gt;&#xA;&lt;p&gt;FYI, the motor specs are:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Brand: Shihlin&lt;/li&gt;&#xA;&lt;li&gt;Type: A9Y1X02872&lt;/li&gt;&#xA;&lt;li&gt;Part #: M19004442&lt;/li&gt;&#xA;&lt;li&gt;24V DC&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Thanks for any help.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ab5Xi.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ab5Xi.jpg&quot; alt=&quot;Helical splined rod&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1&gt;ServoCity&lt;/h1&gt;&#xA;" OwnerUserId="17814" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2018-05-29T15:07:00.487" Title="What part do I need to bypass the gearbox of a hoveround motor? Helical splined hub?" Tags="&lt;motor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15778" PostTypeId="2" ParentId="15777" CreationDate="2018-05-29T15:07:00.487" Score="0" Body="&lt;p&gt;That looks like a helical pinion to me, rather than a splined shaft.  It should mesh with a helical gear in the gearbox.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So either you mesh it with a suitable gear (I can't tell enough from a photo to specify what, but the corresponding gearbox will obviously contain one), or hard-turn it down in a lathe and key it to take something else.&lt;/p&gt;&#xA;" OwnerUserId="1321" LastActivityDate="2018-05-29T15:07:00.487" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15780" PostTypeId="1" AcceptedAnswerId="15785" CreationDate="2018-05-29T20:13:28.773" Score="0" ViewCount="67" Body="&lt;p&gt;If two or more quadcopters are aligned, would the effect of drag due to the lead quadcopter's slipstream lead to measurable energy savings? And if so, how would one determine the optimal distance between the quadcopters?&lt;/p&gt;&#xA;" OwnerUserId="20489" LastActivityDate="2018-05-30T15:30:51.850" Title="Can quadcopters save energy by flying in formation?" Tags="&lt;quadcopter&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15781" PostTypeId="1" CreationDate="2018-05-30T07:18:47.453" Score="0" ViewCount="2013" Body="&lt;p&gt;I'm getting data From an IMU and a Magnetometer synchronously, my roll and pitch drifts are corrected with accelerometer inside IMU and now I have the &lt;code&gt;DCM&lt;/code&gt; matrix during my sensor reading i also have the true heading from Magnetometer  as a simple &lt;code&gt;H&lt;/code&gt; degrees from north. what is the most straightforward way of correcting the my &lt;code&gt;DCM&lt;/code&gt; with this &lt;code&gt;H&lt;/code&gt; angle, i don't want to go through kalman filtering, just i want the  formulation to simply compensate my yaw angles from this &lt;code&gt;H&lt;/code&gt; value.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based on the answered and comment i think my question was not clear so i try to clarify it more&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;more detail:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have an IMU witch has an accelerometer and gyroscope that internally compensates for pitch and roll drift; this IMU not only provides me compensated pitch and roll angles as well as uncompensated yaw angle but also provides all raw data of accelerometer and gyroscope. by roll, pitch and yaw angle i mean three Euler angles as φ, θ, ψ (witch are result of 3-&gt;2-&gt;1 Rotation).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;now i have added a magnetometer sensor to my system. i read raw data from magnetometer and using &lt;code&gt;atan2&lt;/code&gt; i convert it to heading. now i want to use  a simple complementary filter to compensate for yaw drift and i ask here for it's formulation. my main problem arises from the fact that the ψ (yaw) angle from the IMU is not directly only related to Heading. i mean for instance i cannot replace the yaw angle (ψ) with the heading value! so i want to know witch witch formulation i can simply relate this heading to yaw angle.&lt;/p&gt;&#xA;" OwnerUserId="18367" LastEditorUserId="18367" LastEditDate="2018-06-13T08:01:30.130" LastActivityDate="2018-06-13T08:01:30.130" Title="Gyro Yaw Drift Compensation With The Aid of Magnetomer" Tags="&lt;sensors&gt;&lt;sensor-fusion&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15782" PostTypeId="1" CreationDate="2018-05-30T07:41:28.420" Score="1" ViewCount="765" Body="&lt;p&gt;I am using a UR3 Robot with OnRobot RG2 Gripper. I have successfully connected the robot to my computer via Ethernet and i am able to send move commands and receive data successfully with Python. But the commands for RG2 Gripper provided in the manual are not working. I can send commands to the gripper via teaching pendant (by command RG2) but not through my computer via Ethernet. Has anyone had a solution to this problem ? Thanks in advance.&lt;/p&gt;&#xA;" OwnerUserId="20488" LastActivityDate="2019-01-04T00:02:00.410" Title="OnRobot RG2 Gripper on UR3 with TCP communication" Tags="&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15783" PostTypeId="1" CreationDate="2018-05-30T09:32:34.513" Score="2" ViewCount="85" Body="&lt;p&gt;I have a ROS-based robot that runs on an Odroid with a 3d Camera (Openni-based) and would like to use Kinfu (or something similar) on it. I'm not sure if the Mali-GPU is fast enough, but so far I didn't find an implementation that told specifically that it was used on an Odroid.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does someone know such an implementation?&lt;/p&gt;&#xA;" OwnerUserId="23196" LastEditorUserId="15160" LastEditDate="2021-04-26T13:21:19.693" LastActivityDate="2021-04-26T13:21:19.693" Title="Is there a Kinfu version that runs with ROS on an Odroid?" Tags="&lt;odroid&gt;" AnswerCount="0" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15784" PostTypeId="2" ParentId="15781" CreationDate="2018-05-30T13:01:12.053" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;my roll and pitch drifts are corrected with accelerometer inside IMU&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You mean they're being correct by the IMU, or you're correcting the readings yourself using the accelerometer from the IMU? &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;i want the formulation to simply compensate my yaw angles from this H value.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If you're correcting the other angles yourself, just use the same method to correct headings. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;i don't want to go through kalman filtering&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Well, you're going to have to do &lt;em&gt;something&lt;/em&gt; if you want better results. Madgwick filter would be the best, the Kalman, then you could even try complementary filtering. The Madgwick filter is &lt;a href=&quot;http://x-io.co.uk/open-source-imu-and-ahrs-algorithms/&quot; rel=&quot;nofollow noreferrer&quot;&gt;freely available&lt;/a&gt; (bottom of page) - &lt;em&gt;highly recommended.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-05-30T13:01:12.053" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15785" PostTypeId="2" ParentId="15780" CreationDate="2018-05-30T15:30:51.850" Score="1" Body="&lt;p&gt;My intuition would be no, as the rotor wake will be choppy and downward flowing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unlike slipstreaming in ground vehicles which reduces body drag, bird and some aircraft formations rely on the effect of &lt;a href=&quot;https://en.wikipedia.org/wiki/Drafting_(aerodynamics)#Vortex_surfing&quot; rel=&quot;nofollow noreferrer&quot;&gt;wing-tip vortices to gain lift&lt;/a&gt;, hence reducing lift induced drag. Not having wings&amp;dagger;, 'copters lack wing-tip vortices, so would not experience this effect, but instead the flow from the rotors will probably cause a following 'copter to lose lift.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sub&gt;&amp;dagger;there probably will be vortices shed from the rotors if not ducted, but they will process with the rotor tips so not be in a stable relative position that can be flown through.&lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="1321" LastActivityDate="2018-05-30T15:30:51.850" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15786" PostTypeId="2" ParentId="15766" CreationDate="2018-05-30T16:36:30.623" Score="0" Body="&lt;p&gt;One thing you could experiment with is a load cell. Mount the servo so it can rotate about its axle but is stopped from rotating by the force on the load cell, so that the torque the servo is transferring to its axle will be proportional to the force on the cell. Calibrate with a known torque, or calibrate the cell before fitting with known weights and measure the distance. A cheap kitchen scale has a cell that will give 10kg by 1g increments, so it should be mountable to read your range of torques.&lt;/p&gt;&#xA;" OwnerUserId="1321" LastActivityDate="2018-05-30T16:36:30.623" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15787" PostTypeId="2" ParentId="15781" CreationDate="2018-05-30T23:02:14.807" Score="0" Body="&lt;p&gt;A magnetometer in my experience is not a reliable source of heading. They are effected by local magnetic fields caused by large metal objects and electrical currents. Using it as a simple offset will probably make your heading worse. You will definately need some type of filter.&lt;/p&gt;&#xA;" OwnerUserId="1819" LastActivityDate="2018-05-30T23:02:14.807" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15789" PostTypeId="2" ParentId="15706" CreationDate="2018-05-31T08:15:44.950" Score="0" Body="&lt;p&gt;You must drive servos at 25hz or you'll fry them. I ran mine at 300hz until they melted internally.&lt;/p&gt;&#xA;" OwnerUserId="1819" LastActivityDate="2018-05-31T08:15:44.950" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15790" PostTypeId="2" ParentId="15708" CreationDate="2018-05-31T12:09:15.097" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I need the GPIO pins that are not set to HIGH to not become a ground connection.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No you don't. There always needs to be something between your motor and the GPIO, as the GPIO cannot handle motor currents, and in your case either you want a unipolar motor driver or your L293 and a different stepper motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you do use your L293, you don't need to supply a high impedance to it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you only drive one coil at a time, you should be able to ignore the common connection. Alternatively, you might be able to connect common to one of the four half bridges, and two of the other four coils to the two opposite sides (I don't currently have time to work out whether this would give you all the states required but I think it will as L293 allows setting each half bridge to be the same or different to each other).&lt;/p&gt;&#xA;" OwnerUserId="1321" LastActivityDate="2018-05-31T12:09:15.097" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15791" PostTypeId="1" CreationDate="2018-05-31T13:33:22.717" Score="0" ViewCount="59" Body="&lt;p&gt;With the Create 2 iRobot if it is already moving backwards (&lt;strong&gt;with its bump sensors in the front of it&lt;/strong&gt;) how would I code it to sense that it is hitting something on its back side with only using the create's sensors?&lt;/p&gt;&#xA;" OwnerUserId="20496" LastActivityDate="2018-09-29T04:00:18.543" Title="iRobot Create 2 Question" Tags="&lt;irobot-create&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15792" PostTypeId="1" AcceptedAnswerId="15793" CreationDate="2018-05-31T15:45:54.847" Score="1" ViewCount="141" Body="&lt;p&gt;I have the following set of coordinate frames (translations are not important in this case):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;$w$, the reference frame.&lt;/li&gt;&#xA;&lt;li&gt;$l$, a &quot;left&quot; reference frame. Rotated $-20\deg$ around $Y_l$ (axes $Y$ of frame $l$), rotated $-12\deg$ around $X_l$, and translated along $-X_w$.&lt;/li&gt;&#xA;&lt;li&gt;$r$, a &quot;right&quot; reference frame, similar to left. Rotated $20\deg$ around $Y_r$, rotated $-12\deg$ around $X_r$, and translated along $X_w$.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I hope the diagram makes it more clear:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/UfDSz.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/UfDSz.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The rotation matrices that describe the orientations are ($R_{w,l}$ represents rotation from $w$ to $l$, values are rounded):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$R_{w,l} = \left[ \begin{array}{{c}}&#xA;0.94&amp;amp;0&amp;amp;-0.34\\&#xA;0.07&amp;amp;0.98&amp;amp;0.2\\&#xA;0.33&amp;amp;-0.21&amp;amp;0.92&#xA;\end{array}\right]$, $R_{w,r} = \left[ \begin{array}{{c}}&#xA;0.94&amp;amp;0&amp;amp;0.34\\&#xA;-0.07&amp;amp;0.98&amp;amp;0.2\\&#xA;-0.33&amp;amp;-0.21&amp;amp;0.92&#xA;\end{array}\right]$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem comes when I want to know the relative rotation between $l$ and $r$: $R_{l,r}$. If I am not mistaken, this rotation can be computed from the ones I have:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$R_{l,r} = R_{l,w}R_{w,r} = R^T_{w,l}R_{w,r}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I do this, I get the following result:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$R_{l,r} = \left[ \begin{array}{{c}}&#xA;0.77&amp;amp;0&amp;amp;0.64\\&#xA;0&amp;amp;1&amp;amp;0\\&#xA;-0.64&amp;amp;0&amp;amp;0.77&#xA;\end{array}\right]$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which &lt;a href=&quot;https://www.andre-gaschler.com/rotationconverter/&quot; rel=&quot;nofollow noreferrer&quot;&gt;in Euler angles&lt;/a&gt; to just a rotation of $40\deg$ around $Y$ (not sure which $Y$!). However, this does not make sense to me, because the only $Y$ I can use for this to make sense is $Y_w$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What am I missing?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Expected result&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried directly with the Euler angles. To convert from $l$ to $r$, one should do (starting in $l$):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$R_x(12\deg) \rightarrow R_y(20\deg) \rightarrow R_y(20\deg) \rightarrow R_x(-12\deg)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which are computed as matrices as follows:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$R_{l,r} = R_x(12\deg)R_y(40\deg)R_x(-12\deg)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And this provides the following result:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$R_{l,r} = \left[ \begin{array}{{c}}&#xA;0.77&amp;amp;-0.13&amp;amp;0.63\\&#xA;0.13&amp;amp;0.99&amp;amp;0.05\\&#xA;-0.63&amp;amp;0.05&amp;amp;0.77&#xA;\end{array}\right]$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which makes way more sense, and actually represents the rotation from $l$ to $r$.&lt;/p&gt;&#xA;" OwnerUserId="11478" LastActivityDate="2018-05-31T19:53:40.953" Title="Not understanting the result of a relative transformation" Tags="&lt;frame&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15793" PostTypeId="2" ParentId="15792" CreationDate="2018-05-31T19:53:40.953" Score="3" Body="&lt;p&gt;Wow, this is a spectacularly detailed question, so thanks for that, welcome to Robotics, and I'm sorry you're having trouble with this. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The trouble that you're having is that you're inverting the wrong matrix! Allow me to explain. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You have two matrices, $R_r$ and $R_{\ell}$. To be more specific, as you have, these are the matrices that convert world coordinates to the right or left frames, respectively. I understand the notation is generally understood to be $R_{w, r}$, etc., but this might be easier if you use an arrow:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;R_{w\: \rightarrow \:r} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, if you put this in an equation, you might see how the notation is a little &quot;backwards,&quot; if you will:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;s_r = \left(R_{w\: \rightarrow \:r}\right) s_w&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To get a point $s$ converted from world coordinates to the right frame, you multiply the world point, $s_w$, by the transform $R_{w\: \rightarrow \:r}$. But maybe you can see how the arrow points in the wrong direction - matrix multiplication happens &lt;em&gt;right to left&lt;/em&gt;! It would be a little clearer still to reverse the arrow:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;R_{r\: \leftarrow \:w} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There! Now consider:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;s_r = \left(R_{r\: \leftarrow \:w}\right) s_w \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hopefully, you see that this is still converting world coordinates to right coordinates. The matrix itself doesn't change (yet), I'm just altering the way I'm displaying it to help illustrate where the problem lies. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, recall that you have a left and right transform, which can now be represented as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;s_{\ell} = \left(R_{\ell \: \leftarrow \:w} \right) s_w \\&#xA;s_r = \left(R_{r \: \leftarrow \:w} \right) s_w \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now you want the full transform from the right frame to the left frame. You can't just apply the transforms together, because now it's obvious that they don't &quot;stack&quot; together:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\left(R_{\ell \: \leftarrow \:w} \right) \left(R_{r \: \leftarrow \:w} \right) \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you did was to invert the transform between world and left frames, but you can see with the new notation that this is the &lt;strong&gt;wrong&lt;/strong&gt; answer:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;R_{w \: \leftarrow \: \ell} = \left(&#xA;R_{\ell \: \leftarrow \: w} \right)^{-1} = \left( R_{\ell \: \leftarrow \: w} \right)^{T}\\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you try the inverted left transform, now you have:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\left(R_{w \: \leftarrow \: \ell} \right) \left(R_{r \: \leftarrow \:w} \right) \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you try instead to invert the &lt;strong&gt;right&lt;/strong&gt; transform, now you have:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;R_{w \: \leftarrow \: r} = \left(&#xA;R_{r \: \leftarrow \: w} \right)^{-1} = \left( R_{r \: \leftarrow \: w} \right)^{T}\\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which gets you:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\left(R_{\ell \: \leftarrow \:w} \right) \left(R_{w \: \leftarrow \: r} \right) \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now you can provide a point in the right frame, convert it to world frame, then convert to the left frame. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;s_{\ell} = \left(R_{\ell \: \leftarrow \:w} \right) \left(R_{w \: \leftarrow \: r} \right) s_r \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Numerically, this gets you the expected answer. Hope this helps! &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-05-31T19:53:40.953" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="15794" PostTypeId="2" ParentId="15791" CreationDate="2018-06-01T02:33:22.703" Score="1" Body="&lt;p&gt;Since there are no sensors on the back, its probably best to only back up a short distance and then make a 180 degree turn.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only other way I can think of is to monitor the left and right motor current (packet 54 &amp;amp; 55) to see if its above the normal level assuming its backed into something and bogging down&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Frank&lt;/p&gt;&#xA;" OwnerUserId="19572" LastActivityDate="2018-06-01T02:33:22.703" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15795" PostTypeId="1" AcceptedAnswerId="15798" CreationDate="2018-06-01T05:10:54.983" Score="0" ViewCount="51" Body="&lt;p&gt;I want to connect &lt;a href=&quot;https://www.jenoptik.com/products/defense-and-security/laser-rangefinders/oem-modules-system-integration/dlem&quot; rel=&quot;nofollow noreferrer&quot;&gt;ir range finder&lt;/a&gt; (&lt;code&gt;dlem 20&lt;/code&gt;) with the system running Linux kernel. It looks like they don't provide any kind of SDK or drivers for their products. So how should I get data from such sensors with UART connectivity?&lt;/p&gt;&#xA;" OwnerDisplayName="user14148" LastEditorUserId="19515" LastEditDate="2020-07-27T18:28:07.317" LastActivityDate="2020-07-27T18:28:07.317" Title="How to access UART or serial sensors?" Tags="&lt;serial&gt;&lt;rangefinder&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15796" PostTypeId="1" AcceptedAnswerId="15801" CreationDate="2018-06-01T05:53:32.550" Score="0" ViewCount="29" Body="&lt;p&gt;Is the method to access all the sensors with RS-232/422, uart and usb sensors can be done in same way? Or by converting rs-232 to usb, uart to usb can they be programmed in same as usb from linux?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example &lt;a href=&quot;https://unix.stackexchange.com/questions/22545/how-to-connect-to-a-serial-port-as-simple-as-using-ssh&quot;&gt;this&lt;/a&gt; link provides way to access such port from linux command line and program. so my question is considering i have another serial device/sensor with same type of connetivity i.e serial would it not be same to access that device in same method as described in above link.&lt;/p&gt;&#xA;" OwnerDisplayName="user14148" LastEditorDisplayName="user14148" LastEditDate="2018-06-01T16:50:48.263" LastActivityDate="2018-06-02T10:56:02.433" Title="RS-232/422, UART, usb sensor access code same?" Tags="&lt;serial&gt;" AnswerCount="1" CommentCount="4" ClosedDate="2018-06-04T14:24:57.703" ContentLicense="CC BY-SA 4.0" />
  <row Id="15798" PostTypeId="2" ParentId="15795" CreationDate="2018-06-01T14:11:18.400" Score="1" Body="&lt;p&gt;So according to the datasheet from the link provided, the Data interface is indeed UART (LVTTL 3.3V). The datasheet also says it has 2 Modes of operation: Single measurement, continuous ranging 1Hz to 25Hz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The datasheet does not go into the details of the application layer (ie. the commands and structure of the data in those commands), let alone the baud rate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After reading the website I would surmise that the application layer information is a bit secretive - being that its primary application is for military use. You would have to contact the company directly for access to that information.&lt;/p&gt;&#xA;" OwnerUserId="14782" LastEditorUserId="14782" LastEditDate="2018-06-05T09:37:34.290" LastActivityDate="2018-06-05T09:37:34.290" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15801" PostTypeId="2" ParentId="15796" CreationDate="2018-06-02T10:56:02.433" Score="0" Body="&lt;p&gt;The RS232 and RS432 should be handled identically since they are both merely physical standards (voltage, cabling, etc) and appear to the computer identically. They would even have the same device under Linux.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The USB is just slightly different when opening it up because it has a different device associated with it. Once you've found that for your system, it should be the same.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They all should act like serial connections.&lt;/p&gt;&#xA;" OwnerUserId="19275" LastActivityDate="2018-06-02T10:56:02.433" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15802" PostTypeId="1" CreationDate="2018-06-02T12:48:12.550" Score="1" ViewCount="670" Body="&lt;p&gt;I am applying Extended Kalman Filter for a mobile robot with IMU and odometry data. I am running simulation currently. However, I don't have suitable data for odo/IMU measurements to use. Where can I find those information?&lt;/p&gt;&#xA;" OwnerUserId="20510" LastEditorUserId="2289" LastEditDate="2018-06-07T10:02:09.300" LastActivityDate="2021-04-26T15:07:50.800" Title="EKF implementation on odometry/IMU" Tags="&lt;imu&gt;&lt;ekf&gt;&lt;simulation&gt;&lt;odometry&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15803" PostTypeId="1" CreationDate="2018-06-02T17:20:15.147" Score="3" ViewCount="139" Body="&lt;p&gt;I'm trying to obtain the dynamic model of a 3D robot (academic problem), I have obtained the D-H table, the transformation matrix for each pair of links and the total transformation matrix. Now I'm struggling with computing the total Kinetic energy (for using it in the Lagrangian approach). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In some texts, only the linear velocity is used in computing the kinetic energy, even if there are revolute links, that is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$K=\frac{1}{2}m~v^2$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But in some others, both the linear and the angular velocities are considered :&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$K=\frac{1}{2}m~v^2 + \frac{1}{2} I~\omega^2$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm a little bit confused with this, when and when not to use the angular contribution to the Kinetic energy?&lt;/p&gt;&#xA;" OwnerUserId="20512" LastEditorUserId="18235" LastEditDate="2018-06-04T14:01:34.193" LastActivityDate="2018-06-07T13:04:30.413" Title="When and when not to use the Inertia tensor in Kinetic energy computing?" Tags="&lt;dynamics&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15805" PostTypeId="2" ParentId="15803" CreationDate="2018-06-04T09:50:57.217" Score="1" Body="&lt;p&gt;It all depends on your robot design, the joint category (linear/revolute) can have an impact but what you need to consider is the final motion of the parts for which you compute the Kinetic energy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The total Kinetic energy is the sum of all links and motors individual Kinetic energy. This is used because it makes the computation way easier as usually one consider a center of mass (CoM) for each motor and link.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you should consider both linear and angular components of Kinetic energies. Sometimes, based on your robot design, there are parts with no angular or linear velocity, which results in no contribution to the total Kinetic energy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Think for example about gantry crane which only have linear motion.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastEditorUserId="18235" LastEditDate="2018-06-04T09:58:10.100" LastActivityDate="2018-06-04T09:58:10.100" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15809" PostTypeId="2" ParentId="15298" CreationDate="2018-06-06T10:13:21.400" Score="2" Body="&lt;p&gt;Yes, it's possible to tweak the ponetic proncunciation, see &lt;a href=&quot;http://doc.aldebaran.com/2-5/naoqi/audio/altexttospeech-tuto.html?highlight=lhp#inserting-phonetic-text&quot; rel=&quot;nofollow noreferrer&quot;&gt;the documentation here&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;tts.setLanguage(&quot;English&quot;)&#xA;tts.say(&quot;\\toi=lhp\\‘zi.R+o&amp;amp;U \\toi=orth\\&quot;)&#xA;# Same as&#xA;tts.say(&quot;zero&quot;)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="13938" LastActivityDate="2018-06-06T10:13:21.400" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15812" PostTypeId="1" AcceptedAnswerId="15815" CreationDate="2018-06-07T12:04:16.847" Score="1" ViewCount="220" Body="&lt;p&gt;I have a data set name Robot_odometery which consist of 3 field namely, Time(s),Forward velocity(m/s) and angular velocity(rad/s). I taken this dataset from &lt;a href=&quot;http://asrl.utias.utoronto.ca/datasets/mrclam/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://asrl.utias.utoronto.ca/datasets/mrclam/index.html&lt;/a&gt; website. I want to calculate x,y,theta coordinate using this odometer dataset. As per the conversion from rectangular co-ordinate to polar ones I came to know two formula to calculate x and y. &lt;code&gt;x=rcos(theta)&lt;/code&gt; and &lt;code&gt;y=rsin(theta)&lt;/code&gt;. I want to know that is that right approach to find out the Robot  coordinate (x,y). or there is any thing else that can be used to find Robot coordinate from odometer data.  &lt;/p&gt;&#xA;" OwnerUserId="19422" LastActivityDate="2018-06-07T14:30:10.083" Title="Find out Robot Coordinate using odometer data" Tags="&lt;mobile-robot&gt;&lt;inverse-kinematics&gt;&lt;odometry&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15813" PostTypeId="2" ParentId="15782" CreationDate="2018-06-07T12:29:48.040" Score="2" Body="&lt;p&gt;I had the discussion with Robotiq about the same thing for their grippers when I started working with them, and as I understand it, the UR Caps commands are not installed as commands in the robot, but they are instead defined in each new program. If you read the .script files for a program created with a UR Caps command, the commands used will be defined before the robot program itself.&#xA;I have yet to try it myself, but possibly you could define these functions yourself first and then send it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, for Robotiq there are more options available. For OnRobot I don't know.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Addition:&#xA;I did some tests on the VM simulator, I just started a .script file from a program I previously did. Works like a charm. So for open and close scripts of the OnRobot, I guess it is fine.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    import socket&#xA;    import time&#xA;    HOST = &quot;10.0.2.15&quot;    # The remote host&#xA;    PORT = 30002              # The same port as used by the server&#xA;    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)&#xA;    s.connect((HOST, PORT))&#xA;    print(&quot;Starting Program&quot;)&#xA;    f=open(&quot;/home/ur/Desktop/TestScript.script&quot;, &quot;r&quot;)&#xA;    s.send (f.read() + &quot;/n&quot;)&#xA;    data = s.recv(1024)&#xA;    s.close()&#xA;    print (&quot;Closed connection and received data&quot;)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Also got interested in how to send a value without having to open the script, like a width. I'm quite new to Python, but an example, adding all this instead of the f.open above:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    width = 11 # 11 just and example, user input or something works as well..&#xA;    with open(&quot;/home/ur/Desktop/TestScript.script&quot;, &quot;r&quot;) as in_file:&#xA;        buf = in_file.readlines()&#xA;    i=0&#xA;    with open(&quot;/home/ur/Desktop/TestScriptOut.script&quot;, &quot;w+&quot;) as out_file:&#xA;        for line in buf:&#xA;            if i == 0: # Notice that this will add var_1 in the second line&#xA;                line = line + &quot;  global var_1 = %s\n&quot; % width&#xA;            out_file.write(line)&#xA;            i=i+1&#xA;    out_file.close()&#xA;    f = open(&quot;/home/ur/Desktop/TestScriptOut.script&quot;, &quot;r&quot;)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="20531" LastEditorUserId="20531" LastEditDate="2018-06-07T21:39:02.137" LastActivityDate="2018-06-07T21:39:02.137" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15814" PostTypeId="2" ParentId="15803" CreationDate="2018-06-07T13:04:30.413" Score="1" Body="&lt;p&gt;In general you can represent a motion of a rigid body by two parts: rotation about some axis and linear motion of that axis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In robotic arm previous link movement affects the following ones by moving their rotation axes. It means that you have to use both parts of KE in your formula.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can compute linear and angular velocities that are used in formula  by using a Jacobian:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$&#xA;\dot x = J^{-1}\dot q&#xA;$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can compute Jacobian geometrically for each COM frame and easily find angular and linear velocities of link's COM. Also note that $J$ is not always invertible so take a look at &lt;em&gt;Damped least-squares inverse&lt;/em&gt; which is a standard way of approximating matrix inverse in case of it being non-square or singular.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Quite a good example of computing KE you can find &lt;a href=&quot;https://studywolf.wordpress.com/2013/09/07/robot-control-3-accounting-for-mass-and-gravity/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="15392" LastActivityDate="2018-06-07T13:04:30.413" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15815" PostTypeId="2" ParentId="15812" CreationDate="2018-06-07T14:30:10.083" Score="0" Body="&lt;p&gt;Hence the orientation and position are the integrals of the angular ($\dot{\theta}$) and forward velocity ($v$) (in robot frame) respectively. So you have everything you need to calculate your pose. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, the problem is that you misinterpret the tree states you have. $x$,$y$ represent the x and y position on a euclidean plane. $\theta$ is the heading of the robot and not the polar angle corresponding to polar coordinates. I.e. it is the angle the robot is turned around the z-axis at the position (x,y).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore, if you integrate the angular velocity over time you get the orientation - i.e. theta - and with the heading you can integrate the forward velocity to determine the coordinates x and y. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Something like that:&#xA;$$&#xA;\theta_k = \dot{\theta}_{k-1} \cdot \Delta t + \theta_{k-1} \\&#xA;x_k = v_k \cdot \Delta t \cdot cos(\theta_k) + x_{k-1} \\&#xA;y_k = v_k \cdot \Delta t \cdot sin(\theta_k) + y_{k-1} &#xA;$$&lt;/p&gt;&#xA;" OwnerUserId="19722" LastActivityDate="2018-06-07T14:30:10.083" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="15816" PostTypeId="1" CreationDate="2018-06-07T14:49:50.603" Score="-1" ViewCount="36" Body="&lt;p&gt;I am building a robot. I am going to use ONBO 6S 22000 mAh 25C to power all my controller boards and motors. It needs to power the following items: &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;1 motor driver (24&amp;nbsp;V, 6&amp;nbsp;A);&lt;/li&gt;&#xA;&lt;li&gt;Microcontroller board (5&amp;nbsp;V, 6&amp;nbsp;A); &lt;/li&gt;&#xA;&lt;li&gt;Vacuum Motor (12&amp;nbsp;V, 20&amp;nbsp;A).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Is there any power distribution board which can output different voltages from one battery source? &lt;/p&gt;&#xA;" OwnerUserId="20431" LastEditorUserId="9176" LastEditDate="2018-06-15T11:59:45.753" LastActivityDate="2018-06-15T11:59:45.753" Title="How to connect different outputs from one LiPo battery?" Tags="&lt;electronics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15817" PostTypeId="1" AcceptedAnswerId="15824" CreationDate="2018-06-07T18:35:22.333" Score="2" ViewCount="208" Body="&lt;p&gt;I am doing some project on Slam. I have a data set of a moving Robot which can give me the value of forward velocity(m/s) and angular velocity(rad/s) and time(s). Now if this data are provided I can find out the x,y,theta value of a Robot which I can plot and find the Robot path.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I am working on Graph Slam and little bit confused in this aspect. I know Graph slam also gives us path and map, but I can already determine the path using forward velocity and angular velocity then what is the need for Graph Slam? &lt;/p&gt;&#xA;" OwnerUserId="19422" LastEditorUserId="20709" LastEditDate="2018-07-25T20:09:03.273" LastActivityDate="2018-07-25T20:09:03.273" Title="Why use GraphSLAM?" Tags="&lt;mobile-robot&gt;&lt;slam&gt;&lt;localization&gt;&lt;odometry&gt;&lt;mapping&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15818" PostTypeId="2" ParentId="15802" CreationDate="2018-06-07T19:34:20.260" Score="0" Body="&lt;p&gt;Try this dataset, &lt;a href=&quot;http://asrl.utias.utoronto.ca/datasets/mrclam/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Localization and Mapping Dataset&lt;/a&gt;. It will be helpful for your problem.&lt;/p&gt;&#xA;" OwnerUserId="19422" LastEditorUserId="9176" LastEditDate="2018-07-11T07:12:33.483" LastActivityDate="2018-07-11T07:12:33.483" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15819" PostTypeId="2" ParentId="14167" CreationDate="2018-06-08T07:50:53.240" Score="1" Body="&lt;p&gt;In my case the reason for the wrong result was high amount of noise in extrinsic calibration of the visual sensor. Improving the extrinsic  results by increasing image resolution and using better intrinsic parameters decreased the amount of error and noise in my final X matrix.&lt;/p&gt;&#xA;" OwnerUserId="18063" LastActivityDate="2018-06-08T07:50:53.240" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15820" PostTypeId="2" ParentId="14932" CreationDate="2018-06-08T08:06:29.610" Score="0" Body="&lt;p&gt;As already stated, you can not do what you are asking.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The task you need to do is score each particle's fit to the map given the incoming lidar scan.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The approach i used is: for each particle do a simulated scan against the known map and compare it to the incoming lidar scan. This comparison is used to rank each particle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I initially achieved this with ray tracing and comparing the length of the trace to the scan length.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is much more efficient to build a map for the particle filter where each occupied point is added as a gausian distribution  with some arbitary (not to big, not to small) radius. so rather than ray tracing you can just calculate where each lidar scan line  would end for each particle and take the score directly from the map for each line. &lt;/p&gt;&#xA;" OwnerUserId="1819" LastActivityDate="2018-06-08T08:06:29.610" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15823" PostTypeId="2" ParentId="15781" CreationDate="2018-06-10T12:25:14.937" Score="0" Body="&lt;p&gt;First of all: Filtering would be the approach here. However, there are more complected and less complicated - in the sense of effort - ways to achieve it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I assume you get the orientation (quaternion or euler angles does not matter at this point) form the IMU. When you have that is really complicated to integrate the magnetic measurements. It would need a sophisticated dynamics model of your system. I.e. a lot of effort do develop and verify. But once you have that, a kalman (or others probabilistic approaches like particle filter) would lead to very good results.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Furthermore, I assume you can also get the raw measurements of the IMU, i.e. the angular velocity, linear acceleration and magnetic field. Also here a proper dynamics model would lead to a kalman or similar in order to achieve good performance. In my opinion this would lead to the best result but needs a lot of effort to get there (knowledge of the system and sensor noise).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A more straight forward way is to use a Madgwick or Complementary filter as they are implemented in a nice library (&lt;a href=&quot;http://wiki.ros.org/imu_tools&quot; rel=&quot;nofollow noreferrer&quot;&gt;check it out&lt;/a&gt;). They use the raw data and you can also use them with or without the magnetic field measurements. This library is very straight forward to implement and easy to use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general for magnetic field measurements it is advantageous to have some kind of calibration. This should be provided by the manufacturer. The calibration compensates for static magnetic substances in the environment of the sensor. When properly calibrated, using the magnetic field measurement - together with the angular velocity and linear acceleration - will clearly improve the orientation estimation - especially the yaw drift. Moreover, magnetic field measurement indoors mostly performs not as good as outdoors.&lt;/p&gt;&#xA;" OwnerUserId="19722" LastActivityDate="2018-06-10T12:25:14.937" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15824" PostTypeId="2" ParentId="15817" CreationDate="2018-06-10T21:00:11.353" Score="0" Body="&lt;p&gt;SLAM (Graph or EKF) not only provides you a map of the environment (assuming you have some sort of an exteroceptive sensor like a camera or a rangefinder), but it also capable of performing much more accurate localization by improving your pose estimates. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you simply fuse your onboard sensor data to obtain an $(X, Y, \theta)$ estimate of your poses, it is extremely likely that this estimate will drift from the actual ground truth over time. Observing additional information (landmarks) and performing sensor fusion will help in reducing this drift. At the same time, while using SLAM, you can keep track of if/when you're observing the same landmarks you've seen before and use that information to adjust your pose estimates, commonly known as loop closure.&lt;/p&gt;&#xA;" OwnerUserId="10310" LastActivityDate="2018-06-10T21:00:11.353" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15826" PostTypeId="1" AcceptedAnswerId="15833" CreationDate="2018-06-10T23:47:26.523" Score="0" ViewCount="39" Body="&lt;p&gt;Let's say we have two equations for a pose $\textbf{R},\textbf{t}$ optimization problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For ICP constraint&#xA;$$\textbf{e}{_{I}}=\textbf{n}^\top(\textbf{p}_d-(\textbf{R}\textbf{p}_s+\textbf{t}))$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For epipolar constraint&#xA;$$\textbf{e}{_{c}}=\textbf{u}_s^\top[\textbf{t}]_{\times}\textbf{R}\textbf{u}_d$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, for the optimization we define an objective function as follows and find $\textbf{R},\textbf{t}$ that minimize it. &#xA;$$\mathbf{J}=\alpha\frac{1}{2}\sum_{v=1}^{V}{\textbf{e}{_{I_v}}^\top\boldsymbol{\Sigma}_{I_v}^{-1}\textbf{e}{_{I_v}}}+\beta{\frac{1}{2}}\sum_{j=1}^{J}{\textbf{e}{_c{_j}}^\top\boldsymbol{\Sigma}_{c_j}^{-1}\textbf{e}{_{c_j}}}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is that what is the common practics to decide the weights $\alpha,\beta$. The scales of each constraint are too different. If we do not set it properly, the one with very small scale will be ignored. I have been finding these values manually, but I believe that there are better ways.&lt;/p&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2018-06-11T15:47:54.533" Title="Combining multiple constraints in optimization" Tags="&lt;computer-vision&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15827" PostTypeId="1" CreationDate="2018-06-11T07:32:50.100" Score="0" ViewCount="182" Body="&lt;p&gt;I bought two servos (&lt;a href=&quot;http://hitecrcd.com/products/servos/sport-servos/digital-sport-servos/hs-5685mh-high-torque-hv-metal-gear-servo-/product&quot; rel=&quot;nofollow noreferrer&quot;&gt;HS-5685MH&lt;/a&gt;) for a pan-tilt-unit and somehow didn't see that they require 6.0 to 7.4 Volts which I don't have in my current setup. I have a 5V source that could provide the power, but I'm not sure what will happen to the motors if I use them with lower voltage. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Will they just be a bit slower or less powerful or could would I damage them with the lower voltage?&lt;/p&gt;&#xA;" OwnerUserId="23196" LastActivityDate="2018-10-12T10:00:41.200" Title="Can I run a servo with lower voltage?" Tags="&lt;servomotor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15828" PostTypeId="2" ParentId="15273" CreationDate="2018-06-11T07:47:19.743" Score="0" Body="&lt;p&gt;There were two issues that I resolved...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Firstly, I re-soldered the wires to the NAZE. I wanted to make sure that the connections were correct and it seemed they might be off.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Secondly, I switched the receiver to the iA6B. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The receiver is not heating up anymore.  &lt;/p&gt;&#xA;" OwnerUserId="19752" LastActivityDate="2018-06-11T07:47:19.743" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15829" PostTypeId="1" AcceptedAnswerId="15838" CreationDate="2018-06-11T07:59:17.067" Score="0" ViewCount="1067" Body="&lt;p&gt;I am using FlySky i6 Transmitter and a FS-iA6B receiver. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have it set up using PPM and BetaFlight recognizes the motors in the Receiver section. All the values adjust according to the toggles and joysticks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For some reason, though, &lt;strong&gt;the motors won't turn&lt;/strong&gt;. I am not sure if I am missing a setting or a vital step, but this is vital for the quadcopter to fly. :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any thoughts? Suggestions?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Side Note:&lt;/strong&gt; I have set the PPM value on the transmitter to on.&lt;/p&gt;&#xA;" OwnerUserId="19752" LastActivityDate="2019-12-10T01:48:25.807" Title="BetaFlight sees motors working, but motors not spinning" Tags="&lt;quadcopter&gt;&lt;motor&gt;&lt;flight-controller&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15830" PostTypeId="2" ParentId="14814" CreationDate="2018-06-11T11:00:01.037" Score="1" Body="&lt;p&gt;There might be a number of problems:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The power might not be enough. Perhaps the batteries are drained.&lt;/li&gt;&#xA;&lt;li&gt;The servos might not be strong enough.&lt;/li&gt;&#xA;&lt;li&gt;The servos might not be in positions to give them enough leverage.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;EDIT: Upon rereading your question, it seems obvious that your problem is due to a lack of power. You cannot supply enough power from 4 AA cells in series to drive more than a couple of servo motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would use a LiPo battery instead. This will supply a &lt;strong&gt;lot&lt;/strong&gt; of current. Just be careful not to drain the battery too much, or you'll have to replace it.&lt;/p&gt;&#xA;" OwnerUserId="19275" LastEditorUserId="19275" LastEditDate="2018-07-03T11:10:59.640" LastActivityDate="2018-07-03T11:10:59.640" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15831" PostTypeId="2" ParentId="15816" CreationDate="2018-06-11T14:12:12.697" Score="0" Body="&lt;p&gt;To step down voltages you can use one of these two commonly available electronic components:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Voltage regulator IC : These ICs regulate fixed voltages at their output terminals given the fact that the input terminals have voltages in a fixed range (higher than output voltage). For e.g. IC 7805 maintains a constant 5V for inputs ranging from 7-35V. More details: &lt;a href=&quot;https://electronicsforu.com/resources/learn-electronics/7805-ic-voltage-regulator&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://electronicsforu.com/resources/learn-electronics/7805-ic-voltage-regulator&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Buck converter: This is a power electronic DC-DC converter. Converts inputs voltages within input range to variable output voltages that can be changed with the help of a potentiometer provided. Look out for LM2596 buck converters.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Both of these are mostly available on online shops, even Amazon. Please check out the current rating of components before buying if it satisfies your load demand.&lt;/p&gt;&#xA;" OwnerUserId="17205" LastActivityDate="2018-06-11T14:12:12.697" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15833" PostTypeId="2" ParentId="15826" CreationDate="2018-06-11T15:47:54.533" Score="1" Body="&lt;p&gt;Typically you would try to 'normalize' the 2 quantities so that they have the same magnitude and can be compared.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's say you know the worst case error or the average error, or some thing of the sort, for the to quantities. Then you simply divide both quantity by that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the case you know the maximal error it is going to give you a number between 0 and 1.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2018-06-11T15:47:54.533" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15834" PostTypeId="1" AcceptedAnswerId="15848" CreationDate="2018-06-11T19:23:08.437" Score="0" ViewCount="70" Body="&lt;p&gt;What we are specifically interested in is for our quad-copter to be able to detect and maneuver to avoid (maneuverability is based on our custom algorithms) objects flying towards it with great speeds. A paintball gun projectile for example. Regarding the coverage of all possible directions, we are not concerned whether or not it will be achieved with one or many sensors. What we are interested in is if a sensor that can do that exists and is suitable to be mounted on-board a drone.&lt;/p&gt;&#xA;" OwnerUserId="20555" LastActivityDate="2018-07-14T07:04:13.580" Title="Any kind of sensor to detect really fast moving objects with minimum 25 m radius sub 1.000$?" Tags="&lt;sensors&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="15835" PostTypeId="1" CreationDate="2018-06-11T22:22:36.933" Score="0" ViewCount="52" Body="&lt;p&gt;I am new here and with little experience in robotics. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have assembled this holonomic robot: &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;a href=&quot;https://shop.wickeddevice.com/product/omniwheel-robot-complete-kit/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://shop.wickeddevice.com/product/omniwheel-robot-complete-kit/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It has 3 Omni-wheels, 3 gearhead motors. It is controlled by a pre-programmed Arduino 1 with a custom motor shield. &#xA;It is set up to be controlled with R/C inputs from standard radio control gears. I would like to replace the control via R/C inputs with Bluetooth ones. I would like to use the robot for research purposes and the R/C does do allow me the flexibility to have pre-coded functions to input in the computer. I would like to use the BlueFruit LE that comes with an IOS app.  &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;a href=&quot;https://learn.adafruit.com/bluefruit-le-connect-for-ios/controller&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://learn.adafruit.com/bluefruit-le-connect-for-ios/controller&lt;/a&gt;. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The current set-up comes with a Motor Shield Library + Arduino Code, see links: &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;a href=&quot;https://github.com/WickedDevice/WickedMotorShield&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/WickedDevice/WickedMotorShield&lt;/a&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;a href=&quot;https://github.com/WickedDevice/OmniWheelControl/blob/master/OmniWheelControl.ino&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/WickedDevice/OmniWheelControl/blob/master/OmniWheelControl.ino&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;My questions are: would you advise to use the current setup with Bluetooth? Would you advise to use another motor shield?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="20557" LastEditorUserId="18235" LastEditDate="2018-06-12T13:33:42.767" LastActivityDate="2018-11-11T14:01:45.423" Title="Bluetooth Controls instead of R/C Controls for simple Holonomic robot" Tags="&lt;mobile-robot&gt;&lt;arduino&gt;&lt;radio-control&gt;&lt;bluetooth&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15838" PostTypeId="2" ParentId="15829" CreationDate="2018-06-12T04:55:53.137" Score="0" Body="&lt;p&gt;Hopefully this might be of help to someone with the same issue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Everything was wired correctly, it was just the way the quad was to be armed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Answer:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hold both of the joysticks in the down position and then flip the arm toggle (SwA in my set up) to the down all at the same time. &lt;/p&gt;&#xA;" OwnerUserId="19752" LastActivityDate="2018-06-12T04:55:53.137" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15839" PostTypeId="2" ParentId="15817" CreationDate="2018-06-12T13:18:48.813" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I can already determine the path using forward velocity and angular velocity &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If you already know the exact path of robot, you dont need SLAM algorithm, you just have to integrate your sensor readings(laser /camera) to get the map. Its known as &lt;strong&gt;Mapping with known poses&lt;/strong&gt;. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I have a data set of a moving Robot which can give me the value of forward velocity(m/s) and angular velocity(rad/s) and time(s)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In general with consumer grade IMUs, calculating robot pose from &lt;em&gt;forward velocity(m/s) and angular velocity(rad/s) and time(s)&lt;/em&gt; is not accurate and errors will accumulate with time.&lt;/p&gt;&#xA;" OwnerUserId="714" LastActivityDate="2018-06-12T13:18:48.813" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15841" PostTypeId="1" CreationDate="2018-06-12T18:02:33.647" Score="2" ViewCount="1259" Body="&lt;p&gt;I have seen the usage of the term &quot;omnidirectional&quot; in robotics, but I have not found a (precise) definition.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the chapter &lt;a href=&quot;https://link.springer.com/chapter/10.1007/978-3-540-70534-5_9&quot; rel=&quot;nofollow noreferrer&quot;&gt;Omni-Directional Robots&lt;/a&gt; from the book &quot;Embedded Robotics&quot;, it is stated: &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In contrast, a holonomic or omnidirectional robot is capable of driving in any direction&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;which seems to indicate that these words are synonyms. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What's an omnidirectional robot? What is the difference between a holonomic and an omnidirectional robot (if any)? What are examples of omnidirectional and holonomic robots (or other objects)?&lt;/p&gt;&#xA;" OwnerDisplayName="user10072" LastEditorDisplayName="user10072" LastEditDate="2018-09-30T17:39:23.747" LastActivityDate="2018-09-30T17:39:23.747" Title="What is the difference between a holonomic and an omnidirectional robot?" Tags="&lt;mobile-robot&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15842" PostTypeId="2" ParentId="15841" CreationDate="2018-06-12T19:12:07.090" Score="10" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Holonomic_(robotics)&quot; rel=&quot;noreferrer&quot;&gt;Holonomic&lt;/a&gt; is a precise mathematical term; one definition is velocity constraints can be integrated into the form&#xA;$$\begin{align}&#xA;f(q1,q2,...,t) = 0. &#xA;\end{align}$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Roughly, that means the controllable degrees of freedom at any instant matches the total degrees of freedom for the robot. By this definition, a train is holonomic b/c it has one controllable degree of freedom (speed) and one motion degree of freedom (position along the track). However, most people would likely &lt;em&gt;not&lt;/em&gt; consider a train to be omnidirectional.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that a car is nonholonomic. At any give instant you have two controllable degrees of freedom (speed and steer angle) but three motion degrees of freedom (x, y, and orientation).&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2018-06-12T19:12:07.090" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15843" PostTypeId="1" AcceptedAnswerId="15854" CreationDate="2018-06-13T01:44:30.970" Score="1" ViewCount="96" Body="&lt;p&gt;I have a trajectory of a quadcopter in 3D. Out of all the poses in the trajectory, I want to correct one of the poses. I then want to adapt the rest of the poses based on the newly corrected pose. I understand that this is a common problem in robotics and there would be a number of solutions. I want a tried and tested c++ library that does this as I want to integrate this feature in my system but not spend time on building it myself. What are the possible c++ libraries I can use?  &lt;/p&gt;&#xA;" OwnerUserId="15192" LastEditorUserId="18235" LastEditDate="2018-06-13T08:29:26.223" LastActivityDate="2018-06-15T09:37:13.390" Title="c++ Library for trajectory correction" Tags="&lt;quadcopter&gt;" AnswerCount="1" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="15847" PostTypeId="2" ParentId="15835" CreationDate="2018-06-14T05:34:56.950" Score="1" Body="&lt;p&gt;Converting this setup to use BT might be quite costly and time consuming. I would recommend to keep using RC for the manual input, but put your experimental code into the Arduino, this way you may use all your hardware with the minimal changes and still get the job done.&lt;/p&gt;&#xA;" OwnerUserId="20571" LastActivityDate="2018-06-14T05:34:56.950" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15848" PostTypeId="2" ParentId="15834" CreationDate="2018-06-14T06:09:49.203" Score="1" Body="&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Consider a pellet going 100m/s, it will cover 25m in 0.25sec, let's say your drone is 0.5m in size, and detection time is zero, you still need to achieve 16m/s2 (1.6G) acceleration &lt;em&gt;instantly&lt;/em&gt; to get out of the harms way -- which is a bit unrealistic for the contemporary drones.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Take a 60FOV camera, with 4k resolution, this will give you about 2000 pixels vertically (or horizontally), which @25m become about 12.5mm large (one pixel), which is not enough for the reliable detection. 30FOV camera might work with 6mm pixels @ 25m, but you'll need plenty of them to cover your surroundings. And processing all these 4k images is not going to be cheap or fast.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You cannot detect a fast flying object @25m unless you use high velocity cameras (upward of 100fps), which again drives the processing cost higher.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;IMHO, your best bet would be to go either in the direction of creating a large reinforced drone with high redundancy that does not care about pellets and can keep flying after the hit, or creating a fleet of match-box sized randomly moving drones that work as a swarm and don't care if there are a few casualties. Check out this: &lt;a href=&quot;https://www.youtube.com/watch?v=9CO6M2HsoIA&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=9CO6M2HsoIA&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="20571" LastActivityDate="2018-06-14T06:09:49.203" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15849" PostTypeId="2" ParentId="15827" CreationDate="2018-06-14T06:20:36.050" Score="1" Body="&lt;p&gt;Lower voltage is not going to damage the servos. Just don't expect them to operate as fast and provide as much torque as written in the docs. And they will be much easier to stall and draw the full 2.5A -- I hope your setup can provide that much without blowing the fuse.&lt;/p&gt;&#xA;" OwnerUserId="20571" LastActivityDate="2018-06-14T06:20:36.050" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15850" PostTypeId="2" ParentId="14074" CreationDate="2018-06-14T06:49:12.593" Score="1" Body="&lt;p&gt;Cheap ultrasonic sensors will give you a signal when the first echo (from the closest object) is received. Hence, you'll get a reading of 'X' for object B, and probably nothing for the object A, no matter if it's moving or not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which makes sense, because if you keep moving in the current direction, object B is the one you should be most concerned about.&lt;/p&gt;&#xA;" OwnerUserId="20571" LastActivityDate="2018-06-14T06:49:12.593" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15851" PostTypeId="2" ParentId="4297" CreationDate="2018-06-14T07:10:45.250" Score="0" Body="&lt;p&gt;There's a lineup of NVIDIA products designed specifically for SLAM/CV/etc in mind. You may take a look at Jetson TK1/TX1/TX2, that include several ARM cores as well as GPU unit for parallel image processing and are available as the developer kits and as a separate modules.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The best part of these modules, they use ARM version of Ubuntu so you may develop the software on your desktop PC, using CUDA running on NV GPU board, then easily recompile and have it working on your robotics appliance, probably without changing a single line in your code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please, google for &quot;jetson slam&quot; to see a bunch of projects.&lt;/p&gt;&#xA;" OwnerUserId="20571" LastActivityDate="2018-06-14T07:10:45.250" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15852" PostTypeId="2" ParentId="4297" CreationDate="2018-06-14T10:43:34.737" Score="0" Body="&lt;p&gt;The Arduinos are mostly Microcontroller boards. This means that they are good for controlling sensors and actuators in real time, but not so good at controlling complex tasks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Single Board Computers (SBC's) are better for the more complex tasks, such as video, SLAM, and communicating with other computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would not use a Raspberry Pi for this, because the Pi isn't all that powerful or fast.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I like the Udoo. It is an i86 platform rather than ARM. However, one of it's most interesting things is that it contains an Arduino-compatible (complete with headers for shields) on board and directly connected to the main processor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another computer that I like using for the main brain of a computer is the Intel NUC. These are tiny little computers that can do a lot more than most people think. I've never had problems installing Linux on them.&lt;/p&gt;&#xA;" OwnerUserId="19275" LastActivityDate="2018-06-14T10:43:34.737" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15853" PostTypeId="1" CreationDate="2018-06-14T10:53:47.023" Score="3" ViewCount="709" Body="&lt;p&gt;I wanted to know the actual mathematics behind the path planners MoveIt! uses for manipulators from OMPL. I tried to look into source codes but couldn't get enough details.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wish to know:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;How cost function is implemented, i.e., how path cost is calculated in configuration space. It can't be Euclidean distance I guess?! So what is it.&lt;/li&gt;&#xA;&lt;li&gt;How Sampling is done. A sampler is called in the src files but i couldn't get the details. Is it done in configuration space or workspace or both can be done?&lt;/li&gt;&#xA;&lt;li&gt;What is the exact pipeline? Like after sampling(depending on state space), is inverse kinematics implemented to get into configuration space or foward-kinematics is implemented to get into work space and such details. Which is the better option?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Actually I wish to implement my own algorithm (like some variation of RRT) without MoveIt!/OMPL hence it is important for me to know all the details.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am really confused about this. Any explanations or links where I can find the details and understand them would be really helpful.&lt;/p&gt;&#xA;" OwnerUserId="20575" LastActivityDate="2018-07-18T08:18:28.770" Title="Understanding MoveIt! and OMPL more deeply" Tags="&lt;robotic-arm&gt;&lt;inverse-kinematics&gt;&lt;manipulator&gt;&lt;forward-kinematics&gt;&lt;path-planning&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15854" PostTypeId="2" ParentId="15843" CreationDate="2018-06-14T13:12:06.223" Score="3" Body="&lt;p&gt;You can use &lt;a href=&quot;http://ceres-solver.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;ceres-solver&lt;/a&gt; library which is nonlinear optimization framework implemented for problems like pose optimization and/or bundle adjustment. It supports ICP , bundle adjustment , pose graph optimization and other techniques which is relative to your problem. I think you should glance at it first.&lt;/p&gt;&#xA;" OwnerUserId="18063" LastEditorUserId="18063" LastEditDate="2018-06-15T09:37:13.390" LastActivityDate="2018-06-15T09:37:13.390" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15856" PostTypeId="2" ParentId="15853" CreationDate="2018-06-14T17:24:15.060" Score="1" Body="&lt;p&gt;I would strongly encourage you to read the documentation of MoveIt!, especially the &lt;a href=&quot;http://moveit.ros.org/documentation/concepts/&quot; rel=&quot;nofollow noreferrer&quot;&gt;basic concepts&lt;/a&gt; to understand MoveIt! pipeline.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And the &lt;a href=&quot;http://moveit.ros.org/documentation/plugins/&quot; rel=&quot;nofollow noreferrer&quot;&gt;plugins page&lt;/a&gt; to understand which is the default planner and how it could be replaced by your own.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the &lt;a href=&quot;http://moveit.ros.org/documentation/planners/&quot; rel=&quot;nofollow noreferrer&quot;&gt;documentation of MoveIt!&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;MoveIt! is designed to work with many different types of planners, which is ideal for benchmarking improved planners against previous methods. Below is a list of planners that have been used with MoveIt!, in descending order of popularity/support within MoveIt!&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Among them is OMPL, which offers a lots of &lt;a href=&quot;https://ompl.kavrakilab.org/planners.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;planner implementations&lt;/a&gt;. Some are based on optimization some not, only the optimized one have cost function. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For sampling based planner, sampling can be random and homogeneous in the space or guided by some heuristics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The choice of configuration space over work space, is mainly dependent of your application. For example if you have a manipulating arm you will be tempted to use work space so that you make sense of the plan intuitively. Some time it make more sense to plan in configuration space, because system constraint can be expressed more easily for example.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://ompl.kavrakilab.org&quot; rel=&quot;nofollow noreferrer&quot;&gt;OMPL webpage&lt;/a&gt; links every implementation to the theoretical papers and they also propose a guide for beginners in path planning, &lt;a href=&quot;http://ompl.kavrakilab.org/OMPL_Primer.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Open Motion Planning Library: A Primer&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastEditorUserId="9176" LastEditDate="2018-07-18T08:18:28.770" LastActivityDate="2018-07-18T08:18:28.770" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15858" PostTypeId="1" CreationDate="2018-06-14T20:09:38.060" Score="1" ViewCount="7019" Body="&lt;p&gt;After having read the introductions of the Wikipedia articles about &quot;sonar&quot; and &quot;ultrasonic sensor&quot;, it is still not clear to me what the differences between the two are. In the context of robotics, is there any difference between these two sensors (terms)?&lt;/p&gt;&#xA;" OwnerDisplayName="user10072" LastActivityDate="2018-09-03T10:21:34.693" Title="What's the difference between a sonar and ultrasonic sensor?" Tags="&lt;sensors&gt;&lt;ultrasonic-sensors&gt;&lt;sonar&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15859" PostTypeId="2" ParentId="15858" CreationDate="2018-06-14T20:34:02.110" Score="2" Body="&lt;p&gt;Sonar, as used in robotics means having an ultrasonic emitter and and ultrasonic receiver. There are also some sonar with a single emitter/receiver.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, they all use ultrasonic sound ways in order to sense the distance to an object. Well, actually they really sense the time between the emission of the ultrasonic wave and the reception of it, which is proportional to the distance to the object.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am sure that there are sensors that are true ultrasonic sensors in that they are used only to detect ultrasonic &quot;sounds.&quot; For example, if you wanted to detect some of the sounds made by marine mammals, you need to be able to detect ultrasonic waves. I might call this an ultrasonic sensor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, since I don't study marine animals, I use &quot;sonar&quot; and &quot;ultrasonic sensor&quot; to mean the same thing.&lt;/p&gt;&#xA;" OwnerUserId="19275" LastActivityDate="2018-06-14T20:34:02.110" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15862" PostTypeId="2" ParentId="15858" CreationDate="2018-06-15T03:24:26.687" Score="1" Body="&lt;p&gt;The main difference is, SONAR (originally an acronym for SOund Navigation And Ranging) is used underwater and uses low frequency sounds (100-500Hz) as well as high frequency sounds (ultrasound, etc).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ultrasonic sensors are used mostly over the terrain and limited to high frequency sounds.&lt;/p&gt;&#xA;" OwnerUserId="20571" LastActivityDate="2018-06-15T03:24:26.687" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15863" PostTypeId="1" CreationDate="2018-06-15T05:29:05.490" Score="2" ViewCount="125" Body="&lt;p&gt;One of my four ESCs burnt out on a first test flight of a new quad build. I plugged the battery in, armed the drone, and one of the motors spun for less than a second before stopping. I immediately saw white smoke and smelled burning plastic. This all happened with the throttle set to idle. The other three motors are working fine even under load.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I opened the ESC to take a look, and sure enough, one of the FETs shows signs of burn damage. This same motor was operating correctly and responsive on the test bench, without a prop. I also noticed that this ESC gets very hot to the touch - 80C maybe - even when disarmed (but powered).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What could be the cause? Is a bad ESC likely? I'm wondering if it's a short, but the fact that it was responsive on the bench makes it seem unlikely.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;30A Simonk ESC&lt;/p&gt;&#xA;&#xA;&lt;p&gt;920KV Motors&lt;/p&gt;&#xA;&#xA;&lt;p&gt;4s LiPo&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Matek PDB&lt;/p&gt;&#xA;&#xA;&lt;p&gt;8&quot; props&lt;/p&gt;&#xA;" OwnerUserId="20583" LastActivityDate="2019-04-11T12:03:55.807" Title="Quadcopter ESC failure on first test flight" Tags="&lt;quadcopter&gt;&lt;esc&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15864" PostTypeId="2" ParentId="15863" CreationDate="2018-06-15T06:53:51.160" Score="1" Body="&lt;p&gt;On the bench without propeller your motor as virtually no load, hence the current drained from the ESCs is rather low. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then seeing the average price of your ESCs on the internet I would not be surprised if once in a while one is faulty ...&#xA;As it worked fine on bench and all the other work, I would rule out software and mismatching ratings respectively. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your ESCs are maybe a bit oversized (currentwise) w.r.t. your motors rating but this should have no impact (expect for price and weight).&lt;/p&gt;&#xA;" OwnerUserId="18235" LastEditorUserId="18235" LastEditDate="2018-11-12T10:47:58.310" LastActivityDate="2018-11-12T10:47:58.310" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15866" PostTypeId="1" CreationDate="2018-06-15T17:09:22.310" Score="0" ViewCount="47" Body="&lt;p&gt;I am working on mobile Robotics. I want to implement Slam. I have a very specific question about EKF Slam. To implement Slam I read the book &quot;Probabilistic Robotics&quot;. I read its online version. There is a very well defined algorithm about EKF SLAM of known correspondence. But after read this algorithm again and again still fail to understand this algorithm, Especially where Landmarks portion is introduce. They are using range and bearing information to find out the landmarks (x,y) co-ordinates. This portion is little fishy for me. The value they get it is in Robot body Frame because the camera in attached with the Robot. So how could I get it Global Frame. I don't think there is any step in algorithm which transfer it to Global Frame. Any suggestion and discussion about this matter is most welcome.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you in advance.  &lt;/p&gt;&#xA;" OwnerDisplayName="user20203" LastActivityDate="2018-06-15T17:09:22.310" Title="EKF based Slam implementation with landmark identification in Global frame" Tags="&lt;mobile-robot&gt;&lt;slam&gt;&lt;ekf&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15872" PostTypeId="1" CreationDate="2018-06-16T14:56:30.100" Score="2" ViewCount="72" Body="&lt;p&gt;If you define a wheel that can only rotate and move in the direction it is pointing to but using a combination of motions (arbitrarily short) it can be moved sideways, does the system still remain holonomic, by definition?&lt;/p&gt;&#xA;" OwnerUserId="20589" LastActivityDate="2018-07-21T05:34:11.437" Title="Is a small time locally controllable system holonomic?" Tags="&lt;mobile-robot&gt;&lt;path-planning&gt;&lt;autonomous-car&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15874" PostTypeId="1" CreationDate="2018-06-17T02:09:27.363" Score="2" ViewCount="69" Body="&lt;p&gt;I am currently working on the 3d model of a simple robot. However I have started to realize that some of the things/mechanisms might not work as I imagined.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So is there any way that I can import the obj file of this model somewhere, set things as rigid bodies and add set axles to rotate continuously and then see if the motion gets transferred to the desired places and things like that? I am looking for something simple.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I really apologize for this vague question but I have really no knowledge of mechanical engineering and don't understand many terms. &lt;/p&gt;&#xA;" OwnerUserId="20592" LastActivityDate="2018-12-15T14:02:15.440" Title="Can I simulate/test the model of a robot I am designing to be 3d printed?" Tags="&lt;simulation&gt;&lt;3d-printing&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15875" PostTypeId="1" CreationDate="2018-06-17T18:21:12.557" Score="2" ViewCount="196" Body="&lt;p&gt;I am using a Raspberry Pi 3, B+ pertinent libraries are WiringPi, with WiringSerial. Code is written in c. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: the Serial connection is handled through GPIO 14(Tx) &amp;amp; 15(Rx), 5v (Tx) is stepped down through 165 ohm resistor and, a 3.3v Zener Diode. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The following code is what I use to retrieve and and convert Raw Encoder Count to 16bit value. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;int16_t sensors_left_encoder_init() {&#xA;int16_t left_encoder_start = 0;&#xA;char buffer_l[2];&#xA;int i = 0;&#xA;&#xA;serialFlush(fd);&#xA;serialPutchar(fd, 142); // Request sensor packet&#xA;serialPutchar(fd, 43); // Left encoder request&#xA;do {&#xA;    buffer_l[i] = serialGetchar(fd);&#xA;    printf(&quot; -&amp;gt; Left Serial Value: %d\n&quot;, buffer_l[i]);&#xA;    i++;&#xA;} while (serialDataAvail(fd));&#xA;left_encoder_start = (int16_t)(((buffer_l[0]) &amp;amp; 0xFF) &amp;lt;&amp;lt; 8 | (buffer_l[1]) &amp;amp; 0xFF);&#xA;printf(&quot; -&amp;gt; Left Encoder Start: %&quot; PRId16 &quot;\n&quot;, left_encoder_start);&#xA;&#xA;return left_encoder_start;&#xA;}&#xA;&#xA;int16_t sensors_right_encoder_init() {&#xA;int16_t right_encoder_start = 0;&#xA;unsigned char buffer_r[2];&#xA;int i = 0;&#xA;&#xA;serialFlush(fd);&#xA;serialPutchar(fd, 142); // Request sensor packet&#xA;serialPutchar(fd, 44); // Left encoder request&#xA;do {&#xA;    buffer_r[i] = serialGetchar(fd);&#xA;    printf(&quot; -&amp;gt; Right Serial Value: %d\n&quot;, buffer_r[i]);&#xA;    i++;&#xA;} while (serialDataAvail(fd));&#xA;right_encoder_start = (int16_t)(((buffer_r[0]) &amp;amp; 0xFF) &amp;lt;&amp;lt; 8 | (buffer_r[1]) &amp;amp; 0xFF);&#xA;printf(&quot; -&amp;gt; Right Encoder Start: %&quot; PRId16 &quot;\n&quot;, right_encoder_start);&#xA;&#xA;&#xA;return right_encoder_start;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I pulled the battery, ran the code and the first run produced:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;-&amp;gt; Left Serial Value: 0&lt;/code&gt;&#xA;&lt;code&gt;-&amp;gt; Left Serial Value: 1&lt;/code&gt;&#xA;&lt;code&gt;-&amp;gt; Left Encoder Start: 1&lt;/code&gt;&#xA;&lt;code&gt;-&amp;gt; Right Serial Value: 0&lt;/code&gt;&#xA;&lt;code&gt;-&amp;gt; Right Serial Value: 2&lt;/code&gt;&#xA;&lt;code&gt;-&amp;gt; Right Encoder Start: 2&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However the second run through produced this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;-&amp;gt; Left Serial Value: 0&lt;/code&gt;&#xA;&lt;code&gt;-&amp;gt; Left Serial Value: 3&lt;/code&gt;&#xA;&lt;code&gt;-&amp;gt; Left Encoder Start: 3&lt;/code&gt;&#xA;&lt;code&gt;-&amp;gt; Right Serial Value: 0&lt;/code&gt;&#xA;&lt;code&gt;-&amp;gt; Right Serial Value: 4&lt;/code&gt;&#xA;&lt;code&gt;-&amp;gt; Right Encoder Start: 4&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a feeling its how serialGetchar() is receiving the serial output from the interface, but I am not 100%. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;From reading the wheel encoder topics on here, and the OI Specs, I understand that the raw values should not change unless a drive command was issued to the interface.  &lt;/p&gt;&#xA;" OwnerUserId="20597" LastEditorUserId="20597" LastEditDate="2018-06-17T18:29:28.253" LastActivityDate="2021-04-04T06:00:45.080" Title="IRobot 690 - raw wheel encoder counts change with no movement command issued" Tags="&lt;raspberry-pi&gt;&lt;irobot-create&gt;&lt;c&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15876" PostTypeId="1" AcceptedAnswerId="20454" CreationDate="2018-06-17T23:27:19.653" Score="2" ViewCount="2234" Body="&lt;p&gt;In Udacity's &lt;a href=&quot;https://www.udacity.com/course/self-driving-car-engineer-nanodegree--nd013&quot; rel=&quot;nofollow noreferrer&quot;&gt;Self-Driving Car Engineer&lt;/a&gt; online course, one instructor &lt;a href=&quot;https://youtu.be/5t-oVAZagT8?t=1m49s&quot; rel=&quot;nofollow noreferrer&quot;&gt;claims&lt;/a&gt; that &quot;[Finite State Machines are] &lt;em&gt;not necessarily the most common&lt;/em&gt; [approach for behavior planning] &lt;em&gt;anymore, for reasons we will discuss later.&lt;/em&gt;&quot; I suppose the later &lt;a href=&quot;https://youtu.be/sEZn3iZgOaI?t=1m15s&quot; rel=&quot;nofollow noreferrer&quot;&gt;assertions&lt;/a&gt; that FSM's are easily abused and become harder to understand and maintain as the state set increases amount for the &quot;reasons&quot;, but we're never told what's used in its place.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have been using FSM's for years, mostly for parsing-related problems in enterprise systems programming, but more recently for behavior planning problems. In my experience they're great for breaking down complex problems into manageable parts, not only when modelling but also in implementation – I usually implement each state as a separate class or function, allowing me to concentrate on the respective behavior and transition rules in relative isolation to the rest of the architecture.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's why I find it frustrating that the lesson failed to discuss what is currently used instead of FSM's for behavior modelling: if a better approach exists for keeping track of a system's context and adjusting its behavior in response, I'm yet to hear of it, and I'd very much like to.&lt;/p&gt;&#xA;" OwnerUserId="4310" LastEditorUserId="4310" LastEditDate="2018-06-18T11:38:27.277" LastActivityDate="2020-04-10T22:49:39.127" Title="Alternatives to Finite State Machines (FSM's)?" Tags="&lt;control&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15877" PostTypeId="1" CreationDate="2018-06-18T04:32:49.987" Score="0" ViewCount="170" Body="&lt;p&gt;&lt;a href=&quot;https://github.com/udacity/RoboND-Kinematics-Project&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/udacity/RoboND-Kinematics-Project&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We are using the above mentioned KUKA arm model to simulate pick and place. We noticed that KUKA arm would not pick objects heavier than 2.5 kg in simulation. We are not sure if this is a simulation limitation or limitation of the gripper (KR210 claw).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where can we find the specifications of KR210 claw? If we can get KUKA arm to carry heavier payload in simulation, where do we do that parameter tweaking?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any other KUKA arm compatible grippers with DAE/STL files available, which has a higher payload capability?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does the weight of the object to be picked, influence the trajectory/path planning by OMPL?&lt;/p&gt;&#xA;" OwnerUserId="19947" LastActivityDate="2021-04-03T16:01:00.060" Title="How to increase the payload for the KUKA arm with KR210 claw?" Tags="&lt;motion-planning&gt;&lt;path-planning&gt;&lt;kuka&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15878" PostTypeId="2" ParentId="15876" CreationDate="2018-06-18T05:59:55.563" Score="2" Body="&lt;p&gt;Finite state machines are, by definition, &quot;finite&quot; -- they have a predefined set of states and some rules to change from one state to another, which might work in some kind of restricted environment, but totally fails in the very unpredictable real world, especially working on such complex problem as self-driving.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The current approaches include modelling and predicting the behaviour, then evaluating the possible outcomes and choosing the behaviour that gives the best evaluation. You may check Model predictive control (MPC) on Google or watch some of the videos, that use MPPI (Multipath prediction, when they simulate hundreds of possible trajectories and then select the best one) -- you'll never get the similar results using FSM:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=1AR2-OHCxsQ&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=1AR2-OHCxsQ&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=T4ZB3RYSbrk&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=T4ZB3RYSbrk&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="20571" LastActivityDate="2018-06-18T05:59:55.563" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15880" PostTypeId="2" ParentId="15874" CreationDate="2018-06-18T07:11:44.417" Score="1" Body="&lt;p&gt;You can do something like what you describe in at least 2 softwares:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Matlab/Simulink with the Simscape Multibody toolbox &lt;a href=&quot;https://mathworks.com/help/sl3d/link-to-simulink-and-simmechanics-models.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://mathworks.com/help/sl3d/link-to-simulink-and-simmechanics-models.html&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;inside Inventor from Autodesk  (eg &lt;a href=&quot;https://www.youtube.com/watch?v=__EjxKIsy9E&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=__EjxKIsy9E&lt;/a&gt; ) &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;There are many tutorials on the internet to assist you there. &#xA;Unfortunately these two solutions rely&#xA;on very expensive piece of software, I am not aware of a free counterpart but it can exist. Also there are trial and student version of these software for free.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2018-06-18T07:11:44.417" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15881" PostTypeId="2" ParentId="15877" CreationDate="2018-06-18T07:43:18.727" Score="0" Body="&lt;p&gt;You shoudl separate 2 things, the robotic arm and the gripper mounted on it, typically they come from different manufacturer. Both have physical limits that you need to take care when operating them. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;From KUKA documentation about the KR210 serie (&lt;a href=&quot;https://www.kuka.com/-/media/kuka-downloads/.../pf0031_kr_2102_k_en.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.kuka.com/-/media/kuka-downloads/.../pf0031_kr_2102_k_en.pdf&lt;/a&gt; ) it seems that you should look a the limitation of the gripper. However note that even if the robotic arm can bear your payload, it might that not all configuration/motion are possible without violating the joint limits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I went through the package quickly I found no information about the gripper model used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to simulate a specific KUKA arm, there are usually several projects available on the internet for each arm, so you can try out the one corresponding to your arm. Some have already some gripper model and some let you easily add your desired gripper. I suggest you to have a look at ROS industrial to find simulation of robotic arms and grippers used in the industry. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lastly, the weight of the object as an influence as OMPL should check the robotic arm joint limits.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2018-06-18T07:43:18.727" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15882" PostTypeId="2" ParentId="12144" CreationDate="2018-06-18T10:31:14.827" Score="2" Body="&lt;p&gt;I believe by continuous rotation servo you mean servos similar to TowerPro MG-995 or Winch Servo HS-785HB. &#xA;For such servo, the normal Arduino code for servo motors won't work.&#xA;You have to define &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#define MAX_PWM 2150&#xA;#define MID_PWM 1500&#xA;#define MIN_PWM 850&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;...&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void setup() &#xA;{ &#xA;  myservo.attach(9);&#xA;  myservo.writeMicroseconds(1500);  // set servo to mid-point  &#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also you need to use &lt;strong&gt;.writeMicroseconds(pwm_in_us)&lt;/strong&gt; API instead of &lt;strong&gt;.write(pwm)&lt;/strong&gt; API.&#xA;The difference between the mid value (i.e. 1500) and the user defined value will give you the desired rotation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For values greater than 1500us, the servo will rotate in CCW direction (if I am not wrong) and for values less than 1500us it rotates in CW direction.&lt;/p&gt;&#xA;" OwnerUserId="20603" LastEditorUserId="18235" LastEditDate="2018-06-18T18:14:27.073" LastActivityDate="2018-06-18T18:14:27.073" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15883" PostTypeId="2" ParentId="15874" CreationDate="2018-06-18T10:39:44.603" Score="0" Body="&lt;p&gt;There's some free software that can simulate some of the aspects of your case. Some are not easy as the paid ones.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Link to a free software that can simulate your case&#xA;&lt;a href=&quot;http://www.hotint.org&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.hotint.org&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2447" LastActivityDate="2018-06-18T10:39:44.603" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15884" PostTypeId="1" AcceptedAnswerId="15886" CreationDate="2018-06-18T15:04:54.383" Score="3" ViewCount="10186" Body="&lt;p&gt;I'm very new in this field so my question may be very stupid. I apologize for this at first. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm trying to use a proper camera to run a SLAM algorithm. As suggested by some people, stereo camera may be a good choice. When I searched online, I found terms &quot;stereo camera&quot;, &quot;depth camera&quot;, &quot;3d camera&quot;, and &quot;rgb-d camera&quot;, and I feel confused. My understanding is &quot;rgb-d camera&quot; is more than &quot;depth camera&quot; because it has rgb channels while simple &quot;depth camera&quot; only makes white-black images. However, I have no idea about the difference from &quot;stereo camera&quot; and &quot;3d camera&quot;. I know some camera options such as ZED, BumbleBee, Kinect, Intel RealSense, to me they are all &quot;stereo camera&quot;.....&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyone can give me some instructions? Thanks a lot in advance!&lt;/p&gt;&#xA;" OwnerUserId="20605" LastActivityDate="2018-06-18T15:34:23.057" Title="what's the difference among rgb-d camera, depth camera, 3d camera, and stereo camera?" Tags="&lt;cameras&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="15885" PostTypeId="1" AcceptedAnswerId="15887" CreationDate="2018-06-18T15:11:02.403" Score="0" ViewCount="481" Body="&lt;p&gt;I want to publish via terminal a particular message format - &lt;strong&gt;sensor_msgs/Joy&lt;/strong&gt;. However, every format I use seems to be wrong and I cannot understand how it is meant to be written on the terminal. On the internet all I can find is the generic structure and examples of similar messages but modifying my message based on that does not seem to produce any result. Say I want to publish that the object moves forward along a single axis while no motion in others. How do I achieve that with the proper syntax.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also if you can let me know a place where I can find examples of the &lt;strong&gt;exact&lt;/strong&gt; way I have to publish certain messages via terminal using &lt;strong&gt;rostopic pub&lt;/strong&gt;.&lt;/p&gt;&#xA;" OwnerUserId="9833" LastActivityDate="2018-06-18T16:30:28.960" Title="publishing on rostopics" Tags="&lt;quadcopter&gt;&lt;ros&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15886" PostTypeId="2" ParentId="15884" CreationDate="2018-06-18T15:34:23.057" Score="10" Body="&lt;p&gt;&lt;strong&gt;3D/Depth-Camera:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The most inclusive terms, only means that the camera gives you 3d data. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Stereo-Camera:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One kind of 3D-Camera, consists (in most cases) of two gray-scale Cameras. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;RGBD-Camera:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A sensor that gives you depth and color. In most cases, this refers to a Kinect-Style camera (or Primesense, Realsense), But a stereo-camera could also create colored pointclouds (if one camera is a rgb camera or if you have an additional camera). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You then also have the distinction of passive setups (like a standard stereo camera) or active cameras with some kind of projectors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Active cameras can use a speckle projector to create a texture that is then captured by a camera (Kinect1, Primesense) or use flash and Time-based computations to measure the distance (Keyword is Time of Flight) (Kinect2, Picoflex).&lt;/p&gt;&#xA;" OwnerUserId="23196" LastActivityDate="2018-06-18T15:34:23.057" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15887" PostTypeId="2" ParentId="15885" CreationDate="2018-06-18T16:30:28.960" Score="1" Body="&lt;p&gt;To answer your question, you can use the following syntax to publish something to the joy node:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;rostopic pub /joy sensor_msgs/Joy '{ header: {seq: 10, stamp: {secs: 1431222430, nsecs: 345678}, frame_id: &quot;3&quot;}, axes: [1.0, 0.0, 0.0, 0.0, 0.0, 0.0], buttons: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]}'&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Feel free to modify the axis and button values as you need, as well as the header. Axis values go from -1.0 to 1.0 and buttons are either 0 or 1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For future reference, I would strongly recommend actually &lt;em&gt;writing&lt;/em&gt; a publisher script, either in Python or C++, because the &lt;code&gt;rostopic pub&lt;/code&gt; interface, while it works okay for some simple &lt;code&gt;std_msgs&lt;/code&gt; messages, can get quite tedious for more complicated messages. You might be able to find better tutorials online, but the simplest interface to publish to a joystick topic from C++ would look like this.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sensor_msgs::Joy joy_msg;&#xA;joy_msg.axes.push_back(1.0); // Left Horizontal (-1.0 through 1.0)&#xA;joy_msg.axes.push_back(0.0); // Left Vertical &#xA;joy_msg.axes.push_back(0.0); // Left Trigger&#xA;joy_msg.axes.push_back(0.0); // Right Horizontal&#xA;joy_msg.axes.push_back(0.0); // Right Vertical&#xA;joy_msg.axes.push_back(0.0); // Right Trigger&#xA;&#xA;joy_msg.buttons.push_back(0);  &#xA;// Repeat for all buttons&#xA;&#xA;pub.publish(joy_msg);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="10310" LastActivityDate="2018-06-18T16:30:28.960" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15888" PostTypeId="1" CreationDate="2018-06-18T16:38:50.837" Score="0" ViewCount="34" Body="&lt;p&gt;I am studying about various filtering techniques for Robot pose esitimation. I came to know two very well known  filter technique Kalman Filter and Extended Kalman Filter. To know about this two technique I read Probalistic Robotics books. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Kalman Filter is a technique for filtering and prediction in linear system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Extended Kalman Filter is a technique for filtering and prediction of non-linear system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This two definitions are not very clear to me. So I googled the term linear and non-linear system&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Linear System- A linear system is a mathematical model of a system based on the use of a linear operator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Non-Linear System: In mathematics and physical sciences, a non-linear system is a system in which the change of the output is not proportional to the change of the input.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now both definitions are very fishy for me. They are the well structured definition but not very efficient for mobile robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can any one guide me about linear and nonlinear system from scratch or from naive level. I want to know this term in concept of Mobile Robotics and Kalman filter and extended Kalman filter.  Any practical example is most welcome.&lt;/p&gt;&#xA;" OwnerDisplayName="user20203" LastEditorUserId="18235" LastEditDate="2018-06-18T18:13:59.287" LastActivityDate="2018-06-18T18:13:59.287" Title="Kalman filter and ekf main difference in elaborate way" Tags="&lt;mobile-robot&gt;&lt;kalman-filter&gt;&lt;ekf&gt;" AnswerCount="0" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="15890" PostTypeId="2" ParentId="15875" CreationDate="2018-06-18T20:26:37.247" Score="0" Body="&lt;p&gt;I'm not familiar with the Rpi3 UART capabilities as I'm using a different controller with a hardware UART, but I can report that others have had difficulties using software-based UARTS with later generation of Roombas, i.e. Series 500 and later&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.ez-robot.com/Community/Forum/Thread?threadId=10953&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.ez-robot.com/Community/Forum/Thread?threadId=10953&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suggest adding a USB-based UART dongle and see if that solves the issue&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think you are indicating that you are using a Roomba 690, which I thought was Wi-Fi only. If that's the case, how are you connecting to it?&lt;/p&gt;&#xA;" OwnerUserId="19572" LastActivityDate="2018-06-18T20:26:37.247" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15891" PostTypeId="2" ParentId="11322" CreationDate="2018-06-19T04:40:57.463" Score="0" Body="&lt;p&gt;OpenSLAM is completely out of box it stops updating its algorithm development better you can look at the tutorials of constructsim &lt;a href=&quot;http://www.theconstructsim.com/ros-qa-navigate-avoiding-obstacles/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.theconstructsim.com/ros-qa-navigate-avoiding-obstacles/&lt;/a&gt;&#xA;this would help you and for your second question i prefer ROS mapping than open SLAM the reason is because of its updation and visualization features!!!&lt;/p&gt;&#xA;" OwnerUserId="20257" LastActivityDate="2018-06-19T04:40:57.463" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15893" PostTypeId="2" ParentId="14959" CreationDate="2018-06-19T07:37:51.717" Score="1" Body="&lt;p&gt;One of the ways to do path tracking is by indoor mapping. In indoor mapping you can use Triangulation method. Basically, this method uses the help of Relative Received Signal Strength (RSSI) from beacons or WiFi. All you require is minimum 3 BLE/WiFi beacons positioned at three different positions in your room and a BLE/WiFi receiver. ESP32 is the best device you can use for this. You can find some details here &lt;a href=&quot;http://www.cs.toronto.edu/~trein/csc2228/files/report.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.cs.toronto.edu/~trein/csc2228/files/report.pdf&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/64nwP.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/64nwP.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can also use accelerometer and gyroscope sensors to map the positioning. You can find some reference here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://pdfs.semanticscholar.org/cd3d/88d9f942deb245d5797a2135d3dfa757da13.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://pdfs.semanticscholar.org/cd3d/88d9f942deb245d5797a2135d3dfa757da13.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.diva-portal.org/smash/get/diva2:475619/FULLTEXT02.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.diva-portal.org/smash/get/diva2:475619/FULLTEXT02.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="20603" LastActivityDate="2018-06-19T07:37:51.717" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15894" PostTypeId="1" AcceptedAnswerId="15992" CreationDate="2018-06-19T19:05:30.757" Score="3" ViewCount="97" Body="&lt;p&gt;I read Probabilistic Robotics by Sebastian THRUN (&lt;a href=&quot;https://docs.ufpr.br/~danielsantos/ProbabilisticRobotics.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;online version&lt;/a&gt;). I also read &lt;a href=&quot;http://ais.informatik.uni-freiburg.de/teaching/ws12/mapping/pdf/slam04-ekf-slam.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://ais.informatik.uni-freiburg.de/teaching/ws12/mapping/pdf/slam04-ekf-slam.pdf&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Question1 :&lt;/strong&gt;&#xA;What will be the dimension of Matrix $F(x,j)$ below? As per book its dimension is $(3N+3)*5$. So if I have 10 landmark the dimension will be $33*5$. Meaning 33 Rows and 5 column. But as per picture No: 1 $F(x,j)$ has 6 Rows. This is confusing for me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Picture No1:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/fhqv6.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fhqv6.jpg&quot; alt=&quot;What is the actual dimension of this Matrix if I have 10 landmarks&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Question 2:&lt;/strong&gt;&#xA;  Both references describe  the same approach Extended Kalman filter slam with known correspondence, the only difference between them is the equation to build the matrix $H_i$ (see below, picture 2 and Picture 3).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now after reading those books I am confused which one is error less?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Picture No2:&#xA;  &lt;a href=&quot;https://i.stack.imgur.com/C2qbm.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/C2qbm.jpg&quot; alt=&quot;Matrix&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Picture No3:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/RdXxB.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/RdXxB.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Helpful discussion appreciated.&lt;/p&gt;&#xA;" OwnerUserId="20610" LastEditorUserId="110" LastEditDate="2018-06-20T16:42:39.350" LastActivityDate="2018-07-06T16:24:10.907" Title="Confusion of EKF equations" Tags="&lt;mobile-robot&gt;&lt;slam&gt;&lt;ekf&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15898" PostTypeId="2" ParentId="15872" CreationDate="2018-06-21T00:58:45.000" Score="0" Body="&lt;p&gt;If you can know the position/orientation of the wheel by measuring the total angular rotation, it would be holonomic.  Since the order in which the “small” rotations matters in your example, you do not know the pose of the wheel just based on total rotation.  Therefore it is not a geometric relationship between input actuations and output pose; it is non-holonomic.  At best you can define a differential relationship.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2018-06-21T00:58:45.000" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15903" PostTypeId="1" CreationDate="2018-06-21T23:53:33.130" Score="1" ViewCount="87" Body="&lt;h3&gt;Main Question:&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;note: The code in this question is pseudo-code, I'm using Python, but my pseudo-code is a mix of Python and C++.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a camera on the top of my robot's &quot;head&quot; which has pan and tilt capabilities as follows:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;move_head(int pan_degrees, int tilt_degrees);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;For example, when I call &lt;code&gt;move_head(30,-20)&lt;/code&gt; the robot's head will move 30 degrees to the right and 20 degrees down, from the current position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Importantly: When a current movement command is underway, the next available command waits for it to complete before executing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The camera is tracking a moving object (usually a person, but for this demo I'm just tracking a Red Ball for simplicity) and must tell the head which direction to move to keep the point as centered on the screen as possible. I get the object's current central point (centroid) as a pair of integers:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;int x; //pan&#xA;int y; //tilt&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I also have the center point as a pair of constant integers:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;const int x_center;&#xA;const int y_center;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;As you may have noticed, the function above does not have velocity controls in its parameter list and so the head moves only at pre-defined speeds (not slow, but I'm trying to remove jerky behavior).  There is also a &quot;full stop&quot; function, but because of my desire to have no jerky behavior I'm hoping not to need to use it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My approach so far has been to define thresholds across my input image, such as:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;int xthreshold = 600; // pixels&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;When the point crosses a threshold, I would calculate the difference in position:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;if(x &amp;gt; xthreshold):&#xA; int new_x = x - x_center; //new x&#xA; int new_y = y - y_center; //new y&#xA; move_head( new_x, new_y); //move to new position&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;However, this is an extremely primitive algorithm.  I imagine I could use a statistical method, or the current velocity of the object at the time of measurement, to predict a slightly more accurate new point than simply using the current difference from the center.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Addendum:&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;My code base is large and complex and I'm not personally familiar with the many layers of classes involved in the definition of my &lt;code&gt;move_head&lt;/code&gt; function.  However, if anyone knows of an amazing algorithm that does what I'm talking about that uses additional parameters, I would really love to hear about it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My guess is that a definition such as:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;move_head(int pan_degrees, int pan_velocity, int tilt_degrees, int tilt_velocity);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;or&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;move_head(int pan_velocity, int tilt_velocity);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;or&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;move_head(int pan_acceleration, int tilt_acceleration);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;may have a more intuitive implementation of an effective point tracking algorithm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additionally, would it be more useful to have my function update the desired destination mid-movement instead of blocking until movement is complete?&lt;/p&gt;&#xA;" OwnerUserId="20624" LastEditorUserId="20624" LastEditDate="2018-06-22T00:07:19.943" LastActivityDate="2018-06-22T00:07:19.943" Title="Algorithm for orientation (pan/tilt) towards a moving point" Tags="&lt;kinematics&gt;&lt;computer-vision&gt;&lt;cameras&gt;&lt;algorithm&gt;&lt;movement&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15908" PostTypeId="1" AcceptedAnswerId="15909" CreationDate="2018-06-23T16:18:33.853" Score="1" ViewCount="103" Body="&lt;p&gt;Why would iRobot provide the serial port and Open Interface serial protocol in their residential models? I understand making their Create2 product STEM friendly. But why spend the extra cost for the same hardware/software in the residential models? I mean, I am glad they do! I am just curious about the business model.&lt;/p&gt;&#xA;" OwnerUserId="20634" LastActivityDate="2018-06-24T03:21:41.810" Title="Why does roomba provide the OI serial protocol?" Tags="&lt;irobot-create&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15909" PostTypeId="2" ParentId="15908" CreationDate="2018-06-24T03:15:21.737" Score="2" Body="&lt;p&gt;It has been on models going back before the 400 series. In fact the Create 2 is just a reconditioned Roomba 650 with the brushes removed, no special firmware&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It Can also be used to run diagnostics which is probably its original purpose as most of the parts are easily replaceable such as drive wheel motor assemblies... they even use captive screws &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It also provides a means to update the Roomba firmware &lt;/p&gt;&#xA;" OwnerUserId="19572" LastEditorUserId="19572" LastEditDate="2018-06-24T03:21:41.810" LastActivityDate="2018-06-24T03:21:41.810" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15910" PostTypeId="2" ParentId="15701" CreationDate="2018-06-24T09:22:20.473" Score="0" Body="&lt;p&gt;What you're referring to is called a deadbeat observer. &#xA;The problem with these deadbeat observers/controllers is that there is a bandwidth/sensitivity trade off which basically means that raising the bandwidth will improve the transient response but will result in higher noise sensitivity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is easier to see in SISO systems where you can compute the close loop sensitivity and complementary sensitivity transfer functions, look at their Bode plots and see the noise sensitivity raises as the bandwidth gets higher.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can read about this &quot;waterbed effect&quot; here (it's control oriented but it's basicallt the same):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.cds.caltech.edu/~murray/amwiki/Frequency_Domain_Design&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.cds.caltech.edu/~murray/amwiki/Frequency_Domain_Design&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="20631" LastActivityDate="2018-06-24T09:22:20.473" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15912" PostTypeId="1" CreationDate="2018-06-24T12:55:32.270" Score="-1" ViewCount="366" Body="&lt;p&gt;I have been trying to build a robotic arm using a PCA9685 servo controller, a 6-axis robotic arm, and a raspberry pi model b+. &#xA;I wired them all together accordingly but &lt;strong&gt;&lt;em&gt;I have no idea how to actually control the arm through the raspberry pi.&lt;/em&gt;&lt;/strong&gt;&#xA;&lt;strong&gt;&lt;em&gt;I know python&lt;/em&gt;&lt;/strong&gt; but don't know the instructions to move the arm. can anyone help with this? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;thank you&lt;/p&gt;&#xA;" OwnerUserId="20638" LastEditorUserId="37" LastEditDate="2018-08-16T09:07:29.987" LastActivityDate="2021-01-06T02:00:50.050" Title="controlling 6-axis robotic arm with raspberry pi, what instructions can do this?" Tags="&lt;raspberry-pi&gt;&lt;rcservo&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="15914" PostTypeId="1" AcceptedAnswerId="15918" CreationDate="2018-06-24T21:55:21.413" Score="-1" ViewCount="58" Body="&lt;p&gt;I feel this is the most appropriate exchange for this question I hope someone could bring some insight into an area I know very little about. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to find a way to detect and log the time which an object enters and leaves a specific area. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The area would need to be defined in a 3 dimensional way and the object would be made specifically for the purpose of being detected. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks for any help. &lt;/p&gt;&#xA;" OwnerUserId="20644" LastActivityDate="2018-06-25T05:00:58.150" Title="How to create a 3D zone which detects the presence of an object?" Tags="&lt;sensors&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15915" PostTypeId="1" AcceptedAnswerId="15917" CreationDate="2018-06-25T01:32:43.907" Score="2" ViewCount="92" Body="&lt;p&gt;I am working on an Autonomous underwater vehicle (AUV), and I do not know how to localize an acoustic source underwater &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that I will use an array of hydrophones but how can actually get the position of the acoustic source&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-are there any available commercial chips for acoustic signal processing?&#xA;-are there any available books discussing that topic technically?&#xA;-is there any known strategy for underwater acoustic source localization?&lt;/p&gt;&#xA;" OwnerUserId="15380" LastActivityDate="2018-06-25T02:05:02.050" Title="How to localize an acoustic source underwater with a hydrophone array" Tags="&lt;localization&gt;&lt;underwater&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15916" PostTypeId="1" AcceptedAnswerId="15932" CreationDate="2018-06-25T01:56:49.487" Score="7" ViewCount="1271" Body="&lt;p&gt;I am currently googling on this topic but I would like to hear your opinion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the best self-contained SE3 library that offers interconversion between quaternion, rotation vector, transformation matrix?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Those are the functions that I often use for my projects and all implemented in Matlab. And I am looking for an alternative to avoid re-implementing them all in python.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Quaternion2RotVector and its inverse&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Quaternion2RotMatrix and its inverse&lt;/p&gt;&#xA;&#xA;&lt;p&gt;RotMatrix2RotVector and its inverse&lt;/p&gt;&#xA;&#xA;&lt;p&gt;SE3 inverse, the inverse function of each rotation representation &lt;/p&gt;&#xA;" OwnerUserId="19219" LastEditorUserId="19219" LastEditDate="2018-06-25T22:48:25.920" LastActivityDate="2021-05-27T21:44:54.223" Title="What is the best SE3 library for python?" Tags="&lt;kinematics&gt;&lt;computer-vision&gt;" AnswerCount="5" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15917" PostTypeId="2" ParentId="15915" CreationDate="2018-06-25T02:05:02.050" Score="2" Body="&lt;p&gt;The simplest answer would be to use the phase difference to calculate the direction -- rotate your array until all sensors get the same phase, and you've found the direction to the source (or do some calculations based on the phase difference -- this does not require any mechanical movement).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the distance -- use two separate arrays and triangulate the position from the two angles. If you don't have two arrays -- use the left and right half of the same array to calculate angles and go from there, the precision might suffer a bit, though.&lt;/p&gt;&#xA;" OwnerUserId="20571" LastActivityDate="2018-06-25T02:05:02.050" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15918" PostTypeId="2" ParentId="15914" CreationDate="2018-06-25T05:00:58.150" Score="0" Body="&lt;p&gt;one of the ways to do this is by using the military way i.e. by using 3D Radars. But, it is quite difficult and expensive to build one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But one of the cheaper and more interesting way is by using Beacons. Beacons are small devices used mostly for indoor mapping and tracking. You can place minimum 3-4 beacons in your room which will transmit BLE and WiFi signals. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The object you say which will enter the room will have a WiFi and BLE scanner or a sensor, which will connect to these signals. Depending upon the RSSI i.e. the Received Signal Strength from each of the beacons you can identify the location of your object. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This method is called Triangulation Method. &#xA;&lt;a href=&quot;https://i.stack.imgur.com/64nwP.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/64nwP.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ESP32 is one of the best device you can use for this. You can find some details &lt;a href=&quot;http://www.cs.toronto.edu/~trein/csc2228/files/report.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can also use accelerometer and gyroscope sensors to map the positioning. You can find some reference here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://pdfs.semanticscholar.org/cd3d/88d9f942deb245d5797a2135d3dfa757da13.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://pdfs.semanticscholar.org/cd3d/88d9f942deb245d5797a2135d3dfa757da13.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.diva-portal.org/smash/get/diva2:475619/FULLTEXT02.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.diva-portal.org/smash/get/diva2:475619/FULLTEXT02.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="20603" LastActivityDate="2018-06-25T05:00:58.150" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="15919" PostTypeId="2" ParentId="15916" CreationDate="2018-06-25T06:51:52.950" Score="3" Body="&lt;p&gt;I wrote my own and learned useful things about numpy and python object initialization in the process. I don't regret it.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2018-06-25T06:51:52.950" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15921" PostTypeId="2" ParentId="15027" CreationDate="2018-06-25T15:51:47.227" Score="1" Body="&lt;p&gt;The transfer function in the simulink sketch serves as a pre-filter. In general, pre-filters are used to smooth the input since step reference signals are’nt logical for tracking (tracking step command will require infinite accelerations).&#xA;Most of the time these filter are chosen as the close loop desired transfer function. Working this way creates a reference model for tracking and prevents integrator windup and derivative induced saturations in PID controllers.&#xA;If you want to implement one in Matlab/Simulink you can design a continues reference model and then use the c2d command in Matlab which transforms continues systems into discrete systems given some sampling frequency.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Good luck!&lt;/p&gt;&#xA;" OwnerUserId="20631" LastActivityDate="2018-06-25T15:51:47.227" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15922" PostTypeId="2" ParentId="15485" CreationDate="2018-06-25T20:22:03.000" Score="0" Body="&lt;p&gt;I have had success in fooling the Roomba into thinking I have disconnected, which causes it to wake up when I &quot;reconnect&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My project uses the battery out lines from the mini-DIN, if you temporarily break this connection it causes the Roomba to wake when Vout is reconnected. &lt;/p&gt;&#xA;" OwnerUserId="20597" LastActivityDate="2018-06-25T20:22:03.000" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15923" PostTypeId="2" ParentId="15603" CreationDate="2018-06-26T11:15:02.387" Score="0" Body="&lt;p&gt;Depending on how wide your field of view needs to be, having two of &lt;a href=&quot;http://shop-orbbec3d-com.3dcartstores.com/Astra-Mini_p_40.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;those cameras&lt;/a&gt; can provide pretty satisfactory results for indoor mapping with the range you mentioned. An Odroid XU4 board has enough power to compute the pointclouds for two of those cameras which you would relay to your main computer (using ROS) where the computation of the 3d map is done.&lt;/p&gt;&#xA;" OwnerUserId="4429" LastActivityDate="2018-06-26T11:15:02.387" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15924" PostTypeId="1" CreationDate="2018-06-26T11:35:45.007" Score="1" ViewCount="63" Body="&lt;p&gt;I'm building a multi-agent system, and I heard about multi-robot systems.&#xA;Can anyone explain the differences between multi-agent and multi-robot systems, and when to use one or the other?&lt;/p&gt;&#xA;" OwnerUserId="20660" LastEditorUserId="4310" LastEditDate="2018-06-26T16:31:38.553" LastActivityDate="2018-06-27T22:14:57.777" Title="Multi-agent vs multi-robot systems" Tags="&lt;multi-agent&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15927" PostTypeId="2" ParentId="15912" CreationDate="2018-06-26T15:19:14.360" Score="0" Body="&lt;p&gt;Any robotics project has the following basic components:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Sensors&lt;/li&gt;&#xA;&lt;li&gt;Actuators&lt;/li&gt;&#xA;&lt;li&gt;Brains (RPi)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;If you could list these out it would be easier to answer, but to put it crudely:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Get data:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Get some sort of position data of your arm from a sensor. This &#xA;data could be an angle of the arm, in the simplest case, or it could be &#xA;a higher dimensional state vector consisting of mutliple angles, &#xA;angular velocities etc. in the case of multi link manipulators.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Formulate your control:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Any sort of robotic system needs a control law to drive the system's &#xA;state to where you want it to be i.e. move the arm where you want it to&#xA;go. For this you can use a variety of control methods ranging from &#xA;linear (PID), optimal (LQR), robust (SMC, H_inf), nonlinear (Feedback &#xA;Linearisation), intelligent (fuzzy, neural) and adaptive control. &#xA;However keep in mind that theory and practice are vastly different.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Implement your control:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;After formulating your control law, and making sure it actually does &#xA;what its supposed to (by simulation), you need to translate the &#xA;mathematical equations and laws to code, in any language of your &#xA;choice, so that the brains can run it.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This is pretty much all you need to do (please correct me if I'm missign something), and I wont get into the implementation aspects of it too much but here's some things to keep in mind:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Multi link robots are highly nonlinear systems, and the &quot;right way&quot; to control them is either to linearise the system, or to use nonlinear control  (&lt;a href=&quot;http://journals.sagepub.com/doi/10.1177/027836498500400205&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://journals.sagepub.com/doi/10.1177/027836498500400205&lt;/a&gt;). However I believe that in practical use, PID works fine almost always and although this is not the right way to do it, if you just want something that works..&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Sensors are noisy, and you will never get any good clean data, so knowledge about filters is a &lt;em&gt;really&lt;/em&gt; useful thing to have, but again you can get away with using libraries made by other people.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Theoretical tuning methods never work, as your dynamic model is almost always far off from the real thing. So use heurestic methods, and there are a lot of these for PID.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="20664" LastEditorUserId="20664" LastEditDate="2018-06-26T15:27:07.223" LastActivityDate="2018-06-26T15:27:07.223" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15930" PostTypeId="1" CreationDate="2018-06-27T18:36:50.013" Score="0" ViewCount="338" Body="&lt;p&gt;I'm planning to create a Raspberry Pi robot to map a room. I intend to use a &lt;a href=&quot;https://en.wikipedia.org/wiki/Monte_Carlo_localization&quot; rel=&quot;nofollow noreferrer&quot;&gt;particle filtering algorithm&lt;/a&gt; as one of the central points of the project, that will allow me to work out my position relative to a 'beacon'. This beacon will be placed near the centre of the room and the robot needs to be able to work out the distance from itself to the beacon, accurate to within &amp;lt;1 metre. The direction to the beacon doesn't matter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm struggling to work out what technology I should use for the beacon. It could be powered by a portable battery, and it needs to work fairly well through table/chair legs (I don't expect it to work through a wall though).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've considered:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Infra-Red&lt;/li&gt;&#xA;&lt;li&gt;Ultrasound&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.electronicdesign.com/communications/what-s-difference-between-measuring-location-uwb-wi-fi-and-bluetooth&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ultra-Wide-Band&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Wifi networks&lt;/li&gt;&#xA;&lt;li&gt;Bluetooth&lt;/li&gt;&#xA;&lt;li&gt;Image analysis to determine range from known object (won't work through table/chairs)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Is there a way to determine the distance from the robot to a fixed point? If so, what is the best way?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;This question is not a duplicate of &lt;a href=&quot;https://robotics.stackexchange.com/questions/7128/determining-a-robots-distance-from-a-certain-point-when-the-robots-position-is&quot;&gt;this question&lt;/a&gt;, even though they look similar. I want a distance to an object, the other question is about tracking movement.&lt;/p&gt;&#xA;" OwnerUserId="20672" LastActivityDate="2018-08-29T15:01:28.203" Title="How can I get the distance from a robot to a beacon?" Tags="&lt;mobile-robot&gt;&lt;sensors&gt;&lt;slam&gt;&lt;ultrasonic-sensors&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15931" PostTypeId="2" ParentId="15930" CreationDate="2018-06-27T19:46:01.050" Score="0" Body="&lt;p&gt;Light and radio waves travel too fast, you'll need a very precise measurement to get the distance, coupled with expensive equipment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ultrasound, on the other hand is cheap, travels at the speed of ~300m/s, sensors are cheap and the results can be analysed using entry-level micro-controllers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would put an emitter on the robot, and make the beacon to send a reply every time it hears the request from the robot. This should take care of the situation with reflections and robot receiving its own signal.&lt;/p&gt;&#xA;" OwnerUserId="20571" LastActivityDate="2018-06-27T19:46:01.050" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15932" PostTypeId="2" ParentId="15916" CreationDate="2018-06-27T21:32:57.367" Score="5" Body="&lt;p&gt;ROS's tf.transformations.py has self-contained code for doing these functions and can be used without installing ros.  In fact, the python code only depends on numpy!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/ros/geometry/blob/indigo-devel/tf/src/tf/transformations.py&quot; rel=&quot;noreferrer&quot;&gt;transformations.py&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="20670" LastActivityDate="2018-06-27T21:32:57.367" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15933" PostTypeId="2" ParentId="15924" CreationDate="2018-06-27T22:14:57.777" Score="2" Body="&lt;p&gt;In general - robots refer to real or simulated mechanical systems, whereas an agent could be a physical or non-physical entity like a chatbot program or neural net.  &lt;/p&gt;&#xA;" OwnerUserId="20670" LastActivityDate="2018-06-27T22:14:57.777" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15934" PostTypeId="1" AcceptedAnswerId="15935" CreationDate="2018-06-27T22:56:32.227" Score="0" ViewCount="29" Body="&lt;p&gt;I'm building a quadcopter and I'm finding that certain electronic boards are heating up beyond what I believe the heat should be.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this case I hooked up the video transmitter and then tested it. The board gets extremely hot. &lt;strong&gt;Is this normal?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also noticed the electronic boards for the motors seem excessively hot as well. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Everything else seems to be either cool or warm to the touch, but nothing like the two afore mentioned electronic boards.&lt;/p&gt;&#xA;" OwnerUserId="19752" LastActivityDate="2018-06-28T07:01:36.907" Title="Excessive Heat Coming From Video Transmitter and Motor Electronic Boards" Tags="&lt;quadcopter&gt;&lt;motor&gt;&lt;electronics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15935" PostTypeId="2" ParentId="15934" CreationDate="2018-06-28T07:01:36.907" Score="1" Body="&lt;p&gt;All boards come with data-sheets which should list the temperature range of operation for the given board. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Several video transmitter can become quite hot, thus it is recommend to have them into airflow even in static testing. Aggravating factors might be bad antenna, or non optimal power voltage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Concerning the other board it's unclear if you are speaking of a power splitter or the ESCs.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2018-06-28T07:01:36.907" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15938" PostTypeId="1" AcceptedAnswerId="15940" CreationDate="2018-06-28T14:59:57.817" Score="3" ViewCount="178" Body="&lt;p&gt;I am in the starting phase of building a fairly large octo-copter drone. I am currently thinking about the possibility of powering my octo-copter design using 4 separate batteries where each battery powers 2 motors each, in order to get around the problem of the large current that would pass through the single central line (causing heat and voltage drop etc.) if I where to connect all batteries in parallel. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For sure there would always be a slight voltage difference between each battery and if you keep flying for too long you are gonna get one battery that runs out before the others, but I am theorizing that it shouldn't really matter as long as I make sure never to completely exhaust any of the batteries. The flight controller should compensate for the lower voltage provided to each engine. That is my theory at least. I saw a video of these guys doing the Hobbyking Beer-lift challenge with a really large drone, and they seemed to be using something that seems to be 4 separate circuits, one for each motor. Has anybody done something similar to this, or have any experiences about if it's a good idea or not?&lt;/p&gt;&#xA;" OwnerUserId="20681" LastEditorUserId="18235" LastEditDate="2018-07-02T17:11:22.220" LastActivityDate="2019-11-21T10:23:57.677" Title="Powering multicopter with multiple dedicated batteries" Tags="&lt;quadcopter&gt;&lt;battery&gt;&lt;power&gt;&lt;multi-rotor&gt;&lt;circuit&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15939" PostTypeId="2" ParentId="15938" CreationDate="2018-06-28T15:33:40.480" Score="0" Body="&lt;p&gt;There's nothing wrong with your idea. You may build your copter with multiple batteries and it would work just fine, provided you do everything right.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only thing I would like to raise is, that your stated goal (getting rid of the heat and voltage drop) has absolutely nothing to do with this design choice. Using multiple batteries you'll get exactly same heat, and exactly same voltage drop, provided you use similar wires in both cases.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From my point of view, building an octocopter with separate batteries is reasonable if you want to solve the problem of one or two motors/controllers dying mid-flight and still being able to pilot the thing and land it safely.&lt;/p&gt;&#xA;" OwnerUserId="20571" LastActivityDate="2018-06-28T15:33:40.480" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15940" PostTypeId="2" ParentId="15938" CreationDate="2018-06-28T19:06:58.837" Score="1" Body="&lt;p&gt;I agree with lenik first statement, you idea is totally sound.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also your grounding to not have all the current drained passing through a single 'hub' is sound as otherwise you will need this central hub to be able to handle the total current drained which would result in extra weight.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The two drawbacks of your solutions that I see are as follow:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;changing battery pack is going to be more tedious than in the case you could have snapped several battery together &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;as your copter is not going to be perfectly balanced and symmetrical, you will have one pair of motors draining its battery faster than the other, this will reduce your flight time &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="18235" LastEditorUserId="18235" LastEditDate="2018-06-29T09:18:51.670" LastActivityDate="2018-06-29T09:18:51.670" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15942" PostTypeId="1" CreationDate="2018-06-28T21:34:55.497" Score="0" ViewCount="93" Body="&lt;p&gt;One of the simple tricks in getting high performance for a global 3D point cloud registration is combining &quot;3D feature matching + ICP&quot;. For example FPFH matching + RANSAC for initial pose estimation and ICP for pose refinement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know a good reference paper for this method? I am referring to this method in my paper but don't know who first proposed it.&lt;/p&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2018-09-25T08:52:24.217" Title="Any reference for &quot;3D feature matching + ICP&quot;?" Tags="&lt;slam&gt;&lt;computer-vision&gt;&lt;3d-reconstruction&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15947" PostTypeId="1" CreationDate="2018-06-29T11:43:16.040" Score="0" ViewCount="99" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/4Ih04.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4Ih04.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;The intended purpose of the arm is to pick and place chess pieces. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am planing to make a 3 DoFs system (only using 2 joints mounted on a revolving turntable), the link structure should be composed of  rectangular pieces of acrylic sheet. My chessboard is 28cm x 28cm. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know how to calculate the length of the 2 links so that the robotic arm end-effector can reach each and every square. &lt;/p&gt;&#xA;" OwnerUserId="18892" LastEditorUserId="18892" LastEditDate="2018-06-30T05:56:40.533" LastActivityDate="2018-09-02T18:56:13.357" Title="Dimensioning a robotic arm for playing Chess" Tags="&lt;robotic-arm&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15948" PostTypeId="2" ParentId="15947" CreationDate="2018-06-29T13:25:01.240" Score="1" Body="&lt;p&gt;There are probably nice mathematical solutions, but they would require knowing the size of the chessboard and the placing of the arm. My personal opinion is that 3 DoF isn't enough.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I'd do is to cut up and old box and make a fake 2d version of your arm and see if you can reach every square. Make the sections oversized so that you can cut them down as you test.&lt;/p&gt;&#xA;" OwnerUserId="19275" LastActivityDate="2018-06-29T13:25:01.240" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="15949" PostTypeId="2" ParentId="15766" CreationDate="2018-06-29T21:24:18.210" Score="1" Body="&lt;p&gt;If you only want to measure torque for a motor when it's not in a system, then you can do it the old-fashioned way. You'll need an extra servo horn, a light stick (about 25 cm), string, a small bucket that can be tied onto the string, and some small precision weights (you can make these out of fishing weights if you're careful).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fasten a stick to the servo horn so that the center of the stick is at the center of the horn where the motor axle will be. Then exactly 10 cm out from the center of the horn, drill a small hole to tie a string to.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Weigh the small bucket and the string together. This is your first weight. Tie the string to the bucket, then tie it to the stick.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Set the motor so the stick is horizontal. Use a servo controller to move the motor. If it moves, then you need more weight. Add one of your weights, record how much weight is in the bucket, and then try to move the motor again. I would measure the weights in grams.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One the motor won't move, then multiply the total weights by 10, and you have the stall-torque in gram-cm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can do the same thing with fractional oz weights and put the hole in the stick at 5 inches from the center. You'll have to multiply by five to get the result in oz-inches.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This method has its own problems, but most of the necessary items are probably in your house or easily gotten. You'll need a precision scale to measure the weights.&lt;/p&gt;&#xA;" OwnerUserId="19275" LastActivityDate="2018-06-29T21:24:18.210" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15951" PostTypeId="2" ParentId="15947" CreationDate="2018-06-30T08:37:45.717" Score="0" Body="&lt;p&gt;If you place your mechanical arm between rows &lt;code&gt;4&lt;/code&gt; and &lt;code&gt;5&lt;/code&gt; or between columns &lt;code&gt;e&lt;/code&gt; and &lt;code&gt;d&lt;/code&gt;, the furthest point you have to reach would be sqrt(14^2 + (28+6)^2), which evaluates into 36.77cm, and I would say 2 pieces of 20cm would be almost enough, but just to be safe, I'd make 'em both 25cm and you may put it anywhere within 6cm from the board.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Material choice&lt;/strong&gt;. Acrylic is very fragile and prone to cracking. The weight of the largest chess piece + the weight of all machinery (actuators, magnets, etc.) will easily crack it after a while. Use a more durable plastic instead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Design choice&lt;/strong&gt;. The arm you describe would be quite difficult to control, you have to move both joints at the same time with the different speeds, and if you miss and knock another piece off the board -- you lose the game. For speed-independent precise positioning I'd use X-Y table, something like this picture, where X and Y motions can be totally independent, precision is very high and you may easily put a few kilograms of equipment on the top and it will work.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/kyjsS.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kyjsS.png&quot; alt=&quot;XY table&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="20571" LastActivityDate="2018-06-30T08:37:45.717" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="15952" PostTypeId="2" ParentId="15930" CreationDate="2018-06-30T09:02:45.193" Score="0" Body="&lt;p&gt;There are a lot of ways to do so. But the one which I am more familiar with is by using the Received Signal Strength (RSSI) method. You can use the BLE/WiFi signal strength for the calculation of the distance. Go through this &lt;a href=&quot;https://stackoverflow.com/questions/20416218/understanding-ibeacon-distancing/20434019#20434019&quot;&gt;post&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can also use accelerometer and gyroscope sensors to map the positioning. You can find some reference here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://pdfs.semanticscholar.org/cd3d/88d9f942deb245d5797a2135d3dfa757da13.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://pdfs.semanticscholar.org/cd3d/88d9f942deb245d5797a2135d3dfa757da13.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.diva-portal.org/smash/get/diva2:475619/FULLTEXT02.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.diva-portal.org/smash/get/diva2:475619/FULLTEXT02.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="20603" LastActivityDate="2018-06-30T09:02:45.193" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15953" PostTypeId="1" AcceptedAnswerId="15973" CreationDate="2018-06-30T14:19:55.607" Score="1" ViewCount="139" Body="&lt;p&gt;I am working on EKF-MonoSlam (Davson) method for the mere input as a webcam, (it works &quot;fine&quot; if we calibrate and use reasonable sigmas) , and I am trying to add the odometry of some dataset (as rosbag) as in the reference (&lt;a href=&quot;https://github.com/rrg-polito/mono-slam&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/rrg-polito/mono-slam&lt;/a&gt;) &#xA; &lt;a href=&quot;https://i.stack.imgur.com/hIs1u.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hIs1u.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;so the odometry (estimated pose) is added so $V_k$ is to make $r_k$ right and so $\Omega_k$ (I know I could use velocity , but I need this working first) , that is supposed to make the camera in the right track as additional measurement, but what happens is:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the camera refuse many matches (as the projection of it is wrong),and soon drift and get lost.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Why is that? and How to fix it?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;the dataset site says that odometry data is not calibrated , so I am thinking that it maybe need some scale parameters to make the image estimate of pose match with odometry estimates, if so, &lt;strong&gt;how to find that scale&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;any help or reference ,would be appreciated ,Thank you&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;now I am using velocity of odometry as input and it's better (still there's errors), any link to code or explanation of adding odometrey (as control not measurement) to compare how it goes would be appreciated , this is really a headache in c++...&lt;/p&gt;&#xA;" OwnerUserId="17186" LastEditorUserId="17186" LastEditDate="2018-07-02T17:39:49.780" LastActivityDate="2018-07-04T09:13:18.503" Title="Why adding odometry data as control vectors to EKF-Monoslam algorithm fails?" Tags="&lt;ros&gt;&lt;ekf&gt;&lt;odometry&gt;&lt;calibration&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15954" PostTypeId="1" CreationDate="2018-06-30T17:11:46.067" Score="1" ViewCount="613" Body="&lt;p&gt;I've been trying to run robot_state_publisher and joint_state_publisher on a remote TX1 running Ubuntu 16.04 and ROS Kinetic. When running the node from a local launch file (manually ssh into the remote machine and run launch file), everything runs fine. However, when I try to run a launch file from my local machine (launches nodes from remote machine using the &amp;lt; machine &gt; tag), I get this error in my terminal:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;[192.168.1.237-0]: [robot_state_publisher-28] process has died [pid&#xA;  26798, exit code 255, cmd&#xA;  /opt/ros/kinetic/lib/robot_state_publisher/state_publisher&#xA;  __name:=robot_state_publisher log:=/home/nvidia/.ros/log/038bfbd8-7afb-11e8-b9f2-ac220b57ae89/robot_state_publisher-28.log].&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;log file: &#xA;  /home/nvidia/.ros/log/038bfbd8-7afb-11e8-b9f2-ac220b57ae89/robot_state_publisher-28*.log&#xA;  [192.168.1.237-0]:  [joint_state_publisher-27] process has died [pid&#xA;  26780, exit code 1, cmd&#xA;  /opt/ros/kinetic/lib/joint_state_publisher/joint_state_publisher&#xA;  __name:=joint_state_publisher log:=/home/nvidia/.ros/log/038bfbd8-7afb-11e8-b9f2-ac220b57ae89/joint_state_publisher-27.log].&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;log file:&#xA;  /home/nvidia/.ros/log/038bfbd8-7afb-11e8-b9f2-ac220b57ae89/joint_state_publisher-27*.log&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;How can I fix this? Here's my launch file:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;launch&amp;gt;&#xA;&#xA;    &amp;lt;!-- ROS parameters --&amp;gt;&#xA;    &amp;lt;!-- remote machine (wheatley) --&amp;gt;&#xA;&#xA;&#xA;    &amp;lt;group&amp;gt;&#xA;        &amp;lt;machine name=&quot;wheatley&quot; address=&quot;192.168.1.237&quot; env-loader=&quot;/home/nvidia/catkin_ws/devel/env.sh&quot; user=&quot;nvidia&quot; password=&quot;nvidia&quot; default=&quot;true&quot; /&amp;gt;&#xA;        &amp;lt;include file=&quot;freenect.launch&quot;/&amp;gt;&#xA;                    &amp;lt;arg name=&quot;depth_registration&quot; value=&quot;true&quot; /&amp;gt;&#xA;                    &amp;lt;arg name=&quot;publish_tf&quot; value=&quot;false&quot; /&amp;gt;&#xA;        &amp;lt;include file=&quot;mpu_9250.launch&quot; /&amp;gt;&#xA;&#xA;        &amp;lt;arg name=&quot;model&quot; default=&quot;wheatley.urdf&quot;/&amp;gt;&#xA;&#xA;        &amp;lt;param name=&quot;robot_description&quot; command=&quot;$(find xacro)/xacro --inorder $(arg model)&quot;/&amp;gt;&#xA;&#xA;&#xA;        &amp;lt;node name=&quot;joint_state_publisher&quot; pkg=&quot;joint_state_publisher&quot; type=&quot;joint_state_publisher&quot; /&amp;gt;&#xA;                &amp;lt;param name=&quot;use_gui&quot; value=&quot;false&quot; /&amp;gt;&#xA;        &amp;lt;node name=&quot;robot_state_publisher&quot; pkg=&quot;robot_state_publisher&quot; type=&quot;state_publisher&quot; /&amp;gt;&#xA;            &amp;lt;param name=&quot;use_gui&quot; value=&quot;false&quot; /&amp;gt;&#xA;&#xA;&#xA;            &amp;lt;!-- IMU frame: just over the RGB camera --&amp;gt;&#xA;            &amp;lt;!--node pkg=&quot;tf&quot; type=&quot;static_transform_publisher&quot; name=&quot;rgb_to_imu_tf&quot; args=&quot;0 0.0 0 0.0 0.0 0.0 /sensor_link /imu_link 50&quot; /--&amp;gt;&#xA;&#xA;            &amp;lt;arg name=&quot;pi/2&quot; value=&quot;1.5707963267948966&quot; /&amp;gt;&#xA;            &amp;lt;arg name=&quot;optical_rotate&quot; value=&quot;0 0 0 0 0 0&quot; /&amp;gt;&#xA;            &amp;lt;node pkg=&quot;tf&quot; type=&quot;static_transform_publisher&quot; name=&quot;optical_rotation&quot; args=&quot;$(arg optical_rotate) /sensor_link /camera_link 50&quot; /&amp;gt; &#xA;&#xA;        &amp;lt;include file=&quot;rtabmap.launch&quot;&amp;gt;&#xA;            &amp;lt;arg name=&quot;rtabmap_args&quot; value=&quot;--delete_db_on_start&quot;/&amp;gt;&#xA;        &amp;lt;/include&amp;gt;&#xA;    &amp;lt;/group&amp;gt;&#xA;&#xA;&amp;lt;/launch&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Here's the error traceback on the robot:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Traceback (most recent call last):&#xA;  File &quot;/home/nvidia/catkin_ws/src/joint_state_publisher/joint_state_publisher/joint_state_publisher&quot;, line 474, in &amp;lt;module&amp;gt;&#xA;    jsp = JointStatePublisher()&#xA;  File &quot;/home/nvidia/catkin_ws/src/joint_state_publisher/joint_state_publisher/joint_state_publisher&quot;, line 149, in __init__&#xA;    robot = xml.dom.minidom.parseString(description)&#xA;  File &quot;/usr/lib/python2.7/xml/dom/minidom.py&quot;, line 1928, in parseString&#xA;    return expatbuilder.parseString(string)&#xA;  File &quot;/usr/lib/python2.7/xml/dom/expatbuilder.py&quot;, line 940, in parseString&#xA;    return builder.parseString(string)&#xA;  File &quot;/usr/lib/python2.7/xml/dom/expatbuilder.py&quot;, line 223, in parseString&#xA;    parser.Parse(string, True)&#xA;TypeError: Parse() argument 1 must be string or read-only buffer, not None&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;**EDIT: ** Here's the error from robot-state-publisher:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;[ERROR] [1530379066.805335879]: Could not find parameter robot_description on parameter server&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="20693" LastEditorUserId="20693" LastEditDate="2018-06-30T17:34:20.723" LastActivityDate="2018-06-30T17:34:20.723" Title="ROS: joint_state_publisher dies when used in remote launch file" Tags="&lt;mobile-robot&gt;&lt;ros&gt;&lt;slam&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15958" PostTypeId="1" CreationDate="2018-07-02T16:17:50.080" Score="0" ViewCount="77" Body="&lt;p&gt;I have built an InMoov Robot. The tablet I got for his controller is too slow. I am currently using a laptop to control him across a usb cable. I want to get rid of the usb cable. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was thinking of using the embedded tablet as one end of the link (slave), and the laptop as the other. That should give me the speed of the laptop without the usb Cable. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can this be done?  How?&lt;/p&gt;&#xA;" OwnerUserId="20703" LastActivityDate="2021-04-18T02:53:17.713" Title="Can a tablet be slaved to a laptop to act as a wireless usb?" Tags="&lt;mobile-robot&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15960" PostTypeId="2" ParentId="15958" CreationDate="2018-07-02T20:01:28.617" Score="0" Body="&lt;p&gt;It should be possible to program the tablet to do this, but you might have to create your own app to do this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're not using the tablet for anything else, it might be easier to use a raspberry pi zero-w to do this. In a Linux environment it is easy to program servers like this in the language of your choice. I'd use rust, but Python, C/C++, Go, or Java will do the job also. And I'm sure that I've only scratched the surface (pun fully intended). There are multiple serial libraries, depending on the language you finally choose.&lt;/p&gt;&#xA;" OwnerUserId="19275" LastActivityDate="2018-07-02T20:01:28.617" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15961" PostTypeId="1" CreationDate="2018-07-02T21:09:08.613" Score="2" ViewCount="166" Body="&lt;p&gt;I need help with a robotisation project, please.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am new to robotics and have the &lt;a href=&quot;https://www.hpiracing.co.uk/piw.php?partNo=MV12505&quot; rel=&quot;nofollow noreferrer&quot;&gt;Maverick RC car&lt;/a&gt; pictured below:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/ybU06.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ybU06.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My project is to add &lt;strong&gt;&lt;em&gt;Arduino&lt;/em&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;em&gt;Raspberry Pi&lt;/em&gt;&lt;/strong&gt; boards to control the speed and direction of the car. So, the hand held control was thrown out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I started by hooking up my Arduino to the front servo marked &lt;strong&gt;9&lt;/strong&gt; in the diagram and I can successfully move the wheels to specific angles by using the examples like &lt;code&gt;servo.write(180);&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;My problem is the drive wheels.&lt;/strong&gt; I have no idea how to power the wheels from the LiPo battery and use the Arduino to control the speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm open to and would welcome any help, please.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After further consultation of the RC cars' specifications, the rear drive is controlled by a &lt;em&gt;MM-25 brushed motor&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My problem is how do I interface with the &lt;strong&gt;MM-25&lt;/strong&gt; using my Arduino as it's wired into the RC car?&#xA;&lt;a href=&quot;https://i.stack.imgur.com/28k7D.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/28k7D.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So far, I have connected my Arduino to the brushless motor by the same connection it uses to connect to the &lt;em&gt;Transmitter/Receiver&lt;/em&gt;. I'm running the same servo code which worked for turning the servo(front) wheels but I get no response from the rear wheels.&#xA;My code is below:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;Servo.h&amp;gt;&#xA;&#xA;const int servo_pin = 9;&#xA;Servo servo;&#xA;&#xA;void setup()&#xA;{&#xA;  Serial.begin(9600);&#xA;  servo.attach(servo_pin);&#xA;}&#xA;&#xA;void loop()&#xA;{&#xA;  servo.write(180);&#xA;  delay(1000);&#xA;&#xA;  servo.write(-180);&#xA;  delay(1000);&#xA;&#xA;  /*servo.write(-180);&#xA;  delay(1000);*/&#xA;&#xA;  /*servo.write(180);&#xA;  delay(1000);*/&#xA;&#xA;  /*for(int pos=0; pos &amp;lt;= 180; pos+=25){&#xA;    servo.write(pos);&#xA;    Serial.print(&quot;Moving to: &quot;);&#xA;    Serial.println(pos);&#xA;    delay(1000);&#xA;  }*/&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="14355" LastEditorUserId="14355" LastEditDate="2018-07-03T17:38:57.083" LastActivityDate="2018-08-04T21:46:31.493" Title="Robotics RC Car hack help" Tags="&lt;mobile-robot&gt;&lt;arduino&gt;&lt;autonomous-car&gt;" AnswerCount="3" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15962" PostTypeId="1" CreationDate="2018-07-02T22:21:02.957" Score="1" ViewCount="97" Body="&lt;p&gt;There are multiple ways to update new pose in iterative pose optimization problem. The easiest one we often find in papers in robotics is as &lt;/p&gt;&#xA;&#xA;&lt;p&gt;SO3 + translation&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Update on right&#xA;\begin{equation}&#xA;\begin{split}&#xA;\textbf {R}' &amp;amp;= \textbf{R} \textbf{e}^{[\boldsymbol{\omega}]&#xA;_\times}, \textbf {t}' = \textbf{t} + \delta\textbf{t}&#xA;\end{split}&#xA;\end{equation}&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Update on left&#xA;\begin{equation}&#xA;\begin{split}&#xA;\textbf {R}' &amp;amp;= \textbf{e}^{[\boldsymbol{\omega}]&#xA;_\times}\textbf{R} , \textbf {t}' = \textbf{t} + \delta\textbf{t}&#xA;\end{split}&#xA;\end{equation}&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $\delta\textbf{t}\in R^3, \boldsymbol{\omega}\in R^3$ are estimated update on the pose with $\textbf{R}\in SO(3),\textbf{t}\in R^2$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But there are other ways as well, such as&lt;/p&gt;&#xA;&#xA;&lt;p&gt;SE3 Matrix update&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Right side update $\textbf {T}'=\delta\textbf{T}\textbf{T}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;\begin{equation}&#xA;\begin{split}&#xA;\textbf {T}' &amp;amp;=\delta\textbf{T} \textbf{T}=&#xA;\begin{bmatrix}&#xA; \textbf{e}^{[\boldsymbol{\omega}]&#xA;_\times}&amp;amp;\delta\textbf{t} \\ &#xA;\textbf{0}&amp;amp;1&#xA;\end{bmatrix}&#xA;\begin{bmatrix}&#xA; \textbf{R}&amp;amp;\textbf{t} \\ &#xA;\textbf{0}&amp;amp;1  &#xA;\end{bmatrix}&#xA;=\begin{bmatrix}&#xA; \textbf{e}^{[\boldsymbol{\omega}]&#xA;_\times}\textbf{R}&amp;amp;\textbf{} \delta\textbf{t}+\textbf{e}^{[\boldsymbol{\omega}]&#xA;_\times}\textbf{t} \\ &#xA;\textbf{0}&amp;amp;1&#xA;\end{bmatrix}&#xA;\end{split}&#xA;\label{eq:disp} &#xA;\end{equation}&lt;/p&gt;&#xA;&#xA;&lt;p&gt;\begin{equation}&#xA;\begin{split}&#xA;\textbf {T}' &amp;amp;=   \textbf{e}^{[\boldsymbol{\xi}]_\times} \textbf{T}=&#xA;\begin{bmatrix}&#xA; \textbf{e}^{[\boldsymbol{\omega}]&#xA;_\times}&amp;amp;\textbf{V} \delta\textbf{t} \\ &#xA;\textbf{0}&amp;amp;1&#xA;\end{bmatrix}&#xA;\begin{bmatrix}&#xA; \textbf{R}&amp;amp;\textbf{t} \\ &#xA;\textbf{0}&amp;amp;1  &#xA;\end{bmatrix}&#xA;=\begin{bmatrix}&#xA; \textbf{e}^{[\boldsymbol{\omega}]&#xA;_\times}\textbf{R}&amp;amp;\textbf{V} \delta\textbf{t}+\textbf{e}^{[\boldsymbol{\omega}]&#xA;_\times}\textbf{t} \\ &#xA;\textbf{0}&amp;amp;1&#xA;\end{bmatrix}&#xA;\end{split}&#xA;\end{equation}&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Left side update $\textbf {T}'=\textbf{T}\delta\textbf{T}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;\begin{equation}&#xA;\begin{split}&#xA;\textbf {T}' &amp;amp;=  \textbf{T}\delta \textbf{T}=\begin{bmatrix}&#xA; \textbf{R}&amp;amp;\textbf{t} \\ &#xA;\textbf{0}&amp;amp;1  &#xA;\end{bmatrix}&#xA;\begin{bmatrix}&#xA; \textbf{e}^{[\boldsymbol{\omega}]&#xA;_\times}&amp;amp;\delta\textbf{t} \\ &#xA;\textbf{0}&amp;amp;1&#xA;\end{bmatrix}&#xA;=\begin{bmatrix}&#xA; \textbf{R}\textbf{e}^{[\boldsymbol{\omega}]&#xA;_\times}&amp;amp;\textbf{R}\delta\textbf{t}+\textbf{t} \\ &#xA;\textbf{0}&amp;amp;1&#xA;\end{bmatrix}&#xA;\end{split}&#xA;\end{equation}&lt;/p&gt;&#xA;&#xA;&lt;p&gt;\begin{equation}&#xA;\begin{split}&#xA;\textbf {T}' &amp;amp;=  \textbf{T}\textbf{e}^{[\boldsymbol{\xi}]&#xA;_\times}=\begin{bmatrix}&#xA; \textbf{R}&amp;amp;\textbf{t} \\ &#xA;\textbf{0}&amp;amp;1  &#xA;\end{bmatrix}&#xA;\begin{bmatrix}&#xA; \textbf{e}^{[\boldsymbol{\omega}]&#xA;_\times}&amp;amp;\textbf{V} \delta\textbf{t} \\ &#xA;\textbf{0}&amp;amp;1&#xA;\end{bmatrix}&#xA;=\begin{bmatrix}&#xA; \textbf{R}\textbf{e}^{[\boldsymbol{\omega}]&#xA;_\times}&amp;amp;\textbf{R}\textbf{V} \delta\textbf{t}+\textbf{t} \\ &#xA;\textbf{0}&amp;amp;1&#xA;\end{bmatrix}&#xA;\end{split}&#xA;\end{equation}&lt;/p&gt;&#xA;&#xA;&lt;p&gt;se3 6x1 pose update($\boldsymbol{\mathfrak{I}}^{-1}$ could be left or right jacobian)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;\begin{equation}&#xA;\boldsymbol{\xi}'=\boldsymbol{\xi} + \boldsymbol{\mathfrak{I}}^{-1}\boldsymbol{\xi}&#xA;\end{equation}&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is that which one is most stable or prefered.&#xA;If you know any reference toward this problem, please let me know.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="19219" LastEditorUserId="19219" LastEditDate="2018-07-07T23:48:49.960" LastActivityDate="2018-07-07T23:48:49.960" Title="How to update a new pose in iterative pose optimization problem?" Tags="&lt;slam&gt;&lt;computer-vision&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15964" PostTypeId="1" AcceptedAnswerId="15968" CreationDate="2018-07-03T06:23:18.893" Score="2" ViewCount="144" Body="&lt;p&gt;I am trying to design a robotic hand that is able to adaptively grasp unfamiliar objects. I am initially thinking that using OpenCV for pose estimation might make doing so easier. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming that I am able to successfully estimate the pose of an object, how might I go about finding the initial contact points for each finger on the object? (or how does each finger know where to go in order to grasp the object?)&lt;/p&gt;&#xA;" OwnerUserId="16481" LastEditorUserId="9176" LastEditDate="2018-07-03T19:45:20.740" LastActivityDate="2021-01-02T21:05:56.687" Title="Robotic Hand Grasp Planning - How do I find the initial contact point for each finger when grasping an object?" Tags="&lt;computer-vision&gt;&lt;opencv&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15968" PostTypeId="2" ParentId="15964" CreationDate="2018-07-03T15:40:40.587" Score="4" Body="&lt;p&gt;This is an excellent question that is currently being explored directly by field experts. Here are some of the latest publications that consider the problem you are encountering:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://journals.sagepub.com/doi/10.1177/0278364907087172&quot; rel=&quot;nofollow noreferrer&quot;&gt;Robotic Grasping of Novel Objects using Vision&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.researchgate.net/publication/318138977_Direct_Perception_and_Action_Decision_for_Unknown_Object_Grasping&quot; rel=&quot;nofollow noreferrer&quot;&gt;Direct Perception and Action Decision for Unknown Object Grasping&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://ieeexplore.ieee.org/document/7953305/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Realtime plane detection for projection Augmented Reality in an unknown environment&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://ieeexplore.ieee.org/document/7744414/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Estimation of easily visible position for unknown object grasping&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The first item here considers an interesting application of supervised learning. Since we can't rely on our object detection algorithm to classify our object, we can instead seek to learn high probability grasping points.&lt;/p&gt;&#xA;&lt;p&gt;The other three papers I included may simply be of additional interest, but I won't get into their details here. I do strongly recommend giving them a read.&lt;/p&gt;&#xA;&lt;p&gt;If you provide more details on your specific problem (i.e. where the camera is in relation to the hand, what is the view angle available by the camera, etc.) and let us know what you have tried/considered in detail, then I would be happy to give the specific problem a go and edit my answer accordingly (This likely should have been a comment, but I don't have that privilege yet).&lt;/p&gt;&#xA;" OwnerUserId="20709" LastEditorUserId="21531" LastEditDate="2021-01-02T21:05:56.687" LastActivityDate="2021-01-02T21:05:56.687" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15969" PostTypeId="2" ParentId="10701" CreationDate="2018-07-03T16:57:37.133" Score="2" Body="&lt;p&gt;The authors of the paper you supplied give two reasons (as I see it) for not using gyroscopes. The first is that the gyroscopes are subject to a maximum angular velocity. The second is the power consumption. In regards to both, only you will be able to determine whether or not these two short comings will affect you. That being stated, those two issues will not be a problem in most applications. Assuming that they don't affect your application, then I recommend using an IMU that comes with gyro measurements in addition to the linear acceleration (and if possible magnetometer for more accurate heading).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After the hardware consideration has been sorted out, you need to determine whether or not the noise from your measurements is Gaussian (normally distributed) or not. If so, you should consider, as the other answers have suggested, a &lt;a href=&quot;https://en.wikipedia.org/wiki/Kalman_filter&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Kalman Filter&quot;&gt;Kalman Filter&lt;/a&gt; (Use original for linear data, Unscented or Extended for non-linear). If your noise does not follow a normal distribution, then you will need to look into non-parametric approaches such as &lt;a href=&quot;https://en.wikipedia.org/wiki/Particle_filter&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Particle Filter&quot;&gt;Particle Filters&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The next issue to consider once that is done, is the numerical integration. This is a very tough problem and unfortunately, there is no true solution. Numerical integration is not just prone to error, but essentially guarantees that the result will not be exact, even when dealing with non-noisy data. When you try performing numerical integration on noisy data, the error that you will see in your system explodes. As a result, we can only hope to reduce our error as much as possible to delay the onset of debilitating drift. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For your numerical integration technique, I suggest switching from using the trap rule to using &lt;a href=&quot;https://en.wikipedia.org/wiki/Simpson%27s_rule&quot; rel=&quot;nofollow noreferrer&quot;&gt;Simpson's Rule&lt;/a&gt;. You typically get more accurate results with Simpson's and so your error from integration won't be quite as bad.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a side note, an idea that I think is really cool, but didn't seem to really take off anywhere is the use of neural networks in numerical integration (&lt;a href=&quot;https://ieeexplore.ieee.org/document/1644707/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Numerical integration based on a neural network algorithm&lt;/a&gt;). I would suggest sticking with Simpson's rule, but if you have the time, you may want to try following what the authors present.&lt;/p&gt;&#xA;" OwnerUserId="20709" LastEditorUserId="20709" LastEditDate="2018-07-04T07:59:16.723" LastActivityDate="2018-07-04T07:59:16.723" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15970" PostTypeId="1" AcceptedAnswerId="15972" CreationDate="2018-07-04T02:13:27.177" Score="4" ViewCount="316" Body="&lt;p&gt;I've read this link: &lt;a href=&quot;https://answers.ros.org/question/217475/cmakeliststxt-vs-packagexml/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://answers.ros.org/question/217475/cmakeliststxt-vs-packagexml/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But still, I can't understand very clearly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I try to compile ROS project with the command: &lt;code&gt;catkin_make --install&lt;/code&gt;, how and when is the package.xml used? how and when is the CMakeLists.txt used? Both of them must be used?&lt;/p&gt;&#xA;" OwnerUserId="20463" LastActivityDate="2018-07-04T19:27:05.327" Title="CMakeLists.txt vs package.xml" Tags="&lt;ros&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15972" PostTypeId="2" ParentId="15970" CreationDate="2018-07-04T07:36:47.130" Score="2" Body="&lt;p&gt;Regarding &lt;a href=&quot;http://wiki.ros.org/catkin/CMakeLists.txt&quot; rel=&quot;nofollow noreferrer&quot;&gt;CMakeLists.txt&lt;/a&gt;, it &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;is the input to the CMake build system for building software packages.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You can think of this file as simply being a list of the cmake build targets and commands for your specific package. It may help to read &lt;a href=&quot;https://cmake.org/overview/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this to get a general idea&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For &lt;a href=&quot;http://wiki.ros.org/catkin/package.xml&quot; rel=&quot;nofollow noreferrer&quot;&gt;package.xml&lt;/a&gt;, it &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;defines properties about the package such as the package name, version numbers, authors, maintainers, and dependencies on other catkin packages.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt; According to an answer in &lt;a href=&quot;https://answers.ros.org/question/202322/how-do-i-write-packagexml/&quot; rel=&quot;nofollow noreferrer&quot;&gt;How do I write package.xml?&lt;/a&gt; the package.xml is used during the install process to help resolve dependencies. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are missing any dependencies and they are not listed in the package.xml file before running &lt;code&gt;catkin_make --install&lt;/code&gt;, then your build will either fail or not work as expected.&lt;/p&gt;&#xA;" OwnerUserId="20709" LastEditorUserId="20709" LastEditDate="2018-07-04T19:27:05.327" LastActivityDate="2018-07-04T19:27:05.327" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15973" PostTypeId="2" ParentId="15953" CreationDate="2018-07-04T09:13:18.503" Score="0" Body="&lt;p&gt;The Focal length is measured in pixel (in projection equation) and,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;the standard unit for length (odometery) in ros is meter ,...so after making sure of the units of your data and the proper initialization of the first frame (of camera and odometrey) noticing that:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Odometrey usually taken as &quot;robot-based&quot; measurement not world-based,&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;it all came down to solving geometrical transformations. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;(after applying this to my problem , the errors are now ok)&lt;/p&gt;&#xA;" OwnerUserId="17186" LastActivityDate="2018-07-04T09:13:18.503" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15976" PostTypeId="1" AcceptedAnswerId="15982" CreationDate="2018-07-05T12:46:49.663" Score="0" ViewCount="280" Body="&lt;p&gt;I am looking for the specification of UR3, peak torque and rpm.&lt;/p&gt;&#xA;" OwnerUserId="18078" LastActivityDate="2018-07-05T15:08:22.250" Title="Which motors are specifically used for UR3 (Universal robot arm)" Tags="&lt;robotic-arm&gt;&lt;manipulator&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2018-07-05T15:36:56.137" ContentLicense="CC BY-SA 4.0" />
  <row Id="15978" PostTypeId="1" AcceptedAnswerId="15980" CreationDate="2018-07-05T13:02:49.000" Score="0" ViewCount="26" Body="&lt;p&gt;&lt;strong&gt;The problem&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to be able to move the direction a laser is pointing. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This means I need to have motorised rotation of the laser head in the x direction and in the y direction. I am unsure of the best way to do this. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Currently 6 axis motorised stages are available from Thorlabs but cost on the order of £7000. This is also overkill for what I need. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Long explanation&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm a physicist and I'm building an experimental set up. I work on nanoparticles that have implications for optoelectronics &amp;amp; solar cells. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm currently making an automated system to test samples which are roughly 15cm by 15cm (and have the nanoparticles on them). I need to scan the laser across the whole sample, taking measurements at specific coordinates on the sample. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The laser is coupled to an optical fibre - we can assume the light is collimated. How best do I raster the laser light around the sample? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there some sort of computer controlled jig which might be able do this, are there better solutions? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hopefully the setup can be entirely robotic - i.e. I place the the sample in, and all the measurements are automated - I'm struggling with automating the laser direction. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some further details &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The laser must stay fixed in position i.e. it is only allowed to pan&#xA;and tilt. i,e a simple x y stage of the same dimensions of the sample would not be appropriate. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Almost any amount of jitter is allowed when the laser moves. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The speed of operation is not important.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The laser does NOT need to remain perpendicular. All that matters is the spot hits a rough area (say around 2-3 cm by 2-3 cm). &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="20732" LastEditorUserId="20732" LastEditDate="2018-07-05T17:43:35.973" LastActivityDate="2018-07-05T17:43:35.973" Title="Motorised Stage for laser" Tags="&lt;control&gt;&lt;kinematics&gt;&lt;servomotor&gt;&lt;stepper-motor&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15979" PostTypeId="2" ParentId="9372" CreationDate="2018-07-05T14:36:07.337" Score="1" Body="&lt;p&gt;If you choose to use real time object detection, consider the two following:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://web.stanford.edu/class/cs231a/prev_projects_2016/deep-drone-object__2_.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Deep Drone: Object Detection and Tracking for Smart Drones on Embedded Systems&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://pjreddie.com/darknet/yolo/&quot; rel=&quot;nofollow noreferrer&quot;&gt;YOLO: Real-Time Object Detection&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The first is a project out of Stanford that is highly relevant to your project. They consider the use of a few different object detection strategies. The strategy I would recommend for your application is listed in the second bullet point. The YOLO object detector (now on version 3) is currently state of the art. Assuming you don't have powerful computing devices available to your UAV, you can use the YOLOv3-tiny. It is very quick, although at the cost of accuracy, but I expect it will be good enough for your application. You will be able to use one of these methods in real-time and in multiple environments if your training data set is robust enough.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additionally, you can integrate a good object detection strategy within your SLAM technique. As a result, it would not be redundant.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On a side note, practical, real-time object detection wasn't truly first achieved until about two years ago (YOLOv1 and MultiBox SSD). As a result, there are new possibilities that haven't yet been fully explored, so I say have fun with it! &lt;/p&gt;&#xA;" OwnerUserId="20709" LastActivityDate="2018-07-05T14:36:07.337" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15980" PostTypeId="2" ParentId="15978" CreationDate="2018-07-05T14:54:19.770" Score="1" Body="&lt;p&gt;You have several options, and which you select might depend not only on cost, but also on the requirements for your system which you haven’t stated.  For example, how much jitter is allowed while the laser moves?  How fast must it move?  Does the laser need to stay perpendicular to the target sample?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The easiest solution to implement, if the laser does not need to keep its angle to the target constant, would be a pan-tilt mechanism.  You can find these with steppers or servo motor controllers.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another solution is a two-axis stage.  This would keep the axis of the laser consistent while translating it across the target.  Many stages like this can be found online.  Again, they can come with steppers, servos, or even pneumatic controls.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, you could keep the laser aligned with and translating across the target by implementing a series of piezo-controlled mirrors.  This is pretty common in laser research, but could be complex to implement.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2018-07-05T14:54:19.770" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15981" PostTypeId="1" AcceptedAnswerId="15996" CreationDate="2018-07-05T15:03:01.240" Score="1" ViewCount="1322" Body="&lt;p&gt;I want to write a Matlab function which takes the DH parameters as input and outputs a 4X4 transformation matrix.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The code I have written is :&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;function  [A]  = compute_dh_matrix(r, alpha, d, theta)&#xA;&#xA;A = eye(4);&#xA;&#xA;% ROTATION FOR X&#xA;A(1,1) = cos((theta));&#xA;A(2,1) = sin((theta));&#xA;&#xA;% ROTATION FOR Y &#xA;A(1,2) = -(sin(theta))*(cos(alpha))*(1);&#xA;A(2,2) = (cos(theta))*(cos(alpha));&#xA;A(3,2) = (sin(alpha));&#xA;&#xA;% ROTATION FOR Z&#xA;A(1,3) = (sin(theta))*(sin(alpha));&#xA;A(2,3) = -(cos(theta))*(sin(alpha))*(1);&#xA;A(3,3) = (cos(alpha));&#xA;&#xA;% TRANSLATION VECTOR&#xA;A(1,4) = (alpha)*(cos(theta));&#xA;A(2,4) = (alpha)*(sin(theta));&#xA;A(3,4) = d;&#xA;&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But when I submit the code for evaluation in an online platform it prompts that &lt;strong&gt;&lt;em&gt;variable A has incorrect value&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of the input data used for evaluation of the code is :&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;r = 5;&#xA;alpha = 0;&#xA;d = 3;&#xA;theta = pi/2;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The matrix representation I have used to write the code is :&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$A =$ \begin{bmatrix}cos(\theta)&amp;amp;&amp;amp;-\sin(\theta)\cos(\alpha)&amp;amp;&amp;amp;\sin(\theta)\sin(\alpha)&amp;amp;&amp;amp;\alpha \cos(\theta)\\\sin(\theta)&amp;amp;&amp;amp;\cos(\theta)\cos(\alpha)&amp;amp;&amp;amp;-\cos(\theta)\sin(\alpha)&amp;amp;&amp;amp;\alpha \sin(\theta)\\0&amp;amp;&amp;amp;\sin(\alpha)&amp;amp;&amp;amp;\cos(\alpha)&amp;amp;&amp;amp;d\\0&amp;amp;&amp;amp;0&amp;amp;&amp;amp;0&amp;amp;&amp;amp;1\end{bmatrix}&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;A&lt;/strong&gt; is the transformation matrix generated using DH parameters $\theta$, $\alpha$ and &lt;strong&gt;d&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\alpha$ &lt;em&gt;is&lt;/em&gt; angle about common normal from old z axis to new z axis&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\theta$ &lt;em&gt;is&lt;/em&gt; angle about previous z axis, from old x axis to new x axis&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;d&lt;/strong&gt; &lt;em&gt;is&lt;/em&gt; offset along previous z axis to the common normal&lt;/p&gt;&#xA;" OwnerUserId="20690" LastEditorUserId="7610" LastEditDate="2018-07-07T12:06:05.357" LastActivityDate="2018-07-07T12:06:05.357" Title="Transformation matrix using DH parameters" Tags="&lt;robotic-arm&gt;&lt;forward-kinematics&gt;&lt;dh-parameters&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15982" PostTypeId="2" ParentId="15976" CreationDate="2018-07-05T15:08:22.250" Score="1" Body="&lt;p&gt;The &lt;a href=&quot;https://www.universal-robots.com/media/240787/ur3_us.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;technical specs&lt;/a&gt; sheet publicly provided by Universal Robots doesn't list the RPM or peak torque. When this is the case, I find it beneficial to simply call the manufacturer/developer for more technical information. Fortunately, at the bottom of the technical specs sheet, a phone number is provided.&lt;/p&gt;&#xA;" OwnerUserId="20709" LastActivityDate="2018-07-05T15:08:22.250" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15983" PostTypeId="1" AcceptedAnswerId="15991" CreationDate="2018-07-05T15:58:25.790" Score="0" ViewCount="64" Body="&lt;p&gt;I am trying to implement Graph Slam. For tutorial purpose I read the paper &quot;The GraphSlam Algorithm with Application to Large-Scale Mapping of Urban Structures&quot; by Sebastian Thrun. At the beginning of this paper in abstract portion there is a line which arise doubt. &quot;It then reduces this&#xA;graph using variable elimination techniques, arriving at a lowerdimensional&#xA;problems that is then solved using conventional optimization&#xA;techniques&quot;. &lt;code&gt;What is that variable elimination technique? Which variable they want to eliminate?&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the same paper &quot;Table 3. Algorithm for Reducing the Size of the Information Representation of the Posterior in GraphSLAM&quot;. &lt;code&gt;What is the meaning of this algorithm? What kind of data we calculate here?&lt;/code&gt; Paper Link &lt;a href=&quot;http://robots.stanford.edu/papers/thrun.graphslam.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;The GraphSLAM Algorithm&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am eagerly looking for the answer of those question because after read this paper it is very difficult to understand the theory of GraphSlam.&lt;/p&gt;&#xA;" OwnerUserId="20610" LastEditorUserId="20709" LastEditDate="2018-07-06T14:54:28.437" LastActivityDate="2018-07-06T16:23:42.233" Title="GraphSlam doubt about variable elimination technique" Tags="&lt;mobile-robot&gt;&lt;slam&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15984" PostTypeId="1" CreationDate="2018-07-05T16:51:46.727" Score="2" ViewCount="188" Body="&lt;p&gt;I am trying to use a PID loop to control a motor. This is my first attempt at creating a PID loop (really just a PI loop). There doesn't exist a model for this system, and I don't know how to create one. All that I mention below may be an incorrect approach, so please guide me on the correct one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My goal, is to set a percentage velocity, and have the motor run at the velocity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My only feedback is degrees of movement, which I have correlated to an acceptable input -&gt; output ratio. Meaning, without any resistance, if I have moved 50 degrees in 250mS that is considered 100% velocity. 25 degrees = 50% etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As mentioned in another thread here, I've experimented with setting waypoints for the PID controller. That is, if I were moving at 100% velocity, I set a waypoint that is 50 degrees away from the last one, every 250mS. This appears to be working fine under non problematic angles. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is, if I am at a lower speed, such as the 50% velocity. There are certain angles where the proportional gain is not enough, and the motor is stuck. I've tried experimenting with how I modify the waypoints, and modifying Ki and Kp. I could enumerate them here, though I don't think it's worth it, as I think I have some fundamental misunderstanding on how to do this. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So to give an overview of my current structure in pseudo code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;while (1) &#xA;{&#xA;    if firstRun or 250ms elapsed&#xA;        targetPosition = currentPosition + scaledVelocityValue&#xA;&#xA;    if 10mS elapsed&#xA;        calculatePID()&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In this case, the currentPosition is not be the previous targetPosition, and therefore the speed is always constant. I've tried using the previous targetPosition, but that creates an unstable system because it's such a large increase. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope this makes some sense. Some guidance please. &lt;/p&gt;&#xA;" OwnerUserId="20734" LastActivityDate="2019-01-22T08:39:54.273" Title="PID loop to control motor velocity with disturbances" Tags="&lt;motor&gt;&lt;pid&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="15986" PostTypeId="1" CreationDate="2018-07-05T20:39:29.203" Score="0" ViewCount="33" Body="&lt;p&gt;I'm trying to figure out how to make a remote control lawn mower, and I'm stuck questioning one critical part&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm in the process of buying 2 wheelchair motors that accept both 12 and 24volts which are 60 and 120 rpms which will be wired into a motor controller that also powers a receiver for the transmitter&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The question I have is the motor controller, does it have to be a dual motor controller or can I pass with just a general motor controller capable of handling 12volts and can a 12volt car battery be ran to the motor controller or would it need to be regulated down to a lower voltage, I've seen videos on people using the sabre tooth dual motor controller, I'm just wondering why their all limited to one controller&lt;/p&gt;&#xA;" OwnerUserId="20735" LastActivityDate="2018-07-06T00:55:23.280" Title="Lawn mower project" Tags="&lt;wiring&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15987" PostTypeId="2" ParentId="15986" CreationDate="2018-07-06T00:55:23.280" Score="1" Body="&lt;p&gt;I think you're asking why the Sabertooth motor controllers are popular?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They are very good motor controllers with good manuals. They have an excellent support department.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another good company that produces similar motor controllers is &quot;RobotClaw.&quot;&lt;/p&gt;&#xA;" OwnerUserId="19275" LastActivityDate="2018-07-06T00:55:23.280" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15988" PostTypeId="2" ParentId="10770" CreationDate="2018-07-06T06:54:46.687" Score="2" Body="&lt;p&gt;Based on two different company's sensors for use in autonomous cars - yes they do interfere. And honestly, I am not sure what is going to happen when you have 30 cars in an intersection, the noise will be horrendous and they will not work. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Radar systems from certain makers do not have this problem because they put &quot;squark ids&quot; in their signals which are quite unique and mitigate this issue.I would think you could do similar with the Lidar signal, but they dont. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my opinion. Lidars are &lt;em&gt;not&lt;/em&gt; a good idea for autonomous vehicles. Not just for the above problem, but there are about a dozen unsolved issues with them in the use of moving, high vibration environments. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are using Lidars. Test extremely thoroughly, especially on mobile systems. For alternatives: Solid State Lidar, mmWave Radar, and depth sensors (various types).&lt;/p&gt;&#xA;" OwnerUserId="20737" LastActivityDate="2018-07-06T06:54:46.687" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15990" PostTypeId="1" AcceptedAnswerId="15993" CreationDate="2018-07-06T14:54:01.717" Score="2" ViewCount="55" Body="&lt;p&gt;I am trying to implement GraphSlam from &lt;a href=&quot;http://robots.stanford.edu/papers/thrun.graphslam.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this paper&lt;/a&gt;. I have some doubt regarding the algorithm described in this paper at table2: Algorithm GraphSLAM_linearize. &lt;a href=&quot;https://i.stack.imgur.com/jWU7O.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/jWU7O.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a doubt in line 7. As per my knowledge, Gt is a 3*3 matrix. How could I subtract 1 from a 3*3 matrix? As per matrix subtraction rule both matrices should be in same dimension. &lt;/p&gt;&#xA;" OwnerUserId="20610" LastEditorUserId="20709" LastEditDate="2018-07-06T16:08:05.447" LastActivityDate="2018-07-06T20:39:02.370" Title="GraphSlam Matrix Subtraction doubt" Tags="&lt;mobile-robot&gt;&lt;slam&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="15991" PostTypeId="2" ParentId="15983" CreationDate="2018-07-06T16:23:42.233" Score="1" Body="&lt;p&gt;The variables being removed are the 'features', i.e.,the observations from the robot. Section 3.4 in the paper discusses the variable elimination in a good amount of detail (especially figure 3). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason for this elimination is to reduce the information representation from &lt;em&gt;between poses and features&lt;/em&gt; to &lt;em&gt;between poses&lt;/em&gt;. After the removal, the information matrix only propagates information between the poses,greatly reducing the size and complexity of the graph.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To put it very simply, imagine there are two poses $x_1$ and $x_2$ from both of which one feature $f$ is being observed. Now you have two links (edges), one between $x_1$ and $f$ and one between $x_2$ and $f$, representing the observation. The variable elimination technique will remove these two links and eliminate $f$ altogether, but whatever changes were being made to $x_1$ and $x_2$ will now instead be stored in the edge between $x_1$ and $x_2$. The way this change is performed inside the information matrix (which encodes these links) is shown in an algorithmic way in table 3. The data computed in table 3, thus, is a &lt;em&gt;smaller&lt;/em&gt; information matrix and the corresponding information vector.&lt;/p&gt;&#xA;" OwnerUserId="10310" LastActivityDate="2018-07-06T16:23:42.233" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="15992" PostTypeId="2" ParentId="15894" CreationDate="2018-07-06T16:24:10.907" Score="1" Body="&lt;p&gt;For your first question, $F(x, j)$ is a $6 * 3N + 3$ dimensional matrix. Why? $F(x, j)$ is a factor of $H_t^i$. The reason $H_t^i$ is a $3 * 3N + 3$ matrix is because of the problem set up. We are concerned with $N$ landmarks and a 3 dimensional state $[x\ \ y\ \ \theta]$. I recommend re-reading over page 319 of the book, especially points 10.18, 10.19, and 10.20 (its too long for me to post here).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For your second question, look on slide 34, second bullet, of &lt;a href=&quot;http://ais.informatik.uni-freiburg.de/teaching/ws12/mapping/pdf/slam04-ekf-slam.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;EKF SLAM&lt;/a&gt;. Low $H_t^i$ is &lt;strong&gt;not&lt;/strong&gt; the same thing as $H_t^i$. In the second bullet, we see that the derivation of $H_t^i$ is exactly the same as Thrun et al. writes in the book (page 314). See that the low $H_t^i * F(x,j)$ is the factorization of the derivative, $H_t^i$ (as mentioned above).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a side note, the &lt;a href=&quot;http://ais.informatik.uni-freiburg.de/teaching/ws12/mapping/pdf/slam04-ekf-slam.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;slides&lt;/a&gt; you posted come with a recorded lecture that is freely available on YouTube, thanks to the author of &lt;a href=&quot;http://ais.informatik.uni-freiburg.de/teaching/ws13/mapping/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this course&lt;/a&gt;. The lectures provide more insightful guidance through the material than just a read. If you haven't already taken a look, it will be well worth the time.&lt;/p&gt;&#xA;" OwnerUserId="20709" LastActivityDate="2018-07-06T16:24:10.907" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15993" PostTypeId="2" ParentId="15990" CreationDate="2018-07-06T19:06:24.297" Score="3" Body="&lt;p&gt;That is not $[1 - G_t]$, it's $[1 \qquad -G_t]$ (exaggerating the space between the two elements. For all intents and purposes, consider $1$ to be the equivalent identity matrix, and $G_t$ is just a submatrix in this. Intuitively, in this case, $1$ would be $I_{3\times3}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In equation 7, the multiplication follows this order:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$(6 \times 3) * (3 \times 3) * (3 \times 6)$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Remember that the information matrix is not $(3\times3)$. It's a big, sparse matrix with non-zero submatrices along its diagonal, so adding a $(6\times6)$ matrix to that would mean you need to decompose the resulting matrix from equation 7 into submatrices that correspond to $\Omega$ at $x_t$ and $x_{t-1}$, etc.&lt;/p&gt;&#xA;" OwnerUserId="10310" LastEditorUserId="10310" LastEditDate="2018-07-06T20:39:02.370" LastActivityDate="2018-07-06T20:39:02.370" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="15996" PostTypeId="2" ParentId="15981" CreationDate="2018-07-07T12:04:42.563" Score="0" Body="&lt;p&gt;The multiplication factor in the translation terms should be the link length instead of the angle $\alpha$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That is, the translation should be $(r\cos\theta, r\sin\theta, d)$.&lt;/p&gt;&#xA;" OwnerUserId="7610" LastActivityDate="2018-07-07T12:04:42.563" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="15999" PostTypeId="1" AcceptedAnswerId="16000" CreationDate="2018-07-07T19:04:14.157" Score="0" ViewCount="167" Body="&lt;p&gt;I am building a robotic insect leg that would be actuated by 2 DC motors for pan and tilt motions. Total weight of the leg is about 1.5kg and 1m long (moment arm ~0.5m). Magnetic encoder would be used to determine position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This could be a very basic question but I have been searching for information regarding the wiring, control and suitable motor drivers to control the DC motors using Arduino to no avail. So any help would be greatly appreciated!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The two motors that I am using are Servocity's DC gearmotors that come with magnetic encoders:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) &lt;a href=&quot;https://www.servocity.com/23-rpm-hd-premium-planetary-gear-motor-w-encoder&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.servocity.com/23-rpm-hd-premium-planetary-gear-motor-w-encoder&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Will be used for tilt motion &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;2) &lt;a href=&quot;https://www.servocity.com/84-rpm-hd-premium-planetary-gear-motor-w-encoder&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.servocity.com/84-rpm-hd-premium-planetary-gear-motor-w-encoder&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Will be used for pan motion&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The commonly used motor driver L298N supports peak currents up to 2A but both these motors have stall current of 20A. The torque/ speed curve is provided but no additional information about the torque/ current curve is available so not able to straightforwardly determine the max current required when running at lower torque requirements.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;What would be a suitable motor drivers/ H-bridge that can be used with these two motors? Have already read up the few motor driver posts but doesn't seem to have that talks about max current of 20A.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Are there wiring diagrams available for these type of gearmotors? The most relevant topic found is this, but I have trouble completely understanding it: &lt;a href=&quot;https://robotics.stackexchange.com/questions/10653/need-super-basic-help-with-motor-encoder&quot;&gt;Need super-basic help with motor encoder&lt;/a&gt; &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="20746" LastActivityDate="2018-07-07T19:44:06.677" Title="Recommendations and Advice - Motor Driver for 12V Gear Motor with Magnetic Encoder" Tags="&lt;motor&gt;&lt;h-bridge&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16000" PostTypeId="2" ParentId="15999" CreationDate="2018-07-07T19:44:06.677" Score="0" Body="&lt;p&gt;You would need something like the &lt;a href=&quot;https://www.servocity.com/roboclaw-2x30a-motor-controller&quot; rel=&quot;nofollow noreferrer&quot;&gt;RoboClaw 2x30&lt;/a&gt; motor controller. This should work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;20 amps is a lot of current, which would cause a simple chip like the L298N to get too hot and then fry. Please do not even try this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For your second question, if you Google &quot;motor encoder tutorial&quot; you should be able to find a lot of information. You should read the RoboClaw user manual, because I think that it will take care of the encoders for you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These are also called rotary encoders. The basics is that these are A/B encoders which means that there are two output signals, A and B. These signals are the same, but offset by some amount.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Imagine that A and B are square waves with B pushed forward. So you get states like this:  A,B = LOW; A = HIGH, B = LOW; A,B = HIGH; A = LOW, B=HIGH; then the table repeats itself. By using interrupts you can detect each time one of the signals change and then figure out the angle traveled. From there you can calculate the distance traveled by the robot, theoretically.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of the many tutorials will explain this better than I can right now. It really is a lot simpler than I have described it, but that's how I think of it. &lt;/p&gt;&#xA;" OwnerUserId="19275" LastActivityDate="2018-07-07T19:44:06.677" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16001" PostTypeId="1" AcceptedAnswerId="16004" CreationDate="2018-07-07T22:57:00.203" Score="0" ViewCount="37" Body="&lt;p&gt;We are using Ethernet as our current control bus and are considering switching to CAN. Our main computing unit is a PC under Ubuntu which needs to be fitted with a CAN port.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyone can recommend a PC to CAN hardware interface?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any insight and experience feedback on using CAN on Ubuntu?&lt;/p&gt;&#xA;" OwnerUserId="763" LastActivityDate="2018-07-08T21:50:00.827" Title="How to install a CAN port on PC (under Ubuntu)" Tags="&lt;can&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16002" PostTypeId="1" AcceptedAnswerId="16009" CreationDate="2018-07-07T23:02:31.067" Score="2" ViewCount="208" Body="&lt;p&gt;We are using orocos on the robot we have been developing for 3 years now and I have the feeling that Orocos is no longer maintained and the mailing lists are not only no longer active but also it is no longer possible to subscribe to them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do you have more information about the state of orocos? Is it a dead project?&lt;/p&gt;&#xA;" OwnerUserId="763" LastActivityDate="2018-07-09T18:35:02.910" Title="Is orocos dead?" Tags="&lt;control&gt;&lt;orocos&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16003" PostTypeId="1" CreationDate="2018-07-08T11:14:25.517" Score="3" ViewCount="479" Body="&lt;p&gt;I have read &lt;em&gt;ROS 2&lt;/em&gt; document and they did not give many clues on the subject.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anybody have more insight on the subject?&lt;/p&gt;&#xA;" OwnerUserId="763" LastEditorUserId="18870" LastEditDate="2019-02-10T07:57:11.610" LastActivityDate="2019-02-10T07:57:11.610" Title="Is ROS 2 due to replace ROS 1?" Tags="&lt;ros&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16004" PostTypeId="2" ParentId="16001" CreationDate="2018-07-08T21:50:00.827" Score="3" Body="&lt;p&gt;For low cost, but well designed and well supported in linux,  I can recommend the  USB2CAN from 8Devices. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you will be booting windows occasionally to set up industrial drives or sensors, or doing real-time,  stick with Peak or Kvasser.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you will be adding a real-time kernel underneath Linux, check the driver list to confirm support for what you are buying.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CAN under linux with the socketCAN drivers works really nicely. &lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2018-07-08T21:50:00.827" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16006" PostTypeId="1" CreationDate="2018-07-09T11:50:16.230" Score="2" ViewCount="135" Body="&lt;p&gt;Let's consider two &lt;strong&gt;right handed frames&lt;/strong&gt; $\mathcal R_A$, with coordinate axes $i_A$, $j_A$ and $k_A$ and $\mathcal R_B$, with coordinate axes $i_B$, $j_B$ and $k_B$. Defining the rotation matrix $R^A_B$ as the change of basis matrix between base $A$ and base $B$, that is the orthogonal matrix whose columns are the components of unit vectors $i_B$, $j_B$ and $k_B$ with respect to frame $A$&#xA;$$R^A_B = \begin{pmatrix} i_B^\mathsf T i_A &amp;amp; j_B^\mathsf T i_A &amp;amp; k_B^\mathsf T i_A \\ &#xA;i_B^\mathsf T j_A &amp;amp; j_B^\mathsf T j_A &amp;amp; k_B^\mathsf T j_A \\&#xA;i_B^\mathsf T k_A &amp;amp; j_B^\mathsf T k_A &amp;amp; k_B^\mathsf T k_A \end{pmatrix} $$&#xA;allows to change representation of a point between frame $B$ and frame $A$.&#xA;For instance if $p^B$ is the position of a point represented in frame $B$, $p^A = R^A_B p^B$ is the position of the same point represented in frame $A$.&#xA;This is the so called alias (&quot;same&quot;) interpretation of the attitude matrix $R^A_B$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, the same matrix should represent also the &lt;strong&gt;rotation&lt;/strong&gt; that transforms frame $A$ into frame $B$, that is $i_B = R^A_B i_A$, $j_B = R^A_B j_A$ and $k_B = R^A_B k_A$, according to the so called alibi (&quot;elsewhere&quot;) interpretation of the same attitude matrix, because the vector is actually transformed into another vector by the rotation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which is the mathematic justification of these relations, given the definition of the matrix above?&#xA;I tried to explain it by myself, observing that the matrix can be decomposed as &#xA;$$R^A_B = \begin{pmatrix} i_A^\mathsf T \\  j_A^\mathsf T  \\  k_A^\mathsf T \end{pmatrix} \begin{pmatrix} i_B &amp;amp; j_B &amp;amp; k_B \end{pmatrix} =  \begin{pmatrix} i_A &amp;amp; j_A &amp;amp; k_A \end{pmatrix} ^ \mathsf T \begin{pmatrix} i_B &amp;amp; j_B &amp;amp; k_B \end{pmatrix} $$&#xA;equivalent to&#xA;$$ \begin{pmatrix} i_A &amp;amp; j_A &amp;amp; k_A \end{pmatrix} R^A_B = \begin{pmatrix} i_B &amp;amp; j_B &amp;amp; k_B \end{pmatrix}  $$&#xA;because all the matrices are orthogonal. In contrast, the equations $i_B = R^A_B i_A$, $j_B = R^A_B j_A$ and $k_B = R^A_B k_A$ might be gathered into&#xA;$$ \begin{pmatrix} i_B &amp;amp; j_B &amp;amp; k_B \end{pmatrix} = R^A_B \begin{pmatrix} i_A &amp;amp; j_A &amp;amp; k_A \end{pmatrix} $$ &#xA;which is a completely different equation, apparently.&#xA;This aspect is often overlooked in 3D kinematics textbooks, that usually begin directly with the &quot;change of representation point of view&quot;, taking for granted the &quot;rotation point of view&quot;. Can someone give me a hint please?&lt;/p&gt;&#xA;" OwnerUserId="13667" LastEditorUserId="13667" LastEditDate="2018-07-10T08:18:25.513" LastActivityDate="2018-07-10T08:18:25.513" Title="Equivalence of Alias and Alibi interpretation of Rotation Matrices" Tags="&lt;rotation&gt;&lt;frame&gt;" AnswerCount="0" CommentCount="3" FavoriteCount="1" ClosedDate="2018-07-23T13:11:36.053" ContentLicense="CC BY-SA 4.0" />
  <row Id="16007" PostTypeId="1" CreationDate="2018-07-09T13:19:36.680" Score="1" ViewCount="82" Body="&lt;p&gt;I have a case of a differential drive robot and a control system in a two-dimensional environment:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now the problem: we would like to make our particle move from point A to point B, and from there to point C (a spline-based path), in the most optimal time and constrain our acceleration, deacceleration, velocity, and angular speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How would one do this assuming that our control system allows us to control either velocity or acceleration? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The most important things here are names of mathematical methods behind this task and explanation of how to apply them.&lt;/p&gt;&#xA;" OwnerUserId="20751" LastActivityDate="2018-07-10T03:44:48.900" Title="Math behind trajectory 2d planning" Tags="&lt;control&gt;&lt;motion-planning&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16008" PostTypeId="2" ParentId="7877" CreationDate="2018-07-09T16:10:12.437" Score="1" Body="&lt;p&gt;The Kalman Gain term is derived in equation 25 (page 7) of &lt;a href=&quot;https://www.cs.unc.edu/~welch/kalman/media/pdf/Kalman1960.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;the paper&lt;/a&gt;. The paper doesn't explicitly use the term &quot;Kalman Gain&quot; as that term was coined after the fact. However, the paper &lt;em&gt;does&lt;/em&gt; refer to the principle as the &quot;optimal filtering&quot; on page 6 (just after equation 19). For details on its derivation, refer to the section titled &quot;Solution to the Wiener Problem&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the same section, we have the Kalman filter algorithm and its mathematical derivation. Although the discovery is extremely important and ground breaking, the paper hasn't aged well with respect to the computing community in regards to its use of notation and language. As a result, it is understandable that you may have missed it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you or anyone else reading this post has trouble with the mathematical derivation of the algorithm in the original paper, there are some good resources posted in the comments of the question.&lt;/p&gt;&#xA;" OwnerUserId="20709" LastActivityDate="2018-07-09T16:10:12.437" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16009" PostTypeId="2" ParentId="16002" CreationDate="2018-07-09T18:35:02.910" Score="4" Body="&lt;p&gt;The orocos software is available on github: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://github.com/orocos&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/orocos&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://github.com/orocos-toolchain&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/orocos-toolchain&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Their KDL repo has been updated as recent as 2 days ago so I would say it's not dead. Try logging an issue using github to contact the developers instead of the mailing lists. &lt;/p&gt;&#xA;" OwnerUserId="20670" LastActivityDate="2018-07-09T18:35:02.910" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16010" PostTypeId="2" ParentId="14028" CreationDate="2018-07-09T20:39:04.637" Score="0" Body="&lt;p&gt;Seems like you had same question as me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wrote my own answer &lt;a href=&quot;https://robotics.stackexchange.com/questions/15464/why-do-we-need-a-marginalization-in-bundle-adjustment&quot;&gt;here&lt;/a&gt; which will be the answer to your question 0, 1, 2.&lt;/p&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2018-07-09T20:39:04.637" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16011" PostTypeId="2" ParentId="16007" CreationDate="2018-07-10T03:44:48.900" Score="1" Body="&lt;p&gt;Keywords here are &lt;strong&gt;path-paramerization&lt;/strong&gt;, &lt;strong&gt;time-parameterization&lt;/strong&gt;, etc. Given a geometric path, these path-parameterization algorithms can give you the time-optimal velocity profile such that the robot moves along the path the fastest possible while respecting constraints.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://personalrobotics.ri.cmu.edu/files/courses/papers/Bobrow85-timeoptimal.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;original paper&lt;/a&gt; on this topic is by Bobrow, Dubowsky, and Gibson. This one is, in my opinion, really well written. It explains well the general idea how path-parameterization works.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nowadays, there are quite a few approaches to solving a time-parameterization problem (&lt;a href=&quot;https://lirias.kuleuven.be/bitstream/123456789/211749/1/07-208.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;convex optimization&lt;/a&gt;, &lt;a href=&quot;https://arxiv.org/pdf/1312.6533&quot; rel=&quot;nofollow noreferrer&quot;&gt;numerical integration&lt;/a&gt;, &lt;a href=&quot;https://arxiv.org/pdf/1707.07239.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;reachability analysis&lt;/a&gt;, etc.). You may refer to the paper and also references therein for more details on the methods and their corresponding implementation.&lt;/p&gt;&#xA;" OwnerUserId="7610" LastActivityDate="2018-07-10T03:44:48.900" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16012" PostTypeId="1" CreationDate="2018-07-10T08:35:37.400" Score="2" ViewCount="53" Body="&lt;p&gt;I would like to understand, how to calculate the forces/what all forces act on an object that is currently being gripped by a suction gripper and when it moves. Gravity is one, which will cause the object being gripped to fall, the angular velocity will try to move the object away from the eef, the suction force will try to retain the picked object. Is there a formula that ties all of these together and form a threshold, beyond which the gripped object will definitely fall.&lt;/p&gt;&#xA;" OwnerUserId="19947" LastActivityDate="2018-07-10T08:35:37.400" Title="How to calculate the forces acting on an object of mass 'm', which is vacuum gripped at the end of a robot arm?" Tags="&lt;robotic-arm&gt;" AnswerCount="0" CommentCount="2" ClosedDate="2018-07-12T14:20:50.253" ContentLicense="CC BY-SA 4.0" />
  <row Id="16015" PostTypeId="1" AcceptedAnswerId="16016" CreationDate="2018-07-10T18:34:47.553" Score="-2" ViewCount="67" Body="&lt;p&gt;I am soon going to finish my undergrad in mechatronics engineering and wish to take up robotics for my masters. But I absolutely dislike any form of coding/programming. I am however,interested in the mathematics and physics behind the working of a robot. I'd also love to study about the control systems in a robot. So is coding a requirement if I want to take up robotics?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS: I couldn't find the right tag for the question. Sorry! Please direct me to the right one if required.&lt;/p&gt;&#xA;" OwnerUserId="20760" LastActivityDate="2018-07-10T20:57:56.890" Title="Is Programming/Coding necessary to pursue a masters degree in robotics?" Tags="&lt;programming-languages&gt;" AnswerCount="2" CommentCount="1" ClosedDate="2018-07-11T15:53:07.233" ContentLicense="CC BY-SA 4.0" />
  <row Id="16016" PostTypeId="2" ParentId="16015" CreationDate="2018-07-10T18:47:28.773" Score="1" Body="&lt;p&gt;Is coding a &lt;strong&gt;&lt;em&gt;requirement&lt;/em&gt;&lt;/strong&gt; if you want to take up robotics? &lt;strong&gt;No&lt;/strong&gt;, &lt;em&gt;but&lt;/em&gt; it is strongly recommended. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The field of robotics is highly multidisciplinary. I primarily work on AUVs as a software developer, but my team consists of mechanical (ME), electrical (EE), and computer (CPE) engineers as well as physicists. Most of them don't look or write any of the code, but rather (as needed) assist the software developers in working out the mathematics for our acoustic systems, motor controllers, etc. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If that sounds like what you are interested in, then those opportunities definitely do exist, but they are slim. Most groups that do work with robotics (industry or academia) expect their members to be able to work directly with code to varying degrees. That could be MEs or physicists programming high-level controllers, EEs or CPEs programming microcontrollers, or working directly on the larger code base (architecture, planning, perception, etc.). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;With this in mind, I suggest giving programming another chance. Not everyone will enjoy programming, but I think most people who turn away from it just didn't have a good first experience to really be able to appreciate the beauty of computing.&lt;/p&gt;&#xA;" OwnerUserId="20709" LastActivityDate="2018-07-10T18:47:28.773" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16017" PostTypeId="1" AcceptedAnswerId="16024" CreationDate="2018-07-10T19:27:03.327" Score="1" ViewCount="3033" Body="&lt;p&gt;I am building a &lt;strong&gt;self balancing bot&lt;/strong&gt; using &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;MPU-6050&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Arduino Mea 2560&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;100 rpm 12V DC motors&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Currently I have used two 100 rpm DC motors in the bot. The pwm signal is given to the bot on the basis of the angle which the bot makes with the vertical(i-e angle of inclination). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Currently the bot isn't able to recover when tilted to about 40 degrees or when pushed hard. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as I understand the problem lies with the motors used.So, &lt;strong&gt;to make the bot more stable and to make it prevent on falling when pushed hard, what motors should be ued ?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Using stepper motors will be better or a DC motor with higher rpm rating (say 300 rpm) will be better ?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Stepper motors will provide certain advantages like rotations in it will be less affected by the variations in the voltage supply. Also stepper motors will provide more torque to balance the bot when tilted by larger angles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the stepper motors will cause mechancial vibrations, will this cause the bot to disbalance and hence making high rpm DC motors a better choice for it or still the stepper motors will be better (i-e the mechanical vibrations due to stepper motor won't have significant effects)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please help me to select better motors for the bot,&#xA;&lt;strong&gt;&lt;em&gt;300 rpm DC motors OR Stepper motors&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="20690" LastActivityDate="2018-12-21T16:37:15.180" Title="Which motor to use for self-balancing-bot?" Tags="&lt;arduino&gt;&lt;stepper-motor&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16018" PostTypeId="2" ParentId="16015" CreationDate="2018-07-10T20:57:56.890" Score="0" Body="&lt;p&gt;You can study and practice robotics control without dealing with much programming. Look at mechanical engineering or electrical engineering departments with a degree in control systems. Their programming course requirements will be listed in the curriculum.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will probably spend some time using MATLAB (simulink), Mathematica, or another similar language for numerical analysis. &lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2018-07-10T20:57:56.890" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16019" PostTypeId="2" ParentId="2056" CreationDate="2018-07-11T08:42:48.850" Score="0" Body="&lt;p&gt;&lt;a href=&quot;https://juangiraldo0.blogspot.com/2018/07/configuracion-modulo-bluetooth-hc-06.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://juangiraldo0.blogspot.com/2018/07/configuracion-modulo-bluetooth-hc-06.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Probably your error(0) is due to versión firmware problem &#xA;version 3.0-20170609 have AT comands differents&lt;/p&gt;&#xA;" OwnerUserId="20764" LastActivityDate="2018-07-11T08:42:48.850" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16020" PostTypeId="1" CreationDate="2018-07-11T09:52:52.683" Score="0" ViewCount="125" Body="&lt;p&gt;I try to implement GraphSLAM from this tutorial, &lt;a href=&quot;http://robots.stanford.edu/papers/thrun.graphslam.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;The GraphSLAM Algorithm with Applications to Large-Scale Mapping of Urban Structures&lt;/a&gt;. I have some doubt while studying this paper. I hope people who research on same field may solve my query. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I don't know how to input notation in StackExchange editor I have uploaded a picture with my queries: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/nYPHn.jpg&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Mu and omega calculation&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/nYPHn.jpg&quot; alt=&quot;Mu and omega calculation&quot; title=&quot;Mu and omega calculation&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have some questions, which are written in the images, at line numbers 11, 14, 19:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;What is the dimension of this noise covariance matrix? If it is 3*3 then the dimension of the matrix is mismatched at line numbers 18 and 19&lt;/li&gt;&#xA;&lt;li&gt;How to calculate $µ(j,x)$ and $µ(j,y)$?&lt;/li&gt;&#xA;&lt;li&gt;What is the value of $z_t^i$?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I have some other doubts:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;What is the need to use two &lt;code&gt;for&lt;/code&gt; loop one line number 10 and another one at line number 12?&lt;/li&gt;&#xA;&lt;li&gt;Is that use to change the value of $Q(t)$ in each iteration? How can all measurements and observed features be different from each other? &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I am using this dataset, &lt;a href=&quot;http://asrl.utias.utoronto.ca/datasets/mrclam/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;UTIAS Multi-Robot Cooperative Localization and Mapping Dataset&lt;/a&gt;, where there is a sensor measurement data set and odometry measurement dataset. They are two separate files. Their timestamp is also different. Their dataset is like that after 100 odometer data there is a data which observed a features. Then how could I relate these datasets with this algorithm?&lt;/p&gt;&#xA;" OwnerUserId="20610" LastEditorUserId="9176" LastEditDate="2018-07-14T10:13:43.710" LastActivityDate="2021-03-30T20:05:10.470" Title="GraphSLAM data accumulation problem" Tags="&lt;mobile-robot&gt;&lt;sensors&gt;&lt;slam&gt;&lt;odometry&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16021" PostTypeId="2" ParentId="9684" CreationDate="2018-07-12T06:06:38.853" Score="1" Body="&lt;p&gt;I'm having the exact same issue with a Roomba 635.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm also using an Arduino (an esp8266 specifically) and pulse the BRC port low for 100ms every 15 seconds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I get:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Running sendInfoRoomba()...&#xA;ERROR: Incomplete packet recieved 0 bytes.&#xA;Pulsing awake pin &amp;amp; sending 128...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The commands I send every 10 seconds are:&#xA;128, 149, 3, 21, 25, 26&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yet I get no reply in numerous occasions. The only 'fix' is to press the power button on the top - then everything magically works - until it doesn't again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: My bit of code that you may want to hijack :)&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  // Get the following sensors:&#xA;  // 21 (1 byte reply) - charge state&#xA;  // 25 (2 byte reply) - battery charge&#xA;  // 26 (2 byte reply) - battery capacity&#xA;  unsigned int command[] = { 128, 149, 3, 21, 25, 26 };&#xA;  byte numOfCommands = (sizeof(command) / sizeof(command[0]));&#xA;  for ( int i = 0; i &amp;lt; numOfCommands; i++ ) {&#xA;    Serial.print(&quot;TX: &quot;); Serial.println(command[i], DEC);&#xA;    RoombaSerial.write(command[i]);&#xA;    delay(10);&#xA;  }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Note that I have two serials, Serial is the USB adapter to my PC, RoombaSerial is a SoftwareSerial for two pins to the Roomba.&lt;/p&gt;&#xA;" OwnerUserId="20768" LastEditorUserId="9176" LastEditDate="2018-07-12T07:13:57.990" LastActivityDate="2018-07-12T07:13:57.990" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16022" PostTypeId="2" ParentId="15544" CreationDate="2018-07-12T09:52:59.160" Score="2" Body="&lt;p&gt;To choose the best posture:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;If you have absolute encoders: compare which is the closest compared to your current position&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;if you use incremental encoders: You need a reference at the beginning (e.g. start the system always in the same posture). After that you can compare the next possible postures with your current posture (and look for the closest again)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;this issue with the x axis. I don't understand your problem completely. Usually your robot can rotate around the z-axis of your tool frame. So you can choose x completely free. It is just a definition. You have just adapt your coordinates later to your chosen convention. So I wouldn't wonder when even robot manufacturer vary. You should now that DH parameters are not completely defined. Several correct solutions can exist.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A decoupled kinematic is always better for calculation and a analytical solution is faster than a numeric. So I would go on with this, if I were you. Do you know already &lt;a href=&quot;http://www.modular-machines.at/images/Modular-Machines/pub/BraAngHof14.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this paper?&lt;/a&gt; It is from the proceedings of the &lt;a href=&quot;http://roboticsworkshop.at/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Austrian Robotics Workshop&lt;/a&gt; - the implementation is &lt;a href=&quot;https://de.mathworks.com/matlabcentral/profile/authors/4333343-mathias-brandstotter&quot; rel=&quot;nofollow noreferrer&quot;&gt;open source here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For checking your inverse kinematic: just calculate the forward kinematic. If the difference equals zero your implementation is consistant. That helps a lot but of course you could have the same mistake in forward and inverse transformation. So there is no guarantee.&lt;/p&gt;&#xA;" OwnerUserId="20770" LastEditorUserId="20709" LastEditDate="2018-07-12T19:13:59.333" LastActivityDate="2018-07-12T19:13:59.333" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16024" PostTypeId="2" ParentId="16017" CreationDate="2018-07-12T14:53:00.883" Score="1" Body="&lt;p&gt;40 degrees is pretty good. I believe that you need motors with more torque as well as more speed. Which means that you may also need a new motor controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The motors&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't have the information about the motors that you're using. There are a couple factors involved in balancing a balancing robot.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;The motor's torque:&lt;/strong&gt; Torque is a rotational force, measured in units of &lt;em&gt;force&lt;/em&gt; times &lt;em&gt;length&lt;/em&gt;, such as newton-meters or n-m or pound-feet lb-ft. This is a measure of the strength of the motor. At some point, the motor will not be able to lift the robot.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;The motor's speed:&lt;/strong&gt; In order to balance the robot, the motor needs to react very quickly. If you've ever tried to balance a yard-stick on its end with one finger, then you'll have an idea of the problems. Once the stick starts falling, you need to move your finger quickly, and the more you've let the stick fall, the faster you'll need to react.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;You can improve a motor's torque and speed by increasing the voltage, but that risks the motor unless you stay within the limits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the motors are running at full speed most of the time, then you'll need more powerful motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is nothing wrong with using a DC Brushed Motor with this type of robot. It's what I've seen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I haven't seen stepper motors used for this type of robot, but if they have the speed, they might be ideal. They usually have excellent torque at low speeds and less torque at higher speeds, which is exactly what you need for a balancing robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another type of motor that could be used is the BLDC (Brushless DC) motor. This needs a different type of motor controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;PID Control&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another factor is programming. While I have heard of using just a proportional motor controller for setting the PWM for the motor, it works better with a full tuned PID controller. There are many tutorials on how to do this on YouTube.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To do this, you'll need to know the angle between the floor and the robot. The easiest way to get this is to use both motor encoders and a gyroscope/acceleromter such at the MPU 6050.&lt;/p&gt;&#xA;" OwnerUserId="19275" LastActivityDate="2018-07-12T14:53:00.883" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16025" PostTypeId="2" ParentId="15547" CreationDate="2018-07-12T15:12:07.857" Score="1" Body="&lt;p&gt;I had this problem too. You just have to source the corresponding setup.bash for the terminal that runs rviz and the /voxblox_node/mesh topic will be available to show in rviz.&lt;/p&gt;&#xA;" OwnerUserId="14214" LastActivityDate="2018-07-12T15:12:07.857" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16028" PostTypeId="2" ParentId="15547" CreationDate="2018-07-12T19:13:11.013" Score="3" Body="&lt;p&gt;So the doc's were out of date. I just updated them as the mesh is actually of type &lt;code&gt;voxblox_msgs::MeshBlock&lt;/code&gt;. Voxblox use to output a standard MarkerArray, however this form of visualization means you have to output the entire mesh every time any part of it changes. This meant when running on a robot and visualizing on a laptop we were saturating our wifi connection to display even relatively small areas.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To correct this issue we made a custom message that supports partial updates only changing the mesh where needed. To use this custom message you have to build &lt;code&gt;voxblox_rviz_plugin&lt;/code&gt; and have it in your workspace when running rviz.&lt;/p&gt;&#xA;" OwnerUserId="20774" LastActivityDate="2018-07-12T19:13:11.013" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16030" PostTypeId="1" CreationDate="2018-07-13T19:44:48.933" Score="0" ViewCount="129" Body="&lt;p&gt;What kind of camera models can be used for lenses with a field of view of more than 180 degree ?&#xA;Is ıt possible if not why?&#xA;Are fisheye lenses suitable for this purpose?&lt;/p&gt;&#xA;" OwnerUserId="18063" LastActivityDate="2021-03-31T03:06:45.723" Title="Vısual sensor.camera lenses with a field of view of more than 180 degree" Tags="&lt;sensors&gt;&lt;cameras&gt;&lt;geometry&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16031" PostTypeId="2" ParentId="16020" CreationDate="2018-07-14T02:49:49.800" Score="0" Body="&lt;p&gt;No:11 -&gt; it is 3x3 &lt;/p&gt;&#xA;&#xA;&lt;p&gt;No:19 -&gt; $i_{th}$ measurement of $z_t$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the need to use two forloop one lineNo:10 and another one LineNo:1&#xA;-&gt; Each feature $z_t$ have multiple observations $z_t^i$. First loop is for each feature and the other one for each observation of that feature. &lt;/p&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2018-07-14T02:49:49.800" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16032" PostTypeId="2" ParentId="16030" CreationDate="2018-07-14T13:59:28.120" Score="0" Body="&lt;p&gt;Consider the alternate approach of &lt;a href=&quot;http://www.360facil.com/eng/360-degree-photo-shot-parabolic-mirror.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;using a parabolic mirror&lt;/a&gt;.  The advantage clearly bing cost and possibly operating under lower light conditions. The disadvantages include more distortion, seeing the camera in the mirror and larger over all space.&lt;/p&gt;&#xA;" OwnerUserId="17364" LastActivityDate="2018-07-14T13:59:28.120" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16033" PostTypeId="1" CreationDate="2018-07-14T18:29:19.737" Score="1" ViewCount="458" Body="&lt;p&gt;I'm new to Roomba Create2. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I just want the program to send and receive data of the bumper sensor only.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried this code on an Arduino Uno: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;SoftwareSerial.h&amp;gt;&#xA;#include &quot;roombaDefines.h&quot;&#xA;int rxPin = 10;&#xA;int txPin = 11;&#xA;int sensorbytes;&#xA;SoftwareSerial Roomba(rxPin, txPin);&#xA;void setup()&#xA;{&#xA;  Roomba.begin(19200);&#xA;  Serial.begin(9600);&#xA;  pinMode(ddPin, OUTPUT);&#xA;  wakeUp ();   // Wake-up Roomba&#xA;  startSafe(); // Start Roomba in Safe Mode&#xA;  setPowerLED(128, 255);&#xA;  delay(1000);&#xA;  setPowerLED(128, 0);&#xA;  delay(1000);&#xA;}&#xA;void loop() &#xA;{  &#xA;  Roomba.write(142);&#xA;  Roomba.write(7);&#xA;  delay(100);&#xA;  sensorbytes = Roomba.read();&#xA;&#xA;   if (sensorbytes!=0 )&#xA;   {&#xA;    setPowerLED(255,255);&#xA;    Serial.println(sensorbytes);&#xA;   }&#xA;   else&#xA;   {&#xA;    setPowerLED(255,0);&#xA;    Serial.println(&quot;not_Press&quot;);&#xA;   }&#xA;   delay(100);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The robot code works fine for a period of time but after about two minutes I got some weird data from the robot (it shows in my serial monitor) and it makes my program seem to delay and crash.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I tried to check where it comes from&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void loop() &#xA;{&#xA;&#xA;int i = 0;&#xA;&#xA;  while(Roomba.available() ) {&#xA;    byte c = Roomba.read();&#xA;    sensorbytes = c;&#xA;    Serial.println(sensorbytes);&#xA;    i++;&#xA;  }&#xA;  delay(150);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;to check that the robot sends data via the serial port or not. Even if I don't command it, I get a packet of data, maybe every two minutes: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;32&#xA;32&#xA;32&#xA;32&#xA;70&#xA;108&#xA;97&#xA;115&#xA;104&#xA;32&#xA;67&#xA;82&#xA;67&#xA;32&#xA;115&#xA;117&#xA;99&#xA;148&#xA;205&#xA;205&#xA;233&#xA;32&#xA;48&#xA;120&#xA;48&#xA;32&#xA;40&#xA;48&#xA;120&#xA;48&#xA;41&#xA;10&#xA;13&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and it is the same.  So I think that the Roomba Create2 will send data via the serial port every two minutes. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can I avoid that data? &lt;/p&gt;&#xA;" OwnerUserId="20784" LastEditorUserId="9176" LastEditDate="2018-07-14T23:42:39.067" LastActivityDate="2019-04-12T02:01:10.217" Title="iRobot Create 2 - How did I get weird data from the serial port?" Tags="&lt;irobot-create&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16034" PostTypeId="2" ParentId="16030" CreationDate="2018-07-14T21:57:28.093" Score="0" Body="&lt;p&gt;Simple fisheye lens model will cover angles over 180 degrees. &lt;a href=&quot;https://docs.opencv.org/3.4/db/d58/group__calib3d__fisheye.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Fisheye lens model&lt;/a&gt; maps the incident angles into x,y coordinate on the image using a polynomial function. Thus, whatever the fov is, it does not matter, whereas the most common pinhole camera model cannot cover any lens around and over 180. A perfect solution for what you said.&lt;/p&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2018-07-14T21:57:28.093" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16036" PostTypeId="1" CreationDate="2018-07-15T08:14:13.660" Score="2" ViewCount="2439" Body="&lt;p&gt;I want to get telemetry data from my flight controller (&lt;a href=&quot;http://www.mateksys.com/?portfolio=f405-ctr&quot; rel=&quot;nofollow noreferrer&quot;&gt;Matek F405-CTR&lt;/a&gt;) and send control commands to it via &lt;a href=&quot;https://github.com/iNavFlight/inav/wiki/MSP-V2&quot; rel=&quot;nofollow noreferrer&quot;&gt;MSP protocol&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've already configured UART3 port on Matek in &lt;a href=&quot;https://github.com/iNavFlight/inav-configurator&quot; rel=&quot;nofollow noreferrer&quot;&gt;Inav configurator&lt;/a&gt; (look at pic).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/k0oO0.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/k0oO0.jpg&quot; alt=&quot;UART3 port configuration&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then I connected usb-serial converter (CP2102) to Matek on UART3 port for testing. So that, Matek controller is defined as COM3 on my PC and CP2102 as COM4&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/HnQek.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HnQek.jpg&quot; alt=&quot;Matek and CP2102 connection&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But when I'am trying to run simple test from &lt;a href=&quot;https://github.com/alduxvm/pyMultiWii&quot; rel=&quot;nofollow noreferrer&quot;&gt;pyMultiWii&lt;/a&gt; lib I get nothing from Matek controller neither from CP2102. I've tried this test for COM3 and COM4 ports as well.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#!/usr/bin/env python&#xA;&#xA;&quot;&quot;&quot;show-attitude.py: Script to ask the MultiWii Board attitude and print it.&quot;&quot;&quot;&#xA;&#xA;from pymultiwii import MultiWii&#xA;from sys import stdout&#xA;&#xA;if __name__ == &quot;__main__&quot;:&#xA;&#xA;    board = MultiWii(&quot;COM4&quot;)&#xA;    #board = MultiWii(&quot;COM3&quot;)&#xA;    try:&#xA;        while True:&#xA;            board.getData(MultiWii.ATTITUDE)&#xA;            #print board.attitude #uncomment for regular printing&#xA;&#xA;            # Fancy printing (might not work on windows...)&#xA;            message = &quot;angx = {:+.2f} \t angy = {:+.2f} \t heading = {:+.2f} \t elapsed = {:+.4f} \t&quot;.format(float(board.attitude['angx']),float(board.attitude['angy']),float(board.attitude['heading']),float(board.attitude['elapsed']))&#xA;            stdout.write(&quot;\r%s&quot; % message )&#xA;            stdout.flush()&#xA;            # End of fancy printing&#xA;    except Exception as error:&#xA;        print(&quot;Error on Main: &quot;+str(error))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ZJGvL.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZJGvL.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;May be I'am doing something wrong? I've already read &lt;a href=&quot;https://robotics.stackexchange.com/questions/13883/quadcopter-controlled-by-raspberry-pi/13884#13884?newreg=e353604958d54e26a191b8d803176081&quot;&gt;this post&lt;/a&gt;, but it dosn't help me. Any advice will be appreciated!&lt;/p&gt;&#xA;" OwnerUserId="20771" LastActivityDate="2021-03-31T22:02:05.270" Title="MSP (Multiwii Serial Protocol) receiving data with pyMultiWii issue" Tags="&lt;quadcopter&gt;&lt;python&gt;&lt;serial&gt;&lt;communication&gt;&lt;multi-rotor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16037" PostTypeId="1" AcceptedAnswerId="16041" CreationDate="2018-07-15T10:02:49.357" Score="1" ViewCount="868" Body="&lt;p&gt;Last month I visited a quadrotor laboratory ($ 20m^2$ approx). They used both Optitrack and Vicon systems. However, they told me that Vicon cost 10 times as much as Optitrack. Considering that any system of motion capture relies on the same principles of IR markers, which might be the reason for this difference in price?&lt;/p&gt;&#xA;" OwnerUserId="10539" LastActivityDate="2018-07-16T07:13:16.847" Title="What's the main difference between different motion capture systems (Vicon, Optitrack, etc)?" Tags="&lt;quadcopter&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16038" PostTypeId="2" ParentId="16036" CreationDate="2018-07-15T15:06:51.920" Score="0" Body="&lt;p&gt;Not exactly an answer, but I am unable to post a comment here. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Firstly, verify your baud rates (for Windows, make sure you have set the right baud rate in your device manager/properties window as well). Try using the MultiWiiConf, which is a GUI to monitor your flight data and check if it is able to establish communication with your flight controller board.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Coming back to your code, what happens when you try to retrieve the MSP_IDENT frame as mentioned &lt;a href=&quot;http://www.multiwii.com/wiki/index.php?title=Multiwii_Serial_Protocol&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;? I have written an alternate simple script &lt;a href=&quot;https://github.com/heethesh/eYSIP-2017_Control_and_Algorithms_development_for_Quadcopter/blob/master/python/MultiWii.py&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; for Python, use the requestFrame method with the frame ID and see if it helps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: It looks like the pyMultiWii library you are currently using supports only MSPv1. If your board uses MSPv2, the protocol is slightly different as in the link you have already posted in the question. You can use my library as refernece mentioned above to make changes as per MSPv2 protocol and give it a try.&lt;/p&gt;&#xA;" OwnerUserId="9059" LastEditorUserId="9059" LastEditDate="2018-07-15T15:17:02.213" LastActivityDate="2018-07-15T15:17:02.213" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16039" PostTypeId="2" ParentId="16033" CreationDate="2018-07-15T18:51:49.367" Score="1" Body="&lt;p&gt;You might want to take a look at the iRobot Create 2 OI spec&#xA;&lt;a href=&quot;https://www.irobotweb.com/~/media/MainSite/PDFs/About/STEM/Create/iRobot_Roomba_600_Open_Interface_Spec.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.irobotweb.com/~/media/MainSite/PDFs/About/STEM/Create/iRobot_Roomba_600_Open_Interface_Spec.pdf&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm using a different controller so I can't test your code. Just be sure you are set for 115,200 baud.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might also want to try sending a 128,7 command to fully reset the Create 2 before starting to send your 142,7 sensor read command which should only return a single byte on every command&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might also want to send the recommended &quot;start&quot; command&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/CWjVN.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/CWjVN.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19572" LastActivityDate="2018-07-15T18:51:49.367" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16041" PostTypeId="2" ParentId="16037" CreationDate="2018-07-16T07:13:16.847" Score="0" Body="&lt;p&gt;This comes mostly from two things, the hardware and the software composing these systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The hardware, mostly what are capable of the 'cameras' used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second one is the software, that include calibration algorithms (different speed of calibration and accuracy), reconstruction algorithms (how many marker per object, accuracy of the body reconstruction), exportation format (how many bodies, single markers, in which format).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It boils down that Optitrack is good enough for UAV flight, but that over activities have different requirement which are met best by Vicon.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2018-07-16T07:13:16.847" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16043" PostTypeId="1" AcceptedAnswerId="16049" CreationDate="2018-07-16T13:13:09.823" Score="2" ViewCount="626" Body="&lt;p&gt;I am trying to find a solution in S(1)*R^2 (x,y, orientation) with obstacles (refer to image) using RRT star and Dubins Model. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/NHB0R.jpg&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Obstacles&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/NHB0R.jpg&quot; alt=&quot;Obstacles&quot; title=&quot;Obstacles&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The code takes a lot of time to find a suitable random sample with x,y, theta such that a successful Dubins path can be connected between the two points without the vehicle (a rectangle colliding any of the obstacles). The fact that the random sample needs to be at the correct angle so that the vehicle's path is collision free is 1 out of 100,000 random samples. This makes the code very slow even when my computer is at its full processing power. None of my internal codes take much time. I timed all of them, only the fact of achieving that 1 out of 100,000 sample causes the code to take so much time. I tried decreasing my discretization space by half but the problem still exists.&lt;/p&gt;&#xA;" OwnerUserId="20789" LastEditorUserId="9176" LastEditDate="2018-07-16T14:04:08.850" LastActivityDate="2018-08-09T13:21:59.080" Title="How can I get the right sample in RRT star Dubins?" Tags="&lt;motion-planning&gt;&lt;matlab&gt;&lt;algorithm&gt;&lt;path-planning&gt;&lt;rrt&gt;" AnswerCount="2" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16045" PostTypeId="2" ParentId="15433" CreationDate="2018-07-16T13:30:07.423" Score="4" Body="&lt;p&gt;There is a bug in the implementation of sleep/wakeup on Create 2 which was fixed in release-3.8.2 for robots with an older processor, or release-stm32-3.7.7 for robots with a newer processor. To receive a code update that will (hopefully) fix your issue, please e-mail create@irobot.com, referencing this post.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;Please note that while I'm an iRobot employee, the postings on this site are my own and don't necessarily represent iRobot's positions, strategies, or opinions.&lt;/sup&gt;&lt;/p&gt;&#xA;" OwnerUserId="7665" LastEditorUserId="7665" LastEditDate="2018-07-23T19:39:06.517" LastActivityDate="2018-07-23T19:39:06.517" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16047" PostTypeId="2" ParentId="8184" CreationDate="2018-07-17T06:26:03.113" Score="0" Body="&lt;p&gt;CNC routers are intended to cut materials. Notwithstanding, gentler materials can fall under a wide range – wood, plastic and much milder metal like aluminum. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Meanwhile, &lt;a href=&quot;http://mdaltd.ca/custom-cnc-milling/&quot; rel=&quot;nofollow noreferrer&quot;&gt;CNC Milling&lt;/a&gt; machines are made to cut metal, plain and straightforward. Milling machines can cut essentially any sort of metal, even metal as hard as titanium. Milling machines can likewise cut thicker material and that with more differed shapes than CNC switches since they can work on a flat or vertical setup.&lt;/p&gt;&#xA;" OwnerUserId="20795" LastActivityDate="2018-07-17T06:26:03.113" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16049" PostTypeId="2" ParentId="16043" CreationDate="2018-07-17T14:26:16.270" Score="0" Body="&lt;p&gt;Apart from the fact that the collision-free region looks pretty tight, one of the main reasons why you got very few usable samples is that a connection attempt is made directly between a node in the tree and the sampled configuration. Due to that, in order for a sampled configuration to have any chance &lt;em&gt;at all&lt;/em&gt; of a successful connection, it has to have its x and y coordinates being on the gray area, which is already relatively small compared to the whole map. Even when you have a sampled configuration falling in the gray area, you still need to take care of the rotation as well as making sure that those configurations can be connected by a relatively constrained Dubin path.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A better approach would be making use of a steering function. (Actually the RRT$^*$ paper also describes this a bit.) To make the point, let's consider when we use a straight line to connect two configurations. Let's say a sampled configuration is $q_\text{rand}$ and its nearest neighbor on the tree is $q_\text{near}$. Instead of connecting $q_\text{near}$ directly to $q_\text{rand}$, you try to connect $q_\text{near}$ to some $q'$ that lies on the straight line connecting $q_\text{near}$ and $q_\text{rand}$ but is closer to $q_\text{near}$. This is kind of &lt;em&gt;steering&lt;/em&gt; a configuration from $q_\text{near}$ &lt;em&gt;towards&lt;/em&gt; $q_\text{rand}$. It will increase the chance of success as it is not too greedy to always try to go all the way to a sampled configuration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, with Dubin paths, the actual implementation details are definitely going to be different. But the core idea stays the same: limit the RRT extension to be some step size from existing nodes on the tree.&lt;/p&gt;&#xA;" OwnerUserId="7610" LastActivityDate="2018-07-17T14:26:16.270" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16051" PostTypeId="1" AcceptedAnswerId="16057" CreationDate="2018-07-17T15:36:38.013" Score="0" ViewCount="40" Body="&lt;p&gt;I am looking at the &lt;a href=&quot;https://www.servocity.com/bogie&quot; rel=&quot;nofollow noreferrer&quot;&gt;ServoCity Bogie&lt;/a&gt; platform - it comes with 6 motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The motor listed specs are: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Suggested Voltage: 4.5&amp;nbsp;VDC &lt;/li&gt;&#xA;&lt;li&gt;No Load Current: 190&amp;nbsp;mA &lt;/li&gt;&#xA;&lt;li&gt;Max. Load Current: 250&amp;nbsp;mA&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I was planning on using Adafruit's &lt;a href=&quot;https://www.adafruit.com/product/2927&quot; rel=&quot;nofollow noreferrer&quot;&gt;TB6612&lt;/a&gt; based solution - it can handle &quot;Power Supply current VM=15V max;  Output current - IOUT=1.2 A(ave) / 3.2 A (peak)&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My questions are: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Can I combine each side's 3 motors into 1 H-Bridge? &#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I assume so, and I would wire it in parallel. Is it then simply 3x250&amp;nbsp;mA = 750&amp;nbsp;mA draw?&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;How do I calculate the battery voltage requirement?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;A bonus question - The Feather board linked above has two of these chips; can I bridge the H-Bridge outputs to allow for a double amperage output? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;H-Bridge =&gt; 2 outputs parallel =&gt; 3 motors in parallel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If so, this would allow for slightly more powerful motors in the future.&lt;/p&gt;&#xA;" OwnerUserId="20801" LastEditorUserId="9176" LastEditDate="2018-07-17T16:42:36.150" LastActivityDate="2018-07-18T07:35:19.733" Title="6 motors with TB6612 driver + power requirements" Tags="&lt;motor&gt;&lt;h-bridge&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16052" PostTypeId="1" CreationDate="2018-07-17T17:38:07.777" Score="3" ViewCount="165" Body="&lt;p&gt;I'm having some difficulties understanding the concept of teleoperation in ROS so hoping someone can clear some things up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am trying to control a Baxter robot (in simulation) using a HTC Vive device. I have a node (publisher) which successfully extracts PoseStamped data (containing pose data in reference to the lighthouse base stations) from the controllers and publishes this on separate topics for right and left controllers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So now I wish to create the subscribers which receive the pose data from controllers and converts it to a pose for the robot. What I'm confused about is the mapping... after reading documentation regarding Baxter and robotics transformation, I don't really understand how to map human poses to Baxter. I know I need to use IK services which essentially calculate the co-ordinates required to achieve a pose (given the desired location of the end effector). But it isn't as simple as just plugging in the PoseStamped data from the node publishing controller data to the ik_service right?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Like a human and robot anatomy is quite different so I'm not sure if I'm missing a vital step in this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Seeing other people's example codes of trying to do the same thing, I see that some people have created a 'base'/'human' pose which hard codes co-ordinates for the limbs to mimic a human. Is this essentially what I need? Any insight is very much appreciated!&lt;/p&gt;&#xA;" OwnerUserId="20802" LastActivityDate="2018-07-17T19:50:53.997" Title="ROS: Human to Robot Mapping (Baxter)" Tags="&lt;ros&gt;&lt;inverse-kinematics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16053" PostTypeId="1" AcceptedAnswerId="16067" CreationDate="2018-07-17T19:02:28.220" Score="1" ViewCount="80" Body="&lt;p&gt;Suppose we have many images for the same scene (with known poses already,using for ex: a GPS ), and the same feature appear in more than 2 images .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;How to use all the available info to compute as precisely as possible the 3d-reconstruction of the scene?&lt;/strong&gt; (actually ,I want a dense map but let's start with a point)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For 2 images , it's a least square problem solved with OpenCV function: &lt;code&gt;cv2.tringulatePoints&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/4ozEX.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4ozEX.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;but for many, how to find the best estimate?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;any ideas on the subject? [no problem with dense math]&lt;/p&gt;&#xA;" OwnerUserId="17186" LastActivityDate="2018-07-20T10:17:03.623" Title="How to tringulate many projections of a point to optimal postion?" Tags="&lt;computer-vision&gt;&lt;opencv&gt;&lt;3d-reconstruction&gt;&lt;monocular&gt;&lt;3d-model&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16054" PostTypeId="2" ParentId="16052" CreationDate="2018-07-17T19:50:53.997" Score="2" Body="&lt;p&gt;I answered your question on stack overflow: &lt;a href=&quot;https://stackoverflow.com/questions/51385737/ros-human-robot-mapping-baxter&quot;&gt;https://stackoverflow.com/questions/51385737/ros-human-robot-mapping-baxter&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might find my former student's work on &lt;a href=&quot;https://www.youtube.com/watch?v=zZtOlOuqEdw&amp;amp;index=24&amp;amp;list=LLMmUzvvz7M1JUoho1NzrRiA&quot; rel=&quot;nofollow noreferrer&quot;&gt;motion mapping using a kinect sensor with a pr2&lt;/a&gt; informative.  It shows two methods:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Direct joint angle mapping  (eg if the human has the arm in a right angle then the robot should also have the arm in a right angle).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;An IK method that controls the robot's end effector based on the human's hand position.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I know I need to use IK services which essentially calculate the&#xA;  co-ordinates required to achieve a pose (given the desired location of&#xA;  the end effector). But it isn't as simple as just plugging in the&#xA;  PoseStamped data from the node publishing controller data to the&#xA;  ik_service right?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, indeed, this is a fairly involved process!  In both cases, we took advantage of the kinects api to access the human's joint angle values and the position of the hand.  You can read about how Microsoft research implemented the human skeleton tracking algorithm here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.microsoft.com/en-us/research/publication/real-time-human-pose-recognition-in-parts-from-a-single-depth-image/?from=http%3A%2F%2Fresearch.microsoft.com%2Fapps%2Fpubs%2F%3Fid%3D145347&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.microsoft.com/en-us/research/publication/real-time-human-pose-recognition-in-parts-from-a-single-depth-image/?from=http%3A%2F%2Fresearch.microsoft.com%2Fapps%2Fpubs%2F%3Fid%3D145347&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not familiar with the Vive device. You should see if it offers a similar api for accessing skeleton tracking information since reverse engineering Microsoft's algorithm will be challenging.  &lt;/p&gt;&#xA;" OwnerUserId="20670" LastActivityDate="2018-07-17T19:50:53.997" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16055" PostTypeId="2" ParentId="15853" CreationDate="2018-07-17T21:34:58.153" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Actually I wish to implement my own algorithm (like some variation of&#xA;  RRT) without MoveIt!/OMPL hence it is important for me to know all the&#xA;  details.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;I am really confused about this. Any explanations or links where I can&#xA;  find the details and understand them would be really helpful.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;OMPL and MoveIt have a ton of features that are already implemented so you don't have to do that.  However, that has made the software too large to quickly comprehend if you don't know about the underlying algorithms.  Instead of learning more about their implementation and methods, I recommend you go directly to the original source!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Check out the textbook &lt;em&gt;Planning Algorithms&lt;/em&gt; by Steven LaValle.  The whole text is available online for free, but I have my own copy and it's literally sitting on my desk right now (lol).  &lt;a href=&quot;http://planning.cs.uiuc.edu/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://planning.cs.uiuc.edu/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Simple RRT in python&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;On LaValle's website he has very simple RRT code that you can run in python right away. &#xA;&lt;a href=&quot;http://msl.cs.uiuc.edu/~lavalle/code.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://msl.cs.uiuc.edu/~lavalle/code.html&lt;/a&gt;&#xA;&lt;a href=&quot;http://msl.cs.uiuc.edu/~lavalle/sub/rrt.py&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://msl.cs.uiuc.edu/~lavalle/sub/rrt.py&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="20670" LastActivityDate="2018-07-17T21:34:58.153" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16057" PostTypeId="2" ParentId="16051" CreationDate="2018-07-18T07:35:19.733" Score="0" Body="&lt;ol&gt;&#xA;&lt;li&gt;Yes, You can combine each side's motors.&lt;/li&gt;&#xA;&lt;li&gt;Yes, a parallel connection is proper one. Therefore, Your calculation of current drawn is also correct.&lt;/li&gt;&#xA;&lt;li&gt;I don't see any strong need for calculation of the battery voltage. I'd rather consider calculation of battery capacity, as it will affect your working time, thus changing possible range of Your robot. I'd suggest using LiPo or LiIon batteries - these types of batteries offer slightly lower voltage than 4.5V, but have great energy density.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Bonus question: Yes, You can double Your H-bridge current by bridging its outputs. This is often used in minisumo category robots to drive more powerful motors. To do this, you should also bridge correct input pins: A_PWM with B_PWM, A_IN1 with B_IN1 and A_IN2 with B_IN2.&lt;/p&gt;&#xA;" OwnerUserId="14673" LastActivityDate="2018-07-18T07:35:19.733" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16060" PostTypeId="1" AcceptedAnswerId="16085" CreationDate="2018-07-18T10:13:31.573" Score="1" ViewCount="235" Body="&lt;p&gt;I'm building an omni-directional robot base and want to add some kind of low-level obstacle detection. The complete robot will have LIDAR and camera for navigation but I'd like to add something at the low level to stop the motors in case the high-level navigation fails/crashes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The issue I have is because it's omni-directional the sensors have to have all directions, which for even cheap sonar sensors starts to get pretty pricey. I was thinking of adding pressure sensor bumpers similar to what Kiva/Amazon uses: &lt;a href=&quot;https://robohub.org/meet-the-drone-that-already-delivers-your-packages-kiva-robot-teardown/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Meet the drone that already delivers your packages, Kiva robot teardown&lt;/a&gt;. It's a cool idea just a flexible tube attached to a pressure sensor, if anything bumps into the tube you get a small pressure change in the tube. This means I could cover the entire robot with a ring of tube and use a single pressure sensor! &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main issue I have is figuring out what type of pressure sensor to use. The Kiva robot appears to have a single pressure sensor connected to one end of the tube. I found this example, &lt;a href=&quot;https://www.robotshop.com/letsmakerobots/air-pressure-based-bumpers&quot; rel=&quot;nofollow noreferrer&quot;&gt;Air pressure based bumpers&#xA;by Axbri&lt;/a&gt; on Lets Make Robots which uses a pair of differential pressure sensors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main question I have is around the type of sensor should it be absolute, gauge or differential (as in the LMR example). And maybe to have a rough idea how to calculate the pressure range required for the sensor? I guess the static pressure would be based on the length and diameter of the tube and the dynamic pressure (caused by the obstacle) would also depend on the size of the obstacle and how much the tube is compressed?&lt;/p&gt;&#xA;" OwnerUserId="18614" LastEditorUserId="9176" LastEditDate="2018-07-18T10:35:07.053" LastActivityDate="2018-07-23T12:05:10.277" Title="Pressure Sensors for Robot Bumper" Tags="&lt;mobile-robot&gt;&lt;sensors&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16062" PostTypeId="1" AcceptedAnswerId="16065" CreationDate="2018-07-18T17:06:18.023" Score="0" ViewCount="146" Body="&lt;p&gt;I have gone through &lt;a href=&quot;http://robots.stanford.edu/papers/thrun.graphslam.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;The GraphSLAM Algorithm with Applications to Large-Scale Mapping of Urban Structures&lt;/a&gt;. I implemented the code for GraphSLAM. The fundamental formula of GraphSLAM is &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\mu = \Omega^{-1}\xi$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I inverse $\Omega$ it gives me an error that &lt;code&gt;Matrix is singular&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the above document there are some hints how to avoid this error. But I failed to understand that. On the eighth page of the above document - on page 410 - they discuss it in section &lt;strong&gt;&lt;em&gt;4. The GraphSLAM Algorithm&lt;/em&gt;&lt;/strong&gt; portion. If anybody can understand it, please help me to understand. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the text:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In particular, line 2 in GraphSLAM_linearize initializes&#xA;  the information elements. The “infinite” information entry in&#xA;  line 3 fixes the initial pose $x_0$ to (0 0 0)$^T$ . It is necessary, since&#xA;  otherwise the resulting matrix becomes singular, reflecting the&#xA;  fact that from relative information alone we cannot recover&#xA;  absolute estimates.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I added my code here for better understanding&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;import java.io.IOException;&#xA;import org.ujmp.core.SparseMatrix;&#xA;import org.ujmp.core.Matrix;&#xA;&#xA;import java.io.File;&#xA;import java.util.Scanner;&#xA;&#xA;public class Test1 {&#xA;public static void main(String args[]) throws IOException {&#xA;    Matrix omega = SparseMatrix.Factory.zeros(5, 5);&#xA;    Matrix Xi=SparseMatrix.Factory.zeros(5,1);&#xA;    int i = 0, i1 = 0, k1 = 0, k2 = 0,l=0,l1=0;&#xA;    double[] timex = new double[5];&#xA;    double[] forwardx = new double[5];&#xA;    double[] angularx = new double[5];&#xA;    double[]x1=new double[5];&#xA;    double[]y1=new double[5];&#xA;    double[]theta1=new double[5];&#xA;    double []landx=new double[2];&#xA;    double[]landy=new double[2];&#xA;    double[] timeya = new double[2];&#xA;    double[] codea = new double[2];&#xA;    double[] rangea = new double[2];&#xA;    double[] bearinga = new double[2];&#xA;    Scanner x = new Scanner(new File(&quot;/home/froboticscse/IdeaProjects/UJMPtest/src/main/java/a.txt&quot;));&#xA;    Scanner y = new Scanner(new File(&quot;/home/froboticscse/IdeaProjects/UJMPtest/src/main/java/b.txt&quot;));&#xA;    while (x.hasNext()) {&#xA;&#xA;        double time = x.nextDouble();&#xA;        double forward = x.nextDouble();&#xA;        double angular = x.nextDouble();&#xA;        timex[i] = time;&#xA;        forwardx[i] = forward;&#xA;        angularx[i] = angular;&#xA;        x1[i]=((forwardx[i]*0.006+Math.cos(0+(angularx[i]*0.006)/2)));&#xA;        y1[i]=((forwardx[i]*0.006+Math.sin(0+(angularx[i]*0.006)/2)));&#xA;        theta1[i]=(angularx[i]*0.006);&#xA;        i++;&#xA;    }&#xA;&#xA;    while (y.hasNext()) {&#xA;        double timey = y.nextDouble();&#xA;        double code = y.nextDouble();&#xA;        double range = y.nextDouble();&#xA;        double bearing = y.nextDouble();&#xA;        timeya[i1] = timey;&#xA;        codea[i1] = code;&#xA;        rangea[i1] = range;&#xA;        bearinga[i1] = bearing;&#xA;&#xA;        i1++;&#xA;&#xA;    }&#xA;    while (k1 &amp;lt; timex.length &amp;amp;&amp;amp; k2 &amp;lt; timeya.length) {&#xA;        if (timex[k1] &amp;lt; timeya[k2]) {&#xA;            omega.setAsDouble(1, k1, k1);&#xA;            omega.setAsDouble(1, k1, k1 + 1);&#xA;            Xi.setAsDouble(x1[l],k1,0);&#xA;            k1++;&#xA;            l++;&#xA;        } else if (timex[k1] == timeya[k2]) {&#xA;            landx[l1]=x1[k1]+rangea[k2]*(Math.cos(bearinga[k2]+theta1[k1]));&#xA;            omega.setAsDouble(1, k1, k2);&#xA;            omega.setAsDouble(1, k2, k1);&#xA;            Xi.setAsDouble((landx[l1]+x1[l1]),k1,0);&#xA;            k2++;&#xA;            l1++;&#xA;        } else {&#xA;            System.out.println(&quot;Nothing to add&quot;);&#xA;        }&#xA;       // System.out.println(Xi);&#xA;    }&#xA;    System.out.println(omega);&#xA;   /* Matrix mu=omega.inv().mtimes(Xi);&#xA;    System.out.println(mu);*/&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;}&lt;/p&gt;&#xA;" OwnerUserId="20610" LastEditorUserId="9176" LastEditDate="2018-08-05T12:55:23.780" LastActivityDate="2018-08-05T12:55:23.780" Title="Matrix is singular error in GraphSLAM" Tags="&lt;mobile-robot&gt;&lt;sensors&gt;&lt;slam&gt;&lt;singularity&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16064" PostTypeId="1" CreationDate="2018-07-18T17:25:17.853" Score="2" ViewCount="58" Body="&lt;p&gt;I was hoping to pick your brains about a problem that even after much reading has left me baffled.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;My Application&lt;/strong&gt;:&#xA;For the sake of simulating underwater scenarios in very large environments (up to 100&amp;nbsp;km by 100&amp;nbsp;km in the X-Y plane), I am attempting to implement a path planner capable of planning a path that brings an underwater vehicle such as a submarine from a the starting position to a final 3D waypoint while avoiding obstacles. The vehicle will have high level knowledge of the map for things like the location of the ocean floor, and will sense other obstacles as it moves through the environment. The environment will not be obstacle dense, but they can be moving (other submarines, etc)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;My general problem&lt;/strong&gt;:&#xA;Underwater vehicles such as submarines have significant kinodynamic constraints associated with them. This makes using strictly geometric planners such as RRT*(the geometric version anyway...) or D*-Lite unrealistic, since the generated path could be entirely unimplementable by the vehicle even after smoothing. However, kinodynamic path planners cannot be reasonably applied over such large distances due to their computational complexity, especially in the context of new obstacles potentially being discovered all the time, requiring repairing or re-planning of the path. Are there standard methods for dealing with these type of complex scenarios that I am unaware of? Otherwise, can anyone propose a strategy well suited to this type of problem? Thank you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One idea I had was to use a geometric planner like RRT* as a 'global' planner' that generates a coarse plan that would then be roughly followed by a 'local' kinodynamic planner such as RRT-X. The local planner would ensure nearby obstacles are avoided while adhering to the constraints of the vehicle. I am a complete novice in this area though so I am unsure if even that is reasonable.&lt;/p&gt;&#xA;" OwnerUserId="20806" LastEditorUserId="9176" LastEditDate="2018-07-18T17:42:49.773" LastActivityDate="2018-07-18T17:42:49.773" Title="Strategy for 3D path planning over large distances with kinodynamic constraints" Tags="&lt;simulation&gt;&lt;path-planning&gt;&lt;underwater&gt;" AnswerCount="0" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="16065" PostTypeId="2" ParentId="16062" CreationDate="2018-07-18T18:01:56.293" Score="2" Body="&lt;p&gt;Due to singularity in matrix (i.e. the condition of matrix during which determinant of matrix becomes zero), matrix cannot be inverted. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you can possibly try pseudo-inverse. It gives most approximated form of inverse matrix. For more information visit this link: &lt;a href=&quot;https://en.wikipedia.org/wiki/Moore%E2%80%93Penrose_inverse&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Moore%E2%80%93Penrose_inverse&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19034" LastActivityDate="2018-07-18T18:01:56.293" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16066" PostTypeId="2" ParentId="16062" CreationDate="2018-07-18T18:21:22.320" Score="0" Body="&lt;p&gt;Just as &lt;a href=&quot;https://robotics.stackexchange.com/a/16065/20709&quot;&gt;manna kalsariya&lt;/a&gt; suggested, you can try to use the pseudo inverse. The README of the &lt;a href=&quot;https://github.com/ujmp/universal-java-matrix-package&quot; rel=&quot;nofollow noreferrer&quot;&gt;Universal Java Matrix Package&lt;/a&gt; (see &quot;Quick Start&quot;) shows that the pseudo inverse is implemented and available for you to use. Instead of &lt;code&gt;Matrix mu=omega.inv().mtimes(Xi);&lt;/code&gt;, try &lt;code&gt;Matrix mu=omega.pinv().mtimes(xi);&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="20709" LastActivityDate="2018-07-18T18:21:22.320" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16067" PostTypeId="2" ParentId="16053" CreationDate="2018-07-18T18:35:06.093" Score="1" Body="&lt;p&gt;I will assume, similar to &lt;a href=&quot;https://docs.opencv.org/2.4.13/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;OpenCV&lt;/a&gt;, that each camera is a pinhole camera, so you already corrected for things like lens distortion. In this case each visible point in 3D space $(x,y,z)$ gets projected into camera coordinates using&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{bmatrix}&#xA;x'_i \\ y'_i \\ z'_i&#xA;\end{bmatrix} = R_i \,&#xA;\begin{bmatrix}&#xA;x \\ y \\ z&#xA;\end{bmatrix} + \vec{t}_i, \\&#xA;u_i = \alpha_i\,\frac{x'_i}{z'_i} + \gamma_i, \\&#xA;v_i = \beta_i\,\frac{y'_i}{z'_i} + \delta_i,&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $R_i$ is the rotation matrix of camera $i$, which determines the orientation of the camera, $\vec{t}_i$ is the position of camera $i$ in reference frame of the camera itself, $u_i$ and $v_i$ are the pixel coordinates of the point in the image of camera $i$, and $\alpha_i$, $\beta_i$, $\gamma_i$ and $\delta_i$ are camera parameters that scale and translate the projected coordinates into the pixel coordinates of camera $i$.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;For the least squares problem it will be assumed that for each camera its parameters $R_i$, $\vec{t}_i$, $\alpha_i$, $\beta_i$, $\gamma_i$ and $\delta_i$ are known and that the pixel coordinates $u_i$ and $v_i$ of the point that has to be triangulated are known as well. In this case the least squares problem can be formulated as follows&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;(x,y,z) = \arg\min_{x,y,z} \sum_{i\in\mathcal{I}} (\hat{u}_i - u_i)^2 + (\hat{v}_i - v_i)^2 \\&#xA;\text{s.t.} \begin{bmatrix}&#xA;\hat{x}'_i \\ \hat{y}'_i \\ \hat{z}'_i&#xA;\end{bmatrix} = R_i \,&#xA;\begin{bmatrix}&#xA;x \\ y \\ z&#xA;\end{bmatrix} + \vec{t}_i, \\&#xA;\hat{u}_i = \alpha_i\,\frac{\hat{x}'_i}{\hat{z}'_i} + \gamma_i, \\&#xA;\hat{v}_i = \beta_i\,\frac{\hat{y}'_i}{\hat{z}'_i} + \delta_i,&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $\mathcal{I}$ is the set of all indices of the cameras which see the considered point. You could also add weights to each quadratic term in the summation, for example to reduce the influence of bad or low resolution cameras. The error terms in the summation are also known as the &lt;a href=&quot;https://en.wikipedia.org/wiki/Reprojection_error&quot; rel=&quot;nofollow noreferrer&quot;&gt;reprojection errors&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suspect that this problem is not &lt;a href=&quot;https://en.wikipedia.org/wiki/Convex_optimization&quot; rel=&quot;nofollow noreferrer&quot;&gt;convex&lt;/a&gt;, mainly due to the division by $\hat{z}'_i$. However I do suspect that if you would use an initial guess that is well within the viewing frustum of each camera that it would converge to the global minimum in most cases. This optimization problem can be solved with methods like &lt;a href=&quot;https://en.wikipedia.org/wiki/Gradient_descent&quot; rel=&quot;nofollow noreferrer&quot;&gt;gradient decent&lt;/a&gt; or &lt;a href=&quot;https://en.wikipedia.org/wiki/Newton%27s_method_in_optimization#Higher_dimensions&quot; rel=&quot;nofollow noreferrer&quot;&gt;Newton's method&lt;/a&gt; where the gradient can be calculated with&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\nabla f = 2\,\sum_{i\in\mathcal{I}} (\hat{u}_i - u_i)\,\nabla\hat{u}_i + (\hat{v}_i - v_i)\,\nabla\hat{v}_i, \\&#xA;\nabla\hat{u}_i = \frac{\alpha_i}{\hat{z}_i'}\,R_i^\top \left(&#xA;\begin{bmatrix}1 &amp;amp; 0 &amp;amp; 0\end{bmatrix}^\top - \frac{\hat{x}_i'}{\hat{z}_i'} \begin{bmatrix}0 &amp;amp; 0 &amp;amp; 1\end{bmatrix}^\top&#xA;\right), \\&#xA;\nabla\hat{v}_i = \frac{\beta_i}{\hat{z}_i'}\,R_i^\top \left(&#xA;\begin{bmatrix}0 &amp;amp; 1 &amp;amp; 0\end{bmatrix}^\top - \frac{\hat{y}_i'}{\hat{z}_i'} \begin{bmatrix}0 &amp;amp; 0 &amp;amp; 1\end{bmatrix}^\top&#xA;\right).&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a similar way the hessian can be calculated as well, but its expression gets a bit long and does not add that much to this answer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have not found a source for the problem formulation above, but I did found a &lt;a href=&quot;https://doi.org/10.1007/978-3-319-54427-4_12&quot; rel=&quot;nofollow noreferrer&quot;&gt;source&lt;/a&gt; which suggested a fast way of minimizing the maximum value of of the $p$-norm of $\begin{bmatrix}\hat{u}_i - u_i &amp;amp; \hat{v}_i - v_i\end{bmatrix}^\top$, while also adding the constraints that $\hat{z}_i' &amp;gt; 0$. So this problem formulation, without the extra constraints, can be characterized as $(\ell_\infty,\ell_p)$, whereas my problem formulation can be characterized as $(\ell_1,\ell_2)$.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;A non-iterative way would be &lt;a href=&quot;https://users.cecs.anu.edu.au/~hartley/Papers/triangulation/triangulation.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;linear least squares triangulation&lt;/a&gt;.&#xA;This method searches for the depth of the point of each camera ($z'_i$) and the 3D position at the same time. Namely, when ignoring disturbances in the pixels coordinates of the point, the set of all 3D points which would get projected to the same pixel coordinates would span a line. This line would go through the cameras position and the actual 3D position. By rewriting the first equations, then for each camera the following equation can be formulated&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;z_i'&#xA;\begin{bmatrix}&#xA;\frac{x_i'}{z_i'} \\ \frac{y_i'}{z_i'} \\ 1&#xA;\end{bmatrix} = z_i'&#xA;\begin{bmatrix}&#xA;\frac{u_i - \gamma_i}{\alpha_i} \\ \frac{v_i - \delta_i}{\beta_i} \\ 1&#xA;\end{bmatrix} = &#xA;R_i \,&#xA;\underbrace{\begin{bmatrix}&#xA;x \\ y \\ z&#xA;\end{bmatrix}}_{\vec{x}} + \vec{t}_i.&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Solving the third row of the above equation for $z_i'$ gives $z_i' = R_{i,3}\,\vec{x} + \vec{t}_{i,3}$, where $R_{i,3}$ is the third row of $R_i$ and $\vec{t}_{i,3}$ is the third element of $\vec{t}_i$. Substituting this back into the top two rows of the equation above gives&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\left(\vec{u}_i\,R_{i,3} - R_{i,1:2}\right)\,\vec{x} = &#xA;\vec{t}_{i,1:2} - \vec{u}_i\,\vec{t}_{i,3}, \\&#xA;\vec{u}_i = &#xA;\begin{bmatrix}&#xA;\frac{u_i - \gamma_i}{\alpha_i} \\ \frac{v_i - \delta_i}{\beta_i}&#xA;\end{bmatrix},&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $R_{i,1:2}$ are the firs two rows of $R_i$ and $\vec{t}_{i,1:2}$ are the first two elements of $\vec{t}_i$. All these equations can be combined into one system of linear equation by using&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\underbrace{\begin{bmatrix}&#xA;\vec{u}_1\,R_{1,3} - R_{1,1:2} \\&#xA;\vec{u}_2\,R_{2,3} - R_{2,1:2} \\&#xA;\vdots \\&#xA;\vec{u}_n\,R_{n,3} - R_{n,1:2}&#xA;\end{bmatrix}}_{A\in\mathbb{R}^{2n\times3}}\,\vec{x} = &#xA;\underbrace{\begin{bmatrix}&#xA;\vec{t}_{1,1:2} - \vec{u}_1\,\vec{t}_{1,3} \\&#xA;\vec{t}_{2,1:2} - \vec{u}_2\,\vec{t}_{2,3} \\&#xA;\vdots \\&#xA;\vec{t}_{n,1:2} - \vec{u}_n\,\vec{t}_{n,3}&#xA;\end{bmatrix}}_{b\in\mathbb{R}^{2n}},&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $n$ is the number of cameras (so $\mathcal{I} = \{1,2,\cdots,n\}$) and has the &lt;a href=&quot;https://en.wikipedia.org/wiki/Linear_least_squares#Main_formulations&quot; rel=&quot;nofollow noreferrer&quot;&gt;least squares solution&lt;/a&gt; for $\vec{x}$ given by $(A^\top\,A)^{-1}\,A^\top\,b$. The inverse of $A^\top\,A$ should exist when using two or more (unique) cameras, so you should always be able to find a solution. The downside of this approach would be that it does not take into consideration the uncertainty of the direction of the line which get amplified more the larger $z_i'$ is and it would require more memory, especially for a large number of cameras.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;I did do some testing with both methods and found that with the first could diverge when a bad initial guess was used. For this I did not use the constraints that $\hat{z}_i' &amp;gt; 0$, so adding this might avoid this. But when it did converge it would often get a slightly better answer than the second method, probably because the second method does not take into consideration the possibility that the pixel coordinates might be slightly of. So the best option might be to first use the second method to get a good initial guess for the first method, however you might already consider that this initial guess is already good enough. When a very large number of cameras is used then it might also be an option to first use only a small subset of the cameras in the second method to obtain the initial guess and then use all cameras for the first method.&lt;/p&gt;&#xA;" OwnerUserId="1487" LastEditorUserId="1487" LastEditDate="2018-07-20T10:17:03.623" LastActivityDate="2018-07-20T10:17:03.623" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16068" PostTypeId="1" CreationDate="2018-07-18T19:48:19.020" Score="2" ViewCount="429" Body="&lt;p&gt;I am building a robot arm that is actuated by a pneumatic cylinder. Extending and retracting the piston would increase and decrease the joint angle respectively. This is done using a 5/3 solenoid valve controlled by a relay switch. The actual joint angle is feedback using a potentiometer connected to analog A0 pin of an Arduino Uno. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a basic idea of how the whole mechanism would work to control position of the piston but have some queries and also on the use of Analog Comparator to serve as interrupt.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The components I am using are:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.robotshop.com/uk/makeblock-100mm-double-acting-mini-cylinder.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pneumatic Cylinder&lt;/a&gt; that would be fitted with speed reducing connectors to hopefully slow down the piston action enough to be controllable&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.amazon.co.uk/Heschen-Electrical-Pneumatic-Solenoid-4V230-08C/dp/B0731F1L9L/ref=sr_1_1?s=diy&amp;amp;ie=UTF8&amp;amp;qid=1527682922&amp;amp;sr=1-1&amp;amp;keywords=Heschen%205%20way%203%20position&quot; rel=&quot;nofollow noreferrer&quot;&gt;5/3 Solenoid Valve&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.ebay.co.uk/itm/5V-or-12V-1-2-4-8-16-Channel-Relay-Module-Arduino-Raspberry-PI-ARM-AVR-DSP-PIC/262722739443?hash=item3d2b7edcf3:m:mewvpRdfNf5lyx157fF9xGQ&quot; rel=&quot;nofollow noreferrer&quot;&gt;Relay Module&lt;/a&gt;  &lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://uk.rs-online.com/web/p/potentiometers/1548183/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Potentiometer&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Basic idea of how the system would function:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Potentiometer reading is mapped to joint angle range&lt;/li&gt;&#xA;&lt;li&gt;User keys in target joint angle&lt;/li&gt;&#xA;&lt;li&gt;If target joint angle &amp;lt; measured joint angle, switch on relay to power desired solenoid valve and extend the piston and the opposite when target joint angle &gt; measured joint angle&lt;/li&gt;&#xA;&lt;li&gt;If target joint angle = measured joint angle, switch off relays and solenoid valve would be in closed position, i.e.: no air input and piston stays in position&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Queries:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Interrupt vs Polling&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The control loop needs to know when the actual joint angle = target joint angle so as to switch off the relay and power down the solenoid valve. This requires an interrupt signal when the potentiometer reading reaches a certain value correct? &lt;/li&gt;&#xA;&lt;li&gt;Polling of the potentiometer using analogRead() may miss a reading? Or would polling simply be the more straightforward way to get joint angle feedback? &lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Analog Comparator&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If interrupt is the way to go, this would mean needing to use the in-built analog comparator on Uno. I read up on it and the idea is to put a reference voltage at D7 of Uno, while the potentiometer values are input at D6. When the input voltage passes the reference voltage, an interrupt (either falling or rising edge) would occur.&lt;/li&gt;&#xA;&lt;li&gt;But this would mean that there can only be one fixed reference voltage right? Or is there a means to have variable reference voltage sent in to D7 according to user input desired values?&lt;/li&gt;&#xA;&lt;li&gt;And the Uno only has these two pins for analog comparator, it would not be able to support a two-joint robot arm with angles measured by two different potentiometers correct? &lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Or are there smarter ways to achieve control of the piston position? &lt;/p&gt;&#xA;" OwnerUserId="20746" LastEditorUserId="20746" LastEditDate="2018-07-18T21:11:42.033" LastActivityDate="2018-10-17T09:00:45.963" Title="Control Pneumatic Cylinder Position with Potentiometer and Analog Comparator on Arduino Uno" Tags="&lt;arduino&gt;&lt;control&gt;&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16069" PostTypeId="1" CreationDate="2018-07-19T07:14:17.960" Score="1" ViewCount="69" Body="&lt;p&gt;I was going through UC Berkeley's CS287 - Advanced Robotics course. In particular - &lt;a href=&quot;https://people.eecs.berkeley.edu/~pabbeel/cs287-fa11/slides/LQR.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;Optimal Control for&#xA;Linear Dynamical Systems and Quadratic Cost&#xA;(“LQR”)&lt;/em&gt;&#xA; by Pieter Abbeel&lt;/a&gt; (Slide 10).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let us say we use LQR to go from point A to point B. The motion planner will probably output a trajectory, which we will follow using LQR. In the finite horizon discrete time case, how do we set the value of total time horizon $T$, and the value of each time step $\delta t$, and the waypoints $x^*_t$ to follow?&lt;/p&gt;&#xA;" OwnerUserId="20811" LastEditorUserId="20811" LastEditDate="2018-07-19T12:19:26.587" LastActivityDate="2018-07-19T12:19:26.587" Title="Trajectory following using LQR - Setting horizon time and intermediate points" Tags="&lt;control&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16070" PostTypeId="2" ParentId="16068" CreationDate="2018-07-19T08:09:58.600" Score="1" Body="&lt;p&gt;Answering Your questions:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;ul&gt;&#xA;&lt;li&gt;It doesn't require any interrupt signal. You can just check if measured joint angle is equal to the desired one.&lt;/li&gt;&#xA;&lt;li&gt;I have no idea why analogRead() would &quot;miss&quot; a reading. If the software will be properly written (no redundant code inside interrupts, that &lt;em&gt;might&lt;/em&gt; cause the software to hang on the interrupt), then analogRead() should work as expected.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;As for analog comparator answers, &lt;a href=&quot;http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_Datasheet.pdf#page=299&quot; rel=&quot;nofollow noreferrer&quot;&gt;let's check out the ATMega328P documentation&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;ATMega328P supports only one analog comparator, so only one reference voltage should be supplied. Therefore, using more potentiometers with this method will require usage of external comparators.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Morever, analog comparator output will only give You the information if measured voltage is &quot;higher or equal&quot; or &quot;lower&quot; than the voltage on the other input - there is no &quot;equal&quot; signal, so Your three step regulator would be always rocking around the desired point.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Taking everything into consideration, software measurement of the potentiometer voltage for the negative feedback of the control loop will be best for Your application.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;One thing for You to remember: arm, relays, valves, pistons etc. have delays and inertia, as these are moving physical objects. Moreover, voltage measurement on the potentiometer always have some uncertanities and is never super steady, as we'd like to. Therefore, your robotic arm with Yours regulation algorithm will have a very big problem with going exactly to the point, where potentiometer voltage is correct. Probably it will oscillate around the desired angle. Adding &lt;a href=&quot;https://en.wikipedia.org/wiki/Hysteresis#In_engineering&quot; rel=&quot;nofollow noreferrer&quot;&gt;hysteresis&lt;/a&gt; to Your control algorithm should solve that problem - it will get to the angle &lt;em&gt;near&lt;/em&gt; desired one without oscillation, if the hysteresis will be big enough. With that, You'll get a &lt;a href=&quot;https://en.wikipedia.org/wiki/Double-setpoint_control&quot; rel=&quot;nofollow noreferrer&quot;&gt;double-setpoint controller&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, please consider usage of the &lt;a href=&quot;https://en.wikipedia.org/wiki/PID_controller&quot; rel=&quot;nofollow noreferrer&quot;&gt;PID algorithm&lt;/a&gt;. For Your hardware configuration it will function at rather low frequencies (as relays and valves need some time to be open), but &lt;a href=&quot;https://en.wikipedia.org/wiki/PID_controller#Overview_of_methods&quot; rel=&quot;nofollow noreferrer&quot;&gt;properly tuned&lt;/a&gt; it should give You satisfying results, reaching desired joint angle fast and with small regulation error.&lt;/p&gt;&#xA;" OwnerUserId="14673" LastActivityDate="2018-07-19T08:09:58.600" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16071" PostTypeId="1" CreationDate="2018-07-19T18:19:35.867" Score="0" ViewCount="73" Body="&lt;p&gt;I am trying to implement GraphSlam. I go through this paper &lt;a href=&quot;http://robots.stanford.edu/papers/thrun.graphslam.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://robots.stanford.edu/papers/thrun.graphslam.pdf&lt;/a&gt;. I have some doubt about the algorithm. I attached a picture with this question&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/AKeFL.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/AKeFL.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is that what is the need to augmented a identity matrix in line no 7 and 8 of this algorithm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please help to clear the doubt.&lt;/p&gt;&#xA;" OwnerUserId="20610" LastEditorUserId="20610" LastEditDate="2018-07-19T19:05:08.977" LastActivityDate="2021-04-11T23:01:40.133" Title="Graph slam augmentation of Identity Matrix" Tags="&lt;mobile-robot&gt;&lt;slam&gt;&lt;simulation&gt;&lt;path-planning&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16072" PostTypeId="1" AcceptedAnswerId="16073" CreationDate="2018-07-19T21:25:25.953" Score="2" ViewCount="244" Body="&lt;p&gt;&lt;strong&gt;Background Information&lt;/strong&gt;: I'm new to robotics and my school currently has access to a 6DOF Universal Robot (UR-10). I'm programming it using its scripting language URscript and the arm has these two commands...&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;code&gt;speedl(vector of speeds [x, y, z, Rx, Ry, Rz])&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;where the list of speeds are linked to the end effector.&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;&lt;code&gt;speedj(joints speeds[base, shoulder, elbow, wrist1, wrist2, wrist3])&lt;/code&gt;, given in rads/s&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The built-in &lt;code&gt;speedj&lt;/code&gt; is by far superior in terms of smooth motion, however using a PS3 controller it is much harder to control and thus I would like to be able send controls linear commands (left, right, fwd, back, up, and down) and have them be converted inappropriate joint speeds. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt; I want to move the arm linearly, but I don't know how to convert linear motion into an equivalent representation in terms of the joint speeds. Where should I start researching? Is there a topic that covers my question?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I doubt there's an immediate answer to my problem, but I'm unsure where to start looking. Any keywords that might facilitate my research would be awesome.&lt;/p&gt;&#xA;" OwnerUserId="20816" LastEditorUserId="9176" LastEditDate="2018-07-19T22:58:46.243" LastActivityDate="2018-07-20T00:37:16.403" Title="Creating linear end effector motion using joint speeds: Converting tool speed to joint speeds" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;motion-planning&gt;&lt;industrial-robot&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16073" PostTypeId="2" ParentId="16072" CreationDate="2018-07-20T00:37:16.403" Score="2" Body="&lt;p&gt;Joint velocities and tool velocities are directly related through the following equation&#xA;$$&#xA;\dot{x} = J(q)\dot{q},&#xA;$$&#xA;where $\dot{x} \in \mathbf{R}^6$ is the tool (linear and angular) velocities, $\dot{q} \in \mathbf{R}^n$ is the joint velocities ($n$ is the number of joints), and $J(q)$ is the Jacobian matrix, which depends on the robot joint values $q$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think this Jacobian is the mapping that you want. Maybe you want to search for &lt;em&gt;robot Jacobian&lt;/em&gt;, etc. &lt;/p&gt;&#xA;" OwnerUserId="7610" LastActivityDate="2018-07-20T00:37:16.403" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16074" PostTypeId="1" CreationDate="2018-07-20T01:33:40.780" Score="8" ViewCount="464" Body="&lt;p&gt;I've read this link: &lt;a href=&quot;http://wiki.ros.org/kinetic/Installation/Source&quot; rel=&quot;noreferrer&quot;&gt;http://wiki.ros.org/kinetic/Installation/Source&lt;/a&gt; and have known that the command &lt;code&gt;rosdep install --from-paths src --ignore-src --rosdistro kinetic --simulate&lt;/code&gt; can list all necessary dependencies of ROS on a clean system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, I've read this link: &lt;a href=&quot;http://wiki.ros.org/catkin/package.xml&quot; rel=&quot;noreferrer&quot;&gt;http://wiki.ros.org/catkin/package.xml&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I'm thinking if it is possible to list only the exec_depend of ROS?&lt;/p&gt;&#xA;" OwnerUserId="20463" LastActivityDate="2021-05-10T20:06:15.520" Title="Is it possible to list all runtime dependencies for ROS" Tags="&lt;ros&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16076" PostTypeId="1" CreationDate="2018-07-20T09:52:58.483" Score="0" ViewCount="77" Body="&lt;p&gt;I have homing switches and I'm unsure if my zero should be right after they are done homing or if the zero is supposed to be the center of my build volume?&lt;/p&gt;&#xA;" OwnerUserId="20795" LastEditorUserId="19143" LastEditDate="2018-07-23T13:06:24.400" LastActivityDate="2020-01-09T19:41:01.700" Title="First CNC router, where should my zero position be?" Tags="&lt;cnc&gt;&lt;manufacturing&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16078" PostTypeId="1" CreationDate="2018-07-20T15:05:41.497" Score="1" ViewCount="68" Body="&lt;p&gt;I have some straight and curve pieces with numbers, they are used to build tracks (of $5$ lanes) for my cars (figure $1$), I can send commands to the cars using an SDK on the Raspberry (set the speed for example ...), when a car is moving, a built-in downward facing camera scans the infrared markings on the track, a microcontroller inside the car decodes these markings to get the id of the position on the piece (see figure $2$) and the number of the piece, then a message PM=(piece number, position id, car linear velocity) is sent via Bluetooth low energy to a Raspberry. The car can send these messages AT LEAST every $0.2$ second. The problem is that the car can reach a linear velocity of $100cm/s$ and move quite a distance after it sends the PM message, so it will be a lag between the actual state of the car and the state contained in the received PM message.&#xA;There is also the problem of delayed and lost packets containing PM messages because we use one Raspberry to communicate with $3$ cars via Bluetooth low energy (sometimes the Raspberry keeps receiving packets from one car even if the others try to send), which makes the lag larger. So, we cannot rely only on the received PM messages to determine the real-time position of the car.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/JU76q.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JU76q.jpg&quot; alt=&quot;figure 1 and 2&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore I am trying to implement on the Raspberry a Kalman filter to estimate the position of the car on the track in real-time, but given the fact that I don’t have the $(x,y)$ coordinates of the car I don’t know how to apply the algorithm using (position id, number of the piece), also I want to know how to do so the update step can take into account the delayed and lost measurements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the car leaves a piece, it sends the wheels displacements but it is not sufficient I think, I have neither the heading nor the angular velocity of the car. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is one thing that I think is very useful; if no commands are sent to the car, the microcontroller inside it ensures that the car will keep moving on the same lane and tries to maintain its linear velocity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to have your advice, opinions or ideas of another filter or algorithm, if you have any question, please ask me.&lt;/p&gt;&#xA;" OwnerUserId="20821" LastEditorUserId="20821" LastEditDate="2018-07-20T19:30:28.937" LastActivityDate="2018-07-20T19:30:28.937" Title="How to apply Kalman filter in this case?" Tags="&lt;mobile-robot&gt;&lt;kalman-filter&gt;&lt;pose&gt;" AnswerCount="0" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="16079" PostTypeId="1" CreationDate="2018-07-20T20:09:43.500" Score="0" ViewCount="53" Body="&lt;p&gt;Lets say a quadrocopter's rotors are 2 feet apart, and 2 feet beneath it is attached a symmetrical, balanced payload that was x feet wide (with space for air from the rotors to move through) - if the rotors are powerful enough, would it still be somewhat controllable laterally if x was greater than 2 feet, or would that configuration ruin all ability to control regardless of the rotors' power? &lt;/p&gt;&#xA;" OwnerUserId="20814" LastActivityDate="2019-08-19T04:05:30.597" Title="Could a quadrocopter still be controllable if its payload was wider than the quadrocopter?" Tags="&lt;control&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16081" PostTypeId="2" ParentId="15872" CreationDate="2018-07-21T05:34:11.437" Score="1" Body="&lt;p&gt;In robotics, a holonomic chassis is one that can move in an arbitrary direction regardless of the robot's facing. Such a robot can move in interesting ways. For example, if you have a fixed camera on a wheeled holonomic robot, the robot could smoothly move, turn, park, etc. without turning the camera.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if the wheel has to change direction before moving in a given direction, then the robot is nonholomic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only ones I've seen use omni-wheels or Mecanum wheels. Different programming is needed for both types.&lt;/p&gt;&#xA;" OwnerUserId="19275" LastActivityDate="2018-07-21T05:34:11.437" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16082" PostTypeId="1" AcceptedAnswerId="16095" CreationDate="2018-07-22T12:42:18.840" Score="0" ViewCount="315" Body="&lt;p&gt;I want to use matlab for estimating the position of end effector given joint angles. I saw convenient tool to build robot model using RigidBodyTree. My manipulator is planar, with only revolute joints with N number of joints. I want for a given manipulator (where N can be changed) to give as an input angles for manipulator's joints and to get position of the end effector. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I only found InverseKinematics which does exactly the opposite. But nothing about Forward Kinematics. How could I possibly do that in Matlab?&lt;/p&gt;&#xA;" OwnerUserId="11341" LastActivityDate="2018-07-25T13:11:41.773" Title="Getting position from joint angles in Matlab RigidBodyTree" Tags="&lt;matlab&gt;&lt;forward-kinematics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16083" PostTypeId="2" ParentId="16076" CreationDate="2018-07-23T09:27:36.383" Score="3" Body="&lt;p&gt;The location of the homing position does not make any theoretical difference, you can zero (or set to any constant value) your axis positions at any desired position. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;From a pracitcal point of view, you can consider the following aspects:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;switches might get in the way of chips, switches might be damaged or the other way around, switches might get in the way of chip evacuations. From this point of view, the exteremity of the axes is probably a good option. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;homing position should be easy to find, even if encoder values are not to be trused (e.g. axes can be ofset manually, without power). From this point of view, an axis extremity is a good option, since you can just drive the axis in one direction until you hit the switch. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The toolchainge position, if you have automated toolchange is an important position, having a precise toolchange position is important. Colocating the toolchange position with the homing position might be also a good idea (event better when the above criteria are also met with the toolchange position).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2018-07-23T09:27:36.383" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16084" PostTypeId="1" CreationDate="2018-07-23T11:43:02.693" Score="3" ViewCount="40" Body="&lt;p&gt;I am trying to build a microcontroller based higher payload version of a servo motor using geared induction motor with VFD as a control device.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For this purpose I have selected a 1HP motor running at 1800RPM which is geared down to 30RPM. The position feedback is captured using AS5048 14bit magnetic encoder and Cortex M4 microcontroller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since I don't have any idea about State Space Controller and it's implementation using microcontroller, I am planning to implement it using PID controller. I have the following questions related to this&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) Is it possible to implement it using PID controller for varying load without affecting the tuning parameters for a reasonable range of load or does it require changing the parameters on the fly depending on the load?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) How to select the update rate of PID control loop for motor position control? I am a communicating with the encoder using 400KHz I2C interface and the controller output is given as a voltage signal to the VFD for frequency/speed control.&lt;/p&gt;&#xA;" OwnerUserId="20836" LastActivityDate="2018-07-23T18:16:16.277" Title="Which controller to use for custom servo?" Tags="&lt;pid&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16085" PostTypeId="2" ParentId="16060" CreationDate="2018-07-23T12:05:10.277" Score="0" Body="&lt;p&gt;There are more things you should consider:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Air pressure change will be caused by a force acting on &#xA;the tube. Now the elasticity of the tube will be an important factor also. A very rigid tube will only allow small deformations which will lead to small changes in air pressure. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Resolution of the sensor is important to consider. You want to be able to detect small pressure changes.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Maximum range is only a problem if the sensor will be damaged above the maximum treshold. Since you only want to detect a presence, saturating your sensor is not a problem, given that there is no damage from the overpressure.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;the type of pressure sensor used is not important if you can corelate their measurement range and resolution to the above parameters&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So, you should start with the tube. You can probably coralate a tube elasiticity to sensitivity and range if you define the minimum obstacle shape  (area) that can collide with the robot and the threshold force at which you want to trigger something, and a variation of acceptable tolerance on that force. In may cases with &quot;toy&quot; robots, this could be done through trial and error, for indusrial deployment, you would need a risk analysis and risk mitigation measures (and all connected task, which you should know about if you are doing industrial deployment).&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2018-07-23T12:05:10.277" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16086" PostTypeId="1" AcceptedAnswerId="16286" CreationDate="2018-07-23T14:42:20.667" Score="1" ViewCount="79" Body="&lt;p&gt;I have been trying to implement FastSlam 1.0. To implement this, I need to create particles. Now my confusion is how to create Particles? I have some odometry and Measurement data. Using those data values, how could I generate the Particles?&lt;/p&gt;&#xA;" OwnerUserId="20569" LastEditorUserId="19515" LastEditDate="2020-07-27T18:28:04.587" LastActivityDate="2020-07-27T18:28:04.587" Title="How to generate Particles in Particle Filter?" Tags="&lt;mobile-robot&gt;&lt;slam&gt;&lt;particle-filter&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16088" PostTypeId="2" ParentId="16084" CreationDate="2018-07-23T18:16:16.277" Score="2" Body="&lt;h1&gt;Accounting for variable load&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;In a properly tuned system, the effect of load should mainly affect following error, i.e. how closely actual movement follows desired movement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Managing load is more about not planning moves which exceed the capabilities of the motor, load and tuning. Ask your system to accelerate too hard, or change acceleration too quickly (high jolt/jerk) and the load could cause the motor to fall behind where it needs to be.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typically the integral term in your PID is what contributes most to correcting for load induced following error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider a heavy weight on the rim of a lightweight wheel that we want to turn at a constant velocity at 60rpm. Starting with the weight at bottom, we plan 360 waypoints of 1 degree each, with a speed of 360 degrees/second.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At each waypoint, the P term tries to make the motor turn by 1 degree and the D terms tries to keep the speed at 360 degrees/second. With the weight at the bottom, there is no extra load due to gravity, but as the the wheel turns, the action of gravity on the weight will cause the wheel to fall behind where it needs to be.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since the wheel hasn't quite got as far as it should, the P term will be a little higher than it would be otherwise, similarly as it is running a little slower than it should, the D term will be a little higher. Neither will typically be enough to to completely compensate though. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sub&gt;Note: If you tune P and D aggressively enough to compensate completely for a given load, those terms will almost certainly result in terms which are not aggressive enough for heavier loads and may over-compensate and go unstable for lighter loads. This is one of the reasons why a PID controller is preferable to a PD controller.&lt;/sub&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is where the integral term comes in. You tune your PD terms so they don't go unstable at the lightest expected load, and then use the accumulated error to provide the additional lifting force, and limit the following error. As you get closer to peak gravity effect  (around 90 degrees), the contribution of the I term will ramp up, and as the wheel turns further and the effect of gravity diminishes, the error will drop and the contribution of the I term will ramp down.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that this example also demonstrates that 'following error' is signed - it can be negative.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As the wheel takes the weight over the top, gravity will start accelerating the wheel, rather than decelerating it. Assuming friction is negligible, acceleration due to gravity will mean that the wheel goes slightly further than it should, so the P term will be a little lower than it would be otherwise, similarly as it is running a little faster than it should, the D term will be a little lower, but again it's the mainly accumulated error and the I term which reduces motor torque to compensate for the load.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To summarise, the I term should help compensate for load.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The range of possible loads will be determined by how aggressively you tune your PID terms, and how close your desired performance characteristics (in speed, load and following error) are to the capabilities of your motor - i.e. how much headroom your system has.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The more headroom you have, the softer you can tune your motors and the greater the range of possible loads the system will be able to handle.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;PID control rate&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Some people say your PID control rate should be as high as possible, but in my experience it's a balancing act depending on your system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The theory is that the higher the rate of control, the more closely your control loop can track and react to your inputs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The trouble is, that's fine until you reach the noise floor of the system. If you are working with low resolution encoders, aggressive tuning, a PID loop implemented with integer arithmetic, and your PID control rate is too high, quantisation noise can become significant and your system may not react smoothly to commands to move at slow speeds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Individually these can all be ameliorated, you can implement PID with floating point arithmetic, tune less aggressively or swap in higher resolution encoders, but don't chase a higher PID control rate than you need.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that you cam implement PID loops whose terms are independent of control loop period, but it adds more complexity and more mathematical operations to for normalisation, so it all depends on how much processing headroom your system has.&lt;/p&gt;&#xA;" OwnerUserId="37" LastActivityDate="2018-07-23T18:16:16.277" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16089" PostTypeId="1" CreationDate="2018-07-23T19:35:41.140" Score="0" ViewCount="104" Body="&lt;p&gt;Currently im working on an in-pipeline inspection robot that can navigate through narrow pipeline. My design is to use a propeller at the back to push the robot forward. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The front part of the robot will have a camera to inspect the pipeline interior. Additionally, the robot will have support wheels to provide stability, braking and enable the turning of the robot, either right or left.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need help in determining what type of propeller will provide enough force to push the robot forward through the pipeline.Also, what type of motor to use for that propeller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you for your effort and time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ecd0d.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ecd0d.jpg&quot; alt=&quot;in-pipeline inspection robot with propeller sketch&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="20841" LastActivityDate="2018-10-25T10:00:36.543" Title="What propeller to use for in-pipeline robot?" Tags="&lt;motor&gt;&lt;wheeled-robot&gt;" AnswerCount="1" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="16091" PostTypeId="2" ParentId="16079" CreationDate="2018-07-25T00:24:31.953" Score="-1" Body="&lt;p&gt;While the payload will affect contols (as each payload do) with enough powerful rotors it will be controlablle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We know, that quadrocopter with rotors inside rings is contollable.&#xA;Even if you make those ring longer, it would be still controllable.&#xA;Even if those rigs are long pipes, it would be still controllable.&#xA;And even if those pipes are bend to sides, it would be still controllable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if you put the payload well down under the bend pipes, it would be still controlable. And so you even do not need such rings/pipes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There will be problem with the weight, with wind moving the payload, if the payload is near the rotors, then it will be harder to control and would need more power, but while the rotors can pull air from above with enough force (and dispose the air somehow, just to be able pull more of air from above) it would be controllable. Maybe you would need computer for fast response to make that stable, but this is just technicality, not principaial problem.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Also another view: imegine, that you have 100 m long rope (as for flying kite) and attach it under the quad, then fly it up - it will be contollable ofc. Even when it reach the rope limit, it could be contolled to take nearly any position on the half-spere allowed by the rope.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the rotor would be powerfull, it would take you to the air. If you fix it to the ground, then if would still be controllable, just not able to lift whole Earth. But if you attach it to really big desk, it would lift such desk up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even if you would attach it to really wide payload (like parachute under it) it would be controllable on the 100m rope for sure. Also on 99m, 98m and so .. as the rope would be shorter (like 10, 5, 2, 1m), it would be harder to make it fly in stable manners, but it would be still controllable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So it is just function of rotor power and controller speed of reactions.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The quad works such, that if takes air from above, climbing inside it as a srew to nut. The rocket (on the other hand - it is opposite) works such, that it put weight fast under it (the burned gas) - so rocket may not be able pull wide payload under it, but would be able push wide load above it.&lt;/p&gt;&#xA;" OwnerUserId="16496" LastActivityDate="2018-07-25T00:24:31.953" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16093" PostTypeId="1" AcceptedAnswerId="16786" CreationDate="2018-07-25T10:10:26.997" Score="4" ViewCount="1566" Body="&lt;p&gt;I am studying and coding particle filters and I am using the Low variance sampling algorithm suggested in the Probabilistic Robotics book. I understand the procedure for the algorithm. A random number &lt;code&gt;r&lt;/code&gt; is picked from the interval &lt;code&gt;(0, 1 / M)&lt;/code&gt; and a variable &lt;code&gt;U&lt;/code&gt;, calculated based on &lt;code&gt;r&lt;/code&gt; is used to navigate the sample space systematically. A variable &lt;code&gt;c&lt;/code&gt;(cumulative sum) is initialized with the first weight, and incremented by adding weights until it is higher than &lt;code&gt;U&lt;/code&gt;. Once the cumulative sum is higher than &lt;code&gt;U&lt;/code&gt;, it picks the sample corresponding to the weight last added. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem that I have is that I don't see how this picks up a good sample set for the next iteration. This seems very random or at least favorable to lower valued weights. If the initial value of &lt;code&gt;r&lt;/code&gt; is very low, &lt;code&gt;U&lt;/code&gt; is also low initially and it may pick a sample whose weight is low, unless weight vector is sorted from high to low (Is it sorted?). However, this &lt;a href=&quot;https://youtu.be/eAqAFSrTGGY&quot; rel=&quot;nofollow noreferrer&quot;&gt;video&lt;/a&gt; suggests that particles with higher weight have a better chance of getting picked. The algorithm doesn't convey this idea to me. Please help if you have an explanation.&lt;/p&gt;&#xA;" OwnerUserId="10959" LastEditorUserId="10959" LastEditDate="2018-07-25T11:04:39.200" LastActivityDate="2018-12-03T17:01:58.427" Title="Why does the low variance resampling algorithm for particle filters work?" Tags="&lt;slam&gt;&lt;particle-filter&gt;&lt;probability&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16094" PostTypeId="1" CreationDate="2018-07-25T12:59:32.450" Score="4" ViewCount="172" Body="&lt;p&gt;I am trying to implement GraphSLAM from Sebastian Thrun's paper, &lt;a href=&quot;http://robots.stanford.edu/papers/thrun.graphslam.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;The GraphSLAM Algorithm with Applications to Large-Scale Mapping of Urban Structures&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I compute the inverse of my information matrix, $\Omega^{-1}$, I get an error, &lt;code&gt;Matrix is Singular&lt;/code&gt;, because $\Omega$ is &lt;a href=&quot;https://en.wikipedia.org/wiki/Invertible_matrix&quot; rel=&quot;nofollow noreferrer&quot;&gt;singular&lt;/a&gt;. How could I avoid matrix singularity when implementing GraphSLAM?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please don't suggest me &lt;code&gt;pinv()&lt;/code&gt; method it cannot give me actual answer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I had considered using a pseudo-inverse, but, instead, I want to prevent $\Omega$ from becoming singular so that I can compute the exact inverse.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Below is where $\Omega$ is computed (see line 7), from &lt;strong&gt;Table 2. Calculation of  and ξ in GraphSLAM&lt;/strong&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/LEhat.png&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Table 2. Calculation of  and ξ in GraphSLAM&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/LEhat.png&quot; alt=&quot;Table 2. Calculation of  and ξ in GraphSLAM&quot; title=&quot;Table 2. Calculation of  and ξ in GraphSLAM&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="20610" LastEditorUserId="9176" LastEditDate="2018-07-25T22:48:11.017" LastActivityDate="2019-12-20T08:01:50.387" Title="How to avoid matrix singularity in GraphSLAM" Tags="&lt;mobile-robot&gt;&lt;slam&gt;&lt;ekf&gt;&lt;singularity&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16095" PostTypeId="2" ParentId="16082" CreationDate="2018-07-25T13:11:41.773" Score="1" Body="&lt;p&gt;There is the &lt;a href=&quot;https://de.mathworks.com/help/robotics/ref/robotics.rigidbodytree.gettransform.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;gettransform()&lt;/a&gt; function for this. It gives you the transformaation matrix of the entire robot, from base to end-effector (if you inpput the paremeters accordingly). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It returns a 4x4 transformation matrix, you can convert the 3x3 rotation part of the 4x4 matrix using the dcm2angle() function to euler angles, the first three rows of the last column of the 4x4 matrix are your positions.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2018-07-25T13:11:41.773" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16096" PostTypeId="5" CreationDate="2018-07-25T21:21:37.413" Score="0" Body="&lt;p&gt;A point of an undefined mathematical object. A matrix is singular when it has no inverse.&lt;/p&gt;&#xA;" OwnerUserId="20709" LastEditorUserId="20709" LastEditDate="2018-07-26T13:25:12.743" LastActivityDate="2018-07-26T13:25:12.743" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16097" PostTypeId="4" CreationDate="2018-07-25T21:21:37.413" Score="0" Body="To be used with questions regarding non-invertible matrices." OwnerUserId="20709" LastEditorUserId="20709" LastEditDate="2018-07-26T13:24:40.637" LastActivityDate="2018-07-26T13:24:40.637" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16098" PostTypeId="1" AcceptedAnswerId="16112" CreationDate="2018-07-25T23:14:41.597" Score="1" ViewCount="211" Body="&lt;p&gt;for manipulators that lift heavy loads, e.g. a car or a cow, what would be the ideal angular velocity?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any standards for arm safe moving speed? (of course I know it depends on the project and use, the question is a yes or no)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any difference when the manipulator works around people ? (since in some cases people can be moving around it, so should it move slower ?)&lt;/p&gt;&#xA;" OwnerUserId="20791" LastEditorUserId="18235" LastEditDate="2018-07-27T08:56:08.530" LastActivityDate="2018-07-27T09:08:24.053" Title="Are there standard angular velocities when it comes to robotic arms?" Tags="&lt;robotic-arm&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16099" PostTypeId="1" AcceptedAnswerId="16100" CreationDate="2018-07-25T23:37:02.933" Score="2" ViewCount="141" Body="&lt;p&gt;I have an AUV with a 12 inch diameter, 29 inch long capsule. Inside the capsule sits an Intel NUC computer, an NVIDIA Jetson GPU, an Arduino Mega, a Sparton IMU (9 DOF) as well as a custom voltage regulator. Given the noise, &lt;strong&gt;would it be practical to attempt to use my magnetometer, even with calibration and filtering?&lt;/strong&gt; If so, what should I keep in mind regarding the placement of my IMU in the AUV's capsule, given that I have already read &lt;a href=&quot;https://robotics.stackexchange.com/q/10525/20709&quot;&gt;this post&lt;/a&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have tried moving it as far away from the sources of noise as possible but the noise persists. I looked into shielding, but that looks like it would block the Earth's magnetic data as well, which would render the shield pointless. &lt;/p&gt;&#xA;" OwnerUserId="20709" LastActivityDate="2018-08-21T16:11:04.253" Title="Practicality of using magnetometer inside AUV" Tags="&lt;imu&gt;&lt;calibration&gt;&lt;noise&gt;&lt;magnetometer&gt;&lt;auv&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16100" PostTypeId="2" ParentId="16099" CreationDate="2018-07-26T12:47:08.437" Score="4" Body="&lt;p&gt;Mags are used in almost all UAVs. It will be useful and it will be a unique source of information.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Adding a some shielding between the mag and your computers and power lines will greatly reduced the noise. Noise can be further reduced by twisting all of the wires that carry significant current (wires to motors and ESCs).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Be aware that the measurement will still be noisy. It should be incorporated into your estimated state using a Kalman filter. Look into fusing measurements from the mag with measurements from an IMU . This will give far superior results compared to treating the measurements as your real state.&lt;/p&gt;&#xA;" OwnerUserId="8842" LastEditorUserId="18235" LastEditDate="2018-07-27T08:52:06.067" LastActivityDate="2018-07-27T08:52:06.067" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16101" PostTypeId="5" CreationDate="2018-07-26T15:44:22.920" Score="0" Body="&lt;p&gt;&lt;a href=&quot;http://www.orocos.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Orocos&lt;/a&gt; is a portable c++ library for robot controller programming.&lt;/p&gt;&#xA;" OwnerUserId="20709" LastEditorUserId="20709" LastEditDate="2018-07-26T17:19:16.887" LastActivityDate="2018-07-26T17:19:16.887" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16102" PostTypeId="4" CreationDate="2018-07-26T15:44:22.920" Score="0" Body="A C++ library for robot controller programming." OwnerUserId="20709" LastEditorUserId="20709" LastEditDate="2018-07-26T17:05:22.437" LastActivityDate="2018-07-26T17:05:22.437" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16103" PostTypeId="5" CreationDate="2018-07-26T15:47:43.780" Score="0" Body="&lt;p&gt;The exploration problem from &lt;a href=&quot;https://en.wikipedia.org/wiki/Exploration_problem&quot; rel=&quot;nofollow noreferrer&quot;&gt;the wiki&lt;/a&gt; is about maximizing a robot's knowledge of its environment. In cases where the environment is dynamic and/or has many obstacles, this can be a very hard problem to solve computationally.&lt;/p&gt;&#xA;" OwnerUserId="20709" LastEditorUserId="20709" LastEditDate="2018-07-26T17:18:55.040" LastActivityDate="2018-07-26T17:18:55.040" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16104" PostTypeId="4" CreationDate="2018-07-26T15:47:43.780" Score="0" Body="The act of maximizing an agent's knowledge of its environment." OwnerUserId="20709" LastEditorUserId="20709" LastEditDate="2018-07-26T17:19:36.583" LastActivityDate="2018-07-26T17:19:36.583" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16105" PostTypeId="5" CreationDate="2018-07-26T16:02:59.647" Score="0" Body="&lt;p&gt;Directly quoted from &lt;a href=&quot;https://en.wikipedia.org/wiki/Statistics&quot; rel=&quot;nofollow noreferrer&quot;&gt;the wiki&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Statistics is a branch of mathematics dealing with the collection, organization, analysis, interpretation and presentation of data.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="20709" LastEditorUserId="20709" LastEditDate="2018-07-26T17:05:32.287" LastActivityDate="2018-07-26T17:05:32.287" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16106" PostTypeId="4" CreationDate="2018-07-26T16:02:59.647" Score="0" Body="A branch of mathematics dealing with the collection, organization, analysis, interpretation and presentation of data" OwnerUserId="20709" LastEditorUserId="20709" LastEditDate="2018-07-26T17:18:59.440" LastActivityDate="2018-07-26T17:18:59.440" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16107" PostTypeId="5" CreationDate="2018-07-26T16:08:59.460" Score="0" Body="&lt;p&gt;Optimization of a system by altering the mathematical parameters or coefficients of one or more of the system's models.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is sometimes done by guess/check, ad hoc procedure, machine learning, linear programming, and more.&lt;/p&gt;&#xA;" OwnerUserId="20709" LastEditorUserId="20709" LastEditDate="2018-07-26T17:19:10.483" LastActivityDate="2018-07-26T17:19:10.483" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16108" PostTypeId="4" CreationDate="2018-07-26T16:08:59.460" Score="0" Body="Optimization of a system by altering the mathematical parameters or coefficients of one or more of the system's models." OwnerUserId="20709" LastEditorUserId="20709" LastEditDate="2018-07-26T17:06:03.883" LastActivityDate="2018-07-26T17:06:03.883" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16109" PostTypeId="5" CreationDate="2018-07-26T16:14:30.857" Score="0" Body="&lt;p&gt;Unwanted or modified signals detracting from some form of reception or perception.&lt;/p&gt;&#xA;" OwnerUserId="20709" LastEditorUserId="20709" LastEditDate="2018-07-26T17:19:33.150" LastActivityDate="2018-07-26T17:19:33.150" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16110" PostTypeId="4" CreationDate="2018-07-26T16:14:30.857" Score="0" Body="Unwanted or modified signals detracting from some form of reception or perception." OwnerUserId="20709" LastEditorUserId="20709" LastEditDate="2018-07-26T17:19:30.313" LastActivityDate="2018-07-26T17:19:30.313" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16111" PostTypeId="2" ParentId="16098" CreationDate="2018-07-26T16:32:50.687" Score="1" Body="&lt;p&gt;Ideally, angular velocity would be provided in radians per second. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other than suggesting the use of the metric system, there are not pre-specified values for what is best for a robot arm.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;These numbers are highly dependent on the current task and robot. Even your term &quot;heavy&quot; is not specific enough- is it heavy for an industrial arm that can lift up cars?  Or is it a heavy gallon of milk?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lastly, not knowing the robot arm geometry also makes this answer impossible.  If the robot arm is extremely long then a small angular velocity would result in a very high linear velocity which might not be desirable for your current task. If there are multiple joints, then you probably want each individual joint moving at different velocities, which is again, dependent on the current task.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;If you absolutely have to take a random guess at the best angular velocity to use, I would suggest 0 rad/s.&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="20670" LastActivityDate="2018-07-26T16:32:50.687" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16112" PostTypeId="2" ParentId="16098" CreationDate="2018-07-27T09:08:24.053" Score="2" Body="&lt;p&gt;First of all there is nothing like an ideal angular velocity. There might be an optimal one based on some cost function you defined, there might be a nominal one related to you operational ranges, there might be a typical one related to the task in general.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Usually the manipulators moving heavy loads are moving rather slowly because of the dynamics effects induced by the load and the manipulator itself. If the load was to me moved faster, it will require more energy and generate way more strains on the manipulator structure. &#xA;Also typically if you design a manipulator you thing at the level of forces and moments, which implies considering joint torque more than joint velocity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lastly concerning the human-robot interactions there are some norms to be followed by industry, ISO 10218 and more recently &lt;a href=&quot;https://www.iso.org/obp/ui/#iso:std:iso:ts:15066:ed-1:v1:en&quot; rel=&quot;nofollow noreferrer&quot;&gt;ISO/TS 15066&lt;/a&gt;. Both are rather restrictive in terms of end-effector velocity. Additionally you can look at the work of Pr. Haddadin on human-robot interactions and how to consider different metrics than just end-effector velocity and take into account the shape (and associated trauma) of the end-effector.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2018-07-27T09:08:24.053" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16113" PostTypeId="2" ParentId="16089" CreationDate="2018-07-27T09:20:33.043" Score="1" Body="&lt;p&gt;First of all an important parameter is if the pipe is filled with some liquid or with air or with vacuum (to be extreme). The nature of the environment will impact the type of propeller (and if vacuum you will need to think about something else)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typically propeller are powered by brushless motor, as suggest you to look for hobby airplanes. Then if you want to have bi-directional forces you have two choices, revertible ESCs (scare on the market, poor controllability at low speed) or variable pitch propellers (more complex, additional payload to carry).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Last remarks, based on your illustration you will have terrible performance as the propeller is 'hidden' behind your body ... It might be better to use a couple of motorized wheels along the body of your pod. Also if you want to do inspection you might need to go slow, and for that motorized wheel might be better suited.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2018-07-27T09:20:33.043" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16116" PostTypeId="1" AcceptedAnswerId="16122" CreationDate="2018-07-27T10:39:56.883" Score="0" ViewCount="69" Body="&lt;p&gt;I am working on a language (computer language) for robotics to communicate with each other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am looking for naming standards that is unique and usable for robotics, for example when two robots are communicating with this language, they will use a word(standard) for an object like &quot;door&quot; that is understandable for both because they are using one unique naming standard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I searched the internet I couldn't find something helpful for naming objects, senses and actions may robots share with each other and they understand what are they meaning for.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Syntax of my language&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;SEND BY loc ON object = door&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This language is a query language like SQL that programmer based on programming conditions writes communication queries to archive some data from destination robot or requesting some actions from it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the code above, &lt;code&gt;loc&lt;/code&gt; and &lt;code&gt;door&lt;/code&gt; are names that should be declared by a standard that both robots can understand them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm asking you if you can suggest any naming standard for saving and sharing names on robots and if there is robotics communication standard to suggest especially scholars. thanks.&lt;/p&gt;&#xA;" OwnerUserId="20870" LastActivityDate="2018-07-30T00:03:32.943" Title="Data saving/sharing standards for objects, actions and senses" Tags="&lt;communication&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16117" PostTypeId="1" CreationDate="2018-07-27T19:58:55.367" Score="2" ViewCount="48" Body="&lt;p&gt;I'm using an adjustable desktop power supply (0-30 volt DC, 0-10 amp) to power my robot which has 7 standard 6-volt servos. There are some situations where the robot gets jammed, and power draw increases to 6A and recently I've even seen it hit 9.5A. I think my servo controller is only rated for around 5 amp continuous, and the servos are not intended to hit anywhere near that for any length of time. A servo burnout would be a big problem because I'd need to deconstruct, rebuild, and re-calibrate - none of which are easy operations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, is there any device that can set a maximum current and can be easily reset? I could use a traditional fuse, but may end up replacing those far too often. It's fine if the device affects voltage moderately, as I can easily adjust the power supply up a bit and honestly I'm happy if it lowers voltage when it needs to lower current as well - that would further help prevent damage.&lt;/p&gt;&#xA;" OwnerUserId="18168" LastEditorUserId="6890" LastEditDate="2018-09-03T10:19:23.000" LastActivityDate="2018-09-03T10:19:23.000" Title="How can I limit the current sent to my 6V servos to ensure they don't burn out?" Tags="&lt;control&gt;&lt;circuit&gt;&lt;amperage&gt;&lt;dc&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16118" PostTypeId="1" AcceptedAnswerId="16332" CreationDate="2018-07-27T21:17:18.730" Score="1" ViewCount="323" Body="&lt;p&gt;I am thinking about using a combination of mu-metal, a faraday cage, and spacial separation to reduce magnetic interference from a brushless motor on a compass sensor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The compass will be used to calculate heading.   If the vehicle that it is attached to is standing still or slowly rotating, however, will earth's magnetic field be shielded by the mu-metal?   The following is a quote from Wikipedia:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The high permeability of mu-metal provides a low reluctance path for&#xA;  magnetic flux, leading to its use in magnetic shields against static&#xA;  or slowly varying magnetic fields&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/zCfl3.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zCfl3.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A slowly rotating or fixed compass would experience a static or slowly varying magnetic field from the earth, no?   So would the mu-metal interfere with the compass's readings?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I could always just eliminate the mu-metal and use only a faraday shield, which I know don't affect static or slowly changing magnetic fields.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: someone please let me know if there is a more appropriate SE site on which to ask this question.&lt;/p&gt;&#xA;" OwnerUserId="20111" LastEditorUserId="20111" LastEditDate="2018-07-27T21:30:40.613" LastActivityDate="2018-09-05T05:19:36.683" Title="Can a mu-metal enclosed compass measure the earth's field?" Tags="&lt;magnetometer&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16119" PostTypeId="2" ParentId="16094" CreationDate="2018-07-28T04:57:29.123" Score="1" Body="&lt;p&gt;If $\Omega$ is singular, you cannot avoid a matrix singularity.   This is like saying you want to solve the system of equations $$x = 1$$ $$x = 7$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are many techniques to avoid robotic singularities, but if the math represents a pose whereby a degree of freedom is lost in the mechanism, there is no way to get around a singular (and therefore non-invertible) matrix.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2018-07-28T04:57:29.123" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16120" PostTypeId="2" ParentId="16117" CreationDate="2018-07-28T05:34:11.073" Score="3" Body="&lt;p&gt;use circuit breakers. That is the route I go. I really like the following: Allen Bradely 1492-ghXXX where XXX is the amp rating. Ex: a 4 amp fuse would be 1494-gh040, and a 10 amp 1494-gh100. they are slim profile, but are expensive as hell (as if sold by Lucifer himself - $120CAD!!!). Try to find cheap ones on Amazon or ebay. Another manufacturer, whose name does not come to mind also makes them. Another option is 'auto' circuit breakers:&lt;a href=&quot;https://i.stack.imgur.com/Ei1Gj.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Ei1Gj.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just get a base and you resetting like a Boss! Those are all compact circuit breakers as that is what I prefer. You can also find non compact circuit breakers. There are tons of those.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All that is left is to decide if you will fuse every motor, or just the group. I would do the whole group... I won't bore you with electrical selectivity charts. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Peace. &lt;/p&gt;&#xA;" OwnerUserId="18167" LastEditorUserId="-1" LastEditDate="2018-07-28T14:29:34.727" LastActivityDate="2018-07-28T14:29:34.727" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16121" PostTypeId="2" ParentId="16116" CreationDate="2018-07-28T05:40:46.313" Score="0" Body="&lt;p&gt;Dude, don't reinvent the wheel. If you are smart do something useful... Stand on the shoulders of giants! ROS is a middle-ware that solved this issue. They basically have message types that are user defined... just drop in the data type into a file in a specifically named directory structure, and two &quot;softwares&quot; (nodes) can communicate. It makes communication very easy, and there you go, a real problem for a robot solved.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is hard to really understand (for me), but give it a read: &lt;a href=&quot;http://wiki.ros.org/msg&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://wiki.ros.org/msg&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="18167" LastActivityDate="2018-07-28T05:40:46.313" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16122" PostTypeId="2" ParentId="16116" CreationDate="2018-07-28T09:55:59.127" Score="2" Body="&lt;p&gt;&quot;&lt;a href=&quot;https://en.wikipedia.org/wiki/Ontology_(information_science)&quot; rel=&quot;nofollow noreferrer&quot;&gt;ontology&lt;/a&gt;&quot; is the search term you are looking for. There are a few. You will have to review them to see if any meet your needs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A little background learning about ontologies will help you navigate the options.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may be tempted to only look at ontologies made by roboticists or with the word robot in the title, but each ontology is created with a set of assumptions or contexts in mind. You may miss a useful ontology if you only look at robotics.&lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="20870" LastEditDate="2018-07-30T00:03:32.943" LastActivityDate="2018-07-30T00:03:32.943" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16123" PostTypeId="1" CreationDate="2018-07-28T16:12:24.323" Score="0" ViewCount="48" Body="&lt;p&gt;I am creating a project where a robot needs to face a control panel and do some specific tasks. Some reference tags will be placed on the panel. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to use the tags as AR reference and fix my robot's orientation. But I am new in AR and I need to learn more, can you give me some hint on how to do this? I want to use OpenCV Python.&lt;/p&gt;&#xA;" OwnerUserId="20876" LastActivityDate="2018-07-28T20:48:57.163" Title="Fixing robot orientation using AR" Tags="&lt;python&gt;&lt;opencv&gt;&lt;orientation&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16124" PostTypeId="2" ParentId="16123" CreationDate="2018-07-28T20:48:57.163" Score="1" Body="&lt;p&gt;I recommend using april tags. They are similar to qr codes but were specifically designed with robotics in mind. There is a library on the april tag website. The library can be used to solve for the position and orientation of each april tag in a given image. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://april.eecs.umich.edu/software/apriltag/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://april.eecs.umich.edu/software/apriltag/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="8842" LastActivityDate="2018-07-28T20:48:57.163" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16125" PostTypeId="1" CreationDate="2018-07-23T11:13:41.897" Score="2" ViewCount="363" Body="&lt;p&gt;Im working on a project and i want to use a sensor. I can plug in the sensor via usb. I do not need any driver for the sensor. My task is to have an access to the sensor data. I have followed the tutorial on this page:&#xA;&lt;a href=&quot;http://clearpathrobotics.com/assets/guides/ros/Udev%20Rules.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://clearpathrobotics.com/assets/guides/ros/Udev%20Rules.html&lt;/a&gt;&#xA;But i dont know if this is my soution. I dont know what to do now. How can i have access to the data in ROS? Do i have to create a publisher? &lt;/p&gt;&#xA;" OwnerUserId="20887" OwnerDisplayName="S. Yildiz" LastActivityDate="2018-07-30T11:37:10.863" Title="ROS: Sensor data via USB" Tags="&lt;c++&gt;&lt;ros&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16126" PostTypeId="2" ParentId="16125" CreationDate="2018-07-23T14:59:47.780" Score="1" Body="&lt;p&gt;The use of udev rules is orthogonal to the publishing of sensor data. Look at the publisher side of the &lt;a href=&quot;http://wiki.ros.org/ROS/Tutorials/WritingPublisherSubscriber%28c%2B%2B%29&quot; rel=&quot;nofollow noreferrer&quot;&gt;Writing a Publisher and Subscriber&lt;/a&gt; tutorial, but instead of pushing string messages to the topic, push data from your sensor instead. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If there is not already a standard message type to encapsulate your data, you can &lt;a href=&quot;http://wiki.ros.org/ROS/Tutorials/CreatingMsgAndSrv#Creating_a_msg&quot; rel=&quot;nofollow noreferrer&quot;&gt;define a custom message type&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerDisplayName="Paul Belanger" LastActivityDate="2018-07-23T14:59:47.780" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16127" PostTypeId="2" ParentId="16116" CreationDate="2018-07-29T14:56:40.797" Score="1" Body="&lt;p&gt;Most of the published papers are from the area of computer animation, for example the JACK system which was developed by Norman Badler in the 1990s. It is some kind of virtual agent with a natural language interface. Only in recent years, some efforts are ongoing to use robotics together with an animation language. A general standard is called the RDF-triple notation. Every situation is expressed with “subject verb object”. That means, we have three words, separated by a space sign. A scene could be described for example with “robot is-on placeA”.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The most dominant problem is not the robot-to-robot communication. This can be done in case of doubt with a simple Json / XML / API interface. Instead the real challenge is the human-to-machine communication. Like you mentioned in the Original post natural language is a good starting point. This makes it easier to debug existing scripts and control the robot interactively. &lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2018-07-29T14:56:40.797" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16128" PostTypeId="2" ParentId="16093" CreationDate="2018-07-29T22:51:58.200" Score="0" Body="&lt;p&gt;The algorithm does seek to favour picking samples with a greater weight. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you think about the samples arranged in a line (actually a circle), and the length of each sample is proportional to it's weight. Then if you move along the line in small random increments and pick samples, because the higher weight samples are longer you will more often pick a higher weight sample.&lt;/p&gt;&#xA;" OwnerUserId="1819" LastActivityDate="2018-07-29T22:51:58.200" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16130" PostTypeId="2" ParentId="12541" CreationDate="2018-07-30T01:28:35.187" Score="0" Body="&lt;p&gt;Robots manipulate data. Some data they get from sensors, but unless the robot is using algorithms that have no state, they have to store data somehow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sometimes this is just held in variables, sometimes stored to a more permanent medium.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It doesn't matter if it uses SQL or not, anything that stores data uses database concepts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some things that a robot might want to store include maps, visual prototypes (data structures to be matched against by camera images), vocabulary elements (one robot I know of remembers simplified sentences and uses comparisons in order to talk and does it very well), and position information for later debugging. If it is necessary for the robot to retrieve these bits of information, then the code to do so is a database.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some robotics programs do specifically use SQL databases. For example, the &lt;a href=&quot;https://opencog.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;OpenCog project&lt;/a&gt; uses an SQL database to hold cognition elements.&lt;/p&gt;&#xA;" OwnerUserId="19275" LastActivityDate="2018-07-30T01:28:35.187" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16131" PostTypeId="1" CreationDate="2018-07-30T03:05:40.790" Score="1" ViewCount="5127" Body="&lt;p&gt;This might be a tricky question, but having dug in deep with ROS I am noticing the complexity that one has to deal with. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Simple Arduino programming is much simpler but of course can’t do many useful things. No threading, IPC, and many many more. To be clear, I am not planning on using an Arduino, I am just using it as the extreme end point of a spectrum.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my question is, is there another package or library or framework that does some of the things that ROS does but perhaps not at the level of sophistication?&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Additional&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Thanks to the responses so far, and the feedback. I've added below and updated above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As an example application, let's say an experimental (i.e I am not trying to build a commercial product - yet) mobile robot, with a depth camera, Lidar, and wheels, that can navigate indoors and be controlled over WiFi. It would likely include slam navigation and/or fiducials. Obviously I am OK with buying the hardware or the hardware components and doing a lot of programming. I would prefer something other than C++ but that's not a strict requirement.&lt;/p&gt;&#xA;" OwnerUserId="17190" LastEditorUserId="17190" LastEditDate="2018-08-02T13:06:08.377" LastActivityDate="2018-08-02T13:06:08.377" Title="Alternative to ROS?" Tags="&lt;mobile-robot&gt;&lt;ros&gt;" AnswerCount="3" CommentCount="6" FavoriteCount="1" ClosedDate="2018-08-03T12:59:21.460" ContentLicense="CC BY-SA 4.0" />
  <row Id="16132" PostTypeId="1" AcceptedAnswerId="16144" CreationDate="2018-07-30T10:02:34.830" Score="2" ViewCount="447" Body="&lt;p&gt;I'm looking at how COLMAP does multi-view triangulation. I can't work out what this function is doing. I can't find any formulas which look similar. The input &quot;proj_matricies&quot; come from pose data, the &quot;points&quot; are from the mono camera measurements. Seems like it is reducing an error in the projection matrices themselves? Is it trying to find some sort of overall projection error for all the observations? Any point in the right direction would be greatly appreciated!!&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Eigen::Vector3d TriangulateMultiViewPoint(&#xA;const std::vector&amp;lt;Eigen::Matrix3x4d&amp;gt;&amp;amp; proj_matrices,&#xA;const std::vector&amp;lt;Eigen::Vector2d&amp;gt;&amp;amp; points) {&#xA;&#xA;    CHECK_EQ(proj_matrices.size(), points.size());&#xA;&#xA;    Eigen::Matrix4d A = Eigen::Matrix4d::Zero();&#xA;&#xA;    for (size_t i = 0; i &amp;lt; points.size(); i++) {&#xA;        const Eigen::Vector3d point = points[i].homogeneous().normalized();&#xA;        const Eigen::Matrix3x4d term =&#xA;        proj_matrices[i] - point * point.transpose() * proj_matrices[i];&#xA;        A += term.transpose() * term;&#xA;  }&#xA;&#xA;  Eigen::SelfAdjointEigenSolver&amp;lt;Eigen::Matrix4d&amp;gt; eigen_solver(A);&#xA;&#xA;  return eigen_solver.eigenvectors().col(0).hnormalized();&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="20885" LastActivityDate="2018-07-31T22:18:04.357" Title="Multiple View Triangulation method used by COLMAP" Tags="&lt;slam&gt;&lt;c++&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16133" PostTypeId="2" ParentId="16131" CreationDate="2018-07-30T10:11:12.913" Score="5" Body="&lt;p&gt;I think you are getting confused between the basic ROS possibilities and some more advanced libraries which are integrated but do not need to be used by users without 'advanced' requirements. If you find it too difficult most likely those are functionalities which are not necessary for your project.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That being said, ROS is a middleware that makes the glue between several modular pieces of software by providing interfaces and taking care of communication.&#xA;There exist other middlewares for robotics like YARP, POCOLIBS, OROCOS,  ROCK (but there are many more). Some are targeted more for real-time, some more with specificity target at their original application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to program in a middleware independent way, you can look into genom3, which is an additional abstraction layer allowing to choose middleware at compilation time. &lt;/p&gt;&#xA;" OwnerUserId="18235" LastEditorUserId="18235" LastEditDate="2018-08-01T07:47:43.463" LastActivityDate="2018-08-01T07:47:43.463" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16134" PostTypeId="2" ParentId="16131" CreationDate="2018-07-30T10:33:45.203" Score="2" Body="&lt;p&gt;ROS is still a good framework, even if you just use a little of it. However, if I just needed the message passing, I'd probably just use MQTT. But ROS has a lot of useful components that I'd otherwise have to create or integrate myself. These include message passing, SLAM, path control, and many other components.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That being said, there are quite a few alternatives out there. Most of the ones I've heard of were listed in &lt;a href=&quot;https://en.wikipedia.org/wiki/Open-source_robotics#Software_components&quot; rel=&quot;nofollow noreferrer&quot;&gt;this Wikipedia article on Open Source Robotics.&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The alternative that I'm most familiar with is &lt;em&gt;Gobot&lt;/em&gt;, &lt;a href=&quot;https://gobot.io&quot; rel=&quot;nofollow noreferrer&quot;&gt;available here.&lt;/a&gt; This framework is much smaller than ROS, but it's working on producing cross-platform code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are sister projects, &lt;a href=&quot;http://artoo.io&quot; rel=&quot;nofollow noreferrer&quot;&gt;Artoo (Ruby)&lt;/a&gt; and &lt;a href=&quot;https://cylonjs.com&quot; rel=&quot;nofollow noreferrer&quot;&gt;Cylon (Javascript).&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19275" LastEditorUserId="19275" LastEditDate="2018-07-31T20:32:31.810" LastActivityDate="2018-07-31T20:32:31.810" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16135" PostTypeId="2" ParentId="15930" CreationDate="2018-07-30T11:07:50.493" Score="1" Body="&lt;p&gt;I would suggest using ultrasonic beacons sending a coded message. These beacons would be triggered by radio signals of some kind. My suggestion is to use Bluetooth.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By experimentation you could discover how long your beacons take to receive and process the BT signal before sending out their sonic reply. The rest of the delay would be due to the time it takes for the sound to travel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Difficulties include such things as the sound bouncing, multiple beacons sounding at the same time, multiple robots attempting to use the beacons.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another way is to use bar codes. Around 15-20 years ago, I built a small robot that had a webcam attached that found and read these oversized and simplified bar codes. Yes, I printed out stickers which I attached to doorways within reach of the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think that a better solution would be to use a simplified form of QR codes. There are open source programs to read and write them, so it should be possible to modify the code to make something easier to read though containing less information.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the proper ink, these could be seen with IR illumination. Or perhaps we can assume that the light is on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is an implementation of the simplified qr codes called &lt;a href=&quot;https://april.eecs.umich.edu/software/apriltag/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;April Tags.&quot;&lt;/a&gt; Each tag can hold 4-12 bits of information, which is enough to enumerate almost anything I can think of that fits into a normal house.&lt;/p&gt;&#xA;" OwnerUserId="19275" LastEditorUserId="19275" LastEditDate="2018-07-30T13:33:54.597" LastActivityDate="2018-07-30T13:33:54.597" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16136" PostTypeId="2" ParentId="16125" CreationDate="2018-07-30T11:37:10.863" Score="0" Body="&lt;p&gt;i have found the solution. I had to do it like that:&#xA;&lt;a href=&quot;https://github.com/garyservin/serial-example/blob/master/src/serial_example_node.cpp&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/garyservin/serial-example/blob/master/src/serial_example_node.cpp&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="20887" LastActivityDate="2018-07-30T11:37:10.863" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16137" PostTypeId="1" AcceptedAnswerId="16150" CreationDate="2018-07-30T12:33:36.133" Score="0" ViewCount="638" Body="&lt;p&gt;I will be using stepper motor in 6 DOF robotic arm along with Servo motors. Unlike Servo motor ,I find difficult to control Stepper motor. I was earlier using only Servo Motors but due to lack of Torque I had to use stepper motors. I read that in Stepper Motors there is no initial position or reference (0 degrees) position unlike servos. &#xA;I searched on various links also where I came to know about rotary encoders but these wont be any good for my robotic arm.&#xA;I will be using raspberry pi to control stepper motor.&#xA;I need to know a way so that I can control the stepper motor so that there is some reference angle to the stepper motor.&lt;/p&gt;&#xA;" OwnerUserId="20888" LastActivityDate="2018-07-31T17:30:23.150" Title="How to move a Stepper Motor to a desired angle with raspberry pi?" Tags="&lt;robotic-arm&gt;&lt;raspberry-pi&gt;&lt;stepper-motor&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16139" PostTypeId="2" ParentId="16137" CreationDate="2018-07-30T22:38:16.173" Score="0" Body="&lt;p&gt;You could add an angle sensor to the joint and make your stepper motor into servo.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could add limit switches to the joint, then at start up move the joint until the limit switch is reached and then you will know the position of the stepper.&lt;/p&gt;&#xA;" OwnerUserId="1819" LastActivityDate="2018-07-30T22:38:16.173" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16140" PostTypeId="1" CreationDate="2018-07-31T00:26:38.447" Score="1" ViewCount="47" Body="&lt;p&gt;What's the statistically and mathematically correct way to process lidar data so that I can find out a good current estimate of the closet obstacle and its rate change?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Should I be learning about Kalman filters or is that the wrong kind of processing?&lt;/p&gt;&#xA;" OwnerUserId="17190" LastActivityDate="2018-07-31T12:57:10.130" Title="Using Lidar data to detect distance of nearest obstacle, and rate of change" Tags="&lt;lidar&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16143" PostTypeId="2" ParentId="16140" CreationDate="2018-07-31T12:50:28.463" Score="1" Body="&lt;p&gt;I am supposing you have a mobile robot moving around and you want to track its position and/or the position of obstacles nearby. Then the answer is yes, you need to learn some filtering, more precisely you should learn about Extended Kalman Filter (EKF) since your measurement (the LIDAR measurement) is non-linear as it is defined by range and angle of the ray.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are many resources online, but I leave this link to&#xA;&lt;a href=&quot;http://ais.informatik.uni-freiburg.de/teaching/ss11/robotics/slides/09d-ekf-localization.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Slides from University of Freiburg&lt;/a&gt; about EKF.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: In the case you do not have time to learn filtering and you just want (for pure undefined experimental purposes) to do some closest obstacle avoidance in a simple way, you can still use the raw measurement of the LIDAR (assuming is precise enough for your application) in order to build a map with obstacles to avoid. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this helps.&lt;/p&gt;&#xA;" OwnerUserId="19554" LastEditorUserId="19554" LastEditDate="2018-07-31T12:57:10.130" LastActivityDate="2018-07-31T12:57:10.130" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16144" PostTypeId="2" ParentId="16132" CreationDate="2018-07-31T14:02:49.357" Score="3" Body="&lt;p&gt;This method is minimizing the &lt;a href=&quot;https://en.wikipedia.org/wiki/Reprojection_error&quot; rel=&quot;nofollow noreferrer&quot;&gt;reprojection error&lt;/a&gt; of the triangulated point. How to see this: Let $P_i$ be the $3 \times 4$ projection matrices, and let $x_i \in \mathbb{R}^3$ be the (homogenized coordinates of the) observations. This method is computing the matrix&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;A = \sum_{i=1}^n A_i^T A_i,&#xA;$$&#xA;where&#xA;$$&#xA;A_i = P_i - x_i x_i^T P_i;&#xA;$$&#xA;and then it returns the eigenvector $X^* \in \mathbb{R}^4$ corresponding to the smallest eigenvalue of $A$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is a well-known fact in linear algebra that finding this eigenvector is equivalent to solving&#xA;$$&#xA;X^* = \operatorname{argmin}_{X \in \mathbb{R}^k} X^T A X&#xA;$$&#xA;where in our case $k=4$ because $A$ is $4 \times 4$. Hence&#xA;\begin{align}&#xA;X^* &amp;amp;= \operatorname{argmin}_{X \in \mathbb{R}^4} X^T A X \\&#xA;&amp;amp;= \operatorname{argmin}_{X \in \mathbb{R}^4} \sum_{i=1}^n (A_i X)^T (A_i X) \\&#xA;&amp;amp; = \operatorname{argmin}_{X \in \mathbb{R}^4} \sum_{i=1}^n \| P_i X - x_i x_i^T P_i X \|_2^2.&#xA;\end{align}&#xA;Hence it's a least squares minimization, where each residual is $\| P_i X - x_i x_i^T P_i X\|_2^2$. Now, $P_i X$ is the projection of the triangulated point $X$ into image coordinates via the camera $P_i$, and the map $x \mapsto x_i x_i^T x$ is the (linear) projection of $x$ onto the linear subspace spanned by $x_i$. So, the $i$-th residual is the distance in image space between $P_i X$ and $x_i$, which can be interpreted as a reprojection error.&lt;/p&gt;&#xA;" OwnerUserId="19347" LastEditorUserId="19347" LastEditDate="2018-07-31T22:18:04.357" LastActivityDate="2018-07-31T22:18:04.357" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16145" PostTypeId="1" AcceptedAnswerId="16149" CreationDate="2018-07-31T15:06:28.927" Score="2" ViewCount="168" Body="&lt;p&gt;I am new to IMU. About the measurements from IMU, different materials give different explanations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the link:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.it.uu.se/edu/course/homepage/systemid/vt14/tokp2.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.it.uu.se/edu/course/homepage/systemid/vt14/tokp2.pdf&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/69xvG.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/69xvG.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;Here the b maybe indicate body frame of IMU. Maybe e indicate earth frame. &#xA;I can't understand the rotation matrix R(be) in the second equation means. &#xA;Is R(be) from camera-IMU calibration to represent the extrinsic paramter between &#xA;camera and IMU. Is the measurement from the accelerometer expressed in the IMU frame or not?&lt;/p&gt;&#xA;" OwnerUserId="15460" LastActivityDate="2018-07-31T17:11:57.000" Title="measurement model of the accelerometers in IMU" Tags="&lt;imu&gt;&lt;accelerometer&gt;&lt;calibration&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16146" PostTypeId="1" AcceptedAnswerId="16259" CreationDate="2018-07-31T15:08:10.420" Score="7" ViewCount="3084" Body="&lt;p&gt;I've been looking into implementations of Extended Kalman filters over the past few days and I'm struggling with the concept of &quot;sensor fusion&quot;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Take the fusion of a GPS/IMU combination for example, If I applied a kalman filter to both sensors, Which of these will I be doing?&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Convert both sensors to give similar measurements (eg. x, y, z), apply a kalman filter to both sensors and return an average of the estimates&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Convert both sensors to give similar measurements (eg. x, y, z), apply a kalman filter, and return an estimate of the sensor I trust more based on a certain parameter (measurement noise covariance)?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="20491" LastActivityDate="2019-06-17T17:38:58.563" Title="How exactly does sensor fusion work in Kalman filters?" Tags="&lt;mobile-robot&gt;&lt;kalman-filter&gt;&lt;ekf&gt;&lt;estimation&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16148" PostTypeId="2" ParentId="16146" CreationDate="2018-07-31T16:38:59.947" Score="-1" Body="&lt;p&gt;As far as I'm aware, the second approach is generally preferred. The 'certain parameters' you mention are used to define a '&lt;em&gt;context&lt;/em&gt;' or '&lt;em&gt;validity domain&lt;/em&gt;' in which each one sensor or the other should be trusted more. These domains are often inherently fuzzy, due to the characteristics and limitations of the sensors involved.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An article titled '&lt;a href=&quot;https://www.stats.ox.ac.uk/~caron/Publications/J_Information_Fusion_2004.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;GPS/IMU data fusion using multisensor Kalman filtering: introduction of contextual aspects&lt;/a&gt;', published in the &lt;a href=&quot;https://www.sciencedirect.com/science/article/pii/S156625350400065X&quot; rel=&quot;nofollow noreferrer&quot;&gt;June 2006 issue of Science Direct&lt;/a&gt;, describes the development of a multi-sensor fusion algorithm using GPS and an IMU exactly like the one you describe in the question.&lt;/p&gt;&#xA;" OwnerUserId="17029" LastEditorUserId="17029" LastEditDate="2018-07-31T17:28:18.267" LastActivityDate="2018-07-31T17:28:18.267" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16149" PostTypeId="2" ParentId="16145" CreationDate="2018-07-31T17:11:57.000" Score="1" Body="&lt;p&gt;There's no camera. An IMU doesn't have a camera. $R^{b\mbox{e}}$ is the rotation matrix that describes the orientation of the sensor body $b$ with respect to the Earth $\mbox{e}$. The equations are simply stating that the sensors are outputting the body forces $f^b$ and body angular velocities $\omega^b$, plus some sensor bias $\delta$ and some sensor noise $e$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The accelerations on the sensor body, in the body frame, are equivalent to taking the body acceleration in the Earth's frame, $\ddot{b}^\mbox{e}$, and the gravitational acceleration in the Earth's frame, $g^\mbox{e}$, and transforming them from Earth frame to body frame with $R^{b\mbox{e}}$. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-07-31T17:11:57.000" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="16150" PostTypeId="2" ParentId="16137" CreationDate="2018-07-31T17:30:23.150" Score="0" Body="&lt;p&gt;You said,&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I came to know about rotary encoders but these wont be any good for my robotic arm.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;But &lt;em&gt;why&lt;/em&gt; won't they be any good for your robotic arm?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are several approaches to position control. From best to worst, your options are generally: &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Use an absolute encoder. On power-on, the robot will know the exact joint angle. You can immediately control the arm. &lt;/li&gt;&#xA;&lt;li&gt;Use a relative encoder. Relative encoders typically have a &quot;home index&quot; that will indicate a known position, then you get to count encoder pulses. A typical startup routine is to seek for the home index, zero your internal encoder count when you find it, and then you can begin operating as if it were an absolute encoder. Depending on your arrangement, you &lt;em&gt;might&lt;/em&gt; be able to get by with the assumption that the arm didn't move while the robot was powered off, and you can resume operation if you saved the previous encoder position in nonvolatile memory. &lt;/li&gt;&#xA;&lt;li&gt;Count stepper motor steps. As with the relative encoder, you'll need some way to find a &quot;known&quot; or &quot;home&quot; position. You'll still need a startup routine. You could have a hard stop and rotate the motor one revolution, counting on the hard stop to prevent the motor shaft from continuing to rotate. Then you can assume that motor steps will increment up from the hard stop position. You could also use a &quot;soft stop,&quot; like a limit switch as &lt;a href=&quot;https://robotics.stackexchange.com/a/16139/9720_&quot;&gt;@RobertSutton&lt;/a&gt; mentioned. Again, once you &quot;find&quot; that position, zero your count and then begin operating normally.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The difference between (2) and (3) above is that you must always assume the arm traveled the correct number of steps if you don't have any encoder. If the torque applied to the arm exceeds the running or cogging torque of the stepper motor, then the arm will not be in the position you think it's in. If you use a relative encoder, then you will at least be able to detect that something moved the arm. A stepper motor is completely open loop and you have no means of determining if you're in the correct position unless (if) you happen to pass the soft stop/limit switch. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-07-31T17:30:23.150" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16152" PostTypeId="2" ParentId="16131" CreationDate="2018-08-01T05:43:38.750" Score="2" Body="&lt;p&gt;Arduino is not really relevant since its output is a bare-metal microcontroller code. You can gain experience with more complex microcontroller systems by using a realtime OS on your arduino board.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have used ROS in several large projects and have an informed understanding of it. While I disagree with many of the choices that the core authors of ROS made, I still recommend using ROS when it is an appropriate choice made with full awareness of the other approaches that can be taken.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ROS is a poor choice in many robotics situations. Real-time systems and distributed systems with unreliable communications for example.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://wiki.ros.org/ROS/Introduction&quot; rel=&quot;nofollow noreferrer&quot;&gt;ROS&lt;/a&gt; has a list of alternative frameworks, thought they leave out &lt;a href=&quot;https://www.rock-robotics.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;ROCK&lt;/a&gt; which arguably has a better design but uses Ruby instead of Python as its scripting language of choice. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some of the things that ROS provides are things that are already provided by your operating system and the OS version is probably better developed. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Deploy your software using your OS's package manager instead of rospack.&#xA;Start your processes using (b)ash and your OS's service manager instead of roslaunch.&#xA;Use LDAP instead of rosparameters.&#xA;Use DNS instead of roscore for service discovery.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can also cherry pick the parts of ROS that work for you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most of the software that is distributed with ROS is developed such that it can be used without ROS.&lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="184" LastEditDate="2018-08-02T05:49:36.937" LastActivityDate="2018-08-02T05:49:36.937" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16153" PostTypeId="1" AcceptedAnswerId="16159" CreationDate="2018-08-01T08:14:19.300" Score="1" ViewCount="59" Body="&lt;p&gt;I have some odometer data. This data are based upon robot movement. I can transfer those raw data to a motion equation from where I get  x,y,and theta co-ordinate of a Robot. If I plot those x,y coordinate I get a path which show me robot movement. This path show me that the Robot move back and forth through a corridor. So there is a looping. Now how could I determine from the raw data which consist of forward and angular velocity that in a particular time stamp robot back to its previous position? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is residual uncertainty in context of Robotics? &lt;/p&gt;&#xA;" OwnerUserId="20610" LastActivityDate="2018-08-01T14:13:18.057" Title="How to detect loop in robot movement observing odometer data" Tags="&lt;mobile-robot&gt;&lt;slam&gt;&lt;localization&gt;&lt;kalman-filter&gt;&lt;ekf&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16154" PostTypeId="1" AcceptedAnswerId="16160" CreationDate="2018-08-01T09:44:45.270" Score="2" ViewCount="209" Body="&lt;p&gt;I try to implement Graph Slam in real dataset. My data set have some data that describe that the Robot observe same landmark over and over with a large amount of time difference. Prof. Sebastian Lectures(Udacity: &lt;a href=&quot;https://classroom.udacity.com/courses/cs373&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://classroom.udacity.com/courses/cs373&lt;/a&gt;) is not enough to understand this type of situation. So I study &quot; The Graph Slam Algorithm with Application to Large - Scale MApping of Urban Structure&quot; by Sebastian Thrun and Michael Montemerlo.(&lt;a href=&quot;http://robots.stanford.edu/papers/thrun.graphslam.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://robots.stanford.edu/papers/thrun.graphslam.pdf&lt;/a&gt;) In this paper page number 414 at Table 4: Algorithm for Updating the Posterior mu&quot; is written. I cannot understand this algorithm. First I remove all the landmark location then again I add it. But how could I add this? This is not clear to me. Also what is the need to first remove all landmarks then again add it? If any one know that please help me.&lt;/p&gt;&#xA;" OwnerUserId="20610" LastActivityDate="2018-08-01T14:33:34.450" Title="Graph Slam Landmark remove and then again add it" Tags="&lt;mobile-robot&gt;&lt;slam&gt;&lt;localization&gt;&lt;kalman-filter&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16155" PostTypeId="2" ParentId="11118" CreationDate="2018-08-01T09:47:33.810" Score="-1" Body="&lt;p&gt;You can try this paper &quot;&lt;a href=&quot;http://robots.stanford.edu/papers/thrun.graphslam.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;The GraphSLAM&#xA;Algorithm with Applications to Large-Scale Mapping of Urban Structures&lt;/a&gt;&quot; &lt;/p&gt;&#xA;" OwnerUserId="20610" LastEditorUserId="9176" LastEditDate="2018-08-01T12:19:49.200" LastActivityDate="2018-08-01T12:19:49.200" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16156" PostTypeId="1" AcceptedAnswerId="16204" CreationDate="2018-08-01T12:15:47.900" Score="0" ViewCount="1028" Body="&lt;p&gt;I have a drone which has certain services, say random.srv. I want to use this service via Python. Now I know that there is a page in ROS wiki that tells you how to create a service client in Python. Unfortunately that is not sufficient for me. Here goes my case:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once I start the drone node, the service is listed as&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/main/random_task&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Now an important point to note&lt;/strong&gt; is that the name of the service is as stated above&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;random.srv&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The function that I am writing is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;from random.srv import *&#xA;import rospy&#xA;&#xA;def enableRandom():&#xA;    rospy.wait_for_service('main/random_task')&#xA;    try:&#xA;        droneRandom = rospy.ServiceProxy('main/random_task', random)&#xA;        doSomething(1)  # something seems to be missing&#xA;&#xA;    except rospy.ServiceException:&#xA;        print('Service call failed')&#xA;&#xA;if __name__ == '__main__':&#xA;&#xA;    enableRandom()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The thing is it gives an error saying random is undefined. But that is the name of the srv file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can someone also explain why it doesn't work the way it should. You can guess by this question that I am new to this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit 1:&#xA;Now I understand that in the statement&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;from random.srv import *&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;the 'random' should be the package name. This is not the case. The package name is, lets call it &lt;strong&gt;my-package1&lt;/strong&gt;. The service &lt;strong&gt;random.srv&lt;/strong&gt; that I want to use is in &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;src/my-package1/main/srv/&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Another thing to clear up is that &lt;strong&gt;/main/random_task&lt;/strong&gt; is the name with which &lt;strong&gt;random.srv&lt;/strong&gt; is shown in &lt;strong&gt;rosservice list&lt;/strong&gt;. The new code now is&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;from my-package1.srv import random&#xA;import rospy&#xA;&#xA;def enableRandom():&#xA;    rospy.wait_for_service('/main/random_task')&#xA;    try:&#xA;        droneRandom = rospy.ServiceProxy('/main/random_task', random)&#xA;        doSomething()&#xA;&#xA;    except rospy.ServiceException:&#xA;        print('Service call failed')&#xA;&#xA;if __name__ == '__main__':&#xA;&#xA;    enableRandom()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Now I get &lt;strong&gt;my-project1&lt;/strong&gt; as having invalid syntax (I guess due to having '-'symbol). If I use&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;from main.srv import random&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;it says it cannot find &lt;strong&gt;'main'&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First if I have to use &lt;strong&gt;'my-project1.srv'&lt;/strong&gt; how to I get around the syntax issue with '-'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Secondly, if I have to use the subfolder name i.e. &lt;strong&gt;main.srv&lt;/strong&gt;, why does it not recognize the package if it can recognize the services inside it (when using rosservice list on the terminal).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think there is an issue with the syntax.&lt;/p&gt;&#xA;" OwnerUserId="9833" LastEditorUserId="9833" LastEditDate="2018-08-09T19:54:20.237" LastActivityDate="2018-08-09T19:54:20.237" Title="rosservice via Python" Tags="&lt;ros&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16157" PostTypeId="2" ParentId="16156" CreationDate="2018-08-01T13:10:41.740" Score="1" Body="&lt;p&gt;What is the exact error you're getting? You have &lt;code&gt;random&lt;/code&gt; in two locations - your module import (&lt;code&gt;from random.srv import *&lt;/code&gt;), and when you setup the service proxy (&lt;code&gt;rospy.ServiceProxy('main/random_task', random)&lt;/code&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;An import error would probably mean Python can't find &lt;code&gt;random.srv&lt;/code&gt;, where the service proxy error would probably mean that Python can't find &lt;code&gt;random.srv.random&lt;/code&gt;, which means that it can't find the &lt;code&gt;random&lt;/code&gt; service definition inside your &lt;code&gt;random.srv&lt;/code&gt; file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe this is enough to point you in the right direction, but if not, could you &lt;em&gt;edit your question&lt;/em&gt; to provide a link to the &lt;code&gt;random.srv&lt;/code&gt; file?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;:EDIT:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, you need to get your naming straight. See &lt;a href=&quot;https://stackoverflow.com/q/8350853/5171120&quot;&gt;this question&lt;/a&gt; on Stack Overflow, &quot;How to import module when module name has a '-' dash or hyphen in it?&quot; The two top answers are, in short:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/a/8350881/5171120&quot;&gt;you can't. &lt;code&gt;foo-bar&lt;/code&gt; is not an identifier. rename the file to &lt;code&gt;foo_bar.py&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;And&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/a/8350938/5171120&quot;&gt;If you can't rename the module to match Python naming conventions, create a new module to act as an intermediary:&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; ---- foo_proxy.py ----&#xA; tmp = __import__('foo-bar')&#xA; globals().update(vars(tmp))&#xA;&#xA; ---- main.py ----&#xA; from foo_proxy import * &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Second, you might have a naming conflict with &lt;code&gt;main/srv&lt;/code&gt;. Check out the &lt;a href=&quot;http://wiki.ros.org/ROS/Tutorials/CreatingMsgAndSrv&quot; rel=&quot;nofollow noreferrer&quot;&gt;tutorial on creating messages and services&lt;/a&gt;. Specifically, I noticed:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Also you need the same changes to package.xml for services as for messages, so look above for the additional dependencies required.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Remove # to uncomment the following lines:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;# add_service_files(&#xA;#   FILES&#xA;#   Service1.srv&#xA;#   Service2.srv&#xA;# )&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It would seem to me that, if you already had a &lt;code&gt;main.srv&lt;/code&gt; declared in your &lt;code&gt;package.xml&lt;/code&gt; file, then it might be chance that your services are getting read, because your &lt;code&gt;my-package1&lt;/code&gt; folder happens to be in the &lt;code&gt;src&lt;/code&gt; folder (so it's on the path) and then &lt;code&gt;main.srv&lt;/code&gt; shares a name with something else. Sharing names is bad, especially when you're importing all, because of the same reason &lt;a href=&quot;https://stackoverflow.com/q/2386714/5171120&quot;&gt;&lt;code&gt;import *&lt;/code&gt;&lt;/a&gt; or &lt;a href=&quot;https://stackoverflow.com/q/1452721/5171120&quot;&gt;&lt;code&gt;using namespace std&lt;/code&gt;&lt;/a&gt; is bad - you can/might/will overwrite something and then it's not clear which function/service/method you're actually using.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My suggestions would be:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Rename your &lt;code&gt;my-package1&lt;/code&gt; to &lt;code&gt;my_package1&lt;/code&gt;. &lt;/li&gt;&#xA;&lt;li&gt;Put all of the services for &lt;code&gt;my_package1&lt;/code&gt; in the &lt;code&gt;my_package1\srv&lt;/code&gt; folder - don't use &lt;code&gt;\main\&lt;/code&gt; as a subfolder if possible. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Try these, see if it helps. If it does, and you have a &lt;em&gt;related&lt;/em&gt; question, please start a new question and link to this one if you feel it provides context for the new question. If this isn't the answer you're looking for, please &lt;em&gt;edit your question&lt;/em&gt; to reflect what happened when you tried the steps above.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2018-08-01T16:18:37.657" LastActivityDate="2018-08-01T16:18:37.657" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16158" PostTypeId="2" ParentId="16153" CreationDate="2018-08-01T13:28:46.230" Score="1" Body="&lt;p&gt;I haven't heard of residual uncertainty in the context of robotics, but I would imagine what you're getting at is the fact that odometry data has an inherent amount of uncertainty because of minor variations in things like friction, wheel diameters, chassis weight distribution, variations in motor fabrication, etc. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The best that you could probably do would be to run some baseline tests to determine first how accurate your odometry estimates are. You should wind up with something like the &lt;a href=&quot;http://www.cvlibs.net/datasets/kitti/eval_odometry.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;KITTI odometry scores&lt;/a&gt;, where visual odometry and/or SLAM algorithms are scored on a percent error for translation and for rotation. The rotation scores are given there as error in degrees per meter. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you can quantify the performance of your odometry estimates, then you can begin to build a cone of uncertainty around your position estimate, just like weather forecasters do with &lt;a href=&quot;https://www.nhc.noaa.gov/aboutcone.shtml&quot; rel=&quot;nofollow noreferrer&quot;&gt;hurricane projections&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, say your robot has a rotational error of one degree per meter and a translational error of 5 percent. At the end of one meter of travel, your robot could be anywhere between 0.95 to 1.05 m, and the heading could be anywhere from -1 to +1 deg. When you advance a second meter, you compound the estimates. You could have been at 0.95 meters, with a heading of -1 deg, and traveled another 0.95 meters. Or you could have been at 1.05 meters, with a heading of +1 deg, and traveled another 1.05 meters. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depending on how detailed you want to get, you could analyze your odometry versus truth testing and find the standard deviation of your error, and then you could do 1, 2, and 3 $\sigma$ estimates for your cone of uncertainty. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, once any portion of your cone of uncertainty overlaps the start position, you must assume that you have completed a lap.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-08-01T13:28:46.230" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16159" PostTypeId="2" ParentId="16153" CreationDate="2018-08-01T14:13:18.057" Score="0" Body="&lt;p&gt;I think you are thinking in the wrong direction. Loop Closing techniques where invented (and are used) exactly for the reason that you cannot trust your odometry over a longer time. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Loop closing relies on being able to re-recognize a part of your world so you need a sensor that can sense the environment (e.g. a camera or a laser scanner). Your odometry cannot sense the environment so the robot has no way to know where it is globally. &lt;/p&gt;&#xA;" OwnerUserId="23196" LastActivityDate="2018-08-01T14:13:18.057" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="16160" PostTypeId="2" ParentId="16154" CreationDate="2018-08-01T14:33:34.450" Score="1" Body="&lt;p&gt;Let me start by saying that SLAM and other algorithms like that are beyond the scope of the work I've done. I &lt;em&gt;am&lt;/em&gt; okay with the math, though, so I'll point out what I think is happening:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, it appears that Table 3 on page 414 is &lt;strong&gt;not&lt;/strong&gt; removing landmarks, it's &lt;em&gt;collapsing&lt;/em&gt; them. Consider a hypothetical scenario where you have a bunch of measurements $x$ and $y$. If you want to do some operation on that data set, you have to carry those measurement vectors around everywhere and work on the entire set every time. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It might be easier, if the scenario you're in allows, to just use the &lt;em&gt;average&lt;/em&gt; value of those sets. This appears to be what Table 3 is doing. It's important to notice the difference between the full set of data, $\Omega$ and $\xi$, and the &lt;strong&gt;reduced&lt;/strong&gt; (averaged, conceptually) data $\tilde{\Omega}$ and $\tilde{\xi}$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second, it appears that there's a typo in Table 4. The equations given are:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{array}{c}&#xA;2: &amp;amp; \Sigma_{0:t} &amp;amp; = &amp;amp; \tilde{\Omega}^{-1} \\&#xA;3: &amp;amp; \mu_{0:t} &amp;amp; = &amp;amp; \Sigma_{0:t}\tilde{\xi} \\&#xA;\end{array}&#xA;$$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;However&lt;/strong&gt;, this is contrary to the statement on page 410 which says,&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The posterior over the robot path is now recovered as $\tilde{\Sigma}=\tilde{\Omega}^{-1}$ and $\tilde{\mu}=\tilde{\Sigma}\xi$. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;and additionally the equations (43) and (44) on page 417, which says:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The algorithm &lt;strong&gt;GraphSLAM_solve&lt;/strong&gt; in Table 4 calculates the mean and variance of the Gaussian $\mathcal{N}(\tilde{\xi},\tilde{\Omega})$:&#xA;  $$&#xA;\begin{equation}&#xA;\tilde{\Sigma} = \tilde{\Omega}^{-1} \\&#xA;\end{equation}&#xA;\tag{43}&#xA;$$&#xA;  $$&#xA;\begin{equation}&#xA;\tilde{\mu} = \tilde{\Sigma}\tilde{\xi}&#xA;\end{equation}&#xA;\tag{44}&#xA;$$&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So, in both locations (410 and 417), it is said that the equation given in Table 4 should be:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{array}{c}&#xA;2: &amp;amp; \tilde{\Sigma}_{0:t} &amp;amp; = &amp;amp; \tilde{\Omega}^{-1} \\&#xA;3: &amp;amp; \tilde{\mu}_{0:t} &amp;amp; = &amp;amp; \Sigma_{0:t}\tilde{\xi} \\&#xA;\end{array}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This would then make line six of Table 4 make more sense:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\begin{array}{c}&#xA;6: &amp;amp; \mu_j = \Omega^{-1}_{j,j}\left(\xi_j + \Omega_{j,\tau\left(j\right)}\tilde{\mu}_{\tau\left(j\right)}\right) \\&#xA;\end{array}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, in summary:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Table 3 shows how to reduce the full information matrix $\Omega$ and full information vector $\xi$ to a &lt;em&gt;reduced&lt;/em&gt; information matrix $\tilde{\Omega}$ and a &lt;em&gt;reduced&lt;/em&gt; information vector $\tilde{\xi}$. &lt;/li&gt;&#xA;&lt;li&gt;Table 4 takes the &lt;em&gt;reduced&lt;/em&gt; information matrix $\tilde{\Omega}$ and &lt;em&gt;reduced&lt;/em&gt; information vector $\tilde{\xi}$ and uses that to generate a &lt;em&gt;reduced&lt;/em&gt; map esimate $\tilde{\mu}$. &lt;/li&gt;&#xA;&lt;li&gt;Table 4 goes on to use the &lt;em&gt;reduced&lt;/em&gt; map estimate $\tilde{\mu}$ and the &lt;strong&gt;full&lt;/strong&gt; information matrix $\Omega$ and the &lt;strong&gt;full&lt;/strong&gt; information vector $\xi$ to generate a full map estimate $\mu$. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-08-01T14:33:34.450" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16161" PostTypeId="1" AcceptedAnswerId="16282" CreationDate="2018-08-01T15:58:32.397" Score="3" ViewCount="257" Body="&lt;p&gt;I have question about GraphSLAM implementation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To find out the path and map using GraphSLAM we rely on this equation:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$\mu=\Omega^{-1}\xi$$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $\Omega$ is our information matrix which determine the link between two nodes of graph and link between a landmark and a node. The $\xi$ vector give us the value of constraint between two consecutive robot pose or a robot pose and landmark. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to clarify that why a matrix inversion multiplied by a vector give us path and map. What is the mathematical logic, algorithm or assumption behind this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it related to Floyds' shortest path algorithm or any other graph based algorithm related to it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For reference I studied &lt;a href=&quot;http://robots.stanford.edu/papers/thrun.graphslam.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;The GraphSLAM Algorithm with Applications to Large-Scale Mapping of Urban Structures&lt;/a&gt; and listened to the &lt;a href=&quot;https://classroom.udacity.com/courses/cs373&quot; rel=&quot;nofollow noreferrer&quot;&gt;lecture series of Udacity&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I cannot understand where this equation came from. Also, I have a little bit of doubt about implementing GraphSLAM in a real dataset for the huge dimension on $\Omega$ Matrix and its inversion. Is it possible for a 75000 dataset? &lt;/p&gt;&#xA;" OwnerUserId="20610" LastEditorUserId="9176" LastEditDate="2018-08-01T19:45:07.033" LastActivityDate="2018-09-04T20:39:57.157" Title="GraphSLAM equation doubt" Tags="&lt;mobile-robot&gt;&lt;slam&gt;&lt;localization&gt;&lt;ekf&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16162" PostTypeId="2" ParentId="16161" CreationDate="2018-08-01T18:00:21.240" Score="1" Body="&lt;p&gt;As I &lt;a href=&quot;https://robotics.stackexchange.com/a/16160/9720&quot;&gt;mentioned previously&lt;/a&gt;, this isn't my topic of expertise, but I'll again point out the passage on page 417 of the Thrun paper:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The algorithm &lt;strong&gt;GraphSLAM_solve&lt;/strong&gt; in Table 4 calculates the mean and  variance of the Gaussian $\mathcal{N}\left(\tilde{\xi},\tilde{\Omega}\right)$:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;$$&#xA;\begin{equation}&#xA;\tilde{\Sigma} = \tilde{\Omega}^{-1} \\&#xA;\end{equation}&#xA;\tag{43}&#xA;$$&#xA;  $$&#xA;\begin{equation}&#xA;\tilde{\mu} = \tilde{\Sigma}\tilde{\xi}&#xA;\end{equation}&#xA;\tag{44}&#xA;$$&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;In particular, this operation provides us with the mean of the&#xA;  posterior on the robot path; &lt;strong&gt;it does not give us the locations&#xA;  of the features in the map.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(emphasis added on that last bit). Bear in mind also that a mathematical map and a human-readable map are two different things entirely.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=nLEbJZFm5-E&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here&lt;/a&gt; is a link to a video that appears to be &lt;em&gt;by&lt;/em&gt; Sebastian Thrun. The video is published by Udacity and links to their &lt;a href=&quot;https://www.udacity.com/course/cs271&quot; rel=&quot;nofollow noreferrer&quot;&gt;CS 271 course&lt;/a&gt;. This is where I would probably go to learn more about the Graph SLAM algorithm. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-08-01T18:00:21.240" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16163" PostTypeId="2" ParentId="6987" CreationDate="2018-08-01T23:55:44.920" Score="0" Body="&lt;p&gt;After using &lt;a href=&quot;http://www.ecalc.ch/helicalc.php?ecalc&amp;amp;lang=en&quot; rel=&quot;nofollow noreferrer&quot;&gt;ecalc&lt;/a&gt; (which is an awesome tool!) I discovered that I could approximate the results using Disk Area * RPM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's not useful for getting thrust in grams, but good for comparing changes in Blade size and RPM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/YaOEX.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/YaOEX.png&quot; alt=&quot;Disk Area * RPM vs Thrust&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9855" LastActivityDate="2018-08-01T23:55:44.920" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16164" PostTypeId="1" AcceptedAnswerId="16170" CreationDate="2018-08-01T23:57:14.547" Score="3" ViewCount="318" Body="&lt;p&gt;&lt;strong&gt;Background&lt;/strong&gt;: I have access to a UR-10, 6DOF robotic arm through my school (I'm very new to robotics). I know the desired set of linear speeds that I want in the x,y, z-direction in terms of the end effector &#xA;([x,y,z,rx =0, ry,=0, rz =0]). Using an analog controller I receive linear speeds in the x,y, z-direction ranging from -.1 -.1m/s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found the forward kinematics for the UR-10 online and begin to derive the Jacobian Matrix. (If anyone has the Jacobian matrix for a UR-10 that would be awesome.) Since I'm only interested in the linear motion, where rx,ry,rz =0 I thought I could simplify my Jacobian to a 3x3 matrix.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I realized that by doing so I would be unable able to solve for all the joints speeds 1-6. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$J^{-1} \dot{X} = \dot{Q}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $J^{-1}$ is the inverse Jacobian, $\dot{X}$ is the Cartesian velocity vector and $\dot{Q}$ is the joint velocity vector.&#xA;With the above simplification [3x3][3x1] = [3x1] joint velocity vector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I need a 6x1, so I have the speed for each joint.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What am I doing wrong?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What are the other 3 equations I would need to define a full 6x6 Jacobian and solve for the appropriate joint speeds? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: I foresee a problem that since my linear speeds change incrementally there may be singularities when calculating my Inverse Jacobian how could I work around that?&lt;/p&gt;&#xA;" OwnerUserId="20816" LastEditorUserId="10748" LastEditDate="2018-08-02T14:32:48.747" LastActivityDate="2018-08-02T14:32:48.747" Title="Finding Joint speeds for each joint of a 6DOF arm (UR10) using the Inverse Jacobian" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;inverse-kinematics&gt;&lt;industrial-robot&gt;&lt;jacobian&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16166" PostTypeId="1" AcceptedAnswerId="16167" CreationDate="2018-08-02T10:44:09.277" Score="1" ViewCount="1661" Body="&lt;p&gt;I want to use a trapezoidal velocity profile(cartesian) but I struggle with implementing the equations to code(c++/python). Does anyone have an example for this? &#xA;UPDATE&#xA;more details about my problem.&#xA;I want to create a Cartesian trajectory with a trapezoidal velocity profile from point A to point B. The start and end velocities must be zero&lt;/p&gt;&#xA;" OwnerUserId="20906" LastEditorUserId="20906" LastEditDate="2018-08-06T14:21:46.767" LastActivityDate="2018-08-06T14:58:28.517" Title="how to implement trapezoidal velocity profile in code" Tags="&lt;movement&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16167" PostTypeId="2" ParentId="16166" CreationDate="2018-08-02T12:43:01.977" Score="2" Body="&lt;p&gt;Not sure how you're choosing to structure your code, but typically I'll have a master reference, in percent, and a rate limit, in percent per second. You can have different rates for acceleration or deceleration, but I'll post a generic snippet that uses the same rate limit for both. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the code, the master reference is the unramped (typically square) input, and then the ramped reference is the trapezoidal output. I'm a heavy Matlab user and only dabble in C++, so I'll write in Matlab, but you should get the gist of it:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;persistent rampedRef; % 'static' in most other languages&#xA;dT = ElapsedTime(); % You need to know the time between function calls. How you get this information varies by language and platform. &#xA;&#xA;desiredAcceleration = (masterRef - rampedRef)/dT;&#xA;if abs(desiredAcceleration)&amp;gt;rateLimit&#xA;    desiredAcceleration = sign(desiredAcceleration)*rateLimit;&#xA;end&#xA;&#xA;rampedRef = rampedRef + desiredAcceleration*dT;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;There you go! Pretty straightforward. First, calculate a &quot;test acceleration&quot; between your ramped reference and the desired master reference. If your test acceleration exceeds your acceleration limit, then use the acceleration limit. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;:EDIT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Position is the integral of speed. Integral just means &quot;area,&quot; so if you can find the area of the speed curve then you can find the total distance traversed. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a trapezoidal speed profile, this is pretty straightforward. Acceleration and deceleration both form triangular regions, then constant speed forms a rectangular region. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The area for a triangle is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;A_{\mbox{triangle}} = \frac{1}{2}bh \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where, in this case, $b$ is the base, or the time spent accelerating, and $h$ is the height of the triangle, or the top/final speed for the vehicle. Acceleration and deceleration will both have the same $h$ term, because you accelerate to a speed and then decelerate from that speed. I'll substitute $v_{\mbox{top}}$ for $h$ and $t_{\mbox{accel/decel}}$ for $b$, and since the area under the curve is the change in position, I'll use $dS$ instead of $A$. Now you can see that the total distance traversed during the acceleration and deceleration transients are:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;dS_{\mbox{accel and decel}} = \left(\frac{1}{2}t_{\mbox{accel}}v_{\mbox{top}}\right) + \left(\frac{1}{2}t_{\mbox{decel}}v_{\mbox{top}}\right) \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have the same rate limit for acceleration and deceleration then $t_{\mbox{accel}} = t_{\mbox{decel}}$, and the equation above reduces to:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;dS_{\mbox{accel and decel}} = \left(\frac{1}{2}t_{\mbox{ramp}}v_{\mbox{top}}\right) + \left(\frac{1}{2}t_{\mbox{ramp}}v_{\mbox{top}}\right) \\&#xA;\boxed{dS_{\mbox{accel and decel}} = t_{\mbox{ramp}}v_{\mbox{top}}}\\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other part of the formula is now just the &quot;rectangle&quot; of constant motion; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;dS_{\mbox{constant speed}} = v_{\mbox{top}}t_{\mbox{constant speed}} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Again, simply put, position is (speed) x (time). Now, the total distance traversed is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;dS = dS_{\mbox{accel and decel}} + dS_{\mbox{constant speed}} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, finally, to solve the problem of generating the speed profile, you would:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Get the distance to travel, $dS = s_{\mbox{end}} - s_{\mbox{start}}$. &lt;/li&gt;&#xA;&lt;li&gt;Find out how far you travel by &lt;strong&gt;only&lt;/strong&gt; accelerating to top speed then immediately decelerating back to zero speed - $dS_{\mbox{accel and decel}} = t_{\mbox{ramp}}v_{\mbox{top}}$&lt;/li&gt;&#xA;&lt;li&gt;If the accelerate/decelerate profile causes you to travel further than you want, then solve for a lower top speed by solving $dS = &#xA;t_{\mbox{ramp}}v_{\mbox{top}}$ for $v_{\mbox{top}}$. &lt;/li&gt;&#xA;&lt;li&gt;If the accelerate/decelerate profile does not get you far enough, then solve for the amount of time you need to be at top speed by solving $dS - dS_{\mbox{accel and decel}} = v_{\mbox{top}}t_{\mbox{constant speed}}$ for $t_{\mbox{constant speed}}$. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2018-08-06T14:58:28.517" LastActivityDate="2018-08-06T14:58:28.517" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16168" PostTypeId="1" AcceptedAnswerId="16176" CreationDate="2018-08-02T13:21:13.883" Score="3" ViewCount="479" Body="&lt;p&gt;How are the coordinate frames and D-H parameters determined in industry? Does one use the CAD drawing of the arm or physically take measurements of the actual arm?&lt;/p&gt;&#xA;" OwnerUserId="20907" LastActivityDate="2018-08-02T15:42:28.537" Title="Denavit-Hartenberg convention in practice" Tags="&lt;robotic-arm&gt;" AnswerCount="4" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16169" PostTypeId="1" CreationDate="2018-08-02T13:59:14.193" Score="2" ViewCount="88" Body="&lt;p&gt;is it possible to calculate gear reduction based on the datasheet of SG90 servo motor? Because I wanted to do some modeling in Simulink and RC servo ask for gear reduction, but I can't find any information about the gear reduction.&lt;/p&gt;&#xA;" OwnerUserId="20873" LastActivityDate="2018-08-02T15:06:51.517" Title="Is it possible to calculate the gear reduction based on datasheet of SG90?" Tags="&lt;servomotor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16170" PostTypeId="2" ParentId="16164" CreationDate="2018-08-02T14:29:58.153" Score="2" Body="&lt;p&gt;If you are only interested in linear motion, instead of simplifying the Jacobian to a 3x3 matrix, you can express this contraint in the velocity componentet and have&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\dot{X} =  \begin{bmatrix} \dot{x} \\ \dot{y} \\ \dot{z} \\ 0 \\ 0 \\ 0 \end{bmatrix}$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and still use the 6x6 Jacobian. This will result in joint velocities which to not alter the current orientation of the end-effector, only the position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$\dot{Q} = J^{-1}\dot{X}$&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2018-08-02T14:29:58.153" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16171" PostTypeId="1" AcceptedAnswerId="16177" CreationDate="2018-08-02T14:51:30.823" Score="2" ViewCount="811" Body="&lt;p&gt;I am trying to follow the &lt;a href=&quot;http://wiki.ros.org/camera_calibration/Tutorials/MonocularCalibration&quot; rel=&quot;nofollow noreferrer&quot;&gt;ROS monocular camera calibration&lt;/a&gt; for a USB camera I have, but the calibration routine fails when I try to run it. I was expecting to see an image like the one below, but I get a segmentation fault instead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/0aUJj.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0aUJj.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These are the commands I used to try to start the calibration routine:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;mona@Mona:~$ roscore&#xA;mona@Mona:~/catkin_ws/src/usb_cam$  rosrun usb_cam usb_cam_node&#xA;mona@Mona:~/catkin_ws/src/usb_cam$ rosrun rviz rviz&#xA;mona@Mona:~/catkin_ws/src/usb_cam$ rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.108 image:=/camera/image_raw camera:=/camera&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But this is the output I get:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;('Waiting for service', '/camera/set_camera_info', '...')&#xA;Service not found&#xA;Segmentation fault (core dumped)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;What am I missing? How should I get it to work? When I list the ROS topics, I get:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ rostopic list&#xA;/rosout&#xA;/rosout_agg&#xA;/usb_cam/camera_info&#xA;/usb_cam/image_raw&#xA;/usb_cam/image_raw/compressed&#xA;/usb_cam/image_raw/compressed/parameter_descriptions&#xA;/usb_cam/image_raw/compressed/parameter_updates&#xA;/usb_cam/image_raw/compressedDepth&#xA;/usb_cam/image_raw/compressedDepth/parameter_descriptions&#xA;/usb_cam/image_raw/compressedDepth/parameter_updates&#xA;/usb_cam/image_raw/theora&#xA;/usb_cam/image_raw/theora/parameter_descriptions&#xA;/usb_cam/image_raw/theora/parameter_updates&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="16739" LastEditorUserId="9720" LastEditDate="2018-08-02T18:41:08.233" LastActivityDate="2018-08-02T18:46:07.353" Title="Calibrating Logitic C920 HD 1080p using ros kinetic" Tags="&lt;ros&gt;&lt;calibration&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16172" PostTypeId="2" ParentId="16168" CreationDate="2018-08-02T14:54:49.653" Score="0" Body="&lt;p&gt;You generally need to get the measurements from CAD or manufacturing drawings, simply because there's generally no reasonable way to measure something like a joint centerline, especially when the motors and shafting are concealed under body/trim plates. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-08-02T14:54:49.653" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16173" PostTypeId="2" ParentId="16169" CreationDate="2018-08-02T15:06:51.517" Score="1" Body="&lt;p&gt;If it does not say directly in the data sheet, you can calculate it from:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;the nominal speed of the  DC motor vs. the nominal speed of the whole servo assembly (incl. gears).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;the maximum torque of the DC motor vs. the maximum torque of the entire assembly (incl gears)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;the velocity constant of the motor and the nominal voltage can be used to calculate the nominal speed of the dc-motor, after this see point 1.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;the torque constant and the max current of the DC motor can be used to determine the maximum torue of the DC motor, after this see point 2. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;the torque constant of the motor is specified, it equals (as value not as unit of measurment) the velocity constant of the dc motor, after this see point 3.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;a detailed drawing is presented you can count the teeth on the gears and calculate the transmission ratio from those (and hope that the drawing matches the motor)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You can disassemble the servo nd count the teeth of the gears and compute the transmission ratio&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2018-08-02T15:06:51.517" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16174" PostTypeId="2" ParentId="16168" CreationDate="2018-08-02T15:14:12.510" Score="1" Body="&lt;p&gt;If you are dealing with an (existing) industrial robot, all of its nominal dimentions and all axis to axis distances are specified in its manual (e.g. &lt;a href=&quot;https://goo.gl/images/qDnLqe&quot; rel=&quot;nofollow noreferrer&quot;&gt;Kuka&lt;/a&gt;). All industrial robot manufacturers do this, without exception. All values in the DH table come from this table.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In most cases, positive and negative directions of the axes are defined in the manual and/or are also marked on the robot iself. This already defines the orientation and direction of all Z axes in the DH convention, you just figure out the rest (basically the one remainig possible rotation) by yourself and fill out the table.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These are obviusly nominal values, the real measurments of the robot include assembly and manufacturing tolerances, load and temperature effects. these are disregarded in the DH Table / Convention and are added as compensation odr calibration values later on.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2018-08-02T15:14:12.510" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16175" PostTypeId="2" ParentId="16168" CreationDate="2018-08-02T15:18:36.340" Score="1" Body="&lt;p&gt;CAD is used as a first estimate. Often the kinematics (coordinate frames) are part of the design specification, and you can use those numbers directly. Where they are not, all mechanical design CAD packages have tools included for measuring positions and angles in the model.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where the first estimate is not accurate enough, a process called &lt;a href=&quot;https://en.m.wikipedia.org/wiki/Robot_calibration&quot; rel=&quot;nofollow noreferrer&quot;&gt;kinematic calibration&lt;/a&gt; is used. There are many techniques, and as Chuck mentions, it is often difficult or impossible to directly measure distances of interest. A web search on the topic will give you an introduction.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2018-08-02T15:18:36.340" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16176" PostTypeId="2" ParentId="16168" CreationDate="2018-08-02T15:42:28.537" Score="4" Body="&lt;p&gt;The DH parameters need to be as accurate as possible, and that means using dimensions from CAD. However, sometimes this is still not accurate enough.  (The robot might not match the CAD exactly for various reasons.)  In this case, we turn to &lt;em&gt;kinematic calibration&lt;/em&gt;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Put simply, kinematic calibration is taking measurements of the arm and adjusting the DH parameters accordingly.  Although, this must be done in a very controlled and precise manner.  (We don't just use a tape measure on the arm for example).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This can take various forms.  For example if you have a very precise jig, you can make the arm touch known points on the jig.  Or if you have a high-DOF arm you can fix the end-effector and move the rest of the joints through the arm's null space.  Or you can simply instruct the arm to move to various configurations and measure the end-effector pose with high precision external sensors.  Then you typically have a large minimization problem to solve.  You need to back out new DH parameters that are most likely to give you the measurements you have seen. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To better understand kinematic calibration, the clearest source of information I could find on the subject is in the book &quot;&lt;a href=&quot;https://www.google.com/shopping/product/18328483085519729280&quot; rel=&quot;nofollow noreferrer&quot;&gt;Robotics: Modelling, Planning and Control&lt;/a&gt;&quot; by Bruno Siciliano, Lorenzo Sciavicco, Luigi Villani, Giuseppe Oriolo, chapter 2.11.  Which requires a description of the arm in DH parameters, multiplying out the kinematics equation, partial differentiation w.r.t. each DH parameter, then a least-squares fit (with the left pseudo-inverse), then iterate.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I was never able to get this technique to work for me.  What did work was using PoE (Product of Exponentials).  In PoE, the kinematic parameters of the model vary smoothly with changes in joint axes and can handle kinematic singularities naturally. I followed this paper and was successful in kinematically calibrating my 7 DoF arm:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I. Chen, G. Yang, C. Tan, and S. Yeo, “&lt;a href=&quot;http://www.sciencedirect.com/science/article/pii/S0094114X01000489&quot; rel=&quot;nofollow noreferrer&quot;&gt;Local POE model for robot kinematic calibration&lt;/a&gt;,” Mech. Mach. Theory, vol. 36, no. 11/12, pp. 1215– 1239, 2001.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2018-08-02T15:42:28.537" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16177" PostTypeId="2" ParentId="16171" CreationDate="2018-08-02T17:35:30.613" Score="2" Body="&lt;p&gt;Based on rostopic list I realized the correct name of camera:&#xA;&lt;code&gt;/usb_cam&lt;/code&gt; instead of &lt;code&gt;/camera&lt;/code&gt;&#xA;so the command changed to&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.108 image:=/usb_cam/image_raw camera:=/usb_cam&#xA;('Waiting for service', '/usb_cam/set_camera_info', '...')&#xA;OK&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Using the &lt;code&gt;/usb_cam&lt;/code&gt; name, I was able to connect to the camera and get video:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/FSRAK.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FSRAK.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might notice that CALIBRATE button is grayed out so you would need to move in various direction (back and forth/right and left) so it becomes green. Eventually you will see the following (pretty much like calibrating a parrot drone):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/MCMjF.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MCMjF.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now go ahead and press the calibrate button and you are good to go.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, I am interested in the fx, fy, cx, cy that are presented in camera matrix. There are output on screen after you click on CALIBRATE button:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/0OhCK.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0OhCK.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="16739" LastEditorUserId="9720" LastEditDate="2018-08-02T18:46:07.353" LastActivityDate="2018-08-02T18:46:07.353" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16181" PostTypeId="2" ParentId="15961" CreationDate="2018-08-04T04:53:44.550" Score="1" Body="&lt;p&gt;Check out this great opensource project called &lt;a href=&quot;http://www.donkeycar.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;DonkeyCar&lt;/a&gt;, which sounds pretty close to what you are trying to achieve. You can fork the project on &lt;a href=&quot;https://github.com/wroscoe/donkey&quot; rel=&quot;nofollow noreferrer&quot;&gt;GitHub&lt;/a&gt; and add your own modifications as required. They have a very active Slack group as well. They are available most of the time, and are an enthusiastic bunch as well. Check them out here.&lt;/p&gt;&#xA;" OwnerUserId="20925" LastActivityDate="2018-08-04T04:53:44.550" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16182" PostTypeId="1" CreationDate="2018-08-04T05:04:45.380" Score="9" ViewCount="267" Body="&lt;p&gt;Benedict Evans, a general partner at Andreessen Horowitz, &lt;a href=&quot;https://www.ben-evans.com/benedictevans/2017/8/20/winner-takes-all&quot; rel=&quot;noreferrer&quot;&gt;claims that “almost all autonomy” projects are using lidar for SLAM&lt;/a&gt;, and that not all of them use HD maps. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;An MIT group is &lt;a href=&quot;https://spectrum.ieee.org/cars-that-think/transportation/self-driving/mit-experts-selfdriving-cars-wont-need-accurate-digital-maps&quot; rel=&quot;noreferrer&quot;&gt;testing self-driving cars on public roads without HD maps&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is whether the difference in error between lidar and cameras is significant. Benedict Evans and others claim that lidar is necessary for accurate enough SLAM in self-driving cars, but at first glance the KITTI benchmark data seems to contradict that claim. I want to confirm or refute that impression.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The KITTI Vision benchmark &lt;a href=&quot;http://www.cvlibs.net/datasets/kitti/eval_odometry.php&quot; rel=&quot;noreferrer&quot;&gt;leaderboard&lt;/a&gt; for visual odometry/SLAM methods shows a lidar-based method called &lt;a href=&quot;http://www.cvlibs.net/datasets/kitti/eval_odometry_detail.php?&amp;amp;result=c58d166ecf9ee7f063dacc9ad266bae7b31f5a0f&quot; rel=&quot;noreferrer&quot;&gt;V-LOAM&lt;/a&gt; in first place, and a stereo camera-based method called &lt;a href=&quot;http://www.cvlibs.net/datasets/kitti/eval_odometry_detail.php?&amp;amp;result=51b6194016dda8ee70002998478a7afe870c4fde&quot; rel=&quot;noreferrer&quot;&gt;SOFT2&lt;/a&gt; in fourth place. They have the same rotation error, and a percentage point difference of 0.05 in their respective translation errors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Is a 0.05 percentage point difference in translation accuracy large or insignificant, when it comes to an autonomous car navigation?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The KITTI Vision benchmark leaderboard for odometry/SLAM methods:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/XAfyM.jpg&quot; rel=&quot;noreferrer&quot; title=&quot;The KITTI Vision benchmark leaderboard for odometry/SLAM methods&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XAfyM.jpg&quot; alt=&quot;The KITTI Vision benchmark leaderboard for odometry/SLAM methods&quot; title=&quot;The KITTI Vision benchmark leaderboard for odometry/SLAM methods&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="20894" LastEditorUserId="9720" LastEditDate="2018-08-08T12:41:22.557" LastActivityDate="2019-05-05T15:01:00.130" Title="In practical terms, how close is the accuracy of camera-based visual odometry/SLAM methods to lidar-based methods for autonomous car navigation?" Tags="&lt;slam&gt;&lt;odometry&gt;&lt;lidar&gt;&lt;visual-odometry&gt;&lt;autonomous-car&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16183" PostTypeId="2" ParentId="15961" CreationDate="2018-08-04T15:20:21.793" Score="2" Body="&lt;p&gt;I'm fairly certain you can't control a DC motor solely by plugging it into pins on the Arduino. You could use a diode and a transistor to power the motor, however you cannot control the speed. To control the speed you will need an ESC(electronic speed controller). This can be connected to the Arduino like a servo. Hope this helps!&lt;/p&gt;&#xA;" OwnerUserId="19950" LastActivityDate="2018-08-04T15:20:21.793" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16184" PostTypeId="2" ParentId="15961" CreationDate="2018-08-04T21:46:31.493" Score="0" Body="&lt;p&gt;If you are using the motors that came with the car, the car's circuit should include a motor driver, which takes an RC signal and decodes it to control the motor. I believe that the existing controller would have different circuits for controlling the steering motor and the drive motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Brushless DC Motors (BLDCM) require a different motor controller board that the normal Brushed DC Motors (DCM). You can search online for controllers. The only one I know a bit about is the &lt;a href=&quot;https://odriverobotics.com&quot; rel=&quot;nofollow noreferrer&quot;&gt;ODrive&lt;/a&gt;. This is almost certainly too large and expensive for your project.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://www.robotshop.com/en/brushless-dc-motor-controllers.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;RobotShop&lt;/a&gt; has a full section of BLDCM controllers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The big thing to know is the power that the motor uses during startup and at stall (when something prevents the motor from running and yet you're still applying power).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sounds like an interesting project.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did build a robot out of an RC tank, many years ago. I used the original circuit for the controller, and faked the RC signals. But it used two DC brushed motors&lt;/p&gt;&#xA;" OwnerUserId="19275" LastActivityDate="2018-08-04T21:46:31.493" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16185" PostTypeId="2" ParentId="16182" CreationDate="2018-08-05T04:26:35.167" Score="1" Body="&lt;p&gt;In other words, could this difference noticeably impact safety or reliability? -&gt; not at all in my opinion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What important in autonomous car navigation is localization stability rather than the odometry estimation accuracy. Maps for autonomous driving are usually prebuilt and globally optimized before they are used for a navigation. It is never required to build such an open loop trajectory for a navigation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even for a map building, 0.05% is almost meaningless if there is a proper place recognition system.&lt;/p&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2018-08-05T04:26:35.167" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16186" PostTypeId="1" AcceptedAnswerId="16188" CreationDate="2018-08-05T07:41:29.883" Score="0" ViewCount="149" Body="&lt;p&gt;I will be using 1:4 gear ratio and thus will require a motor with a continuous 360 motion and a high torque for efficient functioning. Servo motors with continuous rotation and high torque are very expensive and rare, so my choice has boiled down to DC Motor and stepper motor. However I have not completely understood the way to configure them for a robotic arm. I don't want to use rotary encoders, as installing a potentiometer or hall effect sensor on the shaft will be cumbersome and inaccurate due to vibration. Is there a way one could move a DC motor or stepper motor to a particular angle with IC/modules like l293d or other motor drivers?&lt;/p&gt;&#xA;" OwnerUserId="20888" LastEditorUserId="14673" LastEditDate="2018-08-06T15:41:56.600" LastActivityDate="2018-08-06T15:41:56.600" Title="Controlling Stepper or DC motor with L298 or L293 and getting operation similar to Servo for 6 dof arm" Tags="&lt;robotic-arm&gt;&lt;motor&gt;&lt;stepper-motor&gt;&lt;stepper-driver&gt;" AnswerCount="2" CommentCount="7" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16187" PostTypeId="1" AcceptedAnswerId="16190" CreationDate="2018-08-05T14:36:28.753" Score="0" ViewCount="113" Body="&lt;p&gt;I have lots of doubts about GraphSLAM, &lt;a href=&quot;http://robots.stanford.edu/papers/thrun.graphslam.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;The GraphSLAM Algorithm with Applications to Large-Scale Mapping of Urban Structures&lt;/a&gt;. When I practically implement it I get matrix singularity error. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I taken the data set from &lt;a href=&quot;http://asrl.utias.utoronto.ca/datasets/mrclam/&quot; rel=&quot;nofollow noreferrer&quot;&gt;UTIAS Multi-Robot Cooperative Localization and Mapping Dataset.&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now this dataset contain 75000 odometer data and 5000 sensor data. Correspondence are known correspondence. As per the algorithm initially I think the information matrix should be 75015x75015 matrix. But practically, this is impossible to implement. I am using &lt;a href=&quot;https://ujmp.org&quot; rel=&quot;nofollow noreferrer&quot;&gt;universal java matrix package&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then I think the robot may come to the same position after roaming certain amount of time. So I have to identify the location which is same as previous location. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I watched &lt;a href=&quot;https://www.youtube.com/watch?v=5E5n7fhLHEM&amp;amp;index=7&amp;amp;list=PLTBdjV_4f-EKeki5ps2WHqJqyQvxls4ha&quot; rel=&quot;nofollow noreferrer&quot;&gt;Lecture 7: Visual Navigation for Flying Robots&lt;/a&gt; where there is a description of Iterative Closest Point algorithm. This algorithm identity the same location. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I have some doubts about the lecture. The prof said&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Given: Two corresponding point sets (Clouds) &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;$$P = \{p_1,...,p_n\}\text{ and }Q = \{q_1,...,,q_n\}$$&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Where does he get those points? Why there is there two data sets? Does $P$ represent X axis and $Q$ represent Y axis?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have odometer and sensor raw data. From which one do I create this point cloud?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do I really need to use this technique (ICP) for my implementation? &lt;/p&gt;&#xA;" OwnerUserId="20610" LastEditorUserId="20709" LastEditDate="2018-08-06T15:42:19.420" LastActivityDate="2018-08-06T15:42:19.420" Title="Relation between GraphSLAM and Iterative closest Point algorithm" Tags="&lt;mobile-robot&gt;&lt;slam&gt;&lt;localization&gt;&lt;algorithm&gt;&lt;point-cloud&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16188" PostTypeId="2" ParentId="16186" CreationDate="2018-08-06T09:45:36.077" Score="0" Body="&lt;p&gt;You can't control shaft angle of the DC motor without any feedback from it. Servos made for RC models or robots just do the thing - they utilize a potentiometer or rotary encoder to measure shaft angle and control it, mostly with PID regulator. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can utilize stepper motor for Your task, as these motors are mainly used in the angular manner of control. For that, better than L293D will be dedicated stepper motor driver, like &lt;a href=&quot;https://www.pololu.com/product/1182&quot; rel=&quot;nofollow noreferrer&quot;&gt;A4988&lt;/a&gt; or &lt;a href=&quot;https://www.pololu.com/product/2133&quot; rel=&quot;nofollow noreferrer&quot;&gt;DRV8825&lt;/a&gt; (I don't know how large Your robotic arm will be, so these are just example drivers).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If You will choose DC motor over the stepper motor, mind that servos' mechanisms have much higher gear ratio than 1:4 in order to gain torque from a small DC motor.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt; There is also a problem with holding the position of the stepper motor, common in CNC machines, 3D printers etc. Stepper motors can move (almost) freely, when there is no holding current applied. Therefore, when a machine is turned on, every motor has to find its origin. It is usually done by placing a switch on the minimum or the maximum position of the joint. The process of finding origin of the machine is called &lt;em&gt;Homing&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=zv3GoDJKk70&quot; rel=&quot;nofollow noreferrer&quot;&gt;Check out here how it is done by a 3D printer&lt;/a&gt;- You can see here a movement of the axis towards the switch. When the switch is hit, it is recognized by the software as reaching the minimum of the axis, thus zeroing joint's position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Moreover, there is also a way of sensorless homing by measurement stepper motor current draw. For example, &lt;a href=&quot;https://www.watterott.com/en/SilentStepStick-TMC2208&quot; rel=&quot;nofollow noreferrer&quot;&gt;TMC2208&lt;/a&gt; (and also TMC2130 and TMC2100) stepper motor drivers are capable of doing that. When the joint mechanically reaches its constraint, the driver knows it by measuring, that the motor is drawing more current than normally. It also sets &lt;code&gt;diag1&lt;/code&gt; pin to high (if it is properly configured), allowing external electronics to detect machine's home position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These drivers are also very silent and give smoother motor movement in comparison with previously mentioned ones. &lt;a href=&quot;https://www.youtube.com/watch?v=zbE73bRzxvI&quot; rel=&quot;nofollow noreferrer&quot;&gt;You can check the difference in sound here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="14673" LastEditorUserId="14673" LastEditDate="2018-08-06T12:36:12.887" LastActivityDate="2018-08-06T12:36:12.887" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16189" PostTypeId="2" ParentId="16186" CreationDate="2018-08-06T13:21:04.230" Score="1" Body="&lt;p&gt;&lt;strong&gt;You can't do position control without position feedback.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You need position feedback. Your comments regarding why you're not going to use position feedback (&quot;cumbersome and inaccurate due to vibration&quot;) are totally inaccurate. There is no vibration unless you don't mount the equipment correctly. It's not any more cumbersome than anything else. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to do position control, you're going to put a position sensor somewhere.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How well you want to do position control, how accurate you want it to be, how long you want the startup/homing routine to be, those are all questions for &lt;em&gt;you the designer&lt;/em&gt; to answer. Being lazy now and choosing to slap a limit switch on because you can't be bothered to actually look at rotary encoders means you get to wonder &lt;em&gt;for the life of your robot arm&lt;/em&gt; whether the arm is actually in the position you think it is. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&quot;Isn't there a way one could move a DC motor or stepper motor to a particular angle with IC/modules like l293d or other motor drivers.&quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You can &lt;em&gt;command&lt;/em&gt; an incremental position change. &lt;strong&gt;You cannot verify the final position.&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-08-06T13:21:04.230" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16190" PostTypeId="2" ParentId="16187" CreationDate="2018-08-06T13:28:20.930" Score="2" Body="&lt;p&gt;Iterative closest point is a method to fuse two point clouds together. If Robot A drove around town and gathered some data, then Robot B drove around town and gathered some data, ICP would (theoretically) be able to join the two clouds together. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In reality, if A and B don't have a common view (didn't drive down the same street/segment), then ICP isn't going to produce anything meaningful. Even if they &lt;em&gt;did&lt;/em&gt; observe some common terrain, you still need a pretty good guess of &lt;em&gt;how&lt;/em&gt; those segments should be joined. ICP is an &lt;strong&gt;iterative&lt;/strong&gt; closest point algorithm and &lt;em&gt;is&lt;/em&gt; prone to getting &quot;stuck&quot; in local minima. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That is, without a good seed point (initial guess), an ICP algorithm might try to put your shirt on as pants, because there are two long cylinders (sleeves) for your legs and one big opening for your waist. It fits better there than it does around your feet or upside down on your torso, so it &quot;converges&quot; on shirt == pants. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You've asked several questions now about a colossal data set - I would suggest trying with a smaller data set first and verifying whether the algorithm works or not, how you implement it, etc. You could try the first N samples, or average to every Nth sample, etc. Trying to go from no good guidance to completely solving what appears to be a large problem is a good recipe for getting frustrated and giving up. Take smaller steps. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-08-06T13:28:20.930" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16194" PostTypeId="2" ParentId="14897" CreationDate="2018-08-07T12:03:12.043" Score="-1" Body="&lt;p&gt;I think you should go for iterative closest point algorithm. This algorithm is used for detecting loop closing. This is not very reliable but still it work well. You can check this link &lt;a href=&quot;https://www.youtube.com/watch?v=5E5n7fhLHEM&amp;amp;list=PLTBdjV_4f-EKeki5ps2WHqJqyQvxls4ha&amp;amp;index=7&quot; rel=&quot;nofollow noreferrer&quot;&gt;Visual navigation for flying Robots&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="20610" LastActivityDate="2018-08-07T12:03:12.043" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16196" PostTypeId="2" ParentId="14208" CreationDate="2018-08-07T12:14:55.717" Score="0" Body="&lt;p&gt;Most probably, yes but performance will be slow because you have a very slow CPU. You can increase performance of the software by disabling visual effects in Windows and by closing background apps.&lt;/p&gt;&#xA;" OwnerUserId="20717" LastActivityDate="2018-08-07T12:14:55.717" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16197" PostTypeId="2" ParentId="2131" CreationDate="2018-08-07T12:42:18.017" Score="1" Body="&lt;p&gt;I hope you can only use EV3 Color Sensor for line following and sensing colors. There are 3 modes for the Color Sensor. You can use 2 of them for these tasks:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;1.) Color Mode&lt;/strong&gt;&#xA;&lt;em&gt;This mode is best suited for sensing colors. This is really useful if the darkness of the Colors are same. It can only sense a handful of Colors: Black[1], Blue[2], Green[3], Yellow[4], Red[5], White[6] and Brown[7]. If you don't want to make your Robot follow the line precisely you can use this mode.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;2.) Reflected Light Intensity&lt;/strong&gt;&#xA;&lt;em&gt;This is used to determine the reflection of the surface. This is very useful if you want to make your Robot follow the line precisely. Let's say if you want your Robot to follow in between the black line and the white line. You can get the reflected values of the white surface and the black surface and add them and dividing them by 2 will give the threshold value to make your Robot follow in between the black and white line. It is generally used to measure the darkness of a surface. The more darker the surface,lesser is the reflection. The more brighter the surface, more is the reflection.&lt;/em&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately you can't use both the modes simultaneously in EV3 as it will result in resource conflict letting your Robot to crash. Instead you can use 2 Color sensors to use both the modes simultaneously in each sensor.&lt;/p&gt;&#xA;" OwnerUserId="20717" LastActivityDate="2018-08-07T12:42:18.017" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16200" PostTypeId="1" AcceptedAnswerId="16201" CreationDate="2018-08-07T20:22:26.263" Score="2" ViewCount="146" Body="&lt;p&gt;I am working with ROS indigo and clearpath huskyA200 and wanted to implement the EKF localization with unknown correspondences with my own hokuyo lidar data for a school project. Giving the algorithm in page 217 of the &lt;a href=&quot;https://github.com/liulinbo/slam/blob/master/Probabilistic%20Robotics%20_Sebastian%20Thrun%20et%20al..pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;probabilistic robotics book by Thrun&lt;/a&gt;. (Picture of the algorithm is given below), what does step 9 mean by “&lt;em&gt;for all observed features&lt;/em&gt;”, does it mean all the raw data in a lidar scan? Or does it mean to process the raw data first to find the features? If it’s the latter, what would be some technique to process the raw data to find features?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This &lt;a href=&quot;https://robotics.stackexchange.com/questions/3073/data-association-with-ekf&quot;&gt;stackoverflow post&lt;/a&gt; helped me understand this algorithm a lot better, but now, i am just not sure how to provide the observed feature with my own lidar scan data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help is appreciated, thank you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/c2cUr.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/c2cUr.jpg&quot; alt=&quot;table 7.3 part 1&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/OtPjh.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OtPjh.jpg&quot; alt=&quot;part 2&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="20881" LastEditorUserId="9720" LastEditDate="2018-08-08T12:47:10.077" LastActivityDate="2018-08-08T12:47:10.077" Title="EKF localization data association" Tags="&lt;mobile-robot&gt;&lt;slam&gt;&lt;localization&gt;&lt;ekf&gt;&lt;data-association&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16201" PostTypeId="2" ParentId="16200" CreationDate="2018-08-07T22:00:36.683" Score="1" Body="&lt;p&gt;It should be processed features. Extracting features from raw data is usually called as front-end in SLAM. The easiest forms of features in cased of 2D LiDAR are corners, edges, and lines. You can run RANSAC algorithm to find line segments. Corners are found by intersection of lines and edges are ends of lines. Corners should be enough for a uni project.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ICP can be utilized to register raw scans but that becomes a different type of SLAM.&lt;/p&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2018-08-07T22:00:36.683" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16202" PostTypeId="1" CreationDate="2018-08-08T00:07:06.920" Score="1" ViewCount="338" Body="&lt;p&gt;I was Performing Programming Assignment with MATLAB for Quad Thrust and Height for an Introductory Course. The control input for a PD controller was According to the Equation &lt;/p&gt;&#xA;&#xA;&lt;p&gt;u = mass*(diff(s_des, 2) + Kp&lt;em&gt;e + Kv&lt;/em&gt;diff(e) + gravity)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where: &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;diff(s_des, 2) is the second diff. of the Desired Height which is 1 meter.&lt;/li&gt;&#xA;&lt;li&gt;Kp &amp;amp; Kv are the Proportional and Derivative Gains which Require Tuning.&lt;/li&gt;&#xA;&lt;li&gt;The Term &quot;e&quot; is the Position Error and diff(e) is the Velocity Error.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Note: The Desired Kp, Kv, and Height required to be within 1 Second for the Rise Time, and Less than 5% for the Over Shooting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and the Code made by the instructor was:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;function [ u ] = pd_controller(~, s, s_des, params)&#xA;% PD_CONTROLLER  PD controller for the height&#xA;% s: 2x1 vector containing the current state [z; v_z]&#xA;% s_des: 2x1 vector containing desired state [z; v_z]&#xA;% params: robot parameters&#xA;% FILL IN YOUR CODE HERE&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Finally, The simulator doesn't go so well, and I Couldn't Find the Error&lt;/p&gt;&#xA;" OwnerUserId="20909" LastEditorUserId="20909" LastEditDate="2018-08-08T21:08:56.000" LastActivityDate="2018-11-06T23:00:26.290" Title="Quad-rotor 1-D Linear Control Simulation with MATLAB" Tags="&lt;quadcopter&gt;&lt;control&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16203" PostTypeId="2" ParentId="16202" CreationDate="2018-08-08T14:43:43.087" Score="2" Body="&lt;p&gt;You haven't posted &lt;em&gt;how&lt;/em&gt; you're using your function, which could be problematic, or &lt;strong&gt;what the error is.&lt;/strong&gt; That said, even without that information (which &lt;strong&gt;will&lt;/strong&gt; be required to get a more detailed answer), there are a few glaring issues. I'll point those out now and request that you &lt;em&gt;edit your question&lt;/em&gt; to include how you're using the function you provided to perform a simulation, what you were expecting to see in the simulation, and what you actually got, including the &lt;em&gt;exact errors you got&lt;/em&gt;, if any.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;You gave a &quot;control equation&quot; of &lt;code&gt;u = mass*(diff(s_des, 2) + Kpe + Kvdiff(e) + gravity)&lt;/code&gt;. The term &lt;code&gt;diff(s_des, 2)&lt;/code&gt; doesn't make sense in the context of the question because (a) your &lt;code&gt;s_des&lt;/code&gt; doesn't have three entries, so you can't take &lt;code&gt;diff(s_des,2)&lt;/code&gt; (the result is empty), and (b) you're (trying to) use the reference acceleration as a feed-forward term for your controller. This may or may not be in the scope of what you're trying to do, but your question asked specifically about a PD controller. I don't know if you're supposed to have the feed-forward term included. &lt;/li&gt;&#xA;&lt;li&gt;Big Problem #1 - You get the current height and speed, &lt;code&gt;s&lt;/code&gt;, and then you overwrite it: &lt;code&gt;s = [0; diff(0)];&lt;/code&gt; You should try just entering that command at the command prompt in Matlab and see what the result is. It's not a 2x1 vector. It certainly is not the current height and speed. &lt;/li&gt;&#xA;&lt;li&gt;Big Problem #2 - Same as Big Problem #1, but for your references &lt;code&gt;s_des&lt;/code&gt;. &lt;/li&gt;&#xA;&lt;li&gt;Your error term &lt;code&gt;e&lt;/code&gt; and the derivative error term &lt;code&gt;diff(e)&lt;/code&gt; suffer from a similar-ish set of problems as the two Big Problems above. You're not using &lt;code&gt;diff&lt;/code&gt; correctly. Instead of trying to take &lt;code&gt;diff(e)&lt;/code&gt; to get the &lt;em&gt;time derivative&lt;/em&gt; of your error, you should instead consider what constitutes your error (hint:position) and what the derivative of a position error would be, and then how you can create that given the current state and reference states you've been given. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Since most of your trouble seems to revolve around &lt;code&gt;diff&lt;/code&gt; and indexing here's a quick primer on &lt;code&gt;diff&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have a symbolic expression, then &lt;code&gt;diff&lt;/code&gt; will give you the symbolic derivative of that expression. You do &lt;strong&gt;not&lt;/strong&gt; have a symbolic expression. You have a 2x1 numeric vector. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have a numeric vector, then &lt;code&gt;diff(myVector)&lt;/code&gt; is equivalent to &lt;code&gt;diff(myVector, 1)&lt;/code&gt;, which is equivalent to &lt;code&gt;myVector(2:end) - myVector(1:end-1)&lt;/code&gt;. That is, it starts at the second entry in the vector and subtracts from that entry the value in the previous index. It then steps through the entire &lt;em&gt;remainder&lt;/em&gt; of the vector. If &lt;code&gt;myVector&lt;/code&gt; is Nx1, then &lt;code&gt;diff(myVector)&lt;/code&gt; is (N-1)x1. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you try &lt;code&gt;diff(myVector, M)&lt;/code&gt;, then Matlab runs the &lt;code&gt;diff(myVector)&lt;/code&gt; M times and returns that result. Every time it runs the &lt;code&gt;diff&lt;/code&gt; command your result gets shorter by one. This is why I said earlier that you can't take &lt;code&gt;diff(s_des, 2)&lt;/code&gt; if &lt;code&gt;s_des&lt;/code&gt; is only 2 elements big. The starting vector is 2x1, so the result of the first &lt;code&gt;diff&lt;/code&gt; is (2-1)x1, and the result of the second &lt;code&gt;diff&lt;/code&gt; is then ((2-1)-1)x1, or 0x1. It's empty.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further, from a physical meaning perspective, your &lt;code&gt;s&lt;/code&gt; and &lt;code&gt;s_des&lt;/code&gt; vectors are [position; speed]. What do you get when you take &lt;code&gt;diff(s)&lt;/code&gt;? You get [speed - position]. What &lt;em&gt;physical meaning&lt;/em&gt; does that have? None. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I would suggest you do (and what I routinely do with all of my code) is to &quot;break out&quot; your inputs as the first thing you do in your code. Since the first entry in &lt;code&gt;s&lt;/code&gt; is your current position, you might try something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;currentPos = s(1);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You can break out the rest of the terms in a similar manner:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;currentSpeed = s(2);&#xA;referencePos = s_des(1);&#xA;referenceSpeed = s_des(2);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Also important to note is that these terms are &lt;strong&gt;not&lt;/strong&gt; a history of values. That is, you can't take &lt;code&gt;diff(currentPos)&lt;/code&gt; and get a speed. &lt;code&gt;currentPos&lt;/code&gt; is exactly that - the current position. Nothing more. Again, I would suggest you write the reference error equation and then take the first derivative of that. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-08-08T14:43:43.087" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16204" PostTypeId="2" ParentId="16156" CreationDate="2018-08-09T08:22:38.327" Score="1" Body="&lt;p&gt;A lot of gratitude for Chuck for investing the time and making me learn a lot. But the issue I had was more for a stupid reason that anything else. Having multiple catkin workspaces, I tend to source the terminal if and when required. While running ROS, I run the code above using a new terminal. I just did not source it and hence I couldn't locate the packages (and consequently services) in that workspace despite the ROS running the nodes and services from those packages.&lt;/p&gt;&#xA;" OwnerUserId="9833" LastActivityDate="2018-08-09T08:22:38.327" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16206" PostTypeId="2" ParentId="16043" CreationDate="2018-08-09T13:21:59.080" Score="0" Body="&lt;p&gt;According to the given picture, the car should move from start to goal and has to fulfill the constraints, that means the car must stay between the colored boxes. A plain RRT algorithm doesn't make much sense here, because the state space is huge. In each time step the car is able to move a small amount forward, a large amount and it can steer. If the sequence takes 20 seconds and the car can execute an action, each second two times, we will get a lot of possibilities.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem can be solved with an algorithm called Random-MMP, which is a multi-modal RRT pathplanner which is utilizing a motion model as heuristic. Explaining Random-MMP is easier if we assume only one mode. A mode is similar to a motion primtive which results into a sandbox like game. We call the mode “putcaronthemiddle”. If we are executing this mode interactively, the car gets the position direct on on the crossroad. The first RRT graph is generated until the mode, and the second graph is created from the mode to the goal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the case with only one mode, Random-MMP is equal to RRTconnect which is also growing two trees at the same time. But with more motion primitives the advantage will become more obvious. The general idea behind Random-MMP is called in the literature “task &amp;amp; motion planning grounding” and means to combine a geometric planner with a symbolic planner.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the end, i want to send some greetings – with respect to the admin of this forum – to Master yoda, Dr. Emmett Brown and Chuckie Sullivan.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2018-08-09T13:21:59.080" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16207" PostTypeId="2" ParentId="15522" CreationDate="2018-08-09T13:33:46.177" Score="0" Body="&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;You can think about Your 4in1 ESC as 4 separate ones. You just have to connect four signal pins to the corresponding signals in the flight controller, as You said. Mind that three signal cables have one pin connectors, that go just to signal pins of your flight controller, whereas fourth one is a three pin connector with second pin missing - this one has the ground connection.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Yes, you &lt;em&gt;should&lt;/em&gt; connect USB power rather than direct one. USB input is better filtrated, therefore it will be more secure for Your application than direct powering the Pi (see N. Staubs answer). It will be also easier to unplug in urgent cases, rather than directly soldered cable to the Pi.&lt;br&gt;&#xA;BEC installed on Your PDB is capable of supplying 5V @2A. It should power Your configuration without a problem.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="14673" LastActivityDate="2018-08-09T13:33:46.177" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16208" PostTypeId="1" CreationDate="2018-08-09T17:57:01.973" Score="0" ViewCount="207" Body="&lt;p&gt;I'm currently working on a project to generate a stable altitude and automatic control for a quadcopter&#xA;I'm using arduino as the flight controller &#xA;Ultrasonic sensor HC-SR04&#xA;MPU-6050 &#xA;However my project expected outcome is to set the quadcopter to fly( altitude hold) to 50 Cm above the ground. &#xA;My problem is I don't know which one of the sensors I have to use for PID set point can anyone help me with the code or the functions the I need to use ? &lt;/p&gt;&#xA;" OwnerUserId="20968" LastEditorUserId="20968" LastEditDate="2018-08-09T21:08:30.607" LastActivityDate="2021-04-26T17:03:55.357" Title="stable altitude quadcopter" Tags="&lt;quadcopter&gt;&lt;arduino&gt;&lt;control&gt;&lt;pid&gt;&lt;stability&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16210" PostTypeId="1" CreationDate="2018-08-09T20:28:29.230" Score="0" ViewCount="73" Body="&lt;p&gt;I am trying to implement the ekf_localization algorithm in page 217 (Table 7.3) of the &lt;a href=&quot;https://github.com/liulinbo/slam/blob/master/Probabilistic%20Robotics%20_Sebastian%20Thrun%20et%20al..pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;probabilistic robotics book by Thrun&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;From my previous &lt;a href=&quot;https://robotics.stackexchange.com/q/16200/20881&quot;&gt;post&lt;/a&gt;, I understand that I need to extract observed features on step 9 of the algorithm given in the book. So I am planning to use a line extraction algorithm (&lt;a href=&quot;https://github.com/kam3k/laser_line_extraction&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/kam3k/laser_line_extraction&lt;/a&gt;) to extract lines, then find the center point of the line and use that point as my observed feature in step 9.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Click &lt;a href=&quot;https://drive.google.com/file/d/1p7VGPu-dKzl7GbPNoXjfkNGjSREN8_6T/view?usp=sharing&quot; rel=&quot;nofollow noreferrer&quot;&gt;part1&lt;/a&gt; &lt;a href=&quot;https://drive.google.com/file/d/1esVpgqm579nX1R4R_PR3zqqXL09r5Cej/view?usp=sharing&quot; rel=&quot;nofollow noreferrer&quot;&gt;part2&lt;/a&gt; to see table 7.3. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, I am having trouble understanding what is the map (m) input.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since, the ekf_localization algorithm assumes that the map is already giving, and let’s say &lt;a href=&quot;https://drive.google.com/file/d/1XZSZPudF65y6_qKp2tigMxxBSerQL39u/view?usp=sharing&quot; rel=&quot;nofollow noreferrer&quot;&gt;figure 1&lt;/a&gt; is the actual map that my robot will navigate in. Does this mean, that &lt;em&gt;m&lt;/em&gt; consist of points in the world coordinate frame and that I can manually choose them? For example, the dots in figure one are my point landmarks that I provide for the algorithm (m = {(2,2), (2,4), 5,1), (5,2), (5,3), (6,2)}). If so, how many points should I provide?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Be great if you could help &lt;a href=&quot;https://robotics.stackexchange.com/users/19219/c-o-park&quot;&gt;C.O Park&lt;/a&gt;. &lt;/p&gt;&#xA;" OwnerUserId="20881" LastActivityDate="2019-01-07T06:51:53.517" Title="provide world map for ekf global localization problem" Tags="&lt;mobile-robot&gt;&lt;slam&gt;&lt;localization&gt;&lt;ekf&gt;&lt;data-association&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16211" PostTypeId="2" ParentId="16210" CreationDate="2018-08-09T22:29:39.407" Score="0" Body="&lt;p&gt;I can manually choose them? -&gt; Generally, that process is called as &quot;matching&quot; or &quot;data association&quot;. You can do it manually as well. The simplest solution is finding closest map point of your estimated point by Euclidian distance. You will find other probabilistic methods in the later part of the book.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One point is the minimum but could be unstable or not that accurate. (I am not sure actually. You need to double check.) Two points will be sufficient to determine distance and rotation. The more, the better. &lt;/p&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2018-08-09T22:29:39.407" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16213" PostTypeId="2" ParentId="16208" CreationDate="2018-08-10T11:40:48.737" Score="0" Body="&lt;p&gt;Typically quadrotor have a nested control approach.&#xA;That means one P(I)D loop controls the orientation (using IMU readings) and another one the position (using position sensors, e.g. ultrasound for altitude).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The attitude loop is executed faster than the position one and is assumed to ensure that the desired orientation is tracked reasonably well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The position loop is around the orientation one and provides desired orientation to be tracked based on the desired position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is necessary as lateral displacement of the quadrotor can only be achieved by changing the orientation so that total thrust is pointing in the direction of motion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your case, you might escape that as you describe only altitude (z-position) control, so you want to control the 3 orientation angle and and the altitude, which mean you can directly do as the quadrotor as 4 inputs. The only drawback is that you might see you quadrotor drifting around if you do not cits position in the horizontal plan.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2018-08-10T11:40:48.737" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16214" PostTypeId="2" ParentId="11228" CreationDate="2018-08-10T15:27:38.220" Score="0" Body="&lt;p&gt;This paper shows an approximation of the RMS error of the ZED camera as a function of distance.&lt;a href=&quot;https://ddd.uab.cat/pub/elcvia/elcvia_a2018v17n1/elcvia_a2018v17n1p1.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Depth Data Error Modeling of the ZED 3D Vision Sensor from Stereolabs&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="20974" LastEditorUserId="9720" LastEditDate="2018-08-10T15:56:33.820" LastActivityDate="2018-08-10T15:56:33.820" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16222" PostTypeId="2" ParentId="15835" CreationDate="2018-08-13T09:01:02.663" Score="1" Body="&lt;p&gt;There are many ways to interface an Arduino to BT LE.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are many BT shields for the Arduino including &lt;a href=&quot;https://store.arduino.cc/usa/ble-shield-2-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;the official one&lt;/a&gt; and &lt;a href=&quot;https://www.adafruit.com/product/2746&quot; rel=&quot;nofollow noreferrer&quot;&gt;Adafruit's&lt;/a&gt;. There are less expensive ones out there if you look.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're willing to do a bit more work, you could get a &lt;a href=&quot;https://www.adafruit.com/product/3400&quot; rel=&quot;nofollow noreferrer&quot;&gt;Raspberry Pi Zero-W&lt;/a&gt; (the 'W' is important!). The 'W' version of the Raspberry Pi Zero has built-in wireless and BT. I'd interface the two processors with I2C. You'd need to use a level shifter for the communications because the Pi is a 3v3 board while the Arduino is most likely a 5v device.&lt;/p&gt;&#xA;" OwnerUserId="19275" LastActivityDate="2018-08-13T09:01:02.663" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16223" PostTypeId="1" CreationDate="2018-08-13T11:27:09.037" Score="0" ViewCount="100" Body="&lt;p&gt;I am new to the robotics field and sensor fusion as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am trying to localize my robot using the data from my camera and the odometery through extended Kalman filter. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have the data offline, I synchronized them. However I have a trouble with constructing the $F, H$ matrices. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help?  &lt;/p&gt;&#xA;" OwnerUserId="20993" LastEditorUserId="9176" LastEditDate="2018-08-13T15:23:22.433" LastActivityDate="2019-04-11T11:02:40.517" Title="Robot localization using sensor fusion (How to model the Extended Kalman Filter)?" Tags="&lt;kalman-filter&gt;&lt;cameras&gt;&lt;odometry&gt;&lt;sensor-fusion&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16225" PostTypeId="2" ParentId="65" CreationDate="2018-08-13T18:31:21.403" Score="0" Body="&lt;p&gt;You might want to check out FRC 1114 Simbotics' website, especially  &lt;a href=&quot;http://www.simbotics.org/resources/mobility&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.simbotics.org/resources/mobility&lt;/a&gt; . The FTC team I coach has used that as a starting point for their own work. &lt;/p&gt;&#xA;" OwnerUserId="20994" LastActivityDate="2018-08-13T18:31:21.403" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16227" PostTypeId="2" ParentId="16223" CreationDate="2018-08-14T06:40:39.217" Score="1" Body="&lt;p&gt;This is the advice I gave to BOB but will be useful for you as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I recommend you to run an ekf slam tutorial code and analyse it. There is a perfect one for you: robots.ox.ac.uk/~SSS06/Website/index.html It is the simplest EKF SLAM but quite well coded and easy to read if you know matlab. I am sure the most of your implementational questions will be easily answered by looking at this code. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Practical 1 &amp;amp; 2 in the above link contains 90% of the things you need for implementing mono ekf slam or 2d ekf slam.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another material for theoretical aspect on slam is &lt;a href=&quot;http://www.isir.upmc.fr/UserFiles/File/clady_homepage/M2/C4BMobileRobots.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2018-08-14T06:40:39.217" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16228" PostTypeId="1" AcceptedAnswerId="16232" CreationDate="2018-08-14T23:22:10.443" Score="3" ViewCount="322" Body="&lt;p&gt;It's not technically robotics but:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've been trying to reproduce in Simulink a  &lt;a href=&quot;http://orbit.dtu.dk/files/98594729/Satdyn_mb_2010f.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;spacecraft attitude simulation using quaternions&lt;/a&gt;, and the kinematics and dynamics seem to work fine, however I'm having a bit of trouble with the controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I followed the model give in the 7th chapter which seems to be some sort of a PD controller. The control equation I used is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/xRuNT.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xRuNT.png&quot; alt=&quot;Control law&quot;&gt;&lt;/a&gt;&#xA;$q_e$ is the quaternion error,&#xA;$\omega_e$ is the rotation speed error&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But my results seems to be off.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With : Initial quaternion and rotation speed are $q_i = [0;0;0;1]$ and $ \omega_i = [0;0;0]$ &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I give a desired reference of $q = [0;1;0;1]$ and $ \omega = [0;0;0]$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I get the following response:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/y7A2N.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/y7A2N.jpg&quot; alt=&quot;Step Response&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;$q(1)$ and $q(3)$ are staying at zero as expected.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;But :&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;$q(2)$ is going towards -1 instead of 1 (As far as I understand the sign ambiguity does not explain this since q(4) is staying around 1)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;$q(4)$ is not maintaining at 1. (I am not sure if this is related to the fact that the controller is only a PD)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I've tried to add -1 gains but it doesn't seem to solve the problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why would the step response of q(2) be going to -1 instead of 1 ?&#xA;And why is q(4) decreasing ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For reference I've added the simulink model:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/6kvRq.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6kvRq.png&quot; alt=&quot;Simulink model&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And the &quot;Error quaternion&quot; block:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/xkZbQ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xkZbQ.png&quot; alt=&quot;Error block&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: (Response after &lt;a href=&quot;https://robotics.stackexchange.com/questions/16228/meaning-of-a-negative-step-response-with-quaternion/16232#16232&quot;&gt;Chuck's answer&lt;/a&gt;)&#xA;&lt;a href=&quot;https://i.stack.imgur.com/WEVyR.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/WEVyR.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="20997" LastEditorUserId="20997" LastEditDate="2018-08-15T16:37:25.197" LastActivityDate="2018-08-15T16:37:25.197" Title="Meaning of a negative step response with quaternion" Tags="&lt;control&gt;&lt;pid&gt;&lt;matlab&gt;&lt;simulation&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16229" PostTypeId="2" ParentId="16228" CreationDate="2018-08-15T00:08:05.717" Score="0" Body="&lt;p&gt;It looks like you are negating your reference inputs in the summing junctions.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2018-08-15T00:08:05.717" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16230" PostTypeId="1" AcceptedAnswerId="16231" CreationDate="2018-08-15T03:54:04.037" Score="1" ViewCount="175" Body="&lt;p&gt;Can anyone give a justification for using screws (twists, wrenches) instead of the traditional approach (rotation matrices, homogeneous transforms)? Even if screws are more compact, the situation gets complicated whenever we want to consider accelerations, so using screws in dynamics seems cumbersome for me.&lt;/p&gt;&#xA;" OwnerUserId="16304" LastEditorUserId="10414" LastEditDate="2021-01-25T16:22:15.883" LastActivityDate="2021-01-25T16:22:15.883" Title="Why using screws instead of homogeneous transforms in kinematics and dynamics?" Tags="&lt;kinematics&gt;&lt;dynamics&gt;&lt;screw-theory&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16231" PostTypeId="2" ParentId="16230" CreationDate="2018-08-15T07:02:02.753" Score="4" Body="&lt;p&gt;&lt;strong&gt;About why screw axes:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;According to Kevin Lynch in his video &lt;a href=&quot;https://www.youtube.com/watch?v=mvGZtO_ruj0&quot; rel=&quot;nofollow noreferrer&quot;&gt;of Twists&lt;/a&gt;, &lt;em&gt;&amp;quot;just like the time-derivative of a rotation matrix is not equivalent to the angular velocity, the time-derivative of a transformation matrix is not equivalent to the rigid-body velocity&amp;quot;&lt;/em&gt; (linear and angular).&lt;/p&gt;&#xA;&lt;p&gt;Also he mentions that, instead, &lt;em&gt;&amp;quot;any rigid-body velocity is equivalent to the instantaneous velocity around some screw axis&amp;quot;&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Checking his book: &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/1107156300&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;Modern Robotics: Mechanics, Planning and Control&lt;/a&gt; can explain this in more detail.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;About differences between Product of Exponentials (PoE) and Denavit-Hartenberg (DH)&lt;/strong&gt; (from comments) :&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Appendix C&lt;/strong&gt; of the same book explains the difference between product of exponentials (PoE) and Denavit-Hartenberg (DH). For a more complete description go to the book.&lt;/p&gt;&#xA;&lt;p&gt;Essentially:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Once a home position for the robot is defined and the base and end&#xA;effector frames set (which can be chosen arbitrarily), then the PoE&#xA;formula is defined.&lt;/li&gt;&#xA;&lt;li&gt;No link frames are needed in PoE.&lt;/li&gt;&#xA;&lt;li&gt;PoE is supposed to be more natural and intuitive.&lt;/li&gt;&#xA;&lt;li&gt;DH needs to have link frames set in a way that DH parameters exist,&#xA;they cannot be chosen arbitrarily.&lt;/li&gt;&#xA;&lt;li&gt;DH parameters can become ill-conditioned in some situations.&lt;/li&gt;&#xA;&lt;li&gt;PoE works with a joint value &lt;span class=&quot;math-container&quot;&gt;$theta$&lt;/span&gt;, while DH differentiates between prismatic&#xA;and revolute joints, assigning different variables to it (&lt;span class=&quot;math-container&quot;&gt;$d$&lt;/span&gt; and &lt;em&gt;&lt;span class=&quot;math-container&quot;&gt;$theta$&lt;/span&gt;&lt;/em&gt;).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;That said, one can choose to compute forward kinematics in both ways. It can also be proven that the PoE formula can be derived from the DH parameter representation.&lt;/p&gt;&#xA;&lt;p&gt;Hope this helps.&lt;/p&gt;&#xA;" OwnerUserId="19554" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2018-08-22T17:01:04.020" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16232" PostTypeId="2" ParentId="16228" CreationDate="2018-08-15T13:31:23.667" Score="5" Body="&lt;p&gt;Welcome to &lt;em&gt;Robotics&lt;/em&gt;, PaoloH! This is a &lt;strong&gt;fantastic&lt;/strong&gt; question for Robotics - It has some Matlab/Simulink, some control theory, some spatial (quaternion) representations, etc. Robotics is the place to come when your question spans multiple fields!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In looking at your question, the thing that I noticed is that your reference quaternion is $[0; 1; 0; 1]$. It is not a &lt;em&gt;unit quaternion&lt;/em&gt;, and I believe this may be your issue. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I looked over your block diagram, and I didn't see anything glaringly wrong there. As &lt;a href=&quot;https://robotics.stackexchange.com/a/16229/9720&quot;&gt;SteveO mentioned&lt;/a&gt;, the way you're treating the references is a little unusual, but the math all works out. I can't see what you're doing behind the &quot;reference quaternion&quot; or &quot;error quaternion&quot; blocks, but &lt;em&gt;let's take a look at that unit quaternion.&lt;/em&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Right now, the magnitude of your reference quaternion is &lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\sqrt{0^2 + 1^2 + 0^2 + 1^2} = \sqrt(2) \approx 1.414 \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to convert your reference quaternion to a &lt;em&gt;unit quaternion&lt;/em&gt;, then you divide each term of the quaternion by the magnitude of the quaternion, and you wind up with a reference &lt;em&gt;unit&lt;/em&gt; quaternion of:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;q_{\mbox{ref}} = \left[\begin{array}{ccc}&#xA;0 \\&#xA;\frac{1}{\sqrt{2}} \\&#xA;0 \\&#xA;\frac{1}{\sqrt{2}} \\&#xA;\end{array}\right] \\&#xA;q_{\mbox{ref}} \approx \left[\begin{array}{ccc}&#xA;0 \\&#xA;0.707 \\&#xA;0 \\&#xA;0.707 \\&#xA;\end{array}\right];&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can review your quaternion output plot and see that q(2) and q(4) are both moving toward a numeric value of ~0.7. The only real problem seems to be that the polarity on q(2) is wrong. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would guess your &quot;reference quaternion&quot; block is to make the skew symmetric matrix for the &quot;error quaternion&quot; block? The sign problem on your quaternion output could be hiding anywhere, but I'd double check the skew symmetric matrix (that it is actually skew symmetric; $\Omega^T == -\Omega$), and then I'd check the gains. When I said the math all works out on the reference handling, I double checked that just now and it works out for the $\omega$ speed handling. I can't actually tell for the quaternion handling. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typically, error is (reference - feedback), then you apply gains and sum the scaled error terms. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You have your error as (feedback - reference), and then you apply gains and negate the scaled error terms. BUT, it looks like, for quaternion error, you actually ARE taking (reference - feedback) but then you're still inverting it anyways. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If this isn't enough to get your question resolved, please edit your question to show what's going on under the &quot;Reference quaternion&quot; and &quot;error quaternion&quot; blocks. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-08-15T13:31:23.667" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16234" PostTypeId="1" CreationDate="2018-08-15T20:41:10.030" Score="4" ViewCount="231" Body="&lt;p&gt;Suppose I implement a particle filter with $n$ particles. This is a brief description of my understanding of a particle filter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the first step, I throw out $n$ particles some distance from my vehicle. I weight the particles according to some Gaussian distribution:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;w_{j,t} = \frac{e^{-X_{j,t}^{2}/2\sigma^{2}}}{\sum_{j=1}^n{e^-{X_{j,t}^{2}/2\sigma^{2}}}}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where $X_{j,t}$ is some (noisy) difference between a measurement taken at the vehicle and at the particle taken at time t. I then translate these particles with my vehicle (with some uncertainty) and do the same thing again, and the weights of these particles (the same particle pool) is&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;w_{j,t+1} = \frac{e^{-X_{j,t+1}^{2}/2\sigma^{2}}}{\sum_{j=1}^n{e^{-X_{j,t+1}^{2}/2\sigma^{2}}}} w_{j,t}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We resample if, according to wikipedia, $K = 1/\sum_j{w_{j,t}^2} &amp;lt; thresh$, where thresh is some threshold we pick. Resampling is done according to each particles weight (the probability of being chosen is given by that particle's weight).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is thus: if $K&amp;lt;thresh$, that means that some particles are highly weighted. So won't resampling give us a very degenerate list of the highest weighted particles, on average? Suppose this new, resampled population is composed of only n/2 different particles, 2 times each. How do you get n particles back?&lt;/p&gt;&#xA;" OwnerUserId="21008" LastEditorUserId="37" LastEditDate="2018-08-16T16:54:26.050" LastActivityDate="2021-04-03T01:01:00.060" Title="How should I understand sequential importance resampling in a particle filter?" Tags="&lt;kalman-filter&gt;&lt;particle-filter&gt;&lt;probability&gt;" AnswerCount="2" CommentCount="9" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16235" PostTypeId="2" ParentId="16234" CreationDate="2018-08-16T07:31:35.110" Score="0" Body="&lt;p&gt;One of the easiest techniques to get more particles back is to again spread particles all over the workspace (just like you did in the first iteration) and continue the filtering routine normally. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, this will help to the overall tracking procedure.&lt;/p&gt;&#xA;" OwnerUserId="19554" LastActivityDate="2018-08-16T07:31:35.110" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16236" PostTypeId="5" CreationDate="2018-08-16T09:15:52.083" Score="0" Body="&lt;p&gt;Most &lt;em&gt;servo&lt;/em&gt; questions should fall into the subcategories of either industrial &lt;a href=&quot;/questions/tagged/servomotor&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;servomotor&amp;#39;&quot; rel=&quot;tag&quot;&gt;servomotor&lt;/a&gt; or &lt;a href=&quot;/questions/tagged/rcservo&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;rcservo&amp;#39;&quot; rel=&quot;tag&quot;&gt;rcservo&lt;/a&gt; (with the synonym &lt;a href=&quot;/questions/tagged/hobbyservo&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;hobbyservo&amp;#39;&quot; rel=&quot;tag&quot;&gt;hobbyservo&lt;/a&gt;). Only questions which do not fall into these two sub-categories should use this tag.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Servos, in Robotics, are almost always motors that include a position sensor and a control circuit. A position demand is sent to the control circuit, which in turn drives the motor to the demanded position and holds that position even when outside forces try to move it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The motor would normally be a brushed or brushless DC electric motor, but might also be a pneumatic muscle, hydraulic ram, voice coil, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The control circuit might be implemented using a micro controller, a PLC, a decicated motion controller (possibly with an external power amplifier), or bespoke circuit (possibly with an Application Specific IC).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sub&gt; See &lt;a href=&quot;https://robotics.meta.stackexchange.com/q/170/37&quot;&gt;What should we do about servo questions?&lt;/a&gt; &lt;/sub&gt;&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="37" LastEditDate="2018-08-16T09:15:52.083" LastActivityDate="2018-08-16T09:15:52.083" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16237" PostTypeId="4" CreationDate="2018-08-16T09:15:52.083" Score="0" Body="The otherservos tag should only be used for questions which do not fall into the servomotor or rcservo (hobbyservo) tags." OwnerUserId="37" LastEditorUserId="37" LastEditDate="2018-08-16T09:15:52.083" LastActivityDate="2018-08-16T09:15:52.083" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16238" PostTypeId="1" CreationDate="2018-08-16T17:56:09.557" Score="0" ViewCount="127" Body="&lt;p&gt;This robot has 2 revolute joints in advance then one cylindrical joint, then one revolute joint, then another cylindrical joint, then three revolute joints at the end. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is no D-H table for that and I modeled it in Simulink with the help of Simscape. Now I need the D-H table for the controller part in the Matlab function. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that If the rotation of z-axis happens about its X-axis like joint number 2, I can show this change as an Alpha in my D-H table. As it illustrates, rotation of z-axis of revolute joint number 4 happened about the y-axis of TJ2. How can I show this kind of rotation of z-axis in my D-H table?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/8XwEo.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8XwEo.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/pfEGm.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/pfEGm.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/b0W5h.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/b0W5h.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="21016" LastEditorUserId="9720" LastEditDate="2018-08-17T12:58:49.727" LastActivityDate="2018-08-17T13:46:32.043" Title="D-H parameters verification" Tags="&lt;robotic-arm&gt;&lt;manipulator&gt;&lt;dh-parameters&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16239" PostTypeId="2" ParentId="16234" CreationDate="2018-08-16T19:47:39.950" Score="0" Body="&lt;p&gt;After thinking about the problem, I believe the answer lies in the noise. You translate your particle &quot;batch&quot; every time step, and re weight each time. If $K &amp;lt; thresh$, you resample, with potential degeneracy. However, you don't know the position of your vehicle with infinite precision, and so all particles get moved with some error, and this removes the degeneracy. The previously degenerate particles retain their &quot;influence&quot; because you have more particles in a certain region depending on the degeneracy. The more highly degenerate a particle, the more particles test the next area around where the previously degenerate particle would be &lt;em&gt;without noise&lt;/em&gt; to gain even greater precision.&lt;/p&gt;&#xA;" OwnerUserId="21008" LastActivityDate="2018-08-16T19:47:39.950" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16240" PostTypeId="1" CreationDate="2018-08-16T21:50:51.497" Score="2" ViewCount="110" Body="&lt;p&gt;The first node in the graph SLAM should be fixed. The famous &lt;a href=&quot;https://ieeexplore.ieee.org/document/5681215/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;a tutorial on graph based slam&quot;&lt;/a&gt; paper is showing that we can fix a node by adding identity matrix. Why adding identity to the Hessian of the specific node results in fixing that node? What is the theory behind it? Any good material to read?   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ZnNPO.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZnNPO.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2018-08-23T16:44:12.530" Title="Fixing the first node in Graph-based SLAM" Tags="&lt;slam&gt;&lt;computer-vision&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16241" PostTypeId="1" CreationDate="2018-08-17T02:28:32.067" Score="1" ViewCount="60" Body="&lt;p&gt;What is the definition of loop closure in Graph Slam?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ref: &lt;a href=&quot;http://robots.stanford.edu/papers/thrun.graphslam.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Graph Slam&lt;/a&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The theory of Graph Slam define here but I think there is no hints about loop closure. I give this reference for review purpose.&lt;/p&gt;&#xA;" OwnerUserId="20610" LastActivityDate="2019-04-20T00:02:55.960" Title="Lost on Graph slam's loop cloursure" Tags="&lt;mobile-robot&gt;&lt;slam&gt;&lt;odometry&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16242" PostTypeId="2" ParentId="16238" CreationDate="2018-08-17T13:46:32.043" Score="1" Body="&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=rA9tm0gTln8&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here is a video&lt;/a&gt; on what the DH parameters are that I highly recommend to everyone that wants to learn about them. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think I understand your question, and the trouble you're having is coming from the fact that your frames are not aligned correctly per the DH standard. Since they're not aligned correctly, your terms are not working out right.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The important thing is that, as mentioned around 0:42 in the video, &quot;The DH parameters are derived from the &lt;strong&gt;common normal&lt;/strong&gt; between the z axes. The common normal is &lt;strong&gt;orthogonal to both vectors&lt;/strong&gt; and is also the shortest line between them.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the problem when you ask,&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;As it illustrates, rotation of z-axis of revolute joint number 4 happened about the y-axis of TJ2. How can I show this kind of rotation of z-axis in my D-H table?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;is that you &lt;em&gt;can't&lt;/em&gt;. Your frames are drawn incorrectly; the &lt;strong&gt;x-axis&lt;/strong&gt; should be orthogonal to both axes. Instead, in the case of TJ2, $x_{TJ2}$ is &lt;em&gt;parallel&lt;/em&gt; to $z_3$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In fact, in looking over your diagram again, this looks like a common problem for all of your joints - each of your x axes is parallel to the z-axis of the previous joint. You need to redraw your frames and then you can work out the DH parameters. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-08-17T13:46:32.043" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16243" PostTypeId="1" AcceptedAnswerId="16244" CreationDate="2018-08-17T16:21:35.773" Score="2" ViewCount="220" Body="&lt;p&gt;I am going to buy this motor :-&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://robokits.co.in/motors/encoder-dc-servo/faulhaber-coreless-17w-encoder-motor-120rpm-pid-dc-servo-drive?zenid=im3bp6grppt2f2ofdo2r6pq5c2&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://robokits.co.in/motors/encoder-dc-servo/faulhaber-coreless-17w-encoder-motor-120rpm-pid-dc-servo-drive?zenid=im3bp6grppt2f2ofdo2r6pq5c2&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The datasheet of its driver:-&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://robokits.download/documentation/Serial_DC_Encoder_Servo_Driver.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://robokits.download/documentation/Serial_DC_Encoder_Servo_Driver.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know how will I be able to control this motor with Arduino . &#xA;I know about the values that control the position and speed of the motor by reading the datasheet but the part where Arduino will be used to send these values is still unclear.I know about serial communication but I have only used it for communication between PC and Arduino.&#xA;And can I control more than 1 of these motors with one Arduino ?&lt;/p&gt;&#xA;" OwnerUserId="20888" LastActivityDate="2018-08-17T17:40:18.957" Title="Controlling a dc servo with serial communication" Tags="&lt;arduino&gt;&lt;motor&gt;&lt;serial&gt;&lt;driver&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16244" PostTypeId="2" ParentId="16243" CreationDate="2018-08-17T17:40:18.957" Score="2" Body="&lt;p&gt;You need to read and understand that datasheet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This board does not have addressing, so without additional hardware you can only have one per serial port.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a demonstration, use a USB-Serial cable connected between the motor controller and a computer. You can use any serial program you have to communicate with the motor controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Examples of serial programs include hyperterm and miniterm. You need to set the serial settings for this connection to 38400 baud, 8 bits, no parity, ad one stop-bit. The motor controller is preset for this connection.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then you can send commands.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To use this board to control motors from the Arduino, you will need to use either the Serial class or the SoftSerial class. You should be able to use multiple SoftSerial instances to control these motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You would need to connect between the pins of the serial port of the Arduino and the motor controller. You would need to create the serial connection with the same parameters as above. Then you have to send a command to the board, always remembering to terminate the command with a carriage return. Since I don't have one of these boards, I don't know if it expects a &quot;\n&quot;, &quot;\r&quot; or some combination.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is an interesting board, but there are too many limitations to see it being any more than a toy, in my opinion. It wouldn't have been difficult to add a few features to make it a usable tool.&lt;/p&gt;&#xA;" OwnerUserId="19275" LastActivityDate="2018-08-17T17:40:18.957" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16245" PostTypeId="1" AcceptedAnswerId="16246" CreationDate="2018-08-17T21:19:40.887" Score="0" ViewCount="51" Body="&lt;p&gt;i have a nomad 4wd rover kit but i saw that motors doesn't have encoders. But to use odometry with ros i need it. I cannot found any suggestion on google search, so i ask here if someone could route me to some solutions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;thanks&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: Sorry, i forget to add the kit link: &lt;a href=&quot;https://www.servocity.com/nomad&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.servocity.com/nomad&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="21019" LastEditorUserId="21019" LastEditDate="2018-08-18T11:05:19.947" LastActivityDate="2018-08-18T11:05:19.947" Title="Adding encoders to Nomad 4WD" Tags="&lt;ros&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16246" PostTypeId="2" ParentId="16245" CreationDate="2018-08-17T22:11:31.023" Score="0" Body="&lt;p&gt;This is the &lt;a href=&quot;https://www.servocity.com/nomad&quot; rel=&quot;nofollow noreferrer&quot;&gt;Actobotics Nomad chassis kit&lt;/a&gt;, I assume.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did this with another Actobotics kit. Buy two extra motors of the same type with encoders, and use these for the rear motors. Get the ones with the same gearbox.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.servocity.com/motors-actuators/gear-motors/heavy-duty-gear-motors/premium-planetary-gear-motors&quot; rel=&quot;nofollow noreferrer&quot;&gt;These are the motors that come with the kit.&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.servocity.com/motors-actuators/gear-motors/heavy-duty-gear-motors/premium-planetary-gear-motors&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here are the original motors.&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.servocity.com/motors-actuators/gear-motors/heavy-duty-gear-motors/premium-planetary-gear-motors-with-encoders&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here are the ones with encoders.&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19275" LastActivityDate="2018-08-17T22:11:31.023" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16250" PostTypeId="1" CreationDate="2018-08-19T13:21:51.927" Score="1" ViewCount="224" Body="&lt;p&gt;Differential drive robot with 4 wheels, &#xA;If for example the back wheels were using different motors than the front ones ( ie : running at a faster/slower speed )&#xA;in general, would that generate more moving ( tourqe/force ) than having free ruining wheels instead ?&#xA;or using free running wheels would be a better option because of the slip related to the slower wheels ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note : its a sumo bot&lt;/p&gt;&#xA;" OwnerUserId="21029" LastActivityDate="2018-08-20T14:20:21.780" Title="4 Wheel Differential Drive Robot with different speeds" Tags="&lt;wheeled-robot&gt;&lt;differential-drive&gt;&lt;wheel&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16252" PostTypeId="1" CreationDate="2018-08-20T06:58:35.790" Score="2" ViewCount="3197" Body="&lt;p&gt;I am using servo motor model no. MG995 with Arduino. I don't know the current it consumes while powered on and while lifting a 10 kg of weight. I am currently using a 5 V, 1 A power supply with one motor but in future I need to connect 6 motors to single supply.&lt;/p&gt;&#xA;" OwnerUserId="21033" LastEditorUserId="9720" LastEditDate="2018-08-21T13:18:59.117" LastActivityDate="2020-02-16T07:18:53.967" Title="Servo motor power consumption issue" Tags="&lt;arduino&gt;&lt;rcservo&gt;&lt;current&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16253" PostTypeId="1" AcceptedAnswerId="16254" CreationDate="2018-08-20T07:14:34.603" Score="0" ViewCount="40" Body="&lt;p&gt;In the Literature I have read so far, I saw RRT star was running in multiple loops to converge to a better solution ( near optimal). I was wondering how I could implement the same, as most pseudocodes don't explain that part.&lt;/p&gt;&#xA;" OwnerUserId="20789" LastActivityDate="2018-08-20T07:59:17.183" Title="Converging to better solutions by running RRTstar for multiple Iterations" Tags="&lt;algorithm&gt;&lt;path-planning&gt;&lt;autonomous-car&gt;&lt;rrt&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16254" PostTypeId="2" ParentId="16253" CreationDate="2018-08-20T07:59:17.183" Score="0" Body="&lt;p&gt;RRT* indeed runs in multiple iterations to converge to an asymptotically-optimal solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In simple words: you could understand RRT* as an RRT, but with: &lt;strong&gt;1)&lt;/strong&gt; the stopping criteria being time/iterations instead of reaching the goal node and &lt;strong&gt;2)&lt;/strong&gt; with an extra &lt;em&gt;re-wiring&lt;/em&gt; step that chooses, inside of a neighborhood of radius &lt;em&gt;r&lt;/em&gt; from your &lt;em&gt;already wired&lt;/em&gt; sample, the neighbor that can see its path cost more reduced, and attempts to connect to it. With this last methodology you get more &lt;em&gt;styled&lt;/em&gt; branches which lead faster to the goal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here you got a video that explains &lt;a href=&quot;https://www.youtube.com/watch?v=qFc6g9KrnOk&quot; rel=&quot;nofollow noreferrer&quot;&gt;RRT&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The same author makes another video on &lt;a href=&quot;https://www.youtube.com/watch?v=JM7kmWE8Gtc&quot; rel=&quot;nofollow noreferrer&quot;&gt;RRT*&lt;/a&gt; (in particular the &lt;em&gt;re-wiring&lt;/em&gt; process).&lt;/p&gt;&#xA;" OwnerUserId="19554" LastActivityDate="2018-08-20T07:59:17.183" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16255" PostTypeId="2" ParentId="16252" CreationDate="2018-08-20T07:59:34.200" Score="1" Body="&lt;p&gt;From the TowerPro website from the &lt;a href=&quot;http://www.towerpro.com.tw/product/mg995/&quot; rel=&quot;nofollow noreferrer&quot;&gt;MG995&lt;/a&gt;: &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;Specification&lt;/strong&gt;:&lt;/p&gt;&#xA;  &#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;Weight: 55 g&lt;/li&gt;&#xA;  &lt;li&gt;Dimension: 40.7×19.7×42.9 mm&lt;/li&gt;&#xA;  &lt;li&gt;Stall torque: 9.4 kg/cm (4.8v); 11 kg/cm (6 V)&lt;/li&gt;&#xA;  &lt;li&gt;Operating speed: 0.20 sec/60° (4.8 V); 0.16 sec/60° (6.0 V)&lt;/li&gt;&#xA;  &lt;li&gt;Operating voltage: 4.8~ 6.6 V&lt;/li&gt;&#xA;  &lt;li&gt;Gear Type: Metal gear&lt;/li&gt;&#xA;  &lt;li&gt;Temperature range: 0- 55 °C&lt;/li&gt;&#xA;  &lt;li&gt;Dead band width: 1 µs&lt;/li&gt;&#xA;  &lt;li&gt;servo wire length: 32 cm&lt;/li&gt;&#xA;  &lt;li&gt;Current draw at idle 10 mA&lt;/li&gt;&#xA;  &lt;li&gt;No load operating current draw 170 mA&lt;/li&gt;&#xA;  &lt;li&gt;Stall current draw 1200 mA&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;From the stall torque at 6&amp;nbsp;V it can lift a maximum of 11 kg at 1&amp;nbsp;cm from the axis of the servo, so your load of 10&amp;nbsp;kg would be on the limit. THe MG995 may not be sufficient.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, as the stall current of one servo is 1200 mA you probably need a bigger power supply, or rather one that is capable of supplying more current.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even with no load, six servos, when operating, will consume (6 x 0.17 =) 1.02 A, so again you will need a bigger supply.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://www.towerpro.com.tw/product/mg996r/&quot; rel=&quot;nofollow noreferrer&quot;&gt;MG996R&lt;/a&gt; has a similar specification:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;Specification&lt;/strong&gt;:&lt;/p&gt;&#xA;  &#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;Weight: 55 g&lt;/li&gt;&#xA;  &lt;li&gt;Dimension: 40.7×19.7×42.9 mm&lt;/li&gt;&#xA;  &lt;li&gt;Stall torque: 9.4 kg/cm (4.8 V); 11 kg/cm (6.0 V)&lt;/li&gt;&#xA;  &lt;li&gt;Operating speed: 0.19 sec/60° (4.8 V); 0.15 sec/60° (6.0 V)&lt;/li&gt;&#xA;  &lt;li&gt;Operating voltage: 4.8~ 6.6 V&lt;/li&gt;&#xA;  &lt;li&gt;Gear Type: Metal gear&lt;/li&gt;&#xA;  &lt;li&gt;Temperature range: 0- 55 °C&lt;/li&gt;&#xA;  &lt;li&gt;Servo Plug: JR (Fits JR and Futaba)&lt;/li&gt;&#xA;  &lt;li&gt;Dead band width: 1 µs&lt;/li&gt;&#xA;  &lt;li&gt;Servo wire length: 32 cm&lt;/li&gt;&#xA;  &lt;li&gt;Current draw at idle 10 mA&lt;/li&gt;&#xA;  &lt;li&gt;No load operating current draw 170 mA&lt;/li&gt;&#xA;  &lt;li&gt;Stall current draw 1400 mA&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So you probably need to rethink your choice of servo.&lt;/p&gt;&#xA;" OwnerUserId="9176" LastActivityDate="2018-08-20T07:59:34.200" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16256" PostTypeId="1" CreationDate="2018-08-20T08:08:53.683" Score="5" ViewCount="585" Body="&lt;p&gt;I want to control a quadrotor with a Python script and run the simulation as fast as my laptop can, not only in real time. I've modified my world and now the simulation runs with 7-10 real time factor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My problem is that after acting I want the physics to run for a determinate amount of simulation time, but if I do &lt;code&gt;time.sleep(steptime)&lt;/code&gt; the sleep is in real time, which is 7-10 times simulation time. So I need to know the real time factor in Python to divide the sleep time. Is there a way to get it?&lt;/p&gt;&#xA;" OwnerUserId="21034" LastEditorUserId="18870" LastEditDate="2019-04-20T17:18:46.263" LastActivityDate="2021-05-09T23:05:45.683" Title="Wait simulation time in a non realtime ROS simulation in Python" Tags="&lt;quadcopter&gt;&lt;ros&gt;&lt;simulation&gt;&lt;python&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16258" PostTypeId="2" ParentId="16250" CreationDate="2018-08-20T14:20:21.780" Score="1" Body="&lt;p&gt;Dynamic friction is always lower than static friction. If you are purposefully putting your wheels into a slip mode, then you are putting the wheels into a condition where they have &lt;strong&gt;less&lt;/strong&gt; traction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For maximum pushing/stopping power, you would want your wheels torqued to the point just &lt;em&gt;before&lt;/em&gt; they begin to slip. This is what anti-lock brakes do; an ABS system &lt;em&gt;reduces&lt;/em&gt; braking pressure to prevent the wheels from locking up, which maximizes braking power. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-08-20T14:20:21.780" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16259" PostTypeId="2" ParentId="16146" CreationDate="2018-08-20T14:41:25.100" Score="6" Body="&lt;p&gt;I realize this question already has an accepted answer, but I'd like to provide some additional input. The question of sensor fusion is a good one, but, depending on the application, you don't typically want to &quot;convert&quot; (i.e., integrate twice) the IMU to obtain xyz position. Frankly, in my experience, the best way to approach fusing GPS and IMU data for a mobile robot (quadcopter, unmanned ground vehicle, etc) is already provided within the EKF framework:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Identify a plant process model and associated process noise for the robot.  &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;2a. Identify an observation model and associated measurement noise for the GPS&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2b. Identify an observation model and associated measurement noise for the IMU&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;tl;dr:&lt;/strong&gt; to answer your specific question: you'd be doing neither! The IMU provides acceleration corrections to the process model, and the GPS provides position corrections to the process model. The sensor fusion aspect is more or less a weighted average based on the process noise and measurement noise. Sure, a purely kinematic process model might act as a double integrator, but that's not the only choice of process models. It might sound like semantics, but I think it represents a fundamental misunderstanding of the Kalman filter to speak in terms of &quot;converting&quot; the IMU to provide xyz corrections.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additional thoughts:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The plant process model can be a simple kinematic model (constant velocity or constant acceleration) or a sophisticated dynamical model. It is generally best to start simple and add complexity later if required. Process model are typically developed from first principles (physics), but you can probably find some decent ones online if you get stuck. The same is true for observation models for a GPS and IMU sensors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The measurement noise statistics can be found from the manufacturer data sheets or experimentally.&#xA;[Aside: if you're working with real instruments, it's best to try to get your own data on the measurement noise. If a static test will give you representative data, set the sensor on the bench, collect a bunch of data, and determine the measurement noise statistics. Pro tip: the std dev of the noise (aka sigma) often varies inversely with the square root of the sampling frequency, e.g., sampling at 10Hz instead of 1KHz reduces sigma by an order of magnitude. You can see this mathematically by working out the expected values.]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With a GPS and IMU, a more sophisticated dynamical plant process model will likely just improve the estimate of linear velocity. Depending on the update rate of your GPS and how much you care about your velocity estimate, the added complexity of a dynamic model may be unnecessary for your given application. If you have a good linear-velocity sensor, a dynamic model is rarely required. Many papers have been written and accepted to respected journals and conferences with kinematic process models. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;[Aside: The difficulty of dynamic models is that their accuracy depends on knowing: 1. the structure of the model. 2. the parameters (mass, drag, etc) used in the model. The structure of the model can often be developed from first principles, but parameter estimation can be difficult even for known model structures.]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &quot;black art&quot; of the EKF is the choice of process noise. In the linear case, Kalman proved that the KF will converge regardless of the noise (we understand how to propogate Gaussian distributions through linear systems), but the same isn't true for the nonlinear extension. There are many papers written on the subject of estimating process noise for nonlinear models. This still an area of active research. My advice is just to play with the process noise until you achieve acceptable performance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also: the paper linked in the accepted answer is certainly interesting, but far from the simplest approach. Based on a quick scan, the purpose of that paper is to report a new method/approach for real-time rejection of bad data from the IMU or GPS based on fuzzy logic and &quot;contextual variables.&quot; NB: Again, in the context of EKFs, &quot;bad data&quot; means data inconsistent with the expected measurement noise. This is an important problem to address because the accuracy (and even stability) of the EKF hinges on the idea that measurement data from the instruments have the noise characteristics that you specified.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a key important point because it means any additional instrument, no matter how bad the noise is, won't make the state estimate worse PROVIDED the measurement noise used in the EKF matches the noise from the actual measured data. NB. this can be proven mathematically for the KF, but not for the EKF, though it works as expected the vast majority of the time with reasonable process noise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instrument failure and outlier rejection are worth investigating and understanding...after you've already implemented an EKF that can handle asynchronous measurements and a bias in the IMU measurement. Start simple and add complexity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this helps.&lt;/p&gt;&#xA;" OwnerUserId="21036" LastEditorUserId="21036" LastEditDate="2019-06-17T17:38:58.563" LastActivityDate="2019-06-17T17:38:58.563" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16260" PostTypeId="2" ParentId="1047" CreationDate="2018-08-20T15:39:22.513" Score="1" Body="&lt;p&gt;I'm biased (since I have TA'd his course twice), but I think Prof. Marin Kobilarov's derivation of the KF/EKF is far superior to Thrun's. I have read almost every book on KF/EKFs mentioned in previous answers, and I think Marin's lecture notes are excellent for the theoretical aspects of optimal state estimation. Thrun's presentation is far from the worst, though. The beauty of Marin's approach is that he develops the KF measurement updates from an optimization standpoint: he starts with a simple least-squares approach and goes through the necessary and sufficient conditions for optimality for both linear and nonlinear measurement models. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The course website also has some easily-digestible matlab code: &lt;a href=&quot;https://asco.lcsr.jhu.edu/en530-603-f2017-applied-optimal-control/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://asco.lcsr.jhu.edu/en530-603-f2017-applied-optimal-control/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lecture 10 is specifically about optimal state estimation, namely the KF/EKF: &lt;a href=&quot;https://asco.lcsr.jhu.edu/docs/EN530_603_F2015/lecture10.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://asco.lcsr.jhu.edu/docs/EN530_603_F2015/lecture10.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS. During my orals/quals, I was asked to derive the EKF by hand from memory. If I hadn't learned the above approach, which I find very intuitive, I think I would have been lost in mathematical minutia. As always, YMMV.&lt;/p&gt;&#xA;" OwnerUserId="21036" LastEditorUserId="21036" LastEditDate="2018-08-20T19:13:06.643" LastActivityDate="2018-08-20T19:13:06.643" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16261" PostTypeId="2" ParentId="16252" CreationDate="2018-08-21T08:55:24.993" Score="2" Body="&lt;p&gt;Firstly consider the servo torque limitations, if loading increase from specified limit the it start stalling and even can gear get fail and burn servo itself, possibly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And another concern is with power supply. You are using metalgear servo with power supply of just 1 A.&#xA;As per the specification provided by greenonline (in previous answer), the servo needs 1.2 A at stall condition. You require higher ampere power supply. Your setup will work with ideal no load condition but not on loaded condition.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should not power servo directly form the Arduino. You should design the driver circuit or board for power supply and common both ground of the Arduino board and driver circuit. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And it is recommended that you should use multiple power supply and divide the power supply to the group of servos. It will help in stabilizing your working and power. High ampere drawn by one servo does not affect the other of power supply is separated. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have higher power supply system in which you can control the voltage and ampere both then you can go for single supply also. Considering 1.2 A stall current and all 6 servo are same then you should supply 1.2×6 = 7.2 A for working without any problem.&lt;/p&gt;&#xA;" OwnerUserId="19034" LastEditorUserId="18235" LastEditDate="2018-08-21T16:05:44.677" LastActivityDate="2018-08-21T16:05:44.677" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16262" PostTypeId="2" ParentId="16099" CreationDate="2018-08-21T16:11:04.253" Score="1" Body="&lt;p&gt;As mentioned in the previous answer, many small, low-cost underwater (and aerial) vehicles use a magnetic compass. You need a good procedure for both hard-iron and soft-iron calibration of your magnetometer. Constantly having to calibrate them sucks, but they're way less expensive than a FOG. With good calibration, you should be able to achieve adequate performance with the magnetometer. If you're operating indoors in a tank, you should be able to rely on visual based odometry and other approaches that have limited applicability in the open ocean. DVL-based dead-reckoning has worked just fine, but, if you don't have a DVL, you'll get much better performance with an EKF...but your IMU may provide a KF output (I know the microstrain does). Also, instead of shielding the compass, you might try shielding the external sources of electro-magnetic interference.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Giancarlo Troni's paper on bias calibration is probably worth a read: &lt;a href=&quot;https://ieeexplore.ieee.org/document/6942597/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://ieeexplore.ieee.org/document/6942597/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your AUV has a DVL, Giancarlo spent much of his PhD working on DVL-AHRS alignment and calibration:&#xA;&lt;a href=&quot;https://ieeexplore.ieee.org/document/6405003/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://ieeexplore.ieee.org/document/6405003/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://ieeexplore.ieee.org/document/6094942/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://ieeexplore.ieee.org/document/6094942/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="21036" LastActivityDate="2018-08-21T16:11:04.253" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16264" PostTypeId="2" ParentId="15439" CreationDate="2018-08-22T12:42:02.473" Score="0" Body="&lt;p&gt;I don't see any sensors being states that can detect the obstacles.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;it has an indoor GPS system, IMU, and cliff sensors.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Indoor GPS and IMU cannot detect the obstacles. The cliff sensor can only sense if the robot is going to fall off the table that if it's near the table edge. None of them can tell if an obstacle is coming into the robot's path. So, first need to have a sensor that can accomplish this. You can look into LIDARs(&lt;em&gt;costly&lt;/em&gt;) or cheap ultrasonic sensors depending upon your task.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now once the surrounding obstacle data is available, an algorithm for path planning comes into play.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.wikiwand.com/en/Theta*&quot; rel=&quot;nofollow noreferrer&quot;&gt;Theta *&lt;/a&gt; can be used for path planning if the initial map is unknown. Check out this video to see it in action.&#xA;Hope it helps.&lt;/p&gt;&#xA;" OwnerUserId="16958" LastEditorUserId="16958" LastEditDate="2018-08-22T14:14:16.060" LastActivityDate="2018-08-22T14:14:16.060" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16266" PostTypeId="1" CreationDate="2018-08-22T14:54:33.490" Score="2" ViewCount="1053" Body="&lt;p&gt;I am reading the paper&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;On-Manifold Preintegration for Real-Time&#xA;Visual-Inertial Odometry&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is one paragraph about IMU model.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/F9GIh.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/F9GIh.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have two questions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first one: &#xA;An IMU commonly includes a 3-axis accelerometer and a&#xA;3-axis gyroscope and allows measuring the rotation rate and&#xA;the acceleration of the sensor &lt;strong&gt;&lt;em&gt;with respect to an inertial frame&lt;/em&gt;&lt;/strong&gt;&#xA;what does an inertial frame mean?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second one:&#xA;The vector(the second quantity from the first equation) is the instantaneous angular velocity of B &lt;strong&gt;&lt;em&gt;relative&#xA;to W expressed in coordinate frame B&lt;/em&gt;&lt;/strong&gt;.&#xA;The sentence is difficult for me, especially the highlighted part.&lt;/p&gt;&#xA;" OwnerUserId="15460" LastActivityDate="2018-08-22T17:02:51.327" Title="angular velocity output of IMU" Tags="&lt;imu&gt;&lt;gyroscope&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16267" PostTypeId="2" ParentId="16266" CreationDate="2018-08-22T17:02:51.327" Score="3" Body="&lt;p&gt;1) An &lt;a href=&quot;https://en.wikipedia.org/wiki/Inertial_frame_of_reference&quot; rel=&quot;nofollow noreferrer&quot;&gt;inertial frame&lt;/a&gt; is one in which a free particle travels in a straight line at constant speed, or is at rest. Practically speaking, you usually check if a frame is inertial or not by characterizing its motion w.r.t a reference inertial frame: all inertial frames are in a state of constant, rectilinear motion w.r.t one another.&#xA;In the context of visual-inertial odometry, your typical inertial frame is a local 'world' frame (W) attached to the surface of the earth where you are doing your experiment. (Note that it is only inertial because you neglect effects due to earth's rotation.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) Your text is missing the attached 'figure 2' but we can guess that frame 'B' is attached to your IMU. &#xA;In 3D, the rotation motion of a body (B) w.r.t to a fixed frame (W) can be characterized at any instant t by an instantaneous axis of rotation, which is a vector. This is a consequence of Euler's rotation theorem. To compute this vector, see &lt;a href=&quot;https://en.wikipedia.org/wiki/Angular_velocity#Angular_velocity_vector_for_a_frame&quot; rel=&quot;nofollow noreferrer&quot;&gt;this link&lt;/a&gt;.&#xA;Finally, this vector is obviously expressed differently in (B) and (W) since the two frames are rotated w.r.t one another: the vector will have different coordinates in both. Hence the addition of 'expressed in coordinate frame B'.&lt;/p&gt;&#xA;" OwnerUserId="5610" LastActivityDate="2018-08-22T17:02:51.327" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16268" PostTypeId="2" ParentId="16256" CreationDate="2018-08-22T19:39:33.913" Score="0" Body="&lt;p&gt;@kNo the proper way to use time in ROS is generally to use the &lt;a href=&quot;http://wiki.ros.org/roscpp/Overview/Time&quot; rel=&quot;nofollow noreferrer&quot;&gt;ros::Time&lt;/a&gt; abstraction and the &lt;a href=&quot;http://wiki.ros.org/Clock#Using_Simulation_Time_from_the_.2BAC8-clock_Topic&quot; rel=&quot;nofollow noreferrer&quot;&gt;/clock topic&lt;/a&gt;. This way you can use the same program with simulated and real time. Your simulator program should be the one publishing on &lt;code&gt;/clock&lt;/code&gt;.&#xA;Trying to access the real time factor is unnecessarily complicated. &lt;/p&gt;&#xA;" OwnerUserId="5610" LastActivityDate="2018-08-22T19:39:33.913" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16269" PostTypeId="2" ParentId="16241" CreationDate="2018-08-22T20:21:23.777" Score="1" Body="&lt;p&gt;The GraphSLAM algorithm from the paper you linked does not have a loop closure mechanism in the sense of a &lt;em&gt;dedicated&lt;/em&gt; procedure for finding correspondences between landmarks observed at different nodes separated by an arbitrary distance/time interval. GraphSLAM effectively tests every non-corresponding pair of features/landmarks in turn to look for new correspondences.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it seems inefficient, note that it is an offline SLAM algorithm: its purpose is to estimate the posterior probability over the entire path along with the map, instead of just the current pose. Offline algorithms are typically less concerned with computational or memory constraints as they can sometimes run on more powerful computers and can take longer to run.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The paper also notes just above the algorithm (Table 10) that &quot;The inner loop of this algorithm can be made more efficient by selective probing of feature pairs m_j, m_k, [...]&quot;. Such a 'selective probing' would - at least naively - be done using some form of nearest neighbour search to test 'close' features before 'far' features for correspondence. It still wouldn't be a dedicated procedure so I wouldn't call it 'Loop closure', but it gets closer to the idea.&lt;/p&gt;&#xA;" OwnerUserId="5610" LastActivityDate="2018-08-22T20:21:23.777" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16270" PostTypeId="2" ParentId="11683" CreationDate="2018-08-23T01:50:01.820" Score="1" Body="&lt;p&gt;Making them parallel is beneficial for reducing distortion after a rectification. We usually rectify two images for a fast matching. If speed is not your concern you can skip the rectification stage.&lt;/p&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2018-08-23T01:50:01.820" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16272" PostTypeId="1" CreationDate="2018-08-23T14:17:22.383" Score="2" ViewCount="571" Body="&lt;p&gt;I'm experimenting with SLAM for the first time. I am using ROS on a Turtlebot3, which has a Raspberry Pi and a single Lidar sensor, &lt;a href=&quot;https://www.robotshop.com/media/files/pdf/robotis-360-laser-distance-sensor-lds-01-datasheet.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Robotis LDS-01&lt;/a&gt;. I am running a configuration with three computers, the Pi, a computer running just Roscore and a computer where I do my development. I have a very simple maze set up covering around a 3x3M carpeted area. I am using gmapping to make the map. As I am a remote worker, I've not had an &quot;expert&quot; looking over my shoulder although I am very active on boards to ask questions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My experience with SLAM is that I am not impressed with the results so far.  I've been following &lt;a href=&quot;http://emanual.robotis.com/docs/en/platform/turtlebot3/navigation/#navigation&quot; rel=&quot;nofollow noreferrer&quot;&gt;these instructions from Robotis&lt;/a&gt; as a starting point.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I run gmapping and traverse the maze completely and do get a map that is pretty accurate although the resolution is I think 5x5cm by default so its a little rough. Its super simple. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But then I save the map and run navigation, using move_base, amcl and map_server. To my eye the results are not impressive:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;when I use RVize to give the initial pose hint, the map is not particularly well aligned with the results of the lidar&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;When I ask to navigate it will get there but throwing lots of errors in the console. See below for a sampling of the errors&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;the robot moves in fits and starts. Sometimes stopping for a few seconds, sometimes repeating the same motion over and over again, and in general not being smooth.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Questions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Does it sounds like I have a setup problem fundamentally?&lt;/li&gt;&#xA;&lt;li&gt;Is this just what you get when you use just LIDAR?&lt;/li&gt;&#xA;&lt;li&gt;Is my maze too small?&lt;/li&gt;&#xA;&lt;li&gt;Is this because I need to &quot;tune&quot; my SLAM?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;Sampling of Errors from slam&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ roslaunch turtlebot3_navigation turtlebot3_navigation.launch map_file:=$HOME/map.yaml&#xA;&#xA;[INFO] [1535381131.875583266]: Got new plan&#xA;[ INFO] [1535381132.075471469]: Got new plan&#xA;[ WARN] [1535381132.180568313]: DWA planner failed to produce path.&#xA;[ INFO] [1535381132.275184519]: Got new plan&#xA;[ INFO] [1535381132.475446249]: Got new plan&#xA;[ WARN] [1535381132.575722364]: Rotate recovery behavior started.&#xA;[ERROR] [1535381132.576713131]: Rotate recovery can't rotate in place because there is a potential collision. Cost: -1.00&#xA;[ INFO] [1535381132.675482447]: Got new plan&#xA;[ INFO] [1535381132.875441949]: Got new plan&#xA;&#xA;[ INFO] [1535381156.901500928]: Got new plan&#xA;[ INFO] [1535381157.101396956]: Got new plan&#xA;[ INFO] [1535381157.301632070]: Got new plan&#xA;[ INFO] [1535381157.302170120]: Goal reached&#xA;[ WARN] [1535381169.092857809]: Costmap2DROS transform timeout. Current time: 1535381169.0925, global_pose stamp: 1535381168.5424, tolerance: 0.5000&#xA;[ WARN] [1535381169.093196300]: Could not get robot pose, cancelling reconfiguration&#xA;[ WARN] [1535381170.092852095]: Costmap2DROS transform timeout. Current time: 1535381170.0926, global_pose stamp: 1535381168.5424, tolerance: 0.5000&#xA;[ WARN] [1535381170.192729304]: Could not get robot pose, cancelling reconfiguration&#xA;[ WARN] [1535381171.097531131]: Costmap2DROS transform timeout. Current time: 1535381171.0972, global_pose stamp: 1535381168.5424, tolerance: 0.5000&#xA;[ WARN] [1535381171.292652884]: Could not get robot pose, cancelling reconfiguration&#xA;[ WARN] [1535381172.097543923]: Costmap2DROS transform timeout. Current time: 1535381172.0973, global_pose stamp: 1535381168.5424, tolerance: 0.5000&#xA;[ WARN] [1535381172.393145114]: Could not get robot pose, cancelling reconfiguration&#xA;[ WARN] [1535381190.292336646]: Costmap2DROS transform timeout. Current time: 1535381190.2920, global_pose stamp: 1535381189.7725, tolerance: 0.5000&#xA;[ WARN] [1535381190.292683124]: Could not get robot pose, cancelling reconfiguration&#xA;^C[rviz-5] killing on exit&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Here is map.yaml:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;resolution: 0.050000&#xA;origin: [-10.000000, -10.000000, 0.000000]&#xA;negate: 0&#xA;occupied_thresh: 0.65&#xA;free_thresh: 0.196&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And here is the map:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.imgur.com/b4JG4kM.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.imgur.com/b4JG4kM.png&quot; alt=&quot;Mapp&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="17190" LastEditorUserId="17190" LastEditDate="2018-08-27T15:43:58.300" LastActivityDate="2018-08-28T13:57:28.870" Title="Is this SLAM performance typical or am I doing something wrong?" Tags="&lt;ros&gt;&lt;slam&gt;&lt;lidar&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16273" PostTypeId="2" ParentId="16240" CreationDate="2018-08-23T16:44:12.530" Score="1" Body="&lt;p&gt;Not a definitive answer but here are my thoughts:&#xA;Fixing node $k$ is equivalent to enforcing $\Delta x_{k} = 0$. Now we must show that adding $I$ to diagonal block $H_{kk}$ will result in $\Delta x_{k} = 0$. Let's name $H_{orig}$ the original matrix $H$ before adding $I$ to diagonal block $H_{kk}$, we have:&#xA;$$&#xA;(H_{orig}+\begin{bmatrix}&#xA; 0  &amp;amp;  &amp;amp;  &amp;amp;  &amp;amp;  &amp;amp; \\ &#xA; &amp;amp;  ...  &amp;amp;  &amp;amp;  &amp;amp;  &amp;amp; \\ &#xA; &amp;amp;  &amp;amp;  0  &amp;amp;  &amp;amp;  &amp;amp; \\ &#xA; &amp;amp;  &amp;amp;  &amp;amp;  I  &amp;amp;  &amp;amp; \\ &#xA; &amp;amp;  &amp;amp;  &amp;amp;  &amp;amp;  0  &amp;amp; \\ &#xA; &amp;amp;  &amp;amp;  &amp;amp;  &amp;amp;  &amp;amp;  ... \\ &#xA; &amp;amp;  &amp;amp;  &amp;amp;  &amp;amp;  &amp;amp;  &amp;amp; 0&#xA;\end{bmatrix})\Delta x = -b \Leftrightarrow H_{orig}\Delta x + \Delta x_{k} = -b&#xA;$$ &#xA;Can we show that $H_{orig}\Delta x + \Delta x_{k} = -b \Rightarrow \Delta x_{k} = 0$ ?&lt;/p&gt;&#xA;" OwnerUserId="5610" LastActivityDate="2018-08-23T16:44:12.530" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16275" PostTypeId="1" CreationDate="2018-08-24T07:01:16.053" Score="1" ViewCount="62" Body="&lt;p&gt;I am using &lt;a href=&quot;https://robokits.co.in/motors/encoder-dc-servo/faulhaber-coreless-17w-encoder-motor-120rpm-pid-dc-servo-drive&quot; rel=&quot;nofollow noreferrer&quot;&gt;this motor&lt;/a&gt; in a robotic arm. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wanted to move it to a position and the position was provided via an input but I am getting errors on Serial Monitor. Initially when I tried this ,  name of the serial controller i.e Rhino Motor Controller got printed on serial monitor indicating that the controller is working .But the problem is that I am not able to control the motor via Serial communication because I think it is not accepting the serial commands. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://robokits.download/documentation/Serial_DC_Encoder_Servo_Driver.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here is the datasheet&lt;/a&gt; for the motor driver.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;SoftwareSerial.h&amp;gt;&#xA;int angle ;&#xA;&#xA;int position ;&#xA;&#xA;int speed ;&#xA;&#xA;String stringG1 ;&#xA;&#xA;SoftwareSerial Serial1(10,11);&#xA;&#xA;void setup()&#xA;{&#xA;  Serial.begin(38400);&#xA;  Serial1.begin(38400);&#xA;&#xA;}&#xA;void loop()&#xA;{   &#xA;  angle = Serial.read();&#xA;  int position = 4*angle  ;&#xA;  speed = 10 ;&#xA;&#xA;  if(Serial.available()&amp;gt;0)&#xA;    {&#xA;    stringG1 = &quot;N1&quot; + String(position) + String(speed);&#xA;    Serial1.println(stringG1);&#xA;&#xA;    if (Serial1.available()&amp;gt;0)&#xA;      {&#xA;      Serial.print(Serial1.readString());&#xA;      }  &#xA;    }&#xA;}  &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Output on serial monitor ,&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;N1-410&#xA;Err&#xA;:N1-410&#xA;Err&#xA;:N122810&#xA;Err&#xA;:N1-410&#xA;⸮⸮⸮5&#xA;:N119215⸮⸮5&#xA;:Nj⸮⸮0&#xA;Err&#xA;:N⸮⸮2810&#xA;Err&#xA;:N1-410&#xA;Err&#xA;:N119610&#xA;Err&#xA;:N119210&#xA;Err&#xA;:N119210RErr&#xA;:N1-41jT⸮⸮5&#xA;:N122810&#xA;⸮⸮⸮5&#xA;:N1-410&#xA;⸮⸮⸮5&#xA;:&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="20888" LastEditorUserId="9720" LastEditDate="2018-08-24T13:42:06.437" LastActivityDate="2018-08-28T19:32:28.383" Title="Getting error on serial monitor when using serial controlled motor" Tags="&lt;arduino&gt;&lt;motor&gt;&lt;serial&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16277" PostTypeId="2" ParentId="8261" CreationDate="2018-08-24T10:13:07.493" Score="-1" Body="&lt;p&gt;All the steps are actually correct there- accept, when you press RESET, you curt need to select your&#xA;Robot type, I usually just keep pressing RESET till I get USER, then press start &amp;amp; only then it displays&#xA;ramclr or something&lt;/p&gt;&#xA;" OwnerUserId="21060" LastActivityDate="2018-08-24T10:13:07.493" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16278" PostTypeId="2" ParentId="1393" CreationDate="2018-08-24T10:36:39.290" Score="0" Body="&lt;p&gt;A non-bare-metal solution that will probably become increasingly popular over the next few years would be to offload your heavy data processing task (e.g recognizing a human in an image) to a Cloud service. That's assuming your device is connected to the internet.&#xA;Here is an example with the Raspberry Pi and the Google Cloud Vision API : &lt;a href=&quot;https://www.dexterindustries.com/howto/use-google-cloud-vision-on-the-raspberry-pi/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.dexterindustries.com/howto/use-google-cloud-vision-on-the-raspberry-pi/&lt;/a&gt;. Note that it requires a subscription to google cloud past a trial period, but some other cloud vision APIs (Amazon, Microsoft Azure, ... ?) may even offer their services for free if you submit less than N requests per month to their servers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yet another solution for heavy data processing on small platforms would be to offload the work to a thumbdrive-like device on your robot with a dedicated processor unit for running already-trained machine learning models (e.g Movidius Neural Compute Stick with the Raspberry PI: &lt;a href=&quot;https://medium.com/deep-learning-turkey/a-brief-guide-to-intel-movidius-neural-compute-stick-with-raspberry-pi-3-f60bf7683d40&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://medium.com/deep-learning-turkey/a-brief-guide-to-intel-movidius-neural-compute-stick-with-raspberry-pi-3-f60bf7683d40&lt;/a&gt; ). This works offline too. They're still a bit expensive for hobby projects but I expect their cost will go down like everything.&lt;/p&gt;&#xA;" OwnerUserId="5610" LastActivityDate="2018-08-24T10:36:39.290" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16279" PostTypeId="2" ParentId="16275" CreationDate="2018-08-24T13:36:31.880" Score="2" Body="&lt;p&gt;Welcome to &lt;em&gt;Robotics&lt;/em&gt;, Sam. You've posted your code and the errors you're getting, which is great. There are still a few pieces of information lacking, though. Unfortunately, it looks like the &quot;datasheet&quot; is pretty poor and there are several items that I would like to see that I can't find. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;With some information missing, here's the list of troubleshooting steps I would take to try to identify the problem. I'm assuming, since you're able to get an error message back from the motor controller, that the wiring between the Arduino and the motor controller is generally okay. Here are the next things I would check:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Obviously, if it was working previously and now it is not working, then &lt;em&gt;what did you change?&lt;/em&gt; Did you change software, or wiring, power supplies, power supply settings, etc.? &lt;/li&gt;&#xA;&lt;li&gt;Riding on point (1) above, but there &lt;em&gt;is&lt;/em&gt; a motor connected, right? You're requesting a particular position, but if there's no motor connected then it's not getting any feedback, or it might fault if it applies terminal voltage to the motor but then doesn't register any current flow.  &lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;This seems most likely to me&lt;/strong&gt; - is your command formatted correctly? You send a command like &lt;code&gt;N122810&lt;/code&gt;, but &lt;em&gt;how does the motor controller know where position ends and speed starts?&lt;/em&gt; In &lt;em&gt;carefully&lt;/em&gt; reading the datasheet, it looks like &lt;strong&gt;there's supposed to be a space between position and speed&lt;/strong&gt; when you send the command. You do not have a space. I had thought maybe the space was a typo on the datasheet, but I can't tell how the motor controller would tell the difference between a pos/speed of 12 and 5 and a pos/speed of 1 and 25 without &lt;em&gt;some&lt;/em&gt; kind of delimiter. &lt;/li&gt;&#xA;&lt;li&gt;If that doesn't work, try using other commands. If you can successfully (and &lt;em&gt;repeatably!!&lt;/em&gt;) poll the device with the &lt;code&gt;S&lt;/code&gt; command, then that would eliminate the rest of the steps I've given here. If you can get &lt;code&gt;S&lt;/code&gt; to work, try a position-only move with the &lt;code&gt;P&lt;/code&gt; or &lt;code&gt;N0&lt;/code&gt; commands. &lt;/li&gt;&#xA;&lt;li&gt;If that doesn't work, it might be an issue with the &lt;code&gt;println&lt;/code&gt;. The data sheet says to terminate the command with &lt;code&gt;\r&lt;/code&gt;, but &lt;code&gt;println&lt;/code&gt; terminates with &lt;code&gt;\r\n&lt;/code&gt;. If the motor controller can parse correctly then this shouldn't be an issue.&lt;/li&gt;&#xA;&lt;li&gt;If that doesn't work, it might be an issue with ASCII/binary, and you might need to use &lt;code&gt;Serial1.write()&lt;/code&gt; instead of &lt;code&gt;Serial1.print()&lt;/code&gt; or &lt;code&gt;Serial1.println()&lt;/code&gt;. &lt;/li&gt;&#xA;&lt;li&gt;It could also be an issue with voltage levels and proper registration of HIGH/LOW signals. If the Arduino is outputting on a 3.3V level, but the motor controller is expecting a 5V level, then HIGH on the Arduino output would fall in the &quot;no man's land&quot; of levels. Typically, a low is guaranteed to be registered at &amp;lt;0.3*vMax, a high is guaranteed to be registered at &gt;0.7*vMax, and any signal between 0.3 and 0.7 of vMax is &quot;ambiguous&quot; and not guaranteed to be read correctly. &lt;/li&gt;&#xA;&lt;li&gt;It could be an issue with voltage supply to the motor controller. The motor controller is supposed to get a 7-12V input. If, for example, you're powering it off of the 5V output on the Arduino, then you're under-powering the board and can get unexpected results. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;:EDIT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think your issue might be due to a lack of common ground reference between the Arduino and the motor controller. If you're using a 9V battery to power the motor AND the motor controller, consider the circuit below:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/k9s7d.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/k9s7d.png&quot; alt=&quot;Circuit Config&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's also important to note that your 9V battery is probably insufficient to run the motor. For starters, the &lt;a href=&quot;http://robokits.download/documentation/RKI-1241.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;motor datasheet states the motor should be running on 12V&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.powerstream.com/9V-Alkaline-tests.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here is a source&lt;/a&gt; that shows battery capacity versus discharge rate. The &quot;no load&quot; rating on the motor shows it draws 75mA with zero load. The capacity chart then gives a battery life of about 4 hours with no load. If, however, you go to the rated load of 1400 mA, the battery chart, which tops out at a discharge rating of 1000 mA, estimates the battery life to be about &lt;strong&gt;four minutes&lt;/strong&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My reading of the datasheet (it's sparse) gives me the feeling that the Vcc 5V connection is a 5V &lt;em&gt;output&lt;/em&gt;, meant to power the actual encoder on the motor. You should not be powering this pin. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, if the motor is drawing a large amount of current, it could be browning out battery supply. If/when the 9V battery's terminal voltage falls below 7V, the motor controller becomes underpowered and you become likely to get erratic operation. This might also explain the weird symbols you're getting back from the motor controller, like &lt;code&gt;⸮⸮⸮5&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If this doesn't help, please &lt;em&gt;edit your question&lt;/em&gt; to include pictures and/or a drawing of how you currently have everything wired.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, I might have the Rx/Tx lines backward in the drawing, but it sounds like you've got your communication to the motor controller already correct. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2018-08-28T19:32:28.383" LastActivityDate="2018-08-28T19:32:28.383" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16281" PostTypeId="1" AcceptedAnswerId="16284" CreationDate="2018-08-24T13:58:34.590" Score="1" ViewCount="206" Body="&lt;p&gt;In testing my iRobot Create 2, I discovered that the following message is being sent periodically over the serial interface: &quot;    &lt;strong&gt;Flash CRC successful: 0x0 (0x0)&lt;/strong&gt;&quot;. Is this expected behavior or am I making an error in the way I'm connecting? I could not find this message documented anywhere.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;To reproduce this&lt;/strong&gt;: iRobot Create 2 connected to a Windows 10 PC via the USB-Serial cable. Connecting via Putty at 115200 baud. Type ctrl-G to reboot the robot. I'll see the normal reboot message, then after a few minutes, the robot sends the above Flash CRC message.&lt;/p&gt;&#xA;" OwnerUserId="21062" LastActivityDate="2018-08-25T03:15:03.243" Title="iRobot Create 2 Flash CRC message" Tags="&lt;mobile-robot&gt;&lt;irobot-create&gt;&lt;roomba&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16282" PostTypeId="2" ParentId="16161" CreationDate="2018-08-24T22:09:25.577" Score="1" Body="&lt;p&gt;1) I believe the previous replies/comments already directed you to good online resources. I will just add some comments about the intuition behind the equations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Putting aside SLAM, in general mathematics, I assume you have an understanding of what the &lt;a href=&quot;https://en.wikipedia.org/wiki/Covariance_matrix&quot; rel=&quot;nofollow noreferrer&quot;&gt;covariance matrix&lt;/a&gt; $\Sigma$ represents for a multivariate Gaussian.&#xA;Now the &lt;em&gt;information matrix&lt;/em&gt; is &lt;em&gt;defined&lt;/em&gt; as its inverse:&#xA;$$&#xA;\Omega = \Sigma^{-1}&#xA;$$&#xA;and the &lt;em&gt;information vector&lt;/em&gt; is &lt;em&gt;defined&lt;/em&gt; as:&#xA;$$&#xA;\xi = \Sigma^{-1} \mu&#xA;$$&#xA;Note that these are &lt;em&gt;mathematical definitions&lt;/em&gt;, you don't have to worry about the meaning of these quantities just yet.&#xA;From these definitions, you obviously get:&#xA;$$&#xA;\Sigma = \Omega^{-1}&#xA;$$&#xA;$$&#xA;\mu = \Omega^{-1} \xi&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now what do these quantities represent in GraphSLAM? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Remember that the objective of the GraphSLAM algorithm is to &lt;em&gt;compute a Gaussian approximation of the posterior over the entire robot trajectory and the map&lt;/em&gt;. This gaussian approximation, like all gaussian distributions, has a mean $\mu$ and a covariance matrix $\Sigma$, which means that you can also define its information matrix $\Omega$ and information vector $\xi$ using the definitions above.&#xA;If you have $\Omega$ and $\xi$ you can get $\Sigma$ and $\mu$ (and vice-versa), it's as simple as that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The real question is, why would you bother with the information form ($\Omega$ and $\xi$) instead of trying to find the mean $\mu$ and the covariance $\Sigma$ of your posterior directly?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thrun answered this question previously, in 2002, when he published another algorithm, the &lt;a href=&quot;http://robots.stanford.edu/papers/thrun.seif.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sparse Extended Information Filters (SEIFs)&lt;/a&gt;. SEIFs was a variation of the Extended Information Filter (EIF), the dual of the very popular Extended Kalman Filter (EKF). The SEIFs paper showed that sparsity in the information form of the SLAM problem:&#xA;1) had a 'physical' meaning as a graphical network of locally-interconnected features (which is actually a Gaussian Markov Random Field), and &#xA;2) enabled us to use well-known, highly efficient algorithms from linear algebra for matrix factorization.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I highly suggest that you check out the SEIFs paper - or section 3.4 of Probabilistic Robotics as others have suggested - if you want to understand the information form of SLAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now GraphSLAM (2006) is very closely related to SEIFs, but it introduces several new things: &#xA;1) it is an offline algorithm (estimates &lt;em&gt;entire&lt;/em&gt; trajectory + map) instead of an online algorithm/'filter' (estimates current trajectory + map), &#xA;2) after linearizing constraints, it uses a factorization trick (see Fig. 3 in the paper) to shift information between poses and features to information between pairs of poses. This gives you a new structure constraining poses only, making it easier to compute them. Once they are computed, the feature location are computed too, based on the original feature-to-pose information.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regardless of the specificities of GraphSLAM, if you understand the information form of SLAM from SEIFs and you understand that GraphSLAM is offline instead of online, you should be able to understand $\mu = \Omega^{-1} \xi$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) Now on to your 2nd question regarding the dataset. By '75000 dataset' I suppose you mean a dataset of 75000 landmarks. By asking if it is 'possible' I am not sure whether your are concerned about the accuracy of the map, the computational complexity, or both?&#xA;Inverting a large $\Sigma$ matrix is what initially deterred people from investigating the EIF-route, until they figured out the inherent sparsity of the SLAM problem.&#xA;As I explained above, this sparsity allows for efficient matrix factorization.&#xA;Section 7 of the GraphSLAM paper has some quantified results that should answer your question. If not, please clarify.&lt;/p&gt;&#xA;" OwnerUserId="5610" LastEditorUserId="5610" LastEditDate="2018-09-04T20:39:57.157" LastActivityDate="2018-09-04T20:39:57.157" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="16284" PostTypeId="2" ParentId="16281" CreationDate="2018-08-25T03:15:03.243" Score="2" Body="&lt;p&gt;Yes, Create 2 displays all kinds of internal debugging messages in plain text when it is not in an open interface mode. (For a less obtuse one, try putting it on the dock while you are connected to the serial port!) These will go away once you enter OI mode (op code 128).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please note that I am an iRobot employee, but the postings on this site are my own and don't necessarily represent iRobot's positions, strategies, or opinions.&lt;/p&gt;&#xA;" OwnerUserId="7665" LastActivityDate="2018-08-25T03:15:03.243" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16285" PostTypeId="2" ParentId="16071" CreationDate="2018-08-25T16:54:42.343" Score="0" Body="&lt;p&gt;In GraphSLAM, &lt;em&gt;the information matrix $\Omega$ and the information vector $\xi$ are given directly by the log of the full posterior&lt;/em&gt; via the following expression:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/Uv9gm.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Uv9gm.jpg&quot; alt=&quot;log of the full posterior&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore we need to derive an expression for our full posterior which looks like Eq 26 above so that we can identify $\Omega$ and $\xi$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is done in sections 5-1 to 5-3 of the paper, and results in this ugly expression for the full posterior:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/HPNaS.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HPNaS.jpg&quot; alt=&quot;full posterior with linearized constraints&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even if you don't fully understand this expression, you can see that it includes two sums: one over $t$ and the other one over $i$. The first sum corresponds to the constraints resulting from controls/odometry, whereas the second corresponds to the constraints resulting from landmark measurements.&#xA;The lines 7 and 8 of the algorithm you posted above simply add the contribution of &lt;em&gt;one&lt;/em&gt; control/odometry constraint to $\Omega$ and $\xi$. You can see that they are inside a loop iterating over all the $t$ controls, which corresponds exactly to our first sum in equation 25.&#xA;In lines 18 and 19 of the algorithm (not visible on your image) you can see the same thing being done for the measurement constraints.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And this is how we build $\Omega$ and $\xi$.&lt;/p&gt;&#xA;" OwnerUserId="5610" LastActivityDate="2018-08-25T16:54:42.343" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16286" PostTypeId="2" ParentId="16086" CreationDate="2018-08-25T19:25:07.483" Score="0" Body="&lt;p&gt;At $t_{0}$ your particles should have some initial distribution. To simplify you can assume that all particles are aligned at the same pose $x_{0}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For subsequent timesteps, let's say you have all the particles at time $t-1$ and you want to get a new particle set for time $t$. FastSLAM 1.0 uses only the motion model to propagate the particles, so the new particles at time $t$ are sampled according to:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/tZqjI.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tZqjI.jpg&quot; alt=&quot;particle update&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now to translate this equation into code you need to define a motion model for your robot. &lt;a href=&quot;http://ais.informatik.uni-freiburg.de/teaching/ss11/robotics/slides/06-motion-models.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;These slides&lt;/a&gt; introduce several probabilistic motion models depending on the type of robot you are using (odometry-based, velocity-based). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's assume we take the following odometry-based motion model:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/LlVwu.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/LlVwu.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now to propagate particle $k$ from time $t-1$ to time $t$, you take the pose $x, y, \theta$ of particle $k$ at time $t-1$ + your odometry measurements $u$ and you feed them to the &lt;code&gt;sample_motion_model(u,x)&lt;/code&gt; algorithm. The output will be $x', y', \theta'$, the pose of particle $k$ at time $t$.&lt;/p&gt;&#xA;" OwnerUserId="5610" LastActivityDate="2018-08-25T19:25:07.483" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16287" PostTypeId="1" CreationDate="2018-08-26T18:15:14.350" Score="0" ViewCount="56" Body="&lt;p&gt;I've read that Arduino's are actually &lt;em&gt;not&lt;/em&gt; necessarily a good option for getting into robotics/embedded systems, as there are many shortcuts and you don't learn the real way of how it all works. When I started app dev, I jumped straight into it and never had any practice with simpler things such as Scratch or other app builders. I got straight into the IDE and learned the programming language. If Arduino's are just for hobbyists, I want nothing to do with them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm able to grasp things quickly and study intensively, should I start with an individual microcontroller or still stick to the Arduino? If a microcontroller, which one and why? I understand the differences between the Arduino and a stand-alone microcontroller, have no previous experience programming hardware, but that was the same with app dev and I got on just fine with the programming.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many thanks.&lt;/p&gt;&#xA;" OwnerUserId="21072" LastActivityDate="2018-08-26T22:08:03.870" Title="Serious about robotics programming, should I start with an Arduino?" Tags="&lt;arduino&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16288" PostTypeId="2" ParentId="16287" CreationDate="2018-08-26T22:08:03.870" Score="2" Body="&lt;p&gt;Arduino boards are simple microcontroller boards that are a good complexity for learning. The arduino IDE hides the details of typical bare metal microcontroller development, but not in a bad way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The difference between a hobbyist that only knows arduino and a professional is that a professional will select the right microcontroller for the job from the 1000's available, and will often (but not always) write software using a more sophisticated approach. Sophisticated is a vague idea but includes things like the way interrupts or DMA are used, or using an embedded operating system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think the biggest risk you would face if you started with arduino is that most of the information out there is written for hobbyist, which assumes the reader does not know or understand the fundamentals of embedded design, and sometimes is written by a hobbyist who does not know what they are talking about and will provide (unintentionally) misleading or wrong information.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Start with a course in embedded systems so that you understand some of the basic concepts. You can find &lt;a href=&quot;https://www.ics.uci.edu/~harris/fundamentals/slides.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;useful&lt;/a&gt; &lt;a href=&quot;http://profile.iiita.ac.in/bibhas.ghoshal/lecture_slides_embedded/ES_basics.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;stuff&lt;/a&gt; on the internet if you can't attend a real one.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2018-08-26T22:08:03.870" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16289" PostTypeId="2" ParentId="16272" CreationDate="2018-08-27T15:13:22.270" Score="2" Body="&lt;p&gt;Your lidar has a minimum range for &lt;strong&gt;12 cm&lt;/strong&gt;, which means your maze corridors should probably be double that range (for either side of the sensor), plus the width of the sensor itself, which is 9.5 cm. That is, if your maze corridors are narrower than (12 + 12 + 9.5) = 33.5 cm, you're likely operating inside the minimum range of the scanner and may not be getting valid data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;:EDIT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems like you might have a navigation issue that could be caused by your &lt;a href=&quot;http://wiki.ros.org/costmap_2d/flat#Parameters&quot; rel=&quot;nofollow noreferrer&quot;&gt;Costmap2DROS parameters&lt;/a&gt;. Specifically, &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;code&gt;~&amp;lt;name&amp;gt;/inflation_radius&lt;/code&gt; (double, &lt;strong&gt;default: 0.55&lt;/strong&gt;)&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The radius in meters to which the map inflates obstacle cost values&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If you are using the default value here, then it seems that the left wall would get a 0.55 &lt;em&gt;meter&lt;/em&gt; buffer, the right wall would &lt;em&gt;also&lt;/em&gt; get a 0.55 meter buffer, which now means your navigation algorithm might not let you pass through a corridor that's less than 1.1 meters wide. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This could combine with the navigation system's perception of the robot, defined by default as&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;code&gt;~&amp;lt;name&amp;gt;/robot_radius&lt;/code&gt; (double, &lt;strong&gt;default: 0.46&lt;/strong&gt;)&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The radius of the robot in meters, this parameter should only be set for circular robots, all others should use the &lt;code&gt;footprint&lt;/code&gt; parameter described above.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;footprint&lt;/code&gt; parameter's default setting is empty &lt;code&gt;[]&lt;/code&gt;, meaning the Costmap2DROS defaults to assuming your robot is (2*0.46) = 0.92 meters wide (that's robot &lt;em&gt;radius&lt;/em&gt;), which compounds with the obstacle dilation described above, to where now your navigation system might think your robot won't fit unless the corridor is (1.1 + 0.92) = 2.02 meters wide. Even at that point, it could consider the corridor to be a &quot;tight fit&quot; because it would believe the sides of your robot are scraping the walls.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A relatively straightforward test would be to check and correct the &lt;code&gt;robot_radius&lt;/code&gt; parameter, or disable it by entering values for the &lt;code&gt;footprint&lt;/code&gt; parameter, then try setting the &lt;code&gt;inflation_radius&lt;/code&gt; to zero or something close to zero. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If this doesn't work, please edit your question to post the &lt;a href=&quot;http://wiki.ros.org/navigation/Tutorials/RobotSetup#Costmap_Configuration_.28local_costmap.29_.26_.28global_costmap.29&quot; rel=&quot;nofollow noreferrer&quot;&gt;local_ and global_costmap settings&lt;/a&gt; and then please also provide a dimensioned drawing (sketch, etc.) of how your maze is actually arranged, along with the coordinates you're asking the robot to maneuver to. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;FYI, if the image you've posted of your map is exactly your map, you've said (with your &lt;code&gt;map.yaml&lt;/code&gt; file) that the bottom-left pixel is -10 meters, -10 meters, and each pixel is 5 cm. This means that the coordinates of approximately the middle of the top-left chamber in your &quot;maze&quot; is (1.6, -0.35), the center of the top-right is approximately (3.05, -0.05), and the center of the bottom chambe is approximately (2.8, -1.35). Again, all these dimensions are in &lt;em&gt;meters&lt;/em&gt;. I don't know if these numbers sound correct to you or not, but this is how you've defined your map. This may or may not be contributing to the navigation trouble. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2018-08-28T13:57:28.870" LastActivityDate="2018-08-28T13:57:28.870" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16292" PostTypeId="1" CreationDate="2018-08-28T14:09:40.310" Score="0" ViewCount="125" Body="&lt;p&gt;I want to write a Doppler Velocity Log (DVL) SensorPlugin for gazebo, but gazebo fails to load the plugin. My DvlPlugin.cpp looks like this&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &quot;DvlPlugin.hpp&quot;&#xA;&#xA;using namespace std;&#xA;using namespace gazebo;&#xA;&#xA;void DvlPlugin::Load(sensors::SensorPtr sensor, sdf::ElementPtr pluginElement){&#xA;    gzmsg &amp;lt;&amp;lt; &quot;Load&quot; &amp;lt;&amp;lt; endl;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and my DvlPlugin.hpp looks like this&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#ifndef _GAZEBO_DVL_PLUGIN_HPP_&#xA;#define _GAZEBO_DVL_PLUGIN_HPP_&#xA;#include &amp;lt;gazebo/common/common.hh&amp;gt;&#xA;#include &amp;lt;gazebo/sensors/Sensor.hh&amp;gt;&#xA;&#xA;namespace gazebo {&#xA;    class DvlPlugin : public gazebo::SensorPlugin&#xA;    {&#xA;    public:&#xA;        DvlPlugin(){}&#xA;        ~DvlPlugin(){}&#xA;        void Load(gazebo::sensors::SensorPtr sensor, sdf::ElementPtr sdf);&#xA;    };&#xA;    GZ_REGISTER_SENSOR_PLUGIN(DvlPlugin) &#xA;}&#xA;#endif&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So there is really nothing big that is done in the code, and everything compiles without errors. When I load following simple sdf file&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; ?&amp;gt;&#xA;&amp;lt;sdf version=&quot;1.6&quot;&amp;gt;&#xA;    &amp;lt;world name=&quot;worl_test&quot;&amp;gt;&#xA;        &amp;lt;model name=&quot;model_test&quot;&amp;gt;&#xA;            &amp;lt;link name=&quot;link_test&quot;&amp;gt;&#xA;                &amp;lt;pose&amp;gt;0 0 0 0 0 0&amp;lt;/pose&amp;gt;&#xA;                &amp;lt;inertial&amp;gt;&amp;lt;mass&amp;gt;0.01&amp;lt;/mass&amp;gt;&amp;lt;/inertial&amp;gt;&#xA;                &amp;lt;sensor type=&quot;dvl&quot; name=&quot;dvl_test&quot;&amp;gt;&#xA;                    &amp;lt;plugin name=&quot;gazebo_dvl&quot; filename=&quot;libgazebo_dvl.so&quot;/&amp;gt;&#xA;                &amp;lt;/sensor&amp;gt;&#xA;            &amp;lt;/link&amp;gt;&#xA;        &amp;lt;/model&amp;gt;&#xA;    &amp;lt;/world&amp;gt;&#xA;&amp;lt;/sdf&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I get the error &lt;code&gt;[Err] [SensorManager.cc:276] Unable to create sensor of type[dvl]&lt;/code&gt; (which means, when we look the &lt;a href=&quot;https://github.com/arpg/Gazebo/blob/master/gazebo/sensors/SensorManager.cc&quot; rel=&quot;nofollow noreferrer&quot;&gt;SensorManager.cc code&lt;/a&gt;, that the Sensor dvl is not in the SensorFactory. Do you have an Idea why I get this error?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS: I am under Ubuntu 16.04 and I use gazebo 7 and I get the error even if i load the full path to the libgazebo_dvl.so.&lt;/p&gt;&#xA;" OwnerUserId="21082" LastActivityDate="2021-04-14T22:47:25.907" Title="Gazebo - Unable to load SensorPlugin" Tags="&lt;gazebo&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16293" PostTypeId="2" ParentId="16292" CreationDate="2018-08-28T15:32:21.573" Score="0" Body="&lt;p&gt;Welcome to &lt;em&gt;Robotics&lt;/em&gt;, Chris. This question is specific to Gazebo, so you might have better luck getting a question if you ask over at the &lt;a href=&quot;http://answers.gazebosim.org/question/20324/unable-to-create-sensor-of-type/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Gazebo forums&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'll start with the comment that &lt;code&gt;using namespace ____&lt;/code&gt; is &lt;a href=&quot;https://stackoverflow.com/q/1452721/5171120&quot;&gt;bad practice&lt;/a&gt; and just leave the comment at that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not sure how you got started with creating the plugin the way you did, but I would suggest &lt;a href=&quot;http://gazebosim.org/tutorials?tut=contact_sensor&quot; rel=&quot;nofollow noreferrer&quot;&gt;having a look at the sensor plugin tutorial&lt;/a&gt;. Specifically, the example includes &lt;code&gt;gazebo/gazebo.hh&lt;/code&gt;, which you do not. Then, they have the class inherit &lt;code&gt;class ContactPlugin : public SensorPlug&lt;/code&gt;. You call the inheritance &lt;code&gt;class DvlPlugin : public gazebo::SensorPlugin&lt;/code&gt;, but I'm not sure how you're getting &lt;code&gt;gazebo::&lt;/code&gt; anything without having included the gazebo header. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your header calls the ElementPtr &lt;code&gt;sdf&lt;/code&gt;, but your source file calls the same thing &lt;code&gt;pluginElement&lt;/code&gt;. Your source file doesn't define the constructor, or the destructor, and the &lt;code&gt;Load&lt;/code&gt; method doesn't bind the plugin to anything. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Personally, I would start with the example code in the tutorial, gut it one section at a time until you get the minimum that compiles, then fill the shell with the functionality you want. Since the specific error that you're getting is that it can't create the sensor, I would at least try adding the constructor and destructor definitions. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-08-28T15:32:21.573" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16294" PostTypeId="1" CreationDate="2018-08-28T16:34:39.907" Score="1" ViewCount="434" Body="&lt;p&gt;So I have an idea which would require the following:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1-4 servos&#xA;1 microcontroller&#xA;some way of communicating with it via smartphone (bluetooth or wifi)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ability to run for 14 days on a small power source 2-3AA or AAA battries. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm seeing a lot of boards run in the 200Ma range which makes using batteries look like a no go as this even with a 13000mAh pack will only last 65hrs or about 3 days or so.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I were able to get into thee micro amp range this would be great or very low mA range. Servos should only have to run &amp;lt;1second about 2-3 times a day. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking for starter information on this.&lt;/p&gt;&#xA;" OwnerUserId="21084" LastActivityDate="2018-08-29T14:59:49.833" Title="Ultra Low Power servo and controller for long usage..?" Tags="&lt;microcontroller&gt;&lt;servomotor&gt;&lt;battery&gt;&lt;amperage&gt;" AnswerCount="1" CommentCount="3" ClosedDate="2018-08-29T20:17:25.950" ContentLicense="CC BY-SA 4.0" />
  <row Id="16295" PostTypeId="2" ParentId="12259" CreationDate="2018-08-28T17:11:42.890" Score="1" Body="&lt;p&gt;Chuck made a very good observation that unless your control algorithm can use sensors to reference the external environment, an odometry-based vehicle &lt;em&gt;can't&lt;/em&gt; go perfectly straight - there's always factors unaccounted for by wheel encoders.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, if LIDAR/SLAM/rangefinders/compasses are out of the question (or are unnecessary for your application), you may be making this too complicated:  &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Drive one motor at a constant speed.  &lt;/li&gt;&#xA;&lt;li&gt;Use PID to slave other motor to the first, attempting to match speed/angular position.  &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In a controlled environment, with a well-tuned PID, this will achieve very good results.&lt;/p&gt;&#xA;" OwnerUserId="20680" LastActivityDate="2018-08-28T17:11:42.890" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16296" PostTypeId="1" CreationDate="2018-08-28T20:12:01.313" Score="1" ViewCount="70" Body="&lt;p&gt;I have a dynamical system which has the following form:&lt;br&gt;&#xA;$\dot x=\mathcal F_1(m_1)x+\mathcal F_2(m_2)x$.&lt;br&gt;&#xA;My objective is to find the parameters $m_1$ and $m_2$ via LMI (linear matrix inequality)  using the Lyapunov function $V=x^TPx$ where $x$ is the state and $P$ is a  positive definite matrix. The problem that I can't find a feasible solution with a single matrix $P$. I tried to solve the problem with tow steps: &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;I consider that $\dot x=\mathcal F_1(m_1)x+\omega_1$ then using the Lyapunov function &#xA;$V_1=x^TP_1x$ (of course using the mathematical background) I can find the first parameter $m_1$;&lt;/li&gt;&#xA;&lt;li&gt;I consider that $\dot x=\mathcal F_2(m_2)x+\omega_2$ and as in the first step I can find the second parameter $m_2$ using the Lyapunov function $V_2=x^TP_2x$ and using them in the simulation they work very well.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;My questions are about:  &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;$m_1$ and $m_2$ were found independently how can I guarantee&#xA;the stability of the system using $m_1$ and $m_2$ in other words how can I prove the stability of the system?   &lt;/li&gt;&#xA;&lt;li&gt;It is well known that the Lyapunov function is also so called the energy of the system so can I say that $V=\frac{1}{2}(V_1+V_2)$ is also the energy of the system? &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="21085" LastEditorUserId="21085" LastEditDate="2018-08-29T10:10:49.950" LastActivityDate="2018-08-29T10:10:49.950" Title="Stability of dynamical system via Lyapunov" Tags="&lt;stability&gt;" AnswerCount="0" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16298" PostTypeId="1" AcceptedAnswerId="16301" CreationDate="2018-08-29T12:40:27.970" Score="3" ViewCount="114" Body="&lt;p&gt;I know they are bad for positional tracking and drift from actual position over time but would like to know what is the situation with rotation only.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know Oculus DK1 used ordinary off-the-shelf cheap IMUs for rotation tracking of the user's head, as does any other VR headset, such as GearVR, where there is no positional tracking, but I haven't had chance to use them more than few minutes to know how much they (their IMUs) drift from original orientation over time.&lt;/p&gt;&#xA;" OwnerUserId="21091" LastEditorUserId="9176" LastEditDate="2018-08-29T12:53:32.583" LastActivityDate="2018-08-30T14:12:47.430" Title="How reliable are IMUs for a long usage (6 hours) rotation (only) tracking?" Tags="&lt;imu&gt;&lt;accelerometer&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16299" PostTypeId="2" ParentId="16298" CreationDate="2018-08-29T14:42:15.067" Score="1" Body="&lt;p&gt;Take a look at this &lt;a href=&quot;http://www.chrobotics.com/library/attitude-estimation&quot; rel=&quot;nofollow noreferrer&quot;&gt;article&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;When estimating attitude and heading, the best results are obtained by combining data from multiple types of sensors to take advantage of their relative strengths. For example, rate gyros can be integrated to produce angle estimates that are reliable in the short-term, but that tend to drift in the long-term. Accelerometers, on the other hand, are sensitive to vibration and other non-gravity accelerations in the short-term, but can be trusted in the long-term to provide angle estimates that do no degrade as time progresses.  Combining rate gyros and accelerometers can produce the best of both worlds - angle estimates that are resistant to vibration and immune to long-term angular drift.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;To answer your question, an IMU will not drift as the accelerometers will always read against gravity. &lt;/p&gt;&#xA;" OwnerUserId="15809" LastEditorUserId="15809" LastEditDate="2018-08-30T13:13:22.317" LastActivityDate="2018-08-30T13:13:22.317" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16300" PostTypeId="2" ParentId="16294" CreationDate="2018-08-29T14:52:54.813" Score="0" Body="&lt;p&gt;You may want to look into using an arduino pro mini, after disabling the power LED. &lt;a href=&quot;http://www.home-automation-community.com/arduino-low-power-how-to-run-atmega328p-for-a-year-on-coin-cell-battery/&quot; rel=&quot;nofollow noreferrer&quot;&gt;This Article&lt;/a&gt; claims a power consumption of 0.0232 mA in power down sleep. However, adding BLE will increase power consumption greatly. I'd look into alternative solutions, such as solar power. &lt;/p&gt;&#xA;" OwnerUserId="15809" LastEditorUserId="15809" LastEditDate="2018-08-29T14:59:49.833" LastActivityDate="2018-08-29T14:59:49.833" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16301" PostTypeId="2" ParentId="16298" CreationDate="2018-08-29T18:36:51.183" Score="1" Body="&lt;p&gt;Welcome to &lt;em&gt;Robotics&lt;/em&gt;, Mark! &lt;/p&gt;&#xA;&#xA;&lt;p&gt;IMUs are typically comprised of two core components: accelerometers and gyroscopes. They may also have a magnetometer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;An accelerometer measures linear &lt;em&gt;acceleration&lt;/em&gt;, and a gyroscope measures angular &lt;em&gt;velocity&lt;/em&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to get linear and angular position estimates, those outputs need to be integrated. I'm not sure what your background is, but integration is just an accumulation of samples with respect to time. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you travel 50 km/h for an hour, you have gone 50 km. If you then go 25 km/hr for half an hour, you have gone and &lt;em&gt;additional&lt;/em&gt; (25 * 0.5) = 12.5 km. Your total distance traveled is (50 + 12.5) = 62.5 km. Get the current speed, multiply by how long you've been going that speed, and add it to a running total. This is integration. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the accelerometer, you multiply the current reading by the amount of time that has elapsed since the last reading and add that to a running total to get the current linear speed. You need to do the same over again to get current linear position. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In code form, it looks like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sampleTime = GetElapsedTime();&#xA;linearAcceleration = GetAccelerometerOutput();&#xA;linearSpeed = linearSpeed + linearAcceleration*sampleTime;&#xA;linearPosition = linearPosition + linearSpeed*sampleTime;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;A gyroscope outputs an angular speed, so you only need to integrate once to get to the angular position:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sampleTime = GetElapsedTime();&#xA;angularSpeed = GetGyroscopeOutput();&#xA;angularPosition = angularPosition + angularSpeed*sampleTime;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The trouble here is that no sensors are perfect. The gyroscope and the accelerometer both have noise, biases, bias drift, etc. You integrate the sensor outputs, and integration is an &lt;em&gt;accumulation&lt;/em&gt; of sorts, so the linear and angular position estimates &quot;remember&quot; all the noise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The noise might be zero-mean, meaning your long-term average of that signal should be the true signal, but the &lt;em&gt;integration&lt;/em&gt; of that noise is not. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider the following example: Have your speed be solely determined by the &quot;white noise&quot; of a coin flip. If the coin flip is heads, you are moving forward, if it is tails, you're moving backwards. On each sample, take a step in the appropriate direction. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the total results of coin flips are even heads/tails, then your position &lt;em&gt;should&lt;/em&gt; be where you started, right? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have flipped the coin one time, is it possible for you to be 10 steps away from the starting position? No, that's not possible. You take one step per flip, so you could only possibly be 1 step away from where you started, which should be your &quot;true position.&quot; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have flipped the coin 10 times, is it possible for you to be 10 steps away from the starting position? Now it &lt;strong&gt;is&lt;/strong&gt; possible. It's very unlikely, but it's possible. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have flipped the coin 100 times, now it's pretty reasonable to assume you &lt;em&gt;could&lt;/em&gt; be 10 steps away from the &quot;true&quot; position. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;For a gyroscope, the random distance traveled each &quot;flip&quot; (sample) is called the &quot;random walk&quot; or &quot;angle random walk,&quot; and this should be a parameter given in the datasheet.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The angle random walk tells you how you can expect the standard deviation to change with respect to time. You can use the standard deviation with the &lt;a href=&quot;https://en.wikipedia.org/wiki/68%E2%80%9395%E2%80%9399.7_rule&quot; rel=&quot;nofollow noreferrer&quot;&gt;empirical rule to estimate the possible error in your integrated angle&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The empirical rule says that 68 percent of measurements should fall within +/- one standard deviation, 95 percent should fall within +/- two standard deviations, and 99.7 percent should fall within +/- three standard deviations. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A high quality gyroscope should give the angle random walk in units of $\mbox{ARW} = \mbox{deg}/\sqrt{\mbox{hr}}$. This means your standard deviation after 1 hour should be $\mbox{ARW}*\sqrt{1}$, after two hours it would be $\mbox{ARW}*\sqrt{2}$, etc. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lower quality gyroscopes give the same parameter in units of $\mbox{ARW} = \mbox{deg}/\sqrt{\mbox{s}}$, so you get to &quot;dilate&quot; your standard deviation on a much faster time scale.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, if your datasheet gave $\mbox{ARW} = 0.01 \mbox{deg}/\sqrt{s}$, then your standard deviation after 60 seconds is $0.01 * \sqrt{60} = 0.0775 \mbox{deg}$. By the empirical rule, your actual angle is probably (68 percent sure) within +/- (1*0.0775) = +/- 0.0775 deg and almost certainly (99.7 percent sure) within +/- (3*0.0775) = +/- 0.23 deg. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you had a gyro with that rating and you ran it for six hours, as you asked in your question, the standard deviation would be $0.01 * \sqrt(6*3600) = 1.47 \mbox{deg}$. Your estimate could be as far as +/- (3*1.47) = +/- 4.4 deg away.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some data sheets give the noise in terms of a noise power spectral density, sometimes with units of $\mbox{deg}/\mbox{s}/\sqrt{\mbox{Hz}}$. You can review &lt;a href=&quot;https://ieeexplore-ieee-org.ezproxy.lib.vt.edu/document/660628/&quot; rel=&quot;nofollow noreferrer&quot;&gt;IEEE Std 952-1997&lt;/a&gt; for a more detailed description of the noise PSD, but section C.1.1 of that document gives a conversion of:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;N\left(^{\circ}/\sqrt{\mbox{hr}}\right) = \frac{1}{60}\sqrt{\mbox{PSD}\left[\left(\frac{^{\circ}}{\mbox{hr}}\right)^2/\mbox{Hz}\right]} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note the units there. It seems like most noise PSD are listed with units of $^{\circ}/\mbox{s}/\sqrt{hr}$, which would imply that they've already taken the square root of the proper noise PSD. That leaves the conversion to random walk as (1/60) of the listed noise PSD. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, finally, for example, &lt;a href=&quot;https://www.digikey.com/products/en/sensors-transducers/motion-sensors-imus-inertial-measurement-units/567?k=&amp;amp;pkeyword=&amp;amp;pv345=48&amp;amp;FV=1140003%2Cffe00237%2C56400cc%2C56400ff%2C564012f%2C5640142%2C5640030%2C5640031&amp;amp;quantity=0&amp;amp;ColumnSort=0&amp;amp;page=1&amp;amp;stock=1&amp;amp;pageSize=25&quot; rel=&quot;nofollow noreferrer&quot;&gt;here is a listing of some three-axis accelerometer/gyro IMUs on Digikey&lt;/a&gt;. The first item you can buy in quantity (1) is the &lt;a href=&quot;https://www.digikey.com/product-detail/en/bosch-sensortec/BMI160/828-1057-1-ND/6136308&quot; rel=&quot;nofollow noreferrer&quot;&gt;Bosch BMI160&lt;/a&gt;. The &lt;a href=&quot;https://ae-bst.resource.bosch.com/media/_tech/media/datasheets/BST-BMI160-DS000-07.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;datasheet for that sensor&lt;/a&gt; gives the Output Noise for the 200 Hz data rate to be 0.07 $^{\circ}/\mbox{s rms}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the first second, at 200 Hz, there are 200 samples. The standard deviation is $0.07\sqrt{200} = 1 \mbox{deg}$. After 60 seconds there are (60*200) = 1200 samples, and the standard deviation is $0.07\sqrt{1200} = 2.4 \mbox{deg}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the least expensive surface mount, in stock, 3 axis, exclusively accelerometer/gyro chip listed on Digikey's website (\$5.39 at the time of the writing). The most expensive is the &lt;a href=&quot;https://www.digikey.com/product-detail/en/analog-devices-inc/ADIS16477-3BMLZ/ADIS16477-3BMLZ-ND/7932994&quot; rel=&quot;nofollow noreferrer&quot;&gt;Analog Devices ADIS16477-3BMLZ&lt;/a&gt; (\$610.95 at the time of writing). The &lt;a href=&quot;http://www.analog.com/media/en/technical-documentation/data-sheets/ADIS16477.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;datasheet for that sensor&lt;/a&gt; gives the random walk as 0.15 $^{\circ}/\sqrt{hr}$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;One minute is 0.0167 hours, so after one minute the gyro standard deviation is $0.15\sqrt{0.0167} = 0.0194 \mbox{deg}$. After two minutes, the standard deviation is $0.15\sqrt{2/60} = 0.0274 \mbox{deg}$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For your six hour run, the cheapest IMU has a standard deviation of $0.07\sqrt{6*3600*200} = 145.5 \mbox{deg}$, and the most expensive has a standard deviation of $0.15\sqrt{6} = 0.367 \mbox{deg}$. Keep in mind that 95% of samples should fall within +/- 2 standard deviations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And, since I started writing this post, &lt;a href=&quot;https://robotics.stackexchange.com/a/16299/9720&quot;&gt;benh has written an answer&lt;/a&gt; that says, in part,&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;An IMU will not drift as the accelerometers will always read against gravity.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This is true if you're using accelerometers, but it will only fix the horizontal axes (typically x/y, roll/pitch). Gravity acts along the vertical axis, so rotations about the vertical axis (heading/yaw) aren't able to use the gravity vector as a means of absolute orientation reference. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2018-08-30T14:12:47.430" LastActivityDate="2018-08-30T14:12:47.430" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16303" PostTypeId="1" CreationDate="2018-08-30T09:05:38.863" Score="0" ViewCount="179" Body="&lt;p&gt;I have some 50ms latency cameras at hand and a  800Hz IMU (gyro+accelerometer+magnetometer). I would like to know how exactly how I should do a sensor fusion of such an IMU and camera to fix the positional data from the IMU positional drift. I'm not able to find much resources online.&#xA;The reason is that I don't want to go with just a camera  due to its 50ms latency.&#xA;​&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The optical markers for the camera can be LEDs, ORB-SLAM data or AruCo markers which I currently use and which add another few ms latency to the camera tracking.&#xA;​&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe there is even an existing library or documented implementation I can use?&#xA;​&lt;/p&gt;&#xA;" OwnerUserId="21091" LastEditorUserId="18235" LastEditDate="2018-08-30T09:09:52.137" LastActivityDate="2021-04-16T18:36:27.097" Title="How to do IMU and camera &quot;sensor fusion&quot; tracking?" Tags="&lt;imu&gt;&lt;cameras&gt;&lt;sensor-fusion&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16304" PostTypeId="2" ParentId="16303" CreationDate="2018-08-30T10:42:13.310" Score="0" Body="&lt;p&gt;The easiest platform for a multi-modal sensor fusion is a continuous-time trajectory model. Please have a look at this &lt;a href=&quot;https://github.com/ethz-asl/kalibr&quot; rel=&quot;nofollow noreferrer&quot;&gt;repo&lt;/a&gt; and related papers. I believe that it should be state of the art implementation of what you are looking for. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Temporal difference between sensors can be estimated through a windowed trajectory optimization. Asynchronicity as well.&lt;/p&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2018-08-30T10:42:13.310" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16305" PostTypeId="1" CreationDate="2018-08-30T16:28:35.680" Score="2" ViewCount="546" Body="&lt;p&gt;I am trying to tune my PID to make my motor have a consistent output:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;input(pidOutput) =&gt; 100rpm&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I used the following step to tune my PID:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Set all gains to zero.&lt;/p&gt;&#xA;  &#xA;  &lt;ol&gt;&#xA;  &lt;li&gt;Increase the P gain until the response to a disturbance is steady oscillation.&lt;/li&gt;&#xA;  &lt;li&gt;Increase the D gain until the the oscillations go away (i.e. it's critically damped).&lt;/li&gt;&#xA;  &lt;li&gt;Repeat steps 2 and 3 until increasing the D gain does not stop the oscillations.&lt;/li&gt;&#xA;  &lt;li&gt;Set P and D to the last stable values.&lt;/li&gt;&#xA;  &lt;li&gt;Increase the I gain until it brings you to the setpoint with the number of oscillations desired (normally zero but a quicker response&#xA;  can be had if you don't mind a couple oscillations of overshoot)&lt;/li&gt;&#xA;  &lt;/ol&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As I do not know the values of PID i should increase,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I started with a value of P = 0.2, D = 0 and this resulted in an output of about 36~38 RPM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then I increased P = 0.3, D= 0 and the output goes to about 42~46 RPM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I then had to slowly increase my D till i found a sweet spot eg, D=0.2 till the range of RPM goes from 44~46 RPM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After about 3 hours, I only achieved the range of about 60~62 and it is really frustrating as it is really slow and I have 2 motors and have not even tune one motor.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I have a few doubts which is:&lt;/p&gt;&#xA;  &#xA;  &lt;ol&gt;&#xA;  &lt;li&gt;Am I tuning wrongly as it is taking too long and far from my target of 100rpm.&lt;/li&gt;&#xA;  &lt;li&gt;And how much of a range for RPM is counted as unacceptable? I have two motors with a PID on it's own, Would a difference of 2 RPM on each&#xA;  wheel cause the car to go sideways?&lt;/li&gt;&#xA;  &lt;li&gt;After tuning (with the I gain), what output am I expected to see? will it be an output of a constant 100rpm? Or will it be 99~101 for&#xA;  example&lt;/li&gt;&#xA;  &lt;/ol&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The PID code I used:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;double pidtune1(double rpm){&#xA;  double kp, ki, kd, p, i, d, error, pid;&#xA;  kp = 0.79;&#xA;  ki = 0;&#xA;  kd = 0.6395;&#xA;&#xA;  error = 100 - rpm1;&#xA;  integral += error;&#xA;  p = kp*error;&#xA;  i = ki*integral;&#xA;  d = kd*(prevRPM - rpm);&#xA;  prevRPM = rpm;&#xA;  pid = p+i+d;&#xA;  return pid;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Called By:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;while (distance &amp;lt; 100)&#xA;{&#xA;  pid_output1=pidtune1(rpm1);&#xA;  pid_output2=pidtune1(rpm2);&#xA;  md.setSpeeds(pid_output1, pid_output2);&#xA;  recalculateRPMs();&#xA;}&#xA;&#xA; md.setBrakes(400,400);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="21095" LastEditorUserId="21095" LastEditDate="2018-08-30T18:27:49.153" LastActivityDate="2018-08-30T18:27:49.153" Title="Problem with tuning PID for motor" Tags="&lt;arduino&gt;&lt;control&gt;&lt;pid&gt;&lt;c&gt;&lt;tuning&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16306" PostTypeId="2" ParentId="16305" CreationDate="2018-08-30T17:22:04.793" Score="2" Body="&lt;p&gt;Your goal is a bit unclear. In the sense that you don't really care about your motor control input, what you want is a given rotational velocity. the pid is going to give you the command (motor input) to achieve it given the desired one and the current one (plus derivative). Most likely this command is going to be a PWM signal which will be fed to a motor controller (the electronic card)  which converters it to the given voltage at the motor input. &#xA;Note that if you want to prevent damage you should saturate your PID output to be sure not to damage the motor with crazy commands.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Am I tuning wrongly as it is taking too long and far from my target of 100rpm.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Your timeline seem rather excessive to me, you should be able to converge way faster. I would suggest to increase the P gain at a faster rate and/or to higher values.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I have two motors with a PID on it's own, Would a difference of 2 RPM on each wheel cause the car to go sideways?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This mostly depends on your robot geometry (wheel size, inter wheel distance). If you goal is to go straight you should have a control loop (PID) ensuring it instead of trying  to feedforward the same wheel velocities.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;After tuning (with the I gain), what output am I expected to see? will it be an output of a constant 100rpm? Or will it be 99~101 for example&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;After the initial transient you should reach a steady state, if you have no noise arising from your current wheel velocity measurement. Otherwise the noise while change the proportional error and thus propagate in your PID output&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2018-08-30T17:22:04.793" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16307" PostTypeId="2" ParentId="16305" CreationDate="2018-08-30T18:16:00.757" Score="2" Body="&lt;p&gt;Welcome to &lt;em&gt;Robotics&lt;/em&gt;, Bloopie Bloops! You haven't stated what platform/language this is, so I'll just give some illustrative pseudo code. As &lt;a href=&quot;https://robotics.stackexchange.com/questions/16305/problem-with-tuning-pid-for-motor#comment26468_16305&quot;&gt;Mark Booth mentioned&lt;/a&gt;, the typical way to evaluate/critique controller performance is by plotting the reference and output values together.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are several glaring issues with your code, so I'll go over those. You're defining the gains okay, so I'll just repost the remainder of your code here for easy reference:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;double pidtune1(double rpm){&#xA;  &amp;lt;define kp, ki, kd&amp;gt;&#xA;&#xA;  error = 120 - rpm1;&#xA;  integral += error;&#xA;  p = kp*error;&#xA;  i = ki*integral;&#xA;  d = kd*(prevRPM - rpm);&#xA;  prevRPM = rpm;&#xA;  pid = p+i+d;&#xA;  return pid;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The first problem is that there's no sample time involved. If your PID controller is running on an interrupt, which would mean the controller gets called on a fixed and repeatable interval, then it is &lt;em&gt;possible&lt;/em&gt; to &quot;roll&quot; the sample time into the gains. However, this prevents you from using PID tuning guides like &lt;a href=&quot;https://en.wikipedia.org/wiki/Ziegler%E2%80%93Nichols_method&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ziegler-Nichols&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider the following:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\mbox{D term} = k_P(\Delta \mbox{Error}/\Delta t) \\&#xA;\mbox{D term} = \hat{k}_P \Delta\mbox{Error} \\&#xA;\hat{k}_P = k_P/\Delta t&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You're (kind of) using the &quot;hat&quot; terms, $\hat{k}_I$ and $\hat{k}_P$, but again now the relationship between those terms is skewed such that you can't just set one as some empirical constant times another. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the sample time is known (you know the interrupt interval), then you can hard-code it as a constant. If the sample time is not known, then you &lt;strong&gt;need&lt;/strong&gt; to use a timer to evaluate how much time has elapsed since the previous loop. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Changes in logic flow/branches, state machines, communication delays, sensor delays, etc. can all affect when the controller is called. You need to account for those delays. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could implement a timer with either a function call to something like &lt;a href=&quot;https://community.particle.io/t/elapsedmillis-and-elapsedmicros-library/2653&quot; rel=&quot;nofollow noreferrer&quot;&gt;elapsedMicros()&lt;/a&gt; or by making a variable retain its value across function calls and polling the current time:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;double pidtune1(&amp;lt;inputs&amp;gt;){&#xA;  static double prevTime = 0.0f;&#xA;  double currentTime = micros();&#xA;  double  dT = (currentTime - prevTime)*0.000001f;&#xA;  // or double dT = getMicros()*0.000001f;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Next, you need to calculate the error term correctly. Currently, you're passing an input of &lt;code&gt;rpm&lt;/code&gt;, but your &lt;code&gt;error = 120 - rpm1&lt;/code&gt;. I would guess that &lt;code&gt;rpm&lt;/code&gt; is probably the reference speed, but &lt;em&gt;you don't provide a feedback speed!&lt;/em&gt; Where is &lt;code&gt;rpm1&lt;/code&gt; defined? Also a nit-picking kind of point, but I can't actually tell if &lt;code&gt;rpm&lt;/code&gt; is the reference or feedback by name alone. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider the following changes then:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;double pidtune1(double rpm_ref, double rpm_fbk){&#xA;  &amp;lt;define control gains&amp;gt;&#xA;  &amp;lt;define dT&amp;gt;&#xA;&#xA;  double error = (rpm_ref - rpm_fbk);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Finally, the last important thing to point out is that the integral and derivative terms should be the integral and derivative of the &lt;strong&gt;error&lt;/strong&gt; term. Your integral term is currently&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;integral += error;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Which should change to include the elapsed time &lt;code&gt;dT&lt;/code&gt; as:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;integral += error*dT;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But your derivative term is currently defined to be:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;(prevRPM - rpm)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This is where the actual definition of &lt;code&gt;rpm&lt;/code&gt; and/or the ambiguous name is especially problematic. Are you looking at the change in &lt;strong&gt;reference&lt;/strong&gt; speed, or are you looking at the change in &lt;strong&gt;feedback&lt;/strong&gt; speed? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regardless of the current intent, you need to be looking at the change in &lt;strong&gt;error&lt;/strong&gt;, not the reference &lt;em&gt;or&lt;/em&gt; feedback. That is, you should have:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;double derivativeError = (error - prevError)/dT;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Note the above line also has the current term minus the previous term.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Putting this all together, you should have a PID controller that looks more like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;double pidtune1(double rpm_ref, double rpm_fbk){&#xA;  // Define gains&#xA;  double kp, ki, kd;&#xA;  kp = 0.79;&#xA;  ki = 0;&#xA;  kd = 0.6395;&#xA;&#xA;  // Get elapsed time&#xA;  static double prevTime = 0.0f;&#xA;  double currentTime = micros();&#xA;  double dT = (currentTime - prevTime)*0.000001f;&#xA;  // or double dT = getMicros()*0.000001f;&#xA;  // or double dT = &amp;lt;your interrupt interval&amp;gt;;&#xA;&#xA;  // Evaluate errors&#xA;  static double integralError = 0.0f;&#xA;  static double prevError = 0.0f;&#xA;  double proportionalError = rpm_ref - rpm_fbk;&#xA;  integralError += proportionalError*dT;&#xA;  double derivativeError = (proportionalError - prevError)/dT;&#xA;&#xA;  // Apply gains&#xA;  double p = kp*proportionalError;&#xA;  double i = ki*integralError;&#xA;  double d = kd*derivativeError;&#xA;  double pid = p+i+d;&#xA;&#xA;  // Cleanup&#xA;  prevTime = currentTime;&#xA;  prevError = proportionalError;&#xA;  return pid;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Again, I'm not sure of your language or platform, so the specific implementations may be a bit off, but the content is there. Be sure to use &lt;code&gt;static&lt;/code&gt; or &lt;code&gt;persistent&lt;/code&gt;, etc. to ensure the variable is &quot;remembered&quot; across function calls. I get the feeling you may be using global variables to avoid the fact that they're otherwise wiped between function calls, but that gets messy in a hurry, mostly because you can't easily re-use functions - you'd need a second set of global variables instead of creating a new instance of your class. Using static variables keeps everything contained inside the scope of that particular function.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's all topics for another question, though. Hopefully the code above is enough to get you started. If not, please provide some graphs of the feedback speed versus the speed reference as Mark Booth mentioned and hopefully someone here can give you some more help :) &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-08-30T18:16:00.757" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16309" PostTypeId="1" CreationDate="2018-08-31T15:28:29.553" Score="0" ViewCount="262" Body="&lt;p&gt;I use Arduino Uno R3 connected to the Roomba Create 2 as in this picture &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/hfioX.jpg&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Arduino to Roomba connection&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hfioX.jpg&quot; alt=&quot;Arduino to Roomba connection&quot; title=&quot;Arduino to Roomba connection&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All the output commands for Arduino work fine but I have a problem from reading data  from Create 2 sensors: I get invalid/wrong sensor  sensor data every approximately 2 minutes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I tried to test with an empty program to check the incoming data from Roomba.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the code: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;SoftwareSerial.h&amp;gt;&#xA;#include &quot;roombaDefines.h&quot;&#xA;&#xA;int rxPin=10;  //yellow&#xA;int txPin=11;  //green &#xA;byte data1 ;&#xA;SoftwareSerial Roomba(rxPin,txPin);&#xA;&#xA;void setup() &#xA;{&#xA;  Roomba.begin(19200);&#xA;  Serial.begin(9600);&#xA;&#xA;  pinMode(ddPin, OUTPUT);&#xA;  delay(1000);&#xA;&#xA;  wakeUp ();   // Wake-up Roomba&#xA;  startSafe(); // Start Roomba in Safe Mode&#xA;  playSound(1);&#xA;  setPowerLED(128,255);&#xA;  Serial.println(&quot;Start&quot;);&#xA;}&#xA;&#xA;void loop() &#xA;{&#xA;&#xA; while(Roomba.available()&amp;gt;0)&#xA; {&#xA;  data1 = Roomba.read();&#xA;  Serial.println(data1);&#xA; }&#xA;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and I got this from Serial monitor approximately every two minutes &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Start&#xA;32&#xA;32&#xA;32&#xA;32&#xA;70&#xA;108&#xA;97&#xA;115&#xA;104&#xA;32&#xA;67&#xA;32&#xA;115&#xA;117&#xA;99&#xA;99&#xA;101&#xA;115&#xA;115&#xA;102&#xA;117&#xA;108&#xA;58&#xA;32&#xA;48&#xA;120&#xA;48&#xA;32&#xA;40&#xA;48&#xA;120&#xA;48&#xA;41&#xA;10&#xA;13&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I think this is the cause of the error in reading the sensor data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did anyone have this problem before ?&#xA;How can I avoid this and read correct sensor  data from Roomba ? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I see from another post that somebody had the same issue as me, see &lt;a href=&quot;https://robotics.stackexchange.com/questions/16281/irobot-create-2-flash-crc-message?noredirect=1#comment26782_16281&quot;&gt;iRobot Create 2 Flash CRC message&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/sMwZh.png&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Screenshot of previous post&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/sMwZh.png&quot; alt=&quot;Screenshot of previous post&quot; title=&quot;Screenshot of previous post&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;but I already tried op code 128 to start Roomba in OI mode and it still have the same issue &lt;/p&gt;&#xA;" OwnerUserId="20784" LastEditorUserId="9176" LastEditDate="2018-10-04T22:40:28.810" LastActivityDate="2018-12-22T17:02:45.553" Title="Get data without command anything from Roomba Create 2" Tags="&lt;arduino&gt;&lt;irobot-create&gt;&lt;serial&gt;&lt;roomba&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16311" PostTypeId="2" ParentId="16309" CreationDate="2018-09-01T03:09:45.697" Score="1" Body="&lt;p&gt;It is a message.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See this  page.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/ASCII#Printable_characters&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/ASCII#Printable_characters&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19143" LastActivityDate="2018-09-01T03:09:45.697" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16312" PostTypeId="2" ParentId="11332" CreationDate="2018-09-01T19:27:13.120" Score="0" Body="&lt;p&gt;I have the Roomba 671 from 2018 Prime Day, I had to pop the plastic top off with a screwdriver with some force. The ROI aerial port is on the front left of my model.&lt;/p&gt;&#xA;" OwnerUserId="21105" LastEditorUserId="9176" LastEditDate="2018-09-01T20:47:23.467" LastActivityDate="2018-09-01T20:47:23.467" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16313" PostTypeId="1" AcceptedAnswerId="16314" CreationDate="2018-09-02T02:04:49.633" Score="2" ViewCount="87" Body="&lt;p&gt;Suppose I want to mesh two identical gears (size and number of teeth). What would be the difference if both had 12 teeth versus both having 48? Assume the motor spins at the same speed in both scenarios.&lt;/p&gt;&#xA;" OwnerUserId="21108" LastEditorUserId="21108" LastEditDate="2018-09-02T03:45:55.947" LastActivityDate="2018-09-03T08:56:12.700" Title="What does the number of teeth in a gear determine (when meshing identical gears)?" Tags="&lt;gearing&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16314" PostTypeId="2" ParentId="16313" CreationDate="2018-09-02T08:39:40.663" Score="2" Body="&lt;p&gt;So, assuming that the more teeth that there are, the smaller the teeth become (and logically for gears with few teeth, the bigger the teeth are):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Big teeth:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Capable of handling higher load&lt;/li&gt;&#xA;&lt;li&gt;Capable of transmitting a greater force&lt;/li&gt;&#xA;&lt;li&gt;less likely to strip&lt;/li&gt;&#xA;&lt;li&gt;less precise&lt;/li&gt;&#xA;&lt;li&gt;greater tolerance&lt;/li&gt;&#xA;&lt;li&gt;more sliding friction&lt;sup&gt;1&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;greater backlash&lt;/li&gt;&#xA;&lt;li&gt;Less smooth movement&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Small teeth:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Less load capable (for a given material and gear thickness)&lt;/li&gt;&#xA;&lt;li&gt;Capable of transmitting a lesser force&lt;/li&gt;&#xA;&lt;li&gt;More likely to strip under heavy load (for a given material and gear thickness)&lt;/li&gt;&#xA;&lt;li&gt;More precise&lt;/li&gt;&#xA;&lt;li&gt;Tighter tolerance (more susceptible to defects, and misalignment, in the drive train)&lt;/li&gt;&#xA;&lt;li&gt;Less sliding friction&lt;sup&gt;1&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;Less backlash&lt;/li&gt;&#xA;&lt;li&gt;Smoother movement&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Data summarised from &lt;a href=&quot;https://www.thenakedscientists.com/forum/index.php?topic=42746.0&quot; rel=&quot;nofollow noreferrer&quot;&gt;Does the size of the teeth on a gear really matter?&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; Although, in the case that you describe, with a 1:1 ration the gears will be more geometrically perfect, and friction should be minimal&lt;/p&gt;&#xA;" OwnerUserId="9176" LastEditorUserId="9176" LastEditDate="2018-09-03T08:56:12.700" LastActivityDate="2018-09-03T08:56:12.700" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16316" PostTypeId="1" AcceptedAnswerId="16317" CreationDate="2018-09-02T14:29:42.363" Score="1" ViewCount="528" Body="&lt;p&gt;The Arduino turns off when I try to put the wire from the servo to its respective pin (9). Also, I've tried the code from the Arduino IDE, the knob code where the position of the motor depends on the value of the potentiometer. I don't really know what's wrong. Every time the servo tries to turn, the Arduino turns off, so the motor only turn for a very small degree, then the Arduino turns on, and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the way, I'm using an MG996R Tower Pro Digital Servo motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a problem with the motor or/and the Arduino? I can't seem to remedy this problem.&lt;/p&gt;&#xA;" OwnerUserId="21110" LastActivityDate="2018-09-02T14:59:15.347" Title="The Arduino Turns Off After Attaching A Servo Motor" Tags="&lt;arduino&gt;&lt;servomotor&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16317" PostTypeId="2" ParentId="16316" CreationDate="2018-09-02T14:59:15.347" Score="1" Body="&lt;p&gt;It sounds like you are drawing too much power from the Arduino, and causing it to reset. Try powering your servo from a separate power source.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Arduino Playground has a useful page on &lt;a href=&quot;https://playground.arduino.cc/Main/ArduinoPinCurrentLimitations&quot; rel=&quot;nofollow noreferrer&quot;&gt;Arduino Pin Current Limitations&lt;/a&gt; which you might find helpful if you're designing robots that use Arduinos.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;hr&gt;&#xA; A summary of the information for the Arduino Uno is given below:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Input Voltage Limits&lt;/strong&gt;:&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Recommended: 7~12V&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;Absolute: 6~20V&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Input/Output (I/O) pins: -0.5V to +5.5V (the actual max is “Vcc +&#xA;0.5V,” which for a 5V Arduino, is +5.5V)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Output Current Limits:&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;When powered by USB: total of 500mA&lt;/li&gt;&#xA;&lt;li&gt;With external battery or power supply: total of 500mA~1A&lt;/li&gt;&#xA;&lt;li&gt;5V pin: same as above: 500mA or 500mA~1A&lt;/li&gt;&#xA;&lt;li&gt;Each input/output pin: 40mA&lt;/li&gt;&#xA;&lt;li&gt;Sum of all input/output pins combined (but NOT including the “5V”&#xA;pin): 200mA&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="17029" LastActivityDate="2018-09-02T14:59:15.347" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16318" PostTypeId="1" CreationDate="2018-09-02T18:10:05.630" Score="2" ViewCount="110" Body="&lt;p&gt;&lt;strong&gt;My Code gives the following convergence characteristics, I wanted to know if it is correct&lt;/strong&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/NCbHT.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/NCbHT.jpg&quot; alt=&quot;Convergence for non-holonomic body 2000 iterations&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Updated code&lt;/p&gt;&#xA;&#xA;&lt;p&gt;{&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    %Basic RRT star algorithm for non-holonomic body with obstacles&#xA;    close all&#xA;    clc&#xA;   clear all&#xA;   %Map and Initialization Data&#xA;   x_max = 100;&#xA;y_max = 100;&#xA;obs1 = [30,0,20,20];&#xA;obs2=  [30,60,20,20];&#xA;EPS = 5; % Step Size&#xA;Iter = 2000;&#xA;&#xA;q_start.pos = [10 10];&#xA;q_start.cost = 0;&#xA;q_start.parent = 0;&#xA;q_start.child=[];&#xA;q_goal.pos = [90,90];&#xA;q_goal.cost = 1e9;&#xA;q_goal.child=[];&#xA;q_new.pos =[0,0];&#xA;q_new.cost=0;&#xA;q_new.parent=0;&#xA;q_new.child=[];&#xA;goal_reached=0;&#xA;tree(1) = q_start;&#xA;figure(1)&#xA;axis([0 x_max 0 y_max])&#xA;rectangle('Position',obs1,'FaceColor','b')&#xA;rectangle('Position',obs2,'FaceColor','b')&#xA;hold on&#xA;plot(q_start.pos(1),q_start.pos(2),'.','MarkerSize',10,'Color','m')&#xA;plot(q_goal.pos(1),q_goal.pos(2),'.','MarkerSize',10,'Color','b')&#xA;goal_nodes=[];&#xA;best_goal=[];&#xA;finalnodes=[];&#xA;  goals=0;&#xA;fc=[];&#xA;t=cputime;&#xA;for i=1:1:Iter&#xA;    q_rand=random_state(x_max,y_max);%Sampling a random state from the configuration space&#xA;    [q_near,val,idx] = nearest_neighbour(q_rand,tree); % Obtaining the nearest neighbour from the tree and its distance from q_rand&#xA;     q_new.pos=move(q_rand,q_near.pos,val,EPS);&#xA;&#xA; %Checking if goal has been reached    &#xA;  stat= distance(q_rand,q_goal.pos);&#xA;        if (stat&amp;lt;=4 &amp;amp;&amp;amp;~isCollision(q_rand,q_near.pos,obs1)&amp;amp;&amp;amp;~isCollision(q_rand,q_rand,obs2))&#xA;            goal_reached = 1;&#xA;            goals=goals+1;&#xA;            goal_nodes(goals,:)=q_rand;&#xA;            q_new.pos=q_rand;&#xA;        end&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;   if(~isCollision(q_new.pos,q_near.pos,obs1)&amp;amp;&amp;amp;~isCollision(q_new.pos,q_near.pos,obs2))&#xA;&#xA;   %line([q_near.pos(1), q_new.pos(1)], [q_near.pos(2), q_new.pos(2)], 'Color', 'k', 'LineWidth', 1);&#xA;        q_new.cost = distance(q_new.pos, q_near.pos) + q_near.cost;&#xA;&#xA;    % Within a radius of r, find all existing nodes&#xA;        q_nearest = [];&#xA;        r = 10;&#xA;        neighbor_count = 0;&#xA;        ni=[];&#xA;        for j = 1:1:length(tree)&#xA;            if (noCollision(tree(j).pos,q_new.pos,obs1)&amp;amp;&amp;amp;noCollision(tree(j).pos,q_new.pos,obs2)&amp;amp;&amp;amp;distance(tree(j).pos, q_new.pos) &amp;lt;= r)&#xA;                neighbor_count = neighbor_count+1;&#xA;                q_nearest(neighbor_count).pos = tree(j).pos;&#xA;                q_nearest(neighbor_count).cost = tree(j).cost;&#xA;                ni=[ni,j];&#xA;            end&#xA;        end&#xA;&#xA;        % Initialize cost to currently known value&#xA;        q_min = q_near;&#xA;        C_min = q_new.cost;&#xA;&#xA;        % Iterate through all nearest neighbors to find alternate lower&#xA;        % cost paths&#xA;&#xA;        for k = 1:1:length(q_nearest)&#xA;            if (q_nearest(k).cost + distance(q_nearest(k).pos, q_new.pos) &amp;lt; C_min)&#xA;                q_min = q_nearest(k);&#xA;                C_min = q_nearest(k).cost + distance(q_nearest(k).pos, q_new.pos);           &#xA;&#xA;            end&#xA;        end&#xA;&#xA;        % Update parent to least cost-from node&#xA;        for j = 1:1:length(tree)&#xA;            if tree(j).pos == q_min.pos  &#xA;                q_new.parent = j;&#xA;                q_new.cost = C_min;&#xA;                break&#xA;            end&#xA;        end&#xA;&#xA;&#xA;        % Add to tree&#xA;        tree = [tree,q_new];&#xA;        tree(q_new.parent).child=[tree(q_new.parent).child,length(tree)];&#xA;&#xA;      %Rewire&#xA;      %Iterate through all nearest neighbors to rewire them with lower cost&#xA;      %path&#xA;        for k = 1:1:length(q_nearest)&#xA;            if ( q_new.cost + distance(q_nearest(k).pos, q_new.pos) &amp;lt; q_nearest(k).cost)&#xA;                tree(ni(k)).parent=length(tree);&#xA;                tree(ni(k)).cost= q_new.cost + distance(q_nearest(k).pos, q_new.pos);&#xA;                updatecost(tree,ni(k)); %Update cost of children&#xA;&#xA;            end&#xA;        end   &#xA;   end&#xA;  best_cost=1e9; &#xA;  best_goalindex=0;&#xA;    if(goal_reached)&#xA;&#xA;for k=1:1:length(goal_nodes(:,2))&#xA;  for j = 1:1:length(tree)&#xA;      if(tree(j).pos(1)==goal_nodes(k,1)&amp;amp;&amp;amp;tree(j).pos(2)==goal_nodes(k,2)&amp;amp;&amp;amp;tree(j).cost&amp;lt;best_cost)&#xA;            best_goal=tree(j);&#xA;            best_cost=tree(j).cost;&#xA;            best_goalindex=j;&#xA;&#xA;      end&#xA;&#xA;  end    &#xA;end&#xA;&#xA;% Search backwards from goal to start to find the optimal least cost path&#xA;q_goal.parent = best_goalindex;&#xA;q_end = q_goal;&#xA;finalcost=0;&#xA;tree = [tree q_goal];&#xA;while q_end.parent ~= 0&#xA;    start = q_end.parent;&#xA;    finalcost=finalcost+distance(q_end.pos,tree(start).pos);&#xA;    plot(q_end.pos(1),q_end.pos(2),'*','Color','r')&#xA;    line([q_end.pos(1), tree(start).pos(1)], [q_end.pos(2), tree(start).pos(2)], 'Color', 'r', 'LineWidth', 2);&#xA;    hold on&#xA;    q_end = tree(start);&#xA;end&#xA;   finalnodes=[finalnodes,i];&#xA;   fc=[fc,finalcost];&#xA;   drawnow&#xA;    end&#xA;end&#xA;e=cputime-t&#xA;figure(2)&#xA;plot(finalnodes,fc);&#xA;title('RRT* Convergence')&#xA;xlabel('Iteration')&#xA;ylabel('Path Cost')&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="20789" LastEditorUserId="20789" LastEditDate="2018-09-03T22:44:33.853" LastActivityDate="2018-11-03T01:00:22.477" Title="RRT star Convergence" Tags="&lt;motion-planning&gt;&lt;matlab&gt;&lt;algorithm&gt;&lt;rrt&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16319" PostTypeId="2" ParentId="15947" CreationDate="2018-09-02T18:56:13.357" Score="2" Body="&lt;p&gt;Assuming you put your manipulator along the middle of the chess board, your &lt;/p&gt;&#xA;&#xA;&lt;p&gt;(link1 + link2)^2 &gt;= (28+6)^2+ (28/2)^2 &lt;/p&gt;&#xA;&#xA;&lt;p&gt;and &lt;/p&gt;&#xA;&#xA;&lt;p&gt;(link1 + link2)^2 &amp;lt;= 6^2 + (28/2)^2 &lt;/p&gt;&#xA;&#xA;&lt;p&gt;kinematically these two equations would suffice. you can choose any link1 and link2 values that satisfies the equation. But considering the dynamics it's preferable to choose l2 &amp;lt; l1&lt;/p&gt;&#xA;" OwnerUserId="20869" LastActivityDate="2018-09-02T18:56:13.357" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16321" PostTypeId="2" ParentId="15858" CreationDate="2018-09-03T09:15:57.670" Score="1" Body="&lt;p&gt;Ultrasonic means above audible range, &#xA;Sonar may be within the audible range &#xA;In my opinion the ultrasonic being more precise also may come with higher price.&lt;/p&gt;&#xA;" OwnerUserId="21119" LastEditorUserId="18235" LastEditDate="2018-09-03T10:21:34.693" LastActivityDate="2018-09-03T10:21:34.693" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16322" PostTypeId="1" CreationDate="2018-09-03T13:36:10.570" Score="0" ViewCount="121" Body="&lt;p&gt;I am making an indoor robot and in order to detect static and dynamic objects I have decided to go with ST VL53L1X ToF proximity sensor, here is the link:&#xA;&lt;a href=&quot;https://www.st.com/en/imaging-and-photonics-solutions/vl53l1x.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.st.com/en/imaging-and-photonics-solutions/vl53l1x.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is, will this sensor show me a 3D reconstruction of what the sensor actually sees by emitting a light? And what is the difference between this sensor and other 3D ToF cameras? &lt;/p&gt;&#xA;" OwnerUserId="21080" LastActivityDate="2018-09-04T14:22:34.730" Title="Object detection using ToF sensor" Tags="&lt;mobile-robot&gt;&lt;sensors&gt;&lt;laser&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16324" PostTypeId="2" ParentId="8128" CreationDate="2018-09-03T22:26:11.013" Score="2" Body="&lt;p&gt;n = Kv * Vin only when there is no load on the motor. When there is a load on the motor, like from a propeller, you will need to be a bit more clever.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a DC motor (which BLDC motors approximate by varying the Vin):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Torque = Kt * Vin / R - Ke * Kt * n / R&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Derivation example here: &lt;a href=&quot;https://electronics.stackexchange.com/questions/90933/torque-relationship-to-speed-in-a-dc-motor&quot;&gt;https://electronics.stackexchange.com/questions/90933/torque-relationship-to-speed-in-a-dc-motor&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back the the propeller:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Paero = Thrust * Vp = torque * n&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Vp = 0.5 * (Ve + Vac)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since velocity of the aircraft at hover is 0, Vp becomes 0.5 * Ve&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You actually used the Vp = 0.5 * (Ve + Vac) equation implicitly when you defined thrust. Those equations come from momentum theory. (Good read here: &lt;a href=&quot;https://web.mit.edu/16.unified/www/FALL/thermodynamics/notes/node86.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://web.mit.edu/16.unified/www/FALL/thermodynamics/notes/node86.html&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From there you can solve for Vin and then Iin. Do note, this is the current and voltage of the motor. The ESc will be pulling from a higher voltage and lower current (but same power ignoring ESC losses)&lt;/p&gt;&#xA;" OwnerUserId="21123" LastActivityDate="2018-09-03T22:26:11.013" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16325" PostTypeId="2" ParentId="16318" CreationDate="2018-09-03T23:08:05.183" Score="1" Body="&lt;p&gt;No, at every iteration your RRT* should give a more optimized path once it has found it. The fluctuations are strange. You should try to get a convergence similar to &lt;a href=&quot;https://www.researchgate.net/figure/Effect-of-path-rewiring-on-convergence-rate-and-path-length_fig6_259680822&quot; rel=&quot;nofollow noreferrer&quot;&gt;this one&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="19554" LastActivityDate="2018-09-03T23:08:05.183" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16327" PostTypeId="2" ParentId="16322" CreationDate="2018-09-04T14:22:34.730" Score="1" Body="&lt;p&gt;What do you mean when you say &quot;3D reconstruction?&quot; Lidar units will generally just return a line (or set of lines) of points. You index those points via the pose of the sensor platform and can build your own point cloud of return data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The item you linked is not a lidar unit&lt;/strong&gt;. It is a laser range finder. I didn't see any specs on measurement accuracy, and there are no specs on horizontal or vertical resolution. The device you linked emits a single beam and returns information on how far that beam traveled before contacting a surface.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's possible for you to have a mechanism (servos, etc.) that move this device around to create some custom scan, but even then it's a single point measuring at 50 Hz. You get 50 points per second. Most laser scanners generate tens to hundreds of thousands of points per second.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Again, the definition of &quot;3D reconstruction&quot; is up to you, but I don't think this sensor is what you're looking for. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-09-04T14:22:34.730" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16328" PostTypeId="1" AcceptedAnswerId="16330" CreationDate="2018-09-04T15:37:27.500" Score="0" ViewCount="110" Body="&lt;p&gt;I have been trying to read Roomba raw encoder counts I am receiving values, but I have a sudden increase/decrease in values as can be seen over here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;142 152&lt;/p&gt;&#xA;&#xA;&lt;p&gt;153  166&lt;/p&gt;&#xA;&#xA;&lt;p&gt;167  180&lt;/p&gt;&#xA;&#xA;&lt;p&gt;181  196&lt;/p&gt;&#xA;&#xA;&lt;p&gt;50101  33280&lt;/p&gt;&#xA;&#xA;&lt;p&gt;207  223&lt;/p&gt;&#xA;&#xA;&lt;p&gt;222  238&lt;/p&gt;&#xA;&#xA;&lt;p&gt;236  252&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;SoftwareSerial.h&amp;gt;&#xA;#include &amp;lt;Wire.h&amp;gt;&#xA;// Roomba Create2 connection&#xA;int rxPin = 10;&#xA;int txPin = 11;&#xA;SoftwareSerial Roomba(rxPin, txPin);&#xA;void setup() {&#xA;&#xA;pinMode(10, INPUT);&#xA;  pinMode(11, OUTPUT);&#xA;  pinMode(5, OUTPUT);&#xA;  Serial.begin(115200);&#xA;  Roomba.begin(19200);&#xA;  delay(1000);&#xA;    Roomba.write(128);  //Start&#xA;  Roomba.write(132);  //Full mode&#xA;  delay(1000);&#xA;}&#xA;char command;&#xA;void loop() {&#xA;&#xA;&#xA;&#xA;  if (Serial.available()){&#xA;    command=Serial.read();} &#xA;switch (command)&#xA;  {   &#xA;    case '8':&#xA;  Roomba.write(byte(145));&#xA;  Roomba.write(byte(0));&#xA;  Roomba.write(byte(0x28));&#xA;  Roomba.write(byte(0));&#xA;  Roomba.write(byte(0x28));&#xA;  delay(50);&#xA;  encoder_counts();&#xA;  break;&#xA;  case '0':&#xA;    Roomba.write(byte(145));&#xA;  Roomba.write(byte(0));&#xA;  Roomba.write(byte(0));&#xA;  Roomba.write(byte(0));&#xA;  Roomba.write(byte(0));&#xA;  break;&#xA;  }&#xA;}&#xA;&#xA;&#xA;&#xA;void encoder_counts()&#xA;{&#xA;   unsigned int  right_encoder;&#xA;    unsigned int   left_encoder;&#xA;   byte  bytes[4];   &#xA;&#xA;  Roomba.write(byte(149)); &#xA;  Roomba.write(byte(2));&#xA;  Roomba.write(byte(43));&#xA;  Roomba.write(byte(44));&#xA;  delay(50);&#xA;   int i=0;&#xA;while(Roomba.available()) { &#xA;  bytes[i++]=Roomba.read();&#xA;left_encoder = (unsigned int)(bytes[0] &amp;lt;&amp;lt; 8)|(unsigned int)(bytes[1]&amp;amp;0xFF); &#xA;right_encoder =(unsigned  int)(bytes[2] &amp;lt;&amp;lt; 8)|(unsigned int)(bytes[3]&amp;amp;0xFF);&#xA;}  &#xA;&#xA;&#xA;&#xA;Serial.print(right_encoder);&#xA;Serial.print(&quot;  &quot;);&#xA;Serial.println(left_encoder);&#xA;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;so please kindly advice, Thank you&lt;/p&gt;&#xA;" OwnerUserId="21130" LastEditorUserId="21130" LastEditDate="2018-09-05T21:13:51.453" LastActivityDate="2018-09-05T21:13:51.453" Title="Roomba 500 Series - Raw encoder counts readings" Tags="&lt;roomba&gt;&lt;quadrature-encoder&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16330" PostTypeId="2" ParentId="16328" CreationDate="2018-09-04T20:59:48.050" Score="1" Body="&lt;p&gt;Welcome to &lt;em&gt;Robotics&lt;/em&gt;, Ahmed. You have posted the code you use to &lt;em&gt;build&lt;/em&gt; the encoder counts, but not the code you used to &lt;em&gt;display&lt;/em&gt; the counts. I mention this because you have the encoder counts displayed in your post as:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;13786.00 13938.00&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;as in, &lt;em&gt;with a trailing decimal&lt;/em&gt;, but your encoder counts are defined in your code to be &lt;em&gt;integers&lt;/em&gt;. This could be problematic if the &lt;code&gt;print&lt;/code&gt; function is treating your two-byte integer as the &lt;em&gt;first&lt;/em&gt; two bytes of a floating point number.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second issue it looks like you've got is that you're defining your encoder variables as &lt;code&gt;int&lt;/code&gt; instead of &lt;code&gt;unsigned int&lt;/code&gt;. Per &lt;a href=&quot;https://www.irobot.lv/uploaded_files/File/iRobot_Roomba_500_Open_Interface_Spec.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;the manual&lt;/a&gt;, &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;encoder [count] is returned as an unsigned 16-bit number, high byte&#xA;  first&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Try redefining your &lt;code&gt;right_encoder&lt;/code&gt; and &lt;code&gt;left_encoder&lt;/code&gt; as &lt;code&gt;unsigned int&lt;/code&gt;, and then also try changing the formatting in your &lt;code&gt;print&lt;/code&gt; command to something like &lt;code&gt;Serial.print(right_encoder)&lt;/code&gt; instead of &lt;code&gt;Serial.print(right_encoder, 2)&lt;/code&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If that doesn't work, please &lt;em&gt;edit your question&lt;/em&gt; to post the code you're using to display the values. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-09-04T20:59:48.050" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16331" PostTypeId="1" CreationDate="2018-09-05T02:01:58.653" Score="3" ViewCount="156" Body="&lt;p&gt;I have a thesis work about Graph Slam &lt;a href=&quot;http://robots.stanford.edu/papers/thrun.graphslam.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;The GraphSLAM&#xA;Algorithm with Applications to Large-Scale Mapping of Urban Structures&#xA;&lt;/a&gt;&#xA; I try to implement it with the help of this paper but during the implementation stage I came to know that it requires a huge memory space if your dataset is huge. It is a offline slam algorithm so everything that it computes store in the memory. So basically  for this boundary, I fail to implement it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next, I am looking for a alternative solution and from &lt;a href=&quot;https://docs.ufpr.br/~danielsantos/ProbabilisticRobotics.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Probabilistic Robotics&lt;/a&gt;&#xA;I got one name &lt;strong&gt;Sparse extended Information Filter&lt;/strong&gt; which is referred as online algorithm of GraphSlam.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To implement SEIF, &lt;a href=&quot;https://www.youtube.com/watch?v=iNz7zlRKb3M&quot; rel=&quot;nofollow noreferrer&quot;&gt;Lectures on Youtube&lt;/a&gt; is very helpful. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This picture define motion update for SEIF slam&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/eAy1n.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/eAy1n.png&quot; alt=&quot;Motion Update&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;How many time this algorithm iterate?&lt;/strong&gt;. There is no looping concept.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From line 9, I understand that $\Omega$ is a 33*33 matrix if I have a 15 landmark. 1st 3*3 matrix for pose update and rest of them is for landmarks. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For line 10, I understand that Xi is also a (3*3) matrix. Am I correct? But as per the algorithm develop Xi should be a (3*1) dimension matrix. $\bar\Omega_tF_x^t\delta_t$ represent a 3*3 dimension matrix. As per matrix addition both matrix must have same dimension for addition. The resultant matrix also have same dimension with additive matrix. So, I understand Xi is a 3*3 matrix. &lt;strong&gt;What is the signification of Xi? What should represent using 3*3 matrix block?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is describe that &lt;strong&gt;Just like the EKF, the SEIF integrates out past robot poses and only maintains a posterior over the present robot pose and map&lt;/strong&gt;.Can any one clarify this line with respect to this algorithm?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If in a data set 1st 500 data are only the odometer data and from 501 measurement data are integrated then how does the algorithm work? &lt;strong&gt;Which blocks updated time to time?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="20610" LastEditorUserId="20610" LastEditDate="2018-09-11T00:15:55.183" LastActivityDate="2021-02-18T20:04:00.353" Title="SEIF ,online version of Graph slam create doubt in Motion Update state" Tags="&lt;mobile-robot&gt;&lt;slam&gt;&lt;localization&gt;&lt;kalman-filter&gt;&lt;motion&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16332" PostTypeId="2" ParentId="16118" CreationDate="2018-09-05T05:19:36.683" Score="0" Body="&lt;p&gt;It is possible to use mumetal to shield the magnetic field of the motor from affecting the magnetometer. The magnetometer should not be shielded though, because any shielding will prevent the earths magnetic field from reaching the magnetometer.&lt;/p&gt;&#xA;" OwnerUserId="2111" LastActivityDate="2018-09-05T05:19:36.683" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16333" PostTypeId="2" ParentId="14071" CreationDate="2018-09-05T07:23:54.683" Score="0" Body="&lt;p&gt;The average current consumed by the stepper motors is what is most important for sizing the power supply.  The peak current listed in the datasheet is only achieved for a brief period during the motor coil charge cycle.  Not only that, the charge on one motor coil will recirculate and end up charging the other coil.  Back EMF is also captured in the driver's capacitors which also ends up charging the motor coils.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Rule of thumb:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Power_supply_current = number_of_motors * 1/3 * motor_peak_current&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;for typical motors wired bipolar series.  However, if you have an 8 wire motor and have wired it bipolar parallel then you will need to double the value calculated above.  There is no need to go above this value.  The estimate already contains a healthy margin of error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In testing, I have found that stepper motors often draw an average current about 1/4-1/5 of the rated peak current when idle or running slowly.  This goes up at midrange speeds and then drops off at higher speeds.  The current goes up in the middle, not because the motor is getting more power, but because of energy losses.  It goes down at high speeds as increasing back EMF cancels out the incoming voltage from the power supply.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So finally, to answer the original question.  You should only need about 0.33A to run &lt;strong&gt;all three&lt;/strong&gt; motors, assuming they are wired bipolar parallel and your driver does not have any gross inefficiencies.&lt;/p&gt;&#xA;" OwnerUserId="21133" LastActivityDate="2018-09-05T07:23:54.683" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16334" PostTypeId="1" AcceptedAnswerId="16335" CreationDate="2018-09-05T14:23:47.703" Score="0" ViewCount="118" Body="&lt;p&gt;I'm a beginner in robotics and so far followed the lecture series by Prof. Oussama Khatib and some blogs and papers. currently I'm following this &lt;a href=&quot;https://studywolf.wordpress.com/2013/09/17/robot-control-4-operation-space-control/&quot; rel=&quot;nofollow noreferrer&quot;&gt;studywolf&lt;/a&gt; blog. in the end I plan on building a simple robot arm capable of moving a weight. since all questions I have are regarding the lagrange equation, I'll ask all here.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;blog says that we can ignore the Coriolis and centrifugal part of the equation and instead use a PD controller. is it OK?&lt;/li&gt;&#xA;&lt;li&gt;&quot;we’re actually going to have a PD controller for each joint.&quot; does that mean different $kp$, $kv$ values to each joint in a matrix form? or separate equations for each joint?&lt;/li&gt;&#xA;&lt;li&gt;the control signal here is the torque. does that mean I need to have a current feedback(torque feedback) or is it just feedback from encoder (speed and position required for PD controller) and current feed-only?&lt;/li&gt;&#xA;&lt;li&gt;when practically implementing this, do I need a current-mode pwm to apply the torque or is a voltage pwm is enough?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="21136" LastEditorUserId="2289" LastEditDate="2018-09-07T01:07:11.977" LastActivityDate="2018-09-07T01:07:11.977" Title="PID control related to lagrange equation" Tags="&lt;control&gt;&lt;pid&gt;&lt;dynamics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16335" PostTypeId="2" ParentId="16334" CreationDate="2018-09-05T19:36:11.580" Score="0" Body="&lt;p&gt;Welcome to &lt;em&gt;Robotics&lt;/em&gt;, kingKong. Your question title makes it seem as though you're going to ask about Lagrange equations, but the content all appears to be about PID controls. I'm not sure if you had meant to include some other content or not. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding your questions:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;1) blog says that we can ignore the Coriolis and centrifugal part of the equation and instead use a PD controller. is it ok?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As with any other term (friction, mass, etc.), it's okay to ignore it if it's negligible. If leaving those terms off has a big impact on your control performance then obviously you need to include them. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;2) &quot;we’re actually going to have a PD controller for each joint.&quot; does that mean different kp, kv values to each joint in a matrix form? or seperate equations for each joint?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It depends on how you're doing the controls. You could, for example, try to implement a feed-forward controller and use the PID controller to correct for any error in your feed-forward estimate of the required control torque (friction, etc.). In that case, if the point of the PID controller is to make minor corrections to a pre-existing controller's output, then you could probably use the same controller for each joint. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're looking to do the complete controller with just a PID controller, then (1) I'm not sure why you're looking at Lagrange equations at all, and (2) you &lt;em&gt;would need&lt;/em&gt; a different controller for each joint. A shoulder joint would typically see the mass of the load/end effector acting across a longer effective distance than the wrist joint would. This means the shoulder joint has a higher moment of inertia (&lt;a href=&quot;https://en.wikipedia.org/wiki/Parallel_axis_theorem#Mass_moment_of_inertia&quot; rel=&quot;nofollow noreferrer&quot;&gt;parallel axis theorem&lt;/a&gt; states the moment of inertia increases by distance &lt;strong&gt;squared&lt;/strong&gt;). Higher inertias at the joint means you'll need higher gains to get higher torques to move said inertia. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;3) the control signal here is the torque. does that mean I need to have a current feedback(torque feedback) or is it just feedback from encoder (speed and position required for PD controller) and current feed-only?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The reference/feedback signal doesn't need to be the same units or physical signal as the control signal. Cruise control in a car uses desired speed and actual speed, and it sends a control signal of throttle position to the engine. The engine (plant) &quot;converts&quot; throttle position to torque and that generates the acceleration to change the speed. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Same deal for you - you could have joint position as feedback and a desired position as reference, the PID controller acts on position error and generates a current reference as an output. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;4) when practically implementing this, do i need a current-mode pwm to apply the torque or is a voltage pwm is enough?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I don't think it matters. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-09-05T19:36:11.580" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16339" PostTypeId="1" AcceptedAnswerId="16355" CreationDate="2018-09-07T00:57:52.583" Score="0" ViewCount="134" Body="&lt;p&gt;I have some doubt on EKF Slam with known correspondence in the measurement update state. I follow the algorithm from &lt;a href=&quot;https://docs.ufpr.br/~danielsantos/ProbabilisticRobotics.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Probabilistic Robotics&lt;/a&gt; by Sebastian THRUN. This Algorithm is on Chapter 10 page No:249 of this books. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I attached a snapshot of my doubt.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/zOSrp.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zOSrp.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this algorithm line No: 10 and 12 create some doubts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to know  what is $\bar\mu_{t,x}$ and $\bar\mu_{t,y}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As per my understanding, it is the robot position in the given timestamp when it sees landmarks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I have some confusion, so it would be very helpful for me if anyone could clarify line 10,12.&lt;/p&gt;&#xA;" OwnerUserId="20610" LastEditorUserId="18235" LastEditDate="2018-09-07T07:14:33.807" LastActivityDate="2018-09-12T00:52:14.907" Title="EKF Slam algorithm doubt at observation update" Tags="&lt;mobile-robot&gt;&lt;slam&gt;&lt;motion-planning&gt;&lt;ekf&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16341" PostTypeId="1" AcceptedAnswerId="16351" CreationDate="2018-09-07T18:32:36.953" Score="2" ViewCount="102" Body="&lt;p&gt;I studied about Sparse Extended Information Filter slam. I want to clarify some points regarding this topic. As per the sparse extended information(SEIIF) slam when the robot sees some landmarks it can update the information matrix according to it's position and landmarks number. Lets the robot at $x_t$ position and sees landmarks $m_1$ and $m_2$. So according to the algorithm it update rows and columns of $x_t$,$m_1$,$m_2$. Then it move and at $x_{t+1}$ position it sees landmark $m_3$ ,then it update rows and columns of $x_{t+1}$,$m_3$ and also there is a weak link between $m_1$ , $m_2$, $m_3$. At the $x_{t+1}$ position it discard previous position and the rows and columns corresponding to $x_t$. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now my doubts is that what happened with the information matrix when the robot moving around to arena without observing any landmarks.Say, $x_1$ is the robot initial position then it go to the next position say, $x_2$ then as per the algorithm $x_1$ position will be discard. So if the robot only moving around without observing landmarks means only the 1st cell of information matrix say(0,0) is overwrite all the time. Then what is its effect on $\mu$?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The key formula on which the algorithm based is $\mu=\Omega^{-1}Xi$ where $\Omega$ represent information matrix and Xi represent information vector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The algorithm taken from &lt;a href=&quot;https://docs.ufpr.br/~danielsantos/ProbabilisticRobotics.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Probabilistic Robotics&lt;/a&gt; Chapter 12 page 315[pdf] and page 304[hard copy].&lt;/p&gt;&#xA;" OwnerUserId="20610" LastActivityDate="2021-02-18T08:28:14.710" Title="SEIF slam: Effect on information matrix when there is no landmarks" Tags="&lt;mobile-robot&gt;&lt;slam&gt;&lt;kalman-filter&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16342" PostTypeId="1" CreationDate="2018-09-07T21:10:45.827" Score="2" ViewCount="355" Body="&lt;p&gt;I am looking into building a self-docking robot that can charge itself when needed. To accelerate the prototyping phase, I am considering &lt;a href=&quot;https://www.waveshare.com/product/AlphaBot2-Pi3-B-Plus.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;AlphaBot2&lt;/a&gt; with Raspberry Pi 3 B+ as a development platform. I have two main concerns:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) &lt;a href=&quot;https://www.waveshare.com/wiki/AlphaBot2-Pi&quot; rel=&quot;nofollow noreferrer&quot;&gt;AlphaBot2 docs&lt;/a&gt; have very little information on power consumption and providing an alternative battery source. I am worried about the tightly designed PCB not providing a way to charge the battery pack or add an alternative power source. Does anybody have experience with this kit?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) Would an inductive charging set &lt;a href=&quot;https://www.adafruit.com/product/1407&quot; rel=&quot;nofollow noreferrer&quot;&gt;like this one&lt;/a&gt; be able to charge a 3.7V Li-Po or Li-Ion battery through the &lt;a href=&quot;https://www.adafruit.com/product/1944&quot; rel=&quot;nofollow noreferrer&quot;&gt;PowerBoost 500 charger&lt;/a&gt;? I don't care about charge-time being too long, as long as it's possible since I am more interested in the software challenge of finding the dock and aligning with it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I appreciate any guidance and information you can provide. Thank you!&lt;/p&gt;&#xA;" OwnerUserId="21151" LastActivityDate="2018-09-09T14:30:48.613" Title="Inductive Charging for Alphabot" Tags="&lt;mobile-robot&gt;&lt;raspberry-pi&gt;" AnswerCount="1" CommentCount="5" ClosedDate="2018-09-10T17:28:40.450" ContentLicense="CC BY-SA 4.0" />
  <row Id="16345" PostTypeId="2" ParentId="16342" CreationDate="2018-09-09T14:30:48.613" Score="1" Body="&lt;p&gt;Answering you direct question:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;AlphaBot2 docs have very little information on power consumption&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;A RaspberryPi is a full blown computer.  As such you can expect a fraction of the battery time if you run something like OpenCV compared with sitting idle.  So, the power consumption is very dependent on the application.  Adding more features such as keeping the robot in motion and running the WiFi radio adds to the power consumption.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Would an inductive charging set like this one be able to charge a 3.7V&#xA;  Li-Po or Li-Ion battery through the PowerBoost 500 charger?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;USB 2.0 only supports up to 500mA.  The inductive link you pointed to appears to provide up to 500mA under ideal conditions. &lt;/p&gt;&#xA;" OwnerUserId="17364" LastActivityDate="2018-09-09T14:30:48.613" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16346" PostTypeId="2" ParentId="15208" CreationDate="2018-09-09T16:53:57.753" Score="0" Body="&lt;p&gt;This is the only Vagrant box I've found for &lt;code&gt;kinetic&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://app.vagrantup.com/pstizzy/boxes/ubuntu-xenial64-ros-kinetic-desktop-full&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://app.vagrantup.com/pstizzy/boxes/ubuntu-xenial64-ros-kinetic-desktop-full&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="21158" LastActivityDate="2018-09-09T16:53:57.753" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16347" PostTypeId="1" CreationDate="2018-09-09T20:53:40.783" Score="0" ViewCount="1518" Body="&lt;p&gt;I am trying to put ROS on my Intel-based Ubuntu 18.04 laptop and it seems by the documentation that they only made if for Amd?  Am I missing something.  It never finds any of the packages.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unable to locate package ros-melodic-desktop-full.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any solutions except formating the machine and going back to 14.04&lt;/p&gt;&#xA;" OwnerUserId="15125" LastEditorUserId="15125" LastEditDate="2018-09-10T19:23:59.553" LastActivityDate="2018-10-10T20:00:15.223" Title="ROS for Ubuntu 18.04 and x86" Tags="&lt;ros&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16348" PostTypeId="2" ParentId="16347" CreationDate="2018-09-09T22:42:20.423" Score="2" Body="&lt;p&gt;amd64 is just a name for the 64-bit x86 architecture which the one used by both Intel and AMD processors, so you don't need to worry that it's AMD specific. Just go ahead and follow the usual steps for installing ROS (&lt;a href=&quot;http://wiki.ros.org/melodic/Installation/Ubuntu&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://wiki.ros.org/melodic/Installation/Ubuntu&lt;/a&gt;).&lt;/p&gt;&#xA;" OwnerUserId="12970" LastActivityDate="2018-09-09T22:42:20.423" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16349" PostTypeId="1" CreationDate="2018-09-10T02:12:38.727" Score="0" ViewCount="36" Body="&lt;p&gt;I am trying to decide between taking a compilers and interpreters course where we create an OpenGL shader compiler and a databases course. My aim is to go into robotics engineering and I am wondering which of these courses would provide the most benefit for that career path?&lt;/p&gt;&#xA;" OwnerUserId="20437" LastActivityDate="2018-09-10T06:21:18.107" Title="Is a compilers course or a databases course more relevant for robotics engineering?" Tags="&lt;software&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2018-09-10T18:21:26.930" ContentLicense="CC BY-SA 4.0" />
  <row Id="16350" PostTypeId="2" ParentId="16349" CreationDate="2018-09-10T06:21:18.107" Score="1" Body="&lt;p&gt;I think the database course is much more related to robotics than the compiler course. Almost every robot needs some kind of long term memory to store tasks, parameters or facts it learned about objects, itself or the environment. Compiler design for shaders is a much smaller niche and could maybe help you if you want to go into computer vision or visualization, but for a general roboticist I'd definitely go for the database course. &lt;/p&gt;&#xA;" OwnerUserId="23196" LastActivityDate="2018-09-10T06:21:18.107" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16351" PostTypeId="2" ParentId="16341" CreationDate="2018-09-10T16:42:44.020" Score="1" Body="&lt;p&gt;I'm not sure I fully understand the scope of your question - are you asking what happens if you don't have &lt;em&gt;any&lt;/em&gt; landmarks?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;SLAM is simultaneous &lt;em&gt;localization&lt;/em&gt; and &lt;em&gt;mapping&lt;/em&gt;. I don't think you can localize &lt;strong&gt;or&lt;/strong&gt; map without &lt;em&gt;any&lt;/em&gt; landmarks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Table 12.2 gives:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\bar{\mu}_t = \mu_{t-1} + F^T_x\delta \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;which is just the previous $\mu$ plus the incremental position change from motion $\delta$; $F_x$ is a block identity matrix. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Table 12.5 updates/corrects the state estimates as you mentioned, but $\mu$ and $\Omega$ get build in Table 12.3, the $\rm{\textbf{Algorithm SEIF_measurement_update}}$. Specifically, line 3 says:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\mbox{for all observed features } z^i_t= \left(r^i_t\ \ \phi^i_t\ \  s^i_t\right)^T \mbox{do}&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a loop, so if there are no observed features then it doesn't execute the code inside, which means line 5 never happens:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\mbox{if landmark } j \mbox{ never seen before} \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;which consequently means that line 6 also never gets called, which is where the the $\mu$ gets built:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\left(\begin{array}{ccc}&#xA;\mu_{j,x} \\&#xA;\mu_{j,y} \\&#xA;\mu_{j,s} &#xA;\end{array}\right) = \left(\begin{array}{ccc}&#xA;\mu_{t,x} \\&#xA;\mu_{t,y} \\&#xA;s^i_t &#xA;\end{array}\right) + r^i_t\left(\begin{array}{ccc}&#xA;\cos\left(\phi^i_t + \mu{t,\theta}\right) \\&#xA;\sin\left(\phi^i_t + \mu{t,\theta}\right) \\&#xA;0 &#xA;\end{array}\right)\\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, since $H^i_t$ isn't preallocated or predefined, it also fails to be built on line 11 (I'm not rewriting that definition here). Since $H^i_t$ isn't built, $\Omega_t$ and $\xi$ fail to update (lines 13 and 14).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, as mentioned at the top of the post, if you don't have any landmarks, $\mu$ never gets built, ever.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, if you don't &lt;em&gt;currently&lt;/em&gt; see any landmarks, then the same loop that has the potential to build $\mu$ never runs and you cannot &lt;em&gt;update&lt;/em&gt; $\mu$ (because $\xi$ and $\Omega$ don't get updated). &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-09-10T16:42:44.020" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16352" PostTypeId="1" CreationDate="2018-09-11T03:46:18.160" Score="1" ViewCount="31" Body="&lt;p&gt;I am working on &lt;strong&gt;Sparse Extended Information Slam&lt;/strong&gt;. I take the reference from &lt;a href=&quot;https://docs.ufpr.br/~danielsantos/ProbabilisticRobotics.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Probabilistic Robotics&lt;/a&gt;, by Dr.Sebastian Thrun (Chapter 12,page 303). I have some doubt about the implementation of the algorithm. There is a concept of &lt;strong&gt;passive landmark and active landmark&lt;/strong&gt;.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/RVv2Q.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/RVv2Q.png&quot; alt=&quot;Active and Passive Landmark&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As per the picture at $x_t$ position it sees $y_1$ and $y_2$ and update the matrix as per requirement. Now, lets say that the robot can see landmark $y_1$ again at $x_{t+10}$ position. Then the information matrix $\Omega$ change the $x_t$ vector as $x_{t+10}$ but what happened with the $y_1$ cells row and column? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I cannot figure it out after reading the algorithm several times. &lt;/p&gt;&#xA;" OwnerUserId="20610" LastEditorUserId="18235" LastEditDate="2018-09-11T06:54:22.397" LastActivityDate="2018-09-11T06:54:22.397" Title="Lost on SEIF Slam repeated update landmark" Tags="&lt;mobile-robot&gt;&lt;slam&gt;&lt;kalman-filter&gt;&lt;motion&gt;&lt;probability&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16354" PostTypeId="1" CreationDate="2018-09-11T20:46:18.413" Score="0" ViewCount="610" Body="&lt;p&gt;It is quite hard (or almost impossible for large robots) to hand code ROS robot definitions in URDF XML files, so that is why SolidWorks has model exporter &lt;a href=&quot;http://wiki.ros.org/sw_urdf_exporter&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://wiki.ros.org/sw_urdf_exporter&lt;/a&gt;. SolidWorks has open source alternatives like FreeCAD and Blender. My question is - does SolidWorks CAD-to-URDF exporters works from FreeCAD or maybe other open source CAD programs?&lt;/p&gt;&#xA;" OwnerUserId="809" LastActivityDate="2018-09-12T07:01:40.220" Title="Does SolidWorks CAD-to-URDF (ROS robot definition XML) exporter works from open source alternatives (e.g. FreeCAD, Blender) as well?" Tags="&lt;ros&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16355" PostTypeId="2" ParentId="16339" CreationDate="2018-09-12T00:52:14.907" Score="0" Body="&lt;p&gt;Line 10 just uses trigonometry to compute the position of the landmark μ¯j,xyz (left of equals sign) based on the current estimate of the robot's position μ¯t,xyz and the sensed range r and the sensor's line-of-sight angle phi.  This only happens the first time that it is seen by the sensor.  This initializes the state estimate for that landmark, as there is no other information to use at that point.  After that, there will always be an entry in the state matrix which represents an estimate of that landmark's position, and it will be further refined by multiple &quot;looks&quot; at the landmark.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Line 12 finds the 2D difference vector between the current estimate of the landmark's position μ¯j,xy and the filter's current estimate of the robot's position μ¯t,xy.  This is later used to estimate what the robot thinks a measurement of that landmark will be, and will be used to compare against any actual measurement of that landmark.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If by &quot;doubt&quot; you mean that you believe that these equations are incorrect, I can assure you that they have been vetted by many people.  However, there are some simplifications (such as a flat world) that usually results in a need for additional enhancements in a real-world application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My apologies if the math did not render correctly.  I am not sure how to do this.&lt;/p&gt;&#xA;" OwnerUserId="2546" LastActivityDate="2018-09-12T00:52:14.907" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16356" PostTypeId="2" ParentId="15070" CreationDate="2018-09-12T04:26:55.427" Score="0" Body="&lt;p&gt;Appearance-based SLAM methods model the set of discrete locations in a space and the existence of paths between these locations. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suggest you first read this paper &lt;a href=&quot;http://eia.udg.es/~qsalvi/papers/2009-CCIA.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Appearance based slam for mobile robot &lt;/a&gt;. Try to know the basic idea behind the appearance based slam.  &lt;/p&gt;&#xA;" OwnerUserId="20610" LastActivityDate="2018-09-12T04:26:55.427" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16357" PostTypeId="2" ParentId="16354" CreationDate="2018-09-12T07:01:40.220" Score="1" Body="&lt;p&gt;As it is the answer to your question is no.&#xA;It is developed, by the community, as a plugin specifically for SolidWorks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are a student the fastest workaround would be to get a free student license from SolidWorks. You can then try to export your project to SolidWorks and convert it or directly do it in Solidworks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Otherwise, for Blender there is the possibility to use &lt;a href=&quot;https://github.com/dfki-ric/phobos&quot; rel=&quot;nofollow noreferrer&quot;&gt;Phobos&lt;/a&gt;, another dedicated plugin. &#xA;I am not aware of a method to generate URDF automatically from FreeCAD. And I have no clue for BRL-CAD and OpenSCAD&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2018-09-12T07:01:40.220" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16359" PostTypeId="1" AcceptedAnswerId="16366" CreationDate="2018-09-12T15:27:55.307" Score="0" ViewCount="132" Body="&lt;p&gt;I'm trying to build a quadruped robot. I studied dynamics and to get an idea, I read and watched papers and videos related to robots like ALof and StarlETH and some more. But since this is my first project it would be pretty difficult to follow everything and technically I won't be able to, because of no prior experience.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To get to the problem, I'm stuck on choosing an actuation method. I plan to build the thing using aluminum and keep it lightweight. Hopefully 10kg and battery powered. so hydraulics is a no go. Currently I am on the designing stage. I have considered using dc geared motors directly on joints rather than -keeping on hip and transferring via gears and chains- to keep the design simple, but I guess it adds more strain on hip motors with my design. due to budgetary limitations and availability, I'm stuck with motors like XD37GB520 (currently 12v 100rpm but can change it) and no harmonic drivers or maxon motors. but I'm concerned with its ability to hold the weight of the robot. if I try to increase the torque capacity I lose angular velocity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have also considered about lead-screw and motor method. but have little or zero knowledge about it. I know that the linear actuation's speed depends on the number of threads per unit length of screw and rpm of the motor, but how should I estimated the torque of the motor and the torque or force that can be expected from the mechanism (something like rated and stall torques of DC motors, I suspect stall torque would just depend on screw joints to the leg links) does the torque of the motor only depend on the friction of the nut?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope to have the arrangement of motors as follows&lt;a href=&quot;https://i.stack.imgur.com/9dUBh.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9dUBh.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;left: 3 DoFs leg with DC geared motors on each joint top motor is parallel to the drawing-plan.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;right: same leg with lead-screw, top screw is in the plane&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;So how should I select a motor (torque rating) if I want to&#xA;implement lead screw and motor?  &lt;/li&gt;&#xA;&lt;li&gt;if I'm to stick with DC geared on joints, how much minimum rpm should I keep at a joint? (so that I can try to find a motor with that rpm and torque required).  &lt;/li&gt;&#xA;&lt;li&gt;what is better for this kind of thing dc geared or lead-screw?.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;PS: I'm still designing this and I still need to start implementing  Matlab or Simulink simulations. So I don't really know which rated torque will be required. I just need to decide on an actuation method to finish the design and move forward.&lt;/p&gt;&#xA;" OwnerUserId="21136" LastEditorUserId="18235" LastEditDate="2018-09-13T07:22:23.460" LastActivityDate="2018-09-13T14:31:59.450" Title="DC geared motors or leadscrew and motor for joints" Tags="&lt;motor&gt;&lt;mechanism&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16361" PostTypeId="1" CreationDate="2018-09-13T02:06:17.450" Score="1" ViewCount="80" Body="&lt;p&gt;I am trying to run RRT algorithm for motion planning for a quadrotor. The quadrotor ends up sometimes in corners without reaching the goal. I realized from sources online, that it is due to local minimum occuring. I want to know what is it and why they occur and avoid the quadrotor getting stuck in corners.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do effective methods exist to overcome local minima in smapling based motion planning algorithms?&lt;/p&gt;&#xA;" OwnerUserId="8916" LastEditorUserId="9720" LastEditDate="2018-09-14T14:23:29.590" LastActivityDate="2018-09-15T06:14:32.350" Title="sampling algorithms in motion planning and local minima" Tags="&lt;mobile-robot&gt;&lt;quadcopter&gt;&lt;robotic-arm&gt;&lt;wheeled-robot&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16363" PostTypeId="1" AcceptedAnswerId="16365" CreationDate="2018-09-13T11:48:56.570" Score="2" ViewCount="159" Body="&lt;p&gt;So I was browsing through the localization section and found this question and the code which answered it. &lt;a href=&quot;https://robotics.stackexchange.com/a/7932/21145&quot;&gt;https://robotics.stackexchange.com/a/7932/21145&lt;/a&gt; but I have a follow-up question to this. So the code is exactly what I need but my &quot;beacon&quot; isn't in the middle but in the front (image following). Do I have to change the code or is the solution implemented general enough, I am not quite sure? The beacon is marked as point A.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/HAqM4.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HAqM4.png&quot; alt=&quot;Robot from above&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: Code and clarification better showcase of beacon location&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I chose the mathematical convection and I took the code from the previous question and modified it. The heading is alligned with the x-Axis. Is it theoratically right?&#xA;So new it would be:&lt;br&gt;&#xA;&lt;strong&gt;A_x = M_x + cos(θ + (-25))*r&lt;br&gt;&#xA;A_y = M_y + sin(θ + (-25))*r&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;//current points&#xA;    float xc = -300;&#xA;    float yc = 300;&#xA;&#xA;//target points&#xA;&#xA;    float xt = -300;&#xA;    float yt = -300;&#xA;&#xA;//turning  angle&#xA;    float turnAngle;&#xA;&#xA;    //***************&#xA;    float beaconHeading = -25;&#xA;    float startingHeading = 0;&#xA;    float currentHeading = startingHeading + beaconHeading;&#xA;    //***************&#xA;&#xA;    //***************&#xA;    float turnRight = 1;&#xA;    float turnLeft = -1;&#xA;    float wheelBase = 39.5;&#xA;    float tireRadius = 7;&#xA;    float speedModifier = 0;&#xA;    float vRightMotor = 0;&#xA;    float vLeftMotor = 0;&#xA;    float vMotor = 0;&#xA;    float theta = 0;&#xA;    float distance = 0;&#xA;   //**************&#xA;&#xA;    void setup() {&#xA;    // pin setup&#xA;    Serial.begin(9600);&#xA;     }&#xA;&#xA;    void loop() {&#xA;    //*************&#xA;    destinationHeading = atan2((yt-yc), (xt-xc)); //calculate turning angle&#xA;    destinationHeading = destinationHeading * 180/3.1415; //convert to &#xA;    degrees&#xA;    turnAngle = destinationHeading - currentHeading;&#xA;    //*************&#xA;&#xA;    if (turnAngle &amp;gt; 180) {&#xA;    turnAngle = turnAngle-360;&#xA;    }&#xA;&#xA;    if (turnAngle &amp;lt; -180) {&#xA;    turnAngle = turnAngle+360;&#xA;    }&#xA;&#xA;    //***************&#xA;    if (turnAngle &amp;lt; 0) {&#xA;    speedModifier = turnRight;&#xA;    }&#xA;&#xA;    if (turnAngle &amp;gt; 0) {&#xA;    speedModifier = turnLeft&#xA;    }&#xA;&#xA;    theta = 0;&#xA;    while abs(abs(theta)-abs(turnAngle)) &amp;gt; 0&#xA;    {&#xA;    vRightMotor = speedModifier * &amp;lt;100 percent speed - varies by your &#xA;    application&amp;gt;;&#xA;    vLeftMotor = -speedModifier * &amp;lt;100 percent speed - varies by your &#xA;    application&amp;gt;;&#xA;    &amp;lt;send the vRightMotor/vLeftMotor speed commands to the motors&amp;gt;&#xA;    vMotor = vRightMotor;&#xA;    thetaDot = (tireRadius * vMotor) / (wheelBase/2);` &#xA;    theta = theta + thetaDot*dT;&#xA;    }&#xA;    &amp;lt;send zero speed to the motors&amp;gt;&#xA;&#xA;    currentHeading = destinationHeading;&#xA;    distance = sqrt((xt - xc)^2 + (yt - yc)^2);&#xA;    if (distance &amp;gt; 0) {&#xA;    // go forward&#xA;    }&#xA;    xc = xt;&#xA;    yc = yt;&#xA;    //****************&#xA;    }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I feel like I only had to change one line or am I wrong? I mean if I change the currentheading so that beacon is on a straight line with the next point it works. Maybe I didn't clarify it but I want to reach the next point so that the point A is the same as the point I'm heading to. I did make the angular offset a negative number because if I compare the angle to x-Axis it does go cw and not ccw, I tested it with geogebra and it is fine if I do it like this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The robot I use is a Arlo Complete Robot System so I could let the robot turn with other commands.&lt;/p&gt;&#xA;" OwnerUserId="21145" LastEditorUserId="21145" LastEditDate="2018-09-25T11:17:44.387" LastActivityDate="2018-09-25T11:17:44.387" Title="Follow up question to Robot path planning" Tags="&lt;arduino&gt;&lt;localization&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16365" PostTypeId="2" ParentId="16363" CreationDate="2018-09-13T13:37:36.390" Score="1" Body="&lt;p&gt;Welcome to &lt;em&gt;Robotics&lt;/em&gt;, Sentrinity! I'm glad the other answer helps! &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the other question, the beacon was being tracked by a camera to establish where the robot was located. I'm assuming your beacon is being used for the same purpose here. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm assuming that the distance from your robot's turning center $M$ and the beacon center $A$ is $r$, i.e. $r = \overline{MA}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'll need to be tracking your robot's heading in order to do any of the path planning as described in the other answer, but now you're stuck with additional task of relating the measured &lt;em&gt;beacon&lt;/em&gt; location back to the &lt;em&gt;turning center&lt;/em&gt; location to be able to orient correctly to reach the target location(s). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is fortunately a relatively straightforward task, &lt;strong&gt;but you need to be careful with the conventions you choose&lt;/strong&gt;. Is your heading along the +y-axis, or the +x-axis? Does your heading angle increase clockwise or counterclockwise (anti-clockwise)? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm assuming here the y-axis points &quot;up,&quot; x-axis points &quot;right,&quot; the heading zero angle is aligned with the +y-axis, and heading angle increases CW. Refer to the diagram below:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/vwxb0.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vwxb0.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is where you need to be careful with the convention that &lt;strong&gt;you&lt;/strong&gt; choose. It might not be the same as what I chose, but the method should be the same. You need to create a drawing that shows your choice of axes and take the same steps. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The easiest way to go about this is to put your axes centered on the turning center $M$, as I did in the graphic above. Next, find the relationship between your beacon location $A$ and the heading angle $\theta$. Given an $&amp;lt;x, y&amp;gt;$ coordinate scheme, at a heading of $\theta = 0$, the location of $A$ would be $&amp;lt;0, +r&amp;gt;$. If $\theta = 90^{\circ}$, then $A = &amp;lt;+r, 0&amp;gt;$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a trig problem, and you can see now that you need $\mbox{Trig Function 1}$, or $\mbox{TF1}$ such that $\mbox{TF1}(0^{\circ}) = 0$ and $\mbox{TF1}(90^{\circ}) = +1$, then you need a second trig function $\mbox{TF2}(0^{\circ}) = +1$ and $\mbox{TF2}(90^{\circ}) = 0$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then you get:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;A_x = M_x + TF1(\theta)*r \\&#xA;A_y = M_y + TF2(\theta)*r \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This problem was simplified by putting the coordinate axes on $M$ such that $M_x = 0$ and $M_y = 0$. The trig functions that satisfy the criteria above are $\mbox{TF1} = \mbox{sine}$ and $\mbox{TF2} = \mbox{cosine}$. I'm not sure that there's a good way to intuitively explain how to determine this other than practice, learning the &lt;a href=&quot;https://en.wikipedia.org/wiki/Trigonometric_functions#Special_values_in_trigonometric_functions&quot; rel=&quot;nofollow noreferrer&quot;&gt;special values for trig functions&lt;/a&gt;, and then more practice (do all the homeworks!).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, this means that you can find the coordinate of $A$ as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;A_x = M_x + \sin{(\theta)}*r \\&#xA;A_y = M_y + \cos{(\theta)}*r \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;You're not trying to find $A$, though, you're given $A$ and you're trying to find $M$!&lt;/em&gt; This is now straightforward - solve for $M$!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;M_x = A_x - \sin{(\theta)}*r \\&#xA;M_y = A_y - \cos{(\theta)}*r \\&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Again, as discussed in the other question to the other OP, you haven't described your method for determining heading, so I'm assuming it's just &lt;a href=&quot;https://en.wikipedia.org/wiki/Dead_reckoning&quot; rel=&quot;nofollow noreferrer&quot;&gt;dead reckoning&lt;/a&gt; as described under the &quot;Last Update&quot; heading in the other answer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The scope of your question seemed to be more about how you relate beacon location back to turning center location, so hopefully this covers it all in enough detail for you. Again, remember to do the same steps with your own coordinate system and reference datums - &lt;em&gt;they might not be the same as what I've used!&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-09-13T13:37:36.390" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="16366" PostTypeId="2" ParentId="16359" CreationDate="2018-09-13T14:31:59.450" Score="0" Body="&lt;p&gt;Welcome to &lt;em&gt;Robotics&lt;/em&gt;, kingKong. The problem you're facing is a common one - you need to specify the motors, but the motors you specify will add to the load and require larger motors, which add to the load, etc. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The general approach is to add some &quot;headroom&quot; to your design, such that each actuator is capable of meeting your performance requirements with maybe 60% or 75% of its rated capacity. This makes the process of &lt;em&gt;iterative design&lt;/em&gt; go a little easier. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You need to establish your project goals - are you trying to create a &lt;em&gt;functional&lt;/em&gt; design, or are you trying to create the &lt;em&gt;optimal&lt;/em&gt; design? As it stands, it sounds like this is a learning project where you're more interested in getting something that works. If that &lt;em&gt;is&lt;/em&gt; the case, then I would urge you to focus more on the details that matter, like the planning software, motion software, sensing and feedback, controls, etc. The actual physical manifestation is less important - if you can get the software right, then scaling up is just a matter of purchasing larger motors. Conversely, optimizing would just be a matter of purchasing smaller motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To your question, though: &quot;How do I determine what torque would be required?&quot; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is where &lt;em&gt;performance specifications&lt;/em&gt;, &lt;em&gt;models&lt;/em&gt;, and &lt;em&gt;simulations&lt;/em&gt; are useful. Here are the useful steps:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Determine how fast you want to accelerate, top speed, and how fast you want to turn. &lt;/li&gt;&#xA;&lt;li&gt;Determine how you want the robot to be structured,&lt;/li&gt;&#xA;&lt;li&gt;From (1) and (2), perform a &lt;em&gt;kinematic analysis&lt;/em&gt; to determine the peak acceleration and speed for each joint,&lt;/li&gt;&#xA;&lt;li&gt;From (2), create a simple model for how the robot will be fabricated - this would be where you specify the material and shape of the linkages, which would give you masses and moments of inertias for each link,&lt;/li&gt;&#xA;&lt;li&gt;From (3) and (4), perform a &lt;em&gt;dynamic analysis&lt;/em&gt; to determine the peak power and torque requirements at each joint, &lt;/li&gt;&#xA;&lt;li&gt;Double the results of (5) and find actuators that meet or exceed those needs, then&lt;/li&gt;&#xA;&lt;li&gt;Include those actuators in your model from (4), then repeat 5-7 until your design doesn't change.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;This isn't a product plug or anything, but just a mention because you stated you would be simulating in Matlab or Simulink. I have found the &lt;a href=&quot;https://www.mathworks.com/products/simmechanics.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Simscape Multibody Toolbox&lt;/a&gt; to be super useful for doing iterative design work like this. You can model the parts in Inventor, Solidworks, etc., then import them to Simscape. You can send speed references to the joints and tick the box in the joint settings to have the joint output the torques required to meet your speed references. Then you use those torques and speeds to find the motors, add the motors to the model, and repeat.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-09-13T14:31:59.450" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="16367" PostTypeId="1" CreationDate="2018-09-14T00:28:30.240" Score="0" ViewCount="96" Body="&lt;p&gt;I'm building a robot that uses the arduino uno microcontroller, and the tracks system is run by the &lt;a href=&quot;http://www.tamiya.com/english/products/70168double_gearbox/index.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;tamiya 70168-Double-Gearbox-Kit&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each Tamiya motor only uses 3V which is fine but it seems the stepper will help to control speed and direction of the motors. Does the Arduino Uno Microcontroller not allow you to control speed and direction? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do I need a stepper to have control of the tamiya gearbox?&lt;/p&gt;&#xA;" OwnerUserId="21191" LastEditorUserId="18235" LastEditDate="2018-09-14T06:37:12.360" LastActivityDate="2018-12-13T07:03:10.667" Title="Tamiya Dual Gearbox attached to an Arduino Uno Board" Tags="&lt;arduino&gt;&lt;motor&gt;&lt;stepper-motor&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16369" PostTypeId="2" ParentId="16367" CreationDate="2018-09-14T06:43:37.840" Score="1" Body="&lt;p&gt;You can not plus the motors T130 motors directly to your arduino because of the current they require.  &lt;a href=&quot;https://www.pololu.com/product/77&quot; rel=&quot;nofollow noreferrer&quot;&gt;These motors&lt;/a&gt;  need up to 2.1 A, which you can not get directly from the arduino. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The motors need to be plug to the battery via an adequate motor driver (common electronics board). And the arduino needs to be connected to the motor driver, to send the commands tot he motor driver.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want precise control of the speed you also need to have encoders to get information about the output shaft speed and do a control loop (like PID) in the arduino.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2018-09-14T06:43:37.840" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16370" PostTypeId="2" ParentId="16361" CreationDate="2018-09-14T12:46:30.027" Score="1" Body="&lt;p&gt;Local minima exists, because the shape of the error mountain is unknown. What sampling based planners are doing, is to calculate the outcome of a certain point in the map. For the input value f(x,y)=z the resulting value z is determined. To get the global minimum of the error function not a single point but all possible values for (x,y) have to be calculated which is not possible on standard-hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The answer to the second question (how to overcome local minima) is called knowledge based planning. That means, a sampling planner is combined with domain specific heuristics. In the case of the RRT planner, this can be done with motion primitives which are sampled. A motion primitive is some kind of abstract input value which helps to reduce the possible numbers of (x,y) values down to a small lexicon of meaningful actions like “move forward”, “stop” and “move left”.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2018-09-14T12:46:30.027" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16371" PostTypeId="2" ParentId="16361" CreationDate="2018-09-15T06:14:32.350" Score="0" Body="&lt;p&gt;Local Minima is a common problem encountered in sampling based planners. In such planners random points(x,y) are generated and are each evaluated by a function. The point generation being completely random there is a possibility that in some cases no points are generated near the global minimum and hence the algorithm converges near a local minimum. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I used GA for path planning and the mutation capability of GA solved this issue.&#xA;you can see a more detailed explanation  &lt;a href=&quot;https://youtu.be/1i8muvzZkPw?t=211&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="20869" LastActivityDate="2018-09-15T06:14:32.350" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16373" PostTypeId="1" CreationDate="2018-09-15T12:55:15.450" Score="1" ViewCount="241" Body="&lt;p&gt;I'm designing a PMSM controller with the motor has an optical encoder, so I can get position information from the motor. But how to measure the velocity of the motor. Now, my design is to calculate the difference, then add a low pass filter to estimate velocity. The approach is not a good way when the motor runs at a low speed. I have read some research to improve velocity estimation, like Luenberger Observer, Extended State Observer, or Kalman filter. But I don't know what should I choose since I have almost no theoretical basis.&lt;/p&gt;&#xA;" OwnerUserId="21127" LastActivityDate="2018-12-14T17:03:45.730" Title="Best way to estimate velocity of motor with encoder" Tags="&lt;motor&gt;&lt;servomotor&gt;&lt;driver&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16374" PostTypeId="1" CreationDate="2018-09-15T13:38:36.643" Score="0" ViewCount="907" Body="&lt;ol&gt;&#xA;&lt;li&gt;6, because a rigid body has six degrees of freedom&lt;/li&gt;&#xA;&lt;li&gt;4, since it is similar to a quadrotor, except with more motors&lt;/li&gt;&#xA;&lt;li&gt;6, because there are six motors&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I was taking an online quiz, and I thought option 3 is the correct one, only to find out I got the answer wrong. I know that I could change the answer 2 times and by chance I finally got it right, but I want to understand why option 3 is wrong? &lt;/p&gt;&#xA;" OwnerUserId="21194" LastEditorUserId="18235" LastEditDate="2018-09-17T09:15:35.340" LastActivityDate="2019-01-12T20:41:44.427" Title="How many independent control inputs does a hexarotor have?" Tags="&lt;control&gt;&lt;uav&gt;&lt;flight-controller&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16375" PostTypeId="2" ParentId="16373" CreationDate="2018-09-15T16:28:12.073" Score="0" Body="&lt;p&gt;In slow velocity error will be more since you are PWM mode. Try to use one Schmidt trigger circuit followed by a counter t measure speed. No need to use even filter. &lt;/p&gt;&#xA;" OwnerUserId="21195" LastActivityDate="2018-09-15T16:28:12.073" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16376" PostTypeId="2" ParentId="16373" CreationDate="2018-09-15T16:45:05.507" Score="1" Body="&lt;p&gt;You could employ all the techniques you mentioned that are model-based though, meaning you need to provide a good model of your system and then tune the parameters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively, there are other methodologies needing less tuning. Among all these, one of the best technique to use in this situation is definitely the &lt;a href=&quot;https://en.wikipedia.org/wiki/Savitzky%E2%80%93Golay_filter&quot; rel=&quot;nofollow noreferrer&quot;&gt;Savitzky-Golay filtering&lt;/a&gt;, which performs &lt;strong&gt;least-squares fitting&lt;/strong&gt; over a given time window.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a nutshell, you have to fit in the least-squares sense the position samples contained within a temporal moving window using a line. The coefficient of this line represents the velocity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, to improve robustness, you may want to make the &lt;strong&gt;window adaptive&lt;/strong&gt;, as done for example in this &lt;a href=&quot;https://www.semanticscholar.org/paper/Discrete-time-adaptive-windowing-for-velocity-Janabi-Sharifi-Hayward/5a9ebf6459593ed904875065b7b2576e5ce74338&quot; rel=&quot;nofollow noreferrer&quot;&gt;work&lt;/a&gt;, one possible &lt;strong&gt;code implementation&lt;/strong&gt; of which is available &lt;a href=&quot;https://github.com/robotology/icub-main/blob/master/src/libraries/ctrlLib/src/adaptWinPolyEstimator.cpp&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastActivityDate="2018-09-15T16:45:05.507" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16377" PostTypeId="1" AcceptedAnswerId="16392" CreationDate="2018-09-15T21:09:49.667" Score="0" ViewCount="192" Body="&lt;p&gt;I am trying to make a small robot with 4 12 v DC Motor + Raspberry PI + camera possibly a USB camera.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am very confused with power source.&#xA;Is it possible to get all of them powered by a single power source? Can you recommend some of them?  I am really in a need.&#xA;Also is there any software where I can design electric circuit of this robot before burning my actual hardware.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit:&#xA;I have 4 dc &#xA; 12 v motors with 60 mamp without load and  300 mamps with load and it have torque of 1.5 kgcm&lt;/p&gt;&#xA;" OwnerUserId="21196" LastEditorUserId="21196" LastEditDate="2018-09-16T12:42:12.300" LastActivityDate="2018-09-19T07:27:24.727" Title="What is the best way to power source small Robot" Tags="&lt;power&gt;&lt;first-robotics&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16378" PostTypeId="2" ParentId="16374" CreationDate="2018-09-15T23:27:18.773" Score="1" Body="&lt;p&gt;When assuming that the axles of all the rotors are oriented parallel to each other then the thrust will also only be along the same direction as these axles, so this only adds one degree of freedom. The other three degrees of freedom come from the effective torques due to thrust imbalance in front-back (pitch) and left-right (roll), and imbalance in the torque applied by the motors that rotate clockwise-anticlockwise (yaw). The total torque can at most be a three dimensional vector, so adding more rotors with an axle parallel to the others can't increase the span of the possible torque that can be applied.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you remove the constraint that the rotors all have their axles parallel to each other then six degrees of freedom can be achieved. However most conventional hexacopters do have their axles parallel to each other, so would also only have four degrees of freedom.&lt;/p&gt;&#xA;" OwnerUserId="1487" LastActivityDate="2018-09-15T23:27:18.773" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16379" PostTypeId="1" CreationDate="2018-09-16T12:00:38.347" Score="2" ViewCount="113" Body="&lt;p&gt;Right now, I am using ESP32 for the motors and planning to add either Raspberry Pi Zero or ARM Cortex-M4 (STM32) and use ROS with Intel RealSense RGBD camera.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How sensible is it? I am not expert in hardware and asking whether this will be rational and would such camera be computationally expensive? I am planing to do vSLAM with it.&lt;/p&gt;&#xA;" OwnerUserId="21080" LastActivityDate="2018-09-16T12:00:38.347" Title="How rational is it to use Intel Realsense for my affordable indoor autonomous robot?" Tags="&lt;mobile-robot&gt;&lt;ros&gt;&lt;raspberry-pi&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16380" PostTypeId="1" AcceptedAnswerId="16385" CreationDate="2018-09-16T14:25:17.730" Score="0" ViewCount="138" Body="&lt;p&gt;I have to develop an algorithm using reactive paradigm and potential fields to avoid an obstacle like this one:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/l9RZi.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/l9RZi.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My robot can go inside the U, and it has to know how to go out. The problem is that between robot's position and its goal there is a u-shaped obstacle, with the U pointing to the robot. The robot has to move to its goal, but it can fall inside the U-shaped obstacle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any idea about how can I do it?&lt;/p&gt;&#xA;" OwnerUserId="18173" LastActivityDate="2018-09-17T16:42:45.530" Title="Move robot to a goal avoiding u-shaped obstacle" Tags="&lt;path-planning&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16381" PostTypeId="1" CreationDate="2018-09-16T16:28:54.603" Score="0" ViewCount="177" Body="&lt;p&gt;I and my research team are working on a novel drone design based on trirotor. The difference between this design and a trirotor is that it has an extra propeller to generate additional thrust, therefore we can not use the open-source autopilot ArduPilot anymore. I have prototyped a control algorithm on MATLAB/Simulink but I don't know how to implement this algorithm on the drone. I have encountered this on so many papers but I still don't know how they did it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What type of hardware and coding should I need to prepare and learn in order to realize the algorithm? Should we continue to learn and modify the source code of open-source Autopilot like Ardupilot or it would be easier for us to start from scratch with a hardware?&lt;/p&gt;&#xA;" OwnerUserId="21201" LastEditorUserId="18235" LastEditDate="2018-09-27T14:23:45.950" LastActivityDate="2018-12-26T18:51:55.973" Title="How to implement a novel control algorithm for a drone" Tags="&lt;quadcopter&gt;&lt;control&gt;&lt;microcontroller&gt;&lt;uav&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16383" PostTypeId="2" ParentId="16380" CreationDate="2018-09-17T05:32:41.347" Score="1" Body="&lt;p&gt;I was just reading a paper on this yesterday : &lt;a href=&quot;https://hal.inria.fr/hal-01405349/document&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;&#xA;I am still in the process of understanding it properly. will update the answer soon.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS: I don't have enough reputation to add comments yet that's why I answered directly. &lt;/p&gt;&#xA;" OwnerUserId="20869" LastActivityDate="2018-09-17T05:32:41.347" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16384" PostTypeId="2" ParentId="16381" CreationDate="2018-09-17T09:14:39.300" Score="0" Body="&lt;p&gt;You need to assess 2 things:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;which sensors are needed and their interface &lt;/li&gt;&#xA;&lt;li&gt;which ESCs you have and their interface. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Once you know that it is possible to find the proper control board can fit your purpose. You should go for something micro-controller based like arduino. &#xA;I suggest you not to start from scratch but from an available open source project and replace in the code what is needed for you tri-copter. This way you don't need to rewrite all the utilities for communication, sensors readings and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will need to have some skill in C/C++ to do that. You might be able to retrieve your matlab prototype via a library using matlab c-code generating tools.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2018-09-17T09:14:39.300" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16385" PostTypeId="2" ParentId="16380" CreationDate="2018-09-17T16:42:45.530" Score="1" Body="&lt;p&gt;Solving this miracle can be done with a combination of a story graph, interactive execution of high-level commands and a planner. At first, the robot needs a control interface which accepts high-level commands, e.g. “go to south of u-shape”, “go to inside u-shape”. Then a random sequence of such motion primitives is generated until a valid plan is found.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the figure the semantic enriched motion plan is shown. At first, the robot has go back to it's root position, the next subgoal is “south of the u-shape” and then the robot can go to the goal. For realizing such a planner a datastructure is needed which can be realized as a class. This datastructure contains the graph. It has fields like “parentid”, “name of motion primitive” and “costs”. Such a datastructure is similar to Probabilistic roadmap (PRM), but is enriched with domain knowledge. Here, domain knowledge is the natural language description for the motion primitives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/hOPqi.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hOPqi.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2018-09-17T16:42:45.530" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16386" PostTypeId="1" AcceptedAnswerId="16389" CreationDate="2018-09-18T07:07:52.460" Score="0" ViewCount="1041" Body="&lt;p&gt;I am working on an autonomous mobile robot based on ROS. All the tutorials and examples requires a static map which need to be generated in order to do the localization and mapping. &#xA;     Do i need to scan the environment using stereo camera or lidar and generate a static map before doing the path planing and navigation of mobile robot? If so why? and for autonomous car did google and other companies mapped the whole city and generated map?&lt;/p&gt;&#xA;" OwnerUserId="21212" LastActivityDate="2018-09-18T16:35:54.960" Title="Mobile robot navigation without static map" Tags="&lt;mobile-robot&gt;&lt;ros&gt;&lt;slam&gt;&lt;localization&gt;&lt;navigation&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16388" PostTypeId="2" ParentId="16386" CreationDate="2018-09-18T12:30:05.597" Score="1" Body="&lt;p&gt;I think you are looking for &lt;a href=&quot;https://en.wikipedia.org/wiki/Simultaneous_localization_and_mapping&quot; rel=&quot;nofollow noreferrer&quot;&gt;SLAM - Simultaneous localization and mapping&lt;/a&gt;&#xA;This is where you build the map and locate yourself within it as you go.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a popular python library for SLAM here: &lt;a href=&quot;https://github.com/simondlevy/BreezySLAM&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/simondlevy/BreezySLAM&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="21215" LastActivityDate="2018-09-18T12:30:05.597" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16389" PostTypeId="2" ParentId="16386" CreationDate="2018-09-18T16:35:54.960" Score="3" Body="&lt;p&gt;I think you're confused on a few points. &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Mapping is when you try to build a map, given a known location.&lt;/li&gt;&#xA;&lt;li&gt;Localizing is when you try to locate yourself, given a known map.&lt;/li&gt;&#xA;&lt;li&gt;SLAM is &lt;em&gt;simultaneous&lt;/em&gt; localization &lt;strong&gt;and&lt;/strong&gt; mapping, where you try to build a map and localize yourself in that map on-the-fly. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;You mention &quot;localization and mapping&quot; in your question, but in &lt;a href=&quot;https://robotics.stackexchange.com/questions/16386/mobile-robot-navigation-without-static-map#comment26629_16388&quot;&gt;your comment to Chris Charles&lt;/a&gt; you mention specifically the AMCL package.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The AMCL package is for localization &lt;strong&gt;only&lt;/strong&gt;. It does not do localization and mapping so, per point (2) above, &lt;em&gt;you need a known map&lt;/em&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There &lt;em&gt;are&lt;/em&gt; SLAM packages available for ROS, but the one you're referencing doesn't do SLAM, it does L. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-09-18T16:35:54.960" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16390" PostTypeId="1" AcceptedAnswerId="16396" CreationDate="2018-09-18T22:17:55.350" Score="0" ViewCount="38" Body="&lt;p&gt;In all of the designs that I have seen for rockie bogie suspensions, each wheel has a separate motor. Can a rover be driven with less motors? Does each wheel need to spin independently?&lt;/p&gt;&#xA;" OwnerUserId="21217" LastActivityDate="2018-09-19T13:57:14.000" Title="Rover style robots with less motors than wheels" Tags="&lt;motor&gt;&lt;wheeled-robot&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16391" PostTypeId="1" AcceptedAnswerId="16414" CreationDate="2018-09-19T00:44:35.443" Score="2" ViewCount="33" Body="&lt;p&gt;I have the model for a gyroscope from an IMU given by&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\omega_{meas} = (I-S)\omega_{true} + \beta + v&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$S$ is the scaling and misalignment of the sensor, which I understand is a parameter I get from datasheet. $\omega_{true}$ is the true value of the gyro rates, $\beta$ is the bias defined by the bias instability, and $v$ is the noise&#xA;defined by the ARW parameter and bias instability.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After installation of the IMU, there will be an error due to structural misalignments between the IMU and whatever my structure will be. So, this structural error, $R_{struct}$, will generate a frame rotation, so I am a bit confused on how this error has to be modelled. I modelled it as affecting the whole measurement:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\omega_{meas} = R_{struct}\left((I-S)\omega_{true} + \beta + v\right)&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But someone told me it has to be applied only to the true measurement:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$$&#xA;\omega_{meas} = (I-S)R_{struct}\omega_{true} + \beta + v&#xA;$$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think is has to be applied on the whole system as otherwise, even do small, I will be applying the bias and noise in another frame.&lt;/p&gt;&#xA;" OwnerUserId="11648" LastActivityDate="2018-09-21T17:35:57.593" Title="How does structural/installation errors have to be modelled in a gyroscope IMU?" Tags="&lt;imu&gt;&lt;gyroscope&gt;&lt;simulation&gt;&lt;errors&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16392" PostTypeId="2" ParentId="16377" CreationDate="2018-09-19T07:27:24.727" Score="-1" Body="&lt;p&gt;I would recommend using only one source of energy on your robot otherwise, you could have some grounds problems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your motors are not consuming a lot (max ~ 1.2 Amps) and you can consider that the Raspberry Pi could consume up to 3A if you plug your camera (Could be less but with 3A your are safe).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So in your case, I would use a 12V battery with a DC/DC converter to power to Raspberry Pi in 5V (Here you need to make sure that the converter can deliver 3 A in 5V from a 12V source, like this &lt;a href=&quot;https://www.ebay.de/itm/DC-DC-Konverter-Converter-Spannungswandler-12V-5V-3A-15W-GE-/172984850724&quot; rel=&quot;nofollow noreferrer&quot;&gt;one&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the kind of battery, if you don't care about the size, capacity, weight etc you can go for a Lead–acid battery that is cheap and easy to use (Like this &lt;a href=&quot;https://www.toolstation.com/shop/Electrical/d190/Batteries+and+Powerbanks/sd2450/Sealed+Lead+Acid+Battery/p79562&quot; rel=&quot;nofollow noreferrer&quot;&gt;one&lt;/a&gt;). Otherwise, you can check for a Lithium-ion battery for example that has more capacity for the same size/weight. Lithium batteries are mostly more expansive and could be dangerous if you are not charging/discharging properly.&lt;/p&gt;&#xA;" OwnerUserId="20797" LastActivityDate="2018-09-19T07:27:24.727" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16393" PostTypeId="1" CreationDate="2018-09-19T08:39:17.467" Score="2" ViewCount="80" Body="&lt;p&gt;I was wondering if any robotics engineers around would kindly, provide suggestions on the following:  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was recently hired by a company that wants to implement a robotic solution in manufacturing for a client. It is companies first time venturing into robotics and I am the robotics intern (I recently graduated). They want me to construct a ROS compatible collaborative antropomorphic robotic arm from scratch in four months with a very limited budget (under 10000 USD). I've observed that such kinds of robot arms at the very minimum cost about 30000 USD. And based on a little research my conservative estimate of designing such an arm is more than 30000 USD (assuming if we choose off the shelf solutions such as modular robotic joints with in-built sensors).  Additionally, looking at the history of the state-of-art cobots, I've come to realize that it took many years of research and design to come up with such perfection.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I've understood, the budget and time-frame sounds preposterous, maybe I am wrong. I want to give them a practical time-frame and estimated cost with sound reasoning, because so far they don't seem to be convinced by my reasoning. So anyone who has had experience in designing industrial robot, could kindly answer the following for me:  &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Is it really possible to design industrial robots in such a time frame? How much time does it usually take to design such a robot usually by a seasoned robotics engineer?  &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;What kind of costs should I bear in mind other than just the cost of individual components?  &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Are there any constraints/risks (other than time and money) that I haven't foreseen that one could tell me?   &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Any suggestions are appreciated. Thanks in advance.  &lt;/p&gt;&#xA;" OwnerUserId="21144" LastEditorUserId="21144" LastEditDate="2018-09-19T09:35:31.647" LastActivityDate="2018-09-19T12:04:40.703" Title="Challenges involved in designing an Industrial Robotic Arm" Tags="&lt;robotic-arm&gt;&lt;design&gt;&lt;industrial-robot&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="1" ClosedDate="2018-09-19T12:44:55.213" ContentLicense="CC BY-SA 4.0" />
  <row Id="16394" PostTypeId="2" ParentId="16393" CreationDate="2018-09-19T12:04:40.703" Score="1" Body="&lt;p&gt;How did you come up with the 30.000$? You can't even pay a single Engineer for the four months and then you still don't have any hardware. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it's possible in the time and budget completely depends on the task the robot has to solve. Do they want to built something like a LBR iiwa or a UR10 or a small picking robot with a reach of 20cm that moves with less than 10cm/s? Should it be a one-trick-pony or a general purpose arm?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The arms from UR cost around 20-30k, iiwa easily twice that amount, the Franka Emica around 10 (without software). UR just raised it's price and sold 25.000 arms and they can buy in bulk and have a lot of experience. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Industrial arms start already a bit cheaper (e.g. from &lt;a href=&quot;https://www.conrad.de/de/igus-roboterarm-bausatz-5-achs-kinematik-1718143.html?WT.mc_id=google_pla&amp;amp;WT.srch=1&amp;amp;ef_id=VshxygAABbbp21F8:20180919120127:s&amp;amp;gclid=EAIaIQobChMI4MDr0YLH3QIVROR3Ch3rCgqPEAYYASABEgJaxvD_BwE&amp;amp;hk=SEM&amp;amp;insert_kz=VQ&amp;amp;s_kwcid=AL!222!3!254339639483!!!g!!&quot; rel=&quot;nofollow noreferrer&quot;&gt;Igus&lt;/a&gt;) and you could spend the months on a ROS Interface. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A collaborative arm needs a certification and that's not something to get over a weekend. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another point against the 4 months is delivery time for you components. I use some bearings that have a delivery time of more than two months. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are good and lucky(!) you could manage to hack a prototype in some months.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But it's not possible to guess the time you need without knowing the task your robot should solve. &lt;/p&gt;&#xA;" OwnerUserId="23196" LastActivityDate="2018-09-19T12:04:40.703" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16396" PostTypeId="2" ParentId="16390" CreationDate="2018-09-19T13:57:14.000" Score="0" Body="&lt;p&gt;Not necessarily. But not having independent motors would cause a lot of traction from rotating the body around the axis when you use differential drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The dimensions of the rover matters. Having a long body might not be favourable with only 2 motors at the back. The traction can be compensated by adding weight on the side with the motors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is definitely recommended having a separate motor driving each wheel of your robotic system. &lt;/p&gt;&#xA;" OwnerUserId="21222" LastActivityDate="2018-09-19T13:57:14.000" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16397" PostTypeId="1" CreationDate="2018-09-19T13:58:42.963" Score="0" ViewCount="118" Body="&lt;p&gt;I have WidowX Robot Arm Mark II and I'm trying to give IDs to my servo motors. I could give IDs to two MX-28T motors and two AX-12A motors. However, there is no way I could assign IDs to two MX-64T servos.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm using a Windows 10 PC and trying to assign IDs with DynaManager v1.4 software. It doesn't recognize the servos. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What do you think might be the problem? How can I fix it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your help would be very appreciated! Thanks!&lt;/p&gt;&#xA;" OwnerUserId="21221" LastActivityDate="2018-09-19T15:32:30.903" Title="Dynamixel MX-64T ID Problem" Tags="&lt;dynamixel&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16398" PostTypeId="2" ParentId="16397" CreationDate="2018-09-19T15:32:30.903" Score="1" Body="&lt;p&gt;Welcome to &lt;em&gt;Robotics&lt;/em&gt;, Poyraz Sagtekin. Is your problem &lt;em&gt;just&lt;/em&gt; that you can't assign IDs to the motor or is it that you can't communicate to the servos at all?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What IDs have you given to the other servos? There is a &lt;a href=&quot;https://learn.trossenrobotics.com/arbotix/arbotix-getting-started/1-setting-dynamixel-ids-with-the-dynamanager.html#&amp;amp;panel1-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;guide here&lt;/a&gt; that says, in part:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Before you set your servo IDs, here are some things to keep in mind.&lt;/p&gt;&#xA;  &#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;You can only ID one servo at a time. Do not plug multiple servos into the ArbotiX when using the DYNAManger.&lt;/li&gt;&#xA;  &lt;li&gt;Make sure you label your servos as you ID them! This will make the assmebly phase go much faster&lt;/li&gt;&#xA;  &lt;li&gt;All servos come pre-set to ID # 1. However we still recomend that you use the DynaManager to set the ID on servo #1. This will make sure the servo's baud rate is set correctly, as well as allow you test the servo.&lt;/li&gt;&#xA;  &lt;li&gt;Most kits use only AX-12A or AX-18A servos. For these kits, you can simply ID the servos in sequential, increasing order for however many servos you have. The exceptions are:&#xA;  &#xA;  &lt;ol&gt;&#xA;  &lt;li&gt;If you have a PhantomX Reactor Robot Arm without wrist-rotate then skip servo 7 (ID the first 6 servos normally, then set the last servo to ID #8)&lt;/li&gt;&#xA;  &lt;li&gt;If you have a WidowX Robot Arm MK-II, see &lt;a href=&quot;http://www.trossenrobotics.com/images/assembly/widowx-robot-arm/Servo_Lineup_mk2-800.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;this diagram&lt;/a&gt;. (The MK-I diagram is availbe here)&lt;/li&gt;&#xA;  &lt;/ol&gt;&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The things I would ask you to verify are that:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;You're only trying to setup one servo at a time,&lt;/li&gt;&#xA;&lt;li&gt;The servo is plugged into the correct port (view the image &lt;a href=&quot;https://learn.trossenrobotics.com/arbotix/arbotix-getting-started/1-setting-dynamixel-ids-with-the-dynamanager.html#&amp;amp;panel1-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;on the instructions of how to connect&lt;/a&gt;), and&lt;/li&gt;&#xA;&lt;li&gt;That you've set the IDs on the other servos correctly. It looks like the MX-64 servos should be set to IDs 2 and 3. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;If you do this and you're still having trouble, please &lt;em&gt;edit your question&lt;/em&gt; to include what exactly the problem is - if you're getting an error, what the error is (verbatim), how you're connecting it, how you're powering it, etc. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-09-19T15:32:30.903" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16399" PostTypeId="1" CreationDate="2018-09-19T17:23:14.120" Score="2" ViewCount="863" Body="&lt;p&gt;I'm trying to build a self-balancing two-wheeled segway-like robot.  I'm currently using two 12v DC motors that draw approximately 600milliamps of current each.  I've noticed that when my robot tries to switch directions, it often does weird things like not switch at all or completely stop rotating altogether.  I suspect that when the motor controller (L298N H-Bridge) switches direction, it may be drawing even more current on it and this current is somehow affecting my microcontroller. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If that is the case, what can I do about it?  How can I prevent this large spike in motor current draw from affecting my microcontroller?  &lt;/p&gt;&#xA;" OwnerUserId="2295" LastActivityDate="2018-09-21T15:06:10.977" Title="How to deal with current spikes due to fast direction-switching motor commands?" Tags="&lt;microcontroller&gt;&lt;electronics&gt;&lt;current&gt;" AnswerCount="4" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16402" PostTypeId="1" CreationDate="2018-09-20T04:01:38.977" Score="1" ViewCount="97" Body="&lt;p&gt;I have a drifted LiDAR odometry $^w \textbf{T}_{1:k}\in SE(3)$ and a drift corrected LiDAR odometry $^w \textbf{T}'_{1:k}\in SE(3)$ by a loop closure where w represents the reference world frame. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given an uncertainty or noise level $\Sigma_{6\times6}$, we can predict the possible range of the current location by propagating this uncertainty.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is how to calculate the uncertainty $\Sigma_{6\times6}$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Currently I am just calculating the error of frame to frame motion in $se(3)$ and calculating a 6 by 6 covaraince from it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;$e_n=log((^n\textbf{T}_{n+1})^{-1}\textbf{T}'_{n+1})$&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the pose propabation I will use on se3 pose compounding method by Timothy Barfoot (according to his state estimation book chapter 7.3.3 Compounding Poses). The book is &lt;a href=&quot;http://asrl.utias.utoronto.ca/~tdb/bib/barfoot_ser17.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I guess this topic is well established in EKF localization problem. Any idea and thoughts will be appreciated.&lt;/p&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2018-09-20T04:01:38.977" Title="How to calculate a covariance of trajectory?" Tags="&lt;slam&gt;&lt;uncertainty&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16404" PostTypeId="2" ParentId="16399" CreationDate="2018-09-20T10:58:03.150" Score="1" Body="&lt;p&gt;You can try to put a capacitor in the motor terminal. Very close to the motor. &lt;/p&gt;&#xA;" OwnerUserId="21229" LastActivityDate="2018-09-20T10:58:03.150" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16405" PostTypeId="2" ParentId="15657" CreationDate="2018-09-20T11:09:05.313" Score="0" Body="&lt;p&gt;Given that you have your forward kinematics already, you can formulate the dynamic model with the two methods mentioned in &lt;a href=&quot;https://robotics.stackexchange.com/a/15720/37&quot;&gt;the answer by Ababu&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then you can put estimates of your robot parameters (masses and inertias ) and compute the regressor with the experimental data. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the dynamic model you can parametrize the model in terms of mass/inertia parameters instead of joint positions. This parametrization let you build the regressor matrix. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A very nice method is explained in &lt;a href=&quot;https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=4303475&quot; rel=&quot;nofollow noreferrer&quot;&gt;Dynamic Model Identification For Industrial Robots&lt;/a&gt; - Ieee Journals &amp;amp; Magazine.&lt;/p&gt;&#xA;" OwnerUserId="21229" LastEditorUserId="37" LastEditDate="2018-09-20T14:00:04.150" LastActivityDate="2018-09-20T14:00:04.150" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16406" PostTypeId="2" ParentId="16399" CreationDate="2018-09-20T14:14:00.903" Score="3" Body="&lt;p&gt;As explained in &lt;a href=&quot;https://robotics.stackexchange.com/a/615/37&quot;&gt;my answer&lt;/a&gt; to &lt;a href=&quot;https://robotics.stackexchange.com/q/613/37&quot;&gt;What is stall current and free current of motors?&lt;/a&gt; when switching direction on a motor, you can end up drawing more than the maximum normal current rating. This can cause trips to be thrown, amplifier shutdown or voltage drops and loss of control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One option is to try to reduce the stress on the motor and amplifier. For instance instead of going from -100% to +100%, try going from -100% to 0% briefly, before going to +100%, or limiting the rate of change of the torque demand.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you specifically need to do will depend on the time constant of your mechanical system, the control loop update rate and the responsiveness/stability that you require. All of these factors should be balanced to keep you system within it's physical limits.&lt;/p&gt;&#xA;" OwnerUserId="37" LastActivityDate="2018-09-20T14:14:00.903" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16409" PostTypeId="1" AcceptedAnswerId="16410" CreationDate="2018-09-21T11:07:09.540" Score="4" ViewCount="3066" Body="&lt;p&gt;Both PID and Kalman filters are used extensively in Robotics. I gather, Kalman filters for sensing and PID for control. What is the mathematical, statistical or other relationship between them?&lt;/p&gt;&#xA;" OwnerUserId="17190" LastActivityDate="2018-09-22T00:00:09.600" Title="PID and Kalman filters" Tags="&lt;control&gt;&lt;sensors&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16410" PostTypeId="2" ParentId="16409" CreationDate="2018-09-21T13:00:40.930" Score="6" Body="&lt;p&gt;There isn't really a relationship between them, unless you're asking how the dynamics feed each other when combined into a system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If that's the case, then I would suggest maybe starting with a review of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Luenberger_observer&quot; rel=&quot;noreferrer&quot;&gt;Luenberger observer&lt;/a&gt;. It's typically taught as the &quot;dual&quot; of the state feedback control problem - state feedback controls attempt to drive the system states to zero, and the observer design &quot;rephrases&quot; the problem to make &lt;em&gt;feedback error&lt;/em&gt; the state and then attempts to drive the feedback error to zero with the same &quot;pole placement&quot; mechanic. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The filter has some error dynamics, and that dynamic error will get sent to the PID controller. The PID controller acts on the feedback + error dynamics and the resulting control signal gets sent to the plant. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suggested starting with the Luenberger observer because IMO it's easier to look at with regards to error dynamics than the Kalman filter (&lt;a href=&quot;https://hal.inria.fr/hal-01635092/document&quot; rel=&quot;noreferrer&quot;&gt;try this, starting at equation 25&lt;/a&gt;). The process for evaluating the effect of the error is otherwise the same - filter generates feedback error until the filter states converge, and that error is fed to the controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This may be way off your intent with your question too, though. Please let me know if this is along the lines of what you're asking. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-09-21T13:00:40.930" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16411" PostTypeId="2" ParentId="16399" CreationDate="2018-09-21T13:25:19.840" Score="3" Body="&lt;p&gt;I've experienced a similar problem before. For me, the root cause was insufficient battery power. When my motor tried to draw peak power it caused the battery supply bus to &lt;a href=&quot;https://en.wikipedia.org/wiki/Brownout_(electricity)&quot; rel=&quot;nofollow noreferrer&quot;&gt;brown out&lt;/a&gt;. This led to supply voltage dropping below the minimum rated voltage for the motor controller. The master board was fine as the brownout voltage was still above &lt;em&gt;that&lt;/em&gt; minimum.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the motor controller browned out it cleared its own enable bit and the motor stopped responding. Additionally, it required a certain &quot;arming&quot; sequence before it would respond to speed commands, and I had only programmed those to be sent on initial startup. Since the master board was never reset, the master continued sending valid speed commands to the motor controller, but the motor controller failed to respond because it hadn't been (re-)armed. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Potential solutions for you:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Check that your existing battery is actually fully charged. &lt;/li&gt;&#xA;&lt;li&gt;You can add more batteries (or battery packs, depending on your configuration) in &lt;strong&gt;parallel&lt;/strong&gt; to boost your supply capacity. As with all batteries, they should all be fully charged before you connect them all together.&lt;/li&gt;&#xA;&lt;li&gt;If your issue is that your &lt;em&gt;controller&lt;/em&gt; is getting reset, you could provide two &lt;em&gt;different&lt;/em&gt; batteries. One larger battery to run the H-bridge chip and the motor and a (not necessarily) smaller battery to run your controller. &lt;em&gt;You will need to ensure that the controller, H-bridge, and motor all share a common ground&lt;/em&gt; or the H-bridge may fail to respond to PWM signals. This is a less-desirable option, because the motor response will be limited by your supply power (they'll accelerate slowly), but it's a quick/cheap fix if your existing batteries are hard to source.&lt;/li&gt;&#xA;&lt;li&gt;You could try adding a capacitor as &lt;a href=&quot;https://robotics.stackexchange.com/a/16404/9720&quot;&gt;jdios said&lt;/a&gt;. I would argue it would be better to use a large capacitor on the battery-supply-side of the H-bridge than to put it next to the motor, but just because the motor is bidirectional. Large capacity electrolytic capacitors are pretty easy to come by, but they're polarized. As I mentioned in &lt;a href=&quot;https://robotics.stackexchange.com/questions/16399/how-to-deal-with-current-spikes-due-to-fast-direction-switching-motor-commands#comment26659_16404&quot;&gt;my comment in jdios' post&lt;/a&gt;, the capacitor &lt;em&gt;does&lt;/em&gt; smooth voltage, and it provides a short-duration current surge during high-demand conditions by preventing the supply voltage from falling.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://robotics.stackexchange.com/a/16406/9720&quot;&gt;Mark Booth's answer&lt;/a&gt; is also valid, and would probably be my go-to answer (it was how I solved my own problem), &lt;em&gt;except for the fact&lt;/em&gt; that you're trying to do control. Adding a rate-limiting scheme as described there is effectively creating an actuator saturation limit, which then will cause more problems for your controller (control &lt;a href=&quot;https://en.wikipedia.org/wiki/Integral_windup&quot; rel=&quot;nofollow noreferrer&quot;&gt;windup&lt;/a&gt;). &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-09-21T13:25:19.840" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16412" PostTypeId="2" ParentId="16399" CreationDate="2018-09-21T15:06:10.977" Score="1" Body="&lt;p&gt;It's maybe not this at all, but when a motor or any inductive system suddenly stop it create a short opposite surtense that can affect your microcontroleur. The solution is to ad a flyback diode within your motor driver. Most of the motor's driver (including the H-bridge) are provide with flyback diode built-in but you can check if yours got one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here the wiki if you want to lear more about flyback diode &lt;a href=&quot;https://en.wikipedia.org/wiki/Flyback_diode&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Flyback_diode&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope I've help you.&lt;/p&gt;&#xA;" OwnerUserId="21240" LastActivityDate="2018-09-21T15:06:10.977" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16413" PostTypeId="2" ParentId="16409" CreationDate="2018-09-21T17:26:01.010" Score="0" Body="&lt;p&gt;Allow me to summarize and add to Chuck's great answer.&lt;br&gt;&#xA;You use a filter to make sense out of your raw sensor readings. They mathematically reduce noise, or coalesce multiple data points into a single useful measurement.&lt;br&gt;&#xA;The difference between the actual measurement and the desired value is called &lt;em&gt;error&lt;/em&gt;. The job of a PID controller is to minimize the error, keeping your robot as close to the target as possible. For example, a line-following robot may filter multiple light sensor values to determine how far away is is from the line. It uses a PID to adjust steering to minimize its distance from the line.&lt;/p&gt;&#xA;" OwnerUserId="20680" LastActivityDate="2018-09-21T17:26:01.010" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16414" PostTypeId="2" ParentId="16391" CreationDate="2018-09-21T17:35:57.593" Score="1" Body="&lt;p&gt;It's a little difficult to visualize rotations of a rotation sensor, so let's consider an accelerometer instead. You've got the same problem with an accelerometer: if the sensor isn't aligned with the chassis frame, you introduce a relative rotation &lt;span class=&quot;math-container&quot;&gt;$R_{struct}$&lt;/span&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, let's suppose some properties to go along with the accelerometer. We'll say it measures x- and y-axis accelerations, where +x is right/starboard and +y is forward. +z is up. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's also say that accelerometer has a y-axis bias of &lt;span class=&quot;math-container&quot;&gt;$1$&lt;/span&gt; and an x-axis bias of 0. The chassis frame is currently accelerating at a rate of 1 &lt;span class=&quot;math-container&quot;&gt;$g$&lt;/span&gt; forward.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the accelerometer is well aligned to the chassis such that &lt;span class=&quot;math-container&quot;&gt;$R_{struct} = I$&lt;/span&gt;, then you get:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;a_{meas} = \left[\begin{array}{ccc}&#xA;0 \\&#xA;g \\&#xA;\end{array}\right] + \left[\begin{array}{ccc}&#xA;0 \\&#xA;1 \\&#xA;\end{array}\right]&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That is, for a well-aligned accelerometer, the x-axis output is &lt;span class=&quot;math-container&quot;&gt;$0$&lt;/span&gt;, from the fact that the chassis isn't accelerating along the x-axis, &lt;strong&gt;plus&lt;/strong&gt; &lt;span class=&quot;math-container&quot;&gt;$0$&lt;/span&gt;, from the fact that the bias on the x-axis of that sensor is also zero.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The y-axis output is &lt;span class=&quot;math-container&quot;&gt;$g + 1$&lt;/span&gt;, from the chassis motion and the bias along the y-axis. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;NOW, consider what happens if you rotate the sensor by +90 degrees about the z-axis. The &lt;strong&gt;sensor&lt;/strong&gt; (+y) is now oriented along the chassis (-x) and the &lt;strong&gt;sensor&lt;/strong&gt; (+x) is now oriented along the chassis (+y). Repeat the same measurement and now you get a reading of:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;a_{meas} = \left[\begin{array}{ccc}&#xA;g \\&#xA;0 \\&#xA;\end{array}\right] + \left[\begin{array}{ccc}&#xA;0 \\&#xA;1 \\&#xA;\end{array}\right]&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;strong&gt;chassis&lt;/strong&gt; is accelerating at a rate of &lt;span class=&quot;math-container&quot;&gt;$g$&lt;/span&gt; along its +y-axis, which the sensor is registering as a +x motion. &lt;strong&gt;However&lt;/strong&gt;, the sensor is going to output a y-axis bias of &lt;span class=&quot;math-container&quot;&gt;$+1$&lt;/span&gt; &lt;strong&gt;regardless of the orientation of the sensor&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That is, if there were no bias, your reading would be:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;a_{unbiased} = R_{struct}a_{chassis} \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The sensor bias is independent of the sensor orientation, so you add that to the unbiased reading:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;a_{biased} = a_{meas} = a_{unbiased} + bias \\&#xA;\boxed{a_{meas} = R_{struct}a_{chassis} + bias} \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lastly, I believe if the bias were applied to all parameters, as you wrote:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\omega_{meas} = R_{struct}\left(\left(I-S\right)\omega_{true} + \beta + \nu\right) \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That you could distribute the &lt;span class=&quot;math-container&quot;&gt;$R_{struct}$&lt;/span&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\omega_{meas} = R_{struct}\left(I-S\right)\omega_{true} + R_{struct}\beta + R_{struct}\nu \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And then you could cleverly rotate your sensor to an angle of &lt;span class=&quot;math-container&quot;&gt;$\theta_{clever} = \mbox{atan2}\left(\beta_y,\beta_x\right)$&lt;/span&gt; and have the entirety of the bias occur on one axis only and have the other axis be bias-free. That is, if the bias is based on sensor orientation, it would then become possible to affect bias or noise by altering the orientation of the sensor. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-09-21T17:35:57.593" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16415" PostTypeId="2" ParentId="16409" CreationDate="2018-09-22T00:00:09.600" Score="2" Body="&lt;p&gt;The Kalman filter optimizes the estimate of the system state in the presence of measurement errors and model errors.  PID tries to drive a particular model/measurement system to a chosen state.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2018-09-22T00:00:09.600" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16417" PostTypeId="2" ParentId="6843" CreationDate="2018-09-22T22:10:48.490" Score="0" Body="&lt;p&gt;I had similar issue recently and it looks it's rather hardware related problem (power of input source???). As you see on pictures below the width of the echo pulse has been sent inconsistently across measurements. I had it powered from Arduino Mega 2560 board (digital +5v and gnd), but it shouldn't cause such issue by me. When I was trying to connect external 12V to the board it got fired :( so I have to order new one board and then to repair the first one unit...)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The shorter one pulse is below (see measurement values on the right side of the picture). The upper wave is Trigger line, the lower line (channel 1) is Echo line...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gTult.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gTult.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the longer one pulse:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/uICeX.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/uICeX.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The test has been done against normal wall. The interesting point to notice here is it contains (more or less) two values only when the second one is almost twice as the first one value...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit after receiving the new one board:&lt;br&gt;&#xA;I have connected regulated power source to vcc ofhc-sr04 with values equal to 5.0V and 5.1V and it didn't change the behavior of echo line. It looks this chip doesn't know how to deal with reflections or something similar so it can work on very short distances only (up to 30 cm?) or maybe less :( &lt;/p&gt;&#xA;" OwnerUserId="21245" LastEditorUserId="21245" LastEditDate="2018-09-27T17:07:24.667" LastActivityDate="2018-09-27T17:07:24.667" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16418" PostTypeId="2" ParentId="2196" CreationDate="2018-09-23T12:23:12.787" Score="0" Body="&lt;p&gt;0) Implicit (?) question about BEAM robots: These represent only a &lt;em&gt;subset&lt;/em&gt; of cpu-free robots. Although you can build pretty complex robots without a microprocessor/microcontroller, BEAM robots (based on Mark Tilden's work) are mostly stimulus-response simple machines, where simplicity on itself is a design goal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) I'm not aware of any robotics area where building a software-free robot is &quot;impossible&quot;. I support this answer on the fact that analog circuits (and the subset called analog computers) &lt;a href=&quot;https://en.wikipedia.org/wiki/Analog_computer&quot; rel=&quot;nofollow noreferrer&quot;&gt;played roles&lt;/a&gt; even in different hard real time systems in the past. There are &lt;a href=&quot;http://news.mit.edu/2016/analog-computing-organs-organisms-0620&quot; rel=&quot;nofollow noreferrer&quot;&gt;modern developments&lt;/a&gt; for bringing back combinations of analog and digital computers for different applications. So, making a robot using analog circuits, even a complex robot, is perfectly possibly. But please note that that does not mean that it wouldn't be &lt;strong&gt;much more easier/cheaper/faster/flexible to build the same robot using modern CPUs/MCUs&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) This is related to 1, and also related to your definition of programming. I've seen robots where some of the functionality was solved using MCUs, but where other subsystems of the same robot (for example vision processing) were solved using FPGAs. Being reconfigurable hardware, FPGAs can fit a reconfigurable CPU on a given configuration, &lt;strong&gt;or not&lt;/strong&gt;. So if your question is not excluding FPGAs, then I would say that you can do whatever you do with CPUs with FPGA based implementations. Again, this does not mean that it will be easier, etc. But in some cases, the performance of an FPGA is highly desirable. Also, as FPGAs are today &lt;strong&gt;reconfigurable in the field&lt;/strong&gt;, you do not lose flexibility either. If you exclude FPGAs, then you can still implement most functions with analog circuitry. &lt;strong&gt;NOTE:&lt;/strong&gt; You asked specifically about fields that can be done &quot;without programming&quot;. Someone may question that hardware description languages are a kind of programming. But it can also be argued that they are just equivalent to defining a circuit on paper and then building it. That's why I mentioned FPGA based systems here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3) Based on what I think about 1 and 2, then: yes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I worked once on a small cheap robot of which we were going to produce between 200 and 500 units. It was for promotional usage, so we wanted to make it with some analog componentes that we had in stock already. It only needed to follow a line. So I started making it fully analog. But at some point we found some problems with the thresholds, etc., and decided to use a very small microcontroller (an 8 pins ATTiny), which resulted also in a very cheap design, and saved us some development time. So what I mean is that sometimes even the simplest designs may justify using a small CPU today, even if the same thing can be done without it.&lt;/p&gt;&#xA;" OwnerUserId="16013" LastEditorUserId="16013" LastEditDate="2018-09-23T18:40:29.010" LastActivityDate="2018-09-23T18:40:29.010" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16420" PostTypeId="1" CreationDate="2018-09-24T02:55:34.193" Score="2" ViewCount="152" Body="&lt;p&gt;In visual SLAM, pose estimation is performed between two adjacent frames or keyframes using feature detection and pose estitmation from corresponding features. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However in visual-inertial SLAM, pose information can be calculated from acceleroemeter and gyro. Is visual information still used to estimation poses?&#xA;I have read several papers about SLAM, but authors don't mention this explicitly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the link:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/12332/full-3d-pose-scale-rotation-and-translation-estimation-using-gyro-and-acceler&quot;&gt;Full 3D Pose (Scale, Rotation and Translation) Estimation using Gyro and Acceleromter sensors fusion&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pose estimation from IMU sensor is incorrect due to bias. Then IMU sensor will not help in typical situation, but only in the situation where few textures are found and feature matching won't work?&lt;/p&gt;&#xA;" OwnerUserId="15460" LastEditorUserId="15460" LastEditDate="2018-09-24T03:19:32.070" LastActivityDate="2020-02-09T18:03:10.540" Title="Is pose estimation using images necessary in visual-inertial SLAM" Tags="&lt;slam&gt;&lt;gyroscope&gt;&lt;accelerometer&gt;&lt;pose&gt;&lt;visual-odometry&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16421" PostTypeId="1" CreationDate="2018-09-24T03:42:19.457" Score="1" ViewCount="141" Body="&lt;p&gt;It seems to be taken granted that when we deal with some control system, the first thing we want to do is to linearize the system and put it in form of first order differential equations like &lt;span class=&quot;math-container&quot;&gt;$\dot x = Ax + Bu$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But why do we want to do this? And most importantly, why it is always first order? Why we don't want to write the dynamics like &lt;span class=&quot;math-container&quot;&gt;$\ddot x = A\dot x + Bx + Cu$&lt;/span&gt;?&lt;/p&gt;&#xA;" OwnerUserId="19727" LastActivityDate="2018-10-04T13:46:42.957" Title="Why we want to write all linear system into form of first order differential equations?" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;dynamics&gt;" AnswerCount="5" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16422" PostTypeId="2" ParentId="16421" CreationDate="2018-09-24T04:50:03.373" Score="1" Body="&lt;p&gt;I believe this is done for generality. You can always see a &lt;span class=&quot;math-container&quot;&gt;$n^{th}$&lt;/span&gt; order differential equation as a system of &lt;span class=&quot;math-container&quot;&gt;$n$&lt;/span&gt; coupled first order differential equations. Therefore it is a good practice to first bring back your higher order system to a first order system so that it can then be solved in the standard way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first order is the lowest order that you can use to describe your higher order differential equation. Being the lowest order it is also the most compact (the resulting matrices are more dense).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the scientific community decided to use second order diff. eq. as a new standard form then the resulting solution matrices would be very sparse (lots of null coefficients) and we could not use that procedure for solving first order diff. equations anyway. &lt;/p&gt;&#xA;" OwnerUserId="11425" LastActivityDate="2018-09-24T04:50:03.373" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16424" PostTypeId="1" AcceptedAnswerId="18087" CreationDate="2018-09-24T12:28:52.607" Score="0" ViewCount="1160" Body="&lt;p&gt;I am working on a robot tracking application, where our main tool (a camera) for locating the x &amp;amp; y position of the robot is working on a quite low frequency.&#xA;Therefore, I am looking for ways to intermediately track the position of the robot without directly measuring it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The robot has a built in accelerometer, gyroscope and magnetometer.&#xA;I know that I can double-integrate the acceleration measurements to get a (very noisy) estimate of my current position. I also can use gyroscope and magnetometer to track the pose of the robot (which I am not primarily interested in).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there anything else I could do to improve the position estimate given those three sensors, besides double-integration of acceleration?&lt;/p&gt;&#xA;" OwnerUserId="21254" LastActivityDate="2019-01-24T00:21:20.233" Title="Position Tracking using IMU" Tags="&lt;mobile-robot&gt;&lt;kalman-filter&gt;&lt;imu&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16425" PostTypeId="2" ParentId="16424" CreationDate="2018-09-24T12:43:35.883" Score="0" Body="&lt;p&gt;You linked your question with a kalman filter. I guess that's the right way. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically it solves your problem: Estimation of a position, based on different sensor signals. It is usually used for sensor fusion with gps data and acceleration data. But you can use any kind of  mesuarements of the robots dynamic. It is possible to implement a kalman filter with different sample times for the different signals. I can edit this post later, if I have my lecture notes with me for the equations. But maybe you find them with the help of google in the mean time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the quality of your available signals is not good enough, you could maybe use additional bluetooth bacons. But I never tested this by myself and read the accuracy is quite low. How about a laser distance sensors to allocate the distance to a wall? What kind of robot do you use?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another interesting concept is the particle filter.&lt;/p&gt;&#xA;" OwnerUserId="20770" LastActivityDate="2018-09-24T12:43:35.883" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16427" PostTypeId="2" ParentId="16421" CreationDate="2018-09-24T13:30:43.470" Score="4" Body="&lt;p&gt;I will use Mr. Richard Feynman's quote to answer your &lt;strong&gt;first question&lt;/strong&gt;: &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Finally, we make some remarks on why linear systems are so important.&#xA;  The answer is simple: because we can solve them!&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes. As simple as that. Dealing with linear systems is well-understood. We can generalize any notion about linear systems, however, this is not the case with nonlinear systems (i.e. each nonlinear system must be studied thoroughly) Remember though, not all systems can be linearized, therefore, nonlinear techniques are exist to handle nonlinear systems (e.g. very fast pendulum cant be modeled accurately with linearized model). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;strong&gt;second question&lt;/strong&gt; regarding why we convert differential equations into first order systems. Unsurprisingly, the answer again is to solve them. Dealing with first order systems is much better and simpler in comparison with higher order differential equations. This representation is known as space-state representation in control systems. You can read more about this technique. &lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="2155" LastEditDate="2018-09-24T13:36:13.227" LastActivityDate="2018-09-24T13:36:13.227" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16428" PostTypeId="2" ParentId="16421" CreationDate="2018-09-24T14:01:44.763" Score="3" Body="&lt;p&gt;:EDIT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was writing a comment that I don't think there's going to be a definitive answer on this question, that the question is akin to &quot;Why do we draw free body diagrams for an engineering analysis?&quot; or, &quot;Why do we factor polynomials?&quot; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I then realized that this question is &lt;em&gt;very much&lt;/em&gt; like, &quot;Why do we factor polynomials?&quot; Factoring a polynomial is useful because it reduces a higher order expression into products of first order expressions. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Translating a system's dynamics equations into a series of coupled first order linear ODEs does the same thing. This still isn't an answer more than the original answer below, just a reinforcing concept that we generally choose to start with the simplest representation available because it affords the simplest means of solving the problem. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;:Original post:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Dynamic systems are usually represented that way because it's a &quot;&lt;a href=&quot;https://en.wikipedia.org/wiki/Canonical_form&quot; rel=&quot;nofollow noreferrer&quot;&gt;canonical form&lt;/a&gt;&quot; for control problems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A canonical form is advantageous because, if you can express your problem in a canonical format, you get to use all of the preexisting tools that have been developed to analyze and solve that problem. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider standard interfaces in other settings - I can connect my watch, a printer, an Arduino, a game controller, etc. to my computer because they all use the USB standard interface. I don't need to keep a kit full of proprietary cables, or have a laptop that has a bank of proprietary connectors, thanks to the standard interface. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similarly, I don't need a &quot;toolkit&quot; of methods to evaluate or solve controls problems &lt;em&gt;if&lt;/em&gt; I can get to the canonical control form. In particular, some important &quot;standard tools&quot; include:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Eigenvalues of &lt;span class=&quot;math-container&quot;&gt;$\bf{A}$&lt;/span&gt; reveal system stability,&lt;/li&gt;&#xA;&lt;li&gt;Standard methods to check for &lt;a href=&quot;https://en.wikipedia.org/wiki/Observability#Definition&quot; rel=&quot;nofollow noreferrer&quot;&gt;observability&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Controllability#Continuous_linear_time-invariant_(LTI)_systems&quot; rel=&quot;nofollow noreferrer&quot;&gt;controllability&lt;/a&gt;,&lt;/li&gt;&#xA;&lt;li&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Separation_principle&quot; rel=&quot;nofollow noreferrer&quot;&gt;separation principle&lt;/a&gt;, which shows that you can design the controller and observer independently,&lt;/li&gt;&#xA;&lt;li&gt;Standard method for modifying system response (&lt;a href=&quot;https://en.wikipedia.org/wiki/Full_state_feedback&quot; rel=&quot;nofollow noreferrer&quot;&gt;pole placement&lt;/a&gt;),&lt;/li&gt;&#xA;&lt;li&gt;Scalability from single input, single output (SISO) systems to multi-input, multi-output (MIMO) systems, and the associated &lt;a href=&quot;https://en.wikipedia.org/wiki/Linear%E2%80%93quadratic_regulator&quot; rel=&quot;nofollow noreferrer&quot;&gt;linear quadratic regulator&lt;/a&gt;,&lt;/li&gt;&#xA;&lt;li&gt;Relatively easy to construct a Kalman filter from that representation (if the Kalman filter has &lt;span class=&quot;math-container&quot;&gt;$\hat{x}_{k|k-1} = F_k \hat{x}_{k-1|k-1} + B_k u_k$&lt;/span&gt;, then you can use &lt;span class=&quot;math-container&quot;&gt;$F_k = (I + A\Delta t)$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$B_k = B \Delta t$&lt;/span&gt;, and then &lt;span class=&quot;math-container&quot;&gt;$H_k = C$&lt;/span&gt;).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;This is a list of things that &lt;em&gt;rely&lt;/em&gt; on your system to be in the form:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{x} = Ax + Bu \\&#xA;y = Cx + Du \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want (or need) to express your problem differently then the tools I've mentioned above are no longer valid and you need to find/make equivalents for your application. The hard part there isn't just finding something that &quot;looks like&quot; the tools mentioned, or that has &quot;similar looking step responses,&quot; but &lt;strong&gt;proving&lt;/strong&gt; things like &lt;a href=&quot;https://en.wikipedia.org/wiki/BIBO_stability&quot; rel=&quot;nofollow noreferrer&quot;&gt;BIBO stability&lt;/a&gt;, etc. This is the hard work that has been done for you already &lt;em&gt;if&lt;/em&gt; you (can) use the existing tools. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2018-09-28T17:24:52.623" LastActivityDate="2018-09-28T17:24:52.623" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16429" PostTypeId="1" CreationDate="2018-09-24T16:22:18.777" Score="1" ViewCount="6" Body="&lt;p&gt;I am working on a problem in robot tracking, where our main position sensor will be unavailable for up to a second due to its low frequency.&#xA;That's why we would need to track its 2D-movements (x&amp;amp;y-axes) during these intervals using an accelerometer. I think the right term for this process is called dead reckoning. In case I lack additional sensors, I probably have to take the double integral of the acceleration...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I am looking for, is a way to estimate the needed sensor-accuracy to achieve a defined tracking accuracy (say 10mm).&#xA;Does maybe a closed form expression exist? Or is there any general work on this topic? (I couldn't find anything)&#xA;The only method of doing this that I can think of would be simulating a test trajectory for the sensors and calculate the accuracy. But that would require to run a simulation of every possible sensor candidate...&lt;/p&gt;&#xA;" OwnerUserId="21254" LastActivityDate="2018-09-24T16:22:18.777" Title="Calculation of accuracy during dead reckoning based for sensor selection" Tags="&lt;sensors&gt;&lt;dead-reckoning&gt;" AnswerCount="0" CommentCount="1" ClosedDate="2018-09-24T17:56:10.887" ContentLicense="CC BY-SA 4.0" />
  <row Id="16430" PostTypeId="1" CreationDate="2018-09-24T17:37:58.220" Score="2" ViewCount="71" Body="&lt;p&gt;I want to implement EIF slam from Probabilistic Robotics Table 11.2. This is the algorithm for EIF slam.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/sr0VZ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/sr0VZ.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To construct &lt;span class=&quot;math-container&quot;&gt;$\Omega and \xi$&lt;/span&gt; matrix I write down a Java code. Here is my code&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;public class Part1Jama {&#xA;public static void main(String args[]) throws IOException {&#xA;    Matrix Bigomega = new Matrix(11116,11116);//last 15 row and column define landmarks x and y axis&#xA;    Matrix omega = new Matrix(11116,11116);&#xA;    Matrix BigXi = new Matrix(11116, 1);&#xA;    Matrix Xi = new Matrix(11116, 1);&#xA;&#xA;&#xA;    int i = 0, i1 = 0, k1 = 0, k2 = 0, l = 0, l1 = 0,k3=0,j=0;&#xA;    double[] timex = new double[11101];//11101 odometer data denoting by u_1;&#xA;    double[] xcoa = new double[11101];&#xA;    double[] ycoa = new double[11101];&#xA;    double[]thetacoa=new double[11101];&#xA;&#xA;    double[] landx = new double[3095];//3095 measurment data z&#xA;    double[] landy = new double[3095];&#xA;    double[] timeya = new double[3095];&#xA;    double[] codea = new double[3095];&#xA;    double[] rangea = new double[3095];&#xA;    double[] bearinga = new double[3095];&#xA;    Scanner x = new Scanner(new File(&quot;/home/froboticscse/IdeaProjects/UJMPtest/src/main/java/measurmentF.txt&quot;));&#xA;    Scanner y = new Scanner(new File(&quot;/home/froboticscse/IdeaProjects/UJMPtest/src/main/java/uniquemeasure.txt&quot;));&#xA;&#xA;&#xA;    while (x.hasNext()) {&#xA;//Data from odometry data file which consist of time,forward velocity angular velocity&#xA;        double time = x.nextDouble();&#xA;        double xco = x.nextDouble();&#xA;        double yco = x.nextDouble();&#xA;        double theta=x.nextDouble();&#xA;        timex[i] = time;&#xA;        xcoa[i] = xco;&#xA;        ycoa[i] = yco;&#xA;        thetacoa[i]=theta;&#xA;        i++;&#xA;    }&#xA;&#xA;    while (y.hasNext()) {&#xA;//Data from measurement file consist of time,correspondence Number(landmark number),range,bearing &#xA;        double timey = y.nextDouble();&#xA;        double code = y.nextDouble();&#xA;        double range = y.nextDouble();&#xA;        double bearing = y.nextDouble();&#xA;        timeya[i1] = timey;&#xA;        codea[i1] = code;&#xA;        rangea[i1] = range;&#xA;        bearinga[i1] = bearing;&#xA;&#xA;        i1++;&#xA;&#xA;    }&#xA;&#xA;&#xA;&#xA;    while(k1&amp;lt;timex.length-1) {&#xA;        if (timex[k1] &amp;lt; timeya[k2]) {&#xA;&#xA;            omega.set( k1, k1,1);&#xA;            omega.set(k1, k1 + 1,-1);&#xA;            omega.set( k1 + 1, k1,-1);&#xA;            omega.set( k1 + 1, k1 + 1,1);&#xA;&#xA;            Bigomega = Bigomega.plus(omega);&#xA;            omega.set( k1, k1,0);// clear value store in omega&#xA;            omega.set(k1, k1 + 1,0);&#xA;            omega.set( k1 + 1, k1,0);&#xA;            omega.set( k1 + 1, k1 + 1,0);&#xA;&#xA;            Xi.set( k1, 0,-(ycoa[k1]));&#xA;            Xi.set(k1 + 1, 0,ycoa[k1]);&#xA;            BigXi = BigXi.plus(Xi);&#xA;            Xi.set( k1, 0,0); //clear value store in Xi&#xA;            Xi.set(k1 + 1, 0,0);&#xA;&#xA;&#xA;        } &#xA;// //For line number 10 to 20 as per algorithm&#xA;else if (timex[k1] == timeya[k2]) {&#xA;            landy[l1] = ycoa[k1] + rangea[k2] * (Math.cos(bearinga[k2] + thetacoa[k1]));&#xA;            omega.set( k1, k1,1);&#xA;            omega.set(k1, k1 + 1,-1);&#xA;            omega.set( k1 + 1, k1,-1);&#xA;            omega.set( k1 + 1, k1 + 1,1);&#xA;            Bigomega = Bigomega.plus(omega);&#xA;            omega.set( k1, k1,0);&#xA;            omega.set(k1, k1 + 1,0);&#xA;            omega.set( k1 + 1, k1,0);&#xA;            omega.set( k1 + 1, k1 + 1,0);&#xA;&#xA;            Xi.set( k1, 0,-(ycoa[k1]));&#xA;            Xi.set(k1 + 1, 0,ycoa[k1]);&#xA;            BigXi = BigXi.plus(Xi);&#xA;            Xi.set( k1, 0,0);&#xA;            Xi.set(k1 + 1, 0,0);&#xA;            if (codea[k2] == 90.0) {&#xA;&#xA;                omega.set(k1, k1,1);&#xA;                omega.set( 11101, k1,-1);&#xA;                omega.set(11101, 11101,1);&#xA;                omega.set(k1, 11101,-1);&#xA;                Bigomega = Bigomega.plus(omega);&#xA;                omega.set(k1, k1,0);&#xA;                omega.set( 11101, k1,0);&#xA;                omega.set(11101, 11101,0);&#xA;                omega.set(k1, 11101,0);&#xA;&#xA;                Xi.set( k1, 0,((-landy[l1]) + ycoa[k1]));&#xA;                Xi.set(k1 + 1, 0,(landy[l1] + ycoa[k1]));&#xA;                BigXi = BigXi.plus(Xi);&#xA;                Xi.set( k1, 0,0);&#xA;                Xi.set(k1 + 1, 0,0);&#xA;&#xA;&#xA;            }&#xA;            else if (codea[k2] == 18.0) {&#xA;                omega.set(k1, k1,1);&#xA;                omega.set( 11102, k1,-1);&#xA;                omega.set(11102, 11102,1);&#xA;                omega.set(k1, 11102,-1);&#xA;                Bigomega = Bigomega.plus(omega);&#xA;                omega.set(k1, k1,0);&#xA;                omega.set( 11102, k1,0);&#xA;                omega.set(11102, 11102,0);&#xA;                omega.set(k1, 11102,0);&#xA;&#xA;                Xi.set( k1, 0,((-landy[l1]) + ycoa[k1]));&#xA;                Xi.set(k1 + 1, 0,(landy[l1] + ycoa[k1]));&#xA;                BigXi = BigXi.plus(Xi);&#xA;                Xi.set( k1, 0,0);&#xA;                Xi.set(k1 + 1, 0,0);&#xA;&#xA;            }&#xA;            else if (codea[k2] == 81.0) {&#xA;&#xA;                omega.set(k1, k1,1);&#xA;                omega.set( 11103, k1,-1);&#xA;                omega.set(11103, 11103,1);&#xA;                omega.set(k1, 11103,-1);&#xA;                Bigomega = Bigomega.plus(omega);&#xA;                omega.set(k1, k1,0);&#xA;                omega.set( 11103, k1,0);&#xA;                omega.set(11103, 11103,0);&#xA;                omega.set(k1, 11103,0);&#xA;&#xA;                Xi.set( k1, 0,((-landy[l1]) + ycoa[k1]));&#xA;                Xi.set(k1 + 1, 0,(landy[l1] + ycoa[k1]));&#xA;                BigXi = BigXi.plus(Xi);&#xA;                Xi.set( k1, 0,0);&#xA;                Xi.set(k1 + 1, 0,0);&#xA;&#xA;            }&#xA;            else if (codea[k2] == 9.0) {&#xA;&#xA;                omega.set(k1, k1,1);&#xA;                omega.set( 11104, k1,-1);&#xA;                omega.set(11104, 11104,1);&#xA;                omega.set(k1, 11104,-1);&#xA;                Bigomega = Bigomega.plus(omega);&#xA;                omega.set(k1, k1,0);&#xA;                omega.set( 11104, k1,0);&#xA;                omega.set(11104, 11104,0);&#xA;                omega.set(k1, 11104,0);&#xA;&#xA;                Xi.set( k1, 0,((-landy[l1]) + ycoa[k1]));&#xA;                Xi.set(k1 + 1, 0,(landy[l1] + ycoa[k1]));&#xA;                BigXi = BigXi.plus(Xi);&#xA;                Xi.set( k1, 0,0);&#xA;                Xi.set(k1 + 1, 0,0);&#xA;&#xA;            }&#xA;            else if (codea[k2] == 25.0) {&#xA;&#xA;                omega.set(k1, k1,1);&#xA;                omega.set( 11105, k1,-1);&#xA;                omega.set(11105, 11105,1);&#xA;                omega.set(k1, 11105,-1);&#xA;                Bigomega = Bigomega.plus(omega);&#xA;                omega.set(k1, k1,0);&#xA;                omega.set( 11105, k1,0);&#xA;                omega.set(11105, 11105,0);&#xA;                omega.set(k1, 11105,0);&#xA;&#xA;                Xi.set( k1, 0,((-landy[l1]) + ycoa[k1]));&#xA;                Xi.set(k1 + 1, 0,(landy[l1] + ycoa[k1]));&#xA;                BigXi = BigXi.plus(Xi);&#xA;                Xi.set( k1, 0,0);&#xA;                Xi.set(k1 + 1, 0,0);&#xA;&#xA;            }&#xA;            else if (codea[k2] == 61.0) {&#xA;&#xA;                omega.set(k1, k1,1);&#xA;                omega.set( 11106, k1,-1);&#xA;                omega.set(11106, 11106,1);&#xA;                omega.set(k1, 11106,-1);&#xA;                Bigomega = Bigomega.plus(omega);&#xA;                omega.set(k1, k1,0);&#xA;                omega.set( 11106, k1,0);&#xA;                omega.set(11106, 11106,0);&#xA;                omega.set(k1, 11106,0);&#xA;&#xA;                Xi.set( k1, 0,((-landy[l1]) + ycoa[k1]));&#xA;                Xi.set(k1 + 1, 0,(landy[l1] + ycoa[k1]));&#xA;                BigXi = BigXi.plus(Xi);&#xA;                Xi.set( k1, 0,0);&#xA;                Xi.set(k1 + 1, 0,0);&#xA;&#xA;            }&#xA;            else if (codea[k2] == 72.0) {&#xA;&#xA;                omega.set(k1, k1,1);&#xA;                omega.set( 11107, k1,-1);&#xA;                omega.set(11107, 11107,1);&#xA;                omega.set(k1, 11107,-1);&#xA;                Bigomega = Bigomega.plus(omega);&#xA;                omega.set(k1, k1,0);&#xA;                omega.set( 11107, k1,0);&#xA;                omega.set(11107, 11107,0);&#xA;                omega.set(k1, 11107,0);&#xA;&#xA;                Xi.set( k1, 0,((-landy[l1]) + ycoa[k1]));&#xA;                Xi.set(k1 + 1, 0,(landy[l1] + ycoa[k1]));&#xA;                BigXi = BigXi.plus(Xi);&#xA;                Xi.set( k1, 0,0);&#xA;                Xi.set(k1 + 1, 0,0);&#xA;&#xA;            }&#xA;            else if (codea[k2] == 36.0) {&#xA;&#xA;                omega.set(k1, k1,1);&#xA;                omega.set( 11108, k1,-1);&#xA;                omega.set(11108, 11108,1);&#xA;                omega.set(k1, 11108,-1);&#xA;                Bigomega = Bigomega.plus(omega);&#xA;                omega.set(k1, k1,0);&#xA;                omega.set( 11108, k1,0);&#xA;                omega.set(11108, 11108,0);&#xA;                omega.set(k1, 11108,0);&#xA;&#xA;                Xi.set( k1, 0,((-landy[l1]) + ycoa[k1]));&#xA;                Xi.set(k1 + 1, 0,(landy[l1] + ycoa[k1]));&#xA;                BigXi = BigXi.plus(Xi);&#xA;                Xi.set( k1, 0,0);&#xA;                Xi.set(k1 + 1, 0,0);&#xA;&#xA;            }&#xA;            else if (codea[k2] == 70.0) {&#xA;&#xA;                omega.set(k1, k1,1);&#xA;                omega.set( 11109, k1,-1);&#xA;                omega.set(11109, 11109,1);&#xA;                omega.set(k1, 11109,-1);&#xA;                Bigomega = Bigomega.plus(omega);&#xA;                omega.set(k1, k1,0);&#xA;                omega.set( 11109, k1,0);&#xA;                omega.set(11109, 11109,0);&#xA;                omega.set(k1, 11109,0);&#xA;&#xA;                Xi.set( k1, 0,((-landy[l1]) + ycoa[k1]));&#xA;                Xi.set(k1 + 1, 0,(landy[l1] + ycoa[k1]));&#xA;                BigXi = BigXi.plus(Xi);&#xA;                Xi.set( k1, 0,0);&#xA;                Xi.set(k1 + 1, 0,0);&#xA;&#xA;            }&#xA;            else if (codea[k2] == 27.0) {&#xA;&#xA;                omega.set(k1, k1,1);&#xA;                omega.set( 11110, k1,-1);&#xA;                omega.set(11110, 11110,1);&#xA;                omega.set(k1, 11110,-1);&#xA;                Bigomega = Bigomega.plus(omega);&#xA;                omega.set(k1, k1,0);&#xA;                omega.set( 11110, k1,0);&#xA;                omega.set(11110, 11110,0);&#xA;                omega.set(k1, 11110,0);&#xA;&#xA;                Xi.set( k1, 0,((-landy[l1]) + ycoa[k1]));&#xA;                Xi.set(k1 + 1, 0,(landy[l1] + ycoa[k1]));&#xA;                BigXi = BigXi.plus(Xi);&#xA;                Xi.set( k1, 0,0);&#xA;                Xi.set(k1 + 1, 0,0);&#xA;&#xA;            }&#xA;            else if (codea[k2] == 54.0) {&#xA;&#xA;                omega.set(k1, k1,1);&#xA;                omega.set( 11111, k1,-1);&#xA;                omega.set(11111, 11111,1);&#xA;                omega.set(k1, 11111,-1);&#xA;                Bigomega = Bigomega.plus(omega);&#xA;                omega.set(k1, k1,0);&#xA;                omega.set( 11111, k1,0);&#xA;                omega.set(11111, 11111,0);&#xA;                omega.set(k1, 11111,0);&#xA;&#xA;                Xi.set( k1, 0,((-landy[l1]) + ycoa[k1]));&#xA;                Xi.set(k1 + 1, 0,(landy[l1] + ycoa[k1]));&#xA;                BigXi = BigXi.plus(Xi);&#xA;                Xi.set( k1, 0,0);&#xA;                Xi.set(k1 + 1, 0,0);&#xA;&#xA;            }&#xA;            else if (codea[k2] == 16.0) {&#xA;&#xA;                omega.set(k1, k1,1);&#xA;                omega.set( 11112, k1,-1);&#xA;                omega.set(11112, 11112,1);&#xA;                omega.set(k1, 11112,-1);&#xA;                Bigomega = Bigomega.plus(omega);&#xA;                omega.set(k1, k1,0);&#xA;                omega.set( 11112, k1,0);&#xA;                omega.set(11112, 11112,0);&#xA;                omega.set(k1, 11112,0);&#xA;&#xA;                Xi.set( k1, 0,((-landy[l1]) + ycoa[k1]));&#xA;                Xi.set(k1 + 1, 0,(landy[l1] + ycoa[k1]));&#xA;                BigXi = BigXi.plus(Xi);&#xA;                Xi.set( k1, 0,0);&#xA;                Xi.set(k1 + 1, 0,0);&#xA;&#xA;            }&#xA;            else if (codea[k2] == 45.0) {&#xA;&#xA;                omega.set(k1, k1,1);&#xA;                omega.set( 11113, k1,-1);&#xA;                omega.set(11113, 11113,1);&#xA;                omega.set(k1, 11113,-1);&#xA;                Bigomega = Bigomega.plus(omega);&#xA;                omega.set(k1, k1,0);&#xA;                omega.set( 11113, k1,0);&#xA;                omega.set(11113, 11113,0);&#xA;                omega.set(k1, 11113,0);&#xA;&#xA;                Xi.set( k1, 0,((-landy[l1]) + ycoa[k1]));&#xA;                Xi.set(k1 + 1, 0,(landy[l1] + ycoa[k1]));&#xA;                BigXi = BigXi.plus(Xi);&#xA;                Xi.set( k1, 0,0);&#xA;                Xi.set(k1 + 1, 0,0);&#xA;&#xA;            }&#xA;            else if (codea[k2] == 7.0) {&#xA;&#xA;                omega.set(k1, k1,1);&#xA;                omega.set( 11114, k1,-1);&#xA;                omega.set(11114, 11114,1);&#xA;                omega.set(k1, 11114,-1);&#xA;                Bigomega = Bigomega.plus(omega);&#xA;                omega.set(k1, k1,0);&#xA;                omega.set( 11114, k1,0);&#xA;                omega.set(11114, 11114,0);&#xA;                omega.set(k1, 11114,0);&#xA;&#xA;                Xi.set( k1, 0,((-landy[l1]) + ycoa[k1]));&#xA;                Xi.set(k1 + 1, 0,(landy[l1] + ycoa[k1]));&#xA;                BigXi = BigXi.plus(Xi);&#xA;                Xi.set( k1, 0,0);&#xA;                Xi.set(k1 + 1, 0,0);&#xA;&#xA;            }&#xA;            else if (codea[k2] == 63.0) {&#xA;&#xA;                omega.set(k1, k1,1);&#xA;                omega.set( 11115, k1,-1);&#xA;                omega.set(11115, 11115,1);&#xA;                omega.set(k1, 11115,-1);&#xA;                Bigomega = Bigomega.plus(omega);&#xA;                omega.set(k1, k1,0);&#xA;                omega.set( 11115, k1,0);&#xA;                omega.set(11115, 11115,0);&#xA;                omega.set(k1, 11115,0);&#xA;&#xA;                Xi.set( k1, 0,((-landy[l1]) + ycoa[k1]));&#xA;                Xi.set(k1 + 1, 0,(landy[l1] + ycoa[k1]));&#xA;                BigXi = BigXi.plus(Xi);&#xA;                Xi.set( k1, 0,0);&#xA;                Xi.set(k1 + 1, 0,0);&#xA;&#xA;            }&#xA;&#xA;            if(k2&amp;lt;timeya.length-1) {&#xA;                k2++;&#xA;&#xA;            }&#xA;            l++;&#xA;        } else  if(timex[k1] &amp;gt; timeya[k2]) {&#xA;            omega.set(k1, k1,1);&#xA;            omega.set(k1, k1 + 1,-1);&#xA;            omega.set(k1 + 1, k1,-1);&#xA;            omega.set( k1 + 1, k1 + 1,1);&#xA;            Bigomega = Bigomega.plus(omega);&#xA;            omega.set(k1, k1,0);&#xA;            omega.set(k1, k1 + 1,0);&#xA;            omega.set(k1 + 1, k1,0);&#xA;            omega.set( k1 + 1, k1 + 1,0);&#xA;&#xA;            Xi.set( k1, 0,-(ycoa[k1]));&#xA;            Xi.set(k1 + 1, 0,ycoa[k1]);&#xA;            BigXi = BigXi.plus(Xi);&#xA;            Xi.set( k1, 0,0);&#xA;            Xi.set(k1 + 1, 0,0);&#xA;&#xA;        }&#xA;        k1++;&#xA;    }&#xA;    Bigomega.set(0,0,2);&#xA;&#xA;    Matrix mu=Bigomega.inverse().times(BigXi);&#xA;    mu.print(3,6);&#xA;&#xA;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;}&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the java code xcoa,ycoa,thetacoa get from line no.5(Algorithm EIF-construct). I create another java file to save the values that I get from line no: 5.Then I use it here. I am not very sure how to construct line no:6 and 7 so I assume that our world is noise free and use 1 and -1 for to represent it between two pose. Say , Robot go from &lt;span class=&quot;math-container&quot;&gt;$x_t to x_{t+1}$&lt;/span&gt; so the cell between them the diagonal cell represent with 1 and off diagonal -1. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;while(k1&amp;lt;timex.length-1) {&#xA;        if (timex[k1] &amp;lt; timeya[k2]) {&#xA;&#xA;            omega.set( k1, k1,1);&#xA;            omega.set(k1, k1 + 1,-1);&#xA;            omega.set( k1 + 1, k1,-1);&#xA;            omega.set( k1 + 1, k1 + 1,1);&#xA;&#xA;            Bigomega = Bigomega.plus(omega);&#xA;            omega.set( k1, k1,0); //clear value store in omega&#xA;            omega.set(k1, k1 + 1,0);&#xA;            omega.set( k1 + 1, k1,0);&#xA;            omega.set( k1 + 1, k1 + 1,0);&#xA;&#xA;            Xi.set( k1, 0,-(ycoa[k1]));// construct &lt;span class=&quot;math-container&quot;&gt;$\xi$&lt;/span&gt; vector for y co - ordinate. Alternation of line 19. As fail to understand how to create &lt;span class=&quot;math-container&quot;&gt;$\mu_{tx},\mu_{ty},\mu_{t\theta},\mu_{jx}\mu_{jy}$&lt;/span&gt;&#xA;            Xi.set(k1 + 1, 0,ycoa[k1]);&#xA;            BigXi = BigXi.plus(Xi);&#xA;            Xi.set( k1, 0,0); //clear value store is xi&#xA;            Xi.set(k1 + 1, 0,0);&#xA;&#xA;&#xA;        } &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;90.0,54.0,27.0,81.0.... they are the landmark numbers. As per my code same code run thrice for x,y,theta and then plot all of them to get a map and path. The code I write here is run for y  co because &lt;span class=&quot;math-container&quot;&gt;$\xi$&lt;/span&gt; is set as &lt;strong&gt;* Xi.set( k1, 0,-(ycoa[k1]));&#xA;                Xi.set(k1 + 1, 0,ycoa[k1]);&lt;em&gt;&lt;/strong&gt;  If I write  down  Xi.set( k1, 0,-&lt;strong&gt;&lt;/em&gt;(xcoa[k1])*&lt;/strong&gt;);&#xA;                Xi.set(k1 + 1, 0,&lt;strong&gt;&lt;em&gt;xcoa[k1]&lt;/em&gt;&lt;/strong&gt;); it will give me x coordinates. So I modify this code in this way. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem with this code is &lt;strong&gt;&lt;em&gt;Matrix inversion&lt;/em&gt;&lt;/strong&gt; is difficult. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking for the suggestion how to implement the code as describe in algorithm?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the need of Algorithm EIF_reduce as per table 11.3? I have only 15 landmark. So I calculate &lt;span class=&quot;math-container&quot;&gt;$\mu $&lt;/span&gt; at the end of this code block. Am I wrong? &lt;/p&gt;&#xA;" OwnerUserId="20610" LastEditorUserId="20610" LastEditDate="2018-09-24T18:27:47.263" LastActivityDate="2018-09-24T18:27:47.263" Title="EIF slam algorithm implementation as per Probabilistic Robotics" Tags="&lt;mobile-robot&gt;&lt;slam&gt;&lt;localization&gt;&lt;jacobian&gt;&lt;artificial-intelligence&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16431" PostTypeId="2" ParentId="15942" CreationDate="2018-09-24T20:57:18.873" Score="1" Body="&lt;p&gt;Have you reviewed this article?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An Explicit Loop Closing Technique for 6D SLAM&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It consists of building the 3D model of environment with heuristic loop closure using ICP and reliable feature extraction.&lt;/p&gt;&#xA;" OwnerUserId="17877" LastActivityDate="2018-09-24T20:57:18.873" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16432" PostTypeId="2" ParentId="15942" CreationDate="2018-09-25T08:52:24.217" Score="1" Body="&lt;p&gt;I'm not sure if this is the paper where the method was first proposed, but the 1992 paper &lt;a href=&quot;https://www.researchgate.net/publication/3191994_A_method_for_registration_of_3-D_shapes_IEEE_Trans_Pattern_Anal_Mach_Intell&quot; rel=&quot;nofollow noreferrer&quot;&gt;A Method for Registration of 3-D Shapes&lt;/a&gt; by Best and McKay (published in &lt;a href=&quot;https://ieeexplore.ieee.org/xpl/RecentIssue.jsp?punumber=34&quot; rel=&quot;nofollow noreferrer&quot;&gt;IEEE Transactions on Pattern Analysis and Machine Intelligence&lt;/a&gt; 14(2):239-256 · March 1992) does describe a method of the kind you are looking for.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;More importantly from your perspective, it includes a fairly detailed review of the literature at that date.&lt;/p&gt;&#xA;" OwnerUserId="17029" LastActivityDate="2018-09-25T08:52:24.217" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16433" PostTypeId="1" AcceptedAnswerId="16434" CreationDate="2018-09-25T09:40:01.397" Score="1" ViewCount="619" Body="&lt;p&gt;Nanorobotics can be realized with a combination of a magnetic field and a passive robot. The robot is equal to a tweezer which is controlled by an external field. This field is generated by electromagnetic coils. Even the topic is described in the literature since the 2000s, it is hard to understand how such a system works exactly. My question is: what kind of coil is needed to generate a vector field which drives the robot? As far as i know from the physics course, a normal coil can either be on or off, but how to change the direction of the field?&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2018-09-25T11:02:11.263" Title="How to manipulate the magnetic field around a robot?" Tags="&lt;electronics&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16434" PostTypeId="2" ParentId="16433" CreationDate="2018-09-25T10:53:34.930" Score="2" Body="&lt;p&gt;The magnetic field is proportional to the current. A fixed geometry coil can generate a field that is positive or negative or zero based on how much current is driven through the coil and which direction the current goes. This is limited by how heat is removed from the system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The exact shape of the field can be influenced using a magnetic circuit to guide the magnetic field.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Magnetic fields combine so two coils can create a combined field that is any combination (sum) of the individual fields. Add as many coils as you want. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other types of control can be done by rapidly switching fields (perhaps just a single field) on and off rapidly. This is what is done for the magnetic levitation desk toys. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are other things that can be done by using the magnetic field to transmit power, or combining mechanical or fluid dynamic effects on the motion of the nano-robot with the magnetic effect.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2018-09-25T10:53:34.930" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16435" PostTypeId="2" ParentId="16433" CreationDate="2018-09-25T11:02:11.263" Score="1" Body="&lt;p&gt;AC motors operate by generating a vector field. The field on the stator rotates, and the rotating field interacts with the field on the rotor (generated, or permanent magnets, or induced) to move the rotor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The motor fields rotate by varying the &lt;em&gt;current&lt;/em&gt; applied to the stator windings because magnetic field strength is proportional to current. The orientation of the coil/winding determines the direction of the field, and then the applied current essentially determines the magnitude along that axis. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-09-25T11:02:11.263" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16436" PostTypeId="1" AcceptedAnswerId="16443" CreationDate="2018-09-25T13:42:53.023" Score="0" ViewCount="97" Body="&lt;p&gt;I wish to rotate a rectangular platform about its length. It is attached to a shaft that runs through the length of the platform at width/2. How can I compute the torque of the motor required to rotate and hold this platform. The platform has uniformly distributed weight on it. I want to rotate it upto 45 degrees only. I am not entirely sure if I should go fo a high torque DC motor or a stepper motor.&lt;/p&gt;&#xA;" OwnerUserId="13065" LastActivityDate="2018-09-26T02:48:38.150" Title="Calculate torque required to rotate and hold a platform" Tags="&lt;motor&gt;&lt;torque&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16437" PostTypeId="1" CreationDate="2018-09-25T15:46:06.690" Score="0" ViewCount="71" Body="&lt;p&gt;The latest edition of Servo Magazine clued me to the existence of the Create2.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So one is now on the way and I've begun downloading the documentation. The problem is that the doc's which are dated 2014 are full of referrals to other documents but those links are broken or non-existent. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;iRobot appears to continue supporting STEM and Create2, so how does one find the missing files?&lt;/p&gt;&#xA;" OwnerUserId="21259" LastEditorUserId="37" LastEditDate="2018-09-25T16:07:08.633" LastActivityDate="2018-09-25T16:27:09.917" Title="Missing links in Create 2 documentation" Tags="&lt;irobot-create&gt;" AnswerCount="1" CommentCount="4" ClosedDate="2018-10-05T17:44:42.857" ContentLicense="CC BY-SA 4.0" />
  <row Id="16438" PostTypeId="1" CreationDate="2018-09-25T15:55:15.310" Score="2" ViewCount="446" Body="&lt;p&gt;I am trying to set up EGM (Externally Guided Motion from ABB) for Position Guidance using C#. But when the code reaches EGMSetupUC it will always give the error:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;41824: Not possible to open the UdpUc device&lt;/strong&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;It was not possible to open the external device EGMsensor: that was specified in the RAPID instruction EGMSetupUC.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;strong&gt;Consequences&lt;/strong&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The program execution is stopped immediately.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;strong&gt;Actions&lt;/strong&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Check if&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;1) The device name is spelled correctly.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;2) The device is connected.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;3) The device is up and running.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The robot code is the following:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;PROC mainEGM()&#xA;    ! Move to start position. Fine point is a demand       &#xA;    MoveJ p10,v300,fine,tMarkerAuto;&#xA;    Test_EGM;&#xA;ENDPROC&#xA;&#xA;PROC Test_EGM()&#xA;    EGMReset egmID1;&#xA;    egmSt1:=EGMGetState(egmID1);&#xA;    TPWrite &quot;EGM state: &quot;\Num:=egmSt1;&#xA;&#xA;    EGMGetId egmID1;       &#xA;    egmSt1:=EGMGetState(egmID1);&#xA;    TPWrite &quot;EGM state: &quot;\Num:=egmSt1;       &#xA;&#xA;    IF egmSt1 &amp;lt;= EGM_STATE_CONNECTED THEN&#xA;        ! Set up the EGM data source: UdpUc server using device &quot;EGMsensor:&quot; and configruation &quot;default&quot;&#xA;        EGMSetupUC ROB_1, egmID1, &quot;default&quot;, &quot;EGMsensor&quot;, \pose, \CommTimeout:=5;&#xA;    ENDIF&#xA;    TPWrite &quot;EGM state: &quot;\Num:=egmSt1;&#xA;    Stop;          &#xA;    ...&#xA;ENDPROC&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In C#&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;private void EGMProcess(object caller, DoWorkEventArgs e)&#xA;{&#xA;    UdpClient mUdpServer = new UdpClient(mPort);&#xA;    IPEndPoint sender = new IPEndPoint(IPAddress.Any, mPort);&#xA;&#xA;    Console.WriteLine(&quot;Waiting for EGMRobot message...&quot;);&#xA;    var protomessage = mUdpServer.Receive(ref sender);&#xA;    ....&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Robot program won't go past EGMSetupUC and C# program won't get out of Receive, then I am deducing they can't connect with each other.&#xA;Both are on the same network, in other projects we have confirmed that UDP protocol works fine, and we have used RRI and socket communication with this robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is most likely a parameter configuration issue.&#xA;Can someone help us with this??&lt;/p&gt;&#xA;" OwnerUserId="21178" LastActivityDate="2018-09-25T15:55:15.310" Title="EGM setup. Not possible to open the UdpUc device" Tags="&lt;industrial-robot&gt;" AnswerCount="0" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16439" PostTypeId="2" ParentId="16437" CreationDate="2018-09-25T16:27:09.917" Score="1" Body="&lt;p&gt;I'm not sure what you're looking for. If I go to the &lt;a href=&quot;https://www.irobot.com/about-irobot/stem/create-2.aspx&quot; rel=&quot;nofollow noreferrer&quot;&gt;Create2 page&lt;/a&gt;, there is a button that says, &quot;&lt;a href=&quot;https://www.irobot.com/about-irobot/stem/create-2/projects.aspx&quot; rel=&quot;nofollow noreferrer&quot;&gt;Get Started&lt;/a&gt;&quot; that takes me to a page that gives the &lt;a href=&quot;https://www.irobotweb.com/-/media/MainSite/Files/About/STEM/Create/2018-07-19_iRobot_Roomba_600_Open_Interface_Spec.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Open Interface Specification&lt;/a&gt;, dated July 19, 2018. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you click the link for &quot;&lt;a href=&quot;https://www.irobot.com/about-irobot/stem/create-2/projects.aspx#link&quot; rel=&quot;nofollow noreferrer&quot;&gt;More...&lt;/a&gt;&quot; under the &lt;strong&gt;Create 2 Projects&lt;/strong&gt; heading, it takes you to a list of other projects, including &lt;a href=&quot;https://www.irobotweb.com/-/media/MainSite/PDFs/About/STEM/Create/Arduino_Tutorial.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Arduino&lt;/a&gt; and &lt;a href=&quot;https://www.irobotweb.com/-/media/MainSite/PDFs/About/STEM/Create/RaspberryPi_Tutorial.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;RaspberryPi&lt;/a&gt; tutorials, a &lt;a href=&quot;https://www.irobotweb.com/-/media/MainSite/PDFs/About/STEM/Create/BatteryPower.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;battery power tutorial&lt;/a&gt;, as well as &lt;a href=&quot;https://www.irobotweb.com/-/media/MainSite/Files/About/STEM/Create/Create2-CablePinOut.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;cable pinout&lt;/a&gt; diagram, &lt;a href=&quot;https://www.irobotweb.com/-/media/MainSite/PDFs/About/STEM/Create/iRobotCreate2-ScrewBossLocations.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;chassis screw location&lt;/a&gt; diagram, and a host of other documents pertaining to different communication protocols.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-09-25T16:27:09.917" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16440" PostTypeId="1" CreationDate="2018-09-25T17:14:02.570" Score="0" ViewCount="127" Body="&lt;p&gt;I am having a problem with pitch measurements with Bosch BNO055 IMU. The device is rotated on a relatively stable rotating spindle and does a revolution on a circle around 10cm radius. It is upright in the current placement. Attached is my signal when I do harmonic oscillations on an arc of around 90 degrees.&lt;a href=&quot;https://i.stack.imgur.com/maesA.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/maesA.png&quot; alt=&quot;Internal Kalman filter pose output&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The estimates I am getting are from the internal Kalman filter. We are using the sensor with RTIMULib and this test code:&lt;a href=&quot;https://github.com/RPi-Distro/RTIMULib/blob/master/Linux/python/tests/Fusion.py&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/RPi-Distro/RTIMULib/blob/master/Linux/python/tests/Fusion.py&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as I know, no preparations were done, including calibration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I get very unusual discontinuities in pitch that do not look like warping at all. There are quite a few phenomena, like:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;It doesn't seem symmetrical, the signal is not the same at the same point in both directions, which can be seen by asymmetrical peaks.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The jumps are sometimes from a to pi-a or -pi-a, but sometimes to a completely random value.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;When the rotating plane is not horizontal, pitch stays small in some parts of the arc, while it changes rapidly in some other parts.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Can this be caused by the problematic orientation?&#xA;Can this be &quot;expected&quot; in any scenario?&lt;/p&gt;&#xA;" OwnerUserId="21261" LastEditorUserId="21261" LastEditDate="2018-09-25T20:48:06.410" LastActivityDate="2020-12-14T00:03:40.673" Title="Discontinuities in IMU data in pitch only" Tags="&lt;imu&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16441" PostTypeId="2" ParentId="16440" CreationDate="2018-09-25T18:25:51.227" Score="1" Body="&lt;p&gt;:EDIT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since the data is coming directly from the IMU itself, I would double check the startup parameters for the device and consider resetting it also. &lt;a href=&quot;https://ae-bst.resource.bosch.com/media/_tech/media/datasheets/BST_BNO055_DS000_14.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;The datasheet&lt;/a&gt; gives information on selecting the style of fused data that is used (page 21), which is especially noteworthy as the data may be given as a &lt;em&gt;relative orientation&lt;/em&gt; (relative to startup orientation) or &lt;em&gt;absolute orientation&lt;/em&gt; (relative to the local/Earth magnetic field). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The output angles are selectable between degrees and radians, so I had briefly considered maybe you had set the unit to &quot;relative orientation&quot; and the output units to &quot;radians&quot; and then spun it on a turntable for a while. This might have caused the output angle to accumulate up to 145 &lt;em&gt;radians&lt;/em&gt;, but in reviewing the datasheet it states the output angles are clamped to +/- 180 degrees for pitch, +/- 90 degrees for roll, and 0-360 degrees for yaw (page 30). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would double check the initial configuration settings on the unit to be sure that what you think you're getting is what you're actually getting. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;:Original post:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It looks like maybe you've got accelerometer data feeding into your angle estimate, which isn't necessarily bad, but I've seen some bad code out there for &quot;converting&quot; an accelerometer reading to an orientation. There are &lt;a href=&quot;https://stackoverflow.com/a/30195572/5171120&quot;&gt;some solutions that work&lt;/a&gt;, but they're all based on &lt;a href=&quot;https://www.nxp.com/files-static/sensors/doc/app_note/AN3461.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this application note&lt;/a&gt; that gives &lt;strong&gt;&quot;the absence of linear acceleration&quot;&lt;/strong&gt; as a precondition for using accelerometer output for estimating roll and pitch. If the sensor is traversing an arc then it is experiencing a linear acceleration. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Accelerometer output can't estimate yaw (heading) because the gravity axis is aligned with the yaw axis, so there is no projection of gravity to the yaw axis and thus there's nothing to measure. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2018-09-25T20:32:13.743" LastActivityDate="2018-09-25T20:32:13.743" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16443" PostTypeId="2" ParentId="16436" CreationDate="2018-09-26T02:48:38.150" Score="1" Body="&lt;p&gt;I have a hard time picturing your setup, but let us think about what torque is... the units can be foot X lbs or inch X lbs or N X M. The point is torque is weight multiplied by a distance. If your setup is super fancy then you will have to get into vectors; but if you simply have a platform at some distance from a shaft, here is how I would go about it: &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;weigh the platform, or at the very least get a ballpark weight. &lt;/li&gt;&#xA;&lt;li&gt;measure the distance from the shaft to the wight&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;These two basic measurements should give you the torque value. Some other considerations are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;is your motor connected to the shaft through gearing? if you add gears (which you will need to do to transfer the power from the motor to the shaft) you might as well gear it to be able to get a smaller (cheaper/more common) motor.&lt;/li&gt;&#xA;&lt;li&gt;You can buy motors from ebay that are already coupled to a gearbox, that will allow you to make crazy torque. Search for &quot;right angle gear&quot; on ebay, for ex: &lt;a href=&quot;https://www.ebay.com/itm/DC-24V-50Rpm-Electric-Gear-Motor-Right-Angle-Reversible-High-Torque-for-DIY/172563602882?hash=item282d979dc2:g:FvkAAOSwGG5aJjUR&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.ebay.com/itm/DC-24V-50Rpm-Electric-Gear-Motor-Right-Angle-Reversible-High-Torque-for-DIY/172563602882?hash=item282d979dc2:g:FvkAAOSwGG5aJjUR&lt;/a&gt; &lt;/li&gt;&#xA;&lt;li&gt;if you are holding the platform, a worm gearbox will hold the weight without the motor needing to eat power.&lt;/li&gt;&#xA;&lt;li&gt;There are other things on my mind, like starting torque vs. running torque, vectors, gearing, footprint, and more, but I feel like I'm going off on a tangent. I keep doing that. &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Good luck with your project.&lt;/p&gt;&#xA;" OwnerUserId="18167" LastActivityDate="2018-09-26T02:48:38.150" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16444" PostTypeId="1" CreationDate="2018-09-26T04:39:31.707" Score="1" ViewCount="99" Body="&lt;p&gt;A system is differentially flat if the state and control input can be written as functions of the flat outputs and their time derivatives.&lt;/p&gt;&#xA;&lt;p&gt;In other words, if a system is differentially flat, we can represent the state of the system and control signal as:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$x = x(y, \dot y, \ddot y, ... , y^{(p)})$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$u = u(y, \dot y, \ddot y, ... , y^{(q)})$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;It's really a nice property of the system. But I don't quite get the name of this property. Why it is called differential &amp;quot;flatness&amp;quot;. What does it have to do with &amp;quot;flat&amp;quot;?&lt;/p&gt;&#xA;" OwnerUserId="19727" LastEditorUserId="19727" LastEditDate="2020-11-10T04:36:08.410" LastActivityDate="2020-11-10T04:36:08.410" Title="Why differential flatness is called &quot;flat&quot;?" Tags="&lt;control&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16445" PostTypeId="1" AcceptedAnswerId="16448" CreationDate="2018-09-26T06:45:11.950" Score="4" ViewCount="638" Body="&lt;p&gt;I posted a question regarding robot path planning &lt;a href=&quot;https://robotics.stackexchange.com/questions/16363/follow-up-question-to-robot-path-planning?noredirect=1&amp;amp;lq=1&quot;&gt;here&lt;/a&gt; now the question is mainly about the code and logic but still I shortly explain the initial situation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I tried to change the code so that the program is gonna work for my problem. My goal is to get my robot which is an Arlo robot to reach predefined points with the help of a beacon(A) and the plt 300 which is following the beacon with a laser. So that the beacon is right above the predefined point.&lt;br&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/0joFe.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0joFe.png&quot; alt=&quot;View from above&quot;&gt;&lt;/a&gt;&lt;br&gt;&#xA;I decided to use the mathematical convention. So in the picture the coordinates of the point A would be:&lt;br&gt;&#xA;A_x = M_x + cos(θ + 24)*r&lt;br&gt;&#xA;A_y = M_y + sin(θ + 24)*r&lt;br&gt;&#xA;Now I just want to know if the code would theoratically work or not.&lt;br&gt;&#xA;&lt;strong&gt;Edit&lt;/strong&gt;&lt;br&gt;&#xA;I declared missing variables, fixed the float to binary operator error. Changed the code like Chuck suggested, changed destinationHeading not sure if it right.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;//Here is the code&#xA;  #include &amp;lt;ArloRobot.h&amp;gt;&#xA;  #include &amp;lt;NewPing.h&amp;gt;&#xA;  #include &amp;lt;Servo.h&amp;gt;&#xA;&#xA;&#xA; // Arlo and serial objects required&#xA; ArloRobot Arlo;                               // Arlo object&#xA; SoftwareSerial ArloSerial(12, 13);            // Serial in I/O 12, out I/O 13&#xA;&#xA; int countsLeft, countsRight;                  // Encoder counting variables&#xA;&#xA; //current points&#xA; float xc = -300;&#xA; float yc = 300;&#xA;&#xA; //target points&#xA;&#xA; float xt = -300;&#xA; float yt = -300;&#xA;&#xA; //turning  angle&#xA; float turnAngle;&#xA;&#xA; float startingHeading = 0;&#xA; float beaconHeading = 24;&#xA; float destinationHeading = 0;&#xA; float effectiveHeading = startingHeading + beaconHeading;&#xA; float currentHeading = startingHeading;&#xA; float r = 12;&#xA;&#xA; float xm = 0;&#xA; float ym = 0; &#xA;&#xA; float xn = 0;&#xA; float yn = 0;&#xA;&#xA;&#xA; float turnRight = 1;&#xA; float turnLeft = -1;&#xA; float wheelBase = 39.5;&#xA; float tireRadius = 7;&#xA; float speedModifier = 0;&#xA; float vRightMotor = 0;&#xA; float vLeftMotor = 0;&#xA; float vMotor = 0;&#xA; float theta = 0;&#xA; float thetaDot = 0;&#xA; float dT = 0.00104;&#xA; float distance = 0;&#xA;&#xA;&#xA; void setup() {&#xA; // pin setup&#xA; Serial.begin(9600);&#xA; ArloSerial.begin(19200);                    // Start DHB-10 serial com&#xA; Arlo.begin(ArloSerial);                     // Pass to Arlo object&#xA; Arlo.clearCounts();                         // Clear encoder counts&#xA; }&#xA;&#xA; void loop() {&#xA; xm = xc - (cos(startingHeading + beaconHeading) * r);&#xA; ym = yc - (sin(startingHeading + beaconHeading) * r); &#xA;&#xA; xn = xt - (cos(startingHeading + beaconHeading) * r);&#xA; yn = yt - (sin(startingHeading + beaconHeading) * r);&#xA; destinationHeading = atan2((yn - ym), (xn - xm))- startingHeading; &#xA; //calculate turning angle&#xA; destinationHeading = destinationHeading * 180 / 3.1415; //convert to degrees&#xA; turnAngle = destinationHeading - currentHeading;&#xA;&#xA; if (turnAngle &amp;gt; 180)&#xA; {&#xA; turnAngle = turnAngle - 360;&#xA; }&#xA;&#xA; if (turnAngle &amp;lt; -180)&#xA; {&#xA; turnAngle = turnAngle + 360;&#xA; }&#xA;&#xA; if (turnAngle &amp;lt; 0)&#xA; {&#xA; speedModifier = turnRight;&#xA; }&#xA;&#xA; if (turnAngle &amp;gt; 0)&#xA; {&#xA; speedModifier = turnLeft;&#xA; }&#xA;&#xA; theta = 0;&#xA; while(abs(abs(theta) - abs(turnAngle)) &amp;gt; 0)&#xA; {&#xA;&#xA; vRightMotor = speedModifier * 50;&#xA; vLeftMotor = -speedModifier * 50;&#xA; vMotor = vRightMotor;&#xA; thetaDot = (tireRadius * vMotor) / (wheelBase / 2); &#xA; theta = theta + thetaDot * dT;&#xA; }&#xA;&#xA;&#xA; currentHeading = destinationHeading;&#xA; distance = sqrt(((xn - xm)* (xn - xm)) + ((yn - ym) * ( yn-ym)));&#xA; if (distance &amp;gt; 0)&#xA; {&#xA; Arlo.writeSpeeds(72, 72);                 // Go forward 72 counts/sec&#xA; }&#xA; xm = xn;&#xA; ym = yn;&#xA;&#xA; }    &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The main code is from the answer of this question &lt;a href=&quot;https://robotics.stackexchange.com/questions/7928/robot-path-planning?rq=1&quot;&gt;here&lt;/a&gt;  &lt;/p&gt;&#xA;" OwnerUserId="21145" LastEditorUserId="21145" LastEditDate="2018-09-28T08:41:28.327" LastActivityDate="2018-09-28T15:43:47.050" Title="Path Planning code" Tags="&lt;arduino&gt;&lt;path-planning&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16446" PostTypeId="2" ParentId="16445" CreationDate="2018-09-26T08:51:01.027" Score="1" Body="&lt;p&gt;What you have implemented in the sourcecode is called steering behavior and was introduced by Craig Reynolds in the year 1999 in the paper &lt;a href=&quot;https://www.red3d.com/cwr/steer/gdc99/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Steering behaviors for autonomous characters&lt;/a&gt; The idea is to use a locomotion model (which is given in your sourcecode too and then calculate the angle of the car like robot. Implementing steering behavior in software is a bit tricky. As far as i can see from your previous postings, you are working hard on the subject. Mostly, the prototype doesn't work in the first trial and then reprogramming is needed (I'm talking with experience, my own steering project was a mess).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For reasons of simplification I can recommend to use a object oriented programming language. Your code right now was probably written in C. If this could be extended into the directions of structs and Python classes it is easier to modify. If the project is to complicated, it is a good idea to simplify the task first. This is possible by not controlling the robot autonomously, but the software is painting only the line from the robot to the goal and a human operator has to steer to the goal manually. This kind of setup is called in the literature a “head up display”. It is easier to program than a full blown steering control.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2018-09-26T08:51:01.027" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="16448" PostTypeId="2" ParentId="16445" CreationDate="2018-09-26T12:53:11.743" Score="1" Body="&lt;p&gt;I think your problem revolves around the line:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;float currentHeading = startingHeading + beaconHeading;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The beacon heading has nothing to do with the current heading of the robot. Instead, your current heading should just be initialized to the starting heading:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;float currentHeading = startingHeading;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The only time that the beacon heading comes into play is when you update your robot's position by taking a measurement of the beacon. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't see a beacon/position update section anywhere in your code, so right now it looks like the whole thing is running open loop. If that's the case, then you don't need the beacon angle offset anywhere. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you do decide to incorporate a beacon position measurement somewhere in your code, then you would update your heading with the code I provided at the end of the other question:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;M_x = A_x - \sin{(\theta_{\mbox{heading}} + \theta_{\mbox{beacon offset}})}*r \\&#xA;M_y = A_y - \cos{(\theta_{\mbox{heading}} + \theta_{\mbox{beacon offset}})}*r \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But again, this requires you to measure &lt;span class=&quot;math-container&quot;&gt;$&amp;lt;A_x, A_y&amp;gt;$&lt;/span&gt;. If you don't measure the beacon, you can omit the beacon offset angle altogether.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;:EDIT:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to put the beacon on the target, consider the following graphic:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/v0OXq.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/v0OXq.png&quot; alt=&quot;Starting&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The robot faces in some direction and there's a target. In order to get the &lt;strong&gt;beacon&lt;/strong&gt; on the target, you would want to end up like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/8JsjG.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8JsjG.png&quot; alt=&quot;End goal&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That is, you want the robot to drive &lt;em&gt;not quite&lt;/em&gt; the direct heading to the target. You want to &lt;em&gt;modify&lt;/em&gt; the &quot;target&quot; heading by some amount in order to be able to end with the beacon on the target. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/NPzZy.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/NPzZy.png&quot; alt=&quot;Headings described&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, how much do you need to adjust your robot center &lt;span class=&quot;math-container&quot;&gt;$M$&lt;/span&gt; to target heading in order to achieve the beacon &lt;span class=&quot;math-container&quot;&gt;$A$&lt;/span&gt; to target heading? That depends on how far away the robot center is right now (&lt;span class=&quot;math-container&quot;&gt;$r$&lt;/span&gt;, the red line) and how far away the beacon is from the robot center (&lt;span class=&quot;math-container&quot;&gt;$dy$&lt;/span&gt;, in blue, and &lt;span class=&quot;math-container&quot;&gt;$dx$&lt;/span&gt;, in light orange.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ytJLz.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ytJLz.png&quot; alt=&quot;Distances pictured&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So now, &lt;strong&gt;if&lt;/strong&gt; your heading is described as an angle that increases positive CCW from the +x-axis, you can calculate the naive heading (red) as &lt;span class=&quot;math-container&quot;&gt;$atan2(\mbox{target}_y - M_y, \mbox{target}_x - M_x)$&lt;/span&gt;, and then you can see that the heading offset to get the beacon at the target is &lt;span class=&quot;math-container&quot;&gt;$asin(dy/r)$&lt;/span&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, the new distance you need to travel, &lt;span class=&quot;math-container&quot;&gt;$dS$&lt;/span&gt;, then &lt;em&gt;length&lt;/em&gt; of the orange line, is &lt;span class=&quot;math-container&quot;&gt;$cos(\theta_{\mbox{heading offset}})*|r| - dx$&lt;/span&gt;. The length of &lt;span class=&quot;math-container&quot;&gt;$r$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$|r|$&lt;/span&gt;, is found with the Pythagorean Theorem &lt;span class=&quot;math-container&quot;&gt;$\sqrt{\left(\mbox{target}_x - M_x \right)^2 + \left(\mbox{target}_y - M_y \right)^2}$&lt;/span&gt;.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2018-09-28T15:43:47.050" LastActivityDate="2018-09-28T15:43:47.050" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="16452" PostTypeId="1" CreationDate="2018-09-28T17:55:55.080" Score="0" ViewCount="41" Body="&lt;p&gt;I am bother on some line which is written is Probabilistic Robotics book  by Dr.Sebestian Thrun &lt;strong&gt;&lt;em&gt;From a probabilistic perspective, there are two main forms of the SLAM problem,which are both of equal practical importance. One is known as the online SLAM problem: and offline SLAM problem&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to know that Is there any other perspective of slam? Because the author write that from a probabilistic perspective. If there any other perspective of slam please let me know.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you&lt;/p&gt;&#xA;" OwnerUserId="20610" LastActivityDate="2019-08-25T18:00:50.430" Title="Alternate perspective other than probabilistic perspective to implement slam" Tags="&lt;mobile-robot&gt;&lt;localization&gt;&lt;kalman-filter&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16453" PostTypeId="1" CreationDate="2018-09-28T20:39:32.227" Score="0" ViewCount="120" Body="&lt;p&gt;I am developing a robot with the iRobot Create 2, and I need to built a structure over it, because of that I am looking for the Drilling Template to help me. I already looked in the oficial webpage and it isn´t there, though one of you might have it and could share it here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks! &lt;/p&gt;&#xA;" OwnerUserId="21282" LastActivityDate="2018-10-04T13:00:24.573" Title="Does Someone have the Deco Cover Drill Template of the iRobot Create 2?" Tags="&lt;irobot-create&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16454" PostTypeId="1" CreationDate="2018-09-28T22:44:42.223" Score="3" ViewCount="707" Body="&lt;p&gt;I'm studyng stereo cameras, and I want to build one. I searched a lot in internet, and the opinions are quite different about this topic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically, my question is:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;Can I synchronize two usb cameras triggering them together, shooting&lt;/strong&gt;&#xA;  &lt;strong&gt;at the same instant?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;My answer (99% wrong) is:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Yes, with a multithread architecture and a parallel program, can I have two streams at the same instant.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;but it seems too easy, and will never work.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Why?&lt;/li&gt;&#xA;&lt;li&gt;what difference should I expect between the two images? (in millisecond I mean)&lt;/li&gt;&#xA;&lt;li&gt;Is there a solution in order to have a real global shutter? (without buy another cameras)&lt;/li&gt;&#xA;&lt;li&gt;I also see some solution for triggering one camera using Arduino. Could be extended to 2 cameras systems?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Hope these are not to many questions. Thanks&#xA;PS: books suggestion or papers are appreciated &lt;/p&gt;&#xA;" OwnerUserId="21262" LastActivityDate="2018-11-04T05:00:26.920" Title="Trigger two usb cameras at the same time" Tags="&lt;cameras&gt;&lt;stereo-vision&gt;&lt;opencv&gt;&lt;usb&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16455" PostTypeId="1" CreationDate="2018-09-29T06:34:17.157" Score="1" ViewCount="262" Body="&lt;p&gt;I am reading Denis M. Filatov et al.'s paper &quot;Parameters identification of thrust generation subsystem for small unmanned aerial vehicles&quot; (&lt;a href=&quot;https://www.semanticscholar.org/paper/Parameters-identification-of-thrust-generation-for-Filatov-Friedrich/9ec916f9907810e41368f1ac2a6885a0bf2c2ee4&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.semanticscholar.org/paper/Parameters-identification-of-thrust-generation-for-Filatov-Friedrich/9ec916f9907810e41368f1ac2a6885a0bf2c2ee4&lt;/a&gt;). I need to use their characterization data of the DJI E310 motors for my undergraduate research project dealing with a quadcopter. In Table I, their unit for torque is &quot;mH m&quot;. I assumed that this was a typographical error since the symbol H represents the SI unit for inductance and that the authors meant &quot;mN m&quot;. &#xA;&lt;a href=&quot;https://i.stack.imgur.com/TMP0s.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/TMP0s.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;With this assumption, I then took the torque-to-force ratio of their first data point in &lt;span class=&quot;math-container&quot;&gt;$\frac{N\cdot m}{N}$&lt;/span&gt; and got &lt;span class=&quot;math-container&quot;&gt;$1.6\times10^{-03}$&lt;/span&gt;. The ratio that Mark W. Mueller et al. found in their paper &quot;Stability and control of a quadrocopter despite the complete loss of one, two, or three propellers&quot; (&lt;a href=&quot;https://flyingmachinearena.org/wp-content/publications/2014/mueIEEE14.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://flyingmachinearena.org/wp-content/publications/2014/mueIEEE14.pdf&lt;/a&gt;) was &lt;span class=&quot;math-container&quot;&gt;$1.69\times10^{-2}$&lt;/span&gt;. This is more than ten times higher than from the ratio I computed in Filatov et al.'s data. I simulated a quadcopter using the same DJI E310 420s motors and F450 body frame that Filatov et al. used. The minimum settling time for the yaw PID control turned out to be &lt;span class=&quot;math-container&quot;&gt;$30s$&lt;/span&gt; which is absurdly way too long compared with the settling time I observe in experience which is usually within &lt;span class=&quot;math-container&quot;&gt;$5s$&lt;/span&gt;. Did the authors mean &quot;N m&quot; or anything else? My analysis tells me that &quot;mN m&quot; would make their torque readings too low compared with what standard quadcopters using DJI E310 and DJI F450 would give. I tried emailing the authors to clarify this but I got no response. I hope someone with experience or who knows the answer can help me on this.&lt;/p&gt;&#xA;" OwnerUserId="21284" LastActivityDate="2018-09-29T13:45:25.270" Title="DJI E310 Thrust Coefficient" Tags="&lt;quadcopter&gt;&lt;motor&gt;&lt;brushless-motor&gt;&lt;torque&gt;&lt;force&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16457" PostTypeId="2" ParentId="16455" CreationDate="2018-09-29T13:45:25.270" Score="1" Body="&lt;p&gt;I found a new paper titled &quot;Quadrotor Parameters Identification and Control System Design&quot; (&lt;a href=&quot;https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=7910684&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=7910684&lt;/a&gt;) by the same authors published on the same year, presumably using the same quadcopter platform. They provided formulas relating torque in Newton-meters and PWM percentage from 0 to 100. The results in &quot;Parameters identification of thrust generation subsystem for small unmanned aerial vehicles&quot;, using &quot;mN m&quot; or milliNewton-meter as a unit for the torque instead of the typographical error &quot;mH m&quot;, match with their formulas in &quot;Quadrotor Parameters Identification and Control System Design&quot;.&lt;/p&gt;&#xA;" OwnerUserId="21284" LastActivityDate="2018-09-29T13:45:25.270" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16459" PostTypeId="2" ParentId="16452" CreationDate="2018-09-29T15:45:06.333" Score="1" Body="&lt;p&gt;SLAM algorithms are generally application-specific implementations of the extended Kalman filter (EKF), in my opinion.  Because EKF relies on probabilistic estimates of model states given noisy data, I don’t know how to understand SLAM without also understanding the probabilistic underpinnings of EKF.   You might benefit from studying various presentations of EKF to see if any of those treatments describe the concepts with less reliance on the statistical framework. &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2018-09-29T15:45:06.333" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16460" PostTypeId="2" ParentId="11599" CreationDate="2018-09-30T07:35:45.373" Score="0" Body="&lt;p&gt;For some reason MonoBrick is not able to force the NXT to configure the sensor, or it should be done in some other way, which I do not know of.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, your program works, if you go to the &quot;View&quot; menu on NXT brick and select Touch sensor on Port1. NXT will be showing the value from the sensor, and your program as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Likewise, if you write a program for NXT in NXT-G for instance that will use a sensor read block to read value from touch sensor on Port1 first (and then do whatever else...), then your program will also read the value of the sensor, while the NXT program keeps running.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At least this is the way it worked for me. &lt;/p&gt;&#xA;" OwnerUserId="21292" LastActivityDate="2018-09-30T07:35:45.373" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16461" PostTypeId="1" AcceptedAnswerId="16468" CreationDate="2018-09-30T17:29:13.297" Score="1" ViewCount="81" Body="&lt;p&gt;I'm currently struggling with understanding how a continuous-curve path can be constructed in a specific context: A vehicle is supposed to do an 180 degree turn at the end of an agricultural field. Since the minimum turning radius is usually high, the so called omega-turn can be applied. An omega turn is an LRL/RLR-turn as described by Dubins.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as I understand it, the usual approach to compute a CC-turn is to calculate the first segment, the clothoid, based on the vehicle constraints, so that at the end of the clothoid the vehicle is driving with maximal curvature. The intersections of the outer circle of a CC-turn with the trajectory path determine the start/end of segments. The inner circle's radius is equal to the minimal turning radius of the vehicle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, the paper that I'm currently reading [1], that describes different turning maneuvers, shows a figure where the trajectory of the vehicle doesn't touch the inner circle of the CC-circles &lt;span class=&quot;math-container&quot;&gt;$\Omega_1$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\Omega_2$&lt;/span&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/ztfyt.png&quot; alt=&quot;omega turn using cc-turns&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How is this possible with the CC-path algorithm? Or am I not understanding their approach correctly? The explanation of the omega-turn construction in their paper is as follows:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The CC-turn circles for the start and end positions are computed first. The middle CC-turn circle affects these two circles tangential. The tangency is the entry/exit point out of the middle CC-turn circle so that the CC-path is an assembly of the single CC-turn circles. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Edit: Additionally, some pages before, the general CC-turn construction is described like this:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The pre- liminary segment is a clothoid arc with maximum curvature change, also known as sharpness, &lt;span class=&quot;math-container&quot;&gt;$\sigma = +\sigma_{max}$&lt;/span&gt;. The curvature increases from &lt;span class=&quot;math-container&quot;&gt;$\kappa = 0$&lt;/span&gt; to &lt;span class=&quot;math-container&quot;&gt;$\kappa=\kappa_{max}$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;How is this not a contradiction to the trajectory not touching the inner circle that has curvature &lt;span class=&quot;math-container&quot;&gt;$\kappa_{max}$&lt;/span&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks for any help!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[1]: Sabelhaus, D., Röben, F., Meyer zu Helligen, L. P., &amp;amp; Schulze Lammers, P. (2013). Using continuous-curvature paths to generate feasible headland turn manoeuvres. Biosystems Engineering, 116(4), 399–409. &lt;a href=&quot;https://doi.org/10.1016/J.BIOSYSTEMSENG.2013.08.012&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://doi.org/10.1016/J.BIOSYSTEMSENG.2013.08.012&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="21294" LastEditorUserId="21294" LastEditDate="2018-09-30T18:35:29.043" LastActivityDate="2018-10-31T17:00:28.723" Title="Is it possible for a CC-turn trajectory to not touch the inner circle?" Tags="&lt;path-planning&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16462" PostTypeId="1" AcceptedAnswerId="16464" CreationDate="2018-10-01T10:14:51.647" Score="1" ViewCount="46" Body="&lt;p&gt;IIUC, the recommendation &lt;a href=&quot;https://youtu.be/Bmiu7xi-nyY?t=54s&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; of increasing the absolute size of the real part of observer eigenvalues is based on two factors:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;We want the observer to be updated as fast as possible (I suppose up to the point where it's so much faster than the controller that any further improvement of its update speed is pointless).&lt;/li&gt;&#xA;&lt;li&gt;There's no saturation problem since it's all in software. &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;What then prevents us from increasing observer eigenvalues without limit, i.e., driving them towards minus infinity?&lt;/p&gt;&#xA;" OwnerUserId="21299" LastActivityDate="2018-10-01T14:01:53.750" Title="What limits the observer eigenvalues size?" Tags="&lt;control&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16463" PostTypeId="1" CreationDate="2018-10-01T12:54:24.420" Score="0" ViewCount="1686" Body="&lt;p&gt;I saw lot of topics with the same title but answers are different.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a magnetometer in my phone which give me the components of magnetic field in direction of X, Y, Z.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If my phone lays on a table the 'z' axis points up. (see the picture below). The values of magnetometer are: ~15 microT in X direction, ~8 microT in Y direction and ~-55 microT in Z direction. &#xA;&lt;a href=&quot;https://i.stack.imgur.com/GY5eu.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/GY5eu.png&quot; alt=&quot;axis&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which of the following angles can be determined using datas of magnetometer? Roll, pitch, yaw? And how?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you, Robert&lt;/p&gt;&#xA;" OwnerUserId="21301" LastEditorUserId="21301" LastEditDate="2018-10-03T12:57:45.737" LastActivityDate="2019-01-07T07:02:05.393" Title="Orientation from magnetometer data" Tags="&lt;magnetometer&gt;&lt;orientation&gt;&lt;estimation&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16464" PostTypeId="2" ParentId="16462" CreationDate="2018-10-01T14:01:53.750" Score="2" Body="&lt;p&gt;Consider the state space controls equations:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;u = -K\hat{x} \\&#xA;\dot{\hat{x}} = A\hat{x} + Bu + L\left(y - c\hat{x}\right) \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The observer gain &lt;span class=&quot;math-container&quot;&gt;$L$&lt;/span&gt; is essentially a measurement filter gain, where the observer is a &quot;smart filter&quot; in that it has the capability to &lt;em&gt;predict&lt;/em&gt; (via &lt;span class=&quot;math-container&quot;&gt;$\hat{x}$&lt;/span&gt;) what the measurement should be. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your observer gain &lt;span class=&quot;math-container&quot;&gt;$L$&lt;/span&gt; is very large then your state estimate should converge faster, but you also can begin to feed all of your measurement &lt;em&gt;noise&lt;/em&gt; through to your controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your state estimate becomes too noisy and/or your state estimates change too quickly, then you begin to run the risk that your control signal &lt;span class=&quot;math-container&quot;&gt;$u$&lt;/span&gt; will change so quickly that your plant/actuator can't keep up. This is called saturation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a dangerous situation (from a controls perspective) because saturation causes your state estimate to &lt;strong&gt;diverge&lt;/strong&gt;. Rewriting the controls equations:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{\hat{x}} = A\hat{x} + Bu + L\left(y - c\hat{x}\right) \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can see that the control action &lt;span class=&quot;math-container&quot;&gt;$u$&lt;/span&gt; will &lt;em&gt;directly impact&lt;/em&gt; how your state estimates update. If your actuators aren't capable of keeping up with your control signal then you wind up &quot;over reporting&quot; the control action &lt;span class=&quot;math-container&quot;&gt;$u$&lt;/span&gt; to your state estimator. This causes your state estimates to change more than they actually are, which can cause your observer to diverge because it is based on the difference between the measured output &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt; and the state estimate &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The tl;dr here is that, even though observers are a software construct, they drive the plant on the basis that your control signal is driven by the observer output. Setting observer poles too &quot;fast&quot; results in actuator saturation because the plant/actuators can't keep up with the changes in the state estimates. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you need more of an explanation then please let me know where you're unclear and I can try to add an edit. Hopefully this is enough. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-10-01T14:01:53.750" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16465" PostTypeId="1" CreationDate="2018-10-01T14:41:55.620" Score="5" ViewCount="394" Body="&lt;p&gt;I am modelling an articulated robot arm with 5 degrees-of-freedom from igus (igus Robolink).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I deduced its direct kinematics equations using Denavit-Hartenberg parameters and homogeneous transformation matrices. I also calculated its Jacobian and inverse kinematics problem of position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I am bit stuck with the problem of inverse velocity. Since the Jacobian is a [6x5] matrix and can't be inverted directly, could you tell me any way to invert it, i.e. Pseudo-Inverse matrix? Or is there a better way to solve inverse velocity problems for 5 DOF robots rather than with the Jacobian?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/CFoho.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/CFoho.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="21302" LastEditorUserId="9176" LastEditDate="2018-10-14T15:08:17.610" LastActivityDate="2018-10-14T21:14:43.743" Title="5 DOF robot - Velocity Inverse Kinematics" Tags="&lt;inverse-kinematics&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16466" PostTypeId="2" ParentId="16421" CreationDate="2018-10-01T14:56:07.213" Score="0" Body="&lt;p&gt;Using the first order differential equations allows you to have unique state variables in &lt;strong&gt;&lt;em&gt;x&lt;/em&gt;&lt;/strong&gt; in &lt;strong&gt;&lt;em&gt;&lt;a href=&quot;https://i.stack.imgur.com/cPJZT.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/cPJZT.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt;. This prevents redundancy that would otherwise exists if it were to be written in higher order differential equations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Imagine having it written in 2nd order differential equations.  It would have this form: &lt;a href=&quot;https://i.stack.imgur.com/Q7YH2.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Q7YH2.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;.  If it was represented in this form, there will be a redundancy in how each of the state equation is expressed in terms of the state variables.&lt;/p&gt;&#xA;" OwnerUserId="10691" LastActivityDate="2018-10-01T14:56:07.213" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16467" PostTypeId="1" CreationDate="2018-10-01T15:57:23.160" Score="0" ViewCount="1865" Body="&lt;p&gt;I have seen Boston Dynamics’ robot Atlas do some pretty impressive things, like a &lt;a href=&quot;https://www.youtube.com/watch?v=fRj34o4hN4I&quot; rel=&quot;nofollow noreferrer&quot;&gt;backflip&lt;/a&gt;, which must put quite large torques on the servomotors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What servos are there that can generate torques like that, but are still small enough to fit in a humanoid robot? Which servos would be suitable? And what servos is it likely that Boston Dynamics use themselves in the Atlas robot?&lt;/p&gt;&#xA;" OwnerUserId="21304" LastEditorUserId="21304" LastEditDate="2018-10-04T23:13:03.257" LastActivityDate="2018-10-04T23:13:03.257" Title="What servos are suitable for a robot like Boston Dynamics’ Atlas?" Tags="&lt;servomotor&gt;&lt;torque&gt;&lt;actuator&gt;&lt;humanoid&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16468" PostTypeId="2" ParentId="16461" CreationDate="2018-10-01T16:11:10.910" Score="1" Body="&lt;p&gt;Apparently it is indeed possible for the trajectory between the clothoids to have a curvature of less than &lt;span class=&quot;math-container&quot;&gt;$\kappa_{max}$&lt;/span&gt;. For example, if the difference of state orientations &lt;span class=&quot;math-container&quot;&gt;$\delta = \theta_s - \theta_g \text{mod } 2\pi$&lt;/span&gt; (called &lt;em&gt;deflection&lt;/em&gt;) is very low, the path would be laid around the whole inner circle, causing an intersection with itself. To prevent this, an &lt;em&gt;elementary path&lt;/em&gt; was introduced, which consists of two clothoids only with curvature less than &lt;span class=&quot;math-container&quot;&gt;$\kappa_{max}$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sources: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Scheuer, A., &amp;amp; Fraichard, T. (1997). Continuous-Curvature Path Planning for Car-Like Vehicles. In Intelligent Robots and Systems, 1997. (Bd. 2, S. 8–12). IEEE. &lt;a href=&quot;https://doi.org/10.1109/IROS.1997.655130&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://doi.org/10.1109/IROS.1997.655130&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fraichard, T., &amp;amp; Scheuer, A. (2004). From Reeds and Shepp’s to Continuous-Curvature Paths. IEEE Transactions on Robotics, 20(6), 1025–1035. &lt;a href=&quot;https://doi.org/10.1109/TRO.2004.833789&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://doi.org/10.1109/TRO.2004.833789&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="21294" LastActivityDate="2018-10-01T16:11:10.910" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16469" PostTypeId="2" ParentId="16467" CreationDate="2018-10-01T17:37:55.023" Score="4" Body="&lt;p&gt;The Boston Dynamics’ &lt;a href=&quot;https://www.bostondynamics.com/atlas&quot; rel=&quot;noreferrer&quot;&gt;Atlas robot&lt;/a&gt; doesn't actually use servo motors. It uses electrically-powered hydraulic actuation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I saw a presentation by Boston Dynamics' Marc Raibert where (if I remember correctly) he said they used to use &lt;a href=&quot;http://www.moog.com/products/actuators-servoactuators.html&quot; rel=&quot;noreferrer&quot;&gt;Moog actuators&lt;/a&gt; designed for the aerospace industry, but that they were now using a motor that they build in-house that is integrated into the body of the robots. (He said something similar in this interview with &lt;a href=&quot;https://spectrum.ieee.org/automaton/robotics/humanoids/what-boston-dynamics-is-working-on-next&quot; rel=&quot;noreferrer&quot;&gt;IEEE Spectrum&lt;/a&gt;).&lt;/p&gt;&#xA;" OwnerUserId="17029" LastActivityDate="2018-10-01T17:37:55.023" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16470" PostTypeId="2" ParentId="14071" CreationDate="2018-10-01T18:55:52.227" Score="0" Body="&lt;p&gt;Current of Font = ((Vmotor / Vfont) * (Itotal) * Ms&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ms= margin of safety (can be set 2)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you power the driver PWM with 24v&lt;/p&gt;&#xA;&#xA;&lt;p&gt;((12/24) * 0.66) * 2 = 0,66A&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Its 24-volt supply should provide 0.66A for each motor&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you use 3 step motors:&#xA;0.66 x 3 = 1.98&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Its electrical source should be 24v x 2A&lt;/p&gt;&#xA;" OwnerUserId="21306" LastActivityDate="2018-10-01T18:55:52.227" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16471" PostTypeId="1" AcceptedAnswerId="16474" CreationDate="2018-10-01T20:29:44.787" Score="1" ViewCount="2203" Body="&lt;p&gt;I found a formula online to extract yaw from a quaternion like so:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;double x = quat[0];&#xA;double y = quat[1];&#xA;double z = quat[2];&#xA;double w = quat[3];&#xA;&#xA;return atan2(2.0f * (w * z + x * y), 1.0f - 2.0f * (y * y + z * z));&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I wanted to verify if this is the right way to do it. I created a loop that gets the body's current rotation (i.e &lt;code&gt;quat&lt;/code&gt; variable above), calculates the Yaw from it (as like the formula above) and prints it out. I then started rotating the body along all three axis. I was expecting the printed value to stay the same when I roll or pitch and only change when I yaw. However, when I roll or pitch I see that the value changes, so I assume that the formula above is not correct.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the right way to get the rotation around z-axis (i.e Yaw) from a quaternion? I don't care about pitch or roll but only the yaw.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe the test I am doing is non-sense, but ideally what I would like to do is to observe the body's orientation only in terms of the z-axis. If I am given a quaternion of a body, how can I found out the theta value of the body in respect to itself or the world frame. Assuming that I can get the body's x, y position, I would also like to capture the theta value of that body, so I was thinking that I need to extract the Yaw from the quaternion. The result I am looking for is a value that I can use to represent the state of the body (x, y and theta). I already found the x, y and now I am only left with a quaternion that I need to find the theta of the body. I hope this make sense.&lt;/p&gt;&#xA;" OwnerUserId="21307" LastEditorUserId="21307" LastEditDate="2018-10-01T20:37:31.430" LastActivityDate="2018-10-02T11:15:24.307" Title="Get Yaw from quaternion" Tags="&lt;rotation&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16473" PostTypeId="1" AcceptedAnswerId="16475" CreationDate="2018-10-02T06:25:09.520" Score="2" ViewCount="59" Body="&lt;p&gt;I have two questions that I think are closely related:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Why is it useful to introduce behaviors, e.g., goal-to-goal + obstacle avoidance? (The alternative would have been to just use a single behavior with the more complex cost function that rewards getting to the goal without hitting stuff)?&lt;/li&gt;&#xA;&lt;li&gt;Why is it useful to analyze hybrid systems (instead of purely continuous systems that approximate switches and resets as continuous phenomena)?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I think know a naive answer: this makes system design &amp;amp; analysis more tractable, by splitting a very complex problem into smaller pieces that can be, to some extent, studied separately. But is there a more in-depth intuition behind these choices?&lt;/p&gt;&#xA;" OwnerUserId="21299" LastActivityDate="2018-10-08T16:32:41.487" Title="Benfit of behaviors &amp; benefit of hybrid systems" Tags="&lt;control&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16474" PostTypeId="2" ParentId="16471" CreationDate="2018-10-02T11:15:24.307" Score="1" Body="&lt;p&gt;The equation that you used requires that you have a unit quaternion, so &lt;span class=&quot;math-container&quot;&gt;$w^2+x^2+y^2+z^2 = 1$&lt;/span&gt;. If your quaternion is not of unit length, then you can either normalize it, or use the following expression instead:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;return atan2(2.0f * (w * z + x * y), w * w + x * x - y * y - z * z);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Another source for an error might be how a quaternion is defined in your software. Namely it could also be that the first element of the quaternion is &lt;span class=&quot;math-container&quot;&gt;$w$&lt;/span&gt;, which would mean that you would have to use this instead:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;double w = quat[0];&#xA;double x = quat[1];&#xA;double y = quat[2];&#xA;double z = quat[3];&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="1487" LastActivityDate="2018-10-02T11:15:24.307" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16475" PostTypeId="2" ParentId="16473" CreationDate="2018-10-02T11:38:13.097" Score="1" Body="&lt;p&gt;The answer you have found out yourself is not naive but rather &lt;strong&gt;at the core of science and technology&lt;/strong&gt;. In fact, when we are not good at tackling the problem as a whole, because it is way difficult or even intractable for us, or when we do not want to put too much effort into dealing with lots of details we are not interested in (think of your example of approximating continuous phenomena with discrete events), then we split it into pieces we are able to better manipulate, in the hope (sometimes we can get stronger guarantees though) that this new arrangement will help us solve the original problem. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A secondary reason underlying this methodology is to implement the &lt;strong&gt;composition of tools&lt;/strong&gt;, which makes our lives much easier because allows us to reuse components that have been designed and realized for problems different from the one at hand. Therefore, by breaking down (&lt;strong&gt;analysis&lt;/strong&gt;) a big goal into a list of smaller ingredients that can be combined together, we will be able later on to aggregate (&lt;strong&gt;synthesis&lt;/strong&gt;) those units to solve other quests, maybe only loosely related to our starting point.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2018-10-02T15:26:44.583" LastActivityDate="2018-10-02T15:26:44.583" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16477" PostTypeId="1" CreationDate="2018-10-02T17:22:24.730" Score="2" ViewCount="593" Body="&lt;p&gt;I'm studying &lt;a href=&quot;http://www-lar.deis.unibo.it/people/cmelchiorri/Files_Robotica/FIR_05_Dynamics.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;these lecture notes on dynamic models of robot arm links, slides 33-36&lt;/a&gt;, where two examples are given for the kinetic energies for a single link and two link robot arm.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the single link case, the kinetic energy is posed as:  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$K=\frac{1}{2}I\dot{\theta}^2$$&lt;/span&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This appears to account for the rotational kinetic energy of the single link around the joint.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the two link case, the kinetic energy of the first link is posed as:  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$K=\frac{1}{2}I_1\dot{\theta_1}^2 + \frac{1}{2}m_1a_{c1}^2\dot{\theta_1}^2$$&lt;/span&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This appears to mean that the total kinetic energy in the first link of the two link chain contains a contribution from rotation around the first joint (&lt;span class=&quot;math-container&quot;&gt;$m_1a_{c1}^2$&lt;/span&gt; term) and from rotation around the center of mass (&lt;span class=&quot;math-container&quot;&gt;$I_1$&lt;/span&gt; term).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Comparing the two link and single link cases, shouldn't &lt;span class=&quot;math-container&quot;&gt;$I$&lt;/span&gt; from the single link case be decomposed similarly into energies from joint rotation and center of mass rotation as well?  Or is the single link case fundamentally different in that one only needs to consider energy from rotation around the joint?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's my intuition that if the parameters of the single link case are equal to the parameters of the first link (of the two-link case), then we could conceivably write &lt;span class=&quot;math-container&quot;&gt;$I=I_1+m_1a_{c1}^2$&lt;/span&gt;.  Is this correct?  If not, why not?&lt;/p&gt;&#xA;" OwnerUserId="2295" LastEditorUserId="2295" LastEditDate="2018-10-02T19:34:30.813" LastActivityDate="2019-09-07T10:32:52.733" Title="Understanding the kinetic energy expressions for a 1 link vs 2 link robot arm" Tags="&lt;robotic-arm&gt;&lt;dynamics&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16479" PostTypeId="1" CreationDate="2018-10-03T05:56:24.050" Score="1" ViewCount="742" Body="&lt;p&gt;I am currently working an a personal hexapod robot project. I am building it using 18 MG996R 4.8 to 7.2&amp;nbsp;V servo motors. I would like to use a Raspberry Pi 3 B+ to control it. I purchased a 7.4&amp;nbsp;V 8000&amp;nbsp;mAh Li-Po battery to power the motors. I am currently having trouble finding a servo motor controller that supports more than 16 servo motors that also would support a 7.4&amp;nbsp;V power supply. I am new to this and find myself with a lot more questions than answers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Such as:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Are there any large servo controllers that can support more than 16 servos that would also work with a Raspberry Pi?&lt;/li&gt;&#xA;&lt;li&gt;Is the battery I bought too big at 7.4 V? &lt;/li&gt;&#xA;&lt;li&gt;Should I be using a voltage regulator to tone it down and how would that effect my current output?&lt;/li&gt;&#xA;&lt;li&gt;Is it possible to stack two 16 channel servo controllers?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="21313" LastEditorUserId="9176" LastEditDate="2018-10-03T07:00:48.050" LastActivityDate="2019-01-01T10:01:30.303" Title="18 MG996R servo motors control and power" Tags="&lt;servomotor&gt;&lt;battery&gt;&lt;hexapod&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16480" PostTypeId="2" ParentId="16479" CreationDate="2018-10-03T08:05:24.837" Score="1" Body="&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Yes, there are servo controllers capable of even 24 servos. As example, check out &lt;a href=&quot;https://www.tme.eu/en/details/pololu-1354/motor-control-modules/pololu/mini-maestro-18-channel-assembled/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pololu Mini Maestro board&lt;/a&gt;. It communicates with RPi through USB or UART and You can find more information about that in &lt;a href=&quot;https://electronicsmusiclifestyle.wordpress.com/2017/09/07/comprehensive-explanation-of-the-maestro-pi3-interfacing/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this blog&lt;/a&gt; or &lt;a href=&quot;https://www.pololu.com/docs/0J40&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pololu Maestro user's guide&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;These servos, as you said, are rated for max. 7.2V input voltage. 2S LiPo battery has a nominal voltage of 7.4V &lt;strong&gt;and maximum voltage of 8.4V&lt;/strong&gt;, therefore it &lt;em&gt;may&lt;/em&gt; damage your servos. You should rather use servos more capable for 2S LiPo batteries, change Your LiPo to NiMH packet with 6V output voltage, or, in case You bought them already, utilize some powerful voltage regulator. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Once again, Pololu saves the day &lt;a href=&quot;https://www.tme.eu/en/details/pololu-2882/converter-modules/pololu/d24v150f6/&quot; rel=&quot;nofollow noreferrer&quot;&gt;with its 15A step-down converter&lt;/a&gt;. It has input voltage of 7.2-40V and output voltage of 6V, so it suits Your needs.&lt;br&gt;&#xA;Using voltage regulator will limit Your max output current to a maximum of converter's capability. Why I linked 15A one here? Because Your servos can draw 500-900mA @6V each (&lt;a href=&quot;https://www.electronicoscaldas.com/datasheet/MG996R_Tower-Pro.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;MG996R documentation&lt;/a&gt;). Multiplying those values by 18 servos, all will draw between 9-16A fully loaded. However, in hexapod mobile platform hardly ever Your servos will be at full load all at once. Therefore, 15A converter is &lt;em&gt;more than enough&lt;/em&gt; for Your robot.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You can use two separate 8 channel controllers connected to Your Raspberry. Pololu Mini Maestro &lt;em&gt;may&lt;/em&gt; transmit data to other one, but that will require programming them in &lt;a href=&quot;https://www.pololu.com/docs/0J40/6&quot; rel=&quot;nofollow noreferrer&quot;&gt;the Maestro Scripting Language&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="14673" LastActivityDate="2018-10-03T08:05:24.837" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16483" PostTypeId="2" ParentId="16453" CreationDate="2018-10-04T13:00:24.573" Score="1" Body="&lt;p&gt;From the main &lt;a href=&quot;https://www.irobot.com/about-irobot/stem/create-2/projects&quot; rel=&quot;nofollow noreferrer&quot;&gt;iRobot STEM Create 2 Projects page&lt;/a&gt;, there is a link to the &lt;a href=&quot;https://www.irobotweb.com/-/media/MainSite/PDFs/About/STEM/Create/Create_2_Deco_Cover_Modification.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Create 2 Deco Cover Modification&lt;/a&gt;. This link was accidentally broken while updating other content, but it's fixed, now.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please note that I am an iRobot employee, but the postings on this site are my own and don't necessarily represent iRobot's positions, strategies, or opinions.&lt;/p&gt;&#xA;" OwnerUserId="7665" LastActivityDate="2018-10-04T13:00:24.573" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16484" PostTypeId="2" ParentId="16421" CreationDate="2018-10-04T13:46:42.957" Score="0" Body="&lt;p&gt;The reason we always look to linearize system is that we have a lot of results at hand for linear systems, and they are given for a &quot;canonical form&quot;. We can assess stability, controllability and a lot of other property as well as robustness through proven results.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then why choose a first order system ? Well because a second order system can be written as a first order, hence first order system are chosen as canonical form.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider &lt;span class=&quot;math-container&quot;&gt;$\ddot{x} = A \dot{x} + B x + C u$&lt;/span&gt;, it is equivalent to &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$ \dot{ \begin{bmatrix} \dot{x} \\ x \end{bmatrix} } = \begin{bmatrix} A &amp;amp; B \\ 1 &amp;amp; 0 \end{bmatrix} \begin{bmatrix} \dot{x} \\ x \end{bmatrix} + \begin{bmatrix} C \\ 0 \end{bmatrix} u$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;which is a first order system. So every linear system can be brought to a first-order system for which results have been proven.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2018-10-04T13:46:42.957" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16485" PostTypeId="1" CreationDate="2018-10-04T15:40:52.597" Score="0" ViewCount="266" Body="&lt;p&gt;I am attempting to make the iRobot Create 2 drive in a straight line using the opcode 137 with the parameters specified in the OI documentation. &quot;Straight = 32768 or 32767 = 0x8000 or 0x7FFF&quot; I have tried both of these parameters, but the robot always veers to the right as it moves forward. I've verified that my byte order is correct.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this expected behavior or is there an issue with my unit? Is there a way to get the robot to drive straight? I've also tried the DriveDirect command with various speeds to the two motors with no luck there either. I've read a bit about PID control, but was hoping that was already implemented in the firmware since I've not done PID control before.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The platform that I'm using is a Raspberry PI running Windows 10 IoT Core and a .NET application. I've also tried from a direct serial connection on a Windows Desktop and an Arduino. All of these give me the same results.&lt;/p&gt;&#xA;" OwnerUserId="21062" LastActivityDate="2021-04-12T02:04:30.450" Title="Driving the iRobot Create 2 straight" Tags="&lt;irobot-create&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16489" PostTypeId="2" ParentId="16454" CreationDate="2018-10-05T04:53:51.507" Score="1" Body="&lt;p&gt;As you say, you can't trigger them at the exact same time without hardware capable of doing so. Some IMU's supply an external trigger pin, and I see no reason why you couldn't buy cameras that have a trigger pin.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sure, your suggestion of using two threads and triggering them both at the same time that way would work, so long as you can send messages to both threads at the same time. Unfortunately, you cannot send messages to two threads at the exact same time, and you cannot ensure the processor is running those threads (the OS has thousands of threads it has to run) so you'll have to settle for a very small time difference between them. You'll also end up with all the normal multi-thread communication issues.....&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fortunately, there is a simpler solution. OpenCV provides multiple different ways to get images from a camera. The normal one is to use the function &lt;code&gt;read()&lt;/code&gt;. This function actually does multiple things. First it tells the camera to start taking a photo. Then it waits until the camera has taken the photo, and finally, it reads the photo back. This whole process takes multiple milliseconds (on a 30FPS camera it takes ~32ms, on a 60FPS camera it takes ~17ms). You can drastically reduce this time by using the functions &lt;code&gt;grab()&lt;/code&gt; and &lt;code&gt;retrieve()&lt;/code&gt;. Grab tells the camera to take the photo, and retrieve waits for the camera and gets the data. So if you do (pseudo-code):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;cam1.grab()  # very fast&#xA;cam2.grab()  # also very fast&#xA;&#xA;img1 = cam1.retrieve()  # slow because it has to wait for the camera&#xA;img2 = cam2.retrieve()  # fast because when cam1 has finished, cam2 probably has as well&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Using this method you can retrieve the images from both cameras at the framerate of the cameras. This method is mentioned briefly in the &lt;a href=&quot;https://docs.opencv.org/3.1.0/d8/dfe/classcv_1_1VideoCapture.html#ae38c2a053d39d6b20c9c649e08ff0146&quot; rel=&quot;nofollow noreferrer&quot;&gt;opencv documentation&lt;/a&gt; where it says:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The primary use of the function [note: the grab() function] is in multi-camera environments,&#xA;  especially when the cameras do not have hardware synchronization. That&#xA;  is, you call VideoCapture::grab() for each camera and after that call&#xA;  the slower method VideoCapture::retrieve() to decode and get frame&#xA;  from each camera. This way the overhead on demosaicing or motion jpeg&#xA;  decompression etc. is eliminated and the retrieved frames from&#xA;  different cameras will be closer in time&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="13329" LastActivityDate="2018-10-05T04:53:51.507" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16492" PostTypeId="1" CreationDate="2018-10-05T13:19:50.920" Score="2" ViewCount="40" Body="&lt;p&gt;I am currently considering to use monocular visual-inertial odometry (VIO) to localize a smartphone relative to a known object. Now, what I would like to understand is, what kind of accuracy I can expect with such methods.&lt;/p&gt;&#xA;&lt;p&gt;Is there any rule-of-thumb, which tells me something like a standard deviation from the real position, assuming that the filter is properly initialized and we have average smartphone hardware?&lt;/p&gt;&#xA;" OwnerUserId="21331" LastEditorUserId="23562" LastEditDate="2021-02-25T12:44:54.613" LastActivityDate="2021-02-25T12:44:54.613" Title="Accuracy of monocular visual-inertial odometry" Tags="&lt;cameras&gt;&lt;accelerometer&gt;&lt;visual-odometry&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16493" PostTypeId="2" ParentId="9916" CreationDate="2018-10-05T14:47:36.187" Score="1" Body="&lt;p&gt;There is this nice tutorial about Visual Odometry which I believe answer your question:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.ifi.uzh.ch/dam/jcr:5759a719-55db-4930-8051-4cc534f812b1/VO_Part_I_Scaramuzza.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Visual Odometry, Part I: The First 30 Years and Fundamentals&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case, you were not convinced, you may also have a look at this article:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://ieeexplore.ieee.org/document/7747236&quot; rel=&quot;nofollow noreferrer&quot;&gt;Past, Present, and Future of Simultaneous Localization and Mapping: Toward the Robust-Perception Age&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="17877" LastActivityDate="2018-10-05T14:47:36.187" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16494" PostTypeId="1" CreationDate="2018-10-06T00:38:02.807" Score="2" ViewCount="48" Body="&lt;p&gt;I am working with OpenRAVE simulator and I am using ODE Physics (OpenRAVE plugin to support ODE).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a robot in an environment and multiple other objects that are subject to the physics engine. I would like to send velocities to the robot for the duration of 1 second (in real time). I am able to achieve something like this with the following logic:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;penv-&amp;gt;StartSimulation(0.001);&#xA;while(true) {    &#xA;    {&#xA;        EnvironmentMutex::scoped_lock lock(penv-&amp;gt;GetMutex());&#xA;        robot-&amp;gt;SetVelocity(OpenRAVE::Vector(0.1, 0, 0), OpenRAVE::Vector(0, 0, 0));&#xA;    }&#xA;}&#xA;penv-&amp;gt;StopSimulation();&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Note that although not included in the code above, I keep a timer since the start of the simulation and I am constantly checking it until I reach 1 second of difference, in which case I break out of the while loop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, what I really want to do, is to simulate the real time into simulation time. So the same result to happen in faster time (i.e fast-forward) the result of applying the robot velocities for 1 real time second but let's say in 10, 100ms or any other time less than a second. I am basically looking on how to get the final result of applying the velocities (including how the environment will react to the robot-to-object interactions using the physics engine).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have tried few things but nothing worked. Here is the closest I can get:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;penv-&amp;gt;StartSimulation(0.001, false);&#xA;double sim = 0.000001 * penv-&amp;gt;GetSimulationTime();&#xA;while(true) {&#xA;    if (0.000001*penv-&amp;gt;GetSimulationTime() &amp;gt; sim+1)&#xA;    {&#xA;        break;&#xA;    }&#xA;&#xA;    {&#xA;        EnvironmentMutex::scoped_lock lock(penv-&amp;gt;GetMutex());&#xA;        robot-&amp;gt;SetVelocity(OpenRAVE::Vector(0.1, 0, 0), OpenRAVE::Vector(0, 0, 0));&#xA;    }&#xA;}&#xA;penv-&amp;gt;StopSimulation();&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;false&lt;/code&gt; at the &lt;code&gt;StartSimulation&lt;/code&gt; indicates that the simulation does not happen in real time and the &lt;code&gt;SimulationStep&lt;/code&gt; is called as fast as possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem I am getting is that the robot (and probably the physics) are not keeping the robot at the right position. When I execute the above solution by the end of it, the robot is fall down from the ground for some reason. I have also tried calling &lt;code&gt;penv-&amp;gt;StepSimulation(0.001);&lt;/code&gt; but this did nothing more. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any ideas?&lt;/p&gt;&#xA;" OwnerUserId="21307" LastActivityDate="2018-10-06T00:38:02.807" Title="OpenRAVE &quot;fast-forward&quot; physics simulation?" Tags="&lt;dynamics&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16495" PostTypeId="1" AcceptedAnswerId="16659" CreationDate="2018-10-06T04:32:48.217" Score="1" ViewCount="320" Body="&lt;p&gt;I am on a robotics team where our robot has to balance on an unstable beam.  However, at the same time, the robot must be able to reach to the side in order to grab field materials.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What possible ways are there to help the robot maintain balance as an arm extends to one side of the beam?  Is there any specific linkage that could help work this?&lt;/p&gt;&#xA;" OwnerUserId="21305" LastActivityDate="2018-11-05T14:54:44.050" Title="How to maintain a robot's center of gravity" Tags="&lt;balance&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16496" PostTypeId="2" ParentId="16495" CreationDate="2018-10-06T05:18:32.280" Score="2" Body="&lt;p&gt;Use a couterweight.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It could be a second arm, or a pendulum inside the robot body, or even two partially filled water resevoirs with a bi-directional pump in between.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could also clamp onto the beam.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or lower the center of gravity below the beam .... &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/xLODlm.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or something more exotic (Cubli)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/al3Hjm.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/al3Hjm.png&quot; alt=&quot;Cubli&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19143" LastActivityDate="2018-10-06T05:18:32.280" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16498" PostTypeId="1" CreationDate="2018-10-06T13:05:56.533" Score="-1" ViewCount="115" Body="&lt;p&gt;I'm looking Indoor GPS system for agriculture tasks in a greenhouse.&#xA;I want to make an autonomous robot who can navigate by &quot;GPS&quot;, I want the system to be 3D (x,y,z) and allowing the I can use robotic arm. I thought using &lt;strong&gt;Marvelmind&lt;/strong&gt; precise +/- 2cm Indoor GPS system but I'm not sure it's accurate enough. Has anyone experience with it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is best technology/system for that purpose?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is anyone familier with RTK methods and can tell me if it can works inside greenhouses?&lt;/p&gt;&#xA;" OwnerUserId="21336" LastEditorUserId="21336" LastEditDate="2018-10-21T18:06:47.003" LastActivityDate="2019-08-17T23:03:25.550" Title="Indoor GPS 3D for navigation" Tags="&lt;mobile-robot&gt;&lt;navigation&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16499" PostTypeId="1" CreationDate="2018-10-06T20:34:01.790" Score="2" ViewCount="48" Body="&lt;p&gt;For a school project, I'm creating a mechanical arm and I'm thinking about using a 3D printer to create some of the pieces. Obviously, This arm is dynamic, so I wanted to make the pieces as light as possible. Can I drill into polylactic acid without it cracking or losing structural integrity?&lt;/p&gt;&#xA;" OwnerUserId="21328" LastActivityDate="2018-10-10T09:52:34.677" Title="Polylactic acid - Can I drill into it?" Tags="&lt;robotic-arm&gt;&lt;3d-printing&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16500" PostTypeId="1" CreationDate="2018-10-06T23:25:36.190" Score="5" ViewCount="1220" Body="&lt;p&gt;I'm making a robot that uses two DC motors to move, and has two distance sensors on its right side. I want to make a PID controller to control the angle of the robot (using a wall as reference) and also its distance to the wall.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I made a PID controller that can minimize the difference between both sensors' measurements, making the robot go always parallel to the wall. I also made a controller for controlling the distance one sensor measures, for the robot to go always at the same distance to the wall.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I want to do is combine those two controllers into one. I know there's something called MISO PID controller (multiple inputs single output) but I don't know how to use it or even design it. I thought of adding those two variables (the difference and one sensor's measurement) and using that as the controller's input. Is that right? How can I achieve this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS: I also thought of adding the difference between each sensor's measurement and the distance I want, or using those two differences as the variables of my MISO controller.&lt;/p&gt;&#xA;" OwnerUserId="17483" LastEditorUserId="17483" LastEditDate="2018-12-30T14:32:04.100" LastActivityDate="2021-05-02T12:07:10.690" Title="Multivariable PID controller" Tags="&lt;control&gt;&lt;pid&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16501" PostTypeId="2" ParentId="14275" CreationDate="2018-10-07T03:25:17.590" Score="3" Body="&lt;p&gt;I cannot comment on 'most common', but I can definitely share several tools and research efforts towards using FPGA for deep-learning. See my &lt;a href=&quot;https://www.researchgate.net/publication/327931012_A_Survey_of_FPGA-based_Accelerators_for_Convolutional_Neural_Networks&quot; rel=&quot;nofollow noreferrer&quot;&gt;survey paper on FPGA-based accelerators&lt;/a&gt; for CNN which reviews 75+ recent papers. &#xA;Some of these research projects have released their code, such as &lt;a href=&quot;http://act-lab.org/artifacts/dnnweaver/&quot; rel=&quot;nofollow noreferrer&quot;&gt;DNNWeaver&lt;/a&gt;. Also, see tools from companies such as &lt;a href=&quot;https://www.xilinx.com/products/design-tools/embedded-vision-zone.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Xilinx&lt;/a&gt;. Finally, see the code of &lt;a href=&quot;https://github.com/xyzxinyizhang/2018-DAC-System-Design-Contest&quot; rel=&quot;nofollow noreferrer&quot;&gt;top FPGA entries&lt;/a&gt; at DAC-System-Design-Contest 2018. This contest features embedded system implementation of neural network based object detection for drones.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;FPGA development takes time and hence, sometime it may not catch up with the pace of progress in machine learning. Also, unlike tools such as caffe, tensor-flow etc., which are supported by big universities/companies/open-source-communities, a research group alone cannot take their tool/idea to product/maturity-stage. Hence, FPGA development tools are not so numerous as is the case for GPU/CPU. So, I believe understanding &quot;key research ideas&quot; is also important and my answer on state-of-the-art research/academic proposals has some value and others can add different answers.   &lt;/p&gt;&#xA;" OwnerUserId="21339" LastEditorUserId="21339" LastEditDate="2018-10-10T08:28:38.193" LastActivityDate="2018-10-10T08:28:38.193" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16502" PostTypeId="2" ParentId="16473" CreationDate="2018-10-07T10:00:36.633" Score="1" Body="&lt;p&gt;As @Ugo suggested, in the traditional optimal control theory, most (all?) interesting problems become intractable without decomposition / layered architecture.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For completeness, I wanted to link some &lt;a href=&quot;https://youtu.be/eKaYnXQUb2g?t=125&quot; rel=&quot;nofollow noreferrer&quot;&gt;excellent discussion&lt;/a&gt; of this topic from the perspective of an ML researcher (Sergey Levine of UC Berkeley).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;TLDR: Sergey points out that deep learning offers an option to replace the traditional layered architecture by learned black-box components. Of course, while human engineers will no longer need to think about it, a deep network may (and likely will) do something roughly equivalent internally.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, Sergey isn't necessarily advocating in favor of letting DL handle the decomposition. He suggests that a more valuable benefit of DL is to propagate errors end-to-end (from the controls back through all the components -- regardless of whether the components are human-designed or learned).&lt;/p&gt;&#xA;" OwnerUserId="21299" LastActivityDate="2018-10-07T10:00:36.633" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16503" PostTypeId="2" ParentId="16499" CreationDate="2018-10-07T19:28:41.153" Score="0" Body="&lt;p&gt;The problem shouldn’t be cracking or losing structural integrity.  The challenge to drilling PLA is its low melting temperature.  You can find many internet posts about drilling PLA, but you have to manage the speed of the drill quite closely so as to not overheat the PLA.  I have made good holes in PLA with a very slow proces, but I have not tried to tap those holes.  Some say it works, but I prefer ABS if I am going to drill and tap.  I use ABS almost exclusively now.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2018-10-07T19:28:41.153" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16505" PostTypeId="2" ParentId="16499" CreationDate="2018-10-08T12:54:18.670" Score="-1" Body="&lt;p&gt;From personal experience, drilling into PLA is a bad idea. Print the components after simulating their behaviour in a CAD software&lt;/p&gt;&#xA;" OwnerUserId="21347" LastActivityDate="2018-10-08T12:54:18.670" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16508" PostTypeId="2" ParentId="16473" CreationDate="2018-10-08T16:32:41.487" Score="0" Body="&lt;p&gt;The benefit of a hybrid system depends on the goal of an academic work. If the aim is to prove that the robotic system doesn't work, than a purely continuous systems is the way to go. Ordinary differential equations ensure that apart from simple obstacle avoidance the robot can't do complex tasks. Especially from the perspective of philosophical foundations of AI it is important to show, that robots are harmless and that science is not able to build such machines. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why is somebody interested in building machines who doesn't work? Because this is equal to demotivate the audience. It is the best practice method to use the own influence to hold down technology. Instead of arguing on facts, the debate can be biased into a philosophical one about the limits of Artificial Intelligence.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the aim is to develop advanced robotics, a hybrid control system is the way to go. With multi-modal-planning and agent architectures, It is possible to implement human-like behavior. From a technical point of view such, such a control system will work very efficient and is able to not only follow a light, but pick up objects, doing complex tasks and parse textual commands. The disadvantage is, that the education situation becomes complicated. Because there is no limit and students could become motivated to think ahead. They will develop systems which break up the curriculum of the teacher.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2018-10-08T16:32:41.487" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16511" PostTypeId="2" ParentId="16463" CreationDate="2018-10-09T05:55:59.820" Score="1" Body="&lt;p&gt;Usually the magnetometer is used to find the yaw. It acts as a digital compass in this case. To calculate roll and pitch you need an accelerometer. But there are some techniques that can be used to calculate the roll and pitch using the magnetometer. For that you need to place a magnet close to the mobile phone and observe the sensor values. Using these values you can calculate the roll and pitch with respect to the position of the magnet. You may find the necessary equations from the following link.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.dfrobot.com/wiki/index.php/How_to_Use_a_Three-Axis_Accelerometer_for_Tilt_Sensing&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.dfrobot.com/wiki/index.php/How_to_Use_a_Three-Axis_Accelerometer_for_Tilt_Sensing&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="21353" LastActivityDate="2018-10-09T05:55:59.820" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16512" PostTypeId="2" ParentId="16465" CreationDate="2018-10-09T10:46:23.373" Score="2" Body="&lt;p&gt;I remember two possibilities:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;As you already said: inversion of the Jacobi matrix. You can maybe look for &lt;em&gt;Moore-Penrose&lt;/em&gt; on this topic. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;derivation in joint space. If you already solved the inverse problem, and &lt;span class=&quot;math-container&quot;&gt;$q$&lt;/span&gt; is known, you can just derivate the position signal:&lt;br&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$\dot q  = \frac{d q}{dt}$&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I would prefer the second method. If you want to use the pseudo-inverse you have to check the condition of the matrix. Your pseudo-inverse may become singular. Since you usually have to solve the coordinate transformation of the position signal &lt;span class=&quot;math-container&quot;&gt;$q$&lt;/span&gt; anyway, this is way more efficient. You need no matrix operations. For a discrete signal (with sample Time &lt;span class=&quot;math-container&quot;&gt;$T$&lt;/span&gt;) you can approximate the velocity signal with:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$ \dot q(i) = \frac{q(i+1) -q(i)}{T}$&lt;/span&gt;&lt;/p&gt;&#xA;" OwnerUserId="20770" LastActivityDate="2018-10-09T10:46:23.373" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16516" PostTypeId="1" CreationDate="2018-10-09T13:56:15.380" Score="-1" ViewCount="26" Body="&lt;p&gt;For a college student project, I am designing a quadcopter with a payload of 3-4kg.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I am new I don't know what are the implications of such a requirement on the quadcopter design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In particular  to choose:&#xA;- the motor KV&#xA;- the propellers&#xA;- the ESCs and battery rating&lt;/p&gt;&#xA;" OwnerUserId="21357" LastEditorUserId="18235" LastEditDate="2018-10-09T17:47:59.120" LastActivityDate="2018-10-09T18:00:56.987" Title="what specification required for quardcopter to pickup 5kg weight" Tags="&lt;quadcopter&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16517" PostTypeId="2" ParentId="16516" CreationDate="2018-10-09T18:00:56.987" Score="0" Body="&lt;p&gt;You will need some kind of iterative design to figure out the design of your multi-rotor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can consider quadrotor but maybe hexa is making more sense as it will require different kinds of motors...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, you know the payload, assume a platform weight around 2-3 kg. So you need to have motors capable of producing a total thrust around 80-100N (typically people go for a maximum thrust double of the hovering one). From there you need to find the motors and propellers capable of producing that thrust, this will give you some idea about the ESCs rating (assume worst case, every motor drawign max current). Then based on how long you want to fly you will get your baterry. Once there check the total weight of your platform with respect the initial guess, and iterate....&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can have a look at a design helper &lt;a href=&quot;https://www.ecalc.ch/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.ecalc.ch/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2018-10-09T18:00:56.987" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16519" PostTypeId="1" CreationDate="2018-10-09T20:24:26.317" Score="2" ViewCount="108" Body="&lt;p&gt;I have a process model update that follows the form:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\mathbf{x}_{k|k-1} = \mathbf{x}_{k-1|k-1} + \delta \mathbf{x}_k,&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where &lt;span class=&quot;math-container&quot;&gt;$\mathbf{x}_{k-1|k-1}$&lt;/span&gt; is the posterior estimate from the last filter update and &lt;span class=&quot;math-container&quot;&gt;$\delta \mathbf{x}_k$&lt;/span&gt; is the increment due to odometry (which is treated as a control step).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is this:  When trying to implement this as a predict step in a state estimator (e.g. Kalman filter), is it enough to consider &lt;span class=&quot;math-container&quot;&gt;$\mathbf{x}_{k-1|k-1}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\delta \mathbf{x}_k$&lt;/span&gt; as being &lt;em&gt;independent&lt;/em&gt; Gaussian random variables drawn from distributions (&lt;span class=&quot;math-container&quot;&gt;$\mathcal{N}(\mathbf{x}_{k-1|k-1}, P_{k-1|k-1})$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\mathcal{N}(\delta \mathbf{x}_k, Q)$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$Q$&lt;/span&gt; is the odometry model covariance and &lt;span class=&quot;math-container&quot;&gt;$\mathcal{N}(m, \sigma^2)$&lt;/span&gt; is a Gaussian distribution with mean &lt;span class=&quot;math-container&quot;&gt;$m$&lt;/span&gt; and variance &lt;span class=&quot;math-container&quot;&gt;$\sigma^2$&lt;/span&gt;)?  In this case, I would have the following model covariance update during the prediction step:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\mathbf{x}_{k|k-1} = \mathbf{x}_{k-1|k-1} + \delta \mathbf{x}_k \\&#xA;P_{k|k-1} = P_{k-1|k-1} + Q &#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My hangup is that this does not follow the normal Kalman filter prediction paradigm:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;P_{k|k-1} = J P_{k-1|k-1} J^T + Q.&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fundamentally, I believe my update equation is correct because of the fact that the mean and covariance of the sum of two Gaussian distributions is the sum of the mean and the sum of the covariance, respectively, but I am having difficulty reconciling this fact with the Kalman filter equations.  Does my reasoning make sense?  Am I correct?&lt;/p&gt;&#xA;" OwnerUserId="21359" LastActivityDate="2018-10-09T20:24:26.317" Title="Wheeled Mobile Robot State Estimation Model Using Odometry" Tags="&lt;wheeled-robot&gt;&lt;odometry&gt;&lt;motion&gt;&lt;estimation&gt;" AnswerCount="0" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16520" PostTypeId="2" ParentId="16498" CreationDate="2018-10-09T21:02:01.180" Score="1" Body="&lt;p&gt;Indoor operation  &lt;strong&gt;rules  out&lt;/strong&gt;  the  use  of  GPS  due to signal attenuation and considerable inconsistency incorporated with localization drift. In such scenarios, simultaneous localization and mapping (SLAM) provides an appealing alternative to estimate the current state of robot and construct the map.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For indoor environments, depending on the accuracy needed, two popular methods are considered:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Visual SLAM&lt;/strong&gt;: &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Process of estimating the ego-motion of an agent (e.g., vehicle, human, and robot) equipped with a single or multiple cameras. Typical vision sensors are monocular, stereo and RGB-D cameras.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Visual-Inertial SLAM&lt;/strong&gt;:&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Dynamic motion, a lack of visible texture, and the need for precise structure and motion estimates reduce visual SLAM capabilities to construct accurate map and estimate the pose of the camera. The measurement from an inertial measurement unit (IMU) would be a good supplement for visual measurements to improve the result.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please note that if revising the place is not required in your application (problem known as &lt;em&gt;loop closure&lt;/em&gt;), the SLAM automatically reduces to odometry.&lt;/p&gt;&#xA;" OwnerUserId="17877" LastActivityDate="2018-10-09T21:02:01.180" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16522" PostTypeId="1" CreationDate="2018-10-10T07:35:12.847" Score="-1" ViewCount="41" Body="&lt;p&gt;I'm working on an RC-controlled model aircraft. One of the features I'd like to implement is real-time video streaming from the drone's camera. Distance is going to be a few dozen, or better hundred meters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously, communication link bandwidth is a weak chain here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How should I approach it? Are there communication protocols and hardware modules I could make use of? &lt;/p&gt;&#xA;" OwnerUserId="20282" LastActivityDate="2018-10-10T09:28:22.253" Title="RF-transceiver for real-time video streaming?" Tags="&lt;radio-control&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16523" PostTypeId="2" ParentId="16522" CreationDate="2018-10-10T09:28:22.253" Score="0" Body="&lt;p&gt;Drones typically use 5.8Ghz for FPV, you can pick up cameras, transmitters and receivers quite cheaply that are already integrated. Some newer models have OTG UVC support to plug directly into a smartphone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.banggood.com/Eachine-TX02-Super-Mini-AIO-5_8G-40CH-200mW-VTX-600TVL-14-Cmos-FPV-Camera-p-1088368.html?rmmds=search&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.banggood.com/Eachine-TX02-Super-Mini-AIO-5_8G-40CH-200mW-VTX-600TVL-14-Cmos-FPV-Camera-p-1088368.html?rmmds=search&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.banggood.com/Eachine-ROTG01-UVC-OTG-5_8G-150CH-Full-Channel-FPV-Receiver-For-Android-Mobile-Phone-Smartphone-p-1147692.html?rmmds=detail-top-buytogether-auto&amp;amp;ID=224&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.banggood.com/Eachine-ROTG01-UVC-OTG-5_8G-150CH-Full-Channel-FPV-Receiver-For-Android-Mobile-Phone-Smartphone-p-1147692.html?rmmds=detail-top-buytogether-auto&amp;amp;ID=224&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18374" LastActivityDate="2018-10-10T09:28:22.253" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16524" PostTypeId="2" ParentId="16498" CreationDate="2018-10-10T09:33:41.447" Score="0" Body="&lt;p&gt;BLE Bluetooth Low Energy beacons can be used for internal location, you will need a few distributed throughout your space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.banggood.com/JDY-08-4_0-Bluetooth-Module-BLE-CC2541-Airsync-For-IBeacon-Compatible-With-Arduino-p-1325934.html?rmmds=search&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.banggood.com/JDY-08-4_0-Bluetooth-Module-BLE-CC2541-Airsync-For-IBeacon-Compatible-With-Arduino-p-1325934.html?rmmds=search&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18374" LastActivityDate="2018-10-10T09:33:41.447" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16525" PostTypeId="2" ParentId="16499" CreationDate="2018-10-10T09:52:34.677" Score="2" Body="&lt;p&gt;Usually 3D printed objects are not 100% infill, you can easily drill PLA, however it can delaminate if you push too hard and go fluffy when hot, producing a rough surface and poor quality finish.&#xA;3D Printing is quite cheap and relatively fast, better to design your model with correct holes, the internal structure of the model will then offer better support as the holes will have proper walls.&lt;/p&gt;&#xA;" OwnerUserId="18374" LastActivityDate="2018-10-10T09:52:34.677" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16527" PostTypeId="2" ParentId="8480" CreationDate="2018-10-10T11:49:00.967" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I argue that because feedforward control still uses sensor values to produce a control signal&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;For a theoritical discussion, your pre-assumption is wrong. A feedforward control logic need not depend upon the sensor value. Rather it depnds on the desired value. For example, If we have a simple rod hung like simple pendulum with a torsional spring at the pivot. Let's say we are operating this rod with a motor at the pivot. If we give 30 degree desire angle, then feedforward logic will send a duty, accordingly, to balance torsional spring rotated for 30 degree. Whereas, feedback logic will take care the real world scenario of air resistance. &lt;/p&gt;&#xA;" OwnerUserId="21367" LastActivityDate="2018-10-10T11:49:00.967" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16532" PostTypeId="1" CreationDate="2018-10-11T17:49:12.890" Score="1" ViewCount="565" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/273zv.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/273zv.png&quot; alt=&quot;Inverse Kinematics for 5 DOF Robot&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Its is a robot config with 5 DOF. We are provided 2 offsets d1 and d2. d1 and d2 are both 0.04 meter. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is confusing for me alittle bit. I am attending lectures online but I am having trouble figuring out the angle joint configs and their mappings.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a simulation software I can use to visualize and understand its parameters.&lt;/p&gt;&#xA;" OwnerUserId="21376" LastActivityDate="2019-09-10T02:01:50.257" Title="Help in Computing Inverse Kinematics of a 5 DOF Robot Config" Tags="&lt;inverse-kinematics&gt;&lt;mapping&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16534" PostTypeId="1" CreationDate="2018-10-13T13:00:59.620" Score="0" ViewCount="105" Body="&lt;p&gt;I'm currently working on a robotics project where i have to build a quadruped. i have somewhat finished the designing for the time being and now moving into simulations. I have followed a inverse dynamics approach to build the controller of the leg following this &lt;a href=&quot;https://studywolf.wordpress.com/2013/09/17/robot-control-4-operation-space-control/&quot; rel=&quot;nofollow noreferrer&quot;&gt;blog&lt;/a&gt; and i have added, &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;                       Torque = Jacobean' * force&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;equation to the control equation in order to exert required reaction force and other forces. Meanwhile i have to order required parts to build a model early on due to delivery time. i selected PMDC to control the robot but have been restricted to cheap ones since the budget is low. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is selecting a controller circuit. Since the control signal from the dynamics model outputs a torque value and since DC motor torque is proportional to current, i understand that i have to control the current of the motor. But all the motor controllers i found in USD 1-100 range only controls speed(Voltage) of the motor. The cheapest one i found is dual motor controller for USD 100. But it is out of my reach because i have to control 12 dc motors. what are the options i have?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) can i achieve this by modifying a general motor controller? or is there a controller i can use in USD 1-50 range?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) i looked in sparkfun, pololu sites for no success. but robotpower.com had a board called &lt;a href=&quot;http://www.robotpower.com/products/MegaMoto_info.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;megamoto&lt;/a&gt; which i came across but doesn't say that i can current control using this. anyone who has experience with this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3) Can anyone give me a schematic for a simple motor controller that can control the current. (i understand that i can achieve this by using mosfets, gate driver ics, shunt resistors and current sense amplifiers but doesn't have much knowledge regarding the selection of components or designing of motor controllers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;4) are there any other methods to approach this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you&lt;/p&gt;&#xA;" OwnerUserId="21136" LastActivityDate="2021-04-01T03:02:25.233" Title="Practically implementing a torque controller" Tags="&lt;torque&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16535" PostTypeId="1" CreationDate="2018-10-13T18:36:48.367" Score="3" ViewCount="4122" Body="&lt;p&gt;We have 3 DOF for rotation in 3D space. So to describe an arbitrary rotation, we need to describe its 3 DOF. Euler angle does this by dividing a rotation in 3 steps, first rotate along the Z axis of the world frame (&lt;span class=&quot;math-container&quot;&gt;$z_0$&lt;/span&gt;), then rotate along Y axis of current frame (&lt;span class=&quot;math-container&quot;&gt;$y_1$&lt;/span&gt;), and finally rotate along the Z axis of the current frame(&lt;span class=&quot;math-container&quot;&gt;$z_2$&lt;/span&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And of course we have other conventions like z-x-z, x-y-x, y-z-y, x-z-x, y-x-y.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And my question is, why the euler angle is define in this &quot;ZYZ&quot; manner? Why the first and third rotation are about the same axis (of course the first Z and the last Z are in different frames) ? Why not to use ZYX?&lt;/p&gt;&#xA;" OwnerUserId="19727" LastActivityDate="2020-09-10T02:07:13.830" Title="Why Euler Angle is set to be in ZYZ order?" Tags="&lt;rotation&gt;" AnswerCount="5" CommentCount="2" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16536" PostTypeId="2" ParentId="16535" CreationDate="2018-10-13T20:00:49.733" Score="-1" Body="&lt;p&gt;Euler angles are not zyz. Euler angles are zyx. This is known as a 3-2-1 rotation. It is standard within the aerospace /robotics field where a series of three rotations are used to describe a relative orientation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A good reference for this is Aircraft Control and Simulation by Stevens and Lewis. I have the 2nd edition and it sits on my desk at work (among good company) because it is an invaluable reference. &lt;/p&gt;&#xA;" OwnerUserId="8842" LastActivityDate="2018-10-13T20:00:49.733" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16537" PostTypeId="2" ParentId="16535" CreationDate="2018-10-13T20:04:13.580" Score="5" Body="&lt;p&gt;Euler angles are not always consistently defined as ZYZ.  But this convention is common in robotics because many six-axis robotic manipulators have their fourth axis as a rotation about the forearm, then the fifth is a pitch about the wrist center, and then a final rotation along the Z axis of the end effector.   It maps most closely to the physical devices.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2018-10-13T20:04:13.580" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16538" PostTypeId="2" ParentId="16534" CreationDate="2018-10-13T23:36:28.383" Score="0" Body="&lt;p&gt;You can often find used or surplus industrial controllers capable of current control for good prices, including your range. Elmo Motion Control and Copley Control both have controllers with a small volume that are often surplused. There are even dual and triple drive products.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ebay and Ali Express are easy places to start looking but more local sources can also be found if you look, no matter which country you are in. &lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2018-10-13T23:36:28.383" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16540" PostTypeId="2" ParentId="16532" CreationDate="2018-10-14T02:22:39.170" Score="0" Body="&lt;p&gt;There is a beautiful man by the name of Chris Annin (beautiful as in what he did in the world of 6 axis robots). have a look at this video of his explaining inverse kinematics: &lt;a href=&quot;https://www.youtube.com/watch?v=_rMUddhdk7o&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=_rMUddhdk7o&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;His code is fully downloadable. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To explain my answer, Mr. Annin built an open source 6 axis robot! he explained how he achieved his inverse kinematics in the video I linked to, and the excel file he uses, is available to download. Like I said, Mr Annin is a beauty. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Good luck dude.&lt;/p&gt;&#xA;" OwnerUserId="18167" LastActivityDate="2018-10-14T02:22:39.170" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16542" PostTypeId="1" AcceptedAnswerId="16555" CreationDate="2018-10-14T05:07:34.167" Score="3" ViewCount="2402" Body="&lt;p&gt;I am confused about how do I multiply the rotational matrix in this case.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/QCVjm.png&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Problem&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QCVjm.png&quot; alt=&quot;Problem&quot; title=&quot;Problem&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I know that both T1 and T2 needs to be multiplied by a rotational matrix but I don't know how to multiply the rotational matrix. Do I use the post multiply or pre multiply?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since from what I read that post multiply is used when the moving coordinate is rotated with the reference of its own coordinate, and pre multiply is used when the moving coordinate is rotated with the reference of the fixed coordinate. So I would like to know in this case which one is moving coordinate and which one is moving coordinate?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have tried to find the new transformation matrix, but I'm not sure whether it is correct or not. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/5YvCJ.jpg&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;New transformation matrix&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/5YvCJ.jpg&quot; alt=&quot;New transformation matrix&quot; title=&quot;New transformation matrix&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="21235" LastEditorUserId="9176" LastEditDate="2018-10-14T15:09:04.837" LastActivityDate="2019-01-29T05:13:38.497" Title="Using pre multiply or post multipy for rotational matrix to get a new homogenous transformation matrix?" Tags="&lt;kinematics&gt;&lt;forward-kinematics&gt;&lt;rotation&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16543" PostTypeId="1" CreationDate="2018-10-14T15:39:00.437" Score="1" ViewCount="37" Body="&lt;p&gt;I have a question regarding a 'fundamental' understanding of the Kalman filter. So, for my application I'm trying to estimate state &lt;span class=&quot;math-container&quot;&gt;$x = [\theta~\dot{\theta}~\ddot{\theta}]$&lt;/span&gt; of a robot based on gyroscope readings. However, the gyroscopes are not located on the main platform of the robot but on the pivot points of the wheels (same principle as supermarket shopping cart). The angle &lt;span class=&quot;math-container&quot;&gt;$\delta_i$&lt;/span&gt; measures the angle that the pivot makes wrt the robotic platform. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;All the examples that I've seen in literature and on the internet used a measurement space that is a direct approximate of the state already (using a GPS when approximating position while the GPS gives a direct estimate of that position). However when closely following the equations of the Kalman filter, nowhere I see a potential place where to implement mapping of the measurement space to the state space (the model relating gyroscope data to theta states) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even though this model would be really easy (&lt;span class=&quot;math-container&quot;&gt;$\dot{\theta} = g_i - \dot{\delta_i}$&lt;/span&gt;) I don't know how or whether or not I should implement this. Right now it seems as if I could give the Kalman filter a measurement space and a predicted measurement of whatever I want without giving an indication on how this measurement space is related to the state space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This would pose an even bigger problem when trying to estimate the &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt; state of the robotic pod when using encoders from the wheels as well as IMU data on the pivot since these relations become far more complex than the current one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can someone explain this to me? I would really appreciate it.&lt;/p&gt;&#xA;" OwnerUserId="21390" LastEditorUserId="18235" LastEditDate="2018-10-16T07:35:09.537" LastActivityDate="2018-10-16T07:35:09.537" Title="Kalman filter with measurements indirectly determining state" Tags="&lt;mobile-robot&gt;&lt;kalman-filter&gt;&lt;odometry&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16544" PostTypeId="2" ParentId="16465" CreationDate="2018-10-14T21:14:43.743" Score="1" Body="&lt;p&gt;You might solve the inverse kinematic problem using the derivation as above. &#xA;However, I would recommend to solve with Jacobians (Pseudo-inverse matrix). If you are modelling a robot arm, you might have to deal with the classical problems such as collision avoidance or joint-limit problem. &#xA;One big advantage of the Pseudo-inverse matrix is that you can easily modify it to solve these classical problems. &lt;/p&gt;&#xA;" OwnerUserId="21382" LastActivityDate="2018-10-14T21:14:43.743" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16545" PostTypeId="1" AcceptedAnswerId="16558" CreationDate="2018-10-15T02:35:06.910" Score="2" ViewCount="583" Body="&lt;p&gt;I have to develop an algorithm to determine the necessary joint angles to achieve a desired TCP position and orientation in a 4 joint manipulator. I have come across a concept called &quot;degeneracies&quot;, and I have to think of a scheme that will handle degenerate points so that only one joint angle solution exists for any TCP position and orientation. For example: keep the shoulder tilted up at all times. How can I go about this? I understand the equations, it's mainly the &quot;only one joint angle solution&quot; I'm having a hard time with.&lt;/p&gt;&#xA;" OwnerUserId="21392" LastActivityDate="2018-12-16T11:01:50.333" Title="Inverse Kinematics - How to only find a unique joint angle solution in 4 dof robot?" Tags="&lt;robotic-arm&gt;&lt;inverse-kinematics&gt;&lt;manipulator&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16546" PostTypeId="2" ParentId="16545" CreationDate="2018-10-15T08:12:17.433" Score="0" Body="&lt;p&gt;You have a 4-Dof and want to find a set of joint angle values which fullfil the desired orientation and position. I doubt that you have multiple solution for this problem. Because you actually need 6-Dof for this task. &#xA;Otherwise you can build a nullspace to specify the shoulder movement while the TCP track the desired movement ( but with 4-Dof not worthy probably to use the nullspace...)&lt;/p&gt;&#xA;" OwnerUserId="21382" LastActivityDate="2018-10-15T08:12:17.433" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16549" PostTypeId="1" AcceptedAnswerId="17916" CreationDate="2018-10-16T07:14:28.903" Score="3" ViewCount="87" Body="&lt;p&gt;Suppose I have a 240x180 camera with the following distortion co-efficients,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$k_1 = -0.138592767408$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$k_2=0.0933736664192$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$k_3=0.0$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$p_1=k_4=-0.000335586987532$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$p_2=k_5=0.000173720158228$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The camera center is given to be &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$u_0 = 129.924663379$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$v_0 = 99.1864303447$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And the distortion formulae are&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$r^2=(u-u_0)^2+(v-v_0)^2$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\begin{align}&#xA;  \begin{bmatrix}&#xA;    u_d\\&#xA;    v_d&#xA;  \end{bmatrix} = &amp;amp; (1+k_1r^2+k_2r^4+k_3r^6)&#xA;  \begin{bmatrix}&#xA;    u-u_0\\&#xA;    v-v_0&#xA;  \end{bmatrix} + \\&#xA;&amp;amp; \begin{bmatrix}&#xA;    2k_4(u-u_0)(v-v_0)+k_5(r^2+2(u-u_0)^2)\\&#xA;    k_4(r^2+2(v-v_0)^2+2k_5(u-u_0)(v-v_0)&#xA;  \end{bmatrix} + &#xA;  \begin{bmatrix}&#xA;    u_0\\&#xA;    v_0&#xA;  \end{bmatrix}&#xA;\end{align}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the above formulae, &lt;span class=&quot;math-container&quot;&gt;$p_1=k_4$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$p_2=k_5$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$u$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$v$&lt;/span&gt; are the undistorted co-ordinates and &lt;span class=&quot;math-container&quot;&gt;$u_d$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$v_d$&lt;/span&gt; the corresponding distorted ones. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My understanding of the undistorted co-ordinates is that it is a mapping of every undistorted co-ordinate to a distorted one. Therefore, the ranges of both undistorted and distorted co-ordinates should be between (0-240, 0-180). However, going by the above formula, I get extremely high numbers for distorted co-ordinates if I input undistorted co-ordinates in the range(0-240, 0-180) which goes against this understanding. Have I done something wrong here?&lt;/p&gt;&#xA;" OwnerUserId="15335" LastEditorUserId="37" LastEditDate="2018-10-16T13:29:29.890" LastActivityDate="2019-01-03T03:49:13.723" Title="Question about Lens distortion" Tags="&lt;computer-vision&gt;&lt;cameras&gt;&lt;calibration&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16551" PostTypeId="1" AcceptedAnswerId="17994" CreationDate="2018-10-16T12:55:23.630" Score="5" ViewCount="144" Body="&lt;p&gt;I'm trying to build a robot/rover based on Raspberry Pi 3&#xA;At the moment I'm straggling with a basic driving in a straight line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm in a process of tuning my PID code andI'm not sure what sampling rate should I choose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These are the specs of the motors:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Voltage: DC 6V&lt;br&gt;&#xA;  Speed: 210 rpm&lt;br&gt;&#xA;  Encoder motor end: 11 signals&lt;br&gt;&#xA;  Rated voltage: DC 6V&lt;br&gt;&#xA;  No-load speed: 210RPM 0.13A&lt;br&gt;&#xA;  Max efficiency: 2.0kg.cm/170rpm/2.0W/0.60A&lt;br&gt;&#xA;  Max power: 5.2kg.cm/110rpm/3.1W/1.10A&lt;br&gt;&#xA;  Stall torque: 10kg.cm 3.2A&lt;br&gt;&#xA;  Retarder reduction ratio: 1 : 34&lt;br&gt;&#xA;  Hall resolution: hall x ratio 34.02 = 341.2PPR&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;When the robot moves at the desired speed I get 20 encoder signals if I take a sample every 100ms and I get 10 if I sample every 50ms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is what is the reasonable frequency to collect the encoder counts?&lt;br&gt;&#xA;At 50ms I get higher frequency, so my PID adjustments can occur more frequently, but I get only 10 signals, so the resolution seems to be a bit low.&lt;br&gt;&#xA;At 100ms I get 20 ticks which should provide more consistent stats, but then maybe adjustments are not happening fast enough.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any rule of thumb for choosing a sampling rate for PID when driving a robot rover?&lt;/p&gt;&#xA;" OwnerUserId="21379" LastActivityDate="2019-01-13T01:57:50.623" Title="Making a robot go in a straight rate - sampling rate for motor PID" Tags="&lt;pid&gt;&lt;wheeled-robot&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16552" PostTypeId="1" AcceptedAnswerId="16560" CreationDate="2018-10-16T19:21:28.367" Score="3" ViewCount="66" Body="&lt;p&gt;I have found the following &lt;a href=&quot;http://ais.informatik.uni-freiburg.de/teaching/ss17/robotics/exercises/solutions/02/sheet02sol.pdf&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;optional&quot;&gt;exercises&lt;/a&gt; about 2D Transformations as Affine Matrices. I am stuck at the second exercise that goes as follows:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The 2D pose of a robot w.r.t. a global coordinate frame is commonly written as &lt;span class=&quot;math-container&quot;&gt;$x =(x, y, \theta)^T$&lt;/span&gt;, where &lt;span class=&quot;math-container&quot;&gt;$(x, y)$&lt;/span&gt; denotes its position in the xy-plane and &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt; its orientation. The homogeneous transformation matrix that represents a pose &lt;span class=&quot;math-container&quot;&gt;$x = (x, y, θ)^T$&lt;/span&gt; w.r.t. to the origin &lt;span class=&quot;math-container&quot;&gt;$(0, 0, 0)^T$&lt;/span&gt; of the global coordinate system is given by &#xA;  &lt;span class=&quot;math-container&quot;&gt;$$&#xA;X=\begin{pmatrix}&#xA;\textbf{R}(\theta) &amp;amp; \textbf{t} \\&#xA;0 &amp;amp; 1&#xA;\end{pmatrix}, \textbf{R}(\theta)=\begin{pmatrix}&#xA;cos(\theta) &amp;amp; -sin(\theta) \\&#xA;sin(\theta) &amp;amp; cos(\theta)&#xA;\end{pmatrix}, \textbf{t}=\begin{pmatrix}&#xA;x \\&#xA;y&#xA;\end{pmatrix}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;(a) While being at pose &lt;span class=&quot;math-container&quot;&gt;$x_1 = (x_1, y_1, \theta_1)^T$&lt;/span&gt;, the robot senses a landmark &lt;span class=&quot;math-container&quot;&gt;$l$&lt;/span&gt; at position &lt;span class=&quot;math-container&quot;&gt;$(l_x, l_y)$&lt;/span&gt; w.r.t. to its local frame. Use the matrix &lt;span class=&quot;math-container&quot;&gt;$X_1$&lt;/span&gt; to calculate the coordinates of &lt;span class=&quot;math-container&quot;&gt;$l$&lt;/span&gt; w.r.t. the global frame.&#xA;  &lt;span class=&quot;math-container&quot;&gt;$$&#xA;\text{Let } ^g\textbf{T}_{x_1}=\begin{bmatrix}&#xA;cos \theta_1 &amp;amp; -sin \theta_1 &amp;amp; x_1 \\&#xA;sin \theta_1 &amp;amp; cos \theta_1 &amp;amp; y_1 \\&#xA;0 &amp;amp; 0 &amp;amp; 1&#xA;\end{bmatrix} \text{ and } ^{x_1}\mathbf{l}=\begin{bmatrix}&#xA;l_x \\&#xA;l_y \\&#xA;1&#xA;\end{bmatrix} \text{ then } ^g\mathbf{l}=^g\textbf{T}_{x_1}\cdot^{x_1}\mathbf{l}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In answer a) why does &lt;span class=&quot;math-container&quot;&gt;$^{x_1}l$&lt;/span&gt; have this vector &lt;span class=&quot;math-container&quot;&gt;$[lx, ly, \mathbf{1}]^T$&lt;/span&gt; instead of &lt;span class=&quot;math-container&quot;&gt;$[lx, ly, \mathbf{0}]^T$&lt;/span&gt;?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;b) Now imagine that you are given the landmark’s coordinates w.r.t. to the global frame. How can you calculate the coordinates that the robot will sense in his local frame?&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;... we follow the same logic as the previous exercise, i.e.&lt;span class=&quot;math-container&quot;&gt;$$&#xA;^{x_1}l=^{x_1}T\cdot \text{ }^gl=(^gT_{x_1})^{-1}\cdot\text{ }^gl&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The answer to b) is an inverse of &lt;span class=&quot;math-container&quot;&gt;$T$&lt;/span&gt; vector multiplied by &lt;span class=&quot;math-container&quot;&gt;$^{x_1}l$&lt;/span&gt;. Why? Why do I need to inverse T vector? What does a matrix inverse signify in mobile-robotics? &lt;/p&gt;&#xA;" OwnerUserId="21402" LastEditorUserId="37" LastEditDate="2018-10-17T10:20:28.623" LastActivityDate="2018-10-17T13:42:29.853" Title="2D Transformations as Affine Matrices" Tags="&lt;mobile-robot&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16553" PostTypeId="1" AcceptedAnswerId="16561" CreationDate="2018-10-16T20:16:13.923" Score="1" ViewCount="51" Body="&lt;p&gt;Only position data is obtained from Leap Motion devices. This data was already processed to be on the same coordinate axis by means of a homogeneous transformation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm reviewing &lt;a href=&quot;https://towardsdatascience.com/wtf-is-sensor-fusion-part-2-the-good-old-kalman-filter-3642f321440&quot; rel=&quot;nofollow noreferrer&quot;&gt;WTF is Sensor Fusion? The good old Kalman filter&lt;/a&gt;, but it considers speed and acceleration, data that I don't need and my doubt arises if they are all necessary to implement the Kalman filter, as I just need to get the correct estimate of the position between the Leap devices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would appreciate a response that clarifies the implementation of these matrices for this case.&lt;/p&gt;&#xA;" OwnerUserId="21404" LastEditorUserId="37" LastEditDate="2018-10-17T09:41:58.690" LastActivityDate="2018-10-17T20:57:35.877" Title="How to implement Kalman to merge the data obtained by two Leap Motion devices?" Tags="&lt;kalman-filter&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16555" PostTypeId="2" ParentId="16542" CreationDate="2018-10-16T21:38:10.547" Score="4" Body="&lt;p&gt;When working with rigid-body transformations, it is crucial to understand which coordinate frame the transformation is defined in. Further, there are different notations for this, so it is important to know which is in use. Let's assume that &lt;span class=&quot;math-container&quot;&gt;$T_b^a$&lt;/span&gt; describes the &lt;a href=&quot;https://en.wikipedia.org/wiki/Rotation_of_axes&quot; rel=&quot;nofollow noreferrer&quot;&gt;coordinate axes&lt;/a&gt; of frame &lt;span class=&quot;math-container&quot;&gt;$b$&lt;/span&gt; with respect to the coordinate axes of frame &lt;span class=&quot;math-container&quot;&gt;$a$&lt;/span&gt;. (Note that this is the same transformation that transforms data in frame &lt;span class=&quot;math-container&quot;&gt;$b$&lt;/span&gt; and expresses it in frame &lt;span class=&quot;math-container&quot;&gt;$a$&lt;/span&gt;.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Observe that with this notation, the composition of transformations is clear and follows mnemonic that subscripts and superscripts that are next to each other cancel, as in &lt;span class=&quot;math-container&quot;&gt;$T_c^a = T_b^a T^b_c$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your case, &lt;span class=&quot;math-container&quot;&gt;$T_1$&lt;/span&gt; is really the description of the cube's coordinate frame (&lt;span class=&quot;math-container&quot;&gt;$1$&lt;/span&gt;) w.r.t the camera's coordinate frame (&lt;span class=&quot;math-container&quot;&gt;$C$&lt;/span&gt;), written &lt;span class=&quot;math-container&quot;&gt;$T_1^C$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Likewise, &lt;span class=&quot;math-container&quot;&gt;$T_2$&lt;/span&gt; describes the base coordinate axes (&lt;span class=&quot;math-container&quot;&gt;$2$&lt;/span&gt;) w.r.t the camera (&lt;span class=&quot;math-container&quot;&gt;$C$&lt;/span&gt;), written &lt;span class=&quot;math-container&quot;&gt;$T_2^C$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, considering the rotation of the camera, we have the new camera axes (&lt;span class=&quot;math-container&quot;&gt;$C'$&lt;/span&gt;) w.r.t the original camera:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;T_{C'}^C =&#xA;\begin{bmatrix} R_z(\frac{\pi}{2}) &amp;amp; 0 \\ 0^\top &amp;amp; 1 \end{bmatrix}&#xA;=&#xA;\begin{bmatrix}&#xA;\cos\frac{\pi}{2} &amp;amp; -\sin\frac{\pi}{2} &amp;amp; 0 &amp;amp; 0 \\&#xA;\sin\frac{\pi}{2} &amp;amp; \cos\frac{\pi}{2} &amp;amp; 0 &amp;amp; 0 \\&#xA;0&amp;amp;0&amp;amp;1&amp;amp;0 \\&#xA;0&amp;amp;0&amp;amp;0&amp;amp;1&#xA;\end{bmatrix}.&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Having defined all of our transformations, we can now easily calculate our desired quantity, &lt;span class=&quot;math-container&quot;&gt;$T_{C'}^2$&lt;/span&gt;, which can be composed as&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;T_{C'}^2 = T_C^2 T_{C'}^C = (T_2^C)^{-1} T_{C'}^C.&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;" OwnerUserId="14272" LastEditorUserId="14272" LastEditDate="2019-01-27T04:23:06.070" LastActivityDate="2019-01-27T04:23:06.070" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16556" PostTypeId="1" CreationDate="2018-10-17T03:23:05.953" Score="1" ViewCount="124" Body="&lt;p&gt;I am reading one paper on observability &lt;a href=&quot;https://arxiv.org/abs/1805.05876&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;Observability Analysis of Aided INS with Heterogeneous Features of Points, Lines and Planes&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The state vector contains the current IMU state and the feature state. The IMU state consists of a unit quaternion representing the rotation, current IMU velocity and position, and gyroscope and accelerometer biases. The velocity is the derivative of the position with respect to the time, so they are dependent. Do the parameters in the state vector need to be independent? Why are the biases considered as part of the state vector? What are the advantages to do so? Can this result in a better estimation?&lt;/p&gt;&#xA;" OwnerUserId="15460" LastEditorUserId="19515" LastEditDate="2020-07-25T00:36:50.000" LastActivityDate="2020-07-25T00:36:50.000" Title="The biases in the state vector of Extended Kalman Filter(EKF)" Tags="&lt;slam&gt;&lt;kalman-filter&gt;&lt;estimation&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16557" PostTypeId="1" CreationDate="2018-10-17T10:55:45.903" Score="0" ViewCount="22" Body="&lt;p&gt;Simple task, robot with total knowledge about the world or at least a few side mounted IR sensors which can accurately measure where the robot is relative to a long straight corridor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We want to BOTH:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Keep the robot moving straight down said corridor&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Keep an equal distance from each wall&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Noting that the robot is two wheeled or four wheeled. Point being sometimes it will be necessary to not drive straight in order to correct for drift we have accumulated which has pushed us either left or right relative to the virtual center-line we want to stay on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm looking for an approach. Maybe some pseudocode, but even that's not necessary.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Don't say PID, a simple PID controller only accounts for one error term. We have two, the error as an angle between our heading and the desired straight heading and the error as a distance between us and the virtual center-line we'd like to be on at all times.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My previous approach was to attempt to use two PD loops. That didn't work out so well.&lt;/p&gt;&#xA;" OwnerUserId="1290" LastActivityDate="2018-10-17T23:42:33.057" Title="Stay both pointed forward and equal distance from side walls" Tags="&lt;mobile-robot&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16558" PostTypeId="2" ParentId="16545" CreationDate="2018-10-17T10:59:45.923" Score="1" Body="&lt;p&gt;If you have a 4 degrees of freedom system you will most probably solve the inverse kinematics equations for &lt;span class=&quot;math-container&quot;&gt;$X, Y$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$Z$&lt;/span&gt; position and, aditionally 1 orientation, let's call this &lt;span class=&quot;math-container&quot;&gt;$\alpha$&lt;/span&gt;. &lt;strong&gt;&lt;em&gt;IFF&lt;/em&gt;&lt;/strong&gt; the chosen orientation and the robot structure allows an analytical solution, you can proced as follows:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you mentioned you will get more than 1 solution for one set of inputs, so you must have a strategy to select one of the solutions. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can derive the equations to have the following form:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$q_{11} = f_{11}^{-1}(x, y, z, \alpha)$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$q_{12} = f_{12}^{-1}(x, y, z, \alpha)$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;here you decide which value of &lt;span class=&quot;math-container&quot;&gt;$q_1$&lt;/span&gt; to use, e.g. based on its sign. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$ q_1 = &#xA;\left\{ \begin{array}{c} &#xA;q_{11}  \text{ if } q_{11}&amp;gt;0;\\&#xA;q_{12} \text{ otherwise }&#xA;\end{array} \right. &#xA;$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;usually, for an analytical solution the next angle which gets calculated is &lt;span class=&quot;math-container&quot;&gt;$q_{3}$&lt;/span&gt;. You can formulate the equations so that they are dependent on &lt;span class=&quot;math-container&quot;&gt;$q_1$&lt;/span&gt; also. This way the &lt;span class=&quot;math-container&quot;&gt;$q_1$&lt;/span&gt; choise made earlier will be pluged in the calculations for the remaining joint angles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$q_{31} = f_{31}^{-1}(x, y, z, \alpha, q_1)$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$q_{32} = f_{32}^{-1}(x, y, z, \alpha, q_1)$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also in this case you can make a choise which solution to use:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$&#xA; q_3 = &#xA;\left\{&#xA;\begin{array}{c} &#xA;q_{31}  \text{ if } q_{31}&amp;gt;0; \\&#xA;q_{32} \text{ otherwise } &#xA;\end{array} \right.&#xA;$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can continue solving the inverse kinematics problem by calculating &lt;span class=&quot;math-container&quot;&gt;$q_2$&lt;/span&gt;. Here there is are no multiple solutions expected if &lt;span class=&quot;math-container&quot;&gt;$q_3$&lt;/span&gt; has already been chosen:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$q_3 = f_{2}^{-1}(x, y, z, \alpha, q_1, q_3)$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and you can continue this way until you have all angles. &lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2018-10-17T10:59:45.923" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16559" PostTypeId="2" ParentId="16556" CreationDate="2018-10-17T11:11:06.030" Score="1" Body="&lt;p&gt;Indeed position, velocity and acceleration (but also the unit quaternion and the angular velocity of the gyroscope) are related to each other. But the word &quot;biases&quot; refers to the measurement of these quantities, for example the gyroscope will measure the angular velocity plus a bias. Including these biases in the state space allows you the estimate the average value of each bias, which would improve your estimate of entire state vector.&lt;/p&gt;&#xA;" OwnerUserId="1487" LastActivityDate="2018-10-17T11:11:06.030" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16560" PostTypeId="2" ParentId="16552" CreationDate="2018-10-17T13:42:29.853" Score="3" Body="&lt;p&gt;Regarding your first question:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In answer a) why does &lt;span class=&quot;math-container&quot;&gt;$^{x_1}l$&lt;/span&gt; have this vector &lt;span class=&quot;math-container&quot;&gt;$[l_x,l_y,1]^T$&lt;/span&gt; instead of &lt;span class=&quot;math-container&quot;&gt;$[l_x,l_y,0]^T$&lt;/span&gt;?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The matrices work out to be one dimension larger than what you're working with &lt;em&gt;in order to keep&lt;/em&gt; that &lt;span class=&quot;math-container&quot;&gt;$1$&lt;/span&gt; entry in the input vector/matrix. This is because your matrix is doing rotation &lt;strong&gt;plus&lt;/strong&gt; translation in one step:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider rewriting your transform matrix as a rotation &lt;span class=&quot;math-container&quot;&gt;$R$&lt;/span&gt; and a translation &lt;span class=&quot;math-container&quot;&gt;$dS$&lt;/span&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\left[\begin{array}{ccc}&#xA;R &amp;amp; dS \\&#xA;0 &amp;amp; 1 \\&#xA;\end{array}\right]&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, when you want to transform some points, you append a value of &lt;span class=&quot;math-container&quot;&gt;$1$&lt;/span&gt; below the bottom row in order to get something like:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\left[\begin{array}{ccc}&#xA;\mbox{transformed points} \\&#xA;1 \\&#xA;\end{array}\right] = \left[\begin{array}{ccc}&#xA;R &amp;amp; dS \\&#xA;0 &amp;amp; 1 \\&#xA;\end{array}\right]&#xA;\left[\begin{array}{ccc}&#xA;\mbox{raw points} \\&#xA;1 \\&#xA;\end{array}\right]&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you write out the matrix math by hand things become a little more clear. You do element-wise multiplication of the first row of the transform matrix by the first column of the raw points vector/matrix and sum the results. This gives you the first row, first column entry in the transformed points vector/matrix, then you do second row of the transform matrix by the first column of the raw points and sum the results, and that gives you the second row, first column entry in the transformed points vector/matrix. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Showing the math here, you get:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\left[\begin{array}{ccc}&#xA;\mbox{transformed points} \\&#xA;1 \\&#xA;\end{array}\right] = \left[\begin{array}{ccc}&#xA;R\left(\mbox{raw points}\right) + dS\left(1\right) \\&#xA;0\left(\mbox{raw points}\right) + 1\left(1\right) \\&#xA;\end{array}\right]&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And so you can see that you wind up with:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\mbox{transformed points} = R\left(\mbox{raw points}\right) + dS \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you were to append a &lt;strong&gt;zero&lt;/strong&gt; instead of a one in your raw point/input then you would get the &lt;strong&gt;WRONG ANSWER&lt;/strong&gt; of:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\require{cancel}\cancelto{\mbox{wrong answer}}{\mbox{transformed points} = R\left(\mbox{raw points}\right) + \boxed{dS*0}} \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Appending a zero instead of a one means you won't actually include the translation portion of your transform. The appended one is included to setup the points to be transformed. You append it before you transform your points and you can strip it off as soon as the points are transformed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding your second question:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The answer to b) is an inverse of T vector multiplied by &lt;span class=&quot;math-container&quot;&gt;$^{x_1}l$&lt;/span&gt;. Why? Why do I need to inverse T vector? What does a matrix inverse signify in mobile-robotics?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You need to invert the transform because the question is asking you to change your point of reference. If you walk one mile East of your house, where is your house relative to you? You could call it -1 mile East of you, or 1 mile &lt;em&gt;West&lt;/em&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could say that you turn your body +30 degrees, or you could say that the whole world rotates -30 degrees. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously your house didn't move away from &lt;em&gt;you&lt;/em&gt;, and the world didn't rotate, but you have to chose something as your basis for measurement (datum). The transform that will take you from &lt;em&gt;your location&lt;/em&gt; back to the &lt;em&gt;world location&lt;/em&gt; (measurement datum) is the &lt;em&gt;inverse&lt;/em&gt; of the transform that took you from the world location to your current location. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Again, to the math! Consider again the transform matrix:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\left[\begin{array}{ccc}&#xA;R &amp;amp; dS \\&#xA;0 &amp;amp; 1 \\&#xA;\end{array}\right]&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your rotation is zero, then the rotation matrix is the identity matrix &lt;span class=&quot;math-container&quot;&gt;$I$&lt;/span&gt;, which is essentially 1 (ones on the diagonals). This means that, &lt;em&gt;for no rotation&lt;/em&gt;, your transform matrix is then just the change in position &lt;span class=&quot;math-container&quot;&gt;$dS$&lt;/span&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;T = \left[\begin{array}{ccc}&#xA;1 &amp;amp; dS \\&#xA;0 &amp;amp; 1 \\&#xA;\end{array}\right]&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And, if you invert that matrix, you get:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;T^{-1} = \left[\begin{array}{ccc}&#xA;1 &amp;amp; -dS \\&#xA;0 &amp;amp; 1 \\&#xA;\end{array}\right]&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you can see there that, if you don't rotate, then the translation that will take you from B back to A is the opposite of the translation that took you from A to B (&lt;span class=&quot;math-container&quot;&gt;$dS$&lt;/span&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The full result is marginally trickier, because the &lt;em&gt;direction&lt;/em&gt; of your translation will change if you rotate. Consider, for example, taking one large step forward and then turning 90 degrees. How do you get back to where you started? One large step backward and then turning -90 degrees? NO! because your orientation after the first transform is &lt;strong&gt;not the same&lt;/strong&gt; as the starting orientation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If +90 degrees is a quarter turn to your left (counter clockwise), then instead of &lt;em&gt;just&lt;/em&gt; taking a large step backward you need to rotate that large step backwards by -90 degrees, which means sticking your leg behind you and then rotating it a quarter turn &lt;em&gt;clockwise&lt;/em&gt;. This results in a large step &lt;em&gt;left&lt;/em&gt;, then turning your body -90 degrees. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similarly, if your initial transform matrix is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;T = \left[\begin{array}{ccc}&#xA;R &amp;amp; dS \\&#xA;0 &amp;amp; 1 \\&#xA;\end{array}\right]&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;then the full result for inverting it is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;T^{-1} = \left[\begin{array}{ccc}&#xA;R^{-1} &amp;amp; -dS(R^{-1}) \\&#xA;0 &amp;amp; 1 \\&#xA;\end{array}\right]&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you can see that the inverse transform is un-rotating to get back to the direction you were originally facing (&lt;span class=&quot;math-container&quot;&gt;$R^{-1}$&lt;/span&gt;) AND going the opposite distance &lt;span class=&quot;math-container&quot;&gt;$-dS$&lt;/span&gt; for the &lt;em&gt;direction you were originally facing&lt;/em&gt; &lt;span class=&quot;math-container&quot;&gt;$R^{-1}$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hopefully this helps clarify things for you. If you're still stuck, just leave a comment with what's not clicking and I can edit the answer to help. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-10-17T13:42:29.853" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16561" PostTypeId="2" ParentId="16553" CreationDate="2018-10-17T20:57:35.877" Score="0" Body="&lt;p&gt;You don't need speed and acceleration in your Kalman filter. A Kalman works on any state vector, the components of that vector could be anything, and not necessarily positions. They could be water densities, magnetic field strengths, you name it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your case the state vector is just the components of the position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course how you implement the predict phase of the Kalman is up to you. Typically one predicts the new positions by multiplying the velocties by the timestep to get a position delta and then adding that on to the original position. Your velocity is not in the state but that's irrelevant. You can estimate a velocity based on the previous positions, you can make it as simple or as sophisticated as you want. Ultimately you are going to have to predict the new positions based on the previous ones if that's all you've got.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The update phase ought to be straightforward as your expected measurements are simply the predicted positions.&lt;/p&gt;&#xA;" OwnerUserId="21320" LastActivityDate="2018-10-17T20:57:35.877" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16562" PostTypeId="2" ParentId="16557" CreationDate="2018-10-17T23:42:33.057" Score="1" Body="&lt;p&gt;Implement two low-level PID controllers, one for each wheel.  Then compute the targets for both wheels using a path planner which determines next wheel setpoints based on the error computed after reading the IR sensors.  If you cannot determine both position and orientation errors using your sensors (you cannot), then keep track of the last few positions to determine actual angle of travel.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would add a third PID loop for “squashing” the orientation error, but that isn’t required if you can accept some wavering about the centerline of travel.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2018-10-17T23:42:33.057" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16563" PostTypeId="1" CreationDate="2018-10-18T03:09:57.577" Score="1" ViewCount="49" Body="&lt;p&gt;I am a mechanical engineering student currently working on my senior capstone. My team of all MechEs has to build a robotic &quot;arm&quot; where the arm is really just a link/bar of aluminum. The thing we really care about is testing for certain control system parameters like resonance and bandwidth. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can expect, we have no idea about electronics yet they will play THE vital role in this project. Our advisor has suggested that we would need a motor, a power supply for the motor, a power amplifier (I think for the controller/processor but I am not sure), and encoders to actually measure data that we can use. So I have a few questions: &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;How would we choose a correct supply for the motor? From researching online, we know we need a DC motor as that is apparently suitable for controls applications.&lt;/li&gt;&#xA;&lt;li&gt;What exactly is the need/purpose of a power amplifier and how would we choose one?&lt;/li&gt;&#xA;&lt;li&gt;We have figured out that we need absolute encoders as we need position data. But how exactly do they work and how are they wired/implemented/powered? I understand that they can give us the data we need but I cannot seem to find how to actually use one in a project/build.&lt;/li&gt;&#xA;&lt;li&gt;Related to #3, does anybody know about torque sensors? We would like to use them but are clueless on how to actually implement them (where to place them, what kind of data they give, etc.).&lt;/li&gt;&#xA;&lt;li&gt;Is it physically possible to give a step input to a motor to ultimately measure resonant frequency?  &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="21413" LastEditorUserId="9176" LastEditDate="2018-10-18T07:40:58.030" LastActivityDate="2018-10-18T15:26:33.393" Title="Robotic Arm Senior Capstone. Electronics/Controls/Sensors Questions" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;motor&gt;&lt;sensors&gt;&lt;design&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16564" PostTypeId="2" ParentId="16563" CreationDate="2018-10-18T15:26:33.393" Score="2" Body="&lt;p&gt;This is a question all about &quot;how do I specify/size my equipment,&quot; so I think it's probably a fair question for the site, though it &lt;em&gt;is&lt;/em&gt; close to an open-ended design question. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Regarding the &quot;how do we choose&quot; portions of questions 1, 2, and 4&lt;/strong&gt; - you have to have some kind of a test procedure. &lt;strong&gt;Why&lt;/strong&gt; are you making the arm? What is it that you're intending to test? You mention resonant frequency, but do you mean the &lt;em&gt;structural&lt;/em&gt; resonance of the arm or do you mean the plant resonance of the arm+feedback+controller control loop? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;How&lt;/em&gt; are you intending on performing this test? Are you going to add various weights to the arm and repeat a particular test, or are you going to vary supply voltage to the actuator, or something different?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'll have to determine the static torque required to support the arm (and test load?), the dynamic torque required to accelerate the arm (and test load?), and estimate a top speed at which you expect to operate. With a torque requirement and a speed requirement you can calculate a &lt;strong&gt;power&lt;/strong&gt; requirement. Motors have some efficiency (listed on their datasheet, but I would use 70% as a thumbrule) so you'll need a power supply capable of providing the motor with the &lt;em&gt;electrical power&lt;/em&gt; needed for the motor to provide 70% of that as &lt;em&gt;mechanical&lt;/em&gt; power.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Regarding the torque sensors and rotary encoders&lt;/strong&gt; - again, just like the motor datasheet will give you the actual efficiency for that motor, the sensor datasheet will tell you what the capabilities and limitations are for the particular sensor. This typically includes measurement range, number of revolutions you can turn the sensor, supply voltage, output format, scale factors (how the output format relates to the measurement range), accuracy, etc. An absolute rotary encoder is anything as simple as a potentiometer, which would output a variable voltage, up to a optically isolated high resolution encoder that outputs Grey code on some high speed bus format, and everything in between. Where do you put these sensors? Wherever you want the data. If you want torque at a joint, you put the sensor at the joint. In order for a torque sensor to register a torque it needs to have a torque applied to it, which means that they are typically some load-bearing component in an elbow/joint design. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Regarding the power amplifier&lt;/strong&gt; - A microcontroller is only going to provide power in the milliwatts region. A computer/USB port may provide a little more power, but probably not enough to drive a large robotic arm. You'll need a device capable of converting the &lt;em&gt;control signal&lt;/em&gt; that is outputted from the microcontroller to a &lt;em&gt;variable power source&lt;/em&gt; that will be the input to the arm actuator. The variable power source is your power amplifier, and again the size you need is determined by however much power you're expecting the arm to use. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Regarding the step input&lt;/strong&gt; - you give a light a step input every time you flip a light switch. The supply voltage is 0 V, and then suddenly the supply voltage is 110 V or 220 V. You can give a step input to a motor by applying a voltage to that motor, and you can provide a step input to a controller by providing a reference to that controller. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Finally&lt;/strong&gt;, maybe you're noticing that this is going to be a lot of work. I would fully expect you to go through 3 or more design &lt;em&gt;iterations&lt;/em&gt;. You design an arm of a particular size and shape to ballpark the motor size requirements and find a torque sensor and rotary encoder that also meets your needs. Then you revisit the arm design to try to allow it to attach to the sensors; this re-design may mean that the weight of the arm has changed, which means you get to re-select the motor and sensors you use. This process repeats until your solution converges.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-10-18T15:26:33.393" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16566" PostTypeId="1" CreationDate="2018-10-18T20:41:54.140" Score="1" ViewCount="885" Body="&lt;p&gt;I am trying to spec out a motor's torque required to rotate a platform about an axis. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This diagram makes it better to understand(it's like a rotisserie):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/BhRRcb.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/BhRRcb.jpg&quot; alt=&quot;Isometric view&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Dimensions are in cm:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/VdqdM.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/VdqdM.jpg&quot; alt=&quot;Front view&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have an arbitrary shaped object on the platform that I simplified to a cuboid to calculate the moment of inertia. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The combined weight is about 25kg.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I use the moment of inertia formula for a cuboid along the length axis and use the parallel axis theorem to move the axis to where I have the rod, I get:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;I = (1/2) * m * (w^2 + h^2) + m*((0.5*h)^2)&#xA;  = (1/2) * 25kg * (0.4^2+ 0.5^2) + 25 * (0.2^2)&#xA;  = 6.125 kg-m^2&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Assuming I want to reach 5 rpm in 5 seconds. I have &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  5rpm = (2 * pi * 5)/60  rad/s&#xA;&#xA;  alpha = ((2 * pi * 5)/60 - 0)/(5-0)  rad/s^2&#xA;&#xA;        = pi/30 rad/s^2&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;T = I * alpha    = 6.125 * (pi/30)   = 0.64N-m&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I am not entirely sure if this calculation is correct. I had a 5N-m rated dc motor lying around and I fit it to the platform. The motor was able to rotate the platform about 45 degree clockwise but was not able to come back to zero degrees. Am I missing something in the above calculation? Gravity doesn't feature in my equations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There could be other factors like friction, or the gearbox in the motor?&lt;/p&gt;&#xA;" OwnerUserId="13065" LastEditorUserId="37" LastEditDate="2018-10-19T11:08:00.157" LastActivityDate="2018-10-22T08:20:13.223" Title="Calculating torque required to rotate a platform" Tags="&lt;motor&gt;&lt;torque&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16567" PostTypeId="2" ParentId="16566" CreationDate="2018-10-18T23:04:38.920" Score="0" Body="&lt;p&gt;First of all, please draw the axes on the object above to make it easier for others to help you. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are going to rotate the cuboid from the end of the rod, you should also be using a parallel axes theorem to translate the moment of inertia equivalent to the length of the rod as well. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;From my understanding, you are trying to lift the cuboid by attaching a motor at the end of the rod, am I right?  This is where the clearly labeled axes are important. &lt;/p&gt;&#xA;" OwnerUserId="10691" LastActivityDate="2018-10-18T23:04:38.920" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16568" PostTypeId="2" ParentId="16566" CreationDate="2018-10-19T11:37:09.210" Score="1" Body="&lt;p&gt;In addition to the torque required to turn, you do also need to account for the torque required to hold the load against gravity, which could be significant.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider your system in terms of the rod being your arm, held out in front of you, and the box being a yard brush held at the end of the handle. Starting with the brush pointing up, it requires little effort to hold in position. Similarly you can swing it through 360 degrees with only a little more effort, relying on the falling momentum to swing it back around to the top position. Now try to hold it pointing directly sideways theough. You would need to have pretty strong wrists to do that, if you can manage it at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since your load is an arbitrary shape within a bounding box, I think you are better off calculating your weight distribution according to the worst case. For your system, this would be with your full 25kg load being at one of the top corners of the box.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the rod is rotated such that the load is at its furthest extent, it is &lt;span class=&quot;math-container&quot;&gt;$\sqrt{40^2+(50/2)^2}\approx47.17$&lt;/span&gt;cm from the rod.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Calculate this torque and add it to the torque required to turn at the speed you want and you should have a motor sized for your application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you size your motor for worst case load, then it should should be more than adequate for any load you throw at it. If you size it for anything less, then you may find that some loads exceed the capabilities of your system, so you may need to add additional sensors or control complexity to degrade gracefully in an overload situation.&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="37" LastEditDate="2018-10-22T08:20:13.223" LastActivityDate="2018-10-22T08:20:13.223" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16569" PostTypeId="1" AcceptedAnswerId="16666" CreationDate="2018-10-19T11:49:59.483" Score="4" ViewCount="1055" Body="&lt;p&gt;I'm designing a PD controller so that the response due to unit step should exhibit an overshoot of 20% and steady-state error less 0.01. I've computed the parameters Kp and Kd and double-checked the result based on root locus design approach. This is the Simulink for a PD controller where &lt;strong&gt;kp&lt;/strong&gt;=7130 and &lt;strong&gt;kd&lt;/strong&gt;=59.388. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/fcmWW.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fcmWW.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and the result is &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/xGBsD.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xGBsD.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've computed the closed-loop pole  &lt;span class=&quot;math-container&quot;&gt;$-38.694+75.5266j$&lt;/span&gt; at the gain &lt;strong&gt;kd&lt;/strong&gt; via another Matlab's script I've written. Matlab shows same closed-loop pole shown below&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/MBXYX.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MBXYX.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;which agrees with my calculation for &lt;strong&gt;kd&lt;/strong&gt;. The block diagram for the preceding system is &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/uSGQm.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/uSGQm.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, I would like to use &lt;code&gt;stepinfo()&lt;/code&gt; to obtain the performance of the system, hence: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;clear all&#xA;clc&#xA;kp=7130;&#xA;kd=59.3880;&#xA;num=[kd kp];&#xA;den=[1 (kd+18) (kp+72)];&#xA;F=tf(num,den);&#xA;step(F)&#xA;stepinfo(F)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;which yields this information (i.e. obviously wrong) &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    RiseTime: 0.0133&#xA;SettlingTime: 0.0910&#xA; SettlingMin: 0.9182&#xA; SettlingMax: 1.2584&#xA;   Overshoot: 27.1141&#xA;  Undershoot: 0&#xA;        Peak: 1.2584&#xA;    PeakTime: 0.0321&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Why &lt;code&gt;tf&lt;/code&gt; yields different results in comparison with Simulink.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/z7ARC.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/z7ARC.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Matlab's documentation shows no benefits info regarding this issue. &lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="2155" LastEditDate="2018-11-06T23:17:35.687" LastActivityDate="2018-11-06T23:28:51.777" Title="Inconsistent results between Simulink derivative model and tf for PD controller" Tags="&lt;control&gt;&lt;matlab&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16571" PostTypeId="2" ParentId="16569" CreationDate="2018-10-19T14:09:04.947" Score="1" Body="&lt;p&gt;I think you're having trouble in your block diagram reduction. I (ironically) don't actually have the control system toolbox, but consider the following maths:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your starting equation:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\boxed{K_p + K_ds}\rightarrow \boxed{\frac{1}{\left(s+6\right)\left(s+12\right)}}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can &quot;rephrase&quot; your &lt;span class=&quot;math-container&quot;&gt;$K_p$&lt;/span&gt; as &lt;span class=&quot;math-container&quot;&gt;$\left(K_p\left(\frac{\frac{1}{K_p}}{\frac{1}{K_p}}\right)\right)$&lt;/span&gt;, which reduces to &lt;span class=&quot;math-container&quot;&gt;$\frac{1}{\frac{1}{K_p}}$&lt;/span&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It looks almost like instead of multiplying the denominator by &lt;span class=&quot;math-container&quot;&gt;$\frac{1}{K_p}$&lt;/span&gt; that you're instead just &lt;em&gt;adding&lt;/em&gt; &lt;span class=&quot;math-container&quot;&gt;$K_p$&lt;/span&gt; to the denominator. Then I think that things are further complicated by not distributing; it looks like you're applying the &lt;span class=&quot;math-container&quot;&gt;$K_p$&lt;/span&gt; term to your plant, then taking that result and &lt;em&gt;multiplying&lt;/em&gt; that by the &lt;span class=&quot;math-container&quot;&gt;$K_d$&lt;/span&gt; term.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To put it a little clearer, it looks like you're doing something like:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\boxed{A + B}\rightarrow\boxed{C}\\&#xA;\boxed{B}\rightarrow\boxed{AC}\\&#xA;\boxed{BAC}\\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;when the right answer should actually be the distributed:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\boxed{A+B}\rightarrow\boxed{C}\\&#xA;\boxed{\left(A+B\right)\left(C\right)} \\&#xA;\boxed{AC + BC}\\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, starting out with rephrasing the proportional gain:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\boxed{\frac{1}{\frac{1}{K_p}} + K_ds}\rightarrow \boxed{\frac{1}{\left(s+6\right)\left(s+12\right)}} \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then distribute the terms:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\boxed{\left(\frac{1}{\frac{1}{K_p}} + K_d s\right) \left(\frac{1}{\left(s+6\right)\left(s+12\right)} \right)} \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(I'll drop the boxes from here)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\frac{1}{\frac{1}{K_p}}\left(\frac{1}{\left(s+6\right)\left(s+12\right)} \right) + K_d s \left(\frac{1}{\left(s+6\right)\left(s+12\right)}\right)  \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Notice here that the left term is modifying the denominator, but the right term isn't. You need common denominators to add numerators, so you'll have to modify the right term by the same &lt;span class=&quot;math-container&quot;&gt;$\frac{\frac{1}{K_p}}{\frac{1}{K_p}}$&lt;/span&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\frac{1}{\frac{1}{K_p}}\left(\frac{1}{\left(s+6\right)\left(s+12\right)} \right) + K_d s\left(\frac{\frac{1}{K_p}}{\frac{1}{K_p}}\right) \left(\frac{1}{\left(s+6\right)\left(s+12\right)}\right)  \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Distribute the &lt;span class=&quot;math-container&quot;&gt;$K_d s$&lt;/span&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\frac{1}{\frac{1}{K_p}}\left(\frac{1}{\left(s+6\right)\left(s+12\right)} \right) + \left(\frac{K_d s\frac{1}{K_p}}{\frac{1}{K_p}}\right) \left(\frac{1}{\left(s+6\right)\left(s+12\right)}\right)  \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A crude cleanup now to combine terms:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\frac{1}{\frac{1}{K_p}}\left(\frac{1}{\left(s+6\right)\left(s+12\right)} \right) + \left(\frac{\frac{K_d}{K_p}s}{\frac{1}{K_p}}\right) \left(\frac{1}{\left(s+6\right)\left(s+12\right)}\right)  \\&#xA;$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\frac{1}{\frac{1}{K_p}\left(s+6\right)\left(s+12\right)} + \frac{\frac{K_d}{K_p}s}{\frac{1}{K_p}\left(s+6\right)\left(s+12\right)}  \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\frac{1+\frac{K_d}{K_p}s}{\frac{1}{K_p}\left(s+6\right)\left(s+12\right)}  \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now you have it in a non-standard form because the &lt;span class=&quot;math-container&quot;&gt;$s$&lt;/span&gt; in the numerator has a coefficient that's not &lt;span class=&quot;math-container&quot;&gt;$1$&lt;/span&gt;, so get it to one by:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\left(\frac{\frac{K_p}{K_d}}{\frac{K_p}{K_d}}\right)\left(\frac{1+\frac{K_d}{K_p}s}{\frac{1}{K_p}\left(s+6\right)\left(s+12\right)}\right)  \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then that reduces to:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\frac{s+\frac{K_p}{K_d}}{\frac{1}{K_d}\left(s+6\right)\left(s+12\right)}  \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I compared step results from your original and the above and they're similar, but not quite exactly the same. As I mentioned, I can't use the &lt;code&gt;tf&lt;/code&gt; functions, etc. in Matlab, but hopefully this helps you out!&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-10-19T14:09:04.947" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="16573" PostTypeId="1" CreationDate="2018-10-19T19:05:05.453" Score="1" ViewCount="234" Body="&lt;p&gt;I have a quadcopter, and several components in play.  First, I have a real position system (VICON), and I also have a SLAM platform.  Then, of course, the IMU on the quadcoptor.  I am trying to implement my control system which is heavily dependent on VICON to be dependent on the SLAM data instead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My SLAM data is not as accurate as the VICON nor are its update as timely.  (ie: VICON 100hz, SLAM 1hz on a Pi, 10hz on a laptop).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I am trying to do is estimate my position using the on-board IMU data.  Using an EKF, I would like to then use the SLAM data for the correction step.  My hope is that somewhere between the two of these I can get a reasonable position to fly (and map with).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where I am having some trouble is figuring out how to use the sensors to estimate some kind of position.  My thinking is I will take that into my EKF for the estimation step.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Appreciate any insight into accomplishing this goal.  &lt;/p&gt;&#xA;" OwnerUserId="21423" LastActivityDate="2021-04-08T19:04:05.743" Title="Position Estimates from sensor fusion" Tags="&lt;slam&gt;&lt;kalman-filter&gt;&lt;sensor-fusion&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16575" PostTypeId="2" ParentId="16573" CreationDate="2018-10-21T13:30:39.380" Score="0" Body="&lt;p&gt;Usually SLAM needs some kind of a localization to build the map. I'm not clear what kind of a method you are using for SLAM. But for your question, you can estimate the position from your IMU measurements. Usually state vector for a quadcopter contains x,y,z position data and roll,pitch and yaw. Inserting angular rates or linear velocities is optional. I assume you have a basic knowledge on EKF. You can calculate the state transition matrix using your state matrix. Accelerations can be inserted to the control input matrix. &lt;/p&gt;&#xA;" OwnerUserId="21353" LastActivityDate="2018-10-21T13:30:39.380" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16579" PostTypeId="2" ParentId="1654" CreationDate="2018-10-22T13:12:04.260" Score="0" Body="&lt;p&gt;A machine is just a device which is defined to do a particular task whereas a robot can execute any task given to it through programming&lt;/p&gt;&#xA;" OwnerUserId="21438" LastActivityDate="2018-10-22T13:12:04.260" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16580" PostTypeId="1" CreationDate="2018-10-22T13:30:49.770" Score="1" ViewCount="81" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Xd3oo.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Xd3oo.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's the link to the entire answer:&#xA;&lt;a href=&quot;https://robotics.stackexchange.com/questions/8331/designing-a-5-bar-linkage-robot-plot-clock#new-answer?newreg=4e3f2aebee0f4a34afb134821670e8a5&quot;&gt;Designing a 5 bar linkage robot: Plot Clock&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="21439" LastEditorUserId="21439" LastEditDate="2018-10-22T14:04:01.837" LastActivityDate="2018-10-22T15:17:02.680" Title="Can somebody explain how these forward kinematics matrix equations were formulaed?" Tags="&lt;mobile-robot&gt;&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;mechanism&gt;&lt;movement&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16582" PostTypeId="2" ParentId="16580" CreationDate="2018-10-22T15:17:02.680" Score="2" Body="&lt;p&gt;It looks (to me) like there's a typo in that answer. The approach is to recognize that you have to wind up at the same point, whether you get there via the left arm (d-&gt;e-&gt;blue dot) or the right arm (a-&gt;b-&gt;c-&gt;blue dot). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This means that you can go:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\Sigma_{x_{\mbox{left arm}}} = \Sigma_{x_{\mbox{right arm}}} \\&#xA;\Sigma_{y_{\mbox{left arm}}} = \Sigma_{y_{\mbox{right arm}}} \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &quot;middle linkage&quot; &lt;span class=&quot;math-container&quot;&gt;$a$&lt;/span&gt; is horizontal and there's no angle given for it, but if we suppose the angle of &lt;span class=&quot;math-container&quot;&gt;$a$&lt;/span&gt; is &lt;span class=&quot;math-container&quot;&gt;$\theta_0$&lt;/span&gt;, and that &lt;span class=&quot;math-container&quot;&gt;$\theta_0 = 0$&lt;/span&gt;, then you can do:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\Sigma_{x_{\mbox{left arm}}} = d\cos{\theta_1} + e\cos{\alpha}\\&#xA;\Sigma_{x_{\mbox{right arm}}} = a\cos{\theta_0} - b\cos{\theta_2} -c\cos{\beta}\\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'll point out that the minus signs in there are because of the angle definitions - &lt;span class=&quot;math-container&quot;&gt;$\theta_1$&lt;/span&gt; is defined &quot;conventionally,&quot; starting at 0=right and getting positive counter-clockwise, where &lt;span class=&quot;math-container&quot;&gt;$\theta_2$&lt;/span&gt; is defined opposite - starting at 0=left and getting positive clockwise. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can define the points for vertical closures:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\Sigma_{y_{\mbox{left arm}}} = d\sin{\theta_1} + e\sin{\alpha}\\&#xA;\Sigma_{y_{\mbox{right arm}}} = a\sin{\theta_0} + b\sin{\theta_2} + c\sin{\beta}\\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since we're assuming &lt;span class=&quot;math-container&quot;&gt;$\theta_0 = 0$&lt;/span&gt;, you can simplify &lt;span class=&quot;math-container&quot;&gt;$a\cos{\theta_0} = a$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$a\sin{\theta_0} = 0$&lt;/span&gt;, you you're left with:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\left[\begin{array}{ccc}&#xA;d\cos{\theta_1} + e\cos{\alpha} \\&#xA;d\sin{\theta_1} + e\sin{\alpha} \\&#xA;\end{array}\right] = \left[\begin{array}{ccc}&#xA;a - b\cos{\theta_2} -c\cos{\beta} \\&#xA;b\sin{\theta_2} + c\sin{\beta} \\&#xA;\end{array}\right]&#xA;$$&lt;/span&gt; &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-10-22T15:17:02.680" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16583" PostTypeId="1" CreationDate="2018-10-22T15:31:46.530" Score="2" ViewCount="42" Body="&lt;p&gt;I'm trying to create a trajectory between two given poses for an Ackerman drive.&#xA;The poses are defined as follows:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Current Pose&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;position &lt;span class=&quot;math-container&quot;&gt;$(x_0, y_0)$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;li&gt;rotation on z-axis &lt;span class=&quot;math-container&quot;&gt;$\theta_0$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Final Pose&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;position &lt;span class=&quot;math-container&quot;&gt;$(x_f, y_f)$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;li&gt;rotation on z-axis &lt;span class=&quot;math-container&quot;&gt;$\theta_f$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The trajectory has to be 2 times differentiable with minimum curvature and needs a smooth transition to it's predecessor trajectory &lt;em&gt;(the steering change between two trajectories can't be instant)&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I always stumble upon parts of the solution but am struggling to put everything together. Some people suggest using bezier curves or &lt;a href=&quot;http://www.frc.ri.cmu.edu/~alonzo/pubs/papers/fsr2001.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;cubic polynomials&lt;/a&gt; but I couldn't find a concrete example &lt;em&gt;(something like: given current pose &lt;span class=&quot;math-container&quot;&gt;$[(0,0),0]$&lt;/span&gt; and final pose &lt;span class=&quot;math-container&quot;&gt;$[(1,1),\frac{\pi}{2}]$&lt;/span&gt; you can calculate the trajectory like this ...)&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my questions are:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Is &lt;a href=&quot;http://www.frc.ri.cmu.edu/~alonzo/pubs/papers/fsr2001.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;that paper&lt;/a&gt; actually solving my problem?&lt;/li&gt;&#xA;&lt;li&gt;Are there any useful tutorials/implementations/examples out there that are a bit more explanatory?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="11419" LastActivityDate="2018-10-22T15:31:46.530" Title="Create path with minimum curvature for Ackerman drive" Tags="&lt;mobile-robot&gt;&lt;wheeled-robot&gt;&lt;inverse-kinematics&gt;&lt;path-planning&gt;" AnswerCount="0" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16589" PostTypeId="2" ParentId="16485" CreationDate="2018-10-24T01:51:48.857" Score="0" Body="&lt;p&gt;I'm using a different controller but here is what I send for a forward command to drive straight&lt;/p&gt;&#xA;&#xA;&lt;p&gt;137,0,150,127,255&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/irLRp.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/irLRp.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19572" LastActivityDate="2018-10-24T01:51:48.857" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16590" PostTypeId="1" CreationDate="2018-10-24T04:30:50.857" Score="2" ViewCount="29" Body="&lt;p&gt;I'm having some trouble getting fiducials (using &lt;a href=&quot;http://wiki.ros.org/aruco_detect&quot; rel=&quot;nofollow noreferrer&quot;&gt;aruco_detect&lt;/a&gt;) to work alongside &lt;a href=&quot;http://wiki.ros.org/amcl&quot; rel=&quot;nofollow noreferrer&quot;&gt;amcl&lt;/a&gt;. The goal here is to use normal amcl localization when a fiducial is not present, and to switch to localization using fiducials when the camera sees a fiducial. After having a lot of trouble trying to use &lt;a href=&quot;http://wiki.ros.org/fiducial_slam&quot; rel=&quot;nofollow noreferrer&quot;&gt;fiducial_slam&lt;/a&gt; for this, I decided to create my own node that subscribes to &lt;a href=&quot;http://docs.ros.org/kinetic/api/fiducial_msgs/html/msg/FiducialTransformArray.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;/fiducial_transforms&lt;/a&gt; (published by aruco_detect) and publishes to &lt;a href=&quot;http://docs.ros.org/api/geometry_msgs/html/msg/PoseWithCovarianceStamped.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;/initialpose&lt;/a&gt; (subscribed to by amcl).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While the subscribing and publishing works well with both aruco and amcl, I have been running into problems with the trigonometry involved in obtaining the robot's position and orientation. Since the robots position is relative to a 2D map (already created), I converted the rotation quaternions into euler angles and only considered the yaw value (using &lt;a href=&quot;http://docs.ros.org/jade/api/tf/html/python/transformations.html#tf.transformations.euler_from_quaternion&quot; rel=&quot;nofollow noreferrer&quot;&gt;tf.transformations.euler_from_quaternion&lt;/a&gt;). To reconstruct the quaternion for publishing, I use &lt;a href=&quot;http://docs.ros.org/jade/api/tf/html/python/transformations.html#tf.transformations.quaternion_from_euler&quot; rel=&quot;nofollow noreferrer&quot;&gt;tf.transformations.quaternion_from_euler&lt;/a&gt;, passing in (0, 0, new_yaw). After playing around with my calculation of new_yaw (including passing in -new_yaw, pi-new_yaw, pi/2-new_yaw, etc.), I was unable to un-invert the robot's rotation (a rotation of 30 degrees of the robot always corresponds to a rotation of negative 30 degrees in the quaternion).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My current assessment of the problem is that there is some disconnect between the axes of the 2D map and the response from aruco_detect, which for some reason may cause the rotation to always happen in a certain direction (though this does not explain why publishing the quaternions for (0, 0, new_yaw) and (0, 0, -new_yaw) have the same outcome, so I am still unsure). In addition, even though we are assuming for now that the fiducial is at the origin (facing in the quaternion direction (0, 0, 1, 0)), we would like to incorporate known values for the fiducial's position and rotation to obtain the robot's true pose.&lt;/p&gt;&#xA;" OwnerUserId="21460" LastActivityDate="2018-10-24T04:30:50.857" Title="Fiducials in conjuction with AMCL" Tags="&lt;ros&gt;&lt;slam&gt;&lt;localization&gt;&lt;mapping&gt;&lt;rviz&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16591" PostTypeId="1" CreationDate="2018-10-24T05:02:35.047" Score="1" ViewCount="183" Body="&lt;p&gt;So I am making a robot which is to follow a line. The field has both +(junctions) as well(by the intersection of two lights). I am yet to figure out what exactly is the best way to track the number of junctions. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The following is the code I have thought out. However, if there is a better way I would highly appreciate any suggestions. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    while (true){&#xA;    cout &amp;lt;&amp;lt; rlink.request(READ_PORT_4)&amp;lt;&amp;lt;endl;&#xA;    go_straight();&#xA;    int sensor_counter=0;&#xA;    while(sensor_counter&amp;lt;=2){&#xA;        if (sensor_values==111){&#xA;            while(sensor_values!=0){&#xA;                go_straight_before_junction();&#xA;            } &#xA;            if (sensor_values==0){&#xA;                sensor_counter=sensor_counter+1;&#xA;            }&#xA;&#xA;        ;}&#xA;&#xA;&#xA;    ;}&#xA;    while(sensor_values!=3){&#xA;        turn_left_corner();&#xA;    }&#xA;    if (sensor_values==3){&#xA;        direction-=90;&#xA;    }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;sensor_values=5 -robot Too left to the line &lt;/p&gt;&#xA;&#xA;&lt;p&gt;sensor_values=4 -robot Slightly left to the line  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;sensor_values=3 - exactly on the line&lt;/p&gt;&#xA;&#xA;&lt;p&gt;sensor_values=2 -robot slightly right of the line &lt;/p&gt;&#xA;&#xA;&lt;p&gt;sensor_values=1 -robot Too right of the line &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sensor_values=0 or 111 - robot crossed junction (0 is for the sensor at the back off the centre line and 111 is for the 3 sensors at the front. )&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm using a light sensor and it reads 1 when in front of a white line and 0 when in front of a black line(rather like white tapes on a black floor&#xA;). &lt;/p&gt;&#xA;" OwnerUserId="21463" LastEditorUserId="21463" LastEditDate="2018-10-24T07:52:47.030" LastActivityDate="2018-10-24T07:52:47.030" Title="Detecting and counting the number of junctions" Tags="&lt;sensors&gt;&lt;wheeled-robot&gt;&lt;c++&gt;&lt;line-following&gt;" AnswerCount="0" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16592" PostTypeId="1" CreationDate="2018-10-24T18:27:33.107" Score="-3" ViewCount="53" Body="&lt;p&gt;I am attempting to design a 3 prong robotic claw for a robotic arm I am working on. I am planning to use sg90 servo motors, but I can't get my current design to work. My current layout is to use one servo motor on a pulley system. The servo motor rotates, which pulls fishing line connected to the end of the claw arms. This is supposed to pull the claws inward(as it does in theory), but the servo motor isn't strong enough to close it fully, and I don't have enough space in the head of claw to fit a larger servo motor inside of it. Is there a different gear system I could use to operate the arms?&lt;/p&gt;&#xA;" OwnerUserId="21469" LastActivityDate="2018-11-02T14:35:13.367" Title="3 arm robotic claw" Tags="&lt;arduino&gt;&lt;robotic-arm&gt;&lt;servomotor&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16593" PostTypeId="2" ParentId="16485" CreationDate="2018-10-24T19:11:53.500" Score="0" Body="&lt;p&gt;Try aleternating 32768 between 32767, it worked for me. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Measure the time or distance of how long it stays straight using only 1 opcode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Loop through the 2 different codes letting each opcode run less time or distance than it takes for it to start curving. &lt;/p&gt;&#xA;" OwnerUserId="20597" LastActivityDate="2018-10-24T19:11:53.500" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16595" PostTypeId="1" CreationDate="2018-10-24T23:24:11.117" Score="1" ViewCount="73" Body="&lt;p&gt;Also, what is the difference between the above gear drive vs other gear drives?&lt;/p&gt;&#xA;" OwnerUserId="21413" LastActivityDate="2020-03-07T01:01:20.143" Title="Why are strain-wave/harmonic gears used in robots?" Tags="&lt;control&gt;&lt;gearing&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16596" PostTypeId="1" AcceptedAnswerId="16597" CreationDate="2018-10-25T18:21:55.590" Score="5" ViewCount="6067" Body="&lt;p&gt;I'm relatively new to the area. I run into several time the term &lt;strong&gt;``rollout''&lt;/strong&gt; in training neural networks. I have been searching for a while but still not sure what it means.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, the number of rollout for running the hopper environment. I'm not sure what it means.&lt;/p&gt;&#xA;" OwnerUserId="18385" LastEditorUserId="37" LastEditDate="2019-05-24T14:20:46.777" LastActivityDate="2019-05-24T14:25:20.287" Title="What is the definition of `rollout' in neural network or OpenAI gym" Tags="&lt;reinforcement-learning&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16597" PostTypeId="2" ParentId="16596" CreationDate="2018-10-26T04:16:41.397" Score="4" Body="&lt;p&gt;The standard use of “rollout” (also called a “playout”) is in regard to an execution of a policy from the current state when there is some uncertainty about the next state or outcome - it is one simulation from your current state. The purpose is for an agent to evaluate many possible next actions in order to find an action that will maximize value (long-term expected reward). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Uncertainty in the next state can arise from different sources depending on your domain. In games the uncertainty is typically from your opponent (you are not certain what move they will make next) or a chance element (e.g. a dice roll). In robotics, you may be modeling uncertainty in your environment (e.g. your perception system gives inaccurate pose estimates, so you are not sure an object is where you think it is) or your robot (e.g. noisy sensors result in unreliable transition dynamics). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think the term comes from &lt;a href=&quot;http://papers.nips.cc/paper/1302-on-line-policy-improvement-using-monte-carlo-search.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Tesauro and Galperin NIPS 1997&lt;/a&gt; in which they consider Monte Carlo simulations of Backgammon where a playout considers a sequence of dice rolls:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In backgammon parlance, the expected value of a position is known as&#xA;  the &quot;equity&quot; of the position, and estimating the equity by Monte-Carlo&#xA;  sampling is known as performing a &quot;rollout.&quot; This involves playing the&#xA;  position out to completion many times with different random dice&#xA;  sequences, using a fixed policy P to make move decisions for both&#xA;  sides.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As you could imagine, this can be quite computationally expensive. A lot of tricks have been developed to make this faster/more efficient. For example, &lt;a href=&quot;https://medium.com/@jonathan_hui/alphago-how-it-works-technically-26ddcc085319&quot; rel=&quot;nofollow noreferrer&quot;&gt;AlphaGo&lt;/a&gt; uses a simpler classifier for rollouts than in the supervised learning layers. This results in rollout policies that are considerably less accurate than supervised learning policies, but, they are also considerably faster, so you can very quickly generate a ton of game simulations to evaluate a move.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://mitpress.mit.edu/books/reinforcement-learning-second-edition&quot; rel=&quot;nofollow noreferrer&quot;&gt;Second Edition&lt;/a&gt; of Sutton and Barto’s famous textbook on reinforcement learning has a full section just about rollout algorithms (8.10), and also more information on Monte Carlo sampling and Monte Carlo Tree Search (which has a strong simulation component). You can find a draft version &lt;a href=&quot;http://incompleteideas.net/book/bookdraft2017nov5.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="16539" LastActivityDate="2018-10-26T04:16:41.397" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="16598" PostTypeId="1" AcceptedAnswerId="16601" CreationDate="2018-10-26T09:49:08.657" Score="3" ViewCount="220" Body="&lt;p&gt;I have a 7 DOF robotic Arm. All the 7 Joints are rotational and have upper and lower joint angle limits. Now assume my end effector has a certain Pose &lt;span class=&quot;math-container&quot;&gt;$x = [X, Y, Z, a, b, c]$&lt;/span&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My Question now is how to calculate the maximal reachable &lt;span class=&quot;math-container&quot;&gt;$X$&lt;/span&gt; Position if all other Parameters &lt;span class=&quot;math-container&quot;&gt;$(Y, Z, a, b)$&lt;/span&gt; remain the same assuming certain &lt;span class=&quot;math-container&quot;&gt;$q_{lower}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$q_{upper}$&lt;/span&gt; joint limits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know how to do that for differential kinematics: &lt;span class=&quot;math-container&quot;&gt;$dx_{max} = J * dq_{max}$&lt;/span&gt; (&lt;span class=&quot;math-container&quot;&gt;$J$&lt;/span&gt; is Jacobian Matrix and &lt;span class=&quot;math-container&quot;&gt;$dq_{max}$&lt;/span&gt; is the max. angle velocity of the joints).&lt;/p&gt;&#xA;" OwnerUserId="21483" LastEditorUserId="18352" LastEditDate="2018-10-29T14:58:14.327" LastActivityDate="2018-10-29T14:58:14.327" Title="Reachable Position with endeffector robotic arm" Tags="&lt;inverse-kinematics&gt;&lt;dynamics&gt;&lt;singularity&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16599" PostTypeId="1" CreationDate="2018-10-26T13:44:22.780" Score="0" ViewCount="48" Body="&lt;p&gt;I am using typical setup with camera and IMU as found on a smartphone. Using this, I would like to estimate the relative pose between the camera and an object (for simplicity, let's say a cube). The series of measurements contain motion around the object, so a monocular visual-inertial dataset.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, related to this usecase I have two questions:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Which state-of-the-art algorithms would commonly be used to solve such a problem?&lt;/li&gt;&#xA;&lt;li&gt;What's a realistic accuracy that could be achieved? (just a rule-of-thumb)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="21331" LastActivityDate="2021-04-16T11:57:35.753" Title="Which algorithms to locate a static 3D object relative to a moving camera/IMU?" Tags="&lt;imu&gt;&lt;cameras&gt;&lt;visual-odometry&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16601" PostTypeId="2" ParentId="16598" CreationDate="2018-10-27T06:47:53.613" Score="1" Body="&lt;p&gt;One possible way to use the inverse kinematics equations. For obtaining the inverse kinematics equations you can either use the Jacobian matrix or the geometric approach. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a robotic arm that has 3 DOF using the geometric approach is easier. But since your robot has 7 DOF, you should use the Jacobian Matrix. Please refer to the link below.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/521/computing-the-jacobian-matrix-for-inverse-kinematics?rq=1&quot;&gt;Computing the Jacobian matrix for Inverse Kinematics&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you have the inverse kinematics equations, keep the &lt;span class=&quot;math-container&quot;&gt;$(Y,Z,a,b)$&lt;/span&gt; parameters constant and vary the &lt;span class=&quot;math-container&quot;&gt;$X$&lt;/span&gt;. When you exceed the maximum reachable &lt;span class=&quot;math-container&quot;&gt;$X$&lt;/span&gt;, the result of the inverse kinematics equation will become a complex number in the form of &lt;span class=&quot;math-container&quot;&gt;$a\pm jb$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another way would be a more visual method. You can simulate the robot arm and mark the end effector positions as you vary the joint angles. The unreachable points will not appear in the generated plot. For example see the following 2 DOF (R-R) robot arm:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/tdwNB.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tdwNB.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously the smaller step size will give you higher accuracy. See the following 3 DOF (R-R-P) robot arm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2TB0C.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2TB0C.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18352" LastEditorUserId="18352" LastEditDate="2018-10-27T06:57:55.040" LastActivityDate="2018-10-27T06:57:55.040" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16603" PostTypeId="1" CreationDate="2018-10-27T09:07:24.633" Score="0" ViewCount="386" Body="&lt;p&gt;I've just started robotics and ROS and I wondering if I can control a DIY Robot Arm Kit Educational Robotic Claw Set (I think its motherboard is arduino).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can find the &lt;a href=&quot;https://www.gearbest.com/novelty-toys/pp_009702220649.html?wid=1433363&quot; rel=&quot;nofollow noreferrer&quot;&gt;kit here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can I use ROS to control such kind of kits?&lt;/p&gt;&#xA;" OwnerUserId="18173" LastEditorUserId="20709" LastEditDate="2018-11-01T15:20:55.563" LastActivityDate="2018-11-01T15:20:55.563" Title="Control a DIY Robot Arm Kit Educational Robotic Claw Set with ROS" Tags="&lt;arduino&gt;&lt;ros&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16604" PostTypeId="1" AcceptedAnswerId="16631" CreationDate="2018-10-27T11:25:58.890" Score="15" ViewCount="12215" Body="&lt;p&gt;When using ROS:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why should I use &lt;code&gt;catkin build&lt;/code&gt; from catkin_tools instead of &lt;code&gt;catkin_make&lt;/code&gt;? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've been told that &lt;code&gt;catkin build&lt;/code&gt; is better but no one who tells me this can give me a reason why.&lt;/p&gt;&#xA;" OwnerUserId="16730" LastEditorUserId="16508" LastEditDate="2019-08-29T10:45:11.693" LastActivityDate="2021-05-25T13:54:30.910" Title="ROS: catkin_make vs. catkin build" Tags="&lt;ros&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="16606" PostTypeId="1" AcceptedAnswerId="16607" CreationDate="2018-10-27T20:07:38.530" Score="0" ViewCount="35" Body="&lt;p&gt;I can't figure out what solenoid I would use. Everything I search for comes up with cylinders. Not sure if it's even a sulinoid that I need.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd like to have 8 hoses connected to a compressor. I'd like to control which hose releases air to push something off a conveyor belt. Like the image below. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/rYE3W.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Szx8X.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="21489" LastEditorUserId="21489" LastEditDate="2018-10-28T00:53:40.730" LastActivityDate="2018-10-28T00:53:40.730" Title="Pnumatic sulinoid with multiple outputs" Tags="&lt;mechanism&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16607" PostTypeId="2" ParentId="16606" CreationDate="2018-10-28T00:19:20.670" Score="0" Body="&lt;p&gt;You are searching for the wrong thing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a solenoid&lt;br&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/lac2Q.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/lac2Q.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is what you want, a solenoid operated valve.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/FNwLE.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FNwLE.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19143" LastActivityDate="2018-10-28T00:19:20.670" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16613" PostTypeId="2" ParentId="16549" CreationDate="2018-10-28T16:54:26.577" Score="0" Body="&lt;p&gt;Hmm. Have you check the indices used in your code? Simple bugs like swapping i and j happen all the time for rows/columns. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Perhaps its a Hardware issue involving Little Endian vs BIG ENDIAN. in 8 bit 64=64 but 16 BIT 64 is swapped to highorder thus theres rotation in bit order results that the single bit 64 is represents as 256*64 the 256 comes from 2^8&lt;/p&gt;&#xA;" OwnerUserId="21494" LastActivityDate="2018-10-28T16:54:26.577" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16614" PostTypeId="1" AcceptedAnswerId="16630" CreationDate="2018-10-28T17:20:23.153" Score="1" ViewCount="581" Body="&lt;p&gt;I'm trying to implement an inverse kinematics solver, but this time even with the end effector's orientation. I succeeded with the case when the end effector only requires the position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I learned that in this case, you can construct the Jacobian Matrix like this, where &lt;span class=&quot;math-container&quot;&gt;$w_i$&lt;/span&gt; is the &lt;span class=&quot;math-container&quot;&gt;$i^{th}$&lt;/span&gt; rotation axis in global space and &lt;span class=&quot;math-container&quot;&gt;$p_i$&lt;/span&gt; is the vector from the &lt;span class=&quot;math-container&quot;&gt;$i^{th}$&lt;/span&gt; axis to the target position.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/ga6cY.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ga6cY.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is when I have to calculate the &lt;span class=&quot;math-container&quot;&gt;$\dot{x}$&lt;/span&gt; here in the equation below.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;J \dot \theta = \dot x&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When &lt;span class=&quot;math-container&quot;&gt;$\dot{x}$&lt;/span&gt; had only positions to take into account, and no orientations this was quite simple, since the &lt;span class=&quot;math-container&quot;&gt;$\dot{x}$&lt;/span&gt; vector was calculated as &lt;code&gt;(target_location - current_end_effector_location) * (delta_time = 0.01)&lt;/code&gt;.&#xA;But now when &lt;span class=&quot;math-container&quot;&gt;$\dot{x}$&lt;/span&gt; requires 6 entries (position, orientation), I don't know what I should do for the orientation part. I've been using euler angles for representing orientation in my program until now. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The idea I've got at the moment is just subtracting current end effector's yaw, pitch, and roll with the target's yaw, pitch, and roll, and multiplying each result with &lt;span class=&quot;math-container&quot;&gt;$\Delta t$&lt;/span&gt;. But this seems a bit complicated and not right. Are there any better ways to address this issue? Any ideas would be highly appreciated!&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;In case it helps, the forward kinematic map looks like this (T stands for the translation matrix relative to parent node)&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;(x,y,z) = Root_T * Shoulder_T * Shoulder_Rx(q_0) * Shoulder_Ry(q_1) * &#xA;    Shoulder_Rz(q_2) * Elbow_T * Elbow_Rx(q_3) * Hand_T * Hand_Rx(q_4) * Position&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="21492" LastEditorUserId="10748" LastEditDate="2018-10-30T15:23:54.030" LastActivityDate="2018-10-31T04:41:17.803" Title="Inverse kinematics with end effector orientation?" Tags="&lt;inverse-kinematics&gt;&lt;jacobian&gt;&lt;orientation&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16616" PostTypeId="1" CreationDate="2018-10-28T23:35:55.257" Score="-2" ViewCount="89" Body="&lt;p&gt;I have built an Arduino DUE based quadcopter and I am using HC-12 as a transmitter and receiver between my laptop and the quadcopter. What am I doing is just send a speed value from my laptop and apply that value to all the quadcopter motors wirelessly.&#xA;The problem is my quadcopter is flipping while trying to go up. Watch this video &lt;a href=&quot;https://www.dropbox.com/s/44475ig23nxshg8/Video%202018-10-28%20at%207.14.52%20PM.mp4?dl=0&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; to get an idea of what I mean. I had tried to make the quadcopter balanced and I got the same problem. By the way, I tried to change the motors and tried many ways to balance it and to make the center of gravity in the center of the quadcopter but I faced the same problem of flipping. &#xA;I need to make the quadcopter go up normally without control and flipping just by giving the value of the motors speed from the laptop without RC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt;: Now I rebuilt it and recalibrated the ESCs after that, I got this &lt;a href=&quot;https://www.dropbox.com/s/wort2r2zb8t3eu1/VID.mp4?dl=0&quot; rel=&quot;nofollow noreferrer&quot;&gt;result&lt;/a&gt;. My quadcopter seems to be hovering from 3 sides and the last one can't hover for the same speed. I tried to increase the speed of that motor and change the motor but I got no difference.&lt;/p&gt;&#xA;" OwnerUserId="21500" LastEditorUserId="14673" LastEditDate="2018-10-30T12:39:37.383" LastActivityDate="2018-10-30T12:39:37.383" Title="Arduino based quadcopter flipping problem" Tags="&lt;quadcopter&gt;" AnswerCount="1" CommentCount="8" ClosedDate="2018-10-30T16:48:47.223" ContentLicense="CC BY-SA 4.0" />
  <row Id="16617" PostTypeId="2" ParentId="16599" CreationDate="2018-10-29T06:21:56.520" Score="0" Body="&lt;ol&gt;&#xA;&lt;li&gt;You need a SLAM to track the object location.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;There are some available resources on visual-inertial SLAM. To name some of them, okvis, svo2, orb-slam2 and so on.&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;If you hire a good slam, error will be less than 10cm.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2018-10-29T06:21:56.520" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16618" PostTypeId="2" ParentId="16616" CreationDate="2018-10-29T08:27:56.900" Score="1" Body="&lt;p&gt;Quadrocopter is nowhere near to normal RC airplane, where balancing can help a lot with stability. You'll need to utilize &lt;em&gt;at least&lt;/em&gt; &lt;a href=&quot;https://en.wikipedia.org/wiki/PID_controller&quot; rel=&quot;nofollow noreferrer&quot;&gt;PID controller&lt;/a&gt; to keep your multirotor steady.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I guess you don't have much experience with quadrotors whatsoever, therefore I'd suggest you to use an integrated flight controller, i.e. &lt;a href=&quot;https://hobbyking.com/en_us/rjx-sp-racing-f3-flight-controller-acro.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this one&lt;/a&gt;. Mind that, when building such device, you will surely need much more knowledge and experience in electronics and software engineering to get satisfying flight results.&lt;/p&gt;&#xA;" OwnerUserId="14673" LastActivityDate="2018-10-29T08:27:56.900" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="16620" PostTypeId="2" ParentId="654" CreationDate="2018-10-29T09:54:15.653" Score="0" Body="&lt;p&gt;You can forcefully disable IR light for Kinect for Windows (by using the property &lt;code&gt;ForceInfraredEmitterOff&lt;/code&gt;) which you cannot do for xbox Kinect. This feature is very useful when using multiple Kinect sensors because when their FOVs overlap, some serious issues arise.&lt;/p&gt;&#xA;" OwnerUserId="21504" LastActivityDate="2018-10-29T09:54:15.653" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16623" PostTypeId="1" CreationDate="2018-10-29T14:05:14.870" Score="0" ViewCount="40" Body="&lt;p&gt;We are working in a project to help blind people cross the street alone .so ,Can I create a Virtual reality wall or a holographic 3d one that is visible in the Street and in all day times ?? ( morning ..)I mean is it doable ?and how ?? And if someone is expert in those things please tell me because I have some other question and big thanks in advance .&lt;/p&gt;&#xA;" OwnerUserId="21497" LastEditorUserId="21497" LastEditDate="2018-10-31T05:24:13.747" LastActivityDate="2018-10-31T05:24:13.747" Title="project to create a lighter wall" Tags="&lt;mobile-robot&gt;&lt;control&gt;&lt;motor&gt;&lt;sensors&gt;" AnswerCount="1" CommentCount="9" ClosedDate="2018-10-30T16:55:43.080" ContentLicense="CC BY-SA 4.0" />
  <row Id="16624" PostTypeId="1" CreationDate="2018-10-29T17:07:59.763" Score="1" ViewCount="27" Body="&lt;p&gt;Cleanflight reads my Naze32, but the RC values aren't responding at all. Everything is connected and double checked that the wires were connected properly and firmware was flashed. Just not getting any feedback from cleanflight for throttle/pitch/yaw. &lt;/p&gt;&#xA;" OwnerUserId="21506" LastActivityDate="2018-10-29T17:07:59.763" Title="Naze32 flight controller not connecting to RC" Tags="&lt;quadcopter&gt;&lt;flight-controller&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16626" PostTypeId="2" ParentId="16623" CreationDate="2018-10-29T17:24:58.903" Score="-1" Body="&lt;p&gt;I've seen your previous question about projecting lights on the street using lasers. Well I guess its possible if you are willing to use holographic image projectors. &#xA;And incase of virtual reality you can create identical environment of the real world and add walls where it's necessary, google 360 image has all the pictures of our surrounding, their technology is capable of producing identical virtual world for the (NIGHT ) blind people who cant see in low light. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And I have thought about moving objects , specially transports, cars, buses, etc. The augmented world you will create will have  gps that tracks cars, if not possible for all the car, the driver whose carrying or the passengers have cell phones which has GPS in it can notify the blind people about the moving object because the gps in always working.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's just a concept, you cant build a project with your own hands but if you are participating in any competition you use this concept by developing this core concept. I Hope it helps. Thanks IN ADVANCE ! and the answer is yes. Possible&lt;/p&gt;&#xA;" OwnerUserId="16209" LastActivityDate="2018-10-29T17:24:58.903" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16630" PostTypeId="2" ParentId="16614" CreationDate="2018-10-30T13:20:24.897" Score="1" Body="&lt;p&gt;The same as for positions, the angular components of &lt;span class=&quot;math-container&quot;&gt;$\dot x$&lt;/span&gt; are angular velocities. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Expressing them as motion difference over time is generally correct. The unit of measurment in this case needs to be rad/s. &lt;/li&gt;&#xA;&lt;li&gt;The other problem can come from the how the rotations are expressed. There are many conventions on how rotations can be expressed and &lt;a href=&quot;https://en.wikipedia.org/wiki/Euler_angles&quot; rel=&quot;nofollow noreferrer&quot;&gt;Euler angles&lt;/a&gt; are also ambigous (if not further specified).  However, from the formulation of &lt;span class=&quot;math-container&quot;&gt;$J$&lt;/span&gt; it seems that you should use angular velocities arount the fixed reference frames, so extrinsic Euler Angles. The rotation order should be x, y, and z as far as I can tell from the forward kinematic map you have posted.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2018-10-30T13:20:24.897" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16631" PostTypeId="2" ParentId="16604" CreationDate="2018-10-30T19:12:30.283" Score="15" Body="&lt;p&gt;The main difference is the isolated environment that you get with &lt;code&gt;catkin build&lt;/code&gt;. This makes the whole build configuration much more compartmentalized and robust to changes in the configuration (add/remove package, modify a cmake variable etc.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apart from that you also get much better and easily-readable colored cmdline output which makes the whole experience much more pleasant.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;@SteveO's link also gives a nice summary of the changes between the tools.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Adding to &lt;code&gt;catkin build&lt;/code&gt; you also get many other useful subcommands with &lt;code&gt;catkin&lt;/code&gt; including &lt;code&gt;catkin clean&lt;/code&gt; for cleaning the &lt;code&gt;build&lt;/code&gt;, &lt;code&gt;devel&lt;/code&gt; and &lt;code&gt;install&lt;/code&gt; spaces, as well as &lt;code&gt;catkin list&lt;/code&gt; , &lt;code&gt;catkin locate&lt;/code&gt;, &lt;code&gt;catkin profile&lt;/code&gt;&lt;/p&gt;&#xA;" OwnerUserId="10729" LastActivityDate="2018-10-30T19:12:30.283" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16633" PostTypeId="2" ParentId="16614" CreationDate="2018-10-31T04:41:17.803" Score="0" Body="&lt;p&gt;If the three wrist axes intersect at a common point, your problem can be simplified using &lt;em&gt;wrist partitioning.&lt;/em&gt;  With this method, you compute the inverse kinematics to the wrist center (also the intersection point of the three wrist axes).   These equations will not involve the wrist angles - they only require you to use the position vector.   Once you have that, you can solve for the inverse wrist angles using only the relative angles between the end effector frame and the forearm frame.   These equations will not have any terms that include the arm rotations.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2018-10-31T04:41:17.803" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16634" PostTypeId="1" CreationDate="2018-10-31T10:36:46.030" Score="0" ViewCount="32" Body="&lt;p&gt;I have &lt;a href=&quot;https://www.servocity.com/313-rpm-hd-premium-planetary-gear-motor&quot; rel=&quot;nofollow noreferrer&quot;&gt;this motor&lt;/a&gt;, from datasheet it works on the 6-12V range and has a no load current of 0.52A, and a stall current of 20A. I want to test the motor before buying an expensive motor driver. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have an L298N H bridge at home and a &lt;a href=&quot;https://www.mbed.com/en/&quot; rel=&quot;nofollow noreferrer&quot;&gt;mbed microcontroller&lt;/a&gt;. I am using the mbed to generate the PWM control signal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So far, I cannot get the motor to move. I have tried several PWM frequencies, from 50Hz to hundreds to 2kHz and higher.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With frequencies between 100-2kHz I get a buzz as I increase the PWM duty cycle but the motor doesn’t move.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The L298N has a max current of 2A per channel, so I was wondering that maybe it is not enough to start moving the motor. This motor is not high end quality but is very powerful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is: Can I expect a better performance if I change the motor driver to one with more current output?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit 1&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To clarify my problem I uploaded a video to YouTube &lt;a href=&quot;https://youtu.be/7ZT4wXyWSXA&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://youtu.be/7ZT4wXyWSXA&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I could not move the big motor so I moved to a smaller one. The yellow one in the video. &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;As I increase the PWM duty cycle the buzz increases but the motor does not move.&lt;/li&gt;&#xA;&lt;li&gt;At some point the motor starts to move but at a very high speed to be taken as the initial speed. &lt;/li&gt;&#xA;&lt;li&gt;If I decrease the PWM duty cycle the motor keeps moving. I think is because is has some inertia, so now it’s easy to move even at low speeds.&lt;/li&gt;&#xA;&lt;li&gt;At some point the motor stops.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;How can I make the motor move from beginning at low speeds?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can a different motor driver improve the PWM performance?&lt;/p&gt;&#xA;" OwnerUserId="11648" LastEditorUserId="11648" LastEditDate="2018-10-31T14:47:11.853" LastActivityDate="2018-10-31T20:11:13.460" Title="Will a change of motor driver improve motor performance?" Tags="&lt;mobile-robot&gt;&lt;control&gt;&lt;motor&gt;&lt;pwm&gt;&lt;dc&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16635" PostTypeId="2" ParentId="16634" CreationDate="2018-10-31T11:32:16.063" Score="2" Body="&lt;p&gt;If you want to test the motor, just apply a DC source to it directly rather than using the l298.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A 12V car battery is a source you likely have access to that can supply enough current so you can test the torque and speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding the pwm control, you need to have sensor feedback. Then you will be able to use a control algorithm to, in effect, sense when the voltage, as created by the pwm, has overcome motor inductance to generate enough current to create enough torque to break the static friction and then continuously adjust the pwm to accelerate and then maintain the velocity of the output to be what you want.&lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="184" LastEditDate="2018-10-31T20:11:13.460" LastActivityDate="2018-10-31T20:11:13.460" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16636" PostTypeId="2" ParentId="15057" CreationDate="2018-10-31T13:59:55.593" Score="1" Body="&lt;p&gt;Your question is a little bit fuzzy. You achieve different results with these two turning scenarios.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you keep one wheel stopped the the radius of the curve (turn) you make equals the robot width and your turning point is the stopped wheel, while when you move both the wheels with opposite &lt;strong&gt;but&lt;/strong&gt; same velocity (&lt;em&gt;rpm&lt;/em&gt;) then you achieve a maneuver with 0 radius, turning in place, and also the turning point is the center of the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the first case the curve you make is more smooth, while in the second is more &quot;aggressive&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the end what matters is what you want the robot to do, and the shape of the curve you want to follow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe this paper, &lt;a href=&quot;https://mediatum.ub.tum.de/doc/1289125/1289125.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Design of a Differential-Drive Wheeled Robot Controller withPulse-Width Modulation - Farshad Arvin, Khairulmizam Samsudin, and M. Ali Nasseri&lt;/a&gt;, could be of some help.&lt;/p&gt;&#xA;" OwnerUserId="15592" LastEditorUserId="9176" LastEditDate="2018-10-31T18:03:56.963" LastActivityDate="2018-10-31T18:03:56.963" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16637" PostTypeId="2" ParentId="16603" CreationDate="2018-10-31T22:32:41.083" Score="2" Body="&lt;p&gt;The answer is a resounding 'yes'. Check out this ROS package &lt;a href=&quot;https://wiki.ros.org/rosserial_arduino/Tutorials/Servo%20Controller&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'd have to get a little creative with your code to control all of your servos, but I think you're good to go. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Good luck!&lt;/p&gt;&#xA;" OwnerUserId="21543" LastActivityDate="2018-10-31T22:32:41.083" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16638" PostTypeId="1" CreationDate="2018-11-01T08:38:50.607" Score="0" ViewCount="117" Body="&lt;p&gt;I have a task to find position of 5 points on lynx robot. I need to write below function. This function takes theta values as input. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;function [ pos ] = lynx_fk( theta1, theta2, theta3, theta4, theta5 )&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have also given the kinematics chain to decode a(r), alpha and d values.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have already written a function which computes the dh matrix, which is as follows.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;function A = compute_dh_matrix(r, alpha, d, theta).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now i'm confused on how to find the positins of points?&#xA;My approach is: From the DH matrix i have to extract the values of translation vector(A[1,4], A[2,4] and A[3,4]).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Plese comment and correct my approach.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks for your time.&lt;/p&gt;&#xA;" OwnerUserId="21545" LastActivityDate="2018-11-01T11:20:46.500" Title="Forward kinematics: Findling the positions of points on lynx robot" Tags="&lt;forward-kinematics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16639" PostTypeId="2" ParentId="16638" CreationDate="2018-11-01T10:34:00.753" Score="1" Body="&lt;p&gt;it is hard to answer since you did not specify the 5 points you are looking for. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The DH Matrix is a transformation matrix between two coordinate systems. If you are looking for a point on a rigid body, you should identify the DH transformation chain leading to the coordinate system associated with that rigid body. I.e. if you are looking for the coordinates in world frame of the center of mass on linkage 3, you should identify the chain of transformation matrices from the world frame to linkage 3:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$A_{03}= A_{01} \times A_{12} \times A_{23}$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next you will need the vector pointing from the frame asociated with linkage 3 to the center of mass:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$ v_{CoM} =  [x_{CoM}, y_{CoM}, z_{CoM}]$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The coordinates of the center of mass in World frame will be:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\left[&#xA;\begin{array}{c @{{}={}} c c @{{}+{}} c c}&#xA; v_{CoM}^{world} \\&#xA; 1&#xA;\end{array} &#xA;\right]= A_{03} \times&#xA;\left[&#xA;\begin{array}{c @{{}={}} c c @{{}+{}} c c}&#xA; v_{CoM} \\&#xA; 1&#xA;\end{array} \right]&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;or expanded:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\left[&#xA;\begin{array}{c @{{}={}} c c @{{}+{}} c c}&#xA;x_{CoM}^{world} \\&#xA;y_{CoM}^{world} \\&#xA;z_{CoM}^{world} \\&#xA; 1&#xA;\end{array} &#xA;\right]= A_{03} \times&#xA;\left[&#xA;\begin{array}{c @{{}={}} c c @{{}+{}} c c}&#xA;x_{CoM} \\&#xA;y_{CoM} \\&#xA;z_{CoM} \\&#xA; 1&#xA;\end{array} \right]&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;iff &lt;span class=&quot;math-container&quot;&gt;$v_{CoM} = [0, 0 ,0]$&lt;/span&gt; you can take the elements of the last column of the transfromation matrix directly.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="18235" LastEditDate="2018-11-01T11:20:46.500" LastActivityDate="2018-11-01T11:20:46.500" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16640" PostTypeId="2" ParentId="16603" CreationDate="2018-11-01T12:48:05.450" Score="0" Body="&lt;p&gt;the answer for this kit is most likely yes, has it has standards servos and arduino board so the drivers already exit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ROS can be used with arduino board with the &lt;a href=&quot;https://wiki.ros.org/rosserial_arduino&quot; rel=&quot;nofollow noreferrer&quot;&gt;rosserial package&lt;/a&gt;, which contains a library for servos.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will need to update the code on your arduino accordingly to your need in order to be able to have control over ROS on a remote machine.&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2018-11-01T12:48:05.450" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16641" PostTypeId="2" ParentId="16592" CreationDate="2018-11-01T23:00:28.330" Score="0" Body="&lt;p&gt;You're probably going to need to use a different gear ratio to get the amount of torque you want. &#xA;You'll get more torque, but the hand won't be able to close as fast.&#xA;&lt;a href=&quot;https://en.wikipedia.org/wiki/Gear_train&quot; rel=&quot;nofollow noreferrer&quot;&gt;Learn more about gear ratios here.&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="21543" LastEditorUserId="21543" LastEditDate="2018-11-02T14:35:13.367" LastActivityDate="2018-11-02T14:35:13.367" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16643" PostTypeId="1" CreationDate="2018-11-02T06:42:00.003" Score="1" ViewCount="1111" Body="&lt;p&gt;Can anyone help me out with DH parameters and axis placement for below kinematic chain?&lt;a href=&quot;https://i.stack.imgur.com/k5fKN.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/k5fKN.png&quot; alt=&quot;below is the lynx robot kinematic chain&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/XauSe.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XauSe.png&quot; alt=&quot;solved dh parameters&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="21545" LastEditorUserId="9720" LastEditDate="2018-11-05T14:13:15.617" LastActivityDate="2018-11-05T14:13:15.617" Title="DH parameters for lynx robot" Tags="&lt;forward-kinematics&gt;&lt;dh-parameters&gt;" AnswerCount="0" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16644" PostTypeId="1" CreationDate="2018-11-02T09:27:14.123" Score="0" ViewCount="84" Body="&lt;p&gt;I am trying to identify a plant model for a motor position control using MATLAB System identification toolbox. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it is a speed control example the data set can be generated easily. In this a case it will be a set of pwm values and the corresponding speed values.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But what will be the input and output parameters for a motor position control? If I have a motor with an encoder and use different pwm values for generating data set, it will start to rotate continuously (or saturate if there is a mechanical stopper) after certain pwm values. Since my aim is to implement something similar to a hobby servo which has single rotation, this method is not useful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The closest solution I found so far is given below&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://in.mathworks.com/company/newsletters/articles/motor-control-with-arduino-a-case-study-in-data-driven-modeling-and-control-design.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://in.mathworks.com/company/newsletters/articles/motor-control-with-arduino-a-case-study-in-data-driven-modeling-and-control-design.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I don’t know how to modify this setup for a DC geared motor with encoder because it doesn’t have a mechanical stopper and motor will start to rotate continuously after certain PWM limits indata acquisition phase.&lt;/p&gt;&#xA;" OwnerUserId="20836" LastActivityDate="2018-11-02T13:05:44.343" Title="Data Driven Modelling for Motor Position Control" Tags="&lt;matlab&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16646" PostTypeId="2" ParentId="16644" CreationDate="2018-11-02T13:05:44.343" Score="1" Body="&lt;p&gt;System identification is used to model the &lt;em&gt;system&lt;/em&gt;. A hobby servo has a built-in position regulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the system you are using does not have a position regulator, then you can't expect the system identification to tell you how to make a position regulator, or how a position regulator works, or what inputs are needed to achieve a particular position. That's not what your system does. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It sounds like your system is a motor. Motors turn. You can use system identification to try to determine parameters of your motor like rotating inertia, response bandwidth/time constants, etc., but you're not going to get anything out of it relating to position or position regulation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can use the results of your &lt;em&gt;motor&lt;/em&gt; identification to build a better position regulator, or you can try to build a position regulator first and include that in your system when you perform the system identification, but again that's not what your system currently does. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-11-02T13:05:44.343" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16648" PostTypeId="1" AcceptedAnswerId="16664" CreationDate="2018-11-02T19:09:16.533" Score="1" ViewCount="71" Body="&lt;p&gt;We all know &lt;strong&gt;&lt;em&gt;Information Filter&lt;/em&gt;&lt;/strong&gt; is a dual representation of kalman filter. The main difference between information filter and kalman filter is the way the Gaussian belief is represented. In kalman filter Gaussian belief is represented by their moments where as in Information filter Gaussian belief is represented by canonical form. Canonical form is comprised with a information matrix(&lt;span class=&quot;math-container&quot;&gt;$\Omega$&lt;/span&gt;) and a information vector (&lt;span class=&quot;math-container&quot;&gt;$\xi)$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As we all know the name kalman filter name after Rudolf E. Kálmán, one of the primary developers of its theory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I want to know that from where the name information filter came?Why it is called information filter?what type of information attached with this filter? Is there any signification behind the nomenclature? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have the same question about information matrix and information vector. Is there any signification behind the nomenclature?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I already read &lt;strong&gt;&lt;em&gt;Probabilistic Robotics&lt;/em&gt;&lt;/strong&gt; by Sebestian Thrun. Chapter 3 Gaussian filter ,in the subsection 3.4 The information Filter. There are many equations and theories but that does not tell us about the nomenclature.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://docs.ufpr.br/~danielsantos/ProbabilisticRobotics.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Probabilistic Robotics&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="20610" LastActivityDate="2018-11-06T18:36:15.623" Title="Why information filter called information filter" Tags="&lt;mobile-robot&gt;&lt;localization&gt;&lt;kalman-filter&gt;&lt;filter&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16649" PostTypeId="2" ParentId="1180" CreationDate="2018-11-02T19:14:58.900" Score="1" Body="&lt;p&gt;The difference between kalman filter and information  filter arise in there Gaussian belief representation. In kalman filter Gaussian belief represented by their moments(mean and covariance). Information filters represent Gaussians in their canonical representation, which is comprised of an information&#xA;matrix and an information vector.   &lt;/p&gt;&#xA;" OwnerUserId="20610" LastActivityDate="2018-11-02T19:14:58.900" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16650" PostTypeId="1" AcceptedAnswerId="16654" CreationDate="2018-11-03T07:49:33.890" Score="1" ViewCount="38" Body="&lt;p&gt;In the paper &quot;&lt;a href=&quot;https://ieeexplore.ieee.org/document/1087723&quot; rel=&quot;nofollow noreferrer&quot;&gt;On Dynamic Models of Robot Force Control&lt;/a&gt;&quot;, which is written by Steven D. Eppinger and Warren P. Seering, there is a model 'rigid-body robot model'. The model is like below. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/JbbrV.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JbbrV.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the paper, the model is described as:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;We model the robot as a mass with a damper to&#xA;  ground. The mass &lt;span class=&quot;math-container&quot;&gt;$m$&lt;/span&gt;,. represents the effective moving mass&#xA;  of the arm. The viscous damper &lt;span class=&quot;math-container&quot;&gt;$b_r$&lt;/span&gt; is chosen to give the&#xA;  appropriate rigid body mode to the unattached robot. The&#xA;  sensor has stiffness &lt;span class=&quot;math-container&quot;&gt;$k_s$&lt;/span&gt; and damping &lt;span class=&quot;math-container&quot;&gt;$b_s$&lt;/span&gt;. The workpiece is&#xA;  shown as a &quot;ground state&quot;. The robot actuator is&#xA;  represented by the input force &lt;span class=&quot;math-container&quot;&gt;$F$&lt;/span&gt; and the state variable &lt;span class=&quot;math-container&quot;&gt;$x_r$&lt;/span&gt;,&#xA;  measures the position of the robot mass.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In the paper, the contact force, which is the force across the sensor, is &lt;span class=&quot;math-container&quot;&gt;$F_c=k_s x_r$&lt;/span&gt;. But because the damping source from &lt;span class=&quot;math-container&quot;&gt;$b_s$&lt;/span&gt; is also the part of the sensor, I think the contact force is &lt;span class=&quot;math-container&quot;&gt;$F_c =k_s x_r + b_s \dot{x}_r$&lt;/span&gt;. However because this paper and model are cited by many studies, I think I'm wrong. So, why &lt;span class=&quot;math-container&quot;&gt;$F_c=k_s x_r$&lt;/span&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS : I wrote &lt;span class=&quot;math-container&quot;&gt;$f_s = k_s x_r$&lt;/span&gt; previously. I modified that to &lt;span class=&quot;math-container&quot;&gt;$F_c = k_s x_r$&lt;/span&gt;.&lt;/p&gt;&#xA;" OwnerUserId="21562" LastEditorUserId="21562" LastEditDate="2018-11-04T10:18:26.863" LastActivityDate="2018-11-05T00:25:08.000" Title="Why is the contact force of the rigid-body robot model ks*xr?" Tags="&lt;force-sensor&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16651" PostTypeId="2" ParentId="16650" CreationDate="2018-11-03T12:05:33.290" Score="0" Body="&lt;p&gt;This paper is a thought experiment, using simplified models and mathematical analysis to try to gain some insight into the observed instabilities in real systems. As such they make simplifications as needed to fit the thought experiment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't see any clear explanation for why they are not including the sensor damping force. Since this is a dynamic analysis I don't think it is an assumption of zero velocity. Rather, I think it reflects the simpleness of the model and the type of real-world sensors they were using in their other work. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The main thing to take away from this paper is to note that in the end they had no new ideas and no interesting results. The best use for this type of paper is to think about the problem they were trying to solve (induced instability during contact) and think about how you would approach it differently. Do you get better insight if you you use a more complex sensor model? Or is pole-zero analysis of a phenomena caused by abbe error, latency, and overly simplistic plant models not a great approach?&lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="184" LastEditDate="2018-11-05T00:25:08.000" LastActivityDate="2018-11-05T00:25:08.000" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16653" PostTypeId="1" CreationDate="2018-11-03T18:12:55.450" Score="-1" ViewCount="139" Body="&lt;p&gt;I am undertaking a project using two Hitec D845WP servos running at 8.4&amp;nbsp;V. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hitec's website lists idle current of 30&amp;nbsp;mA, no load operating of 1600&amp;nbsp;mA, stall current of 10&amp;nbsp;A and motor type as &quot;5 Poles Cored Metal Brush&quot;. I believe that I can use a Cytron 10A 5-30V Dual Channel DC Motor Driver (RB-Cyt-153). &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Can anyone please clarify the difference between a &quot;DC Motor Driver&quot;, a &quot;Brushed DC Motor Controller&quot; and a &quot;RC Servo Motor Controller&quot;? &lt;/li&gt;&#xA;&lt;li&gt;Are there other components necessary in my circuit if I opt for a &quot;Driver&quot; compared to a &quot;Controller&quot; and, if so, what are they please?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="21564" LastEditorUserId="18235" LastEditDate="2018-11-08T12:50:04.547" LastActivityDate="2018-11-09T15:51:48.947" Title="Motor controller for two Hitec D845WP servos" Tags="&lt;microcontroller&gt;&lt;servomotor&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16654" PostTypeId="2" ParentId="16650" CreationDate="2018-11-03T18:24:16.043" Score="1" Body="&lt;p&gt;Edited:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should have put the subscript &lt;span class=&quot;math-container&quot;&gt;$c$&lt;/span&gt; on variable &lt;span class=&quot;math-container&quot;&gt;$F$&lt;/span&gt;, because they define &lt;span class=&quot;math-container&quot;&gt;$F_c$&lt;/span&gt; as the contact force the system is trying to maintain.   Since achieving and servoing around that desired contact force is the goal, the velocity at the target state will be zero.  Therefore &lt;span class=&quot;math-container&quot;&gt;$F_c = k_sx_r$&lt;/span&gt;.   You’ll find the damping terms in the dynamic model - they are in the denominator of the transfer function. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note:  I see you added the subscript now.  Thanks. &lt;/p&gt;&#xA;" OwnerUserId="11125" LastEditorUserId="11125" LastEditDate="2018-11-04T14:34:13.010" LastActivityDate="2018-11-04T14:34:13.010" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16655" PostTypeId="1" CreationDate="2018-11-03T22:57:14.093" Score="0" ViewCount="66" Body="&lt;p&gt;I struggling days with this problem :&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have joystick values 0~FF for each axis. So the higher this value, the faster the axis moves. I am trying to find a way to control a robot with these values.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For instance: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 1. axis of the robot should move 50 cm into z-direction.&#xA;For this experiment there is not any feedback system from the robot. So we dont know how much the robot has moved with each joystick values. Will there be a solution for this given circumstance? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;At first, I tried to solve this problem with a simulation model. After building a robot model, I could calculate the desired joint angle value changes for each axis with a IK solver. Then again, the problem is to convert the calculated joint angle value changes into joystick values. Since the robot is controlled with this values.&lt;/p&gt;&#xA;" OwnerUserId="21382" LastActivityDate="2018-11-04T16:04:57.943" Title="Controlling the robot with joystick values" Tags="&lt;industrial-robot&gt;" AnswerCount="2" CommentCount="5" ClosedDate="2018-11-05T18:10:03.107" ContentLicense="CC BY-SA 4.0" />
  <row Id="16656" PostTypeId="2" ParentId="16655" CreationDate="2018-11-04T15:44:29.907" Score="0" Body="&lt;p&gt;Joysticks are good for velocity control.  Whether you control each joint independently, or control the end effector position using inverse kinematics, the process is the same:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Determine the maximum velocity the controlled variable can achieve.&lt;/li&gt;&#xA;&lt;li&gt;Calculate the ratio of Maximum velocity divided by FF. &lt;/li&gt;&#xA;&lt;li&gt;When a new command is issued, multiply its value by the ratio computed above to determine the new velocity command to send to the robot. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2018-11-04T15:44:29.907" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16657" PostTypeId="2" ParentId="16655" CreationDate="2018-11-04T16:04:57.943" Score="1" Body="&lt;p&gt;What you are attempting to achieve is called &lt;a href=&quot;https://en.wikipedia.org/wiki/Dead_reckoning&quot; rel=&quot;nofollow noreferrer&quot;&gt;Dead Reckoning&lt;/a&gt;.  Given the velocity at every instant in time and current position, one can calculate the new position by taking the integral of velocity with respect to time.  The relationship between position, time and acceleration is discussed &lt;a href=&quot;http://math2.uncc.edu/~bjwichno/spring2010/math1121/Lecture_Notes/unit_3/Lectures/lec_pos_vel_acc.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; in a lecture note from uiuc.edu.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is almost always better to use feed back to determine a new position. As any errors accumulate during these types of calculations. &lt;/p&gt;&#xA;" OwnerUserId="17364" LastActivityDate="2018-11-04T16:04:57.943" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16659" PostTypeId="2" ParentId="16495" CreationDate="2018-11-05T14:54:44.050" Score="2" Body="&lt;p&gt;There are basically two approaches to this problem: You can solve it mechanically or through sensors/programming, or some combination of both.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;jsotola's response offers several good mechanical approaches - clamping to the beam, lowering the center of gravity below the beam, etc. Exploit loopholes if you can; does the robot have to balance on top of the beam, or can it hang from underneath? But depending on the situation, purely mechanical options such as these might not be viable. Consider a Segway, or the Cubli in jsotola's answer. Neither of these have purely mechanical solutions to stay upright and balanced. How do they do it?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The answer is something called a &lt;a href=&quot;https://en.wikipedia.org/wiki/PID_controller&quot; rel=&quot;nofollow noreferrer&quot;&gt;PID Controller&lt;/a&gt;. For a balancing robot it basically works like this:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The balancing robot gets a sensor reading from a gyroscope/accelerometer sensor to &quot;feel&quot; if it is falling.  &lt;/li&gt;&#xA;&lt;li&gt;Based on how much the robot has tilted and how quickly it is falling, the PID formula figures out how &lt;em&gt;forcefully&lt;/em&gt; the robot should respond. If the robot doesn't respond quickly enough it will fall, but it also can't respond &lt;em&gt;too&lt;/em&gt; quickly or it may over-correct and fall the other way. By adjusting the constants in the PID formula you can make it output the proper amount of response for whatever amount of disturbance the robot detects.  &lt;/li&gt;&#xA;&lt;li&gt;Using the value from the PID, the robot adjusts its motors to arrest any unwanted tilting/falling.&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The Cubli uses spinning weights to apply torque and balance on a corner.&lt;/li&gt;&#xA;&lt;li&gt;A Segway makes very small adjustments to its speed to keep the wheels under the center of mass.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;This process repeats tens or even hundreds of times per second so it can quickly respond to disturbances.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;How does this apply to you?&lt;/strong&gt;&lt;br&gt;&#xA;It's impossible to say without knowing more about your specific situation, but I can think of a few scenarios in which you could employ this.  &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;How does the robot respond to a tilting beam? The robot could employ a heavy balance bar (like a tightrope walker), or simply put a heavy weight on a pivot (maybe its own battery pack). But how fast do you have to tilt the weight to stay balanced on the beam? Gyro/accelerometer sensor and a PID controller.  &lt;/li&gt;&#xA;&lt;li&gt;How does the robot avoid driving off the side of the narrow beam? Use a sensor to detect how close it is to the edge of the beam, use a PID to adjust the steering to correct for it.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="20680" LastActivityDate="2018-11-05T14:54:44.050" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16660" PostTypeId="1" CreationDate="2018-11-05T15:42:32.623" Score="2" ViewCount="139" Body="&lt;p&gt;I'm looking at using a magnetometer in a project and I'm struggling to understand the proper procedure for calibration of the sensor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I understand that magnetometers need to be calibrated to compensate for hard and soft iron effects. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've seen a number of algorithms for calibration based around ellipsoid fitting, similar to that detailed in &lt;a href=&quot;https://www.st.com/content/ccc/resource/technical/document/design_tip/group0/a2/98/f5/d4/9c/48/4a/d1/DM00286302/files/DM00286302.pdf/jcr:content/translations/en.DM00286302.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.st.com/content/ccc/resource/technical/document/design_tip/group0/a2/98/f5/d4/9c/48/4a/d1/DM00286302/files/DM00286302.pdf/jcr:content/translations/en.DM00286302.pdf&lt;/a&gt;. These algorithms all require the magnetometer be spun in three dimensions, to collect enough data for an ellipsoid to be fitted, thereby allowing estimation of scaling and offset parameters to translate and scale the ellipsoid to a unit sphere positioned at the origin. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I'm unclear on how the calibration algorithm should be used, for example if say I'm placing my magnetometer in the boot of a car next to several other bits of metal would I be able to calibrate the magnetometer by spinning the magnetometer in three dimensions just above its mounting point? Would this then calibrate out the effect of the hard and soft iron effects in the magnetometers vicinity? Or should I actually be mounting the magnetometer in its mounting point and then spinning the entire platform (in this example the car) in three dimensions? Could someone also explain the physics as to why the calibration should be performed in either manner?&lt;/p&gt;&#xA;" OwnerUserId="21577" LastEditorUserId="21577" LastEditDate="2018-11-05T16:02:30.560" LastActivityDate="2018-11-05T16:02:30.560" Title="Magnetometer Calibration" Tags="&lt;sensors&gt;&lt;calibration&gt;&lt;magnetometer&gt;" AnswerCount="0" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16664" PostTypeId="2" ParentId="16648" CreationDate="2018-11-06T18:36:15.623" Score="1" Body="&lt;p&gt;I think the answer is that a covariance matrix represents uncertainty. As its singular values grow, uncertainty grows as well. On the other hand, if you look at its inverse you see (of course) the opposite. As singular values of the covariance matrix inverse grow, uncertainty decreases.&#xA;In other words, uncertainty decreases when more valuable information is gathered. That is why the inverse of the covariance is called information. Since the filter propagates this matrix and its associated vector it is called an information filter. &lt;/p&gt;&#xA;" OwnerUserId="20631" LastActivityDate="2018-11-06T18:36:15.623" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16665" PostTypeId="2" ParentId="1180" CreationDate="2018-11-06T18:47:48.670" Score="1" Body="&lt;p&gt;Just a short note-&#xA;There is a significant difference between information filters and Klaman filters.&#xA;Although they are mathematically similar (inverses of each other), marginalization is simple in Kalman filters and complicated in information filters. However, smoothing is simpler in information filters while it is complicated in Kalman filters.&#xA;Since modern state estimation techniques tend to employ smoothing to mitigate the effects of non-linearities, enhance precision and allow loop closures information filters are now on the rise.&lt;/p&gt;&#xA;" OwnerUserId="20631" LastActivityDate="2018-11-06T18:47:48.670" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16666" PostTypeId="2" ParentId="16569" CreationDate="2018-11-06T23:28:51.777" Score="2" Body="&lt;p&gt;After some investigation, there is a problem with the derivative block in Simulink. &lt;code&gt;tf&lt;/code&gt; yields the correct response in my case. While the values of &lt;strong&gt;Kd&lt;/strong&gt; has been designed to yields 20%, the system is not a second-order system because there is no zero-pole cancellation. The zero comes from the PD controller. The new system yields 27%. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The derivative block as shown in my post must be used with caution. The discussion can be found in &lt;a href=&quot;https://www.mathworks.com/matlabcentral/answers/95614-what-are-the-implications-of-using-the-derivative-block-in-simulink&quot; rel=&quot;nofollow noreferrer&quot;&gt;What are the implications of using the Derivative block in Simulink?&lt;/a&gt;. The answer is provided by  MathWorks Support Team staff which is &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Here is a list of recommendations on the usage of the Derivative&#xA;  block:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;1) Signals connected to the Derivative block should be continuous in&#xA;  time and amplitude&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Derivative blocks amplify discontinuities when connected to a&#xA;  non-continuous signal. In example 'Example1_Discont.mdl', the slope of&#xA;  the input signal changes instantly. After being passed through a&#xA;  Derivative block, it becomes a peak.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;2) Signals connected to the Derivative block should have a small&#xA;  derivative at t=0&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;‘Example2_Spike.mdl’ shows how a spike can occur in the second&#xA;  derivative after the first time step. This occurs because the&#xA;  Derivative block yields 0 by default at the initial time step, instead&#xA;  of 2*pi in this case. If this model is simulated again with a smaller&#xA;  time step, the spike amplitude increases.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;3) Signals connected to the derivative should contain a low level of&#xA;  noise&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;In general, taking the derivative of a noisy signal tends to&#xA;  exacerbate the influence of that noise. Therefore, Derivative blocks&#xA;  in Simulink exhibit this behavior as well. In ‘Example3_Noise.mdl’,&#xA;  the noise gets amplified in the output, to the point where the&#xA;  derivative of the sine wave is not recognizable. By using a filtered&#xA;  derivative transfer function which filters out higher frequencies, a&#xA;  much better result can be obtained in the example.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;If your model cannot respect the above guidelines, you might want to&#xA;  consider the following alternatives:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;a) Rearranging the equations&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Typically, a system's best-form mathematical model exclusively&#xA;  involves integrators (i.e., no derivatives). It is usually possible to&#xA;  design the model in such a way that Derivative blocks are never&#xA;  needed. In 'Example4_BestForm.mdl', the &quot;naive&quot; first approach&#xA;  involves a Derivative block; however, the second approach avoids&#xA;  having to compute the derivative.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;b) Including the derivative into a transfer function&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;If a Derivative block and another Transfer Function block are in&#xA;  series, it may be possible to remove the Derivative block and multiply&#xA;  the numerator of the transfer function by ‘s’ (see&#xA;  ‘Example5_InSeries.mdl’, where the magnitude of the error is very&#xA;  small compared to the magnitude of the output signal).&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;c) Filtered derivative&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;The Derivative block can be replaced with a transfer function of the&#xA;  form G(s) = s/(tau*s+1), where ‘tau’ is a time constant which should&#xA;  be small compared to the dominant time constant of the system, to&#xA;  avoid filtering out important system dynamics. ‘Example6_Filtered.mdl’&#xA;  contrasts this transfer function with the Derivative block.&lt;/p&gt;&#xA;  &#xA;  &lt;ul&gt;&#xA;  &lt;li&gt;Additional note:&lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;  &#xA;  &lt;p&gt;How is the derivative part of the PID controller implemented in&#xA;  Simulink? It does not use a Derivative block, but instead implements a&#xA;  filtered derivative similar to the one described above. In a model&#xA;  including a PID Controller block, right-click on the block and select&#xA;  ‘Look Under Mask’ to see the exact implementation of the controller,&#xA;  and in particular its derivative part.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The credit goes to &lt;a href=&quot;https://stackoverflow.com/questions/53035249/different-result-for-same-system-with-simulink-and-tf&quot;&gt;@Matteo Ragni&lt;/a&gt;. The actual implementation for the derivative block is provided by Matteo.  &lt;/p&gt;&#xA;" OwnerUserId="2155" LastActivityDate="2018-11-06T23:28:51.777" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16667" PostTypeId="1" CreationDate="2018-11-07T06:04:44.400" Score="0" ViewCount="63" Body="&lt;p&gt;my Extended kalman filter (EKF) program works well, my estimated state vector is same as real state vector when I give any positive definite number to measurement noise R. But I want to make covariance analysis and one part of covariance analysis I need to set zero measurement noise. When I do this, I get singularity warning from K= (H&lt;em&gt;P&lt;/em&gt;H'+R)^-1 (kalman gain part of measurement correction part of EKF). I checked eigenvalues and rank. When I get R=0, some eigenvalues becomes negative a few seconds later and rank is decrease from 15 to 1. When I get R&gt;0, all eigenvalues are positive definite and rank goes to 15 to 7. How can I solve problem, I can not detect cause of this problem. Could you help me please? &lt;/p&gt;&#xA;" OwnerUserId="21592" LastActivityDate="2018-11-07T21:10:40.663" Title="EKF singularity problem when measurement noise R is zero" Tags="&lt;ekf&gt;&lt;noise&gt;&lt;auv&gt;&lt;singularity&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16668" PostTypeId="1" AcceptedAnswerId="16676" CreationDate="2018-11-07T07:25:17.493" Score="0" ViewCount="90" Body="&lt;p&gt;From time to time here in the forum are messages gets posted about radio communication with quadcopters. So called “radio modems” are used for a “robot to groundstation”-communication. But the more appropriate term would be software defined radio, because it has always to do with ham radio and shortwave communication.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think, the robotics community has no choice than learn some of the vocabulary used in the amateur radio community, for example JT65 for distance communication and GNU radio for converting audio signals. The main problem seems to be, that it is not possible to utilize a full blown amateur radio station for a small sized quadcopter. A typical shortwave device has a power consumption of 100 Watt and needs lots of space. So my question is, can this be scale down to an USB stick with a simple antenna but provides transmitting facilities to a robot? As far as i know, radio amateurs are often use the RTL2832 chipset which is sold in DVB-T sticks but I'm unsure if it's possible to send a signal with it, or is this more a passive scanner?&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2018-11-09T00:39:12.887" Title="Robotics and Software defined radio" Tags="&lt;radio-control&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16669" PostTypeId="1" CreationDate="2018-11-07T12:39:30.153" Score="1" ViewCount="8" Body="&lt;p&gt;In &lt;a href=&quot;https://www.springer.com/gb/book/9783319151700&quot; rel=&quot;nofollow noreferrer&quot;&gt;Passivity-Based Control and Estimation in Networked Robotics&lt;/a&gt; (among others), a passive system is defined as one that:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$\int_0^t y^T(t)u(t) dt \geq -\beta $$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;for output &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt; and input &lt;span class=&quot;math-container&quot;&gt;$u$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have never understood how this describes a system where &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;the total internal energy stored in the system is bounded above by the energy externally supplied to the system&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This comes down to  &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$u$&lt;/span&gt; being under defined. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;One way to interpret it, is since we are discussing energy, that &lt;span class=&quot;math-container&quot;&gt;$u$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt; have units that result in their product being a measure of energy? And implicitly that the integral defines some energy reservoir or dissipation? &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Alternatively, the only way that the above is violated, is if &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt; is negatively proportional to &lt;span class=&quot;math-container&quot;&gt;$u$&lt;/span&gt;? But what does that mean mechanically? That the robot is compliant?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;How should I imagine &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$u$&lt;/span&gt; in order to make sense of the passivity criteria above?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="21593" LastActivityDate="2018-11-07T12:39:30.153" Title="How to interpret the passivity criteria equation?" Tags="&lt;control&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16670" PostTypeId="2" ParentId="16667" CreationDate="2018-11-07T14:03:35.477" Score="2" Body="&lt;p&gt;I think you need to step back a bit and think beyond the math. An (E)KF is used to estimate the true value of a signal in the presence of noise; it's only because of this noise that we even need the algorithm. When you set R to zero you are saying &quot;I have a perfect measurement&quot;. In this case there is no need for an estimate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In practice, I think you have two options:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Do analysis with a series of decreasing R value and try to estimate in the limit as R-&gt;0&lt;/li&gt;&#xA;&lt;li&gt;Instead of doing all the measurement step math, simply assign the state estimate to match your measurement (which is what R=0 means). You'll also need to zero out your estimate covariance, P=0.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="2669" LastEditorUserId="2669" LastEditDate="2018-11-07T21:10:40.663" LastActivityDate="2018-11-07T21:10:40.663" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16672" PostTypeId="1" CreationDate="2018-11-08T02:37:12.467" Score="1" ViewCount="425" Body="&lt;p&gt;I have a robotic arm with 6 DOF. For each joint, I get get the Joint Wrench, which is composed by the force and torque of the parent and child links of the joints. In other works, for joint 1 I can get ParentLinkForce, ParentLinkTorque, ChildLinkForce and ChildLinkTorque. Each of one is a 3D vector with x, y z.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is, how can I transform this to the current effort of the joint in N.m? So I can directly get the effort value of the torque after applying a torque action in the joint.&lt;/p&gt;&#xA;" OwnerUserId="21596" LastEditorUserId="9176" LastEditDate="2018-11-08T03:24:03.363" LastActivityDate="2019-01-07T12:00:55.173" Title="How to calculate effort/torque values of a joint" Tags="&lt;control&gt;&lt;torque&gt;&lt;joint&gt;&lt;force&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16675" PostTypeId="2" ParentId="16672" CreationDate="2018-11-08T10:29:59.110" Score="2" Body="&lt;p&gt;The wrench characterizes the forces and torques acting on the respective linkages. Part of this is motor torque, the other forces and torques are loading the mechanical structure (and motors down the chain).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have followed the Denavit Hartenberg convention in defining the coordinate systems and you have a rotational joint the joint torque is the z component of the torque part either the parent of the child wrench (depending on the motor orientation).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you did not follow the DH convention, you should locate the axis which is co-located with the motor axis and use the torque component from the wrence corresponding to the co-located axis. If you do not have such an axis, you need to define a new coordinate system which has such an axis and make the coordinate system transformations form the parend/child coordinate system to the new one. Afterwards transform the wrench to the new coordinate system atteched to the motor and select the torque component corresponding to the co-located axis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please make sure the regard any gearboxes which the motor might have when calculating any actual motor torques.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2018-11-08T10:29:59.110" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16676" PostTypeId="2" ParentId="16668" CreationDate="2018-11-09T00:39:12.887" Score="1" Body="&lt;p&gt;It is not clear what you are asking.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Software-defined radio (SDR) as a concept essentially means that low-/physical-layer computational tasks like modulation/demodulation, error-correction coding, filtering, etc are being implemented in software and such that the software environment is &quot;opened up&quot; to users. The key thing here really is the run-time environment, not the particular communications technology that happens to be implemented in this environment. In practice, software-defined radio is useful for people doing research in wireless physical layers and/or signal processing, or in situations where (for example because of weight constraints) one only wants to use one piece of communications circuitry but possibly needs to support several communications standards (which &lt;em&gt;is&lt;/em&gt; possible, just not at the same time).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The vast majority of all people (and I would include the vast majority of robotics users/researchers here as well) only have &quot;bread-and-butter&quot; requirements in terms of communications and normally have no need to employ SDR, but they will be perfectly fine with commercially available transceivers which don't employ SDR technologies.&lt;/p&gt;&#xA;" OwnerUserId="15626" LastActivityDate="2018-11-09T00:39:12.887" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16677" PostTypeId="2" ParentId="11735" CreationDate="2018-11-09T09:20:02.893" Score="1" Body="&lt;p&gt;Jacobian would help you in this case. The joint velocities and the end effector velocities are related by the following equation,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ \dot{X} = J(q).\dot{q} $$&lt;/span&gt;&lt;/p&gt;&#xA;" OwnerUserId="19947" LastActivityDate="2018-11-09T09:20:02.893" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16678" PostTypeId="1" CreationDate="2018-11-09T10:59:21.227" Score="1" ViewCount="531" Body="&lt;p&gt;I'm an absolute beginner in this field so I request you to help me although the question seems very silly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to send the robot (in simulation) pose goal from ROS node. I want to use to moveit framework. Previously I have used V-REP simulator and controlled a robot in V-REP using ROS node.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to do same by using moveit framework and gazebo simulator. I have already created the panda_moveit_config package but I don't know what to do next. My main questions are:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Where can I keep my source file of ROS node(containing the code to control the robot)?&lt;/li&gt;&#xA;&lt;li&gt;How can I run the node and send commands to robot model in Gazebo?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I'm looking forward to any tutorials or advice which will help me from environment setup till running the code. Any help is appreciated.&lt;/p&gt;&#xA;" OwnerUserId="21545" LastEditorUserId="18235" LastEditDate="2018-11-09T14:10:31.643" LastActivityDate="2020-04-03T14:01:05.117" Title="Simulating the robot using moveit with ROS" Tags="&lt;ros&gt;&lt;gazebo&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16681" PostTypeId="2" ParentId="16653" CreationDate="2018-11-09T15:51:48.947" Score="0" Body="&lt;p&gt;As you know microcontroller board (e.g. arduino) have limited current output and mostly fived voltages  3.3V/5V. So they can not be used directly to power the motor, so you need either a motor driver or controller to power it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The difference is that a motor driver only handles power, and the control has to be done by a microcontroller, often the signal to be sent to the motor driver require proper timing and care. Whereas a motor controller is a motor driver plus some logical part taking care of the low-level control of the motor, that means that you can send high-level commands to the controller like pwm or set points, and it takes care of the interaction with the driver.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back to the driver, DC motor do not require a specific protocol to be controlled, but servos, stepper and brushless require a specific type of signal to be operated properly. &#xA;When you buy some packaged servo, they usually consist of a DC motor and a controller, so you need to provide a high-level (eg pwm) and the required power. In that case you only need an adequate power supply and something able to produce a pwm signal.&#xA;See for example this &lt;a href=&quot;https://howtomechatronics.com/how-it-works/how-servo-motors-work-how-to-control-servos-using-arduino/&quot; rel=&quot;nofollow noreferrer&quot;&gt;tutorial from howtomechatronics.com&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2018-11-09T15:51:48.947" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16683" PostTypeId="2" ParentId="16678" CreationDate="2018-11-10T10:13:58.693" Score="1" Body="&lt;p&gt;After generating the moveit_config package you have to do a lot of work to get it working in simulation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1)make sure your robot urdf has inertia parameters, if not guess them reasonably.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2)add transmissions to all joints in the urdf and load the gazebo_ros_control plugin (check out gazebo grasp_fix plugin incase you have trouble grasping)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3)add create a controller.yaml file specifying which controller you want to use for each joints &lt;/p&gt;&#xA;&#xA;&lt;p&gt;4)create a launch file for spawning model, spawning ros_controllers in gazebo&lt;/p&gt;&#xA;&#xA;&lt;p&gt;5)edit moveit_controllers.launch to link moveit to the controllers you have spawned.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suggest you go through these links: &lt;a href=&quot;http://gazebosim.org/tutorials/?tut=ros_control#Tutorial:ROSControl&quot; rel=&quot;nofollow noreferrer&quot;&gt;1&lt;/a&gt; ,&lt;a href=&quot;https://github.com/JoshMarino/gazebo_and_ros_control#Torque%20Control&quot; rel=&quot;nofollow noreferrer&quot;&gt;2&lt;/a&gt; , &lt;a href=&quot;https://www.youtube.com/watch?v=j6bBxfD_bYs&quot; rel=&quot;nofollow noreferrer&quot;&gt;3&lt;/a&gt;, &lt;a href=&quot;http://www.theconstructsim.com/control-gazebo-simulated-robot-moveit-video-answer/&quot; rel=&quot;nofollow noreferrer&quot;&gt;4&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="20869" LastActivityDate="2018-11-10T10:13:58.693" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16691" PostTypeId="1" CreationDate="2018-11-12T08:58:13.390" Score="2" ViewCount="586" Body="&lt;p&gt;I'm having trouble including a spherical/ball joint in my robot model. I have tried using the 'ball' joint type defined by sdf (&lt;a href=&quot;http://sdformat.org/spec?ver=1.6&amp;amp;elem=joint#joint_type&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://sdformat.org/spec?ver=1.6&amp;amp;elem=joint#joint_type&lt;/a&gt;) but the urdf will no longer compile, throwing the error: 'Joint [joint_name] has no known type [ball]'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have also tried building a spherical joint using three orthogonal universal joints. The model does not throw any errors, and in rviz everything is displayed as expected and without issue. In gazebo however, neither the three universal joints composing the spherical joint nor the child link show up, or are listed as part of the model.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;.xacro:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;...&#xA;    &amp;lt;link name=&quot;${leg_name}_psi_link&quot;&amp;gt;&#xA;        &amp;lt;visual&amp;gt;&amp;lt;geometry&amp;gt;&amp;lt;sphere radius=&quot;.00001&quot;/&amp;gt;&amp;lt;/geometry&amp;gt;&amp;lt;/visual&amp;gt;&#xA;        &amp;lt;collision&amp;gt;&amp;lt;geometry&amp;gt;&amp;lt;sphere radius=&quot;.00001&quot;/&amp;gt;&amp;lt;/geometry&amp;gt;&amp;lt;/collision&amp;gt;&#xA;        &amp;lt;origin xyz=&quot;0 0 0&quot; rpy=&quot;0 0 0&quot;/&amp;gt;&#xA;        &amp;lt;mass value=&quot;.00001&quot;/&amp;gt;&#xA;        &amp;lt;inertia ixx=&quot;0.00001&quot; ixy=&quot;0.0&quot; ixz=&quot;0.0&quot; iyy=&quot;0.00001&quot; iyz=&quot;0.0&quot; izz=&quot;0.00001&quot; /&amp;gt;&#xA;    &amp;lt;/link&amp;gt;&#xA;&#xA;    &amp;lt;link name=&quot;${leg_name}_theta_link&quot;&amp;gt;&#xA;        &amp;lt;visual&amp;gt;&amp;lt;geometry&amp;gt;&amp;lt;sphere radius=&quot;.00001&quot;/&amp;gt;&amp;lt;/geometry&amp;gt;&amp;lt;/visual&amp;gt;&#xA;        &amp;lt;collision&amp;gt;&amp;lt;geometry&amp;gt;&amp;lt;sphere radius=&quot;.00001&quot;/&amp;gt;&amp;lt;/geometry&amp;gt;&amp;lt;/collision&amp;gt;&#xA;        &amp;lt;origin xyz=&quot;0 0 0&quot; rpy=&quot;0 0 0&quot;/&amp;gt;&#xA;        &amp;lt;mass value=&quot;.00001&quot;/&amp;gt;&#xA;        &amp;lt;inertia ixx=&quot;0.00001&quot; ixy=&quot;0.0&quot; ixz=&quot;0.0&quot; iyy=&quot;0.00001&quot; iyz=&quot;0.0&quot; izz=&quot;0.00001&quot; /&amp;gt;&#xA;    &amp;lt;/link&amp;gt;&#xA;&#xA;    &amp;lt;link name=&quot;&lt;span class=&quot;math-container&quot;&gt;${leg_name}_foot_link&quot;&amp;gt;&#xA;    &amp;lt;visual&amp;gt;&amp;lt;geometry&amp;gt;&amp;lt;mesh filename=&quot;$&lt;/span&gt;{meshes_path}/foot_link.stl&quot; /&amp;gt;&amp;lt;/geometry&amp;gt;&amp;lt;/visual&amp;gt;&#xA;        &amp;lt;collision&amp;gt;&amp;lt;geometry&amp;gt;&amp;lt;mesh filename=&quot;&lt;span class=&quot;math-container&quot;&gt;${meshes_path}/foot_link_collision.stl&quot; /&amp;gt;&amp;lt;/geometry&amp;gt;&amp;lt;/collision&amp;gt;&#xA;    &amp;lt;xacro:default_inertial mass=&quot;$&lt;/span&gt;{foot_mass}&quot;/&amp;gt;&#xA;    &amp;lt;/link&amp;gt;&#xA;&#xA;    &amp;lt;joint name=&quot;&lt;span class=&quot;math-container&quot;&gt;${leg_name}_psi_joint&quot; type=&quot;continuous&quot; &amp;gt;&#xA;    &amp;lt;parent link=&quot;$&lt;/span&gt;{leg_name}_tibia_link&quot; /&amp;gt;&#xA;        &amp;lt;child link=&quot;&lt;span class=&quot;math-container&quot;&gt;${leg_name}_psi_link&quot; /&amp;gt;&#xA;    &amp;lt;axis xyz=&quot;0 0 1&quot; /&amp;gt;&#xA;    &amp;lt;dynamics damping=&quot;0.005&quot; /&amp;gt;&#xA;    &amp;lt;origin xyz=&quot;0.075 0 0&quot; rpy=&quot;0 0 0&quot; /&amp;gt;&#xA;    &amp;lt;limit lower=&quot;$&lt;/span&gt;{-pi/2}&quot; upper=&quot;&lt;span class=&quot;math-container&quot;&gt;${-pi/2}&quot; velocity=&quot;$&lt;/span&gt;{joint_velocity_limit}&quot; effort=&quot;${joint_effort_limit}&quot; /&amp;gt;&#xA;    &amp;lt;/joint&amp;gt;&#xA;&#xA;    &amp;lt;joint name=&quot;&lt;span class=&quot;math-container&quot;&gt;${leg_name}_theta_joint&quot; type=&quot;continuous&quot; &amp;gt;&#xA;    &amp;lt;parent link=&quot;$&lt;/span&gt;{leg_name}_psi_link&quot;/&amp;gt;&#xA;        &amp;lt;child link=&quot;&lt;span class=&quot;math-container&quot;&gt;${leg_name}_theta_link&quot;/&amp;gt;&#xA;    &amp;lt;axis xyz=&quot;0 1 0&quot; /&amp;gt;&#xA;    &amp;lt;dynamics damping=&quot;0.005&quot; /&amp;gt;&#xA;    &amp;lt;origin xyz=&quot;0 0 0&quot; rpy=&quot;0 0 0&quot; /&amp;gt;&#xA;    &amp;lt;limit lower=&quot;$&lt;/span&gt;{-pi/2}&quot; upper=&quot;&lt;span class=&quot;math-container&quot;&gt;${-pi/2}&quot; velocity=&quot;$&lt;/span&gt;{joint_velocity_limit}&quot; effort=&quot;${joint_effort_limit}&quot; /&amp;gt;&#xA;    &amp;lt;/joint&amp;gt;&#xA;&#xA;    &amp;lt;joint name=&quot;&lt;span class=&quot;math-container&quot;&gt;${leg_name}_phi_joint&quot; type=&quot;continuous&quot; &amp;gt;&#xA;    &amp;lt;parent link=&quot;$&lt;/span&gt;{leg_name}_theta_link&quot;/&amp;gt;&#xA;        &amp;lt;child link=&quot;&lt;span class=&quot;math-container&quot;&gt;${leg_name}_foot_link&quot;/&amp;gt;&#xA;    &amp;lt;axis xyz=&quot;1 0 0&quot; /&amp;gt;&#xA;    &amp;lt;dynamics damping=&quot;0.005&quot; /&amp;gt;&#xA;    &amp;lt;origin xyz=&quot;0 0 0&quot; rpy=&quot;0 0 0&quot; /&amp;gt;&#xA;    &amp;lt;limit lower=&quot;$&lt;/span&gt;{-pi/2}&quot; upper=&quot;&lt;span class=&quot;math-container&quot;&gt;${-pi/2}&quot; velocity=&quot;$&lt;/span&gt;{joint_velocity_limit}&quot; effort=&quot;${joint_effort_limit}&quot; /&amp;gt;&#xA;    &amp;lt;/joint&amp;gt;&#xA;...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;launch file (relevent parts)&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  &amp;lt;!-- Load robot description --&amp;gt;&#xA;  &amp;lt;param name=&quot;robot_description&quot; command=&quot;xacro --inorder 'path/to/robot.xacro'&quot; /&amp;gt;&#xA;&#xA;  &amp;lt;!-- load the controllers --&amp;gt;&#xA;  &amp;lt;node name=&quot;controller_spawner&quot; pkg=&quot;controller_manager&quot; type=&quot;spawner&quot; respawn=&quot;false&quot;&#xA;        output=&quot;screen&quot; ns=&quot;/syropod&quot; args=&quot;joint_state_controller&#xA;              AL_coxa_joint&#xA;              AL_femur_joint&#xA;              AL_tibia_joint&#xA;              AR_coxa_joint&#xA;              AR_femur_joint&#xA;              AR_tibia_joint&#xA;              BL_coxa_joint&#xA;              BL_femur_joint&#xA;              BL_tibia_joint&#xA;              BR_coxa_joint&#xA;              BR_femur_joint&#xA;              BR_tibia_joint&quot;/&amp;gt;&#xA;&#xA;  &amp;lt;node name=&quot;urdf_spawner&quot; pkg=&quot;gazebo_ros&quot; type=&quot;spawn_model&quot;&#xA;        args=&quot;-urdf&#xA;        -model syropod&#xA;        -param robot_description&#xA;        -x 0.0&#xA;        -y 0.0&#xA;        -z 0.2&#xA;        -R 0.0&#xA;        -P 0.0&#xA;        -Y 0.0&#xA;        -J AL_coxa_joint 0.0&#xA;        -J AL_femur_joint 0.0&#xA;        -J AL_tibia_joint 0.0&#xA;        -J AL_psi_joint 0.0&#xA;        -J AL_theta_joint 0.0&#xA;        -J AL_phi_joint 0.0&#xA;        -J AR_coxa_joint 0.0&#xA;        -J AR_femur_joint 0.0&#xA;        -J AR_tibia_joint 0.0&#xA;        -J AR_psi_joint 0.0&#xA;        -J AR_theta_joint 0.0&#xA;        -J AR_phi_joint 0.0&#xA;        -J BL_coxa_joint 0.0&#xA;        -J BL_femur_joint 0.0&#xA;        -J BL_tibia_joint 0.0&#xA;        -J BL_psi_joint 0.0&#xA;        -J BL_theta_joint 0.0&#xA;        -J BL_phi_joint 0.0&#xA;        -J BR_coxa_joint 0.0&#xA;        -J BR_femur_joint 0.0&#xA;        -J BR_tibia_joint 0.0&#xA;        -J BR_psi_joint 0.0&#xA;        -J BR_theta_joint 0.0&#xA;        -J BR_phi_joint 0.0&quot;&#xA;  respawn=&quot;false&quot; output=&quot;screen&quot;/&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;***Why do none of the joints or links appear in the robot model?****What am I missing/doing wrong? Is there a better way to do this?*&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Notes&lt;/p&gt;&#xA;&#xA;&lt;p&gt;the three orthogonal joints represent the roll pitch yaw of the spherical joint they compose. their mass and inertia matrices are close to zero intentionally. they are not zero because I understand that this can cause issues in gazebo.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;${leg_name}_foot_link is the end effector link&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="15605" LastActivityDate="2018-11-14T02:07:11.777" Title="Spherical (Ball) Joint in Robot Model not Working in Gazebo" Tags="&lt;ros&gt;&lt;gazebo&gt;&lt;joint&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16693" PostTypeId="1" CreationDate="2018-11-13T08:43:58.403" Score="-1" ViewCount="24" Body="&lt;p&gt;I am working on a time critical project. I use an optical sensor. I would like to know the initialisation or boot time the sensor after power given which will be in µS. How could I measure that?&lt;/p&gt;&#xA;" OwnerUserId="21633" LastActivityDate="2018-11-13T10:16:20.667" Title="time to Initialise or start sensor after power given" Tags="&lt;arduino&gt;&lt;sensors&gt;&lt;microcontroller&gt;&lt;c&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2018-11-13T10:29:15.917" ContentLicense="CC BY-SA 4.0" />
  <row Id="16694" PostTypeId="2" ParentId="16693" CreationDate="2018-11-13T10:16:20.667" Score="1" Body="&lt;p&gt;First crucial thing to know is what is your sensor - its part number, to be clear. If your sensor is digital, its initialization time is probably given in the datasheet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are using analog one, check datasheet too - settling time might be one of values documented. If you can't find anything in the datasheet, you can perform simple test using oscilloscope:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Place sensor in some stable state, ie. looking at uniform surface from a fixed position,&lt;/li&gt;&#xA;&lt;li&gt;Connect the probe to analog output of the sensor and probing ground to sensor's ground,&lt;/li&gt;&#xA;&lt;li&gt;Set oscilloscope to single trigger mode,&lt;/li&gt;&#xA;&lt;li&gt;Power up the sensor.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;That way you can observe analog voltage rising from zero to some value, determining its initial settling time.&lt;/p&gt;&#xA;" OwnerUserId="14673" LastActivityDate="2018-11-13T10:16:20.667" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16697" PostTypeId="2" ParentId="16691" CreationDate="2018-11-14T02:07:11.777" Score="2" Body="&lt;p&gt;Answer:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The issue is that &amp;lt;&lt;em&gt;origin&lt;/em&gt;&gt;, &amp;lt;&lt;em&gt;mass&lt;/em&gt;&gt;, and &amp;lt;&lt;em&gt;inertia&lt;/em&gt;&gt; tags must be nested inside a &amp;lt;&lt;em&gt;inertial&lt;/em&gt;&gt; element for each of the links, instead of being nested in the &amp;lt;&lt;em&gt;link&lt;/em&gt;&gt; tag. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;correct:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;     &amp;lt;link name=&quot;&lt;span class=&quot;math-container&quot;&gt;${leg_name}_psi_link&quot;&amp;gt;&#xA;         &amp;lt;visual&amp;gt;&amp;lt;geometry&amp;gt;&amp;lt;sphere radius=&quot;.01&quot;/&amp;gt;&amp;lt;/geometry&amp;gt;&amp;lt;/visual&amp;gt;&#xA;         &amp;lt;collision&amp;gt;&amp;lt;geometry&amp;gt;&amp;lt;sphere radius=&quot;.005&quot;/&amp;gt;&amp;lt;/geometry&amp;gt;&amp;lt;/collision&amp;gt;&#xA;         &amp;lt;inertial&amp;gt;&#xA;             &amp;lt;origin xyz=&quot;0 0 0&quot; rpy=&quot;0 0 0&quot;/&amp;gt;&#xA;             &amp;lt;mass value=&quot;$&lt;/span&gt;{gimbal_link_mass}&quot;/&amp;gt;&#xA;             &amp;lt;inertia ixx=&quot;0.1&quot; ixy=&quot;0.0&quot; ixz=&quot;0.0&quot; iyy=&quot;0.1&quot;  iyz=&quot;0.0&quot; izz=&quot;0.1&quot;/&amp;gt;&#xA;         &amp;lt;/inertial&amp;gt;&#xA;     &amp;lt;/link&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;incorrect:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;     &amp;lt;link name=&quot;&lt;span class=&quot;math-container&quot;&gt;${leg_name}_psi_link&quot;&amp;gt;&#xA;     &amp;lt;visual&amp;gt;&amp;lt;geometry&amp;gt;&amp;lt;sphere radius=&quot;.01&quot;/&amp;gt;&amp;lt;/geometry&amp;gt;&amp;lt;/visual&amp;gt;&#xA;     &amp;lt;collision&amp;gt;&amp;lt;geometry&amp;gt;&amp;lt;sphere radius=&quot;.005&quot;/&amp;gt;&amp;lt;/geometry&amp;gt;&amp;lt;/collision&amp;gt;&#xA;     &amp;lt;origin xyz=&quot;0 0 0&quot; rpy=&quot;0 0 0&quot;/&amp;gt;&#xA;     &amp;lt;mass value=&quot;$&lt;/span&gt;{gimbal_link_mass}&quot;/&amp;gt;&#xA;         &amp;lt;inertia ixx=&quot;0.1&quot; ixy=&quot;0.0&quot; ixz=&quot;0.0&quot; iyy=&quot;0.1&quot; iyz=&quot;0.0&quot; izz=&quot;0.1&quot;/&amp;gt;&#xA;     &amp;lt;/link&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;additional notes:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;un-actuated joints should not have a &amp;lt;&lt;em&gt;transmission&lt;/em&gt;&gt; tag &lt;/li&gt;&#xA;&lt;li&gt;gazebo will not load links with zero mass&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="15605" LastActivityDate="2018-11-14T02:07:11.777" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16698" PostTypeId="1" AcceptedAnswerId="16702" CreationDate="2018-11-14T21:43:04.073" Score="5" ViewCount="926" Body="&lt;p&gt;I’m looking to develop an AHRS for which I’m using a magnetometer to correct for heading errors. I wanted to check that the magnetometer I'm using is functioning to the level of accuracy (+- 1 degree) that I’m aiming for, before doing any other development. However, the heading output from the magnetometer appears noisy when I test it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To test the heading output from the magnetometer I’ve placed the magnetometer on the floor of a what I believe is a magnetically free environment. I’ve then collected magnetometer data for about 5mins - I’m using a pololu development board with a LIS3MDL magnetometer connected to an Arduino UNO. I’ve then used the atan2 function in Matlab to calculate the heading (multiplying by 180/pi to output the answer in degrees). When I look at the heading output the max and min of the data show a range of over 3 degrees. I’ve not calibrated the magnetometer, but my understanding is that calibration would only provide a bias and scaling, therefore any calibrated result would still be subject to the same noise. The magnetometer is not being moved during the test so I assumed that irrespective of the pitch, roll and heading of the device if the magnetometer is physically capable of giving me 1 degree heading it should output a relatively constant heading value over the test.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My questions are:&#xA;- does this seem a reasonable way of testing the heading accuracy?&#xA;- can I filter the magnetometer data to reduce the noise? If so what filter (I was thinking of a moving average filter) should I use and what constraints/limitations are there on how it’s used?&#xA;- Should a good magnetometer be less noisy than this and therefore not require any filtering?&lt;/p&gt;&#xA;" OwnerUserId="21594" LastEditorUserId="9720" LastEditDate="2018-11-15T20:49:14.830" LastActivityDate="2018-11-15T20:49:14.830" Title="Noisy magnetometer data" Tags="&lt;sensors&gt;&lt;noise&gt;&lt;magnetometer&gt;&lt;filter&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16699" PostTypeId="2" ParentId="12851" CreationDate="2018-11-15T09:53:41.487" Score="0" Body="&lt;p&gt;&lt;strong&gt;Setup CLion with ROS&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;is a nice description on ROS Answers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://answers.ros.org/question/284786/setup-clion-with-ros/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://answers.ros.org/question/284786/setup-clion-with-ros/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="21655" LastActivityDate="2018-11-15T09:53:41.487" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16702" PostTypeId="2" ParentId="16698" CreationDate="2018-11-15T20:41:15.213" Score="4" Body="&lt;p&gt;First, let's look at if your findings seem reasonable given the datasheet specifications for the sensor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For this, I'll assume that &lt;a href=&quot;https://en.wikipedia.org/wiki/Gauss_(unit)#Typical_values&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia is generally correct&lt;/a&gt; and that the strength of Earth's magnetic field is on the stronger end of the range given (0.25 to 0.60 gauss), so I'll use 0.6 gauss. Then I'll also assume that +Y is oriented to magnetic North and +X is oriented to magnetic East. Finally, I'll assume that your atan2 function is &lt;code&gt;atan2(yAxis, xAxis)&lt;/code&gt;, and that you're negating that output (to get positive angles in the &lt;em&gt;clockwise&lt;/em&gt; direction) and offsetting by 90 degrees (to get zero at magnetic North). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, &lt;a href=&quot;https://www.st.com/resource/en/datasheet/lis3mdl.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;what does the datasheet say&lt;/a&gt;? For &quot;RMS noise,&quot; it's stating you should expect +/- 3.2 mgauss on the x- and y-axes. What does this work out to be? Well, assuming you have your sensor setup as described above, you would &lt;em&gt;expect&lt;/em&gt; to have a y-axis reading of 0.6 gauss and an x-axis reading of 0.0 gauss. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your noise could alter those readings, though! Worst case scenario here is reducing your y-axis reading from 0.6 gauss to (0.6 - 0.0032) = 0.5968 gauss, and a then having the x-axis &quot;boosted&quot; to +/- 3.2 mgauss, or 0.0032 gauss. This would then give a reading of:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;minReading = -atan2(0.5968, -0.0032)*(180/pi) + 90; % Negate and offset to get to compass headings&#xA;maxReading = -atan2(0.5968, 0.0032)*(180/pi) + 90;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This gives a min/max reading of -0.3 to 0.3 degrees. This doesn't confirm your findings! What's going on? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The issue is that RMS noise is the &lt;strong&gt;average&lt;/strong&gt; noise. If you're considering worst-case, then you should consider the &lt;strong&gt;peak&lt;/strong&gt; noise values you can expect to see. When you begin to talk about &lt;em&gt;expected values&lt;/em&gt; you enter the land of &lt;em&gt;statistics&lt;/em&gt;. &lt;a href=&quot;https://www.analog.com/media/en/training-seminars/tutorials/MT-048.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here is an application note from Analog Devices&lt;/a&gt; and here's &lt;a href=&quot;https://training.ti.com/system/files/docs/1312%20-%20Noise%202%20-%20slides.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;another application note from Texas Instruments&lt;/a&gt; that both say the same thing (pages 5 and 4, respectively): &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Multiply your RMS noise value by 6 to convert to peak-to-peak noise.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Be careful here, because now we go from a +/- RMS noise to a &lt;strong&gt;peak-to-peak&lt;/strong&gt; noise. The peak-to-peak values &lt;em&gt;already include&lt;/em&gt; the positive and negative range. You don't go +/- a peak-to-peak value because it already spans &lt;em&gt;peak negative&lt;/em&gt; to &lt;em&gt;peak positive&lt;/em&gt;. Now if you want to estimate the peak negative value you would use &lt;strong&gt;half&lt;/strong&gt; of the peak-to-peak value. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, what does this work out to be? First, convert from RMS to peak-to-peak:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;noiseP2P = 6*noiseRMS;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then your max noise peak is (the positive) half and your min noise peak is (the negative) half of the peak-to-peak signal:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;minNoise = -noiseP2P/2;&#xA;maxNoise = noiseP2P/2;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And then finally re-calculate the &lt;code&gt;minReading&lt;/code&gt; and &lt;code&gt;maxReading&lt;/code&gt; values from before:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;noiseRMS = 0.0032;&#xA;noiseP2P = noiseRMS*6.6;&#xA;minNoise = -noiseP2P/2;&#xA;maxNoise = noiseP2P/2;&#xA;&#xA;minReading = -atan2(0.6 + minNoise, minNoise)*(180/pi) + 90;&#xA;maxReading = -atan2(0.6 + minNoise, maxNoise)*(180/pi) + 90;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This gives a range of almost 2 degrees. If the Earth's magnetic field is weaker in your area than the upper limit given by Wikipedia then you'll get a different (larger) range. At the lower limit, 0.25 gauss, you get a range of 5 degrees!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, given the numbers above, I would say that your observation of a 3 degree spread is normal and to be expected for the device you have.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can use the same method to analyze other potential magnetometers and compare the expected performance of those versus your project's performance needs, etc. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding techniques to mitigate, you can do anything from a simple &lt;a href=&quot;http://my.execpc.com/~steidl/robotics/first_order_lag_filter.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;lag filter&lt;/a&gt; (choose an alpha value like 0.05 and then do &lt;code&gt;filterValue = alpha*newReading + (1-alpha)*filterValue&lt;/code&gt;) to a moving average like you mentioned, to a Kalman filter, to the &lt;a href=&quot;http://x-io.co.uk/open-source-imu-and-ahrs-algorithms/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Madgwick filter&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you choose to implement filter-wise is dependent on your project needs, filter time constant/response, filter complexity, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may find that it is not possible to produce a filter that will simultaneously respond as quickly as you need while maintaining an acceptable noise floor. If this is the case then you need to evaluate other devices that feature a faster base response and/or a lower noise floor. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-11-15T20:41:15.213" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16703" PostTypeId="1" CreationDate="2018-11-16T14:03:37.123" Score="0" ViewCount="625" Body="&lt;p&gt;I can't find out the response so I am posting here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My post kind of follow this one : &lt;a href=&quot;https://robotics.stackexchange.com/questions/10974/adding-magnetic-field-vector-to-a-kalman-filter&quot;&gt;Adding magnetic field vector to a Kalman filter&lt;/a&gt;&#xA;but I already know that I don't have to put the magnetometer in a state vector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am working on a implementation of an Extended Kalman filter. So far I have integrated a gyroscope, an accelerometer and encoders wheels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I don't know what are the equation for the update state to integrate a magnetometer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So far :&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;I have seen some kind of work where magnetometer are fuse with accelerometer.&#xA;But I don't have any formulas and I am kind of stuck...&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I have seen some kind of work where there is no quaternion but I can't afford this modelisation cause of gimbal lock and I have all my work already in quaternion...&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance for help. Don't hesitate if you need complementary details.&lt;/p&gt;&#xA;" OwnerUserId="21627" LastActivityDate="2020-01-15T19:21:13.147" Title="How to add a magnetometer in an Extended Kalman filter for innovation update?" Tags="&lt;kalman-filter&gt;&lt;magnetometer&gt;" AnswerCount="3" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16704" PostTypeId="1" CreationDate="2018-11-16T16:49:53.297" Score="0" ViewCount="129" Body="&lt;p&gt;I am trying to determine the Jacobian for a planar bipedal robot. I'm modeling it as a floating base system with 5 links (floating base and 2 two-link legs), which seems to be the common approach. I know that the dimension of the Jacobian must be 5 by 3 since I have 5 links and 3 degrees of freedom in the plane. However, I'm not sure how to proceed because I've only dealt with linkages that are always connected to the base. Any help would be appreciated. Thank you.&lt;/p&gt;&#xA;" OwnerUserId="18443" LastActivityDate="2018-11-17T15:27:01.263" Title="How to derive the Jacobian for a floating base linkage?" Tags="&lt;jacobian&gt;&lt;walking-robot&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16707" PostTypeId="2" ParentId="16704" CreationDate="2018-11-17T15:27:01.263" Score="1" Body="&lt;p&gt;Actually since a Jacobian maps joint velocities to workspace velocities (linear and angular) of a point of interest (for example, the robot's center of gravity), in this case, your Jacobian will have the dimension of &lt;span class=&quot;math-container&quot;&gt;$3 \times 4$&lt;/span&gt;, where 3 is the number of your workspace degrees-of-freedom (2 translation axes + 1 rotation axis) and 4 is the number of joints.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think first you may want to ask yourself what your point of interest is. Is it the center of the body (base link)? Is it the center of gravity of the whole robot? Then you can start your derivation of a Jacobian equation from there.&lt;/p&gt;&#xA;" OwnerUserId="7610" LastActivityDate="2018-11-17T15:27:01.263" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16710" PostTypeId="1" CreationDate="2018-11-17T20:02:13.213" Score="3" ViewCount="757" Body="&lt;p&gt;I'm making a drawing robot and have hooked up my steppers to each axis. I'm using the grbl shield with arduino and nema 17 steppers. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Initially the firmware was set at 250 steps/mm but with my setup this would move my axis by 50mm. Therefore I only need 5 step/mm. However now that I have put it to 5mm my steppers run very slowly and vibrate quite a bit. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the case even when I command an axis to move a set distance. For example, with 250steps/mm I can tell the axis to move 2mm in universal gcode sender (actually 100mm physically) and it will move swiftly and quietly. However with the setting at 5 steps/mm I can command it to move 100mm and it will be very slow, loud and vibrate like hell. This behaviour is seen even without changing any feedrate, max acceleration and speed settings. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any ideas how I could fix the issue? Is 5 step/mm reasonable? I'm just using standard T-20 belts and pulleys so other people must also have this setting. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance!&lt;/p&gt;&#xA;" OwnerUserId="21669" LastEditorUserId="21669" LastEditDate="2018-11-17T23:46:53.897" LastActivityDate="2021-02-18T21:01:20.123" Title="CNC stepper motors are loud and slow after decreasing the steps/mm from 250 to 5" Tags="&lt;arduino&gt;&lt;stepper-motor&gt;&lt;industrial-robot&gt;&lt;electronics&gt;&lt;cnc&gt;" AnswerCount="1" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="16713" PostTypeId="1" CreationDate="2018-11-18T15:51:43.457" Score="0" ViewCount="107" Body="&lt;p&gt;What is the rectangular-shaped joint under the M1? What does it do, and what is its DOF?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/A2HDK.png&quot; alt=&quot;robot arm joints&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="16424" LastEditorUserId="17029" LastEditDate="2018-11-19T19:14:39.073" LastActivityDate="2018-12-19T20:01:40.317" Title="What is the rectangular-shaped joint in this diagram?" Tags="&lt;robotic-arm&gt;&lt;joint&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16714" PostTypeId="2" ParentId="16713" CreationDate="2018-11-18T17:16:44.400" Score="2" Body="&lt;p&gt;That diagram appears to be taken from the paper &lt;a href=&quot;https://www.researchgate.net/publication/289674591_DESIGN_AND_DEVELOPMENT_OF_A_MECHANISM_OF_ROBOTIC_ARM_FOR_LIFTING_PART5&quot; rel=&quot;nofollow noreferrer&quot;&gt;Design and development of a Mechanism of Robotic Arm for Lifting (Part 5)&lt;/a&gt;, by M.H.Ismail et al - which is available to download as a pdf file from ResearchGate.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;That paper also includes the following free-body diagram of the arm:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/62ARC.png&quot; alt=&quot;Free Body Diagram&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is, perhaps, easier to see from this diagram that the 'rectangular-shaped' joint under M1 in your diagram:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/2iSg6.png&quot; alt=&quot;Revolute joint&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;is simply a revolute joint, constrained to rotate in a single plane, allowing the arm to be rotated on the base.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The depiction is different to the other revolute joints because it shows a side-view of the joint, rather than an end-view as we have in the other three revolute joints.&lt;/p&gt;&#xA;" OwnerUserId="17029" LastActivityDate="2018-11-18T17:16:44.400" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16716" PostTypeId="1" AcceptedAnswerId="16722" CreationDate="2018-11-19T06:36:39.623" Score="1" ViewCount="213" Body="&lt;p&gt;I have a set of N robot poses between point A and B. I use a global localization technique to estimate poses at point A and B. As a result, I have a new corrected pose B'. Please see the figure below.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ticRZ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ticRZ.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;Considering the poses A and B' are now fixed, how do I smooth out the in-between poses such that there is a smooth transition between A and B'? I know the relative poses between each node in the white trajectory. Please help me formulate this problem. Is this a graph optimization problem? or is there any other simple approach for smoothing out the jump? &lt;/p&gt;&#xA;" OwnerUserId="15192" LastEditorUserId="15192" LastEditDate="2018-11-20T00:07:08.727" LastActivityDate="2018-11-21T14:26:12.440" Title="smoothing the robot poses inbetween two known poses" Tags="&lt;mobile-robot&gt;&lt;slam&gt;&lt;pose&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16717" PostTypeId="2" ParentId="16716" CreationDate="2018-11-19T11:43:55.007" Score="3" Body="&lt;p&gt;You could try to use a bezier curve (&lt;a href=&quot;https://en.wikipedia.org/wiki/B%C3%A9zier_curve&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/B%C3%A9zier_curve&lt;/a&gt;) to interpolate with a curve and via points between A and B'. Also, is this a mobile robot or a robot arm? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do you need to go through all the points ? &lt;/p&gt;&#xA;" OwnerUserId="21229" LastActivityDate="2018-11-19T11:43:55.007" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16720" PostTypeId="2" ParentId="16716" CreationDate="2018-11-19T16:00:37.730" Score="3" Body="&lt;p&gt;To get a smooth trajectory you should not have jumps in acceleration and because you are talking about pose both rotational and translational accelerations should be smooth. You can achieve this with interpolation.&#xA;If you know the initial position &amp;amp; velocity and also final position &amp;amp; velocity, you have four boundary conditions and there for you can create a polynomial of degree 3 to represent the path between the two points.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$q(t) = a_0 + a_1 t + a_2 t^2 + a_3 t^3 $$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where you can define the four parameters from the boundary conditions that you have.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$q(t_0) = a_0 + a_1 t_0 + a_2 t_0^2 + a_3 t_0^3 = q_0  $$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ \dot q(t_0) = a_1 + a_2 t_0 + a_3 t_0^2 = \dot q_0 $$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ q(t_f) = a_0 + a_1 t_f + a_2 t_f^2 + a_3 t_f^3 = q_f$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$\dot q(t_f) = a_1 + a_2 t_f + a_3 t_f^2 = \dot q_f$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By solvinfg this problem you will get a smooth trajectory. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www-lar.deis.unibo.it/people/cmelchiorri/Files_Robotica/FIR_07_Traj_1.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www-lar.deis.unibo.it/people/cmelchiorri/Files_Robotica/FIR_07_Traj_1.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15592" LastActivityDate="2018-11-19T16:00:37.730" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16722" PostTypeId="2" ParentId="16716" CreationDate="2018-11-20T11:00:27.867" Score="1" Body="&lt;p&gt;You are right. That is absolutly graph optimization problem. Sorry for the answers above but you don't need spline or acceleration for this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The graph optimization will find 5 poses above in your figure that reduce your sensor observation error at B as well as all the other inter poses. Graph optimization usually includes constraints on relative poses. That does exactly do the job you want.&lt;/p&gt;&#xA;" OwnerUserId="19219" LastEditorUserId="19219" LastEditDate="2018-11-21T14:26:12.440" LastActivityDate="2018-11-21T14:26:12.440" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16723" PostTypeId="1" CreationDate="2018-11-20T13:36:24.107" Score="4" ViewCount="142" Body="&lt;p&gt;I have a scenario where I have multiple robots, and they have to pick and drop some items at specified locations as shown in Figure.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/1ySvG.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1ySvG.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are 4 jobs to be done for this particular instance. How can I go about planning the shortest optimized path for carrying out these jobs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am a beginner in path planning and am finding it difficult to come up with a solution that can work in this case. I can use dikstra and A* etc to find all possible paths but in my case I have a constraint that the destination node cant be reached if the source node for that particular destination node hasnt been visited first.&lt;/p&gt;&#xA;" OwnerUserId="16715" LastEditorUserId="16715" LastEditDate="2018-11-21T14:25:25.633" LastActivityDate="2018-11-27T09:32:25.823" Title="How to calculate shortest path between multiple pick and drop destinations" Tags="&lt;mobile-robot&gt;&lt;algorithm&gt;&lt;path-planning&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16724" PostTypeId="2" ParentId="16703" CreationDate="2018-11-20T23:18:19.387" Score="1" Body="&lt;p&gt;A magnetometer measures the local magnetic field. When assuming that the Earth is the only magnetic source, then this magnetic field should be constant in world coordinates. But the magnetometer measures the magnetic field in local body fixed coordinates. The world and body coordinates should be related via the unit quaternion. So the magnetometer measures a constant vector &lt;a href=&quot;https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation&quot; rel=&quot;nofollow noreferrer&quot;&gt;rotated by the quaternion&lt;/a&gt;. In order to find this constant vector you would need to do some calibration at the start of each flight.&lt;/p&gt;&#xA;" OwnerUserId="1487" LastActivityDate="2018-11-20T23:18:19.387" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16725" PostTypeId="2" ParentId="15586" CreationDate="2018-11-21T02:13:14.247" Score="1" Body="&lt;p&gt;You can linearize and decouple the system about equilibrium under the following assumptions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Small angle approximation: &lt;span class=&quot;math-container&quot;&gt;$\sin(x) \approx x$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\cos(x) \approx 1$&lt;/span&gt; &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Angular acceleration due to actuators only: &lt;span class=&quot;math-container&quot;&gt;$\dot{p} = \frac{U_2}{I_{xx}}$&lt;/span&gt;,  &lt;span class=&quot;math-container&quot;&gt;$\dot{r} = \frac{U_3}{I_{yy}}$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$\dot{p} = \frac{U_4}{I_{zz}}$&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="21285" LastActivityDate="2018-11-21T02:13:14.247" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16726" PostTypeId="2" ParentId="16723" CreationDate="2018-11-21T02:26:40.720" Score="2" Body="&lt;p&gt;Side note:  If there are multiple objects at A and C, so the robots continue circulating to move the objects cyclically, then ABCD and CDAB are the same paths.   In either case (single objects at A and C or multiple objects), just assign a weight to each segment that equals the distance travelled to go from source to destination.  Add the segment lengths and choose the minimum.  With this few number of nodes, an exhaustive search method like this would work.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a thought exercise, and to confirm this method, assume the distance between A and B is very short, but that D is far away from A.   I’ll choose 1 for segment AB and 10 for segment AD.   In this case, let’s say that BD is 10.5 so the geometry makes sense.   Let’s just compare those paths that begin with travelling along CA (but you’ll have to do this for all paths).  Your choices are CABD and CADB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For these two paths, CA is the same so we can disregard it for this exercise.   So you are left with ABD vs ADB.  ABD lengths are 1 + 10.5 = 11.5.   ADB lengths are 10 + 10.5 = 20.5.   So in this arrangement, CABD would be more optimal.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition to the distances between nodes, you may have to consider additional weights that stand for the distances between robots 1 and 2 and the various starting node options. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As the number of nodes increases, more advanced methods and heuristics would be needed rather than an exhaustive search.   &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2018-11-21T02:26:40.720" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16727" PostTypeId="1" CreationDate="2018-11-21T05:31:33.847" Score="1" ViewCount="472" Body="&lt;p&gt;While formulating an answer to this question let us consider the parts and the function of the printer during its basic process. We tell the printer what we want it to do, &quot;print this&quot;. The printer then produces the product we told it to produce. The printer is complex, being composed of multiple motors, and lever mechanisms which one might find in a robot. Printers, especially all-in-one printers are capable of multiple tasks. Printers such as these also have a sensor which &quot;sees&quot; an object and can replicate the object. There may now exist combinations of sensors which &quot;see&quot; and possibly &quot;feel&quot; an object which can be replicated in 3D. These are tasks which historically were performed by humans.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The answer should be more than yes or no, including explanation or proof.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In response to posts regarding this question being a duplicate of &lt;a href=&quot;https://robotics.stackexchange.com/questions/1654/what-is-the-difference-between-a-robot-and-a-machine&quot;&gt;What is the difference between a Robot and a Machine?&lt;/a&gt;, it is not. I am asking the reader if this particular device known as a printer is considered a type of robot. However, the suggested duplicate does offer more information to help answer this question. Also, it is suggested in the proposed duplicate post that THAT post should be placed in the philosophy exchange. I see the logic in my post and the other being placed there. I do also think these questions should be posted here because they are specific to robotics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for clarification, I am leaning toward personally defining printers, especially newer models, all-in-ones, and various 3d printing devices as robots. I am asking in order to clarify my own understanding and see if others agree. I also am seeking to understand the technology better and am having a hard time finding resources to study. I asked a question about the sort of courses I might take at school in the Academia exchange and no one knew ( &lt;a href=&quot;https://academia.stackexchange.com/questions/120366/what-courses-would-teach-me-how-to-better-understand-computer-printers&quot;&gt;https://academia.stackexchange.com/questions/120366/what-courses-would-teach-me-how-to-better-understand-computer-printers&lt;/a&gt; ) So, I came here thinking I might need to take robotics courses to really learn how to make a printer for the future.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;FooBar has the best answer so far in the comments:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;Most printers have a very limited set of sensors (some limit switches and temperature sensors), but most are not even able to detect failed prints. So they are not able to sense or react to their environment.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Furthermore, thank you all for your comments/answers. I have found what I was looking for here.&lt;/p&gt;&#xA;" OwnerUserId="21698" LastEditorUserId="37" LastEditDate="2018-11-28T12:12:59.600" LastActivityDate="2018-11-28T12:12:59.600" Title="Is a printer a robot?" Tags="&lt;automation&gt;&lt;manufacturing&gt;&lt;3d-printing&gt;" AnswerCount="1" CommentCount="11" ClosedDate="2018-11-28T12:13:04.803" ContentLicense="CC BY-SA 4.0" />
  <row Id="16728" PostTypeId="1" CreationDate="2018-11-21T08:57:41.167" Score="1" ViewCount="77" Body="&lt;p&gt;I'm reading and trying to implement the paper &lt;a href=&quot;https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=6671767&quot; rel=&quot;nofollow noreferrer&quot;&gt;Monofusion&lt;/a&gt;(V. Pradeep, C. Rhemann, S. Izadi, C. Zach, M. Bleyer and S. Bathiche, &quot;MonoFusion: Real-time 3D reconstruction of small scenes with a single web camera,&quot; 2013 IEEE International Symposium on Mixed and Augmented Reality (ISMAR), Adelaide, SA, 2013, pp. 83-88.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this paper, in the map initialization phase the system extracts MxM patches of FAST features in 3-level pyramid images and while the user slowly moves the camera, it also matches feature points by ZNCC score from patches in the initial and current frames, computes the essential matrix, recovers the initial camera pose by SVD and triangulates the matched features to create 3D landmarks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They said the system automatically bootstraps only once a sufficient motion baseline is reached. However I don't understand how to get the &quot;sufficient motion baseline&quot; from this phase.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I understand, it seems like the system automatically finishes the initialization when the actual baseline between the initial camera frame and current camera frame has reached some threshold.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does this mean it computes the relative translation between the initial and current frame using the 3D triangulated points?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If this question is silly sorry in advance, I’m a newbie in the SLAM world.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any advice is welcome.&lt;/p&gt;&#xA;" OwnerUserId="21699" LastActivityDate="2018-11-21T08:57:41.167" Title="Map initialization problem in Mono SLAM" Tags="&lt;slam&gt;&lt;visual-odometry&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16730" PostTypeId="1" AcceptedAnswerId="16732" CreationDate="2018-11-21T13:17:51.930" Score="0" ViewCount="65" Body="&lt;p&gt;I have 2 sensors : one has 2D coordinate system and the other has a 3D coordinate system (not same origin). &lt;br/&gt;&lt;br/&gt;&#xA;Knowing the positions of some corresponding target points (used as fixed reference) in both coordinate systems,&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How can I get the transformation matrix T (Rotation, translation and scaling) that would map the 3D point &lt;code&gt;P3D&lt;/code&gt; to a 2D point &lt;code&gt;P2D&lt;/code&gt;? &lt;br/&gt; So that : &lt;strong&gt;&lt;code&gt;P2D = T * P3D&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="16650" LastEditorUserId="16650" LastEditDate="2018-11-22T10:20:42.573" LastActivityDate="2018-11-22T10:20:42.573" Title="Transformation matrix between a 2D and a 3D coordinate system" Tags="&lt;sensors&gt;&lt;computer-vision&gt;&lt;calibration&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16731" PostTypeId="2" ParentId="16727" CreationDate="2018-11-21T14:07:07.373" Score="-1" Body="&lt;p&gt;3d printers are without any doubt robots. The open question is, why don't they are behave so in reality? RepRap like printers for rapid prototyping are available since the year 2005. And additional robot arms who can take the object out of the shelf are also available as lowcost kit. The main problem isn't the hardware itself but the software. This piece of technology is called the printer driver which runs on the lowlevel side of the machine and on top of the firmware is the printing driver which has to control the device but also the robot arm in front of it. Providing the action commands for such a rapid prototyping assembly line is not an easy task. Each cnc-motor has a position and a torque and it's complicated to coordinate them all, especially in autonomous mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If seems that the bottleneck of printers isn't the hardware itself, which runs stable since decades, but the reason why printers are not recognized as human like robots has to do with the missing Artificial Intelligence software. That means, if someone is able to program the ROS software package for controlling a reprap 3d printer, he will transform the piece of plastic into a living organism which can reproduce itself. So the problem isn't the device but the firmware. That is an algorithm, which puts control commands into the machine.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2018-11-21T14:07:07.373" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="16732" PostTypeId="2" ParentId="16730" CreationDate="2018-11-21T14:24:45.570" Score="1" Body="&lt;p&gt;You need two things.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;A transformation from 3D device coordinate to 2d device coordinate.&#xA;&lt;span class=&quot;math-container&quot;&gt;$$p_{C}=T*p_{L}$$&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Projective matrix&lt;br&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$u_{C}=P*p_{C}$$&lt;/span&gt;&#xA;u is 2D location and p is 3D location.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;To find 1 you need to do a 3D device to 2d device calibration. The method depends on your sensor configuration. Projective matrix can be found from your camera model.  &lt;/p&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2018-11-21T14:24:45.570" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16733" PostTypeId="1" CreationDate="2018-11-21T15:13:33.160" Score="1" ViewCount="82" Body="&lt;p&gt;I am stuck at computing the translation and rotation of a robot moving onto an ellipse given by: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;p(t) =(m) + \cos(t)∗a + \sin(t)*b&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where m = center of ellipse and the two axes a (horizontal) and b (vertical).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the moment I am using derivation &lt;span class=&quot;math-container&quot;&gt;$p'(t)$&lt;/span&gt; for calculating the translation, like &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;p'(t)_x = -\sin(t)*a \\&#xA;p'(t)_y = \cos(t)*b&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;p'(t) = \sqrt{p'(t)_x^2 + p'(t)_y^2}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and rotation velocity, with &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;p''(t)_x = -\cos(t)*a \\&#xA;p''(t)_y = -\sin(t)*b&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;p''(t) = \frac{p'(t)_x p''(t)_y - p''(t)_x p'(t)_y}{ (p'(t)_x)^2 + (p'(t)_y)^2} $$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(see formula) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the robot is just moving in strange curls instead of an ellipse.&#xA;If anyone needs the full code just say so.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\omega = \dot{\phi} = \frac{\dot{d_x}\ddot{d_y} - \ddot{d_x}\dot{d_y}}{\dot{d_x}^2+\dot{d_y}^2}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;" OwnerUserId="21708" LastEditorUserId="9720" LastEditDate="2018-11-21T18:16:55.247" LastActivityDate="2018-11-21T22:59:55.057" Title="How do I compute the translation and rotation velocities of a robot" Tags="&lt;kinematics&gt;&lt;two-wheeled&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16734" PostTypeId="2" ParentId="16733" CreationDate="2018-11-21T22:59:55.057" Score="1" Body="&lt;p&gt;As Chuck said you are using the parametric form of the ellipse &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$p(t) = (m) + cos(t)*a + sin(t)*b$&lt;/span&gt;  the &lt;span class=&quot;math-container&quot;&gt;$t$&lt;/span&gt; doesn't represent the time but the eccentric anomaly. But from this equation you can create a matrix for &lt;span class=&quot;math-container&quot;&gt;$t\epsilon [0,2\pi]$&lt;/span&gt; and calculate the points on the eclipse from the equations &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$ x = a*cos(t) $&lt;/span&gt; , &lt;span class=&quot;math-container&quot;&gt;$ y = b*sin(t) $&lt;/span&gt; then you have &lt;span class=&quot;math-container&quot;&gt;$(x,y)$&lt;/span&gt; points and by setting a specific time that you want to go from one point to another you can find the velocities &lt;span class=&quot;math-container&quot;&gt;${\Delta x\over \Delta t} , {\Delta x\over \Delta t} $&lt;/span&gt;. Not the best way to do it, but it is something.&lt;/p&gt;&#xA;" OwnerUserId="15592" LastActivityDate="2018-11-21T22:59:55.057" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16736" PostTypeId="1" CreationDate="2018-11-22T09:32:56.030" Score="2" ViewCount="137" Body="&lt;p&gt;I am working on a project in which I want to use &lt;a href=&quot;https://en.wikipedia.org/wiki/Full_state_feedback&quot; rel=&quot;nofollow noreferrer&quot;&gt;State Feedback Control&lt;/a&gt; to position control a BLDC motor in combination with a motor controller. I want to do this since translating time domain specifications into controller gain using this method is way more exact than the heuristic method of PID tuning. I would run the current control PD on the microcontroller and the state feedback on a microcontroller. For this to work, a state space representation needs to be made of the whole BLDC system. Using the control scheme shown below, I wanted to determine the state space representation of the green box, where the current command is the input, as shown by the red arrow, and the motor position is the output. I have done much research and have &lt;a href=&quot;http://webfiles.portal.chalmers.se/et/MSc/BaldurssonStefanMSc.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;found complicated versions&lt;/a&gt; which will require also modeling the inverter, or simple &lt;a href=&quot;http://ctms.engin.umich.edu/CTMS/index.php?example=MotorPosition&amp;amp;section=SystemModeling&quot; rel=&quot;nofollow noreferrer&quot;&gt;2nd/3rd order systems&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/mUh5f.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/mUh5f.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My questions are: &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;What is the correct state space model to use?   &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Would you advise to take the other approach of applying system identification methods to determine the state space? &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="15496" LastEditorUserId="18235" LastEditDate="2018-11-23T09:15:33.290" LastActivityDate="2021-04-16T13:49:37.020" Title="State Space Model of Brushless DC" Tags="&lt;brushless-motor&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16737" PostTypeId="1" CreationDate="2018-11-22T13:05:13.980" Score="3" ViewCount="106" Body="&lt;p&gt;I have a very small and cheap robot and I wanted to mount a 2D LiDAR on a bottom of it (3cm above the ground). It seems to be great as during the mapping the lidar will detect even small elevations from the ground.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But what happens when a chair will be in front of this LiDAR? I guess it will see only its legs due to a limited optical window (as it is 2D).&#xA;How can I cope with that? So my robot will not try to go under the chair.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the LiDAR: &lt;a href=&quot;https://www.slamtec.com/en/Lidar/A3&quot; rel=&quot;nofollow noreferrer&quot;&gt;LINK&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="21080" LastActivityDate="2019-02-11T12:49:35.063" Title="How to cope with an optical window limitation on 2D LiDAR?" Tags="&lt;slam&gt;&lt;lidar&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16742" PostTypeId="2" ParentId="16723" CreationDate="2018-11-23T17:58:54.543" Score="1" Body="&lt;p&gt;One approach would be to use A* to plan a path to the pickup point and then again to plan a path to the dropout off point all the while ignoring that there are other moving agents. That should be pretty straightforward. From there you need to concern yourself with collision avoidance. For that you could look at &lt;a href=&quot;http://arl.cs.utah.edu/research/grca/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Generalized Reciprocal Collision Avoidance&lt;/a&gt; (GRCA). If I recall correctly you should be able to use the A* solution to jump start the GRCA calculations by using it as a nominal trajectory.&lt;/p&gt;&#xA;" OwnerUserId="177" LastActivityDate="2018-11-23T17:58:54.543" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16744" PostTypeId="1" AcceptedAnswerId="16764" CreationDate="2018-11-24T02:52:44.600" Score="0" ViewCount="243" Body="&lt;p&gt;I want to solve a trajectory smoothing problem using graph optimization. I have asked questions on how to solve this problem in a &lt;a href=&quot;https://robotics.stackexchange.com/questions/16716/smoothing-the-robot-poses-inbetween-two-known-poses&quot;&gt;previous post&lt;/a&gt; and got directed towards using graph optimization. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have, say 5 poses between points A and B. Hence there are 5 graph nodes. I know the relative poses between each graph node as well. I got a new pose for the 5th node point B'. I want to elastically move the entire trajectory with points A and B' as fixed. Please see pic &lt;a href=&quot;https://i.stack.imgur.com/ticRZ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. I am stuck on how to formulate the information matrix needed for each node pair. I have not taken a robotics course and hence finding it difficult to comprehend the documents about graph-slam. Please help me with the questions below &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am planning to use ceres c++ library for pose graph optimization (especially the pose_graph_3d executable). I was trying to formulate my problem into a pose graph. &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;I have set up the nodes in the following format &lt;em&gt;VERTEX_SE3:QUAT ID x y z q_x q_y q_z q_w&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;I know the relative poses between the nodes. I want to setup the relative constraint between the nodes in the format&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;EDGE_SE3:QUAT ID_a ID_b x_ab y_ab z_ab q_x_ab q_y_ab q_z_ab q_w_ab I_11 I_12 I_13 ... I_16 I_22 I_23 ... I_26 ... I_66&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;3&quot;&gt;&#xA;&lt;li&gt;&lt;p&gt;I am able to setup the format upto the relative position and relative quaternions for a node pair. But how to calculate the information matrix? I do not have landmarks and is not a SLAM problem.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I understand that the information matrix is the inverse of covariance matrix. I want to provide an equal amount of uncertainty to each node relative poses and if am correct, the flexibility of my trajectory will depend on how big is this uncertainty. But what are the variables the covariance matrix describes? Is it the relative position x y z and relative orientation euler angles rx ry rz ? &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;My understanding is that I have to setup the information matrix myself empirically. If that is so, what value can I set it to?   &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Edit1: I set up all the information matrices to Identity I. I then took the vertices and constraints and formulated a graph-slam problem in .g2o format. I perturbed the last node alone from B to B'. I ran the graph optimization on it, but the optimized trajectory resembled AB. Please find the &lt;a href=&quot;https://www.dropbox.com/s/20snrqvlxp79wj7/AB.g2o?dl=0&quot; rel=&quot;nofollow noreferrer&quot;&gt;unperturbed&lt;/a&gt; and &lt;a href=&quot;https://www.dropbox.com/s/hypvycndy0jbvau/AB_.g2o?dl=0&quot; rel=&quot;nofollow noreferrer&quot;&gt;perturbed&lt;/a&gt; trajectory files in the link. The same thing happens even if I set the information matrix as a multiple of I matrix (to increase the uncertainty in 6D parameters) . I used pose_graph_3d executable of the ceres library. I expected the drift to be distributed across all the nodes. Why doesn't this happen?&lt;/p&gt;&#xA;" OwnerUserId="15192" LastEditorUserId="15192" LastEditDate="2018-12-02T10:06:18.580" LastActivityDate="2018-12-02T10:06:18.580" Title="smooth robot 3D trajectory using graph optimization" Tags="&lt;mobile-robot&gt;&lt;slam&gt;&lt;pose&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16746" PostTypeId="1" CreationDate="2018-11-24T22:56:38.250" Score="0" ViewCount="201" Body="&lt;p&gt;What is the mechanism on the front of the tracks of this robot called?  They are also tracks, but they are able to be moved by the operator, and they are able to function as tracks.  I've only seen them on iRobot's military robots, and a handful of DIY projects over the years.  Does that mean it's patented?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are a few pictures from an &lt;a href=&quot;https://duckduckgo.com/?q=irobot%20bomb%20robot&amp;amp;t=ffsb&amp;amp;iax=images&amp;amp;ia=images&quot; rel=&quot;nofollow noreferrer&quot;&gt;internet search&lt;/a&gt; that show the front flipper track (for lack of a better term):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Vav2K.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Vav2K.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Jj3DX.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Jj3DX.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/o8MZA.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/o8MZA.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10350" LastActivityDate="2018-11-25T01:39:33.977" Title="What is the front mechanism of this robot's track called?" Tags="&lt;mobile-robot&gt;&lt;mechanism&gt;&lt;tracks&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16747" PostTypeId="2" ParentId="16746" CreationDate="2018-11-25T01:39:33.977" Score="2" Body="&lt;p&gt;They seem to be called '&lt;strong&gt;&lt;em&gt;flippers&lt;/em&gt;&lt;/strong&gt;' in most of the literature.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;This &lt;a href=&quot;https://www.army-technology.com/projects/irobot-310-sugv-us/&quot; rel=&quot;nofollow noreferrer&quot;&gt;review of the iRobot 310 SUGV&lt;/a&gt; on Army Technology notes that:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The 310 SUGV has an overall length of 76.1cm and width (flippers on) of 43.7cm. The length with flippers stowed is 70.8cm.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Similarly, this 2010 research paper titled &lt;a href=&quot;https://www.researchgate.net/publication/247928186_Automatic_fine_motor_control_behaviours_for_autonomous_mobile_agents_operating_on_uneven_terrains&quot; rel=&quot;nofollow noreferrer&quot;&gt;Automatic fine motor control behaviours for autonomous mobile agents operating on uneven terrains&lt;/a&gt; also describes the attachments as 'flippers':&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/jeTJw.png&quot; alt=&quot;flippers&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="17029" LastActivityDate="2018-11-25T01:39:33.977" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16748" PostTypeId="2" ParentId="15068" CreationDate="2018-11-25T12:26:02.043" Score="1" Body="&lt;p&gt;You will need MuJoCo if you care about robust physics predictions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For UR5 robot, we have created a model for MuJoCo &lt;a href=&quot;https://github.com/roboticsleeds/mujoco_ur5_model&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. This is, however, a planar robot. We have removed the joints from UR5 and we are using it as a planar robot for now. You can use it as a starting point, however.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another solution is to use OpenRAVE simulator. We wrote a controller for UR5 specifically. It's available &lt;a href=&quot;https://github.com/roboticsleeds/ur5controller&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. OpenRAVE will probably be the best option given the controller mentioned. If you want physics-predictions it gets a bit tricky, however. But using OpenRAVE and the UR5Controller provided you will be able to plan in simulation and then execute on the real robot.&lt;/p&gt;&#xA;" OwnerUserId="18749" LastEditorUserId="18749" LastEditDate="2018-11-25T12:34:44.490" LastActivityDate="2018-11-25T12:34:44.490" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16751" PostTypeId="1" CreationDate="2018-11-26T00:47:42.923" Score="1" ViewCount="220" Body="&lt;p&gt;short version (TL;DR):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm receiving x(t) waypoints &quot;online&quot;, which I must travel through at the specified times. I need an algorithm that would plan a &lt;strong&gt;smooth&lt;/strong&gt; trajectory in-between them &lt;strong&gt;without knowing the whole trajectory in advance&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Longer version:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a 1D motion control problem. I control a DOF of a robot, and a primary design goal is for the motion to be very smooth.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A high-level controller (computer) sends my low-level motion controller a waypoint, expressed as an (x&lt;sub&gt;i&lt;/sub&gt;, t&lt;sub&gt;i&lt;/sub&gt;) pair, every N msec. I am running my control loop at a much higher rate, say every 1 msec.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because of various constraints, I am not able to get the whole trajectory in advance - &lt;strong&gt;I am getting new waypoints as the robot is moving through previous waypoints&lt;/strong&gt;. I am, however, able to receive a few waypoints in advance (say 3 or 4) so I have a short buffer (look-ahead) and not limited to working strictly with the next waypoint only.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need an algorithm that would build a &lt;strong&gt;smooth&lt;/strong&gt; trajectory in between these waypoints. 'Smooth' here means continuous velocity and continuous acceleration (which also implies bounded jerk). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have tried to implement a &lt;strong&gt;cubic spline interpolation&lt;/strong&gt; scheme, since it appears to be exactly what my problem requires: a piecewise function of 3rd degree polynomials, which are guaranteed to have continuous first and second derivatives everywhere, including at the 'stitches'. However, all the implementations I saw generate the spline based on &lt;em&gt;all&lt;/em&gt; the data points, which unlike my case, are usually known in advance. My attempts to implement &lt;em&gt;incremental&lt;/em&gt; spline generation have failed, and I'm starting to figure this is not a technical error but a mathematical impossibility. If you ask, I'll edit and try to formally explain why I think so, but this question is already quite long as it is. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, for concrete questions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Do you know if it's possible to build a cubic spline this way, incrementally, and keep its 1st and 2nd derivatives smooth?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If, as I suspect, it's impossible: What other algorithm would you suggest, that will build the trajectory incrementally, pass through all the waypoints at the specified times, while keeping everything smooth up to the 2nd derivative? Alternatively, have I defined a problem with no solution and I must relax some of the requirements?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Thank you!&lt;/p&gt;&#xA;" OwnerUserId="21739" LastActivityDate="2018-11-26T00:47:42.923" Title="Incremental (on-the-fly) smooth trajectory interpolation algorithm from waypoints?" Tags="&lt;control&gt;&lt;motion-planning&gt;&lt;algorithm&gt;" AnswerCount="0" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="16753" PostTypeId="1" CreationDate="2018-11-26T12:03:31.977" Score="2" ViewCount="98" Body="&lt;p&gt;In the paper &quot;&lt;a href=&quot;http://www.roboticsproceedings.org/rss08/p03.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;State Estimation for Legged Robots - Consistent Fusion of Leg Kinematics and IMU&lt;/a&gt;&quot;, the authors describe the application of an extended kalman filter to estimate states of a quadruped robot, where the equations used in the prediction phase of the kalman filter were equations 30 to 37:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/s1lKI.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/s1lKI.jpg&quot; alt=&quot;Prediction model equations&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where &lt;span class=&quot;math-container&quot;&gt;$(r,v,q,p_1..p_n,b_f,b_w)$&lt;/span&gt; represent the states: position of the main body, velocity, quaternion of rotation from the inertial coordinate frame to the body coordinate frame, the absolute positions of the &lt;span class=&quot;math-container&quot;&gt;$N$&lt;/span&gt; foot contact points, accelerometer bias and gyroscope bias respectively. in addition, &lt;span class=&quot;math-container&quot;&gt;$C_k$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$g$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$f_k$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$w_k$&lt;/span&gt; represent: the rotation matrix corresponding to quaternion orientation, the gravity vector, the measured quantities of the accelerometer and gyroscope respectively.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The discrete linearized error dynamics matrix &lt;span class=&quot;math-container&quot;&gt;$F_k$&lt;/span&gt; is represented by equation 44:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/LYJq1.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/LYJq1.jpg&quot; alt=&quot;Discrete linearized error dynamic matrix&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition, the authors introduce some auxiliary equations such as mappings and series, such as equation 13 which is a mapping of a rotation error vector in a quaternion, there is also the equation 20 where it is used to map the angular velocity in a matrix 4x4, and there are also equations 28 and 29 that are introduced to aid in the process of linearization and discretization of the models.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/yqKTX.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/yqKTX.jpg&quot; alt=&quot;Mapping rotation vector in a quaternion (Equation 13)&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/EYe0D.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/EYe0D.jpg&quot; alt=&quot;Mapping of angular velocity in matrix 4x4 (Equation 20)&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/KC3tl.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KC3tl.jpg&quot; alt=&quot;Exponencial Series (equation 28 and 29)&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My first doubt is, what does this symbol below, used in the matrix &lt;span class=&quot;math-container&quot;&gt;$F_k$&lt;/span&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;__&lt;a href=&quot;https://i.stack.imgur.com/ltl5w.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ltl5w.jpg&quot; alt=&quot;Unknown symbol&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My second doubt is, the symbol &lt;span class=&quot;math-container&quot;&gt;$\omega^\times$&lt;/span&gt; represents a skew-symmetric matrix of angular velocity, the resulting matrix of mapping 20 is a skew-symmetric matrix, I would like to know if the matrix &lt;span class=&quot;math-container&quot;&gt;$\omega^\times$&lt;/span&gt; used in equations 28 and 29 is the matrix resulting from mapping the angular velocity in a 4x4 matrix (equation 20)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My third doubt is, how to apply equation 28-29? as it is a series of powers ranging from 0 to infinity. Do I need to truncate it?&lt;/p&gt;&#xA;" OwnerUserId="21743" LastEditorUserId="18235" LastEditDate="2018-11-29T14:41:12.207" LastActivityDate="2021-04-18T01:52:51.287" Title="Doubt with linearization and discretization process - Ekf" Tags="&lt;ekf&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16754" PostTypeId="1" CreationDate="2018-11-26T14:22:27.900" Score="1" ViewCount="2366" Body="&lt;p&gt;I solved the inverse kinematics of a 4DOF robotic arm (which is not planar) and I wrote this code bellow in python. The coordinates for each joint is:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/iAmd2.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/iAmd2.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I considered the first three joints as a wrist and solved my inverse problem. For solving my inverse problem I used the DH parameters and by multiplying matrix I found the matrix that describes the end-effector(e) in the base frame(B)(forward kinematics). Also, I considered the first three joints as a wrist. My inverse kinematic method is similar to this one&lt;a href=&quot;https://www.golems.org/papers/OFlaherty13-hubo-kinematics-techreport.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.golems.org/papers/OFlaherty13-hubo-kinematics-techreport.pdf&lt;/a&gt;&#xA;But the allocation of coordinates in my solution is different from that as you see in my picture. This is my python code for inverse kinematics:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;import numpy as np&#xA;import math&#xA;import cmath&#xA;&#xA;# length parameters are in cm&#xA;La1=1&#xA;La2=1&#xA;La3=1&#xA;x=0&#xA;i=0&#xA;with open( &quot;endefector.txt&quot;) as f:&#xA; matrix=np.zeros((4,4))&#xA; data=[[]]&#xA; for line in f: &#xA;   matrix[i]=(list(map(float,line.split(',') [:4]))) &#xA;   i=i+1&#xA; print(matrix)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;# here i need the inverse of the above matrix for solving inverse kinematics so i reversed it.&#xA;    R= matrix[0:3,0:3]&#xA;    RT=np.zeros((3,3))&#xA;    for i in range( len(R)):&#xA;       for j in range(len(R[0])):&#xA;         RT[j][i]=R[i][j]&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;RT=-1*RT&#xA;&#xA;&#xA;pos=matrix[0:3,3:4]&#xA;Tpos=np.dot(RT,pos) &#xA;Px=Tpos[0] # this is &quot;the input x position&quot; of endeffector for my inverse &#xA;kinematic solution  &#xA;print(Px)&#xA;Py=Tpos[1]&#xA;print(Py)&#xA;Pz=Tpos[2]&#xA;print(Pz)&#xA;&#xA;sintetha2=(La2*La2+La1*La1-Pz*Pz-Py*Py-(Px+La3)*(Px+La3))/(2*La1*La2)&#xA;tetha2= math.atan2(sintetha2,np.sqrt(1-sintetha2*sintetha2)) &#xA;print(tetha2)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;this is just a part of my code for solving tetha2 then  I wanted to validate the solution for theta2.so I assume the other joint variables(theta)are equal to zero and in a loop I increased the amount of theta2 and  put it in forward kinematics and achieved the desired matrix (the matrix that describes the end-effector in base frame) and used it for inverse solution as it used in the hubo kinematics too. Then I wanted to compare the input tetha2 (it is mentioned in the second part of code as th2) and the amount of tetha2 that comes from the inverse solution (it is mentioned as tetha2). I printed the difference between these two values at the end of my python code. Here is the python code for testing th2 in a given trajectory:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;import numpy as np&#xA;import cmath&#xA;import math&#xA;&#xA;#Link Length&#xA;La1=1&#xA;La2=1&#xA;La3=1&#xA;&#xA;pi=math.pi #3.141592653589793238&#xA;&#xA;#initial theta&#xA;th1=0.0000&#xA;th2=0.0000&#xA;th3=0.0000&#xA;th4=0.0000&#xA;while th2 &amp;gt;= -1*pi:&#xA;&#xA;TBE=[[np.sin(th4)*(np.cos(th1)*np.sin(th3)-np.sin(th1)*np.cos(th2)*np.cos(th3))+np.sin(th1)*np.sin(th2)*np.sin(th4),np.cos(th4)*(np.cos(th1)*np.cos(th3)-np.sin(th1)*np.sin(th2)*np.sin(th3))-np.sin(th1)*np.cos(th2)*np.sin(th4),np.sin(th1)*np.sin(th2)*np.cos(th3)+np.cos(th1)*np.sin(th3),La3*np.sin(th4)*(np.cos(th1)*np.sin(th3)-np.sin(th1)*np.cos(th2)*np.cos(th3))+np.sin(th1)*np.sin(th2)*np.sin(th4) +La2*np.sin(th1)*np.cos(th2)],[np.sin(th4)*np.cos(th2)*np.sin(th3)+np.sin(th2)*np.cos(th4),np.cos(th2)*np.sin(th3)*np.cos(th4)-np.sin(th2)*np.sin(th4),-1*np.cos(th2)*np.cos(th3),La3*np.sin(th4)*np.cos(th2)*np.sin(th3)+np.sin(th2)*np.cos(th4)+La2*np.sin(th2)-La1],[np.sin(th4)*(np.cos(th1)*np.sin(th2)*np.sin(th3)+np.sin(th1)*np.cos(th3))-np.cos(th1)*np.cos(th2)*np.cos(th4),np.cos(th4)*(np.cos(th1)*np.sin(th2)*np.sin(th3)+np.sin(th1)*np.cos(th3))+np.cos(th1)*np.cos(th2)*np.sin(th4),np.sin(th1)*np.sin(th3)-np.cos(th1)*np.sin(th2)*np.cos(th3),La3*np.sin(th4)*(np.cos(th1)*np.sin(th2)*np.sin(th3)+np.sin(th1)*np.cos(th3))-np.cos(th1)*np.cos(th2)*np.cos(th4)-La2*np.cos(th1)*np.cos(th2)],[0,0,0,1]]&#xA;T=np.reshape(TBE,(4,4))&#xA;&#xA;R=T[0:3,0:3]&#xA;RT=np.zeros((3,3))&#xA;for i in range(len(R)):&#xA;    for j in range(len(R[0])):&#xA;        RT[j][i]=R[i][j]&#xA;&#xA;&#xA;orientation=-1*RT&#xA;pos=T[0:3,3:4]&#xA;&#xA;Tpos=np.dot(orientation,pos)&#xA;Px=Tpos[0]&#xA;Py=Tpos[1]&#xA;Pz=Tpos[2]&#xA;&#xA;sintetha2=(La2*La2+La1*La1-Pz*Pz-Py*Py-(Px+La3)*(Px+La3))/(2*La1*La2)&#xA;tetha2= math.atan2(sintetha2,np.sqrt(1-sintetha2*sintetha2)) &#xA;tetha22=-1*math.atan2(sintetha2,-1*np.sqrt(1-sintetha2*sintetha2))&#xA;print('th2',th2)&#xA;print('tetha2',tetha2)&#xA;print('tetha22',tetha22)&#xA;&#xA;print('th2-tetha2=',th2-tetha2)&#xA;print('th2-tetha22=',th2-tetha22)&#xA;print(th2)&#xA;&#xA;th2 =round(th2-0.1,2)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;but as I ran run this code, the difference of the values of th2 and tetha2 as th2 gets near of 1.57, increase accurately and I don't know why. I need the difference between these two to be very small in the whole joint range. I will be so appreciated if someone helps me to find the problem and fix it.&lt;/p&gt;&#xA;" OwnerUserId="21704" LastEditorUserId="18235" LastEditDate="2018-11-28T12:17:05.980" LastActivityDate="2018-11-28T12:17:05.980" Title="python code for closed form inverse kinematics solution" Tags="&lt;inverse-kinematics&gt;&lt;python&gt;" AnswerCount="0" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16755" PostTypeId="2" ParentId="16723" CreationDate="2018-11-27T09:32:25.823" Score="-1" Body="&lt;p&gt;On the first look, the question looks like an pathplanning problem in which the total amount of travel-distance has to be minimized. But a detailed look shows, that the problem is more complicated because many robots are in the game who have different tasks for start/destination points. The first step is to give such a challenge a name. I would call it a “blackboard scheduling problem”. A &lt;a href=&quot;https://en.wikipedia.org/wiki/Blackboard_system&quot; rel=&quot;nofollow noreferrer&quot;&gt;blackboard architecture&lt;/a&gt; isn't an algorithm but a datastructure for implementing a multi-agent system. Multi-agent doesn't mean, that many robots are available but many software-agents which are equal to planning submodules.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let us go into the details. The output of the software is a plan which control the pick&amp;amp;place robots to drive around in the map. Before such a plan can be created many subplans are needed which are optimized for certain constraints, for example in respect to the local distance and if the pick&amp;amp;place action make sense in comparison to the job list in the table. Evaluating different kind of plans by separate planners can be realized on a blackboard. That means an example plan is stored in the datastructure and then the software agents are given feedback how well the plan looks to them. An overall control loop summarizes the comments of the agents and produces the resulting plan. This can be executed on the real robots.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2018-11-27T09:32:25.823" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16756" PostTypeId="2" ParentId="14831" CreationDate="2018-11-27T13:51:20.287" Score="1" Body="&lt;p&gt;This is what worked for me (to auto-align sparse scans, which can also be useful in SLAM when it gets lost):&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Run a corner detector for each scan (convert the LIDAR output into a single path and run a &lt;a href=&quot;https://bost.ocks.org/mike/simplify/&quot; rel=&quot;nofollow noreferrer&quot;&gt;line simplification algorithm&lt;/a&gt; to extract the vertexes). As an improvement, you can also detect middle-of-the-air points  using a filter and create multiple paths containing only continuous points.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Since a single corner (POI) doesn't provide enough information for alignment, create features composed of pairs of POIs for each scan. Each feature has a &gt;--&amp;lt; shape and contains the distance between the POIs, the adjacent walls' lenght and its relative angle to the line that connect the POIs. Sort them by length (between POIs).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Compare each feature in your current scan to all features in all other scans with about the same length (find the lower_bound and upper_bound to speed things up). Give them a cost, by similarity (between angles, walls length, compass,...), and add the matched feature lines to a vector;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;Sort this vector and select the best candidates;&lt;/li&gt;&#xA;&lt;li&gt;Create a low resolution probability map with the points from all other scans (initializing it with 0.5 and increasing the probability every time a point is &quot;painted&quot; in a given position)&lt;/li&gt;&#xA;&lt;li&gt;For each candidate, calculate the transformation required to align the two matched lines and get the RMSD: sqrt(sum ((1-prob)^2)/n )&lt;/li&gt;&#xA;&lt;li&gt;Sort by RMSD&lt;/li&gt;&#xA;&lt;li&gt;Group the N best candidates to remove overlapping matches and remove bad candidates&lt;/li&gt;&#xA;&lt;li&gt;As an optimization, here I create a custom map to each remaining candidate. Differently to the previous map, this one only contain points where the LIDAR position is on the same side of the wall of the scanned points. It avoids matching points that are on the other side of the walls&lt;/li&gt;&#xA;&lt;li&gt;Sort again by RMSD and take the best(s) candidate(s)&lt;/li&gt;&#xA;&lt;li&gt;Run a fine/local placement algorithm to calculate the final position. I use a multi-resolution probability map (created with the same technique as in item 9) and use an iterative and greedy gradient descend algorithm to snap the points to the nearest position with smaller RMSD.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Many of these steps may be optional and where implemented just to improve performance and reduce wrong matches.&#xA;Using optimization techniques, I could auto-align one scan to other 50 with a very high precision in around 0.4s in today's computers.&lt;/p&gt;&#xA;" OwnerUserId="21753" LastEditorUserId="21753" LastEditDate="2018-11-27T14:09:19.260" LastActivityDate="2018-11-27T14:09:19.260" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16757" PostTypeId="1" AcceptedAnswerId="16772" CreationDate="2018-11-27T17:40:07.973" Score="2" ViewCount="3336" Body="&lt;p&gt;So I have been working on a drone project for a very long time, now I decided to work on Kalman filter which is used widely nowadays like &lt;a href=&quot;https://github.com/ArduPilot/ardupilot&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ardupilot&lt;/a&gt;. I looked at the source code so basically understand that using double integration we can get linear displacement using IMU and GPS sensor fusion with Kalman filter. But when I run simple code for sample time 0.1s, I didn't get expected result. I run the code for  1 meter and distance I get was like sometimes 768cm or sometimes 2meters or even 100m so am little nervous about the algorithm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;What is the proper way to get linear displacement using IMU ?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="10999" LastEditorUserId="18235" LastEditDate="2018-11-28T12:21:09.193" LastActivityDate="2019-03-21T13:54:15.337" Title="what is the algorithm to get position (Linear displacement and linear velocity ) using IMU (Like MPU6050)?" Tags="&lt;arduino&gt;&lt;imu&gt;&lt;uav&gt;&lt;ardupilot&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16758" PostTypeId="1" CreationDate="2018-11-27T23:17:41.623" Score="0" ViewCount="265" Body="&lt;p&gt;My Raspberry Pi car bot will not drive straight at all. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;After examining and listening to the two motors, I noticed that the right wheel is a lot faster. I have matching wheels and the same code structure for commanding my wheels to turn. I have my motors hooked to an H-bridge also.  I am not using PWM or anything fancy that I am aware of. I have watched many YouTube videos of programming robots to drive and my code is not that much different. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why are my wheels turning at different speeds when programmed the same way? How should I fix this?&lt;/p&gt;&#xA;" OwnerUserId="21756" LastEditorUserId="15160" LastEditDate="2018-11-29T15:30:45.697" LastActivityDate="2018-11-29T15:30:45.697" Title="Raspberry Pi Robot Car won't drive straight, right wheel is faster" Tags="&lt;motor&gt;&lt;raspberry-pi&gt;&lt;pwm&gt;" AnswerCount="1" CommentCount="6" ClosedDate="2018-11-29T15:34:10.217" ContentLicense="CC BY-SA 4.0" />
  <row Id="16759" PostTypeId="1" CreationDate="2018-11-28T03:01:53.523" Score="2" ViewCount="1099" Body="&lt;p&gt;I have a robot with 6 DOF. I read a lot of tutorial on how to compute the Jacobian, but usually all examples are for planar robots with 2DOF.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't understand how can I get the Jacobian of a 6 DOF robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that Torque = J_transpose * Force.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to compute the force of my end effector when I apply some torque. For this reason I need the Jacobian.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you very much&lt;/p&gt;&#xA;" OwnerUserId="21596" LastActivityDate="2018-11-28T14:37:16.850" Title="Jacobian of a 6DOF arm" Tags="&lt;robotic-arm&gt;&lt;torque&gt;&lt;jacobian&gt;&lt;force&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16760" PostTypeId="2" ParentId="16759" CreationDate="2018-11-28T03:56:40.777" Score="5" Body="&lt;p&gt;Write the forward kinematic equations &lt;span class=&quot;math-container&quot;&gt;$$\vec(x) = F\vec(\theta)$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Taking the partial derivatives of each &lt;span class=&quot;math-container&quot;&gt;$\vec (x)$&lt;/span&gt; term with respect to each joint variable &lt;span class=&quot;math-container&quot;&gt;$\vec(\theta)$&lt;/span&gt; will give you &lt;span class=&quot;math-container&quot;&gt;$J$&lt;/span&gt;.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2018-11-28T03:56:40.777" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16761" PostTypeId="2" ParentId="16736" CreationDate="2018-11-28T10:16:48.523" Score="0" Body="&lt;p&gt;There is probably no 100% correct/accurate (state space) model. You should consider what is your required precision and use the simplest model which fulfills your accuracy requirements. If you do not have a strict requirement start with the simplest one and if it is not sufficient, upgrade the model. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can use system identification methods to find model parameters. If you want high accuracy for one specific motor, this would be a good way of improving model accuracy. It might also work well for one specific motor model, depending on manufactruing quality (or the consistency of the manufacturing quality). If you one to apply it to different motors you might need to redo the parameter identification process for each (or at least each motor model).&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2018-11-28T10:16:48.523" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16762" PostTypeId="2" ParentId="16758" CreationDate="2018-11-28T11:51:44.037" Score="0" Body="&lt;p&gt;Did you implement a controler? It is common that the same model motors are not exactly the same and if you just give an input each one is going to behave differently. If you have feedback from the motors you can implement an PID controler and see the results. It's pretty easy to implement a couple of code lines.&lt;/p&gt;&#xA;" OwnerUserId="15592" LastActivityDate="2018-11-28T11:51:44.037" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16763" PostTypeId="2" ParentId="16759" CreationDate="2018-11-28T14:37:16.850" Score="1" Body="&lt;p&gt;By taking the time derivative of the forward kinematics equation, you get a Jacobian equation, as @steveo said in his answer. What is interesting is that by using some properties of rotation matrices, we can derive a rather impressive formula for computing a Jacobian.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In short, a Jacobian can be computed as&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$J = \begin{bmatrix}J_1 &amp;amp; J_2 &amp;amp; \cdots J_n\end{bmatrix},$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$J_i = \begin{cases}&#xA;\begin{bmatrix}z_{i - 1}\\0_{3\times1}\end{bmatrix} &amp;amp; \text{the $i^\text{th}$ joint is revolute}\\&#xA;\begin{bmatrix}z_{i - 1} \times (o_n - o_{i - 1})\\z_{i - 1}\end{bmatrix} &amp;amp; \text{the $i^\text{th}$ joint is prismatic (linear)}&#xA;\end{cases},$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$z_i$&lt;/span&gt; is the axis of the &lt;span class=&quot;math-container&quot;&gt;$i^\text{th}$&lt;/span&gt; joint and &lt;span class=&quot;math-container&quot;&gt;$o_i$&lt;/span&gt; is the origin of the &lt;span class=&quot;math-container&quot;&gt;$i^\text{th}$&lt;/span&gt; frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that a Jacobian matrix &lt;span class=&quot;math-container&quot;&gt;$J$&lt;/span&gt; is actually a function of a joint value &lt;span class=&quot;math-container&quot;&gt;$q$&lt;/span&gt;. (We can also see this from the above equation as the joint position &lt;span class=&quot;math-container&quot;&gt;$o_i$&lt;/span&gt; and the joint orientation &lt;span class=&quot;math-container&quot;&gt;$z_i$&lt;/span&gt; change when the robot changes joint values.) For 6-DOF robots, although it is very unlikely that you will be able to obtain a closed form formula for &lt;span class=&quot;math-container&quot;&gt;$J(q)$&lt;/span&gt;, computing &lt;span class=&quot;math-container&quot;&gt;$J$&lt;/span&gt; for a given &lt;span class=&quot;math-container&quot;&gt;$q$&lt;/span&gt; is pretty straightforward.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For more details, see Chapter 5 of &lt;a href=&quot;http://home.deib.polimi.it/gini/robot/docs/spong.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Robots Dynamics and Control&lt;/a&gt; (Spong &lt;em&gt;et al.&lt;/em&gt;).&lt;/p&gt;&#xA;" OwnerUserId="7610" LastActivityDate="2018-11-28T14:37:16.850" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="16764" PostTypeId="2" ParentId="16744" CreationDate="2018-11-29T00:23:50.247" Score="1" Body="&lt;p&gt;If your problem is small and uncertainty information is not available, you can just set it with identity matrices. Covariance or information matrix will let you set which relative pose to trust more, but it is meaningless if such information is not available. &lt;/p&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2018-11-29T00:23:50.247" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16765" PostTypeId="1" CreationDate="2018-11-29T01:33:16.433" Score="1" ViewCount="19" Body="&lt;p&gt;I was starting to work on the Arduino interface (and Raspberry Pi) using the USB serial cable for the Create 2 , as a baseline to build other outer loop controls. &#xA;My wife asked me why I would do that, and she handed me her Roomba remote control. It worked ! &#xA;Well, the Roomba IR remote only transmits, and the functions are only a small subset of the Open Interface Spec. &#xA;Rather than jumping into another Arduino build side project so I can decode the Roomba IR remote and waste alot of time, and tear apart the Create 2, ( I also assume the schematics are proprietary) ......here are my questions.....   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does the Create 2 hardware include a separate IR receiver and transmitter that works in parallel with the serial interface (so I can optically isolate the control signals and do away with the serial cable. )?&#xA;Does the Create 2 use IR sensors multiplexed to the home base for receiving the IR remote commands ?    &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks for any info on a serial IR interface possibilities. &lt;/p&gt;&#xA;" OwnerUserId="21715" LastActivityDate="2018-11-29T14:00:58.753" Title="Does Create 2 have a built in optical interface (IR remote) using the Open Interface Spec" Tags="&lt;serial&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16769" PostTypeId="2" ParentId="16765" CreationDate="2018-11-29T14:00:58.753" Score="1" Body="&lt;p&gt;RoanokeRoboticsClub whoop whoop! I'm based in the Roanoke area! &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For your question, I would direct you to the &lt;a href=&quot;https://cdn-shop.adafruit.com/datasheets/create_2_Open_Interface_Spec.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Create2 Open Interface spec&lt;/a&gt;, pages 24-26, and ask if that's enough to answer your question and, if not, to please &lt;em&gt;edit your question&lt;/em&gt; to include more specifics of what you're trying to do and why the information in the spec is insufficient.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To clarify, too, it looks like Packet IDs 17, 52, and 53, &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;...identifies the 8-bit IR character currently being received by [the respective sensor]. A value of 0 indicates that no character is being received. These characters include those sent by the Roomba Remote, Dock, Virtual Walls, Create robots using the Send-IR command, &lt;strong&gt;and user-created devices.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Emphasis added to highlight that you can make your own IR device and, presumably, your own values. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For compatibility, I would treat 0 and the character values listed in the table on pages 25-26 as &quot;reserved&quot; characters, and then you're free to use any other value, without &quot;collision,&quot; to signal/flag your code to do whatever you want. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-11-29T14:00:58.753" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16770" PostTypeId="2" ParentId="16737" CreationDate="2018-11-29T14:14:11.443" Score="0" Body="&lt;p&gt;The LiDAR won't go under the chair if your mapper inflates the occupied space created by the legs of the chair; ROS's &lt;a href=&quot;https://wiki.ros.org/move_base&quot; rel=&quot;nofollow noreferrer&quot;&gt;move_base&lt;/a&gt; package does this automatically.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem with this approach is then the robot will have a harder time going through narrow corridors, doors, or hallways.&lt;/p&gt;&#xA;" OwnerUserId="21773" LastActivityDate="2018-11-29T14:14:11.443" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16772" PostTypeId="2" ParentId="16757" CreationDate="2018-11-29T14:33:46.710" Score="2" Body="&lt;p&gt;I thought for sure that there would have been a duplicate question somewhere on the site that answers this question, but I can't find one, so here's a quick description of the method. &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Put your IMU in a known starting position and orientation (position + orientation = &quot;pose&quot;).&lt;/li&gt;&#xA;&lt;li&gt;Capture IMU accelerometer and gyroscope readings.&lt;/li&gt;&#xA;&lt;li&gt;Use numeric integration on the gyroscope output (&lt;code&gt;angle += gyroReading*deltaTime&lt;/code&gt;) to get the current orientation of the IMU.&lt;/li&gt;&#xA;&lt;li&gt;Use the current orientation of the IMU to construct a rotation matrix that will transform the accelerometer readings from the IMU &quot;body frame&quot; of reference to the &quot;world frame&quot; of reference. &lt;/li&gt;&#xA;&lt;li&gt;Use numeric integration on the &lt;em&gt;transformed&lt;/em&gt; accelerometer output (&lt;code&gt;speed += xfmAccelerometerReading*deltaTime&lt;/code&gt;) to get the current speed of the IMU in the world frame. &lt;/li&gt;&#xA;&lt;li&gt;Use numeric integration on the world-frame speed (&lt;code&gt;position += speed*deltaTime&lt;/code&gt;, or &lt;code&gt;position += speed*deltaTime + 0.5*xfmAccelerometerReading*deltaTime*deltaTime&lt;/code&gt;) to get the current position of the IMU in the world frame. &lt;/li&gt;&#xA;&lt;li&gt;GOTO: 2. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;This is the most simplistic way of using an IMU output to get position. All sensors have a bias, though, so when you integrate the output you're left with a &lt;em&gt;drift&lt;/em&gt; on the speed, position, and orientation &lt;strong&gt;estimates&lt;/strong&gt; (important because they &lt;em&gt;are&lt;/em&gt; estimates and &lt;strong&gt;not&lt;/strong&gt; measurements). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can use the gravitational &quot;down&quot; vector (the only sustainable long-term acceleration) to correct any drift on your x/y rotations. You can use a magnetometer/compass to correct any drift on your z rotation. You can use GPS to correct position drift. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am a huge fan of the &lt;a href=&quot;http://x-io.co.uk/open-source-imu-and-ahrs-algorithms/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Madgwick filter&lt;/a&gt; and plug it every chance I get - it's free, open-source, outperforms the Kalman filter, and it's probably already written for you. It will take accelerometer, gyro, and magnetometer readings and give you the outputs.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-11-29T14:33:46.710" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="16773" PostTypeId="2" ParentId="16753" CreationDate="2018-11-29T14:39:23.633" Score="0" Body="&lt;ul&gt;&#xA;&lt;li&gt;concerning the first symbol, it represents the identity matrix of the appropriate size.&lt;/li&gt;&#xA;&lt;li&gt;then equation (20) is used for (14)-(19) and the matrix is &lt;span class=&quot;math-container&quot;&gt;$\Omega(\omega)$&lt;/span&gt;, it applies for continuous space, for the Extended Kalman filter formulation &lt;span class=&quot;math-container&quot;&gt;$(.)^\times$&lt;/span&gt; is the classical operator turning a vector into a skew-symmetric matrix.&lt;/li&gt;&#xA;&lt;li&gt;lastly (290is (28) for &lt;span class=&quot;math-container&quot;&gt;$n=0$&lt;/span&gt; and for arbitrary &lt;span class=&quot;math-container&quot;&gt;$n$&lt;/span&gt; a close formed solution can be numerically evaluated as stated in the paper&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="18235" LastActivityDate="2018-11-29T14:39:23.633" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16774" PostTypeId="1" CreationDate="2018-11-29T22:32:44.657" Score="0" ViewCount="138" Body="&lt;p&gt;Very new to Lidar but I am seeking to use Lidar in a project and have a Spinning 2d unit I made with garmins v3HP but. Now I am caught up on mapping, I was wondering if it was possible to do things like what is shown in the image with a spinning 2D. EDIT: I forgot to mention if anybody has any good resources on Lidar it would be a great help to me as I am new&lt;a href=&quot;https://i.stack.imgur.com/BTjN4.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/BTjN4.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you.&lt;/p&gt;&#xA;" OwnerUserId="21775" LastActivityDate="2020-04-24T03:03:40.393" Title="3D mapping on spinning 2D unit, and Lidar Resources?" Tags="&lt;lidar&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="16776" PostTypeId="2" ParentId="16774" CreationDate="2018-12-01T00:24:46.013" Score="1" Body="&lt;p&gt;It is possible to create a pseudo 3D lidar with a 2D one. You have to add a motor or more specifically a servo that tilts the LIDAR. You can then continuously tilt the LIDAR and just integrate all the measurements together to form a 3D point cloud. If you look at this &lt;a href=&quot;http://www.roboticsproceedings.org/rss10/p07.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;paper&lt;/a&gt; you can see an example of how they set this up in Fig 2. You can also use that paper as a reference for building your LIDAR mapping software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other papers you can take a look at with open source implementations are &#xA;&lt;a href=&quot;https://github.com/erik-nelson/blam&quot; rel=&quot;nofollow noreferrer&quot;&gt;BLAM&lt;/a&gt;,&#xA;&lt;a href=&quot;https://github.com/koide3/hdl_graph_slam&quot; rel=&quot;nofollow noreferrer&quot;&gt;HDL graph SLAM&lt;/a&gt;,&#xA;and many more just google LIDAR SLAM or LIDAR mapping.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also you do actually need a proper 2D LIDAR to do any sort of mapping. From your post it looks like you have this &lt;a href=&quot;https://buy.garmin.com/en-US/US/p/578152&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://buy.garmin.com/en-US/US/p/578152&lt;/a&gt; which is called a LIDAR-lite, but is basically just a range finder.&lt;/p&gt;&#xA;" OwnerUserId="15265" LastActivityDate="2018-12-01T00:24:46.013" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16777" PostTypeId="1" AcceptedAnswerId="16784" CreationDate="2018-12-01T00:29:15.357" Score="0" ViewCount="67" Body="&lt;p&gt;i like to use lb1847 chip with stepper motor &quot;both salvaged from old copier&quot;&lt;br&gt;&#xA;i made grbl atmega board , this board gives step ,direction,enable and limit leads&lt;br&gt;&#xA;so i tried to find corresponding pins on the lb1847 ,but data sheet only shows enable1 and enable2 pins and phase1 and phase2 pins???&lt;br&gt;&#xA;so how can i connect the step and direction and enable pins of atmega to these pins of lb1847?!!&lt;br&gt;&#xA;there are other logic pins on lb1847 chip to control current and decay .&lt;br&gt;&#xA;if data sheet is required i van upload it.&lt;br&gt;&#xA;thanks in advance &lt;/p&gt;&#xA;" OwnerUserId="21348" LastActivityDate="2018-12-03T15:46:01.533" Title="lb1847 stepper controller :how to connect to grbl atmega based board with step ,direction,enable , limit?" Tags="&lt;stepper-driver&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2018-12-03T17:59:05.720" ContentLicense="CC BY-SA 4.0" />
  <row Id="16781" PostTypeId="1" CreationDate="2018-12-02T08:54:20.753" Score="2" ViewCount="80" Body="&lt;p&gt;In the Extended Kalman filter for SLAM, why the innovation equation is called innovation? Is there any reason behind it?&lt;/p&gt;&#xA;" OwnerUserId="21784" LastEditorUserId="19515" LastEditDate="2020-07-25T00:36:26.140" LastActivityDate="2020-07-25T00:36:26.140" Title="Why innovation equation in Extended Kalman filter is called innovation?" Tags="&lt;slam&gt;&lt;localization&gt;&lt;ekf&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ClosedDate="2019-01-03T08:25:59.957" ContentLicense="CC BY-SA 4.0" />
  <row Id="16782" PostTypeId="1" AcceptedAnswerId="16791" CreationDate="2018-12-02T18:08:07.597" Score="2" ViewCount="60" Body="&lt;p&gt;I am using Ubuntu 16.04 LTS with ROS Kinetic distro.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a custom package called gps_msgs in my catkin_ws directory. I have other two packages that utilize the message by including it into source.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, one of the packages doesn't build without having &quot;gps_msgs&quot; inside the find_package() macro in CMakeLists.txt whereas the other one does.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The packages are nearly identical apart from the fact that one of them utilizes a 3rd party library. Here's the CMakeLists (package.xml files are almost identical, none of them include gps_msgs, I would like to know why that works too..):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Package #1:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;cmake_minimum_required(VERSION 2.8.3)&#xA;project(can_control_node)&#xA;&#xA;add_compile_options(-std=c++11)&#xA;&#xA;find_package(catkin REQUIRED COMPONENTS&#xA;  roscpp&#xA;  std_msgs&#xA;)&#xA;&#xA;include_directories(&#xA;# include&#xA;  ${catkin_INCLUDE_DIRS}&#xA;)&#xA;&#xA;add_executable(can_control_node src/control_node.cpp)&#xA;target_link_libraries(can_control_node ${catkin_LIBRARIES})&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Package #2:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;cmake_minimum_required(VERSION 2.8.3)&#xA;project(gps)&#xA;&#xA;add_compile_options(-std=c++11)&#xA;&#xA;find_package(catkin REQUIRED COMPONENTS&#xA;  roscpp&#xA;  std_msgs&#xA;)&#xA;&#xA;catkin_package(&#xA;  #CATKIN_DEPENDS std_msgs roscpp&#xA;  #INCLUDE_DIRS include&#xA;)&#xA;&#xA;set(SOURCES&#xA;  src/an_packet_protocol.c&#xA;  src/spatial_packets.c&#xA;  src/rs232.c&#xA;)&#xA;&#xA;include_directories(include/&lt;span class=&quot;math-container&quot;&gt;${PROJECT_NAME} $&lt;/span&gt;{catkin_INCLUDE_DIRS})&#xA;&#xA;&#xA;add_executable(gps_node &#xA;  src/gps_node.cpp&#xA;  ${SOURCES}&#xA;)&#xA;&#xA;target_link_libraries(gps_node ${catkin_LIBRARIES})&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Again, both packages have &lt;code&gt;#include &amp;lt;gps_msgs/Navigation.h&amp;gt;&lt;/code&gt; in their source files. The gps_msgs/Navigation isn't mentioned AT ALL in either of the package.xml files. Package #1 builds, package #2 complains that gps_msgs/Navigation doesn't exist. All 3 packages are in separate directories in my catkin_ws, what's going on?&lt;/p&gt;&#xA;" OwnerUserId="21789" LastActivityDate="2019-01-03T11:00:08.623" Title="ROS CMakeLists.txt confusion" Tags="&lt;ros&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16784" PostTypeId="2" ParentId="16777" CreationDate="2018-12-03T15:46:01.533" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;So how can I connect the step and direction and enable pins of ATMega to these pins of LB1847?!&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You can't. The LB1847 doesn't accept those as inputs. You'll need to write your own code to send the correct signals to the LB1847. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.onsemi.com/pub/Collateral/LB1847-D.PDF&quot; rel=&quot;nofollow noreferrer&quot;&gt;From the LB1847 datasheet&lt;/a&gt;, page 6 gives the &quot;Sequence Table&quot; for the first 32 (0-31) steps of a revolution. It looks like you'll need 12 digital output pins on your ATMega to interface with the LB1847; four current control pins, an enable, and a phase select, for six pins total for each phase (two phases, A and B, gives 12 total). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's a drawing on page 11 that gives the first half of a revolution. It's not explicitly mentioned anywhere that I saw (in a brief reading of the datasheet), but I'm assuming that you would run the sequences 0-31, then invert the phase select pins PHA1 and PHA2 and run sequences 0-31 again, for a total of 64 steps (0-63) per revolution. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you look again at the sequence table on page 6, you can see that Phase A's step 16 is to have the enable pin high (which disables the output), and Phase B's step 0 is also to have the enable pin high. From there on, Phase A and Phase B have the same current settings (Phase A's step 17 is the same as Phase B's step 1, etc.). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could try to code something slick where you only have one phase defined, like Phase A, and then the other phase is the first phase plus an offset of 16 steps, but then you have to keep the PHA pin settings straight, etc. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Memory is generally so cheap that I'd just hard-code the entire table in an include file for your project. Probably I'd write the whole thing out to 64 steps, too, just being sure to invert the PHA settings.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, you keep an internal count of which step you're currently on and write your own subroutine that accepts as inputs the values you're trying to send - direction, steps, enable. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depending on what you want &quot;enable&quot; to mean, you can &quot;logical OR&quot; your enable (or !enable) with the enable pin determined by the sequence table to turn the stepper off. Then it's just a matter of incrementing (or decrementing) your current step count by the number of steps and ensuring that you wrap from 0 to 63 and from 63 to 0. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-12-03T15:46:01.533" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="16785" PostTypeId="2" ParentId="16781" CreationDate="2018-12-03T16:03:11.797" Score="3" Body="&lt;p&gt;From the &lt;a href=&quot;https://en.wikipedia.org/wiki/Innovation_(signal_processing)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia entry&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In time series analysis (or forecasting) — as conducted in statistics, signal processing, and many other fields — the innovation is the difference between the observed value of a variable at time t and the optimal forecast of that value based on information available prior to time t. If the forecasting method is working correctly, successive innovations are uncorrelated with each other, i.e., constitute a white noise time series. Thus it can be said that the innovation time series is obtained from the measurement time series by a process of 'whitening', or removing the predictable component. The use of the term innovation in the sense described here is due to Hendrik Bode and Claude Shannon (1950) in their discussion of the Wiener filter problem, although the notion was already implicit in the work of Kolmogorov.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The especially noteworthy bit in that text is that, &quot;if the forecasting method is working correctly, successive innovations ... constitute a white noise time series.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This means that you &lt;em&gt;should&lt;/em&gt; be able to apply a feedback based on the innovations and, in the long-term, that feedback won't do anything if your predictions are correct. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To put it another way, feedback based on innovations will only change your filter parameters if your filter isn't making accurate predictions. This is the heart of how and why the Kalman filter works as well as it does - it tunes itself until it is making good predictions and then stops tuning. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-12-03T16:03:11.797" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16786" PostTypeId="2" ParentId="16093" CreationDate="2018-12-03T17:01:58.427" Score="2" Body="&lt;p&gt;The algorithm can be understood by taking an example (using variables used in &lt;a href=&quot;http://www.probabilistic-robotics.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Probabilistic Robotics&lt;/a&gt; and algorithm in table 4.4 in page 110 in the same book).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Algorithm: (Couldn't get math mode to work inside code mode. Hence the picture.)&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/oM2oP.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/oM2oP.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider &lt;span class=&quot;math-container&quot;&gt;$M = 100$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$M^{-1} = 0.01$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let &lt;span class=&quot;math-container&quot;&gt;$r = 0.005$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, &lt;span class=&quot;math-container&quot;&gt;$U = 0.005, 0.015,......., 0.995$&lt;/span&gt; as loop progresses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the weight is assumed to be initialized with a value of &lt;code&gt;1/no. of particles&lt;/code&gt;, the first iteration of the algorithm will pick a particle, due to low value of &lt;code&gt;U&lt;/code&gt;. Here &lt;code&gt;no. of particles&lt;/code&gt; is 100. But in later iterations, the value of &lt;code&gt;U&lt;/code&gt; will be larger and that would mean that by the time the value of &lt;code&gt;c&lt;/code&gt; catches up with &lt;code&gt;U&lt;/code&gt;, a lot of particles corresponding to lower weights will be skipped due to the inner &lt;code&gt;while&lt;/code&gt; loop. At the same time, if &lt;code&gt;c&lt;/code&gt; had a large increment due to large weight, it will take a while for &lt;code&gt;U&lt;/code&gt; to catch up with &lt;code&gt;c&lt;/code&gt;. This means the &lt;code&gt;while&lt;/code&gt; loop will be skipped and high weight particle will be added to the output set multiple times. This is how high weight particles are picked by the algorithm. Also, the maximum value of &lt;code&gt;U&lt;/code&gt; is 0.995, in this case. Even if &lt;code&gt;r&lt;/code&gt; is higher, this maximum value will not exceed 1. This means, at some point, &lt;code&gt;c&lt;/code&gt; will catch up with &lt;code&gt;U&lt;/code&gt; resulting in selection of particles, assuming weights are normalized.     &lt;/p&gt;&#xA;" OwnerUserId="10959" LastActivityDate="2018-12-03T17:01:58.427" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16787" PostTypeId="1" CreationDate="2018-12-03T22:31:12.090" Score="2" ViewCount="187" Body="&lt;p&gt;I have a configuration space as below with several obstacles. Green circles are all the points I need to go to. Blue line is the path returned from A* search. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I am looking for path that's smoother and away from obstacles. what can I do?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Dvf7N.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Dvf7N.png&quot; alt=&quot;result of applying A* search&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="21800" LastEditorUserId="21800" LastEditDate="2018-12-03T23:06:36.393" LastActivityDate="2018-12-17T18:30:12.807" Title="A* search results in path too close to obstacles" Tags="&lt;motion-planning&gt;&lt;path-planning&gt;&lt;planning&gt;" AnswerCount="2" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16789" PostTypeId="2" ParentId="16787" CreationDate="2018-12-04T04:38:57.550" Score="5" Body="&lt;p&gt;Obstacle padding/ robot padding.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Suppose you are working in a 2D environment and that you have an obstacle of the size 2x2. When doing planning (graph search, etc.), you increase the size of the obstacle to, for example, 3x3. Then when you find a path, the path is guaranteed to be at least of the distance 1 away from the actual obstacle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for a smoother path, you may apply some &lt;em&gt;shortcutting&lt;/em&gt; procedure on the path found by your path planner. Searching for &lt;em&gt;shortcutting&lt;/em&gt; or &lt;em&gt;trajectory shortcutting&lt;/em&gt; should give you a number of results.&lt;/p&gt;&#xA;" OwnerUserId="7610" LastEditorUserId="7610" LastEditDate="2018-12-06T04:31:43.203" LastActivityDate="2018-12-06T04:31:43.203" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16791" PostTypeId="2" ParentId="16782" CreationDate="2018-12-04T10:05:37.487" Score="1" Body="&lt;p&gt;I have managed to fix the issue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am still uncertain as to why it happens, catkin can be very unpredictable and what builds on one system doesn't builds on another one (experienced that yesterday).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is an actual convention and has to be followed to achieve proper building sequence whenever you're trying to include a c:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Add your message in package.xml in the &lt;code&gt;&amp;lt;depend&amp;gt;your_msg&amp;lt;/depend&amp;gt;&lt;/code&gt; tag.&lt;/li&gt;&#xA;&lt;li&gt;Add your message in CMakeLists.txt in the &lt;code&gt;find_packages(catkin REQUIRED COMPONENTS roscpp your_msg)&lt;/code&gt; macro.&lt;/li&gt;&#xA;&lt;li&gt;Add &lt;code&gt;include_directories(include &lt;span class=&quot;math-container&quot;&gt;${catkin_INCLUDE_DIRS})&lt;/code&gt; macro in CMakeLists.txt to get the message headers.&lt;/li&gt;&#xA;&lt;li&gt;Use &lt;code&gt;add_dependencies(your_node $&lt;/span&gt;{catkin_EXPORTED_TARGETS})&lt;/code&gt; macro in CMakeLists.txt to ensure that your messages are built first before building your target (most important step).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Hope this helps someone who is getting (message no found error during catkin_make).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Reference: &lt;a href=&quot;http://docs.ros.org/melodic/api/catkin/html/howto/format2/cpp_msg_dependencies.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;catkin docs&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="21789" LastActivityDate="2018-12-04T10:05:37.487" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16794" PostTypeId="1" CreationDate="2018-12-04T14:10:20.900" Score="1" ViewCount="100" Body="&lt;p&gt;I am trying to script a basic, lightweight IK solver with a Jacobian Transpose method. I have gotten a basic script that reach the desired position very quickly. What I am not able to do is achieve a desired orientation as well. I want to avoid the spherical wrist model in order to test a wide variety of robot configurations, so I need to include orientation as a general kinematic parameter. I haven't taken linear algebra in 14 years and my matrix math is VERY elementary, so ideally, I would love some help finding a more geometrical approach to finding the rotational values for the various axes. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried to do it by having three points on a target plane that correspond to points on the end effector thich through iterative calculation approach a solution. However this would get stuck when the rotation was such that the error vectors of the three points added up to less than my convergence threshhold. The working code is here:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;        public List&amp;lt;double&amp;gt; axisDelta(List&amp;lt;Line&amp;gt; axesTemp, Plane eePl, Plane target, double step)&#xA;    {&#xA;        Point3d targetPoint = target.Origin;&#xA;        Point3d eePoint = eePl.Origin;&#xA;        Vector3d error = targetPoint - eePoint;&#xA;        List&amp;lt;double&amp;gt; deltaTemp = new List&amp;lt;double&amp;gt;();&#xA;&#xA;        for (int i = 0; i &amp;lt; axesTemp.Count; i++)&#xA;        {&#xA;            Vector3d jointToEE = eePoint - axesTemp[i].ClosestPoint(eePoint, false);&#xA;            Vector3d jakobian = Vector3d.CrossProduct(axesTemp[i].Direction, jointToEndCP);&#xA;&#xA;            jakobian.Unitize();&#xA;            double dot = Vector3d.Multiply(error, jakobian);&#xA;&#xA;            double theta = 0;&#xA;            if (jointToEndCP.Length &amp;gt; 0) theta = Math.Atan(dot / jointToEndCP.Length); //avoid dividing by 0&#xA;&#xA;            deltaTemp.Add(theta * step);&#xA;        }&#xA;        return deltaTemp;&#xA;    }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Please help me understand the best way to implement orientation into the script to find the axis rotation values to align the End-Effector plane with the target plane. Thanks!!&lt;/p&gt;&#xA;" OwnerUserId="21803" LastEditorUserId="21803" LastEditDate="2018-12-04T14:18:13.553" LastActivityDate="2018-12-04T14:18:13.553" Title="How to implement end effector orientation in generic IK solver" Tags="&lt;robotic-arm&gt;&lt;inverse-kinematics&gt;&lt;jacobian&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16795" PostTypeId="1" AcceptedAnswerId="16800" CreationDate="2018-12-04T18:05:18.957" Score="2" ViewCount="277" Body="&lt;p&gt;I want to implement an encrypted controller in Matlab using RSA. I am trying to replicate what is written in this scheme from '&lt;a href=&quot;https://www.researchgate.net/profile/Kiminao_Kogiso/publication/282572603_Cyber-Security_Enhancement_of_Networked_Control_Systems_Using_Homomorphic_Encryption/links/5b86905ca6fdcc5f8b6ede76/Cyber-Security-Enhancement-of-Networked-Control-Systems-Using-Homomorphic-Encryption.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Cyber-Security Enhancement of Networked Control Systems Using Homomorphic Encryption&lt;/a&gt;' written by Kiminao Kogiso and Takahiro Fujita:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/orMiv.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/orMiv.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The input of the controller has to be the output of the plant, and the input of the plant has to be the output of the controller. I think the problem happens when I try to decrypt, but I am not sure. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am using the state space representation of a system and the following code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;A_p = [9.9998*(10)^-1 1.9700*(10)^-2; -1.970*(10)^-2 9.7025*(10)^-1];&#xA;B_p = [9.9900*(10)^-5; 9.8508*(10)^-3];&#xA;C_p = [1 0];&#xA;D_p = 0;&#xA;&#xA;X0 = [1;0]; %initial conditions for the plant&#xA;&#xA;t = [0:0.01:5];  %sampling time&#xA;&#xA;u = ones(1,length(t));        %encrypted input&#xA;y_p = zeros(1, length(t));    %output of the plant&#xA;x_p = zeros(2, length(t));    %state of the plant&#xA;x_c = zeros(2, length(t));    %state of the controller&#xA;&#xA;x_p(:, 1) = X0;               %assign the initial values to the satet of the &#xA;                              %plant&#xA;&#xA;%parameters of the controller&#xA;&#xA;A_c = [1 0.0063; 0 0.3678];&#xA;B_c = [0; 0.0063];&#xA;C_c = [10 -99.90];&#xA;D_c = 3;&#xA;&#xA;end_t = length(t);&#xA;&#xA;N = 94399927;    % N=p*q&#xA;e = 11;          %public key&#xA;d = 85800451;    %private key&#xA;&#xA;%encrypted parameters for the controller&#xA;&#xA;A_enc = mod(A_c.^e, N);&#xA;B_enc = mod(B_c.^e, N);&#xA;C_enc = mod(C_c.^e, N);&#xA;D_enc = mod(D_c.^e, N);&#xA;&#xA;xc_enc = zeros(2,length(t));   %x_c encrypted&#xA;y_enc = zeros(1,length(t));    %y_c encrypted&#xA;&#xA;u_dec = ones(1, length(t));    %u decripted&#xA;&#xA;y_quant = zeros(1, length(t)); &#xA;&#xA;for ind=1:end_t-1&#xA;&#xA;    %plant&#xA;&#xA;    x_p(:, ind+1) = A_p*x_p(: ,ind) + B_p*u_dec(ind);&#xA;    y_p(ind) = C_p*x_p(: ,ind);&#xA;&#xA;    %encryption of x_c and y_p&#xA;&#xA;    y_quant(ind) = round(y_p(ind));  %quantization&#xA;&#xA;    y_enc(ind) = modpow(y_quant(ind), e, N); &#xA;&#xA;    %controller with encrypted parameter&#xA;    x_c(:, ind+1) = A_enc*x_c(:, ind) - B_enc*y_enc(ind);&#xA;    u(ind+1) = C_enc*x_c(:, ind) - D_enc*y_enc(ind); &#xA;&#xA;    %decrypting u&#xA;    u_dec(ind+1) = modpow(u(ind+1),d,N);&#xA;&#xA;    function result = modpow(base,exp,m) &#xA;   result = 1;&#xA;   while (exp &amp;gt; 0) &#xA;      if bitand(exp,1) &amp;gt; 0&#xA;         result = mod((result * base),m);&#xA;      end&#xA;      exp = bitshift(exp,-1);&#xA;      base = mod(base^2,m);&#xA;   end&#xA;end&#xA;&#xA;end&#xA;&#xA;figure&#xA;plot(t,y_enc);&#xA;&#xA;figure&#xA;plot(t,u);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Can somebody help me? Thank's in advance. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;sorry, I had to delete some pictures because I can't post all of them because I don't have enough reputation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I am just trying to simply encrypt the output of the plant and then encrypt it before it enters in the controller, and then I encrypt the output of the controller and before it enters in the plant I decrypt it. The idea is the following:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/odjT8m.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/odjT8m.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is that if I don't use encryption the outputs I get when I plot &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;hold on&#xA;  plot(t, y_p, 'r')&#xA;  figure&#xA;  plot(t, u_dec)&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;are &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/fYw1m.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fYw1m.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/QWfTV.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QWfTV.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;but when i use encryption, the outputs are &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ySOJV.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ySOJV.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/dzzC9.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dzzC9.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;my code is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;A_p = [9.9998*(10)^-1 1.9700*(10)^-2; -1.970*(10)^-2 9.7025*(10)^-1];&#xA;B_p = [9.9900*(10)^-5; 9.8508*(10)^-3];&#xA;C_p = [1 0];&#xA;D_p = 0;&#xA;&#xA;X0 = [1;0];&#xA;&#xA;t = [0:0.01:5];&#xA;&#xA;&#xA;u = zeros(1,length(t));&#xA;y_p = zeros(1, length(t));&#xA;x_p = zeros(2, length(t));&#xA;x_c = zeros(2, length(t));&#xA;&#xA;x_p(:, 1) = X0;&#xA;&#xA;&#xA;A_c = [1 0.0063; 0 0.3678];&#xA;B_c = [0; 0.0063];&#xA;C_c = [10 -99.90];&#xA;D_c = 3;&#xA;&#xA;end_t = length(t);&#xA;&#xA;N = 94399927; &#xA;e = 11;  &#xA;d = 85800451; &#xA;xc_enc = zeros(2,length(t));&#xA;y_enc = zeros(1,length(t));&#xA;&#xA;&#xA;u_dec = ones(1, length(t));&#xA;&#xA;&#xA;xc_dec = zeros(2, length(t));&#xA;&#xA;x_dec = zeros(2,length(t));&#xA;y_dec = zeros(1, length(t));&#xA;&#xA;&#xA;u_enc = zeros(1,length(t));&#xA;&#xA;y_quant = zeros(1, length(t));&#xA;&#xA;u_quant = zeros(1, length(t));&#xA;&#xA;&#xA;for ind=1:end_t-1&#xA;&#xA;&#xA;     x_p(:, ind+1) = A_p*x_p(: ,ind) + B_p*u_dec(ind);&#xA;     y_p(ind) = C_p*x_p(: ,ind);&#xA;&#xA;     y_quant(ind) = round(y_p(ind));&#xA;&#xA;     y_enc(ind) = modpow(y_quant(ind),e,N);&#xA;&#xA;&#xA;     y_dec(ind) = modpow(y_enc(ind),d,N);&#xA;&#xA;     x_c(:, ind+1) = A_c*x_c(:, ind) - B_c*y_dec(ind);&#xA;     u(ind+1) = C_c*x_c(:, ind) - D_c*y_dec(ind);&#xA;&#xA;     u_quant(ind+1) = round(u(ind+1));        %quantization of u(ind+1)&#xA;&#xA;     u_enc(ind+1) = modpow(u_quant(ind+1),e,N);&#xA;     u_dec(ind+1) = modpow(u_enc(ind+1),d,N);&#xA;&#xA;     disp(u(ind +1) + &quot; &quot; + u_dec(ind+1))&#xA;&#xA;&#xA;&#xA;end&#xA;&#xA;hold on&#xA;plot(t, y_p, 'r')&#xA;figure&#xA;plot(t, u_dec)&#xA;&#xA;function result = modpow(base,exp,m) &#xA;   result = 1;&#xA;   while (exp &amp;gt; 0) &#xA;      if bitand(exp,1) &amp;gt; 0&#xA;         result = mod((result * base),m);&#xA;      end&#xA;      exp = bitshift(exp,-1);&#xA;      base = mod(base^2,m);&#xA;   end&#xA;end&#xA;&#xA;&#xA;function y = powermod_matrix(a,z,n)&#xA;% This function calculates y = a^z mod n&#xA; %If a is a matrix, it calculates a(j,k)^z mod for every element in a&#xA;[ax,ay]=size(a);&#xA;&#xA;&#xA;% If a is negative, put it back to between 0 and n-1&#xA;a=mod(a,n);&#xA;&#xA;% Take care of any cases where the exponent is negative&#xA;if (z&amp;lt;0)&#xA;   z=-z;&#xA;   for j=1:ax&#xA;      for k=1:ay&#xA;         a(j,k)=invmodn(a(j,k),n);&#xA;      end&#xA;   end   &#xA;end&#xA;&#xA;&#xA;for j=1:ax&#xA;for k=1:ay&#xA;  x=1;&#xA;  a1=a(j,k);&#xA;  z1=z;&#xA;  while (z1 ~= 0)&#xA;     while (mod(z1,2) ==0)&#xA;        z1=(z1/2);&#xA;        a1=mod((a1*a1), n);&#xA;     end  %end while&#xA;     z1=z1-1;&#xA;     x=x*a1;&#xA;     x=mod(x,n);&#xA;  end&#xA;  y(j,k)=x;  &#xA;end %end for k&#xA;end %end for j&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Shouldn't I get almost the same result as the ones without encryption? I think that something is wrong with the input u and how I initialize and increment it, but I don' t know how to fix this. Can somebody help me? Thank's in advance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;moreover, if i add the following line of code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;disp(y_p(ind) + &quot; &quot; + y_dec(ind))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;i can see that y_p and y_dec, which should be the same, are different at each iteration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;the problem is that even if i add a quantization ,and so i get integers, i get the same output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition, if i add the following line of code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;disp(u(ind +1) + &quot; &quot; + u_dec(ind+1))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;after the decryption of u_enc, so after u_dec, i get :&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/NxrKK.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/NxrKK.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;so u(ind+1) and u_dec(ind+1) are different numbers. And another fact that leaves me confused is that if i  quantize u(ind+1), this result doesn't become an integer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think that the problem of this is that u(ind+1) becomes a negative number and too big. Infact, if i for example try to do:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;x = -19495615862231.37;&#xA;&#xA;z = round(x);&#xA;&#xA;&#xA;x_enc = modpow(x,11,94399927);&#xA;&#xA;x_dec = modpow(x_enc,85800451,94399927)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;as result, after the decryption i get 31779346, and not the original number. I think modpow calculates the modular exponential for large numbers, but it looks like it has a limit. &lt;/p&gt;&#xA;" OwnerUserId="21797" LastEditorUserId="37" LastEditDate="2018-12-07T16:42:08.720" LastActivityDate="2018-12-07T16:44:50.943" Title="Control system in Matlab with RSA encryption" Tags="&lt;control&gt;&lt;matlab&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16799" PostTypeId="2" ParentId="16787" CreationDate="2018-12-05T11:47:34.420" Score="3" Body="&lt;p&gt;Most planning algorithms reduce your robot to a point and plan a path for that point. The arising problem is exaclty what you are facing. As suggested before, obstacle padding is one of the methods, but generally, the configuration space has been proposed to solve this problem. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Configuration space is a more advanced and more general way of padding obstacles. The obstacles are enlarged by the dimentions of the robot, considering also the robot's orientation. A more detailed description can be found &lt;a href=&quot;https://www.cs.cmu.edu/~motionplanning/lecture/Chap3-Config-Space_howie.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to smooth your paths:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;you can introduce penalties in A* for non-smooth portions of the path. However, since A* can only plan in discreet envionments, some degree of discontinuity will alwazs be present&lt;/li&gt;&#xA;&lt;li&gt;you can use methods which take into account the dynamic limits of your system (dynamic window)&lt;/li&gt;&#xA;&lt;li&gt;make A* plan an even more coarse path and fit splines on those waypoints to make sure that the obtained path is smooth&lt;/li&gt;&#xA;&lt;li&gt;you can post-process the paths to smooth them out with a filter&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Smoothing will introduce slight deviations in the path, so make sure to consider possible collisions after smoothing also.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2018-12-05T11:53:15.610" LastActivityDate="2018-12-05T11:53:15.610" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16800" PostTypeId="2" ParentId="16795" CreationDate="2018-12-05T14:45:15.487" Score="3" Body="&lt;h1&gt;:EDIT:&lt;/h1&gt;&#xA;&lt;h1&gt;&lt;a href=&quot;https://crypto.stackexchange.com/a/30923&quot;&gt;Your numbers must be &lt;s&gt;integers&lt;/s&gt; POSITIVE INTEGERS.&lt;/a&gt; (link)&lt;/h1&gt;&#xA;&lt;p&gt;This is probably the root of the trouble you're having. Interesting that the paper didn't mention anything about this. I'm not sure how they arrived at the encrypted control parameters but, as I mentioned below, it's not my field so I haven't &amp;quot;digested&amp;quot; the paper. In any event, RSA encryption doesn't work with non-integer &lt;strong&gt;or negative integer&lt;/strong&gt; numbers so you can't pass fractional numbers back and forth &lt;strong&gt;and you can't pass negative numbers back and forth.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I've removed the original answer here, but it's in the edit history if anyone is curious.&lt;/p&gt;&#xA;&lt;p&gt;Consider the following example. I used much smaller numbers to reduce my own search times, and I'm sure there are better ways of finding these numbers but, as I mentioned previously, crypto is not my field. Here's some checks:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;p = 7&#xA;q = 11&#xA;N = p*q&#xA;lambda = lcm(p-1,q-1)&#xA;e = 17&#xA;d = 1;&#xA;while true&#xA;    if(mod(d*e,lambda)==1)&#xA;        break;&#xA;    else&#xA;        d = d+1;&#xA;    end&#xA;end&#xA;&#xA;&amp;gt;&amp;gt;d&#xA;&#xA;d = &#xA;&#xA;    23&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;So now I've got &lt;code&gt;e = 17&lt;/code&gt;, &lt;code&gt;d = 23&lt;/code&gt;, and &lt;code&gt;N = 77&lt;/code&gt;. Now, check that it works:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt; modpow(29,e,N)&#xA;&#xA;ans =&#xA;&#xA;    50&#xA;&#xA;&amp;gt;&amp;gt; modpow(50,d,N)&#xA;&#xA;ans =&#xA;&#xA;    29&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Okay, seems to work fine. &lt;em&gt;Now&lt;/em&gt;, try it with a negative number, then see if there's a positive number that gives the same encrypted result:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;i=1;&#xA;while true&#xA;    if(modpow(i,e,N)==modpow(-3,e,N))&#xA;        break;&#xA;    else&#xA;        i=i+1;&#xA;    end&#xA;end&#xA;&#xA;&amp;gt;&amp;gt;i&#xA;&#xA;i = &#xA;&#xA;    74&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Try it again, with a different negative number:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;i=1;&#xA;while true&#xA;    if(modpow(i,e,N)==modpow(-29,e,N))&#xA;        break;&#xA;    else&#xA;        i=i+1;&#xA;    end&#xA;end&#xA;&#xA;&amp;gt;&amp;gt;i&#xA;&#xA;i =&#xA;&#xA;    48&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;So, as you can see, a negative integer can wind up giving you the same encryption result as (a different) positive integer.&lt;/p&gt;&#xA;&lt;p&gt;Since &lt;code&gt;N&lt;/code&gt; is always positive (because &lt;code&gt;p&lt;/code&gt; and &lt;code&gt;q&lt;/code&gt; are prime and thus positive), &lt;a href=&quot;https://www.mathworks.com/help/matlab/ref/mod.html#btvuvlu&quot; rel=&quot;nofollow noreferrer&quot;&gt;Matlab documentation states&lt;/a&gt; that the modulus operation will always return a positive result. This again confirms that &lt;code&gt;modpow&lt;/code&gt; of some negative number, with &lt;code&gt;N&amp;gt;0&lt;/code&gt;, will always result in some positive result which could be duplicated by a positive number.&lt;/p&gt;&#xA;&lt;p&gt;It also means that &lt;code&gt;modpow(~, d, N)&lt;/code&gt; will &lt;strong&gt;never return&lt;/strong&gt; a negative number.&lt;/p&gt;&#xA;&lt;h1&gt;Solution&lt;/h1&gt;&#xA;&lt;p&gt;As I mentioned at the top, I'm surprised this wasn't mentioned in the paper you linked, but my approach would be to bias your numbers by some &amp;quot;sufficiently large&amp;quot; positive number and un-bias them before use. Also, since decimal numbers can't be used, you could &amp;quot;inflate&amp;quot; your numbers by multiplying by some scale factor before rounding, then &amp;quot;deflate&amp;quot; the numbers before use by dividing by the same scale factor. Consider the following edits to your code (the &lt;code&gt;powermod_matrix&lt;/code&gt; function wasn't being used, so I removed it for brevity):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;scaleFactor = 1000; % &amp;lt;-- New&#xA;biasValue = 100; % &amp;lt;-- New&#xA;&#xA;A_p = [9.9998*(10)^-1 1.9700*(10)^-2; -1.970*(10)^-2 9.7025*(10)^-1];&#xA;B_p = [9.9900*(10)^-5; 9.8508*(10)^-3];&#xA;C_p = [1 0];&#xA;D_p = 0;&#xA;&#xA;X0 = [1;0];&#xA;&#xA;t = [0:0.01:5];&#xA;&#xA;&#xA;u = zeros(1,length(t));&#xA;y_p = zeros(1, length(t));&#xA;x_p = zeros(2, length(t));&#xA;x_c = zeros(2, length(t));&#xA;&#xA;x_p(:, 1) = X0;&#xA;&#xA;&#xA;A_c = [1 0.0063; 0 0.3678];&#xA;B_c = [0; 0.0063];&#xA;C_c = [10 -99.90];&#xA;D_c = 3;&#xA;&#xA;end_t = length(t);&#xA;&#xA;N = 94399927; &#xA;e = 11;  &#xA;d = 85800451; &#xA;xc_enc = zeros(2,length(t));&#xA;y_enc = zeros(1,length(t));&#xA;&#xA;&#xA;u_dec = ones(1, length(t));&#xA;&#xA;&#xA;xc_dec = zeros(2, length(t));&#xA;&#xA;x_dec = zeros(2,length(t));&#xA;y_dec = zeros(1, length(t));&#xA;&#xA;&#xA;u_enc = zeros(1,length(t));&#xA;&#xA;y_quant = zeros(1, length(t));&#xA;&#xA;u_quant = zeros(1, length(t));&#xA;&#xA;&#xA;for ind=1:end_t-1&#xA;&#xA;&#xA;     x_p(:, ind+1) = A_p*x_p(: ,ind) + B_p*u_dec(ind);&#xA;     y_p(ind) = C_p*x_p(: ,ind);&#xA;&#xA;     %y_quant(ind) = round(y_p(ind));&#xA;     y_quant(ind) = round(scaleFactor*(y_p(ind) + biasValue)); % &amp;lt;-- New&#xA;     &#xA;     y_enc(ind) = modpow(y_quant(ind),e,N);&#xA;&#xA;&#xA;     y_dec(ind) = modpow(y_enc(ind),d,N);&#xA;     &#xA;     y_dec(ind) = y_dec(ind)/scaleFactor - biasValue; % &amp;lt;-- New&#xA;&#xA;     x_c(:, ind+1) = A_c*x_c(:, ind) - B_c*y_dec(ind);&#xA;     u(ind+1) = C_c*x_c(:, ind) - D_c*y_dec(ind);&#xA;&#xA;     %u_quant(ind+1) = round(u(ind+1));        %quantization of u(ind+1)&#xA;     u_quant(ind+1) = round(scaleFactor*(u(ind+1) + biasValue)); % &amp;lt;-- New&#xA;     &#xA;     u_enc(ind+1) = modpow(u_quant(ind+1),e,N);&#xA;     u_dec(ind+1) = modpow(u_enc(ind+1),d,N);&#xA;     &#xA;     u_dec(ind+1) = u_dec(ind+1)/scaleFactor - biasValue; % &amp;lt;-- New&#xA;&#xA;     disp(u(ind +1) + &amp;quot; &amp;quot; + u_dec(ind+1))&#xA;&#xA;&#xA;&#xA;end&#xA;&#xA;hold on&#xA;plot(t, y_p, 'r')&#xA;figure&#xA;plot(t, u_dec)&#xA;&#xA;function result = modpow(base,exp,m) &#xA;   result = 1;&#xA;   while (exp &amp;gt; 0) &#xA;      if bitand(exp,1) &amp;gt; 0&#xA;         result = mod((result * base),m);&#xA;      end&#xA;      exp = bitshift(exp,-1);&#xA;      base = mod(base^2,m);&#xA;   end&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I commented all the lines (six of them) with &lt;code&gt;% &amp;lt;-- New&lt;/code&gt; to highlight the changes; again all I did was shift your values by +100 (&lt;code&gt;biasValue&lt;/code&gt;) and then multiply by 1000 (&lt;code&gt;scaleFactor&lt;/code&gt;) before rounding, and then doing the inverse after decrypting. Seems like that's got your controller working!&lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2018-12-07T16:44:50.943" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16803" PostTypeId="1" CreationDate="2018-12-06T16:55:33.590" Score="1" ViewCount="58" Body="&lt;p&gt;I'm an artist with basically no programming background. I need to make my roombas (3 of them) move around a gallery space throughout the day and night (the gallery will be visible from street view 24 hours a day). The show will last about 4 months, so I was wondering if there's a way to automatically schedule such a thing using the Create 2. (The customer service rep said there's a regular model with an app control, but it sounds like someone would have to manually re-set the roomba every time it's done charging). The roombas do not have to be good at cleaning, or anything other than moving, so if there's also a way to minimize the workload of the machine to maximize it's lifespan, I'd be curious if that's possible as well. Thanks so much for your help, roomba programmers! &lt;/p&gt;&#xA;" OwnerUserId="21822" LastActivityDate="2018-12-14T17:11:07.203" Title="Can I program my roomba to run essentially all day (except for charging, of course)?" Tags="&lt;mobile-robot&gt;&lt;movement&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16805" PostTypeId="1" CreationDate="2018-12-06T19:56:58.060" Score="1" ViewCount="41" Body="&lt;p&gt;I'm currently working on the implementation of a system for calculating the vibrations of a hand using two Leapmotion devices, these devices deliver in real time the spatial location (x,y,z) and the speed of each intersection between the bones of the hand. Both devices point to the same hand from different points of view (~70° difference), the data obtained are merged using homogeneous matrices on one of the sensors (called the &quot;support&quot; leapmotion), obtaining results with very low error rate. After this I must give more robustness to the data resulting from the homogeneous matrix (from &quot;support&quot; leapmotion) by using Kalman to merge the data obtained with the &quot;support&quot; and the &quot;leader&quot; sensors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Two doubts arise when studying Kalman, the first is about my initial matrices for the process, I can not understand on what basis they are built, I leave what I have so far.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;public class Kalman {&#xA;&#xA;Inverse inv = new Inverse();&#xA;public double dt = 0.01;//0.01s&#xA;public double Wk = 0;&#xA;public double Xx = 2.0;    public double Xy = 2.0;    public double Xz = 2.0;&#xA;public double Vx = 3.0;    public double Vy = 3.0;    public double Vz = 3.0; &#xA;public double dPVx = 2.0;  public double dPVy = 2.0;  public double dPVz = 2.0;&#xA;public double dPXx = 3.0;  public double dPXy = 3.0;  public double dPXz = 3.0;&#xA;public double dX = 0.1;    public double dY = 0.1;    public double dZ = 0.1; &#xA;public double dVx = 4.0;   public double dVy = 4.0;   public double dVz = 4.0;&#xA;public double Zx = 15.0;    public double Zy = 14.0;    public double Zz = 13.0;&#xA;&#xA;public double Xkant [][] = {{Xx},{Xy},{Xz},{Vx},{Vy},{Vz}}; &#xA;&#xA;public double Akp [][] = {{1.0, 0.0, 0.0, dt, 0.0, 0.0},&#xA;                          {0.0, 1.0, 0.0, 0.0, dt, 0.0},&#xA;                          {0.0, 0.0, 1.0, 0.0, 0.0, dt},&#xA;                          {0.0, 0.0, 0.0, 1.0, 0.0, 0.0},&#xA;                          {0.0, 0.0, 0.0, 0.0, 1.0, 0.0},&#xA;                          {0.0, 0.0, 0.0, 0.0, 0.0, 1.0}}; //transition matrix&#xA;&#xA;public double AkpT [][] = {{1,0,0,0,0,0},&#xA;                           {0,1,0,0,0,0},&#xA;                           {0,0,1,0,0,0},&#xA;                           {dt,0,0,1,0,0},&#xA;                           {0,dt,0,0,1,0},&#xA;                           {0,0,dt,0,0,1}}; //transition matrix trasposed &#xA;&#xA;public double Pkant [][] = {{dPXx*dPXx,0,0,0,0,0},&#xA;                            {0,dPXy*dPXy,0,0,0,0},&#xA;                            {0,0,dPXz*dPXz,0,0,0},&#xA;                            {0,0,0,dPVx*dPVx,0,0},&#xA;                            {0,0,0,0,dPVy*dPVy,0},&#xA;                            {0,0,0,0,0,dPVz*dPVz}}; //Initial value of covariance of estimation error&#xA;&#xA;public double Q [][] = {{dX,0,0,0,0,0},&#xA;                        {0,dY,0,0,0,0},&#xA;                        {0,0,dZ,0,0,0},&#xA;                        {0,0,0,dVx,0,0},&#xA;                        {0,0,0,0,dVy,0},&#xA;                        {0,0,0,0,0,dVz}}; //Covariance matrix of process noise&#xA;&#xA;public double R [][] = {{dX*dX,0,0,0,0,0},&#xA;                        {0,dY*dY,0,0,0,0},&#xA;                        {0,0,dZ*dZ,0,0,0},&#xA;                        {0,0,0,dVx*dVx,0,0},&#xA;                        {0,0,0,0,dVy*dVy,0},&#xA;                        {0,0,0,0,0,dVz*dVz}}; //covariance matrix sensor noise&#xA;&#xA;public double Z [][] = {{dX*dX,0,0,0,0,0},&#xA;                        {0,dY*dY,0,0,0,0},&#xA;                        {0,0,dZ*dZ,0,0,0},&#xA;                        {0,0,0,dVx*dVx,0,0},&#xA;                        {0,0,0,0,dVy*dVy,0},&#xA;                        {0,0,0,0,0,dVz*dVz}}; //&#xA;&#xA;public double H [][] = {{1,0,0,0,0,0},&#xA;                        {0,1,0,0,0,0},&#xA;                        {0,0,1,0,0,0}}; //just format for results?&#xA;&#xA;public double HT [][] = {{1,0,0},&#xA;                         {0,1,0},&#xA;                         {0,0,1},&#xA;                         {0,0,0},&#xA;                         {0,0,0},&#xA;                         {0,0,0}}; //just format for results?&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The second doubt is where should I insert the data of my Leapmotion &quot;leader&quot; and the rotated data of the Leapmotion device &quot;support&quot; in the Kalman equations for its correct fusion?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/EDLSg.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/EDLSg.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In some documents I could observe that matrix Xk* is 3x1 dimensions where the three variables (x, y, z) obtained by the sensors are inserted. So, where is inserted the value of the &quot;leader&quot; sensor? is it my Xk0? or is the data in Xk* the average of the data obtained by both sensors? or maybe I should extend Xk* so that it is 6x1 like ([Xa], [Ya], [Za], [Xb], [Yb], [Zb])?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks for reading! &lt;/p&gt;&#xA;" OwnerUserId="21404" LastActivityDate="2018-12-06T19:56:58.060" Title="Doubts in the implementation of a Kalman filter to merge position data from two identical sensor" Tags="&lt;kalman-filter&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16806" PostTypeId="2" ParentId="16737" CreationDate="2018-12-07T10:04:37.893" Score="3" Body="&lt;p&gt;The answer by @nathangeorge1 is valid for the case of not hitting the legs of the chair. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, you are faced with limited sensor input. This is the case for most robots, even people need to turn their heads to see what is behind them. Either you need to mount more sensors or you may actuate the lidar. You can see an example of an actuated lidar on the PR2 robot platform under its chin in &lt;a href=&quot;https://youtu.be/cTCJSNjTdo0&quot; rel=&quot;nofollow noreferrer&quot;&gt;this video&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could also use a depth camera like the Realsense cameras from Intel or the Structure cameras from Occipital. These cameras will give you a limited field-of-view compared to the LIDAR, but will provide depth information also above the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A cheaper solution is to use ultrasonic sensors. Mounting them pointing upwards will give the robot a sense of obstacles above it. Alternatively the IR based range finders from Sharp, models GP2Y0xxxxxxx, does almost the same job.&lt;/p&gt;&#xA;" OwnerUserId="139" LastEditorUserId="139" LastEditDate="2019-02-11T12:49:35.063" LastActivityDate="2019-02-11T12:49:35.063" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16809" PostTypeId="2" ParentId="16420" CreationDate="2018-12-09T02:34:41.270" Score="0" Body="&lt;p&gt;The typical way of doing visual-inertial SLAM is to create a short accumulated trajectory from IMU and correcting it by visual observation. The pose estimation by the images wouldn't be performed but implicitly affect during the joint optimization.&lt;/p&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2018-12-09T02:34:41.270" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16811" PostTypeId="2" ParentId="2028" CreationDate="2018-12-09T18:26:43.627" Score="0" Body="&lt;p&gt;I have been looking for the same thing and I messed around in the IDLE and found has you put a space next to the first code or the code that you want to do two actions with and type the code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Void loop &#xA;{&#xA;  Serial.print(&quot;Hello&quot;); &#xA;  Serial.print(&quot;World&quot;); &#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And put the semi-colons where I place it on the code. &lt;/p&gt;&#xA;" OwnerUserId="21837" LastEditorUserId="19448" LastEditDate="2018-12-11T16:06:11.607" LastActivityDate="2018-12-11T16:06:11.607" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16813" PostTypeId="1" AcceptedAnswerId="16816" CreationDate="2018-12-10T08:51:52.150" Score="1" ViewCount="83" Body="&lt;p&gt;For example if I want to make my quadrotor hover at a particular height, can't this be achieved by using an altitude sensor, and to correct it's position due to disturbances, can't we just write some if conditions such that depending on certain ranges of the IMU certain motors will increase or decrease it's speed and bring it back to the original position. Hence what is the use of designing controllers for a quadrotor using pid/lqr/h-infinity etc?&lt;/p&gt;&#xA;" OwnerUserId="18892" LastEditorUserId="18892" LastEditDate="2018-12-11T01:46:57.377" LastActivityDate="2018-12-11T01:46:57.377" Title="Why do we need to design controllers (feedback) for controlling a quadrotor?" Tags="&lt;control&gt;&lt;quadcopter&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16815" PostTypeId="2" ParentId="16813" CreationDate="2018-12-10T13:01:05.387" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;using [a] sensor and to correct it's position due to disturbances&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Anything that corrects an action by means of sensors is a controller.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;depending on certain ranges of the IMU certain motors will increase or decrease it's speed&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This sounds a 'stepwise control with deadband' controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can do this - the controller on my lathe is stepwise with deadband as it's easy and sometimes it works well enough where the system dynamics allow it - there's enough inertia in the lathe that we don't need anything very complicated. Generally linear control and PID give better results where the system has to respond to rapidly changing loads. It's unlikely that a quadcopter will be as forgiving as a chunk of rotating iron.&lt;/p&gt;&#xA;" OwnerUserId="1321" LastActivityDate="2018-12-10T13:01:05.387" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16816" PostTypeId="2" ParentId="16813" CreationDate="2018-12-10T15:07:35.823" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;can't it be achieved by using an altitude sensor&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Feeding the sensor data back to motors = feedback control. So you're actually answering your own question. So I'm leaning more on that you're questioning the control techniques like PID, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you just had some &lt;code&gt;if&lt;/code&gt;'s everywhere in the code instead of a continuously modulated control loop, short answer, it wouldn't be accurate, it wouldn't be efficient, it wouldn't be practical, it wouldn't be straightforward to implement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suggest you read a bit about Theory of Control Systems even before going through the answers here but I'll answer your questions briefly. Controllers can help with the following: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Improving steady state accuracy by decreasing the steady state errors. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;As the steady state accuracy improves, the stability also improves.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Reducing the offsets produced in the system.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Maximum overshoot of the system can be controlled using controllers.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Reducing the noise signals produced in the system.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Slow response of the over damped system can be made faster with the help of these controllers.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="19448" LastActivityDate="2018-12-10T15:07:35.823" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16817" PostTypeId="1" AcceptedAnswerId="16826" CreationDate="2018-12-11T01:56:53.500" Score="3" ViewCount="155" Body="&lt;p&gt;I require a little help in the implementation of my filter. I am currently working with two Leapmotion devices for the physiological study of hand vibrations. For this we call each of the devices &quot;L leader&quot; and &quot;L support&quot;. I have problems with the C matrix, which is responsible for modeling the operation of the sensors. In my case, Leapmotion devices deliver data on position (x, y, z) and of course with this it is possible to detach the speed and use it in the filter, leaving L leader (Px, Py, Pz, Vx, Vy, Vz) and L support (Px, Py, Pz, Vx, Vy, Vz). This would then be as follows for the merger?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/7J5dt.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7J5dt.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What data should be put in Xk*?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How do I model matrix C?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Should the H matrix be a 6x6 identity matrix?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks for read, excuse my bad english.&lt;/p&gt;&#xA;" OwnerUserId="21404" LastActivityDate="2018-12-12T15:37:56.383" Title="Sensor fusion - Kalman for two identical position sensors" Tags="&lt;kalman-filter&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16819" PostTypeId="1" CreationDate="2018-12-11T15:54:00.897" Score="0" ViewCount="623" Body="&lt;p&gt;I've worked out the T matrix of the tip (position and orientation) with respect to the base frame of a 6 DoF robot for 2 seconds at 1kHz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the size of the total T matrix is 4*4*1000.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I animate it with MATLAB? Just simple simulation showing the tip frame movement. Like this (not necessary showing the position in numbers): &lt;a href=&quot;https://i.stack.imgur.com/KKgbH.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KKgbH.png&quot; alt=&quot;example&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;from &lt;a href=&quot;https://ljvmiranda921.github.io/notebook/2017/01/25/forward-kinematics-stanford-manipulator/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="21847" LastActivityDate="2018-12-12T08:45:27.000" Title="Forward Kinematics Frame Simulation in MATLAB" Tags="&lt;matlab&gt;&lt;simulation&gt;&lt;forward-kinematics&gt;&lt;frame&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16823" PostTypeId="2" ParentId="16819" CreationDate="2018-12-12T08:45:27.000" Score="1" Body="&lt;p&gt;suppose you calculate the positions of your joints &lt;span class=&quot;math-container&quot;&gt;$p_i, i=1\ldots6$&lt;/span&gt; using your homogeneous matrices. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The best solution in my experience is to plot the initial configuration e.g. like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;// calc p for time t=0&#xA;f=figure(1);&#xA;plot3([0, p_1(1)], [0, p_1(2)], [0, p_1(3)]);&#xA;hold on;&#xA;plot3([p_1(1), p_2(1)], [p_1(2), p_2(2)], [p_1(3), p_2(3)])&#xA;.... // for all links&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;the thing is now, if you want to have a smooth animation, it is a bad idea to call the plot command each time because it needs some time.&#xA;The better solution is to update the coordinates of your figure.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;// in a for loop i=1:length of you time vector&#xA;// calc p for time t=i*deltaT&#xA;set(f.Children(x), 'XData', [p_1(1), p_2(1)], 'YData', [p_1(2), p_2(2)], 'ZData', [p_1(3), p_2(3)])&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where you have to figure out the correct child of you figure handle f, you can just hop trough the structure of f to find the right children. &lt;/p&gt;&#xA;" OwnerUserId="18341" LastActivityDate="2018-12-12T08:45:27.000" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16824" PostTypeId="2" ParentId="12325" CreationDate="2018-12-12T09:59:29.947" Score="5" Body="&lt;p&gt;I'm using Gazebo everyday on my i7 ultrabook; and at home, on i3-7100 desktop. They both have Nvidia GPUs. But fortunately, Gazebo doesn't depend on the GPU. It mostly works on the CPU side. Most Gazebo plugins are built for CPU by default, AFAIK there is only GPU plugin for laser sensor, for 7.0. But I suggest using GPU for better desktop experience while Gazebo is handling your simulation on your powerful CPU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So answer to your question is;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;RAM usage depends on your environment; gazebo plugins that you use/write, world file, also models and their amounts and details. &lt;/li&gt;&#xA;&lt;li&gt;It works with Intel HD Graphics. Tried lots of times. But also depends on your environment, and your CPU.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;You just need an average processor to run it, and a processor that is above the average can give you a better performance. I'm running PX4 flight simulator with Gazebo on my;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;i3-7100 desktop (3.90 GHz, 2 cores, 4 threads, GTX1060) and Real Time Factor is mostly about &lt;strong&gt;0.97&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;But on my i7-4710MQ laptop (2.50 GHz, 4 cores, 8 threads, GTX960M), R.T.F. is mostly about &lt;strong&gt;0.70&lt;/strong&gt;, rarely goes crazy, down to &lt;strong&gt;0.45&lt;/strong&gt; or something.&lt;/li&gt;&#xA;&lt;li&gt;Multi-monitor with Intel HD (for example my Intel® HD Graphics 4600 on i7) is already bad and almost impossible to simulate stuff. But on single laptop monitor, gazebo works normal with Intel HD graphics but don't expect it to work well if your processor is also old.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;On multi-monitor setup, with GPU accelerated environment, gazebo works better.&lt;/p&gt;&#xA;" OwnerUserId="13663" LastEditorUserId="13663" LastEditDate="2019-01-22T13:06:18.103" LastActivityDate="2019-01-22T13:06:18.103" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16826" PostTypeId="2" ParentId="16817" CreationDate="2018-12-12T15:37:56.383" Score="2" Body="&lt;p&gt;The matrix &lt;span class=&quot;math-container&quot;&gt;$C$&lt;/span&gt; usually is denoted the output matrix of your system.&#xA;So e.g. if you are interested in the 3 positions &lt;span class=&quot;math-container&quot;&gt;$x,y,z$&lt;/span&gt; your matrix would look like&#xA;&lt;span class=&quot;math-container&quot;&gt;$ C=\begin{bmatrix} 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \end{bmatrix}$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The matrix &lt;span class=&quot;math-container&quot;&gt;$H$&lt;/span&gt; on the other hand, is the matrix describing uncertainties in your system (which could also be measurement noise) and has the dimension &lt;span class=&quot;math-container&quot;&gt;$3\times r$&lt;/span&gt; for the case of a 3-dimensional output. &lt;span class=&quot;math-container&quot;&gt;$r$&lt;/span&gt; is the dimension of your assumed uncertainty (could be 6 for the noise of your &lt;span class=&quot;math-container&quot;&gt;$2\times3$&lt;/span&gt; dimensional sensors). In practice, it is feasible to assume the uncertainties are not affecting each other, in this case the matrix &lt;span class=&quot;math-container&quot;&gt;$H$&lt;/span&gt; simplifies to a diagonal matrix.&lt;/p&gt;&#xA;" OwnerUserId="18341" LastActivityDate="2018-12-12T15:37:56.383" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="16829" PostTypeId="1" CreationDate="2018-12-12T22:23:13.503" Score="4" ViewCount="621" Body="&lt;p&gt;While reading Kevin Lynch's &lt;em&gt;&quot;Modern Robotics&quot;&lt;/em&gt; [1], I came across a fundamental question concerning the manipulator Jacobian.&#xA;Upon better reading and further cross-checking with Peter Corke's &lt;em&gt;&quot;Robotics, Vision and Control&quot;&lt;/em&gt; [2], I have managed to only confuse myself even more...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Kevin Lynch approaches kinematic representation of open chains with the &lt;a href=&quot;https://en.wikipedia.org/wiki/Product_of_exponentials_formula&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;strong&gt;product of exponentials&lt;/strong&gt;&lt;/a&gt; (PoE) formula. In such representation, the &lt;strong&gt;space Jacobian&lt;/strong&gt; &lt;span class=&quot;math-container&quot;&gt;$J_s(\theta) \in \mathbb{R}^{6 \times n}$&lt;/span&gt; relates the joint rate vector &lt;span class=&quot;math-container&quot;&gt;$\dot{\theta} \in \mathbb{R}^{n}$&lt;/span&gt; to the end-effector's twist expressed in fixed-frame coordinates &lt;span class=&quot;math-container&quot;&gt;$\mathcal{V}_s$&lt;/span&gt; via&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\mathcal{V}_s = J_s(\theta)\dot{\theta}.&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A similar concept, the &lt;strong&gt;body Jacobian&lt;/strong&gt;, relates the joint rate vector to the end-effector's twist &lt;em&gt;in the end-effector frame coordinates&lt;/em&gt; via&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\mathcal{V}_b = J_b(\theta)\dot{\theta}.&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, the relationship between both of the above is given by:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;J_b(\theta) = [Ad_{T_{bs}}]J_s(\theta);&#xA;$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;J_s(\theta) = [Ad_{T_{sb}}]J_b(\theta).&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given the above, my question is:&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Provided &lt;span class=&quot;math-container&quot;&gt;$J_b(\theta)$&lt;/span&gt;, how can I obtain the &lt;em&gt;geometric&lt;/em&gt; Jacobian?&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;I tried looking into Peter Corke's book and I found the following subsection.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Screenshot taken from Peter Corke's book:&#xA;  &lt;a href=&quot;https://i.stack.imgur.com/IxuGS.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/IxuGS.png&quot; alt=&quot;Screenshot of 8.7.1&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So, apparently, what I am looking for is that final equation. (?)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems that &lt;span class=&quot;math-container&quot;&gt;$\sideset{^0}{^\mathcal{V}}{J}$&lt;/span&gt; in Corke's book refers to the same as what &lt;span class=&quot;math-container&quot;&gt;$J_b(\theta)$&lt;/span&gt; refers to in Lynch's book.&lt;br&gt;&#xA;But what does Corke mean exactly with &lt;em&gt;&quot;velocity transformation&quot;&lt;/em&gt;?&lt;br&gt;&#xA;Specifically, what exactly is the top-right 3x3 block of that 6x6 matrix pre-multiplication?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;[1]&lt;/strong&gt; Kevin M. Lynch and Frank C. Park, &quot;Modern Robotics: Mechanics, Planning, and Control,&quot; Cambridge University Press, 2017. (&lt;a href=&quot;http://modernrobotics.org&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://modernrobotics.org&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;[2]&lt;/strong&gt; Peter Corke, &quot;Robotics, Vision and Control: Fundamental Algorithms,&quot; Completely Revised. Vol. 118. Springer, 2017. (&lt;a href=&quot;http://petercorke.com/wordpress/rvc/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://petercorke.com/wordpress/rvc/&lt;/a&gt;)&lt;/p&gt;&#xA;" OwnerUserId="21452" LastEditorUserId="10414" LastEditDate="2021-01-25T16:23:50.157" LastActivityDate="2021-01-25T16:23:50.157" Title="Relationship between the velocity twist Jacobian and the spatial velocity Jacobian" Tags="&lt;jacobian&gt;&lt;screw-theory&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="16832" PostTypeId="1" CreationDate="2018-12-13T17:24:26.827" Score="3" ViewCount="1045" Body="&lt;p&gt;I'm working on a two-wheeled robot and I'm trying to implement a PID control for the motors. But I have a problem, all sources I found online said I have to calculate the error with my encoder values.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the robot I'm programming I got 2 functions. One that gets the absolute encoder values and one that gets the speed in ticks/s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The sources I found didn't specify if I use absolute encoder values or the speed encoder values. I tried both already but it didn't work out too well, so I would like to know if some already have some experience with a motor PID control using the encoders.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is my PID code I wanted to use:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;e_func_r = v_des-v_act_r;&#xA;&#xA;r_mot_r = r_old_r&#xA;    + (1/K_P)*(e_func_r-e_old_r) &#xA;    + K_I*(e_func_r+e_old_r)/2&#xA;    + K_D*(e_func_r-2*e_old_r+e_old2_r);&#xA;&#xA;if(r_mot_r &amp;gt;= 100)&#xA;{&#xA;    r_mot_r = 100;&#xA;}&#xA;if(r_mot_r &amp;lt;= -100)&#xA;{&#xA;    r_mot_r = 100;&#xA;}&#xA;&#xA;r_old_r  = r_mot_r;&#xA;e_old2_r = e_old_r;&#xA;e_old_r  = e_func_r;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="21843" LastEditorUserId="13612" LastEditDate="2019-05-14T11:07:24.767" LastActivityDate="2019-10-11T13:01:40.217" Title="Encoder values for PID control" Tags="&lt;motor&gt;&lt;pid&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16836" PostTypeId="1" CreationDate="2018-12-14T15:40:46.487" Score="1" ViewCount="429" Body="&lt;p&gt;I am developing a package for the ROS, in fact, it is a package of resources/models for the Gazebo, and I need with the presence of this package in the Workspace of &lt;a href=&quot;http://wiki.ros.org/catkin&quot; rel=&quot;nofollow noreferrer&quot;&gt;Catkin&lt;/a&gt; to automatically set the variable &lt;code&gt;GAZEBO_MODEL_PATH&lt;/code&gt; for this package.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I could intervene in the file &lt;code&gt;~/catkin_mygazebo_ws/devel/setup.sh&lt;/code&gt;, adding the path to a variable, but first I would like to know if there is any way to do it by another more specialized route to Catkin.&lt;/p&gt;&#xA;" OwnerUserId="21387" LastEditorUserId="37" LastEditDate="2019-09-13T10:52:48.287" LastActivityDate="2019-10-23T08:12:01.967" Title="setting custom variables on catkin workspace environment" Tags="&lt;ros&gt;&lt;gazebo&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="16837" PostTypeId="2" ParentId="16832" CreationDate="2018-12-14T15:49:35.357" Score="1" Body="&lt;p&gt;The &quot;PID code&quot; you have is not a PID controller. At all. You should have error terms defined as:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;error = setpoint - feedback; // Setpoint and feedback should be in the same units.&#xA;deltaTime = TimeSinceLastCall(); // Platform/language specific. &#xA;&#xA;proportionalError = error;&#xA;integralError = integralError + error*deltaTime;&#xA;derivativeError = (error-prevError)/deltaTime;&#xA;prevError = error;&#xA;&#xA;controlSignal = (kP*proportionalError) + (kI*integralError) + (kD*derivativeError);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;That's a PID controller. I'm not going to go through the code that you posted point-by-point because it's very wrong, to the point that I can't understand how it was intended to work, so I don't really have a rebuttal or explanation to try to help point out where it went wrong. If you want a PID controller, use the error terms as I provided above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, with the original code, the motor control signal is always accumulating. It shouldn't do this, it should instead just be the output of the PID controller. You have:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;r_mot_r = r_old_r + &amp;lt;controller output&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;when it should just be&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;r_mot_r = &amp;lt;controller output&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;as in:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;r_mot_r = controlSignal&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where &lt;code&gt;controlSignal&lt;/code&gt; is the term I defined in the block of code at the top of this post.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'll point out that two-wheeled vehicles are &lt;em&gt;non-holonomic&lt;/em&gt; platforms, which means you can't just position the actuators (wheels) independently and arrive at a given position and orientation. Going forward 10 blocks and then turning left is not the same as turning left and then going forward 10 blocks! You are going to find that your robot &lt;a href=&quot;https://robotics.stackexchange.com/a/9006/9720&quot;&gt;will never go straight&lt;/a&gt; without having some kind of absolute position feedback. Wheel encoder feedback is okay for (very) short term, but you &lt;strong&gt;will&lt;/strong&gt; experience drift. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2019-05-13T19:43:31.550" LastActivityDate="2019-05-13T19:43:31.550" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="16838" PostTypeId="2" ParentId="16803" CreationDate="2018-12-14T17:03:47.077" Score="2" Body="&lt;p&gt;If I understand you right, you want to achieve that three roombas clean 24 hours a day, just making a break if they need to recharge and then continue.&#xA;The Create 2 is a roomba robot that is similar to the 600-series, but some article says it &lt;strong&gt;can not clean&lt;/strong&gt;, which is good as this saves the energy that would be needed to drive the vaccum and brush motors. This also extremly reduces the noise!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately, roombas are only able to be schedule for cleaning once a day just using the normal user interface. This means the robot will move around and &quot;clean&quot; until it thinks its enough for the room size it detects or it's battery is nearly depleated and then move back its charging station. For a large hall this typically means the robot should clean until it's battery is empty. For my 500-series roomba the battery lasts for about 1,5 hours. If not really cleaning, the battery might last much longer! However, the battery discharges even the robot isn't moving or cleaning, since the electronics (control board) draw a noticable amount of energy. This means, the roomba would stop its work for this day and continue cleaning the next day. If you have three of them you can schedule one of them to clean at 0:00am, 8:00am and 4:00pm. But, that's surely not enough.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To make them all clean again as soon as it recharged, you need to influence the devices in one or the other way. Means: You need additional hardware or a person who does it manually. If you know someone who has access to some electronics and can do microcontroller programming (e.g. arduino) stuff well you can use the &lt;a href=&quot;https://www.irobot.com/~/media/mainsite/pdfs/about/stem/create/create_2_open_interface_spec.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;open interface&lt;/a&gt; of the roomba. There is some serial port to control the roomba and to get information from it.&#xA;If you don't want to control the robot, but just need to restart cleaning its quite easy:&#xA;* build a serial connection to the roomba (5V-Arduino prefered) &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;send a &quot;START&quot; and &quot;SAFE MODE&quot; command to the robot to be able to observe its state&lt;/li&gt;&#xA;&lt;li&gt;check if it is placed on a charging station. If not: &quot;STOP&quot; and sleep some minutes and repeat.&lt;/li&gt;&#xA;&lt;li&gt;if its on a charging station and finished recharging -&gt; start &quot;MAX&quot; cleaning mode&lt;/li&gt;&#xA;&lt;li&gt;observe the battery status, if it's getting too low: -&gt; activate &quot;Docking mode&quot;&lt;/li&gt;&#xA;&lt;li&gt;if docked, execute &quot;STOP&quot; command (else it won't recharge!)&lt;/li&gt;&#xA;&lt;li&gt;repeat steps&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;To optimize you might already restart the cleaning at 80-90% of battery charge, as the last 10-20% of recharging take much longer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The programming itself isn't too hard, but you need:&#xA;1. a microcontroller (e.g. Arduino)&#xA;2. someone who is able to do the electronics (connections to the robot), if you can't do it yourself&#xA;3. someone to do simple (arduino-)programming stuff (mainly serial port communication)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you would send me a video of the installation, I would do the programming for you. But, I assume that I cannot come over and modify the roomba for you to install an arduino to it. Nor can I upload the software to your arduino. So it makes more sense if you would find someone nearby who can do it. Give them a link to the &lt;a href=&quot;https://www.irobot.com/~/media/mainsite/pdfs/about/stem/create/create_2_open_interface_spec.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;open interface spec&lt;/a&gt;, which tells them basically how to connect an arduino and how to execute commands via serial port commands.&lt;/p&gt;&#xA;" OwnerUserId="19123" LastEditorUserId="19123" LastEditDate="2018-12-14T17:11:07.203" LastActivityDate="2018-12-14T17:11:07.203" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16839" PostTypeId="1" AcceptedAnswerId="16840" CreationDate="2018-12-14T18:05:18.430" Score="1" ViewCount="50" Body="&lt;p&gt;So I understand that a heuristic way of determining values for PID would be to use the Ziegler method, having zero I and D and then adjusting P until you have oscillations. Wouldn't the setpoint change what the P gain should be to oscillate? So if setpoint is very far off you might be coming into the oscillation region with a larger rate of change and would need a larger P to have it oscillate back, whereas with a setpoint relatively close you wouldn't need as much. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would you simply tune to what is more likely being close or being far from the setpoint when control begins?&lt;/p&gt;&#xA;" OwnerUserId="21871" LastEditorUserId="21871" LastEditDate="2018-12-14T18:21:42.093" LastActivityDate="2018-12-14T21:38:34.410" Title="PID Tuning. Does Setpoint Affect Gain for Tuning" Tags="&lt;control&gt;&lt;pid&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16840" PostTypeId="2" ParentId="16839" CreationDate="2018-12-14T21:38:34.410" Score="3" Body="&lt;p&gt;You are correct; this is the &lt;a href=&quot;https://en.wikipedia.org/wiki/PID_controller#Limitations_of_PID_control&quot; rel=&quot;nofollow noreferrer&quot;&gt;biggest disadvantage of a PID controller&lt;/a&gt;. Oscillation will happen as a result of system inertia, but there's no way to &quot;inform&quot; the PID controller as to how much inertia it should expect. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another factor would be actuator saturation. A cruise control system that would floor a gas pedal trying to get from 0 to 25 would also floor the gas pedal trying to get from 0 to 100; so in that instance there's not going to be too much difference regarding the initial transient.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Generally speaking, the best approach &lt;em&gt;if you don't know the process&lt;/em&gt; is simply to tune for the anticipated scenario. I've seen brute force methods try to swap control gains depending on the scenario at hand, if you expected distinctly different operating conditions (like startup, normal operation, and shutdown). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you know the process but don't want to get into more complex controls then you can try to estimate the required control signal given current conditions. This is known as &quot;feed-forward&quot; control, and leaves your PID controller to make up the difference between the result of your feed-forward controller and the actual system output. This is very common in industrial controls, especially motor speed/torque control. You input rotor inertia, load inertia, etc., along with the motor parameters and can generally ballpark the current required to achieve a specific speed profile. The PID controller then just makes up the difference. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, if you know the process and are willing to get more in-depth, model-based control would be the approach. Techniques like &lt;a href=&quot;https://en.wikipedia.org/wiki/Full_state_feedback&quot; rel=&quot;nofollow noreferrer&quot;&gt;state feedback controls&lt;/a&gt; exist that allow you to take a model of your system and use that model to define the controller.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-12-14T21:38:34.410" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="16841" PostTypeId="1" CreationDate="2018-12-15T13:13:21.180" Score="2" ViewCount="47" Body="&lt;p&gt;Using SIMULINK, I wanted to optimize 2 variables with the ant colony optimization algorithm; which is written in a matlab function block, the function is of type function y = f (x) it has only one variable to optimize and since I have 2 variables! how can i do ?&#xA;&lt;a href=&quot;https://i.stack.imgur.com/Q4nck.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Q4nck.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="21770" LastActivityDate="2018-12-15T13:13:21.180" Title="how to introduce 2 inputs into a matlab block function that processes only one variable at a time?" Tags="&lt;mobile-robot&gt;&lt;pid&gt;&lt;matlab&gt;&lt;dynamics&gt;&lt;simulation&gt;" AnswerCount="0" CommentCount="7" ClosedDate="2018-12-17T21:43:49.963" ContentLicense="CC BY-SA 4.0" />
  <row Id="17844" PostTypeId="2" ParentId="16836" CreationDate="2018-12-16T17:06:29.013" Score="0" Body="&lt;p&gt;After some tests and following suggestions in the reference links at the end of this answer, I came up with the following solution:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's assume you need to add the path to new gazebo templates when developing your packages, so create a directory called &lt;code&gt;env_hooks&lt;/code&gt; in your template package folder.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Enter the directory and create a configuration file with the extension specified for each shell (.bash, .zsh, tcsh). This file can have any name, in the case I will use models_env. , change &lt;code&gt;&amp;lt;shell_string&amp;gt;&lt;/code&gt; to the extension representing the shell, each file must be the required variables configuration according to the shell.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now edit the &lt;code&gt;CMakeLists.txt&lt;/code&gt; file and add the following directive to the end:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;catkin_add_env_hooks (models_env SHELLS bash tcsh zsh DIRECTORY $ {CMAKE_CURRENT_SOURCE_DIR} / env-hooks)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;For example, for the Bash shell, I edited my &lt;code&gt;models_env.bash&lt;/code&gt; file and put:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#! /bin/bash&#xA;echo &quot;*******&quot;&#xA;echo &quot;Preparing specific variables for the gazebo_model package&quot;&#xA;echo &quot;*******&quot;&#xA;&#xA;_CATKIN_ENV_HOOKS_PATH = &lt;span class=&quot;math-container&quot;&gt;$ (catkin locate arr_gazebo_models)&#xA;export GAZEBO_MODEL_PATH = &quot;$&lt;/span&gt; {_ CATKIN_ENV_HOOKS_PATH} / models: $ {GAZEBO_MODEL_PATH}&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;h2&gt;References:&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://docs.ros.org/api/catkin/html/user_guide/environment.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://docs.ros.org/api/catkin/html/user_guide/environment.html&lt;/a&gt;&#xA;&lt;a href=&quot;https://docs.ros.org/api/catkin/html/dev_guide/generated_cmake_api.html#catkin_add_env_hooks&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://docs.ros.org/api/catkin/html/dev_guide/generated_cmake_api.html#catkin_add_env_hooks&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="21387" LastActivityDate="2018-12-16T17:06:29.013" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17848" PostTypeId="2" ParentId="16829" CreationDate="2018-12-17T18:27:55.697" Score="1" Body="&lt;p&gt;According to the notation in Corke's book, it looks like that top-right 3x3 block that you're looking for is the translation from end effector frame E to base frame 0 represented in so(3).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It looks like the trouble here comes from viewing the velocity in different frames. Lynch's spatial twist (defined on page 99) differs from Corke's spatial velocity (defined in section 8.1).&lt;/p&gt;&#xA;" OwnerUserId="21881" LastActivityDate="2018-12-17T18:27:55.697" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17851" PostTypeId="1" CreationDate="2018-12-18T07:42:32.653" Score="2" ViewCount="35" Body="&lt;p&gt;Is their any method by using which I can find a space or gap in given point cloud which has size greater than given rectangle of size &lt;span class=&quot;math-container&quot;&gt;$l*b$&lt;/span&gt; or a circle of radius &lt;span class=&quot;math-container&quot;&gt;$r$&lt;/span&gt;? This way my robot can make a path to that space and move towards it. Is this possible by first finding the key points than applying triangular to given key points?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am developing a navigation algorithm for my robot, and wondering if this kind of method already exists.&lt;/p&gt;&#xA;" OwnerUserId="20529" LastEditorUserId="2289" LastEditDate="2018-12-20T14:48:04.370" LastActivityDate="2018-12-23T23:24:50.103" Title="how to find space in point cloud larger than given l*b" Tags="&lt;navigation&gt;&lt;path-planning&gt;&lt;autonomous-car&gt;&lt;point-cloud&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17857" PostTypeId="1" CreationDate="2018-12-19T19:15:52.590" Score="1" ViewCount="31" Body="&lt;p&gt;Is there a tutorial/guide apart from the research papers ( &lt;a href=&quot;https://link.springer.com/chapter/10.1007/978-3-540-88513-9_3&quot; rel=&quot;nofollow noreferrer&quot;&gt;paper 1&lt;/a&gt; and &lt;a href=&quot;https://ieeexplore.ieee.org/document/857974&quot; rel=&quot;nofollow noreferrer&quot;&gt;paper 2&lt;/a&gt; ), for implementation of torque disturbance observers on multi-DOF robotic manipulators to determine sudden collision event or estimate feed-forward torque.&lt;/p&gt;&#xA;" OwnerUserId="18572" LastActivityDate="2018-12-19T19:15:52.590" Title="Torque Disturbance Observer for Manipulator Arms" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;torque&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17858" PostTypeId="1" CreationDate="2018-12-20T13:42:05.533" Score="1" ViewCount="34" Body="&lt;p&gt;I have implemented inverse kinematics for nonholonomic mobile wheeled robots, and the RPM range of the motor that I used is &lt;strong&gt;-50 to 50&lt;/strong&gt;, while for PWM is from &lt;strong&gt;1300 to 1700&lt;/strong&gt;. But in certain cases, the RPM that generated from inverse kinematics exceeds the maximum speed. How to normalize it so the RPM or PWM does not exceed the maximum speed so the robot can run properly and reach the target?&lt;/p&gt;&#xA;" OwnerUserId="21895" LastActivityDate="2018-12-21T10:36:10.327" Title="how to normalize PWM if the value exceeds the maximum speed limit" Tags="&lt;mobile-robot&gt;&lt;kinematics&gt;&lt;inverse-kinematics&gt;&lt;pwm&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17859" PostTypeId="2" ParentId="16703" CreationDate="2018-12-21T10:20:44.810" Score="0" Body="&lt;p&gt;First, you need a model of the magnetic field you are measuring. Have a look at the &lt;a href=&quot;https://www.ngdc.noaa.gov/IAGA/vmod/igrf.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;IGRF&lt;/a&gt; model, which is usually used in space applications. There are ready to go implementations for most programming languages.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With this model, you are able to calculate a &lt;em&gt;theoretical&lt;/em&gt; magnetic field vector in the inertial coordinate frame, depending on your estimated position. With your estimated quaternion you transform this vector in your body coordinate frame. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second, now you have a theoretical vector in the body frame and a measured vector in the body frame, provided by the sensor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The rest is straight forward EKF formulation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;References: &#xA;&lt;a href=&quot;https://arc.aiaa.org/doi/abs/10.2514/3.25364&quot; rel=&quot;nofollow noreferrer&quot;&gt;Three-axis attitude determination via Kalman filtering of magnetometer data, MARK L. PSIAKI&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.springer.com/book/9781493908011&quot; rel=&quot;nofollow noreferrer&quot;&gt;Fundamentals of Spacecraft Attitude Determination and Control, Markley, F. Landis&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18341" LastEditorUserId="18341" LastEditDate="2018-12-21T10:29:37.830" LastActivityDate="2018-12-21T10:29:37.830" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17865" PostTypeId="1" AcceptedAnswerId="17867" CreationDate="2018-12-22T14:16:42.867" Score="4" ViewCount="497" Body="&lt;p&gt;I'm trying to find a method to control a moveo 5dof arm. My goal is to calculate the right angle to turn for each stepper motor to reach a desired point in real environment. I've spent time looking at the jacobian inverse kinematics, but it really got me confused. According to some articles I've read, Jacobian is useful to calculate joints' velocity, but as far as I know, stepper motors operate at a fixed speed. So my question is can I use this method to just calculate the necessary angles for the steppers, or should I use another method? In both cases, can you please introduce to me some helpful articles to refer to?&#xA;Many thanks&lt;/p&gt;&#xA;" OwnerUserId="21913" LastActivityDate="2018-12-23T21:22:58.370" Title="Struggling to understand Jacobian Inverse Kinematics" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;inverse-kinematics&gt;&lt;stepper-motor&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17866" PostTypeId="1" CreationDate="2018-12-22T18:54:53.213" Score="1" ViewCount="279" Body="&lt;p&gt;The polyscope platform of Universal Robots saves programs as *.urp. They are very different to urscrips. &#xA;Is there a way to create such files without polyscope?&lt;/p&gt;&#xA;" OwnerUserId="6814" LastActivityDate="2018-12-24T10:39:25.847" Title="How to create a .urp for universal robots?" Tags="&lt;robotic-arm&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17867" PostTypeId="2" ParentId="17865" CreationDate="2018-12-22T19:55:16.473" Score="2" Body="&lt;p&gt;Without using the Jacobian, inverse kinematics provide joint angles to put the robot at a desired pose.  But using inverse kinematics to move from one pose to another does not say anything about the path the robot will take between poses.  Therefore, you can choose target poses that are pretty close together to have a robot follow a desired path.   When those poses are infinitesimally close to one another, you enter the subject of Jacobians.   These matrices map differential joint velocities to differential Cartesian velocities for a given pose.   So if you are at pose A, the inverse Jacobian will provide a joint velocity vector in the direction of pose B.   These have to be updated rapidly, though, because the Jacobian is only accurate in a small neighborhood of where it is computed.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Incidentally, stepper motors are not necessarily constant-velocity motors.   They move one step for every pulse they receive.   You can change the rate of the pulses to change the motor’s velocity.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2018-12-22T19:55:16.473" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17868" PostTypeId="2" ParentId="17865" CreationDate="2018-12-23T09:52:07.207" Score="5" Body="&lt;p&gt;You will find it helpful to keep the physical robot and the math separate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The kinematics equations map joint parameters (which are often grouped as a vector &lt;span class=&quot;math-container&quot;&gt;$q$&lt;/span&gt;) to Cartesian coordinates (&lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt;,&lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt;,&lt;span class=&quot;math-container&quot;&gt;$z$&lt;/span&gt;). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you take the first-order partial derivative of the kinematics equations, you get a set of equations that map a change in the joint parameters to a change in the Cartesian coordinates. The &lt;a href=&quot;http://mathworld.wolfram.com/Jacobian.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Jacobian&lt;/a&gt; is another name for this first-order partial derivative.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's true that if you consider a change over a fixed amount of time, you can call it a velocity, and you can use the Jacobian to map joint velocities to Cartesian velocities. But you have to be careful because these are instantaneous velocities and as soon as the position changes, the mapping between velocities changes as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To &lt;a href=&quot;http://math.ucsd.edu/~sbuss/ResearchWeb/ikmethods/iksurvey.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;calculate inverse kinematics using the jacobian&lt;/a&gt; you will need solve or approximate inverse equations that map Cartesian changes to joint parameter changes, and then use an iterative algorithm to find the solution. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are not interested in learning the mathematics and numerical methods required to implement inverse kinematics, there are &lt;a href=&quot;http://openrave.org/docs/0.8.2/openravepy/ikfast/&quot; rel=&quot;nofollow noreferrer&quot;&gt;software libraries available&lt;/a&gt; that already solve the problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you use an existing library, you should keep in mind that solving the inverse kinematics is a hard problem that often has no solutions or more than one solution.&lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="184" LastEditDate="2018-12-23T21:22:58.370" LastActivityDate="2018-12-23T21:22:58.370" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17871" PostTypeId="1" CreationDate="2018-12-23T14:08:47.197" Score="2" ViewCount="89" Body="&lt;p&gt;I've struggled to get my head around Robomaker and still have not gotten even a simple robotic example to work. Have you located any documentation that is more complete than one Amazon offers?&lt;/p&gt;&#xA;" OwnerUserId="17190" LastActivityDate="2019-05-11T09:25:44.037" Title="AWS Robomaker - success story?" Tags="&lt;simulation&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17873" PostTypeId="1" CreationDate="2018-12-23T15:43:25.097" Score="4" ViewCount="841" Body="&lt;p&gt;I'm trying to get into Kalman filters. I've noticed an issue with Euler angles near -180°/180° (or -pi/pi) and wonder how to correctly resolve this. Its often said you need to normalize the angles into this range. However, this isn't as easy as it seems at first sight. Especially, when using a Kalman filter class from a library (e.g. OpenCV).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's take a very simple examle. We have only a compass sensor, which will give us a heading in the XY-plane. And our state keeps track of the current heading and its first derivative (speed of change).&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Matrix Algebra&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;First, I'll give all information in the typical matrix form to show how this actually relates to the Kalman filter. Later I'll reduce this to simple formulas for better reasoning.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We define our state space vector as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$x_{k} = \begin{bmatrix} \alpha \\ \dot{\alpha} \end{bmatrix}$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where &lt;span class=&quot;math-container&quot;&gt;$\alpha$&lt;/span&gt; is the current heading in degrees (for simplicity) and &lt;span class=&quot;math-container&quot;&gt;$\dot{\alpha}$&lt;/span&gt; is the current change of the heading in degrees per second.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The new a priori state estimate (prediction) is calculated by:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\hat{x}_{k|k+1} = F_k x_k$&lt;/span&gt;&#xA;where &lt;span class=&quot;math-container&quot;&gt;$F_k = \begin{bmatrix} 1 &amp;amp; \Delta t \\ 0 &amp;amp; 1\end{bmatrix}$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Our observations look like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$z_k = \begin{bmatrix} \alpha_{new} \end{bmatrix}$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And the correction / update step looks like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\tilde{y}_k = z_k - H_k \hat{x}_{k|k+1}$&lt;/span&gt; where &lt;span class=&quot;math-container&quot;&gt;$H_k = \begin{bmatrix} 1 &amp;amp; 0\end{bmatrix}$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later the Kalman gain &lt;span class=&quot;math-container&quot;&gt;$K_k$&lt;/span&gt; is calculated and influences the state estimate like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\hat{x}_{k+1} = \hat{x}_{k|k+1} + K_k \tilde{y}_k$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Simplifications&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\hat{x}_{k|k+1} = \begin{bmatrix} \alpha + \Delta t \dot{\alpha} \\ \dot{\alpha}\end{bmatrix}$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\tilde{y}_k = \alpha_{new} - (\alpha + \Delta t \dot{\alpha})$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\hat{x}_{k+1} = \hat{x}_{k|k+1} + K_k \tilde{y}_k$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now lets only focus only on the estimation of &lt;span class=&quot;math-container&quot;&gt;$\alpha$&lt;/span&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\alpha_{k|k+1} = \alpha_k + \Delta t \dot{\alpha}_k$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\alpha_{k+1} = \alpha_{k|k+1} + K_k^1 (a_{new} - \alpha_{k|k+1})$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;The Issue and Semi-Solution&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;For simplicity I'll use angles in degrees. Let's assume, we've got the following situation:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\alpha_k = 160°$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$\dot{\alpha}_k = 100°/s$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$\Delta t = 0.1 s$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$a_{new} = -170°$&lt;/span&gt; (&lt;span class=&quot;math-container&quot;&gt;$\equiv$&lt;/span&gt; 190°) and &lt;span class=&quot;math-container&quot;&gt;$K_k^1 = 0.1$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hence, &lt;span class=&quot;math-container&quot;&gt;$\alpha_{k|k+1} = 160° + 0.1 * 100° = 170°$&lt;/span&gt; and therefore &lt;span class=&quot;math-container&quot;&gt;$a_{new} - \alpha_{k|k+1} = -170° - 170° = -340° \equiv 20°$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The updated estimate would therefore (incorrect estimate) be:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\alpha_{k+1} = 170° + 0.1 * (-340°) = 170° - 34° = 136°$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If we normalize &lt;span class=&quot;math-container&quot;&gt;$\alpha_{k|k+1}$&lt;/span&gt; to [-180°, 180°] we get the equivalent 20° and the result is (correctly estimated):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\alpha_{k+1} = 170° + 0.1 * 20° = 170° + 2° = 172°$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The normalization would fix the issue. However, if I use a normal Kalman filter class, I usually cannot influence how the innovation &lt;span class=&quot;math-container&quot;&gt;$\tilde{z}_k$&lt;/span&gt; is calculated and the filter class cannot know that this is an Euler angle that needs special handling. Thus, I would need to write it my own... Or is there any way around this?&#xA;A quick solution might be to use a unit vector &lt;span class=&quot;math-container&quot;&gt;$\begin{bmatrix} cos(\alpha) \\ sin(\alpha) \end{bmatrix}$&lt;/span&gt; instead of the euler angle &lt;span class=&quot;math-container&quot;&gt;$\alpha$&lt;/span&gt;, which I would have to renormalize every now and then.&#xA;I know that one could maybe use quaternions for this, but I currently can't grasp the math behind it to use it. Also I saw someone argue that it would be a bad idea to use quaternions in the state space of a Kalman filter (e.g. see comments to &lt;a href=&quot;https://dsp.stackexchange.com/questions/19729/how-to-determine-covariance-matrix-q-and-r-in-kalman-filter&quot;&gt;this question&lt;/a&gt;). This could also apply to my unit vector approach. Hence, I would like you to discuss the issue and give me some clues on how this is usually resolved.&lt;/p&gt;&#xA;" OwnerUserId="19123" LastActivityDate="2020-09-10T10:24:26.437" Title="Kalman-Filter: how to solve angles near +/-pi?" Tags="&lt;kalman-filter&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17875" PostTypeId="2" ParentId="17873" CreationDate="2018-12-23T23:05:50.263" Score="1" Body="&lt;p&gt;In my case, I generally write my own Kalman Filter stuff. My very first solution for this problem would be straight forward. I would put the angles at the desired interval before/after any angle update operation. In the case this not perform accordingly to the specifications I would recur to some mathmagic, like unit vector as you did. In this case it is up to you to establish the frequency of reorthogonalization. With 3D-roation matrices I use 1000 iterations for a 64bit computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another solution would be in code. Can't you simply inherit the kalman filter class and alter only the method performing the update/inovation step?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And also, there is Lie Algebra and the Twist coordinates. Very helpful when comes to specifying 3D movement.&lt;/p&gt;&#xA;" OwnerUserId="20197" LastActivityDate="2018-12-23T23:05:50.263" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17876" PostTypeId="2" ParentId="17851" CreationDate="2018-12-23T23:24:50.103" Score="1" Body="&lt;p&gt;Why don't you try to look it &lt;em&gt;au contraire&lt;/em&gt;? Given you know the robot's &quot;radius&quot; (a contact free sphere actually with your desired &lt;em&gt;r&lt;/em&gt; value) you can enlarge obstacles you find, although this would require the used of some sort of discretaziation of the world in a grid. For 3D this can be done using OctoMap (&lt;a href=&quot;https://octomap.github.io/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://octomap.github.io/&lt;/a&gt;). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;With obstacles enlarged by half of the robot radius, the robot becomes a dot. The planning now can be performed using A* in the discrete grid. The A* will give a sequence of points that can be used as waypoints or can be interpolated using spline curves to impose linear and angular velocity to the robot. Dubin's path is also an option.&lt;/p&gt;&#xA;" OwnerUserId="20197" LastActivityDate="2018-12-23T23:24:50.103" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17877" PostTypeId="1" CreationDate="2018-12-23T23:39:57.113" Score="-1" ViewCount="43" Body="&lt;p&gt;I use a TowerPro sg90.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1.5 ms for the centre position 0 degree, and 2 ms pulse for +90 degree and -90 degree with a 1ms pulse. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But it's definitely not looking like it goes for 90 degree or -90 degree. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did read, some said &quot;I tested two of them for about 130.000 cycles, without load, at one cyle per second, and 70 degrees travel.&quot; . &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What does that mean &quot;130.000 cycles at one cycle per second&quot;?&lt;/p&gt;&#xA;" OwnerUserId="21923" LastActivityDate="2018-12-25T11:54:36.707" Title="Pwm settings of a Sg90 servo motor" Tags="&lt;robotic-arm&gt;&lt;servomotor&gt;&lt;rcservo&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17879" PostTypeId="2" ParentId="17877" CreationDate="2018-12-25T11:54:36.707" Score="1" Body="&lt;p&gt;They use &quot;cycle&quot; to mean moved left then right.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They moved it left then right 130,000 times. They did it at a rate of once per second. They moved it 70 degrees, without any load attached. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2018-12-25T11:54:36.707" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17881" PostTypeId="2" ParentId="16381" CreationDate="2018-12-26T18:51:55.973" Score="1" Body="&lt;p&gt;Assuming you know how to model a regular quadrotor as &lt;span class=&quot;math-container&quot;&gt;$\dot{x} = Ax + Bu$&lt;/span&gt;, the only difference with the addition of the extra propeller will be in your control matrix and control vector (one more dimension and different control derivatives). &lt;/p&gt;&#xA;" OwnerUserId="21285" LastActivityDate="2018-12-26T18:51:55.973" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17882" PostTypeId="1" CreationDate="2018-12-27T02:33:26.067" Score="1" ViewCount="38" Body="&lt;p&gt;I'm designing a rover to use as a harvest aid on our vegetable farm.  It will be GPS guided using an RTK base station to straddle our parallel fixed-width vegetable beds. (66&quot; wide with 48&quot; of growing area, the rest is 18&quot; of path for feet and tires)  The human harvester will be able to control the rover's speed along a fixed path so it can function as a harvest bin holder and carrier. Picture a rolling table 66&quot; tire center to tire center, 48&quot; or so long and 36&quot; high.  The axles are upside down U shaped so that there is clearance for the plants underneath. It will creep along at very slow speeds in front of the person harvesting and then return to our pack-shed at faster speeds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It will have 4 wheels.  The front axle will pivot on its center in relation to the rest of rover and have an Ackermann steering design, such that one motor, centrally positioned, will turn the front tires via tie-rods connected to steering arms.  This is the first motor I need to select and size. Its shaft will move less than 180 degrees but needs to be precisely controlled. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The rear axle will have 2 drive wheels, each with its own motor, and will be fixed to the main body of the rover. These are the second motors I need to select and size.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My initial design will be for 500lb Max Gross Weight, but if it works well, it would be nice to build one that could carry a ton. I've listed some calculations below that relate the max speed, which is only 5-7mph, and the tire diameter to figure the max RPMs of the drive wheels.  It also looks at the weight, rolling resistance and gradient climbing resistance to figure the power and torque requirements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could someone with experience in this check out my numbers, verify I'm on the right track with my calculations and make some recommendations for motors? In-wheel motors look really interesting for the drive wheels, especially with this design, which needs lots of open space in the center, making a differential difficult.  I was thinking I could program differential speed via the 2 motors based on the position of the steering motor.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for the steering motor, I'm not sure if a servo would be required here of if a stepper would work?  Any suggestions on motor type and size would be greatly appreciated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;max speed       7 miles/hour, 10.27 ft/s,   3.13 meters/sec&#xA;tire diameter   22 inches,  1.83 ft,    0.56 meters&lt;br&gt;&#xA;tire circumference          5.76    ft&lt;br&gt;&#xA;angular velocity            11.20   radians/sec&lt;br&gt;&#xA;RPM                         106.95  RPM     &lt;/p&gt;&#xA;&#xA;&lt;p&gt;total vehicle weight        500 lbs&#xA;                            226.80  kilograms&#xA;number of drive motors      2 motors&#xA;motor efficiency            0.85&lt;br&gt;&#xA;weight per drive wheel      113.398 kg&#xA;resistance by weight        25%&#xA;gradient percentage         15%&#xA;rolling force               28.3495 N&#xA;gradient force              17.0097 N&lt;/p&gt;&#xA;&#xA;&lt;p&gt;motor power                 286 Watts&#xA;motor torque                14.91   Nm&#xA;wheel traction force        45.36   N&lt;/p&gt;&#xA;" OwnerUserId="21934" LastActivityDate="2018-12-27T02:33:26.067" Title="motor selection for farm rover" Tags="&lt;mobile-robot&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17883" PostTypeId="1" CreationDate="2018-12-27T03:03:22.430" Score="1" ViewCount="60" Body="&lt;p&gt;I am reading accelerometer data from the wiimote &lt;strong&gt;/wiimote/state&lt;/strong&gt; topic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A sample of the data I'm working with is as follows:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;angular_velocity_raw:&#xA;  x: 8292.0&#xA;  y: 8246.0&#xA;  z: 8182.0&#xA;angular_velocity_covariance: [0.1915446291709091, 0.0, 0.0, 0.0, 0.3915998474972723, 0.0, 0.0, 0.0, 0.5571460438609092]&#xA;linear_acceleration_zeroed:&#xA;  x: -3.63209259259&#xA;  y: -1.45283703704&#xA;  z: 8.67511346154&#xA;linear_acceleration_raw:&#xA;  x: 120.0&#xA;  y: 128.0&#xA;  z: 154.0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;From running the turtlebot3_teleop node I can see that the range of data on the linear-x axis is &lt;strong&gt;-2.84 to 2.84&lt;/strong&gt; while on the angular-y axis it's &lt;strong&gt;-0.22 to 0.22&lt;/strong&gt;. &#xA;My problem is the x axis the data I retrieve from the accelerometer is much larger. For instance, from the output above, &lt;em&gt;angular_velocity_raw.z&lt;/em&gt; has a value of &lt;em&gt;8182.0&lt;/em&gt; &lt;strong&gt;and&lt;/strong&gt; &lt;em&gt;linear_acceleration_raw.x&lt;/em&gt; has a value of &lt;em&gt;120.0&lt;/em&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Can anyone help me with advice on how I can accurately make my accelerometer figures fit into the specified ranges mentioned above?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="14355" LastActivityDate="2018-12-27T03:03:22.430" Title="Writing IMU accelerometer data into as twist messages into cmd_vel" Tags="&lt;ros&gt;&lt;imu&gt;&lt;accelerometer&gt;&lt;python&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17885" PostTypeId="1" AcceptedAnswerId="17912" CreationDate="2018-12-27T16:51:35.690" Score="5" ViewCount="135" Body="&lt;p&gt;I'm working on an exercise about DH-parameters for my robotics course in university and I ran into a problem, because my solution is different from the one given by my professor. I calculated the DH-parameters &lt;span class=&quot;math-container&quot;&gt;$\theta=\theta_1-90˚, d=20m, a=0, \alpha=-90˚$&lt;/span&gt;. So far my solution is identical with the one of my professor. Now the next task is to calculate the transformation matrix &lt;span class=&quot;math-container&quot;&gt;$T_{0,1}$&lt;/span&gt; using the calculated DH-parameters.  Now I calculated:&#xA;&lt;span class=&quot;math-container&quot;&gt;\begin{equation}&#xA;T_{0,1}=&#xA;\left(\begin{matrix} &#xA;\cos(\theta_1-90)  &amp;amp; 0 &amp;amp; -sin(\theta_1-90) &amp;amp; 0 \\&#xA;sin(\theta_1-90) &amp;amp; 0 &amp;amp; cos(\theta_1-90) &amp;amp; 0 \\&#xA;0 &amp;amp; -1 &amp;amp; 0 &amp;amp; 20\\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1&#xA;\end{matrix}\right)&#xA;\end{equation}&lt;/span&gt;&#xA;Now the solution of my professor states:&#xA;&lt;span class=&quot;math-container&quot;&gt;\begin{equation}&#xA;T_{0,1}=&#xA;\left(\begin{matrix} &#xA;\cos(\theta_1-90)  &amp;amp; 0 &amp;amp; -sin(\theta_1-90) &amp;amp; 0 \\&#xA;sin(\theta_1-90) &amp;amp; 1 &amp;amp; cos(\theta_1-90) &amp;amp; 0 \\&#xA;0 &amp;amp; -1 &amp;amp; 0 &amp;amp; 20\\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1&#xA;\end{matrix}\right)&#xA;\end{equation}&lt;/span&gt;&#xA;Which is almost what I got, but not exactly since they put a 1 where I put a 0 in position (2,2). After multiplicating the transformation matrixes of the single DH-parameters I had found that the position (2,2) evaluates to &lt;span class=&quot;math-container&quot;&gt;$\cos(\theta_i)\cdot\cos(\alpha_i)$&lt;/span&gt; and since since &lt;span class=&quot;math-container&quot;&gt;$cos(-90˚)$&lt;/span&gt; evaluates to 0 it should be 0, or not? Where am I wrong?&lt;/p&gt;&#xA;" OwnerUserId="21556" LastActivityDate="2019-01-02T06:55:47.343" Title="Wrong forward-kinematic after calculating from DH-parameters" Tags="&lt;kinematics&gt;&lt;forward-kinematics&gt;&lt;dh-parameters&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17887" PostTypeId="1" CreationDate="2018-12-28T12:28:04.510" Score="3" ViewCount="200" Body="&lt;p&gt;What is the best way to model the SLAM problem (offline) for a wheeled robot moving on a flat floor in 3D space (the pose has only 3 degrees of freedom)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In terms of sensor data, we have the wheel odometry and 3D measurements of landmarks (coming from a Kinect v2).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The bit that I'm confused about is that this is a very standard setting, yet all the examples I've seen for 2D SLAM use 2D features and don't mention anything about what to do with 3D sensor measurements, and vice-versa, I haven't seen a 3D SLAM solution where we could easily incorporate known constraints on the robot pose (has to lie on a plane). It would be great to know what is common practice in this setting. An explanation or a link to an example implemented in some SLAM framework would be of much help.&lt;/p&gt;&#xA;" OwnerUserId="4290" LastEditorUserId="110" LastEditDate="2019-02-13T01:11:51.203" LastActivityDate="2019-02-13T01:11:51.203" Title="Robot moving on a flat floor - 2D or 3D SLAM?" Tags="&lt;slam&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17888" PostTypeId="1" CreationDate="2018-12-28T19:42:15.983" Score="1" ViewCount="50" Body="&lt;p&gt;I am working on a bot that follows a certain line path based on some pre-determined algorithm. I would like to know what the (x,y) co-ordinates of my bot are as it traverses with respect to some pre-defined origin and scale.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am very new to robotics, so I am not sure of the hardware requirements such a task would entail. I would be glad to provide any further information.&lt;/p&gt;&#xA;" OwnerUserId="21949" LastActivityDate="2018-12-29T10:14:22.420" Title="How to keep track of (x,y) co-ordinates of a line-following bot?" Tags="&lt;arduino&gt;&lt;line-following&gt;&lt;first-robotics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17889" PostTypeId="2" ParentId="17888" CreationDate="2018-12-29T10:14:22.420" Score="1" Body="&lt;p&gt;Keeping tracking of (x,y) location would fall under &lt;strong&gt;state estimation&lt;/strong&gt;. One fundamental method of state estimation is &lt;strong&gt;odometry&lt;/strong&gt;.&lt;/p&gt;&#xA;" OwnerUserId="21285" LastActivityDate="2018-12-29T10:14:22.420" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17890" PostTypeId="1" CreationDate="2018-12-29T18:33:28.320" Score="1" ViewCount="45" Body="&lt;p&gt;I'm designing a system to power up my vehicle with 12vDC and I have 8 motors each draws 25A at max and they are not expected to work always at the same time, meaning that in the maximum case 6 of them working 70% and 2 of them works 100%, so my question is that what power supply should I choose to be enough to power the vehicle up like what power rating should it be ? 1kw or 2kw ? And why ? I mean if there is any equation or calculation method to use ? &#xA;Please help me with that.&lt;/p&gt;&#xA;" OwnerUserId="21954" LastEditorUserId="21954" LastEditDate="2018-12-29T22:24:14.293" LastActivityDate="2019-01-03T12:53:50.457" Title="Power systems design for a vehicle" Tags="&lt;motor&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17891" PostTypeId="2" ParentId="16829" CreationDate="2018-12-29T21:48:36.313" Score="4" Body="&lt;p&gt;There are a lot of definitional problems and inconsistencies in this area.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Geometric Jacobian.  I'm not sure this has a precise and agreed upon meaning.  But across the more classical robotics books (Siciliano etal., Spong etal., Corke) it relates joint velocities to end-effector velocity (translational and rotational) expressed in either the world or end-effector frame.  I call this 6-vector a &quot;spatial velocity&quot; but this is a term that Feathersone also uses for a &quot;velocity twist&quot; (as per Park &amp;amp; Lynch).  The Jacobian of Park &amp;amp; Lynch relates joint velocities to a velocity twist.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The geometric Jacobian is distinct from the analytic Jacobian.  The latter represents the rotational velocity of the end-effector in terms of the rate of change of some 3-angle parameterisation (eg. RPY or Euler angles).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Translational and rotational velocity.  This can be the translational and rotational components stacked into a 6-vector (Siciliano etal., Spong etal., Corke) or a velocity twist.  The former is easy to understand in terms of how the end-effector is actually moving. The latter has very nice mathematical properties and is natural when coming at the problem from the Lie group/algebra perspective.  The principle difference is that the translational velocity component of the velocity twist is the velocity of an imaginary point at the origin that is rigidly attached to the moving object.  This means that the Park&amp;amp;Lynch Jacobian will be different to the Corke Jacobian, and the velocity transformations will also be different.  The difference will in the sub matrices concerned with translational velocity.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;As an author, the problem I confronted was trying to morph the first edition (very classical, based on the books I grew up with) into the second edition with what I hoped was an easy path to the mathematical tools that Park&amp;amp;Lynch have popularised.  I am clearly not there yet...&lt;/p&gt;&#xA;" OwnerUserId="21223" LastActivityDate="2018-12-29T21:48:36.313" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17892" PostTypeId="2" ParentId="15055" CreationDate="2018-12-29T21:55:53.037" Score="1" Body="&lt;p&gt;I'm not sure what version of RTB you are using but you are missing the 'mask' keyword.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt; J = Robot.ikine(T, [0,0,0], 'mask', [1 1 1 0 0 0]) *180/pi&#xA;J =&#xA;    0.0000  -40.5416 -157.6684&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;or more concisely:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt; J = Robot.ikine(T, [0,0,0], 'mask', [1 1 1 0 0 0], 'deg')&#xA;J =&#xA;    0.0000   -0.7076   -2.7518&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You'll get a quicker response by taking questions like this to &lt;a href=&quot;http://tiny.cc/rvcforum&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://tiny.cc/rvcforum&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="21223" LastActivityDate="2018-12-29T21:55:53.037" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17893" PostTypeId="2" ParentId="11165" CreationDate="2018-12-29T22:12:33.120" Score="3" Body="&lt;p&gt;The MATLAB function block in Simulink has some limitations.  The fact that Link.m is referred to as a function not a class is a worry.  I recreated your Simulink model and get similar error messages, basically Simulink can't convert these classes into C code which it needs to do in order to run the simulation.  You could try putting all your code into a standalone m-file and then calling that from an &quot;Interpreted MATLAB Fcn&quot; block or writing an S-function.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It looks like you are using a very old version of the Robotics Toolbox which is clearly not converging on an IK solution.  The one in RTB10.x is much better.&lt;/p&gt;&#xA;" OwnerUserId="21223" LastActivityDate="2018-12-29T22:12:33.120" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17894" PostTypeId="2" ParentId="11909" CreationDate="2018-12-29T22:18:18.550" Score="6" Body="&lt;p&gt;There are very few problems having both toolboxes installed.  The biggest gotcha is the function angdiff() which is provided by both toolboxes but defined differently.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to stick with MATLAB 2014b you should use RTB9.10.&lt;/p&gt;&#xA;" OwnerUserId="21223" LastActivityDate="2018-12-29T22:18:18.550" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17895" PostTypeId="2" ParentId="14753" CreationDate="2018-12-29T22:25:16.960" Score="2" Body="&lt;p&gt;And the forward kinematics function has a second output argument which is an array of the transforms for each frame.  The following code will do what you want:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;p560.plot(qz)&#xA;[T,A] = p560.fkine(qz);&#xA;hold on&#xA;for i=1:6&#xA;  trplot(A(i), 'frame', num2str(i))&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="21223" LastActivityDate="2018-12-29T22:25:16.960" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17896" PostTypeId="2" ParentId="8426" CreationDate="2018-12-29T22:43:02.700" Score="2" Body="&lt;p&gt;I defined the robot using your (assumed standard) DH parameters:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt; robot = SerialLink([pi/2 1 0 pi/2; pi/2 1 0 -pi/2; pi/2 1 1 0])&#xA;robot = &#xA;noname:: 3 axis, RRR, stdDH, fastRNE                             &#xA;+---+-----------+-----------+-----------+-----------+-----------+&#xA;| j |     theta |         d |         a |     alpha |    offset |&#xA;+---+-----------+-----------+-----------+-----------+-----------+&#xA;|  1|         q1|          1|          0|     1.5708|          0|&#xA;|  2|         q2|          1|          0|    -1.5708|          0|&#xA;|  3|         q3|          1|          1|          0|          0|&#xA;+---+-----------+-----------+-----------+-----------+-----------+&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Note that for revolute joints the value of theta is ignored, not it is replaced with the values q1 to q3 in the printed table above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To plot the robot at this configuration:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt; robot.plot([pi/2 pi/2 pi/2])&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;shows a robot somewhat different to your diagram.  I think your DH parameters are not correct.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I really don't like DH parameters.  Looking at your diagram I can write the forward kinematics as a string of simple transformations expressed in the world coordinate frame&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt; DHFactor('Rz(q1)Tz(L0)Rz(q2)Ty(L1)Tx(L2)Ry(q3)Tx(L3)')&#xA;  .&#xA;  .&#xA;  .&#xA;DH(q1, 0, 0, 0).DH(q2, L0, L2, -90).DH(q3, L1, L3, 90)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where the parameters of the DH() functions are theta, d, a, alpha.&lt;/p&gt;&#xA;" OwnerUserId="21223" LastActivityDate="2018-12-29T22:43:02.700" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17897" PostTypeId="2" ParentId="15357" CreationDate="2018-12-29T22:46:37.013" Score="3" Body="&lt;p&gt;Or you can use the &lt;code&gt;trplot()&lt;/code&gt; function from my &lt;a href=&quot;http://petercorke.com/wordpress/toolboxes/robotics-toolbox&quot; rel=&quot;nofollow noreferrer&quot;&gt;Robotics Toolbox for MATLAB&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="21223" LastEditorUserId="22058" LastEditDate="2019-01-13T02:59:20.713" LastActivityDate="2019-01-13T02:59:20.713" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17898" PostTypeId="2" ParentId="14286" CreationDate="2018-12-30T01:57:26.293" Score="2" Body="&lt;p&gt;I'm not a fan of DH parameters but they are entrenched in robot kinematics.  An approach I prefer is to just write the whole chain as a series of simple transformations, eg. Ry is a rotation about the y-axis, Tz is a translation along the z-axis. From your figure, starting at the base and applying the transformations consecutively, you could write it like&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ry(q1)Rz(q2)Tx(L1)Rz(q3)Ty(L2)Rz(q4)Tx(L3)...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;but I get lost with what happens near the wrist in your diagram.  The Robotics Toolbox has a function, DHFactor, that will take a string like this and automatically compute it to DH parameters.&lt;/p&gt;&#xA;" OwnerUserId="21223" LastActivityDate="2018-12-30T01:57:26.293" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17899" PostTypeId="2" ParentId="10322" CreationDate="2018-12-30T02:00:40.347" Score="1" Body="&lt;p&gt;The Robotics Toolbox for MATLAB has an analytic solution, &lt;code&gt;ikine6s&lt;/code&gt;, that works for most 6DOF arms with a spherical wrist.  It takes a configuration string.  If you call it with all 8 possible combinations then you will get all possible solutions, eg. &lt;code&gt;'run'&lt;/code&gt;, &lt;code&gt;'lun'&lt;/code&gt;, &lt;code&gt;'rdn'&lt;/code&gt; etc.&lt;/p&gt;&#xA;" OwnerUserId="21223" LastActivityDate="2018-12-30T02:00:40.347" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17900" PostTypeId="2" ParentId="9677" CreationDate="2018-12-30T02:06:12.810" Score="1" Body="&lt;p&gt;This is a limitation of DH notation.  Axis rotation follows the right-convention about the z-axis.  For the first joint you are stuck with rotation about the world z-axis, hence your problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the Robotics Toolbox joint rotation all follow the right-hand convention.  You could multiply your joint angle vector by a vector of rotation directions&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;dir = [-1 1 1 -1 1 1];&#xA;&#xA;kuka.fkine(q .* dir)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="21223" LastActivityDate="2018-12-30T02:06:12.810" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17901" PostTypeId="2" ParentId="9893" CreationDate="2018-12-30T02:14:05.157" Score="1" Body="&lt;p&gt;For a robot with a kinematic model expressed using standard DH parameters the classic reference is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Differential Kinematic Control Equations for Simple Manipulators,&#xA;Paul, Shimano, Mayer,&#xA;IEEE SMC 11(6) 1981,&#xA;pp. 456-460&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is implemented in many software tools include the Robotics Toolbox for MATLAB as the method &lt;code&gt;jacobe&lt;/code&gt; which gives the Jacobian for velocity expressed in the end-effector coordinate frame.  This method is used by &lt;code&gt;jacob0&lt;/code&gt; for velocity expressed in the world coordinate frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To compute the forward kinematics as suggested above you can use the &lt;code&gt;fkine&lt;/code&gt; method with symbolic joint variables and the result can then be differentiated symbolically.  MATLAB has pretty good symbolic support these days.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to write the forward kinematics as a simple string of transformations (sidestepping the whole DH parameter thing) and do the chain rule then &lt;a href=&quot;http://petercorke.com/wordpress/direct-computation-of-jacobian-from-elementary-transform-string-ets&quot; rel=&quot;nofollow noreferrer&quot;&gt;this article&lt;/a&gt; might be of interest.  &lt;/p&gt;&#xA;" OwnerUserId="21223" LastActivityDate="2018-12-30T02:14:05.157" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17902" PostTypeId="2" ParentId="15444" CreationDate="2018-12-30T02:37:47.977" Score="5" Body="&lt;p&gt;The geometric Jacobian provides all the information you need for singularity or manipulability analysis.  Linearly dependent columns correspond to joints with parallel axes.  More information about Jacobians for under-actuated manipulators (as is your case) can be found in my book Robotics, Vision &amp;amp; Control&quot; section 8.4.1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For information about computing the &quot;screw based Jacobian&quot; check out the book Modern Robotics by Park&amp;amp;Lynch.&lt;/p&gt;&#xA;" OwnerUserId="21223" LastActivityDate="2018-12-30T02:37:47.977" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17903" PostTypeId="2" ParentId="16500" CreationDate="2018-12-30T21:09:58.150" Score="0" Body="&lt;p&gt;The principle is called linguistic multivariable fuzzy pid control. The idea is to create a domain specific language and create with that a domain specific controller. The existing sensor variables and existing motor primitives for starting and stopping the servo motors are taken as a base for constructing a higher level behavior system on top. Rodney Brooks described this principle first. In terms of programming it means, to add new methods in the controller class. For example, “stayaway-fromwall”, “move-onthe-line”, “rotate-until” and so on. The motion primitives are forming together with the sensor variables a domain specific language and the controller is formulated in that language.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know, it sounds very theoretically. A practical example can be tested out in the famous “Karel the robot” game. The user has the task to define new subfunction and combines them into a program. This gets started in the Karel simulator. Programming a real robot in a maze works similar.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2018-12-30T21:09:58.150" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17905" PostTypeId="2" ParentId="15916" CreationDate="2018-12-30T23:53:01.950" Score="4" Body="&lt;p&gt;Writing your own package is always the best way to learn.  If you want to try something premade here are a few packages to choose from:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://github.com/petercorke/spatialmath-python&quot; rel=&quot;nofollow noreferrer&quot;&gt;Spatial Math Toolbox for Python&lt;/a&gt; Python3+numpy+scipy, also available from &lt;a href=&quot;https://pypi.org/project/spatialmath-python/0.9.6/&quot; rel=&quot;nofollow noreferrer&quot;&gt;PyPy&lt;/a&gt;, with classes and functions. This is a Python port of my Robotics/Spatial Math Toolbox for MATLAB&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://github.com/strasdat/Sophus&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sophus&lt;/a&gt; C++/Eigen with Python wrappers&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="21223" LastEditorUserId="-1" LastEditDate="2021-05-02T22:03:04.560" LastActivityDate="2021-05-02T22:03:04.560" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17906" PostTypeId="1" AcceptedAnswerId="17907" CreationDate="2018-12-31T21:09:58.750" Score="1" ViewCount="161" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/3GTR3.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3GTR3.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why this relation is not right?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;C(s) =  R(s) * [G(s).G(p)+D(s)] / [1+G(s).G(p)+D(s)]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="21963" LastActivityDate="2019-01-01T01:00:43.267" Title="Control System Analysis - Block Diagram Basics" Tags="&lt;control&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17907" PostTypeId="2" ParentId="17906" CreationDate="2019-01-01T01:00:43.267" Score="1" Body="&lt;p&gt;First step is the summing junction:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;R(s) - C(s) \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then the controller:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;G_c(s)\left(R(s) - C(s)\right) \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then the plant:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;G_p(s)\left(G_c(s)\left(R(s) - C(s)\right)\right) \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then the addition of the disturbance input:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;D(s) + G_p(s)\left(G_c(s)\left(R(s) - C(s)\right)\right) \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, all of the last step above is equal to the output, &lt;span class=&quot;math-container&quot;&gt;$C(s)$&lt;/span&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;C(s) = D(s) + G_p(s)\left(G_c(s)\left(R(s) - C(s)\right)\right) \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Multiply out the business on the right:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;C(s) = D(s) + G_p(s)\left(G_c(s)\left(R(s) - C(s)\right)\right) \\&#xA;C(s) = D(s) + G_p(s)G_c(s)R(s) - G_p(s)G_c(s)C(s) \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then rearrange to get the &lt;span class=&quot;math-container&quot;&gt;$C(s)$&lt;/span&gt; terms all on one side:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;C(s) + G_p(s)G_c(s)C(s) = D(s) + G_p(s)G_c(s)R(s) \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Factor out the &lt;span class=&quot;math-container&quot;&gt;$C(s)$&lt;/span&gt; term and divide to get the answer:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;C(s)\left(1 + G_p(s)G_c(s)\right) = D(s) + G_p(s)G_c(s)R(s) \\&#xA;C(s) = R(s)\left(\frac{G_p(s)G_c(s)}{1 + G_p(s)G_c(s)}\right) + \frac{D(s)}{1 + G_p(s)G_c(s)} \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So it looks like your answer isn't correct because you have what distributes to be an &lt;span class=&quot;math-container&quot;&gt;$R(s)D(s)$&lt;/span&gt; term, when the disturbance only &lt;strong&gt;sums&lt;/strong&gt; with the result of the plant (and doesn't &lt;em&gt;multiply&lt;/em&gt;), and you also have the disturbance term in the denominator, which is also incorrect. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are all kinds of &quot;thumbrules&quot; on how you do block diagram reduction, but I always just multiply it out. It only takes a little bit longer, but I personally always get something wrong when I try the (N/(1+N)) method or something like that. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2019-01-01T01:00:43.267" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17908" PostTypeId="2" ParentId="8860" CreationDate="2019-01-01T07:33:32.337" Score="0" Body="&lt;p&gt;check page no: 11, eqn(8) from &lt;a href=&quot;https://www.cl.cam.ac.uk/techreports/UCAM-CL-TR-696.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;An introduction to inertial navigation&lt;/em&gt; by Oliver J. Woodman&lt;/a&gt; (Technical Report Number 696 from the University of Cambridge Computer Laboratory).&lt;/p&gt;&#xA;" OwnerUserId="21965" LastEditorUserId="37" LastEditDate="2019-01-02T11:39:39.353" LastActivityDate="2019-01-02T11:39:39.353" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="17909" PostTypeId="1" AcceptedAnswerId="17913" CreationDate="2019-01-01T13:59:27.560" Score="2" ViewCount="194" Body="&lt;p&gt;I am trying to set up a Kalman-Filter to filter position-measurements of a self-driving car. To do so, I consider a state-vector with 5 elements and am now trying to set up the Transition Matrix. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can see in the following picture, I do not have a clear understanding of the car dynamics. How does my steering for example contribute to my x-position? Since steering is the rate of change of the vehicle heading, it must somehow be linked to acceleration. Can anyone help me to figure out A ? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would be so grateful!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/F7MBp.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/F7MBp.jpg&quot; alt=&quot;idea&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="21966" LastActivityDate="2019-01-02T11:01:42.507" Title="How can I determine the Transition Matrix of a Kalman-Filter ?" Tags="&lt;kalman-filter&gt;&lt;autonomous-car&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17911" PostTypeId="2" ParentId="12338" CreationDate="2019-01-01T23:05:25.483" Score="3" Body="&lt;p&gt;You are lucky to have the inertial parameters for the robot! This is something that manufacturers very rarely share and it is hard to reverse engineer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given that you have these inertial parameters, plus a kinematic model expressed in Denavit-Hartenberg parameters, then a very well known and efficient algorithm called recursive Newton-Euler (RNE) can compute the joint torquse required to achieve a particular acceleration, given joint angles and velocities.  Calling this algorithm 6 times (with zero velocity, unit acceleration, and zero gravity) will allow you to build up the joint-space inertia matrix column by column.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In practice the inertia of the motors, amplified by the gear ratio squared, is of a similar order to the link inertias and must be taken into consideration.  These terms are added to the diagonal of M.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The RNE algorithm can be found in most robotics textbooks and is implemented in various robotic software packages.  Using this algorithm to determine the joint-space inertia matrix is part of &quot;Method 1&quot; described in: &lt;em&gt;Efficient dynamic computer simulation of robotic mechanisms, M. W. Walker and D. E. Orin, ASME Journal of Dynamic Systems, Measurement and Control, vol. 104, no. 3, pp. 205-211, 1982&lt;/em&gt;.  Other algorithmic approaches exist but given the efficiency and ubiquity of RNE this is a pretty good way to compute M for a 6-axis manipulator. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both algorithms mentioned are implemented in the Robotics Toolbox for MATLAB. The Toolbox allows you to enter the kinematic and inertial parameters, as well as friction models and motor inertia, to investigate the dynamics of robot manipulator arms.&lt;/p&gt;&#xA;" OwnerUserId="21223" LastActivityDate="2019-01-01T23:05:25.483" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17912" PostTypeId="2" ParentId="17885" CreationDate="2019-01-02T06:55:47.343" Score="7" Body="&lt;p&gt;Your professor has made an error, but he or she is only human.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The upper-left 3x3 matrix must be an orthonormal rotation matrix.  Every column of that must have a unit norm.  The second column &lt;span class=&quot;math-container&quot;&gt;$[0, 1, -1]^T$&lt;/span&gt; has a norm of &lt;span class=&quot;math-container&quot;&gt;$\sqrt{2}$&lt;/span&gt; which makes the rotation matrix invalid.&lt;/p&gt;&#xA;" OwnerUserId="21223" LastActivityDate="2019-01-02T06:55:47.343" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17913" PostTypeId="2" ParentId="17909" CreationDate="2019-01-02T11:01:42.507" Score="1" Body="&lt;p&gt;When localizing a robot we usually use the world coordinate frame. Since it's static it is easier to represent the position of the robot. As an example you may use the North and East directions as the x and y axis of the world coordinate frame. But if you are travelling on the robot you can notice that the heading direction always changes. Let's take 2 cases to understand this.&#xA;1. Robot is travelling to the absolute north with a speed of 1m per second.&#xA;2. Robot is travelling to the absolute north-west with a speed of 1m per second.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In both cases robot travels towards its' heading direction but in world coordinate frame the heading is different. &lt;a href=&quot;https://i.stack.imgur.com/QlT52.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QlT52.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We can calculate the A matrix by assuming that there is no control inputs to the system.&lt;/p&gt;&#xA;" OwnerUserId="21353" LastActivityDate="2019-01-02T11:01:42.507" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17914" PostTypeId="1" CreationDate="2019-01-02T11:25:47.380" Score="0" ViewCount="82" Body="&lt;p&gt;let's say the robot Looks like this (an usual robot arm with 4 wheels) :&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/1foEp.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1foEp.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this case as far as I know, the idea of path planning is just to compare the actual position x with the desired position x_goal. At the end, the robot would be at the position x_goal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/vnxFd.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vnxFd.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the Question is how to set this x_goal. If the robot doesnt have an arm, then x_goal is equal to the position that the robot has to be there. But since the robot has an arm, x_goal must takes account the reachability and singularity of the arm. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What would be the most common/efficient way to estimate this x_goal in this case?&lt;/p&gt;&#xA;" OwnerUserId="21382" LastActivityDate="2019-01-03T13:06:13.757" Title="Path planning of wheeled robot" Tags="&lt;mobile-robot&gt;&lt;robotic-arm&gt;&lt;wheeled-robot&gt;&lt;motion-planning&gt;&lt;path-planning&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2019-01-03T14:01:13.333" ContentLicense="CC BY-SA 4.0" />
  <row Id="17916" PostTypeId="2" ParentId="16549" CreationDate="2019-01-02T22:43:36.313" Score="3" Body="&lt;p&gt;You can only say that the distorted image coordinates are in the range (0-240, 0-180), since that's the image you are starting with.  Typically you assume the dimensions of the undistorted image as being the same as the distorted image, and for every pixel in the undistorted image work out the corresponding coordinate in the distorted (input) image.  It will have non-integer coordinates so often an interpolation is done to find the pixel value to drop into the undistorted image.  It's possible that some values in the undistorted image map to points outside the distorted image, you should check for that, and maybe need to crop the result to eliminate pixels of indeterminate value.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A quick sanity check indicates that there's something badly wrong with your distortion coefficients, they are just too big.  Take a value of r=100 which is possible towards the edge of your image, &lt;span class=&quot;math-container&quot;&gt;$k_1 r^2 \approx 1300$&lt;/span&gt; which is a massive shift.   The &lt;span class=&quot;math-container&quot;&gt;$k_2 r^4$&lt;/span&gt; term is of the order of millions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do you know what the units of the distortion parameters are?  They might be in units of pixels or units of metres on the image plane.&lt;/p&gt;&#xA;" OwnerUserId="21223" LastEditorUserId="21223" LastEditDate="2019-01-03T03:49:13.723" LastActivityDate="2019-01-03T03:49:13.723" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17917" PostTypeId="1" CreationDate="2019-01-03T00:29:49.037" Score="2" ViewCount="1011" Body="&lt;p&gt;I built an Arduino Due based quadcopter, with MPU-6050 for auto levelling and BMP-085 for Altitude.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am using Kalman filter code from &lt;a href=&quot;https://github.com/TKJElectronics/KalmanFilter&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; for the MPU-6050 to take the Roll and Pitch angels from the sensor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Roll and Pitch angels are correctly read while the quadcopter motors are off, but when the motor speed increased the angels start to be more inaccurate. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As shown in the following photos (where I took different speed motors to show the effects of the motor vibration on the MPU readings). These tests were taken while the quadcopter on the ground.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ceoxB.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ceoxB.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/F4FAy.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/F4FAy.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Motor speeds vary from 0 to 180 so I choose (50,100, and 150).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My sensors are fixed on a breadboard over a plastic surface with anti-vibrator rubber balls as shown in my quadcopter pictures.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/sSnYd.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/sSnYd.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/FqpRR.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FqpRR.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My problem is that the controller I designed is very sensitive to these vibrations, is there any way to reduce these vibrations as minimum as possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you&lt;/p&gt;&#xA;" OwnerUserId="21500" LastEditorUserId="21500" LastEditDate="2019-01-04T11:57:34.670" LastActivityDate="2021-04-07T19:05:40.583" Title="Quadcopter motors vibration problem" Tags="&lt;quadcopter&gt;&lt;motor&gt;&lt;gyroscope&gt;" AnswerCount="4" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17918" PostTypeId="2" ParentId="17917" CreationDate="2019-01-03T05:03:33.500" Score="0" Body="&lt;p&gt;First of all, check that your propellers are in good condition and balanced. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You mentioned that your controller design is sensitive to vibrations. Would you mind elaborating? Perhaps you will have to trade off some of your design qualities. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Have you tried a low-pass filter on your signals before feeding it into the controller?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can also try using a different vibration damper. The optimal damper depends on the mass that the damper is carrying. &lt;/p&gt;&#xA;" OwnerUserId="21285" LastActivityDate="2019-01-03T05:03:33.500" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17919" PostTypeId="2" ParentId="17890" CreationDate="2019-01-03T08:22:38.997" Score="1" Body="&lt;p&gt;Power equals voltage times current. One motor therefore has maximum power of 12V * 25A = 300W&lt;/p&gt;&#xA;&#xA;&lt;p&gt;6 x 0.7 x 300W = 1260W (1.26kW)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2 x 1.0 x 300W = 600W (0.6kW)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Total: 1860W (1.86kW)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the maximum power is equal to 1.86kW meaning you need to have a supply power being able to output at least that much (though in reality, at least a bit more).&lt;/p&gt;&#xA;" OwnerUserId="4017" LastEditorUserId="4017" LastEditDate="2019-01-03T12:53:50.457" LastActivityDate="2019-01-03T12:53:50.457" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17920" PostTypeId="2" ParentId="17914" CreationDate="2019-01-03T13:06:13.757" Score="0" Body="&lt;p&gt;Pathplanning for a wheeled robot consists of transferring domain specific knowledge into the software. Requirements like determine the xgoal position and take care of reachability of the robotarm are usually not given as a machine readable description but as expert knowledge of how to manual control the robot with a joystick. What the system engineer has to do is to convert weak defined knowledge into a pathplanner which gets executed autonomously. One option in doing so is a fuzzy control system. In contrast to the famous myth, these systems can be used in complex domains, for example pathplanning.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Quote: “This paper treats the autonomous navigation problem of robotic&#xA;  systems in a dynamic and uncertain environment. [...] The fuzzy logic&#xA;  is certainly one of the most adopted approaches in industry.“&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Boufera, Fatma, et al. &quot;Fuzzy control system for autonomous navigation&#xA;  of thymio II mobile robots.&quot; Journal of Emerging Technologies in Web&#xA;  Intelligence 6.1 (2014): 101-105.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Before the pathplanner can be realized with fuzzy-rules and linguistic variables, the requirements have to be written down in natural language. This is part of the software engineering process and is done in expert-interviews. That are humans, how have controlled the robot platform in the past with a joystick and are able to explain which details are important for reaching a position.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2019-01-03T13:06:13.757" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17921" PostTypeId="1" CreationDate="2019-01-03T18:28:55.367" Score="1" ViewCount="133" Body="&lt;p&gt;Has anyone tried to map environments using Sonars or 1D ToF sensors? Since it's very difficult to implement such an algorithm from the scratch, I'm planning to use an existing ROS packages such as GMapping. For that we need to convert the readings of our sensors to a laser scan file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a differential drive robot and 8 sonar sensors mounted on top of the robot in N, NE, E, SE, S, SW, W, NW directions. Using the odometry data I have implemented a Kalman filter to estimate the position of the robot. But as the robot moves the error of the position estimation accumulates.The same applies to when I'm trying to make a map of the environment incorporating the position estimation with the Sonar data. Therefore I need a pose correction method to increase the accuracy of the map. ROS GMapping is a very good package for this, but it is built only for LIDARs&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I can convert my Sonar readings and position estimation to a LIDAR scan file it can be passed to the GMapping package directly. So I'm asking for a method to do that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is what I have done so far. Buffer poses and range measurements for 50 time steps, transform measured points to the world coordinate frame, calculate the mean position for the buffered positions and calculate the distance and angles for the points(I assume this is what LIDAR gives). The goal is to use this data with a existing SLAM packages in order to create a map with less errors.&lt;/p&gt;&#xA;" OwnerUserId="21353" LastEditorUserId="9720" LastEditDate="2019-01-04T16:34:43.997" LastActivityDate="2019-01-04T16:34:43.997" Title="Convert sonar scans to Lidar scan file" Tags="&lt;ros&gt;&lt;slam&gt;&lt;sonar&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17922" PostTypeId="1" CreationDate="2019-01-03T21:53:04.973" Score="0" ViewCount="66" Body="&lt;p&gt;I'm working on a project where I want two separate shafts to be in the same place. Think of it like a clock where the hour and minute hands move independently. Also like a clock, I want the motors and gears tucked away in back.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With clocks, they use a kind of tube that slides over a shaft. Then the shaft and the tube can both be driven from the back and rotate independently. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a name for this tube part? If I wanted it to be low-friction, is there a name for a part that includes bearings? &lt;/p&gt;&#xA;" OwnerUserId="21984" LastActivityDate="2019-01-05T12:08:21.220" Title="Rotating two things on the same axis" Tags="&lt;mechanism&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17923" PostTypeId="2" ParentId="17917" CreationDate="2019-01-04T06:01:15.030" Score="0" Body="&lt;p&gt;First try adding some dampers to the electronic modules. The best way to reduce the vibration is balancing the propellers. You can mount one propeller at a time and measure the amplitude of the vibration first. Then use a piece of sticky tape on one blade and measure the amplitude again. If the amplitude is less try adding sticky tapes on the same blade to reduce the vibration as much as possible or try the other blade. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You need to adjust some of the parameters before using the kalman filter for your quadcopter since variances of the readings depends on the sensor that you use. Further make sure that your sampling rate and the update frequency is matching.&lt;/p&gt;&#xA;" OwnerUserId="21353" LastActivityDate="2019-01-04T06:01:15.030" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17924" PostTypeId="2" ParentId="17922" CreationDate="2019-01-04T15:24:27.463" Score="1" Body="&lt;p&gt;It's called a &lt;a href=&quot;https://www.google.com/search?q=sleeve+bearing&amp;amp;tbm=isch&quot; rel=&quot;nofollow noreferrer&quot;&gt;sleeve bearing&lt;/a&gt; if you intend for the shafts to rotate relative to each other or a &lt;a href=&quot;https://www.google.com/search?q=bushing&amp;amp;tbm=isch&quot; rel=&quot;nofollow noreferrer&quot;&gt;bushing&lt;/a&gt; if you intend for the shafts to move axially relative to each other. They generally look pretty much the same, and usually are, and people generally just use the term &quot;bushing&quot; for both, but &lt;a href=&quot;https://www.ggbearings.com/en/faq/what-difference-between-bearings-bushings&quot; rel=&quot;nofollow noreferrer&quot;&gt;there is technically a distinction&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You're probably going to have trouble getting power on and off the bushing unless you machine it to have some kind of gear teeth or something, and if you want the outer &quot;shaft&quot; to rotate relative to the chassis then you'll need a bearing for the outer shaft, too, so you'll wind up with bearing-sleeve bearing-inner shaft. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Getting power to or from the shaft is an open-ended question that is driven by your task, so please save any questions like that for &lt;a href=&quot;https://chat.stackexchange.com/rooms/6221/asimovs-corner&quot;&gt;Robotics Chat&lt;/a&gt; when you have sufficient reputation. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="19143" LastEditDate="2019-01-05T12:08:21.220" LastActivityDate="2019-01-05T12:08:21.220" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17927" PostTypeId="1" CreationDate="2019-01-05T11:16:49.587" Score="1" ViewCount="337" Body="&lt;p&gt;I'm stuck with the following problem: &#xA;In a Kalman Filter, we assume the following holds:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/OlwH7.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OlwH7.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The state vector can be filled with values which are returned by actual sensors. The Transition matrix needs to be set up according to a motion model. Same holds for the control input matrix. But how can I determine w_t and v_t ? How do I know which values to choose for the covariance matrices Q and R ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope someone can help&lt;/p&gt;&#xA;" OwnerUserId="21966" LastActivityDate="2019-01-05T18:03:57.807" Title="How to determine the Process- and Measurement Noise Covariance Matrix of a Kalman Filter" Tags="&lt;kalman-filter&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17928" PostTypeId="1" CreationDate="2019-01-05T16:20:00.507" Score="1" ViewCount="112" Body="&lt;p&gt;There are several algorithms regarding fixed-lag Kalman smoothing.&#xA;In most cases, an augmented state vector is defined in which the elements are the current and delays of the original state vector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, in some cases the measurements are augmented to include delays, as in:&#xA;&lt;a href=&quot;https://pdfs.semanticscholar.org/f580/23aa0827e4a5ab1d04957b2b6cf266aad541.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://pdfs.semanticscholar.org/f580/23aa0827e4a5ab1d04957b2b6cf266aad541.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And in some cases, only the k'th measurement is used in the augmented system, as in section 3.2.2 of:&#xA;&lt;a href=&quot;http://robby.caltech.edu/~jwb/courses/CDS112/FixedLagSmoother.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://robby.caltech.edu/~jwb/courses/CDS112/FixedLagSmoother.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I ran a simulation which yielded better results when augmenting the measurements vector, but as far as I understood, replicating the measurements is a simple linear transformation of the measurements which should not improve the performance of the augmented filter.&#xA;Is there a theoretical justification for augmenting the measurements vector? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Matlab simulation code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;% model: &#xA;% x(k+1) = F*x(k) + w(k)&#xA;% y(k)   = H*x(k) + v(k)&#xA;% R = cov(v), Q = cov(w)&#xA;&#xA;% generate clean data&#xA;T = 100;&#xA;dt = 1e-2;&#xA;t = 0:dt:T;&#xA;v0 = [40;50];&#xA;r0 = [0;0];&#xA;a = [0;-9.81];&#xA;&#xA;v = v0 + a*t; % constant acceleration&#xA;r = r0 + cumsum(v*dt,2);&#xA;&#xA;inds = find(r(2,:) &amp;gt; 0);&#xA;N = numel(inds);&#xA;t = t(inds);&#xA;r = r(:,inds);&#xA;v = v(:,inds);&#xA;a = repmat(a, [1 N]);&#xA;&#xA;% generate measurements&#xA;rng(0);&#xA;sig_r = 3*1e0;&#xA;rm = r + sig_r*randn(2,N);&#xA;&#xA;% kalman filter&#xA;x = zeros(6,1); % position, velocity, acceleration&#xA;P = 10*eye(6,6);&#xA;&#xA;% acceleration is known...&#xA;P(5,5) = 0.5;&#xA;P(6,6) = 0.5;&#xA;&#xA;F = [eye(2)   eye(2)*dt eye(2)*(dt^2)/2; ...&#xA;     zeros(2) eye(2)    eye(2)*dt; ...&#xA;     zeros(2) zeros(2)  eye(2)];&#xA;&#xA;% position measurement only&#xA;H = [1 0 zeros(1,4); ...&#xA;     0 1 zeros(1,4)];&#xA;&#xA;R = eye(2)*sig_r^2;&#xA;vQ = [dt^3/6;dt^3/6;dt^2/2;dt^2/2;dt;dt];&#xA;sig_j = 1e0;&#xA;Q = vQ*vQ'*sig_j^2;&#xA;&#xA;rf = zeros(size(rm));&#xA;xf = zeros(6,N);&#xA;Pf = zeros(6,6,N);&#xA;Pf_pred_inv = zeros(6,6,N);&#xA;Pf_pred = zeros(6,6,N);&#xA;&#xA;D = 20;&#xA;Fa = zeros(6*(D+1));&#xA;Fa(1:6,1:6) = F;&#xA;Fa(7:end,1:end-6) = eye(6*D);&#xA;xa = zeros(6*(D+1),1);&#xA;Pa = zeros(numel(xa));&#xA;Pa(1:6,1:6) = P;&#xA;Qa = zeros(size(Pa));&#xA;Qa(1:6,1:6) = Q;&#xA;&#xA;% single measurement&#xA;xA = xa;&#xA;PA = Pa;&#xA;Ra = R;&#xA;Ha = [H zeros(size(H,1),size(H,2)*D)];&#xA;&#xA;% augmented measurements&#xA;RA = kron(eye(D+1),R);&#xA;HA = kron(eye(D+1),H); % D+1 replicas&#xA;&#xA;for k = 1:N&#xA;    % Kalman filter&#xA;    % predict&#xA;    P_pred = F*P*F' + Q;&#xA;    xA_pred = F*x;&#xA;&#xA;    Pf_pred(:,:,k) = P_pred;&#xA;    Pf_pred_inv(:,:,k) = inv(P_pred);&#xA;&#xA;    % update&#xA;    y = rm(:,k) - H*xA_pred;&#xA;    S = R + H*P_pred*H';&#xA;    Sinv = inv(S);&#xA;    K = P_pred*H'*Sinv;&#xA;    x = xA_pred + K*y;&#xA;    P = (eye(6) - K*H)*P_pred;&#xA;&#xA;    xf(:,k) = x;&#xA;    Pf(:,:,k) = P;&#xA;    rf(:,k) = x(1:2);    &#xA;&#xA;&#xA;    % kalman smoother (augmented measurements)&#xA;    if(k+D &amp;gt; N)&#xA;        v_rA(:,k) = rf(:,k);&#xA;    else&#xA;        % augmented measurements&#xA;        rA = rm(:,k+D:-1:k);&#xA;        rA = rA(:);&#xA;&#xA;        % predict&#xA;        PA_pred = Fa*PA*Fa' + Qa;&#xA;        xA_pred = Fa*xA;&#xA;&#xA;        % update&#xA;        yA = rA - HA*xA_pred;&#xA;        SA = RA + HA*PA*HA';&#xA;        KA = PA_pred*HA'*inv(SA);&#xA;        xA = xA_pred + KA*yA;&#xA;        PA = (eye(6*(D+1)) - KA*HA)*PA_pred;&#xA;&#xA;        v_rA(:,k) = xA(end-5:end-4); % last position in buffer&#xA;    end&#xA;&#xA;    % kalman smoother (single measurement)&#xA;    if(k+D &amp;gt; N)&#xA;        v_ra(:,k) = rf(:,k);&#xA;    else&#xA;        % augmented measurements&#xA;        ra = rm(:,k+D);&#xA;&#xA;        % predict&#xA;        Pa_pred = Fa*Pa*Fa' + Qa;&#xA;        xa_pred = Fa*xa;&#xA;&#xA;        % update&#xA;        ya = ra - Ha*xa_pred;&#xA;        Sa = Ra + Ha*Pa*Ha';&#xA;        Ka = Pa_pred*Ha'*inv(Sa);&#xA;        xa = xa_pred + Ka*ya;&#xA;        Pa = (eye(6*(D+1)) - Ka*Ha)*Pa_pred;&#xA;&#xA;        v_ra(:,k) = xa(end-5:end-4); % last position in buffer&#xA;    end&#xA;&#xA;end&#xA;&#xA;% position&#xA;figure(1);&#xA;plot(r(1,:), r(2,:), '.b');&#xA;hold on;&#xA;plot(rm(1,:), rm(2,:), '.r');&#xA;plot(rf(1,:), rf(2,:), '.k');&#xA;plot(v_rA(1,:), v_rA(2,:), '.c');&#xA;plot(v_ra(1,:), v_ra(2,:), '.g');&#xA;&#xA;legend('true position', 'measured', 'filtered', 'smoothed, augmented measurement', 'smoothed, single measurement');&#xA;&#xA;% error&#xA;figure(2);&#xA;Ef = sqrt(sum((r-rf).^2));&#xA;EA = sqrt(sum((r-v_rA).^2));&#xA;Ea = sqrt(sum((r-v_ra).^2));&#xA;plot(Ef, '.k');&#xA;hold on;&#xA;plot(EA, '.c');&#xA;plot(Ea, '.g');&#xA;&#xA;legend('filter', 'smoother: augmented measurements', 'smoother: single measurement');&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="22001" LastActivityDate="2019-01-05T16:20:00.507" Title="Fixed-Delay Kalman smoother with/without augmented measurements" Tags="&lt;kalman-filter&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17931" PostTypeId="2" ParentId="17927" CreationDate="2019-01-05T18:03:57.807" Score="1" Body="&lt;p&gt;All noises are assumed as Gaussian models in KF and EKF. To determine the values for the measurement noise you need to collect a sample data sets from the sensors that you are using. For each data set you can calculate the variance value put it to the corresponding position of the measurement noise covariance matrix. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Usually process noise covariances are experimental values. You can use a trial and error method to find the values which reduce the error.  &lt;/p&gt;&#xA;" OwnerUserId="21353" LastActivityDate="2019-01-05T18:03:57.807" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17933" PostTypeId="2" ParentId="12431" CreationDate="2019-01-05T20:07:27.150" Score="1" Body="&lt;p&gt;For a flying vehicle an intuitive representation of orientation is roll-pitch-yaw angles aka Tait-Bryan angles.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a quadrotor it is common to assume a left-handed world coordinate frame with the z-axis down and the x-axis to the north (a so called NED frame).  Attach a similar frame to the vehicle (the body frame) with its z-axis down and its x-axis in forward direction (choose one rotor to be the front).  Now the rotation matrix from world frame to body frame is the result of a sequence of canonical rotation matrices, multiplied in this order:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Yaw rotation about the z-axis, which describes the vehicle's heading direction.&lt;/li&gt;&#xA;&lt;li&gt;Pitch rotation about the y-axis, which describes the &quot;angle&quot; of attack.  A positive rotation causes the nose to pitch down which is commonly considered a negative pitch angle (nose is pitched down).  Since a quad rotor is under-actuated, it is pitch motion that is used to generate forward thrust for forward flight.&lt;/li&gt;&#xA;&lt;li&gt;Roll rotation about the x-axis.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="21223" LastActivityDate="2019-01-05T20:07:27.150" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17934" PostTypeId="2" ParentId="1562" CreationDate="2019-01-05T20:24:34.230" Score="1" Body="&lt;p&gt;Here's an intuitive way to think about this.  A quadrotor has 4 motor speeds that you can adjust to control 4 things: vertical lift, pitch angle, roll angle, heading angle.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A trirotor has 3 motor speeds and therefore only let's you control 3 things, one of the four previously listed has to go.  Using @srim's notation, and if A is the front, then thrust from A+B+C is vertical lift.  The differential thrust between A and (B+C) controls pitch angle.  The differential thrust between B and C controls roll angle.  Once you have set the speeds of the 3 rotors to control these 3 things, then you can compute the reaction/drag torques that will arise, but you have no degrees of freedom left to control it.  In general these torques will not be balanced, so the tri rotor would spin around its vertical axis, maybe a big tail fin could keep that in check...&lt;/p&gt;&#xA;" OwnerUserId="21223" LastActivityDate="2019-01-05T20:24:34.230" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17935" PostTypeId="1" CreationDate="2019-01-06T15:01:22.810" Score="-1" ViewCount="73" Body="&lt;p&gt;We are making a PID line follower using arduino for a competition. According to the rules of the competition they will have loops and discontinuations in their track. Can anyone give some idea how we can tackle them using code.&lt;/p&gt;&#xA;" OwnerUserId="22009" LastActivityDate="2019-01-06T19:57:02.407" Title="Tackling loops and discontinuations in PID line follower" Tags="&lt;mobile-robot&gt;&lt;pid&gt;&lt;line-following&gt;&lt;autonomous-car&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17936" PostTypeId="2" ParentId="17935" CreationDate="2019-01-06T19:57:02.407" Score="1" Body="&lt;p&gt;What you need is a hierarchical fuzzy controller for crossing detection. The situation, that the black line on the ground has complicated shapes like zigzags and loops is a good opportunity for implementing a program flow which contains of if-then-statements and subfunctions. In contrast, a normal line following robot will need only a simple table, which produces for an input signal of the sensor an output action of the motor, in case of a crossing layout of the path, a more complicated information processing is needed, namely a dedicated program flow which is done in C, Java or Python.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the easiest implementation, the robot stops if he detects an unusual pattern on the ground and waits for new commands from the human operator. He can drive to the left and follows the path1 or he can stay on the main line and follows path2.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;class Detectcrossring:&#xA;  def __init__():&#xA;    if getsensor()==&quot;crossing&quot;:&#xA;      askhumanoperator()&#xA;    else driveforward()&#xA;  def getsensor():&#xA;    result =&quot;normallane&quot;&#xA;    result =&quot;crossing&quot;&#xA;    result =&quot;zigzag&quot;&#xA;    return result&#xA;  def driveforward():&#xA;  def askhumanoperator()&#xA;    print &quot;crossing detected.&quot;&#xA;    print &quot;Should i move forward, left, right?&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2019-01-06T19:57:02.407" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17937" PostTypeId="1" AcceptedAnswerId="17983" CreationDate="2019-01-06T20:45:03.093" Score="3" ViewCount="398" Body="&lt;p&gt;I'm trying to understand these two classic approaches to path planning in dynamic environments/with moving obstacles.&#xA;According to some review papers, there seems to be quite a difference between them, e.g. so that the collision cone approach (as presented in [1]) can be used for non-circular objects as well. But to me they seem very analogous:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my understanding, given a point robot and a circle obstacle, both moving at constant velocities &lt;span class=&quot;math-container&quot;&gt;$v_A$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$v_B$&lt;/span&gt;, the collision cone &lt;span class=&quot;math-container&quot;&gt;$CC$&lt;/span&gt; is defined by two rays through the robot, tangentially containing the whole obstacle. If the relative velocity &lt;span class=&quot;math-container&quot;&gt;$v_r = v_A - v_B$&lt;/span&gt; is contained in this cone, a collision will eventually happen, otherwise they will pass without collision. Now, the velocity obstacle seems to be just the collision cone moved by &lt;span class=&quot;math-container&quot;&gt;$v_B$&lt;/span&gt;, i.e. &lt;span class=&quot;math-container&quot;&gt;$VO = CC \bigoplus v_B$&lt;/span&gt; where &lt;span class=&quot;math-container&quot;&gt;$\bigoplus$&lt;/span&gt; is the &lt;a href=&quot;https://en.wikipedia.org/wiki/Minkowski_addition&quot; rel=&quot;nofollow noreferrer&quot;&gt;Minkowski sum&lt;/a&gt;. Therefore, any velocity of the robot in &lt;span class=&quot;math-container&quot;&gt;$VO$&lt;/span&gt; will result in an collision, all the others won't.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there something I'm misunderstanding here or is it that simple?&#xA;Here is a figure from [2] that seems to fit to my understandings.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/pelSe.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/pelSe.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[1]: Chakravarthy, A., &amp;amp; Ghose, D. (1998). Obstacle avoidance in a dynamic environment: a collision cone approach. IEEE Transactions on Systems, Man, and Cybernetics - Part A: Systems and Humans, 28(5), 562–574. &lt;a href=&quot;https://doi.org/10.1109/3468.709600&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://doi.org/10.1109/3468.709600&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[2]: Wilkie, D., van den Berg, J., &amp;amp; Manocha, D. (2009). Generalized velocity obstacles. In 2009 IEEE/RSJ International Conference on Intelligent Robots and Systems (S. 5573–5578). IEEE. &lt;a href=&quot;https://doi.org/10.1109/IROS.2009.5354175&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://doi.org/10.1109/IROS.2009.5354175&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="21294" LastEditorUserId="110" LastEditDate="2019-01-12T00:40:31.560" LastActivityDate="2019-01-12T00:40:31.560" Title="Difference between Collision Cone and Velocity Obstacle" Tags="&lt;mobile-robot&gt;&lt;motion-planning&gt;&lt;navigation&gt;&lt;path-planning&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17938" PostTypeId="2" ParentId="16500" CreationDate="2019-01-06T22:00:39.877" Score="-1" Body="&lt;p&gt;A (possible) way that I could think of is to use a &lt;code&gt;(resource-aware) switching PID&lt;/code&gt; controller in your feedback loop. The operation is as follows:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[1] The controller is of the class single-input-single-output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[2] The input to the controller is the (desired) error i.e., the error measued between the reference position and the location of the wall-1/wall-2 that is being measued along the motion. I omit the discussion on the control output which is redundant.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[3] The fun part starts here: In short the controller will act as a switching PID controller which switches between its two error inputs. Thereby, reducing the error when certain limit exceeds. This limit can be in terms of performance, for instance, how the ideall the robot should maneuver parallel to the wall.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[4] This switching action can be based on algorithims like roll-out policy. Thereby, switching between the inputs whenever it is necessary. Of course, this depends upon your performance specificationsn and your processor's capabilities. Nevertheless, you can dig into topics such as resource aware controller design per se to look more in detail about this.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Disclaimer: Following this procedure might have impact on the stability, hence always verify the stability argument before going forward with these techniques.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="14489" LastActivityDate="2019-01-06T22:00:39.877" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17939" PostTypeId="1" AcceptedAnswerId="17942" CreationDate="2019-01-06T23:01:54.067" Score="2" ViewCount="470" Body="&lt;p&gt;If my understanding is correct, one flavor of hand eye calibration requires the following pairs of data for different robot arm positions:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The transform from the robot base to the robot hand.&lt;/li&gt;&#xA;&lt;li&gt;The transform from the marker to the robot camera.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;By transform, I mean the 4x4 homogeneous matrix that contains both rotation and translation information.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The part I am stuck on is getting the transform from the marker to the robot camera, which is a 2D camera. The marker can be checkerboard, or Aruco, etc. for which opencv can give you the pose of the marker with respect to the camera.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The question I have is fundamental: Is it even possible to get the pose of the camera from images of a marker of known size? Won't there be a scale ambiguity specifically in the z direction of the camera? Is this z ambiguity resolved by using a marker of known size? Finally, if this scale ambiguity is always there, is it possible to do hand eye calibration using a 2D camera and a marker of known size?&lt;/p&gt;&#xA;" OwnerUserId="22015" LastActivityDate="2019-01-07T04:59:58.290" Title="Hand eye calibration of robot arm using a 2D camera and marker of known size" Tags="&lt;cameras&gt;&lt;calibration&gt;&lt;robotic-arm&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17941" PostTypeId="2" ParentId="17939" CreationDate="2019-01-07T00:45:37.560" Score="0" Body="&lt;p&gt;I'm tied up at the moment, so I'll flesh this more out tomorrow morning, but I believe the answer to your question is that the pose estimation algorithms utilize the &lt;em&gt;camera parameters&lt;/em&gt; of the camera you're using. Field of view, resolution, focal point, and a known object's dimensions all come together to form similar triangles. The focal point and resolution form the triangle between the CCD or image receptor and lens of the camera, then there's another triangle between the lens and the actual object. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you know the focal distance and &quot;height&quot; on the image receptor, then you can get the angular width of the object. Knowing its real height and the angular width then lets you calculate the distance or depth of the object. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2019-01-07T00:45:37.560" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17942" PostTypeId="2" ParentId="17939" CreationDate="2019-01-07T04:44:38.897" Score="1" Body="&lt;p&gt;Is it even possible to get the pose of the camera from images of a marker of known size? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;-&gt; Yes. From the camera image that is containing a calibration board, you can estimate a 3 by 3 homography matrix H. Then, if you know a camera intrinsic parameters then you can inversely recover the scale known transformation matrix using the intrinsic and homography H. &lt;a href=&quot;https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/tr98-71.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here&lt;/a&gt; is a good reference for this (have a look at 3.1 Closed-form solution). Translation scale will be unknown when the board size is unknown.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Won't there be a scale ambiguity specifically in the z direction of the camera?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-&gt; Not at all if the camera intrinsic and board size is known. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this z ambiguity resolved by using a marker of known size?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-&gt; Yes &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, if this scale ambiguity is always there, is it possible to do hand eye calibration using a 2D camera and a marker of known size?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-&gt; As your statement &quot;scale ambiguity is always there&quot; is not necessary, the calibration is fairly simple now with the scale known transformations above. You just need to find a robot base to the board transformation and hand to eye transformation.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You have 12 unknowns and each constraint will give you 3 equations. 4 different set data will be enough for a closed-form solution. What you need to solve is&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$${^RT_{E_i}}{^ET_{C}}{^{C_i}T_{B}}={^RT_{B}} $$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where R is robot base, E is end-effector, C is a camera, B is the board coordinate. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Refers to the following &lt;a href=&quot;https://ieeexplore.ieee.org/document/88014&quot; rel=&quot;nofollow noreferrer&quot;&gt;paper&lt;/a&gt; for a detailed solution.&lt;/p&gt;&#xA;" OwnerUserId="19219" LastEditorUserId="19219" LastEditDate="2019-01-07T04:59:58.290" LastActivityDate="2019-01-07T04:59:58.290" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17943" PostTypeId="2" ParentId="16210" CreationDate="2019-01-07T06:51:53.517" Score="1" Body="&lt;p&gt;In EKF slam generally we include landmarks which can be marked as points: Corners, columns, trees etc. The uncertainties for landmarks are calculated by assuming that those are point landmarks. (&lt;a href=&quot;https://www.youtube.com/watch?v=Yhs36RszeTs&quot; rel=&quot;nofollow noreferrer&quot;&gt;1&lt;/a&gt;) Since it's not straightforward to include a line in EKF SLAM you need to come up with a solution to convert them to feature points. Using the center point of the line will not help to track the entire line. Adding sampled points from a line as landmarks will increase the matrix size as well as the computational cost. Following are some methods that I have tried in this case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) Convert the line to &lt;span class=&quot;math-container&quot;&gt;$y = mx + c$&lt;/span&gt; form and include m and c values in the state matrix. However this doesn't provide the limits of the line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) Include the starting points and end points of the line. This is the most computationally efficient way to include a line in EKF SLAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You need to modify your measurement model to recover the line from the state matrix and generate measurements.   &lt;/p&gt;&#xA;" OwnerUserId="21353" LastActivityDate="2019-01-07T06:51:53.517" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17944" PostTypeId="2" ParentId="17887" CreationDate="2019-01-07T07:07:40.697" Score="1" Body="&lt;p&gt;Since you are using Kinect my advise is to use Octomap ROS package to build a 3D map. You can extract the 2D occupancy grid map of the ground floor from the Octomap for path planning and navigation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;One disadvantage of using Octomap is, it doesn't have a pose correction method. It just build the map based on the poses provided by the odometry.  &lt;/p&gt;&#xA;" OwnerUserId="21353" LastActivityDate="2019-01-07T07:07:40.697" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17945" PostTypeId="1" CreationDate="2019-01-07T14:54:00.963" Score="1" ViewCount="473" Body="&lt;p&gt;Looking at &lt;a href=&quot;https://github.com/3drobotics/Pixhawk_OS_Hardware&quot; rel=&quot;nofollow noreferrer&quot;&gt;3DR's Pixhawk hardware on GitHub&lt;/a&gt; the FMU and IMU are treated as different pieces of hardware. On the schematics for the FMUs (&lt;a href=&quot;https://github.com/3drobotics/Pixhawk_OS_Hardware/blob/master/FMUv3_REV_G/Schematic%20Print/Schematic%20Prints.PDF&quot; rel=&quot;nofollow noreferrer&quot;&gt;example&lt;/a&gt;) there is limited reference to the IMU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, is the IMU a separate board inside the Pixhawk? Is there information somewhere that shows which IMUs come with which FMUs?&lt;/p&gt;&#xA;" OwnerUserId="22021" LastActivityDate="2020-06-04T11:06:15.597" Title="How is the IMU used in the PixHawk?" Tags="&lt;imu&gt;&lt;uav&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17947" PostTypeId="1" AcceptedAnswerId="17957" CreationDate="2019-01-08T10:35:57.790" Score="1" ViewCount="402" Body="&lt;p&gt;Both &lt;strong&gt;V-rep&lt;/strong&gt; and &lt;strong&gt;Webots&lt;/strong&gt; simulator says that they can simulate multiple robots. Is these simulators are capable for simulate swarm robots? Can I simulate the swarm intelligence algorithms like ACO, BeeClust algorithm, Stick pulling Algorithm, Occlusion Based Collective pushing etc. on these simulators? Which robot I have to select for implementing above algorithms? For implementing these algorithms which simulator will be better? Any suggestions is appreciated.&lt;/p&gt;&#xA;" OwnerUserId="22026" LastEditorUserId="22026" LastEditDate="2019-01-08T18:50:57.280" LastActivityDate="2019-03-23T19:59:36.840" Title="Swarm Robot Simulation" Tags="&lt;swarm&gt;" AnswerCount="3" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17949" PostTypeId="1" CreationDate="2019-01-08T15:54:52.913" Score="1" ViewCount="56" Body="&lt;p&gt;i have programmed for my two wheeled robot 2 separate controller for each wheel so that afer approx. 1 second both motors reach my desired speed. But my problem is that one of those motors is faster at the desired speed than the other one, so if i turn it on my robot doesnt stay on a straight line but an angle of the desired position.&#xA;I wanted to ask how can i realize that both reach the desired speed at the same time so my robot will go straigt.&lt;/p&gt;&#xA;" OwnerUserId="21843" LastActivityDate="2019-02-08T20:34:39.540" Title="Connect 2 motor controllers" Tags="&lt;pid&gt;&lt;microcontroller&gt;&lt;two-wheeled&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17950" PostTypeId="1" AcceptedAnswerId="17986" CreationDate="2019-01-08T16:47:14.187" Score="1" ViewCount="263" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/1tOc0.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1tOc0.png&quot; alt=&quot;3 joints with two theta angles&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the image, I would like to find out how joint 1, 2 and 3 can be computed by using forward kinematics? (Assuming a theta value was given)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I understand that to get point 3 to origin (&lt;code&gt;P3 -&amp;gt; o&lt;/code&gt;) you can do the following matrix multiplications:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[P3-&amp;gt;o] = [P2-&amp;gt;P1][P1-&amp;gt;o]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Where each P matrix is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;P = |Scale*Rotation  0|&#xA;    |Translation     1|&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If the first Theta was 50 degrees and the second theta was 100 degrees, what would the &lt;code&gt;[P2-&amp;gt;P1]&lt;/code&gt; and &lt;code&gt;[P1-&amp;gt;o]&lt;/code&gt; matrices be?&lt;/p&gt;&#xA;" OwnerUserId="22028" LastActivityDate="2019-01-13T00:23:19.983" Title="Forward Kinematics with matrices" Tags="&lt;forward-kinematics&gt;&lt;rotation&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17956" PostTypeId="2" ParentId="16374" CreationDate="2019-01-09T07:54:47.917" Score="0" Body="&lt;p&gt;The 4 independent inputs directly correspond to the transmitter stick inputs, &lt;span class=&quot;math-container&quot;&gt;$u = [\delta_{thr}, \delta_{ele}, \delta_{ail}, \delta_{rud}]^T$&lt;/span&gt; &lt;/p&gt;&#xA;" OwnerUserId="21285" LastActivityDate="2019-01-09T07:54:47.917" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17957" PostTypeId="2" ParentId="17947" CreationDate="2019-01-09T07:57:38.887" Score="1" Body="&lt;p&gt;It's important to separate between simulation and artificial intelligence. An environment for simulating hundreds of robots on the screen is called a game engine. It can be realized with standard programming languages for example Python/pygame. The user creates an array of objects and each objects has a position and a speed value. The graphics engine displays all the objects on the screen. This is called a realtime simulation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other part is the artificial intelligence to control the objects. Without an AI, the robots in the simulation has to be controlled manually or by a random generator. They are displayed at the screen with smoothly 60 frames per second, but it's unknown how to move them right so that robots are solving a task. In general, a simulator for displaying hundreds of objects is easy to realize. The more advanced part is to create the AI which drives the objects autonomously.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Simulators like Webots, V-Rep, Gazebo, pygame or Unity3D are the environment in which a robotics controller is developed. They are providing the graphics and the underlying physics engine. They are working as a game construction set in which the user can script a game.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastEditorUserId="14283" LastEditDate="2019-01-09T08:27:12.033" LastActivityDate="2019-01-09T08:27:12.033" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17958" PostTypeId="1" CreationDate="2019-01-09T09:05:59.863" Score="0" ViewCount="58" Body="&lt;p&gt;I want to build a 4WD robot that can travel vertically by pushing against opposite rails. The wheels push against the rails and generate friction, the robot moves upwards as the wheels rotate. This is the side view that I am thinking of:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/QJaaO.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QJaaO.jpg&quot; alt=&quot;enter image description here|308x250&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If one side moves faster than the other then the robot would loose grip and fall down. I have to ensure that the wheels on both sides rotate at the exact same speed. How to maintain the same speed on both sides?&lt;/p&gt;&#xA;" OwnerUserId="20368" LastActivityDate="2019-01-09T10:23:29.260" Title="Vertically moving robot" Tags="&lt;control&gt;&lt;kinematics&gt;&lt;brushless-motor&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17959" PostTypeId="2" ParentId="17958" CreationDate="2019-01-09T09:11:34.360" Score="1" Body="&lt;p&gt;The most popular method is to use wheel encoders. Since it counts the rpm value, we can maintain the same speed in both sides. But as I understand this is not a reliable way to keep the robot in exact horizontal position. You can use an IMU to measure the robots orientation and the speed of the wheels can be adjusted through a PID controller.&lt;/p&gt;&#xA;" OwnerUserId="21353" LastActivityDate="2019-01-09T09:11:34.360" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17960" PostTypeId="2" ParentId="17958" CreationDate="2019-01-09T10:23:29.260" Score="1" Body="&lt;p&gt;You should not follow this approach. It is nice in theory but is not really suitable for real life. &#xA;If you use a single motor, you are not able to recover from any tilting due to a slipping wheel. If you have separate motors for the sides, it will be rather difficult to synchronize the motors e.g. while turning on the robot. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You always have to think about a cable or motor failure. Your robot has to be able to hold its position even if you cut some cables or a motor burns out. In your configuration, you have no safety or fallback method. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The easiest fix is to add some more (passive) wheels at one rail beneath your current wheels (distance maybe half the rail distance). This stops the robot from tilting and falling. You can then add encoders to this passive wheel and use this data to control the motor that drives the robot up and down. As its a passive wheel you will have less problems with slip. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;(The encoder data will also be an important input for the emergency braking system that your robot has)&lt;/p&gt;&#xA;" OwnerUserId="23196" LastActivityDate="2019-01-09T10:23:29.260" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17961" PostTypeId="1" CreationDate="2019-01-09T13:38:29.203" Score="0" ViewCount="39" Body="&lt;p&gt;i got a task for which i need to drive a certain distance and move around an object. I finally managed that my robot goes almost straight but i think its enough. But now i gotta tackle the problem how to turn my robot by 90° at certain points. &#xA;Can someone give me some advise how i can program the turning of the robot?&#xA;For measurements i got wheel encoders and an IMU but i dont have any experience using the IMU.&#xA;Thanks you for reading :)&lt;/p&gt;&#xA;" OwnerUserId="21843" LastActivityDate="2019-02-08T14:00:43.753" Title="Turning a 2 wheeled robot 90°" Tags="&lt;mobile-robot&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17962" PostTypeId="2" ParentId="17961" CreationDate="2019-01-09T13:59:20.387" Score="1" Body="&lt;p&gt;Usually IMUs have only an accelerometer and a Gyro. Gyro gives the angular rates around x,y and z axes. The gyro can help to measure the rotated angle around z axis. But this is not very accurate method since gyro gives the angular rate to calculate the rotated angle by multiplying from the sample time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\theta = \omega_z*\Delta t$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Calculating the absolute rotation is not possible unless you use an magnetometer. My personal advice is to use the wheel encoders to calculate the rotated angle using the following method.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ulvQd.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ulvQd.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="21353" LastActivityDate="2019-01-09T13:59:20.387" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17964" PostTypeId="1" AcceptedAnswerId="18257" CreationDate="2019-01-09T20:25:38.140" Score="0" ViewCount="1118" Body="&lt;p&gt;I am working on a hobby project for self balancing robot. My robot balances quiet well, so my next step is to start moving it. I saw in some blogs that they used a cascade control algorithm as shown below&lt;a href=&quot;https://i.stack.imgur.com/HCUEV.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HCUEV.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I have the following question which is giving me a hard time&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;When I see some videos about segway like systems (&lt;a href=&quot;https://www.youtube.com/watch?v=-7xvqQeoA8c&quot; rel=&quot;nofollow noreferrer&quot;&gt;like boston dynamics here&lt;/a&gt; ), I see that before moving forward, the robot moves a bit backward (to generate a tilt) which I think is justified because it must first get an error to get started in the forward direction. So will this kind of control system be able to handle that or do I need to code it seperately?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="22037" LastActivityDate="2019-03-10T10:32:30.140" Title="Self balancing robot: PID Control Algorithm" Tags="&lt;mobile-robot&gt;&lt;arduino&gt;&lt;pid&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17965" PostTypeId="1" AcceptedAnswerId="17971" CreationDate="2019-01-09T21:04:03.013" Score="2" ViewCount="162" Body="&lt;p&gt;i'm implementing a damped least squares IK algorithm for an articulated arm, based on the &lt;a href=&quot;https://www.math.ucsd.edu/~sbuss/ResearchWeb/ikmethods/iksurvey.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;work here&lt;/a&gt;. I have the algorithm working well, but it occasionally produces solutions that have segments intersecting, and doesn' account for the realities of cable management etc. that prevents full 360 rotation of any given joint. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;can the constraints be incorporated into the composition of the Jacobian, or is there some other approach for solving for these?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;edit&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a solution that &lt;em&gt;kind of&lt;/em&gt; works, but it gets stuck sometimes and feels inelegant. In effect, as I perform an iterative IK, at each step I check to see if the solution self-collides, or violates an angle constraint. If it violates an angle constraint, I clamp the angle. If it self collides, I take the offending segment and rotate it by a random amount. This seems to work, but in addition to feeling wrong, it occasionally &quot;gets stuck.&quot; What I mean by this is that as I try to run the solver, it's unable to find a solution from a particular configuration to get to what is otherwise a reachable area until I move it into some other configuration. Code below. Any advice appreciated.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;while (iterations++ &amp;lt; 100) {&#xA;  SimpleMatrix j = computeJacobian(segments);&#xA;  SimpleMatrix dTheta = calcDeltaThetasDLS(j, target);&#xA;&#xA;  for (int i=0; i&amp;lt;segments.size(); i++) {&#xA;    Segment s = segments.get(i);&#xA;    s.angle += dTheta.get(i, 0);&#xA;    if (s.angle &amp;lt; s.minAngle)&#xA;      s.angle = s.minAngle;&#xA;    else if (s.angle &amp;gt; s.maxAngle)&#xA;      s.angle = s.maxAngle;&#xA;  }&#xA;&#xA;  segments.get(0).recompute();&#xA;&#xA;  for (int i=0; i&amp;lt;segments.size(); i++) {&#xA;    Segment s = segments.get(i);&#xA;&#xA;    if (s.isOverlapping(segments)) {&#xA;      s.angle += PI * Math.random();&#xA;      segments.get(0).recompute();&#xA;      dThetaLast = null;&#xA;    }&#xA;  }&#xA;&#xA;  if (dThetaLast != null &amp;amp;&amp;amp; dTheta.minus(dThetaLast).elementMaxAbs() &amp;lt; 0.0001) {&#xA;    break;&#xA;  } else&#xA;    dThetaLast = dTheta;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="6782" LastEditorUserId="6782" LastEditDate="2019-01-10T03:24:51.350" LastActivityDate="2019-01-10T13:46:56.527" Title="constraining rotation in jacobian IK algorithm" Tags="&lt;inverse-kinematics&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17966" PostTypeId="1" CreationDate="2019-01-10T00:05:12.990" Score="1" ViewCount="57" Body="&lt;p&gt;I have three cameras separated by some distance, looking at a scene. I have calibrated them using checkerboard and I have their respective intrinsic parameters and their pose and rotation matrix, I am stuck as to how to do data/image fusion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think I have to do feature detection and feature matching and then do data fusion but I am not sure if I am on the right path.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would be very helpful if anyone can point me to some answer or help me with it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or if I am wrong then what is the right method or steps to follow?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would be really helpful even if someone can point to a resource or just guide. Thank you, good people&lt;/p&gt;&#xA;" OwnerUserId="22039" LastActivityDate="2019-06-11T02:01:25.720" Title="Image data fusion" Tags="&lt;matlab&gt;&lt;python&gt;&lt;opencv&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17967" PostTypeId="1" CreationDate="2019-01-10T00:41:21.533" Score="0" ViewCount="146" Body="&lt;p&gt;I've built some robotic systems that rely on handcrafted hierarchical FSM, I'm hoping to learn more by studying codes from some open source system that have more complex structures. Can anyone point out some open source robotics projects that have complex software structure? For example, a service humannoid robot might need to handle different situations, so if it's a handcrafted system then it should have a complex structure storing and retrieving instances of interaction. It shouldn't just be a system like an end-to-end deep reinforcement learning based humanoid walking because this system encapsulates too much its working functions in a blackbox but still pretty straightforward in terms of input-output relationships in control and perception. &lt;/p&gt;&#xA;" OwnerUserId="9972" LastActivityDate="2020-07-04T03:05:35.707" Title="Open source robotics projects that have complex software structure?" Tags="&lt;research&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17968" PostTypeId="1" CreationDate="2019-01-10T01:45:42.450" Score="0" ViewCount="206" Body="&lt;p&gt;I'm designing a round knob positioned by a stepper. The knob is intended move by an external force while positioned by the stepper. I'd like the stepper to release (power off) when the knob is manually turned. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a way to sense the application of external force via the stepper drivers ie a current sense ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know there is a current spike when the stepper position stalls. I'm unsure whether the current spikes when already positioned and the position manually moved.&lt;/p&gt;&#xA;" OwnerUserId="22038" LastActivityDate="2019-10-07T15:00:10.230" Title="How to tell if a stepper motor position is moved by external force?" Tags="&lt;stepper-motor&gt;&lt;precise-positioning&gt;&lt;stepper-driver&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="17969" PostTypeId="1" AcceptedAnswerId="18004" CreationDate="2019-01-10T03:59:45.533" Score="0" ViewCount="925" Body="&lt;p&gt;I have been having a very difficult time trying to understand why my system does not have the cmd_vel topic.  I am trying to get a ROS system running with Gazebo so that I can work through tutorials and learn ROS.  I started with the ROS Development Studio (online) and it was great!  But sooner or later one must be able to get ROS going on a local system.  So I built a Ubuntu system and installed ROS + Gazebo, then installed Turtlebot including the simulator.  It all works!  I can launch a Turtlebot simulation then launch the Turtlebot_teleop package and I am able to move the robot around.&lt;br&gt;&#xA;But when I list the running topics cmd_vel is not one of them.  These are the list of topics grep'd on &quot;cmd&quot;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;scott@Ubvm:~/catkin_ws/devel$ rostopic list | grep cmd&#xA;/cmd_vel_mux/active&#xA;/cmd_vel_mux/input/navi&#xA;/cmd_vel_mux/input/safety_controller&#xA;/cmd_vel_mux/input/switch&#xA;/cmd_vel_mux/input/teleop&#xA;/cmd_vel_mux/parameter_descriptions&#xA;/cmd_vel_mux/parameter_updates&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;No /cmd_vel!  So I can't work through tutorials to drive the robot around.  Besides, I just don't understand why it is not there but teleop works.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could someone tell me why I do not see the cmd_vel topic?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;System info:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ubuntu 16.04&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ROS Kinetic&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Gazebo 7 (not sure exactly which version but it launches and runs)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Installed Turtlebot based on Indigo install but replaced with kinetic.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sudo apt-get install &#xA;ros-kinetic-turtlebot &#xA;ros-kinetic-turtlebot-apps &#xA;ros-kinetic-turtlebot-interactions &#xA;ros-kinetic-turtlebot-simulator &#xA;ros-kinetic-kobuki-ftdi &#xA;ros-kinetic-rocon-remocon &#xA;ros-kinetic-rocon-qt-library &#xA;ros-kinetic-ar-track-alvar-msgs&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="22040" LastEditorUserId="17029" LastEditDate="2019-01-10T13:36:42.630" LastActivityDate="2021-01-18T18:19:44.327" Title="Why no cmd_vel topic when running Turtlebot simulation on ROS + Gazebo?" Tags="&lt;ros&gt;&lt;simulation&gt;&lt;gazebo&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17970" PostTypeId="2" ParentId="17967" CreationDate="2019-01-10T09:56:50.950" Score="1" Body="&lt;p&gt;Robotics software can be separated into environments and the motion controller itself. Notable example for robotics environments are ROS or Lejos. They are providing hardware capabilities to control the robot on a physical level and they have built in message passing features. On top of ROS and similar software so called robotics controllers are realized. That's a cognitive layer which is able to control the robot autonomously. A motion controller is a replacement for a manual driven remote control. They are replacing a human operator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The robot controller can be realized with the mentioned hierarchical FSM, deeplearning or with behavior trees. In most cases, domain knowledge has to be given in a machine readable language. More simpler controller are able to pathplanning the trajectory between two points. They are working with searching in the state space. The lejos project provides a built-in package for finding the shortest path between points which is helpful for implementing an obstacle avoidance system.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2019-01-10T09:56:50.950" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17971" PostTypeId="2" ParentId="17965" CreationDate="2019-01-10T11:02:18.253" Score="2" Body="&lt;p&gt;If you want to stick to Jacobian-based IK techniques, such as DLS, you ought to take barrier functions into the game and couple the resulting primary and secondary tasks with the null-space operator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;strong&gt;barrier functions&lt;/strong&gt; can generate a repulsive potential for the joints when they approach their physical constraints.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;strong&gt;primary task&lt;/strong&gt; (reaching for the target) and the &lt;strong&gt;secondary task&lt;/strong&gt; (joint bounds avoidance) can be then aggregated together using the null-space projection of the Jacobian.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's an enlighting paper on these topics:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://pdfs.semanticscholar.org/659d/37c6d272a2b03b8748be2c8994d84df077b7.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;A Realistic Joint Limit Algorithm for Kinematically Redundant Manipulators&lt;/em&gt;&lt;/a&gt;, H.-Y. Lee, B.-J. Yi, and Y. Choi, International Conference on Control Automation and Systems, Seoul, 2007.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In particular, the null-space projection of the DLS version &lt;span class=&quot;math-container&quot;&gt;$J^\#$&lt;/span&gt; of the Jacobian &lt;span class=&quot;math-container&quot;&gt;$J$&lt;/span&gt; is &lt;span class=&quot;math-container&quot;&gt;$I-J^\#\cdot J$&lt;/span&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2019-01-10T13:46:56.527" LastActivityDate="2019-01-10T13:46:56.527" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17972" PostTypeId="2" ParentId="17968" CreationDate="2019-01-10T13:32:00.690" Score="1" Body="&lt;p&gt;I am not sure how you are driving your stepper motor. In case you developed your own way, you could connect an analog pin to the wires that drive the stepper motor. These should be able to detect an induced voltage if the stepper is turned without being driven.&lt;/p&gt;&#xA;" OwnerUserId="22046" LastActivityDate="2019-01-10T13:32:00.690" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="17974" PostTypeId="1" CreationDate="2019-01-10T17:53:24.620" Score="1" ViewCount="96" Body="&lt;p&gt;I am calculating inverse kinematic for 5dof robotic arm using Jacobian matrix (first time). i used following formulas to do my calculation and also implemented in my code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/XpLuN.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XpLuN.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/butL6.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/butL6.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/11A1z.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/11A1z.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;for more information please follow this link --&gt; &lt;a href=&quot;https://www.youtube.com/watch?v=SefTCXrpL8U&amp;amp;t=872s&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=SefTCXrpL8U&amp;amp;t=872s&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not understanding what I am doing wrong. I am getting the wrong theta values and while loop is running maximum two times, it does not matter which values I give as x, y, z.&#xA;- I have searched, how others have calculated their Jacobian matrices. but still could not find my mistake. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;please help me to debug my code. I might be doing some silly mistake.&#xA;This is a code for calculating forward kinematics&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;class Fkine:&#xA;    def __init__(self, PT):&#xA;        &quot;&quot;&quot; Initialize the DH parameters for forward kinematics&#xA;            DH peramteres columes should be DH = [theta alpha  r  d]&#xA;        &quot;&quot;&quot;&#xA;        if not isinstance(PT, list):&#xA;            print(&quot;[ERROR] dh parameter should be matrix {}&quot;.format(PT))&#xA;        if not np.shape(PT)[1] == 4:&#xA;            print(&quot;[ERROR] enter proper dh parameter {}&quot;.format(PT))&#xA;&#xA;        self.PT = np.array(PT)&#xA;&#xA;&#xA;    def homog_trans_matrix(self, row_num):&#xA;&#xA;        cos_theta_n = np.cos(self.PT[row_num][0])&#xA;        sin_theta_n = np.sin(self.PT[row_num][0])&#xA;&#xA;        cos_alpha_n = np.cos(self.PT[row_num][1])&#xA;        sin_alpha_n = np.sin(self.PT[row_num][1])&#xA;&#xA;        r_n = self.PT[row_num][2]&#xA;        d_n = self.PT[row_num][3]&#xA;&#xA;        homog_trans_matrix = [&#xA;            [cos_theta_n, -sin_theta_n * cos_alpha_n, sin_theta_n * sin_alpha_n, r_n * cos_theta_n],&#xA;            [sin_theta_n, cos_theta_n * cos_alpha_n, -cos_theta_n * sin_alpha_n, r_n * sin_theta_n],&#xA;            [0, sin_alpha_n, cos_alpha_n, d_n],&#xA;            [0, 0, 0, 1],&#xA;        ]&#xA;        return np.matrix(homog_trans_matrix)&#xA;&#xA;&#xA;    def fk(self):&#xA;        &quot;&quot;&quot; function to generate forward kinematic from DH parameters&#xA;            by multiplying homogeneous transformation matrix Hn = H_0 * H_1 * ....H_n-1&#xA;        &quot;&quot;&quot;&#xA;        Hn = []&#xA;&#xA;        # taking the number of rows from the DH parameters&#xA;        for i in range(np.shape(self.PT)[0]):&#xA;            H = self.homog_trans_matrix(i)&#xA;&#xA;            if i == 0:&#xA;                Hn = H&#xA;&#xA;            else:&#xA;                Hn = np.dot(Hn, H)&#xA;&#xA;        return Hn&#xA;&#xA;def get_jacobian(fkine_obj, PT):&#xA;    Hn = fkine_obj.fk()&#xA;    # print(Hn)&#xA;    R0_0 = [&#xA;        [0.],&#xA;        [0.],&#xA;        [1.]&#xA;    ]&#xA;    D0_n = Hn[:, 3][:-1]&#xA;&#xA;    upper_part = np.cross(R0_0, D0_n, axis=0)&#xA;    # print(upper_part)&#xA;&#xA;    for i in range(np.shape(PT)[0] - 1):&#xA;        H0_i = fkine_obj.homog_trans_matrix(i)&#xA;&#xA;        # accessing 3rd column of the matrix and removing last row&#xA;        R0_i = H0_i[:, 2][:-1]&#xA;&#xA;        # accessing 4th column of the matrix and removing last row&#xA;        D0_i = H0_i[:, 3][:-1]&#xA;&#xA;        next_col = np.cross(R0_i, np.subtract(D0_n, D0_i), axis=0)&#xA;&#xA;        upper_part = np.concatenate([upper_part, next_col], axis=1)&#xA;&#xA;    return upper_part&#xA;def main():&#xA;&#xA;    THETA_1 = 0.1&#xA;    THETA_2 = 90.&#xA;    THETA_3 = 0.1&#xA;    THETA_4 = 0.1&#xA;    THETA_5 = 0.1&#xA;&#xA;    L_1 = 33.  # mm 3.3cm&#xA;    L_2 = 105.  # mm 10.5cm&#xA;    L_3 = 98.  # mm 9.8cm&#xA;    L_4 = 27.  # mm 2.7cm&#xA;    L_5 = 65.  # mm 6.5cm&#xA;&#xA;    # DH parameter table for my robotic arm&#xA;    PT = [&#xA;        [math.radians(THETA_1), math.radians(90.0), 0, L_1],&#xA;        [math.radians(THETA_2), 0, L_2, 0],&#xA;        [math.radians(THETA_3), 0, L_3, 0],&#xA;        [math.radians(THETA_4) + math.radians(90.0), math.radians(90.0), 0, 0],&#xA;        [math.radians(THETA_5), 0, 0, L_4 + L_5]&#xA;    ]&#xA;&#xA;    x_dst = 1.&#xA;    y_dst = 1.&#xA;    z_dst = 1.&#xA;&#xA;    while 180. &amp;gt;= math.degrees(PT[0][0]) &amp;gt;= 0. \&#xA;            and 180. &amp;gt;= math.degrees(PT[1][0]) &amp;gt;= 0. \&#xA;            and 180. &amp;gt;= math.degrees(PT[2][0]) &amp;gt;= 0. \&#xA;            and 180. &amp;gt;= math.degrees(PT[3][0]) &amp;gt;= 0. \&#xA;            and 180. &amp;gt;= math.degrees(PT[4][0]) &amp;gt;= 0.:&#xA;&#xA;        fk_5d = fk.Fkine(PT)&#xA;        jacobian = get_jacobian(fk_5d, PT)&#xA;&#xA;        jacobian_inv = np.linalg.pinv(jacobian)&#xA;        current_cord = fk_5d.fk()[:, 3][:-1]&#xA;&#xA;        theta_dots = jacobian_inv.dot([&#xA;            [x_dst],&#xA;            [y_dst],&#xA;            [z_dst],&#xA;        ])&#xA;&#xA;        PT[0][0] += theta_dots.item(0) / 100&#xA;        PT[1][0] += theta_dots.item(1) / 100&#xA;        PT[2][0] += theta_dots.item(2) / 100&#xA;        PT[3][0] += theta_dots.item(3) / 100&#xA;        PT[4][0] += theta_dots.item(4) / 100&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;sorry for the bad indentation, I do now know how to do it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;thank you very much in advance &lt;/p&gt;&#xA;" OwnerUserId="21974" LastEditorUserId="21974" LastEditDate="2019-01-11T08:04:33.950" LastActivityDate="2019-01-11T08:04:33.950" Title="help to find the bug for calculating inverse kinematic using jacobian" Tags="&lt;inverse-kinematics&gt;&lt;jacobian&gt;&lt;python&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17977" PostTypeId="1" CreationDate="2019-01-10T22:12:23.770" Score="0" ViewCount="41" Body="&lt;p&gt;How do I compute the maximum values for ||M(q)|| and ||M_dot(q)||, the induced 2-norms, where M(q) is the mass matrix from the standard dynamical model of a robotic manipulator. I have the numerical values but not the analytical symbolic representation. &lt;/p&gt;&#xA;" OwnerUserId="18572" LastActivityDate="2020-10-04T04:09:50.923" Title="Maximum value of norm of mass matrix M" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;dynamics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17978" PostTypeId="2" ParentId="17947" CreationDate="2019-01-10T22:53:56.873" Score="1" Body="&lt;p&gt;Any general purpose robot simulator like V-REP or Webots can get your task done, though with not the best support for swarm robots in particular. &lt;a href=&quot;https://www.argos-sim.info/&quot; rel=&quot;nofollow noreferrer&quot;&gt;ARGoS&lt;/a&gt; is a good platform for swarm robot simulation, maintained well enough with active contributors and shall allow you to inherently have support for centralized/de-centralized control. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The most common swarm robots are the Kilobots and the Khepera and ARGoS supports both of them. &lt;/p&gt;&#xA;" OwnerUserId="18572" LastActivityDate="2019-01-10T22:53:56.873" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17979" PostTypeId="2" ParentId="17945" CreationDate="2019-01-11T07:51:09.817" Score="1" Body="&lt;p&gt;Take a read &lt;a href=&quot;http://ardupilot.org/copter/docs/common-px4fmu-overview.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;https://docs.px4.io/en/flight_controller/pixhawk_series.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&#xA;The Flight Management Unit (FMU) board and the IO board combined make a Pixhawk autopilot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The FMU is contains the control logic and the sensors while the IO takes care of the IO (duh) and some failsafe functionality which is best kept separate from the main loop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Recent Pixhawk versions contain more advanced versions of the FMU board which hosts more than one IMU sets. To be more specific, they are populated with 2 or 3 separate accelerometers, gyroscopes and magnetometers.&#xA;I'm not 100% clear if they use 3 9DOF chips or 9 3DOF chips to achieve this; it may vary from FMU version to FMU version.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, the FMU hosts one (or more FMUs) and not vice versa.&lt;/p&gt;&#xA;" OwnerUserId="11500" LastActivityDate="2019-01-11T07:51:09.817" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17980" PostTypeId="2" ParentId="17964" CreationDate="2019-01-11T09:33:57.107" Score="1" Body="&lt;p&gt;If you for example want to move in the positive direction the speed error will become positive. The first PID controller will translate that into a (most likely) positive angle reference as well. So the inner PID controller will try to bring the measured angle to the positive reference, which initially only can be achieved by driving backwards. Once that positive angle is achieved the wheels will need to continuously drive forwards in order to exert a torque to keep the robot at that angle. So you do not need to do anything additionally to achieve this behavior.&lt;/p&gt;&#xA;" OwnerUserId="1487" LastActivityDate="2019-01-11T09:33:57.107" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="17981" PostTypeId="1" AcceptedAnswerId="17984" CreationDate="2019-01-11T13:51:42.507" Score="3" ViewCount="143" Body="&lt;p&gt;I am trying to get started with a stereo experiment and wanted to know the mistakes I might have made during the experiment. The goal is to calculate the depth map of an object using one light projector and one camera mounted in a stereo configuration. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a DLP 4500 lightcrafter of resolution ‎912x1140 made by Texas Instruments and a camera of resolution 600x800. I am planning to use triangulation methods to estimate the depth. This is how I have setup the components.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) The experiment is conducted in an enclosure to eliminate effects of ambient light. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) The structured light pattern that has to be projected onto the object  is loaded as an image. The image is projected onto one of the walls of the enclosure. The projector lens is focused until the projection is clear and the projector is moved backwards or forwards until the projection fits within the boundaries of the face of the enclosure that the projector projects on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3) The camera is mounted on an adjustable stand with all six degrees of freedom. It is adjusted facing the projection. I am unsure about this part-The camera is placed in the same vertical line as the lens of projector.  The camera is placed above the projector at a distance of about 15 cm. This would be the baseline b for the triangulation formula. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;4) The lens of the camera is adjusted until the image observed in the camera is sharp and the entire object and some part of the projected image is made to appear in the frame of the camera. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;5) The camera is calibrated using a checkerboard in ROS. The camera intrinsics matrix is generated and thus the focal length f required for the triangulation formula is obtained.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this setup okay for the experiment? Have I made a mistake at some stage. I am new to computer vision and may have overlooked some aspects. Thanks.&lt;/p&gt;&#xA;" OwnerUserId="15335" LastActivityDate="2019-01-12T01:28:42.197" Title="Setting up a Structured Light Stereo system" Tags="&lt;cameras&gt;&lt;stereo-vision&gt;&lt;3d-reconstruction&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17982" PostTypeId="2" ParentId="17964" CreationDate="2019-01-11T18:56:25.183" Score="0" Body="&lt;p&gt;The fastest way in tuning the pid controller for a self-balancing is to put a remote control into the loop. That is a knob which adjusts pid parameters manual, similar to what musicians are using for fine tuning a bass-guitar. What exactly the knob modifies depends on the control system. It can be the sinus waveform, the amplitude or the delay until the feedback is send back into the system. The important thing is, that the knob can't be controlled by the pid system itself but the input is given from the outside. That's a well informed human operator who is able to detect if the balancing works or not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The knob will transform a closed loop system into a semi-open system which depends on it's environment. The resulting problem “which position needs the knob?” is a sign for progress because it helps to reduce a complicated control problem to parameter finding.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2019-01-11T18:56:25.183" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17983" PostTypeId="2" ParentId="17937" CreationDate="2019-01-11T21:07:43.190" Score="1" Body="&lt;p&gt;After reading through the original collision cones paper and many others I realized that my understanding of the collision cone was wrong. The &quot;collision cone&quot; mentioned in the Velocity Obstacle papers refers to something completely different.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Simply said, given a point robot and an obstacle both moving at (given) constant velocities, the collision cone is the set of angles or directions, that will result in a collision if the robot chooses one of them. In the most cases it is just one range of angles, and visualized in the work- or configuration space (which are equivalent here) resembles a cone. Note that the vertex of the cone is located at the robots position, and is generally speaking not diverging exactly in the direction of the obstacle, but roughly in the direction to the path the obstacle is following. See this figure as example, where O is the robot and the CC is hatched:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/i43EP.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/i43EP.png&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Source: [1]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now for the Velocity Obstacle the explanation given in my question seems still correct to me, and the differences are quite noticeable now. In the VO case, the &quot;collision cone&quot; mentioned there is just defined by the two tangential straights, and refers to the relative velocities, unlike the CC that regards the robots direction. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another difference is the meaning of the cones in these two approaches. CCs describe forbidden directions for the robot, where both velocities are already fixed. VOs contain all forbidden velocity vectors, which may have different directions and magnitudes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[1]: Chakravarthy, A., &amp;amp; Ghose, D. (1998). Obstacle avoidance in a dynamic environment: a collision cone approach. IEEE Transactions on Systems, Man, and Cybernetics - Part A: Systems and Humans, 28(5), 562–574. &lt;a href=&quot;https://doi.org/10.1109/3468.709600&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://doi.org/10.1109/3468.709600&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="21294" LastActivityDate="2019-01-11T21:07:43.190" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17984" PostTypeId="2" ParentId="17981" CreationDate="2019-01-12T01:28:42.197" Score="1" Body="&lt;p&gt;Sounds good to me but there are some missing stages.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;camera to the projector extrinsic calibration&lt;/li&gt;&#xA;&lt;li&gt;projector intrinsic calibration&#xA;-&gt; don't need this stage if you are not interested in the accuracy of your result.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Also, you need to make sure to calibrate camera after adjusting focus. Extrinsic as well if you have made a change in camera-to-projector distance or angle.&lt;/p&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2019-01-12T01:28:42.197" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="17985" PostTypeId="2" ParentId="17966" CreationDate="2019-01-12T01:34:12.253" Score="1" Body="&lt;h1&gt;What do you mean by data fusion&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Here's some definitions I can think of:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Determine from the features in the scene the positions of the camera&lt;/li&gt;&#xA;&lt;li&gt;Determine from the positions of the camera the geometry of the scene&lt;/li&gt;&#xA;&lt;li&gt;Determine from the features of the scene the intrinsic parameters of the camera.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Since you say you have fully calibrated the three cameras jointly using a checkerboard, then 1 and 3 are done. That must leave 2. &lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Estimating positions of features, or &lt;a href=&quot;https://en.wikipedia.org/wiki/Structure_from_motion&quot; rel=&quot;nofollow noreferrer&quot;&gt;structure from motion&lt;/a&gt;&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;To estimate the position of a feature in the world, you first define what features. All pixels? That would be called &lt;a href=&quot;https://stackoverflow.com/a/17620159/389599&quot;&gt;disparity mapping&lt;/a&gt; Just a few features? That you can do with &lt;a href=&quot;https://en.wikipedia.org/wiki/Triangulation_%28computer_vision%29&quot; rel=&quot;nofollow noreferrer&quot;&gt;triangulation&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="163" LastActivityDate="2019-01-12T01:34:12.253" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17986" PostTypeId="2" ParentId="17950" CreationDate="2019-01-12T01:50:21.087" Score="1" Body="&lt;p&gt;Since I'm late to the game, see &lt;a href=&quot;https://robotics.stackexchange.com/a/8622/163&quot;&gt;this question&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But you want the numerical values.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The transformation matrices you describe are .. strange. &#xA;&lt;a href=&quot;https://www.alanzucconi.com/2016/02/10/tranfsormation-matrix/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here is a great resource on how to set up and use transformation matrices&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which matches my understanding of: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$^jT_i=\begin{bmatrix}&#xA;^jR(\theta_i)&amp;amp;^jp_i\\&#xA;0&amp;amp;1&#xA;\end{bmatrix}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, for example,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;^1T_2=\begin{bmatrix}&#xA;\cos(\theta_2')&amp;amp;-\sin(\theta_2')&amp;amp;\ell_1\\&#xA;\sin(\theta_2')&amp;amp;\cos(\theta_2')&amp;amp;0\\&#xA;0&amp;amp;0&amp;amp;1&#xA;\end{bmatrix}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just sub in the values for the angles and lengths to find the matrices. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The position of the point is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$x=\ell_1\cos\theta_1 + \ell_2\cos(\pi/2-\theta_2+\theta_1)+x_1$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$y=\ell_1\sin\theta_1 + \ell_2\sin(\pi/2-\theta_2+\theta_1)+y_1$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where &lt;span class=&quot;math-container&quot;&gt;$\ell$&lt;/span&gt; is the length of each arm, and &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt; is the angles you describe. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can see this by setting the arm to be fully outstretched along the x-axis, and noting that the position of the end point must be &lt;span class=&quot;math-container&quot;&gt;$(\ell_1+\ell_2,0)$&lt;/span&gt;. Also, &lt;span class=&quot;math-container&quot;&gt;$\theta_2'$&lt;/span&gt; can be temporarily set to &lt;span class=&quot;math-container&quot;&gt;$\pi-\theta_2$&lt;/span&gt; to make this arrangement correspond to the &quot;laying along the x-axis&quot; one for ease of derivation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$^{o}p_3=^oT_1\cdot ^1T_2\cdot ^2p_3 +p_1$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;read as &quot;point three with respect to origin equals point of joint three with respect to joint 2, transformed from coordinate frame two to coordinate frame 1, then from coordinate frame 1 to original frame&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And then,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$^2p_3=(\ell_2,0)$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When solving the full system, remember to use homogeneous coordinates then, so you have to express the end point as &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$^2p_3=(\ell_2,0,1)$$&lt;/span&gt;&lt;/p&gt;&#xA;" OwnerUserId="163" LastEditorUserId="163" LastEditDate="2019-01-12T02:15:55.430" LastActivityDate="2019-01-12T02:15:55.430" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17988" PostTypeId="2" ParentId="13911" CreationDate="2019-01-12T16:22:39.797" Score="1" Body="&lt;p&gt;You have to enforce a prioritization between the two tasks at hand:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the &lt;strong&gt;primary task&lt;/strong&gt; is reaching in position;&lt;/li&gt;&#xA;&lt;li&gt;the &lt;strong&gt;secondary task&lt;/strong&gt; is reaching in orientation.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Finally, you can aggregate the two tasks using the null-space projection of the Jacobian.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In formulas:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{\theta}=J^\#\cdot\left(x_d-x\left(\theta\right)\right)+\left(I_n-J^\#\cdot J\right)\cdot g,&#xA;$$&lt;/span&gt;&#xA;where:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$\theta \in \mathbf{R}^n$&lt;/span&gt; is the vector of the &lt;span class=&quot;math-container&quot;&gt;$n$&lt;/span&gt; joints;&lt;/li&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$\dot{\theta} \in \mathbf{R}^n$&lt;/span&gt; is the resulting vector of joint velocities to be sent to the manipulator's actuators;&lt;/li&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$x\left(\theta\right)$&lt;/span&gt; is the Cartesian position of the tip of the manipulator in the joint configuration given by &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt;;&lt;/li&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$x_d$&lt;/span&gt; is the target tip position;&lt;/li&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$J \in \mathbf{R}^{3\times n}$&lt;/span&gt; is the Jacobian operator for what concerns only the position part of the kinematic map;&lt;/li&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$J^\# \in \mathbf{R}^{n\times 3}$&lt;/span&gt; is the &lt;strong&gt;DLS&lt;/strong&gt;-inverse of &lt;span class=&quot;math-container&quot;&gt;$J$&lt;/span&gt;;&lt;/li&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$I_n-J^\#\cdot J$&lt;/span&gt; is the null-space operator;&lt;/li&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$g \in \mathbf{R}^n$&lt;/span&gt; is the gradient of a suitable cost function that determines how far we are from the target orientation.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In this setting, the manipulator will be instructed to reach for the target position &lt;span class=&quot;math-container&quot;&gt;$x_d$&lt;/span&gt; while employing its redundancy (if there is any) to also comply with the secondary task without disrupting the primary task.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A very similar Q&amp;amp;A can be found &lt;a href=&quot;https://robotics.stackexchange.com/a/17971/6941&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Interestingly, we came up with an &lt;a href=&quot;https://github.com/vvv-school/assignment_inverse-kinematics&quot; rel=&quot;nofollow noreferrer&quot;&gt;assignment&lt;/a&gt; on this exact IK problem for a course we gave on Robotics, whose solution is given below in form of a patch:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;diff --git a/src/main.cpp b/src/main.cpp&#xA;index 7bccd6a..44330c3 100644&#xA;--- a/src/main.cpp&#xA;+++ b/src/main.cpp&#xA;@@ -33,6 +33,35 @@ class Controller : public RFModule&#xA;     Vector encoders;&#xA;     Vector target;&#xA;&#xA;+    // compute the 2D position of the tip of the manipulator&#xA;+    Vector forward_kinematics_position(const Vector &amp;amp;j) const&#xA;+    {&#xA;+        Vector ee(2);&#xA;+        ee[0]=link_length*(cos(j[0])+cos(j[0]+j[1])+cos(j[0]+j[1]+j[2]));&#xA;+        ee[1]=link_length*(sin(j[0])+sin(j[0]+j[1])+sin(j[0]+j[1]+j[2]));&#xA;+        return ee;&#xA;+    }&#xA;+&#xA;+    // compute the scalar orientation of the tip of the manipulator&#xA;+    double forward_kinematics_orientation(const Vector &amp;amp;j) const&#xA;+    {&#xA;+        return (j[0]+j[1]+j[2]);&#xA;+    }&#xA;+&#xA;+    // compute the Jacobian of the tip's position&#xA;+    Matrix jacobian_position(const Vector &amp;amp;j) const&#xA;+    {&#xA;+        Matrix J(2,3);&#xA;+        J(0,0)=-link_length*(sin(j[0])+sin(j[0]+j[1])+sin(j[0]+j[1]+j[2]));&#xA;+        J(0,1)=-link_length*(sin(j[0]+j[1])+sin(j[0]+j[1]+j[2]));&#xA;+        J(0,2)=-link_length*sin(j[0]+j[1]+j[2]);&#xA;+&#xA;+        J(1,0)=link_length*(cos(j[0])+cos(j[0]+j[1])+cos(j[0]+j[1]+j[2]));&#xA;+        J(1,1)=link_length*(cos(j[0]+j[1])+cos(j[0]+j[1]+j[2]));&#xA;+        J(1,2)=link_length*cos(j[0]+j[1]+j[2]);&#xA;+        return J;&#xA;+    }&#xA;+&#xA; public:&#xA;     bool configure(ResourceFinder &amp;amp;rf)override&#xA;     {&#xA;@@ -45,8 +74,9 @@ public:&#xA;         // init the encoder values of the 3 joints&#xA;         encoders=zeros(3);&#xA;&#xA;-        // init the target&#xA;-        target=zeros(3);&#xA;+        // init the target at the tip of the manipulator&#xA;+        target=forward_kinematics_position(encoders);&#xA;+        target.push_back(forward_kinematics_orientation(encoders));&#xA;&#xA;         return true;&#xA;     }&#xA;@@ -81,10 +111,23 @@ public:&#xA;         // retrieve the current target orientation&#xA;         double phi_d=target[2];&#xA;&#xA;+        // compute quantities for differential kinematics&#xA;+        Vector ee=forward_kinematics_position(encoders);&#xA;+        double phi=forward_kinematics_orientation(encoders);&#xA;+        Matrix J=jacobian_position(encoders);&#xA;+        Vector err=ee_d-ee;&#xA;+&#xA;         Vector &amp;amp;vel=portMotors.prepare();&#xA;-        vel=zeros(3);&#xA;&#xA;-        // FILL IN THE CODE&#xA;+        // resolve the primary task&#xA;+        double k1=10.0;&#xA;+        Matrix Jsharp=J.transposed()*pinv(J*J.transposed()+k1*k1*eye(2,2));&#xA;+&#xA;+        // resolve the secondary task&#xA;+        Vector g=2.0*(phi_d-phi)*ones(3);&#xA;+&#xA;+        // aggregate tasks using null-space projection&#xA;+        vel=Jsharp*err+(eye(3,3)-Jsharp*J)*g;&#xA;&#xA;         // deliver the computed velocities to the actuators&#xA;         portMotors.writeStrict();&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="6941" LastActivityDate="2019-01-12T16:22:39.797" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17989" PostTypeId="2" ParentId="17950" CreationDate="2019-01-12T20:25:38.013" Score="1" Body="&lt;p&gt;The general principle of multiplying matrices together is correct, but the matrices themselves are you use are not correct.  They appear to be transposed and for kinematics there is no &quot;Scale&quot; parameter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another resource you might find useful is this &lt;a href=&quot;https://robotacademy.net.au/masterclass/robotic-arms-and-forward-kinematics/&quot; rel=&quot;nofollow noreferrer&quot;&gt;masterclass on robot arm kinematics&lt;/a&gt;.  There's also a &lt;a href=&quot;https://robotacademy.net.au/masterclass/3d-geometry/&quot; rel=&quot;nofollow noreferrer&quot;&gt;master class on 3D geometry&lt;/a&gt; which might help with your understanding of homogeneous transformation matrices.  &lt;/p&gt;&#xA;" OwnerUserId="21223" LastActivityDate="2019-01-12T20:25:38.013" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17990" PostTypeId="2" ParentId="16374" CreationDate="2019-01-12T20:41:44.427" Score="0" Body="&lt;p&gt;I have no problem with your answer #3, and it could be argued that the question is not sufficiently precise.  It depends what you consider the &quot;inputs&quot; to be.  At the motor control level, the hex rotor has 6 motors so there are 6 motor speeds that can be independently set.  However hexrotors often use the same kind of control handset as a quad rotor, with sticks that control motion:up/down, roll, pitch, yaw.  Considered at this level there are 4 &quot;inputs&quot; which are mapped to the 6 motor speeds.  This introduces constraints and the 6 motor speeds are no longer independent.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The vehicle itself is a rigid-body moving in 3D space so it has 6 degrees of freedom.  Assuming that all propellor axes are parallel, only 4 of those degrees of freedom are directly accessible, just like for a quad rotor.   Translational motion is only accessible as a &lt;em&gt;consequence&lt;/em&gt; of roll/pitch motion.&lt;/p&gt;&#xA;" OwnerUserId="21223" LastActivityDate="2019-01-12T20:41:44.427" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17991" PostTypeId="2" ParentId="11156" CreationDate="2019-01-12T23:59:13.227" Score="2" Body="&lt;h1&gt;Use bearings-only localization to model camera informativeness, and simulate measurements with zero noise (e.g., no innovation).&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;For a variety of reasons, this is actually theoretically sound way of estimating the informativeness of a path. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are many &quot;measurement free&quot; informative-ness metrics, like the &lt;a href=&quot;http://mathworld.wolfram.com/FisherInformationMatrix.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Fisher Information Matrix&lt;/a&gt;. All you need are the positions of the robot and the positions of the landmarks in the map to determine how much information about the robot's position would be obtained by measuring the landmark locations. (Or visa-versa, the innovation from measurements is applied to both target and robot (it's SLAM right?), so the same metric works for both).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd start with a bearing sensor, as that's a good, well accepted model of a vision sensor. Figure out the &quot;noise&quot; on the bearing measurements by assuming a few pixels of error in locating features in the world.  Let the state of the system be the position of the robot plus its uncertainty, and then sample paths (as you suggest). From each position in the sampled path, I'd recompute the &lt;em&gt;predicted&lt;/em&gt; uncertainty using the FIM. This is not hard to do, just assume no error in the measurements (i.e., there will be no &quot;innovation&quot; about the robot's belief, but you will still experience a drop in uncertainty represented by shrinking covariance in the robot's position estimate. I would not update the locations or uncertainties of the landmarks, just to simplify the problem. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a fairly well understood approach from what I recall in my last review of this literature, but don't take my word for it (review yourself!). At least this should form a baseline approach that is easy to simulate. Let's use the power of literature. You might peruse &lt;a href=&quot;https://www.ri.cmu.edu/pub_files/pub4/deans_matthew_2005_1/deans_matthew_2005_1.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this thesis&lt;/a&gt; for the set up and equations.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Summarizing&lt;/h1&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Form the state vector &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; which is the position (and orientation if you care) of the robot, and uncertainty in those position elements &lt;span class=&quot;math-container&quot;&gt;$\Sigma$&lt;/span&gt;. &lt;/li&gt;&#xA;&lt;li&gt;Use an RRT, discrete graph planner (dijkstra / A*), or grid search (A* probably), but at every &quot;step&quot; of the sampled trajectory, recompute &lt;span class=&quot;math-container&quot;&gt;$\Sigma_i$&lt;/span&gt; using the standard EKF update equations. &lt;/li&gt;&#xA;&lt;li&gt;Let the &quot;cost&quot; of the trajectory be some convex combination of progress towards goal and the inverse of the covariance (e.g., the &lt;a href=&quot;https://en.wikipedia.org/wiki/Fisher_information&quot; rel=&quot;nofollow noreferrer&quot;&gt;information matrix&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;h1&gt;Some subtleties&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Use the smallest state vector that makes sense. If you can assume the robot can point the camera independently of motion, or has multiple cameras, then ignore orientation and just track position. I'll proceed in 2D positions only.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will have to derive the linearized system, but can borrow it from the thesis above. &lt;em&gt;make sure to not bother with simulating measurements&lt;/em&gt; (e.g., if you only do EKF updates with &quot;simulated measurements&quot;, then assume the measurements are true and without noise. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Critically, this simplifies the planning problem as your state doesn't change except for the uncertainty and planned motion. &lt;a href=&quot;https://en.wikipedia.org/wiki/Extended_Kalman_filter&quot; rel=&quot;nofollow noreferrer&quot;&gt;Check the equations here for EKF&lt;/a&gt;, and note that the only two equations that are relevant to calculate the new covariance are &#xA;&lt;span class=&quot;math-container&quot;&gt;$$P_{i|i-1}=F^T_iP_{i-1|i-1}F_i+Q$$&lt;/span&gt; &#xA;and &lt;span class=&quot;math-container&quot;&gt;$$P=P-PH^T  (H P H^T + R)^{-1}  HP$$&lt;/span&gt; ... (I expanded the kalman gain into the last equation).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If we apply &lt;a href=&quot;https://en.wikipedia.org/wiki/Woodbury_matrix_identity&quot; rel=&quot;nofollow noreferrer&quot;&gt;Woodbury matrix identity&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;we simplify that second one to &lt;span class=&quot;math-container&quot;&gt;$$P^{-1}=P^{-1}+H^TR^{-1}H$$&lt;/span&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;We're done. You have a nice informativeness measure over the &lt;span class=&quot;math-container&quot;&gt;$n$&lt;/span&gt; steps of the trajectory as,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$I=\sum_{i=1}^n H_i^TR^{-1}H_i$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where &lt;span class=&quot;math-container&quot;&gt;$R$&lt;/span&gt; is the measurement noise (e.g., the bearing error of measurement to each landmark), for each time step in your trajectory. Since we are looking at &lt;em&gt;information&lt;/em&gt; (inverse of covariance) we want to &lt;em&gt;maximize&lt;/em&gt; the trace, determinant, or something else of &lt;span class=&quot;math-container&quot;&gt;$\sum_{i=1}^n H_i^TR^{-1}H_i$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, what's &lt;span class=&quot;math-container&quot;&gt;$H$&lt;/span&gt;? Well it's the &lt;a href=&quot;https://en.wikipedia.org/wiki/Jacobian_matrix_and_determinant&quot; rel=&quot;nofollow noreferrer&quot;&gt;Jacobian&lt;/a&gt; of the measurement function with respect to the robot's location. That is, &lt;span class=&quot;math-container&quot;&gt;$H$&lt;/span&gt; is of size &lt;span class=&quot;math-container&quot;&gt;$nx2$&lt;/span&gt;, since you have &lt;span class=&quot;math-container&quot;&gt;$n$&lt;/span&gt; landmarks (&lt;span class=&quot;math-container&quot;&gt;$n$&lt;/span&gt; measurement functions), and &lt;span class=&quot;math-container&quot;&gt;$2$&lt;/span&gt; state elements of the robot: x,y. &lt;span class=&quot;math-container&quot;&gt;$R$&lt;/span&gt; is of size &lt;span class=&quot;math-container&quot;&gt;$n\times n$&lt;/span&gt;, where I would set it to &lt;span class=&quot;math-container&quot;&gt;$\sigma I_{n\times n}$&lt;/span&gt; for some pretend value of &lt;span class=&quot;math-container&quot;&gt;$\sigma$&lt;/span&gt;,(the actual uncertainty doesn't matter, it's all the same constant.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What's the measurement equation? It's &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$\tan^{-1}\frac{y_t-y_r}{x_t-x_r}$$&lt;/span&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;for target &lt;span class=&quot;math-container&quot;&gt;$t$&lt;/span&gt; and robot position &lt;span class=&quot;math-container&quot;&gt;$r$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Unwinding the recursion. I'd proceed as follows:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Write a path search algorithm that finds its way without considering uncertainty.&lt;/li&gt;&#xA;&lt;li&gt;Derive &lt;span class=&quot;math-container&quot;&gt;$H$&lt;/span&gt;, or look it up in any bearings localization paper. &lt;/li&gt;&#xA;&lt;li&gt;To determine the &quot;goodness&quot; of a path for use in the search algorithm, add in &lt;span class=&quot;math-container&quot;&gt;$trace(H^TRH)$&lt;/span&gt; for each pose along the path. &lt;/li&gt;&#xA;&lt;li&gt;Notice that the result matches the FIM of the trajectory (exercise left to the reader), and you have correctly and in a theoretically sound way determined the most informative trajectory.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="163" LastEditorUserId="163" LastEditDate="2019-01-15T05:35:49.710" LastActivityDate="2019-01-15T05:35:49.710" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17992" PostTypeId="2" ParentId="17950" CreationDate="2019-01-13T00:23:19.983" Score="0" Body="&lt;p&gt;While the other answers have already provided the analytical solution and numerical approach thereafter, I would mention that you need to have coordinates for point 1 with respect to the origin. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Theta 1 won't suffice to know the transformation to the origin. Always remember that a joint angle only affects the position/orientation of the child links and thereafter. You need to know the relation between the origin and point 1 to obtain transforms with respect to the former.  &lt;/p&gt;&#xA;" OwnerUserId="18572" LastActivityDate="2019-01-13T00:23:19.983" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17993" PostTypeId="2" ParentId="17977" CreationDate="2019-01-13T01:16:11.483" Score="2" Body="&lt;p&gt;I think this is an eigenvalue problem because:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The &lt;a href=&quot;https://physics.stackexchange.com/a/95742&quot;&gt;mass matrix can be assumed to be PSD&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;The induced norm of a PSD matrix is &lt;a href=&quot;https://mathoverflow.net/a/53291/45320&quot;&gt;see here&lt;/a&gt; &lt;span class=&quot;math-container&quot;&gt;$\sqrt{\lambda_{max}(A^TA)}$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;So for anything but the smallest matrices, you should use iterative methods to determine the norm (i.e., there is no closed-form solution).&lt;/p&gt;&#xA;" OwnerUserId="163" LastActivityDate="2019-01-13T01:16:11.483" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17994" PostTypeId="2" ParentId="16551" CreationDate="2019-01-13T01:22:11.230" Score="1" Body="&lt;p&gt;There are probably some very strong theoretical results about the sampling frequency required to control a system. In the absence of a better answer, I have:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;When considering sample rate from a scientific or mathematical perspective, the guidelines are a bit more involved and beyond the scope of this blog post. Still, it’s generally accepted best-practice for the sample rate to be based on frequency or time-based components of the process data. Basic formulas propose the use of data that is either 5-10 times faster than the Process Time Constant or 3-5 times faster than the Process Dead-Time.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There's a couple of links in the quote to define &lt;a href=&quot;https://controlstation.com/process-time-constant-calculate-time-constant-process/&quot; rel=&quot;nofollow noreferrer&quot;&gt;process time constant&lt;/a&gt; and &lt;a href=&quot;https://controlstation.com/calculate-dead-time/&quot; rel=&quot;nofollow noreferrer&quot;&gt;process dead time&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In general, faster is probably better. If you state significantly changes on the order of milliseconds, then you should provide control updates faster than that. In my experience (ground and maritime robotics), 10Hz has usually been sufficient. &lt;/p&gt;&#xA;" OwnerUserId="163" LastEditorUserId="163" LastEditDate="2019-01-13T01:57:50.623" LastActivityDate="2019-01-13T01:57:50.623" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17995" PostTypeId="1" CreationDate="2019-01-13T02:07:27.227" Score="1" ViewCount="112" Body="&lt;p&gt;I have been witnessing some bizarre behaviour with my very simple node.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a custom message that contains &lt;code&gt;uint8[]&lt;/code&gt; type (it's 8 elements long). I have a subscriber that subscribes to a topic of the custom message and stores it in a global variable:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;uint16* leddar_distance_cm_1 = NULL;&#xA;&#xA;void leddarCallback(const perception_msgs::Leddar8::ConstPtr&amp;amp; msg) {&#xA;  if (msg-&amp;gt;leddar_id == 1) {&#xA;      leddar_distance_cm_1 = const_cast&amp;lt;uint16_t*&amp;gt;(&amp;amp;(msg-&amp;gt;distance[0]));&#xA;  }&#xA;&#xA;  for (uint8_t i = 0; i &amp;lt; 8; i++) {&#xA;      ROS_INFO(&quot;VALUE: [%d]&quot;, leddar_distance_cm_1[i]);&#xA;  }&#xA;}&#xA;&#xA;int main(int argc, char** argv) {&#xA;  ros::init(argc, argv, &quot;collision_avoidance_node&quot;);&#xA;  ros::NodeHandle n;&#xA;&#xA;  ros::Subscriber leddar_sub = n.subscribe(&quot;perception/leddars&quot;, 1000, leddarCallback);&#xA;&#xA;  ros::spin();&#xA;&#xA;  return 0;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I then have 2 publishers publishing onto that topic using rostopic pub. When I try to print the stored array from the callback I get this (bottom right window):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/C2OwQ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/C2OwQ.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can see the two publishers seem to be interfering with each other and somehow overwritting leddar_distance_cm_1   pointer repeatedly. This doesn't happen with any non-pointer types from the message such as char or int.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I even tried creating 2 different subscribers for each publisher, same issue! As if both publishers are overwriting the same memory address (which they in fact are). Does this have anything to do with queues? I have a feeling that I am not reading the array correctly. I have spent over 8 hours looking at this and I can't figure out what the problem is, if there is an obvious mistake could someone please tell me what it is?&lt;/p&gt;&#xA;" OwnerUserId="21789" LastActivityDate="2020-06-07T11:05:20.550" Title="Subscriber to array type overwriting data from different publishers!" Tags="&lt;ros&gt;&lt;c++&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="17997" PostTypeId="1" CreationDate="2019-01-13T14:42:32.960" Score="0" ViewCount="81" Body="&lt;p&gt;I hope someone can help me:&#xA;Given two autonomously driving cars, I want to make sure they keep a constant distance to each other. For this purpose, I want to design a Kalmanfilter. Typically, the first step for designing such a filter is to set up a state vector. I am given two robots already. They have an ultrasonic-sensor to measure distance and an encoder to measure velocity. However, what is not clear to me is: What would be the proper state-vector for my Kalmanfilter equations? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have troubles understanding this, because, from the tutorials I have read, I got the impression a Kalmanfilter always combines at least two Gaussian distributed measurements. In order to compute a new distance for example, I would have to compute ... I don't know, maybe this:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/z1BFk.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/z1BFk.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does somebody know?&lt;/p&gt;&#xA;" OwnerUserId="21966" LastActivityDate="2020-10-07T12:07:25.967" Title="State-vector for distance measurement between two autonomous cars" Tags="&lt;control&gt;&lt;kalman-filter&gt;&lt;autonomous-car&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="17998" PostTypeId="1" AcceptedAnswerId="18001" CreationDate="2019-01-13T19:54:17.373" Score="1" ViewCount="109" Body="&lt;p&gt;The micromouse challenge was done since the 1980 in the context of university driven robotics research. The Robocup challenge has a similar approach and provides a competition for university students. Today, Robocup soccer is a regularly event which brings robotics to the mainstream. But there is small problem. Both competitions are not attended by amateurs, that means by non-students. The main reason is, that the task of controlling a team of Nao humanoid robots is difficult and costly at the same time. That means, the Nao robot is too expensive for amateurs and they are not overwhelmed by implementing vision, motor control and self-localization at the same time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other a hand, a robotics competition is a great opportunity to learn from mistakes. The same task is done by others and if strategy A is working it can be copied. A robot competition is a great opportunity to learn something and in most cases it helps to form a community.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is: are some entry level robotics competitions available which have to do with reaching objective goals against other participants which are open for amateurs? Open means, that the robot is cheap and the task isn't very hard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Location&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Are you looking for competitions anywhere in particular?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;A competition can be held in real life, for example in a city. Or it can run online-only, that means the participants have to send their submission over a website from anywhere. I'm not sure, what the better idea is. offline competitions have the advantage, that a video can made from it, while online challenges have a lower price tag because the travel to the location isn't necessary.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastEditorUserId="14283" LastEditDate="2019-01-14T09:45:18.037" LastActivityDate="2019-03-16T17:03:20.747" Title="Are robotics competitions for beginners available?" Tags="&lt;beginner&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="17999" PostTypeId="2" ParentId="17995" CreationDate="2019-01-14T07:29:19.607" Score="1" Body="&lt;p&gt;The problem was that I was pointing a pointer to a memory address that gets free'd after the callback is executed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead of using C style arrays I moved onto vectors, where leddar_distance_cm1 is &lt;code&gt;std::vector&amp;lt;uint16_t leddar_distance_cm1(array_size, starting_value)&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When using callbacks always copy rather use references or pointers, unless you know your object's lifecycle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you still want to use C array, &lt;code&gt;use std::copy&lt;/code&gt; or &lt;code&gt;memcpy&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="21789" LastActivityDate="2019-01-14T07:29:19.607" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18001" PostTypeId="2" ParentId="17998" CreationDate="2019-01-14T07:58:23.177" Score="1" Body="&lt;p&gt;There are some competitions for smaller teams (or individuals), mostly centered around a small RPi-Based robot:&#xA;&lt;a href=&quot;https://www.formulapi.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;FormulaPi&lt;/a&gt; if you are interested in Computer Vision and autonomous cars, or &#xA;&lt;a href=&quot;https://piwars.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;PiWars&lt;/a&gt; for a larger variety of tasks (including teleoperation, so you don't need a fully autonomous robot).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So searching for &quot;RPi robot competition&quot; could be a good start for you.&lt;/p&gt;&#xA;" OwnerUserId="23196" LastActivityDate="2019-01-14T07:58:23.177" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18002" PostTypeId="2" ParentId="17997" CreationDate="2019-01-14T08:49:12.553" Score="0" Body="&lt;p&gt;Kalman filter can be used to estimate the position of each car independently since there is no communication between two cars. In that case the most suitable parameters for the state vector is [Px Py &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt;]. &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt; represents the heading direction. You can also include the X and Y velocities according to your requirement. In order to maintain a constant distance you can get the euclidean distance between the X and Y states of the two kalman filters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not sure what distance you are trying measure using the ultrasonic sensor.&lt;/p&gt;&#xA;" OwnerUserId="21353" LastActivityDate="2019-01-14T08:49:12.553" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18003" PostTypeId="2" ParentId="17998" CreationDate="2019-01-14T17:10:02.163" Score="0" Body="&lt;p&gt;This is more of a hobbyists' competition, but you could take a look at it.&#xA;&lt;a href=&quot;https://www.sparkfun.com/avc_2018&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.sparkfun.com/avc_2018&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15335" LastActivityDate="2019-01-14T17:10:02.163" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18004" PostTypeId="2" ParentId="17969" CreationDate="2019-01-14T18:32:57.257" Score="0" Body="&lt;p&gt;/cmd_vel and /cm_vel_mux are very often interchangeably used where the latter is a multiplexer superimposed to enforce priority in execution. Obviously, if the robot is moving, there has to be a navigation topic with data being published. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should check the /cmd/vel_mux/input/navi topic - it should be the one that has a Twist message to it and makes the Turtlebot move.&lt;/p&gt;&#xA;" OwnerUserId="18572" LastActivityDate="2019-01-14T18:32:57.257" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18007" PostTypeId="1" CreationDate="2019-01-15T01:44:14.707" Score="1" ViewCount="45" Body="&lt;p&gt;In picture one I have shown a robot arm (green) rotating to pick up a box, using a fulcrum (red). The arm after rotating is shown with black rectangle. The vertical arm on the left is attached to the horizontal green arm and goes down to make the green arm rotate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In picture two, I have shown a robot arm which goes up and down to pick up the box, connected to a Revolute shoulder on the left which is not shown in the picture.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have tried to modify the second picture, so I have created the first picture. I wanted to use fulcrum and related physics theorems to make the picking up easier for the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can you please tell me if I am making mistake and this is not a way to modify the arm and to make picking up easier? Does the red object act as a fulcrum?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/IrxJl.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/IrxJl.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/4X486.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4X486.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="16424" LastActivityDate="2019-01-16T15:15:18.623" Title="Does the red object act as a fulcrum (as explained bellow) to make picking up easier?" Tags="&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18008" PostTypeId="1" CreationDate="2019-01-15T03:38:30.427" Score="1" ViewCount="40" Body="&lt;p&gt;I am new to robotics and working with a wheeled mobile robot with one Kinect mounted on top of it currently. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The robot knows its position in the environment via some means.&#xA;I encounter one problem. For example there is one table, and The Kinect is&#xA;expected to guide the robot to one specific side of the table. The problem is known as  pose estimation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;By browsing the internet, I guess that hand-eye calibration may be required. However, most materials about hand-eye calibration is about robotic arms. &#xA;I am not sure whether hand-eye calibration is needed for wheeled mobile robots.&#xA;I can't find much information about hand-eye calibration for wheeled mobile robots.&#xA;Any help are appreciated.&lt;/p&gt;&#xA;" OwnerUserId="15460" LastActivityDate="2019-01-15T03:38:30.427" Title="hand-eye calibration for wheeled mobile robots" Tags="&lt;wheeled-robot&gt;&lt;cameras&gt;&lt;calibration&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18009" PostTypeId="2" ParentId="2748" CreationDate="2019-01-15T06:53:50.153" Score="1" Body="&lt;p&gt;Let's take a look at the physics side of things. Ultrasonic (acoustic) and lidar (laser) rangefinder sensors calculate the distance based on time-of-flight (tof). The time taken for a burst of sound waves to hit an obstacle and reflect back to the source indicates how far away the obstacle is from the source. The propagation speed of sound is &lt;span class=&quot;math-container&quot;&gt;$340$&lt;/span&gt; m/s whereas for light it is &lt;span class=&quot;math-container&quot;&gt;$3 \times 10^8$&lt;/span&gt; m/s. In other words, the time it takes for an ultrasound wave to travel &lt;span class=&quot;math-container&quot;&gt;$1$&lt;/span&gt; m is approximately &lt;span class=&quot;math-container&quot;&gt;$3$&lt;/span&gt; ms, as opposed to &lt;span class=&quot;math-container&quot;&gt;$3.3$&lt;/span&gt; ns for light and radio waves.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The equation to calculate the tof duration is: &lt;span class=&quot;math-container&quot;&gt;$$ Duration (s) = Distance (m) \times \frac{2}{Propagation Speed (m/s)}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and the directivity pattern of &lt;span class=&quot;math-container&quot;&gt;$40$&lt;/span&gt; kHz sound waves looks like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/EkjOr.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/EkjOr.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;with this kind of directivity pattern, if the sensor is mounted on a car, there will be a lot of reflection from the ground, which will cancel out the original signal. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/dtQKm.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dtQKm.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The good news is as the frequency increases the directivity pattern shrinks, increasing the range. But this is no way going to give you &lt;span class=&quot;math-container&quot;&gt;$50$&lt;/span&gt; m. Even if you could do that, due to the relatively slow propagation speed of sound, you had to take the car velocity into account while calculating the distance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is why autonomous vehicles use ultrasonic sensor for park assistance and lidar sensors for collision avoidance / pedestrian detection and long-range radar for adaptive cruise control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/s2NQz.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/s2NQz.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18352" LastEditorUserId="18352" LastEditDate="2019-01-15T21:01:38.197" LastActivityDate="2019-01-15T21:01:38.197" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18010" PostTypeId="2" ParentId="16420" CreationDate="2019-01-15T14:50:39.767" Score="1" Body="&lt;p&gt;No, nothing is &quot;necessary&quot;.  You can estimate the pose of the robot perfectly legitimately using only IMU data. You can also estimate it perfectly legitimately using only image data. But it won't be &lt;em&gt;that&lt;/em&gt; good, there will be errors in any sensor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Localization is not a decision problem. It can be tempting to &quot;switch&quot; between sensors and think really hard about when one sensor is better than another. The community has determined that is the wrong way to do business. It's much better (the story goes) to use all sensors merged together. The community has agreed since the days of Apollo that an average of all position estimates, weighted by uncertainty, is best.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Almost any practitioner will tell you the best way to localize a robot using IMU and vision is V+INS SLAM, of which there are several open-source implementations available. Currently ORB-SLAM or MAPLAB is very popular (I'm told).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may also want to peruse &lt;a href=&quot;https://robotics.stackexchange.com/q/277/163&quot;&gt;this q/a post&lt;/a&gt; or  (disclaimer, I said a similar thing there).&lt;/p&gt;&#xA;" OwnerUserId="163" LastActivityDate="2019-01-15T14:50:39.767" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18011" PostTypeId="2" ParentId="6895" CreationDate="2019-01-15T15:13:17.967" Score="1" Body="&lt;h1&gt;Your sensor does not measure state&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Kinect does not provide any &quot;measurements&quot; of state. It scans the environment and provides a point cloud. To use this to localize a robot, you must compare currently-sensed point clouds to past-sensed point clouds to provide a &quot;correction&quot; term. ICP (as mentioned) will provide such a &quot;correction&quot; term. That correction is the &quot;innovation&quot; in the EKF/EIF. To calculate the covariance / information matrix, you need, at minimum, the variance (if one-dimensional) or covariance (if 2-or-more-dimensional) of the innovation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But you don't want to do that, actually. You want to do pose-graph optimization to smooth the maps. For that, you simply need to provide a state estimate of the position of the kinect sensor at the time of each scan. Imagine an interative process like this:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Take the first scan, save it with sensor position &lt;span class=&quot;math-container&quot;&gt;$x_0=0,0$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;li&gt;Take another scan, and use ICP to figure out how the sensor has moved between scans &lt;span class=&quot;math-container&quot;&gt;$\delta x$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;li&gt;Save that scan, and set &lt;span class=&quot;math-container&quot;&gt;$x_1=\delta x+x_{0}$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Now, repeat 2 and 3, taking scans, calculating &lt;span class=&quot;math-container&quot;&gt;$\delta_x$&lt;/span&gt; and setting &lt;span class=&quot;math-container&quot;&gt;$x_i=\delta x + x_{i-1}$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You have a pose graph / set of key frames. The positions are the poses, and the features in the environment are the ... features. Pose graph optimization requires at minimum these two things plus some measure of uncertainty of the poses. You can easily make up these values to get a working implementation (e.g., &lt;span class=&quot;math-container&quot;&gt;$\Sigma_i=c\cdot I$&lt;/span&gt;). Then, the information matrix is .... &lt;span class=&quot;math-container&quot;&gt;$\frac{1}{c}I$&lt;/span&gt;. Is this OK? well, the only better way to do it is to calculate the variance of the innovation above, and somehow &quot;calibrate&quot; the &quot;position sensor&quot; that is given by the ICP scan registration process.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Repeating again&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The optimization problem is to find the correct set of &lt;span class=&quot;math-container&quot;&gt;$\delta x$&lt;/span&gt; values for all &lt;span class=&quot;math-container&quot;&gt;$i=1...n$&lt;/span&gt;, but, you already did that in 2-3. So your pose graph optimization &lt;em&gt;will not do anything new unless you iteratively match all pairwise scans and update the correction factors&lt;/em&gt;. This will only work if subsequent scans overlap scans from more than one step in the prior set of scans ... e.g., if you have a loop closure. &lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Repeating another way&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Ultimately, the &quot;right&quot; way to do this is to form a giant optimization problem where you find the set of all &lt;span class=&quot;math-container&quot;&gt;$\delta x$&lt;/span&gt; to minimize the error in the scan matches, subject to not straying &quot;too far&quot; from the initial pose estimates. Here &quot;too far&quot; is encoded by your &quot;made up&quot; uncertainty on the poses, and you'll have to tune how much you weight priors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://robotics.stackexchange.com/a/799/163&quot;&gt;you may find this restatement of the above details better&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="163" LastActivityDate="2019-01-15T15:13:17.967" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18012" PostTypeId="1" CreationDate="2019-01-15T18:58:40.573" Score="3" ViewCount="324" Body="&lt;p&gt;I always assumed that obstacle avoidance refers to general prevention of collisions with any kind of obstacles, even without considering a goal for the decision how to execute an avoidance maneuver. Is that correct?&lt;/p&gt;&#xA;" OwnerUserId="21294" LastEditorUserId="9720" LastEditDate="2019-01-18T15:26:56.177" LastActivityDate="2019-01-20T19:35:42.697" Title="What is the difference between Obstacle Avoidance and Dynamic Path Planning?" Tags="&lt;motion-planning&gt;&lt;path-planning&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18013" PostTypeId="1" CreationDate="2019-01-16T02:05:04.973" Score="1" ViewCount="69" Body="&lt;p&gt;I want my robot manipulator to follow a user-defined path. Based on the waypoints given as input and the velocity and acceleration limits of the joint motors, I generate a trajectory.&#xA;At every time step (say 2ms), I send the joint motor controller the reference position, velocity and acceleration. But my robot's joint motors are not able to keep up with the reference command. &#xA;How can I update my generated trajectory, so as to ensure the robot moves along the user-defined path?&#xA;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="10435" LastActivityDate="2019-02-16T05:42:34.350" Title="Trajectory following- What if the robot joint motor are not able to keep up with the generated trajectory?" Tags="&lt;robotic-arm&gt;&lt;motion-planning&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18014" PostTypeId="1" CreationDate="2019-01-16T03:06:14.820" Score="1" ViewCount="446" Body="&lt;p&gt;In Photography SE I've just asked &lt;a href=&quot;https://photo.stackexchange.com/q/104325/50110&quot;&gt;LIDAR burnout; ways to check for damaging infrared lasers before shooting besides looking for posted warnings?&lt;/a&gt; and discussed a camera that was damaged by a self-driving car's LIDAR system at the recent CES show.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The article linked there mentions the powerful &quot;&lt;a href=&quot;https://en.wikipedia.org/wiki/Fiber_laser&quot; rel=&quot;nofollow noreferrer&quot;&gt;fiber laser&lt;/a&gt;&quot; used by that car's LIDAR system. For those I normally think of infrared wavelengths around 1500 or 1600 nm used in communications, but for simple semiconductor lasers based on III-V material the wavelengths are often around 800 or 900 nm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is just from personal memory. I'm wondering if I've got it right, and/or if there are other sources for common laser wavelengths used in obstacle detection and ranging.&lt;/p&gt;&#xA;" OwnerUserId="17872" LastEditorUserId="17872" LastEditDate="2019-01-16T03:21:11.650" LastActivityDate="2019-01-17T06:14:10.373" Title="What wavelengths are most commonly used in laser-scanners and LIDAR systems?" Tags="&lt;lidar&gt;&lt;laser&gt;&lt;rangefinder&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18015" PostTypeId="2" ParentId="18013" CreationDate="2019-01-16T04:31:38.713" Score="2" Body="&lt;p&gt;Great question!&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;In practice, you don't specify a dense trajectory for the arm necessarily&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Instead, you should move the arm between &quot;safe&quot; positions before it moves to the point where it interacts with parts. Most robotic arms are designed to be controlled in this way. If you are trying to control the exact path of the end effector, then you are trying to do essentially velocity control, which requires force-torque control of the arm (usually). That's a harder optimization problem and still requires a good model as described below.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;But trajectory control is more fun&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;We can add a lot of similar situations to this: What if I'm slightly wrong about the model of how the manipulator moves between waypoints, and the trajectory is not follow-able? Or what if the world changes slightly and my trajectory is now invalid? etc, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At a very low technical level, you should change the time step in your trajectory planning to accommodate motions the arm can actually follow. This means allowing sufficient dwell time at each waypoint to ensure the arm can arrive at the points. For &quot;dense&quot; trajectories with lots of waypoints, this is hard. Without a near-perfect model of how the arm converges to a point, how can you predict how long it will take to reach a point when planning a trajectory?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Usually, at the highest level, you can just replan the trajectory based on the current state of the world. Then, you issue the &quot;next&quot; waypoint as the carrot for the arm to follow. This is called &lt;a href=&quot;http://www.eng.newcastle.edu.au/eecs/cdsc/books/cce/Slides/RecedingHorizonControl.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;receding horizon control&lt;/a&gt;, which is a common way to implement &lt;a href=&quot;https://en.wikipedia.org/wiki/Model_predictive_control&quot; rel=&quot;nofollow noreferrer&quot;&gt;model-predictive control&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="163" LastActivityDate="2019-01-16T04:31:38.713" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18016" PostTypeId="1" AcceptedAnswerId="18023" CreationDate="2019-01-16T07:48:50.757" Score="0" ViewCount="88" Body="&lt;p&gt;i have one robot, i have to get the initial location of that robot. then when we move the robot from that location, and when we give the command like &quot;HOME&quot; then it should go that initial location. but i don't understand how to get initial location   of that robot.   &lt;/p&gt;&#xA;" OwnerUserId="22079" LastActivityDate="2019-01-16T16:23:38.667" Title="How to get starting location of robot using IMU Sensor (without using gps)" Tags="&lt;mobile-robot&gt;&lt;imu&gt;&lt;navigation&gt;&lt;first-robotics&gt;&lt;dead-reckoning&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18017" PostTypeId="2" ParentId="17997" CreationDate="2019-01-16T10:58:55.003" Score="1" Body="&lt;p&gt;A Kalman filter can combine multiple sensors, but can also recover information of other states you do not measure directly. For example if you only measure the position the Kalman filter can also obtain a good estimate of the velocity. A naive way for this would be to differentiate the position. However, when the position is subjected to noise, differentiating it will amplify this noise a lot. In such a case a Kalman filter would be able to get a much better estimate of the full state. It does this by trusting more on the model you have of your system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do have to note that in order for the Kalman filter to be able to estimate the full state does require that the sensors you have make your system &lt;a href=&quot;https://en.wikipedia.org/wiki/Observability&quot; rel=&quot;nofollow noreferrer&quot;&gt;observable&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="1487" LastActivityDate="2019-01-16T10:58:55.003" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18021" PostTypeId="2" ParentId="18007" CreationDate="2019-01-16T15:15:18.623" Score="1" Body="&lt;p&gt;The red object looks like a fulcrum in that it provides the pivot point for the green bar. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the point of a lever + fulcrum set is to generate a &lt;a href=&quot;https://en.wikipedia.org/wiki/Mechanical_advantage&quot; rel=&quot;nofollow noreferrer&quot;&gt;mechanical advantage&lt;/a&gt;. Mechanical advantage is essentially &quot;trading&quot; a displacement for a force. If the output of the lever moves half as far as the input when rotated then it generates twice the force/torque. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your diagram, it looks like the middle of the green bar is on your fulcrum, though, so it's basically the same motion on either end, which means you're looking at a 1:1 force difference.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That is, you're not getting any more force out of your lever than you're putting in. This might be advantageous if you can only orient your actuator in a particular way, but otherwise this doesn't seem to be doing much for you. You'd want more of the green bar on the actuator side and less above the load to get a force advantage. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2019-01-16T15:15:18.623" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="18022" PostTypeId="2" ParentId="18016" CreationDate="2019-01-16T16:01:21.147" Score="0" Body="&lt;p&gt;An IMU alone is not sufficient to get position and is exactly why you use it in combination with a sensor that measures position, like a GPS. Even if you manually give it an initial position, the IMU is going to drift in position unless calibrated often. &lt;/p&gt;&#xA;" OwnerUserId="20892" LastActivityDate="2019-01-16T16:01:21.147" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18023" PostTypeId="2" ParentId="18016" CreationDate="2019-01-16T16:23:38.667" Score="1" Body="&lt;p&gt;An IMU gives you linear acceleration and rotational speed. It doesn't give a position. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can &lt;em&gt;integrate&lt;/em&gt; the output of an IMU to get a linear position and angular orientation (the &lt;em&gt;pose&lt;/em&gt;), but you need to choose initial speeds and positions. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typically, these choices are zero. If you decided to choose zero for your initial/default pose, then returning &quot;home&quot; just means trying to get those values to go back to zero again. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2019-01-16T16:23:38.667" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18024" PostTypeId="2" ParentId="18012" CreationDate="2019-01-16T16:33:09.630" Score="1" Body="&lt;p&gt;In my perusion of a few scholarly articles, most, if not all, use them in direct conjunction with each other (such as &quot;&lt;em&gt;Dynamic obstacle avoidance path planning&lt;/em&gt;&quot;). Dynamic path planning is defined as &quot;...process of breaking down a desired movement task into discrete motions that satisfy movement constraints and possibly optimize some aspect of the movement.&quot; (Wikipedia). Based on these two, its safe to say that obstacle avoidance is part of dynamic path planning.&lt;/p&gt;&#xA;" OwnerUserId="22084" LastActivityDate="2019-01-16T16:33:09.630" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18025" PostTypeId="1" CreationDate="2019-01-16T16:58:00.897" Score="1" ViewCount="176" Body="&lt;p&gt;I'm trying to implement a PID based line follower. The robot has 2 line sensors with ranges from 0-200, with 0 being black and 200 being white. I'm trying to follow a black line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm struggling to get the robot to do anything but erratically turn and confuse itself on the spot, getting wildly out of control. I've tried adjusting the setpoint value, the operators in the equations and the kp/kd values to no avail. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there something wrong with the algorithm I'm using? (I'm a beginner to this so it's likely)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank You&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My code is below: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/98Rgx.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/98Rgx.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="22070" LastActivityDate="2019-01-16T17:14:17.747" Title="Why won't my PID line follower work?" Tags="&lt;sensors&gt;&lt;pid&gt;&lt;algorithm&gt;&lt;python&gt;&lt;line-following&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18027" PostTypeId="2" ParentId="18025" CreationDate="2019-01-16T17:14:17.747" Score="1" Body="&lt;p&gt;You seem to only be using a PD controller, but that should be sufficient. The biggest typo I could spot is that you multiple instead of add the proportional and derivative terms. Namely it should be:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;motorSpeed = kp*error + kd*(error - lastError)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Usually one would also divide the error difference by the time that has passed, however this would only change the effective kd gain by a constant factor, assuming that the time between samples is constant. Also normally the error would defined as setpoint minus position, which effectively would multiply motorSpeed by minus one.&lt;/p&gt;&#xA;" OwnerUserId="1487" LastActivityDate="2019-01-16T17:14:17.747" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18028" PostTypeId="2" ParentId="18012" CreationDate="2019-01-16T17:27:42.977" Score="3" Body="&lt;p&gt;I have lots of experience with this that I won't bother you with. Most vehicle planners have multiple layers, with different requirements. In short, you're right in that they are very closely related and often overlap. There is some general consensus from what I've seen for a &quot;layered&quot; approach as follows.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;example three layers&lt;/h1&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Goal planner&lt;/li&gt;&#xA;&lt;li&gt;Path planner&lt;/li&gt;&#xA;&lt;li&gt;Hazard avoidance&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;h1&gt;Goal planner&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;The point of this layer is to decide &lt;strong&gt;where&lt;/strong&gt; the robot should be going. Usually this is done from a strategic view, like &quot;Get to that hilltop to charge solar panels&quot; or &quot;try to get into this lane because you need to exit soon&quot; or &quot;the human wants pictures from this location&quot;. You can even choose multiple goals and plan a &lt;em&gt;route&lt;/em&gt; through them, so sometimes this layer is called &lt;strong&gt;route planning&lt;/strong&gt;. This is the purview of &lt;strong&gt;operations research&lt;/strong&gt; usually, and involves problems often called &lt;strong&gt;vehicle routing&lt;/strong&gt;, &lt;strong&gt;facility location&lt;/strong&gt; or TSP-like problems. You might run this layer once every few seconds to once every minute. (notice how long it takes google maps to replan your route).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Usually, this level of planning considers the general direction of travel over minutes to hours range, and does not include anything but a cursory approximation of terrain or obstacles.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Path planning&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Once you know you are at location A and want to get to location B next, you usually plan a path (or trajectory) to get to that location (or at least closer if you are using receding horizon control). At this layer, you can often afford (computation-wise) to include static obstacles like no-go zones, terrain, or other vehicles that you can see and trust your predictions about. At this stage you often do &lt;strong&gt;not consider dynamic obstacles that are hard to predict&lt;/strong&gt;, or are very far away in terms of time to collision etc.  You usually optimize some metric like &lt;strong&gt;time to arrival&lt;/strong&gt; or &lt;strong&gt;energy cost&lt;/strong&gt; or &lt;strong&gt;safety&lt;/strong&gt; (e.g., likelihood of using hazard avoidance during trajectory) or &lt;strong&gt;comfort of operator&lt;/strong&gt;, etc. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In short, you do plan to avoid collisions that you can anticipate at the 10s of seconds to (maybe) minutes range, depending on the density of the environment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically, &lt;strong&gt;RRT&lt;/strong&gt; and &lt;strong&gt;MPC&lt;/strong&gt; dominate this layer, from my experience, and are confusingly called trajectory optimization, trajectory generation, path planning, and feed-forward controllers. Sometimes this is broken up into two layers, as well. You might run this layer at 1-100Hz. Due to the continuing improvement of onboard computation, and the continuing R&amp;amp;D at this layer, sometimes you can do all your planning (including obstacle avoidance) at this layer. Usually, you still want the following layer running just in case...&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Hazard avoidance&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;This layer is the most &quot;reactive&quot;. It is the quick reflexes to slam on the brakes or veer when something unexpected happens. Usually this takes as input a general velocity or heading, and tries to keep the vehicle safe while trying to reach that velocity. If a car veers in front of you, you don't want to spend a second replanning your whole trajectory for the next minute (or replanning your strategic objectives), you just want to avoid a collision and let the higher planners take over once the vehicle is safe again.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This layer operates on a &lt;strong&gt;millisecond reaction time&lt;/strong&gt; and only looks over the next few seconds usually. It also does the &lt;strong&gt;crudest approximation&lt;/strong&gt; (to stay fast) of the dynamic obstacle's trajectories, usually linear projection. You might run this layer at 100Hz in some cases.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Technologies fitting in this area are usually something like &lt;strong&gt;artificial potential fields&lt;/strong&gt; or &lt;strong&gt;velocity obstacles&lt;/strong&gt; and are usually classified as &lt;strong&gt;obstacle avoidance&lt;/strong&gt; algorithms. &lt;/p&gt;&#xA;" OwnerUserId="163" LastEditorUserId="163" LastEditDate="2019-01-20T19:35:42.697" LastActivityDate="2019-01-20T19:35:42.697" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18029" PostTypeId="1" CreationDate="2019-01-16T21:55:13.540" Score="0" ViewCount="131" Body="&lt;p&gt;I have a modeling design for Humanoid robot arm in simscape-SimMechanics in Matlab, I am trying to use the inverse kinematic to make a reaching movement for the arm to the target position; however, I want to know if there is a possibility to coding the forward and inverse kinematic using a block function in Simulink becuase all most of the users try to exploit the Robotic Toolbox to get the Forward and Inverse Kinematics and implement to the robot. ( I mean i want to control my own design in SimMechanics rather than using Robotic Toolbox) &lt;/p&gt;&#xA;" OwnerUserId="22086" LastActivityDate="2021-02-05T23:01:25.083" Title="Humanoid Robot Arm" Tags="&lt;inverse-kinematics&gt;&lt;forward-kinematics&gt;&lt;humanoid&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18030" PostTypeId="2" ParentId="18014" CreationDate="2019-01-16T22:23:44.357" Score="2" Body="&lt;p&gt;You are correct. Most Velodyne LIDARs (very commonly used on autonomous vehicles), use &lt;a href=&quot;https://velodynelidar.com/lidar/products/manual/63-9113%20HDL-32E%20manual_Rev%20G.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;905 nm diode lasers&lt;/a&gt;, and so do many Hokuyo laser scanners and SICK LIDARs. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A new company, Ouster, uses &lt;a href=&quot;https://www.autosensorsconf.com/sites/autosensorsconf/files/assets/6D%20LiDAR%20Face-Off%20Ouster_Mardirosian.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;850 nm lasers&lt;/a&gt;, claiming that their choice of lower wavelength is because the &quot;atmospheric water absorption is orders of magnitude lower than at 905nm&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some more info: &lt;a href=&quot;https://velodynelidar.com/newsroom/guide-to-lidar-wavelengths/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://velodynelidar.com/newsroom/guide-to-lidar-wavelengths/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10310" LastActivityDate="2019-01-16T22:23:44.357" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18031" PostTypeId="1" CreationDate="2019-01-17T01:48:42.247" Score="1" ViewCount="194" Body="&lt;p&gt;I'm trying to control the YuMi robot arm by a serial port. The serial port will give the information on what direction the end-effector should move and what is the velocity. What I would like to achieve is that the robotic arm will keep moving in the certain direction and velocity until the serial command changes. For example, if the serial port tells the robotic arm to move at velocity 1 in the x-direction, the robotic arm will not stop until the serial port changes the velocity to 0. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;We are currently using the 'yumipy' python library (&lt;a href=&quot;https://github.com/BerkeleyAutomation/yumipy&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/BerkeleyAutomation/yumipy&lt;/a&gt;) for this purpose, but it might not be suitable for real-time smooth motions in our application. Because it can only generate consecutive discrete pose commands by reading the serial commands, and there will be small time gaps between each pose command. Also, the RAPID server has to execute each command in full before execute the next command (which can cause a time delay as well).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Will External Guided Motion (EGM) be suitable for this application? Are there any other possible approaches and what would be the optimal one?&lt;/p&gt;&#xA;" OwnerUserId="22088" LastActivityDate="2021-02-05T13:06:50.587" Title="Controlling YuMi robot by serial port" Tags="&lt;control&gt;&lt;arduino&gt;&lt;robotic-arm&gt;&lt;motion-planning&gt;&lt;motion&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18032" PostTypeId="1" CreationDate="2019-01-17T04:53:47.373" Score="2" ViewCount="515" Body="&lt;p&gt;I am using a fixed 3D LiDAR sensor on a small aircraft. The vehicle has a GPS/INU to calculate its own position and orientation. I do not know the exact offset of the LIDAR from the center of the vehicle frame. I have an initial estimate of the rotation matrix and translation vector for my transformation matrix from the sensor frame to the vehicle frame. Is there an iterative method using my initial estimates to converge to a more accurate solution for roll, pitch, yaw angles and position vector (x,y,z)? Or is there a Least Squares approach? If yes, can you show/describe the method? Otherwise, if there is another method, please explain.&lt;/p&gt;&#xA;" OwnerUserId="22090" LastActivityDate="2020-10-08T22:02:20.257" Title="How to determine the rotation matrix and translation vector of a fixed LiDAR from the sensor frame to an aircraft's vehicle frame?" Tags="&lt;sensors&gt;&lt;lidar&gt;&lt;frame&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18034" PostTypeId="1" AcceptedAnswerId="18055" CreationDate="2019-01-17T06:13:46.127" Score="1" ViewCount="181" Body="&lt;p&gt;Will vision based system eventually prevail rangefinders based systems given that the most successful autonomous agents in the world like animals use primarily visions to navigate?&lt;/p&gt;&#xA;" OwnerUserId="9972" LastEditorUserId="21223" LastEditDate="2019-01-20T03:13:37.390" LastActivityDate="2019-02-14T12:13:00.170" Title="Why do robots need rangefinders while animals don't?" Tags="&lt;computer-vision&gt;&lt;rangefinder&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18035" PostTypeId="2" ParentId="18014" CreationDate="2019-01-17T06:14:10.373" Score="2" Body="&lt;p&gt;Both 1550nm and 900nm ranges are used in different lidars. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Velodyne and majority others use 905nm lasers because these diodes are really cheap. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;1550nm are used when there is a need for very long distance measurement range, such as &lt;a href=&quot;https://spectrum.ieee.org/cars-that-think/transportation/self-driving/under-the-hood-of-luminars-long-reach-lidar&quot; rel=&quot;nofollow noreferrer&quot;&gt;Luminar&lt;/a&gt;, as the eye safety threshould is several orders of magnitude higher for this wavelength than 905nm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In principle, the laser has to be very very high power to distroy a camera. Unfortunately most of these lidar start-ups are still in developing phase, and the so called Class 1 is the goal to achieve. Be careful not to look at the start-up's lidars.&lt;/p&gt;&#xA;" OwnerUserId="22092" LastActivityDate="2019-01-17T06:14:10.373" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18036" PostTypeId="2" ParentId="4583" CreationDate="2019-01-17T06:29:15.060" Score="0" Body="&lt;p&gt;It was really interesting to check out the Livox lidar site! The order can be placed from DJI site.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The lidar scans 3D point clouds with 200m detection range outdoors. Comparable with velodyne 32 and priced at 600 bucks.&lt;/p&gt;&#xA;" OwnerUserId="22092" LastActivityDate="2019-01-17T06:29:15.060" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18037" PostTypeId="2" ParentId="18034" CreationDate="2019-01-17T06:44:27.817" Score="3" Body="&lt;p&gt;Vision is actually one kind of rangefinder, although passive. Earlier camera use &lt;a href=&quot;https://en.wikipedia.org/wiki/Parallax&quot; rel=&quot;nofollow noreferrer&quot;&gt;parallax&lt;/a&gt; to find the distance and focus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nowadays, active rangefinders are developed such as ultrasonic sensors, lidar sensors, which emit a signal and checks the returned time, the time of flight. This is more accurate and could adapt to low light conditions.&lt;/p&gt;&#xA;" OwnerUserId="22092" LastActivityDate="2019-01-17T06:44:27.817" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18038" PostTypeId="2" ParentId="18031" CreationDate="2019-01-17T10:47:46.767" Score="0" Body="&lt;p&gt;There is an open source ROS library, which implements controlling an ABB robot using the EGM. You can find the library &lt;a href=&quot;https://github.com/ros-industrial/abb_libegm&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The library allows the definition of a trajectory and adding points to the trajectory. So might be what you want to do. The exact code which achieves this is the &lt;code&gt;addTrajectoryPointFront()&lt;/code&gt; and &lt;code&gt;addTrajectoryPointBack()&lt;/code&gt; function in the &lt;a href=&quot;https://github.com/ros-industrial/abb_libegm/blob/master/include/abb_libegm/egm_trajectory_interface.h&quot; rel=&quot;nofollow noreferrer&quot;&gt;egm_trajectory_interface.h&lt;/a&gt; file. It is unclear if the currently executed trajectory can be altered using the functions above or not. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the above method is not suitable, you can try using velocity goals. Velocity goals can be added using a fast_transition option which seems to enable what you are looking for. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please note that I have not used the EGM Interface, I am also trying to implement a similar application, real-time trajectory control with EGM, but did not progress to actual implementation yet.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2019-01-17T10:47:46.767" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18039" PostTypeId="1" AcceptedAnswerId="18042" CreationDate="2019-01-17T13:36:08.330" Score="1" ViewCount="78" Body="&lt;p&gt;This question may be a little broad, but I could not find any other information. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How accurate are the inverse dynamics functions in &lt;a href=&quot;https://www.mathworks.com/products/simmechanics.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;SimMechanics&lt;/a&gt; compared to &lt;a href=&quot;https://pybullet.org/wordpress/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Bullet&lt;/a&gt;?  How accurate are the sensed/measured forces/torques that will occur in joints? Can I rely on the results, that Bullet finds or is SimMechanics &quot;the better way&quot; to go? Do you have any experience? In my case, an accurate simulation for scientific purpose is needed, but I do not know how reliable or advanced bullet-physics is compared to tools like SimMechanics from mathworks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="21760" LastEditorUserId="17029" LastEditDate="2019-01-17T14:29:14.360" LastActivityDate="2019-01-17T19:17:13.360" Title="Bullet vs SimMechanics: Inverse Dynamics and sensed forces/torques" Tags="&lt;dynamics&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18040" PostTypeId="2" ParentId="18029" CreationDate="2019-01-17T18:16:51.957" Score="0" Body="&lt;p&gt;You could use the &lt;a href=&quot;https://www.mathworks.com/help/simulink/slref/matlabfunction.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;MATLAB function block&lt;/a&gt;. Write a script that contains a single function for doing forward/inverse kinematics, then reference it in the MATLAB function block. Similarly, you could use the &lt;a href=&quot;https://www.mathworks.com/help/simulink/sfg/what-is-an-s-function.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;S-function block&lt;/a&gt;. This would let you make a more complex set of functions contained in a block. Within either of these functions that you write you can use your favorite numerical method to solve the inverse kinematics.&lt;/p&gt;&#xA;" OwnerUserId="21881" LastActivityDate="2019-01-17T18:16:51.957" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18041" PostTypeId="2" ParentId="18034" CreationDate="2019-01-17T19:10:45.490" Score="1" Body="&lt;p&gt;Short answer: They don't need. Cameras can be used as range finders, and an easy example is the &lt;a href=&quot;https://en.wikipedia.org/wiki/Kinect&quot; rel=&quot;nofollow noreferrer&quot;&gt;Xbox Kinect&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Computer_vision&quot; rel=&quot;nofollow noreferrer&quot;&gt;Computer vision&lt;/a&gt; is an area that is being studied a lot.&#xA;You can find a lot on authonomous cars, and the problem of &lt;a href=&quot;https://en.wikipedia.org/wiki/Simultaneous_localization_and_mapping&quot; rel=&quot;nofollow noreferrer&quot;&gt;SLAM&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="22097" LastActivityDate="2019-01-17T19:10:45.490" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="18042" PostTypeId="2" ParentId="18039" CreationDate="2019-01-17T19:17:13.360" Score="1" Body="&lt;p&gt;While SimMechanics and Bullet are both very reliable resources, in my experience, they serve different purposes. SimMechanics is more of a scientific environment as compared to Bullet which is a real-time high-performance Physics engine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can rely on both of their measurements and observations but the system modeling step determines the reliability better. SimMechanics is optimized for accuracy while Bullet is optimized for performance with some allowed approximations.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In SimMechanics, you can import CAD models and all sorts of design parameters and constraints, making the simulation very well defined. While the same can also be done in Bullet, it is more cumbersome and involves manual modifications which can be difficult to handle. The ability to import CAD models through SimMechanics and have more granular control on all factors gets it the upper hand. Sensors and physical world to electrical world and vice-versa conversions are also supported, giving you more options to replicate real world conditions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While SimMechanics trumps Bullet for your application (assuming you only need for a prototyping kind of application), the latter is the best one for production environment.&lt;/p&gt;&#xA;" OwnerUserId="18572" LastActivityDate="2019-01-17T19:17:13.360" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18043" PostTypeId="2" ParentId="18032" CreationDate="2019-01-17T19:54:09.470" Score="1" Body="&lt;p&gt;It sounds to me like you have a system with an unknown parameter that you want to estimate. That is the purview of &lt;a href=&quot;https://en.wikipedia.org/wiki/Estimation_theory&quot; rel=&quot;nofollow noreferrer&quot;&gt;parameter estimation literature&lt;/a&gt;. If this parameter to be estimated is &lt;em&gt;not changing over time&lt;/em&gt; (as yours is not), then you can use old-school methods like LS or similar, as you suggest. This particular brand of parameter estimation is known as extrinsic calibration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most methods I'm familiar with (and I'm not familiar with most), follow an iterative (or batch) process as follows:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Estimate translation and rotation between two sensors&lt;/li&gt;&#xA;&lt;li&gt;Observe features common to both sensors (e.g., estimate ego-motion from the lidar scan matching and integrate IMU measurements)&lt;/li&gt;&#xA;&lt;li&gt;Use the features to estimate the position of each sensor relative to the features&lt;/li&gt;&#xA;&lt;li&gt;You now know the location of the sensors w.r.t. common features, and therefore you can estimate the translation and rotation between them. &lt;/li&gt;&#xA;&lt;li&gt;Use that estimate to update the original estimate (usually by taking a weighted average)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;So, google scholar provides some hits on &quot;imu lidar calibration&quot; such as:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://infoscience.epfl.ch/record/116145&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://infoscience.epfl.ch/record/116145&lt;/a&gt; &lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.isprs.org/proceedings/xxxiv/3-w13/papers/Katzenbeisser_ALSDD2003.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.isprs.org/proceedings/xxxiv/3-w13/papers/Katzenbeisser_ALSDD2003.pdf&lt;/a&gt; &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="163" LastActivityDate="2019-01-17T19:54:09.470" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18044" PostTypeId="1" AcceptedAnswerId="18085" CreationDate="2019-01-17T23:28:11.327" Score="2" ViewCount="134" Body="&lt;p&gt;I have worked on a couple of projects like control of a quadrotor/ self balancing robot/ 6 dof robotic arm using nonlinear, optimal and adaptive control. So, in all these projects I have first basically tried to understand the dynamics of the system, then I modeled it. Next I applied different control strategies and compared their responses and chose the best one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is when approaching problems in industry or in research, is the approach for these simple bots fine or are there other things that I should consider. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT:&#xA;Can someone who has worked/ has experience in this area, put a step by step approach that should be done to approach any control problem in any field. With the necessary concepts and skills needed.&lt;/p&gt;&#xA;" OwnerUserId="18892" LastEditorUserId="18892" LastEditDate="2019-01-20T16:14:47.477" LastActivityDate="2019-01-23T15:01:57.107" Title="How to approach any advanced control problem in robotics" Tags="&lt;control&gt;&lt;research&gt;" AnswerCount="2" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="18045" PostTypeId="1" AcceptedAnswerId="18060" CreationDate="2019-01-18T01:54:17.360" Score="0" ViewCount="103" Body="&lt;p&gt;Has anyone done this? Create a &quot;droplet&quot; or whatever they call it and set up ROS, and be able to actually run roscore, gazebo, rviz, etc. from there?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can imagine various complications, like having a static IP, figuring out what to with graphics apps like gazebo. Is there any way? Thanks!&lt;/p&gt;&#xA;" OwnerUserId="17190" LastEditorUserId="18870" LastEditDate="2019-01-18T15:24:45.783" LastActivityDate="2019-01-20T19:34:35.993" Title="Running ROS on Digital Ocean?" Tags="&lt;ros&gt;&lt;gazebo&gt;&lt;rviz&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18046" PostTypeId="1" CreationDate="2019-01-18T04:00:12.383" Score="1" ViewCount="54" Body="&lt;p&gt;I have an Intel RealSense camera which can stream RGB and depth image. Using those information I want to track an object moving on a table top. More specifically, I want to know position &lt;span class=&quot;math-container&quot;&gt;$(x,y)$&lt;/span&gt; and orientation &lt;span class=&quot;math-container&quot;&gt;$\theta_z$&lt;/span&gt; of the object. Can any body help providing me the pipeline for accomplishing what I mentioned? Thank you in advance.&lt;/p&gt;&#xA;" OwnerUserId="22101" LastEditorUserId="19143" LastEditDate="2019-01-18T15:24:04.400" LastActivityDate="2019-01-18T15:24:04.400" Title="Tracking object in realtime using depth image stream from a RGBD camera" Tags="&lt;mobile-robot&gt;&lt;robotic-arm&gt;&lt;sensors&gt;&lt;computer-vision&gt;&lt;stereo-vision&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18047" PostTypeId="1" AcceptedAnswerId="18054" CreationDate="2019-01-18T07:37:56.787" Score="1" ViewCount="930" Body="&lt;pre&gt;&lt;code&gt;alpha = [ -90,   0,   0, 90,   0]&#xA;a     = [   0, 400, 200,  0,   0]&#xA;d     = [63.5,   0,   0, 90, 100]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I am trying to calculate the joint angles but I am stuck after I got the values of Theta1 and Theta2.&lt;/p&gt;&#xA;" OwnerUserId="22102" LastEditorUserId="110" LastEditDate="2019-02-08T00:46:33.000" LastActivityDate="2019-02-08T00:46:33.000" Title="How do I find the inverse kinematics of a 5-DOF manipulator having the following DH parameters?" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;inverse-kinematics&gt;&lt;first-robotics&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18048" PostTypeId="1" CreationDate="2019-01-18T12:53:40.223" Score="1" ViewCount="1154" Body="&lt;p&gt;I have a differential robot and I am using ROS to run it. When I need to move the robot, I can send commands to it, specifically linear X and angular Z velocities. Linear X is in m/s whereas angular Z is in rad/s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Know I need to compute what velocities should I set to both wheels in order to meet the linear and angular velocities. I have found this formula:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;velocity_left_cmd = (linear_velocity – angular_velocity * WHEEL_BASE / 2.0)/WHEEL_RADIUS;&#xA;&#xA;velocity_right_cmd = (linear_velocity + angular_velocity * WHEEL_BASE / 2.0)/WHEEL_RADIUS;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But it does not seem to be correct. If I put the linear velocity to be 0.5 m/s and angular to be 0.6 rad/s, then having my &lt;code&gt;WHEEL_BASE&lt;/code&gt; of 0.14 meters and &lt;code&gt;WHEEL_RADIUS&lt;/code&gt; of 0.03 meters, I get very large values, like 15 m/s on one of the wheels. That does not seem to be correct.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the right way to get the individual velocities on each wheel?&lt;/p&gt;&#xA;" OwnerUserId="22104" LastActivityDate="2021-03-12T09:48:33.973" Title="Inverse kinematics for differential robot knowing linear and angular velocities" Tags="&lt;ros&gt;&lt;inverse-kinematics&gt;&lt;differential-drive&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18049" PostTypeId="1" CreationDate="2019-01-18T23:41:28.123" Score="-1" ViewCount="24" Body="&lt;p&gt;Let's say I have a robot, located in a box. The robot can move in the x and y and rotate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The robot has 4 rangefinders, mounted 90 degrees apart, that measure the distance to the walls of the box (I think it would be possible with just 3 but let's use 4 as an example). The robot also has an &quot;approximate&quot; +-10 degree estimate of its heading, so it knows in general which quadrant its bearing should be in.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given this information, how can I calculate the &quot;exact&quot; position and bearing of the robot?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Intuitively I know this should easily be possible as there are three degrees of freedom for the system (x,y, and the angle), but I can't think of a way to actually calculate the position.&lt;/p&gt;&#xA;" OwnerUserId="22106" LastActivityDate="2019-02-16T05:39:22.597" Title="Localization in box using rangefinders" Tags="&lt;localization&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18050" PostTypeId="2" ParentId="18047" CreationDate="2019-01-19T01:09:25.803" Score="4" Body="&lt;p&gt;If you say you're are stuck after values for the first two angles, you are probably trying an analytical approach. Try solving for IK using standard techniques Jacobian Pseudo Inverse or Cyclic Coordinate Descent. If you are looking for immediate solutions, use Peter Corke's Robotic Toolbox for MATLAB or KDL/TracIK in C++/Python to obtain the values.&lt;/p&gt;&#xA;" OwnerUserId="18572" LastActivityDate="2019-01-19T01:09:25.803" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18054" PostTypeId="2" ParentId="18047" CreationDate="2019-01-19T21:23:50.003" Score="5" Body="&lt;p&gt;A general IK solution is not possible for an arm with less than 6 joints.  You can move the gripper to any point (within reach) but you can't completely control the orientation.  If you fix the orientation, say fingers aligned with vertical axis (normal to the work surface), this should simplify the analytic solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using my Toolbox, and starting with the DH kinematic parameters you provide (and assuming they are standard DH, you didn't specify)&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt; robot = SerialLink( [zeros(1,5); d; a; alpha*pi/180]')&#xA;robot = &#xA;noname:: 5 axis, RRRRR, stdDH, fastRNE                           &#xA;+---+-----------+-----------+-----------+-----------+-----------+&#xA;| j |     theta |         d |         a |     alpha |    offset |&#xA;+---+-----------+-----------+-----------+-----------+-----------+&#xA;|  1|         q1|       63.5|          0|    -1.5708|          0|&#xA;|  2|         q2|          0|        400|          0|          0|&#xA;|  3|         q3|          0|        200|          0|          0|&#xA;|  4|         q4|         90|          0|     1.5708|          0|&#xA;|  5|         q5|        100|          0|          0|          0|&#xA;+---+-----------+-----------+-----------+-----------+-----------+&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;To get a feel for the robot I drive a graphical model around interactively and choose a reachable point with the gripper fingers downward&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt; robot.teach&#xA;&amp;gt;&amp;gt; T = transl([550 90 0]) * trotx(180, 'deg')&#xA;T =&#xA;     1     0     0   550&#xA;     0    -1     0    90&#xA;     0     0    -1     0&#xA;     0     0     0     1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Now I can solve for the inverse kinematics&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt; robot.ikine(T, 'mask', [1 1 1 1 1 0])&#xA;ans =&#xA;   -0.0000    0.2694   -0.0017   -0.5561         0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where the mask has only 5 ones in it, the Cartesian degrees of freedom we want to control.  In this case we accept that we cannot independently control rotation about the z-axis.  We can verify the IK solution&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt; robot.fkine(ans)&#xA;ans = &#xA;    0.9587         0   -0.2845       550&#xA;         0         1         0        90&#xA;    0.2845         0    0.9587 1.916e-11&#xA;         0         0         0         1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and see that it does give us the desired position, rightmost column, but the rotation matrix is not what we asked for, because rotation about z-axis is chosen for us.&lt;/p&gt;&#xA;" OwnerUserId="21223" LastEditorUserId="21223" LastEditDate="2019-01-19T21:48:50.153" LastActivityDate="2019-01-19T21:48:50.153" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18055" PostTypeId="2" ParentId="18034" CreationDate="2019-01-19T22:17:48.277" Score="7" Body="&lt;p&gt;Animals and robots both need to understand something about the 3D structure of the world in order to thrive. Because it's so important, animals have evolved a huge number of strategies to estimate depth based on camera-like projective sensors (eyes).  Many make use of binocular disparity -- the fact that the distance between the same scene point in two different views is inversely proportional to depth.  A mantis moves its head sideways to do this, a dragonfly makes very precise forward motion, birds move their heads forward and backwards, we use the fact that our eyes are widely spaced on our heads and have overlapping fields of view.  Stereo vision is a computer vision technique that mimics this. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However disparity &lt;em&gt;is not&lt;/em&gt; the only trick we use, there are lots of others including proprioceptive signals from the muscles in our eyes (focus and vergence), observing how things in the world move as we move (optical flow), our knowledge about the world (the tree looks small, we know trees are big, therefore it must be far away), haziness, texture density, occlusion (thing A blocks thing B, therefore A must be closer). Each technique (or cue) is imperfect, but mostly in a different way, and each operates across a different range of distances.  Our brain stitches (fuses) all that together to give a result that is mostly pretty robust.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Checkout the &lt;a href=&quot;https://en.wikipedia.org/wiki/Depth_perception&quot; rel=&quot;noreferrer&quot;&gt;wikipedia page&lt;/a&gt; for more details. I like this (old) article &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;&lt;a href=&quot;https://pdfs.semanticscholar.org/b342/2dac03c100c745fdf4f8e5f37736168616c2.pdf&quot; rel=&quot;noreferrer&quot;&gt;How the eye measures reality and virtual reality&lt;/a&gt;.&#xA;JAMES E. CUTTING, Cornell University, Ithaca, New York.&#xA;Behavior Research Methods, Instruments, &amp;amp; Computers 1997, 29 (1), 27-36&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;which gives a good insight into this issue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are now deep-learnt networks now that can take a monocular (single) image and output estimated depth.  We can never know for sure but my theory is that they are encoding some of the cues that we use for depth estimation such as texture and apparent size.&lt;/p&gt;&#xA;" OwnerUserId="21223" LastEditorUserId="21223" LastEditDate="2019-01-20T01:13:00.317" LastActivityDate="2019-01-20T01:13:00.317" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18057" PostTypeId="1" CreationDate="2019-01-20T06:05:51.160" Score="0" ViewCount="21" Body="&lt;p&gt;Beam robotics invented by Mark W. Tilden is about analog circuits for controlling robots. The idea is to avoid microcontrollers and software and use instead resistors, breadboards and capacitor for controlling a line following robot. The problem with BEAM robots is, that they don't provide complex features and it's not possible to build walking robots out of analog circuits, because dynamic walking is non-linear problem which has to be treated with digital computers and algorithms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, there is a topic in the Artificial Intelligence domain available called Fuzzy logic which is based on continuous signals. A value like “left” can become -2, -1, 0 and also numbers with fractions. This makes it a natural choice for simulating fuzzy logic with analog circuits. Some papers are available which are explaining how to do this in detail for example “Alfredo Sanz: Analog Implementation of Fuzzy Controller, 1994“ which demonstrated a working fuzzy logic controller in the SPICE software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it possible to combine BEAM robotics and fuzzy control to build analog intelligent robots?&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2019-01-20T06:05:51.160" Title="Can I combine BEAM robotics with fuzzy control?" Tags="&lt;control&gt;&lt;electronics&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18060" PostTypeId="2" ParentId="18045" CreationDate="2019-01-20T19:34:35.993" Score="1" Body="&lt;p&gt;I did install a YARP based environment on my droplet along with graphics and it works great. I use it for testing purpose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The installation in my case was very standard and when it came to graphics I simply searched for online guidance, which is usually super useful on Digital Ocean (DO). This is why I tend to prefer DO over other online premises: it's easy and highly configurable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An example of how to deal with graphics installation can be found &lt;a href=&quot;https://www.digitalocean.com/community/questions/how-to-install-graphical-interface&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Compared with ROS, YARP is a gentler beast, but I can imagine the installation is still doable, even though you would require definitely a droplet with more resources.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastActivityDate="2019-01-20T19:34:35.993" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18062" PostTypeId="1" CreationDate="2019-01-20T23:03:27.497" Score="0" ViewCount="206" Body="&lt;p&gt;How can i find and  install (acspid) python PID library in the folowing code &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;import acspid&#xA;pid=acspid.pidcont(1.2,0.02,0.01,5,-5)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="22112" LastActivityDate="2021-04-21T18:07:45.757" Title="How can i find and install (acspid) python PID library" Tags="&lt;pid&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18063" PostTypeId="2" ParentId="18062" CreationDate="2019-01-20T23:10:43.613" Score="0" Body="&lt;p&gt;You can find it on github:  &lt;a href=&quot;https://github.com/hoo2/toolbox&quot; rel=&quot;nofollow noreferrer&quot;&gt;ASC-PID&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2019-01-20T23:10:43.613" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18064" PostTypeId="1" CreationDate="2019-01-21T05:04:58.520" Score="0" ViewCount="427" Body="&lt;p&gt;My application is not specifically in Robotics, but the problem that I'm trying to solve seems to have been studied primarily from the viewpoint of Robotics, so I am hoping to get an answer here. Apologies if it's not the correct place.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Problem description&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;I am creating a virtual human agent in Unity. The agent will primarily interact with blocks on a table by sliding or carrying them from one point to another in 3D. Apart from the constraints that accompany human arms, the planned path should not result in arm colliding with other blocks, nor should the blocks collide with one another. The former case is a possibility since blocks could possibly be stacked on top of one another to form towers.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;My solution&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;I don't have any experience in Robotics, so my solution may not be the best: First, use an IK solver to find initial and goal arm orientations, so I have initial and goal state in configuration space. This could be done by an IK solver. I'm thinking to use Cyclic Coordinate Descent, since it feels very easy to implement. Next, I'd have to implement RRT-Connect to find the path between those configurations. My knowledge on this is limited to what I've read in the RRT-Connect paper.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Questions&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;My questions are three-fold:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Does the stated approach seem to be reasonable? Lacking background in Robotics, I'm afraid I might be missing something obvious.&lt;/li&gt;&#xA;&lt;li&gt;Is there a way to find initial and goal configurations for arm that are also collision free?&lt;/li&gt;&#xA;&lt;li&gt;Finally, in the tradition of being lazy as a programmer, I've been looking at OMPL to use an existing implementation for a path planner, especially since there are so many, and they'll also be well optimized. Problem is I'm not sure if there's a way to build it for .NET (C#) since that's what is used in Unity for scripting.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Any help would be greatly appreciated!&lt;/p&gt;&#xA;" OwnerUserId="22114" LastActivityDate="2019-01-21T15:47:13.103" Title="Arm path planning with obstacle avoidance in Unity" Tags="&lt;inverse-kinematics&gt;&lt;path-planning&gt;&lt;rrt&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18065" PostTypeId="1" CreationDate="2019-01-21T05:29:07.047" Score="0" ViewCount="333" Body="&lt;p&gt;I need to simulate a path planning approach for a 2D space where the obstacles are moving. Initially, I need to implement probabilistic road map, D* lite, A* and &lt;a href=&quot;https://www.cs.cmu.edu/~motionplanning/lecture/Chap2-Bug-Alg_howie.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Bug2 algorithm&lt;/a&gt;. The robot needs to be able to follow the wall of the obstacles.&lt;br&gt;&#xA;I do not know which library is most suitable for these algorithms. I have a tight schedule, I need to finish the simulation within 1 month. I found ROS, matlab and Player. Which one can handle the simulation of dynamic obstacles and has the algorithms that I need. Any other suggestions are welcome.&lt;/p&gt;&#xA;" OwnerUserId="21794" LastActivityDate="2019-02-20T11:42:21.280" Title="Libraries to simulate path planning in a dynamic environment for a 2D space" Tags="&lt;ros&gt;&lt;matlab&gt;&lt;simulation&gt;&lt;path-planning&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18067" PostTypeId="2" ParentId="18065" CreationDate="2019-01-21T08:20:01.040" Score="0" Body="&lt;p&gt;The most compact pathplanner in a 2d world is “rrt.py lavalle” The code which can be found in the Internet, includes the documentation and has only 64 LoC. It draws a wonderful randomized tree to the screen with the help of pygame. It works under all operating systems and can be adapted to new constraints.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What i can't recommend is to combine RRT with Fuzzy logic to inject expert knowledge in the pathplanner. In theory, this would allow to handle dynamic obstacles and classifies different maps. The problem here is, that it is not sure, how to falsify this kind of things, so the question is, if it's still mathematics or something else.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2019-01-21T08:20:01.040" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18068" PostTypeId="1" CreationDate="2019-01-21T12:10:29.037" Score="4" ViewCount="3530" Body="&lt;p&gt;I'm trying to write a python node, which has one class and two member functions as callback functions.&#xA;so a TimeSynchronizer and Subscriber in a node.&#xA;I saw in this link and tested that python subscribers are event-driven model and are in separate threads.&#xA;&lt;a href=&quot;https://robotics.stackexchange.com/questions/6652/how-to-get-a-python-node-in-ros-subscribe-to-multiple-topics&quot;&gt;How to get a python node in ROS subscribe to multiple topics?&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question here is , are they thread safe when they are working on the same class member? e.g. self.a below. Do I need to write a lock? Where can I find more information about this?&#xA;Thank you in advanced!!!!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;class mr_listener(object):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;def __init__(self):&#xA;    self.a =  [1,2,3,4,5]&#xA;    rospy.init_node('mr_listener', anonymous=True)&#xA;    scan_subscriber = message_filters.Subscriber('/scan',LaserScan)&#xA;    pose_subscriber = message_filters.Subscriber('/slam_out_pose', PoseStamped)&#xA;    ts = message_filters.ApproximateTimeSynchronizer([scan_subscriber,projected_scan_subscriber,pose_subscriber], 10, 0.1, allow_headerless=True)&#xA;    ts.registerCallback(self.callback1)&#xA;    rospy.Subscriber(&quot;chatter&quot;, String, self.callback2)&#xA;    rospy.spin()&#xA;&#xA;def callback1(self,scan,pose):&#xA;    somthing&#xA;&#xA;def callback2(self,chatt):&#xA;    somingthing&#xA;    rospy.sleep(1.)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="22119" LastEditorUserId="18870" LastEditDate="2019-01-24T14:52:01.510" LastActivityDate="2019-06-23T16:00:46.090" Title="Is rospython subscriber thread safe?" Tags="&lt;ros&gt;&lt;python&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18070" PostTypeId="2" ParentId="18064" CreationDate="2019-01-21T15:47:13.103" Score="1" Body="&lt;p&gt;The steps you have identified are correct. &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;You will need an IK solver if you want to plan in Cartesian space. Cyclic Coordinate Descent is one OK option if you always solve for points which are close to eachother.  However, I would advise to look at &lt;a href=&quot;https://docs.unity3d.com/Manual/InverseKinematics.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Unity IK solvers&lt;/a&gt;. It will probably save you some time in implementation. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;RRT Connect is one option which is fairly easy to implement. Instead trying to include OMPL in a Unity3D Project, you might want to search for Unity3D implementations of RRT Connect or similar algorithms. There is &lt;a href=&quot;https://github.com/stevenpclark/trrt-unity&quot; rel=&quot;nofollow noreferrer&quot;&gt;TRRT&lt;/a&gt; open source for example, which might serve as in inspiration for implementation. As I know, Unity3D offers only 2D navigation algorithms &quot;out of the box&quot;, however there are some path planning assets available in the assets store. One free asset which support 3D path planning is &lt;a href=&quot;https://assetstore.unity.com/packages/tools/ai/polarith-ai-free-movement-steering-92029&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt;, but you can look for others, maybe non-free ones also.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2019-01-21T15:47:13.103" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18073" PostTypeId="2" ParentId="15984" CreationDate="2019-01-21T22:06:04.357" Score="1" Body="&lt;p&gt;You undertook a dead-end road. You &lt;strong&gt;must&lt;/strong&gt; use a velocity setpoint instead.&#xA;This way, the problem boils down to the estimation of the velocity from position feedback, which is usually quite tough since it entails to deal with a derivative of a physical thus noisy signal, yielding spikes in the outcome.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Computing the standard derivative of a signal is something a good engineer should always avoid. To get around this, one could either make the derivative more robust hardware-wise by using a very resolute encoder or resort to control techniques such as &lt;strong&gt;Kalman filtering&lt;/strong&gt; (where the derivative is replaced by integration) or &lt;strong&gt;Savitzky–Golay filtering&lt;/strong&gt; that instead solves a linear least-squares optimization on the fly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Related &lt;a href=&quot;https://robotics.stackexchange.com/q/16373/6941&quot;&gt;Q&amp;amp;A&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2019-01-22T08:39:54.273" LastActivityDate="2019-01-22T08:39:54.273" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18074" PostTypeId="2" ParentId="18048" CreationDate="2019-01-21T22:11:06.610" Score="5" Body="&lt;p&gt;Your linear velocity should be the average of both wheel values. Assuming there's some wheel radius of &lt;code&gt;WHEEL_RADIUS&lt;/code&gt;, as you've stated, then you should get each wheel speed as:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;left_velocity = left_rpm * (RPM_TO_RAD_PER_S * DIST_PER_RAD);&#xA;right_velocity = right_rpm * (RPM_TO_RAD_PER_S * DIST_PER_RAD);&#xA;linear_velocity = 0.5f * (left_velocity + right_velocity);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Units matter and they're important!&lt;/em&gt; I define &lt;code&gt;RPM_TO_RAD_PER_S&lt;/code&gt; here because you need to convert from motor RPM to radians per second; that conversion is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\left(\frac{1 \mbox{ rev}}{1 \mbox{ minute}}\right) * \left( \frac{1 \mbox{ minute}}{60 \mbox{ seconds}} \right) * \left(\frac{2\pi \mbox{ radians}}{1 \mbox{ rev}}\right) \\&#xA;\left(\frac{1 \require{cancel}\bcancel{\mbox{ rev}}}{1 \require{cancel}\cancel{\mbox{ minute}}}\right) * \left( \frac{1 \require{cancel}\cancel{\mbox{ minute}}}{60 \boxed{\mbox{ seconds}}} \right) * \left(\frac{2\pi \boxed{\mbox{ radians}}}{1 \require{cancel}\bcancel{\mbox{ rev}}}\right) \\&#xA;\mbox{RPM_TO_RAD_PER_S} = \frac{2\pi}{60} \ = 0.1047&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;DIST_PER_RAD&lt;/code&gt; is just the circumference, &lt;code&gt;2*pi*WHEEL_RADIUS&lt;/code&gt;, divided by the number of radians in a complete revolution, which is just &lt;code&gt;2*pi&lt;/code&gt;. This means that &lt;code&gt;DIST_PER_RAD&lt;/code&gt; is the same as the &lt;code&gt;WHEEL_RADIUS&lt;/code&gt;, but I think it's important to point out &lt;em&gt;why&lt;/em&gt; the equation works out the way that it does. Convert RPM to rad/s, and then use that value with the wheel radius to get speed. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Important to note - &lt;code&gt;left_rpm&lt;/code&gt; and &lt;code&gt;right_rpm&lt;/code&gt; actually need to be in RPM, and &lt;code&gt;DIST_PER_RAD&lt;/code&gt; and/or &lt;code&gt;WHEEL_RADIUS&lt;/code&gt; needs to be in &lt;em&gt;meters&lt;/em&gt; in order to get the output velocities in meters per second. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Moving on to the rotation rate - &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assume for a moment that rotation is positive CCW, viewed from above. If, hypothetically, the robot is rotating CCW, then it would mean that the right wheel is moving some distance further than the left wheel. The difference in distances traveled becomes the &lt;em&gt;arc length&lt;/em&gt; scribed by the right wheel (again, relative to the left), and the &lt;em&gt;wheel base&lt;/em&gt;, or distance between the wheels, becomes the hypotenuse or radius for the rotation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Continuing with the assumption, positive is CCW, you would wind up with an equation like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;angular_rotation = (right_distance - left_distance)/WHEEL_BASE;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You can divide through by time to get:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;angular_rate = (right_velocity - left_velocity)/WHEEL_BASE;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This is coupled with the linear velocity equation, and you wind up with:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;angular_rate = (right_velocity - left_velocity)/WHEEL_BASE;&#xA;linear_velocity = 0.5f * (left_velocity + right_velocity);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You can solve for the &lt;code&gt;right_velocity&lt;/code&gt; in the &lt;code&gt;angular_rate&lt;/code&gt; equation:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;angular_rate = (right_velocity - left_velocity)/WHEEL_BASE;&#xA;angular_rate*WHEEL_BASE + left_velocity = right_velocity;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And then plug that into the linear velocity equation:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;linear_velocity = 0.5f * (left_velocity + angular_rate*WHEEL_BASE + left_velocity);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then solve for the &lt;code&gt;left_velocity&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;linear_velocity = 0.5f*left_velocity + 0.5f*angular_rate*WHEEL_BASE + 0.5f*left_velocity;&#xA;linear_velocity = 0.5f*left_velocity + 0.5f*left_velocity + 0.5f*angular_rate*WHEEL_BASE;&#xA;linear_velocity = left_velocity + 0.5f*angular_rate*WHEEL_BASE;&#xA;linear_velocity - 0.5f*angular_rate*WHEEL_BASE = left_velocity;&#xA;&#xA;&#xA;left_velocity = linear_velocity - 0.5f*angular_rate*WHEEL_BASE;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And then plug &lt;em&gt;this&lt;/em&gt; back into the expression for the &lt;code&gt;right_velocity&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;angular_rate*WHEEL_BASE + left_velocity = right_velocity;&#xA;right_velocity = angular_rate*WHEEL_BASE + left_velocity;&#xA;right_velocity = angular_rate*WHEEL_BASE + linear_velocity - 0.5f*angular_rate*WHEEL_BASE;&#xA;right_velocity = angular_rate*WHEEL_BASE - 0.5f*angular_rate*WHEEL_BASE + linear_velocity;&#xA;&#xA;right_velocity = 0.5f*angular_rate*WHEEL_BASE + linear_velocity;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This then gives the equations for left_ and right_velocities in terms of linear velocity and angular rate:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;left_velocity =  linear_velocity - 0.5f*angular_rate*WHEEL_BASE;&#xA;right_velocity = linear_velocity + 0.5f*angular_rate*WHEEL_BASE;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Now, recall the equations for the conversion from &lt;code&gt;_rpm&lt;/code&gt; to &lt;code&gt;_velocity&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;left_velocity = left_rpm * (RPM_TO_RAD_PER_S * DIST_PER_RAD);&#xA;right_velocity = right_rpm * (RPM_TO_RAD_PER_S * DIST_PER_RAD);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And you can see that:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;left_rpm  = left_velocity/(RPM_TO_RAD_PER_S * DIST_PER_RAD);&#xA;right_rpm = right_velocity/(RPM_TO_RAD_PER_S * DIST_PER_RAD);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Which, substituting in the _velocity terms, gives:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;left_rpm  = (linear_velocity - 0.5f*angular_rate*WHEEL_BASE)/(RPM_TO_RAD_PER_S * DIST_PER_RAD);&#xA;right_rpm = (linear_velocity + 0.5f*angular_rate*WHEEL_BASE)/(RPM_TO_RAD_PER_S * DIST_PER_RAD);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This looks similar to what you state from the start, &lt;strong&gt;but&lt;/strong&gt; there's a conversion here from RPM to rad/s. If you wanted this in percentage, then you should use the percentage formula:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;percentage = 100.0f * (value/maximum);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I would define a value to be something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;RPM_TO_PERCENT = 100.0f/TOP_SPEED_RPM;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and then you can do:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;left_percent  = left_rpm * RPM_TO_PERCENT;&#xA;right_percent = right_rpm * RPM_TO_PERCENT;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You can define any other values you want, too, such as a value that would get you to a PWM output on a 0-255 scale, like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;RPM_TO_PWM = 255.0f/TOP_SPEED_RPM;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and then cast to &lt;code&gt;int&lt;/code&gt; on the equation:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;left_pwm =  &amp;lt;int&amp;gt;(left_rpm * RPM*PWM);&#xA;right_pwm = &amp;lt;int&amp;gt;(right_rpm * RPM*PWM);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You haven't posted any sample data, so I'm assuming this is the answer to your question, at least - that the source of your trouble is a units problem. Don't worry about defining too many variables! I don't think you would ever run into a problem where you're at a limit on how many variables you have defined. Defining the conversion constants like this makes things easier to read, debug, maintain/update, etc. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2019-01-21T22:11:06.610" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18075" PostTypeId="2" ParentId="18044" CreationDate="2019-01-22T10:49:04.407" Score="2" Body="&lt;p&gt;What all control problems have in common is, that they can be solved with expert knowledge. A quadrotor needs a human expert for flight-dynamics while a pick&amp;amp;place robot needs somebody who is familiar with grasping objects. If it's possible to transfer domain knowledge into software the control problem is solved. The best way in doing so are domain specific languages grounded in a domain. At first, a mindmap is created which contains all the words needed in a domain, then they will be aggregated to a grammar and then a robot-controller can be build on top of this grammar.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The common method in doing so is to use a 3d simulator. Different control problems can be made visible with the same physics engine. On top of the physics engine a motion controller can be tested and improved interactively. The overall framework in doing so is called a distributed version control system. That means, an engineer can commit to the repository his newly created domain specific knowledge, and another engineer can run a test on it. Such projects are driven by requirements, formulated from the outside of the system, for example a robot competition about a UAV which has to avoid obstacles.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2019-01-22T10:49:04.407" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18076" PostTypeId="1" CreationDate="2019-01-22T11:22:49.390" Score="3" ViewCount="551" Body="&lt;p&gt;In lecture 5.5 Bouncing ball, slide 26, Coursera's Control of Mobile Robot course, how are the state space equations formed in &quot;Equations of motion in-between bounces&quot;? Why is [0 -g] added?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And how is the state space equation for bounces formed?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S. The ball released from a height h.&lt;a href=&quot;https://i.stack.imgur.com/r9Usd.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/r9Usd.png&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="22124" LastActivityDate="2019-01-28T13:58:52.333" Title="State Space model for bouncing ball" Tags="&lt;control&gt;&lt;kinematics&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18077" PostTypeId="2" ParentId="18076" CreationDate="2019-01-22T14:28:14.373" Score="5" Body="&lt;p&gt;Matrix notation in general is nice because of how compactly you're able to write and especially read everything, similar to using descriptive variable names in programming or performing algebra with variables instead of values with units. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your case, state space notation typically has the state vector &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; that is comprised of a &quot;list&quot; of derivatives. This is the result of decomposing a higher order differential equation into a set of coupled first order differential equations. In your case, it looks like you have a height &lt;span class=&quot;math-container&quot;&gt;$h$&lt;/span&gt; as a state, with a first derivative:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;x = \left[\begin{matrix}&#xA;h \\&#xA;\dot{h}&#xA;\end{matrix}\right]&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you take the derivative of your state vector &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt;, you get &lt;span class=&quot;math-container&quot;&gt;$\dot{x}$&lt;/span&gt;, which is equivalent to:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{x} = \left[\begin{matrix}&#xA;\dot{h} \\&#xA;\ddot{h}&#xA;\end{matrix}\right]&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically, everyone gets an extra &quot;dot&quot; (derivative). Now the thing to do is to find expressions for &lt;span class=&quot;math-container&quot;&gt;$\dot{x}$&lt;/span&gt; in terms of &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, for the first entry in &lt;span class=&quot;math-container&quot;&gt;$\dot{x}$&lt;/span&gt;, &lt;em&gt;in terms of a value from the state vector &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt;&lt;/em&gt;, you can only say:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{h} = \dot{h}\\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since &lt;span class=&quot;math-container&quot;&gt;$\dot{h}$&lt;/span&gt; is the second entry in the state vector &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt;, you would write that as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{h} = \left[\begin{matrix}&#xA;0 &amp;amp; 1 &#xA;\end{matrix}\right] x \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Again, remember that &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; is really equal to &lt;span class=&quot;math-container&quot;&gt;$\left[\begin{matrix} h\\\dot{h}\end{matrix}\right]$&lt;/span&gt;, and so you are saying:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{h} = \left[\begin{matrix}&#xA;0 &amp;amp; 1 &#xA;\end{matrix}\right] \left[\begin{matrix} h\\\dot{h}\end{matrix}\right] \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you multiply that out, you get:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{h} = \left(0*h\right) + \left(1*\dot{h}\right) \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;which obviously then is the same as &lt;span class=&quot;math-container&quot;&gt;$\dot{h} = \dot{h}$&lt;/span&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Great!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, to the second entry in &lt;span class=&quot;math-container&quot;&gt;$\dot{x}$&lt;/span&gt;, again &lt;em&gt;in terms of a value from the state vector &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt;&lt;/em&gt;, well.... the second entry in &lt;span class=&quot;math-container&quot;&gt;$\dot{x}$&lt;/span&gt;, which is &lt;span class=&quot;math-container&quot;&gt;$\ddot{h}$&lt;/span&gt;, doesn't have anything to do with either entry in &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt;!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead, the expression for &lt;span class=&quot;math-container&quot;&gt;$\ddot{h}$&lt;/span&gt; is just &lt;span class=&quot;math-container&quot;&gt;$\ddot{h} = -g$&lt;/span&gt;; that is, the vertical acceleration is just gravity. But, you have to include the values from &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt;, which means you have to explicitly state that you aren't using any:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\ddot{h} = \left[\begin{matrix} 0 &amp;amp; 0 \end{matrix}\right] \left[\begin{matrix} h \\ \dot{h} \end{matrix}\right] + \left(-g\right) \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, go back to the expression for the first entry in &lt;span class=&quot;math-container&quot;&gt;$\dot{x}$&lt;/span&gt;, and be more explicit that you aren't using any constants:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{h} = \left[\begin{matrix} 0 &amp;amp; 1 \end{matrix}\right] \left[\begin{matrix} h \\ \dot{h} \end{matrix}\right]  + 0 \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you write the two equations together, then you see that you get:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{h} = \left[\begin{matrix} 0 &amp;amp; 1 \end{matrix}\right] \left[\begin{matrix} h \\ \dot{h} \end{matrix}\right]  + 0 \\&#xA;\ddot{h} = \left[\begin{matrix} 0 &amp;amp; 0 \end{matrix}\right] \left[\begin{matrix} h \\ \dot{h} \end{matrix}\right]  + \left(-g\right) \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regroup it a little and you end up with the matrix notation from your slide:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\left[\begin{matrix} \dot{h} \\ \ddot{h} \end{matrix}\right] = \left[ \begin{matrix} 0 &amp;amp; 1 \\ 0 &amp;amp; 0 \end{matrix}\right] \left[\begin{matrix} h \\ \dot{h} \end{matrix}\right] + \left[ \begin{matrix} 0 \\ -g \end{matrix} \right] \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And again, if you let:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;x = \left[\begin{matrix} h \\ \dot{h} \end{matrix}\right] \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{x} = \left[\begin{matrix} \dot{h} \\ \ddot{h} \end{matrix}\right] \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And finally you can rewrite the matrix notation as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\boxed{\dot{x} = \left[ \begin{matrix} 0 &amp;amp; 1 \\ 0 &amp;amp; 0 \end{matrix}\right] x + \left[ \begin{matrix} 0 \\ -g \end{matrix} \right]} \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The other way to get there is to just start with the equation of motion:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\ddot{h} = -g \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That's it; the ball is only accelerating because of gravity. &lt;a href=&quot;https://en.wikibooks.org/wiki/Control_Systems/State-Space_Equations#From_Differential_Equations&quot; rel=&quot;nofollow noreferrer&quot;&gt;There's a technique to get to the state space equation from here&lt;/a&gt; that, like most other math/algebra stuff, will become second nature with practice. Essentially, re-write the equation to include the &quot;missing&quot; terms:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\ddot{h} + 0*\dot{h} + 0*h = -g \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And you have to know that you're trying to get to a final form of:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{x} = Ax + Bu\\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you rearrange and get a little closer:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\ddot{h} = -0*h - 0*\dot{h} - g \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously &lt;span class=&quot;math-container&quot;&gt;$-0 = +0 = 0$&lt;/span&gt;, but I'm just highlighting that the expression's getting rearranged. Now you can see that you have a constant of &lt;span class=&quot;math-container&quot;&gt;$-g$&lt;/span&gt;, and it looks like your state vector is then &lt;span class=&quot;math-container&quot;&gt;$\left[\begin{matrix} h \\ \dot{h} \end{matrix} \right]$&lt;/span&gt;. Now you can write:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\ddot{h} = \left[\begin{matrix} 0 &amp;amp; 0 \end{matrix}\right]\left[\begin{matrix} h \\ \dot{h} \end{matrix}\right] - g \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And here again it looks like you could say &lt;span class=&quot;math-container&quot;&gt;$x = \left[\begin{matrix} h \\ \dot{h} \end{matrix}\right]$&lt;/span&gt;, and if you're trying to get to:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{x} = Ax + Bu \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;then you need to figure out to write for the other terms in &lt;span class=&quot;math-container&quot;&gt;$\dot{x}$&lt;/span&gt;. First, define what &lt;span class=&quot;math-container&quot;&gt;$\dot{x}$&lt;/span&gt; is equal to:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{x} = \left[\begin{matrix} \dot{h} \\ \ddot{h} \end{matrix}\right] \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and you've already got the expression for &lt;span class=&quot;math-container&quot;&gt;$\ddot{h}$&lt;/span&gt;, so now you just need an expression for &lt;span class=&quot;math-container&quot;&gt;$\dot{h}$&lt;/span&gt; that fits in the framework. Again, this winds up with the trivial&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{h} = \dot{h} + 0 \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and you again wind up with:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\left[\begin{matrix} \dot{h} \\ \ddot{h} \end{matrix}\right] = \left[\begin{matrix} 0 &amp;amp; 1 \\ 0 &amp;amp; 0 \end{matrix}\right]\left[\begin{matrix} h \\ \dot{h} \end{matrix}\right] + \left[\begin{matrix} 0 \\ -g \end{matrix}\right] \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;or, again, &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{x} = \left[\begin{matrix} 0 &amp;amp; 1 \\ 0 &amp;amp; 0 \end{matrix}\right]x + \left[\begin{matrix} 0 \\ -g \end{matrix}\right] \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is like factoring polynomials, trig proofs, or any other skill - it's something that's awkward at first and only gets easier with practice. Hopefully this is all clear enough to show you how that particular expression was derived. If not, please leave a comment and I'll try to help clarify. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2019-01-28T13:58:52.333" LastActivityDate="2019-01-28T13:58:52.333" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18078" PostTypeId="1" CreationDate="2019-01-22T16:11:01.667" Score="1" ViewCount="69" Body="&lt;p&gt;I wanted to know what is the mathematical representation of 2D coordinate space with orientation in the same plane.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2D coordinate space is represented as &lt;span class=&quot;math-container&quot;&gt;$R^{2}$&lt;/span&gt;, how do I include orientation in the same? or is it included in it?&lt;/p&gt;&#xA;" OwnerUserId="20789" LastActivityDate="2019-01-22T16:49:52.200" Title="Representation of 2D coordinate space with orientation" Tags="&lt;mobile-robot&gt;&lt;path-planning&gt;&lt;geometry&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18079" PostTypeId="2" ParentId="18078" CreationDate="2019-01-22T16:44:33.807" Score="3" Body="&lt;p&gt;You need to resort to the &lt;a href=&quot;http://planning.cs.uiuc.edu/node147.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Special Euclidean groups&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In particular, in your planar case, the group is &lt;span class=&quot;math-container&quot;&gt;$SE\left(2\right)$&lt;/span&gt; and thus the representation is the following:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$&#xA;T=\left(\begin{matrix} R &amp;amp; v \\ \mathbf{0} &amp;amp; 1\end{matrix}\right),&#xA;$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where &lt;span class=&quot;math-container&quot;&gt;$R \in \mathbf{R}^{2\times2}$&lt;/span&gt; is the matrix accounting for the rotation, whereas &lt;span class=&quot;math-container&quot;&gt;$v \in \mathbf{R}^2$&lt;/span&gt; is the translation part.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore, if you want to roto-translate a point &lt;span class=&quot;math-container&quot;&gt;$p \in \mathbf{R}^2$&lt;/span&gt;, just do this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$&#xA;p'=T \cdot \left(\begin{matrix} p \\ 1\end{matrix}\right)&#xA;$&lt;/span&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, to invert this kind of transformations, have a look at this &lt;a href=&quot;https://robotics.stackexchange.com/q/7537/6941&quot;&gt;Q&amp;amp;A&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2019-01-22T16:49:52.200" LastActivityDate="2019-01-22T16:49:52.200" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18080" PostTypeId="2" ParentId="18076" CreationDate="2019-01-22T19:33:31.573" Score="4" Body="&lt;p&gt;From Newton's second law, we have &#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\sum F = m\ddot{h}&#xA;$$&lt;/span&gt;&#xA;Assume for simplicity the only force acts on the ball is the gravitational force &lt;span class=&quot;math-container&quot;&gt;$f_g$&lt;/span&gt; (i.e. for more accurate model, you may consider the drag force as well)&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\begin{align}&#xA;-f_g &amp;amp;= m\ddot{h} \\&#xA;-mg &amp;amp;= m\ddot{h} \\&#xA;\ddot{h} &amp;amp;= -g \tag{1}&#xA;\end{align}&#xA;$$&lt;/span&gt;&#xA;Eq.(1) is a second order differential equation. We need to convert it to a first order differential equation by introducing two variables as follows: &#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\begin{align}&#xA;x_1 &amp;amp;= h \tag{2} \\&#xA;x_2 &amp;amp;= \dot{h} \tag{3}&#xA;\end{align}&#xA;$$&lt;/span&gt;&#xA;Now differentiate Eq.(2) and Eq.(3) with respect to time, we get &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\begin{align}&#xA;\dot{x}_1 &amp;amp;= \dot{h} \tag{4} \\&#xA;\dot{x}_2 &amp;amp;= \ddot{h} \tag{5}&#xA;\end{align}&#xA;$$&lt;/span&gt;&#xA;From Eq.(3) and Eq.(4), we have &#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{x}_1 = \dot{h} = x_2&#xA;$$&lt;/span&gt;&#xA;From Eq.(1) and Eq.(5), we have &#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{x}_2 = \ddot{h} = -g &#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The new representation is now &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\begin{align}&#xA;\dot{x}_1 &amp;amp;= x_2  \\&#xA;\dot{x}_2 &amp;amp;= -g &#xA;\end{align}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a matrix-vector form, &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\begin{align}&#xA;\begin{bmatrix}&#xA;\dot{x}_1 \\ \dot{x}_2 &#xA;\end{bmatrix}&#xA;&amp;amp;= &#xA;\begin{bmatrix}&#xA;0 &amp;amp; 1 \\&#xA;0 &amp;amp;  0&#xA;\end{bmatrix}&#xA;\begin{bmatrix}&#xA;x_1 \\ x_2 &#xA;\end{bmatrix}&#xA;+&#xA;\begin{bmatrix}&#xA;0 \\ -g &#xA;\end{bmatrix}&#xA;\end{align}&#xA;$$&lt;/span&gt;&#xA;This is what in the presentation, however, a more correct model would be &#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\begin{align}&#xA;\underbrace{&#xA;\begin{bmatrix}&#xA;\dot{x}_1 \\ \dot{x}_2 &#xA;\end{bmatrix}&#xA;}_{\dot{x}}&#xA;&amp;amp;= &#xA;\underbrace{&#xA;\begin{bmatrix}&#xA;0 &amp;amp; 1 \\&#xA;0 &amp;amp;  0&#xA;\end{bmatrix}&#xA;}_{A}&#xA;\underbrace{&#xA;\begin{bmatrix}&#xA;x_1 \\ x_2 &#xA;\end{bmatrix}&#xA;}_{x}&#xA;+&#xA;\underbrace{&#xA;\begin{bmatrix}&#xA;0 \\ -1 &#xA;\end{bmatrix}&#xA;}_{B}&#xA;g&#xA;\end{align}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The system is now in this form: &#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{x} = Ax + Bu&#xA;$$&lt;/span&gt;&#xA;where &lt;span class=&quot;math-container&quot;&gt;$u=g$&lt;/span&gt; is the input of the system. In this case, the gravity is considered as an input that governs the ball's motion. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the output, we assume the height &lt;span class=&quot;math-container&quot;&gt;$h$&lt;/span&gt; is the output (i.e. it is an arbitrarily choice, we may choose the velocity &lt;span class=&quot;math-container&quot;&gt;$\dot{h}$&lt;/span&gt;), therefore, the output in the new representation is constructed as follows:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;y = &#xA;\underbrace{&#xA;\begin{bmatrix}&#xA;1 &amp;amp; 0 &#xA;\end{bmatrix}&#xA;}_{C}&#xA;\underbrace{&#xA;\begin{bmatrix}&#xA;x_1 \\ x_2 &#xA;\end{bmatrix}&#xA;}_{x}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;" OwnerUserId="2155" LastActivityDate="2019-01-22T19:33:31.573" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18081" PostTypeId="2" ParentId="18076" CreationDate="2019-01-22T19:37:41.063" Score="-1" Body="&lt;p&gt;g is added because it is needed for initializing the physics engine. Box2d takes before the first run a value which is usually -9.81 but the user can change it to 9.81 if is his coordinate system works different or he can use even zero gravity. In contrast, the term state space refers to the action space in which the overall system can be. For example, if the ball is at position=30,20 and then moves to 30,10 this has to do with the state space transition.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;import Box2D&#xA;g = 9.81&#xA;world = Box2D.b2World(gravity=(0,g), doSleep=True)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The matrix notation in the original posting is very illustrative, because it makes clear that bouncing balls have to do with mathematics and linear algebra. It is the lingua franca in science and should be used as much as possible to prevent the fuzzy logic enthusiasts from taking over our control-theory.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2019-01-22T19:37:41.063" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18083" PostTypeId="2" ParentId="18068" CreationDate="2019-01-23T06:43:03.113" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;For a particular topic, there is only one thread that all the&#xA;  subscribers share.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Each service callback does get its own thread because there can only&#xA;  be one service callback for a particular service.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Future versions of &lt;code&gt;rospy&lt;/code&gt; will likely have a different, more&#xA;  versatile threading model for subscriptions.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;rospy.spin()&lt;/code&gt; is a built-in asynchronous method in contrast with &lt;code&gt;roscpp::spin()&lt;/code&gt; which is single thread (&lt;code&gt;roscpp::AsyncSpinner()&lt;/code&gt; is async).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Callbacks in &lt;code&gt;rospy&lt;/code&gt; in general is they're essentially handled&#xA;  sequentially during calls to &lt;code&gt;Sleep&lt;/code&gt; and &lt;code&gt;Spin&lt;/code&gt;, meaning they're&#xA;  implicitly threadsafe and I can modify the same data from multiple&#xA;  callbacks within a node without locks or other safeguards.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Unfortunately, no. Unlike &lt;code&gt;roscpp&lt;/code&gt;, &lt;code&gt;rospy&lt;/code&gt; creates a new thread for every&#xA;  &lt;code&gt;Subscriber&lt;/code&gt; and &lt;code&gt;Timer&lt;/code&gt;. In fact, &lt;code&gt;rospy.spin()&lt;/code&gt; is just an infinite loop&#xA;  of half-second waits. As such, callbacks in &lt;code&gt;rospy&lt;/code&gt; are not threadsafe.&#xA;  You should use &lt;code&gt;locks&lt;/code&gt; in any &lt;code&gt;rospy&lt;/code&gt; node where multiple callbacks of any&#xA;  kind might interact.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="18870" LastActivityDate="2019-01-23T06:43:03.113" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18084" PostTypeId="2" ParentId="15454" CreationDate="2019-01-23T13:34:17.390" Score="0" Body="&lt;p&gt;Fuzzy logic is the weaker choice. It would make the robot no longer working. The better idea is to stay within the classical pid control paradigm which is based on mathematics and is teached in universities. Fuzzy logic was only a period in AI history which was restricted to japan in the 1990s and then it was forgotten, because the engineers have recognized that they need a different kind of controller in their robots.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a classical pid controlled line follower, the current situation is compared with the desired state. This is done by calculating the error value. The algorithm has to minimize the error value which is equal to move the robot closer to the line. This can be done with policy iteration which is a heuristic search technique in the state space. Another option is a neural network which can learn the policy with trial and error. That means the distance to the line is used as the error value, and the weights of the neural networks have to adjust to provide better control signals. This kind of neural network pid control is state of the art in robotics and will result into good results in professional robotics competitions.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2019-01-23T13:34:17.390" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18085" PostTypeId="2" ParentId="18044" CreationDate="2019-01-23T15:01:57.107" Score="8" Body="&lt;p&gt;&lt;strong&gt;Models.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to get good at control engineering, get good at modeling. If you want to impress a controls professor, get good at modeling. Models are how you're going to do 90 percent of your job, regardless of the controller style you choose to implement, so get good at modeling!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to try building a PID controller, &lt;em&gt;first build a model of the plant&lt;/em&gt; and then wrap the PID controller it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want a state feedback controller, &lt;em&gt;first build a model of the plant&lt;/em&gt; and then move the poles wherever you want. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Real machinery costs money, real process lines cost money to shutdown for testing and upgrades, real equipment has limited availability. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For me professionally, I wind up working a lot of long hours in remote locations, away from my family, and in the middle of the night because that's where the equipment is and that's the only time it's available for testing. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The best thing I can do for myself, for my employer, for the client, and for my family is to try to build a model of the system and design some model validation tests that can be used to determine if I have an &lt;em&gt;accurate&lt;/em&gt; model or not. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do some work in the office, make a brief trip to site for a validation test, then return to the office to develop the controller, then return to site to implement and test the controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Having good models minimizes the need for site visits, which is expensive for my company and takes me away from my family, and it minimizes the amount of time that we need to ask the client to take their equipment out of service. Better models means the controller is more likely to work correctly &quot;out of the box,&quot; which means it's more impressive for the client because I can show up and basically flip a switch and everything runs the way it's supposed to. I look more competent because I don't spend a lot of time making mistakes in front of the client (I do that back at the office, &lt;em&gt;with a software model&lt;/em&gt;, while I'm trying to develop the controller).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, it's a lot less expensive and/or scary to screw up a software model of a system than to screw up the actual system. Make your mistakes in software! Learn to model and the rest of control engineering is knowing which controller would probably work best and which book has the steps to implement it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unless you're doing some fundamental control research, modeling will definitely be the most challenging aspect of control engineering. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2019-01-23T15:01:57.107" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18087" PostTypeId="2" ParentId="16424" CreationDate="2019-01-24T00:21:20.233" Score="0" Body="&lt;p&gt;Basically the solution is to not try to reference where rob is.  What you do is create a notional starting point,and then develop a sensor that measures x&amp;amp;e coupled to a time sensor.  You can develop the notional starting points in time and “Tx&amp;amp;e” units.  Thus you know where you are once you arrive at a known position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So&#xA;NSP X T X x&amp;amp;e = CURRENT POSITION &amp;amp; TIME. Any changes in position applied from known current position gives us a constant position and also a vector&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Doesthathelp. Robin&lt;/p&gt;&#xA;" OwnerUserId="22134" LastActivityDate="2019-01-24T00:21:20.233" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18088" PostTypeId="1" CreationDate="2019-01-24T17:39:02.890" Score="1" ViewCount="835" Body="&lt;p&gt;I am writing a simple script for universal robots UR10 robotic arm. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am trying to find a way to to see if the tool current position is outside of a 3D bounding box. the 3D bounding box is defined in the coordinate system of the tool. (y is up, x right, z backwards).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;get_actual_tcp_pose()&lt;/code&gt; function returns the tool pose in the 'base frame' coordinate system. it is my understanding that this is the coordinate system where the origin is at the base of the robotic arm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my questions are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;How do I get the actual tcp pose in the TCP coordinate system (tool space)?&lt;/li&gt;&#xA;&lt;li&gt;Alternatively, how do I convert the pose returned by get_actual_tcp_pose() to the cooridnate system of the TCP using URScript?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="22143" LastActivityDate="2020-03-09T05:40:40.053" Title="URScript - how to get the actual TCP pose in tool space coordinate system?" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;motion-planning&gt;&lt;industrial-robot&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18092" PostTypeId="1" CreationDate="2019-01-25T18:42:12.857" Score="1" ViewCount="226" Body="&lt;p&gt;I have an old 980 that I want to turn into a create.  Is this possible?  I've seen some posts that seem to indicate that it is, and I'm wondering if there are any more up to date instructions on how to do this.  I'm strong on the programming side, but not so much on the hardware side.  Any help would be appreciated.&#xA;Thanks&lt;/p&gt;&#xA;" OwnerUserId="22149" LastActivityDate="2019-01-26T01:18:57.620" Title="turning a roomba 980 into a create" Tags="&lt;irobot-create&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18093" PostTypeId="1" CreationDate="2019-01-25T19:41:10.013" Score="2" ViewCount="70" Body="&lt;p&gt;Suppose I have two cameras &lt;span class=&quot;math-container&quot;&gt;$C_1$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$C_2$&lt;/span&gt; arranged in a stereo configuration. Let us assume that the camera is free of distortion with ideal intrinsics and that the camera extrinsics &lt;span class=&quot;math-container&quot;&gt;$R$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$t$&lt;/span&gt; are known. Let  &lt;span class=&quot;math-container&quot;&gt;$C_1$&lt;/span&gt; be the reference for the extrinsics of the system (i.e &lt;span class=&quot;math-container&quot;&gt;$R$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$t$&lt;/span&gt; are defined w.r.t to &lt;span class=&quot;math-container&quot;&gt;$C_1$&lt;/span&gt;). The two cameras have different focal lengths &lt;span class=&quot;math-container&quot;&gt;$f_{c_1}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$f_{c_2}$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ZzCsB.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZzCsB.jpg&quot; alt=&quot;stereo system&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, in order to calculate disparity given the images &lt;span class=&quot;math-container&quot;&gt;$I_1$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$I_2$&lt;/span&gt; of the cameras &lt;span class=&quot;math-container&quot;&gt;$C_1$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$C_2$&lt;/span&gt;, it is necessary that the images need to be rectified. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have understood rectification as making the the images captured lie in the same plane in space. The baseline of the stereo &lt;span class=&quot;math-container&quot;&gt;$b$&lt;/span&gt; is equal to the norm of the translation vector &lt;span class=&quot;math-container&quot;&gt;$t$&lt;/span&gt;. Let (&lt;span class=&quot;math-container&quot;&gt;$x_2$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$y_2$&lt;/span&gt;) be a pixel in the Image &lt;span class=&quot;math-container&quot;&gt;$I_2$&lt;/span&gt; and (&lt;span class=&quot;math-container&quot;&gt;$x_1$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$y_1$&lt;/span&gt;) a pixel in &lt;span class=&quot;math-container&quot;&gt;$I_1$&lt;/span&gt;. I would like to rectify Image &lt;span class=&quot;math-container&quot;&gt;$I_1$&lt;/span&gt; such that the it lies in the same plane as &lt;span class=&quot;math-container&quot;&gt;$I_2$&lt;/span&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let &#xA;&lt;span class=&quot;math-container&quot;&gt;$$P_1 = \begin{pmatrix}{x_1} \\{y_1} \\f_{c_1}\end{pmatrix}$$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$$P_2 = \begin{pmatrix}{x_2} \\{y_2} \\f_{c_2}\end{pmatrix}$$&lt;/span&gt;&#xA;Would it be correct to say a pixel &lt;span class=&quot;math-container&quot;&gt;$P_2$&lt;/span&gt; in &lt;span class=&quot;math-container&quot;&gt;$I_2$&lt;/span&gt; is given by:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$P_2 = \frac{f_{c_2}} {f_{c_1}}.(R.P_1 + t)$$&lt;/span&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;where &lt;span class=&quot;math-container&quot;&gt;$P_1$&lt;/span&gt; is a pixel in &lt;span class=&quot;math-container&quot;&gt;$I_1$&lt;/span&gt;? We could then extend this and write &#xA;&lt;span class=&quot;math-container&quot;&gt;$$ P_1 = R^T.(\frac{f_{c_1}} {f_{c_2}}P_2 - t)$$&lt;/span&gt; &#xA;and that &#xA;&lt;span class=&quot;math-container&quot;&gt;$$P_{1_{rectified}} = R^T.(\frac{f_{c_1}} {f_{c_2}}P_2 - t) + t $$&lt;/span&gt; since &lt;span class=&quot;math-container&quot;&gt;$t$&lt;/span&gt; defines the baseline in the stereo system&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/bjh3L.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/bjh3L.jpg&quot; alt=&quot;Rectified system&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would the difference between &lt;span class=&quot;math-container&quot;&gt;$P_{1_{rectified}}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$P_2$&lt;/span&gt; for all points &lt;span class=&quot;math-container&quot;&gt;$(x2, y2)$&lt;/span&gt; in &lt;span class=&quot;math-container&quot;&gt;$P_2$&lt;/span&gt; give me disparity? If not what would be the correct way to calculate disparity given the camera extrinsics and two cameras of different focal lengths. I have calculated the above expressions from my understanding of the geometry of the system. Please correct me if there are errors.&lt;/p&gt;&#xA;" OwnerUserId="15335" LastActivityDate="2019-01-25T19:41:10.013" Title="Stereo Rectification when Extrinsics are known" Tags="&lt;cameras&gt;&lt;stereo-vision&gt;&lt;calibration&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18094" PostTypeId="1" CreationDate="2019-01-25T23:50:18.503" Score="1" ViewCount="40" Body="&lt;p&gt;Is it possible to perform stereo-calibration with cameras having variable focus? and if so,  how is it done basically?&lt;/p&gt;&#xA;" OwnerUserId="18826" LastActivityDate="2019-01-25T23:50:18.503" Title="Stereo-Calibration with Variable focal cameras" Tags="&lt;cameras&gt;&lt;stereo-vision&gt;&lt;calibration&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18095" PostTypeId="2" ParentId="18092" CreationDate="2019-01-26T01:18:57.620" Score="3" Body="&lt;p&gt;Unfortunately, iRobot 900 series robots do not support the &quot;Open Interface&quot; spec that the Create uses.  It is only on 500, 600, 700, and 800 series models.  See this thread for more info: &lt;a href=&quot;https://robotics.stackexchange.com/questions/9495/what-irobot-products-support-the-open-interface-besides-the-irobot-create&quot;&gt;What iRobot products support the open interface besides the iRobot Create?&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2019-01-26T01:18:57.620" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18096" PostTypeId="1" AcceptedAnswerId="18097" CreationDate="2019-01-26T09:37:24.583" Score="1" ViewCount="212" Body="&lt;p&gt;I have been wondering does MIT cheetah purely only use electrical active compliance on it's robot or did they use a Series elastic actuator since they have this webbing tendon?&lt;/p&gt;&#xA;" OwnerUserId="21235" LastActivityDate="2019-01-29T05:06:11.690" Title="Does MIT Cheetah uses Series Elastic Actuator?" Tags="&lt;actuator&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18097" PostTypeId="2" ParentId="18096" CreationDate="2019-01-26T12:28:03.710" Score="3" Body="&lt;p&gt;It seems that the answer is that it doesn't actually use either of those designs.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to the paper &lt;a href=&quot;http://fab.cba.mit.edu/classes/865.18/motion/papers/mit-cheetah-actuator.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Proprioceptive Actuator Design in the MIT Cheetah: Impact Mitigation and High-Bandwidth Physical Interaction for Dynamic Legged Robots&lt;/a&gt; by Patrick M. Wensing &lt;em&gt;et al&lt;/em&gt;, the MIT Cheetah robot actually uses a &lt;em&gt;proprioceptive force-control actuator&lt;/em&gt; Design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The development and design principles that led to that design were described in the earlier paper &lt;a href=&quot;https://core.ac.uk/download/pdf/83225552.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Design Principles for Energy Efficient Legged Locomotion and&#xA;Implementation on the MIT Cheetah Robot&lt;/a&gt; by Sangok Seok &lt;em&gt;et al&lt;/em&gt;.&lt;/p&gt;&#xA;" OwnerUserId="17029" LastActivityDate="2019-01-26T12:28:03.710" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18098" PostTypeId="1" AcceptedAnswerId="18099" CreationDate="2019-01-27T15:23:52.583" Score="-1" ViewCount="370" Body="&lt;p&gt;I'm working on a robotic arm which uses 3x MG995 servo motors, 3x potentiometers (10k), and 1 Arduino Uno. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I uploaded the code to the Arduino but the servo won't stop. I want to control it with the rotation of the potentiometer knob. In other words, as I rotate the knob on the potentiometer the servo should rotate by the same angle. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But it won't work. What do I need to do to complete the function?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is my code..&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;Servo.h&amp;gt;&#xA;&#xA;//define our servos&#xA;Servo servo1;&#xA;Servo servo2;&#xA;Servo servo3;&#xA;Servo servo4;&#xA;&#xA;//define our potentiometers&#xA;int pot1 = A1;&#xA;int pot2 = A2;&#xA;int pot3 = A3;&#xA;int pot4 = A4;&#xA;&#xA;//variable to read the values from the analog pin (potentiometers)&#xA;int valPot1;&#xA;int valPot2;&#xA;int valPot3;&#xA;int valPot4;&#xA;&#xA;void setup()&#xA;{&#xA;  //attaches our servos on pins PWM 3-5-6-9 to the servos&#xA;  servo1.attach(3);&#xA;  servo1.write(0);  //define servo1 start position&#xA;  servo2.attach(5);&#xA;  servo2.write(90); //define servo2 start position&#xA;  servo3.attach(6);&#xA;  servo3.write(90); //define servo3 start position&#xA;  servo4.attach(9);&#xA;  servo4.write(70); //define servo4 start position&#xA;}&#xA;&#xA;void loop()&#xA;{&#xA;  //reads the value of potentiometers (value between 0 and 1023)&#xA;&#xA;  valPot1 = analogRead(pot1);&#xA;  valPot1 = map (valPot1, 0, 1023, 90, 180); //scale it to use it with the servo (value between 0 and 180)&#xA;  servo1.write(valPot1); //set the servo position according to the scaled value&#xA;&#xA;  valPot2 = analogRead(pot2);&#xA;  valPot2 = map (valPot2, 0, 1023, 0, 180);&#xA;  servo2.write(valPot2);&#xA;&#xA;  valPot3 = analogRead(pot3);&#xA;  valPot3 = map (valPot3, 0, 1023, 0, 180);&#xA;  servo3.write(valPot3);&#xA;&#xA;  valPot4 = analogRead(pot4);&#xA;  valPot4 = map (valPot4, 0, 1023, 0, 180);&#xA;  servo4.write(valPot4);&#xA;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="22162" LastEditorUserId="17029" LastEditDate="2019-01-28T12:39:32.963" LastActivityDate="2019-01-29T07:22:00.243" Title="how to control servo motor with potentiometer in arduino" Tags="&lt;arduino&gt;&lt;robotic-arm&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18099" PostTypeId="2" ParentId="18098" CreationDate="2019-01-27T18:48:41.533" Score="-1" Body="&lt;p&gt;Could you please upload a schematic of the circuit as well. There might be several possibilities for what could be wrong in your system. First try to pass some angle values to the servos and make sure that those are working correctly. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it's okay, try to read the inputs from potentiometers and print them in the Serial monitor. Observe the values in serial monitor while rotating the knobs and make sure that they are working well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These two are the most possible cases for the problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Make sure that the potentiometer is connected between the 5v and Gnd.&lt;/p&gt;&#xA;" OwnerUserId="21353" LastActivityDate="2019-01-27T18:48:41.533" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18102" PostTypeId="1" AcceptedAnswerId="18104" CreationDate="2019-01-28T17:58:08.180" Score="2" ViewCount="1160" Body="&lt;p&gt;I have a decoupled mechatronic system with two motors. I want for each motor to give a s-curve path as reference. You can see in the image below the position path, velocity and acceleration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/29k9l.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/29k9l.png&quot; alt=&quot;position, velocity and acceleration profile&quot;&gt;&lt;/a&gt;&#xA;All information that I have are extracted from these plots.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The way I have designed the system, the position is given as the reference. So I need the equations for it. From what I saw, this is what is referred to as a &quot;s-curve&quot; path. The way I understand it, the equation is broken down in to 4 different parts:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$0\le t\le 0.05$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$0.05&amp;lt;t\le 0.2$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$0.2&amp;lt;t\le 0.25$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$t&amp;gt;0.25$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This seems like a fairly standard equation but I have not  been able to find anything that works. I have tried to used the equations from &lt;a href=&quot;https://www.et.byu.edu/~ered/ME537/Notes/Ch5.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Constant Jerk Equations For A Trajectory Generator&lt;/a&gt;&lt;sup&gt;1&lt;/sup&gt; but the results where not the same. I also found &lt;a href=&quot;https://www.pmdcorp.com/resources/get/mathematics-of-motion-control-profiles-article&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mathematics of Motion Control Profiles&lt;/a&gt;, and maybe I don't understand it, but the equations found there do not seems to be enough for what I want.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anybody provide the correct equations (preferably in a generalized form, so I can apply them else where in the future) or some other help?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; From &lt;a href=&quot;https://www.et.byu.edu/~ered/ME537/Notes/notes.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;ME EN 537 - Advanced Mechanisms/Robotics &gt; Notes&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="10900" LastEditorUserId="37" LastEditDate="2019-01-29T17:02:10.667" LastActivityDate="2019-01-30T17:52:30.963" Title="What are the equations of a s-curve position path?" Tags="&lt;control&gt;&lt;motor&gt;&lt;stepper-motor&gt;&lt;motion&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="18103" PostTypeId="2" ParentId="18102" CreationDate="2019-01-28T19:20:09.940" Score="4" Body="&lt;p&gt;The S-Curve profile can have several divisions along the time axis &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;7 divisions as per this image. This example has a constant positive jerk zone, a constant acceleration zone, a constant negative jerk zone, a zero acceleration zone and then the vice-versa. This is the S-Curve in its most general form &lt;a href=&quot;https://i.stack.imgur.com/VDgLa.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/VDgLa.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;5 divisions if there exists no constant acceleration zones like &lt;em&gt;t1-t2&lt;/em&gt; and &lt;em&gt;t5-t6&lt;/em&gt; &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;4 divisions if there exists no constant velocity (zero acceleration zone) like &lt;em&gt;t3-t4&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;There are more possible cases that depend upon initial and final desired conditions and constraints on the positions, velocities, accelerations and jerks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While the equations are pretty straight forward, mentioned in this paper &lt;a href=&quot;https://pdfs.semanticscholar.org/b090/8986c0d43573a90f790c0480f6ec5c834262.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Jeong, Soon Yong, et al. &quot;Jerk limited velocity profile generation for high speed industrial robot trajectories.&quot; IFAC Proceedings Volumes 38.1 (2005): 595-600.&lt;/a&gt;&#xA;for almost all possible test cases, there are issues with constant jerks and other constraints that limit the feasibility of an S-curve. &lt;/p&gt;&#xA;" OwnerUserId="18572" LastEditorUserId="18572" LastEditDate="2019-01-30T17:52:30.963" LastActivityDate="2019-01-30T17:52:30.963" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18104" PostTypeId="2" ParentId="18102" CreationDate="2019-01-28T19:23:48.113" Score="3" Body="&lt;p&gt;To come up with a mathematical expression of the position reference &lt;span class=&quot;math-container&quot;&gt;$x\left(t\right)$&lt;/span&gt; as a function of time &lt;span class=&quot;math-container&quot;&gt;$t$&lt;/span&gt;, we can inspect the profile of the acceleration &lt;span class=&quot;math-container&quot;&gt;$a\left(t\right)$&lt;/span&gt;. It is piece-wise linear and defined as follows:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$&#xA;a\left(t\right)=\begin{cases} \Delta \cdot t, &amp;amp; t \in \left[0,0.025\right] \\&#xA;                 2000 - \Delta \cdot \left(t-0.025\right), &amp;amp; t \in \left[0.025,0.05\right] \\&#xA;                 0, &amp;amp; t \in \left[0.05,0.2\right] \\&#xA;                 -\Delta \cdot \left(t-0.2\right), &amp;amp; t \in \left[0.2,0.225\right] \\&#xA;                 -2000 + \Delta \cdot \left(t-0.225\right), &amp;amp; t \in \left[0.225,0.25\right] \\&#xA;                \end{cases},&#xA;$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where &lt;span class=&quot;math-container&quot;&gt;$\Delta=\frac{2000}{0.025} \cdot \frac{\text{mm}}{\text{s}^3}$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If we now integrate &lt;span class=&quot;math-container&quot;&gt;$a\left(t\right)$&lt;/span&gt; twice in &lt;span class=&quot;math-container&quot;&gt;$t$&lt;/span&gt;, we will get two expressions representing the velocity &lt;span class=&quot;math-container&quot;&gt;$v\left(t\right)$&lt;/span&gt; and the position &lt;span class=&quot;math-container&quot;&gt;$x\left(t\right)$&lt;/span&gt;, respectively, that contain &lt;span class=&quot;math-container&quot;&gt;$10$&lt;/span&gt; unknown constants in total. These unknowns can be easily retrieved if we guarantee that both &lt;span class=&quot;math-container&quot;&gt;$v\left(t\right)$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$x\left(t\right)$&lt;/span&gt; are continuous at the extrema of the time intervals given above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively, you may consider letting the machine do the integration for you, offline or in real-time, depending on your kind of application. Your code might look something like this:&lt;/p&gt;&#xA;&#xA;&lt;pre class=&quot;lang-cpp prettyprint-override&quot;&gt;&lt;code&gt;float get_acceleration(const float t) {&#xA;    // put here the code implementing the above &#xA;    // definition of the acceleration profile&#xA;&#xA;    float delta = 2000.0f / 0.025f;&#xA;    float a;&#xA;    if (t &amp;lt;= 0.025f) {&#xA;        a = delta * t;&#xA;    }&#xA;    else if (t &amp;lt;= 0.05f) {&#xA;        a = 2000.0f - delta * (t - 0.025);&#xA;    }&#xA;    // ...&#xA;    return a;&#xA;}&#xA;&#xA;int main() {&#xA;    float T = 0.001f;    // the integration time&#xA;    float v = 0.0f;      // the starting velocity &#xA;    float x = 0.0f;      // the starting position&#xA;    float t = 0.0f;      // the increasing time&#xA;&#xA;    while (t &amp;lt;= 0.25f) {      // the main control loop&#xA;        float a = get_acceleration(t);&#xA;        v += a * T;&#xA;        x += v * T;&#xA;        // use x to feed the motor controller&#xA;        // (or store it for later usage)&#xA;&#xA;        // make sure that you wait T seconds&#xA;        // to enforce the control rate (use e.g. a thread)&#xA;        t += T;&#xA;    }&#xA;    return 0;&#xA;}&#xA;```&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2019-01-29T14:40:11.523" LastActivityDate="2019-01-29T14:40:11.523" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18107" PostTypeId="2" ParentId="16003" CreationDate="2019-01-28T22:58:17.247" Score="2" Body="&lt;p&gt;From &lt;a href=&quot;http://design.ros2.org/articles/why_ros2.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In principle, the changes described above could be integrated into the&#xA;  existing core ROS code. E.g., new transport technologies could be&#xA;  added to roscpp and rospy. We considered this option and concluded&#xA;  that, given the intrusive nature of the changes that would be required&#xA;  to achieve the benefits that we are seeking, there is too much risk&#xA;  associated with changing the current ROS system that is relied upon by&#xA;  so many people. We want ROS 1 as it exists today to keep working and&#xA;  be unaffected by the development of ROS 2. So ROS 2 will be built as a&#xA;  parallel set of packages that can be installed alongside and&#xA;  interoperate with ROS 1 (e.g., through message bridges).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I don't see this happening soon, but I can imagine this happening in the future. For now, ROS 2 will be developed in parallel with ROS 1 and as such these are two different projects. As like other projects in the past (the one that comes to my mind is Python 2 vs Python 3) they are supported (including releases of new features) for a long period but at some point the community wants to focus on one. I think this will happen with ROS 2 once ROS 2 reach a stable and mature state and when most of the people start using ROS 2.&lt;/p&gt;&#xA;" OwnerUserId="18749" LastActivityDate="2019-01-28T22:58:17.247" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18113" PostTypeId="2" ParentId="18098" CreationDate="2019-01-29T07:16:23.437" Score="-1" Body="&lt;p&gt;&lt;strong&gt;In general&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I would be you I would first break down my code to a simple example only addressing a single servo instead of four at the same time. Then check if all the pins you use are capable of PWM by using a single servo on each output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Coding style&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your definition of the input pins looks weird to me:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;int  pinWhatever =  A1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I am not sure of the Arduino ide takes care of it but why not just using&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;int pinWhatever = 1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Other than that you are already following the basic example posted in &lt;a href=&quot;https://www.arduino.cc/en/Tutorial/Knob&quot; rel=&quot;nofollow noreferrer&quot;&gt;Servo Arduino Page&lt;/a&gt;. If you can't get it running with their minimal example and a single servo, check your hardware. &lt;/p&gt;&#xA;" OwnerUserId="15982" LastEditorUserId="15982" LastEditDate="2019-01-29T07:22:00.243" LastActivityDate="2019-01-29T07:22:00.243" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18114" PostTypeId="2" ParentId="16331" CreationDate="2019-01-30T15:27:37.613" Score="0" Body="&lt;p&gt;First of all, I am also new to the algorithm, so I might be wrong.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;There is no loop concept for this routine. Once your system has a new state, this will be run to produce a predicted state with information from previous state and motion model.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;As I understand, &lt;span class=&quot;math-container&quot;&gt;$\bar{\xi_t}$&lt;/span&gt; is the predicted information vector at time t. So it should be as the same dimension of your state vector, which might be (3+2N * 1).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The basic step of Kalman filter is an iterative process including two steps, predict and update. Only information matrix and information vector is maintained during the process. It includes the current pose and landmark information, and the relationship between them(not accurate term). As in the code, the input needed for the routine are &lt;span class=&quot;math-container&quot;&gt;$\xi_{t-1}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\Omega_{t-1}$&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="22198" LastEditorUserId="22198" LastEditDate="2019-01-30T15:44:20.083" LastActivityDate="2019-01-30T15:44:20.083" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18115" PostTypeId="1" CreationDate="2019-01-31T07:52:22.680" Score="1" ViewCount="83" Body="&lt;p&gt;I'm very new to Robotics, so please bear with my ignorance about the subject. That said, I'm trying to use Open Motion Planning Library (OMPL) to set up the configuration space for a robotic arm modeled after the human arm. In my model, the shoulder has 3 DOFs for translation and 3 DOFs for rotation. The elbow has only 1 DOF in rotation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What would the correct way to setup the state space in OMPL? I can think of the following ways:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Create a &lt;a href=&quot;http://ompl.kavrakilab.org/classompl_1_1base_1_1CompoundStateSpace.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;compound state space&lt;/a&gt; and add &lt;a href=&quot;http://ompl.kavrakilab.org/classompl_1_1base_1_1SE3StateSpace.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;span class=&quot;math-container&quot;&gt;$SE(3)$&lt;/span&gt;&lt;/a&gt; subspace (for shoulder translation and rotation) and &lt;a href=&quot;http://ompl.kavrakilab.org/classompl_1_1base_1_1SO2StateSpace.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;span class=&quot;math-container&quot;&gt;$SO(2)$&lt;/span&gt;&lt;/a&gt; subspace for elbow rotation.&lt;/li&gt;&#xA;&lt;li&gt;Create a &lt;a href=&quot;http://ompl.kavrakilab.org/classompl_1_1base_1_1RealVectorStateSpace.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;real vector state space&lt;/a&gt; &lt;span class=&quot;math-container&quot;&gt;$R^7$&lt;/span&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;My confusion comes from the fact that since different dimensions of my C state space will have different bounds then, correct me if I'm wrong, shouldn't those be normalized to a common range before distance computations? Otherwise, they'll contribute disproportionately to the distance. If OMPL does this automatically, will it do this for both &lt;span class=&quot;math-container&quot;&gt;$R^7$&lt;/span&gt; as well as the compound state space?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another source of confusion is that one also needs to assign weights to individual subspaces in the compound state space. What's the rationale for having weights? Is it just to prioritize some motions over the others?&lt;/p&gt;&#xA;" OwnerUserId="22114" LastActivityDate="2019-02-02T22:54:42.687" Title="Defining C-space state for an arm in OMPL" Tags="&lt;robotic-arm&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18118" PostTypeId="1" CreationDate="2019-02-01T03:40:53.587" Score="1" ViewCount="24" Body="&lt;p&gt;The EV3 brick turned off by itself (the battery is not low), we restarted it and the file finder was empty, all our files are not there right now. Have they disappeared from the brick forever or is there a way to restore them(without re-downloading)? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This has never happened before, what are some of the reasons this might happen?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We tried a reset with the very top, and center buttons, it did not return our files. &lt;/p&gt;&#xA;" OwnerUserId="17825" LastActivityDate="2021-05-21T03:01:15.107" Title="Mindstorms: EV3 Brick files vanished" Tags="&lt;mindstorms&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18119" PostTypeId="1" CreationDate="2019-02-01T13:09:08.003" Score="9" ViewCount="249" Body="&lt;p&gt;I am struggling with this problem for days. I really hope that someone could give me a hint what the problem is. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The robot consists of 5 axes. The first axis rotates around the z-axis and other 4 axes rotate around the y-axis. And the solver basically works.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is what I have done so far:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;I calculate the manipulability factor with my Jacobian matrix (only translational part, since only the position is tracked here. Actually, I also tried with a combined Jacobian matrix, so not only the translational part but also the rotational part. But jerky motion was there anyway): &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Y289c.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Y289c.gif&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Then the damping factor is: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/4yHvD.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4yHvD.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The damping factor is then integrated into the pseudo inverse calculation :&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/T883F.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/T883F.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can see, this is just a classical pseudo inverse kinematic solver with damped least square method. The manipulability factor according the second (problem) movement is : &#xA;&lt;a href=&quot;https://i.stack.imgur.com/tgReq.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tgReq.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;The manipulability drops in the beginning of the video. But why? As far as I know, this manipulability factor indicates the linear dependence of the axes. To me the axes don't seem to be linearly dependent in the beginning part.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This jerky motion drives me crazy. As you can see in the first animation, the solver seems to work properly. What am I missing here?&lt;/p&gt;&#xA;" OwnerUserId="21382" LastEditorUserId="21382" LastEditDate="2019-08-19T21:43:31.183" LastActivityDate="2019-08-19T21:43:31.183" Title="Singularity problem at Inverse kinematic solver" Tags="&lt;inverse-kinematics&gt;&lt;singularity&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18123" PostTypeId="2" ParentId="18119" CreationDate="2019-02-02T03:07:49.640" Score="0" Body="&lt;p&gt;I think you have introduced an algorithmic singularity at the first wrist axis.  It appears to me that, when it reaches 90 degrees “down,” that instead of going to 91 it tries to flip back through zero to -269 degrees.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course this is speculative without seeing the code. &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2019-02-02T03:07:49.640" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18124" PostTypeId="2" ParentId="18119" CreationDate="2019-02-03T13:50:47.093" Score="1" Body="&lt;p&gt;As others have already pointed out, there must be an issue with your implementation of the IK algorithm since there shall not be any singular behavior in the descriptions you gave.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now you have two alternatives: either you start off debugging the code or you might want to exploit the fact that the problem can be easily broken down in two subproblems for which you can readily employ the most part of the code written so far.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given the desired 3D target &lt;span class=&quot;math-container&quot;&gt;$\left( x_d,y_d,z_d \right)$&lt;/span&gt;, it's straightforward to observe that the desired value of the first joint is: &lt;span class=&quot;math-container&quot;&gt;$\theta_{1d}=\arctan\left( \frac{y_d}{x_d}\right)$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The control law to drive the first joint of the manipulator to &lt;span class=&quot;math-container&quot;&gt;$\theta_{1d}$&lt;/span&gt; can be as simple as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$&#xA;\dot{\theta_1}=K_1 \cdot \left( \theta_{1d}-\theta_{1} \right).&#xA;$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, let &lt;span class=&quot;math-container&quot;&gt;$R \in SO(3)$&lt;/span&gt; be the matrix that accounts for the rotation of &lt;span class=&quot;math-container&quot;&gt;$\theta_{1d}$&lt;/span&gt; around the &lt;span class=&quot;math-container&quot;&gt;$z$&lt;/span&gt; axis:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$&#xA;R = \left( \begin{array}{cccc}&#xA;    \cos{\theta_{1d}} &amp;amp; -\sin{\theta_{1d}} &amp;amp; 0 \\&#xA;    \sin{\theta_{1d}} &amp;amp; \cos{\theta_{1d}} &amp;amp; 0 \\&#xA;    0 &amp;amp; 0 &amp;amp; 1 \\&#xA;    \end{array} \right).&#xA;$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Through &lt;span class=&quot;math-container&quot;&gt;$R$&lt;/span&gt;, you'll get the new target &lt;span class=&quot;math-container&quot;&gt;$\left( x_d,0,z_d \right)_1=R^T \cdot \left( x_d,y_d,z_d \right)^T$&lt;/span&gt; that will establish a new IK 2D planar problem in the &lt;span class=&quot;math-container&quot;&gt;$xz$&lt;/span&gt; plane.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At this point, you can solve for &lt;span class=&quot;math-container&quot;&gt;$\left( x_d,z_d \right)_1$&lt;/span&gt; by using the Jacobian of the remaining 4-DOF manipulator.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2019-02-03T17:39:58.703" LastActivityDate="2019-02-03T17:39:58.703" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18125" PostTypeId="1" AcceptedAnswerId="18126" CreationDate="2019-02-04T07:11:58.637" Score="1" ViewCount="98" Body="&lt;p&gt;I am using 12 towerpro SG90 servos. What battery should I use for powering 12 servos for my arduino uno? Can i use the 12v battery, plug it in to 12v dc jack of arduino and tap the 5v output of arduino uno to power all the 12 servos? Is it enough to supply exact power for each servo?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Planning to use 5v powerbank, 12v battery or 2x 18650 battery (7.4v). &lt;/p&gt;&#xA;" OwnerUserId="22221" LastActivityDate="2019-02-04T08:19:27.660" Title="Powering servos for quadruped spiderbot using arduino uno" Tags="&lt;battery&gt;&lt;power&gt;&lt;current&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2019-02-07T17:38:53.020" ContentLicense="CC BY-SA 4.0" />
  <row Id="18126" PostTypeId="2" ParentId="18125" CreationDate="2019-02-04T08:19:27.660" Score="0" Body="&lt;p&gt;Arduino is micro-controller and not a raw power source. It should NEVER be used to supply power to any peripherals or sensors because even though the voltage at the GPIO pins is 5V, the current is only limited to 50 mA per pin and total of 200 mA. Thus, having 12 SG90 servos connected to the Arduino is not possible. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can use the 12 V battery and plug it into the 12V DC jack of the Arduino board to run the board. But, to power up the 12 servos, use the same 12V battery (assuming that it has a current capacity of around 3.0 - 4.0 A or more with a total of 5000 mAH capacity for enough duration) and connect it to a voltage regulator like LM 7805 to obtain 5V output for the servos. However, an LM 7805 IC has a current limitation of 1A and I found this &lt;a href=&quot;https://www.addicore.com/FS90-Mini-Servo-p/113.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;FEETECH (Fitec) FS90 9G Mini Servo with Accessories&lt;/a&gt; with specifications for the motor mentioning that the servo could be pretty current greedy at times. My best call would be to use one voltage regulator for 2 servos each and you should be good to go.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS - Do not forget to make Arduino's GROUND and the LM 7805 output GROUND common (not needed if the same battery source is used) otherwise the PWN signals sent from the Arduino to servos won't work.&lt;/p&gt;&#xA;" OwnerUserId="18572" LastActivityDate="2019-02-04T08:19:27.660" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18127" PostTypeId="2" ParentId="10941" CreationDate="2019-02-05T06:52:09.533" Score="4" Body="&lt;p&gt;Grid based FastSlam relies on the same principle that Landmakr based FastSlam. The difference is that we are not working with each grid cell as a landmark, but the whole gridmap itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For Grid based FastSlam, each particle updates its own grid-map using the data from the range sensor (Lidar, UltraSound, etc.) and its odometry. This is called &quot;Mapping with known poses&quot;, which is an easy problem (basically update the probability of a grid cell being occupied based on the data from the range sensor and the odometry, supposing the odometry data is totally correct). Then, and here is where the FastSlam algorithm plays its role, we compute the weight of each particle based on its own grid-map and the new measurements. With all the particles weighted, we then can do resampling. In fact, resampling will be only practical after loop-closings, since it is only when we can compare new data with our previously computed grid-maps. After that, we will keep only particles whose map was closer to reality, since the weight of that particles after resampling on loop-closings will be higher.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The steps would be similar to Landmark based Fastslam:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Get Data from sensors&lt;/li&gt;&#xA;&lt;li&gt;Estimate motion based on odometry measurements&lt;/li&gt;&#xA;&lt;li&gt;Estimate grid-map based on range measurements&lt;/li&gt;&#xA;&lt;li&gt;Compute Weight based on range measurements and grid-map&lt;/li&gt;&#xA;&lt;li&gt;Resample.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The difference between FastSlam and FastSlam2.0 is that in the motion estimation we will use also the range measurements to get a better estimate of the robot position after the movement (typically using scan-matching with Iterative Closest Points algorithms).&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Get Data from sensors&lt;/li&gt;&#xA;&lt;li&gt;Estimate motion based on odometry and range measurements&lt;/li&gt;&#xA;&lt;li&gt;Estimate grid-map based on range measurements&lt;/li&gt;&#xA;&lt;li&gt;Compute Weight based on range measurements and grid-map&lt;/li&gt;&#xA;&lt;li&gt;Resample.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="22210" LastActivityDate="2019-02-05T06:52:09.533" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18129" PostTypeId="1" CreationDate="2019-02-05T16:19:31.720" Score="2" ViewCount="2953" Body="&lt;p&gt;I have a robotic arm consist of three joints (servomotor for each joint), as shown in the figure below:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Mlffg.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Mlffg.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Notes: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each servomotor rotates around 180 degrees.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The angles of the theta2 and theta3 represent 90 degrees in the figure above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found the forward kinematics by using the parameters of DH convention, as shown in the figure above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Final Transformation Matrix is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/FdFyL.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FdFyL.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/dWWYv.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dWWYv.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The position of the robotic arm end-effector is correct for any angle of theta1, theta2, and theta3 between -90 and 90 degrees.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My problem is in the inverse kinematics of the robotic arm, where, the theta2 always affected by theta3 and thus the response of theta2 incorrect, while theta1 and theta3 are always correct. Please see the cases below that show this problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/nQaZg.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/nQaZg.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/fv22D.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fv22D.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you.&lt;/p&gt;&#xA;" OwnerUserId="22232" LastActivityDate="2019-02-23T21:45:37.390" Title="Inverse Kinematics Problem of Articulated Manipulators Arm" Tags="&lt;inverse-kinematics&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18130" PostTypeId="1" AcceptedAnswerId="18145" CreationDate="2019-02-05T18:29:01.557" Score="0" ViewCount="334" Body="&lt;p&gt;I'm thinking about how a quadcopter flight controller works, and I usually see that each motor speed is determined by a formula like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;speed_motor_1 = throttle + pitch_pid + roll_pid + yaw_pid&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This looks fine, but one thing I was considering is &lt;code&gt;throttle -&amp;gt; thrust&lt;/code&gt; is not so straightforward.&#xA;For instance, a quadcopter in horizontal position have propellers pointing up and the thrust may be X. If you pitch this quadcopter by 30 degrees, now the propellers vector force is inclined and thrust it is X*cos(30 degrees)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does that make sense? Is that something that must be taking into consideration when calculating &quot;throttle&quot; in the aforementioned formula?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="22234" LastActivityDate="2019-02-16T05:15:51.070" Title="How a quadcopter pitch/roll impacts thrust?" Tags="&lt;quadcopter&gt;&lt;pid&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18131" PostTypeId="2" ParentId="18129" CreationDate="2019-02-05T19:36:10.750" Score="-3" Body="&lt;p&gt;Calculating the forward kinematics with a mathematical equation is straight forward and recommended for all robotics arms. Trying to do the same with inverse kinematics results often in troubles. The problem is, that a given goal coordinate in the 3d space can be reached with different poses and during it's nonlinear nature it's not easy to find an explicit formula. The problem is, that a forward model can't be transformed into an inverse model by simply modifying the equation into a new one. Instead an approximate IK-solver is needed here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For realizing such a solver the forward model gets random values as input and the best node of the resulting graph is identified with the help of constraints. The principle is called monte carlo IK solver or sampling based ik solver and is a standard widget in animation programs like Blender.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Perhaps a short note at the end: even the problem looks easy to solve on the first look, inverse kinematics is one of the hardest problems in robotics control. Running into trouble is the normal case and Google Scholar provides many thousands of papers about the pros and cons of different solvlng techniques. For some researchers the problem is so hard, that they give up the idea of a kinematic chain at all and use a more simpler mechanic design which is a linear robot. Such a design can reach a point in the space with lower amount of calculations.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2019-02-05T19:36:10.750" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="18132" PostTypeId="2" ParentId="18129" CreationDate="2019-02-06T00:11:18.210" Score="1" Body="&lt;p&gt;I’ll get you started, and see if you can calculate all three joint angles given values for &lt;span class=&quot;math-container&quot;&gt;$X$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$Y$&lt;/span&gt;, and &lt;span class=&quot;math-container&quot;&gt;$Z$&lt;/span&gt;.   If you cannot, we can continue peeling the onion until you are able to do that.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will have to manipulate the expressions for &lt;span class=&quot;math-container&quot;&gt;$X$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$Y$&lt;/span&gt;, and &lt;span class=&quot;math-container&quot;&gt;$Z$&lt;/span&gt;, and use trigonometric identities to solve for the individual joint values.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Start with the easiest:  using the &lt;span class=&quot;math-container&quot;&gt;$X$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$Y$&lt;/span&gt; terms only, you should be able to write an expression that only involves th1.  It will be a tangent function that can be inverted to find th1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next, square the &lt;span class=&quot;math-container&quot;&gt;$X$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$Y$&lt;/span&gt; terms, and add them together.  This will eliminate th1 from the expression.   Subtract &lt;span class=&quot;math-container&quot;&gt;$Z$&lt;/span&gt; squared from the remaining terms.  You should be left with expressions of a constant times [cos(th2 + th3) cos(th2) + sin(th2 + th3) sin(th2)].   Using a trigonometric identity, this can be solved for th3 using the inverse cos function. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;See if you can get to this point, then try other manipulations to solve for (th2 + th3), which will get you the last value.   &lt;/p&gt;&#xA;" OwnerUserId="11125" LastEditorUserId="11125" LastEditDate="2019-02-06T00:16:59.823" LastActivityDate="2019-02-06T00:16:59.823" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18134" PostTypeId="1" CreationDate="2019-02-07T08:57:18.087" Score="0" ViewCount="214" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/07Eiq.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/07Eiq.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The length of the link is 50 cm and the arm moves 180 degrees. Can anyone help me?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Out of the cosine theorem, &lt;span class=&quot;math-container&quot;&gt;$d = \ell \sqrt{2\left(\ell-cos\right)}$&lt;/span&gt;, I calculated the distance traveled by a linear axis and the rotation arc through the rotation connection. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The circumfence is &lt;span class=&quot;math-container&quot;&gt;$2\pi R$&lt;/span&gt;. And &lt;span class=&quot;math-container&quot;&gt;$d$&lt;/span&gt;, for my drawing is &lt;span class=&quot;math-container&quot;&gt;$d=50\sqrt{2\left(50+1\right)}=50\sqrt{101}$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The distance is 502 cm and the rotation is 9000 cm. From here, I don't know what to do. I can't find any equation for the resolution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I only have the values that I said, and I need to determine the resolution for the control system, when an encoder of 8-bit is used. I don't have anything else..This is the whole exercise. I understand if it's not clear enough. It isn't for me, either.&lt;/p&gt;&#xA;" OwnerUserId="22247" LastEditorUserId="9720" LastEditDate="2019-02-07T16:15:03.533" LastActivityDate="2019-02-17T11:48:10.540" Title="I must determine the resolution of a control system when using an 8-bit encoder for a single-rotation joint" Tags="&lt;control&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18135" PostTypeId="2" ParentId="18134" CreationDate="2019-02-07T12:24:23.170" Score="4" Body="&lt;p&gt;I think I understand what you need. You have an arm (length L) rotating (a maximum of Θmax radians) around an axis (similar to the hand of a watch), and the motion is generated by some motor. The motor's position is read by an encoder with a resolution of 8 bits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We assume that the 8 bits cover the angles between 0 and 2*PI radians. In this case, the &lt;strong&gt;resolution of the encoder&lt;/strong&gt; is:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;resEnc=2*PI/(2^8)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The &lt;strong&gt;resolution of the angle of the arm&lt;/strong&gt; would be:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;res(Θ)=resEnc&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In the same way, the &lt;strong&gt;resolution of movement of the tip of the arm&lt;/strong&gt; is:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;resTip = l * res(Θ)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Note: we do not know how the motor is connected to the arm and we do not know how the encoder is connected tot he motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note2: I may have understood why &lt;code&gt;d&lt;/code&gt; is needed :D&lt;/p&gt;&#xA;" OwnerUserId="22248" LastEditorUserId="22248" LastEditDate="2019-02-07T12:39:18.177" LastActivityDate="2019-02-07T12:39:18.177" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="18136" PostTypeId="2" ParentId="4456" CreationDate="2019-02-07T17:23:28.647" Score="2" Body="&lt;p&gt;Multiple channels are time sliced onto &quot;one-wire&quot;.  The real wire count is usually three.  Typically there is a positive voltage wire (may not be there depending on whether both ends have their own power or not) and always a shared ground wire.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Perhaps 40-100 times per second the transmitter broadcast the settings of all controls which map to servos on something.  At the beginning of each broadcast, the voltage level on the output wire (the &quot;one-wire&quot;) is held low for a sync'ing low pulse.  After that, each servo gets a time slot.  Servo #1 gets the first time slot, servo #2, the second, and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope the illustration is clear.  Although my drawing only shows 1.0, 1.5 and 2.0ms time pulses any value between 1.0 and 2.0 is valid and correlates to &quot;proportional&quot; values at the servo (hence the &quot;proportional&quot; term once used to describe these).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/cxR3x.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/cxR3x.png&quot; alt=&quot;Basic RC Waveform&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="22253" LastActivityDate="2019-02-07T17:23:28.647" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18137" PostTypeId="1" CreationDate="2019-02-07T21:38:35.847" Score="0" ViewCount="50" Body="&lt;p&gt;I am in the midst of designing a humanoid robot, and I am very new at this technical stuff, but I have found servo motors which are capable of producing 500 kg.cm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I am looking at making a raspberry pi cluster for controlling the robot, running different python scripts on each cluster node.&#xA;I imagine one raspberry pi dedicated to getting a depth map by use of webcams, and another raspberry pi downloading the frames and recognizing objects in the frames, and then both raspberry pis creating a 3D map of the environment..&#xA;But how do I go about making a wireless cluster of raspberry pis which run node specific individual codes?&lt;/p&gt;&#xA;" OwnerUserId="22155" LastActivityDate="2019-02-07T22:30:23.607" Title="Humanoid robot with Raspberry pi" Tags="&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2019-02-11T19:48:14.940" ContentLicense="CC BY-SA 4.0" />
  <row Id="18138" PostTypeId="2" ParentId="18137" CreationDate="2019-02-07T22:30:23.607" Score="2" Body="&lt;p&gt;I don't say this negatively, but - that's a mouthful. I recommend subdividing the problem into smaller tasks that you can simulate first, to help you get a sense of the magnitude of what you're trying to do. Clustering RPis is one of the smallest problems on that list.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To answer your direct question, you would build networked service apps with those responsibilities, start the correct one on the correct node, and have them communicate with each other. You would need to also provide networking gear (a regular switch is easiest, maybe even gets you PoE) to link them together. You aren't really doing &quot;clustering&quot; in your model, you're just delegating responsibilities to different nodes.&lt;/p&gt;&#xA;" OwnerUserId="6782" LastActivityDate="2019-02-07T22:30:23.607" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18139" PostTypeId="1" AcceptedAnswerId="18142" CreationDate="2019-02-08T08:05:32.870" Score="3" ViewCount="63" Body="&lt;p&gt;I am studying the book &quot;B. Sicilliano -Robotics. Modelling, Planning and Control&quot; chapter 11, Input/output linearization topic. Where does the formula for theta in 11.75 come from?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the case of the unicycle, consider the following outputs:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$ y_1 = x + b cos θ; $&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$ y_2 = y + b sin θ $&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;with &lt;span class=&quot;math-container&quot;&gt;$ b \neq 0 $&lt;/span&gt;. They represent the Cartesian coordinates of a point B located along the sagittal axis of the unicycle at a distance |b| from the contact point of the wheel with the ground. How to find the following input-output linearization?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$ \dot{y_1} = u_1; $&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$ \dot{y_2} = u_2; $&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$ \dot{\theta} = \frac{u_2 \cos\theta − u_1\sin\theta}{b} $&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not very good at robotics, I would like to get an answer simple to understand. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you for all the help.&lt;/p&gt;&#xA;" OwnerUserId="22259" LastEditorUserId="22259" LastEditDate="2019-02-13T12:40:38.740" LastActivityDate="2019-02-13T12:40:38.740" Title="Input/output linearization" Tags="&lt;control&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18140" PostTypeId="1" CreationDate="2019-02-08T08:36:28.790" Score="0" ViewCount="44" Body="&lt;p&gt;I have got an electronic speed controller as pictured in the first image.&#xA;What kind of contacts are those on the left? The second image is a closeup.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;edit to clarify question&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am asking how to physically connect these contacts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are these pins or plugs?&#xA;Are they for soldering? If yes what is the advantage over just soldering two wires together.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/pnGNS.jpg&quot; alt=&quot;&quot;&gt;&#xA;&lt;img src=&quot;https://i.stack.imgur.com/LU1zP.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="11091" LastEditorUserId="11091" LastEditDate="2019-02-08T19:16:11.527" LastActivityDate="2019-02-09T18:39:46.603" Title="Identify contacts on wires of an electronic speed controller" Tags="&lt;esc&gt;&lt;wiring&gt;&lt;connector&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18142" PostTypeId="2" ParentId="18139" CreationDate="2019-02-08T10:52:26.357" Score="2" Body="&lt;p&gt;If you observe that &lt;span class=&quot;math-container&quot;&gt;$\omega = \dot{\theta}$&lt;/span&gt;, you can readily derive the equation at hand from:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$&#xA;\left[ \begin{array}{c} v \\ \omega \end{array} \right] = \&#xA;\left[ \begin{array}{cc} \cos\theta &amp;amp; \sin\theta \\&#xA;       -\sin\theta/b &amp;amp; \cos\theta/b \&#xA;       \end{array} \right] \&#xA;\left[ \begin{array}{c} u_1 \\ u_2 \end{array} \right].&#xA;$&lt;/span&gt;&lt;/p&gt;&#xA;" OwnerUserId="6941" LastActivityDate="2019-02-08T10:52:26.357" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18143" PostTypeId="1" CreationDate="2019-02-08T11:41:06.043" Score="1" ViewCount="71" Body="&lt;p&gt;I have found the inverse kinematics of a spherical wrist. The wrist is not attached to any other type of arm, it is the sole controller. Based on this IK solution, how can I generate a path plan for my robot? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as I understand, its motion is restricted to a spherical surface. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have seen examples for path planning for linear motion using parametric equations, but not for spherical motion. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that this is the Forward Jacobian &lt;a href=&quot;https://i.stack.imgur.com/77FLu.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/77FLu.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The J-1 Solution from MATLAB is written below.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    J_inv =&#xA;&#xA;[                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (cos(theta1)*cos(theta2))/(sin(theta2)*cos(theta1)^2 + sin(theta2)*sin(theta1)^2),                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           (cos(theta2)*sin(theta1))/(sin(theta2)*cos(theta1)^2 + sin(theta2)*sin(theta1)^2),                                                                                                                                                                                                                                                                                                         1]&#xA;[                                                                                                                                           (sin(conj(theta1))*(cos(conj(theta1))*cos(theta1) + cos(conj(theta1))*cos(conj(theta2))*cos(theta1)*cos(theta2) + sin(conj(theta1))*sin(conj(theta2))*sin(theta1)*sin(theta2)))/(sin(conj(theta2))*sin(theta2)*cos(conj(theta1))^2*cos(theta1)^2 + sin(conj(theta2))*sin(theta2)*cos(conj(theta1))^2*sin(theta1)^2 + sin(conj(theta2))*sin(theta2)*sin(conj(theta1))^2*cos(theta1)^2 + sin(conj(theta2))*sin(theta2)*sin(conj(theta1))^2*sin(theta1)^2) - (cos(conj(theta1))*(sin(conj(theta1))*cos(theta1) + cos(conj(theta2))*sin(conj(theta1))*cos(theta1)*cos(theta2) - cos(conj(theta1))*sin(conj(theta2))*sin(theta1)*sin(theta2)))/(sin(conj(theta2))*sin(theta2)*cos(conj(theta1))^2*cos(theta1)^2 + sin(conj(theta2))*sin(theta2)*cos(conj(theta1))^2*sin(theta1)^2 + sin(conj(theta2))*sin(theta2)*sin(conj(theta1))^2*cos(theta1)^2 + sin(conj(theta2))*sin(theta2)*sin(conj(theta1))^2*sin(theta1)^2),                                                                                                                                           (sin(conj(theta1))*(cos(conj(theta1))*sin(theta1) + cos(conj(theta1))*cos(conj(theta2))*cos(theta2)*sin(theta1) - sin(conj(theta1))*sin(conj(theta2))*cos(theta1)*sin(theta2)))/(sin(conj(theta2))*sin(theta2)*cos(conj(theta1))^2*cos(theta1)^2 + sin(conj(theta2))*sin(theta2)*cos(conj(theta1))^2*sin(theta1)^2 + sin(conj(theta2))*sin(theta2)*sin(conj(theta1))^2*cos(theta1)^2 + sin(conj(theta2))*sin(theta2)*sin(conj(theta1))^2*sin(theta1)^2) - (cos(conj(theta1))*(sin(conj(theta1))*sin(theta1) + cos(conj(theta1))*sin(conj(theta2))*cos(theta1)*sin(theta2) + cos(conj(theta2))*sin(conj(theta1))*cos(theta2)*sin(theta1)))/(sin(conj(theta2))*sin(theta2)*cos(conj(theta1))^2*cos(theta1)^2 + sin(conj(theta2))*sin(theta2)*cos(conj(theta1))^2*sin(theta1)^2 + sin(conj(theta2))*sin(theta2)*sin(conj(theta1))^2*cos(theta1)^2 + sin(conj(theta2))*sin(theta2)*sin(conj(theta1))^2*sin(theta1)^2),                                                                                                                                                                                                                                                                                                         0]&#xA;[ (cos(conj(theta1))*sin(conj(theta2))*(cos(conj(theta1))*cos(theta1) + cos(conj(theta1))*cos(conj(theta2))*cos(theta1)*cos(theta2) + sin(conj(theta1))*sin(conj(theta2))*sin(theta1)*sin(theta2)))/(sin(conj(theta2))*sin(theta2)*cos(conj(theta1))^2*cos(theta1)^2 + sin(conj(theta2))*sin(theta2)*cos(conj(theta1))^2*sin(theta1)^2 + sin(conj(theta2))*sin(theta2)*sin(conj(theta1))^2*cos(theta1)^2 + sin(conj(theta2))*sin(theta2)*sin(conj(theta1))^2*sin(theta1)^2) - (cos(conj(theta2))*cos(theta1)*cos(theta2))/(sin(theta2)*cos(theta1)^2 + sin(theta2)*sin(theta1)^2) + (sin(conj(theta1))*sin(conj(theta2))*(sin(conj(theta1))*cos(theta1) + cos(conj(theta2))*sin(conj(theta1))*cos(theta1)*cos(theta2) - cos(conj(theta1))*sin(conj(theta2))*sin(theta1)*sin(theta2)))/(sin(conj(theta2))*sin(theta2)*cos(conj(theta1))^2*cos(theta1)^2 + sin(conj(theta2))*sin(theta2)*cos(conj(theta1))^2*sin(theta1)^2 + sin(conj(theta2))*sin(theta2)*sin(conj(theta1))^2*cos(theta1)^2 + sin(conj(theta2))*sin(theta2)*sin(conj(theta1))^2*sin(theta1)^2), (cos(conj(theta1))*sin(conj(theta2))*(cos(conj(theta1))*sin(theta1) + cos(conj(theta1))*cos(conj(theta2))*cos(theta2)*sin(theta1) - sin(conj(theta1))*sin(conj(theta2))*cos(theta1)*sin(theta2)))/(sin(conj(theta2))*sin(theta2)*cos(conj(theta1))^2*cos(theta1)^2 + sin(conj(theta2))*sin(theta2)*cos(conj(theta1))^2*sin(theta1)^2 + sin(conj(theta2))*sin(theta2)*sin(conj(theta1))^2*cos(theta1)^2 + sin(conj(theta2))*sin(theta2)*sin(conj(theta1))^2*sin(theta1)^2) - (cos(conj(theta2))*cos(theta2)*sin(theta1))/(sin(theta2)*cos(theta1)^2 + sin(theta2)*sin(theta1)^2) + (sin(conj(theta1))*sin(conj(theta2))*(sin(conj(theta1))*sin(theta1) + cos(conj(theta1))*sin(conj(theta2))*cos(theta1)*sin(theta2) + cos(conj(theta2))*sin(conj(theta1))*cos(theta2)*sin(theta1)))/(sin(conj(theta2))*sin(theta2)*cos(conj(theta1))^2*cos(theta1)^2 + sin(conj(theta2))*sin(theta2)*cos(conj(theta1))^2*sin(theta1)^2 + sin(conj(theta2))*sin(theta2)*sin(conj(theta1))^2*cos(theta1)^2 + sin(conj(theta2))*sin(theta2)*sin(conj(theta1))^2*sin(theta1)^2), (cos(conj(theta1))^2*cos(conj(theta2))*sin(conj(theta2)))/(sin(conj(theta2))*cos(conj(theta1))^2 + sin(conj(theta2))*sin(conj(theta1))^2) - cos(conj(theta2)) + (cos(conj(theta2))*sin(conj(theta1))^2*sin(conj(theta2)))/(sin(conj(theta2))*cos(conj(theta1))^2 + sin(conj(theta2))*sin(conj(theta1))^2)]&#xA;&#xA;&amp;gt;&amp;gt; &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="22261" LastEditorUserId="22261" LastEditDate="2019-02-10T22:38:52.540" LastActivityDate="2019-02-10T22:38:52.540" Title="Path Planning for Spherical Wrist (RRR)" Tags="&lt;inverse-kinematics&gt;&lt;path-planning&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18144" PostTypeId="2" ParentId="18140" CreationDate="2019-02-08T18:48:21.087" Score="1" Body="&lt;p&gt;In your second image, they look very much like the connectors used on the standard XT-60 connector which are design to be soldered onto.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/vb4Xj.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vb4Xj.jpg&quot; alt=&quot;XT-60 connector&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;edit:&#xA;To clarify, I'm not saying to use an XT-60, just that they are a similar design. For help with soldering these have a look at &lt;a href=&quot;http://www.mindsensors.com/blog/how-to/tutorial-soldering-xt60-connectors&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.mindsensors.com/blog/how-to/tutorial-soldering-xt60-connectors&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="21215" LastEditorUserId="21215" LastEditDate="2019-02-08T18:55:44.960" LastActivityDate="2019-02-08T18:55:44.960" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18145" PostTypeId="2" ParentId="18130" CreationDate="2019-02-08T19:05:37.087" Score="0" Body="&lt;p&gt;The simple answer is yes, to maintain level flight when pitched forward you need more throttle than when not moving forward.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This can be seen from the a simple force diagram.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/fLurN.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fLurN.png&quot; alt=&quot;Thrust vs weight vs drag&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A corollary to this is that the maximum forward speed is when full trust at the angle of the quad matches the weight.&lt;/p&gt;&#xA;" OwnerUserId="21215" LastActivityDate="2019-02-08T19:05:37.087" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18146" PostTypeId="2" ParentId="17949" CreationDate="2019-02-08T20:05:42.273" Score="1" Body="&lt;p&gt;If going completely straight is the goal then you'll need more feedback than just the wheel speeds. Even if you could guarantee the wheels turned at exact same speed (say for instance they were attached together on the same axle) then it still wouldn't go in a straight line. Any tiny difference in wheel circumference or bump, crumb or surface change will move it off course. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A common approach to this problem is to use an IMU gyro. This gives you a reference for your heading and allows you to change motors speeds to correct.&lt;/p&gt;&#xA;" OwnerUserId="21215" LastActivityDate="2019-02-08T20:05:42.273" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18147" PostTypeId="2" ParentId="17949" CreationDate="2019-02-08T20:34:39.540" Score="1" Body="&lt;p&gt;You should use the individual wheel velocities at all times to compute the robot's heading and angular and linear velocity and super-impose another controller that works to correct the same. This could be a PID that works on the desired changed in angular velocity of the robot which you could reduce down to each individual wheels. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Making both the wheels reach the desired speed at the same time would not be possible because, they are two different wheels with different performance. You should rather aim to solve the larger problem and obtain its dependency on each individual wheel. I believe this picture could be of some reference.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Xyj7c.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Xyj7c.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18572" LastActivityDate="2019-02-08T20:34:39.540" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18149" PostTypeId="1" AcceptedAnswerId="18191" CreationDate="2019-02-09T09:44:24.280" Score="1" ViewCount="976" Body="&lt;p&gt;So I have an Adafruit pca9685 controlling an HSB-9380TH servo and a MG-996R servo. I recently began learning about building robot so I apologize if these questions seem dumb. I literally spent a days trying to google for answers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have two 3.7V lithium ion batteries in series connected directly to the V+ and GND PCB terminal on my Adafruit. This should give me 7.4V directly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So this setup works to control my MG-996R but my HSB-9380 isn't moving at all for some reason. I assume it's because the HSB-9380 is probably more power consuming I would expect. I can't get seem to get my HSB-9380 to work or even move. I suspect that li-on batteries are not strong enough to drive the HSB-9380TH and I need to switch to lipo batteries. The manual for my HSB-9380 says that the stall current is 2.3 Amps. Shouldn't lithium ion batteries be sufficient?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm running the MG-996R on 50z with a PWM range of 150-650. I tried running the HSB-9380TH on a range of 1100-1900 as well as on 150-650.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I have a few questions. If you could answer the ones you know about, I would really appreciate it.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Do you know why my HSB servo isn't working?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;How much current can a Lion battery output?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Should I connect the battery directly to the Adafruit PCA-9380 or do I need to protect it with a resistor? Or do I need to connect the battery to a voltage regulator to the Adafruit PCA-9380?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Can I connect a battery directly to the V+ and GND female connectors of a servo or would this fry my servo because there's no resistor preventing a short circuit? Would I need a voltage regulator or some other component in the middle?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Is it safe to drive different servo motors off the Adafruit PCA-9380 or should I make sure they are all the same type?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Is there a way to power the HSB-9380TH off lithium ion batteries. I prefer to use lithium ion because they can last longer than lipo.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;How much current can generic breadboard jumper cables transmit?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="22067" LastActivityDate="2019-02-15T09:19:38.987" Title="How should I power my servo motor with the Adafruit PCA9685 chip?" Tags="&lt;servomotor&gt;&lt;battery&gt;&lt;power&gt;&lt;rcservo&gt;&lt;lithium-polymer&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="18150" PostTypeId="1" AcceptedAnswerId="18226" CreationDate="2019-02-09T13:47:38.133" Score="-1" ViewCount="63" Body="&lt;p&gt;With the Meccano toy it is possible to construct a variety of useful machines. For example a knitting machine, a loom or a steam engine. What these machines have in common is, that they are doing productive work, running fully autonomous and doesn't need a microcontroller or software. On to other hand, robotics are marketed as autonomous systems which will increase the productivity in industry, but most robotics projects who are trying to do so have failed. For example the “Halle 54” project at VW, or the Baxter robot from Rethink robotics, or the Unimation hospital robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If meccano like mechanical machines are a great choice for mass automation and robotics project failed to do the same job is maybe the connection between robotics and automation wrong? I mean, who is responsible for the image of robots as a highly productive worker? Is this perhaps only a story and has nothing to do with reality?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or let me ask the question from the other side, because the danger of misunderstanding is high. Robotics were sold by robotics companies as a technology which will increase the productivity, lower the costs and replace human workers. The idea is, that either humans or robots will work in the factory. That means from a marketing perspective robots are sold as an automation tool. Is this outlook about robotics wrong? Have robots a different kind of social role in future society?&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2019-02-18T13:10:47.107" Title="Is robotics and automation a contradiction?" Tags="&lt;research&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="18151" PostTypeId="2" ParentId="18140" CreationDate="2019-02-09T18:39:46.603" Score="0" Body="&lt;p&gt;The one shown in the second image is a type of a bullet connector. If you consider the whole ESC, the black 3 wires goes to brushless motor. Red and black wires on the other side goes to the battery. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The advantage of using bullet connectors is you can unplug the ESC from a motor anytime. This has several uses like,&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Test several motors with one ESC. &lt;/li&gt;&#xA;&lt;li&gt;Change a damaged motor from the system without taking the ESC out. &lt;/li&gt;&#xA;&lt;li&gt;Reverse the motor when needed.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;There is nothing wrong with soldering wires directly if you don't have above concerns. &lt;/p&gt;&#xA;" OwnerUserId="21353" LastActivityDate="2019-02-09T18:39:46.603" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18152" PostTypeId="2" ParentId="17967" CreationDate="2019-02-09T22:41:04.743" Score="0" Body="&lt;p&gt;&lt;a href=&quot;https://www.nist.gov/publications/4drcs-version-20-reference-model-architecture-unmanned-vehicle-systems&quot; rel=&quot;nofollow noreferrer&quot;&gt;4D/RCS&lt;/a&gt;  is a more complicated system. I recall that there were only a couple systems implementing it that had publications written. It's the most comprehensive system design I've seen published. I know of others but they are not as well documented.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Understanding the RCS approach and how FSMs fit (or don't) within will definitely give you a better understanding of the pros and cons of FSMs.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2019-02-09T22:41:04.743" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18154" PostTypeId="1" CreationDate="2019-02-10T17:00:49.463" Score="0" ViewCount="64" Body="&lt;p&gt;As far as I understand the joint encoders output the angle and the wheel encoders output speed. Is that accurate? In either case, how do the differences affect the kinematic calculations, as in path planning, trajectory tracking and motion control?&lt;/p&gt;&#xA;" OwnerUserId="22259" LastActivityDate="2019-03-13T01:00:45.127" Title="What are the differences between wheel and manipulator joint encoders?" Tags="&lt;sensors&gt;&lt;joint&gt;&lt;wheel&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18155" PostTypeId="1" AcceptedAnswerId="18165" CreationDate="2019-02-10T18:23:56.133" Score="2" ViewCount="71" Body="&lt;p&gt;Say, we are dealing with an odometric localization problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the below example, &lt;span class=&quot;math-container&quot;&gt;$(x_k, y_k), (x_l, y_l)$&lt;/span&gt; are cartesian coordinates of the sensor and the landmark respectively. Then the output equation is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$z_k = atan2(y_k − y_l, x_k − x_l)$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is the following the correct way of linearizing this equation?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$H_{k+1} = (\frac{−(\hat{y}_{k+1|k} − y_l)}{(\hat{x}_{k+1|k} − x_l)^2 + (\hat{y}_{k+1|k} − y_l)^2}  \frac{(\hat{x}_{k+1|k} − x_l)}{(\hat{x}_{k+1|k} − x_l)^2 + (\hat{y}_{k+1|k} − y_l)^2})$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can you provide other resources and examples to practice?&lt;/p&gt;&#xA;" OwnerUserId="22259" LastEditorUserId="22259" LastEditDate="2019-02-11T14:48:41.587" LastActivityDate="2019-02-11T20:58:52.863" Title="extended kalman filters, linearization of output" Tags="&lt;ekf&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18156" PostTypeId="2" ParentId="18154" CreationDate="2019-02-11T00:42:47.597" Score="2" Body="&lt;p&gt;Encoders used in wheels and manipulator joints are essentially the same. It is the post-processing pipeline that changes their usage and significance. These encoders basically sense the rotational motion. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;All optical encoders or magnetic encoders or hall effect encoders record the amount of rotation that occurred in a fixed time. Generally, a magnetic or hall effect sensor has a resolution of somewhere around 12 bits (2^12 = 4096 ticks per revolution = ~0.087 degrees) or higher.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Encoders used for join angle measurement sum the number of ticks obtained per in a definite period of time to measure the motion of the joint. This is added to the existing multi-turn count to express the absolute value of joint angular position.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, for wheel encoders, they obtain the number of ticks and then divide it by the amount of time passed to express the same result as joint angular velocity. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sometimes, depending upon the sensitivity and desired accuracy needed in the task, different kinds of encoders may be used. Because robot wheels are expected to rotate faster and continuously gaining multi-turns, one could expect encoders with somewhere around 10-12 bit resolution for them while given that a manipulator arm needs more accuracy and precision, they could have resolutions as high as 16 bits. &lt;/p&gt;&#xA;" OwnerUserId="18572" LastActivityDate="2019-02-11T00:42:47.597" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18158" PostTypeId="1" AcceptedAnswerId="18170" CreationDate="2019-02-11T04:51:53.480" Score="0" ViewCount="101" Body="&lt;p&gt;i had search over google and found out more or less some sensor that i could use like &lt;strong&gt;&lt;em&gt;sonar, gyroscope, accelerometer,magnetometer and gps and 2d lidar&lt;/em&gt;&lt;/strong&gt; (which is less expensive, around $300) &#xA;i have cost budget so i couldnt go for those expensive devices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;im new to robotic. thus i want to ask for some recommendation.&#xA;i want to build a robot which satisfied these following feature&#xA;&lt;a href=&quot;https://i.stack.imgur.com/MXgf2.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MXgf2.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;works on outdoor. look at the image above with some description here:&#xA;blue line is the border.&#xA;red line is the path.&#xA;black line is the building.&lt;/li&gt;&#xA;&lt;li&gt;when the robot at point A, and i input point B. the robot should be able to find a path from point A to B&lt;/li&gt;&#xA;&lt;li&gt;if point x is blocked, it should be able to find a way to point B via point Y&lt;/li&gt;&#xA;&lt;li&gt;ground is not flat. thus there might be need sense some higher ground level to avoid collision and recalculate the position of the robot&lt;/li&gt;&#xA;&lt;li&gt;works on day and night&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;therefore, my question is:&lt;/strong&gt;&#xA;what is the best device/sensor i should get to satisfy my features above.&#xA;or probably any technique i could use?&#xA;Please kindly share with me. maybe there is something i miss out on my research&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Gps is good but the error is around 6m.. that is too large&#xA;fusion of gyroscope, accelerometer, magnetometer to get a correct position and direction is kinda difficult(oblu maybe)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;founding:&#xA;i found 2 device that could help me with that&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;ZED stereo camera which works on 0.5m up to 20m.($499)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Intel RealSense 435i which works 0.1m up to 10m with IR.($200)&#xA;both are not working so good in dark area even with IR. but i think a lighting could be installed to help with that&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;any other device recommendation ?&lt;/p&gt;&#xA;" OwnerUserId="22260" LastEditorUserId="22260" LastEditDate="2019-02-11T09:05:16.453" LastActivityDate="2019-02-12T10:23:23.817" Title="outdoor autonomous robot" Tags="&lt;mobile-robot&gt;&lt;sensors&gt;&lt;localization&gt;&lt;sensor-fusion&gt;" AnswerCount="2" CommentCount="4" ClosedDate="2019-02-12T13:00:01.127" ContentLicense="CC BY-SA 4.0" />
  <row Id="18159" PostTypeId="1" CreationDate="2019-02-11T05:38:50.780" Score="2" ViewCount="119" Body="&lt;p&gt;So I am fairly new to robotics however I do have some background with the python coding language. Recently I set myself the task of learning some basics for robotics just to increase my knowledge base.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is about micro-controllers and specifically if I need to buy a certain type of microcontroller to be able to program with the python language. Also are there any recommended python libraries or starting points for robotics with python? I apologize if this question is a bit broad or not well formed as I am very new to understanding microcontrollers. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you&lt;/p&gt;&#xA;" OwnerUserId="22275" LastActivityDate="2019-03-14T19:44:36.397" Title="Microcontrollers and Python" Tags="&lt;microcontroller&gt;&lt;python&gt;&lt;beginner&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18160" PostTypeId="1" CreationDate="2019-02-11T05:56:36.813" Score="0" ViewCount="359" Body="&lt;p&gt;How do I create something like a class and have instances of it in ABB RAPID language?&lt;/p&gt;&#xA;" OwnerUserId="20882" LastActivityDate="2019-02-11T14:58:30.843" Title="ABB Object Oriented RAPID language" Tags="&lt;programming-languages&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18161" PostTypeId="1" CreationDate="2019-02-11T12:03:30.580" Score="0" ViewCount="96" Body="&lt;p&gt;I would appreciate if someone could assist me in compiling webots source for Python 3.6 to allow me and others to use TensorFlow with it. I already tried but apparently there is something not mentioned about a missing step. Thanks &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Link:&#xA;&lt;a href=&quot;https://github.com/omichel/webots/issues/105&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/omichel/webots/issues/105&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="15791" LastActivityDate="2019-02-11T12:03:30.580" Title="Compile webots for Python 3.6 for Windows" Tags="&lt;simulation&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18163" PostTypeId="2" ParentId="18160" CreationDate="2019-02-11T14:39:01.023" Score="1" Body="&lt;p&gt;In &lt;a href=&quot;https://library.e.abb.com/public/688894b98123f87bc1257cc50044e809/Technical%20reference%20manual_RAPID_3HAC16581-1_revJ_en.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;reviewing the PDF for the RAPID language&lt;/a&gt;, it looks like you don't. I can't see anything online that states the RAPID language is object oriented. The manual doesn't even contain the word &quot;class&quot; once, and the language doesn't seem to support structures or methods. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2019-02-11T14:39:01.023" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18164" PostTypeId="2" ParentId="18160" CreationDate="2019-02-11T14:58:30.843" Score="0" Body="&lt;p&gt;Turns out the closest thing to a Struct is a RECORD&#xA;you can write:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;MODULE myModule&#xA;    RECORD myRecord&#xA;        pos a;&#xA;        num b;&#xA;        sring c;&#xA;    END RECORD&#xA;&#xA;    PROC main()&#xA;        myRecord{1,1}.a.x := 123;&#xA;        myRecord{1,2}.b := 1234;&#xA;    ENDPROC&#xA;ENDMODULE&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You can put a RECORD within a RECORD but you cannot put an array in a RECORD.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So RAPID is not object oriented&lt;/p&gt;&#xA;" OwnerUserId="20882" LastActivityDate="2019-02-11T14:58:30.843" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18165" PostTypeId="2" ParentId="18155" CreationDate="2019-02-11T16:00:08.437" Score="2" Body="&lt;p&gt;Hi and welcome to stack exchange: robotics edition.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Yes. Your derivation for the landmark update Jacobian is correct. If you are doing SLAM with respect to the landmarks, don't forget to form the Jacobian with respect to &lt;em&gt;all&lt;/em&gt; state variables, including the Robot's &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt; points.&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;What I mean is, if the state of the system is &lt;span class=&quot;math-container&quot;&gt;$x_r,y_r,x_t,y_t$&lt;/span&gt;, and the measurement equation is as shown, then the Jacbian of the measurement equation &lt;span class=&quot;math-container&quot;&gt;$H$&lt;/span&gt; is &lt;span class=&quot;math-container&quot;&gt;$[\frac{\partial h}{\partial x_r},\frac{\partial h}{\partial y_r}, \frac{\partial h}{\partial x_t},\frac{\partial h}{\partial y_t}]$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But ... (spoiler alert)&lt;/p&gt;&#xA;&#xA;&lt;blockquote class=&quot;spoiler&quot;&gt;&#xA;  &lt;p&gt; surprise, surprise, \frac{\partial h}{\partial x_r},\frac{\partial h}{\partial y_r} is the same as those two entries with a sign flip as you'll see.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Some complaints about the question center around the notation and steps. You are very clearly asking if you have formed the correct Jacobian matrix for the bearing measurement equation. But, that's not clear to everyone, so you may want to write a more thorough background of what you're trying to do, and what notation you're using. (If for no other reason than Google will pick it up better).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;If you want to practice forming Jacobian matrices, I suggest you choose  &lt;span class=&quot;math-container&quot;&gt;$n$&lt;/span&gt; functions of &lt;span class=&quot;math-container&quot;&gt;$m$&lt;/span&gt; variables, and practice taking partial derivatives. Use Wolfram Alpha to check the partials, and use the structure of a Jacobian from &lt;a href=&quot;https://en.wikipedia.org/wiki/Jacobian_matrix_and_determinant&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia&lt;/a&gt; to check the composition of the matrix. Robotics-specific examples are limited to &lt;span class=&quot;math-container&quot;&gt;$h$&lt;/span&gt;=range, bearing, or position estimates. So, &lt;span class=&quot;math-container&quot;&gt;$h=||r-l||$&lt;/span&gt;, the &lt;span class=&quot;math-container&quot;&gt;$atan2$&lt;/span&gt; example from above, and &lt;span class=&quot;math-container&quot;&gt;$h=(x_l,y_l)$&lt;/span&gt; are the best you can do.  You can always form the measurement function &lt;span class=&quot;math-container&quot;&gt;$h$&lt;/span&gt; as being to two or more landmarks simultaneously, as well.  This is not a good discussion for Robotics Stack Exchange, however.&lt;/p&gt;&#xA;" OwnerUserId="163" LastEditorUserId="163" LastEditDate="2019-02-11T20:58:52.863" LastActivityDate="2019-02-11T20:58:52.863" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18166" PostTypeId="1" CreationDate="2019-02-11T18:18:23.217" Score="0" ViewCount="106" Body="&lt;p&gt;I would like to control a system which orientation I measure with as quaternion based EKF in one degree of freedom. Obviously the simplest thing would be to convert the quaternion estimate to euler angles and take one of these. Unfortunately these euler angles are not stable. The other option I was thinking about was to use the so called quaternion error, where I specify another quaternion which I want my system to be controlled towards. Then I would have to specify all four values of this quaternion. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm wondering if there is a way to generate a quaternion error only for one of my angles? &lt;/p&gt;&#xA;" OwnerUserId="22280" LastEditorUserId="19143" LastEditDate="2019-02-12T09:24:44.670" LastActivityDate="2019-11-14T03:51:26.833" Title="Quaternion error in one degree of freedom" Tags="&lt;control&gt;&lt;imu&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18168" PostTypeId="1" CreationDate="2019-02-11T20:53:44.593" Score="0" ViewCount="1753" Body="&lt;p&gt;I am trying to compare the performance of an IMU in motion against an optical tracking system. The IMU has an accelerometer and a gyroscope and gives output in the local IMU coordinate frames. The optical tracking system outputs the position and orientation in the global coordinate frame. The IMU is moving.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need help in understanding how to compare the output of the IMU against the optical tracker.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Is this a common problem in robotics (comparing the output of a coordinate system against the output of another coordinate system and in my case, the IMU is moving)?&lt;/li&gt;&#xA;&lt;li&gt;How do I approach the issue?&lt;/li&gt;&#xA;&lt;li&gt;Are any standard libraries in Matlab or python to solve this? &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="22283" LastEditorUserId="2289" LastEditDate="2019-02-12T14:03:07.147" LastActivityDate="2019-02-16T05:09:46.300" Title="Convert local coordinates of a moving IMU to global coordinates" Tags="&lt;imu&gt;&lt;matlab&gt;&lt;gyroscope&gt;&lt;python&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18170" PostTypeId="2" ParentId="18158" CreationDate="2019-02-12T09:23:44.363" Score="0" Body="&lt;p&gt;This is a broad topic you've opened up here. My contribution:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;It all comes down of the robot specs. For example, is it a wheeled robot or a legged.? What size of terrain shall it explore? in the scale of meters, centimeters, tens of meters? etc... I think, you should write down all questions you could think of, that will help you specify your sensor options.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I think you need a redundant sensor system. For adequate precision it is inevitable. Multiple sensors that are inaccurate on their own, but combined they give accurate results. Also your sensor data and control data shall be piped through some sort of filtering algorithm to increase performance. It will gain complexity, but that is your tradeoff for accuracy.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You could for example have a nice IMU sensor, it provides 3D accelerometer and compass data. That you can use to determine your relative position, speed, acceleration.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Are you using a wheeled robot? You could use the wheel rotation to determine the relative path your robot has achieved. It may be really inaccurate, since the given terrain, wheel skidding etc.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If you have the two above you may as well can apply an IR or ultrasound sensor, to increase precision.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You still can use a cheap mono camera, to estimate speed and direction.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Also important, how you utilize your sensor data. Building a nice visual map based on the sensor data could help a lot in navigation. AI that can do some extra analysis on the shapes on the map.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Probably, most of the things above were also known for you, what I tried to show here is, that if you want to achieve high or just adequate performance, You can't get away with a simple mighty sensor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a concrete example: my master work was a multilegged robot with a single sweeping ultrasound sensor. It had an algorithm, that has built up a map based on the sensor input and run the analysis on it. It actually have solved relatively complex static and dynamic maze problems using the real robot hardware. But, it has flawed accuracy, caused by the monosensory and error in calculated position, that obviously can't reflect measured position, in case of a legged robot, without additional sensors.&#xA;I hope I can at least give you some ideas of thinking.&lt;/p&gt;&#xA;" OwnerUserId="18318" LastActivityDate="2019-02-12T09:23:44.363" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18171" PostTypeId="2" ParentId="18159" CreationDate="2019-02-12T10:07:42.037" Score="0" Body="&lt;p&gt;One of the simplest ways to get started with python and robots has to be the microbit: &lt;a href=&quot;https://microbit.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://microbit.org/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/qxNqi.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qxNqi.jpg&quot; alt=&quot;Microbit&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are many different robot platform which you can buy:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/Y6AuA.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Y6AuA.jpg&quot; alt=&quot;Legged Robot&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or with wheels:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/tjYz7.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tjYz7.jpg&quot; alt=&quot;Wheeled Robot&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="21215" LastActivityDate="2019-02-12T10:07:42.037" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18172" PostTypeId="2" ParentId="18158" CreationDate="2019-02-12T10:23:23.817" Score="0" Body="&lt;p&gt;The question is about the hardware of a robot. What is not asked is how to program a robot by software, this would be an Artificial Intelligence question. I belief, that software is more interesting but to answer the question we have to stay at the hardware side. Hardware and mechanics were invented in the 19th century during the industrial revolution. Toys from that area are sold under the brand name Meccano. If somebody likes to build physical robots or is interested in hardware devices, this is a reference. According to the website, Meccano robots have an infrared sensor as a standard sensor for detecting obstacles. This device can be used for indoor and outdoor problems as well. A dedicated outdoor infrared sensor is often named as laser/IR sensor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my recommendation is to focus only on one sensor type which is infrared and use this hardware for obstacle detection, navigation and pathplanning at the same time.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2019-02-12T10:23:23.817" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18174" PostTypeId="1" AcceptedAnswerId="18213" CreationDate="2019-02-12T19:40:34.227" Score="3" ViewCount="518" Body="&lt;p&gt;To expand on this, I have a down-facing camera using the &lt;a href=&quot;https://github.com/lrse/whycon&quot; rel=&quot;nofollow noreferrer&quot;&gt;whycon ROS node&lt;/a&gt; on Ubuntu 16.04 Kinetic on a quad-core computer with 640x480@60fps MJPG video. I'm also using the &lt;code&gt;usb_cam&lt;/code&gt; node to publish the &lt;code&gt;image_raw&lt;/code&gt;. I've noticed that the overall CPU consumption would already be above 90% for all 4 cores whenever I try to run just these 2 nodes. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I also want to add a secondary front-facing USB camera that will only be for streaming video to another computer. This secondary camera ideally should have a 1280x720 resolution. I tried to run both cameras at the same time, but the 1280x720 one is only at 10-12fps, which is too slow for my purposes. Additionally, it would be great if I can also have the whycon node to be using 1280x720, but I think the framerate should have a higher priority. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I realize that I can lower both resolutions to 640x480 and that should help with the framerate issue, but is that really the only way to ensure a smoother video?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also have a single USB 3.0 port and 2 USB 2.0 ports on my computer and I have plugged in the front-facing camera into the USB 3.0 port. I've also already ran &lt;code&gt;v4l2-ctl --list-formats-ext&lt;/code&gt; on my cameras (they are exactly the same) and they both are only capable of 60fps up to 1920x1080.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: A follow-up question I have is if it would be better to switch to a different computer with a better processor? What I'm currently using has the Intel Cherry Trail 1.8 Ghz Quadcore.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT2: @kaliatech If I run the front camera at 1280x720, I can get up to 34fps with 1 CPU core maxing out at 100% at a time and the rest at more or less 25%. If I run just the down-facing camera at 640x480, I can get up to 60fps with CPU usage around 55% for 1 core while the rest are less than 20%. If I have both the down-facing cam and the whycon node running, I still have 60fps from usb_cam but CPU usage maxes out at 100% and 70% for 2 cores. Finally, if I run all three, the down-facing cam remains the same in terms of framerate but the front-facing has around 12 fps and at least 2 cores max out with the rest at above 60%. At this point, I'm not currently transferring the videos through the network. I'm still conducting some tests on the local computer, but you would be right that it will be much worse on a slower network. I will try to use a different camera driver like &lt;code&gt;cv_camera&lt;/code&gt; but I think I skipped it since it seemed older than &lt;code&gt;usb_camera&lt;/code&gt; and even less supported&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT3: I tried using cv_camera but the resulting framerate seemed about the same, if not worse.&lt;/p&gt;&#xA;" OwnerUserId="19912" LastEditorUserId="19912" LastEditDate="2019-03-06T19:55:38.020" LastActivityDate="2019-04-05T20:01:50.360" Title="How can I preserve a high framerate while using at least 1280x720 resolution on 2 USB cameras on the same computer?" Tags="&lt;ros&gt;&lt;cameras&gt;&lt;usb&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18175" PostTypeId="2" ParentId="18168" CreationDate="2019-02-12T20:35:24.420" Score="1" Body="&lt;ul&gt;&#xA;&lt;li&gt;It isn't really a problem but a solution rather. The difficult part is pose estimation, comparison just needs to have a transformation between the estimated poses.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;There have been research works on fusing vision information with IMU data to enhance accuracy.&lt;a href=&quot;https://www.sciencedirect.com/science/article/pii/S1474667015350540&quot; rel=&quot;nofollow noreferrer&quot;&gt;Baranek, R. (2012). Inertial Measurement Unit–Data Fusion and Visualization using MATLAB. IFAC Proceedings Volumes, 45(7), 12-16.&lt;/a&gt; is one such example.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Comparison between multiple frames information just needs the relative transformation that then all estimations could be compared against one another.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;An IMU in motion will give you the acceleration measurements from accelerometer, the angular velocity from gyroscope and potentially the heading from the magnetometer. You could use the acceleration to compute the velocity and position changes over time, subject to accumulation errors and noise. The gyroscope can help alleviate the issue and get you angular velocity and thus the angular position, subject to drift and bias again. The magnetometer can finally help better the estimate and thus, a proper fusion technique like the Kalman filter(like EKF and UKF) can get you  high accuracy localization information(pose and orientation) in the local frame, i.e. the coordinate frame that you started moving from. &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Now, if you know where you started in the global frame, then you can easily transform all information obtained from the IMU in local frame to global frame and compare against the vision information.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;There are several libraries for pose estimation using IMU and other potential sensors like wheel encoders. Basically there are EKF and UKF libraries to predict pose from the IMU data and I believe vision information (coming from something like the Vicon system) is already processed. &#xA;The few libraries that I know are ROS's robot_localization package, Orocos Bayesian Filtering library and FilterPy.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;If you have trouble in estimation, this tutorial &lt;a href=&quot;http://www.seattlerobotics.org/encoder/200610/Article3/IMU%20Odometry,%20by%20David%20Anderson.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;IMU Odometry by David P Anderson&lt;/a&gt; is good but uses C/C++.&lt;/p&gt;&#xA;" OwnerUserId="18572" LastActivityDate="2019-02-12T20:35:24.420" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18179" PostTypeId="1" AcceptedAnswerId="18260" CreationDate="2019-02-13T10:31:38.850" Score="3" ViewCount="304" Body="&lt;p&gt;When working with a FastSlam2.0 algorithm, ICP Scan Matching is supposed to give more accurate measurements than odometry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is, that given some noisy measurements from the laser scanner, when the robot is stationary, or doing relative small movements, the dispersion from the ICP scan matching is greater than the dispersion from the odometry, especially if working with grid maps instead of landmarks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a set of tests I have performed with a simulated laser scanner and a grid map, this is true even for not noisy data. A relatively small movement (0.1m) changes all the points in the scan cloud, and the ICP algorithm can diverge from the expected result. The odometry behaves better in this case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, when working with relative big movements from step to step (1m), scan matching will perform better than odometry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The question is, what is the typical time interval o distance interval to perform the FastSlam2.0 algorithm? &#xA;If that interval is small, or the robot makes small distance increments, how is it possible to avoid this problem?&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Edit&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;To illustrate better the problem, here are 2 simulations. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cyan dots represent the odometry different hypotheses without scan matching.&#xA;Red dots represent the odometry different hypotheses with scan matching.&#xA;Green dot represents the odometry readings.&#xA;Black line (straight) represents the robots real movement (this is the particle that generate the simulated scans for the scan matching).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First one with simulated speed = 1 m/s and simulated time step = 0.5 s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gQq2a.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gQq2a.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second one, simulated speed = 1 m/s and simulated time step = 0.1 s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/SYH8t.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/SYH8t.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Performance of the scan matching with time step = 0.5 is really good, whereas the performance of the scan matching with time step = 0.1 behaves way worse that just odometry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If there is no way to solve this, then, what are the typical time steps for a real FastSlam 2.0 Application?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the end, the best approach I have found is to apply scan matching if the displacement is high enough. If not, apply only odometry.&lt;/p&gt;&#xA;" OwnerUserId="22210" LastEditorUserId="22210" LastEditDate="2019-02-21T07:59:07.593" LastActivityDate="2019-02-22T21:35:18.893" Title="FastSlam2.0: ICP Scan Matching vs Odometry? What is the typical time step?" Tags="&lt;mobile-robot&gt;&lt;slam&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18181" PostTypeId="1" AcceptedAnswerId="18190" CreationDate="2019-02-13T21:58:56.457" Score="-2" ViewCount="56" Body="&lt;p&gt;Pretty much as the title says. Why isn't it possible to build motors as microscopically and simply as they're built in humans? Why can't we recreate electronic nerves and muscles?&lt;/p&gt;&#xA;" OwnerUserId="22297" LastActivityDate="2019-02-15T08:02:04.967" Title="Why can't motors be as elegant as human muscles? Why do we have to use electromagnetism to create movement?" Tags="&lt;motor&gt;&lt;design&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18182" PostTypeId="1" CreationDate="2019-02-14T00:53:15.593" Score="1" ViewCount="195" Body="&lt;p&gt;I have been trying to understand an implementation of monoSLAM &lt;a href=&quot;https://airccj.org/CSCP/vol4/csit41831.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;1&lt;/a&gt;. But my question is generic to EKF based single camera SLAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My Jacobian calculation leads to complex and lengthy expressions while the c++ implementation [3] seems to have done it very easily with what they call 'projection Jacobian' and its inverse. I don't understand the math involved and why they are calculated. Please point out where my understanding is wrong. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The following is my current understanding of the subject of VSLAM using EKF.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In monoslam, the 3D landmarks are measured indirectly using image coordinates as we do not get the depth information from a single camera. They are either parametrized as 3D points &lt;span class=&quot;math-container&quot;&gt;$L$&lt;/span&gt; (&lt;span class=&quot;math-container&quot;&gt;$L_x, L_y, L_z$&lt;/span&gt;) or as 6D inverse depth formulation &lt;span class=&quot;math-container&quot;&gt;$L_{inv}$&lt;/span&gt; (&lt;span class=&quot;math-container&quot;&gt;$C_x, C_y, C_z, \theta, \phi, \rho $&lt;/span&gt;). In EKF, the non-linear function &lt;span class=&quot;math-container&quot;&gt;$h()$&lt;/span&gt; that converts the state vector into image measurements of landmarks involves the 3D to 2D projection equations (Camera model). The formula for converting a 3D point or a inverse depth formulation involves camera position, orientation, camera parameters and landmark representations &lt;span class=&quot;math-container&quot;&gt;$L$&lt;/span&gt; or &lt;span class=&quot;math-container&quot;&gt;$L_{inv}$&lt;/span&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have difficulty in calculating the Jacobians of the &lt;span class=&quot;math-container&quot;&gt;$h()$&lt;/span&gt; function as part of the update equations. I tried calculating the partial differentiation of &lt;span class=&quot;math-container&quot;&gt;$h()$&lt;/span&gt; with respect to the different elements of my state vector (used matlab symbolic tool) and got lengthy Jacobians. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The SLAM paper uses the projection model and calculates the Jacobians as mentioned in the section 2.5 of [2]. With respect to what the partial differentiation is done? To my understanding they have calculated w.r.t the image coordinates and not the elements from the state vector. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope my write up is clear.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;References:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Russo, Ludovico, et al. &quot;&lt;a href=&quot;https://airccj.org/CSCP/vol4/csit41831.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;A ROS implementation of the mono-slam&#xA;algorithm&lt;/a&gt;&quot; International Journal of Computer Science &amp;amp; Information&#xA;Technology 6.1 (2014): 339-351&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/rrg-polito/mono-slam/blob/master/reference/Master%20Thesis%20Ludovico%20Russo%20-%20oneside.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/rrg-polito/mono-slam/blob/master/reference/Master%20Thesis%20Ludovico%20Russo%20-%20oneside.pdf&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/rrg-polito/mono-slam&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/rrg-polito/mono-slam&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="15192" LastEditorUserId="17029" LastEditDate="2019-02-15T14:24:51.420" LastActivityDate="2019-02-15T14:24:51.420" Title="How to calculate observation matrix Jacobians in EFK based mono slam? What are projection Jacobians?" Tags="&lt;slam&gt;&lt;ekf&gt;&lt;monocular&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18183" PostTypeId="1" AcceptedAnswerId="18184" CreationDate="2019-02-14T08:18:40.283" Score="2" ViewCount="75" Body="&lt;p&gt;I'm planning a robot vehicle and plan to get one or more motors that have encoders built in.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How many encoders do I need I really need in order to gather solidly accurate information about speed and distance?  I'll get four if it makes a difference but I'm having trouble seeing much benefit beyond one.  Would averaging across two or four encoders help to mitigate the impact of slipping wheels?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's about a $20 price difference with and without the encoder, so it would be nice to minimize the number of motors with encoders.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: This is for a four fixed wheeled robot.&lt;/p&gt;&#xA;" OwnerUserId="22299" LastEditorUserId="22299" LastEditDate="2019-02-14T16:31:26.613" LastActivityDate="2019-02-14T16:31:26.613" Title="How many encoders should I have?" Tags="&lt;motor&gt;&lt;wheeled-robot&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18184" PostTypeId="2" ParentId="18183" CreationDate="2019-02-14T09:11:57.733" Score="2" Body="&lt;p&gt;Typically you will only need 2 encoders to estimate the velocity and the angle for a &lt;strong&gt;differential vehicle&lt;/strong&gt;. If you are using more strategies than only the odometry for the localisation, you can estimate the slipping with your range sensors or your IMUs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using more encoders is not an strategy that I have seen many times, except for critical applications were the safety is a great requirement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In any case, the answer will highly depend on the kinematics of your vehicle. I guess you might be thinking in a 4 fixed wheel vehicle. If that is the case, you will definitely need the 4 encoders, since slipping will be continuous when turning and not an exception. But again, if you are using a differential kinematics (which is way easier to model), I'd go only with 2 encoders.&lt;/p&gt;&#xA;" OwnerUserId="22210" LastActivityDate="2019-02-14T09:11:57.733" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18185" PostTypeId="2" ParentId="17998" CreationDate="2019-02-14T16:55:44.217" Score="1" Body="&lt;p&gt;There is &lt;a href=&quot;http://www.eurobot.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Eurobot&lt;/a&gt;, which concerns &lt;a href=&quot;http://www.eurobot.org/contact/noc/&quot; rel=&quot;nofollow noreferrer&quot;&gt;these countries&lt;/a&gt;. Usually it is organized by universities but non-student teams are welcomed and people are very friendly. It is not very difficult (so not necessarily expensive - you can reach a nice score with robots containing Arduino boards) and your robot competes against another team on the same field, so depending on your strategy the score can change from a game to another!&lt;/p&gt;&#xA;" OwnerUserId="20483" LastActivityDate="2019-02-14T16:55:44.217" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18186" PostTypeId="1" CreationDate="2019-02-14T16:57:24.537" Score="0" ViewCount="36" Body="&lt;p&gt;Am faced with a situation where my robot needs to feel breeze blowing by over its artificial skin. While there exist many types of tactile sensors, nothing seems to fit the bill. I might abandon the idea altogether but just wanted to know for the sake of know how if there exist sensors to do this sort of thing. Given significant advances in MEMS/NEMS, am assuming there are sensors as sensitive or even more sensitive than hair follicles in detecting touch&lt;/p&gt;&#xA;" OwnerUserId="22181" LastActivityDate="2019-02-14T18:34:42.287" Title="Which sensors can be used to feel breeze blowing by the robot?" Tags="&lt;force-sensor&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18188" PostTypeId="2" ParentId="18186" CreationDate="2019-02-14T18:34:42.287" Score="1" Body="&lt;p&gt;Microphone chips have been used as a transducer for this due to their low cost. (This being high density pressure measurements) &lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2019-02-14T18:34:42.287" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18190" PostTypeId="2" ParentId="18181" CreationDate="2019-02-15T08:02:04.967" Score="1" Body="&lt;p&gt;Human muscles take 9 months to grow and maybe 18 months to train for useful motions. It then takes years to refine precision and strength ... and still it falls short of an electric actuator arm in terms if holding power and precision ... but they last 80 years. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Robotic arms are optimized for ease of production, reliability, and strength.  Biological arms are optimized for energy efficiency, among other things like being manufacuted from cells.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;elegance&quot; is hard to define, but I think a Kuka beats a human arm in terms of simplicity, strength, and precision any day.&lt;/p&gt;&#xA;" OwnerUserId="163" LastActivityDate="2019-02-15T08:02:04.967" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18191" PostTypeId="2" ParentId="18149" CreationDate="2019-02-15T09:11:38.253" Score="2" Body="&lt;ol&gt;&#xA;&lt;li&gt;Have you tried to connect the PAD supplied with the HSB servo &lt;a href=&quot;https://www.servocity.com/hsb-9380th-servo&quot; rel=&quot;nofollow noreferrer&quot;&gt;the fifth picture on this page&lt;/a&gt;? It is not necessary but in the case that your battery is fully loaded it an cause an overload if you don't have a &lt;a href=&quot;https://en.wikipedia.org/wiki/Battery_management_system&quot; rel=&quot;nofollow noreferrer&quot;&gt;BMS&lt;/a&gt; in your circuit.&lt;/li&gt;&#xA;&lt;li&gt;This depends on the battery you are using. Usually they are given with a value in mAh which correspond to the maximum amount of &lt;a href=&quot;https://en.wikipedia.org/wiki/Ampere_hour&quot; rel=&quot;nofollow noreferrer&quot;&gt;mili-Ampere&lt;/a&gt; your battery can deliver during one hour. So if your system requires more than this capacity, the battery will last less than an hour and reciprocally if it requires less than this capacity, the battery will last more than an hour. This value is usually given on the battery datasheet.&lt;/li&gt;&#xA;&lt;li&gt;You should connect directly your power supply to the Adafruit PCA-9380 board &lt;a href=&quot;https://learn.adafruit.com/16-channel-pwm-servo-driver?view=all&quot; rel=&quot;nofollow noreferrer&quot;&gt;as described in the schematics in the bottom of this page&lt;/a&gt;, but I would advise you to test each servomotor separately before testing all together (in case of failure you may not burn everything and you will be capable of isolating quickly a problem). A voltage regulator is advised in the case that your power supply is not very stable or if it delivers more Volts than the required ones, so you don't need it here!&lt;/li&gt;&#xA;&lt;li&gt;The first servo will requires the PAD mention in my answer of your point #1. The Adafruit board your are using does the following things: It is wiring the V+ and GND of your battery to the wires red and black of the servomotor. It links the GND of your battery with the one of your board sending the signal (usually yellow wire of your servomotor) to the servomotor. It converts the orders you are sending via the I2C protocol into PWM signals to each servomotor. You can do all of this with an Arduino board but it will requires that you directly use PWM pins instead of I2C ones (SLC and SDA), and a servomotor library to control it. So I think that it's easier for you to begin with the Adafruit PCA-9380 board! For the voltage regulator, see my answer #3, and no resistor is required at all!&lt;/li&gt;&#xA;&lt;li&gt;As long as they accept the same input power and are controlled by the same protocol (here it is a PWM signal) at the same power level (here I suppose that it is 5V...), it is safe to use the Adafruit board to control them!&lt;/li&gt;&#xA;&lt;li&gt;There is no limitations of the tech used inside the battery as long as you respect the maximum value of Volts that the servomotor can handle and that your battery contains the same amount or more in Amps to control it! Don't forget that your servomotor requires its PAD to be safe (see my answer #1)!&lt;/li&gt;&#xA;&lt;li&gt;See the comment of @Octopus below your question !&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Have you also tried using a multimeter to check your circuit?&lt;/p&gt;&#xA;" OwnerUserId="20483" LastEditorUserId="20483" LastEditDate="2019-02-15T09:19:38.987" LastActivityDate="2019-02-15T09:19:38.987" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18192" PostTypeId="1" AcceptedAnswerId="18211" CreationDate="2019-02-15T10:37:27.683" Score="0" ViewCount="118" Body="&lt;p&gt;I have 2 motors (JGA25-370) with hall-sensor encodes.&#xA;They emit about 90-100 interrupts every 100ms, so 1000 a second.&#xA;Which means I have an interrupt happening every 1ms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The motors are driven by PCA9685 PWM board and L298N H-Bridge driver.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's all being operated from Raspberry Pi using a program written in Rust.&#xA;It starts 2 threads for sysfs interrupts and emits events when rising edge is detected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, the problem is that the readings are not as consistent as I expected.&#xA;I have another thread where I take measurements every 100ms.&#xA;This is an example of the results:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;90&#xA;81&#xA;90&#xA;90&#xA;85&#xA;90&#xA;89&#xA;79&#xA;89&#xA;89&#xA;79&#xA;87&#xA;80&#xA;88&#xA;90&#xA;90&#xA;79&#xA;89&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The motor is not under any load, just holding it in my hand.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem for me are those random jumps from 89 -&gt; 79 -&gt; 89 event though the motor is not under load (except for a built-in gearbox). It makes PID control very hard when I'm adjusting for a 10% drop, but the motor did not slow down.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I guess my questions are:&lt;br&gt;&#xA; 1. Is it just a normal thing and hall effect sensors are just not that precise?&lt;br&gt;&#xA; 2. Is it caused by Raspberry Pi not being able to handle interrupts in an accurate manner?  &lt;/p&gt;&#xA;" OwnerUserId="21379" LastActivityDate="2019-02-16T13:34:49.930" Title="Accuracy of hall sensor encoders on Raspberry Pi" Tags="&lt;mobile-robot&gt;&lt;raspberry-pi&gt;&lt;hall-sensor&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="18193" PostTypeId="2" ParentId="14847" CreationDate="2019-02-15T10:56:03.670" Score="1" Body="&lt;p&gt;There may be several reasons:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;You haven't compiled all your projects in the workspace, to fix it go to your workspace &lt;code&gt;cd ~/catkin_ws&lt;/code&gt; then execute &lt;code&gt;catkin_make&lt;/code&gt;. If it works and you don't have compilation errors, source your workspace &lt;code&gt;source ~/catkin_ws/devel/setup.bash&lt;/code&gt;, then re-try.&lt;/li&gt;&#xA;&lt;li&gt;When you are typing &lt;code&gt;rosrun script forward.py&lt;/code&gt;, you expect to launch the script forward.py from the package script. Check if your folder &lt;code&gt;~/catkin_ws/src/script&lt;/code&gt; exists, if not this cannot work!&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="20483" LastActivityDate="2019-02-15T10:56:03.670" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18194" PostTypeId="2" ParentId="18166" CreationDate="2019-02-15T14:33:47.970" Score="0" Body="&lt;p&gt;If your system has a fixed rotation about some axis, then you should be able to design your KF about a single angle of rotation. You should be able to tailor your equations of motion and measurements to be a function of that angle. &lt;/p&gt;&#xA;" OwnerUserId="20892" LastActivityDate="2019-02-15T14:33:47.970" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18195" PostTypeId="1" CreationDate="2019-02-15T15:32:14.897" Score="0" ViewCount="168" Body="&lt;p&gt;I have an nvidia xavier with gpio running linux. It should work very similarly to raspberry pis. I need to connect a bunch of pressure sensors, thermistor, potentiometers, and vibration sensors to my robot. I expect to have over 100 analog sensors that I need to read from so I can control my servo motors accordingly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a good on the market chip with a linux library that makes it easy for me to daisy chain and read analog values from over 100 sensors? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If not, what are the key components I would need to create a circuit that accomplishes such a goal?&lt;/p&gt;&#xA;" OwnerUserId="22067" LastActivityDate="2019-08-13T14:10:01.667" Title="I need to read a lot of analog signals without any analog pins" Tags="&lt;sensors&gt;&lt;circuit&gt;&lt;linux&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18196" PostTypeId="1" CreationDate="2019-02-15T23:06:59.793" Score="1" ViewCount="18" Body="&lt;p&gt;I'm having troubles implementing a UKF during the calculation of &lt;span class=&quot;math-container&quot;&gt;$\overline{\mu_t}$&lt;/span&gt;, specifically in this step:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$\overline{\mu_t} = \sum_{i=0}^{2n}w_m^{[i]}\chi_t^{*[i]}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My problem I'm facing is that &lt;span class=&quot;math-container&quot;&gt;$\overline{\mu_t}$&lt;/span&gt; seems to not be close to the values of the sigma points at all, and I have no idea why.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My state is composed of &lt;span class=&quot;math-container&quot;&gt;$x, y, v, a, \theta, \dot{\theta}$&lt;/span&gt;. Here is one example of an iteration:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$\mu_{t-1} = \begin{bmatrix}2.7 \\ 8.3e-05 \\ 1 \\ 0.2 \\ 3.2e-15 \\ 1e-9 \end{bmatrix}\\&#xA;\Sigma_{t-1} = \begin{bmatrix}&#xA;   0.038&amp;amp;  7.6e-07&amp;amp;    0.013&amp;amp;   0.0018&amp;amp; -1.7e-09&amp;amp;  1.5e-11 \\&#xA; 7.6e-07&amp;amp;     0.99&amp;amp;    4e-07&amp;amp;  1.5e-07&amp;amp;        1&amp;amp;    8e-10 \\&#xA;   0.013&amp;amp;    4e-07&amp;amp;    0.005&amp;amp;  0.00095&amp;amp;  1.1e-17&amp;amp;  4.7e-12 \\ &#xA;  0.00187&amp;amp;  1.5e-07&amp;amp;  0.00095&amp;amp;  0.00036&amp;amp; -1.8e-15&amp;amp;  5.7e-13 \\ &#xA;-1.7e-09&amp;amp;        1&amp;amp;  1.1e-17&amp;amp; -1.8e-15&amp;amp;      1.1&amp;amp; -1.9e-23 \\&#xA; 1.5e-11&amp;amp;    8e-10&amp;amp;  4.7e-12&amp;amp;  5.7e-13&amp;amp; -1.9e-23&amp;amp;    1e-08 \\&#xA;\end{bmatrix}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; values of the sigma points after the transition model:&#xA;&lt;span class=&quot;math-container&quot;&gt;\begin{bmatrix}&#xA;     2.82606 &amp;amp;     2.85113   &amp;amp;    2.8251   &amp;amp;   2.82614   &amp;amp;   2.82606      2.82603 &amp;amp;     2.82606    &amp;amp;    2.801  &amp;amp;     2.8251 &amp;amp;     2.82599  &amp;amp;    2.82606   &amp;amp;  2.82603   &amp;amp;   2.82606&#xA;\end{bmatrix}&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For my weights, I chose &lt;span class=&quot;math-container&quot;&gt;$\alpha$&lt;/span&gt; such that weights would be integers, since I was worried that this was a floating point error:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$w_m^{[i]} = \begin{bmatrix}-384\\32\\32\\32\\32\\32\\32\\32\\32\\32\\32\\32\\32\end{bmatrix}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, calculating &lt;span class=&quot;math-container&quot;&gt;$\overline{\mu_t}$&lt;/span&gt; yields &lt;span class=&quot;math-container&quot;&gt;$-0.064$&lt;/span&gt;, which is evidently wrong. &lt;a href=&quot;https://www.wolframalpha.com/input/?i=2.826064679+*+-384+%2B+32*(2.851132721%2B+2.825098207+%2B+2.826141712+%2B+2.826064684+%2B+2.826026219+%2B+2.826064679+%2B+2.800996636+%2B+2.825098206+%2B+2.825987645+%2B+2.826064673+%2B+2.826026219+%2B+2.826064679+)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wolfram alpha confirms that this is not a floating point error&lt;/a&gt;. I have no idea where I might be going in the calculation here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any idea how I would go about solving this problem?&lt;/p&gt;&#xA;" OwnerUserId="22072" LastActivityDate="2019-02-15T23:06:59.793" Title="Problem with UKF weights when calculating predicted state" Tags="&lt;localization&gt;&lt;kalman-filter&gt;&lt;algorithm&gt;&lt;software&gt;&lt;motion&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18197" PostTypeId="1" AcceptedAnswerId="18335" CreationDate="2019-02-16T03:34:07.110" Score="3" ViewCount="163" Body="&lt;p&gt;So this thread is similiar to this one:&#xA;&lt;a href=&quot;https://robotics.stackexchange.com/questions/7895/irobot-create-2-powering-up-after-sleep/7900?newreg=d47bb1b89de04d3b80d2fbfa42f0acd3&quot;&gt;IRobot Create 2: Powering Up after Sleep&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All except I am trying to do this on an RPi.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have followed these intstruction:&#xA;&lt;a href=&quot;https://www.irobotweb.com/-/media/MainSite/PDFs/About/STEM/Create/RaspberryPi_Tutorial.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.irobotweb.com/-/media/MainSite/PDFs/About/STEM/Create/RaspberryPi_Tutorial.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have put together the little RPi top that uses the buffering chip. Everything is working great.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However I cannot get it to wake over serial!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;iRobot even has examples of this, I can't get it to work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From here:&#xA;&lt;a href=&quot;https://www.irobotweb.com/~/media/MainSite/PDFs/About/STEM/Create/RoboCam-WebInterface.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.irobotweb.com/~/media/MainSite/PDFs/About/STEM/Create/RoboCam-WebInterface.pdf&lt;/a&gt;&#xA;They show:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;GPIO.setmode(GPIO.BCM) # as opposed to GPIO.BOARD # Uses 'import RPi.GPIO as GPIO'&#xA;GPIO.setup(17, GPIO.OUT) # pin 17 connects to Create2 BRC pin&#xA;GPIO.output(17, GPIO.HIGH)&#xA;time.sleep(1)&#xA;GPIO.output(17, GPIO.LOW) # pulse BRC low to wake up irobot and listen at default baud&#xA;time.sleep(1)&#xA;GPIO.output(17, GPIO.HIGH)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;They also have an example python script with this code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&#xA;GPIO.setmode(GPIO.BCM)   # BCM for GPIO numbering  &#xA;GPIO.setup(17, GPIO.OUT) # Make pin 17 (which is hooked up to the BRC pin) an output&#xA;&#xA;while True:&#xA;    # Pulse the BRC pin at a low duty cycle to keep Roomba awake.&#xA;    GPIO.output(17, False)&#xA;    sleep(1)&#xA;    GPIO.output(17, True)&#xA;    sleep(59)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Neither work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now this code runs perfectly fine without issue on the RPi. I pip installed all the right libraries. I am using Python3.7, every other function over serial is working fine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But this wake command does not work. It also does not prevent it from going back to sleep!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I followed the instruction for making the 3.3v to Logic circuit exactly from here:&#xA;&lt;a href=&quot;https://www.irobot.com/~/media/MainSite/PDFs/About/STEM/Create/Create_2_Serial_to_33V_Logic.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.irobot.com/~/media/MainSite/PDFs/About/STEM/Create/Create_2_Serial_to_33V_Logic.pdf&lt;/a&gt;&#xA;Again I made the one at the bottom with the '5V-tolerant 3.3V buffer' which does explicitly show the green pin being soldered to IO17. Which is where I soldered it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only different is I put the pi hat on a RPi 3 rather than an RPi, I assume the GPIO pins still align the same?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone think of any more ideas? I am running out of them myself.&lt;/p&gt;&#xA;" OwnerUserId="22313" LastActivityDate="2019-03-04T16:57:29.820" Title="iRobot Create 2 Wake over Serial on Rpi" Tags="&lt;irobot-create&gt;&lt;python&gt;&lt;serial&gt;&lt;roomba&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18200" PostTypeId="2" ParentId="18134" CreationDate="2019-02-16T05:12:25.963" Score="-1" Body="&lt;p&gt;2*pi/(2^8) is correct..............&lt;/p&gt;&#xA;" OwnerUserId="22303" LastEditorUserId="9720" LastEditDate="2019-02-17T11:48:10.540" LastActivityDate="2019-02-17T11:48:10.540" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18201" PostTypeId="2" ParentId="18130" CreationDate="2019-02-16T05:15:51.070" Score="-2" Body="&lt;p&gt;Typically max-thrust will be bigger than vehicle weight, so that the quadcopter can accelerate upwards.&lt;/p&gt;&#xA;" OwnerUserId="22303" LastActivityDate="2019-02-16T05:15:51.070" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18202" PostTypeId="1" CreationDate="2019-02-16T05:22:20.230" Score="0" ViewCount="75" Body="&lt;p&gt;I have a headset that provides 3 axis gyroscope readings. I wish to find out movement of head for e.g. if a person is nodding left to right etc. But the headset give me values in angular velocity for each axis. How can i process these values to get head movement in real time? &lt;/p&gt;&#xA;" OwnerUserId="22310" LastActivityDate="2019-02-20T10:32:20.837" Title="Head movement using gyroscope" Tags="&lt;gyroscope&gt;&lt;python&gt;&lt;real-time&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18204" PostTypeId="2" ParentId="18202" CreationDate="2019-02-16T05:30:12.263" Score="1" Body="&lt;p&gt;You would have to integrate the rotational kinematics equations forward in time with a known initial orientation, such as R(0) = eye(3,3) -- identity matrix.  You will have drift issues if you go out too far in time of course.  But, in any case, now you have an 'estimate' of R(t).  Or get a 3-axis gyro from microstrain.com that gives you R(t).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Is there any way i can find by what angle and in which axis the head is rotated?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, that is the standard Rot-k-theta conversion, for the 3x1 vector k and angle theta. Given R, k and theta are trivially found. See page 51 &quot;Equivalent angle-axis&quot; section of the below book, e.g.: Craig, Introduction to Robotics, 2nd Ed., ISBN 0-201-09528-9. You can get it for free from your interlibrary loan... Rot(k,th) is easily derived, btw, and from it you can derive the standard quaternion equations, although you don't need those here per se.&lt;/p&gt;&#xA;" OwnerUserId="22303" LastEditorUserId="37" LastEditDate="2019-02-20T10:32:20.837" LastActivityDate="2019-02-20T10:32:20.837" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18206" PostTypeId="2" ParentId="18049" CreationDate="2019-02-16T05:39:22.597" Score="0" Body="&lt;p&gt;Suppose your coord axis is at the center of the box and the axes parallel to the walls o the box.  Distance to the min-y-wall tells you y.  Distance to the min-x wall gives you x, with the obvious offsets added in.  Crazy-easy unless I misunderstood.&lt;/p&gt;&#xA;" OwnerUserId="22303" LastActivityDate="2019-02-16T05:39:22.597" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18211" PostTypeId="2" ParentId="18192" CreationDate="2019-02-16T13:34:49.930" Score="1" Body="&lt;p&gt;Thanks to @RobReus, who pointed me to a Youtube video describing my issue I was able to fix it.&lt;br&gt;&#xA;The issue was in fact my Raspberry Pi not being able to keep up with the amount of interrupts a second and losing some of the events.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The solution I came up with is to attach hall sensor to my Arduino Nano which is connected to Rpi via serial port.&lt;br&gt;&#xA;Interrupts are incrementing counters for left and right wheels and then send the data via serial port every 100ms to RPi.&lt;br&gt;&#xA;I get consistent readings now and PID control is finally working as expected!&lt;/p&gt;&#xA;" OwnerUserId="21379" LastActivityDate="2019-02-16T13:34:49.930" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18212" PostTypeId="1" CreationDate="2019-02-16T15:28:10.047" Score="1" ViewCount="17" Body="&lt;p&gt;I'm trying to control a Nema 17 stepper motor with a L298N H-Bridge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My wiring is as below (except I'm using a ESP8266 not a YUN, and I have a mains 12V supply rather than batteries). This is consistent with other tutorials I have found online. &#xA;&lt;a href=&quot;https://i.stack.imgur.com/vHjjo.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vHjjo.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;Stepper.h&amp;gt;&#xA;&#xA;const int stepsPerRevolution = 400;  // change this to fit the number of steps per revolution&#xA;// for your motor&#xA;&#xA;// initialize the stepper library on pins 8 through 11:&#xA;Stepper myStepper(stepsPerRevolution, D1, D2, D3, D4);&#xA;&#xA;void setup() {&#xA;  // set the speed at 60 rpm:&#xA;  myStepper.setSpeed(1);&#xA;  // initialize the serial port:&#xA;  Serial.begin(9600);&#xA;}&#xA;&#xA;void loop() {&#xA;  // step one revolution  in one direction:&#xA;  Serial.println(&quot;clockwise&quot;);&#xA;  myStepper.step(stepsPerRevolution);&#xA;  delay(500);&#xA;&#xA;  // step one revolution in the other direction:&#xA;  Serial.println(&quot;counterclockwise&quot;);&#xA;  myStepper.step(-stepsPerRevolution);&#xA;  delay(500);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The issue I am having is that the L298N has it's RED LED on, until I actually try to move the stepper motor. As soon as I try to move it a single step the LED turns off and it takes a while for the board to come back online. I believe this could be an issue with the motor drawing too much current but I have no clue how to fix this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cheers in advance!&lt;/p&gt;&#xA;" OwnerUserId="22316" LastActivityDate="2019-02-16T15:28:10.047" Title="L298N briefly works, then shorts when controlling Nema 17" Tags="&lt;stepper-motor&gt;&lt;stepper-driver&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18213" PostTypeId="2" ParentId="18174" CreationDate="2019-02-16T15:49:47.213" Score="0" Body="&lt;p&gt;Here are a few things to consider:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;First, do you know where the actual bottleneck(s) are? Some possibilities: &lt;strong&gt;the usb camera driver or &lt;code&gt;usb_cam&lt;/code&gt; and related settings&lt;/strong&gt; (especially if having to compress/uncompress/transpose the video format without hardware support), &lt;strong&gt;cpu processing&lt;/strong&gt; (perhaps &lt;code&gt;whycon&lt;/code&gt; is overloading), &lt;strong&gt;network bandwidth/latency/processing&lt;/strong&gt; (what type and speed network are you using?), or the final &lt;strong&gt;video decoding/display&lt;/strong&gt;. Any one of those could be affecting the frame rates.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If you are &lt;strong&gt;trying to transfer HD resolutions over a slower network in MJPG&lt;/strong&gt;, then that could explain the lower frame rate. And depending on your hardware, some network interfaces require use of main CPU, would could also be adding to the overall CPU load.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;MJPG is not very good for capturing and streaming at higher resolutions &amp;amp; rates&lt;/strong&gt; over a network, compared to something like H264 or other stream based encoders. You mention publishing &lt;code&gt;image_raw&lt;/code&gt;, which would require significantly even more bandwidth, though it's unclear to me where in your ROS node network you are doing this.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Some cameras have onboard hardware based encoders&lt;/strong&gt;, which can significantly lighten the main CPU load. It requires support on both sides though (camera and driver). I'm not sure if &lt;code&gt;usb_cam&lt;/code&gt; supports on camera encoding (I don't think it does, but not positive.) It might be worth try something like &lt;code&gt;libuvc_camera&lt;/code&gt;, or &lt;code&gt;cv_camera&lt;/code&gt;, and experimenting with settings and formats to see if you can get lower CPU and better frame rates.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;If this info doesn't help, I would suggest adding more information about the cameras you are using, your network setup, and more about your intended use-case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would also suggest testing, if you haven't already, what kind of cpu and framerates you can get from the front camera at 1280x720 &lt;em&gt;without&lt;/em&gt; simultaneously running the primary camera and &lt;em&gt;without&lt;/em&gt; running &lt;code&gt;whycon&lt;/code&gt;.  Based on what you find from doing that, you can probably add more info to your question, or start a new question, to get better answers.&lt;/p&gt;&#xA;" OwnerUserId="167" LastActivityDate="2019-02-16T15:49:47.213" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18215" PostTypeId="1" CreationDate="2019-02-16T20:48:37.400" Score="0" ViewCount="83" Body="&lt;p&gt;Lets say the robot has 4Dof and the operator gives (x,y,z,roll,pitch,yaw ) as control input( rank(J) &amp;lt; dim(task) ).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now the robot is overwhelmed and will probably show some jerky movement.&#xA;But can someone please explain in a mathematical way why a robot with 4 Dof cannot perform a task of 6 dim. ?&lt;/p&gt;&#xA;" OwnerUserId="21382" LastEditorUserId="21382" LastEditDate="2019-02-16T21:02:39.377" LastActivityDate="2019-02-17T09:29:11.850" Title="underactuated robot problem" Tags="&lt;kinematics&gt;&lt;inverse-kinematics&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18216" PostTypeId="2" ParentId="18215" CreationDate="2019-02-16T23:47:17.333" Score="3" Body="&lt;p&gt;It is hard to tell your mathematical background from the question, so maybe an explanation for a more simple, but similar, problem will help.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let’s say you have a 1 DOF robot, and command it with 2 DOF tasks.  It has a link length of 1, so it can move along a unit circle about the origin of a coordinate system.  If you command it to go to position (1, 0), it will do so.  Same thing if you command (0, 1), or (0.707, 0.707).  But if you tell the robot to go to (1, 1), or (0.2, 0.5), or any of a double infinity of other points, it cannot achieve that pose.  It will not perform “jerky motion”; instead, the math will not be solvable.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mathematically, the inverse kinematics are unsolvable.  For the situation you describe, you are trying to solve six independent equations using only four variables.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2019-02-16T23:47:17.333" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18218" PostTypeId="2" ParentId="18215" CreationDate="2019-02-17T09:29:11.850" Score="-3" Body="&lt;p&gt;The question has mixed up two different problems: model predictive control (MPC) and underactuated robot. MPC is about the question which control signals the operator has to send to the robot to reach a certain situation, while underactuation means to use a kinematic chain which has at one point not a motor but a freely movable connection, similar to a rope which hangs from the ceiling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What kinds of motion a robot can do who is underactuated depends on the so called system identification process. This is about describing the future states a system can reach. System identificiation for underactuation is not more complicated but easier than for a normal system. This sounds paradox. But can be explained with the reason, why underactuation was introduced in robotics.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2019-02-17T09:29:11.850" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18219" PostTypeId="1" AcceptedAnswerId="18221" CreationDate="2019-02-17T13:16:40.213" Score="1" ViewCount="56" Body="&lt;p&gt;In the control theory the term “system identification” is used quite often. A typical sentence in a robotics oriented paper is that the author is trying to “build a model of a plant with matlab”. The idea is, that the model can predict future states of the system and is able to estimate the temperature. The plant is the system, and system identification means to formalize the inner working.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In gaming oriented software development a similar task is done quite often. Each game needs a so called game engine. Part of the game engine is the physics engine which simulates the behavior of the system. A prominent example is the “incredible machine (1992)” physics engine which was the first example for a DOS based game which has provided a realistic rigid body simulation. Similar to system identification in control theory, the simulation was realized with differential equations. In case of a rigid body engine that a newtons equation about mass and velocity under gravity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is: is system identification and a physics engine both the same? And secondly, why are game designer and control engineers are not talking to each other, Is that an example for communication failure between specialists?&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2019-03-19T16:00:12.920" Title="Is system identification and a physics engine the same?" Tags="&lt;control&gt;&lt;matlab&gt;&lt;simulation&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18220" PostTypeId="1" CreationDate="2019-02-17T14:23:35.480" Score="0" ViewCount="203" Body="&lt;p&gt;I have been working on a self balancing robot and there are quite a few parameters and one of them is loop execution time (t_loop henceforth). To my understanding, the smaller t_loop, the better it is for the control algorithm. But, since the motors also need to be given sufficient time to react, we cannot make it very small. Also, making t_loop large so that motors have sufficient time to react will make the system unstable. So there has to be some optimum value. I started with 5 milliseconds and started increasing it. At 5 ms the robot is quiet jerky (but it manages to balance). Between 10 and 20 ms, the vibrations become less. The question is how to find the optimum value of t_loop or control loop execution time.   &lt;/p&gt;&#xA;" OwnerUserId="22037" LastEditorUserId="22037" LastEditDate="2019-02-17T19:36:29.130" LastActivityDate="2021-03-11T18:51:40.450" Title="Loop time for self balancing robot" Tags="&lt;mobile-robot&gt;&lt;arduino&gt;&lt;pid&gt;&lt;balance&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="18221" PostTypeId="2" ParentId="18219" CreationDate="2019-02-17T14:27:35.480" Score="2" Body="&lt;p&gt;No. If we want to simplify things, system identification is more like curve fitting then a game engine. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;System identification is used to identify a set of parameters of an existing model or a model which matches reality. The model obtained is then used in a numerical simulation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The numerical simulation is related to physics engines. Physics engines are numerical simulation &quot;engines&quot; for mechanical phenomena. In most cases there are not focused on precision, but on a balance between precision and performance. There are many other simulation tools available for (controls) engineers, which are (arguably) more precise then game engines. Examples are the Matlab-Simulink-SimMechanics or AlgoryX. Furthermore, many engineering simulation tools include also options to simulate electrical, thermal phenomena. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A concrete example would be the parameters of a car suspension. There is an analytical model of the mechanism and the spring and damper. This can be very well recreated in a physics engine if we have all the parameters (geometrical, spring and damper coefficients). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;An even more precise model is a finite element model which would take into account elastic deformation of the linkages. An even more precise model would take into account the exact fluid motions in the hydraulic damper. Since finite element models and computational fluid dynamic models are very slow (take hours to complete, if not days), these cannot be used in a game which requires a 16ms (60 fps) cycle time. These simulations would need the material properties (both for fluid and metal) as parameters. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;System identification can be used to identify the material properties as parameters or as a function (model) or the spring and damper coefficients (again as parameter or as a function). These can be used in the simulation (or in the physics engine) to obtain results that match reality as close as possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Control Engineers may or may not talk to physics engine developers, but most certainly both groups are in close contact with numerical simulation experts.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2019-02-17T15:55:31.773" LastActivityDate="2019-02-17T15:55:31.773" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18222" PostTypeId="2" ParentId="10902" CreationDate="2019-02-17T15:01:41.947" Score="0" Body="&lt;p&gt;I was also faced with this dilemma. I was using Arduino to read Kp, Ki and Kd from potentiometers and transferring the data over Serial port to a Raspberry Pi. I found that I had to put a delay of atleast 20 ms on the Arduino side for the Pi to capture the data correctly. If I transmitted the data without any delay, the Pi was unable to cope up with the stream of incoming data. So I decided to do all the balancing and moving part on Arduino. I will use OPEN-CV for image processing and use Pi to send command over Serial port to navigate the robot.  &lt;/p&gt;&#xA;" OwnerUserId="22037" LastActivityDate="2019-02-17T15:01:41.947" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18223" PostTypeId="2" ParentId="18220" CreationDate="2019-02-17T21:07:33.300" Score="-1" Body="&lt;p&gt;A normal game engine at the desktop PC runs with around 40 frames per second. This is equal to 1000/40=25msec of waiting time after a tick. Fasten up the system brings no advantage but it will only increase the CPU consumption. Different from the framerate the motor control has to be executed. A motor needs some time to speed up and stop, especially in embedded systems. What is used in robotics operating systems like VXworks is a concept called realtime control. This means, that the operating systems provides threads. A thread is dropped from the main program and runs in the background until the task is done.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, the motor needs 1 second to stop. This means, the task in which the stop signal is send to the motor has a length of 1 second. The motor stop task is activated at timeframe 1000 and runs until the timeframe 1040 (1 second * 40 fps = 40 ticks). .During that time the main program doesn't stop but it runs also. The concept of threading is used at desktop PCs heavenly for creating GUI applications but it is useful for controlling robots as well.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2019-02-17T21:07:33.300" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18224" PostTypeId="1" CreationDate="2019-02-17T22:15:24.050" Score="-1" ViewCount="39" Body="&lt;p&gt;This is my school project. I would like &lt;em&gt;arducopter&lt;/em&gt; to connect to Raspberry  Pi but I do not know how to do it. Please help me!&lt;/p&gt;&#xA;" OwnerUserId="22323" LastEditorUserId="19515" LastEditDate="2020-07-27T18:27:56.093" LastActivityDate="2020-07-27T18:27:56.093" Title="How can I connect arducopter to Raspberry Pi?" Tags="&lt;arduino&gt;&lt;raspberry-pi&gt;&lt;ardupilot&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18226" PostTypeId="2" ParentId="18150" CreationDate="2019-02-18T08:45:12.917" Score="-1" Body="&lt;p&gt;No, robotics and automation is not a contradiction. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The loom and the steam machine represent the mechanisation of production processes. Later came the assembly line and the electrification of the production processes. The next stage is the robotization of the processes (and I inlcude here the numerical controlled machine tools also). What follows, after the &quot;robotization&quot;-era is the current situatuation, sometimes called the IoT era or Industry 4.0. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each era had their failures and sucesses, but productivity has grown considerably in each era. There is no credible source which disputes the productivity growth. (The argument regarding automation is always related to labour-displacemnet, no credible source argues on the side of overall productivity decrease).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have to say I do not no anything about the &quot;unimation factory robot&quot; you mention. The other projects seem to be cherry picked and slightly missinterpreted.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &quot;Halle 54&quot; project was an early project which was a pilot program, probobly something like a prototype program. I think it is normal for early projects to fail to meet all expectations, as I am sure it took a lot of prototyping to get the first loom machine right. There are many other automation projects in the automotive manufacturing industry, which may not be as well known but are increasing productivity. Most automotive manufacturers are steadily increasing the degree of automation of the products. The number of installed and runnig robots is continously increasing since the '90s. My &lt;em&gt;guess&lt;/em&gt; it that unexpected things happen when there is a jump (and not gradual growth) in the automation of a manufacturing process (a more recent example is the Tesla production problems). But this is just a guess.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for the ReThink Robotics story: there are more and more other companies (e.g. Universal Robots, ABB, Kuka) producing so called co-bots (colaborative robots) and the number of installed (and running) co-bots is continously gorwing, therefor the failure of one manufacturer on a steadily growing market is not relevant. The same goes for service robots, if someone considers Baxter/Sawyer a service robot and not a co-bot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can take a look at the share prices and market capitalization of the large robotics/automation/machine building companies. Most of them show a growing trend.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT:&#xA;Based on the comments below, I would like to re-iterate the conclusions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;There is no credible source disputing the productivity growth due to the use of robots&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;the number of installed robots doubled in the last 10 years (from approx. 1 million units to more then 2 million units, source is the International Federation of Robotics), proving that the industry uses more and more robots&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;the projects listed in the question are cherry picked and do not reflect the state of the manufacturing industry. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;despite the partial failures of Halle54, Volkswagen is continuously increasing the number of robots manufacturing their cars&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;My &lt;em&gt;guess&lt;/em&gt; is that many projects where a jump in the automation degree of the process instead of a gradual increasted is planned have an increased risk of failiure when compared to project whith a goal of gradualy increasing automation degree. Both cases increase the number of robots in the process, the diffrence is introducing 10 robots at a time for one subprocess or 100 for 10 subprocesses.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Currently in the manufacturing industry, automation in most cases implies the use of robots.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2019-02-18T13:10:47.107" LastActivityDate="2019-02-18T13:10:47.107" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18227" PostTypeId="2" ParentId="18224" CreationDate="2019-02-18T08:50:49.740" Score="0" Body="&lt;p&gt;To do so, you need to use a USB link between the Ardupilot/Arducopter and use the MAVLink protocol to interrogate the Arducopter in order that it sends back its GPS data. You can etheir way use the C libs of MAVLink, the Python implementation or the ROS one (named mavros). You may find some clues here: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://mavlink.io/en/&quot; rel=&quot;nofollow noreferrer&quot;&gt;MAVLink dev guide&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://github.com/ArduPilot/pymavlink&quot; rel=&quot;nofollow noreferrer&quot;&gt;Python implementation - the easier one to handle&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Depending on your programming skills this may requires you some time to reach your aim!&lt;/p&gt;&#xA;" OwnerUserId="20483" LastActivityDate="2019-02-18T08:50:49.740" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18228" PostTypeId="1" AcceptedAnswerId="18235" CreationDate="2019-02-18T09:25:26.873" Score="2" ViewCount="46" Body="&lt;p&gt;I am modifying an implementation of SLAM with single camera, MonoSLAM [1].  Instead of image patches, I want to use features points (ORB) to track landmarks. MonoSLAM uses a EKF framework. So for every feature tracked, I have a covariance matrix which defines the uncertainty of the measurement in current camera frame. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Had this been an image patch, as in Davidson et al [1], one has to center a sliding window with every pixel inside the ellipse defined by the covariance.  Then check for correlation of pixel intensities between the tracked patch and the patch from the new frame. Some thing like this figure below.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Yg102.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Yg102.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For features, should I search in a similar fashion by calculating the descriptor for each pixel in the ellipse? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;or&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since features come with their own detectors, should I leave it to the detector to find the list of features within the ellipse and then match them with my previous frame feature?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[1]: Davison, Andrew J., et al. &quot;MonoSLAM: Real-time single camera SLAM.&quot; IEEE Transactions on Pattern Analysis &amp;amp; Machine Intelligence 6 (2007): 1052-1067.&lt;/p&gt;&#xA;" OwnerUserId="15192" LastActivityDate="2019-02-19T00:47:10.333" Title="How to perform active search in point feature based monoSLAM?" Tags="&lt;slam&gt;&lt;computer-vision&gt;&lt;ekf&gt;&lt;monocular&gt;&lt;data-association&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18229" PostTypeId="1" CreationDate="2019-02-18T10:25:24.463" Score="0" ViewCount="36" Body="&lt;p&gt;i have read a spec. about gear motor and it shows that&#xA;Stall: 9-13 Nm torque&#xA;          25A max&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Per my understanding Stall torque is the maximum torque that can be applied to the shaft and cause the motor to stop rotating.&#xA;So i wonder why it appears a range from 9-13Nm. As defination that i found, i think we only need the maximum value 13Nm and the current 25A is for this torque value. &#xA;Could you please give me an advice about this range meaning. &#xA;Thabk you very much. &lt;/p&gt;&#xA;" OwnerUserId="22326" LastActivityDate="2019-02-18T20:38:59.600" Title="Please help me with stall property of gear motor" Tags="&lt;motor&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18230" PostTypeId="1" AcceptedAnswerId="18233" CreationDate="2019-02-18T13:13:35.077" Score="1" ViewCount="63" Body="&lt;p&gt;The first examples for passive dynamics were introduced by Ted McGeer in the early 1990s. The main principle of so called underactuated robotics is, that not all joints in the system can be controlled with motors directly, but some variables are free. A good example is a sailboat in the wind, or a one-leg robot who hangs on a rope. On the first look, the freely movable joint will increase the complexity, because the software is responsible for the robot itself and for the environment too. But if these systems are difficult to program, why isn't that case simply ignored by the engineers?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let us take a look into a robotics laboratory and how new robotics are developed. The first thing what the engineers are doing is to build the frame. It is better known as a harness. On that chassis the robot is mounted. What is the intention of mounting a robot on a frame? Right, the intention is to build an underactuated robot. The robot doesn't have to balance by itself, but the frame around him stabilize the system. The additional freely movable joints doesn't increase the complexity but makes it lower.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my question is: were underactued robots introduced to simply the programming, especially of biped robots which have a balance problem?&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2019-02-18T13:59:00.620" Title="Are underactuated robots easier to program?" Tags="&lt;kinematics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18231" PostTypeId="1" CreationDate="2019-02-18T13:15:07.187" Score="2" ViewCount="130" Body="&lt;p&gt;I am implementing the &lt;em&gt;&lt;a href=&quot;https://ieeexplore.ieee.org/document/4608934&quot; rel=&quot;nofollow noreferrer&quot;&gt;explicit complementary filter&lt;/a&gt;&lt;/em&gt;(see below) with a 9DOF MEMS sensors (accelerometer, magnetometer and gyroscope) for attitude estimation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Currently, the gyro and accel update rates are at ~1kHz and I am running my filter at 100Hz. The magnetometer refresh rate is running at ~20hz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The constraints are that I can't modify the sensors reading rate and the algorithm can't be run at more than 400Hz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As it is implemented right now, I read the gyro and accel if available, optionally the magnetic field if new data is available and run the maths, trying to keep my update rate at 100Hz. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But in addition to the poor performance I observe, it seems the current implementation is not a good way to handle the sensors reading.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From what I read, it seems there are more efficient way to handle the data:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Running my filter at 400Hz where I run a &lt;a href=&quot;https://github.com/kriswiner/LSM9DS0/issues/8&quot; rel=&quot;nofollow noreferrer&quot;&gt;buffer&lt;/a&gt; which accumulates gyro and accel samples, averages them and use it every 100Hz to update my filter (with the risk to increase bias and noise) ?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Running a &lt;a href=&quot;https://robotics.stackexchange.com/a/14361/17300&quot;&gt;low pass filter&lt;/a&gt; @400Hz on the raw data and update my ECF every 10ms ?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A combination of the two previous solutions ?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;ECF Algorithm: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{\hat{q}} = \frac{1}{2} \hat{q}\otimes p(\Omega_{y}-\hat{b} + k_{P}\omega_{meas} ).&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{\hat{b}} = -k_{I}\omega_{meas}.&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where &lt;span class=&quot;math-container&quot;&gt;$\otimes$&lt;/span&gt; is the quaternion cross operator, &lt;span class=&quot;math-container&quot;&gt;$w_{meas}$&lt;/span&gt; the sum of cross product between accel and mag reading with respectively their estimates. &lt;span class=&quot;math-container&quot;&gt;$\Omega_{y}$&lt;/span&gt; is the gyro measurements. &lt;span class=&quot;math-container&quot;&gt;$k_I$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$k_P$&lt;/span&gt; are the filter gains.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;[EDIT]&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The chosen strategy was to accumulate and compute the mean from sensors data as the quaternion propagation step is considering these values being constants. After the update step, the buffer is emptied. &lt;/p&gt;&#xA;" OwnerUserId="17300" LastEditorUserId="17300" LastEditDate="2019-02-27T10:18:39.267" LastActivityDate="2019-02-27T10:18:39.267" Title="How to handle sensor data for a sensor-fusion algorithm" Tags="&lt;sensors&gt;&lt;imu&gt;&lt;algorithm&gt;&lt;sensor-fusion&gt;&lt;filter&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18232" PostTypeId="2" ParentId="18229" CreationDate="2019-02-18T13:21:19.213" Score="2" Body="&lt;p&gt;Why is there a range? Manufactures often list a range for their torque because their torque is highly dependent on the Voltage applied to a motor. A motor has an operational voltage and you'll reach the upper values of the stall torque by powering your motor with the upper values of the voltage range.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Stall Torque is the amount of weight the motor can hold without moving. Let's say your motor 0 degrees is facing the ground and 180 degrees is facing the sky. If your motor is at 90 degrees (parallel to the ground), then your 9-13Nm stall torque means that your motor can hold ~90-130kg at 1cm from the shaft of your motor (the gear that rotates out of the motor). If you put a weight more than 130kg at 1cm from the motor, the motor will not be able to hold its current position. As a result, the motor will be forced from the 90 degrees position to the 0 degrees position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 25A of your motor means that your motor can drain up to 25 amps of current under maximum load.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Remember that stall torque value is often higher than your continuous torque value. Continuous torque is the amount your servo can reliable lift and rotate. It's easier to keep a heavy object in place vs being able to push it against the force of gravity. Sometimes the manual will specify the continuous torque, other times, you'll just have to test it yourself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what does Nm means for torque. You'll often see oz/in, kg/cm, or Nm when looking at servo motors. 5 Nm just means your motor can generate 5 newtons of force at 1 meter away from the shaft of the motor. 10 newtons is about 1 kg of force (1 kg * force of gravity = newtons).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Remember that torque of your motor is inversely related to the distance at which it's carrying the weight:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;T = F * D where F is force and D is distance. Thus going from 1 cm to 1 m will reduce the carrying capacity of your load by a factor of 100.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have more questions, I recommend watching youtube videos that explains the concept of torque.&lt;/p&gt;&#xA;" OwnerUserId="22067" LastEditorUserId="22067" LastEditDate="2019-02-18T20:38:59.600" LastActivityDate="2019-02-18T20:38:59.600" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="18233" PostTypeId="2" ParentId="18230" CreationDate="2019-02-18T13:59:00.620" Score="1" Body="&lt;p&gt;The main reason why underactuated robots were introduced is to make robots more energy efficient. Robots that are not underactuated like Asimo require 20x more energy that humans to walk. In order to solve the energy issue, you need to design more efficient structures instead of brute forcing everything with motors. You need to closely tie the dynamics of walking into the structure of the robot to make it more energy efficient.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the cases where underactuated robots have simplified the programming, that's more of a positive side-effect rather than the purpose the design team went with the dynamics approach.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MIT offers a great course on edx that is solely about underactuated robots.&lt;/p&gt;&#xA;" OwnerUserId="22067" LastActivityDate="2019-02-18T13:59:00.620" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18234" PostTypeId="1" CreationDate="2019-02-19T00:10:51.960" Score="0" ViewCount="66" Body="&lt;p&gt;I am working on a calibration algorithm where the motion is related to the observability of the parameters that I am calibrating.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's say we have a 6 dof trajectory and wants to quantify its motion to see how dynamically it has moved. (e.g, to see if it is covering a wide angle in rpy space.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example to quantify the SO(3) we can convert it into so(3) then apply PCA to decompose its covariance to see the scatterness along the principal axises. A widely spread motion will give more observability on the parameter calibration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any reference paper or document for this problem?&lt;/p&gt;&#xA;" OwnerUserId="19219" LastEditorUserId="19219" LastEditDate="2019-02-22T01:16:58.013" LastActivityDate="2019-02-22T01:16:58.013" Title="How to quantify motion?" Tags="&lt;motion&gt;&lt;trajectory&gt;" AnswerCount="0" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18235" PostTypeId="2" ParentId="18228" CreationDate="2019-02-19T00:19:14.950" Score="1" Body="&lt;p&gt;This is not the answer of your question but ORB is a feature detection algorithm. Feature detection and tracking are different. Once you found a feature it is better to track them by a feature tracking algorithm such as KLT. You can also track the features by feature matching algorithms but it is not very efficient.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since features come with their own detectors, should I leave it to the detector to find the list of features within the ellipse and then match them with my previous frame feature?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-&gt; Yes&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ellipse is usually to find a Mahalanobis distance to fairly count the uncertainty. If Mahalanobis distance of the two matched features is close enough, it can be used. This is how you find a matched features in EKF slam. Just remember that this is a quite old way.&lt;/p&gt;&#xA;" OwnerUserId="19219" LastEditorUserId="19219" LastEditDate="2019-02-19T00:47:10.333" LastActivityDate="2019-02-19T00:47:10.333" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18236" PostTypeId="1" CreationDate="2019-02-19T04:59:17.370" Score="0" ViewCount="44" Body="&lt;p&gt;How do I know how many counts per revolution I need for an encoder for my application?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need to be able to accurately capture a 1000 Hz signal on an input side running from 1-133 rev/sec (60-8000 RPM) and a 1000 Hz signal on an output side with gear ratio 1:100, so speeds are .01-1.33 rev/sec (.6 - 80 RPM).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the math I have but am not sure if it is correct:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a 1000 Hz signal, it takes .001 sec for one period. But if I want to accurately capture this and accurately obtain velocity from this position data, I need 100 counts (is this a good assumption? what would be a better value?). Hence, I need 100/.001 = 100,000 cts/sec. Now, if I divide this by my rev/sec, I'll get cts/rev which is what encoders are rated at. Assuming input is running at 10 rev/sec, I need 100,000/10 = 10,000 cts/rev. Assuming output is running at .1 rev/sec, I need 1,000,000 cts/rev.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I strongly suspect my math is incorrect however because the best encoders that meet the speed requirement of my application are 1024 cts/rev for input and 72,000 cts/rev for output. Would these cts/rev actually be good enough for my application then?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For context, I need to obtain the Bode plot of a gear drive and hence plan to give sinusoidal inputs to my motor. I do not expect this the bandwidth of my gear drive to be more than 1000 Hz, but since I am not sure what it's exact number is, I would like my design to be capable of accurately measuring a 1000 Hz signal. This sinusoid will be in terms of velocity which is why I want to obtain velocity data. Also, I know it may seem odd that I am using position first and then getting velocity rather than getting velocity directly, but I want this system to be capable of positional control so I would like to only use position sensors if possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;TLDR: How many position counts are needed to get an accurate velocity reading? How many position counts per revolution do you need to capture velocity changing at a frequency of 1000 Hz?&lt;/p&gt;&#xA;" OwnerUserId="21413" LastEditorUserId="21413" LastEditDate="2019-02-19T05:19:30.137" LastActivityDate="2019-02-19T05:19:30.137" Title="Choosing a position sensor (encoder) and obtaining velocity from it" Tags="&lt;sensors&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18237" PostTypeId="1" AcceptedAnswerId="18238" CreationDate="2019-02-19T11:04:27.267" Score="1" ViewCount="313" Body="&lt;p&gt;I'm learning ROS and I have found an expression that I don't understand. I'm reading the book &quot;&lt;a href=&quot;https://www.packtpub.com/hardware-and-creative/mastering-ros-robotics-programming-second-edition&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mastering ROS for Robotics Programming - Second Edition&lt;/a&gt;&quot;, and on a controller to move a robot using keyboard said:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;differential_teleop_key already has its own built in velocity smoother&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You can find differential_teleop_key on &lt;a href=&quot;https://github.com/jocacace/diff_wheeled_robot_control/blob/master/scripts/diff_wheeled_robot_key&quot; rel=&quot;nofollow noreferrer&quot;&gt;Github&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is a Velocity Smoother?&lt;/p&gt;&#xA;" OwnerUserId="18173" LastActivityDate="2019-02-19T11:19:34.877" Title="What is a Velocity Smoother?" Tags="&lt;control&gt;&lt;simulation&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18238" PostTypeId="2" ParentId="18237" CreationDate="2019-02-19T11:19:34.877" Score="4" Body="&lt;p&gt;The velocity smoother part of the code is this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;if target_speed &amp;gt; control_speed:&#xA;            control_speed = min( target_speed, control_speed + 0.02 )&#xA;        elif target_speed &amp;lt; control_speed:&#xA;            control_speed = max( target_speed, control_speed - 0.02 )&#xA;        else:&#xA;            control_speed = target_speed&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;as you can see, regardless of how much you increase the target velocity, there will be no large jump in the controled velocity. It will always be incremented or decremented by 0.02 cyclically until it reaches the target velocity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In essence this is an acceleration limiting approach to motion control when a constant maximum acceleration is assumed and so a trapezoidal velocity profile is generated. Jerk limiting (limiting the derivative of the acceleration) produces even smoother velocity profiles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More about acceleration and jerk limiting &lt;a href=&quot;https://www.pmdcorp.com/resources/get/mathematics-of-motion-control-profiles-article&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2019-02-19T11:19:34.877" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18239" PostTypeId="1" CreationDate="2019-02-20T04:43:09.490" Score="3" ViewCount="88" Body="&lt;p&gt;newbie here.&#xA;after my research, i couldnt find anything that could found what i wanted to search for my project(following robot for indoor location).&#xA;without gps, bluetooth only, could i get the exact position of the mobile phone im pairing with?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;here some of my research:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://reprage.com/post/30701241680/teethtracker-how-to-track-mobile-phones-using&quot; rel=&quot;nofollow noreferrer&quot;&gt;bluetooth_study&lt;/a&gt;&#xA;this project use only bluetoot, but it only detect if somebody arrive in one destination, it didnt detect the exact location of the phone.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=UvfNjQFtp_A&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ubertooth&lt;/a&gt;&#xA;at 6:28, it say it could hunt down specific bluetooth device and track down its location.&#xA;However it didnt mention if its the exact location calculated from ubertooth signal itselft or reading the gps location from the phone. as we know, gps is not working indoor.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;thus my question here is.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;it is possible to track down mobile phone exact location using bluetooth alone?&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;if possible what kind of bluetooth is needed?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;if not. any other solution?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="22260" LastActivityDate="2019-10-09T14:03:15.853" Title="bluetooth that could track mobile phone location" Tags="&lt;localization&gt;&lt;precise-positioning&gt;&lt;bluetooth&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18240" PostTypeId="2" ParentId="18065" CreationDate="2019-02-20T11:42:21.280" Score="1" Body="&lt;p&gt;Generally you will need to combine more tools to achive your goals. You will need a path planner library and script, you need to move things around and you need visualisation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An open source 3D simulation environment which supports dynamic obstacles is &lt;a href=&quot;http://gazebosim.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Gazebo&lt;/a&gt;. You mention Player, as i understand that is also somthing similar, but I have never seen it in use and it seems that Gazebo &lt;a href=&quot;https://en.wikipedia.org/wiki/Player_Project&quot; rel=&quot;nofollow noreferrer&quot;&gt;grew out&lt;/a&gt; of the Player Project. Gazebo would take care about moving things around and visualisation. You will need to add a pathplanner.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for path panning libraries, probably the best known ones are &lt;a href=&quot;http://ompl.kavrakilab.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;OPML&lt;/a&gt; and &lt;a href=&quot;https://moveit.ros.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;MoveIt!&lt;/a&gt; (MoveIt! is based partially on OPML). MoveIt! is a ROS library and there are &lt;a href=&quot;https://github.com/AS4SR/general_info/wiki/Basic-ROS-MoveIt!-and-Gazebo-Integration&quot; rel=&quot;nofollow noreferrer&quot;&gt;tutorials&lt;/a&gt; how to couple this library with Gazebo.  However, OMPL and MoveIt does not include all the algorithms you have mentioned out of the box. This means that you have to search for plugins or implement the algorithms yourself. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Matlab probably has most of the algorithms you need, either in the &lt;a href=&quot;https://de.mathworks.com/help/robotics/ug/probabilistic-roadmaps-prm.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Robotics Toolbox&lt;/a&gt; or on &lt;a href=&quot;https://de.mathworks.com/matlabcentral/fileexchange/26248-a-a-star-search-for-path-planning-tutorial&quot; rel=&quot;nofollow noreferrer&quot;&gt;Matlab file exchange&lt;/a&gt;, or they can be implemented. However, rendered 3D visualisation is not as easily done as with Gazebo. If 3D plots and graphs would suffice Matlab alone is also a viable option. If not, you can connect Gazebo to Matlab by following &lt;a href=&quot;https://de.mathworks.com/help/robotics/examples/get-started-with-gazebo-and-a-simulated-turtlebot.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; tutorial. &lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2019-02-20T11:42:21.280" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18241" PostTypeId="1" AcceptedAnswerId="18242" CreationDate="2019-02-20T16:00:12.137" Score="1" ViewCount="198" Body="&lt;p&gt;Before a motion controller for a robot can be created, a step before is needed, called “system identification”. The aim is to create a prediction model which can say, what will happen if a certain movement of the robot is executed. For example, a wheeled robot which is designed upon the steering principle will change it's position if both wheels are spin with +1 speed for 1 second. The new x/y position will be ahead of the old position. If the robot's wheel are spinning with different values, for example left=+1, right=+0.5 the new position of the robot will be different.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is, that a dedicated physics engine which can predict the trajectory of a robot is hard to realize by hand. But there are some general techniques available for example genetic algorithm, rule based systems or reinforcement learning which can simplify the programming. These general systems are working with parameters who have to be adapted to a certain domain, which is called machine learning.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Question: Can a neural network be used for predicting future states of a robot? And which kind of dataset is needed for doing so?&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2019-02-20T16:44:29.113" Title="Can a neural network emulate a physics engine?" Tags="&lt;forward-kinematics&gt;&lt;machine-learning&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18242" PostTypeId="2" ParentId="18241" CreationDate="2019-02-20T16:44:29.113" Score="2" Body="&lt;p&gt;I think there are some confusing statements or inaccuracies in this question regarding fundamental concepts in robotics, control engineerging and AI/ML. I am not sure if it helps to list these or not, so I will not I just wanted to draw attention to this fact if somebody tries to used the question as a reference.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, to answer the final question:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Neural networks are universal function approximators. The dynamic model of a robot is a function mapping input (e.g. wheel torque) to output (e.g. robot velocity). So yes, in theory they can learn the dynamic model of a robot. Care must be taken and the current state of the robot should probably also be used as input to the neural network or some kind of RNN should be used. Also in the case of the dynamic model, only torque input is not enough, the current state of the robot is also needed to compute the cartesian velocity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In practice the right arhitecture needs to be selected, the dataset needs to be defiend and the networks needs to be trained. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Part of the question refers to the dataset.&lt;br&gt;&#xA;The input and output of the neural network is the same as of the function it will learn. So in case of a forward dynamic model, the input can be 2 torques (and the current sate) and the output can the cartesian velocity of the robot. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to obtain such a dataset:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;one could log the data from a real robot as it drives around, making sure that there are enough samples from all areas of the input space. In this case the dynamic model would not be used while driving aournd, just input tortques would be generated. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;one could use an exising dynamic model and learn that. This might be counterintuitive, since the function already exists. This would only make sense if the neural network which learns the function would infer (significantly) faster then the execution time of the dynamic model.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2019-02-20T16:44:29.113" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18243" PostTypeId="1" CreationDate="2019-02-20T22:11:06.857" Score="0" ViewCount="194" Body="&lt;p&gt;I'm trying to figure out an easy lazy susan setup.  This is for video production, I want to be able to put an object on the platter and get a smooth consistent turn in order to shoot the object spinning.  What would be the best way/parts to put this together?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="22351" LastActivityDate="2021-04-12T05:03:25.260" Title="motor controlled lazy susan" Tags="&lt;control&gt;&lt;motor&gt;&lt;gearing&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18244" PostTypeId="2" ParentId="18243" CreationDate="2019-02-21T01:46:14.280" Score="0" Body="&lt;p&gt;Here's the easiest setup with the lowest learning curve I can think of. What you can do is you can buy this robot car kit for $36: &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/B0794PWD7J&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.amazon.com/dp/B0794PWD7J/ref=psdc_2528074011_t1_B07KPZ8RSZ&lt;/a&gt;&#xA;I am not affiliate with this seller in any way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then you just need to glue/double-sided tape the bottom of the lazy susan setup to the top of a car wheel and figure out a way to hide the car setup in your video.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can modify the speed of the wheel by adjusting the sleep time and toggling the motor voltage from low to high in code. When a motor voltage is low, the wheel will not move. When it's high, it will move at max speed. In order to slow down the motor, you can sleep for a fraction of second, then move for a fraction of a second, then sleep again. The car kit will come with a manual to help you understand.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So now the more complex answer requiring more technical know-how:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;You will need a DC motor. A motor has a metal rod at the end so you need a shaft attachment so you can glue the lazy susan to the top of it. Make sure the DC motor has enough torque to spin your lazy susan and whatever is on it.&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You can control the DC motor with a circuit controlled by an NE555 timer chip. You can google NE555 timer DC motor setups and you'll get some circuit diagrams which you will have to build. Alternatively, you can buy and arduino/microprocessor to control your DC motor.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You can use a servo motor as well such as the MG996R. Servo motors comes with servo horns which you can glue/double-sided tape the lazy susan directly to. You modify the servo motor to be able to spin continuously. Here's all the info you'll need if you go down that route: &lt;a href=&quot;https://www.youtube.com/watch?v=J8atdmEqZsc&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=J8atdmEqZsc&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="22067" LastActivityDate="2019-02-21T01:46:14.280" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18245" PostTypeId="2" ParentId="18239" CreationDate="2019-02-21T08:11:39.937" Score="1" Body="&lt;p&gt;For localization problems, you will always need to have some references to look at (using only the IMUs of the phone will lead in error as time increases). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, GPS uses the relative position of the satellites, LIDAR SLAM uses the relative position of features, Wi-Fi positioning systems use the relative position of the access points. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your case, you would need to have some kind of Bluetooth references, receivers/emitters to check the strength of the signal and estimate the position of your device. I have never seen any of this, but it seems interesting to have more alternatives to localisation techniques. &lt;/p&gt;&#xA;" OwnerUserId="22210" LastEditorUserId="22210" LastEditDate="2019-10-09T14:03:15.853" LastActivityDate="2019-10-09T14:03:15.853" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18247" PostTypeId="2" ParentId="18239" CreationDate="2019-02-21T15:31:55.653" Score="1" Body="&lt;p&gt;Yes it might be possible to obtain the location of the robot, if you use multiple Bluetooth nodes(&lt;em&gt;preferably 4 excluding the one in the robots for a free space&lt;/em&gt;)  and use the rssi values from the Bluetooth nodes to triangulate the position. But still the output is susceptible to high covariance due to some environmental factors, so for a more accurate solution you may try random forest classifiers to find a solution with lesser covariance&lt;/p&gt;&#xA;" OwnerUserId="22330" LastActivityDate="2019-02-21T15:31:55.653" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18248" PostTypeId="1" CreationDate="2019-02-21T15:43:33.380" Score="1" ViewCount="22" Body="&lt;p&gt;I need to construct a Mobile robots preferably circular type of diameter 30 cm, it will be carrying a payload of 5kg. What will be optimal thickness the baseplate considering the material as aluminium? How to calculate these kind of these kind of problems&lt;/p&gt;&#xA;" OwnerUserId="22330" LastActivityDate="2019-02-21T15:43:33.380" Title="Design of the baseplate of mobile robot" Tags="&lt;mobile-robot&gt;&lt;design&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18251" PostTypeId="1" CreationDate="2019-02-21T21:42:40.177" Score="-1" ViewCount="25" Body="&lt;p&gt;Thank you for any input in advance!  Also I am not totally sure this is the right place for this question.  If not then I apologize but couldn't think of a better place to post it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am working on a project that requires several small motors communicating with a phone / raspberry pi / camera in order to perform functions in a regulated order.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Without too many details (hopefully)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1.A wheel advances 1 rotation (roughly) to deliver an item onto a conveyor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2.A picture is taken of the item&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3.data is parsed on the raspberry pi or some kind of computing device&lt;/p&gt;&#xA;&#xA;&lt;p&gt;4.depending on the input from the image the conveyor moves the item bi directionally.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;5.Process repeats.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although I have figured out how I want to build most of this (in terms of teh physical structure, the little motors I want to use etc.) I am not sure how to accomplish the communication between all the various parts of the machine / robot.  IE the brains of the operation. Ideally something that can choreograph all the movements I mentioned, receive data from a camera or smart phone / app, send instructions to the motors on when to act etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any expertise you can share would be highly valued.  I am a novice, and an enthusiast only.  Although this project may take on a commercial scale eventually I am essentially working on a prototype and it may only end up ever being something I do as a hobby / for fun anyway.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you!&lt;/p&gt;&#xA;" OwnerUserId="22359" LastActivityDate="2019-02-22T09:37:49.020" Title="Project suggestions" Tags="&lt;industrial-robot&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18254" PostTypeId="2" ParentId="18251" CreationDate="2019-02-22T09:37:49.020" Score="0" Body="&lt;p&gt;I can't comment yet your question, I don't have enough reputation, so I apologize for commenting here!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think that you need to specify a few things so that we can fully understand your problem:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;You mentionned a &quot;phone / raspberry pi / camera&quot;, as you used &quot;/&quot;, are those objects all required or not ? Because the camera seems necessary but not the raspberry pi and the phone (this depends on the global aim of the project)!&lt;/li&gt;&#xA;&lt;li&gt;You explain that there are some small motors, but have you chosen them or not ?  &lt;/li&gt;&#xA;&lt;li&gt;Do your question concern also the choice of motors ?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I would just advise you to do some system engineering in order to have a top-down view of what is expected with this project. In this kind of projects you need to carefully list the requirements and the interfaces of each component (this approach may also answer a lot of your questions).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To give you some clues, your motors may requires an electronic board (like an &lt;a href=&quot;https://en.wikipedia.org/wiki/Electronic_speed_control&quot; rel=&quot;nofollow noreferrer&quot;&gt;ESC for brushless motors&lt;/a&gt;, a &lt;a href=&quot;https://en.wikipedia.org/wiki/Stepper_motor#Stepper_motor_driver_circuits&quot; rel=&quot;nofollow noreferrer&quot;&gt;driver for steppers&lt;/a&gt;, etc) to be controlled by a computer. The raspberry is capable of generating PWM commands (usually the kind of signals used to command a motor driver) but with such a slow frequency that we usually don't use it to control motors (this depends on your requirements), if you can't use it you will need a &lt;a href=&quot;https://www.pololu.com/category/102/maestro-usb-servo-controllers&quot; rel=&quot;nofollow noreferrer&quot;&gt;servo-controller like one of these&lt;/a&gt;. Then if you use a raspberry pi to communicate with this board, a basic &lt;a href=&quot;https://en.wikipedia.org/wiki/Bus_(computing)&quot; rel=&quot;nofollow noreferrer&quot;&gt;bus like USB&lt;/a&gt; may be enough. If you need to have a phone app to remotely supervise all, you will need to use the Wifi... etc&lt;/p&gt;&#xA;" OwnerUserId="20483" LastActivityDate="2019-02-22T09:37:49.020" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18255" PostTypeId="1" AcceptedAnswerId="18258" CreationDate="2019-02-22T09:41:31.220" Score="1" ViewCount="264" Body="&lt;p&gt;I am a complete newbie to robotics, so please excuse me if this is a simple question. I bought this robot starter kit and need help understanding which features are associated to which GPIO pins:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/bncUY.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/bncUY.png&quot; alt=&quot;AlphaBot2-Base&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gtH8w.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gtH8w.png&quot; alt=&quot;AlphaBot2-Pi&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are the schematics:&#xA;&lt;a href=&quot;https://www.waveshare.com/w/upload/7/72/AlphaBot2-Pi-Schematic.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Schematics&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this information sufficient for me to know what feature is mapped to the GPIO pins or do I have to follow some type of trial and error process to figure it out? Your help would be greatly appreciated.&lt;/p&gt;&#xA;" OwnerUserId="22364" LastActivityDate="2019-02-22T20:31:32.033" Title="Help Interpreting Raspberry Pi GPIO's allocated to Robot starter kit called AlphaBot2" Tags="&lt;raspberry-pi&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18256" PostTypeId="1" CreationDate="2019-02-22T12:00:04.720" Score="1" ViewCount="215" Body="&lt;p&gt;I've currently built a quadrotor with standard PID controllers for attitude, angular rates, and position control. I now want to implement obstacle avoidance and path planning using A*. I have a stereo sensor that outputs depth maps, however I am not sure how to use depth maps to translate into the path planner. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do I have to first use SLAM techniques to create a local map from the depth maps, and then use A* on that local map? Any relevant material is appreciated.&lt;/p&gt;&#xA;" OwnerUserId="21285" LastActivityDate="2019-02-22T21:28:33.877" Title="How to use depth map in A* path planning?" Tags="&lt;quadcopter&gt;&lt;planning&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18257" PostTypeId="2" ParentId="17964" CreationDate="2019-02-22T15:25:51.350" Score="1" Body="&lt;p&gt;After much researching, I found an answer to my question. I think I asked the wrong question. The robot moves in opposite direction initially and then in correct direction because it is a non-minimum phase system meaning it has a pole in right half plane. These kind of systems initially move in opposite direction before moving in correct direction. This is clearly explained in &lt;a href=&quot;https://www.youtube.com/watch?v=ReAmUJMb1d8&amp;amp;list=PLMrJAkhIeNNR20Mz-VpzgfQs5zrYi085m&amp;amp;index=36&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; video at time = 7:46 minute. &lt;/p&gt;&#xA;" OwnerUserId="22037" LastEditorUserId="22037" LastEditDate="2019-03-10T10:32:30.140" LastActivityDate="2019-03-10T10:32:30.140" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18258" PostTypeId="2" ParentId="18255" CreationDate="2019-02-22T20:31:32.033" Score="0" Body="&lt;p&gt;Waveshare maintain a &lt;a href=&quot;https://www.waveshare.com/wiki/AlphaBot2-Pi&quot; rel=&quot;nofollow noreferrer&quot;&gt;wiki page for the Alphabot2&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the resources section on that page, there are some links to demo code which contains definitions for the allocation of GPIO pins.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It looks like the specific file you want is &lt;a href=&quot;https://www.waveshare.com/w/upload/e/ee/AlphaBot2-Demo.7z&quot; rel=&quot;nofollow noreferrer&quot;&gt;AlphaBot2-Demo.7z&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The compressed file contains a folder named Python:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/v6gqD.png&quot; alt=&quot;Python folder&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've taken the mappings below from these files.  Note that this list of GPIO mappings may not be exhaustive as I haven't fully followed through on checking file dependencies etc.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Note also that the pin assignments used in the code use Broadcom GPIO numbers (BCM). These are the &lt;em&gt;GPIOxx&lt;/em&gt; numbers on the diagram below, not the actual pin numbers on the header:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/nUxZy.png&quot; alt=&quot;Raspberry Pi GPIO pins&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;AlphaBot2.py&lt;/strong&gt;  appears to control the robot's motors. The pin assignments are:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ain1=12&#xA;ain2=13&#xA;ena=6&#xA;bin1=20&#xA;bin2=21&#xA;enb=26&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Ultrasonic_Obstacle_Avoidance.py&lt;/strong&gt;  and &lt;strong&gt;Ultrasonic_Ranging.py&lt;/strong&gt; specify:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;TRIG = 22&#xA;ECHO = 27&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Which are obviously the pins allocated to your ultrasonic sensor&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Similarly, &lt;strong&gt;Infrared_Obstacle_Avoidance.py&lt;/strong&gt; specifies&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;DR = 16&#xA;DL = 19&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;which are the pins used by the IR sensor&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;TRSensors.py&lt;/strong&gt; specifies:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;CS = 5 &#xA;Clock = 25 &#xA;Address = 24 &#xA;DataOut = 23 &#xA;Button = 7&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;IRremote.py&lt;/strong&gt; sets&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;IR = 17&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;For your remote control&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Joystick.py&lt;/strong&gt; assigns the following pins:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;CTR = 7&#xA;A = 8&#xA;B = 9&#xA;C = 10&#xA;D = 11&#xA;BUZ = 4&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Line_Follow.py&lt;/strong&gt; also sets GPIO7:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Button = 7&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Finally, &lt;strong&gt;ws2812.py&lt;/strong&gt; sets the LED pin to 18&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;LED_PIN = 18  # GPIO pin connected to the pixels (must support PWM!).&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="17029" LastActivityDate="2019-02-22T20:31:32.033" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18259" PostTypeId="2" ParentId="18256" CreationDate="2019-02-22T21:28:33.877" Score="2" Body="&lt;p&gt;I would recommend using some sort of discretized local map. For 3D use octomap (&lt;a href=&quot;https://octomap.github.io/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://octomap.github.io/&lt;/a&gt;) and 2D a grid map. But honestly, I would try the laziest option, putting each depth reading in octomap form and planning with it to see if a local map is really needed. Remember that you have to represent non-occupied space to use A*. The discretized representation of octomap is well suited for it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Summing up,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depth map reading -&gt; To discretized octomap form -&gt; Plan -&gt; Repeat&lt;/p&gt;&#xA;" OwnerUserId="20197" LastActivityDate="2019-02-22T21:28:33.877" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18260" PostTypeId="2" ParentId="18179" CreationDate="2019-02-22T21:35:18.893" Score="2" Body="&lt;p&gt;This is the typical calibration you need to do depending on the sensors you have, there is no optimal solution. And this is why you have to know your sensors specs. Actually, that precisely what gmapping (&lt;a href=&quot;http://wiki.ros.org/gmapping&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://wiki.ros.org/gmapping&lt;/a&gt;) does.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, the answer there is no answer. Each situation will force to recalibrate based on your sensors, the type of environment you have, your type of movement, etc.&lt;/p&gt;&#xA;" OwnerUserId="20197" LastActivityDate="2019-02-22T21:35:18.893" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18261" PostTypeId="1" AcceptedAnswerId="18262" CreationDate="2019-02-22T22:02:23.193" Score="0" ViewCount="70" Body="&lt;p&gt;When using the Yaskawa Smart Pendant SDK API (Java client), it is possible to set multi-byte I/O values via:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;controller.setOutputGroups(outNum, 2, value16bits);&#xA;&#xA;controller.setOutputGroups(outNum, 4, value32bits);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;However, sometimes the byte ordering is wrong. Depending on the product vendor or if using Ethernet/IP or IOLink, multi-byte values can be big-endian or little-endian.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I swap the ordering?&lt;/p&gt;&#xA;" OwnerUserId="16622" LastEditorUserId="16622" LastEditDate="2020-02-14T19:49:04.783" LastActivityDate="2020-02-14T19:49:04.783" Title="How to change endian for multi-byte I/O outputs?" Tags="&lt;industrial-robot&gt;&lt;smartpendant&gt;&lt;yaskawa&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18262" PostTypeId="2" ParentId="18261" CreationDate="2019-02-22T22:07:13.603" Score="1" Body="&lt;p&gt;The API doesn't have any direct support for endian conversion / byte-swapping.  However, there are some Java functions that can handle it:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Short.reverseBytes(short i16)&#xA;Integer.reverseBytes(int i32)&#xA;Long.reverseBytes(long i64)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So, the calls in the question would become:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;controller.setOutputGroups(outNum, 2, Short.reverseBytes(value16bits));&#xA;controller.setOutputGroups(outNum, 4, Integer.reverseBytes(value32bits));&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="16622" LastActivityDate="2019-02-22T22:07:13.603" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18264" PostTypeId="2" ParentId="1547" CreationDate="2019-02-22T22:36:37.357" Score="1" Body="&lt;p&gt;The &lt;a href=&quot;http://www.coppeliarobotics.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;V-Rep&lt;/a&gt; simulator can use a few physics engines that have some soft-body support, including:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.vxsim.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Vortex Dynamics&lt;/a&gt; (commercial) which has some soft-body support for specific cases&lt;/li&gt;&#xA;&lt;li&gt;The &lt;a href=&quot;http://bulletphysics.org&quot; rel=&quot;nofollow noreferrer&quot;&gt;Bullet Physics Engine&lt;/a&gt; (FOSS) which has support for soft-body simulation (though it isn't supported in the current version of V-Rep)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="16622" LastActivityDate="2019-02-22T22:36:37.357" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18269" PostTypeId="2" ParentId="18129" CreationDate="2019-02-23T21:45:37.390" Score="0" Body="&lt;p&gt;I think the debate is a bit off topic.  To me, the question is about why is the inverse kinematics wrong when applied to a forward kinematics solution computed for joint angles &lt;span class=&quot;math-container&quot;&gt;$\ge$&lt;/span&gt; 90 deg.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To explore this I built a model using my Robotics Toolbox for MATLAB&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt; r = SerialLink([0 133 0 -pi/2; 0 0 98 0; 0 0 220 0])&#xA;r = &#xA;&#xA;noname:: 3 axis, RRR, stdDH, fastRNE                             &#xA;+---+-----------+-----------+-----------+-----------+-----------+&#xA;| j |     theta |         d |         a |     alpha |    offset |&#xA;+---+-----------+-----------+-----------+-----------+-----------+&#xA;|  1|         q1|        133|          0|    -1.5708|          0|&#xA;|  2|         q2|          0|         98|          0|          0|&#xA;|  3|         q3|          0|        220|          0|          0|&#xA;+---+-----------+-----------+-----------+-----------+-----------+&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;then I computed the forward kinematics for the first and last joint configurations in @B.Antony's question:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt; r.fkine([0 0 0])&#xA;ans = &#xA;         1         0         0       318&#xA;         0         0         1         0&#xA;         0        -1         0       133&#xA;         0         0         0         1&#xA;&#xA;&amp;gt;&amp;gt; T = r.fkine([90 90 90], 'deg')&#xA;T = &#xA;         0         0        -1         0&#xA;        -1         0         0      -220&#xA;         0         1         0        35&#xA;         0         0         0         1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and the answers match what's in the graphs provided. So far, so good.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ignoring the debate about analytical versus numerical solutions I'm going to use a numerical solution since it's general and I have it to hand:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt; q = r.ikine(T, 'mask', [1 1 1 0 0 0])&#xA;q =&#xA;   -1.5708   -0.7327    1.5708&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where &lt;code&gt;mask&lt;/code&gt; indicates that we only care about solving for the first 3 elements of the Cartesian pose (x,y,z).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We see this solution is different to what was input to the forward kinematics and it has flipped &lt;span class=&quot;math-container&quot;&gt;$\theta_1$&lt;/span&gt; around, but we can easily verify that the solution is correct&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt; r.fkine(q)&#xA;ans = &#xA;         0         0         1         0&#xA;   -0.6689    0.7434         0      -220&#xA;   -0.7434   -0.6689         0        35&#xA;         0         0         0         1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Note: the translation part is correct, the rotation part is different but we don't have enough DoF to independently control that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We can try and find a solution with a positive &lt;span class=&quot;math-container&quot;&gt;$\theta_1$&lt;/span&gt; by setting the initial joint angles for the IK&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt; r.ikine(T, 'mask', [1 1 1 0 0 0], 'q0', [pi/2 0 0])&#xA;ans =&#xA;    1.5708    1.5708    1.5708&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;which is the set of joint angles we started with, so this is another valid solution, the blue line in the graph.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't think the red solution shown in the graph of &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt; values is correct&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt; r.fkine([90 -90 90], 'deg')&#xA;ans = &#xA;         0         0        -1         0&#xA;         1         0         0       220&#xA;         0        -1         0       231&#xA;         0         0         0         1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;is far from the initial pose shown above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Conclusion the IK equations implemented are not correct.  There should be at least 4 solutions: 2 for q1 (you have only 1), and 2 for q2 (which you have).  Maybe another set of 4 where &lt;span class=&quot;math-container&quot;&gt;$\theta_2$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\theta_3$&lt;/span&gt; are offset by 180deg.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can automatically generate an analytic solution (you need the MATLAB Symbolic Math Toolbox to do this bit)&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt; q = r.ikine_sym(3)&#xA;----- solving for joint 1&#xA;subs sin/cos q1 for S/C&#xA;----- solving for joint 2&#xA;lets square and add 1 2&#xA;subs sin/cos q2 for S/C&#xA;----- solving for joint 3&#xA;subs sin/cos q3 for S/C&#xA;**final simplification pass&#xA;&#xA;q =&#xA;  1×3 cell array&#xA;    {1×2 sym}    {1×2 sym}    {1×2 sym}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Looking at the solution for $\theta_1$&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt; q{1}&#xA;ans =&#xA;[ atan2(-ty, -tx), atan2(ty, tx)]&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;we can see the two solutions. &lt;/p&gt;&#xA;" OwnerUserId="21223" LastActivityDate="2019-02-23T21:45:37.390" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18270" PostTypeId="2" ParentId="299" CreationDate="2019-02-23T22:09:05.093" Score="1" Body="&lt;p&gt;There are two broad approaches:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;analytic solutions, given an end-effector pose, directly compute the joint coordinates.  In general the solution is not unique, so you can compute a set of possible joint coordinates.  Some may cause the robot to hit things in its environment (or itself), or your task might help you choose a particular solution, ie. you might prefer the elbow to up (or down), or the robot to have its arm to the left (or right) of its trunk.  In general there are constraints on obtaining an analytic solution, for 6-axis robots, a spherical wrist (all axes intersect)is assumed.  The analytic solutions for many different types of robots have been computed over the decades and you can probably find a paper that gives a solution for your robot.&lt;/li&gt;&#xA;&lt;li&gt;numeric solutions, as described in the other answers, uses an optimisation approach to adjust the joint coordinates until the forward kinematics gives the right solution.  Again, there's a huge literature on this, and lots of software.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Using my Robotics Toolbox for MATLAB, I create a model of a well known 6-axis robot using Denavit-Hartenberg parameters&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt; mdl_puma560&#xA;&amp;gt;&amp;gt; p560&#xA;&#xA;p560 = &#xA;&#xA;Puma 560 [Unimation]:: 6 axis, RRRRRR, stdDH, fastRNE            &#xA; - viscous friction; params of 8/95;                             &#xA;+---+-----------+-----------+-----------+-----------+-----------+&#xA;| j |     theta |         d |         a |     alpha |    offset |&#xA;+---+-----------+-----------+-----------+-----------+-----------+&#xA;|  1|         q1|          0|          0|     1.5708|          0|&#xA;|  2|         q2|          0|     0.4318|          0|          0|&#xA;|  3|         q3|    0.15005|     0.0203|    -1.5708|          0|&#xA;|  4|         q4|     0.4318|          0|     1.5708|          0|&#xA;|  5|         q5|          0|          0|    -1.5708|          0|&#xA;|  6|         q6|          0|          0|          0|          0|&#xA;+---+-----------+-----------+-----------+-----------+-----------+&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;then choose a random joint coordinate&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt; q = rand(1,6)&#xA;q =&#xA;    0.7922    0.9595    0.6557    0.0357    0.8491    0.9340&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;then compute the forward kinematics&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt; T = p560.fkine(q)&#xA;T = &#xA;   -0.9065    0.0311   -0.4210  -0.02271&#xA;    0.2451    0.8507   -0.4649   -0.2367&#xA;    0.3437   -0.5247   -0.7788    0.3547&#xA;         0         0         0         1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Now we can compute the inverse kinematics using a published analytic solution for a robot with 6 joints and a spherical wrist&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt; p560.ikine6s(T)&#xA;ans =&#xA;    0.7922    0.9595    0.6557    0.0357    0.8491    0.9340&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and voila, we have the original joint coordinates.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The numerical solution&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt; p560.ikine(T)&#xA;Warning: ikine: rejected-step limit 100 exceeded (pose 1), final err 0.63042 &#xA;&amp;gt; In SerialLink/ikine (line 244) &#xA;Warning: failed to converge: try a different initial value of joint coordinates &#xA;&amp;gt; In SerialLink/ikine (line 273) &#xA;&#xA;ans =&#xA;&#xA;     []&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;has failed, and this is a common problem since they typically need a good initial solution.  Let's try&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt; p560.ikine(T, 'q0', [1 1 0 0 0 0])&#xA;ans =&#xA;    0.7922    0.9595    0.6557    0.0357    0.8491    0.9340&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;which now gives an answer but it is different to the analytic solution. That's ok though, since there are multiple solutions to the IK problem.  We can verify that our solution is correct by computing the forward kinematics&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt; p560.fkine(ans)&#xA;ans = &#xA;   -0.9065    0.0311   -0.4210  -0.02271&#xA;    0.2451    0.8507   -0.4649   -0.2367&#xA;    0.3437   -0.5247   -0.7788    0.3547&#xA;         0         0         0         1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and checking that it is the same as the transform we started with (which it is).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other resources:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;free video lectures on this topic, search for kinematics at the &lt;a href=&quot;http://www.robotacademy.net.au&quot; rel=&quot;nofollow noreferrer&quot;&gt;Robot Academy&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://petercorke.com/wordpress/books/book&quot; rel=&quot;nofollow noreferrer&quot;&gt;Chapter 7 of &lt;em&gt;Robotics, Vision &amp;amp; Control (2e)&lt;/em&gt;, Corke, Springer 2017&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="21223" LastEditorUserId="21223" LastEditDate="2019-02-23T22:42:19.703" LastActivityDate="2019-02-23T22:42:19.703" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18271" PostTypeId="2" ParentId="7724" CreationDate="2019-02-23T22:37:07.897" Score="0" Body="&lt;p&gt;Consider an arbitrary rotation matrix &lt;span class=&quot;math-container&quot;&gt;$\bf R$&lt;/span&gt; &lt;span class=&quot;math-container&quot;&gt;$\in$&lt;/span&gt; SO(3).  We can use it transform a vector &lt;span class=&quot;math-container&quot;&gt;$v \in {\mathbb R}^3$&lt;/span&gt; by &lt;span class=&quot;math-container&quot;&gt;$$ w = {\bf R}v$$&lt;/span&gt;&#xA;Intuitively, if &lt;span class=&quot;math-container&quot;&gt;$v$&lt;/span&gt; corresponds to the rotation axis of &lt;span class=&quot;math-container&quot;&gt;$\bf  R$&lt;/span&gt; then it will be unchanged by the rotation, that is, &lt;span class=&quot;math-container&quot;&gt;$w = v$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the rotation axis must be an eigenvector of &lt;span class=&quot;math-container&quot;&gt;$\bf R$&lt;/span&gt;.  Since &lt;span class=&quot;math-container&quot;&gt;$\bf R$&lt;/span&gt; is  a 3x3 matrix it has 3 eigenvectors.  Each eigenvector has an associated eigenvalue: there is always at least one eigenvalue equal to 1 (ie. the vector's length is unchanged by the rotation), and for non-zero rotation the other two eigenvalues are a complex conjugate pair.  The eigenvector corresponding to the eigenvalue equal to one is the rotation axis. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A simple example in MATLAB&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt; R = roty(0.3)&#xA;R =&#xA;    0.9553         0    0.2955&#xA;         0    1.0000         0&#xA;   -0.2955         0    0.9553&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;which is a rotation of 0.3 radians about the y-axis (this function is from my Robotics Toolbox for MATLAB).&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt; [x,e] = eig(R)&#xA;&#xA;x =&#xA;&#xA;   0.7071 + 0.0000i   0.7071 + 0.0000i   0.0000 + 0.0000i&#xA;   0.0000 + 0.0000i   0.0000 + 0.0000i   1.0000 + 0.0000i&#xA;   0.0000 + 0.7071i   0.0000 - 0.7071i   0.0000 + 0.0000i&#xA;&#xA;e =&#xA;&#xA;   0.9553 + 0.2955i   0.0000 + 0.0000i   0.0000 + 0.0000i&#xA;   0.0000 + 0.0000i   0.9553 - 0.2955i   0.0000 + 0.0000i&#xA;   0.0000 + 0.0000i   0.0000 + 0.0000i   1.0000 + 0.0000i&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where &lt;code&gt;x&lt;/code&gt; is a matrix whose columns are the eigenvectors, and &lt;code&gt;e&lt;/code&gt; is a diagonal matrix of eigenvalues.  The unit eigenvalue is in column 3 so our rotation axis is the third column of &lt;code&gt;x&lt;/code&gt; which is real and equal to &lt;span class=&quot;math-container&quot;&gt;$[0, 1, 0]^T$&lt;/span&gt; which is a unit-vector parallel to the y-axis &amp;mdash; the original axis of rotation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The complex eigenvalues tell you about the amount of rotation around the axis&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt; angle(e(1,1))&#xA;ans =&#xA;    0.3000&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The Toolbox has a function which does all this for you&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt; [theta,v] = tr2angvec(R)&#xA;&#xA;theta =&#xA;    0.3000&#xA;&#xA;v =&#xA;         0    1.0000         0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;To go in the opposite direction, from a rotation axis and angle, to a rotation matrix use Rodrigues' formula.  This is provided in the Toolbox as&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt; angvec2r(theta,v)&#xA;ans =&#xA;    0.9553         0    0.2955&#xA;         0    1.0000         0&#xA;   -0.2955         0    0.9553&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="21223" LastActivityDate="2019-02-23T22:37:07.897" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18274" PostTypeId="1" AcceptedAnswerId="18276" CreationDate="2019-02-24T09:28:25.350" Score="0" ViewCount="41" Body="&lt;p&gt;I'm trying to find some youtube videos which are showing robot arms with some malfunction in it. The problem is, that the keyword is unclear. Should i search for “unstable”, “tremble”, “jerking” or “vibrate” as additional word?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm sure, that especially lowcost robot arms have often this kind of behavior. If the mechanic contains only of cheap plastic and the servo motor isn't accurate, the construction will result into an underactuated system which is difficult to control. But i like this behavior, because this provides the challenge to develop a motion controller which can overcome the issue with software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are any example videos available, in which the robot arm is quite inaccurate and makes it hard to position the endeffector to the target?&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2019-03-26T14:01:32.420" Title="Are examples for jerking robotarms available?" Tags="&lt;control&gt;&lt;stability&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18276" PostTypeId="2" ParentId="18274" CreationDate="2019-02-24T12:06:42.347" Score="0" Body="&lt;p&gt;The phenomena you're looking for is called &lt;a href=&quot;https://en.wikipedia.org/wiki/Stick-slip_phenomenon&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;stick slip.&quot;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Static friction is the friction that hold an object stationary. Dynamic friction is the sliding friction between surfaces you get while in motion. In the transition from static to dynamic frictions, it's basically like flicking the load with a force equal to the difference between the two friction coefficients. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem comes when that impulse is large enough that it accelerates the load faster than the actuator/actor can keep up. If the load accelerates so much that it has the chance to come to a stop before the actuator catches up to the load, then you re-enter the static friction regime. This happens over and over; stick, slip, stick, slip, and typically happens fast enough that it enters the audible range. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found a &lt;a href=&quot;https://www.youtube.com/watch?v=umAD17UJFmE&quot; rel=&quot;nofollow noreferrer&quot;&gt;pretty entertaining video on YouTube&lt;/a&gt; that gives lots of good examples along with a more detailed engineering explanation. I skipped around a bit, but I don't think they showed a robot arm. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2019-02-24T12:06:42.347" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18277" PostTypeId="1" CreationDate="2019-02-24T17:16:06.580" Score="0" ViewCount="597" Body="&lt;p&gt;This is my first robotics experience, outside of one class 10 years ago. I've been Googling this question for about an hour but I can't find an answer!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm using a ROHS Step Motor 28BYJ-48 (with an Arduino Uno). The rotating shaft that sticks out of the step motor seems to be called a &quot;double-flat drive&quot;. It's less than 1/4&quot; wide, and is flattened on two sides.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/POReL.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/POReL.png&quot; alt=&quot;stepper motor&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need to attach a 6&quot; long arm to it, so the arm can spin like the second hand on a wall clock, but in both directions. &lt;strong&gt;What can I use to attach the arm securely to the shaft?&lt;/strong&gt; What's the name of the part that will couple this double-flat drive shaft to a straight, flat piece at a right angle to it? Or are there flat metal circles with holes in them that can be coupled to the double-flat drive shaft without slipping - and what's the Google search phrase I should use to find them?&lt;/p&gt;&#xA;" OwnerUserId="20996" LastEditorUserId="20996" LastEditDate="2019-02-24T17:35:04.720" LastActivityDate="2019-02-24T17:49:25.377" Title="How can I attach an arm to a double-flat drive stepper motor?" Tags="&lt;motor&gt;&lt;design&gt;&lt;mechanism&gt;&lt;joint&gt;&lt;rotation&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18278" PostTypeId="1" CreationDate="2019-02-24T17:35:30.060" Score="4" ViewCount="239" Body="&lt;p&gt;When the only inputs to your robot are the next x,y,z coordinates of the next point on and on, I can simply just calculate IK to find the angles and make my actuators move to these angles. Whats the point in calculating forward kinematics in this case? does it merely act as a check for your inverse kinematics integrity? (this shouldn't be accurate because I don't think an analytical solution of the IK will have errors). I see no purpose in calculating the forwards kinematics in this application.&lt;/p&gt;&#xA;" OwnerUserId="20169" LastActivityDate="2019-03-01T08:57:03.997" Title="Is it correct to think of forward kinematics as merely a 'check' for the inverse kinematics?" Tags="&lt;robotic-arm&gt;&lt;inverse-kinematics&gt;&lt;forward-kinematics&gt;" AnswerCount="5" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="18279" PostTypeId="2" ParentId="18278" CreationDate="2019-02-24T17:39:45.140" Score="2" Body="&lt;p&gt;You can control the robot using just the inverse kinematics solution.  However, you must be careful to handle the multiple inverse solutions properly (for example, &lt;span class=&quot;math-container&quot;&gt;$acos(\theta) = acos(-\theta))$&lt;/span&gt;.  Forward kinematics can help you visualize the selected solution.  They are also helpful when building a graphical simulation of the robot.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2019-02-24T17:39:45.140" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18280" PostTypeId="2" ParentId="18277" CreationDate="2019-02-24T17:49:25.377" Score="1" Body="&lt;p&gt;You can use a D or Double D shaped shaft collar/coupler.  Or obtain a Double D shaped punch, depending on the design of the piece you are attaching to the shaft. &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2019-02-24T17:49:25.377" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18281" PostTypeId="1" CreationDate="2019-02-24T18:00:47.790" Score="2" ViewCount="105" Body="&lt;p&gt;I'm doing my Engineering in Electronics, what subjects which I need to specialize in order get into robotics and also suggest additional things I have to study&lt;/p&gt;&#xA;" OwnerUserId="22390" LastActivityDate="2019-03-27T16:21:29.537" Title="What are the prerequisites for entering into robotics?" Tags="&lt;irobot-create&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18282" PostTypeId="2" ParentId="9642" CreationDate="2019-02-25T04:29:31.140" Score="5" Body="&lt;p&gt;A holonomic constraint is a constraint on configuration: it says there are places you cannot go. That is a reduction in freedoms. That’s (usually) bad.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A nonholonomic constraint is a constraint on velocity: there are directions you cannot go. But you can still get wherever you want. That’s (usually) good!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ref: Mechanics of Manipulation by Mathew T. Mason&lt;/p&gt;&#xA;" OwnerUserId="21747" LastActivityDate="2019-02-25T04:29:31.140" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18283" PostTypeId="2" ParentId="18281" CreationDate="2019-02-25T05:58:02.043" Score="2" Body="&lt;p&gt;Robotics is an interdisciplinary field in which people from various backgrounds (such as mechanical engineering, CS, electrical engineering, machine learning, control systems...) work together. I guess it depends on you which part of it you are interested in. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can choose perception and localization, or motion control, or machine learning etc. Then you should take courses based on your interested field.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although you need basic computer programming skills and some understanding of simulation platforms like ROS or Matlab.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope it would help.&lt;/p&gt;&#xA;" OwnerUserId="21747" LastActivityDate="2019-02-25T05:58:02.043" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18284" PostTypeId="2" ParentId="18281" CreationDate="2019-02-25T08:22:26.040" Score="0" Body="&lt;p&gt;I would advise you to start with a basic robot controlled through Arduino (An Arduino Uno/Mega with 2 motors controlled or not by a motor-shield, a few sensors like ultrasonic ones...) like &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/B01LXY7CM3&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;this frame&lt;/a&gt;. Arduino boards does an abstraction of the very specific electronics to control motors, you also have an easy language to control your board (with a good community to help you and lots of already existing libraries). This will help you focus on the control part (feedback control)... Then you will realize that for the next step you will need to go further in the code with a microprocessor (like an Raspberry Pi or something similar) and it will add some complexity with the hardware compatibility of your electronics components. Then you may also add image processing with opencv in python or C++ according to your skills and your aim to have an optimized system (if you feel uncomfortable with image processing, you can start it with Matlab, but you will need to pay while Opencv is free). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will need to acquire a lot of knowledge on how to build an independent system (to think of the power-supply, the way it interacts with its environment, communicate with its internal components... etc). To do so I recommend you to start with the basic system-engineering knowledges (functional architecture, physical architecture, interfaces...). An other way to obtain some knowledges on this kind of competencies (and this is still interesting when you need to perform technologic intelligence) is to read reports made by robotics teams in challenges (some teams made it available when they compete), in my case I have read reports of teams which have been competing at Eurobot (it's a competition for universities and hobbyist).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ROS is a good choice to do some robotics because it is among the most up-to-date middleware to do robotics but before using it you need to understand why it is interesting to use a middleware by doing some low-level job (with micro-controllers). And you need to be very familiar with Linux (Ubuntu, Debian or Fedora are advised).&lt;/p&gt;&#xA;" OwnerUserId="20483" LastActivityDate="2019-02-25T08:22:26.040" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18285" PostTypeId="2" ParentId="18278" CreationDate="2019-02-25T08:50:18.837" Score="1" Body="&lt;p&gt;The forward kinematic will become useful e.g. if you want to compute the working envelope of your robot. &lt;/p&gt;&#xA;" OwnerUserId="23196" LastActivityDate="2019-02-25T08:50:18.837" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18286" PostTypeId="2" ParentId="18197" CreationDate="2019-02-25T09:25:06.003" Score="0" Body="&lt;p&gt;Have you tried this tutorial which is for RPi-3&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://spellfoundry.com/2016/05/29/configuring-gpio-serial-port-raspbian-jessie-including-pi-3/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://spellfoundry.com/2016/05/29/configuring-gpio-serial-port-raspbian-jessie-including-pi-3/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also can you share the picture of your RPi-3 and point out your soldered &quot;green pin&quot;?&lt;/p&gt;&#xA;" OwnerUserId="21747" LastEditorUserId="21747" LastEditDate="2019-02-25T09:32:54.843" LastActivityDate="2019-02-25T09:32:54.843" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18287" PostTypeId="1" AcceptedAnswerId="18289" CreationDate="2019-02-25T10:16:01.467" Score="1" ViewCount="88" Body="&lt;p&gt;I have a system which is composed of a rig of 8 cameras which are used for detecting markers in the environment and which outputs 8 estimates of the absolute robot's position and orientation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, I need to fuse these estimations. I don't know if the best way is using a Kalman Filter or something like that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, I do not know if it would be convenient to track the position of each camera through a particle filter before fusing.&lt;/p&gt;&#xA;" OwnerUserId="22394" LastActivityDate="2019-02-25T22:36:41.550" Title="Fusing absolute robot localization from markers" Tags="&lt;mobile-robot&gt;&lt;localization&gt;&lt;kalman-filter&gt;&lt;sensor-fusion&gt;&lt;particle-filter&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18288" PostTypeId="2" ParentId="18278" CreationDate="2019-02-25T21:04:45.470" Score="0" Body="&lt;p&gt;Forward kinematic has many uses, but for your case YES it can be used “merely” as a check.  However the check is probably redundant since most IK solvers will give you some kind of residual which indicates the quality of the solution.&lt;/p&gt;&#xA;" OwnerUserId="21223" LastActivityDate="2019-02-25T21:04:45.470" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18289" PostTypeId="2" ParentId="18287" CreationDate="2019-02-25T22:36:41.550" Score="0" Body="&lt;p&gt;If you just have 8 redundant transformations, I think taking an average on se3 is the simplest way. Or you can fuse them on se3 if you can estimate the uncertainty of each pose estimation. You can define the uncertainty e.g, by the distance of markers from the camera.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;EKF is the best if you have complementary sensors or good estimation of uncertainty. But it seems this is not your case. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't see any meaning of using PF in your case.&lt;/p&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2019-02-25T22:36:41.550" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18290" PostTypeId="2" ParentId="15745" CreationDate="2019-02-26T00:08:05.497" Score="0" Body="&lt;p&gt;Because Genicam will actually use another 2 random ports to establish the connection. You are supposed to be able to force those to a specific value but that's not well documented.&#xA;The way I tried to solve it was by creating a macvlan network.&#xA;&lt;a href=&quot;https://docs.docker.com/network/macvlan/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://docs.docker.com/network/macvlan/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are networking with unfamiliar protocols Wireshark is always a good place to start. It lets you see every single packet that passes in/out/between your computer.&lt;/p&gt;&#xA;" OwnerUserId="22400" LastActivityDate="2019-02-26T00:08:05.497" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18291" PostTypeId="1" AcceptedAnswerId="18367" CreationDate="2019-02-26T06:55:07.697" Score="2" ViewCount="1738" Body="&lt;p&gt;Hi I am trying to model my humanoid robot. The general EoM is&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$M(q)\ddot{q}+C(q,\dot{q})+G(q)=U$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know &lt;span class=&quot;math-container&quot;&gt;$M(q)$&lt;/span&gt; is Inertia matrix which depends on joint positions &lt;span class=&quot;math-container&quot;&gt;$\textbf{q}$&lt;/span&gt;. However, I am having difficulty to find this matrix for my robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I searched on internet and found that in order to find the inertia matrix I have to use the relation between the kinetic energy of the robot and inertia matrix. Is it right? I don't know how these two quantities are related to each other.&lt;/p&gt;&#xA;" OwnerUserId="21747" LastEditorUserId="37" LastEditDate="2019-03-06T12:42:48.123" LastActivityDate="2019-03-08T15:51:49.377" Title="Finding Mass/Inertia Matrix of a robot" Tags="&lt;kinematics&gt;&lt;dynamics&gt;" AnswerCount="3" CommentCount="8" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18292" PostTypeId="1" AcceptedAnswerId="18321" CreationDate="2019-02-26T07:51:10.967" Score="3" ViewCount="199" Body="&lt;p&gt;I have LIDAR data of an environment in my hand and I want to apply likelihood field matching to this data. I found a source. But I don't understand what the variables of the algorithm mean and how it works. Can you help with that?&lt;/p&gt;&#xA;&lt;p&gt;Note : We're trying to apply the particle filter to a mobile robot. And we will use this algorithm for this.&lt;/p&gt;&#xA;&lt;p&gt;the algorithm that I found and suggested by my teacher :&#xA;&lt;a href=&quot;https://i.stack.imgur.com/l2YRl.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/l2YRl.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;And the desired result :&#xA;&lt;a href=&quot;https://i.stack.imgur.com/ugPEh.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ugPEh.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Thank you for help.&lt;/p&gt;&#xA;" OwnerUserId="22405" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2019-03-01T11:03:02.543" Title="Likelihood Field Matching" Tags="&lt;mobile-robot&gt;&lt;slam&gt;&lt;localization&gt;&lt;lidar&gt;&lt;particle-filter&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18293" PostTypeId="1" CreationDate="2019-02-26T12:37:11.313" Score="2" ViewCount="151" Body="&lt;p&gt;I have managed to receive camera_pose for ORB-SLAM by following their code. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I run &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ echo /world /camera_pose&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I receive something like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Translation [-0.8, 0.66, -0.04]&#xA;&#xA;Rotation in Quaternion [ 0.2, -0.3, -0.2, 0.2]&#xA;&#xA;         in RPY radian: [0.071, -0.032, -0.34]&#xA;&#xA;         in RPY degree [0.4, -25.09, -3.2]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Does this mean these are the translations and rotations of the camera_pose compared to the world coordinates? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How do I retrieve the estimate of the camera_pose in global coordinates (I want x,y,z,yaw,pitch, roll)?&lt;/p&gt;&#xA;" OwnerUserId="21402" LastEditorUserId="21402" LastEditDate="2019-02-26T12:45:07.563" LastActivityDate="2019-08-14T14:39:08.770" Title="Camera pose to world coordinate transformation" Tags="&lt;slam&gt;&lt;pose&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18294" PostTypeId="2" ParentId="18278" CreationDate="2019-02-26T14:04:56.440" Score="1" Body="&lt;p&gt;If you think of classical Jacobian-based methods for IK (still representing the majority), then you ought to consider that they make use of forward-kinematics (FK) maps internally in order to compute the error in the operational space as well as the Jacobian itself, which is actually a differential FK law.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In particular, the IK method based on Jacobian pseudo-inverse generates iteratively joint velocities profiles &lt;span class=&quot;math-container&quot;&gt;$\dot{q}$&lt;/span&gt; that drive the system toward the target. In formula:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\begin{cases} e=x_d-f\left(q\right) \\ &#xA;\dot{q}=J^{-1}\left(q\right) \cdot \left(\dot{x}_d+Ke\right) \end{cases},&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where &lt;span class=&quot;math-container&quot;&gt;$x=f\left(q\right)$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$J=\partial f/\partial q$&lt;/span&gt; are the standard and differential forward-kinematics maps, respectively.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This reasoning and/or considerations apply also to other IK methods.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2019-02-26T19:13:17.470" LastActivityDate="2019-02-26T19:13:17.470" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18295" PostTypeId="2" ParentId="12851" CreationDate="2019-02-26T16:18:08.467" Score="0" Body="&lt;p&gt;You can also run roslaunch files from directly within CLION as mentioned here:&#xA;&lt;a href=&quot;http://wiki.ros.org/IDEs#CLion&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://wiki.ros.org/IDEs#CLion&lt;/a&gt;&#xA;however when I start my launch files in the IDE, I get the following error:&#xA;roslaunch: error: no such option: --master-logger-level&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apparently the plugin starts the launch file via:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/opt/ros/kinetic/bin/roslaunch --master-logger-level=info FOLDERNAME/FILENAME&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;However I did not specify this parameter myself. Does anyone know why it is introduced?&lt;/p&gt;&#xA;" OwnerUserId="22410" LastActivityDate="2019-02-26T16:18:08.467" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18296" PostTypeId="1" CreationDate="2019-02-26T16:33:33.527" Score="0" ViewCount="28" Body="&lt;p&gt;I found out there is a deadband in my steering controller after several runs. And the transfer function for it in the \$s\$-domain is &#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;H(s)=\frac{270\cdot e^{-0.03s}}{0.015\cdot s + 1}&#xA;$$&lt;/span&gt;&#xA;To overcome this deadband, should I introduce a compensator ? My control theory background is weak so am not sure of a proper way to manage the deadband.&lt;/p&gt;&#xA;" OwnerUserId="22411" LastActivityDate="2019-02-27T18:00:18.723" Title="Overcoming or managing deadband in vehicle steering controller" Tags="&lt;control&gt;" AnswerCount="0" CommentCount="3" ClosedDate="2019-02-27T18:01:18.620" ContentLicense="CC BY-SA 4.0" />
  <row Id="18297" PostTypeId="1" CreationDate="2019-02-26T17:57:37.273" Score="-1" ViewCount="40" Body="&lt;p&gt;I have a 3 degree of freedom arm robot and by using D-H representation method get the forward kinematics but I can't derive the inverse kinematics can someone help me please ? &lt;/p&gt;&#xA;" OwnerUserId="22412" LastActivityDate="2019-02-27T08:43:09.263" Title="need help to get inverse kinematics" Tags="&lt;robotic-arm&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18299" PostTypeId="2" ParentId="18297" CreationDate="2019-02-26T20:26:09.837" Score="0" Body="&lt;p&gt;The D-H-representation is a good starting point for an inverse kinematics solver. Usually, DH means, that the joints of the kinematic chain are stored in a matrix. This can be converted into an array in computer code. As a result, the forward model can be built. A forward model takes as input the angle of the joints and prints out the xy-coordinates for each link. The xy-coordinates can be copied to the graphics engine which will display the kinematic chain to the screen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the open question is how to use the forward model in the inverse direction? That means, the solver gets the x/y coordinates and should calculate the angles for each joint. At first let me explain which technique doesn't work. Calculating the values with algebra equations isn't a good choice. It might work for simpler models, but if the kinematic chain gets more complicated and has some underactuation in it, the equation will fail to return the correct values. The better way is a sampling approach. The existing forward model is used by a sampling based solver to determine the angles with trial and error. A possible sampling technique is Monte-carlo-tree-search.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/v6lkn.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/v6lkn.png&quot; alt=&quot;inverse kinematics&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2019-02-26T20:26:09.837" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18300" PostTypeId="1" CreationDate="2019-02-26T20:26:30.663" Score="0" ViewCount="95" Body="&lt;p&gt;I am making an Arduino-controlled differential drive robot, and I am having the following problems:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;the encoders built into the motors are being used for measuring the rotary displacement, and while running they will randomly start counting the opposite direction of their rotation for a second then start counting the right direction again&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;What can I do in terms of differential and integral control that will lead to a consistent turn every time?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;MY CODE:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;'#'include &amp;lt;DueTimer.h&amp;gt;&#xA;&#xA;'#'define MOT1 5 //right motor speed pin (PWM)&#xA;&#xA;'#'define MOT2 6 //left motor speed pin (PWM)&#xA;&#xA;'#'define DIR1 4 //right motor direction pin&#xA;&#xA;'#'define DIR2 7 //left motor direction pin&#xA;&#xA;'#'define EN1A 10 //right motor encoder phase A pin&#xA;&#xA;'#'define EN1B 11 //right motor encoder phase B pin&#xA;&#xA;'#'define EN2A 8 //left motor encoder phase A pin&#xA;&#xA;'#'define EN2B 9 //left motor encoder phase B pin&#xA;&#xA;volatile long right_enc = 0;&#xA;&#xA;volatile long left_enc = 0;&#xA;&#xA;volatile long left_enc1 = 0;&#xA;&#xA;volatile long left_enc_diff = 0;&#xA;&#xA;void setup() {&#xA;&#xA;  // put your setup code here, to run once:&#xA; //set pin mode, attach external interrupts to encoders with ISR vector, set initial direction and speed of motors.&#xA;&#xA;  pinMode(MOT1, OUTPUT); // Set ENC1 as output&#xA;&#xA;  pinMode(DIR1, OUTPUT); // Set DIR1 as output&#xA;&#xA;  pinMode(MOT2, OUTPUT); // Set ENC2 as output&#xA;&#xA;  pinMode(DIR2, OUTPUT); // Set DIR2 as output&#xA;&#xA;  attachInterrupt(digitalPinToInterrupt(EN1A), countRight, CHANGE);&#xA;&#xA;  attachInterrupt(digitalPinToInterrupt(EN2A), countLeft, CHANGE);&#xA;&#xA;  digitalWrite(DIR1, HIGH);&#xA;&#xA;  digitalWrite(DIR2, LOW);&#xA;&#xA;  Serial.begin(9600);&#xA;&#xA;}&#xA;&#xA;void loop() {&#xA;  // put your main code here, to run repeatedly:&#xA;&#xA;left_enc = 0;&#xA;&#xA;//left_enc1 = left_enc;&#xA;&#xA;while (-left_enc &amp;lt; 1023){&#xA;&#xA;analogWrite(MOT2, 100);&#xA;&#xA;analogWrite(MOT1, 50);&#xA;&#xA;Serial.println(&quot;left_enc: &quot;);&#xA;&#xA;Serial.print(-right_enc);&#xA;&#xA;Serial.println(&quot; &quot;);&#xA;&#xA;Serial.print(&quot; &quot;);&#xA;&#xA;}&#xA;&#xA;analogWrite(MOT2, 0);&#xA;&#xA;analogWrite(MOT1, 0);&#xA;&#xA;for (;;) {&#xA;   // statement block&#xA;}&#xA;&#xA;}&#xA;&#xA;void countRight(){&#xA;&#xA;  if (digitalRead(EN1A)){&#xA;&#xA;    if (digitalRead(EN1B)){right_enc++;}&#xA;&#xA;    else if (!digitalRead(EN1B)) {right_enc--;}&#xA;&#xA;  }&#xA;}&#xA;&#xA;void countLeft(){&#xA;&#xA;  if (digitalRead(EN2A)){&#xA;&#xA;    if (digitalRead(EN2B)){left_enc++;}&#xA;&#xA;    else if (!digitalRead(EN2B)) {left_enc--;}&#xA;&#xA;  }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;=======&lt;/p&gt;&#xA;" OwnerUserId="22414" LastEditorUserId="17029" LastEditDate="2019-02-27T04:16:43.110" LastActivityDate="2021-03-19T19:06:00.697" Title="Motor encoders randomly start counting backward, then go back to normal" Tags="&lt;differential-drive&gt;&lt;quadrature-encoder&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18302" PostTypeId="1" CreationDate="2019-02-27T02:43:07.573" Score="3" ViewCount="322" Body="&lt;p&gt;I have attached an Adafruit Circuit Playground Express to my Roomba OI, and after manually waking it up I am able to successfully send opcode commands based on the &lt;a href=&quot;https://www.irobotweb.com/-/media/MainSite/PDFs/About/STEM/Create/iRobot_Roomba_600_Open_Interface_Spec.pdf?la=en&quot; rel=&quot;nofollow noreferrer&quot;&gt;Roomba OI Manual&lt;/a&gt;. I can even start, stop the OI and send the off op code, then restart with the RBC on LOW and get things going again. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where things stop working is when I don't send any commands for more than 5 minutes and it enters sleep mode. I've seen a few questions on the board, but no definitive answers on how to successfully pulse the BRC from sleep so that I can begin to send commands to the OI. For my use case the need to start up could be random (could be hours between commands or days) so pulsing within 5 minutes off or on the dock to keep the OI alive seems excessive, but maybe that's what I have to do. It also seems like this means if the Roomba ever did enter sleep mode that human intervention would be the only way to get the OI started again. Has anybody had success waking the Create 2 or 600 series Roomba from sleep via the OI BRC?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additional code, docs, pictures &lt;a href=&quot;https://gitlab.com/AlexHagerman/circuitroomba&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;roomba.ino&#xA;&#xA;//Setup pins&#xA;const int baudPin = A1;&#xA;&#xA;//Setup roomba opcodes&#xA;//https://www.irobotweb.com/-/media/MainSite/PDFs/About/STEM/Create/iRobot_Roomba_600_Open_Interface_Spec.pdf?la=en&#xA;const int startOpCode = 128;&#xA;const int cleanOpCode = 135;&#xA;const int stopOpCode = 173;&#xA;const int powerOpCode = 133;&#xA;const int safeModeOpcode = 131;&#xA;const int fullModeOpcode = 132;&#xA;&#xA;&#xA;void setup() {&#xA;    pinMode(baudPin, OUTPUT);&#xA;    Serial1.begin(115200);&#xA;}&#xA;&#xA;void loop() {&#xA;    digitalWrite(baudPin, LOW);&#xA;    delay(500);&#xA;    digitalWrite(baudPin, HIGH);&#xA;    delay(500);&#xA;    digitalWrite(baudPin, LOW);&#xA;&#xA;    Serial1.write(startOpCode);&#xA;    Serial1.write(safeModeOpcode);&#xA;    Serial1.write(cleanOpCode);&#xA;&#xA;    delay(4000);    &#xA;&#xA;&#xA;    Serial1.write(powerOpCode);&#xA;    Serial1.write(stopOpCode);&#xA;&#xA;    exit(0);&#xA;}&#xA;&#xA;&lt;span class=&quot;math-container&quot;&gt;```&lt;/span&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="22415" LastEditorUserId="22415" LastEditDate="2019-02-28T00:56:16.080" LastActivityDate="2019-07-18T09:48:34.120" Title="iRobot 600 series OI wake from sleep via BRC" Tags="&lt;arduino&gt;&lt;irobot-create&gt;&lt;serial&gt;&lt;roomba&gt;&lt;communication&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18303" PostTypeId="2" ParentId="15207" CreationDate="2019-02-27T06:37:33.527" Score="0" Body="&lt;p&gt;Search &quot;Reciprocity-Based Resolution&quot;.  You should find a lot of publications address the issue you have.&#xA;There is more sophisticated approach that is based on the gradient of a singular value.  If interested, I might find you a recent publication address this issue as well.&#xA;Thanks &lt;/p&gt;&#xA;" OwnerUserId="22416" LastActivityDate="2019-02-27T06:37:33.527" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18304" PostTypeId="2" ParentId="18300" CreationDate="2019-02-27T08:38:28.727" Score="0" Body="&lt;p&gt;This is just a guess, but I think that your measuring cycle is too slow (not enough measurements per time, therefore the phases get mixed up).&#xA;Does this occur, when the motors turn slower?&lt;/p&gt;&#xA;" OwnerUserId="9208" LastActivityDate="2019-02-27T08:38:28.727" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18305" PostTypeId="2" ParentId="18297" CreationDate="2019-02-27T08:43:09.263" Score="0" Body="&lt;p&gt;For a three DOF arm the IK is pretty simple. &#xA;You can find a closed form with a bunch of sin / cosine operations to derive the angles for a given TCP pose directly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are too lazy to do the math, have a look at OpenRAVE's IK-Fast. It is an open source lib that can generate IK solvers for almost all kinematic types.&lt;/p&gt;&#xA;" OwnerUserId="9208" LastActivityDate="2019-02-27T08:43:09.263" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18307" PostTypeId="2" ParentId="18302" CreationDate="2019-02-27T10:34:24.687" Score="0" Body="&lt;p&gt;Did you try giving three pulses Low High Low? I read somewhere that it depends on pulse train instead of single pulse.&lt;/p&gt;&#xA;" OwnerUserId="21747" LastActivityDate="2019-02-27T10:34:24.687" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18309" PostTypeId="1" CreationDate="2019-02-27T11:24:50.563" Score="4" ViewCount="1104" Body="&lt;p&gt;I am trying to control a robotic arm with force input. The output of the force sensor is filtered, and fed through a PID controller to command the end-effector velocity. However, the robotic arm has strict limits for maximum acceleration and jerk. I've therefore tried limiting the jerk and acceleration after the PID, before sending the velocity command, but it doesn't feel right. The PID controller in the next iteration gets completely different values than was calculated in the previous iteration, and the limiters are &quot;taking control&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any ideas of a better way to handle maximum acceleration and jerk limits?&lt;/p&gt;&#xA;" OwnerUserId="22420" LastActivityDate="2019-04-08T11:00:47.113" Title="How to limit large acceleration and jerk from PID controller?" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;pid&gt;&lt;force&gt;&lt;force-sensor&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18310" PostTypeId="1" CreationDate="2019-02-25T07:31:11.833" Score="2" ViewCount="77" Body="&lt;p&gt;I found out there is a dead time in my steering controller after several runs. The transfer function for it in the &lt;span class=&quot;math-container&quot;&gt;$s$&lt;/span&gt;-domain is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;H(s)=\frac{270 \cdot e^{-0.03s}}{0.015 \cdot s + 1}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To overcome this dead time, should I introduce a compensator? My control theory background is weak so I am unaware of a proper way to manage the dead time.&lt;/p&gt;&#xA;" OwnerUserId="22411" OwnerDisplayName="djack" LastEditorUserId="6941" LastEditDate="2019-09-30T20:52:15.503" LastActivityDate="2019-09-30T20:52:15.503" Title="Overcoming or managing dead time in vehicle steering controller" Tags="&lt;steering&gt;" AnswerCount="0" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="18311" PostTypeId="1" AcceptedAnswerId="18313" CreationDate="2019-02-27T23:22:47.843" Score="0" ViewCount="44" Body="&lt;p&gt;Is it common to take equal values for the proportional and derivative gains of a PID controller? if so what does it mean?&lt;/p&gt;&#xA;" OwnerUserId="20742" LastActivityDate="2019-02-28T05:57:07.710" Title="Equal proportional and derivative gains of PID" Tags="&lt;pid&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2019-03-05T11:30:14.313" ContentLicense="CC BY-SA 4.0" />
  <row Id="18312" PostTypeId="2" ParentId="18302" CreationDate="2019-02-28T00:11:15.420" Score="1" Body="&lt;p&gt;The firmware update described in this &lt;a href=&quot;https://robotics.stackexchange.com/a/16045/37&quot;&gt;answer&lt;/a&gt; fixed my problems in this area:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;There is a bug in the implementation of sleep/wakeup on Create 2 which was fixed in release-3.8.2 for robots with an older processor, or release-stm32-3.7.7 for robots with a newer processor.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="19572" LastEditorUserId="37" LastEditDate="2019-07-18T09:48:34.120" LastActivityDate="2019-07-18T09:48:34.120" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18313" PostTypeId="2" ParentId="18311" CreationDate="2019-02-28T05:57:07.710" Score="3" Body="&lt;p&gt;Typically, whenever someone asks about PID gains, my immediate reaction is to refer them to the &lt;a href=&quot;https://en.wikipedia.org/wiki/Ziegler%E2%80%93Nichols_method&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ziegler-Nichols tuning method&lt;/a&gt; as it's a pretty standard way to get good response from a PID controller. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can see from the table there, no, the proportional and derivative gains are not typically equal. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know what you're asking when you say &quot;what does it mean&quot; for a gain to be a particular value, but remember that the gains act on reference &lt;em&gt;error&lt;/em&gt;. If your reference value is a speed then the derivative gain acts on the derivative of the speed error, which means it acts on the acceleration difference between the reference and feedback signals. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're looking for more meaning for the gain values, I would refer you to &lt;a href=&quot;http://staff.guilan.ac.ir/staff/users/chaibakhsh/fckeditor_repo/file/documents/Optimum%20Settings%20for%20Automatic%20Controllers%20(Ziegler%20and%20Nichols,%201942).pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;the original paper&lt;/a&gt; (from the references section of the Wiki page) but, as you can see from the gain values, the integral and derivative gains depend on the period of the control oscillations, which means they depend on the properties of the plant. I don't believe there's a general statement you can make about the absolute values of any gain. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2019-02-28T05:57:07.710" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18314" PostTypeId="1" AcceptedAnswerId="18315" CreationDate="2019-02-28T10:29:09.067" Score="2" ViewCount="72" Body="&lt;p&gt;A delta-robot is a nice design for a robot, because it allows to separate the motor from the moving parts. As a result, large and heavy motors with 800 Watt can be used and at the same time the construction remains lightweight and the robot can move very fast. Instead of building a delta robot in real hardware, a first prototype was created in Box2d which is a physics engine to simulate diverse robotics types in realtime.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The joints in the middle can move freely, only the links ontop have a builtin servo motor. But something is wrong with the parallel kinematics. If the endeffector is moved away from the middle to the left, the angle is no longer 90 degree, but the endeffector gets a little bit diagonal. This makes it hard to grasp an object. Has this effect a name, and can it be fixed with improvements in the parallel kinematics?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/e96h5.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/e96h5.png&quot; alt=&quot;deltarobot&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2019-02-28T13:13:36.550" Title="Why is the endeffector of a delta-robot on the slant?" Tags="&lt;kinematics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18315" PostTypeId="2" ParentId="18314" CreationDate="2019-02-28T13:13:36.550" Score="3" Body="&lt;p&gt;The name of the phenomenon is coupled motion. The rotation motion of the moving platform (the middle linkage) in this case is coupled to the translational motion of the platform due to the (geometric) contraints in the mechanism. If you change the translation the orientation will also change. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In other words the translation motion of the platoform is not an independent, pure translation motion, it is coupled to the rotation. Parallel kinematics are not the only ones affected by this, a simple 2 degrees of robot behaves the same way, suffers from the same problem. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for ways around this, you can add a 3rd degree of freedom and make an actual delta robot (your model is commonly called a 5 bar linkage, it is not a delta robot). More about the delta robot &lt;a href=&quot;https://en.wikipedia.org/wiki/Delta_robot&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. One interesting trait of the delta robot is pure translations, decoupled from rotation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another popular way around it is adding mechanismsm with additional geometrical constraints to make sure the orientation is correct, like a paletizing robot, e.g. &lt;a href=&quot;https://robotics.kawasaki.com/en1/products/robots/palletizing/CP500L/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt;. But this is more for serial kinematic chains.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2019-02-28T13:13:36.550" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18316" PostTypeId="2" ParentId="18300" CreationDate="2019-02-28T16:19:40.470" Score="0" Body="&lt;p&gt;What kind of motors are you using? Because the behaviour you describe makes me think of a brushless motor, due to the fact that you have a rotating magnetic field having the rotor spin. But in the beginning it will not necessary start on the right direction (during a very very little lapse of time).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your program's frequency can also be related to this behaviour. So, have you tried with only one encoder (for this you need to comment all the code calling the interrupts you are not using)? If it occurs only when you have 2 encoders then your micro-controller may not be fast enough (or your motor is to fast).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Have you tried &lt;a href=&quot;https://www.pjrc.com/teensy/td_libs_Encoder.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this library&lt;/a&gt; ? Usually this code is giving good results!&lt;/p&gt;&#xA;" OwnerUserId="20483" LastActivityDate="2019-02-28T16:19:40.470" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18318" PostTypeId="1" CreationDate="2019-03-01T08:53:34.303" Score="0" ViewCount="63" Body="&lt;p&gt;What are robot task planners? And how are they implemented? I don't think they are just FSM or behavior tree right? What are the popular and robust task planning algorithms? And what are the state of the art algorithm?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm guessing task planning does priority assessment then choose to do certain task or not, for example, delivery robot that choose the optimal orders to drop-off. &lt;/p&gt;&#xA;" OwnerUserId="9972" LastEditorUserId="9972" LastEditDate="2019-03-02T00:33:40.580" LastActivityDate="2019-03-04T09:50:31.367" Title="What are robot task planners?" Tags="&lt;planning&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2019-03-05T11:28:52.413" ContentLicense="CC BY-SA 4.0" />
  <row Id="18319" PostTypeId="2" ParentId="18278" CreationDate="2019-03-01T08:57:03.997" Score="0" Body="&lt;p&gt;If you have the next target position you can convert that in joint space and make a PTP or point to point type motion and there is no need for forward kinematics. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The forward kinematics is crucial when geometrical contraints to the path are considered, e.g. a circular motion (CIRC), linear motion (LIN) or spline motion (SPLINE). Usually these are set also with a desired speed. In this case converting the current joint space coordinates to cartesian space and computing the trajectory (incl. velocity and acceleration) from the current end effector coordinates to the target in cartesian space will assure that the set parameters (path shape and target velocity) will be (more) precisely executed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also in the case where robos are programmed or operated (monitored) it is useful to know what the current cartesian coordinates of the end-effector is. This is done by calculating the forward kinematics. For determinig the current velocity of the robot differential forward kinematics are used. &lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2019-03-01T08:57:03.997" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18320" PostTypeId="2" ParentId="18318" CreationDate="2019-03-01T10:43:56.047" Score="1" Body="&lt;p&gt;Task and motion planning describes different levels of abstraction in a domain. Motion planning is about lowlevel actions for example move the car forward for 1 meter, while task planning is about high level actions for example to overtake another car. Task planning is usually treated under the umbrella term PDDL which is a dedicated planning language for formalizing abstract tasks. Or to be more specific: PDDL creates a simulation in which actions can be executed. The reason why task and motion planning are analyzed separate is to reduce the state space. So called hierarchical planners are providing a much better sampling efficiency than a normal motion planner.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, a car should overtake another car. On the first look this can be planned with moving the car forward by a half meter. And the complete maneuver consists of many repetitions of this action. The result will be a large state space which produces a huge load for the planner. The better idea is to see the sequence as a separate high-level task and not try to use a low level planner for solving it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All organizations which are focused on plan-based robotic control have experience with PDDL. Either with the original specification or with it's derivative like OWLS-Xplan, OPL and Golog.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastEditorUserId="14283" LastEditDate="2019-03-04T09:50:31.367" LastActivityDate="2019-03-04T09:50:31.367" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18321" PostTypeId="2" ParentId="18292" CreationDate="2019-03-01T11:03:02.543" Score="1" Body="&lt;p&gt;Basically, you are comparing the measurements of your scan with your previously computed map.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You compare all your scans (line 2) for a certain time step that are not range_max (line 3).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You compute the position of your scan based on the position of the robot and the measurements of the scan (lines 4 and 5).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, you get the closest occupied cell to your calculated scan position, and compute the distance between the computed scan position and that closest cell (line 6).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then you get the importance weight based on a normal distribution for that calculated distance (line 7).&lt;/p&gt;&#xA;" OwnerUserId="22210" LastActivityDate="2019-03-01T11:03:02.543" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18322" PostTypeId="2" ParentId="4787" CreationDate="2019-03-01T12:50:17.577" Score="2" Body="&lt;p&gt;I have not checked your code, but I have faced the same problem and this is what I found (again, I don't know if it could be the same problem as you).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One key point for ICP is where your 'zero' is defined. The result of the translation of the ICP highly depends on this, but the rotation does not. See the image below:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/xATG6.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xATG6.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can see, the rotation in both cases is the same, but the translation changes completely depending on that 'zero'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would suggest you to check if your point coulds have global coordinates or relative coordinates. Normally, ICP will work fine if you use relative coordinates of the scans to your robot, making the robot pose as the 'zero'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this helps.&lt;/p&gt;&#xA;" OwnerUserId="22210" LastActivityDate="2019-03-01T12:50:17.577" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18323" PostTypeId="1" CreationDate="2019-03-01T13:07:20.140" Score="0" ViewCount="467" Body="&lt;p&gt;Trying to create an algorithm/code in order to get my robot to follow a track which it currently can do, using a color sensor and following the inside edge. So I'm wondering how to transition to the track with broken parts the track has gaps with a max length of 20cm and only on straight parts. I also have a distance sensor available? any ideas&lt;/p&gt;&#xA;" OwnerUserId="22436" LastActivityDate="2020-03-25T17:02:05.263" Title="How do I create a broken line follower? [RobotC] [Legomindstorm] [Ev3]" Tags="&lt;wheeled-robot&gt;&lt;algorithm&gt;&lt;robotc&gt;&lt;mindstorms&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18324" PostTypeId="2" ParentId="18323" CreationDate="2019-03-01T13:42:49.943" Score="1" Body="&lt;p&gt;Currently your robot is only controlled by external factors. It always responds to external stimuli, it does not have any other operating mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to cope with missing line segments, you could add operating modes (or states) to the logic. You could detect the point where the line disappears and transition to an operating mode which goes straight on. In order to do this, it must store what does straight on  mean (direction vector) and it probably should get a limit how far should it go straight on without a line present. Afterwards it could transition to a stopped sate (or operation mode).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the line reapears in the sensors, it should switch back to line following state.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although this problem only requires two states, as a learning exercise, you might want top look at &lt;a href=&quot;https://en.wikipedia.org/wiki/Finite-state_machine&quot; rel=&quot;nofollow noreferrer&quot;&gt;state machine&lt;/a&gt; based &lt;a href=&quot;https://barrgroup.com/Embedded-Systems/How-To/Coding-State-Machines&quot; rel=&quot;nofollow noreferrer&quot;&gt;programming&lt;/a&gt; approaches. &lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2019-03-01T13:42:49.943" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="18325" PostTypeId="1" AcceptedAnswerId="18334" CreationDate="2019-03-01T16:58:21.737" Score="0" ViewCount="98" Body="&lt;p&gt;When using Scan Matching ICP for FastSLAM, which is the proper way to use it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Between the current scan and the previous one, or between the current scan and the stored map?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can both be used? If so, what are the point of using each one?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="22210" LastEditorUserId="22210" LastEditDate="2019-03-01T18:26:58.483" LastActivityDate="2019-03-04T15:25:22.023" Title="SLAM Scan Matching. Scan vs previous-scan OR scan vs previous-map?" Tags="&lt;mobile-robot&gt;&lt;slam&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18327" PostTypeId="1" CreationDate="2019-03-02T02:13:35.620" Score="-2" ViewCount="175" Body="&lt;p&gt;We are doing graduation project and require simulation of the robotic hand to be submitted. And we want to control various parameter in for movement for fingers of robotic hand. We tried it in other software but it was not feasible. After searching on YouTube and Internet we came to know that, simulations can be done on Matlab also. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;We somehow imported our CAD assembly inside Matlab. But the problem is that, the software is quite complex. After watching many video we are not able to figure it out what is going on &amp;amp; how to start. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I imported ONE of the finger of the robotic hand's .xml file and then I ran it it was just rotating. And we are just like wow! it is performing a circus. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I want to know how to represent tension of the finger created by the string and servo motor to control the motion of finger and its angle simply. Can you provide any idea? Or maybe any tutorial providing such kind of information. I have gone through some official Matlab YouTube video but that didn't help.&lt;/p&gt;&#xA;" OwnerUserId="21219" LastEditorUserId="9720" LastEditDate="2019-03-02T05:22:48.860" LastActivityDate="2019-03-02T07:31:27.670" Title="Robotic hand simulation in MatLab?" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;matlab&gt;&lt;simulation&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18328" PostTypeId="2" ParentId="18327" CreationDate="2019-03-02T07:08:26.843" Score="0" Body="&lt;p&gt;The CAD file which describes the robotic hand is good starting point but for controlling the movement something else is needed. It's called a forward model or system identification which can be realized in Matlab too. It will output the position of the fingers if a certain action is executed in the model. For example, if the model gets the command “finger up”, the simulated hand will produce a movement. The forward model answers the question what the new position of the finger is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Realizing such a prediction engine can be done in the easy case with a geometrical description. This looks similar to what is used by inverse kinematics solvers. More advanced forward models includes the kinodynamic properties and the grasping of objects. After a forward model is available a planner can bring the robotic hand into a goal position. This is called inverse model. The idea is to define a goal, for example that the finger should be at position (x,y,z) and the model is asked which action will realize this goal. Usually a dedicated solver is used which samples the forward model until the constraints are fulfilled.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2019-03-02T07:08:26.843" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18329" PostTypeId="2" ParentId="18327" CreationDate="2019-03-02T07:31:27.670" Score="1" Body="&lt;p&gt;I'm afraid I don't have the time at the moment to write a more detailed answer, but if you're trying to alter the behavior of the joint then you can:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Double click the joint,&lt;/li&gt;&#xA;&lt;li&gt;Go to the axis you're interested in altering (Z Revolute/Prismatic Primitive for Revolute/Prismatic Joints),&lt;/li&gt;&#xA;&lt;li&gt;Expand the Actuation box,&lt;/li&gt;&#xA;&lt;li&gt;Change &quot;Torque&quot; (or &quot;Force&quot; for prismatic joints) from &quot;None&quot; to &quot;Provided by Input.&quot;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;If you previously had &quot;Motion&quot; as &quot;Provided by Input&quot; then you'll need to change it to &quot;Automatically Computed.&quot; You can either tell it what the force is or what the (I believe) position is, but not both. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's no stock servo block, so if you want more detailed actuator simulation then you'll need to model it yourself. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I will say that, frustratingly, only the z-axis can be used for motion. I've already complained to Mathworks about this, but it means you wind up needing to use frame transforms to rotate your joints around until the joint's z-axis coincides with the axis of motion for your system. I think it's an artifact of their use of DH parameters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, if you're having trouble with unexpected motion, I would double check your CAD model parameters. A lot of modeling software will use generic part properties if you don't assign the materials, which means a metal part might wind up with the density (and mass, moment of inertia) of a plastic part or vice-versa. You may also have a problem if your CAD model used a lazy approximation and has solid parts where they should actually be hollow/shell parts.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2019-03-02T07:31:27.670" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="18330" PostTypeId="1" CreationDate="2019-03-02T09:55:39.300" Score="1" ViewCount="133" Body="&lt;p&gt;I am trying to understand the implementations and the relative performance of various classical and new Hand-eye calibration approaches.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: The following discussion assumes implementations are in Matlab for the AX=XB hand-eye calibration approach.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have been able to successfully implement Wengerts and &lt;a href=&quot;https://github.com/ThePrimus/handeyecalibration/blob/master/app/calibration/hand_eye_lazax/HandEye.m&quot; rel=&quot;nofollow noreferrer&quot;&gt;Lazax&lt;/a&gt; implementation of Tsia approach. These open-source implementations take in the gripper and the camera poses and further performs the specific operations.&#xA;However, I am facing trouble understanding Milli Shah's implementation of &lt;a href=&quot;http://math.loyola.edu/~mili/Calibration/AXXB/tsai.m&quot; rel=&quot;nofollow noreferrer&quot;&gt;Tsai&lt;/a&gt; and &lt;a href=&quot;http://math.loyola.edu/~mili/Calibration/AXXB/liang.m&quot; rel=&quot;nofollow noreferrer&quot;&gt;Liangs&lt;/a&gt; method. The implementation takes in AA (for gripper) and BB (for the camera), which are definitely not the relative (i to j) gripper and camera poses but some processed version of these. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anybody please explain this AA and BB in more detail. In case somebody has an extraction code for this, it would be helpful&#xA;Thanks &lt;/p&gt;&#xA;" OwnerUserId="13507" LastActivityDate="2019-03-02T09:55:39.300" Title="robot Hand Eye Calibration problem" Tags="&lt;robotic-arm&gt;&lt;computer-vision&gt;&lt;cameras&gt;&lt;calibration&gt;" AnswerCount="0" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18331" PostTypeId="1" CreationDate="2019-03-04T07:14:26.460" Score="0" ViewCount="59" Body="&lt;p&gt;my question revolves around 4 limbs robot ( but maybe even 2 limbs ) walking.&#xA;As i see in many videos robots start &quot;walking on the spot&quot; in order to balance before actually moving somewhere. Why is that ? Has someone managed to start walking immediately skipping the &quot;walking on the spot&quot; phase?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance for the time spent answering this!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: Just to clarify, this is the behaviour that i'm talking about&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=kgaO45SyaO4&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=kgaO45SyaO4&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;at 11 sec&lt;/p&gt;&#xA;" OwnerUserId="22450" LastEditorUserId="22450" LastEditDate="2019-03-05T08:57:00.727" LastActivityDate="2019-03-05T08:57:00.727" Title="Walking on the spot before moving" Tags="&lt;balance&gt;&lt;walking-robot&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18333" PostTypeId="2" ParentId="18331" CreationDate="2019-03-04T09:45:08.717" Score="-2" Body="&lt;p&gt;The behavior of going on the spot is the consequence of a hierarchical control system. The motion controller on the lower level can balance the robot, while the controller on the task level is able to execute a longer trajectory. The programming of such hierarchical control architecture is done independent from each other. The biped robot is in reality a combination of a car-like motion model which can drive forward and backward plus a walking controller which is able to maintain the center of gravity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is surprisingly easy to overcome this phenomena. All what the programmer has to do is to modify the animation script. If the high-level planner has a goal from the beginning at timecode 0, the robot will not wait but it will move as fast as possible into the direction. The robots behavior at a certain point in time are determined by the script, very similar to animating a virtual human.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An animation script is a notation for writing down a time-schedule. It defines, at which point in time the robot is doing which action. It can be visualized as a gantt-chart in which behaviors can overlapping at the same time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/AiYyw.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/AiYyw.png&quot; alt=&quot;gantt&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="14283" LastEditorUserId="14283" LastEditDate="2019-03-04T10:02:52.403" LastActivityDate="2019-03-04T10:02:52.403" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18334" PostTypeId="2" ParentId="18325" CreationDate="2019-03-04T15:20:14.043" Score="1" Body="&lt;p&gt;From my experience what I saw is the following:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-&gt; Using the ICP against the previous reading is generally a way to simply estimate robot motion. This way you can't match against an old reading to close a loop closure, for instance. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;-&gt; Matching against the map maybe slower(if the map is not stored correctly), but offers the possibility to verify if you passed by someplace already. This offers quite stronger meanings to update the map and the robot pose w.r.t. the inertial frame. Also, matching against the map may reduce robot's pose uncertainty, specially in FastSLAM2.0. Remember PFs are multimodal by nature, and is always good to have only one mode.&lt;/p&gt;&#xA;" OwnerUserId="20197" LastEditorUserId="20197" LastEditDate="2019-03-04T15:25:22.023" LastActivityDate="2019-03-04T15:25:22.023" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18335" PostTypeId="2" ParentId="18197" CreationDate="2019-03-04T16:57:29.820" Score="0" Body="&lt;p&gt;It was caused by a bug in the create2 firmware. If you email iRobot they can send you an upgrade.&lt;/p&gt;&#xA;" OwnerUserId="22313" LastActivityDate="2019-03-04T16:57:29.820" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18337" PostTypeId="1" CreationDate="2019-03-05T03:18:09.573" Score="0" ViewCount="45" Body="&lt;p&gt;I am building a robot that needs to accomplish the following tasks:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Keep track of 4 quadrotor encoders, each 979.62 CPR @ ~ 500RPM, so ~ 8163.5 counts per second&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Read from an &lt;a href=&quot;http://bucket.download.slamtec.com/8d2bb2533f69328982961b14c069983e4acbc01f/robopeak_2d_lidar_brief_en_A1M8.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;RPlidar A1M8&lt;/a&gt;, giving out 8000 samples per second (each sample containing distance, heading, a quality rating of the reading, and a boolean that is true if the device is starting a new revolution).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Simon Levy's &quot;&lt;a href=&quot;https://github.com/simondlevy/BreezySLAM&quot; rel=&quot;nofollow noreferrer&quot;&gt;Breezy SLAM&lt;/a&gt;&quot; algorithm&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Read from a PixyCam's object recognition outputs @ 50Hz&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Read from gyro, 60Hz&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Read from 4 color sensors, 4 ultrasonic sensors, and a TOF sensor, each at around 10Hz&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Fusing above data to get accurate 2D position information, as well as positions of obstacles, within a room of known dimensions (some of the sensors are for other desired pieces of information that I won't go into).  (I'm thinking of going with a Kalman filter - any thoughts on this?)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Running a task-accomplishing algorithm (possibly a premade Q-learning model)-- for instance, drive towards the nearest obstacle (though my end goal is much more sophisticated than this).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I am wondering if a Raspberry Pi 3B+ could handle all this?  If not what are my options?  Do I need a more powerful computer?  I am thinking I could probably offload the encoder counting to a separate board, and am wondering if there are dedicated ICs for this.&lt;/p&gt;&#xA;" OwnerUserId="20111" LastEditorUserId="20111" LastEditDate="2019-03-05T03:42:25.263" LastActivityDate="2019-03-05T03:42:25.263" Title="Can a RPI3B+ handle all this?" Tags="&lt;sensors&gt;&lt;raspberry-pi&gt;&lt;sensor-fusion&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18338" PostTypeId="1" AcceptedAnswerId="18345" CreationDate="2019-03-05T15:19:53.030" Score="1" ViewCount="126" Body="&lt;p&gt;I am starting studying robotics from tomorrow. This is my first question to get started with robotics. Pardon me if this question is too naive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What factors determine the number of joints in a robotic arm?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For instance, suppose, I am going design a robotic arm for, say, a bicycle industry. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I determine the number of joints needed in robotic arm for that specific task?&lt;/p&gt;&#xA;" OwnerUserId="22459" LastActivityDate="2019-03-06T17:25:19.250" Title="What factors determine the number of joints in a robotic arm?" Tags="&lt;robotic-arm&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18339" PostTypeId="2" ParentId="18338" CreationDate="2019-03-05T18:23:29.073" Score="-1" Body="&lt;p&gt;There are two extremes available. The first one is a robot arm with only one joint. This is equal to a pinball machine in which the paddle is controlled by a single motor. In contrast, a snake manipulator contains of many degree of freedoms and can move very flexible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The human body has surprisingly a high number of joints. Humans and snake manipulators have both a high amount of joints. This allows the human arm to reach unusual places in the 3d space. What medical doctors are using as a robotic endoscope looks the same. The number of joints is high and ultra-high. The reason why such robots are expensive is because the software control of a snake manipulator is complicated. The solver provides more than a single solution and moving the arm into a goal position is similar to play a realtime strategy game. The minimum requirement in doing so goes beyond simple differential equations and is equal to a full flown blackboard system with multi-agent communication which are scheduling different hierarchies and constraints at the same time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The amount of joints which are available in a robot depends on the background knowledge of the programming team to realize complicated kinematic chains. If the skills are on the beginner level, the number of joints will be lower. Controlling a one joint or a two joint robotic arm is not that hard. It can be realized sometimes with a simple pid controller and no further software is needed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a comment &lt;em&gt;user366312&lt;/em&gt; asked:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Can you recommend any study resource?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Google Scholar is the only resource available which provides reliable information about robotic manipulators. To get the needed information there are some tricks needed. For example, the user needs to know the exact search string, it make sense to write some sourcecode by it's own to verify the results and it's important to make notes. But that are only fine tuning techniques to request Google Scholar more efficient.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastEditorUserId="37" LastEditDate="2019-03-06T17:25:19.250" LastActivityDate="2019-03-06T17:25:19.250" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18340" PostTypeId="1" AcceptedAnswerId="18341" CreationDate="2019-03-05T20:22:20.810" Score="1" ViewCount="135" Body="&lt;p&gt;I'm trying to use a pan / tilt alt-azimuth telescope mount to track an object that is moving in the sky. The problem is that the object is changing speed constantly. I can easily track objects that are moving at a steady speed. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm using the OpenCV library to compute the object's distance from the center of the image. I should be able to tell the telescope mount to speed up or slow down to follow the object. The actual algorithm though seems surprisingly hard to write. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For instance if I tell the mount to speed up to follow the object, then the apparent speed between the two is much less, but still not zero. So the object is slowly drifting out of the view. So I have to recenter it which is totally different than adjusting the speed. It's like I need a re-centering algorithm and a speed adjusting algorithm running at the same time. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone have any ideas how to do this or where to ask? Neither the OpenCV or telescope forums seems the right place to ask this question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="21132" LastActivityDate="2019-03-18T18:57:40.787" Title="Algorithm for centering an object that is changing speed" Tags="&lt;opencv&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18341" PostTypeId="2" ParentId="18340" CreationDate="2019-03-05T20:56:54.463" Score="3" Body="&lt;p&gt;It seems that your algorithm that controls the speed of your telescope does not make use of any integral part, thus you've been observing drifts while tracking.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let &lt;span class=&quot;math-container&quot;&gt;$e_x$&lt;/span&gt; be the error in the image plane between the x-coordinate &lt;span class=&quot;math-container&quot;&gt;$o_x$&lt;/span&gt; of the object and the center &lt;span class=&quot;math-container&quot;&gt;$c_x$&lt;/span&gt;:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;e_x=o_x-c_x.&#xA;$$&lt;/span&gt;&#xA;Then, the azimuth velocity &lt;span class=&quot;math-container&quot;&gt;$\dot{a}$&lt;/span&gt; of your telescope should be:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{a}=K_p \cdot e_x + K_I\int e_x dt,&#xA;$$&lt;/span&gt;&#xA;being &lt;span class=&quot;math-container&quot;&gt;$K_P$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$K_I$&lt;/span&gt; the two gains you have to tune up to obtain a nice tracking. In particular, the integral gain &lt;span class=&quot;math-container&quot;&gt;$K_I$&lt;/span&gt; is responsible for compensating the drift so as for delivering non-null velocity when &lt;span class=&quot;math-container&quot;&gt;$e_x=0$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There exist many methods to tune the gains. In your case, my suggestion is to start with &lt;span class=&quot;math-container&quot;&gt;$K_I=0$&lt;/span&gt; and play with &lt;span class=&quot;math-container&quot;&gt;$K_P$&lt;/span&gt; up to the point when you'll get small &lt;span class=&quot;math-container&quot;&gt;$e_x$&lt;/span&gt; at steady-state and a residual drift. Only then, slowly increase &lt;span class=&quot;math-container&quot;&gt;$K_I$&lt;/span&gt; until the small difference in velocities is brought to zero. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Analogous reasoning applies to the elevation velocity.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2019-03-17T11:03:04.653" LastActivityDate="2019-03-17T11:03:04.653" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18342" PostTypeId="2" ParentId="1279" CreationDate="2019-03-05T21:43:12.160" Score="1" Body="&lt;p&gt;I know this is a very old thread but I stumbled across it searching for something else and just wanted to mention that EZ-builder now supports Arduino. The Arduino is programmed with custom code available at &lt;a href=&quot;https://synthiam.com/Tutorial/Connecting-Arduino-to-EZ-Builder-17526&quot; rel=&quot;nofollow noreferrer&quot;&gt;Synthiam.com&lt;/a&gt; and then it communicates over a USB serial COM port to the Computer, laptop, tablet. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's also a feature limited version of EZ-builder available for the Raspberry Pi, it's in beta at this moment in time and is having features added to it as time goes on.&lt;/p&gt;&#xA;" OwnerUserId="22461" LastActivityDate="2019-03-05T21:43:12.160" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18345" PostTypeId="2" ParentId="18338" CreationDate="2019-03-06T03:53:15.367" Score="2" Body="&lt;p&gt;First you must study the tasks that the robot is to perform.  If you can describe them mathematically that is even better.  For some tasks, you might only care about the position of the tool, and not its orientation.  In that case, you would need at most three degrees of freedom (for example, x, y, and z).  But you may find that all of the motions of the task are contained in a single plane, in which case the number of degrees of freedom can reduce to two.  If all task positions are along a line, you would need only one. Look for coordinates which are changing during the execution of the task, coordinates which are constant can be usually disregarded.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Add to the positional requirements any task needs that relate to the orientation of the tool.   Worst-case is that you need three positional degrees of freedom, plus three degrees of orientation.   You might refer to this as (x, y, z, roll, pitch, yaw), although other ways of modelling orientation are also possible.  Just like with position requirements, you may be able to reduce the number of orientation degrees of freedom - for example, if you do not care about the rotation of the tool about its main axis (such as with a pen-holding tool), then you may only need two orientation degrees of freedom. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You add up the position and orientation degrees of freedom to arrive at the degrees of freedom needed for the task.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The robot design would then need to ensure that all of the required task degrees of freedom can be achieved by the kinematics of the mechanism.   Don’t get bogged down by controls, or dynamics, or simulations yet, until you can first determine that the task motions can be accomplished by the mechanism.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastEditorUserId="10748" LastEditDate="2019-03-06T15:40:07.480" LastActivityDate="2019-03-06T15:40:07.480" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="18346" PostTypeId="1" CreationDate="2019-03-06T09:09:01.880" Score="-1" ViewCount="65" Body="&lt;p&gt;I had all the DH parameters and calculated transformation matrix. From that I know the end-effector value position. But I don't understand how to integrate orientation.&lt;/p&gt;&#xA;" OwnerUserId="22467" LastActivityDate="2019-03-06T16:03:48.190" Title="how to plugin orientation of 6R robotic arm in inverse kinematics" Tags="&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18347" PostTypeId="2" ParentId="18346" CreationDate="2019-03-06T11:16:34.330" Score="0" Body="&lt;p&gt;Orientation is already integrated in the transfomration matrix. &#xA;A transformation matrix is a &lt;span class=&quot;math-container&quot;&gt;$4x4$&lt;/span&gt; matrix, which can be written as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$\begin{pmatrix}R_{3x3} &amp;amp; P_{3x1}\\\ 0_{1x3} &amp;amp; 1\end{pmatrix}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$R_{3x3}$&lt;/span&gt; represents a &lt;span class=&quot;math-container&quot;&gt;$3x3$&lt;/span&gt; matrix, the upper left part of the transformation matrix which is the describes the rotation. For the 6 DoF inverse kinematics, you can build up such a transformation matrix by multiplying pure transfomration matrices. This will result in a matrix with know values which then equals the DH chain of unkown values. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$T_{TCP} = X_{trans}(x)\cdot Y_{trans}(y)\cdot Z_{trans}(z)\cdot X_{rot}(\alpha)\cdot Y_{rot}(\beta)\cdot Z_{rot}(\gamma)$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can plug in here the end-effector coordinats, translations &lt;span class=&quot;math-container&quot;&gt;$x, y, z$&lt;/span&gt; and orientation &lt;span class=&quot;math-container&quot;&gt;$\alpha, \beta, \gamma$&lt;/span&gt;. You can also change the types of rotations to XYX or ZYZ if it better suits your application, see &lt;a href=&quot;https://en.wikipedia.org/wiki/Euler_angles&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Plaese see also this R.SE question and answer &lt;a href=&quot;https://robotics.stackexchange.com/questions/9622/inverse-kinematics-for-6-jointed-robots&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2019-03-06T16:03:48.190" LastActivityDate="2019-03-06T16:03:48.190" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18348" PostTypeId="2" ParentId="18291" CreationDate="2019-03-06T12:38:55.390" Score="1" Body="&lt;p&gt;The inertia matrix of a robot is important for creating a forward model. In a simulator like Gazebo the inertia matrix is given by an XML tag:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;inertial&amp;gt;&#xA;  &amp;lt;mass value=&quot;5&quot;/&amp;gt;&#xA;  &amp;lt;inertia ixx=&quot;0.2&quot; ixy=&quot;0.0&quot; ixz=&quot;0.2&quot; iyy=&quot;0.4&quot; iyz=&quot;0.0&quot; izz=&quot;0.4&quot;/&amp;gt;&#xA;&amp;lt;/inertial&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This allows the underlying physics engine to calculate the rigid body simulation correctly. If a framework outside of the ROS ecosystem is utilized, the parameters of the physics engine are determined by the user manual. It is even possible to calculate the parameters from the raw data. The is called system identification.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Predicting the position and the velocity of a dynamic system is more complicated than only put six numbers into an xml-tag. Especially if the robot contains of different parts like torso, wings and legs the overall system will move different from a simple ball which is flying around.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastEditorUserId="14283" LastEditDate="2019-03-07T11:12:59.640" LastActivityDate="2019-03-07T11:12:59.640" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18349" PostTypeId="1" CreationDate="2019-03-06T13:21:59.140" Score="0" ViewCount="41" Body="&lt;p&gt;Most problems in robotics have to do with a controlling a system. An easy example for a system is the forward kinematic of a robot arm. A joint in the model gets a certain value, and as the result the arm is moving to a new position in space. More complex problems are visible if a grasping task gets simulated. Here is the problem, that objects are in the system which can't moved by it's own, but need to be pushed. It's a typical example for an underactuated non-linear system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A system which contains rigid body dynamics has a certain behavior. A box is colliding with another box and as a result they are changing their position in 3d space. Simulating a rigid body system in realtime is called a physics engine. And creating such an engine without having access to the original one is called system identification.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Machine learning is the natural choice in doing so. Because machine learning is datadriven and it's able is reproduce the behavior of a non-linear system. In the training dataset, all the values are stored which are recorded by the sensors. That is the position of the rigid body boxes, their angle and the forces applied to them. But how exactly can machine learning be utilized for system identification of such system? Is a multi-layer-perceptron the right choice, or is the LSTM network with it's ability to store information about the past the only option in doing so?&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2019-03-06T13:21:59.140" Title="Rigid body system identification with machine learning, but how?" Tags="&lt;control&gt;&lt;machine-learning&gt;" AnswerCount="0" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="18350" PostTypeId="1" CreationDate="2019-03-06T15:58:04.807" Score="-1" ViewCount="238" Body="&lt;p&gt;I have an IMU attached to each of the segments of a robotic arm, which gives me accelerometer and gyroscope data. My goal is to first of all improve the quality of the sensor readings and subsequently get the angles of each of the joints.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm new in robotics, but as far as I can see, I need a sensor fusion algorithm (e.g., complementary filter or Kalman filter) to improve the quality of the sensor readings. Subsequently, how can I calculate the angles between each of the joints using this data?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can this be done in one go (i.e., can you use the output of the complementary filter to get the angles)? Are there reference implementations in Python available?&lt;/p&gt;&#xA;" OwnerUserId="22472" LastEditorUserId="22472" LastEditDate="2019-03-06T16:32:08.720" LastActivityDate="2019-03-08T01:17:32.770" Title="Sensor fusion to calculate joint angles between segments of a robot arm using IMU data" Tags="&lt;kalman-filter&gt;&lt;imu&gt;&lt;accelerometer&gt;&lt;gyroscope&gt;&lt;sensor-fusion&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18351" PostTypeId="1" CreationDate="2019-03-06T22:05:15.340" Score="2" ViewCount="56" Body="&lt;p&gt;Equation 13.22 from Probabilistic Robotics below:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/X3xC1.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/X3xC1.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's how I get from first line to second line:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;p(x_{1:t}^{[k]} | z_{1:t},u_{1:t}, c_{1:t}) = \frac{p(x_{1:t}^{[k]}, z_{1:t},u_{1:t}c_{1:t}) }{ p(z_{1:t},u_{1:t}, c_{1:t})} \\&#xA;p(x_{1:t}^{[k]}, z_{1:t},u_{1:t}c_{1:t})  = p(z_t|x_{1:t}^{[k]} ,z_{1:t-1},u_{1:t}, c_{1:t})p(x_{1:t}^{[k]} ,z_{1:t-1},u_{1:t}, c_{1:t}) \\&#xA;p(x_{1:t}^{[k]} ,z_{1:t-1},u_{1:t}, c_{1:t}) = p(x_{1:t}^{[k]} | z_{1:t-1},u_{1:t}, c_{1:t}) p(z_{1:t-1},u_{1:t}, c_{1:t}) &#xA;$$&lt;/span&gt;&#xA;Just setting up conditional probabilities above, then I'm subbing back to the first equation:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\\&#xA;p(x_{1:t}^{[k]} | z_{1:t},u_{1:t}, c_{1:t}) = \frac{p(x_{1:t}^{[k]}, z_{1:t},u_{1:t}c_{1:t}) }{ p(z_{1:t},u_{1:t}, c_{1:t})} = \frac{p(z_t|x_{1:t}^{[k]} ,z_{1:t-1},u_{1:t}, c_{1:t})p(x_{1:t}^{[k]} ,z_{1:t-1},u_{1:t}, c_{1:t})}{p(z_{1:t},u_{1:t}, c_{1:t})} = \frac{p(z_t|x_{1:t}^{[k]} ,z_{1:t-1},u_{1:t}, c_{1:t})p(x_{1:t}^{[k]} | z_{1:t-1},u_{1:t}, c_{1:t}) p(z_{1:t-1},u_{1:t}, c_{1:t})}{p(z_{1:t},u_{1:t}, c_{1:t})} = \frac{p(z_{1:t-1},u_{1:t}, c_{1:t})}{p(z_{1:t},u_{1:t}, c_{1:t})} p(z_t|x_{1:t}^{[k]} ,z_{1:t-1},u_{1:t}, c_{1:t})p(x_{1:t}^{[k]} | z_{1:t-1},u_{1:t}, c_{1:t}) = \eta \ p(z_t|x_{1:t}^{[k]} ,z_{1:t-1},u_{1:t}, c_{1:t})p(x_{1:t}^{[k]} | z_{1:t-1},u_{1:t}, c_{1:t})&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;how do I get to the third line from here? &lt;/p&gt;&#xA;" OwnerUserId="9972" LastActivityDate="2019-03-07T00:50:56.483" Title="Help with Probabilistic Robotics Equation 13.22 detailed derivation" Tags="&lt;slam&gt;&lt;particle-filter&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18352" PostTypeId="1" CreationDate="2019-03-06T22:44:54.733" Score="3" ViewCount="167" Body="&lt;p&gt;I have a brushless motor with a propeller attached, driven by an ESC and a LiPo battery. I noticed that as the battery level drops, the motor spins slower, which makes sense. My question is is it possible to get constant performance out of the motor (constant RPM) as the voltage of the battery drops from 4.2 to 3.7V?&lt;/p&gt;&#xA;" OwnerUserId="22475" LastActivityDate="2019-04-12T22:04:37.810" Title="How to get constant motor RPM regardless of battery voltage?" Tags="&lt;motor&gt;&lt;battery&gt;&lt;power&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18353" PostTypeId="2" ParentId="15603" CreationDate="2019-03-06T23:06:05.337" Score="6" Body="&lt;p&gt;There are now some sub and around ~1000USD 3D Lidars available. I wanted to provide an answer for future reference if anyone else comes looking for &amp;quot;cheap&amp;quot; Lidars.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;em&gt;LeddarTech M16 ~500 USD on Ebay&lt;/em&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Range: 110 m&lt;/li&gt;&#xA;&lt;li&gt;FOV: 19x3.0 degrees (up to 8.0 degrees depending on model, with 30 m range at that FoV)&lt;/li&gt;&#xA;&lt;li&gt;Refresh rate: 6.25 Hz&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://store.leddartech.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://store.leddartech.com/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;em&gt;BeneWake CE30 ~1000 - 1500USD on ebay&lt;/em&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Range: 30 m&lt;/li&gt;&#xA;&lt;li&gt;FoV: 60x4 degrees (up to 132x9 for 4 m range)&lt;/li&gt;&#xA;&lt;li&gt;Refresh rate: 30Hz&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://en.benewake.com/product/detail/5c34571eadd0b639f4340ce5.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://en.benewake.com/product/detail/5c34571eadd0b639f4340ce5.html&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;em&gt;Livox Mid40/Mid-100 ~600 - 1500USD&lt;/em&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Range: 90m&lt;/li&gt;&#xA;&lt;li&gt;FoV: 38.4 circular (Mid-40 has a 38.4 circular pattern FoV, so its a bit special, but it can technically be used as a 3D lidar, however the pointcloud pattern is a bit different, the Mid-100 is 3 mid-40 providing up to 100 degree FoV)&#xA;&lt;a href=&quot;https://i.stack.imgur.com/ek2vx.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ek2vx.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Refresh rate:&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://store.dji.com/product/livox-mid?vid=48991&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://store.dji.com/product/livox-mid?vid=48991&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;A really good review on the Mid-40 can be found &lt;a href=&quot;https://msadowski.github.io/livox-mid40-review/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. It also explains some of the challenges with the circular patterns, as some SLAM algorithms and fusing algorithms might needs to be adapted to this new pattern, thus not working out of the box.&lt;/p&gt;&#xA;" OwnerUserId="11415" LastEditorUserId="11415" LastEditDate="2021-02-08T22:15:35.423" LastActivityDate="2021-02-08T22:15:35.423" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18354" PostTypeId="2" ParentId="18351" CreationDate="2019-03-07T00:50:56.483" Score="2" Body="&lt;p&gt;The third line comes from what it is called Markov Assumption and it is Stochastic Processes stuff. Basically, it says that a distribution is not altered by the insertion and/or remotion of variables that the distribution does not really depend on. It goes like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is assumed that &lt;span class=&quot;math-container&quot;&gt;$ z_t $&lt;/span&gt; simply does not depend on the previous reading history, inputs &lt;span class=&quot;math-container&quot;&gt;$ u_{1:t} $&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$ c_{1:t-1} $&lt;/span&gt;, so one can write (Assuming Markov Process)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ p(z_t | x^{k}_{1:t}, z_{1:t-1}, u_{1:t}, c_{1:t}) = p(z_t | x^{k}_{t}, c_{t}) $$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;which makes sense, since the probability of observing a reading depends on the robot pose itself and not on the commands used to get there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The same goes for the other component. I just do not remember exactly what is &lt;span class=&quot;math-container&quot;&gt;$ c $&lt;/span&gt;. In the second term, &lt;span class=&quot;math-container&quot;&gt;$ c_{t} $&lt;/span&gt; is considered to not alter the probability, therefore it is removed from the expression based on Markov Assumption.&lt;/p&gt;&#xA;" OwnerUserId="20197" LastActivityDate="2019-03-07T00:50:56.483" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18355" PostTypeId="1" CreationDate="2019-03-07T01:15:24.520" Score="0" ViewCount="85" Body="&lt;p&gt;How do I control a double pendulum to get the end effector link to go in the trajectory shaped in a perfect circle? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have the equation of the circle to go in but I don't know how to get the double pendulum links to move in on that planned trajectory. What steps should I take? &lt;/p&gt;&#xA;" OwnerUserId="22378" LastActivityDate="2019-04-06T19:01:15.623" Title="Add control and planning trajectory to double pendulum" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;inverse-kinematics&gt;&lt;forward-kinematics&gt;" AnswerCount="1" CommentCount="7" ClosedDate="2019-04-13T01:26:24.833" ContentLicense="CC BY-SA 4.0" />
  <row Id="18358" PostTypeId="2" ParentId="18352" CreationDate="2019-03-07T07:56:39.747" Score="0" Body="&lt;p&gt;For DC motors, RPM depends on volts and Torque depends on current. To keep constant RPMs you need to have some volts (corresponding to the required RPM).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not sure though how do you want to keep constant performance when your energy source is getting depleted.&lt;/p&gt;&#xA;" OwnerUserId="21747" LastActivityDate="2019-03-07T07:56:39.747" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18359" PostTypeId="2" ParentId="18350" CreationDate="2019-03-07T08:21:36.223" Score="0" Body="&lt;p&gt;I don't understand which type of sensor fusion you like to do. You said you are using IMU and generally it gives you the orientation and accelerations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have the quaternion &lt;span class=&quot;math-container&quot;&gt;$\textbf{q}=(w,x,y,z)$&lt;/span&gt; then your axis of rotation is vector &lt;span class=&quot;math-container&quot;&gt;$\textbf{v}=(x,y,z)$&lt;/span&gt; and joint displacement (angle) is given by &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\alpha=2cos^{-1}w$&lt;/span&gt; &lt;/p&gt;&#xA;" OwnerUserId="21747" LastEditorUserId="21747" LastEditDate="2019-03-08T00:07:03.243" LastActivityDate="2019-03-08T00:07:03.243" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="18360" PostTypeId="1" CreationDate="2019-03-07T15:19:03.137" Score="0" ViewCount="27" Body="&lt;p&gt;I'm working with position data from a hand sensor, and need to apply an FFT to it to get the level of tremor based on the frequency of the signal. I get two arrays, one with +1000 frames of position data, the other with +1000 timestamps related to position data, both in .csv files. I'm having trouble formatting the data for the FFT function on matlab. How i transform my position (and probably timestamps) data to a signal who can be processed on function FFT()?&lt;/p&gt;&#xA;" OwnerUserId="21404" LastActivityDate="2019-03-07T18:30:24.507" Title="Get a signal from position array data" Tags="&lt;matlab&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18362" PostTypeId="2" ParentId="18291" CreationDate="2019-03-07T18:10:59.180" Score="3" Body="&lt;p&gt;Finding the Mass, Coriolis and Gravity Matrix for a robot, which is basically forward dynamics of the robot. Now, they are two very well-known techniques to solve this, mentioned in the &lt;a href=&quot;https://www.springer.com/us/book/9783540303015&quot; rel=&quot;nofollow noreferrer&quot;&gt;Robotics Handbook&lt;/a&gt; as well as &lt;a href=&quot;https://www.researchgate.net/profile/Mohamed_Mourad_Lafifi/post/How_to_avoid_singular_configurations/attachment/59d6361b79197b807799389a/AS%3A386996594855942%401469278586939/download/Spong+-+Robot+modeling+and+Control.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Robot modeling and Control book by Spong&lt;/a&gt; - 1) the Euler-Lagrange formulation that basically uses the kinetic and potential energy you're talking about, to derive the complete system dynamics and 2) the recursive Newton-Euler approach that recursively computes forces and corresponding torques on the end-effector and the joints respectively to obtain the dynamic equation. The final dynamic equation obtained in either of the approaches can be rearranged and compared with the standard equation you have mentioned in your question to obtain the MCG matrices. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, both the approaches get difficult as the DOFs increase. Also, avoiding reinventing the wheel, I would suggest defining the URDF of the robot correctly with all individual link inertia tensors, COMs and the kinematic chain and then use the &lt;a href=&quot;http://www.orocos.org/kdl&quot; rel=&quot;nofollow noreferrer&quot;&gt;Orocos KDL library&lt;/a&gt; to directly obtain the MCG matrices. KDL already has implementations for general kinematics and dynamics principles and is pretty easy to use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;code&gt;KDL::ChainDynParam&lt;/code&gt; is the class class you should be looking to use. &lt;/p&gt;&#xA;" OwnerUserId="18572" LastActivityDate="2019-03-07T18:10:59.180" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18363" PostTypeId="2" ParentId="18355" CreationDate="2019-03-07T18:21:21.780" Score="1" Body="&lt;p&gt;If I understand correctly, this is a double pendulum.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/9DS6i.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9DS6i.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a 2-DOF simple kinematic chain so trying make it go along a trajectory, shouldn't be really difficult. You can get analytical solutions to inverse kinematics for this and easily solve the IK at each timestep. This would get you the desired joint angles for the same and you can actuate your joints accordingly.&lt;/p&gt;&#xA;" OwnerUserId="18572" LastActivityDate="2019-03-07T18:21:21.780" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18364" PostTypeId="2" ParentId="18360" CreationDate="2019-03-07T18:30:24.507" Score="1" Body="&lt;p&gt;FFT in matab uses a dataset as a vector or an array. If the array is X, the FFT is calculated using FFT(X). Therefore first make an array using the csv file. You can use X = csvread(filename). Then use FFT(X) command. You dont need the time stamp for this.&lt;/p&gt;&#xA;" OwnerUserId="21353" LastActivityDate="2019-03-07T18:30:24.507" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="18365" PostTypeId="1" CreationDate="2019-03-07T21:01:24.180" Score="2" ViewCount="575" Body="&lt;p&gt;I have a CNC Router table that has 4 Nema 23 stepper motor (open loop).&#xA;I want to upgrade the machine and use 4 Neam 34 Closed Loop Steppers. These are the motors and drivers I'm considering:&lt;/p&gt;&#xA;&lt;p&gt;Steppers: &lt;a href=&quot;https://www.omc-stepperonline.com/closed-loop-stepper-motor/nema-34-closed-loop-stepper-motor-130nm1841ozin-encoder-1000cpr-34hs59-5004d-e1000.html?mfp=161-motor-nema-size%5BNema%2034%5D&quot; rel=&quot;nofollow noreferrer&quot;&gt;Nema 34 Closed Loop Stepper&lt;/a&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Motor Type: Bipolar Stepper  &#xA;Rated Current/phase: 5A  &#xA;Voltage: 5V  &#xA;Phase Resistance: 1ohms &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Drivers: &lt;a href=&quot;https://www.omc-stepperonline.com/closed-loop-stepper-driver/closed-loop-stepper-driver-0%7E82a-24%7E80vdc-for-nema-34-stepper-motor-cl86t.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Closed Loop Stepper Driver 0~8.2A 24~80VDC for Nema 34&lt;/a&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Output Peak Current: 0~8.2A  &#xA;Input Voltage: +24~80VDC (Typical 48VDC)  &#xA;Logic Signal Current: 7~16mA (Typical 10mA)  &#xA;Pulse Input Frequency: 0~200kHz  &#xA;Isolation Resistance: 500MΩ &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;My questions are:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;How should I calculate/choose the power supply for these 4 steppers?&#xA;I have looked around for this and found many things, like measuring the voltage on the motors while running, some multiply the Rated Current/phase for the number of motors, and so on. I think part of my confusion is that I don't have a lot of experience with electricity (voltage and amps).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.omc-stepperonline.com/power-supply&quot; rel=&quot;nofollow noreferrer&quot;&gt;These&lt;/a&gt; are the ones this company offers.&lt;/p&gt;&#xA;&lt;p&gt;Is it as easy as &lt;a href=&quot;https://www.omc-stepperonline.com/power-supply/350w-60v-59a-115230v-switching-power-supply-stepper-motor-cnc-router-kits-s-350-60.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;selecting one&lt;/a&gt; (350W 60V 5.9A) that is close to 48V?&lt;/p&gt;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;&lt;p&gt;Does it make sense to find an unregulated power supply for my CNC? It looks like none from this website is.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Does it make sense to find a power supply that is more powerful and uses only one for all motors instead of 4 of them?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="22480" LastEditorUserId="19515" LastEditDate="2020-07-22T17:28:47.357" LastActivityDate="2020-07-22T17:28:47.357" Title="How to calculate power supply requirements for Closed Loop Stepper Motors?" Tags="&lt;stepper-motor&gt;&lt;power&gt;&lt;cnc&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18366" PostTypeId="1" CreationDate="2019-03-07T21:29:02.887" Score="1" ViewCount="161" Body="&lt;p&gt;I and my friends are planning to build a dog like quadruped robot. We have designed  it like MIT Cheetah Mini like legs structure, each leg having 3 Servos, 3rd DOF for rotation. We have calculated inverse kinematics equation for each leg. But I am not able to figure out what our approach should be for programming. We were planning to have trot gait, and to travel on straight path, we planned to find safe distance by each leg and plan next point for each leg on the foot and then just transition legs to that point in trot gait.&#xA;But still I don't think it will be a great idea. I need to ask what should be our approach to get the walk done smoothly. &lt;/p&gt;&#xA;" OwnerUserId="22486" LastActivityDate="2021-04-26T21:10:36.223" Title="Question about programming approach of a dog like quadruped robot" Tags="&lt;inverse-kinematics&gt;&lt;first-robotics&gt;&lt;dynamic-programming&gt;&lt;gait&gt;" AnswerCount="3" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18367" PostTypeId="2" ParentId="18291" CreationDate="2019-03-07T22:59:18.377" Score="4" Body="&lt;p&gt;The inverse dynamics of a robot is given by the relationship &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\tau = D^{-1}(q, \dot{q}, \ddot{q})$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where &lt;span class=&quot;math-container&quot;&gt;$\tau \in \mathbb{R}^N$&lt;/span&gt; is a vector of the required torque per joint and &lt;span class=&quot;math-container&quot;&gt;$q \in \mathbb{R}^N$&lt;/span&gt; is a vector of joint coordinates.  The function is a complex mixture of trig terms and robot kinematic and inertial parameters.  Over the years various algorithms have been developed to compute it, most notably the recursive Newton-Euler algorithm (Luh, Walker and Paul 1983) which is &lt;span class=&quot;math-container&quot;&gt;$O(N)$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Orin and Walker 1982 showed how the &lt;span class=&quot;math-container&quot;&gt;$D^{-1}(\cdot)$&lt;/span&gt; algorithm can be used to compute &lt;span class=&quot;math-container&quot;&gt;$M$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$C$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$G$&lt;/span&gt; terms and this has complexity &lt;span class=&quot;math-container&quot;&gt;$O(N^3)$&lt;/span&gt;.  Featherstone's articulated body method has complexity &lt;span class=&quot;math-container&quot;&gt;$O(N)$&lt;/span&gt; but for &lt;span class=&quot;math-container&quot;&gt;$N&amp;lt;9$&lt;/span&gt; has no advantage over the Orin and Walker method.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To make this tangible, here's an example using my &lt;a href=&quot;https://petercorke.com/wordpress/toolboxes/robotics-toolbox&quot; rel=&quot;nofollow noreferrer&quot;&gt;Robotics Toolbox for MATLAB&lt;/a&gt;. We start by defining a model of a Puma560 robot (this model has full kinematic and inertial parameters)&lt;/p&gt;&#xA;&#xA;&lt;pre class=&quot;lang-matlab prettyprint-override&quot;&gt;&lt;code&gt;&amp;gt;&amp;gt; mdl_puma560&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;which defines a &lt;code&gt;SerialLink&lt;/code&gt; object called &lt;code&gt;p560&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre class=&quot;lang-matlab prettyprint-override&quot;&gt;&lt;code&gt;&amp;gt;&amp;gt; p560&#xA;p560 = &#xA;&#xA;Puma 560 [Unimation]:: 6 axis, RRRRRR, stdDH, fastRNE            &#xA; - viscous friction; params of 8/95;                             &#xA;+---+-----------+-----------+-----------+-----------+-----------+&#xA;| j |     theta |         d |         a |     alpha |    offset |&#xA;+---+-----------+-----------+-----------+-----------+-----------+&#xA;|  1|         q1|          0|          0|     1.5708|          0|&#xA;|  2|         q2|          0|     0.4318|          0|          0|&#xA;|  3|         q3|    0.15005|     0.0203|    -1.5708|          0|&#xA;|  4|         q4|     0.4318|          0|     1.5708|          0|&#xA;|  5|         q5|          0|          0|    -1.5708|          0|&#xA;|  6|         q6|          0|          0|          0|          0|&#xA;+---+-----------+-----------+-----------+-----------+-----------+&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;we can examine the inertial parameters of link 1&lt;/p&gt;&#xA;&#xA;&lt;pre class=&quot;lang-matlab prettyprint-override&quot;&gt;&lt;code&gt;&amp;gt;&amp;gt; p560.links(1).dyn&#xA;Revolute(std): theta=q, d=0, a=0, alpha=1.5708, offset=0&#xA;  m    = 0          &#xA;  r    = 0           0           0          &#xA;  I    = | 0           0           0           |&#xA;         | 0           0.35        0           |&#xA;         | 0           0           0           |&#xA;  Jm   = 0.0002     &#xA;  Bm   = 0.00148    &#xA;  Tc   = 0.395      (+) -0.435     (-)&#xA;  G    = -62.61     &#xA;  qlim = -2.792527 to 2.792527&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where &lt;code&gt;m&lt;/code&gt; is the link mass, &lt;code&gt;r&lt;/code&gt; is the centroid of the link wrt the link frame, &lt;code&gt;I&lt;/code&gt; is the link inertia, &lt;code&gt;Jm&lt;/code&gt; is the motor armature inertia, &lt;code&gt;Bm&lt;/code&gt; is motor viscous friction, &lt;code&gt;Tc&lt;/code&gt; is Coulomb friction and &lt;code&gt;G&lt;/code&gt; is the gearbox ratio.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We'll pick a random joint angle and velocity vector&lt;/p&gt;&#xA;&#xA;&lt;pre class=&quot;lang-matlab prettyprint-override&quot;&gt;&lt;code&gt;&amp;gt;&amp;gt; q = rand(1,6); qd = rand(1,6);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and now can compute the M, C and G terms&lt;/p&gt;&#xA;&#xA;&lt;pre class=&quot;lang-matlab prettyprint-override&quot;&gt;&lt;code&gt;&amp;gt;&amp;gt; M = p560.inertia(q)&#xA;M =&#xA;    2.7694   -0.6330   -0.0746    0.0011    0.0007    0.0000&#xA;   -0.6330    4.3572    0.3227   -0.0006    0.0002    0.0000&#xA;   -0.0746    0.3227    0.9380   -0.0007    0.0010    0.0000&#xA;    0.0011   -0.0006   -0.0007    0.1925    0.0000    0.0000&#xA;    0.0007    0.0002    0.0010    0.0000    0.1713    0.0000&#xA;    0.0000    0.0000    0.0000    0.0000    0.0000    0.1941&#xA;&#xA;&amp;gt;&amp;gt; C = p560.coriolis(q, qd)&#xA;C =&#xA;   -0.2524   -0.1852    0.1824   -0.0014    0.0013   -0.0000&#xA;    0.1388   -0.3675   -0.5775    0.0002   -0.0035    0.0000&#xA;   -0.0055    0.2099   -0.0002   -0.0006   -0.0025    0.0000&#xA;   -0.0005   -0.0002   -0.0000    0.0000    0.0004   -0.0000&#xA;    0.0012    0.0016    0.0012   -0.0004   -0.0000   -0.0000&#xA;   -0.0000    0.0000    0.0000    0.0000    0.0000         0&#xA;&#xA;&amp;gt;&amp;gt; g = p560.gravload(q)&#xA;g =&#xA;   -0.0000   14.7643   -7.4059    0.0114   -0.0205         0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="21223" LastEditorUserId="17029" LastEditDate="2019-03-08T15:51:49.377" LastActivityDate="2019-03-08T15:51:49.377" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18368" PostTypeId="2" ParentId="18350" CreationDate="2019-03-08T01:17:32.770" Score="0" Body="&lt;p&gt;There has been a lot of research done in joint angle estimation using IMUs and it works as the principle technology behind segways, self-balancing robots and humanoid robots as well. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The theoretical concept is that gyroscope gives you the orientation of the sensor and using it in conjunction with the pre-determined mounting orientation of the sensor, you can find the orientation of the link itself. An accelerometer basically computes acceleration and its double integration can give you the linear motion. Additional resource to understand IMUs is the &lt;a href=&quot;https://stanford.edu/class/ee267/lectures/lecture10.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this lecture from the Virtual Reality course EE267 at Stanford&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Improving and cleaning up the sensor data is very important for the IMU due to drifting and biasing reasons and Kalman Filtering and its variants are definitely the most used technologies to resolve this. Theoretical concepts are well explained in &lt;a href=&quot;https://www.navlab.net/Publications/Introduction_to_Inertial_Navigation_and_Kalman_Filtering.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this presentation on Inertial Navigation and Kalman Filtering by Navlab&lt;/a&gt; while &lt;a href=&quot;https://github.com/TKJElectronics/Example-Sketch-for-IMU-including-Kalman-filter/tree/master/IMU/MPU6050_HMC5883L&quot; rel=&quot;nofollow noreferrer&quot;&gt;TKJ Electronics has a highly-starred Kalman Filtering implemented on IMUs codebase on Github&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I am not sure by what you mean by doing it in one go.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS: You shoudl refer to this paper &lt;a href=&quot;https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4029684/&quot; rel=&quot;nofollow noreferrer&quot;&gt;IMU-Based Joint Angle Measurement for Gait Analysis&lt;/a&gt; for and end-to-end discussion on your concerned task.&lt;/p&gt;&#xA;" OwnerUserId="18572" LastActivityDate="2019-03-08T01:17:32.770" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18369" PostTypeId="2" ParentId="18366" CreationDate="2019-03-08T08:58:47.257" Score="0" Body="&lt;p&gt;The walkthrough tutorial for programming a walking dog contains of some simple steps. The first step is to put the dog into a harness. This is a holder which bring the robot into the air and the legs can move freely without loosing the balance. A harness is similar to a hydraulic ramp used for car repair.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The next step is to program a walking gait. Thanks to the harness the motion controller doesn't need to balance the legs but has to move them similar to a computer animation. In it's easiest case the gait pattern is fixed. That means, it contains of gait phases like 1. left-foot up, 2. right-foot middle, 3. right-food down which results into a continuous movement. In this step the robot dog is able to move it's legs in the air because the torso is hold by the harness.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the third step the idea is to take away the harness. The requirements for the motion controller is higher because now he has to balance the dog. The principle is called model predictive control and contains of a forward model which predicts the balance situation, and a controller which is producing a control action.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2019-03-08T08:58:47.257" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18370" PostTypeId="2" ParentId="18366" CreationDate="2019-03-08T12:38:50.943" Score="0" Body="&lt;p&gt;First of all, I would implement a simple gait type with static stability. It is the easiest to implement and if you have already figured out the leg inverse kinematics it should bring fast results. Fast in terms of implementation time, the gait itself is slow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Afterwards you can transition to trot or other gaitn types, but a statically stable one will be the fastest to get running and it will offer you some insights on how to continue with more complex ones. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A good description (incl. code) on how to do this using an arduino can be found &lt;a href=&quot;https://makezine.com/2016/11/22/robot-quadruped-arduino-program/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. &lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2019-03-08T12:38:50.943" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18371" PostTypeId="1" CreationDate="2019-03-08T15:37:36.537" Score="1" ViewCount="109" Body="&lt;p&gt;I'm a bit confused about how one goes about calculating the sensor model &lt;span class=&quot;math-container&quot;&gt;$p(z_t|x_t, m) $&lt;/span&gt; and inverse sensor model for position &lt;span class=&quot;math-container&quot;&gt;$p(x_t |z_t,m_{t-1})$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From this &lt;a href=&quot;https://robotics.stackexchange.com/questions/18325/slam-scan-matching-scan-vs-previous-scan-or-scan-vs-previous-map&quot;&gt;answer&lt;/a&gt;, it seems like one way for calculating the inverse sensor model would be to compare the current lidar scan with the raycasted lidar scan, and then comparing them by using ICP for example.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the sensor model &lt;span class=&quot;math-container&quot;&gt;$p(z_t|x_t, m)$&lt;/span&gt;, I've just been taking a product of the probabilities from the map, but I know that this is an incorrect method.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What are the standard ways of computing &lt;span class=&quot;math-container&quot;&gt;$p(z_t|x_t, m)$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$p(x_t|z_t, m_{t-1})$&lt;/span&gt; when using a lidar with an occupancy grid for a particle filter?&lt;/p&gt;&#xA;" OwnerUserId="22072" LastActivityDate="2019-03-08T15:37:36.537" Title="Sensor model and Inverse sensor model using occupancy grid mapping with lidar for particle filter" Tags="&lt;mobile-robot&gt;&lt;slam&gt;&lt;lidar&gt;&lt;particle-filter&gt;&lt;occupancygrid&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18372" PostTypeId="1" CreationDate="2019-03-08T16:52:25.110" Score="0" ViewCount="80" Body="&lt;p&gt;I'm looking for ways to accurately navigate from one GPS location to another. I have a GPS sensor and an IMU. I can calculate the distance with the help of GPS I believe and with the help of magnetometer sensor on the IMU(acc + gyro + mag), I can calculate the heading angle and know which way to go. But the GPS data has a lot of outliers and I need to do this navigation accurately. Any suggestions are appreciated. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="22493" LastActivityDate="2019-04-08T19:03:35.673" Title="How to accurately navigate from one GPS coordinate to another using just GPS &amp; IMU?" Tags="&lt;kalman-filter&gt;&lt;imu&gt;&lt;navigation&gt;&lt;gps&gt;" AnswerCount="1" CommentCount="0" ClosedDate="2019-04-12T14:59:22.993" ContentLicense="CC BY-SA 4.0" />
  <row Id="18373" PostTypeId="1" CreationDate="2019-03-08T21:11:38.883" Score="0" ViewCount="57" Body="&lt;p&gt;I am currently trying to find if its possible to program a Tetrix Prizm motor controller with ROBOTC? Because I have an EV3 brain connected with the Prizm to a robot assembly with two motors, and I was searching and &lt;a href=&quot;https://www.marketwatch.com/press-release/prizmtm-brings-coding-to-the-tetrix-robotics-world-2016-10-10&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; it says it can use Arduino.  &lt;/p&gt;&#xA;" OwnerUserId="22494" LastActivityDate="2019-03-08T21:11:38.883" Title="Tetrix Prizm and ROBOTC" Tags="&lt;arduino&gt;&lt;motor&gt;&lt;robotc&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18375" PostTypeId="1" CreationDate="2019-03-09T02:42:02.600" Score="0" ViewCount="37" Body="&lt;p&gt;On non-lidar equipped rovers, how is the width of an obstacle detected such that it can be avoided? If the ultrasonic sensors are used for obstacle detection, these sensors usually don't give data about the width. How is the width derived? &lt;/p&gt;&#xA;" OwnerUserId="11489" LastActivityDate="2019-03-09T05:12:03.860" Title="Obstacle width measurement" Tags="&lt;computer-vision&gt;&lt;navigation&gt;&lt;path-planning&gt;&lt;ultrasonic-sensors&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="18377" PostTypeId="2" ParentId="18375" CreationDate="2019-03-09T05:12:03.860" Score="1" Body="&lt;p&gt;You may use a rotating mechanism such as a servo with the ultrasonic sensor mounted on. The ultrasonic measurements can be fused with the servo arm angle to calculate the width. Usually ultrasonic sensors have a higher field of view. This degrades the accuracy if you assume the ultrasonic wave is focused to a point. If you need more accurate measurements, you may use a mathematical sensor model to fuse the measurements. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;ToF sensors have a low field of view compared to ultrasonic sensors&lt;/p&gt;&#xA;" OwnerUserId="21353" LastActivityDate="2019-03-09T05:12:03.860" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18378" PostTypeId="2" ParentId="18309" CreationDate="2019-03-09T10:21:22.823" Score="3" Body="&lt;p&gt;As a general remark, a PID controller can be designed to take into account only constraints occurring at the commanded variable - the end-effector velocity in your case - through the so-called &lt;a href=&quot;https://it.mathworks.com/help/simulink/examples/anti-windup-control-using-a-pid-controller.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;strong&gt;antiwindup&lt;/strong&gt;&lt;/a&gt; mechanism that is responsible for detaching the integral whenever those constraints are reached. This way, the PID is somehow informed that something &quot;bad&quot; is happening and thus is able to take countermeasures.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unfortunately - and to my knowledge - there is no equivalent mechanism to deal with rate limiters of first and second order in the exact same way described above for the antiwindup, where the PID is aware of what's going on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your scheme, instead, the PID is unaware of the presence of cascaded rate limiters and reacts according to the plant feedback, where &quot;now&quot; the plant is to be considered the ensemble of the actual process you want to control plus the rate limiters themselves. These latter elements make the overall process highly nonlinear and, as a consequence, the PID that is tuned up to work within linearity starts off struggling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To circumvent this, you might consider the following ideas:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Try to avoid nonlinear zones at all by detuning your PID. Of course, you still need to guarantee some given performances hence this solution is often not viable.&lt;/li&gt;&#xA;&lt;li&gt;Do &lt;a href=&quot;https://en.wikipedia.org/wiki/Input_shaping&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;strong&gt;Input Shaping&lt;/strong&gt;&lt;/a&gt; to feed the controller with a reference signal that doesn't elicit too many vibrations by design and whose frequency content is such that the limitations in acceleration are satisfied. &lt;/li&gt;&#xA;&lt;li&gt;Do &lt;a href=&quot;https://en.wikipedia.org/wiki/Gain_scheduling&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;strong&gt;Gain Scheduling&lt;/strong&gt;&lt;/a&gt; and tune a family of PID controllers to work in different operational points.&lt;/li&gt;&#xA;&lt;li&gt;Give up with an intrinsic liner control approach to switch to more sophisticated techniques like &lt;a href=&quot;https://en.wikipedia.org/wiki/Model_predictive_control&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;strong&gt;Model Predictive Control&lt;/strong&gt;&lt;/a&gt; that makes use of optimization to tackle actuation constraints so as other properties of the plant.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="6941" LastActivityDate="2019-03-09T10:21:22.823" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18380" PostTypeId="2" ParentId="18372" CreationDate="2019-03-09T18:50:54.723" Score="1" Body="&lt;p&gt;GPS itself has about 3.5m of variance. To obtain a better accuracy it is usually fuse the measurements from the IMU with GPS using Kalman filters. The problem of navigation can be decompose into two sections as localization and path planning. Under localization the robot tracks its position after every time step. Then it plans the path for the next move. These two steps need to be iterated until it reaches to the goal. For your concern about outliers, I would suggest to use a Kalman filter and fuse the GPS and IMU measurements. Then you can identify your current position and heading precisely. Then you can use a path planning algorithm. &lt;/p&gt;&#xA;" OwnerUserId="21353" LastActivityDate="2019-03-09T18:50:54.723" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18381" PostTypeId="2" ParentId="9916" CreationDate="2019-03-10T01:04:27.717" Score="0" Body="&lt;p&gt;Odometry is a combination of two Greek words οδος = odos and μετρων = metro.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Translating directly to English, it means measures.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Odometry is a general term that should include all the measures of a sensor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Considering, for example, a camera in a robot,  Visual odometry (or camera codometry) includes localization (camera position in the world - map), camera pose (position/orientation relative to an origin), camera motion (egomotion) and extrinsic parameters (position of the camera in robot). &lt;/p&gt;&#xA;" OwnerUserId="22502" LastActivityDate="2019-03-10T01:04:27.717" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18386" PostTypeId="1" CreationDate="2019-03-10T18:58:27.553" Score="0" ViewCount="2450" Body="&lt;p&gt;I am working on a project that requires training a neural network with humidity and temperature values. After spending a while googling on how to run a neural network on ESP32 (Wemos LOLIN D32 Pro), I came to the conclusion that off-board training and then uploading would be the best option. But I didn't get any resource on doing that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I upload a trained neural network model(TensorFlow, scikit-learn ...) to an ESP32 board?&lt;/p&gt;&#xA;" OwnerUserId="22507" LastActivityDate="2019-09-14T16:02:25.320" Title="Uploading a trained ANN to an ESP32 board" Tags="&lt;microcontroller&gt;&lt;python&gt;&lt;machine-learning&gt;&lt;neural-networks&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18388" PostTypeId="1" CreationDate="2019-03-11T00:56:10.190" Score="3" ViewCount="163" Body="&lt;p&gt;I've been trying to understand how a Kalman filter used in navigation without much success, my questions are:&#xA;The gps outputs latitude, longitude and velocity.&lt;br&gt;&#xA;While the IMU outputs acceleration and rate angles. To use A Kalman filter, measurements needs to be in the same units ? The solution I would think about is to first define an origin. then each time my robots move, convert the latitude and longitude into Cartesian frame in meters, then use these displacement in the Kalman filter along with the acceleration. Is this the way used in practice ?&lt;br&gt;&#xA;Or, is there a relation between quaternions and latitude and longitude change ?&lt;br&gt;&#xA;Or, is the velocity from the GPS alone used in the position estimate in a Kalman filter ? &lt;/p&gt;&#xA;" OwnerUserId="19872" LastActivityDate="2019-12-23T13:02:45.397" Title="How is the GPS fused with IMU in a kalman filter?" Tags="&lt;kalman-filter&gt;&lt;imu&gt;&lt;ekf&gt;&lt;gps&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18389" PostTypeId="2" ParentId="18388" CreationDate="2019-03-11T01:29:14.240" Score="-1" Body="&lt;p&gt;Yes, you have to match units. If you are fusing position you have to agree to use either rectangular units or degrees. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I saw you are from aviation background, so allow me to use some jargons. In general what people do is to use ECEF or some NED reference inertial frame. You set the vehicle origin w.r.t. to the IF and start integrating from there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is quite non orthodox to use gps velocity, but if this is the info you have, than you should use it. The more information, the better. If you do not have a magnetometer and a compass you can't track orientation very well, but you can estimate based on the velocity vectors you have.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Don't forget to account for coriolis effect, and centripetal acc when integrating.&lt;/p&gt;&#xA;" OwnerUserId="20197" LastActivityDate="2019-03-11T01:29:14.240" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18390" PostTypeId="2" ParentId="11352" CreationDate="2019-03-11T11:15:11.593" Score="0" Body="&lt;p&gt;For rotary encoders, position is calculated by dividing the number of edges counted by the product of the number of pulses per revolution and the encoding type described above (1, 2, or 4), and then multiplying the result by 360 in order to get degrees of motion.&lt;/p&gt;&#xA;" OwnerUserId="22512" LastActivityDate="2019-03-11T11:15:11.593" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18391" PostTypeId="2" ParentId="18386" CreationDate="2019-03-11T12:20:03.653" Score="1" Body="&lt;p&gt;If you develop and train you model with tensorflow you can &lt;em&gt;probably&lt;/em&gt; (only experimental releases, no guarantees) use Tensorflow lite to deploy your neural network models. The idea is to train usig Tensorflow, export the serialized model and import that in TF Lite. You can see the intended workflow for deployin models &lt;a href=&quot;https://www.tensorflow.org/lite/guide#tensorflow_lite_architecture&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;TF Lite is meant for Android and iOS devices, but it has &lt;em&gt;experimental&lt;/em&gt; support for other devices (incl. running bare metal on &lt;a href=&quot;https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite/experimental/micro&quot; rel=&quot;nofollow noreferrer&quot;&gt;microcontroller&lt;/a&gt;). There is also a &lt;a href=&quot;https://www.tensorflow.org/lite/guide/build_rpi&quot; rel=&quot;nofollow noreferrer&quot;&gt;tutorial&lt;/a&gt; for Raspberry Pis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An alternative route would be to use &lt;a href=&quot;https://mathworks.com/products/matlab.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Matlab&lt;/a&gt;. It has a &lt;a href=&quot;https://www.mathworks.com/products/statistics.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Statistics and Machine Learning&lt;/a&gt; toolbox and a seperate &lt;a href=&quot;https://www.mathworks.com/products/deep-learning.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Deep Learning&lt;/a&gt; Toolbox. However, this it not enough, you will also need the &lt;a href=&quot;https://www.mathworks.com/products/matlab-coder.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Matlab Coder&lt;/a&gt; toolbox. The Matlab Coder toolbox can generate c/c++ source code for (trained) neural network models that can run without external library dependencies and therefore can be easily ported to any platform. Costs invoving the needed Matlab toolboxes are signifcant comparted to the free open source solutions.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2019-03-11T12:20:03.653" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18393" PostTypeId="1" CreationDate="2019-03-11T21:16:25.653" Score="1" ViewCount="84" Body="&lt;p&gt;I've noticed that in the MoveIt setup assistant, there is a &quot;ROS Control&quot; that auto-generates 2 files:&#xA;- ros_controllers.yaml&#xA;- ros_controllers.launch&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wanted to ask if it was possible to use these files to control my Gazebo robot? How can I do this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The robot arm I am working with is &lt;a href=&quot;https://github.com/Interbotix/widowx_arm/blob/master/widowx_arm_description/urdf/widowx.urdf.xacro&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/Interbotix/widowx_arm/blob/master/widowx_arm_description/urdf/widowx.urdf.xacro&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="22519" LastActivityDate="2019-03-11T21:16:25.653" Title="How to use MoveIt and ros_control (from setup assistant) to control Gazebo robot?" Tags="&lt;ros&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18395" PostTypeId="1" AcceptedAnswerId="18398" CreationDate="2019-03-12T06:40:30.137" Score="0" ViewCount="171" Body="&lt;p&gt;I want to make a calibration setup for BLDC ESC in the simulink model. I'm using arduino mega (3,9,10,11 pins) and quatro 30Ax4 esc. Normally I can set it to it's max, min, and incrementally increase/decrease duty cycle with transmitter throttle signal by mapping (1000,2000,160,255) and there is no problem. But when I try to map it 0,255 it doesnot work (sounds every 2 seconds like a throttle signal is abnormal).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need two suggestions;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt; why I cannot map the signal on the full range (0-255).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;2.&lt;/strong&gt; is it possible to make calibration by just sending the max and min values such as shown in the figure instead of using any mapping techniques?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Svktb.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Svktb.png&quot; alt=&quot;Switching-Calibration&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10090" LastEditorUserId="10090" LastEditDate="2019-03-17T13:03:48.553" LastActivityDate="2019-03-17T13:03:48.553" Title="Esc calibration" Tags="&lt;arduino&gt;&lt;matlab&gt;&lt;brushless-motor&gt;&lt;esc&gt;&lt;hardware&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18397" PostTypeId="2" ParentId="18352" CreationDate="2019-03-12T15:19:35.657" Score="0" Body="&lt;p&gt;Knowing that you want to keep the motor RPM at a fix value, the watt at the motor need to stay the same and the mechanical resistance at that fix RPM also remain the same (mainly air resistance).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is possible, IF:&#xA;1)  Regulate the voltage between the battery and the ESC so that the voltage seen by the ESC stays the same. You could use a buck-boost circuit. Note that, as the battery voltage drop, the current will increase to maintain the same Power. You might then be limited by the internal resistance of the battery, keeping it from discharging the required current.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2)  You change the pitch of the propeller (thus changing the air resistance). The RPM will stay the same but the overall performance will take the hit (lower torque and lower max speed).&lt;/p&gt;&#xA;" OwnerUserId="22341" LastActivityDate="2019-03-12T15:19:35.657" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18398" PostTypeId="2" ParentId="18395" CreationDate="2019-03-12T16:42:43.883" Score="1" Body="&lt;p&gt;Missing a few information, so I will assume the following:&#xA; - Using the instruction analogWrite() to send pulses to the ESC.&#xA; - Not using the Mega pin 4 or 13.&#xA; - your map() instruction is converting from your receiver pulse length to your analogWrite() function.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ESC require a pulse between 1000uS and 2000uS.&#xA;Therefore, analogWrite(160) is about a 1280uS pulse.&#xA;(as per analogWrite() reference note, the PWM frequency is 490Hz)&#xA;Sending a PWM lower than 125 will send an invalid pulse length.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some ESC wont arm if the pulse length  is off by even a few uS, so it's good to calibrate them when you do a change in your map() function.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can't help you for your Simulink model&lt;/p&gt;&#xA;" OwnerUserId="22341" LastActivityDate="2019-03-12T16:42:43.883" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18400" PostTypeId="1" CreationDate="2019-03-12T22:40:16.513" Score="1" ViewCount="73" Body="&lt;p&gt;I'm building a SCARA robot controlled with stepper motors and want to use an encoder to close the loop. The main reason for this is I am using an experimental gearbox with nonlinearities and zero backlash so I cannot trust the stepper motor to move to a target position in an open loop configuration. It makes more sense for the output position to be specified and the input changed to match it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Problem is that all examples and products I can find are meant to be attached to the output shaft of the stepper motor rather than the output of the gearbox. The reduction will is much smaller and I don't know if the PID controller can deal with large discrepancies in turning speed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to know if I can use products such as the &lt;a href=&quot;https://www.omc-stepperonline.com/closed-loop-stepper-driver/closed-loop-stepper-driver-0-70a-24-48vdc-for-nema-17-23-24-stepper-motor-cl57t.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;CLT57T from stepperonline&lt;/a&gt; to control an axis based on the output of a gearbox rather than on the output of a stepper motor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only other product I have found that can do this is &lt;a href=&quot;https://dynomotion.com/KFLOP.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;kflop+kstep&lt;/a&gt; from dynamotion, but I idealy want something with a step/dir control interface. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another less ideal option is using a BLDC servo driver such as &lt;a href=&quot;https://www.robotshop.com/en/sbl1360-60v-1x20a-brushless-dc-motor-controller.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this one&lt;/a&gt; instead of a stepper driver, but I would miss the stepper motor's holding torque.&lt;/p&gt;&#xA;" OwnerUserId="22496" LastActivityDate="2019-03-15T01:38:33.690" Title="Encoder attached to output of gearbox of stepper motor" Tags="&lt;servomotor&gt;&lt;stepper-motor&gt;&lt;stepper-driver&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18401" PostTypeId="1" CreationDate="2019-03-13T00:27:29.643" Score="2" ViewCount="73" Body="&lt;p&gt;So I was starting a robotics project and turns out that PID hasn't served very well in the past. So I was wondering if there was another feedback loop mechanism which has less overshoot and is more accurate than PID in terms of overshoot. Thanks in advance!&#xA;For reference, we are using a 4 wheel mecanum drivetrain&lt;/p&gt;&#xA;" OwnerUserId="22529" LastActivityDate="2019-03-13T13:02:49.140" Title="Is there a more accurate feedback loop with less overshoot or disturbances than PID?" Tags="&lt;control&gt;&lt;pid&gt;&lt;first-robotics&gt;&lt;logic-control&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18402" PostTypeId="1" CreationDate="2019-03-13T07:05:27.243" Score="0" ViewCount="108" Body="&lt;p&gt;What is the minimum shaft distance required to do a shaft coupling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to mount encoders on my motors but the shaft length is only 15 mm long. My encoders are 12 mm wide. So, I only have 3 mm to do a shaft coupling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The motors are &lt;a href=&quot;https://www.servocity.com/313-rpm-hd-premium-planetary-gear-motor&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The shaft have a diameter of 6 mm and the motors have a stall torque of 416 oz-in (30 kgf-cm). I am planning to do a 6mm to 6mm shaft coupling and I was wondering if 3 mm is enough distance. I want to mount the encoders like in the picture. From a graph in the motor website I think the power is around 15 Watts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/MPr6D.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MPr6D.jpg&quot; alt=&quot;EncoderOnMotorShaft&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11648" LastEditorUserId="11648" LastEditDate="2019-03-13T07:47:20.593" LastActivityDate="2020-08-04T18:07:15.800" Title="Minimum distance for a shaft coupling" Tags="&lt;mobile-robot&gt;&lt;quadrature-encoder&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18403" PostTypeId="1" CreationDate="2019-03-13T09:02:06.780" Score="0" ViewCount="337" Body="&lt;p&gt;I'm designing a mobile robot which will have to draw some lines (straight and/or curly) on the floor while it moves.&#xA;The floor will always be flat with almost no obstacles.&#xA;The robot will have four wheels and its speed won't exceed 0.8 m/s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to receive some suggestions about the wheels: is it better to use omni or mecanum wheels in this case?&#xA;I know that both wheels have advantages and disadvantages (i.e., mecanum wheels require more torque when you move sideways), but which one is suitable for this project?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Should I use a X-shape with the omniwheels to improve the accuracy while drawing the lines?&#xA;Or the mecanum wheels in a tank configuration will be more suitable? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you!&lt;/p&gt;&#xA;" OwnerUserId="10626" LastActivityDate="2019-03-13T12:53:00.633" Title="Omni vs mecanum wheels for drawing robot" Tags="&lt;mobile-robot&gt;&lt;wheeled-robot&gt;&lt;navigation&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18404" PostTypeId="2" ParentId="11521" CreationDate="2019-03-13T09:41:34.753" Score="0" Body="&lt;p&gt;I think you should always use a resistor to limit the current when directly connecting batteries in parallel. Since they will never start at the same voltage the current will start flowing from the higher voltage into the lower one (like when you jump-start a car battery) this could melt your cable connections if you aren't using a resistor until they stabilize at the same voltage.&lt;/p&gt;&#xA;" OwnerUserId="9537" LastActivityDate="2019-03-13T09:41:34.753" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18405" PostTypeId="2" ParentId="18403" CreationDate="2019-03-13T12:53:00.633" Score="1" Body="&lt;p&gt;The Omni wheels are your best option. The math required for it is “symmetric”. The setup for each wheel will be the same. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can achieve holonomic  movement with mecanum wheels but as you said you will have to calculate the difference of power when you move sideways.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your robot is circular, you won’t have to worry about front and back so much. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, unless your robot carries a sensor that requires a specific configuration I will go with omniwheels.&lt;/p&gt;&#xA;" OwnerUserId="11648" LastActivityDate="2019-03-13T12:53:00.633" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18406" PostTypeId="2" ParentId="18401" CreationDate="2019-03-13T13:02:49.140" Score="2" Body="&lt;p&gt;You might want to try a Non linear controller if you want disturbance rejection. But I will suggest you to fine tune your PID first.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, back to non linear controls, you need to develop a very good mathematical model of the dynamics of your robot. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can use a scheduler controller: first linearize you plant at different operating points an design a controller for each of the operating points. This technique is useful if you use LQR controllers. Matlab has a lot of documentation and examples on this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can also use more robust techniques like H2 or H infinity controls if you are eager to take your math abilities to the limit. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, I also suggest you to double check your sensed signals, wheels, actuators, sensor, etc. Corroborate that they give you what they are supposed to give you. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, you can try a Kalman filter to aid the PID performance. &lt;/p&gt;&#xA;" OwnerUserId="11648" LastActivityDate="2019-03-13T13:02:49.140" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18408" PostTypeId="1" CreationDate="2019-03-13T14:32:21.043" Score="0" ViewCount="100" Body="&lt;p&gt;I'm trying to develop a quality measurement (kind of a metric) for the &lt;code&gt;reliability&lt;/code&gt;/&lt;code&gt;quality&lt;/code&gt; of given point cloud data (coming from a 3D LiDAR) at a given point or region. It should come into account when there are situations where LiDAR data is not as usable as we want it to. Imagine a very foggy and/or rainy environment for example, where the rain/fog particles cause scattering.&lt;/p&gt;&#xA;&lt;p&gt;So one approach I am thinking of is to observe the x- and y-position at the &amp;quot;position of interest&amp;quot; for a while, take the regarding z-values during this time-slot and compute the variance (considering the data is normally distributed).&lt;/p&gt;&#xA;&lt;p&gt;Am I right in saying that if this variance exceeds some threshold, I could interpret this as &amp;quot;bad&amp;quot;/unreliable point cloud data at this point?&lt;/p&gt;&#xA;&lt;p&gt;Of course, this only holds for static regions - if I have dynamically changed &amp;quot;regions/points of interest&amp;quot; obviously the variance will be no meaningful metric.&lt;/p&gt;&#xA;" OwnerUserId="22539" LastEditorUserId="18870" LastEditDate="2020-12-04T13:40:13.520" LastActivityDate="2021-05-03T14:09:20.837" Title="LiDAR Point cloud data reliability/quality" Tags="&lt;lidar&gt;&lt;point-cloud&gt;&lt;reliability&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="18409" PostTypeId="2" ParentId="18408" CreationDate="2019-03-13T14:47:11.350" Score="0" Body="&lt;p&gt;Using your suggested method you can rule out the presence of moveing elements in the scanned area. I do no think you can rule out (slowly moving) fog. The metric will rule out moving objects/particles but there are other factors which influence readings wich cannot be ruled out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Static measurments will mean that reflections do not change and any environmental conditions that effect the measurement (e.g. sunlight) will also be static. These factors can influence a reading and their influence remains constant in a static setting therefore you will not see any variance in the readings if the reading is affected by reflections of the laser or by sunlight.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2019-03-14T22:14:08.743" LastActivityDate="2019-03-14T22:14:08.743" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18411" PostTypeId="2" ParentId="18402" CreationDate="2019-03-13T15:34:03.637" Score="1" Body="&lt;p&gt;If it is the same type of shaft coupling as the one in the picture, as long as the set screw is completely on the motor shaft, it will transfer adequate torque.&#xA;To help with the limited clearance, ensure no pulling force is apply to the coupler since it might slip out of the coupler. The motor shaft and the coupled rod must perfectly straight to reduce the chance of the set screw to &quot;dig&quot; itself out of the motor shaft.&lt;/p&gt;&#xA;" OwnerUserId="22341" LastActivityDate="2019-03-13T15:34:03.637" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18412" PostTypeId="1" CreationDate="2019-03-14T00:14:47.880" Score="0" ViewCount="25" Body="&lt;p&gt;I am trying to localize a robot within a rectangular room (182cm x 243cm) with completely black walls (so IR sensors and LIDAR are out of the question). I am trying to figure out if I can position enough ultrasonic sensors around my robot so that I can calculate the distance to each wall and the orientation of the robot at any heading or position within the room (assuming the bot does not get too close to any of the walls).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the maximum angle at which an ultrasonic sensor can reflect against a wall and still get an accurate reading?  I am using these sensors specifically, which have 1mm resolution:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.robotshop.com/en/maxbotix-ez4-high-performance-sonar.html?gclid=CjwKCAjw1KLkBRBZEiwARzyE7wcDgX3jBnfT2amCZb5UB4GD63ZgvmlGvW8mB2ZJqh3NJEiufkn37RoCxLwQAvD_BwE&quot; rel=&quot;nofollow noreferrer&quot;&gt;Maxbotix HR-LV-MaxSonar-EZ4 High Performance Sonar Module&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any other tips on localization in this kind of environment?  &lt;/p&gt;&#xA;" OwnerUserId="20111" LastEditorUserId="20111" LastEditDate="2019-03-15T00:00:55.803" LastActivityDate="2019-03-15T00:00:55.803" Title="Max angle of beam against surface (ultrasonic sensor)" Tags="&lt;localization&gt;&lt;ultrasonic-sensors&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18413" PostTypeId="1" AcceptedAnswerId="18414" CreationDate="2019-03-14T01:04:01.533" Score="0" ViewCount="482" Body="&lt;p&gt;What is the difference between dual ultrasonic sensors (sensors with two round elements) and single ultrasonic sensors (the ones with a single cylindrical sensing element)?  What are the advantages/drawbacks of each design?&lt;/p&gt;&#xA;" OwnerUserId="20111" LastActivityDate="2019-03-14T02:29:24.790" Title="Dual vs single ultrasonic sensors" Tags="&lt;ultrasonic-sensors&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18414" PostTypeId="2" ParentId="18413" CreationDate="2019-03-14T02:29:24.790" Score="3" Body="&lt;p&gt;Sensors with two elements have separate transducers acting as the transmitter and the receiver.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A sensor with a single element uses the same transducer as a transceiver to create the sound pulse and to listen for the echo.  These sensors need time to switch from one mode to the other (Tx or Rx).  This means that the minimum sensing distance is likely to be longer that would be the case if separate elements were used for the transmitter and receiver. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To give a specific example, the range of the &lt;a href=&quot;https://www.santy.cz/senzory-c24/arduino-hc-sr04-modul-vzdalenost-mereni-vodotesny-waterproof-i320/&quot; rel=&quot;nofollow noreferrer&quot;&gt;AJ-SR04M&lt;/a&gt; sensor is &lt;strong&gt;20cm - 500cm&lt;/strong&gt; in air.  It simply cannot detect objects closer than 20cm.  (The speed-of-sound in water is about 5x the speed of sound in air.  If this 'waterproof' sensor is actually used underwater, the minimum distance will therefore be about 1m)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, a benefit of sensors that employ a single element is that they are likely to require less space than a sensor with two elements.  They may also be more cost effective (although this will depend on a range of other factors).&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Beyond that, the relative advantages/drawbacks will depend on the particular sensor characteristics and the application(s) in which it is to be used.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sensors Online published a two-part article titled &lt;em&gt;Choosing an Ultrasonic Sensor for Proximity or Distance Measurement&lt;/em&gt; a couple of years ago, which was intended to help people select ultrasonic sensors with the optimal acoustical properties (frequency, beam pattern, etc.) for their particular application:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.sensorsmag.com/components/choosing-ultrasonic-sensor-for-proximity-or-distance-measurement-part-1-acoustic-0&quot; rel=&quot;nofollow noreferrer&quot;&gt;Part 1: Acoustic Considerations&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.sensorsmag.com/components/choosing-ultrasonic-sensor-for-proximity-or-distance-measurement-part-1-optimizing&quot; rel=&quot;nofollow noreferrer&quot;&gt;Part 2: Optimizing Sensor Selection&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="17029" LastActivityDate="2019-03-14T02:29:24.790" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18415" PostTypeId="2" ParentId="15305" CreationDate="2019-03-14T18:56:05.987" Score="1" Body="&lt;p&gt;Without going into detail, to answer your question, yes you can.  That is, the camera images do contain information about the distance of objects, but only in conjunction with information from the environment which is typically embedded in a model - for example a model about objects, how they appear and their sizes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Essentially, it would have to work similar to how humans determine the distance to objects that are beyond the range where the separation of our eyes can utilize stereo cues.  That is, we estimate how far away a familiar object is using its &lt;em&gt;apparent size&lt;/em&gt;.  If you see a car with a small apparent size, you assume it is far away because you know the typical size of a car.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This obviously requires an object recognition model that also provides actual size information that can be used in conjunction with your bounding-box apparent size to determine the distance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind that, not only will it only be as good as the object recognition model, but it can be fooled (- is it a real car in the distance or a toy car closer?).&lt;/p&gt;&#xA;" OwnerUserId="16622" LastActivityDate="2019-03-14T18:56:05.987" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18416" PostTypeId="2" ParentId="18159" CreationDate="2019-03-14T19:44:36.397" Score="1" Body="&lt;p&gt;You may also consider the &#xA;&lt;a href=&quot;https://store.micropython.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;PyBoard&lt;/a&gt;  which has a microcontroller specifically configured to run Python (&lt;a href=&quot;http://micropython.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Micropython&lt;/a&gt;).  There are many addon 'shield' board for robotics-related components and a book that will help to get started.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/vF7zb.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vF7zb.jpg&quot; alt=&quot;PyBoard 1.1 from their website (Mar 2019)&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="16622" LastActivityDate="2019-03-14T19:44:36.397" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18417" PostTypeId="1" CreationDate="2019-03-14T21:56:43.490" Score="1" ViewCount="59" Body="&lt;p&gt;I'm a little confused on how to set up the Kalman filter matrices to fuse an ultrasonic altitude sensor and accelerometer from IMU. I am trying to implement this for a quadcopter. And what I'm confused about specifically is when the quadcopter is tilted (&lt;span class=&quot;math-container&quot;&gt;$\phi \neq 0, \theta \neq 0$&lt;/span&gt;). Do I just simply rotate the z-accelerometer, &lt;span class=&quot;math-container&quot;&gt;$a_z$&lt;/span&gt;, measurement by &lt;span class=&quot;math-container&quot;&gt;$\cos(\phi) \cos(\theta)$&lt;/span&gt;? As such: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;\begin{equation*}&#xA;\begin{matrix}&#xA;\begin{bmatrix}&#xA;z\\ w&#xA;\end{bmatrix}_{k+1} &#xA;= &#xA;\begin{bmatrix}&#xA;1 &amp;amp; \Delta t \\&#xA;0 &amp;amp; 1&#xA;\end{bmatrix} &#xA;\begin{bmatrix}&#xA;z \\&#xA;w&#xA;\end{bmatrix}_{k}&#xA;\end{matrix}&#xA;+ &#xA;\begin{bmatrix}&#xA;\frac{1}{2} \Delta t^2\\&#xA;\Delta t&#xA;\end{bmatrix}&#xA;(a_z \cos\phi \cos\theta) &#xA;\end{equation*}&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or just keep it as &lt;span class=&quot;math-container&quot;&gt;$a_z$&lt;/span&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also how would my observation matrix H take into the account the roll/pitch angles? Since the ultrasonic is not pointing directly downwards.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've seen implementations where they do not include the cosines, but I'm not sure if that's because they assume &lt;span class=&quot;math-container&quot;&gt;$\cos(x)$&lt;/span&gt; is ~1 for small angles, which would not be valid for my quad (&gt;30deg maneuvers). &lt;/p&gt;&#xA;" OwnerUserId="21285" LastEditorUserId="21285" LastEditDate="2019-03-14T22:52:07.340" LastActivityDate="2019-03-14T22:52:07.340" Title="Kalman filter to fuse ultrasonic altitude sensor and accelerometer" Tags="&lt;quadcopter&gt;&lt;kalman-filter&gt;&lt;imu&gt;&lt;sensor-fusion&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18418" PostTypeId="2" ParentId="18400" CreationDate="2019-03-15T01:38:33.690" Score="1" Body="&lt;p&gt;Here is the response from stepperonline about their closed loop stepper controller.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Glad to receive your inquiry.&#xA;  You can't install the encoder on the output of the gearbox. This is uncorrect and forbidden. For the driver can't control the motor&#xA;  The encoder must install on the shaft of motor.&#xA;  Have further question, please don't hesitate to contact us.&#xA;  Best Regards&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Turns out it's not possible&lt;/p&gt;&#xA;" OwnerUserId="22496" LastActivityDate="2019-03-15T01:38:33.690" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18420" PostTypeId="1" CreationDate="2019-03-15T11:33:42.507" Score="0" ViewCount="42" Body="&lt;p&gt;I need you guys to suggest me a problem that requires to change PID coefficients in different times. Lets say every 1 minutes the environment should change and readjust the PID’s parameters. Note that my knowledge about PID is limited. So just suggest me a problem which can be simulated in simulink or gazebo. Then I am going to use my algorithm to adapt the new environment to find the new parameters for the PID. Note that my algorithm is written with C++ and it is an optimization algorithm. It works very well on benchmark problems but for my graduation I have to test on a dynamic real world problem. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The structure will be like this: system will start with some random parameters and then the error will be parsed by my algorithm, and it will produce new parameters for the PID. It will continue with these parameters until the next environmental change. And all this will be in a infinite loop. I hope I could explain my problem. Thanks in advance.&lt;/p&gt;&#xA;" OwnerUserId="22549" LastActivityDate="2019-03-15T22:00:52.910" Title="Real world dynamic problem suggestion for PID" Tags="&lt;pid&gt;&lt;c++&gt;&lt;gazebo&gt;&lt;tuning&gt;&lt;uncertainty&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ClosedDate="2019-03-20T15:25:50.707" ContentLicense="CC BY-SA 4.0" />
  <row Id="18421" PostTypeId="1" AcceptedAnswerId="18422" CreationDate="2019-03-15T15:07:56.713" Score="1" ViewCount="114" Body="&lt;p&gt;Premise: I am by no means an expert on Robotics, I have to deal with this project where we use a robotic arm (franka emika), so feel free to assume that I got the basics wrong!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have this arm ( &lt;a href=&quot;https://frankaemika.github.io/docs/control_parameters.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://frankaemika.github.io/docs/control_parameters.html&lt;/a&gt; ) and I have its DH parameters for each joint. I need to compute each x-y-z joint positions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I understand from &lt;a href=&quot;https://en.wikipedia.org/wiki/Denavit%E2%80%93Hartenberg_parameters&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; that you can compute, for each joint, a &lt;span class=&quot;math-container&quot;&gt;$&#xA;[^{n-1}T_n]$&lt;/span&gt; matrix which represents a &quot;change of frame&quot; from the previous frame; I also understand that the product of the first n matrixes gives the change-of-frame from the initial frame to the n-th joint frame. &#xA;But, how do you use this T matrix to compute the x-y-z positions?&lt;/p&gt;&#xA;" OwnerUserId="22551" LastActivityDate="2019-03-15T19:22:07.557" Title="Calculating the cartesian position of each joint with DH transform" Tags="&lt;forward-kinematics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18422" PostTypeId="2" ParentId="18421" CreationDate="2019-03-15T19:22:07.557" Score="2" Body="&lt;p&gt;By combining all the matrices, you'll end up having an homogeneous transformation &lt;span class=&quot;math-container&quot;&gt;$T \in SE\left(3\right)$&lt;/span&gt; that can be expressed as:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;T= \left( \begin{matrix} \mathbf{R} &amp;amp; \mathbf{p} \\ 0 &amp;amp; 1\end{matrix} \right),&#xA;$$&lt;/span&gt;&#xA;where the matrix &lt;span class=&quot;math-container&quot;&gt;$\mathbf{R} \in \mathbb{R}^{3 \times 3}$&lt;/span&gt; is symmetric and defines how the final frame is rotated with respect to the root, whereas the vector &lt;span class=&quot;math-container&quot;&gt;$\mathbf{p} \in \mathbb{R}^{3 \times 1}$&lt;/span&gt; accounts for the translational part.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Indeed, it comes out that:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\mathbf{p}=\left( \begin{matrix} x \\ y \\ z \end{matrix} \right).&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;" OwnerUserId="6941" LastActivityDate="2019-03-15T19:22:07.557" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18423" PostTypeId="2" ParentId="18420" CreationDate="2019-03-15T19:39:47.490" Score="1" Body="&lt;p&gt;Look for highly nonlinear problems where a single PID is not suitable to work at its best within the whole operational range thus requiring multiple controllers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's an &lt;a href=&quot;https://it.mathworks.com/help/slcontrol/ug/designing-a-family-of-pid-controllers-for-multiple-operating-points.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;example in Simulink&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your case, instead of having a repertoire of PID controllers already tuned up to operate in different points, you might consider sticking to a single PID whose gains you aim to modify as the plant evolves over time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another typical example where adapting the PID is fundamental is when the plant under control undergoes wear and tear. And if your plant is the tire of a racing car and your controller is responsible for regulating the slip in a turn, you would certainly need to account for varying characteristics of your tire model throughout the race.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's a good &lt;a href=&quot;http://lup.lub.lu.se/luur/download?func=downloadFile&amp;amp;recordOId=8848275&amp;amp;fileOId=8859495&quot; rel=&quot;nofollow noreferrer&quot;&gt;reading&lt;/a&gt; on this argument.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2019-03-15T22:00:52.910" LastActivityDate="2019-03-15T22:00:52.910" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18424" PostTypeId="1" CreationDate="2019-03-15T19:56:50.377" Score="1" ViewCount="64" Body="&lt;p&gt;I currently have an inspection robot deployed in a remote part of Africa that has a failing Turnigy TGY-6114MD servo. The issue appeared randomly. The servo won't respond to commands unless given a slight push or nudge and then it will move to it's commanded position. We thought there may be some binding in the gearbox. After removing the gearbox and the gears we found that the motor shaft itself needs a slight push to start spinning. So with no load on the motor at all it still won't start unless given a slight push.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know what may be causing this behavior? We are unfortunately unable to get a replacement part in a reasonable amount of time so any repair ideas are welcome!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: Update. We measured the voltage across the motor solder joints during operation. When the motor is turning (with no physical load) the voltage is 4.98V. When the motor stops, the voltage drops to 1.4V. On an identical working servo on the robot, the voltage is 0V when the motor stops. What would cause the 1.4V at the motor when stopped?&lt;/p&gt;&#xA;" OwnerUserId="22554" LastEditorUserId="22554" LastEditDate="2019-03-16T01:26:07.877" LastActivityDate="2019-03-16T01:26:07.877" Title="TGY-6114MD Servo motor needs push to start" Tags="&lt;mobile-robot&gt;&lt;control&gt;&lt;wheeled-robot&gt;&lt;electronics&gt;&lt;rcservo&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18425" PostTypeId="1" CreationDate="2019-03-16T01:28:02.043" Score="0" ViewCount="17" Body="&lt;p&gt;We are using a Prizm Genuino controller. We have been using a line sensor to successfully detect black lines but we seem to be getting a conflict with our servos now.  The lineSensor does not seem to be giving us a reading.  We think this has also happened with our ultraSonic sensor. Hoping someone can point us in the right direction.&lt;/p&gt;&#xA;" OwnerUserId="22557" LastActivityDate="2019-03-16T01:28:02.043" Title="Servo LIneSensor conflict" Tags="&lt;arduino&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18426" PostTypeId="1" AcceptedAnswerId="18473" CreationDate="2019-03-16T13:39:42.247" Score="6" ViewCount="94" Body="&lt;p&gt;There's something I don't quite understand about SLAM. When a self-driving car wants to locate itself using a prior map, how does it do that when the environment keeps changing, e.g., new cars parked on the curb, etc.? Even if it uses a 3D map, the current sensor would be quite different to the prior map if there're new objects on the road.&lt;/p&gt;&#xA;" OwnerUserId="11489" LastActivityDate="2019-04-24T06:00:55.130" Title="How does a self-driving car locate itself when the environment changes?" Tags="&lt;slam&gt;&lt;autonomous-car&gt;&lt;self-driving&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18428" PostTypeId="2" ParentId="18340" CreationDate="2019-03-16T15:02:05.000" Score="1" Body="&lt;p&gt;Thanks for the replies. I figured out to make it work. I divided the image into different regions using horizontal lines. Then, I have a timer in C# that every x milliseconds figures out which region the centroid of the object is in. (The centroid is obtained by finding the centroid of the OpenCV tracker bounding box). Then each timer cycle it checks to see if the object went from one region to another. So I have a set of rules. If the object goes from region 0 to region 1, then the motor speeds up. If it goes from region 1 to 0, no speed change happens. If it goes from 0 to -1 then the motor speed is decreased. This acts like a funnel guiding the object towards the middle of the image. I have 10 horizontal regions and 8 vertical regions for each movement axis. &#xA;There are opposite rules depending on if the motor is moving left or right. &#xA;I also have a boolean value to keep track of which way the motor is spinning. For example xMovingLeft, xMovingRight, yMovingUp, yMovingDown. There is a different, opposite set of region rules if the motor is turning a different direction. &#xA;The only downside to doing it like this is that the object is constantly moving left/right up/down towards the center of the image. But it's not that bad and often times the speed is exactly the same so the object is moving at exactly the same speed as the mount. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/z409Z.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/z409Z.jpg&quot; alt=&quot;Object centering &quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="21132" LastActivityDate="2019-03-16T15:02:05.000" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18429" PostTypeId="1" AcceptedAnswerId="18431" CreationDate="2019-03-16T17:19:44.817" Score="0" ViewCount="124" Body="&lt;p&gt;I am reading up on inverse kinematics and have a few questions I hope could be answered.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This example is from a 3-revolute-joint, where &lt;span class=&quot;math-container&quot;&gt;$ E $&lt;/span&gt; is the end effector and &lt;span class=&quot;math-container&quot;&gt;$ G $&lt;/span&gt; is the goal position of the end effector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It states that the desired change to the end effector is the difference between the end effector and the goal position, given as follows:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ V = \begin{bmatrix}(G-E)_x\\(G-E)_y\\(G-E)_z \end{bmatrix} $$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This can then be set equal to the the Jacobian in the following form:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$ J = \begin{bmatrix}((0,0,1) \times E)_x &amp;amp;(0,0,1) \times (E-P_1)_x &amp;amp; (0,0,1) \times (E-P_2)_x\\((0,0,1) \times E)_y &amp;amp;(0,0,1) \times (E-P_1)_y &amp;amp; (0,0,1) \times (E-P_2)_y\\((0,0,1) \times E)_z &amp;amp;(0,0,1) \times (E-P_1)_z &amp;amp; (0,0,1) \times (E-P_2)_z \end{bmatrix} $$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From this Jacobian term I do not understand where &lt;span class=&quot;math-container&quot;&gt;$ (0, 0, 1) $&lt;/span&gt; comes from.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also I do not understand what the &lt;span class=&quot;math-container&quot;&gt;$ P_1 $&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$ P_2 $&lt;/span&gt; come from.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to understand where they come from and what they mean?&lt;/p&gt;&#xA;" OwnerUserId="22028" LastEditorUserId="22028" LastEditDate="2019-03-16T17:25:59.163" LastActivityDate="2019-03-16T20:26:58.940" Title="3D Inverse Kinematics Jacobian" Tags="&lt;kinematics&gt;&lt;inverse-kinematics&gt;&lt;jacobian&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18431" PostTypeId="2" ParentId="18429" CreationDate="2019-03-16T20:26:58.940" Score="0" Body="&lt;p&gt;OK, I was able to find a copy of the book &lt;a href=&quot;https://books.google.co.uk/books?id=FZFCDZPOsRcC&amp;amp;printsec=frontcover#v=onepage&amp;amp;q&amp;amp;f=false&quot; rel=&quot;nofollow noreferrer&quot;&gt;Computer Animation Algorithms and Techniques&lt;/a&gt; by Rick Parent.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;As stated the problem was as follows:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Consider the simple three revolute joint, planar manipulator of Figure 2. In this example the objective is to move the end effector, E, to the goal position, G. The orientation of the end effector is of no concern in this example.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/FoZML.png&quot; alt=&quot;3R manipulator arm&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The axis of rotation of each joint is perpendicular to the figure, coming out of the paper.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The diagram and last point are the keys to understanding the terms that you found unclear.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;As we can see from the diagram, &lt;span class=&quot;math-container&quot;&gt;$ P_1 $&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$ P_2 $&lt;/span&gt;  are the Cartesian coordinates of the revolute joints P1 and P2 respectively (E is the Cartesian coordinates of the end effector).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And &lt;span class=&quot;math-container&quot;&gt;$ (0, 0, 1) $&lt;/span&gt; is simply the the “z” vector, defined by the axis of rotation of the revolute joints (i.e. perpendicular to the figure, coming out of the paper).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus, what you are calculating are the cross products of the joint axis (&quot;z&quot; vector) and the vectors from the joints to the end-effector (&lt;span class=&quot;math-container&quot;&gt;$ E - P_n $&lt;/span&gt;).&lt;/p&gt;&#xA;" OwnerUserId="17029" LastActivityDate="2019-03-16T20:26:58.940" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="18433" PostTypeId="1" CreationDate="2019-03-17T09:02:59.137" Score="1" ViewCount="1908" Body="&lt;p&gt;I am spending a lot of time in understanding these two concepts, because in several papers that I read, they define them differently, and I do not know exactly what is the meaning of the two different queries.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I understand, from what I read, that single query algorithm, like RRT, they only compute a single path between an starting point and a goal point, and anything else.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, multiple query algorithms, like PRM, you construct a roadmap, and once you have it, you can query it for multiples paths, I mean, you can select two points (init and goal), and then if you change your opinion you can change these two points with others.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I do not know if this approach is correct. I  would love that someone can explain me in layman terms.&lt;/p&gt;&#xA;" OwnerUserId="22563" LastEditorUserId="37" LastEditDate="2019-07-17T14:19:53.763" LastActivityDate="2020-10-30T09:48:59.920" Title="Difference between Single-Query and Multiple Query Algorithms?" Tags="&lt;motion-planning&gt;&lt;path-planning&gt;&lt;planning&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18435" PostTypeId="2" ParentId="18433" CreationDate="2019-03-17T15:07:54.407" Score="-2" Body="&lt;p&gt;Modern pathplanning algorithm like PRM and RRT allow to find a trajectory on a given map which avoids obstacles. Especially under realtime condition in computer games the techniques are providing an efficient path from start to goal. Apart from pathplanning itself, graph-based planning can be used as a meta-algorithm for motion planning in general.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;RRT is faster than PRM because the number of calculated edges are lower. RRT was designed with minimalism in mind, which means that graph extension is seen as costly and should be avoided under all circumstances. In contrast, PRM invests more resources in building a complete graph which includes more nodes and more edges.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the solver ontop of an existing graph, the PRM algorithm is more comfortable to query, because the number of possible paths is higher. Additional constraints can be matched more easily, while RRT has the problem that the shortest path looks in most cases a bit strange. The spline isn't the shortest one but goes a bit uncommon through the map. That is the reason, why RRT needs a postprocessing step to smooth the path.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2019-03-17T15:07:54.407" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18436" PostTypeId="2" ParentId="18340" CreationDate="2019-03-18T18:57:40.787" Score="1" Body="&lt;p&gt;The description of the problem fits great to a technique which is called model predictive control. It can solve the problem of tracking an object with a telescope on a mathematical satisfying way. The first thing to do is to create a prediction model. The next step is to program a controller which is utilizing the estimation for the control the telescope itself. But let us go into the details.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The object at the sky is generating a trajectory during time at a gantt chart. On timestep 0 the object is at place #1 while on timestep 1 it is on place #2 and so on. A so called forward model is able to predict the future position of the object. The model takes as input the current position (x,y) and the desired future timestep (for example 100) and returns the position of the object. Creating such a forward model can be done with different techniques. A simple formula may be a starting point, but neural networks can do the same job.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The forward model itself is useless, because it doesn't answer how to move the telescope. This is done by the second software module called predictive control. This algorithm takes as input the current position of the telescope and the predicted position of the object and will move the telescope to the next position. Realizing the predictive control can be done also with many ways. In it's easiest case it's a behavior tree but some advanced mathematical equations can do the same job.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is important to realize is, the separation between prediction and control. Both problems have to be treated independent from each other. The first question is what is the future position of the object in the sky, and the second problem is how to move the servo motor in reaction to this prediction.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2019-03-18T18:57:40.787" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18437" PostTypeId="1" CreationDate="2019-03-18T22:54:33.450" Score="1" ViewCount="984" Body="&lt;p&gt;The rules of assigning axes for DH parameters are (as I know them):&#xA;1- Z: in the direction of the axis of rotation/translation of revolute/prismatic joints.&#xA;2- X: perpendicular to the previous Z axis but not colinear with the current Z-axis.&#xA;3- Y: fill the cartesian coordinate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But my question is: how do you assign the direction of X axis? you can have two directions for X-axis when assigning it. See the picture below&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/cXYOK.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/cXYOK.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="22577" LastActivityDate="2019-03-19T15:32:54.963" Title="How to determine the direction of X-Axis in Denavit Hartenberg process? [Sketch inside]" Tags="&lt;kinematics&gt;&lt;dh-parameters&gt;&lt;joint&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18438" PostTypeId="1" CreationDate="2019-03-19T02:48:29.193" Score="1" ViewCount="512" Body="&lt;p&gt;Have you done take-home robotics(ROS) coding test in interviews?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do you want to share the coding test instructions with me? or point me in the right direction where I can find some to practice?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm looking for something similar to this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/andrestoga/take_home_robotics_coding_test&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/andrestoga/take_home_robotics_coding_test&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;. Those are the tests I've done so far.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you very much!&lt;/p&gt;&#xA;" OwnerUserId="14122" LastEditorUserId="14122" LastEditDate="2019-03-20T04:19:22.783" LastActivityDate="2019-03-20T04:19:22.783" Title="Have you done take-home robotics(ROS) coding test in interviews?" Tags="&lt;ros&gt;" AnswerCount="0" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18439" PostTypeId="2" ParentId="18437" CreationDate="2019-03-19T04:17:38.637" Score="0" Body="&lt;p&gt;You should use right-handed coordinate system, that means if you curl your palm/fingers of your right hand from +x to +y, then your thumb direction shows the +z direction. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For DH you have to follow these rules &lt;img src=&quot;https://i.stack.imgur.com/Qt0UO.png&quot; alt=&quot;Case-1&quot;&gt;, &lt;img src=&quot;https://i.stack.imgur.com/TH1kF.png&quot; alt=&quot;Case-2&quot;&gt; &lt;img src=&quot;https://i.stack.imgur.com/rofiP.png&quot; alt=&quot;Case-3&quot;&gt;&lt;/p&gt;&#xA;" OwnerUserId="21747" LastEditorUserId="21747" LastEditDate="2019-03-19T15:32:54.963" LastActivityDate="2019-03-19T15:32:54.963" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18443" PostTypeId="2" ParentId="18437" CreationDate="2019-03-19T11:50:40.223" Score="1" Body="&lt;p&gt;The DH method is ambigous. There are multiple solutions which are correct and leat to the same TCP pose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Try to make a minumum amount of changes in the coordinate systems with the transition. If you can choose the x axis pointing in the same direction as the previous one then do so. If not, you can try to anticipate how the next X axis should be or how the TCP X direction will be and try to match that. In other words, as a rule of thumb, the more 0-s in the DH table the better. &lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2019-03-19T11:50:40.223" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18446" PostTypeId="1" AcceptedAnswerId="18460" CreationDate="2019-03-19T17:22:38.577" Score="0" ViewCount="797" Body="&lt;p&gt;I have data from a TeleMega and do not understand how to apply the rotation matrix for the accelerometer data so that I can get the more accurate position estimate from my accelerometer. My data comes from a high powered rocket if that helps. I don't understand quaternions so that wont be much help to me unless you can show me how to run the madgwick c++ code. I have raw accelerometer, magnetometer, and gyroscope data stored into arrays but I have no idea how to incorporate that into the madgwick code into c++. I am trying to follow this link but I am stuck on how to apply step 4. I am a decent coder in c++. I have integrated the gyroscope data already but don't understand what to do with it. please help.&#xA;&lt;a href=&quot;https://robotics.stackexchange.com/questions/16757/what-is-the-algorithm-to-get-position-linear-displacement-and-linear-velocity&quot;&gt;what is the algorithm to get position (Linear displacement and linear velocity ) using IMU (Like MPU6050)?&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wrote some code already that uses a Kalman filter to smooth the accelerometer data and then I applied numerical integration to obtain velocity and position and then implemented a 3D graph of the trajectory of the rocket but it was not what I was expecting which is why I am asking this question. &lt;/p&gt;&#xA;" OwnerUserId="22587" LastEditorUserId="22587" LastEditDate="2019-03-22T17:43:43.640" LastActivityDate="2019-03-22T17:43:43.640" Title="How to transform raw accelerometer data into the Earth fixed frame to determine position" Tags="&lt;accelerometer&gt;&lt;gyroscope&gt;&lt;magnetometer&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18447" PostTypeId="1" AcceptedAnswerId="18448" CreationDate="2019-03-20T01:20:37.363" Score="1" ViewCount="520" Body="&lt;p&gt;I am just getting curious about this gravity compensation technique.&#xA;If we could compensate the force generated by the gravity (by feeding in the exact amount of force into the opposite direction), will the mass of the robot be 0 kg?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could we then just swing a 1000kg robot arm with our hand?&lt;/p&gt;&#xA;" OwnerUserId="21382" LastActivityDate="2019-03-20T03:08:48.757" Title="Gravity compensation" Tags="&lt;robotic-arm&gt;&lt;industrial-robot&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18448" PostTypeId="2" ParentId="18447" CreationDate="2019-03-20T03:08:48.757" Score="3" Body="&lt;p&gt;In an ideal scenario, yes, that should be the case. When gravity compensation is implemented on robots, all joints apply a torque to balance out the torque applied by the force of gravity. They should ideally turn into floating robots objects.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, it is not always the case due to inaccurate modeling and gravity compensation implementation. Moreover, to swing a robot arm, you'll also need to overcome friction, stiction and other forces that oppose motion at the joint level.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have a Zero-Friction Zero-Gravity controller (you feed gravity compensation torques as well as friction torques in a tight closed loop), then the robot should be simply floating in space, massless. In such a case, you can definitely move a robot arm around with your hand, regardless of the mass. It is because all the forces that the robot needs to overcome and break into motion have already been overcome and the slightest of external efforts shall be extra input and sufficient to move the robot. &lt;/p&gt;&#xA;" OwnerUserId="18572" LastActivityDate="2019-03-20T03:08:48.757" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18449" PostTypeId="1" CreationDate="2019-03-20T05:30:13.427" Score="0" ViewCount="23" Body="&lt;p&gt;I got a Turtlebot, and I’m thinking of putting the RGBd camera to other places. If you move RGBD camera to other places on a robot, same orientation, create a map, does ROS AMCL still works? I am thinking since the package might have created a measurement model and motion mode of the Turtlebot for AMCL, then moving the camera around can fail the navigation stack if no transformation or adjustment made to the models?&lt;/p&gt;&#xA;" OwnerUserId="9972" LastActivityDate="2019-04-02T15:52:54.360" Title="If you move the RGBD camera to other places on a Turtlebot, same orientation, create a map, does ROS navigation stack with AMCL still works?" Tags="&lt;mobile-robot&gt;&lt;ros&gt;&lt;slam&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18450" PostTypeId="1" CreationDate="2019-03-20T10:06:42.437" Score="0" ViewCount="179" Body="&lt;p&gt;We have a set of 8 cameras mounted rigidly on a mobile robot. The cameras are forming an arc, which allows a 360º vision.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want the extrinsic parameters of them referred to the robot. Is there any ROS package that allows that? If not, how can I do that?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was thinking of doing some stereo calibrations between the pairs of cameras. Then, refer all the cameras to the same camera system with simple transformations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: Other option is doing something like in &lt;a href=&quot;https://www.researchgate.net/publication/329600906_Charuco_Board-Based_Omnidirectional_Camera_Calibration_Method&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.researchgate.net/publication/329600906_Charuco_Board-Based_Omnidirectional_Camera_Calibration_Method&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this paper they propose a Charuco board-based cube structure to calibrate the camera rig. But the problem is that I must make the cube on my own and can introduce some errors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help?&#xA;Thank you!!&lt;/p&gt;&#xA;" OwnerUserId="22394" LastEditorUserId="22394" LastEditDate="2019-04-08T09:18:43.473" LastActivityDate="2021-05-02T14:33:02.987" Title="Extrinsic calibration of a multicamera-rig mounted rigidly on a mobile robot" Tags="&lt;mobile-robot&gt;&lt;cameras&gt;&lt;calibration&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18451" PostTypeId="1" CreationDate="2019-03-20T13:09:39.823" Score="0" ViewCount="58" Body="&lt;p&gt;We have an iRobot Create connected to a Win 10 PC with the cable supplied with the unit. &#xA;We have followed the instructions here: &#xA;&lt;a href=&quot;http://www.robotappstore.com/Knowledge-Base/How-to-Use-a-RealTerm-Terminal/16.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.robotappstore.com/Knowledge-Base/How-to-Use-a-RealTerm-Terminal/16.html&lt;/a&gt;&#xA;and were unable to get any response except for an occasional single beep when sending a numeric 7 and very rarely when sending 128 132. The remaining examples (and other codes) get no response. The com port the iRobot is connected to is showing VCP, baud rate 115200. (We modified the serial port driver to use the FTDI driver, no impact to the iRobot responsiveness.) - other than that, the real term port configuration is exactly as the example shows&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone provide any insight&lt;/p&gt;&#xA;" OwnerUserId="22590" LastEditorUserId="7665" LastEditDate="2019-03-21T10:37:55.177" LastActivityDate="2019-03-21T10:37:55.177" Title="Can't get iRobot Create to respond" Tags="&lt;mobile-robot&gt;&lt;irobot-create&gt;&lt;serial&gt;&lt;roomba&gt;&lt;communication&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18452" PostTypeId="1" CreationDate="2019-03-20T14:44:19.030" Score="2" ViewCount="242" Body="&lt;p&gt;I'm shopping for batteries and it's easy to find a 48V lithium ion battery that has like 30A max continuous discharge rating. However, I know that the battery supply has a variable voltage from 54V - 42V depending on how much energy has been drained.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm using a 48V to 24V buck converter to power many of my electronics for a stable 24V power supply. However, I still have some 48V motors that takes 10A max for my robotics application. I can't figure out a way to power my 48V motors with a stable power supply.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found a 36V to 48V step up converter but it only outputs 5A.&lt;/p&gt;&#xA;" OwnerUserId="22067" LastActivityDate="2021-02-23T02:06:05.657" Title="How to create a stable 48V 10A power supply?" Tags="&lt;battery&gt;&lt;power&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18453" PostTypeId="2" ParentId="18452" CreationDate="2019-03-20T17:25:04.897" Score="0" Body="&lt;p&gt;Edit: I'm not sure if a 48V - 48V boost converter will work because it won't step down my voltage when the input is over 48V. I will continue looking into this and keep you updated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the looks of things, this a boost Voltage Regulator DC 8-60V to 10-120V 15A Boost Converter might work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found 2 on amazon that seems to fit the bill. I would go for the 96% conversion efficiency one since the other one is 85% efficient. In addition, it seems like I will need to add a fan/heat dissipation solution to the 96% efficient one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(I am no way affiliated with these amazon links, sellers, and links are only provided for convenience for people with the same problem).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;96% efficiency:&#xA;&lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/B01MSYVMAL&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.amazon.com/Aideepen-Converter-Step-up-Supply-Module/dp/B01MSYVMAL/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;85% efficiency:&#xA;&lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/B01GFVI6R6&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.amazon.com/dp/B01GFVI6R6/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="22067" LastEditorUserId="22067" LastEditDate="2019-03-20T17:43:49.553" LastActivityDate="2019-03-20T17:43:49.553" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18454" PostTypeId="1" CreationDate="2019-03-20T17:26:27.697" Score="2" ViewCount="326" Body="&lt;p&gt;I am following this article: &lt;a href=&quot;https://medium.com/unity3danimation/overview-of-jacobian-ik-a33939639ab2&quot; rel=&quot;nofollow noreferrer&quot;&gt;Overview of Jacobian IK&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/FZT0Y.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FZT0Y.png&quot; alt=&quot;Robot arm with angles&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the link, an example says:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;O is a pose vector which represents the initial orientation of every joint&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;And following this, it gives an example of O:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;For example, O would be (45°, 15°, -60°)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Later on it says for the 2D system, the Jacobian can then be constructed as follows:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/qlvQY.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qlvQY.png&quot; alt=&quot;Jacobian construction&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I now have 2 questions if this was transferred to a 3D system:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;How would O be represented?&lt;/li&gt;&#xA;&lt;li&gt;How would the Jacobian be constructed?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="22028" LastActivityDate="2020-08-17T07:47:31.003" Title="3D Inverse Kinematics Jacobian Construction" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;inverse-kinematics&gt;&lt;jacobian&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18455" PostTypeId="1" CreationDate="2019-03-20T20:27:18.690" Score="2" ViewCount="565" Body="&lt;p&gt;I have a simple car robot with four wheels moving relatively slowly (5~10 mph). The robot has a velocity magnitude and yaw rate sensor and the sensor samples about every 0.1 seconds. I want to map the location of the robot in the room in a global coordinates using these two values. What I am doing is robot starts out at location (x=0,y=0). I calculate the location by saying&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;x = velocity*cos(yaw_rate)*sample_interval&#xA;y = velocity*sin(yaw_rate)*sample_interval&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So far with this method, the location calculated is actually fairly good as long as the yaw rate is not so large. But if my understanding is correct, yaw rate is the rate of angle change and not the angle changed and to get a better model and the actual direction the vehicle is facing, I will need to say integrate the yaw rate. I want the angle the robot's face normal vector makes to vertical axis so I can figure out the direction robot is facing or it's pose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now this must be a very well known equation in robotics and mechanical engineering but my back ground is in programming and I have no idea where to start. I tried searching on google but my search words must not be right since I can't find a good page. Can you point me to the right direction, let me know of a starter page that I can look at?&lt;/p&gt;&#xA;" OwnerUserId="22596" LastActivityDate="2021-01-10T21:03:40.340" Title="How do I calculate the direction robot is facing, pose from velocity and yaw rate?" Tags="&lt;slam&gt;&lt;kinematics&gt;&lt;dynamics&gt;&lt;mechanism&gt;&lt;autonomous-car&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18456" PostTypeId="1" CreationDate="2019-03-20T21:10:47.947" Score="1" ViewCount="28" Body="&lt;p&gt;I have a mobile base (1400x1800x400 mm) which has a vertical bar (1) mounted on its geometric center; this vertical bar has a length of 2500 mm and a diameter of 100 mm and I need to keep it always in its vertical position even if the mobile base is not correctly aligned as showed in the attached photo.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Q1XA2.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Q1XA2.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I use an inertial sensor to read the bar position.&#xA;I was thinking to use four electric linear actuators, but this could not be a good idea because they would be hard to control (if they are not perfectly synchronized, they can get stuck or broken very easily).&#xA;What about stepper motors? I would like to implement something like the system used on the 3-axis gimbal. Do you think there is any commercial solution I can use?  &lt;/p&gt;&#xA;" OwnerUserId="10626" LastActivityDate="2019-03-21T07:42:32.183" Title="How to balance a long vertical bar" Tags="&lt;mobile-robot&gt;&lt;gyroscope&gt;&lt;actuator&gt;&lt;balance&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18457" PostTypeId="1" AcceptedAnswerId="18520" CreationDate="2019-03-20T23:15:10.623" Score="3" ViewCount="115" Body="&lt;p&gt;Suppose there is an area to survey. If we deploy one robot it takes time T to sweep the area. Now if we deploy 2 robots, we would expect it to take time T/2. However in reality, because we are sending two robots, we would have to implement additional coordination planning routines and obstacle avoidance routines so that they do not collide with each other. These overhead computational costs add up and we will actually see the area being surveyed in time T/2+X. Now could you suggest papers where they talk about the estimation of X? It does not have to be in the context of area surveying. It can be any other multi-robot task also.&lt;/p&gt;&#xA;" OwnerUserId="14868" LastActivityDate="2019-03-28T18:15:17.687" Title="Interference caused by multiple robots during task completion" Tags="&lt;mobile-robot&gt;&lt;wheeled-robot&gt;&lt;motion-planning&gt;&lt;multi-rotor&gt;&lt;multi-agent&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18458" PostTypeId="2" ParentId="18456" CreationDate="2019-03-21T07:42:32.183" Score="1" Body="&lt;p&gt;I believe your intuition about using push-pull linear actuators is in the right direction: you would have a quite hard time to control such a structure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Traditionally, to deal with a cart-pole system you are supposed to deliver torque to the actuators with a certain level of accuracy. In this respect, BLDC motors are certainly the best way to go, especially over step motors where instead you don't have fine control on the torque.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the contrary, if you're not very interested in precise control of the bar position as well as the smoothness of the resulting movements, then you could consider a design based on step motors.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastActivityDate="2019-03-21T07:42:32.183" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18460" PostTypeId="2" ParentId="18446" CreationDate="2019-03-21T16:20:15.203" Score="1" Body="&lt;p&gt;There are several questions here, so I'll try to address them all. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, using the integrated gyro output. Integrating the gyro output, which provides angular velocity, gives you an orientation estimate. A lot of people that use the term &quot;Euler Angles&quot; generally actually mean &lt;a href=&quot;https://en.wikipedia.org/wiki/Euler_angles#Tait%E2%80%93Bryan_angles&quot; rel=&quot;nofollow noreferrer&quot;&gt;Tait-Bryan angles&lt;/a&gt;. Proper Euler angles only use two axes, like an X-Z-X rotation, where the Tait-Bryan angles use all three axes, like an X-Y-Z rotation. Aviation/navigation angles like Roll-Pitch-Yaw (RPY) are Tait-Bryan angles. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your question is how to convert those angles to a rotation matrix, then the answer is &lt;a href=&quot;https://en.wikipedia.org/wiki/Euler_angles#Rotation_matrix&quot; rel=&quot;nofollow noreferrer&quot;&gt;on the Wikipedia page for the Euler Angles under the &quot;Rotation Matrix&quot; section.&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Step 4 in &lt;a href=&quot;https://robotics.stackexchange.com/a/16772/9720&quot;&gt;my other answer&lt;/a&gt; then uses that rotation matrix to transform the accelerometer outputs. It's done with a matrix multiplication:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\left[\begin{matrix}&#xA;\ddot{x}_w \\&#xA;\ddot{y}_w \\&#xA;\ddot{z}_w \\&#xA;\end{matrix}\right] = \left[R\right] \left[\begin{matrix}&#xA;\ddot{x}_b \\&#xA;\ddot{y}_b \\&#xA;\ddot{z}_b \\&#xA;\end{matrix}\right]&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://eigen.tuxfamily.org/index.php?title=Main_Page&quot; rel=&quot;nofollow noreferrer&quot;&gt;Eigen library&lt;/a&gt; would be a great starting place for getting the tools to easily do matrix math. You could do it all by hand, but you're reinventing the wheel and liable to make some math error that's going to cost you a lot of time. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The big alternative here is, as I mention in the other answer and you mention here, the &lt;a href=&quot;http://x-io.co.uk/open-source-imu-and-ahrs-algorithms/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Madgwick filter!&lt;/a&gt;. The &lt;a href=&quot;http://www.x-io.co.uk/res/sw/madgwick_algorithm_c.zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;C implementation available there&lt;/a&gt; (warning: direct download) has orientation in quaternion form, with &lt;code&gt;q0&lt;/code&gt;, &lt;code&gt;q1&lt;/code&gt;, &lt;code&gt;q2&lt;/code&gt;, and &lt;code&gt;q3&lt;/code&gt; as global, and then there are two functions. The first is &lt;code&gt;MadgwcikAHRSupdate&lt;/code&gt;, which uses gyro inputs (&lt;code&gt;gx&lt;/code&gt;, &lt;code&gt;gy&lt;/code&gt;, &lt;code&gt;gz&lt;/code&gt;), accelerometer inputs (&lt;code&gt;ax&lt;/code&gt;, &lt;code&gt;ay&lt;/code&gt;, &lt;code&gt;az&lt;/code&gt;), and magnetometer inputs (&lt;code&gt;mx&lt;/code&gt;, &lt;code&gt;my&lt;/code&gt;, &lt;code&gt;mz&lt;/code&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you don't have a magnetometer, use the second function, &lt;code&gt;MadgwickAHRSupdateIMU&lt;/code&gt;. It only uses gyro and accelerometer outputs. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Be sure to update the sample frequency; the default is 512 Hz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Madgwick filter will do a better job of estimating orientation than just integration of the gyro output because the Madgwick filter uses the gravity vector from the accelerometer readings to eliminate orientation drift.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you have the output of the Madgwick filter, which again is the orientation in quaternion, you again convert that to a rotation matrix, transform your accelerometer readings, and then double integrate to get position. The conversion from quaternion to rotation matrix is &lt;a href=&quot;https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation#Quaternion-derived_rotation_matrix&quot; rel=&quot;nofollow noreferrer&quot;&gt;also on Wikipedia.&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Give these a shot and let us know how it goes! Best of luck!&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2019-03-21T16:20:15.203" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="18461" PostTypeId="1" CreationDate="2019-03-21T16:35:37.463" Score="0" ViewCount="49" Body="&lt;p&gt;A 12V windshield wiper motor to run at 24V for more speed but near-equal driving force. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Testing with a variable DC supply between 21.6V &amp;amp; 26.4V showed the current maxes at 3.72 - 3.90A, as opposed to 3.28A with 12V. It did heat up around 24V but only really hot (enough to drop) at 26.4V.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Two of these in the back for drive but speed at 12V isn't enough, how can it run at higher &amp;amp; faster for longer. (Changing the motors isn't really an option.)&lt;/p&gt;&#xA;" OwnerUserId="22384" LastActivityDate="2019-08-19T16:02:15.527" Title="How can a motor be run at higher voltage for longer?" Tags="&lt;motor&gt;&lt;torque&gt;&lt;current&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18462" PostTypeId="1" CreationDate="2019-03-21T18:09:24.190" Score="-1" ViewCount="56" Body="&lt;p&gt;I wanted to use the NEMA 17 stepper to drive a blade/flapper that I have custom made for some physical application.As soon as I tighten the screw,the motor stops rotation in the usual way. Don't have any idea the reason for this.&#xA;Note: &#xA;1.The blade/flapper is not too heavy and the torque rating of the Motor is sufficient.&#xA;2. Doesn't spin even if I help with hand&#xA;3.It does a very slight movement almost at the same place.&#xA;4. Problem occurs as soon as I turn the screw to fix the blade on the shaft.&#xA;5. I've tried with using glue into the joint,the problem seems to be lessened but still present,also using the glue method wouldn't be suitable for my function as I need more rigid join.&lt;/p&gt;&#xA;" OwnerUserId="22602" LastEditorUserId="22602" LastEditDate="2019-03-21T18:42:31.550" LastActivityDate="2019-03-26T19:25:28.933" Title="Why my stepper motor doesn't move when I attach a blade?" Tags="&lt;robotic-arm&gt;&lt;motor&gt;&lt;wheeled-robot&gt;&lt;stepper-motor&gt;&lt;electronics&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18463" PostTypeId="1" CreationDate="2019-03-22T01:01:02.283" Score="1" ViewCount="613" Body="&lt;p&gt;Currently, I am trying to navigate a small robot car to point A from my current position. The car has a GPS sensor and a BNO055 IMU(Gyro + Mag + Acc). I know the GPS co-ordinates of point A. Using the GPS co-ordinates of my car, I can calculate the bearing angle and the distance. From the fusion mode in the BNO055, I get the tilt compensated heading again(It gives me heading, roll &amp;amp; pitch). Based on the heading angle and the bearing angle, my car makes its turns. However, here is what I want to build on this:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The GPS readings sometimes are a bit far from my actual position. How to get rid of these outliers? I've read of the use of EKF. But they seem to be all mathematical formulas and it's tough to keep up with them!&lt;/li&gt;&#xA;&lt;li&gt;For when the GPS signal is lost, I've read about Dead Reckoning methods being used. I'm not sure how to implement those. Can someone shed some light on that?&lt;/li&gt;&#xA;&lt;li&gt;Can I calculate the speed with just the GPS and an IMU?&#xA;Any help is appreciated, thanks!&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="22493" LastEditorUserId="22493" LastEditDate="2019-03-22T01:20:15.330" LastActivityDate="2021-04-25T17:51:43.933" Title="Navigation - GPS + IMU; how to make it more accurate?" Tags="&lt;kalman-filter&gt;&lt;imu&gt;&lt;gps&gt;&lt;dead-reckoning&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18464" PostTypeId="2" ParentId="18463" CreationDate="2019-03-22T11:00:30.370" Score="2" Body="&lt;p&gt;The simplest answer to all those questions, is to use an EKF. But since you are not familiar with the mathematical formulas of EKF here are some possible methods which might be useful for your problems. Here I'm trying to explain some steps of the EKF in a simple manner.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's start with your second question. Dead Reckoning method can be used to estimate the current position using raw odometry data such as wheel encoder readings. Assume that you know the current heading and the velocity of the robot at time &lt;strong&gt;t&lt;/strong&gt;. Then you can calculate it's position in the next second (&lt;strong&gt;t+1&lt;/strong&gt;) assuming that velocity is constant. But the calculated position may differs from the actual position due to various reasons such as drifts, velocity changes etc. This is what basically happens in dead reckoning. You can use the linear acceleration values from IMU to calculate the X and Y coordinates of the robot, using &lt;strong&gt;S = ut + 0.5at^2&lt;/strong&gt;. But the problem in this method is, the error accumulates with the time. In that case we fuse GPS readings with IMU readings using an EKF.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the third question, you can calculate the speed only with the IMU readings. First calculate the linear acceleration values in world coordinate frame, then use &lt;strong&gt;v = u +at&lt;/strong&gt; to calculate the current velocity. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;v - current velocity  u - starting velocity  a - acceleration   t- time&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this equation we assume that the acceleration is constant during the time step &lt;strong&gt;t&lt;/strong&gt;. Therefore use a value for the time step as small as possible (around 0.01). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the first question, I can suggest this method. usually GPS readings has a variance about 3.5m. You can measure the difference between two consecutive readings and if the difference is higher than a threshold (let's say 5m) that reading should be ignored. Until you receive a good measurement you can estimate your position with dead reckoning. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I strongly recommend you to use EKF since it provides the best solution for all these questions. No need to understand what is happening inside. MATLAB has an inbuilt function for EKF.   &lt;/p&gt;&#xA;" OwnerUserId="21353" LastActivityDate="2019-03-22T11:00:30.370" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18465" PostTypeId="2" ParentId="18455" CreationDate="2019-03-22T13:01:51.943" Score="0" Body="&lt;p&gt;First of all, two equations you have mentioned above is completely wrong. If we consider the units, velocity - m/s, yaw rate -rad/s, time - s and after multiplying an additional 1/s is remaining. Maybe you are getting the yaw, instead of yaw rate. So its better to clearly mention what types of sensors you are using.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For these kind of position estimation, we usually use Extended Kalman Filter to fuse the measurements of several sensors. I recommend you to understand what is happening inside an EKF. There are plenty of online articles and youtube videos available. Further MATLAB has an inbuilt function for this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After understanding concepts behind the EKF, you can identify two major steps are carried out when fusing measurements ; prediction step and update step. But since you dont have an absolute positioning system you can use only the prediction step. This is also known as dead reckoning. The main disadvantage of this method is that the error of the position estimation accumulates with the time.&lt;/p&gt;&#xA;" OwnerUserId="21353" LastActivityDate="2019-03-22T13:01:51.943" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18466" PostTypeId="2" ParentId="18461" CreationDate="2019-03-22T13:12:59.770" Score="1" Body="&lt;p&gt;Running a motor with a higher voltage might reduces its lifetime. However there are some cases where we want to run motors above the rated voltage. According to the equation &lt;strong&gt;V = IR&lt;/strong&gt;, current increases with the voltage since the resistance is contant in a motor. But when it is getting heated, the resistance gets low and the current increases. This process will continue and burn up the motor. Here are some sugggestions to overcome these problems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Remove the heat of the motor using a cooling system ( Heat sink with a fan, covering with low density oil).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Use a current limiting circuit to avoid drawing more current when heating up.&lt;/p&gt;&#xA;" OwnerUserId="21353" LastActivityDate="2019-03-22T13:12:59.770" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18467" PostTypeId="1" AcceptedAnswerId="18552" CreationDate="2019-03-22T13:43:38.690" Score="5" ViewCount="174" Body="&lt;p&gt;I'm new at ROS and I'm trying to figure out how does the node works with a pyton/C++ code. I have two codes for the same situation: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Use a Xbox Controller to move the turtle in turtlesim&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;FIRST - Using class python and a while as a main:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#!/usr/bin/env python&#xA;import rospy&#xA;from geometry_msgs.msg import Twist&#xA;from sensor_msgs.msg import Joy&#xA;&#xA;# DEFINING CLASS&#xA;class pubSub:&#xA;    def __init__(self):&#xA;        # DEFINE VARIABLE TO KEEP LAST VALUE&#xA;        rospy.init_node('c2t')&#xA;        self.twt = Twist()&#xA;        self.hold = Twist()&#xA;&#xA;    def callback_function(self,joyData):&#xA;        self.twt.linear.x = 4*joyData.axes[1]&#xA;        self.twt.angular.z = 4*joyData.axes[0]&#xA;        self.hold = self.twt&#xA;&#xA;    def assuming_cont(self):&#xA;        pub = rospy.Publisher('turtle1/cmd_vel', Twist, queue_size=10)&#xA;        rospy.Subscriber(&quot;joy&quot;, Joy, self.callback_function, queue_size=10)&#xA;        pub.publish(self.twt)&#xA;&#xA;ps = pubSub()&#xA;while not rospy.is_shutdown():&#xA;    ps.assuming_cont()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;SECOND - Using global variables and a &lt;code&gt;if __name__  == '__main__'&lt;/code&gt; with &lt;code&gt;rospy.spin()&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#!/usr/bin/env python&#xA;import rospy&#xA;from geometry_msgs.msg import Twist &#xA;from sensor_msgs.msg import Joy &#xA;&#xA;# FUNCTION - GET JOY VALUES TRANSFORM TO TURTLE MOVE&#xA;def joy_to_twist_transform(jData):&#xA;    twt = Twist()&#xA;    twt.linear.x = 5*jData.axes[1]&#xA;    twt.angular.z = 4*jData.axes[0]&#xA;    pub.publish(twt)&#xA;&#xA;# FUNCTION - START PROCESS&#xA;def process():&#xA;    global pub&#xA;    pub = rospy.Publisher('turtle1/cmd_vel', Twist, queue_size=10)&#xA;    sub = rospy.Subscriber(&quot;joy&quot;, Joy, joy_to_twist_transform, queue_size=1)&#xA;    rospy.init_node('control_2turtle')&#xA;    rospy.spin()&#xA;&#xA;# MAIN&#xA;if __name__  == '__main__':&#xA;    try:&#xA;        process()&#xA;    except rospy.ROSInterruptException:&#xA;        pass&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;My questions are more theoretical:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1 - What I understand about how a node works is: he run the code in a loop until is shutdown. But this does not answer Why can I still save the last value published in a topic (in my head, if I run my code in a loop I start from the beginning everytime)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2 - Why is necessary to keep creating a &lt;code&gt;rospy.Publisher&lt;/code&gt; and &lt;code&gt;rospy.Subscriber&lt;/code&gt; in every loop? it is possible to create those guy one time only?(for example using them into &lt;strong&gt;init&lt;/strong&gt; function in the seconde example)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3 - What is the difference between&lt;code&gt;while not rospy.is_shutdown():&lt;/code&gt; and &lt;code&gt;if __name__  == '__main__'&lt;/code&gt; with &lt;code&gt;rospy.spin()&lt;/code&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;4 - What is &lt;code&gt;rospy.spin()&lt;/code&gt;? in any documentation says that keeps your node running, but the way I see he stuck the code in that line and keep there only.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If any could give any recommendation to read about those problems I would thanks a lot.&lt;/p&gt;&#xA;" OwnerUserId="22609" LastActivityDate="2019-04-03T07:18:37.910" Title="ROS Theoretical Question - How does work properly a node" Tags="&lt;ros&gt;&lt;python&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18468" PostTypeId="2" ParentId="18452" CreationDate="2019-03-22T15:08:42.327" Score="0" Body="&lt;p&gt;Usually, motors in robots are speed controlled, for example using PWM. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Design your system so it meets the spec at the speed you get when the motors are running at 42V.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the supply above 42V, your motor speed feedback reduces the PWM duty cycle and the motor speed is maintained.&lt;/p&gt;&#xA;" OwnerUserId="1321" LastActivityDate="2019-03-22T15:08:42.327" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="18473" PostTypeId="2" ParentId="18426" CreationDate="2019-03-22T19:47:21.993" Score="0" Body="&lt;p&gt;The landmarks chosen for a given location should include many that only infrequently change - for example, features of buildings, such as architectural motifs, corners of the structure, utility installations etc.&#xA;Parked cars would make for poor landmarks precisely because of their transience.&lt;/p&gt;&#xA;" OwnerUserId="16622" LastActivityDate="2019-03-22T19:47:21.993" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18474" PostTypeId="2" ParentId="13903" CreationDate="2019-03-22T19:53:19.583" Score="1" Body="&lt;p&gt;Yes.  Geometrically computing the static joint-space coordinates in terms of Cartesian coordinates (for example), it is irrelevant if a joint is active or passive.  For non-serial chains, some coordinates may be expressible in terms of others, so may be omitted from the IK calculation and computed by substitution afterward.&lt;/p&gt;&#xA;" OwnerUserId="16622" LastActivityDate="2019-03-22T19:53:19.583" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18475" PostTypeId="2" ParentId="18467" CreationDate="2019-03-22T22:00:56.443" Score="2" Body="&lt;p&gt;&lt;code&gt;if __name__  == '__main__':&lt;/code&gt; doesn't matter at here (in the second code), also you could run your code without it like here: &lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Second code:&lt;/h1&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;.&#xA;.&#xA;.&#xA;# MAIN&#xA;try:&#xA;    process()&#xA;except rospy.ROSInterruptException:&#xA;    pass&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;i.e. when you don't want your code to run when it imported in another python code, you should use &lt;code&gt;if __name__  == '__main__':&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/questions/419163/what-does-if-name-main-do&quot;&gt;More information.&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The main difference between First code and Second code is that the Second code used the &lt;code&gt;rospy.spin()&lt;/code&gt; method which is a built-in ROS loop that triggers the &lt;code&gt;publisher&lt;/code&gt; and &lt;code&gt;subscriber&lt;/code&gt; in another thread, so you wouldn't need to an inner &lt;code&gt;while&lt;/code&gt; in your code like the First example.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://answers.ros.org/question/252545/interrupting-rospyspin-or-writing-a-custom-loop-that-does-the-equivalent/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Relevant Question.&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18870" LastEditorUserId="18870" LastEditDate="2019-04-03T07:18:37.910" LastActivityDate="2019-04-03T07:18:37.910" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18476" PostTypeId="1" CreationDate="2019-03-23T00:28:28.050" Score="3" ViewCount="1050" Body="&lt;p&gt;I have a robot with 6 DOF that I want to use to grab a hanging sheet at a specific point near its edge. The grip needs to be perpendicular to the edge and co-planar with the point of course.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have the inverse kinematics and I have the XYZ-coordinate that I want to grab, however, I'm struggling a bit with finding the correct RPY needed to approach the point correctly. I have looked at the post &lt;a href=&quot;https://se.mathworks.com/matlabcentral/answers/298940-how-to-calculate-roll-pitch-and-yaw-from-xyz-coordinates-of-3-planar-points&quot; rel=&quot;nofollow noreferrer&quot;&gt;How to calculate roll, pitch and yaw from XYZ coordinates of 3 planar points?&lt;/a&gt; on Mathwork Matlab Answers, which helped me find the normal to the plane, but there's something I'm not doing or understanding correctly in regards to the calculation of the RPY. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's a sketch of the problem:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/mPJmJ.jpg&quot; alt=&quot;Sketch of the problem&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P2 is the point I want to grab and the arrow illustrates the angle of approach I want to achieve. I know the angle (theta), but none of my robot's axes align with this axis of rotation so I can't simply add this. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/dVQhA.jpg&quot; alt=&quot;sketch 2&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried to follow the instructions in the MathWorks post above, ending up with a sketch of the sheet's coordinate frame looking like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/iviOF.jpg&quot; alt=&quot;coordinate frame&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Z points into the plane). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next I calculate the alpha, beta and gamma values like suggested in the post. But what do I do with these? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I plug the results into my robot the TCP's angle is not even coplanar. I know I haven't taken the theta angle from the sketch into account yet, but I don't want to consider that until I see the TCP is coplanar with the sheet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone give me a clue on what I'm doing wrong or if I'm missing some steps? Maybe there's even a better way of achieving what I want than what I tried here? And let me know if I need to clarify anything - this is my first post here, so please be gentle. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Here's the code I have written to do the calculations. &lt;code&gt;p1t&lt;/code&gt;, &lt;code&gt;p2t&lt;/code&gt; and &lt;code&gt;p3t&lt;/code&gt; are the three homogeneous coordinates P1, P2, and P3 respectively in the robot's frame (what I call the global frame):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;// Transform coordinates from cam to robot&#xA;Eigen::Vector4f p1t = H * p1;&#xA;Eigen::Vector4f p2t = H * p2;&#xA;Eigen::Vector4f p3t = H * p3;&#xA;&#xA;Eigen::Vector3f p1t3D, p2t3D, p3t3D;&#xA;p1t3D &amp;lt;&amp;lt; p1t(0), p1t(1), p1t(2); &#xA;p2t3D &amp;lt;&amp;lt; p2t(0), p2t(1), p2t(2);&#xA;p3t3D &amp;lt;&amp;lt; p3t(0), p3t(1), p3t(2);&#xA;&#xA;Eigen::Vector3f v1, v2;&#xA;v1 = p2t3D - p1t3D;&#xA;v2 = p3t3D - p1t3D;&#xA;&#xA;Eigen::Vector3f xUnitVec = ((p1t3D + p2t3D)/2) - p3t3D;&#xA;xUnitVec.normalize();&#xA;&#xA;Eigen::Vector3f zUnitVec = v1.cross(v2);&#xA;zUnitVec.normalize();&#xA;&#xA;Eigen::Vector3f yUnitVec = zUnitVec.cross(xUnitVec);&#xA;&#xA;std::cout &amp;lt;&amp;lt; &quot;p2t: \n&quot; &amp;lt;&amp;lt; p2t &amp;lt;&amp;lt; std::endl;&#xA;&#xA;float x1 = xUnitVec(0);&#xA;float y1 = yUnitVec(0);&#xA;float z1 = zUnitVec(0);&#xA;float z2 = zUnitVec(1);&#xA;float z3 = zUnitVec(2);&#xA;&#xA;float alpha = atan2(-z2, z3);&#xA;float beta = asin(z1);&#xA;float gamma = atan2(-y1, x1);&#xA;&#xA;std::cout &amp;lt;&amp;lt; &quot;\nRotations: &quot; &amp;lt;&amp;lt; std::endl;&#xA;std::cout &amp;lt;&amp;lt; &quot;Alpha: &quot; &amp;lt;&amp;lt; alpha;&#xA;std::cout &amp;lt;&amp;lt; &quot;, Beta: &quot; &amp;lt;&amp;lt; beta;&#xA;std::cout &amp;lt;&amp;lt; &quot;, Gamma: &quot; &amp;lt;&amp;lt; gamma;&#xA;&#xA;pickPoint.clear();&#xA;pickPoint = {p2t(0), p2t(1), p2t(2), alpha, beta, gamma};&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="22593" LastEditorUserId="22593" LastEditDate="2019-03-27T21:28:59.870" LastActivityDate="2021-04-23T04:07:56.140" Title="Finding correct RPY for approaching a known point on a plane" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;rotation&gt;" AnswerCount="2" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="18477" PostTypeId="1" CreationDate="2019-03-23T03:02:51.057" Score="1" ViewCount="44" Body="&lt;p&gt;So I did the algorithm for the vehicle to go in a clockwise direction(Refer to my pseudocodes below). But now that my school had said there will be an anti-clockwise direction as well, I'm not sure what to do. Do I only reverse the logic of my pseudocode below? Do I use switch cases as well? I'm not sure. So the vehicle must be able to move both clockwise and anti-clockwise around the 'maze'&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/47Oxf.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/47Oxf.png&quot; alt=&quot;Maze project&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/* Check if the left sensor is blocked*/&#xA;if(left sensor ==true )&#xA;{&#xA;    if(Obstacle detected)&#xA;    {&#xA;        move_forward;&#xA;    }&#xA;}&#xA;/* Check if the back-left sensor is blocked*/&#xA;if(back-left sensor ==true)&#xA;{&#xA;    if(Obstacle detected)&#xA;    {&#xA;        move_diagonal_front_left;&#xA;    }&#xA;}&#xA;&#xA;/* Check if the front-left sensor is blocked*/&#xA;if(front-left sensor== true )&#xA;{&#xA;    if(Obstacle detected)&#xA;    {&#xA;        move_diagonal_front_right;&#xA;    }&#xA;&#xA;}&#xA;&#xA;/* Check if the front sensor is blocked*/&#xA;if(front sensor== true )&#xA;{&#xA;    if(Obstacle detected)&#xA;    {&#xA;        move_right;&#xA;    }&#xA;&#xA;}&#xA;&#xA;/* Check if the front-right sensor is blocked*/&#xA;if(front-right sensor== true )&#xA;{&#xA;    if(Obstacle detected)&#xA;    {&#xA;        move_diagonal_back_right;&#xA;    }&#xA;&#xA;}&#xA;&#xA;/* Check if the right sensor is blocked*/&#xA;if(right sensor== true )&#xA;{&#xA;    if(Obstacle detected)&#xA;    {&#xA;        move_back;&#xA;    }&#xA;}&#xA;&#xA;/* Check if the back-right sensor is blocked*/&#xA;if(back-right sensor== true )&#xA;{&#xA;    if(Obstacle detected)&#xA;    {&#xA;        move_diagonal_back_left;&#xA;    }&#xA;    else if(Obstacle cleared)&#xA;    {&#xA;        Move_backwards;&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="22613" LastActivityDate="2019-03-23T03:02:51.057" Title="Maze wall hugging both clockwise and anti-clockwise" Tags="&lt;line-following&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18483" PostTypeId="1" AcceptedAnswerId="18486" CreationDate="2019-03-23T17:18:06.543" Score="-1" ViewCount="78" Body="&lt;p&gt;I want to learn how to program the drone in C without using the available libraries and platforms. I want to be able to understand how everything is set at a fundamental level(SRAM). Also, I want to learn to implement complex algorithms, such as computer vision, in combination with drones. &#xA;How should I learn that?&lt;/p&gt;&#xA;" OwnerUserId="22611" LastActivityDate="2019-03-23T22:02:11.840" Title="What the best roadmap to learn building and programming drones in the deepest level?" Tags="&lt;quadcopter&gt;&lt;microcontroller&gt;&lt;programming-languages&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2019-03-25T17:55:51.640" ContentLicense="CC BY-SA 4.0" />
  <row Id="18485" PostTypeId="2" ParentId="17947" CreationDate="2019-03-23T19:59:36.840" Score="1" Body="&lt;p&gt;The &lt;a href=&quot;https://github.com/ilpincy/argos3&quot; rel=&quot;nofollow noreferrer&quot;&gt;ARGoS&lt;/a&gt; simulator specifically targets swarm robotics development. There is also a really awesome swarm robotics programming language, &lt;a href=&quot;https://github.com/MISTLab/Buzz&quot; rel=&quot;nofollow noreferrer&quot;&gt;Buzz&lt;/a&gt;, that plugs into ARGoS. There is even a ROSBuzz version. Lastly, I recently discovered this fantastic repo named &lt;a href=&quot;https://github.com/TensorSwarm/TensorSwarm&quot; rel=&quot;nofollow noreferrer&quot;&gt;TensorSwarm&lt;/a&gt; for reinforcement learning of robot swarms that plugs into ARGoS. &lt;/p&gt;&#xA;" OwnerUserId="22620" LastActivityDate="2019-03-23T19:59:36.840" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18486" PostTypeId="2" ParentId="18483" CreationDate="2019-03-23T22:02:11.840" Score="0" Body="&lt;p&gt;Programming a drone consists of two levels. The first one is to create a remote control software. This task is done with microcontrollers and embedded system programming. The idea is, that the operator has a joystick, moves the joystick forward and the drone will react to the action. The first level is easy to master, and there are lot of tutorials available which can explain the details. In most cases, the microcontroller runs a realtime operating system and the drone controller sits on top, very similar to a firmware like the LeJOS operating system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second level in drone programming is way more complicated. Here is the idea not only to provide a remote control system but an artificial intelligence system. This kind of programming task has nothing to do with classical embedded system programming nor C programming at all. Instead, the task of creating an AI system is located in the domain of Academia / Matlab and deeplearning projects. It has to do with reading papers about pathplanning, implementing algorithms in software and thinking about reinforcement learning. Mastering the second level of drone programming is much harder and not real tutorials are available in the Internet.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2019-03-23T22:02:11.840" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18487" PostTypeId="1" CreationDate="2019-03-24T15:52:16.653" Score="3" ViewCount="97" Body="&lt;p&gt;Anyone know of a good (and economical) way to make a motor controlled arm become a passive link on trigger? That is, the joint can be active (motor controlled) or passive (rotate freely). The tip of the arm weights 3kg and the length is 15cm. There's a 5kg load as well. I suppose the motor and gearbox will need to provide around at least 25Nm torque. A gearbox with that much torque would be very difficult to back drive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I guess one way could be to use an electric clutch, but electric clutches are expensive and I don't think I have enough battery capacity to power the electromagnets. Another way I've thought of is to use planetary gears by braking the ring gear with a servo-controlled ratchet to make the link active. But planetary gears are hard and expensive to make as well. Anyone know of any alternative?&lt;/p&gt;&#xA;" OwnerUserId="11489" LastEditorUserId="11489" LastEditDate="2019-03-24T15:58:30.457" LastActivityDate="2019-07-18T08:45:24.740" Title="Making a motor controlled joint passive" Tags="&lt;motor&gt;&lt;joint&gt;&lt;robotic-arm&gt;&lt;gearing&gt;" AnswerCount="2" CommentCount="6" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18488" PostTypeId="1" AcceptedAnswerId="18540" CreationDate="2019-03-24T17:33:53.913" Score="2" ViewCount="45" Body="&lt;p&gt;I'm trying to find a 1:1000 gearbox for NEMA 17, but the highest (affordable) one I've found is 1:100. Is it a good idea to drive a 1:100 planetary gearbox with a 1:10 planetary box? Is it common to drive a gearbox with another? Are there issues in this setup?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this an example of a gearbox 'series'?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Iiybr.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Iiybr.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11392" LastEditorUserId="11392" LastEditDate="2019-03-24T18:45:34.307" LastActivityDate="2019-03-31T13:38:38.963" Title="Driving a gearbox with another?" Tags="&lt;stepper-motor&gt;&lt;gearing&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18489" PostTypeId="1" AcceptedAnswerId="19352" CreationDate="2019-03-24T18:20:00.290" Score="2" ViewCount="327" Body="&lt;p&gt;I'm studying the kinematic model of a car with a single trailer. This picture shows the system:&#xA;&lt;img src=&quot;https://i.stack.imgur.com/Jveu4.png&quot; width=&quot;400&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I started from the following statements:&#xA;&lt;br&gt;&lt;img src=&quot;https://i.stack.imgur.com/sIbbO.png&quot; width=&quot;200&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With these constraints, I got the Pfaffian form:&#xA;&lt;img src=&quot;https://i.stack.imgur.com/DUQiI.png&quot; width=&quot;670&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And then the kinematic model:&#xA;&lt;br&gt;&lt;img src=&quot;https://i.stack.imgur.com/WDrvB.png&quot; width=&quot;320&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope the calculations are good. Now I should use the Lie brackets to verify the system controllability, by checking the accessibility first. To do this, I need to write the system in the following form:&#xA;&lt;br&gt;&lt;img src=&quot;https://i.stack.imgur.com/bhmTX.png&quot; width=&quot;150&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The question is: how do I do it? Is &lt;em&gt;g&lt;/em&gt; the two column matrix showed in the model above? In this case, should &lt;em&gt;f&lt;/em&gt; be a null vector/matrix? I think this should make sense, but - assuming it's all right - I wouldn't know how to proceed with the Lie brackets, because the iteration I studied leads to the calculation of this sequence: &lt;em&gt;g&lt;/em&gt;, &lt;em&gt;[f,g]&lt;/em&gt;, &lt;em&gt;[f,[f,g]]&lt;/em&gt;, &lt;em&gt;[f,[f,[f,g]]]&lt;/em&gt; and so on. Does it make sense with a null vector as &lt;em&gt;f&lt;/em&gt;?&#xA;In short, the doubt is about how to choose the inputs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe it's a stupid question, but I didn't really understand the topic and I don't manage to get any concrete results.&lt;/p&gt;&#xA;" OwnerUserId="22625" LastEditorUserId="22625" LastEditDate="2019-03-26T22:36:16.227" LastActivityDate="2019-08-24T20:43:06.183" Title="Controllability of a car with a single trailer" Tags="&lt;kinematics&gt;&lt;wheeled-robot&gt;&lt;identification&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18492" PostTypeId="2" ParentId="18426" CreationDate="2019-03-25T04:23:38.720" Score="0" Body="&lt;p&gt;In addition to the DavidJ's comment, there is a technique called feature based odometer. Even the objects in the environment are not in the prior map, the robot use them to correct it's pose estimation. Scan matching is one of the methods use for this. When it sees a new landmark, move few steps further and if it's still able to see that landmark, it will match the current laser scan with a previous scan to calculate the pose error.&lt;/p&gt;&#xA;" OwnerUserId="21353" LastActivityDate="2019-03-25T04:23:38.720" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18493" PostTypeId="1" CreationDate="2019-03-25T05:28:34.303" Score="0" ViewCount="142" Body="&lt;p&gt;Before I begin, I should add that I am a complete beginner in robotics and hope that I can figure out where I should start by asking this question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am trying to make a robot that is able to navigate both indoor and outdoor. The ultimate aim of the robot is to be able to navigate from the outdoors to the lobby of a building and then to the building's lift.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I intend to direct the robot to the building by giving it GPS location when it is outdoors. Then, it should use computer vision to identify the path to the lift lobby. Once indoors, a floor plan of the building's lobby area will be provided to the robot with the location of the lift marked as the final destination but it will still need to map the indoor area to get to the location of the lift.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I figured that I will be using the following key technologies but I am not sure:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Visual Slam: I came across the &lt;a href=&quot;https://www.dragonflycv.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Accuware Dragonfly&lt;/a&gt; which is a visual SLAM technology that uses only an onboard camera. I intend to write a similar software on my own&lt;/li&gt;&#xA;&lt;li&gt;ROS: Middleware between the Visual Slam and the Robot hardware&lt;/li&gt;&#xA;&lt;li&gt;Raspberry Pi&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Am I thinking about this the right way or is there a better way to do things?&lt;/p&gt;&#xA;" OwnerUserId="22628" LastEditorUserId="2289" LastEditDate="2019-03-25T18:00:25.217" LastActivityDate="2020-05-02T07:02:25.350" Title="Technologies needed for indoor and outdoor navigating robot" Tags="&lt;ros&gt;&lt;slam&gt;&lt;raspberry-pi&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18494" PostTypeId="1" CreationDate="2019-03-25T06:39:55.353" Score="2" ViewCount="123" Body="&lt;p&gt;I have a question that lays on practical experience. What is the best adaptive controller for a robotic arm?&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Self Tuning Regulator (STR)&lt;/li&gt;&#xA;&lt;li&gt;Model Reference Adaptive Controller (MARC)&lt;/li&gt;&#xA;&lt;li&gt;Adaptive Model Predictive Control  (AMPC)&lt;/li&gt;&#xA;&lt;li&gt;Iterative Learning Control  (ILC)&lt;/li&gt;&#xA;&lt;li&gt;Gain Scheduling  (GS)&lt;/li&gt;&#xA;&lt;li&gt;Auto-tuned PID (ATPID)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Notice that robotic arms are mechanical systems so the controller need to be fit into a microcontroller, e.g real time system due to the speed and robustness.&lt;/p&gt;&#xA;" OwnerUserId="17252" LastActivityDate="2019-03-26T13:57:52.440" Title="What is the best adaptive controller for robotic arms?" Tags="&lt;mobile-robot&gt;&lt;robotic-arm&gt;&lt;pid&gt;&lt;real-time&gt;&lt;embedded-systems&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18495" PostTypeId="1" AcceptedAnswerId="18502" CreationDate="2019-03-25T07:39:42.780" Score="1" ViewCount="108" Body="&lt;p&gt;I wonder how the shells of robotic arms are usually made. By the shell, I mean this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/kHXhz.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kHXhz.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/48tpf.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/48tpf.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is taken from the project &lt;a href=&quot;https://youtu.be/t2eO4CD-0WY&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;, which is a University project. If the shells were injection moulded, how would a university project have sufficient funding for the moulds? Even if the work was contracted to prototyping companies, it'd cost a few thousand of dollars for just one part. If not injection moulding, how are the shells made?&lt;/p&gt;&#xA;" OwnerUserId="11489" LastEditorUserId="11489" LastEditDate="2019-03-25T08:20:47.177" LastActivityDate="2019-03-26T12:40:56.713" Title="How are shells for robotic arms made?" Tags="&lt;robotic-arm&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18497" PostTypeId="1" CreationDate="2019-03-25T14:56:53.847" Score="1" ViewCount="63" Body="&lt;p&gt;I am currently working with the Rutgers APC 2015 data set for pose estimation, and see that the pose estimates, specifically the rotation estimates, have seemingly been rescaled to range between -1 and 1. Does anyone know if these values were arrived at by dividing by 180? &lt;/p&gt;&#xA;" OwnerUserId="22631" LastActivityDate="2020-05-19T11:02:30.150" Title="For pose estimation, what is the typical range of the rotation values that are estimated? Is it from -180 to 180 degrees?" Tags="&lt;computer-vision&gt;&lt;pose&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18498" PostTypeId="2" ParentId="18495" CreationDate="2019-03-25T15:16:12.283" Score="0" Body="&lt;p&gt;In the case of Yaskawa Motoman, Rethink Robotics, Kuka, Fanuc or ABB the shells are cast (aluminium in most cases). Older (Kuka) industrial robots have a welded steel structure casing, but you rarely see operational ones with welded steel structure.&lt;/p&gt;&#xA;" OwnerUserId="16622" LastEditorUserId="10748" LastEditDate="2019-03-26T12:40:56.713" LastActivityDate="2019-03-26T12:40:56.713" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18499" PostTypeId="2" ParentId="10680" CreationDate="2019-03-25T15:59:01.703" Score="1" Body="&lt;p&gt;It is also worth thinking about why you want to minimize backlash.  Is it something intrinsic to the task your arm needs to perform?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Industrial robots use these drives to minimize backlash typically not because of any such intrinsic need, but because the control systems (software) were designed decades ago and at its core uses mathematics that assumes links are rigid and actuators can control angles independently of the overall configuration of the arm (Newtonian Rigid Body Dynamics, essentially).  Neither of these are true in the real-world, but rather than reformulating the core assumptions for the control, this is handled via specialized methods and additional modelling in conjunction with making the mechanical structure fit the assumption as closely as possible (- which unfortunately leads to engineering of stronger &amp;amp; heavier links, needing larger motors, which are heavier etc).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe for your application, compliant joints and links with some non-rigidity and some amount of back-lash can be handled in the control and still attain your required precision and repeatability.&lt;/p&gt;&#xA;" OwnerUserId="16622" LastActivityDate="2019-03-25T15:59:01.703" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18501" PostTypeId="2" ParentId="18454" CreationDate="2019-03-25T22:08:34.587" Score="0" Body="&lt;p&gt;An alternative way to compute the Jacobian is to represent the kinematic chain transformation symbolically and symbolically differentiate it.  Then you can evaluate the expression for it at any point analytically.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example (if you know C++) see the use of this technique in the implementation of the &lt;a href=&quot;https://github.com/davidljung/opensim/blob/master/opensim/base/Expression&quot; rel=&quot;nofollow noreferrer&quot;&gt;Expression::differentiate()&lt;/a&gt; function of &lt;a href=&quot;https://github.com/davidljung/opensim&quot; rel=&quot;nofollow noreferrer&quot;&gt;OpenSim&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="16622" LastActivityDate="2019-03-25T22:08:34.587" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18502" PostTypeId="2" ParentId="18495" CreationDate="2019-03-25T22:43:16.137" Score="0" Body="&lt;p&gt;To complete the comment of @FooBar on the Jaco Arm (The one from the Video), it use  &lt;a href=&quot;https://www.kinovarobotics.com/sites/default/files/BR-004_KINOVA_JACO_Assistive_Robot-Brochure_EN_R05_0.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Carbon Fiber as links&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The old ones also used &lt;a href=&quot;https://www.kinovarobotics.com/sites/default/files/ULWS-RA-MIC-UG-INT-EN%20201804-1.0%20%28KINOVA%20MICO%E2%84%A2%20Robotic%20arm%20user%20guide%29_0.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Plastic links&lt;/a&gt; with carbon fiber paint effect &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can &lt;a href=&quot;https://imgur.com/CfwCPGa&quot; rel=&quot;nofollow noreferrer&quot;&gt;copy the carbon fiber effect&lt;/a&gt; easily if you need it.&lt;/p&gt;&#xA;" OwnerUserId="19563" LastActivityDate="2019-03-25T22:43:16.137" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18503" PostTypeId="2" ParentId="18497" CreationDate="2019-03-26T01:59:45.443" Score="1" Body="&lt;p&gt;Check whether they are in radians. Most algorithms use radians for pose estimation.&lt;/p&gt;&#xA;" OwnerUserId="21353" LastActivityDate="2019-03-26T01:59:45.443" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18504" PostTypeId="2" ParentId="18489" CreationDate="2019-03-26T08:47:58.933" Score="-1" Body="&lt;p&gt;Robot control problems are usually treated as computational problems. The software engineers are trying to realize an algorithm which is searching in the state space. So called pathplanning and motion planning algorithms are used to bring a robot-system into a desired state. The disadvantage of this classical approach is, that no mathematics but programming skills are important. It ignores the mathematical basics. The better way is to use a modern university driven mathematics to describe robot control problems in an elegant way. No digital computer is needed here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The question implies that the robot control problem can be described with Lie algebra. Lie Algebra is an example for a topological group for transforming a nonlinear problem into a linear one. The first subquestion which has to be answered is, if Lie groups are powerful enough, which means if they are Turing-complete? The answer is yes, if we are talking about quantum Turing machines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now we can go on to solve the question itself. For controlling the robot trailer problem we have to create a recursive algorithm which is executed on a hypothetical quantum computer. The algorithm is using lie groups to determine the Lagrangian equations of motion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Literature&lt;/strong&gt; If the idea is to teach lie brackets without mention neural turing machine, ignoring quantum computers and stack-based computation. The resulting request for getting the right literature in Google Scholar is &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&quot;lie group&quot; -&quot;quantum computer&quot; -&quot;turing machine&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The minus sign allows to exclude a keyword from the result list.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastEditorUserId="14283" LastEditDate="2019-03-26T09:46:28.483" LastActivityDate="2019-03-26T09:46:28.483" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18505" PostTypeId="2" ParentId="18494" CreationDate="2019-03-26T13:57:52.440" Score="4" Body="&lt;p&gt;The given strategies can be divided into two groups: model-based and model-free control. The AMPC and MARC suggestions are model-based the other are model-free. Theoretically, a pid controller can be combined with Model-based control but for reason of simplification the assumption is, that each technique is located in a certain group.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now we can ask if model-based or model-free is the more practical robotic arm controller. The good news is, that the winner can be easily imagined, because only model-based control is able to predict future state-space and this is equal to an increased accuracy. It is interesting to know, that model-based control is seldom teached in universities, because it can't be described mathematically elegant.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It remains one point open which has to do with adaptive control. Adaptive means, that the system learns it's parameters on the fly. It will allow to use the same controller for different robot arms. A heavy one and also a lightweight kinematic chain. The holy grail in adaptive control is a system which adapts itself to any kind of robotic arm, no matter if it's underactuated or fixed, with a low amount of DOF or with more servo motors in it. Creating an adaptive forward model is a bit complicated, and I'm not aware if this problem was already solved in the literature.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2019-03-26T13:57:52.440" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18506" PostTypeId="1" CreationDate="2019-03-26T18:28:31.277" Score="1" ViewCount="2545" Body="&lt;p&gt;When I use the &lt;code&gt;rostopic&lt;/code&gt; list commands, the output is only returning &lt;code&gt;/rosout&lt;/code&gt; &amp;amp; &lt;code&gt;/rosout_agg&lt;/code&gt;. Although when I &lt;code&gt;rosrun&lt;/code&gt; both the subscriber and the publisher python files, that contain my new topic, they can communicate no problem. A few questions here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does the &lt;code&gt;rostopic list&lt;/code&gt; command list all the topics that are part of the catkin workspace?&#xA;At what point is this rostopic 'created'. In other words what command is responsible for &lt;code&gt;rostopic list&lt;/code&gt; to generate the new topic that is created in the publisher?&#xA;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="22640" LastActivityDate="2020-05-01T06:09:23.540" Title="rostopic list not showing topic" Tags="&lt;ros&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18507" PostTypeId="2" ParentId="18462" CreationDate="2019-03-26T19:25:28.933" Score="2" Body="&lt;p&gt;I will take a wild guess - your accellerating to fast for the mass of the blade / power of the stepper motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can check this by trying to step much slower - perhaps 1 step per second for testing&lt;/p&gt;&#xA;" OwnerUserId="1819" LastActivityDate="2019-03-26T19:25:28.933" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18508" PostTypeId="1" CreationDate="2019-03-27T03:22:35.013" Score="0" ViewCount="78" Body="&lt;p&gt;I am trying to estimate when and where to release a box carried by a delivery UAV such that it falls on a given target. I need to take the wind speed/direction into account. (See the visual below for reference.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Through the pose estimator, I have access to the position and velocity of the UAV in &lt;span class=&quot;math-container&quot;&gt;$X,Y,Z$&lt;/span&gt; axes, so as the position of the target. The box needs to be released from approximately 2.5m. Also, there is a wind speed/direction sensor located by the target location, in average the wind speed is around 6mph in the test area.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that the grabber that releases the box has a latency of 3.5s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are a number of examples online that solve this problem using SUVAT equation in two dimensions without taking the wind into account. But I couldn't find any information regarding a robot operating in three dimensions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/V9mdG.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/V9mdG.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18352" LastActivityDate="2020-12-18T17:03:35.540" Title="Dropping a box from a quadcopter" Tags="&lt;quadcopter&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18509" PostTypeId="2" ParentId="18506" CreationDate="2019-03-27T07:42:58.353" Score="5" Body="&lt;p&gt;In which order do you run your commands ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;rostopic list&lt;/code&gt; is used to list current topics registered with the &lt;code&gt;rosmaster&lt;/code&gt; 'node', who is launched with the &lt;code&gt;roscore&lt;/code&gt; commands&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The publisher and subscriber topics are registered to the rosmaster with the python function &lt;code&gt;rospy.Publisher('chatter', String, queue_size=10)&lt;/code&gt; for the publisher, and &lt;code&gt;rospy.Subscriber(&quot;chatter&quot;, String, callback)&lt;/code&gt; for the subscriber (I assume that the python file you speak about are the one from the tutorial)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if you want to see the topics from the publisher and subscriber tutorial , you need first to launch the rosmaster with &lt;code&gt;roscore&lt;/code&gt;, then you can open 2 new terminals and launch the publisher and subscriber on each terminal with &lt;code&gt;rosrun beginner_tutorials talker.py&lt;/code&gt; and &lt;code&gt;rosrun beginner_tutorials listener.py&lt;/code&gt; (don't forget to source your catkin workspace on each terminal to be able to run your workspaces' nodes). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That will register the 2 nodes on the rosmaster, the talker node will register a publisher and the listener node will register a subscriber, both on the same topic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And now, on an another terminal, if you run &lt;code&gt;rostopic list&lt;/code&gt; you will be able to see the topic &lt;code&gt;/chatter&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And if you run the command &lt;code&gt;rostopic info /chatter&lt;/code&gt;, you will see that this topic is used by 2 nodes, talker and listener, talker is a publisher and listener a subscriber.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you can't see it, then there is a problem. You can use all the ros* commands to debug what's happening.&#xA;For example, run the command &lt;code&gt;rosnode list&lt;/code&gt; to list which nodes are actually launched (there should be 3 nodes), run the command &lt;code&gt;rostopic echo /chatter&lt;/code&gt; to see if your publisher is indeed publishing messages, or run the commands &lt;code&gt;rostopic pub /test std_msgs/String &quot;Hello&quot; -r 10&lt;/code&gt; and &lt;code&gt;rostopic echo /test&lt;/code&gt; to see if you can indeed make 2 nodes works.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, you should ask your ROS question directly to the &lt;a href=&quot;https://answers.ros.org/questions/&quot; rel=&quot;noreferrer&quot;&gt;ROS Answers Forum&lt;/a&gt;, they are much more specialized :) .&lt;/p&gt;&#xA;" OwnerUserId="19563" LastActivityDate="2019-03-27T07:42:58.353" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18510" PostTypeId="2" ParentId="18476" CreationDate="2019-03-27T08:05:24.643" Score="0" Body="&lt;p&gt;It seems that you have successfully identified the RPY angles. In the comments it was made clear that the UR5 robot you are using expects the orientation as an XYZ extrinsic rotation (which corresponds to an ZYX intrinsic rotation). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As per the discussion in the comments the UR5 controller offers a function to convert RPY angles to the requires extrinsic XYZ representation called &lt;code&gt;rpy2vecrot()&lt;/code&gt;. This function should be uest to convert the orientation angles calculated by you to the required format.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2019-03-27T08:05:24.643" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18512" PostTypeId="2" ParentId="18457" CreationDate="2019-03-27T11:20:17.820" Score="0" Body="&lt;p&gt;I think the question relies too much on variable factors so that there is no definitive answer. In a worst case scenario, you want to map a tunnel system and all of your robots start at the single entrance to the system. All of your robots will have to drive together to the first intersection where they can spread. More robots will could decrease the performance of your fleet. In a best case, you have some swimming robots with sonars (so with limited sensor range) that should map the sea floor. If you don't have too many robots, the fleet performance will scale linearly as the boats are able to move immediately to unscanned areas. &lt;/p&gt;&#xA;" OwnerUserId="23196" LastActivityDate="2019-03-27T11:20:17.820" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18513" PostTypeId="2" ParentId="18457" CreationDate="2019-03-27T11:25:36.817" Score="0" Body="&lt;p&gt;Perhaps, the following related work can be somehow enlighting or provide useful insights, as per your request:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.ischool.pitt.edu/people/lewis/smc07.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Jijun Wang and M. Lewis, &quot;Assessing coordination overhead in control of robot teams,&quot; 2007 IEEE International Conference on Systems, Man and Cybernetics, Montreal, Que., 2007, pp. 2645-2649.&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="6941" LastActivityDate="2019-03-27T11:25:36.817" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18517" PostTypeId="1" CreationDate="2019-03-28T08:04:44.153" Score="0" ViewCount="87" Body="&lt;p&gt;I have started building and programming my own quadcopter. I used stm32 f103 and right now I'm testing PID controller. The issue is getting right gain constants. I have build a swing and attached quadcopter to test it in one Axis. My problem is that I cannot use Zeigler-Nichols algorithm because the swing don't have big angular space. Quadcopter can move only 86 degrees. Is there a possible way to calculate gain constants from tests where I have measured angle? &lt;/p&gt;&#xA;" OwnerUserId="22654" LastActivityDate="2021-04-17T22:57:45.577" Title="Improving PID gain constants" Tags="&lt;quadcopter&gt;&lt;pid&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18519" PostTypeId="1" CreationDate="2019-03-28T09:45:32.470" Score="0" ViewCount="65" Body="&lt;p&gt;I'm still trying to understand how to implement &lt;a href=&quot;https://hal.inria.fr/inria-00350283/document&quot; rel=&quot;nofollow noreferrer&quot;&gt;image based visual servoing&lt;/a&gt; (IBVS) for quadrotor. The control laws seem straightforward if you want to use IBVS to track a feature in the image space at a fixed distance, but I'm trying to extend this to flying towards the target as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I'm confused about is that the control law requires you to track at least 3 features for &lt;span class=&quot;math-container&quot;&gt;$\mathbf{e}(t) = \mathbf{s} - \mathbf{s^*} \rightarrow 0$&lt;/span&gt;, but I'm unsure of how to set the values of &lt;span class=&quot;math-container&quot;&gt;$\mathbf{s^*}$&lt;/span&gt; because the location of those 3 features will not be fixed in the pixel space when the quadrotor is flying forward. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additional info: my quadrotor is supposed to fly through gates which are identified by 4 infrared markers. The center of these 4 infrared markers determines the target path for my quadrotor to fly through. &lt;/p&gt;&#xA;" OwnerUserId="21285" LastActivityDate="2021-04-23T07:31:17.770" Title="Image based visual servoing for quadrotor forward flight" Tags="&lt;control&gt;&lt;quadcopter&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18520" PostTypeId="2" ParentId="18457" CreationDate="2019-03-28T18:15:17.687" Score="2" Body="&lt;p&gt;I came across one paper that had a good description of this issue from Kristina Lerman and Aram Galstyan at University of Southern California entitled &quot;&lt;a href=&quot;https://www.isi.edu/~lerman/papers/foraging.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mathematical Model of Foraging in a Group of Robots: Effect of Interference&lt;/a&gt;&quot; &lt;/p&gt;&#xA;" OwnerUserId="22659" LastActivityDate="2019-03-28T18:15:17.687" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18523" PostTypeId="2" ParentId="18508" CreationDate="2019-03-29T09:08:14.193" Score="-3" Body="&lt;p&gt;Throwing an object from a moving UAV quadcopter isn't the easiest control problem to start in robotics. The reason is, that the system has a non-linear characteristics which means that the equations of motions have to do with ordinary differential equations. The box dropping problem is way more complicated than the famous three body problem which was researched by Isaac Newton in the 17th century. Newton was a professor at the Trinity college in Cambridge, which is one of the most prestigious Universities in the world.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This background information is important to understand which kind of theories are needed here. It has to be technology which is more advanced, that what Isaac Newton was using, because he struggles with the three body problem. The good news is, that such technology is available since the 20th century, it's called model predictive control. The first thing to do is to create the forward model of the problem. That means, a physics simulation has to be created which is calculating the position of the box under the influence of the wind parameter and the own speed of the UAV. Basically this task is equal to program a small game in which a graphics subsystem shows on the screen the movement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second subproblem is to use the forward model in the opposite direction. This is called predictive control. The controller gets as input the goal position of the box, and then he calculates the needed actions of the UAV to reach the state. In the literature, the concept is known as Receding Horizon Control. It contains of a prediction step, the result is stored in a graph and then a solver is searching in the graph for a goal node which fulfills the constraints. The edges on the graph are the action commands for controlling the UAV.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2019-03-29T09:08:14.193" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18524" PostTypeId="2" ParentId="18508" CreationDate="2019-03-29T13:56:45.507" Score="1" Body="&lt;p&gt;At a height of 2.5 meter, wind is negligible. Once the wind factor start to affect your precision, it is to windy to fly safely.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the UAV has to move, you will have to fly the UAV over the target and use the &lt;a href=&quot;https://en.wikipedia.org/wiki/Equations_for_a_falling_body&quot; rel=&quot;nofollow noreferrer&quot;&gt;basic equations for a falling body&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you can 'park' your drone above the target location, you will be as precise as your GPS can be. &#xA;From experience, this option is best, and with good component, you could get it within 30 cm. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And you can read what other university has done for dropping 8oz water bottle from a minimum height of 90 meter &lt;a href=&quot;http://www.auvsi-suas.org/competitions/2018/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; (last year competition) and get inspire.&lt;/p&gt;&#xA;" OwnerUserId="22341" LastActivityDate="2019-03-29T13:56:45.507" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18525" PostTypeId="2" ParentId="18517" CreationDate="2019-03-29T16:03:39.627" Score="0" Body="&lt;p&gt;You can use angle measurement to find the proper gains. Check out this &lt;a href=&quot;https://robotics.stackexchange.com/questions/167/what-are-good-strategies-for-tuning-pid-loops&quot;&gt;other SE&lt;/a&gt;, they have a few good algorithms for finding the gains by measuring the oscillations. Another option, though a bit more experimental, you could try what this paper proposes as &lt;a href=&quot;https://pdfs.semanticscholar.org/05b2/07a58365e1b19485ca82cac53bb8e9ea1025.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;Probably the best simple PID tuning rules in the world&quot;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My last thought is that you could try applying the &lt;a href=&quot;http://www.cds.caltech.edu/~murray/books/AM08/pdf/am06-pid_16Sep06.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;improved Ziegler-Nichols rules&lt;/a&gt; (Page 7).&lt;/p&gt;&#xA;" OwnerUserId="22659" LastActivityDate="2019-03-29T16:03:39.627" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18526" PostTypeId="2" ParentId="18487" CreationDate="2019-03-29T16:46:09.530" Score="0" Body="&lt;p&gt;Here is my pitch: Collar!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yes, you've read that right. You could use a same mechanism that is use in manual transmission. A collar that could slide and engage the arm with the gearbox.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The sliding action of the collar could be done by a small servo motor. A position sensor could be use on the arm and gearbox, so when you need to engage, both shaft will be in proper alignment to assure engagement/sliding of the collar.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know if the price is good. It will also require sufficient room to operate.&lt;/p&gt;&#xA;" OwnerUserId="22341" LastActivityDate="2019-03-29T16:46:09.530" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18527" PostTypeId="1" CreationDate="2019-03-29T21:10:13.613" Score="0" ViewCount="209" Body="&lt;p&gt;This is in regards to a UR 10 running 3.5.3.10825.  For the script urx_get_robot.py&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;import urx&#xA;import logging&#xA;&#xA;if __name__ == &quot;__main__&quot;:&#xA;    try:&#xA;        logging.basicConfig(level=logging.INFO)&#xA;        robot = urx.Robot(&quot;192.168.1.106&quot;)&#xA;&#xA;    finally:&#xA;        robot.close()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;When I run the command python3 urx_get_robot.py, here is what I get.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;WARNING:ursecmon:tried 11 times to find a packet in data, advertised packet size: -2, type: 3&#xA;WARNING:ursecmon:Data length: 68&#xA;WARNING:ursecmon:tried 11 times to find a packet in data, advertised packet size: -2, type: 3&#xA;WARNING:ursecmon:Data length: 1092&#xA;WARNING:ursecmon:tried 11 times to find a packet in data, advertised packet size: -2, type: 3&#xA;WARNING:ursecmon:Data length: 1418&#xA;INFO:ursecmon:Remove 79 bytes of garbage at begining of packet&#xA;INFO:urx:Closing sockets to robot&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It's unknown to me whether this is a problem with the robot version and urx or if the UR 10 is behaving abnormally, because when I run the following script&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;import socket&#xA;&#xA;HOST = &quot;192.168.1.106&quot;    # The remote host&#xA;PORT = 30002              # The same port as used by the server&#xA;s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)&#xA;s.connect((HOST, PORT))&#xA;&#xA;for i in range(2):&#xA;    data = s.recv(32768)&#xA;    print (&quot;Received&quot;, data)&#xA;&#xA;s.close()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This is what prints:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Received b'\x00\x00\x007\x14\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x03\tURControl\x03\x05\x00\x00\x00\x03\x00\x00\x00\x0015-02-2018, 13:17:59\x00\x00\x00\x18\x14\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x0c\x00\x00w$\x00\x00w$\x01'&#xA;Received b&quot;\x00\x00\x05F\x10\x00\x00\x00/\x00\x00\x00\x00\x00]\xdbX\x00\x01\x01\x01\x00\x00\x00\x00\x07\x00?\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00?\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfb\x01\xc0\x07\x89e\x88\x88Z0\xc0\x07\x89r\x08\x88Z0\x00\x00\x00\x00\x00\x00\x00\x00\xbeR\xf0\x01B@/\x1bA\xd7\xeb\x81A\xde\x9e'\xfd\xc0\x00xWh\x88Z0\xc0\x00xc\xe8\x88Z0\x00\x00\x00\x00\x00\x00\x00\x00@\xa2\x99\x01B@\x00\x00A\xe2\xcc\xc8A\xf6\xbd\xb3\xfd\xbf\xf9\xd2\xecQ\x10\xb4`\xbf\xf9\xd3\x11\xd1\x10\xb4`\x80\x00\x00\x00\x00\x00\x00\x00@K\x97\x9fBA\x85\x1fA\xea\x14vA\xfb\x14\xdd\xfd\xc0\x04\xff'\xe8\x88Z0\xc0\x04\xff'\xe8\x88Z0\x00\x00\x00\x00\x00\x00\x00\x00=\xd3P\x01B@]/A\xecz\xddB\x13\xf9I\xfd\xbf\xf43\xb6Q\x10\xb4`\xbf\xf43\xdb\xd1\x10\xb4`\x00\x00\x00\x00\x00\x00\x00\x00&amp;lt;\xee\xe0\x02B@|\xeeB\x04\n9B\x08\x12B\xfd\xbf\xf9[#\xd1\x10\xb4`\xbf\xf9[=Q\x10\xb4`\x00\x00\x00\x00\x00\x00\x00\x00&amp;gt;\x1e|\x01B@|\xeeB\x02O\xcfB\x14\xf3\xe1\xfd\x00\x00\x00e\x04\xbf\xecW9\xf6v8~?\x86E\xben\xda\x1d\xcf?\xd0\xb5\x01\x13\xf0\xdd\x9a\xc0\x01r\xf8\xc5\xdf\xe30?\xbb\xe0\x81\x1c\xd0=.@\x01)\x90m\ni\xdc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe1\x05l\xe9\xb4/\xac(\xcf\x8b\x8b\x06\xfewZ\xee\x8f\x80\xab\xa6\r\x05\x96\x94]w?+\xdetTHF)\xbf\xcf\x91\xe94i$\x17?\xd2\x95\xf0\xc7\x04\xe8f\xbf\xa6:\x9fBx7\x9b\xbf9\xb66k\xf0\x19\xd2\xbfG\x1c\x80\xb58&amp;gt;K?\x01E,o7#\x19\xbf\xe3\x00$r\x96\xbc\xb0\xbf\xe2A\x05\xca\xf2Ps?\x05\xcf\xe3\x81\x92^\xbc\xbe\xea\x12\x1cX\xca^\xe7\x00\x00\x00\x00\x00\x00\x00\x00?\xc0f\xabF\xba\xab,@68\xe3%\x06l\xbf\xc08\xf3\x0f\xa6\x14\x87\xdf@\x07\x1f\xde*\xa2b3?\xbd\x9a\xdb\xa4\\\xaez?\xb7\x98\x92\x06\xcd,\xc1?\xf9!\x81\tW\xbfd\xbf{\x94\xb1\xdb\xc5\x7fp\xbf\x82yTQk\x119?\xf9 \xa3\xb7-\xdd\xe7\xbf\xf9$\xafS\xac\xb9\x9a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x005\t@\nC\x04\xe3\xe50\x19\xbf\xf0ZE\x81R\xb3a\xc0\x0e\xf4'\xe1N\x07b\xbf\xe8\x01/\xef\x00v?\xbf\xd7\xfb\xe9:\x88\xf3\xd1\xc0\x00\x0fi\x90'}[\x00\x00\x00J\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01\x01?p\x7f\xc0\x00\x00\x00\x00?p\x7f\xc0\x00\x00\x00\x00\x00\x00?pbM\xe0\x00\x00\x00?pbM\xe0\x00\x00\x00A\xfc \x00BA~&amp;gt;?\x80UD&amp;gt;\\\x82\xd3\x01\x00\x00\xc2D[d\x00\x00\x00\x00\x00%\x02\x01\x01?\xa7\x1b\xfd@\x00\x00\x00?\xa6\xa1\x96\xe0\x00\x00\x00C\xe5[2\x00\x00\x00\x00\x00B@\x00\x00\xfd\x00\x00\x01\xbd\x06\xc0\x19W\x99(,/c@\x19W\x99(,/c\xc0\x19W\x99(,/c@\x19W\x99(,/c\xc0\x19W\x99(,/c@\x19W\x99(,/c\xc0\x19W\x99(,/c@\x19W\x99(,/c\xc0\x19W\x99(,/c@\x19W\x99(,/c\xc0\x19W\x99(,/c@\x19W\x99(,/c@\x02Z\xeb\xd1\xc7\x0c\xff@D\x00\x00\x00\x00\x00\x00@\x02Z\xeb\xd1\xc7\x0c\xff@D\x00\x00\x00\x00\x00\x00@\n\xbb\x94\xed\xdd\xc6\xb1@D\x00\x00\x00\x00\x00\x00@\n\xbb\x94\xed\xdd\xc6\xb1@D\x00\x00\x00\x00\x00\x00@\n\xbb\x94\xed\xdd\xc6\xb1@D\x00\x00\x00\x00\x00\x00@\n\xbb\x94\xed\xdd\xc6\xb1@D\x00\x00\x00\x00\x00\x00?\xf0\xc1R8-se?\xf6W\x18J\xe7D\x87?\xd0\x00\x00\x00\x00\x00\x00?\xf3333333?\xd0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbf\xe3\x95\x81\x06$\xdd/\xbf\xe2PH\x16\xf0\x06\x8e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00?\xc0K]\xccc\xf1A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00?\xc4\xfc\x04\xc8\xbc\x9c\xd4?\xbd\x9e\x83\xe4%\xae\xe6?\xb7\x9akP\xb0\xf2|?\xf9!\xfbTREP\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00?\xf9!\xfbTREP\xbf\xf9!\xfbTREP\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x05\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00=\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00?\xb1B\x92\x7fK\xe2\xea\x00\x00\x00\x08\x08\x00\x01\x00\x00\x00\x00+\n\xc2D[d\x00\x00\xbf\xd1\xff\xb4W\xae\x12[\xbf\xad\x1d5^\xed\xcae?\xe5_7\x1ff\x17\xd1\x00\x00\x00\x00\x00\x00\x00\x00&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;No matter how many times the loop repeats there are always similar characters printed.  Should the robot be continually sending data like that?  Any help you can give would be so so appreciated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit 1:&lt;/strong&gt; From what I've read, it seems the robot is behaving normally by continually writing data to port 30002.  The problem is that, after the warnings from ursecmon above, my urx script hangs at, for example, &lt;code&gt;print(&quot;Current tool pose is: &quot; + rob.getl())&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit 2:&lt;/strong&gt; The problem persists after updating the robot to 3.9.&lt;/p&gt;&#xA;" OwnerUserId="11579" LastEditorUserId="11579" LastEditDate="2019-04-02T14:20:43.537" LastActivityDate="2019-04-02T14:20:43.537" Title="Python, Universal Robots, Ethernet problem" Tags="&lt;python&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18528" PostTypeId="2" ParentId="12851" CreationDate="2019-03-29T22:04:23.053" Score="1" Body="&lt;h1&gt;New and Simplest Approach:&lt;/h1&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Install &lt;code&gt;ROS-Robot Operating System&lt;/code&gt; plugin on CLion:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;you have to open the Settings (from the File menu); then from the left panel select plugin in order to show the plugin panel in the right side and select the marketplace tab; then search for ROS-Robot Operating System plugin and install it.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Import your ros_workspace by the installed plugin in File menu:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In order to import an existing workspace, you have to use the menu Import ROS workspace, selecting the workspace folder. In this case, the plugin will search from the configured ROS versions and it will setup the project in order to resolve the ROS dependency.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://wiki.ros.org/IDEs/#CLion&quot; rel=&quot;nofollow noreferrer&quot;&gt;Reference&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18870" LastActivityDate="2019-03-29T22:04:23.053" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18529" PostTypeId="1" AcceptedAnswerId="18551" CreationDate="2019-03-30T00:45:08.880" Score="1" ViewCount="86" Body="&lt;p&gt;I've been sperimenting with PIDs on my quadcopter and I've noticed that pitch P = 65 causes double front and back flips which looks like a roll of death (or in this case a flip of death) and lowering pitch P to 60 solves the issue. &#xA;Why is that? &#xA;Can I mitigate this with filters or D gain?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've also noticed that certain values of P and D mix well and make the quad smooth but if I bump up the I gain to twice as high as my P gain then my quadcopter bounces back.&#xA;Is this reasonable or there's a problem somewhere else? &lt;/p&gt;&#xA;" OwnerUserId="22324" LastActivityDate="2019-04-02T16:48:29.470" Title="Can P gain too high cause roll of death?" Tags="&lt;quadcopter&gt;&lt;pid&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18530" PostTypeId="2" ParentId="18529" CreationDate="2019-03-30T06:46:20.297" Score="0" Body="&lt;p&gt;Actually i'm not fan with the PID algorithm in this field especially drones and rc plane. Think about fuzzy logics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://searchenterpriseai.techtarget.com/definition/fuzzy-logic&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://searchenterpriseai.techtarget.com/definition/fuzzy-logic&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="22622" LastActivityDate="2019-03-30T06:46:20.297" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18532" PostTypeId="1" AcceptedAnswerId="18536" CreationDate="2019-03-30T11:49:45.563" Score="0" ViewCount="295" Body="&lt;p&gt;I am wondering how the Denavit-Hartenberg representation is able to describe rototranslations with 6 DOF with only 4 parameters?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some context:&#xA;Denavit-Hartenberg representations can be used to describe the rototranslation from frame 1 to frame 2. Frame 2 can be rotated as well as translated. Usually this involves 6 degrees of freedom (DOF).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am pretty sure that's impossible and that I am missing something else.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT (my current solution):&#xA;Systems that can be described using DHs only use joints with one joint variable. For example, a prismatic joint which can only move along one axis or a rotational joint which can only rotation around one axis. Then you lose 2 degrees of freedom =&gt; 6-2 = 4, thus 4 free variables are sufficient to describe the system.&lt;/p&gt;&#xA;" OwnerUserId="22667" LastEditorUserId="22667" LastEditDate="2019-03-30T12:34:42.857" LastActivityDate="2019-03-30T23:02:37.660" Title="How can Denavit-Hartenberg representation with only 4 variables describe rototranslations with 6 DOF?" Tags="&lt;kinematics&gt;&lt;motion-planning&gt;&lt;forward-kinematics&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18533" PostTypeId="2" ParentId="18532" CreationDate="2019-03-30T12:36:37.680" Score="0" Body="&lt;p&gt;In a nutshell, 4 DOFs do clearly represent only a manifold on all the possible 6 DOFs spatial roto-translations. This is actually the manifold corresponding to the movements of the links of a mechanical structure that are bound together via prismatic and revolute joints.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The DH convention assumes to deal with such structures. Thereby, under these premises, the frame attached to the endpoint of a link sliding on a track (prismatic) or rotating around a given axis (revolute) can be readily specified in terms of only 4 parameters with respect to the frame of the link attached before/after on the same structure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To sum up, to describe a roto-translation without assuming anything you need of course 6 parameters. Instead, if you impose constraints - as those present for example in a serial kinematic chain - you need only 4 parameters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's a related Q&amp;amp;A on Robotics SE: &lt;a href=&quot;https://robotics.stackexchange.com/a/4422/6941&quot;&gt;https://robotics.stackexchange.com/a/4422/6941&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastActivityDate="2019-03-30T12:36:37.680" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18534" PostTypeId="1" CreationDate="2019-03-30T19:06:53.717" Score="0" ViewCount="31" Body="&lt;p&gt;After some research&#xA;&lt;a href=&quot;https://robotics.stackexchange.com/questions/18327/robotic-hand-simulation-in-matlab&quot;&gt;Robotic hand simulation in MatLab?&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After some motivation, I have tried to go inside Matlab Simulink and was able to do this :-&#xA;&lt;a href=&quot;https://drive.google.com/open?id=1gdjzYNefG7teaU3FOkQAYTg3q7cRuhV5&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://drive.google.com/open?id=1gdjzYNefG7teaU3FOkQAYTg3q7cRuhV5&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With this thing I was able to control the whole palm. As you can see here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://drive.google.com/open?id=1LU7148l99LvJsWYpY7CRP1FWwsZpUqiR&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://drive.google.com/open?id=1LU7148l99LvJsWYpY7CRP1FWwsZpUqiR&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But i want to add some MASK or more control to restrict the movement or may be picking an object.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone help me how to move for more advance control that i may don't know.&lt;/p&gt;&#xA;" OwnerUserId="21219" LastActivityDate="2019-03-30T19:06:53.717" Title="How to add some more feature for this simulink model" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;matlab&gt;&lt;simulation&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18536" PostTypeId="2" ParentId="18532" CreationDate="2019-03-30T23:02:37.660" Score="5" Body="&lt;p&gt;In general you need 6 parameters to describe the position and orientation of any  joint with respect to a link coordinate frame.  The DH parameterisation includes 2 constraints so only 4 parameters are required.  The constraints are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;axis &lt;span class=&quot;math-container&quot;&gt;$x_j$&lt;/span&gt; intersects axis &lt;span class=&quot;math-container&quot;&gt;$z_{j-1}$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;li&gt;axis &lt;span class=&quot;math-container&quot;&gt;$x_j$&lt;/span&gt; is perpendicular to axis &lt;span class=&quot;math-container&quot;&gt;$z_{j-1}$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;(see &lt;em&gt;Robotics, Vision &amp;amp; Control&lt;/em&gt;, second edition, p.197)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Personally I don't think it is useful to save 2 parameters given the confusion it creates for almost everybody, especially beginners, but I still find them confusing.  Saving 2 parameters is pointless given today's computing capability, but back in 1955 when this notation was invented it was perhaps more pertinent.&lt;/p&gt;&#xA;" OwnerUserId="21223" LastActivityDate="2019-03-30T23:02:37.660" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18537" PostTypeId="2" ParentId="14178" CreationDate="2019-03-30T23:30:47.303" Score="2" Body="&lt;p&gt;A holonomic constraint applies to the configuration variables, it is represented by an equation is some or all of the configuration variables.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A constraint that applies to the &lt;em&gt;rate of change&lt;/em&gt; of the configuration variables, and that &lt;em&gt;cannot be integrated&lt;/em&gt; to a constraint in the configuration variables, is therefore non-holonomiw.  It is represented by an equation in some or all of the configuration velocities.  For example, a car can have an arbitrary configuration (x,y,&lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt;) but at any configuration it is limited in the velocity &lt;span class=&quot;math-container&quot;&gt;$(\dot{x}, \dot{y}, \dot{\theta})$&lt;/span&gt; it can achieve due to the rolling constraints on its wheels.  Non-holonomy can be caused by under actuation or by rolling constraints.&lt;/p&gt;&#xA;" OwnerUserId="21223" LastEditorUserId="21223" LastEditDate="2019-04-01T23:08:48.817" LastActivityDate="2019-04-01T23:08:48.817" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18538" PostTypeId="1" AcceptedAnswerId="19529" CreationDate="2019-03-31T01:17:02.693" Score="2" ViewCount="228" Body="&lt;p&gt;I was building a robot which I wanted to have smooth consistent motions and pathways. I am somewhat familiar with Pure Path Pursuit and wanted to know if someone could point me towards a mathematical or Java algorithm which I could implement or take a look at in order to better understand this concept. Any help is appreciated. Thanks!&lt;/p&gt;&#xA;" OwnerUserId="22529" LastActivityDate="2019-09-29T05:40:01.550" Title="Is there a Java or mathematical algorithm for Pure Path Pursuit?" Tags="&lt;motion-planning&gt;&lt;path-planning&gt;&lt;first-robotics&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18539" PostTypeId="1" AcceptedAnswerId="18566" CreationDate="2019-03-31T11:27:40.293" Score="0" ViewCount="473" Body="&lt;p&gt;I'm trying to improve the speed my line following robot. I have made this chassis designs. This is the main prototype I'm working on. Look at the following image.&lt;a href=&quot;https://i.stack.imgur.com/JzVn5.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JzVn5.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm driving the robot with PID, and with previous robots, I noticed it's quite hard to tune these constants perfectly so I'm trying use MATLAB to tune it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there an equation or function that can describe the motion of the robot provided all the dimensions are known so that I can simulate it in MATLAB? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you for your attention!&lt;/p&gt;&#xA;" OwnerUserId="22670" LastActivityDate="2019-04-03T23:53:39.007" Title="Line following robot mathematic model" Tags="&lt;pid&gt;&lt;matlab&gt;&lt;line-following&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18540" PostTypeId="2" ParentId="18488" CreationDate="2019-03-31T13:38:38.963" Score="1" Body="&lt;p&gt;I think that on the attached picture, the two things from the right, are a stepper motor and encoder. Notice that both have wires coming out of them. So it is not an example of two gearboxes in series. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That being said, it should probably work. After all, most of the gearboxes are multistage internally. However, keep in mind that the more stages the gearbox has, the less efficient it is and the more backlash it has. You can also have problems assembling it all together, as the mounting holes of one gearbox may not fit into another. &lt;/p&gt;&#xA;" OwnerUserId="7360" LastActivityDate="2019-03-31T13:38:38.963" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18541" PostTypeId="2" ParentId="9568" CreationDate="2019-04-01T03:55:10.740" Score="1" Body="&lt;p&gt;I came across a site that referred to CIM as a &lt;em&gt;Controlled &lt;a href=&quot;https://en.wikipedia.org/wiki/Induction_motor&quot; rel=&quot;nofollow noreferrer&quot;&gt;Induction Motor&lt;/a&gt;&lt;/em&gt;. Confirmed by &lt;a href=&quot;https://acronyms.thefreedictionary.com/CIM&quot; rel=&quot;nofollow noreferrer&quot;&gt;CIM at The Free Dictionary&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's entirely possible that the other answer is correct, as &lt;a href=&quot;https://andymark-weblinc.netdna-ssl.com/media/W1siZiIsIjIwMTgvMTEvMjcvMDkvMzUvMjQvZWQxMzQxZjktNjg1My00Yzc2LTk5YTAtN2QyNDlmMWFhOGUzL2FtLTAyNTUgQ0lNIE1vdG9yIExheW91dC5wZGYiXV0/am-0255%20CIM%20Motor%20Layout.pdf?sha=816b33262672ebf2&quot; rel=&quot;nofollow noreferrer&quot;&gt;this datasheet&lt;/a&gt; has &lt;em&gt;CCL Industrial Motor Limited (CIM)&lt;/em&gt; at the bottom.&lt;/p&gt;&#xA;" OwnerUserId="22674" LastEditorUserId="37" LastEditDate="2019-04-01T10:32:24.440" LastActivityDate="2019-04-01T10:32:24.440" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18542" PostTypeId="1" AcceptedAnswerId="18583" CreationDate="2019-04-01T11:46:43.543" Score="0" ViewCount="31" Body="&lt;p&gt;Just to give u a little background of what I am doing, I am currently programming my vehicle to wall-hug a maze. My idea is that my vehicle does a check at start whether or not it will move in clockwise or anti clockwise direction. The thing I am not so sure about is the placement of my flag in my codes. Some of my friends questioned why I have 2 flags in my code, this made me unsure of whether my codes/logic is right. Refer to my codes for more info. If it is wrong, let me know how I can correct it. Thanks.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; if( g_NavState == NAV_NONE ){ //if vehicle is not moving&#xA;&#xA;    if(state.order.bLeft==TRUE){ //left sensor detects obstacle, moves clockwise.&#xA;        g_NavState = NAV_FRONT;&#xA;        g_MoveStateCmd = MOVE_FWD;&#xA;        flag1 = 1; //Unsure about this flag&#xA;    }&#xA;    else if(state.order.bRight==TRUE){ //right sensor detects obstacle, moves anti clockwise&#xA;        g_NavState = NAV_FRONT;&#xA;        g_MoveStateCmd = MOVE_FWD;&#xA;        flag2 = 1;//Unsure about this flag&#xA;    }&#xA;}&#xA;else if(g_NavState==NAV_FRONT){ //while going front&#xA;    if(state.order.bFrontLeft==FALSE &amp;amp;&amp;amp; state.order.bLeft==FALSE &amp;amp;&amp;amp; state.order.bBackLeft==FALSE &amp;amp;&amp;amp; flag1 == 1){ &#xA;       for(int iter=0;iter&amp;lt;1000000;iter++){&#xA;        } &#xA;        g_NavState = NAV_FL;&#xA;        g_MoveStateCmd = MOVE_FRONT_LEFT;&#xA;&#xA;    }&#xA;    else if(state.order.bFrontRight==FALSE &amp;amp;&amp;amp; state.order.bRight==FALSE &amp;amp;&amp;amp; state.order.bBackRight==FALSE &amp;amp;&amp;amp; flag2 == 1){ /*Anti-Clockwise*/&#xA;       for(int iter=0;iter&amp;lt;1000000;iter++){&#xA;        }&#xA;        g_NavState = NAV_FR;&#xA;        g_MoveStateCmd = MOVE_FRONT_RIGHT;&#xA;&#xA;    }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="22677" LastActivityDate="2019-04-08T03:29:00.930" Title="Robotics flag at start of maze" Tags="&lt;line-following&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18543" PostTypeId="1" CreationDate="2019-04-01T11:57:16.593" Score="0" ViewCount="116" Body="&lt;p&gt;im currently programming a robot with 2 wheels and i got the task to let it drive alone for a few minutes in a maze. I just managed to programm a controller that controls the distance to each wall right and left. But now i dont know how to drive to the right and left. I tried but its pretty random if the robot hits one of the walls or drives a perfect curve. I can use the wheel encoder sensors, the infrared sensors and the IMU to navigate the robot. Does anyone of you have an idea how i should program this?&#xA;Thanks for your help&lt;/p&gt;&#xA;" OwnerUserId="21843" LastActivityDate="2021-04-27T07:08:55.863" Title="How to drive a curve in a maze" Tags="&lt;wheeled-robot&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18544" PostTypeId="1" AcceptedAnswerId="18548" CreationDate="2019-04-01T12:41:53.497" Score="3" ViewCount="60" Body="&lt;p&gt;I'm posting here on the advice of r/diydrones, who said you're the people to ask. I'm hoping you might be able to help out with a problem i've come across in my research?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm a Neuroscientist working on spatial cognition. Broadly, i'm looking to find out exactly how the brain represents the space around us, our position in it, and how we move through it. This should lead to a better understanding of diseases in which these processes are affected, such as Alzheimer's, and show us novel ways of treating it. To do this, I use mice and rats, trained to perform spatial tasks, such as navigating mazes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Specifically, i'm investigating head direction cells. These are neurons which encode the direction which we are facing at any given point, up and down, left or right, etc. I'm looking for a way to record the direction that a mouse or rat is facing in real-time. Systems already exist for recording this, but only in two dimensions, that is to say, they lack the ability to be able to record up/down head movement, or inversion of the animal. Additionally, as they rely on tracking small LEDs, these systems can't be used in complex 3D mazes, as the lights are not always visible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I initially asked r/diydrones for suggestions of electronic methods of tracking head direction in 3D. The best suggestion appeared to be using  the ICM-20948.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are two problems with this that i'm trying to work through. The first is physical. I need to implement this chip in a way which is minimally invasive for the rat/mouse. That means that whatever processor and power source i use needs to be as small and light as possible. Ideally, it would be wireless. Using wired power and data transmission is definitely workable, but does have limitations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second problem is that I need to be able to synchronise the motion/direction data very closely to brain recordings which are being made simultaneously. Currently, this is fed as an analogue signal directly to a recording PC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As someone with very limited coding and electrical engineering experience, the inclusion of any guide materials you know of along with any suggestions would be very much appreciated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please do come forward with any comments, suggestions, or questions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;​&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="22678" LastActivityDate="2019-04-01T22:47:47.670" Title="3D Direction Sensor - Question from a Neuroscientist" Tags="&lt;sensors&gt;&lt;navigation&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18545" PostTypeId="1" CreationDate="2019-04-01T18:18:45.743" Score="0" ViewCount="141" Body="&lt;p&gt;So I just received my roomba create 2. I have managed to read and send commands to the roomba using the OI and an Arduino. I also got it to move using the USB cable provided by iRobot and the tethered app on windows. However after one or two min it either stop responding to any commands, or just turns off. If the last command was to move forward, it will continue to that. If it wasn't moving, then clicking on any of the buttons on the app will not make it do anything. I haven't figured out how to get the firmware version. Any help or guidance will be deeply appreciated.d&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you!&#xA;Sep&lt;/p&gt;&#xA;" OwnerUserId="22681" LastActivityDate="2021-04-21T04:41:28.983" Title="Roomba stops responding to commands on the OI" Tags="&lt;irobot-create&gt;&lt;roomba&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18547" PostTypeId="2" ParentId="18545" CreationDate="2019-04-01T22:41:44.557" Score="0" Body="&lt;p&gt;I think the problem may be the standard timeout when it is running on the battery&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/AzpTL.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/AzpTL.png&quot; alt=&quot;Roomba sleeping on battery mode&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please note that this is not the same as the issue I described needing a firmware update while sleeping on the dock.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Frank&lt;/p&gt;&#xA;" OwnerUserId="19572" LastActivityDate="2019-04-01T22:41:44.557" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18548" PostTypeId="2" ParentId="18544" CreationDate="2019-04-01T22:47:47.670" Score="1" Body="&lt;p&gt;It's clearly possible to do so with a gyro sensor and a blackbox. Take for instance micro quadcopter, those have full fledged flight controller with processor, gyro, blackbox, OSD, ESCs, accellerometer etc... all in one 20x20mm PCB!&#xA;I mean you could design your own PCB with just gyro, processor and blackbox (perhaps recording on a micro SD). I think the resulting PCB wouldn't exceed 10x10mm which shouldn't bother the rat too much. If you mind taking this advice into consideration take a look at the following link to check Drone Mesh Open Hardware project: &lt;a href=&quot;http://dronemeshforum.com/viewtopic.php?f=37&amp;amp;t=5375&amp;amp;sid=a9f8c001e412814a4679909f96ca8cae&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://dronemeshforum.com/viewtopic.php?f=37&amp;amp;t=5375&amp;amp;sid=a9f8c001e412814a4679909f96ca8cae&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The rat could be equipped with the gyro on top of an helmet wired on a micro lipo battery attached on his back. The blackbox would track everything coming from the gyro along with a timestamp to syncronize data once you'll extract it... &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or you can buy a device as the one shown in the following link and ask the producer to help you: &lt;a href=&quot;https://youtu.be/tyiuocPvUes&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://youtu.be/tyiuocPvUes&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="22324" LastActivityDate="2019-04-01T22:47:47.670" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18549" PostTypeId="2" ParentId="1946" CreationDate="2019-04-02T13:16:20.133" Score="0" Body="&lt;p&gt;Besides the very educational comments, you may also want to take a look at &lt;em&gt;Open Keyframe-based Visual-Inertial SLAM&lt;/em&gt; (OKVIS) which has open source implementations in &lt;a href=&quot;http://ethz-asl.github.io/okvis_ros/&quot; rel=&quot;nofollow noreferrer&quot;&gt;ROS&lt;/a&gt; and &lt;a href=&quot;http://ethz-asl.github.io/okvis/&quot; rel=&quot;nofollow noreferrer&quot;&gt;non-ROS version&lt;/a&gt; using a generic CMake library.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;OKVIS tracks the motion of an assembly of an Inertial Measurement Unit (IMU) plus N cameras (tested: mono, stereo and four-camera setup) and reconstructs the scene sparsely.&lt;/p&gt;&#xA;" OwnerUserId="17877" LastActivityDate="2019-04-02T13:16:20.133" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18550" PostTypeId="2" ParentId="18449" CreationDate="2019-04-02T15:52:54.360" Score="1" Body="&lt;p&gt;Yes, It'll fail.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The system needs to know where the camera is in relation to the rest of the robot (e.g. it's wheels, base frame ... everything that contributes to how the robot moves in the environment).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'll need to update the robots URDF file at the least with the new location of any sensors.&lt;/p&gt;&#xA;" OwnerUserId="22688" LastActivityDate="2019-04-02T15:52:54.360" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18551" PostTypeId="2" ParentId="18529" CreationDate="2019-04-02T16:48:29.470" Score="1" Body="&lt;p&gt;Yes the proportional gain can cause overreaction. As it is only concerned with instant correction a larger gain value of P can make it over compensate. Basically I like to think of it as, in any instant point the grater the difference between the actual position or signal the more you have to accelerate to get there as quick as you can.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This can be corrected by using a derivative gain. The D gain is only concerned with compensating for the rate of change. This make it good to reduce the overshoot of your system (preventing death rolls).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you are noticing in the last part of your question is a natural ratio of the gains. A good method to find those well performing ratios is to use the &lt;a href=&quot;https://en.wikipedia.org/wiki/Ziegler%E2%80%93Nichols_method&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ziegler–Nichols tuning method.&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, if you are interested in control systems I would strongly suggest looking at &lt;a href=&quot;https://www.youtube.com/user/ControlLectures&quot; rel=&quot;nofollow noreferrer&quot;&gt;Brian Douglas' YouTube series&lt;/a&gt; on control systems.&lt;/p&gt;&#xA;" OwnerUserId="22659" LastActivityDate="2019-04-02T16:48:29.470" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18552" PostTypeId="2" ParentId="18467" CreationDate="2019-04-02T17:47:53.337" Score="0" Body="&lt;p&gt;Well, I made this question in ROS Answers and I made the answer (I got some experience by now): &lt;a href=&quot;https://answers.ros.org/question/319242/ros-theoretical-question-how-does-work-properly-a-node/&quot; rel=&quot;nofollow noreferrer&quot;&gt;answer&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="22609" LastActivityDate="2019-04-02T17:47:53.337" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18554" PostTypeId="1" AcceptedAnswerId="18565" CreationDate="2019-04-02T18:08:40.130" Score="2" ViewCount="884" Body="&lt;p&gt;I found this picture on the web and was working through it to make sure I understood the derivation for a PPP arm. I believe for link 2, alpha_2 ought to be -90 and not +90. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additionally, I don't understand why theta_3 is -90, give that link_3 is only a translation of link_2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Am I misunderstanding something or are the provided DH parameters incorrect with respect to the provided drawing?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Cc3ZN.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Cc3ZN.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="22516" LastActivityDate="2019-09-06T19:51:32.333" Title="DH parameters for a PPP arm" Tags="&lt;forward-kinematics&gt;&lt;dh-parameters&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="18555" PostTypeId="1" CreationDate="2019-04-02T20:31:49.057" Score="3" ViewCount="218" Body="&lt;p&gt;I am designing a stereo vision system for short depth range (15 cm to 35 cm) and I have some problems about baseline, focal length and depth range.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;My application is to scan an animal tissue (meat, chicken breast)&#xA;with the stereo vision system with a depth range between 15 cm and&#xA;35 cm, which is attached to a robotic arm. In this case, I need to&#xA;choose a short baseline for short depth range and a short focal&#xA;length. However, I have no idea how to pick these values (baseline&#xA;and focal length) and choose the specific camera.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Most of the commercial stereo camera are good for depth range 50 cm to 300 cm and they have a relative large baseline (6 cm to 10 cm). I am wondering if there any recommendations for the built-in stereo camera system that can target at short range (15 cm to 35 cm).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If I need to build the stereo system from two digital cameras for short depth range? What kind of parameters I need to consider? (except for focal length, baseline).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="22690" LastEditorUserId="17029" LastEditDate="2019-04-03T01:05:56.447" LastActivityDate="2019-11-13T16:44:56.410" Title="Short range stereo vision" Tags="&lt;computer-vision&gt;&lt;cameras&gt;&lt;stereo-vision&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18556" PostTypeId="2" ParentId="18555" CreationDate="2019-04-02T21:09:19.813" Score="1" Body="&lt;p&gt;Check-out this paper &lt;a href=&quot;http://prod.optoiq.com/content/dam/VSD/NextGen/5-3D-2.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;Theory of Stereo vision system&quot;&lt;/a&gt; from e-con Systems. They go an equation for figuring out depth range based on focal length, baseline, and other characteristics. Should be able to manipulate their equation to figure out what baseline, and focal length would be good for your system. As well as help figure out what hardware you might need or be able to get away with.&lt;/p&gt;&#xA;" OwnerUserId="22659" LastEditorUserId="17029" LastEditDate="2019-11-13T16:44:56.410" LastActivityDate="2019-11-13T16:44:56.410" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18557" PostTypeId="1" AcceptedAnswerId="18559" CreationDate="2019-04-03T01:46:55.607" Score="4" ViewCount="370" Body="&lt;p&gt;I am practicing C++ and intro to robotics using a simple differential drive robot and a raspberry pi.  Also following along the &lt;a href=&quot;https://youtu.be/aE7RQNhwnPQ?t=455&quot; rel=&quot;noreferrer&quot;&gt;GA Tech course&lt;/a&gt; on control of mobile robotics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The implementation I am trying firstly is the Proportional part of a PID controller for a Go-to-goal behavior robot, where I have a known state of &lt;code&gt;[x , y , theta]&lt;/code&gt; and I have a desired &lt;code&gt;[x_desired , y_desired , theta_desired]&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming a constant velocity, then the only control signal I can affect is the rotation rate omega, such that:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;error = theta_desired - theta;&#xA;omega = PID(atan2(sin(e), cos(e))); // where Ki and Kd are zero&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Using a wheel encoder and basic odometry, I am able to calculate the distance traveled by each wheel and its rotation rate as follows:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;const double&amp;amp; CalculateDistanceTraveled()&#xA;{&#xA;  distance_traveled_ = (2.0 * M_PI *&#xA;            (static_cast&amp;lt;double&amp;gt;(wheel_encoder_.get_total_ticks()) / num_slots_)&#xA;            * wheel_radius_m_); // in meters&#xA;  return distance_traveled_ ;&#xA;&#xA;}&#xA;&#xA;void CalculateRotationRate()&#xA;{&#xA;  while (this-&amp;gt;is_running_)&#xA;    {&#xA;      current_distance_ = std::copy(this-&amp;gt;CalculateDistanceTraveled());&#xA;&#xA;      // rotate rate = distance / 100 ms * (1000 ms / 1 second) &#xA;      rotation_rate_ = (current_distance_ - prev_distance_) * 10. // in seconds&#xA;      prev_distance_ = current_distance_;&#xA;&#xA;      std::this_thread::sleep_for( time_window_ ); // 100 milliseconds&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then I can update the robot's position and calculate the required &lt;code&gt;omega&lt;/code&gt; as follows:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;d_right_ = encoder_r_.CalculateDistanceTraveled();&#xA;d_left_  = encoder_l_.CalculateDistanceTraveled();&#xA;&#xA;d_center_ = (d_left + d_right) / 2.0;&#xA;&#xA;//d_baseline is distance between the two wheels&#xA;theta = (d_right - d_left) / d_baseline_; &#xA;&#xA;// update (x,y) position based on distance &amp;amp; orientation&#xA;x_ += (d_center * cos(theta_rad_)); // prev heading&#xA;y_ += (d_center * sin(theta_rad_));&#xA;&#xA;// update heading&#xA;theta_rad += theta;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Now I can calculate the error based on the difference between current state and target state assuming constant velocity and using only propotional gain for now&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;double e = target.theta_rad_ - current.theta_rad_;&#xA;// ensure error is between -Pi and +Pi&#xA;e_prime_ = atan2(sin(e), cos(e));&#xA;omega_ = kp_ * e_prime_;&#xA;&#xA;// velocity is constant and pre-defined&#xA;double w_r = ((2 * v_) + (omega * d_baseline_)) / (2 * wheel_radius_m);&#xA;&#xA; // velocity is constant and pre-defined&#xA;double w_l = ((2 * v_) - (omega * odometry_.d_baseline_)) / (2 * wheel_radius_m);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Now that I have the required &lt;code&gt;w_l&lt;/code&gt; and &lt;code&gt;w_r&lt;/code&gt; I need to turn them to pwm frequency and duty cycle values.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, AFAIK there is no such equation (since battery charges deplete, etc, etc) which is why we use encoders in the first place.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the only way I can think of is to use the &lt;code&gt;CalculateRotationRate&lt;/code&gt; function, and continuously update the pwm frequency and duty cycle until I get &lt;code&gt;near&lt;/code&gt; the required &lt;code&gt;w_r&lt;/code&gt; and &lt;code&gt;w_l&lt;/code&gt; (as they also change based on the robot's state changing).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At first thought, continuously checking and updating is &lt;code&gt;probably&lt;/code&gt; going to introduce oscillations. I can use PID for this, but it seems like a round-about-way of doing it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am wondering if my approach for this last part is correct?  To be clear, I am not looking for how to code-up pulse width modulation, but rather how to go from desired &lt;code&gt;w_l&lt;/code&gt; to PWM frequency and duty cycle values that will achieve the desired &lt;code&gt;w_l&lt;/code&gt; and &lt;code&gt;w_r&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="17047" LastActivityDate="2019-04-03T08:42:49.987" Title="Adjusting the PWM frequency and duty cycle to achieve the desired angular velocity in differential drive robots" Tags="&lt;kinematics&gt;&lt;c++&gt;&lt;rotation&gt;&lt;differential-drive&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18558" PostTypeId="1" CreationDate="2019-04-03T04:45:30.400" Score="0" ViewCount="417" Body="&lt;p&gt;I found there are STDR and Stage simulators on ROS for SLAM and mobile robot simulation. But I’m trying to run simulations on my laptop that has really limited space, when I tried to install Stage, it requires Gazebo which is 30GBs. Are there standalone simulators? I do have Matlab if that matters.&lt;/p&gt;&#xA;" OwnerUserId="9972" LastActivityDate="2019-04-05T10:38:15.680" Title="Any slam simulator without using ROS?" Tags="&lt;slam&gt;&lt;simulation&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18559" PostTypeId="2" ParentId="18557" CreationDate="2019-04-03T08:42:49.987" Score="4" Body="&lt;p&gt;At first,  I did not go trough your code to check for errors in the formulas but from a high level perspective this seems ok. Therefore, your position controller is fine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you lack is a lowlevel controller for the PWM signal.&#xA;This controller should take the error of &lt;code&gt;w_l&lt;/code&gt; - e.g. &lt;code&gt;e_w_l&lt;/code&gt; - and &lt;code&gt;w_r&lt;/code&gt; and provide a duty cycle accordingly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For that you should use a PID as well. The resulting system will be a cascaded control loop where the outer (slower) loop corresponds to the position control and the inner loop to the PWM controller (fast).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;\begin{align} \text{dutyCycle}_{w} = K_p \cdot e_{w} + K_i \sum_{n=0}^{t} e_w (t) \cdot \Delta t + K_d \frac{e_{w}-e_{w,prev}}{\Delta t} \end{align}&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would start with only a P controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;INFO: If you desicide to use a I part as well, make sure you also use a &lt;a href=&quot;https://en.wikipedia.org/wiki/PID_controller#Integral_windup&quot; rel=&quot;nofollow noreferrer&quot;&gt;Anti-Reset-Windup&lt;/a&gt; since the output is strictly limited to 100% dutycycle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;INFO: In order to calculate &lt;code&gt;e_w_{r,l}&lt;/code&gt;- or also want to use a D-gain - you need the most recent and the previous measurement. The acquisition of the timestamp is in most cases not super accurate neither deterministic. Therefore, your errors - or D-Part - will become very noisy. This might also be the source for oscillations. A lowpass filter might help you out at that point, when you can live with the delay it introduces.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;INFO: Always tune the fast loop - i.e. PWM contoller - first!&lt;/p&gt;&#xA;" OwnerUserId="19722" LastActivityDate="2019-04-03T08:42:49.987" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18560" PostTypeId="1" CreationDate="2019-04-03T08:49:42.510" Score="1" ViewCount="137" Body="&lt;p&gt;I am trying to control ardupilot using nodejs. My requirement is to use Javascript solution instead of Python/C.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://mavlink.io/en/#supported_languages&quot; rel=&quot;nofollow noreferrer&quot;&gt;mavlink.io page for supported languages&lt;/a&gt; shows javascript generated library has only support for MAVLink v1, but the graphic in the page shows support for v2. I am confused whether javascript/ node js can handle MAVlink v2 messages. If so, how can message signing be achieved with javascript? I have come across articles detailing the signing process for C/Python but none for javascript. Does this mean javascript support is very limited and may get phased out in the future. I am really confused here, kindly help me out.&lt;/p&gt;&#xA;" OwnerUserId="22697" LastEditorUserId="17029" LastEditDate="2019-04-03T09:06:42.110" LastActivityDate="2019-04-03T09:06:42.110" Title="How can i do message packet signing using javascript/node js for MAVLink v2 messages" Tags="&lt;ardupilot&gt;&lt;mavlink&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18561" PostTypeId="2" ParentId="18558" CreationDate="2019-04-03T16:04:57.643" Score="1" Body="&lt;p&gt;If you have MATLAB you can try out this &lt;a href=&quot;https://www.iri.upc.edu/people/jsola/JoanSola/eng/toolbox.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;SLAM Toolbox&lt;/a&gt;. There is also a &lt;a href=&quot;https://www.mathworks.com/matlabcentral/fileexchange/66284-implement-simultaneous-localization-and-mapping-slam-with&quot; rel=&quot;nofollow noreferrer&quot;&gt;more modern one&lt;/a&gt; that also might help.&lt;/p&gt;&#xA;" OwnerUserId="22659" LastActivityDate="2019-04-03T16:04:57.643" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18562" PostTypeId="2" ParentId="18558" CreationDate="2019-04-03T17:17:49.880" Score="2" Body="&lt;p&gt;I doubt if you need simulators that very specific to SLAM applications for mobile robot simulation as most of them generally tend to extend over all possible robot applications. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.coppeliarobotics.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;V-REP&lt;/a&gt; is good open-source simulator with support for umpteen number of robots including mobile robots. It can be directly used via its API available in several languages and it has plugins for ROS that could be handy.&lt;/li&gt;&#xA;&lt;li&gt;The &lt;a href=&quot;https://cyberbotics.com/#webots&quot; rel=&quot;nofollow noreferrer&quot;&gt;Webots&lt;/a&gt; simulator is another similar platform for robot simulation and supports several features including ROS plugins.&lt;/li&gt;&#xA;&lt;li&gt;Finally, there is &lt;a href=&quot;http://carla.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;CARLA&lt;/a&gt;, a car simulation platform for autonomous driving research and you could use it for SLAM applications as well. &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="18572" LastActivityDate="2019-04-03T17:17:49.880" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18564" PostTypeId="2" ParentId="18558" CreationDate="2019-04-03T22:22:27.000" Score="2" Body="&lt;p&gt;The Robotics Toolbox for MATLAB has a simple EKF SLAM class, and the source code is open.  A video animation is here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://youtu.be/vLmMtbc7804&quot; rel=&quot;nofollow noreferrer&quot;&gt;Demonstration of EKF SLAM using Robotics Toolbox for MATLAB&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt; &#xA;&#xA;&lt;p&gt;The whole example is fairly concise:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;% Creating the vehicle.  First we define the covariance of the vehicles's odometry&#xA;% which reports distance travelled and change in heading angle&#xA;&#xA;V = diag([0.005, 0.5*pi/180].^2);&#xA;&#xA;% then use this to create an instance of a Bicycle class&#xA;veh = Bicycle('covar', V);&#xA;&#xA;% and then add a &quot;driver&quot; to move it between random waypoints in a square&#xA;% region with dimensions from -10 to +10&#xA;&#xA;veh.add_driver( RandomPath(10) );&#xA;&#xA;% Creating the map.  The map covers a square region with dimensions from &#xA;% -10 to +10 and contains 20 randomly placed landmarks&#xA;map = LandmarkMap(20, 10);&#xA;&#xA;% Creating the sensor.  We firstly define the covariance of the sensor measurements&#xA;% which report distance and bearing angle&#xA;W = diag([0.1, 1*pi/180].^2);&#xA;&#xA;% and then use this to create an instance of the Sensor class.&#xA;sensor = RangeBearingSensor(veh, map, 'covar', W, 'animate', 'angle', [-pi/2 pi/2], 'range', 5);&#xA;% Note that the sensor is mounted on the moving robot and observes the features&#xA;% in the world so it is connected to the already created Vehicle and Map objects.&#xA;&#xA;% Create the filter.  First we need to determine the initial covariance of the&#xA;% vehicle, this is our uncertainty about its pose (x, y, theta)&#xA;P0 = diag([0.005, 0.005, 0.001].^2)*1000;&#xA;&#xA;&#xA;% Now we create an instance of the EKF filter class&#xA;ekf = EKF(veh, V, P0, sensor, W, []);&#xA;% and connect it to the vehicle and the sensor and give estimates of the vehicle&#xA;% and sensor covariance (we never know this is practice).&#xA;&#xA;% Now we will run the filter for 1000 time steps.  At each step the vehicle&#xA;% moves, reports its odometry and the sensor measurements and the filter updates&#xA;% its estimate of the vehicle's pose&#xA;ekf.run(500, 'plot', 'movie', 'ekfslam.mp4');&#xA;% all the results of the simulation are stored within the EKF object&#xA;&#xA;%% First let's plot the map&#xA;map.plot()&#xA;% and then overlay the path actually taken by the vehicle&#xA;veh.plot_xy('b');&#xA;% and then overlay the path estimated by the filter&#xA;ekf.plot_xy('r');&#xA;% which we see are pretty close&#xA;&#xA;% Now let's plot the error in estimating the pose&#xA;figure&#xA;ekf.plot_error()&#xA;% and this is overlaid with the estimated covariance of the error.&#xA;&#xA;% Remember that the SLAM filter has not only estimated the robot's pose, it has&#xA;% simultaneously estimated the positions of the landmarks as well.  How well did it&#xA;% do at that task?  We will show the landmarks in the map again&#xA;figure&#xA;map.plot();&#xA;% and this time overlay the estimated landmark (with a +) and the 95% confidence&#xA;% bounds as green ellipses&#xA;ekf.plot_map('g');&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="21223" LastEditorUserId="17029" LastEditDate="2019-04-05T10:38:15.680" LastActivityDate="2019-04-05T10:38:15.680" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18565" PostTypeId="2" ParentId="18554" CreationDate="2019-04-03T23:24:59.650" Score="2" Body="&lt;p&gt;The DH parameters comes from the common normal between two consecutive Z axes. Every time you're in doubt about the DH parameters, you can follow common guidelines between two consecutive axes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this case, &lt;span class=&quot;math-container&quot;&gt;$d_i$&lt;/span&gt; is the distance along previous Z starting from the previous origin O to the intersection of the new X and previous Z axis, which is variable in the case of prismatic joints.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$r_i$&lt;/span&gt; (or &lt;span class=&quot;math-container&quot;&gt;$a_i$&lt;/span&gt;) is the distance in current X starting from current origin O to the intersection between previous Z and current X. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\theta_i$&lt;/span&gt; is the angle in previous Z to align the previous X with the new X.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\alpha_i$&lt;/span&gt; is the angle in current X to align previous Z to current Z.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the picture, starting with link 1:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$d$&lt;/span&gt;: The distance from previous O to the intersection of previous Z and current X is variable, so it's &lt;em&gt;d1&lt;/em&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$a$&lt;/span&gt;: The distance in current X starting from current O to the intersection between previous Z and current X is &lt;em&gt;0&lt;/em&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt;: The angle in previous Z to align previous X with the new X is &lt;em&gt;0&lt;/em&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\alpha$&lt;/span&gt;: The angle in current X to align previous Z to current Z is &lt;em&gt;-90&lt;/em&gt; (right hand rule).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;For link 2:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$d$&lt;/span&gt;: The distance from previous O to the intersection of previous Z and current X is variable, so it's &lt;em&gt;d2&lt;/em&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$a$&lt;/span&gt;: The distance in current X starting from current O to the intersection between previous Z and current X is &lt;em&gt;0&lt;/em&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt;: The angle in previous Z to align previous X with the new X is &lt;em&gt;90&lt;/em&gt; (right hand rule).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\alpha$&lt;/span&gt;: The angle in current X to align previous Z to current Z is &lt;em&gt;-90&lt;/em&gt; (right hand rule).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;For link 3:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$d$&lt;/span&gt;: The distance from previous O to the intersection of previous Z and current X is variable, so it's &lt;em&gt;d3&lt;/em&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$a$&lt;/span&gt;: The distance in current X starting from current O to the intersection between previous Z and current X is &lt;em&gt;0&lt;/em&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt;: The angle in previous Z to align previous X with the new X is &lt;em&gt;0&lt;/em&gt; (right hand rule).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\alpha$&lt;/span&gt;: The angle in current X to align previous Z to current Z is &lt;em&gt;0&lt;/em&gt; (right hand rule).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So the correct DH Table for this robot would be:&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Link 1:   &lt;span class=&quot;math-container&quot;&gt;$a=0$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$\alpha=-90$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$d=d1$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$\theta=0$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Link 2: &lt;span class=&quot;math-container&quot;&gt;$a=0$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$\alpha=-90$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$d=d2$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$\theta=90$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Link 3:  &lt;span class=&quot;math-container&quot;&gt;$a=0$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$\alpha=0$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$d=d3$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$\theta=0$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;You can see some guidelines &lt;a href=&quot;https://www.youtube.com/watch?v=rA9tm0gTln8&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="22691" LastEditorUserId="21531" LastEditDate="2019-09-06T19:51:32.333" LastActivityDate="2019-09-06T19:51:32.333" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18566" PostTypeId="2" ParentId="18539" CreationDate="2019-04-03T23:53:39.007" Score="2" Body="&lt;p&gt;The robot you're trying to model is known as a &lt;em&gt;Two Wheeled Differential Robot&lt;/em&gt;. It's easy to find specific kinematic models for it. You can start &lt;a href=&quot;https://www.youtube.com/watch?v=aE7RQNhwnPQ&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; or &lt;a href=&quot;https://www.youtube.com/watch?v=gbjaAMM5ZF4&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="22691" LastActivityDate="2019-04-03T23:53:39.007" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18567" PostTypeId="2" ParentId="18519" CreationDate="2019-04-04T00:10:27.223" Score="0" Body="&lt;p&gt;A &lt;a href=&quot;https://en.wikipedia.org/wiki/Feature_(computer_vision)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Feature&lt;/a&gt; normally is not a single pixel and it's normally defined by a structure of some sort, for example the distance between the Markers. In the case of IBVS, you have to identify these features first, otherwise your robot essentially starts blind. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you identify the markers you can use the distance between them compared to the distance expected to know your position in relation to them. The same with rotation. After that you can start the IBVS.&lt;/p&gt;&#xA;" OwnerUserId="22691" LastActivityDate="2019-04-04T00:10:27.223" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18568" PostTypeId="2" ParentId="18476" CreationDate="2019-04-04T00:49:00.657" Score="0" Body="&lt;p&gt;Using Euclidian Angles normally can be confusing because the order of rotation interfers directly on the final rotation. As said above, Universal Robot series uses a specific order of rotation that you have to match.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Besides, if you're using &lt;em&gt;movel&lt;/em&gt; ou &lt;em&gt;movej&lt;/em&gt; with the UR5, you have to know that the Rx, Ry and Rz represents an &lt;a href=&quot;https://en.wikipedia.org/wiki/Axis%E2%80%93angle_representation&quot; rel=&quot;nofollow noreferrer&quot;&gt;Axis-Angle representation&lt;/a&gt;. In modern robots, axis angle or quaternion is normally used instead of Euclidian because of &lt;a href=&quot;https://en.wikipedia.org/wiki/Gimbal_lock&quot; rel=&quot;nofollow noreferrer&quot;&gt;Gimbal lock&lt;/a&gt;. I believe you can find the specific code to transform from one to another in the Universal Robot forums (Also in early versions the Axis-Angle you see in the screen is not the same you receive via Ethernet, although they represent the same rotation).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind that those positions and angles need to be represented in relation to the UR5 frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have the angle of the plane and a gripper to get the sheet, you can have the normal axis of the gripper match the normal axis of the sheet, then it becomes a grasping problem.&lt;/p&gt;&#xA;" OwnerUserId="22691" LastActivityDate="2019-04-04T00:49:00.657" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="18569" PostTypeId="1" CreationDate="2019-04-04T12:30:43.603" Score="0" ViewCount="124" Body="&lt;p&gt;I have an object like attached in image. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Y1d1B.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Y1d1B.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is hanging vertical (its position may change but static object) and I want to grasp it using 6DOF Robotic arm. I am Using camera to detect object.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am trying to estimate its 6D pose w.r.t to camera. The question is do I need to estimate 6D pose of object in order to grasp it? Is that really required, or is my thinking incorrect?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What are the different ways to grasp it using camera?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can I use just distance between camera and object (after detection), and tell robot to pick at that distance in the middle by gripper? If this is possible, how can I give value of X;Y;Z; ROLL; PITCH; YAW for the pick?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone guide me to correct path?&lt;/p&gt;&#xA;" OwnerUserId="22120" LastEditorUserId="37" LastEditDate="2019-04-05T11:13:09.357" LastActivityDate="2019-04-05T11:13:09.357" Title="vision guided robotic arm always required 6d pose of object?" Tags="&lt;robotic-arm&gt;&lt;computer-vision&gt;&lt;cameras&gt;&lt;industrial-robot&gt;&lt;calibration&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2019-04-05T11:17:19.513" ContentLicense="CC BY-SA 4.0" />
  <row Id="18570" PostTypeId="2" ParentId="18569" CreationDate="2019-04-04T14:54:01.973" Score="1" Body="&lt;p&gt;What you're trying to do is also known as &lt;a href=&quot;https://en.wikipedia.org/wiki/Visual_servoing&quot; rel=&quot;nofollow noreferrer&quot;&gt;Visual Servo&lt;/a&gt;. You could do it only with the position of the object, but it's normally not done this way because without the rotation information, you cannot guarantee &lt;a href=&quot;https://www.youtube.com/watch?v=6RWFFMtD5k8&quot; rel=&quot;nofollow noreferrer&quot;&gt;Force&lt;/a&gt; nor &lt;a href=&quot;https://www.youtube.com/watch?v=GjAtNb3VDZQ&quot; rel=&quot;nofollow noreferrer&quot;&gt;Form Closure&lt;/a&gt;, which is what you need if you don't want to drop your object, be it because of external forces, slippery, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You first need to transform the information in relation to the camera to information in relation to the robot. To do this, you usually need the transform from the robot to the camera. This is a simple transformation. If you have the robot pose in relation to world, and the camera pose in relation to world, then:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://latex.codecogs.com/gif.latex?%28%5E%7BR%7DT_%7BO%7D%29%20%3D%20%28%5E%7BR%7DT_%7BC%7D%29%20*%20%28%5E%7BC%7DT_%7BO%7D%29&quot; alt=&quot;enter link description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where T is the homogeneous transformation, and R, C and O represent the Robot, Camera and Object Frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your World frame is the Robot Frame:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://latex.codecogs.com/gif.latex?%28%5E%7BR%7DT_%7BC%7D%29%20%3D%20%28%5E%7BW%7DT_%7BC%7D%29&quot; alt=&quot;enter link description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Otherwise:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://latex.codecogs.com/gif.latex?%28%5E%7BR%7DT_%7BC%7D%29%20%3D%20%28%5E%7BW%7DT_%7BR%7D%29%5E%7B-1%7D%20*%20%28%5E%7BW%7DT_%7BC%7D%29&quot; alt=&quot;enter link description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For homogeneous transformation I suggest you take a look at &lt;em&gt;Robotics, Vision and Control Second Edition&lt;/em&gt; by Peter Corke.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After that, it becomes a grasping problem.&lt;/p&gt;&#xA;" OwnerUserId="22691" LastActivityDate="2019-04-04T14:54:01.973" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="18571" PostTypeId="1" CreationDate="2019-04-04T15:16:50.860" Score="1" ViewCount="309" Body="&lt;p&gt;I'm launching empty_world copied into my package with the command&#xA;&lt;code&gt;roslaunch my_package empty_world.launch&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is &lt;code&gt;empty_world.launch&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;launch&amp;gt;&#xA;&#xA;  &amp;lt;!-- these are the arguments you can pass this launch file, for example paused:=true --&amp;gt;&#xA;  &amp;lt;arg name=&quot;paused&quot; default=&quot;false&quot;/&amp;gt;&#xA;  &amp;lt;arg name=&quot;use_sim_time&quot; default=&quot;true&quot;/&amp;gt;&#xA;  &amp;lt;arg name=&quot;extra_gazebo_args&quot; default=&quot;&quot;/&amp;gt;&#xA;  &amp;lt;arg name=&quot;gui&quot; default=&quot;true&quot;/&amp;gt;&#xA;  &amp;lt;arg name=&quot;recording&quot; default=&quot;false&quot;/&amp;gt;&#xA;  &amp;lt;!-- Note that 'headless' is currently non-functional.  See gazebo_ros_pkgs issue #491 (-r arg does not disable&#xA;       rendering, but instead enables recording). The arg definition has been left here to prevent breaking downstream&#xA;       launch files, but it does nothing. --&amp;gt;&#xA;  &amp;lt;arg name=&quot;headless&quot; default=&quot;false&quot;/&amp;gt;&#xA;  &amp;lt;arg name=&quot;debug&quot; default=&quot;false&quot;/&amp;gt;&#xA;  &amp;lt;arg name=&quot;physics&quot; default=&quot;ode&quot;/&amp;gt;&#xA;  &amp;lt;arg name=&quot;verbose&quot; default=&quot;false&quot;/&amp;gt;&#xA;  &amp;lt;arg name=&quot;world_name&quot; default=&quot;worlds/empty.world&quot;/&amp;gt; &amp;lt;!-- Note: the world_name is with respect to GAZEBO_RESOURCE_PATH environmental variable --&amp;gt;&#xA;  &amp;lt;arg name=&quot;respawn_gazebo&quot; default=&quot;false&quot;/&amp;gt;&#xA;  &amp;lt;arg name=&quot;use_clock_frequency&quot; default=&quot;false&quot;/&amp;gt;&#xA;  &amp;lt;arg name=&quot;pub_clock_frequency&quot; default=&quot;100&quot;/&amp;gt;&#xA;  &amp;lt;arg name=&quot;enable_ros_network&quot; default=&quot;true&quot; /&amp;gt;&#xA;&#xA;  &amp;lt;!-- set use_sim_time flag --&amp;gt;&#xA;  &amp;lt;param name=&quot;/use_sim_time&quot; value=&quot;$(arg use_sim_time)&quot;/&amp;gt;&#xA;&#xA;  &amp;lt;!-- set command arguments --&amp;gt;&#xA;  &amp;lt;arg unless=&quot;&lt;span class=&quot;math-container&quot;&gt;$(arg paused)&quot; name=&quot;command_arg1&quot; value=&quot;&quot;/&amp;gt;&#xA;  &amp;lt;arg     if=&quot;$&lt;/span&gt;(arg paused)&quot; name=&quot;command_arg1&quot; value=&quot;-u&quot;/&amp;gt;&#xA;  &amp;lt;arg unless=&quot;&lt;span class=&quot;math-container&quot;&gt;$(arg recording)&quot; name=&quot;command_arg2&quot; value=&quot;&quot;/&amp;gt;&#xA;  &amp;lt;arg     if=&quot;$&lt;/span&gt;(arg recording)&quot; name=&quot;command_arg2&quot; value=&quot;-r&quot;/&amp;gt;&#xA;  &amp;lt;arg unless=&quot;&lt;span class=&quot;math-container&quot;&gt;$(arg verbose)&quot; name=&quot;command_arg3&quot; value=&quot;&quot;/&amp;gt;&#xA;  &amp;lt;arg     if=&quot;$&lt;/span&gt;(arg verbose)&quot; name=&quot;command_arg3&quot; value=&quot;--verbose&quot;/&amp;gt;&#xA;  &amp;lt;arg unless=&quot;&lt;span class=&quot;math-container&quot;&gt;$(arg debug)&quot; name=&quot;script_type&quot; value=&quot;gzserver&quot;/&amp;gt;&#xA;  &amp;lt;arg     if=&quot;$&lt;/span&gt;(arg debug)&quot; name=&quot;script_type&quot; value=&quot;debug&quot;/&amp;gt;&#xA;&#xA;  &amp;lt;!-- start gazebo server--&amp;gt;&#xA;  &amp;lt;group if=&quot;&lt;span class=&quot;math-container&quot;&gt;$(arg use_clock_frequency)&quot;&amp;gt;&#xA;    &amp;lt;param name=&quot;gazebo/pub_clock_frequency&quot; value=&quot;$&lt;/span&gt;(arg pub_clock_frequency)&quot; /&amp;gt;&#xA;  &amp;lt;/group&amp;gt;&#xA;  &amp;lt;group&amp;gt;&#xA;    &amp;lt;param name=&quot;gazebo/enable_ros_network&quot; value=&quot;&lt;span class=&quot;math-container&quot;&gt;$(arg enable_ros_network)&quot; /&amp;gt;&#xA;  &amp;lt;/group&amp;gt;&#xA;  &amp;lt;node name=&quot;gazebo&quot; pkg=&quot;gazebo_ros&quot; type=&quot;$&lt;/span&gt;(arg script_type)&quot; respawn=&quot;&lt;span class=&quot;math-container&quot;&gt;$(arg respawn_gazebo)&quot; output=&quot;screen&quot;&#xA;	args=&quot;$&lt;/span&gt;(arg command_arg1) &lt;span class=&quot;math-container&quot;&gt;$(arg command_arg2) $&lt;/span&gt;(arg command_arg3) -e &lt;span class=&quot;math-container&quot;&gt;$(arg physics) $&lt;/span&gt;(arg extra_gazebo_args) $(arg world_name)&quot; /&amp;gt;&#xA;&#xA;  &amp;lt;!-- start gazebo client --&amp;gt;&#xA;  &amp;lt;group if=&quot;&lt;span class=&quot;math-container&quot;&gt;$(arg gui)&quot;&amp;gt;&#xA;    &amp;lt;node name=&quot;gazebo_gui&quot; pkg=&quot;gazebo_ros&quot; type=&quot;gzclient&quot; respawn=&quot;false&quot; output=&quot;screen&quot; args=&quot;$&lt;/span&gt;(arg command_arg3)&quot;/&amp;gt;&#xA;  &amp;lt;/group&amp;gt;&#xA;&#xA;&amp;lt;/launch&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Here is &lt;code&gt;empty.world&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; ?&amp;gt;&#xA;&amp;lt;sdf version=&quot;1.5&quot;&amp;gt;&#xA;  &amp;lt;world name=&quot;default&quot;&amp;gt;&#xA;    &amp;lt;!-- A global light source --&amp;gt;&#xA;    &amp;lt;include&amp;gt;&#xA;      &amp;lt;uri&amp;gt;model://sun&amp;lt;/uri&amp;gt;&#xA;    &amp;lt;/include&amp;gt;&#xA;    &amp;lt;!-- A ground plane --&amp;gt;&#xA;    &amp;lt;include&amp;gt;&#xA;      &amp;lt;uri&amp;gt;model://ground_plane&amp;lt;/uri&amp;gt;&#xA;    &amp;lt;/include&amp;gt;&#xA;  &amp;lt;/world&amp;gt;&#xA;&amp;lt;/sdf&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The error message it gives:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[gazebo-1] process has died [pid 32294, exit code 255, cmd /opt/ros/melodic/lib/gazebo_ros/gzserver -e ode worlds/empty.world __name:=gazebo __log:=/home/me/.ros/log/9b2ef8a4-5652-11e9-90dd-fcaa1429a868/gazebo-1.log].&#xA;log file: /home/me/.ros/log/9b2ef8a4-5652-11e9-90dd-fcaa1429a868/gazebo-1*.log&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;This is based on &lt;a href=&quot;https://stackoverflow.com/q/55503594/341362&quot;&gt;my StackOverflow thread&lt;/a&gt; but hopefully more useful by removing my specific code from the question, making it clear that it is a configuration issue of some sort.&lt;/p&gt;&#xA;" OwnerUserId="22710" LastActivityDate="2019-04-04T15:16:50.860" Title="Gazebo crashes and burns launching empty world in new package" Tags="&lt;ros&gt;&lt;gazebo&gt;" AnswerCount="0" CommentCount="2" ClosedDate="2019-04-05T11:24:02.223" ContentLicense="CC BY-SA 4.0" />
  <row Id="18573" PostTypeId="1" CreationDate="2019-04-04T18:26:05.663" Score="3" ViewCount="108" Body="&lt;p&gt;I'm reading Robotics, Vision and Control, on page 108 it has following equations:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$\rho=\sqrt{\Delta^2_x+\Delta^2_y}$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$\alpha = \tan^{-1}\frac{\Delta_y}{\Delta_x}-\theta$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$\beta = -\theta-\alpha$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How does it go from the above to the following equations?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$\pmatrix{&#xA;\dot{\rho}\\&#xA;\dot{\alpha}\\&#xA;\dot{\beta}} = \pmatrix{&#xA;-\cos \alpha &amp;amp; 0\\&#xA;\frac{\sin \alpha}{\rho} &amp;amp; -1\\&#xA;-\frac{\sin \alpha}{\rho} &amp;amp; 0&#xA;}\pmatrix{v \\&#xA;\omega&#xA;}\text{, if } \alpha \in \left(-\frac{\pi}{2}, -\frac{\pi}{2}\right]&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$v=k_p\rho$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$\omega=k_\alpha \alpha+k_\beta \beta$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$\pmatrix{&#xA;\dot{\rho}\\&#xA;\dot{\alpha}\\&#xA;\dot{\beta}} = \pmatrix{&#xA;-k_\rho \cos \alpha\\&#xA;k_\rho \sin\alpha - k_\alpha \alpha -k_\beta \beta\\&#xA;-k_\rho \sin \alpha&#xA;}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Shouldn't &lt;span class=&quot;math-container&quot;&gt;$\dot{\rho} = -k_\rho \rho \cos\alpha$&lt;/span&gt; ? &lt;/p&gt;&#xA;" OwnerUserId="9972" LastEditorUserId="37" LastEditDate="2019-04-05T11:03:29.253" LastActivityDate="2019-04-07T00:01:22.557" Title="How is this bicycle model in Robotics Vision &amp; Control derived? And is its equation missing something?" Tags="&lt;books&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18574" PostTypeId="1" CreationDate="2019-04-04T21:32:51.023" Score="0" ViewCount="204" Body="&lt;p&gt;I'm a complete beginner with LabView and I have been practicing forward kinematics with the help of a tutorial I found. It's been a learning curve but I've managed to understand a few things.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I have not been able to implement an inverse kinematics vi.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've been trying to replicate &lt;a href=&quot;https://www.youtube.com/watch?v=8xqYicS-PB8&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; tutorial but I have been unsuccessful so far.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm working with a SCARA serial arm. The image below shows my work-in-progress attempt.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2AqK5.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2AqK5.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I run my vi I receive the following error:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Error -310040 occured at NI_Kinematics.lvlib: Inverse Kinematics (Point).vi-&amp;gt;Inverse Kinematics Attempt-1.vi&#xA;&#xA;LabVIEW Robotics: (Hex 0xFFFB44E8) LabVIEW cannot converge to a solution in the number of steps you specified. Make sure that the serial arm can achieve the transform you desire.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;My objective is to set the &lt;strong&gt;X&lt;/strong&gt;, &lt;strong&gt;Y&lt;/strong&gt; and &lt;strong&gt;Z&lt;/strong&gt; input fields to the values representing a point in space and move the endeffector to that point.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would really appreciate some guidance?&lt;/p&gt;&#xA;" OwnerUserId="14355" LastEditorUserId="14355" LastEditDate="2019-04-07T19:07:52.060" LastActivityDate="2019-06-07T15:01:12.853" Title="Inverse Kinematics &quot;Can not converge&quot; issue" Tags="&lt;inverse-kinematics&gt;&lt;labview&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18575" PostTypeId="2" ParentId="18573" CreationDate="2019-04-05T04:04:01.013" Score="6" Body="&lt;p&gt;OK, I'm working from the 1st edition of the book, so section 4.2.4 of my edition starts on page 75, but the text appears otherwise to be the same.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Initially, the book re-writes the equations of motion of the robot, given earlier as Eq. 4.2:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$ \dot x = \nu cos \theta $&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$ \dot y = \nu sin \theta $&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$ \dot \theta = \frac {\nu}  {L} tan \gamma $&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;in matrix form:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$&#xA;\begin{pmatrix}&#xA;  \dot x \\&#xA;  \dot y \\&#xA;  \dot \theta &#xA;\end{pmatrix} &#xA;= &#xA;\begin{pmatrix}&#xA;  cos \theta &amp;amp; 0 \\&#xA;  sin \theta &amp;amp; 0 \\&#xA;  0 &amp;amp; 1 &#xA;\end{pmatrix}&#xA;\begin{pmatrix}&#xA;  \nu \\&#xA;  \gamma &#xA; \end{pmatrix}&#xA;$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;These equations are then transformed into polar coordinate form using the notation from the following figure (figure 4.12 in my edition, yours may vary):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZSMj3.png&quot; alt=&quot;Polar corordinate notation for bicycle model&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From this figure, we obtain your first set of equations:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$ \rho = \sqrt {\Delta ^{2} _{x} + \Delta ^{2} _{y}} $&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$ \alpha = tan ^{-1} \frac {\Delta _{y}}  {\Delta _{x}} - \theta  $&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$ \beta = - \theta - \alpha  $&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Next, we apply the &lt;a href=&quot;https://www.khanacademy.org/math/ap-calculus-ab/ab-differentiation-2-new/ab-3-1a/a/chain-rule-review&quot; rel=&quot;noreferrer&quot;&gt;chain rule&lt;/a&gt;. Multiply both sides of Eq 4.2 by the Jacobian of the coordinate transformation, J.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are a couple of ways to obtain the Jacobian, J. Either differentiate the forward map to get &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$&#xA;J = &#xA;\begin{pmatrix}&#xA; {\frac {\Delta _{x}} {\sqrt {\Delta ^{2} _{x} + \Delta ^{2} _{y}}}} &amp;amp; {\frac {\Delta _{y}} {\sqrt {\Delta ^{2} _{x} + \Delta ^{2} _{y}}}} &amp;amp; 0 \\&#xA; -{\frac {\Delta _{y}} {{\Delta ^{2} _{x} + \Delta ^{2} _{y}}}} &amp;amp; {{\frac {\Delta _{x}} {{\Delta ^{2} _{x} + \Delta ^{2} _{y}}}}} &amp;amp; -1 \\&#xA; {\frac {\Delta _{y}} {{\Delta ^{2} _{x} + \Delta ^{2} _{y}}}} &amp;amp; -{{\frac {\Delta _{x}} {{\Delta ^{2} _{x} + \Delta ^{2} _{y}}}}} &amp;amp; 0&#xA;\end{pmatrix} &#xA;= &#xA;\begin{pmatrix} &#xA; -\cos\beta &amp;amp; \sin\beta &amp;amp; 0 \\&#xA; -{\frac {\sin \beta} {\rho}} &amp;amp; -{\frac {\cos \beta} {\rho}} &amp;amp; -1 \\&#xA; {\frac {\sin \beta} {\rho}} &amp;amp; {\frac {\cos \beta} {\rho}} &amp;amp; 0 &#xA;\end{pmatrix}&#xA;$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively, since we can write the inverse as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$ \Delta _{x} = -\rho\cos(-\beta) = -\rho\cos\beta $&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$ \Delta _{y} = -\rho\sin(-\beta) = \rho\sin\beta $&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$ \theta = -(\alpha + \beta) $&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;we could write this in matrix form and differentiate to get:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$&#xA;\begin{pmatrix}&#xA; -\cos \beta &amp;amp; 0 &amp;amp; \rho \sin \beta \\&#xA; \sin\beta &amp;amp; 0 &amp;amp; \rho \cos \beta \\&#xA; 0 &amp;amp; -1 &amp;amp; -1 &#xA;\end{pmatrix}&#xA;$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and then invert to obtain J:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$&#xA;J =&#xA;\begin{pmatrix} &#xA; -\cos\beta &amp;amp; \sin\beta &amp;amp; 0 \\&#xA; -{\frac {\sin \beta} {\rho}} &amp;amp; -{\frac {\cos \beta} {\rho}} &amp;amp; -1 \\&#xA; {\frac {\sin \beta} {\rho}} &amp;amp; {\frac {\cos \beta} {\rho}} &amp;amp; 0 &#xA;\end{pmatrix}&#xA;$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$&#xA;J&#xA;\begin{pmatrix}&#xA;  cos \theta &amp;amp; 0 \\&#xA;  sin \theta &amp;amp; 0 \\&#xA;  0 &amp;amp; 1 &#xA;\end{pmatrix}&#xA;\begin{pmatrix}&#xA;  \nu \\&#xA;  \gamma &#xA; \end{pmatrix}&#xA;=&#xA;\begin{pmatrix}&#xA; -\cos \beta \cos \theta + \sin \beta \sin \theta &amp;amp; 0 \\&#xA; - \frac {1} {\rho} (\cos \beta \sin \theta + \sin \beta \cos \theta) &amp;amp; -1 \\ &#xA; \frac {1} {\rho} (\cos \beta \sin \theta + \sin \beta \cos \theta) &amp;amp; 0 &#xA;\end{pmatrix}&#xA;\begin{pmatrix}&#xA;  \nu \\&#xA;  \gamma &#xA;\end{pmatrix} &#xA;$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Simplifying and then substituting &lt;span class=&quot;math-container&quot;&gt;$ \theta = -(\alpha + \beta) $&lt;/span&gt; gives:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$&#xA;= &#xA;\begin{pmatrix}&#xA;  - \cos (\beta + \theta) &amp;amp; 0 \\&#xA;  - \frac {1} {\rho} \sin (\beta + \theta) &amp;amp; -1 \\&#xA;  \frac {1} {\rho} \sin (\beta + \theta) &amp;amp; 0&#xA;\end{pmatrix} &#xA;\begin{pmatrix}&#xA;  \nu \\&#xA;  \gamma &#xA;\end{pmatrix}&#xA;=&#xA;\begin{pmatrix}&#xA;  - \cos \alpha &amp;amp;0 \\&#xA;  {\frac {\sin \alpha} {\rho}} &amp;amp; -1 \\&#xA;  - {\frac {\sin \alpha} {\rho}} &amp;amp; 0&#xA;\end{pmatrix}&#xA;\begin{pmatrix}&#xA;  \nu \\&#xA;  \gamma &#xA;\end{pmatrix}&#xA;$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;So, we can write:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$&#xA;\begin{pmatrix}&#xA;  \dot \rho \\&#xA;  \dot \alpha \\&#xA;  \dot \beta &#xA;\end{pmatrix} &#xA;= &#xA;\begin{pmatrix}&#xA;  -cos \alpha &amp;amp; 0 \\&#xA;  \frac {sin \alpha} {\rho} &amp;amp; -1 \\&#xA;  -\frac {sin \alpha} {\rho} &amp;amp; 0 &#xA;\end{pmatrix}&#xA;\begin{pmatrix}&#xA;  \nu \\&#xA;  \gamma &#xA; \end{pmatrix},&#xA;\text { if } &#xA;\alpha \in&#xA;\begin{pmatrix}&#xA;  -\frac {\pi} {2} , \frac {\pi} {2}&#xA; \end{pmatrix}&#xA;$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which is your second equation.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The equations&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$ \nu = k _{\rho}  \rho $&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$ \gamma = k _{\alpha} \alpha + k _{\beta} \beta $&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;are the linear control law which, when applied to the equation we just derived gives us:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$&#xA;\begin{pmatrix}&#xA;  \dot \rho \\&#xA;  \dot \alpha \\&#xA;  \dot \beta &#xA;\end{pmatrix} &#xA;= &#xA;\begin{pmatrix}&#xA;  - k _{\rho} \rho \cos \alpha \\&#xA;  k _{\rho} \rho \sin \alpha - k _{\alpha} \alpha - k _{\beta} \beta \\&#xA;  -k _{\rho} \sin \alpha &#xA;\end{pmatrix}&#xA;$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;for the closed-loop system.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;And yes, it looks like there may be a typo in the book (on page 76 for the first edition, presumably on page 109 in yours?)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;A list of errata for RVC can be found on &lt;a href=&quot;http://petercorke.com/wordpress/rvc/&quot; rel=&quot;noreferrer&quot;&gt;Peter's website&lt;/a&gt;, and this doesn't appear to be listed for either edition.  I've emailed him (using the address on the errata page) to let him know about it  with a link to your question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively, Peter has recently started using Robotics:SE, so he may see it here (I've suggested an edit to the title to include the name of the book).&lt;/p&gt;&#xA;" OwnerUserId="17029" LastEditorUserId="17029" LastEditDate="2019-04-05T04:42:08.320" LastActivityDate="2019-04-05T04:42:08.320" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18576" PostTypeId="1" CreationDate="2019-04-03T20:15:43.863" Score="0" ViewCount="413" Body="&lt;p&gt;I have a small world file, say&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; ?&amp;gt;&#xA;&amp;lt;sdf version=&quot;1.5&quot;&amp;gt;&#xA;  &amp;lt;world name=&quot;default&quot;&amp;gt;&#xA;    &amp;lt;include&amp;gt;&#xA;      &amp;lt;uri&amp;gt;model://cell&amp;lt;/uri&amp;gt;&#xA;    &amp;lt;/include&amp;gt;&#xA;  &amp;lt;/world&amp;gt;&#xA;&amp;lt;/sdf&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;that is loaded through a trivial &lt;code&gt;.load&lt;/code&gt; file. But I'm getting an error:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Error Code: 11 Msg: Unable to find uri[model://cell]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Simple enough, I thought, I just need to change &lt;code&gt;GAZEBO_MODEL_PATH&lt;/code&gt; or set up a symlink. But as soon as I do the process dies when I start it with the same command (&lt;code&gt;roslaunch my_package my.launch&lt;/code&gt;)&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[gazebo-1] process has died [pid 5661, exit code 255, cmd /opt/ros/melodic/lib/gazebo_ros/gzserver -e ode worlds/world.sdf __name:=gazebo __log:=/home/me/.ros/log/0824ba9e-563e-11e9-8942-fcaa1429a868/gazebo-1.log].&#xA;log file: /home/me/.ros/log/0824ba9e-563e-11e9-8942-fcaa1429a868/gazebo-1*.log&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;There is no log file at that location, unfortunately.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do I need to change other environment variables? Is something else wrong?&lt;/p&gt;&#xA;" OwnerUserId="22710" OwnerDisplayName="Charles" LastEditorUserId="18870" LastEditDate="2019-04-06T19:51:30.387" LastActivityDate="2020-06-02T20:26:55.877" Title="Looking for a model in a gazebo" Tags="&lt;ros&gt;&lt;gazebo&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18578" PostTypeId="2" ParentId="18573" CreationDate="2019-04-06T21:21:14.543" Score="4" Body="&lt;p&gt;Thanks for the question and great derivation by @sempaiscuba.  I first learnt about this kind of controller from the book by Siegwart etal. but the source is &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;&lt;a href=&quot;https://pdfs.semanticscholar.org/f365/8cce9c2729a5ffc8af53d1f5516d50e5e968.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Exponential Stabilization of a Wheeled Mobile Robot Via Discontinuous Control&lt;/a&gt;, A. Astolfi, Journal of Dynamic Systems, Measurement, and Control, March 19999, Vol 121, pp. 121-126.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Yes, there is an error and it should indeed be &lt;span class=&quot;math-container&quot;&gt;$\dot{\rho} = -k_p \rho \cos \alpha$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is an error in the first edition, and fixed in the second, where I mistakenly have the control inputs as &lt;span class=&quot;math-container&quot;&gt;$(v, \gamma)^T$&lt;/span&gt;, as used in @sempaiscuba's solution, rather than &lt;span class=&quot;math-container&quot;&gt;$(v, \omega)^T$&lt;/span&gt;.  This control approach assumes a unicycle rather than a bicycle kino-dynamic model.  The first equation on page 107 of the second edition mistakenly has &lt;span class=&quot;math-container&quot;&gt;$\dot{\omega}$&lt;/span&gt; where it should have &lt;span class=&quot;math-container&quot;&gt;$\dot{y}$&lt;/span&gt; is the left-hand side.  I will get it right for the third edition...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have updated the errata for the book.&lt;/p&gt;&#xA;" OwnerUserId="21223" LastEditorUserId="17029" LastEditDate="2019-04-07T00:01:22.557" LastActivityDate="2019-04-07T00:01:22.557" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18579" PostTypeId="2" ParentId="11618" CreationDate="2019-04-07T14:41:09.503" Score="0" Body="&lt;p&gt;One cheap way to get actual odometer data is to cannibalize an optical computer mouse.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might want to use a &quot;table cloth&quot; with a regular pattern to improve the mouse's &quot;grip&quot; on reality.&lt;/p&gt;&#xA;" OwnerUserId="22732" LastActivityDate="2019-04-07T14:41:09.503" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18580" PostTypeId="2" ParentId="18366" CreationDate="2019-04-07T16:15:49.707" Score="0" Body="&lt;p&gt;I believe you should start from below and up. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, validate the inverse kinematics for the 4 legs you build. Remember that small mistakes accumulate over time, so it's best to ensure minimum error beforehand. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;After that, work on the dynamics of the robot as a whole to ensure the legs stay on path, there should be plenty of articles about quadrupeds on &lt;a href=&quot;https://www.elsevier.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Elsevier&lt;/a&gt; and &lt;a href=&quot;https://ieeexplore.ieee.org/Xplore/home.jsp&quot; rel=&quot;nofollow noreferrer&quot;&gt;IEEE Xplore&lt;/a&gt;, if you have access to these. Even if it's not the same model, they can work as a basis for it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And for last, use the quadruped dynamics and the legs inverse kinematics to develop the kinematics for the quadruped in general.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As said above, you can use a harness to test the hardware, but it's good practice to simulate first. You can do that on &lt;a href=&quot;http://gazebosim.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Gazebo&lt;/a&gt;, &lt;a href=&quot;http://www.coppeliarobotics.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;V-Rep&lt;/a&gt;, etc.&lt;/p&gt;&#xA;" OwnerUserId="22691" LastActivityDate="2019-04-07T16:15:49.707" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18581" PostTypeId="2" ParentId="18543" CreationDate="2019-04-08T02:58:28.073" Score="0" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;im currently programming a robot with 2 wheels and i got the task to&#xA;  let it drive alone for a few minutes in a maze.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Some more information would be nice. reasonable options are (1) a differential drive type with castor/casters, or (2) a Segway type balancing robot. I am assuming option (1). This is however still an issue. what kind of wheels? grippy rubber, holomonic, swerve drive? I shall assume grippy rubber wheels. C'mon man.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I just managed to programm a controller that controls the distance to each wall right &gt; and left. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I don't understand you. A controller as in hardware, or as in software? I am assuming you mean that you have written code that is aware of the walls, and their proximity to the device measuring the distance. You have these values available. OK. I am assuming the values are that of distance (ex: float or int types).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;But now i dont know how to drive to the right and left. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You need to write a program to control the motors. Since the question is a few days old, and I am sure you know this.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I tried but its pretty random if the robot hits one of the walls or drives a perfect curve.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Good job. Motion is better than no motion. Now you have to debug your code to make it usable. If the code is not repeatable and predictable, then your robot is going to be not as impressive as it could be. My advice when writing code (passed to me from a textbook) is don't write the code as cleverly as you can. Why? Because debugging is twice as hard as writing code in the first place. So if you write as cleverly as you can you are not qualified to debug your code. Make your code very easy to read. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I can use the wheel encoder sensors, the infrared sensors and the IMU to navigate the robot. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That sounds like a reasonably capable unit. How much time are you going to invest into this project? I ask because if you are going to spend a lot of time on this unit I recommend implementing some sort of robotic middleware (ex: ROS). If you just want to do the least amount of work, and just hack out a crappy solution, then implement only the hardware you NEED, and use that to achieve your maze navigation objective. The two approaches will generate a significantly different robot even though the hardware is the same. One robot will be stupid ann simply will not hit walls. The other with some minor additions can start to do mapping, localization, path planning, obstacle avoidance and other very cool stuff.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Does anyone of you have an idea how i should program this? Thanks for your help&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;hmmmmm. I don't know how to answer your question. It's a bit vague. So here's a vague answer: assess your robotic objective. Then figure out what data you need from sensors. Then figure out how to control the outputs based on the sensor data you collect. Spend time planning out your project. This will save you tons of time later on. First I would implement the motors; make sure they move, and make sure the robot can handle motion in the environment. This validates all your hardware. Then implement the sensors, lastly build your finite state machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Good luck.&lt;/p&gt;&#xA;" OwnerUserId="18167" LastActivityDate="2019-04-08T02:58:28.073" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18582" PostTypeId="2" ParentId="18493" CreationDate="2019-04-08T03:19:13.677" Score="1" Body="&lt;p&gt;What you are trying to do is very hard. I know because I am doing it: &lt;a href=&quot;https://answers.ros.org/question/271819/please-suggest-all-packages-to-achieve-slam-for-robot/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://answers.ros.org/question/271819/please-suggest-all-packages-to-achieve-slam-for-robot/&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would say to you, what is your objective? are you trying to build skills, or are you trying to build a commercial offering? What is your budget? How many people to share the work? These preliminary questions will begin to create constraints that will eliminate various designs, leaving behind a pretty obvious path to achieving your objective.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To help you with your technical question, please consider this:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;how do you plan on moving. What kind of motors, drivers, are you planning on using? how are you communicating with them?&lt;/li&gt;&#xA;&lt;li&gt;How will you do your mechanical drawings? catching issues before you finalize your design is so much cheaper and easier. &lt;/li&gt;&#xA;&lt;li&gt;what is generating your transformation data? ex: /tf topic in ros?&lt;/li&gt;&#xA;&lt;li&gt;As well, I would recommend adding a PC to your mix. &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;overall, you have a decent view of how to do it. start building, and you will learn what else you need. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's doable, but you have to be committed. really committed. &lt;/p&gt;&#xA;" OwnerUserId="18167" LastActivityDate="2019-04-08T03:19:13.677" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18583" PostTypeId="2" ParentId="18542" CreationDate="2019-04-08T03:29:00.930" Score="0" Body="&lt;p&gt;You can just use one flag, if the purpose of the flag is solely to indicate whether to turn clockwise or anti-clockwise. Name the flag &lt;code&gt;turn_clockwise&lt;/code&gt;, make sure it's true when checking whether to turn clockwise, make sure it's false when checking whether to turn anti-clockwise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could also not have a flag and check the left or right sensor in the moment if that fits your application.&lt;/p&gt;&#xA;" OwnerUserId="17383" LastActivityDate="2019-04-08T03:29:00.930" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18584" PostTypeId="2" ParentId="18574" CreationDate="2019-04-08T05:26:51.347" Score="1" Body="&lt;p&gt;There could be a few generic reasons. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Ensure that the desired Cartesian pose is actually achievable by the robot, i.e the position is within the workspace.&lt;/li&gt;&#xA;&lt;li&gt;As the error mentions about &lt;code&gt;max_steps&lt;/code&gt; parameter, I believe they are using random restarts for something like a Jacobian pseudoinverse based solver; so indeed try giving more steps because intricate Cartesian poses might need more than normal trials.&lt;/li&gt;&#xA;&lt;li&gt;Finally, confirm if it is not a singularity which could trouble the computations. &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I found the information on IK module for LabView on their webpage &lt;a href=&quot;http://zone.ni.com/reference/en-XX/help/372983F-01/lvrobovi/inverse_kinematics/#parent&quot; rel=&quot;nofollow noreferrer&quot;&gt;Inverse Kinematics VI&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18572" LastActivityDate="2019-04-08T05:26:51.347" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18585" PostTypeId="1" CreationDate="2019-04-08T06:49:11.897" Score="0" ViewCount="45" Body="&lt;p&gt;I'm planning to build some simple robotic boats. They will be travelling some distance alone but should also be able to group and physically connect together to form one boat. When they are near each other I want them to be able to &quot;know&quot; that they are near each other, identify each other, communicate and locate each other so that they know how to physically connect to each other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As an example, let's say that we've got 3 boats: X, Y and Z. Boat X should be able to say for example the following:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Boat Y is located at 90 degrees and boat Z is located at 210 degrees from me.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and similarly, boat Y should be able to say:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Boat X is at 270 degrees and boat Z is located at 230 degrees from me.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;My idea was to use bluetooth to make boats identify each other, wifi to communicate and send each other their GPS location to locate each other. I thought it could work like this:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Each boat makes itself permanently discoverable with bluetooth, using a number as bluetooth name (e.g.: &lt;code&gt;boat_1&lt;/code&gt;, &lt;code&gt;boat_48&lt;/code&gt;, &lt;code&gt;boat_285&lt;/code&gt;).&lt;/li&gt;&#xA;&lt;li&gt;When a boat &quot;sees&quot; at least one other boat with a lower number and no boat with a higher number (i.e.: the boat realizes it's the highest number of the group) it sets up a wifi hotspot to which the other boats can connect. This boat becomes the &quot;master&quot; boat hosting the connections to all the boats that are near.&lt;/li&gt;&#xA;&lt;li&gt;The master boat then hosts an API endpoint on the internal network to which all boats can post their information and from which they can retrieve the information of the other boats.&lt;/li&gt;&#xA;&lt;li&gt;All boats continuously post their gps coordinates and continuously retrieve the gps coordinates of the other boats.&lt;/li&gt;&#xA;&lt;li&gt;Using the GPS coordinates the master boat decides what the physical order will be in which the boats should physically connect with each other. So boat X connects to boat Y and boat Z connects to boat X.&lt;/li&gt;&#xA;&lt;li&gt;Every boat moves behind the boat to which he is assigned by the master boat and connects to the boat in front of him.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Apart from some obvious security and failover issues, to me this sounds like something that could work. I have no experience with this though, so I wonder whether anybody knows any better ideas to let boat-robots identify, communicate and locate each other when they're near each other? I read about Zigbee Mesh Networks but since I'm familiar with wifi I thought of starting with that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All tips are welcome!&lt;/p&gt;&#xA;" OwnerUserId="1050" LastEditorUserId="1050" LastEditDate="2019-04-08T06:59:07.630" LastActivityDate="2019-04-11T11:08:20.350" Title="How can robots communicate, locate and identify each other?" Tags="&lt;mobile-robot&gt;&lt;communication&gt;&lt;wifi&gt;&lt;swarm&gt;&lt;identification&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18586" PostTypeId="1" CreationDate="2019-04-08T06:59:24.747" Score="1" ViewCount="20" Body="&lt;p&gt;There are several algorithms for post-processing of kinesthetically demonstrated motions for manipulators learning a task. However, I have failed to find papers/research work on modeling the interaction of the robot with human and accommodating as well as generating the back-driving/active compliance motion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While the human interference can be sensed using joint torque sensors or change in joint angular position, what are the ways to effectively channelize this sensing to actively move the manipulator such that the human doesn't need to apply any considerable external force.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS - I understand that the manipulator runs a zero gravity or a zero gravity zero friction controller to keep the manipulator floating while  in torque control.   &lt;/p&gt;&#xA;" OwnerUserId="18572" LastActivityDate="2019-04-08T06:59:24.747" Title="Control Algorithms for Kinesthetic Teaching" Tags="&lt;control&gt;&lt;manipulator&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18587" PostTypeId="1" CreationDate="2019-04-08T10:34:32.930" Score="0" ViewCount="108" Body="&lt;p&gt;Hello I am new to robotics. So far I have a basic understanding of the camera calibration. One would need rotation and transformation matrices to convert a point from camera coordinate system to robot/arm coordinate system. However; when camera is in hand, as robot moves camera coordinate system will change? I am a bit lost over here as resources are mostly research papers with lots of maths. Any useful links or keywords would be very appreciated! :)&lt;/p&gt;&#xA;" OwnerUserId="22736" LastEditorUserId="22736" LastEditDate="2019-04-08T12:05:08.773" LastActivityDate="2019-05-09T15:02:10.343" Title="RGBD Camera Eye in Hand Calibration" Tags="&lt;cameras&gt;&lt;calibration&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18588" PostTypeId="1" CreationDate="2019-04-08T11:24:58.683" Score="0" ViewCount="71" Body="&lt;p&gt;I'm looking for a reinforcement learning library that can be used for real-time robot control. What I first had in mind was ROS to describe the robot, Mujoco to simulate physics, and OpenAI gym to encapsulate RL. However, to my knowledge, this stack is only suitable when the robot is in simulation. What is the best way to implement and benchmark RL algorithms independent of the underlying control mechanism? Meaning, I would like to write the same algorithms, and just swap out simulated and real robot as needed, but the algos shouldn't know the difference. Thanks.&lt;/p&gt;&#xA;" OwnerUserId="22737" LastEditorUserId="22737" LastEditDate="2019-04-09T08:02:11.743" LastActivityDate="2019-04-09T08:02:11.743" Title="Real-time python reinforcement learning library" Tags="&lt;control&gt;&lt;ros&gt;&lt;python&gt;&lt;real-time&gt;&lt;reinforcement-learning&gt;" AnswerCount="0" CommentCount="2" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18592" PostTypeId="1" AcceptedAnswerId="19320" CreationDate="2019-04-08T20:51:18.453" Score="4" ViewCount="580" Body="&lt;p&gt;Why is the Kalman filter a filter and not a control system? The Kalman filter is a recursive filter which can be used to estimate the internal state of a linear dynamic system with noise in the signal(s). Isn't that the same as a traditional feedforward/feedback control structure (figure below)? &#xA;&lt;a href=&quot;https://i.stack.imgur.com/46cEe.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/46cEe.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;The feedforward controller modification uses anticipated results in the form of a mathematical model, predicting. Then the feedback controller would update the state and give feedback, updating.&lt;/p&gt;&#xA;" OwnerUserId="22659" LastActivityDate="2021-02-10T04:12:17.547" Title="Why is the Kalman filter a filter and not a control system?" Tags="&lt;control&gt;&lt;kalman-filter&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18594" PostTypeId="1" AcceptedAnswerId="18612" CreationDate="2019-04-09T08:54:11.843" Score="0" ViewCount="41" Body="&lt;p&gt;In the book &lt;em&gt;Modern Robotics Chapter 2 Configuration space&lt;/em&gt;, we are told that &lt;em&gt;degrees of freedom&lt;/em&gt; only considers coordinates with real valued continuous range.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why is this the case?&lt;/p&gt;&#xA;" OwnerUserId="22743" LastEditorUserId="37" LastEditDate="2019-04-09T09:44:52.587" LastActivityDate="2019-04-12T00:01:53.607" Title="Why does degree of freedom only consider continuous values?" Tags="&lt;manipulator&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18595" PostTypeId="1" AcceptedAnswerId="18618" CreationDate="2019-04-09T13:52:21.403" Score="2" ViewCount="1052" Body="&lt;p&gt;I'm writing a python script to run with darknet_ros and bebop_autonomy package in order to take the bounding boxes of the detected objects and depending on the position of the detected objects send different flight commands (takeoff, landing, ecc) by using if elif statement.&#xA;I'm struggling as I don't know how to take the published data from darknet_ros topic (list with detected objects coordinates) and use it in the python script.&lt;br&gt;&#xA;Do you have any suggestion on how to do this?&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;import rospy&#xA;from sensor_msgs.msg import Image&#xA;from darknet_ros_msgs.msg import BoundingBoxes&#xA;from std_msgs.msg import Header&#xA;from std_msgs.msg import String&#xA;&#xA;&#xA;def callback(data):&#xA;    rospy.loginfo(rospy.get_caller_id() + 'I heard %s', data.data)&#xA;&#xA;&#xA;def main():&#xA;    while not rospy.is_shutdown():&#xA;        rospy.init_node('listener', anonymous=True)&#xA;        rospy.Subscriber('/darknet_ros/bounding_boxes', BoundingBoxes , callback)&#xA;        rospy.spin()&#xA;&#xA;&#xA;if __name__ == '__main__':&#xA;    try :&#xA;        main()&#xA;    except rospy.ROSInterruptException:&#xA;        pass&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="22745" LastActivityDate="2019-04-12T20:30:30.063" Title="ROS how to use published data in a python script (darknet_ros)" Tags="&lt;ros&gt;&lt;python&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18596" PostTypeId="2" ParentId="18587" CreationDate="2019-04-09T14:20:03.563" Score="1" Body="&lt;p&gt;When you get the pose of an object using a camera, you get that position in relation to the camera frame. If you want that pose in relation to the robot frame, first you have to find the pose transformation from the robot to the camera. If the camera is static and the base is static, the object pose in relation to the robot would be:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://latex.codecogs.com/gif.latex?%5E%7Bbase%7DT_%7Bobject%7D%20%3D%20%5E%7Bbase%7DT_%7Bcamera%7D%20*%20%5E%7Bcamera%7DT_%7Bobject%7D&quot; alt=&quot;enter link description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, if the camera is not static, let's say, it's in the robot hand, which is your case, then the transformation is &lt;strong&gt;fixed in relation to the hand&lt;/strong&gt;. In this case, the transformation would be:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://latex.codecogs.com/gif.latex?%5E%7Bbase%7DT_%7Bobject%7D%20%3D%20%5E%7Bbase%7DT_%7BendEffector%7D%20*%20%5E%7BendEffector%7DT_%7Bcamera%7D%20*%20%5E%7Bcamera%7DT_%7Bobject%7D&quot; alt=&quot;enter link description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;the transformation from base to end effector is given by direct kinematics. Once you have the transformation from end effector to camera, you can find the object pose in relation to the robot frame.&lt;/p&gt;&#xA;" OwnerUserId="22691" LastActivityDate="2019-04-09T14:20:03.563" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18597" PostTypeId="1" AcceptedAnswerId="18852" CreationDate="2019-04-09T19:16:04.907" Score="2" ViewCount="1703" Body="&lt;p&gt;this is my first post about ROS and Gazebo also I am new in ROS.&#xA;I spawn KUKA robot in Gazebo using urdf file from KUKA github repository&#xA;following answer from this question I spawned my urdf file in gazebo simulator and KUKA robot appeared in simulator but problem is that is lying down like is attached on floor for some reason. &#xA;Here is picture in Gazebo:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/QyB5b.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QyB5b.png&quot; alt=&quot;gazebo simulation&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is my launch file:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;launch&amp;gt;&#xA;&amp;lt;!-- We resume the logic in empty_world.launch, changing only the name of the world to be launched --&amp;gt;&#xA;&amp;lt;include file=&quot;&lt;span class=&quot;math-container&quot;&gt;$(find gazebo_ros)/launch/empty_world.launch&quot;&amp;gt;&#xA;  &amp;lt;arg name=&quot;paused&quot; value=&quot;false&quot;/&amp;gt;&#xA;  &amp;lt;arg name=&quot;use_sim_time&quot; value=&quot;true&quot;/&amp;gt;&#xA;  &amp;lt;arg name=&quot;gui&quot; value=&quot;true&quot;/&amp;gt;&#xA;  &amp;lt;arg name=&quot;headless&quot; value=&quot;false&quot;/&amp;gt;&#xA;  &amp;lt;arg name=&quot;debug&quot; value=&quot;false&quot;/&amp;gt;&#xA;&amp;lt;/include&amp;gt;&#xA;&amp;lt;node name=&quot;spawn_urdf&quot; pkg=&quot;gazebo_ros&quot; type=&quot;spawn_model&quot; args=&quot;-file $&lt;/span&gt;(find kuka_kr210_support)/urdf/kr210l150.urdf -urdf -z 1 -model baxter&quot; /&amp;gt;&#xA;&amp;lt;/launch&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;EDIT:&#xA;I fixed base link for the world, added transmission, controllers for each axis and gazebo plugin. now my urdf file looks like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; ?&amp;gt;&#xA;&amp;lt;!-- =================================================================================== --&amp;gt;&#xA;&amp;lt;!-- |    This document was autogenerated by xacro from kr16_2.xacro                   | --&amp;gt;&#xA;&amp;lt;!-- |    EDITING THIS FILE BY HAND IS NOT RECOMMENDED                                 | --&amp;gt;&#xA;&amp;lt;!-- =================================================================================== --&amp;gt;&#xA;&amp;lt;!--Generates a urdf from the macro in kr16_2_macro.xacro --&amp;gt;&#xA;&amp;lt;robot name=&quot;kuka_kr16_2&quot; xmlns:xacro=&quot;http://wiki.ros.org/xacro&quot;&amp;gt;&#xA;  &amp;lt;!-- LINKS --&amp;gt;&#xA;&#xA;&#xA;  &amp;lt;!-- base link --&amp;gt;&#xA;  &amp;lt;link name=&quot;base_link&quot;&amp;gt;&#xA;    &amp;lt;inertial&amp;gt;&#xA;      &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;mass value=&quot;2&quot;/&amp;gt;&#xA;      &amp;lt;inertia ixx=&quot;0.01&quot; ixy=&quot;0&quot; ixz=&quot;0&quot; iyy=&quot;0.01&quot; iyz=&quot;0&quot; izz=&quot;0.01&quot;/&amp;gt;&#xA;    &amp;lt;/inertial&amp;gt;&#xA;    &amp;lt;visual&amp;gt;&#xA;      &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;mesh filename=&quot;package://kuka_kr16_support/meshes/kr16_2/visual/base_link.dae&quot;/&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;    &amp;lt;/visual&amp;gt;&#xA;    &amp;lt;collision&amp;gt;&#xA;      &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;mesh filename=&quot;package://kuka_kr16_support/meshes/kr16_2/collision/base_link.stl&quot;/&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;    &amp;lt;/collision&amp;gt;&#xA;  &amp;lt;/link&amp;gt;&#xA;  &amp;lt;!-- link 1 (A1) --&amp;gt;&#xA;  &amp;lt;link name=&quot;link_1&quot;&amp;gt;&#xA;    &amp;lt;inertial&amp;gt;&#xA;      &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;mass value=&quot;2&quot;/&amp;gt;&#xA;      &amp;lt;inertia ixx=&quot;0.01&quot; ixy=&quot;0&quot; ixz=&quot;0&quot; iyy=&quot;0.01&quot; iyz=&quot;0&quot; izz=&quot;0.01&quot;/&amp;gt;&#xA;    &amp;lt;/inertial&amp;gt;&#xA;    &amp;lt;visual&amp;gt;&#xA;      &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;mesh filename=&quot;package://kuka_kr16_support/meshes/kr16_2/visual/link_1.dae&quot;/&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;    &amp;lt;/visual&amp;gt;&#xA;    &amp;lt;collision&amp;gt;&#xA;      &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;mesh filename=&quot;package://kuka_kr16_support/meshes/kr16_2/collision/link_1.stl&quot;/&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;    &amp;lt;/collision&amp;gt;&#xA;  &amp;lt;/link&amp;gt;&#xA;  &amp;lt;!-- link 2 --&amp;gt;&#xA;  &amp;lt;link name=&quot;link_2&quot;&amp;gt;&#xA;    &amp;lt;inertial&amp;gt;&#xA;      &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;mass value=&quot;2&quot;/&amp;gt;&#xA;      &amp;lt;inertia ixx=&quot;0.01&quot; ixy=&quot;0&quot; ixz=&quot;0&quot; iyy=&quot;0.01&quot; iyz=&quot;0&quot; izz=&quot;0.01&quot;/&amp;gt;&#xA;    &amp;lt;/inertial&amp;gt;&#xA;    &amp;lt;visual&amp;gt;&#xA;      &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;mesh filename=&quot;package://kuka_kr16_support/meshes/kr16_2/visual/link_2.dae&quot;/&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;    &amp;lt;/visual&amp;gt;&#xA;    &amp;lt;collision&amp;gt;&#xA;      &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;mesh filename=&quot;package://kuka_kr16_support/meshes/kr16_2/collision/link_2.stl&quot;/&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;    &amp;lt;/collision&amp;gt;&#xA;  &amp;lt;/link&amp;gt;&#xA;  &amp;lt;!-- link 3 --&amp;gt;&#xA;  &amp;lt;link name=&quot;link_3&quot;&amp;gt;&#xA;    &amp;lt;inertial&amp;gt;&#xA;      &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;mass value=&quot;2&quot;/&amp;gt;&#xA;      &amp;lt;inertia ixx=&quot;0.01&quot; ixy=&quot;0&quot; ixz=&quot;0&quot; iyy=&quot;0.01&quot; iyz=&quot;0&quot; izz=&quot;0.01&quot;/&amp;gt;&#xA;    &amp;lt;/inertial&amp;gt;&#xA;    &amp;lt;visual&amp;gt;&#xA;      &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;mesh filename=&quot;package://kuka_kr16_support/meshes/kr16_2/visual/link_3.dae&quot;/&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;    &amp;lt;/visual&amp;gt;&#xA;    &amp;lt;collision&amp;gt;&#xA;      &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;mesh filename=&quot;package://kuka_kr16_support/meshes/kr16_2/collision/link_3.stl&quot;/&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;    &amp;lt;/collision&amp;gt;&#xA;  &amp;lt;/link&amp;gt;&#xA;  &amp;lt;!-- link 4 --&amp;gt;&#xA;  &amp;lt;link name=&quot;link_4&quot;&amp;gt;&#xA;    &amp;lt;inertial&amp;gt;&#xA;      &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;mass value=&quot;2&quot;/&amp;gt;&#xA;      &amp;lt;inertia ixx=&quot;0.01&quot; ixy=&quot;0&quot; ixz=&quot;0&quot; iyy=&quot;0.01&quot; iyz=&quot;0&quot; izz=&quot;0.01&quot;/&amp;gt;&#xA;    &amp;lt;/inertial&amp;gt;&#xA;    &amp;lt;visual&amp;gt;&#xA;      &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;mesh filename=&quot;package://kuka_kr16_support/meshes/kr16_2/visual/link_4.dae&quot;/&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;    &amp;lt;/visual&amp;gt;&#xA;    &amp;lt;collision&amp;gt;&#xA;      &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;mesh filename=&quot;package://kuka_kr16_support/meshes/kr16_2/collision/link_4.stl&quot;/&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;    &amp;lt;/collision&amp;gt;&#xA;  &amp;lt;/link&amp;gt;&#xA;  &amp;lt;!-- link 5 --&amp;gt;&#xA;  &amp;lt;link name=&quot;link_5&quot;&amp;gt;&#xA;    &amp;lt;inertial&amp;gt;&#xA;      &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;mass value=&quot;2&quot;/&amp;gt;&#xA;      &amp;lt;inertia ixx=&quot;0.01&quot; ixy=&quot;0&quot; ixz=&quot;0&quot; iyy=&quot;0.01&quot; iyz=&quot;0&quot; izz=&quot;0.01&quot;/&amp;gt;&#xA;    &amp;lt;/inertial&amp;gt;&#xA;    &amp;lt;visual&amp;gt;&#xA;      &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;mesh filename=&quot;package://kuka_kr16_support/meshes/kr16_2/visual/link_5.dae&quot;/&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;    &amp;lt;/visual&amp;gt;&#xA;    &amp;lt;collision&amp;gt;&#xA;      &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;mesh filename=&quot;package://kuka_kr16_support/meshes/kr16_2/collision/link_5.stl&quot;/&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;    &amp;lt;/collision&amp;gt;&#xA;  &amp;lt;/link&amp;gt;&#xA;  &amp;lt;!-- link 6 --&amp;gt;&#xA;  &amp;lt;link name=&quot;link_6&quot;&amp;gt;&#xA;    &amp;lt;inertial&amp;gt;&#xA;      &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;mass value=&quot;2&quot;/&amp;gt;&#xA;      &amp;lt;inertia ixx=&quot;0.01&quot; ixy=&quot;0&quot; ixz=&quot;0&quot; iyy=&quot;0.01&quot; iyz=&quot;0&quot; izz=&quot;0.01&quot;/&amp;gt;&#xA;    &amp;lt;/inertial&amp;gt;&#xA;    &amp;lt;visual&amp;gt;&#xA;      &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;mesh filename=&quot;package://kuka_kr16_support/meshes/kr16_2/visual/link_6.dae&quot;/&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;    &amp;lt;/visual&amp;gt;&#xA;    &amp;lt;collision&amp;gt;&#xA;      &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;mesh filename=&quot;package://kuka_kr16_support/meshes/kr16_2/collision/link_6.stl&quot;/&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;    &amp;lt;/collision&amp;gt;&#xA;  &amp;lt;/link&amp;gt;&#xA;  &amp;lt;!-- tool 0 --&amp;gt;&#xA;  &amp;lt;!-- This frame corresponds to the $FLANGE coordinate system in KUKA KRC controllers. &#xA;  &amp;lt;link name=&quot;tool0&quot;/&amp;gt; --&amp;gt;&#xA;&#xA;  &amp;lt;!-- END LINKS --&amp;gt;&#xA;  &amp;lt;!-- JOINTS --&amp;gt;&#xA;  &amp;lt;!-- joint 1 (A1) --&amp;gt;&#xA;  &amp;lt;joint name=&quot;joint_a1&quot; type=&quot;revolute&quot;&amp;gt;&#xA;    &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0.675&quot;/&amp;gt;&#xA;    &amp;lt;parent link=&quot;base_link&quot;/&amp;gt;&#xA;    &amp;lt;child link=&quot;link_1&quot;/&amp;gt;&#xA;    &amp;lt;axis xyz=&quot;0 0 -1&quot;/&amp;gt;&#xA;    &amp;lt;limit effort=&quot;0&quot; lower=&quot;-3.22885911619&quot; upper=&quot;3.22885911619&quot; velocity=&quot;2.72271363311&quot;/&amp;gt;&#xA;  &amp;lt;/joint&amp;gt;&#xA;&#xA;&#xA;   &amp;lt;transmission name=&quot;trans_joint_a1&quot;&amp;gt;&#xA;      &amp;lt;type&amp;gt;transmission_interface/SimpleTransmission&amp;lt;/type&amp;gt;&#xA;      &amp;lt;joint name=&quot;joint_a1&quot;&amp;gt;&#xA;        &amp;lt;hardwareInterface&amp;gt;hardware_interface/EffortJointInterface&amp;lt;/hardwareInterface&amp;gt;&#xA;      &amp;lt;/joint&amp;gt;&#xA;      &amp;lt;actuator name=&quot;motor_joint_a1&quot;&amp;gt;&#xA;        &amp;lt;mechanicalReduction&amp;gt;1&amp;lt;/mechanicalReduction&amp;gt;&#xA;        &amp;lt;hardwareInterface&amp;gt;hardware_interface/EffortJointInterface&amp;lt;/hardwareInterface&amp;gt;&#xA;      &amp;lt;/actuator&amp;gt;&#xA;   &amp;lt;/transmission&amp;gt;&#xA;&#xA;&#xA;  &amp;lt;!-- joint 2 (A2) --&amp;gt;&#xA;  &amp;lt;joint name=&quot;joint_a2&quot; type=&quot;revolute&quot;&amp;gt;&#xA;    &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0.26 0 0&quot;/&amp;gt;&#xA;    &amp;lt;parent link=&quot;link_1&quot;/&amp;gt;&#xA;    &amp;lt;child link=&quot;link_2&quot;/&amp;gt;&#xA;    &amp;lt;axis xyz=&quot;0 1 0&quot;/&amp;gt;&#xA;    &amp;lt;limit effort=&quot;0&quot; lower=&quot;-2.70526034059&quot; upper=&quot;0.610865238198&quot; velocity=&quot;2.72271363311&quot;/&amp;gt;&#xA;  &amp;lt;/joint&amp;gt;&#xA;&#xA;   &amp;lt;transmission name=&quot;trans_joint_a2&quot;&amp;gt;&#xA;      &amp;lt;type&amp;gt;transmission_interface/SimpleTransmission&amp;lt;/type&amp;gt;&#xA;      &amp;lt;joint name=&quot;joint_a2&quot;&amp;gt;&#xA;        &amp;lt;hardwareInterface&amp;gt;hardware_interface/EffortJointInterface&amp;lt;/hardwareInterface&amp;gt;&#xA;      &amp;lt;/joint&amp;gt;&#xA;      &amp;lt;actuator name=&quot;motor_joint_a2&quot;&amp;gt;&#xA;        &amp;lt;mechanicalReduction&amp;gt;1&amp;lt;/mechanicalReduction&amp;gt;&#xA;        &amp;lt;hardwareInterface&amp;gt;hardware_interface/EffortJointInterface&amp;lt;/hardwareInterface&amp;gt;&#xA;      &amp;lt;/actuator&amp;gt;&#xA;   &amp;lt;/transmission&amp;gt;&#xA;&#xA;  &amp;lt;!-- joint 3 (A3) --&amp;gt;&#xA;  &amp;lt;joint name=&quot;joint_a3&quot; type=&quot;revolute&quot;&amp;gt;&#xA;    &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0.68 0 0&quot;/&amp;gt;&#xA;    &amp;lt;parent link=&quot;link_2&quot;/&amp;gt;&#xA;    &amp;lt;child link=&quot;link_3&quot;/&amp;gt;&#xA;    &amp;lt;axis xyz=&quot;0 1 0&quot;/&amp;gt;&#xA;    &amp;lt;limit effort=&quot;0&quot; lower=&quot;-2.26892802759&quot; upper=&quot;2.68780704807&quot; velocity=&quot;2.72271363311&quot;/&amp;gt;&#xA;  &amp;lt;/joint&amp;gt;&#xA;&#xA;   &amp;lt;transmission name=&quot;trans_joint_a3&quot;&amp;gt;&#xA;      &amp;lt;type&amp;gt;transmission_interface/SimpleTransmission&amp;lt;/type&amp;gt;&#xA;      &amp;lt;joint name=&quot;joint_a3&quot;&amp;gt;&#xA;        &amp;lt;hardwareInterface&amp;gt;hardware_interface/EffortJointInterface&amp;lt;/hardwareInterface&amp;gt;&#xA;      &amp;lt;/joint&amp;gt;&#xA;      &amp;lt;actuator name=&quot;motor_joint_a3&quot;&amp;gt;&#xA;        &amp;lt;mechanicalReduction&amp;gt;1&amp;lt;/mechanicalReduction&amp;gt;&#xA;        &amp;lt;hardwareInterface&amp;gt;hardware_interface/EffortJointInterface&amp;lt;/hardwareInterface&amp;gt;&#xA;      &amp;lt;/actuator&amp;gt;&#xA;   &amp;lt;/transmission&amp;gt;&#xA;&#xA;  &amp;lt;!-- joint 4 (A4) --&amp;gt;&#xA;  &amp;lt;joint name=&quot;joint_a4&quot; type=&quot;revolute&quot;&amp;gt;&#xA;    &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0.67 0 -0.035&quot;/&amp;gt;&#xA;    &amp;lt;parent link=&quot;link_3&quot;/&amp;gt;&#xA;    &amp;lt;child link=&quot;link_4&quot;/&amp;gt;&#xA;    &amp;lt;axis xyz=&quot;-1 0 0&quot;/&amp;gt;&#xA;    &amp;lt;limit effort=&quot;0&quot; lower=&quot;-6.10865238198&quot; upper=&quot;6.10865238198&quot; velocity=&quot;5.75958653158&quot;/&amp;gt;&#xA;  &amp;lt;/joint&amp;gt;&#xA;&#xA;   &amp;lt;transmission name=&quot;trans_joint_a4&quot;&amp;gt;&#xA;      &amp;lt;type&amp;gt;transmission_interface/SimpleTransmission&amp;lt;/type&amp;gt;&#xA;      &amp;lt;joint name=&quot;joint_a4&quot;&amp;gt;&#xA;        &amp;lt;hardwareInterface&amp;gt;hardware_interface/EffortJointInterface&amp;lt;/hardwareInterface&amp;gt;&#xA;      &amp;lt;/joint&amp;gt;&#xA;      &amp;lt;actuator name=&quot;motor_joint_a4&quot;&amp;gt;&#xA;        &amp;lt;mechanicalReduction&amp;gt;1&amp;lt;/mechanicalReduction&amp;gt;&#xA;        &amp;lt;hardwareInterface&amp;gt;hardware_interface/EffortJointInterface&amp;lt;/hardwareInterface&amp;gt;&#xA;      &amp;lt;/actuator&amp;gt;&#xA;   &amp;lt;/transmission&amp;gt;&#xA;&#xA;  &amp;lt;!-- joint 5 (A5) --&amp;gt;&#xA;  &amp;lt;joint name=&quot;joint_a5&quot; type=&quot;revolute&quot;&amp;gt;&#xA;    &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;    &amp;lt;parent link=&quot;link_4&quot;/&amp;gt;&#xA;    &amp;lt;child link=&quot;link_5&quot;/&amp;gt;&#xA;    &amp;lt;axis xyz=&quot;0 1 0&quot;/&amp;gt;&#xA;    &amp;lt;limit effort=&quot;0&quot; lower=&quot;-2.26892802759&quot; upper=&quot;2.26892802759&quot; velocity=&quot;5.75958653158&quot;/&amp;gt;&#xA;  &amp;lt;/joint&amp;gt;&#xA;&#xA;   &amp;lt;transmission name=&quot;trans_joint_a5&quot;&amp;gt;&#xA;      &amp;lt;type&amp;gt;transmission_interface/SimpleTransmission&amp;lt;/type&amp;gt;&#xA;      &amp;lt;joint name=&quot;joint_a5&quot;&amp;gt;&#xA;        &amp;lt;hardwareInterface&amp;gt;hardware_interface/EffortJointInterface&amp;lt;/hardwareInterface&amp;gt;&#xA;      &amp;lt;/joint&amp;gt;&#xA;      &amp;lt;actuator name=&quot;motor_joint_a5&quot;&amp;gt;&#xA;        &amp;lt;mechanicalReduction&amp;gt;1&amp;lt;/mechanicalReduction&amp;gt;&#xA;        &amp;lt;hardwareInterface&amp;gt;hardware_interface/EffortJointInterface&amp;lt;/hardwareInterface&amp;gt;&#xA;      &amp;lt;/actuator&amp;gt;&#xA;   &amp;lt;/transmission&amp;gt;&#xA;&#xA;  &amp;lt;!-- joint 6 (A6) --&amp;gt;&#xA;  &amp;lt;joint name=&quot;joint_a6&quot; type=&quot;revolute&quot;&amp;gt;&#xA;    &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;    &amp;lt;parent link=&quot;link_5&quot;/&amp;gt;&#xA;    &amp;lt;child link=&quot;link_6&quot;/&amp;gt;&#xA;    &amp;lt;axis xyz=&quot;-1 0 0&quot;/&amp;gt;&#xA;    &amp;lt;limit effort=&quot;0&quot; lower=&quot;-6.10865238198&quot; upper=&quot;6.10865238198&quot; velocity=&quot;10.7337748998&quot;/&amp;gt;&#xA;  &amp;lt;/joint&amp;gt;&#xA;&#xA;   &amp;lt;transmission name=&quot;trans_joint_a6&quot;&amp;gt;&#xA;      &amp;lt;type&amp;gt;transmission_interface/SimpleTransmission&amp;lt;/type&amp;gt;&#xA;      &amp;lt;joint name=&quot;joint_a6&quot;&amp;gt;&#xA;        &amp;lt;hardwareInterface&amp;gt;hardware_interface/EffortJointInterface&amp;lt;/hardwareInterface&amp;gt;&#xA;      &amp;lt;/joint&amp;gt;&#xA;      &amp;lt;actuator name=&quot;motor_joint_a6&quot;&amp;gt;&#xA;        &amp;lt;mechanicalReduction&amp;gt;1&amp;lt;/mechanicalReduction&amp;gt;&#xA;        &amp;lt;hardwareInterface&amp;gt;hardware_interface/EffortJointInterface&amp;lt;/hardwareInterface&amp;gt;&#xA;      &amp;lt;/actuator&amp;gt;&#xA;   &amp;lt;/transmission&amp;gt;&#xA;&#xA;  &amp;lt;!-- tool frame - fixed frame &#xA;  &amp;lt;joint name=&quot;joint_a6-tool0&quot; type=&quot;fixed&quot;&amp;gt;&#xA;    &amp;lt;parent link=&quot;link_6&quot;/&amp;gt;&#xA;    &amp;lt;child link=&quot;tool0&quot;/&amp;gt;&#xA;    &amp;lt;origin rpy=&quot;0 1.57079632679 0&quot; xyz=&quot;0.158 0 0&quot;/&amp;gt;&#xA;  &amp;lt;/joint&amp;gt;&#xA;&#xA;   &amp;lt;transmission name=&quot;trans_joint_a6-tool0&quot;&amp;gt;&#xA;      &amp;lt;type&amp;gt;transmission_interface/SimpleTransmission&amp;lt;/type&amp;gt;&#xA;      &amp;lt;joint name=&quot;joint_a6-tool0&quot;&amp;gt;&#xA;        &amp;lt;hardwareInterface&amp;gt;EffortJointInterface&amp;lt;/hardwareInterface&amp;gt;&#xA;      &amp;lt;/joint&amp;gt;&#xA;      &amp;lt;actuator name=&quot;motor_joint_a6-tool0&quot;&amp;gt;&#xA;        &amp;lt;mechanicalReduction&amp;gt;1&amp;lt;/mechanicalReduction&amp;gt;&#xA;        &amp;lt;hardwareInterface&amp;gt;EffortJointInterface&amp;lt;/hardwareInterface&amp;gt;&#xA;      &amp;lt;/actuator&amp;gt;&#xA;   &amp;lt;/transmission&amp;gt; --&amp;gt;&#xA;&#xA;  &amp;lt;!-- END JOINTS --&amp;gt;&#xA;  &amp;lt;!-- ROS base_link to KUKA $ROBROOT coordinate system transform --&amp;gt;&#xA;  &amp;lt;link name=&quot;base&quot;/&amp;gt;&#xA;  &amp;lt;joint name=&quot;base_link-base&quot; type=&quot;fixed&quot;&amp;gt;&#xA;    &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;    &amp;lt;parent link=&quot;base_link&quot;/&amp;gt;&#xA;    &amp;lt;child link=&quot;base&quot;/&amp;gt;&#xA;  &amp;lt;/joint&amp;gt;&#xA;&#xA;  &amp;lt;!-- Gazebo world joint --&amp;gt;&#xA;  &amp;lt;!-- Used for fixing robot to Gazebo 'base_link' --&amp;gt;&#xA;  &amp;lt;link name=&quot;world&quot;/&amp;gt;&#xA;&#xA;  &amp;lt;joint name=&quot;fixed&quot; type=&quot;fixed&quot;&amp;gt;&#xA;    &amp;lt;parent link=&quot;world&quot;/&amp;gt;&#xA;    &amp;lt;child link=&quot;base_link&quot;/&amp;gt;&#xA;  &amp;lt;/joint&amp;gt;&#xA;&#xA;&amp;lt;gazebo&amp;gt;&#xA;  &amp;lt;plugin name=&quot;gazebo_ros_control&quot; filename=&quot;libgazebo_ros_control.so&quot;&amp;gt;&#xA;    &amp;lt;robotNamespace&amp;gt;/kr16_2_gazebo&amp;lt;/robotNamespace&amp;gt;&#xA;  &amp;lt;/plugin&amp;gt;&#xA;&amp;lt;/gazebo&amp;gt;&#xA;&#xA;&amp;lt;/robot&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This is controller yaml:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;# Publish all joint states -----------------------------------&#xA;joint_state_controller:&#xA;  type: joint_state_controller/JointStateController&#xA;  publish_rate: 50&#xA;&#xA;# Position Controllers ---------------------------------------&#xA;joint1_position_controller:&#xA;  type: effort_controllers/JointPositionController&#xA;  #joint: base_link__link_01&#xA;  joint: joint_a1&#xA;  pid: {p: 100, i: 100, d: 500.0}&#xA;joint2_position_controller:&#xA;  type: effort_controllers/JointPositionController&#xA;  #joint: link_01__link_02&#xA;  joint: joint_a2&#xA;  pid: {p: 100.0, i: 100, d: 2000.0}&#xA;joint3_position_controller:&#xA;  type: effort_controllers/JointPositionController&#xA;  #joint: link_02__link_03&#xA;  joint: joint_a3&#xA;  pid: {p: 100.0, i: 50, d: 1000.0}&#xA;joint4_position_controller:&#xA;  type: effort_controllers/JointPositionController&#xA;  #joint: link_03__link_04&#xA;  joint: joint_a4&#xA;  pid: {p: 100.0, i: 50, d: 200.0}&#xA;joint5_position_controller:&#xA;  type: effort_controllers/JointPositionController&#xA;  #joint: link_04__link_05&#xA;  joint: joint_a5&#xA;  pid: {p: 100.0, i: 50, d: 70.0}&#xA;joint6_position_controller:&#xA;  type: effort_controllers/JointPositionController&#xA;  #joint: link_05__link_06&#xA;  joint: joint_a6&#xA;  pid: {p: 100.0, i: 50, d: 70.0}&#xA;tool0_position_controller:&#xA;  type: effort_controllers/JointPositionController&#xA;  joint: link_06__tool0&#xA;  #joint: joint1&#xA;  pid: {p: 100.0, i: 50, d: 70.0}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and this is my launch file:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot;?&amp;gt;&#xA;&amp;lt;launch&amp;gt;&#xA;&#xA;&#xA;  &amp;lt;arg name=&quot;paused&quot; default=&quot;false&quot;/&amp;gt;&#xA;  &amp;lt;arg name=&quot;gazebo_gui&quot; default=&quot;true&quot;/&amp;gt;&#xA;  &amp;lt;arg name=&quot;urdf_path&quot; default=&quot;$(find kuka_kr16_support)/urdf/kr16_2_gazebo.urdf&quot;/&amp;gt;&#xA;&#xA;  &amp;lt;!-- startup simulated world --&amp;gt;&#xA;  &amp;lt;include file=&quot;&lt;span class=&quot;math-container&quot;&gt;$(find gazebo_ros)/launch/empty_world.launch&quot;&amp;gt;&#xA;    &amp;lt;arg name=&quot;world_name&quot; default=&quot;worlds/empty.world&quot;/&amp;gt;&#xA;    &amp;lt;arg name=&quot;paused&quot; value=&quot;$&lt;/span&gt;(arg paused)&quot;/&amp;gt;&#xA;    &amp;lt;arg name=&quot;gui&quot; value=&quot;$(arg gazebo_gui)&quot;/&amp;gt;&#xA;  &amp;lt;/include&amp;gt;&#xA;&#xA;  &amp;lt;!-- send robot urdf to param server --&amp;gt;&#xA;  &amp;lt;param name=&quot;robot_description&quot; textfile=&quot;$(arg urdf_path)&quot; /&amp;gt;&#xA;&#xA;  &amp;lt;!-- Load controllers --&amp;gt;&#xA;  &amp;lt;rosparam ns=&quot;/kr16_2_gazebo&quot; command=&quot;load&quot; file=&quot;$(find kuka_kr16_moveit_gazebo)/config/joints.yaml&quot; /&amp;gt;&#xA;&#xA;  &amp;lt;!-- push robot_description to factory and spawn robot in gazebo at the origin, change x,y,z arguments to spawn in a different position --&amp;gt;&#xA;  &amp;lt;node name=&quot;spawn_gazebo_model&quot; pkg=&quot;gazebo_ros&quot; type=&quot;spawn_model&quot; args=&quot;-urdf -param robot_description -model robot -x 0 -y 0 -z 0&quot;&#xA;    respawn=&quot;false&quot; output=&quot;screen&quot; /&amp;gt;&#xA;&#xA;  &amp;lt;!-- Controllers --&amp;gt;&#xA;  &amp;lt;node name=&quot;controller_spawner&quot; pkg=&quot;controller_manager&quot; type=&quot;spawner&quot;&#xA;    respawn=&quot;false&quot; output=&quot;screen&quot; ns=&quot;/kr16_2_gazebo&quot;&#xA;    args=&quot;--namespace=/kr16_2_gazebo&#xA;    joint_state_controller&#xA;    joint1_position_controller&#xA;    joint2_position_controller&#xA;    joint3_position_controller&#xA;    joint4_position_controller&#xA;    joint5_position_controller&#xA;    joint6_position_controller&#xA;    --timeout 60&quot;&amp;gt;&#xA;  &amp;lt;/node&amp;gt;&#xA;&#xA;&#xA;&amp;lt;/launch&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And when I launch it in terminal this is output:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;WARNING: Package name &quot;KUKA_KR16_moveit_Luka1&quot; does not follow the&#xA;  naming conventions. It should start with a lower case letter and only&#xA;  contain lower case letters, digits, underscores, and dashes. ...&#xA;  logging to&#xA;  /home/gazebo/.ros/log/133adcf4-5e8d-11e9-8069-000c2911adc8/roslaunch-ubuntu-3085.log&#xA;  Checking log directory for disk usage. This may take awhile. Press&#xA;  Ctrl-C to interrupt Done checking log file disk usage. Usage is &amp;lt;1GB.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;WARNING: Package name &quot;KUKA_KR16_moveit_Luka1&quot; does not follow the&#xA;  naming conventions. It should start with a lower case letter and only&#xA;  contain lower case letters, digits, underscores, and dashes. started&#xA;  roslaunch server &lt;a href=&quot;http://ubuntu:35047/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://ubuntu:35047/&lt;/a&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;h1&gt;SUMMARY&lt;/h1&gt;&#xA;  &#xA;  &lt;p&gt;PARAMETERS  * /gazebo/enable_ros_network: True  *&#xA;  /kr16_2_gazebo/joint1_position_controller/joint: joint_a1  *&#xA;  /kr16_2_gazebo/joint1_position_controller/pid/d: 500.0  *&#xA;  /kr16_2_gazebo/joint1_position_controller/pid/i: 100  *&#xA;  /kr16_2_gazebo/joint1_position_controller/pid/p: 100  *&#xA;  /kr16_2_gazebo/joint1_position_controller/type: effort_controller... &#xA;  * /kr16_2_gazebo/joint2_position_controller/joint: joint_a2  * /kr16_2_gazebo/joint2_position_controller/pid/d: 2000.0  *&#xA;  /kr16_2_gazebo/joint2_position_controller/pid/i: 100  *&#xA;  /kr16_2_gazebo/joint2_position_controller/pid/p: 100.0  *&#xA;  /kr16_2_gazebo/joint2_position_controller/type: effort_controller... &#xA;  * /kr16_2_gazebo/joint3_position_controller/joint: joint_a3  * /kr16_2_gazebo/joint3_position_controller/pid/d: 1000.0  *&#xA;  /kr16_2_gazebo/joint3_position_controller/pid/i: 50  *&#xA;  /kr16_2_gazebo/joint3_position_controller/pid/p: 100.0  *&#xA;  /kr16_2_gazebo/joint3_position_controller/type: effort_controller... &#xA;  * /kr16_2_gazebo/joint4_position_controller/joint: joint_a4  * /kr16_2_gazebo/joint4_position_controller/pid/d: 200.0  *&#xA;  /kr16_2_gazebo/joint4_position_controller/pid/i: 50  *&#xA;  /kr16_2_gazebo/joint4_position_controller/pid/p: 100.0  *&#xA;  /kr16_2_gazebo/joint4_position_controller/type: effort_controller... &#xA;  * /kr16_2_gazebo/joint5_position_controller/joint: joint_a5  * /kr16_2_gazebo/joint5_position_controller/pid/d: 70.0  *&#xA;  /kr16_2_gazebo/joint5_position_controller/pid/i: 50  *&#xA;  /kr16_2_gazebo/joint5_position_controller/pid/p: 100.0  *&#xA;  /kr16_2_gazebo/joint5_position_controller/type: effort_controller... &#xA;  * /kr16_2_gazebo/joint6_position_controller/joint: joint_a6  * /kr16_2_gazebo/joint6_position_controller/pid/d: 70.0  *&#xA;  /kr16_2_gazebo/joint6_position_controller/pid/i: 50  *&#xA;  /kr16_2_gazebo/joint6_position_controller/pid/p: 100.0  *&#xA;  /kr16_2_gazebo/joint6_position_controller/type: effort_controller... &#xA;  * /kr16_2_gazebo/joint_state_controller/publish_rate: 50  * /kr16_2_gazebo/joint_state_controller/type: joint_state_contr...  *&#xA;  /kr16_2_gazebo/tool0_position_controller/joint: link_06__tool0  *&#xA;  /kr16_2_gazebo/tool0_position_controller/pid/d: 70.0  *&#xA;  /kr16_2_gazebo/tool0_position_controller/pid/i: 50  *&#xA;  /kr16_2_gazebo/tool0_position_controller/pid/p: 100.0  *&#xA;  /kr16_2_gazebo/tool0_position_controller/type: effort_controller...  *&#xA;  /robot_description: &#xA;  &#xA;  &lt;p&gt;NODES   /kr16_2_gazebo/&#xA;      controller_spawner (controller_manager/spawner)   /&#xA;      gazebo (gazebo_ros/gzserver)&#xA;      gazebo_gui (gazebo_ros/gzclient)&#xA;      spawn_gazebo_model (gazebo_ros/spawn_model)&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;auto-starting new master process[master]: started with pid [3096]&#xA;  ROS_MASTER_URI=&lt;a href=&quot;http://localhost:11311&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://localhost:11311&lt;/a&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;setting /run_id to 133adcf4-5e8d-11e9-8069-000c2911adc8 WARNING:&#xA;  Package name &quot;KUKA_KR16_moveit_Luka1&quot; does not follow the naming&#xA;  conventions. It should start with a lower case letter and only contain&#xA;  lower case letters, digits, underscores, and dashes.&#xA;  process[rosout-1]: started with pid [3107] started core service&#xA;  [/rosout] process[gazebo-2]: started with pid [3110]&#xA;  process[gazebo_gui-3]: started with pid [3119]&#xA;  process[spawn_gazebo_model-4]: started with pid [3124]&#xA;  process[kr16_2_gazebo/controller_spawner-5]: started with pid [3125]&#xA;  WARNING: Package name &quot;KUKA_KR16_moveit_Luka1&quot; does not follow the&#xA;  naming conventions. It should start with a lower case letter and only&#xA;  contain lower case letters, digits, underscores, and dashes. WARNING:&#xA;  Package name &quot;KUKA_KR16_moveit_Luka1&quot; does not follow the naming&#xA;  conventions. It should start with a lower case letter and only contain&#xA;  lower case letters, digits, underscores, and dashes. WARNING: Package&#xA;  name &quot;KUKA_KR16_moveit_Luka1&quot; does not follow the naming conventions.&#xA;  It should start with a lower case letter and only contain lower case&#xA;  letters, digits, underscores, and dashes. WARNING: Package name&#xA;  &quot;KUKA_KR16_moveit_Luka1&quot; does not follow the naming conventions. It&#xA;  should start with a lower case letter and only contain lower case&#xA;  letters, digits, underscores, and dashes. [INFO] [1555229566.121403,&#xA;  0.000000]: Controller Spawner: Waiting for service /kr16_2_gazebo/controller_manager/load_controller [ INFO]&#xA;  [1555229567.920658309]: Finished loading Gazebo ROS API Plugin. [&#xA;  INFO] [1555229567.922362082]: waitForService: Service&#xA;  [/gazebo_gui/set_physics_properties] has not been advertised,&#xA;  waiting... [ INFO] [1555229567.927517546]: Finished loading Gazebo ROS&#xA;  API Plugin. [ INFO] [1555229567.928969037]: waitForService: Service&#xA;  [/gazebo/set_physics_properties] has not been advertised, waiting...&#xA;  [INFO] [1555229569.090114, 0.000000]: Loading model XML from ros&#xA;  parameter robot_description [INFO] [1555229569.100970, 0.000000]:&#xA;  Waiting for service /gazebo/spawn_urdf_model [INFO]&#xA;  [1555229569.708130, 0.000000]: Calling service&#xA;  /gazebo/spawn_urdf_model [ INFO] [1555229569.740163120, 0.023000000]:&#xA;  waitForService: Service [/gazebo/set_physics_properties] is now&#xA;  available. [INFO] [1555229570.489737, 0.159000]: Spawn status:&#xA;  SpawnModel: Successfully spawned entity [ INFO] [1555229570.502446729,&#xA;  0.159000000]: Physics dynamic reconfigure ready. [ INFO] [1555229570.679725950, 0.159000000]: Loading gazebo_ros_control plugin&#xA;  [ INFO] [1555229570.680028318, 0.159000000]: Starting&#xA;  gazebo_ros_control plugin in namespace: /kr16_2_gazebo [ INFO]&#xA;  [1555229570.680620454, 0.159000000]: gazebo_ros_control plugin is&#xA;  waiting for model URDF in parameter [/robot_description] on the ROS&#xA;  param server. [spawn_gazebo_model-4] process has finished cleanly log&#xA;  file:&#xA;  /home/gazebo/.ros/log/133adcf4-5e8d-11e9-8069-000c2911adc8/spawn_gazebo_model-4*.log&#xA;  [ INFO] [1555229570.868346785, 0.159000000]: Loaded&#xA;  gazebo_ros_control. [INFO] [1555229570.971088, 0.255000]: Controller&#xA;  Spawner: Waiting for service&#xA;  /kr16_2_gazebo/controller_manager/switch_controller [INFO]&#xA;  [1555229570.980829, 0.257000]: Controller Spawner: Waiting for service&#xA;  /kr16_2_gazebo/controller_manager/unload_controller [INFO]&#xA;  [1555229570.987506, 0.263000]: Loading controller:&#xA;  joint_state_controller [INFO] [1555229571.017423, 0.294000]: Loading&#xA;  controller: joint1_position_controller [INFO] [1555229571.106571,&#xA;  0.377000]: Loading controller: joint2_position_controller [INFO] [1555229571.162822, 0.424000]: Loading controller:&#xA;  joint3_position_controller [INFO] [1555229571.229486, 0.475000]:&#xA;  Loading controller: joint4_position_controller [INFO]&#xA;  [1555229571.288503, 0.515000]: Loading controller:&#xA;  joint5_position_controller [INFO] [1555229571.361675, 0.563000]:&#xA;  Loading controller: joint6_position_controller [INFO]&#xA;  [1555229571.418728, 0.607000]: Controller Spawner: Loaded controllers:&#xA;  joint_state_controller, joint1_position_controller,&#xA;  joint2_position_controller, joint3_position_controller,&#xA;  joint4_position_controller, joint5_position_controller,&#xA;  joint6_position_controller [INFO] [1555229571.426332, 0.612000]:&#xA;  Started controllers: joint_state_controller,&#xA;  joint1_position_controller, joint2_position_controller,&#xA;  joint3_position_controller, joint4_position_controller,&#xA;  joint5_position_controller, joint6_position_controller&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;From output I can see that all controllers are loaded,to confirm it here is output of rostopic:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;&lt;pre&gt;&lt;code&gt;/clock&#xA;/gazebo/link_states&#xA;/gazebo/model_states&#xA;/gazebo/parameter_descriptions&#xA;/gazebo/parameter_updates&#xA;/gazebo/set_link_state&#xA;/gazebo/set_model_state&#xA;/kr16_2_gazebo/joint1_position_controller/command&#xA;/kr16_2_gazebo/joint1_position_controller/pid/parameter_descriptions&#xA;/kr16_2_gazebo/joint1_position_controller/pid/parameter_updates&#xA;/kr16_2_gazebo/joint1_position_controller/state&#xA;/kr16_2_gazebo/joint2_position_controller/command&#xA;/kr16_2_gazebo/joint2_position_controller/pid/parameter_descriptions&#xA;/kr16_2_gazebo/joint2_position_controller/pid/parameter_updates&#xA;/kr16_2_gazebo/joint2_position_controller/state&#xA;/kr16_2_gazebo/joint3_position_controller/command&#xA;/kr16_2_gazebo/joint3_position_controller/pid/parameter_descriptions&#xA;/kr16_2_gazebo/joint3_position_controller/pid/parameter_updates&#xA;/kr16_2_gazebo/joint3_position_controller/state&#xA;/kr16_2_gazebo/joint4_position_controller/command&#xA;/kr16_2_gazebo/joint4_position_controller/pid/parameter_descriptions&#xA;/kr16_2_gazebo/joint4_position_controller/pid/parameter_updates&#xA;/kr16_2_gazebo/joint4_position_controller/state&#xA;/kr16_2_gazebo/joint5_position_controller/command&#xA;/kr16_2_gazebo/joint5_position_controller/pid/parameter_descriptions&#xA;/kr16_2_gazebo/joint5_position_controller/pid/parameter_updates&#xA;/kr16_2_gazebo/joint5_position_controller/state&#xA;/kr16_2_gazebo/joint6_position_controller/command&#xA;/kr16_2_gazebo/joint6_position_controller/pid/parameter_descriptions&#xA;/kr16_2_gazebo/joint6_position_controller/pid/parameter_updates&#xA;/kr16_2_gazebo/joint6_position_controller/state&#xA;/kr16_2_gazebo/joint_states&#xA;/rosout&#xA;/rosout_agg&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;and robot is just like hanging on base link, because base link is only one which has type=fixed and all other have type=revolute.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;here is picture of hanging robot:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/YdRn2.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/YdRn2.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I lift and release robot in gazebo using mouse, robot just fall down and axis are just shaking like there is no motor or any force which keeps them fixed.&lt;/p&gt;&#xA;" OwnerUserId="22747" LastEditorUserId="22747" LastEditDate="2019-04-14T08:24:20.847" LastActivityDate="2021-01-23T19:09:30.307" Title="Why my robot is lying down in gazebo simulator?" Tags="&lt;robotic-arm&gt;&lt;ros&gt;&lt;gazebo&gt;" AnswerCount="5" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18598" PostTypeId="1" CreationDate="2019-04-09T20:37:02.917" Score="0" ViewCount="42" Body="&lt;p&gt;I'm aware that memory mapped addresses that point to registers are sometimes used to control hardware devices. Is that the only way they're controlled? I started asking about how software talks to hardware and most people told me about using registers and memory addresses to talk to devices. Is that the only way software and hardware interact? Thanks! &lt;/p&gt;&#xA;" OwnerUserId="19664" LastActivityDate="2019-04-11T23:08:14.827" Title="Is interacting with registers the only way software and hardware interact?" Tags="&lt;microcontroller&gt;&lt;software&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18599" PostTypeId="1" CreationDate="2019-04-10T17:53:52.560" Score="1" ViewCount="39" Body="&lt;p&gt;I hope someone can help me out with please.&#xA;Revolving platform on rollers. weight 800kg.&#xA;Add car that parks on top . Weight 2000kg&#xA;Total weight 2800kg to be rotated.&#xA;6x dc motors pushing against the edge of the platform.making it rotate.&#xA;motor code TTOEC070240-S2 &#xA;MOTOR SPECS&#xA;24V&#xA;0.07 NM&#xA;3000rpm&#xA;100watt&#xA;GEARBOX&#xA;MNRV025&#xA;60-1 RATIO&lt;/p&gt;&#xA;&#xA;&lt;p&gt;100mm rubber wheels attached to gearbox. The wheels push against the platform edge to make it rotate.&#xA;Final speed out of gearbox is 50rpm&#xA;Platform is 4.4m diameter&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Everything works well with current setup but, the gearboxes overheat. Cannot take the 3000rpm input.&#xA;My question is,&#xA;If I supplied 12v instead of 24v power to the motors, I would be reducing the motor speed to 1500rpm. Which is acceptable to the gearboxes. But I have to change the gearbox ratio to 30-1 so as to keep the final rpm at 50 rpm.&#xA;Will there be enough power to push the 2800kg mass?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance&lt;/p&gt;&#xA;" OwnerUserId="22752" LastActivityDate="2019-04-13T01:34:49.157" Title="Motor vs weight" Tags="&lt;motor&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18601" PostTypeId="5" CreationDate="2019-04-10T19:39:47.203" Score="0" Body="&lt;p&gt;It has active and passive methods. Active methods directly interact with the object, passive methods use previously recorded data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The model can change in time, this is refered as &lt;em&gt;non-rigid&lt;/em&gt; or &lt;em&gt;spatio-temporal&lt;/em&gt; reconstruction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sub&gt;&#xA;References:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;sub&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/3D_reconstruction&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wiki&lt;/a&gt;&lt;/sub&gt;&#xA;&lt;/sub&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6890" LastEditorUserId="6890" LastEditDate="2019-04-11T14:25:10.003" LastActivityDate="2019-04-11T14:25:10.003" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18602" PostTypeId="4" CreationDate="2019-04-10T19:39:47.203" Score="0" Body="Creating a 3-dimensional model of an object or scene from sensor input data.&#xD;&#xA;" OwnerUserId="6890" LastEditorUserId="6890" LastEditDate="2019-04-11T14:24:58.180" LastActivityDate="2019-04-11T14:24:58.180" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18603" PostTypeId="2" ParentId="18597" CreationDate="2019-04-11T08:06:55.287" Score="0" Body="&lt;p&gt;look at this tutorial. You have to add some gazebo specific tag in URDF file. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://gazebosim.org/tutorials/?tut=ros_urdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://gazebosim.org/tutorials/?tut=ros_urdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="22120" LastActivityDate="2019-04-11T08:06:55.287" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18604" PostTypeId="2" ParentId="18598" CreationDate="2019-04-11T10:50:37.773" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;most people told me about using registers and memory addresses to talk to devices&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Shortly, that is the correct answer - if you are interested how software will (ultimately) talk to hardware. How hardware can have an impact on software, things get a lot more complicated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to understand deeply how things happen, you should study how micro-controllers are implemented. Studying the famous 8051 is a very good start, and there are countless books and articles about it. You will have the chance to understand timers, interrupts, ports, buses...&lt;/p&gt;&#xA;" OwnerUserId="22248" LastActivityDate="2019-04-11T10:50:37.773" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18605" PostTypeId="2" ParentId="18585" CreationDate="2019-04-11T11:08:20.350" Score="1" Body="&lt;p&gt;The idea is very interesting, and I wish you good luck implementing it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, it is not (very) simple to implement. Some reasons:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;GPS is not at all accurate;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;smartphones usually have a positioning error of +- 10 meters (30 feet). Unless your boats are actually some transatlantic beasts, this error is unacceptable;&lt;/li&gt;&#xA;&lt;li&gt;GPS receivers with (very) high accuracy cost in the thousands of dollars range - each;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;it is important to know the alignment of the longitudinal axis of the boat (e.g. its angle to the N-S line); consider that a boat can move sideways (unlike a car), so only the GPS signal is not good enough;&lt;/li&gt;&#xA;&lt;li&gt;instead of BT you might be able to use NFC (probably losing some range);&lt;/li&gt;&#xA;&lt;li&gt;to be able to maximize the chances of having a physical connection (between boats), any boat should be able to connect to any boat - an additional level of complexity, but manageable;&lt;/li&gt;&#xA;&lt;li&gt;option to consider during the design phase: when 2 boats are already connected, they will function like 2 boats, or like one?&lt;/li&gt;&#xA;&lt;li&gt;are the dimensions of the boats relevant? should they be exactly of the same size?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So the biggest problem in your case might be the accuracy of (x,y) coordinates, given by the GPS. That accuracy is essential in making a connection.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For measuring relative positions, you may use some IR sensor, which can give you some good accuracies. To add tot he coolness factor, the sensor may rotate like a radar, so the robot can map the surroundings better.&lt;/p&gt;&#xA;" OwnerUserId="22248" LastActivityDate="2019-04-11T11:08:20.350" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="18606" PostTypeId="2" ParentId="18592" CreationDate="2019-04-11T13:57:52.640" Score="1" Body="&lt;p&gt;A Kalman Filter uses a given dynamic model and measurementz to produce a state estimate (as well as a state uncertainty). In that regard, it acts as a filter. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typically you would take the state estimate and design control laws around that. &lt;/p&gt;&#xA;" OwnerUserId="20892" LastActivityDate="2019-04-11T13:57:52.640" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18607" PostTypeId="2" ParentId="18598" CreationDate="2019-04-11T22:30:01.377" Score="0" Body="&lt;p&gt;No. You are talking about &lt;a href=&quot;https://en.wikipedia.org/wiki/Memory-mapped_I/O&quot; rel=&quot;nofollow noreferrer&quot;&gt;memory-mapped I/O&lt;/a&gt;. It means that the CPU see the hardware as if it would be some like a memory module.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All the robots have these three components:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;a controlling mechanism. It means a collection of chips.&lt;/li&gt;&#xA;&lt;li&gt;sensors (to know the world around them).&lt;/li&gt;&#xA;&lt;li&gt;and motors (or, more generally, end-effectors. For example, a robot capable to heat its arms has a non-mechanical end-effector).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;(1) gets the data from the sensors (2), and using the collected data, says to (3) what to do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All the chips have a set of pins. They can send voltage to them, or they can read the voltage on them send by others. The sensors and the end-effectors use electronical (or physical, chemical, anything) means to convert between the voltage on the pins and the external world. This might be quite complex, for example until the &lt;span class=&quot;math-container&quot;&gt;$\mu A$&lt;/span&gt;, 5V current becomes a regulated 3-phase, 50Hz, 380V current on a large industry robot, the steps are not trivial.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But this all is not important. The only important thing is that the CPU has to communicate somehow with the other chips/devices of the robot, and the only question is, how do we call the pins and what type of pins are on which the communication is going on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A simple way, with some disadvantages, if the CPU see the hardware, as if it would be a memory block. If you write a data to a specific memory address, you send data to a device.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another possibility is to have dedicated pins for I/O, it is the port-mapped I/O.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mainly large mainframes had also specific I/O coprocessors, i.e. mediating chips only for I/O tasks.&lt;/p&gt;&#xA;" OwnerUserId="6890" LastEditorUserId="6890" LastEditDate="2019-04-11T23:08:14.827" LastActivityDate="2019-04-11T23:08:14.827" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18608" PostTypeId="5" CreationDate="2019-04-11T22:54:10.670" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2019-04-11T22:54:10.670" LastActivityDate="2019-04-11T22:54:10.670" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18609" PostTypeId="4" CreationDate="2019-04-11T22:54:10.670" Score="0" Body="Quantity causing acceleration in the state space of a mechanical system." OwnerUserId="6890" LastEditorUserId="6890" LastEditDate="2019-04-12T14:55:48.137" LastActivityDate="2019-04-12T14:55:48.137" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18610" PostTypeId="5" CreationDate="2019-04-11T23:06:50.767" Score="0" Body="&lt;p&gt;Autonomous cars use various kinds of technologies. They can be built with GPS sensing knowledge to help with navigation. They may use sensors and other equipment to avoid collisions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Uber's self-driving prototypes use 64 laser beams, along with other sensors. Google's prototypes have lasers, radar, cameras and sonar.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Their control software uses advanced AI algorithms, predictive modelling, obstacle avoidance algorithms and classification to follow traffic rules and to navigate optimally.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They can be further distinguished as being connected or not. Connected cars can communicate with other cars or with the infrastructure of the environment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;References&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Self-driving_car&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia article&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.techopedia.com/definition/30056/autonomous-car&quot; rel=&quot;nofollow noreferrer&quot;&gt;What does autonomous car mean?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6890" LastEditorUserId="6890" LastEditDate="2019-04-12T14:55:57.440" LastActivityDate="2019-04-12T14:55:57.440" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18611" PostTypeId="4" CreationDate="2019-04-11T23:06:50.767" Score="0" Body="A vehicle that is capable to sense its environment and moving in it with little or no human input." OwnerUserId="6890" LastEditorUserId="6890" LastEditDate="2019-04-12T14:55:39.337" LastActivityDate="2019-04-12T14:55:39.337" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18612" PostTypeId="2" ParentId="18594" CreationDate="2019-04-12T00:01:53.607" Score="1" Body="&lt;p&gt;A degree of freedom doesn't necessarily need to be continuous. We can easily define a system that has a discrete degree of freedom. For example, image a mobile robot in &lt;span class=&quot;math-container&quot;&gt;$\mathbb{R}^2$&lt;/span&gt; with a heat sensor. If the temperature is greater than 37 degrees celsius, we consider it to be hot. From 15 degrees to 37, we consider mild, and below 15, cold. In this way we have defined our system's state to be (&lt;span class=&quot;math-container&quot;&gt;$\mathbb{R}$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$\mathbb{R}$&lt;/span&gt;, {hot, mild, cold}). The third element of our state is a discrete degree of freedom.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now an important note is that the system needs to be able to navigate in each degree of freedom. We can easily fit this into our example, by considering that the temperature need not be the same for all &lt;span class=&quot;math-container&quot;&gt;$\mathbb{R}$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The book that you reference is not one that I have read, but I am curious to know if the author was rather stating that, for their purposes, they were only considering continuous degrees of freedom.&lt;/p&gt;&#xA;" OwnerUserId="20709" LastActivityDate="2019-04-12T00:01:53.607" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18614" PostTypeId="2" ParentId="18597" CreationDate="2019-04-12T04:38:34.477" Score="0" Body="&lt;p&gt;This is happening for two reasons:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;An &quot;inertia&quot; element within each &quot;link&quot; element must be properly specified and configured.&lt;/li&gt;&#xA;&lt;li&gt;Maybe you don't have any proper controller for each joint. See &lt;a href=&quot;http://wiki.ros.org/ros_control&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://wiki.ros.org/ros_control&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="18774" LastEditorUserId="9176" LastEditDate="2019-04-12T08:36:10.873" LastActivityDate="2019-04-12T08:36:10.873" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18616" PostTypeId="2" ParentId="18597" CreationDate="2019-04-12T13:23:49.790" Score="-1" Body="&lt;p&gt;Sorry for late answer but I was little bit busy. Here is my urdf file.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; ?&amp;gt;&#xA;&amp;lt;!-- =================================================================================== --&amp;gt;&#xA;&amp;lt;!-- |    This document was autogenerated by xacro from kr16_2.xacro                   | --&amp;gt;&#xA;&amp;lt;!-- |    EDITING THIS FILE BY HAND IS NOT RECOMMENDED                                 | --&amp;gt;&#xA;&amp;lt;!-- =================================================================================== --&amp;gt;&#xA;&amp;lt;!--Generates a urdf from the macro in kr16_2_macro.xacro --&amp;gt;&#xA;&amp;lt;robot name=&quot;kuka_kr16_2&quot; xmlns:xacro=&quot;http://wiki.ros.org/xacro&quot;&amp;gt;&#xA;  &amp;lt;!-- LINKS --&amp;gt;&#xA;  &amp;lt;!-- base link --&amp;gt;&#xA;  &amp;lt;link name=&quot;base_link&quot;&amp;gt;&#xA;    &amp;lt;inertial&amp;gt;&#xA;      &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;mass value=&quot;2&quot;/&amp;gt;&#xA;      &amp;lt;inertia ixx=&quot;0.01&quot; ixy=&quot;0&quot; ixz=&quot;0&quot; iyy=&quot;0.01&quot; iyz=&quot;0&quot; izz=&quot;0.01&quot;/&amp;gt;&#xA;    &amp;lt;/inertial&amp;gt;&#xA;    &amp;lt;visual&amp;gt;&#xA;      &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;mesh filename=&quot;package://kuka_kr16_support/meshes/kr16_2/visual/base_link.dae&quot;/&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;    &amp;lt;/visual&amp;gt;&#xA;    &amp;lt;collision&amp;gt;&#xA;      &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;mesh filename=&quot;package://kuka_kr16_support/meshes/kr16_2/collision/base_link.stl&quot;/&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;    &amp;lt;/collision&amp;gt;&#xA;  &amp;lt;/link&amp;gt;&#xA;  &amp;lt;!-- link 1 (A1) --&amp;gt;&#xA;  &amp;lt;link name=&quot;link_1&quot;&amp;gt;&#xA;    &amp;lt;inertial&amp;gt;&#xA;      &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;mass value=&quot;2&quot;/&amp;gt;&#xA;      &amp;lt;inertia ixx=&quot;0.01&quot; ixy=&quot;0&quot; ixz=&quot;0&quot; iyy=&quot;0.01&quot; iyz=&quot;0&quot; izz=&quot;0.01&quot;/&amp;gt;&#xA;    &amp;lt;/inertial&amp;gt;&#xA;    &amp;lt;visual&amp;gt;&#xA;      &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;mesh filename=&quot;package://kuka_kr16_support/meshes/kr16_2/visual/link_1.dae&quot;/&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;    &amp;lt;/visual&amp;gt;&#xA;    &amp;lt;collision&amp;gt;&#xA;      &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;mesh filename=&quot;package://kuka_kr16_support/meshes/kr16_2/collision/link_1.stl&quot;/&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;    &amp;lt;/collision&amp;gt;&#xA;  &amp;lt;/link&amp;gt;&#xA;  &amp;lt;!-- link 2 --&amp;gt;&#xA;  &amp;lt;link name=&quot;link_2&quot;&amp;gt;&#xA;    &amp;lt;inertial&amp;gt;&#xA;      &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;mass value=&quot;2&quot;/&amp;gt;&#xA;      &amp;lt;inertia ixx=&quot;0.01&quot; ixy=&quot;0&quot; ixz=&quot;0&quot; iyy=&quot;0.01&quot; iyz=&quot;0&quot; izz=&quot;0.01&quot;/&amp;gt;&#xA;    &amp;lt;/inertial&amp;gt;&#xA;    &amp;lt;visual&amp;gt;&#xA;      &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;mesh filename=&quot;package://kuka_kr16_support/meshes/kr16_2/visual/link_2.dae&quot;/&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;    &amp;lt;/visual&amp;gt;&#xA;    &amp;lt;collision&amp;gt;&#xA;      &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;mesh filename=&quot;package://kuka_kr16_support/meshes/kr16_2/collision/link_2.stl&quot;/&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;    &amp;lt;/collision&amp;gt;&#xA;  &amp;lt;/link&amp;gt;&#xA;  &amp;lt;!-- link 3 --&amp;gt;&#xA;  &amp;lt;link name=&quot;link_3&quot;&amp;gt;&#xA;    &amp;lt;inertial&amp;gt;&#xA;      &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;mass value=&quot;2&quot;/&amp;gt;&#xA;      &amp;lt;inertia ixx=&quot;0.01&quot; ixy=&quot;0&quot; ixz=&quot;0&quot; iyy=&quot;0.01&quot; iyz=&quot;0&quot; izz=&quot;0.01&quot;/&amp;gt;&#xA;    &amp;lt;/inertial&amp;gt;&#xA;    &amp;lt;visual&amp;gt;&#xA;      &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;mesh filename=&quot;package://kuka_kr16_support/meshes/kr16_2/visual/link_3.dae&quot;/&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;    &amp;lt;/visual&amp;gt;&#xA;    &amp;lt;collision&amp;gt;&#xA;      &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;mesh filename=&quot;package://kuka_kr16_support/meshes/kr16_2/collision/link_3.stl&quot;/&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;    &amp;lt;/collision&amp;gt;&#xA;  &amp;lt;/link&amp;gt;&#xA;  &amp;lt;!-- link 4 --&amp;gt;&#xA;  &amp;lt;link name=&quot;link_4&quot;&amp;gt;&#xA;    &amp;lt;inertial&amp;gt;&#xA;      &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;mass value=&quot;2&quot;/&amp;gt;&#xA;      &amp;lt;inertia ixx=&quot;0.01&quot; ixy=&quot;0&quot; ixz=&quot;0&quot; iyy=&quot;0.01&quot; iyz=&quot;0&quot; izz=&quot;0.01&quot;/&amp;gt;&#xA;    &amp;lt;/inertial&amp;gt;&#xA;    &amp;lt;visual&amp;gt;&#xA;      &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;mesh filename=&quot;package://kuka_kr16_support/meshes/kr16_2/visual/link_4.dae&quot;/&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;    &amp;lt;/visual&amp;gt;&#xA;    &amp;lt;collision&amp;gt;&#xA;      &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;mesh filename=&quot;package://kuka_kr16_support/meshes/kr16_2/collision/link_4.stl&quot;/&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;    &amp;lt;/collision&amp;gt;&#xA;  &amp;lt;/link&amp;gt;&#xA;  &amp;lt;!-- link 5 --&amp;gt;&#xA;  &amp;lt;link name=&quot;link_5&quot;&amp;gt;&#xA;    &amp;lt;inertial&amp;gt;&#xA;      &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;mass value=&quot;2&quot;/&amp;gt;&#xA;      &amp;lt;inertia ixx=&quot;0.01&quot; ixy=&quot;0&quot; ixz=&quot;0&quot; iyy=&quot;0.01&quot; iyz=&quot;0&quot; izz=&quot;0.01&quot;/&amp;gt;&#xA;    &amp;lt;/inertial&amp;gt;&#xA;    &amp;lt;visual&amp;gt;&#xA;      &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;mesh filename=&quot;package://kuka_kr16_support/meshes/kr16_2/visual/link_5.dae&quot;/&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;    &amp;lt;/visual&amp;gt;&#xA;    &amp;lt;collision&amp;gt;&#xA;      &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;mesh filename=&quot;package://kuka_kr16_support/meshes/kr16_2/collision/link_5.stl&quot;/&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;    &amp;lt;/collision&amp;gt;&#xA;  &amp;lt;/link&amp;gt;&#xA;  &amp;lt;!-- link 6 --&amp;gt;&#xA;  &amp;lt;link name=&quot;link_6&quot;&amp;gt;&#xA;    &amp;lt;inertial&amp;gt;&#xA;      &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;mass value=&quot;2&quot;/&amp;gt;&#xA;      &amp;lt;inertia ixx=&quot;0.01&quot; ixy=&quot;0&quot; ixz=&quot;0&quot; iyy=&quot;0.01&quot; iyz=&quot;0&quot; izz=&quot;0.01&quot;/&amp;gt;&#xA;    &amp;lt;/inertial&amp;gt;&#xA;    &amp;lt;visual&amp;gt;&#xA;      &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;mesh filename=&quot;package://kuka_kr16_support/meshes/kr16_2/visual/link_6.dae&quot;/&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;    &amp;lt;/visual&amp;gt;&#xA;    &amp;lt;collision&amp;gt;&#xA;      &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;mesh filename=&quot;package://kuka_kr16_support/meshes/kr16_2/collision/link_6.stl&quot;/&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;    &amp;lt;/collision&amp;gt;&#xA;  &amp;lt;/link&amp;gt;&#xA;  &amp;lt;!-- tool 0 --&amp;gt;&#xA;  &amp;lt;!-- This frame corresponds to the &lt;span class=&quot;math-container&quot;&gt;$FLANGE coordinate system in KUKA KRC controllers. --&amp;gt;&#xA;  &amp;lt;link name=&quot;tool0&quot;/&amp;gt;&#xA;  &amp;lt;!-- END LINKS --&amp;gt;&#xA;  &amp;lt;!-- JOINTS --&amp;gt;&#xA;  &amp;lt;!-- joint 1 (A1) --&amp;gt;&#xA;  &amp;lt;joint name=&quot;joint_a1&quot; type=&quot;revolute&quot;&amp;gt;&#xA;    &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0.675&quot;/&amp;gt;&#xA;    &amp;lt;parent link=&quot;base_link&quot;/&amp;gt;&#xA;    &amp;lt;child link=&quot;link_1&quot;/&amp;gt;&#xA;    &amp;lt;axis xyz=&quot;0 0 -1&quot;/&amp;gt;&#xA;    &amp;lt;limit effort=&quot;0&quot; lower=&quot;-3.22885911619&quot; upper=&quot;3.22885911619&quot; velocity=&quot;2.72271363311&quot;/&amp;gt;&#xA;  &amp;lt;/joint&amp;gt;&#xA;  &amp;lt;!-- joint 2 (A2) --&amp;gt;&#xA;  &amp;lt;joint name=&quot;joint_a2&quot; type=&quot;revolute&quot;&amp;gt;&#xA;    &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0.26 0 0&quot;/&amp;gt;&#xA;    &amp;lt;parent link=&quot;link_1&quot;/&amp;gt;&#xA;    &amp;lt;child link=&quot;link_2&quot;/&amp;gt;&#xA;    &amp;lt;axis xyz=&quot;0 1 0&quot;/&amp;gt;&#xA;    &amp;lt;limit effort=&quot;0&quot; lower=&quot;-2.70526034059&quot; upper=&quot;0.610865238198&quot; velocity=&quot;2.72271363311&quot;/&amp;gt;&#xA;  &amp;lt;/joint&amp;gt;&#xA;  &amp;lt;!-- joint 3 (A3) --&amp;gt;&#xA;  &amp;lt;joint name=&quot;joint_a3&quot; type=&quot;revolute&quot;&amp;gt;&#xA;    &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0.68 0 0&quot;/&amp;gt;&#xA;    &amp;lt;parent link=&quot;link_2&quot;/&amp;gt;&#xA;    &amp;lt;child link=&quot;link_3&quot;/&amp;gt;&#xA;    &amp;lt;axis xyz=&quot;0 1 0&quot;/&amp;gt;&#xA;    &amp;lt;limit effort=&quot;0&quot; lower=&quot;-2.26892802759&quot; upper=&quot;2.68780704807&quot; velocity=&quot;2.72271363311&quot;/&amp;gt;&#xA;  &amp;lt;/joint&amp;gt;&#xA;  &amp;lt;!-- joint 4 (A4) --&amp;gt;&#xA;  &amp;lt;joint name=&quot;joint_a4&quot; type=&quot;revolute&quot;&amp;gt;&#xA;    &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0.67 0 -0.035&quot;/&amp;gt;&#xA;    &amp;lt;parent link=&quot;link_3&quot;/&amp;gt;&#xA;    &amp;lt;child link=&quot;link_4&quot;/&amp;gt;&#xA;    &amp;lt;axis xyz=&quot;-1 0 0&quot;/&amp;gt;&#xA;    &amp;lt;limit effort=&quot;0&quot; lower=&quot;-6.10865238198&quot; upper=&quot;6.10865238198&quot; velocity=&quot;5.75958653158&quot;/&amp;gt;&#xA;  &amp;lt;/joint&amp;gt;&#xA;  &amp;lt;!-- joint 5 (A5) --&amp;gt;&#xA;  &amp;lt;joint name=&quot;joint_a5&quot; type=&quot;revolute&quot;&amp;gt;&#xA;    &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;    &amp;lt;parent link=&quot;link_4&quot;/&amp;gt;&#xA;    &amp;lt;child link=&quot;link_5&quot;/&amp;gt;&#xA;    &amp;lt;axis xyz=&quot;0 1 0&quot;/&amp;gt;&#xA;    &amp;lt;limit effort=&quot;0&quot; lower=&quot;-2.26892802759&quot; upper=&quot;2.26892802759&quot; velocity=&quot;5.75958653158&quot;/&amp;gt;&#xA;  &amp;lt;/joint&amp;gt;&#xA;  &amp;lt;!-- joint 6 (A6) --&amp;gt;&#xA;  &amp;lt;joint name=&quot;joint_a6&quot; type=&quot;revolute&quot;&amp;gt;&#xA;    &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;    &amp;lt;parent link=&quot;link_5&quot;/&amp;gt;&#xA;    &amp;lt;child link=&quot;link_6&quot;/&amp;gt;&#xA;    &amp;lt;axis xyz=&quot;-1 0 0&quot;/&amp;gt;&#xA;    &amp;lt;limit effort=&quot;0&quot; lower=&quot;-6.10865238198&quot; upper=&quot;6.10865238198&quot; velocity=&quot;10.7337748998&quot;/&amp;gt;&#xA;  &amp;lt;/joint&amp;gt;&#xA;  &amp;lt;!-- tool frame - fixed frame --&amp;gt;&#xA;  &amp;lt;joint name=&quot;joint_a6-tool0&quot; type=&quot;fixed&quot;&amp;gt;&#xA;    &amp;lt;parent link=&quot;link_6&quot;/&amp;gt;&#xA;    &amp;lt;child link=&quot;tool0&quot;/&amp;gt;&#xA;    &amp;lt;origin rpy=&quot;0 1.57079632679 0&quot; xyz=&quot;0.158 0 0&quot;/&amp;gt;&#xA;  &amp;lt;/joint&amp;gt;&#xA;  &amp;lt;!-- END JOINTS --&amp;gt;&#xA;  &amp;lt;!-- ROS base_link to KUKA $&lt;/span&gt;ROBROOT coordinate system transform --&amp;gt;&#xA;  &amp;lt;link name=&quot;base&quot;/&amp;gt;&#xA;  &amp;lt;joint name=&quot;base_link-base&quot; type=&quot;fixed&quot;&amp;gt;&#xA;    &amp;lt;origin rpy=&quot;0 0 0&quot; xyz=&quot;0 0 0&quot;/&amp;gt;&#xA;    &amp;lt;parent link=&quot;base_link&quot;/&amp;gt;&#xA;    &amp;lt;child link=&quot;base&quot;/&amp;gt;&#xA;  &amp;lt;/joint&amp;gt;&#xA;&amp;lt;/robot&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="22747" LastActivityDate="2019-04-12T13:23:49.790" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18617" PostTypeId="1" CreationDate="2019-04-12T19:03:42.557" Score="1" ViewCount="52" Body="&lt;p&gt;im looking to buy irobot-creat, i can't find it on amazon or any other place. Im on Chile, would be any shipping options?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="22762" LastActivityDate="2019-04-23T12:35:22.107" Title="Where can I buy irobot-create?" Tags="&lt;irobot-create&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18618" PostTypeId="2" ParentId="18595" CreationDate="2019-04-12T20:30:30.063" Score="0" Body="&lt;p&gt;&lt;code&gt;BoundingBoxes&lt;/code&gt; message is a custom created &lt;code&gt;msg&lt;/code&gt; by &lt;em&gt;darknet_ros&lt;/em&gt; package, so due to &lt;a href=&quot;https://github.com/leggedrobotics/darknet_ros/tree/master/darknet_ros_msgs/msg&quot; rel=&quot;nofollow noreferrer&quot;&gt;this information&lt;/a&gt; we will have the like following log to get the X and Y:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;def callback(data):&#xA;    for box in data.bounding_boxes:&#xA;        rospy.loginfo(&#xA;            &quot;Xmin: {}, Xmax: {} Ymin: {}, Ymax: {}&quot;.format(&#xA;                box.xmin, box.xmax, box.ymin, box.ymax&#xA;            )&#xA;        )&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="18870" LastActivityDate="2019-04-12T20:30:30.063" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="18619" PostTypeId="1" AcceptedAnswerId="18635" CreationDate="2019-04-12T21:24:06.750" Score="3" ViewCount="75" Body="&lt;p&gt;I recently saw this video on YouTube featuring a jumping robot: &lt;a href=&quot;https://www.youtube.com/watch?v=6b4ZZQkcNEo&quot; rel=&quot;nofollow noreferrer&quot;&gt;5 Fastest Robots In The World&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was curious how this is accomplished mechanically? Do they wind a strong spring or use some sort of air powered piston? &lt;/p&gt;&#xA;" OwnerUserId="22765" LastEditorUserId="9176" LastEditDate="2019-04-24T07:50:32.310" LastActivityDate="2019-04-24T07:50:32.310" Title="High power jumping mechanism in small robots" Tags="&lt;mobile-robot&gt;&lt;mechanism&gt;&lt;power&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18620" PostTypeId="1" CreationDate="2019-04-12T22:01:52.787" Score="0" ViewCount="19" Body="&lt;p&gt;I am new to this forum. I want to create a mechanical structure as depicted in the image &lt;a href=&quot;https://i.stack.imgur.com/odIIj.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;A pangolin bag&lt;/a&gt;. And further wouls like to automate the closing and opening of the bag. But I am facing issues with the design and movements of these layers. One layer is blocking another layer from moving or i must say rotating. They kind of block each other . Is there a sophisticated design to achieve this ?? Simply cutting flaps(layers) of equal length won't work. I think the lowest flap should be of smallest length. But the problem arises when you punch hole these layers by a same amount of length and then try to rotate them. They blocks &lt;/p&gt;&#xA;" OwnerUserId="22766" LastActivityDate="2019-04-12T22:28:47.233" Title="How should I create a Pangolin (Armadillo) structure?" Tags="&lt;design&gt;&lt;mechanism&gt;&lt;rotation&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18621" PostTypeId="2" ParentId="18352" CreationDate="2019-04-12T22:04:37.810" Score="1" Body="&lt;p&gt;If your only goal is a constant speed throughout the charge cycle of the battery, you could drop the voltage to something below the low end of the battery range. If you set the voltage at 3.7 V, you'll draw less current at the high end of the battery charge and more at the low end, but the voltage should stay constant.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, this doesn't give you the maximum speed possible at all times. For that, using something like what Kojoe mentioned is your best bet, but it will drain your battery faster.&lt;/p&gt;&#xA;" OwnerUserId="20722" LastActivityDate="2019-04-12T22:04:37.810" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18622" PostTypeId="2" ParentId="18620" CreationDate="2019-04-12T22:28:47.233" Score="1" Body="&lt;p&gt;I would work backwards, looking at the design when it is closed. From that, you'll see how much larger each piece needs to be than the one below. Each piece is probably connected to the one below it with fabric.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To actuate this, you could simply rotate the top-most piece upwards, which will pull the pieces below with the fabric connectors.&lt;/p&gt;&#xA;" OwnerUserId="20722" LastActivityDate="2019-04-12T22:28:47.233" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18623" PostTypeId="2" ParentId="16532" CreationDate="2019-04-13T01:17:45.693" Score="1" Body="&lt;p&gt;Surprisingly, IK for a 5DOF robot arm is much harder than for a 6DOF arm.  The reason is because a 5DOF arm cannot achieve an arbitrary pose in task space.  Pose is typically expressed in terms of a 4x4 homogeneous transformation matrix (&lt;span class=&quot;math-container&quot;&gt;$\in SO(3)$&lt;/span&gt;) which encodes position (3 task-space DOF) and orientation (3 task-space DOF).  To solve IK for your 5DOF robot you need to decide which task-space DOF you don't care about.  For example you can compute IK that will take the end-effector to the desired position, and perhaps a desired roll and pitch angle, but you have no control over the yaw angle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried to explain this at greater length with examples in a &lt;a href=&quot;http://petercorke.com/wordpress/4-is-harder-than-6-inverse-kinematics-for-underactuated-robots&quot; rel=&quot;nofollow noreferrer&quot;&gt;tutorial&lt;/a&gt; for the 4DOF case.&lt;/p&gt;&#xA;" OwnerUserId="21223" LastActivityDate="2019-04-13T01:17:45.693" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18624" PostTypeId="2" ParentId="18599" CreationDate="2019-04-13T01:34:49.157" Score="2" Body="&lt;p&gt;The weight is not really relevant, it is the rolling friction.  In steady state the motor torque &lt;span class=&quot;math-container&quot;&gt;$\tau_m$&lt;/span&gt; is equal to the friction torque &lt;span class=&quot;math-container&quot;&gt;$\tau_f$&lt;/span&gt; which is related to angular velocity &lt;span class=&quot;math-container&quot;&gt;$\omega$&lt;/span&gt; by&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\tau_f = B \omega$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where &lt;span class=&quot;math-container&quot;&gt;$B$&lt;/span&gt; is the friction coefficient (which will be proportional to weight).  The power required is &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$P = \tau_f \omega = B \omega^2$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;so if you halve the input voltage you will need to double the current to provide the same amount of power, ie. to rotate the turntable at the same speed.  This is likely to move the pain from the gearboxes to the motors.  Perhaps add more motors at the original gear ratios so that everything is a bit less stressed -- your components will last longer.&lt;/p&gt;&#xA;" OwnerUserId="21223" LastActivityDate="2019-04-13T01:34:49.157" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18625" PostTypeId="1" CreationDate="2019-04-13T03:06:34.843" Score="0" ViewCount="35" Body="&lt;p&gt;I need to automate a process that involves applying hot glue to paper. I own a standard handheld hot glue gun, like this one:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Ew3w7.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Ew3w7.png&quot; alt=&quot;hot glue gun&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sticks of room-temperature glue are fed in the right side. Pulling the trigger slightly advances the stick of glue. The orange tip on the left is heated, melting the glue stick, and the pressure of the advancing glue stick causes heated liquid glue to come out of the tip. It quickly cools once it's applied to a surface such as paper, and becomes a room-temperature adhesive within just a few seconds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Industrial-scale machines exist to apply hot glue to surfaces, but they are very expensive. They don't involve glue sticks and hand-activated triggers; they involve glue beads and some other mechanism for forcing liquid hot glue out of the heated nozzle, and then cutting it off.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using either the glue gun that I already own, or simply the sticks of glue with another heating-and-pressure mechanism, is there a simple way to robotically apply hot glue to paper?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: In my application, the paper will be on a flat tray. The 'bot needs to apply a line of glue around the edge of a 1&quot; circle, or a 1&quot; square. Once the application is complete the glue should stop emitting from the gun. There is often a &quot;streamer&quot; of glue after it stops emitting; I want this to be handled without a mess. The paper is then move a few inches, and the 'bot squirts out another circle or square of glue. The process keeps repeating.&lt;/p&gt;&#xA;" OwnerUserId="20996" LastEditorUserId="20996" LastEditDate="2019-04-13T14:18:08.527" LastActivityDate="2019-04-14T08:52:13.157" Title="Design a robot that can apply hot glue to paper" Tags="&lt;control&gt;&lt;design&gt;&lt;mechanism&gt;&lt;actuator&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="18627" PostTypeId="2" ParentId="18450" CreationDate="2019-04-13T08:43:51.433" Score="0" Body="&lt;p&gt;The &lt;a href=&quot;http://wiki.ros.org/ar_track_alvar&quot; rel=&quot;nofollow noreferrer&quot;&gt;ar_track_alvar&lt;/a&gt; offers a neat way to locate the pose of each camera relative to multiple marker tags. By aggregating the information from multiple tags you should be able to get a robust measurement. &lt;/p&gt;&#xA;" OwnerUserId="21986" LastActivityDate="2019-04-13T08:43:51.433" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18628" PostTypeId="1" AcceptedAnswerId="18631" CreationDate="2019-04-13T10:43:48.857" Score="1" ViewCount="693" Body="&lt;p&gt;Can anyone explain Image based visual servoing for robotic arm through example?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can understand Position based based visual servoing like this,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;....&lt;/p&gt;&#xA;&#xA;&lt;p&gt;there is an object and estimating it 6D Pose relative to camera using feature points(ex. using algorithm like PnP) and give this Pose to controller  directly for pick...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;....&lt;/p&gt;&#xA;&#xA;&lt;p&gt;but what about Image based servoing?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks. &lt;/p&gt;&#xA;" OwnerUserId="22120" LastActivityDate="2019-07-24T13:47:35.877" Title="Position vs Image based visual servoing?" Tags="&lt;cameras&gt;&lt;industrial-robot&gt;&lt;pose&gt;&lt;visual-servoing&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18629" PostTypeId="1" AcceptedAnswerId="18982" CreationDate="2019-04-13T15:25:26.463" Score="0" ViewCount="223" Body="&lt;p&gt;Motor, irregular rigid body of Different materials Forming a single robotic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, Industrial robot, every geometric shape of the link is very complex. But we can find inertia matrix form CAD software, how these software tools calculate the inertia matrix of a single robotic arm? Is this inertia matrix accurate or equivalent?&lt;/p&gt;&#xA;" OwnerUserId="19138" LastActivityDate="2019-06-25T23:58:43.737" Title="Calculate the inertia matrix of complex robotic mechanism" Tags="&lt;robotic-arm&gt;&lt;motor&gt;&lt;dynamics&gt;&lt;industrial-robot&gt;&lt;actuator&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18631" PostTypeId="2" ParentId="18628" CreationDate="2019-04-13T21:15:58.537" Score="2" Body="&lt;p&gt;The problem in both cases is to move the robot tool to some pose relative to an object.  Let's assume the camera is attached to the end of a robot arm (eye in hand case) so we will consider this a problem in moving the camera.  The tool will always be at a fixed relative pose to the camera.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In PBVS we uses a geometric model of the object, plus known camera parameters, to estimate the pose of the object relative to the camera.  If we know the desired pose of the object relative to the camera it is straightforward to compute the error in pose and then plan a robot motion to correct it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In IBVS we do not use or need a geometric model of the object, but we do need to be able to find some features in the camera's image of the object.  The features can be the coordinates of points, parameters of lines or ellipses, moments etc.  Let's take the simple example of point features.  The position of the points in the image depends, in a complex way, on the relative pose between the camera and the object, ie. if you move the camera the points on the object move in the image. IBVS requires that we know where the point features are in the camera image when the camera is at the desired pose -- the desired point features.  If the camera is not at the desired pose then the point features will be at different places in the camera image.  IBVS takes the currently observed point features and &lt;em&gt;directly computes&lt;/em&gt; the desired velocity of the camera that will move the points to the desired location in the image, and implicitly drive the camera to the desired relative pose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are a ton of caveats and extra details, but this is the gist of the difference between PBVS and IBVS.&lt;/p&gt;&#xA;" OwnerUserId="21223" LastActivityDate="2019-04-13T21:15:58.537" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="18632" PostTypeId="5" CreationDate="2019-04-13T23:00:24.583" Score="0" Body="&lt;p&gt;A hexapod (hexa (greek): six , pod (greek): foot) is a special form of a parallel kinematic machine that has six legs. The typical construction of the hexapod allows mobility in all six degrees of freedom (three translational and three rotational). Due to the parallel arrangement of the drives, hexapods have a better payload to deadweight ratio compared to serial robots.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first hexapod is said to have been built in the 1950s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Advantages:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;High dynamics and low moving masses. This results in high accelerations and final speeds (rapid traverse) and a correspondingly faster workpiece machining or manipulation.&lt;/li&gt;&#xA;&lt;li&gt;Positioning accuracy is basically better with a parallel kinematics system, since position errors of the axes do not accumulate.&lt;/li&gt;&#xA;&lt;li&gt;High mobility. The degree of freedom of the tool or the tool holder reaches almost spherical 5-sides. However, traditional machines with serial kinematics today achieve a comparably high degree of freedom with the simultaneous use of pivoting tool heads and rotating clamping tables.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Disadvantages:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The spatial clamping of the hexapod construction results in a limited mobility. For the same reason, a hexapod construction in machine tools requires a comparatively larger footprint.&lt;/li&gt;&#xA;&lt;li&gt;The lower mass of the construction requires a much higher susceptibility to vibration, which is generally very undesirable, especially during machining (roughness).&lt;/li&gt;&#xA;&lt;li&gt;Design-related sensitivity or a correspondingly high wear of the usually very expensive feed modules.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/dNsRp.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dNsRp.png&quot; alt=&quot;Hexapod (rendered)&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;References&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://de.wikipedia.org/wiki/Hexapod&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wiki page&lt;/a&gt; (german)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6890" LastEditorUserId="6890" LastEditDate="2019-04-14T00:11:05.170" LastActivityDate="2019-04-14T00:11:05.170" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18633" PostTypeId="4" CreationDate="2019-04-13T23:00:24.583" Score="0" Body="A hexapod is a spatial movement machine with six drive elements." OwnerUserId="6890" LastEditorUserId="6890" LastEditDate="2019-04-14T00:08:59.097" LastActivityDate="2019-04-14T00:08:59.097" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18635" PostTypeId="2" ParentId="18619" CreationDate="2019-04-14T08:03:23.647" Score="3" Body="&lt;p&gt;Looks like it uses a propane powered ram to launch itself into the air.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The end of the piston is visible in the back of the vehicle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This webpage states that source of power is battery and propane&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://bostondynamics.com/sandflea&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://bostondynamics.com/sandflea&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also found this patent for a combustion powered linear actuator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://patents.google.com/patent/US7263955B1/en&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://patents.google.com/patent/US7263955B1/en&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19143" LastEditorUserId="19143" LastEditDate="2019-04-14T08:18:59.837" LastActivityDate="2019-04-14T08:18:59.837" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18636" PostTypeId="2" ParentId="18625" CreationDate="2019-04-14T08:52:13.157" Score="1" Body="&lt;p&gt;The problem I see is that after a while of holding the trigger, you have to let go of the trigger and then squeeze again. This is because the trigger has advanced the stick of glue as far as the travel allows it. So by squeezing it again, the trigger goes further up the glue stick and grips at a new location.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can either automate this squeeze-release-squeeze-release pattern or look at adding a continuous feed solution (&lt;a href=&quot;https://www.adco.co.uk/products-and-services/applicators-glue-guns/hot-melt-applicators/&quot; rel=&quot;nofollow noreferrer&quot;&gt;such as these&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You are only after 1&quot; squares or circles so I think the trigger method would suffice. The actuation method could be pneumatic or electric, it doesn't really matter. As long as you can get the squeeze-release motion. At the the time releasing the trigger you would need to stop the motion until you are back into the squeeze part of the cycle again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A standard X-Y gantry system would be sufficient. These can be cheeply purchased off sites such as AliExpress or Ebay. &lt;a href=&quot;https://www.aliexpress.com/item/DIY-XY-Plotter-drawbot-pen-drawing-robot-machine-lettering-corexy-A4-A3-engraving-area-frame-plotter/32952725307.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Like this one&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/QQXPs.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QQXPs.jpg&quot; alt=&quot;XY CNC Plotter&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will need stepper motors and software (such as Mach 3 or Linux CNC) to drive the stepper motors using G-code.&lt;/p&gt;&#xA;" OwnerUserId="14782" LastActivityDate="2019-04-14T08:52:13.157" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18639" PostTypeId="1" CreationDate="2019-04-14T14:37:08.580" Score="0" ViewCount="46" Body="&lt;p&gt;What is the correct algorithm name for this &lt;em&gt;Shortest Path Maze Solver&lt;/em&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The algorithm works by completing the maze and at each turn storing each of the turns in an array until the maze once the maze is completed you would have an array of moves [LEFT,RIGHT,LEFT,LEFT,LEFT,RIGHT] then running it again and replacing the dead ends with STRAIGHT So now the shortest path would be [LEFT, STRAIGHT, LEFT, STRAIGHT] then the robot would execute this path.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a name for this algorithm? &lt;/p&gt;&#xA;" OwnerUserId="22771" LastEditorUserId="9176" LastEditDate="2019-04-14T15:44:21.747" LastActivityDate="2019-04-14T15:44:21.747" Title="What is the correct algorithm name for this &quot;Shortest Path Maze Solver&quot;?" Tags="&lt;algorithm&gt;&lt;robotc&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18640" PostTypeId="5" CreationDate="2019-04-14T18:01:34.687" Score="0" Body="&lt;p&gt;High conductivity semisolid (gel) polymers form this electrolyte. These batteries provide higher specific energy than other lithium battery types and are used in applications where weight is a critical feature, like mobile devices and radio-controlled aircraft.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Li-polymer offers slightly higher specific energy and can be made thinner than conventional Li-ion, but the manufacturing cost is said to be higher than cylindrical design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/57ufA.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/57ufA.jpg&quot; alt=&quot;3-Cell LiPo battery for RC models&quot;&gt;&lt;/a&gt;&#xA;&lt;sup&gt;3-Cell LiPo battery for &lt;a href=&quot;/questions/tagged/radio-control&quot; class=&quot;post-tag&quot; title=&quot;show questions tagged &amp;#39;radio-control&amp;#39;&quot; rel=&quot;tag&quot;&gt;radio-control&lt;/a&gt; models&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sources&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Lithium_polymer_battery&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://batteryuniversity.com/learn/article/the_li_polymer_battery_substance_or_hype&quot; rel=&quot;nofollow noreferrer&quot;&gt;BU-206: Lithium-polymer: Substance or Hype?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.androidauthority.com/lithium-ion-vs-lithium-polymer-whats-the-difference-27608/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Lithium Ion vs. Lithium Polymer – What’s the Difference?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6890" LastEditorUserId="6890" LastEditDate="2019-04-15T10:22:32.193" LastActivityDate="2019-04-15T10:22:32.193" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18641" PostTypeId="4" CreationDate="2019-04-14T18:01:34.687" Score="0" Body="A lithium polymer battery, or more correctly lithium-ion polymer battery (abbreviated as LiPo, LIP, Li-poly, lithium-poly and others), is a rechargeable battery of lithium-ion technology using a polymer electrolyte instead of a liquid electrolyte." OwnerUserId="6890" LastEditorUserId="6890" LastEditDate="2019-04-15T10:22:36.537" LastActivityDate="2019-04-15T10:22:36.537" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18642" PostTypeId="1" CreationDate="2019-04-14T19:04:21.207" Score="0" ViewCount="1036" Body="&lt;p&gt;I'm trying to simulate data fusion for a 4-wheeled mobile robot using ekf and am using IMU and wheel encoders as sensors,where IMU measures linear acceleration and angular velocity  and encoder measures left and right wheel linear velocity all in body frame. now I need the measurement data for both sensors in a way that they fit each other(I mean acceleration in IMU is related to left and right velocity in encoder) but can't make the connection .I really appreciate it if anyone can help me with that.&lt;/p&gt;&#xA;" OwnerUserId="22772" LastActivityDate="2020-05-09T21:06:50.820" Title="IMU and encoder fusion" Tags="&lt;mobile-robot&gt;&lt;sensors&gt;&lt;kalman-filter&gt;&lt;imu&gt;&lt;odometry&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18643" PostTypeId="2" ParentId="18642" CreationDate="2019-04-14T19:33:45.890" Score="0" Body="&lt;p&gt;From the encoders you pick &quot;tics&quot; (n) per time unit (t), with this you can calculate the angular velocity (&lt;span class=&quot;math-container&quot;&gt;$\omega$&lt;/span&gt;) of each wheel. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\omega = \frac{2\pi n} { N t} $&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where N is the total amount of pulses per revolution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After calculating the angular velocities you can calculate the linear velocity of each wheel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$v = \omega * R $&lt;/span&gt;, where  R is the wheel radius.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And then with inverse kinematics you are able to calculate the velocity of your vehicle. The problem is that you give too less information about your robot e.g. what kind of wheels you have, can they drive both directions? &lt;/p&gt;&#xA;" OwnerUserId="15592" LastActivityDate="2019-04-14T19:33:45.890" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18644" PostTypeId="1" CreationDate="2019-04-15T03:55:58.793" Score="0" ViewCount="538" Body="&lt;p&gt;I'm getting the x,y,z values for three points as follows:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;x : -0.357200  y: -0.205010  z: 0.940000&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;x : -0.310266  y: -0.200437  z: 0.961000&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;x : -0.299289  y: -0.140374  z: 0.927000&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;and the point cloud :&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.snag.gy/gFmru1.jpg&quot; alt=&quot;image description&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;Why are some of the values negative?&lt;/p&gt;&#xA;&lt;p&gt;Does &lt;code&gt;z: 0.961000&lt;/code&gt; mean it is 0.961 meter away towards the &lt;code&gt;z&lt;/code&gt; axis?&lt;/p&gt;&#xA;&lt;p&gt;Also, how is the center of these &lt;code&gt;x,y,z&lt;/code&gt; axes computed?&lt;/p&gt;&#xA;" OwnerUserId="22218" LastEditorUserId="19515" LastEditDate="2020-07-24T17:37:18.913" LastActivityDate="2020-07-24T17:37:18.913" Title="Calculating the distance of a point from point cloud data" Tags="&lt;ros&gt;&lt;kinect&gt;&lt;precise-positioning&gt;&lt;point-cloud&gt;&lt;rviz&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18645" PostTypeId="2" ParentId="18644" CreationDate="2019-04-15T10:29:57.413" Score="2" Body="&lt;p&gt;These values are relative to the camera. Z is always positive as the camera can't see what is behind. X and Y can be positive or negative depending on if an object is left/right or higher/lower than the camera's viewing direction. &lt;/p&gt;&#xA;" OwnerUserId="23196" LastActivityDate="2019-04-15T10:29:57.413" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18647" PostTypeId="2" ParentId="12836" CreationDate="2019-04-15T18:39:42.597" Score="0" Body="&lt;p&gt;One method that doesn't require any sensors or cameras, is to use a pointer 'tool', mark some known points and use geometry.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Attach a simple pointer tool (something with a nice point on one end, but that is aligned with the mounting plate but just offset by a known length).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, move the robot so that the pointer is touching 3 or 4 points on the workspace surface (for example) and record their Cartesian X,Y,Z position as reported by the robot controller and mark them on the surface (probably best if the pointer tool is sharp enough to make a small point indentation).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, mount your tool and jog the robot so that the end-effector reference point is positioned on each of the previously marked points and record the Cartesian X,Y,Z from the controller again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, from the initial pointer, you can subtract the offset to know where the tool mounting plate is in 3D.  Then, using some simple geometry (e.g. on paper), you can use angles of triangles and trigonometry to calculate the angles between the tool end and the tool plate to obtain a rotation angles about X &amp;amp; Y.&lt;/p&gt;&#xA;" OwnerUserId="16622" LastActivityDate="2019-04-15T18:39:42.597" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18648" PostTypeId="2" ParentId="18642" CreationDate="2019-04-15T19:01:49.240" Score="1" Body="&lt;p&gt;You are setting up a filter to estimate a overall state of the robot. This state can consist of whatever you choose: orientation, position, velocity, acceleration, temperature, mood, etc. For your purposes, you have very good information to estimate the &lt;em&gt;forward and angular velocity&lt;/em&gt; of the robot. (Though you could estimate the orientation and position as well, but this would be less accurate over time as drift accumulates).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems like you have an idea of how to get the velocity of the robot from the wheel encoders. You can get similar velocity measurements or estimations from your IMU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For an example, lets look at the forward velocity of your robot (with zero angular velocity for now). You have two sensor measurements of this to feed into your filter: the wheel encoders and the IMU linear acceleration. The wheel encoders are really the position of the wheels at various update rates, so you're differentiating those positions to get velocity. The linear acceleration can be integrated to also estimate velocity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;vel = vel_prev + accel*dt&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now you have two estimates of forward velocity that can be fed into a filter. You can think of these as correcting each other; velocity measurements from the wheel encoders will give you accurate long-term information, but may be susceptible to wheel slippage. The IMU will give you short term information that is accurate in a global sense, but will quickly accumulate errors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For angular velocity, you have a direct measurement from the IMU gyros and you have an indirect measurement from the differences in wheel encoder velocities. Again, these can be combined into a filter.&lt;/p&gt;&#xA;" OwnerUserId="20722" LastActivityDate="2019-04-15T19:01:49.240" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18649" PostTypeId="1" CreationDate="2019-04-16T02:07:37.867" Score="4" ViewCount="472" Body="&lt;p&gt;I am using the Matlab AHRS filter fusion algorithm with an InvenSense ICM-20948 to determine object orientation. I seem to be obtaining reasonable results however I am getting what appears to be substantial yaw/heading drift (please see attached plot).&lt;a href=&quot;https://i.stack.imgur.com/ZluEz.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZluEz.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Matlab AHRS filter fusion algorithm requires the following hardware/scenario specific parameters to be set (which I think is where my problem is stemming from):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Accelerometer noise - variance of accelerometer signal noise&#xA;&lt;span class=&quot;math-container&quot;&gt;$(\frac{m}{s^2})^2$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Magnetometer noise - variance of magnetometer signal noise &lt;span class=&quot;math-container&quot;&gt;$T^2$&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Gyroscope noise - variance of gyroscope signal noise &lt;span class=&quot;math-container&quot;&gt;$(\frac{rad}{s})^2$&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Gyroscope drift noise - variance of gyroscope offset drift &lt;span class=&quot;math-container&quot;&gt;$(\frac{rad}{s})^2$&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Linear acceleration noise - variance of linear acceleration noise&lt;br&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$(\frac{m}{s^2})^2$&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Linear acceleration decay factor (this appears to be dependent on&#xA;the application/movement velocity)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Magnetic disturbance noise - variance of magnetic disturbance noise&#xA;&lt;span class=&quot;math-container&quot;&gt;$T^2$&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Magnetic disturbance decay factor - decay factor for magnetic&#xA;disturbance    &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Expected magnetic field strength (I understand this as being&#xA;location dependant)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;Initial process noise - covariance matrix for process noise&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;(&lt;a href=&quot;https://au.mathworks.com/help/fusion/ref/ahrsfilter-system-object.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://au.mathworks.com/help/fusion/ref/ahrsfilter-system-object.html&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have calibrated my magnetometer to account for hard/soft iron effects. Additionally, I have found and am now using what I believe to be appropriate values for the Accelerometer noise and Gyroscope noise from the ICM-20948 data sheet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know where I may be going wrong or how I may obtain/set/measure any more of the above parameters to perhaps reduce this drift?&lt;/p&gt;&#xA;" OwnerUserId="22782" LastEditorUserId="2289" LastEditDate="2019-04-17T17:51:27.093" LastActivityDate="2021-03-11T03:06:35.633" Title="Yaw drift when implementing AHRS filter fusion" Tags="&lt;matlab&gt;&lt;sensor-fusion&gt;&lt;orientation&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18650" PostTypeId="1" AcceptedAnswerId="18652" CreationDate="2019-04-16T09:42:55.590" Score="0" ViewCount="37" Body="&lt;p&gt;I am building my first project which will use 2D LIDAR for SLAM and the robotic platform is a small car. However the LIDAR is hidden inside and it's occluded by 4 cylinders which connect the roof with the floor of the platform. Is it possible to reliably map the environment and the position of the robot when the lidar is occluded like that? I would be very thankful for recommending some of the simplest possible algorithms to handle this problem. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For clarity, I sketched what the robot looks like from 2 sides:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/QOgFI.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QOgFI.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The environment of the robot is not known a priori. The robot only knows the direction and distance to the waypoint and its goal is to navigate to it and plan its motion as it is progressing and discovering new obstacles.&lt;/p&gt;&#xA;" OwnerUserId="19596" LastActivityDate="2019-04-16T13:06:38.867" Title="SLAM from partly occluded LiDAR sensor" Tags="&lt;slam&gt;&lt;lidar&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18651" PostTypeId="2" ParentId="2687" CreationDate="2019-04-16T10:01:22.073" Score="0" Body="&lt;p&gt;There are way too many factors and unknowns that you would have to consider to simply calculate the thrust. The simplest way is to do it empirically - build a rig where you can simply weigh the motor, subtract its weight and start increasing rpm and measuring the thrust in steps and also current and voltage so that you can calculate efficiency. The most important factors that will impact the thrust and efficiency are: the type of the motor, the propeller pitch and diameter and the materials the propeller is made of and how well the motor and propeller are balanced. Generally the motors that have lower RPM/V (KV rating) and can run on higher voltages are more efficient because higher currents mean higher heat loss.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind that even with the rig with the scale, your measurements won't be 100% representative because first of all the motors are attached to arms which create drag and energy loss due to non-zero stiffness and when you have several motors running in the same plane next to each other, they interfere and the actual thrust is slightly lower. The closer the tips of the propellers will be to each other, the less efficient it becomes. A recommended separation is at least 1/3 of the propeller diameter.&lt;/p&gt;&#xA;" OwnerUserId="19596" LastActivityDate="2019-04-16T10:01:22.073" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18652" PostTypeId="2" ParentId="18650" CreationDate="2019-04-16T13:06:38.867" Score="1" Body="&lt;p&gt;This is definitely possible and rather normal. You should set the respective measurements to zero or NaN and most algorithms should be able to handle these cases. Laserscans almost always have incomplete data (e.g. due to maximal distance or a object with very high or low reflectivity)&lt;/p&gt;&#xA;" OwnerUserId="23196" LastActivityDate="2019-04-16T13:06:38.867" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="18653" PostTypeId="1" CreationDate="2019-04-16T13:18:08.150" Score="2" ViewCount="217" Body="&lt;p&gt;I am having a hard time understanding the impedance controller. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I see that it looks at the manipulator as impedance and the environment as admittance. However, it is hard to grasp the concept and differentiate between position/force control. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can someone tell it to me with an actual example? &lt;/p&gt;&#xA;" OwnerUserId="22785" LastEditorUserId="9176" LastEditDate="2019-04-16T15:04:02.203" LastActivityDate="2019-06-14T16:03:55.513" Title="Why do I need impedance control?" Tags="&lt;control&gt;&lt;manipulator&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18654" PostTypeId="1" AcceptedAnswerId="18656" CreationDate="2019-04-16T16:36:07.930" Score="2" ViewCount="1406" Body="&lt;p&gt;Do &quot;configuration&quot; and &quot;pose&quot; means the same thing? If not what is the difference?&lt;/p&gt;&#xA;" OwnerUserId="20369" LastActivityDate="2019-04-16T17:46:12.513" Title="What is the difference between the pose of a robot and the configuration of a robot?" Tags="&lt;mobile-robot&gt;&lt;wheeled-robot&gt;&lt;manipulator&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18655" PostTypeId="1" CreationDate="2019-04-16T16:55:04.860" Score="1" ViewCount="77" Body="&lt;p&gt;I'm trying to implement an indirect Kalman for pose estimation of a wheeled robot.&#xA;I found two papers that describe this approach.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.thaiscience.info/journals/Article/CMUJ/10325060.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;CMU. Journal (2006) Vol. 5(1)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.sciencedirect.com/science/article/pii/S1474667015404410&quot; rel=&quot;nofollow noreferrer&quot;&gt;IFAC Conference on Embedded Systems&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;For this post I will reference the second paper, since it is much more detailed.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;My understanding of this approach&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;In order to estimate the vehicle pose &lt;em&gt;(xy-coords and orientation)&lt;/em&gt;, two sources of information are fused together. Both odometry and accelerometer combined with gyroscope provide the relative position and rotation information &lt;em&gt;(xy-velocities and rotational speed)&lt;/em&gt; and that can be integrated to get the pose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since both methods are error-prone their outputs are compared and used to estimate those errors using a Kalman filter &lt;strong&gt;[red arrow]&lt;/strong&gt;. This estimation is fed back to the sensor models that were compared as input &lt;strong&gt;[light blue arrows]&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/zb8ye.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zb8ye.png&quot; alt=&quot;Multi-Sensor Data Fusion Block Diagram&quot;&gt;&lt;/a&gt;&#xA;In the second paper I mentioned almost all components needed for implementation are described in detail:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The final measurement and observation model equations used for data&#xA;  fusion in state space model form are as follows:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ΔX(t + 1) = A(t) ∙ ΔX(t) + w(t)&#xA;ΔY(t) = C(t, VL, VR, ωe, Ax, Ay, Ω) ∙ ΔX(t) + v(t)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;  &lt;p&gt;Where&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;A(t) = [A1 A2 A3]&#xA;C(t, VL, VR, ωe, Ax, Ay, Ω) = [C1 C2 C3]&#xA;Ax(t), Ay(t) = Accelerometer Readings&#xA;Ω(t) = Gyroscope Readings&#xA;VL(t), VR(t) = Linear Velocity from Encoders&#xA;ωe(t) = Angular Velocity from Encoders&#xA;ΔT = Samping Time&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Using naming conventions from above I would asume the following Filter structure:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/KYLLJ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KYLLJ.png&quot; alt=&quot;Kalman filter structure&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;C(t) = C(t, VL, VR, ωe, Ax, Ay, Ω)&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My problem is that all papers and descriptions I found so far didn't really explain how ΔY is used. I know how Kalman filters work in general but I have no idea how ΔY can update ΔX (I've marked this part with questionmarks in the picture above). Do you know how the Measurement Update could work here?&lt;/p&gt;&#xA;" OwnerUserId="11419" LastActivityDate="2019-04-16T16:55:04.860" Title="Sensorfusion of odometry, accelerometer and gyroscope using Indirect Kalman Filter" Tags="&lt;localization&gt;&lt;kalman-filter&gt;&lt;wheeled-robot&gt;&lt;sensor-fusion&gt;" AnswerCount="0" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18656" PostTypeId="2" ParentId="18654" CreationDate="2019-04-16T17:46:12.513" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Do &quot;configuration&quot; and &quot;pose&quot; means the same thing? &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;One of the most clear definitions of '&lt;strong&gt;&lt;em&gt;pose&lt;/em&gt;&lt;/strong&gt;' that I've heard is in Peter Corke's &lt;em&gt;&lt;a href=&quot;http://petercorke.com/wordpress/rvc/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Robotics, Vision and Control&lt;/a&gt;&lt;/em&gt; (RVC).  It states that:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&quot;&lt;strong&gt;The position and orientation of a coordinate frame is known as its pose&lt;/strong&gt; and is shown graphically as a set of coordinate axes. The relative pose of a frame with respect to a reference coordinate frame is denoted by the symbol ξ&quot;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The following figure is figure 2.2 in RVC:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/0iAeE.png&quot; alt=&quot;pose&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The point P can be described by coordinate vectors relative to either frame {A} or {B}. The &lt;strong&gt;pose&lt;/strong&gt; of {B} relative to {A} is &lt;span class=&quot;math-container&quot;&gt;$ ^{A} ξ _{B} $&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The '&lt;strong&gt;&lt;em&gt;configuration&lt;/em&gt;&lt;/strong&gt;' of a robot is a set of scalar parameters that specify the positions of all of the robot's points relative to some fixed coordinate system.  This can be expressed as a vector of positions and orientations, for example:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;q = (&lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;or&lt;/p&gt;&#xA;&#xA;&lt;p&gt;q = ((&lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$z$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$\alpha$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$\beta$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$\gamma$&lt;/span&gt;)) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The set of all possible configurations is the '&lt;em&gt;configuration space&lt;/em&gt;', or '&lt;em&gt;C-space&lt;/em&gt;'.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;If we consider the two-link planar manipulator with 2 revolute joints (2R-arm), shown here (taken from fig 7.3 in RVC):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/xsJo8.png&quot; alt=&quot;2R arm&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;strong&gt;&lt;em&gt;configuration&lt;/em&gt;&lt;/strong&gt; can be expressed in terms of just the two joint angles &lt;span class=&quot;math-container&quot;&gt;$\theta _{1}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\theta _{2}$&lt;/span&gt;, while the &lt;strong&gt;&lt;em&gt;configuration space&lt;/em&gt;&lt;/strong&gt; is the set of all possible combinations of the joint angles &lt;span class=&quot;math-container&quot;&gt;$\theta _{1}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\theta _{2}$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that configurations are not necessarily unique. For this robot, there are two possible configurations that result in the same end-effector position, but the end effector will have a different orientation in each case.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;A worked example using MATLAB can be found in the &lt;a href=&quot;https://robotacademy.net.au/lesson/analyzing-a-2-joint-planar-robot-arm/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Analyzing a 2-joint planar robot arm&lt;/a&gt; lesson on Peter's &lt;a href=&quot;https://robotacademy.net.au/&quot; rel=&quot;nofollow noreferrer&quot;&gt;QUT Robot academy&lt;/a&gt;. This includes a visual description of the 2R-arm shown above.&lt;/p&gt;&#xA;" OwnerUserId="17029" LastActivityDate="2019-04-16T17:46:12.513" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18660" PostTypeId="2" ParentId="18386" CreationDate="2019-04-17T15:37:21.290" Score="2" Body="&lt;p&gt;You can printout your weights and bias value from your model in TensorFlow, PyTorch or other deep learning library. If you want to convert your model to ESP32, you must create your own code to define your feed forward network. It's very simple, like create a matrix multiplication program and also create your own activation function. Then, you take weights and bias value from your trained model and define manually in your code as variable or constant. It is should works.&lt;/p&gt;&#xA;" OwnerUserId="22662" LastActivityDate="2019-04-17T15:37:21.290" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18661" PostTypeId="1" AcceptedAnswerId="18667" CreationDate="2019-04-18T01:27:15.007" Score="0" ViewCount="26" Body="&lt;p&gt;I'm trying to make wings that fold in and open. I want to have the joint of the wing controlled by a motor of some sort but I don't know what I'm looking for is called. &lt;/p&gt;&#xA;" OwnerUserId="22797" LastActivityDate="2019-04-18T21:45:09.327" Title="What is the motor that move like an elbow called" Tags="&lt;motor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18663" PostTypeId="1" AcceptedAnswerId="18669" CreationDate="2019-04-18T09:47:56.907" Score="0" ViewCount="82" Body="&lt;p&gt;I want to set the steering angle for Roomba Create 2, and as far as I understand I can do this by setting a turning radius for the Roomba Create 2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;How to convert steering angle to turning radius, so that I can set a correct turning radius for a desired steering angle?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="22801" LastEditorUserId="110" LastEditDate="2019-04-19T01:14:11.763" LastActivityDate="2019-04-19T01:14:11.763" Title="Roomba Create 2: how to convert steering angle to radius?" Tags="&lt;irobot-create&gt;&lt;roomba&gt;&lt;differential-drive&gt;&lt;steering&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18664" PostTypeId="1" CreationDate="2019-04-18T13:05:26.010" Score="0" ViewCount="36" Body="&lt;p&gt;I saw a question  posted by @Rocketmagnet (&lt;a href=&quot;https://robotics.stackexchange.com/q/277/22803&quot;&gt;Why do I need a Kalman filter?&lt;/a&gt;) about the need for a Kalman filter.  In that question, he says he's designing an UAV and lists the following sensors he will incorporate into the design: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;3-axis accelerometer&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;3-axis gyroscope&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;3-axis magnetometer&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;horizon sensor&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;GPS&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;downward facing ultrasound.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This list made me question my understanding about a few of these sensors:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My questions as a newbie are :&#xA;1) do you need a magnetometer if you have a GPS sensor? &#xA;2) Do you need a horizon sensor if you have an accelerometer and a gyroscope&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are some of these sensors listed redundant for the purposes of tracking a UAV's position/orientation/navigation?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="22803" LastEditorUserId="22803" LastEditDate="2019-04-23T15:58:47.883" LastActivityDate="2019-04-23T15:58:47.883" Title="Sensor complement in Drone" Tags="&lt;sensors&gt;&lt;navigation&gt;&lt;orientation&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18665" PostTypeId="2" ParentId="18664" CreationDate="2019-04-18T15:10:16.640" Score="2" Body="&lt;p&gt;1) Yes, a megnetometer is an instrument that measures magnetism — either the magnetization of a magnetic material like a ferromagnet, or the direction, strength, or relative change of a magnetic field at a particular location. I imagine the GPS sensor gives some approximate latitude and longitude - this isn't something a magnetometer could give you. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) As for the horizon sensor, it seems unlikely that you would need one. However, if calibrated correctly, it does give you an absolute measurement of the horizon. Accelerometers and gyroscopes could be relative to their starting position so it could help in calibrating those sensors - however, newer accelerometers and gyroscopes (MEMS) are able to observe (near-)absolute measurements&lt;/p&gt;&#xA;" OwnerUserId="22805" LastActivityDate="2019-04-18T15:10:16.640" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18667" PostTypeId="2" ParentId="18661" CreationDate="2019-04-18T21:45:09.327" Score="1" Body="&lt;p&gt;The general term is a &lt;em&gt;rotary actuator&lt;/em&gt;, which includes servomotors and hydraulic / pneumatic actuators.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, being a wing, probably you do not have space for an actuator directly on the elbow, and need a cable + pulley setup with a linear actuator elsewhere. It depends a lot on your space constraints.&lt;/p&gt;&#xA;" OwnerUserId="21526" LastActivityDate="2019-04-18T21:45:09.327" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18668" PostTypeId="2" ParentId="18664" CreationDate="2019-04-19T00:42:02.637" Score="0" Body="&lt;p&gt;Yes, some of the sensors are redundant they complement one another. For example, if you want to do a &quot;position hold&quot; and stay fixed in space the GPS, in theory, should be enough. But the using only GPS you would have to move some number of meters before you notice at the GPS accuracy is measured in meters. But the accelerometer will detect very slight movement. But the accelerometer is so noisy that you can not use it for longer distances. Likewise, the gyros are very sensitive to the rotation but drift badly while the compass is not so sensitive and VERY noise but it has no long term drift&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Kalman filter is very good can be combining complementary sensors and using the strengths of each one. You get much better state estimation if you have a suite of different sensors such that their errors are all from different causes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;AlsoI amVERYsurprized a barometer is not on the list. A downward-looking radar or lidar will have trouble when it flies over a picnic table&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But what to use depends on the goals. A high-performance racing drone might us only a gyro and nothing else while a camera drone does not need GPS because the pilot can see the drone. An autonomous drone does need GPS and more.&lt;/p&gt;&#xA;" OwnerUserId="2609" LastActivityDate="2019-04-19T00:42:02.637" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18669" PostTypeId="2" ParentId="18663" CreationDate="2019-04-19T00:49:09.513" Score="0" Body="&lt;p&gt;The wheels can't be steered to an angle.  All you can do is make one wheel spin faster and then the robot travels along an arc with a given radius&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can place the center of the arc any place you like along a line that connects the two wheels even between the wheels or a few meters to the side or under one wheel.   Then if you need to turn to say 30 degrees you drive along the arc for 30 degrees.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To &quot;turn in place&quot; 30 degrees, you place the center of the arc midway between the wheels, rotate, stop then drive straight.    Is that what is needed?&lt;/p&gt;&#xA;" OwnerUserId="2609" LastActivityDate="2019-04-19T00:49:09.513" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18671" PostTypeId="1" AcceptedAnswerId="18672" CreationDate="2019-04-19T12:07:17.400" Score="1" ViewCount="799" Body="&lt;p&gt;I bought a BNO055 module from Aliexpress which is shown in the picture below. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/3nyFR.png&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;BNO055&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3nyFR.png&quot; alt=&quot;BNO055&quot; title=&quot;BNO055&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am able to read the IMU data in an Arduino nano from this BNO055 via an &lt;strong&gt;I2C&lt;/strong&gt; connection. Now, I want to connect it to a Rasberry Pi Zero. From the AdaFruit website, &lt;a href=&quot;https://learn.adafruit.com/bno055-absolute-orientation-sensor-with-raspberry-pi-and-beaglebone-black/hardware&quot; rel=&quot;nofollow noreferrer&quot;&gt;BNO055 Absolute Orientation Sensor with Raspberry Pi &amp;amp; BeagleBone Black - Hardware&lt;/a&gt;, I found that the connection needs to be a &lt;strong&gt;UART&lt;/strong&gt; connection. But I don't see the &lt;code&gt;PS1&lt;/code&gt; pins on my board. Do you think it is still possible to make a UART connection on this BNO055 board or do I need to get a new board?&lt;/p&gt;&#xA;" OwnerUserId="22814" LastEditorUserId="9176" LastEditDate="2019-04-19T14:17:32.103" LastActivityDate="2019-04-20T17:34:45.200" Title="Aliexpress bought BNO055 UART connection" Tags="&lt;raspberry-pi&gt;&lt;imu&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18672" PostTypeId="2" ParentId="18671" CreationDate="2019-04-19T14:20:01.430" Score="1" Body="&lt;p&gt;As it stands it would appear that your version of the breakout board can not support UART mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking at the front side of the board, there are two solder pads, next to the XYZ axis label:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/EHXcN.png&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;BNO055 top view&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/EHXcN.png&quot; alt=&quot;BNO055 top view&quot; title=&quot;BNO055 top view&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They aren't labelled, but following the &lt;a href=&quot;https://www.davidpilling.com/wiki/index.php/BNO055&quot; rel=&quot;nofollow noreferrer&quot;&gt;guide by David Piling&lt;/a&gt;, they may require changing the soldering/bridging in order to change the mode. However, how the change is made, is not clear, and doesn't appear to be documented.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, on the Arduino forums, this thread, &lt;a href=&quot;https://forum.arduino.cc/index.php?topic=574580.msg3912758#msg3912758&quot; rel=&quot;nofollow noreferrer&quot;&gt;GY-BNO055 Issues&lt;/a&gt;, and in particular &lt;a href=&quot;https://forum.arduino.cc/index.php?topic=574580.msg3912808#msg3912808&quot; rel=&quot;nofollow noreferrer&quot;&gt;this post&lt;/a&gt;, shows how to set the UART mode:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;On the breakout there are two unmarked jumper pads&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gVvf1.jpg&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Solder pad to unsolder for UART mode&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gVvf1.jpg&quot; alt=&quot;Solder pad to unsolder for UART mode&quot; title=&quot;Solder pad to unsolder for UART mode&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt; Some manufactures are shipping these modules with the jumpers open,&#xA;  Others ship with the jumpers closed. To configure the module for i2c&#xA;  communication both jumpers should be closed.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So you need to unsolder the bridge on the pads closest to the IC, to set UART mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Image from &lt;a href=&quot;https://gr33nonline.wordpress.com/2019/04/19/dont-get-the-wrong-bno055/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Don’t get the wrong BNO055!&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/O2iev.png&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;BNO055 top PS0/1&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/O2iev.png&quot; alt=&quot;BNO055 top PS0/1&quot; title=&quot;BNO055 top PS0/1&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the pads are soldered, then they are grounded, i.e. set to &lt;code&gt;0&lt;/code&gt;;&lt;/li&gt;&#xA;&lt;li&gt;the pads are open, then they are equivalent to &lt;code&gt;1&lt;/code&gt; (as there appear to be two pull up resistors, just below the pads, labelled &lt;code&gt;010&lt;/code&gt;).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So now you can set the BNO055 to whatever mode you require by following the table:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/fpAEM.png&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Mode setting&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fpAEM.png&quot; alt=&quot;Mode setting&quot; title=&quot;Mode setting&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9176" LastEditorUserId="9176" LastEditDate="2019-04-20T17:34:45.200" LastActivityDate="2019-04-20T17:34:45.200" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18673" PostTypeId="1" CreationDate="2019-04-19T14:49:33.673" Score="2" ViewCount="42" Body="&lt;p&gt;In &lt;a href=&quot;https://people.mech.kuleuven.be/~bruyninc/tmp/HermanBruyninckx-robotics.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Robot Kinematics and Dynamics&lt;/a&gt; by Herman Bruyninckx, it states:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Axial vectors have an inner orientation, i.e., the direction of the vector indicates the positive orientation. For example, a unit linear force vector: the positive direction of the force does not depend on the orientation (right-handed vs. left-handed) of the world reference frame. As many (but not all) other textbooks, this book implicitly uses right-handed reference frames only, but no physical arguments prevent the use of left-handed frames.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Polar vector have an outer orientation, i.e., the positive orientation cannot be derived from the direction vector itself, but is imposed on it by the &quot;environment.&quot; For example, a unit moment of force vector: if the handedness of the world frame changes, the orientation associated with the moment vector changes too. Note that this is a feature of the coordinate representation, not of the physical property that the vector stands for.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Can someone please explain these types of vector to me?  I do not understand the explanation given.&lt;/p&gt;&#xA;" OwnerUserId="22817" LastEditorUserId="9176" LastEditDate="2019-04-19T16:44:03.410" LastActivityDate="2019-05-21T14:01:40.267" Title="What is an axial and polar vector?" Tags="&lt;orientation&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18675" PostTypeId="1" CreationDate="2019-04-20T06:24:02.320" Score="0" ViewCount="992" Body="&lt;p&gt;Equipment:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Pi 3 B&lt;/li&gt;&#xA;&lt;li&gt;Mega&lt;/li&gt;&#xA;&lt;li&gt;2x Encoder Motor 12VDC 299RPM&lt;/li&gt;&#xA;&lt;li&gt;MPU 6050&lt;/li&gt;&#xA;&lt;li&gt;12V bat 2000mAh&lt;/li&gt;&#xA;&lt;li&gt;LIDAR or Kinect ?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I want to implement EKF SLAM. I have referred bot NOX ROS wandering robot, Hussarian CORE and Robotics weekend. I have achieved localisation and sensor fusion of MPU and Encoder on Mega. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the Mapping part, I am confused as to which sensor should be used either LIDAR or KINECT? What is the advantage of using both of them?&lt;/p&gt;&#xA;" OwnerUserId="22820" LastEditorUserId="9176" LastEditDate="2019-04-20T07:43:09.220" LastActivityDate="2021-05-28T16:45:58.470" Title="Do I need a camera along with LIDAR for SLAM?" Tags="&lt;mobile-robot&gt;&lt;slam&gt;&lt;ekf&gt;&lt;mapping&gt;&lt;lidar&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18676" PostTypeId="1" CreationDate="2019-04-20T16:59:24.037" Score="0" ViewCount="57" Body="&lt;p&gt;I'm trying to build an Autonomous parcel delivering rover using GPS.So after giving destination coordinates, I don't know how to make the robot understand to which direction it should move. Basically, My question is, How can I find out or calculate the direction(angle at which the the boat should move) from starting and destination coordinates?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My bot is actually a rover which is designed for parcel delivery purposes. I want to know how to calculate the direction( angle at which it should move) from the coordinates of current location and target location? for example, if my boat is at A and and it was moving on a straight line until it reached A. And now after reaching A, next target is B which is at an angle from the initial line of motion, I want to calculate this angle from coordinates of A and B.&lt;/p&gt;&#xA;" OwnerUserId="22560" LastEditorUserId="9176" LastEditDate="2019-05-04T05:45:48.260" LastActivityDate="2019-05-08T06:06:18.933" Title="Autonomous Navigation Bot" Tags="&lt;mobile-robot&gt;&lt;navigation&gt;&lt;gps&gt;&lt;autonomous-car&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2019-05-08T14:12:00.907" ContentLicense="CC BY-SA 4.0" />
  <row Id="18678" PostTypeId="2" ParentId="18673" CreationDate="2019-04-21T02:59:50.013" Score="1" Body="&lt;p&gt;It may be helpful to not get caught up in the author’s description of frames with respect to these vectors.  The author is stating that an axial vector, like a force vector, acts along a line.  But a polar vector, like a torque, acts about an axis.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastEditorUserId="11125" LastEditDate="2019-04-21T13:31:54.433" LastActivityDate="2019-04-21T13:31:54.433" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18681" PostTypeId="1" CreationDate="2019-04-23T07:34:11.947" Score="0" ViewCount="69" Body="&lt;p&gt;What should be the specification of ESC that I should use for a 320KV 1820W brushless DC Motor?. Is it necessary to use an 80A ESC?, Basically, How can I choose the required ESC for a motor?&lt;/p&gt;&#xA;" OwnerUserId="22560" LastActivityDate="2019-05-29T01:04:41.953" Title="Electronic Speed Controller" Tags="&lt;mobile-robot&gt;&lt;brushless-motor&gt;&lt;electronics&gt;&lt;esc&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18682" PostTypeId="1" CreationDate="2019-04-23T08:26:18.340" Score="0" ViewCount="29" Body="&lt;p&gt;I am currently trying to build a robot with ackermann steering. As an example I found &lt;a href=&quot;https://github.com/trainman419/ackermann_vehicle-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/trainman419/ackermann_vehicle-1&lt;/a&gt; for this robot. It works pretty well with the set parameters and with a small python script that converts the joy commands from my xbox 360 controller to the ackermann message I can move it in Gazebo. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problems start when I try to edit parameters though. I would like to change the robot and want to use smaller wheels for example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;xacro:property name=&quot;hub_dia&quot; value=&quot;0.055&quot;/&amp;gt;&#xA;&amp;lt;xacro:property name=&quot;tire_dia&quot; value=&quot;0.066&quot;/&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;When I do that the robot starts moving by itself and I can't really work out why it does that. At the start it just moves forward, when I drive it myself a bit with the controller it also starts to rotate on the spot, which means I can't drive straight lines any more. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am using ROS Kinetic on Ubuntu 16.04 with the newest version of gazebo that is available on that platform.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why or how is it possible for the car to move on its own when I just decrease the radius of the wheels. And how can I fix this? Is it maybe depending on the PID Values in the YAML files or do I need friction parameters at some point?&lt;/p&gt;&#xA;" OwnerUserId="20231" LastEditorUserId="37" LastEditDate="2019-04-23T13:48:27.853" LastActivityDate="2019-04-23T13:52:59.703" Title="Robot rolls and rotates with different parameters" Tags="&lt;ros&gt;&lt;gazebo&gt;" AnswerCount="0" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="18683" PostTypeId="1" CreationDate="2019-04-23T11:50:45.440" Score="0" ViewCount="175" Body="&lt;p&gt;We have a web app which we are using to show details of robot on including video, position and feeds like lidar feed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We are using &lt;a href=&quot;http://wiki.ros.org/rosbridge_suite&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://wiki.ros.org/rosbridge_suite&lt;/a&gt; Rosbridge for this successfully on our development systems using gazebo simulations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I do the same using simulation jobs on robomaker? How can I connect to simulation job using my dev system? &lt;/p&gt;&#xA;" OwnerUserId="21086" LastActivityDate="2019-04-23T11:50:45.440" Title="How can i connect to AWS Robomaker simulation job using ros_bridge?" Tags="&lt;ros&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18684" PostTypeId="2" ParentId="18683" CreationDate="2019-04-23T11:50:45.440" Score="1" Body="&lt;p&gt;You can configure a VPC for your simulation job which enables out bound network access to your VPC from the simulation host.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://docs.aws.amazon.com/robomaker/latest/dg/vpc.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://docs.aws.amazon.com/robomaker/latest/dg/vpc.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Currently, we don’t allow inbound network traffic to the simulation host.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One solution for communicating with your ROS code in simulation using rosbridge is to run rosbridge in the simulation host as part of the simulation or robot applications and opening a reverse SSH tunnel from the simulation host to an EC2 host in your VPC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can run rosbridge modifying your package.xml and launch file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) Add a dependency on rosbridge_suite to your package.xml:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;rosbridge_suite&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) Add the following to your .launch file:&lt;/p&gt;&#xA;&#xA;&lt;p&gt; &#xA;     &#xA;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lastly, you can modify your launch file to open a reverse tunnel to an EC2 host in your VPC. Once this is established you can communicate with rosbridge from your EC2 host. Note: you’ll need to include ssh as a dependency like we did for rosbridge_suite above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A non-rosbridge option for connecting to the simulation from your dev system is a pub/sub mechanism like MQTT. The AWS IoT Bridge Example is a good example of this approach: &lt;a href=&quot;https://github.com/aws-robotics/aws-iot-bridge-example/blob/master/README.md&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/aws-robotics/aws-iot-bridge-example/blob/master/README.md&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="21086" LastActivityDate="2019-04-23T11:50:45.440" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18685" PostTypeId="2" ParentId="18617" CreationDate="2019-04-23T12:35:22.107" Score="1" Body="&lt;p&gt;You can order them from &lt;a href=&quot;https://store.irobot.com/default/create-programmable-programmable-robot-irobot-create-2/RC65099.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;iRobot&lt;/a&gt;. I checked their site and it said they offer international shipping to Chile but probably your best place to start would be contacting &lt;a href=&quot;https://homesupport.irobot.com/app/answers/detail/a_id/200?_ga=2.56870574.566594270.1556022376-845279800.1556022376&amp;amp;_gac=1.83576548.1556022377.CjwKCAjw7_rlBRBaEiwAc23rhmC8LoGxmzGZodasLtoYvPDDNBwqW_NUulQs-1yx9GO0hU1OsufpchoC3cEQAvD_BwE&quot; rel=&quot;nofollow noreferrer&quot;&gt;iRobot Customer Care&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or just get any Roomba with a serial port and &lt;a href=&quot;https://www.irobotweb.com/-/media/MainSite/PDFs/About/STEM/Create/Create_2_Serial_to_USB_Cable_Creation.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;make&lt;/a&gt; or &lt;a href=&quot;https://store.irobot.com/default/parts-and-accessories/create-accessories/communication-cable-for-create-2/4466502.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;buy&lt;/a&gt; the cable from the instructions on the iRobot Create website&lt;/p&gt;&#xA;" OwnerUserId="4377" LastActivityDate="2019-04-23T12:35:22.107" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18686" PostTypeId="1" CreationDate="2019-04-23T12:51:31.913" Score="0" ViewCount="341" Body="&lt;p&gt;I'm using a Velodyne sensor which publishes on &lt;code&gt;/velodyne_points&lt;/code&gt; topic, and its class type is &lt;code&gt;PointCloud2&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I want to convert &lt;code&gt;PointCloud2&lt;/code&gt; message into a grid space (cylindrical) instead of spherical space. In other words, I want to maps/project Velodyne points (3D) to a grid/panoramic-view (2D) with a const resolution, which each grid cell has a range. Also, this grid's height is const too.&lt;/p&gt;&#xA;" OwnerUserId="18870" LastEditorUserId="18870" LastEditDate="2019-04-24T10:07:21.403" LastActivityDate="2021-05-14T21:01:50.137" Title="How to convert PointCloud2 message to a grid?" Tags="&lt;ros&gt;&lt;lidar&gt;&lt;point-cloud&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18687" PostTypeId="1" CreationDate="2019-04-23T22:39:17.730" Score="0" ViewCount="65" Body="&lt;p&gt;I'm mapping my college campus with a drone (as part of an approved science project). I want to film, measure the temperature, and take infrared video at the same time. What drones are good for interfacing with multiple sensors at once?&lt;/p&gt;&#xA;" OwnerUserId="22845" LastActivityDate="2019-05-25T22:08:40.757" Title="Drone Mapping Project" Tags="&lt;quadcopter&gt;&lt;sensors&gt;&lt;mapping&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18689" PostTypeId="1" CreationDate="2019-04-24T02:21:32.807" Score="2" ViewCount="19" Body="&lt;p&gt;I am using KITTI odometry dataset whereby the camera's axis is pointing X (east), Y (down) and Z (north). It also contain the frame to frame poses of the camera (first pose is fixed as the map frame). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am using the formula below to obtain the matrix that would get me from a point on the ground surface to uv coordinate.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Matrix&amp;lt;float,3,4&amp;gt;  3d_to_2s = calibration.get_proj2() * calibration.get_rect0() * T_cam0unrect_road;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;whereby &lt;code&gt;get_proj2()&lt;/code&gt; is the projection matrix, &lt;code&gt;get_rect0()&lt;/code&gt; is the rectifying matrix and &lt;code&gt;T_cam0unrect_road&lt;/code&gt; is extrinsic matrix to get from ground to where the camera is mounted (camera is initially slightly pitched).   &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;AngleAxisf m = AngleAxisf(0.03, Vector3f::UnitX());&#xA;T_cam0unrect_road = Matrix4f::Identity();&#xA;T_cam0unrect_road(1, 3) = m_height;&#xA;T_cam0unrect_road.topLeftCorner&amp;lt;3,3&amp;gt;() = m.matrix();&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Question&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because the vehicle is moving at high speed, the camera is pitching up and down between frames. I wish to solve this by compensating the pitch of the camera with the following code instead,&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Vector3f triplets = pose.topLeftCorner&amp;lt;3,3&amp;gt;().eulerAngles(2, 1, 0);&#xA;AngleAxisf m = AngleAxisf(0.03 + triplets(2) , Vector3f::UnitX());&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;However, when I printed out the rotations (in degrees) below, I don't get sensible values for pitch (X axis). I am unsure if this could be due to the heading (Y axis) of the camera moving close to 90 degrees.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, how should I resolve this problem of compensating for the pitch when I get strange values like this? I understand that using quarternion or rotation matrices would be better, but I thought I just need to compensate for the pitching of the camera. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;processing frame 0&#xA;rotation around Z: 5.18165e-10&#xA;rotation around Y: -1.33316e-09&#xA;rotation around X: -1.37073e-08&#xA;processing frame 1&#xA;rotation around Z: 0.100961&#xA;rotation around Y: 2.49588&#xA;rotation around X: 0.147765&#xA;processing frame 2&#xA;rotation around Z: 0.345722&#xA;rotation around Y: 5.0829&#xA;rotation around X: 0.430607&#xA;processing frame 3&#xA;rotation around Z: 0.430648&#xA;rotation around Y: 7.71205&#xA;rotation around X: 0.69544&#xA;processing frame 4&#xA;rotation around Z: 0.359564&#xA;rotation around Y: 10.3777&#xA;rotation around X: 0.86194&#xA;processing frame 5&#xA;rotation around Z: 0.55802&#xA;rotation around Y: 13.0701&#xA;rotation around X: 0.903135&#xA;processing frame 6&#xA;rotation around Z: 0.692939&#xA;rotation around Y: 15.7423&#xA;rotation around X: 0.997595&#xA;processing frame 7&#xA;rotation around Z: 0.958596&#xA;rotation around Y: 18.3829&#xA;rotation around X: 1.27789&#xA;processing frame 8&#xA;rotation around Z: 1.27656&#xA;rotation around Y: 20.9566&#xA;rotation around X: 1.54352&#xA;processing frame 9&#xA;rotation around Z: 1.36157&#xA;rotation around Y: 23.587&#xA;rotation around X: 1.64277&#xA;processing frame 10&#xA;rotation around Z: 1.49622&#xA;rotation around Y: 26.2514&#xA;rotation around X: 1.68765&#xA;processing frame 11&#xA;rotation around Z: 1.60329&#xA;rotation around Y: 28.9723&#xA;rotation around X: 1.71041&#xA;processing frame 12&#xA;rotation around Z: 1.69588&#xA;rotation around Y: 31.7076&#xA;rotation around X: 1.75604&#xA;processing frame 13&#xA;rotation around Z: 1.873&#xA;rotation around Y: 34.4132&#xA;rotation around X: 1.89264&#xA;processing frame 14&#xA;rotation around Z: 2.2461&#xA;rotation around Y: 37.0944&#xA;rotation around X: 2.18429&#xA;processing frame 15&#xA;rotation around Z: 2.37565&#xA;rotation around Y: 39.7527&#xA;rotation around X: 2.36015&#xA;processing frame 16&#xA;rotation around Z: 2.88682&#xA;rotation around Y: 42.4081&#xA;rotation around X: 2.72221&#xA;processing frame 17&#xA;rotation around Z: 3.10883&#xA;rotation around Y: 45.073&#xA;rotation around X: 2.92285&#xA;processing frame 18&#xA;rotation around Z: 3.28406&#xA;rotation around Y: 47.7952&#xA;rotation around X: 3.12997&#xA;processing frame 19&#xA;rotation around Z: 3.92615&#xA;rotation around Y: 50.4643&#xA;rotation around X: 3.76177&#xA;processing frame 20&#xA;rotation around Z: 4.23934&#xA;rotation around Y: 53.1277&#xA;rotation around X: 4.12701&#xA;processing frame 21&#xA;rotation around Z: 4.81483&#xA;rotation around Y: 55.7626&#xA;rotation around X: 4.73797&#xA;processing frame 22&#xA;rotation around Z: 5.79948&#xA;rotation around Y: 58.3712&#xA;rotation around X: 5.85173&#xA;processing frame 23&#xA;rotation around Z: 6.4649&#xA;rotation around Y: 60.9555&#xA;rotation around X: 6.52549&#xA;processing frame 24&#xA;rotation around Z: 7.65324&#xA;rotation around Y: 63.4012&#xA;rotation around X: 7.5979&#xA;processing frame 25&#xA;rotation around Z: 8.85895&#xA;rotation around Y: 65.7174&#xA;rotation around X: 8.72029&#xA;processing frame 26&#xA;rotation around Z: 10.0229&#xA;rotation around Y: 67.8928&#xA;rotation around X: 9.97569&#xA;processing frame 27&#xA;rotation around Z: 11.247&#xA;rotation around Y: 69.9217&#xA;rotation around X: 11.1209&#xA;processing frame 28&#xA;rotation around Z: 12.809&#xA;rotation around Y: 71.8836&#xA;rotation around X: 12.4875&#xA;processing frame 29&#xA;rotation around Z: 14.4739&#xA;rotation around Y: 73.806&#xA;rotation around X: 14.1026&#xA;processing frame 30&#xA;rotation around Z: 15.8785&#xA;rotation around Y: 75.7117&#xA;rotation around X: 15.5913&#xA;processing frame 31&#xA;rotation around Z: 18.1652&#xA;rotation around Y: 77.4908&#xA;rotation around X: 17.9393&#xA;processing frame 32&#xA;rotation around Z: 21.6176&#xA;rotation around Y: 79.1577&#xA;rotation around X: 21.3585&#xA;processing frame 33&#xA;rotation around Z: 26.2236&#xA;rotation around Y: 80.7618&#xA;rotation around X: 25.8872&#xA;processing frame 34&#xA;rotation around Z: 31.5809&#xA;rotation around Y: 82.3621&#xA;rotation around X: 31.1235&#xA;processing frame 35&#xA;rotation around Z: 40.0482&#xA;rotation around Y: 83.7397&#xA;rotation around X: 39.5374&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="22846" LastEditorUserId="9176" LastEditDate="2019-04-24T07:46:46.947" LastActivityDate="2019-04-24T07:46:46.947" Title="Undo pitching effect of camera when pose (y-axis) is near 90 degrees?" Tags="&lt;computer-vision&gt;&lt;rotation&gt;&lt;autonomous-car&gt;&lt;orientation&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18690" PostTypeId="1" CreationDate="2019-04-24T13:41:56.013" Score="1" ViewCount="115" Body="&lt;p&gt;I'm using ROS Melodic with Gazebo 9 in an Ubuntu 18.04.2 LTS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm studying a robotics subject at the university and I have to create a map of a closed room with one obstacle using only odometry. The idea is to know where are the obstacle and the walls to avoid them when the robot navigates to a goal position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To do that I will do the following:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I will move the robot using the keyboard to map the entire room. I will use the odom topic from a diffdrive controller which its type is &lt;code&gt;nav_msgs/Odometry&lt;/code&gt; and store its &lt;code&gt;geometry_msgs/Pose.msg&lt;/code&gt; Pose data into a text file. I will store its x and y coordinates. I will filter them, and only store a new location if this new location differs from the previous one with an amount (0.1).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can make the map autonomously using a bumper and making the robot follows a &quot;snake&quot; pattern. But this is not my big problem. My problem here is that I don't know how to use the map.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've thought to use A* to move to robot to its goal. To use A* I've thought to create a 2D matrix with all the points in the text file. Each row will be the x location (I will have as many rows as many different x location I have), and the same for the rows (y location). If there is an obstacle, in the cell will be 0, and a 1 is the location is free.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a lot of questions but I can only ask one here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I want to use A*, is it correct what I did with the map?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: Beware that I'm not asking about how to do it with ROS, I'm asking if it is correct what I did with the map to allow me to use it with A*.&lt;/p&gt;&#xA;" OwnerUserId="18173" LastActivityDate="2020-09-15T22:01:35.187" Title="How to use a map created with odometry" Tags="&lt;odometry&gt;&lt;mapping&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18691" PostTypeId="2" ParentId="18681" CreationDate="2019-04-24T13:45:47.877" Score="3" Body="&lt;p&gt;It depends on the voltage. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Say you are running 12V:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;1820W / 12V = 151A&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;With a 24V system:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;1820W / 24 = 75A&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="21215" LastActivityDate="2019-04-24T13:45:47.877" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18692" PostTypeId="2" ParentId="15583" CreationDate="2019-04-24T15:35:38.400" Score="0" Body="&lt;p&gt;The issue related to zero crossing patterns, which is one of the key questions, was related to the implementation. The issue was resolved and this program was actually completed almost 11-12 months ago. An answer was not posted considering that the main issue was not explained properly. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I have recently learned that the interest on this question is geared towards setting the noise matrices. I would like to add my understanding as an answer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) The noise is assumed to have zero mean and a variance. The matrix &lt;span class=&quot;math-container&quot;&gt;$Q$&lt;/span&gt; represents the variance of process noise and this depends on gyroscope readings. First a large number of gyro readings were taken at a known position and orientation without any motion. The mean and std. deviation of this data was calculated for x, y and z axes. The std. deviations corresponding to the three axes were denoted as &lt;span class=&quot;math-container&quot;&gt;$noise\_gx$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$noise\_gy$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$noise\_gz$&lt;/span&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The last part of &lt;a href=&quot;http://www.chrobotics.com/library/understanding-euler-angles&quot; rel=&quot;nofollow noreferrer&quot;&gt;this page&lt;/a&gt; shows how gyro readings &#xA;are converted to Euler angle rates. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\begin{bmatrix}\dot \phi\\\dot \theta\\\dot \psi\end{bmatrix} = \begin{bmatrix}p + qsin(\phi)tan(\theta) + rcos(\phi)tan(\theta)\\qcos(\phi) -rsin(\phi)\\qsin(\phi)/cos(\theta) + rcos(\phi)/ cos(\theta)\end{bmatrix}$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here &lt;span class=&quot;math-container&quot;&gt;$p, q, r $&lt;/span&gt; are gyro rates and &lt;span class=&quot;math-container&quot;&gt;$\dot \phi, \dot \theta, \dot \psi$&lt;/span&gt; are Euler rates. This is then multiplied by appropriate time quantity to obtain change in roll, pitch and yaw, required to update the state. A similar logic is used to convert the raw noise values from the gyroscope into values inside matrix &lt;span class=&quot;math-container&quot;&gt;$Q$&lt;/span&gt;. Substitute &lt;span class=&quot;math-container&quot;&gt;$noise\_gx, noise\_gy, noise\_gz$&lt;/span&gt; on the RHS instead of &lt;span class=&quot;math-container&quot;&gt;$p, q, r$&lt;/span&gt;. Multiply the result with time. This result will have three values. Square the first value and set it as the first diagonal element of &lt;span class=&quot;math-container&quot;&gt;$Q$&lt;/span&gt;. Then the square the second value and set it as the second diagonal element. Repeat the same for the third value.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The rest of the values are zero. This is done under the assumption that there is no covariance between the different variables of the state. However, this is not always true and should be considered for accurate modeling. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) The initial value for uncertainty was set based on information on the system and some trail and error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3) The matrix &lt;span class=&quot;math-container&quot;&gt;$R$&lt;/span&gt; was calculated in a method similar to that of &lt;span class=&quot;math-container&quot;&gt;$Q$&lt;/span&gt;. However, in this case, &lt;span class=&quot;math-container&quot;&gt;$noise\_ax, noise\_ay, noise\_az$&lt;/span&gt; were calculated after converting sensor reading to angles (I don't quite remember how this value was obtained for yaw. Will update after checking notes). So, these values were squared and set as diagonal elements of &lt;span class=&quot;math-container&quot;&gt;$R$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, as a general approach:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) Take sample data (in large quatity) from the sensor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) Calculate std. deviation before or after manipulating the data to bring it to the same space or physical dimensions of the state variables or observation variables, depending on convenience and the implementation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3) Square the std. deviation values or multiply them to generate variance or covariance depending on assumptions regarding the independence of variables involved.&lt;/p&gt;&#xA;" OwnerUserId="10959" LastActivityDate="2019-04-24T15:35:38.400" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18693" PostTypeId="2" ParentId="18690" CreationDate="2019-04-24T19:30:18.347" Score="1" Body="&lt;p&gt;Nope, most of these maps are defined as adjacency matrices not maps describing a physical scene. Moreover, switch the parity of the elements since vanilla A* algorithms on the internet use minimum weight, not maximum weight. &lt;/p&gt;&#xA;" OwnerUserId="22805" LastActivityDate="2019-04-24T19:30:18.347" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18694" PostTypeId="1" AcceptedAnswerId="18695" CreationDate="2019-04-24T21:18:02.473" Score="2" ViewCount="45" Body="&lt;p&gt;I have inherited a CoroWare Explorer from someone who used it for their PhD research years ago. They have no documentation on the robot, and I cannot find any online. Does anyone have a user's manual or any other documentation?&lt;/p&gt;&#xA;" OwnerUserId="22854" LastActivityDate="2019-04-24T21:40:49.760" Title="Does anyone have documentation for a CoroWare Explorer?" Tags="&lt;mobile-robot&gt;&lt;ros&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18695" PostTypeId="2" ParentId="18694" CreationDate="2019-04-24T21:40:49.760" Score="2" Body="&lt;p&gt;The basic specifications of the CoroWare Explorer are available on the &lt;a href=&quot;https://robosavvy.com/store/coroware-explorer.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Robosavvy website&lt;/a&gt; (although they no longer carry the product):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Explorer Specifications&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Dimensions: 23”L x 21”W x 16”H&lt;/li&gt;&#xA;&lt;li&gt;CPU: 2.0 GHz&lt;/li&gt;&#xA;&lt;li&gt;RAM: 1 GB&lt;/li&gt;&#xA;&lt;li&gt;Disk Space / ROM: 80 GB&lt;/li&gt;&#xA;&lt;li&gt;Wi-Fi: 802.11 b/g/n&lt;/li&gt;&#xA;&lt;li&gt;GPS: Yes&lt;/li&gt;&#xA;&lt;li&gt;Voltage Sensor: Yes&lt;/li&gt;&#xA;&lt;li&gt;Maximum Speed: 2 feet per second&lt;/li&gt;&#xA;&lt;li&gt;Base Payload Capacity: 15 lbs&lt;/li&gt;&#xA;&lt;li&gt;Base Type: Articulated 4 wheel drive&lt;/li&gt;&#xA;&lt;li&gt;Steering: Skid&lt;/li&gt;&#xA;&lt;li&gt;Obstacle Handling: Can clear 6&quot; obstacles&lt;/li&gt;&#xA;&lt;li&gt;Camera: High quality 2 MegaPixel color camera&lt;/li&gt;&#xA;&lt;li&gt;Digital Inputs: 8&lt;/li&gt;&#xA;&lt;li&gt;Digital Outputs: 8&lt;/li&gt;&#xA;&lt;li&gt;Analog Inputs: 7&lt;/li&gt;&#xA;&lt;li&gt;Optional Pan/Tilt Camera: Yes&lt;/li&gt;&#xA;&lt;li&gt;Battery: 13 AH&lt;/li&gt;&#xA;&lt;li&gt;Battery Life: 2.5 - 4 hours&lt;/li&gt;&#xA;&lt;li&gt;Windows: XP, Supporting C-language API&lt;/li&gt;&#xA;&lt;li&gt;Linux: Ubuntu, Supporting Player&lt;/li&gt;&#xA;&lt;li&gt;Player / Stage: Yes&lt;/li&gt;&#xA;&lt;li&gt;Sample Software: Yes&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://www.robotshop.com/media/files/PDF/corobot-user-guide.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;manual for the basic Corobot&lt;/a&gt; is available in pdf form from the Robotshop website.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since the CoroWare Explorer was apparently built to:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&quot;... expand on the capabilities of the CoroBot and deliver a rugged indoor/outdoor robot that can withstand environmental elements such as dirt, dust, leaf debris, sand, gravel and shallow puddles.&quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This may help get you started. The Explorer has 'extra ports and surface mounting space', but the pages I found don't say much about other differences.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The  &lt;a href=&quot;https://www.coroware.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;CoroWare website&lt;/a&gt; is unhelpful, to put it mildly.  It states that it is &quot;under construction&quot; with a copyright date of 2023!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, &lt;a href=&quot;http://www.satarchysoftware.com/products/robosatarchy.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;Satarchy Robotics&lt;/a&gt; were apparently in partnership with CoroWare, and offer a contact option on their webpage.  They may be able to help with more documentation.&lt;/p&gt;&#xA;" OwnerUserId="17029" LastActivityDate="2019-04-24T21:40:49.760" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18696" PostTypeId="1" CreationDate="2019-04-25T01:13:29.933" Score="1" ViewCount="26" Body="&lt;p&gt;The equation (14) in &lt;a href=&quot;https://www-robotics.jpl.nasa.gov/publications/Mark_Maimone/rob-06-0081.R4.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this paper&lt;/a&gt;,&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;P_{Cj}=RP_{Pj}+T+e_j&#xA;$$&lt;/span&gt;&#xA;where &lt;span class=&quot;math-container&quot;&gt;$P_{Cj}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$P_{Pj}$&lt;/span&gt; are the observed positions of feature &lt;span class=&quot;math-container&quot;&gt;$j$&lt;/span&gt; prior to and after the current robot motion, &lt;span class=&quot;math-container&quot;&gt;$R$&lt;/span&gt;(otation) and &lt;span class=&quot;math-container&quot;&gt;$T$&lt;/span&gt;(ranslation)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If ignoring &lt;span class=&quot;math-container&quot;&gt;$e_j$&lt;/span&gt; and assuming there is no translation,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't understand why applying &lt;span class=&quot;math-container&quot;&gt;$R$&lt;/span&gt; and not &lt;span class=&quot;math-container&quot;&gt;$R^{-1}$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;the previous robot orientation is GREEN and the blue dot in GREEN coord is &lt;span class=&quot;math-container&quot;&gt;$(0,3)$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then the robot rotates clockwise &lt;span class=&quot;math-container&quot;&gt;$\frac{\pi}{2}$&lt;/span&gt; degree to RED coord and the blue dot in RED coord is (-3,0)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If clockwise rotation is negative,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$R$&lt;/span&gt; in this case is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;\begin{bmatrix}\cos(\frac{-\pi}{2})&amp;amp;-sin(\frac{-\pi}{2})\\sin(\frac{-\pi}{2})&amp;amp;cos(\frac{-\pi}{2})\end{bmatrix}&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;equal to&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;\begin{bmatrix}0&amp;amp;1\\-1&amp;amp;0\end{bmatrix}&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So to get &lt;span class=&quot;math-container&quot;&gt;$(-3,0)$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$R^{-1}$&lt;/span&gt; seems to be the correct one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do I misunderstand anything?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you for precious time on my question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2LoOs.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2LoOs.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11214" LastEditorUserId="2289" LastEditDate="2019-04-25T16:59:13.810" LastActivityDate="2019-04-25T17:18:55.263" Title="Observed position update after motion of the robot" Tags="&lt;motion&gt;&lt;rotation&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18698" PostTypeId="1" CreationDate="2019-04-25T15:20:03.893" Score="0" ViewCount="60" Body="&lt;p&gt;Is there any difference between &quot;tinyGPS++.h&quot;,&quot;tinyGPS.h&quot;, and &quot;Adafruit_GPS.h&quot;? Can I use the same code to extract the current GPS location for all these libraries?&lt;/p&gt;&#xA;" OwnerUserId="22560" LastActivityDate="2021-05-16T06:00:20.107" Title="Library for GPS" Tags="&lt;arduino&gt;&lt;navigation&gt;&lt;gps&gt;&lt;programming-languages&gt;&lt;robotics-library&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18699" PostTypeId="2" ParentId="18696" CreationDate="2019-04-25T17:18:55.263" Score="1" Body="&lt;p&gt;It's been years since I've used any of this math, so I'll appeal to &lt;a href=&quot;https://en.wikipedia.org/wiki/Rotation_matrix&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia&lt;/a&gt; and hope I'm not off-base.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The examples in this article apply to active rotations of vectors counterclockwise in a right-handed coordinate system by pre-multiplication. If any one of these is changed (such as rotating axes instead of vectors, a passive transformation), then the inverse of the example matrix should be used, which coincides with its transpose.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So it's the rotation of the coordinate system GREEN into RED that uses the inverse&#xA;&lt;span class=&quot;math-container&quot;&gt;$$\color{red}{C} = R^{-1}\color{lime}{C}$$&lt;/span&gt;&#xA;and determining the location of a fixed point under the &lt;em&gt;new&lt;/em&gt; coordinates uses &lt;span class=&quot;math-container&quot;&gt;$R$&lt;/span&gt; itself. &lt;/p&gt;&#xA;" OwnerUserId="22860" LastActivityDate="2019-04-25T17:18:55.263" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18700" PostTypeId="2" ParentId="18686" CreationDate="2019-04-25T17:30:35.567" Score="0" Body="&lt;p&gt;What you're looking for is a coordinate transformation. You could make a node that takes in a pointcloud2 message and outputs a message with the data in a cylindrical format. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This website has a thorough overview of what's needed:&#xA;&lt;a href=&quot;https://math.libretexts.org/Bookshelves/Calculus/Book%3A_Calculus_(OpenStax)/12%3A_Vectors_in_Space/12.7%3A_Cylindrical_and_Spherical_Coordinates&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://math.libretexts.org/Bookshelves/Calculus/Book%3A_Calculus_(OpenStax)/12%3A_Vectors_in_Space/12.7%3A_Cylindrical_and_Spherical_Coordinates&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="22805" LastActivityDate="2019-04-25T17:30:35.567" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18701" PostTypeId="1" CreationDate="2019-04-25T22:02:35.977" Score="0" ViewCount="67" Body="&lt;p&gt;I have a Keyence barcode scanner that can give me the coordinates of a detected barcode in pixels. I have a 6 DOF robot whose end effector pose I know at any given time. My ultimate goal is to place a new label on top of an existing label that is on a box. I am really looking for (x,y,z,theta) from the sensor and passing it on to the robot. I can work without having the Z values by incorporating sensor to know when to stop exploring in the Z. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am figuring out how to calibrate this robot end effector to the barcode scanner. AFAIK, the scanner cannot detect a checkerboard pattern.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I mount a barcode onto a sheet and attach it to the robot and note a set of (pixels,6D pose) readings, how would I figure out the 4x4 transform between the arm and the scanner?&lt;/p&gt;&#xA;" OwnerUserId="22862" LastActivityDate="2019-04-29T08:09:46.413" Title="Hand-Eye calibration of a 2D barcode scanner and a robot" Tags="&lt;calibration&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="18702" PostTypeId="1" CreationDate="2019-04-26T03:27:28.007" Score="3" ViewCount="162" Body="&lt;p&gt;I'm working on a kinematic estimation algorithm, and am trying to come up with the right terminology.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm using the Product-of-Exponentials formulation for kinematic chains (and ignoring position for now):  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$R = e^{\omega_1 \theta_1}e^{\omega_2 \theta_2}...e^{\omega_n \theta_n}R_0$&lt;/span&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;where:&lt;br&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$R \in SO(3)$&lt;/span&gt;: orientation of end effector&lt;br&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$\theta_{1..n}$&lt;/span&gt;: joint coordinates&lt;br&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$\omega_{1..n} \in so(3)$&lt;/span&gt;: joint screw axes&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Forward Kinematics: Solve for &lt;span class=&quot;math-container&quot;&gt;$R$&lt;/span&gt; given &lt;span class=&quot;math-container&quot;&gt;$\omega_{1..n}, \theta_{1..n}$&lt;/span&gt;&lt;br&gt;&#xA;Inverse Kinematics: Solve for &lt;span class=&quot;math-container&quot;&gt;$\theta_{1..n}$&lt;/span&gt; given &lt;span class=&quot;math-container&quot;&gt;$R, \omega_{1..n}$&lt;/span&gt;&lt;br&gt;&#xA;?___?: Solve for &lt;span class=&quot;math-container&quot;&gt;$\omega_{1..n}$&lt;/span&gt; given &lt;span class=&quot;math-container&quot;&gt;$R, \theta_{1..n}$&lt;/span&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is, what phrase fills that blank? I've been using the PoE formula for so long that I am starting to forget the DH paradigm but I'd imagine there's an equivalent with DH params too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The literature I'm comparing against calls this &quot;system identification&quot; but I think that's because they're treating it like a dynamical system...I am treating it like a standard robot kinematics problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there an agreed-upon term for this process?&lt;/p&gt;&#xA;" OwnerUserId="22864" LastEditorUserId="10414" LastEditDate="2021-01-25T16:22:08.360" LastActivityDate="2021-01-25T16:22:08.360" Title="Kinematics with Product-of-Exponentials terminology: not forward, not inverse" Tags="&lt;kinematics&gt;&lt;inverse-kinematics&gt;&lt;forward-kinematics&gt;&lt;product-of-exponentials&gt;&lt;screw-theory&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18703" PostTypeId="1" CreationDate="2019-04-26T21:22:40.660" Score="1" ViewCount="45" Body="&lt;p&gt;I'm developing a Task Space controller based on speed for a Universal Robot 5. I've already calculated the Jacobian, position and rotation error for the classic control method:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://latex.codecogs.com/gif.latex?%5Cdot%7Bq%7D%20%3D%20J%5E%7B-1%7DK%28p_d%20-%20p%29&quot; alt=&quot;enter link description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The method works fine in simulations (ODE Engine, Ros URDF), however, on a real UR5, I can't simply use the K parameters from simulations. From my experience, because the last three motors of the UR5 differ from the first three, the last three joint motors are much more sensible in relation to the value of the parameters in the K matrix. I managed to get to a 5 mm error in position with low parameters for the last 3 joints, but it's still unstable for long experiments (3+ minutes).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is, is there a method in the literature for optimal tuning of Task Space Controllers? How is it normally done? I couldn't find specific papers about it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance.&lt;/p&gt;&#xA;" OwnerUserId="22691" LastActivityDate="2019-04-26T21:22:40.660" Title="Task Space Control Parameters for 6-Dof Manipulator" Tags="&lt;control&gt;&lt;kinematics&gt;&lt;manipulator&gt;" AnswerCount="0" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="18704" PostTypeId="2" ParentId="18698" CreationDate="2019-04-27T00:23:48.580" Score="0" Body="&lt;p&gt;Before asking this question and seeking for someone experience here . I recommend you to do some search .&#xA;First the creator of the tinygps library provides a complete wiki page full of informations including many functions and the difference between the tinygps and tinygps++ &lt;a href=&quot;http://arduiniana.org/libraries/tinygpsplus/&quot; rel=&quot;nofollow noreferrer&quot;&gt;go here &lt;/a&gt;&#xA;all the gps library work correctly but always people improve library's due to some problems exist or to add more features to improve the coding reliability.&#xA;So don't worry about the difference but choose the right library for your project.&lt;/p&gt;&#xA;" OwnerUserId="22622" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2019-04-27T00:23:48.580" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18705" PostTypeId="1" AcceptedAnswerId="18717" CreationDate="2019-04-27T04:58:40.577" Score="1" ViewCount="45" Body="&lt;p&gt;In planar 2R the singularity condition involves the second joint variable. In spatial 3R, singularities involve second and third link lengths and angles. Why does the first joint parameter never feature in the singularity condition?&lt;/p&gt;&#xA;" OwnerUserId="22870" LastEditorUserId="22870" LastEditDate="2019-04-28T15:04:49.563" LastActivityDate="2019-04-30T03:26:03.117" Title="Why does singularity condition for a serial manipulator never involve the first joint variable" Tags="&lt;jacobian&gt;&lt;serial&gt;&lt;singularity&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18706" PostTypeId="1" CreationDate="2019-04-27T07:16:29.577" Score="2" ViewCount="51" Body="&lt;p&gt;I'm building a drone distance controller for parrot mambo. I need to track a colored page with given distance and given heigth. I can get the yaw information from parrot mambo with 0.5 sec.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since I have fixed size object that I need to track. I get pixel heigth from different distances and I fitted formula of &lt;span class=&quot;math-container&quot;&gt;$$y = A \dfrac{1}{x} + B$$&lt;/span&gt; to find distance(x is distance of the object and y is pixel heigth of tracked object).&#xA;&lt;a href=&quot;https://i.stack.imgur.com/sHZLP.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/sHZLP.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;Than I take x positions of the object from different angles without changing the yaw of the drone and I fit a line to this data &lt;span class=&quot;math-container&quot;&gt;$$y = A x + B$$&lt;/span&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/Zoh9g.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Zoh9g.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;To move the drone I'm using a library which called pyparrot. You can call a function fly_direct with arguments of roll, pitch, yaw, heigth and duration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To identift transfer function of roll and pitch I set this duration to fixed time which is 0.1 sec. Than I gave 0.5 roll angle of parrot's max roll angle for 1 sec and I wait 10 sec to make the system stabilize. Than I gave -0.5 roll angle of parrot's max roll angle. Then I fit a first degree transfer function with no zero and product with 1/s since I fit the transfer function like step response &lt;span class=&quot;math-container&quot;&gt;$$\dfrac{K}{\tau s+1}\dfrac{1}{s}$$&lt;/span&gt; &lt;span class=&quot;math-container&quot;&gt;$$ 4 \tau = settle time$$&lt;/span&gt; . &lt;/p&gt;&#xA;&#xA;&lt;p&gt;After I done to identificate my system (pitch for ditance and roll for angle). I tested and I failed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are some problem of my progression. First I needed to linearize distance rather then &lt;span class=&quot;math-container&quot;&gt;$$y = A \dfrac{1}{x} + B$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However my real problem is if I gave roll and pitch angle at the same time, they effect each other. I dont know whether they are coupled or I need to transform one of the control signal with the others transformation matrix.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do you have any suggestion for me. What did I wrong? How can I identify system better? How to overcome coupling problem?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can reference anything that I can learn to overcome my problem as well. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I linearize my distance function between 150cm - 400cm which seems to me linear. Then I identificate my system for pitch distance system again which result with &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;G_z = \dfrac{0.01152 z + 0.0106}{z^2 + -1.779 z + 0.7788}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;" OwnerUserId="22871" LastEditorUserId="22871" LastEditDate="2019-04-28T10:39:13.527" LastActivityDate="2019-04-28T10:39:13.527" Title="How to identificate uav's roll and pitch model and control to track object?" Tags="&lt;control&gt;&lt;uav&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18707" PostTypeId="1" AcceptedAnswerId="18708" CreationDate="2019-04-27T14:33:29.843" Score="0" ViewCount="86" Body="&lt;p&gt;I need to create a dataset of dexterous workspaces for a significantly large number of serial robots with varying DoFs. &#xA;My question is if there is an efficient way of measuring a robot's manipulability. &#xA;Most solutions that I have found are based on inverse kinematics, which in my particular case would take too long. Are there any time-efficient alternatives?&lt;/p&gt;&#xA;" OwnerUserId="22875" LastActivityDate="2019-04-28T20:08:38.480" Title="Manipulability Measures of Serial Robots?" Tags="&lt;serial&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18708" PostTypeId="2" ParentId="18707" CreationDate="2019-04-27T22:08:13.837" Score="3" Body="&lt;p&gt;The most common manipulability measure is by Yoshikawa [1] which is purely kinematic, ie. it ignores dynamics such as inertia and motor torques.  It is simply&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\sqrt{\det( J J^T)}&#xA;$$&lt;/span&gt;&#xA;where &lt;span class=&quot;math-container&quot;&gt;$J$&lt;/span&gt; is the manipulator Jacobian that gives spatial velocity in world coordinates.  The measure says something about how spherical the 6D velocity ellipsoid is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The measure is a bit problematic because it is a norm of mixed units (m/s and rad/s).  It can be more insightful to take the translational 3x3 part (upper left sub matrix) or the rotational 3x3 part (lower right sub matrix).  This is discussed in &amp;sect;8.2.2 of [2].&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using the &lt;a href=&quot;http://petercorke.com/wordpress/toolboxes/robotics-toolbox&quot; rel=&quot;nofollow noreferrer&quot;&gt;Robotics Toolbox for MATLAB&lt;/a&gt; we can easily compute this measure&lt;/p&gt;&#xA;&#xA;&lt;pre class=&quot;lang-matlab prettyprint-override&quot;&gt;&lt;code&gt;&amp;gt;&amp;gt; mdl_puma560  % define a robot model and some poses&#xA;&amp;gt;&amp;gt; p560.maniplty(qn)&#xA;Manipulability: translation 0.111181, rotation 2.44949&#xA;&amp;gt;&amp;gt; p560.maniplty(qz)&#xA;Manipulability: translation 0.0842946, rotation 0&#xA;&amp;gt;&amp;gt; p560.maniplty(qs)&#xA;Manipulability: translation 0.00756992, rotation 2.44949&#xA;&amp;gt;&amp;gt; p560.maniplty(qr)&#xA;Manipulability: translation 0.00017794, rotation 0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where qr = [0, 1.5708, -1.5708, 0, 0, 0], qs = [0, 0, -1.5708, 0, 0, 0] and &#xA;qn = [0, 0.7854, 3.1416, 0, 0.7854, 0].&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We can see that pose &lt;code&gt;qn&lt;/code&gt; (elbow up, wrist pointing down) is quite well conditioned whereas &lt;code&gt;qr&lt;/code&gt; (arm straight up) is close to singular.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have Denavit-Hartenberg models for all your robots then this would be an easy task to automate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Taking dynamics into account involves measures based on the force ellipsoid and is discussed in &amp;sect;9.2.7 of [2].  It requires that you know the inertial parameters of the robot which in general is not the case. Use the &lt;code&gt;'asada'&lt;/code&gt; option to the &lt;code&gt;maniplty&lt;/code&gt; method to compute this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[1] &lt;a href=&quot;https://doi.org/10.1177%2F027836498500400201&quot; rel=&quot;nofollow noreferrer&quot;&gt;Manipulability of Robotic Mechanisms, T. Yoshikawa, IJRR 1985.&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[2] &lt;a href=&quot;https://doi.org/10.1007/978-3-319-54413-7&quot; rel=&quot;nofollow noreferrer&quot;&gt;Robotics, Vision &amp;amp; Control, P. Corke, Springer, 2017.&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[3] A geometrical representation of manipulator dynamics and its application to arm design. H. Asada H, 1983, J.Dyn.Syst.-T ASME 105:131.&lt;/p&gt;&#xA;" OwnerUserId="21223" LastEditorUserId="21223" LastEditDate="2019-04-28T20:08:38.480" LastActivityDate="2019-04-28T20:08:38.480" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="18709" PostTypeId="2" ParentId="18702" CreationDate="2019-04-27T22:18:02.043" Score="1" Body="&lt;p&gt;Try looking for terms like &lt;em&gt;robot calibration&lt;/em&gt;, &lt;em&gt;robot kinematic calibration&lt;/em&gt; or &lt;em&gt;kinematic calibration&lt;/em&gt;.  Have a look at Chapter 6 of [1].&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[1] &lt;a href=&quot;https://doi.org/10.1007/978-3-319-32552-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Springer Handbook of Robotics, Eds: B.Siciliano, O.Khatib, 2016&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="21223" LastActivityDate="2019-04-27T22:18:02.043" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18710" PostTypeId="2" ParentId="18701" CreationDate="2019-04-29T08:09:46.413" Score="1" Body="&lt;p&gt;As the scanner gives you the corner points of a the barcode, you can compute the pose of the scanner relative to the barcode (e.g. with OpenCV and &lt;a href=&quot;https://docs.opencv.org/2.4/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html#bool%20solvePnP(InputArray%20objectPoints,%20InputArray%20imagePoints,%20InputArray%20cameraMatrix,%20InputArray%20distCoeffs,%20OutputArray%20rvec,%20OutputArray%20tvec,%20bool%20useExtrinsicGuess,%20int%20flags)&quot; rel=&quot;nofollow noreferrer&quot;&gt;solvePnP&lt;/a&gt;) and with that information, run most hand-eye calibration algorithms. The normal checkerboard pattern is also only a tool to easily locate known features on a planar surface so there is no big difference between using the corners of the checkerboard or the corners of you barcode. &lt;/p&gt;&#xA;" OwnerUserId="23196" LastActivityDate="2019-04-29T08:09:46.413" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18712" PostTypeId="1" CreationDate="2019-04-29T09:59:35.813" Score="3" ViewCount="165" Body="&lt;p&gt;I'm wondering if ROS is the right system for me. I'm currently involved in a project which consists of building a device that has the purpose to take spectroscopic measurements using a laser and a spectrometer, controlling servos and reading outputs of many different sensors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The project involves&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Bring the laser to the right spot using a proximity sensor and a servo&lt;/li&gt;&#xA;&lt;li&gt;Firing the laser and doing a measurement with the spectrometer&lt;/li&gt;&#xA;&lt;li&gt;Continuously monitor various temperature, vibration, flow etc sensors&lt;/li&gt;&#xA;&lt;li&gt;The devices are either ethernet connected or send out voltage/current signals. All devices can be communicated to using Python and libraries.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The software will run on a single Linux PC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From what I gather then ROS should be great for this. F.x. by creating python scripts for each device, which connect to a &quot;mother&quot; script through the publisher/subscriber method.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But before I dive into coding this, it would be great to get someone's opinion on in ROS is the right system for this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cross-Post at &lt;a href=&quot;https://answers.ros.org/question/322111/building-a-stationary-robot-ros-the-right-tool-for-me/&quot; rel=&quot;nofollow noreferrer&quot;&gt;answers.ros.org&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="22889" LastEditorUserId="23196" LastEditDate="2019-04-30T23:35:23.653" LastActivityDate="2021-03-21T22:01:15.200" Title="Building a stationary robot. ROS the right tool for me?" Tags="&lt;ros&gt;" AnswerCount="4" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18713" PostTypeId="2" ParentId="18712" CreationDate="2019-04-29T12:55:41.677" Score="0" Body="&lt;p&gt;ROS sounds like a good way to go. You will most likely only use the core tools (topic, actions, launch files, bag files, RVIZ) but they will definitely simplify your development as you can divide your application in smaller parts with clearly defined interfaces. &lt;/p&gt;&#xA;" OwnerUserId="23196" LastActivityDate="2019-04-29T12:55:41.677" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18714" PostTypeId="2" ParentId="18687" CreationDate="2019-04-29T13:44:42.937" Score="0" Body="&lt;p&gt;All autonomous drone are already interfacing with multiple sensors: barometric, magnetic,  accelerometer, gyroscopic, GPS, temperature, ect. Some flight controller even allow you to run redundancy on those sensors. But since you are talking about video, it would be easier to post process the sensor/camera data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your drone choice will be base on the payload you want to carry, and the flight time you want to achieve. Depending on your situation and budget, you could do multiple flight and change the payload. Yes, having a huge drone that can lift 4 cameras and a full PC is an option, but the complexity goes with it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do a bit more research on your requirements first, then post a question that is narrower and less opinion base.&lt;/p&gt;&#xA;" OwnerUserId="22341" LastActivityDate="2019-04-29T13:44:42.937" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18717" PostTypeId="2" ParentId="18705" CreationDate="2019-04-30T03:26:03.117" Score="0" Body="&lt;p&gt;Singularity is related to the shape of the arm, not its orientation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider an RR arm.  It is singular if the two links are parallel: either fully outstretched or folded back on itself.  If the arm is straight, a function of &lt;span class=&quot;math-container&quot;&gt;$\theta_2$&lt;/span&gt;, then it doesn't matter what &lt;span class=&quot;math-container&quot;&gt;$\theta_1$&lt;/span&gt; is, it will still be a straight arm, just pointing in a different direction. You can extend this argument to additional DOF.&lt;/p&gt;&#xA;" OwnerUserId="21223" LastActivityDate="2019-04-30T03:26:03.117" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18719" PostTypeId="1" AcceptedAnswerId="18925" CreationDate="2019-04-30T09:04:56.163" Score="0" ViewCount="634" Body="&lt;p&gt;I'm using modified denavit hartenberg to represent my robot end-effector. But i couldnt find equation to calculate rpy if im using mdh. Below my MDH.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/o7WxV.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/o7WxV.png&quot; alt=&quot;Modified Denavit Hartenberg&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I try use rpy equation for dh paramater(from &lt;a href=&quot;https://robotics.stackexchange.com/questions/8516/getting-pitch-yaw-and-roll-from-rotation-matrix-in-dh-parameter&quot;&gt;Getting pitch, yaw and roll from Rotation Matrix in DH Parameter&lt;/a&gt;), but when i apply it doesnt seem correct. Does anyone know the correct equations? I'd be very thankful for any help.&lt;/p&gt;&#xA;" OwnerUserId="22800" LastActivityDate="2019-06-11T21:24:59.773" Title="Calculate Roll Pitch Yaw from Modified Denavit Hartenberg" Tags="&lt;robotic-arm&gt;&lt;forward-kinematics&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18722" PostTypeId="1" AcceptedAnswerId="18724" CreationDate="2019-04-30T19:07:15.830" Score="0" ViewCount="48" Body="&lt;p&gt;I've been using arduino boards for powering my robotics projects, however I want to move towards a more professional method of controlling electronics. I am not sure whether standalone microprocessors/microcontrolers are used to control the electric parts or whether they are integrated in custom PCBs or whether premade dev boards are being used. What exactly is most commonly used in the robotics industry regarding this topic? I have heard about AVR, ARM, PIC, as well as intel processors. I saw MIT's video where they controlled an autonomous plane using and Intel Atom processor. How can you control electronics with an Intel processor? If I want to get into professional robotics electronics, what hardware do I need? &lt;/p&gt;&#xA;" OwnerUserId="22897" LastEditorUserId="22897" LastEditDate="2019-04-30T19:14:44.393" LastActivityDate="2019-05-01T14:26:34.637" Title="What sort of dev boards or standalone microprocessors are used for controlling robotics projects?" Tags="&lt;microcontroller&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="18724" PostTypeId="2" ParentId="18722" CreationDate="2019-05-01T14:26:34.637" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;If I want to get into professional robotics electronics, what hardware do I need?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Define professional robotics electronics. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I saw MIT's video where they controlled an autonomous plane using and Intel Atom processor.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;A college/university program is less likely to use &quot;professional&quot; equipment because, even at a university like MIT, they're still operating on typically a pretty tight budget. If an Arduino or Raspberry Pi would do the trick, they'd probably use it. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I am not sure whether standalone microprocessors/microcontrolers are used to control the electric parts or whether they are integrated in custom PCBs or whether premade dev boards are being used.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There's a lot of stuff going on in this statement, so I'll try to explain it as straightforwardly as I can. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're going to build a robotic system, there is a &lt;strong&gt;bunch&lt;/strong&gt; of stuff that can (will) go wrong. When troubleshooting, you want to be methodical and so you'll try to work through each item one at a time. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In building a robotic system, it helps if you can kind of do the opposite - focus on building one layer at a time. If you have a new control algorithm, on a prototype PCB, connected to a new actuator, and you don't get satisfactory results (or any results at all), what aspect is to blame?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The approach I, and I believe most robotics developers, would take is to try to introduce one &quot;new&quot; thing at a time, thoroughly test it, and then add the next new thing. This is where development boards are useful - if you want to try a new processor, don't try to use it on a board you created yourself, because then it's not clear if you're having some bus issue because you wired it wrong, or because you're calling the library wrong, etc. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The development board is something that runs a particular chip, that generally has a programmer and debugger built in, that might have some handy auxiliary circuit(s) included like an analog to digital convert (ADC) or a digital to analog converter (DAC), etc. It's already been tested so you can use that hardware with relatively high certainty that it will work. This means that, if you're having an issue, it probably lies with your software or with the components you have attached to the development board. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you've got your program running well, you understand how the board is used, and you're getting generally good results, then you might want to switch to a board you design. Development boards are generally more expensive because they DO feature the programming interface, aux hardware, etc. They can also be kind of a pain to use because they may not always have good mounts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Creating a board is not free, though - it costs your time to design it, the cost to print it, populate the board, test, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are only two times I can think of when I would really push to move away from a development board and to a custom board (and I think this gets to the heart of your question): &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;When the total cost of a custom board is less than the cost of continuing to use a development board, or&lt;/li&gt;&#xA;&lt;li&gt;When you need a particular footprint for your board that cannot be met by using a stock development board. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;For point 1, this would generally be if you're going to produce some quantity of product. For example, if you're going to make 10 robot arms to outfit a classroom, then maybe you want to just stick with the development board. If you're going to produce 100 for sale on a teaching website, then maybe you go the custom board route. A development board might cost \$20 where a custom board, with a reduced hardware set and smaller board footprint, might be \$10. Not really worth the effort for development again unless you're going to do some large quantity or if the development board won't fit in your device. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;What exactly is most commonly used in the robotics industry regarding this topic? I have heard about AVR, ARM, PIC, as well as intel processors.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The answer here is generally &quot;choose the least expensive one that meets your needs.&quot; Factors that determine the cost to you may include things other than price - does the chip really do what you need it to do? Does the chip have a large support community, so you can get help if you need it? Does the chip require external devices for things like DAC and ADCs, or can it do those tasks natively? Does the chip have enough I/O pins or would you need an external multiplexer? Does the chip have enough memory for your program? Does it run fast enough? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe you can answer all of these questions up front, but realistically you might have an okay guess at most of the answers. Then it's up to you to try your algorithm on a variety of devices you think might be competing (again, typically on I/O quantity, memory size, price, etc.) and see which chips you think are the best for your application. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Again, this is where the development board comes in. It'd be nice, if you're going to port your program to run on 3 or 4 devices, if you could just focus on the task of hooking up your I/O and buses in software and not have to worry about whether you've accidentally swapped the MOSI and MISO lines or something like that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, once you've released your first product on a particular device, you'll probably find you'll use that code as the basis for your next project, and then inertia sets in and you'll just keep using that particular hardware family from now on because it's what you're comfortable working with. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;So, the tl;dr here&lt;/strong&gt; is that you should probably stick with the hardware you've been using unless you have some need to do something different. If you need something different now because of a footprint requirement, try making a custom board for the hardware you're used to using. This will give you a lot of insight into the task of designing a board while producing an end object that is useful for your current projects. &lt;a href=&quot;https://stackify.com/premature-optimization-evil/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Don't prematurely optimize&lt;/a&gt; - don't go making a task for yourself because you think you might need it in the future. Do your work now on the hardware you have now. If you find it's insufficient, &lt;strong&gt;then&lt;/strong&gt; you should look at migrating.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2019-05-01T14:26:34.637" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18725" PostTypeId="2" ParentId="14240" CreationDate="2019-05-01T22:11:08.167" Score="1" Body="&lt;p&gt;&lt;em&gt;Answering for others with the same question... I understand the OP has long since moved on&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't disagree with the others here, but have a different take. Direct answers to your questions (with an FTC Robotics perspective in mind):&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Just as you need at least a minimal computer to learn programming, you will need a at least a minimal robot to learn Robotics... You are going to have to acquire something. 2 motors bolted to a hunk of metal with a Rev Expansion Hub, 2 (FTC compatible) android phones, and a Logitech controller are about the minimum you can get away with. Unfortunately it's about a $400 minimum investment. Hopefully your school or club will supply these things. Start with learning to build (by doing it) a minimal or better physical robot.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;For FTC, you have only two choices of programming language... Block programming as available in the FTC controller apps, or Java. Even though you know C++, review and play with the blocks for at least a few minutes before diving into Java. This will give you a sense of what others find important, etc. As blocks are just a visual representation of what someone else wrote in Java.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You will need to know some very basic electronics... The idea of positive and negative voltage, etc. But really nothing else comes up in FTC until the highest level of competition. I'm not saying you shouldn't strive for that. But it would likely be an inefficient use of time to start studying any particular subject based on a recommendation here, when you will soon see exactly what is important to you by getting to the point where you need skills beyond what you already have.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I recommend building a robot. Then deploy one of the built-in sample programs (op modes) and get it to work. Then get into that program and change it in some way and get that to work. By the time you have done that, all of this advice will be obsolete and you will be well on your way.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Good luck!&lt;/p&gt;&#xA;" OwnerUserId="22908" LastEditorUserId="9176" LastEditDate="2019-05-02T05:53:06.127" LastActivityDate="2019-05-02T05:53:06.127" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18726" PostTypeId="2" ParentId="18452" CreationDate="2019-05-02T15:53:22.860" Score="0" Body="&lt;p&gt;You indicate the need to have both a stable 24V and a stable 48V power supply from a single battery. And that you are already using a 48V to 24V buck converter to meet the stable 24V need.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you intend to continue with this design, you may need to choose a battery voltage between 24V and 48V. Then continue using a buck converter to get the 24V, while adding a boost converter (in parallel from the battery) to get a second line with 48V. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most DC-DC converters have a fairly wide range of input. So if you switch to a 40V battery, you may be able to continue using the same buck converter. Search for &quot;20A boost converter&quot; or &quot;30A boost converter&quot; to see several options for your 48V line. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Be sure to confirm the input voltage of your converters includes 33V through 46V if you use a 40V lithium ion battery.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Good luck!&lt;/p&gt;&#xA;" OwnerUserId="22908" LastEditorUserId="22908" LastEditDate="2019-06-03T20:35:23.850" LastActivityDate="2019-06-03T20:35:23.850" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18727" PostTypeId="2" ParentId="18675" CreationDate="2019-05-03T07:42:45.880" Score="-2" Body="&lt;p&gt;Using a raspberry pi you will not have enough computational power for dealing with a Kinect.&#xA;Moreover, a Kinect is sensitive in general to more artifacts than a lidar.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So take the easy path and implement a LIDAR-based SLAM for now.&lt;/p&gt;&#xA;" OwnerUserId="18370" LastActivityDate="2019-05-03T07:42:45.880" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="18728" PostTypeId="1" AcceptedAnswerId="18729" CreationDate="2019-05-03T08:25:38.367" Score="0" ViewCount="46" Body="&lt;p&gt;I am designing my robot and I have quite design issues with the available stereo cameras on a market. &#xA;For the prototype I am using ZED M but it is too expensive and quite large.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The question is, do I really need ZED M if I am using my own algorithms to compute the depth? So is having a global shutter, usb 3.0 connection, fixed baseline and wide fisheye lenses will do the job for me?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am thinking to get the components which are very small and lense+sensor should be no larger that 14mm x 9mm x 5mm and looks like that the sensors are very small  with small lenses also on a market.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am using stereo camera for SLAM and obstalc detection.&lt;/p&gt;&#xA;" OwnerUserId="21080" LastActivityDate="2019-05-03T09:07:40.897" Title="Questions about customized stereo camera" Tags="&lt;cameras&gt;&lt;stereo-vision&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18729" PostTypeId="2" ParentId="18728" CreationDate="2019-05-03T09:07:40.897" Score="0" Body="&lt;p&gt;There are several factors that you should consider before creating your own stereo camera:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;How fast do you expect your robot is going to move. This will influence the synchronization requirements. The main advantage of cameras like ZED or RealSense is that they are usually hardware synchronized. If you just use two USB 3.0 cameras they will not be synchronized and that might have a significant impact on the accuracy of your stereo matching.&lt;/li&gt;&#xA;&lt;li&gt;You have to make sure that the cameras are rigidly fixed to each other. If they are not robot vibrations would invalidate you calibration and that will also have a significant impact on accuracy.&lt;/li&gt;&#xA;&lt;li&gt;You have to ensure that the cameras are well calibrated. There are methods to do this but this is an additional step that you will have to do by yourself.&lt;/li&gt;&#xA;&lt;li&gt;Camera parameter control is another issue that you will have to take care of. Usually USB cameras have an automatic camera parameter control algorithm (controlling of exposure time and sensor gain). This is fine for doing general computer vision, but if you have two cameras you have to make sure that both of them take images with identical parameters. If that is not ensured you might end up with situation where one camera sees a white wall and another does not. In this case they would produce images that do not look similar. This will again have significant impact on stereo matching quality. To overcome this you can set one camera as master and control the second camera parameters manually. But that will again introduce latency.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;These are the main points that you have to consider when building a stereo camera.&lt;/p&gt;&#xA;" OwnerUserId="128" LastActivityDate="2019-05-03T09:07:40.897" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18730" PostTypeId="2" ParentId="4704" CreationDate="2019-05-03T11:41:39.047" Score="0" Body="&lt;p&gt;I have thought of that too, I am not very sure but I feel we can improve the battery life of a quadcopter by doing the following:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;We can have a secondary winding on the quadcopter motors.&lt;/li&gt;&#xA;&lt;li&gt;As the motor is powered to rotate even the secondary winding rotates too hence cuts magnetic field hence creating electricity (we need to make sure that the secondary winding is on primary winding but they shouldn't be connected).&lt;/li&gt;&#xA;&lt;li&gt;Later somehow we can drain the energy produced by the secondary coil from the motors using some wires and slip rings.&lt;/li&gt;&#xA;&lt;li&gt;The energy could either be used for led lighting on the quadcopter or for charging the battery, hence increasing the battery life. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="22919" LastEditorUserId="9176" LastEditDate="2019-05-03T13:32:26.243" LastActivityDate="2019-05-03T13:32:26.243" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18731" PostTypeId="1" CreationDate="2019-05-03T13:22:54.270" Score="0" ViewCount="29" Body="&lt;p&gt;I am developing a navigation app which combines compass and gyroscope to withstand magnetic field disturbances which can be found in cities.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am able to know what the magnetic field is supposed to be. In my location its 50μT. (Here I am hoping to find an api which gives me magnetic field from geolocation. Or I have to calculate it). Then I am able to detect if the magnetic field is for instance +- 10μT or greater to assume there is magnetic field disturbance with the magnetometer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then I am hoping to use the gyroscope until I get a accurate compass reading again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Has anyone tried this? Would it work?&lt;/p&gt;&#xA;" OwnerUserId="22920" LastActivityDate="2019-05-03T13:22:54.270" Title="Combining gyroscope and compass to navigate in cities?" Tags="&lt;gyroscope&gt;&lt;magnetometer&gt;&lt;compass&gt;" AnswerCount="0" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="18732" PostTypeId="2" ParentId="18675" CreationDate="2019-05-04T05:43:11.877" Score="0" Body="&lt;p&gt;Please see this link which will give you good idea about differences between LIDAR and Depth Cameras (Kinect is one example).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://lidarradar.com/info/differences-between-the-lidar-systems-and-depth-camera&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://lidarradar.com/info/differences-between-the-lidar-systems-and-depth-camera&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;based on your SLAM application you can use LIDAR, Depth Camera, or both. Deciding factors are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Cost of application; LIDAR is more expensive and higher performance &lt;/li&gt;&#xA;&lt;li&gt;indoor, outdoor, or both&lt;/li&gt;&#xA;&lt;li&gt;environment complexity; does it have walls only or many other objects&lt;/li&gt;&#xA;&lt;li&gt;Required performance; LIDAR is faster in scanning&lt;/li&gt;&#xA;&lt;li&gt;angle of scanning 360 or 120 or less ? LIDAR is wider coverage&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="19277" LastActivityDate="2019-05-04T05:43:11.877" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18734" PostTypeId="1" CreationDate="2019-05-04T09:40:34.303" Score="0" ViewCount="56" Body="&lt;p&gt;A Kalman-Filter could be applied to sensor-readings in order to smooth them. The Kalman-Filter, however, assumes Gaussian distributed sensor-noise with zero-mean. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, I found that my sensor-noise is non-Gaussian distributed. Is is still valid to apply the Kalman-Filter? I was considering to fit a Gaussian to my sensor-noise and assume this fit as the sensor-noise the Kalman filter assumes. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know a good reference about this problem?  &lt;/p&gt;&#xA;" OwnerUserId="21966" LastActivityDate="2019-05-04T09:40:34.303" Title="Standard Kalman Filter applied to non-Gaussian noise data" Tags="&lt;kalman-filter&gt;" AnswerCount="0" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="18735" PostTypeId="1" AcceptedAnswerId="18756" CreationDate="2019-05-04T11:03:35.107" Score="2" ViewCount="47" Body="&lt;p&gt;A Kalman-Filter gets applied to a state-space model in order to obtain estimates of the state-vector. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Example: Assume a car moving on a straight line in x-direction (this is a 1-dimensional problem). The State-space model could be described by:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\begin{bmatrix}&#xA;x_k \\ \dot{x}_k \\ \ddot{x}_k&#xA;\end{bmatrix} = &#xA;\begin{bmatrix}&#xA;1 &amp;amp; T &amp;amp; \frac12\,T^2 \\ 0 &amp;amp; 1 &amp;amp; T \\ 0 &amp;amp; 0 &amp;amp; 1&#xA;\end{bmatrix}&#xA;\begin{bmatrix}&#xA;x_{k-1} \\ \dot{x}_{k-1} \\ \ddot{x}_{k-1}&#xA;\end{bmatrix} + w_{k-1}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\begin{bmatrix}&#xA;y_k \\ \dot{y}_k \\ \ddot{y}_k&#xA;\end{bmatrix} = &#xA;\begin{bmatrix}&#xA;1 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 1 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 1&#xA;\end{bmatrix}&#xA;\begin{bmatrix}&#xA;x_k \\ \dot{x}_k \\ \ddot{x}_k&#xA;\end{bmatrix} + v_k&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The y-vector is our measurement-sequence. And here comes my question: For the Kalman-Filter to work, is it necessary to measure each of the entries of the y-vector? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Coming back to the car: I can measure the number of rotations of the driving-shaft using a wheel-encoder. From this I can infer the distance travelled, which is my x-coordinate assuming a movement on a straight line in x-direction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I cannot measure the velocity directly. But I can infer the velocity from the number of edges detected within a certain time-gap, using the wheel encoder. &#xA;And I can derivate velocity in order to obtain acceleration. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, what I am saying is: In order to obtain each entry of the y-vector, I am using but one sensor: The wheel encoder. Is this valid when applying the Kalman-Filter equations?&lt;/p&gt;&#xA;" OwnerUserId="21966" LastEditorUserId="1487" LastEditDate="2019-06-10T10:25:53.150" LastActivityDate="2019-06-10T10:25:53.150" Title="Kalman Filter: Do we need to measure each entry of the output-sequence, or can we derive them?" Tags="&lt;control&gt;&lt;kalman-filter&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18736" PostTypeId="1" AcceptedAnswerId="18738" CreationDate="2019-05-04T12:36:28.353" Score="2" ViewCount="86" Body="&lt;p&gt;I have an initial position &lt;span class=&quot;math-container&quot;&gt;$X^R_{init}$&lt;/span&gt; of the robot (&lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt; and yaw) and a goal position &lt;span class=&quot;math-container&quot;&gt;$X^R_{goal}$&lt;/span&gt; I need to create a trajectory of duration &lt;span class=&quot;math-container&quot;&gt;$T$&lt;/span&gt; with &lt;span class=&quot;math-container&quot;&gt;$n$&lt;/span&gt; waypoints to move the robot from its initial position to the goal position (on a straight line). This trajectory is in terms of velocities (linear x, y and angular z).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although this looks like a simple problem, I can't find a proper way to do it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My algorithm does the following:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;delta_x = goal_x - init_x&#xA;delta_y = goal_y - init_y&#xA;delta_yaw = goal_yaw - init_yaw&#xA;&#xA;magnitude = calculate mag of delta_x, delta_y, delta_yaw&#xA;unit_x = delta_x / magnitude&#xA;unit_y = delta_y / magnitude&#xA;unit_yaw = delta_yaw / magnitude&#xA;&#xA;step_duration = T / n&#xA;&#xA;linear_x = unit_x * step_duration&#xA;linear_y = unit_y * step_duration&#xA;angular_z = unit_yaw * step_duration&#xA;&#xA;traj = empty_trajectory&#xA;for i .. n&#xA;   traj.add_waypoint(linear_x, linear_y, angular_z)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So the above pseudocode should create a &lt;code&gt;traj&lt;/code&gt; trajectory of length &lt;span class=&quot;math-container&quot;&gt;$T$&lt;/span&gt; of &lt;span class=&quot;math-container&quot;&gt;$n$&lt;/span&gt; waypoints that moves the robot from its initial position to the goal position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What's wrong with the above?&lt;/p&gt;&#xA;" OwnerUserId="21307" LastEditorUserId="21307" LastEditDate="2019-05-04T12:42:28.907" LastActivityDate="2019-05-05T06:45:42.040" Title="Given an initial position, a goal position and a duration find a trajectory" Tags="&lt;motion-planning&gt;&lt;trajectory&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18737" PostTypeId="2" ParentId="287" CreationDate="2019-05-04T16:45:54.823" Score="0" Body="&lt;p&gt;It might be helpful to look for javascript-based robotics projects online as javascript-based robotics community has been growing rapidly since this question was asked. For examples, the blogger behind &lt;a href=&quot;https://burningservos.com&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://burningservos.com&lt;/a&gt; documented processes of building a four-legged robot from scratch and discuss multiple libraries javascript the blogger evaluated or used. There is also &quot;hardware&quot; section in &lt;a href=&quot;https://glitch.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;glitch&lt;/a&gt; (or even at &lt;a href=&quot;https://learn.adafruit.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Adafruit&lt;/a&gt; and &lt;a href=&quot;https://www.hackster.io/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Hackster.io&lt;/a&gt;) where people share their javascript-based hardware hacking projects where you can check out libraries they used.&lt;/p&gt;&#xA;" OwnerUserId="19255" LastActivityDate="2019-05-04T16:45:54.823" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18738" PostTypeId="2" ParentId="18736" CreationDate="2019-05-04T17:52:51.180" Score="2" Body="&lt;p&gt;Your pseudocode seems to do what you expect but it is not up to the task at hand since the approach of doing path planning in velocity is fundamentally wrong. Instead, you should be doing path planning in position and motor control in velocity. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you command a robot in velocity without taking into account the corrections required to compensate for even small deviations from the intended position path (this mode is called &lt;strong&gt;open-loop&lt;/strong&gt;), then the robot inevitably ends up in a location different from &lt;span class=&quot;math-container&quot;&gt;$X^R_{goal}$&lt;/span&gt;. This happens both in a simulation where the integration of velocity cannot be perfect and, more importantly, with a real robot where impairments, noise, and unmodeled factors contribute to significant deviations from the ideal behavior.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To get around this, the simplest solution would be to implement a &lt;strong&gt;closed-loop velocity control&lt;/strong&gt; over the planned position path. In particular, the controller can be a &lt;strong&gt;PI&lt;/strong&gt;, that is a proportional-integral unit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In essence, suppose we have a vector &lt;span class=&quot;math-container&quot;&gt;$traj$&lt;/span&gt; containing position waypoints connecting &lt;span class=&quot;math-container&quot;&gt;$X^R_{init}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$X^R_{goal}$&lt;/span&gt;. For each dimension of &lt;span class=&quot;math-container&quot;&gt;$traj$&lt;/span&gt; at each control instant &lt;span class=&quot;math-container&quot;&gt;$t=t_i$&lt;/span&gt;, you should compute the velocity command as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;v[t_i] = K_P \cdot e[t_i] + K_I \cdot \sum_{t=t_0}^{t=t_i} e[t],&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where &lt;span class=&quot;math-container&quot;&gt;$e[t_i]=traj[t_i]-loc[t_i]$&lt;/span&gt; represents the instantaneous error between the desired path and the actual location (i.e. the feedback) at time &lt;span class=&quot;math-container&quot;&gt;$t=t_i$&lt;/span&gt;. Further, &lt;span class=&quot;math-container&quot;&gt;$K_P$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$K_I$&lt;/span&gt; are the so-called proportional and integral gains of the PI controller that regulate the contributions of the corrections induced by the actual error and the error accumulated over time, respectively.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are diverse methodologies to tune the gains, but you could easily come up with working values by setting up initially &lt;span class=&quot;math-container&quot;&gt;$K_I=0$&lt;/span&gt; and slightly increase &lt;span class=&quot;math-container&quot;&gt;$K_P$&lt;/span&gt; throughout subsequent sessions until you will get a decent tracking. The final displacement error can be compensated by playing with &lt;span class=&quot;math-container&quot;&gt;$K_I$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, you can even think of mixing open-loop and closed-loop modalities. In this context, the velocity command will resemble something like the following:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;v[t_i] = v_{OL}[t_i] + K_P \cdot e[t_i] + K_I \cdot \sum_{t=t_0}^{t=t_i} e[t],&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where &lt;span class=&quot;math-container&quot;&gt;$v_{OL}[t_i]$&lt;/span&gt; is the open-loop vector (the so-called feed-forward term) that can be populated using your pseudocode. The gains &lt;span class=&quot;math-container&quot;&gt;$K_P$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$K_I$&lt;/span&gt; will assume different values compared to the case of a pure feedback controller. You will experience anyway that without the feedback term the robot won't attain the goal.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2019-05-05T06:45:42.040" LastActivityDate="2019-05-05T06:45:42.040" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18739" PostTypeId="1" CreationDate="2019-05-05T00:12:55.243" Score="0" ViewCount="426" Body="&lt;p&gt;Hi I have a VectorNav VN100S Development kit, which has VN100 IMU unit. I want to set it up with Ubuntu 16.04 and ROS Kinetic, but unable to read anything from the VN-100.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So far I have been following official &lt;a href=&quot;https://www.vectornav.com/products/vn-100/documentation&quot; rel=&quot;nofollow noreferrer&quot;&gt;documentation&lt;/a&gt; but it doesn't contain any information about interfacing with Ubuntu/Linux.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know of any good resource which might help me get started? &lt;/p&gt;&#xA;" OwnerUserId="22915" LastEditorUserId="22915" LastEditDate="2019-05-07T17:24:19.093" LastActivityDate="2019-05-07T17:24:19.093" Title="How to read data from the VN100 IMU on Ubuntu?" Tags="&lt;ros&gt;&lt;imu&gt;&lt;linux&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18741" PostTypeId="1" AcceptedAnswerId="18747" CreationDate="2019-05-05T15:40:07.247" Score="2" ViewCount="168" Body="&lt;p&gt;I have to design a feedback linearization for  the model of a car with a single trailer. This picture shows the system:&lt;br&gt;&#xA;&lt;img src=&quot;https://i.stack.imgur.com/Jveu4.png&quot; width=&quot;400&quot;&gt;&lt;br&gt;&#xA;And this is the kinematic model I got, where &lt;code&gt;q_dot = [x_dot; y_dot; thA_dot; thP_dot; thR_dot]&lt;/code&gt;.&#xA;&lt;br&gt;&lt;img src=&quot;https://i.stack.imgur.com/WDrvB.png&quot; width=&quot;320&quot;&gt;&lt;br&gt;&#xA;I chose &lt;code&gt;y1 = x&lt;/code&gt; and &lt;code&gt;y2 = y&lt;/code&gt; as outputs. I proved that the system is controllable and observable. To complete the exercise, then, I calculated the time derivatives of y1 and y2. The classic iteration - if I'm not wrong - says to continue the derivatives until a dependance from both inputs comes out. So I calculated the second derivatives with respect to time, the third ones and the fourth ones, until I got two functions (the fourth derivatives of y1 and y2) depending on &lt;code&gt;u1&lt;/code&gt;, &lt;code&gt;du1/dt&lt;/code&gt;, &lt;code&gt;d²u1/dt²&lt;/code&gt;, &lt;code&gt;d³u1/dt³&lt;/code&gt; and &lt;code&gt;u2&lt;/code&gt; (the second input comes out only at this step). With these results, I thought to make a system extension: &lt;code&gt;ξ1 = u1&lt;/code&gt;,  &lt;code&gt;ξ2 = du1/dt&lt;/code&gt; and  &lt;code&gt;ξ3 = d²u1/dt²&lt;/code&gt;. The new inputs are &lt;code&gt;w1 = d³u1/dt³&lt;/code&gt; and &lt;code&gt;w2 = u2&lt;/code&gt;. Finally I can write:&#xA;&lt;br&gt;&lt;img src=&quot;https://i.stack.imgur.com/vxYQm.png&quot; width=&quot;425&quot;&gt;&lt;br&gt;&#xA;where &lt;code&gt;v&lt;/code&gt; is a new control variable.&#xA;This was to explain the problem and how I got to this point. Now, my question is: how do I choose &lt;code&gt;v&lt;/code&gt;? It should depend on 8 variables, I suppose: q1, q2, q3, q4, q5, ξ1, ξ2, ξ3. But I don't know how.&lt;/p&gt;&#xA;" OwnerUserId="22625" LastActivityDate="2019-06-06T03:03:20.987" Title="Feedback linearization of a nonlinear MIMO system" Tags="&lt;control&gt;&lt;wheeled-robot&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18742" PostTypeId="1" CreationDate="2019-05-06T01:31:11.210" Score="2" ViewCount="294" Body="&lt;p&gt;I've just received a baomain pneumatic cylinder from amazon (50 mm bore 100 mm stroke). When I tried to move it back and forth by hand, it wouldn't budge. Ive never used pneumatic cylinders for robotics before, but I'm fairly certain that they should be movable by hand. Does anyone know the awnser to this issue, or if it is even an issue?&lt;/p&gt;&#xA;" OwnerUserId="22935" LastActivityDate="2019-10-05T17:02:10.287" Title="Stuck pneumatic cylinder" Tags="&lt;air-muscle&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18744" PostTypeId="1" CreationDate="2019-05-06T14:00:28.147" Score="1" ViewCount="86" Body="&lt;p&gt;I am trying to set up a waypoint in Mission Planner that causes the drone to hover, take sensor data from a custom sensor, then either land or continue hovering based off of what the sensor data says. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I haven't found any websites online for how to do this, so does anyone here know how can I make this into a new, custom waypoint in Mission Planner? Do I have to code up my own MAVLink command, or is there another way? By the way, I am using a Pixhawk flight controller with the Ardupilot firmware. &lt;/p&gt;&#xA;" OwnerUserId="22926" LastEditorUserId="9176" LastEditDate="2019-05-06T14:59:29.703" LastActivityDate="2019-05-06T14:59:29.703" Title="Mission Planner: How to create a custom Waypoint Command" Tags="&lt;quadcopter&gt;&lt;python&gt;&lt;ardupilot&gt;&lt;mavlink&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18745" PostTypeId="2" ParentId="14584" CreationDate="2019-05-07T00:39:39.950" Score="1" Body="&lt;p&gt;R3D34THR4Y,&#xA;You are on right path. In this video skyentific explains why wide bldc motors are better fit for your problem. He uses OpenTorque Actuator, that was designed and developed by Gabrael Levine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Hd54ik_45Wo&amp;amp;list=PLsQ_UyfyUeRWpuD-_lvCiVP-Xg6XgwIZa&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=Hd54ik_45Wo&amp;amp;list=PLsQ_UyfyUeRWpuD-_lvCiVP-Xg6XgwIZa&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regards,&#xA;Algocrat&lt;/p&gt;&#xA;" OwnerUserId="22938" LastActivityDate="2019-05-07T00:39:39.950" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18746" PostTypeId="2" ParentId="18739" CreationDate="2019-05-07T01:23:44.350" Score="1" Body="&lt;p&gt;Chapter 3.5 on page 26 of the user manual says that there are 3 ways to interface with the VN100.  (2 different serial types, and SPI).  SPI would be useful if you were interfacing with another microcontroller, but not so much for your computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Serial port 1 is &quot;regular&quot; RS232 logic levels.  Which is +-12 Volts.  If your computer has a serial port, you can use that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Serial port 2 has 3 volt logic levels.  For this, you should use a FTDI cable.  For example: &lt;a href=&quot;https://www.digikey.com/product-detail/en/ftdi-future-technology-devices-international-ltd/TTL-232RG-VREG3V3-WE/768-1071-ND/2441361&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.digikey.com/product-detail/en/ftdi-future-technology-devices-international-ltd/TTL-232RG-VREG3V3-WE/768-1071-ND/2441361&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;RS232 has many control wires, but you probably only need 4: V+, GND, RX, and TX.  Remember to connect the computer's RX line to the devices TX line, and vice-versa.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then use a serial terminal emulator such as picocom or minicom to interface with your device.  Here is an example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt; picocom -b 9600 /dev/ttyUSB0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;(control-a, control-x to exit)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;you probably have to put your user in the &quot;dialout&quot; or &quot;tty&quot; groups too.  &lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2019-05-07T01:23:44.350" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18747" PostTypeId="2" ParentId="18741" CreationDate="2019-05-07T02:01:57.730" Score="0" Body="&lt;p&gt;You used feedback linearization, so you could use techniques for linear (time invariant) systems, such as pole placement or LQR. Namely you have to have LTI state space model which is two quadruple integrators&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{x} = &#xA;\begin{bmatrix}&#xA;0 &amp;amp; I &amp;amp; 0 &amp;amp; 0 \\&#xA;0 &amp;amp; 0 &amp;amp; I &amp;amp; 0 \\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; I \\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\&#xA;\end{bmatrix} x +&#xA;\begin{bmatrix}&#xA;0 \\&#xA;0 \\&#xA;0 \\&#xA;I \\&#xA;\end{bmatrix}v,&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;with &lt;span class=&quot;math-container&quot;&gt;$x = \begin{bmatrix}y_1 &amp;amp; y_2 &amp;amp; \dot{y}_1 &amp;amp; \dot{y}_2 &amp;amp; \ddot{y}_1 &amp;amp; \ddot{y}_2 &amp;amp; \dddot{y}_1 &amp;amp; \dddot{y}_2\end{bmatrix}^\top$&lt;/span&gt;. You could try to find an expression for the derivatives of &lt;span class=&quot;math-container&quot;&gt;$y_1$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$y_2$&lt;/span&gt; as a function of &lt;span class=&quot;math-container&quot;&gt;$q$&lt;/span&gt;. If this does not have an explicit solution you could also use an observer, since if &lt;span class=&quot;math-container&quot;&gt;$y_1$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$y_2$&lt;/span&gt; are known the system is observable.&lt;/p&gt;&#xA;" OwnerUserId="1487" LastActivityDate="2019-05-07T02:01:57.730" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18748" PostTypeId="1" CreationDate="2019-05-07T14:06:44.613" Score="2" ViewCount="48" Body="&lt;p&gt;I'm implementing a force controller on a robotic arm, where the force input comes from torque sensors in the joints. I have calculated the cartesian force on the end-effector from the joint torques, and I can move the arm by setting cartesian velocities.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm trying to make a simple admittance controller to move the arm with as little resistance as possible. The controller can therefore be written most simply as a = 1/m * F. Where we want the virtual mass, m, to be as small as possible. The problem is that since F is derived from torque sensors in the arm, it is not completely independent from the acceleration. Therefore, the acceleration is amplified for each iteration and ends up oscillating wildly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have tried putting on a damper C*v on the controller, but it needs a lot of damping to decrease the oscillations, which makes the robot hard to move again.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any tips on what could be done to get rid of these feedback oscillations?&lt;/p&gt;&#xA;" OwnerUserId="22420" LastActivityDate="2019-06-14T11:03:45.477" Title="Force controller with feedback issues" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;force&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18749" PostTypeId="1" CreationDate="2019-05-07T15:15:24.303" Score="0" ViewCount="143" Body="&lt;p&gt;I'm working on modelling a feller buncher, its end effector consists of a saw to cut trees and claws to bundle them together. I'm looking for a free/open source software that can simulate dynamics of multiple constrained bodies, any recommendations?&lt;/p&gt;&#xA;" OwnerUserId="22943" LastActivityDate="2019-05-10T13:52:29.357" Title="Free Multibody Dynamics Software?" Tags="&lt;mobile-robot&gt;&lt;robotic-arm&gt;&lt;dynamics&gt;&lt;software&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18750" PostTypeId="1" CreationDate="2019-05-07T16:57:10.227" Score="0" ViewCount="370" Body="&lt;p&gt;I have multiple libraries and the main program. &#xA;When I run &lt;code&gt;catkin build&lt;/code&gt; command it starts with 8 jobs but after finishing building libraries continues to build the main program only using 1 job (one CPU core).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How do I force &lt;code&gt;catkin build&lt;/code&gt; to distribute multiple cores on building each individual libs?&lt;/p&gt;&#xA;" OwnerUserId="22945" LastActivityDate="2021-02-28T12:06:10.750" Title="catkin build with multi-core make for building individual packages" Tags="&lt;ros&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18753" PostTypeId="2" ParentId="18676" CreationDate="2019-05-08T06:06:18.933" Score="0" Body="&lt;p&gt;If you have know where the bot is in the world, and can get co-ordinates of the the bot on the world map, then you can overlay a grid, and can use something like &lt;a href=&quot;https://en.wikipedia.org/wiki/Taxicab_geometry&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;strong&gt;Manhattan Distance&lt;/strong&gt;&lt;/a&gt; to get the distance between A(Start) and B(goal).  Then you can associate velocity based upon your bot's base frame and motor output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This should give you a good start. Later you can deploy obstacle avoidance and evasive maneuver algorithms based upon sensors you will be using and environment condition.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also to make your task easy, you can rely on &lt;a href=&quot;https://robots.ros.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;ROS&lt;/a&gt; (&lt;a href=&quot;http://wiki.ros.org/ROS/Tutorials&quot; rel=&quot;nofollow noreferrer&quot;&gt;Tutorials&lt;/a&gt;) for low level controls, thereby not to reinvent wheel and focus more on development.&#xA;Check &lt;a href=&quot;http://wiki.ros.org/navigation/Tutorials&quot; rel=&quot;nofollow noreferrer&quot;&gt;Navigation Stack&lt;/a&gt; in ROS which might help.&lt;/p&gt;&#xA;" OwnerUserId="22915" LastActivityDate="2019-05-08T06:06:18.933" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18754" PostTypeId="1" CreationDate="2019-05-08T10:13:05.777" Score="0" ViewCount="17" Body="&lt;p&gt;Why isn't there much research going into the extraction of inertial and frictional values? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any standardized approach? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit:&#xA;I will give a sample application! Say if we want to implement a computed torque controller to solve the problem of path tracking. I want to have all the dynamic parameters, so that the physical constraints such as maximum motor and gearbox torques are considered.&lt;/p&gt;&#xA;" OwnerUserId="18627" LastEditorUserId="18627" LastEditDate="2019-05-08T14:32:36.620" LastActivityDate="2019-05-08T14:32:36.620" Title="How to perform system identification of a mobile robot using white box approach?" Tags="&lt;mobile-robot&gt;&lt;identification&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18755" PostTypeId="1" CreationDate="2019-05-08T11:34:47.830" Score="1" ViewCount="17" Body="&lt;p&gt;In sample-based motion planning, sampling methods would change the cost of path and computation time for the same planning algorithm. I would like to compare different sampling methods.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, the different stochastic process generates sample points. The task is to identify which stochastic process/distribution is the closest to the target value. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In literature, I am not able to find a comparison method which is standard. &#xA;If any standard method is available, then help me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Wasserstein distance between the target value(smooth path cost, time_min = 0.0) and the vector of sample results would be used or just cost should be considered. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Kindly give your suggestions.&lt;/p&gt;&#xA;" OwnerUserId="22951" LastEditorUserId="22951" LastEditDate="2019-05-08T14:53:06.803" LastActivityDate="2019-05-08T14:53:06.803" Title="Statistical distance between degenerate distribution and any probability distribution" Tags="&lt;motion-planning&gt;&lt;rrt&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18756" PostTypeId="2" ParentId="18735" CreationDate="2019-05-08T13:21:10.020" Score="1" Body="&lt;p&gt;If you formulate your Kalman filter with the output matrix as &lt;code&gt;eye(3)&lt;/code&gt; - &#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\left[\begin{array} \\&#xA;1 &amp;amp; 0 &amp;amp; 0 \\&#xA;0 &amp;amp; 1 &amp;amp; 0 \\&#xA;0 &amp;amp; 0 &amp;amp; 1 \\&#xA;\end{array}\right]&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;then you need to provide all those measurements, but you could alternatively define the output matrix as &lt;code&gt;eye(1,3)&lt;/code&gt; - &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\left[\begin{array} \\&#xA;1 &amp;amp; 0 &amp;amp; 0 \\&#xA;\end{array}\right]&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and then that should let you supply just the feedback measurement on encoder position and have the Kalman filter provide the speed and acceleration estimates. This would be the preferred way to do it, instead of trying to manually derive the speed and then passing that speed &quot;measurement&quot; to the Kalman filter. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2019-05-08T13:21:10.020" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="18757" PostTypeId="2" ParentId="18742" CreationDate="2019-05-08T13:39:01.223" Score="1" Body="&lt;p&gt;Sometimes the seals can stick a bit if they've sat for a long time, but once you get past the initial pop they should move relatively freely. You're using a 50 mm bore, though, which is quite large, so there's a lot of surface contact for the seal. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hook your cylinder up to an air compressor and try to move it. You should do this sooner rather than later so you can return it within your return window if the cylinder is defective. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a side note, pneumatics are okay, but air is &lt;em&gt;compressible&lt;/em&gt;. You should be able to calculate the force your actuator is going to output (acting surface area times air pressure), but the difficulty for control is that it's hard to quickly and accurately modulate the air pressure. It takes time to build up the air pressure and it also takes time to bleed the air pressure, because air is compressible. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You also have to take into account the shaft diameter when calculating acting surface area - the &quot;extend&quot; action uses the full bore diameter, but the &quot;retract&quot; action can only act on the surface area that is exposed, which is the area of the full bore diameter minus the area of the shaft diameter - &lt;span class=&quot;math-container&quot;&gt;$A = \pi \left(\left(r_{bore}\right)^2 - \left(r_{shaft}\right)^2\right)$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hydraulics are superior from a control aspect because you get near-instantaneous force modulation because you can change pressure so quickly in a hydraulic fluid, because it's &lt;em&gt;not&lt;/em&gt; compressible. Tiny fluid volume changes result in immense pressure changes. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2019-05-08T13:39:01.223" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18758" PostTypeId="2" ParentId="18574" CreationDate="2019-05-08T14:08:14.510" Score="1" Body="&lt;p&gt;It's telling you it can't reach the solution in the number of steps you've given it. As &lt;a href=&quot;https://robotics.stackexchange.com/a/18584/9720&quot;&gt;Akshay Kumar stated&lt;/a&gt;, you need to be sure that the robot arm can actually reach the desired target. I've used LabVIEW, but it's been a long time - I don't know what your parameters are doing or what you have set on the front panel, but it looks like you're passing a lot of zeros to the arm initialization. What are the arm link lengths that you're providing? If you've told it that every link is length zero, and you're commanding it to reach &amp;lt;1, 0, 0&gt;, then it's going to fail because no combination of zero-length links will ever reach a position of 1. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/18574/inverse-kinematics-can-not-converge-issue#comment28662_18584&quot;&gt;You asked how&lt;/a&gt; to determine if the pose is achievable. The real answer is complex, but you can do a quick check by finding the distance to the target position from the base of the arm (target = t, base = b) &lt;span class=&quot;math-container&quot;&gt;$\sqrt{(t_x-b_x)^2 + (t_y-b_y)^2 + (t_z-b_z)^2}$&lt;/span&gt; and comparing that to the sum of the link lengths. If your target position's distance is greater than the sum of your link lengths then there's absolutely no way you can reach it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is possible to have a point inside your &quot;sphere of maximum reach&quot; that is still not reachable, because of joint constraints or link lengths, but &lt;a href=&quot;https://robotics.stackexchange.com/a/8180/9720&quot;&gt;that is a much harder problem to solve&lt;/a&gt; (generally no analytic solution, only iterative approaches). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're trying what should be a simple test case, then I think you may have initialized your arm incorrectly, or your length and target units are in disagreement. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2019-05-08T14:08:14.510" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18759" PostTypeId="1" CreationDate="2019-05-08T14:50:16.740" Score="1" ViewCount="84" Body="&lt;p&gt;In the answer &lt;a href=&quot;https://robotics.stackexchange.com/a/7512/22953&quot;&gt;https://robotics.stackexchange.com/a/7512/22953&lt;/a&gt; there is an example for trapetzoid trajectory planning that results in the following table.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;\begin{array} {|r|r|}&#xA;\hline&#xA;time        &amp;amp; t &amp;amp; 0 &amp;amp; 1 &amp;amp; 2 &amp;amp; 3 &amp;amp; 4 &amp;amp; 5 &amp;amp; 6 &amp;amp; 7 &amp;amp; 8 &amp;amp; 9\\&#xA;\hline&#xA;acceleration&amp;amp; a &amp;amp; 0 &amp;amp; 2 &amp;amp; 2 &amp;amp; 2 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; -2 &amp;amp; -2 &amp;amp; -2\\&#xA;velocity    &amp;amp; v &amp;amp; 0 &amp;amp; 2 &amp;amp; 4 &amp;amp; 6 &amp;amp; 6 &amp;amp; 6 &amp;amp; 6 &amp;amp; 4 &amp;amp; 2 &amp;amp; 0\\&#xA;position    &amp;amp; d &amp;amp; 0 &amp;amp; 1 &amp;amp; 4 &amp;amp; 9 &amp;amp; 15 &amp;amp; 21 &amp;amp; 27 &amp;amp; 32 &amp;amp; 35 &amp;amp; 36\\&#xA;\hline&#xA;\end{array}&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By ocular inspection it seems that &lt;/p&gt;&#xA;&#xA;&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;v[t] = v[t - 1] + a[t]&#xA;d[t] = d[t - 1] + (v[t - 1] + v[t]) / 2&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;What is the mathematical basis for this? Why is the average velocity used but not the average accelation? What would the corresponding table look like for a third degree trajectory (i.e. constant jerk instead of constant acceleration)?&lt;/p&gt;&#xA;" OwnerUserId="22953" LastActivityDate="2019-05-10T01:42:49.337" Title="Iterative calculation of trajectory" Tags="&lt;path-planning&gt;&lt;trajectory&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18761" PostTypeId="1" CreationDate="2019-05-08T16:22:45.247" Score="0" ViewCount="769" Body="&lt;p&gt;What are the differences between trajectory planning, trajectory tracking, path planning, path following and motion planning? And what are the basic methods they use?&lt;/p&gt;&#xA;" OwnerUserId="17221" LastActivityDate="2019-05-09T19:25:36.980" Title="What are the differences between trajectory planning, trajectory tracking, path planning, path following and motion planning?" Tags="&lt;control&gt;&lt;kinematics&gt;&lt;path-planning&gt;&lt;line-following&gt;&lt;trajectory&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18762" PostTypeId="2" ParentId="18759" CreationDate="2019-05-08T17:02:34.293" Score="0" Body="&lt;p&gt;A trapezoidal move is defined by its instantaneous change in acceleration (and thus linear change in velocity) during the acceleration and deceleration phases.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, if a trapezoidal move never gets up to the peak velocity, because the distance is too short, it degenerates into a 'triangular' move, with the deceleration phase starting immediately after the acceleration phase ends.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the velocity profiles use constant jolt (jerk) then it is no longer a trapezoidal trajectory, and the maths become much harder. You can approximate it with a table as above, just add a jolt row above acceleration and many more columns, but you really need to be using the polynomials to calculate the values.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From a practical point of view, calculating an acceleration and velocity profile from desired time, distance, maximum jolt, maximum acceleration and maximum velocity parameters, is much more complicated than doing the same for the time, distance, maximum acceleration and maximum velocity of a trapezoidal profile.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are interested in those equations, &lt;a href=&quot;http://www.et.byu.edu/~ered/ME537/Notes/Ch5.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Constant Jerk Equations for a trajectory generator&lt;/a&gt; seems to be a pretty good summary.&lt;/p&gt;&#xA;" OwnerUserId="37" LastActivityDate="2019-05-08T17:02:34.293" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18765" PostTypeId="2" ParentId="18759" CreationDate="2019-05-09T00:36:29.733" Score="3" Body="&lt;p&gt;Trapezoidal trajectory is basically a piecewise quadratic function. Since the function is quadratic, its second derivative is a constant. The trajectory is then basically comprises segments of constant accelerations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Denoting a trajectory function as &lt;span class=&quot;math-container&quot;&gt;$x(t)$&lt;/span&gt;, for each segment we would have&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;x''(t) = a(t) = a,&#xA;$$&lt;/span&gt;&#xA;where &lt;span class=&quot;math-container&quot;&gt;$a$&lt;/span&gt; is the constant acceleration of that segment.&#xA;Integrating the above equation with respect to time, we would then have the velocity equation&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;x'(t) = v(t) = at + v_0,&#xA;$$&lt;/span&gt;&#xA;where the constant of the integration is &lt;span class=&quot;math-container&quot;&gt;$v_0$&lt;/span&gt;, which is the initial velocity of that segment.&#xA;We finally obtain the displacement equation by integrating the above equation&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;x(t) = \frac{1}{2}at^2 + v_0t + x_0,&#xA;$$&lt;/span&gt;&#xA;where the constant of the integration is &lt;span class=&quot;math-container&quot;&gt;$x_0$&lt;/span&gt;, which is the initial displacement of the segment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If we substitute &lt;span class=&quot;math-container&quot;&gt;$at = v(t) - v_0$&lt;/span&gt; (from the velocity equation) into the displacement equation, we would then have&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\begin{align}&#xA;x(t) &amp;amp;= \frac{1}{2}(v(t) - v_0)t + v_0t + x_0\\&#xA;&amp;amp;= \frac{1}{2}(v(t) + v_0)t + x_0.&#xA;\end{align}&#xA;$$&lt;/span&gt;&#xA;Now you can probably see how it comes to be the average of the velocities.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the given table, you can view it as the trajectory being given as segments where each segment has duration of 1 second.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;For a third degree (piecewise cubic) trajectory, the idea is pretty much the same. You start from the fact that the jerk for each segment is constant, i.e.&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;x'''(t) = j(t) = j.&#xA;$$&lt;/span&gt;&#xA;Then all the remaining equations can be derived by integrating the above equation accordingly.&lt;/p&gt;&#xA;" OwnerUserId="7610" LastEditorUserId="7610" LastEditDate="2019-05-10T01:42:49.337" LastActivityDate="2019-05-10T01:42:49.337" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18767" PostTypeId="1" CreationDate="2019-05-09T12:59:01.443" Score="0" ViewCount="93" Body="&lt;p&gt;I am currently using the ICP to register Lidar point clouds in two frames. The problem is that the translation value calculated by the difference of average point values of utilized points in two frames seems not precise enough. Is there any alternative solutions to calculate the translation?&lt;/p&gt;&#xA;" OwnerUserId="22962" LastEditorUserId="22962" LastEditDate="2019-06-02T13:06:04.017" LastActivityDate="2019-06-02T13:06:04.017" Title="ICP for LiDAR point cloud data in two frames" Tags="&lt;lidar&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18768" PostTypeId="2" ParentId="18761" CreationDate="2019-05-09T19:25:36.980" Score="1" Body="&lt;p&gt;To begin with, let's first define the term trajectory and path. Once these definitions are clear, the rest will follow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Path is the set of all points a robot places itself at, to move from point A to point B.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Trajectory is path with time information. Simple!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So let's say if a robot moves from A(0,0) to B(4,4) along y = x curve, we say that the line joining the points A and B is the path the robot followed. However, if I say that the robot traversed along the path such that at t=0, it is at (0,0), at t=1, (1,1), at t=2, (2,2) and so on, then, not only I'm specifying the robot's position on the path, but also the time instants at which the robot is at a particular points on the path. This is trajectory. This is why you often hear SpaceX guys saying &quot;trajectory looking nominal&quot; and not &quot;path looking nomimal&quot;, the reason being that they have designed the rocket such that it must be at some defined points at defined time instants, in order to get out of Earth's atmosphere. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Few observations from the distinction between the two definitions; From trajectory, we can get velocity and acceleration values along with the position. But a path only defines the position and says nothing about the velocity and acceleration. The robot can take whole day to move from A to B, or it can take 1 min, 1hr or 1sec to move from A to B, we don't know! &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Definitions:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Trajectory tracking - the process of observing the positions of the robot along with the time instants at which it is present at the desired positions&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Trajectory planning - the process of planning the motion of the robot between point A to point B such that it covers the distance between the points in a time controlled manner i.e. it moves from A to B by traversing portions the path between A and B in defined time intervals. We also make sure that the robot moves exactly along the path we want it to move on. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Path planning - same as trajectory planning, but we don't consider the time constraints. We are concerned only with making the robot move from A to B.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Motion planning deals with path planning considering the external factors encountered during the motion like traffic, obstacles, bumps, dead points etc. So in motion planning you would not only move from A to B, but you would move in such a way that you don't collide with other objects(for eg.) or you would follow some walls, or follow some lines etc. &#xA;One example of motion planning will be autopilot! Autopilot makes the aircraft move from one airport to another in such a way that the aircraft doesn't collide with other aircrafts in air. Only path planning will give you n number of ways to reach Airport B, but motion planning will give you the most appropriate one which obeys the constraints you defined for the motion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basic methods of motion planning are Bug1, Bug2, tangent bug, wavefront planner, A*, Djikstras. The list is endless!&lt;/p&gt;&#xA;" OwnerUserId="22965" LastActivityDate="2019-05-09T19:25:36.980" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18769" PostTypeId="2" ParentId="18749" CreationDate="2019-05-09T20:30:01.807" Score="0" Body="&lt;p&gt;I think FreeCAD already has some capabilities in this regard. Also, if you are a hobbyist or a startup below $100K/year income, you are eligible to have Autodesk Fusion 360 for a year for free. It is the little brother of the Autodesk Inventor with more limited capabilities and using cloud to compute and store your models. It has dynamic simulation and constraining features. Personally, I am using the latter, but only because I used to Autodesk products already. Had a look on FreeCad too, it looks really promising for me considering that it is completely free.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you don't want to create your 3D model, then Matlab has various really nice toolboxes, oh right, that would not be free... Hope this helps a bit.&lt;/p&gt;&#xA;" OwnerUserId="18318" LastActivityDate="2019-05-09T20:30:01.807" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18771" PostTypeId="2" ParentId="18749" CreationDate="2019-05-10T13:52:29.357" Score="1" Body="&lt;p&gt;If you are comfortable with programming, you can use a free physics engine, like &lt;a href=&quot;https://github.com/bulletphysics/bullet3&quot; rel=&quot;nofollow noreferrer&quot;&gt;Bullet&lt;/a&gt; or &lt;a href=&quot;https://dartsim.github.io/&quot; rel=&quot;nofollow noreferrer&quot;&gt;DART&lt;/a&gt; to create your model. There are also &lt;a href=&quot;https://en.wikipedia.org/wiki/Physics_engine#Real-time_physics_engines&quot; rel=&quot;nofollow noreferrer&quot;&gt;many other ones&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are less comfortable with programming (as in you will still need to code, but this softwear at least has a GUI) you can use a robotics framework for simulation like &lt;a href=&quot;http://gazebosim.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Gazebo&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could take a look at &lt;a href=&quot;https://www.mbdyn.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;MBDyn&lt;/a&gt; which has a declarative way of defining a simulation. May be simpler then the ones above. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I doubt that any automotive simulation framework would allow you to implement the mechanical linkages of yout vehicle. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have some CAD tools available, most of them have add-onds for simulating multi-body systems, but most-of them are not free...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you do not want to code, I do not know any free solutions. If this is a hobby project, you could try the &lt;a href=&quot;https://de.mathworks.com/products/matlab-home.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Matlab Home&lt;/a&gt; edition (Mechatronics option) for under 300 USD, (if it is a commercial project the matlab licenses will cost well above 15k). Students also get free/cheap Matlab versions. Other then Matlab, you can try &lt;a href=&quot;https://www.maplesoft.com/products/maplesim/&quot; rel=&quot;nofollow noreferrer&quot;&gt;MapleSim&lt;/a&gt; or other commercial software. &lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2019-05-10T13:52:29.357" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18772" PostTypeId="1" AcceptedAnswerId="18776" CreationDate="2019-05-10T17:02:06.300" Score="2" ViewCount="48" Body="&lt;p&gt;I'm building a device using microcontrollers, and part of the device necessitates target recognition. That is to say, if there are three targets, A B and C, I want my device to know when I'm pointing at no target, or Target A, or Target B, etc. I was thinking originally of finding different wavelengths of IR LEDs and putting them around each target (each would have a different wavelength) but I want this to ideally be able to reach across a room, let's say 30 ft. Is this feasible with IR receivers and transmitters, or is there a better alternative? And, is the varied wavelength idea with these transmitters feasible otherwise?&lt;/p&gt;&#xA;" OwnerUserId="22973" LastActivityDate="2019-05-12T18:06:23.453" Title="Target Recognition for Microcontrollers" Tags="&lt;arduino&gt;&lt;raspberry-pi&gt;&lt;microcontroller&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18773" PostTypeId="2" ParentId="17871" CreationDate="2019-05-10T23:51:39.773" Score="4" Body="&lt;p&gt;I'm a product manager from the AWS RoboMaker team. We have a tutorial that can help you get started with the service: &lt;a href=&quot;https://aws.amazon.com/robomaker/resources/train-a-robot-using-reinforcement-learning-project/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Projects on AWS:&#xA;How to Train a Robot Using Reinforcement Learning&#xA;with AWS RoboMaker&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have any questions or feedback for the service, please reach out to me and I would love to help and take your feedback to improve our service.&lt;/p&gt;&#xA;" OwnerUserId="22974" LastEditorUserId="9176" LastEditDate="2019-05-11T09:25:44.037" LastActivityDate="2019-05-11T09:25:44.037" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18774" PostTypeId="1" CreationDate="2019-05-11T10:18:10.993" Score="0" ViewCount="107" Body="&lt;p&gt;Being new to the world of stepper motors, I have a &lt;a href=&quot;http://www.longs-motor.com&quot; rel=&quot;nofollow noreferrer&quot;&gt;Longs&lt;/a&gt; Stepper Motor 23HS9430 bought from eBay it's a 3.0&amp;nbsp;A 5&amp;nbsp;V motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although I have been reading about the supply voltage for the motor, the controller I have, again from eBay, has a supply voltage of 9-42&amp;nbsp;V DC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What would be the best controller and supply voltage to run the stepper? The application is a antenna controller with a worm drive gearbox connected to the hardware that moves the antennas.&lt;/p&gt;&#xA;" OwnerUserId="22975" LastEditorUserId="9176" LastEditDate="2019-05-11T12:49:19.257" LastActivityDate="2021-05-03T02:02:41.213" Title="Stepper Motor power supplies" Tags="&lt;power&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18775" PostTypeId="2" ParentId="18774" CreationDate="2019-05-12T07:16:30.487" Score="-1" Body="&lt;p&gt;I would recommend adhering to the specs of the motor for power supply.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please see the following for driver:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.pololu.com/product/2970&quot; rel=&quot;nofollow noreferrer&quot;&gt;AMIS-30543 Stepper Motor Driver Carrier&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.electronics-lab.com/project/3a-unipolar-stepper-motor-driver/&quot; rel=&quot;nofollow noreferrer&quot;&gt;3A UNIPOLAR STEPPER MOTOR DRIVER&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="22979" LastEditorUserId="9176" LastEditDate="2019-05-12T12:17:43.647" LastActivityDate="2019-05-12T12:17:43.647" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18776" PostTypeId="2" ParentId="18772" CreationDate="2019-05-12T18:06:23.453" Score="2" Body="&lt;p&gt;An IR transmitter is a circuit and an LED.  An IR receiver is an optical filter (essentially a piece of colored plastic, but the &quot;color&quot; is in the IR), a phototransistor or photodiode, and a circuit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To make what you want using different wavelengths, you need to find IR LEDs with non-overlapping emissions (so they don't interfere with each other), and you need to find three different kinds of IR filter material, each that passes the light from one of your LED types but not from the other two.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just off the bat, this doesn't sound feasible for a commercial application, much less hobby.  If you were getting a PhD in robotics and had a friend down the hall researching optical filter materials -- maybe you could do it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The suggestion of using a TV remote would work, more or less, although TV remote receivers have automatic gain control, so it would be difficult to make fine distinctions in direction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Part of my background is in radio and communications signal processing, so the technique that leaps to my mind is to have each LED beacon use identical LEDs, but pulse at a different frequency.  You'd want the frequencies separated enough for easy discrimination with filters, and probably not harmonically related.  So, for example, 50, 55 and 60kHz.  If you build the receiver circuit correctly you can amplify the output of the photodetectors with a circuit that has a passband of 50-60kHz, then either run them into three separate discriminator circuits, or run them into an ADC that samples sufficiently fast (200kHz is my knee-jerk &quot;fast enough&quot; suggestion, but there's wiggle room there) and do the discrimination in software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Doing the &quot;sample first then process in software&quot; option requires a sufficiently powerful microprocessor to do the discrimination -- my gut feel is that anything 8-bit would be woefully inadequate, but an ARM Cortex M4 or better core running fast and with reasonably efficient code would do it.  It requires a healthy dose of DSP chops to write the software.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Doing the &quot;discriminate in circuitry&quot; option requires a filter bank of three filters centered on the pulse frequencies, with reasonably well-balanced gains, followed by some sort of amplitude detection into three times as many ADC channels.  It requires a healthy dose of analog circuits chops to design the circuits, and you'll need to deal with component variation and find the board space for the circuitry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;No matter how you do the discrimination, once you get your &quot;channel per target&quot; into your actual direction-finding software, you can use whatever technique would work for a single beacon to find each one of the three.&lt;/p&gt;&#xA;" OwnerUserId="1411" LastActivityDate="2019-05-12T18:06:23.453" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18778" PostTypeId="2" ParentId="15178" CreationDate="2019-05-13T07:46:23.443" Score="1" Body="&lt;p&gt;I agree with @NikolaPi in principle. &#xA;But the controlling/driving mechanism is important here. If you are using &lt;strong&gt;PID controlling&lt;/strong&gt;, then steering the robot can be very smooth. All you have to do is to tune the variables so that when robot starts getting closer to lets say, left wall, left motor's pwm increases w.r.t. the right one and vice versa. This way the robot will remain in an imaginary boundary/lane that is slightly wider than the robot but significantly smaller than the Tunnel's width. But the tuning will take a little effort to find the sweet spot where the correction neither occurs too often nor too late (Hint: You robot should move almost straight without compromising on speed. If its is moving in the form of the letter &quot;S&quot;, your limits are too generous).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, if you are using the simpler &lt;strong&gt;On/Off Controlling technique&lt;/strong&gt; (also known as &lt;em&gt;band bang approach&lt;/em&gt;), you take a limit of IR sensor reading from one wall and program according to that. If it crosses the limit, stop the other sides motor for some time so that the robot comes back to its center position. But beware that in this approach, with the battery voltage drop, the response from the motors changes. What I mean is that if you tune the robot to switch off motor for 100 ms in case of limit detection and it comes back to the good position, when the battery would get drained a little, the robot would need 130 or 150 ms of switching off to make the same correction. Of course it won't be able to as you have set it to 100 ms so there will be an error in the robots's position every time an adjustment is made. Eventually, these errors will pile up and the robot will collide with a wall.&lt;/p&gt;&#xA;" OwnerUserId="22979" LastActivityDate="2019-05-13T07:46:23.443" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18779" PostTypeId="2" ParentId="15569" CreationDate="2019-05-14T02:48:30.537" Score="0" Body="&lt;p&gt;Check out an app on Google play (Arduino Object Detection and tracking by Gemcode Studios) It uses both opencv and tensor flow and sends image details over Bluetooth to an Arduino for further robot control and processing. &lt;/p&gt;&#xA;" OwnerUserId="22990" LastActivityDate="2019-05-14T02:48:30.537" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18780" PostTypeId="2" ParentId="16832" CreationDate="2019-05-14T11:06:39.607" Score="1" Body="&lt;p&gt;Looking at the code in &lt;a href=&quot;https://books.google.co.uk/books?id=2TRNAAAAQBAJ&amp;amp;lpg=PA3&amp;amp;ots=qmwMqS9pvr&amp;amp;dq=Embedded%20Robotics%20by%20Thomas%20Br%C3%A4unl&amp;amp;lr&amp;amp;pg=PA93#v=onepage&amp;amp;q=Embedded%20Robotics%20by%20Thomas%20Br%C3%A4unl&amp;amp;f=false&quot; rel=&quot;nofollow noreferrer&quot;&gt;Embedded Robotics by Thomas Bräunl, DOI: 10.1.1.474.8129&lt;/a&gt; this appears to be an 'optimised' (i.e. difficult to follow) version of an &lt;strong&gt;integer&lt;/strong&gt; PID controller for velocity control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It sounds like you want control position rather than velocity though, so you need a position PID controller, as described by &lt;a href=&quot;https://robotics.stackexchange.com/a/16837/37&quot;&gt;Chuck♦&lt;/a&gt;, which is more directly applicable to your problem and easier to understand.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you do want a velocity controller however, read on...&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The code in question is on page 93, &lt;em&gt;Program 5.7: PID controller code&lt;/em&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;static int r_old=0, e_old=0, e_old2=0;&#xA;...&#xA;e_func = v_des - v_act;    /* error in velocity */&#xA;r_mot  = r_old + Kp*(e_func-e_old) + Ki*(e_func+e_old)/2&#xA;               + Kd*(e_func - 2* e_old + e_old2);&#xA;                           /* motor output */&#xA;r_mot = min(r_mot, +100);  /* limit motor output */&#xA;r_mot = max(r_mot, -100);  /* limit motor output */&#xA;r_old  = r_mot;            /* store this motor output */&#xA;e_old2 = e_old;            /* store last velocity error */&#xA;e_old  = e_func;           /* store this velocity error */&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In this snippet I've restored the &lt;code&gt;static&lt;/code&gt; line (which is important as it shows this is an integer controller and not a floating point controller), left the original &lt;code&gt;max&lt;/code&gt; functions in place, as they are easier to understand, and added comments.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this code, the &lt;code&gt;v_des&lt;/code&gt; is the desired velocity per controller period, the &lt;code&gt;v_act&lt;/code&gt; is the current actual velocity per controller period.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your changes appear to be:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The addition of the &lt;code&gt;_r&lt;/code&gt; suffix (presumably to designate the right motor, and I assume there is similar code for the left motor)&lt;/li&gt;&#xA;&lt;li&gt;Replacing the &lt;code&gt;max&lt;/code&gt; function with a pair of hard coded &lt;code&gt;if&lt;/code&gt; statements&lt;/li&gt;&#xA;&lt;li&gt;Defining &lt;span class=&quot;math-container&quot;&gt;$K_P$&lt;/span&gt; in terms of it's reciprocal.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The problem is the last change combined with the fact that we are using &lt;strong&gt;integer&lt;/strong&gt; arithmetic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Calculating &lt;code&gt;1/K_P&lt;/code&gt; will evaluate to either &lt;code&gt;0&lt;/code&gt; for &lt;code&gt;K_P&amp;gt;1&lt;/code&gt;) and &lt;code&gt;1&lt;/code&gt; for &lt;code&gt;K_P==1&lt;/code&gt;, assuming sensible values of &lt;span class=&quot;math-container&quot;&gt;$K_P&amp;gt;0$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you are effectively turning your &lt;em&gt;Proportional Integral Derivative&lt;/em&gt; controller into a &lt;em&gt;Integral Derivative&lt;/em&gt; controller for any value of &lt;span class=&quot;math-container&quot;&gt;$K_P$&lt;/span&gt; other than &lt;code&gt;1&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you went back to using &lt;code&gt;K_P&lt;/code&gt; directly rather than trying to use &lt;code&gt;(1/K_P)&lt;/code&gt; then you should be able to tune your motor for velocity control.&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="37" LastEditDate="2019-05-14T11:32:10.730" LastActivityDate="2019-05-14T11:32:10.730" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18783" PostTypeId="1" CreationDate="2019-05-15T00:47:52.180" Score="0" ViewCount="102" Body="&lt;p&gt;I have a rather niche application of PID control, and I am looking for ideas on how to solve it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Design&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Temperature sensor is externally mounted on a liquid vessel's body --&gt; &lt;code&gt;T_surface&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Goal is to control the liquid temperature to a variable setpoint around 35°C --&gt; &lt;code&gt;T_liquid&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;There are stick-on heaters mounted to the liquid vessel's body --&gt; ability to heat the liquid --&gt; &lt;code&gt;heater_power&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;The liquid is cooled by just letting the vessel cool down&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;PID Set Up&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a PID control algorithm with:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Feedback: &lt;code&gt;T_surface&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Output: &lt;code&gt;heater_power&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Setpoint: &lt;code&gt;T_liquid&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The vessel wall is thick enough that &lt;code&gt;T_surface != T_liquid&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Temperature Offset&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The difference in temperature is: &lt;code&gt;dT = T_liquid - T_surface&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: &lt;code&gt;dT&lt;/code&gt; is a function of &lt;code&gt;T_liquid&lt;/code&gt;.  For example, if:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;T_liquid = ~30°C&lt;/code&gt; --&gt; &lt;code&gt;dT = ~1&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;T_liquid = ~40°C&lt;/code&gt; --&gt; &lt;code&gt;dT = ~2&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;My Implementation&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;I roughly mapped &lt;code&gt;dT&lt;/code&gt; to be linearly related with &lt;code&gt;T_liquid&lt;/code&gt; --&gt; &lt;code&gt;offset_value&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;I set the feedback sensor's value to be &lt;code&gt;T_surface - offset_value&lt;/code&gt;. In other words, my input signal is a biased value of the feedback&lt;/li&gt;&#xA;&lt;li&gt;I tuned my PID loop based on this and it works &lt;em&gt;okay&lt;/em&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Question&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I realized I am basically trying to tune a PID algorithm to have a steady state offset.  The offset is a function of &lt;code&gt;T_liquid&lt;/code&gt;.  Let's assume I know what I want offset to be.  Here are my questions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;How can I tune a PID algorithm to have a steady state offset?&lt;/li&gt;&#xA;&lt;li&gt;Can you think of a better way to go about this?  (Assume an inability to change the mechanical design)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="23001" LastEditorUserId="23001" LastEditDate="2019-05-16T16:41:34.923" LastActivityDate="2020-03-17T17:01:30.193" Title="PID control while desiring steady state offset" Tags="&lt;control&gt;&lt;pid&gt;" AnswerCount="3" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18784" PostTypeId="2" ParentId="14091" CreationDate="2019-05-15T03:45:29.460" Score="-1" Body="&lt;p&gt;As much capacity as possible and the same time make the batteries lightweight  &lt;/p&gt;&#xA;" OwnerUserId="21516" LastActivityDate="2019-05-15T03:45:29.460" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18786" PostTypeId="2" ParentId="18748" CreationDate="2019-05-15T10:05:38.320" Score="1" Body="&lt;p&gt;You can try the following. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Set an admittance you want as &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$ F_e = m_d \ddot q + c_d \dot q$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;then, you can solve for &lt;span class=&quot;math-container&quot;&gt;$q$&lt;/span&gt; as the velocity reference &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$q_r = \frac{F_e -  m_d \ddot q_r}{c_d}$&lt;/span&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;and approximate the acceleration through a forward euler with the velocity commands as &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\ddot q _r = \frac{q_{r_{k}}- q_{r_{k-1}}}{dt}$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and insert that in the equation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;note that &lt;span class=&quot;math-container&quot;&gt;$F_e$&lt;/span&gt; is the difference from what you get from the torque sensors in the joints (that is the torque between the motors and eternal force) minus your model that includes not only gravity but coriolis and cetrifugal and mass, for which you also need to use the acceleration (filtered). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;so &lt;span class=&quot;math-container&quot;&gt;$F_e = \tau_{sensors} - \tau_{robot model}$&lt;/span&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;All this ideas are exposed in &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bekker, M., Pedersen, R.L., Mendez, J.D., Rasmussen, M.H., &amp;amp; Bak, T. (2018). Implementation of Admittance Control on a Construction Robot Using Load Cells. 2018 IEEE Conference on Control Technology and Applications (CCTA), 273-279.&lt;/p&gt;&#xA;" OwnerUserId="21229" LastActivityDate="2019-05-15T10:05:38.320" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18787" PostTypeId="1" CreationDate="2019-05-15T10:08:53.130" Score="0" ViewCount="86" Body="&lt;p&gt;I'm using an HMC5883l compass module to find the angle at which my module is pointed from magnetic North. I found this code as an example with &quot;HMC5883L_Simple.h&quot; library.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/A6kWD.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/A6kWD.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And the results I'm getting right now are like this. Is it the angle at which my module is pointed from magnetic North in degrees? If not, How can find the pointing angle&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/izDWS.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/izDWS.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="22560" LastActivityDate="2021-03-07T08:01:10.133" Title="Interfacing HMC5883l Compass with Arduino" Tags="&lt;navigation&gt;&lt;magnetometer&gt;&lt;autonomous-car&gt;&lt;compass&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18788" PostTypeId="2" ParentId="18787" CreationDate="2019-05-15T13:06:04.193" Score="0" Body="&lt;p&gt;I saw the code and yes, it is in degrees. It also would not make sense to be in radians cause it would mean a lot of turns. &lt;/p&gt;&#xA;" OwnerUserId="21229" LastActivityDate="2019-05-15T13:06:04.193" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18789" PostTypeId="2" ParentId="18653" CreationDate="2019-05-15T13:16:01.120" Score="3" Body="&lt;p&gt;Imagine that you hold a position very stiff in your arm. You are holding your muscles tight to keep that position and hold it very tightly. Then you walk to move your arm without moving your arm with your arm muscles and crash into a wall. You will hurt yourself cause you tried to go there very stiff and didn't care what you would came in contact with as long as the position is hold. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now imagine that you hold in front a memory-pillow in front of your arm. That can be analog to have another link in your serial robot configuration. Then you crash into a wall but the pillow will compress (not very stiff spring) itself loosing position and reducing the contact force (impedance). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a very broad sense the impedance controller looks similar to a PD controller (computed torque or augmented computed torque). It is also possible to do an impedance controller without a force sensor (no shape of the apparent inertia) and the main difference with a position controller is the lack of an integral gain that will make it converge to a zero steady state error. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The force controller requires a measurement/estimation of the force to close the control loop and a force reference is needed to be tracked, the impedance controller does not need a force to track. &lt;/p&gt;&#xA;" OwnerUserId="21229" LastActivityDate="2019-05-15T13:16:01.120" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18790" PostTypeId="2" ParentId="18629" CreationDate="2019-05-15T13:20:07.170" Score="1" Body="&lt;p&gt;It is approximate and very accurate as long as the material properties are well defined. Many methods are combined to get it. Moment of inertia, parallel axes, mass distribution, etc etc. Simplification methods are implemented to make the computations efficient. All the bodies are simplified as well using triangles to make them convex. &lt;/p&gt;&#xA;" OwnerUserId="21229" LastActivityDate="2019-05-15T13:20:07.170" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18792" PostTypeId="1" CreationDate="2019-05-15T17:07:00.583" Score="2" ViewCount="911" Body="&lt;p&gt;I'm developing a PID controller for making the drone follow a detected object.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I used as reference these topics:  &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/8849/tracking-objects-from-camera-pid-controlling-parrot-ar-drone-2&quot;&gt;Ttracking-objects-from-camera-pid-controlling-parrot-ar-drone&lt;/a&gt;  &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/questions/34713594/tracking-objects-from-camera-pid-controlling-parrot-ar-drone-2/34958479#34958479&quot;&gt;Tracking-objects-from-camera-pid-controlling-parrot-ar-drone&lt;/a&gt; &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I wrote a Python code that interacts with ROS &lt;code&gt;bebop_autonomy&lt;/code&gt; package.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the detection, I used &lt;a href=&quot;https://pjreddie.com/darknet/yolo/&quot; rel=&quot;nofollow noreferrer&quot;&gt;YOLO&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is that I'm not sure if the PID that I wrote is correct and I don't know how to tune the gain parameters. I have read about the theory of PID tuning like &lt;a href=&quot;https://robotics.stackexchange.com/questions/167/what-are-good-strategies-for-tuning-pid-loops&quot;&gt;What are good strategies for tuning PID loops?&lt;/a&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also know that with an input step you can graph the response and then based on it tune the gains until you obtain the desired characteristics but here I don't know how to do the graphs as the input is a pixel value of the bounding box.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do you know how should I tune the gain parameters? Also, let me know if how I developed the PID is correct or if there is a better way to do it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;import rospy&#xA;from darknet_ros_msgs.msg import BoundingBoxes&#xA;from std_msgs.msg import Empty&#xA;from geometry_msgs.msg import Twist&#xA;&#xA;def set_state(input):   #possible states: &quot;pd&quot;, &quot;np &quot; person detected, no person&#xA;    global state&#xA;    state = input&#xA;def get_state():&#xA;    return(state)&#xA;&#xA;def callback(data):&#xA;&#xA;Cy_center = 340 #x center position of the image&#xA;Cz_center = 240 #y center position of the image&#xA;Area_id = 640 * 480 * 0.30 # 30% of pixel area (for x)&#xA;K_x = 1 #vel_x paramete&#xA;sum_error_x = 0&#xA;sum_error_y = 0&#xA;sum_error_z = 0&#xA;&#xA;#parameters to tune&#xA;Kp_fb = 0.2 #proportional gain FORWARD/BACKWARD&#xA;Kd_fb = 1.5 #derivative gain FORWARD/BACKWARD&#xA;Ki_fb = 1 #integral gain FORWARD/BACKWARD&#xA;Kp_lr = 0.2 #proportional gain LEFT/RIGHT&#xA;Kd_lr = 1.5 #derivative gain LEFT/RIGHT&#xA;Ki_lr = 1 #integral gain LEFT/RIGHT&#xA;Kp_ud= 0.2 #proportional gain UP/DOWN&#xA;Kd_ud = 1.5 #derivative gain UP/DOWN&#xA;Ki_ud = 1 #integral gain UP/DOWN&#xA;&#xA;state = get_state()&#xA;&#xA;pub = rospy.Publisher('bebop/cmd_vel', Twist, queue_size = 1)&#xA;pub_land = rospy.Publisher('bebop/land', Empty, queue_size = 1)&#xA;pub_takeoff = rospy.Publisher('bebop/takeoff', Empty, queue_size = 1)&#xA;empty_msg = Empty()&#xA;twist = Twist()&#xA;&#xA;if state == &quot;np&quot;:&#xA;    twist.linear.x = 0; twist.linear.y = 0; twist.linear.z = 0; &#xA;    twist.angular.x = 0; twist.angular.y = 0; twist.angular.z = -0.3;&#xA;    pub.publish(twist)&#xA;    print(&quot;Looking for person&quot;)&#xA;&#xA;for box in data.bounding_boxes:&#xA;&#xA;    if box.Class == &quot;person&quot;:&#xA;&#xA;        set_state(&quot;pd&quot;)&#xA;        Cy = box.xmin+(box.xmax-box.xmin)/2;&#xA;        Cz = box.ymin+(box.ymax-box.ymin)/2;&#xA;&#xA;        Area_ref = ((box.xmax - box.xmin) * (box.ymax - box.ymin))&#xA;        error_y = Cy_center - Cy # LEFT/RIGHT&#xA;        #error_z = Cz_center - Cz # UP/DOWN&#xA;        error_z = Cz_center - box.ymin #so drone will fly higher&#xA;        error_x = Area_id - Area_ref #FORWARD/BACKWARD&#xA;        vel_y = error_y/320&#xA;        if vel_y &amp;gt;= 1:&#xA;            vel_y = 1&#xA;        elif vel_y &amp;lt;= -1:&#xA;            vel_y = -1&#xA;        vel_z = error_z/320&#xA;        if vel_z &amp;gt;= 1:&#xA;            vel_z = 1&#xA;        elif vel_z &amp;lt;= -1:&#xA;            vel_z = -1&#xA;        vel_x = (error_x*K_x)/Area_id&#xA;        if vel_x &amp;gt;= 1:&#xA;            vel_x = 1&#xA;        elif vel_x &amp;lt;= -1:&#xA;            vel_x = -1&#xA;&#xA;        #PID X AXES&#xA;        sum_error_x = sum_error_x + vel_x&#xA;        last_error_x = vel_x&#xA;        output_x = Kp_fb * vel_x + Kd_fb * (vel_x - last_error_x) + Ki_fb * sum_error_x&#xA;&#xA;        #PID Y AXES&#xA;        sum_error_y = sum_error_y + vel_y&#xA;        last_error_y = vel_y&#xA;        output_y = Kp_lr * vel_y + Kd_lr * (vel_y - last_error_y) + Ki_lr * sum_error_y&#xA;&#xA;        #PID Z AXES&#xA;        sum_error_z = sum_error_z + vel_z&#xA;        last_error_z = vel_z&#xA;        output_z = Kp_lr * vel_z + Kd_lr * (vel_z - last_error_z) + Ki_lr * sum_error_z &#xA;&#xA;&#xA;    #SEND COMMANDS&#xA;    twist.linear.x = 0.5*output_x; twist.linear.y = 0.5*output_y; twist.linear.z = 0.5*output_z; &#xA;    twist.angular.x = 0; twist.angular.y = 0; twist.angular.z = 0;&#xA;    pub.publish(twist)&#xA;&#xA;&#xA;    rospy.loginfo(&#xA;        &quot;vel_x: {}, vel_y: {}, vel_z: {}, Classe: {}&quot;.format(round(output_x,2), round(output_y,2), round(output_z,2), box.Class)&#xA;    )&#xA;&#xA;def main():&#xA;    set_state(&quot;np&quot;)&#xA;    while not rospy.is_shutdown():&#xA;&#xA;    rospy.init_node('listener', anonymous=True)&#xA;    rate = rospy.Rate(1)&#xA;    rospy.Subscriber('/darknet_ros/bounding_boxes', BoundingBoxes , callback )&#xA;    set_state(&quot;np&quot;) #reset state to no person in case detector fails to detect&#xA;    rospy.spin() #blocks until ros node is shutdown&#xA;&#xA;&#xA;if __name__ == '__main__':&#xA;    try :&#xA;        main()&#xA;    except rospy.ROSInterruptException:&#xA;        pass&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="22745" LastEditorUserId="18870" LastEditDate="2019-05-17T07:48:26.810" LastActivityDate="2021-03-11T15:03:20.313" Title="Python PID tuning - Parrot Bebop 2 - Target follower - ROS" Tags="&lt;ros&gt;&lt;pid&gt;&lt;python&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="18793" PostTypeId="2" ParentId="11963" CreationDate="2019-05-15T18:46:26.627" Score="1" Body="&lt;p&gt;STL Files have an internal coordinate system relative to which the vertices of the mesh are expressed. You are transforming these vertices with the transformation matrix that is correct, however only in the case when the origin coordinate system of the STL file (the coordinate system relative to which the vertice coordinates are expressed correspond to the DH coordinate system attached to the linkage. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Make sure to define a coordinate system in SolidWorks which has the same origin point and orientation relative to the linkage as the Dh coordinate system has. In other words, orient the z axis towards the motion axis, etc. After this, when you export the STL file, make sure to select this coordinate system as the origin. Furthermore, make sure not to select the translate all vertices to positive option. (SolidWorks offers both these option and AFAIK the default options are not the required ones.)&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2019-05-15T18:46:26.627" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18795" PostTypeId="2" ParentId="11785" CreationDate="2019-05-16T11:03:03.193" Score="0" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Do you maybe have some examples of laser-based sensors too?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I will recommend this &lt;a href=&quot;https://www.seeedstudio.com/Seeedstudio-Grove-TF-Mini-LiDAR.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mini Lidar sensor&lt;/a&gt; that only costs $39.9&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also,you do need the &lt;a href=&quot;https://www.seeedstudio.com/Grove-Ultrasonic-Ranger.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;ultrasonic distance sensor&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/LiVPa.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/LiVPa.jpg&quot; alt=&quot;Measurement range schematic diagram&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="23007" LastActivityDate="2019-05-16T11:03:03.193" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18797" PostTypeId="2" ParentId="18783" CreationDate="2019-05-16T22:21:59.553" Score="0" Body="&lt;p&gt;Perhaps you could encode a positive feedback system into your programming. This system would analyze the output of the PID. If the water heater is heating and the water heater was actually heating the water, the water heater would automatically draw more power, and therefore, heat more.  &lt;/p&gt;&#xA;" OwnerUserId="23013" LastActivityDate="2019-05-16T22:21:59.553" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18801" PostTypeId="1" AcceptedAnswerId="18807" CreationDate="2019-05-17T10:30:56.527" Score="1" ViewCount="730" Body="&lt;p&gt;I'm new to Atmel Studio. I used BASCOM-AVR until now. I know my question is very basic but I couldn't solve my problem by searching internet.&lt;br/&gt;&#xA;I wrote a code in BASCOM (Basic laguage) to control two DC motors using ATmega32 and L298n. Here is a part of it:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;math-container&quot;&gt;$regfile = &quot;m32def.dat&quot;&#xA;$&lt;/span&gt;crystal = 1000000&#xA;&#xA;Config Timer1 = Pwm , Pwm = 10 , Compare_A_Pwm = Clear_Up , Compare_B_Pwm = Clear_Up , Prescale = 1&#xA;&#xA;'D.0 and D.1 for right, D.2 and D.3 for left&#xA;Config PortD.3 = Output&#xA;Config PortD.2 = Output&#xA;Config PortD.1 = Output&#xA;Config PortD.0 = Output&#xA;&#xA;'pwm1a for left motor, pwm1b for right motor&#xA;&#xA;Do&#xA;    reset portd.1&#xA;    reset portd.2&#xA;    set portd.0&#xA;    set portd.3&#xA;    pwm1b = 500&#xA;    pwm1a = 1023&#xA;    waitms 2000&#xA;&#xA;    reset portd.0&#xA;    reset portd.3&#xA;    set portd.1&#xA;    set portd.2&#xA;    pwm1b = 1023&#xA;    pwm1a = 500&#xA;    waitms 2000&#xA;Loop&#xA;End&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Now I want to convert it to &quot;C&quot; for Atmel Studio but I can't understand syntax for PWM in C.&lt;br/&gt;&#xA;Also, I didn't understand the way to set just a pin to 0 or 1 (not a port). I mean, if I write (in Atmel Studio):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;PORTD = 0b00001001;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;pind0 and pind3 are high and pind1 and pind2 are low but I'm worried if setting pind4...7 to 0 affects PWM (Because PD4 and PD5 are for PWM).&lt;br/&gt;&#xA;Could you please explane me syntax of PWM in C and answer my second question?&lt;br/&gt;&#xA;It would be very good if you convert my code to C and explane C by comparing it to Basic! :)&lt;br/&gt;&#xA;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="23020" LastActivityDate="2019-12-26T11:05:24.670" Title="control DC motor by Atmega and L298 code in Atmel Studio" Tags="&lt;motor&gt;&lt;c&gt;&lt;avr&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18802" PostTypeId="1" AcceptedAnswerId="18803" CreationDate="2019-05-17T13:19:45.547" Score="0" ViewCount="104" Body="&lt;p&gt;I am currently designing a 2D simulation of a 3DOFs robotic arm in order to develop a better understanding of inverse kinematic (so as to avoid breaking more components than necessary) but despite my numerous readings I still cannot figure out how apply it to my arm.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried to represent my arm joints as a combination of three circle radiuses, or using complex exponential form (I did a very &lt;a href=&quot;https://www.geogebra.org/m/fr6fnpun&quot; rel=&quot;nofollow noreferrer&quot;&gt;simple modelization&lt;/a&gt; using Geogebra), but no matter the method I can't figure out how to constrain my problem. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;During my research I came across this blog: &lt;a href=&quot;https://studywolf.wordpress.com/2013/04/11/inverse-kinematics-of-3-link-arm-with-constrained-minimization-in-python/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Inverse kinematics of 3-link arm with constrained minimization in Python&lt;/a&gt; and I found the solution really elegant, but even if it feels logical, I don't understand it.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What's the math behind it? Is it based on Lagrange multiplier?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I understand is that we want to find the appropriate combination of three angles so that the end effector of our robot ends up at the right position. I understand there are infinitely many solutions among which we want to pick the one that suits us the best, but I don't understand how. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could you please explain me the method used in this blog?&lt;/p&gt;&#xA;" OwnerUserId="23021" LastEditorUserId="9176" LastEditDate="2019-05-17T16:26:24.177" LastActivityDate="2019-06-16T18:03:10.327" Title="Explanations about inverse kinematic" Tags="&lt;robotic-arm&gt;&lt;inverse-kinematics&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18803" PostTypeId="2" ParentId="18802" CreationDate="2019-05-17T17:05:01.430" Score="2" Body="&lt;p&gt;The referenced blog is called studywolf, and apart from the inverse kinematics problem ,it provides a large variety of robotics tutorials and i have it own my own watchlist as well. To the problem of the IK solver itself: the question goes into the right direction. Creating a model and visualizing it, is the first important step in robotics engineering. What the studywolf blog has described is a sequential least squares method, which was introduced in a forum post at robotics.SE a while ago.[1] The goal is to find the minimum of a function.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another option for approaching the IK problem is the mentioned Lagrange technique.[2] It is similar to Gradient Descent [3] an optimization method for solving a system of equations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[1] Least square method &lt;a href=&quot;https://robotics.stackexchange.com/a/15451/14283&quot;&gt;https://robotics.stackexchange.com/a/15451/14283&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[2] Lagrange &lt;a href=&quot;https://robotics.stackexchange.com/a/10258/14283&quot;&gt;https://robotics.stackexchange.com/a/10258/14283&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[3] Gradient Descent &lt;a href=&quot;https://robotics.stackexchange.com/q/9904/14283&quot;&gt;Solving Inverse Kinematics with Gradient Descent&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2019-05-17T17:05:01.430" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18806" PostTypeId="1" AcceptedAnswerId="18903" CreationDate="2019-05-18T05:18:19.730" Score="4" ViewCount="446" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/23lQy.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/23lQy.png&quot; alt=&quot;Rviz screenshot&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hi, &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a wheeled-legged robot as you can see in the picture. When I simulate it in ROS-Gazebo it works fine, however at the same time in Rviz it moves sideways instead of forward or backwards. I have no idea why it is behaving like this. Would greatly appreciate if someone can give me some clue here.&lt;/p&gt;&#xA;" OwnerUserId="21747" LastActivityDate="2021-01-23T23:49:58.183" Title="Robot moving sideways in RVIZ ROS" Tags="&lt;ros&gt;&lt;rviz&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18807" PostTypeId="2" ParentId="18801" CreationDate="2019-05-18T07:02:34.297" Score="0" Body="&lt;p&gt;OK. After many researches and reading some books, I found the way. Here is my code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;avr/io.h&amp;gt;&#xA;#define F_CPU 8000000UL     //8MHz CPU frequency&#xA;#include &amp;lt;util/delay.h&amp;gt;     //To use _delay_ms()&#xA;&#xA;void pwm_init()     //to initialize PWM&#xA;{&#xA;    TCCR1A = 0b10100011;     //register TCCR1A&#xA;    TCCR1B = 0b00000001;     //register TCCR1B&#xA;    DDRD = 0b11111111;     //set portd as output &#xA;}&#xA;&#xA;int main(void)&#xA;{   &#xA;    pwm_init();     //to initialize PWM&#xA;    //D0 and D1 for right motor, D2 and D3 for left motor&#xA;    while(1)&#xA;    {&#xA;        PORTD = 0b00000101;&#xA;        OCR1A = 1023;     //maximum&#xA;        OCR1B = 500;&#xA;        _delay_ms(2000);&#xA;&#xA;        PORTD = 0b00000110;&#xA;        OCR1A = 500;&#xA;        OCR1B = 1023;     //maximum&#xA;        _delay_ms(2000);&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In my code, because I want to control a DC motor using L298, I must use &quot;10-BIT Phase correct PWM&quot; mode, prescale 1 and non-inverted PWM; So that I must set register TCCR1A in this way:&lt;br/&gt;&lt;br/&gt;&#xA;COM1A1 &amp;amp; COM1B1: 1&lt;br/&gt;&#xA;COM1A0 &amp;amp; COM1B1: 0&lt;br/&gt;&#xA;FOC1A &amp;amp; FOC1B: 0&lt;br/&gt;&#xA;WGM11 &amp;amp; WGM10:1&lt;br/&gt;&lt;br/&gt;&#xA;And TCCR1B in this way:&lt;br/&gt;&lt;br/&gt;&#xA;CS10: 1&lt;br/&gt;&#xA;All other bits: 0&lt;br/&gt;&lt;br/&gt;&#xA;According to the structure of TCCR1A and TCCR1B registers, you must set them like this:&lt;br/&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;TCCR1A = 0b10100011;&#xA;TCCR1B = 0b00000001;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And you can set PWM duty cycle by setting OCCR1A and OCCR1B variables. It's clear that minimum value is always 0! But maximum value depends on resolution of your PWM (8,9 or 10-BIT).&lt;br/&gt;&lt;br/&gt;&#xA;Note: I didn't test it using &lt;em&gt;real parts&lt;/em&gt; yet. Just &lt;em&gt;simulations&lt;/em&gt; show me the correct result. If there is any mistake in my code, &lt;strong&gt;please post it in the comments&lt;/strong&gt;!&lt;/p&gt;&#xA;" OwnerUserId="23020" LastEditorUserId="23020" LastEditDate="2019-05-18T07:36:54.680" LastActivityDate="2019-05-18T07:36:54.680" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18808" PostTypeId="1" AcceptedAnswerId="18818" CreationDate="2019-05-18T08:37:52.007" Score="2" ViewCount="45" Body="&lt;p&gt;I'm asking for help on understanding stepper motor + gearbox solution, as I've got totally confused during my research on topic. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Story&lt;/strong&gt;:&lt;br&gt;&#xA;Trying to make a sort of precise turning table (at least 1°/step), I've found out that stepper motors may be a good choice, given enough step resolution. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;At this point steppers with a gearbox might step in, but info on Web is somewhat different, thus messing everything up.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, I would like to get straight answers for straight questions: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Questions&lt;/strong&gt;:  &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;What is the real gearbox ratio for stepper like this - &#xA;&lt;a href=&quot;https://s.click.aliexpress.com/e/bSyKaBFk&quot; rel=&quot;nofollow noreferrer&quot;&gt;5V Stepper Motor 28BYJ-48 With Drive Test Module Board ULN2003 5 Line 4 Phase&lt;/a&gt;? And others, as this 1/64 (for ex.) ratio notation is quite frequent.&lt;br&gt;&#xA;&lt;em&gt;Reasoning&lt;/em&gt;: My knowledge from university correlates with Wiki article on gearbox ratio. If I'm not mistaken, ratio is usually denoted this way:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[Input Gear] : [Output Gear]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So, if specs are true, 1 revolution of the motor shaft is 64 revolutions of the gearbox output shaft. Who would ever want such stepper?&lt;br&gt;&#xA;But, my search on the Arduino forums, &lt;a href=&quot;https://forum.arduino.cc/index.php?topic=71964.msg1149466#msg1149466&quot; rel=&quot;nofollow noreferrer&quot;&gt;Geared Stepper Motor&lt;/a&gt;, revealed that somehow it's just the opposite.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Is it possible to get such resolution for a stepper motor? Or even higher?&lt;br&gt;&#xA;&lt;em&gt;Reasoning&lt;/em&gt;: After all, if gearbox ratio is 64:1, and motor shaft step is, say 5°, you have &lt;code&gt;360°/5°*64=4608&lt;/code&gt; steps, or &lt;code&gt;360°/4608=0.078°&lt;/code&gt; per step overall device, haven't you? &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="22955" LastEditorUserId="9176" LastEditDate="2019-05-18T09:15:55.460" LastActivityDate="2019-05-19T21:18:07.213" Title="Stepper drive resolution" Tags="&lt;stepper-motor&gt;&lt;gearing&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18810" PostTypeId="1" AcceptedAnswerId="18811" CreationDate="2019-05-18T18:42:45.087" Score="3" ViewCount="335" Body="&lt;p&gt;Is it safe to create and operate a ROS workspace from an external hard drive? Are there any &lt;strong&gt;limitations&lt;/strong&gt; or &lt;strong&gt;issues&lt;/strong&gt; I should be aware of? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Tutorials and manuals typically suggest that the workspace should be created in the home directory, but I would like to have my ROS workspace external so it can be mobile.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm using &lt;strong&gt;ROS Melodic&lt;/strong&gt; on &lt;strong&gt;Ubuntu 18.04.2 LTS&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a large HDD (formatted to ExFat) that I have intentions to use as a general mass storage drive for whatever use I intend. This drive potentially can connect to macOS, Windows 10, and Linux (I've installed compatibility software for ExFat). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could you explain in detail if/why ExFat would not work? Are there solutions to any potential permissions problems?&lt;/p&gt;&#xA;" OwnerUserId="23033" LastEditorUserId="9176" LastEditDate="2019-05-18T21:40:45.863" LastActivityDate="2019-05-19T19:06:23.420" Title="Can ROS workspace safely exist in an external HDD?" Tags="&lt;ros&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18811" PostTypeId="2" ParentId="18810" CreationDate="2019-05-18T20:39:59.347" Score="2" Body="&lt;p&gt;The use of the home directory is merely a &lt;em&gt;recommendation&lt;/em&gt;, and is not a strict requirement, only for convenience (and convention). You can set it up anywhere that you have read and write access.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See also &lt;a href=&quot;https://answers.ros.org/question/258287/workspace-on-usb-or-package-on-usb/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Workspace on USB or Package on USB&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This should be perfectly possible, provided that your medium is&#xA;  formatted with a compatible file system, as permissions (on fi dynamic&#xA;  reconfigure and other executable files) are important in a Catkin&#xA;  workspace.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;File systems like FAT, FAT32 and ExFat are not suitable for this.&#xA;  Something like Ext3 or Ext4 or some other FS that supports regular&#xA;  Linux file permissions should work fine.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If you use a &quot;Windows&quot; formatted drive, then your &quot;Ubuntu&quot; permissions may probably be lost, as drives formatted for Windows can not support that information. Execute and ownership permissions issues would/could arise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It would all depend on whether you need portability in order to be able to access the workspace from a Windows machine, or if you consistently use [different] Ubuntu/Linux machines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you &lt;em&gt;really want&lt;/em&gt; use an ExFAT formatted drive, then I'm not entirely &lt;em&gt;au fait&lt;/em&gt; with the situation, as I do not use Windows at all. You probably could/would run into issues. A solution &lt;em&gt;might&lt;/em&gt; be to delete the &lt;code&gt;devel&lt;/code&gt; and &lt;code&gt;build&lt;/code&gt; directories and re-run &lt;code&gt;catkin_make&lt;/code&gt; before accessing it on the new machine&lt;sup&gt;1&lt;/sup&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The use of an external drive is a good idea, portability wise. You &lt;em&gt;may&lt;/em&gt; need to reconfigure paths when you move to another host machine though.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another option is to have a separate user for ROS, whose &lt;em&gt;entire home directory&lt;/em&gt; is on the external disk. You would log in as that user to have your environment ready to go. This is the method that I use. However, this requires admin access to set up your login to point to the externally mounted disk containing the home directory, prior to your logging in as the ROS user. You may not have that ability, or access.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; See &lt;a href=&quot;https://answers.ros.org/question/193901/how-to-migrate-a-catkin-workspace/?answer=193910#post-id-193910&quot; rel=&quot;nofollow noreferrer&quot;&gt;How to migrate a catkin workspace?&lt;/a&gt; and &lt;a href=&quot;https://answers.ros.org/question/229038/cannot-source-workspace/&quot; rel=&quot;nofollow noreferrer&quot;&gt;cannot source workspace&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="9176" LastEditorUserId="9176" LastEditDate="2019-05-19T19:06:23.420" LastActivityDate="2019-05-19T19:06:23.420" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18813" PostTypeId="1" CreationDate="2019-05-19T09:40:15.067" Score="1" ViewCount="54" Body="&lt;p&gt;I'm trying to get grbl to move the carriage of my 2D scanner to a specific position, pause there for a certain amount of time (until the sensor does its thing), and then proceed to the next position which I want to scan.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The scanner is a simple DIY using an arduino uno and the CNC shield. Motion is cartesian, with 2 motors (&amp;amp; drivers) running the y-axis, and one the x-axis. Nothing fancy to see here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Scenarios I tried so far:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Using &lt;code&gt;G1&lt;/code&gt;: I can never get it to pause at the position I want to scan&lt;/li&gt;&#xA;&lt;li&gt;Using &lt;code&gt;G0&lt;/code&gt;: I do get it to pause there, but it drops motor current, losing a step and making precise scanning impossible.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Any ideas how I could fix either scenario, or a new approach all together?&lt;/p&gt;&#xA;" OwnerUserId="23036" LastEditorUserId="23036" LastEditDate="2019-05-20T17:42:59.877" LastActivityDate="2019-05-20T17:42:59.877" Title="Pausing at positing in GRBL while holding motor current" Tags="&lt;python&gt;&lt;cnc&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18817" PostTypeId="1" CreationDate="2019-05-19T17:33:15.447" Score="0" ViewCount="44" Body="&lt;p&gt;Equation of motion for 2D planar quadrotor are as follows&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\ddot{x} = \frac{1}{m} (u1+u2)sin(\theta)$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\ddot{y} = \frac{1}{m} (u1+u2)cos(\theta) - mg$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\ddot{\theta} = \frac{r}{I} (u1+u2)$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How to linearize this equation to get it in state space form x = Ax + Bu. Could someone please help me out?&lt;/p&gt;&#xA;" OwnerUserId="19512" LastActivityDate="2019-05-19T17:33:15.447" Title="Doubt linearizing 2D planar quadrotor equation of motion" Tags="&lt;quadcopter&gt;&lt;dynamics&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18818" PostTypeId="2" ParentId="18808" CreationDate="2019-05-19T21:18:07.213" Score="1" Body="&lt;p&gt;G'day,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For question 1, your knowledge of the standard convention for notation is correct. However, it's worth noting that the listing for the gearbox ratio isn't 1:64, it's 1/64, which is a slightly different notation. My understanding of this notation is the form:&#xA; &lt;span class=&quot;math-container&quot;&gt;$\begin{equation}&#xA;\frac{\text{Output}}{\text{Input}} \end{equation}$&lt;/span&gt;. So, in order to make a full revolution at the output (1), there are 64 turns of the input.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To your second question, yes, it's definitely possible to get these resolutions, in theory. The problem is in the transmission from theory to practice. Interestingly, the people in the arduino forum post you linked are actually discussing this. It appears the motor is most commonly used for air conditioner vent actuation, and has a great deal of slop, as well as not &lt;em&gt;Actually&lt;/em&gt; having 4096 steps per revolution. If you are intending on using this motor and gear train combination for an application that requires precise movements of the output shaft to within a degree, this may not be a good solution, especially if you're going to be applying any sort of load to it.  &lt;/p&gt;&#xA;" OwnerUserId="21651" LastActivityDate="2019-05-19T21:18:07.213" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18819" PostTypeId="1" CreationDate="2019-05-20T02:09:36.063" Score="1" ViewCount="37" Body="&lt;p&gt;I'm looking for what a robot that moves like a plotter but can grab a load up to 1kg with a claw, lift, rotate and place in another location within its range.  What is this type of robot called?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/pHqQE.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/pHqQE.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="23039" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2019-05-20T07:11:38.473" Title="Lifting robot that moves like a plotter" Tags="&lt;mobile-robot&gt;&lt;robotic-arm&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18820" PostTypeId="1" CreationDate="2019-05-20T04:21:05.600" Score="0" ViewCount="114" Body="&lt;p&gt;I am working on a &lt;a href=&quot;https://store.husarion.com/products/rosbot?variant=8835872292918&quot; rel=&quot;nofollow noreferrer&quot;&gt;ROSBOT&lt;/a&gt; for a natural navigation project.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While working with RpLIDAR A2 version, I found that it does not sense thin black surfaces like black pants/trousers while at close range (less than 30 cms). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The screenshots of the RVIZ visualization of the robot is attached below&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the person at more than 80 cm from the LIDAR&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/vja6w.png&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;More than 80 cm from the LIDAR&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vja6w.png&quot; alt=&quot;More than 80 cm from the LIDAR&quot; title=&quot;More than 80 cm from the LIDAR&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the person at more than 50 cm from the LIDAR&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/DYPWi.png&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;More than 50 cm from the LIDAR&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/DYPWi.png&quot; alt=&quot;More than 50 cm from the LIDAR&quot; title=&quot;More than 50 cm from the LIDAR&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the person reaches 30 cm from the LIDAR&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/iLOyR.png&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;30 cm from the LIDAR&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/iLOyR.png&quot; alt=&quot;30 cm from the LIDAR&quot; title=&quot;30 cm from the LIDAR&quot;&gt;&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried debugging the code, but no errors in the code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What are the methods we can use to improve sensing of the robot, can we do any hardware or software tuning to the RpLIDAR sensor to improve its sensing?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What are the likely errors causing this behaviour? &lt;/p&gt;&#xA;" OwnerUserId="17067" LastEditorUserId="9176" LastEditDate="2019-05-20T07:25:28.927" LastActivityDate="2019-05-20T07:25:28.927" Title="RpLIDAR unable to see black objects" Tags="&lt;mobile-robot&gt;&lt;ros&gt;&lt;navigation&gt;&lt;lidar&gt;&lt;hardware&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18821" PostTypeId="2" ParentId="18819" CreationDate="2019-05-20T04:25:06.367" Score="0" Body="&lt;p&gt;The picture is of a Gantry robot, but for your workcase you can use manipulator like &lt;a href=&quot;https://www.robots.com/robots/abb-irb-340sa&quot; rel=&quot;nofollow noreferrer&quot;&gt;ABB pick and place&lt;/a&gt; robot for more dexterity. &lt;/p&gt;&#xA;" OwnerUserId="17067" LastActivityDate="2019-05-20T04:25:06.367" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18822" PostTypeId="2" ParentId="18819" CreationDate="2019-05-20T07:11:38.473" Score="2" Body="&lt;p&gt;Cartesian robots have the characteristic that their axes move in Cartesian (x-y-z) directions. &lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2019-05-20T07:11:38.473" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18823" PostTypeId="1" AcceptedAnswerId="19304" CreationDate="2019-05-20T16:26:41.613" Score="3" ViewCount="100" Body="&lt;p&gt;I have configured ROS melodic based on the RACECARJ and MIT-Racecar Github repos. Everything runs perfectly on my desktop Linux 18.04 machine. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The script should be able to install the same also on my Nvdia Jetson Xavier with Jetpack 4.2. Everything runs without and error. My nodes (basically the motor controller and the PS3 controller) get detected. However, the car is not moving at all. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have just started to work with ROS and have no clue how I have to debug this. Should I use Wireshark to compare which packages are received on the 11311 port on my desktop machine as well as on the Xavier? I'd like to see which messages the ROS is sending. I doubt it sends any at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have read about using qtr to debug some stuff graphically. Sadly this didn't work so far. Despite installing ros-melodic-desktop-full &lt;a href=&quot;https://github.com/jetsonhacks/installROSXavier&quot; rel=&quot;nofollow noreferrer&quot;&gt;with this script.&lt;/a&gt; qtr is unrecognized. I was already able to verify that each devices works on its own. I can send commands to the motorcontoller with python and I am able to read the joystick with &lt;code&gt;jstest /dev/input/js0&lt;/code&gt;. Unplugging one of them when the ros-script is running gets immediately detected.&lt;/p&gt;&#xA;" OwnerUserId="23043" LastEditorUserId="23043" LastEditDate="2019-05-21T05:30:51.660" LastActivityDate="2019-08-19T23:52:51.857" Title="Debuging ROS on a Jetson Xavier" Tags="&lt;ros&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18824" PostTypeId="1" CreationDate="2019-05-20T19:54:13.590" Score="0" ViewCount="17" Body="&lt;p&gt;If you only need a drone to fly up/down, how could you simplify the flight system? What parts/propellers could you remove for instance? Could you enable a drone to fly vertically with only one propeller?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there any examples of drones that only fly vertically?&lt;/p&gt;&#xA;" OwnerUserId="14959" LastActivityDate="2019-05-20T21:09:03.373" Title="What parts of the flight system could you remove if you only care about flying up/down?" Tags="&lt;flight-controller&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18825" PostTypeId="2" ParentId="18824" CreationDate="2019-05-20T21:09:03.373" Score="1" Body="&lt;p&gt;Being honest, If I wanted to achieve this, I would get myself an open source quad-copter, and adjust the control system to apply some &quot;Input Constraints&quot;. Basically allowing the built in stabilization system to keep the drone stable and level, while only allowing me to modify the desired altitude. Depending on how advanced the system is, it should also be able to maintain its position in the world frame and eliminate  any drift that occurs. You will &lt;em&gt;not&lt;/em&gt; be able to create a drone that only flies up and down by removing parts from a standard quad-copter, as these sources of thrust are relied upon to keep the quad-copter stable, which is a deceptively complicated task. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To your question of  &quot;Could you enable a drone to fly vertically with only one propeller?&quot;, to which the answer is yes, but good luck with sorting out the rotational forces from the propeller without some other source of thrust to cancel it out. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for drones that only fly vertically, sure, there are a few. The most obvious is a &lt;a href=&quot;https://en.wikipedia.org/wiki/Hot_air_balloon&quot; rel=&quot;nofollow noreferrer&quot;&gt;Hot Air balloon&lt;/a&gt;, if you decide to build your own and automate it. A cheap &lt;a href=&quot;https://en.wikipedia.org/wiki/Radio-controlled_helicopter&quot; rel=&quot;nofollow noreferrer&quot;&gt;R/C Helicopter&lt;/a&gt; may also do the trick (From memory, some of the old cheap ones can only fly up/down, and rotate on the spot), but they can also be quite unstable, and certainly won't maintain their horizontal position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are willing to stretch your definitions a bit, a &lt;a href=&quot;https://en.wikipedia.org/wiki/Rocket&quot; rel=&quot;nofollow noreferrer&quot;&gt;Rocket&lt;/a&gt; &lt;em&gt;kind of&lt;/em&gt; counts, but you probably shouldn't make one of those. &lt;/p&gt;&#xA;" OwnerUserId="21651" LastActivityDate="2019-05-20T21:09:03.373" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18826" PostTypeId="2" ParentId="18783" CreationDate="2019-05-20T23:34:11.710" Score="0" Body="&lt;p&gt;In my understanding, you are already tuning your PID to have a steady state offset, through your usage of DT, assuming your usage is similar to the first diagram here: &lt;a href=&quot;http://www.ni.com/en-au/innovations/white-papers/06/pid-theory-explained.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;PID Theory&lt;/a&gt;. Note that the feedback is subtracted from the &quot;set point&quot;, which is very similar to what you're doing currently, by creating an offset in the sensors readings to create a kind of offset in the &quot;set point&quot;. In theory, this should be sufficient for your current application. Perhaps more tuning of the PID parameters may help improve the plants response from &quot;okay&quot; to &quot;Better than okay&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for other methods for approaching the problem, I am personally a very big fan of &lt;a href=&quot;http://ctms.engin.umich.edu/CTMS/index.php?example=Introduction&amp;amp;section=ControlStateSpace&quot; rel=&quot;nofollow noreferrer&quot;&gt;State Space control&lt;/a&gt;. Assuming you can find a way to accurately model the system, it is a relatively simple endeavor to find the optimal control gains for your desired state. Although, this can be a bit challenging to properly grasp depending on your background, and creating a model of your plant may be difficult. &lt;/p&gt;&#xA;" OwnerUserId="21651" LastActivityDate="2019-05-20T23:34:11.710" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18827" PostTypeId="1" CreationDate="2019-05-21T09:30:05.030" Score="1" ViewCount="83" Body="&lt;p&gt;While going through &lt;a href=&quot;https://www.transbotics.com/learning-center/guidance-navigation&quot; rel=&quot;nofollow noreferrer&quot;&gt;this Page&lt;/a&gt; on different types of navigations used in AGV's for Industrial Environments. I came across natural navigation which claims to reduce installation time and cost for the AGV by getting rid of reflectors, localization markers. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what is Natural Navigation? How does it work? How does it handle Localization and Path Planning? what kind of sensors does it need?&#xA;Are there any open source implementations of this method.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any links to research papers/tutorials are welcome&lt;/p&gt;&#xA;" OwnerUserId="17067" LastActivityDate="2019-05-21T10:00:45.410" Title="What is Natural Navigation?" Tags="&lt;control&gt;&lt;navigation&gt;&lt;path-planning&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18828" PostTypeId="2" ParentId="18827" CreationDate="2019-05-21T10:00:45.410" Score="2" Body="&lt;p&gt;What they describe is normally called (markerless) SLAM. Mostly implemented with laser scanners (from Sick, Velodyne, Pepperl&amp;amp;Fuchs,...). Classic implementations are gmapping, cartographer or hector-slam. &lt;/p&gt;&#xA;" OwnerUserId="23196" LastActivityDate="2019-05-21T10:00:45.410" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18829" PostTypeId="1" CreationDate="2019-05-21T14:55:18.000" Score="0" ViewCount="93" Body="&lt;p&gt;I am using a 5 axis Robot arm (Robolink robot from Igus) to perform some 3D printing routines. &#xA;By now I am trying to use them and have him have some good position (and speed) control.&#xA;The robot is atuated by stepper motors (encoders included), but, generally, it lacks stiffnnes. When I tech him some consecutive reference positions its movement is not very soft.&#xA;I believe I can improve its behaviour by tunning speed references (maximum speed, minimum speed, reference speed) of each joint.&#xA;Can anybody give me some hint on how to set good speed references?&lt;/p&gt;&#xA;" OwnerUserId="21302" LastActivityDate="2021-03-11T16:03:30.283" Title="Robot arm with steppers - speed" Tags="&lt;robotic-arm&gt;&lt;joint&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18830" PostTypeId="1" CreationDate="2019-05-21T18:02:02.017" Score="0" ViewCount="72" Body="&lt;p&gt;I am new to the sensor data fusion world. I want to find room vacancy using ultrasonic, PIR, and sound sensors.&lt;/p&gt;&#xA;&lt;p&gt;These sensors deliver binary information about the occupancy. How can I combine the decision making from these three sensors? How can I calculate a good delay time for each sensor?&lt;/p&gt;&#xA;" OwnerUserId="23048" LastEditorUserId="19515" LastEditDate="2020-07-27T18:28:02.217" LastActivityDate="2020-07-27T18:28:02.217" Title="How to handle multi-sensors data?" Tags="&lt;sensors&gt;&lt;sensor-fusion&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ClosedDate="2019-05-24T14:15:05.397" ContentLicense="CC BY-SA 4.0" />
  <row Id="18832" PostTypeId="2" ParentId="18767" CreationDate="2019-05-22T05:52:10.063" Score="1" Body="&lt;p&gt;If you are trying to register two point clouds without a proper initial guess on the alignment (6dof) than it is a global registration problem. The simplest way is combining 3D feature matchings with ICP. Find the initial guess by 3D feature matching and refine it by point-to-point or point-to-plane ICP. Open3D has some example code on that.&lt;/p&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2019-05-22T05:52:10.063" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18833" PostTypeId="2" ParentId="18830" CreationDate="2019-05-22T05:55:43.993" Score="0" Body="&lt;p&gt;That is not an easy task to do. There are SLAM methods that can optimize the time delay as well. Theory can be applied in your case but you should make your own implementation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://ieeexplore.ieee.org/document/6942599/&quot; rel=&quot;nofollow noreferrer&quot;&gt;This&lt;/a&gt; paper describes the basic theory that you need.&lt;/p&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2019-05-22T05:55:43.993" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18834" PostTypeId="1" CreationDate="2019-05-22T10:48:11.393" Score="1" ViewCount="50" Body="&lt;p&gt;So Udacity, Kuka and KIT are/were offering a Kuka challenge.  Basically, the participants got to write code and run it remotely on a Kuka robot based in the KIT labs in Germany and submit their code as part of the challenge.  However, this is only available to U.S. residents.  Here is the &lt;a href=&quot;https://www.udacity.com/kuka-robotics-challenge&quot; rel=&quot;nofollow noreferrer&quot;&gt;link&lt;/a&gt; to those that might be interested:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is that, are there other programs or initiatives like this where a person can write and run code on a robot?  I know it can be done with simulators but I want to know if these initiatives exist outside of Udacity&lt;/p&gt;&#xA;" OwnerUserId="22972" LastActivityDate="2019-05-22T10:48:11.393" Title="Any way to program a robot remotely?" Tags="&lt;robotic-arm&gt;&lt;c++&gt;&lt;kuka&gt;&lt;kit&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18836" PostTypeId="2" ParentId="18830" CreationDate="2019-05-22T17:46:30.857" Score="1" Body="&lt;p&gt;I think doing things probabilistically is a good approach.  You have to realize that your sensors aren't perfect.  You have to contend with things like noise, false positives, false negatives, limited field of view, etc.  Changing your view of the data from binary to probabilistic will make it easier to combine.  And you should be able to find a good book on &lt;a href=&quot;http://www.probabilistic-robotics.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;probabilistic robotics&lt;/a&gt;.  &lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2019-05-22T17:46:30.857" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18837" PostTypeId="1" AcceptedAnswerId="18839" CreationDate="2019-05-22T18:49:07.770" Score="-2" ViewCount="237" Body="&lt;p&gt;I'm studying robotics and one practice that I have to do is to implement my own SLAM system on ROS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need some advice about where to start.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where do I start?&lt;/p&gt;&#xA;" OwnerUserId="18173" LastActivityDate="2019-06-21T14:21:16.840" Title="I have to implement my own SLAM algorithm" Tags="&lt;slam&gt;&lt;navigation&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ClosedDate="2019-05-24T14:17:54.663" ContentLicense="CC BY-SA 4.0" />
  <row Id="18838" PostTypeId="2" ParentId="18837" CreationDate="2019-05-22T19:51:45.613" Score="0" Body="&lt;p&gt;Where to start will very depending on your current skill-set, as well as the specifics of the course you're studying. My recommendation is start with the &lt;a href=&quot;https://home.wlu.edu/~levys/kalman_tutorial/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Extended&lt;/a&gt; &lt;a href=&quot;https://github.com/rlabbe/Kalman-and-Bayesian-Filters-in-Python&quot; rel=&quot;nofollow noreferrer&quot;&gt;Kalmann&lt;/a&gt; &lt;a href=&quot;https://towardsdatascience.com/extended-kalman-filter-43e52b16757d&quot; rel=&quot;nofollow noreferrer&quot;&gt;Filter&lt;/a&gt; as well as &lt;a href=&quot;http://people.csail.mit.edu/mrub/talks/filtering.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Bayesian Filtering&lt;/a&gt;. These will form a foundation for your SLAM (Depending on how to want to approach it). From there, I guess all you can do is have a look at what resources there are online for implementing it. I would recommend either &lt;a href=&quot;https://dspace.mit.edu/bitstream/handle/1721.1/36832/16-412JSpring2004/NR/rdonlyres/Aeronautics-and-Astronautics/16-412JSpring2004/A3C5517F-C092-4554-AA43-232DC74609B3/0/1Aslam_blas_report.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here&lt;/a&gt; or, if you can, &lt;a href=&quot;http://www.probabilistic-robotics.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here&lt;/a&gt;. I can personally vouch for the Probabilistic robotics textbook being a fantastic resource.&lt;/p&gt;&#xA;" OwnerUserId="21651" LastEditorUserId="37" LastEditDate="2019-06-21T14:21:16.840" LastActivityDate="2019-06-21T14:21:16.840" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18839" PostTypeId="2" ParentId="18837" CreationDate="2019-05-23T01:14:50.033" Score="2" Body="&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Take some of the robotics courses of burgard wolfram. You can easily find his video lectures on his homepage. You don't need to watch all of the videos. Just watch and try to understand optimization and graph-based slam part.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I recommend you to implement graph-based slam in matlab first. Don't go for Extended Kalman Filter slam. They are outdated. The robotics courses of the above have some toy graph slam examples. Run that first, analyze the code, and make your own.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Once you are confident with the theory start to implement it in ROS. Don't try to implement something you are not 100% sure in c++ because the debugging is hell with c. Or the best way is to start with open source slams such as LOAM. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2019-05-23T01:14:50.033" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18840" PostTypeId="1" CreationDate="2019-05-23T12:16:59.787" Score="0" ViewCount="62" Body="&lt;p&gt;Consider a situation where you have a 'm' number of robots and 'n' number of tasks. Each task is at a different location. What optimization algorithm should I use in order to assign a set of tasks to the robot. The constraints I am taking are battery percentage and distance.&#xA;How should I assign the tasks to the robots taking into account the constraints.&lt;/p&gt;&#xA;" OwnerUserId="23059" LastEditorUserId="110" LastEditDate="2019-08-12T17:04:48.737" LastActivityDate="2019-08-12T17:04:48.737" Title="Multiple robots performing a set of tasks (Optimization)" Tags="&lt;mobile-robot&gt;&lt;wheeled-robot&gt;&lt;algorithm&gt;&lt;artificial-intelligence&gt;&lt;optimization&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18842" PostTypeId="1" CreationDate="2019-05-24T06:12:09.907" Score="0" ViewCount="14" Body="&lt;p&gt;when i use mrpt tool to calibrate kinect v1, there is an error:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;skydddive@ding-turtlebot:/usr/bin$ ./kinect-stereo-calib&#xA;&#xA;Could no claim interface on camera: -6&#xA;Calling CKinect::initialize()...Exception in Kinect thread:&#xA;&#xA;=================MRPT EXCEPTION ====================&#xA;void mrpt::hwdrivers::CKinect::open(),line 399:&#xA;Error opening Kinect sensor with index :0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;please give me some advice to solve this problem,thank you~~&lt;/p&gt;&#xA;" OwnerUserId="23067" LastActivityDate="2019-05-24T06:12:09.907" Title="There is an error when i use kinect v1 with Mrpt tool" Tags="&lt;mobile-robot&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18843" PostTypeId="2" ParentId="16596" CreationDate="2019-05-24T12:59:01.603" Score="3" Body="&lt;p&gt;The definition of &quot;rollouts&quot; given by &lt;a href=&quot;http://gwern.net/docs/rl/2018-segler.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Planning chemical syntheses with deep&#xA;neural networks and symbolic AI&lt;/a&gt; (Segler, Preuss &amp;amp; Waller ; doi: 10.1038/nature25978 ; credit to jsotola):&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Rollouts are Monte Carlo simulations, in which random search steps&#xA;  are performed without branching until a solution has been found or&#xA;  a maximum depth is reached. These random steps can be sampled&#xA;  from machine-learned policies p(a|s), which predict the probability&#xA;  of taking the move (applying the transformation) a in position s, and&#xA;  are trained to predict the winning move by using human games or&#xA;  self-play&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="23071" LastEditorUserId="37" LastEditDate="2019-05-24T14:25:20.287" LastActivityDate="2019-05-24T14:25:20.287" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18846" PostTypeId="2" ParentId="18687" CreationDate="2019-05-25T22:08:40.757" Score="1" Body="&lt;p&gt;Autonomous drones all have a built-in GPS module, but if you need a variety of sensors, then buying a consumer grade prebuilt drone such as DJI drones aren't an option, you'll need to consider building yourself a drone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The fundamental components that make-up a drone are the following:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Flight Controller (FC)&lt;/strong&gt; - This is the brain of the drone, it controls the major aspects that allows the drone to fly and function properly&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Power Distribution Board (PDB)&lt;/strong&gt; - This component distributes and supplies electricity to all the components&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Electronic Speed Controller (ESC)&lt;/strong&gt; - This component plugs a motor into the flight controller (one ESC can only be utilised on one motor) the ESC converts the digital signals from the FC to analogue signals that specify how fast the motors should spin&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Motors&lt;/strong&gt; - Brushless DC motors are used to spin propellors to make the drone fly&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Propellors&lt;/strong&gt; - Attaches to the motors and provides lift as it is spun&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Transmitter (TX) / Receiver (RX)&lt;/strong&gt; - The TX is the handheld remote that communicates with the RX which is connected to the FC. You use this to communicate with the drone e.g. tell it where to go.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Frame&lt;/strong&gt; - This is where all the components are attached to.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Battery&lt;/strong&gt; - Most drones use Lithium Polymer (LiPo) batteries to provide power&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;As I'm sure about the specifics of what you require, here are broad things to look out for:&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Only some FCs are compatible with GPS modules. There are many FCs and GPS modules out there but their compatibilities with each other varies. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Make sure you decide what types of sensors you'll be using so you can estimate the payload, based on the payload you'll need to decide what config you need e.g. quadcopter/hexacopter/octocopter so you know what type of frame you need.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Again, based on your payload you need to choose motors and propellers. Normally motors with lower KV ratings provide more torque than higher KV motors, but higher KV motors spin faster. When choosing motors, websites such as AliExpress includes a data sheet stating the thrust of the motors with different propeller and battery configurations.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;LiPo batteries are rated by 1s, 2s, 3s, 4s, etc... each 's' provides different voltages, based on the datasheet, find the config of battery and propellers for your required thrust&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Once you've chosen the motors and propellers and battery, you'll need to find out the maximum load current that the motors will draw, this is on the datasheet. And when choosing the ESCs, make sure you buy ESCs that are rated for a load current a little higher than than the load current of the motors.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Based on your set-up and requirements, you might need some sort of automation. You could make your drone autonomous by using a specific TX/RX setup with ground control so that you could create flight plans for the autonomous flights on your computer, remember only specific TX/RX and FC modules are compatible with this.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;To connect your sensors and log data, a Raspberry Pi computer could be used as they are low cost and low form factor, this can be connected to a 5V output of the PDB with the rest of your sensors.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I hope this somewhat helped, try narrowing your question so that you can get more specific answers.&lt;/p&gt;&#xA;" OwnerUserId="11688" LastActivityDate="2019-05-25T22:08:40.757" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18849" PostTypeId="1" AcceptedAnswerId="18881" CreationDate="2019-05-26T09:53:48.720" Score="0" ViewCount="69" Body="&lt;p&gt;Im using robotic toolbox to simulate my robot, but i always confused when i see the value of rpy. It always different if i compare with tr2rpy and tr2eul. What kind of rotation used in SerialLink.teach?&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;a = 40/1000;&#xA;b = 81/1000;&#xA;c = 130/1000;&#xA;d = 18/1000;&#xA;e = 166/1000;&#xA;f = 31/1000;&#xA;g = 95/1000;&#xA;%MDH&#xA;p = SerialLink([...&#xA;Revolute('d',b,'a',0,'alpha',0,'modified');...&#xA;Revolute('d',0,'a',a,'alpha',deg2rad(90),'offset',pi/2,'modified');...&#xA;Revolute('d',0,'a',c,'alpha',0,'modified');...&#xA;Revolute('d',e+f,'a',d,'alpha',deg2rad(90),'modified');...&#xA;Revolute('d',0,'a',0,'alpha',deg2rad(-90),'modified');...&#xA;Revolute('d',g,'a',0,'alpha',deg2rad(90),'modified');],...&#xA;'name','6 DOF')&#xA;p.teach([0 deg2rad(90) 0 deg2rad(20) deg2rad(10.8) 0]);&#xA;tr2rpy(FK,'deg')&#xA;tr2eul(FK,'deg')&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;In Simulation = -159.669 -10.142 3.733 &lt;/li&gt;&#xA;&lt;li&gt;tr2eul = -160 10.8 0&lt;/li&gt;&#xA;&lt;li&gt;tr2rpy =    0 10.8 -160&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Or what am i missed?&lt;/p&gt;&#xA;" OwnerUserId="22800" LastEditorUserId="22800" LastEditDate="2019-06-12T13:07:17.893" LastActivityDate="2019-06-12T13:07:17.893" Title="Rotation at SerialLink.teach Robotic Toolbox" Tags="&lt;robotic-arm&gt;&lt;matlab&gt;&lt;rotation&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18850" PostTypeId="1" AcceptedAnswerId="18959" CreationDate="2019-05-26T12:36:30.650" Score="0" ViewCount="9" Body="&lt;p&gt;I'm searching a navigation method to find my location while dead reckogning (gps signals jammed) with an imu and gsm based navigation results.&#xA;In short i have 3 sources:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Gsm Based Navigation ( gives lat lon data at @5hz, around 100m accuracy)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Imu(gyro+accelerometer)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;GPS Receiver&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;There are filters like kalman, complimentary etc. but many use this methods when they have 2 source (gps/imu)in my case i have 3. What is simplest way to integrate gsm based pos and imu data in dr and should i use a filter or not.&#xA;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="23082" LastEditorUserId="23082" LastEditDate="2019-05-26T13:00:52.057" LastActivityDate="2019-06-20T11:30:36.667" Title="Integreation Method In Dr with 3 Sources" Tags="&lt;kalman-filter&gt;&lt;imu&gt;&lt;navigation&gt;&lt;gps&gt;&lt;dead-reckoning&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18851" PostTypeId="1" CreationDate="2019-05-26T14:44:47.383" Score="2" ViewCount="39" Body="&lt;p&gt;I've been experimenting with opencv to estimate the homography matrix between 2 images captured with my computer's webcam. I have noticed that when the 2 views are not very far apart (that's when I don't move my computer far away), when I warp the second image with my homography matrix, the warped image and the first image nearly overlap. But when the 2 views are very wide apart, warping the second image with the homography matrix that I estimated gives a view that is very different from that of the first image.&lt;br/&gt;&#xA;So my question is, why is that? are there conditions on the motion model of the camera between the 2 views that have to be met so that the homography estimation can be performed correctly?&lt;br/&gt;&#xA;And in very simple terms, what is a homography anyway? (In my understanding, an image is a 3D world projection on a certain 2D plane (the camera plane), a homography matrix allows us to project the 3D world on another plane by way of our first projection on the camera plane)&lt;/p&gt;&#xA;" OwnerUserId="6976" LastActivityDate="2019-05-26T14:44:47.383" Title="Is it possible to calculate a homography matrix for any 2 views?" Tags="&lt;computer-vision&gt;&lt;cameras&gt;&lt;calibration&gt;&lt;3d-reconstruction&gt;" AnswerCount="0" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="18852" PostTypeId="2" ParentId="18597" CreationDate="2019-05-26T19:35:35.003" Score="1" Body="&lt;p&gt;Reason why robot is laying down is because in urdf file gravity is not turned off. When I add this part of the code to my urdf then robot is loaded in some position and is not falling down.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  &amp;lt;!-- Gazebo-specific link properties  --&amp;gt;&#xA;  &amp;lt;gazebo reference=&quot;&lt;span class=&quot;math-container&quot;&gt;${prefix}base_link&quot;&amp;gt;&#xA;    &amp;lt;material&amp;gt;Gazebo/Yellow&amp;lt;/material&amp;gt;&#xA;    &amp;lt;turnGravityOff&amp;gt;true&amp;lt;/turnGravityOff&amp;gt;&#xA;  &amp;lt;/gazebo&amp;gt;&#xA;  &amp;lt;gazebo reference=&quot;$&lt;/span&gt;{prefix}link_1&quot;&amp;gt;&#xA;    &amp;lt;material&amp;gt;Gazebo/Orange&amp;lt;/material&amp;gt;&#xA;    &amp;lt;turnGravityOff&amp;gt;true&amp;lt;/turnGravityOff&amp;gt;&#xA;  &amp;lt;/gazebo&amp;gt;&#xA;  &amp;lt;gazebo reference=&quot;&lt;span class=&quot;math-container&quot;&gt;${prefix}link_2&quot;&amp;gt;&#xA;    &amp;lt;material&amp;gt;Gazebo/Orange&amp;lt;/material&amp;gt;&#xA;    &amp;lt;turnGravityOff&amp;gt;true&amp;lt;/turnGravityOff&amp;gt;&#xA;  &amp;lt;/gazebo&amp;gt;  &#xA;  &amp;lt;gazebo reference=&quot;$&lt;/span&gt;{prefix}link_3&quot;&amp;gt;&#xA;    &amp;lt;material&amp;gt;Gazebo/Orange&amp;lt;/material&amp;gt;&#xA;    &amp;lt;turnGravityOff&amp;gt;true&amp;lt;/turnGravityOff&amp;gt;&#xA;  &amp;lt;/gazebo&amp;gt;&#xA;  &amp;lt;gazebo reference=&quot;&lt;span class=&quot;math-container&quot;&gt;${prefix}link_4&quot;&amp;gt;&#xA;    &amp;lt;material&amp;gt;Gazebo/Orange&amp;lt;/material&amp;gt;&#xA;    &amp;lt;turnGravityOff&amp;gt;true&amp;lt;/turnGravityOff&amp;gt;&#xA;  &amp;lt;/gazebo&amp;gt;&#xA;  &amp;lt;gazebo reference=&quot;$&lt;/span&gt;{prefix}link_5&quot;&amp;gt;&#xA;    &amp;lt;material&amp;gt;Gazebo/Orange&amp;lt;/material&amp;gt;&#xA;    &amp;lt;turnGravityOff&amp;gt;true&amp;lt;/turnGravityOff&amp;gt;&#xA;  &amp;lt;/gazebo&amp;gt;&#xA;  &amp;lt;gazebo reference=&quot;${prefix}link_6&quot;&amp;gt;&#xA;    &amp;lt;material&amp;gt;Gazebo/Black&amp;lt;/material&amp;gt;&#xA;    &amp;lt;turnGravityOff&amp;gt;true&amp;lt;/turnGravityOff&amp;gt;&#xA;  &amp;lt;/gazebo&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I am not sure that I want turned off gravity in simulation.&lt;/p&gt;&#xA;" OwnerUserId="22747" LastActivityDate="2019-05-26T19:35:35.003" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18854" PostTypeId="2" ParentId="15603" CreationDate="2019-05-27T16:17:39.643" Score="0" Body="&lt;p&gt;If you are looking for a cheap solid state Lidar for a Rover perhaps the Terabee TeraRanger Evo in the 8 x 60m configuration could work for you: &lt;a href=&quot;https://www.terabee.com/shop/lidar-tof-multi-directional-arrays/teraranger-tower-evo/&quot; rel=&quot;nofollow noreferrer&quot;&gt;TeraRanger Tower&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This version can work outdoor within the range you are looking for and it costs €599 so about $ 670 usd&lt;/p&gt;&#xA;" OwnerUserId="23091" LastActivityDate="2019-05-27T16:17:39.643" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18855" PostTypeId="1" CreationDate="2019-05-27T22:02:51.193" Score="1" ViewCount="114" Body="&lt;p&gt;I'm trying to find the pose of an 3D vector in terms of RPY. Let's say the two end points of the vector is P0(x0, y0, z0) and P1(x1, y1, z1). So the centered vector I get is V(Vx, Vy, Vz) = P1 - P0 = (x1 - x0, y1 - y0, z1 - z0)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; cos(alpha) = Vx/|V|&#xA; cos(beta) = Vy/|V|&#xA; cos(gamma) = Vz/|V|&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Thus, &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  alpha = cos^-1(Vx/|V|)&#xA;  beta = cos^-1(Vy/|V|)&#xA;  gamma = cos^-1(Vz/|V|)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Here, I'm assuming &lt;strong&gt;alpha = roll, beta = pitch, and gamma = yaw&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it the correct way to calculate RPY from a 3D vector?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: I know this question is more suited for &lt;a href=&quot;https://math.stackexchange.com/&quot;&gt;math.stackexchange&lt;/a&gt; but assuming more developers probably have gone through this, I'm posting it here.&lt;/p&gt;&#xA;" OwnerUserId="22218" LastActivityDate="2019-05-27T22:02:51.193" Title="How to get RPY(Roll, Pitch, Yaw) from directional cosines from a single vector?" Tags="&lt;rotation&gt;&lt;pose&gt;&lt;orientation&gt;&lt;geometry&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18856" PostTypeId="1" CreationDate="2019-05-27T23:01:38.007" Score="1" ViewCount="47" Body="&lt;p&gt;I've mounted a broom as an effector of the Kuka IIWA. I've configured a tool in the Kuka Sunrise Workbench software with approximative mass and center of gravity. However, when control is started with a light stiffness, the end effector is slightly attracted by the gravity on its own. I assume the cause is that information about dynamics of the broom are incorrect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Wk7j7.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Wk7j7.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm looking for an experimental setup that would allow to measure these data about the broom, as precisely as possible:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Center of mass (I can easily measure the center of mass along the&#xA;stick, but how about in 3D?)&lt;/li&gt;&#xA;&lt;li&gt;Principal inertia axes (radians)&lt;/li&gt;&#xA;&lt;li&gt;Principal moments of inertia about these axes (kg * m²)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="23096" LastActivityDate="2019-05-27T23:01:38.007" Title="Determine moments of inertia of a tool experimentally" Tags="&lt;dynamics&gt;&lt;kuka&gt;" AnswerCount="0" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18858" PostTypeId="2" ParentId="18681" CreationDate="2019-05-28T15:44:20.383" Score="1" Body="&lt;p&gt;There are a couple motor metrics that will help you decide: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Motor voltage: Your motor has a range of voltages that it will run effectively at. Pick an ESC whose output voltage(usually the same as battery voltage) is in this range. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Stall current: This is the current the motor will draw when the load is so high it can't spin. Most motors will list this specification; you want your ESC's current rating to be higher than stall current. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Kv: This determines rpm per volt of the motor at 0 load. It is usually inversely proportional to torque; the higher the Kv the faster the motor will spin, and the less torque it can provide at that rpm.  &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;You haven't given the motor voltage and stall current, so there's no saying what exact ESC you should pick, but the information above will help you decide.  &lt;/p&gt;&#xA;" OwnerUserId="23103" LastEditorUserId="9176" LastEditDate="2019-05-29T01:04:41.953" LastActivityDate="2019-05-29T01:04:41.953" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18859" PostTypeId="1" CreationDate="2019-05-28T18:04:19.787" Score="1" ViewCount="351" Body="&lt;p&gt;Does anyone know how to solve error &lt;code&gt;action client not connected&lt;/code&gt;?&lt;/p&gt;&#xA;&lt;p&gt;The error text is:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;[ WARN] [1559064181.400017201, 235.919000000]: Waiting for arm_controller_moveit/joint_trajectory_action to come up&#xA;[ WARN] [1559064188.755204272, 241.920000000]: Waiting for arm_controller_moveit/joint_trajectory_action to come up&#xA;[ERROR] [1559064196.377289892, 247.920000000]: Action client not connected: arm_controller_moveit/joint_trajectory_action&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;When I try to see all action servers with the command:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;rostopic list | grep -i goal&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This is output:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; /execute_trajectory/goal  &#xA; /joint_trajectory_action/goal&#xA; /move_base_simple/goal  &#xA; /move_group/goal  &#xA; /pickup/goal  &#xA; /place/goal&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I am using &lt;code&gt;joint_trajectory_action&lt;/code&gt; action server, but I tried with other and it is not working.&lt;/p&gt;&#xA;&lt;p&gt;Any help would be appreciated. Thanks in advance!&lt;/p&gt;&#xA;" OwnerUserId="22747" LastEditorUserId="19515" LastEditDate="2020-07-27T18:28:20.927" LastActivityDate="2020-07-27T18:28:20.927" Title="How to solve action client not connected?" Tags="&lt;ros&gt;&lt;gazebo&gt;" AnswerCount="0" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18860" PostTypeId="1" AcceptedAnswerId="18944" CreationDate="2019-05-29T09:49:52.490" Score="0" ViewCount="38" Body="&lt;p&gt;I want to try a little project with an arduino controlled crossbow turret. Therefore I need some motors to move the turret and gears. Since this is my first try on such a project I am very unsure on how to find the needed DC motors and gears that are usable with those motors. I need a little guidance for what motors I am actually looking for. The motors should only move the rotation of the crossbow (horizontal and vertical). I already found some motors with a torque stall of 8.5 kg/cm which I think is enough to move the turrent. But I still do not know what gears I can buy for that. I could not read anything up that tells me that gears are universally usable for every kind of motor or how to attach gears to motors actually.&lt;/p&gt;&#xA;" OwnerUserId="23110" LastActivityDate="2019-06-15T11:22:18.940" Title="Buying DC motors with fitting gears" Tags="&lt;motor&gt;&lt;stepper-motor&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18861" PostTypeId="1" AcceptedAnswerId="18865" CreationDate="2019-05-29T11:57:54.623" Score="3" ViewCount="54" Body="&lt;p&gt;According to the research paper &lt;a href=&quot;https://www.scribd.com/document/411905819/1990-Parallel-process-decomposition-of-a-dynamic-manipulation-task-robotic-sewing&quot; rel=&quot;nofollow noreferrer&quot;&gt;Parallel process decomposition of a dynamic manipulation task: robotic sewing (D. Gershon, DOI: 10.1109/70.56654)&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Abstract - ... &lt;strong&gt;The task planner approach, as promoted by  the Al community,  is  unsuited  to tasks  involving  interaction with  a  dynamic  environment.&lt;/strong&gt;  ....&lt;br&gt;&#xA;  ... ... ...&lt;br&gt;&#xA;  Task  planning  is  essentially  an  off-line  activity,  based &#xA;  on  a  &quot;snap-shot&quot;  of the  world,  and  is  therefore  incompati-&#xA;  ble  with  dynamic  tasks  and  environments.  Task  planners  re-&#xA;  quire  a  single model  of the world,  whereas  different models &#xA;  may  be  appropriate  for  different  objectives,  e.g.,  an  octree &#xA;  representation  is  efficient  for  obstacle  avoidance,  whereas  a &#xA;  RAPT-style model  [36]  is  better suited to  planning  compliant &#xA;  motion  tasks.  Attempts  to develop  experimental  task planner &#xA;  systems  revealed  additional difficulties,  such as  image  under-&#xA;  standing,  sensor  fusion,  error  recovery,  and  the  potential  for &#xA;  catastrophic  failures  [29]....&#xA;  ..... ..... ....   &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Many control  schemes,  such  as  &lt;strong&gt;adaptive  control&lt;/strong&gt;  [15],  [27]  and &#xA;  sliding-mode control  [41],  can  accommodate bounded uncertainties  in  the model of  the controlled system. However,  these controllers are  not generally  robust  to  disturbances generated by  a dynamic  interacting  environment. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Now, &lt;a href=&quot;https://www.sciencedirect.com/science/article/pii/S0957415899000471&quot; rel=&quot;nofollow noreferrer&quot;&gt;Multi-arm robot control system for manipulation of flexible materials in sewing operation&lt;/a&gt; seems to be implementing a multi-arm robot system on the basis of &quot;Task Planning&quot; approach. And, &lt;a href=&quot;https://www.researchgate.net/publication/326900951_Flexible_Garment_Handling_with_Adaptive_Control_Strategies&quot; rel=&quot;nofollow noreferrer&quot;&gt;this paper&lt;/a&gt; implemented a robot system using adaptive control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, what is the catch here? Why does the 1st article say that use of task planning and adaptive control aren't possible in case of dynamic tasks?&lt;/p&gt;&#xA;" OwnerUserId="22459" LastEditorUserId="22459" LastEditDate="2019-05-30T06:57:25.967" LastActivityDate="2019-05-30T09:48:36.587" Title="What does it actually mean by Task Planning?" Tags="&lt;first-robotics&gt;&lt;planning&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18863" PostTypeId="1" AcceptedAnswerId="18894" CreationDate="2019-05-30T03:09:25.887" Score="0" ViewCount="32" Body="&lt;p&gt;I have been studying Acrobot and Cart-Pole. Both of these systems I can both work out the equations of motion and linear manipulator equations for how to maintain the poles vertically. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is both of these examples are revolute joints. And I'm interested in developing a control system using a spherical joint. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is a typical example used to explain how to create a control system for holding a rod vertically with a spherical joint?&lt;/p&gt;&#xA;" OwnerUserId="22906" LastActivityDate="2019-06-05T07:05:11.853" Title="What is the typical intro example for control systems for a spherical joint?" Tags="&lt;actuator&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18864" PostTypeId="1" AcceptedAnswerId="18867" CreationDate="2019-05-30T03:31:07.820" Score="0" ViewCount="41" Body="&lt;p&gt;I want to build a quaddrone from scratch, without using ready made controllers. I've read a lot about drones, how they fly and what essential parts they should have.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I decided to make my own quaddrone with arduino micro-controller, Are &lt;strong&gt;the following parts compatible and good to build a quadrone ?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Brushless DC motor RacingEdition (KV=2600,Weight: 28 grams,Battery: 2-4S lipo battery,Max.current: 23.2A, Max.power: 710W) &lt;a href=&quot;https://www.aliexpress.com/item/32706910811.html?spm=a2g0o.cart.0.0.51d53c00LHcJuU&quot; rel=&quot;nofollow noreferrer&quot;&gt;link&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;ESC (Continuous current: 30A,Instantaneous current (10 seconds): 35A,frequencies up to 48MHz) &lt;a href=&quot;https://www.aliexpress.com/item/32950669122.html?spm=a2g0o.cart.0.0.51d53c00LHcJuU&quot; rel=&quot;nofollow noreferrer&quot;&gt;link&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Propellers (4730F Folding Propeller Blades,Material: plastic) &lt;a href=&quot;https://www.aliexpress.com/item/32841765501.html?spm=a2g0o.cart.0.0.51d53c00LHcJuU&quot; rel=&quot;nofollow noreferrer&quot;&gt;link&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;IMU sensor (Nine-axis module (three-axis gyroscope + three-axis acceleration + three-axis magnetic field) &lt;a href=&quot;https://www.ebay.com/itm/GY-85-nine-axis-IMU-sensor-ITG3200-ITG3205-ADXL345-HMC5883L-module/173843276384?hash=item2879dde260:g:J9gAAOSwddpckZx-&quot; rel=&quot;nofollow noreferrer&quot;&gt;link&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Carbon Fiber/Aluminium frame &lt;a href=&quot;https://www.ebay.com/itm/ZMR250-3K-Carbon-Fiber-4-Axis-QAV250-FPV-Quadcopter-Mini-H-Quad-Drone-Frame-Kits/292822176614?epid=1895422269&amp;amp;hash=item442d8fd366:g:aMYAAOSwInxXNUjd&amp;amp;frcectupt=true&quot; rel=&quot;nofollow noreferrer&quot;&gt;link&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Arduino UNO &lt;/li&gt;&#xA;&lt;li&gt;Lipo Battery (3S 11.1 V, 4200mAh, 30C) &lt;a href=&quot;https://www.aliexpress.com/item/32718113056.html?spm=2114.search0104.3.22.67ce225dp9uyH3&amp;amp;ws_ab_test=searchweb0_0%2Csearchweb201602_7_10065_10068_319_10059_10884_317_10887_10696_321_322_10084_453_10083_454_10103_10618_10307_537_536%2Csearchweb201603_53%2CppcSwitch_0&amp;amp;algo_expid=3438c1ff-ec7b-40d6-a022-1831f93a7c46-3&amp;amp;algo_pvid=3438c1ff-ec7b-40d6-a022-1831f93a7c46&quot; rel=&quot;nofollow noreferrer&quot;&gt;link&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Also what about the RC controller (RC transimtter and receiver) could it be done using android mobile app and wireless module ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I really appreciate your help ♥, thanks in advance&lt;/p&gt;&#xA;" OwnerUserId="23116" LastEditorUserId="4377" LastEditDate="2019-06-13T01:06:31.380" LastActivityDate="2019-06-13T01:06:31.380" Title="Are these parts compatible to build a quadrone?" Tags="&lt;quadcopter&gt;&lt;arduino&gt;&lt;first-robotics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18865" PostTypeId="2" ParentId="18861" CreationDate="2019-05-30T09:48:36.587" Score="3" Body="&lt;p&gt;I think what you are seeing here is a decade advancement in microprocessor and robotic control technologies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the time the second and third papers were written, in 2000 &amp;amp; 1998, the definition of 'task planning' had switched from static pre-planning to dynamic reactive planning.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The difference in microcomputer speeds between 1990 and 1998 is enormous. In 1990 typical CPUs included the 80486 &amp;amp; i860. They were clocked at double digit MHz, and didn't have the power to do the complex floating point operations required for doing task planning in real time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the late 90's microprocessors were significantly faster, GHz chips were going into production and CPUs were doing more per cycle. Significantly, SIMD (Single Instruction Multiple Data) pipelines like SSE were being implemented so the big matrix manipulations needed to do dynamic task planning were starting to become efficient enough to use in near real time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This all made enough difference that suddenly things which were inconceivable at the start of the decade were now viable.&lt;/p&gt;&#xA;" OwnerUserId="37" LastActivityDate="2019-05-30T09:48:36.587" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18866" PostTypeId="1" AcceptedAnswerId="18873" CreationDate="2019-05-30T12:36:00.490" Score="2" ViewCount="63" Body="&lt;p&gt;So, what I understood by the term &quot;&lt;a href=&quot;https://stackoverflow.com/a/56373815/159072&quot;&gt;Task Planning&lt;/a&gt;&quot; is, &quot;to implement a task to be done by a robot by mimicking a real-world scenario&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.sciencedirect.com/science/article/pii/S0957415899000471&quot; rel=&quot;nofollow noreferrer&quot;&gt;This article&lt;/a&gt; is also using the term &quot;Task&quot; but it is saying something different.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;... To enable user-friendly operation of the system operation, particularly in the phase of preparing new &lt;strong&gt;tasks&lt;/strong&gt;, the original Multi-arm Robot Control (MRC) system has been developed. It incorporates a &lt;strong&gt;task-oriented robot language&lt;/strong&gt; and graphical user interface ... &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So, is this article talking about the same thing or different?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am confused. Coz, their description is unclear.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are they creating a new programming language and embedding it into the robot, or are they planning a task using an &quot;off-the-shelf&quot; programming language?&lt;/p&gt;&#xA;" OwnerUserId="22459" LastEditorUserId="22459" LastEditDate="2019-05-30T12:43:29.150" LastActivityDate="2019-05-31T17:12:19.073" Title="Task oriented robot language?" Tags="&lt;planning&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18867" PostTypeId="2" ParentId="18864" CreationDate="2019-05-30T15:55:56.247" Score="0" Body="&lt;p&gt;I've not used an arduino for quadcopter so I'll leave that to someone else to answer. However given that flight controllers are so cheap maybe it would be worth starting with one just to make sure everything else works and to gain experience.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the rest of the components.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Frame looks good, I started with one of those. Easy to put together, quite robust and lots of space (although an UNO is much bigger than a normal flight controller, so that might be a challenge)&lt;/li&gt;&#xA;&lt;li&gt;Motors look good for the frame size&lt;/li&gt;&#xA;&lt;li&gt;ESCs look good&lt;/li&gt;&#xA;&lt;li&gt;Not sure about the propellers. I've not used folding ones before. Probably fine but check how they mount to the motors. They might be DJI specific mounting.&lt;/li&gt;&#xA;&lt;li&gt;Battery is about twice the size I would expect on a quad of this size. I'd look at something in the 1.8 - 2.2Ah range.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;For the RC control there are lots of options which would work. It depends what you need in turns of range and latency. If you use a standard RC model's radio equipment then you get good range and good latency. Android with wireless module would be less range and higher latency but could still be find for your needs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also checkout &lt;a href=&quot;https://www.arducopter.co.uk/what-do-i-need.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.arducopter.co.uk/what-do-i-need.html&lt;/a&gt; good source on info on arduino based n-copters.&lt;/p&gt;&#xA;" OwnerUserId="21215" LastActivityDate="2019-05-30T15:55:56.247" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18868" PostTypeId="1" AcceptedAnswerId="18886" CreationDate="2019-05-30T20:02:08.823" Score="1" ViewCount="158" Body="&lt;p&gt;I found some papers that use fuzzy logic to solve robotics algorithmic problems. But I have recently been told by a few roboticists that fuzzy logic should not be used in robotics because it has recently been proven by some theoreticians to be a mathematically dubious field. And so any results that you generate using fuzzy logic in robotics will not get published. Is that true?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I find it hard to believe. Is fuzzy logic dubious with respect to applications on real-world problems, say robotics? I have talked to mathematicians and they surely believe that fuzzy logic is a robust and clever field. But then mathematicians do a lot of abstract stuff that is completely irrelevant to the real world and must not be touched. Is fuzzy logic one of those things?&lt;/p&gt;&#xA;" OwnerUserId="14868" LastEditorUserId="14868" LastEditDate="2019-05-30T20:18:12.040" LastActivityDate="2019-08-24T20:00:36.000" Title="Is Fuzzy logic applicable for robotics research" Tags="&lt;algorithm&gt;&lt;research&gt;&lt;theory&gt;&lt;probability&gt;&lt;uncertainty&gt;" AnswerCount="4" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18869" PostTypeId="2" ParentId="18712" CreationDate="2019-05-31T05:43:34.360" Score="0" Body="&lt;p&gt;Check already ROS supported sensors; you might find code for some of your sensors already existing. Check this link &lt;a href=&quot;http://wiki.ros.org/Sensors&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://wiki.ros.org/Sensors&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19277" LastActivityDate="2019-05-31T05:43:34.360" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18870" PostTypeId="2" ParentId="18868" CreationDate="2019-05-31T06:06:00.453" Score="2" Body="&lt;p&gt;Fuzzy logic is definitely used in many of the control systems including but not limited to robotics. See this paper for an example: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://pdfs.semanticscholar.org/b9a7/332b03d46b3ee08b9d113e64714e6b668601.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://pdfs.semanticscholar.org/b9a7/332b03d46b3ee08b9d113e64714e6b668601.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://ieeexplore.ieee.org/document/1678143&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://ieeexplore.ieee.org/document/1678143&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If we consider fuzzy logic as dubious then we should do the same to probabilities. Both Fuzzy logic and Probabilities range between 0 and 1; fuzzy logic uses degrees of truth as a mathematical model of vagueness, while Probability uses mathematical model of ignorance.&lt;/p&gt;&#xA;" OwnerUserId="19277" LastActivityDate="2019-05-31T06:06:00.453" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18871" PostTypeId="2" ParentId="18868" CreationDate="2019-05-31T15:40:50.493" Score="2" Body="&lt;p&gt;Short answer: Fuzzy logic (FL) isn't applicable for robotics research, The long answer is, that in the 1980s as part of the fifth computer generation fuzzy logic was researched in Japan with the attempt to build intelligent advanced parallel computers, but the Japanese researchers have failed. Fuzzy logic isn't a technical idea but a philosophical description of the world and a marketing term used for selling rice cookers and washing machines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After a short time, the consumers have noticed, that Fuzzy stabilized camcorders doesn't have any improvements over a normal camcorder and multi-value logic was repressed into obscurity. If a robot contains of a so called fuzzy controller, it's a clear sign, that's a non-academic project which can't be proven if it's working or not.[1] The term fuzzy has it's origin in a clumsy cowboy character in western film produced in black/white recording decades ago. It's a synonym for a failed project which doesn't fulfill the minimum standards in academia.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[1] Elkan, Charles, et al. &quot;The paradoxical success of fuzzy logic.&quot; IEEE expert 9.4 (1994): 3-49.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2019-05-31T15:40:50.493" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18872" PostTypeId="1" CreationDate="2019-05-31T17:12:18.283" Score="0" ViewCount="135" Body="&lt;p&gt;I am working on motion planning algorithm for quadrotor. As I have learned in Coursera &lt;a href=&quot;https://www.coursera.org/learn/robotics-flight&quot; rel=&quot;nofollow noreferrer&quot;&gt;Aerial robotics course&lt;/a&gt;, trajectories for quadrotors should minimize snap which is equivalent to interpolating waypoints with 7th degree polynomial. It's not very hard to interpolate them. However I am not sure how to make trajectory satisfy constraints on maximum velocity and acceleration. I am aware of parametrization and temporal scaling but in order to satisfy constraints it is necessary to find maximum velocity and acceleration achieved in planned trajectory. Unfortunately if function of position is 7th degree polynomial then velocity is a function of 6th degree polynomial and it would be necessary to find roots of 5th degree polynomials in order to find critical points in velocity function. The only method, I am aware of, which can solve the problem is based on computing eigenvalues of a companion matrix and it is iterative. Personally I do not like any iterative methods in run time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based on what is said in the above I have several questions:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt; Is it okay to solve polynomials equations with described method in run time? Especially if fast trajectory re-planning is required?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;2.&lt;/strong&gt; Maybe there is a way not to strictly satisfy the constraints but give some bounds on the planning results? Like in 95 percent trajectory will be fine and in other 5 percent it is possible to re-plan it when out of bound constraint is detected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;3.&lt;/strong&gt; Will it make a big difference if I interpolate waypoints with 3d order polynomials instead of 7th? In case of 3d order polynomials problem of searching for critical points for velocity and acceleration becomes a trivial task.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;4.&lt;/strong&gt; Maybe there is totally another way of dealing with trajectories which exceeds bound on maximum velocity and acceleration?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="15392" LastActivityDate="2019-05-31T17:12:18.283" Title="Planning minimum snap trajectories" Tags="&lt;quadcopter&gt;&lt;motion-planning&gt;&lt;navigation&gt;&lt;algorithm&gt;&lt;real-time&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18873" PostTypeId="2" ParentId="18866" CreationDate="2019-05-31T17:12:19.073" Score="1" Body="&lt;p&gt;In contrast to motion planning, task planning operates on a symbolic higher level. Often, it's connected to natural language descriptions like “open door” and “stand-up”. This makes it a natural choice for a domain specific language. The words in the new language are equal to the actions a robot can execute.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The alternative would be, to realize the tasks in a normal programming language like C++. But then, the actions are also equal to high-level words which are defined in a class. In both cases the idea is to build on top of the low level primitives an elaborated natural language layer which makes it easier to author longer robotics action sequences. A single task command is equal to many low level actions of the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the tasks are embedded in a simulation the resulting symbolic task simulator is called qualitative physics engine. The model accepts instructions in natural language and predicts the outcome of the action.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2019-05-31T17:12:19.073" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18874" PostTypeId="2" ParentId="18712" CreationDate="2019-05-31T17:57:45.517" Score="0" Body="&lt;p&gt;If all you want from ROS is the publish/subscribe architecture, then I would caution that using ROS probably has non-negligible overhead, especially if you are unfamiliar with it. In particular, the build environment is definitely geared towards C++, and if you are already planning on using Python, I would suggest looking for alternatives -- paho-MQTT might be more inline with your needs.    &lt;/p&gt;&#xA;" OwnerUserId="9585" LastActivityDate="2019-05-31T17:57:45.517" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18876" PostTypeId="1" CreationDate="2019-05-31T19:52:02.590" Score="1" ViewCount="65" Body="&lt;p&gt;&lt;a href=&quot;https://dl.acm.org/citation.cfm?id=2887740&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here&lt;/a&gt;, you can find a nice academic paper about this topic. What I am looking for it is a real implementation of it or, instead, any other implementation of IK algorithm that can run in a many-core or multi-core architecture? I will investigate every option you can give me. In other words, I am looking for an algorithm that can be parallelized&lt;/p&gt;&#xA;" OwnerUserId="23132" LastActivityDate="2019-05-31T19:52:02.590" Title="Parallel Inverse Kinematics for Multithreaded Architecture (or GPU)" Tags="&lt;inverse-kinematics&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18877" PostTypeId="1" AcceptedAnswerId="18958" CreationDate="2019-06-01T05:56:02.790" Score="1" ViewCount="56" Body="&lt;p&gt;I'm working on my first &quot;robotic&quot; project that involves a square platform that should drop one of the four sides at a time. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;     side 1&#xA;  A----------B&#xA;  |          |&#xA;4 |          | 2&#xA;  |          |&#xA;  D----------C&#xA;     side 3&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;My idea is to mount &lt;em&gt;{something}&lt;/em&gt; in each corner [A, B, C, D] and for example to drop to &lt;em&gt;side 1&lt;/em&gt; I would pull down corners &lt;em&gt;A and B&lt;/em&gt;. Then back up again and drop another side. The platform will be circa 150 x 150&amp;nbsp;mm and has to tilt to circa 45° therefore that &lt;em&gt;{something}&lt;/em&gt; has to go down by around 150&amp;nbsp;mm as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is that &lt;em&gt;{something}&lt;/em&gt; that I should use? I was googling for a while but I don't know the right names for the parts, that makes googling quite challenging. Is it a &lt;em&gt;gear rack&lt;/em&gt;? Or &lt;em&gt;Linear actuator&lt;/em&gt;? Or some kind of electric &lt;em&gt;piston&lt;/em&gt;? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any site somewhere for aspiring makers that lists the common parts and mechanism items? And ideally where to buy them cheap too (this is a little school project on a very limited budget).&lt;/p&gt;&#xA;" OwnerUserId="23133" LastEditorUserId="9176" LastEditDate="2019-06-02T07:39:01.827" LastActivityDate="2019-06-22T12:39:03.743" Title="Robot mechanism parts names" Tags="&lt;mechanism&gt;&lt;movement&gt;&lt;gearing&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18878" PostTypeId="1" CreationDate="2019-06-01T06:16:56.790" Score="0" ViewCount="123" Body="&lt;p&gt;I'm building a delivery drone as my final year project. A drone that can deliver a package to offices around my small town autonomously, for my final year project.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to know how this drone can find the exact location of these offices, since I couldn't find them on Google map?&lt;/p&gt;&#xA;" OwnerUserId="23135" LastActivityDate="2021-03-23T17:02:40.340" Title="A Delivery Drone" Tags="&lt;quadcopter&gt;&lt;arduino&gt;&lt;navigation&gt;&lt;gps&gt;&lt;ardupilot&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="18879" PostTypeId="2" ParentId="18878" CreationDate="2019-06-01T08:39:01.210" Score="0" Body="&lt;p&gt;Most of the outdoor drones use GPS for autonomous navigation. Even the flight controllers like Ardupilot and Naza need to be given the GPS coordinates of the destination for autonomous flights. The best way to do this is go to the exact location and get the GPS coordinates and then program the flight controller. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apart from this approach there are image and point cloud based approaches to localize the drones but they are a bit complex methods and require a considerable time to implement.&lt;/p&gt;&#xA;" OwnerUserId="21353" LastActivityDate="2019-06-01T08:39:01.210" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18880" PostTypeId="1" CreationDate="2019-06-02T11:13:40.950" Score="0" ViewCount="1092" Body="&lt;p&gt;I want to make an autonomous mobile robot, which can localise itself and navigate to the goal in an unknown environment. &#xA;As sensor, i just have a RPLidar to get laser scan, that's it. I used Hector SLAM to make a map of the room. But how do I implement navigation for the robot?&#xA;Move_Base, (specifically base_local_planner) requires odometry data. while hector gives pose update and slam out pose, they have a different message type compared to odom.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please help.&lt;/p&gt;&#xA;" OwnerUserId="13969" LastActivityDate="2021-04-06T12:35:30.830" Title="how to implement autonomous navigation using lidar and hector?" Tags="&lt;ros&gt;&lt;slam&gt;&lt;lidar&gt;&lt;differential-drive&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18881" PostTypeId="2" ParentId="18849" CreationDate="2019-06-02T16:49:17.630" Score="0" Body="&lt;p&gt;By default &lt;code&gt;teach()&lt;/code&gt; displays orientation using XYZ order roll-pitch-yaw angles, since this is compatible with older textbooks on arm robots, eg. Paul, Spong, Siciliano.  By default &lt;code&gt;tr2rpy()&lt;/code&gt; uses ZYX order.  You can pass the &lt;code&gt;'xyz'&lt;/code&gt; option to &lt;code&gt;tr2rpy()&lt;/code&gt; to make the two angular representations agree.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively you can pass the option &lt;code&gt;'rpy/zyx'&lt;/code&gt; to &lt;code&gt;teach()&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's unfortunate that the term roll-pitch-yaw angles is underspecified, many sources just use the term without giving the details.  To add to the confusion, different areas of robotics seem to adopt different conventions. Check out the implementation of &lt;code&gt;rpy2tr()&lt;/code&gt; to see the difference.&lt;/p&gt;&#xA;" OwnerUserId="21223" LastActivityDate="2019-06-02T16:49:17.630" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="18882" PostTypeId="1" AcceptedAnswerId="18885" CreationDate="2019-06-02T20:38:55.133" Score="3" ViewCount="338" Body="&lt;p&gt;I have created a 6-DOF robot using RigidBodyTree() method and modified D-H parameters using robotics toolbox in MATLAB. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The modified DH parameters for the robot are as follows:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/UP6k7.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/UP6k7.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have followed the example here: &lt;a href=&quot;https://www.mathworks.com/help/robotics/ref/robotics.rigidbodytree-class.html#bvet6e8&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.mathworks.com/help/robotics/ref/robotics.rigidbodytree-class.html#bvet6e8&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To bring the robot to its actual home position (position of the real robot when encoder values read 0), I have to pass specific theta (DH Parameter) values: [0 -pi/2 0 0 0 pi]. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, there are discrepancies in the joint values for home position of robot created using DH parameters and that of the actual robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For actual robot and its simulators, passing a joints value of [0 0 0 0 0 0] gets to the home position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The visulaization of robot created using robotics toolbox using DH parameters and that of the simulator are shown below:&lt;a href=&quot;https://i.stack.imgur.com/FsMps.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FsMps.png&quot; alt=&quot;MATLAB Robot&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/47Xbr.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/47Xbr.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;  &lt;a href=&quot;https://i.stack.imgur.com/s8ytl.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/s8ytl.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This creates problems during inverse kinematics. For the same home position (4X4 transformation matrix), the joint angles are different for real robot simulator and robot created using modified DH parameters ([0 0 0 0 0 0] vs [0 -pi/2 0 0 0 pi]).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The DH parameter method ignores theta values when creating robot. How can I match the home configuration of the robot to the real robot? &lt;/p&gt;&#xA;" OwnerUserId="23118" LastEditorUserId="23118" LastEditDate="2019-06-02T21:55:18.657" LastActivityDate="2019-06-03T14:12:47.223" Title="Home position of robot created using modified DH Parameters doesn't match the real robot" Tags="&lt;robotic-arm&gt;&lt;inverse-kinematics&gt;&lt;dh-parameters&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18884" PostTypeId="1" CreationDate="2019-06-03T11:02:13.400" Score="1" ViewCount="389" Body="&lt;p&gt;I've read that 6 dof manipulators give eight closed form solutions, according to a paper. What is the number of iK solutions for the ABB IRB 140? (last three axes intersect but there is a offset between joint 1-2. Does it affect the number of solutions?)&#xA;Thanks&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://search-ext.abb.com/library/Download.aspx?DocumentID=3HAC041346-001&amp;amp;LanguageCode=en&amp;amp;DocumentPartId=&amp;amp;Action=Launch&amp;amp;fbclid=IwAR2atlGRywE3gEGu7Or-LGl5_xKxuD6r_MAAIS5EQxEb7MJwwd2hJRmoi7Q&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://search-ext.abb.com/library/Download.aspx?DocumentID=3HAC041346-001&amp;amp;LanguageCode=en&amp;amp;DocumentPartId=&amp;amp;Action=Launch&amp;amp;fbclid=IwAR2atlGRywE3gEGu7Or-LGl5_xKxuD6r_MAAIS5EQxEb7MJwwd2hJRmoi7Q&lt;/a&gt; &lt;a href=&quot;https://i.stack.imgur.com/7OaVI.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7OaVI.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="23145" LastEditorUserId="110" LastEditDate="2019-06-03T18:56:41.493" LastActivityDate="2019-11-02T22:03:25.133" Title="Number of inverse kinematics closed form solutions for ABB IRB 140" Tags="&lt;robotic-arm&gt;&lt;inverse-kinematics&gt;&lt;industrial-robot&gt;&lt;manipulator&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18885" PostTypeId="2" ParentId="18882" CreationDate="2019-06-03T14:12:47.223" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;To bring the robot to its actual home position (position of the real robot when encoder values read 0), I have to pass specific theta (DH Parameter) values: [0 -pi/2 0 0 0 pi].&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Correct; that's what it looks like in the last column of your table:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/UP6k7.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/UP6k7.png&quot; alt=&quot;DH Parameter Table&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The DH parameter method ignores theta values when creating robot. How can I match the home configuration of the robot to the real robot?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Write a simple &lt;a href=&quot;https://en.wikipedia.org/wiki/Adapter_pattern#Overview&quot; rel=&quot;nofollow noreferrer&quot;&gt;adapter&lt;/a&gt; to convert to and/or from the configurations you want to use. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, you could do something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;function outputAngles = ABBInverseKinematics(desiredPose, initialThetas)&#xA;    rawOutputAngles = InverseKinematics(desiredPose);&#xA;    outputAngles = rawOutputAngles + initialThetas;&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Your problem ultimately just boils down to the fact that the default position in your robot's frame (all zeros) doesn't correspond to the default position in your DH frame (your theta list). They're only (and always) separated by the initial values, so you either add or subtract the initial values appropriately, for forward or inverse kinematics, and you're done. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2019-06-03T14:12:47.223" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="18886" PostTypeId="2" ParentId="18868" CreationDate="2019-06-03T23:53:32.693" Score="2" Body="&lt;p&gt;I would like to mention that Fuzzy logic is still an active control system used in many industry applications. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In garbage fired power plants, concrete aggregate firing, hydraulics, and the control of flow of powdered 'fluids' in foundries to name a few. However, I will admit, I've only seen them used in 'one off' difficult to model projects, such as power plants and the such. However I have read papers like you that use it in robotics....&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would say it most &lt;em&gt;certainly&lt;/em&gt; has it's place in research, and it is certainly used in many control areas that are near impossible to control in more traditional methods. However much like you'll see Neural Networks being sticker'd and used on/in everything under the sun. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fuzzy logic suffered the same fate, but fell out of interest because of it...It was thought that you could throw away all the old tools and 'save the world'. But it became a marketing failure and other methods became (stayed?) the norm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't think Fuzzy logic is 'dubious' in any way. I think it goes against the methods of many designers to be exact and well...not so fuzzy, and has a poor history of being used in junk machines, and lots of burnt memories. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's an interesting field, one you should learn about, maybe even play around with in matlab or your flavour and learn about....if not for anything else than to say you like something else more.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some reading materials:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://141.51.54.2/MRT/Bibliothek/Publikationen/2017-Zaidi-ASC-NOE_TS.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;NOE TS Fuzzy Modelling of Nonlinear Dynamic&#xA;Systems with Uncertainties using Symbolic&#xA;Interval-valued data&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://link.springer.com/content/pdf/bfm%3A978-1-84882-331-0/1.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Advances in Industrial Control&lt;/a&gt; &#xA;^this is more about PIDS and MPCs&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://link.springer.com/book/10.1007/b138626&quot; rel=&quot;nofollow noreferrer&quot;&gt;Fuzzy Logic, Identification and Predictive Control&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and just for sources sake, a list (in german anyways) of &lt;a href=&quot;https://www.researchgate.net/publication/286788829_Survey_Successful_applications_of_fuzzy_logic_and_fuzzy_control&quot; rel=&quot;nofollow noreferrer&quot;&gt;successful applications of Fuzzy logic&lt;/a&gt; (maybe just scroll through the pictures to get an idea if you can't read german). As I said, it has it's place....it's just not very big.&lt;/p&gt;&#xA;" OwnerUserId="23148" LastActivityDate="2019-06-03T23:53:32.693" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18890" PostTypeId="1" CreationDate="2019-06-04T15:02:42.410" Score="1" ViewCount="303" Body="&lt;p&gt;We built a car model with Ackerman steering type for line following task. The distance between rear and front wheels' axes was about 42 cm. Then we tuned PID controller (really just PD: Kp = 0.9, Ki = 0.0 and Kd = 0.2). A deviation from line in pixels captured by forward looking camera is directly sent to the PID controller and the result is a steering angle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But recently we had to shorten our car to allow it to pass rounded corners. We shortened the distance between wheels' axes by about 15 cm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It took us so long to tune the PID controller the previous time so we just want to adjust the PID values according to some Ackerman kinematic model. Is there any way to do this?&lt;/p&gt;&#xA;" OwnerUserId="23151" LastEditorUserId="37" LastEditDate="2019-06-05T10:02:47.063" LastActivityDate="2019-06-05T10:06:56.573" Title="Tuning PID controlling car's steering angle" Tags="&lt;pid&gt;&lt;autonomous-car&gt;&lt;steering&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="18892" PostTypeId="1" CreationDate="2019-06-04T17:47:06.340" Score="5" ViewCount="431" Body="&lt;p&gt;I have an IRobot Roomba model number 565 and I am trying to control it with a Wemos D1 mini with Roomba's OI.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I connected the TX and RX pins from my FTDI adapter to the Roombas RX and TX and I can see information (battery firmware and etc) pop up in Termite (a serial terminal) but if I send the commands 128,131,135 in sequence The Roomba doesn't go to clean mode.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I saw somewhere that sending commands to the Roomba with the serial terminal won't work because it will send 128 as three bytes instead of one. So I used a sketch from someone that publishes information about the Roomba into an MQTT server. So I uploaded it to my Wemos D1 mini and connected the RX and TX accordingly, but it sends &quot;no data&quot; and when I do a power reset it gives me a two-tone beep.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am really confused about what does that beep mean and why isn't it working correctly. I did try two different sketches but neither of them worked.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I command my Roomba to go into clean mode using my Wemos D1 mini?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: sorry for forgetting to add the links of the sketches I tried. The MQTT one is from a Youtuber called The Hook Up here is his &lt;a href=&quot;https://github.com/thehookup/MQTT-Roomba-ESP01/blob/master/RoombaESP01_CONFIGURE.ino&quot; rel=&quot;nofollow noreferrer&quot;&gt;GitHub&lt;/a&gt; The second one I saw while searching on why it wasn't working, so here is that &lt;a href=&quot;https://forum.arduino.cc/index.php?topic=168377.0&quot; rel=&quot;nofollow noreferrer&quot;&gt;one&lt;/a&gt;. Also, I was trying to upload this &lt;a href=&quot;https://www.crc.id.au/hacking-the-roomba-600/&quot; rel=&quot;nofollow noreferrer&quot;&gt;one&lt;/a&gt; but I was getting a compiling error so I didn't test it.&#xA;Also, I didn't find anything about the error beep the Roomba is giving me. The closest thing I get while searching for it is the &lt;a href=&quot;https://homesupport.irobot.com/app/answers/detail/a_id/2002/~/the-roomba-500-series-error-messages-chart.&quot; rel=&quot;nofollow noreferrer&quot;&gt;list of error codes&lt;/a&gt; and beeps but it doesn't say anything for only 2 beeps and no voice message. I also totally forgot to mention that when I connect my Roomba with a serial adapter, open Termite(a serial terminal) and then press the clean button I get the following response &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/5ip0h.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/5ip0h.png&quot; alt=&quot;Termite&quot;&gt;&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;this tells me that there is a high chance that there is OI support in my Roomba.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also tried using Python as Austin suggested but still, no luck&#xA;here is my code if you can find some sort of mistake I did &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;import serial&#xA;ser = serial.Serial(&quot;COM7&quot;, 115200) # open serial port&#xA;print(ser.name) # check which port was really used&#xA;ser.write(bytearray([128, 131, 135]))&#xA;print (&quot;commands sent&quot;)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="23152" LastEditorUserId="23152" LastEditDate="2019-06-07T04:15:21.607" LastActivityDate="2020-08-23T14:46:10.000" Title="Not able to communicate with Roomba with serial port" Tags="&lt;irobot-create&gt;&lt;serial&gt;&lt;roomba&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="18894" PostTypeId="2" ParentId="18863" CreationDate="2019-06-04T21:13:38.183" Score="3" Body="&lt;p&gt;The best example I can think of would be the &lt;a href=&quot;https://en.wikipedia.org/wiki/Spherical_pendulum&quot; rel=&quot;nofollow noreferrer&quot;&gt;spherical pendulum&lt;/a&gt;. Albeit, this is not exactly the easiest thing to regulate as you have two degrees of freedom and a frictionless contact (well depending on your design)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a &lt;a href=&quot;https://www.youtube.com/watch?v=woCdjbsjbPg&amp;amp;list=PLyYbMzuNL1ulGfe0zQYbTvTfCYXm8NELX&quot; rel=&quot;nofollow noreferrer&quot;&gt;youtube of such an example&lt;/a&gt; of a method to control it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'll often read that the Equation of motion will be described through Hamilton, but don't let anyone kid you, this can also easily be derived via Lagrange (if thats your fancy). Whereby the important thing to keep in mind is that the spherical pendulum will only move within a single plane unless there is an initial velocity included in your initial conditions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some things to read:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.maths.surrey.ac.uk/explore/michaelspages/documentation/Spherical&quot; rel=&quot;nofollow noreferrer&quot;&gt;Spherical Pendulum&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://arxiv.org/pdf/1511.02655.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Dynamics and Control of Spherical Pendulum&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="23148" LastActivityDate="2019-06-04T21:13:38.183" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18895" PostTypeId="2" ParentId="18863" CreationDate="2019-06-05T07:05:11.853" Score="1" Body="&lt;p&gt;not a direct answer, but I would recommend you the following lessons by Peter Corke: &lt;a href=&quot;https://robotacademy.net.au/masterclass/robot-joint-control/&quot; rel=&quot;nofollow noreferrer&quot;&gt;robotacademy: joint control&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18341" LastActivityDate="2019-06-05T07:05:11.853" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18896" PostTypeId="1" CreationDate="2019-06-05T07:15:02.810" Score="1" ViewCount="45" Body="&lt;p&gt;I'm facing the problem of model calibration for a large-scale manipulator (e.g. &lt;a href=&quot;https://previews.123rf.com/images/kokandr/kokandr1401/kokandr140100029/25041162-concrete-pump-on-the-truck-chassis.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;example image&lt;/a&gt;) with a half-spherical workspace of around 40m diameter.&lt;/p&gt;&#xA;&lt;p&gt;The typical approach would be computer vision, which is difficult in this case due to:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;large scale and therefore huge distance to cameras,&lt;/li&gt;&#xA;&lt;li&gt;only possible outdoors, where the sunlight might be a problem.&lt;/li&gt;&#xA;&lt;li&gt;calibration of 5-6 cameras takes some time, the measurement should be finished in one day.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;So my ideas are the following:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;use triangulation of radio frequency signals (e.g. &lt;a href=&quot;https://www.pozyx.io/&quot; rel=&quot;nofollow noreferrer&quot;&gt;RF position sensor&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;use extra IMUs&lt;/li&gt;&#xA;&lt;li&gt;develop a sensor fusion scheme, like kalman filter&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;I want to ask you for&#xA;alternative approaches, expected accuracy of RF position sensors without sensor fusion, problems with RF reflections (the manipulator is constructed from steel) or any other input.&lt;/p&gt;&#xA;&lt;p&gt;thanks in advance!&lt;/p&gt;&#xA;" OwnerUserId="18341" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2019-08-05T18:07:31.710" Title="calibrating large scale manipulator" Tags="&lt;calibration&gt;&lt;sensor-fusion&gt;&lt;identification&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18897" PostTypeId="2" ParentId="18896" CreationDate="2019-06-05T07:54:04.303" Score="1" Body="&lt;p&gt;You are not the first person in the world that wants to calibrate a larger robot, so there are commercially available solutions :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The tool of choice in your case is a &lt;a href=&quot;https://www.qualitydigest.com/inside/twitter-ed/how-laser-trackers-work.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;laser tracker&lt;/a&gt;. You attach one or multiple targets (laser reflectors) to your machine. The laser tracker consists of a laser that measures the distance to a target, two motors to pan and tilt the laser so that it finds and hits the targets. &lt;/p&gt;&#xA;" OwnerUserId="23196" LastActivityDate="2019-06-05T07:54:04.303" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="18898" PostTypeId="1" CreationDate="2019-06-05T09:45:58.937" Score="0" ViewCount="425" Body="&lt;p&gt;I need to find rotation matrices between the frames of references of the vertices of the cube, and the DH parameters. For the rotation between the first to second frame of reference, I got alpha as pi/2 and theta as -pi/2, which makes the rotation matrix as: [0 0 -1; -1 0 0; 0 1 0]. This doesnt match any of the given options.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/lOrJy.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/lOrJy.png&quot; alt=&quot;Given Frames of Reference for vertices of cube&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ycveS.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ycveS.png&quot; alt=&quot;Given Options&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/8Erqz.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8Erqz.png&quot; alt=&quot;General transformation matrix I used to obtain my rotation matrix&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="23155" LastEditorUserId="23155" LastEditDate="2019-06-07T09:29:20.120" LastActivityDate="2019-06-07T09:29:20.120" Title="Rotation Matrices Using DH Parameters" Tags="&lt;dh-parameters&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18899" PostTypeId="2" ParentId="18890" CreationDate="2019-06-05T10:06:56.573" Score="-2" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/w5IJ1.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/w5IJ1.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to the OP the Ackerman steering model was used for controlling a pid controller The task is to determine the right steering angle in response to the measured distance to an obstacle. The good news is, that an Ackerman like car model is the right choice for the task, because it simplifies the situation. The open problem so far is how to determine the steering angle. This is indeed a complicated problem, which goes beyond the kinematic model.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One naive approach is a behavior tree which contains of if-then rules. Another more complicated technique is to use an RRT planner on top of the Ackerman model. To make things more easy i would recommend the behavior tree idea.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2019-06-05T10:06:56.573" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18900" PostTypeId="2" ParentId="18884" CreationDate="2019-06-05T18:08:50.497" Score="1" Body="&lt;p&gt;Actually, in certain configurations you can have an infinite number of IK solutions.  For example if joints 4, 5, and 6 are straight and inline as in your image.  You can rotate joint 4 by &lt;span class=&quot;math-container&quot;&gt;$X$&lt;/span&gt; and 6 by &lt;span class=&quot;math-container&quot;&gt;$-X$&lt;/span&gt; to get the same end-effector pose. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a great video on arm singularities which also shows this phenomenon nicely:&#xA;&lt;a href=&quot;https://www.youtube.com/watch?v=zlGCurgsqg8&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=zlGCurgsqg8&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You don't typically have these joints inline like this, but in general you can have 2 solutions at the wrist.  In one solution, joints 4, 5, and 6 will have values: &lt;span class=&quot;math-container&quot;&gt;$X$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$Y$&lt;/span&gt;, and &lt;span class=&quot;math-container&quot;&gt;$Z$&lt;/span&gt;.  And in the other solution, they will have values: &lt;span class=&quot;math-container&quot;&gt;$180-X$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$-Y$&lt;/span&gt;, and &lt;span class=&quot;math-container&quot;&gt;$180-Z$&lt;/span&gt;.  (I think, please verify).  I am not sure if there is a standard term for this but I have always called it a &quot;wrist-flip&quot;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can have another flip with joints 2, 3, and 4 (&quot;elbow-flip&quot;).  And another with joints 1, 2 and 3 (&quot;shoulder-flip&quot;).  These flips can be combined, creating 2*2*2 = 8 possible permutations of IK solutions.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The presence of an offset joint will not affect the number of IK solutions.  You will still be able to do a shoulder-flip.  Although I think this means the joint angles won't simply be 180 degrees off from each other.  And maybe other joints will need to compensate too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that you will not always get the same number of solutions.  Joint limits,  self collisions, and construction details can reduce the number of valid solutions.  Here is where the offset between joints 1 and 2 comes into play.  For example, near the limits of the workspace on one side, you won't be able to get that close if joint 1 is rotated 180 degrees.  Eliminating the possibility of a shoulder-flip.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2019-06-05T18:08:50.497" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18901" PostTypeId="2" ParentId="18898" CreationDate="2019-06-05T19:14:03.173" Score="2" Body="&lt;p&gt;I'm not sure where you went wrong, but that's because you haven't explained how you arrived at your DH values or how you converted from DH to rotation matrix. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This question doesn't really need all that, though, because the axes are swapped but otherwise remain colinear. If you were trying to get to/from O3 it'd be a bit harder. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The matrix, any matrix but especially here for rotations, just explains how you recombine elements of an existing vector to get a new vector. In your case, you have:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\left[\begin{matrix}&#xA;x_1 \\&#xA;y_1 \\ &#xA;z_1&#xA;\end{matrix}\right] = &#xA;\left[\mbox{something}\right]&#xA;\left[\begin{matrix}&#xA;x_2 \\&#xA;y_2 \\ &#xA;z_2&#xA;\end{matrix}\right]&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And you want the [something] that converts &lt;em&gt;from&lt;/em&gt; O2 &lt;em&gt;to&lt;/em&gt; O1. Just look at the axes!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In O2, the x-axis points the same way as the z-axis does in O1. None of the other axes point in that direction, so you want &lt;em&gt;all&lt;/em&gt; of the &lt;span class=&quot;math-container&quot;&gt;$x_2$&lt;/span&gt; and none of the &lt;span class=&quot;math-container&quot;&gt;$y_2$&lt;/span&gt; or &lt;span class=&quot;math-container&quot;&gt;$z_2$&lt;/span&gt; entries. That is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\left[\begin{matrix}&#xA;x_1 \\&#xA;y_1 \\ &#xA;z_1&#xA;\end{matrix}\right] = &#xA;\left[\begin{matrix}&#xA;&amp;amp;\mbox{something} \\&#xA;&amp;amp;\mbox{something} \\&#xA;1 &amp;amp; 0 &amp;amp; 0&#xA;\end{matrix}\right]&#xA;\left[\begin{matrix}&#xA;x_2 \\&#xA;y_2 \\ &#xA;z_2&#xA;\end{matrix}\right]&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you look at just the multiplication on that bottom row, you get:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;z_1 = 1*x_2 + 0*y_2 + 0*z_2 \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;or, as stated above, &lt;span class=&quot;math-container&quot;&gt;$z_1 = x_2$&lt;/span&gt;. You can see that from the diagram: &lt;span class=&quot;math-container&quot;&gt;$z_1$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$x_2$&lt;/span&gt; point in the same direction. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the same way, you can see that &lt;span class=&quot;math-container&quot;&gt;$z_2$&lt;/span&gt; points in the same direction as &lt;span class=&quot;math-container&quot;&gt;$x_1$&lt;/span&gt;. Since it's for &lt;span class=&quot;math-container&quot;&gt;$x_1$&lt;/span&gt;, you want it to be the first row, and again you want all of &lt;span class=&quot;math-container&quot;&gt;$z_2$&lt;/span&gt; but none of &lt;span class=&quot;math-container&quot;&gt;$y_2$&lt;/span&gt; or &lt;span class=&quot;math-container&quot;&gt;$x_2$&lt;/span&gt;, so you get:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\left[\begin{matrix}&#xA;x_1 \\&#xA;y_1 \\ &#xA;z_1&#xA;\end{matrix}\right] = &#xA;\left[\begin{matrix}&#xA;0 &amp;amp; 0 &amp;amp; 1 \\&#xA;&amp;amp;\mbox{something} \\&#xA;1 &amp;amp; 0 &amp;amp; 0&#xA;\end{matrix}\right]&#xA;\left[\begin{matrix}&#xA;x_2 \\&#xA;y_2 \\ &#xA;z_2&#xA;\end{matrix}\right]&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And you can again verify this by multiplying the top row out to get:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;x_1 = 0*x_2 + 0*y_2 + 1*z_2 \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or &lt;span class=&quot;math-container&quot;&gt;$x_1 = z_2$&lt;/span&gt;. Finally, the y-axes just point in the opposite directions, so you want to invert all of the y-values, again taking none of the x- or z-axis values:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\left[\begin{matrix}&#xA;x_1 \\&#xA;y_1 \\ &#xA;z_1&#xA;\end{matrix}\right] = &#xA;\left[\begin{matrix}&#xA;0 &amp;amp; 0 &amp;amp; 1 \\&#xA;0 &amp;amp; -1 &amp;amp; 0 \\&#xA;1 &amp;amp; 0 &amp;amp; 0&#xA;\end{matrix}\right]&#xA;\left[\begin{matrix}&#xA;x_2 \\&#xA;y_2 \\ &#xA;z_2&#xA;\end{matrix}\right]&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So that's the easy way to solve the problem. If you want help figuring out where you went wrong with the DH route (which is still totally valid but just more work) then please post more information including how you arrived at the DH parameters and how you converted them to a rotation matrix. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2019-06-05T19:14:03.173" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18903" PostTypeId="2" ParentId="18806" CreationDate="2019-06-07T02:08:32.927" Score="6" Body="&lt;p&gt;I have found the problem after some long search on the internet. The problem was that in Rviz, X-axis is defined as front of the robot and Y-axis is defined as the sideways. However, in my URDF I defined the robot in a way where Y-axis was its front and X-axis was its sideways. After fixing this, my robot moves normally in Rviz and Gazebo both. &lt;/p&gt;&#xA;" OwnerUserId="21747" LastActivityDate="2019-06-07T02:08:32.927" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18904" PostTypeId="2" ParentId="18892" CreationDate="2019-06-07T05:05:12.610" Score="2" Body="&lt;p&gt;Your code looks good, the device is probably sending you back bytes so you need to read them on the port. Adding to what you have, it would look something like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;import serial&#xA;import time&#xA;&#xA;ser = serial.Serial(&quot;COM7&quot;, 115200) # open serial port&#xA;print(ser.name) # check which port was really used&#xA;ser.write(bytearray([128, 131, 135]))&#xA;print (&quot;commands sent&quot;)&#xA;&#xA;start_time = time.time()&#xA;while time.time()-start_time &amp;lt; 10:&#xA;    if ser.inWaiting() &amp;gt; 0:&#xA;        incomming_byte = ser.read()&#xA;        print(incomming_byte),      #Prints bytes interpreted as ascii/char values&#xA;        #print(ord(incomming_byte)) #Prints bytes interpreted as decimal values&#xA;&#xA;ser.close()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This will loop for 10 seconds checking to see if any bytes are in the serial buffer, and if there is, then it will read the bytes. The comma after the print statement should print all the bytes on the same line as opposed to on multiple new lines. The second print statement is commented out so it wont run, but I put it there in case you wanted to get decimal values back.&lt;/p&gt;&#xA;" OwnerUserId="14923" LastActivityDate="2019-06-07T05:05:12.610" CommentCount="15" ContentLicense="CC BY-SA 4.0" />
  <row Id="18905" PostTypeId="1" CreationDate="2019-06-08T05:37:50.713" Score="2" ViewCount="50" Body="&lt;p&gt;I am new to particle filters and I have a particle filter based on this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$x_{k+1} = f_{k}(x_{k},\omega_{k})$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$y_{k+1} = h_{k}(x_{k},v_{k})$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$x = [\delta \phi, \delta \theta, \delta \psi, \delta v_n, \delta v_e, \delta v_d, \delta L, \delta \lambda, \delta h, \delta b_{ax}, \delta b_{ay}, \delta b_{az}, \delta b_{gx}, \delta b_{gy},\delta b_{gz}] $$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$\tilde x = [\tilde \phi, \tilde \theta, \tilde \psi, \tilde v_n, \tilde v_e, \tilde v_d, \tilde L, \tilde \lambda, \tilde h, \tilde f_{x}, \tilde f_{y}, \tilde f_{z},\tilde w_{x}, \tilde w_{y}, \tilde w_{z}] $$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$ \delta x = \tilde x - x$$&lt;/span&gt;&#xA;Where:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\tilde x$&lt;/span&gt; is the indicated parameter and &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; is the true parameter. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; = the state being from left to right, the errors in roll, pitch, yaw, velocity north, velocity east, velocity down, latitude, longitude, altitude, accelerometer bias body frame x y z, gyro bias body frame x y z. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\tilde x$&lt;/span&gt; = the parameters, from left to right, the roll, pitch, yaw, velocity north, velocity east, velocity down, latitude, longitude, altitude, accelerometer reading of specific force in body frame x y z, gyroscope reading of angular velocity in body frame x y z. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$k$&lt;/span&gt; = the time index&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\omega_{k}$&lt;/span&gt; is the process noise (zero mean, white noise with known pdf) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$y_k$&lt;/span&gt; is the measurement&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$v_k$&lt;/span&gt; is the measurement noise (zero mean, white noise with known pdf). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The functions &lt;span class=&quot;math-container&quot;&gt;$f_k(.)$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$h_k ( . )$&lt;/span&gt; are&#xA;time-varying nonlinear system and measurement equations. The noise sequences&#xA;&lt;span class=&quot;math-container&quot;&gt;$\omega_k$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$v_k$&lt;/span&gt; are assumed to be independent and white with known pdf’s.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, take the latitude error model:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$ \dot \delta L =  \frac {\delta V_n} {(\tilde R_e + \tilde h)} - \frac { \tilde V_n} {(\tilde R_e + \tilde  h)}^2 \delta h$$&lt;/span&gt;&#xA;and the height parameter:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$ \tilde h_{k} = \tilde  h_{k-1} - \frac {t}{2}(\tilde  v_{d(k)}+ \tilde  v_{d(k-1)}) $$&lt;/span&gt;&#xA;Where &lt;span class=&quot;math-container&quot;&gt;$t$&lt;/span&gt; is the discrete time interval between predictions and &lt;span class=&quot;math-container&quot;&gt;$\tilde R_e$&lt;/span&gt; is a function of &lt;span class=&quot;math-container&quot;&gt;$\tilde L$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\tilde h$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Questions: &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;How do the steps of the particle filter change when the state is an error state?&lt;/li&gt;&#xA;&lt;li&gt;Do the particles change the parameters and if so how and when?&lt;/li&gt;&#xA;&lt;li&gt;Do I have a set of parameters for each particle or one set of parameters which are separate to the particles?&lt;/li&gt;&#xA;&lt;li&gt;Should I predict my parameters forwards or my parameters minus&#xA;particles forwards?&lt;/li&gt;&#xA;&lt;li&gt;Do I ever minus the weighted mean of the particles from the particles for each state except bias?&lt;/li&gt;&#xA;&lt;li&gt;When predicting the velocity parameter forwards, this requires the use of the accelerometer's specific force. it is a good idea to minus the bias first? If so, do I use the weighted mean of the accelerometer bias state of the particles?&lt;/li&gt;&#xA;&lt;li&gt;Do I use the model to predict the parameters and then the particles or the other way around?&lt;/li&gt;&#xA;&lt;li&gt;Is this the latitude error model in discrete:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$ \delta L_k = \delta L_{k-1} + (\frac {\delta V_n} {(\tilde R_e + \tilde h)} - \frac { \tilde V_n} {(\tilde R_e + \tilde  h)}^2 \delta h)t$$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="23171" LastActivityDate="2019-06-08T05:37:50.713" Title="Particle filter with error states" Tags="&lt;navigation&gt;&lt;particle-filter&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18906" PostTypeId="1" CreationDate="2019-06-09T19:15:03.753" Score="2" ViewCount="192" Body="&lt;p&gt;When setting up an optimal control problem using a linear quadratic regulator, one often chooses semi-definite matrices Q and R such that the objective function J has the form  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$J=\int_{t_0}^{t_f}(x^TQx+u^TRu)dt$$&lt;/span&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can see how choosing Q and R as diagonal matrices is advantageous because they make the drive the state x and control values to be as small as possible (close to zero).  I also understand that a positive definite or semi definite matrix can also (at least in principle) be used because it would make the objective function essentially still a convex parabola whose minimum is still a single point, which also helps to drive the state and controls to be as small as possible.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In practice, I can’t think of a situation where a non-diagonal semi definite matrix would be better than a diagonal one for an LQR control problem.  What kinds of problems/ situations make it more advantageous to choose off-diagonal entries of Q and R to be non-zero? I want to be able to identify situations that may come up in my work where this might be necessary, so I’m more interested in guiding principles rather than individual situations or exceptions.&lt;/p&gt;&#xA;" OwnerUserId="2295" LastEditorUserId="2295" LastEditDate="2019-06-09T22:25:35.637" LastActivityDate="2019-07-10T03:03:20.397" Title="When are non-diagonal matrices advantageous for linear quadratic regulators?" Tags="&lt;control&gt;&lt;dynamics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18907" PostTypeId="1" CreationDate="2019-06-09T19:50:48.550" Score="0" ViewCount="378" Body="&lt;p&gt;In this section, you will need to write a function lynx_fk which returns the positions of 10 points along the robot arm as defined later, given the joint angles of the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For this question, please solve the forward kinematics of the robot using the frames as given below. The figure below shows the robot in its 'zero pose', i.e., making all joint angles 0 places the robot in this pose. Consider frame 0 to be the world frame. Also,  are facing into the plane and away from you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/e23y1.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/e23y1.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Input Format are the joint angles in radian, as shown in the figure&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Output Format:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;pos is a 10x3 matrix where each row contains the x,y,z coordinates represented as [x y z] in matrix form.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each row is the x,y,z coordinates of a point in world frame (frame 0)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first 5 rows must contain:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Position of frame 0 in world frame&lt;/li&gt;&#xA;&lt;li&gt;Position of frame 1 in world frame&lt;/li&gt;&#xA;&lt;li&gt;Position of frame 2 in world frame&lt;/li&gt;&#xA;&lt;li&gt;Position of frame 3 in world frame&lt;/li&gt;&#xA;&lt;li&gt;Position of frame 4 in world frame&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The next 5 rows are used to describe the gripper (green dots shown in the figure above)&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;6&quot;&gt;&#xA;&lt;li&gt;[0 0 -e] of frame 5 in world frame&lt;/li&gt;&#xA;&lt;li&gt;[g/2 0 -e] of frame 5 in world frame&lt;/li&gt;&#xA;&lt;li&gt;[-g/2 0 -e] of frame 5 in world frame&lt;/li&gt;&#xA;&lt;li&gt;[g/2 0 0] of frame 5 in world frame&lt;/li&gt;&#xA;&lt;li&gt;[-g/2 0 0] of frame 5 in world frame&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;My Code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;function [pos] = lynx_fk(theta1, theta2, theta3, theta4, theta5, g)&#xA;&#xA;    pos = zeros(10, 3);&#xA;&#xA;    A01 = compute_dh_matrix(0,     -pi/2, 3,     theta1);&#xA;    A12 = compute_dh_matrix(5.75,   0,    0,     theta2);&#xA;    A23 = compute_dh_matrix(7.375,  0,    0,     theta3);&#xA;    A34 = compute_dh_matrix(0,     -pi/2, 3,     theta4);&#xA;    A45 = compute_dh_matrix(0,      0,    4.125, theta5);&#xA;&#xA;    L0 = [0;     0; 0;    1];&#xA;    L1 = [0;     0; 3;    1];&#xA;    L2 = [0;     0; 8.75; 1];&#xA;    L3 = [7.375; 0; 8.75; 1];&#xA;    L4 = [7.375; 0; 8.75; 1];&#xA;    L5 = [11.5;  0; 8.75; 1];&#xA;&#xA;    pos(1,:) = [0,0,0];&#xA;    posi2 = (A01 * L1).';&#xA;    posi3 = ((A01*A12)* L2).';&#xA;    posi4 = ((A01*A12*A23) * L3).';&#xA;    posi5 = ((A01*A12*A23*A34) * L4).';&#xA;&#xA;    pos(2,:) = posi2(:,1:3);&#xA;    pos(3,:) = posi3(:,1:3);&#xA;    pos(4,:) = posi4(:,1:3);&#xA;    pos(5,:) = posi5(:,1:3);&#xA;&#xA;    posi5 = ((A01*A12*A23*A34*A45) * L5).';&#xA;    pos5 = posi5(:,1:3);&#xA;&#xA;    pos(6,:)  = pos5 - [ 1.125, 0, 0];&#xA;    pos(7,:)  = pos5 + [-1.125, 0, g/2];&#xA;    pos(8,:)  = pos5 - [ 1.125, 0, g/2];&#xA;    pos(9,:)  = pos5 + [ 0,     0, g/2];&#xA;    pos(10,:) = pos5 - [ 0,     0, g/2];&#xA;&#xA;    pos&#xA;&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The DH matrix is returned with the following function:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;function A = compute_dh_matrix(r, alpha, d, theta)&#xA;&#xA;    A = eye(4);&#xA;&#xA;    dh_ct = cos(theta);&#xA;    dh_st = sin(theta);&#xA;    dh_ca = cos(alpha);&#xA;    dh_sa = sin(alpha);&#xA;    dh_r = r;&#xA;    dh_d = d;&#xA;&#xA;    A(1) =  dh_ct;&#xA;    A(5) = -dh_st*dh_ca;&#xA;    A(9) =  dh_st*dh_sa;&#xA;    A(13) = dh_r*dh_ct;&#xA;&#xA;    A(2) =   dh_st;&#xA;    A(6) =   dh_ct*dh_ca;&#xA;    A(10) = -dh_ct*dh_sa;&#xA;    A(14) =  dh_r*dh_st;&#xA;&#xA;    A(3) =  0;&#xA;    A(7) =  dh_sa;&#xA;    A(11) = dh_ca;&#xA;    A(15) = dh_d;&#xA;&#xA;    A(4) =  0;&#xA;    A(8) =  0;&#xA;    A(12) = 0;&#xA;    A(16) = 1;&#xA;&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The code for computation of DH matrix is correct, as it was checked previously. I suspect there might be a mistake in my DH values I found (which I found using right hand rule). Or there might be a problem in the rest of the code. Please help me debug or find my error.&lt;/p&gt;&#xA;" OwnerUserId="23155" LastEditorUserId="9720" LastEditDate="2019-06-10T13:49:28.883" LastActivityDate="2020-03-21T15:03:00.487" Title="Matlab Code for Lynx Robot" Tags="&lt;matlab&gt;&lt;dh-parameters&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18908" PostTypeId="2" ParentId="16146" CreationDate="2019-06-09T20:47:14.007" Score="-4" Body="&lt;p&gt;How to, article!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.linkedin.com/pulse/sensor-fusion-jose-r-f-junior&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sensor Fusion, Published on June 5, 2019 by Jose R.F Junior (Machine Learning Engineer)&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="23186" LastEditorUserId="37" LastEditDate="2019-06-10T10:21:46.627" LastActivityDate="2019-06-10T10:21:46.627" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18909" PostTypeId="5" CreationDate="2019-06-10T01:09:10.630" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2019-06-10T01:09:10.630" LastActivityDate="2019-06-10T01:09:10.630" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18910" PostTypeId="4" CreationDate="2019-06-10T01:09:10.630" Score="0" Body="Finding a sequence of actions to reach or to approximate a desired goal." OwnerUserId="6890" LastEditorUserId="6890" LastEditDate="2019-06-10T10:26:03.513" LastActivityDate="2019-06-10T10:26:03.513" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18911" PostTypeId="2" ParentId="17917" CreationDate="2019-06-10T01:48:14.713" Score="-2" Body="&lt;p&gt;In addition to previous answers which I agree with, try a FOC ESC, expensive yes, but less noise and vibration.&lt;/p&gt;&#xA;" OwnerUserId="23189" LastEditorUserId="9176" LastEditDate="2019-06-10T23:45:30.367" LastActivityDate="2019-06-10T23:45:30.367" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18912" PostTypeId="2" ParentId="18906" CreationDate="2019-06-10T02:08:27.403" Score="2" Body="&lt;p&gt;In general it not meaning full to say that a diagonal &lt;span class=&quot;math-container&quot;&gt;$Q$&lt;/span&gt; is advantageous, since one can always perform a &lt;a href=&quot;https://lpsa.swarthmore.edu/Representations/SysRepTransformations/SS2SS.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;similarity transformation to the state space model&lt;/a&gt; (&lt;span class=&quot;math-container&quot;&gt;$x_\text{new}=T\,x$&lt;/span&gt;) which would make the effective &lt;span class=&quot;math-container&quot;&gt;$Q$&lt;/span&gt; (&lt;span class=&quot;math-container&quot;&gt;$x^\top Q\,x = x_\text{new}^\top T^{-\top} Q\,T^{-1} x_\text{new}$&lt;/span&gt;, so the effective &lt;span class=&quot;math-container&quot;&gt;$Q$&lt;/span&gt; would be &lt;span class=&quot;math-container&quot;&gt;$T^{-\top} Q\,T^{-1}$&lt;/span&gt;) for the new state coordinates non-diagonal. In other words given any non-diagonal semi-positive definite &lt;span class=&quot;math-container&quot;&gt;$Q$&lt;/span&gt; there is always a similarity transformation which would make the effective &lt;span class=&quot;math-container&quot;&gt;$Q$&lt;/span&gt; for the new state coordinates diagonal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for &lt;span class=&quot;math-container&quot;&gt;$R$&lt;/span&gt; it would depend on what you would like to minimize. For example if &lt;span class=&quot;math-container&quot;&gt;$u$&lt;/span&gt; represents two parallel actuators and you want to minimize their combined force. This can be written as &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;(w_1\,u_1 + w_2\,u_2)^2 = u^\top&#xA;\begin{bmatrix}&#xA;w_1^2 &amp;amp; w_1\,w_2 \\ w_1\,w_2 &amp;amp; w_2^2&#xA;\end{bmatrix} u,&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;with &lt;span class=&quot;math-container&quot;&gt;$w_1,w_2$&lt;/span&gt; some weights. Though normally &lt;span class=&quot;math-container&quot;&gt;$R$&lt;/span&gt; should be positive definite (not just semi-positive definite), so one would have to add some additional term to ensure this, but this should illustrate how one could get to an non-diagonal &lt;span class=&quot;math-container&quot;&gt;$R$&lt;/span&gt;.&lt;/p&gt;&#xA;" OwnerUserId="1487" LastActivityDate="2019-06-10T02:08:27.403" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18913" PostTypeId="1" CreationDate="2019-06-10T02:44:28.703" Score="2" ViewCount="173" Body="&lt;p&gt;I'm new to ROS and robotics and I'm trying to implement the ROS navigation stack in a 3 wheeled omnidirectional robot. I already made the map using RTABMap but now I'm stuck in the 'Publishing Odometry Information over ROS' step. Currently the robot ouputs odometry data in geometry_msgs/Pose2D (&lt;a href=&quot;http://docs.ros.org/kinetic/api/geometry_msgs/html/msg/Pose2D.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://docs.ros.org/kinetic/api/geometry_msgs/html/msg/Pose2D.html&lt;/a&gt;) format.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are some of the codes compiled in STM32:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;//Calculate Odometry&#xA;void calculate_odometry(void)&#xA;{&#xA;    short int odometry0_speed = odometry0;&#xA;    odometry0 = 0;&#xA;    short int odometry1_speed = odometry1;&#xA;    odometry1 = 0;&#xA;&#xA;    float buffer_x[2];&#xA;    float buffer_y[2];&#xA;&#xA;    buffer_x[0] = odometry0_speed * cosf(gyro_radian + 0.785398);&#xA;    buffer_x[1] = odometry1_speed * cosf(gyro_radian + 2.356190);&#xA;&#xA;    buffer_y[0] = odometry0_speed * sinf(gyro_radian + 0.785398);&#xA;    buffer_y[1] = odometry1_speed * sinf(gyro_radian + 2.356190);&#xA;&#xA;    x_buffer_position += (buffer_x[0] + buffer_x[1]) * odometry_to_cm;&#xA;    y_buffer_position -= (buffer_y[0] + buffer_y[1]) * odometry_to_cm;&#xA;&#xA;    x_position = x_buffer_position - x_offset_position;&#xA;    y_position = y_buffer_position - y_offset_position;&#xA;}&#xA;&#xA;//RECEIVE data FROM gyro&#xA;void DMA1_Stream1_IRQHandler(void)&#xA;{&#xA;    if (DMA_GetITStatus(DMA1_Stream1, DMA_IT_TCIF1))&#xA;    {&#xA;        if (gyro_status == RESET)&#xA;        {&#xA;            gyro_status = SET;&#xA;            buzzer(22, 22);&#xA;        }&#xA;&#xA;        memcpy(&amp;amp;gyro_buffer, gyro_receive + 3, 4);&#xA;&#xA;        gyro_angle = (gyro_offset - gyro_buffer);&#xA;        gyro_radian = (gyro_offset - gyro_buffer) * 0.01745329252;&#xA;&#xA;        while (gyro_angle &amp;gt; 180)&#xA;            gyro_angle -= 360;&#xA;        while (gyro_angle &amp;lt; -180)&#xA;            gyro_angle += 360;&#xA;&#xA;        while (gyro_radian &amp;gt; 3.14159265359)&#xA;            gyro_radian -= 6.28318530718;&#xA;        while (gyro_radian &amp;lt; -3.14159265359)&#xA;            gyro_radian += 6.28318530718;&#xA;&#xA;        USART_DMACmd(USART3, USART_DMAReq_Rx, DISABLE);&#xA;        USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);&#xA;&#xA;        DMA_ClearITPendingBit(DMA1_Stream1, DMA_IT_TCIF1);&#xA;    }&#xA;}&#xA;&#xA;//ROS SUBSCRIBER CALLBACK&#xA;void cllbck_sub_velocity(const geometry_msgs::Twist &amp;amp;msg)&#xA;{&#xA;    x_velocity = msg.linear.x;&#xA;    y_velocity = msg.linear.y;&#xA;    angular_velocity = msg.angular.z;&#xA;&#xA;    motor_timer = 0;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The gyro data is from GY-521 + Arduino.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From these code I should be able to get&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;x -&amp;gt; x_position          dx -&amp;gt; x_velocity&#xA;y -&amp;gt; y_position          dy -&amp;gt; y_velocity&#xA;A -&amp;gt; gyro_angle          ω -&amp;gt; angular_velocity&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;right?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And then how can I publish the data in nav_msgs/Odometry (&lt;a href=&quot;http://docs.ros.org/kinetic/api/nav_msgs/html/msg/Odometry.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://docs.ros.org/kinetic/api/nav_msgs/html/msg/Odometry.html&lt;/a&gt;) format? Do I have all the data I need correctly?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Should I use the code in &lt;a href=&quot;http://wiki.ros.org/navigation/Tutorials/RobotSetup/Odom&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://wiki.ros.org/navigation/Tutorials/RobotSetup/Odom&lt;/a&gt;, what need to be changed or included in the code?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or can I do autonomous navigation by only using visual odometry from RTABMap?&lt;/p&gt;&#xA;" OwnerUserId="23190" LastActivityDate="2019-06-10T02:44:28.703" Title="How to publish odometry from 3 wheeled omnidirectional robot?" Tags="&lt;navigation&gt;&lt;gyroscope&gt;&lt;odometry&gt;&lt;movement&gt;&lt;visual-odometry&gt;" AnswerCount="0" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18914" PostTypeId="1" CreationDate="2019-06-10T10:58:32.683" Score="0" ViewCount="95" Body="&lt;p&gt;In many real-time PID control loop application I have seen that the control loop is triggered exactly as the ADC interrupts arrives in order to achieve maximum synchronization between feedback conversion and control loop execution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am in a situation where it would be better to have the control loop triggered by a timer interrupt so that it can be indipendent from how the feedback is acquired, for example:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Capacitive encoder read through ADC -&gt; interrupts;&lt;/li&gt;&#xA;&lt;li&gt;Hall absolute encoder read through I2C -&gt; no interrupts;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;In the first case I have a sample available each 4ms. How fast the control loop should be triggered? What are the drawbacks of this implementation? Is it possible to take this issue into account when modeling the digital control system?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you for your time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit 1:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yes I am controlling a motor that can use different kind of encoders (one at time). Each encoder implements the same software interface so that I can keep motor logic indipendent from encoder internals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit 2:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/9TIZu.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9TIZu.png&quot; alt=&quot;Sampled feedback&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The rising edges in the image are the instants the feedback is sampled and thus made available by ADC interrupts. The sampling period is 4ms.&#xA;Assuming the control loop executes its calculation in the same time as the sampling period, what happens if the control loop interrupt is triggered late in respect to the ADC interrupt?&lt;/p&gt;&#xA;" OwnerUserId="23191" LastEditorUserId="23191" LastEditDate="2019-06-11T09:46:33.300" LastActivityDate="2020-03-27T21:27:37.053" Title="PID control loop and feedback acquisition synchronization" Tags="&lt;control&gt;&lt;pid&gt;&lt;real-time&gt;&lt;embedded-systems&gt;&lt;interrupts&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18915" PostTypeId="2" ParentId="18907" CreationDate="2019-06-10T14:18:46.677" Score="1" Body="&lt;p&gt;I edited your post to clean up some of the formatting. I'll go over some glaring issues I see in the post, but if you're looking for really precise troubleshooting then you need to &lt;em&gt;edit your question&lt;/em&gt; to post &lt;strong&gt;why&lt;/strong&gt; you think the code you have isn't working correctly - i.e., you have an input, your code gives you an output, and you were expecting some other answer. Seeing what portions are correct and what aren't, etc. can help to narrow down the suspect code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, I think a lot of bugs are now apparent after having cleaned up the code. Neatness and readability counts for a lot! I it's hard to look at your code, it's hard to find the bug. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For instance:&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Problem 1.&lt;/h1&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;A01 = compute_dh_matrix(0,     -pi/2, 3,     theta1);&#xA;A12 = compute_dh_matrix(5.75,   0,    0,     theta2);&#xA;A23 = compute_dh_matrix(7.375,  0,    0,     theta3);&#xA;A34 = compute_dh_matrix(0,     -pi/2, 3,     theta4);&#xA;A45 = compute_dh_matrix(0,      0,    4.125, theta5);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If you read down the columns now, you can quickly compare parameters with your drawing. Notice the &lt;code&gt;A34&lt;/code&gt; line?&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;A34 = compute_dh_matrix(0,     -pi/2, 3,     theta4);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But it looks like frames 3 and 4 are coincident! Why is there a distance of &lt;code&gt;3&lt;/code&gt; between them?&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Problem 2.&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;You seem to be misunderstanding how to use the frame transforms. You have the starting positions hard-coded in your &lt;code&gt;lynx_fk&lt;/code&gt; function. This shouldn't be necessary. If you want to know the position of a point in Frame 1 with respect to the world (Frame 0), then you transform that point to world coordinates with the &lt;code&gt;A01&lt;/code&gt; transform:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;pt_world = A01 * pt_frame1;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This chains - if you want to know how a point in Frame 2 is described in Frame 1, then you do the following:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;pt_frame1 = A12 * pt_frame2;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And you can see then that, to express that point in world coordinates, you go:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;pt_world = A01 * pt_frame1;&#xA;pt_world = A01 * (A12 * pt_frame2);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You can keep going on:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;pt_world = A01 * A12 * ... * A_N_Nplus1 * pt_frameNplus1;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If you want to know where the frame origins are located in world coordinates, then you would do something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;frame1_worldCoordinates = A01 * [0; 0; 0; 1];&#xA;frame2_worldCoordinates = A01 * A12 * [0; 0; 0; 1];&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and so on. You can take those outputs and compare against your drawing and see where you're going wrong. &lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Problem 3.&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;You're overwriting &lt;code&gt;pos5&lt;/code&gt;. I'm not going to say which way is correct, but your code has:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;posi5 = ((A01*A12*A23*A34) * L4).';&#xA;&amp;lt;...&amp;gt;&#xA;pos(5,:) = posi5(:,1:3);&#xA;&#xA;posi5 = ((A01*A12*A23*A34*A45) * L5).';&#xA;pos5 = posi5(:,1:3);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;As stated above, neither will give you the location of the Frame 5 origin in world coordinates; that would need &lt;code&gt;(list of transforms) * [0; 0; 0; 1]&lt;/code&gt;. &lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Problem 4.&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;When you try to find the end effector locations, you don't have the positions in the correct columns. You have:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;pos(6,:)  = pos5 - [ 1.125, 0, 0];&#xA;pos(7,:)  = pos5 + [-1.125, 0, g/2];&#xA;pos(8,:)  = pos5 - [ 1.125, 0, g/2];&#xA;pos(9,:)  = pos5 + [ 0,     0, g/2];&#xA;pos(10,:) = pos5 - [ 0,     0, g/2];&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Which, when you distribute the negatives, is equivalent to:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;pos(6,:)  = pos5 + [-1.125, 0,  0];&#xA;pos(7,:)  = pos5 + [-1.125, 0,  g/2];&#xA;pos(8,:)  = pos5 + [-1.125, 0, -g/2];&#xA;pos(9,:)  = pos5 + [ 0,     0,  g/2];&#xA;pos(10,:) = pos5 + [ 0,     0, -g/2];&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But you're supposed to have:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[ 0   0 -e] of frame 5 in world frame&#xA;[ g/2 0 -e] of frame 5 in world frame&#xA;[-g/2 0 -e] of frame 5 in world frame&#xA;[ g/2 0  0] of frame 5 in world frame&#xA;[-g/2 0  0] of frame 5 in world frame&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This is probably because you're compensating for:&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Problem 5.&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;You're not converting the end effector locations to world coordinates. Just like Problem 2 says, if you want to convert a point from a particular frame to world coordinates, step through the transforms from the &lt;em&gt;local expression&lt;/em&gt; of that point to each subsequent parent frame until you've arrived at the world coordinate frame. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, for example, &lt;code&gt;[0 0 -e] of frame 5 in world frame&lt;/code&gt;. To find the &lt;em&gt;origin&lt;/em&gt; of Frame 5, you take a Frame 5 point that is located at the origin (&lt;code&gt;[0; 0; 0]&lt;/code&gt;) and pass it through the sequence of transforms to get back to world coordinates. You do the same thing here, but with &lt;code&gt;[0; 0; -e]&lt;/code&gt;, etc., to get the expression for &lt;em&gt;those&lt;/em&gt; points in world coordinates. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you can fix all of these problems and you're still having issues, please &lt;em&gt;edit your question&lt;/em&gt; to provide your updated code, a sample input, the output of your function for the sample input, and the output you expected to get for your sample input.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The best hint I can give you is that, if you have your DH values correct and everything is working correctly, then passing all zeros for the &lt;code&gt;thetaN&lt;/code&gt; values should give you the general arrangement drawing you've provided in your original post. You shouldn't have to hard-code anything except the DH parameters in the &lt;code&gt;lynx_fk&lt;/code&gt; code. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2019-06-10T14:18:46.677" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18916" PostTypeId="2" ParentId="18914" CreationDate="2019-06-10T14:22:59.660" Score="1" Body="&lt;p&gt;This kind of control situation in general Nyquist method is used, In your first if your sampling period is 4&amp;nbsp;ms, your sampling frequency is 250&amp;nbsp;Hz, so you can control event maximum 125&amp;nbsp;Hz or another saying 8&amp;nbsp;ms of sampling period. But it is only for starting, if your sensor values very volatile you would make your period much longer. But I can say 8&amp;nbsp;ms is the minimum.&lt;/p&gt;&#xA;" OwnerUserId="10928" LastEditorUserId="9176" LastEditDate="2019-06-10T23:43:43.240" LastActivityDate="2019-06-10T23:43:43.240" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18917" PostTypeId="1" AcceptedAnswerId="18920" CreationDate="2019-06-10T21:38:24.350" Score="1" ViewCount="486" Body="&lt;p&gt;I'm in the process of writing an action cpp file and the client side seems to be stuck waiting for the server to start and I'm not quite sure why.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's the code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;&#xA;#include &amp;lt;std_msgs/String.h&amp;gt;&#xA;&#xA;#include &amp;lt;ros/ros.h&amp;gt;&#xA;#include &amp;lt;actionlib/server/simple_action_server.h&amp;gt;&#xA;#include &amp;lt;actionlib/client/simple_action_client.h&amp;gt;&#xA;&#xA;#include &amp;lt;mavros_msgs/SetMode.h&amp;gt;&#xA;#include &amp;lt;mavros_msgs/CommandBool.h&amp;gt;&#xA;&#xA;#include &amp;lt;rovexp/ModeAction.h&amp;gt;&#xA;&#xA;typedef actionlib::SimpleActionServer&amp;lt;rovexp::ModeAction&amp;gt; Server;&#xA;&#xA;class ModeActionServer {&#xA;&#xA;protected:&#xA;ros::NodeHandle nh_;&#xA;&#xA;ros::ServiceClient arming_client_;&#xA;ros::ServiceClient set_mode_client_;&#xA;&#xA;Server mode_server_;&#xA;&#xA;rovexp::ModeFeedback feedback_;&#xA;rovexp::ModeResult result_;&#xA;std::string action_name_;&#xA;public:&#xA;ModeActionServer(std::string name) :&#xA;    mode_server_(nh_, name, boost::bind(&amp;amp;ModeActionServer::executeCB, this, _1), false),&#xA;    action_name_(name)&#xA;{&#xA;    mode_server_.start();&#xA;    ROS_INFO(&quot;Mode action server started...&quot;);&#xA;}&#xA;~ModeActionServer(void) { }&#xA;&#xA;void executeCB(const rovexp::ModeGoalConstPtr &amp;amp;goal)&#xA;{&#xA;    ROS_INFO_STREAM(&quot;mode experiment started...&quot;);&#xA;&#xA;    /*&#xA;    set_mode_client_ = nh_.serviceClient&amp;lt;mavros_msgs::SetMode&amp;gt;(&quot;mavros/set_mode&quot;);&#xA;    mavros_msgs::SetMode offb_set_mode;&#xA;    offb_set_mode.request.custom_mode = goal-&amp;gt;mode_num;&#xA;&#xA;    set_mode_client_.call(offb_set_mode);&#xA;    */&#xA;&#xA;    arming_client_ = nh_.serviceClient&amp;lt;mavros_msgs::CommandBool&amp;gt;(&quot;mavros/cmd/arming&quot;);&#xA;    ros::Rate rate(20.0);&#xA;    mavros_msgs::CommandBool arm_cmd;&#xA;    arm_cmd.request.value = true;&#xA;    arming_client_.call(arm_cmd);&#xA;}&#xA;};&#xA;&#xA;typedef actionlib::SimpleActionClient&amp;lt;rovexp::ModeAction&amp;gt; Client;&#xA;&#xA;void modeActionClient(uint8_t mode_num)&#xA;&#xA;{&#xA;Client client(&quot;mode_client&quot;, true);&#xA;&#xA;ROS_INFO(&quot;Waiting for action server to start&quot;);&#xA;client.waitForServer();&#xA;&#xA;rovexp::ModeGoal goal;&#xA;goal.mode_num = mode_num;&#xA;printf(&quot;%d\t4\n&quot;,goal.mode_num);&#xA;client.sendGoal(goal);&#xA;&#xA;client.waitForResult();&#xA;}&#xA;&#xA;int main(int argc, char**argv)&#xA;{&#xA;if(std::string(argv[1])==&quot;-server&quot;)&#xA;{&#xA;  ros::init(argc, argv, &quot;mode_server&quot;);&#xA;  ModeActionServer server(&quot;mode_server&quot;);&#xA;  //server.start();&#xA;  ros::spin();&#xA;&#xA;}&#xA;else if(std::string(argv[1])==&quot;-client&quot;)&#xA;{&#xA;    if ( std::string(argv[2])==&quot;-h&quot; ) {&#xA;        printf(&quot;Use: rosrun rovexp mode -client @mode\n&quot;); &#xA;        exit(-1);&#xA;    }&#xA;    ros::init(argc, argv, &quot;mode_action_client&quot;);&#xA;    uint8_t mode_num = atoi(argv[2]);&#xA;    modeActionClient(mode_num);&#xA;}&#xA;printf(&quot;done\n&quot;);   &#xA;return 0;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The terminal will output &quot;Mode action server started...&quot; and &quot;Waiting for action server to start&quot; but never gets to &quot;mode experiment started...&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So it would seem that the client gets stuck on&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;client.waitForServer();&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;A lot of what I've done was inspired by a ROS tutorial (&lt;a href=&quot;https://wiki.ros.org/actionlib_tutorials/Tutorials/RunningServerAndClient&quot; rel=&quot;nofollow noreferrer&quot;&gt;link&lt;/a&gt;) and there's works fine on my pc. Having a hard time seeing the difference.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm running ubuntu 16.04LTS and ROS kinetic.&lt;/p&gt;&#xA;" OwnerUserId="23193" LastActivityDate="2019-11-08T20:01:20.183" Title="Action client waiting forever for server to start" Tags="&lt;ros&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18918" PostTypeId="1" AcceptedAnswerId="18919" CreationDate="2019-06-10T21:39:46.230" Score="1" ViewCount="91" Body="&lt;p&gt;Essentially every cobot I've worked with uses BLDCs instead of stepper motors in the joints.  When searching for answers as to why I see a lot of posts that suggest one or the other, but nothing explains the consistent trend in the industry.  The closest I've come to an answer is that stepper motors are worse with dynamic loads, but I don't understand why.  Steppers have much higher precision due to their detant torque, so it seems like they should win out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If anyone could help point me in the right direction I would greatly appreciate it.&lt;/p&gt;&#xA;" OwnerUserId="23192" LastActivityDate="2019-06-15T11:00:59.190" Title="Why are brushless servos more common than steppers in Cobots?" Tags="&lt;stepper-motor&gt;&lt;brushless-motor&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18919" PostTypeId="2" ParentId="18918" CreationDate="2019-06-11T00:09:51.803" Score="1" Body="&lt;ol&gt;&#xA;&lt;li&gt;Size for size, steppers are wimpy compared to brushless (feel free to look at some catalogs and check; be sure to compare both torque and maximum RPM, because a motor can always be geared).&lt;/li&gt;&#xA;&lt;li&gt;Without fancy electronics, steppers are run open-loop.  When they get lost, their average torque goes to zero.  I would not want that close to my face if it happened.&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;With fancy electronics, a stepper may as well be a brushless.  A wimpy brushless.&lt;/li&gt;&#xA;&lt;/ol&gt;&lt;/li&gt;&#xA;&lt;li&gt;As long as position feedback is used and it's not limited by sticktion, a brushless can attain precision proportional to the accuracy of the feedback.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="1411" LastActivityDate="2019-06-11T00:09:51.803" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18920" PostTypeId="2" ParentId="18917" CreationDate="2019-06-11T14:13:53.330" Score="1" Body="&lt;p&gt;You need to use the same topics for the master and the client. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Client client(&quot;mode_client&quot;, true);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;starts a client that looks for a server that listens on the &lt;code&gt;~mode_client/goal&lt;/code&gt; topic, but you started the server on &lt;code&gt;~mode_server/goal&lt;/code&gt;. &#xA;Could you run both nodes and add the output of &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;rostopic list&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;to your question?&lt;/p&gt;&#xA;" OwnerUserId="23196" LastEditorUserId="9176" LastEditDate="2019-06-11T19:09:54.697" LastActivityDate="2019-06-11T19:09:54.697" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18921" PostTypeId="1" AcceptedAnswerId="19033" CreationDate="2019-06-11T16:49:15.080" Score="0" ViewCount="161" Body="&lt;p&gt;I'm controlling 6 DOF robot arm based on image processing. Robot arm will grab the object. Below what my system looks&#xA;&lt;a href=&quot;https://i.stack.imgur.com/1gkdA.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1gkdA.png&quot; alt=&quot;Sistem Setup&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can control the translational part of robot very well. But i cant control the rotational part. I mean i want the gripper facing down and rotate according angle of the object. Using jacobian equation&#xA;&lt;span class=&quot;math-container&quot;&gt;\begin{bmatrix}&#xA;dq1 \\ &#xA;... \\ &#xA;dq6&#xA;\end{bmatrix}&lt;/span&gt;= J(q)^{-1}&lt;span class=&quot;math-container&quot;&gt;\begin{bmatrix}&#xA;dx\\ &#xA;dy\\ &#xA;dz\\ &#xA;drx\\ &#xA;dry\\ &#xA;drz&#xA;\end{bmatrix}&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I try using rotational equation from this &lt;a href=&quot;https://pdfs.semanticscholar.org/188d/ca40fa862c5cd574f09ae68e1e4e30852fc5.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;paper&lt;/a&gt; but still no luck, what should i do for rotational part&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note : To generate the jacobian, im using SerialLink.jacob0 from Matlab Robotic Toolbox by Peter Corke&lt;/p&gt;&#xA;" OwnerUserId="22800" LastEditorUserId="21223" LastEditDate="2019-08-03T23:40:14.267" LastActivityDate="2019-08-03T23:40:14.267" Title="Resolved Motion Rate Control, Rotational Part" Tags="&lt;robotic-arm&gt;&lt;jacobian&gt;&lt;dh-parameters&gt;&lt;visual-servoing&gt;&lt;robotics-toolbox&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="18924" PostTypeId="2" ParentId="18649" CreationDate="2019-06-11T19:10:59.660" Score="0" Body="&lt;p&gt;You haven't provided any sample data or your implementation, etc., so it's hard to say for sure, but I would imagine that the signal coming in on your magnetometer is small enough that it's insufficient to set the angle. If your magnetometer readings went to zero, you would effectively have no magnetometer and you would get the same drift you're seeing. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How are you scaling your readings?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You said the magnetometer noise should be in units of &lt;span class=&quot;math-container&quot;&gt;$T$&lt;/span&gt;, but the &lt;a href=&quot;https://www.mathworks.com/help/fusion/ref/ahrsfilter-system-object.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Matlab documentation says otherwise&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/FuDtm.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FuDtm.png&quot; alt=&quot;Matlab documentation for AHRS FUSE&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What units are you passing to the filter? &lt;span class=&quot;math-container&quot;&gt;$T$&lt;/span&gt; or &lt;span class=&quot;math-container&quot;&gt;$\mu T$&lt;/span&gt;? Per the documentation, it should be &lt;span class=&quot;math-container&quot;&gt;$\mu T$&lt;/span&gt;. The expected local strength should also be &lt;span class=&quot;math-container&quot;&gt;$\mu T$&lt;/span&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/mZU48.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/mZU48.png&quot; alt=&quot;Input units&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2019-06-11T19:10:59.660" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18925" PostTypeId="2" ParentId="18719" CreationDate="2019-06-11T21:24:59.773" Score="1" Body="&lt;p&gt;The orientation of the end-effector is obtained by multiplying together the MDH homogeneous transformation matrices for each of the joints.  There are well known algorithms and code implementations to extract roll, pitch, yaw angles from such a homogeneous transformation matrix.  You need to be careful about how you define roll, pitch and yaw angles, there are multiple conventions which is frustrating and confusing to those entering the field.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It doesn't seem particularly useful to go directly from MDH parameters to RPY angles, since in general a robot has more than one joint.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, if you did want to go this path, then just looking at the expression we see that the orientation is a rotation about the x-axis of &lt;span class=&quot;math-container&quot;&gt;$\alpha$&lt;/span&gt; followed by a rotation about the z-axis of &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt;.  The XYZ RPY convention, often used for problems with robot manipulator arms, is defined as an SO(3) rotation &lt;span class=&quot;math-container&quot;&gt;$R = R_x(y) R_y( p) R_z( r)$&lt;/span&gt; so it is clear that &lt;span class=&quot;math-container&quot;&gt;$\alpha$&lt;/span&gt; is the yaw angle, &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt; is the roll angle, and pitch angle is always 0.&lt;/p&gt;&#xA;" OwnerUserId="21223" LastActivityDate="2019-06-11T21:24:59.773" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="18926" PostTypeId="1" CreationDate="2019-06-12T05:30:46.367" Score="3" ViewCount="126" Body="&lt;p&gt;I am a beginner to SLAM and robotics in general and I have been trying to implement SLAM on my GoPiGo3 robot car kit using primarily Chapter 10 from Probabilistic Robotics by Sebastian Thrun as reference. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am using a laser distance sensor attached to a servo that turns only 180°. The sensor itself has a range of 2m. I am able to get the odometry data from the wheel encoders. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am planning to use the RANSAC algorithm for line extraction and landmark detection. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Suppose I detect a landmark and add the global coordinates of the landmark into the state vector. Then, I move some distance and the newly added landmark into the state vector is no longer observable. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this a problem that is accounted for in the EKF SLAM algorithm from the book? Specifically I wish to know how missing landmarks in the new observation affect the transformation function that maps the predicted state to the predicted observation and thus the Jacobian. How will this affect the computation of the Kalman Gain and the measurement update of the state?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it is not feasible to use this algorithm in such a situation, I would appreciate it if someone could point me to the right resources for my implementation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/QlcXD.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QlcXD.png&quot; alt=&quot;k&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="23199" LastEditorUserId="23199" LastEditDate="2019-06-12T05:39:12.710" LastActivityDate="2021-04-10T21:02:55.243" Title="EKF SLAM : Missing older landmarks in new observation" Tags="&lt;slam&gt;&lt;localization&gt;&lt;mapping&gt;&lt;autonomous-car&gt;&lt;probability&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18927" PostTypeId="1" CreationDate="2019-06-12T16:02:19.657" Score="1" ViewCount="92" Body="&lt;p&gt;Assuming no filter is used to measure error (or rate of change in error) with respect to a desired state, would a PI controller more/less/about equally robust to signal input noise compared to a PD controller? And why?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My intuition tells me that they would be about equally bad/good because wild changes in the measured state would generate equally bad spikes in either the I or D terms.  I have, however, read some (probably not reliable) sources alluding to the possibility that PI controllers are generally more robust to noisy measurements than PD controllers.  Is this true? And if it is true, why would a PI controller be more robust to noise than a PD?&lt;/p&gt;&#xA;" OwnerUserId="2295" LastActivityDate="2019-06-12T23:36:24.657" Title="Which controller (PI or PD) is generally more robust to noisy sensor measurements and why?" Tags="&lt;control&gt;&lt;pid&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18928" PostTypeId="2" ParentId="4675" CreationDate="2019-06-12T17:05:49.017" Score="0" Body="&lt;p&gt;I have a suggestion. I have worked some time on px4 controller. For position control, it takes position as input and by feedback (PID) generates desired acceleration. Since quadcopter can generate acce. in Body Z axis , from this preliminary idea u can convert the desired thrust (vector) to attitude command and use the inner loop for attitude controller.&lt;/p&gt;&#xA;" OwnerUserId="23204" LastActivityDate="2019-06-12T17:05:49.017" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18929" PostTypeId="2" ParentId="18927" CreationDate="2019-06-12T20:05:17.817" Score="2" Body="&lt;p&gt;One of those multiplies by the sampling time and one of those divides by the sampling time. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your measurements are varying by, say, +/- 2%, and your control loop is running at 100 Hz, then an integral term gives you output swings of +/- (2% * 0.01) = +/- 0.02%, where a derivative term gives you output swings of +/- (2%/0.01) = +/- 200%. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can see, they do &lt;strong&gt;not&lt;/strong&gt; create equally bad spikes. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2019-06-12T20:05:17.817" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="18930" PostTypeId="2" ParentId="18927" CreationDate="2019-06-12T23:36:24.657" Score="5" Body="&lt;ul&gt;&#xA;&lt;li&gt;Proportional control amplifies equally across all frequencies.&lt;/li&gt;&#xA;&lt;li&gt;Integral action amplifies low frequencies more, and high frequencies less (in fact, its gain at DC is infinite, and at infinite frequency its gain is zero).&lt;/li&gt;&#xA;&lt;li&gt;Differential action amplifies low frequencies less, and high frequencies more (it has zero DC gain and unless its bandlimited, infinite gain at high frequencies).&lt;/li&gt;&#xA;&lt;li&gt;Noise tends to be equally distributed across the frequency band.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So a PD controller will tend to be more sensitive to noise.  Whether it's more robust depends on your situation: there are some plants that can't be satisfactorily controlled without differential action.&lt;/p&gt;&#xA;" OwnerUserId="1411" LastActivityDate="2019-06-12T23:36:24.657" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18931" PostTypeId="1" CreationDate="2019-06-13T04:09:43.837" Score="2" ViewCount="41" Body="&lt;p&gt;I have two degrees of freedom robot with a camera mounted on the tool center point where the system is modeled as &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$^wT_c = {^wT_z}(\theta_1){^zT_m}(\theta_2) {^mT_c}(\textbf{r})$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$\textbf{r} \in SO3$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have to calibrate mount to camera transformation &lt;span class=&quot;math-container&quot;&gt;${^mT_c}$&lt;/span&gt; without the robot joint encoder value which means robot joint angles are parameters to estimate as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I assume that the following values are given.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The rotation axis of each joint &lt;span class=&quot;math-container&quot;&gt;${^wT_z}(\theta_1){^zT_m}(\theta_2)$&lt;/span&gt; is known. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The world reference frame to camera &lt;span class=&quot;math-container&quot;&gt;$^wT_c$&lt;/span&gt; is also known from the camera observation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The rotation axis of each motor in the camera frame &lt;span class=&quot;math-container&quot;&gt;$\textbf{c}_{1,2}$&lt;/span&gt; and in the world frame &lt;span class=&quot;math-container&quot;&gt;$\textbf{v}_{1,2}$&lt;/span&gt; is known.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The constraints that I have tried to estimate &lt;span class=&quot;math-container&quot;&gt;$\textbf{r}$&lt;/span&gt; are &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\textbf{e}_{w_i} = {^wT_c}({^wT_z}(\theta_{1_i}){^zT_m}(\theta_2) {^mT_c}(\textbf{r}))^{-1}$&lt;/span&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\textbf{e}_{v1} = {^wT_z}(\theta_{1_i})_{[1:3,2]}-\textbf{v}_1$&lt;/span&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\textbf{e}_{v2} = ({^wT_z}(\theta_{1_i}){^zT_m}(\theta_{2_i}))_{[1:3,3]}-\textbf{v}_2$&lt;/span&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\textbf{e}_{c1} = {^wT_z}(\theta_{1_i}){^zT_m}(\theta_{2_i}) {^mT_c}(\textbf{r})\textbf{c}_1-\textbf{v}_1$&lt;/span&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\textbf{e}_{c2} = {^wT_z}(\theta_{1_i}){^zT_m}(\theta_{2_i}) {^mT_c}(\textbf{r})\textbf{c}_2-\textbf{v}_2$&lt;/span&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The result of the optimization with simulation data is a bit weird. The estimation of &lt;span class=&quot;math-container&quot;&gt;$\theta_{1_i}$&lt;/span&gt; are correct but not &lt;span class=&quot;math-container&quot;&gt;$\theta_{2_i}$&lt;/span&gt;. &lt;span class=&quot;math-container&quot;&gt;$\theta_{2_i}$&lt;/span&gt; are slightly different from the ground truth values. As a result, &lt;span class=&quot;math-container&quot;&gt;$\textbf{r}$&lt;/span&gt; is slightly different from the ground truth value. The residual of the constraints drops to the reasonable level which was around 5.6179e-17 after 7 iterations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, I guess this is an underconstrained problem but I am not sure what to add to fix the problem. Any idea or thought will be appreciated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: Since the robot joint angles are not known it is not possible to use AX=XB kind of closed-form solution.&lt;/p&gt;&#xA;" OwnerUserId="19219" LastEditorUserId="19219" LastEditDate="2019-06-13T06:03:01.123" LastActivityDate="2019-06-13T06:03:01.123" Title="Robot Hand to Eye calibration without joint encoder" Tags="&lt;calibration&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18935" PostTypeId="2" ParentId="18840" CreationDate="2019-06-13T14:53:48.310" Score="1" Body="&lt;p&gt;This seems like a mTSP (multi traveling salesman problem). &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;Summary:&lt;/strong&gt; The Multiple Traveling Salesman Problem (mTSP) is a generalization of the Traveling Salesman Problem (TSP) in which more than one salesman is allowed. Given a set of cities, one depot where m salesmen are located, and a cost metric, the objective of the mTSP is to determine a tour for each salesman such that the total tour cost is minimized and that each city is visited exactly once by only one salesman.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="21215" LastActivityDate="2019-06-13T14:53:48.310" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18936" PostTypeId="1" CreationDate="2019-06-13T22:11:18.190" Score="0" ViewCount="26" Body="&lt;h1&gt;Summary&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;I am making an automatic door for my chickens including a servo motor. In the process I actually shorted my 5V from my Arduino. The servo is powered by external batteries and only gets its signal by digital pin 9. After the shorting, the servo only wants to go full power 1 way, I can't get it to move the other direction any more. Does somebody know what happened and/or what to do?&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Detail&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;I want to use the servo as motor as a pulley, which will lift a small plastic door with a cord. I hope this will be light enough. I added 2 images of the setup I have made with the wiring, using 2 led to indicate the up (yellow) and down (red) state. The 2 blue leds are to indicate if a button is pressed and is just wired to the 5 V. The buttons are attached to D4 and D5. The servo is connected to D10 is this case and to the 4 batteries. The solar panel is wired to 5V, running through 3 1000 ohm resistors to A0. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Everything ran fine until I accidentally shortened the 5V to GND. I hope you can say what is wrong!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My code is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;Servo.h&amp;gt;&#xA;&#xA;Servo name_servo;&#xA;&#xA;int servo_position = 0;&#xA;int button_open = 4;&#xA;int button_closed = 5;&#xA;int LEDRED = 12;&#xA;int LEDWHITE = 13;&#xA;int SUN = A0;&#xA;&#xA;void setup () {&#xA;  name_servo.attach (9);&#xA;  pinMode(button_open, INPUT);&#xA;  pinMode(button_closed, INPUT);&#xA;  pinMode(LEDRED, OUTPUT);&#xA;  pinMode(LEDWHITE, OUTPUT);&#xA;}&#xA;&#xA;void loop() &#xA;{&#xA;  {&#xA;  int SUN = analogRead(A0);&#xA;  Serial.println(SUN);&#xA;  delay(1);   &#xA;  }&#xA;  if(digitalRead(button_open) == HIGH &amp;amp;&amp;amp; servo_position &amp;gt;= 0)&#xA;  {&#xA;  digitalWrite(LEDRED,HIGH);&#xA;  digitalWrite(LEDWHITE, LOW);  &#xA;    for (servo_position = 180; servo_position &amp;gt;= 0; servo_position -=1) &#xA;    {&#xA;      name_servo.write(servo_position);&#xA;      delay(10);&#xA;    }&#xA;    {&#xA;      delay(2000);&#xA;    }&#xA;  }&#xA;  if(digitalRead(button_closed) == HIGH &amp;amp;&amp;amp; servo_position &amp;lt;= -1 || analogRead(SUN) &amp;gt;= 900 &amp;amp;&amp;amp; servo_position &amp;lt;= -1)&#xA;  {&#xA;  digitalWrite(LEDRED,LOW);&#xA;  digitalWrite(LEDWHITE, HIGH);&#xA;    for (servo_position = 0; servo_position &amp;lt;=180; servo_position +=1) &#xA;    {&#xA;      name_servo.write(servo_position);&#xA;      delay(10);&#xA;    }&#xA;    {&#xA;      delay(2000);&#xA;    }&#xA;  }  &#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/8fCTd.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8fCTd.jpg&quot; alt=&quot;This is how I wired everything.&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="23213" LastEditorUserId="37" LastEditDate="2019-06-14T12:52:53.327" LastActivityDate="2019-06-14T12:52:53.327" Title="Servo malfunction" Tags="&lt;arduino&gt;&lt;motor&gt;&lt;rcservo&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18938" PostTypeId="1" AcceptedAnswerId="18965" CreationDate="2019-06-14T03:50:51.807" Score="3" ViewCount="53" Body="&lt;p&gt;I am designing a helium balloon which implements a control system that can expand and contract the balloon using a motor, thereby increasing or decreasing buoyancy and, subsequently, acceleration. I want to be able to send the balloon to a target altitude without overshooting. I initially thought of using two PID controllers:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;First PID compares actual and target altitude and outputs a target velocity&lt;/li&gt;&#xA;&lt;li&gt;Second PID compares actual and target velocity and drives the motor&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This approach has been problematic, because the rate at which acceleration changes as the motor expands or contracts is about &lt;span class=&quot;math-container&quot;&gt;$\frac{1}{6} \frac{m}{s^2 \cdot s}$&lt;/span&gt; at most. Tuning the system typically results in wild overshooting and oscillation, even when using Zeiger-Nichols tuning heuristics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question, then, is what control system would be best to ensure I don't overshoot my target altitude? I still want to approach my target quickly, but need to make sure I can reduce speed before oveshooting. I have researched LQRs and Full-State Feedback controllers, but I don't have a mechatronics background and found the material to be quite confusing. Before researching further, I want to make sure I spend my time researching the best-fit solution for this problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you very much in advance!&lt;/p&gt;&#xA;" OwnerUserId="23215" LastActivityDate="2019-06-20T16:01:01.263" Title="Helium Balloon Altitude and Velocity Control System" Tags="&lt;pid&gt;&lt;microcontroller&gt;&lt;flight-controller&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18940" PostTypeId="1" CreationDate="2019-06-14T06:46:10.973" Score="0" ViewCount="39" Body="&lt;p&gt;In most of the papers I have read, calculation of weights is done by the following formula:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/d9yLs.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/d9yLs.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Where L is the dimensionality of my state and lambda is calculated by:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/QmjMS.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QmjMS.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;And the usual values for alpha, beta and kappa are given as 0.001, 2 (for Gaussian distributions) and 0 respectively.&lt;/p&gt;&#xA;&lt;p&gt;My problem is that this would give a value of Lambda that is very close to - L, which drives the weights to huge negative values. This is affecting my covariance estimation, leading to wildly inaccurate predictions. This seems like a fundamental error in the way the weights are calculated, but I'm not sure if I'm missing some critical intuition here.&lt;/p&gt;&#xA;" OwnerUserId="23216" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2019-06-14T06:46:10.973" Title="How do I set the weights of an Unscented Kalman Filter?" Tags="&lt;localization&gt;&lt;kalman-filter&gt;" AnswerCount="0" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="18942" PostTypeId="1" CreationDate="2019-06-15T10:58:39.560" Score="1" ViewCount="271" Body="&lt;p&gt;I am implementing IBVS on a UR5 using ROS. The algorithm works very well in linear X, Y and Z and omega Y. When I try to add a fifth axis(omega X or Omega Z), the robot jerks heavily and goes into protective stop if the velocity is high, or it takes forever to converge if i reduce the velocity. How can I solve this problem? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The jacobian I'm using is generated from Peter Corke's Robotics Toolbox.&lt;/p&gt;&#xA;" OwnerUserId="23221" LastActivityDate="2021-03-08T12:00:10.023" Title="UR5 Visual servoing(image based, eye in hand)" Tags="&lt;robotic-arm&gt;&lt;ros&gt;&lt;jacobian&gt;&lt;visual-servoing&gt;" AnswerCount="1" CommentCount="5" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18943" PostTypeId="2" ParentId="18918" CreationDate="2019-06-15T11:00:59.190" Score="1" Body="&lt;p&gt;Well, there are a few reasons to that. &#xA;Servos  have a closed-loop mechanism, with an encoder or another device giving accurate feedback on the actual motor path. Steppers provide no feedback; control is through movement in incremental steps.&#xA;Servos normally boast consistent torque output over a wide speed range; copes well with short-term power bursts (e.g., due to rapid acceleration).&lt;br&gt;&#xA;At low RPM, steppers performs better, while, closer to the maximum limit, torque is degrading; can provide holding torque in the power-off state.&#xA;There are also some other reasons for that trend. You can better idea of the difference in that article &lt;a href=&quot;https://rozum.com/selecting-a-servo/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Steppers for a cobot&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="23222" LastActivityDate="2019-06-15T11:00:59.190" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18944" PostTypeId="2" ParentId="18860" CreationDate="2019-06-15T11:22:18.940" Score="0" Body="&lt;p&gt;When selecting a servo you need to know the torque and the load profile. Not all types of actuators are equally suitable to become a robot component. Steppers and servo motors seem to have the qualities essential to build a robot. Some of the servos come with a integrated gera and controller. That could make the whole RD a bit easier and MPV production seriously faster. You can get some insights from this &lt;a href=&quot;https://rozum.com/selecting-a-servo/&quot; rel=&quot;nofollow noreferrer&quot;&gt;How to select a motor for a robot&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="23222" LastActivityDate="2019-06-15T11:22:18.940" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18945" PostTypeId="2" ParentId="4592" CreationDate="2019-06-15T11:33:06.307" Score="0" Body="&lt;p&gt;It really depends on the economic details of the project you are working on. If it's a one time project with limited budget I would say a DC brush motor with  or without position feedback would do the job. Sure you will need a controller. If you aim to get a consistently high mechanical work output, precision positioning, and compact size you might draw your attention to servo motors. Some of them already come with a gear and a controller integrated. If you still feel embarassed about making the right choice, you could find some hints in here.&lt;a href=&quot;https://rozum.com/robot-servo/&quot; rel=&quot;nofollow noreferrer&quot;&gt;What you need to know about robot servos before purchase&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="23222" LastActivityDate="2019-06-15T11:33:06.307" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18947" PostTypeId="1" CreationDate="2019-06-16T16:36:59.107" Score="0" ViewCount="66" Body="&lt;p&gt;Why doesn't the installation of the meta-package &lt;code&gt;ros-melodic-desktop-full&lt;/code&gt; on Ubuntu 18.04 Melodic include the packages &lt;code&gt;ros-melodic-mav-msgs&lt;/code&gt;, &lt;code&gt;ros-melodic-mav-msgs&lt;/code&gt; and &lt;code&gt;ros-melodic-mav-planning-msgs&lt;/code&gt;?&lt;/p&gt;&#xA;" OwnerUserId="23234" LastEditorUserId="9176" LastEditDate="2019-06-16T20:18:30.037" LastActivityDate="2019-06-16T20:18:30.037" Title="ROS meta-package ros-melodic-desktop-full doesn't include mav packages" Tags="&lt;ros&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18948" PostTypeId="2" ParentId="18942" CreationDate="2019-06-16T16:50:29.270" Score="0" Body="&lt;p&gt;im facing the same problem as yours. And im  sorry if put this in the answer section(because i cant comment yet). I have try so many equation of orientation trying to fit which one able to work with RTB Jacobian(note that im using MDH notation), but none of them work. But recently i find a clue that in order to control the rotational part, we need to understand theory about Two-Vector Representation of end-effector and Rodrigues Matrix (lie group). But until now i didnt really know the correct relationship between that theory and inverse jacobian. I hope we can solve this together. &lt;/p&gt;&#xA;" OwnerUserId="22800" LastEditorUserId="22800" LastEditDate="2019-06-17T08:50:35.607" LastActivityDate="2019-06-17T08:50:35.607" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="18950" PostTypeId="2" ParentId="138" CreationDate="2019-06-17T18:35:33.560" Score="0" Body="&lt;p&gt;I'll add my $0.02. As other answers have said, it matters what you're studying. The more comfortable you are with the mathematics, the easier it will be to understand the concepts so I'd bias heavily on the math as an undergrad, expecially IF you're expecting to go to grad school and do research in robotics.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Linear algebra, 2 semesters&lt;/li&gt;&#xA;&lt;li&gt;Differential equations. &lt;/li&gt;&#xA;&lt;li&gt;Calculus, 3 semesters -- certainly through vector calculus, ideally with exposure to high dimensions (generalized Stokes' Theorem, differential forms, exterior algebra, etc)&lt;/li&gt;&#xA;&lt;li&gt;Real analysis. Good intro to proof-based math and provides a basis for high-level math&lt;/li&gt;&#xA;&lt;li&gt;Probability theory, 2 semesters. Ideally with some exposure to modern measure theory.&lt;/li&gt;&#xA;&lt;li&gt;Differential geometry (if you want to do path planning, geometric control, etc)&lt;/li&gt;&#xA;&lt;li&gt;Group theory, especially on Lie groups&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;You'll also want to take grad-level math courses in matrix analysis and maybe probability theory. My very favorite math class and book is Horn and Johnson's &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/0521548233&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;Matrix Analysis&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This list excludes non-math classes with a heavy math component like Lagrangian mechanics, data structures, algorithms, signals and systems, state-space control theory, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my humble opinion, a double major in CS and physics with classes in mechatronics and controls the ME/EE department would probably serve you best. You'll have a good grasp of the theory and then you can spend your summer internships getting practical experience.&lt;/p&gt;&#xA;" OwnerUserId="21036" LastActivityDate="2019-06-17T18:35:33.560" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18951" PostTypeId="1" AcceptedAnswerId="18952" CreationDate="2019-06-17T23:47:29.240" Score="0" ViewCount="41" Body="&lt;p&gt;For my robot i'm using semantic segmentation neural network that assigns to every pixel probability of being &quot;road&quot; (not occupied). By using homography matrix i'm re-projecting image to top-down view. The final goal is to build a map (poses are known).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm going to use simple algorithm &quot;occupancy grid mapping&quot; described in &lt;a href=&quot;https://mitpress.mit.edu/books/probabilistic-robotics&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;Probabilistic Robotics&quot;&lt;/a&gt; chapter 9.2. Core component of algorithm is &quot;inverse sensor model&quot; &lt;span class=&quot;math-container&quot;&gt;$p(m_i |z_t,x_t)$&lt;/span&gt; - probability for cell &lt;span class=&quot;math-container&quot;&gt;$m_i$&lt;/span&gt; being occupied given measurement &lt;span class=&quot;math-container&quot;&gt;$z_t$&lt;/span&gt; and robot pose &lt;span class=&quot;math-container&quot;&gt;$x_t$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Will it be correct if i directly use probabilities from neural network as &quot;inverse sensor model&quot;?&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;if cell is outside current &quot;top-down&quot;:&#xA;  return probability_0.5&#xA;else&#xA;  return probability_from_network&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="23241" LastActivityDate="2019-06-18T17:16:29.743" Title="Can neural network probability directly be used as inverse sensor model?" Tags="&lt;mapping&gt;&lt;probability&gt;&lt;neural-networks&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18952" PostTypeId="2" ParentId="18951" CreationDate="2019-06-18T17:16:29.743" Score="0" Body="&lt;p&gt;Sure, it's possible to assign the conditional probability of a pixel to the map, but there is an easier way for occupancy mapping. A normal neural network can learn the probabilities internally so the programmer doesn't has to care about the value by it's own. This will make the development process lighter and modern frameworks like Tensorflow have the natural ability in model building.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the answer to the question is, that the neural network will learn directly the grid map and this allows the programmer to focus on other tasks like pathplanning and steering control. Probabilistic robotics is overestimated because the weights in the neural network are able to adapt to new situation by it's own.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[1] Zhang, Jingwei, et al. &quot;Neural SLAM: Learning to explore with external memory.&quot; arXiv preprint arXiv:1706.09520 (2017).&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2019-06-18T17:16:29.743" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18956" PostTypeId="2" ParentId="18926" CreationDate="2019-06-20T11:12:52.570" Score="0" Body="&lt;p&gt;EKF SLAM will have larger covariances for the missing landmarks. &lt;/p&gt;&#xA;" OwnerUserId="9972" LastActivityDate="2019-06-20T11:12:52.570" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18957" PostTypeId="2" ParentId="18880" CreationDate="2019-06-20T11:23:11.403" Score="1" Body="&lt;p&gt;&lt;a href=&quot;http://wiki.ros.org/amcl&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://wiki.ros.org/amcl&lt;/a&gt;&#xA;You should try this and take a look at &lt;a href=&quot;http://wiki.ros.org/turtlebot_navigation/Tutorials/Autonomously%20navigate%20in%20a%20known%20map&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://wiki.ros.org/turtlebot_navigation/Tutorials/Autonomously%20navigate%20in%20a%20known%20map&lt;/a&gt;&#xA;It provides the code to use amcl and RVIZ to navigate. Now you just substitute the fastslam here with hector slam, and write your own controller to replace the one in the package.&lt;/p&gt;&#xA;" OwnerUserId="9972" LastActivityDate="2019-06-20T11:23:11.403" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18958" PostTypeId="2" ParentId="18877" CreationDate="2019-06-20T11:26:17.760" Score="3" Body="&lt;p&gt;This is called a Stewart platform. You can use any linear actuator type, hydraulic, pneumatic or electric. &lt;/p&gt;&#xA;" OwnerUserId="9972" LastEditorUserId="9972" LastEditDate="2019-06-22T12:39:03.743" LastActivityDate="2019-06-22T12:39:03.743" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18959" PostTypeId="2" ParentId="18850" CreationDate="2019-06-20T11:30:36.667" Score="1" Body="&lt;p&gt;You should definitely use a filter. You need to adjust to the noises. If you can design or know the state space models of the agent and the sensors then KF is the easiest to use.&lt;/p&gt;&#xA;" OwnerUserId="9972" LastActivityDate="2019-06-20T11:30:36.667" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18960" PostTypeId="2" ParentId="18829" CreationDate="2019-06-20T11:35:38.977" Score="0" Body="&lt;p&gt;I think the softness you describe has to do with stepper motor step sizes, try micro stepping to increase smoothness. And devise a motion profile with 3rd order spline to have acceleration equal to zero at turning points.&lt;/p&gt;&#xA;" OwnerUserId="9972" LastActivityDate="2019-06-20T11:35:38.977" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18961" PostTypeId="2" ParentId="18792" CreationDate="2019-06-20T11:42:41.300" Score="0" Body="&lt;pre&gt;&lt;code&gt;    #PID X AXES&#xA;    sum_error_x = sum_error_x + vel_x&#xA;    last_error_x = vel_x&#xA;    output_x = Kp_fb * vel_x + Kd_fb * (vel_x - last_error_x) + Ki_fb * sum_error_x&#xA;&#xA;    #PID Y AXES&#xA;    sum_error_y = sum_error_y + vel_y&#xA;    last_error_y = vel_y&#xA;    output_y = Kp_lr * vel_y + Kd_lr * (vel_y - last_error_y) + Ki_lr * sum_error_y&#xA;&#xA;    #PID Z AXES&#xA;    sum_error_z = sum_error_z + vel_z&#xA;    last_error_z = vel_z&#xA;    output_z = Kp_lr * vel_z + Kd_lr * (vel_z - last_error_z) + Ki_lr * sum_error_z &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Your error for the derivative terms are all wrong. vel_x - last_error_x is always zero because you assign the last error variables as vel variable.&lt;/p&gt;&#xA;" OwnerUserId="9972" LastActivityDate="2019-06-20T11:42:41.300" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18964" PostTypeId="1" CreationDate="2019-06-20T14:20:41.450" Score="0" ViewCount="83" Body="&lt;p&gt;It is a beginner question for most of you, I had Googled this question but I didn't find any satisfying answer. What is the returned raw data from lidar, the difference between 2d and 3d lidar? How we map with lidar? I need mathematical relations of this process.&lt;/p&gt;&#xA;" OwnerUserId="23121" LastEditorUserId="19515" LastEditDate="2020-07-23T17:43:04.920" LastActivityDate="2020-07-23T17:43:04.920" Title="How does 3D Lidar work?" Tags="&lt;mapping&gt;&lt;lidar&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18965" PostTypeId="2" ParentId="18938" CreationDate="2019-06-20T16:01:01.263" Score="1" Body="&lt;p&gt;Two thoughts occurred to me when reading your question:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Although I haven't analyzed your specific problem, I wonder if it is beneficial to have two full PID loops.  In motion control applications, it is common to have a position controller whose output feeds into a velocity controller, but typically one of these controllers will be PI (or PID) and the other will only have a proportional term.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Because you have a physical system (and not just a model on paper), you have physical limits.  Classical control theory assumes linear systems, but as you've noted, you can only change your system at a certain rate - this is called saturation, and it is a non-linear effect.  To know if your system is in saturation, you can check your acceleration rate (or rate of change of acceleration, in your case?) and see if it's at its limit.  When you're asking your system to change faster than its capable of changing, you will almost certainly introduce overshoot.&lt;/p&gt;&#xA;&lt;p&gt;One way to avoid this is to limit your reference to values and rates which you know your system can achieve.  For example, don't ask your balloon to climb to 1000 ft instantaneously.  Instead, ask your balloon to climb to 1000 ft over a period of many minutes.  Depending on your system dynamics, you many need to apply acceleration and jerk limits as well.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="16321" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2019-06-20T16:01:01.263" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18966" PostTypeId="2" ParentId="18964" CreationDate="2019-06-20T16:27:46.327" Score="4" Body="&lt;p&gt;Lidar, sonar, and radar all work generally the same:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Emit a pulse. For radar, this means briefly energizing an antenna. For sonar, it means briefly energizing a sound transducer/speaker. For lider, this is means briefly flashing a light (typically a laser). &lt;/li&gt;&#xA;&lt;li&gt;As you emit the pulse, start a timer. &lt;/li&gt;&#xA;&lt;li&gt;Wait for a reflection to return. For radar, this means an electrical pulse in your antenna. For sonar, it's an acoustic pulse at a microphone. For lidar, it's a light flash at a photosensor.&lt;/li&gt;&#xA;&lt;li&gt;When you detect the reflection, stop the timer. &lt;/li&gt;&#xA;&lt;li&gt;Calculate the distance traveled by your reflected pulse by dividing the speed of transmission by the elapsed time. For radar and lidar it's the speed of light, for sonar it's the speed of sound. These speeds will vary depending on the medium through which your pulses are propagating. For the speed of light, the variation may not be big enough to matter, but for sonar it will definitely matter. For underwater sonar things like salinity, temperature, etc. is enough to make a big impact.&lt;/li&gt;&#xA;&lt;li&gt;The distance calculated in step 5 above determines how far the &lt;em&gt;pulse&lt;/em&gt; traveled. Assuming the pulse transmitter and the receiver are co-located, this would be &lt;em&gt;twice&lt;/em&gt; the distance to the obstacle because the pulse has to travel out to the object and then back to the receiver. &lt;/li&gt;&#xA;&lt;li&gt;Associate the distance to the obstacle with the direction the transmitter was pointed. This should now give you a distance and heading of the object with respect to your transmitter's base frame. This is how scan data from a laser scanner is typically returned - as a distance and angle (i.e., polar coordinates). &lt;/li&gt;&#xA;&lt;li&gt;Finally, once steps 1-7 are completed, the emitter is pointed in a new direction and the process repeats. For lidar systems, typically a laser points down at a mirror that is angled at 45 degrees. The mirror spins about the vertical axis and, in doing so, continuously re-aims the output of the laser. Radar systems use motors to spin the antenna/dish. Sonar systems (especially underwater sonar) actually tend to be constantly oriented and are towed/pulled along.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;These are the essentials of how all of the detection and ranging systems work. Here are some finer points that were difficult for me to understand when I was trying to learn more about radar systems. These seemed to be points that were clearly understood by most authors, but nobody laid any of these points out in any singular text that I ever read:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;You don't get any information about the &lt;em&gt;width&lt;/em&gt; of the object that causes the return. Usually, for radar and sonar systems, it's assumed that the object that causes the reflection occupies the entire &lt;em&gt;beam width&lt;/em&gt; at whatever the calculated distance is. This can cause &lt;a href=&quot;https://agupubs.onlinelibrary.wiley.com/doi/abs/10.1029/RS020i006p01130&quot; rel=&quot;nofollow noreferrer&quot;&gt;smearing&lt;/a&gt; and poor resolution if the beam isn't narrow enough. For lidar systems the returns are generally treated as a single point in the center of the beam. &lt;/li&gt;&#xA;&lt;li&gt;Following on the above, it's possible that the object doing the reflecting only occupies a portion of the &quot;illuminated&quot; or pulsed area, and it is possible (read:likely) to get a subsequent return from whatever is behind the first object. For lidar systems, rain, dust, etc. will frequently cause this. Whether or not you get the data about subsequent returns is generally referred to as whether or not the device has &quot;multi echo&quot; capability.&lt;/li&gt;&#xA;&lt;li&gt;Also following on points 1 and 2, it's not possible to discriminate against a portion of the pulse that weren't intending to listen for. No device has perfect edges to the transmission beam, but highly reflective objects that are outside of the design &lt;a href=&quot;https://en.wikipedia.org/wiki/Beamwidth&quot; rel=&quot;nofollow noreferrer&quot;&gt;beamwidth&lt;/a&gt; may be reflective enough to generate a detectable echo with the low-energy portion of the pulse. This creates a star- or plus-shaped &quot;dazzling&quot; pattern in the return data, like you can see below.&lt;/li&gt;&#xA;&lt;li&gt;It is entirely possible for the device to receive signals that it did not generate and to treat those as valid returning pulses. This is known as &quot;jamming&quot; and happens if there is some external emitter that is (coincidentally or intentionally) transmitting a &lt;em&gt;similar enough&lt;/em&gt; signal to be accepted by the receiver. &lt;/li&gt;&#xA;&lt;li&gt;Following kind of on point 4 above, there are generally times when the receiver won't detect anything at all. For systems like radar and sonar, the aperture that generates the pulse is the same object that will do the detection and so there is some switching time where the residual motion/charge that is in the aperture needs to be adequately dissipated until the receiver can &quot;listen&quot; for the return. For lidar systems there may be a need to change the optical return path to change from the emitter-&gt;lens to lens-&gt;receiver. These switching times will determine the minimum range for the system.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Finally, regarding your question about 2D versus 3D, this generally refers to whether or not the device is detecting points along a single line (a single scan &lt;em&gt;plane&lt;/em&gt;) or along multiple lines (multiple scan &quot;planes&quot; which, for non-zero &quot;plane&quot; angles, actually create scan &lt;em&gt;cones&lt;/em&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;:EDIT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Forgot - here's a good picture from a synthetic aperture radar system showing some highly reflective objects - they make the + patterns in the data where they're creating a detectable reflection even though the radar isn't pointed directly at it. It's kind of like a lens flare, but not exactly the same mechanism. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/zMg9l.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zMg9l.png&quot; alt=&quot;radar image&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="19143" LastEditDate="2019-06-21T12:06:14.353" LastActivityDate="2019-06-21T12:06:14.353" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="18967" PostTypeId="1" CreationDate="2019-06-20T21:37:44.780" Score="0" ViewCount="44" Body="&lt;p&gt;I'm designing an automated object capture turntable (take photos -&gt; photogrammetry) where the platform the object sits need to rotate, driven by a stepper.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The catch is the base is glass as I need to view the object from beneath and the bearing sits around the edge of the glass plate, not at it's center.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the bearing I'll be ordering, it has a 24&quot; diameter:&#xA;&lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/B071CPFCYS&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.amazon.com/gp/product/B071CPFCYS/ref=ox_sc_act_title_1?smid=A2ZKGRENV5NC9J&amp;amp;th=1&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/tDHSR.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tDHSR.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I need a way to mechanically couple a stepper motor to the inside or outside of the bearing.  I'd like to use something more precise like timing belt as opposed to rollers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there an existing product/technique for interfacing large wheels with stepper motors?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Update: As per  jsotola's suggestion I did some searching, best thing I could find was this:&#xA;&lt;a href=&quot;https://www.pololu.com/product/2673&quot; rel=&quot;nofollow noreferrer&quot;&gt;Scooter Wheel Adapter for 5mm Shaft&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/PSMOX.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/PSMOX.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My origional ideas was to glue gt2 belt around the inside/outside, only just rediscovered the link to my inspiration: &lt;a href=&quot;https://www.lumberjocks.com/projects/63729&quot; rel=&quot;nofollow noreferrer&quot;&gt;Make Your Own Gears Out of Wood and Timing Belts&lt;/a&gt; &#xA;&lt;a href=&quot;https://i.stack.imgur.com/akwMS.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/akwMS.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="23267" LastEditorUserId="23267" LastEditDate="2019-06-21T00:06:57.053" LastActivityDate="2019-06-21T00:06:57.053" Title="Best way to turn large &quot;lazy suzan&quot; bearing with stepper motor" Tags="&lt;stepper-motor&gt;" AnswerCount="1" CommentCount="6" ClosedDate="2019-06-21T12:41:50.007" ContentLicense="CC BY-SA 4.0" />
  <row Id="18968" PostTypeId="2" ParentId="18967" CreationDate="2019-06-20T23:42:47.907" Score="1" Body="&lt;p&gt;Have a machine shop make you big gear or timing belt pulley that fits over the outside of the bearing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that if you a position reference on the outer edge of the glass you can use encoder feedback and a DC motor -- you should be able to achieve more precision this way.&lt;/p&gt;&#xA;" OwnerUserId="1411" LastActivityDate="2019-06-20T23:42:47.907" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18969" PostTypeId="1" CreationDate="2019-06-21T03:47:02.577" Score="-1" ViewCount="58" Body="&lt;p&gt;Is it possible to make a drone to fly in fixed altitude and move in fixed trajectory without GPS. (Drone has to move in fixed path which is already defined).&#xA;I am saying without GPS because drone has to move inside the hospital / office (moving from one floor to another floor). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I searched google and I find GMapping Slam for trajectory movement. But this does not work when moving from one floor to another floor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I there any options I can use to achieve my requirement. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="23269" LastActivityDate="2019-06-21T08:49:05.060" Title="Can drone fly in predefined fixed trajectory without GPS" Tags="&lt;sensors&gt;&lt;localization&gt;&lt;gps&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18971" PostTypeId="2" ParentId="18969" CreationDate="2019-06-21T08:49:05.060" Score="-1" Body="&lt;p&gt;In the situation you describe, it is the easiest if you install &quot;eyes&quot; to the drone. Have at least 6 sensors to detect the closest obstacles (walls, ceiling, floor) on the 3 coordinates.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additionally, you should have a &quot;map&quot; of the building, so the drone can navigate through it. GPS uses the same idea: some coordinates + some map.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, you must be aware that inside a building there are many more things, than just walls. And a hospital is even more special. There are a lot of fixtures, lots of cables, conduits, lamps, perfusion &quot;posts&quot; (or however they are called). Even with installing good resolution cameras as &quot;eyes&quot;, I still think that there is a significant safety risk for operating the drone within a building. What about the air flow from AC units? What about the drone accidentally crashing inside a patient under surgery? What about the drone running out of &quot;juice&quot; and just &quot;crashing&quot; wherever it happens to be?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While it is doable as a hobby / research, real-life use has limited applicability.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did I say the sometimes ceilings are very close to the floors, and the drone will start navigating through the people's haircuts? :)&lt;/p&gt;&#xA;" OwnerUserId="22248" LastActivityDate="2019-06-21T08:49:05.060" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18974" PostTypeId="1" AcceptedAnswerId="18975" CreationDate="2019-06-22T13:43:16.323" Score="0" ViewCount="304" Body="&lt;p&gt;I am currently trying to understand the books &lt;strong&gt;&lt;a href=&quot;https://dspace.mit.edu/bitstream/handle/1721.1/119149/16-412j-spring-2005/contents/projects/1aslam_blas_repo.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;SLAM for dummies&lt;/a&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;a href=&quot;http://www.iri.upc.edu/people/jsola/JoanSola/objectes/curs_SLAM/SLAM2D/SLAM%20course.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Simulataneous localization and mapping&#xA;with the extended Kalman filter&lt;/a&gt;&lt;/strong&gt; to implement slam. I have understood steps 1 and 2 &lt;strong&gt;SLAM for dummies&lt;/strong&gt;. However I am having difficulty understanding &lt;strong&gt;&lt;em&gt;Step 3: Add new landmarks to the current state&lt;/em&gt;&lt;/strong&gt; (Page 40). The corresponding section in &lt;strong&gt;Simulataneous localization and mapping&#xA;with the extended Kalman filter&lt;/strong&gt; is &lt;strong&gt;2.3.4 Landmark initialization for full observations&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Specifically, I do not understand how the SLAM specific Jacobian &lt;span class=&quot;math-container&quot;&gt;$J_{xr}$&lt;/span&gt; (&lt;strong&gt;SLAM for dummies&lt;/strong&gt;) defined below is actually derived:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Wl9G3.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Wl9G3.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/1VKg8.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1VKg8.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am confused about what transformation function the Jacobian &lt;span class=&quot;math-container&quot;&gt;$J_{xr}$&lt;/span&gt; is linearizing. I notice that &lt;span class=&quot;math-container&quot;&gt;$J_{xr}$&lt;/span&gt; is the same as Jacobian &lt;span class=&quot;math-container&quot;&gt;$G_R$&lt;/span&gt; that linearizes the Inverse Observation model as described in section 2.3.4 of &lt;strong&gt;Simulataneous localization and mapping&#xA;with the extended Kalman filter&lt;/strong&gt;. Why does &lt;span class=&quot;math-container&quot;&gt;$J_{xr}$&lt;/span&gt;, contain &lt;span class=&quot;math-container&quot;&gt;$\Delta t$&lt;/span&gt;, which is the thrust applied to the robot? &lt;span class=&quot;math-container&quot;&gt;$\Delta t$&lt;/span&gt; which belongs to the State Prediction model shouldn't be in the Inverse Observation model, no? Am I right to say that the Inverse Observation model is a function of the robot pose : [&lt;span class=&quot;math-container&quot;&gt;$x_{r}$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$y_{r}$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$\theta_{r}$&lt;/span&gt;] and the new landmark observation:  [&lt;span class=&quot;math-container&quot;&gt;$d_{l1}$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$\phi_{l1}$&lt;/span&gt;] and the output is the updated state vector : [&lt;span class=&quot;math-container&quot;&gt;$x_{r}$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$y_{r}$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$\theta_{r}$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$x_{l1}$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$y_{l1}$&lt;/span&gt;]? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/yhoWL.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/yhoWL.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/nvFFs.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/nvFFs.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="23199" LastEditorUserId="23199" LastEditDate="2019-06-22T19:20:21.903" LastActivityDate="2020-08-19T23:58:10.977" Title="EKF SLAM : SLAM specific Jacobians for new landmarks" Tags="&lt;mobile-robot&gt;&lt;slam&gt;&lt;kalman-filter&gt;&lt;ekf&gt;&lt;jacobian&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18975" PostTypeId="2" ParentId="18974" CreationDate="2019-06-22T21:45:38.857" Score="0" Body="&lt;p&gt;Updating the covariance matrix for a new landmark always confused me, the equation is often given but I've never seen it derived.  I had a go at deriving it here&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://petercorke.com/wordpress/ekf-covariance-matrix-update-for-a-new-landmark&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://petercorke.com/wordpress/ekf-covariance-matrix-update-for-a-new-landmark&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd be interested to know if you find this useful.&lt;/p&gt;&#xA;" OwnerUserId="21223" LastActivityDate="2019-06-22T21:45:38.857" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18980" PostTypeId="1" CreationDate="2019-06-25T18:36:48.177" Score="0" ViewCount="69" Body="&lt;p&gt;I have problem of determining the DH table, specially finding x axis when two z axis are parallel to each other &lt;/p&gt;&#xA;" OwnerUserId="23295" LastActivityDate="2019-07-26T11:01:45.170" Title="How to determine x-axis if the two z-axis are parallel in Denavit Hartenberg representation" Tags="&lt;first-robotics&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18981" PostTypeId="1" CreationDate="2019-06-25T22:44:38.093" Score="4" ViewCount="195" Body="&lt;p&gt;As part of a research project, I'm creating synthetic data, using the Unity engine. &#xA;I have the final pose of a robotic arm (6 params: 3 for orientation, 3 for location/position), and also a .ply file for the mesh. Is there any way I can use this information directly to render an image in Unity?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Update: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was thinking of the following approach (though I am not sure how well this will translate to Unity). I have the Camera transform, so I can have the coordinates of the end effector in the Camera frame. My camera and light source are the same, so I was thinking that in a renderer (say Unity), I'd fix the origin of the 3D world as the camera+light point, and then if I could somehow input the end effector coordinates (x,y,z and thetax, thetay, thetaz) in the frame, that would align the arm in the camera (final position) as I need it, and then I'd render the image. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also as of now, my ply file is really simple and has only 3 joints (end effector, of course, being the end point of the last). &#xA;Is this approach viable in Unity?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;.ply &lt;a href=&quot;https://filebin.net/a5snbxvq3wpjupei/shaft_color.ply?t=tn1vy2je&quot; rel=&quot;noreferrer&quot;&gt;File&lt;/a&gt;,  &lt;a href=&quot;https://filebin.net/a5snbxvq3wpjupei/Screen_Shot_2019-06-26_at_2.59.33_PM.png?t=nq9oq8he&quot; rel=&quot;noreferrer&quot;&gt;Image&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="22485" LastEditorUserId="22485" LastEditDate="2019-06-26T22:10:04.207" LastActivityDate="2020-04-20T08:38:51.683" Title="How to render a robotic arm in Unity?" Tags="&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18982" PostTypeId="2" ParentId="18629" CreationDate="2019-06-25T23:58:43.737" Score="1" Body="&lt;p&gt;CAD software knows everything about your parts...(assuming you tell the things it doesn't know...as mentioned, material properties) After doing this, calculating multibody C.O.G or even inertias of complex bodies is 'trivial' (of course, it wasn't for the programmers). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;These things can be very accurate, or can be made very accurate, however they can and usually will be off by a certain tolerance. How much one is willing to accept for an error is up to the user.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They can also be wrong simply because something as trivial as the electronics and wires within your body weren't modelled correctly, or given the correct initial data, on top of that, no material is perfectly homogenous, which CAD software &lt;em&gt;always&lt;/em&gt; assumes. This may not even account for even 1% error and not matter for something small, but is extremely important when dealing with large heavy loads. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because of this, it's almost always a good idea to experimentally verify such data yourself, using &lt;a href=&quot;https://www.researchgate.net/publication/232381896_A_new_trifilar_pendulum_approach_to_identify_all_inertia_parameters_of_a_rigid_body_or_assembly&quot; rel=&quot;nofollow noreferrer&quot;&gt;trifilar pendulums&lt;/a&gt; as an example or other equipment and methods &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I generally use CAD data as a good lower boundary for initial guesses with empirical verification.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Of course, this again will only be as accurate as your measurements and is an entire branch on it's own. &lt;/p&gt;&#xA;" OwnerUserId="23148" LastActivityDate="2019-06-25T23:58:43.737" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18983" PostTypeId="2" ParentId="18981" CreationDate="2019-06-26T10:37:38.923" Score="1" Body="&lt;p&gt;You can convert the PLY files to OBJ fromat using &lt;a href=&quot;http://www.meshlab.net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;MeshLab&lt;/a&gt; (free). You can import the OBJ files to Unity. More on how to do this can be found &lt;a href=&quot;https://answers.unity.com/questions/170625/importing-obj-file-with-textures.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I assume you have an obj file for all segments of the robotic arm, so you will have to recreate the chain of GameObjects that correspond to the linkages and attach the meshes to these. You have to take care of coordinate systems. You will have to have a Coordinate System (In Unity a Transfrom attached to a GameObject) at each joint (for motion) and probably, relative to the joint another one, relative to which the mesh vertex coordinates are expressed (they might coincide). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to solve the inverse kinematics problem (calculate joint angles from end-effector pose) you can google for analytic solutions, iterative solutions or you can try the built-in Unity IK Solver.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to render the image &quot;as seen by a camera on the end-effector&quot; you can just make the camera the child (or a component on) the last linkage of the robot.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2019-06-27T08:47:01.947" LastActivityDate="2019-06-27T08:47:01.947" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18984" PostTypeId="2" ParentId="18980" CreationDate="2019-06-26T10:39:33.920" Score="1" Body="&lt;p&gt;Make them parallel to the previous X Axis. This helps reducing the number of non-zero coordinates in the DH table which in turn means less + and * operations in the calculations.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2019-06-26T10:39:33.920" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18985" PostTypeId="1" CreationDate="2019-06-26T14:21:53.440" Score="0" ViewCount="35" Body="&lt;p&gt;I made a quadcopter with an Arduino and all connections are fine. When I arm it, the motors spin without props but when I connect the props and arm it, the motors spin for a second and stop. Can anyone help? Why does it happen?&lt;/p&gt;&#xA;" OwnerUserId="23301" LastEditorUserId="9176" LastEditDate="2019-06-26T19:38:45.063" LastActivityDate="2019-06-27T06:42:25.970" Title="Quadcopter motors not spinning" Tags="&lt;quadcopter&gt;&lt;brushless-motor&gt;" AnswerCount="0" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="18988" PostTypeId="1" CreationDate="2019-06-27T09:32:51.133" Score="0" ViewCount="25" Body="&lt;p&gt;In a state estimation scheme with a simple IMU/GNSS setup using EKF, I have always thought the prediction step would be done using a motion model and all sensor measurements would be incorporated via observation updates.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However i have noticed IMU measurements being used for prediction in several works using something called a strapdown inertial navigation (&lt;a href=&quot;https://arxiv.org/pdf/1711.05805.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Example&lt;/a&gt;) which is used as the prediction model with no mention to a kinematic motion model. Also in this &lt;a href=&quot;https://escholarship.org/dist/wJD5zTgC2vrImRR/dist/prd/content/qt34f81319/qt34f81319.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;paper&lt;/a&gt; i see that the prediction step is done by integrating the IMU measurements with the motion model.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is slightly confusing with my concept of temporal and measurement update duality. Is strapdown inertial navigation and using a kinematic model are substitutes for each other or are they complementary? Do you know of any works that compare them in case they are analogous? Any good reads to understand these concepts would be appreciated.&lt;/p&gt;&#xA;" OwnerUserId="23281" LastEditorUserId="23281" LastEditDate="2019-06-27T09:38:06.687" LastActivityDate="2019-06-27T09:38:06.687" Title="Differences between strapdown inertial navigation and motion models" Tags="&lt;localization&gt;&lt;kalman-filter&gt;&lt;imu&gt;&lt;ekf&gt;&lt;estimation&gt;" AnswerCount="0" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="18991" PostTypeId="1" CreationDate="2019-06-27T15:22:42.513" Score="2" ViewCount="137" Body="&lt;p&gt;In order to create a map for unknown environment, we have two solutions:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The size of the area should be given (grid-based maps) so simply we create 2D grid and have our robot to move discrete movement each move represent a cell in the grid and as the robot moves we use it sensors to mark this cell as open or close.&lt;/li&gt;&#xA;&lt;li&gt;The size of the area is not given (feature-based maps) and so we have to find a way to represent the map.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I am here for the second approach, how to store the map as a programmer? What data structure do I need?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I googled it a lot but I could not find the right answer. I found a similar question, &lt;a href=&quot;https://robotics.stackexchange.com/questions/2945/how-does-a-robot-efficiently-store-a-map-it-makes&quot;&gt;How does a robot efficiently store a map it makes?&lt;/a&gt;, but I didn't get what I need.&lt;/p&gt;&#xA;" OwnerUserId="23314" LastEditorUserId="9176" LastEditDate="2019-06-28T11:52:19.970" LastActivityDate="2019-07-05T05:39:42.437" Title="How to build map for unknown environment?" Tags="&lt;mobile-robot&gt;&lt;mapping&gt;&lt;data-association&gt;" AnswerCount="1" CommentCount="4" ClosedDate="2019-07-05T12:16:04.037" ContentLicense="CC BY-SA 4.0" />
  <row Id="18992" PostTypeId="1" CreationDate="2019-06-27T19:08:55.657" Score="-1" ViewCount="252" Body="&lt;p&gt;I want to construct 2D occupancy grids for mapping of an unknown environment. Could you guide me how can I achieve it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I have researched is that robot can construct its map given sensor data using recursive Bayesian estimation algorithm. Is it correct?&lt;/p&gt;&#xA;" OwnerUserId="22546" LastEditorUserId="9176" LastEditDate="2019-06-27T19:33:04.610" LastActivityDate="2019-07-29T03:03:18.333" Title="Occupancy grid mapping" Tags="&lt;motion-planning&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18993" PostTypeId="1" CreationDate="2019-06-27T22:43:21.217" Score="0" ViewCount="77" Body="&lt;p&gt;Does anyone know where I can find the template of the face plate for the Create 2.0?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to print or laser-cut.&lt;/p&gt;&#xA;" OwnerUserId="23315" LastEditorUserId="110" LastEditDate="2019-06-28T00:13:49.020" LastActivityDate="2019-07-01T15:03:27.707" Title="3D template for irobot-create" Tags="&lt;irobot-create&gt;&lt;3d-printing&gt;" AnswerCount="1" CommentCount="0" ClosedDate="2019-07-01T15:47:55.900" ContentLicense="CC BY-SA 4.0" />
  <row Id="18994" PostTypeId="2" ParentId="18992" CreationDate="2019-06-27T23:17:47.913" Score="2" Body="&lt;p&gt;Yes you do need some sort of sensor data such as LIDAR data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are planning to perform 2D SLAM then you could start playing around with the ROS package &lt;a href=&quot;http://wiki.ros.org/gmapping?distro=lunar&quot; rel=&quot;nofollow noreferrer&quot;&gt;gmapping&lt;/a&gt; which will help you construct a 2D occupancy grid using LIDAR data. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a simple &lt;a href=&quot;http://wiki.ros.org/slam_gmapping/Tutorials/MappingFromLoggedData&quot; rel=&quot;nofollow noreferrer&quot;&gt;tutorial&lt;/a&gt; that shows you how to use gmapping for this use case. Here is another &lt;a href=&quot;http://wiki.ros.org/pr2_simulator/Tutorials/BuildingAMapInSimulation&quot; rel=&quot;nofollow noreferrer&quot;&gt;tutorial&lt;/a&gt; that shows you how to do this in simulation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This youtube &lt;a href=&quot;https://www.youtube.com/watch?v=tUm6MRGYam8&quot; rel=&quot;nofollow noreferrer&quot;&gt;video&lt;/a&gt; is also a good guide. &lt;/p&gt;&#xA;" OwnerUserId="23050" LastEditorUserId="23050" LastEditDate="2019-07-29T03:03:18.333" LastActivityDate="2019-07-29T03:03:18.333" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="18995" PostTypeId="2" ParentId="16535" CreationDate="2019-06-28T00:16:31.057" Score="2" Body="&lt;p&gt;There are many conventions for Euler angle sequence, just are there are many conventions for coordinate system axes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Robotics generally uses right-hand coordinate frame for robots and robot parts, with x-forward, y-left, z-up.  Euler angles in robotics are &lt;em&gt;generally&lt;/em&gt; ZYZ ; using an a-b-a sequence (ZYZ, YZY, XZX, ...) rather than a-b-c (XYZ, YZX, ZYX, ...) sequence helps avoid singularity/gimbal lock issues.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, robotics also often uses the optical/cameras/sensor-systems coordinate frame convention of z-forward, y-down, x-right for cameras and some other pixel-wise sensors which project the 3D world to a 2D image/matrix.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For an example of making conventions explicit, see the ROS &lt;a href=&quot;https://www.ros.org/reps/rep-0103.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;REP 103&lt;/a&gt; on metrics, coordinate systems, and rotation representations, and &lt;a href=&quot;https://www.ros.org/reps/rep-0105.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;REP 105&lt;/a&gt; on coordinate system naming, chaining, and conversion to Earth-centred/global systems and maps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are lots of other conventions. For example, see this explanation of the &lt;a href=&quot;https://www.euclideanspace.com/maths/geometry/rotations/euler/indexLocal.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;NASA Standard Aeroplane and NASA Standard Aerospace&lt;/a&gt; coordinate systems, which are x-fore, y-up, z-right  and  x-fore, y-up, z-right. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;edit:  This paper (&lt;a href=&quot;http://danceswithcode.net/engineeringnotes/rotations_in_3d/rotations_in_3d_part1.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Rotations in Three-Dimensions: &#xA;Euler Angles and Rotation Matrices&lt;/a&gt;) gives a clear summary of the Euler angle parameters on pages 1 &amp;amp; 2, gimbal lock on pages 5 &amp;amp; 6, and problems with averaging Euler angles on page 8.&lt;/p&gt;&#xA;" OwnerUserId="14995" LastEditorUserId="14995" LastEditDate="2019-06-28T00:24:48.387" LastActivityDate="2019-06-28T00:24:48.387" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18996" PostTypeId="2" ParentId="9609" CreationDate="2019-06-28T00:33:14.767" Score="0" Body="&lt;p&gt;As I understand it, quaternions have the least issues with numerical approximations or discontinuities for a sequence of mujltiple rotations.  See &lt;a href=&quot;http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/index.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;this explanation of Quaternions&lt;/a&gt;, plus all the quaternion- and rotation-related pages on that site.  You'll also get numerical errors when you convert between representations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, for single rotations rather than chained sequences of rotations (hence minimal numerical approx errors) most of the other answers here are correct: the representations are equivalent.  Just avoid Euler a-b-c sequences like XYZ, ZXY, etc. to avoid &lt;a href=&quot;http://danceswithcode.net/engineeringnotes/rotations_in_3d/rotations_in_3d_part1.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;gimbal lock&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;edit: you can see how representation conversions lead to numerical approximations, from the code on &lt;a href=&quot;http://www.kostasalexis.com/frame-rotations-and-representations.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this page&lt;/a&gt; - lots of trigonometric functions.&lt;/p&gt;&#xA;" OwnerUserId="14995" LastEditorUserId="14995" LastEditDate="2019-06-28T00:41:16.080" LastActivityDate="2019-06-28T00:41:16.080" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="18999" PostTypeId="1" CreationDate="2019-06-28T23:53:59.777" Score="0" ViewCount="52" Body="&lt;p&gt;Can anybody recommend a robotic arm to be possibly coupled with VR to be used for educational purposes for university students within a bucket of about 15000€?&lt;/p&gt;&#xA;" OwnerUserId="15001" LastEditorUserId="110" LastEditDate="2019-06-29T00:17:53.610" LastActivityDate="2019-07-01T10:59:36.467" Title="Robotic arm for university student" Tags="&lt;robotic-arm&gt;" AnswerCount="2" CommentCount="1" ClosedDate="2019-07-01T13:40:30.630" ContentLicense="CC BY-SA 4.0" />
  <row Id="19000" PostTypeId="2" ParentId="18999" CreationDate="2019-06-29T22:36:33.453" Score="2" Body="&lt;p&gt;I've made a &lt;a href=&quot;http://petercorke.com/wordpress/low-cost-robots-for-hobbyists-and-teaching&quot; rel=&quot;nofollow noreferrer&quot;&gt;bit of a list&lt;/a&gt; of what's available for teaching robots.  &lt;/p&gt;&#xA;" OwnerUserId="21223" LastActivityDate="2019-06-29T22:36:33.453" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19001" PostTypeId="1" AcceptedAnswerId="19003" CreationDate="2019-06-30T01:41:03.160" Score="2" ViewCount="27" Body="&lt;p&gt;To elaborate further - How do I fix the camera as the origin of the 3D world?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The context is I am trying to create some synthetic image data for a robotics project, and I have the coordinates of the End Effector in the camera frame (basically the position of the object and its orientation in the camera coordinates) How do I set the Unity setup such that if I set the X, Y, Z and rotation of the object in camera coordinates, it recreates the scene?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[Unity 3D]&lt;/p&gt;&#xA;" OwnerUserId="22485" LastEditorUserId="22485" LastEditDate="2019-07-02T13:43:28.427" LastActivityDate="2019-07-02T13:43:28.427" Title="How do I set all objects in my scene to be aligned with respect to the camera in Unity 3D?" Tags="&lt;cameras&gt;&lt;3d-reconstruction&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19002" PostTypeId="2" ParentId="18999" CreationDate="2019-07-01T10:59:36.467" Score="1" Body="&lt;p&gt;The default decision would be a UR5. It is a bit out or your range, but it could be worth to check with UR if they give you a university discount. Main advantage is the huge user base, rather good support in ROS and easy things like following waypoints can be done in python within hours of unpackaging. &lt;/p&gt;&#xA;" OwnerUserId="23196" LastActivityDate="2019-07-01T10:59:36.467" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19003" PostTypeId="2" ParentId="19001" CreationDate="2019-07-01T13:38:59.257" Score="2" Body="&lt;p&gt;I think the function you're looking for is &lt;a href=&quot;https://docs.unity3d.com/ScriptReference/Transform.TransformPoint.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;TransformPoint(Vector3 position)&lt;/code&gt;&lt;/a&gt;. You can describe something in coordinates that are &lt;em&gt;local&lt;/em&gt; to the camera and use the &lt;code&gt;TransformPoint()&lt;/code&gt; method to convert from local camera coordinates to world coordinates. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It sounds like you're trying to make a scene to generate some test data, in which case you'll have to have a list of objects you want to arrange and a list of positions and rotations that are local to the camera. You can try maintaining these as separate objects, but you should consider making the &quot;local objects&quot; into a class of its own. You can use a &lt;code&gt;[System.Serializable]&lt;/code&gt; tag before the class definition to have the class be able to populate in the editor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, for example, you might have:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[System.Serializable]&#xA;public class LocalObject&#xA;{&#xA;    public GameObject localObject;&#xA;    public Vector3 localPosition;&#xA;    public void UpdateTransform()&#xA;    {&#xA;        if(localObject!=null)&#xA;        {&#xA;            localObject.transform.position = Camera.main.transform.TransformPoint(localPosition);&#xA;        }&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So with that code you have a &lt;code&gt;LocalObject&lt;/code&gt; that consists of a &lt;code&gt;GameObject&lt;/code&gt; and a &lt;code&gt;Vector3&lt;/code&gt; that describes the transform in local coordinates, and then finally a method that will set the position by transforming the location from main camera coordinates to world coordinates via the &lt;code&gt;TransformPoint()&lt;/code&gt; command. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since it's using the &lt;code&gt;[System.Serializable]&lt;/code&gt; tag, it can be exposed in the editor, such that you can have something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;public class YourScript : MonoBehaviour&#xA;{&#xA;    public List&amp;lt;LocalObject&amp;gt; localObjects = new List&amp;lt;LocalObject&amp;gt;();&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then later, in &lt;code&gt;Start()&lt;/code&gt; or &lt;code&gt;Update()&lt;/code&gt;, you can iterate through your list and set the positions:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void Start()&#xA;{&#xA;    foreach(LocalObject localObject in localObjects)&#xA;    { &#xA;        localObject.UpdateTransform();&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The rotations relative to the camera is a going to be a little trickier because Unity represents the rotations as quaternions, but I think the approach I would take would be to use the &lt;code&gt;forward&lt;/code&gt;, &lt;code&gt;right&lt;/code&gt;, and &lt;code&gt;up&lt;/code&gt; properties of the &lt;code&gt;Transform&lt;/code&gt; as an input for the &lt;a href=&quot;https://docs.unity3d.com/ScriptReference/Quaternion.AngleAxis.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;Quaternion.AngleAxis&lt;/code&gt;&lt;/a&gt; command, then build a series of quaternions using that command and setting the rotation that way. For example, by modifying the &lt;code&gt;LocalObject&lt;/code&gt; class:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[System.Serializable]&#xA;public class LocalObject&#xA;{&#xA;    public GameObject localObject;&#xA;    public Vector3 localPosition;&#xA;    public Vector3 localRotation; // new&#xA;    private Transform cam = Camera.main.transform; // new, just to make referencing easier&#xA;    public void UpdateTransform()&#xA;    {&#xA;        if(localObject!=null)&#xA;        {&#xA;            localObject.transform.position = cam.TransformPoint(localPosition);&#xA;            Quaternion roll = Quaternion.AngleAxis(localRotation.x, cam.forward); // new&#xA;            Quaternion pitch = Quaternion.AngleAxis(localRotation.y, cam.right); // new&#xA;            Quaternion yaw = Quaternion.AngleAxis(localRotation.z, cam.up); // new&#xA;            localObject.transform.rotation = yaw*pitch*roll; // new&#xA;        }&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I &lt;em&gt;think&lt;/em&gt; that would do it, but I'm just typing this into the text box here and haven't tried any of this in Unity. Also Unity uses left-handed coordinates with y-axis as up, but I think most people would be most familiar as entering the angles as roll-pitch-yaw and would like yaw to be about the vertical axis, which again is y in Unity, so there might be some sign errors or something in the above, but this should give you a good idea of how to do what you want. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2019-07-01T13:38:59.257" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19004" PostTypeId="1" AcceptedAnswerId="19010" CreationDate="2019-07-01T14:08:55.703" Score="0" ViewCount="740" Body="&lt;p&gt;I'm trying to build a motorized stage which moves in one direction as below picture based on &lt;a href=&quot;https://www.sciencedirect.com/science/article/pii/S0890695516302280#f0005&quot; rel=&quot;nofollow noreferrer&quot;&gt;this article&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Zbyj2.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Zbyj2.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Desired characteristic properties are:&#xA; 1. screw length = 150 mm&#xA; 2. screw diameter = 14mm&#xA; 3. screw pitch = 2mm&#xA; 4. linear velocity = 0.15 mm/seconds&#xA; 5. load weight = 10Kg &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What should I consider to choose a proper stepper motor?&lt;/p&gt;&#xA;" OwnerUserId="23331" LastActivityDate="2019-07-02T17:17:24.250" Title="Specification calculation for choosing a proper stepper motor for Ball Lead / Screw system" Tags="&lt;stepper-motor&gt;&lt;torque&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19005" PostTypeId="2" ParentId="18993" CreationDate="2019-07-01T15:03:27.707" Score="0" Body="&lt;p&gt;This template can be found in a link within &lt;a href=&quot;https://www.irobotweb.com/-/media/MainSite/PDFs/About/STEM/Create/Create_2_Deco_Cover_Modification.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.irobotweb.com/-/media/MainSite/PDFs/About/STEM/Create/Create_2_Deco_Cover_Modification.pdf&lt;/a&gt; : it's &lt;a href=&quot;https://www.irobot.com/~/media/mainsite/pdfs/about/stem/create/createdrilltemplate.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.irobot.com/~/media/mainsite/pdfs/about/stem/create/createdrilltemplate.pdf&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please note that I am an iRobot employee, but the postings on this site are my own and don't necessarily represent iRobot's positions, strategies, or opinions.&lt;/p&gt;&#xA;" OwnerUserId="7665" LastActivityDate="2019-07-01T15:03:27.707" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19008" PostTypeId="1" CreationDate="2019-07-02T10:31:28.180" Score="1" ViewCount="128" Body="&lt;p&gt;I want to perform kinodynamic motion planning on a 6DoF hybrid manipulator. I calculated mass matrix, coriollis matrix etc using the lagrangian method. The coriollis matirx was calculated symbolically from the mass matirx using christoffel symbols. But this calculation takes too much time for me. I was wondering if there is any way by which the coriollis matrix may be calculated in a more faster and efficient way? &lt;/p&gt;&#xA;" OwnerUserId="23335" LastActivityDate="2019-07-13T23:08:44.123" Title="Effiecient computation of coriollis matrix" Tags="&lt;dynamics&gt;&lt;manipulator&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19010" PostTypeId="2" ParentId="19004" CreationDate="2019-07-02T13:55:15.137" Score="3" Body="&lt;p&gt;When looking for motors, you usually are trying to figure out specific things with specific requirements. &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Holding Torque&lt;/li&gt;&#xA;&lt;li&gt;Torque at Speed&lt;/li&gt;&#xA;&lt;li&gt;Resolution (for steppers)&lt;/li&gt;&#xA;&lt;li&gt;NEMA size&lt;/li&gt;&#xA;&lt;li&gt;Positional Accuracy vs speed vs torque&lt;/li&gt;&#xA;&lt;li&gt;Movement Profile&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Budget&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;So we need a little more info about your system. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You're dealing with a 10kg load and your linear vel. is very slow at 0.15mm/sec...which is 9 millimetres / minute. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A good way to start is to look at what power you need to move the load in general...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$P\text{:=}\frac{F s}{t}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where F is your force, S your movement distance, and t the time you want to move such a load.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$P=\frac{10kg*9.81m/s^2*0.15m}{1000s}=0.0147 \text{W}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So like, basically nothing. You could sit there and calculate more to be more accurate...including frictional torques and inertia torques or worry about step vibration...as each time you 'step' a small vibration comes into the motor rotor, which can translate to your positional accuracy, if thats something important to you, visible here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/t5WuG.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/t5WuG.png&quot; alt=&quot;picture&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are other things of course, bearing frictions...'stick and slip' problems. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But we'll ignore that for now....back to your system. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you need less than a watt and you have an rpm of 9/2...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At this point we can go to a company like &lt;a href=&quot;https://us.nanotec.com/products/product-finder/&quot; rel=&quot;nofollow noreferrer&quot;&gt;nanotec&lt;/a&gt; and look for a motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As an example:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/33Vix.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/33Vix.png&quot; alt=&quot;pi234&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This Nema17 can give out 0.2Nm at very slow speeds at 48V (the red line)...we didn't &lt;em&gt;really&lt;/em&gt; calculate what torques you really need and in praxis these motors always seem to achieve a lot less, especially when you start using microsteps to get higher linear resolution. So barring we don't want to do actual math, we just over size everything, and go to a nema23 motor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/y5Zeh.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/y5Zeh.png&quot; alt=&quot;nema23&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So up to a RPM of 100 (you're only doing 4.5...), you're doing 0.8Nm at 48V...Which is simply way oversized, however guaranteed to match your requirements. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What usually seems to happen at the companies I've worked at, is a methodology such as this. Approximate what is needed, and oversize 2x or more whats required and forget about the rest.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since acceleration and velocity arn't high requirements on your list. I wouldn't bother doing much as far as proper design goes and just buy the largest motor I can afford and be done with it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However a proper method would go as follows:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;How much power is needed to move the load in the required time?&lt;/li&gt;&#xA;&lt;li&gt;What motor technology is best for this application?&lt;/li&gt;&#xA;&lt;li&gt;What’s the velocity, reflected inertia, and reflected load at the (gear) motor output shaft &#xA;4.Determine the total reflected inertia, JT, back from the load to the leadscrew shaft&lt;/li&gt;&#xA;&lt;li&gt;Determine the shaft torque needed to accelerate the load inertia&lt;/li&gt;&#xA;&lt;li&gt;What are the first-approximation power requirements to drive the leadscrew shaft?&lt;/li&gt;&#xA;&lt;li&gt;What are the final load parameters at the leadscrew input shaft (acting as the gearmotor output shaft)?&lt;/li&gt;&#xA;&lt;li&gt;Can the drive and power supply meet the requirements of the load?&lt;/li&gt;&#xA;&lt;li&gt;What is the motor's (estimated) worst-case temperature under load at an ambient temperature of 30°C?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.machinedesign.com/motorsdrives/how-pick-motors-linear-motion&quot; rel=&quot;nofollow noreferrer&quot;&gt;Courtesy of MachineDesign&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="23148" LastEditorUserId="23148" LastEditDate="2019-07-02T17:17:24.250" LastActivityDate="2019-07-02T17:17:24.250" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19011" PostTypeId="1" CreationDate="2019-07-02T18:26:01.673" Score="1" ViewCount="456" Body="&lt;p&gt;I aim to recreate the camera parameters of my camera in the Unity rendering system, which has the following variables:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/87zYQ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/87zYQ.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) I tweaked the focal length and saw that the Field of View is changing (inversely) which makes intuitive sense. But I also notice that the FOV is changing when I am changing Sensor size - how is that possible? FOV should be fixed for a fixed focal length, right?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) Is the Sensor size related to cx, cy - principal point in the Pin Hole Camera model?  &lt;a href=&quot;https://docs.opencv.org/2.4/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ref&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3) The camera parameters I have are of this format:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/dUsuM.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dUsuM.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;where fx,fy are the focal length in pixel units. Unity though needs the actual focal length(in meters). Is there a way to mathematically deduce focal length from fx, fy?&lt;/p&gt;&#xA;" OwnerUserId="22485" LastActivityDate="2019-07-14T11:46:44.257" Title="What is the relation between FOV, Focal Length and Sensor size in a Pin hole Camera Model?" Tags="&lt;computer-vision&gt;&lt;cameras&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19012" PostTypeId="2" ParentId="8272" CreationDate="2019-07-03T00:44:49.617" Score="2" Body="&lt;p&gt;I am assuming that what you want is to to move the eef to any pose in the workspace by moving the robot's base.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If this is the case please refer to the &lt;a href=&quot;http://openrave.org/docs/0.8.0/openravepy/databases.inversereachability/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Inverse Reachability Module&lt;/a&gt; by OpenRave like @ben suggested. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might also want to check out the ROS package &lt;a href=&quot;http://wiki.ros.org/move_base&quot; rel=&quot;nofollow noreferrer&quot;&gt;move_base&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="23050" LastEditorUserId="37" LastEditDate="2019-07-04T09:59:25.113" LastActivityDate="2019-07-04T09:59:25.113" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19013" PostTypeId="5" CreationDate="2019-07-03T01:11:46.490" Score="0" Body="&lt;p&gt;&lt;a href=&quot;https://geospatialmedia.s3.amazonaws.com/wp-content/uploads/2017/08/pointcloud.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://geospatialmedia.s3.amazonaws.com/wp-content/uploads/2017/08/pointcloud.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;3D point clouds are used heavily in navigation stacks for self driving automobiles:&lt;/p&gt;&#xA;" OwnerUserId="23050" LastEditorUserId="23050" LastEditDate="2019-07-04T09:34:31.390" LastActivityDate="2019-07-04T09:34:31.390" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19014" PostTypeId="4" CreationDate="2019-07-03T01:11:46.490" Score="0" Body="Point cloud is a set of data points in space. It is generated by 3D scanners. Used in construction of virtual scenes of real world spaces." OwnerUserId="23050" LastEditorUserId="23050" LastEditDate="2019-07-04T09:34:40.167" LastActivityDate="2019-07-04T09:34:40.167" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19015" PostTypeId="2" ParentId="19008" CreationDate="2019-07-03T07:54:36.510" Score="1" Body="&lt;p&gt;You can try to do some optimization of your computations. Things you can try&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Simplify the expression in your symbolic computation program. In matlab for example this is done with the 'simplify' command. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If you do not need a super high precision then change the variable type to a lower precision. For example change the double type to float, it will go from 64 bits precision to 32 bits precision. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Usually this computations include a lot of sines and cosines computations but most of them are just repeated computations of them. You can do all the sines and cosines computations prior to compute the coriolis matrix. Then your coriolis computation will only be a set of sums and multiplications. I could reduce to almost half the computation time by doing this trick of computing this values first and later just insert them in the matrix. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="21229" LastActivityDate="2019-07-03T07:54:36.510" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19016" PostTypeId="1" AcceptedAnswerId="19017" CreationDate="2019-07-03T09:04:05.403" Score="2" ViewCount="322" Body="&lt;p&gt;I am trying to implement a joint space control with the UR5 in MATLAB/Simulink and have programmed the forward kinematics of the same.&#xA;Now, I want to find out the joint angles of the manipulator using the Inverse Jacobian scheme with the following formula:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;q˙=inv(J)(q)*ve&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I do understand the math around it and have successfully implemented the Jacobian and obtained the matrix.&#xA;The problem I am currently facing is how do I use the above stated formula and program in MATLAB to find out the joint angles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do I need to use a for loop or something to iterate through each time step?&lt;/p&gt;&#xA;" OwnerUserId="23347" LastActivityDate="2019-07-08T16:37:10.217" Title="Inverse Jacobian to find joint angles" Tags="&lt;robotic-arm&gt;&lt;matlab&gt;&lt;simulation&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19017" PostTypeId="2" ParentId="19016" CreationDate="2019-07-03T12:46:56.693" Score="1" Body="&lt;p&gt;If u wanna find the joint angle here what can i explain, using task space. If u really wanna using joint space i will explain later.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What u asked for is Resolved Motion Rate Control, here is the step :&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that im using Euler Angle as representation of end-effector orientation, thus matrix x will contain (in my case for 6 DOF robot):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/d7j3s.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/d7j3s.gif&quot; alt=&quot;matrix x&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;while matrix q&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/lmm3A.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/lmm3A.gif&quot; alt=&quot;matrix x&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;xinit = Current end-effector pose&lt;/p&gt;&#xA;&#xA;&lt;p&gt;xfinal = end-effector pose goal&lt;/p&gt;&#xA;&#xA;&lt;p&gt;in order to obtain end-effector pose, just read the book. If i explain here i will rewrite a book. And because im using euler angle, you need to use analytical jacobian.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Trajectory Planning&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Make the manipulator move smoothly&lt;/p&gt;&#xA;&#xA;&lt;p&gt;xref = xinit + (xfinal-xinit) * CurrentStep/TotalStep&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;Find derivative&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/WvLyM.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/WvLyM.gif&quot; alt=&quot;Derivative&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;3&quot;&gt;&#xA;&lt;li&gt;PD Controller&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Control the speed&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/iIRVn.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/iIRVn.gif&quot; alt=&quot;PD Controller&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;4&quot;&gt;&#xA;&lt;li&gt;Inverse Jacobian&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Find q acceleration&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/vFTPj.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vFTPj.gif&quot; alt=&quot;Inverse Jacobian&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;5&quot;&gt;&#xA;&lt;li&gt;Double Integral&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Now we need q for current state&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/mOrUT.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/mOrUT.gif&quot; alt=&quot;Double Integral&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;6&quot;&gt;&#xA;&lt;li&gt;Memory&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/uVM4b.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/uVM4b.gif&quot; alt=&quot;Memory&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And repeat this step until Current step reach total step, hope this help&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For translational this step should work(just use 3 upper line of jacobian). And if u wanna control the rotational read my post &lt;a href=&quot;https://robotics.stackexchange.com/questions/18921/resolved-motion-rate-control-rotational-part&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The difference between task space and joint space is in task space we use controller to control end effector position (x,y,z,phi,theta,psi). While in joint space we use controller to control every single joint to reach the goal obtained from inverse jacobian.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note : if you use euler angle as representation, you could get error because gimbal lock. i didnt how to deal with it until this time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Reference :&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Craig, John. J. (2005). Introduction to Robotic : Mechanics and&#xA;Control. Pearson Education Inc.&lt;/li&gt;&#xA;&lt;li&gt;Corke, Peter P. (2017). Robotics, Vision and Control. Springer.&lt;/li&gt;&#xA;&lt;li&gt;Siciliano, B. (2009). Robotic Modelling, Planning and Contol.&#xA;Springer.&lt;/li&gt;&#xA;&lt;li&gt;Paul, P.R. (1981). Robot Manipulator : Mathematics, Programming,&#xA;and Control. MIT.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="22800" LastEditorUserId="22800" LastEditDate="2019-07-08T16:37:10.217" LastActivityDate="2019-07-08T16:37:10.217" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="19019" PostTypeId="1" CreationDate="2019-07-03T19:56:32.277" Score="2" ViewCount="43" Body="&lt;p&gt;I'm attempting to implement a variant of Monte Carlo localization in a 2D space with obstacles. While the object is moving around the obstacles the particles flow around the obstacle like in images below. But the weighted  mean (arithmetic) of all particles falls outside the distribution on the obstacle. What are other ways of calculating the mean such that the estimate is actually in the distribution outside the obstacle?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/wnUGx.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wnUGx.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/rjKuH.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rjKuH.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(shaded area is non-free space)&lt;/p&gt;&#xA;" OwnerUserId="10386" LastActivityDate="2019-07-07T19:53:13.863" Title="How to calculate the mean of an unsymmetric distribution (Particle Filter)" Tags="&lt;localization&gt;&lt;particle-filter&gt;&lt;probability&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19020" PostTypeId="2" ParentId="19019" CreationDate="2019-07-03T20:16:53.277" Score="1" Body="&lt;p&gt;The mean itself is precisely defined and there's no alternative definition for it. It simply is what it is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instead you need a different summary statistic; in this case something like a mode &lt;em&gt;might&lt;/em&gt; be useful but how do you decide which mode to use if your distribution is multi-modal? I haven't worked with this particular application so can't say what others have done. You might be stuck coming up with your own way of deciding what single position should represent the cloud.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Only real advice I can give is in a proper Bayesian framework like this you can often delay collapsing your state to a single position until very late. e.g. for as many calculations as possible consider all particles weighted by their probability.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2019-07-03T20:16:53.277" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19021" PostTypeId="2" ParentId="10436" CreationDate="2019-07-04T06:54:41.343" Score="0" Body="&lt;p&gt;&lt;a href=&quot;http://wiki.ros.org/ROSberryPi&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://wiki.ros.org/ROSberryPi&lt;/a&gt; suggests that we should be running ROS Kinetic on all the newer Raspberry Pis since it supports up to Buster with Raspberry Pi 4.&lt;/p&gt;&#xA;" OwnerUserId="23350" LastEditorUserId="37" LastEditDate="2019-07-04T09:55:21.687" LastActivityDate="2019-07-04T09:55:21.687" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19022" PostTypeId="1" CreationDate="2019-07-04T08:02:58.220" Score="0" ViewCount="40" Body="&lt;p&gt;I am implementing 2d slam for multi-robot exploration for my university project using GMapping package of a ROS and vrep sofrware. But I also have to implement the following three algorithms in addition to Gmapping:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;k means algorirhm&lt;/li&gt;&#xA;&lt;li&gt;Hungarian algorithm&lt;/li&gt;&#xA;&lt;li&gt;A* path planning algorithm&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Is it possible to implement the above 3 algorithms with Gmapping in ROS?&lt;/p&gt;&#xA;" OwnerUserId="22546" LastEditorUserId="37" LastEditDate="2019-07-08T15:59:07.113" LastActivityDate="2019-07-08T15:59:07.113" Title="Multi robot exploration" Tags="&lt;mobile-robot&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19023" PostTypeId="1" CreationDate="2019-07-04T11:26:39.577" Score="4" ViewCount="59" Body="&lt;p&gt;I am trying to create a feature grid map with&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Images from camera mounted to the top of the car.&lt;/li&gt;&#xA;&lt;li&gt;Novatel ProPak RTK gps poses&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Beforehand, I've checked to ensure that the standard deviations of the latitude/longitude (&gt;5cm) and heading (&amp;lt;0.5 degrees). The steps are I tried are as follows&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I use CNN based semantic segmentation to extract out pixels which&#xA;       are part of road markers (see sample below).&lt;/li&gt;&#xA;&lt;li&gt;I use the first gps pose as my origin map frame.&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Next, I use the calculated height of camera to calculate a&#xA;   homography between the image plane and the ground plane.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Finally, I just accumulate the points into cells as the vehicle&#xA;   drives around. The second image below shows the map of an outdoor carpark I created.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Question: &#xA;I noticed some parts of my map have significant ghosting or are incorrect. See 3rd image below, the stop line is not straight at all. I have notice that thishappens when the vehicle is turning, as is suspicious of 2 reasons: &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I do not know if this is due to the transformation between the camera&#xA;and the gps being inaccurate,&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;or that the transformation between camera and ground being&#xA;inaccurate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I seek advice on what I should do next to verify what is the problem, or what should I do to fix these issues.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/t68Ml.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/t68Ml.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ITbsH.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ITbsH.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/SFnJ3.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/SFnJ3.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="23354" LastEditorUserId="23355" LastEditDate="2019-07-04T23:46:42.313" LastActivityDate="2021-02-27T12:04:20.373" Title="building a grid map from gps trajectory poses" Tags="&lt;localization&gt;&lt;mapping&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19024" PostTypeId="2" ParentId="18991" CreationDate="2019-07-05T05:39:42.437" Score="0" Body="&lt;p&gt;You may want to use SLAM for this task. A good start can be ORB-SLAM. It's open source and state-of-the-art. The ORB-SLAM code can give good idea about data structure required to store maps.&lt;/p&gt;&#xA;" OwnerUserId="9426" LastActivityDate="2019-07-05T05:39:42.437" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19026" PostTypeId="1" CreationDate="2019-07-05T08:04:13.073" Score="5" ViewCount="374" Body="&lt;p&gt;I'm currently trying to establish communication between my Raspberry Pi based robot and a Cluster which are on the same network. Although I am able to ping and SSH one device using the other, I'm still not able to initialise the Raspicam Node(&lt;a href=&quot;https://github.com/UbiquityRobotics/raspicam_node&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ubiquiti Robotics node&lt;/a&gt;) when roscore is running on the cluster. Also, in the exact opposite circumstances(Roscore running on Raspi) I'm not able to initialise the ORB-SLAM node (&lt;a href=&quot;http://wiki.ros.org/orb_slam2_ros&quot; rel=&quot;nofollow noreferrer&quot;&gt;ORB-SLAM-ROSNode&lt;/a&gt;). The following error shows up in both scenarios:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;... logging to /home/pi/.ros/log/721ad8f6-d0dc-11e5-8411-a74b8992ecaa/roslaunch-pi-14554.log&#xA;&#xA;Checking log directory for disk usage. This may take awhile.&#xA;&#xA;Press Ctrl-C to interrupt&#xA;&#xA;Done checking log file disk usage. Usage is &amp;lt;1GB.&#xA;&#xA;RLException: Unable to contact my own server at [http://19.117.56.330:36875/].&#xA;&#xA;This usually means that the network is not configured properly.&#xA;&#xA;A common cause is that the machine cannot ping itself. Please check&#xA;&#xA;for errors by running:&#xA;&#xA;`ping` [`19.117.56.330`](http://19.117.56.330:36875)&#xA;&#xA;For more tips, please see&#xA;&#xA;[`http://www.ros.org/wiki/ROS/NetworkSetup`](http://www.ros.org/wiki/ROS/NetworkSetup)&#xA;&#xA;The traceback for the exception was written to the log file.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Please take note that the basic talker and listener as mentioned in the suggested link are working perfectly. Is there someone who can tell me what is going on exactly and what's the problem. Also, Is there some other way to transmit images(I'm trying to use FLASK and all but failing since Raspicam sends H.264 codec and OpenCV&lt;a href=&quot;https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_gui/py_video_display/py_video_display.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;[VideoCapture()&lt;/a&gt; function] is failing to interpret the data). I've heard about LCM(&lt;a href=&quot;https://lcm-proj.github.io/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Lightweight Communication and Marshalling&lt;/a&gt;) has someone done this before using LCM or is there any resource that can help.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;edit 1:&#xA;All the work was done over an Ethernet-based connection. I experimented by running the simple &lt;a href=&quot;http://wiki.ros.org/ROS/Tutorials/MultipleMachines&quot; rel=&quot;nofollow noreferrer&quot;&gt;tutorial&lt;/a&gt;. Please take a note that I ran roscore on raspi during the first experiment, and &quot;rqt_graph&quot; and &quot;rosnode list&quot; commands worked perfectly on the cluster. During the second run i ran roscore on the cluster and did the same experiment again by running &quot;rqt_graph&quot; and &#xA;&quot;rosnode list&quot; on the raspi and I was able to see all the rosnodes during both the experiments. Here is a screenshot of the &lt;a href=&quot;https://drive.google.com/file/d/1UlOrVnHidRpwBZmwkkfjdEHTKdFimnJi/view?usp=sharing&quot; rel=&quot;nofollow noreferrer&quot;&gt;/.bashrc&lt;/a&gt; file.&lt;/p&gt;&#xA;" OwnerUserId="22632" LastEditorUserId="22632" LastEditDate="2019-08-11T22:38:22.533" LastActivityDate="2019-08-11T22:38:22.533" Title="Multiple machine ROS image transmission error" Tags="&lt;mobile-robot&gt;&lt;ros&gt;&lt;raspberry-pi&gt;&lt;communication&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19028" PostTypeId="1" AcceptedAnswerId="19029" CreationDate="2019-07-05T20:59:12.423" Score="0" ViewCount="37" Body="&lt;p&gt;What are the main components of robot salto? What are the necessary skills and knowledges to reproduce it?&#xA;Also as you can see, i am a mecheng and i want to reproduce this robot as finishing project with some modifications. I think i need to know  raspberry pi, python, gyroscopic effects and being able to use these effects to balance bot in air and while jumping, good biomechanics to give bot a good initial jumping position. What do you think about my initial analysis? Am i in the right path or wrong path or should i just quit because it is too difficult to do?&#xA;Thank you community's great people&#xA;&lt;a href=&quot;https://youtu.be/F25EwtCo2dU&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://youtu.be/F25EwtCo2dU&lt;/a&gt;&#xA;&lt;a href=&quot;https://robotics.sciencemag.org/content/1/1/eaag2048?utm_source=youtube&amp;amp;utm_medium=digital&amp;amp;utm_campaign=vid-wall-jump-bot-9608&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://robotics.sciencemag.org/content/1/1/eaag2048?utm_source=youtube&amp;amp;utm_medium=digital&amp;amp;utm_campaign=vid-wall-jump-bot-9608&lt;/a&gt;&#xA;&lt;a href=&quot;https://www.sciencemag.org/news/2016/12/watch-tiny-robot-do-backflip?utm_source=general_public&amp;amp;utm_medium=youtube&amp;amp;utm_campaign=vid-wall-jump-bot-9606&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.sciencemag.org/news/2016/12/watch-tiny-robot-do-backflip?utm_source=general_public&amp;amp;utm_medium=youtube&amp;amp;utm_campaign=vid-wall-jump-bot-9606&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="23363" LastEditorUserId="23363" LastEditDate="2019-07-06T04:05:08.367" LastActivityDate="2019-07-06T09:30:21.970" Title="What should i do to rebuild robot salto from Berkeley uni as a mechanical engineering undergrad?" Tags="&lt;raspberry-pi&gt;&lt;mechanism&gt;&lt;python&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19029" PostTypeId="2" ParentId="19028" CreationDate="2019-07-06T09:30:21.970" Score="0" Body="&lt;p&gt;To be blunt. This is &lt;em&gt;probably&lt;/em&gt; beyond your ability...and I appraise that solely on the fact you didn't seem to consider any of the maths, design, coding and control theory that go along with your project.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Building robots, like any engineering project, generally doesn't start with building the thing first then letting it sit there for ages because you can't program it or because the parts you choose randomly are too heavy, arn't fast enough, etc etc etc....because you didn't do any kind of research and modeling ahead of time.....&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;However&lt;/strong&gt;..That should be a motivator and not a hinderance. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The best way to find out if you can even do the project is to do a virtual version of it. IE Simulation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Break out your CAD software and design your robot according to what you think might work...you are after all a mecheng. student...use those inertias and masses as data for your simulations. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Break out your matlab or mathematica or maples and &lt;em&gt;do your research&lt;/em&gt; and find the equations of motion for the mechanical system you want to model...run simulations design your control model, simulate more, rinse and repeat. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Matlab and mathematica now can produce C code for many different hardware platforms, so you can avoid even having to learn some programming yourself (for the heavy lifting bits atleast) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you can achieve a model that works in the simulated world, then you can start building one in the real world and find out your simulated one probably won't work! &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But you can try again and again...until it does work!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the best kind of project to work on, as it's complicated enough to force you to learn many disciplines, but still fun and cheaply made. &lt;/p&gt;&#xA;" OwnerUserId="23148" LastActivityDate="2019-07-06T09:30:21.970" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19030" PostTypeId="1" AcceptedAnswerId="19032" CreationDate="2019-07-06T14:51:02.830" Score="1" ViewCount="59" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/SL3pz.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/SL3pz.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/kNRs3.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kNRs3.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hi Iam new to robotics and stack exchange and Iam 13 years old,this is a IR sensor, can you tell me that  is this thing have a colour sensor on it?&lt;/p&gt;&#xA;" OwnerUserId="23366" LastEditorUserId="23366" LastEditDate="2019-07-06T17:08:38.640" LastActivityDate="2019-07-06T17:54:54.863" Title="Is This A Colour Sensor?" Tags="&lt;sensors&gt;" AnswerCount="1" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="19031" PostTypeId="1" CreationDate="2019-07-06T15:31:31.193" Score="0" ViewCount="42" Body="&lt;p&gt;On the lower-right of the screen, there is an &quot;Archive&quot; button, from which I go to the dialog box/window where there are &lt;strong&gt;Delete&lt;/strong&gt;, &lt;strong&gt;Delete all&lt;/strong&gt;, &lt;strong&gt;Export&lt;/strong&gt; and &lt;strong&gt;Load&lt;/strong&gt; options, but there is no &quot;&lt;strong&gt;Export All&lt;/strong&gt;&quot; ... &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The robot in question is manufactured by:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.cmarobot.it/intelligent_painting_robot/index.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.cmarobot.it/intelligent_painting_robot/index.php&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I attach a keyboard to the robot computer, can I mark everything by Ctrl + A keyboard combination ? Or maybe with Shift + Arrow up/down... ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can provide more photos if necessary.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/YuenW.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/YuenW.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="23367" LastActivityDate="2019-07-08T09:31:59.703" Title="CMA Net - How to export all statistics ? (In Excel/XLS)" Tags="&lt;industrial-robot&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19032" PostTypeId="2" ParentId="19030" CreationDate="2019-07-06T17:54:54.863" Score="0" Body="&lt;p&gt;I believe this is just IR sensor. This sensor wont able to differentiate color between red, green,blue etc. But you can use this sensor to differentiate black line and white floor (in case u wanna build line follower) because if it was white floor it will reflect more infrared transmitted from this device to its photodiode. U can see the infrared by turning on this sensor and look through your phone camera. You will see purple light.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you wanna sense another color. You need color sensor. Just google it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this help :)&lt;/p&gt;&#xA;" OwnerUserId="22800" LastActivityDate="2019-07-06T17:54:54.863" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="19033" PostTypeId="2" ParentId="18921" CreationDate="2019-07-06T19:21:18.743" Score="0" Body="&lt;p&gt;After a long-long research, i finally able to control the rotational part.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First of all, if you wanna control the orientation part you need to determine what kind of representation of orientation you wanna use. Available options :&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Two Vector Representation&lt;/li&gt;&#xA;&lt;li&gt;RPY Angle&lt;/li&gt;&#xA;&lt;li&gt;Euler Angle&lt;/li&gt;&#xA;&lt;li&gt;Unit Quarternion&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;If you use no 1, you only need geometrical jacobian (the original jacobian). I used the euler angle because 6 DOF robot has wrist joint (recommendation from several website). If using RPY and Euler as orientation, we need analytical jacobian. You can find how to calculate orientation error and analytical jacobian from this book&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Corke, Peter P. (2017). Robotics, Vision and Control. Springer.&lt;/li&gt;&#xA;&lt;li&gt;Siciliano, B. (2009). Robotic Modelling, Planning and Contol.&#xA;Springer.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Hope this help anyone in future. Feel free to discuss and correct me&lt;/p&gt;&#xA;" OwnerUserId="22800" LastEditorUserId="22800" LastEditDate="2019-07-06T19:53:00.500" LastActivityDate="2019-07-06T19:53:00.500" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19034" PostTypeId="1" CreationDate="2019-07-07T13:44:48.913" Score="2" ViewCount="453" Body="&lt;p&gt;In my understanding, in order to improve accuracy for the estimation of depth with a stereo vision camera, patterns of light are projected into the scene, because the resulting texture makes it easier to find point correpondances between the pair of stereo images, thus we can triangulate correct pairs of points and produce a dense and accurate depth map. But as far as I know, we can't see this structured light in the images captured by the stereo camera (nor in the scene), so how does a stereo camera make use of structured light in stereo matching?&lt;/p&gt;&#xA;" OwnerUserId="6976" LastActivityDate="2019-11-13T02:45:25.960" Title="How does structured light improve accuracy in stereo vision?" Tags="&lt;computer-vision&gt;&lt;stereo-vision&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19036" PostTypeId="2" ParentId="19019" CreationDate="2019-07-07T19:53:13.863" Score="0" Body="&lt;p&gt;If you have a set of &lt;span class=&quot;math-container&quot;&gt;$n$&lt;/span&gt; point &lt;span class=&quot;math-container&quot;&gt;$p_i$&lt;/span&gt; with &lt;span class=&quot;math-container&quot;&gt;$i=1,2,...,n$&lt;/span&gt;, its mean is also the minimum of&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;J(x) = \sum_{i=1}^n \|p_i - x\|_2^2. \tag{1}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your case instead of using Euclidean norm you could use the length squared of the shortest valid path from point &lt;span class=&quot;math-container&quot;&gt;$p_i$&lt;/span&gt; to &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; as shown in the figure below. Do keep in mind that this would mean that you would have to solve a optimization problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/yjMGI.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/yjMGI.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to find the shortest path from &lt;span class=&quot;math-container&quot;&gt;$p_i$&lt;/span&gt; to the current guess for &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; you might have to do some path finding, for example by using the A* search algorithm.&lt;/p&gt;&#xA;" OwnerUserId="1487" LastActivityDate="2019-07-07T19:53:13.863" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19037" PostTypeId="1" CreationDate="2019-07-07T19:53:37.210" Score="2" ViewCount="52" Body="&lt;p&gt;I have heard about open source 3D printed robotics projects (&lt;a href=&quot;https://www.poppy-project.org/en/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.poppy-project.org/en/&lt;/a&gt; is somehow obsolete example). My question is - are there open source holistic/integrated frameworks of automated design, simulation and analysis of such projects? The pipeline of design/simulation/analysis consists of the following steps:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Open source 3D CAD files for the robot are provided;&lt;/li&gt;&#xA;&lt;li&gt;Special open source processor receives CAD files of structures and generates mathematical expressions of kinematics and dynamics of the robot (e.g. Jacobian matrices and so on), as well as input files for the simulators (like Gazebo, MoveIt or OpenRave);&lt;/li&gt;&#xA;&lt;li&gt;Standard mathematical software (Mathematica, Matlab or open source GNU Octave) execute standard derivation of the expressions (from point 2) to determine all the necessary results of analysis (like space of reachability, singularities and so on);&lt;/li&gt;&#xA;&lt;li&gt;Simulators are used to perform simulations or robot in some standard set of environments, e.g., the industrial cells;&lt;/li&gt;&#xA;&lt;li&gt;Results from the 3. and 4. are provided to the GNU Octave expressions to determine the quality of the 3D CAD design and the numerical parameters of the design are tuned to arrive at the optimal values of numerical parameters (e.g. length of links and so on);&lt;/li&gt;&#xA;&lt;li&gt;Results from the 3., 4., 5. (i.e. the overall estimate of the quality) are feeded in the Genetic Programming system as the fitness measure and new generation of the 3D CAD design is generated using evolutionary algorithms whose genes encode the 3D CAD design of the robot. Or alternatively the quality measure is used as the reward for the Reinforcement Learning system that learns the optimal structural 3D CAD design of the robot.&lt;/li&gt;&#xA;&lt;li&gt;Results from the 6. (i.e. automatically improved 3D CAD design) is feeded into step 1. and the improved robotic structure is analysed again.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;There is computational creativity research with automatic exploration of the design space. So, one can consider the design space for the 3D CAD project and automatically explore it for finding the design that operates the most efficiently in the predetermined environments (like industrial cells).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From time to time some generation of the 3D CAD robot can be printed out and put into operation for gathering hard data (that can be feeded into improving the simulation process at step 4.) and for reaping the practical and material reward from the effort.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not asking to name the particular open source integrated frameworks (if such exists) (however the references would be great) or the open source components for such framework. My question is about the feasibility and possible obstacles for creating such framework?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;E.g. step 2. can be quite esoteric - to generate the Jacobians from the 3D designs, but is it really so hard to do that? There is no need for creativity to do this and it is the standard procedure that every student does in their homework.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And then there is problem about integrated representation of the robot? 3D CAD files usually are used for designing single components, like single link or single join or single structure, cover. But what about whole robot? Can similar 3D CAD files be used for the representation of the whole robot and that representation also include motors, sensors, actuators, wiring, computing units and so on. Only such integrated designs are suitable for the step 2 automatic analysis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Artificial intelligence is developing and that is why we should try to use both the automation of the mathematical analysis of the robot and also the automatic exploration of the designs space using evolutionary programming and reinforcement learning (which works quite nicely in generation of computer arts).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And all this should be open sourced to improve each component.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;What is the state of art of such integrated pipelines?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="809" LastActivityDate="2019-07-08T00:08:22.580" Title="Artificial Intelligence and Open source pipeline for automated design, simulation and analysis of robotics systems" Tags="&lt;design&gt;&lt;simulation&gt;&lt;artificial-intelligence&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19038" PostTypeId="2" ParentId="19037" CreationDate="2019-07-08T00:08:22.580" Score="2" Body="&lt;p&gt;The state of such a pipeline is that it each and every individual point is difficult and such a fully explored pipeline such as your hypothetical one simply doesn't exist and likely won't for many years to come. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Much like in &lt;a href=&quot;https://robotics.stackexchange.com/questions/18868/is-fuzzy-logic-applicable-for-robotics-research/18886#18886&quot;&gt;this answer&lt;/a&gt; I mentioned that Fuzzy logic and AI things are plastered on everything under the sun or being marketed that way as an end all be all solution to the worlds problems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;They are not.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I feel your question is inherently misinformed about AI's and their use compared to  'classical' design when it comes to mechanical engineering in a non-academical setting. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are two main things to think about when designing a product or a machine. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Time and Money.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can your &lt;em&gt;thing&lt;/em&gt; be made in a reasonable amount of time and will it break the bank trying to build it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A companies budget on one or the other will dictate how deep in the modelling hole one will fall. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;At this point to simplify one will now decide how to model your system and it will depend on what development tools one already has, how much is already known about said system, and what time frame all of this has to be done in &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A machine will often be designed by entire teams of people who only work on their specific fields of expertise...often on only individual parts or subsystems.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Materials (choosing the correct one, finding new ones, etc)&lt;/li&gt;&#xA;&lt;li&gt;Electronics, programming&lt;/li&gt;&#xA;&lt;li&gt;Statics, dynamics of full or subsystem simulations&lt;/li&gt;&#xA;&lt;li&gt;CAD design of parts and their specific requirements such as:  &#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Safety requirements, &lt;/li&gt;&#xA;&lt;li&gt;Their simulations of individual parts and subsystems, &lt;/li&gt;&#xA;&lt;li&gt;Stress analysis, most of which have to be chosen (as in decided upon by a person) and designed specifically to follow standards and laws applicable to the local or international regions. &lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;Control of said full or subsystem(s)&lt;/li&gt;&#xA;&lt;li&gt;Thermodynamics, Fluid dynamics, etc &lt;/li&gt;&#xA;&lt;li&gt;And extremely important, &lt;strong&gt;verification of models&lt;/strong&gt; with physical experiments and prototypes.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;All of this often done in parallel, with constant communication between each of them...and most of these people being experts...and I definitely didn't write down everything. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a rule of thumb, 'classical' modelling starts from simple and increases in complexity until a sufficient accuracy in your system has been obtained. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your system is inherently complicated (think chemical plant) such methods rarely work out regardless of how many parameters your ODE(s) has/have and how many engineers you throw at it. In this case AI's can be / will be used to try and model the dynamics of such systems with varying &lt;a href=&quot;https://docs.google.com/spreadsheets/u/1/d/e/2PACX-1vRPiprOaC3HsCf5Tuum8bRfzYUiKLRqJmbOoC-32JorNdfyTiRRsR7Ea5eWtvsWzuxo8bjOxCG84dAg/pubhtml&quot; rel=&quot;nofollow noreferrer&quot;&gt;degrees of success.&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To list a few examples of failures in training:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Aircraft Landing:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Evolved algorithm for landing aircraft exploited overflow errors in the physics simulator by creating large forces that were estimated to be zero, resulting in a perfect score&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Robot Arm&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A robotic arm trained to slide a block to a target position on a table achieves the goal by moving the table itself.&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Impossible Superposition&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Genetic algorithm designed to find low-energy configurations of carbon exploits edge case in the physics model and superimposes all the carbon atoms    &lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;To quote the &lt;a href=&quot;https://www.crcpress.com/Nonlinear-Problems-in-Machine-Design/Zahavi-Barlam/p/book/9780849320378&quot; rel=&quot;nofollow noreferrer&quot;&gt;summary of the book&lt;/a&gt; &quot;Nonlinear Problems in Machine Design&quot;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Modern machine design challenges engineers with a myriad of nonlinear problems, among them fatigue, friction, plasticity, and excessive deformation. Today's advanced numerical computer programs bring optimal solutions to these complex problems within reach, but not without a trained and experienced overseer.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Engineering and science is inherently &lt;strong&gt;&lt;em&gt;hard&lt;/em&gt;&lt;/strong&gt; and even experts in the designing of AI's make massive mistakes...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With all of that said, each one of your points mostly exists in different forms. &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Step files and stls are common formats to use for sharing between different programs, open source software such as FreeCAD exists.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I am not aware of a system even capable of finding a dynamical model from a CAD model, as it has not knowledge of the entire system, their limits, boundries, the space(s) they work in, initial conditions, their ideal or non ideal characteristics...etc etc (if someone knows one..I'd like to hear about it)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Yes, Finding the equations of a system can &lt;em&gt;really&lt;/em&gt; be that hard...&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;3&quot;&gt;&#xA;&lt;li&gt;&lt;p&gt;Standard softwares as you mentioned are commonly in use today for system simulations and &lt;a href=&quot;https://www.wolfram.com/system-modeler/what-is-new/?popup=optimizing-a-trebuchet&quot; rel=&quot;nofollow noreferrer&quot;&gt;automatic optimizations.&lt;/a&gt; &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Again such softwares exist..simulink, system modeler, mathematica, ANSYS, countless others&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;5, 6, 7 Are varying in their inter connections, however I can think of &lt;a href=&quot;https://www.youtube.com/watch?v=CtYRfMzmWFU&quot; rel=&quot;nofollow noreferrer&quot;&gt;Generative Design&lt;/a&gt; as an example where this is mostly what you describe as in, define specific boundries, allow automatic design, iterate, retest...rinse and repeat.  &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;AI is certainly great for many things. But it can't be used for everything...nor does it have to be. Many mechanical (sub)systems can be accurately (enough) solved in the 'classic' method quickly and it would be a waste of time and effort to implement AI's....for now anyways...&lt;a href=&quot;https://terminator.fandom.com/wiki/Judgment_Day&quot; rel=&quot;nofollow noreferrer&quot;&gt;Judgement Day&lt;/a&gt; was just delayed after all...&lt;/p&gt;&#xA;" OwnerUserId="23148" LastActivityDate="2019-07-08T00:08:22.580" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19039" PostTypeId="1" CreationDate="2019-07-08T06:50:51.370" Score="2" ViewCount="69" Body="&lt;p&gt;This is a continuation of the question I asked &lt;a href=&quot;https://robotics.stackexchange.com/questions/19023/building-a-grid-map-from-gps-trajectory-poses&quot;&gt;here&lt;/a&gt;. I thought I'll ask a more concrete question. So far, this is what I have done to transform from a feature point detected by camera sensor in to a map point, where feature is a 2d homogenous vector.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;map_point = T_world_origin.inverse() * T_world_gps * T_gps_camera * feature_point&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;There is significant ghosting on the map, as shown below, and I suspected that &lt;code&gt;T_gps_camera&lt;/code&gt; is inaccurate. I wish to solve for T_gps_camera (3x3 homogoenous matrix) analytically, and I arrive at the equation below,&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;M * T_world_origin.inverse() * T_world_gps_t * T_gps_camera * feature_point = T_world_origin.inverse() * T_world_gps_t+1 * T_gps_camera * feature_point&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where M is a 3x3 matrix I have calculated using ICP of the map points at time t and t+1. Following this, how should I use the ICP information I have to solve for T_GPS_camera?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/SFnJ3.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/SFnJ3.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="16257" LastActivityDate="2020-04-04T18:01:10.263" Title="solving for unknown 2d rotation + translation" Tags="&lt;calibration&gt;&lt;mapping&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19041" PostTypeId="2" ParentId="19031" CreationDate="2019-07-08T09:31:59.703" Score="1" Body="&lt;p&gt;&lt;strong&gt;Solved !&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;No need to connect a keyboard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I went to D:\cmafiles\STATS and there is the whole list of files with the working statistics in XLS format. I've copied all of them on my USB Flash memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you everyone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/rpRLv.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rpRLv.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="23367" LastActivityDate="2019-07-08T09:31:59.703" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19042" PostTypeId="1" CreationDate="2019-07-08T15:29:01.663" Score="0" ViewCount="42" Body="&lt;p&gt;Can a new iRobot Roomba e6 (WiFi enabled, scheduling robot) be hacked like the iRobot Create, while allowing it to do a bit of vacuuming during non programming time?&lt;/p&gt;&#xA;" OwnerUserId="23374" LastEditorUserId="7665" LastEditDate="2019-07-09T19:54:42.937" LastActivityDate="2019-07-10T16:49:30.680" Title="e6 Stock to Create Platform?" Tags="&lt;irobot-create&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="19044" PostTypeId="1" CreationDate="2019-07-08T16:37:12.710" Score="0" ViewCount="119" Body="&lt;p&gt;Can we use any of the Swedish 90°/45° Omni or Mecanum wheels in two wheeler configurations? &lt;/p&gt;&#xA;" OwnerUserId="23376" LastEditorUserId="9176" LastEditDate="2019-07-09T10:01:05.407" LastActivityDate="2019-07-09T14:08:49.923" Title="Can Swedish wheels be used in two wheeler configuration?" Tags="&lt;kinematics&gt;&lt;wheeled-robot&gt;&lt;forward-kinematics&gt;&lt;two-wheeled&gt;&lt;wheel&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19046" PostTypeId="2" ParentId="19034" CreationDate="2019-07-08T19:13:12.127" Score="1" Body="&lt;p&gt;The majority of sensors using structured light actually use the deformation of the light to compute the 3D depth directly.  They do not use it to augment/improve another depth estimation technique, such as stereo parallax.  By projecting a known pattern the distortions of the pattern can be converted directly into 3D depth information (after matching the features of the structure, not image pixels).  Typically distortions due to the sensor (e.g. lens) are accounted for by calibrating against known surfaces.&#xA;Many systems use multiple cameras so that the structure light can be seen even if obstructed from particular angles (and to provide additional sensing).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are referring to sensors that use structured light only to improve on depth information of a technique such as stereo imaging, they may work differently (I'm unaware of any).&lt;/p&gt;&#xA;" OwnerUserId="16622" LastActivityDate="2019-07-08T19:13:12.127" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19047" PostTypeId="2" ParentId="19044" CreationDate="2019-07-08T21:37:02.187" Score="0" Body="&lt;p&gt;I suppose yes, one could. They are wheels after all. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This mostly depends on other things, such as your design and how you want to move (in actual omnidirection? keeping balancing will be difficult, but it is possible.) ...a wheel is a wheel, regardless of if it's an omnidirectional one or not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An example of a spherical wheel being used in a two wheel system I've heard of is the &lt;a href=&quot;https://newatlas.com/spherical-drive-system-omnidirectional-electric-motorcycle/24095/?utm_source=Gizmag%20Subscribers&amp;amp;utm_campaign=6524605ed8-UA-2235360-4&amp;amp;utm_medium=email#gallery&quot; rel=&quot;nofollow noreferrer&quot;&gt;omni directional motorcycle.&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="23148" LastActivityDate="2019-07-08T21:37:02.187" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="19048" PostTypeId="2" ParentId="2801" CreationDate="2019-07-08T22:37:59.577" Score="0" Body="&lt;p&gt;I would have thought the control would only need to transmit a single packet on a single channel which gets sent only when the operator changes something.&lt;/p&gt;&#xA;" OwnerUserId="23380" LastActivityDate="2019-07-08T22:37:59.577" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19049" PostTypeId="1" CreationDate="2019-07-09T06:53:07.410" Score="0" ViewCount="93" Body="&lt;p&gt;I need a clear video live feed from a camera to an android phone. The connection does not have to be wireless because i have to use it without any internet. The camera and phone will be 2 or 3 meters apart at most. It also has to be battery powered for at least 3 hours. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also want the video displayed on my phone without anything else on the screen, just the live feed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which camera is best suitable, and what else do I need? &lt;/p&gt;&#xA;" OwnerUserId="23382" LastEditorUserId="9176" LastEditDate="2019-07-09T07:39:41.747" LastActivityDate="2021-04-05T16:07:40.800" Title="How to get a wired live feed from camera to phone" Tags="&lt;cameras&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19050" PostTypeId="2" ParentId="19044" CreationDate="2019-07-09T14:08:49.923" Score="1" Body="&lt;p&gt;&lt;em&gt;This started out as a comment but I ran out of space. Also, I am waiting for the question to be clarified, as morbo has requested of the OP.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Here is an example on YouTube, &lt;a href=&quot;https://www.youtube.com/watch?v=hvhPiTOGBb8&quot; rel=&quot;nofollow noreferrer&quot;&gt;Lego Technic two-wheeled double track tank r/c omni-wheel&lt;/a&gt;, although I must say that the wheels do not look particularly &lt;em&gt;omni&lt;/em&gt; to me:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/i0HFa.jpg&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Lego Technic two-wheeled double track tank r/c omni-wheel&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/i0HFa.jpg&quot; alt=&quot;Lego Technic two-wheeled double track tank r/c omni-wheel&quot; title=&quot;Lego Technic two-wheeled double track tank r/c omni-wheel&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Whilst this is not particular to Omni/Mecanum wheels, it is worth noting that a robot with a two wheeled differential drive can achieve stability if the center of mass is below the wheel axle or if there is a third point of contact striking the floor.&lt;/p&gt;&#xA;" OwnerUserId="9176" LastActivityDate="2019-07-09T14:08:49.923" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19051" PostTypeId="1" CreationDate="2019-07-09T14:14:37.067" Score="4" ViewCount="53" Body="&lt;p&gt;I am looking to buy a cobot for a research project (budget about 20k€). I happened to see some cobots (e.g. &lt;a href=&quot;https://acutronicrobotics.com/products/mara/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mara&lt;/a&gt;) that claim running ROS natively, some others (e.g. &lt;a href=&quot;https://www.engineering-for-you.com/aubo-i5-spec&quot; rel=&quot;nofollow noreferrer&quot;&gt;Aubo i5&lt;/a&gt;) that is compatible with ROS via API. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since I am not a programmer, could anybody explain me the difference, if any? &lt;/p&gt;&#xA;" OwnerUserId="23388" LastEditorUserId="23196" LastEditDate="2019-07-10T15:29:58.520" LastActivityDate="2019-07-12T09:08:01.157" Title="Native ROS vs ROS compatible via API" Tags="&lt;robotic-arm&gt;&lt;ros&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19052" PostTypeId="2" ParentId="19023" CreationDate="2019-07-09T14:18:55.000" Score="0" Body="&lt;p&gt;I came to this question from your &lt;a href=&quot;https://robotics.stackexchange.com/questions/19039/solving-for-unknown-2d-rotation-translation&quot;&gt;other question&lt;/a&gt;, but I think the answer is better suited here. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It looks like your &lt;a href=&quot;https://www.novatel.com/assets/Documents/Papers/ProPakV3.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;GPS only provides position&lt;/a&gt; and no heading information, so that would explain why you're noticing more trouble during vehicle turns. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know if you're filtering your GPS data before use, but the GPS datasheet advertises &quot;sub-meter accuracy,&quot; and again there's no heading information. I would suggest using a digital compass to get heading information and to use a filter to smooth your GPS signal. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;An &lt;a href=&quot;https://www.sparkfun.com/products/15335&quot; rel=&quot;nofollow noreferrer&quot;&gt;IMU&lt;/a&gt; could be paired with the GPS for even better positioning accuracy, which I think is probably ultimately what your problem boils down to - your transform chain (on the other question) doesn't have any step at which it adjusts rotation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're looking for a way to validate, then try to setup a scenario where you can recreate and eliminate the bug - try to induce ghosting where you haven't seen it (make a &lt;a href=&quot;https://en.wikipedia.org/wiki/U-turn&quot; rel=&quot;nofollow noreferrer&quot;&gt;U-turn&lt;/a&gt; in the middle of a street where you were getting good data) and try to eliminate ghosting where you have seen it (go straight through the stop intersection instead of turning.) If you're able to reliably recreate and stop the problem, then correct it by adding a rotation measurement (compass/IMU). &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2019-07-09T14:18:55.000" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19053" PostTypeId="2" ParentId="19039" CreationDate="2019-07-09T14:29:36.167" Score="1" Body="&lt;p&gt;Assuming your camera is rigidly mounted to your vehicle, and that the GPS is also rigidly mounted to the vehicle, then there should be a fixed transform between the GPS and camera. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your &lt;code&gt;M&lt;/code&gt; matrix is the correction that shifts your data between time steps. This &lt;em&gt;should&lt;/em&gt; just have to correct some minor white noise, from GPS noise for example. It should be &lt;em&gt;zero mean&lt;/em&gt;. If there is some fixed offset that you haven't modeled, then you should notice your &lt;code&gt;M&lt;/code&gt; matrix have some non-zero mean. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would look carefully at your &lt;code&gt;M&lt;/code&gt; matrix over time - consider getting the rotation angle from the 2x2 sub-matrix and the x/y offset from the position vector and look at those values, especially as you make turns. As I mentioned in &lt;a href=&quot;https://robotics.stackexchange.com/q/19023/9720&quot;&gt;your other question&lt;/a&gt;, I think you're missing a rotation sensor and that is affecting your data especially on turns. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I'm correct, you should see zero-mean noise during straight sections and then some non-zero mean during turns. Once you get the rotation-induced issues worked out (adding a compass, IMU, etc.), then you should go back to seeing zero-mean rotations and offsets during &lt;em&gt;all&lt;/em&gt; maneuvers. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're seeing some non-zero means during straight sections, then I would take those average values and update your GPS-camera offset accordingly. You &lt;em&gt;could&lt;/em&gt; do this on the fly, by using a low-pass filter to update the GPS-camera transform, but I worry that the turns aren't correct at the moment and it shouldn't be necessary because again everything is fixed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, tl;dr - use the mean of your &lt;code&gt;M&lt;/code&gt; matrix when you're getting good data to adjust your uncertain transform. Monitor the mean of the &lt;code&gt;M&lt;/code&gt; matrix to ensure all your data is being transformed well with your known transforms. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2019-07-09T14:29:36.167" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19054" PostTypeId="1" CreationDate="2019-07-09T17:22:56.313" Score="1" ViewCount="255" Body="&lt;p&gt;I am trying to use an IMU in a robotic car. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Specific IMU: &lt;a href=&quot;https://learn.sparkfun.com/tutorials/9dof-razor-imu-m0-hookup-guide?_ga=2.87322972.515701132.1562620054-1210936642.1562620054&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://learn.sparkfun.com/tutorials/9dof-razor-imu-m0-hookup-guide?_ga=2.87322972.515701132.1562620054-1210936642.1562620054&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Specific ROS package: &lt;a href=&quot;http://wiki.ros.org/razor_imu_9dof&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://wiki.ros.org/razor_imu_9dof&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am able to get the IMU data to an Arduino serial monitor, but cannot get IMU data in ROS. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I try to &lt;code&gt;roslaunch&lt;/code&gt; a launch file for the IMU, it hangs and does not continue at the following output: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;[INFO] [1562691381.293220]: Giving the razor IMU board 5 seconds to boot...&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The IMU's port is correctly specified and same as port in Arduino IDE. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone have any possible explanations as to why my &lt;code&gt;roslaunch&lt;/code&gt; waits for the IMU to boot when it seemingly works and is booted? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDITS: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A mentor for the project I am working on said that he uploaded the ROS package firmware to the IMU already, so I believe that is not the issue. &lt;/p&gt;&#xA;" OwnerUserId="23390" LastEditorUserId="23390" LastEditDate="2019-07-10T22:40:44.263" LastActivityDate="2019-07-10T22:40:44.263" Title="IMU outputs data to Arduino Serial Monitor but ROS hangs when waiting for IMU to boot?" Tags="&lt;ros&gt;&lt;linux&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19055" PostTypeId="1" CreationDate="2019-07-09T18:17:57.593" Score="1" ViewCount="511" Body="&lt;p&gt;I am working on a project in which users will create paths fully constrained in terms of position (using a separate piece of software), and a robot will periodically follow those paths. We are using a Turtlebot3 for this project, which comes with lots of support for path planning. However, because we already know exactly what paths we want the robot to follow, this functionality (and related ROS packages) is not very useful for us. I am wondering if there are already reliable ROS packages for following pre-defined paths, rather than path generation.&#xA;Our paths will include:&#xA;-Straight lines&#xA;-Rotations around a point&#xA;-Circles&#xA;-Circular arcs&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We can define the paths in terms of coordinates or geometric qualities (radius, distance, angle).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Turtlebot comes with a node for navigating to a given coordinate, which I’ve adapted to go to a series of coordinates, and is very useful for straight lines and rotations. However, it is not good for following circles, as its algorithm sends the robot to the specified coordinate then rotates to the specified angle. (turtlebot3_pointop_key in &lt;a href=&quot;https://wiki.ros.org/turtlebot3_example&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://wiki.ros.org/turtlebot3_example&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know it would not be very hard to create this functionality on my own (I’ve already written a few basic algorithms for circle and arc navigation) but I would prefer to use a package if one already exists. Or if someone knows a reliable way to add circle functionality to the pointop_key node. Also note that we would prefer to work in Python if possible.&#xA;Thank you!&lt;/p&gt;&#xA;" OwnerUserId="23391" LastActivityDate="2021-03-30T13:02:15.270" Title="ROS packages for *pre-planned* path navigation rather than path generation? (Turtlebot3/ROS)" Tags="&lt;mobile-robot&gt;&lt;ros&gt;&lt;navigation&gt;&lt;python&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19056" PostTypeId="2" ParentId="19054" CreationDate="2019-07-09T18:26:29.787" Score="1" Body="&lt;p&gt;Welcome to &lt;em&gt;Robotics&lt;/em&gt;, Ryan. The &lt;a href=&quot;http://wiki.ros.org/razor_imu_9dof&quot; rel=&quot;nofollow noreferrer&quot;&gt;ROS page you linked&lt;/a&gt; has quite a bit of information, and I am hoping you can please &lt;em&gt;edit your question&lt;/em&gt; to clarify the steps you've performed from that page. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Specifically, &lt;a href=&quot;http://wiki.ros.org/razor_imu_9dof#Load_Firmware_into_Razor_Board&quot; rel=&quot;nofollow noreferrer&quot;&gt;Step 4.2 Load Firmware into Razor Board&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In this step you copy the Razor firmware from the ROS package and build it and load it into the board using the Arduino IDE.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You stated that you're able to get the IMU data to an Arduino serial monitor, but it's not clear how you're doing that. From the Sparkfun tutorial you linked, it looks like the board comes with some &lt;a href=&quot;https://learn.sparkfun.com/tutorials/9dof-razor-imu-m0-hookup-guide?#getting-started-with-the-example-firmware&quot; rel=&quot;nofollow noreferrer&quot;&gt;pre-loaded example firmware&lt;/a&gt; that will work with the Arduino Serial Monitor, but &lt;em&gt;that&lt;/em&gt; software is &lt;strong&gt;not&lt;/strong&gt; the &lt;a href=&quot;https://github.com/KristofRobot/razor_imu_9dof/tree/indigo-devel/src/Razor_AHRS&quot; rel=&quot;nofollow noreferrer&quot;&gt;ROS software&lt;/a&gt; for that device. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can you please verify which firmware is running? Is it the example firmware that ships with the board or is it the &lt;a href=&quot;https://github.com/KristofRobot/razor_imu_9dof/tree/indigo-devel/src/Razor_AHRS&quot; rel=&quot;nofollow noreferrer&quot;&gt;firmware posted in the ROS tutorial&lt;/a&gt;?&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2019-07-09T18:26:29.787" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19057" PostTypeId="2" ParentId="10523" CreationDate="2019-07-09T23:34:15.453" Score="2" Body="&lt;p&gt;I just wanted add on to both user12895 and AL-ROBOT's answers. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Based on experience:&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;What you need is an (Iterative Point Cloud) ICP algorithm.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Do not worry, if the robot cannot detect the entire map when it scans with the lidar, you can just match what ever data you capture to a part of the map depending on your current position. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Great work on getting position working quite well with odometry at the moment, along with ICP it will reduce the error in the pose estimation very well. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Not sure what sort of hardware you are using to do all the processing. Because the execution speed of the processing is what matters when it comes to whether you can process the ICP while moving. In the past I have done this with LabVIEW on a myRIO1900 by NI, and the robot was moving at a decent speed. I have heard from my peers that if you write the ICP in c++ you could run it very fast. I have actually witnessed very fast mobile robots doing ICP very reliably. In both cases mentioned above the LIDARS used were &lt;a href=&quot;https://www.robotshop.com/en/hokuyo-urg-04lx-ug01-scanning-laser-rangefinder.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Hokuyo Lidars&lt;/a&gt; which are decent. Although they only have a FOV of 120 degrees, so if you cannot find one that has a FOV of 360 degrees. I recommend using two, one at the front and one at the back HOKUYO Lidars. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="23050" LastActivityDate="2019-07-09T23:34:15.453" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19060" PostTypeId="2" ParentId="19042" CreationDate="2019-07-10T16:49:30.680" Score="1" Body="&lt;p&gt;I think &lt;a href=&quot;https://robotics.stackexchange.com/questions/18092/turning-a-roomba-980-into-a-create&quot;&gt;turning a roomba 980 into a create&lt;/a&gt; may answer your question; at this time, only 5xx - 8xx series are compatible with the Create 2 Open Interface. &lt;p&gt;&lt;sup&gt;Please note that I am an iRobot employee, but the postings on this site are my own and don't necessarily represent iRobot's positions, strategies, or opinions.&lt;/sup&gt;&lt;/p&gt;&#xA;" OwnerUserId="7665" LastActivityDate="2019-07-10T16:49:30.680" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19061" PostTypeId="2" ParentId="19049" CreationDate="2019-07-10T22:47:12.880" Score="0" Body="&lt;p&gt;You could use an IP camera like @FooBar suggested and use an app like  &lt;a href=&quot;https://play.google.com/store/apps/details?hl=en&amp;amp;id=com.rcreations.ipcamviewer&quot; rel=&quot;nofollow noreferrer&quot;&gt;IP Cam Viewer Lite - Android Apps on Google Play&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This app will let you communicate to the IP cam over the internet and also to IP cams in the same local network as the phone.&lt;/p&gt;&#xA;" OwnerUserId="23050" LastEditorUserId="23050" LastEditDate="2019-07-15T12:37:44.873" LastActivityDate="2019-07-15T12:37:44.873" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19062" PostTypeId="1" CreationDate="2019-07-11T00:50:26.237" Score="0" ViewCount="460" Body="&lt;p&gt;I am trying to initialize the positions of my robot using Gazebo Plugins. &lt;code&gt;SetPosition()&lt;/code&gt; function of the &lt;code&gt;Joint&lt;/code&gt; class is supposed to set the joint angle (all my joints are revolute joints). However, the function doesn't do anything. The function returns &lt;code&gt;false&lt;/code&gt; indicating the action is unsuccessful. I have attached a simplified version of my code. I don't understand why it returns &lt;code&gt;false&lt;/code&gt; always. Any help is appreciated.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;map&amp;gt;&#xA;#include &amp;lt;functional&amp;gt;&#xA;&#xA;#include &amp;lt;ignition/math/Vector3.hh&amp;gt;&#xA;&#xA;#include &amp;lt;gazebo/common/common.hh&amp;gt;&#xA;#include &amp;lt;gazebo/gazebo.hh&amp;gt;&#xA;#include &amp;lt;gazebo/physics/physics.hh&amp;gt;&#xA;&#xA;namespace gazebo {&#xA;class RobotInitialization : public ModelPlugin {&#xA; public:&#xA;  void Load(physics::ModelPtr _parent, sdf::ElementPtr) {&#xA;    this-&amp;gt;model = _parent;&#xA;&#xA;    auto joint = this-&amp;gt;model-&amp;gt;GetJoint(&quot;revolute-joint&quot;);&#xA;    joint-&amp;gt;SetPosition(0, 1.0, true);&#xA;    std::cout &amp;lt;&amp;lt; joint-&amp;gt;Position(0) &amp;lt;&amp;lt; std::endl;&#xA;  }&#xA;&#xA; private:&#xA;  physics::ModelPtr model;&#xA;};&#xA;GZ_REGISTER_MODEL_PLUGIN(CassieInitialization)&#xA;}  // namespace gazebo  &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt;&lt;br&gt;&#xA;Thanks for the suggestion. I checked the joint limits and this helped for 6 out of 16 joints on my robot. I set velocities for all joints using &lt;code&gt;SetVelocity()&lt;/code&gt; and that works for all the joints but &lt;code&gt;SetPosition()&lt;/code&gt; doesn't. I also checked DOF of the joints using &lt;code&gt;joint.DOF()&lt;/code&gt; and it returns 1 for all my joints.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt;&#xA;I am using bullet as the solver.&lt;/p&gt;&#xA;" OwnerUserId="23401" LastEditorUserId="23401" LastEditDate="2019-07-12T17:05:50.090" LastActivityDate="2021-04-02T21:01:00.147" Title="Gazebo: SetPosition() function in the Joint class doesn't set the joint position and returns false sometimes" Tags="&lt;simulation&gt;&lt;gazebo&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19063" PostTypeId="1" CreationDate="2019-07-11T06:52:51.080" Score="0" ViewCount="216" Body="&lt;p&gt;When creating a new catkin workspace, building it and then sourcing &lt;code&gt;devel/setup.sh&lt;/code&gt;, the &lt;code&gt;ROS_PACKAGE_PATH&lt;/code&gt; is populated with paths from individual packages instead of only the root directory that contains all the packages. The packages are still found when calling &lt;code&gt;roslaunch&lt;/code&gt; and all works fine, but my understanding is that &lt;code&gt;ROS_PACKAGE_PATH&lt;/code&gt; should only contain the root directory. For example, I create a new catkin workspace:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;source /opt/ros/melodic/setup.bash&#xA;echo &lt;span class=&quot;math-container&quot;&gt;$ROS_PACKAGE_PATH # prints /opt/ros/melodic/share&#xA;mkdir -p $&lt;/span&gt;HOME/test_ws/src&#xA;cd &lt;span class=&quot;math-container&quot;&gt;$HOME/test_ws/src&#xA;catkin_init_workspace&#xA;#copy / create packages pkg1, pkg2, ...&#xA;cd $&lt;/span&gt;HOME/test_ws&#xA;catkin build&#xA;source devel/setup.bash&#xA;echo &lt;span class=&quot;math-container&quot;&gt;$ROS_PACKAGE_PATH # at this point, i would expect &#xA;#$&lt;/span&gt;HOME/test_ws/src:/opt/ros/melodic/share, instead i get&#xA;#&lt;span class=&quot;math-container&quot;&gt;$HOME/test_ws/src/pkg1:$&lt;/span&gt;HOME/test_ws/src/pkg2:/opt/ros/melodic/share&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Is this the normal behavior or am I doing something wrong here?&lt;/p&gt;&#xA;" OwnerUserId="23403" LastEditorUserId="9176" LastEditDate="2019-07-11T08:42:07.973" LastActivityDate="2021-04-01T11:02:05.173" Title="Sourcing catkin workspace populates ROS_PACKAGE_PATH with individual package paths" Tags="&lt;ros&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19064" PostTypeId="2" ParentId="19063" CreationDate="2019-07-11T07:36:55.637" Score="0" Body="&lt;p&gt;Seems like this is the expected behavior of &lt;code&gt;catkin build&lt;/code&gt; as stated on the  &lt;a href=&quot;https://robotics.stackexchange.com/questions/16604/ros-catkin-make-vs-catkin-build&quot;&gt;Migrating from catkin_make&lt;/a&gt; website:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;It generates .catkin files where &lt;strong&gt;each source package is listed, individually, instead of just listing the source space for the workspace&lt;/strong&gt;. This leads to similar ROS_PACKAGE_PATH variables which list each package source space.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If using the &lt;code&gt;catkin_make&lt;/code&gt;, however, it does add only the root/source path of the workspace, as i expected initially.&lt;/p&gt;&#xA;" OwnerUserId="23403" LastActivityDate="2019-07-11T07:36:55.637" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19065" PostTypeId="1" CreationDate="2019-07-11T13:30:45.400" Score="0" ViewCount="49" Body="&lt;p&gt;My question is how do obtain occupancy grid map given sensor data of a robot? . I searched a lot and concluded that by using proximity sensors (rangefinders, sonar) and putting that data in occupancy grid mapping algorithm one can obtain grid maps. Am i right in that or not? If not kindly correct me because still i am stuck at that point after a lot of literature search. &lt;/p&gt;&#xA;" OwnerUserId="22546" LastActivityDate="2019-07-22T20:54:10.063" Title="Mapping of unknown environment" Tags="&lt;mobile-robot&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19066" PostTypeId="2" ParentId="19062" CreationDate="2019-07-11T13:47:02.210" Score="0" Body="&lt;p&gt;It's returning &lt;code&gt;false&lt;/code&gt; because it's failing to set the joint angle. I would try to troubleshoot this by stepping through the different reasons it could fail.&lt;/p&gt;&#xA;&lt;p&gt;The first thing that I think of, especially when I see a &lt;code&gt;Get&amp;lt;something&amp;gt;()&lt;/code&gt; that has a string input, is that the name changed, isn't spelled correctly, etc. I would check first if you're actually getting a valid joint from your &lt;code&gt;GetJoint()&lt;/code&gt; command:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;if(joint==nullptr)&#xA;{&#xA;    std::cout&amp;lt;&amp;lt;&amp;quot;Joint not found!&amp;quot;&amp;lt;&amp;lt;std::endl;&#xA;}&#xA;else&#xA;{&#xA;    &amp;lt;your code here&amp;gt;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The next thing I would check is whether your joint has any degrees of freedom to actually move - that it's not fully constrained:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;if(joint.DOF()==0)&#xA;{&#xA;    std::cout&amp;lt;&amp;lt;&amp;quot;Joint has zero degrees of freedom!&amp;quot;&amp;lt;&amp;lt;std::endl;&#xA;}&#xA;else&#xA;{&#xA;    &amp;lt;your code here&amp;gt;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I can't see in the documentation what &lt;em&gt;units&lt;/em&gt; the inputs to &lt;code&gt;SetPosition()&lt;/code&gt; are, but &lt;code&gt;Position()&lt;/code&gt; returns &lt;em&gt;radians&lt;/em&gt; and I'm assuming that &lt;code&gt;SetPosition()&lt;/code&gt; is also expecting &lt;em&gt;radians&lt;/em&gt;. You're inputting &lt;code&gt;1.0&lt;/code&gt; &lt;em&gt;radians&lt;/em&gt;, which is about 60 degrees, so I don't know if there are some kinematic constraints that are preventing that rotation.&lt;/p&gt;&#xA;&lt;p&gt;Please do these checks and &lt;em&gt;edit your question&lt;/em&gt; to post the results.&lt;/p&gt;&#xA;&lt;h1&gt;:EDIT:&lt;/h1&gt;&#xA;&lt;p&gt;It looks like there's an &lt;a href=&quot;https://bitbucket.org/osrf/gazebo/issues/1913/cant-set-joint-state-when-using-simbody&quot; rel=&quot;nofollow noreferrer&quot;&gt;open bug&lt;/a&gt; for setting joint states when using SimBody, but it looks like maybe using ODE as the solver instead works.&lt;/p&gt;&#xA;&lt;p&gt;Also, there's &lt;a href=&quot;http://answers.gazebosim.org/question/12093/how-correctly-move-joints-by-setposition/&quot; rel=&quot;nofollow noreferrer&quot;&gt;another post&lt;/a&gt; that suggests using a joint controller and setting the joint position target instead of trying to set the joint position directly.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2019-07-11T21:05:30.100" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19067" PostTypeId="2" ParentId="19051" CreationDate="2019-07-12T09:08:01.157" Score="1" Body="&lt;p&gt;If your top priority is ROS compatibility and not performance, then I would go for the Hardware-ROS &quot;approved&quot; arm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my view, running ROS &quot;natively&quot; would mean that the robot has a Linux PC which has a ROS core raised and handles communication with its parts and with the outside world via ROS topics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, having only a ROS API would mean running whatever OS to coordinate sensors, actuators and tasks (or even go completely bare-metal RTOS), but have suitable communication libraries which allow reading and writing onto (specific) ROS topics.&lt;/p&gt;&#xA;" OwnerUserId="11500" LastActivityDate="2019-07-12T09:08:01.157" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19069" PostTypeId="1" AcceptedAnswerId="19072" CreationDate="2019-07-12T10:21:52.947" Score="0" ViewCount="25" Body="&lt;p&gt;With a deep neural network it's possible to convert a camera signal into the movement trajectory of a dexterous robotics hand.[1] In contrast to previous attempts in teleoperation, which are working with a dataglove or a joystick, the visual shape of the hand controls the robot. The human operator uses it's own hand to make a hand sign and the Shadow hand is doing the same action.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this setup, a human operator is in the loop, which means, it has nothing to do with Artificial Intelligence. A real AI system would control the robot with software, a motion planner and can grasp objects by it's own. If the sensor signals are taken from a human, the system is only semi-autonomous. Does this make sense if the aim is to program autonomous robots? Wouldn't it be better to program an AI which controls the hand autonomously?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[1] Li, Shuang, et al. &quot;Vision-based teleoperation of shadow dexterous hand using end-to-end deep neural network.&quot; arXiv preprint arXiv:1809.06268 (2018).&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2019-07-12T23:15:12.100" Title="Why was the Shadow robot hand been utilized for teleoperation?" Tags="&lt;hri&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19070" PostTypeId="1" CreationDate="2019-07-12T16:36:26.323" Score="0" ViewCount="76" Body="&lt;p&gt;&lt;a href=&quot;https://robotics.stackexchange.com/q/11749/7266&quot;&gt;This question&lt;/a&gt; talks about the depth error (&lt;span class=&quot;math-container&quot;&gt;$\Delta$&lt;/span&gt;Z) as a function of disparity error (&lt;span class=&quot;math-container&quot;&gt;$\Delta$&lt;/span&gt;D). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to do the same for &lt;code&gt;X&lt;/code&gt; and &lt;code&gt;Y&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How would we quantify &lt;span class=&quot;math-container&quot;&gt;$\Delta$&lt;/span&gt;X and &lt;span class=&quot;math-container&quot;&gt;$\Delta$&lt;/span&gt;Y w.r.t. &lt;span class=&quot;math-container&quot;&gt;$\Delta$&lt;/span&gt;D &lt;/p&gt;&#xA;" OwnerUserId="7266" LastActivityDate="2019-07-12T21:02:57.753" Title="disparity error to x and y accuracy" Tags="&lt;stereo-vision&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19071" PostTypeId="2" ParentId="19070" CreationDate="2019-07-12T19:01:13.983" Score="1" Body="&lt;p&gt;I think I understand the question - you're looking for how the 3D position of the object is affected if you have mis-judged the depth.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think the answer lies in considering the nature of the camera system - it's kind of like polar (spherical) coordinates being mapped to a plane, such that each pixel represents a particular azimuth and elevation angle. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your camera has a field of view of 60 degrees (+/- 30 degrees), then each pixel is going to represent some sliver of angle of your field of view, where the particular angular delta is the inverse of your resolution. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider this graphic:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/tHikz.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tHikz.png&quot; alt=&quot;Depth error&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Say you're looking at a house exterior (black) and the interior wall (red/green) through some open doors or windows. Red would be the incorrect depth estimate to the interior wall and green is the corrected estimate. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;:EDIT: - Totally botched the math earlier, so I rewrote the paragraph below:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since you're projecting your angular view onto that distance, the object in front of you has no x/y shift if you've estimated the depth wrong because &lt;span class=&quot;math-container&quot;&gt;$x = r\sin{\theta} = 0$&lt;/span&gt; if your &lt;span class=&quot;math-container&quot;&gt;$\theta = 0$&lt;/span&gt;, regardless of &lt;span class=&quot;math-container&quot;&gt;$r$&lt;/span&gt;. However, as your objects get more on the edge of your field of view, the look angle &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt; gets larger and your x/y estimates get worse.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;:EDIT: - I actually screwed up these equations originally. My mistake was starting with &lt;span class=&quot;math-container&quot;&gt;$x = z\cos{\theta}$&lt;/span&gt;, when it doesn't - it's &lt;em&gt;polar&lt;/em&gt;, which doesn't use &lt;span class=&quot;math-container&quot;&gt;$z$&lt;/span&gt;! It uses &lt;span class=&quot;math-container&quot;&gt;$r$&lt;/span&gt;! Consider then the relationship between &lt;span class=&quot;math-container&quot;&gt;$\Delta z$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\Delta r$&lt;/span&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/MNruJ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MNruJ.png&quot; alt=&quot;Delta z vs Delta r&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now you can see that &lt;span class=&quot;math-container&quot;&gt;$\Delta z$&lt;/span&gt; is the vertical/depth projection of the change in radial distance &lt;span class=&quot;math-container&quot;&gt;$\Delta r$&lt;/span&gt; (theta is defined as the look angle away from broadside):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\Delta z = \cos{\theta} \Delta r \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;which can be restated as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\Delta r = \frac{1}{\cos{\theta}} \Delta z \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Now&lt;/strong&gt; this makes more sense. By this definition, too, &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; is the horizontal projection of the radial distance, as stated above:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;x = r \sin{\theta} \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind that it &lt;em&gt;looks&lt;/em&gt; like the sine/cosine functions are flipped, but that's because the look angle is away from broadside/vertical. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Continuing on to the equations as they &lt;em&gt;should&lt;/em&gt; have been:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;x_{est} = r_{est} \sin{\theta} = \frac{1}{\cos{\theta}} z_{est} \sin{\theta} \\&#xA;x_{act} = r_{act} \sin{\theta} = \frac{1}{\cos{\theta}} z_{act} \sin{\theta} \\&#xA;\Delta x = x_{act}-x_{est} = \frac{1}{\cos{\theta}} z_{act} \sin{\theta} - \frac{1}{\cos{\theta}} z_{est} \sin{\theta} \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now you can reduce &lt;span class=&quot;math-container&quot;&gt;$\frac{1}{\cos{\theta}} \sin{\theta}$&lt;/span&gt; down to &lt;span class=&quot;math-container&quot;&gt;$\tan{\theta}$&lt;/span&gt; and continue along as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\Delta x = z_{act} \tan{\theta} - z_{est} \tan{\theta} \\&#xA;\Delta x = \Delta z \tan{\theta} \\&#xA;$$&lt;/span&gt;&#xA;where, from the question you linked,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\Delta z = \frac{z^2}{b f}\Delta D \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2019-07-12T21:02:57.753" LastActivityDate="2019-07-12T21:02:57.753" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19072" PostTypeId="2" ParentId="19069" CreationDate="2019-07-12T23:15:12.100" Score="1" Body="&lt;p&gt;Teleoperation is about letting the human do what humans do best, and letting the robot do what automation does best.  There are some situations in which it would take too long, or cost too much, to construct an effective AI system to do certain tasks.  Check out, for example, Betczy’s work at JPL, Sheridan’s at MIT, and Hamel’s at Oak Ridge.   The idea is to not need to program the entire human intelligence about the task, but instead allow the operator to respond to dynamic task scenarios as if they were present at the task, while taking advantage of the increased strength, stability, and the like from the robot. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As AI continues to progress, the line marking the efficiency of implementing telerobots vs complete automation will continue to move toward increasing amounts of automation.  But it will be very challenging to efficiently build an AI engine that can accommodate the unexpected things that a human can handle, in a reasonable amount of time, when the tasks are quite variable and in dynamic environments (think wartime, or catastrophic outside environments, or highly specialized surgeries).&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2019-07-12T23:15:12.100" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19073" PostTypeId="1" AcceptedAnswerId="19075" CreationDate="2019-07-13T06:27:47.580" Score="1" ViewCount="66" Body="&lt;p&gt;I'm using ROS melodic with Gazebo 9.9.0 on an Ubuntu 18.04.2 LTS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm implementing an autonomous node that uses A* algorithm to move a robot from one position to another. The robot will be on a Gazebo World.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My problem is when moves on diagonal, sometimes it hits a corner and can not continue moving.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, I want to move from cell (1,1) to cell(10,12). I'm using an ones and zeros grid that it is represented in Gazebo and I translate the cells into Gazebo world's locations. Moving from (1,1) to (10,12), I get this path:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The Path is -&gt; (1,1) -&gt; (2,2) -&gt; (3,3) -&gt; (4,4) -&gt; (4,5) -&gt; (5,6) -&gt;&#xA;  (6,6) -&gt; (7,6) -&gt; (8,7) -&gt; (9,7) -&gt; (10,7) -&gt; (11,7) -&gt; (12,8) -&gt;&#xA;  (11,9) -&gt; (11,10) -&gt; (10,11) -&gt; (10,12)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Cell (1,1) is the top most left cell in map. The problem comes when it tries to move from (4,5) to (5,6). In the following picture, the robot is on cell (4,5) facing to cell (5,6), and if it moves, it will hit the corner:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ZAGa2.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZAGa2.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the route given by the algorithm where you can see the diagonal step:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/RuXCL.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/RuXCL.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any way to solve this problem or this is a problem attached to A* algorithm?&lt;/p&gt;&#xA;" OwnerUserId="18173" LastEditorUserId="18173" LastEditDate="2019-07-14T06:43:20.733" LastActivityDate="2019-07-19T01:55:45.957" Title="Avoid to hit corners on diagonal steps using A* algorithm" Tags="&lt;ros&gt;&lt;automation&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19074" PostTypeId="1" CreationDate="2019-07-13T11:52:00.487" Score="0" ViewCount="46" Body="&lt;p&gt;I am trying to actuate a simple DC motor based on a wav file. At the moment I am using the &quot;cat vs dogs sounds&quot; from Kaggle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of the wav files in this DB looks like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/i9R9R.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/i9R9R.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These audio files are just a few seconds. The sample rate is 16KHz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My first idea was to just actuate the motor based on the amplitude, but at 16KHz this doesn't make any sense. Also, the signal goes constantly from + to - (this is sort of ok because the motor can move in both directions), but from a human POV, what the motor does doesnt make any sense, because the movements are too rapid. I then tried to &quot;decimate&quot; the signal into a few points per second, but the signals seem to be badly destroyed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DC motors are actuated using an Adafruit board, using Arduino, and then I have a Python script that interfaces with the Arduino through serial. I have this working fine, and I can make for example a loop from python that increases the speed every few seconds. My idea was to go forward or backwards based on the amplitude of the signal (if it is negative or positive), I am no expert on audio, so this might make no sense. I won't react to other sounds, only to the input wav files.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't really know what is the best way of transforming an audio signal of 16KHz into something that can be use to actuate a motor. At the moment I am using a DC motor, but the idea in the near future is to use leds instead, and change their intensity based on the audio signals&lt;/p&gt;&#xA;" OwnerUserId="4525" LastActivityDate="2020-08-09T07:37:25.437" Title="I want to actuate a motor based on a wav file, but it has too many samples per second" Tags="&lt;motor&gt;&lt;python&gt;&lt;digital-audio&gt;" AnswerCount="2" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="19075" PostTypeId="2" ParentId="19073" CreationDate="2019-07-13T12:33:15.120" Score="1" Body="&lt;p&gt;The simplest solution is not to allow your A* program to make diagonal steps.&lt;/p&gt;&#xA;" OwnerUserId="8842" LastActivityDate="2019-07-13T12:33:15.120" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19076" PostTypeId="1" CreationDate="2019-07-13T16:29:01.017" Score="1" ViewCount="91" Body="&lt;p&gt;I want to do path planning in dynamic environment in which obstacles keep changing. Could you suggest me good path planning algorithm for this? . Is D* algorithm suitable for me to achieve this in simulation?&lt;/p&gt;&#xA;" OwnerUserId="22546" LastActivityDate="2021-04-08T23:05:30.523" Title="Mapping of dynamic environment" Tags="&lt;mobile-robot&gt;" AnswerCount="1" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="19077" PostTypeId="2" ParentId="19011" CreationDate="2019-07-13T22:45:59.290" Score="1" Body="&lt;p&gt;The field of view can be shown to be&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\theta = 2 \tan^{-1} \frac{D}{2f}&#xA;$$&lt;/span&gt;&#xA;where &lt;span class=&quot;math-container&quot;&gt;$D$&lt;/span&gt; is the dimension of the sensor (width or height) and &lt;span class=&quot;math-container&quot;&gt;$f$&lt;/span&gt; is the focal length.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can derive this easily using similar triangles as in the figure below, where &lt;span class=&quot;math-container&quot;&gt;$\phi$&lt;/span&gt; is the half field of view.  Since the sensor is typically rectangular, do this twice (once for sensor width, once for height) to get the horizontal and vertical field of view angles.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/f60C3.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/f60C3.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="21223" LastEditorUserId="21223" LastEditDate="2019-07-14T11:46:44.257" LastActivityDate="2019-07-14T11:46:44.257" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19078" PostTypeId="2" ParentId="16535" CreationDate="2019-07-13T22:58:11.813" Score="2" Body="&lt;p&gt;Euler's rotation theorem states that:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Any two independent orthonormal coordinate frames can be related by a&#xA;  sequence of rotations (not more than three) about coordinate axes,&#xA;  where no two successive rotations may be about the same axis.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;That means there are a total of 12 rotation sequences possible, and we divide those into two groups of six. The Eulerian type involves repetition, but not successive, of rotations about one particular axis: XYX, XZX, YXY, YZY, ZXZ, or ZYZ. The Cardanian type is characterized by rotations about all three axes: XYZ, XZY, YZX, YXZ, ZXY, or ZYX.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a lot of inconsistency across the literature and many fields have their own specific conventions.  What are commonly called &quot;Euler angles&quot; in robotics are the ZYZ sequence -- this is really quite arbitrary but it's useful if we all agree on it!  Roll-pitch-yaw angles are of the Cardanian type and typically either XYZ or ZYX.  It seems XYZ is common for robot arms and ZYX for mobile robots.&lt;/p&gt;&#xA;" OwnerUserId="21223" LastActivityDate="2019-07-13T22:58:11.813" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19079" PostTypeId="2" ParentId="19034" CreationDate="2019-07-13T23:04:49.437" Score="1" Body="&lt;p&gt;@DavidJ is referring to sensors like the Kinect1, Asus Xtion, Intel SR300 which project a pattern of IR dots and observe the deformation with a monocular camera over a baseline.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Stereo cameras like the Intel D415 use stereo vision plus an IR pattern projector.  Stereo algorithms match patterns of pixels between the two views but if the surface is very plain, ie. a white wall, the matching fails.  The IR patter projector provides an artificial texture which allows the stereo to succeed.  With the RealSense SDK you can turn the projector on/off and see the difference in stereo performance.  The projector has a limited range but works well indoors where ambient IR from the sun is not a problem and where textureless surfaces are prevalent.  Outdoors, the projector is less effective (it has to compete with the sun) but the world is generally much more textured.&lt;/p&gt;&#xA;" OwnerUserId="21223" LastActivityDate="2019-07-13T23:04:49.437" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19080" PostTypeId="2" ParentId="19008" CreationDate="2019-07-13T23:08:44.123" Score="1" Body="&lt;p&gt;The &lt;a href=&quot;https://github.com/petercorke/robotics-toolbox-matlab&quot; rel=&quot;nofollow noreferrer&quot;&gt;Robotics Toolbox for MATLAB&lt;/a&gt; has a &lt;code&gt;CodeGenerator&lt;/code&gt; class which takes a serial-link robot model &lt;code&gt;SerialLink&lt;/code&gt; expressed in terms of Denavit-Hartenberg parameters and generates efficient C code for all the dynamic terms: mass matrix, Coriolis/centripetal and gravity.  It uses recursive Newton-Euler and the method of Orin and Walker, the equations are computed symbolically, simplified and then converted to C code.&lt;/p&gt;&#xA;" OwnerUserId="21223" LastActivityDate="2019-07-13T23:08:44.123" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19081" PostTypeId="2" ParentId="19073" CreationDate="2019-07-14T01:36:51.330" Score="1" Body="&lt;p&gt;ROS's &lt;a href=&quot;http://wiki.ros.org/costmap_2d&quot; rel=&quot;nofollow noreferrer&quot;&gt;costmap_2d&lt;/a&gt; allows you to inflate obstacles.  Typically, you inflate obstacles by at least half of the robot's width.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/OqFKS.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OqFKS.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;Inflated obstacles in light grey.  New path in blue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typically, occupancy grids like these are much finer resolution because they are obtained with a LIDAR sensor.  The map is stored as an array in memory similar to an image which allows you to perform operations like &lt;a href=&quot;https://docs.opencv.org/master/db/df6/tutorial_erosion_dilatation.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;erosion and dilation&lt;/a&gt; in OpenCV.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Inflating obstacles manually shouldn't be too hard or costly if your grid isn't too large.  You should first increase the resolution of your map as shown.&lt;/p&gt;&#xA;" OwnerUserId="110" LastEditorUserId="110" LastEditDate="2019-07-19T01:55:45.957" LastActivityDate="2019-07-19T01:55:45.957" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19082" PostTypeId="1" CreationDate="2019-07-14T04:04:58.680" Score="0" ViewCount="186" Body="&lt;p&gt;So in my lab, I am to create a rigid body tree robot that has an end effector that can be teleoperated by keyboard commands. I found a function called waitforbuttonpress that allowed me to give the user the ability to select a specific keyboard key and then use that key to change the position vector to a different value. I placed the inverse kinematics solver inside of the function below because I believed that the function would solve the new angle joints based off of every time the position of the end effector changed, though for some reason I am getting some error in the inverse kinematics solver saying: Error using trvec2tform Expected t to be an array with number of columns equal to 3. I am using the home configuration of the robot as input for the kinematic solver function. Any advice is welcome below is the entire code of both the rigid body system as well as the kinematic solver function.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;pbot = robotics.RigidBodyTree('DataFormat','column','MaxNumBodies',2);&#xA;&#xA;body1 = robotics.RigidBody('body1');&#xA;joint1 = robotics.Joint('jnt1','revolute');&#xA;joint1.JointAxis = [1 1 1];&#xA;setFixedTransform(joint1,trvec2tform([0 0 2]));&#xA;body1.Joint = joint1;&#xA;addBody(pbot,body1,'base')&#xA;&#xA;s0 = homeConfiguration(pbot);&#xA;weights = [0, 0, 0, 1, 1, 1];&#xA;ik = robotics.InverseKinematics('RigidBodyTree',pbot);&#xA;&#xA;sInitial = s0;&#xA;&#xA;disp(body1)&#xA;keyboard_move(s0);&#xA;&#xA;show(pbot)&#xA;&#xA;function keyboard_move(x)&#xA;k = waitforbuttonpress;&#xA;p = get(gcf, 'CurrentCharacter');&#xA;while p ~= 'q'&#xA;    if p == 'a'&#xA;        x = x + [0 -.1 .1];&#xA;        k = waitforbuttonpress;&#xA;        p = get(gcf, 'CurrentCharacter');&#xA;    elseif p == 's'&#xA;        x = x + [-.1 0 .1];&#xA;        k = waitforbuttonpress;&#xA;        p = get(gcf, 'CurrentCharacter');&#xA;    elseif p == 'd'&#xA;        x = x + [0 .1 .1];&#xA;        k = waitforbuttonpress;&#xA;        p = get(gcf, 'CurrentCharacter');&#xA;    elseif p == 'w'&#xA;        x = x + [.1 0 .1];&#xA;        k = waitforbuttonpress;&#xA;        p = get(gcf, 'CurrentCharacter');&#xA;    else&#xA;        fprintf(&quot;Please enter a correct key: 'a', 's', 'd', 'w'&quot;)&#xA;    end&#xA;    mover = ik('body1',trvec2tform([0 0 1 + x]), weights, s0);&#xA;    sInitial = mover;&#xA;end&#xA;end&#xA;&#xA;&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="23418" LastEditorUserId="17029" LastEditDate="2019-07-15T15:36:08.910" LastActivityDate="2021-05-05T22:02:55.293" Title="How do you control the end effector of a rigid body system using keyboard keys?" Tags="&lt;matlab&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19083" PostTypeId="1" CreationDate="2019-07-15T01:19:47.267" Score="4" ViewCount="153" Body="&lt;p&gt;Say the only computer skill you have is programming in C/C++...what all things would you have to learn in order to be an adept full stack roboticist, one who can single-handedly build an autonomous/AI robot from the ground up(hardware, firmware, and software). How would you build your curriculum? Do you know any free or cheap online resources that can teach those things?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to learn this field deeply but have a hard time starting. Thanks&lt;/p&gt;&#xA;" OwnerUserId="23423" LastActivityDate="2019-07-15T22:24:36.920" Title="How Can A Total Beginner Become A Skilled Roboticist?" Tags="&lt;c++&gt;&lt;artificial-intelligence&gt;&lt;c&gt;&lt;autonomous-car&gt;&lt;beginner&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19084" PostTypeId="2" ParentId="19083" CreationDate="2019-07-15T02:48:29.907" Score="4" Body="&lt;p&gt;Robotics is a mixture of things like mechanical engineering, electronics engineering and software engineering! Knowing C++ is a big head start in this area! Because I strongly believe that amongst all three engineering categories software is the one thing you will spend the most time on when developing an autonomous robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So to start, learn computer-aided design! So you can design mechanical components. I recommend Solidworks! There are also other software like Inventor and Creo that you can use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The mechanical design component of building a robot will be a very iterative process, you can keep modifying your design until you are happy with it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The best way to start off with electronics I think is to purchase an Arduino kit or a Raspberry Pi kit. Then follow along with tutorials that are online. Trust me there are heaps! This will help you understand how to program electronic components, and how to select them. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then you will need a great deal of knowledge about electronics. How to select actuators, batteries, the right sensors and how to integrate all of them in the most effective way. You can learn about how to do these by posting on forums such as this, or doing some googling. So once you have a mechanical design, put together a simple block diagram of components. Once you have this, select the right components and draw up a simple wiring diagram. Once you have this, wire it up using a breadboard and test if the components work through an Arduino code or a python script on an RPi. Once you are more confident, start with a Vero board design. If you would like to be more advanced pickup a software like Eagle CAD and design your wiring as a Printed Circuit Board and send it off to China for low volume manufacture. Designing a PCB reduces so much wiring you will have to do and will reduce the amount of wasted space, also makes it easy to fault find.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding the software or algorithms, I would recommend reading some research papers about the relevant topics you are interested in to understand the concepts. You can find these on google scholar or research gate. Another great platform to learn robotics is &lt;a href=&quot;https://robotacademy.net.au/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Peter Corke's Robot Academy&lt;/a&gt;. He goes through some of the most basic yet important and advanced robotics concepts and related mathematics. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since you already know C++ I highly recommend using ROS. Within ROS you can model, and simulate your robot in RViz. You could write several scripts to simulate algorithms for Simultaneous Localisation and Mapping, Obstacle avoidance, A star path planning, etc. This will help you understand the algorithms quicker because you are actually practicing the concepts. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are some links to learn ROS that I have used in the past.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://levi-armstrong.github.io/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://levi-armstrong.github.io/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://docs.ros.org/kinetic/api/moveit_tutorials/html/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://docs.ros.org/kinetic/api/moveit_tutorials/html/index.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding hardware for autonomous robots:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These robots mainly require a mechanical design for steering, batteries, actuators and sensors. Learn more about the different kinds of steering mechanisms for mobile robots such as Ackermann Steering, Omni Directional Steering, Mechanum Wheeles steering, etc. This will help you with the mechanical design, given that you are planning to build a ground-based robot. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then spend some time thinking about how the robot will sense the world it's in. This could be done by LIDARS, SONARS, IMUs, Encoders, Cameras, Stereo Cameras, etc. Once you have the sensing capability/capabilities chosen, you can select which exact algorithms to use. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, you might want to equip yourself with some tools such as a 3D Printer, hand tools, power tools, soldering iron, multimeter, and a benchtop power supply and perhaps a low-cost oscilloscope. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope all of this helps!&lt;/p&gt;&#xA;" OwnerUserId="23050" LastActivityDate="2019-07-15T02:48:29.907" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19086" PostTypeId="2" ParentId="19074" CreationDate="2019-07-15T05:58:25.083" Score="1" Body="&lt;p&gt;You want to feed a lot of data to a slow consumer. Of course, you need to adapt somehow the two ends. I see the following options.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;You decide a sample frequency to feed data to the motor, suitable to the motor. The .wav file plays normally, when the time comes, you feed to the motor whatever sample happens to be current. Almost 100% that you will violate the Nyquist law, and whatever gets to the motor is &amp;quot;random&amp;quot; data.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You apply low-pass filter to the .wav file, with a cut frequency adjusted according to the Nyquist law to the sampling frequency for feeding the motor. The data fed to the motor will be highly simplified, but somehow still related to the original stream.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You play the .wav file at a speed which the motor can handle. I mean, you deliver all samples, but at (e.g.) 50Hz instead of 16kHz.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="22248" LastEditorUserId="22248" LastEditDate="2020-08-09T07:37:25.437" LastActivityDate="2020-08-09T07:37:25.437" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19087" PostTypeId="1" CreationDate="2019-07-15T07:54:29.840" Score="0" ViewCount="88" Body="&lt;p&gt;I try to simulate a robot, but with a GUI. I can make a simulation using pyopengl to simulate the movement of robot, but I cannot make the GUI with that. I need to make it easier to simulate, analyze, communicate and run the robot (and simulation).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My app so far :&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Using python for image processing and communication with the robot&lt;/li&gt;&#xA;&lt;li&gt;Using pyopengl to simulate 3D&lt;/li&gt;&#xA;&lt;li&gt;Using matplotlib to display the log of robot movement&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Is there any advice on how to create an app that is able to simulate, analyze, communicate and run in compact design?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/KaJu2.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KaJu2.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My current app has no button and hard to analyze. &lt;/p&gt;&#xA;" OwnerUserId="22800" LastEditorUserId="22248" LastEditDate="2019-07-15T09:53:24.270" LastActivityDate="2019-07-18T07:35:21.877" Title="Simulating a robot" Tags="&lt;robotic-arm&gt;&lt;simulation&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="19088" PostTypeId="1" AcceptedAnswerId="19093" CreationDate="2019-07-15T08:31:09.310" Score="4" ViewCount="89" Body="&lt;p&gt;I am trying to compute dynamics of 3 DOF robot using Robotics Toolbox by executing this code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;robot.accel(q, zeros(1,3), zeros(1,3))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But I am getting this error: Assignment has more non-singleton rhs dimensions than non-singleton subscripts&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My robot is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;L(1)= Link([0 0.03 0 -pi/2]);&#xA;L(2)= Link([0 0 0.28 0]);&#xA;L(3)= Link([0 0 0.2 0]);&#xA;L(1).m = 1;&#xA;L(2).m = 4;&#xA;L(3).m = 3;&#xA;L(1).r=[0 0 -0.015];&#xA;L(2).r=[0.14 0 0];&#xA;L(3).r=[0.1 0 0];&#xA;&#xA;ax1=0.03; ay1=0.03; az1=0.03;&#xA;ax2=0.28; ay2=0.05; az2=0.05;&#xA;ax3=0.2; ay3=0.05; az3=0.05;&#xA;I1=1/12*[ay1^2+az1^2 0 0; 0 ax1^2+az1^2 0; 0 0 ax1^2+ay1^2];&#xA;I2=4/12*[ay2^2+az2^2 0 0; 0 ax2^2+az2^2 0; 0 0 ax2^2+ay2^2];&#xA;I3=3/12*[ay3^2+az3^2 0 0; 0 ax3^2+az3^2 0; 0 0 ax3^2+ay3^2];&#xA;L(1).I=I1;&#xA;L(2).I=I2;&#xA;L(3).I=I3;&#xA;&#xA;q=[0 0 0]&#xA;&#xA;robot=SerialLink(L);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="23425" LastActivityDate="2019-07-15T22:08:49.463" Title="3-DOF Robot Dynamics error in Robotics Toolbox" Tags="&lt;robotic-arm&gt;&lt;matlab&gt;&lt;dynamics&gt;&lt;simulator&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19089" PostTypeId="2" ParentId="19076" CreationDate="2019-07-15T12:34:54.613" Score="0" Body="&lt;p&gt;Have you considered using the &lt;a href=&quot;http://www-personal.umich.edu/~johannb/Papers/paper16.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Vector Field Histogram&lt;/a&gt; (VFH) algorithm for path planning in an environment with dynamic obstacles?&lt;/p&gt;&#xA;" OwnerUserId="23050" LastActivityDate="2019-07-15T12:34:54.613" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19091" PostTypeId="2" ParentId="19082" CreationDate="2019-07-15T18:20:06.267" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;for some reason I am getting some error in the inverse kinematics solver saying: &lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;code&gt;Error using trvec2tform Expected t to be an array with number of columns equal to 3.&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Correct - you're not providing an array to &lt;code&gt;trvec2tform&lt;/code&gt; with number of columns equal to 3. You're not using any punctuation (COMMAS!) in your vector definitions, which makes my eye twitch, and Matlab's also having a hard time with it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's not clear what &lt;code&gt;x&lt;/code&gt; is, since it's an input to your function, but when you use it on other lines you've got it as &lt;code&gt;x = x + [dx dy dz]&lt;/code&gt; (I'm assuming) &lt;em&gt;However&lt;/em&gt;, when you use it as an input to &lt;code&gt;trvec2tform&lt;/code&gt;, you're not doing &lt;code&gt;x + [something]&lt;/code&gt;, you're doing &lt;code&gt;[something + x]&lt;/code&gt;, all together &lt;em&gt;in the same square brackets.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That is, you're including what appears to be a positive &lt;code&gt;x&lt;/code&gt;, i.e., &lt;code&gt;+ x&lt;/code&gt; in the &quot;fourth column&quot; position, because you're using whitespace as your delimiter in your vector definition. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, if your &lt;code&gt;x&lt;/code&gt; vector is an accumulation of little steps, say &lt;code&gt;x = [Dx Dy Dz]&lt;/code&gt;, and you're trying to pass some initial positions &lt;code&gt;[x0 y0 z0]&lt;/code&gt; plus your accumulation of steps, then what you are telling Matlab is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[x0 y0 z0 + x]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Which Matlab is interpreting as:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[x0 y0 z0 +Dx +Dy +Dz]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where you appear to instead mean:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[x0 y0 z0] + x&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;which Matlab would the interpret as:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[x0 + Dx, y0 + Dy, z0 + Dz];&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The line I wrote above would work fine because I included commas, so it's clear to Matlab where the columns are broken up, &lt;strong&gt;however even if you put commas in&lt;/strong&gt; as-is, you would see that there's no clear way to interpret what you've written, i.e.:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[x0, y0, z0 + x]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;would probably be interpreted as:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[x0, y0, z0 + Dx, z0 + Dy, z0 + Dz];&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;There's no way to include that &lt;code&gt;x&lt;/code&gt; term &lt;em&gt;inside the definition&lt;/em&gt; of your origin vector (which again is what I'm assuming the &lt;code&gt;[0 0 1]&lt;/code&gt; is meant to be). &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2019-12-12T20:32:34.377" LastActivityDate="2019-12-12T20:32:34.377" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19093" PostTypeId="2" ParentId="19088" CreationDate="2019-07-15T22:08:49.463" Score="1" Body="&lt;p&gt;This is not a great error message and it only happens if you are using the MATLAB rather than the (100x) faster MEX version of the dynamics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The error occurs because the motor inertias are not set, and they default to []. To fix this I ran this code after the robot was defined&lt;/p&gt;&#xA;&#xA;&lt;pre class=&quot;lang-matlab prettyprint-override&quot;&gt;&lt;code&gt;&amp;gt;&amp;gt; for i=1:3&#xA;robot.links(i).Jm = 0;&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;but you could build it into your initialisation code. The acceleration is&lt;/p&gt;&#xA;&#xA;&lt;pre class=&quot;lang-matlab prettyprint-override&quot;&gt;&lt;code&gt;&amp;gt;&amp;gt; robot.accel(q, zeros(1,3), zeros(1,3))&#xA;&#xA;ans =&#xA;&#xA;   -0.0000&#xA;   22.6479&#xA;  -11.5237&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="21223" LastActivityDate="2019-07-15T22:08:49.463" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19094" PostTypeId="2" ParentId="19083" CreationDate="2019-07-15T22:24:36.920" Score="3" Body="&lt;p&gt;There are a few dimensions to being a roboticist:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;is knowledge of theory about robot perception (understanding the world through sensors such as cameras, signal processing and machine learning), planning(how the robot should move) and action (how things move in space, kinematics, dynamics, control theory, reinforcement learning etc.). There are a lot of resources aimed at school/hobbyist level or at graduates, not much in between.  I would humbly suggest you take a look at the &lt;a href=&quot;https://robotacademy.net.au&quot; rel=&quot;nofollow noreferrer&quot;&gt;QUT Robot Academy&lt;/a&gt; which is over 200 free online video lessons on a range of topics around arm robots and vision which are aimed at university undergraduates and would at least build understanding of some technical concepts and get you started on the road to becoming a roboticist.&lt;/li&gt;&#xA;&lt;li&gt;is what I think of the craft or skill, being able to code and these days also being familiar with commonly used tools such as Python, C++, OpenCV, PCL, ROS, Tensorflow/Torch etc. @JJerome's post has good links to ROS resources.&lt;/li&gt;&#xA;&lt;li&gt;an awareness of the ethics and societal impact of what you are doing.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="21223" LastActivityDate="2019-07-15T22:24:36.920" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19095" PostTypeId="1" CreationDate="2019-07-16T17:56:55.133" Score="1" ViewCount="26" Body="&lt;p&gt;I need to make the navigation and guidance of a vehicle (a quadcopter) in a platform. This platform can be seen like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/jeJ34.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/jeJ34.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where the blue dots are the center of each square, and the &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; distances are all the same, and the &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt; distances are all the same.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need the distance between each blue dot to the center (the blue dot of the &lt;span class=&quot;math-container&quot;&gt;$(2;2)$&lt;/span&gt;), but that distance depends on the &lt;span class=&quot;math-container&quot;&gt;$yaw$&lt;/span&gt; angle. For example, if &lt;span class=&quot;math-container&quot;&gt;$yaw=0^\circ$&lt;/span&gt;, the situation is like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/QGwlE.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QGwlE.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and the distances are:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$d_{1;1} = (-d_x; -d_y)$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$d_{1;2} = (-d_x; 0)$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$d_{1;3} = (-d_x; d_y)$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$d_{2;1} = (0; -d_y)$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$d_{2;2} = (0; 0)$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$d_{2;3} = (0; d_y)$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$d_{3;1} = (d_x; -d_y)$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$d_{3;2} = (d_x; 0)$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$d_{3;3} = (d_x; d_y)$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the situation is with &lt;span class=&quot;math-container&quot;&gt;$yaw=180^\circ$&lt;/span&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Y0A6P.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Y0A6P.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;the distances are the same but with the opposite sign, i.e,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$d_{1;1} = (d_x; d_y)$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$d_{1;2} = (d_x; 0)$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$d_{1;3} = (d_x; -d_y)$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$d_{2;1} = (0; d_y)$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$d_{2;2} = (0; 0)$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$d_{2;3} = (0; -d_y)$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$d_{3;1} = (-d_x; d_y)$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$d_{3;2} = (-d_x; 0)$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$d_{3;3} = (-d_x; -d_y)$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If &lt;span class=&quot;math-container&quot;&gt;$yaw=90^\circ$&lt;/span&gt;, the situation is like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/B6a8b.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/B6a8b.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and the distances (see the difference between &lt;span class=&quot;math-container&quot;&gt;$d_x$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$d_y$&lt;/span&gt;) would be:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$d_{1;1} = (-d_y; d_x)$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$d_{1;2} = (-d_y; 0)$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$d_{1;3} = (-d_y; d_x)$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$d_{2;1} = (0; -d_x)$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$d_{2;2} = (0; 0)$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$d_{2;3} = (0; d_x)$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$d_{3;1} = (d_y; -d_x)$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$d_{3;2} = (d_y; 0)$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$d_{3;3} = (d_y; d_x)$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If &lt;span class=&quot;math-container&quot;&gt;$yaw = -90^\circ$&lt;/span&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/6Zk2f.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6Zk2f.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;the distances would be:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$d_{1;1} = (d_y; d_x)$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$d_{1;2} = (d_y; 0)$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$d_{1;3} = (d_y; -d_x)$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$d_{2;1} = (0; d_x)$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$d_{2;2} = (0; 0)$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$d_{2;3} = (0; -d_x)$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$d_{3;1} = (-d_y; d_x)$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$d_{3;2} = (-d_y; 0)$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$d_{3;3} = (-d_y; -d_x)$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need to write a matrix that uses the information of the &lt;span class=&quot;math-container&quot;&gt;$yaw$&lt;/span&gt; angle and returns the distances from each angle (not just 0, 90, -90 and 180, but also 1, 2, 3, ...)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried to write it but I couldn't find the solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you very much. I really need this help&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: please note that the coordinate frame moves with the quadcopter, like in this image:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Vge0h.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Vge0h.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit 2: for example, if &lt;span class=&quot;math-container&quot;&gt;$yaw=45^\circ$&lt;/span&gt;, then the distance from &lt;span class=&quot;math-container&quot;&gt;$(3;3)$&lt;/span&gt; to &lt;span class=&quot;math-container&quot;&gt;$(2;2)$&lt;/span&gt; is &lt;span class=&quot;math-container&quot;&gt;$\sqrt{d_x^2+d_y^2}$&lt;/span&gt; in &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$0$&lt;/span&gt; in &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt;.&lt;/p&gt;&#xA;" OwnerUserId="23438" LastActivityDate="2019-07-16T23:11:38.770" Title="Transform this matrix of distances into a more general one" Tags="&lt;control&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19096" PostTypeId="1" CreationDate="2019-07-16T22:14:57.897" Score="2" ViewCount="82" Body="&lt;p&gt;As shown in the &lt;strong&gt;figure&lt;/strong&gt;, there are objects of arbitrary shapes placed on the surface of the sphere at arbitrary locations. The problem is to search the surface to locate these objects in most efficient manner. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assumptions: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;For simplicity, the sphere is half in size&lt;/li&gt;&#xA;&lt;li&gt;The points(X,Y,Z) on the surface of the sphere are labelled as &lt;em&gt;occcupied&lt;/em&gt; or &lt;em&gt;not occupied&lt;/em&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The naive approach to solve this problem is to scan the entire 3D surface of the sphere and find the occupied regions. But the complexity of this search would be whole area(&lt;code&gt;2πr^2&lt;/code&gt;). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, what would be the efficient approach to locate all the objects in terms of time complexity of the algorithm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any useful insights would be helpful.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/S7IOb.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/S7IOb.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="21312" LastEditorUserId="21312" LastEditDate="2019-07-16T23:42:33.617" LastActivityDate="2019-07-17T21:52:21.957" Title="Efficient sphere surface area search" Tags="&lt;computer-vision&gt;&lt;algorithm&gt;&lt;geometry&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19097" PostTypeId="2" ParentId="19095" CreationDate="2019-07-16T23:11:38.770" Score="1" Body="&lt;p&gt;Place a fixed coordinate system at the upper left corner of your grid, with the x axis pointing down and y to the right.   Call this the 0 coordinate system.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Imagine the origin of the moving coordinate system to be located at the origin of the 0 coordinate system.  Unfortunately you have defined that coordinate system to have the x axis pointing up, and the y axis pointing to the left.  We’ll handle that, but the math would be a bit simpler if the coordinate systems were aligned when &lt;span class=&quot;math-container&quot;&gt;$yaw = 0$&lt;/span&gt;.  Call the moving coordinate system the 1 system. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Define a rotation matrix &lt;span class=&quot;math-container&quot;&gt;$R_{01}$&lt;/span&gt;, where &lt;span class=&quot;math-container&quot;&gt;$$ \vec {p_1} = R_{01} \vec {p_0}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The above equation, then, can be used to map vectors from the 0 coordinate system (your grid) to vectors in the rotating coordinate system.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beginning kinematics can be used to find that&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;  R_{01} =  \begin{bmatrix}&#xA;    - \cos(yaw) &amp;amp; \sin(yaw) \\&#xA;    - \sin(yaw) &amp;amp; - \cos(yaw) \\&#xA;    \end{bmatrix}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that each element’s sign would be the opposite of what it is above had the two coordinate systems aligned when &lt;span class=&quot;math-container&quot;&gt;$yaw = 0$&lt;/span&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Vector math gives:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$x_1 = - \cos(yaw) x_0 + \sin(yaw) y_0$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$y_1 = - \sin(yaw) x_0 - \cos(yaw) y_0$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where &lt;span class=&quot;math-container&quot;&gt;$x_0$&lt;/span&gt; is what you call &lt;span class=&quot;math-container&quot;&gt;$d_x$&lt;/span&gt;, and &lt;span class=&quot;math-container&quot;&gt;$y_0$&lt;/span&gt; is your &lt;span class=&quot;math-container&quot;&gt;$d_y$&lt;/span&gt;.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2019-07-16T23:11:38.770" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="19100" PostTypeId="2" ParentId="18433" CreationDate="2019-07-17T12:25:15.810" Score="2" Body="&lt;p&gt;I think what you said in your question is correct so far.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Single and multi query planning refers to the number of planning tasks you are about to execute. That means, the number of different paths you want to plan, given an unchanging environment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PRM constructs a graph-structure (roadmap) of the free configuration space. Instead of exploring the c space every time you plan a path like RRT does, PRM is able to use the generated roadmap multiple times as long as the environment it is based on does not change.&lt;/p&gt;&#xA;" OwnerUserId="23442" LastEditorUserId="37" LastEditDate="2019-07-17T14:14:28.527" LastActivityDate="2019-07-17T14:14:28.527" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19103" PostTypeId="1" AcceptedAnswerId="19104" CreationDate="2019-07-17T20:14:32.670" Score="1" ViewCount="148" Body="&lt;p&gt;I am trying to understand the difference between joint torque sensors, and force sensors, in a robot arm. From what I understand, joint torque sensors estimate the torque at each joint, whereas a force sensor estimates the joint at the end-effector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But isn't it true that you can use the joint torque sensors to estimate the force at the end-effector, using forward kinematics? And if so, then why would you need to use a force sensor, if you already have joint torque sensors? Or would you typically only have one, i.e. only a set of joint torque sensors, or only a single force sensor?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason I am questioning this is that at &lt;a href=&quot;https://blog.robotiq.com/robotiq-ebook-summary-force-sensors-in-robotics-research&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://blog.robotiq.com/robotiq-ebook-summary-force-sensors-in-robotics-research&lt;/a&gt;, it says:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Force sensors are designed to detect forces applied between their base and sensing plate&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;But then at &lt;a href=&quot;https://studywolf.wordpress.com/2013/09/02/robot-control-jacobians-velocity-and-force/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://studywolf.wordpress.com/2013/09/02/robot-control-jacobians-velocity-and-force/&lt;/a&gt;, it says:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Jacobians allow us a direct way to calculate what the control signal is in the space that we control (torques), given a control signal in one we don’t (end-effector forces)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Therefore, it seems to me that joint torque sensors and force sensors do the same thing, and you would never need both of them. Is this correct? Or do they play complimentary roles?&lt;/p&gt;&#xA;" OwnerUserId="8880" LastActivityDate="2019-07-17T21:15:53.983" Title="Joint torque sensor vs end-effector force sensor" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;sensors&gt;&lt;kinematics&gt;&lt;dynamics&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19104" PostTypeId="2" ParentId="19103" CreationDate="2019-07-17T21:15:53.983" Score="3" Body="&lt;p&gt;If everything were ideal, then your thinking is correct. In practice, though, there are many accumulated errors both in the sensors and in the real vs modelled Jacobian. So if what you care about most is force applied at the end-effector then it is much more accurate to have a sensor located at the end effector. Unfortunately that would also add weight, and possible be more expensive, so for practical reasons you may only have joint torque sensors even though it's less accurate.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2019-07-17T21:15:53.983" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19105" PostTypeId="2" ParentId="19096" CreationDate="2019-07-17T21:44:12.617" Score="1" Body="&lt;p&gt;I suppose this is a question of what is &quot;most efficient&quot; and what are you actually doing? And how are you going about simulating it? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are you looking for a mathematical proof of how to find all infinite points on the surface of a sphere? Do you have a specific amount of points to look for, like only 200 scattered around the surface and need to find the shortest path to look at each one to find a value such as &lt;strong&gt;O&lt;/strong&gt; or &lt;strong&gt;NO&lt;/strong&gt; ? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;One is a mathematical thesis, the other is a path planning problem....&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How are you scanning? Is this just a matter of querying 200 sensors with an MCU? This would be microseconds of calculation time simply querying a table of sensors giving back answers of true or false...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Going under several assumptions:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;You can Approximate your sphere with a polygonal mesh&lt;/li&gt;&#xA;&lt;li&gt;&quot;Efficiency&quot; means: The least amount of time looking for &lt;strong&gt;O&lt;/strong&gt; or &lt;strong&gt;NO&lt;/strong&gt; While physically scanning with some kind of rotating optical sensor...camera?&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;As such you need to be time and energy efficient. &lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;You only need to scan each point once.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I did this analysis using &lt;a href=&quot;https://www.wolfram.com/mathematica/&quot; rel=&quot;nofollow noreferrer&quot;&gt;mathematica&lt;/a&gt; and &lt;a href=&quot;https://github.com/szhorvat/IGraphM&quot; rel=&quot;nofollow noreferrer&quot;&gt;igraphm&lt;/a&gt; (which you can get for &lt;a href=&quot;https://www.wolfram.com/raspberry-pi/&quot; rel=&quot;nofollow noreferrer&quot;&gt;free for a raspberry pi&lt;/a&gt;, but the methods are applicable  to other softwares. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;First generate an approximate sphere with 200 points, Create a DelaunayMesh Graph to generate vertices and paths between them. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;pts = SpherePoints[200];&#xA;mesh = DelaunayMesh[pts];&#xA;path = IGDelaunayGraph[pts]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/VgySQ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/VgySQ.png&quot; alt=&quot;picture&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Add weights to each edge between the vertexes based on euclidean distances&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;wg = IGDistanceWeighted[path]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Generate a &lt;a href=&quot;https://en.wikipedia.org/wiki/Hamiltonian_path&quot; rel=&quot;nofollow noreferrer&quot;&gt;Hamilton path&lt;/a&gt; between each vertex based on the distance weights, &#xA;A Hamilton Cycle could alternatively be generated via &lt;code&gt;FindHamiltonianCycle[]&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;way = FindHamiltonianPath[wg]&#xA;&#xA;{28, 41, 54, 67, 80, 93, 106, 85, 72, 59, 46, 33, 20, 12, 25, 38, 51, &#xA;64, 77, 90, 111, 98, 119, 132, 145, 158, 171, 184, 192, 197, 200, &#xA;195, 187, 179, 166, 153, 140, 127, 114, 101, 122, 135, 148, 161, 174, &#xA;182, 169, 156, 143, 130, 117, 96, 109, 88, 75, 62, 49, 36, 23, 15, 7, &#xA;2, 5, 10, 18, 31, 44, 57, 70, 83, 104, 91, 112, 125, 138, 151, 164, &#xA;177, 190, 198, 193, 185, 172, 159, 146, 133, 120, 99, 78, 65, 52, 39, &#xA;26, 13, 21, 34, 47, 60, 73, 86, 107, 94, 115, 128, 141, 154, 167, &#xA;180, 188, 175, 162, 149, 136, 123, 102, 81, 68, 55, 42, 29, 16, 8, 3, &#xA;11, 24, 37, 50, 63, 76, 89, 110, 97, 118, 131, 144, 157, 170, 183, &#xA;191, 196, 199, 194, 186, 178, 165, 152, 139, 126, 113, 92, 105, 84, &#xA;71, 58, 45, 32, 19, 27, 40, 53, 66, 79, 100, 87, 74, 61, 48, 35, 22, &#xA;14, 6, 1, 4, 9, 17, 30, 43, 56, 69, 82, 103, 124, 137, 150, 163, 176,&#xA;189, 181, 168, 155, 142, 129, 116, 95, 108, 121, 134, 147, 160, 173}&#xA;&#xA;HighlightGraph[path, PathGraph[way3]]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/8db24.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8db24.png&quot; alt=&quot;final path&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The final path between each point to scan....these points can now be programmed into your scanning device..the logic if something is at any one coordinate and it is &lt;strong&gt;O&lt;/strong&gt; or &lt;strong&gt;NO&lt;/strong&gt; and if the cycle should be broken off at this point, or just continue looking forever is up to the reader. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However this would be the method I would go about scanning things when it's required to find the shortest distance and least time.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope this is a method you're looking for...if this is a mathematical kind of question, I would suggest asking at &lt;a href=&quot;https://maths.stackexchange.com&quot;&gt;maths.se&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This of course can be scaled up to any number of points, depending on the &quot;resolution&quot; you're looking for...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's 1000 and the appropriate path to follow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gHSmD.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gHSmD.png&quot; alt=&quot;1000sds&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="23148" LastEditorUserId="23148" LastEditDate="2019-07-17T21:52:21.957" LastActivityDate="2019-07-17T21:52:21.957" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19106" PostTypeId="2" ParentId="18302" CreationDate="2019-07-18T01:39:20.870" Score="0" Body="&lt;p&gt;I've been using a Roomba 535 for years with Raspberry Pi and have not found a way to keep it awake. It still streams sensor data if set to. I just have a function called (wake) that I call every before I ask it to do anything. It pulses that wake pin, sends the start command (128 maybe? I forget), then sets the mode to safe mode. then back to my program. It doesn't have to run every 5 min 24/7  - just right before you need it. Work in progress but I'm slowly updating my website with some documentation about my Roomba and other robot projects www.lloydbrombach.com&lt;/p&gt;&#xA;" OwnerUserId="23448" LastActivityDate="2019-07-18T01:39:20.870" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19107" PostTypeId="1" CreationDate="2019-07-18T03:48:36.800" Score="0" ViewCount="46" Body="&lt;p&gt;While doing bench testing of motor and prop combinations what simple device would I use in the circuit to properly control the ESC for the full range of power from 0% to 100% ?&#xA;I have seen a few videos where bench testing is demonstrated to measure the thrust and power usage of a brushless motor and propeller. Typically the control of the ESC is done with a very small device attached to the ESC? What is that device? (I find it hard to believe it as simple as a rheostat, or is it?)&lt;/p&gt;&#xA;" OwnerUserId="23431" LastActivityDate="2021-04-10T17:08:40.787" Title="What control circuit element will control an ESC while doing bench testing?" Tags="&lt;brushless-motor&gt;&lt;esc&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19109" PostTypeId="2" ParentId="19087" CreationDate="2019-07-18T07:35:21.877" Score="-1" Body="&lt;p&gt;It sounds like what you want to do is all contained within ROS (&lt;a href=&quot;http://www.ros.org/about-ros/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.ros.org/about-ros/&lt;/a&gt;). There is lots of functionality already with ROS, but it is really good for simulation, communication between hardware, etc. You can still write your codes in python, but all the things you want to do are massively simplified. &lt;/p&gt;&#xA;" OwnerUserId="23450" LastActivityDate="2019-07-18T07:35:21.877" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19110" PostTypeId="2" ParentId="18487" CreationDate="2019-07-18T08:45:24.740" Score="1" Body="&lt;p&gt;Depending on the motor type, you may be able to freewheel the motor. With a brushed DC motor this could be achieved with most commercial H-bridges, controlled with fast current decay. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Flyback diodes allow the inductive current in the motor to be dumped back through it and dissipated, or you can control the MOSFETs in the H-bridge to dump current to ground.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From your description it will be a significant amount of current, but it should be possible. &lt;/p&gt;&#xA;" OwnerUserId="23450" LastActivityDate="2019-07-18T08:45:24.740" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19112" PostTypeId="1" CreationDate="2019-07-18T14:58:54.933" Score="0" ViewCount="28" Body="&lt;p&gt;I want to build a simple arm that can generate a pressure on a small object (a force of 50-100 gram is enough) and let go of it very quickly. Which motor can be used for this? &lt;/p&gt;&#xA;" OwnerUserId="23453" LastEditorUserId="23453" LastEditDate="2019-07-19T10:09:02.747" LastActivityDate="2019-07-19T10:09:02.747" Title="Which motor is suitable for generating a constant pressure on objects?" Tags="&lt;robotic-arm&gt;&lt;motor&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19113" PostTypeId="1" AcceptedAnswerId="19164" CreationDate="2019-07-18T15:02:17.087" Score="3" ViewCount="268" Body="&lt;p&gt;I'm working with ROS melodic and Gazebo 9.9.0 on an Ubuntu 18.04.2 LTS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to get two boolean parameters from command line. To do it, I have this code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;int main(int argc, char **argv)&#xA;{&#xA;  bool doDiagonalSteps = false;&#xA;&#xA;  bool checkDiagonalCornerUnBlocked = false;&#xA;  /**&#xA;   * We must call one of the versions of ros::init() before using any other&#xA;   * part of the ROS system.&#xA;   */&#xA;  ros::init(argc, argv, &quot;astar_controller&quot;);&#xA;&#xA;  /**&#xA;   * NodeHandle is the main access point to communications with the ROS system.&#xA;   */&#xA;  ros::NodeHandle n;&#xA;&#xA;  /**&#xA;   * Get parameters (if there are parameters to get.)&#xA;   */&#xA;  if (!n.getParam(&quot;diagonalSteps&quot;, doDiagonalSteps))&#xA;    doDiagonalSteps = false;&#xA;  else&#xA;  {&#xA;    std::cout &amp;lt;&amp;lt; &quot;Diagonal steps: &quot; &amp;lt;&amp;lt;  std::endl;&#xA;  }&#xA;&#xA;&#xA;  if (!n.getParam(&quot;checkDiagonalStepCorner&quot;, checkDiagonalCornerUnBlocked))&#xA;    checkDiagonalCornerUnBlocked = false;&#xA;  else&#xA;  {&#xA;    std::cout &amp;lt;&amp;lt; &quot;Diagonal Corner: &quot; &amp;lt;&amp;lt; checkDiagonalCornerUnBlocked &amp;lt;&amp;lt; std::endl;&#xA;  }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;When I run this command on terminal:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;&lt;pre&gt;&lt;code&gt;rosrun nav_astar_nodes astar_controller _diagonalSteps:=true _checkDiagonalStepCorner:=false&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I don't get anything on the output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I get a boolean parameter from command line?&lt;/p&gt;&#xA;" OwnerUserId="18173" LastEditorUserId="18870" LastEditDate="2019-07-29T01:35:52.990" LastActivityDate="2019-07-29T01:35:52.990" Title="Command line boolean parameters to ros node" Tags="&lt;ros&gt;&lt;c++&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19115" PostTypeId="1" CreationDate="2019-07-18T19:17:50.930" Score="0" ViewCount="52" Body="&lt;p&gt;Can shortest path be computed using potential field path planning algorithm? Or is it just for obstacle avoidance and navigative towards goal? As i studied potential field deals with attracrive/repulsive forces, its not for shortest path finding.&lt;/p&gt;&#xA;" OwnerUserId="22546" LastActivityDate="2019-07-20T00:24:03.457" Title="Path planning with potential field" Tags="&lt;mobile-robot&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19119" PostTypeId="1" AcceptedAnswerId="19128" CreationDate="2019-07-19T10:26:55.707" Score="1" ViewCount="45" Body="&lt;p&gt;I want to model these D-H parameters in spatial toolbox:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Link:          alpha,      a,        theta,      d&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Link 1 :        -90        0        theta1*      d1&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Link 2 :          0        a2       theta2*      0&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Link 3 :          0        a3       theta3*      0&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the code I have tried:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;n=3;&#xA;rob.NB = n;&#xA;rob.parent = [0:n-1];&#xA;rob.jtype = { 'R', 'R', 'R' }&#xA;&#xA;l2=0.28;    %link length&#xA;l3=0.2;     %link length&#xA;d1=0.05;    %link offset&#xA;&#xA;&#xA;rob.Xtree{1} = rotx(pi)*xlt([0,0,0]);&#xA;rob.Xtree{2} = rotz(0)*xlt([l2 0 0]);&#xA;rob.Xtree{3} = xlt([l3 0 0]);&#xA;&#xA;ax1=0.03; ay1=0.03; az1=0.03;&#xA;ax2=0.28; ay2=0.05; az2=0.05;&#xA;ax3=0.2; ay3=0.05; az3=0.05;&#xA;&#xA;rob.I{1} = mcI( 1, [0 0 -0.02], 1/12*[ay1^2+az1^2 0 0; 0 ax1^2+az1^2 0; 0 0 ax1^2+ay1^2] )&#xA;rob.I{2} = mcI( 4, [0.14 0 0], 4/12*[ay2^2+az2^2 0 0; 0 ax2^2+az2^2 0; 0 0 ax2^2+ay2^2] )&#xA;rob.I{3} = mcI( 3, [0.1 0 0], 3/12*[ay3^2+az3^2 0 0; 0 ax3^2+az3^2 0; 0 0 ax3^2+ay3^2] )&#xA;&#xA;rob.appearance.base = ...&#xA;  { 'box', [-0.2 -0.3 -0.2; 0.2 0.3 -0.07] };&#xA;&#xA;&#xA;rob.appearance.body{1} = ...&#xA;    { 'box', [0 -0.07 -0.04; 0.05 0.07 0.04], ...&#xA;      'cyl', [0 -0.07 0; 0 0.07 0], 0.06 };&#xA;&#xA;rob.appearance.body{2} = ...&#xA;    { 'box', [0 -0.07 -0.04; 0.28 0.07 0.04], ...&#xA;      'cyl', [0 0 -0.07; 0 0 0.07], 0.06 };&#xA;&#xA;rob.appearance.body{3} = ...&#xA;    { 'box', [0 -0.07 -0.04; 0.2 0.07 0.04], ...&#xA;      'cyl', [0 0 -0.07; 0 0 0.07], 0.06 };&#xA;&#xA;showmotion(rob)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But this is what I get, with motion only along 1 axis:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/tpbAD.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tpbAD.jpg&quot; alt=&quot;robot showmotion&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Kindly help how to get the model right.&lt;/p&gt;&#xA;" OwnerUserId="23425" LastEditorUserId="23425" LastEditDate="2019-07-19T10:37:26.757" LastActivityDate="2019-07-22T07:31:44.693" Title="Roy Featherstone toolbox robot model" Tags="&lt;robotic-arm&gt;&lt;matlab&gt;&lt;simulation&gt;&lt;dh-parameters&gt;&lt;simulator&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19120" PostTypeId="1" CreationDate="2019-07-19T14:58:18.793" Score="0" ViewCount="130" Body="&lt;p&gt;If not, then which microcontroller will be suitable? &lt;/p&gt;&#xA;" OwnerUserId="23376" LastActivityDate="2020-09-22T20:06:55.710" Title="Is it possible to implement VSLAM on Arduino?" Tags="&lt;arduino&gt;&lt;slam&gt;&lt;microcontroller&gt;&lt;navigation&gt;&lt;autonomous-car&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19122" PostTypeId="2" ParentId="19115" CreationDate="2019-07-20T00:24:03.457" Score="2" Body="&lt;p&gt;Potential field does not aim at computing the shortest path between two points.&#xA;Shortest paths often necessarily get infinitesimally close or touching obstacles. On the other hand, paths that potential fields generate are away from any obstacles, according to repulsive fields. Therefore, they are normally not the shortest ones.&lt;/p&gt;&#xA;" OwnerUserId="7610" LastActivityDate="2019-07-20T00:24:03.457" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19123" PostTypeId="2" ParentId="19107" CreationDate="2019-07-20T13:03:52.790" Score="0" Body="&lt;p&gt;To Control an ESC, or rather, give a control signal, one generally uses some kind of micro controller (arduino, esp32, Ti c2000, STM, countless others) with a ESC dependent control signal. The mcus themselves don't have to be large, they simply need to be able to provide a signal usually at 5v, which is trivial for them. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some (most) of them require a PWM signal, such as the &lt;a href=&quot;https://www.maxongroup.com/maxon/view/product/control/4-Q-Servokontroller/466023&quot; rel=&quot;nofollow noreferrer&quot;&gt;escons&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The ESCON Module 24/2 is a small-sized, powerful 4-quadrant PWM OEM servo controller for the highly efficient control of permanent magnet-activated brushed DC motors and brushless EC motors up to approximately 48 Watts.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Others like the &lt;a href=&quot;https://www.maxongroup.com/maxon/view/product/control/4-Q-Servokontroller/466023&quot; rel=&quot;nofollow noreferrer&quot;&gt;espos&lt;/a&gt; are controlled over a communcations protocol such as CAN.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The EPOS4 Compact 24/1.5 CAN is a dynamic, ready-to-connect positioning controller in a compact design. Designed for use with brushed DC motors with encoders and brushless EC motors (BLDC) with Hall sensors and encoders up to 36 W / 108 W.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If you're in the professional area, and in hobby areas &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Things like the &lt;a href=&quot;https://hobbyking.com/en_us/turnigy-multistar-30a-blheli-32-4-in-1-race-spec-esc-w-f4-fc-osd-bec-2-4s.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;turnigy&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are also done with PWM, &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a post on using an e&lt;a href=&quot;https://electronics.stackexchange.com/questions/123479/how-to-use-turnigy-multistar-esc-with-generic-microcontroller&quot;&gt;sc with arduino&lt;/a&gt;. &lt;/p&gt;&#xA;" OwnerUserId="23148" LastActivityDate="2019-07-20T13:03:52.790" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19124" PostTypeId="1" CreationDate="2019-07-21T13:15:48.537" Score="0" ViewCount="209" Body="&lt;p&gt;i am trying to make an angle meter, using the UNO and MPU6050, following joop brokking video tutorials, &lt;/p&gt;&#xA;&#xA;&lt;p&gt;when utilizing the accelerometer, the results are fine, &lt;/p&gt;&#xA;&#xA;&lt;p&gt;however when i try to use gyroscope  (each one alone) do not get the expected result&lt;/p&gt;&#xA;&#xA;&lt;p&gt;when rotating the sensor from 0 to 90 degrees, the output change from 0 to 60~70 degrees only&lt;/p&gt;&#xA;&#xA;&lt;p&gt;so what is wrong is it the code, the gyroscope is damaged&lt;/p&gt;&#xA;&#xA;&lt;p&gt;here is the code&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; refresh ();&#xA; angle += (gyro_x - cal_x) * (millis () - timer) / 1000.0;&#xA; Serial.println (angle);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;refresh (); is a function that updates gyro_x&lt;/p&gt;&#xA;&#xA;&lt;p&gt;the MPU6050 is fixed so that it rotatea in one direction only&lt;/p&gt;&#xA;&#xA;&lt;p&gt;later on i took this false measure and applied it in a complementary filter,  the result was plausible, and varies around 0.5 degrees, i still need to get it to an accuracy of 0.0x&lt;/p&gt;&#xA;" OwnerUserId="23189" LastActivityDate="2021-04-12T04:03:15.203" Title="MPU6050 gyroscope giving wrong measure" Tags="&lt;arduino&gt;&lt;imu&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19125" PostTypeId="2" ParentId="19124" CreationDate="2019-07-21T20:11:10.073" Score="0" Body="&lt;p&gt;This will be a bit troublesome to help with, as you didn't post all of your code or more importantly your exact errors (&lt;code&gt;Serial.print()&lt;/code&gt;), but for general infos, and for others it's enough. Questions regarding troubleshooting your wiring/c code directly, I think should be directed to &lt;a href=&quot;https://arduino.stackexchange.com/search?q=mpu%206050&quot;&gt;arduino.stackexchange.com&lt;/a&gt; There are countless questions and answers there. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You need to integrate the gyro if you plan on getting an angle...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An example code (in wiring) to integrate your gyroscope readings would be, with 0.01 being your sampling constant &lt;span class=&quot;math-container&quot;&gt;$\Delta t$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void update_int(double *u, double *y)&#xA;{&#xA;static double x[1] = {0};&#xA;double x1[1];&#xA;y[0] = x[0];&#xA;x1[0] = x[0] + 0.01*u[0];&#xA;x[0] = x1[0];&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;However keep this in mind, gyros are accurate short term, but long term have 'drift' and will become unreliable. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can read more infos about this at &lt;a href=&quot;https://learn.adafruit.com/comparing-gyroscope-datasheets/overview&quot; rel=&quot;nofollow noreferrer&quot;&gt;adafruits gyroscope comparison site&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Generally one &quot;fuses&quot; several different sensor readings to make one, such as your 'complimentary filter' &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other options are the &lt;a href=&quot;https://x-io.co.uk/open-source-imu-and-ahrs-algorithms/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Madgwick Filter&lt;/a&gt; and the &lt;a href=&quot;http://blog.tkjelectronics.dk/2012/09/a-practical-approach-to-kalman-filter-and-how-to-implement-it/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Kalman Filter&lt;/a&gt;....achieving a variance of +/- 0 dps is nearly impossible, but you can get pretty close using some clever techniques and one of the mentioned filters. A comparison of all three filtering techniques can be found at &lt;a href=&quot;http://www.olliw.eu/2013/imu-data-fusing/&quot; rel=&quot;nofollow noreferrer&quot;&gt;OlliW's website.&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="23148" LastActivityDate="2019-07-21T20:11:10.073" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19126" PostTypeId="2" ParentId="19120" CreationDate="2019-07-21T23:46:27.383" Score="1" Body="&lt;p&gt;Not on nano and uno because of memory size. Really basic one with a low-resolution image and slower fps might be possible on mega. Still memory size might not be enough. Due is really marginal in acceptable processing speed with a low-resolution image but still have a memory problem. Just have a look at how much memory you need to store 2 or 3 images on your ram. That is the marginal ram requirement. You can use an external storage module which will take minutes to process a single frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Choose a board with more than 1.0GHz cpu, 128Mb ram with linux. &lt;/p&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2019-07-21T23:46:27.383" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19127" PostTypeId="1" AcceptedAnswerId="19138" CreationDate="2019-07-22T07:23:08.683" Score="0" ViewCount="51" Body="&lt;p&gt;a quick question, can i make a SBR using UNO and two HC-SR04 knowing that this configuration offers a 1.36 mm resolution  (i.e it increment 1.36mm) ?&lt;/p&gt;&#xA;" OwnerUserId="23189" LastActivityDate="2019-07-23T14:38:31.077" Title="Is Ultrasonic Self Balancing Robot Possible?" Tags="&lt;arduino&gt;&lt;balance&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19128" PostTypeId="2" ParentId="19119" CreationDate="2019-07-22T07:31:44.693" Score="3" Body="&lt;p&gt;I changed the code and now it works properly.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;rob.Xtree{1} = rotx(1.57) * xlt([0 0 0]);&#xA;rob.Xtree{2} = roty(1.57) * xlt([0.15,0,0]);&#xA;rob.Xtree{3} = xlt([0.34 0 0]);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="23425" LastActivityDate="2019-07-22T07:31:44.693" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19129" PostTypeId="1" AcceptedAnswerId="19132" CreationDate="2019-07-22T10:46:28.763" Score="1" ViewCount="45" Body="&lt;p&gt;I am using this code to test robot dynamics of above robot using Spatial Toolbox function:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;FDab(rob, [0;0;0], [0;0;0], [0;0;0]) %a_grav = [0,0,-9.81]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But it gives error:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Error using  *&#xA;Inner matrix dimensions must agree.&#xA;Error in FDab (line 49)&#xA;    a{i} = Xup{i} * -a_grav + c{i};&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This is because Xup is 6x6 double whereas a_grav is 1x3.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 3 link non-planar robot used is given as:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;rob.NB = 3;&#xA;rob.parent = [0:2];&#xA;rob.jtype = { 'R', 'R', 'R' }&#xA;model.gravity = [0 0 0];&#xA;rob.Xtree{1} = rotx(1.57) * xlt([0 0 0]);&#xA;rob.Xtree{2} = roty(1.57) * xlt([0.15,0,0]);&#xA;rob.Xtree{3} = xlt([0.34 0 0]);&#xA;ax1=0.03; ay1=0.03; az1=0.03;&#xA;ax2=0.28; ay2=0.05; az2=0.05;&#xA;ax3=0.2; ay3=0.05; az3=0.05;&#xA;rob.I{1} = mcI( 1, [0 0 -0.02], 1/12*[ay1^2+az1^2 0 0; 0 ax1^2+az1^2 0; 0 0 ax1^2+ay1^2] )&#xA;rob.I{2} = mcI( 4, [0.14 0 0], 4/12*[ay2^2+az2^2 0 0; 0 ax2^2+az2^2 0; 0 0 ax2^2+ay2^2] )&#xA;rob.I{3} = mcI( 3, [0.1 0 0], 3/12*[ay3^2+az3^2 0 0; 0 ax3^2+az3^2 0; 0 0 ax3^2+ay3^2] )&#xA;rob.appearance.base = ...&#xA;  { 'box', [-0.2 -0.3 -0.2; 0.2 0.3 -0.07] };&#xA;rob.appearance.body{1} = ...&#xA;    { 'cyl', [0 0 0; 0.11 0 0], 0.05, ...&#xA;      'cyl', [0 0 -0.06; 0 0 0.06], 0.06 };&#xA;rob.appearance.body{2} = ...&#xA;    { 'cyl', [0 0 0; 0.34 0 0], 0.05, ...&#xA;      'cyl', [0 0 -0.06; 0 0 0.06], 0.06 };&#xA;rob.appearance.body{3} = ...&#xA;    { 'cyl', [0 0 0; 0.26 0 0], 0.05, ...&#xA;      'cyl', [0 0 -0.06; 0 0 0.06], 0.06 };&#xA;showmotion(rob)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;How can I overcome the error?&lt;/p&gt;&#xA;" OwnerUserId="23425" LastActivityDate="2019-07-22T16:54:05.693" Title="Non-planar robot Dynamics error using Roy Featherstone's Spatial toolbox" Tags="&lt;robotic-arm&gt;&lt;dynamics&gt;&lt;simulation&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19131" PostTypeId="1" CreationDate="2019-07-22T16:27:22.037" Score="2" ViewCount="82" Body="&lt;p&gt;I notice there is a problem of power on PIN 1 and PIN 2 of DIN connector of Roomba 521...I have only 0,5 V but it's expected 12V...motherboard damaged?&lt;/p&gt;&#xA;" OwnerUserId="23471" LastActivityDate="2021-04-16T23:46:34.020" Title="problem of power on PIN 1 and PIN 2 of DIN connector of Roomba 521" Tags="&lt;irobot-create&gt;&lt;power&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19132" PostTypeId="2" ParentId="19129" CreationDate="2019-07-22T16:54:05.693" Score="2" Body="&lt;p&gt;I cannot recreate your issue, but you haven't posted all the steps you're taking, so I'm not sure if I'm following exactly what you've done. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What version are you using? I have Spatial_v2, and the README says (C) 2012. You have:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Error using  *&#xA;Inner matrix dimensions must agree.&#xA;Error in FDab (line 49)&#xA;    a{i} = Xup{i} * -a_grav + c{i};&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But that line isn't line 49 in my version of &lt;code&gt;FDab&lt;/code&gt;, it's line 47 in my code. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Regardless&lt;/strong&gt;, note that the &lt;code&gt;FDab&lt;/code&gt; function doesn't get &lt;code&gt;model.gravity&lt;/code&gt; directly; it calls &lt;code&gt;get_gravity(model)&lt;/code&gt; and that function will return a 6x1 vector if the check &lt;code&gt;size(model.Xtree{1},1) == 3&lt;/code&gt; returns &lt;strong&gt;FALSE&lt;/strong&gt; (lines 18 and 21 in &lt;code&gt;get_gravity()&lt;/code&gt;) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This could be where you're having the issue - you're saying your robot is non-planar, but it's passing the planar check &lt;code&gt;size(model.Xtree{1},1) == 3&lt;/code&gt; in &lt;code&gt;get_gravity()&lt;/code&gt;. &lt;strong&gt;This is the only way you get &lt;code&gt;a_grav&lt;/code&gt; as a  3x1 vector from &lt;code&gt;get_gravity()&lt;/code&gt;.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know how you initialized your robot, but I managed to run your code without issue if I took the following steps:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Not provided in the OP: &lt;code&gt;rob = singlebody;&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;I'm not sure if the above is correct because I had to manually empty &lt;code&gt;appearance.body&lt;/code&gt; in order to stop errors when running your code: &lt;code&gt;rob.appearance.body = []&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Copy/paste your code from &lt;code&gt;rob.NB = 3;&lt;/code&gt; to &lt;code&gt;showmotion(rob)&lt;/code&gt;; I got no errors and the animation played correctly. &lt;/li&gt;&#xA;&lt;li&gt;You don't set gravity in the code snippet you provided, so I set: &lt;code&gt;rob.gravity = [0,0,-9.81]&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;I ran the code in question:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;pre class=&quot;lang-matlab prettyprint-override&quot;&gt;&lt;code&gt;&amp;gt;&amp;gt; FDab(rob, [0;0;0], [0;0;0], [0;0;0])&#xA;&#xA;ans =&#xA;&#xA;  -59.1867&#xA;   -3.8828&#xA;    6.9148&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I would guess you've got an issue with your model declaration or configuration as there are steps required to get your snippet to run. Try &lt;code&gt;clear all&lt;/code&gt; to flush your session variables and re-running the code. It might be something you had tried previously is still in memory and that's screwing up your results. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2019-07-22T16:54:05.693" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19133" PostTypeId="2" ParentId="19065" CreationDate="2019-07-22T20:54:10.063" Score="1" Body="&lt;p&gt;Yes, you are correct that creating an occupancy grid map is as simple as taking sensor data and putting it into a map.  However, you will need to know the world location of your robot so that all your sensor measurements can be put into the same reference frame.  (I assume you want a standard world map.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obtaining the world location of your robot is a broader topic.  But assuming you have it, it is just a matter of some transforms to put sensor measurements into the same frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;T_{world}^{robot}*T_{robot}^{sensor}*T_{sensor}^{object}=T_{world}^{object}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A few relevant frames shown in this diagram:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/jjoIb.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/jjoIb.png&quot; alt=&quot;diagram of relevant frames&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typically, the occupancy grid map will designate free space (which is the space between the robot and the sensor reading, occupied space (which is where the sensor detected something), and unknown space (which is behind the occupied space).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Things get complicated because there is uncertainty in the robot position, and noise in the sensor measurement.  So that is why the modern way to do all this is probabilistically.  &lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2019-07-22T20:54:10.063" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19135" PostTypeId="1" AcceptedAnswerId="19141" CreationDate="2019-07-23T08:41:43.190" Score="0" ViewCount="72" Body="&lt;p&gt;I have a non-floatbase 3 DOF non-planar robot whose forward kinematics I need to compute using Spatial Toolbox. The code for this purpose is &lt;code&gt;p = fbkin(q)&lt;/code&gt; but as my robot is 3 DOF (q is 3x1 vector e.g. &lt;code&gt;[0;0;0]&lt;/code&gt;) and non-floatbase, I am unable to get kinematics of the model and get this error:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;fbkin([0;0;0]) %input&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Index exceeds matrix dimensions.&#xA;&#xA;Error in fbkin&amp;gt;fwdkin (line 49)&#xA;c4 = cos(q(4));  s4 = sin(q(4));&#xA;&#xA;Error in fbkin (line 41)&#xA;    o1 = fwdkin( i1 );&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;My robot is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;rob.NB = 3;&#xA;rob.parent = [0:2];&#xA;rob.jtype = { 'R', 'R', 'R' }&#xA;&#xA;model.gravity = [0 0 0];&#xA;&#xA;rob.Xtree{1} = rotx(1.57) * xlt([0 0 0]);&#xA;rob.Xtree{2} = roty(1.57) * xlt([0.15,0,0]);&#xA;rob.Xtree{3} = xlt([0.34 0 0]);&#xA;&#xA;ax1=0.03; ay1=0.03; az1=0.03;&#xA;ax2=0.28; ay2=0.05; az2=0.05;&#xA;ax3=0.2; ay3=0.05; az3=0.05;&#xA;&#xA;rob.I{1} = mcI( 1, [0 0 -0.02], 1/12*[ay1^2+az1^2 0 0; 0 ax1^2+az1^2 0; 0 0 ax1^2+ay1^2] )&#xA;rob.I{2} = mcI( 4, [0.14 0 0], 4/12*[ay2^2+az2^2 0 0; 0 ax2^2+az2^2 0; 0 0 ax2^2+ay2^2] )&#xA;rob.I{3} = mcI( 3, [0.1 0 0], 3/12*[ay3^2+az3^2 0 0; 0 ax3^2+az3^2 0; 0 0 ax3^2+ay3^2] )&#xA;&#xA;rob.appearance.base = ...&#xA;  { 'box', [-0.2 -0.3 -0.2; 0.2 0.3 -0.07] };&#xA;&#xA;rob.appearance.body{1} = ...&#xA;    { 'cyl', [0 0 0; 0.11 0 0], 0.05, ...&#xA;      'cyl', [0 0 -0.06; 0 0 0.06], 0.06 };&#xA;&#xA;rob.appearance.body{2} = ...&#xA;    { 'cyl', [0 0 0; 0.34 0 0], 0.05, ...&#xA;      'cyl', [0 0 -0.06; 0 0 0.06], 0.06 };&#xA;&#xA;rob.appearance.body{3} = ...&#xA;    { 'cyl', [0 0 0; 0.26 0 0], 0.05, ...&#xA;      'cyl', [0 0 -0.06; 0 0 0.06], 0.06 };&#xA;&#xA;showmotion(rob)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;How can I use the fbkin function with 3x1 joint angle vector?&lt;/p&gt;&#xA;" OwnerUserId="23425" LastActivityDate="2019-07-23T17:20:05.677" Title="Forward Kinematics of non-planar robot using Roy Featherstone's Spatial Toolbox" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;simulation&gt;&lt;forward-kinematics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19136" PostTypeId="1" CreationDate="2019-07-23T14:04:05.020" Score="1" ViewCount="70" Body="&lt;p&gt;I want to know how big of on an impact does the speed of the platform on which your sensors are mounted have on the quality of the outcome of a SLAM solution. Are there are any methods that are better suited to applications where the platform speed is higher ? What are the typical trade offs? Speed here refers to the actual motion of the platform and not the processing speed of computational elements.&lt;/p&gt;&#xA;" OwnerUserId="23475" LastEditorUserId="23475" LastEditDate="2019-07-25T17:59:59.503" LastActivityDate="2021-04-15T20:58:08.200" Title="Effect of platform speed (how fast it is moving) on the quality of SLAM" Tags="&lt;mobile-robot&gt;&lt;slam&gt;&lt;localization&gt;&lt;mapping&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19137" PostTypeId="2" ParentId="19131" CreationDate="2019-07-23T14:33:35.000" Score="0" Body="&lt;p&gt;This normally happens when you don’t use both power pins together, in order to get full voltage both pins must terminate into 1 wire or trace. &lt;/p&gt;&#xA;" OwnerUserId="20597" LastActivityDate="2019-07-23T14:33:35.000" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19138" PostTypeId="2" ParentId="19127" CreationDate="2019-07-23T14:38:31.077" Score="0" Body="&lt;p&gt;Probably not - it can take about 60ms to get a reading from those sensors&lt;a href=&quot;https://cdn.sparkfun.com/datasheets/Sensors/Proximity/HCSR04.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;†&lt;/a&gt;, which is quite slow for the loop updating a balancing robot.&lt;/p&gt;&#xA;" OwnerUserId="1321" LastActivityDate="2019-07-23T14:38:31.077" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19139" PostTypeId="2" ParentId="12669" CreationDate="2019-07-23T14:59:05.230" Score="0" Body="&lt;p&gt;It depends on which version of the Robotics Toolbox you're using, but for RTB10 you need to use the 'mask' keyword before the mask.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'll get much faster response to questions if you post them to the &lt;a href=&quot;https://tiny.cc/rvcforum&quot; rel=&quot;nofollow noreferrer&quot;&gt;RTB support forum&lt;/a&gt;.  It's almost impossible to find all RTB related questions in Stack Exchange.&lt;/p&gt;&#xA;" OwnerUserId="21223" LastActivityDate="2019-07-23T14:59:05.230" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19140" PostTypeId="2" ParentId="11234" CreationDate="2019-07-23T15:06:26.287" Score="0" Body="&lt;p&gt;I wrote a &lt;a href=&quot;http://petercorke.com/wordpress/4-is-harder-than-6-inverse-kinematics-for-underactuated-robots&quot; rel=&quot;nofollow noreferrer&quot;&gt;short article&lt;/a&gt; about the problems with IK for 4-axis robots which might help explain the issues.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should probably use the ikine() function with a 'mask' option.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will get much fast answers to questions regarding the Robotics Toolbox for MATlAB at its own &lt;a href=&quot;https://tiny.cc/rvcforum&quot; rel=&quot;nofollow noreferrer&quot;&gt;support forum&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="21223" LastActivityDate="2019-07-23T15:06:26.287" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19141" PostTypeId="2" ParentId="19135" CreationDate="2019-07-23T17:20:05.677" Score="2" Body="&lt;p&gt;You've got to open the functions you're trying to use and look through them if you're getting errors. You said you are trying to get the forward kinematics of your robot, and that it's a non-floatbase, and that you've got a 3x1 vector of joint values &lt;code&gt;q&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Yet you're using &lt;code&gt;fbkin&lt;/code&gt; which, if you type &lt;code&gt;help fbkin&lt;/code&gt; into the console, will state (added bold for things relevant to you):&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;code&gt;&amp;gt;&amp;gt; help fbkin&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;fbkin  Forward and Inverse Kinematics &lt;strong&gt;of Floating Base&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;[x,xd]=fbkin(q,qd,qdd) calculates the forward kinematics, and [q,qd,qdd]=fbkin(x,xd) calculates the inverse kinematics, &lt;strong&gt;of a spatial floating base constructed by &lt;code&gt;floatbase&lt;/code&gt;.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So, right away, if you didn't use &lt;code&gt;floatbase&lt;/code&gt; to make your base, then you're using the wrong function. The rest of the &lt;code&gt;help&lt;/code&gt; message continues:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;The vectors q&lt;/strong&gt;, qd and qdd are the joint position, velocity and acceleration variables &lt;strong&gt;for the six joints forming the floating base&lt;/strong&gt;; x is the 13-element singularity-free state vector used by FDfb and IDfb; and xd is its derivative.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;And here it says it's a floating base, so naturally it's got six degrees of freedom, so if you're going to do anything with it then you can imagine the base as having six joints (x/y/z roll/pitch/yaw) and that's what this function is looking for when it uses &lt;code&gt;q&lt;/code&gt; as an input. It is &lt;em&gt;not&lt;/em&gt; saying that this is for use with a robot arm or a kinematic tree or anything else. Just the floating base.&lt;/p&gt;&#xA;&lt;p&gt;Continuing:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The component parts of x are: a unit quaternion specifying the orientation of the floating-base frame relative to the fixed base, a 3D vector giving the position of the origin of the floating-base frame, and the spatial velocity of the floating base expressed in fixed-base coordinates.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;That is the output for the forward kinematics code - quaternion orientation and x/y/z position, and spatial velocity, which is angular and linear velocities. The remainder of the &lt;code&gt;help&lt;/code&gt; comment talks about different ways to call the function and things to look out for with regards to singularities.&lt;/p&gt;&#xA;&lt;p&gt;This is not the code that's going to do forward kinematics for a robot arm. It's doing kinematics for a base.&lt;/p&gt;&#xA;&lt;p&gt;You need to go to the &lt;code&gt;\dyanmics&lt;/code&gt; folder and look at some of the &lt;code&gt;FD__&lt;/code&gt; functions; those are the &lt;code&gt;F&lt;/code&gt;orward &lt;code&gt;D&lt;/code&gt;ynamics functions. Actually I was going to suggest you try &lt;code&gt;FDab&lt;/code&gt; and I remembered that was at the core of your &lt;a href=&quot;https://robotics.stackexchange.com/questions/19129/non-planar-robot-dynamics-error-using-roy-featherstones-spatial-toolbox&quot;&gt;other question&lt;/a&gt;, so I'm wondering why you're not using it.&lt;/p&gt;&#xA;&lt;p&gt;Actually, in re-reading your question, it seems like you're not actually trying to do any &lt;em&gt;dynamics&lt;/em&gt; simulations, rather you just seem to want to plug in a vector of joint values and get positions. In that case, I think the command you're looking for is &lt;code&gt;jcalc&lt;/code&gt;. This function takes a joint type and joint value &lt;code&gt;q&lt;/code&gt; and returns the spatial transform &lt;code&gt;Xj&lt;/code&gt; (which is a 6x6 matrix and &lt;em&gt;not&lt;/em&gt; a 4x4 homogenous transform!).&lt;/p&gt;&#xA;&lt;p&gt;Function like &lt;code&gt;FDab&lt;/code&gt; call &lt;code&gt;jcalc&lt;/code&gt; to build a chain of transforms, as in:&lt;/p&gt;&#xA;&lt;pre class=&quot;lang-matlab prettyprint-override&quot;&gt;&lt;code&gt;for i = 1:model.NB&#xA;  [ XJ, S{i} ] = jcalc( model.jtype{i}, q(i) );&#xA;  vJ = S{i}*qd(i);&#xA;  Xup{i} = XJ * model.Xtree{i};&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;But I don't think there's any one function that's going to take your &lt;code&gt;q&lt;/code&gt; vector and spit out a series of positions. You'll have to build your own with &lt;code&gt;jcalc&lt;/code&gt; and work from there.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2019-07-23T17:20:05.677" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19142" PostTypeId="2" ParentId="19136" CreationDate="2019-07-24T02:15:17.563" Score="0" Body="&lt;p&gt;That totally depends on the sensor type and moving speed. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Think about hand-held SLAM devices where angular velocity is typically way larger than ground vehicle types. Also, sensor type and fps are other main factors. If you use 1000 FPS global shutter camera you don't need to worry about the motion distortion much whereas 2-axises LiDARs is the opposite case. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Continuous-time SLAM is dedicated to tackle with the motion distortion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can see an extream case here: &lt;a href=&quot;https://www.youtube.com/watch?v=Uj9BKcnXOyo&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=Uj9BKcnXOyo&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Refers to my paper if you want more details: &lt;a href=&quot;https://arxiv.org/abs/1711.01691&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://arxiv.org/abs/1711.01691&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2019-07-24T02:15:17.563" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19143" PostTypeId="1" AcceptedAnswerId="19144" CreationDate="2019-07-24T08:16:59.113" Score="0" ViewCount="70" Body="&lt;p&gt;I find myself very interested to work in the field of robotics though my background is not robotics, I had a degree in Physics, master 1 in Hydrodynamics and this year I have studied just one semester about robotics and the internship that I am doing now aims to develop a numerical model but is not related to robotics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, the thing is I don't have enough practical or theoretical skills in robotics but I believe that my interest and my scientific background allow me to learn and integrate successfully while I am working, so I think I could do just fine even if I didn't have a solid experience in this field.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have found a job for one year as a robot operator in a company, so I would like to try it (today is my interview). And while I am working I could learn courses online about robotics. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to know about the skills I could develop as a robot operator especially practical skills.And also what kind of opportunities could I get after working as a robot operator? Anyone had an experience with such a job before?&lt;/p&gt;&#xA;" OwnerDisplayName="user23478" LastEditorUserId="37" LastEditDate="2019-07-24T15:03:04.483" LastActivityDate="2019-07-24T15:03:04.483" Title="What robotic skills can I develop when working as a robot operator?" Tags="&lt;mobile-robot&gt;&lt;wheeled-robot&gt;&lt;industrial-robot&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2019-07-24T15:04:08.313" ContentLicense="CC BY-SA 4.0" />
  <row Id="19144" PostTypeId="2" ParentId="19143" CreationDate="2019-07-24T09:34:14.890" Score="2" Body="&lt;p&gt;Considering your apparent education background, I’m surprised at this question...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But regardless. Working with robots, when compared to making robots are very different things. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is not so much different than driving cars and fixing them compared to designing and building them. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you studied physics, then you’re well aware that physics is the practical application of mathematics. (In a dumbed down way)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Much is the same that engineering is the practical application of physics. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A trade and/or the use of machines would then be the practical/end use of engineering. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Learning to operate robots, as in using them safely, programming them, and to a degree fixing them, will give a person all the knowledge required for said machine usage. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This would include machine specific programming (or a commonly used language depending on the machine(s)) spacial thinking, understanding multiple coordinate systems... world, joint, camera vs world, etc etc. These are things your education would help you understand easier than someone not formally educated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Repairing said machines will give an insight into how they may be built, and the engineering thoughts that went into them...or maybe just confuse a person why some choice was made than the obvious one.... &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But it's unlikely that you would ever do this...and a maintenance person would normally be found anyways, these machines are expensive after all. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using robots will teach the differences between precision, accuracy, and repeatability in a real world application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Learning the use of machines will provide valuable insight into them, but is quite far removed when it comes to designing them, programming them (as in programming their embedded systems, not just their movement via gcode or something ), and controlling them. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However all of this is highly dependent on what you’re operating on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Running a cnc mill is far different than running a 8 axis industrial arm, both provide valuable knowledge, but are very different kinds of robots with many overlapping and many non-overlapping usage cases and knowledge. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suggest looking for Fanuc, ABB, Kuka training courses to see the things they describe you would learn about, and compare them to DMG or Siemans milling courses to have an idea of the differences between them, and simply waiting to take the job and see what you learn. Hopefully you'll be running older machines that you will actually have to &lt;em&gt;do&lt;/em&gt; something, and not just hit the start button to run a CAM program someone in an office premade for you.  &lt;/p&gt;&#xA;" OwnerUserId="23148" LastEditorUserId="23148" LastEditDate="2019-07-24T09:49:05.813" LastActivityDate="2019-07-24T09:49:05.813" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="19145" PostTypeId="1" CreationDate="2019-07-24T09:51:37.427" Score="0" ViewCount="64" Body="&lt;p&gt;I'm an absolute beginner, so please bear with me. I'm currently doing a project where I need to control 2 DC motors using the Udoo board. Should I first learn to use an Arduino or is it possible to program the board in Linux's terminal only?&#xA;PS. There isn't much documentation available for the Udoo board.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A Pan Tilt Unit(PTU) is to be attached to a robot. The PTU has 2 motors with perpendicular shafts. What I need to do is control the two motors and start &amp;amp; stop them at particular positions. Also, build a GUI after completing the hardware. Available resources are Udoo Neo board, Arduino Due and Arduino Uno. I've gone through the UDOO official documentation but other than that I couldn't find any discussion platforms concerning the Udoo board and it's still not clear if I need to learn to program an arduino for controlling the motor? Or if it could be done via python in Udoo's Linux only.&lt;/p&gt;&#xA;" OwnerUserId="23480" LastEditorUserId="37" LastEditDate="2019-07-25T13:42:14.507" LastActivityDate="2021-04-15T18:53:05.223" Title="Is it compulsary to learn Arduino programming in order to use Udoo Neo as an IOT device?" Tags="&lt;arduino&gt;&lt;raspberry-pi&gt;&lt;embedded-systems&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="19148" PostTypeId="1" CreationDate="2019-07-24T20:13:54.850" Score="2" ViewCount="156" Body="&lt;p&gt;I added an Arduino to control a Roomba 615 (similar to iRobot Create 2).&#xA;The Arduino is communicating with Roomba through the Mini-DIN connector with the Open Interface.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While Roomba is docked and in Passive mode, I would like to know when the battery is fully charged in order to know when Roomba is ready to clean/travel. I am currently watching the Charging State (ID 21 in &lt;a href=&quot;https://www.irobotweb.com/-/media/MainSite/Files/About/STEM/Create/2018-07-19_iRobot_Roomba_600_Open_Interface_Spec.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Open Interface&lt;/a&gt;, p.28).  &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Could you explain to me the meaning of each state?&lt;/li&gt;&#xA;&lt;li&gt;Which state corresponds to « the battery is fully charged »?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The 6 states are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;0 Not charging&lt;/li&gt;&#xA;&lt;li&gt;1 Reconditioning Charging&lt;/li&gt;&#xA;&lt;li&gt;2 Full Charging   &lt;/li&gt;&#xA;&lt;li&gt;3 Trickle Charging  &lt;/li&gt;&#xA;&lt;li&gt;4 Waiting &lt;/li&gt;&#xA;&lt;li&gt;5 Charging Fault Condition&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="23486" LastActivityDate="2019-09-26T14:37:21.060" Title="Meaning of Roomba's charging states" Tags="&lt;irobot-create&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19149" PostTypeId="2" ParentId="19148" CreationDate="2019-07-24T23:45:32.677" Score="1" Body="&lt;p&gt;maybe you want to look at Packet ID 25 also on page 28 of the documentation provided.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Battery Charge Packet ID: 25 Data Bytes: 2, unsigned&lt;/p&gt;&#xA;&lt;p&gt;The current charge of Roomba’s battery in milliamp-hours (mAh). The charge value decreases as the battery is depleted during running and increases when the battery is charged.&lt;/p&gt;&#xA;&lt;p&gt;Range: 0 – 65535 mAh&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I guess if you request this packet and make a comparison for the value you can set a threshold to consider that the battery is fully charged, and the robot should be ready to go.&lt;/p&gt;&#xA;&lt;p&gt;I would not set this comparison to be equal to 65535, as this value might not be attained as the battery starts to wear. Maybe it will be reasonable to compare if this value is equal or above 58981 (which is roughly 90% of the maximum value).&lt;/p&gt;&#xA;" OwnerUserId="11438" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2019-07-24T23:45:32.677" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19152" PostTypeId="1" CreationDate="2019-07-25T11:17:17.357" Score="5" ViewCount="148" Body="&lt;p&gt;I was going through the tutorial on SLAM by Hugh Durrant-Whyte and Tim Bailey&lt;sup&gt;&amp;dagger;&lt;/sup&gt; and found this Time-Update equation (equation 4 in the paper):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$&#xA;P\left(\mathrm{x}_{k},\mathrm{m} | \mathrm{Z}_{0:k-1}, \mathrm{U}_{0:k},\mathrm{x}_{0}\right) = \int P\left(\mathrm{x}_{k}|\mathrm{x}_{k-1},\mathrm{u}_{k}\right) \times P\left(\mathrm{x}_{k-1},\mathrm{m}|\mathrm{Z}_{0:k-1},\mathrm{U}_{0:k-1},\mathrm{x}_{0}\right)\mathrm{dx}_{k-1}$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where &lt;span class=&quot;math-container&quot;&gt;$\mathrm{m}$&lt;/span&gt; is the position of landmarks or one can call it a map and other symbols have usually meanings like &lt;span class=&quot;math-container&quot;&gt;$\mathrm{x}_{k}$&lt;/span&gt; is robot location, &lt;span class=&quot;math-container&quot;&gt;$\mathrm{u}_{k}$&lt;/span&gt; is control inputs and &lt;span class=&quot;math-container&quot;&gt;$\mathrm{z}_{k}$&lt;/span&gt; world observations made by robot. Is the right hand side derived using the total probability concept. I am aware of the Markov facts that &lt;span class=&quot;math-container&quot;&gt;$\mathrm{x}_{k}$&lt;/span&gt; depends on &lt;span class=&quot;math-container&quot;&gt;$\mathrm{u}_{k}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\mathrm{x}_{k-1}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\mathrm{z}_{k}$&lt;/span&gt; depends on &lt;span class=&quot;math-container&quot;&gt;$\mathrm{x}_{k}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\mathrm{m}$&lt;/span&gt;. Still I am not able to derive the right hand side from the left hand side specially the fact that &lt;span class=&quot;math-container&quot;&gt;$\mathrm{m}$&lt;/span&gt; was occurring with &lt;span class=&quot;math-container&quot;&gt;$\mathrm{x}_{k}$&lt;/span&gt; in the joint probability on left hand side but it gets attached with &lt;span class=&quot;math-container&quot;&gt;$\mathrm{x}_{k-1}$&lt;/span&gt; on the right hand side if I think we are using the fact &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$P(a,b|c) = \int_{a'} P(a,b|a',c)P(a'|c) da'$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;&amp;dagger;&lt;a href=&quot;https://people.eecs.berkeley.edu/~pabbeel/cs287-fa09/readings/Durrant-Whyte_Bailey_SLAM-tutorial-I.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Simultaneous Localisation and Mapping (SLAM): Part I The Essential Algorithms&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;" OwnerUserId="23490" LastEditorUserId="9720" LastEditDate="2019-07-27T19:24:24.350" LastActivityDate="2019-08-31T19:21:29.940" Title="How to derive the Time-Update equation of SLAM" Tags="&lt;slam&gt;&lt;probability&gt;&lt;statistics&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19153" PostTypeId="2" ParentId="19145" CreationDate="2019-07-25T14:19:56.040" Score="0" Body="&lt;p&gt;It is difficult to answer your question without more information, but I would suggest that splitting your problem in two and dealing with the motor control and the GUI separately would probably be the easiest way to accomplish what you want to do, and the Neo may be the ideal piece of kit to do that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for the motor control, I would be inclined implement the low level real time motor control with an Arduino (either Due, Uno or the one integrated in the Neo) and then implement the GUI in soft real time on the Linux side. See &lt;a href=&quot;https://www.udoo.org/tutorial/interaction-between-linux-and-arduino-on-udoo/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Interaction between Linux and Arduino on Udoo&lt;/a&gt; for examples of linking the two.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are lots of tutorials out there about controlling motors with an Arduino and a motor shield, the documentation for the shield you have should be able to step you through what you need to do. There are even tutorials about making Pan Tilt units controlled by an Arduino, such as this instructable: &lt;a href=&quot;https://www.instructables.com/id/Pan-Tilt-Servo-bracket-controlled-by-Arduino/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pan &amp;amp; Tilt Servo Bracket Controlled by Arduino&lt;/a&gt;, which uses rc-servo motors rather than DC motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you implement you system this way then yes, you will need to learn about Arduino programming.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The alternative is to try and do everything on the Linux side, but while the ARM core is much faster than the Arduino, it is also expected to do a lot more, and it is generally safer and more consistent for real time control to be done with a seperate embedded controller rather than try to control motors from a general purpose operating system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you decided to go the 'do everything from linux' route, then you won't have to learn Arduino programming, but you will have to learn how to do &lt;a href=&quot;https://www.udoo.org/tutorial/linux-gpio-manipulation/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Linux GPIO manipulation&lt;/a&gt;, and that will require understanding the underlying principles of GPIO, PWM and writing your own libraries rather than just using the standard libraries available for Arduino.&lt;/p&gt;&#xA;" OwnerUserId="37" LastActivityDate="2019-07-25T14:19:56.040" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19155" PostTypeId="1" AcceptedAnswerId="19156" CreationDate="2019-07-25T21:42:27.083" Score="0" ViewCount="27" Body="&lt;p&gt;I need the robot joint angles to become the same as given (desired) joint angles. The kinematics and dynamics (used Spatial Toolbox) are correct and the motor models are realistic too. But out of 3 joint angles, only one is converging at the desired set point, while the other ones are 'converging' at a random point.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have tried tuning the 'PD controllers', 'PI controllers' as well as the 'gain' but only the 1st value converges. I am unable to understand the reason behind it. Kindly check the code and suggest if any improvement is needed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Simulink model:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/z68jc.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/z68jc.png&quot; alt=&quot;Simulink model&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Joint angles: current and desired:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/BoXgn.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/BoXgn.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Simulink model, robot model and motor parameters are given here: &lt;a href=&quot;https://drive.google.com/open?id=0B1lgSdFRVsHGTVJ5ZWhURG05ZTg&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://drive.google.com/open?id=0B1lgSdFRVsHGTVJ5ZWhURG05ZTg&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="23425" LastActivityDate="2019-07-25T22:54:10.893" Title="All Joint Angle values not converging to desired set point (I am using Roy Featherstone's Spatial Toolbox)" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;dynamics&gt;&lt;simulation&gt;&lt;simulator&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19156" PostTypeId="2" ParentId="19155" CreationDate="2019-07-25T22:54:10.893" Score="1" Body="&lt;p&gt;Sorry I saw this as I was checking emails. Just got off a very long international flight so my answer below may not be super coherent. tl;dr - You're not &lt;em&gt;integrating&lt;/em&gt; your reference error anywhere and so there's nothing that would drive your reference error to zero. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Simulink model is confusing to me. What are your units? I think it would be helpful to me (and you!) if you labeled or subdiagrammed this to show what each portion is doing. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The thing that's confusing for me is that feedback systems will typically operate on a feedback &lt;em&gt;error&lt;/em&gt;, which is &lt;code&gt;reference - feedback&lt;/code&gt;. The reference &lt;em&gt;error&lt;/em&gt; is then modified and that's what drives the response - a PID controller is trying to drive the reference error to zero.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It looks like you've got a &lt;code&gt;Jacobian*Force&lt;/code&gt; term to generate some a torque signal, which seems okay because the Jacobian lets you relate an end effector's force to the joint forces.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The way that I would expect you would be using it, the way you have the outputs done, is that you're going to use the current pose of the arm and provide a desired end effector force vector, and you're going to output the joint torques. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You've got the output &lt;code&gt;Thm&lt;/code&gt;, but then it's not &lt;code&gt;reference - feedback&lt;/code&gt; to try to drive the motor torques to that value. You've got instead a &quot;Desired torque&quot; vector, so you've got &lt;code&gt;reference - other reference&lt;/code&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then you've got a set of PD controllers, but there's no plant/dynamics involved directly after those controllers and so it's not clear to me what they're controlling. What are the input/output units? Are you doing PD control to accept a torque &lt;em&gt;reference error&lt;/em&gt; and generate a terminal voltage to drive the motor?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But if that &lt;em&gt;is&lt;/em&gt; what you're doing, that summing junction between the PD controllers and PI controllers doesn't make sense to me, because the input on the negative junction is the output of &lt;code&gt;3DOF Robot&lt;/code&gt; and/or the motor PI control block. That same output though also gets summed with the &lt;code&gt;Thm&lt;/code&gt; torque output of the Jacobian function. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically your Jacobian is outputting a torque, which seems okay but then, assuming you're using the same units on both sides of your summing junctions, the output of Motor PI is torque and the output of PD controllers is torque and the output of Reference Torque is torque. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you've got a reference torque, the Jacobian &lt;code&gt;Thm&lt;/code&gt;, and you're building a controller(s) to do something with that reference, but then you skip to the end of your cascaded controllers and just add that &lt;code&gt;Thm&lt;/code&gt; signal in there. What is it that the other controllers are doing then if you're going to throw the &lt;code&gt;Thm&lt;/code&gt; signal in at the end? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In any event, the output of that last summing junction looks like a torque, which then makes sense to go into the next section, which I'm assuming is &lt;code&gt;FDab&lt;/code&gt; or similar - takes inputs of &lt;code&gt;q&lt;/code&gt;, &lt;code&gt;qd&lt;/code&gt;, and &lt;code&gt;tau&lt;/code&gt;, and you've got &lt;code&gt;q&lt;/code&gt; and &lt;code&gt;qd&lt;/code&gt; fed back from the integrators and what I'm assuming is &lt;code&gt;tau&lt;/code&gt; out of that summing junction. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So then it goes from there into a forward dynamics, and then this is where your real &lt;code&gt;reference - feedback&lt;/code&gt; is going on, except you've got it as &lt;code&gt;feedback - reference&lt;/code&gt;, which ultimately doesn't matter because it's just a gain of &lt;code&gt;-1&lt;/code&gt;, but anyways &lt;strong&gt;this&lt;/strong&gt; is where your joint angle controller should go because &lt;em&gt;this&lt;/em&gt; is the &lt;em&gt;only place&lt;/em&gt; in your code that you seem to be comparing a reference (&lt;code&gt;Desired joint angles&lt;/code&gt; vector) to a feedback (integrated dynamics simulation), but even here you're not comparing joint angles, you're comparing the output of &lt;em&gt;forward kinematics&lt;/em&gt;, which would imply you're only looking at the end effector. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking a little harder at it, your forward kinematics output a 3x1 vector, which would only cover x/y/z &lt;em&gt;or&lt;/em&gt; roll/pitch/yaw of the end effector; you don't have something like a quaternion + x/y/z for a 7x1 vector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, it would seem at a glance that you have something like a joint or end effector controller in that section of your code, but that block is a triangle, so it's just a gain. It's a gain acting on a reference error, so it's a &lt;em&gt;proportional&lt;/em&gt; gain if you look at that like a PID controller. There's no integral term, so it's as though your integral gain is set to zero and you're never able to drive steady state error to zero.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2019-07-25T22:54:10.893" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="19157" PostTypeId="1" AcceptedAnswerId="19161" CreationDate="2019-07-26T02:10:13.357" Score="2" ViewCount="100" Body="&lt;p&gt;I am reading &lt;a href=&quot;https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;cad=rja&amp;amp;uact=8&amp;amp;ved=2ahUKEwicgumTu9HjAhXPtp4KHQ-ICwgQFjAAegQIAhAC&amp;amp;url=http%3A%2F%2Fwww2.informatik.uni-freiburg.de%2F~stachnis%2Fpdf%2Fgrisetti10titsmag.pdf&amp;amp;usg=AOvVaw3_l9o1dOk82MwBGeOO-eE4&quot; rel=&quot;nofollow noreferrer&quot;&gt;A Tutorial on Graph-Based SLAM&lt;/a&gt;.&lt;sup&gt;Grisetti, Kummerle,  Stachniss &amp;amp; Burgard&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On page 5, the error function is introduced as follows &#xA;&lt;span class=&quot;math-container&quot;&gt;$$e_{ij}(x_i, x_j) = z_{ij} - \hat{z}_{ij}(xi, xj)$$&lt;/span&gt;&lt;br&gt;&#xA;here &lt;span class=&quot;math-container&quot;&gt;$z_{ij}$&lt;/span&gt; is the &lt;strong&gt;mean&lt;/strong&gt; of virtual measurement and &lt;span class=&quot;math-container&quot;&gt;$\hat{z}_{ij}(x_i, x_j)$&lt;/span&gt; is the &lt;strong&gt;prediction&lt;/strong&gt; of the virtual measurement. The following image supplements the description &#xA;&lt;a href=&quot;https://i.stack.imgur.com/13V8U.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/13V8U.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;strong&gt;Algorithm 1&lt;/strong&gt; (on page 6), requires &lt;span class=&quot;math-container&quot;&gt;$e_{ij}$&lt;/span&gt; as input. My doubt is regarding the calculation of &lt;span class=&quot;math-container&quot;&gt;$e_{ij}$&lt;/span&gt;. I need both &lt;span class=&quot;math-container&quot;&gt;$z_{ij}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\hat{z}_{ij}$&lt;/span&gt; to calculate &lt;span class=&quot;math-container&quot;&gt;$e_{ij}$&lt;/span&gt;   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The evaluation of &lt;span class=&quot;math-container&quot;&gt;$\hat{z}_{ij}$&lt;/span&gt; is dependent on the robot poses &lt;span class=&quot;math-container&quot;&gt;$x_i$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$x_j$&lt;/span&gt;.&lt;br&gt;&#xA;In turn, these robot poses &lt;span class=&quot;math-container&quot;&gt;$x_i, x_j$&lt;/span&gt; (as well as &lt;span class=&quot;math-container&quot;&gt;$z_{ij}$&lt;/span&gt;) are calculated using &lt;span class=&quot;math-container&quot;&gt;$z_{raw}$&lt;/span&gt; (incrementally with Odometry?) and to calculate &lt;span class=&quot;math-container&quot;&gt;$\hat{z}_{ij}$&lt;/span&gt; we are again going to (indirectly) use &lt;span class=&quot;math-container&quot;&gt;$z_{raw}$&lt;/span&gt;. And that does not make sense because then &lt;span class=&quot;math-container&quot;&gt;$e_{ij}=0$&lt;/span&gt;? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Surely, I'm missing something about how &lt;span class=&quot;math-container&quot;&gt;$z_{ij}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\hat{z}_{ij}$&lt;/span&gt; differ!&lt;br&gt;&#xA;Kindly help me resolve the above doubt! Any concrete example of &lt;span class=&quot;math-container&quot;&gt;$z_{ij}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\hat{z}_{ij}$&lt;/span&gt; are appreciated.&lt;/p&gt;&#xA;" OwnerUserId="23497" LastEditorUserId="37" LastEditDate="2019-07-26T10:36:32.573" LastActivityDate="2019-07-26T10:36:32.573" Title="Error term formulation in Graph SLAM (conceptual doubt)" Tags="&lt;slam&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19160" PostTypeId="1" CreationDate="2019-07-26T03:30:53.997" Score="0" ViewCount="466" Body="&lt;p&gt;I try to solve forward kinematics problem for OpenManipulator X from Robotis by using standard DH convention. The figure and dimension of the robot like this pic&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/mlWhC.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/mlWhC.png&quot; alt=&quot;OpenManipulator X dimension&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I try to find DH parameter and got result like this&#xA;&lt;a href=&quot;https://i.stack.imgur.com/pGKC2.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/pGKC2.jpg&quot; alt=&quot;DH Parameter&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To match frame assignment requirement, I move frame 2 to the left 0.024m. But when I verify the forward kinematics result, the position of end effector is wrong when I move joint 3. For example if I move joint 3 to 90 degree, the position of end effector should be X = 0.024m, Y = 0, and Z = 0.455M. But I got from the software X = 0, Y = 0, and Z = 0.455. It is because of I move the centre of frame 3 to the left. But if I dont move it, the DH frame assignment rule doesn't match.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How to figure out this problem?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is my code to find forward kinematics&lt;/p&gt;&#xA;&#xA;&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;def std_DH(theta, alpha, a, d):&#xA;    DH = np.array([[np.cos(theta),  -np.sin(theta)*np.cos(alpha),   np.sin(theta)*np.sin(alpha),    a*np.cos(theta)],&#xA;                   [np.sin(theta),  np.cos(theta)*np.cos(alpha),    -np.cos(theta)*np.sin(alpha),   a*np.sin(theta)],&#xA;                   [0,              np.sin(alpha),                  np.cos(alpha),                  d],&#xA;                   [0,              0,                              0,                              1]])&#xA;    return DH&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;def forward_kinematics(q1, q2, q3, q4):&#xA;    _0T1 = std_DH(q1, np.pi/2, 0, 0.077)&#xA;    _1T2 = std_DH(q2+np.pi/2, 0, 0.128, 0)&#xA;    _2T3 = std_DH(q3-np.pi/2, 0, 0.124, 0)&#xA;    _3T4 = std_DH(q4, 0, 0.126, 0)&#xA;    _0T4 = _0T1.dot(_1T2).dot(_2T3).dot(_3T4)&#xA;    return _0T4&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Is there any method to find forward kinematics without using DH convention?&lt;/p&gt;&#xA;" OwnerUserId="22662" LastActivityDate="2021-02-18T14:29:32.570" Title="DH Parameter for OpenManipulator X from Robotis" Tags="&lt;forward-kinematics&gt;&lt;manipulator&gt;&lt;dh-parameters&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19161" PostTypeId="2" ParentId="19157" CreationDate="2019-07-26T07:52:56.277" Score="1" Body="&lt;p&gt;Good question. That is quite confusing in the beginning. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's say you have an observation of a relative pose zij between two positions(or nodes) from your wheel odometry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, you accumulate the relative poses to create the trajectory of your robot. From the accumulated trajectory you can extract zij_hat.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given obesrvation and prediction, the error function is&lt;/p&gt;&#xA;&#xA;&lt;p&gt;eij = zij - zij_hat&lt;/p&gt;&#xA;&#xA;&lt;p&gt;which are zero initially except the loop closure terms. For example, if you have 4 nodes with a loop closure at 4 and 1, your errors looks like this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;e12 = 0&lt;/p&gt;&#xA;&#xA;&lt;p&gt;e23 = 0&lt;/p&gt;&#xA;&#xA;&lt;p&gt;e34 = 0&lt;/p&gt;&#xA;&#xA;&lt;p&gt;e41 = big error!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;During the optimization, your initially accumulated trajectory moves, therefore, e12..e34 are not zero anymore.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Optimization moves the nodes to reduce the error at e41 which result in distributing the error to other nodes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The paper you are reading is not a good tutorial(in my opinion) by the way. &lt;/p&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2019-07-26T07:52:56.277" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="19163" PostTypeId="1" CreationDate="2019-07-26T14:03:30.177" Score="2" ViewCount="108" Body="&lt;p&gt;TL, DR : What is the method(in terms of sensors and algorithm) to get the roll, pitch and yaw of an aircraft at any instant.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am planning to build a hobby aircraft. I am so confused about which kind of sensors should I use and how to use them in order to get the roll, pitch and yaw angles of the aircraft. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think I also have some problems about understanding the concept.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What are the ways/methods/agents to get the orientation of an aircraft at any instant?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In some sources there is something going on as the importance of order of the application of roll,pitch and yaw. But I cannot understand why this is related.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have used accelerometer values by inputting them into some formulas on the internet(which everybody uses but nobody explains well) to get the roll and pitch values. However could not understand how to manipulate them in order to meet my requirements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also have basic understanding about what a gyroscope is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance.&lt;/p&gt;&#xA;" OwnerUserId="23502" LastActivityDate="2019-07-31T22:21:35.680" Title="What is required to get the roll, pitch and yaw of an aerial vehicle?" Tags="&lt;imu&gt;&lt;gyroscope&gt;&lt;accelerometer&gt;" AnswerCount="2" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="19164" PostTypeId="2" ParentId="19113" CreationDate="2019-07-27T14:34:45.740" Score="2" Body="&lt;p&gt;When you create the node handle, you need to set it to the private namespace:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ros::NodeHandle n(&quot;~&quot;);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then the call to &lt;code&gt;n.getParam(&quot;diagonalSteps&quot;, doDiagonalSteps)&lt;/code&gt; will look for the parameter in the namespace &lt;code&gt;/astar_controller&lt;/code&gt; (the name of your node) where it was set when you passed an under-scored variable to it from the command line, instead of the global namespace which is what happens by default.&lt;/p&gt;&#xA;" OwnerUserId="16539" LastActivityDate="2019-07-27T14:34:45.740" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19165" PostTypeId="1" CreationDate="2019-07-27T14:36:57.227" Score="0" ViewCount="350" Body="&lt;p&gt;I'm looking for some kind of filter, algorithm which will allow me to compensate gyro yaw drift using heading of magnetometer. My project requires only yaw measurments and both sensors are flat. Is there any simple solution or i need to dig into more complicated filtering?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've got acc in my system but i think it's not necessary for this task.&lt;/p&gt;&#xA;" OwnerUserId="23508" LastActivityDate="2021-04-17T21:58:58.777" Title="Gyro yaw drift compensation" Tags="&lt;imu&gt;&lt;gyroscope&gt;&lt;magnetometer&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19166" PostTypeId="2" ParentId="19165" CreationDate="2019-07-27T17:12:18.927" Score="0" Body="&lt;p&gt;Your best would be using the &lt;a href=&quot;https://learn.adafruit.com/ahrs-for-adafruits-9-dof-10-dof-breakout/sensor-fusion-algorithms&quot; rel=&quot;nofollow noreferrer&quot;&gt;Madgwick filter&lt;/a&gt;, as its already implemented in several languages and programs. Yaw, pitch or roll can then be easily called from the filter. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Follow the link to a description from adafruit and their library.&lt;/p&gt;&#xA;" OwnerUserId="23148" LastActivityDate="2019-07-27T17:12:18.927" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19167" PostTypeId="1" CreationDate="2019-07-27T19:41:47.090" Score="1" ViewCount="40" Body="&lt;p&gt;I am new at the robotics area, and i need to deliver an activity until this week in my college based to solve the inverse kinematics problem from an article that doesn't have any code done, and after, purpose improvements on it to create one new article, for it i am trying to reach these existing results based in this article with a Puma 566 manipulator with 4 DOF.&#xA;&lt;a href=&quot;https://ieeexplore.ieee.org/abstract/document/100000&quot; rel=&quot;nofollow noreferrer&quot;&gt;Inverse kinematics of redundant robots using genetic algorithms&lt;/a&gt;&#xA; (Parker Et Al.) &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;+--------+------------------------+-------------------------------+-----------------------+--------------------------+----------+ &#xA;| Joint  | Initial Value(Degrees) | Final Value(Run 1) (Degrees)  | Final Value(Run 2) (Degrees) | Final Value(Run 2) (Degrees) |&#xA;+========+========================+===============================+==============================+===================+==========+ &#xA;|    1   |         +30.0          |            +8.75              |            +8.44             |           +8.44              |&#xA;+--------+------------------------+-------------------------------+------------------------------+------------------------------+ &#xA;|    2   |         -60.0          |            -45.44             |           -47.81             |         -48.08               |&#xA;+--------+------------------------+-------------------------------+------------------------------+------------------------------+ &#xA;|    3   |         +30.0          |            +14.59             |          +21.97              |         +23.29               |&#xA;+--------+------------------------+-------------------------------+------------------------------+------------------------------+&#xA;|    4   |         +60.0          |            +47.02             |           +39.64             |          +39.64              |&#xA;+--------+------------------------+-------------------------------+------------------------------+------------------------------+&#xA;|         Minimum Error (p)       |          7.1mm (0.279in)      |          7.1mm (0.279in)     |         7.1mm (0.279in)      |&#xA;----------------------------------+-------------------------------+------------------------------+------------------------------+&#xA;|         Displacement (Max)      |             21.3 deg.         |             21.6 deg.        |             21.6 deg.        |&#xA;----------------------------------+-------------------------------+------------------------------+------------------------------+&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So for the Puma 566 i considered these as being the initial parameters:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;+----------------+-------+---------+-------+------=-+&#xA;|  Link/Joint    |  a_i  |   α_i   |  d_i  |   θ_i  |&#xA;+----------------+-------+---------+-------+------=-+&#xA;|        1       |   0   |   +π/2  |  a_i  | θ^*_1  |&#xA;+----------------+-------+---------+-------+------=-+&#xA;|        2       |  a_2  |     0   | -d_2  | θ^*_2  |&#xA;+----------------+-------+---------+-------+------=-+&#xA;|        3       |  a_3  |     0   |   0   | θ^*_3  |&#xA;+----------------+-------+---------+-------+--------+&#xA;|        4       |  a_4  |     0   |   0   | θ^*_4  |&#xA;+----------------+-------+---------+-------+--------+&#xA;&#xA;and at the article they considered the distances being:&#xA;a_1 = 660.4mm(26.00in)&#xA;a_2 = 431.8mm(17.00in)&#xA;d_2 = 149.1mm(5.87in)&#xA;a_3 = 254.0mm(10.00in)&#xA;a_4 = 196.85mm(7.75in)&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Below i did the python code by myself following the classic equations to solve the forward and the inverse kinematics:&lt;/p&gt;&#xA;&#xA;&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;import numpy as np&#xA;#import sympy as sp&#xA;&#xA;'''Puma 566 Redundant Robot'''&#xA;&#xA;'''input parameters'''&#xA;'''&#xA;sin = symbols('sin')&#xA;cos = symbols('cos')&#xA;alpha = symbols('\u03B1')&#xA;theta = symbols('\u03B8')&#xA;a_i = symbols('a_i')&#xA;d_i = symbols('d_i')&#xA;'''&#xA;&#xA;&#xA;#link1/joint1:&#xA;#a_1 = 660.4mm&#xA;a_1 = 0&#xA;alpha_1 = np.rad2deg(np.pi/2)&#xA;#d_1 = symbols('a_1')&#xA;d_1 = 660.4/1000 #d_1 == a_1&#xA;theta_1 = 30&#xA;#link2/joint2:&#xA;#a_2 = symbols('a_2')&#xA;a_2 = 431.8/1000&#xA;alpha_2 = 0&#xA;#d_2 = symbols('-d_2')&#xA;d_2 = -149.1/1000&#xA;theta_2 = -60&#xA;#link3/joint3:&#xA;#a_3 = symbols('a_3')&#xA;a_3 = 254.0/1000&#xA;alpha_3 = 0&#xA;d_3 = 0&#xA;theta_3 = 30&#xA;#link4/joint4:&#xA;#a_4 = symbols('a_4')&#xA;a_4 = 196.85/1000&#xA;alpha_4 = 0&#xA;d_4 = 0&#xA;theta_4 = 60&#xA;&#xA;&#xA;'A_1 values'&#xA;A_1r1_1 = np.cos(theta_1)&#xA;A_1r1_2 = -np.sin(theta_1)*np.cos(alpha_1)&#xA;A_1r1_3 = np.sin(theta_1)*np.sin(alpha_1)&#xA;A_1d_x = a_1*np.cos(theta_1)&#xA;A_1r2_1 = np.sin(theta_1)&#xA;A_1r2_2 = np.cos(theta_1)*np.cos(alpha_1)&#xA;A_1r2_3 = -np.cos(theta_1)*np.sin(alpha_1)&#xA;A_1d_y = a_1*np.sin(theta_1)&#xA;A_1r3_1 = 0&#xA;A_1r3_2 = np.sin(alpha_1)&#xA;A_1r3_3 = np.cos(alpha_1)&#xA;A_1d_z = d_1&#xA;&#xA;'A_2 values'&#xA;A_2r1_1 = np.cos(theta_2)&#xA;A_2r1_2 = -np.sin(theta_2)*np.cos(alpha_2)&#xA;A_2r1_3 = np.sin(theta_2)*np.sin(alpha_2)&#xA;A_2d_x = a_2*np.cos(theta_2)&#xA;A_2r2_1 = np.sin(theta_2)&#xA;A_2r2_2 = np.cos(theta_2)*np.cos(alpha_2)&#xA;A_2r2_3 = -np.cos(theta_2)*np.sin(alpha_2)&#xA;A_2d_y = a_2*np.sin(theta_2)&#xA;A_2r3_1 = 0&#xA;A_2r3_2 = np.sin(alpha_2)&#xA;A_2r3_3 = np.cos(alpha_2)&#xA;A_2d_z = d_2&#xA;&#xA;'A_3 values'&#xA;A_3r1_1 = np.cos(theta_3)&#xA;A_3r1_2 = -np.sin(theta_3)*np.cos(alpha_3)&#xA;A_3r1_3 = np.sin(theta_3)*np.sin(alpha_3)&#xA;A_3d_x = a_3*np.cos(theta_3)&#xA;A_3r2_1 = np.sin(theta_3)&#xA;A_3r2_2 = np.cos(theta_3)*np.cos(alpha_3)&#xA;A_3r2_3 = -np.cos(theta_3)*np.sin(alpha_3)&#xA;A_3d_y = a_3*np.sin(theta_3)&#xA;A_3r3_1 = 0&#xA;A_3r3_2 = np.sin(alpha_3)&#xA;A_3r3_3 = np.cos(alpha_3)&#xA;A_3d_z = d_3&#xA;&#xA;'A_4 values'&#xA;A_4r1_1 = np.cos(theta_4)&#xA;A_4r1_2 = -np.sin(theta_4)*np.cos(alpha_4)&#xA;A_4r1_3 = np.sin(theta_4)*np.sin(alpha_4)&#xA;A_4d_x = a_4*np.cos(theta_4)&#xA;A_4r2_1 = np.sin(theta_4)&#xA;A_4r2_2 = np.cos(theta_4)*np.cos(alpha_4)&#xA;A_4r2_3 = -np.cos(theta_4)*np.sin(alpha_4)&#xA;A_4d_y = a_4*np.sin(theta_4)&#xA;A_4r3_1 = 0&#xA;A_4r3_2 = np.sin(alpha_4)&#xA;A_4r3_3 = np.cos(alpha_4)&#xA;A_4d_z = d_4&#xA;&#xA;'transformation matrices'&#xA;A_1 = np.matrix([[A_1r1_1,A_1r1_2,A_1r1_3,A_1d_x],[A_1r2_1,A_1r2_2,A_1r2_3,A_1d_y],[A_1r3_1,A_1r3_2,A_1r3_3,A_1d_z],[0,0,0,1]])&#xA;A_2 = np.matrix([[A_2r1_1,A_2r1_2,A_2r1_3,A_2d_x],[A_2r2_1,A_2r2_2,A_2r2_3,A_2d_y],[A_2r3_1,A_2r3_2,A_2r3_3,A_2d_z],[0,0,0,1]])&#xA;A_3 = np.matrix([[A_3r1_1,A_3r1_2,A_3r1_3,A_3d_x],[A_3r2_1,A_3r2_2,A_3r2_3,A_3d_y],[A_3r3_1,A_3r3_2,A_3r3_3,A_3d_z],[0,0,0,1]])&#xA;A_4 = np.matrix([[A_4r1_1,A_4r1_2,A_4r1_3,A_4d_x],[A_4r2_1,A_4r2_2,A_4r2_3,A_4d_y],[A_4r3_1,A_4r3_2,A_4r3_3,A_4d_z],[0,0,0,1]])&#xA;&#xA;'transformation matrix Hi-1_i = A_i+1 = qi+1'&#xA;H0_1 = A_1&#xA;H1_2 = A_2&#xA;H2_3 = A_3&#xA;H3_4 = A_4&#xA;&#xA;'orientation matrix'&#xA;R0_1 = np.matrix([[A_1r1_1,A_1r1_2,A_1r1_3],[A_1r2_1,A_1r2_2,A_1r2_3],[A_1r3_1,A_1r3_2,A_1r3_3]])&#xA;R1_2 = np.matrix([[A_2r1_1,A_2r1_2,A_2r1_3],[A_2r2_1,A_2r2_2,A_2r2_3],[A_2r3_1,A_2r3_2,A_2r3_3]])&#xA;R2_3 = np.matrix([[A_3r1_1,A_3r1_2,A_3r1_3],[A_3r2_1,A_3r2_2,A_3r2_3],[A_3r3_1,A_3r3_2,A_3r3_3]])&#xA;R3_4 = np.matrix([[A_4r1_1,A_4r1_2,A_4r1_3],[A_4r2_1,A_4r2_2,A_4r2_3],[A_4r3_1,A_4r3_2,A_4r3_3]])&#xA;&#xA;'product of orientation matrix'&#xA;R0_2 = np.dot(R0_1,R1_2)&#xA;R0_3 = np.dot(R0_2,R2_3)&#xA;R2_4 = np.dot(R0_3,R3_4)&#xA;&#xA;'''transformation matrix Hi-1_i, Ti-1_i:'''&#xA;H0_2 = np.dot(H0_1,H1_2)&#xA;H0_3 = np.dot(H0_2,H2_3)&#xA;H0_4 = np.dot(H0_3,H3_4)&#xA;&#xA;'individual matrices'&#xA;print('H0_1:',H0_1)&#xA;print(&quot;\n&quot;)&#xA;print('H1_2:',H1_2)&#xA;print(&quot;\n&quot;)&#xA;print('H2_3:',H2_3)&#xA;print(&quot;\n&quot;)&#xA;print('H3_4:',H3_4)&#xA;print(&quot;\n&quot;)&#xA;&#xA;''&#xA;print(&quot;Matrix H0_4/T0_4:&quot;,H0_4)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;in the first interaction i got these results:&lt;/p&gt;&#xA;&#xA;&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;H0_1: [[ 0.15425145 -0.4427109  -0.88329698  0.        ]&#xA; [-0.98803162 -0.069116   -0.13790028 -0.        ]&#xA; [ 0.          0.89399666 -0.44807362  0.6604    ]&#xA; [ 0.          0.          0.          1.        ]]&#xA;&#xA;&#xA;H1_2: [[-0.95241298 -0.30481062  0.         -0.41125192]&#xA; [ 0.30481062 -0.95241298  0.          0.13161723]&#xA; [ 0.          0.          1.         -0.1491    ]&#xA; [ 0.          0.          0.          1.        ]]&#xA;&#xA;&#xA;H2_3: [[ 0.15425145  0.98803162 -0.          0.03917987]&#xA; [-0.98803162  0.15425145 -0.         -0.25096003]&#xA; [ 0.          0.          1.          0.        ]&#xA; [ 0.          0.          0.          1.        ]]&#xA;&#xA;&#xA;H3_4: [[-0.95241298  0.30481062 -0.         -0.1874825 ]&#xA; [-0.30481062 -0.95241298  0.         -0.06000197]&#xA; [ 0.          0.          1.          0.        ]&#xA; [ 0.          0.          0.          1.        ]]&#xA;&#xA;&#xA;Matrix H0_4/T0_4: [[ 0.46120588  0.08411651 -0.88329698 -0.00427582]&#xA; [-0.08411651 -0.98686773 -0.13790028  0.34517934]&#xA; [-0.88329698  0.13790028 -0.44807362  0.89535356]&#xA; [ 0.          0.          0.          1.        ]]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and when i did the inverse kinematics the angles weren't compatible with the first interaction of that table:&lt;/p&gt;&#xA;&#xA;&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;'''theta_1 value'''&#xA;x0_4 = H0_4[0,3]&#xA;y0_4 = H0_4[1,3]&#xA;z0_4 = H0_4[2,3]&#xA;r2 = (np.power(x0_4,2)+np.power(y0_4,2)-np.power(d_2,2))&#xA;s = z0_4-d_1&#xA;&#xA;invtheta1 = np.arctan2(x0_4,y0_4) &#xA;&#xA;'''theta_3 value'''&#xA;&#xA;num_beta = r2+np.power(s,2)-np.power(a_2,2)-np.power(a_3,2)&#xA;den_beta = 2*(a_2*a_3)&#xA;beta=num_beta/den_beta&#xA;invtheta3 = np.arctan2(beta,np.sqrt(1-(np.power(-beta,2))))&#xA;invtheta3&#xA;&#xA;'''theta_2 value'''&#xA;num2=(a_3*np.sin(theta_3))&#xA;den2=(a_2+(a_3*np.cos(theta_3))) &#xA;invtheta2 = np.arctan2(np.sqrt(r2),s)-np.arctan2(den2,num2)&#xA;invtheta2&#xA;&#xA;print(invtheta1,invtheta2,invtheta3)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and the result:&lt;/p&gt;&#xA;&#xA;&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;-0.01238661073906638 -1.1360414233492173 -0.4673695117711878&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;At the moment i didn't do any functions or conditions on it to understand the algorithm and a test to check if it's correctly being performed, the code is working well but i can't able to reach the desired results(the inverse kinematics of the angles are giving a very low value... i would like to know if there are any incorrect values and which do you consider the best way to reach close the results? They did the genetic algorithm implementations also after but i don't know if is necessary now. Thanks&lt;/p&gt;&#xA;" OwnerUserId="23498" LastEditorUserId="23498" LastEditDate="2019-07-27T20:05:31.643" LastActivityDate="2019-07-27T20:05:31.643" Title="Inverse Kinematics of Puma 566 giving low angle results with DH convention" Tags="&lt;robotic-arm&gt;&lt;inverse-kinematics&gt;&lt;python&gt;&lt;first-robotics&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19168" PostTypeId="2" ParentId="19163" CreationDate="2019-07-27T19:49:29.213" Score="2" Body="&lt;p&gt;The only sustainable long-term acceleration (for anything terrestrial) is gravity. The &lt;a href=&quot;https://x-io.co.uk/open-source-imu-and-ahrs-algorithms/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Madgwick algorithm&lt;/a&gt; uses gravity and a magnetometer to correct gyro drift. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=BXsGWoOMtmU&quot; rel=&quot;nofollow noreferrer&quot;&gt;Watch the video&lt;/a&gt;, then head to the site - there are open-source implementations already written for you in Matlab, C, and C#. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2019-07-27T19:49:29.213" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19169" PostTypeId="2" ParentId="19160" CreationDate="2019-07-27T22:47:15.173" Score="0" Body="&lt;p&gt;DH parameterisation is always hard.  Using Robotics Toolbox for MATLAB we can easily do the forward kinematics without DH parameters.  First create a string of simple transforms which I took directly from your diagrams&lt;/p&gt;&#xA;&#xA;&lt;pre class=&quot;lang-matlab prettyprint-override&quot;&gt;&lt;code&gt;&amp;gt;&amp;gt; s = 'Rz(q1)Tz(0.077)Ry(q2)Tz(0.128)Tx(0.024)Ry(q3)Tx(0.124)Ry(q4)Tx(0.126)';&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;which describes the kinematic chain with length constants and variable angles represented by &lt;code&gt;qj&lt;/code&gt;.  Now the FK is simply&lt;/p&gt;&#xA;&#xA;&lt;pre class=&quot;lang-matlab prettyprint-override&quot;&gt;&lt;code&gt;&amp;gt;&amp;gt; trchain(s, [0 0 0 0])&#xA;ans =&#xA;    1.0000         0         0    0.2740&#xA;         0    1.0000         0         0&#xA;         0         0    1.0000    0.2050&#xA;         0         0         0    1.0000&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;where the values in the second argument are substituted for the joint angles, in this case all zero.  The resulting SE(3) matrix shows a translation in the x- and z-directions which is correct.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could use this to check your DH version.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My Toolbox also has an automated symbolic manipulation tool, not perfect, to convert a similar string format (all length parameters must be symbolic not numeric) to DH parameters&lt;/p&gt;&#xA;&#xA;&lt;pre class=&quot;lang-matlab prettyprint-override&quot;&gt;&lt;code&gt;&amp;gt;&amp;gt; s = 'Rz(q1)Tz(L1)Ry(q2)Tz(L2)Tx(L3)Ry(q3)Tx(L4)Ry(q4)Tx(L5)'&#xA;&amp;gt;&amp;gt; DHFactor(s)&#xA;DHFactor: error: Incomplete factorization, no DH equivalent found&#xA;&#xA;ans =&#xA;&#xA;DH(q1, L1, 0, -90).DH(q2, 0, L3, 0).Ty(-L2).DH(q3, 0, L4, 0).DH(q4, 0, L5, 90)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;but it fails for your example.  The translation L2 hasn't been assigned to any DH term.  This is more likely a problem with my code than your mechanism.&lt;/p&gt;&#xA;" OwnerUserId="21223" LastActivityDate="2019-07-27T22:47:15.173" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19170" PostTypeId="1" CreationDate="2019-07-28T03:40:11.453" Score="1" ViewCount="54" Body="&lt;p&gt;I am trying to implement boustrophedon algorithm using mobile robot. Can I implement this without map? I am planning to use dimensions (x,y) of the farm as reference assuming it is rectangular in shape. Has anyone tried this method? What sensors should I use? Is there can Ros package available for this ?&lt;/p&gt;&#xA;" OwnerUserId="23511" LastEditorUserId="18870" LastEditDate="2019-07-29T01:34:46.950" LastActivityDate="2019-07-29T01:34:46.950" Title="ROS Algorithms &amp; sensors" Tags="&lt;ros&gt;&lt;algorithm&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19172" PostTypeId="2" ParentId="19148" CreationDate="2019-07-28T13:09:58.750" Score="1" Body="&lt;p&gt;When the charger detects that the battery is &quot;fully charged&quot;, it switches to &quot;Trickle Charging&quot; to maintain the battery at &quot;fully charged&quot;.&lt;/p&gt;&#xA;" OwnerUserId="10195" LastActivityDate="2019-07-28T13:09:58.750" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19174" PostTypeId="1" AcceptedAnswerId="19185" CreationDate="2019-07-29T16:03:37.733" Score="2" ViewCount="52" Body="&lt;p&gt;I cannot comment on the original answer, so I had to ask like this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am trying to learn IMU's, accelerometers, gyros etc. for a while.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I came across with this answer below,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://engineering.stackexchange.com/a/22182/21263&quot;&gt;https://engineering.stackexchange.com/a/22182/21263&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;From the accelerator sensor data, you can only calculate pitch and&#xA;  roll. The bellow document from Freescale explains with plenty of&#xA;  information what you need:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;[AN3461 - Tilt Sensing Using a Three-Axis Accelerometer][1]&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Based on the sayings of the document,&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$\tan \phi_{xyz} = \frac{G_{py}}{G_{pz}}$$&lt;/span&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$\tan \theta_{xyz} = \frac{-G_{px}}{G_{py}\sin \phi + G_{pz}\cos&#xA;&amp;gt; \phi} = \frac{-G_{px}}{\sqrt{G_{py}^2 + G_{pz}^2}}$$&lt;/span&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;which equates to:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;roll = atan2(accelerationY, accelerationZ)&#xA;&#xA;pitch = atan2(-accelerationX, sqrt(accelerationY*accelerationY + accelerationZ*accelerationZ))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;  &lt;p&gt;Of course, the result is this only when the rotations are occurring on&#xA;  a specific order (Rxyz):&lt;/p&gt;&#xA;  &#xA;  &lt;ol&gt;&#xA;  &lt;li&gt;Roll around the x-axis by angle &lt;span class=&quot;math-container&quot;&gt;$\phi$&lt;/span&gt;&lt;/li&gt;&#xA;  &lt;li&gt;Pitch around the y-axis by angle &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt;&lt;/li&gt;&#xA;  &lt;li&gt;Yaw around z-axis by angle &lt;span class=&quot;math-container&quot;&gt;$\psi$&lt;/span&gt;&lt;/li&gt;&#xA;  &lt;/ol&gt;&#xA;  &#xA;  &lt;p&gt;Depending on the rotations order, you get different equations. For the&#xA;  &lt;span class=&quot;math-container&quot;&gt;$R_{xyz}$&lt;/span&gt; rotation order, you can not find the angle &lt;span class=&quot;math-container&quot;&gt;$\psi$&lt;/span&gt; for the&#xA;  Yaw around z-axis.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;[1]:&#xA;  &lt;a href=&quot;https://cache.freescale.com/files/sensors/doc/app_note/AN3461.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://cache.freescale.com/files/sensors/doc/app_note/AN3461.pdf&lt;/a&gt;&lt;br&gt;&#xA;  [2]: &lt;a href=&quot;https://i.stack.imgur.com/hSXgP.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://i.stack.imgur.com/hSXgP.png&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;But I don't see how the order of turn motions matters in case of getting pitch &amp;amp; roll from accelerometer data. Without the histoy of orders, the accelerometer will give specific outputs at specific orientations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what I am actually asking is whether the answer I shared is logical or not. Could you please clear the situation for me?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="23502" LastActivityDate="2019-07-31T04:23:56.857" Title="Is the information on the following link logical?" Tags="&lt;imu&gt;&lt;accelerometer&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19175" PostTypeId="2" ParentId="8823" CreationDate="2019-07-29T18:23:57.027" Score="0" Body="&lt;p&gt;I am sure the others answered way-better than I will do, but I want to provide a shorter answer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;mAh is unit of charge(Amperes * seconds = Coulombs), then if a battery is called 10000 mAh, you have such charge that,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Battery can deliver(before it runs out of charge) 1 miliamperes for 10000 hours, or 1 Amperes for 10 hour, continiously.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The current drained from the battery * the duration of process = decrease in your total charge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you drain 15 miliamperes for 30 minutes then you lose 15mA*0.5h = 7.5mAh of charge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Think your battery as a water tank and current as speed of water flow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's that simple actually.&lt;/p&gt;&#xA;" OwnerUserId="23502" LastEditorUserId="23502" LastEditDate="2019-07-31T04:40:38.290" LastActivityDate="2019-07-31T04:40:38.290" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19176" PostTypeId="2" ParentId="19174" CreationDate="2019-07-29T20:22:30.723" Score="1" Body="&lt;p&gt;The Answer is logical simply because its a mathematical statement that explains how calculate Euler angles..from accel measurements...it also explains one of the caveats of using said system. Namely what was suggested in the comments&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.m.wikipedia.org/wiki/Gimbal_lock&quot; rel=&quot;nofollow noreferrer&quot;&gt;Gimbal lock&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/xcbrG.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xcbrG.jpg&quot; alt=&quot;thing&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the &lt;a href=&quot;https://upload.wikimedia.org/wikipedia/commons/4/49/Gimbal_Lock_Plane.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;wiki animation&lt;/a&gt; one can see that the system can get stuck if rotated in a specific way causing them system to lock up and entire angles being completely gone. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Gimbal locked airplane. When the pitch (green) and yaw (magenta) gimbals become aligned, changes to roll (blue) and yaw apply the same rotation to the airplane. -wiki&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This is one of the reasons &lt;a href=&quot;https://en.m.wikipedia.org/wiki/Quaternion&quot; rel=&quot;nofollow noreferrer&quot;&gt;Quaternions&lt;/a&gt; Are used as a way to measure angle as the dont suffer from the same issue as Euler angles, but are however difficult to visualize. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Quaternions find uses in both pure and applied mathematics, in particular for calculations involving three-dimensional rotations such as in three-dimensional computer graphics, computer vision, and crystallographic texture analysis.&lt;a href=&quot;https://en.m.wikipedia.org/wiki/Sensor_fusion&quot; rel=&quot;nofollow noreferrer&quot;&gt;5&lt;/a&gt; In practical applications, they can be used alongside other methods, such as Euler angles and rotation matrices, or as an alternative to them, depending on the application.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;However, accels...are &lt;em&gt;generally&lt;/em&gt;...useless by themselves if you want to calculate a real angle. As such one generally &lt;a href=&quot;https://en.m.wikipedia.org/wiki/Sensor_fusion&quot; rel=&quot;nofollow noreferrer&quot;&gt;fuses them &lt;/a&gt;with gyros and sometimes magnometers or other sensors to get a more stable and real measurement. &lt;/p&gt;&#xA;" OwnerUserId="23148" LastEditorUserId="23502" LastEditDate="2019-07-30T09:21:41.117" LastActivityDate="2019-07-30T09:21:41.117" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19177" PostTypeId="1" CreationDate="2019-07-29T21:43:31.193" Score="1" ViewCount="644" Body="&lt;p&gt;We are designing robot that will pick and place sheets of paper. We have found an issue that it is hard to suck only first sheet of paper of paper pack. Issue occurs because paper sheet passes vacuum through it and vacuum sucks additional (2 - 3) sheets of paper. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How to resolve this? Maybe we are using too small suction cups or incorrect design?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Current pneumatic system contains following:&#xA;1) Vacuum pump that produces 120 kpa vacuum&#xA;2) SGPN 20 FPM-65 suction cups 20 mm in diameter for paper handling&#xA;3) Need to hold standard office paper A4 80 gsm (210 x 297 mm)&#xA;4) Distance between suction cups is 100 x 125 mm&#xA;5) Paper pack could contain at least 30 sheets of paper.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Current experiments results.&#xA;1) 1 suction cup easely holds 5 sheets of paper because vacuum is flowing through paper&#xA;2) if pressure is decreased to minimum its stops sucking or sucks 3 sheets&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Solution which we are trying to get is shown on this video:&#xA;&lt;a href=&quot;https://www.youtube.com/watch?v=FT7NWbXyM7Q&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=FT7NWbXyM7Q&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similar issue that we are getting is shown on this video:&#xA;&lt;a href=&quot;https://www.youtube.com/watch?v=LKBDzkm3moo&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=LKBDzkm3moo&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe somebody have other ideas how to make it possible to suck only first sheet of paper without mechanical holding of it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/yT3ZC.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/yT3ZC.png&quot; alt=&quot;Suction cups example&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/t0YVl.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/t0YVl.png&quot; alt=&quot;Paper suction cup&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/0pJUa.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0pJUa.png&quot; alt=&quot;Paper suction&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="23520" LastEditorUserId="23520" LastEditDate="2019-07-30T19:39:13.133" LastActivityDate="2019-09-03T15:47:56.770" Title="How to suck using vacuum only first sheet of paper from pack of paper?" Tags="&lt;mobile-robot&gt;" AnswerCount="4" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="19178" PostTypeId="2" ParentId="19177" CreationDate="2019-07-29T22:37:42.733" Score="1" Body="&lt;p&gt;As I suggested, there can be several issues going wrong. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of them is static, this can definitely cause issues. Though it's hard to know if that's specifically yours or not. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other is your design is overkill. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I assumed you're trying to pick up a sheet of A4, 80gsm paper.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do some basic mathemagics:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$\text{sheet}=\frac{(0.08\text{kg}) \times\left(62370\text{mm}^2\right)}{1\text{m}^2} == 0.0049896\text{kg}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Add some gravity, &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$\text{sheet} \times\left(9.81\text{m}/\text{s}^2\right) == 0.048948\text{N}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now calculate the force each cup is providing..with giving comment infos...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$(30\text{kPa})\times \left(100 \pi \text{mm}^2\right)== 9.42478\text{N}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My first suggestion is drastically reducing your vacuum...30kpa at &lt;em&gt;each&lt;/em&gt; cup is just &lt;em&gt;way&lt;/em&gt; too much. After doing that, one could also consider other things..reducing cup size, spreading out your cups to the corners...dealing with possible static, etc etc. &lt;/p&gt;&#xA;" OwnerUserId="23148" LastActivityDate="2019-07-29T22:37:42.733" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19179" PostTypeId="1" AcceptedAnswerId="19182" CreationDate="2019-07-29T23:43:00.417" Score="2" ViewCount="114" Body="&lt;p&gt;I want to make an drone with these motors: &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/B01M3UBGU9&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.amazon.com/XtremeAmazing-2200KV-Brushless-2212-6-helicopter/dp/B01M3UBGU9&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1: First of all, are they good? If not, could you suggest me other motors?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2: If they need 12V and their max power is 342W, is the max current is 28,5A?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3: If the max current is 28,5A/motor x 4 motors x 65% power = 74,1A?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;4: If the motors take 74,1A and I have a 3000mAh battery, does this mean I can only use my drone for 2,43 minutes?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(3000mAh / 74 100mA = 0,04...h = 2,429min)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;5: If yes, 2,43min is not a lot, how should I do to be able to use my drone for at least 15min without having to recharge the battery?&lt;/p&gt;&#xA;" OwnerUserId="23521" LastActivityDate="2019-07-31T05:00:21.280" Title="Am I calculating my drone's power consumption right?" Tags="&lt;motor&gt;&lt;battery&gt;&lt;brushless-motor&gt;&lt;power&gt;&lt;amperage&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19180" PostTypeId="1" CreationDate="2019-07-30T01:26:21.163" Score="1" ViewCount="714" Body="&lt;p&gt;I'm trying to send a custom arm to a pose through moveit_commander_cmdline.py, it fails after sending to the said pose using &quot; go default_pose&quot; and returns an error. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ABORTED: Solution found but controller failed during execution Failed while moving to default_pose&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;What could be responsible for this error? And How can I fix it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The info and warning from my launch file is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Combined planning and execution request received for MoveGroup action. Forwarding to planning and execution pipeline.  [ INFO]&#xA;[1564316145.917054276, 2449.038000000]: Planning attempt 1 of at most 1  [ INFO]&#xA;[1564316145.917319501, 2449.038000000]: Starting state is just outside bounds (joint 'hand_2_joint'). Assuming within bounds.  [INFO]&#xA;[1564316145.920258662, 2449.038000000]: Planner configuration 'pickup' will use planner 'geometric::RRT'. Additional configuration parameters will be set when the planner is constructed.  [ INFO]&#xA;[1564316145.925439206, 2449.038000000]: RRT: Starting planning with 1 states already in datastructure  [ INFO]&#xA;[1564316145.967999895, 2449.047000000]: RRT: Created 32 states  [ INFO]&#xA;[1564316145.970035099, 2449.047000000]: Solution found in 0.047451 seconds  [ INFO]&#xA;[1564316146.019862352, 2449.049000000]: SimpleSetup: Path simplification took 0.049343 seconds and changed from 4 to 2 states  [ INFO]&#xA;[1564316146.022653470, 2449.049000000]: Planning adapters have added states at index positions: [ 0 ]  [ WARN]&#xA;[1564316148.097078345, 2449.242000000]: Controller /custom_controller failed with error code PATH_TOLERANCE_VIOLATED  [ WARN]&#xA;[1564316148.097649266, 2449.242000000]: Controller handle /custom_controller reports status ABORTED  [ INFO]&#xA;[1564316148.097916866, 2449.242000000]: Completed trajectory execution with status ABORTED ...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;My controller.yaml in moveit! configuration folder is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;controller_list:&#xA;  - name: /custom_controller&#xA;    action_ns: follow_joint_trajectory&#xA;    type: FollowJointTrajectory&#xA;    joints:&#xA;      - hand_2_joint&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And my controller.yaml in my robot package folder is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;hand_controller:&#xA;  type: position_controllers/JointTrajectoryController&#xA;  joints:&#xA;    - hand_2_joint&#xA;  constraints:&#xA;    goal_time: 0.6                  &#xA;    stopped_velocity_tolerance: 0.05&#xA;    hand_2_joint: {trajectory: 0.1, goal: 0.1}                   &#xA;  stop_trajectory_duration: 0.5&#xA;  state_publish_rate:  50            &#xA;  action_monitor_rate: 10&#xA;&#xA;gazebo_ros_control/pid_gains:&#xA;  hand_2_joint: {p: 0.0, i: 0.0, d: 0.0}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="20911" LastEditorUserId="20911" LastEditDate="2019-07-30T14:36:43.873" LastActivityDate="2019-07-30T14:36:43.873" Title="moveit! trajectory execution aborted" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;ros&gt;&lt;motion-planning&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19182" PostTypeId="2" ParentId="19179" CreationDate="2019-07-30T09:58:37.377" Score="1" Body="&lt;p&gt;Your calculations assume that the motor will be running at full power all the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming your quadcopter's weight is less than 4 times the max motor thrust (which it needs to be to have any control), then you won't be running at full power.&lt;/p&gt;&#xA;" OwnerUserId="21215" LastActivityDate="2019-07-30T09:58:37.377" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19183" PostTypeId="1" CreationDate="2019-07-30T20:45:30.670" Score="0" ViewCount="88" Body="&lt;p&gt;Hi i am building a robot that can travel on a transparent/glass surface but i want to map the whole surface. What is the best Solution for a 2D mapping of a transparent surface?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-Is Lidar mapping good enough for this project?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-I think it would also work with a hard-coded algorithm but which sensors are required to detect the edge of a Transparent surface?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank You !&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/YmALJ.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/YmALJ.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="23528" LastEditorUserId="23528" LastEditDate="2019-07-30T22:32:26.557" LastActivityDate="2020-04-26T15:06:25.587" Title="Mapping on Glass Surface" Tags="&lt;sensors&gt;&lt;mapping&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19184" PostTypeId="1" CreationDate="2019-07-30T21:23:45.290" Score="0" ViewCount="20" Body="&lt;p&gt;I'm looking for a microscale valve/controller but am having a hard time finding what I'm looking for or a supplier. It will be used for a propulsion system in a CubeSat and as such needs to be fairly small. It will need to be able to hold 1000-2000 psi and have a wide operating temperature range. Most suppliers I've explored so far either have the pressure threshold I'm looking for but the valves are not small enough or vice-versa. Any advice on a supplier or a valve in particular would be great. &lt;/p&gt;&#xA;" OwnerUserId="23529" LastActivityDate="2019-07-30T21:23:45.290" Title="Looking for a microscale valve/controller" Tags="&lt;valve&gt;" AnswerCount="0" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="19185" PostTypeId="2" ParentId="19174" CreationDate="2019-07-31T04:23:56.857" Score="0" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Without the histoy of orders, the accelerometer will give specific outputs at specific orientations.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Correct, &lt;strong&gt;but&lt;/strong&gt; you might &lt;em&gt;define&lt;/em&gt; a specific orientation ambiguously, and if you are ambiguous about it then you need to clarify. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider this example: &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Rotate 180 degrees about your head-to-toe axis. Now you're facing the opposite direction as your original pose, then&lt;/li&gt;&#xA;&lt;li&gt;Rotate forward 90 degrees about your heel-to-heel axis. Now you're laying on your stomach (face-down), with your head pointed opposite of the direction you were originally facing.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Now, keep the rotations the same, but change the order:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Rotate forward 90 degrees about your heel-to-heel axis. Now you're laying on your stomach (face-down), with your head pointed &lt;em&gt;in the same direction&lt;/em&gt; as you were originally facing, then&lt;/li&gt;&#xA;&lt;li&gt;Rotate 180 degrees about your head-to-toe axis. Now you are laying on your back (face-up), with your head pointed in the &lt;em&gt;same&lt;/em&gt; direction as it was originally. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Now, if you had an IMU/accelerometer in your hand, it would clearly give different readings for those two results, but that's because they're two different orientations. You can't just say it's 180 about this and 90 about that, you have to &lt;em&gt;specify&lt;/em&gt; which rotation happens first if you want someone else to be able to understand. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The way I think about it is that the order of rotation is an extra parameter in the description of the orientation. An angle about each of three axes and then an ordering of those axes. Four things to track: x, y, z, and the order in which they're applied. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to guarantee you're getting a pose right without having to worry about whether you're using the right formula, you may want to consider &lt;em&gt;quaternions.&lt;/em&gt; They also happen to have four parameters, but they're not in any kind of sensible units. You can imagine what a 45 degree rotation about an x-axis looks like, but what does a quaternion look like? &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2019-07-31T04:23:56.857" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19186" PostTypeId="2" ParentId="19179" CreationDate="2019-07-31T05:00:21.280" Score="0" Body="&lt;p&gt;You may want to have a look at this &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.ecalc.ch/xcoptercalc_mobile.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.ecalc.ch/xcoptercalc_mobile.php&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;or this kind of websites.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I cannot comment on answers, but wanted to share this.&lt;/p&gt;&#xA;" OwnerUserId="23502" LastActivityDate="2019-07-31T05:00:21.280" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19187" PostTypeId="2" ParentId="19183" CreationDate="2019-07-31T12:06:34.667" Score="-2" Body="&lt;p&gt;I guess you can apply plaster tape which is non residue to glass on the point of laser and do gmapping and then remove it &lt;/p&gt;&#xA;" OwnerUserId="23316" LastActivityDate="2019-07-31T12:06:34.667" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19188" PostTypeId="2" ParentId="19183" CreationDate="2019-07-31T13:59:39.117" Score="1" Body="&lt;p&gt;The surface itself won't help you, so the question is if you have a border of objects next to the surface that your laser can see. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You also don't have to fix your sensor to the robot. You can also mount a laserscanner on the glas surface (e.g. with some suction cups), locate the robot and then send it its position. (Same idea as a ground radar at an airport)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your robot could drive off the surface, check the approaches used by vacuum robots (which should also not drive down the stairs). Downfacing IR- or Ultrasonic sensors work nicely.&lt;/p&gt;&#xA;" OwnerUserId="23196" LastActivityDate="2019-07-31T13:59:39.117" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19189" PostTypeId="1" CreationDate="2019-07-31T15:38:14.920" Score="2" ViewCount="44" Body="&lt;p&gt;After training my RC car, I use the following command:&#xA;&lt;code&gt;python drive.py --model trainmodel.h5&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;This gives me IP where I can go and see if the testing was successful and the car can avoid white lines.&lt;/p&gt;&#xA;&lt;p&gt;However, I don't know how to implement in the code that my stopsignhaarcascade.xml is being used.&lt;/p&gt;&#xA;&lt;p&gt;The code of Drive.py:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;quot;&amp;quot;&amp;quot;&#xA;    Scripts to drive a donkey 2 car and train a model for it.&#xA;Usage:&#xA;    drive.py [--model=model]&#xA;Options:&#xA;    -h --help        Show this screen.&#xA;    --model MODEL    Path to the model to use for your autopilot.&#xA;&amp;quot;&amp;quot;&amp;quot;&#xA;&#xA;import os&#xA;from docopt import docopt&#xA;&#xA;import donkeycar as dk&#xA;from donkeypart_picamera import PiCamera&#xA;from donkeypart_keras_behavior_cloning import KerasLinear&#xA;from donkeypart_PCA9685_actuators import PCA9685, PWMSteering, PWMThrottle&#xA;from donkeypart_tub import TubWriter&#xA;from donkeypart_web_controller import LocalWebController&#xA;from donkeypart_common import Timestamp&#xA;&#xA;&#xA;def drive(cfg, model_path=None, use_chaos=False):&#xA;    &amp;quot;&amp;quot;&amp;quot;&#xA;    &amp;quot;&amp;quot;&amp;quot;&#xA;&#xA;    V = dk.vehicle.Vehicle()&#xA;&#xA;    clock = Timestamp()&#xA;    V.add(clock, outputs=['timestamp'])&#xA;&#xA;    cam = PiCamera(resolution=cfg.CAMERA_RESOLUTION)&#xA;    V.add(cam, outputs=['cam/image_array'], threaded=True)&#xA;&#xA;    ctr = LocalWebController(use_chaos=use_chaos)&#xA;    V.add(ctr,&#xA;          inputs=['cam/image_array'],&#xA;          outputs=['user/angle', 'user/throttle', 'user/mode', 'recording'],&#xA;          threaded=True)&#xA;&#xA;    # See if we should even run the pilot module.&#xA;    # This is only needed because the part run_condition only accepts boolean&#xA;&#xA;    pilot_condition_part = MakeRunConditionBoolean()&#xA;    V.add(pilot_condition_part,&#xA;          inputs=['user/mode'],&#xA;          outputs=['run_pilot'])&#xA;&#xA;    # Run the pilot if the mode is not user.&#xA;    kl = KerasLinear()&#xA;    if model_path:&#xA;        kl.load(model_path)&#xA;&#xA;    V.add(kl,&#xA;          inputs=['cam/image_array'],&#xA;          outputs=['pilot/angle', 'pilot/throttle'],&#xA;          run_condition='run_pilot')&#xA;&#xA;    state_controller = StateController()&#xA;    V.add(state_controller,&#xA;          inputs=['user/mode',&#xA;                  'user/angle', 'user/throttle',&#xA;                  'pilot/angle', 'pilot/throttle'],&#xA;          outputs=['angle', 'throttle'])&#xA;&#xA;    steering_controller = PCA9685(cfg.STEERING_CHANNEL)&#xA;    steering = PWMSteering(controller=steering_controller,&#xA;                           left_pulse=cfg.STEERING_LEFT_PWM,&#xA;                           right_pulse=cfg.STEERING_RIGHT_PWM) &#xA;&#xA;    throttle_controller = PCA9685(cfg.THROTTLE_CHANNEL)&#xA;    throttle = PWMThrottle(controller=throttle_controller,&#xA;                           max_pulse=cfg.THROTTLE_FORWARD_PWM,&#xA;                           zero_pulse=cfg.THROTTLE_STOPPED_PWM,&#xA;                           min_pulse=cfg.THROTTLE_REVERSE_PWM)&#xA;&#xA;    V.add(steering, inputs=['angle'])&#xA;    V.add(throttle, inputs=['throttle'])&#xA;&#xA;    # add tub to save data&#xA;    inputs = ['cam/image_array', 'user/angle', 'user/throttle', 'user/mode', 'timestamp']&#xA;    types = ['image_array', 'float', 'float',  'str', 'str']&#xA;&#xA;    # single tub&#xA;    tub = TubWriter(path=cfg.TUB_PATH, inputs=inputs, types=types)&#xA;    V.add(tub, inputs=inputs, run_condition='recording')&#xA;&#xA;    # run the vehicle&#xA;    V.start(rate_hz=cfg.DRIVE_LOOP_HZ)&#xA;&#xA;&#xA;&#xA;class MakeRunConditionBoolean:&#xA;    def run(self, mode):&#xA;        if mode == 'user':&#xA;            return False&#xA;        else:&#xA;            return True&#xA;&#xA;&#xA;class StateController:&#xA;    &amp;quot;&amp;quot;&amp;quot;&#xA;    Wraps a function into a donkey part.&#xA;    &amp;quot;&amp;quot;&amp;quot;&#xA;&#xA;    def __init__(self):&#xA;        pass&#xA;&#xA;    def run(self, mode,&#xA;            user_angle, user_throttle,&#xA;            pilot_angle, pilot_throttle):&#xA;&#xA;        &amp;quot;&amp;quot;&amp;quot;&#xA;        Returns the angle, throttle and boolean if autopilot should be run.&#xA;        The angle and throttles returned are the ones given to the steering and&#xA;        throttle actuators.&#xA;        &amp;quot;&amp;quot;&amp;quot;&#xA;&#xA;        if mode == 'user':&#xA;            return user_angle, user_throttle&#xA;&#xA;        elif mode == 'local_angle':&#xA;            return pilot_angle, user_throttle&#xA;&#xA;        else:&#xA;            return pilot_angle, pilot_throttle&#xA;&#xA;&#xA;if __name__ == '__main__':&#xA;    args = docopt(__doc__)&#xA;    cfg = dk.load_config()&#xA;&#xA;    drive(cfg, model_path=args['--model'])&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="23535" LastEditorUserId="19515" LastEditDate="2020-07-27T18:28:23.800" LastActivityDate="2020-07-27T18:28:23.800" Title="How to implement stop sign XML cascade?" Tags="&lt;python&gt;" AnswerCount="0" CommentCount="1" ClosedDate="2019-08-05T16:55:53.790" ContentLicense="CC BY-SA 4.0" />
  <row Id="19191" PostTypeId="2" ParentId="19163" CreationDate="2019-07-31T22:21:35.680" Score="0" Body="&lt;p&gt;Use mpu6050 gyroscope module and optional compass module to know where is the North. Mpu6050 can be calibrated by itself, but you have to write a code that calibrates readings with mpu6050's accelerometer sensor(using atan2 function) &lt;/p&gt;&#xA;" OwnerUserId="23539" LastActivityDate="2019-07-31T22:21:35.680" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19192" PostTypeId="1" CreationDate="2019-08-01T08:39:08.183" Score="2" ViewCount="167" Body="&lt;p&gt;I was doing forward kinematic test on a 6 D.O.F anthropomorphic robotic manipulator. So I modeled my kinematic diagram by D-H notation. But I am confused. Because I have simplified some terms here. I am showing you my workings.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/IoMgU.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/IoMgU.png&quot; alt=&quot;The manipulator&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/kcPLU.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kcPLU.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Sorry. I know that they are hard to read and thanks for your support.&lt;/p&gt;&#xA;" OwnerUserId="16491" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2019-08-01T11:13:14.490" Title="Is there any fault in my kinematic diagram?" Tags="&lt;robotic-arm&gt;&lt;industrial-robot&gt;&lt;forward-kinematics&gt;&lt;dh-parameters&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19193" PostTypeId="1" CreationDate="2019-08-01T10:57:39.813" Score="0" ViewCount="37" Body="&lt;p&gt;I have read some researches and sources about &quot;grasp stability&quot;, but I don't understand what it is exactly. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If a grasp is stable, does the hand grasp the object perfectly, accurately or strictly?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the exact correspondence of stable grasp in robotic world?&lt;/p&gt;&#xA;" OwnerUserId="22284" LastEditorUserId="14673" LastEditDate="2019-08-02T20:38:02.157" LastActivityDate="2019-08-02T20:38:02.157" Title="Grasp stability of a robot" Tags="&lt;robotic-arm&gt;&lt;stability&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19194" PostTypeId="2" ParentId="19192" CreationDate="2019-08-01T11:13:14.490" Score="1" Body="&lt;p&gt;You write down the kinematics of your robot as a series of simple transforms, translations and rotations.  In MATLAB this would be:&lt;/p&gt;&#xA;&#xA;&lt;pre class=&quot;lang-matlab prettyprint-override&quot;&gt;&lt;code&gt;&amp;gt;&amp;gt; s = 'Rz(q1) Tz(L1) Tx(L2) Ry(q2) Tz(L3) Ry(q3) Tz(L4) Tx(L5) Rx(q4) Tx(L6) Ry(q5) Tx(L7) Rx(q6)';&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;in words: rotate about the z-axis by q1, translate in the z-direction by L1, translate in the x-direction by L2, rotate about the y-axis by q2 etc.  Note that q2, q3 and q5 have the opposite rotation sense to your diagram because my tool can't express a rotation about the negative y-axis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then this string can be factorised into DH parameters terms using the Robotics Toolbox for MATLAB:&lt;/p&gt;&#xA;&#xA;&lt;pre class=&quot;lang-matlab prettyprint-override&quot;&gt;&lt;code&gt;&amp;gt;&amp;gt; DHFactor(s)&#xA;DH(q1, L1, L2, -90).DH(q2+90, 0, -L3, 0).DH(q3, 0, -L4, 90).DH(q4, L6+L5, 0, -90).DH(q5+180, 0, 0, 90).DH(q6+90, L7, 0, -90).Rz(-90)&#xA;In DHFactor, parseString is done&#xA;&#xA;ans =&#xA;DH(q1, L1, L2, -90).DH(q2+90, 0, -L3, 0).DH(q3, 0, -L4, 90).DH(q4, L6+L5, 0, -90).DH(q5+180, 0, 0, 90).DH(q6+90, L7, 0, -90).Rz(-90)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and the result is a series of Denavit-Hartenberg terms, different to yours because of the y-axis direction.  Note also there is a constant rotation, a tool transform, at the end of the sequence.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could create a robot model by first defining the symbolic lengths then creating a &lt;code&gt;SerialLink&lt;/code&gt; robot object&lt;/p&gt;&#xA;&#xA;&lt;pre class=&quot;lang-matlab prettyprint-override&quot;&gt;&lt;code&gt;&amp;gt;&amp;gt; L1=1.33; L2=0.4; L3=1.1; L4=0.23; L5=0.766; L6=0.344; L7=0.244;&#xA;&amp;gt;&amp;gt; r = eval( dh.command('myrobot') )&#xA;r = &#xA;&#xA;myrobot:: 6 axis, RRRRRR, stdDH, fastRNE                         &#xA;+---+-----------+-----------+-----------+-----------+-----------+&#xA;| j |     theta |         d |         a |     alpha |    offset |&#xA;+---+-----------+-----------+-----------+-----------+-----------+&#xA;|  1|         q1|       1.33|        0.4|    -1.5708|          0|&#xA;|  2|         q2|          0|       -1.1|          0|     1.5708|&#xA;|  3|         q3|          0|      -0.23|     1.5708|          0|&#xA;|  4|         q4|       1.11|          0|    -1.5708|          0|&#xA;|  5|         q5|          0|          0|     1.5708|    3.14159|&#xA;|  6|         q6|      0.244|          0|    -1.5708|     1.5708|&#xA;+---+-----------+-----------+-----------+-----------+-----------+&#xA;tool:    t = (0, 0, 0), RPY/xyz = (-90, 0, 0) deg                &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and then compute the forward kinematics for zero joint angles&lt;/p&gt;&#xA;&#xA;&lt;pre class=&quot;lang-matlab prettyprint-override&quot;&gt;&lt;code&gt;&amp;gt;&amp;gt; r.fkine([0 0 0 0 0 0])&#xA;ans = &#xA;        -1         0         0     1.266&#xA;         0         1         0         0&#xA;         0         0        -1      2.66&#xA;         0         0         0         1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and plot it as a stick figure&lt;/p&gt;&#xA;&#xA;&lt;pre class=&quot;lang-matlab prettyprint-override&quot;&gt;&lt;code&gt;&amp;gt;&amp;gt; r.plot([0 0 0 0 0 0])&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/bMNEE.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/bMNEE.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;--&#xA;Peter Corke,&#xA;developer of Robotics Toolbox for MATLAB&lt;/p&gt;&#xA;" OwnerUserId="21223" LastActivityDate="2019-08-01T11:13:14.490" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="19195" PostTypeId="1" CreationDate="2019-08-01T23:51:51.790" Score="2" ViewCount="32" Body="&lt;p&gt;I am building a high-torque steering servo. I am trying to use the Adafruit Feather M0, which has a CPU speed of 48MHz, to monitor a 2-phase encoder that has 2400 pulses per rotation. I have attached the encoder's 2 signal wires to interrupt pins on the Feather M0.  I have it almost working, but sometimes it just stops responding or has a very delayed response.  I have a suspicion that I'm overloading the CPU.  There are some other factors at play, in addition to the encoder signals.  I am also using serial communication to report the position information.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am trying to get a grasp on determining the required micro-controller CPU speed for my project.&lt;/p&gt;&#xA;" OwnerUserId="23542" LastActivityDate="2019-08-01T23:51:51.790" Title="How to determine the required CPU speed for a micro-controller with a 2-phase encoder attached to interrupts?" Tags="&lt;microcontroller&gt;&lt;quadrature-encoder&gt;&lt;steering&gt;" AnswerCount="0" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19197" PostTypeId="1" AcceptedAnswerId="19198" CreationDate="2019-08-02T18:48:02.393" Score="4" ViewCount="236" Body="&lt;p&gt;I am learning about PID as a novice to robotics (background in software engineering).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One common problem with PID is that if the PV is below the SP for a long time, integral term will accumulate a large positive value which causes us to overshoot the SP. In particular, after crossing the SP we have to spend time in the negative error region to offset the large positive integral. This overshooting problem seems different from integral windup (which involves bounds on the output) and seems inherent in the integral contribution to PID control. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It occurred to me that this overshooting problem could be solved if we just zero out the integral when the error term changes sign. This prevents us from doing what seems like the silly thing of continuing to increase PV when it is already higher than SP just because historically PV was below SP. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I haven’t seen anyone mention this technique online, so I assume that I am missing something that makes this a bad idea, as it seems very natural to me (another way of stating the intuition is: never move PV farther away from SP). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please tell me what I’m missing!&lt;/p&gt;&#xA;" OwnerUserId="23547" LastActivityDate="2019-08-25T12:58:00.303" Title="PID control: zero out integral on error sign change?" Tags="&lt;control&gt;&lt;pid&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19198" PostTypeId="2" ParentId="19197" CreationDate="2019-08-02T19:12:36.330" Score="6" Body="&lt;p&gt;Generally, in a well-tuned PID, most of the job is done by the P term, which is responsible for driving PV to SP. Then, D and I serve as corrections: the D term regulates the profile as of how we reach for SP, whereas the I term kicks in essentially when we are already in the neighborhood of SP to attempt to get a 0 steady-state error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Bearing these basic considerations in mind, having a PID that struggles to reach for SP, thus charging the integral too much, is an indication to fine-tune the P part.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You shouldn't cut out the output of I when the error changes its sign, right because the I part plays its major role exactly when the error continues to oscillate in the closeness of 0, hence when you'll observe sign changes more frequently.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Moreover, when we are around the set-point, the only part of the PID delivering an effort to the plant (e.g. the torque controlling a link against gravity) is the integral term (&lt;span class=&quot;math-container&quot;&gt;$e \approx 0 \implies P \cdot e \approx 0$&lt;/span&gt;), so we cannot zero it, otherwise we will lose the possibility to control PV (e.g. the link will fall). We may want to use feed-forward in this case, but the same considerations still hold: the model-based open-loop part is not perfect, thus requiring the closed-loop part to guarantee some given control performances. As a result, the I term needs to be always engaged and operative.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In short, we can think of the I part as composed of two contributions:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;the biggest portion is responsible for letting the plant stay close to the steady-state when the P part cannot be effective (given &lt;span class=&quot;math-container&quot;&gt;$e \approx 0$&lt;/span&gt;);&lt;/li&gt;&#xA;&lt;li&gt;a smaller modulation helps compensate for the final error.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Both contributions cannot be zeroed.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2019-08-25T12:58:00.303" LastActivityDate="2019-08-25T12:58:00.303" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="19199" PostTypeId="1" CreationDate="2019-08-02T21:38:45.403" Score="1" ViewCount="161" Body="&lt;p&gt;I'm trying to tune a low-friction actuator. This actuator is controlled via a 24peak amp drive. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm running into the problem where the system goes unstable prior to reaching good stiffness. I start off with the PID controller having P = 0, I = 0, D = 0 gains. Because this actuator is low friction, I provide a D gain of 1 to start such that energy is removed the system. I then start ramping up the proportional gain in hopes obtaining stiff control.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I keep running into the issue where the system seems to go unstable prior to reaching desired stiffness regardless of how much I increase D.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Essentially I need my P gain to grow such that the actuator resists external forces, yet this just causes the system to go unstable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone have any tips as to what I'm doing wrong? I'm fairly confident my feedback signal is good (not too noisy) and I know that the drive is beefy enough to generate enough force to resist any attempts of pushing on the actuator. &lt;/p&gt;&#xA;" OwnerUserId="23548" LastActivityDate="2019-08-03T12:04:02.070" Title="PID tuning - can't get stiffness without going unstable" Tags="&lt;pid&gt;&lt;tuning&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19201" PostTypeId="2" ParentId="19199" CreationDate="2019-08-03T09:21:47.753" Score="2" Body="&lt;p&gt;Well you have two methods to go with really. As I don't know you're system at all, it's mostly difficult to tell you what to start with. &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Model it and Auto tune, then fine adjust by hand (how I would generally do things)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Your system is a pretty basic mechanical system with damper...so you can use an equation such as: &lt;span class=&quot;math-container&quot;&gt;$$x''(t)+2 D \omega _0 x'(t)+\omega _0^2 x(t)=0$$&lt;/span&gt; to model and run that through &lt;a href=&quot;https://reference.wolfram.com/language/ref/PIDTune.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;PIDTune&lt;/code&gt;&lt;/a&gt; in mathematica or the equivalent in Matlab.&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Ziegler%E2%80%93Nichols_method&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ziegler-Nichols Method.&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;This seems to be the method most people use, (and myself also successfully for simple things, where modeling wasn't worth the effort). &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The Ziegler–Nichols tuning method is a heuristic method of tuning a PID controller. It was developed by John G. Ziegler and Nathaniel B. Nichols. It is performed by setting the I (integral) and D (derivative) gains to zero. The &quot;P&quot; (proportional) gain, &lt;span class=&quot;math-container&quot;&gt;${\displaystyle K_{p}} K_{p} $&lt;/span&gt;is then increased (from zero) until it reaches the ultimate gain &lt;span class=&quot;math-container&quot;&gt;${\displaystyle K_{u}} K_{u}$&lt;/span&gt;, at which the output of the control loop has stable and consistent oscillations. &lt;span class=&quot;math-container&quot;&gt;${\displaystyle K_{u}} K_{u}$&lt;/span&gt; and the oscillation period &lt;span class=&quot;math-container&quot;&gt;${\displaystyle T_{u}} T_{u}$&lt;/span&gt; are used to set the P, I, and D gains depending on the type of controller used.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Follow the chart on wiki, then fine tune afterwards to get the desired result. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You're basically doing the same kind of method, however you're starting with the wrong term first :). &lt;/p&gt;&#xA;" OwnerUserId="23148" LastEditorUserId="23148" LastEditDate="2019-08-03T12:04:02.070" LastActivityDate="2019-08-03T12:04:02.070" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19202" PostTypeId="2" ParentId="10416" CreationDate="2019-08-03T14:50:47.113" Score="0" Body="&lt;p&gt;The other answers and comments point to the ambiguity about what people mean when they say &quot;collaborative&quot; robot (or &quot;cobot&quot; for short), so I won't belabor that point. In my experience, most people refer to a cobot as one that does not require a safety barrier (e.g. laser barrier or monitored cage) while operating and where humans can be in the robot's workspace without worrying about getting seriously injured or killed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The mechanism to ensure this safety is often internal force/torque sensors that come with the robot and are &lt;strong&gt;not&lt;/strong&gt; add-ons - they are the very thing that make them safe to be around. For example, &lt;a href=&quot;https://www.fanucamerica.com/products/robots/series/collaborative-robot&quot; rel=&quot;nofollow noreferrer&quot;&gt;FANUC's line of cobots&lt;/a&gt; have force sensors in the base to detect contact with the robot and ensure a limit on the force that would be applied on contact. Many robots, such as the &lt;a href=&quot;https://www.kuka.com/en-de/press/news/2016/03/kuka-lbr-iiwa-robot-optimizes-smt-lines-for-the-electronics-industry?sc_camp=6E231DFB69C047A997EB0197BEC89C41&amp;amp;gclid=CjwKCAjw4ZTqBRBZEiwAHHxpfv6T0mpl5PFXDdxsp5pi5Pgp0Do1X3k3Ra9ihWL5nFN2NIFeedd17xoCjWoQAvD_BwE&quot; rel=&quot;nofollow noreferrer&quot;&gt;KUKA iiwa&lt;/a&gt;, &lt;a href=&quot;https://www.universal-robots.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;UR robots&lt;/a&gt;, and &lt;a href=&quot;https://www.rethinkrobotics.com/sawyer&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sawyer&lt;/a&gt; have joint torque sensors that allow force-limiting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Collaborative features that are useful but not necessary for ensuring safe co-habitance between the robot and human are typically add-ons that need to be purchased. For example, wrist force/torque sensors are usually sold as add-ons since they are only needed by people that need to perform tasks requiring higher-fidelity force monitoring at the end-effector. The wrist sensor can improve safety, but since it only monitors contacts past the wrist it will not guarantee safe operation. Tactile sensors (e.g. tactile skin) I think would be good for ensuring safety if they cover a large extent of the robot, but they are generally quite expensive and is likely why they are not more popular for this purpose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As others have mentioned, safety for cobots can come not just from the robot's internal sensors but also external sensors setup in the robot's environment. For example, a laser scanner can be used to &lt;a href=&quot;https://www.youtube.com/watch?v=4JNJ1LHSAwA&quot; rel=&quot;nofollow noreferrer&quot;&gt;detect when a human enters the robot's workspace&lt;/a&gt;, and operate at a slower speed instead of completely terminating motion. Vision sensors like RGB and depth cameras can also be used to monitor the robot's workspace for human presence and even do things like human intent prediction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mechanical compliance is another mechanism to aid in safety. For example, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Baxter_(robot)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Baxter&lt;/a&gt; robot uses &lt;a href=&quot;http://sdk.rethinkrobotics.com/wiki/Arms#Series_Elastic_Actuators_.28SEAs.29&quot; rel=&quot;nofollow noreferrer&quot;&gt;Series Elastic Actuators&lt;/a&gt; that have a spring between the motor and the actuator output that make them deformable if a human was contacted (I'll note Baxter also has sonar sensors in its head to monitor workspace proximity). Some of the FANUC cobots are coated in a soft deformable material to reduce impact force and prevent pinching. An interesting extreme of this idea is &lt;a href=&quot;https://news.byu.edu/news/byu-engineering-making-more-people-friendly-robot&quot; rel=&quot;nofollow noreferrer&quot;&gt;soft robots&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lastly, I'll point you to Robotiq's &lt;a href=&quot;https://blog.robotiq.com/collaborative-robot-ebook?hsCtaTracking=f9b5fd1d-de45-4189-8c9f-44bf683eee38%7C1fc06794-10b9-46bc-9432-b668c6984a9b&quot; rel=&quot;nofollow noreferrer&quot;&gt;free e-book on cobots&lt;/a&gt;. They keep updating it with the newest iterations of cobots and it's definitely worth a read if you're considering purchasing a cobot.&lt;/p&gt;&#xA;" OwnerUserId="16539" LastActivityDate="2019-08-03T14:50:47.113" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19203" PostTypeId="1" CreationDate="2019-08-03T18:13:59.897" Score="0" ViewCount="137" Body="&lt;p&gt;I want to build a drone using these motors &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.banggood.com/Wholesale-SunnySky-X2212-KV1400-Brushless-Motor-For-RC-Models-p-60577.html?cur_warehouse=CN&quot; rel=&quot;nofollow noreferrer&quot;&gt;SunnySky X2212 KV1400 Brushless Motor For RC Drone FPV Racing Multi Rotor&lt;/a&gt; &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;and these propellers &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/B01LNFHXPU&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;DYNAM 2X RC Model Airplanes 9x5 Inch Nylon Propellers DYP-1003&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Are all propellers compatible with all brushless motors? If not, how do I know if mine are compatible with each other?&lt;/p&gt;&#xA;" OwnerUserId="23521" LastEditorUserId="37" LastEditDate="2019-10-02T10:13:59.603" LastActivityDate="2019-10-02T10:16:28.260" Title="Are all drone propellers compatible with all brushless motors?" Tags="&lt;quadcopter&gt;&lt;motor&gt;&lt;brushless-motor&gt;&lt;uav&gt;" AnswerCount="2" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="19204" PostTypeId="1" AcceptedAnswerId="19205" CreationDate="2019-08-03T19:19:35.163" Score="1" ViewCount="121" Body="&lt;p&gt;I'm studying robotics at the university and as a practice, I have to implement potential field in the simulator (I'm going to use ROS and Gazebo).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm having troubles about how to implement it, especially in the data structures that I'm going to need. By the way, I'm going to do it with C++.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I have understand it well, goal attracts the robot and obstacles repel it. So, the first thing I need is:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A map with the obstacles, and goal location.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I will also need a function that computes the force between the robot's current location and goal, taking repelling force into consideration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the map and the previous function, I will move the robot to goal location.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do you think I need something else?&lt;/p&gt;&#xA;" OwnerUserId="18173" LastActivityDate="2019-08-04T16:20:16.223" Title="Potential field algorithm implementation" Tags="&lt;path-planning&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19205" PostTypeId="2" ParentId="19204" CreationDate="2019-08-03T20:06:36.707" Score="2" Body="&lt;p&gt;I am assuming you need a force field mapping of a two-dimensional space.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will need an array to hold the goals, unless there is only one.  You will need an array to hold the obstacles.  Both of these arrays must be two-dimensional to contain the coordinates of the locations. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will need an algorithm that, for a given point in your space, sums the attractors and repulsors to come up with a vector force at that location in your field.  You can do a vector summation - add all of the &lt;span class=&quot;math-container&quot;&gt;$F \cos \theta$&lt;/span&gt; terms and all of the &lt;span class=&quot;math-container&quot;&gt;$F \sin \theta$&lt;/span&gt; terms.  This algorithm likely contains some factor based on the distance between locations.  You might start by using a negative coefficient times the gravity equation for obstacles, and a positive coefficient for goals.  This becomes more difficult to do when the obstacles are larger than point masses.  You can play with the value of the coefficients to change the magnitude of the force field.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will (probably, depending on the assignment) need a method to loop through the x and y coordinates of your space, computing the vector force for each location.   If this is required, you will need to store this data.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, you may need a way to display the force vectors.  You can do this by displaying scaled lines in the direction of each vector, although your instructor may want some other representation.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hopefully this will get you past your stuck point.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastEditorUserId="11125" LastEditDate="2019-08-04T16:20:16.223" LastActivityDate="2019-08-04T16:20:16.223" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19206" PostTypeId="5" CreationDate="2019-08-04T00:03:07.717" Score="0" Body="&lt;p&gt;The Robotics Toolbox for MATLAB is open-source software developed by Peter Corke and can be obtained from &lt;a href=&quot;https://github.com/petercorke/robotics-toolbox-matlab&quot; rel=&quot;nofollow noreferrer&quot;&gt;GitHub&lt;/a&gt;. The Toolbox provides manipulator arm kinematic, dynamics and many models; quad rotor models; mobile robot path planning, mapping and localisation.  It is the basis of the textbook: &lt;em&gt;Robotics, Vision &amp;amp; Control 2nd edition&lt;/em&gt;, Corke, Springer, 2017.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is distinct from the Robotic System Toolbox (tag: &lt;code&gt;robotics-system-toolbox&lt;/code&gt;) which is proprietary software developed and maintained by the MathWorks.&lt;/p&gt;&#xA;" OwnerUserId="21223" LastEditorUserId="21223" LastEditDate="2019-08-04T19:02:20.970" LastActivityDate="2019-08-04T19:02:20.970" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19207" PostTypeId="4" CreationDate="2019-08-04T00:03:07.717" Score="0" Body="The Robotics Toolbox for MATLAB is open-source software developed by Peter Corke.  It is distinct from the Robotic System Toolbox (tag: robotics-system-toolbox) which is developed and maintained by the MathWorks." OwnerUserId="21223" LastEditorUserId="21223" LastEditDate="2019-08-04T19:02:36.573" LastActivityDate="2019-08-04T19:02:36.573" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19208" PostTypeId="5" CreationDate="2019-08-04T00:03:50.427" Score="0" Body="&lt;p&gt;The &lt;a href=&quot;https://www.mathworks.com/products/robotics.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Robotic System Toolbox&lt;/a&gt; is a proprietary software product developed and maintained by the MathWorks. The Toolbox provides manipulator arm kinematic and dynamics; mobile robot path planning, mapping and localisation; ROS connectivity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is distinct from The Robotics Toolbox for MATLAB (tag: &lt;code&gt;robotics-toolbox&lt;/code&gt;) which is open-source software developed by Peter Corke.&lt;/p&gt;&#xA;" OwnerUserId="21223" LastEditorUserId="21223" LastEditDate="2019-08-04T19:02:41.997" LastActivityDate="2019-08-04T19:02:41.997" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19209" PostTypeId="4" CreationDate="2019-08-04T00:03:50.427" Score="0" Body="The Robotic System Toolbox is developed and maintained by the MathWorks and is a paid product. It is distinct from The Robotics Toolbox for MATLAB (tag: robotics-toolbox) which is open-source software developed by Peter Corke." OwnerUserId="21223" LastEditorUserId="21223" LastEditDate="2019-08-04T19:02:30.080" LastActivityDate="2019-08-04T19:02:30.080" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19211" PostTypeId="1" CreationDate="2019-08-04T06:39:30.643" Score="-1" ViewCount="29" Body="&lt;p&gt;I know this will not be a good way of asking something but I cannot think a better way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this video : &lt;a href=&quot;https://youtu.be/wg8ZbiC9IBw&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://youtu.be/wg8ZbiC9IBw&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;He builds a fixed wing an makes it fly, my question is related to the things happening &lt;strong&gt;between minutes 3 and 4&lt;/strong&gt;;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think he must be using a flight controller so that, as it can be seen in the beginning of 3rd minute, the airplane flies nice, but then he says that&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I put that 3-axis gyro so that it can fly more stable&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I am confused at that point, doesn't a flightcontroller has its own gyroscope already? What is the need of the external one?&lt;/p&gt;&#xA;" OwnerUserId="23502" LastActivityDate="2019-08-04T09:17:53.260" Title="Is not this guy using a flightcontroller?" Tags="&lt;gyroscope&gt;&lt;flight-controller&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19212" PostTypeId="1" AcceptedAnswerId="19213" CreationDate="2019-08-04T07:33:45.010" Score="0" ViewCount="34" Body="&lt;p&gt;I'm developing a force field mapping of a two-dimensional space to move a robot to a goal avoiding obstacles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My problem is that I don't know how to move it using attraction force and repulsion forces. I think I will get a vector (with a magnitude and direction), because they are forces. How can I get this vector?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In other words, what is the formula to compute that vector?&lt;/p&gt;&#xA;" OwnerUserId="18173" LastEditorUserId="18173" LastEditDate="2019-08-04T07:42:16.763" LastActivityDate="2019-08-04T09:11:25.500" Title="Compute vector of attraction plus repulsion forces in a 2D force field mapping" Tags="&lt;navigation&gt;&lt;path-planning&gt;&lt;force&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19213" PostTypeId="2" ParentId="19212" CreationDate="2019-08-04T09:11:25.500" Score="1" Body="&lt;p&gt;In the simplest case where targets and obstacles are just points in your space, it's not that difficult to come up with good representations of attractive and repulsive forces.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the sake of simplicity, let's stick to one-dimensional space and deal with massless points. Then, knowing the complete state of your robot in terms of position and velocity &lt;span class=&quot;math-container&quot;&gt;$\left(x,\dot{x}\right)$&lt;/span&gt;, together with the target &lt;span class=&quot;math-container&quot;&gt;$x_d$&lt;/span&gt;, the attractive acceleration &lt;span class=&quot;math-container&quot;&gt;$\ddot{x}$&lt;/span&gt; is given by:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\ddot{x} = K \cdot \left( x_d-x \right) - D \cdot \dot{x}, &#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where &lt;span class=&quot;math-container&quot;&gt;$K$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$D$&lt;/span&gt; are the stiffness and damping factors, respectively, responsible for generating the attractive force toward the target (stiffness) as well as a drag (damping) that suitably decelerates the robot avoiding oscillations around &lt;span class=&quot;math-container&quot;&gt;$x_d$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you have &lt;span class=&quot;math-container&quot;&gt;$\ddot{x}$&lt;/span&gt;, you can integrate it twice in time to get the temporal evolution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The extension to the 2D and 3D cases is pretty immediate, whereas to account for the repulsive force yielded by the obstacle &lt;span class=&quot;math-container&quot;&gt;$x_o$&lt;/span&gt;, you have to invert the sign of the term &lt;span class=&quot;math-container&quot;&gt;$K\cdot\left(x_o-x\right)$&lt;/span&gt;.  &lt;/p&gt;&#xA;" OwnerUserId="6941" LastActivityDate="2019-08-04T09:11:25.500" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19214" PostTypeId="2" ParentId="19211" CreationDate="2019-08-04T09:17:53.260" Score="0" Body="&lt;p&gt;Not all flight controllers are equal. There may be some without built in gyroscopes. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;We dont know which controller the guy used, so its difficult to know why he has an external gyro....he may also have just not know the controller he bought has one built it...or it was junk. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;For example, the ICM20602 on the Raceflight Revolt V2, or the ICM20689 on the Kakute F4, both can run at 32KHz. However it’s reported that these IMU are more susceptible to noise than the older MPU6000 therefore these FC’s generally require soft-mounting and filtering capacitors to reduce the amount of noise getting to the Gryo.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="23148" LastActivityDate="2019-08-04T09:17:53.260" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="19215" PostTypeId="1" CreationDate="2019-08-04T14:37:42.417" Score="0" ViewCount="1257" Body="&lt;p&gt;The video &lt;a href=&quot;https://www.youtube.com/watch?v=qyNlBaJAG8E&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here&lt;/a&gt; shows a motor using rotational motion to move a load forward and then reverse back, without manually switching it to reverse.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;How can I program my brushless motor to operate like the motor in the &lt;a href=&quot;https://www.youtube.com/watch?v=qyNlBaJAG8E&quot; rel=&quot;nofollow noreferrer&quot;&gt;video&lt;/a&gt;. &lt;/li&gt;&#xA;&lt;li&gt;Can I achieve it using what I already have?, if yes, how?&lt;/li&gt;&#xA;&lt;li&gt;If not, what additional parts (Drivers/Controllers/Arduino) do i need?&lt;/li&gt;&#xA;&lt;li&gt;What additional software do i need?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;What I have: &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.banggood.com/Racerstar-BR2212-1000KV-2-4S-Brushless-Motor-For-RC-Airplane-p-1083190.html?rmmds=myorder&amp;amp;cur_warehouse=USA&quot; rel=&quot;nofollow noreferrer&quot;&gt;Brushless motor&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/B00E95VG2I&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;ESC&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/B01M1HSYO7&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;DC Motor Speed Controller&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/B01N4IJDQZ&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;ESC Programmer&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/B07D54MD85&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;RC Program Card Electronic Speed Controller Programmer&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/B07RLZ9ZN2&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;Brushless DC Motor Controller, DROK 6.5-24V 12V 12A Sensorless Hallless Three-phase Electronic Motor Speed Driver&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="23550" LastActivityDate="2021-03-21T04:01:45.110" Title="Automatic forward and reverse Brushless Motor" Tags="&lt;motor&gt;&lt;motion-planning&gt;&lt;stepper-motor&gt;&lt;brushless-motor&gt;&lt;esc&gt;" AnswerCount="4" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="19216" PostTypeId="1" CreationDate="2019-08-05T04:13:53.930" Score="0" ViewCount="49" Body="&lt;p&gt;I have to use Raspberry Pi with Arduino on a mobile robot and access Raspberry Pi on a PC through WiFi. Is it possible? Please explain how to do it?&lt;/p&gt;&#xA;" OwnerUserId="23376" LastEditorUserId="19515" LastEditDate="2020-07-27T18:28:29.560" LastActivityDate="2020-08-01T16:37:41.327" Title="How to access Raspberry Pi over wifi?" Tags="&lt;mobile-robot&gt;&lt;arduino&gt;&lt;raspberry-pi&gt;&lt;wifi&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19217" PostTypeId="2" ParentId="19216" CreationDate="2019-08-05T06:54:13.617" Score="3" Body="&lt;p&gt;To access your RPi over the WiFi, you can use any SSH client like PuTTY. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you have established a connection between your RPi and computer, then you can control  GPIOs through a TCP connection. Use Socket Library in Python for this. You have to set a static IP for your RPi though, and use it in your code. Hope it would help.&lt;/p&gt;&#xA;" OwnerUserId="21747" LastEditorUserId="21747" LastEditDate="2019-08-05T07:00:16.097" LastActivityDate="2019-08-05T07:00:16.097" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19218" PostTypeId="1" AcceptedAnswerId="19239" CreationDate="2019-08-05T08:06:21.587" Score="2" ViewCount="189" Body="&lt;p&gt;In context of the paper &lt;a href=&quot;http://openaccess.thecvf.com/content_iccv_2013/papers/Engel_Semi-dense_Visual_Odometry_2013_ICCV_paper.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Semi Dense Visual Odometry for a Monocular Camera&lt;/a&gt;&lt;sup&gt; J Engel, J Sturms, D Cremers&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At page 7, last paragraph the author writes &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The achieved tracking accuracy for two feasible sequences - that is, sequences which do not contain strong rotations without simultaneous translation - is given in Table 1.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Here the Author implies that the method is not feasible (fails ?) on datasets that contain strong rotation. In the paper, Visual Odometry is performed in two parts &lt;strong&gt;inverse depth estimation&lt;/strong&gt; of points  and &lt;strong&gt;tracking&lt;/strong&gt; of camera. I want to analyze how these parts are affected when the camera undergoes &lt;strong&gt;strong rotations&lt;/strong&gt;?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is what I think (kindly correct me and or add missing details)  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Part &lt;strong&gt;I&lt;/strong&gt;&lt;br&gt;&#xA;Inverse depth estimation is based on disparity among two successive frames. The observed pixel disparity is equal to scaled inverse depth for the pixel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When camera undergoes &lt;strong&gt;strong rotation&lt;/strong&gt; it causes apparent pixel disparity however the pixel would still be at the same depth wrt the camera. So this results in false disparity and subsequently wrong depth estimation (?) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Part &lt;strong&gt;II&lt;/strong&gt;&lt;br&gt;&#xA;The tracking of camera is being done via image alignment (using depth map). The image alignment is formulated as a photometric error minimization problem:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ E(\xi) := \sum_{i}\frac{\alpha(r_i(\xi))}{\sigma_{d_i}^2}r_i(\xi)$$&lt;/span&gt;&#xA;where &lt;span class=&quot;math-container&quot;&gt;$$r_i(\xi) = (I_2(~{\color{blue}w(x_i, d_i, \xi)}~) - I_1(x_i))^2$$&lt;/span&gt;&#xA;and &lt;span class=&quot;math-container&quot;&gt;${\color{blue}w}$&lt;/span&gt; is a warp function that maps each point &lt;span class=&quot;math-container&quot;&gt;$x_i$&lt;/span&gt; in reference image &lt;span class=&quot;math-container&quot;&gt;$I_1$&lt;/span&gt; to the respective point in the new image &lt;span class=&quot;math-container&quot;&gt;$I_2$&lt;/span&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The warp function requires depth &lt;span class=&quot;math-container&quot;&gt;$d_i$&lt;/span&gt; to calculate the new position of a pixel in image &lt;span class=&quot;math-container&quot;&gt;$I_2$&lt;/span&gt; that was observed earlier in &lt;span class=&quot;math-container&quot;&gt;$I_1$&lt;/span&gt;. With wrong depth estimate the minimization problem would yield wrong value for &lt;span class=&quot;math-container&quot;&gt;$\xi$&lt;/span&gt; (?)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, are there techniques to deal with pure camera rotation in case of Monocular Vision based Odometry?&lt;/p&gt;&#xA;" OwnerUserId="23497" LastEditorUserId="23497" LastEditDate="2019-08-05T16:06:15.580" LastActivityDate="2019-08-08T05:55:56.730" Title="Why do strong rotations affect Monocular Vision based Visual Odometry?" Tags="&lt;visual-odometry&gt;&lt;monocular&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19220" PostTypeId="1" AcceptedAnswerId="19222" CreationDate="2019-08-05T11:26:20.733" Score="2" ViewCount="416" Body="&lt;p&gt;I saw the expression &quot;robot state&quot; in many articles and resources, but I could not understand what that exactly mean.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What does state of a robot exactly refers to ?&lt;/p&gt;&#xA;" OwnerUserId="22284" LastActivityDate="2019-08-05T18:28:10.133" Title="State of a Robot" Tags="&lt;pose&gt;&lt;orientation&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19221" PostTypeId="2" ParentId="19220" CreationDate="2019-08-05T11:46:17.520" Score="1" Body="&lt;p&gt;The state of the Robot refers to the properties of the robot that you want to estimate. If you take a 2D robot as an example, then you might be interested in its 2d position which refers to &#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;   X(t) = &#xA;\begin{bmatrix}&#xA;  x(t) \\&#xA;  y(t) \\&#xA;\end{bmatrix}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you also want to estimate its velocity, then you can add another element to its state vector and estimate its velocity in your equations. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you scale your robot to 3d and want to estimate its orientation and position, then you may want to add quaternion(orientation) to your state vector&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;   X(t) = &#xA;\begin{bmatrix}&#xA;  x(t) \\&#xA;  y(t) \\&#xA;  z(t) \\&#xA;  q_w(t) \\&#xA;  q_x(t) \\&#xA;  q_y(t) \\&#xA;  q_z(t) \\&#xA;\end{bmatrix}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Normally a filter such as Kalman filter in Linear conditions or Extended or Unscented Kalman filter in non-linear conditions are used as state estimators.&lt;/p&gt;&#xA;" OwnerUserId="11126" LastActivityDate="2019-08-05T11:46:17.520" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19222" PostTypeId="2" ParentId="19220" CreationDate="2019-08-05T13:09:56.357" Score="5" Body="&lt;p&gt;To extends the answer from the_parzival a bit:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are different kind of robots so that 'robot state' can have different meanings. If you have a drone or Roomba-robot, the most important state is related to its pose (position, orientation, speed, acceleration, ...). Other states are the Battery state, Motor speeds (and temperatures), essentially every value of your system that can change over time. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other group of robots have a fixed position, but are themselves more complex: Robot arms ( or CNC mills and similar machines). Their base has a fixed position, but their position is described by a set of joint angles (and speed, acceleration,...). In this case, the robot state can be the set of angles, or also the pose of the end-effector (or a combination). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the 'robot state' depends on how your robot looks like and what you are interested in. &lt;/p&gt;&#xA;" OwnerUserId="23196" LastActivityDate="2019-08-05T13:09:56.357" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19224" PostTypeId="2" ParentId="19220" CreationDate="2019-08-05T18:22:30.850" Score="1" Body="&lt;p&gt;The answer by parzival is only a partial answer. Especially with robots with more than 3 axes, the matrix cannot be solved for a deterministic state, a famous example of this is &lt;a href=&quot;https://www.youtube.com/watch?v=JDJKfs3HqRg&quot; rel=&quot;nofollow noreferrer&quot;&gt;Dirac's belt trick&lt;/a&gt;, where with only the 3 DOF that a human arm and shoulder provide, you cannot have any deterministic state using the matrix provided above. The true state of a robot is actually represented by:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;J_{s} = &#xA;\begin{bmatrix}&#xA;  J_{1} \\&#xA;  J_{2} \\&#xA;  J_{3} \\&#xA;  ... \\&#xA;  J_{n} \\&#xA;\end{bmatrix}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where &lt;span class=&quot;math-container&quot;&gt;$J_{n}$&lt;/span&gt; is the absolute rotation or linear distance from zero of joint n. Hereon, this is referred to as the &lt;span class=&quot;math-container&quot;&gt;$J$&lt;/span&gt; matrix, and the matrix in parzival's answer is the &lt;span class=&quot;math-container&quot;&gt;$X$&lt;/span&gt; matrix.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's do an example.&#xA;Here is a 6-axis robot (Joints highlighted) with a Cartesian absolute of [780,65,200,-180,0,90] where the parameters are [X,Y,Z,yaw,pitch,roll], in mm and deg. This is also known as Euler-Cartesian, or XYZWPR representation. most industrial robots use this. It's very rare to see Quaternion-Cartesian representation.&lt;br&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/bFhYb.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/bFhYb.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The absolute state of the robot in the J matrix is [0.102,-36.487,-12.657,0,-77.343,-270.102].&lt;br&gt;&#xA;This is plainly, a jumbled mess, and it makes sense to use XYZWPR, as it's many times easier to visualize. For example, raising the arm by 200mm, the new &lt;span class=&quot;math-container&quot;&gt;$J$&lt;/span&gt; matrix is [0.102,-35.138,-2.241,0,-87.759,-270.102]. You may be able to generally tell what happened, but it's not obvious at all the magnitude.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So &lt;strong&gt;what's the deal&lt;/strong&gt; with these two positioning systems, and why use &lt;span class=&quot;math-container&quot;&gt;$J$&lt;/span&gt;, and not &lt;span class=&quot;math-container&quot;&gt;$X$&lt;/span&gt;? The answer is a P vs NP problem. To convert &lt;span class=&quot;math-container&quot;&gt;$J$&lt;/span&gt; to &lt;span class=&quot;math-container&quot;&gt;$X$&lt;/span&gt; is trivial, and does some vector addition you probably learned in secondary school. just take the angles of all of the joints, and add on the magnitude to get XYZ components, and add those components together to get a final position. Converting from &lt;span class=&quot;math-container&quot;&gt;$X$&lt;/span&gt; to &lt;span class=&quot;math-container&quot;&gt;$J$&lt;/span&gt; however, is a bit more advanced, and this robot for example, has up to &lt;em&gt;six&lt;/em&gt; &lt;span class=&quot;math-container&quot;&gt;$J$&lt;/span&gt; matrices for almost every possible &lt;span class=&quot;math-container&quot;&gt;$X$&lt;/span&gt;!&#xA;Take the example above. Let's find a second &lt;span class=&quot;math-container&quot;&gt;$J$&lt;/span&gt; associated with the &lt;span class=&quot;math-container&quot;&gt;$X$&lt;/span&gt; above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A configuration such as this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/UHxHJ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/UHxHJ.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;can produce very similar results. Where the &lt;span class=&quot;math-container&quot;&gt;$X$&lt;/span&gt; matrix is the same, the &lt;span class=&quot;math-container&quot;&gt;$J$&lt;/span&gt; for this pose is something close to [-180, -31, 210, 180,-120,0], but &lt;span class=&quot;math-container&quot;&gt;$X$&lt;/span&gt; is still [780,65,200,-180,0,90]. Ok. but what about an absolute match? This is actually easier than you think. Take a look at the image below. People with an astute sense of robotics may notice that the &lt;span class=&quot;math-container&quot;&gt;$J$&lt;/span&gt; is different, but the &lt;span class=&quot;math-container&quot;&gt;$X$&lt;/span&gt; is exactly the same!&lt;br&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/DezRh.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/DezRh.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Spot the difference yet!? The J4 axis has rotated 180 degrees! Thus the new &lt;span class=&quot;math-container&quot;&gt;$J$&lt;/span&gt; and the old &lt;span class=&quot;math-container&quot;&gt;$J$&lt;/span&gt; &lt;em&gt;AND&lt;/em&gt; the alternative &lt;span class=&quot;math-container&quot;&gt;$J$&lt;/span&gt; &lt;strong&gt;ALL&lt;/strong&gt; correspond to the same &lt;span class=&quot;math-container&quot;&gt;$X$&lt;/span&gt;! &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;\begin{array} {|c|c|}&#xA;\hline&#xA;J &amp;amp; X \\&#xA;\hline&#xA;[0.095,-36.710,-12.529,180.000,77.171,-90.195] &amp;amp; \downdownarrows \\&#xA;\hline&#xA;[0.102,-36.487,-12.657,0.000,-77.343,-270.102] &amp;amp; [780,65,200,-180,0,90] \\  &#xA;\hline  &#xA;[-180.000, -31.000, 210.000, 180.000,-120.000,0.000] &amp;amp;  \upuparrows\\ \hline&#xA;\end{array}&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So in short, the pose of a robot is it's &lt;em&gt;joint&lt;/em&gt; positions, either in absolute encoder pulses, or rotational degrees, and the state of the robot is the same thing, but including velocities (always in deg / sec. or rad / sec.). Velocity will have the same errors if the velocities are stored as XYZWPR. Some robots even include acceleration and jerk, but most do not, or store a target velocity, and acceleration and jerk limits (always joint acceleration and jerk limits, NEVER EVER Cartesian limits).&lt;/p&gt;&#xA;" OwnerUserId="17194" LastEditorUserId="17194" LastEditDate="2019-08-05T18:28:10.133" LastActivityDate="2019-08-05T18:28:10.133" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19226" PostTypeId="2" ParentId="18840" CreationDate="2019-08-05T22:49:07.720" Score="2" Body="&lt;p&gt;Try looking to Linear Integer Programming LIP where you are doing optimization by maximizing task allocation or Utility function at the same time minimizing distance and energy constraints. You will have to formulate the set of equations and use available LIP solvers.&lt;/p&gt;&#xA;" OwnerUserId="23562" LastActivityDate="2019-08-05T22:49:07.720" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19227" PostTypeId="1" CreationDate="2019-08-06T17:29:06.603" Score="0" ViewCount="152" Body="&lt;p&gt;I am a beginner with mavlink and even pixahawk.&#xA;I need to just parse mavlink data coming from pixahawk. (Mavlink v1, pixahawk v5plus), on Linux PC (Ubuntu). I have 2 processes in context of this question. (The Pixahwak is already cofigured to send some messages HEARTBEAT, ATTITUDE etc).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have written C code that reads serial port data which gets mavlink v1 data from telemetry1 port of pixhackv5plus and saves each byte by byte in shared memory segment created using &lt;em&gt;shmget()/shmat()&lt;/em&gt;. That shared memory segment remains intact even after this process exits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, I run another process that reads data from this shared memory buffer and parses byte by byte. This parser process has not been completely written by me but I took code from&lt;br&gt;&#xA;&lt;em&gt;&lt;a href=&quot;https://github.com/mavlink/c_uart_interface_example&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/mavlink/c_uart_interface_example&lt;/a&gt;&lt;/em&gt; and for mavlink v1, reusing c library from &lt;em&gt;&lt;a href=&quot;https://github.com/mavlink/c_library_v1&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/mavlink/c_library_v1&lt;/a&gt;&lt;/em&gt; (My pixahawk sends Mavlink v1 data).&lt;br&gt;&#xA;In file &lt;strong&gt;&lt;em&gt;serial_port.cpp&lt;/em&gt;&lt;/strong&gt; in c uart example above, I have removed code that calls &lt;strong&gt;&lt;em&gt;read(fd..)&lt;/em&gt;&lt;/strong&gt; but taking shared memory data byte by byte and passing to &lt;strong&gt;&lt;em&gt;mavlink_parse_char()&lt;/em&gt;&lt;/strong&gt;.&#xA;This is not working, I am getting &lt;strong&gt;&lt;em&gt;msgReceived&lt;/em&gt;&lt;/strong&gt; as &lt;strong&gt;&lt;em&gt;false&lt;/em&gt;&lt;/strong&gt; through out, though I know&#xA;this data contains valid mavlink messages.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Am I right in this methodology? &#xA;Please guide. Once this works, I have to replicate parser on an embedded platform, in C.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Code for reading serial data from pixhack at:&lt;br&gt;&#xA;&lt;strong&gt;&lt;em&gt;&lt;a href=&quot;https://github.com/developb/mavlink_read_buffer/blob/master/main_rx.c&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/developb/mavlink_read_buffer/blob/master/main_rx.c&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Code where data(each byte) is read from shared memory and fed to mavlink_parse_char() is at:&#xA;&lt;strong&gt;&lt;em&gt;&lt;a href=&quot;https://github.com/developb/mavlinkv1_parse_v0/blob/master/serial_port.cpp&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/developb/mavlinkv1_parse_v0/blob/master/serial_port.cpp&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here, this is the line I modify that makes each byte be taken from shared memory instead of serial port:  &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; int result = _read_port(cp);&#xA; //cp = (unsigned char)(*(unsigned char*)shm_current_addr_temp);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="23514" LastEditorUserId="23514" LastEditDate="2019-08-07T10:04:23.737" LastActivityDate="2021-04-28T14:02:45.303" Title="Mavlink data parsing offline from buffer, on Linux in C" Tags="&lt;c&gt;&lt;mavlink&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19228" PostTypeId="2" ParentId="19215" CreationDate="2019-08-06T17:47:33.293" Score="0" Body="&lt;p&gt;This motor in video is stepper motor. If you want to move brushless motor that you have, you have to buy ESC that can support 2-way rotation. You can also add a relay that switches 2 phases from ESC, then rotation direction changes.&lt;/p&gt;&#xA;" OwnerUserId="23539" LastActivityDate="2019-08-06T17:47:33.293" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19229" PostTypeId="2" ParentId="19227" CreationDate="2019-08-07T01:04:30.153" Score="0" Body="&lt;p&gt;To use file parsing functions with in-memory data, you need to make sure the memory layout matches the file layout. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Likely problem sources are leaving out header info or using data structures optimized for memory (all c structures that have not been packed) when providing data to the parser.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2019-08-07T01:04:30.153" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19230" PostTypeId="1" CreationDate="2019-08-07T05:34:58.337" Score="0" ViewCount="12" Body="&lt;p&gt;I'm working on a line follower robot. its a kind of waiter robot. and i am facing  problems in detecting customer table. can you guys please suggest me some ideas to detect customer table. i want to include some image processing methods to achieve this goal. can you guys suggest me some article or tutorial with code to understand this?.  or if have any other reliable and easy suggestion for me then that would be appreciated :)&lt;/p&gt;&#xA;" OwnerUserId="23568" LastActivityDate="2019-08-07T09:30:25.000" Title="Need Suggestions for real-time number or object detection with Arduino + MATLAB?" Tags="&lt;arduino&gt;&lt;matlab&gt;&lt;first-robotics&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2019-08-09T19:51:08.773" ContentLicense="CC BY-SA 4.0" />
  <row Id="19231" PostTypeId="2" ParentId="19230" CreationDate="2019-08-07T09:30:25.000" Score="1" Body="&lt;p&gt;If you want to do some basic obstacle detection with an arduino your best bet is either using an ultrasonic sensor or a LIDAR. Image processing is likely to be too complex for an arduino that is also managing the rest of the robots functions. &lt;a href=&quot;https://circuitdigest.com/microcontroller-projects/arduino-obstacle-avoding-robot&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://circuitdigest.com/microcontroller-projects/arduino-obstacle-avoding-robot&lt;/a&gt; This robot uses an ultrasonic sensor to detect objects in front of it, so something similar to this except it stops when it senses a table may be suitable for your needs&lt;/p&gt;&#xA;" OwnerUserId="23569" LastActivityDate="2019-08-07T09:30:25.000" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19232" PostTypeId="1" CreationDate="2019-08-07T09:49:04.883" Score="1" ViewCount="178" Body="&lt;p&gt;I am doing an EKF (Extended Kalman Filter) to fusion Visual Odometry with IMU information. I am using a ROS package called ethzasl-msf (I am using the multi sensor fusion because then I have to add some GPS data). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the problem is that I need the noise and bias of the accelerometer and gyroscope. I am using an AR.Drone 2.0, and I don't have the IMU model, so I can't even guess those values. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As specified in the &lt;a href=&quot;https://github.com/ethz-asl/ethzasl_msf/blob/master/msf_updates/pose_sensor_fix.yaml&quot; rel=&quot;nofollow noreferrer&quot;&gt;.yaml&lt;/a&gt; document, those values for an ADIS 16448 are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;accelerometer noise: 0.0022563&lt;/li&gt;&#xA;&lt;li&gt;gyroscope noise: 0.04&lt;/li&gt;&#xA;&lt;li&gt;accelerometer noise bias: 8e-5 (it is not fixed)&lt;/li&gt;&#xA;&lt;li&gt;gyroscope noise bias: 3e-6 (it is not fixed)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I suppose that the noise of AR.Drone 2.0's IMU is worse, because it's a cheap quacopter. But I couldn't find any information about them. What values do you recommend me to use?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="23438" LastActivityDate="2021-04-29T08:06:40.623" Title="Accelerometer and gyroscope noise and bias" Tags="&lt;imu&gt;&lt;gyroscope&gt;&lt;accelerometer&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19234" PostTypeId="1" CreationDate="2019-08-07T17:22:38.237" Score="0" ViewCount="21" Body="&lt;p&gt;It seems like there should be a set of best practices or something to reduce the iterations of the Newton-Raphson method to the inverse kinematics. Does anyone have any tips or tricks for choosing an initial guess for the joint variables when calculating the inverse kinematics? Or any papers that review/discuss/theorize this?&lt;/p&gt;&#xA;" OwnerUserId="22659" LastActivityDate="2019-08-07T17:22:38.237" Title="Tips/Tricks for Initial Guess of the Joint Variables in Inverse Kinematics" Tags="&lt;inverse-kinematics&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19235" PostTypeId="1" CreationDate="2019-08-07T18:12:50.223" Score="3" ViewCount="279" Body="&lt;p&gt;I'm reading this &lt;a href=&quot;http://sacj.cs.uct.ac.za/index.php/sacj/article/view/452&quot; rel=&quot;nofollow noreferrer&quot;&gt;survey&lt;/a&gt; on the state-of-the-art techniques for indoor positioning and navigation. I noticed that LIDAR isn't mentioned at all in the paper. Is LIDAR not meant to be a common method for indoor navigation? I believe I've seen some industrial LIDAR robots some time ago though.&lt;/p&gt;&#xA;" OwnerUserId="11489" LastActivityDate="2021-01-06T18:37:51.547" Title="How come LIDAR is not commonly used for indoor navigation?" Tags="&lt;navigation&gt;&lt;lidar&gt;" AnswerCount="2" CommentCount="7" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19236" PostTypeId="1" CreationDate="2019-08-08T03:40:38.187" Score="0" ViewCount="331" Body="&lt;p&gt;I want to use an optical mouse to measure displacement in X and Y direction of my robot. I'm using Ubuntu mate 18.04 on raspberry pi and wrote the following python code :&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;mouse = file('/dev/input/mouse0')&#xA;while True:&#xA;status, dx, dy = tuple(ord(c) for c in mouse.read(3))&#xA;&#xA;def to_signed(n):&#xA;    return n - ((0x80 &amp;amp;amp; n) &amp;amp;lt;&amp;amp;lt; 1)&#xA;&#xA;dx = to_signed(dx)&#xA;dy = to_signed(dy)&#xA;print &quot;%#02x %d %d&quot; % (status, dx, dy)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But these displacement values are velocities dependent. I just want the displacement value, which is acceleration independent. &lt;/p&gt;&#xA;" OwnerUserId="13969" LastActivityDate="2020-05-06T00:06:10.743" Title="How to get position (X Y values) from a USB optical mouse" Tags="&lt;raspberry-pi&gt;&lt;imu&gt;&lt;autonomous-car&gt;&lt;precise-positioning&gt;&lt;dead-reckoning&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19237" PostTypeId="2" ParentId="19235" CreationDate="2019-08-08T05:20:34.080" Score="3" Body="&lt;p&gt;I think LiDAR is common for indoor navigation. Definitely, LiDAR is the easiest and accurate solution for indoor navigation or SLAM. Many commercial robot vacuums are already in use of LiDAR for indoor navigation and mapping. Those are even cheaper and simpler than RGBD modules which is why low-cost LiDARs are hired over RGBD in mass production models.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is just that indoor navigation is a vast topic. I haven't seen any survey paper that covers all types of sensors. We can't cover few thousands of papers in a single survey paper. The paper you linked has some specific coverage and it is ok not to mention other sensors out of the scope such as LiDAR or camera.&lt;/p&gt;&#xA;" OwnerUserId="19219" LastEditorUserId="19219" LastEditDate="2019-08-08T05:37:43.557" LastActivityDate="2019-08-08T05:37:43.557" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19238" PostTypeId="2" ParentId="19232" CreationDate="2019-08-08T05:32:34.800" Score="0" Body="&lt;p&gt;Bias should be automatically measured while the sensor is stationary at the beginning of each run. This is simply because the biases have different starting values at each run according to the ambient temperature and chip temperature. But I am not sure why they put bias values in the yaml file. You need to have a look at the code to see if they are really using the input bias.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;accelerometer noise, gyroscope noise are just weighting factor. You might able to run the code with your new IMU with the values from ADIS 16448. If it does not work, the simplest way is running a calibration between IMU and camera which will give you those values. You can use &lt;a href=&quot;https://github.com/ethz-asl/kalibr&quot; rel=&quot;nofollow noreferrer&quot;&gt;kalibr&lt;/a&gt; which is from the same lab. &lt;/p&gt;&#xA;" OwnerUserId="19219" LastEditorUserId="19219" LastEditDate="2019-08-08T05:56:57.990" LastActivityDate="2019-08-08T05:56:57.990" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19239" PostTypeId="2" ParentId="19218" CreationDate="2019-08-08T05:55:56.730" Score="1" Body="&lt;p&gt;The problem of the pure strong rotation is that the image will become easily blurred unless you use 1000FPS camera. This kind of super-strong rotation often occurs in hand-held camera motion. Simply turn on your mobile camera in a slightly dark place and try to make a translational and rotational motion. You will see rotation make huge blurriness in the image where tracking or depth estimation will surely fail. &lt;/p&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2019-08-08T05:55:56.730" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="19240" PostTypeId="1" AcceptedAnswerId="20331" CreationDate="2019-08-08T08:34:56.280" Score="1" ViewCount="62" Body="&lt;p&gt;I'm making a second version of my line follower robot and I'm thinking what are the line sensors going to look like.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the previous version I've successfully used IR LEDs and IR phototransistors, but I've heard stories about lines printed on an inkjet printer not being detected by some IR sensors and that got me started thinking about basing my new line sensor on visible light. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I think that the sun is going to be pretty strong in the near IR too and I'm subtracting ambient light from the signals anyway.&lt;/li&gt;&#xA;&lt;li&gt;Rangefinders on cameras and other robots all use some IR wavelengths, so I'd be affected by these too. In visible light I'll at least have a chance to see the noise.&lt;/li&gt;&#xA;&lt;li&gt;If I see a line as black with my eyes, this means that a visible light based sensor will be able to follow it. In IR this is not so clear.&lt;/li&gt;&#xA;&lt;li&gt;Easy to determine if the sensor works or not.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;What are the downsides of using visible light?&lt;/p&gt;&#xA;" OwnerUserId="482" LastActivityDate="2020-03-18T12:02:27.867" Title="Visible light sensors for line follower" Tags="&lt;sensors&gt;&lt;line-following&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19241" PostTypeId="1" AcceptedAnswerId="19244" CreationDate="2019-08-08T14:29:11.660" Score="3" ViewCount="90" Body="&lt;p&gt;How do self-driving bots usually deal with transient objects, e.g., parked cars on the side of roads when they can come and go? These aren't moving objects at the time of capture, but they do move at a later time. Is it common to run a CNN to detect static/dynamic objects prior to feature extraction? It's certainly much more computationally expensive, but otherwise how are dynamic objects dealt with or filtered out?&lt;/p&gt;&#xA;" OwnerUserId="11489" LastEditorUserId="11489" LastEditDate="2019-08-08T15:33:21.647" LastActivityDate="2020-09-08T12:41:20.757" Title="Do self-driving robots use object-level SLAM?" Tags="&lt;slam&gt;&lt;navigation&gt;&lt;self-driving&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19242" PostTypeId="1" AcceptedAnswerId="19253" CreationDate="2019-08-08T15:08:49.130" Score="0" ViewCount="48" Body="&lt;p&gt;in this perfect tutorial i found how i can compose two poses with uncertainty and how i can transform one representation to another with uncertainty  &lt;a href=&quot;http://ingmec.ual.es/~jlblanco/papers/jlblanco2010geometry3D_techrep.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://ingmec.ual.es/~jlblanco/papers/jlblanco2010geometry3D_techrep.pdf&lt;/a&gt;.&#xA;Let's suppose I have one global point which represent 6 dof and 6 confidence and another one also representing by 6 dof and 6 confidence. How can I get &quot;mean&quot; point with uncertainty.&lt;/p&gt;&#xA;" OwnerUserId="23577" LastEditorUserId="23577" LastEditDate="2019-08-08T15:40:26.857" LastActivityDate="2019-08-20T00:29:34.803" Title="Relative quaternion to global with uncertainty" Tags="&lt;slam&gt;&lt;kalman-filter&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19244" PostTypeId="2" ParentId="19241" CreationDate="2019-08-09T01:10:11.613" Score="3" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;How do self-driving bots usually deal with transient objects, e.g., parked cars on the side of roads when they can come and go?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;No. In most of the open-source slams, dynamic objects are ignored which means they are just mapped as a stationary object. But there are few papers that deal with this in the way you think.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;These aren't moving objects at the time of capture, but they do move at a later time. Is it common to run a CNN to detect static/dynamic objects prior to feature extraction?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It is not common. There are some papers that introduced object-level features but simply it is not very useful.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;It's certainly much more computationally expensive, but otherwise how are dynamic objects dealt with or filtered out?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Any features from dynamic objects should be filtered out by either deep learning approach or conventional soft outlier rejection scheme. You will find the most of optimization-based slams are using M-estimator whereas some of the recent papers introduced deep learning approach.&lt;/p&gt;&#xA;&lt;p&gt;This kind of topic is refered as semantic SLAM. You can find some related papers in ICRA, IROS 17,18,19.&lt;/p&gt;&#xA;" OwnerUserId="19219" LastEditorUserId="26766" LastEditDate="2020-09-08T12:41:20.757" LastActivityDate="2020-09-08T12:41:20.757" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19246" PostTypeId="1" AcceptedAnswerId="19276" CreationDate="2019-08-09T12:01:02.477" Score="4" ViewCount="49" Body="&lt;p&gt;I've been curious about how the plastic chassises of the robotic arms in robotic competitions are manufactured. For instance, the following arms clearly have 10-20 plastic parts each, if not more:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/PAbjg.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/PAbjg.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/AEhyQ.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/AEhyQ.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/TJ32U.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/TJ32U.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Injection moulding such large parts can easily cost \$5k per mould, so it wouldn't quite make sense to me that university projects would spend \$100k into the chassis production alone when only merely several units are needed. By looking at the finishing, they don't seem to be 3D printed. How are the chassises actually made though?&lt;/p&gt;&#xA;" OwnerUserId="11392" LastActivityDate="2019-08-13T22:55:57.173" Title="Robotic arm chassis" Tags="&lt;robotic-arm&gt;&lt;manufacturing&gt;&lt;chassis&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="19248" PostTypeId="2" ParentId="19242" CreationDate="2019-08-09T20:44:39.210" Score="0" Body="&lt;p&gt;This is more of a statistics question. Convolude 2 normal distributions with the means and deviations as you describe, and you get something akin to the answer posted &lt;a href=&quot;https://stats.stackexchange.com/questions/17800/what-is-the-distribution-of-the-sum-of-independent-normal-variables&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or to sum it up simply, you add the means of the points (&lt;span class=&quot;math-container&quot;&gt;$\mu_{A+B} = \mu_{a}+ \mu_{b}$&lt;/span&gt;), and those are your new means, and a variance of &lt;span class=&quot;math-container&quot;&gt;$\sigma^{2}_{a+b}=\sigma ^{2}_{a}+\sigma ^{2}_{b}$&lt;/span&gt; . &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I assume you know your standard deviation, as without it your confidence intervals are useless.&lt;/p&gt;&#xA;" OwnerUserId="17194" LastActivityDate="2019-08-09T20:44:39.210" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19249" PostTypeId="2" ParentId="19236" CreationDate="2019-08-09T22:37:20.800" Score="1" Body="&lt;p&gt;I am not sure what you mean by 'displacement value which is acceleration independent'. The conversion of relative positioning you're getting from /dev/input/mouse will always depend on the DPI of the mouse. All you'd have to do is figure out the DPI (either from the specs or from measurements, and hence the conversion between reported dx/dy values, and then accumulate them once you start moving from the origin. Here are some resources that could be useful to you:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://kodedevil.com/2017/07/09/optical-mouse-odometer-rpi/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://kodedevil.com/2017/07/09/optical-mouse-odometer-rpi/&lt;/a&gt; (notice the scaling factor in the code)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://blog.makezine.com/2012/09/15/turning-a-cheap-optical-mouse-into-a-robot-odometer/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://blog.makezine.com/2012/09/15/turning-a-cheap-optical-mouse-into-a-robot-odometer/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10310" LastActivityDate="2019-08-09T22:37:20.800" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19250" PostTypeId="1" CreationDate="2019-08-10T04:51:53.187" Score="0" ViewCount="16" Body="&lt;p&gt;I noticed that there are heaps of suction cup types for vacuum arms, but how to tell which cup type should be used when? The way I read it is, for bigger and heavier objects, a cup with a large membrane should be used. But what about those with various patterns, e.g., ones with the Labyrinth patterns?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/3U9yK.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3U9yK.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/myL1j.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/myL1j.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11489" LastActivityDate="2019-08-10T04:51:53.187" Title="The wide range of suction cups" Tags="&lt;robotic-arm&gt;" AnswerCount="0" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19253" PostTypeId="2" ParentId="19242" CreationDate="2019-08-11T01:09:47.083" Score="1" Body="&lt;p&gt;The tutorial you linked is a good one but does not deal with the uncertainty well. Unfortunately, what @tuskiomi suggested is for euclidian space variable with single-dimension. Following is a better way of doing your problem. Although it is two poses example, it can be extended to more poses easily.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Fusing multiple observations of a pose. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;\begin{equation}&#xA;p(\textbf{z} | \textbf{x}) = \prod_{i=1}^{k} p(\textbf{z}_i | \textbf{x})&#xA;\end{equation}&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Two observation example&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;\begin{equation}&#xA;ln(p(\textbf{z} | \textbf{x}))=ln(p(\textbf{z}_1 | \textbf{x})p(\textbf{z}_2 | \textbf{x}))&#xA;\end{equation}&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;\begin{equation}&#xA;ln(p(\textbf{z} | \textbf{x}))=c(\textbf{x}^T\Sigma^{-1}\textbf{x}-2\textbf{x}^T\Sigma^{-1}\textbf{z}+\textbf{z}^T\Sigma^{-1}\textbf{z})&#xA;\end{equation}&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;\begin{equation}&#xA;\begin{split}&#xA;ln(p(\textbf{z}_1 | \textbf{x})p(\textbf{z}_2 | \textbf{x}))&amp;amp;=c(\textbf{x}^T\Sigma_1^{-1}\textbf{x}-2\textbf{x}^T\Sigma_1^{-1}\textbf{z}_1+\textbf{z}_1^T\Sigma_1^{-1}\textbf{z}_1+\\&#xA;&amp;amp;\textbf{x}^T\Sigma_2^{-1}\textbf{x}-2\textbf{x}^T\Sigma_2^{-1}\textbf{z}_2+\textbf{z}_2^T\Sigma_2^{-1}\textbf{z}_2)&#xA;\end{split}&#xA;\end{equation}&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is your new uncertainty&#xA;&lt;span class=&quot;math-container&quot;&gt;\begin{equation}&#xA;\begin{split}&#xA;\textbf{x}^T\Sigma^{-1}\textbf{x}=\textbf{x}^T(\Sigma_1^{-1}+\Sigma_2^{-1})\textbf{x}&#xA;\end{split}&#xA;\end{equation}&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;\begin{equation}&#xA;\Sigma=(\Sigma_1^{-1}+\Sigma_2^{-1})^{-1}&#xA;\end{equation}&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and mean.&#xA;&lt;span class=&quot;math-container&quot;&gt;\begin{equation}&#xA;\begin{split}&#xA;\textbf{x}^T\Sigma^{-1}\textbf{z}=\textbf{x}^T(\Sigma_1^{-1}\textbf{z}_1+\Sigma_2^{-1}\textbf{z}_2)&#xA;\end{split}&#xA;\end{equation}&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;\begin{equation}&#xA;\textbf{z}=\Sigma(\Sigma_1^{-1}\textbf{z}_1+\Sigma_2^{-1}\textbf{z}_2)&#xA;\end{equation}&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It might work but occasionally it will suffer from the singularity problem. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The proper way of doing this is fusing them on manifold. If you want to learn more about uncertainty fusion of SE3 poses you should read State estimation for robotics by Prof. Tim Barfoot.&lt;/p&gt;&#xA;" OwnerUserId="19219" LastEditorUserId="19219" LastEditDate="2019-08-20T00:29:34.803" LastActivityDate="2019-08-20T00:29:34.803" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19254" PostTypeId="2" ParentId="2063" CreationDate="2019-08-11T02:03:54.780" Score="1" Body="&lt;p&gt;A switch does not have a quick low to high or high to low transition, instead something like this. This is called switch bounce. &#xA;&lt;img src=&quot;https://i.stack.imgur.com/DsQYX.png&quot; alt=&quot;enter image description here&quot;&gt;&#xA;image source: piconix.com&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just to add to the answers here. &#xA;There are two commonly used methods to avoid switch bouncing:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Using a capacitor with the switch, called RC debouncing. The &#xA;capacitor tries to smoothen the transition and so &#xA;avoiding voltage spikes. &#xA;This method works fine but still there are chances that some &#xA;big &#xA;spikes of voltages may still be sent to the Arduino and Arduino &#xA;senses it as a button press(false button press). So it is not a &#xA;'sure' method to avoid bounce. Also &#xA;additional hardware is required for this method. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Software denouncing: It is better method using which you can &#xA;almost entirely remove the problem of switch bounce. In &#xA;software too there are two majorly used methods, one is called &#xA;polling and other is interrupt method. As Chris wrote, polling &#xA;with a delay of 10-50 ms (depending on the quality of switch you &#xA;are using) can avoid switch bouce. Polling is used in simple &#xA;projects &#xA;where time is not a very crucial aspect of project functioning. &#xA;Polling is easy to implement. On the other hand using interrupt &#xA;can be a little painstaking for beginners but it is a better way &#xA;because the normal functioning of the code is not haulted while &#xA;the debouncing is done(unlike polling where where we use &#xA;delay and stop the processor from doing anything in that &#xA;duration of time) . There can be many &#xA;ways to do so. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Here is a pseudo code that I often useuse to avoid switch bounce:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;//If button is pressed an interrupt, say, INTERRUPT1 is triggered&#xA;//Following is the interrupt service routine for INTERRUPT1:&#xA;ISR(INTERRUPT1) {                                                                        &#xA;//do something you wanted to do on button press                  &#xA;disable INTERRUPT1 //so that other button spike don't trigger it&#xA;enable, say, INTERRUPT2 Timer&#xA;INTERRUPT2 Timer is set to interrupt after, say 10ms                   &#xA;}&#xA;&#xA;//Following is the interrupt service routine for INTERRUPT2:&#xA;ISR(INTERRUPT2) {&#xA;disable INTERRUPT2 Timer  &#xA;enable INTERRUPT1 //button press can be recognized now after 10ms have been elapsed&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="23593" LastEditorUserId="23593" LastEditDate="2019-08-14T04:53:08.930" LastActivityDate="2019-08-14T04:53:08.930" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19257" PostTypeId="2" ParentId="4577" CreationDate="2019-08-11T17:45:17.840" Score="2" Body="&lt;p&gt;I know this thread is old but it's high on Google results and I would like to clarify for anyone who stumbles upon it in the future an answer not yet listed: this chip is not designed to read current accurately below 0.3A and only gives 20% accuracy above that.  This is not listed in the board spec sheet but rather the chip spec sheet.  If you're running motors under no load, you'll get garbage by design.  I honestly don't know why they don't include a warning on this. Relevant thread:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://forum.pololu.com/t/current-sensing-on-dual-mc33926-motor-driver-shield-for-arduino-low-values/13033&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://forum.pololu.com/t/current-sensing-on-dual-mc33926-motor-driver-shield-for-arduino-low-values/13033&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4423" LastActivityDate="2019-08-11T17:45:17.840" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19258" PostTypeId="2" ParentId="19026" CreationDate="2019-08-11T21:57:42.050" Score="2" Body="&lt;h1&gt;Communicating with ROS master&lt;/h1&gt;&#xA;&lt;p&gt;It sounds like you need to point to ROS with the use of user-defined environment variables. I have a set of variables defined in my &lt;code&gt;~/.bashrc&lt;/code&gt; file that define where &lt;code&gt;ROS&lt;/code&gt; is located. This is what I have defined on my device that runs &lt;code&gt;roscore&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;# ROs&#xA;source /opt/ros/kinetic/setup.bash&#xA;# SOurce the local workspace&#xA;source /home/$USER/catkin_ws/devel/setup.bash&#xA;# Grab the machine IP addresses&#xA;machine_ip=(`hostname -I`)&#xA;rosport=':11311'&#xA;rosmasterbegin='http://'&#xA;# Now we set the ip location for roscore&#xA;export ROS_MASTER_URI=$rosmasterbegin${machine_ip[0]}$rosport&#xA;# This is the hostname of the current machine.&#xA;export ROS_HOSTNAME=${machine_ip[0]}&#xA;# This is the ROS distribution that we are running&#xA;export ROS_DISTRO=kinetic&#xA;# Sometimes you need to set ROS_IP for transforms and the parameter server&#xA;# https://answers.ros.org/question/163556/how-to-solve-couldnt-find-an-af_inet-address-for-problem/&#xA;export ROS_IP=${machine_ip[0]}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I suggest you set the &lt;code&gt;ROS_MASTER_URI&lt;/code&gt; variable on your Raspi to the cluster running &lt;code&gt;roscore&lt;/code&gt; to the output of &lt;code&gt;hostname -I&lt;/code&gt; on the cluster. Do make sure that you use the &lt;em&gt;correct&lt;/em&gt; ip addresses since you may have many address (wifi, ethernet, etc). Just because you can ping another machine on the network does not mean that ROS can be found. If you could post the outputs of &lt;code&gt;echo $ROS_MASTER_URI&lt;/code&gt; and &lt;code&gt;echo $ROS_HOSTNAME&lt;/code&gt; in the question, that would allow more people to be able to help you. My suspicion is that you are using the default environment variables and they are not working for you. I suggest you checkout out &lt;a href=&quot;https://wiki.ros.org/ROS/EnvironmentVariables&quot; rel=&quot;nofollow noreferrer&quot;&gt;this link&lt;/a&gt; for more information on ROS environment variables.&lt;/p&gt;&#xA;" OwnerUserId="23597" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2019-08-11T21:57:42.050" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="19259" PostTypeId="2" ParentId="18774" CreationDate="2019-08-11T23:02:43.427" Score="0" Body="&lt;p&gt;I think there should be things clarified:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In short: there are 3 components needed for control. A motor, a driver, and a power supply.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you want to use a stepper motor in a project, you need to use a stepper driver. A stepper driver takes in the STEP and DIR(ection) signals to modulate the pulses to the motor. When you are looking at the specifications of the stepper motor, what you need is a stepper driver that can power the current requirements (amperes) of the motor. Once you have a stepper driver that can supply the required current, you then need to find a power supply that can power the stepper driver. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My suspicion is that the power supply you have is okay, but you need to pick out a stepper driver still. This is where I cannot answer, but rather &lt;em&gt;suggest&lt;/em&gt; companies that make these sort of things. &lt;a href=&quot;https://www.circuitspecialists.com/stepper-motor-drivers&quot; rel=&quot;nofollow noreferrer&quot;&gt;Circuit Specialists&lt;/a&gt; has stepper drivers that would fit your needs as they have high current and high precision. I suggest you do more research as any further answering would be opinionated.&lt;/p&gt;&#xA;" OwnerUserId="23597" LastActivityDate="2019-08-11T23:02:43.427" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19260" PostTypeId="2" ParentId="18195" CreationDate="2019-08-12T00:54:49.103" Score="0" Body="&lt;p&gt;Since we don't know what kind of sensors you want, here is the most specific-broad answer I (and maybe anybody) can give you:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first order of business is to attach a device to the Jetson Xavier that allows for so many GPIO pins. Since I can't think of a &lt;em&gt;single&lt;/em&gt; device, what you &lt;em&gt;can&lt;/em&gt; do is use &lt;em&gt;multiple&lt;/em&gt; devices, like a &lt;a href=&quot;https://www.pjrc.com/store/teensy36.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Teensy 3.6&lt;/a&gt;. They have a bunch of I/O pins (around 40 total), AND all digital input pins are interruptible. Then, for your analog input needs, you can use a chip like &lt;a href=&quot;https://www.adafruit.com/product/856&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; to convert Analog to Digital readings into an SPI bus readout. This chip can then interface with the Teensy through SPI. The only issue is the voltage conversion, but Sparkfun also has a logic level shifter chip that can connect 2 different voltage devices. After all that, the Teensy board(s) can all connect to the Xavier through USB or CAN or I2C or whatever you choose. If you need more Teensy boards, add more as needed. At the moment, the Sparkfun website is down (presumably for maintenance, it is a Sunday night), so I can't link the level shifter in this answer now. Basically, your question is a bit broad, but that is what I would do. Also, as @jsotola said, &quot;easy&quot; is relative, and with 100s of sensors, nothing is easy, (please) don't lie to yourself: this is bound to be a wiring nightmare. Companies like Pololu sell wiring equipment so that you can either buy premade wires or make your own, but again: too much opinion/options/not specific in a question.&lt;/p&gt;&#xA;" OwnerUserId="23597" LastActivityDate="2019-08-12T00:54:49.103" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19261" PostTypeId="2" ParentId="6511" CreationDate="2019-08-12T08:15:11.323" Score="1" Body="&lt;p&gt;First of all industrial robots drive trains with basically no play/backlash, plus the whole construction is very rigid. AFAIK they all use harmonic drive gearing, which is extremely expensive. Most DIY'ers are not willing to spend that kind of money, and that is one reason why they have jerky movements. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;With regards to Universal Robots. They use motors from Kollmorgen, with integrated harmonic drive gearing. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the Universal Robots FAQ (&lt;a href=&quot;https://www.universal-robots.com/how-tos-and-faqs/faq/ur-faq/what-type-of-17271/&quot; rel=&quot;nofollow noreferrer&quot;&gt;link&lt;/a&gt;) I found the following. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Motors: Permanent Magnet AC Synchronous Drive motors are used in both CB3 and e-Series robots. &lt;/li&gt;&#xA;&lt;li&gt;Motor drivers: Integrated Motor Drives, Space Vector (Field Oriented) Control @25Khzhttps://en.wikipedia.org/wiki/Vector_control_(motor)&lt;/li&gt;&#xA;&lt;li&gt;Servo controller: Integrated Servo Controllers in each joint, based on a dual encoder system&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="20864" LastActivityDate="2019-08-12T08:15:11.323" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19263" PostTypeId="2" ParentId="18293" CreationDate="2019-08-12T16:20:56.800" Score="-1" Body="&lt;p&gt;If you need to transform quaternion to euler angels you just need to use this equation:&lt;/p&gt;&#xA;&#xA;&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;def quaternion_to_euler(q):&#xA;&#xA;    (x, y, z, w) = (q[0], q[1], q[2], q[3])&#xA;    t0 = +2.0 * (w * x + y * z)&#xA;    t1 = +1.0 - 2.0 * (x * x + y * y)&#xA;    roll = math.atan2(t0, t1)&#xA;    t2 = +2.0 * (w * y - z * x)&#xA;    t2 = +1.0 if t2 &amp;gt; +1.0 else t2&#xA;    t2 = -1.0 if t2 &amp;lt; -1.0 else t2&#xA;    pitch = math.asin(t2)&#xA;    t3 = +2.0 * (w * z + x * y)&#xA;    t4 = +1.0 - 2.0 * (y * y + z * z)&#xA;    yaw = math.atan2(t3, t4)&#xA;    return [yaw, pitch, roll]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I think translations are already in global coordinates.  &lt;/p&gt;&#xA;" OwnerUserId="23577" LastActivityDate="2019-08-12T16:20:56.800" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19264" PostTypeId="1" CreationDate="2019-08-12T19:49:51.020" Score="2" ViewCount="118" Body="&lt;p&gt;I am using Roy Featherstone's spatial_v2 to model a mobile robot. I encountered a problem so I went back to modeling a free-floating sphere to familiarize myself with the library and the algorithms. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;I have an error when I model the sphere in free fall in the zy plane while spinning around x.&lt;/strong&gt; I am using the FDfb function for the forward dynamics as the sphere is a free-floating object.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The spatial velocity, in fixed based coordinates, is set to :&#xA;&lt;span class=&quot;math-container&quot;&gt;$$v = \begin{bmatrix} -5\\ 0\\ 0\\ 0\\ -1 \\-1 \end{bmatrix}$$&lt;/span&gt;&#xA;And being in free fall and with no centrifugal force, &lt;strong&gt;the spatial acceleration should be&lt;/strong&gt;, in fixed based coordinates :&lt;br&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$a = \begin{bmatrix} 0\\ 0\\ 0\\ 0\\ 0 \\-9.8066 \end{bmatrix}$$&lt;/span&gt;&#xA;&lt;strong&gt;But the one returned by the FDfb function is&lt;/strong&gt;, in fixed based coordinates :&#xA;&lt;span class=&quot;math-container&quot;&gt;$$a = \begin{bmatrix} 0\\ 0\\ 0\\ 0\\ 5\\-14.8066 \end{bmatrix}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;I guess Featherstone's library has been sufficiently tested so it must be my inputs. So what is wrong with my inputs ? Could someone else test it and post the results ?&lt;/strong&gt;   &lt;/p&gt;&#xA;&#xA;&lt;pre class=&quot;lang-matlab prettyprint-override&quot;&gt;&lt;code&gt;sphere.NB     = 1;&#xA;sphere.parent = 0;&#xA;sphere.jtype  = {'R'}; &#xA;sphere.Xtree  = {eye(6)};&#xA;% Inertia&#xA;M = 0.2;&#xA;C = [0 0 0];&#xA;J = diag([0.0002 0.0002 0.0002]);&#xA;sphere.I = {mcI( M, C, J )};&#xA;sphere.gravity = [0 0 -9.8066]';                                         &#xA;% To Floating base &#xA;sphere = floatbase(sphere);&#xA;% Simulation parameters&#xA;vv_0  = [-5 0 0 0 -1 -1]';&#xA;xfb = [rq(eye(3)); [0 0 0]'; vv_0]; &#xA;&#xA;% Forward Dynamic&#xA;[xdfb] = FDfb(sphere, xfb, [], [], [])&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I hope one of you can help me understand. Thanks !&lt;br&gt;&#xA;Titouan&lt;/p&gt;&#xA;" OwnerUserId="23605" LastEditorUserId="10414" LastEditDate="2021-01-25T16:24:11.570" LastActivityDate="2021-01-25T16:24:11.570" Title="Free-floating sphere dynamics using Roy Featherstone's spatial_v2 toolbox" Tags="&lt;mobile-robot&gt;&lt;dynamics&gt;&lt;algorithm&gt;&lt;screw-theory&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19265" PostTypeId="2" ParentId="8710" CreationDate="2019-08-12T20:16:14.403" Score="0" Body="&lt;p&gt;This may be a bit late (and slightly opinionated), but I have found &lt;a href=&quot;https://ubuntu-mate.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ubuntu Mate&lt;/a&gt; a very effective operating system to run ROS on a RasPi. It can access the arm repos for ROS and it is Ubuntu, so it brings the best of both worlds. Ubuntu Mate is supported and can run pre-built binaries for kinetic and melodic without a hitch (I have done this). &lt;/p&gt;&#xA;" OwnerUserId="23597" LastActivityDate="2019-08-12T20:16:14.403" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19266" PostTypeId="1" AcceptedAnswerId="19268" CreationDate="2019-08-12T20:28:24.340" Score="1" ViewCount="65" Body="&lt;p&gt;I'm trying to design a compensator for a pendulum type plant with arduino mega. As you can see from the picture, the system bandwidth is 9 rad/sec. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I calculated the sampling time as ws=10*wb=90, so, max Ts=2*pi/90 = 0.07 sec. and I select Ts=0.1s. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then I discretize my continuous compensator with this sampling time.&#xA;I setup arduino with 0.1s sampling time and feedback my controller with a sensor which has 0.1s sampling time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But it does not stabilize the system. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The plant's transfer function is OK but Im not sure with the system delay time, code execution time and I do not know how to experimentally measure them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;what kinds of improvements do I need to make? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/0Pr3B.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0Pr3B.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="10090" LastActivityDate="2019-08-12T23:03:28.543" Title="Sampling time selection" Tags="&lt;control&gt;&lt;arduino&gt;&lt;pid&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19268" PostTypeId="2" ParentId="19266" CreationDate="2019-08-12T22:44:01.423" Score="1" Body="&lt;p&gt;I would change the sampling period to 0.05 sec to make sure the system is below the max period.  But otherwise your analysis seems correct. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Did you notice that the system is showing underdamped behavior?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next is to choose the type of compensator you will implement.  Are you trying to place poles?  Or use PD or PID?  You’ve got to find a compensator that lets you add controller damping to the overall system, then conduct its analysis and implementation.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastEditorUserId="11125" LastEditDate="2019-08-12T23:03:28.543" LastActivityDate="2019-08-12T23:03:28.543" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19269" PostTypeId="1" CreationDate="2019-08-13T08:12:56.213" Score="0" ViewCount="25" Body="&lt;p&gt;I am trying to generate an odometry based motion model as described in the &lt;a href=&quot;http://ais.informatik.uni-freiburg.de/teaching/ss18/robotics/slides/06-motion-models.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;lectures&lt;/a&gt;. I have implemented a C++ version of the code. The issue I am having is that when I try to simulate successive motion using odometry commands the uncertainty in the pose is not increasing. It almost remains the same as the robot moves. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the sampling function&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;double MotionModels::sample_normal_distribution_gaussian(float mean, float standard_deviation) {&#xA;&#xA;   auto lower=-(mean+3*standard_deviation);&#xA;   auto upper =mean+3*standard_deviation;&#xA;    std::normal_distribution&amp;lt;double&amp;gt; distribution(mean,standard_deviation);&#xA;    double temp= distribution(generator);&#xA;    while(1){&#xA;        if(temp&amp;gt;(lower) &amp;amp;&amp;amp; temp&amp;lt;(upper))&#xA;            break;&#xA;        else&#xA;            temp= distribution(generator);&#xA;    }&#xA;&#xA;    return temp;&#xA;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Here is the motion model :&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Pose MotionModels::MM_Odometry(Pose &amp;amp;p, Odometry &amp;amp;u, NoiseParams &amp;amp;np) {&#xA;&#xA;    Odometry u_n;&#xA;    u_n.delta_rot1 = u.delta_rot1 + sample_normal_distribution_gaussian(0,(np.a1*abs(u.delta_rot1)) + (np.a2*u.delta_trans));&#xA;    u_n.delta_trans= u.delta_trans + sample_normal_distribution_gaussian(0,np.a3*u.delta_trans + np.a4*(abs(u.delta_rot1)+abs(u.delta_rot2)));&#xA;    u_n.delta_rot2 = u.delta_rot2 + sample_normal_distribution_gaussian(0,np.a1*abs(u.delta_rot2)+np.a2*u.delta_trans);&#xA;&#xA;    Pose out;&#xA;    out.x       = p.x + u_n.delta_trans*cos(p.theta+u_n.delta_rot1);&#xA;    out.y       = p.y + u_n.delta_trans*sin(p.theta+u_n.delta_rot1);&#xA;    out.theta   = p.theta + u_n.delta_rot1 + u_n.delta_rot2;&#xA;&#xA;    return  out;&#xA;&#xA;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Simulation results with a series of motion are as under&#xA;&lt;a href=&quot;https://i.stack.imgur.com/9MFqH.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9MFqH.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Expected Results&#xA;&lt;a href=&quot;https://i.stack.imgur.com/6QZnf.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6QZnf.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Would be highly thankful for any help.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Update :&lt;/strong&gt;&#xA;Follwoing  @Petch's suggestion I was able to get the following output. The uncertainty increases as the robot moves away from starting point but when I take a 90 degrees turn the behavior is unexpected .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These are the odometery commands I am using along with paramaters&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;u1=[0,0,1]  (rot1, rot2,trans) &lt;/li&gt;&#xA;&lt;li&gt;u2=[0,0,1.1] &lt;/li&gt;&#xA;&lt;li&gt;u3=[0,0,1.3]&lt;/li&gt;&#xA;&lt;li&gt;u4=[0,pi/2,1] &lt;/li&gt;&#xA;&lt;li&gt;u5=[0,0,1]&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Noise Parameters :&#xA;-[alpha1,alpha2,aplha3,alpha4]=[0.1,0.1,0.01,0.01]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/J0Vnq.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/J0Vnq.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="16715" LastEditorUserId="16715" LastEditDate="2019-08-14T02:56:05.303" LastActivityDate="2019-08-14T02:56:05.303" Title="Sampling from guassian distribution for odometry based motion?" Tags="&lt;mobile-robot&gt;&lt;odometry&gt;&lt;probability&gt;" AnswerCount="0" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="19271" PostTypeId="2" ParentId="15444" CreationDate="2019-08-13T12:30:46.597" Score="2" Body="&lt;p&gt;Adding to Peter Corke's answer, there's also a &lt;a href=&quot;https://www.coursera.org/learn/modernrobotics-course2?specialization=modernrobotics&quot; rel=&quot;nofollow noreferrer&quot;&gt;Coursera course&lt;/a&gt; by Kevin Lynch which uses the Modern Robotics book as a reference and explains how to derive the screw based Jacobian. The Jacobian can be either with respect to the &quot;space frame&quot; (frame attached to base of the manipulator) or the &quot;body frame&quot; (frame attached to the end-effector). Here's a YouTube &lt;a href=&quot;https://www.youtube.com/watch?v=KbI8HN3imtQ&quot; rel=&quot;nofollow noreferrer&quot;&gt;video&lt;/a&gt; from that course that explains the derivation.&lt;/p&gt;&#xA;" OwnerUserId="21531" LastActivityDate="2019-08-13T12:30:46.597" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19272" PostTypeId="2" ParentId="18195" CreationDate="2019-08-13T14:10:01.667" Score="1" Body="&lt;p&gt;Depending on the resolution you need, you could use a few multi-channel ADC chips. The  TLC1543IN is a through-hole (would work in a breadboard) 10-bit 11-input ADC that communicates over SPI. Connect however many you need to the same SPI bus, and then wire each chip's CS (chip select) pin to a GPIO on the Xavier. Whenever a chip's CS line is held high (at VCC), it'll ignore all activity on the SPI bus, allowing you to have multiple identical chips on the same bus - simply set all CS lines to high except for that of the ADC chip you wish to communicate with. I doubt there's a Linux driver, but it shouldn't be too hard to slap something together in C/C++. You could implement all of this with nothing but breadboards/perfboards, saving you the need to make a custom PCB.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternately, you could use a few microcontrollers communicating over SPI/I2C/CAN/your protocol of choice. something like an ATTINY828 could work - each chip is only \$1 or so, and has 28x 10-bit ADC channels. For more power and resolution, the STM32F303ZDT6 is a good choice - \$8/chip, but 40x 12-bit channels. Either way, that'll require some extra programming and probably PCB development.&lt;/p&gt;&#xA;" OwnerUserId="17926" LastActivityDate="2019-08-13T14:10:01.667" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19273" PostTypeId="1" CreationDate="2019-08-13T14:45:13.813" Score="2" ViewCount="197" Body="&lt;p&gt;I'm using the MPU9250, it measures acceleration, magnetometer, gyro, etc. Complementary filter tutorial for this is &lt;a href=&quot;http://geekmomprojects.com/gyroscopes-and-accelerometers-on-a-chip&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;, however this tutorial does not have a magnetometer and I do, thus I thought I could eliminate the gyro drift.&#xA;Seen here: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/47AIy.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/47AIy.png&quot; alt=&quot;serial monitor showing drift&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've found this &lt;a href=&quot;https://robotics.stackexchange.com/questions/4677/how-to-estimate-yaw-angle-from-tri-axis-accelerometer-and-gyroscope&quot;&gt;post&lt;/a&gt; already in which other users state that a magnetometer is required. However, they do not go into much detail (and because it is such an old post I didn't want to bump it).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My other complementary filters are calculated as such:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;float angle_x = alpha*gyro_angle_x + (1.0 - alpha)*accel_angle_x;&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;float angle_y = alpha * gyro_angle_y + (1.0 - alpha) * accel_angle_y;&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;angle z = yaw&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have my local inclination angle which I have been previously told I need and I also have my magnetometer value. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is; How do I combine all my values into an equation for the complementary filter?&lt;/p&gt;&#xA;" OwnerUserId="23609" LastEditorUserId="23609" LastEditDate="2019-08-13T14:50:22.797" LastActivityDate="2019-08-13T14:50:22.797" Title="How to estimate yaw angle from magnetometer and gyroscope?" Tags="&lt;quadcopter&gt;&lt;sensors&gt;&lt;imu&gt;&lt;gyroscope&gt;&lt;filter&gt;" AnswerCount="0" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="19274" PostTypeId="1" CreationDate="2019-08-13T17:50:55.980" Score="0" ViewCount="34" Body="&lt;p&gt;recently I tried to measure yaw angle with MPU6050 and MahonyAHRS algorithm. As expected, the yaw angle consistently drifts.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I could see that the changes caused by the drift are much smaller than the changes caused by real movements. &#xA;So I put a simple if sentence to check whether the change is bigger than a threshold, if yes it is not a drift, if not it is a drift so don't add up.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;yaw_change = read_yaw() - yaw_lastvalue&#xA;if yaw_change &amp;gt; threshold_for_drift :&#xA;    yaw = yaw_startvalue + yaw_change&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But it cant be that simple ? Is there any disadvantage for catching the drift in this way? Smaller movements than drift can be ignored in my case. &lt;/p&gt;&#xA;" OwnerUserId="21382" LastEditorUserId="21382" LastEditDate="2019-08-13T17:56:09.720" LastActivityDate="2019-08-13T17:56:09.720" Title="Catching drift from IMU with if...else" Tags="&lt;imu&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19276" PostTypeId="2" ParentId="19246" CreationDate="2019-08-13T22:55:57.173" Score="0" Body="&lt;p&gt;The robot manufacturers or the industries that use them will sponsor these competitions; these sponsorships generally take the form of donated equipment. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beyond the tax writeoff of donating the equipment, a robot arm manufacturer gets the university to turn out students that have experience with their particular arm. Similar benefit for industries. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are, say, an automotive company, then maybe you'll donate the same kind of robot arms and PLCs that you use to a university. Everyone in the engineering department at that university will then train up on &lt;em&gt;your company's&lt;/em&gt; preferred robot arms, using &lt;em&gt;your company's&lt;/em&gt; preferred PLCs, and then you can come hire up the best-performing students from the graduating classes. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The company gets good PR for sponsoring the competition, a tax writeoff for donating the equipment, and gets a steady stream of people that already have a working knowledge of interfacing to the equipment they'll use in their professional career.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A lot of companies will do this, to get people used to using &lt;em&gt;their&lt;/em&gt; software, etc. My university had everyone using Microsoft Office (Word vs. LaTeX),  Matlab (vs. Mathematica), Autodesk Inventor (vs. Solidworks) and so on. Those were all provided free to me while I was a student. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2019-08-13T22:55:57.173" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19277" PostTypeId="1" CreationDate="2019-08-14T02:17:23.740" Score="0" ViewCount="192" Body="&lt;p&gt;I have been working on a line following robot for a line tracing competition. It has 7 IR sensors for line detection and the robot size is limited based on the competition rules. The robot structure is similar to the one shown in this question &lt;a href=&quot;https://robotics.stackexchange.com/questions/8556/length-and-width-of-a-line-following-robot&quot;&gt;Length and Width of a Line Following Robot&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My questions is, given a fixed robot length and fixed distance between the wheels and the caster wheel, should be distance between the differential wheels be as big as possible or as small as possible, if there are sharp turns (90 degrees and more) in the competition map? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I watched this youtube video &lt;a href=&quot;https://www.youtube.com/watch?v=aE7RQNhwnPQ&quot; rel=&quot;nofollow noreferrer&quot;&gt;Control of Mobile Robots- 2.2 Differential Drive Robots&lt;/a&gt;and it says the car turning speed is &lt;span class=&quot;math-container&quot;&gt;$R*(v_l-v_r)/L$&lt;/span&gt; where &lt;span class=&quot;math-container&quot;&gt;$R$&lt;/span&gt; is the wheel radius, &lt;span class=&quot;math-container&quot;&gt;$L$&lt;/span&gt; is distance between wheels, &lt;span class=&quot;math-container&quot;&gt;$v_l$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$v_r$&lt;/span&gt; are angular speed of left and right wheels. From this equation, it seems the &lt;span class=&quot;math-container&quot;&gt;$L$&lt;/span&gt; should be as small as possible, and &lt;span class=&quot;math-container&quot;&gt;$R$&lt;/span&gt; should be as big as possible, to allow fast turning. However, I saw so many designs with big &lt;span class=&quot;math-container&quot;&gt;$L$&lt;/span&gt; and very small &lt;span class=&quot;math-container&quot;&gt;$R$&lt;/span&gt;, like the one showing below. So I am not sure if I understood the equation correctly or I missed something. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/UjZq1.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/UjZq1.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="16828" LastEditorUserId="21531" LastEditDate="2019-08-14T14:34:09.407" LastActivityDate="2021-05-05T17:18:36.917" Title="Effects of distance between wheels on differential line following robots" Tags="&lt;line-following&gt;&lt;differential-drive&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19280" PostTypeId="2" ParentId="19277" CreationDate="2019-08-14T08:11:03.093" Score="0" Body="&lt;p&gt;Huge R, Small L can be the theoretic optimum, but you want to build a physical robot with real motors. If your robot is turning very fast, you have to be able to control the motor very accurately otherwise you robot will rotate very fast, but most likely not into the direction you want it to face. Large L also improves the weight distribution between the wheels so that at least the slip is similar for both wheels. &lt;/p&gt;&#xA;" OwnerUserId="23196" LastActivityDate="2019-08-14T08:11:03.093" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19281" PostTypeId="2" ParentId="1758" CreationDate="2019-08-14T11:50:02.853" Score="0" Body="&lt;p&gt;Though using polling or Interrupt won't cause any significant change in a simple line follower robot, but it's often good to use Interrupts. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Though Timer Interrupts are very well used in a number of cases but I would suggest, in this case, that you can better use a simple Interrupt which gets triggered when a specific input comes from the sensor (like white colour detected, and sensor gives a logic high). Doing this you will be sure about what exactly your microcontroller is doing when it encounters the white patch. Also, there is least delay between getting the input and performing the corresponding output. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Though, in the case of simple line follower you can just leave interrupts and continue with polling. But if you are multitasking with your robot (like having multiple sensors for actuating various things) you will probably need interrupts. One more benefit is that you can set up the priority for these events in interrupts. Like what would happen if you are doing task A and and an interrupt comes and asks for doing task B. You can make one of them more important by setting one of them to higher priority. Doing this, the action with more priority will be completed first.&lt;/p&gt;&#xA;" OwnerUserId="23593" LastEditorUserId="23593" LastEditDate="2019-08-14T11:56:11.770" LastActivityDate="2019-08-14T11:56:11.770" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19282" PostTypeId="1" AcceptedAnswerId="19285" CreationDate="2019-08-14T12:29:26.527" Score="1" ViewCount="68" Body="&lt;p&gt;I've been researching decoupled inverse kinematics with respect to industrial robots. The assumptions made in the decoupled equations greatly simply the equations, however I am having a hard time understanding how these are actually applied once a tool is attached to the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to one source, &quot;The spherical wrist assumption makes the position of the wrist center point is independent on the end-effector orientation.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is great since many industrial robots are built this way, but what happens once you attach a tool, say a MIG welding gun? The length of the tool creates an offset from the wrist center which then makes it such that the position of the wrist center IS influenced by the orientation of the end effector. All of the derivations of inverse kinematics using decoupled equations stop at J6 and do not include a tool frame. To me, this really causes a issue? Am I missing something here?lop &lt;/p&gt;&#xA;" OwnerUserId="23616" LastActivityDate="2019-08-14T15:12:28.310" Title="Help understanding decoupled inverse kinematics" Tags="&lt;inverse-kinematics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19283" PostTypeId="1" AcceptedAnswerId="19284" CreationDate="2019-08-14T13:20:56.450" Score="0" ViewCount="126" Body="&lt;p&gt;I graduated from college a few years ago and over that past year have been trying to self-study robot kinematics. My long term goal is to purchase a used industrial robot and retrofit it with a real-time PLC and servo motion control system. This is purely for fun/hobby/education and I'm not sure what it will be used for once I do get it done.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have mainly worked through the textbook &quot;Introduction to Robotics: Mechanics and Control&quot; by John J. Craig and tried to find video recordings of lectures which went along with the book. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a solid understanding of the forward kinematics and have been working through the chapter on inverse kinematics. I am having a hard time jumping from the concept of developing inverse kinematics from one frame to another all the way to developing the equations required to describe the motion of a 6 axis robot. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know a good place to find a worked through solution of inverse kinematics for a robot with a spherical wrist? I'd like to be able to derive the equations and write code to calculate all the possible joint angle solutions for the robot to achieve a particular position. There is a lot that needs to be looked into beyond that, but this is where I am stuck now.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks! &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mike&lt;/p&gt;&#xA;" OwnerUserId="23616" LastActivityDate="2019-08-14T18:05:03.897" Title="Looking for solution to 6R inverse kinematics" Tags="&lt;inverse-kinematics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19284" PostTypeId="2" ParentId="19283" CreationDate="2019-08-14T15:03:58.380" Score="0" Body="&lt;h1&gt;TL;DR&lt;/h1&gt;&#xA;&lt;p&gt;In order to implement the inverse kinematics of a 6R robot (with spherical wrist), you need to use a technique called &lt;strong&gt;kinematic decoupling&lt;/strong&gt;. Kinematic decoupling is when you separate the task of orienting the end effector with the task of translating the end effector.&lt;/p&gt;&#xA;&lt;p&gt;The book that I think talks about this well is &lt;code&gt;Robot Dynamics and Control&lt;/code&gt;&#xA;Second Edition, W. Spong, Seth Hutchinson, and M. Vidyasagar.&lt;/p&gt;&#xA;&lt;p&gt;For this next part, I am assuming you have learned about D-H parameters already (and therefore have developed the forward-kinematics frame transforms for your 6R robot). If not, the Wikipedia &lt;a href=&quot;https://en.wikipedia.org/wiki/Denavit%E2%80%93Hartenberg_parameters&quot; rel=&quot;nofollow noreferrer&quot;&gt;page&lt;/a&gt; is a great source on the subject.&lt;/p&gt;&#xA;&lt;h1&gt;First 3 Joints Analysis&lt;/h1&gt;&#xA;&lt;p&gt;When looking at a 6R robot, and as you already mentioned, there is a spherical wrist at the end effector (ee). This sperical wrist determines the orientation of the ee and therefore all of the calculations for solving for the location of the ee can be solved pretty easily. This is because the first 3 joints, or 3 equations, all contribute to the location of the center of the wrist. You know the location of the wrist by doing the inverse transform of the ee along the local Z-axis by the robot's physical offset. (This is known as the approach vector, which is the Z-component of the rotation matrix, also known as the 3rd column unit vector. The offset distance along this vector is a constant known value that can be changed to somebody's needs and the math does not change.)&#xA;You can then solve for the first 3 joint angles by solving the X-Y-Z equations for the location of the center of the wrist, which would be frame transforms T0-1 to T2-3 multiplied together. These calculations &lt;em&gt;may&lt;/em&gt; result in multiple solutions, so you need to be mindful of including all possible solutions.&lt;/p&gt;&#xA;&lt;h1&gt;Spherical Wrist Analysis&lt;/h1&gt;&#xA;&lt;p&gt;Once you have decided which 3 joint values you want for the first 3 joints, you can then solve for the wrist. Since you know the frame transforms T3-6 from your D-H table, you can then look at the rotation component of the frame transform. I don't remember off the top of my head what it looks like, but there are specific elements in the matrix that have fewer symbolic terms involved in the mathematical definition which allow you to systematically solve for the rotations of the last 3 joints.&lt;/p&gt;&#xA;&lt;p&gt;After a quick &lt;a href=&quot;http://robotics.usc.edu/%7Eaatrash/cs545/Lecture8.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;google search&lt;/a&gt;, I found  resources on how to solve spherical wrists with pretty pictures. This one also happens to show how to do the first 3 joints as well. I don't want to take credit for other people's work, but there are many presentations out there that explain this out fully pretty well. I also didn't want to make this a simple link answer, but rather explain what is going on, then share a reference link.&lt;/p&gt;&#xA;&lt;p&gt;I am writing this without all of my books in front of me, but hopefully it gives you more of a direction. You just need to understand kinematic decoupling and this problem will look a lot simpler to you. I would happily share a pdf of a book, but, let's just say I don't know how legal that would be... LoL hope that helps&lt;/p&gt;&#xA;&lt;p&gt;(If this answer helped you, a vote up or green check-mark is greatly appreciated).&lt;/p&gt;&#xA;" OwnerUserId="23597" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2019-08-14T18:05:03.897" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19285" PostTypeId="2" ParentId="19282" CreationDate="2019-08-14T15:12:28.310" Score="1" Body="&lt;p&gt;An End-Of-Arm-Tooling (EoAT) is simply a hard-coded frame transform offset form the real-robot ee. It does not change the inverse kinematics equations for the 6R robot. You just need to make sure you correctly define the transformation matrix so that you don't run into any issues. Just before you calculate the IK, you apply the inverse of the frame transform offset given by the EAoT and then you are good to go. The math does not get any more complicated than a single extra math operation.&lt;/p&gt;&#xA;" OwnerUserId="23597" LastActivityDate="2019-08-14T15:12:28.310" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19286" PostTypeId="2" ParentId="230" CreationDate="2019-08-14T17:50:10.567" Score="1" Body="&lt;p&gt;I have experience installing ROS on a Raspi using &lt;a href=&quot;https://ubuntu-mate.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ubuntu Mate&lt;/a&gt; as an operating system. It is essentially a regular ubuntu operating system, but on an arm device. It can install ROS through pre-built binaries. It requires no more configuring than a regular Ubuntu laptop. I know that there is one version of the Pi that is not officially supported (I think it is the 3B+, it's been a while since installation thankfully), but somebody figured out how to get around that issue on a forum post I googled.&lt;/p&gt;&#xA;&lt;h1&gt;Update:&lt;/h1&gt;&#xA;&lt;p&gt;With official support for UBUNTU on Raspberry Pi, installing ROS 1 on a Raspberry Pi is a non-issue. You can install Ubuntu following Canonical's docs &lt;a href=&quot;https://ubuntu.com/tutorials/how-to-install-ubuntu-desktop-on-raspberry-pi-4#1-overview&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="23597" LastEditorUserId="23597" LastEditDate="2021-04-27T15:00:07.827" LastActivityDate="2021-04-27T15:00:07.827" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19287" PostTypeId="1" AcceptedAnswerId="19289" CreationDate="2019-08-14T21:45:30.620" Score="0" ViewCount="90" Body="&lt;p&gt;i want to collect some ideas about this video. &lt;a href=&quot;https://www.youtube.com/watch?v=q-ZDB8xqI7M&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=q-ZDB8xqI7M&lt;/a&gt; &#xA;Is the Left Vacuum cleaner using some 2D Mapping or OpenCV to navigate through the room ?&#xA;Or is it just a Hard coded Algorithm to do the path planning? &lt;/p&gt;&#xA;" OwnerUserId="23528" LastActivityDate="2019-08-15T02:55:56.860" Title="Path planning or 2D Mapping" Tags="&lt;mapping&gt;&lt;path-planning&gt;&lt;opencv&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19288" PostTypeId="1" CreationDate="2019-08-14T22:47:22.587" Score="0" ViewCount="92" Body="&lt;p&gt;I bought a &lt;em&gt;iRobot Create 2&lt;/em&gt; last week and it does not have any manual to control from my computer, so I have two questions: How can I send commands to my &lt;em&gt;iRobot Create 2&lt;/em&gt;? And what programs can I do?&lt;/p&gt;&#xA;" OwnerUserId="23315" LastEditorUserId="19515" LastEditDate="2020-07-23T17:42:28.043" LastActivityDate="2020-07-23T17:42:28.043" Title="How to send commands to iRobot Create 2?" Tags="&lt;irobot-create&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19289" PostTypeId="2" ParentId="19287" CreationDate="2019-08-15T02:55:56.860" Score="0" Body="&lt;p&gt;Left one has LiDAR and it does 2D SLAM. OpenCV is an image processing library not a tool for robot navigation. The path is planned in the onboard embedded system based on the built map.&lt;/p&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2019-08-15T02:55:56.860" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19290" PostTypeId="1" CreationDate="2019-08-15T10:12:16.667" Score="0" ViewCount="2284" Body="&lt;p&gt;What does the contents of PointCloud2 means in ROS?&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;code&gt;fields.offset&lt;/code&gt;?&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;fields.datatype&lt;/code&gt;?&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;fields.count&lt;/code&gt;?&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;point_step&lt;/code&gt;?&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;row_step&lt;/code&gt;?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;sub&gt;Its &lt;a href=&quot;http://docs.ros.org/melodic/api/sensor_msgs/html/msg/PointCloud2.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;documentation&lt;/a&gt; is poor&lt;/sub&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a published PointCloud2 message by Velodyne LiDAR:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;header: &#xA;  seq: 1071&#xA;  stamp: &#xA;    secs: 1521699326&#xA;    nsecs: 676390000&#xA;  frame_id: &quot;velodyne&quot;&#xA;height: 1&#xA;width: 66811&#xA;fields: &#xA;  - &#xA;    name: &quot;x&quot;&#xA;    offset: 0&#xA;    datatype: 7&#xA;    count: 1&#xA;  - &#xA;    name: &quot;y&quot;&#xA;    offset: 4&#xA;    datatype: 7&#xA;    count: 1&#xA;  - &#xA;    name: &quot;z&quot;&#xA;    offset: 8&#xA;    datatype: 7&#xA;    count: 1&#xA;  - &#xA;    name: &quot;intensity&quot;&#xA;    offset: 16&#xA;    datatype: 7&#xA;    count: 1&#xA;  - &#xA;    name: &quot;ring&quot;&#xA;    offset: 20&#xA;    datatype: 4&#xA;    count: 1&#xA;is_bigendian: False&#xA;point_step: 32&#xA;row_step: 2137952&#xA;data: [235, 171, 54, 190, 53, 107, 250, ...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;ol start=&quot;6&quot;&gt;&#xA;&lt;li&gt;&lt;p&gt;Why height in Velodyne-HDL64e LiDAR is equal to one? I expected it to be 64.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Finally, for example, what is 171 value in &lt;code&gt;data&lt;/code&gt;? is &lt;code&gt;Y&lt;/code&gt; or is a range (for which one of the beams)?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="18870" LastActivityDate="2020-04-03T08:52:46.690" Title="What is the definition of the contents of PointCloud2?" Tags="&lt;ros&gt;&lt;lidar&gt;&lt;point-cloud&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19291" PostTypeId="1" CreationDate="2019-08-11T18:47:11.460" Score="0" ViewCount="8" Body="&lt;p&gt;I'm a recent grad from mech. eng. program and going into robotics field. I want to design a suspension for a &lt;strong&gt;&lt;em&gt;small ATV robotic platform on 4 wheels&lt;/em&gt;&lt;/strong&gt; that carries max 75 kg load.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I might use the wheels as active crawlers for climbing stairs (not sure) that's why I think a suspension for each wheel is necessary.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can you please point me in the right direction where to start my research: books, literature, sites.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So far I found some info on the suspension's topic berried deep in robotics books, but I'm hoping that someone would point me to the more precise sources, or the keywords to research, or what field of mechanical design I should re-visit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you in advance!&lt;/p&gt;&#xA;" OwnerUserId="15953" OwnerDisplayName="Jek Denys" LastActivityDate="2019-08-15T11:56:26.317" Title="Advice for suspension 101 for a small ATV robotic platform" Tags="&lt;kinematics&gt;" AnswerCount="0" CommentCount="3" ClosedDate="2019-08-16T00:20:18.087" ContentLicense="CC BY-SA 4.0" />
  <row Id="19292" PostTypeId="2" ParentId="18644" CreationDate="2019-08-15T14:08:58.057" Score="1" Body="&lt;p&gt;The XYZ readings from the camera are in the reference frame of the camera. @FooBar is correct about the X/Y values: they are planar about the center of the camera, just like the OpenGL viewing window. I don't know the maximum range of the point-cloud data, but my suspicion is that the maximum z value is 1. (This could change, however, depending if you have a multi-camera setup, but I don't have the experimental dtaa to prove one way or the other, and that is outside the scope of the original question.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;RViz is built on OpenGL (though the robotics frames are not necessarily following the same standard, just that they share many  similar design choices), so I suggest you look up the documentation for versions 4.X. Here is a great explanation of OpenGL &lt;a href=&quot;https://learnopengl.com/Getting-started/Coordinate-Systems&quot; rel=&quot;nofollow noreferrer&quot;&gt;coordinate frames&lt;/a&gt;, not that you needed to go into that much detail, but it helped me a lot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back to ROS: If you want to get the coordinates in the world frame rather than the local camera frame, there are 2 things you need.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The location of the camera w.r.t. world frame&lt;/li&gt;&#xA;&lt;li&gt;The Point cloud data&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;You can then create a new frame transform object with no rotation offset from the camera (Unit quaternion with 0 rotations).&#xA;You can then take your camera frame and the newly computed frame and then extract the frame transform&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For clarity:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;World frame&lt;/li&gt;&#xA;&lt;li&gt;Camera frame&lt;/li&gt;&#xA;&lt;li&gt;Point frame&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Since I don't know what language you are using, I refer will refer you to these links regarding frame transforms.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;https://wiki.ros.org/tf&#xA;https://wiki.ros.org/tf/Overview/Transformations&#xA;https://docs.ros.org/kinetic/api/tf/html/c++/index.html&#xA;https://answers.ros.org/question/210572/what-is-a-frame/&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="23597" LastActivityDate="2019-08-15T14:08:58.057" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19293" PostTypeId="2" ParentId="19288" CreationDate="2019-08-15T14:13:50.457" Score="1" Body="&lt;p&gt;There is documentation on the website about this very robot.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;https://www.irobot.com/about-irobot/stem/create-2/projects&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I suggest you go to the bottom of the page and look at the Arduino and Raspi &lt;code&gt;pdf&lt;/code&gt; files that they provide. The Raspi documentation tells you how to command the robot. I think from there you can follow their instructions. I would provide more of an answer, but it seems the OP simply does not know where the docs are for their robot.&lt;/p&gt;&#xA;" OwnerUserId="23597" LastActivityDate="2019-08-15T14:13:50.457" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19294" PostTypeId="2" ParentId="19290" CreationDate="2019-08-15T14:26:05.720" Score="3" Body="&lt;p&gt;I get why you are confused.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking at the definition of &lt;code&gt;PointCloud2&lt;/code&gt;, you see that the field that holds the &quot;actual&quot; point cloud data is a 1-dimensional array. Now, you might think, wait: why aren't there 3 dimensions, one for X, Y, and Z? Well, this is why we have &lt;code&gt;PointCloud2&lt;/code&gt;: so we can have a single array in memory contain all the info we need, regardless of data associated with the point. The &lt;code&gt;offset&lt;/code&gt; is simply where the definition of that part of the first and next point starts in that honkin' huge array. This array not only contains XYZ data, but it also contains other data, like, as the documentation for the message says, &lt;code&gt;normals, intensity, etc.&lt;/code&gt;. The &lt;code&gt;PointField&lt;/code&gt; message simply tells ROS how the data is formatted (kind of like how you might add a message header to the data being sent through a socket, but that is outside the scope of the question).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suggest you read the overview on &lt;code&gt;pcl&lt;/code&gt; on the ROS &lt;a href=&quot;https://wiki.ros.org/pcl/Overview&quot; rel=&quot;nofollow noreferrer&quot;&gt;website&lt;/a&gt; as well as on &lt;a href=&quot;https://wiki.ros.org/pcl/Tutorials&quot; rel=&quot;nofollow noreferrer&quot;&gt;this link&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other questions specific to Velodyne I would not be able to answer since I don't know anything about your configuration.&lt;/p&gt;&#xA;" OwnerUserId="23597" LastActivityDate="2019-08-15T14:26:05.720" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19296" PostTypeId="1" AcceptedAnswerId="19301" CreationDate="2019-08-15T16:51:41.033" Score="2" ViewCount="46" Body="&lt;p&gt;I am currently working on ATmega328 timers. But it has maximum timer of only 16 bit. Even with a prescalar of 1024 and 16MHz clock, I can only produce a time interval of about 4 seconds. Although I can code ATmega 328 to get higher time intervals by some methods but I wish to have a 32 bit timer. &#xA;Is there any microcontroller from ATMEL(I find them easy to use) which has this capability at the same or lower price? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And what are some other timer options available for longer time durations(days or hours) ? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks! &lt;/p&gt;&#xA;" OwnerUserId="23593" LastActivityDate="2019-08-19T15:40:40.673" Title="Picking up a cheap timer" Tags="&lt;arduino&gt;&lt;microcontroller&gt;&lt;avr&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19297" PostTypeId="1" CreationDate="2019-08-15T23:45:48.897" Score="0" ViewCount="151" Body="&lt;p&gt;So I have the positions of all the joints (x,y,z) of a robot arm. I need to calculate the angles of the joints to feed them to another similar robot arm. I cannot get the angles from the robot I need to calculate them from the positions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's say:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;&lt;em&gt;J1: (x1,y1,z1)&lt;/em&gt;&lt;/strong&gt;-------------&lt;strong&gt;&lt;em&gt;J2: (x2,y2,z2)&lt;/em&gt;&lt;/strong&gt;----------------&lt;strong&gt;&lt;em&gt;End: (x3,y3,z3)&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;x is the depth towards the screen, z is vertical axis and y is horizontal axis &lt;/p&gt;&#xA;&#xA;&lt;p&gt;let's say J1 rotates around y1 and x1, and J2 rotates around x2 and z2&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My first instinct is, this is easy! I just need to calculate the angles between (x1,y1,z1) and (x2,y2,z2) to get the angles of J1, and between (x2,y2,z2) and (x3,y3,z3) to get the angles of J2. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For J1:&#xA;I use atan (x1/z1) to get the angle around y1 and atan (z1/y1) for the angle around x1. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For J2:&#xA;angle around x2 = atan (z2/y2).&#xA;angle around z2 = atan (y2/x2).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I know I'm wrong, because this didn't work. Also because if  this works, why would people use complex inverse kinematics solutions. The problem is, I have no idea why this is wrong. Can someone explain to me the mistakes in my method/understanding?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The refrence arm:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/H6SdN.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/H6SdN.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The controlled arm:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/HZJxN.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HZJxN.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I forgot to add joints labels from top to bottom (J1, J2, End)&#xA;I'm controlling the arm by rotating around the y-axis and around the x-axis of J1 for J1-J2 and around the z-axis and around the x-axis of J2 for J2-End.&lt;/p&gt;&#xA;" OwnerUserId="23632" LastEditorUserId="23632" LastEditDate="2019-08-20T08:35:51.763" LastActivityDate="2020-09-13T11:06:10.593" Title="Do I need to use Inverse Kinematics if I have the coordinates of all joints?" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;inverse-kinematics&gt;&lt;geometry&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19300" PostTypeId="2" ParentId="19297" CreationDate="2019-08-16T09:44:50.403" Score="2" Body="&lt;p&gt;People use complex inverse kinematics because they do not have the joint positions. In the case of an industrial robto, you know the you want the end effector at a certain position, and you calculate (or the robot's software) calculates what joint angles correspond for that position. (actually one of the ways of doing this is to calculate the xyz position of some joints and calculate angles from those coordinates)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since you already have the joint positions...your task is somewhat easier.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have the joint positions, you are right, you can use these coordinates the identify the angles. However, you need to take care what coordinates you are using.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your robot is at a root coordinate system (cs), usually different then the world cs. Angles are always expressed relatively between two local cs, and not in world cs. For example, two consecutive joints, which share a parallel axis of rotation are set top 90 degrees and -90 degrees. In worldCS the element after the second joint would have 0 degrees rotation, in the local CS it has -90 degrees. So you need to make sure that the coordinates you are using in your trigonometric equations are relative coordinates. Currently it seems that you are using world (absolute coordinates). I am not sure if the atan function is the right choice, if there is no drawing, I do not comment on trig. relations. So assuming that atan is the correct function to use, in relative coordinates, it would become:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;rot_x2 = atan ((z2-z1)/(y2-y1))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;also, I would advise to use atan2() instead of atan(). It handles all the finge cases atan does not. &#xA;and please note that rot_x2 in this case will become the angle between J1 and J2.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2019-08-19T11:45:23.593" LastActivityDate="2019-08-19T11:45:23.593" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19301" PostTypeId="2" ParentId="19296" CreationDate="2019-08-16T10:35:46.873" Score="2" Body="&lt;p&gt;Choosing a different controller is really unnecessary. Its absolutely common to implement long delays with 16 bit timers. The only thing you need to to is using a simple additional counter variable (software pre-scaler). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Timer/Counter2 allows Clocking from external 32kHz low frequency crystal (watch crystal). So a good option would be, to use such a crystal connected to pins TOSC1 and TOSC2 (or similar).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The clock source can then be configured to increment the before mentioned hardware timer asynchronously. By setting the correct prescaler, you can achieve a Interrupt interval of exactly 1s for example. So within the ISR, you can just increment your global second counter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Take a look at &lt;a href=&quot;http://ww1.microchip.com/downloads/en/Appnotes/Atmel-1259-Real-Time-Clock-RTC-Using-the-Asynchronous-Timer_AP-Note_AVR134.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;application note 1259&lt;/a&gt; and/or the datasheet section for Timer/Counter2.&lt;/p&gt;&#xA;" OwnerUserId="6882" LastActivityDate="2019-08-16T10:35:46.873" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19302" PostTypeId="1" AcceptedAnswerId="19303" CreationDate="2019-08-16T14:09:02.970" Score="1" ViewCount="29" Body="&lt;p&gt;The RoboClaw &lt;a href=&quot;http://downloads.basicmicro.com/docs/roboclaw_datasheet_2x60A.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;data sheet&lt;/a&gt; from &lt;a href=&quot;https://www.servocity.com/roboclaw-2x60a-motor-controller&quot; rel=&quot;nofollow noreferrer&quot;&gt;ServoCity&lt;/a&gt; mentions various current limits, but what about voltage? Can I run a 110 Vdc treadmill motor?&lt;/p&gt;&#xA;" OwnerUserId="23639" LastEditorUserId="23639" LastEditDate="2019-08-16T15:15:28.823" LastActivityDate="2019-08-16T19:21:53.067" Title="Max motor voltage for RoboClaw controller" Tags="&lt;control&gt;&lt;motor&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19303" PostTypeId="2" ParentId="19302" CreationDate="2019-08-16T19:21:53.067" Score="2" Body="&lt;p&gt;As mentioned on page 7 of the &lt;a href=&quot;http://downloads.ionmc.com/docs/roboclaw_datasheet_2x30A.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;datasheet&lt;/a&gt;, &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The main power input can be from 6VDC to 34VDC on a standard RoboClaw and 10.5VDC to 60VDC or 80VDC on an HV (High Voltage) RoboClaw.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="23640" LastActivityDate="2019-08-16T19:21:53.067" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19304" PostTypeId="2" ParentId="18823" CreationDate="2019-08-17T00:15:13.493" Score="1" Body="&lt;h1&gt;First thing's first&lt;/h1&gt;&#xA;&lt;p&gt;It is not &lt;code&gt;qtr&lt;/code&gt;, it is &lt;code&gt;rqt&lt;/code&gt;. I think you mean &lt;code&gt;rqt_graph&lt;/code&gt;. Basically, it shows all of the ROS nodes, topics, and publishing and subscribing going on. If you type &lt;code&gt;rqt&lt;/code&gt; and then press &lt;code&gt;TAB&lt;/code&gt;, you can see all the options. I suggest you google &lt;code&gt;rqt&lt;/code&gt; more.&lt;/p&gt;&#xA;&lt;h1&gt;Command line&lt;/h1&gt;&#xA;&lt;p&gt;Well, the first step is to make sure that all the ROS nodes are running.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;rosnode list&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Then I would look at the topics&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;rostopic list&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;You can then listen on the ROS topics using this command&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;rostopic echo /the_topic&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;You are looking for any missing or incorrect or unconnected ROS topics that need to be connected. That should get you going to start. I would make more recommendations, but this question is a bit broad for any more specific details.&lt;/p&gt;&#xA;&lt;p&gt;(If this answer helped you, a check mark is appreciated :)&lt;/p&gt;&#xA;" OwnerUserId="23597" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2019-08-19T23:52:51.857" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19305" PostTypeId="1" AcceptedAnswerId="20871" CreationDate="2019-08-17T02:26:47.720" Score="3" ViewCount="548" Body="&lt;p&gt;I am confused between 3D rigid affine(with scale, without shear) transformation and Lie group's sim(3) matrix. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;3D affine would be [sR|t; 0 1]. &#xA;we rotate, scale and then translate a 3D point using 3D affine transform&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;\begin{matrix}&#xA;s\cdot r_{11} &amp;amp; s\cdot r_{12} &amp;amp; s\cdot r_{13} &amp;amp; t_1\\&#xA;s\cdot r_{21} &amp;amp; s\cdot r_{22} &amp;amp; s\cdot r_{23} &amp;amp; t_2\\&#xA;s\cdot r_{31} &amp;amp; s\cdot r_{32} &amp;amp; s\cdot r_{33} &amp;amp; t_3\\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1&#xA;\end{matrix}&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;sim3, according to [1] is [R|t; 0 1/s]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;\begin{matrix}&#xA;r_{11} &amp;amp; r_{12} &amp;amp; r_{13} &amp;amp; t_1\\&#xA;r_{21} &amp;amp; r_{22} &amp;amp; r_{23} &amp;amp; t_2\\&#xA;r_{31} &amp;amp; r_{32} &amp;amp; r_{33} &amp;amp; t_3\\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; s^{-1}&#xA;\end{matrix}&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In loop closure context, for a candiate loop closure keyframe, we have  an old pose(SE3) and its calculated sim3. sim3 has a scale, rotation and translation part.  &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;what is this sim3 actually? How do I get the new pose (SE3) using sim3 ?&lt;/li&gt;&#xA;&lt;li&gt;How do I get the new set of 3D points visible on the old keyframe pose? &#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;em&gt;In ORB slam code, the authors find the new set of 3D points from old set by first finding camera coordinates of the 3D points (using old pose) and then multiplying it by the inverse of calculated sim3&lt;/em&gt; &lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;If sim3 is a matrix that maps the old points to new points, why don't we multiply the 3D points directly with sim3 matrix?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Reference:&#xA;[1] &lt;a href=&quot;http://ethaneade.com/lie_groups.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://ethaneade.com/lie_groups.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15192" LastActivityDate="2020-06-30T08:31:01.597" Title="In SLAM loop closure, What does a sim3 matrix do?" Tags="&lt;mobile-robot&gt;&lt;slam&gt;&lt;orientation&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19306" PostTypeId="1" CreationDate="2019-08-18T10:02:45.417" Score="2" ViewCount="126" Body="&lt;p&gt;The broad question is this; given an occupancy grid and the robots current pose (x,y,theta,theta'(first derivative)) how should I plan motion for my robot with the following constraints:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;shortest path between 2 points&lt;/li&gt;&#xA;&lt;li&gt;maintain a minimum distance to obstacles&lt;/li&gt;&#xA;&lt;li&gt;prefer to stay away from walls - use the center of open spaces&lt;/li&gt;&#xA;&lt;li&gt;prefer straight lines&lt;/li&gt;&#xA;&lt;li&gt;limit turn radius (&gt; X cm)&lt;/li&gt;&#xA;&lt;li&gt;limit maximum change in turn radius (steering angle must be continuous)&lt;/li&gt;&#xA;&lt;li&gt;limit maximum acceleration&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Here is how my current implementation works...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A* for the entire map (only once for a given target location)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;the following then loops 5 times a second&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Run A* on the local area (1 x 1 meter) overlaying the latest lidar scan and depth camera point cloud data for transient obstacles&lt;/li&gt;&#xA;&lt;li&gt;given the robots current location (x,y - taken from particle filter), use the A* plan to determine 2 waypoints at 30cm intervals from the current location.&lt;/li&gt;&#xA;&lt;li&gt;Use gradient descent to plan a path from the current pose (x,y,theta,theta') through the way points (with a bunch of constraints).&lt;/li&gt;&#xA;&lt;li&gt;Use the first step of the plan from gradient descent for the next action the robot takes.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The problem with this is the gradient descent step, I haven't yet implemented all of the constraints in my cost function and already for certain pose/waypoint combinations it can't solve.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can get a solve using simulated annealing but this is 100 times slower and can't possibly run 5 times a second.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've considered using A* taking into consideration the full pose (x,y,theta,theta') which would take it to 4 dimensions and considering the current 2 dimensional A* is just barely fast enough, that doesn't seem like a solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;so the actual question(s)...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;is there something other than GD(gradient descent)/SA(simulated annealing) that I should be using?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;have I gone about it all wrong - what is the right way?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="1819" LastEditorUserId="1819" LastEditDate="2019-08-18T11:24:18.583" LastActivityDate="2019-08-18T16:36:18.317" Title="Path Planning algorithm" Tags="&lt;motion-planning&gt;&lt;planning&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19307" PostTypeId="2" ParentId="19306" CreationDate="2019-08-18T16:30:58.080" Score="1" Body="&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;shortest path between 2 points&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;blockquote&gt;&#xA;    &lt;p&gt;This spec goes into the cost function design.&lt;/p&gt;&#xA;  &lt;/blockquote&gt;&#xA;&lt;/blockquote&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;maintain a minimum distance to obstacles &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;blockquote&gt;&#xA;    &lt;p&gt;Given 2D occupancy grid, threshold probability values to get occupied/free cell representation of the environment. Then, expand each obstacle cell by given minimum distance value. Once done, this spec goes into the cost function design. &lt;/p&gt;&#xA;  &lt;/blockquote&gt;&#xA;&lt;/blockquote&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;prefer to stay away from walls - use the center of open spaces &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;blockquote&gt;&#xA;    &lt;p&gt;Implement a distance to wall function that computes the minimum distance to the nearest wall for a given (x,y) cell. This distance to wall function can be pre-computed via dynamic programming before invoking the path planner. Once done, this spec goes into the cost function design.&lt;/p&gt;&#xA;  &lt;/blockquote&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;ol start=&quot;4&quot;&gt;&#xA;&lt;li&gt;&lt;p&gt;prefer straight lines&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;blockquote&gt;&#xA;    &lt;p&gt;This spec goes into the cost function design.&lt;/p&gt;&#xA;  &lt;/blockquote&gt;&#xA;&lt;/blockquote&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;limit turn radius (&gt; X cm) limit&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;blockquote&gt;&#xA;    &lt;p&gt;This spec goes into the motion model design.&lt;/p&gt;&#xA;  &lt;/blockquote&gt;&#xA;&lt;/blockquote&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;maximum change in turn radius (steering angle must be continuous)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;blockquote&gt;&#xA;    &lt;p&gt;This spec goes into the motion model design.&lt;/p&gt;&#xA;  &lt;/blockquote&gt;&#xA;&lt;/blockquote&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;limit maximum acceleration&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;blockquote&gt;&#xA;    &lt;p&gt;This spec goes into the motion model design. Do you mean linear or angular acceleration?&lt;/p&gt;&#xA;  &lt;/blockquote&gt;&#xA;&lt;/blockquote&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;A vehicle motion model can be chosen as follows: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;dx_dt = v*cos(\theta);&lt;/p&gt;&#xA;&#xA;&lt;p&gt;dy_dt = v*sin(\theta);&lt;/p&gt;&#xA;&#xA;&lt;p&gt;d\theta_dt = v*\kappa;    &lt;/p&gt;&#xA;&#xA;&lt;p&gt;d\kappa_dt = \alpha;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;dv_dt = a;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;State X := (x, y, \theta, \kappa, v)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(x,y)  : position [m], x_min &amp;lt;= x &amp;lt;= x_max, y_min &amp;lt;= y &amp;lt;= y_max&lt;/p&gt;&#xA;&#xA;&lt;p&gt;\theta : heading [rad], -pi &amp;lt;= \theta &amp;lt;= pi&lt;/p&gt;&#xA;&#xA;&lt;p&gt;\kappa : curvature [m^-1], \kappa_min &amp;lt;= \kappa &amp;lt;= \kappa_max&lt;/p&gt;&#xA;&#xA;&lt;p&gt;v : linear speed in [m/s], v_min &amp;lt;= v &amp;lt;= v_max&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Control U := (\alpha, a) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;\alpha : curvature rate [(m*s)^-1], \alpha_min &amp;lt;= \alpha &amp;lt;= \alpha_max&lt;/p&gt;&#xA;&#xA;&lt;p&gt;a : linear acceleration [m/s^2], a_min &amp;lt;= a &amp;lt;= a_max&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can implement a graph search algorithm on discretized 5D (x, y, \theta, \kappa, v) state space and 2D control space (\alpha, a).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your cost function can have the following inputs:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;current state: x_cur, y_cur, \theta_cur, v_cur, \kappa_cur&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;next state: x_next, y_next, \theta_next, v_next, \kappa_next&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;current control action: \alpha_cur, a_cur&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;spec 1 (minimizing path length): &#xA;  cost_1 := norm (x_next - x_cur, y_next - y_cur);&lt;/p&gt;&#xA;&#xA;&lt;p&gt;spec 2 (maintaining a minimum distance to obstacles):&#xA;  cost_2 := 'inf' (x_cur, y_cur) on an obstacle in the expanded environment, 0 otherwise;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;spec 3 (distance to nearest wall): &#xA;  cost_3 := dist2wall(x_cur, y_cur);&lt;/p&gt;&#xA;&#xA;&lt;p&gt;spec 4 (preferring straight lines): &#xA;   cost_4 = abs(\kappa_cur); &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You need to blend these cost terms in your cost function by using some coefficients.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In summary, in order to solve your motion planning problem in a principled way with some optimality guarantees, the steps of your algorithm should be&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Expand the obstacles by the minimum distance value&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Compute dist2wall values for 2D environment&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Run the graph search algorithm on discretized 5D state, 2D control space&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The bad news is that searching on 5D space is not practical! &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A good roboticist should use a multi-step approach for practical applications. That is, we can first solve the motion planning model using a low-order motion model with state X = (x,y,\theta) and control U =(\kappa) to ensure minimum turn radius constraint (bounded curvature).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;dx_ds = cos(\theta);&lt;/p&gt;&#xA;&#xA;&lt;p&gt;dy_ds = sin(\theta);&lt;/p&gt;&#xA;&#xA;&lt;p&gt;d\theta_ds = \kappa;    &lt;/p&gt;&#xA;&#xA;&lt;p&gt;State X := (x, y, \theta)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Control U := (\kappa) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here the derivatives are defined wrt the arclength parameter s not time! Using this low order motion model requires searching only in 3D state space which can be done quickly a graph search algorithm. Once the graph search algorithm computes a geometric path by using the low order motion model, we can smooth out curvature and speed profile by considering curvature rate and acceleration constraints. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The catch is that we cannot guarantee feasibility guarantee anymore. Bad news from a theoretical point! That is, the motion planning problem has a solution per se; and we can compute the optimal solution if we search in 5D state space. However, in the 2-step approach, the initial geometric path may be too close to obstacles; and it cannot be smoothed out to generate a path wrt the given curvature rate and acceleration constraint. To remedy this drawback, in practice, we usually relax the path length cost term little bit, so that the initial path can be computed far from obstacles. Then, the post smoothing method usually works well once the initial path has enough clearance from obstacles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another practical advice, for the search algorithm, keep it simple, stupid (KISS)! Try the Dijkstra algorithm first, if it can get the job done, implement the Dijkstra algorithm. Always keep track the invariant properties of the search algorithm implementation for detecting bugs. When implementing a path planner, most of the time is spent on the cost function design, developing a good low-order motion model, and field tests. Just don't waste your time in implementing a complicated search algorithm from papers. A good path planner is the one that you can easily interpret its output by using your intuition.&lt;/p&gt;&#xA;" OwnerUserId="23646" LastEditorUserId="23646" LastEditDate="2019-08-18T16:36:18.317" LastActivityDate="2019-08-18T16:36:18.317" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19308" PostTypeId="1" CreationDate="2019-08-18T19:34:52.457" Score="1" ViewCount="51" Body="&lt;p&gt;I have one question about point to point movement.&lt;br&gt;&#xA;Let's say the end-effector is placed at &lt;span class=&quot;math-container&quot;&gt;$(0,0,0)$&lt;/span&gt; and the goal position is at &lt;span class=&quot;math-container&quot;&gt;$(10,0,10)$&lt;/span&gt;. The corresponding joint angle value changes &lt;span class=&quot;math-container&quot;&gt;$d\theta$&lt;/span&gt; can be computed using an inverse kinematic solver as follows:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$d\theta=J^{-1}*(10,0,10)$&lt;/span&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this case, the computed joint angle value changes will make the robot jump from &lt;span class=&quot;math-container&quot;&gt;$(0,0,0)$&lt;/span&gt; to &lt;span class=&quot;math-container&quot;&gt;$(10,0,10)$&lt;/span&gt;. I tried to prevent this jumping motion by dividing the goal position into &lt;span class=&quot;math-container&quot;&gt;$(1,0,1)$&lt;/span&gt; so that the robot can slowly move towards the goal. Will there be other effective methods?&lt;/p&gt;&#xA;" OwnerUserId="21382" LastEditorUserId="21531" LastEditDate="2019-08-19T13:16:25.857" LastActivityDate="2019-08-19T13:16:25.857" Title="Jumping motion in point to point movement" Tags="&lt;inverse-kinematics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19309" PostTypeId="2" ParentId="19308" CreationDate="2019-08-19T03:53:55.770" Score="1" Body="&lt;p&gt;Do you require the end-effector to hit all the via points &lt;span class=&quot;math-container&quot;&gt;$(1,0,1),(2,0,2),...(9,0,9)$&lt;/span&gt;? Or do you simply want a lower speed as your end-effector swings towards its destination (with no regard for the path traced out by the end-effector)? If it's the latter, you could set an upper limit to the velocity in your motion planner.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to hit all the via points &lt;strong&gt;and&lt;/strong&gt; have a smooth continuous motion, make sure the velocities obtained from the &lt;a href=&quot;http://ttuadvancedrobotics.wikidot.com/trajectory-planning-for-point-to-point-motion#toc4&quot; rel=&quot;nofollow noreferrer&quot;&gt;polynomial trajectories&lt;/a&gt; at those points are non-zero.&lt;/p&gt;&#xA;" OwnerUserId="21531" LastActivityDate="2019-08-19T03:53:55.770" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19310" PostTypeId="2" ParentId="19296" CreationDate="2019-08-19T15:40:40.673" Score="0" Body="&lt;p&gt;the following example of AVR assembly should cause you LED to blink on and off every 12 hours @ 16 MHz. Physical pin 11 for the ATMEGA328P is where the blinking occurs. You can change this by altering the location of the bit on the 7th to last line. For 8MHz clocks, divide YH and YL by 2.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;jmp init&#xA;&#xA;.org 0x001A&#xA;call timerHandle&#xA;reti&#xA;&#xA;.org 0x0034&#xA;init:&#xA;ldi r16,0b11111111&#xA;out DDRD,r16&#xA;;load the swap value (0x283C or 10300 timer overflows)&#xA;ldi YH,0x28&#xA;ldi YL,0x3C&#xA;;Enable interrupts for the timer.&#xA;ldi r16,0b00000001&#xA;out TIMSK1,r16&#xA;;set the prescaler to 1024&#xA;ldi r16,0b00000101&#xA;out TCCR1B,r16&#xA;&#xA;&#xA;;loops, making sure that interrupts are enabled.&#xA;loop:&#xA;sei&#xA;rjmp loop&#xA;&#xA;timerHandle:&#xA;;add 1 to the word.&#xA;adiw ZH:ZL,1&#xA;;Compare the 16-bit registers, Executing Bottom Match if they're equal.&#xA;CP ZH,YH&#xA;BREQ topMatch&#xA;ret&#xA;topMatch:&#xA;cp ZL,YL&#xA;BREQ bottomMatch&#xA;ret&#xA;bottomMatch:&#xA;;Flip PIND7&#xA;in r17,PIND&#xA;ldi r16, 0b10000000&#xA;eor r17,r16&#xA;out PIND,r17&#xA;;Reset the counter.&#xA;clr ZH&#xA;clr ZL&#xA;ret&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="17194" LastActivityDate="2019-08-19T15:40:40.673" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19311" PostTypeId="1" CreationDate="2019-08-19T16:18:25.023" Score="1" ViewCount="189" Body="&lt;p&gt;We have an allegro hand in our robot, and it is in actuated behavior. In other words, each joint is controlled one or more than one actuator, that is motor. There are 3 actuators for each finger, since each finger has 3 joints. Since there are 4 fingers in allegro hand, it has totally 12 actuators. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, we want to control the hand in under-actuated manner. Namely, movement of each finger must be controlled by only one actuator, not three actuators. To accomplish this, we think that we can parametrize other 2 actuators of a finger based on first actuator of the finger:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;f&lt;span class=&quot;math-container&quot;&gt;$_1(\theta) = \theta \rightarrow joint \,\, 1$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;f&lt;span class=&quot;math-container&quot;&gt;$_2(\theta) = 0.43\theta \rightarrow joint \,\, 2$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;f&lt;span class=&quot;math-container&quot;&gt;$_3(\theta) = 0.25\theta \rightarrow joint \,\, 3$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The angle &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt; is total rotation of first joint. Rotation of second and third joint will be parameterized based on rotation of first joint. I aim to generate such a under-actuated system. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;How can I do that ?&lt;/code&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;How can I determine these 3 functions and their coefficients like 0.43 and 0.25 ?&lt;/code&gt;&lt;/p&gt;&#xA;" OwnerUserId="22284" LastActivityDate="2021-05-12T14:06:40.710" Title="Controlling Actuated Robot Hand in Underactuated Manner" Tags="&lt;robotic-arm&gt;&lt;mechanism&gt;&lt;actuator&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19312" PostTypeId="1" CreationDate="2019-08-19T17:32:27.950" Score="2" ViewCount="83" Body="&lt;p&gt;Let us assume we have a two 2-DoF robot. Both axes rotate around x. &#xA;And the goal is to measure the joint angle values with the roll value from IMUs attached on each link.&lt;br&gt;&#xA;However, the problem is that the roll value of the second IMU also increases whenever the first axis rotates.    &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Am I missing here something?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/W7VlN.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/W7VlN.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Above you can see the two links. The yellow points are the center of gravity points where the mpu-6050 is placed on. So whenever the first axis rotates, the second roll is changing...I am not using any fancy algorithm to measure the roll, just the standard MPU6050_DMP6. &lt;/p&gt;&#xA;" OwnerUserId="21382" LastEditorUserId="21382" LastEditDate="2019-08-19T18:08:51.920" LastActivityDate="2019-08-20T15:47:09.803" Title="IMU based joint angle measurement" Tags="&lt;imu&gt;&lt;joint&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="19313" PostTypeId="2" ParentId="18463" CreationDate="2019-08-19T20:34:05.863" Score="2" Body="&lt;p&gt;You should use a Kalman Filter. Here are two nice tutorials that explain how Kalman Filter algorithm works and the working principle of IMU/GPS sensors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;short: &lt;a href=&quot;https://www.navlab.net/Publications/Introduction_to_Inertial_Navigation.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.navlab.net/Publications/Introduction_to_Inertial_Navigation.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;extended: &lt;a href=&quot;https://www.navlab.net/Publications/Introduction_to_Inertial_Navigation_and_Kalman_Filtering.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.navlab.net/Publications/Introduction_to_Inertial_Navigation_and_Kalman_Filtering.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;vectors, coordinate systems: &lt;a href=&quot;https://www.navlab.net/nvector/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.navlab.net/nvector/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In summary, the Kalman Filter works in two steps:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) prediction: &#xA;   - uses IMU measurements&#xA;   - propagates the belief (mean, covariance) based on the motion model&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) update step&#xA;   - uses GPS measurements&#xA;   - fuses the predicted belief and measurements to get a better estimate&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Kalman Filter algorithm implementation is very straightforward. There are hundreds of papers about how to code the filtering algorithm. The challenging parts are&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;modeling the sensors (error characteristics)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;for IMU, you need to come up with drift, bias, random noise terms &lt;/p&gt;&#xA;&#xA;&lt;p&gt;for GPS, you need to come up with confidence intervals for global coordinate measurements (&lt;a href=&quot;https://www.mathworks.com/help/fusion/gs/model-imu-gps-and-insgps.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.mathworks.com/help/fusion/gs/model-imu-gps-and-insgps.html&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;understanding when the estimates are not consistent&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;modeling the motion of your vehicle (motion model)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;modeling the relation between measurements and the state of the system (measurement model)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="23646" LastActivityDate="2019-08-19T20:34:05.863" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19314" PostTypeId="2" ParentId="19312" CreationDate="2019-08-20T15:47:09.803" Score="1" Body="&lt;p&gt;&quot;roll value of the second IMU also increases whenever the first axis rotates&quot; — yep, that's how it always is. For the second joint, obtain the difference in the roll angles from both the IMUs. You're looking for the roll angle of IMU2 &lt;em&gt;relative&lt;/em&gt; to roll angle of IMU1.&lt;/p&gt;&#xA;" OwnerUserId="21531" LastActivityDate="2019-08-20T15:47:09.803" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19315" PostTypeId="1" CreationDate="2019-08-20T16:11:55.500" Score="0" ViewCount="141" Body="&lt;p&gt;i am confused about SLAM implementation, and i need your advise to organize my mind.&#xA;Fist let me say that i have to generate 2D map, what is in this case the SLAM input? is it like (x1,y1),(x2,y2)...(xn,yn)?&#xA;Second, if we have to generate 3D map, what is the real input of slam, Does it is (x1,y1,z1)..?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many SLAM implementations use LIDAR, and i have to know the data form that it provides, but really i have no LIDAR, i have to use ultrasonic sensors to map environment, how much does this speak seem logical ?&#xA;If  we generate a 3d surrounding points from specific ultrasonic sensors configuration, does these 3d points enough to build 3D map?&lt;/p&gt;&#xA;" OwnerUserId="23121" LastActivityDate="2021-05-20T18:05:25.383" Title="what is ultrasonic based slam" Tags="&lt;slam&gt;&lt;computer-vision&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19316" PostTypeId="1" CreationDate="2019-08-20T18:23:02.557" Score="0" ViewCount="82" Body="&lt;p&gt;How does sensor fusion affect the SLAM process? If we have a stereo camera with GPS and IMU, how does sensor fusion benefit the SLAM?&#xA;Do we use sensor fusion to enhance the localization phase of SLAM, and then the map generation becomes more accurate?&lt;/p&gt;&#xA;" OwnerUserId="23121" LastEditorUserId="19515" LastEditDate="2020-07-27T18:28:16.967" LastActivityDate="2020-07-27T18:28:16.967" Title="How does sensor fusion related to SLAM?" Tags="&lt;slam&gt;&lt;sensor-fusion&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19317" PostTypeId="1" CreationDate="2019-08-20T22:49:48.763" Score="0" ViewCount="101" Body="&lt;p&gt;My understanding is that the Roomba has a sophisticated room mapping capability. Does the create 2 include that capability and is it usable by the hobbyist?&lt;/p&gt;&#xA;" OwnerUserId="23659" LastEditorUserId="110" LastEditDate="2019-08-21T20:28:38.067" LastActivityDate="2019-09-20T21:02:00.233" Title="Does the Create 2 have the roomba room mapping software?" Tags="&lt;irobot-create&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19319" PostTypeId="1" AcceptedAnswerId="19322" CreationDate="2019-08-21T06:59:23.077" Score="5" ViewCount="1296" Body="&lt;p&gt;I have heard of both the terms AI (artificial intelligence) based robots and control based robots.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Although they are both different fields, what is the difference between AI and control in regards to application (since both are doing same task of automation)?&lt;/p&gt;&#xA;" OwnerUserId="23585" LastEditorUserId="23597" LastEditDate="2019-08-22T14:23:04.467" LastActivityDate="2021-01-22T15:49:46.097" Title="Control VS artificial intelligence?" Tags="&lt;control&gt;&lt;artificial-intelligence&gt;" AnswerCount="3" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19320" PostTypeId="2" ParentId="18592" CreationDate="2019-08-21T10:46:45.760" Score="4" Body="&lt;p&gt;A Kalman Filter (&lt;em&gt;estimator&lt;/em&gt; is actually more apt than &lt;em&gt;filter&lt;/em&gt;) simply estimates &lt;strong&gt;states&lt;/strong&gt;, that's all it does. It, by itself, cannot drive a plant towards a desired output. The estimated states are used to determine how far off the plant is from the desired state. Controls are implemented &lt;em&gt;after&lt;/em&gt; KF has already been used to obtain the current state.&lt;/p&gt;&#xA;&lt;p&gt;Referring to the block diagram, the KF block will be placed in the feedback path from the output &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt;. Assuming the plant's output is observed by at least one sensor, the KF uses the plant's own model (&lt;em&gt;prediction update&lt;/em&gt;) along with the sensor readings (&lt;em&gt;measurement update&lt;/em&gt;) to &lt;strong&gt;estimate&lt;/strong&gt; the current state of the plant. All sensors are noisy and the plant's model will not be perfect, so how good the estimates are will be determined by how well sensor noise and the plant has been modeled.&lt;/p&gt;&#xA;&lt;p&gt;The state estimate produced by the KF is compared with the setpoint &lt;span class=&quot;math-container&quot;&gt;$r$&lt;/span&gt; to obtain the error. Up until this point, no control action has taken place, the plant's current state has merely been &lt;em&gt;observed&lt;/em&gt;. The control kicks in after you've determined the error. So the Kalman Filter is not really a control system.&lt;/p&gt;&#xA;" OwnerUserId="21531" LastEditorUserId="21531" LastEditDate="2021-02-10T04:12:17.547" LastActivityDate="2021-02-10T04:12:17.547" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19321" PostTypeId="2" ParentId="19311" CreationDate="2019-08-21T11:59:51.690" Score="0" Body="&lt;p&gt;I don’t think underactuated is the proper term.  You are trying to control multiple actuators with a single DOF.   That is redundancy resolution.   I have used the Simplex Method to compute stable grasps for redundant finger devices - that method resolved the redundancy in a least-norm sense.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are hundreds of research papers, going back to at least the 1980s (probably earlier) that discuss relative finger joint angles for different grasp types.  For example, many papers describe human-preferred joint ratios for hands accomplishing “cylindrical grasps” of various sized cylinders.  Others provide the same information for fingertip grasps, in which the normal vector from the surface of the fingertip is normal to the surface of the object.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can search for keywords such as “grasp joint angle ratio finger” to find specific papers that postulate these ratios. &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2019-08-21T11:59:51.690" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19322" PostTypeId="2" ParentId="19319" CreationDate="2019-08-21T19:52:43.633" Score="11" Body="&lt;p&gt;In robotics, it all boils down to making the hardware(in essence, the actuator) perform the desired action. The basics of control systems tell us that the transfer function decides the relationship between the output and the input given the plant, i.e. system reacts to the latter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While purely control-based robots use the system model to define their input-output relations, AI-based robots may or may not use the system model and rather manipulate the robot based on the experience they have with the system while training or possibly enhance it in real-time as well. Eventually, &lt;strong&gt;both of them can do the same task&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The difference in terms of applicability is the deterministic behavior of pure conventional control techniques. AI robots have a certain element of stochastic behavior given that they have learned things and learnings can be poor based on a lot of intrinsic and extrinsic factors&lt;/strong&gt;. AI methods are converging towards high probabilistic success, but not quite there for critical applications.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, AI has scope for more inclusiveness of other perception and hardware layers than conventional control that needs everything to be hand-crafted. &lt;/p&gt;&#xA;" OwnerUserId="18572" LastActivityDate="2019-08-21T19:52:43.633" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19323" PostTypeId="2" ParentId="19317" CreationDate="2019-08-21T20:28:09.877" Score="1" Body="&lt;p&gt;No, Create2 does not have room mapping capabilities.  The Create2 is based on the Roomba 600 series chassis.  Only the Roomba s series, i series, and 900 series robots have mapping capabilities.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Disclaimer: I am an iRobot employee, but the postings on this site are my own and don't necessarily represent iRobot's positions, strategies, or opinions.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2019-08-21T20:28:09.877" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19324" PostTypeId="1" CreationDate="2019-08-22T10:32:21.227" Score="0" ViewCount="70" Body="&lt;p&gt;I tried reading and searching different books and links for understanding PID control but not much progress&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can some one please give me simple explanation of PID control?or atleast links where easy content is available which is simple to understand&lt;/p&gt;&#xA;" OwnerUserId="23585" LastActivityDate="2019-08-23T05:57:38.813" Title="Simple explanation of PID control" Tags="&lt;control&gt;" AnswerCount="3" CommentCount="1" FavoriteCount="1" ClosedDate="2019-08-27T09:51:39.407" ContentLicense="CC BY-SA 4.0" />
  <row Id="19325" PostTypeId="2" ParentId="19324" CreationDate="2019-08-22T11:36:33.747" Score="-2" Body="&lt;p&gt;Before we can introduce PID control, a more easier to implement controller has to be mentioned first, which is bang-bang control. It contains of an if-then-statement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Such a controller, is able to move the robot on a line. The disadvantage is, that the robot's actions are not smooth, but the device will steer a bit chaotic. The more elegant approach is pid control, which isn't only steers left vs. right, but measures the amount. The deviation of the angle is set into relationship to the steering command. For example, if the angle error is only -2 degree, then the steering is small. This results into a more affordable trajectory.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;def bangbang(current,goal):&#xA;  if current==goal: steer=0&#xA;  elif current&amp;lt;goal: steer=1&#xA;  elif current&amp;gt;goal: steer=-1&#xA;  return steer&#xA;def pid(current,goal):&#xA;  error=goal-current&#xA;  steer=0.5*error&#xA;  return steer&#xA;&#xA;# main&#xA;goal=0&#xA;print(&quot;currentangle,goalangle,bangbang,pid&quot;)&#xA;for i in range(-5,6):&#xA;  a=bangbang(i,goal)&#xA;  b=pid(i,goal)&#xA;  print(i,goal,a,b)&#xA;&#xA;&quot;&quot;&quot; output:&#xA;currentangle,goalangle,bangbang,pid&#xA;-5 0  1  2.5&#xA;-4 0  1  2.0&#xA;-3 0  1  1.5&#xA;-2 0  1  1.0&#xA;-1 0  1  0.5&#xA; 0 0  0  0.0&#xA; 1 0 -1 -0.5&#xA; 2 0 -1 -1.0&#xA; 3 0 -1 -1.5&#xA; 4 0 -1 -2.0&#xA; 5 0 -1 -2.5&#xA;&quot;&quot;&quot;  &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="14283" LastEditorUserId="14283" LastEditDate="2019-08-22T17:35:03.440" LastActivityDate="2019-08-22T17:35:03.440" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19326" PostTypeId="1" CreationDate="2019-08-22T17:26:04.963" Score="0" ViewCount="25" Body="&lt;p&gt;I want to build a system for positioning objects. It should be driven by a DC motor and a sensor should control the rotation angle. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the positioning I want to design (calculation) the accuracy. How it can be done and what parameter should be consider?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What minimal angle or number of rotations can be done with a DC motor?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to rotate the DC motor with a minimal angle of 400°. Can it be done or have DC motors minimal rotation angle to make start and stop motion? I do not know what which characteristics should be accounted for.&lt;/p&gt;&#xA;" OwnerUserId="23670" LastEditorUserId="9176" LastEditDate="2019-08-23T06:19:50.540" LastActivityDate="2019-08-23T06:19:50.540" Title="How to get the accurancy of the position system?" Tags="&lt;motor&gt;&lt;precise-positioning&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19327" PostTypeId="1" AcceptedAnswerId="19329" CreationDate="2019-08-22T20:06:53.273" Score="0" ViewCount="29" Body="&lt;p&gt;If you have a distributed system of DC motors, sensors and microcontrollers, is power usually distributed over a single high volt bus, using DC converters where needed?  Or is it typical to implement separate power buses for each device class?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maximum cable length from battery to device is about 1 meter, 12&amp;nbsp;V, 5&amp;nbsp;V and 3.3&amp;nbsp;V will be needed depending on the device.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What's used in practice, like in industrial equipment or large robot arms?&lt;/p&gt;&#xA;" OwnerUserId="152" LastEditorUserId="9176" LastEditDate="2019-08-23T06:18:04.863" LastActivityDate="2019-08-24T22:58:35.723" Title="How to configure a DC power distribution bus" Tags="&lt;power&gt;&lt;distributed-systems&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19328" PostTypeId="2" ParentId="19324" CreationDate="2019-08-22T22:27:22.040" Score="2" Body="&lt;p&gt;The farther away the actuator is from the goal, the harder the actuator tries to reach the goal. That is the (P)roprtional part of PID.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The longer amount of time the actuator is blocked from the goal, usually by larger than expected friction rather than actual object blocking the path, the harder the actuator tries to reach the goal. That is the (I)ntegral part of PID.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The faster the actuator is moving towards the goal, the more likely it is that it will overshoot and go too far, so the faster it goes toward the goal, the more it resists and tries to slow down. That is the (D)erivative part of PID.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2019-08-22T22:27:22.040" CommentCount="0" CommunityOwnedDate="2019-08-22T22:27:22.040" ContentLicense="CC BY-SA 4.0" />
  <row Id="19329" PostTypeId="2" ParentId="19327" CreationDate="2019-08-22T22:48:37.307" Score="0" Body="&lt;p&gt;Electrical cables and connectors are a very common failure point in distributed electro-mechanical systems. So minimizing the number of wires and connectors is often a priority. In which case a single high voltage line distributes power to all the nodes and each one converts it down to the voltages it needs locally. Switched DC-DC converters are so common and cheap now that the cost reasons for having separate central supplies for each voltage level are no longer valid.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, motors add noise to the power supply system and, depending on machine design, can also add a large amount of power draw (voltage*amperage) to the power supply. You will need to address these issues if you use a single bus. Motor capacitors and regenerative voltage shunt circuits are your friend for this. Also a clean wiring design that minimizes RF and inductive noise.&lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="23597" LastEditDate="2019-08-24T22:58:35.723" LastActivityDate="2019-08-24T22:58:35.723" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19330" PostTypeId="2" ParentId="19326" CreationDate="2019-08-22T23:03:16.687" Score="1" Body="&lt;p&gt;The amount of rotation that the motor is capable of depends on the physical design of the motor. Usually the motor is combined with a transmission (eg gears) of some kind which also influence how far the combination (called an Actuator) can move.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many motors, and many actuators, can rotate infinitely, without limit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The minimal angle that one can reliably get an actuator to do is also dependent on the physical design. Again, there is not really a limit to how small one can go, but other physics start to become problems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The calculations depend on the physical structure chosen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To get better help, edit your question above to tell us:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;The mass and volume of the objects to be positioned. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The desired precision and maximum in positioning (linear or angular) &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The amount of money you can spend to create the solution.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;This should be enough info for people to suggest an approach.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2019-08-22T23:03:16.687" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19331" PostTypeId="2" ParentId="19324" CreationDate="2019-08-23T05:57:38.813" Score="1" Body="&lt;p&gt;You can see how PID works for controlling the motion of a car in this video:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=4Y7zG48uHRo&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=4Y7zG48uHRo&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In simple words, PID control law computes the error function (e(t) = r(t) - y(t)) where r(t), y(t) are the reference signal and output signal of the system being controlled. At any given time, 3 terms are computed, namely the current, history and future value of error function.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Current: P term penalizes the current error value: Kp*e(t)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;History: I term penalizes the integral of the error values: Ki*sum (e(t))&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Future: D term penalizes the derivative of the current error value: Kd*d e(t)/dt&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Control law is given as u(t) = Kp&lt;em&gt;e(t) + Ki&lt;/em&gt;sum[e(t)] + Kd* d e(t)/dt&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can find more details in Karl Astrom's book: &lt;a href=&quot;https://www.cds.caltech.edu/~murray/courses/cds101/fa02/caltech/astrom-ch6.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.cds.caltech.edu/~murray/courses/cds101/fa02/caltech/astrom-ch6.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="23646" LastActivityDate="2019-08-23T05:57:38.813" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19332" PostTypeId="2" ParentId="19319" CreationDate="2019-08-23T06:21:08.500" Score="7" Body="&lt;p&gt;I think, it is easier to explain these areas in terms of guidance, navigation and control layers for an autonomous robot. Let's stay an autonomous robot is commanded to reach a desired goal position from where it is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Guidance (what to do):&lt;/strong&gt; this layers computes a motion plan (a sequence of positions) that starts from the current position of the robot and reaches the desired goal position. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Navigation (where am I):&lt;/strong&gt; this layer computes an estimate of the robot's state (x,y, heading, speed, etc). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Control (how to do):&lt;/strong&gt; this layer computes the actuation commands in order to follow the generated path (computed by the guidance layer) based on the estimated state (computed by the navigation layer).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Arguably, AI is heavily used at the guidance layer whereas classical control algorithms (such as LQR, PID) are used in the control layer. Each layer works at different frequency! Again, arguably, engineers tend to use simpler algorithms at the lower layers since they need to execute at higher rates. Also, it is easier to prove closed-loop system stability and performance for simpler control algorithms. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Guidance layer:&lt;/strong&gt; graph-search algorithms, A*, Dijkstra, MDPs (more AI is used here)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Navigation layer:&lt;/strong&gt; filtering algorithms, Kalman Filter, EKF, Unscented KF, particle filter, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Control layer:&lt;/strong&gt; linear control algorithms (PID, LQR), optimal control (MPC), adaptive control (more classical control theory is used here)&lt;/p&gt;&#xA;" OwnerUserId="23646" LastEditorUserId="23646" LastEditDate="2019-08-26T05:43:49.143" LastActivityDate="2019-08-26T05:43:49.143" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="19333" PostTypeId="1" AcceptedAnswerId="19366" CreationDate="2019-08-23T06:30:19.123" Score="2" ViewCount="149" Body="&lt;p&gt;I've been reading about ORB-SLAM and ORB-SLAM2, but I can't quite figure out how pose estimation is done. I see that it uses a bag-of-word method for loop detection, but how are current features matched against the features of the map? As the map is 3D, a sought change in position can cause different perspectives. Bag-of-word can't really address the problem of perspectives, right? &lt;/p&gt;&#xA;" OwnerUserId="11489" LastActivityDate="2019-08-27T07:22:22.990" Title="ORB-SLAM pose estimation" Tags="&lt;slam&gt;&lt;computer-vision&gt;&lt;navigation&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19335" PostTypeId="1" AcceptedAnswerId="19421" CreationDate="2019-08-23T08:49:32.590" Score="0" ViewCount="215" Body="&lt;p&gt;Most kinematics libraries/packages use the conventional transformation matrices (DH parameters). However, I'm looking for something that uses Screw Theory principles to set up the Product of Exponentials formula.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For eg., the KDL library from Orocos uses homogeneous transformation matrices, quaternions, Euler angles, etc. under the hood. But are there libraries that make use of twists and exponentials to derive the kinematics?&lt;/p&gt;&#xA;" OwnerUserId="21531" LastEditorUserId="110" LastEditDate="2021-01-23T20:18:43.240" LastActivityDate="2021-01-23T20:18:43.240" Title="Libraries to calculate kinematics using Screw Theory" Tags="&lt;kinematics&gt;&lt;product-of-exponentials&gt;&lt;screw-theory&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19336" PostTypeId="1" AcceptedAnswerId="19350" CreationDate="2019-08-23T10:22:41.097" Score="2" ViewCount="94" Body="&lt;p&gt;I am starting in robotics, and reading about Markov Localization, I have one doubt, probably very stupid, but, well, I want to solve it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's take the CMU Website example: &lt;a href=&quot;https://www.cs.cmu.edu/afs/cs/project/jair/pub/volume11/fox99a-html/node3.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.cs.cmu.edu/afs/cs/project/jair/pub/volume11/fox99a-html/node3.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically and very summarized:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The robot does not know its location (uniform probability of being&#xA;at any point), but knows there are 3 doors.&lt;/li&gt;&#xA;&lt;li&gt;It senses a door, and since that door could be any one out of the 3, the belief distribution spikes at those 3 doors.&lt;/li&gt;&#xA;&lt;li&gt;It moves to the right, and the belief distribution shifts to the right also, let's say &quot;following the robot movement&quot;, and then the convolution is done when finding the 2nd door... This gets described in the next graphic, from the CMU:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/JvoBL.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JvoBL.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But &lt;strong&gt;why does the belief distribution get shifted to the right&lt;/strong&gt;, and not to the left, as the door is left behind?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Shouldn't the robot sense that there's no door between door 1 and 2 (starting from the left)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there something about probability theory I've forgotten (I studied it like 14 years ago)?&lt;/p&gt;&#xA;" OwnerUserId="22338" LastEditorUserId="21531" LastEditDate="2019-08-23T12:28:15.503" LastActivityDate="2021-05-15T23:09:49.793" Title="Basic question about Markov Localization, probability and belief distribution shift" Tags="&lt;localization&gt;&lt;movement&gt;&lt;probability&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19337" PostTypeId="2" ParentId="19336" CreationDate="2019-08-23T10:57:49.853" Score="2" Body="&lt;p&gt;I think this is just a way of illustrating the main idea behind the probability distribution and the representation is not complete. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The idea is that there is a moment when the door is detected and the prior distribution not yet considered, this is when the robot assumes this could also be door 1 and therefore the positions of the other doors are as shown. There can be 3 similar images drawn, where the robot assumes standing in front of door 2 or door 3, but when the prior information is mixed in, only door 2 seems plausible. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am just guessing, I did not read the book.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2019-08-23T10:57:49.853" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19338" PostTypeId="2" ParentId="19319" CreationDate="2019-08-23T11:16:27.007" Score="2" Body="&lt;p&gt;In a control engineering sense AI (or in this case learning based approaches) and classical control based approaches are just different sides of the same coin. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In control theory the problem is to control a system (sometimes called the plant) to behave in a desired way. The desired way is given (in form of a reference value, which can change over time).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The simplest form of closed loop control is to take the current, measured value subtract this from the reference value and the error signal is created. This difference is the beginning of any closed loop control. Simplest is to multiply this with a constant to make sure that if there is an error between these two the system will try to &quot;move&quot; in order to get to the reference value. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are many advanced and complicated approaches to achieve this. Simplest above is the P (proportional) controller but one can complicate this further with integrative  and derivative terms and end up with the so called PID controller (still the most used in industrial practice). Control systems have evolved and model based predictive, optimal etc. control approaches have been developed. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the control problem can be formulated as a machine learning problem and this is how machine learning can be mixed with control theory. Probably one of the fundamentally new approaches is the PILCO approach presented &lt;a href=&quot;http://mlg.eng.cam.ac.uk/pub/pdf/DeiRas11.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So.. for low level control learning and classical control is somewhat interchangeable. (Machine learning based control systems can behave fully deterministically after training)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In higher levels closed loop control has sometimes been used, but mostly, for robots planning methods generate paths to be followed by the closed loop controllers. These paths can be hard-coded like in the case of most industrial robots or more flexibly defined as in the case of service robots. Planning problems and their solutions have always been a subfield of AI, therefore it can be argued that any robot which solves a planning problem is AI-based. Machine learning itself is also a subfield of AI. Machine learning methods can also solve planning problems. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If we take grasping as an example. &#xA;Detecting grasp point can be done using classical machine vision, with no machine learning or with a neural network based approach e.g. &lt;a href=&quot;https://berkeleyautomation.github.io/dex-net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;2&lt;/a&gt;. These methods are interchangeable ans dome perform better then the others in different situation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any robot which ever navigated a labyrinth is AI-based. Way-finding in a labyrinth is a classical AI planning problem. Somewhat novel are the machine learning based solutions for these well known planing problems. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In areas such as speech recognition or gesture recognition is a similar situation. These have been always part of AI, the novelty, also here is the success of machine learning based approaches. Here again, methods, classical vs. machine learning based are interchangeable, but the latter have a much better success for these applications. &lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2019-08-23T11:16:27.007" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19339" PostTypeId="1" CreationDate="2019-08-23T11:31:21.590" Score="0" ViewCount="211" Body="&lt;p&gt;I want to plot a map( with matplotlib or any other library ) using a wheel encoder and IMU data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Eg:- For every 10cm robot moves it should draw line (in a graph) and draw angles depending on the data received from the IMU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm using python in Raspberry pi.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I achieve this function? Is there any algorithm for this? I googled for a couple of hours but still found nothing. &lt;/p&gt;&#xA;" OwnerUserId="17910" LastActivityDate="2021-05-15T12:04:50.437" Title="Plot a map using wheel encoder and IMU data" Tags="&lt;mobile-robot&gt;&lt;slam&gt;&lt;wheeled-robot&gt;&lt;python&gt;&lt;mapping&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19340" PostTypeId="1" CreationDate="2019-08-23T13:49:02.483" Score="0" ViewCount="46" Body="&lt;p&gt;I am trying to design a control system to move a joint of four bar linkage according to desired trajectory. A dc-motor is used to move the joint. &#xA;Can fuzzy logic controller be used to solve this problem? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have already implemented a PID controller to do this task. I want to explore other control strategies to do this&lt;/p&gt;&#xA;" OwnerUserId="11751" LastActivityDate="2019-08-23T23:31:52.423" Title="Fuzzy logic controller for controlling a four-bar linkage" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;pid&gt;&lt;manipulator&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19341" PostTypeId="2" ParentId="19327" CreationDate="2019-08-23T14:14:17.897" Score="0" Body="&lt;p&gt;My personal experience is in industrial automation and controls designing utility fed electrical panels. I do not have experience with industrial battery powered equipment like AGVs but maybe you can apply some of what I share below to your needs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typically your main power (usually AC power) is brought in and is immediately fed into a circuit protective device and/or a power disconnect (on-off switch). From there it may be filtered, further protected with fuses or circuit breakers, and subsequently fed into devices which consume power directly from the main. When control power is required (think 5, 12, 24VDC or 120VAC) the main power is fed into a DC power supply or AC control transformer. The output from these power supplies is fed into fuses for circuit protection and made available at a central distribution point. Each branch of power is individually protected with fuses or circuit breakers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When devices outside of the control panel require power, the power is typically transmitted through the connection cable to the device at the voltage the device requires. I would say it is very rare to see power supplies or transformers at the end device.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since your cable run is very short, I would have no issue with centrally converting power to your requirements and only sending the power you need through the cable. This simplifies the design since you only need one central supply, and it allows you to locate all your circuit protective devices together at the power supply.&lt;/p&gt;&#xA;" OwnerUserId="23616" LastActivityDate="2019-08-23T14:14:17.897" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19342" PostTypeId="1" CreationDate="2019-08-23T16:17:26.443" Score="0" ViewCount="55" Body="&lt;p&gt;I was trying to understand multiwii quadcopter code. I started with understanding GPS code. Here is a section of the code where I have doubt. Why actual position = pos + velocity contribution + acceleration contribution ? I mean velocity contribution and acceleration contribution, both are the same thing (I Think). So what is the purpose of adding both vel contribution and acceleration contribution ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the section of the code: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;class LeadFilter {&#xA;public:&#xA;    LeadFilter() :&#xA;        _last_velocity(0) {&#xA;    }&#xA;&#xA;    // setup min and max radio values in CLI&#xA;    int32_t         get_position(int32_t pos, int16_t vel, float lag_in_seconds = 1.0);&#xA;    void            clear() { _last_velocity = 0; }&#xA;&#xA;private:&#xA;    int16_t         _last_velocity;&#xA;&#xA;};&#xA;&#xA;int32_t LeadFilter::get_position(int32_t pos, int16_t vel, float lag_in_seconds)&#xA;{&#xA;    int16_t accel_contribution = (vel - _last_velocity) * lag_in_seconds * lag_in_seconds;&#xA;    int16_t vel_contribution = vel * lag_in_seconds;&#xA;&#xA;    // store velocity for next iteration&#xA;    _last_velocity = vel;&#xA;&#xA;    return pos + vel_contribution + accel_contribution;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="23675" LastEditorUserId="17029" LastEditDate="2019-08-24T12:49:04.063" LastActivityDate="2020-09-17T15:02:55.283" Title="why we need both vel and acc contribution for actual position?" Tags="&lt;arduino&gt;&lt;quadcopter&gt;&lt;gps&gt;&lt;multi-rotor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19344" PostTypeId="1" AcceptedAnswerId="19347" CreationDate="2019-08-23T17:33:22.183" Score="0" ViewCount="32" Body="&lt;p&gt;I have a question about using the CAN bus to control motor controllers. Do I have to use the CAN protocol that the motor controller uses, e.g. CANopen CiA DS 301 CiA profile 402, in order to communicate with it? Or I can just use any CAN API library, let’s say SocketCan, to communicate with the motor controller? &lt;/p&gt;&#xA;" OwnerUserId="23677" LastEditorUserId="17029" LastEditDate="2019-08-24T12:48:56.210" LastActivityDate="2019-08-24T12:48:56.210" Title="Do I have to use the CAN protocol that the motor controller uses in order to communicate with it?" Tags="&lt;control&gt;&lt;motor&gt;&lt;can&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19345" PostTypeId="2" ParentId="19335" CreationDate="2019-08-23T20:58:30.357" Score="0" Body="&lt;p&gt;While Screw theory has only been explored and deployed in robotics in research and academic capacity, I found this library on github that could help you. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/DrPardosGotor/Screw-Theory-Toolbox-for-Robotics-ST24R&quot; rel=&quot;nofollow noreferrer&quot;&gt;Screw-Theory-Toolbox-for-Robotics-ST24R&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope you find this useful.&lt;/p&gt;&#xA;" OwnerUserId="18572" LastActivityDate="2019-08-23T20:58:30.357" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19346" PostTypeId="2" ParentId="19340" CreationDate="2019-08-23T23:25:34.640" Score="1" Body="&lt;p&gt;Yes, you can use any kind of algorithm to control a system. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I wouldn't suggest preferring a fuzzy logic based controller over PID just because it yields better performance! Because it is hard to prove, if not possible, the stability of the closed-loop system when there is a fuzzy logic controller in the loop. That is the reason why the fuzzy logic has not been used in major control applications such as space, aviation, safety-critical systems, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just a friendly advice: you can study fuzzy logic for your academic curiosity, but don't expect it will shine on your resume when looking for controls engineering jobs. &lt;/p&gt;&#xA;" OwnerUserId="23646" LastEditorUserId="23646" LastEditDate="2019-08-23T23:31:52.423" LastActivityDate="2019-08-23T23:31:52.423" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="19347" PostTypeId="2" ParentId="19344" CreationDate="2019-08-24T02:13:20.160" Score="1" Body="&lt;p&gt;CANopen is a application level protocol and socketcan is at the transport level. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can send Canopen messages using socketcan without any problems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can compose canopen messages by hand but it will be a lot easier if you use a library&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2019-08-24T02:13:20.160" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19348" PostTypeId="2" ParentId="19339" CreationDate="2019-08-24T08:28:25.463" Score="0" Body="&lt;p&gt;You should maybe look at SLAM. Sinultaneous Localization and Mapping. There are really robust ROS packages which might help you in doing it. However, usially SLAM uses cameras, LIDARs, kinect-like sensors. But you could try if you can find some sort of implementation with IMU and Encoder.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example I found &lt;a href=&quot;https://youtu.be/aXeNBHmOaEE&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; Or &lt;a href=&quot;https://youtu.be/nQZeAafDEJE&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope this might be useful for you.&lt;/p&gt;&#xA;" OwnerUserId="10852" LastActivityDate="2019-08-24T08:28:25.463" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19349" PostTypeId="2" ParentId="19342" CreationDate="2019-08-24T09:29:41.730" Score="1" Body="&lt;p&gt;I didn't quite understand the codes you provide. Back to your wrong statement, velocity and acceleration are two different physical quantities. Acceleration is the time derivative of velocity. When you integrate the equations of the motion, there are multiple terms that affect the next position. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Continuous motion model:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;dx/dt = v;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;dv/dt = a; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;where x is the position [m], v is the velocity [m/s] and a is the acceleration [m/s^2].&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These equations of motion can be discretized by using 'dt' time step and constant acceleration profile between discrete time steps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Discrete motion model:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;x_k = x_k_1 + v_k_1*dt + 0.5*a_k_1*dt^2&lt;/p&gt;&#xA;&#xA;&lt;p&gt;v_k = v_k_1 + a_k_1*dt&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here you can the see that the next position (x_k) is a function the previous position (x_k_1), previous velocity (v_k_1) and the acceleration input (a_k_1).&lt;/p&gt;&#xA;" OwnerUserId="23646" LastActivityDate="2019-08-24T09:29:41.730" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19350" PostTypeId="2" ParentId="19336" CreationDate="2019-08-24T11:04:23.227" Score="2" Body="&lt;p&gt;The robot has sensed a door, so the initial belief distribution matches the three possible door positions. i.e. the only three places that it is possible for the robot to be in that scenario.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The robot moves to the right so, &lt;em&gt;since the belief distribution matches the possible positions of the robot&lt;/em&gt;, &lt;strong&gt;the belief distribution must also move to the right&lt;/strong&gt;. As the robot moves, so the belief distribution must move with it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Notice that the three peaks are no longer quite as well defined at this point because of that motion.  Movement is inherently noisy, which introduces uncertainty.  The more the robot moves, the less certain it becomes about its position, and the belief distribution thus tends to flatten or smooth out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, the robot senses the second door.  Given the (previously known) possible door positions, the belief distribution now also centres on the second door in the diagram.&lt;/p&gt;&#xA;" OwnerUserId="17029" LastActivityDate="2019-08-24T11:04:23.227" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19351" PostTypeId="2" ParentId="18868" CreationDate="2019-08-24T19:06:57.300" Score="1" Body="&lt;p&gt;I have not seen any industry-grade application of fuzzy logic in space, flight, automotive control systems. Fuzzy logic came during mid-60s and it gradually faded away due to several reasons:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;It did not solve any control problem that cannot already be solved by the existing methods at that time. Bad news, no major advantage in terms of extending the application domain!&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;It lacked theorems for proving stability, performance of closed-loop system. Bad news, not being so rigorous!   &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The second item is of utmost importance for safety-critical systems such as space, aviation, self-driving cars, surgical robotics, etc. You are not allowed to deploy an aircraft flying over cities before certifying its flight control system. When you put a fuzzy logic controller in the loop, how can you prove that the closed-loop system is stable? I mean, in the rigorous sense. FAA won't accept the ad-hoc hand-tuning, working experiment results as a certificate. You have to provide the operating conditions that fuzzy logic controller will not work.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back to your question, nowadays, there are so many publishers in academia. Even if you do fuzzy logic research in robotics, of course, you can find a journal that will eventually accept your work. The real question is if someone will read your paper or adopt your methods for their own application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A friendly advice, as a researcher, I would not invest my time to do research in fuzzy logic area. Control theory is already a mature field; and fuzzy logic is arguably NOT one of the fruitful sub-areas. I spent one year working on fuzzy logic during my undergraduate years. Then, I came to USA for my PhD and realized that most of control researchers in USA were not working on fuzzy logic anymore. Nonetheless, never say never! Maybe, you can contribute to the field and make it more widely-used in the future.&lt;/p&gt;&#xA;" OwnerUserId="23646" LastEditorUserId="23646" LastEditDate="2019-08-24T20:00:36.000" LastActivityDate="2019-08-24T20:00:36.000" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19352" PostTypeId="2" ParentId="18489" CreationDate="2019-08-24T20:30:28.320" Score="2" Body="&lt;p&gt;&quot;A car with n trailers&quot; is known to be a differentially flat system. Flatness implies that the Lie algebra generated by the system's vector fields (f and g_i's) is full. Therefore, the example you give is controllable. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the example, f is zero, but you have two vector fields g1 and g2 that are associated with u1, u2, respectively. You need to work on the Lie brackets that are generated by g1 and g2.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;x = g1*u1 + g2*u2;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd like to point out some references on the subject. You can find more information how Lie algebra is used for your system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[1] Rouchon, P., Fliess, M., Lévine, J., &amp;amp; Martin, P. (1993, June). Flatness and motion planning: the car with n trailers. In Proc. ECC’93, Groningen (pp. 1518-1522).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.researchgate.net/profile/Michel_Fliess2/publication/228772991_Flatness_and_motion_Planning_the_Car_with_n-trailers/links/00463520fc493b3390000000.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.researchgate.net/profile/Michel_Fliess2/publication/228772991_Flatness_and_motion_Planning_the_Car_with_n-trailers/links/00463520fc493b3390000000.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[2] M. Fliess, J. L´evine, Ph. Martin, and P. Rouchon. D´efaut d’un syst`eme non lin´eaire et commande haute fr´equence. C.R. Acad. Sci. Paris,&#xA;I-316, 1993&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[3] J.P. Laumond. Controllability of a multibody mobile robot. In IEEE International Conf. on advanced robotics, 91 ICAR, pages 1033–1038, 1991.&lt;/p&gt;&#xA;" OwnerUserId="23646" LastEditorUserId="23646" LastEditDate="2019-08-24T20:43:06.183" LastActivityDate="2019-08-24T20:43:06.183" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19353" PostTypeId="1" CreationDate="2019-08-25T07:29:31.777" Score="0" ViewCount="71" Body="&lt;p&gt;I am trying to learn PID controllers from basics and i came to know that &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;P&quot; term looks for current error&#xA;&quot;I&quot;term looks for past error&#xA;&quot;D&quot;term looks for future error&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have some how understood &quot;P&quot; but i am &lt;strong&gt;confused about &quot;I&quot; and &quot;D&quot; terms?How do they control past and future error respectively?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="23585" LastActivityDate="2019-09-09T20:54:45.483" Title="Confused about I and D in PID controller?" Tags="&lt;pid&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19354" PostTypeId="1" CreationDate="2019-08-25T08:23:29.187" Score="0" ViewCount="41" Body="&lt;p&gt;What is the effect of each of the three terms on output response of a pid controller?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;i mean how will P term shape/effect the output response&#xA;similarly what is the effect of I and D terms on output response respectively?&lt;/p&gt;&#xA;" OwnerUserId="23585" LastActivityDate="2019-08-27T07:12:44.033" Title="effect of three terms of PID controller on output response?" Tags="&lt;pid&gt;" AnswerCount="2" CommentCount="0" ClosedDate="2019-08-27T09:50:23.673" ContentLicense="CC BY-SA 4.0" />
  <row Id="19355" PostTypeId="2" ParentId="19353" CreationDate="2019-08-25T12:31:10.477" Score="2" Body="&lt;p&gt;The literature on PID control is huge and you could certainly find many resources capable of explaining the theory behind, but to stick to your question let's start from the central consideration that a PID does not control the error. The purpose of a PID is to control the plant instead, in order to meet some given requirements, among which very often you'll have specific performances of the error profile.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Under this new light, for the I part, the PID controller takes into account the past errors as an aggregate (the integral is a summation) to drive the system toward the target. How could an agent be capable of controlling past events that have already happened? It cannot, indeed, although it can extract very useful information out of them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Likewise, when it comes down to the D part, we don't control future events but we rather make a prediction of how the error would look like in a small instant ahead of time based on the current information we know of it, in the hope that by adding this new piece we'll be better off at getting what we aim to, that is an improved plant's behavior.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In math terms, we can sort of demonstrate that by writing the effort &lt;span class=&quot;math-container&quot;&gt;$u\left(t\right)$&lt;/span&gt; delivered by a PD controller in its standard form:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;u \left( t \right) = K \left(\ e \left( t \right) + T_d \frac{de \left( t \right)}{dt} \right).&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A &lt;a href=&quot;https://en.wikipedia.org/wiki/Taylor_series&quot; rel=&quot;nofollow noreferrer&quot;&gt;Taylor series&lt;/a&gt; expansion of &lt;span class=&quot;math-container&quot;&gt;$e\left(t+T_d\right)$&lt;/span&gt; gives:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;e \left( t+T_d \right) \approx e \left( t \right) + T_d \frac{de \left( t \right)}{dt},&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;meaning that the control signal is proportional to an estimate of the control error at time &lt;span class=&quot;math-container&quot;&gt;$T_d$&lt;/span&gt; ahead (into the future), where the estimate is obtained by linear extrapolation (&lt;em&gt;see [1] at page 69&lt;/em&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And if you're now wondering whether a solely D controller may ever exist, disjointly from the P term, the answer is of course no! I believe you can easily come up with the correct explanation.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;References&lt;/h3&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://aiecp.files.wordpress.com/2012/07/1-0-1-k-j-astrom-pid-controllers-theory-design-and-tuning-2ed.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;K. Åström, T. Hägglung, PID Controllers, Theory, Design and Tuning, 2nd Edition&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2019-09-09T20:54:45.483" LastActivityDate="2019-09-09T20:54:45.483" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19357" PostTypeId="1" CreationDate="2019-08-25T18:43:15.787" Score="0" ViewCount="29" Body="&lt;p&gt;&lt;strong&gt;I am working on my undergraduate project and this is my first time in using use python to control parrot bebop 2 drone and use BCI or BMI technology. &#xA;I have x variable (int) and I want to read its value from file in the main time I want the program read this file continuously what I mean exactly that my text file input will be changed each time and I want the python code to catch this change and change the value x&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;for example:&#xA;if x receive 1 from the text file --&gt; then takeoff the drone&lt;br&gt;&#xA;in the main time after x receive 1 I want it receives 2 directly (automatically) and do the second command for example: move to the left (but without disconnect the drone &quot;the first command&quot;) &#xA;her is my code, but I had a lot of problems with it, its check the value but no commands work after its know the variable of x:&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;import sys  &#xA;import os&#xA;from time import sleep&#xA;from pyparrot.Bebop import Bebop&#xA;import math&#xA;&#xA;&#xA;#def result(n):&#xA;bebop = Bebop()&#xA;print(&quot;connecting&quot;)&#xA;success = bebop.connect(10)&#xA;print(success) &#xA;f = open('EEGresults.txt')&#xA;lines = f.readlines()&#xA;list_of_elements = []&#xA;for line in lines:&#xA;   list_of_elements += map(int, line.split())&#xA;f.close()&#xA;print (list_of_elements)&#xA;x = list_of_elements[1]&#xA;&#xA;bebop.smart_sleep(5)&#xA;&#xA;if x == 1:&#xA;   print (&quot;Yay! This number is = 1&quot;)&#xA;   bebop.safe_takeoff(3)&#xA;&#xA;else:&#xA;   if x == 2:&#xA;      print (&quot;Yay! This number is = 2&quot;)&#xA;      bebop.move_relative(0,0,0,1.6)&#xA;&#xA;   else:  &#xA;      if x == 3:&#xA;         print (&quot;Yay! This number is = 3&quot;)&#xA;&#xA;         bebop.smart_sleep(1)&#xA;         bebop.safe_land(5)&#xA;         print(&quot;DONE - disconnecting&quot;)&#xA;         bebop.disconnect()&#xA;&#xA;&#xA;print(&quot;DONE - disconnecting&quot;)&#xA;bebop.disconnect()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="23681" LastActivityDate="2019-08-25T18:43:15.787" Title="How to make x variable change each time and read its value from txt file" Tags="&lt;control&gt;&lt;ros&gt;&lt;computer-vision&gt;&lt;python&gt;&lt;flight-controller&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19358" PostTypeId="2" ParentId="19354" CreationDate="2019-08-25T21:02:13.220" Score="1" Body="&lt;p&gt;You have a few questions about PID control.  Let’s break it down to its basic concepts.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The P term (for Proportional) is what you might think of as the strength of the controller.  If you want a system to reach a particular state, and it is instead at some other state, the P gain multiplies the error to drive the system toward the desired state.   In a perfect world, the system gets there.  However, if there is a lot of friction, or the P gain is too low, the system may only get partway to the goal.   This is overdamped behavior.  Conversely, if there is little friction, or the P gain is too high, the system may travel past the goal state and overshoot the goal.  In this case, the error will change sign, and the P gain will cause it to go back toward the goal state.  This is underdamped behavior.  In general, you want the P gain to be relatively high so the system responds strongly (quickly) to error states.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The D gain (for Derivative) helps compensate for underdamped behavior.  When the derivative of the error is large, so that the system is approaching the desired state quickly, the D gain responds to counter the rapidly-changing state.  In effect, this adds damping to the system to reduce or eliminate overshoots.  When the system is close to the goal state, and the error is not changing much, the D term does very little.  When the error is reducing quickly, the influence of the D gain can stabilize the performance. Note:  if the D gain is very large, it can lead to oscillatory behavior due to the rapidly-changing derivatives.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The I gain (for Integral) serves to drive a system to its goal state in those situations for which the P (&amp;amp;D) gains are not strong enough to overcome the system’s characteristics and cannot precisely reach the goal state.  This is really only useful when trying to achieve a steady-state position.  The I gain is a multiplier of the integrated error, so as a small fixed error remains over time, the I term grows until it can drive the system to the goal.   Note that real physical systems always lag the controller (due to friction, inertia, power supply slew rates, etc), so the integral term should not be enabled until the system is within a threshold of the desired state.  Otherwise, the accumulated errors from the lagging response will cause the I term to be large, causing overshoot, due to the accumulated errors during motion, instead of just considering the errors when at steady-state.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastEditorUserId="11125" LastEditDate="2019-08-25T21:41:51.903" LastActivityDate="2019-08-25T21:41:51.903" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19360" PostTypeId="1" CreationDate="2019-08-26T12:49:42.900" Score="0" ViewCount="70" Body="&lt;p&gt;I am new to control theory and have difficulties about this question&#xA;&lt;a href=&quot;https://i.stack.imgur.com/jtzHH.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/jtzHH.png&quot; alt=&quot;control system scheme&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;R is the input, Td is the disturbance, C is the output&#xA;Given that G1=K/(s^2+A*s), where K is the gain and A is a parameter greater than zero.&#xA;The question is, for what value of the step disturbance the system can become unstable?&#xA;How do I solve this?&lt;/p&gt;&#xA;" OwnerUserId="23690" LastActivityDate="2019-08-30T12:21:04.077" Title="For what step disturbance value the system will become unstable?" Tags="&lt;control&gt;&lt;stability&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19361" PostTypeId="1" CreationDate="2019-08-26T14:05:12.277" Score="1" ViewCount="99" Body="&lt;p&gt;I am realizing a sun tracker based on latitude, longitude, and date-time. The system calculates the azimuth and elevation angles to track the sun.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a classic sun tracker, the azimuth axis is aligned with the normal to the ground, whereas the elevation axis is always parallel to the ground and mounted serially with the azimuth joint, as in the picture below:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/qx629.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qx629.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given the azimuth and elevation angles, computing the target configuration of the axes is straightforward.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I now need to change my system into a mirror array where the order of the axes is swapped, as shown in the following diagram:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/I7rQK.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/I7rQK.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a result, the logic required to control the system does clearly change.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In essence, given the azimuth and elevation angles of the sun, I would need to come up with the target configuration of the normals depicted in green.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To calculate the orientation vector in the classic configuration:&#xA;Ej:&#xA;Elevation 45&#xA;Azimuth 30&#xA;With some math :&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given the vector (x=1,y=0,z=0) starting position (red dot)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where &quot;x&quot; is parallel to the equator, &quot;y&quot; parallel to the earth rotation axis&#xA;and &quot;z&quot; normal to ground.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) Perform elevation of 45 degress turn over &quot;y&quot; axis and get: &#xA;(sin(45), 0, sen(45))=(0.707,0,0.707)(green)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) Perform azimuth of 30 degress turn over &quot;z&quot; and get the vector &#xA;(0.61237244, 0.35355339, 0.707)(blue)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/fM3Ml.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fM3Ml.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;So how to get the same vector with the mirror array motor arrangement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically, I need to solve for:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(motor1_angle, motor2_angle) = from(orientation_vector)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From my point of view, there is only one solution, thus a closed-form should be possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Greetings&lt;/p&gt;&#xA;" OwnerUserId="23691" LastEditorUserId="6941" LastEditDate="2019-09-03T20:48:07.890" LastActivityDate="2019-09-03T20:48:07.890" Title="Inverse kinematics of a sun tracker with swapped axes" Tags="&lt;inverse-kinematics&gt;" AnswerCount="0" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="19362" PostTypeId="2" ParentId="19360" CreationDate="2019-08-26T14:15:41.453" Score="5" Body="&lt;p&gt;The stability is a property of the linear systems themselves, hence there is no meaning in considering stability as regarded with the input disturbance &lt;span class=&quot;math-container&quot;&gt;$T_d$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To verify if the closed-loop system &lt;span class=&quot;math-container&quot;&gt;$C/T_d$&lt;/span&gt; is stable/unstable, you ought to compute the roots of the characteristic polynomial.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given that&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\frac{C}{T_d} = - \frac{s^2+As}{s^2+As+K},&#xA;$$&lt;/span&gt;&#xA;the roots of &lt;span class=&quot;math-container&quot;&gt;$s^2+As+K$&lt;/span&gt; − poles of the closed-loop system − are:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;s_{1,2} = \frac{-A \pm \sqrt{A^2-4K}}{2}.&#xA;$$&lt;/span&gt;&#xA;For &lt;span class=&quot;math-container&quot;&gt;$C/T_d$&lt;/span&gt; to be unstable, at least one pole needs to have a positive real part, thus &lt;span class=&quot;math-container&quot;&gt;$K&amp;lt;0$&lt;/span&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2019-08-30T12:21:04.077" LastActivityDate="2019-08-30T12:21:04.077" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19363" PostTypeId="2" ParentId="19203" CreationDate="2019-08-26T17:48:58.583" Score="0" Body="&lt;p&gt;Yes, all propellors are compatible with all motors brushed or brushless if you’re looking for the right propellor for your motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And yes, the propellors that you’ve linked in your question will fit the motors that you’ve also linked.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Make sure you double check using the specifications of the motors and propellors, usually found on the product page of online market places, however, the amazon link doesn’t seem to have it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most of the time, with your propellors you’ll get small pipe things that fit around your motor shaft to make the diameter of the shaft bigger so the propellor will fit much tighter, forgot what they’re called, oops.&lt;/p&gt;&#xA;" OwnerUserId="11688" LastActivityDate="2019-08-26T17:48:58.583" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19365" PostTypeId="2" ParentId="19354" CreationDate="2019-08-27T07:12:44.033" Score="0" Body="&lt;p&gt;Check this video: &lt;a href=&quot;https://www.youtube.com/watch?v=4Y7zG48uHRo&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=4Y7zG48uHRo&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It explains how PID algorithm work for controlling self driving cars. &lt;/p&gt;&#xA;" OwnerUserId="23646" LastActivityDate="2019-08-27T07:12:44.033" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19366" PostTypeId="2" ParentId="19333" CreationDate="2019-08-27T07:22:22.990" Score="0" Body="&lt;p&gt;Bag-of-word is just a similarity check routine. Perspective change is more related to the robustness of the feature descriptor against view change. Also, the map is 3D but I guess they are using 2D image-based place recognition only.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;The vocabulary is created offline with the ORB descriptors extracted from a large set of images.&quot; section III.E of ORB-paper.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, I guess given a new image they extract orb features and compare them to the orb features in the DB. &lt;/p&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2019-08-27T07:22:22.990" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19368" PostTypeId="1" CreationDate="2019-08-27T13:06:23.710" Score="0" ViewCount="149" Body="&lt;p&gt;I'm studying robotics at the university and I have to implement on my own SLAM algorithm. To do it I will use ROS, Gazebo and C++.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a doubt about what data structure I have to use to store the map (and what I'm going to store it, but this is another story).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have thought to represent the map as a 2D grid and robot's start location is (0,0). Each cell of the grid will be 1x1 meters. I will use a laser to know where are the obstacles. Using current robot's location, I will set to 1 on all the cells that represent an obstacle. For example, it laser detects an obstacle at 2 meters in front of the robot, I will set to 1 the cell at (0,2).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using a vector, or a 2D matrix, here is a problem, because, vector and matrices indices start at 0, and there could be more room behind the robot to map. And that room will have an obstacle at (-1,-3).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On this data structure, I will need to store the cells that have an obstacle and the cells that I know they are free.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which kind of data structure will I have to use?&lt;/p&gt;&#xA;" OwnerUserId="18173" LastActivityDate="2019-08-28T12:15:43.157" Title="Data structure to store a robot map" Tags="&lt;ros&gt;&lt;slam&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19369" PostTypeId="2" ParentId="19368" CreationDate="2019-08-28T11:53:35.027" Score="1" Body="&lt;p&gt;I recommend you use the Gridcell data structure to start. It is designed for storing grid information in a 1d array. You will just need to create algorithms to store data in the array and retrieve data in the array properly. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://docs.ros.org/kinetic/api/nav_msgs/html/msg/GridCells.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://docs.ros.org/kinetic/api/nav_msgs/html/msg/GridCells.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, when you want to display data, you use Markers in a marker array.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;from visualization_msgs.msg import Marker, MarkerArray&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This link documents more about this message type&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://wiki.ros.org/visualization_msgs&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://wiki.ros.org/visualization_msgs&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="23597" LastEditorUserId="23597" LastEditDate="2019-08-28T12:15:43.157" LastActivityDate="2019-08-28T12:15:43.157" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19370" PostTypeId="1" AcceptedAnswerId="19374" CreationDate="2019-08-28T12:32:35.967" Score="4" ViewCount="119" Body="&lt;p&gt;I am a master student in Germany and one of our professors is doing robotics research but with a different paradigm - the behavior-based robotics based on Subsumption Architecture developed by prof. Rodney Brooks from MIT in 1986. I was looking online for more info about this topic but could not find much, compared to the popular nowadays Deep learning techniques. Do you think behavior-based robotics is a fruitful research direction? Does it have any future? At this moment I am inclined to think that Deep Learning and Reinforcement Learning are the ways to add intelligence to robotic systems.&lt;/p&gt;&#xA;" OwnerUserId="23706" LastActivityDate="2019-08-28T17:54:34.823" Title="Why is behavior-based robotics not as popular as deep learning or reinforcement learning?" Tags="&lt;mobile-robot&gt;&lt;control&gt;&lt;artificial-intelligence&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19371" PostTypeId="1" AcceptedAnswerId="19377" CreationDate="2019-08-28T14:27:42.637" Score="2" ViewCount="631" Body="&lt;p&gt;I have doubts on how to find all the joint velocities that don't produce any linear velocity, so are in the Null space, when we are in a singular configuration. For example, suppose we have a 2R planar robotic arm. If we compute the Jacobian we have:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$J(q)= \begin{bmatrix}-l_1sin(q1)-l_2sin(q1+q2)  &amp;amp; -l_2sin(q1+q2)\\ l_1cos(q1)+l_2cos(q1+q2) &amp;amp; l_2cos(q1+q2)\end{bmatrix} $&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and if we consider the sigular configuration for which &lt;span class=&quot;math-container&quot;&gt;$q_2=0$&lt;/span&gt; we have:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$J(q)= \begin{bmatrix}-(l_1+l_2)sin(q1)  &amp;amp; -l_2sin(q1)\\ (l_1+l_2)cos(q1) &amp;amp; l_2cos(q1)\end{bmatrix} $&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;now i want to find the joint velocities that produce no linear velocity of the end-effector, so all the velocities that arein the Null space. I have that those are all the velocities of the type :&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$N(J)= \alpha \begin{bmatrix}&#xA;l_2\\ -(l_1+l_2)&#xA;\end{bmatrix}$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;but i don't understand how this result is obtained. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can somebody please help me? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank's in advance.&lt;/p&gt;&#xA;" OwnerUserId="21797" LastActivityDate="2019-08-28T20:46:18.553" Title="Null space of the Jacobian matrix for a robotic arm" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;forward-kinematics&gt;&lt;jacobian&gt;&lt;singularity&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19372" PostTypeId="1" CreationDate="2019-08-28T16:16:37.360" Score="2" ViewCount="210" Body="&lt;p&gt;I'm using Kalman filter to track the position of a vehicle and receive position data from 2 sensors: A GPS sensor and an Ultrasonic sensor for which I want to implement sensor fusion into the Kalman. However, the data formats between the 2 sensors have different timestamps and hence, I cannot directly consider it together without first synchronising them. Does anyone have any ideas or suggestions as to how this can be implemented in Python?&#xA;All suggestions are welcome. Thanks!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The GPS data (GPX file exported from an app) collected gives information about the Latitude, Longitude, Elevation and Timestamp (Format: YYYY-MM-DD HH.MM.SS). The HDF5 data collected from a vehicle (HDF5 Format) gives information about the Vehicle Position X, Vehicle Position Y, and a timestamp that is updated like a counter. (Present in file step_S). I'm able to import the GPS and HDF5 files and read its contents but not able to synchronise them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;GPX file reference in below link:&lt;br&gt;&#xA;&lt;a href=&quot;https://github.com/stevenvandorpe/testdata/blob/master/gps_coordinates/gpx/my_run_001.gpx&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/stevenvandorpe/testdata/blob/master/gps_coordinates/gpx/my_run_001.gpx&lt;/a&gt;&lt;br&gt;&#xA;HDF5 data:&lt;br&gt;&#xA;&lt;a href=&quot;https://github.com/surishell/Kalman-HDF5/blob/master/TestRoute.hdf5&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/surishell/Kalman-HDF5/blob/master/TestRoute.hdf5&lt;/a&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;One idea that I had would be checking the timestamp corresponding to the first non-zero value of X and Y positions of the HDF5 file and setting it as a base index against the timestamp of the first position at which GPS value changes. (Assumption: GPS updates at 1 Hz and the Ultrasonic at 500 ms. Once the index is known, the sensor values can be separated and synchronised by corresponding time step). However, I'm not sure of the implementation and could really use some help from the community. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Code for reading the HDF5 data: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;import h5py&#xA;import numpy as np&#xA;from tkinter import *&#xA;import matplotlib.pyplot as plt&#xA;&#xA;f = h5py.File(&#xA;    &quot;C:\Users\Suraj\Desktop\TestRoute.hdf5&quot;,&quot;r&quot;)&#xA;&#xA;with f:&#xA;&#xA;    st = f.__getitem__(&quot;daste_step_S&quot;)&#xA;    t = list(zip(*st[()]))&#xA;    step_time = t[0]&#xA;    step_id = t[1]&#xA;    step_map_in_index = t[2]&#xA;    step_map_out_index = t[3]&#xA;    step_v_pos_x = t[4]&#xA;    step_v_pos_y = t[5]&#xA;    step_v_pos_angle = t[6]&#xA;&#xA;    print(step_v_pos_x)&#xA;    test1 = [t - s for s, t in zip(step_v_pos_x, step_v_pos_x[1:])]&#xA;    print(test1)&#xA;    ax = plt.axes(projection=&quot;3d&quot;)&#xA;    ax.plot3D(step_v_pos_x, step_v_pos_y, step_time, 'gray')&#xA;    plt.show()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Kalman Filter:   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've considered a standard motion model: Constant Velocity (Assuming that acceleration plays no effect on this vehicle's position estimation) and therefore, my states consist of only position and velocity.&lt;br&gt;&#xA;&lt;sub&gt;+1&lt;/sub&gt; = &lt;sub&gt;&lt;/sub&gt; + ˙&lt;sub&gt;&lt;/sub&gt; Δ&lt;br&gt;&#xA; ˙&lt;sub&gt;+1&lt;/sub&gt; = ˙&lt;sub&gt;&lt;/sub&gt;   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore, the state transition matrix would be (Considering 2D positioning (x,y) with latitude and longitude coordinates):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;A = [[1.0, 0.0, Δ, 0.0],&#xA;     [0.0, 1.0, 0.0, Δ],&#xA;     [0.0, 0.0, 1.0, 0.0],&#xA;     [0.0, 0.0, 0.0, 1.0]]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Since we only have position measurement data available, we can correspondingly write the measurement matrix as:  &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;H = [[1.0, 0.0, 0.0, 0.0],&#xA;     [0.0, 1.0, 0.0, 0.0]]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Code for reading GPS data and implementing Kalman filter for Position tracking  &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;import gpxpy&#xA;import pandas as pd&#xA;import numpy as np&#xA;import utm&#xA;import matplotlib.pyplot as plt&#xA;&#xA;with open('test3.gpx') as fh:&#xA;    gpx_file = gpxpy.parse(fh)&#xA;segment = gpx_file.tracks[0].segments[0]&#xA;coords = pd.DataFrame([&#xA;    {'lat': p.latitude,&#xA;     'lon': p.longitude,&#xA;     'ele': p.elevation,&#xA;     'time': p.time} for p in segment.points])&#xA;coords.head(3)&#xA;plt.plot(coords.lon[::18], coords.lat[::18],'ro')&#xA;plt.show()&#xA;#plt.plot(coords.lon, coords.lat)&#xA;&#xA;def lat_log_posx_posy(coords):&#xA;&#xA;     px, py = [], []&#xA;     for i in range(len(coords.lat)):&#xA;         dx = utm.from_latlon(coords.lat[i], coords.lon[i])&#xA;         px.append(dx[0])&#xA;         py.append(dx[1])&#xA;     return px, py&#xA;&#xA;def kalman_xy(x, P, measurement, R,&#xA;              Q = np.array(np.eye(4))):&#xA;&#xA;    return kalman(x, P, measurement, R, Q,&#xA;                  F=np.array([[1.0, 0.0, 1.0, 0.0],&#xA;                              [0.0, 1.0, 0.0, 1.0],&#xA;                              [0.0, 0.0, 1.0, 0.0],&#xA;                              [0.0, 0.0, 0.0, 1.0]]),&#xA;                  H=np.array([[1.0, 0.0, 0.0, 0.0],&#xA;                              [0.0, 1.0, 0.0, 0.0]]))&#xA;&#xA;def kalman(x, P, measurement, R, Q, F, H):&#xA;&#xA;    y = np.array(measurement).T - np.dot(H,x)&#xA;    S = H.dot(P).dot(H.T) + R  # residual convariance&#xA;    K = np.dot((P.dot(H.T)), np.linalg.pinv(S))&#xA;    x = x + K.dot(y)&#xA;    I = np.array(np.eye(F.shape[0]))  # identity matrix&#xA;    P = np.dot((I - np.dot(K,H)),P)&#xA;&#xA;    # PREDICT x, P&#xA;    x = np.dot(F,x)&#xA;    P = F.dot(P).dot(F.T) + Q&#xA;&#xA;    return x, P&#xA;&#xA;def demo_kalman_xy():&#xA;&#xA;    px, py = lat_log_posx_posy(coords)&#xA;    plt.plot(px[::18], py[::18], 'ro')&#xA;    plt.show()&#xA;&#xA;    x = np.array([px[0], py[0], 0.01, 0.01]).T&#xA;    P = np.array(np.eye(4))*1000 # initial uncertainty&#xA;    result = []&#xA;    R = 0.01**2&#xA;    for meas in zip(px, py):&#xA;        x, P = kalman_xy(x, P, meas, R)&#xA;        result.append((x[:2]).tolist())&#xA;    kalman_x, kalman_y = zip(*result)&#xA;    plt.plot(px[::18], py[::18], 'ro')&#xA;    plt.plot(kalman_x, kalman_y, 'g-')&#xA;    plt.show()&#xA;&#xA;demo_kalman_xy()  &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="23707" LastEditorUserId="23707" LastEditDate="2019-08-29T00:46:18.907" LastActivityDate="2021-02-07T07:09:41.023" Title="How to synchronise data for fusion in Kalman from multiple sensors with different timestamp information?" Tags="&lt;localization&gt;&lt;kalman-filter&gt;&lt;python&gt;&lt;sensor-fusion&gt;&lt;gps&gt;" AnswerCount="1" CommentCount="8" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19373" PostTypeId="2" ParentId="19370" CreationDate="2019-08-28T17:48:43.503" Score="2" Body="&lt;p&gt;Deep Learning and behavior based robotics as well were developed as the opposite to something which was common before. In the 1980s, Brooks developed the subsumption architecture as an alternative to the former AI planning technique which was widespread discussed in the 1970s together with LISP symbolic systems. Behavior based robotics says in short, that there is no need for an abstract representation of the world which is formalized in the STRIPS language, instead the robot has to react to incoming sensor perception.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Deep Learning were also developed as a valid alternative to something known before. The main idea behind machine learning is, that there is no need to create sourcecode like in a programming project. It's enough to train neural networks with example data and the programming part of a robotics project is low or not there. A certain paradigm becomes successful, if a larger audience has the same understanding of how technology should be realized. The reason why deep learning is more attractive to a mainstream audience than behavior based robotics, is because the number of people who are trying to escape from symbolic AI is low, but the amount of people who doesn't understand why they should program is large.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Deep learning can be summarized to the idea, not to write a single line of code, but letting the combination of a GPU plus backpropagation algorithm do all the work. This sounds attractive to newbies in the domain of AI because writing millions lines of code is a complicated issue.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2019-08-28T17:48:43.503" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19374" PostTypeId="2" ParentId="19370" CreationDate="2019-08-28T17:54:34.823" Score="3" Body="&lt;p&gt;I have not seen that many people working on behavior-based robotics. I am not sure even if Rodney Brooks still works on the subject.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Deep Learning: the approach is good for problems without a model. It is not to-go approach for many robotics problems. Because data collection, labeling, training, testing can be very costly. Even if you are interested in paying the price, sometimes there may not be enough data. If you want to land a rocket to a moving platform, probably you wouldn't want to use deep learning. :)  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Reinforcement Learning: the approach does not work in real-life applications. It is costly since you need to do a lot experiments. Most of the times it is not easy to interpret what your agent actually learned.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;=== purely subjective statements begin === &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My friendly advice: stay away from esoteric research subjects. I've seen some university professors who have a thing for obscure topics. These professors usually are the ones who passed the critical phase of their careers (pre-tenure) and like to experiment different topics at the expense of their students' career. It is highly likely that the outcome of the experiment will not make the professors more or less famous. They win some small grants and lure some young students to work on esoteric topics as if the subject were very important. You should ask yourself what you are going to achieve after you successfully study &quot;xyz&quot; topic. Is it going to help you find a job in industry or is it going to get you your own research agenda? Do not study a subject just because your professor has funding and he/she finds that topic interesting.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;=== purely subjective statements end ===&lt;/p&gt;&#xA;" OwnerUserId="23646" LastActivityDate="2019-08-28T17:54:34.823" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19376" PostTypeId="1" AcceptedAnswerId="19384" CreationDate="2019-08-28T20:13:49.933" Score="0" ViewCount="349" Body="&lt;p&gt;I am trying to select the motor for a robot arm with six degrees of the freedom robot arm. What should I do to select the motors and which type of motor I should select?&lt;/p&gt;&#xA;" OwnerUserId="23709" LastActivityDate="2019-08-29T14:23:23.760" Title="Selection of motor and Calculating the torque for 6DOF robot Arm" Tags="&lt;robotic-arm&gt;&lt;mechanism&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19377" PostTypeId="2" ParentId="19371" CreationDate="2019-08-28T20:39:41.410" Score="2" Body="&lt;p&gt;Quite easily, by applying the definition of the Null Space straight away, you have to solve for:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\mathbf{J} \left( q_1,q_2=0\right) \cdot \left[\dot{q_1}, \dot{q_2} \right]^T = 0.&#xA;$$&lt;/span&gt;&#xA;You'll come up with the following relation:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\frac{\dot{q_1}}{\dot{q_2}} = - \frac{l_2}{l_1+l_2},&#xA;$$&lt;/span&gt;&#xA;which in turn can be summarized by &lt;span class=&quot;math-container&quot;&gt;$\mathcal{N} \left( \mathbf{J} \right)$&lt;/span&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2019-08-28T20:46:18.553" LastActivityDate="2019-08-28T20:46:18.553" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19378" PostTypeId="1" CreationDate="2019-08-28T21:23:42.557" Score="0" ViewCount="43" Body="&lt;p&gt;I am using Pololu G2 18v15 to drive a maxon motor. The motor is supposed to drive a load in a sinusoidal trajectory against gravity with maximum torque of 0.0634 NM with max speed of 5 rpm.&#xA;I am using arduino to do trajectory control (using PID controller) and pwm commands are sent to pololu controller through i2c communication.&#xA;When I use lower pwm frequency (1.13/2.50/3.21kHz) on pololu motor controller, the motor is smoothly able to track the desired sinusoidal trajectory. But there is high pitch sound generated by the motor.&#xA;When I use higher pwm frequency (22.5kHz) on pololu controller, there is no sound produced by the motor but, the motor is not able to track the desired trajectory smoothly even after multiple attempts of tuning the PID gains on arduino. There are always some jitters when motor is lifting the load against gravity.&#xA;One thing I have noticed is that the motor pulls around 0.11 amps of current when pwm frequency is 22.5 kHz where as it pulls around 0.23 amps of current when pwm frequency is 1.13kHz to achieve the same maximum speed while following the same trajectory.&#xA;This makes me suspect that, the motor is not getting enough torque at high pwm frequency to smoothly lift the load.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a way to reduce the high pitch sound at lower pwm frequency (without increasing the frequency) or is there a way to torque of motor at higher pwm frequency&lt;/p&gt;&#xA;" OwnerUserId="11751" LastActivityDate="2019-08-28T21:23:42.557" Title="Relation between PWM frequency and torque" Tags="&lt;control&gt;&lt;servomotor&gt;&lt;pwm&gt;" AnswerCount="0" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="19379" PostTypeId="1" AcceptedAnswerId="19381" CreationDate="2019-08-28T22:46:59.623" Score="2" ViewCount="66" Body="&lt;p&gt;Are these used for position tracking? Are there any papers &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/aipam.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/aipam.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/olTGx.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/olTGx.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/CPkAj.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/CPkAj.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="23711" LastActivityDate="2019-08-29T07:49:27.327" Title="What is the purpose of these grey balls on the drone?" Tags="&lt;quadcopter&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19380" PostTypeId="2" ParentId="16604" CreationDate="2019-08-29T07:15:55.220" Score="5" Body="&lt;p&gt;Apart from the isolated build, it is much more convenient to use:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Independent packages are build in parallel which can make it much faster.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;catkin build&lt;/code&gt; can be used from any directory in the workspace while &lt;code&gt;catkin_make&lt;/code&gt; only works in the top level directory.&lt;/li&gt;&#xA;&lt;li&gt;It is easy to only build a single package (+ dependencies): &lt;code&gt;catkin build package_name&lt;/code&gt; or, when called from the package directory, &lt;code&gt;catkin build --this&lt;/code&gt;.  Add &lt;code&gt;--no-deps&lt;/code&gt; to skip dependencies.&lt;br /&gt;&#xA;(Note that &lt;code&gt;catkin_make&lt;/code&gt; has a  &lt;code&gt;--only-pkg-with-deps&lt;/code&gt; flag for this, but there it will result in a persistent setting so next call of just &lt;code&gt;catkin_make&lt;/code&gt; would also only build this package which is very unintuitive.)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;catkin clean&lt;/code&gt; makes it easy to wipe build/devel without having to use a scary &lt;code&gt;rm -rf&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Some other useful commands (list, locate, ...) as already mentioned by @bergercookie.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="16508" LastEditorUserId="16508" LastEditDate="2021-05-25T13:54:30.910" LastActivityDate="2021-05-25T13:54:30.910" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19381" PostTypeId="2" ParentId="19379" CreationDate="2019-08-29T07:43:17.520" Score="7" Body="&lt;p&gt;These are markers for a visual Motion Capture system. &lt;a href=&quot;https://optitrack.com/products/motion-capture-markers/&quot; rel=&quot;noreferrer&quot;&gt;Buy some markers here&lt;/a&gt;&#xA;Most MoCap systems work by setting up multiple cameras with strong IR-Flashes and IR-Cameras and the surface of the balls are optimized to reflect the specific wavelength. The cameras then almost only see the markers and can use triangulation to compute their position. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As at least the last image was capture at ETH Zurich (specifically the Polyterasse), they likely used their &lt;a href=&quot;https://www.vicon.com/motion-capture/engineering&quot; rel=&quot;noreferrer&quot;&gt;Vicon&lt;/a&gt; tracking system. Note that they captured the data on a cloudy day as direct sunlight also contains IR and could compromise the MoCap. However, you normally set up the MoCap cameras in a full circle around your working area to improve accuracy and have a lower probability of occluded markers. So it's also possible that there was no MoCap and just a photo session.&lt;/p&gt;&#xA;" OwnerUserId="23196" LastEditorUserId="23196" LastEditDate="2019-08-29T07:49:27.327" LastActivityDate="2019-08-29T07:49:27.327" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19382" PostTypeId="1" CreationDate="2019-08-29T13:01:16.297" Score="1" ViewCount="27" Body="&lt;p&gt;I have a Kinect camera which has a minimum depth of 0.5m and I'm trying to find a way to decrease it to around 0.2m for near-depth detection. Does anyone know how this can be done? Can a macro lens be added to the IR camera to decrease the minimum depth? Would I then need to calibrate the extrinsics?&lt;/p&gt;&#xA;" OwnerUserId="11489" LastEditorUserId="11489" LastEditDate="2019-08-29T13:06:27.727" LastActivityDate="2019-08-29T13:06:27.727" Title="Decrease minimum depth of a RGBD camera" Tags="&lt;cameras&gt;&lt;kinect&gt;" AnswerCount="0" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19383" PostTypeId="1" CreationDate="2019-08-29T13:42:09.203" Score="0" ViewCount="73" Body="&lt;p&gt;I have a general question regarding SLAM as I am not an expert on the topic. What are the variables that can improve map generation?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ones I can think of are:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A higher resolution camera&lt;/li&gt;&#xA;&lt;li&gt;Consistent lighting conditions&lt;/li&gt;&#xA;&lt;li&gt;A room with plenty of high confidence landmarks&lt;/li&gt;&#xA;&lt;li&gt;A lot of processing power on the robot&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Could someone help elaborate this list for me or tell me if I'm completely wrong?&lt;/p&gt;&#xA;" OwnerUserId="22640" LastActivityDate="2019-11-01T10:00:04.607" Title="Variables that Improve SLAM" Tags="&lt;mobile-robot&gt;&lt;slam&gt;&lt;autonomous-car&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19384" PostTypeId="2" ParentId="19376" CreationDate="2019-08-29T14:17:54.370" Score="0" Body="&lt;p&gt;First you need to specify your target payload and then the target velocity/acceleration for moving this payload. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;After this, I would start with an inverse kinematic model of the robot (incl. higher order models for velocity and acceleration). A kinematic model can map end effector position, velocity and acceleration to joint position, velocity and acceleration. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based on this, you can develop a dynamic model of the robot. This will have the role of translating the target payload mass, position, velocity and acceleration to joint torques, velocities and accelerations. Please note that this is position dependent, so you might want to find the worst case position. Also, a different worst case configuration is expected for all joints.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based on the maximum joint performance you should calculate the power needed for the joints to narrow down possible motors and get to the required torque and velocity/acceleration using a motor and a gearbox combination. Please note also that the drive amplifier used for the motor will also have an affect on the dynamic performance of the motor (but in many cases this is negligible).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The above modelling does not necessarily have to be analytic modelling. Numerical simulation can also be used, but care must be taken when identifying worst case configurations. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Motor selection cannot be generally solved. It is always a case by case decision. For hobbyist robots RC-Servos can be an easy way to start and get into robotics. One step towards complexity would be to use a DC motor with a simple drive amplifier. In commercially available industrial robots PMSMs (Permanent Magnet Synchronous Motors) are the most often used motor types.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2019-08-29T14:23:23.760" LastActivityDate="2019-08-29T14:23:23.760" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19385" PostTypeId="1" CreationDate="2019-08-29T14:47:10.497" Score="2" ViewCount="45" Body="&lt;p&gt;I am controlling a robotic system using a dspic33E. I have a few PID control loops for motor control, several SPI slaves, and an I2C master that I communicate with. Currently, I use interrupts for setting flags which I then address in a tasks loop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I am now starting to add in some orientation filtering/fusion which takes a few milliseconds to compute. This is unacceptable for my motor controllers and communication channels, so I was thinking about moving all of the computation related to those modules (motor control, SPI, I2C) into their respective ISR's (instead of setting flags, addressing them in the tasks loop).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The dsPIC33E has 7 interrupt priorities, so I can effectively structure the interrupts so that the higher priority timings are met, and then just do the orientation filtering/fusion in my tasks loop and have it be interrupted when needed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This seems like a good structure to me, however I've been taught not to spend too  much time in ISR's. Does the ISR priority structure effectively mitigate any issues I would run into with this? Is this a bad idea? Or are there just some things I need to look out for?&lt;/p&gt;&#xA;" OwnerUserId="21140" LastEditorUserId="21140" LastEditDate="2019-08-29T18:39:20.023" LastActivityDate="2021-05-20T23:04:45.450" Title="Problem with moving heavy computation into ISR's (dspic33E)?" Tags="&lt;c&gt;&lt;interrupts&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19386" PostTypeId="2" ParentId="19383" CreationDate="2019-08-29T14:47:56.693" Score="2" Body="&lt;p&gt;If you are restricted to camera-only SLAM you are on a good track. You mentioned a robot, do you use its odometry? &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;How good is your extrinsic robot-camera calibration?&lt;/li&gt;&#xA;&lt;li&gt;How good is your intrinsic camera calibration?&lt;/li&gt;&#xA;&lt;li&gt;Could you add a better IMU? &lt;/li&gt;&#xA;&lt;li&gt;Could you improve the Odometry by changing the wheels or the floor? &lt;/li&gt;&#xA;&lt;li&gt;Can you add other sensors like a laserscanner?&lt;/li&gt;&#xA;&lt;li&gt;Does your camera have a rolling shutter or global shutter? &lt;/li&gt;&#xA;&lt;li&gt;Do you exactly know when the image acquisition was started (e.g. because it was triggered by a hardware trigger?)&lt;/li&gt;&#xA;&lt;li&gt;Which opening angle does your camera have? (bigger would be better if you can handle lens distortion)&lt;/li&gt;&#xA;&lt;li&gt;Can you add artificial landmarks (e.g. QR-Marker) in the scene? &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="23196" LastActivityDate="2019-08-29T14:47:56.693" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19387" PostTypeId="1" CreationDate="2019-08-29T15:27:04.533" Score="0" ViewCount="66" Body="&lt;p&gt;I am creating a floor cleaning robot with obstacle detection as my final year project. The basic task of the robot is to clean the floor while avoiding obstacles using an ultrasonic sensor. The travelling path needs to be in an S shape to cover entire area of the floor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What easy algorithms are suitable for vacuum cleaning and turning automatically with the help of ultrasonic obstacle avoidance?&lt;/p&gt;&#xA;" OwnerUserId="23714" LastEditorUserId="37" LastEditDate="2019-08-30T16:52:11.380" LastActivityDate="2019-08-30T16:52:11.380" Title="Path planning algorithm to run my floor cleaning robot/zig zag path travel" Tags="&lt;arduino&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19389" PostTypeId="2" ParentId="19385" CreationDate="2019-08-29T19:48:06.517" Score="0" Body="&lt;p&gt;A great article on this approach is &lt;a href=&quot;https://www.embedded.com/design/prototyping-and-development/4025691/Build-a-Super-Simple-Tasker&quot; rel=&quot;nofollow noreferrer&quot;&gt;Build a super simple Tasker&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have implemented this on dsPIC33e mcu's.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The biggest issue I faced was priority inversions that came from me trying to share information between tasks with global variables. Once I started using the typical IPC techniques to move information between tasks，it all worked well.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2019-08-29T19:48:06.517" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19390" PostTypeId="1" CreationDate="2019-08-29T20:28:51.017" Score="0" ViewCount="966" Body="&lt;p&gt;I am using a Logitech F710 joystick game controller in ROS Kinetic Kame. I was able to perform &lt;code&gt;jstest&lt;/code&gt; testing, and can see my joystick works well. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But when I try to use joystick with Turtlesim or with simple teleop_twist_joy, I see this error :&lt;code&gt;[ERROR] [1567106281.990244467]: Couldn't open joystick force feedback!&lt;/code&gt; and there is no response on the screen in turtlesim or in the terminal itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's entire terminal log:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$user@user: roslaunch teleop_twist_joy teleop.launch ... logging to /home/sma1/.ros/log/2bdd147a-ca8f-11e9-80dc-5891cf766ee3/roslaunch-user-14722.log&#xA;Checking log directory for disk usage. This may take awhile.&#xA;Press Ctrl-C to interrupt&#xA;Done checking log file disk usage. Usage is &amp;lt;1GB.&#xA;&#xA;started roslaunch server http://user:44089/&#xA;&#xA;SUMMARY&#xA;========&#xA;&#xA;PARAMETERS&#xA; * /joy_node/autorepeat_rate: 20&#xA; * /joy_node/deadzone: 0.3&#xA; * /joy_node/dev: /dev/input/js0&#xA; * /rosdistro: kinetic&#xA; * /rosversion: 1.12.14&#xA; * /teleop_twist_joy/axis_angular: 0&#xA; * /teleop_twist_joy/axis_linear: 1&#xA; * /teleop_twist_joy/enable_button: 8&#xA; * /teleop_twist_joy/enable_turbo_button: 10&#xA; * /teleop_twist_joy/scale_angular: 0.4&#xA; * /teleop_twist_joy/scale_linear: 0.7&#xA; * /teleop_twist_joy/scale_linear_turbo: 1.5&#xA;&#xA;NODES&#xA;  /&#xA;    joy_node (joy/joy_node)&#xA;    teleop_twist_joy (teleop_twist_joy/teleop_node)&#xA;&#xA;ROS_MASTER_URI=http://localhost:11311&#xA;&#xA;process[joy_node-1]: started with pid [14739]&#xA;process[teleop_twist_joy-2]: started with pid [14740]&#xA;[ERROR] [1567106281.990244467]: Couldn't open joystick force feedback!&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="22915" LastEditorUserId="22915" LastEditDate="2019-08-29T23:46:00.870" LastActivityDate="2021-05-21T16:08:50.797" Title="teleop_twist_joy with Logitech F710 Joystick force feedback error" Tags="&lt;mobile-robot&gt;&lt;control&gt;&lt;ros&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19391" PostTypeId="1" AcceptedAnswerId="19395" CreationDate="2019-08-30T04:23:17.573" Score="0" ViewCount="61" Body="&lt;p&gt;I am new to the art of building quadcopters and am looking to build a camera platform with a payload of 250g. With the following setup would that be possible or could someone point me in the direction of calculations to find out the answer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a 450 frame that weighs 363g. My motors and escs are ~200g and my flight computer and transmitter are ~20 g. And my battery weighs in at 254g&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am using 2212 brushless motors at 1000 kv. My battery is a 3s lipo with a 30c discharge rate (4000mAh) and the props I am using are 1045 nylon carbon props.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any and all help would be greatly appreciated, if you need any further I’d be happy to comply.&lt;/p&gt;&#xA;" OwnerUserId="23719" LastActivityDate="2019-08-30T09:39:43.347" Title="Drone Payload Potential" Tags="&lt;quadcopter&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19392" PostTypeId="2" ParentId="19177" CreationDate="2019-08-30T05:43:44.660" Score="0" Body="&lt;p&gt;Sounds like some kind of stiction, between individual paper sheets.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How about:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Suck three or five sheets.&lt;/li&gt;&#xA;&lt;li&gt;Do some secondary manipulation to remove the additional sheets. Like lateral motion, twisting etc. Think about how you get rid of extra sheets when turning a book page. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="23720" LastEditorUserId="9176" LastEditDate="2019-08-30T16:54:10.927" LastActivityDate="2019-08-30T16:54:10.927" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19394" PostTypeId="2" ParentId="19177" CreationDate="2019-08-30T09:38:36.913" Score="0" Body="&lt;p&gt;I have in mind the following:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;When placing the stack of sheets, make sure that they are not bound at the edges, due to the cutting. Just &quot;wave&quot; the stack of sheets (the edges are enough) to separate them.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Move the top-most sheet horizontally (sliding movement) using some rubber rolls. This system is used in pretty much all printers.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Pick the separated sheet of paper. Or keep sliding it until it reaches the next machine.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="22248" LastActivityDate="2019-08-30T09:38:36.913" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19395" PostTypeId="2" ParentId="19391" CreationDate="2019-08-30T09:39:43.347" Score="0" Body="&lt;p&gt;Perhaps &lt;a href=&quot;https://www.omnicalculator.com/other/drone-motor&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; link would be of some help.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The key here is to have a payload to thrust ratio of 1:2. The thrust of your motors can be found on the datasheet and also based on the power produced, the battery and the props.&lt;/p&gt;&#xA;" OwnerUserId="23724" LastActivityDate="2019-08-30T09:39:43.347" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19396" PostTypeId="1" CreationDate="2019-08-30T12:37:26.140" Score="0" ViewCount="34" Body="&lt;p&gt;I would like to know how to transform a setpoint to inputs for the motors of a quadcopter. I would like a function like that: &lt;/p&gt;&#xA;&#xA;&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;def goto(x, y, z):&#xA;  # ...&#xA;  # Magic happens here&#xA;  # ...&#xA;  return [thrust1, thrust2, thrust3, thrust4]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I can't seem to find good documentation on how to do that so my research keywords must be lacking something. If you could point me to some good resources I would be glad to see them.&lt;/p&gt;&#xA;" OwnerUserId="23725" LastActivityDate="2019-08-30T16:32:32.923" Title="Autonomous quadcopter: How to transform setpoint into motor inputs?" Tags="&lt;control&gt;&lt;quadcopter&gt;&lt;uav&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19397" PostTypeId="2" ParentId="19396" CreationDate="2019-08-30T13:57:16.120" Score="1" Body="&lt;p&gt;Here here are a couple of papers that solve the problem you are interested in.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://arxiv.org/pdf/1109.4457&quot; rel=&quot;nofollow noreferrer&quot;&gt;Nonlinear Robust Tracking Control of a Quadrotor UAV on SE(3)&lt;/a&gt;&#xA;by Taeyoung Lee, Melvin Leok and N. Harris McClamroch&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://dspace.mit.edu/bitstream/handle/1721.1/106840/Roy_Polynomial%20trajectory.pdf?sequence=1&amp;amp;isAllowed=y&quot; rel=&quot;nofollow noreferrer&quot;&gt;Polynomial Trajectory Planning for Aggressive Quadrotor Flight in Dense Indoor Environments&lt;/a&gt; by Charles Richter, Adam Bry, and Nicholas Roy&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="8842" LastEditorUserId="37" LastEditDate="2019-08-30T16:32:32.923" LastActivityDate="2019-08-30T16:32:32.923" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19398" PostTypeId="2" ParentId="19390" CreationDate="2019-08-30T15:48:26.927" Score="0" Body="&lt;p&gt;I think your ROS joy node isn't configured correctly, which would explain the failure with &lt;code&gt;teleop_twist_joy&lt;/code&gt;, because that package subscribes to &lt;code&gt;sensor_msgs/Joy&lt;/code&gt;. You said that the joystick is working with &lt;code&gt;jstest&lt;/code&gt;, but that's a test to see if your machine can use the joystick. It's not a ROS test.&lt;/p&gt;&#xA;&lt;p&gt;You said you &lt;a href=&quot;http://wiki.ros.org/joy/Tutorials/ConfiguringALinuxJoystick&quot; rel=&quot;nofollow noreferrer&quot;&gt;followed the Configure a Joystick tutorial&lt;/a&gt;; what do you get when you do the following (from the tutorial):&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Now let's make the joystick accessible for the ROS joy node. Start by listing the permissions of the joystick:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;$ ls -l /dev/input/jsX&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;You will see something similar to:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;crw-rw-XX- 1 root dialout 188, 0 2009-08-14 12:04 /dev/input/jsX&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;If XX is rw: the js device is configured properly.&lt;/p&gt;&#xA;&lt;p&gt;If XX is --: the js device is not configured properly and you need to:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;$ sudo chmod a+rw /dev/input/jsX&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;What do you get when you try to listen to the &lt;code&gt;sensor_msgs/Joy&lt;/code&gt; output?&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;code&gt;$ rostopic echo joy&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2019-08-30T15:48:26.927" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19399" PostTypeId="1" AcceptedAnswerId="19400" CreationDate="2019-08-30T19:21:04.690" Score="1" ViewCount="604" Body="&lt;p&gt;I am new to ROS. I tried to read the documentation regarding nodelets on ROS wiki. But I couldn't understand it very well. I would like to know what is a nodelets in simple and intuitive terms&lt;/p&gt;&#xA;" OwnerUserId="23729" LastActivityDate="2019-09-02T13:04:24.400" Title="What exactly is a nodelet?" Tags="&lt;ros&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19400" PostTypeId="2" ParentId="19399" CreationDate="2019-08-30T20:49:57.753" Score="3" Body="&lt;p&gt;Regular nodes share data by passing messages over TCP. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nodelets share data by sharing a pointer to a block of memory. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, for a regular node, you've got to collect all the data, pack it into a ROS form, and then write the entire data packet, and then the receiver has to read the thing and unpack it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nodelets only work where there is memory to be shared (i.e., the same physical machine), so you can't use them for networked devices. But you could have something like a laser scanner, which produces a breathtaking amount of data, connected via nodelet to a process that extracts something of meaning from that data. The extraction process could then be connected via a regular node to some networked device and pass only the important results from the scan data analysis. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2019-08-30T20:49:57.753" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19401" PostTypeId="1" CreationDate="2019-08-31T00:03:53.000" Score="0" ViewCount="71" Body="&lt;p&gt;I have a question regarding calculating the ticks in a sensored BLDC. The BLDC has three hall effect sensors with slightly differing phasing and there are 30 magnets in 360 degrees of wheel rotation. I have seen coding examples where two hall effect sensors are used to calculate the ticks by incrementing or decrementing depending of the value of both signals. For example this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/1988kramer/motor_control/blob/master/Encoder.cpp&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/1988kramer/motor_control/blob/master/Encoder.cpp&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Right now, I’m just using the signal of two hall effect sensors to calculate the ticks and seems to be working fine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is: Should I use the three signals? Or it is enough with two to know when to decrement or increment the ticks.&lt;/p&gt;&#xA;" OwnerUserId="23677" LastEditorUserId="20571" LastEditDate="2019-09-02T00:15:15.280" LastActivityDate="2020-02-01T20:02:00.277" Title="Calculate ticks with three encoders?" Tags="&lt;brushless-motor&gt;&lt;quadrature-encoder&gt;&lt;hall-sensor&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19402" PostTypeId="2" ParentId="19152" CreationDate="2019-08-31T10:55:39.570" Score="2" Body="&lt;p&gt;Our goal is to find a recursive expression for &lt;span class=&quot;math-container&quot;&gt;$ P\left(\mathrm{x}_{k},\mathrm{m} | \mathrm{Z}_{0:k}, \mathrm{U}_{0:k},\mathrm{x}_{0}\right)$&lt;/span&gt;. This expression is called the belief for the robot's state &lt;span class=&quot;math-container&quot;&gt;$\mathrm{x}_{k}$&lt;/span&gt; and the map &lt;span class=&quot;math-container&quot;&gt;$\mathrm{m}$&lt;/span&gt; given all the measurements &lt;span class=&quot;math-container&quot;&gt;$\mathrm{Z}_{0:k} = (\mathrm{z}_{0},..., \mathrm{z}_{k})$&lt;/span&gt;, the control actions &lt;span class=&quot;math-container&quot;&gt;$\mathrm{U}_{0:k} = (\mathrm{u}_{0},..., \mathrm{u}_{k})$&lt;/span&gt; and the robot's initial state &lt;span class=&quot;math-container&quot;&gt;$\mathrm{x}_{0}$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;First, let us write the down the Markov assumptions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Motion model: &lt;span class=&quot;math-container&quot;&gt;$P\left( \mathrm{x}_{k} | \mathrm{x}_{k-1}, \mathrm{m}, \mathrm{Z}_{0:k-1}, \mathrm{U}_{0:k}, \mathrm{x}_{0} \right) = P\left(\mathrm{x}_{k} | \mathrm{x}_{k-1}, \mathrm{u}_{k} \right)$&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Observation model: &lt;span class=&quot;math-container&quot;&gt;$P\left( \mathrm{z}_{k} | \mathrm{x}_{k}, \mathrm{m}, \mathrm{Z}_{0:k-1}, \mathrm{U}_{0:k}, \mathrm{x}_{0} \right) = P\left( \mathrm{z}_{k} | \mathrm{x}_{k}, \mathrm{m} \right) $&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;By using the Bayes' rule, we can pull &lt;span class=&quot;math-container&quot;&gt;$z_{k}$&lt;/span&gt; to the left of &quot;&lt;span class=&quot;math-container&quot;&gt;$|$&lt;/span&gt;&quot;:&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ P\left(\mathrm{x}_{k},\mathrm{m} | \mathrm{Z}_{0:k}, \mathrm{U}_{0:k},\mathrm{x}_{0}\right) = \eta P\left( \mathrm{z}_{k} | \mathrm{x}_{k}, \mathrm{m}, \mathrm{Z}_{0:k-1}, \mathrm{U}_{0:k}, \mathrm{x}_{0} \right) P\left( \mathrm{x}_{k}, \mathrm{m}, \mathrm{Z}_{0:k-1}, \mathrm{U}_{0:k}, \mathrm{x}_{0} \right) $$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;3&quot;&gt;&#xA;&lt;li&gt;By using the Markov assumption regarding the observation model, we can simplify the term &lt;span class=&quot;math-container&quot;&gt;$P\left( \mathrm{z}_{k} | \mathrm{x}_{k}, \mathrm{m}, \mathrm{Z}_{0:k-1}, \mathrm{U}_{0:k}, \mathrm{x}_{0} \right)$&lt;/span&gt;:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ P\left(\mathrm{x}_{k},\mathrm{m} | \mathrm{Z}_{0:k}, \mathrm{U}_{0:k},\mathrm{x}_{0}\right) = \eta P\left( \mathrm{z}_{k} | \mathrm{x}_{k}, \mathrm{m} \right) P\left( \mathrm{x}_{k}, \mathrm{m}, \mathrm{Z}_{0:k-1}, \mathrm{U}_{0:k}, \mathrm{x}_{0} \right) $$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;4&quot;&gt;&#xA;&lt;li&gt;By using the total probability theorem, we can rewrite the term &lt;span class=&quot;math-container&quot;&gt;$P\left( \mathrm{x}_{k}, \mathrm{m}, \mathrm{Z}_{0:k-1}, \mathrm{U}_{0:k}, \mathrm{x}_{0} \right) $&lt;/span&gt; as a marginalization integral over &lt;span class=&quot;math-container&quot;&gt;$\mathrm{x}_{k-1}$&lt;/span&gt;:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ P\left(\mathrm{x}_{k},\mathrm{m} | \mathrm{Z}_{0:k}, \mathrm{U}_{0:k},\mathrm{x}_{0}\right) = \eta P\left( \mathrm{z}_{k} | \mathrm{x}_{k}, \mathrm{m} \right) \int P\left( \mathrm{x}_{k}, \mathrm{m}, \mathrm{Z}_{0:k-1}, \mathrm{U}_{0:k}, \mathrm{x}_{0}, \mathrm{x}_{k-1} \right) \mathrm{dx}_{k-1} $$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;5&quot;&gt;&#xA;&lt;li&gt;By using the Bayes' rule, we can rewrite the term &lt;span class=&quot;math-container&quot;&gt;$P\left( \mathrm{x}_{k}, \mathrm{m}, \mathrm{Z}_{0:k-1}, \mathrm{U}_{0:k}, \mathrm{x}_{0}, \mathrm{x}_{k-1} \right)$&lt;/span&gt; in terms of conditional probability:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ P\left(\mathrm{x}_{k},\mathrm{m} | \mathrm{Z}_{0:k}, \mathrm{U}_{0:k},\mathrm{x}_{0}\right) = \eta P\left( \mathrm{z}_{k} | \mathrm{x}_{k}, \mathrm{m} \right) \int P\left( \mathrm{x}_{k} | \mathrm{x}_{k-1}, \mathrm{m}, \mathrm{Z}_{0:k-1}, \mathrm{U}_{0:k}, \mathrm{x}_{0} \right) P\left( \mathrm{x}_{k-1}, \mathrm{m}, \mathrm{Z}_{0:k-1}, \mathrm{U}_{0:k}, \mathrm{x}_{0} \right)  \mathrm{dx}_{k-1} $$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;6&quot;&gt;&#xA;&lt;li&gt;By using the Markov assumption regarding the motion model, we can simplify the term &lt;span class=&quot;math-container&quot;&gt;$P\left( \mathrm{x}_{k} | \mathrm{x}_{k-1}, \mathrm{m}, \mathrm{Z}_{0:k-1}, \mathrm{U}_{0:k}, \mathrm{x}_{0} \right)$&lt;/span&gt;:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ P\left(\mathrm{x}_{k},\mathrm{m} | \mathrm{Z}_{0:k}, \mathrm{U}_{0:k},\mathrm{x}_{0}\right) = \eta P\left( \mathrm{z}_{k} | \mathrm{x}_{k}, \mathrm{m} \right) \int P\left( \mathrm{x}_{k} | \mathrm{x}_{k-1}, \mathrm{u}_{k} \right) P\left( \mathrm{x}_{k-1}, \mathrm{m}, \mathrm{Z}_{0:k-1}, \mathrm{U}_{0:k}, \mathrm{x}_{0} \right)  \mathrm{dx}_{k-1} $$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;7&quot;&gt;&#xA;&lt;li&gt;By using the Bayes' rule, we can rewrite the term &lt;span class=&quot;math-container&quot;&gt;$P\left( \mathrm{x}_{k-1}, \mathrm{m}, \mathrm{Z}_{0:k-1}, \mathrm{U}_{0:k}, \mathrm{x}_{0} \right) $&lt;/span&gt; in terms of conditional probability:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ P\left(\mathrm{x}_{k},\mathrm{m} | \mathrm{Z}_{0:k}, \mathrm{U}_{0:k},\mathrm{x}_{0}\right) = \eta P\left( \mathrm{z}_{k} | \mathrm{x}_{k}, \mathrm{m} \right) \int P\left( \mathrm{x}_{k} | \mathrm{x}_{k-1}, \mathrm{u}_{k} \right) P\left( \mathrm{x}_{k-1}, \mathrm{m} | \mathrm{Z}_{0:k-1}, \mathrm{U}_{0:k}, \mathrm{x}_{0} \right) P\left( \mathrm{Z}_{0:k-1}, \mathrm{U}_{0:k}, \mathrm{x}_{0} \right)\mathrm{dx}_{k-1} $$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;8&quot;&gt;&#xA;&lt;li&gt;By using the fact that &lt;span class=&quot;math-container&quot;&gt;$(\mathrm{x}_{k-1}, \mathrm{m})$&lt;/span&gt; is independent from the future action &lt;span class=&quot;math-container&quot;&gt;$\mathrm{u}_{k}$&lt;/span&gt;, we can simplify the term &lt;span class=&quot;math-container&quot;&gt;$P\left( \mathrm{x}_{k-1}, \mathrm{m} | \mathrm{Z}_{0:k-1}, \mathrm{U}_{0:k}, \mathrm{x}_{0} \right)$&lt;/span&gt;: &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ P\left(\mathrm{x}_{k},\mathrm{m} | \mathrm{Z}_{0:k}, \mathrm{U}_{0:k},\mathrm{x}_{0}\right) = \eta P\left( \mathrm{z}_{k} | \mathrm{x}_{k}, \mathrm{m} \right) \int P\left( \mathrm{x}_{k} | \mathrm{x}_{k-1}, \mathrm{u}_{k} \right) P\left( \mathrm{x}_{k-1}, \mathrm{m} | \mathrm{Z}_{0:k-1}, \mathrm{U}_{0:k-1}, \mathrm{x}_{0} \right) P\left( \mathrm{Z}_{0:k-1}, \mathrm{U}_{0:k}, \mathrm{x}_{0} \right) \mathrm{dx}_{k-1} $$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;9&quot;&gt;&#xA;&lt;li&gt;The term &lt;span class=&quot;math-container&quot;&gt;$P\left( \mathrm{Z}_{0:k-1}, \mathrm{U}_{0:k}, \mathrm{x}_{0} \right)$&lt;/span&gt; is a constant within the integral. It can be taken out and fused into &lt;span class=&quot;math-container&quot;&gt;$\eta$&lt;/span&gt; coefficient: &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ P\left(\mathrm{x}_{k},\mathrm{m} | \mathrm{Z}_{0:k}, \mathrm{U}_{0:k},\mathrm{x}_{0}\right) = \eta P\left( \mathrm{z}_{k} | \mathrm{x}_{k}, \mathrm{m} \right) \int P\left( \mathrm{x}_{k} | \mathrm{x}_{k-1}, \mathrm{u}_{k} \right) P\left( \mathrm{x}_{k-1}, \mathrm{m} | \mathrm{Z}_{0:k-1}, \mathrm{U}_{0:k-1}, \mathrm{x}_{0} \right) \mathrm{dx}_{k-1} $$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, the integral expression, that computes the belief before incorporating the measurement &lt;span class=&quot;math-container&quot;&gt;$\mathrm{z}_{k}$&lt;/span&gt;, is the time update equation (aka prediction step):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ P\left(\mathrm{x}_{k},\mathrm{m} | \mathrm{Z}_{0:k-1}, \mathrm{U}_{0:k},\mathrm{x}_{0}\right) = \int P\left( \mathrm{x}_{k} | \mathrm{x}_{k-1}, \mathrm{u}_{k} \right) \times P\left( \mathrm{x}_{k-1}, \mathrm{m} | \mathrm{Z}_{0:k-1}, \mathrm{U}_{0:k-1}, \mathrm{x}_{0} \right) \mathrm{dx}_{k-1} $$&lt;/span&gt;&lt;/p&gt;&#xA;" OwnerUserId="23646" LastEditorUserId="23646" LastEditDate="2019-08-31T19:21:29.940" LastActivityDate="2019-08-31T19:21:29.940" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19403" PostTypeId="1" CreationDate="2019-08-31T16:50:35.017" Score="0" ViewCount="23" Body="&lt;p&gt;Bought this robot called AlphaBot2. Has sample code here:&#xA;&lt;a href=&quot;https://www.waveshare.com/wiki/File:AlphaBot_Demo.7z&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.waveshare.com/wiki/File:AlphaBot_Demo.7z&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I am interested in knowing is how do I convert these Python samples to C# with .NET Core to run on Windows 10 Iot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Look forward to your suggestions.&lt;/p&gt;&#xA;" OwnerUserId="22364" LastActivityDate="2019-08-31T16:50:35.017" Title="AlphaBot2 run / migrate to .NET Core" Tags="&lt;wheeled-robot&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19404" PostTypeId="2" ParentId="10463" CreationDate="2019-08-31T18:08:50.927" Score="0" Body="&lt;p&gt;I think Q-learning is an overkill for such a simple tracking problem. I highly recommend you using a simpler method, namely pure pursuit tracking controller. Here are some links that you can read about the method. Matlab's page on the subject is pretty neat.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.mathworks.com/help/robotics/ug/pure-pursuit-controller.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Matlab's Pure Pursuit Controller&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.ri.cmu.edu/pub_files/pub3/coulter_r_craig_1992_1/coulter_r_craig_1992_1.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Implementation of the Pure Pursuit Path Tracking Algorithm&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="23646" LastActivityDate="2019-08-31T18:08:50.927" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19405" PostTypeId="1" AcceptedAnswerId="19406" CreationDate="2019-09-01T04:42:42.773" Score="-1" ViewCount="305" Body="&lt;p&gt;I bought the following servo: &lt;a href=&quot;https://www.amazon.ca/gp/product/B07N2PLF6W/ref=ppx_yo_dt_b_asin_title_o06_s00?ie=UTF8&amp;amp;psc=1#detail_bullets_id&quot; rel=&quot;nofollow noreferrer&quot;&gt;D DOLITY High Speed 360 Degree Continuous Rotation Servo for Robotic(15kg/cm) Metal Gears Servo&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm trying to get it to spin in one direction continuously, but it looks like it can only go 180 degrees and then stops. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there something wrong with my code that is making it stop at 180 degrees or is the product falsely advertised as a 360° continuous rotation servo? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the Arduino code I'm using: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Servo myservo;  //Servo name is myservo&#xA;&#xA;void setup() {&#xA;  Serial.begin(9600);&#xA;  myservo.attach(9);  // attaches the servo signal pin on pin D6&#xA;}&#xA;&#xA;void loop() {&#xA;  Serial.println(&quot;0&quot;);// You can display on the serial the signal value&#xA;  myservo.write(0); //Turn clockwise at high speed&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="23733" LastEditorUserId="9176" LastEditDate="2019-09-01T08:44:58.650" LastActivityDate="2019-09-01T22:01:51.393" Title="360 Continuous Rotation Servo only goes 180 degrees" Tags="&lt;arduino&gt;&lt;servomotor&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19406" PostTypeId="2" ParentId="19405" CreationDate="2019-09-01T22:01:51.393" Score="0" Body="&lt;p&gt;Since you already determined that the servo acts as a positional servo, and not as a continuous rotation servo, then it is not a continuous rotation servo.&lt;/p&gt;&#xA;" OwnerUserId="19143" LastActivityDate="2019-09-01T22:01:51.393" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19407" PostTypeId="1" CreationDate="2019-09-02T11:30:47.907" Score="0" ViewCount="210" Body="&lt;p&gt;I'm using a SICK S300 safety scanner connected via RS422 -&gt; USB and I'm trying to decode the lines of data into meaningful values, however looking at the data compared to the &lt;a href=&quot;https://cdn.sick.com/media/docs/2/92/892/Telegram_listing_S3000_Standard_Advanced_Professional_Remote_S300_Standard_Advanced_Professional_de_en_IM0022892.PDF&quot; rel=&quot;nofollow noreferrer&quot;&gt;Telegram Listing&lt;/a&gt; it seems almost impossible due to the many differing values. Has anyone done this before?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've tried using ROS and found difficulties doing so, especially as the package for the S300 doesn't support reflectors, which would be preffered.&lt;/p&gt;&#xA;" OwnerUserId="23696" LastActivityDate="2019-09-02T19:23:25.673" Title="Understanding the SICK S300 RS422 data output" Tags="&lt;sensors&gt;&lt;ros&gt;&lt;laser&gt;&lt;usb&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19408" PostTypeId="2" ParentId="19407" CreationDate="2019-09-02T12:55:09.597" Score="1" Body="&lt;p&gt;According to the SICK 300 &lt;a href=&quot;http://wiki.ros.org/cob_sick_s300&quot; rel=&quot;nofollow noreferrer&quot;&gt;driver in ROS&lt;/a&gt;, your endpoint data will be a &lt;a href=&quot;http://docs.ros.org/api/sensor_msgs/html/msg/LaserScan.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;sensor_msgs/LaserScan&lt;/code&gt;&lt;/a&gt; ROS message, which you could reach to its values such as &lt;code&gt;ranges[]&lt;/code&gt; and &lt;code&gt;intensities[]&lt;/code&gt; by the specified topic.&lt;/p&gt;&#xA;" OwnerUserId="18870" LastActivityDate="2019-09-02T12:55:09.597" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19409" PostTypeId="2" ParentId="19399" CreationDate="2019-09-02T13:04:24.400" Score="0" Body="&lt;h1&gt;TL;DR&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;nodelet&lt;/code&gt; is a package for fast communication (based on shared memory heap) instead of using ROS TCP communication.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This image demonstrates their differences:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/sMTa9.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/sMTa9.png&quot; alt=&quot;nodelet vs TCP ROS&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18870" LastActivityDate="2019-09-02T13:04:24.400" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19410" PostTypeId="2" ParentId="19407" CreationDate="2019-09-02T14:46:44.033" Score="0" Body="&lt;p&gt;The source code for decoding the telegram coming from the serial interface can be found &lt;a href=&quot;https://github.com/RobotnikAutomation/sick_s300_laser/blob/master/src/ScannerSickS300.cpp&quot; rel=&quot;nofollow noreferrer&quot;&gt;here.&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The actual decoding is in the getScan() function at line 160. after identifying the required part of the telegram (which as it seems, comes form multiple readings of the serial port), the scan data is converted to Polar coordinates using the convertScanToPolar() function in line 196&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2019-09-02T14:46:44.033" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19411" PostTypeId="1" AcceptedAnswerId="19413" CreationDate="2019-09-02T15:54:52.533" Score="0" ViewCount="219" Body="&lt;p&gt;I've got this board from a local store. It's an L293D based dual DC motor driver. All the pins are labelled except the 5 on the bottom as shown in the picture below. Couldn't find any datasheet or manual for using this board.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/26kcO.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/26kcO.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've connected the board's Vcc to Arduino's 5V and board's ground to Arduio's GND. Then put the IN1 to HIGH and IN2 to low, and got a voltage of 4.3 across the motor A's terminals.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now what I want to do is use an external power source (11.1V battery) for the motor terminals, &lt;strong&gt;NOT&lt;/strong&gt; the Arduino's &lt;strong&gt;5V&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Are there any &lt;strong&gt;datasheet/manual&lt;/strong&gt; for this board?&lt;/li&gt;&#xA;&lt;li&gt;How do I use &lt;strong&gt;external&lt;/strong&gt; power source with this board?&lt;/li&gt;&#xA;&lt;li&gt;What are the &lt;strong&gt;pin-out/labels&lt;/strong&gt; for those 5 pins annotated with a red&#xA;box in the picture above?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="23737" LastEditorUserId="37" LastEditDate="2019-09-06T16:52:36.403" LastActivityDate="2019-09-06T16:52:36.403" Title="Unlabelled pins on this L293D dual DC motor driver" Tags="&lt;arduino&gt;&lt;motor&gt;&lt;driver&gt;&lt;identification&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19412" PostTypeId="2" ParentId="19407" CreationDate="2019-09-02T19:23:25.673" Score="0" Body="&lt;p&gt;To answer your question. Yes, myself and others have done this before.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In practice you only need a subset of the telegrams for a given application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think you would be surprised how quickly you can write what you need if you sit down and start coding.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you really get into it and handle all the telegrams, and are able to open the source code, I'm sure the community would appreciate it.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2019-09-02T19:23:25.673" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19413" PostTypeId="2" ParentId="19411" CreationDate="2019-09-03T13:18:19.053" Score="2" Body="&lt;p&gt;A Google Image search on &lt;a href=&quot;https://www.google.com/search?q=L293D+board&amp;amp;tbm=isch&quot; rel=&quot;nofollow noreferrer&quot;&gt;L293D board&lt;/a&gt; suggests that this is a widely available board manufactured by (or at least designed by) &lt;a href=&quot;http://www.deek-robot.com/productShow.asp?id=17&quot; rel=&quot;nofollow noreferrer&quot;&gt;Deek-Robot&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The 5 pin connector mostly duplicates pins on the 6 pin green terminal block:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.deek-robot.com/edit123/uploadfile/20131128182859312.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/RfvVrm.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suspect it is mostly useful for a quick motor connection when testing, whereas the green connector is used for a final motor connection.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that the &lt;a href=&quot;http://www.deek-robot.com/productShow.asp?id=17&quot; rel=&quot;nofollow noreferrer&quot;&gt;Deek-Robot product page&lt;/a&gt; includes a link to the (very simple) &lt;a href=&quot;http://www.deek-robot.com/admin/down/down/2013112818205273499.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;circuit diagram&lt;/a&gt; and a link to &lt;a href=&quot;http://www.deek-robot.com/admin/down/down/2013112818211373499.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;the L293D datasheet&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, note that this chip can get very hot when pushed close to it's limits. 4 of the 16 pins are designed to be heat sinks to the ground plane, but it looks like this board doesn't have a very good thermal connection, so you may want to consider attaching a chip heatsink to the top side of the chip with thermal glue if it gets too hot. I've even known people to solder the heatsink to the chip via the heatsink pins as the plastic chip packaging is quite thermally insulating.&lt;/p&gt;&#xA;" OwnerUserId="37" LastActivityDate="2019-09-03T13:18:19.053" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19414" PostTypeId="2" ParentId="19177" CreationDate="2019-09-03T15:47:56.770" Score="1" Body="&lt;p&gt;I think the primary problem you are seeing here is that you are trying to pick up ordinary paper, which is relatively porous. When I was working with suction cup systems we were dealing primarily with labels, so non porous, waxed backing paper. Our page turning systems used rubberised rollers rather than suction cups, even though we used pneumatics elsewhere in the page turning mechanism.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As the two videos show, with the waxed paper only one sheet at once is usually picked up, whereas with the more porous tissue, several are usually picked up. In fact the vacuum is so strong that with only a single tissue, the demonstrator was having trouble separating the suction cup from the table below.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I agree with &lt;a href=&quot;https://robotics.stackexchange.com/a/19178/37&quot;&gt;morbo&lt;/a&gt; that your system has way more suction than it needs, but I think it's probably easier to find the right balance experimentally than to try to work out from first principals, with all of the variables that aren't accounted for by the math. I think you need to get a stack of paper and your actuator (and possibly some alternatives) and find the limits of your system.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;You need to be able to control the vacuum&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Without being able to control the vacuum you are going to have a hard time controlling the behaviour of the system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As in the videos, you need to be able to see what the vacuum pressure is when picking up and holding the paper, so you need a relatively accurate vacuum gauge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depending on your characterisation of the system, you may only need variable vacuum control while performing that characterisation, but it may be that you need to vary the vacuum dynamically during different phases of your pick &amp;amp; place operation. Rather than just on/off you may need low vacuum to pick and lift a single sheet, followed by a switch to high vacuum befor a fast move to the &lt;em&gt;place&lt;/em&gt; location without dropping the paper.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How a variable vacuum is achieved is beyond the scope of this answer, but may involve a variable vacuum source, a variable regulator, a bypass or some king of pulsed source or bypass. The specifics are beyond my expertise. What I do know is that you need to characterise the behaviour of your system.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Characterise the behaviour of your suction cups&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Starting from a pressure too low to pick up any paper steadily increase the vacuum until it picks up one sheet. Then keep increasing the vacuum until it picks up two sheets. The vacuum at the mid point between the two should give you a good quick compromise between holding a single sheet securely and the risk of picking up a second sheet. Depending on the reliability you need though (99%, 99.9%, 5 nines) you may need to characterise your system more thoroughly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Repeat a pick-up attempt at each pressure enough times to build up confidence in how much variation there is in results. If vacuum &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; picks up 1 sheet 99% of the time and never picks up 2 sheets, while vacuum &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt; picks up 1 sheet every time, and 2 sheets 1% of the time you can surmise that you have a well characterised system and can probably rely on the midpoint to pretty reliably only pick up 1 sheet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If vacuum &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; picks up 1 sheet 80% of the time and 2 sheets 20% of the time, while vacuum &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt; picks up 1 sheet 20% of the time, and 2 sheets 80% of the time, then you may have to consider whether this is the right solution for you.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Check it behaves the same at the extremes&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;It may also be worth checking if behaviour is different when the stack of paper is full compared to when it is empty. If not, then you may have to chose a different compromise point to maximise the reliability over the whole paper refill lifetime. Alternatively, you may have to calculate vacuum pressures at the &lt;em&gt;pick&lt;/em&gt; location depending on the number of sheets in the stack (if you can't mechanically compensate for the stack height, as printers do).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, you may want to try running the same characterisation with 70gsm and 90gsm paper as well as at 80gsm. While there is little variation in commercially bought paper, you can never rule out customers choosing to buy cheaper thinner paper, or decide they need to use heavier paper stock for some jobs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my experience it's better to know about likely problems before they occur than have to deal with them in the middle of the night.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Frantic Customer: We filled the machine &amp;amp; it started picking up 2 sheets at once!&#xA;  &lt;br&gt;Bleery eyed Engineer: What did you change?&#xA;  &lt;br&gt;Apologetic customer: Oh, this job needed 70gsm paper&#xA;  &lt;br&gt;Resigned engineer: Ok, go into the .ini file and reduce the vacuum value by 20% then on Monday put in a change request to implement 70gsm paper support in the GUI&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;h2&gt;Conclusion&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Reliability only comes from testing, and testing again after every adjustment you make. Data gives you the ability to reason about the behaviour of your system, predict what changes will improve or impact on reliability and test hypotheses until you get what behaviour you need, or decide you need to a different solution.&lt;/p&gt;&#xA;" OwnerUserId="37" LastActivityDate="2019-09-03T15:47:56.770" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19415" PostTypeId="1" CreationDate="2019-09-04T17:13:35.827" Score="1" ViewCount="158" Body="&lt;p&gt;I'm looking at some &lt;a href=&quot;https://github.com/raulmur/ORB_SLAM2/blob/master/Examples/RGB-D/TUM1.yaml&quot; rel=&quot;nofollow noreferrer&quot;&gt;ORB SLAM2 settings&lt;/a&gt; where there's a parameter for &quot;IR projector baseline times fx&quot;. Could someone here explain what exactly is the baseline of an IR projector? Is it the distance between the IR projector lens and the IR camera lens? OR is it between the RGB camera and the IR camera?&lt;/p&gt;&#xA;" OwnerUserId="11489" LastActivityDate="2019-09-04T17:13:35.827" Title="What is the baseline of a RGBD camera?" Tags="&lt;cameras&gt;&lt;calibration&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19416" PostTypeId="2" ParentId="19264" CreationDate="2019-09-04T17:20:45.220" Score="2" Body="&lt;p&gt;You still haven't posted the (full) code that gives the results you've presented; when I run your snippet I don't the results you posted. Instead, I get:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[xdfb] = FDfb(sphere, xfb, [], [], [])&#xA;&#xA;xdfb =&#xA;&#xA;         0&#xA;   -2.5000&#xA;         0&#xA;         0&#xA;         0&#xA;   -1.0000&#xA;   -1.0000&#xA;         0&#xA;         0&#xA;         0&#xA;         0&#xA;    5.0000&#xA;  -14.8066&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Here &lt;code&gt;xdfb&lt;/code&gt; is the time-derivative of your input system &lt;code&gt;sphere&lt;/code&gt; and the initial conditions &lt;code&gt;xfb&lt;/code&gt;. It's a 13-element vector made up of the derivative of the things that comprise &lt;code&gt;xfb&lt;/code&gt;, which means:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;You have a quaternion derivative, &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;             0&#xA;       -2.5000&#xA;             0&#xA;             0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;You have a Cartesian velocity, and&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;             0&#xA;       -1.0000&#xA;       -1.0000&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;ol start=&quot;3&quot;&gt;&#xA;&lt;li&gt;You have a spatial acceleration.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;             0&#xA;             0&#xA;             0&#xA;             0&#xA;        5.0000&#xA;      -14.8066&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Note that here the spatial acceleration I have is &lt;em&gt;not&lt;/em&gt; what you've presented in your question, so I'm not positive that we're doing the same thing. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can use constant-acceleration equations to calculate future positions. For your y-values, there's no acceleration, so:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;y = y_0 + v_y \Delta t + \frac{1}{2} a_y \Delta t^2 \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;becomes&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;y = y_0 + v_y \Delta t \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For your starting position of &lt;span class=&quot;math-container&quot;&gt;$y_0 = 0$&lt;/span&gt; and starting speed of &lt;span class=&quot;math-container&quot;&gt;$v_y = -1$&lt;/span&gt;, after 30 seconds you should have:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;y = 0 + (-1)*30 \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;for the trivial result of &lt;span class=&quot;math-container&quot;&gt;$y = -30$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For z, you have a constant acceleration of gravity and a starting speed of -1, so you should have:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;z = 0 + (-1)*30 + (0.5)*(-9.8066)*(30^2) \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;for a result of &lt;span class=&quot;math-container&quot;&gt;$z = -4,443$&lt;/span&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I run the following after running your code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;t0 = 0;&#xA;tMax = 30;&#xA;dT = 0.001;&#xA;time = t0:dT:tMax;&#xA;&#xA;nSamples = numel(time);&#xA;&#xA;pos = zeros(3,nSamples);&#xA;&#xA;for i=1:nSamples&#xA;    % Forward Dynamic&#xA;    [xdfb] = FDfb(sphere, xfb, [], [], []);&#xA;    q = xfb(1:4);    &#xA;    dq = xdfb(1:4);&#xA;&#xA;    r = xfb(5:7);&#xA;    v = xdfb(5:7);&#xA;&#xA;    v_old = xfb(8:13);&#xA;    a = xdfb(8:13);&#xA;&#xA;    q = q + dq*dT;&#xA;    q = q./(norm(q)); % re-normalize the unit quaternion&#xA;    r = r + v*dT;&#xA;    v = v_old + a*dT;&#xA;&#xA;    pos(:,i) = r;&#xA;    xfb = [q;r;v];&#xA;end&#xA;plot3(pos(1,:),pos(2,:),pos(3,:));&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then I get:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt; pos(:,end)&#xA;&#xA;ans =&#xA;&#xA;   1.0e+03 *&#xA;&#xA;         0&#xA;   -0.0300&#xA;   -4.4431&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;There's a slight difference in the z-value from integration/rounding errors, but the y-value is correct. There's no problem in the output. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think the issue for you is kind of the same issue I had with the spatial vector formulation - it was really hard for me to conceptualize. I studied Featherstone's method for a while on my own and eventually gave up because of difficulties I had in trying to implement anything based on his work. I didn't (don't) have any formal classroom training on his spatial maths and so didn't have anyone to ask for help and didn't have the ability to get feedback on whether anything I was doing was correct or not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You've given the sphere a rotational speed of &lt;code&gt;-5&lt;/code&gt; about the x-axis, and this is how you're getting a y-axis term in the spatial acceleration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Frankly speaking, I've never had any education with regards to screw theory, Plücker coordinates, etc., so again I don't have any intuition here to be able to illuminate anything more for you. I'd like to say it's Coriolis forces or some other fictional force, but it's all a guess for me. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can look at the source code for &lt;code&gt;FDfb&lt;/code&gt; and see the conversion from your spatial velocities to local floating-body velocities. When I plot them, everything looks as expected - the sphere is spinning, so I see the speed oscillating between y- and z-axes, and it's in free-fall, so I see the magnitude of speed (on both axes) increasing. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, tl;dr - I can't explain how the &lt;em&gt;spatial&lt;/em&gt; velocities or accelerations are working, but the orientations and positions should all be coming out correct.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2019-09-04T17:20:45.220" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19417" PostTypeId="2" ParentId="19401" CreationDate="2019-09-04T19:40:43.030" Score="1" Body="&lt;p&gt;To measure position more accurately you need to use all three. They are used for choosing which motor phase to energise, which is called commutation. Searching for &quot;6 step commutation&quot; will give you lots of diagrams and info on how to estimate position this way.&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2019-09-04T19:40:43.030" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19418" PostTypeId="2" ParentId="19316" CreationDate="2019-09-04T23:36:14.997" Score="1" Body="&lt;p&gt;Sensor fusion is a process where you are gathering information from one or more sensors and inputting that data to your processor to process the data to make sense whether it is useful or not. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your case, you have a stereo camera, IMU and GPS. If your question is whether all of these sensors altogether will increase the accuracy of the map, then the answer is no. The stereo camera alone can produce good quality 3D point-clouds/maps, adding the IMU and GPS is not going to increase the accuracy of the quality of the data gathered from the stereo cam. But the GPS and IMU along with the stereo cam will help you increase the accuracy of the localisation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It also depends on what sensors you are using and their quality. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;TIP: If you are using a stereo camera on your robot/drone and planning to put in dark environments, or places with low light, add a few lights to light up the area which is being scanned by the stereo camera. &lt;/p&gt;&#xA;" OwnerUserId="23050" LastActivityDate="2019-09-04T23:36:14.997" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19419" PostTypeId="1" CreationDate="2019-09-05T22:42:51.877" Score="0" ViewCount="84" Body="&lt;p&gt;I'm using robot_localization to fuse odom, imu and gps data on a &lt;a href=&quot;http://wiki.ros.org/Robots/Husky&quot; rel=&quot;nofollow noreferrer&quot;&gt;husky robot&lt;/a&gt;. After fusion, the robot now moves forward in gazebo but sideways in rviz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found &lt;a href=&quot;https://robotics.stackexchange.com/questions/18806/robot-moving-sideways-in-rviz-ros/18903#18903&quot;&gt;this question&lt;/a&gt;. But the suggested solution didn't work for me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I sync husky's movement in both gazebo and rviz in the same direction?&lt;/p&gt;&#xA;" OwnerUserId="20911" LastActivityDate="2019-09-05T22:42:51.877" Title="Robot moves sideways in RVIZ ROS" Tags="&lt;ros&gt;&lt;odometry&gt;&lt;gazebo&gt;&lt;rviz&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19420" PostTypeId="2" ParentId="16477" CreationDate="2019-09-06T00:32:43.013" Score="2" Body="&lt;p&gt;Yes, your intuition is correct. In the first case, &lt;span class=&quot;math-container&quot;&gt;$I$&lt;/span&gt; is computed around the joint point. In the second case, &lt;span class=&quot;math-container&quot;&gt;$I_1$&lt;/span&gt; is computed around the center of mass of the link. The Parallel Axis Theorem can be used to yield different inertia values around different axes, yielding to your intuition. &lt;/p&gt;&#xA;" OwnerUserId="23756" LastActivityDate="2019-09-06T00:32:43.013" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19421" PostTypeId="2" ParentId="19335" CreationDate="2019-09-06T17:35:09.210" Score="3" Body="&lt;p&gt;Lynch and Park's &lt;em&gt;Modern Robotics&lt;/em&gt; book uses the product of exponentials formula and screw axes to describe manipulators, and they have a well-documented library available in Python, MATLAB, and Mathematica. Plus there is a community-released C++ port using CMake/Eigen.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Book is available on this site (for free): &lt;a href=&quot;http://modernrobotics.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://modernrobotics.org/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Original library is here: &lt;a href=&quot;https://github.com/NxRLab/ModernRobotics&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/NxRLab/ModernRobotics&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;C++ port is here: &lt;a href=&quot;https://github.com/Le0nX/ModernRoboticsCpp&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/Le0nX/ModernRoboticsCpp&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Full disclosure: I contributed some small elements to the book, and helped organize, build-out, and maintain the software library.&lt;/p&gt;&#xA;" OwnerUserId="935" LastActivityDate="2019-09-06T17:35:09.210" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19422" PostTypeId="1" CreationDate="2019-09-07T05:40:12.557" Score="2" ViewCount="172" Body="&lt;p&gt;I'm trying to build a &lt;strong&gt;line follower&lt;/strong&gt; bot that follows a &lt;strong&gt;3cm wide&lt;/strong&gt; black line. I have a line sensor array with &lt;strong&gt;6 analog sensors&lt;/strong&gt; spaced &lt;strong&gt;1cm apart&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This means that in an ideal situation, i.e bot going &lt;strong&gt;straight&lt;/strong&gt; on track, the center 2 sensors are on black line, the ones immediately to the side of each sensor are on the border of the black line and the farthest sensors are on the white surface as shown in the image below. &lt;a href=&quot;https://i.stack.imgur.com/78QS3.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/78QS3.png&quot; alt=&quot;ignore my bad drawing ability&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've used PID control in the bot but it's oscillating like crazy. Even on a straight line it's following the whole line by snaking. It has much more sideways movement than forwards. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I try to smooth it, then it fails to turn at bends. Tried several combinations of PID parameters.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;What I think is happening&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;It's almost impossible to position the 2nd and 5th sensors right on the border. If the bot moves slightly to the right, the 2nd sensor is on black and 5th on white, so bot thinks it's too far right, and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;My questions&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Is it practically possible to follow &lt;strong&gt;3cm line&lt;/strong&gt; with &lt;strong&gt;1cm spaced sensors&lt;/strong&gt;?&lt;/li&gt;&#xA;&lt;li&gt;Am I doing something wrong in my PID?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;PS&lt;/strong&gt;:&#xA;I'm using &lt;strong&gt;rear 2 wheel differential drive&lt;/strong&gt; with an &lt;strong&gt;inter-wheel&lt;/strong&gt; distance of around &lt;strong&gt;13cm&lt;/strong&gt;. My line sensor array is placed around &lt;strong&gt;8cm&lt;/strong&gt; in front of the rear wheel axle line. I'm going to post a question regarding this shortly. I'll post a link in the comment.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Edit:&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;This is the &lt;code&gt;loop&lt;/code&gt; of my Arduino sketch (minus the Serial.prints).&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Kp = 2.5&lt;/li&gt;&#xA;&lt;li&gt;Ki = 0 (yes I'm not using integral part of PID for now)&lt;/li&gt;&#xA;&lt;li&gt;Kd = 0.05&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void loop() {&#xA;  int position = qtr.readLineBlack(sensors); // get calibrated readings along with the line position, refer to the QTR Sensors Arduino Library for more details on line position.&#xA;&#xA;  int error = position - set_point;&#xA;  integral += error;&#xA;&#xA;  last_error = error;&#xA;  int motorSpeed = Kp * error + Ki * integral + Kd * (error - last_error);&#xA;&#xA;  int rightMotorSpeed = BASE + motorSpeed;&#xA;  int leftMotorSpeed = BASE - motorSpeed;&#xA;  drive(leftMotorSpeed, rightMotorSpeed);&#xA;  delay(30);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;BASE&lt;/code&gt; speed value is &lt;strong&gt;55&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to &lt;a href=&quot;https://www.pololu.com/docs/0J19/all&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pololu QTR library&lt;/a&gt;, &lt;code&gt;readLine&lt;/code&gt; returns a value in the range 0 to 100 * (n_sensors - 1) with 0 indicating line is too far left. I have 6 sensors so I can get a max of &lt;strong&gt;5000&lt;/strong&gt;. So I set the &lt;code&gt;set_point&lt;/code&gt; value to &lt;strong&gt;2500&lt;/strong&gt;. The function retusn the last recorded value in case the sensors have lost the line completely. I've tested the function by sliding a black ribbon under the sensors and observed the motors, so I know that my &lt;code&gt;position&lt;/code&gt; reading is &lt;strong&gt;not an issue&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, I'm driving the motors with this function:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void drive(int left_speed, int right_speed) {&#xA;  if (left_speed &amp;lt; 0) {&#xA;    digitalWrite(LF, LOW);&#xA;    digitalWrite(LB, HIGH);&#xA;  } else {&#xA;    digitalWrite(LF, HIGH);&#xA;    digitalWrite(LB, LOW);&#xA;  }&#xA;  if (right_speed &amp;lt; 0) {&#xA;    digitalWrite(RF, LOW);&#xA;    digitalWrite(RB, HIGH);&#xA;  } else {&#xA;    digitalWrite(RF, HIGH);&#xA;    digitalWrite(RB, LOW);&#xA;  }&#xA;  analogWrite(LPWM, min(PWM_LIMIT, abs(left_speed)));&#xA;  analogWrite(RPWM, min(PWM_LIMIT, abs(right_speed)));&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This function basically reverses the corresponding motor direction of the one that has negative speed. I'm using a &lt;code&gt;BASE&lt;/code&gt; pwm value of &lt;strong&gt;55&lt;/strong&gt; and a &lt;code&gt;PWM_LIMIT&lt;/code&gt; of &lt;strong&gt;80&lt;/strong&gt; because I'm using a high voltage battery for the motors and my &lt;strong&gt;L293D&lt;/strong&gt; motor driver can only handle &lt;strong&gt;600mA&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can understand that with my current &lt;code&gt;Kp&lt;/code&gt; value of &lt;strong&gt;2.5&lt;/strong&gt;, even a slight error is causing a big change in motor drive.&lt;/p&gt;&#xA;" OwnerUserId="23737" LastEditorUserId="23737" LastEditDate="2019-09-13T10:44:48.393" LastActivityDate="2019-09-13T10:44:48.393" Title="IR sensor spacing in sensor array relative to line width" Tags="&lt;pid&gt;&lt;line-following&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19423" PostTypeId="2" ParentId="16477" CreationDate="2019-09-07T10:32:52.733" Score="1" Body="&lt;p&gt;From my understanding it is not correct as in the case of the single-link &lt;span class=&quot;math-container&quot;&gt;$I$&lt;/span&gt; is directly computed around w.r.t. the joint point. However, in the two-link case, each link's inertia is firstly computed w.r.t. the center of mass of the link (&lt;span class=&quot;math-container&quot;&gt;$I_1$&lt;/span&gt;) and then translated to a reference frame with the origin coinciding to the joint-point via the Huygens-Steiner Theorem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the way, this structure is given by the Euler-Lagrange formulation of the robot model and the definition of the inertia matrix &lt;span class=&quot;math-container&quot;&gt;$M(q)$&lt;/span&gt;. &#xA;The slides you linked from Prof. Claudio Melchiorri (my former supervisor at the university of Bologna) explains this in the part preceding the example. &lt;/p&gt;&#xA;" OwnerUserId="23766" LastActivityDate="2019-09-07T10:32:52.733" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19424" PostTypeId="1" CreationDate="2019-09-07T15:10:44.130" Score="0" ViewCount="79" Body="&lt;p&gt;I'm currently thinking about the feasibility of creating a robot which streams live video footage and other data such as temperature, humidity, etc. to a smartphone. Is it possible to do this on an Arduino Uno board? Or is a Raspberry Pi board needed?&lt;/p&gt;&#xA;" OwnerUserId="23767" LastActivityDate="2021-02-11T21:22:30.543" Title="Is there a specific way or module I can use to stream video data from a camera hooked to an Arduino Uno board?" Tags="&lt;cameras&gt;" AnswerCount="4" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19425" PostTypeId="2" ParentId="19424" CreationDate="2019-09-07T23:52:33.933" Score="0" Body="&lt;p&gt;The arduino is physically incapable of doing video streams. The atmega 32u can only handle gpio operations and working with sensors and some math and serial comms. The Raspi CAN take a video image stream and then publish it where you want. There is a camers module that plugs directly into the pi for this sort of purpose. Usually the arduino acts as an I/O expander for the pi. The pi then can connect to the internet and publish data to a webserver or to a server machine. Does this make sense?&lt;/p&gt;&#xA;" OwnerUserId="23597" LastActivityDate="2019-09-07T23:52:33.933" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19426" PostTypeId="1" CreationDate="2019-09-08T06:21:14.337" Score="0" ViewCount="36" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/q4PHy.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/q4PHy.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am trying to figure out the logic for a line follower with the path shown in the attached image. I am having trouble with &amp;lt;= 90 degree angle turns. So far, I have been using the logic where if the middle and a side's sensor are on the line and the other sensor is on white, then I turn 90 degrees after driving forwards a little. This does not work for the part marked in blue since the distance designated by the arrows is too small to drive forward any amount and the acute angle causes my car to keep going side to side perpetually half the time I run the program.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, if I am using proportional line following in order to approach intersections more perpendicularly, do I have to keep track of which side of the line I am on? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Suggestions on how to improve my design would be appreciated&lt;/p&gt;&#xA;" OwnerUserId="23770" LastActivityDate="2019-09-08T06:21:14.337" Title="Line Following Acute and Right angles and Proportional steering help" Tags="&lt;line-following&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19427" PostTypeId="1" CreationDate="2019-09-08T22:29:55.710" Score="0" ViewCount="144" Body="&lt;p&gt;Good day...&#xA;Sorry for bigner quesion, but really I need some friendly explanation rather than long reference&#xA;I have 9 dof mpu9250 imu and gps. I found some source that calculate euler angle in ardunio &#xA;How much euler angle help me in localization?&#xA;Can I use the mpu9250 raw data for localization?&#xA;If i fuse gps and imu what is the out put of filter?&#xA;Can i determine x y z position using imu and gps?&lt;/p&gt;&#xA;" OwnerUserId="23121" LastActivityDate="2020-10-04T16:19:10.123" Title="How does sensor fusion help in robot localization" Tags="&lt;imu&gt;&lt;gps&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19428" PostTypeId="1" CreationDate="2019-09-09T00:28:07.743" Score="2" ViewCount="45" Body="&lt;p&gt;I have 2 WidowX robots which I already successfully address ID's for all the MX-28 and AX-12A servos using ROS code in the Arbotix controller with the Dynamanager 1.3 on a Mac &lt;strong&gt;but I can't detect any the MX-64 servos&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I hit the scan button, it's searching forever and end up finding nothing. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I always plug one servo at a time, and also tried each of both connector on the MX-64 servo and also use a known working servo wire.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is something more that I should do to address MX-64 servos ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks for your help&lt;/p&gt;&#xA;" OwnerUserId="23782" LastActivityDate="2019-09-09T00:28:07.743" Title="Can't set ID to Dynamixel MX-64" Tags="&lt;dynamixel&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19429" PostTypeId="1" AcceptedAnswerId="19433" CreationDate="2019-09-09T04:15:22.243" Score="5" ViewCount="137" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/CYhoa.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/CYhoa.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think the equation(3.73) should be:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\dot p-w_s$&lt;/span&gt;x&lt;span class=&quot;math-container&quot;&gt;$p=\dot p-\dot p=0$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;have no idea how it can be wrong&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and don't know the difference between infinitely large body and a body just include the fix-frame origin and body-frame origin&lt;/p&gt;&#xA;" OwnerUserId="23784" LastEditorUserId="10414" LastEditDate="2021-01-25T16:23:15.433" LastActivityDate="2021-01-25T16:23:15.433" Title="question about spatial velocity in the book &lt;modern robotics&gt;" Tags="&lt;kinematics&gt;&lt;screw-theory&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19430" PostTypeId="2" ParentId="19427" CreationDate="2019-09-09T05:25:36.543" Score="0" Body="&lt;p&gt;As an advice it's better to separate your questions and make them more precise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the end, if I understand correctly, your question is: how can the GPS and the IMU be used together for localization?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The IMU measures angles and angular speed but can be used as a position tracking sensor given that you know where the robot starts. You could use an extended Kalman filter to merge the sensor measurements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I won't go in much more details because this questions has been asked before on this site and I think &lt;a href=&quot;https://robotics.stackexchange.com/questions/6662/how-to-track-robot-position&quot;&gt;this answer&lt;/a&gt; is already an excellent read.&lt;/p&gt;&#xA;" OwnerUserId="1615" LastActivityDate="2019-09-09T05:25:36.543" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19431" PostTypeId="2" ParentId="9916" CreationDate="2019-09-09T05:53:25.813" Score="0" Body="&lt;p&gt;Visual odometry is the ego-motion of the camera. It can be obtained by combining camera poses at different time instances. On the other hand, camera pose is defined just for consecutive frames. The full trajectory of the camera is obtained by concatenating all the camera poses. &lt;/p&gt;&#xA;" OwnerUserId="9426" LastEditorUserId="9426" LastEditDate="2019-09-09T10:33:20.257" LastActivityDate="2019-09-09T10:33:20.257" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19432" PostTypeId="1" AcceptedAnswerId="19434" CreationDate="2019-09-09T12:20:58.050" Score="4" ViewCount="165" Body="&lt;p&gt;How can we calculate the error position of arm manipulator?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's say we have a Transformation Matrix:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$\begin{bmatrix}&#xA;R_{00} &amp;amp; R_{01} &amp;amp; R_{02} &amp;amp; x\\ &#xA;R_{10} &amp;amp; R_{11} &amp;amp; R_{12} &amp;amp; y\\ &#xA;R_{20} &amp;amp; R_{21} &amp;amp; R_{22} &amp;amp; z\\ &#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1&#xA;\end{bmatrix}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and target Position: x', y', z'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've found out the error for x, y, z is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$\epsilon_x = x-x' \\&#xA;\epsilon_y = y-y' \\&#xA;\epsilon_z = z-z'$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From a reference I found, the position error is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$\epsilon = \sqrt{(x-x')^2 + (y-y')^2 + (z-z')^2}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this the correct formula to find position error? I may be confusing it with Root Mean Square Error/Standard Deviation from statistical methods.&lt;/p&gt;&#xA;" OwnerUserId="22848" LastEditorUserId="20709" LastEditDate="2019-09-10T12:49:12.103" LastActivityDate="2019-09-10T12:49:12.103" Title="Calculating Error of Arm Manipulator" Tags="&lt;robotic-arm&gt;&lt;manipulator&gt;&lt;errors&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19433" PostTypeId="2" ParentId="19429" CreationDate="2019-09-09T20:50:15.750" Score="6" Body="&lt;p&gt;A coordinate transformation of a point P from Frame 1 to Frame 0 is given by:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\mathbf{p}^0=\mathbf{o}^0_1+\mathbf{R}^0_1\mathbf{p}^1.&#xA;$$&lt;/span&gt;&#xA;Differentiating with respect to time gives:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{\mathbf{p}}^0=\dot{\mathbf{o}}^0_1+\mathbf{R}^0_1\dot{\mathbf{p}}^1+\dot{\mathbf{R}}^0_1\mathbf{p}^1.&#xA;$$&lt;/span&gt;&#xA;Considering that &lt;span class=&quot;math-container&quot;&gt;$\dot{\mathbf{p}}^1=0$&lt;/span&gt; as &lt;span class=&quot;math-container&quot;&gt;$\mathbf{p}^1$&lt;/span&gt; is &lt;em&gt;fixed&lt;/em&gt; in Frame 1, we come up with:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{\mathbf{p}}^0=\dot{\mathbf{o}}^0_1+\mathbf{S}\left(\mathbf{\omega}^0_1\right)\mathbf{R}^0_1\mathbf{p}^1,&#xA;$$&lt;/span&gt;&#xA;being &lt;span class=&quot;math-container&quot;&gt;$\mathbf{S}$&lt;/span&gt; the &lt;em&gt;skew&lt;/em&gt; matrix. This expression can be further reduced noting that &lt;span class=&quot;math-container&quot;&gt;$\mathbf{R}^0_1\mathbf{p}^1=\mathbf{r}^0_1$&lt;/span&gt;:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{\mathbf{p}}^0=\dot{\mathbf{o}}^0_1+\mathbf{\omega}^0_1 \times \mathbf{r}^0_1,&#xA;$$&lt;/span&gt;&#xA;which is eventually the known form of the &lt;strong&gt;velocity composition rule&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To come back to your statement, &lt;span class=&quot;math-container&quot;&gt;$\dot{\mathbf{p}}^0=\mathbf{\omega}^0_1 \times \mathbf{r}^0_1$&lt;/span&gt; holds only when &lt;span class=&quot;math-container&quot;&gt;$\dot{\mathbf{o}}^0_1=0$&lt;/span&gt;, that is when there exists a pure rotational velocity without translational velocity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This result can be obtained also by observing that a vector &lt;span class=&quot;math-container&quot;&gt;$\mathbf{p}$&lt;/span&gt; can be expressed in terms of its magnitude &lt;span class=&quot;math-container&quot;&gt;$p$&lt;/span&gt; and unit vector &lt;span class=&quot;math-container&quot;&gt;$\mathbf{\hat{p}}$&lt;/span&gt; as:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\mathbf{p}=p \cdot \mathbf{\hat{p}}.&#xA;$$&lt;/span&gt;&#xA;Thereby, the time derivative is:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{\mathbf{p}}=\dot{p}\cdot\mathbf{\hat{p}}+p\cdot\dot{\mathbf{\hat{p}}}=\dot{p}\cdot\mathbf{\hat{p}}+\mathbf{\omega} \times \mathbf{p}.&#xA;$$&lt;/span&gt;&#xA;Only in case there is a pure rotational velocity (i.e. &lt;span class=&quot;math-container&quot;&gt;$\dot{p}=0$&lt;/span&gt;), then you'll get:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{\mathbf{p}}=\mathbf{\omega} \times \mathbf{p}.&#xA;$$&lt;/span&gt; &lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2019-09-14T11:11:44.313" LastActivityDate="2019-09-14T11:11:44.313" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19434" PostTypeId="2" ParentId="19432" CreationDate="2019-09-10T01:23:00.087" Score="3" Body="&lt;p&gt;The interpretation of error for a robot manipulator pose is subjective in terms of what is the error being used for. A robot manipulator pose is combination of both position (x, y, z) and the orientation (quaternions or euler angles) and thus, designing the error could partially or completely include all terms. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Your representation of error is essentially scalar Euclidean distance for robot pose, acceptable for tasks where the orientation of the end-effector is not important&lt;/strong&gt;. These applications are very few and a general example would be planar robots like the SCARA. It could also be useful in cases where the error is to be decoupled(position and orientation errors are differently analyzed/).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a lot of cases, the error is left as a vector representation instead. That allows for tracking attempts are made for all individual directions. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Error = [(x-x') (y-y') (z-z')]'&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The current scalar representation fails to convey the actual information. It could be misleading where a deviation of 1 cm along all individual axes would result in a error of 1.73205081 cm which would be equivalent to the error that a deviation of 3 cm along the one of the axes would result in. The former sounds acceptable for pick and place task because there would be some tolerance in all directions while the latter means there needs to be considerably larger tolerance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would propose decoupled vector representation of position and orientation error in the robot pose.&lt;/p&gt;&#xA;" OwnerUserId="18572" LastActivityDate="2019-09-10T01:23:00.087" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19435" PostTypeId="2" ParentId="19424" CreationDate="2019-09-10T08:48:24.207" Score="1" Body="&lt;p&gt;A standard arduino (like the Uno) is not powerful enough, but if you go a bit higher, like the ESP32 (with WIFI), it's definitely possible to stream an image with a tiny Chip: &lt;a href=&quot;https://www.exp-tech.de/plattformen/esp32/9182/esp32-cam-development-board-with-camera&quot; rel=&quot;nofollow noreferrer&quot;&gt;ESP32 with camera&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="23196" LastActivityDate="2019-09-10T08:48:24.207" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19436" PostTypeId="2" ParentId="19432" CreationDate="2019-09-10T09:37:32.187" Score="1" Body="&lt;p&gt;When the manipulator's tool position &lt;span class=&quot;math-container&quot;&gt;$p_\text{tool} = (x_\text{tool}, y_\text{tool}, z_\text{tool})$&lt;/span&gt; is different from the point &lt;span class=&quot;math-container&quot;&gt;$p_\text{target} = (x_\text{target}, y_\text{target}, z_\text{target})$&lt;/span&gt; where the manipulator should go to, we say there is position error.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Intuitively, position error &lt;span class=&quot;math-container&quot;&gt;$e$&lt;/span&gt; should tell us how &lt;em&gt;far&lt;/em&gt; the current tool point &lt;span class=&quot;math-container&quot;&gt;$p_\text{tool}$&lt;/span&gt; is from the expected point &lt;span class=&quot;math-container&quot;&gt;$p_\text{target}$&lt;/span&gt;. So a natural choice of the formula to use to calculate position error given &lt;span class=&quot;math-container&quot;&gt;$p_\text{tool}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$p_\text{target}$&lt;/span&gt; is how we would measure the distance between two points in a 3D space, i.e.&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;e = \Vert p_\text{tool} - p_\text{target} \Vert_2 = \sqrt{(x_\text{tool} - x_\text{target})^2 + (y_\text{tool} - y_\text{target})^2 + (z_\text{tool} - z_\text{target})^2}.&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, in general, the function used to calculate position errors, does not have to be the square root of squared differences as above but can be any &lt;a href=&quot;https://en.wikipedia.org/wiki/Metric_(mathematics)&quot; rel=&quot;nofollow noreferrer&quot;&gt;distance metric&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The root-mean-square error is kind of similar to the position error above (in case &lt;span class=&quot;math-container&quot;&gt;$L_2$&lt;/span&gt;-norm is used as the distance metric), but used in a different context. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;While the position error tells us how much a single measurement (&lt;span class=&quot;math-container&quot;&gt;$p_\text{tool}$&lt;/span&gt;) deviates from the expected value (&lt;span class=&quot;math-container&quot;&gt;$p_\text{target}$&lt;/span&gt;), the root-mean-square shows how much a given &lt;em&gt;set&lt;/em&gt; of measurements (for example, &lt;span class=&quot;math-container&quot;&gt;$\{p_\text{tool}^{1}, p_\text{tool}^{2}, \ldots, p_\text{tool}^{N}\}$&lt;/span&gt;) deviates from expected values (&lt;span class=&quot;math-container&quot;&gt;$\{p_\text{target}^{1}, p_\text{target}^{2}, \ldots, p_\text{target}^{N}\}$&lt;/span&gt;). It might be used when, say, you control the manipulator to go along a path of &lt;span class=&quot;math-container&quot;&gt;$10$&lt;/span&gt; points and you want to see how well the manipulator tracks those &lt;span class=&quot;math-container&quot;&gt;$10$&lt;/span&gt; points, for example.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;While generally a position error is a single number as mentioned above, at times we might want to express a position error as a vector (as @Akshay mentioned in this answer) as it gives us &lt;em&gt;which direction&lt;/em&gt; the measured point deviates from the expected one, which could be useful for further use.&lt;/p&gt;&#xA;" OwnerUserId="7610" LastActivityDate="2019-09-10T09:37:32.187" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19437" PostTypeId="2" ParentId="19422" CreationDate="2019-09-10T15:33:29.767" Score="1" Body="&lt;p&gt;The PID controller is best if you have a range of error from the ideal position to the extreme one. When i say extreme i am talking about the hard turn positions as compared to the ideal position. Now in your case the 2 and 5 sensor are never going to be on the edge and hence in best case scenario the bot will oscillate between 2 and 5. Now lets talk about the extreme position. According to the configuration if sensor 1 or 6 are active then the bot is assumed to be in the extreme position. So we only have 2 levels of error from ideal to extreme (for eg. Ideally 1 is inactive and in case of hard left 1 gets active). This range is too limited for an effective PID controller. &#xA;Coming to your questions.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Yes it is possible. But it is not preferred. Specially with the PID control. With if else coding it can be implemented but that defeats the purpose of using so many sensors.&lt;/li&gt;&#xA;&lt;li&gt;Probably not. Although I am sure the parameters can be optimised but in this architecture there is not much scope of optimization.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I have implemented PID control with 5 sensors, ideal position was: sensor 3 on the line and 2 and 4 just beyond the edge of the line so that both are inactive during ideal operation. Sensor 1 and 5 even farther away. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my advice will be, if there are hard turns then try to change the array. If that's not possible you can try something hybrid involving if else coding and PID control as well.&lt;/p&gt;&#xA;" OwnerUserId="23791" LastActivityDate="2019-09-10T15:33:29.767" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19438" PostTypeId="1" AcceptedAnswerId="19443" CreationDate="2019-09-10T20:41:50.303" Score="2" ViewCount="34" Body="&lt;p&gt;I've been reading about controlling systems via &lt;a href=&quot;https://www.youtube.com/watch?v=ZPWiIBcHOh4&quot; rel=&quot;nofollow noreferrer&quot;&gt;momentum wheels.&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Such as in Satellites, or fancy inverse pendulums.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a particular paper, the writer tries to explain away an offset and settling of the system angle and reaction wheel angular velocity at non-demand conditions because of the dynamics of the control scheme will give to a constant motor angular velocity when there is a constant offset. Given the matricies A and B and the Kd gains aquired from the LQR method from a SSM such as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$A=\left(&#xA;\begin{array}{ccc}&#xA; 0 &amp;amp; 1 &amp;amp; 0 \\&#xA; \frac{g \left(l_b m_b+l m_w\right)}{\Theta _b+l^2 m_w} &amp;amp; -\frac{R_b}{\Theta _b+l^2 m_w} &amp;amp; \frac{R_w}{\Theta _b+l^2 m_w} \\&#xA; -\frac{g \left(l_b m_b+l m_w\right)}{\Theta _b+l^2 m_w} &amp;amp; \frac{R_b}{\Theta _b+l^2 m_w} &amp;amp; \frac{R_w \left(\Theta _b+l^2 m_w+\Theta _w\right)}{\Theta _w \left(\Theta _b+l^2 m_w\right)} \\&#xA;\end{array}&#xA;\right)$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$B=\left(&#xA;\begin{array}{c}&#xA; 0 \\&#xA; -\frac{\text{Km}}{\Theta _b+l^2 m_w} \\&#xA; \frac{R_w \left(\Theta _b+l^2 m_w+\Theta _w\right)}{\Theta _w \left(\Theta _b+l^2 m_w\right)} \\&#xA;\end{array}&#xA;\right)$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$Kd=\left(&#xA;\begin{array}{c}&#xA; \text{K1} \\&#xA; \text{K2} \\&#xA; \text{K3} \\&#xA;\end{array}&#xA;\right)$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;They explain &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;As it can be seen from the plot, the estimated state of the system converges to (&lt;span class=&quot;math-container&quot;&gt;$\phi$&lt;/span&gt;b , &lt;span class=&quot;math-container&quot;&gt;$\phi'$&lt;/span&gt;b , &lt;span class=&quot;math-container&quot;&gt;$\phi'$&lt;/span&gt;w ) = (−0.058, 0.0, 37.0). This behavior can be explained by the following property of the system:&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$V=(\text{IdentityMatrix}[3]-A+B.\text{Kd})^{-1}.B=\left(&#xA;\begin{array}{c}&#xA; 0 \\&#xA; 0 \\&#xA; \frac{\text{Km}}{\text{K3} \text{Km}+R_w} \\&#xA;\end{array}&#xA;\right)$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, when working out their maths...I get anything &lt;em&gt;but&lt;/em&gt; their solution, where the first two components or &lt;span class=&quot;math-container&quot;&gt;$V$&lt;/span&gt; are equal to 0. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this particular equation a known one assumed to give zeros in the first two components? Or is there a mistake of some kind? Unfortunately there are no references given to their assumption. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The exact text for context:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/yT5Lh.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/yT5Lh.png&quot; alt=&quot;sdfg&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="23148" LastActivityDate="2019-09-11T16:00:37.747" Title="Constant Offset matrix" Tags="&lt;control&gt;&lt;kinematics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19439" PostTypeId="1" CreationDate="2019-09-10T21:56:12.590" Score="0" ViewCount="318" Body="&lt;p&gt;I'm currently being asked to write a state space model of a falling object (equation attached). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/avP4J.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/avP4J.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I had taken a linear systems course five years ago in which I did a lot of conversion between high order differential equations and systems of first order linear equations. However, this task seems odd for a few reasons:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Most nth ordered differential equations that I had converted only required n state variables. For example, if I had a second order differential equation, I needed two state variables. In this problem, it's asking for 3 state variable which seems odd. Is the third state variable even necessary?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;This differential equation directly includes the independent variable (time) itself.  It also includes an initial condition p0 which seems odd.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I'm able to derive a solution to this problem, however it just seems very odd in how I'm doing it. This is my solution:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/io5Eo.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/io5Eo.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="23548" LastActivityDate="2021-02-03T15:02:00.187" Title="Why would I use three state variables for a second order system? [state space modeling]" Tags="&lt;control&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19440" PostTypeId="2" ParentId="19439" CreationDate="2019-09-11T03:58:04.290" Score="0" Body="&lt;p&gt;Initial conditions are important, let's assume this is a rigid body falling from &lt;em&gt;10m&lt;/em&gt; height at time &lt;em&gt;'t_0'&lt;/em&gt;, then to know its position at any time &lt;em&gt;'t'&lt;/em&gt; I must know its initial position. Also, the third state (acceleration) is redundant information as it has been already described that body is falling at a constant acceleration, which simply means jerk (rate of change of accel.) is zero. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S: I have not seen any real system so far where we need to have acceleration as a system state. In system dynamics we are mostly concerned with forces/torques, which lead to accelerations, so typical state vectors include positions and velocities as system states.  &lt;/p&gt;&#xA;" OwnerUserId="21747" LastActivityDate="2019-09-11T03:58:04.290" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19442" PostTypeId="1" AcceptedAnswerId="19444" CreationDate="2019-09-11T13:40:20.560" Score="0" ViewCount="62" Body="&lt;p&gt;When timer interrupt is received, if there is already some ISR being executed, doesn't it delay (elongate) the time interval measured? If yes, how is it handled? For the sake of precise time measurements.&lt;/p&gt;&#xA;" OwnerUserId="23798" LastActivityDate="2019-09-15T20:37:12.397" Title="How timer interrupt is handled in the presence of other interrupt services?" Tags="&lt;interrupts&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19443" PostTypeId="2" ParentId="19438" CreationDate="2019-09-11T16:00:37.747" Score="2" Body="&lt;p&gt;I actually spent a while trying to figure this out, and I realized that they're talking about &lt;a href=&quot;https://en.wikipedia.org/wiki/Final_value_theorem&quot; rel=&quot;nofollow noreferrer&quot;&gt;Final value theorem&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://web.mit.edu/16.31/www/Fall06/1631_topic14.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here's a paper&lt;/a&gt; (warning: PDF) that gives the equation you've provided in your paper &lt;strong&gt;with a correction&lt;/strong&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\left(sI - \left(A-BK\right)\right)^{-1}B \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note the &lt;em&gt;Laplace operator &lt;span class=&quot;math-container&quot;&gt;$s$&lt;/span&gt;&lt;/em&gt;! The final value theorem says that you can get &lt;span class=&quot;math-container&quot;&gt;$\lim_{t\rightarrow\infty} x(t)$&lt;/span&gt; by taking the limit &lt;span class=&quot;math-container&quot;&gt;$\lim_{s\rightarrow0}sX(s)$&lt;/span&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, I couldn't get the right answer with the matrices you provided, but I think I &lt;a href=&quot;https://ethz.ch/content/dam/ethz/special-interest/mavt/dynamic-systems-n-control/idsc-dam/Research_DAndrea/Cubli/Cubli_IROS2012.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;found your source material&lt;/a&gt; (&quot;The Cubli: A Cube that can Jump Up and Balance&quot;, Gajamohan et al 2012), which gives:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/zhpMG.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zhpMG.png&quot; alt=&quot;Sorry, can&amp;#39;t be bothered to type this out in Mathjax at the moment&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I use these values and use &lt;span class=&quot;math-container&quot;&gt;$Kd = [k1, k2, k3]$&lt;/span&gt; (Note that this is a row vector, not column vector as in your question), I get the following:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;clear all;&#xA;clc;&#xA;syms L Lb mw mb g Km K1 K2 K3 Ib Iw Cb Cw;&#xA;syms s;&#xA;A = [0, 1, 0; ...&#xA;    (mb*Lb+mw*L)*g/(Ib+mw*L*L), -Cb/(Ib+mw*L*L), Cw/(Ib+mw*L*L); ...&#xA;    -(mb*Lb+mw*L)*g/(Ib+mw*L*L), Cb/(Ib+mw*L*L), -Cw*(Ib+Iw+mw*L*L)/(Iw*(Ib+mw*L*L))];&#xA;B = [0; ...&#xA;    -Km/(Ib+mw*L*L); ...&#xA;    Km*(Ib+Iw+mw*L*L)/(Iw*(Ib+mw*L*L))];&#xA;Kd = [K1, K2, K3];&#xA;&#xA;eqn = ((s*eye(3) - (A-B*Kd))^(-1))*B;&#xA;&#xA;solution = limit(eqn, s, 0);&#xA;&#xA;simplify(expand(solution))&#xA;&#xA;ans =&#xA;&#xA;               0&#xA;               0&#xA; Km/(Cw + K3*Km)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Hope this helps!!&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2019-09-11T16:00:37.747" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19444" PostTypeId="2" ParentId="19442" CreationDate="2019-09-11T18:18:52.460" Score="1" Body="&lt;p&gt;No. The actual time is calculated from counter registers that automatically increment. The timer interrupt will be delayed, and things the timer interrupt is triggering will be delayed. This is called jitter. But the measurement of the interval will not change in accuracy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Counters roll over to zero automatically at the hardware level. So there are never lost counts. Counters are large enough that they either don't roll over or that the software has lots of time to count the number of roll overs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The error in time measurement one sees in digital devices is called drift and is due to the oscillator driving the time counter at a non-exact rate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All microcontrollers have oscillator driven counters for keeping time. Some microcontrollers and most processors have a realtime clock subsystem. Real-time clocks have the same counter at their core and some convenience hardware for handling time and date.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only difference between counters and real-time clocks is that attached to real-time clocks there is usually an oscillator that has a frequency that is a power of two factor of 1 second, and sometimes that oscillator with have less drift (more accuracy). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;One way to think of it is how you behave with a wrist watch. The watch is always keeping time, with some error from true time (drift). If you get an alarm from the watch, start an action, get distracted, and then complete the action, there is error in the timing of your action, but the watch continues to measure time accurately.&lt;/p&gt;&#xA;" OwnerUserId="184" LastEditorUserId="184" LastEditDate="2019-09-15T20:37:12.397" LastActivityDate="2019-09-15T20:37:12.397" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="19445" PostTypeId="1" CreationDate="2019-09-11T23:25:50.980" Score="0" ViewCount="460" Body="&lt;p&gt;I'm tracking the position of a vehicle along a certain trajectory using the Kalman filter and the idea is to check for improvements in position estimation through fusion of data from multiple sensors (We consider data from 2 inputs: GPS and Odometry) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;GPS data is recorded through an app on the iPhone and gives information about the Latitude, Longitude, Elevation and Timestamp Information. This GPS data is in 3D spherical coordinates and is converted to 2D Cartesian using UTM (UTM is projected cartesian System). Thus, we have the position of the vehicle through GPS in world coordinates (in m). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Odometry data is recorded through measurement sensors on vehicle and gives the x-position of the vehicle, y-position of the vehicle and orientation of the vehicle. This is calculated based on the wheelticks and is relative to the inertial origin of coordinates. Thus, we have the position of the vehicle through Odometry in vehicle coordinates (in mm). The GPS data updates once every 1000ms and Odometry data is given once every 20ms. &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;How do we relate the position data from vehicle coordinates system with the data from world coordinates?&lt;br&gt;&#xA;(Eg: If I check the data for some point, I see GPS data for the position (x,y) to be (661272.59, 1.517914e+06) and Odometry data for some point to be (414,6) and, both are measurements given to the Kalman. How do we relate the position given by odometry with the corresponding GPS point?)&lt;/li&gt;&#xA;&lt;li&gt;What is meant by inertial origin of coordinates and inertial coordinate system? (I read about dead reckoning systems but, in this case, we do not have information about the accelerometer, gyroscopes, etc and only get information about positioning of vehicle from wheel ticks)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="23707" LastEditorUserId="23707" LastEditDate="2019-09-12T16:52:50.197" LastActivityDate="2021-02-22T22:01:30.127" Title="Convert Vehicle coordinates to World coordinates for positioning" Tags="&lt;kalman-filter&gt;&lt;odometry&gt;&lt;gps&gt;&lt;sensor-fusion&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19446" PostTypeId="1" CreationDate="2019-09-12T00:10:43.253" Score="0" ViewCount="575" Body="&lt;p&gt;I'm tracking the position of a vehicle along a certain trajectory using the Kalman filter and we have odometry data provided to us which gives the x-position of the vehicle, y-position of the vehicle and orientation of the vehicle. This is calculated based on the wheelticks and is relative to the inertial origin of coordinates. We also have data which tells us about the number of received wheel impulses from each of the wheels.  &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;What exactly are the differences between wheel ticks and wheel impulses? Does wheel impulse mean the wheel speed (rpm)?    &lt;/li&gt;&#xA;&lt;li&gt;If steering angle data (Averaged steering wheel angle) is additionally available, can this also be used to calculate velocity and position?  &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="23707" LastEditorUserId="23707" LastEditDate="2019-09-12T15:29:29.050" LastActivityDate="2020-06-08T18:02:50.237" Title="What are wheel ticks and wheel impulses?" Tags="&lt;kalman-filter&gt;&lt;odometry&gt;&lt;rotation&gt;&lt;wheel&gt;" AnswerCount="1" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="19448" PostTypeId="1" CreationDate="2019-09-12T08:26:55.340" Score="0" ViewCount="70" Body="&lt;p&gt;I have a question about SLAM. Is it common for SLAM to be used for mere map generation? For instance, have a map generated using ORB-SLAM and then freeze the map for future path planning where future updates are prohibited. I suppose, the map becomes a static map. However, is the common application to constantly update the map?&lt;/p&gt;&#xA;" OwnerUserId="11489" LastActivityDate="2019-10-07T12:56:23.470" Title="SLAM and navigation" Tags="&lt;slam&gt;&lt;navigation&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19449" PostTypeId="2" ParentId="19439" CreationDate="2019-09-12T12:43:10.757" Score="0" Body="&lt;p&gt;I'll point out that your solution:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{X} = \left[\begin{matrix}&#xA;\dot{p} \\&#xA;\ddot{p} \\&#xA;\dddot{p}\end{matrix}\right] = \left[\begin{matrix}&#xA;x_2 \\&#xA;x_3 \\&#xA;0 \end{matrix}\right]= \left[\begin{matrix}&#xA;0 &amp;amp; 1 &amp;amp; 0 \\&#xA;0 &amp;amp; 0 &amp;amp; 1 \\&#xA;0 &amp;amp; 0 &amp;amp; 0 \end{matrix}\right] \left[\begin{matrix}&#xA;x_1 \\&#xA;x_2 \\&#xA;x_3 \end{matrix}\right]\\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;multiplies out to:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{p} = \dot{p} \\&#xA;\ddot{p} = \ddot{p} \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;which is a &lt;a href=&quot;https://en.wikipedia.org/wiki/Triviality_(mathematics)&quot; rel=&quot;nofollow noreferrer&quot;&gt;trivial statement&lt;/a&gt; and doesn't express the system you presented. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am &lt;strong&gt;not a fan&lt;/strong&gt; of this question (not you, but the question you were asked to solve.) As others have mentioned, there's no reason to have acceleration &lt;span class=&quot;math-container&quot;&gt;$\ddot{p}$&lt;/span&gt; as a state, because you get acceleration when you take the derivative of your state vector if your state vector includes speed. That is, if &lt;span class=&quot;math-container&quot;&gt;$x = \left[\begin{matrix}&#xA;p \\&#xA;\dot{p} \end{matrix}\right]$&lt;/span&gt;, then &lt;span class=&quot;math-container&quot;&gt;$\dot{x} = \left[\begin{matrix}&#xA;\dot{p} \\&#xA;\ddot{p}\end{matrix}\right]$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further, in order to get the solution here, I believe the question is wanting you to rearrange the equation in the form of &lt;span class=&quot;math-container&quot;&gt;$\ddot{x} = \text{&amp;lt;stuff&amp;gt;}$&lt;/span&gt;, but you wind up with an expression that implies that acceleration is a function of position and speed, which is not the case. Position is a function of speed and acceleration. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2019-09-12T12:43:10.757" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="19450" PostTypeId="2" ParentId="19446" CreationDate="2019-09-12T12:53:02.440" Score="1" Body="&lt;p&gt;Regarding question 2, you can use steering angle for velocity (directional speed) &lt;em&gt;estimation&lt;/em&gt;, but &lt;a href=&quot;https://en.wikipedia.org/wiki/Ackermann_steering_geometry&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ackermann steering&lt;/a&gt; results in a heading that is a function of starting orientation, steering angle, speed, and time. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ackermann-steered vehicles are always turning along the tangent of a circle, where the circle's radius is set by the steering angle. As the vehicle moves, the steering angle sets the radius of curvature and then the vehicle speed causes you to traverse some arc length, which results in your new heading. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's not enough to just know what the steering angle is currently, you've got to integrate the entire path. If the radius of curvature is such that the circle being traversed has a circumference of 1 meter, and you drive 1 meter, then the current heading is equal to the starting heading. If the circumference is 2 meters and you drive 1 meter then your current heading is the opposite of your starting heading, etc. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2019-09-12T12:53:02.440" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="19451" PostTypeId="2" ParentId="19448" CreationDate="2019-09-12T16:25:19.573" Score="1" Body="&lt;h1&gt;Yes, if you mean &quot;incorporate new information&quot;.&lt;/h1&gt;&#xA;&#xA;&lt;h1&gt;Not really, if you mean &quot;re-run maplab with new point clouds&quot;.&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;There isn't really a &quot;common&quot; application for SLAM, per se. However, one emerging industry is self-driving cars (or trucks). The need to regularly update maps to account for construction, new roads, closures, and so on is fairly obvious. (note, most maps don't include mobile cars or pedestrians, so sensing them is not quite updating the map). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another common use of SLAM (by another name) is photogrammetric inspection of infastructure. This is the use of drones or cameras to construct 3D models of guardrails, buildings, bridges, etc. Here, we directly compare two maps to see what changed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, it may seem the answer is &lt;strong&gt;Yes, we often update maps in practice&lt;/strong&gt;. However, I want to point out a subtlety here. By &lt;em&gt;update&lt;/em&gt; in SLAM we mean &lt;em&gt;incorporate more sensor readings to better pinpoint landmarks or expand the map into new areas&lt;/em&gt;. This is usually &lt;strong&gt;not&lt;/strong&gt; done. We don't take new measurements and update the &lt;em&gt;old&lt;/em&gt; position of the old guardrails after an accident. Instead, we take new measurements, and &lt;em&gt;discard&lt;/em&gt; the old location of guardrails because &lt;em&gt;they have in fact moved&lt;/em&gt;. The same is true for all the other cases I've mentioned. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is the colloquial definition of update is &lt;em&gt;correct the map to incorporate all new information, including movement of landmarks&lt;/em&gt;. In this sense, yes, we update it. I want to point out that the &lt;em&gt;automatic&lt;/em&gt; updating of maps in &lt;em&gt;this&lt;/em&gt; sense is &lt;em&gt;not possible&lt;/em&gt; using ORBSLAM or other methods currently in literature that have found popularity through &quot;drones flying through buildings&quot; type videos. This should be considered an active and fruitful future area of research.&lt;/p&gt;&#xA;" OwnerUserId="163" LastActivityDate="2019-09-12T16:25:19.573" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19453" PostTypeId="1" AcceptedAnswerId="19465" CreationDate="2019-09-13T07:09:03.173" Score="0" ViewCount="57" Body="&lt;p&gt;I have a question about robot and camera calibration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have experience to calibrate btw 6DOF robot arm and hand-eye camera. &#xA;But this time I should use a machine like CNC plotter. This machine can move only x and y directions and no rotation. I will set a camera under the machine. &#xA;In this case, can I do calibration btw a cam and the machine? And also can I calculate transformation matrix btw them?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If anyone knows how to solve it please let me know. And if there are some papers about this, also let me know.&lt;/p&gt;&#xA;" OwnerUserId="23802" LastEditorUserId="37" LastEditDate="2019-09-13T10:53:22.607" LastActivityDate="2019-09-16T19:54:47.743" Title="How to get transformation between a camera and a CNC plotter?" Tags="&lt;calibration&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="19454" PostTypeId="1" AcceptedAnswerId="19455" CreationDate="2019-09-13T14:00:43.283" Score="1" ViewCount="63" Body="&lt;p&gt;I've been playing around with some block maths, mostly trying to remember how it actually works, and I've come to a simple example that should be reduced, however when doing the normal maths, compared to the block maths, I get different answers.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/fL1FC.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fL1FC.png&quot; alt=&quot;block&quot;&gt;&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The solution, when doing regular maths give me:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$y=e S_1 S_2 G_r-d S_2$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$e = w - y$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$y+ y G_r S_1 S_2 =w G_r S_1 S_2-d S_2$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$y=\frac{ w G_rS_1 S_2 -d S_2}{1+G_r S_1 S_2}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;doing Block algebra, moving &lt;span class=&quot;math-container&quot;&gt;$S_2$&lt;/span&gt; &lt;em&gt;before&lt;/em&gt; &lt;span class=&quot;math-container&quot;&gt;$d$&lt;/span&gt; (which would make it now, &lt;span class=&quot;math-container&quot;&gt;$S_2 d$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then going under the rule for Feedback, &lt;span class=&quot;math-container&quot;&gt;$\frac{G_s}{G_s+1}$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would expect to get as a result:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$y=\frac{ w G_rS_1 S_2 -d S_2}{1+S_1 S_2 G_r-d S_2}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, it appears this is the wrong solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;is there something I'm missing on my block algebra, or is this correct, except one assumes &lt;span class=&quot;math-container&quot;&gt;$d S_2$&lt;/span&gt; in the denominator is always zero?&lt;/p&gt;&#xA;" OwnerUserId="23148" LastEditorUserId="23148" LastEditDate="2019-09-13T15:05:34.873" LastActivityDate="2019-09-13T16:19:03.883" Title="Block algebra and normal algebra inconsistent" Tags="&lt;control&gt;&lt;design&gt;&lt;algorithm&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19455" PostTypeId="2" ParentId="19454" CreationDate="2019-09-13T16:07:26.510" Score="1" Body="&lt;p&gt;I think your math is correct, but it's a little easier to look at if you rearrange it as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;y = w\frac{S_1 S_2 G_r}{1 + S_1 S_2 G_r} - d\frac{ S_2}{1 + S_1 S_2 G_r}\\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The output is a combination of the closed-loop response and the disturbance input. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think the problem with your block diagram work is that you're treating everything, including the disturbance input, as though it's a &quot;plant,&quot; but it's not, because the input &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt; doesn't route through &lt;span class=&quot;math-container&quot;&gt;$d$&lt;/span&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a superposition (summing) problem; I think the &quot;easy&quot; way to solve this problem with block diagram work is to look at each input as though the other input doesn't exist.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/5nlps.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/5nlps.png&quot; alt=&quot;Just input&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is easy; this is the method you were going for and reduces to:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;y = w\frac{S_1 S_2 G_r}{1 + S_1 S_2 G_r} \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, consider the disturbance input:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/sSfoP.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/sSfoP.png&quot; alt=&quot;Disturbance input 1&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a little harder to look at, so consider instead:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/kLMXz.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kLMXz.png&quot; alt=&quot;Disturbance input 2&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can combine the terms on the feedback branch:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/BFFcw.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/BFFcw.png&quot; alt=&quot;Disturbance input 3&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And then &lt;a href=&quot;https://en.wikibooks.org/wiki/Control_Systems/Block_Diagrams#Simplifying_Block_Diagrams&quot; rel=&quot;nofollow noreferrer&quot;&gt;reduce the loop&lt;/a&gt; (Line 4 on that page) and get:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Q7S8c.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Q7S8c.png&quot; alt=&quot;Disturbance 4&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's important (as always) to keep up with the negative signs. Here they cancel in the denominator and you're left with:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;y = - d\frac{ S_2}{1 + S_1 S_2 G_r}\\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The complete solution is the summation (superposition) of the response from the input &lt;span class=&quot;math-container&quot;&gt;$w$&lt;/span&gt; and the disturbance &lt;span class=&quot;math-container&quot;&gt;$d$&lt;/span&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;y = w\frac{S_1 S_2 G_r}{1 + S_1 S_2 G_r} - d\frac{ S_2}{1 + S_1 S_2 G_r}\\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2019-09-13T16:07:26.510" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19456" PostTypeId="2" ParentId="19454" CreationDate="2019-09-13T16:19:03.883" Score="2" Body="&lt;p&gt;Because of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Superposition_principle&quot; rel=&quot;nofollow noreferrer&quot;&gt;Superposition principle&lt;/a&gt;, you can write &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt; as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;y = H_1 w + H_2 d,&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where &lt;span class=&quot;math-container&quot;&gt;$H_1$&lt;/span&gt; is the system transfer function when &lt;span class=&quot;math-container&quot;&gt;$d=0$&lt;/span&gt;, whereas &lt;span class=&quot;math-container&quot;&gt;$H_2$&lt;/span&gt; is the corresponding transfer function for &lt;span class=&quot;math-container&quot;&gt;$w=0$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It turns that&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;H_1 = \frac{G_rS_1S_2}{1+G_rS_1S_2},&#xA;$$&lt;/span&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;while&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;H_2 = \frac{-S_2}{1+G_rS_1S_2}.&#xA;$$&lt;/span&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$H_2$&lt;/span&gt; can be readily obtained using block simplification by observing that it holds:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/cEd0X.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/cEd0X.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="6941" LastActivityDate="2019-09-13T16:19:03.883" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19458" PostTypeId="1" CreationDate="2019-09-14T03:32:36.550" Score="0" ViewCount="271" Body="&lt;p&gt;This might be a stupid question to ask here .i am confused whether the dof of this drone is 3 or 4? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/8EWst.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8EWst.png&quot; alt=&quot;drone&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="23809" LastActivityDate="2019-09-19T15:41:47.423" Title="What is the degree of freedom of the following drone?" Tags="&lt;robotic-arm&gt;&lt;manipulator&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19460" PostTypeId="2" ParentId="19458" CreationDate="2019-09-15T05:17:59.287" Score="0" Body="&lt;p&gt;Assuming that it is a planar robot (only moving in XY-plane), then from the diagram one can see it has 3-DoF (x,y,pitch) along with 2 additional DoF for the arm links. &lt;/p&gt;&#xA;" OwnerUserId="21747" LastActivityDate="2019-09-15T05:17:59.287" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19462" PostTypeId="1" CreationDate="2019-09-15T19:58:03.903" Score="1" ViewCount="36" Body="&lt;p&gt;For a thesis project for ways to localize a slide on a linear rail with a length of ~1m. The slide in question is the seat of an indoor rowing machine: &lt;a href=&quot;https://www.concept2.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Concept2 Ergometer&lt;/a&gt; Price is definitely an issue as we want to built multiple sensor setups. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need the location of the slide with an accuracy of around 1mm with a rate of 50-100Hz. Adding cables to the seat is something I want to avoid, so I'd like to have an external sensor (fixed to the rail) and at most a target (e.g. reflective surface) on the slide. Seat speed can be up to 2m/s. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I thought about Sharp triangulation sensors (like the &lt;a href=&quot;https://www.pololu.com/file/0J812/gp2y0a60szxf_e.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;GP2Y0A60SZ0F&lt;/a&gt;), but I have no experience with the accuracy and its behavior with fast moving objects. Even when operator with 5V, the output for 50cm and 1m only differs by 0.25V so I assume that there is a major accuracy degradation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ultrasonic is to slow and inaccurate, and commercial laser triangulation sensors are quickly at &gt;200$.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which sensor principles am I missing? As soon as I know what I'm looking for, I can find a sensor on my own (no shopping question!), but I can't search for a sensor if I have no starting point. &lt;/p&gt;&#xA;" OwnerUserId="23196" LastActivityDate="2019-09-21T09:27:12.610" Title="Sensor options for localization on linear rail" Tags="&lt;sensors&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19465" PostTypeId="2" ParentId="19453" CreationDate="2019-09-16T19:54:47.743" Score="0" Body="&lt;p&gt;In this case, the Z value and rotation value are constant, so it's a 2DOF system. You can do the same calibration as with the 6DOF and you'll find a homogeneous matrix as usual. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The difference here is that instead of a direct kinematics approach from a manipulator you'll have to determine the position (0, 0) for the CNC Plotter and the constant Z and rotation. Depending on the method (if you're using a least-squares method), you can find the Z and rotation value as well, otherwise, one approach is to determine them previously and find the X and Y values for the matrix.&lt;/p&gt;&#xA;" OwnerUserId="22691" LastActivityDate="2019-09-16T19:54:47.743" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19466" PostTypeId="1" CreationDate="2019-09-16T21:16:25.867" Score="1" ViewCount="51" Body="&lt;p&gt;I try to estimate a system transfer function by hand calculation from a bode plot data but I could not succeed yet and I need someone help. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;it will be appreciated if anyone explains or refer me to a source where I can learn to estimate the TF with Matlab tools/codes (I couldn't do it with system identification toolbox)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;frequencies (rad/s): 0.5 ;  1 ; 2 ;  3 ;  4  ;  5  ;  7.5;  10 ;  15 ;  30 ;  50&lt;/p&gt;&#xA;&#xA;&lt;p&gt;magnitudes (dB)    : 12  ;  6 ; 0 ; -3 ; -14 ; -20 ; -26 ; -30 ; -30 ; -34 ; -40&lt;/p&gt;&#xA;&#xA;&lt;p&gt;phase (degree)     :-37  ; -54; -109 ; -112 ; -103; -106; -107; -86 ; -86 ; -86  ; -86&lt;/p&gt;&#xA;" OwnerUserId="10090" LastEditorUserId="6941" LastEditDate="2019-09-17T06:31:05.770" LastActivityDate="2019-09-17T06:31:05.770" Title="Finding transfer function from bode plot" Tags="&lt;control&gt;&lt;matlab&gt;" AnswerCount="0" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19467" PostTypeId="1" CreationDate="2019-09-17T08:32:03.763" Score="0" ViewCount="112" Body="&lt;p&gt;I am unable to use a custom ROS message type on machine B that I have created on machine A.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Machine A:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;runs roscore.&lt;/li&gt;&#xA;&lt;li&gt;has the custom message code as a ROS package.&lt;/li&gt;&#xA;&lt;li&gt;has sourced the setup.bash of the package.&lt;/li&gt;&#xA;&lt;li&gt;runs &lt;code&gt;rostopic pub /test_topic my_custom_msg test_value&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Machine B:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;when I run: &lt;code&gt;rostopic list&lt;/code&gt;, I do see the topic I am publishing to on machine A (&quot;/test_topic&quot;).&lt;/li&gt;&#xA;&lt;li&gt;when I run: &lt;code&gt;runmsg list&lt;/code&gt;, I &lt;strong&gt;DO NOT&lt;/strong&gt; see the custom message type I am looking for (the one, my topic is using: &quot;my_custom_msg&quot;)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;When I do these things locally, means all on machine A, everything works as expected: I am publishing a test message using my custom message type and with &lt;code&gt;rostopic echo&lt;/code&gt; I can even successfully subscribe to it with getting all the messages that are sent displayed correctly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, what am I missing in order to use my custom message from machine A also on machine B?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please, I really need help on that!&lt;/p&gt;&#xA;" OwnerUserId="23509" LastActivityDate="2019-09-17T09:26:01.927" Title="Using a ROS custom message type across machines/hosts" Tags="&lt;ros&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19469" PostTypeId="2" ParentId="19467" CreationDate="2019-09-17T09:26:01.927" Score="3" Body="&lt;p&gt;&lt;strong&gt;I solved the problem!&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The solution is to simply have the custom message definition on all machines where you'd want to use it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This might be most comfortable if the custom message is realized as a separate ROS package, because then it's easier to distribute it among different machines.&lt;/p&gt;&#xA;" OwnerUserId="23509" LastActivityDate="2019-09-17T09:26:01.927" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19471" PostTypeId="1" AcceptedAnswerId="19474" CreationDate="2019-09-17T10:08:31.477" Score="0" ViewCount="67" Body="&lt;p&gt;I am using an IMU to measure the yaw rotation angle of a car. I need to translate the rotation measured to COG of the vehicle. I can ignore roll and pitch as I am driving it on a flat surface. So, does yaw rotation is same at origin of IMU and at COG? If not, how to translate the measured rotation to COG of vehicle?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I went through some research papers, I could not quite follow things. Any help is appreciated. &lt;/p&gt;&#xA;" OwnerUserId="23823" LastActivityDate="2019-09-17T17:34:44.983" Title="Does Vehicle Yaw angle measures same at every point on it? If not, how to translate yaw rotation to COG of the vehicle from different point?" Tags="&lt;mobile-robot&gt;&lt;kinematics&gt;&lt;imu&gt;&lt;rotation&gt;&lt;autonomous-car&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19472" PostTypeId="2" ParentId="15265" CreationDate="2019-09-17T11:39:46.937" Score="1" Body="&lt;p&gt;this may be a bit late to answer, but i hope it may be of help for people learning ros in the future.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, in the URDF model,&#xA;        &#xA;            &#xA;            &#xA;            &#xA;            &#xA;mu1 and mu2 is friction coefficient was set as 0.&#xA;If the wheel has no friction coefficient, it has no friction.&#xA;Hence, the wheel will not move, since it has no friction, set it as non-zero and it will move.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second, in the diff_drive (yaml) file&#xA;pose_covariance_diagonal and twist_covariance diagonal is required to be set up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Refer to &lt;a href=&quot;https://docs.ros.org/api/geometry_msgs/html/msg/PoseWithCovariance.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://docs.ros.org/api/geometry_msgs/html/msg/PoseWithCovariance.html&lt;/a&gt;&#xA;and TwistWithCovariance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How to set this matrix up?&#xA;The higher the number, the more it effects that particular matrix.&#xA;1.1 1.2 1.3&#xA;2.1 2.2 2.3&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1.1 = x in relation to x.&#xA;etc... &#xA;Covariance matrix explained -&gt; &lt;a href=&quot;https://manialabs.wordpress.com/2012/08/06/covariance-matrices-with-a-practical-example/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://manialabs.wordpress.com/2012/08/06/covariance-matrices-with-a-practical-example/&lt;/a&gt; &#xA;&lt;a href=&quot;https://i.stack.imgur.com/F7mc2.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/F7mc2.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/JQeQO.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JQeQO.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="23825" LastActivityDate="2019-09-17T11:39:46.937" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19473" PostTypeId="1" CreationDate="2019-09-17T16:55:34.620" Score="0" ViewCount="52" Body="&lt;p&gt;I'm looking at the &lt;a href=&quot;https://vision.in.tum.de/data/datasets/rgbd-dataset/download&quot; rel=&quot;nofollow noreferrer&quot;&gt;TUM dataset&lt;/a&gt; and wonder why the depth images and the file formats appear to be inconsistent. According to the &lt;a href=&quot;https://vision.in.tum.de/data/datasets/rgbd-dataset/file_formats&quot; rel=&quot;nofollow noreferrer&quot;&gt;file formats&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The depth images are scaled by a&#xA;  factor of 5000, i.e., a pixel value of&#xA;  5000 in the depth image corresponds to&#xA;  a distance of 1 meter from the camera,&#xA;  10000 to 2 meter distance, etc. A&#xA;  pixel value of 0 means missing&#xA;  value/no data.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;However, the pixels in the background appear to be darker than those in the foreground. By the file formats, the background pixels should have higher values than those in the foreground. How come they are darker?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2bInT.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2bInT.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11489" LastEditorUserId="11489" LastEditDate="2019-09-17T18:30:00.647" LastActivityDate="2019-09-17T18:30:00.647" Title="TUM RGBD SLAM dataset file format inconsistency?" Tags="&lt;slam&gt;&lt;monocular&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19474" PostTypeId="2" ParentId="19471" CreationDate="2019-09-17T17:34:44.983" Score="0" Body="&lt;p&gt;The best way to solve this is to position your IMU onto the Car's COG, so you can associate directly the IMU information to the COG.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case that's not possible (design choices, space, etc), two things need to be done:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) Find the transformation from the IMU to the COG. You need to find the translation and rotation from the IMU to the COG so you can compute any information given by the IMU in relation to the COG. If you're using ROS, TF2 solves that for you once you have the URDF.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) Using the transformation, relate the changes in the IMU with changes in the COG. Every time you read information from the IMU (Force, acceleration, etc.), you have to transform that information in relation to the COG. The angular rate will change accordingly to the transform, for example. It's a challenging problem where there is not one single solution. Most solutions I found use an EKF for it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some papers I found:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4208239/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4208239/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://ieeexplore.ieee.org/document/6728637&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://ieeexplore.ieee.org/document/6728637&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://journals.sagepub.com/doi/abs/10.1177/0954410014550052&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://journals.sagepub.com/doi/abs/10.1177/0954410014550052&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="22691" LastActivityDate="2019-09-17T17:34:44.983" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19475" PostTypeId="1" CreationDate="2019-09-18T07:27:04.093" Score="0" ViewCount="593" Body="&lt;p&gt;I am using an MPU-6050 as a compass connected to an Arduino Uno and using the AccZ register presumably from the accelerometer. So, first question, is the magnetometer signal processed internally with the magnetometer output to give true angle in relation to horizontal? Secondly, I placed a powerful magnet as close as I could to the chip and the output appeared to be unaffected. This is a perfect result for my application as my design required several magnets more than 7 cm away from the Sensor. Any clues?&lt;/p&gt;&#xA;" OwnerUserId="23832" LastActivityDate="2019-09-18T13:30:36.990" Title="MPU-6050 as a compass not affected by magnet!" Tags="&lt;accelerometer&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19476" PostTypeId="1" AcceptedAnswerId="19477" CreationDate="2019-09-18T08:31:46.307" Score="2" ViewCount="22" Body="&lt;p&gt;I'm trying to capture depth images with a RGBD camera, but all of the images have undetectable outlines around objects:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/q3W5p.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/q3W5p.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this expected from RGBD cameras or is mine a dud? It's an Astra Pro.&lt;/p&gt;&#xA;" OwnerUserId="11489" LastActivityDate="2019-09-18T08:43:29.543" Title="Depth images with undetectable outlines" Tags="&lt;slam&gt;&lt;computer-vision&gt;&lt;cameras&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19477" PostTypeId="2" ParentId="19476" CreationDate="2019-09-18T08:43:29.543" Score="0" Body="&lt;p&gt;That's perfectly normal and expected. Most RGBD camera work by projecting a point pattern into the world and capturing it with an IR-camera. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Camera and projector are positioned some cm apart (called baseline) to make triangulation possible. So there is always the chance that some parts of the world cannot be seen by the camera even though the projector put some pattern on them (and vice versa). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The camera also needs to see a small patch of the pattern and at depth jumps, some part of the pattern is missing. &lt;/p&gt;&#xA;" OwnerUserId="23196" LastActivityDate="2019-09-18T08:43:29.543" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19478" PostTypeId="2" ParentId="11518" CreationDate="2019-09-18T10:35:14.063" Score="0" Body="&lt;p&gt;I would mark each robot with an AprilTag or anyone of the fiducial markers available. Than with an &quot;easy&quot; openCV program and a camera observer you can track the movements and the orientation for each robot distinguishing each one form the others relying on the tag id detected.&lt;/p&gt;&#xA;" OwnerUserId="23833" LastActivityDate="2019-09-18T10:35:14.063" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19479" PostTypeId="2" ParentId="19475" CreationDate="2019-09-18T13:30:36.990" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;So, first question, is the magnetometer signal processed internally with the magnetometer output to give true angle in relation to horizontal?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://www.invensense.com/products/motion-tracking/6-axis/mpu-6050/&quot; rel=&quot;nofollow noreferrer&quot;&gt;MPU-6050&lt;/a&gt; does not have a magnetometer. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Secondly, I placed a powerful magnet as close as I could to the chip and the output appeared to be unaffected. This is a perfect result for my application as my design required several magnets more than 7 cm away from the Sensor. Any clues?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There's no magnetometer, so on the one hand it's (probably) not going to be affected by magnets, but on the other hand there's nothing to give you a heading fix. Any heading you're getting from the device is based on numeric integration of the gyro outputs. The gyro output is not perfect, so you're going to have drift in the &quot;heading&quot; you get from the sensor output.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2019-09-18T13:30:36.990" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19480" PostTypeId="1" CreationDate="2019-09-18T18:36:06.210" Score="2" ViewCount="271" Body="&lt;p&gt;I downloaded an sd card image by Ubiquity Robotics which is an Ubuntu OS with ROS preinstalled onto my Raspberry Pi. This image creates a pifi access point for the Raspberry Pi and allows me to ssh into the Raspberry Pi by connecting my laptop to the access point created and doing &lt;code&gt;ssh ubuntu@10.42.0.1&lt;/code&gt;. Now then I tried connecting to my home router by using &lt;code&gt;pifi add &amp;lt;ssid&amp;gt; [&amp;lt;password&amp;gt;]&lt;/code&gt; and then &lt;code&gt;sudo reboot&lt;/code&gt;. I was able to connect to my home router this way. So after this I tried downloading the library I needed, pygame. So i typed &lt;code&gt;sudo apt-get install python3-pygame&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And this is what i got:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Reading package lists... Done&#xA;Building dependency tree       &#xA;Reading state information... Done&#xA;Package python3-pygame is not available, but is referred to by another package.&#xA;This may mean that the package is missing, has been obsoleted, or&#xA;is only available from another source&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;So I went to a pygame site and tried downloading the library another way:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sudo apt install libsdl2-dev libfreetype6-dev libsdl2-mixer-dev libsdl2-image-dev libsdl2-ttf-dev libjpeg-dev libpng-dev libportmidi-dev&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And this is what I got:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Reading package lists... Done&#xA;Building dependency tree       &#xA;Reading state information... Done&#xA;Note, selecting 'libpng12-dev' instead of 'libpng-dev'&#xA;E: Unable to locate package libsdl2-dev&#xA;E: Unable to locate package libsdl2-mixer-dev&#xA;E: Unable to locate package libsdl2-image-dev&#xA;E: Unable to locate package libsdl2-ttf-dev&#xA;E: Unable to locate package libportmidi-dev&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Now I have no clue on what to do and how to go about downloading the library. Is there a way I can directly download the library into the sd card image or what. Help me out pls.&lt;/p&gt;&#xA;" OwnerUserId="22212" LastActivityDate="2021-02-16T02:05:20.480" Title="How do I download libraries onto the Ubiquity Robotics Raspberry Pi image" Tags="&lt;ros&gt;&lt;raspberry-pi&gt;&lt;wifi&gt;&lt;robotics-library&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19481" PostTypeId="2" ParentId="19480" CreationDate="2019-09-19T01:22:31.390" Score="0" Body="&lt;p&gt;First do this &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sudo apt-get update&#xA;sudo apt-get upgrade&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then you try doing &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;sudo apt-get install python3-pip&lt;/code&gt; ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then do &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sudo pip3 install pygame&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If you are still getting the error related to SDL. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then do this &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;sudo apt-get install libsdl2-dev&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="23050" LastEditorUserId="23050" LastEditDate="2019-09-24T23:24:57.763" LastActivityDate="2019-09-24T23:24:57.763" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="19482" PostTypeId="1" AcceptedAnswerId="19483" CreationDate="2019-09-19T04:07:39.597" Score="0" ViewCount="62" Body="&lt;p&gt;What is the cheapest roll-angle-sensor (10degree accuracy, 60Hz update) you have come across for airborne&#xA;mobile robots that have a 20mm diameter, shaped like a rocket?  (The robot&#xA;is shaped like a rocket and one may need to fit a roll sensor inside of it.)&#xA;   I realize that for purely vertical travel, some type of compass would work, but the robot here needs to be able to travel horizontally as well as vertically.  This one below at inertiallabs.com is 554dollars.  I am hoping to find cheaper:&#xA;&lt;a href=&quot;https://inertiallabs.com/os3d.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://inertiallabs.com/os3d.html&lt;/a&gt;&#xA;Buy here for 554dollars:&#xA;&lt;a href=&quot;https://ozrobotics.com/shop/sub-miniature-3d-orientation-sensor-os3dm/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://ozrobotics.com/shop/sub-miniature-3d-orientation-sensor-os3dm/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="23839" LastEditorUserId="23839" LastEditDate="2019-09-19T14:27:09.487" LastActivityDate="2019-09-19T14:27:09.487" Title="What is the cheapest 20mm-diameter roll-angle-sensor (+/-10deg, 60Hz update) you have come across?" Tags="&lt;mobile-robot&gt;" AnswerCount="1" CommentCount="6" ClosedDate="2019-09-19T12:46:48.607" ContentLicense="CC BY-SA 4.0" />
  <row Id="19483" PostTypeId="2" ParentId="19482" CreationDate="2019-09-19T07:56:42.160" Score="1" Body="&lt;p&gt;Asking for the cheapest sensor does not make much sense without specifying a maximal error. Otherwise I propose to add a small rock, guess a zero-roll angle and you have a 'sensor' for free with a maximal error of 180deg. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A real solution would rather be any IMU with a magnetometer (like the &lt;a href=&quot;https://www.watterott.com/index.php?page=product&amp;amp;info=4719&quot; rel=&quot;nofollow noreferrer&quot;&gt;MPU9255&lt;/a&gt;). It's around 10$ and would give you the information you need. &lt;/p&gt;&#xA;" OwnerUserId="23196" LastActivityDate="2019-09-19T07:56:42.160" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19484" PostTypeId="2" ParentId="19458" CreationDate="2019-09-19T15:41:47.423" Score="2" Body="&lt;p&gt;In general i would say there is not enough information on this drawing, so we all ASSUME.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you look at this and assume it is a multicopter with 2 counter rotating propellers (can not fly in a normal fashion without a pivoting mechanism, like a Chinook) you can only have yaw, roll and up down control which makes for 3-DoF. For the arm it give you 2 DoF (assuming no other pivot point exist that are not visible on the drawing)&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;From a practical point of view if the top is really a drone (multicopter) then it needs four propellers (which i can only see two of in the 2D picture)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A multicopter like i assumed moves like a ship 6-DoF (not an airplane 3-DoF)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I argue that as far as the drone is concerned it still has a 6-DoF. The attached arm has 2-DoF. &lt;a href=&quot;https://en.wikipedia.org/wiki/Degrees_of_freedom_(mechanics)&quot; rel=&quot;nofollow noreferrer&quot;&gt;wikipedia&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Whether it serves any purpose to count the additional movement the arm can make as additional DoF is in my view debatable because you can not move in any more ways than before (i look at the maneuverability from the drones perspective and the arm endpoint Pe). You achieve the same result for the endpoint of the arm when you move the drone or when you move the arm. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I could of course be completely wrong being human.&lt;/p&gt;&#xA;" OwnerUserId="22914" LastActivityDate="2019-09-19T15:41:47.423" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19485" PostTypeId="2" ParentId="12686" CreationDate="2019-09-19T18:49:44.973" Score="0" Body="&lt;p&gt;I am going through a similar issue. Please check this link below for initial calibration in all the axis. This is not for MPU but a similar method could be followed. I am still working on it and, If I find a suitable solution, I will update. Hope this helps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://chionophilous.wordpress.com/2011/08/26/accelerometer-calibration-ii-simple-methods/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://chionophilous.wordpress.com/2011/08/26/accelerometer-calibration-ii-simple-methods/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, refer to this pdf below. This is just for the accelerometer. But might be helpful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.st.com/resource/en/application_note/dm00119044.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.st.com/resource/en/application_note/dm00119044.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="23823" LastActivityDate="2019-09-19T18:49:44.973" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19486" PostTypeId="1" CreationDate="2019-09-19T18:57:51.617" Score="0" ViewCount="189" Body="&lt;p&gt;I have a general question about ROS - since it is NOT a real-time operating system(nor is Linux which it runs on), why can it be used for robotics applications which almost always have real time performance needs? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically unless you can put an upper bound on your perception and motion task times I don't understand how anything can actually work on a physical system - can someone explain? &lt;/p&gt;&#xA;" OwnerUserId="21514" LastActivityDate="2019-09-20T11:14:59.117" Title="Value of ROS without real-time performance in robotics?" Tags="&lt;ros&gt;&lt;operating-systems&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19487" PostTypeId="2" ParentId="19486" CreationDate="2019-09-19T20:03:02.587" Score="3" Body="&lt;p&gt;Let's start with a pick and place robot (a robot arm with a camera and a suction cup that recognizes object in a bin and picks them individually). We can move the robot above the box, and simply wait until we have a captured an image, segmented the objects and computed grasping points and collision free trajectories.  We then move to robot to a grasping position, activate the pump and wait until we have grasped something. No need for any real-time in the perception and motion planning part. The motors however have to be controlled in a real-time loop so that they are moving synchronous and immediately stop as soon as a human comes to close to the robot. This part needs to be hard real time. &#xA;The whole system could for example be built by a ROS-part that does perception and motion planning and an ABB-Robot (with its own fast(!) realtime controller) that now and then gets new goal poses from the ROS-part and executes them while sending its current configuration back to ROS. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The most important issue here is that we can stop the robot while we are thinking. This does not work if your robot is a drone or a fast moving car. In the drone cases, we need at least a (fast) real time flight controller that keeps the drone flying while we for example send image data to a ground station to decide where to fly next. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In many applications, only small subsystems (mostly the motors) need to be controlled in real-time and the higher level tasks (perception, planning, reasoning, visualization, logging, multi-robot coordination) can take as long as they want. Trying to implement them in real time would be extremely difficult and completely unnecessary.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Update:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another important point about real-time vs non-real-time is its definition.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It does NOT(!) mean that the system can process sensor data very quickly and can therefore react immediately to new sensor data (e.g. child running in front of car). It only means that the system guarantees to perform a computation within a certain time limit. It is perfectly possible that this time limit is in the range of seconds. &#xA;For a motor controller (as used above), you need a real-time system that has a guaranteed maximal computation duration in the ms-range. So even if you port ROS to real-time (which is currently done with ROS2), you don't magically are able to control fast moving robots.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So real-time is required, but not sufficient for controlling (the moving parts of) robots. &lt;/p&gt;&#xA;" OwnerUserId="23196" LastEditorUserId="23196" LastEditDate="2019-09-20T11:14:59.117" LastActivityDate="2019-09-20T11:14:59.117" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19488" PostTypeId="2" ParentId="19424" CreationDate="2019-09-20T11:20:26.123" Score="0" Body="&lt;p&gt;You need more computing power than the Arduino Uno. Your question is needs more context, there is endless electronics that can do it, but if you want to find one that can handle your particular case, you need to think about the following:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;What kind of data rates do i need to stream (it is a trade off between computation power, transmission distance, data rates)&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;RGB cameras have very different resolutions which influence data rates (compression needed?)&lt;/li&gt;&#xA;&lt;li&gt;What are my sensors data rates wanted (compression needed?)&lt;/li&gt;&#xA;&lt;li&gt;Does it need to be realtime (what delay is acceptable)&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;What should the electronic platform do else then streaming data?&lt;/li&gt;&#xA;&lt;li&gt;Physical constraints your robot has (how big, heavy can your electronics be)&lt;/li&gt;&#xA;&lt;li&gt;Physical pins you need to connect sensors (or what interfaces you want to use like i2c, rs232, usb, camera direct connection, ...)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;For a project i did, i made a simple data-link for a drone, i needed a Raspberry Pi 2 to cope with the 1080p video compression and some sensor data and command and control link. Over a standard internet protocol (RTSP, TCP, UDP) and compression you will introduce delay i estimated around 300ms for the video (it used about 3 MBit for 1080p h264 compressed) for the transmission i used an ubiquity long range wifi with limited success (you never get the ranges they advertise, especially if you also move), with a 3g or 4g modem you may get better ranges but you will be dependent on the 3g/4g network coverage. As the project evolved they now changed to a Raspberry Pi 3 because they wanted also to stream LiDAR data (for LiDAR data rates needed are big for a usable data set, 4 MBit is not uncommon). But all of this things can be done in a completely different way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For projects like this there are trade offs to be made, unless you define your functions properly and have some experience it is hard to know what to use in the end. The technology today will allow you to do what you describe but there will be a cost to it (time, money, learning).&lt;/p&gt;&#xA;" OwnerUserId="22914" LastActivityDate="2019-09-20T11:20:26.123" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19489" PostTypeId="1" AcceptedAnswerId="19490" CreationDate="2019-09-20T14:57:46.223" Score="4" ViewCount="254" Body="&lt;p&gt;So we all know (and love) the typical dynamic equation of a robotic arm:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;M(q) \ddot{q}+C(q,\dot{q})\dot{q}+G(q)=\tau&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where M is the mass matrix, G is gravity and C is Coriolis and Centrifugal forces.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Coriolis and Centrifugal forces are pseudo forces that are experienced only for the frame that is attached to the body that is rotating. But my understanding is that all calculations happen relative to the base frame, which is static. The need for Coriolis and Centrifugal forces would imply that the forces are actually expressed in the frame that is attached to each link.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To put my question simply, why do we need the coriolis and centrifugal forces in the dynamic equation of a robotic arm (since everything is done relative to the initial/base frame)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(p.s. feel free to use a single or double pendulum robotic arm example if you would prefer).&lt;/p&gt;&#xA;" OwnerUserId="10900" LastActivityDate="2019-09-21T06:56:46.813" Title="Why do we need coriolis and centrifugal forces when it comes to the dynamics of a robotic arm?" Tags="&lt;robotic-arm&gt;&lt;dynamics&gt;&lt;force&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19490" PostTypeId="2" ParentId="19489" CreationDate="2019-09-21T06:56:46.813" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;But my understanding is that all calculations happen relative to the&#xA;  base frame&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This is incorrect. Take a look at this two-link arm manipulator. The point (&lt;span class=&quot;math-container&quot;&gt;$x_2,y_2$&lt;/span&gt;) is obviously expressed in a moving frame &lt;span class=&quot;math-container&quot;&gt;$y_1,x_1$&lt;/span&gt;. Another way to look at the problem is to use Lagrangian approach which free you from constraint forces. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/0QJeS.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0QJeS.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2155" LastActivityDate="2019-09-21T06:56:46.813" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="19491" PostTypeId="2" ParentId="19462" CreationDate="2019-09-21T09:27:12.610" Score="1" Body="&lt;p&gt;Have you thought about a linear encoder system &lt;a href=&quot;https://en.wikipedia.org/wiki/Linear_encoder&quot; rel=&quot;nofollow noreferrer&quot;&gt;(wiki)&lt;/a&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not sure whether it is cheaper though.&lt;/p&gt;&#xA;" OwnerUserId="19759" LastActivityDate="2019-09-21T09:27:12.610" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19493" PostTypeId="1" CreationDate="2019-09-21T15:55:04.580" Score="0" ViewCount="19" Body="&lt;p&gt;I am building an aerial robot that needs to be able to detect pieces of a QR code (examples below) and combine them to process the information contained in the fully assembled QR code.  I don't have much experience with CV and am not sure where to start.  Does anyone have any ideas about how I might go about doing this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/lR1k4m.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/lR1k4m.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/hCAfxm.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hCAfxm.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/lrCNTm.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/lrCNTm.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/JYgewm.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JYgewm.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="20111" LastActivityDate="2019-09-21T15:55:04.580" Title="Detecting pieces of a Version 1 QR code and processing the assembled version" Tags="&lt;computer-vision&gt;" AnswerCount="0" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="19494" PostTypeId="1" CreationDate="2019-09-21T17:50:18.683" Score="4" ViewCount="70" Body="&lt;p&gt;To gain some confidence, I want to implement the camera tracking (optimization problem) discussed in &lt;a href=&quot;http://openaccess.thecvf.com/content_iccv_2013/papers/Engel_Semi-dense_Visual_Odometry_2013_ICCV_paper.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Semi Dense Visual Odometry for a monocular camera&lt;/a&gt;&lt;sup&gt;J Engel, J Strum, D Cremers&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$E(\xi) = \underset{i}\Sigma\frac{\alpha(r_i(\xi))}{\sigma_{d_i}^2}(r_i(\xi))$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$r_i(\xi) = (I_2(w(x_i, d_i, \xi)) - I_1(x_i))$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Using Gauss-Newton method, as discussed in the same paper, (local optima) &lt;span class=&quot;math-container&quot;&gt;$\xi$&lt;/span&gt; between two monocular images can be found. Here is how I think the process goes:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Given&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Start with initial guess &lt;span class=&quot;math-container&quot;&gt;$\xi_0$&lt;/span&gt; (~ 0), Images &lt;span class=&quot;math-container&quot;&gt;$I_1, I_2$&lt;/span&gt;, Depth for some points in image &lt;span class=&quot;math-container&quot;&gt;$I_1$&lt;/span&gt; is given&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;Steps&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Start at lowest level (most coarse) &lt;span class=&quot;math-container&quot;&gt;$L_n$&lt;/span&gt; pyramid image (same as shrinked image?) and corresponding depth map (for points in shrinked image?)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Gauss Newton iterations with some library (I plan to use python for ease).&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Setup the residual calculation function that takes input &lt;span class=&quot;math-container&quot;&gt;$I_2$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$I_1$&lt;/span&gt;, {&lt;span class=&quot;math-container&quot;&gt;$x_i$&lt;/span&gt;}, {&lt;span class=&quot;math-container&quot;&gt;$d_i$&lt;/span&gt;} and {&lt;span class=&quot;math-container&quot;&gt;$\xi$&lt;/span&gt;} and produces &lt;span class=&quot;math-container&quot;&gt;$r_i$&lt;/span&gt;. The Jacobian involved will be calculated numerically.&lt;/li&gt;&#xA;&lt;li&gt;I can skip &lt;span class=&quot;math-container&quot;&gt;$\alpha(.)$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\sigma_{d_i}^2$&lt;/span&gt; for now. &lt;span class=&quot;math-container&quot;&gt;$E(\xi) = \underset{i}\Sigma ~r_i^2$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;li&gt;At the end I expect to get the result &lt;span class=&quot;math-container&quot;&gt;$\xi_L$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Use the solution &lt;span class=&quot;math-container&quot;&gt;$\xi_L$&lt;/span&gt; as initial guess and repeat for the next pyramid level (&lt;strong&gt;n-1&lt;/strong&gt;)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Questions:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Am I missing some step in above process ? Please let me know.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Is there a library function in openCV that take an image (and its depth image) as input and give in output the requested pyramid level (for a choosen &lt;strong&gt;n&lt;/strong&gt;) image as output (depth image will also need to be shrinked)?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;PS: can someone with higher reputation add the tag &amp;quot;Image-alignment&amp;quot; to this question?&lt;/p&gt;&#xA;" OwnerUserId="23497" LastEditorUserId="23497" LastEditDate="2020-12-06T18:41:09.310" LastActivityDate="2021-02-06T15:00:20.767" Title="Performing Image alignment using pyramid levels with semi dense depth" Tags="&lt;computer-vision&gt;&lt;visual-odometry&gt;&lt;monocular&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19495" PostTypeId="1" CreationDate="2019-09-22T09:14:39.253" Score="1" ViewCount="56" Body="&lt;p&gt;I have built a quadcopter with a CC3D FC, using LibrePilot for configuration. Everything is smooth with the tx/rx I used to command the quad with but now I would like to effectively use the RPi as a reciever.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am aware of the voltage difference and have leveled it with a bidirectional 3.3v to 5v, vice versa, leveler and I have a connection between the Pi and the CC3D via its Flexi port. As I power the Pi, the FC powers on and ESCs give the signal sound.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, my question is - how can I now move the motors?&#xA;I am aware of the SBUS protocol as an option to emulate the RPi as a receiver running the motors on PWM but how do I practically make this happen?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would appreciate any feedback.&lt;/p&gt;&#xA;" OwnerUserId="23312" LastActivityDate="2019-09-22T09:14:39.253" Title="Serial Communication between RaspberryPi and CC3D?" Tags="&lt;quadcopter&gt;&lt;raspberry-pi&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19496" PostTypeId="1" AcceptedAnswerId="19528" CreationDate="2019-09-22T10:57:21.337" Score="1" ViewCount="121" Body="&lt;p&gt;I am totally new to VSLAM algorithms and would want to plot the path followed by the moving camera. I am using the open source implementation of ORB_SLAM2 for a rgb-d camera on benchmark dataset. The output of the algorithm produces a CameraTrajectory.txt file. The file is in the format : [time_stamp] [tx] [ty] [tz] [qx] [qy] [qz] [qw] . I am aware of that the rotations are in Quarternion form but cannot figure out how to plot the full 3D plot of the camera path from these seven values tx,ty,tz,qx,qy,qz,qw . I need a [time_stamp] [x] [y] [z] format.&lt;/p&gt;&#xA;" OwnerUserId="23490" LastActivityDate="2019-09-29T05:28:12.603" Title="How to plot the 3D camera trajectory from a VSLAM output" Tags="&lt;ros&gt;&lt;slam&gt;&lt;cameras&gt;&lt;visual-odometry&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19499" PostTypeId="1" CreationDate="2019-09-23T03:03:18.890" Score="0" ViewCount="24" Body="&lt;p&gt;I have pairs of matched 3D points (10~50 points) with outliers included. I would like to find the transformation that aligns the source points to the destination points. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To prevent reinventing the wheel, I am looking for a library or code that can process the source, destination and pairs information.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems like most of the ICP libraries I found on google takes source, destination points and find matched points by itself which I don't need. Furthermore, global registration performance of commonly used ICP libraries is usually poor. I have trustable pair information but with outliers. I just need RANSAC and registration without the closest point finder.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I already have the code that I wrote in Matlab using RANSAC and SVD but I need c++ version. Does anyone know such code or library?&lt;/p&gt;&#xA;" OwnerUserId="19219" LastEditorUserId="19219" LastEditDate="2019-09-23T04:10:33.933" LastActivityDate="2019-09-23T04:10:33.933" Title="3D points registration with given pairs" Tags="&lt;icp&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19500" PostTypeId="1" CreationDate="2019-09-23T10:19:27.973" Score="0" ViewCount="89" Body="&lt;p&gt;I am reading the paper &quot;&lt;a href=&quot;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.460.2536&amp;amp;rep=rep1&amp;amp;type=pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Motion control of wheeled mobile robots&lt;/a&gt;&quot; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;at page 5, as we have the equation (34.7), i wonder how it contains &lt;span class=&quot;math-container&quot;&gt;$− dc(s)\dot s$&lt;/span&gt; in side. As the triangle law of vector: &lt;span class=&quot;math-container&quot;&gt;$\vec{OP}=\vec{OP_s} +\vec{P_sP}$&lt;/span&gt;. that is enough. Taking derivative, we should get (34.7) without &lt;span class=&quot;math-container&quot;&gt;$− dc(s)\dot s$&lt;/span&gt;&lt;/p&gt;&#xA;" OwnerUserId="16769" LastEditorUserId="2289" LastEditDate="2019-09-23T13:58:56.530" LastActivityDate="2020-02-28T08:02:50.327" Title="How does it get a bizarre term in triangle law of vector equation in a paper" Tags="&lt;mobile-robot&gt;&lt;kinematics&gt;&lt;path-planning&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19503" PostTypeId="1" CreationDate="2019-09-23T17:36:34.257" Score="0" ViewCount="26" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/6TecM.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6TecM.png&quot; alt=&quot;Image of two link manipulator&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My professor described the end effector position as &lt;span class=&quot;math-container&quot;&gt;$q_{e} = \begin{bmatrix} x_e \\y_e\end{bmatrix} = \begin{bmatrix} l_1 cos(\alpha_1) + l_2cos(\alpha_1 + \alpha_2) \\ l_1 sin(\alpha_1) + l_2sin(\alpha_1 + \alpha_2) \end{bmatrix}$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why isn't the expression &lt;span class=&quot;math-container&quot;&gt;$\begin{bmatrix} l_1 cos(\alpha_1) + l_2cos(\alpha_1 - \alpha_2) \\ l_1 sin(\alpha_1) + l_2sin(\alpha_1 - \alpha_2) \end{bmatrix}$&lt;/span&gt;&lt;/p&gt;&#xA;" OwnerUserId="23865" LastActivityDate="2019-09-23T17:36:34.257" Title="Two Link Manipulator End Effector Position" Tags="&lt;pose&gt;" AnswerCount="0" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19504" PostTypeId="1" CreationDate="2019-09-23T18:55:22.073" Score="0" ViewCount="828" Body="&lt;p&gt;I have an existing ROS workspace which was built in C++. I am trying to implement a node built by The Construct in python which reads distance travelled from the &lt;code&gt;/odom&lt;/code&gt; topic. I have successfully built a package within my existing work space containing their code and can run the node.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I &lt;code&gt;rosrun&lt;/code&gt; the node, I am receiving an error on the roscore saying:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;[ERROR]: Client [/movement_detector_node] wants topic /odom to have datatype/md5sum [nav_msgs/Odometry], but our version has [geometry_msgs/PoseArray]. Dropping connection.&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/I4Ciu.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/I4Ciu.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It looks like my existing work space uses &lt;code&gt;Type: geometry_msgs/PoseArray&#xA;&lt;/code&gt; messages to communicate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could I please get some help on the proper way to debug and fix this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Node for distance collection below. All credit belongs to The Construct. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#!/usr/bin/env python&#xA;&#xA;import rospy&#xA;import math&#xA;from nav_msgs.msg import Odometry&#xA;from geometry_msgs.msg import Point&#xA;from std_msgs.msg import Float64&#xA;&#xA;class MovementDetector(object):&#xA;    def __init__(self):&#xA;        self._mved_distance = Float64()&#xA;        self._mved_distance.data = 0.0&#xA;        self.get_init_position()&#xA;&#xA;        self.distance_moved_pub = rospy.Publisher('/moved_distance', Float64, queue_size=1)&#xA;        rospy.Subscriber(&quot;/odom&quot;, Odometry, self.odom_callback)&#xA;&#xA;    def get_init_position(self):&#xA;        data_odom = None&#xA;        while data_odom is None:&#xA;            try:&#xA;                data_odom = rospy.wait_for_message(&quot;/odom&quot;, Odometry, timeout=1)&#xA;            except:&#xA;                rospy.loginfo(&quot;Current odom not ready yet, retrying for setting up init pose&quot;)&#xA;&#xA;        self._current_position = Point()&#xA;        self._current_position.x = data_odom.pose.pose.position.x&#xA;        self._current_position.y = data_odom.pose.pose.position.y&#xA;        self._current_position.z = data_odom.pose.pose.position.z&#xA;&#xA;    def odom_callback(self,msg):&#xA;        NewPosition = msg.pose.pose.position&#xA;        self._mved_distance.data += self.calculate_distance(NewPosition, self._current_position)&#xA;        self.updatecurrent_positin(NewPosition)&#xA;        if self._mved_distance.data &amp;lt; 0.000001:&#xA;            aux = Float64()&#xA;            aux.data = 0.0&#xA;            self.distance_moved_pub.publish(aux)&#xA;        else:&#xA;            self.distance_moved_pub.publish(self._mved_distance)&#xA;&#xA;    def updatecurrent_positin(self, new_position):&#xA;        self._current_position.x = new_position.x&#xA;        self._current_position.y = new_position.y&#xA;        self._current_position.z = new_position.z&#xA;&#xA;    def calculate_distance(self, new_position, old_position):&#xA;        x2 = new_position.x&#xA;        x1 = old_position.x&#xA;        y2 = new_position.y&#xA;        y1 = old_position.y&#xA;        dist = math.hypot(x2 - x1, y2 - y1)&#xA;        return dist&#xA;&#xA;    def publish_moved_distance(self):&#xA;        &quot;&quot;&quot;&#xA;        Loops untils closed, publishing moved distance&#xA;        &quot;&quot;&quot;&#xA;        rospy.spin()&#xA;&#xA;&#xA;&#xA;        # spin() simply keeps python from exiting until this node is stopped&#xA;        rospy.spin()&#xA;&#xA;if __name__ == '__main__':&#xA;    rospy.init_node('movement_detector_node', anonymous=True)&#xA;    movement_obj = MovementDetector()&#xA;    movement_obj.publish_moved_distance()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;UPDATE:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was able to fix this problem but now have an additional question. Basically the existing workspace was expecting the subscriber to use the &lt;code&gt;geometry_msgs\PoseArray&lt;/code&gt; message. Once I imported that message and used it in the callback my error went away.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking at the &lt;code&gt;geometry_msgs\PoseArray&lt;/code&gt; message, it's composed of &lt;code&gt;position&lt;/code&gt; and &lt;code&gt;orientation&lt;/code&gt; message. For the distance collection script to work, I need to only use the &lt;code&gt;position&lt;/code&gt; message of &lt;code&gt;geometry_msgs\PoseArray&lt;/code&gt;. I wrote a basic subscriber to practice isolating this data. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Pictures of both message types below. Could someone help me isolate the &lt;code&gt;x&lt;/code&gt;, &lt;code&gt;y&lt;/code&gt;, and &lt;code&gt;z&lt;/code&gt; from the &lt;code&gt;geometry_msgs\PoseArray&lt;/code&gt; message?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ufu9E.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ufu9E.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#!/usr/bin/env python&#xA;&#xA;import rospy&#xA;import math&#xA;from nav_msgs.msg import Odometry&#xA;from geometry_msgs.msg import PoseArray&#xA;from std_msgs.msg import Float64&#xA;&#xA;def callback(data):&#xA;    rospy.loginfo(rospy.get_caller_id() + &quot;I heard %s&quot;, data)&#xA;&#xA;def listener():&#xA;&#xA;    # In ROS, nodes are uniquely named. If two nodes with the same&#xA;    # name are launched, the previous one is kicked off. The&#xA;    # anonymous=True flag means that rospy will choose a unique&#xA;    # name for our 'listener' node so that multiple listeners can&#xA;    # run simultaneously.&#xA;    rospy.init_node('listener', anonymous=True)&#xA;&#xA;    rospy.Subscriber(&quot;odom&quot;, PoseArray, callback)&#xA;&#xA;    # spin() simply keeps python from exiting until this node is stopped&#xA;    rospy.spin()&#xA;&#xA;if __name__ == '__main__':&#xA;    listener()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="22640" LastEditorUserId="22640" LastEditDate="2019-09-26T19:42:02.383" LastActivityDate="2019-10-07T15:08:01.877" Title="/odom topics not matching ERROR" Tags="&lt;ros&gt;&lt;python&gt;&lt;odometry&gt;&lt;c++&gt;&lt;errors&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19505" PostTypeId="2" ParentId="19504" CreationDate="2019-09-24T12:42:13.760" Score="1" Body="&lt;p&gt;As I understand your workspace send to the /odom topic &lt;a href=&quot;http://docs.ros.org/melodic/api/geometry_msgs/html/msg/PoseArray.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;geometry_msgs/PoseArray&lt;/a&gt; and you are trying to read it as &lt;a href=&quot;http://docs.ros.org/melodic/api/nav_msgs/html/msg/Odometry.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;nav_msgs/Odometry&lt;/a&gt;, As you can see they have totally different struct. I can imagine that you don't want to change the &quot;The Construct&quot; code, so my suggestion would be to create an intermediate topic in order to &quot;translate&quot; the poseArray to Odometry. This &lt;a href=&quot;http://wiki.ros.org/navigation/Tutorials/RobotSetup/Odom&quot; rel=&quot;nofollow noreferrer&quot;&gt;ros tutorial&lt;/a&gt; might help you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It would be helpful if you post you workspace code too.&lt;/p&gt;&#xA;" OwnerUserId="15592" LastActivityDate="2019-09-24T12:42:13.760" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="19506" PostTypeId="1" CreationDate="2019-09-24T17:54:17.753" Score="2" ViewCount="147" Body="&lt;p&gt;I think I might have originally posted this in the wrong stack exchange forum, &lt;a href=&quot;https://math.stackexchange.com/questions/3367799/regarding-implementation-of-kalman-filter&quot;&gt;link&lt;/a&gt;. I think this might be the right place, I am not sure if posting again is considered &quot;bad style&quot;, I apologize if this is the case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My questions is regarding the implementation of a discrete time Kalman filter assuming the time update occurs much more often than measurement update. I'll be specifically looking at the covariance propagation and Kalman gain equations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given a D.T. KF with the following state space model:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\hat{x}_{k+1} = F \hat{x}_k + G \omega_k&#xA;$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\hat{y}_k = C \hat{x}_k + \upsilon_k&#xA;$$&lt;/span&gt;&#xA;and assuming &lt;span class=&quot;math-container&quot;&gt;$\hat{x}^-(0)$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$P^-(0)$&lt;/span&gt; are known as well as the process and measurement noise intensities (Q and R respectively) the relevant equations are:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Gain update:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;K = P^-C^T (CP^- C^T + R)^{-1}&#xA;$$&lt;/span&gt;&#xA;Measurement update&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;P^- = F P^+ F^T + Q&#xA;$$&lt;/span&gt;&#xA;Time Update:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;P^+ = (I-KC)P^-&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The difficulty I am having is with respect to implementation and how to properly initialize. A pseudo code example of what I think should be done is the following:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;% Assume P0 is given&#xA;Pp = P0;                                       % Initializing P-&#xA;for i=1:N                                      % N = number of measurement updates&#xA;    for j=1:m                                  % m = number of time updates in one measurement update&#xA;        Pp = F*Pu*F' + Qd;                     % covariance prop&#xA;    end&#xA;    K = Pp*C'*(R + C*Pp*C')^(-1)        % update gain&#xA;    Pu = (eye(nx) - K*C)*Pp;            % measurement update&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But this has the problem that the first iteration &lt;code&gt;Pp&lt;/code&gt; cannot compute because there has yet to be a measurement update. This is easily solved by forcing a measurement update before any time updates. Maybe it's just me but it seems kind of incorrect to NEED a measurement update before any time updates.&lt;/p&gt;&#xA;" OwnerUserId="23193" LastEditorUserId="23193" LastEditDate="2020-01-29T16:09:38.123" LastActivityDate="2020-07-02T04:14:49.393" Title="Regarding kalman filter implementation" Tags="&lt;kalman-filter&gt;&lt;matlab&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19507" PostTypeId="2" ParentId="11976" CreationDate="2019-09-25T07:58:58.017" Score="1" Body="&lt;p&gt;q1 and q3 will never really turn on if the voltage applied to A or B is less than the motor supply voltage, NPN transistors require that the base voltage is greater than the emitter voltage by 0.6v, lets say without the motor running its emitter is sitting at a random value of 2v, when you apply say a 5v signal to it, the emitter will then only every rise to 4.4v&lt;/p&gt;&#xA;&#xA;&lt;p&gt;if motor supply is 12v then A or B will have to reach 12.6v to turn on q1 or q3, this is why q1 and q3 are usually pnp transistors. q1 and q3 are forming emitter followers(?) and its not a great way to use them in a circuit like this.&#xA;I'd also change the diodes to 1n4001 or 1n4007&lt;/p&gt;&#xA;" OwnerUserId="23871" LastEditorUserId="23871" LastEditDate="2019-09-25T08:06:37.150" LastActivityDate="2019-09-25T08:06:37.150" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19509" PostTypeId="1" CreationDate="2019-09-25T18:43:47.500" Score="4" ViewCount="146" Body="&lt;p&gt;I want to solve for a 3dof planar arm using gradient descent to approximate end position. Now I am a little confused about the formula and was wondering if someone can help me out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is my thought process:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;First start about using the forward kinematic solution mapping angles to euclidean space:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$x = l_1 * cos\theta_1 + l_2 * \cos(\theta_1 + \theta_2) + l_3 * \cos(\theta_1 + \theta_2 + \theta_3)$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$y = l_1 * sin\theta_1 + l_2 * \sin(\theta_1 + \theta_2) + l_3 * \sin(\theta_1 + \theta_2 + \theta_3)$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\phi = (\theta_1 + \theta_2 + \theta_3)$&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Now to I need to define a cost function ( that is where I get a little stuck), I know from a 2dof example, that I need to minimize the distance from the endpoint of my arm &lt;span class=&quot;math-container&quot;&gt;$x_{ep} $&lt;/span&gt; to the target in euclidean space &lt;span class=&quot;math-container&quot;&gt;$x_{tg}$&lt;/span&gt;. defined as: &lt;span class=&quot;math-container&quot;&gt;$|| x_{ep} - x_{tg}||^2$&lt;/span&gt; using gradient descent. Now, for a 3dof arm, obviously I would have an unlimited amount of solutions with this solution, so that I need to add one additional constraint, namely the angle &lt;span class=&quot;math-container&quot;&gt;$\phi$&lt;/span&gt; for my endeffector too. Here I am not quite sure on how to add the angle to the cost function as a parameter.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Then I would find the gradient function &lt;span class=&quot;math-container&quot;&gt;$\nabla f_{cost} $&lt;/span&gt; for each &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt;, in respect to my cost function, specified above using partial derivatives. &#xA;&lt;span class=&quot;math-container&quot;&gt;$\frac{\partial f_{cost}}{\partial \theta_{1}}(|| \begin{bmatrix}&#xA;           x_{ep} \\&#xA;           y_{ep} \\&#xA;           \phi_{ep}&#xA;         \end{bmatrix} - \begin{bmatrix}&#xA;           x_{tg} \\&#xA;           y_{tg} \\&#xA;           \phi_{tg}&#xA;         \end{bmatrix}||^2)$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$\frac{\partial f_{cost}}{\partial \theta_{2}} ...$&lt;/span&gt; , &lt;span class=&quot;math-container&quot;&gt;$\frac{\partial f_{cost}}{\partial \theta_{3}} ...$&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Then we simply try to iteratively minimize the cost function until we are below a tolerance &lt;span class=&quot;math-container&quot;&gt;$tol$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know there is a missing piece, but I am not quite sure where, I believe it lies the cost function. Maybe I am wrong, thank you for your suggestions!&lt;/p&gt;&#xA;" OwnerUserId="23869" LastEditorUserId="23869" LastEditDate="2019-09-25T18:58:10.593" LastActivityDate="2019-09-30T05:42:49.270" Title="IK - 3dof - iterative" Tags="&lt;inverse-kinematics&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19512" PostTypeId="1" AcceptedAnswerId="19524" CreationDate="2019-09-25T21:03:27.013" Score="0" ViewCount="59" Body="&lt;p&gt;Background &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some of my sketches or ideas require a common data buss to all perph chips. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The issue &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This way issue still lays before me, how then, if I am going for a common data buss. how do I address each chip via this microcontroller? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, Using a microprocessor is a plus in that direction, but i rather not design something that takes more chips when i can  just handle with one central chip to work out the calculations and decisions.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Main idea &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is. What is a good microcontroller that offers me &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;16 bit parallel ports. &lt;/li&gt;&#xA;&lt;li&gt;easy adressing to perph chips&lt;/li&gt;&#xA;&lt;li&gt;able to handle a wide variety of brands.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Documents and data sheets that are related &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are some related documents that I intended to use.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;8bit Atmel Atmega640 microcontroller &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;HS cmos ARING bus interface 16bit &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;AD5207 2 channel 256 position digital potentiometer &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;RIRWE416D4 series 4M high speed SRAM 256kbit × 16 bit &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Finding a good microcontroller will be a step into finding a good 16 ADC. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why this question &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The intersil 80cxx platform is cringe worthy in my view because, the address and the data is share a common pin set and I need extra hardware to demux the data and the address. Also,  the platform they give is byte oriented I need word. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Replacement requirements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need something that gives me good high speed performance that I can use in a microcomputer esk layout. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My number one priority is finding something that is highly customizable with the requirement that I can use the standard 15 pin serial com ports or at least &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The parallax propellor 8 core is close could go down to two core. &lt;/p&gt;&#xA;" OwnerUserId="23875" LastEditorUserId="23875" LastEditDate="2019-09-26T17:47:10.857" LastActivityDate="2019-09-27T19:49:31.567" Title="Is there a straightforward 16bit microcontroller?" Tags="&lt;microcontroller&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19513" PostTypeId="1" CreationDate="2019-09-25T21:52:01.240" Score="0" ViewCount="49" Body="&lt;p&gt;I'm trying to simulate a vehicle using a dynamic bicycle model but I cannot seem to get it working. If I set a constant steering angle the lateral velocity grows exponentially and creates impossible results.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;a = 0.34284&#xA;b = 0.40716&#xA;m = 155&#xA;I = 37.29&#xA;&#xA;def f_DynBkMdl(x, y, delta, theta, dt, states):&#xA;    dtheta = states[0]&#xA;    vlat = states[1]&#xA;    vlon = states[2]&#xA;&#xA;    if delta &amp;gt; math.radians(180):&#xA;        delta = delta - math.radians(360)&#xA;&#xA;    if delta&amp;lt;0:&#xA;        j = 1&#xA;    else:&#xA;        j = 0&#xA;    if dtheta&amp;lt;0:&#xA;        q = 1&#xA;    else:&#xA;        q = 0&#xA;&#xA;    dtheta = abs(dtheta)&#xA;    delta = abs(delta)&#xA;&#xA;    sf = delta - (a*dtheta)/vlon&#xA;    ff = 30.77*math.degrees(sf)&#xA;    pf = 0&#xA;&#xA;    sr = (b*dtheta)/vlon&#xA;    fr = 30.77*math.degrees(sr)       &#xA;    pr = 0&#xA;&#xA;    if j == 1:&#xA;        fr = -fr&#xA;        ff = -ff&#xA;    if q == 1:&#xA;        dtheta = -dtheta&#xA;&#xA;    theta = theta%math.radians(360)&#xA;&#xA;    ddtheta = (a*pf*delta + a*ff - b*fr)/I&#xA;    dvlat = (pf*delta + ff + fr)/m - vlon*dtheta&#xA;    dvlon = (pf + pr - ff*delta)/m - vlat*dtheta&#xA;&#xA;    dx = -vlat*np.sin(theta) + vlon*np.cos(theta)&#xA;    dy = vlat*np.cos(theta) + vlon*np.sin(theta)&#xA;&#xA;    theta = theta + dtheta*dt + (1/2)*ddtheta*dt**2&#xA;    dtheta = dtheta + ddtheta*dt&#xA;    vlat = vlat + dvlat*dt&#xA;    vlon = vlon + dvlon*dt&#xA;    vabs = np.sqrt(vlat**2 + vlon**2)&#xA;    x = x + dx*dt&#xA;    y = y + dy*dt&#xA;&#xA;    states = [dtheta, vlat, vlon]&#xA;&#xA;    array = np.array([x, y, theta, vabs, states])&#xA;    return array&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;With &lt;code&gt;a&lt;/code&gt; and &lt;code&gt;b&lt;/code&gt; being the distance between the front and rear axle to the vehicle's centre of gravity, &lt;code&gt;m&lt;/code&gt; being the mass and &lt;code&gt;I&lt;/code&gt; the inertia.&#xA;&lt;code&gt;x&lt;/code&gt; and &lt;code&gt;y&lt;/code&gt; are the global position and &lt;code&gt;theta&lt;/code&gt; is the heading with &lt;code&gt;delta&lt;/code&gt; being the steering angle. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I obtained my equations from this document &lt;a href=&quot;https://vtechworks.lib.vt.edu/bitstream/handle/10919/36615/Chapter2a.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://vtechworks.lib.vt.edu/bitstream/handle/10919/36615/Chapter2a.pdf&lt;/a&gt; under the headings 2.3.1, 2.3.2 and 2.3.3. I used a simplified tyre model and assumed infinite friction so the friction circle is not required.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there something I am missing to make this work?&lt;/p&gt;&#xA;" OwnerUserId="23876" LastEditorUserId="23876" LastEditDate="2019-09-29T08:30:49.000" LastActivityDate="2019-09-29T08:30:49.000" Title="Cannot get 3 DOF bicycle model to run correctly" Tags="&lt;dynamics&gt;&lt;simulation&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19514" PostTypeId="1" CreationDate="2019-09-26T02:39:32.493" Score="1" ViewCount="118" Body="&lt;p&gt;New to robotic arms here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am currently working with a 6-DOF robotic arm shown below:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/P1mfo.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/P1mfo.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have derived the FWD Kinematics and mapped the joint angles and the resulting end-effector positions. When I try to implement an inverse-Jacobian controller (see figure below) to move the arm, it doesn't move to the target position. (But it does move so....there's something).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/1Wfvr.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1Wfvr.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My transformation matrices look good. I believe I am misunderstanding the Jacobian matrices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have derived six different partial CoM Jacobians, one for each series of revolute joints. Assuming 0 is the arm's base each number corresponds to a link of the arm:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Jacobian matrix 1: 0-1&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Jacobian matrix 2: 0-1-2&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Jacobian matrix 3: 0-1-2-3&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Jacobian matrix 4: 0-1-2-3-4&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Jacobian matrix 5: 0-1-2-3-4-5&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Jacobian matrix 6: 0-1-2-3-4-5-6&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I have six [6x6] Jacobian matrices, one for each joints CoM. Misunderstanding, I took only the partial Jacobian related to the end effector joint (0-1-2-3-4-5-6) and set it into the controller in the inv_J block which I believe is my issue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is, how do I combine all of the Jacobian matrices to get a single [6x6] jacobian matrix that will provide the correct Jacobian inverse for the controller?&lt;/p&gt;&#xA;" OwnerUserId="23877" LastEditorUserId="23877" LastEditDate="2019-09-29T19:36:16.850" LastActivityDate="2019-09-29T19:36:16.850" Title="Partial CoM, the velocity Jacobian and Control" Tags="&lt;control&gt;&lt;jacobian&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19516" PostTypeId="2" ParentId="19513" CreationDate="2019-09-26T11:10:33.083" Score="1" Body="&lt;p&gt;I think this question doesn't belong here, it is more suitable to the stackoverflow.&#xA;To the problem now, first of all I assume you are making a mistake by mixing degrees with radians.&#xA;In this part of the code &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt; if delta &amp;gt; 180:&#xA;        delta = delta - math.radians(360)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;delta seems to be in degrees and then you are trying to normalize it by subtracting radians (hint you might get angles that are even bigger than 360 so you should make a loop to check it out).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;While here:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  sf = delta - (a*dtheta)/vlon&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;you are using it as a number(radians). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please check it out, and upload the source where you got the equations from because it is realy hard to follow your code.&lt;/p&gt;&#xA;" OwnerUserId="15592" LastActivityDate="2019-09-26T11:10:33.083" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="19517" PostTypeId="1" CreationDate="2019-09-26T11:46:53.073" Score="1" ViewCount="58" Body="&lt;p&gt;I want to measure a room using rp3+, rplidar, ROS and SLAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It should be easy possible to create mapping of the room. But how exact it would be? Is it possible to get less than 1 cm precision over 10m?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding the rplidar specification its possible, but it is also applies for real environment?&lt;/p&gt;&#xA;" OwnerUserId="23880" LastEditorUserId="37" LastEditDate="2019-09-27T10:52:29.020" LastActivityDate="2019-09-27T15:19:35.647" Title="Is it to possible to measure a room exact with rplidar?" Tags="&lt;slam&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19519" PostTypeId="2" ParentId="19148" CreationDate="2019-09-26T14:37:21.060" Score="1" Body="&lt;ul&gt;&#xA;&lt;li&gt;0 Not charging -- The robot is not on the dock&lt;/li&gt;&#xA;&lt;li&gt;1 Reconditioning Charging -- This is a slow trickle meant for a battery that has been left uncharged for so long that its voltage has&#xA;become extremely low.&lt;/li&gt;&#xA;&lt;li&gt;2 Full Charging -- Normal charging&lt;/li&gt;&#xA;&lt;li&gt;3 Trickle Charging -- A top-up mode that keeps a fully charged battery fully charged.&lt;/li&gt;&#xA;&lt;li&gt;4 Waiting -- Generally this is when the battery's temperature is too high to apply current. For example, after a full charge, the&#xA;battery is pretty hot, so we wait a little for it to cool off before&#xA;trickling. Very hot environments (eg, Arizona in the summer) can also trigger this state.&lt;/li&gt;&#xA;&lt;li&gt;5 Charging Fault Condition -- Any problems with charging will land you here&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;For the purpose of waiting for Roomba to be ready to start a new mission, I would look for Trickle charging.&lt;/p&gt;&#xA;" OwnerUserId="4373" LastActivityDate="2019-09-26T14:37:21.060" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19520" PostTypeId="2" ParentId="2768" CreationDate="2019-09-26T22:12:10.820" Score="1" Body="&lt;p&gt;I see that his question is from a long time ago but, just in case it still gets attention, here are some thoughts based on running a small line follower:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's address the battery problem first:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I assume that the statement &lt;code&gt;uXbot_move(MAX_SPEED + steer, MAX_SPEED);&lt;/code&gt; has parameters that map to PWM values - possibly by some scaling factor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A fixed PWM value will produce a different drive voltage as the battery voltage sags. In your motor driver, measure the battery voltage with an ADC input. Use that value to adjust the actual PWM duty cycle so that the average voltage stays constant. Change the &lt;code&gt;uxBot()&lt;/code&gt; to accept a Voltage rather than a PWM. Now you are able to command, say, 3 Volts to the motor and be confident that is what it gets regardless (within limits) of the actual battery voltage. If you had 8 bits of PWM resolution you might end up with code fragments like these:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void setLeftMotorVolts(float volts) {&#xA;  int motorPWM = (255 * volts) / batteryVolts;&#xA;  setLeftMotorPWM(motorPWM);&#xA;}&#xA;&#xA;void setRightMotorVolts(float volts) {&#xA;  // reverse the right motor&#xA;  int motorPWM = (-255 * volts) / batteryVolts;&#xA;  setRightMotorPWM(motorPWM);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;How about the performance tuning with speed:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    if (steer &amp;lt; -5)&#xA;    {&#xA;      // turn left&#xA;      turn = -1;&#xA;      uXbot_move(MAX_SPEED + steer, MAX_SPEED);&#xA;    } else if (steer &amp;gt; 5)&#xA;    {&#xA;      // turn right&#xA;      turn = 1;&#xA;      uXbot_move(MAX_SPEED, MAX_SPEED - steer);&#xA;    } else {&#xA;      // go straight&#xA;      turn = 0;&#xA;      uXbot_move(MAX_SPEED, MAX_SPEED);&#xA;    }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Part of the problem here is that the robot forward speed will change as it turns. Any turning motion will reduce the forward speed. The effect is clearly visible in the video you linked to. While this can help navigate sharp turns it messes with the dynamics somewhat. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If, instead, you make changes to BOTH wheel speeds together, the forward speed will remain constant. Clearly, there must be some headroom left for the outer wheel to be able to increase speed. With both wheels changing speed, the code fragment above would reduce to just:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;uXbot_move(MAX_SPEED + steer, MAX_SPEED - steer);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;That will make the response consistent but the controller may still have trouble adapting to different speeds. To sort that out, consider scaling the steering correction with the current speed. That is, the correction will be larger at higher speeds. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thinking about the controller, I have three observations. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, it is important that the PID function is called at regular, constant intervals. It just does not work well unless that is true. Your code does not specify that so it may already be true. Indeed, the existence of the division by PERIOD_MS indicates that you are aware of this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second, for the specific line following task that you describe, you do not need an I term in the controller. In fact, because you do nothing to limit integral windup, it may be doing more harm than good.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, unless you are seriously limited for processor power, do your calculations in floating point as much as possible. Only reduce to an int when you actually calculate the PWM duty cycle for the timer register. &lt;/p&gt;&#xA;" OwnerUserId="23872" LastActivityDate="2019-09-26T22:12:10.820" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19521" PostTypeId="1" CreationDate="2019-09-26T23:27:06.473" Score="1" ViewCount="39" Body="&lt;p&gt;I don't know how to call the device I'm looking for (or need to create), maybe you can help me with terminology too so I can at least search..&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want something that either rotates or pulls with a certain (controllable) force, i.e. not like a servo/stepper motor which control position, but on the contrary, it should be able to &quot;catch up&quot; to the moving load fast or stay still if the load is too heavy, but provide a steady pull of a certain force. Do these things exist and if so, what are they called? Do you know of any such thing that does it out of the box?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Btw I'm looking for something that pulls in the range of 100-200 lb, so the constant tension things from sewing machines won't work :)&lt;/p&gt;&#xA;" OwnerUserId="23886" LastActivityDate="2019-10-01T20:10:22.180" Title="A powerful pull/rotate device that provides a certain (controllable) force?" Tags="&lt;motor&gt;&lt;motion&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19523" PostTypeId="2" ParentId="19517" CreationDate="2019-09-27T10:49:29.200" Score="2" Body="&lt;p&gt;You don't say which RPLIDAR you are talking about, but looking at the spec of the &lt;a href=&quot;https://www.robotshop.com/uk/rplidar-a2m8-360-laser-scanner.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;RPLIDAR A2M8&lt;/a&gt; (the first hit on google), it has a range of 0.15 m to 12 m, and an angular resolution of between 0.45 and 1.35 degrees.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;LIDAR in a fixed position in the centre of the room&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;We can use &lt;a href=&quot;https://en.wikipedia.org/wiki/Trigonometry&quot; rel=&quot;nofollow noreferrer&quot;&gt;trig&lt;/a&gt; to calculate the distance to the corners of the room and convert angular resolution to linear resolution:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$a^2 +b^2 = c^2$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$\tan A = a/b$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;based on&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/File:TrigonometryTriangle.svg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/RooZk.png&quot; alt=&quot;Right angle triangle&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your room 10m x 10m then Pythagoras' Theorem gives us 707 cm from the centre of the room to the corners.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With &lt;span class=&quot;math-container&quot;&gt;$A$&lt;/span&gt; as the angular resolution and &lt;span class=&quot;math-container&quot;&gt;$b$&lt;/span&gt; as the range, then &lt;span class=&quot;math-container&quot;&gt;$a$&lt;/span&gt; is the linear resolution:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ a = b \tan A$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If we assume that this LIDAR can achieve 0.45 degrees at 707 cm then plugging these values into the equation we get an 5.55 cm linear resolution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suspect that angular resolution and range are linked however, so angular resolution at 707 cm will probably be closer to 1.35 than 0.45 degrees. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If we assume a more realistic 1 degree angular resolution (by linear interpolation), we get a 12.34 cm linear resolution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both of these are much larger than your desired 1 cm resolution, so no, this LADAR can't do what you want with a single 2D point cloud.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to get 1cm resolution over 10m with a LIDAR, you would need one with an angular resolution of just 0.08 degrees at 707 cm, which seems like quite a jump.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;LIDAR on a movable platform&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The maths change if you are able to move your LIDAR to any position within the room. Then you are limited by the number of point clouds you are prepared to measure, and some combination of the positional accuracy of your LIDAR and/or distribution of features.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you take a point cloud every 100 cm (a 9x9 grid) then the maximum diagonal distance of each point cloud would be 141 cm which at 0.45 degrees is 1.11 cm, very close to your desired target.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The trouble is you now have 81 point clouds to fuse together.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The more point clouds you measure, the higher the resolution, but given the minimum distance of the LIDAR is 15cm, there is little point in taking a measurement more than every 30cm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A 31x31 grid would have a separation of 31.25 cm and a maximum diagonal distance of 44.19 cm, which at 0.45 degrees would be 0.35 cm. &lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Data fusion uncertainty and accumulated errors&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Once you have all of your point clouds, you then have to fuse them together, and this is where it starts to get tricky.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To fuse the data you start to become limited by the resolution of the positional data you have for your point clouds.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your LIDAR is on a mobile robot, you might be limited by the encoders and the accumulated error in position tracking as your robot moves between all of your positions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could use the point clouds to correct any positional errors, but that means identifying common features, and the further apart these features are, the lower resolution they become. If your room is a featureless void, the best data you have might be from the one point cloud from the centre of the room. All of the others point clouds have better data for some edges, but worse data for others.&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="37" LastEditDate="2019-09-27T15:19:35.647" LastActivityDate="2019-09-27T15:19:35.647" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19524" PostTypeId="2" ParentId="19512" CreationDate="2019-09-27T19:49:31.567" Score="0" Body="&lt;p&gt;The propeller core is flexible to allow 16 bit ports and SPI, I2C or any data buss nterfacing protocol. Without the need for interrupts.&lt;/p&gt;&#xA;" OwnerUserId="23892" LastActivityDate="2019-09-27T19:49:31.567" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19525" PostTypeId="2" ParentId="19521" CreationDate="2019-09-27T23:35:29.497" Score="0" Body="&lt;p&gt;I would use a stepper motor with a spring and dash pot connection to the output shaft and a variable resistor or optical feedback measuring the difference between the motor and the output shaft. &lt;/p&gt;&#xA;" OwnerUserId="23894" LastActivityDate="2019-09-27T23:35:29.497" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19526" PostTypeId="2" ParentId="18538" CreationDate="2019-09-28T13:34:20.033" Score="1" Body="&lt;p&gt;Here's an example implementation in Java for FRC:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/Team488/SeriouslyCommonLib/blob/master/src/main/java/xbot/common/subsystems/drive/PurePursuitCommand.java&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/Team488/SeriouslyCommonLib/blob/master/src/main/java/xbot/common/subsystems/drive/PurePursuitCommand.java&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let us know if we can answer any more questions about it or the general framework.&lt;/p&gt;&#xA;" OwnerUserId="10071" LastActivityDate="2019-09-28T13:34:20.033" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19527" PostTypeId="2" ParentId="15651" CreationDate="2019-09-28T13:38:00.793" Score="0" Body="&lt;p&gt;They are a little pricey, but you can do really cool things with the Lego Robotics stuff. You can run &lt;a href=&quot;https://www.ev3dev.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;linux on the Ev3 bricks&lt;/a&gt; and then program it however you want. They have a lot of choices for motors/servos and sensors and everything plugs together pretty easily.&lt;/p&gt;&#xA;" OwnerUserId="10071" LastActivityDate="2019-09-28T13:38:00.793" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19528" PostTypeId="2" ParentId="19496" CreationDate="2019-09-29T05:28:12.603" Score="2" Body="&lt;p&gt;That's simple.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you use matlab or opengl what you need to do is just drawing 3 axis at (tx,ty,tz).&#xA;You need to convert quaternion to rotation matrix.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(qx,qy,qz,qw) -&gt; R(3x3 matrix)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where each col of R is the axis you need. The axis just a line segment where it start from (tx,ty,tz) and end at (tx+rx,ty+ry,tz+rz).    &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are libraries for quaternion to rotation conversion. You don't need to implement it yourself. &lt;/p&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2019-09-29T05:28:12.603" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19529" PostTypeId="2" ParentId="18538" CreationDate="2019-09-29T05:40:01.550" Score="2" Body="&lt;p&gt;In words, rather than code.  Assume you have the path defined as a dense list of points.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Find the point on the path closest to robot&lt;/li&gt;&#xA;&lt;li&gt;Draw a circle of radius R about that point, then find the point on the path where the circle cuts (usually the circle will cut between two points).  The circle may cut the path multiple times, take the closest (along the path) point.&lt;/li&gt;&#xA;&lt;li&gt;Moving at constant velocity, steer toward that point using some kind of proportional controller&lt;/li&gt;&#xA;&lt;li&gt;Repeat&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="21223" LastActivityDate="2019-09-29T05:40:01.550" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19530" PostTypeId="1" CreationDate="2019-09-29T09:18:18.667" Score="3" ViewCount="501" Body="&lt;p&gt;I have a differential drive robot whose linear velocity and angular velocity is to be controlled. The current strategy for doing that is:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;A high level path tracking module spits out the reference velocities (linear and angular)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Using the kinematic equations of the differential drive robot, the rpm of each wheel is calculated.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A PID controller is run for each motor which achieves the desired RPM for that motor.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Is this a good strategy for controlling the linear and angular velocity?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems like an open loop controller because two separate PIDs are just maintaining the RPMs of individual motors. But the linear and angular velocities seem uncontrolled.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I want to model a plant whose states are linear velocity and angular velocity, I don't know how to find the dynamics equation for the states (linear acceleration and angular acceleration) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even if I refer to the data sheet of the motors and get the dynamics right would it make sense to implement such a controller?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What would be the best way to go about this problem of controlling linear and angular velocity of a mobile robot?&lt;/p&gt;&#xA;" OwnerUserId="23901" LastEditorUserId="37" LastEditDate="2019-09-30T17:17:43.770" LastActivityDate="2019-10-08T06:51:45.650" Title="How to control the velocity of a mobile robot?" Tags="&lt;mobile-robot&gt;&lt;control&gt;&lt;pid&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19531" PostTypeId="2" ParentId="19509" CreationDate="2019-09-29T09:50:00.477" Score="3" Body="&lt;p&gt;It can be demonstrated that the &lt;strong&gt;Gradient Descent&lt;/strong&gt; (GD) policy corresponds to the use of the classical &lt;strong&gt;Jacobian transposed&lt;/strong&gt; method for solving IK problems in robotics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This strategy does not suffer from singularities but turns out to be slow and can get stuck in particular circumstances. More importantly, GD does not offer a principled way to deal with multiple prioritized objectives as you are looking for, instead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To this end, you ought to make use of the &lt;strong&gt;Jacobian pseudoinverse&lt;/strong&gt; &lt;span class=&quot;math-container&quot;&gt;$\mathbf{J}^+$&lt;/span&gt; that allows you to exploit kinematic redundancies to implement a hierarchy of tasks to be attained.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In particular, this policy can be represented by the following relation:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\mathbf{\dot{q}} = \mathbf{J}^+ \cdot \left( \mathbf{x}_\text{tg} - \mathbf{x}_\text{ep} \right) + \left( \mathbf{I} - \mathbf{J}^+\mathbf{J} \right) \cdot \mathbf{\dot{q}_0},&#xA;$$&lt;/span&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;where:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$\mathbf{\dot{q}}$&lt;/span&gt; is the direction where to convergence iteratively (or, equivalently, the velocity that you would send to the joints).&lt;/li&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$\left( \mathbf{x}_{tg} - \mathbf{x}_{ep} \right)$&lt;/span&gt; is the &lt;strong&gt;primary task&lt;/strong&gt; that encodes the reaching in position.&lt;/li&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$\mathbf{J}^+=\mathbf{J}^T\left(\mathbf{J}\mathbf{J}^T\right)^{-1}$&lt;/span&gt; is the pseudoinverse of the Jacobian of the primary task &lt;span class=&quot;math-container&quot;&gt;$\mathbf{J}=\frac{\partial \left( \mathbf{x}_\text{tg} - \mathbf{x}_\text{ep} \right)}{\partial \mathbf{\theta}}$&lt;/span&gt; (as &lt;span class=&quot;math-container&quot;&gt;$\mathbf{J}$&lt;/span&gt; is not square).&lt;/li&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$\mathbf{\dot{q}_0}$&lt;/span&gt; is the Jacobian of the &lt;strong&gt;secondary task&lt;/strong&gt; − not yet specified − that encodes the reaching in orientation.&lt;/li&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$\left( \mathbf{I} - \mathbf{J}^+\mathbf{J} \right)$&lt;/span&gt; is the &lt;strong&gt;Null Space projection&lt;/strong&gt; ensuring that the secondary task won't interfere with the primary task. In essence, the algorithm will provide directions that will drive the system toward both the objectives, if possible; otherwise, the primary task will take over the secondary task. Therefore, the primary task acts as a constraint in a typical optimization setting.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In our context, the simplest secondary objective &lt;span class=&quot;math-container&quot;&gt;$q_0$&lt;/span&gt; could be:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;q_0 = \left( \phi_\text{tg} - \phi \right)^2.&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hence, it stems that:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\mathbf{\dot{q}_0} = \frac{\partial q_0}{\partial \mathbf{\theta}}.&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Remarkably, &lt;span class=&quot;math-container&quot;&gt;$\mathbf{J}^+$&lt;/span&gt; is prone to singularities, thus it can be replaced by the &lt;strong&gt;Damped Least-Squares&lt;/strong&gt; version &lt;span class=&quot;math-container&quot;&gt;$\mathbf{J}_\text{DLS}^+$&lt;/span&gt; that makes the policy work very similarly to a Jacobian transposed in the neighborhood of singularities:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\mathbf{J}_\text{DLS}^+ = \mathbf{J}^T\left(\mathbf{J}\mathbf{J}^T + \mu^2\mathbf{I}\right)^{-1},&#xA;$$&lt;/span&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;where &lt;span class=&quot;math-container&quot;&gt;$\mu$&lt;/span&gt; is a damping factor that can be chosen as a function of the smallest singular value of &lt;span class=&quot;math-container&quot;&gt;$\mathbf{J}$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Interestingly enough, we challenge students with the same exact &lt;a href=&quot;https://github.com/vvv-school/assignment_inverse-kinematics&quot; rel=&quot;nofollow noreferrer&quot;&gt;problem&lt;/a&gt; during our school on robot programming  &lt;/p&gt;&#xA;&#xA;&lt;h3&gt;References&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.dis.uniroma1.it/~deluca/rob2_en/02_KinematicRedundancy.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.dis.uniroma1.it/~deluca/rob2_en/02_KinematicRedundancy.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2019-09-30T05:42:49.270" LastActivityDate="2019-09-30T05:42:49.270" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19532" PostTypeId="2" ParentId="19521" CreationDate="2019-09-29T14:46:01.220" Score="2" Body="&lt;p&gt;If I understand your question correctly, it seems to me that you are looking for a DC torque motor (brushed or brushless) with a suitable sensor attached to the load or to the output shaft. The sensor measures whatever it is what you want to control, you need a processor to implement the control system algorithms, and a power amplifier to deliver electrical power to the motor.&lt;/p&gt;&#xA;" OwnerUserId="13926" LastActivityDate="2019-09-29T14:46:01.220" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19534" PostTypeId="2" ParentId="19530" CreationDate="2019-09-29T15:46:28.387" Score="0" Body="&lt;p&gt;The strategy you outlined is up to the task only if the high-level path planning will be undertaking every once in a while the required corrections to compensate for the unavoidable mismatches between the commanded velocities delivered to the system and the actual feedback that might be represented as current locations along a designed path within the map.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, your goal of coming up with a complete state-space model of the differential drive system would be fruitful only if you can get measurements of the linear and angular velocities independently from the wheels kinematics, as for example by relying on an inertial unit and/or visual odometry. If you can only elaborate wheels feedback, then you are good to go with your policy.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2019-09-29T16:09:46.777" LastActivityDate="2019-09-29T16:09:46.777" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19535" PostTypeId="1" CreationDate="2019-09-29T17:18:48.930" Score="0" ViewCount="81" Body="&lt;p&gt;Maybe it is a repeated question, but really i have no solution &lt;/p&gt;&#xA;&#xA;&lt;p&gt;i am trying to install ROS melodic on Ubuntu 18.04.3 LTS, using my Wifi the things went good, but at my office where i have a desktop with restricted policy to use a proxy i have some problem &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;the ubuntu software &amp;amp; update can't install the updates even i have connected to internet and the proxy setting  was setupped in system setting &lt;/li&gt;&#xA;&lt;li&gt;when i tried&lt;code&gt;sudo http_proxy=myproxy:myport apt-get update&lt;/code&gt; the update process failed with this message &lt;code&gt;some index failed to download, they have been ignored or old ones used instead&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;i try to install ROS even though the ubuntu updates were failed but again the terminal shows &lt;code&gt;Reading Package list...Done&#xA;Building dependency tree&#xA;Reading state information...Done&#xA;Enable to locate package ros-melodic-desktop-full&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;i tried multiple solutions via google but all were failed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why isn't enough to setup the proxy from system setting one time ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If i have windows10 which accessing the net using the same proxy, Can i get the update by connecting ubuntu to windows hotspot ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If i take the hard disk where the ubuntu installed and try to get update using another computer, Can i get them correctly?  &lt;/p&gt;&#xA;" OwnerUserId="23121" LastActivityDate="2019-09-29T17:18:48.930" Title="How to install ROS melodic over Network proxy" Tags="&lt;ros&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19536" PostTypeId="1" CreationDate="2019-09-30T08:38:24.737" Score="1" ViewCount="109" Body="&lt;p&gt;I want to buy the programmable iRobot Create2 and I have some questions about:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The &quot;autonomous navigation&quot; with obstacle avoidance is just implemented in the robot when I'll buy it?&lt;/li&gt;&#xA;&lt;li&gt;And what about the &quot;come back home&quot; in case of discharge? Is already disponible?&lt;/li&gt;&#xA;&lt;li&gt;What are the sensors already inside the robot? Infrared and leds only?&#xA;Thanks in avance&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="23904" LastActivityDate="2019-10-01T15:30:20.317" Title="iRobot Create2 Programmable Robot: what is already in the robot" Tags="&lt;irobot-create&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19538" PostTypeId="2" ParentId="19500" CreationDate="2019-09-30T15:57:39.677" Score="2" Body="&lt;p&gt;You made a simple mistake while calculating the derivative.The equation is: &#xA;&lt;span class=&quot;math-container&quot;&gt;$\vec{OP}= OP_s \vec {i_s} + P_sP \vec {j_s}$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The derivative should be &lt;span class=&quot;math-container&quot;&gt;$\partial \vec{OP}/ \partial t =\partial({OP_s}\vec {i_s})/\partial t + \partial (P_sP \vec {j_s})/\partial t  = \partial({OP_s}\vec {i_s})/\partial t $&lt;/span&gt; but it's given that &lt;span class=&quot;math-container&quot;&gt;$d\vec{OP_s} / dt = \partial ({OP_s}\vec {i_s}) /\partial t = \dot s \vec {i_s}$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now for the second term:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\partial (P_sP \vec {j_s})/\partial t = (\partial P_sP/ \partial t) \vec{j_s} + (P_sP) \partial \vec {j_s} / \partial t$&lt;/span&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So you have &lt;span class=&quot;math-container&quot;&gt;$ (\partial P_sP/ \partial t) \vec{j_s} = \dot d \vec{j_s}$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And &lt;span class=&quot;math-container&quot;&gt;$ P_sP \partial \vec {j_s} / \partial t = d (\partial \vec {j_s} / \partial s) * \partial s/ \partial t = d \partial \vec {j_s} / \partial s * \dot s$&lt;/span&gt;. to calculate the derivative of  the normal vector at that point you can check out &lt;a href=&quot;https://arxiv.org/pdf/math/0412421.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this book&lt;/a&gt; eq. (3.4) and (3.6), added to this you curve is planar and the vectors &lt;span class=&quot;math-container&quot;&gt;$\vec {i_s}, \vec {j_s}$&lt;/span&gt; are in the same plane so you end up to eq. (4.1) which is the eq. you where searching for.&lt;/p&gt;&#xA;" OwnerUserId="15592" LastEditorUserId="15592" LastEditDate="2019-10-01T07:47:16.000" LastActivityDate="2019-10-01T07:47:16.000" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19539" PostTypeId="2" ParentId="19530" CreationDate="2019-09-30T17:40:57.033" Score="-2" Body="&lt;p&gt;In general, there are two options available. The first one is called model predictive control which means to simulate future states of the system and search in the game tree for a pleasant node. The second strategy is “direct control”, which can be realized as a pid controller. The idea is to implement if-then-statements without predicting the future.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To figure out which strategy is preferred the overall human-machine-interaction has to be investigated. The first step is, not to program a control loop but to create an event recorder who saves the human actions into a queue. New sensor/action measurements are replacing older ones, similar to a black box in a truck. In the second step, the recorded game log gets analyzed and then a decision is made which kind of control strategy will work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The idea in the original post with a high level path tracking module make sense. The concept can be explored further into a qualitative simulation. That is a symbolic description of the system which leaves out the details. Sometimes it can help to handle complex differential equations more easily. Creating a qualitative simulation is similar to program a computer game for a low end computer like the Commodore 64. That means, the simulation is not working accurate, but it's a simplified description of the problem.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2019-09-30T17:40:57.033" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19540" PostTypeId="1" CreationDate="2019-09-30T20:28:03.330" Score="1" ViewCount="215" Body="&lt;p&gt;So, for starters - this is a kink thing and not an animal abuse thing. I have an introductory understanding of electrical engineering (the most complex thing I've done is make an oscilloscope from an old camp TV) so I'm confident i could create the hardware, but the code side is completely greek to me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Like I don't even know what kind of board (Arduino?) I would use. &lt;/p&gt;&#xA;" OwnerUserId="23907" LastEditorUserId="23196" LastEditDate="2019-10-01T19:37:22.047" LastActivityDate="2020-02-28T22:01:40.240" Title="I want to activate a remote shock collar based on messages in a discord server" Tags="&lt;arduino&gt;" AnswerCount="1" CommentCount="3" ClosedDate="2020-03-06T00:37:04.213" ContentLicense="CC BY-SA 4.0" />
  <row Id="19541" PostTypeId="2" ParentId="19445" CreationDate="2019-09-30T22:35:32.337" Score="0" Body="&lt;p&gt;The GPS gives you the absolute position (in &lt;em&gt;world&lt;/em&gt; coordinate system), while the encoders the relative position of the vehicle, according to the initial assumption that you made. To simplify from GPS you get the &lt;em&gt;actual position&lt;/em&gt;, while from the encoders you get the path traveled between 2 measurements. In your position I would get the as initial position the one from the GPS and then when I would get measurement from the encoders I would just update the position, finally when I would get again both the measurements feed them to the filter. &lt;/p&gt;&#xA;" OwnerUserId="15592" LastActivityDate="2019-09-30T22:35:32.337" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19542" PostTypeId="1" CreationDate="2019-10-01T03:16:01.930" Score="0" ViewCount="36" Body="&lt;p&gt;I have a rocket-shaped (tube-shaped) mobile 20mm in diameter.  From a base-unit, 600yards away, I want to be able to send two floats (call it x and y) every 1/60th of a second (60Hz data rate [or faster]) to a pic chip such as the below pic chip that is inside the mobile.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.mouser.com/datasheet/2/268/40001723D-767332.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.mouser.com/datasheet/2/268/40001723D-767332.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For this I will need some type of antenna that will fit in the mobile.  You can assume there is line-of-sight between the fixed-base and the mobile with regard to communication-range.  The antenna will need to be able to communicate the (x,y) values to the pic chip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any suggestions on the antenna (and base communicator) for this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I apologize in advance if this is a &quot;shopping question.&quot;  (I don't have privileges to talk in the 'chat' section yet.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the correct term is 'receiver' instead of 'antenna', I also apologize in advance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;edit/add:  It seems a communication-delay of about 0.033seconds may be tolerable.  600yards = 548.64meters.&lt;/p&gt;&#xA;" OwnerUserId="23839" LastEditorUserId="23839" LastEditDate="2019-10-02T02:08:15.250" LastActivityDate="2019-10-02T02:08:15.250" Title="Mobile Antenna question" Tags="&lt;mobile-robot&gt;" AnswerCount="0" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="19543" PostTypeId="2" ParentId="19504" CreationDate="2019-10-01T07:17:43.980" Score="0" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Could someone help me isolate the &lt;code&gt;x&lt;/code&gt;, &lt;code&gt;y&lt;/code&gt;, and &lt;code&gt;z&lt;/code&gt; from the &lt;code&gt;geometry_msgs/PoseArray&lt;/code&gt; message?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The code below is your solution as simple for the above question with &lt;a href=&quot;http://docs.ros.org/melodic/api/geometry_msgs/html/msg/PoseArray.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;geometry_msgs/PoseArray&lt;/code&gt; message&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;import rospy&#xA;from geometry_msgs.msg import PoseArray&#xA;&#xA;def callback(data):&#xA;    for pose in data.poses:&#xA;        print(&quot;X: {}&quot;.format(pose.position.x))&#xA;        print(&quot;Y: {}&quot;.format(pose.position.Y))&#xA;        print(&quot;Z: {}&quot;.format(pose.position.z))&#xA;&#xA;def listener():&#xA;    rospy.init_node('listener', anonymous=True)&#xA;    rospy.Subscriber(&quot;odom&quot;, PoseArray, callback)&#xA;    rospy.spin()&#xA;&#xA;if __name__ == '__main__':&#xA;    listener()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="18870" LastEditorUserId="18870" LastEditDate="2019-10-07T15:08:01.877" LastActivityDate="2019-10-07T15:08:01.877" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19544" PostTypeId="2" ParentId="19540" CreationDate="2019-10-01T07:35:28.350" Score="0" Body="&lt;p&gt;This sounds like an interesting project, but in the current form it's too broad for this board. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This could be a path to follow, if you run into problems, just ask here, but make sure that it's a closed question that deals with a single problem (&quot;How can I simulate a button press on a remote with my ESP32- Arduino&quot;):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found this: &lt;a href=&quot;https://github.com/DedaDev/discord-arduino-simplest&quot; rel=&quot;nofollow noreferrer&quot;&gt;discord-arduino-simplest&lt;/a&gt; which is a chatbot that runs on an arduino and turns an led on or off depending on messages in the discord-server. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other projects:&#xA;&lt;a href=&quot;https://create.arduino.cc/projecthub/labsud/send-a-message-on-discord-f216e0&quot; rel=&quot;nofollow noreferrer&quot;&gt;send discord-message on wifi-arduino&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Board wise: the &lt;a href=&quot;https://www.adafruit.com/product/2821&quot; rel=&quot;nofollow noreferrer&quot;&gt;Adafruit HUZZAH32 – ESP32 Feather Board&lt;/a&gt; is a good starting point. It has wifi and a battery-connector so you could add it with a small LiPo to the collar. Should be the size of a matchbox. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you have experience with electronics, you should be able to analyse the receiver on the shock collar. I guess it only sends a signal to the shock-generator which you can also to with the arduino. If you do it right, the normal remote will still work. &lt;/p&gt;&#xA;" OwnerUserId="23196" LastEditorUserId="23196" LastEditDate="2019-10-01T07:49:41.853" LastActivityDate="2019-10-01T07:49:41.853" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19545" PostTypeId="1" CreationDate="2019-10-01T09:00:25.383" Score="2" ViewCount="114" Body="&lt;p&gt;For a car-like nonholonomic robot, What kind of path is feasible? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it right that &lt;strong&gt;a path is feasible for a car-like robot if it's curvature continuous, and the curvature on any point doesn't exceed the turning limit of the robot?&lt;/strong&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not quite sure about this because I noticed some paper said their path planning algorithms deal with the differential constraint of the vehicle. I don't understand what this means. I think if a path is smooth enough, the vehicle should be able to track this path exactly (ignoring the dynamic model).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So what kind of path satisfies the differential constraints of vehicles? Or what kind of path doesn't satisfy the differential constraints of vehicles? I really need some help here.  Thanks!   &lt;/p&gt;&#xA;" OwnerUserId="23909" LastActivityDate="2019-11-02T02:01:45.173" Title="In path planning, what kind of path is feasible for a nonholonomic robot?" Tags="&lt;path-planning&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19546" PostTypeId="2" ParentId="19536" CreationDate="2019-10-01T15:30:20.317" Score="1" Body="&lt;p&gt;Create 2 has all of the same navigation features and sensors as our Roomba 600 series vacuum cleaning robots. That is to say, it does not have systematic navigation or obstacle avoidance. You may confine it using virtual walls. If your project requires automatic room coverage, such as a roving security bot, you can make use of the built-in coverage algorithm by starting a cleaning cycle through the Open Interface.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Create will return to the dock when its battery is low only if you have it running a cleaning cycle. If you are directly commanding the wheels yourself, it will not automatically return to the dock. You will need to monitor the battery state yourself, at which point you can command it to return to the dock.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sensors available include wheel encoders, downward-facing IR cliff sensors, forward-facing IR light-touch and wall-follow sensors, the IR receiver for dock/virtual wall codes, the dirt-detect sensor, buttons, and the bumper. A number of internal variables such as battery state and motor current are also available. For actuators you have the two wheels, three cleaning motors, and LEDs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a link to the Create programming manual:&#xA;&lt;a href=&quot;https://www.irobotweb.com/-/media/MainSite/Files/About/STEM/Create/2018-07-19_iRobot_Roomba_600_Open_Interface_Spec.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.irobotweb.com/-/media/MainSite/Files/About/STEM/Create/2018-07-19_iRobot_Roomba_600_Open_Interface_Spec.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4373" LastActivityDate="2019-10-01T15:30:20.317" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19547" PostTypeId="1" AcceptedAnswerId="19550" CreationDate="2019-10-01T19:20:35.903" Score="0" ViewCount="211" Body="&lt;p&gt;I am working on a project to build and program a robotic arm. And, no, this is not a HW problem. I have watched a ton of tutorials on the HTM, but its still not fully clicking. The image shows my attempt at the matrices and the robotic arm diagram. Are these correct? The robot will consist of a prismatic joint at the base and then two revolute joints. Thanks for the help. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/jI2wg.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/jI2wg.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="23914" LastActivityDate="2019-10-01T21:40:37.887" Title="Having trouble getting correct homogeneous transformation matrices for my robotic arm" Tags="&lt;robotic-arm&gt;&lt;inverse-kinematics&gt;&lt;forward-kinematics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19548" PostTypeId="2" ParentId="19445" CreationDate="2019-10-01T19:42:00.340" Score="0" Body="&lt;p&gt;As nionios said, the GPS gives you latitude and longitude in global coordinates, while odometry gives the difference between two coordinates, normally using encoders in the motors and/or IMU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can use your initial position from the GPS data as your initial position for odometry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, as stated &lt;a href=&quot;https://robotics.stackexchange.com/questions/11178/kalman-filter-gps-imu&quot;&gt;here&lt;/a&gt;, GPS data has a precision in meters and you won't necessarily increase your accurate position if you use it alongside IMU and encoder information in a Kalman Filter.&lt;/p&gt;&#xA;" OwnerUserId="22691" LastActivityDate="2019-10-01T19:42:00.340" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19549" PostTypeId="2" ParentId="19521" CreationDate="2019-10-01T20:10:22.180" Score="0" Body="&lt;p&gt;Modern motor control offerings are able to control position, velocity, and torque (force).&#xA;Stepper motors give you good position control, moderate velocity control, and really poor torque control since they pass between pole location and have highly variable torque output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A brushed DC, brushless DC, AC induction, or best AC permanent magnet servos can offer extremely precise control in all of these areas.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Without knowing you application it is hard to recommend the &quot;best&quot; motor, but in general, DC brushed and brushless servo motors can be purchased relatively inexpensively and are easy to find in the 10W to 1kW range. AC induction motors (with a position control VFD) are very common and while they offer poor position control compared to other options, they are easily in power ranges from 100W to 1000+kW. AC servos are king when it comes to dynamic control, power density, and availability. They can be easily found in power ranges from 50W to 30kW.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking at torque, Stepper motors have very high stall torque at low speeds. DC motors offer little torque at very low speeds and are best mated with a gearbox or made significantly oversized for the application. AC servos offer nearly flat torque response for their entire speed range.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In terms of cost, expect a closed loop system to run 2-3x (or more) beyond the cost of open-loop motor control. Closed loop is really necessary if you want to accurately control position or velocity with anything other than a stepper motor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Feel free to expand on your requirements so we can help you pick the best solution for your application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Source: I am an industrial controls engineer with a focus in motion control. Hobby robotics guy.&lt;/p&gt;&#xA;" OwnerUserId="23616" LastActivityDate="2019-10-01T20:10:22.180" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19550" PostTypeId="2" ParentId="19547" CreationDate="2019-10-01T21:40:37.887" Score="1" Body="&lt;p&gt;A quick partial answer to help move you forward:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) Your axis are labeled for a left-handed coordinate system. Use right-handed (swap the x and y axis in your diagram)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) There is no prismatic parameter in your diagram. Add it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3) Frames (Transforms) are placed on the mathematical axis where things move and not necessarily on any body of your device. You are setting yourself up for potential confusion if you draw bodies over your frames as you have done there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;4) Until you have an intuitive understanding, draw 2 axis for each body to help visualize the parameter. You are missing &lt;span class=&quot;math-container&quot;&gt;$q_1$&lt;/span&gt; (the prismatic motion) and it may help you become proficient quicker if you change &lt;span class=&quot;math-container&quot;&gt;$\theta_1$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\theta_2$&lt;/span&gt; to &lt;span class=&quot;math-container&quot;&gt;$q_2$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$q_3$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;5) There are 2 standard sets of parameter-&gt;transform maths out there. Know which one you are using. The most common is to first do a parameterized transform about &lt;span class=&quot;math-container&quot;&gt;$z$&lt;/span&gt; (rotation or linear) and then a constant transform to move the frame to where the next joint is. Until you are comfortable with the math, keep them separate. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;6) You should be able to write the matrix for a static transform for any multiple of 90 degrees rotation directly. The first 3 columns of the transform matrix are the rotation component. In the picture below you can see that frame &lt;span class=&quot;math-container&quot;&gt;$B$&lt;/span&gt; has it's &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; axis pointing in the negative &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt; direction, so the &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; axis direction column is &lt;span class=&quot;math-container&quot;&gt;$&amp;lt;0_x,-1_y,0_z&amp;gt;$&lt;/span&gt;. The &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$z$&lt;/span&gt; axis of &lt;span class=&quot;math-container&quot;&gt;$B$&lt;/span&gt; are written in a similar way. The position column is just the position of the frame. &lt;span class=&quot;math-container&quot;&gt;$&amp;lt;0_x,3_y,-1_z&amp;gt;$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/83C57.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/83C57.jpg&quot; alt=&quot;Transform components&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So in the end you should have the following transforms (assuming you separate out the parameterized motion as suggested).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/TKbIl.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/TKbIl.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that frames &lt;span class=&quot;math-container&quot;&gt;$1$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$2q$&lt;/span&gt; as well as frames &lt;span class=&quot;math-container&quot;&gt;$2$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$3q$&lt;/span&gt; share the same z axis. Also I guessed at which direction the prismatic joint pointed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$H_w^0$&lt;/span&gt; - Transform from origin to where the prismatic axis starts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$H_0^{1q}$&lt;/span&gt; - Parameterized transform along z axis&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$H_{1q}^1$&lt;/span&gt; - Transform to end of Link 1 where the first rotation axis starts&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$H_1^{2q}$&lt;/span&gt; - Parameterized rotation around z axis&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$H_{2q}^2$&lt;/span&gt; - Transform to end of Link 2 where the second rotation axis starts&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$H_2^{3q}$&lt;/span&gt; - Parameterized rotation around z axis&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$H_{3q}^{eef}$&lt;/span&gt; - Transform to end of Link 3 where the end effector frame is&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The forward kinematics will be the composition of these matrices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$H_0^{eef} = H_w^0 H_0^{1q} H_{1q}^1 H_1^{2q} H_{2q}^2 H_2^{3q} H_{3q}^{eef} $&lt;/span&gt;&lt;/p&gt;&#xA;" OwnerUserId="184" LastActivityDate="2019-10-01T21:40:37.887" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19551" PostTypeId="1" CreationDate="2019-10-02T00:44:53.540" Score="1" ViewCount="39" Body="&lt;p&gt;I am working on a project where I am aiming at connecting multiple vehicles in a formation and allowing &lt;em&gt;hive&lt;/em&gt; control of the formation. The robots (&lt;em&gt;husky-like&lt;/em&gt;) use ROS and so I was hoping to incorporate as much ROS functionality as possible. Specifically, I am looking at using ROS2 for its peer-to-peer nature. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have conducted a quick literature review on the project and have found a lot of papers (primarily on UAVs). Unfortunately, they have not released the source as I can see. One particular paper I found interesting is &lt;a href=&quot;http://www.alonsomora.com/docs/19-zhu-icra.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Distributed Multi-Robot Formation Splitting and Merging in Dynamic Environments&lt;/a&gt;. I was hoping someone could push me down the correct path to some adaptable formation control algorithms?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another concept I have come across is &lt;code&gt;distributed consensus&lt;/code&gt; which as I understand is a mutual decision across the network on some algorithm. Can anyone provide me links to better understand how this is achieved (I believe this would be valuable given ROS2 is peer-to-peer).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you in advance to anyone who is able to help. I understand this is more of an information grab than a support question but I am interested in hearing some discussion around the topic from people who have experienced it.&lt;/p&gt;&#xA;" OwnerUserId="23694" LastEditorUserId="37" LastEditDate="2019-10-02T10:07:43.077" LastActivityDate="2019-10-02T10:07:43.077" Title="Formation control for ground vehicles" Tags="&lt;swarm&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19552" PostTypeId="2" ParentId="19545" CreationDate="2019-10-02T06:30:37.507" Score="0" Body="&lt;p&gt;A non-holonomic vehicle is constrained in 3 degrees of freedom (x, y, theta) where y_dot = 0. A non-holonomic vehicle can therefore only translate along a curved path governed by its kinematics (skid steer differential is different from Ackerman differential). You are correct in saying that a non-holonomic vehicle can only have a feasible path that lies on a curved path from the robots current pose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When a paper says &lt;code&gt;deal with the differential constraint of the vehicle&lt;/code&gt; they mean that the robot cannot, for example, rotate on the spot (skid steer) or actuate in the y or z direction. This is important in path planning because there is no point in considering paths the robot cannot achieve.&lt;/p&gt;&#xA;" OwnerUserId="23694" LastActivityDate="2019-10-02T06:30:37.507" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19553" PostTypeId="1" CreationDate="2019-10-02T08:09:54.580" Score="0" ViewCount="140" Body="&lt;p&gt;I have a ROS node which manipulates a serial frame, the frame contains ultrasonic measurements, I have to extract this measurement and publish it as &lt;code&gt;sensor_msgs/Range Message&lt;/code&gt;, and I am using the following code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ros::Rate loop_rate(5);&#xA;    while(ros::ok()){&#xA;        ros::spinOnce();&#xA;&#xA;        if(ser.available())//serial::Serial ser;&#xA;        {&#xA;            std::string stringRange = ser.read(ser.available());&#xA;            //ROS_INFO_STREAM(&quot;Read: &quot; &amp;lt;&amp;lt; result.data);&#xA;            sonar_msg.range = ::atof(stringRange.c_str());&#xA;            sonar_msg.header.stamp = ros::Time::now();&#xA;            pub_sonar.publish(&amp;amp;sonar_msg);&#xA;        }&#xA;        loop_rate.sleep();&#xA;    }   &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;When I try to build using catkin, the terminal fails and give me an error message:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;error: request for member ‘serialize’ in ‘t’, which is of pointer type&#xA;‘boost::call_traits&amp;lt;sensor_msgs::Range_&amp;lt;std::allocator&amp;lt;void&amp;gt;&amp;gt;*&amp;gt;::param_type&#xA;               {aka sensor_msgs::Range_&amp;lt;std::allocator&amp;lt;void&amp;gt;&amp;gt;* const}’&#xA; (maybe you meant to use ‘-&amp;gt;’ ?)&#xA;     t.serialize(stream.getData(), 0);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I thing the problem in converting to float data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I solve this?&lt;/p&gt;&#xA;" OwnerUserId="23121" LastEditorUserId="37" LastEditDate="2019-10-02T17:17:12.400" LastActivityDate="2021-02-24T16:07:30.783" Title="How to convert serial data to sensor_msgs/Range Message" Tags="&lt;ros&gt;&lt;ultrasonic-sensors&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19554" PostTypeId="2" ParentId="19383" CreationDate="2019-10-02T09:14:20.430" Score="0" Body="&lt;p&gt;Your Question is in generall so the answers will be, too. What is your application? It is in Indoor or Outdoor? Do you have a specific SLAM in you mind to use?&#xA;However, in general, I propose you do not limit your self to monocular cameras. If you are in an indoor environment I propose you RGBD cameras and in an outdoor environment, stereo cameras would be a better fit. Aso do not forget to calibrate your camera, see these two link for calibrating the camera by &lt;a href=&quot;https://docs.opencv.org/2.4/doc/tutorials/calib3d/camera_calibration/camera_calibration.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;OpenCV&lt;/a&gt; and &lt;a href=&quot;http://wiki.ros.org/camera_calibration&quot; rel=&quot;nofollow noreferrer&quot;&gt;ROS&lt;/a&gt;.&#xA;The next stepps will be odometry fusion. Using IMU, wheel encoders, LIDAR, Sonar and so on will be helpful. The &lt;a href=&quot;http://wiki.ros.org/robot_pose_ekf&quot; rel=&quot;nofollow noreferrer&quot;&gt;robot pose EKF&lt;/a&gt; can help you with odometry fusion.     &lt;/p&gt;&#xA;" OwnerUserId="23917" LastActivityDate="2019-10-02T09:14:20.430" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19555" PostTypeId="1" CreationDate="2019-10-02T09:20:56.797" Score="0" ViewCount="39" Body="&lt;p&gt;please help, after so much research still cant find a single solution from google.&#xA;some say offset, but there is no offset in the configuration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;problem: odom direction and laser scan heading didnt match&lt;/p&gt;&#xA;&#xA;&lt;p&gt;let say the grid with x,y line&#xA;positive y is 0 degree and &#xA;positive x is 90 degree&lt;/p&gt;&#xA;&#xA;&lt;p&gt;im using gmapping to do slam, &#xA;and after running gmapping what i get was&#xA;the laser scan is facing to 0 degree while &#xA;my odom is facing to 90 degree in rviz&lt;/p&gt;&#xA;&#xA;&lt;p&gt;i had try to find a solution or similar problem.. but seem there is none like this case out there.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;so how can i rotate my odom to match my laser scan?&lt;/p&gt;&#xA;" OwnerUserId="22260" LastActivityDate="2019-10-03T14:20:01.647" Title="Odometry heading and laser scan heading not point to same direction" Tags="&lt;ros&gt;&lt;slam&gt;&lt;odometry&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19556" PostTypeId="2" ParentId="19203" CreationDate="2019-10-02T09:28:55.657" Score="2" Body="&lt;p&gt;Not at all. It is about efficiency, agility, and maneuverability of your drone. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Just like wheels on a car, the size of the propeller needs to be matched to the rest of the power system. For example, putting 3” props on a motor designed for 5” propellers will result in extremely high RPM and power draw and will create very little thrust. Likewise, putting large props on a small motor will likely be too much for the motor to spin, this will create very little thrust, lots of heat and excessive current draw. Extreme mismatches can damage motors and ESC’s.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The same propeller on two different motors can have vastly different performance. Even in the worst-case scenario it is possible that by a bad chose of your propeller, the drone could not take off or on the other hand, they will break when the robot is flying!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Read more at &lt;a href=&quot;https://www.getfpv.com/learn/new-to-fpv/all-about-multirotor-fpv-drone-propellers/&quot; rel=&quot;nofollow noreferrer&quot;&gt;All about Multirotor Drone FPV Propellers&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="23917" LastEditorUserId="37" LastEditDate="2019-10-02T10:16:28.260" LastActivityDate="2019-10-02T10:16:28.260" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19557" PostTypeId="2" ParentId="19545" CreationDate="2019-10-03T01:33:46.427" Score="1" Body="&lt;p&gt;For a skid-steered vehicle, the constraint has this form:  xdot * sin(th) - ydot * cos(th) = 0.  All trajectories must satisfy this equation.  The robot can in fact spin on a dime because such motion has (xdot,ydot)=0.  It can also parallel-park, which is not a smooth path in the (x,y) plane.&lt;/p&gt;&#xA;" OwnerUserId="23839" LastEditorUserId="23839" LastEditDate="2019-10-03T01:45:23.640" LastActivityDate="2019-10-03T01:45:23.640" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19558" PostTypeId="1" CreationDate="2019-10-03T01:46:05.537" Score="2" ViewCount="28" Body="&lt;p&gt;I am building a line follower robot for a science competition, i have the weight of the components but i don't know what would be the fastest motor i could use to reach the best avg speed of the robot...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there some kind of calculator or table of reference for most common dc motors available, weight capacity and avg speed?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks for the attention and sorry if i made the mistake of asking something that was already answered here... i wasn't able to find...&lt;/p&gt;&#xA;" OwnerUserId="23919" LastActivityDate="2019-10-03T11:10:08.200" Title="Is there a table of DC motors in relation to weight/mass? I want to find the fastest for my build" Tags="&lt;motor&gt;&lt;line-following&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19559" PostTypeId="2" ParentId="19558" CreationDate="2019-10-03T11:10:08.200" Score="2" Body="&lt;p&gt;I beleive you’re looking for &lt;a href=&quot;https://en.m.wikipedia.org/wiki/Power_density&quot; rel=&quot;nofollow noreferrer&quot;&gt;Power Density&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;How you utilize said power of course is up to your design. You &lt;em&gt;generally&lt;/em&gt; want the most wattage in the smallest package, and you should get something as to what you’re looking for..but for such a small robot, the speed boost may not be as helpful as being able to accurately and quickly accelerate around/past corners.&lt;/p&gt;&#xA;&lt;p&gt;Engineering is of course a careful balance between optimal choices. Which is not as trivial as one would think. Good luck on your choice!&lt;/p&gt;&#xA;" OwnerUserId="23148" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2019-10-03T11:10:08.200" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19560" PostTypeId="2" ParentId="19553" CreationDate="2019-10-03T14:14:20.020" Score="0" Body="&lt;p&gt;First of all, You must completely consider all of the parameters in your topic. For example in your case by a simple search, you will find the parameters in &lt;a href=&quot;http://docs.ros.org/melodic/api/sensor_msgs/html/msg/Range.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;sensor_msgs/Range&lt;/a&gt;. As you can see it comprise of different parameters like min_range, max_range and so on which is depend on your sensor. Maybe these parameters do not have any important for you but surely it is important when you are using others packages. fill all the parameters step by step.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;About your code, please show us a more complete part of the code, how did you define sonar_msg?&lt;/p&gt;&#xA;" OwnerUserId="23917" LastActivityDate="2019-10-03T14:14:20.020" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19561" PostTypeId="2" ParentId="19555" CreationDate="2019-10-03T14:20:01.647" Score="1" Body="&lt;p&gt;&lt;a href=&quot;http://wiki.ros.org/tf/Tutorials/Introduction%20to%20tf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ros tf&lt;/a&gt; will solve your problem. In your case, you can use a static tf in which the translation vector is zero and a 90-degree Rotation matrix.&lt;/p&gt;&#xA;" OwnerUserId="23917" LastActivityDate="2019-10-03T14:20:01.647" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19562" PostTypeId="1" CreationDate="2019-10-03T15:37:44.990" Score="0" ViewCount="92" Body="&lt;p&gt;I am currently busy with a project which requires me to construct a robot capable of cleaning a heliostat (movable mirror used to redirect sunlight). Heliostats are basically large flat mirrors that track and reflect the sun. In order to be cleaned, the heliostats would be stowed in a horizontal position so that the robot may drive over its surface.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is then how or what sensors would i use to localize the robot on the mirror. From what i have seen many robotic sensors are unable to effectively detect glass, which seems to be a problem as the systems only real reference is the mirror. I am considering using a type of cliff sensor similar to the ones on robotic vacuum cleaners, but how would i localize the robot when its in the middle region of the mirror? Will the cliff sensors and wheel odometers be enough to fully localize this robot or not? i.e. What sensors would work?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have attached both a basic image of the robot as well as an image of a typical heliostat the robot will need to clean. Mirror sizes may vary but this size is roughly 1m x 2m Please let me know if i must provide more information to clarify the question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/e0H5N.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/e0H5N.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/hwvH1.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hwvH1.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="23873" LastActivityDate="2021-05-02T01:04:00.343" Title="Localize a Mobile Robot on a Mirror" Tags="&lt;mobile-robot&gt;&lt;sensors&gt;&lt;slam&gt;&lt;localization&gt;&lt;navigation&gt;" AnswerCount="3" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="19565" PostTypeId="1" CreationDate="2019-10-06T10:37:19.050" Score="0" ViewCount="121" Body="&lt;p&gt;I have as project to build something like this ( using arduino if possible ): &lt;a href=&quot;http://clockclock.com&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://clockclock.com&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The one modelization that came across my mind is to take 2 sticks ( as clock arms ) and command them manually using one ( or two ) motors that will be under them.&#xA;However, I fail to find the adequate motor. Basic motors have just one axis in the center that i can control; This would perfectly move ONE clock arm, but the second will just have to follow it...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As solution to create the mechanism will be a great help, I'm still so new at this.&lt;/p&gt;&#xA;" OwnerUserId="23934" LastEditorUserId="23934" LastEditDate="2019-10-08T16:06:04.887" LastActivityDate="2021-03-01T19:03:40.253" Title="Moving clock arms individually" Tags="&lt;arduino&gt;&lt;motor&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19566" PostTypeId="2" ParentId="19562" CreationDate="2019-10-06T15:23:03.230" Score="-1" Body="&lt;p&gt;I don’t think you need any complex sensing device.  You could extend the body of your robot to include a housing which holds an LED, aimed toward the mirror and tilted slightly to the interior of your robot.  The extended body would block outside light from interfering with the LED signal.  You could place a photodiode in your robot to give a binary signal for detecting the presence of the LED signal.  When the edge of the mirror is encountered, the LED signal would cease to be reflected to the photodiode. &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2019-10-06T15:23:03.230" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19568" PostTypeId="2" ParentId="19506" CreationDate="2019-10-07T02:23:51.343" Score="1" Body="&lt;p&gt;I believe you are misunderstanding some of the Kalman filter equations. There is no such thing as a time update.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you have shown here&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Time Update:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$P^+ = (I-KC)P^-$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;is the updating of the uncertainty/covariance from the measurement update. You can see this labeled properly on the &lt;a href=&quot;https://en.wikipedia.org/wiki/Kalman_filter&quot; rel=&quot;nofollow noreferrer&quot;&gt;wikipedia article on the kalman filter&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your code your initial value of Pu should be set to the uncertainty of your initial value. If you don't know this then usually &lt;em&gt;Identity&lt;/em&gt; will work and it will update itself accordingly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also in general I don't really see how your code is going to work. You shouldn't really have two for loops. You should have 1 for loop and and an if state for the measurement update. Generally I would also separate the update and prediction into two functions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know your application and this is an EKF but try to structure your code similarly to this &lt;a href=&quot;https://github.com/AtsushiSakai/PythonRobotics/blob/master/Localization/extended_kalman_filter/extended_kalman_filter.py&quot; rel=&quot;nofollow noreferrer&quot;&gt;example&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="15265" LastActivityDate="2019-10-07T02:23:51.343" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="19569" PostTypeId="1" CreationDate="2019-10-07T05:49:45.757" Score="0" ViewCount="50" Body="&lt;p&gt;I am currently trying to do 3D SLAM with two 2D Lidars and possibly additional IMU in ROS. However, there seems to be no ROS package available to meet my needs. The closest one would be laser_pipeline stack, but the documentation only tells me about fusioning LaserScans from &quot;one source&quot; although what I need is fusioning vertical scan and horizontal scan into one 3D PointCloud2. So I currently need another package to fusion scans from different sources. Anybody have an idea how to solve this problem?&lt;/p&gt;&#xA;" OwnerUserId="23938" LastActivityDate="2019-10-07T05:49:45.757" Title="Fusion multiple LaserScans to PointCloud" Tags="&lt;ros&gt;&lt;slam&gt;&lt;lidar&gt;" AnswerCount="0" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="19570" PostTypeId="2" ParentId="19565" CreationDate="2019-10-07T10:33:36.747" Score="0" Body="&lt;p&gt;In the linked page, the arms of the clocks move pretty much independently. It means that you cannot use some simple gear mechanisms to generate that kind of movement using only one motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore, using two motors is a must.&lt;/p&gt;&#xA;" OwnerUserId="22248" LastActivityDate="2019-10-07T10:33:36.747" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="19571" PostTypeId="2" ParentId="19448" CreationDate="2019-10-07T12:56:23.470" Score="1" Body="&lt;p&gt;From my point of view, the answer really depends on the context you are working in.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, in most industrial applications when people refer to SLAM navigation, they incorrectly mean Lidar based localization. In fact, SLAM is only applied in the first step, when creating the map. Then, the map is saved as you said and used for the localization. This has to be done this way since the precision needed in those applications is quite challenging, and remapping might cause precision loses.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In other contexts, the approach might be different (autonomous navigation, cartography, etc.), and the maps might be updated in runtime.&lt;/p&gt;&#xA;" OwnerUserId="22210" LastActivityDate="2019-10-07T12:56:23.470" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19572" PostTypeId="2" ParentId="19530" CreationDate="2019-10-07T13:35:26.640" Score="1" Body="&lt;p&gt;The main problem controlling the wheels speed after the kinematics conversion is that you are only controlling the response of the wheels to the setpoint, not the linear velocity response and the angular velocity response. See diagram below.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/sPzLB.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/sPzLB.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This way, you will normally have 2 similar PIDs calibrated with the same parameters for controlling the wheels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another approach is to have 2 different PIDs for controlling the Linear Velocity (&lt;strong&gt;V_comm&lt;/strong&gt;) and the Angular Velocity (&lt;strong&gt;W_comm&lt;/strong&gt;) commanded from the High-level Path Tracking. Using this, you can calibrate differently the response for the linear and the angular velocities. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To make this work properly, you will need also a Forward Kinematics module to estimate the actual linear velocity and angular velocity from your encoders measurements, and then use this estimation to calculate the error in your 2 PIDs. See diagram below.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/6sWPy.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6sWPy.png&quot; alt=&quot;Differential Drive Control Diagram&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With this approach, after calculating the Setpoint for the linear velocity (&lt;strong&gt;V_set&lt;/strong&gt;) and angular velocity (&lt;strong&gt;W_set&lt;/strong&gt;), you can then calculate the speed for every wheel (&lt;strong&gt;RPM_set_wheel_1&lt;/strong&gt; &amp;amp; &lt;strong&gt;RPM_set_wheel_2&lt;/strong&gt;) with already-known inverse kinematics equations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://fling.seas.upenn.edu/~cis390/dynamic/slides/CIS390_Lecture2.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here (Slide 5)&lt;/a&gt; you can find the equations for the direct kinematics differential drive.&lt;/p&gt;&#xA;" OwnerUserId="22210" LastEditorUserId="22210" LastEditDate="2019-10-08T06:51:45.650" LastActivityDate="2019-10-08T06:51:45.650" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19573" PostTypeId="1" CreationDate="2019-10-08T07:10:01.570" Score="1" ViewCount="113" Body="&lt;p&gt;I am working on a project to build a remotely controlled underwater robot. The max depth the robot has to dive is 40cm. I tested the 2.4GHz RC transmitter and receiver and it could work only up to 15cm below water surface, even though not very stable. I googled a lot, but didn't find any proper transmitter and receiver set with minimum 4 channels, in frequency range of less than 100MHz or at 433MHz. Would anyone please suggest where I can find one or how I can assemble one with off-the-shelf modules?&lt;/p&gt;&#xA;" OwnerUserId="16828" LastActivityDate="2019-10-25T13:19:14.020" Title="RC transmitter/receiver for underwater robot" Tags="&lt;underwater&gt;" AnswerCount="1" CommentCount="5" ClosedDate="2019-10-09T10:18:30.373" ContentLicense="CC BY-SA 4.0" />
  <row Id="19575" PostTypeId="2" ParentId="19573" CreationDate="2019-10-09T05:24:04.760" Score="2" Body="&lt;p&gt;Is the robot going to have an over-the-water antenna?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If not, then electro-magnetic communication is a no-chance under-water, if the water is salty (seas, oceans) or if the distances are long. The underwater communication is usually done with sound (acoustic waves) - which can travel huge distances, thanks to the higher density of water, compared to air.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Underwater_acoustic_communication&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;strong&gt;Here&lt;/strong&gt;&lt;/a&gt; you can find some more information.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;More to-the-point information &lt;a href=&quot;https://en.wikipedia.org/wiki/Skin_effect&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;strong&gt;here&lt;/strong&gt;&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;At &lt;strong&gt;1 megahertz&lt;/strong&gt; the skin effect depth in wet soil is about 5.0 m, &lt;strong&gt;in seawater it's about 0.25 m&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It means that in sea water the EM waves will travel no more than 25cm, at 1MHz. The higher the frequency, the shallower the depth.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;More formulas &lt;a href=&quot;https://en.wikipedia.org/wiki/Penetration_depth&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;strong&gt;here&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Why EM is not the way: &lt;a href=&quot;https://en.wikipedia.org/wiki/Radio-controlled_submarine&quot; rel=&quot;nofollow noreferrer&quot;&gt;Radio-controlled_submarine&lt;/a&gt;, unless you have an aerial antenna for the submarine.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;If&lt;/strong&gt; the water is fresh (no dissolved salts) and &lt;strong&gt;if&lt;/strong&gt; the distances are (relatively) short, then &lt;strong&gt;the project might have a chance&lt;/strong&gt;, depending on the specific details.&lt;/p&gt;&#xA;" OwnerUserId="22248" LastEditorUserId="22248" LastEditDate="2019-10-25T13:19:14.020" LastActivityDate="2019-10-25T13:19:14.020" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19579" PostTypeId="1" CreationDate="2019-10-09T12:18:04.327" Score="2" ViewCount="23" Body="&lt;p&gt;I have been struggling with trying to get the VFH+ implementation working correctly using Orca-Robotics implementation which seems to be the same implementation used in the ROS package and MATLAB and others. I would like to check on a couple of things:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Axis orientation for the rover, certainty grid and sensor&#xA;measurement directions? &lt;/li&gt;&#xA;&lt;li&gt;Can I just use a 180 deg sweep of the sonar sensor or do I really need 360 degs?  If I just need 180 deg what do I do with initializaling the grid behind the&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;To start this is what I think the papers I have read are telling me - but I am usually incorrect:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/gFJhU.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gFJhU.png&quot; alt=&quot;axis and sensor angle orientation&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help would be appreciated.  Thanks in advance.&lt;/p&gt;&#xA;" OwnerUserId="23912" LastActivityDate="2019-10-09T12:18:04.327" Title="VFH/VFH+ Axis Orientation &amp; Sensor Angles" Tags="&lt;navigation&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19580" PostTypeId="1" CreationDate="2019-10-09T19:40:40.630" Score="0" ViewCount="142" Body="&lt;p&gt;I am confused with the torque ratings of servo motors, or I guess it is general while choosing any motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example a servo's torque is rated as 10kg-cm, so does that mean it can handle a 100N force from 1 cm distance to its center or 50N force from 2cm distance?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Am i interpreting it right?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it is right, then consider a motor mounted to the wall from its back and a rope is wrapped to its tip(the rotating part, i don't what it is called); then how should I calculate the maximum weight the motor will be able to lift upwards? &lt;/p&gt;&#xA;" OwnerUserId="23502" LastActivityDate="2021-03-03T09:09:20.933" Title="Servo motor torque" Tags="&lt;servomotor&gt;&lt;torque&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19581" PostTypeId="1" CreationDate="2019-10-10T01:21:18.857" Score="-1" ViewCount="22" Body="&lt;p&gt;The below rtk-gps measures position to about 1.5inches&#xA;for $1500 and an update rate of 5Hz on gps, and it measures&#xA;12.6mm x 4.6mm so that it would easily fit inside of&#xA;a 20mm-diameter tube-shaped rocket-robot.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://inertialsense.com/product/ins/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://inertialsense.com/product/ins/&lt;/a&gt;&#xA;&lt;a href=&quot;https://inertialsense.com/data-sheet/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://inertialsense.com/data-sheet/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do people sell cheaper ones that are faster, say 60Hz instead of 5Hz,&#xA;but still meet the above or similar gps-accuracy and still fit inside&#xA;a 20mm-diameter tube?  Something in the vicinity of $200-ish or less.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I apologize in advance if this is a &quot;shopping question&quot;.&#xA;I don't have 'privilege' to post in the 'chat-section'.&lt;/p&gt;&#xA;" OwnerUserId="23839" LastActivityDate="2019-11-09T16:02:50.410" Title="rtk-gps faster (60Hz) and cheaper?" Tags="&lt;mobile-robot&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19584" PostTypeId="1" CreationDate="2019-10-10T06:34:29.940" Score="0" ViewCount="105" Body="&lt;p&gt;I tried Gazebo 9 and 10 on Ubuntu 18.04 MATE and it quits in a few seconds without showing Gazebo GUI. I'm running it on 32-bit Intel CPU with 950 Graphics chipset (pretty old). Here is what I see in the terminal:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;paul@paul-tc4400:~$ gazebo --verbose&#xA;Gazebo multi-robot simulator, version 10.1.0&#xA;Copyright (C) 2012 Open Source Robotics Foundation.&#xA;Released under the Apache 2 License.&#xA;http://gazebosim.org&#xA;&#xA;[Msg] Waiting for master.&#xA;Gazebo multi-robot simulator, version 10.1.0&#xA;Copyright (C) 2012 Open Source Robotics Foundation.&#xA;Released under the Apache 2 License.&#xA;http://gazebosim.org&#xA;&#xA;[Msg] Waiting for master.&#xA;[Msg] Connected to gazebo master @ http://127.0.0.1:11345&#xA;[Msg] Publicized address: 192.168.0.6&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I would appreciate any ideas how to fix or diagnose this issue.&lt;/p&gt;&#xA;" OwnerUserId="9166" LastActivityDate="2021-03-05T15:01:40.140" Title="Gazebo GUI doesn't show up" Tags="&lt;gazebo&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19585" PostTypeId="2" ParentId="19580" CreationDate="2019-10-10T07:07:48.607" Score="0" Body="&lt;p&gt;Yes, you are right. 10kg-cm = 100N force from 1 cm distance.&#xA;You can use a servo motor with nominal torque force 10kg-cm to lift up 10 kg-cm, but you will most likely damage gears fust. &lt;a href=&quot;https://i.stack.imgur.com/qgffA.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qgffA.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, there is a dependency chart of rotation speed (degree) vs load (kg), for KST Servo x10 v2.0 (9.5 kg, 7.4V, 1.2A) &lt;a href=&quot;https://www.kstsz.com/kstsz_Product_2042526799.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.kstsz.com/kstsz_Product_2042526799.html&lt;/a&gt;, so you can estimate lifetime for your servo's motor.&lt;/p&gt;&#xA;" OwnerUserId="23775" LastEditorUserId="23775" LastEditDate="2019-10-10T07:22:21.860" LastActivityDate="2019-10-10T07:22:21.860" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19586" PostTypeId="2" ParentId="15178" CreationDate="2019-10-10T10:23:31.960" Score="0" Body="&lt;p&gt;If I understand correctly, all your sensors look ahead, but you want safety to the sides.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe it would be better to turn the IR sensors 90deg so they check the distance to the side walls, while you keep the ultrasound sensor to look ahead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using the data from the three sensors, you should be able to create a limited map of the robot inside the tunnel, which will be the basis for controlling the movement.&lt;/p&gt;&#xA;" OwnerUserId="22248" LastActivityDate="2019-10-10T10:23:31.960" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19588" PostTypeId="2" ParentId="19581" CreationDate="2019-10-10T15:02:30.007" Score="0" Body="&lt;p&gt;Something like &lt;a href=&quot;https://drotek.com/tiny-rtk-u-blox-neo-m8p/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt;? It's pretty close to the dimensions you are searching for 23.5x24.5&lt;/p&gt;&#xA;" OwnerUserId="15592" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2019-10-10T15:02:30.007" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19590" PostTypeId="1" CreationDate="2019-10-10T19:22:48.197" Score="0" ViewCount="1293" Body="&lt;p&gt;I want to implement a wall following controller for my TurtleBot3 (with ROS system).&lt;/p&gt;&#xA;&lt;p&gt;Sensors which I have on the robot: lidar(360) and optional 2 ultrasonic sensors on the side (one on the left and another one on the right).&lt;/p&gt;&#xA;&lt;p&gt;Can you recommend me ways the break the mission to tasks and how should I do it? (what's my option to choose from in order to complete the mission)&lt;/p&gt;&#xA;" OwnerUserId="23965" LastEditorUserId="19515" LastEditDate="2020-08-07T17:19:53.960" LastActivityDate="2021-05-04T19:09:10.860" Title="How to implement a wall following controller for a TurtleBot3? (ROS - Python)" Tags="&lt;mobile-robot&gt;&lt;ros&gt;&lt;wheeled-robot&gt;&lt;algorithm&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19592" PostTypeId="2" ParentId="19590" CreationDate="2019-10-11T10:24:41.657" Score="0" Body="&lt;p&gt;Just check out the bug-algorithms like &lt;a href=&quot;https://www.cs.cmu.edu/~motionplanning/lecture/Chap2-Bug-Alg_howie.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15592" LastActivityDate="2019-10-11T10:24:41.657" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19593" PostTypeId="2" ParentId="10416" CreationDate="2019-10-11T21:49:07.547" Score="0" Body="&lt;p&gt;I only just saw your comment above and would like to reply. Baxter is a special case because as you say it relys on elastic drives which simply deform when in contact with a human (or anything else). Force sensors are not the answer. When the robot makes contact with a human hand (as probably the most likely interaction) the robot stops, right? Wrong. It decelerates. Newtons 3rd law says so. And that requires further distance. If the hand is trapped, say between the end effector and the bench injury is possible. Calling it a collaborative robot doesn't mean a thing. A French university measured the force of a UR onto a force plate and it raised over 1500N of force. If that is your hand injury is inevitable. We are currently perfecting a capacitive sensor that fits on the arm (not a new idea). If the human gets near the robot (or vice versa) within the deceleration distance the robot stops just in time. So if a robot is not inherently safe (and in my view none of them are apart from Baxter) then the best answer is to add an external sensor or workspace monitor.&lt;/p&gt;&#xA;" OwnerUserId="17869" LastActivityDate="2019-10-11T21:49:07.547" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19595" PostTypeId="2" ParentId="19584" CreationDate="2019-10-12T12:03:50.737" Score="0" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;System requirements&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Gazebo is currently best used on Ubuntu, a flavor of Linux. You will&#xA;  need a computer that has:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;A dedicated GPU,&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Nvidia cards tend to work well in Ubuntu&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;A CPU that is at least an Intel I5, or equivalent,&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;At least 500MB of free disk space,&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Ubuntu Trusty or later installed.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You have an incompatible CPU with Gazebo's requirements. &lt;/p&gt;&#xA;" OwnerUserId="23973" LastActivityDate="2019-10-12T12:03:50.737" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19597" PostTypeId="1" CreationDate="2019-10-12T16:40:53.460" Score="0" ViewCount="92" Body="&lt;p&gt;Any alternative to finding singularity of Puma 560 than putting the Jacob Det=0? Also when it says the axes intersect, which axes do they mean? The z? &lt;/p&gt;&#xA;" OwnerUserId="23975" LastEditorUserId="23975" LastEditDate="2019-10-12T18:05:00.463" LastActivityDate="2019-10-12T21:39:03.790" Title="Any alternative to finding singularity of Puma 560 than differentiating the Jacobian and putting the Det=0?" Tags="&lt;jacobian&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19598" PostTypeId="2" ParentId="19597" CreationDate="2019-10-12T17:50:40.420" Score="0" Body="&lt;p&gt;Mathematically you need to set det(J) = 0.  However, you can also visualize “singular planes” of a manipulator.  Check out papers by Stanisic.  Here is &lt;a href=&quot;https://www.sciencedirect.com/science/article/pii/S0094114X06002060?via%3Dihub&quot; rel=&quot;nofollow noreferrer&quot;&gt;one.&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2019-10-12T17:50:40.420" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19601" PostTypeId="2" ParentId="19597" CreationDate="2019-10-12T21:39:03.790" Score="1" Body="&lt;p&gt;The determinant of the Jacobian will be zero at singularity.  The &lt;span class=&quot;math-container&quot;&gt;$j^{th}$&lt;/span&gt; column of the Jacobian (a 6-vector) is the end-effector Cartesian velocity due to unit-velocity motion of the &lt;span class=&quot;math-container&quot;&gt;$j^{th}$&lt;/span&gt; joint.  At singularity these column vectors are not independent, if the &lt;span class=&quot;math-container&quot;&gt;$k^{th}$&lt;/span&gt; column is some constant multiple of the &lt;span class=&quot;math-container&quot;&gt;$j^{th}$&lt;/span&gt; column then this means that the axes of joints &lt;span class=&quot;math-container&quot;&gt;$k$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$j$&lt;/span&gt; are aligned, that is motion of either joint will cause the same end-effector Cartesian motion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We can illustrate this using the Robotics Toolbox for MATLAB&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt; mdl_puma560   % create a model of a Puma560 robot&#xA;&amp;gt;&amp;gt; J = p560.jacob0([0 0 0 0 0 0])  % compute the Jacobian for world coordinate frame&#xA;&#xA;J =&#xA;&#xA;    0.1500   -0.4318   -0.4318         0         0         0&#xA;    0.4521    0.0000    0.0000         0         0         0&#xA;         0    0.4521    0.0203         0         0         0&#xA;         0         0         0         0         0         0&#xA;         0   -1.0000   -1.0000         0   -1.0000         0&#xA;    1.0000    0.0000    0.0000    1.0000    0.0000    1.0000&#xA;&#xA;&amp;gt;&amp;gt; det(J)&#xA;&#xA;ans =&#xA;&#xA;     0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;which we see is singular&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt; jsingu(J)&#xA;1 linearly dependent joints:&#xA;  q6 depends on: q4 &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;tells us that joints 4 and 6 are aligned, and we can easily see that columns 4 and 6 of the Jacobian are linearly related, in fact they are identical.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since two joints control the same Cartesian DoF, and we have 6 joints, then only 5 Cartesian DoF can be controlled independently – the definition of a singularity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-- Peter Corke, developer of the Robotics Toolbox for MATLAB&lt;/p&gt;&#xA;" OwnerUserId="21223" LastActivityDate="2019-10-12T21:39:03.790" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="19602" PostTypeId="1" CreationDate="2019-10-13T14:18:22.207" Score="0" ViewCount="64" Body="&lt;p&gt;I am trying to develop a controller for a quadrotor using dynamic feedback linearization technique, but I am not sure I am doing thigs correctly. I know that for designing such controller I have to keep derivating until I see the input and it appears in a nonsingular way. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my case, if I do this for example just for the &lt;span class=&quot;math-container&quot;&gt;$z$&lt;/span&gt; coordinate I obtain that if I derivate two times I see the input in the expression of the second derivative, so after derivating two times I have:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\ddot{z} = -cos(\theta )cos(\varphi )\frac{T}{m}+g$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where we can see that the thrust  &lt;span class=&quot;math-container&quot;&gt;$T$&lt;/span&gt;  appears. Now we can derive a control law using a dynamic controller of the form :&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$J(\xi ,\zeta )^{-1}(-l(\xi ,\zeta)+v)$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where &lt;span class=&quot;math-container&quot;&gt;$\zeta = \begin{pmatrix} &#xA;T\\ \dot{T}&#xA;\end{pmatrix}$&lt;/span&gt;, and I have understand well, we have do design such controller such that &lt;span class=&quot;math-container&quot;&gt;$\ddot{z} = v$&lt;/span&gt; .&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, if I apply this to the quadrotor, I obtain:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$T = \frac{m(g-\ddot{z}))}{cos(\theta )cos(\gamma )}$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where  &lt;span class=&quot;math-container&quot;&gt;$\ddot{z} = \ddot{z_{d}} -K_{d}(\dot{z_{d}} - \dot{z}) - K_{p}(z_{d}-z)$&lt;/span&gt; and with &lt;span class=&quot;math-container&quot;&gt;$z_{d}$&lt;/span&gt; as desired value for the &lt;span class=&quot;math-container&quot;&gt;$z$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is that it looks too much as a PID controller to me, so I don't see the difference between the two types of controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[EDIT] moreover, what are the benefits of using feedback linearization and what is the difference between this tecnhnique and using backstepping or PID controllers?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can somebody please help me? Thank's in advance.&lt;/p&gt;&#xA;" OwnerUserId="21797" LastEditorUserId="21797" LastEditDate="2019-10-20T10:16:53.383" LastActivityDate="2019-10-20T10:16:53.383" Title="feedback linearization for a quadrotor" Tags="&lt;mobile-robot&gt;&lt;control&gt;&lt;quadcopter&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19603" PostTypeId="1" AcceptedAnswerId="19605" CreationDate="2019-10-13T18:19:53.917" Score="2" ViewCount="131" Body="&lt;p&gt;I have a car with 8 lidars, each with a field of view of 60 degrees. My car looks like this&#xA;&lt;a href=&quot;https://i.stack.imgur.com/dXtJw.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dXtJw.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I merge all the lidar readings into 1 point cloud?&lt;/p&gt;&#xA;" OwnerUserId="23983" LastActivityDate="2019-10-14T06:20:47.723" Title="Fusing Multiple Lidars Into 1 Point Cloud" Tags="&lt;computer-vision&gt;&lt;sensor-fusion&gt;&lt;lidar&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19604" PostTypeId="1" CreationDate="2019-10-13T21:46:31.327" Score="1" ViewCount="129" Body="&lt;p&gt;I am trying to understand how the complementary filter works. I did some research and i found this:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/TiUM8.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/TiUM8.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am confused about the noise and drift before any filter is applied. I have 2 questions:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;In the accelerometer, the noise is high frequency signals which is caused by the environment or maybe within the sensor itself. But in the gyroscope, before it is integrated, it should be low frequency noise? Is this the same as drift? Or is the noise causing the drift or vice-versa?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;In the figure above, it shows that the angular velocity is a direct data output from the gyroscope without any computation done. So, this data should contain low frequency signals due to environmental impact but is there any drift present?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="23328" LastActivityDate="2021-03-07T12:00:20.100" Title="Complementary filter for gyroscope and accelerometer" Tags="&lt;imu&gt;&lt;filter&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19605" PostTypeId="2" ParentId="19603" CreationDate="2019-10-14T06:13:11.243" Score="1" Body="&lt;ol&gt;&#xA;&lt;li&gt;Find extrinsic between the sensors using a calibration target or any other methods.&lt;/li&gt;&#xA;&lt;li&gt;Now that you know the relative locations of the sensors, transform the points in each sensor to the first LiDAR coordinate(e.g top left LiDAR in your figure). All the points are merged into the first LiDAR coordinate now.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;You need to learn 1. rigid transformation of 3d points, the transformation matrix 2. LiDAR extrinsic calibration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2 could be difficult if the lidars do not have enough overlap or if you don't have the base knowledge. Request it to the maker if possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not very accurate but ICP could be used to find out the extrinsic which can be found in a point cloud viewer like meshlab or cloud compare. Save scan from all the sensors and load it to the sw above. By aligning using ICP you will have the extrinsic. Save the found extrinsic and next time when you have new point cloud, just apply the same transformation. This could be used only when the LiDARs have enough overlap. &lt;/p&gt;&#xA;" OwnerUserId="19219" LastEditorUserId="19219" LastEditDate="2019-10-14T06:20:47.723" LastActivityDate="2019-10-14T06:20:47.723" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19606" PostTypeId="2" ParentId="19604" CreationDate="2019-10-14T08:58:11.387" Score="0" Body="&lt;p&gt;First I 'll try to answer to your second question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So from the gyroscope you get the angular velocity (without any computation). The drift is produced when you integrate. To be more clear in each step you integrate from the angular velocities to find the position/movement and an error is produced, as you keep adding these values the error increases over time and at some point it is really big resulting to wrong heading estimation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the first question you are right about the accelerometers. They are sensitive to vibration, high frequency noise. But the gyroscopes' main &quot;problem&quot; is the integration, that's where noise is added to the system. You can check out &lt;a href=&quot;https://www.analog.com/en/analog-dialogue/raqs/raq-issue-139.html#&quot; rel=&quot;nofollow noreferrer&quot;&gt;this site&lt;/a&gt; for a bit more detailed explanation.&lt;/p&gt;&#xA;" OwnerUserId="15592" LastActivityDate="2019-10-14T08:58:11.387" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19607" PostTypeId="1" CreationDate="2019-10-14T13:41:53.153" Score="1" ViewCount="24" Body="&lt;p&gt;So i have regular mBot with black/white line follower &amp;amp; ultrasonic sensor. What would be the best thing to upgrade it with?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also is there something that is similar to those blue metal rods? I think that 24 dollars is too much for 3 single aluminium rods...&lt;/p&gt;&#xA;" OwnerUserId="23988" LastActivityDate="2019-10-14T13:41:53.153" Title="Best Sensors/Upgrades for mBots?" Tags="&lt;sensors&gt;" AnswerCount="0" CommentCount="2" ClosedDate="2019-10-15T09:58:33.617" ContentLicense="CC BY-SA 4.0" />
  <row Id="19611" PostTypeId="1" CreationDate="2019-10-15T21:42:52.823" Score="1" ViewCount="60" Body="&lt;p&gt;The good news is, that modern DLP projectors are sold for a low price. Each of the projectors is equipped with a so called digital micromirror device, which is an &lt;a href=&quot;https://en.wikipedia.org/wiki/Microelectromechanical_systems&quot; rel=&quot;nofollow noreferrer&quot;&gt;MEMS&lt;/a&gt; array. It contains millions of pixels, and each of them is realized with two actuators. The actuators are moving physically back and forth and this brings the mirror into the target position which reflects the light.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A movable mirror is the perfect candidate for building a nanorobot, because it was produced already at a low price and doesn't need much energy. Putting two of the actuators together would result into a DIY &lt;a href=&quot;https://en.wikipedia.org/wiki/BEAM_robotics&quot; rel=&quot;nofollow noreferrer&quot;&gt;BEAM&lt;/a&gt; robot which can walk forward.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A normal optical microscope can make the servo motor array visible. The problem is, that a manual driven tweezers is too big for handling the tiny motors. What is the appropriate procedure to extract a single micromirror and utilize the MEMS motor in a robot?&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2021-03-10T08:04:40.627" Title="How to extract the servo motors of a Digital Micromirror Device?" Tags="&lt;servomotor&gt;&lt;electronics&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19614" PostTypeId="1" AcceptedAnswerId="19641" CreationDate="2019-10-16T12:45:10.360" Score="2" ViewCount="30" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/066Co.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/066Co.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The block diagram of the robot is shown as above. Here, &lt;span class=&quot;math-container&quot;&gt;$\phi$&lt;/span&gt; is the angle between &lt;span class=&quot;math-container&quot;&gt;$X_v$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$X_0$&lt;/span&gt; (Yaw angle of the robot), and &lt;span class=&quot;math-container&quot;&gt;$\psi$&lt;/span&gt; is the angle between &lt;span class=&quot;math-container&quot;&gt;$Z_b$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$Z_v$&lt;/span&gt; (pitch angle of the robot's CoM). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Angular velocities of &lt;strong&gt;CoM&lt;/strong&gt; in global coordinate &lt;span class=&quot;math-container&quot;&gt;$X_0, Y_0, Z_0$&lt;/span&gt; are given as &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\Omega_g = [-\dot \phi sin\psi \  \  \dot \psi \ \ \dot \phi cos\psi]$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Whereas, according to my understanding it should be simply&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\Omega_g = [0 \ \  \ \dot \psi \ \  \dot \phi]$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am pretty sure I am wrong, but I could not figure out how did the authors come up with &lt;span class=&quot;math-container&quot;&gt;$\Omega_g = [-\dot \phi sin\psi \  \  \dot \psi \ \ \dot \phi cos\psi]$&lt;/span&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help would be really appreciated.&lt;/p&gt;&#xA;" OwnerUserId="21747" LastActivityDate="2019-10-23T02:06:09.683" Title="Angular Velocities of CoM in Global Coordinate" Tags="&lt;mobile-robot&gt;&lt;kinematics&gt;&lt;dynamics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19616" PostTypeId="2" ParentId="10702" CreationDate="2019-10-16T22:33:25.633" Score="2" Body="&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/YFCjN.png&quot; alt=&quot;2D-plane rotation transform&quot; /&gt;&lt;br&gt;&lt;/p&gt;&#xA;&lt;p&gt;The real dig to the sign convention is direction and the way humans like to perceive things orderly or at least using a reference. clockwise and anti-clockwise directions only exist with &lt;code&gt;2D&lt;/code&gt; planes but the inherent nature of man's stubbornness would lead him to create the right-thumb-rule to support the notion of a &lt;code&gt;3D&lt;/code&gt; or &lt;code&gt;4D&lt;/code&gt; clock existing in the nearest future. other than that there is really nothing to it and I'd argue you can decide either of your &lt;code&gt;sin&lt;/code&gt;s(no pun intended) gets a minus or not(values along the diagonals are always preserved hence &lt;code&gt;cos&lt;/code&gt; for any rotation matrix is always positive) because in higher dimensions there is no up or down, left or right except if assigned(with a bias) which is usually because humans are scared they must always be able to represent rotations in this form e.g. rotating a point from left to right or from bottom to top( where &lt;span class=&quot;math-container&quot;&gt;$z$&lt;/span&gt; &lt;strong&gt;&lt;code&gt;-&amp;gt;&lt;/code&gt;&lt;/strong&gt; top, &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; &lt;strong&gt;&lt;code&gt;-&amp;gt;&lt;/code&gt;&lt;/strong&gt; bottom(left), &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt; &lt;strong&gt;&lt;code&gt;-&amp;gt;&lt;/code&gt;&lt;/strong&gt; bottom(right) )&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/ps8Xz.png&quot; alt=&quot;anti-clockwise 3D rotation matrix&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/jHkpT.png&quot; alt=&quot;clockwise 3D rotation matrix&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;From the diagrams above &lt;code&gt;2D&lt;/code&gt;-perspective anti-clockwise (&lt;span class=&quot;math-container&quot;&gt;$XY,YZ,ZX$&lt;/span&gt;) and clockwise(&lt;span class=&quot;math-container&quot;&gt;$YX,XZ,ZY$&lt;/span&gt;) rotations can be seen thus  you can be sure that for your rotation matrix needs &lt;code&gt;Rxy = -Ryx&lt;/code&gt;, &lt;code&gt;Ryz = -Rzy&lt;/code&gt; and &lt;code&gt;Rxz = -Rzx&lt;/code&gt; i.e. &lt;br&gt;&lt;br&gt;&lt;span class=&quot;math-container&quot;&gt;$XY$&lt;/span&gt;-&lt;span class=&quot;math-container&quot;&gt;$plane$&lt;/span&gt;-&lt;span class=&quot;math-container&quot;&gt;$rotation = - YX$&lt;/span&gt;-&lt;span class=&quot;math-container&quot;&gt;$plane$&lt;/span&gt;-&lt;span class=&quot;math-container&quot;&gt;$rotation$&lt;/span&gt;,&lt;br&gt; &lt;span class=&quot;math-container&quot;&gt;$YZ$&lt;/span&gt;-&lt;span class=&quot;math-container&quot;&gt;$plane$&lt;/span&gt;-&lt;span class=&quot;math-container&quot;&gt;$rotation = - ZY$&lt;/span&gt;-&lt;span class=&quot;math-container&quot;&gt;$plane$&lt;/span&gt;-&lt;span class=&quot;math-container&quot;&gt;$rotation$&lt;/span&gt;,&lt;br&gt; &lt;span class=&quot;math-container&quot;&gt;$XZ$&lt;/span&gt;-&lt;span class=&quot;math-container&quot;&gt;$plane$&lt;/span&gt;-&lt;span class=&quot;math-container&quot;&gt;$rotation = - ZX$&lt;/span&gt;-&lt;span class=&quot;math-container&quot;&gt;$plane$&lt;/span&gt;-&lt;span class=&quot;math-container&quot;&gt;$rotation$&lt;/span&gt;&lt;br&gt;&lt;br&gt; which implies they are opposite in direction and as per your taste you can as well decide you want your set of transformations to be e.g. &lt;span class=&quot;math-container&quot;&gt;$XY, YZ, XZ$&lt;/span&gt;(&lt;code&gt;R&lt;/code&gt;&lt;sub&gt;&lt;code&gt;xy&lt;/code&gt;&lt;/sub&gt;,&lt;code&gt;R&lt;/code&gt;&lt;sub&gt;&lt;code&gt;yz&lt;/code&gt;&lt;/sub&gt;,&lt;code&gt;R&lt;/code&gt;&lt;sub&gt;&lt;code&gt;xz&lt;/code&gt;&lt;/sub&gt;)  instead of the matrices you provided earlier which corresponds to &lt;span class=&quot;math-container&quot;&gt;$XY,YZ,ZX$&lt;/span&gt;(&lt;code&gt;R&lt;/code&gt;&lt;sub&gt;&lt;code&gt;xy&lt;/code&gt;&lt;/sub&gt;,&lt;code&gt;R&lt;/code&gt;&lt;sub&gt;&lt;code&gt;yz&lt;/code&gt;&lt;/sub&gt;,&lt;code&gt;R&lt;/code&gt;&lt;sub&gt;&lt;code&gt;zx&lt;/code&gt;&lt;/sub&gt;) or by going even further to break all the rules you may decide &lt;span class=&quot;math-container&quot;&gt;$YX,ZY,ZX$&lt;/span&gt;(&lt;code&gt;R&lt;/code&gt;&lt;sub&gt;&lt;code&gt;yx&lt;/code&gt;&lt;/sub&gt;,&lt;code&gt;R&lt;/code&gt;&lt;sub&gt;&lt;code&gt;zy&lt;/code&gt;&lt;/sub&gt;,&lt;code&gt;R&lt;/code&gt;&lt;sub&gt;&lt;code&gt;zx&lt;/code&gt;&lt;/sub&gt;) is the most suitable for your maximum satisfaction&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;N.B&lt;/strong&gt; When it's said that a &lt;code&gt;3D&lt;/code&gt; object is rotated via the z axis this means its plane of rotation was &lt;span class=&quot;math-container&quot;&gt;$XY$&lt;/span&gt;. I gave a better explanation &lt;a href=&quot;https://math.stackexchange.com/questions/1402362/rotation-in-4d/3311905#3311905&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="23998" LastEditorUserId="23998" LastEditDate="2020-08-03T19:07:15.900" LastActivityDate="2020-08-03T19:07:15.900" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19617" PostTypeId="2" ParentId="19611" CreationDate="2019-10-17T04:49:52.787" Score="0" Body="&lt;p&gt;Mankind does not have such a delicate technology to extract 0.01mm fragile structure from a silicon wafer especially when it is sticked with the rest of the parts firmly. Even if you do it somehow using nanometer accuracy etching devices(the same technology used to make a mems structure), you cannot wire signals properly. I guess the reason why people are not doing this is because fabricating a new mems structure is cheaper and easier (relatively). &lt;/p&gt;&#xA;" OwnerUserId="19219" LastEditorUserId="19219" LastEditDate="2019-10-17T04:57:01.293" LastActivityDate="2019-10-17T04:57:01.293" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19621" PostTypeId="2" ParentId="15107" CreationDate="2019-10-18T18:59:01.327" Score="-2" Body="&lt;p&gt;Execute the following:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;math-container&quot;&gt;$ pip install virtualenv&#xA;$&lt;/span&gt; virtualenv &amp;lt;your name of choice, call it v&amp;gt;&#xA;$ source &amp;lt;your name of choice, that is v&amp;gt;/bin/activate&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Running catkin_make after doing the above worked for me.&lt;/p&gt;&#xA;" OwnerUserId="24008" LastActivityDate="2019-10-18T18:59:01.327" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19623" PostTypeId="2" ParentId="7570" CreationDate="2019-10-19T12:24:38.317" Score="2" Body="&lt;p&gt;The paper mentioned by @Ben is a good one, but sadly not well known.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are two different DH conventions in common use:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Standard DH, used in books by Paul, Siciliano et.al., Spong et.al., Corke etc. is defined by parameters &lt;span class=&quot;math-container&quot;&gt;$d_j$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$\theta_j$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$a_j$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\alpha_j$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;li&gt;Modified DH, used in the book by Craig (which is where I'm guessing your figures come from) is defined by parameters &lt;span class=&quot;math-container&quot;&gt;$d_j$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$\theta_j$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$a_{j-1}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\alpha_{j-1}$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;All too often articles/papers don't mention which convention is used, which is a pity because the equation for the link transformation matrix is very different in each case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You list 3 equations at the top of your question:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The first is correct for modified DH parameters&lt;/li&gt;&#xA;&lt;li&gt;The second and third are not correct for modified DH.  They are somewhat like the equations for standard DH, expect that they should have &lt;span class=&quot;math-container&quot;&gt;$a_j$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\alpha_j$&lt;/span&gt; not &lt;span class=&quot;math-container&quot;&gt;$a_{j-1}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\alpha_{j-1}$&lt;/span&gt;.  Where did these come from?&lt;/li&gt;&#xA;&lt;li&gt;The second and third are equivalent (even if not correct) since you can change the order of a rotation and translation about the same axis.  In general you cannot change the order of transformations in an expression.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="21223" LastActivityDate="2019-10-19T12:24:38.317" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19624" PostTypeId="2" ParentId="18783" CreationDate="2019-10-19T16:56:38.730" Score="1" Body="&lt;p&gt;Feedback control tries to drive the error, reference minus measured value, to zero. However, in your case the output (the temperature of the outside of the tank, denoted with &lt;span class=&quot;math-container&quot;&gt;$T_\text{out}$&lt;/span&gt;) does not match the quantity the reference is a desired value for (the temperature of the liquid inside the tank &lt;span class=&quot;math-container&quot;&gt;$T_\text{in}$&lt;/span&gt;). Since you do have an estimated relation between &lt;span class=&quot;math-container&quot;&gt;$T_\text{out}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$T_\text{in}$&lt;/span&gt;, so &lt;span class=&quot;math-container&quot;&gt;$T_\text{in} \approx f(T_\text{out})$&lt;/span&gt;, with the function &lt;span class=&quot;math-container&quot;&gt;$f(\cdot)$&lt;/span&gt; known.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to make the system do what you want (let &lt;span class=&quot;math-container&quot;&gt;$T_\text{in}$&lt;/span&gt; go to a desired reference value &lt;span class=&quot;math-container&quot;&gt;$r$&lt;/span&gt;) it might be easiest to define the error, &lt;span class=&quot;math-container&quot;&gt;$e$&lt;/span&gt; as the difference between a &quot;desired value&quot; and &quot;measured value&quot; expressed as the same quantity. When expressing both the &quot;desired value&quot; and &quot;measure value&quot; in terms of the internal temperature you could define the error as&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;e = r - f(y),&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;with &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt; the measured value of the temperature of the outside of the tank. And &lt;span class=&quot;math-container&quot;&gt;$e$&lt;/span&gt; is the signal that you feed into the PID controller. Similarly when expressing both the &quot;desired value&quot; and &quot;measure value&quot; in terms of the external temperature you could define the error as&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;e = f^{-1}(r) - y,&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;with &lt;span class=&quot;math-container&quot;&gt;$f^{-1}(\cdot)$&lt;/span&gt; meaning the inverse of &lt;span class=&quot;math-container&quot;&gt;$f(\cdot)$&lt;/span&gt;, so &lt;span class=&quot;math-container&quot;&gt;$T_\text{out} \approx f^{-1}(T_\text{in})$&lt;/span&gt;.&lt;/p&gt;&#xA;" OwnerUserId="1487" LastActivityDate="2019-10-19T16:56:38.730" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19625" PostTypeId="1" AcceptedAnswerId="19631" CreationDate="2019-10-20T09:41:14.043" Score="0" ViewCount="46" Body="&lt;p&gt;I'm new to robotics, I don't understand the way wikipedia defines robotics manipulator. If there is no any direct contact how could the robot move things within his work envelope.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In robotics a manipulator is a device used to manipulate materials&#xA;  without direct contact&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;source &lt;a href=&quot;https://en.wikipedia.org/wiki/Manipulator_(device)&quot; rel=&quot;nofollow noreferrer&quot;&gt;robotics manipulator&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="24016" LastActivityDate="2019-10-20T19:23:24.870" Title="Definition of robotics manipulator?" Tags="&lt;manipulator&gt;&lt;first-robotics&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19627" PostTypeId="1" CreationDate="2019-10-20T13:30:26.503" Score="0" ViewCount="11" Body="&lt;p&gt;This is the TTS TacTile Code Reader:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.tts-international.com/tactile-code-reader/1010494.html?cgid=Primary-Computing_--_ICT-Bee-Bot_Blue-Bot_--_Pro-Bot&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.tts-international.com/tactile-code-reader/1010494.html?cgid=Primary-Computing_--_ICT-Bee-Bot_Blue-Bot_--_Pro-Bot&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There aren't any connection pins, I guess the tiles are maybe rfid tags.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you so much!&lt;/p&gt;&#xA;" OwnerUserId="23771" LastEditorUserId="23771" LastEditDate="2019-10-20T16:51:39.623" LastActivityDate="2019-10-20T16:51:39.623" Title="How does TTS TacTile Code Reader work?" Tags="&lt;control&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19630" PostTypeId="1" CreationDate="2019-10-20T18:30:48.113" Score="0" ViewCount="97" Body="&lt;p&gt;Why are there two 5V and GND output in 3DR Power module (&lt;a href=&quot;https://www.instructables.com/id/Safetly-use-CLONE-APM-Power-Modules/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.instructables.com/id/Safetly-use-CLONE-APM-Power-Modules/&lt;/a&gt;)&#xA;(&lt;a href=&quot;https://www.youtube.com/watch?v=M6OSp05Y5b8&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=M6OSp05Y5b8&lt;/a&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can we power up an APM 2.8 with just one pair of 5V and GND from this module.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, I would be most grateful if someone could please provide me the detailed circuit diagram (with explanation) of this module for a better understanding of its working.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/GBT4c.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/GBT4c.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="24019" LastEditorUserId="24019" LastEditDate="2019-10-20T19:38:42.383" LastActivityDate="2019-10-20T21:15:09.993" Title="Why 3DR Power Module has two 5v and GND output" Tags="&lt;quadcopter&gt;&lt;uav&gt;&lt;ardupilot&gt;&lt;multi-rotor&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19631" PostTypeId="2" ParentId="19625" CreationDate="2019-10-20T19:23:24.870" Score="4" Body="&lt;p&gt;The original manipulators referred to in that article were through-the-wall pantographs which moved radioactive materials without the human operator having direct contact with those materials.  The end effectors of those manipulators did have direct contact with the materials - just not the human.  Although the article is not specific about this, it seems they carry that concept forward for programmable manipulators - that the person doing (or supervising) the task does not engage the product directly.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2019-10-20T19:23:24.870" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19632" PostTypeId="1" CreationDate="2019-10-20T19:31:04.237" Score="0" ViewCount="25" Body="&lt;p&gt;What are the some of the best practices for placing the components (including battery, GPS, flight-controller, wires, receiver etc.) on the air-frame of an 'X' quad-copter to ensure the minimum power loss as a result of overburdening of the flight controller. Also, how can we test that CG is not disturbed after placing the components.&lt;/p&gt;&#xA;" OwnerUserId="24019" LastActivityDate="2019-10-20T19:31:04.237" Title="Best practices for quad-copter designing" Tags="&lt;quadcopter&gt;&lt;uav&gt;&lt;multi-rotor&gt;&lt;ardupilot&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19633" PostTypeId="2" ParentId="19630" CreationDate="2019-10-20T21:15:09.993" Score="1" Body="&lt;p&gt;Dual power and ground pins are on the power module so that two other modules could be powered without having to  split the power cables.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, if the attached module draws significant current from the power module, then all of the power pins could be used to keep connector contacts from being overloaded.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as the schematic, you need to study the datasheet for the regulator chip that is used in the device.&lt;/p&gt;&#xA;" OwnerUserId="19143" LastActivityDate="2019-10-20T21:15:09.993" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19634" PostTypeId="1" CreationDate="2019-10-21T05:53:56.217" Score="3" ViewCount="189" Body="&lt;p&gt;I have a 4 wheeled toy car, with 5 motors, one on each wheel and one is used for steering. How can I use ROS navigation stack with this robot since navigation stack is used with differential drive robot?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is their a way I can map cmd_vel(x,y and theta) of differential drive into my robot?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you&lt;/p&gt;&#xA;" OwnerUserId="24021" LastEditorUserId="24021" LastEditDate="2019-10-21T06:32:57.553" LastActivityDate="2019-11-20T14:01:00.110" Title="how to use ROS navigation stack with 4 wheeled robots" Tags="&lt;mobile-robot&gt;&lt;ros&gt;&lt;navigation&gt;&lt;autonomous-car&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19635" PostTypeId="2" ParentId="19634" CreationDate="2019-10-21T13:41:39.747" Score="2" Body="&lt;p&gt;Yes there is. You need to develop or look for the developed equations of velocities that provides the math that transform from the x y theta velocities to the velocities on each of the motors that you have. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The equations are for each configuration and depends also on the separation of the wheels, radius of the wheels and orientation of them and also if there is any gearbox or transmission mechanism. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you need more specific information of the equations please provide a schematic of the wheel configuration. &lt;/p&gt;&#xA;" OwnerUserId="21229" LastActivityDate="2019-10-21T13:41:39.747" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19636" PostTypeId="1" AcceptedAnswerId="19637" CreationDate="2019-10-21T16:50:15.410" Score="-1" ViewCount="38" Body="&lt;p&gt;I'm envisioning a &quot;robot&quot; with a capability as simple as flinching a given part of itself upon hearing a particular sound. As someone with zero experience and no clue of anything regarding robotics (as of right now, am excited to learn), I suppose I am asking for somewhere to start. What are ways to have a robot recognize a sound and react to it? I also suppose it would be a very basic robotic-arm reacting to the sound.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I apologize if this is a very general question.&lt;/p&gt;&#xA;" OwnerUserId="24024" LastActivityDate="2019-10-22T07:33:03.677" Title="Basic robot that responds to a specific sound?" Tags="&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2019-10-22T13:05:13.663" ContentLicense="CC BY-SA 4.0" />
  <row Id="19637" PostTypeId="2" ParentId="19636" CreationDate="2019-10-22T07:33:03.677" Score="1" Body="&lt;p&gt;Trying to build and program a robot with zero experience isn't the exception but it's the normal case. Most robotics projects are started with the aim to learn something which is new and to get detailed knowledge about Artificial Intelligence. For getting the maximum learning experience the project goal should be a little more complicated than the user is able to realize. This is equal to create a demanding quest which makes it likely, that the user needs additional knowledge.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The primary question isn't how to solve an existing robot task, for example to react to an audio signal, but how to formalize the challenge. The problem can become static by providing environmental constraints about the robot hardware, for example a certain Arduino kit, and for defining the software task, for example the robot arm should move 4 centimeter backwards (not more) in reaction to a handclap sound. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Carefully defined requirements for a robotic system will make the project much easier. It reduces the space of potential useful literature, reduces the effort to search for existing examples, and allows to identify missing skills. For example, if the task is that the robotarm should react to a handclap sound, but not to clicker sound produced by a dog training device, it's possible to determine if the project was a success or not.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2019-10-22T07:33:03.677" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19638" PostTypeId="1" CreationDate="2019-10-22T13:32:14.737" Score="0" ViewCount="79" Body="&lt;p&gt;Consider a mobile robot provided with a contact sensor that randomly travels in a closed environment, changing direction every time an obstacle is encountered. Is it possible to reconstruct the 2D map of the environment (and the location of the robot) using just the contact sensor, an odometer, a compass and one front camera (no lidar, laser and other depth sensors)? What techniques can be used?&lt;/p&gt;&#xA;" OwnerUserId="24030" LastEditorUserId="37" LastEditDate="2019-10-24T16:27:15.440" LastActivityDate="2021-03-17T19:08:05.980" Title="SLAM techniques based on contact, odometry and one front camera" Tags="&lt;slam&gt;&lt;odometry&gt;&lt;sensor-fusion&gt;&lt;visual-odometry&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19639" PostTypeId="1" AcceptedAnswerId="21613" CreationDate="2019-10-22T19:01:52.653" Score="0" ViewCount="113" Body="&lt;p&gt;I got a plant &lt;span class=&quot;math-container&quot;&gt;$G(s)=\left(0.13s+1\right)/s^2$&lt;/span&gt; to design a compensator which provides below demands:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Settling time : max 2s&lt;/li&gt;&#xA;&lt;li&gt;Overshoot : max %35&lt;/li&gt;&#xA;&lt;li&gt;Gain margin : min 10 dB&lt;/li&gt;&#xA;&lt;li&gt;Phase margin : min 30 deg&lt;/li&gt;&#xA;&lt;li&gt;Controller effort (r to u) : max 0.9&lt;/li&gt;&#xA;&lt;li&gt;Bandwith : min 10 rad/s&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The best architecture so far was the one below but I couldn't reach the demands.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/r5h6K.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/r5h6K.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;assigning &lt;span class=&quot;math-container&quot;&gt;$C1=0.03\cdot\left(\left(s+80\right)\left(s+10\right)\right)/\left(\left(s+0.12\right)\left(s+1\right)\right)$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$C2=17.5\text{m}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$H=1$&lt;/span&gt; results as below:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/FXawb.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FXawb.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone explain or guide a design approach on how to handle &lt;span class=&quot;math-container&quot;&gt;$\left(s+a\right)/s^2$&lt;/span&gt; type plants when designing compensators or mention some tips/shortcuts for architecture selection? How do we select the order of the controller?&lt;/p&gt;&#xA;" OwnerUserId="10090" LastEditorUserId="6941" LastEditDate="2019-10-25T13:42:52.377" LastActivityDate="2021-01-21T12:45:57.740" Title="Compensator design" Tags="&lt;control&gt;&lt;pid&gt;&lt;microcontroller&gt;&lt;matlab&gt;&lt;design&gt;" AnswerCount="1" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="19641" PostTypeId="2" ParentId="19614" CreationDate="2019-10-23T02:06:09.683" Score="0" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/5mc7O.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/5mc7O.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After some search, I am only able to find the geometric solution which makes sense to me. As &lt;span class=&quot;math-container&quot;&gt;$\dot \phi$&lt;/span&gt; is the instantaneous angular velocity about &lt;span class=&quot;math-container&quot;&gt;$Z_v$&lt;/span&gt; axis, then it has two components on &lt;span class=&quot;math-container&quot;&gt;$Z_b$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$X_b$&lt;/span&gt; axes. Note that &lt;span class=&quot;math-container&quot;&gt;$\dot \phi sin \psi$&lt;/span&gt; component is on the negative &lt;span class=&quot;math-container&quot;&gt;$X_b$&lt;/span&gt; axis. Finally I get:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\Omega_g= [-\dot \phi sin\psi \  \dot \psi \  \dot\phi cos\psi]$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;as given in the paper.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S: If you have a mathematical solution please contribute here. Also, if my solution is wrong let me know.&lt;/p&gt;&#xA;" OwnerUserId="21747" LastActivityDate="2019-10-23T02:06:09.683" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19643" PostTypeId="2" ParentId="16836" CreationDate="2019-10-23T08:12:01.967" Score="2" Body="&lt;p&gt;I wanted to do a similar thing to point to a custom Python logging ROS configuration file. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the way I read the documentation you only need to create a .sh script and it should be run by all of the fancier shell environments (e.g. bash with setup.bash). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I added the following line to &lt;code&gt;CMakeLists.txt&lt;/code&gt; for my package:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;catkin_add_env_hooks(logging_env SHELLS sh DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/env-hooks)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In the folder env-hooks in my package I added the following file called &lt;code&gt;logging_env.sh&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#!/usr/bin/env sh&#xA;&#xA;export ROS_PYTHON_LOG_CONFIG_FILE=&quot;${CATKIN_ENV_HOOK_WORKSPACE}/share/my_custom_logging_package/config/python_logging.conf&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In this particular instance I also had to make sure the file pointed to by the environment variable was available in the installed share directory by also adding the following to &lt;code&gt;CMakeLists.txt&lt;/code&gt;. This command copies the whole config directory into the packages &lt;code&gt;share&lt;/code&gt; directory:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;install(DIRECTORY config&#xA;  DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}&#xA;)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="24038" LastActivityDate="2019-10-23T08:12:01.967" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19644" PostTypeId="2" ParentId="19638" CreationDate="2019-10-23T12:26:59.597" Score="0" Body="&lt;p&gt;There countless implementations for the camera-only methods. Have a look at the following SLAM codes or demo videos.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EKF-SLAM&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ORB-SLAM&lt;/p&gt;&#xA;&#xA;&lt;p&gt;LSD-SLAM&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Structure from motion&lt;/p&gt;&#xA;&#xA;&lt;p&gt;VITAMIN-E &lt;a href=&quot;https://www.youtube.com/watch?v=yfKccCmmMsM&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=yfKccCmmMsM&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These are all hand-held SLAMs but can be adapted to your case as well. Feature initialization might be a problem but because odometry is available in your case, it won't be a problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some extra sensors like odometer, compass and etc can be integrated in the pipeline. Just add extra cost function to the already existing optimization code(optimization-based ones) or system model(filtering-based ones).&lt;/p&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2019-10-23T12:26:59.597" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19646" PostTypeId="1" CreationDate="2019-10-24T11:33:21.877" Score="0" ViewCount="1147" Body="&lt;p&gt;I was looking for some comparison between these two approaches, but couldn't find any.&#xA;I am wondering, what are the actual differences in terms of power consumption, accuracy, convergence speed and complexity of implementation and tuning between them?&#xA;Why do most quadcopter firmwares use Kalman filtering for sensor fusion?&lt;/p&gt;&#xA;" OwnerUserId="18145" LastActivityDate="2019-10-24T14:10:10.660" Title="Madgwick or Kalman filter for sensor fusion?" Tags="&lt;quadcopter&gt;&lt;kalman-filter&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19647" PostTypeId="2" ParentId="19646" CreationDate="2019-10-24T14:10:10.660" Score="-1" Body="&lt;p&gt;Make sure you use your duckduckgoing a little harder...finding comparisons between fusion algorithms is pretty easy. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A comparison between &lt;a href=&quot;http://www.olliw.eu/2013/imu-data-fusing/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Madgwick, Kalman, and Complimentry&lt;/a&gt; filters is easy to find.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Reading individual papers for each fusion method will give you specific answers to each method.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which one is better is mostly depends what you have for sensor data. Madgwick typically uses 9dof sensors, while Kalman algorithms i‘ve seen with 6dof. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Comp filters I‘ve seen with just 2. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why quads typically use Kalman is anyones guess besides the persons who implemented, however its likely they arn‘t using 9dof sensors, and don‘t bother with madgwick. &lt;/p&gt;&#xA;" OwnerUserId="23148" LastActivityDate="2019-10-24T14:10:10.660" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19648" PostTypeId="1" CreationDate="2019-10-24T14:33:09.977" Score="0" ViewCount="35" Body="&lt;p&gt;There is usually a control mixer block in control schemes in robotics. What is it and what is the functionality and where can I read more about it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/HYsHv.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HYsHv.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Reference to the paper: &lt;a href=&quot;https://giuseppesilano.net/publications/smc19.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://giuseppesilano.net/publications/smc19.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="24042" LastEditorUserId="6941" LastEditDate="2019-10-30T11:29:00.993" LastActivityDate="2019-10-30T13:45:42.497" Title="What is the Control mixer block that is usually found in control schemes?" Tags="&lt;mobile-robot&gt;&lt;control&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19649" PostTypeId="1" CreationDate="2019-10-24T16:04:17.847" Score="0" ViewCount="41" Body="&lt;p&gt;Some planners assume a kinematic model of the robot for example diff drive or omni directional etc. while generating motion plans for the robot. Can knowledge of the dynamics of the robot help generate better motion plans ? If yes, why is this not typically done apart from the difficulty in identifying or coming up with such models ?&lt;/p&gt;&#xA;" OwnerUserId="23475" LastActivityDate="2019-11-23T18:00:45.083" Title="Can knowledge of robot's dynamics help in motion planning?" Tags="&lt;wheeled-robot&gt;&lt;motion-planning&gt;&lt;dynamics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19650" PostTypeId="2" ParentId="19649" CreationDate="2019-10-24T16:10:26.053" Score="1" Body="&lt;p&gt;Yes it helps but it definitely adds complexity to the planners. Depending on the wheel configuration, how many wheels, the mass of the robot, the moments of inertia, same as the mass of the wheels, moment of inertia of the wheels, and friction as well. All this parameters add more complexity that is hard to generalize. For this reason all these planners assume a robot that follow the specified velocities to a certain accuracy - the low level controllers take care of this part, while the planner acts as a high level controller. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As an extra you can take a look at this video of Disney that improves the trajectory tracking of its animatronics by knowing their dynamic model. &#xA;&lt;a href=&quot;https://www.youtube.com/watch?v=Z1jgaEO9aRs&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=Z1jgaEO9aRs&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="21229" LastActivityDate="2019-10-24T16:10:26.053" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19652" PostTypeId="1" CreationDate="2019-10-24T18:00:07.433" Score="0" ViewCount="55" Body="&lt;p&gt;In trying to explain these important concepts and algorithms it would be super useful to have a video or animation that illustrates through simulation the underlying math. All the videos and articles I can find either are purely conceptual and really simplified (i.e. == magic) or they go deep on the math and go over the heads of most of my students.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know of a resource (at the level of a &lt;a href=&quot;https://www.3blue1brown.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.3blue1brown.com/&lt;/a&gt; to teach AMCL and/or SLAM?&lt;/p&gt;&#xA;" OwnerUserId="17190" LastActivityDate="2019-10-28T17:48:28.663" Title="Teaching AMCL and SLAM" Tags="&lt;slam&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19656" PostTypeId="1" CreationDate="2019-10-27T06:57:52.480" Score="1" ViewCount="80" Body="&lt;p&gt;My question is about a square shaped differential wheeled robot, I built, that has a hub-motor (BLDC motor) attached to each corner, i.e., the wheels on the same side, either left or right, have the same velocity and direction (skid-steer). Currently, I’m able to move it back and forth but I’m not able to steer it by using different wheel speeds, i.e., left side spinning faster than the right side and vice versa, or let alone to turn it in place, i.e., left side spinning at the same speed as the right side but with opposite direction. In the case of using different wheel speeds, it keeps going forward. When trying to make it turn in place, it just doesn’t move at all. I’ve tested the wheels spinning off the ground, and they did spin according to the differential drive system. The tests were performed on asphalt. The wheels are hub-motors for e-bikes (bike tires).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What could be the problem? Not enough power (torque) in the hub-motors? the geometry of the robot? What calculations I can do to calculate the power necessary of each motor to steer it with different wheel speeds or turn it in place?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Best,&lt;/p&gt;&#xA;" OwnerUserId="15240" LastEditorUserId="15240" LastEditDate="2019-10-27T07:26:22.557" LastActivityDate="2019-10-27T07:26:22.557" Title="4 wheeled differential wheeled (skid-steer) robot steering problem" Tags="&lt;wheeled-robot&gt;&lt;dynamics&gt;&lt;brushless-motor&gt;&lt;differential-drive&gt;&lt;steering&gt;" AnswerCount="0" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="19657" PostTypeId="1" AcceptedAnswerId="19658" CreationDate="2019-10-27T12:12:04.417" Score="3" ViewCount="132" Body="&lt;p&gt;I had an exam yesterday, and I was asked the following question:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Why PID controller is necessary for stabilizing the inverted pendulum on a cart, why not we just use PI or PD?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I've seen some papers taking about using PD to stabilize the inverted pendulum, and I couldn't find any mathematical explanation, any help?&lt;/p&gt;&#xA;" OwnerUserId="24059" LastActivityDate="2021-01-07T11:25:55.493" Title="Inverted pendulum controller" Tags="&lt;control&gt;&lt;pid&gt;&lt;stability&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19658" PostTypeId="2" ParentId="19657" CreationDate="2019-10-27T12:31:18.840" Score="4" Body="&lt;p&gt;Without going into the details of the underlying equations of motion, I could argue that the D part is needed to damp out the oscillations of the pole while reaching for the (unstable) equilibrium point with no overshoots and guaranteeing at the same time sufficient dynamics.&lt;/p&gt;&#xA;&lt;p&gt;Now, if we consider the context where the equilibrium point is reached but the cart is still accelerating, the only term capable of counteracting the inertial forces on the pole is the integral I, which indeed is the only part delivering effort when we have 0 error. Besides this, the integral is always desirable to compensate for uncertainties in the plant.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;To elaborate more, I've found this quite &lt;a href=&quot;http://www-robotics.cs.umass.edu/%7Egrupen/503/SLIDES/cart-pole.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;enlighting reference&lt;/a&gt; on the dynamics of the cart-pole system.&lt;/p&gt;&#xA;&lt;p&gt;Essentially, if we linearize the system we get:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\ddot{\theta}=\frac{g}{L}\theta+\frac{u}{ML},&#xA;$$&lt;/span&gt;&#xA;where &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt; is the angular displacement of the pole with respect to the equilibrium, &lt;span class=&quot;math-container&quot;&gt;$u$&lt;/span&gt; is the force applied to the cart, &lt;span class=&quot;math-container&quot;&gt;$M$&lt;/span&gt; is the mass of the cart, &lt;span class=&quot;math-container&quot;&gt;$L$&lt;/span&gt; is the length of the pole, and &lt;span class=&quot;math-container&quot;&gt;$g$&lt;/span&gt; the gravity acceleration.&lt;/p&gt;&#xA;&lt;p&gt;Contrary to what I said above, for &lt;span class=&quot;math-container&quot;&gt;$\theta=0$&lt;/span&gt; we can obtain the equilibrium &lt;span class=&quot;math-container&quot;&gt;$\ddot{\theta}=0$&lt;/span&gt; with &lt;span class=&quot;math-container&quot;&gt;$u=0$&lt;/span&gt;, thus the integral I is not strictly required. Anyway, we ought to recap that ours is only an approximated linear model; therefore, the I term can help compensate for the unmodeled quantities.&lt;/p&gt;&#xA;&lt;p&gt;Let's come to the PD part then.&lt;/p&gt;&#xA;&lt;p&gt;The system is unstable because of the positive eigenvalue &lt;span class=&quot;math-container&quot;&gt;$+\sqrt{g/L}$&lt;/span&gt;. Hence, we need to find a suitable control law to stabilize it. A full state-feedback controller is proposed in the reference, which is of the form:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;u=h_1\theta+h_2\dot{\theta}.&#xA;$$&lt;/span&gt;&#xA;It's easy to demonstrate that for &lt;span class=&quot;math-container&quot;&gt;$h_1=-Mg$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$h_2&amp;lt;0$&lt;/span&gt;, the resulting closed-loop eigenvalues are both stable &lt;span class=&quot;math-container&quot;&gt;$\lambda_{1,2}=0,h_2/ML$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;To conclude, &lt;span class=&quot;math-container&quot;&gt;$u=-Mg\theta+h_2\dot{\theta}$&lt;/span&gt; is nothing but a PD. Actually, this is more properly called a state-feedback controller, but we can clearly see the contributions of the proportional and the derivative parts, although not specified in terms of the error.&lt;/p&gt;&#xA;&lt;p&gt;Now, let's go back to the I part.&lt;/p&gt;&#xA;&lt;p&gt;If we don't know precisely the value of the mass &lt;span class=&quot;math-container&quot;&gt;$M$&lt;/span&gt; and also we measure &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt; with a certain level of accuracy, then &lt;span class=&quot;math-container&quot;&gt;$h_1\theta=-Mg\theta$&lt;/span&gt; won't cancel out exactly the term &lt;span class=&quot;math-container&quot;&gt;$\left(g/L\right)\theta$&lt;/span&gt; in the dynamics equation. The mismatch between the designed and the real parameters can be tackled by using the integral part I.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2021-01-07T11:25:55.493" LastActivityDate="2021-01-07T11:25:55.493" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="19660" PostTypeId="2" ParentId="19652" CreationDate="2019-10-28T17:48:28.663" Score="2" Body="&lt;p&gt;There is no resources like 3blue1brown for SLAM. In general I think you just have to bite the bullet and work through the math and the topics. I recommend the &lt;a href=&quot;https://www.youtube.com/watch?v=U6vr3iNrwRA&amp;amp;list=PLgnQpQtFTOGQrZ4O5QzbIHgl3b1JHimN_&quot; rel=&quot;nofollow noreferrer&quot;&gt;Freiburg videos&lt;/a&gt; and notes on robot mapping.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In regards to a simulation that allows you to step through it I recommend &lt;a href=&quot;https://github.com/AtsushiSakai/PythonRobotics&quot; rel=&quot;nofollow noreferrer&quot;&gt;PythonRobotics&lt;/a&gt;. The code examples are quite small and are a good way to see these topics in action with a simple simulation. Since you are interested in ACML there is a basic &lt;a href=&quot;https://github.com/AtsushiSakai/PythonRobotics/blob/master/Localization/particle_filter/particle_filter.py&quot; rel=&quot;nofollow noreferrer&quot;&gt;particle filter&lt;/a&gt; implementation.&lt;/p&gt;&#xA;" OwnerUserId="15265" LastActivityDate="2019-10-28T17:48:28.663" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19661" PostTypeId="1" AcceptedAnswerId="19662" CreationDate="2019-10-28T18:12:03.440" Score="1" ViewCount="479" Body="&lt;p&gt;I am part of a team and we build a robot. I know how many watts all the subsystems of the robot will need and I also know how much time we want to operate it. Our system will need 323.344 Watt and we want to work for 30 min.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I asked a professor to help me and he gave me this formula :&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$C_{bat} = P_{bat}* 1h / ΔSoc$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$ΔSoc$&lt;/span&gt; told me that is the maximum acceptable Voltage dipping and that I can find this information in the Datasheets.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We decided to use Li-Po batteries but I cannot find datasheet for any Li-Po. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How do you calculate the needed capacity for your project? &#xA;How can I calculate it ? Do you know this formula?&lt;/p&gt;&#xA;" OwnerUserId="23526" LastEditorUserId="9176" LastEditDate="2019-10-31T09:38:07.600" LastActivityDate="2019-10-31T09:38:07.600" Title="How to calculate battery capacity for my robot system" Tags="&lt;mobile-robot&gt;&lt;battery&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19662" PostTypeId="2" ParentId="19661" CreationDate="2019-10-28T18:53:10.817" Score="2" Body="&lt;p&gt;30 minutes is half an hour. 323.344 Watts is approximately 324 Watts. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want 324 Watts for half an hour, then you want a (324 * 0.5) Watt-hour battery. This assumes, though, that your battery will go from 100% charge to 0% charge after exactly 30 minutes. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Discharging a battery down to a state of charge of 0% can physically damage batteries, preventing them from ever charging again, and the battery voltage will usually fall quite dramatically as the state of charge approaches 0%, so you might wind up browning out your electronics before you actually hit 0%, leaving the last few percent of state of charge uncaptured and thus falling short of your desired 30 minutes of run time. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What might be a better approach would be to assume that you want your batteries sized such that you can supply the full (324*0.5) Watt-hours of capacity when the batteries are discharged from, for example, 80% of full charge down to 20% of full charge. That is, you want:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;(0.80 - 0.20) * \mbox{Capacity} = 324*0.5 \mbox{Watt-hours}\\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The difference between your starting and ending state of charge is called, not surprisingly, the change or delta (&lt;span class=&quot;math-container&quot;&gt;$\Delta$&lt;/span&gt;) state of charge, and you can solve for capacity by:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\Delta \mbox{SOC} * \mbox{Capacity} = (324 * 0.5) \mbox{Watt-hours}\\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\mbox{Capacity} = \frac{324*0.5}{\Delta\mbox{SOC}} \mbox{Watt-hours} \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the example I gave, where you are designing your system to supply your desired capacity between 80 and 20 percent of full state of charge, your &lt;span class=&quot;math-container&quot;&gt;$\Delta\mbox{SOC} = 0.8-0.2 \boxed{= 0.6} $&lt;/span&gt;, so you wind up with a target battery capacity of:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\mbox{Capacity} = \frac{324*0.5}{0.6} \mbox{Watt-hours} \\&#xA;\boxed{\mbox{Capacity} = 270 \mbox{Watt-hours}} \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Remember that &lt;span class=&quot;math-container&quot;&gt;$P = IV$&lt;/span&gt;, so 270 Watt-hours could be rewritten 270 volt-amp-hours. You can divide your target capacity by the nominal battery voltage to get the actual battery size in amp-hours. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2019-10-28T18:53:10.817" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19664" PostTypeId="2" ParentId="18712" CreationDate="2019-10-28T19:12:41.980" Score="0" Body="&lt;p&gt;ROS is very complex tool. From your description it sound that ROS is a good choice but keep in mind that a ROS project involves a lot of things that can make your project work properly, but it is difficult to learn. Fortunately there is a big community and many good tutorials.  &lt;/p&gt;&#xA;" OwnerUserId="23526" LastActivityDate="2019-10-28T19:12:41.980" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19665" PostTypeId="1" CreationDate="2019-10-28T19:19:03.653" Score="0" ViewCount="70" Body="&lt;p&gt;Me and my team are building a robot and I need to calculate the Power of the motors. Through my research I found that I must know the needed torque for every motor and then convert it to electrical power.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this method correct?&#xA;How can I convert the torque to electrical power ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason I ask this is because I found very large numbers for my motors because I am calculating it with MAX Current. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit #1:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example. For this motor MX-106T/MX-106R &#xA;&lt;a href=&quot;http://support.robotis.com/en/product/actuator/dynamixel/mx_series/mx-106.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://support.robotis.com/en/product/actuator/dynamixel/mx_series/mx-106.htm&lt;/a&gt;&#xA;we can see &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/EEBCg.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/EEBCg.png&quot; alt=&quot;Pic from the documentation&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;for Stall Torque 8.0N.m at 11.1V the current is rated at 4.8A , so I just used &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;\begin{equation}&#xA; P = I*V&#xA;\end{equation}&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I followed this method for every Motor on my robotic system.&#xA;Is this method correct ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you in advance for your help.&lt;/p&gt;&#xA;" OwnerUserId="23526" LastEditorUserId="23526" LastEditDate="2019-10-29T10:39:00.960" LastActivityDate="2019-10-29T10:39:00.960" Title="How to calculate the right needed Power?" Tags="&lt;mobile-robot&gt;&lt;motor&gt;&lt;servomotor&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19666" PostTypeId="2" ParentId="19665" CreationDate="2019-10-29T10:02:15.237" Score="1" Body="&lt;p&gt;The maximum (or required) torque alone is not enough for sizing a motor, it is one of the factors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Motor maximum (sometimes refereed to as peak) torque differs from nominal torque. The maximum torque can be exerted by the motor only for a limited amount of time, whereas the nominal torque can be exerted indefinitely. Nominal torque is proportional to nominal current. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another important factor is the nominal speed (rotational velocity). This defines the speed of the motor which can be exerted indefinitely. It is assumed that the nominal functioning point of the motor is exerting nominal torque while rotating at nominal velocity (both appear simultaneously)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Mechanically, rotational velocity (&lt;span class=&quot;math-container&quot;&gt;$\omega$&lt;/span&gt;) multiplied by torque (&lt;span class=&quot;math-container&quot;&gt;$M$&lt;/span&gt;), given to measurement units, &lt;span class=&quot;math-container&quot;&gt;$rad/s$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$Nm$&lt;/span&gt;) gives the nominal power of the motor (&lt;span class=&quot;math-container&quot;&gt;$P$&lt;/span&gt;) in watts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$P=M \cdot \omega$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is an important criteria for the dimensioning. Moreover, the same thing can be done for pear velocity and peak torque to get the peak power of the motor, but care must be taken, since the peak velocity is not always required simultaneously with the peak torque, so there is a danger of overdimensioning if the right requirements of the application are not identified. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even if the torque and velocity of the motor do not match the requirements, since gears and gearboxes or often used (and sold as accessories to the motors) to get to (or near) the desired velocity and torque, given that the power of the motor is greater (or at least equal) then the power requirements of the application. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please note that this is a simplified explanation of motor sizing. A more exact guide can be found &lt;a href=&quot;https://library.e.abb.com/public/a3ef20fdc69ccc9ac12578800040ca95/ABB_Technical_guide_No_7_REVC.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. This is a guide for ABB brand motors, but it is relevant regardless of chosen brand. The guide includes also information about selecting the right amplifier for the motor which is also crucial. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Selecting the right motor is crucial for any industrial application and there are many electrical, mechanical, control and design criteria which can make or break an application. Please consult a technical sales representative of the chosen motor brand as soon as possible during the development of the application if no experience and know-how is given in the project team.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Furthermore, for robots, safety requirements might be relevant, which can only come from a proper risk analysis of the planned application. &lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2019-10-29T10:12:33.670" LastActivityDate="2019-10-29T10:12:33.670" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19669" PostTypeId="1" CreationDate="2019-10-30T06:28:38.957" Score="0" ViewCount="1953" Body="&lt;p&gt;I have an IMU in NED of which I need to rotate to ENU to conform with ROS. I know its a roll of &lt;code&gt;pi&lt;/code&gt; and a yaw of &lt;code&gt;pi/2&lt;/code&gt; but what does this look like mathematically? Below is an example of what I think so far, however, as you can see I need help with a bit. Thanks everyone :) &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;new_roll = roll&#xA;new_pitch = -pitch&#xA;new_yaw = pi/2 - yaw&#xA;&#xA;new_angular_x = ?&#xA;new_angular_y = ?&#xA;new_angular_z = ?&#xA;&#xA;new_linear_x = ?&#xA;new_linear_y = ?&#xA;new_linear_z = ?&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;h2&gt;EDIT&lt;/h2&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;new_roll = roll&#xA;new_pitch = -pitch&#xA;new yaw = pi/2 - yaw&#xA;&#xA;new_angular_x = angular_x (roll doesn't change?)&#xA;new_angular_y = -angular_y&#xA;new_angular_z = -angular_z&#xA;&#xA;new_linear_x = linear_x&#xA;new_lianer_y = -linear_y&#xA;new_linear_z = -linear_z&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="23694" LastEditorUserId="23694" LastEditDate="2019-11-05T01:52:19.780" LastActivityDate="2021-03-29T04:03:10.337" Title="Rotating NED to ENU" Tags="&lt;rotation&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19670" PostTypeId="2" ParentId="19648" CreationDate="2019-10-30T13:45:42.497" Score="2" Body="&lt;p&gt;You've got the outputs of the control loops that are trying to maintain altitude, roll, pitch, and yaw, but you need to have a speed reference for the motors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The control mixer just takes the outputs for each loop and combines them to get the appropriate speed reference.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, if your quadcopter were arranged in an X shape, then maybe increasing speed in motors 1 and 2 make positive roll and increasing speed in 3 and 4 make negative roll. Increasing speed in all motors makes positive altitude, so you might get something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;motor1 = 0.25*thrust + 0.25*roll;&#xA;motor2 = 0.25*thrust + 0.25*roll;&#xA;motor3 = 0.25*thrust - 0.25*roll;&#xA;motor4 = 0.25*thrust - 0.25*roll;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You'd expand that more as appropriate for pitch and yaw, like 1 and 4 versus 2 and 3 for pitch and 1 and 3 versus 2 and 4 for yaw, to get something like:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;motor1 = 0.25*thrust + 0.25*roll + 0.25*pitch + 0.25*yaw;&#xA;motor2 = 0.25*thrust + 0.25*roll - 0.25*pitch - 0.25*yaw;&#xA;motor3 = 0.25*thrust - 0.25*roll - 0.25*pitch + 0.25*yaw;&#xA;motor4 = 0.25*thrust - 0.25*roll + 0.25*pitch - 0.25*yaw;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If your quadcopter were arranged in a + shape instead, then maybe 1 and 3 are the only motors that do anything for roll, 2 and 4 are the only motors that do anything for pitch, but then all motors do thrust and yaw, so you might wind up with something like the below instead:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;motor1 = 0.25*thrust + 0.5*roll  + 0.25*yaw;&#xA;motor2 = 0.25*thrust - 0.5*pitch - 0.25*yaw;&#xA;motor3 = 0.25*thrust - 0.5*roll  + 0.25*yaw;&#xA;motor4 = 0.25*thrust + 0.5*pitch - 0.25*yaw;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;... and so on. The &quot;control mixer&quot; just combines and maps the control signals to the appropriate motors. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2019-10-30T13:45:42.497" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19672" PostTypeId="2" ParentId="19669" CreationDate="2019-10-30T20:00:46.330" Score="0" Body="&lt;p&gt;You can google this pretty easily. One of the first links I found is &lt;a href=&quot;https://github.com/FroboLab/frobomind/blob/389f7e6b14434811e7836bf260295c8bdcf522ca/fmSensors/global_sensing/imu/vectornav_vn100/src/vectornav_vn100_node.cpp#L117&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyways to answer your questions. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;First thing is that the conventions of roll,pitch yaw don't really mean much in this case cause they are fixed to the vehicle. So your code of&#xA; &lt;code&gt;&quot;new_roll=...&quot;&lt;/code&gt; doesn't really make sense cause roll is the same no matter what.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The conversion can be easily seen from the convention names. NED=ENU/ which means &lt;/p&gt;&#xA;&#xA;&lt;p&gt;North(Roll/X)=East&lt;/p&gt;&#xA;&#xA;&lt;p&gt;East(Pitch/Y)=North&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Down(Yaw/Z)=Up&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;east_ENU=NORTH_NED&#xA;north_ENU=EAST_NED&#xA;up_ENU=-DOWN_NED&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Which means &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;new_angular_x(EAST_ENU)=old_angular_y(NED_EAST)&#xA;new_angular_y(NORTH_ENU)=old_angular_x(NED_NORTH)&#xA;new_angular_z(UP_ENU)=-old_angular_z(NED_DOWN)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and same thing for the gyroscope data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Generally I would say it is easier to think of this with rotation matrices. Which allows you to deal with this via multiplication rather than hand coding the swaps yourself.&lt;/p&gt;&#xA;" OwnerUserId="15265" LastActivityDate="2019-10-30T20:00:46.330" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19673" PostTypeId="1" CreationDate="2019-10-31T04:12:05.900" Score="0" ViewCount="137" Body="&lt;p&gt;I have some accelerometers hanging from strings.  I would like to be able to compute the position of the string from the accelerometer reading.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I think I need to do is:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Compute a transform from the accelerometer at rest in order to normalize my sensor.  I will have gravity so I should be able to know where the z-axis is.&lt;/li&gt;&#xA;&lt;li&gt;Move the string in a known direction to set x and y.&lt;/li&gt;&#xA;&lt;li&gt;Read the sensor and apply the transform to factor out the steady-state reading.&lt;/li&gt;&#xA;&lt;li&gt;Subtract out the effect of gravity.&lt;/li&gt;&#xA;&lt;li&gt;Integrate to get a position.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Is the integration necessary for position?  I know that one side is fixed.  I should be able to use the magnitude of gravity to determine where the string is if the string is held at a position with some trigonometry, right?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I realize that this a solved problem, but I'm not sure what it falls into. There are some transforms between coordinate systems, robotics, and also probably some physics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/m5rpX.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/m5rpX.png&quot; alt=&quot;diagram of accelerometer hanging&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="24090" LastEditorUserId="6941" LastEditDate="2019-10-31T08:06:30.490" LastActivityDate="2021-03-24T15:01:10.087" Title="Using an accelerometer for position" Tags="&lt;accelerometer&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="19674" PostTypeId="2" ParentId="19673" CreationDate="2019-10-31T12:56:53.157" Score="0" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Is the integration necessary for position?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Typically yes, but if the accelerometer is colinear to the string (NOT as you have drawn it!), then you can find the gravity component in your accelerometer output and use that plus the assumption that the string is taught and find your position that way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, if z points up and x points right, then if gravity is all on the negative z-axis then you know the sensor is oriented such that the z-axis is colinear with gravity, so your position is (0, -stringLength). If the z-axis reading is zero and the x-axis reading is negative gravity, then the position is (stringLength, 0). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The components of gravity on each axis will correspond with the angle of the accelerometer and, again, &lt;strong&gt;if&lt;/strong&gt; your accelerometer is colinear with the string then you can determine the angle of the string and thus the position if you assume the string is taught.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The issue, as always with accelerometers, is that you will not get a yaw/heading fix, so you won't be able to tell where on the &quot;cone&quot; you are located, just the cone angle.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2019-10-31T12:56:53.157" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19676" PostTypeId="1" CreationDate="2019-11-01T06:14:20.367" Score="0" ViewCount="309" Body="&lt;p&gt;I require your help regarding a problem I’m encountering.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am a beginner in robot modelling. I am designing a robotic arm for agricultural use and I am having issues with the motors. I am using Maxon motors however the calculated load torque (including arm weight is larger than stall torque of all the motors within the Maxon catalog).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The robot arm is approximately 8 kgs and is lifting a weight of 12 grams (reach=1 m).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know why there may be an issue and if there are any possible solutions?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Will adding another motor in the base half the loads that are applied to each joint? Or should I use gears to increase the output torque?&lt;/p&gt;&#xA;" OwnerUserId="24097" LastEditorUserId="110" LastEditDate="2019-11-01T17:35:05.847" LastActivityDate="2021-03-28T18:04:00.463" Title="Robotic arm servo motor- Not enough torque" Tags="&lt;mobile-robot&gt;&lt;robotic-arm&gt;&lt;industrial-robot&gt;&lt;first-robotics&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19678" PostTypeId="1" CreationDate="2019-11-01T15:22:38.607" Score="0" ViewCount="1075" Body="&lt;p&gt;I have made a model of quadruped robot (sprawling/spider type and not dog type) in V-rep and now I want to make it walk by using creep gait. (i.e moving 1 leg at a time)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I understand, I have to solve inverse kinematics equations for each leg to move it from one position to another.&#xA;&lt;strong&gt;How can I find out the inverse kinematics of my quadruped robot?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it possible to make the V-rep model of quadruped robot walk without knowing the inverse kinematics equations?&#xA;Please help!&lt;/p&gt;&#xA;" OwnerUserId="23857" LastActivityDate="2020-03-01T10:57:07.447" Title="How to find inverse kinematic equations for a quadruped robot to make it walk?" Tags="&lt;mobile-robot&gt;&lt;inverse-kinematics&gt;&lt;dynamics&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19679" PostTypeId="1" CreationDate="2019-11-01T21:51:21.710" Score="2" ViewCount="34" Body="&lt;p&gt;I am planning to use a Kinect Sensor on a mobile robot for path planning based on facial detection.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming I am able to detect the faces of 5 individuals in a room (both the environment and the people are static), can I somehow get the coordinates of said faces, and use those as reference points to draw a path the robot should follow (using a Nearest Neighbor algorithm for example) while stopping at those individual points for 5 seconds? Can you indicate me to any resources, papers, or GitHub repositories explaining it? Also, would I need any odometry or can it all be done through Computer Vision?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: once detected, the faces' coordinates need to be memorized as there is no guarantee that they will remain visible throughout the entire process.&lt;/p&gt;&#xA;" OwnerUserId="24099" LastEditorUserId="9176" LastEditDate="2019-11-02T09:27:09.230" LastActivityDate="2021-03-29T17:06:20.740" Title="Facial Detection combined with Path Planning using Kinect Sensor" Tags="&lt;computer-vision&gt;&lt;kinect&gt;&lt;path-planning&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19680" PostTypeId="2" ParentId="19678" CreationDate="2019-11-01T22:44:42.387" Score="3" Body="&lt;p&gt;On manipulators, &lt;strong&gt;Direct Kinematics&lt;/strong&gt; is the group of equations where, based on the motor's positions (the joint positions, normally in radians), you'll find the spacial (normally Cartesian) pose of the end effector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Inverse Kinematics&lt;/strong&gt;, on the other hand, is the process to find which joint positions are necessary to have the end effector on a specific pose in space. They can be analytic solutions based on the arm configuration, or (most commonly) numeric ones (for example, using Newton-Raphson approximation), and it's normal to have multiple solutions for the same position. Besides that, you'll probably need to control the velocity and trajectory of each leg using a task space controller or something like that, where you'll have to learn &lt;strong&gt;differential inverse kinematics&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On mobile robots with arms, each individual leg can be viewed as a separate manipulator, so you can calculate the position of each individual leg with the inverse kinematics of each one, in relation to their base, in relation to the robot origin.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To make the robot move smoothly, however, as in a trajectory, you'll have to study the specific kinematic chain of the type of robot you're working (or develop one). It's not an easy or trivial task if you plan to do it right.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;V-Rep has the option to take care of the dynamics to a certain point and has tools for inverse kinematics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are some links that you may find useful:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.coppeliarobotics.com/helpFiles/en/inverseKinematicsModule.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Inverse Kinematics module on V-Rep&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://robotacademy.net.au/masterclass/inverse-kinematics-and-robot-motion/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Inverse Kinematics and Motion Masterclass&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=ztNk8N2q0gM&quot; rel=&quot;nofollow noreferrer&quot;&gt;Video and tutorial of Creeping Gait IK&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some articles:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://ieeexplore.ieee.org/document/6045874&quot; rel=&quot;nofollow noreferrer&quot;&gt;Kinematics analysis and simulation of quadruped robot&lt;/a&gt; by Ni Meng and Wang Xiaodong (2011).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://ieeexplore.ieee.org/document/8722979&quot; rel=&quot;nofollow noreferrer&quot;&gt;Quadruped Robot Creeping Gait Stability Analysis and Optimization Using PSO&lt;/a&gt; by Firas A.Raheem and Murtadha Khudhair Flayyih (2017).&lt;/p&gt;&#xA;" OwnerUserId="22691" LastActivityDate="2019-11-01T22:44:42.387" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19681" PostTypeId="1" CreationDate="2019-11-02T06:46:09.967" Score="1" ViewCount="27" Body="&lt;p&gt;I know how to use radial bearings, e.g. ball bearings with shaft. But no matter how much I googled I didn't find any proper clear way to use thrust/axial bearing with shaft. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I downloaded the thrust bearing models and checked its upper and bottom diameter and it is same. I'm really confused right now. Can anyone help me in this? &lt;/p&gt;&#xA;" OwnerUserId="24101" LastEditorUserId="9176" LastEditDate="2019-11-02T09:28:02.420" LastActivityDate="2019-11-02T09:28:02.420" Title="How to use thrust bearing with shaft?" Tags="&lt;motor&gt;&lt;mechanism&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19683" PostTypeId="2" ParentId="18884" CreationDate="2019-11-02T22:03:25.133" Score="0" Body="&lt;p&gt;The IRB140 has no horizontal shoulder offset as the classical Puma 560 has.  This means that there are not different &quot;lefty&quot; and &quot;righty&quot; solutions.  There is still a possibility of elbow up/down and wrist flip/noflip solutions.  So I think there are, in general, only 4 solutions for this robot.&lt;/p&gt;&#xA;" OwnerUserId="21223" LastActivityDate="2019-11-02T22:03:25.133" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19686" PostTypeId="1" CreationDate="2019-11-03T18:03:12.887" Score="3" ViewCount="897" Body="&lt;p&gt;I am using two sensors each connected to different machine (each machine separately runs Ubuntu 16.04 and ROS Kinetic). When I &lt;code&gt;echo topic&lt;/code&gt; on these two machines, I see the time stamps in header of messages are different. Even though they are running at the same time. So I faced issues in synchronizing topics recorded on different machines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Machine 1:&#xA;&lt;code&gt;sec 4583 | nsec 855689180&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Machine 2:&#xA;&lt;code&gt;sec 1570727234 | nsec 4864000&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems that the time stamp on machine 1 is based on &lt;code&gt;sim_time&lt;/code&gt;. Machine 2 is showing a &lt;code&gt;Posix/Unix&lt;/code&gt; time stamp. So on machine 1, I issued the command &lt;code&gt;rosparam set /use_sim_time false&lt;/code&gt;. Still when I fire the node on machine 1, time stamp starts from zero which is &lt;code&gt;sim_time&lt;/code&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I need is to get all time stamps in unix/posix format (10 digit).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S. the node running on Machine 1 is OS-1 Lidar &lt;a href=&quot;https://github.com/ouster-lidar/ouster_example&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ros Driver&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="24109" LastEditorUserId="24109" LastEditDate="2019-11-04T00:19:38.047" LastActivityDate="2021-04-29T11:08:00.637" Title="How to get unix/posix time stamp in header of ROS msg?" Tags="&lt;ros&gt;&lt;lidar&gt;&lt;c++&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19687" PostTypeId="2" ParentId="19676" CreationDate="2019-11-03T21:12:15.370" Score="0" Body="&lt;p&gt;Use gears, adding second one will increase the torque, but it's better to have 1 motor instead of 2. You can also add a gt2 pulley that increases torque decreasing speed. Replacing this motor with a stronger one will also help. If your motor's max speed is too high, I recommend gears or a pulley, so speed won't be too high.&lt;/p&gt;&#xA;" OwnerUserId="23539" LastActivityDate="2019-11-03T21:12:15.370" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19688" PostTypeId="2" ParentId="19676" CreationDate="2019-11-03T21:37:41.870" Score="0" Body="&lt;p&gt;If I understand correctly, your motors do not have enough torque for the given mass distribution in the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are a few suggestions to handle the issue&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Use two motors at joints closed to the base that observe the maximum torque. (I would suggest doing some calculations about maximum torque requirements doubling up the motors). However, there would be challenges with synchronizing the two motors&lt;/li&gt;&#xA;&lt;li&gt;You can use gears or pulleys or belt mechanisms and shift the motors towards the base of the robot, but they would have slippage and backlash issues. They might also result in speed reduction.&lt;/li&gt;&#xA;&lt;li&gt;If you have electronics or other mountings increasing the weight of the links, you could shift them closer to the base to reduce torque requirements.&lt;/li&gt;&#xA;&lt;li&gt;The best approach would be to use new motors with sufficient torques assumed to be efficient at no more than 80% of the catalog rating.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="18572" LastActivityDate="2019-11-03T21:37:41.870" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19690" PostTypeId="1" CreationDate="2019-11-04T12:16:05.387" Score="0" ViewCount="22" Body="&lt;p&gt;I have been trying to use cumtrapz function to integrate velocity at a given time interval to get the position. However, it keeps giving me zero position at the beginning and end of the iteration, which is not what I expect.&#xA;Can anyone help? &#xA;Thank you &lt;/p&gt;&#xA;" OwnerUserId="22888" LastActivityDate="2019-11-04T12:16:05.387" Title="why cumtrapz integrator always return zero?" Tags="&lt;matlab&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19692" PostTypeId="2" ParentId="19676" CreationDate="2019-11-04T13:25:02.200" Score="0" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;The robot arm is approximately 8 kgs and is lifting a weight of 12 grams (reach=1 m).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Another solution would be to design the arm to be much lighter. 12 grams does not require an 8kg arm to hold it one metre away. For example, a 30mm carbon fibre tube one metre long weighs 200g, adding a couple of pivots and rods for actuation should still be under half a kilo.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, the highest rating for a maxon gearmotor in &lt;a href=&quot;https://www.maxongroup.co.uk/maxon/view/catalog?etcc_med=ID%20Teaser&amp;amp;etcc_cmp=ID-Teaser-Rebrush-Homepage&amp;amp;etcc_cu=onsite&amp;amp;etcc_var=%5Buk%5D%23en%23_d_&amp;amp;etcc_plc=home&quot; rel=&quot;nofollow noreferrer&quot;&gt;this list&lt;/a&gt; is 120Nm, which would lift your original arm, but the smaller ones are cheaper.&lt;/p&gt;&#xA;" OwnerUserId="1321" LastActivityDate="2019-11-04T13:25:02.200" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19693" PostTypeId="1" CreationDate="2019-11-04T20:14:03.100" Score="1" ViewCount="24" Body="&lt;p&gt;I am trying to implement a &lt;strong&gt;hybrid Force/Motion controller&lt;/strong&gt; for a quadruped. To do that I first need the &lt;strong&gt;Inverse Dynamic Model&lt;/strong&gt; of the robot in &lt;strong&gt;Operational Space&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found a lot of resources on how to create the controller but I cannot find any algorithm to compute the &lt;strong&gt;Inverse Dynamic Model&lt;/strong&gt; of the robot in &lt;strong&gt;Operational Space&lt;/strong&gt;. &#xA;Can you point me to some articles or books ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cheers,&#xA;Titouan&lt;/p&gt;&#xA;" OwnerUserId="23605" LastEditorUserId="23605" LastEditDate="2019-11-04T23:44:29.233" LastActivityDate="2019-11-04T23:44:29.233" Title="Determination of the operational space dynamic model (Task space)" Tags="&lt;dynamics&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19694" PostTypeId="1" CreationDate="2019-11-04T22:05:46.503" Score="0" ViewCount="29" Body="&lt;p&gt;I am writing code in RobotC, (natural language PLTW) and what I want is this robot to go forward, then if it &quot;sees&quot; an obstacle, to reverse, turning on an LED (sort of an indicator light) until the obstacle is far enough away and then pick a random direction to try going forward again, lighting another LED (again, an indicator). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I had the code sort of working before, and I feel like I messed it up somehow. This is what I have so far. What's happening is as I run the debugger I can see the code looping back to the first while statement, but the wheels aren't even moving. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was suggested I use state machines but I am new to RobotC and am not quite clear on how that would get set up. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In any case this is the code I have. Any assistance would be appreciated; I feel like there is some elementary error I am making. (Honestly I always have trouble with code that doesn't allow anything like the old GOTO statements from BASIC all those years back). &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#pragma config(Sensor, dgtl3,  bumpSwitch,     sensorTouch)&#xA;#pragma config(Sensor, dgtl4,  greenlight,     sensorLEDtoVCC)&#xA;#pragma config(Sensor, dgtl5,  yellowlight,    sensorLEDtoVCC)&#xA;#pragma config(Sensor, dgtl6,  redlight,       sensorLEDtoVCC)&#xA;#pragma config(Sensor, dgtl9,  ultrasonic,     sensorSONAR_cm)&#xA;#pragma config(Motor,  port1,           leftMotor,     tmotorVex393_HBridge, openLoop)&#xA;#pragma config(Motor,  port10,          rightMotor,    tmotorVex393_HBridge, openLoop)&#xA;//*!!Code automatically generated by 'ROBOTC' configuration wizard               !!*//&#xA;&#xA;task main()&#xA;&#xA;{int direction; //introduce variable &quot;direction&quot;&#xA;    direction = 0; // set the variable to zero&#xA;    repeat(forever)&#xA;&#xA;    {turnLEDOff(dgtl4);&#xA;        turnLEDOff(dgtl5);&#xA;        turnLEDOff(dgtl6);&#xA;        stopMotor(leftMotor);&#xA;        stopMotor(rightMotor);&#xA;            while (true)&#xA;        {if (SensorValue(ultrasonic)&amp;gt;25)&#xA;        {turnLEDOn(dgtl6);&#xA;        startMotor(leftMotor,60); //start moving forward&#xA;        startMotor(rightMotor,60);}&#xA;        else &#xA;        {stopMotor(rightMotor);&#xA;        stopMotor(leftMotor);&#xA;        turnLEDOn(dgtl4);&#xA;        while(SensorValue(ultrasonic)&amp;lt;25)&#xA;        {&#xA;        startMotor(leftMotor,-:);&#xA;        startMotor(rightMotor,-20);&#xA;        }&#xA;&#xA;    direction = random(2);&#xA;        if (direction == 0)&#xA;        {turnLEDOn(dgtl5)&#xA;        stopMotor(leftMotor);&#xA;        stopMotor(rightMotor);&#xA;        startMotor(leftMotor,-10);&#xA;        startMotor(rightMotor,10);&#xA;        wait(1.5);}&#xA;        else&#xA;            {&#xA;        stopMotor(leftMotor);&#xA;        stopMotor(rightMotor);&#xA;        startMotor(leftMotor,10);&#xA;        startMotor(rightMotor,-10);&#xA;        wait(1.5);}}&#xA;        turnLEDOff(dgtl4);&#xA;        startMotor(leftMotor,60);&#xA;        startMotor(rightMotor,60);&#xA;&#xA;}}}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="24117" LastActivityDate="2019-11-04T22:05:46.503" Title="Using RobotC, trying to find why code seems to loop oddly" Tags="&lt;robotc&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19695" PostTypeId="1" CreationDate="2019-11-05T06:37:55.840" Score="0" ViewCount="88" Body="&lt;p&gt;If robot has &lt;strong&gt;&lt;em&gt;parallel joint axes&lt;/em&gt;&lt;/strong&gt;,the D-H parameters are not unique.So what can we do to deal with this problem? It is very nice for you to answer or recommend some paper and books.&#xA;Thank you~&lt;/p&gt;&#xA;" OwnerUserId="24092" LastActivityDate="2019-11-07T22:51:49.103" Title="D-H parameters for parallel joint axes" Tags="&lt;robotic-arm&gt;&lt;dh-parameters&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19696" PostTypeId="2" ParentId="19686" CreationDate="2019-11-05T12:00:22.963" Score="0" Body="&lt;p&gt;The times in your machines are a bit different. Even if you convert the times it is highly possible that you still have the problem of synchronizing these two topics. One way is that look at one of the topics as the main. On the other topic subscribe to the main one and change its time as the main. Or if you are working by these two in a third machine write an interface node for both and set the time as &lt;code&gt;ros::time::now()&lt;/code&gt;. &lt;/p&gt;&#xA;" OwnerUserId="23917" LastEditorUserId="23917" LastEditDate="2019-11-05T12:07:07.800" LastActivityDate="2019-11-05T12:07:07.800" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19697" PostTypeId="2" ParentId="19679" CreationDate="2019-11-05T12:06:33.983" Score="0" Body="&lt;p&gt;If I understand your question completely it is easy! You are using Kinect, so you have direct distance between the Kinect mounted on your robot and the faces. If you get the robot starting point as &lt;code&gt;(0,0,0)&lt;/code&gt; you can find the coordinates based on the distance and the rotation angle of the robot when it finds each faces. &lt;/p&gt;&#xA;" OwnerUserId="23917" LastActivityDate="2019-11-05T12:06:33.983" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19698" PostTypeId="1" CreationDate="2019-11-05T18:37:44.910" Score="2" ViewCount="817" Body="&lt;p&gt;I'm having some issues with a planar manipulator I have to deal with.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first two moves are rotational and the third one is a prismatic one. The shoulder and elbow move around the X-axis, while the forearm moves forward and backward a distance &quot;a&quot; (d3).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did all the direct and inverse kinematics, including the Jacobian. I think the third move around x is not done correctly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is a picture about the x-y-z-axis and the DH Table we made:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/YdErx.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/YdErx.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've seen an answer about this subject but I can't even understand that one.&#xA;On the image you can see there are my two attempts, but neither of them worked for me.&lt;/p&gt;&#xA;" OwnerUserId="24125" LastEditorUserId="37" LastEditDate="2019-11-08T12:01:32.150" LastActivityDate="2019-11-18T20:56:10.393" Title="3-RRP manipulator robot" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;inverse-kinematics&gt;&lt;manipulator&gt;&lt;dh-parameters&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19699" PostTypeId="2" ParentId="19698" CreationDate="2019-11-05T22:41:52.977" Score="1" Body="&lt;p&gt;I answered a similar question &lt;a href=&quot;https://robotics.stackexchange.com/questions/18554/dh-parameters-for-a-ppp-arm/18565#18565&quot;&gt;DH parameters for a PPP arm&lt;/a&gt;, take a look for a detailed answer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your first joint is the origin, you start the parameters by looking to the next joint. In this case, the last line of the table will give you the parameters of the transformation between the last joint and the end effector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For your RRP arm, the DH parameters would be&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Link 1: d1 = 0, alpha1 = 0, a1 = a1, theta1 = theta1 (variable) (Parameters between joint 2 and 1)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Link 2: d2 = 0, alpha2 = 0, a2 = a2, theta2 = theta2 (variable) (Parameters between joint 3 and 2)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Link 3: d3 = d3, alpha3 = 0, a3 = 0, theta3 = 0 (Parameters between endeffector and joint 3)&lt;/p&gt;&#xA;" OwnerUserId="22691" LastEditorUserId="37" LastEditDate="2019-11-08T12:03:02.010" LastActivityDate="2019-11-08T12:03:02.010" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19700" PostTypeId="1" AcceptedAnswerId="19701" CreationDate="2019-11-06T02:49:46.187" Score="0" ViewCount="70" Body="&lt;p&gt;I’m building an fpv racing drone and I accidentally ordered a 2.4ghz controller and a 5.8ghz video transmitter. Will they work together?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have 5.8ghz fpv goggles so I assume they will work.&lt;/p&gt;&#xA;" OwnerUserId="24128" LastActivityDate="2019-11-06T08:38:23.067" Title="Will a 2.4ghz controller work with a 5.8ghz video transmitter?" Tags="&lt;quadcopter&gt;&lt;uav&gt;&lt;multi-rotor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19701" PostTypeId="2" ParentId="19700" CreationDate="2019-11-06T08:38:23.067" Score="0" Body="&lt;p&gt;I am not sure about the details of your setup, but two devices can communicate to each other only if they use the same frequency band(s) and the same (read: matching) signal encoding.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, you can use (as example) 2.4GHz for commands and feedback and 5.8GHz for video transmission.&lt;/p&gt;&#xA;" OwnerUserId="22248" LastActivityDate="2019-11-06T08:38:23.067" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19702" PostTypeId="2" ParentId="19562" CreationDate="2019-11-06T08:41:05.003" Score="0" Body="&lt;p&gt;You could attach wires to two corners of the surface and mount two motorized spools on the robot so that the wires can be kept under tension. The distances to the two corners define the position of the robot uniquely. The design is very similar to this plotter bot: &lt;a href=&quot;https://www.youtube.com/watch?v=T0jwdrgVBBc&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=T0jwdrgVBBc&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="23196" LastActivityDate="2019-11-06T08:41:05.003" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19704" PostTypeId="1" AcceptedAnswerId="19705" CreationDate="2019-11-07T11:53:46.560" Score="0" ViewCount="53" Body="&lt;p&gt;Can I use experience in Game AI development to develop autonomous driving robots? How much similar this areas?&lt;/p&gt;&#xA;" OwnerUserId="415" LastActivityDate="2020-04-05T19:02:25.360" Title="Can I use experience in Game AI development to develop autonomous driving robots?" Tags="&lt;mobile-robot&gt;&lt;artificial-intelligence&gt;&lt;autonomous-car&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2020-04-06T00:47:12.727" ContentLicense="CC BY-SA 4.0" />
  <row Id="19705" PostTypeId="2" ParentId="19704" CreationDate="2019-11-07T14:17:24.833" Score="1" Body="&lt;p&gt;Depending on what you mean by experience...While you have been developing GameAI I assume you gained domain specific and domain independent experience:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Theoretical AI knowledge is key to all applications from Game AI to Autonomous Driving, but the knowledge has to be abstract and not domain dependent. Decision making, reinforcement learning, search, symbolic planning are all AI methods for solving domain problems, some of which can apply to autonomous driving also.&lt;/li&gt;&#xA;&lt;li&gt;Game design experience can be limitedly reused for simulation environment design for autonomous robots. &lt;/li&gt;&#xA;&lt;li&gt;Managing large datasets is a common trait for all supervised learning applications, I'd imagine there are some stricter rules for handling large datasets for autonomous driving but this experience should be domain independent.&lt;/li&gt;&#xA;&lt;li&gt;Deployment: I'd guess not, deployment for GameAI, in my opinion is very different from deployment of autonomous driving&lt;/li&gt;&#xA;&lt;li&gt;Maintenance same as deployment.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=sRxaMDDMWQQ&amp;amp;list=PLrAXtmErZgOeY0lkVCIVafdGFOTi45amq&quot; rel=&quot;nofollow noreferrer&quot;&gt;This playlist&lt;/a&gt; should give you a good intro on autonomous driving and you can see for yourself what part have you experience with already.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT:&#xA;Based on your comment below, Search algorithms using navmesh for path finding does not have much in common with autonomous driving. Steering behaviours might come in handy in for implementing driving simulation environments if they can closely reflect reality. Locomotion...again in simulated environments simulated humans have to move around somehow, but this is not directly related to autonomous driving.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2019-11-07T17:50:15.393" LastActivityDate="2019-11-07T17:50:15.393" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19706" PostTypeId="1" CreationDate="2019-11-07T20:31:40.477" Score="0" ViewCount="146" Body="&lt;p&gt;I recently &lt;a href=&quot;https://robotics.stackexchange.com/questions/19698/3-rrp-manipulator-robot&quot;&gt;asked a question&lt;/a&gt; about a 3-RRP manipulator but the only answer didn't work for my robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would describe the manipulator as an arm that rotates around the shoulder over the x-y axis, the elbow  that rotates around the x-y axis also and the forearm - hand that moves FORWARD and BACKWARDS. (check attached image for a more described explanation).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The solution I calculated cannot be correct as the &quot;hand&quot; moves up and down and not forward and backward.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried setting other values to the DH-parameters but I still think this is not the correct answer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My professor said that we are not allowed to use a structural parameter to rotates the axes and that the use of 3 rows on the DH-parameters is the correct solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've been trying to get this for almost 1 week now and seems impossible to me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the image you can see some of my attempts to solve this problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/3Xifn.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3Xifnl.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A detailed answer with the reason for the values of the DH-parameters would be awesome.&lt;/p&gt;&#xA;" OwnerUserId="24125" LastEditorUserId="37" LastEditDate="2019-11-08T12:10:48.277" LastActivityDate="2021-04-12T01:02:25.193" Title="Robotic Manipulator 3-RRP v2" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;inverse-kinematics&gt;&lt;manipulator&gt;&lt;dh-parameters&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19707" PostTypeId="2" ParentId="19695" CreationDate="2019-11-07T22:51:49.103" Score="1" Body="&lt;p&gt;This is an overview of the DH Convention, there is a piece where they discuss having parallel joint axis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=nuB_7BkYNMk&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=nuB_7BkYNMk&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IMO I believe that it is best to choose your parameters for that axis in the best way to get to the next joint, or one that represents the physical bodies best. If you choose a solution that makes it difficult to make the next set of parameters, you're causing headache for yourself in the future. Let me know if that helps.&lt;/p&gt;&#xA;" OwnerUserId="24139" LastActivityDate="2019-11-07T22:51:49.103" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19709" PostTypeId="1" CreationDate="2019-11-09T06:07:29.743" Score="1" ViewCount="56" Body="&lt;p&gt;Almost all the information I've seen about self-balancing robots implies the use of an Arduino to implement the control. I'm wondering if it is possible to implement the control using just small or middle scale integrated circuits such as Operational Amplifiers, Multiplexors, Logic Gates, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as I know, the self-balancing robot control system is based on PID control algorithms and I've seen that it is possible to implement an integrator and a differentiator using Operational Amplifiers, is it achievable to make a PID controller for the self-balancing robot using this? Any suggestions on how to?&lt;/p&gt;&#xA;" OwnerUserId="24143" LastEditorUserId="24143" LastEditDate="2019-11-09T06:18:56.667" LastActivityDate="2019-11-09T06:18:56.667" Title="Is it possible to make a self balancing robot using small or medium scale integrated circuits?" Tags="&lt;control&gt;&lt;pid&gt;" AnswerCount="0" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="19710" PostTypeId="1" AcceptedAnswerId="19767" CreationDate="2019-11-09T08:50:31.837" Score="1" ViewCount="260" Body="&lt;p&gt;I am building an fpv racing quad I encountered the following problem:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a Racerstar StarF4s 30A esc and flight controller combo and a Flysky 2.4ghz iA6B receiver how and where do I connect these together?&lt;/p&gt;&#xA;" OwnerUserId="24128" LastActivityDate="2020-02-29T23:56:03.083" Title="How to attach flysky receiver to racerstar all in one esc and flight controller?" Tags="&lt;quadcopter&gt;&lt;esc&gt;&lt;multi-rotor&gt;&lt;flight-controller&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="19713" PostTypeId="1" CreationDate="2019-11-10T11:55:41.533" Score="0" ViewCount="30" Body="&lt;p&gt;I am reading the paper titled &lt;a href=&quot;http://people.inf.ethz.ch/pomarc/pubs/GallupCVPR08.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Variable Baseline/Resolution Stereo&lt;/a&gt; &lt;sup&gt;David Gallup, Jan-Michael Frahm, Philippos Mordohai, Marc Pollefeys&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Section 3 of the paper talks about the &lt;strong&gt;time complexity&lt;/strong&gt; of the standard stereo, within it, subsection for &lt;strong&gt;fixed baseline&lt;/strong&gt; case says the following &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In stereo, each pixel must be tested against the pixels along the corresponding epipolar line within the disparity range of the scene. Because the depthrange is defined by the scene, the disparity range is some fraction of the image width, and thus increases with resolution. Letting &lt;span class=&quot;math-container&quot;&gt;$D$&lt;/span&gt; be the ratio of the disparity range to the image width (&lt;span class=&quot;math-container&quot;&gt;$w$&lt;/span&gt;), the number of pixel comparisons needed is&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$T_{fixed} = D~w^2~h = \frac{D~w^3}{a}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here, symbol &lt;span class=&quot;math-container&quot;&gt;$a$&lt;/span&gt; is the aspect ratio and &lt;span class=&quot;math-container&quot;&gt;$h$&lt;/span&gt; is the height of the image (&lt;span class=&quot;math-container&quot;&gt;$h = {w}/{a}$&lt;/span&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We know that the search for correspondence is restricted to epipolar line and thus actual number of comparisons should be way lower than the number given above.&lt;br&gt;&#xA;OR&lt;br&gt;&#xA;&lt;strong&gt;I am missing something?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="23497" LastActivityDate="2020-08-06T21:01:05.063" Title="Number of pixel comparison needed to establish correspondence" Tags="&lt;stereo-vision&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19714" PostTypeId="1" AcceptedAnswerId="19750" CreationDate="2019-11-10T15:33:43.277" Score="3" ViewCount="165" Body="&lt;p&gt;I'm currently struggling with implementing the Multiplicative Kalman Filter or Error State Kalman Filter as described by Landis Markley in &lt;em&gt;Attitude Error Representations for Kalman Filtering&lt;/em&gt;. Sadly there is two versions of almost the same paper online:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/20020060647.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;at nasa.gov&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.researchgate.net/publication/245432681_Attitude_Error_Representations_for_Kalman_Filtering&quot; rel=&quot;nofollow noreferrer&quot;&gt;at ResearchGate&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;First of all, I'm a little bit confused why eq. 45 in &lt;a href=&quot;https://ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/20020060647.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;1&lt;/a&gt; is different from eq. 33 in &lt;a href=&quot;https://www.researchgate.net/publication/245432681_Attitude_Error_Representations_for_Kalman_Filtering&quot; rel=&quot;nofollow noreferrer&quot;&gt;2&lt;/a&gt;. Which one is correct? Usually the covariance propagation is defined as &lt;span class=&quot;math-container&quot;&gt;$P = FPF^T + GQG^T$&lt;/span&gt;. What is the reason for using &lt;span class=&quot;math-container&quot;&gt;$P = FP + PF^T + GQG^T$&lt;/span&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the paper Markley just filters the attitude error and the gyro drift. I would also like to have the angular velocity and acceleration as part of the state. If I understand it right, Markley integrates gyro measurements in the predict step. At the moment I'm trying to figure out the correct way of having the angular velocity as part of the state and then performing a separate update step for the gyroscope.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Currently I have the following code:&lt;/p&gt;&#xA;&#xA;&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;import numpy as np&#xA;&#xA;class ESKF:&#xA;    &quot;&quot;&quot;This is an Error State Kalman Filter (ESKF) as described by Markley&#xA;    see https://www.researchgate.net/publication/245432681_Attitude_Error_Representations_for_Kalman_Filtering&#xA;&#xA;    &quot;&quot;&quot;&#xA;&#xA;    def __init__(self):&#xA;        # 3 x attitude error, 3 x gyro bias, 3 x angular velocity&#xA;        self.x = np.zeros(9)&#xA;        # reference quaternion&#xA;        self.qref = np.array([0.0, 0.0, 0.0, 1.0])&#xA;        # state covariance&#xA;        self.P = np.identity(9)&#xA;        # process noise&#xA;        self.Q = np.identity(9) * 0.01 # TODO should be determined by tests&#xA;        # sensor noise&#xA;        self.R_gyr = np.identity(3) * 0.01 # TODO should be determined for sensor&#xA;        self.R_acc = np.identity(3) * 0.01 # TODO should be determined for sensor&#xA;        self.R_mag = np.identity(3) * 0.01 # TODO should be determined for sensor&#xA;&#xA;    #TODO initialization&#xA;&#xA;    def predict(self, dt):&#xA;        &quot;&quot;&quot;The ESKF predict step&#xA;&#xA;        Parameters&#xA;        ----------&#xA;        dt : float&#xA;             The time step in s&#xA;&#xA;        &quot;&quot;&quot;&#xA;        # eq. 23&#xA;        self.qref += 0.5 * quat_mult(np.array([self.x[6], self.x[7], self.x[8], 0]), self.qref) * dt&#xA;        # normalize to compensate numerical errors&#xA;        self.qref /= np.linalg.norm(self.qref)&#xA;&#xA;        # eq. 38&#xA;        F = np.zeros((9,9))&#xA;        # df/da&#xA;        F[0:3,0:3] = - vec_to_cross_matrix(self.x[6:9])&#xA;        # df/db&#xA;        F[0:3,3:6] = - np.identity(3)&#xA;        # df/dw&#xA;        F[0:3,6:9] = vec_to_cross_matrix(self.x[0:3])&#xA;&#xA;        #eq. 39&#xA;        G = np.zeros((9,9))&#xA;        G[0:3,0:3] = -np.identity(3)&#xA;        G[3:6,3:6] = np.identity(3)&#xA;        G[6:9,6:9] = np.identity(3)&#xA;&#xA;        # eq. 33&#xA;        self.P = F @ self.P + self.P @ F.T + G @ self.Q @ G.T&#xA;        #self.P = F @ self.P @ F.T + G @ self.Q @ G.T&#xA;&#xA;    def update_gyro(self, z):&#xA;        &quot;&quot;&quot;The ESKF update step for a gyrosope&#xA;&#xA;        Parameters&#xA;        ----------&#xA;        z : array, shape [3]&#xA;            Sensor measurement with structure [x, y, z]&#xA;&#xA;        &quot;&quot;&quot;&#xA;        # Kalman Gain&#xA;        # K = np.zeros((3,3))&#xA;        H = np.zeros((3,6))&#xA;        # expected measurement is angular velocity + gyro drift&#xA;        H[0:3,0:3] = np.identity(3)&#xA;        H[0:3,3:6] = np.identity(3)&#xA;        # K = P * H' (H * P * H' + R)^-&#xA;        K = self.P[3:9,3:9] @ H.T @ np.linalg.inv(H @ self.P[3:9,3:9] @ H.T + self.R_gyr)&#xA;        # x = x + K * (z - H * x)&#xA;        self.x[3:9] += K @ (z - H @ self.x[3:9])&#xA;&#xA;        # P = (I - KH)P&#xA;        IKH = np.identity(6) - K @ H&#xA;        self.P[3:9,3:9] = IKH @ self.P[3:9,3:9]&#xA;&#xA;    def update_acc(self, z):&#xA;        &quot;&quot;&quot;The ESKF update step for an accelerometer&#xA;&#xA;        Parameters&#xA;        ----------&#xA;        z : array, shape [3]&#xA;            Sensor measurement with structure [x, y, z]&#xA;&#xA;        &quot;&quot;&quot;&#xA;        vi = np.array([0, 0, -9.81]) # TODO + acc&#xA;        # eq. 42&#xA;        vb_pred = rotvec_to_mat(self.x[0:3]) @ quat_to_mat(self.qref) @ vi&#xA;&#xA;        # h(v) = v&#xA;        h = vb_pred&#xA;        # Ha&#xA;        # eq. 44&#xA;        Ha = vec_to_cross_matrix(vb_pred)&#xA;        #eq. 46&#xA;        K = self.P[0:6,0:3] @ Ha.T @ np.linalg.inv(Ha @ self.P[0:3,0:3] @ Ha.T + self.R_acc)&#xA;&#xA;        # eq. 47&#xA;        self.x[0:6] += K @ (z - h - Ha @ self.x[0:3])&#xA;        # eq. 48&#xA;        self.P[0:6,0:6] -= K @ Ha @ self.P[0:3,0:6]&#xA;&#xA;    def update_mag(self, z, B, incl, W, V):&#xA;        &quot;&quot;&quot;The ESKF update step for a magnetometer&#xA;        see https://www.nxp.com/docs/en/application-note/AN4246.pdf&#xA;&#xA;        Parameters&#xA;        ----------&#xA;        z : array, shape [3]&#xA;            Sensor measurement with structure [x, y, z]&#xA;        B : float&#xA;            The geomagnetic field strength in gauss&#xA;        incl : float&#xA;               The inclination angle in rad&#xA;        W : array, shape [3,3]&#xA;            The soft-iron distortion&#xA;        V : array, shape [3]&#xA;            The hard-iron distortion&#xA;&#xA;        &quot;&quot;&quot;&#xA;        vi = B * np.array([np.cos(incl), 0, -np.sin(incl)])&#xA;        # eq. 42&#xA;        vb_pred = rotvec_to_mat(self.x[0:3]) @ quat_to_mat(self.qref) @ vi&#xA;&#xA;        #h(v) = W * v + V &#xA;        h = W @ vb_pred + V&#xA;        # Ha&#xA;        # eq. 44&#xA;        Ha = W @ vec_to_cross_matrix(vb_pred)&#xA;        #eq. 46&#xA;        K = self.P[0:6,0:3] @ Ha.T @ np.linalg.inv(Ha @ self.P[0:3,0:3] @ Ha.T + self.R_mag)&#xA;&#xA;        # eq. 47&#xA;        self.x[0:6] += K @ (z - h - Ha @ self.x[0:3])&#xA;        # eq. 48&#xA;        self.P[0:6,0:6] -= K @ Ha @ self.P[0:3,0:6]&#xA;&#xA;    def reset(self):&#xA;        &quot;&quot;&quot;The ESKF reset step&#xA;&#xA;        &quot;&quot;&quot;&#xA;        # eq. 14&#xA;        self.qref = quat_mult(gibbs_vec_to_quat(self.x[0:3]), self.qref)&#xA;        self.x[0:3] = np.zeros(3)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and some helpers defined the following:&lt;/p&gt;&#xA;&#xA;&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;def quat_mult(a, b):&#xA;    &quot;&quot;&quot;Multiply 2 quaternions. They should have the structure [v1, v2, v3, w]&#xA;&#xA;    Parameters&#xA;    ----------&#xA;    a : array, shape [4]&#xA;        Quaternion 1&#xA;    b : array, shape [4]&#xA;        Quaternion 2&#xA;&#xA;    Returns&#xA;    -------&#xA;    q : array, shape [4]&#xA;        Quaternion product of a and b&#xA;&#xA;    &quot;&quot;&quot;&#xA;    # eq. 6&#xA;    v = a[3] * b[0:3] + b[3] * a[0:3] - np.cross(a[0:3], b[0:3])&#xA;    w = a[3] * b[3] - a[0:3].T @ b[0:3]&#xA;    return np.array([ v[0], v[1], v[2], w ])&#xA;&#xA;def vec_to_cross_matrix(a):&#xA;    &quot;&quot;&quot;Constructs the skew symmetric cross product matrix of a&#xA;&#xA;    Parameters&#xA;    ----------&#xA;    a : array, shape [3]&#xA;        Vector&#xA;&#xA;    Returns&#xA;    -------&#xA;    M : array, shape [3,3]&#xA;        Cross product matrix of a&#xA;&#xA;    &quot;&quot;&quot;&#xA;    # eq. 5&#xA;    return np.array([[0, -a[2], a[1]], [a[2], 0, -a[0]], [-a[1], a[0], 0]])&#xA;&#xA;def quat_to_mat(a):&#xA;    &quot;&quot;&quot;Converts a quaternion into a rotation matrix&#xA;&#xA;    Parameters&#xA;    ----------&#xA;    a : array, shape [4]&#xA;        Quaternion &#xA;&#xA;    Returns&#xA;    -------&#xA;    M : array, shape [3,3]&#xA;        The rotation matrix of a&#xA;&#xA;    &quot;&quot;&quot;&#xA;    # eq. 4&#xA;    return (a[3]**2 - a[0]**2 - a[1]**2 - a[2]**2) * np.identity(3) - 2 * a[3] * vec_to_cross_matrix(a[0:3]) + 2 * a[0:3] @ a[0:3].T&#xA;&#xA;def rotvec_to_mat(a):&#xA;    &quot;&quot;&quot;Converts a rotation vector into a rotation matrix&#xA;&#xA;    Parameters&#xA;    ----------&#xA;    a : array, shape [3]&#xA;        Rotation vector&#xA;&#xA;    Returns&#xA;    -------&#xA;    M : array, shape [3,3]&#xA;        The rotation matrix of a&#xA;&#xA;    &quot;&quot;&quot;&#xA;    # eq. 20&#xA;    a_norm_sqr = a[0]**2 + a[1]**2 + a[2]**2&#xA;    return np.identity(3) - vec_to_cross_matrix(a) - 0.5 * (a_norm_sqr * np.identity(3) - a @ a.T)&#xA;&#xA;def gibbs_vec_to_quat(a):&#xA;    &quot;&quot;&quot;Converts a gibbs vector into a quaternion&#xA;&#xA;    Parameters&#xA;    ----------&#xA;    a : array, shape [3]&#xA;        Gibbs vector&#xA;&#xA;    Returns&#xA;    -------&#xA;    q : array, shape [4]&#xA;        The quaternion of a with structure [v1, v2, v3, w]&#xA;&#xA;    &quot;&quot;&quot;&#xA;    # eq. 18b&#xA;    a_norm_sqr = a[0]**2 + a[1]**2 + a[2]**2&#xA;    return (1 / np.sqrt(4 + a_norm_sqr)) * np.concatenate((a, [2]))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Obviously, the angular velocity and the gyro drift always have the same values. Is it worth to keep both in the state, or should I just abandon the gyro drift?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also miss one step in the derivation of eq. 43 in &lt;a href=&quot;https://www.researchgate.net/publication/245432681_Attitude_Error_Representations_for_Kalman_Filtering&quot; rel=&quot;nofollow noreferrer&quot;&gt;2&lt;/a&gt;. Let &lt;span class=&quot;math-container&quot;&gt;$A(a) = \{ I_{3 \times 3} - [\mathbf{a} \times] - \frac{1}{2} ( a^2 I_{3 \times 3} - \mathbf{a}\mathbf{a}^T ) \}$&lt;/span&gt;. Then the Taylor expansion is &lt;span class=&quot;math-container&quot;&gt;$h(v_B) = h(\bar{v}_B) + \frac{\delta h}{\delta v} |_{\bar{v}_B} (A(a) - I_{3 \times 3}) \bar{v}_B$&lt;/span&gt; since &lt;span class=&quot;math-container&quot;&gt;$v_B = A(a)A(q_{ref})v_I = A(a)\bar{v}_B$&lt;/span&gt;. But how is this collapsed too just &lt;span class=&quot;math-container&quot;&gt;$[\mathbf{a} \times] \bar{v}_B$&lt;/span&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I let &lt;span class=&quot;math-container&quot;&gt;$v_I = (\begin{smallmatrix} 0 &amp;amp; 0 &amp;amp; -9.81 \end{smallmatrix})^T + (\begin{smallmatrix} accx &amp;amp; accy &amp;amp; accz \end{smallmatrix})^T$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$acc$&lt;/span&gt; is part of my state, then I also have to include &lt;span class=&quot;math-container&quot;&gt;$\frac{\delta h}{\delta acc}$&lt;/span&gt; to &lt;span class=&quot;math-container&quot;&gt;$H$&lt;/span&gt; (eq. 45 in &lt;a href=&quot;https://www.researchgate.net/publication/245432681_Attitude_Error_Representations_for_Kalman_Filtering&quot; rel=&quot;nofollow noreferrer&quot;&gt;2&lt;/a&gt;), right? Taking this derivative looks fairly complicated. Is there a smarter way doing it? &lt;strong&gt;EDIT&lt;/strong&gt;: It's not, it's just &lt;span class=&quot;math-container&quot;&gt;$\frac{\delta h}{\delta v} A(a) A(q_{ref})$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance,&#xA;Martin&lt;/p&gt;&#xA;" OwnerUserId="24152" LastEditorUserId="24152" LastEditDate="2019-11-12T08:09:31.860" LastActivityDate="2019-11-18T16:18:47.020" Title="Implementing ESKF" Tags="&lt;kalman-filter&gt;&lt;ekf&gt;&lt;sensor-fusion&gt;&lt;filter&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19715" PostTypeId="2" ParentId="19713" CreationDate="2019-11-10T18:26:15.633" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I am missing something?  &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Indeed, the context is &lt;strong&gt;standard stereo&lt;/strong&gt; and &lt;strong&gt;(all) pixel comparisons&lt;/strong&gt; (&lt;span class=&quot;math-container&quot;&gt;$w\times h$&lt;/span&gt;). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a rectified image, the epipolar line can be typically be about the width of the image. Thus the search range would be &lt;span class=&quot;math-container&quot;&gt;$D\times w$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus total number of comparisons = &lt;span class=&quot;math-container&quot;&gt;$D\times w \times wh$&lt;/span&gt;. &lt;/p&gt;&#xA;" OwnerUserId="23497" LastActivityDate="2019-11-10T18:26:15.633" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19716" PostTypeId="2" ParentId="19590" CreationDate="2019-11-11T05:18:39.730" Score="0" Body="&lt;p&gt;You can first map the room using any of the mapping or explorer packages on ros.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Save the map.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Use OpenCV to detect walls and corners in the map.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Extract these pixel coordinates to send navigation goals using move_base on ROS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;You won't necessarily need ultrasonic for the purpose, just having the lidar can do the job, but it might be a good addition to avoid accidentally bumping into the wall.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="13969" LastActivityDate="2019-11-11T05:18:39.730" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19718" PostTypeId="1" AcceptedAnswerId="19881" CreationDate="2019-11-12T18:45:39.633" Score="2" ViewCount="29" Body="&lt;p&gt;What is the difference between using 1 Camera and a Projector and using 2 Cameras and a Projector for creating structure from motion?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it that if we use only 1 camera and a projector then we will have to move around the camera to create a stereo pair? But if we use 2 cameras and a projector then we can just get the stereo pairs at once? (1 image from 1 camera, and 1 from another)&lt;/p&gt;&#xA;" OwnerUserId="24163" LastActivityDate="2020-03-17T18:12:15.797" Title="Active Light Stereopsis: 1 Camera + Projector Vs. 2 Camera + Projector" Tags="&lt;computer-vision&gt;&lt;stereo-vision&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19720" PostTypeId="1" CreationDate="2019-11-13T02:02:29.430" Score="0" ViewCount="14" Body="&lt;p&gt;I noticed something odd when I tried to loop a claw so it would just open and close (eventually I want to have it just open when the ultrasonic sensor detects something in front of it and close a second or so later). Anyhow, when I tried a loop using the setServo command it loops, but the claw opens less and less each time -- the first time it opens fully, then after three iterations a little less, and so on until it hardly opens at all. I added a motor command line and that seemed to solve it, but it seems a kludgy workaround and I wondered if it was a misuse of the setServo command on a VEX 393 motor, which is what VEX is using on the claw assemblies. In any case, this is the code I used &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#pragma config(Motor,  port1,           claw2,         tmotorVex393_HBridge, openLoop)&#xA;//*!!Code automatically generated by 'ROBOTC' configuration wizard               !!*//&#xA;&#xA;task main()&#xA;{repeat(forever)&#xA;{setServo();&#xA;wait(1);&#xA;setServo(port1, -127);&#xA;wait(1);&#xA;setServo();&#xA;setServo(port1, 127);&#xA;}}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Anyhow if there's anything weird about this code and someone could let me know... I suspect the issue is something simple that I am not seeing and thanks in advance.&lt;/p&gt;&#xA;" OwnerUserId="24117" LastActivityDate="2019-11-13T02:02:29.430" Title="Strange behavior from VEX claw assembly using servo command" Tags="&lt;robotc&gt;&lt;vex&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19724" PostTypeId="1" CreationDate="2019-11-13T07:48:36.170" Score="0" ViewCount="26" Body="&lt;p&gt;I'm reading how the optical flow of my quadcopter works. The output of the optical flow that interests me is the linear (horizontal) velocity: &lt;span class=&quot;math-container&quot;&gt;$v_x$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$v_y$&lt;/span&gt;. &lt;a href=&quot;http://web.lums.edu.pk/~akn/Files/Other/teaching/mobile%20robotics/spring2017/labs/LabLecture5%20ARDrone%20Sensor%20Fusion.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here&lt;/a&gt; (page 10) it says that it fuses the IMU information with the camera images to do that, and the algorithm used is Optical Flow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I investigate about optical flow, &lt;a href=&quot;https://fenix.tecnico.ulisboa.pt/downloadFile/1970719973965868/Thesis.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;it&lt;/a&gt; says that the algorithm uses the angular velocity from the IMU and explains how to fuse it with the camera. But the angular velocity is given by the gyroscope, so why do I need an accelerometer?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do you know where the fusion between gyroscope, accelerometer to obtain the angular velocity (or whatever the Optical Flow algorithm uses) is better explained?&lt;/p&gt;&#xA;" OwnerUserId="23438" LastActivityDate="2019-11-14T00:32:16.377" Title="Optical flow inputs" Tags="&lt;quadcopter&gt;&lt;imu&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19725" PostTypeId="1" CreationDate="2019-11-13T09:17:52.260" Score="1" ViewCount="20" Body="&lt;p&gt;I can't understand the content from the book &quot;Robotics Modelling, Planning and Control&quot;, page 151. Suppose that there is a manipulator which has a closed chain. And Let &lt;span class=&quot;math-container&quot;&gt;$\textbf{q}_a$&lt;/span&gt; actuated joint variables, and &lt;span class=&quot;math-container&quot;&gt;$\textbf{q}_u$&lt;/span&gt; unactuated joint variables. And &lt;span class=&quot;math-container&quot;&gt;$\textbf{q}_o=[\textbf{q}_a^T\text{ }\textbf{q}_u^T]^T$&lt;/span&gt;. If there is a function relationship between &lt;span class=&quot;math-container&quot;&gt;$\textbf{q}_u$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\textbf{q}_u$&lt;/span&gt; such that &lt;span class=&quot;math-container&quot;&gt;$\textbf{q}_u=\textbf{q}_u(\textbf{q}_a)$&lt;/span&gt;, there is a relationship below this text :&lt;br&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$\dot{\textbf{q}}_o={\boldsymbol{\gamma}\dot{\mathbf{q}_a}}$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$\boldsymbol{\gamma} = \begin{bmatrix}\mathbf{I}&#xA; \\\frac{\partial \mathbf{q}_u}{\partial \mathbf{q}_a} \end{bmatrix}$$&lt;/span&gt;&#xA;I understand what it means. But I don't know why the relationship below this text makes sense :&lt;br&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$\boldsymbol{\tau}_a = \boldsymbol{\gamma}^T \boldsymbol{\tau}_o $$&lt;/span&gt;&lt;br&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$\boldsymbol{\tau}_a$&lt;/span&gt; is torques of actuated joints, and &lt;span class=&quot;math-container&quot;&gt;$\boldsymbol{\tau}_o$&lt;/span&gt; is torques of unactuated joints. The book explains it is intuitive, but I want to know why it is true theorically.&lt;/p&gt;&#xA;" OwnerUserId="21562" LastActivityDate="2019-11-13T09:17:52.260" Title="About kineto-statics duality of the closed chain" Tags="&lt;kinematics&gt;" AnswerCount="0" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19726" PostTypeId="2" ParentId="12541" CreationDate="2019-11-13T12:38:51.320" Score="0" Body="&lt;p&gt;If robots in this case refer to an industrial robot:&#xA;An industrial robots are in most cases integrated into a manufacturing cell or manufacturing line. Industrial robots do not have databases in the classical sense, but they do store persistent data (in files) like configuration files, application program. etc. This is data related strictly to the robot and not to the process the robot caries out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Data related to the (manufacturing) process the robot helps to carry out is end up in a database. Usually a supervisory system (SCADA, MES or ERP) has a database (usually SQL) in which all process related data is stored in a centralized manner. In industrial practice the robot does not directly initiate database transactions, there is at least one other software layer between the robot and any database (as part of the SCADA, MES or ERP systems). &lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2019-11-13T12:38:51.320" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19727" PostTypeId="1" CreationDate="2019-11-13T19:54:51.067" Score="0" ViewCount="170" Body="&lt;p&gt;I intend to find the center of mass of a quadruped robot and find the convex of the CoM inside the support polygon. I want to make a model of this, which is further going to help me develop stable gaits for the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know of this formula &lt;span class=&quot;math-container&quot;&gt;$$x_{cm} = \frac{\sum_{i=1}^{N}m_ix_i}{M}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where &lt;span class=&quot;math-container&quot;&gt;$M$&lt;/span&gt; is the total mass, &lt;span class=&quot;math-container&quot;&gt;$m_i$&lt;/span&gt; is the mass of each link. I'm confused of what &lt;span class=&quot;math-container&quot;&gt;$x_i$&lt;/span&gt; really is. Is this the distance of position of the link on the &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; axis?&#xA;referring to this &lt;a href=&quot;https://robotics.stackexchange.com/questions/11519/how-can-i-calculate-center-of-mass-for-each-link-of-robot&quot;&gt;here.&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can the method of double integrals for solving the center of mass be used to find the convex point in a support polygon? Taking reference to this video &lt;a href=&quot;https://www.youtube.com/watch?v=aIqJDhD785E&quot; rel=&quot;nofollow noreferrer&quot;&gt;here.&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is another post &lt;a href=&quot;https://robotics.stackexchange.com/questions/9100/finding-center-of-mass-for-humanoid-robot&quot;&gt;here, &lt;/a&gt; which explains a similar formula, what is the term &lt;span class=&quot;math-container&quot;&gt;$P_o^i$&lt;/span&gt;? ( I couldn't ask this on comments since I don't have 50 reps. ) &lt;/p&gt;&#xA;" OwnerUserId="23724" LastActivityDate="2019-11-13T22:36:46.753" Title="Finding center of mass and support polygon for quadruped robot" Tags="&lt;inverse-kinematics&gt;&lt;forward-kinematics&gt;&lt;balance&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19728" PostTypeId="2" ParentId="19727" CreationDate="2019-11-13T22:36:46.753" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;I intend to find the center of mass of a quadruped robot and find the&#xA;  convex of the CoM inside the support polygon. I want to make a model&#xA;  of this, which is further going to help me develop stable gaits for&#xA;  the robot.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The question seems wrong to me. What I think you want to do is, find the COM of the robot and convex support polygon of the robot based on the gait. If you know your COM and calculate how your COM shifts based on the gait, you can find a suitable gait. A gait is stable as long as your COM lies inside the support polygon which is the polygon with the vertices described by the position of legs in contact.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I know of this formula &lt;span class=&quot;math-container&quot;&gt;$$x_{cm} = \frac{\sum_{i=1}^{N}m_ix_i}{M}$$&lt;/span&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Where &lt;span class=&quot;math-container&quot;&gt;$M$&lt;/span&gt; is the total mass, &lt;span class=&quot;math-container&quot;&gt;$m_i$&lt;/span&gt; is the mass of each link. I'm&#xA;  confused of what &lt;span class=&quot;math-container&quot;&gt;$x_i$&lt;/span&gt; really is. Is this the distance of position of&#xA;  the link on the &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; axis?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This formula can be used when you have particles with given masses. There, &lt;span class=&quot;math-container&quot;&gt;$m_i$&lt;/span&gt; will correspond to the mass of &lt;span class=&quot;math-container&quot;&gt;$i^{th}$&lt;/span&gt; particle which is &lt;span class=&quot;math-container&quot;&gt;$x_i$&lt;/span&gt; distance away from an origin (either defined by the system or you). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In robotics, we assume links to be particles with their entire mass centered at the Center of Mass (COM).  It is easier to find the center of mass of a simple polygonal object and hence we first start with each link.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's say, the leg of the robot is defined by two links, upper and lower. The upper link of the robot is a cuboid (it is sometimes safe to assume even if the robot's leg is not perfectly cuboidal - you can assume a cuboidal hull over it) with all the vertices of the cuboid defined or measured in the world frame or another frame. If you have the robot, you can weigh each of those links or if it is in simulation you can specify the material or the inertia of these links depending on the software you are using to model your robot. Secondly, you can calculate the geometric COM of this cuboid. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note, this COM position will be in the frame of the link from where you defined the vertices. If all the links' COM was defined in different frames, you will have to find the transformation to go from one frame to another. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you do this for all the links of the robot (the legs and the chassis), you can find the overall COM of this robot with the formula you have mentioned above (again, only use it when you have all COMs in the same frame of reference).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;There is another post here, which explains a similar formula, what is&#xA;  the term Pio? ( I couldn't ask this on comments since I don't have 50&#xA;  reps. )&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$P_o^i$&lt;/span&gt; is same as &lt;span class=&quot;math-container&quot;&gt;$x_i$&lt;/span&gt; and it is defined in the earlier equation which basically finds the position of the COMs of the link in the base frame. You may need to look into transformation of frames if you don't understand that equation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was actually a very fundamental question and I would recommend you to take an introductory robotics class to understand these things in depth. A classic start could be &quot;Introduction to Robotics&quot; taught by Prof. Oussama Khatib, Faculty at Stanford. It's available on YouTube for free.&lt;/p&gt;&#xA;" OwnerUserId="24169" LastActivityDate="2019-11-13T22:36:46.753" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19729" PostTypeId="2" ParentId="19724" CreationDate="2019-11-14T00:32:16.377" Score="1" Body="&lt;p&gt;You are correct, you do not really need an accelerometer for computing optical flow - just the angular velocities along with an altitude estimate will be sufficient for computing velocities in global, metric units. For example, the commercially available &lt;a href=&quot;https://docs.px4.io/v1.9.0/en/sensor/px4flow.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;PX4Flow optical camera&lt;/a&gt; does not contain an accelerometer, only a gyroscope.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But in the case of the slides you linked to, it looks like they are estimating roll and pitch angles both from the gyroscope as well as from the accelerometer just for redundancy purposes (slides 24, 25).&lt;/p&gt;&#xA;" OwnerUserId="10310" LastActivityDate="2019-11-14T00:32:16.377" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19730" PostTypeId="2" ParentId="18166" CreationDate="2019-11-14T03:51:26.833" Score="1" Body="&lt;p&gt;You will have to specify the full quaternion in any case and that is because each w,x,y and z are a function of all the Euler angles. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some ways to get by could be:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;If you are concerned about an EKF generating noisy output in the other two angles: in the update step, you can hard code these known angles&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If you want to control just one angle: just extract one single value of this rotation (Euler angle would be your best bet) or extract the entire quaternion from this EKF and find the error with the desired angle or the quaternion. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Your desired quaternion should not be difficult to calculate since you either want the robot to be same in the other two angles or you know the desired angles already. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note : if you deal with Euler angles, you will have to be careful of the gimbal lock problem (singularity) which should not be very difficult to overcome. &lt;/p&gt;&#xA;" OwnerUserId="24169" LastActivityDate="2019-11-14T03:51:26.833" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19731" PostTypeId="1" CreationDate="2019-11-14T10:42:18.480" Score="1" ViewCount="56" Body="&lt;p&gt;I'm trying to implement an indirect kalman filter to &lt;strong&gt;estimate the pose of a differential drive robot&lt;/strong&gt; using &lt;strong&gt;gyroscope and wheel encoder&lt;/strong&gt; data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found a fiew papers &lt;em&gt;(1 - 3)&lt;/em&gt; describing this approach but am confused about one thing. The &lt;strong&gt;state-matrix&lt;/strong&gt; looks something like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/aLshD.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/aLshD.png&quot; alt=&quot;state matrix for error state of differential drive robot&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Elements of this matrix &lt;strong&gt;change over time&lt;/strong&gt; in a &lt;strong&gt;non-linear&lt;/strong&gt; fashon which seems wrong to me:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The state matrix &lt;strong&gt;should be static&lt;/strong&gt; and changing values should be encapsuled in the &lt;strong&gt;controll input&lt;/strong&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Non-linear changes&lt;/strong&gt; should only occur when using an &lt;strong&gt;EKF or UKF&lt;/strong&gt; eventhough all papers only mention Kalman Filter&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Are these two points just left out or simplified for conveniece since its obvious or am I missunderstanding something?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.sciencedirect.com/science/article/pii/S1474667017440882&quot; rel=&quot;nofollow noreferrer&quot;&gt;Dead Reckoning Navigation for Autonomous Mobile Robots&lt;/a&gt;. IFAC Proceedings Volumes. 1. March 1998;31(3):219–24. &lt;/li&gt;&#xA;&lt;li&gt;Panich. &lt;a href=&quot;https://thescipub.com/PDF/jmssp.2010.381.384.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Indirect Kalman Filter in Mobile Robot Application&lt;/a&gt;. Journal of Mathematics and Statistics. 1. August 2010;6(3):381–4. &lt;/li&gt;&#xA;&lt;li&gt;Zunaidi I, Kato N, Nomura Y, Matsui H. &lt;a href=&quot;http://www.thaiscience.info/journals/Article/CMUJ/10325060.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Positioning System for 4-Wheel Mobile Robot: Encoder, Gyro and Accelerometer Data Fusion with Error Model Method&lt;/a&gt;. 2006; &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="11419" LastEditorUserId="11419" LastEditDate="2019-11-16T14:04:36.137" LastActivityDate="2019-11-16T14:04:36.137" Title="Are Indirekt KFs with non-linear changing statematrix EKFs for the error state?" Tags="&lt;kalman-filter&gt;&lt;ekf&gt;&lt;sensor-error&gt;" AnswerCount="1" CommentCount="6" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19732" PostTypeId="1" CreationDate="2019-11-14T15:02:43.637" Score="3" ViewCount="912" Body="&lt;p&gt;I understand what six degrees of freedom is, but I encountered the term of seven degrees of freedom at multiple occasions in robotics. What does is the purpose of that extra degree of freedom?&lt;/p&gt;&#xA;" OwnerUserId="23789" LastEditorUserId="23196" LastEditDate="2019-11-15T08:33:07.633" LastActivityDate="2020-02-18T02:17:21.297" Title="What is the advantage having seven degrees of freedom in a robotic arm?" Tags="&lt;robotic-arm&gt;" AnswerCount="4" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19733" PostTypeId="2" ParentId="19732" CreationDate="2019-11-14T16:54:14.510" Score="5" Body="&lt;p&gt;I guess you are talking about robot arms with 7 DoF like the LBR IIwa from Kuka. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have 6 DoF, a given end-effector pose is only reachable in a single configuration of the robot. If you have additional joints, you can still move the arm without moving the end-effector so that for example the ellbow of the arm is not colliding with parts of the environment. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A common scenario would be to place an object into a CNC machine. Your end-effector pose is fixed, but the additional dof gives you more freedom so that your arm does not hit the doors of the machine. &lt;/p&gt;&#xA;" OwnerUserId="23196" LastActivityDate="2019-11-14T16:54:14.510" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19734" PostTypeId="2" ParentId="19731" CreationDate="2019-11-14T19:38:50.477" Score="1" Body="&lt;p&gt;I am pretty sure that what you want is an extended kalman filter since the dynamics of the robot have to be non-linear based off the state matrix you have shown.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;&lt;pre&gt;&lt;code&gt;The state matrix should be static and changing values should be encapsuled in the controll input.&#xA;Non-linear changes should only occur when using an EKF or UKF eventhough all papers only mention Kalman Filter&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You are correct on these statements. Although I could not go through 1st and 3rd paper. 2nd paper didn't have the state matrix you have pasted here.&lt;/p&gt;&#xA;" OwnerUserId="24169" LastActivityDate="2019-11-14T19:38:50.477" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19735" PostTypeId="2" ParentId="19714" CreationDate="2019-11-14T19:44:20.587" Score="-1" Body="&lt;p&gt;@fibonatic was absolutely correct in the comments about the NASA paper talking about the continuous version of it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By just one look of the equation, I could tell since all of the variables were a function of time and it is a differential equation.&lt;/p&gt;&#xA;" OwnerUserId="24169" LastActivityDate="2019-11-14T19:44:20.587" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19736" PostTypeId="2" ParentId="19732" CreationDate="2019-11-14T22:10:21.317" Score="4" Body="&lt;p&gt;Because the pose of an end effector is 6 dimensional (position(x, y,z) and orientation(ex, ey, ez)), a 6 DOF manipulator is atleast needed to achieve a desired pose. Theoretically, there can be infinite configurations of the robot to achieve the 6D pose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, lots of those configurations could have singularities or self/world collisions. There could joint position and torque limits as well, that can curtail the robot's ability to have a feasible inverse kinematics solution and achieve the pose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Additional degrees of freedom, 7 or more are usually used to overcome the limitations of a 6DOF robot. With 7 or more DOFs, the robot can handle and overcome singularities because there is a larger probability of having atleast 6 DOFs to achieve the desired pose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Null space optimization is also used here such that the system/robot has redundancy and can use the additional degrees of freedom to pursue secondary tasks like avoiding collisions, maintaining low energy and maintaining a particular elbow/shoulder/wrist configuration.&lt;/p&gt;&#xA;" OwnerUserId="18572" LastActivityDate="2019-11-14T22:10:21.317" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19737" PostTypeId="1" CreationDate="2019-11-15T20:49:23.563" Score="2" ViewCount="88" Body="&lt;p&gt;My objective is to have the arduino camera, just to act like a webcam, and have my laptop run a ball tracking script on it. The ball tracking script already works with my laptops camera, and it can also do the ball tracking overlay on a video file (.mp4). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am using an Arduino Uno with an Arducam Mini 2MP plus. Using the Arduino IDE and ArduCAM's host software, I am getting about 4-6 fps (which I am fine with). Frame rate isn't too important to me, I just want the arduino camera to act in the place of my laptop's webcam.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your help would be greatly appreciated.&lt;/p&gt;&#xA;" OwnerUserId="24176" LastActivityDate="2019-11-15T20:49:23.563" Title="How do I use the live video stream from my arduino camera (connected by serial), to run with my OpenCV python ball tracking code?" Tags="&lt;arduino&gt;&lt;opencv&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19738" PostTypeId="1" CreationDate="2019-11-15T23:11:00.060" Score="3" ViewCount="60" Body="&lt;p&gt;I am trying to measure the precision error of a gripper that is mounted to the flange of a 6 DOF industrial robot. The gripper-design is rather complex, therefore we would like to make sure it is operating precisely.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think a simple way to measure the gripper-precision is to use a camera and visual markers on a piece that is gripped. See the following illustration of the setup. The colorful box mocks a part that is being gripped by the gray gripper that is mounted to the robot flange.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/WRuK5.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/WRuK5.png&quot; alt=&quot;Position of the camera&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To get data to work with, I imagine the following procedure:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;the robot picks up part 1&lt;/li&gt;&#xA;&lt;li&gt;the robot holds the red side of the part in front of the camera, which takes a picture&lt;/li&gt;&#xA;&lt;li&gt;the robot rotates the part by actuating its 6th joint by 90 degrees, the camera takes a picture of the green side&lt;/li&gt;&#xA;&lt;li&gt;the robot rotates the part by another 90 degrees, the camera takes a picture (back side)&lt;/li&gt;&#xA;&lt;li&gt;the robot rotates the part by another 90 degrees, the camera takes a picture&lt;/li&gt;&#xA;&lt;li&gt;the robot places the part back in the nest&lt;/li&gt;&#xA;&lt;li&gt;go back to step 1, until 10 iterations are completed&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;In summary: Each time the robot gripped the part, a batch of pictures from different sides are taken.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The error, that needs to be calculated, is defined as the pose-difference of the part that is caused by small errors in the gripper mechanism. The error has 6 dimensions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The camera can be assumed to be calibrated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using two batches of pictures from two different grips: How can I use the image plane coordinates of the &lt;span class=&quot;math-container&quot;&gt;$N$&lt;/span&gt; features attached to a part, to calculate the pose-difference of the part?&lt;/p&gt;&#xA;" OwnerUserId="21044" LastActivityDate="2021-04-10T07:07:20.763" Title="Calculation of error, based on camera images" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19739" PostTypeId="1" CreationDate="2019-11-16T01:53:28.170" Score="1" ViewCount="21" Body="&lt;ul&gt;&#xA;&lt;li&gt;If IMU is gravity aligned, pitch is zero and yaw is unobservable. &lt;/li&gt;&#xA;&lt;li&gt;If IMU is not gravity aligned, pitch is non zero and yaw is observable.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Question:&lt;/strong&gt; given an input quaternion with non null pitch, how do you extract the observable yaw?&lt;/p&gt;&#xA;" OwnerUserId="24180" LastActivityDate="2019-11-16T01:53:28.170" Title="Yaw from quaternion with non zero pitch" Tags="&lt;imu&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19740" PostTypeId="2" ParentId="7535" CreationDate="2019-11-16T13:03:19.120" Score="1" Body="&lt;p&gt;You can use two infrared sensors one at the outside and one inside of the room. You can detect by using algorithm such as sensor outside= A sensor inside=B&#xA;If AB then +1 person if BA then -1 person&#xA;Use a counter program to determine people in room.&lt;/p&gt;&#xA;" OwnerUserId="24181" LastActivityDate="2019-11-16T13:03:19.120" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19742" PostTypeId="1" AcceptedAnswerId="19746" CreationDate="2019-11-16T18:00:24.860" Score="0" ViewCount="30" Body="&lt;p&gt;I'm looking for a general definition of the output power of an actuator. Can you suggest me any book or paper or education website where I can find it please?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you in advance.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;EDIT&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I read the paper &quot;Youqi Wang 2004 - Deformation mechanisms of electrostrictive graft elastomer&quot; where I found the locution &quot;output power&quot;. I'd like to know a general definition of the output power of an actuator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/CD6CR.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/CD6CR.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19084" LastEditorUserId="19084" LastEditDate="2019-11-26T21:36:19.890" LastActivityDate="2019-11-26T23:29:53.527" Title="Output power of an actuator - General definition" Tags="&lt;power&gt;&lt;actuator&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="19743" PostTypeId="1" CreationDate="2019-11-16T18:01:36.223" Score="0" ViewCount="80" Body="&lt;p&gt;I am using Falkolib for landmark extraction in a 2D environment. Currently I am using the testKeypointOC executable from the bin directory. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have changed the testKeypointOC.cpp file and the testData.cpp file slightly to accommodate my own laser readings. I am using a simulation in Gazebo to get the laser readings from a Kinect mounted on a pioneer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the testData.cpp I am adding my laser readings into the testRangesOrtho1 list. I have 640 readings from the Kinect and hence I am changing the num of beams parameter to 640 in the testKeypointOC.cpp. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm also changing the field of view to 0.977384 (it translates to 56 degrees which is the FOV for the Kinect laser) in the same file and also the min angle to -0.513199985027 (I got this value from the rostopic echo).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After all this, I am still getting the number of keypoints as 0 and hence no landmarks detected. Has anyone used the Falkolib in their project by modifying these values?&lt;/p&gt;&#xA;" OwnerUserId="24184" LastEditorUserId="24184" LastEditDate="2020-01-16T03:38:56.387" LastActivityDate="2021-02-09T20:01:50.223" Title="Usage of Falkolib(OpenSLAM) for 2D lidar landmark extraction" Tags="&lt;ros&gt;&lt;slam&gt;&lt;ekf&gt;&lt;kinect&gt;&lt;lidar&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19744" PostTypeId="1" CreationDate="2019-11-16T18:32:18.513" Score="3" ViewCount="264" Body="&lt;p&gt;I am currently solving a kinematics example that asks for the Jacobian. However, when I solve it using the Screw method I get different results from the analytical method, The example is kinda hard to write here but I will demonstrate on a 2D RR robot which shows the same behavior.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the simple problem:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/idZS4.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/idZS4.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now lets find the Jacobian when &lt;span class=&quot;math-container&quot;&gt;$θ_1=pi/4 $&lt;/span&gt; while  &lt;span class=&quot;math-container&quot;&gt;$θ_2=0$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$L1=L2=1$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the Jacobian using Screw Method:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$J =  \begin{bmatrix}&#xA;0 &amp;amp; 0\\&#xA;0 &amp;amp; 0 \\&#xA;1&amp;amp;1 \\&#xA;0&amp;amp; 0.7\\&#xA;0&amp;amp; -0.7\\&#xA;0&amp;amp;0&#xA;\end{bmatrix}&#xA;$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the Jacobian using Analytical Method:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$J =  \begin{bmatrix}&#xA;-L_1 sin(θ_1) - L_2 sin(θ_1+θ_2)  &amp;amp; -L_2 sin(θ_1+θ_2)\\&#xA;L_1 cos(θ_1) + L_2 cos(θ_1+θ_2) &amp;amp; L_2 cos(θ_1+θ_2) \\&#xA;\end{bmatrix},&#xA;$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$J =  \begin{bmatrix}&#xA;-\sqrt{{2}} &amp;amp; -\sqrt{{2}} / 2 \\&#xA;\sqrt{{2}} &amp;amp; \sqrt{{2}} / 2 \\&#xA;\end{bmatrix}&#xA;$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Notice that even singularity of both methods do not match. Where did I make the mistake?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, why the screw method does not take into account the length of last link? I mean if the length of last link is 0 or 1000, the linear velocity W x R should change.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit1: Here is the method I used to calculate the first jacobian.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/GimaS.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/GimaS.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="24185" LastEditorUserId="10414" LastEditDate="2021-01-25T16:23:02.093" LastActivityDate="2021-01-25T16:23:02.093" Title="The Jacobian resulted from Screw method is different from analytical one (Example Inside)" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;jacobian&gt;&lt;screw-theory&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19745" PostTypeId="2" ParentId="19738" CreationDate="2019-11-17T04:21:35.243" Score="0" Body="&lt;p&gt;Rather than rotating the box, I would attach a calibration chessboard on the box to calculate the extrinsic. If you know the homography matrix between your camera and the board you can calculate the extrinsic(have a look at zhang camera calibration method).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or using multiple cameras is one good way around. Place two cameras so that they can see each side of the box and calibrate their extrinsic within the range your robot holds the box. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I guess rotating 6th axis might not be a good idea as you need a calibration between the robot and camera.&lt;/p&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2019-11-17T04:21:35.243" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19746" PostTypeId="2" ParentId="19742" CreationDate="2019-11-17T04:28:06.957" Score="2" Body="&lt;p&gt;It reads to me like the author is stating that a stiffer material means it could make an actuator with more output power, which doesn't make a lot of sense to me. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Maybe they mean a more efficient actuator? Actuator output power is just any definition of mechanical power; either a force times the linear speed or a torque times the rotational speed. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A stiffer material may mean that the input power is transmitted more efficiently to the output end of the actuator because the motion isn't &quot;consumed&quot; by flex or deformation in the actuator material. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;More efficient actuators then would imply that you could make an actuator that had the same weight but a higher output power, but that's &lt;em&gt;specific&lt;/em&gt; power, or the power-to-weight ratio. This may be what the author meant - stiffer materials could lead to actuators with greater specific power output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should try to contact the author(s) for more information! I've only tried contacting authors a couple times, but I've gotten really friendly responses every time I have.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2019-11-17T04:28:06.957" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19748" PostTypeId="2" ParentId="19698" CreationDate="2019-11-17T23:41:05.287" Score="2" Body="&lt;p&gt;There are 2 main rules in assigning frames following DH convention: source: &lt;a href=&quot;https://www.researchgate.net/profile/Mohamed_Mourad_Lafifi/post/How_to_avoid_singular_configurations/attachment/59d6361b79197b807799389a/AS%3A386996594855942%401469278586939/download/Spong+-+Robot+modeling+and+Control.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Robot Modeling and Control, Spong et. al&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$x_i \perp z_{i-1}$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$x_i$&lt;/span&gt; intersects &lt;span class=&quot;math-container&quot;&gt;$z_{i-1}$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;In your attempts, &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Your first attempt is incorrect as your &lt;span class=&quot;math-container&quot;&gt;$z_2$&lt;/span&gt; axis is not in  the direction of actuation of the prismatic joint.&lt;/li&gt;&#xA;&lt;li&gt;I'm not clear on your second attempt as &lt;span class=&quot;math-container&quot;&gt;$x_1$&lt;/span&gt; appears to be named at 2 places. (Please correct your image).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;One possible frame assigment I'm assuming is with the following correction to your second attempt image:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$x_1$&lt;/span&gt; is in the direction of &lt;span class=&quot;math-container&quot;&gt;$z_2$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$x_2 \perp z_2$&lt;/span&gt; as in your second figure.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The only correction you need to make in your DH table is in second row, i.e. change &lt;span class=&quot;math-container&quot;&gt;$\theta_2$&lt;/span&gt; to &lt;span class=&quot;math-container&quot;&gt;$\theta_2-\pi/2$&lt;/span&gt; as you are rotating &lt;span class=&quot;math-container&quot;&gt;$x_1$&lt;/span&gt; to &lt;span class=&quot;math-container&quot;&gt;$x_2$&lt;/span&gt; around &lt;span class=&quot;math-container&quot;&gt;$z_1$&lt;/span&gt; by &lt;span class=&quot;math-container&quot;&gt;$-\pi/2$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this helps your situation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-Cheers!&lt;/p&gt;&#xA;" OwnerUserId="21462" LastEditorUserId="21462" LastEditDate="2019-11-18T20:56:10.393" LastActivityDate="2019-11-18T20:56:10.393" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19749" PostTypeId="1" CreationDate="2019-11-18T15:25:11.420" Score="0" ViewCount="25" Body="&lt;p&gt;I calculated the height object height, Distance to the base of the object, Drone weight, maximum and minimum battery voltage, resistance force and power (&lt;span class=&quot;math-container&quot;&gt;$P$&lt;/span&gt;).&#xA;The drone is flying in steady state, without acceleration and flying on a straight trajectory.&#xA;I started looking for formulas on the Internet and came across this one:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$U_{max}=U_{min}−\frac{Q_{max}}{C}$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$Q_{max}$&lt;/span&gt; is the maximum charge of the battery that it can give from a fully charged state to a fully discharged one. And the problem is that I can't find the formula for &lt;span class=&quot;math-container&quot;&gt;$Q_{max}$&lt;/span&gt;. The formulas I found were through the minimum battery capacity &lt;span class=&quot;math-container&quot;&gt;$C$&lt;/span&gt;. I may be an idiot, but I'm trying to fix it.&lt;/p&gt;&#xA;" OwnerUserId="24195" LastEditorUserId="2289" LastEditDate="2019-11-19T13:57:16.033" LastActivityDate="2019-11-19T13:57:16.033" Title="How to find the minimum battery capacity C needed for the drone to reach the landing point?" Tags="&lt;quadcopter&gt;&lt;battery&gt;" AnswerCount="0" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19750" PostTypeId="2" ParentId="19714" CreationDate="2019-11-18T16:18:47.020" Score="0" Body="&lt;p&gt;After some work I got it working. You can find the C++ source code on &lt;a href=&quot;https://github.com/hobbeshunter/IMU_EKF&quot; rel=&quot;nofollow noreferrer&quot;&gt;github&lt;/a&gt;. Don't use the python code in the question. It has some flaws.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the end I just abandoned the gyro drift (I would argue that this is unobservable with just one gyro). Furthermore I used the classic covariance propagation &lt;span class=&quot;math-container&quot;&gt;$P_{k+1} = FP_kF^T + GQG^T$&lt;/span&gt;.&lt;/p&gt;&#xA;" OwnerUserId="24152" LastActivityDate="2019-11-18T16:18:47.020" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19752" PostTypeId="1" CreationDate="2019-11-18T19:06:17.233" Score="2" ViewCount="23" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ozwDm.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ozwDm.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based on this relationship, if we have to estimate the 'disparity error' of a stereo system which uses active light on the scene - can we estimate the disparity error to be very small? According to &lt;a href=&quot;http://vision.middlebury.edu/stereo/eval3/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; the best performing algorithms have a sub-pixel disparity error, so can we assume using a structured / active light source in these cases to facilitate stereo-matching will result in reduced disparity error?&lt;/p&gt;&#xA;" OwnerUserId="24163" LastActivityDate="2019-11-18T19:06:17.233" Title="Disparity error in active light stereo systems?" Tags="&lt;computer-vision&gt;&lt;stereo-vision&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19753" PostTypeId="2" ParentId="19706" CreationDate="2019-11-18T21:27:42.777" Score="0" Body="&lt;p&gt;I'm unable to comment due to reps shortage, so, I'm adding it as an answer. &lt;a href=&quot;https://robotics.stackexchange.com/a/19748/21462&quot;&gt;This&lt;/a&gt; might answer your question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your new attempt, the transformation of axes from origin-1 (i.e. &lt;span class=&quot;math-container&quot;&gt;$x_1, y_1, z_1$&lt;/span&gt;) to origin-2 (&lt;span class=&quot;math-container&quot;&gt;$x_2, y_2, z_2$&lt;/span&gt;) is incorrect as &lt;span class=&quot;math-container&quot;&gt;$x_2 \not\perp z_1$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$x_2 \not\cap z_1$&lt;/span&gt;, violating DH convention. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS: It would be better if you could update your previous question itself with the new attempt you made so that everything is in one place.&lt;/p&gt;&#xA;" OwnerUserId="21462" LastActivityDate="2019-11-18T21:27:42.777" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19755" PostTypeId="1" CreationDate="2019-11-19T00:16:49.047" Score="0" ViewCount="38" Body="&lt;p&gt;I was wondering if it would be possible to do something like this: &lt;a href=&quot;https://www.youtube.com/watch?v=zjoYTW-tLxE&quot; rel=&quot;nofollow noreferrer&quot;&gt;Vision-based Autonomous Navigation and Mapping with a Small Quadrotor&lt;/a&gt; &lt;strong&gt;without&lt;/strong&gt; using lidar/lasers. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have tried ORB-SLAM, but the maps that are generated are too sparse for a person to get any meaningful sense from the map.&lt;/p&gt;&#xA;" OwnerUserId="24197" LastEditorUserId="9176" LastEditDate="2019-11-21T02:34:16.943" LastActivityDate="2019-11-21T02:34:16.943" Title="Are there any Algorithms/Papers about 3D Mapping the Interior of Buildings using Computer Vision and IMU Data?" Tags="&lt;slam&gt;&lt;mapping&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19756" PostTypeId="2" ParentId="18243" CreationDate="2019-11-19T03:03:36.310" Score="0" Body="&lt;p&gt;You can design, or purchase, a simple rotary table.  I have used Arrick robotics over the years, and they have a relatively turnkey system for $300 here:  &lt;a href=&quot;https://www.arrickrobotics.com/rt12.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.arrickrobotics.com/rt12.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are skilled at automation you could do this with a dc brushed motor and a platter, but it sounds from the way you ask your question that a turnkey system might better solve your problem.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2019-11-19T03:03:36.310" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19757" PostTypeId="1" CreationDate="2019-11-19T03:38:28.050" Score="2" ViewCount="63" Body="&lt;p&gt;For my project I am trying to model and control a quadrotor with actuating arms. As I don't have a physical model with me, I want to simulate and control the robot using ROS and Gazebo.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the moment I have created a CAD design (servos are used to rotate the arms). I have read about URDF and know that I can define stuff such as sensors, velocity, inertia etc. The question here is as to how I can link the urdf with my cad model. How can I make the propellers and servos move to make the robot fly? &lt;/p&gt;&#xA;" OwnerUserId="18892" LastActivityDate="2019-11-19T03:38:28.050" Title="Designing own robot for Gazebo simulation?" Tags="&lt;quadcopter&gt;&lt;ros&gt;&lt;gazebo&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19758" PostTypeId="1" AcceptedAnswerId="19759" CreationDate="2019-11-19T10:11:21.523" Score="0" ViewCount="124" Body="&lt;p&gt;I know this question is off-topic, but here I might get the answer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Recently I started collaborating in a project based on ROS and I find several examples outdated, some repositories I am interested in have hundred of pull requests but are not merged. The supported Ubuntu versions are old. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My point is, ROS project does not give me confidence as other open-source projects. I hope I am wrong, but that is my impression after going throwout the guides and other documents.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the way, the guides for beginners are quite detailed and easy to follow, but when one starts digging deeper, finds the lack of activity, like if people migrated, using other alternatives.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Either, the project is not widely adopted, or consumers of this software make their own improvements and keep them private.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If this is the reality, are there other know alternatives?&lt;/p&gt;&#xA;" OwnerUserId="4050" LastActivityDate="2019-11-19T10:41:43.560" Title="Is ROS still maintained are any other trendy alternatives?" Tags="&lt;ros&gt;" AnswerCount="1" CommentCount="3" ClosedDate="2019-11-19T14:09:06.200" ContentLicense="CC BY-SA 4.0" />
  <row Id="19759" PostTypeId="2" ParentId="19758" CreationDate="2019-11-19T10:41:43.560" Score="5" Body="&lt;p&gt;ROS Melodic supports 18.04, the current LTS-version of Ubuntu, so it's perfectly up to date. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;ROS has a huge active community in Academia and(!) Industry (&lt;a href=&quot;https://rosindustrial.org/&quot; rel=&quot;noreferrer&quot;&gt;ROSIndustrial)&lt;/a&gt;, many robotic companies use it in their products and ROS2 is currently under development. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A lot of ROS-packages have been written by people during their studies which have moved on later, so they dropped the support for the specific package. But the core components are continuously updated (although the focus is now more on ROS2). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;ROS is not going to be replaced soon, so it's a save bet to use it. &lt;/p&gt;&#xA;" OwnerUserId="23196" LastActivityDate="2019-11-19T10:41:43.560" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19763" PostTypeId="1" CreationDate="2019-11-20T15:37:23.313" Score="0" ViewCount="82" Body="&lt;p&gt;I have been working on a senior design project. In this project, we designed a 4-DOF robot arm. Now, I want to do a simulation for this system. I guess I have to design controllers for the servo motors. And, combine those with my simulator. What are your thoughts about this? How should I do the simulation? What programs, tools,  or frameworks should I use? I have been thinking to use MATLAB Simscape and SimMechanics for simulation and Simulink for the design of the controller. Also, one other option for the simulation is the MoveIt framework. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks for your opinions.&lt;/p&gt;&#xA;" OwnerUserId="24213" LastActivityDate="2019-12-25T22:02:35.343" Title="What is the best way to simulate a robotic arm?" Tags="&lt;robotic-arm&gt;&lt;ros&gt;&lt;matlab&gt;&lt;simulation&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19764" PostTypeId="1" CreationDate="2019-11-20T19:09:03.447" Score="0" ViewCount="40" Body="&lt;p&gt;I have no problem building little robots which are more or less self driving RC cars.  Now I want them to be aware of and interact with each other.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In simulations they all know the position of all the other robots.  I would like to get something similar working in the real world if possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there sensors available that will tell me robot A is 0.8 meters away 78 degrees from my right and robot B is 1.2 meters away at 113 degrees from me left?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Direction is more important than distance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can sort of get something working with a bluetooth power level sensor on a continuously rotating servo but I'm hoping there are better methods already in use with swarm robotics, although I haven't found any.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you for any insights or leads.&lt;/p&gt;&#xA;" OwnerUserId="208" LastEditorUserId="208" LastEditDate="2019-11-20T22:23:37.093" LastActivityDate="2020-02-22T04:38:48.630" Title="Are there solid state directional sensors available?" Tags="&lt;sensors&gt;&lt;navigation&gt;&lt;precise-positioning&gt;&lt;swarm&gt;&lt;dead-reckoning&gt;" AnswerCount="2" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="19765" PostTypeId="1" CreationDate="2019-11-20T19:21:46.673" Score="1" ViewCount="154" Body="&lt;p&gt;I am designing a robotic manipulator. The basic design is shown below. I am trying to calculate the torques around each joint to choose servo motors. I have made an attempt to find the torque around the two pitch joints for the two links (although I'm not fully sure that this is correct). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However I do not know how to find the torque required for the base rotation joint. How would this be calculated?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/BoUYy.png&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Basic design of robotic manipulator&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/BoUYy.png&quot; alt=&quot;Basic design of robotic manipulator&quot; title=&quot;Basic design of robotic manipulator&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="24217" LastEditorUserId="9176" LastEditDate="2019-11-21T02:32:34.377" LastActivityDate="2020-08-18T23:02:50.190" Title="Sizing servos for robotic arms" Tags="&lt;robotic-arm&gt;&lt;servomotor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19766" PostTypeId="1" AcceptedAnswerId="19770" CreationDate="2019-11-21T07:34:31.950" Score="0" ViewCount="36" Body="&lt;p&gt;Why are there so few published  implementations of SLAM with support for heterogeneous sensors?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Heterogeneous sensors include LIDAR, monocular cameras, stereo cameras, thermal sensors from more than one manufacturer on one or multiple robots.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am concerned that the lack of availability is not just a matter of time, effort, and politics but also of mathematical/algorithmic feasibility. &lt;/p&gt;&#xA;" OwnerUserId="24222" LastActivityDate="2019-11-21T23:31:05.317" Title="Feasibility of SLAM with heterogeneous sensors" Tags="&lt;sensors&gt;&lt;slam&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19767" PostTypeId="2" ParentId="19710" CreationDate="2019-11-21T09:35:57.940" Score="1" Body="&lt;p&gt;Let me assist you and point you in the correct directions:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;the manual for your Racestar FC and ESC is here (it is in picture form):&#xA;&lt;a href=&quot;https://www.racerstar.com/racerstar-starf4s-30a-blheli_s-dshot-4-in-1-esc-aio-f4-osd-flight-controller-w-or-bec-current-sensor-p-195.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.racerstar.com/racerstar-starf4s-30a-blheli_s-dshot-4-in-1-esc-aio-f4-osd-flight-controller-w-or-bec-current-sensor-p-195.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you want to do is use the PPM out from the Flysky iA6B, connect it to the PPM in of the Racestar FC shown on the connection page. There might be other options but this will be the easiest one i personally think.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;for cheapish components like these there is usualy no manual and when they are not sold anymore you are buggered (if you did not safe the description images which showed how to use them). I can suggest you to save those instructions somewhere for your own good.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As many who are in the RC hobby may know, maybe this site is not the best for getting help with this type of problem (grown up robotics people tend to have opinions on petty RC-hobbyists) youtube (RCModelrewiews, Joshua Bardwell, ...) and Oscar Liang  or sites may be more informative.&lt;/p&gt;&#xA;" OwnerUserId="22914" LastActivityDate="2019-11-21T09:35:57.940" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19768" PostTypeId="2" ParentId="15938" CreationDate="2019-11-21T10:23:57.677" Score="0" Body="&lt;p&gt;I'm a little late to this one but i think there is still valid points not made:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The idea is ok, but i would not consider it sound, primarily because of safety reasons. If one battery fails or gets too low you still lose the whole platform.&#xA;As far as i know there is no autopilot which compensates for more than one random motor/esc failure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The safe way for big drones is using high capacity Schottky diode to make redundant battery harnesses, which prevent over-draining or failing batteries to be loaded by the good batteries.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Like this you have the advantage of monitoring your batterie performance over telemetry because you can see the combined voltage level as one. In your suggested separate case you would need to monitor each voltage which is quite a burden.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Personally I don't think you save a lot of weight by not using a central PDB which you can get for very high voltage ratings, the wires may be chosen a little thinner but if you go octocopter you go large anyway, so i think safety is more important than 200g of extra weight.&lt;/p&gt;&#xA;" OwnerUserId="22914" LastActivityDate="2019-11-21T10:23:57.677" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19769" PostTypeId="2" ParentId="19764" CreationDate="2019-11-21T13:45:12.460" Score="1" Body="&lt;p&gt;This isn't something that can just be answered. There are numerous ways to do this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Low Tech:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;You can go low tech with IR emitters and retroflective tape (or retroflectors) with IR sensors.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;High Tech:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;A more high-tech solution would be to utilize ultra-wide band transceivers. With UWB you can pinpoint your rovers in 3 dimensional space around each other.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You could also use radar, lidar, or cameras and then train an adversarial neural net system to &quot;visually&quot; discern what a rover looks like -- with the size of the rover in the visual system you could estimate distance.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I would advise just researching differing solutions for ranging and detection and put some thought into what your realistic budget and capabilities are.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this helps.&lt;/p&gt;&#xA;" OwnerUserId="24224" LastActivityDate="2019-11-21T13:45:12.460" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19770" PostTypeId="2" ParentId="19766" CreationDate="2019-11-21T23:31:05.317" Score="1" Body="&lt;p&gt;I would somewhat disagree with the statement of lack of heterogenous systems. It is pretty common to always combine a camera sensor with an IMU. LIDAR + Camera has also been a pretty popular idea over the last few years.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In regards to lack of more exotic sensors e.g Thermal, RADAR I would say it is due to the fact that the main purpose of SLAM is to build 3D maps. The best sensors to give you 3D information is LIDAR and Cameras so the majority of focus has been on those two systems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A couple of other reasons for lack of heterogeneous sensor systems:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Cost:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Adding more sensors, especially more exotic ones like Thermal cameras adds to the cost of your sensor platform. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Computational Complexity&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More sensors means more computational cost. Not only in the backend portion of fusing the sensor information, but also your system requires now multiple frontends. This becomes especially prevalent on small robots like UAVs, where computation is a premium.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Lack of benefits&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The sensors have to complement each other. A LIDAR + Stereo Pair is not a good combination, as the purpose of the Stereo Pair is made redundant with the LIDAR.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Form Factor/Availability/ Ease of Use&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The sensors could be too big to put on a small vehicle, getting access to good ones could be difficult. They may require exotic connectors, or propriety software libraries. A bunch of different reasons that make it too complicated to use compared to a simple camera.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;On the topic of algorithm feasibility the backends used in Sensor Fusion such as Kalman Filters and Factor Graphs are abstract enough to allow any combination sensors. So this is not an issue.&lt;/p&gt;&#xA;" OwnerUserId="15265" LastActivityDate="2019-11-21T23:31:05.317" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19771" PostTypeId="1" CreationDate="2019-11-22T03:02:42.223" Score="0" ViewCount="100" Body="&lt;p&gt;For a long time I use &lt;code&gt;Arduino Uno&lt;/code&gt; controller and Adafruit Servo Shield with 6.3V 1000 uF capacitor, powered with 6V 8Amp adapter to control 8 digital servo motors from &lt;code&gt;C#&lt;/code&gt; desktop application. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Code was successfully working for a long time of using my project device, but today I've plugged controller, and something goes wrong way, when I've not damaged of changed anything in my project, as in code, also in device assembly. I found two different and absolutely not clear problems, which newer was before with completely same code, devices, computer and Windows 10 pro OS:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I'm loading Adafruit control &lt;code&gt;#include &amp;lt;Wire.h&amp;gt;&lt;/code&gt; &lt;code&gt;#include &amp;lt;Adafruit_PWMServoDriver.h&amp;gt;&lt;/code&gt; sketch, I see &lt;code&gt;TX&lt;/code&gt;, &lt;code&gt;RX&lt;/code&gt; and &lt;code&gt;L&lt;/code&gt; led indicates upload as usually, but motors does not moves with command from desktop via serial port, just does some short random movements with load of controller and then stops, at the same time &lt;code&gt;RX&lt;/code&gt; led indicates receiving  of message from  C# desktop command with button or trackbar successfully&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I'm trying to load another sketch, which uses &lt;code&gt;&amp;lt;Servo.h&amp;gt;&lt;/code&gt;, which should receive serial command from my C# desktop, with same shown initialization, to check if I am able to move motor from desktop this way, but &lt;code&gt;C#&lt;/code&gt; application hangs and freezes with selecting of same &quot;COM3&quot; in &lt;code&gt;combobox&lt;/code&gt;. Then after number of attempts, it was somehow loaded and selected without freezing with port selection, but did nothing with servo, just indication of message with RX, and same unexpected random movements. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Both of this problems was never appeared before.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To be sure, I've checked all motors separately only with Arduino (without shield) from basic servo control with direct connection &lt;code&gt;minus&lt;/code&gt; to &lt;code&gt;GND&lt;/code&gt;, &lt;code&gt;5V&lt;/code&gt; to &lt;code&gt;V+&lt;/code&gt;, &lt;code&gt;Signal&lt;/code&gt; to &lt;code&gt;PWM&lt;/code&gt; by this &lt;a href=&quot;https://www.arduino.cc/en/tutorial/sweep?fbclid=IwAR0Zs0laLTETDmtdFHqDtqT0jYHV77ITrD0rRqDJL8Bfqf8tOSYCyfyNKmU&quot; rel=&quot;nofollow noreferrer&quot;&gt;example&lt;/a&gt;, which also uses &lt;code&gt;&amp;lt;Servo.h&amp;gt;&lt;/code&gt;, and works fine, turns all motors from sketch successfully. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also I've checked absolutely new Arduino Due, which uses COM4 and it is same behavior. So, seems like controller and motors are fine, it looks like my USB serial port works incorrectly, or it is something wrong with shield, what is more likely, even if serial port selection freezing looks really doubtful and does not shows any error if  I run application from VS debug, I almost sure that the problem comes from shield, because kind of proof is that I've checked same C# application from 2 different computers with Windows OS and with 2 different controllers Uno and Due, single or number of servos on board, and 3 different USB cables serial command received but motor does not moves by command, just does rare unexpected random movements. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Power to shield correct is a 6V, board and port selected in Arduino IDE tools by requirement. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It looks like something wrong with shield, even if freezing of serial port sounds like separate problem, but I don't have another shield to check, so I've to find out somehow with particular device&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not sure where to go next and what to check else.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any advice, guide or example would be helpful &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit 1:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've follow @jsotola advice to locate the point of failure. I've tried this &lt;a href=&quot;https://www.arduino.cc/en/Tutorial/Blink&quot; rel=&quot;nofollow noreferrer&quot;&gt;example&lt;/a&gt;, which works fine, blinks L led with my red led and 220 Ohm resistor on 13 pin and ground. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And I got same freezing with selection of serial COM3 in combobox, without any error report if I debug it from VS or will run .exe from desktop. This behavior looks incorrect, it is unclear where is a reason, because it does the same from another computer for both Uno and Due controllers, with same long time working code and devices, as I've said before nothing like this was happened before, I did not changed anything in code or assembly. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems like something goes wrong here, looks confusing, because when &lt;code&gt;#include &amp;lt;Wire.h&amp;gt;&lt;/code&gt; &lt;code&gt;#include &amp;lt;Adafruit_PWMServoDriver.h&amp;gt;&lt;/code&gt; control sketch uploaded to controller, it successfully selects COM3 from C# combobox, and failure comes with serial command receiving, which is indicated with RX each time I press button or scrolling trackbar, but does not turns motor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Code with turning LED from C# or controlling motor, shown (number 2) in problem behavior description above, (both already checked long time before of successful working) does the same, failure appears with serial port selection, hanging and complete freezing, I can't say if it is initialization problem, because it does not reports about any bug there, and initializes same port with &lt;code&gt;&amp;lt;Wire.h&amp;gt;&lt;/code&gt; &lt;code&gt;#include &amp;lt;Adafruit_PWMServoDriver.h&amp;gt;&lt;/code&gt; sketch using. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit 2:&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, I've checked &lt;a href=&quot;https://learn.adafruit.com/adafruit-16-channel-pwm-slash-servo-shield/using-the-adafruit-library#test-with-the-example-code-6-7&quot; rel=&quot;nofollow noreferrer&quot;&gt;this code&lt;/a&gt;, which runs servos without serial. I've reached completely unclear result, this way shield moves servo. I'm really confused, what I got here:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;I have 3 years old desktop application code and controller sketch, device assembly, working everyday successfully till yesterday. Important to note, all given examples was used and checked by me before, all was successful  &lt;/li&gt;&#xA;&lt;li&gt;Shield without using of serial port runs servos successfully &lt;/li&gt;&#xA;&lt;li&gt;Arduino Uno and Due both controllers runs motor sweep and blinks LED without serial successfully &lt;/li&gt;&#xA;&lt;li&gt;I've checked two different USB cables for Uno and separate one for Due&lt;/li&gt;&#xA;&lt;li&gt;Adafruit library PWM connects COM3 from C# desktop application successfully, but does not turns servo with serial command from desktop&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;&amp;lt;Servo.h&amp;gt;&lt;/code&gt; code or LED light to control from C# does not loads COM3 in 99% cases, and if does, then does not turns servo or LED&lt;/li&gt;&#xA;&lt;li&gt;I have checked problem on two different computers with different version of Windows OS&lt;/li&gt;&#xA;&lt;li&gt;All motors are working&lt;/li&gt;&#xA;&lt;li&gt;Capacitor works&lt;/li&gt;&#xA;&lt;li&gt;Voltage on shield power terminal  6V and same on GND and V+ pins &lt;/li&gt;&#xA;&lt;li&gt;Adafruit example code turns servo without serial successfully &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;So what is the conclusion, if shield works, controller works, USB works, C# desktop reads COM3 with PWM library and RX led indicates receiving of serial command message, but not turns servo, and does not reads COM3 with &lt;code&gt;&amp;lt;Servo.h&amp;gt;&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What to check, code is shown above completely, there is nothing else, and it was working, I'm not sure, what can be wrong there. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or it is something wrong with serial on PC, but I have checked it on 2 computers, behavior is equal, then more explainable should be some Windows OS update, which was changed something with serial ports in OS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or it is some connection damage between Arduino and Shield on shield, because I've tried 2 different controllers, which also appears doubtful, because behaves differently in case of using &lt;code&gt;&amp;lt;Wire.h&amp;gt;&lt;/code&gt; &lt;code&gt;&amp;lt;Adafruit_PWMServoDriver.h&amp;gt;&lt;/code&gt;and &lt;code&gt;&amp;lt;Servo.h&amp;gt;&lt;/code&gt; in first case sends and receives message from C#, and second hangs with serial COM3 selection, I'm not sure what such damage should be  for connection with serial, if PWM code uploading allows C# read COM3, and receive serial message, when  examples freezes with selection of initialized port.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Everything looks so that the reason can be anywhere, but looking on the results, at the same time everything excluded.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have two versions of VS15 .NET Framework 4.5.2, which build is my C# application used for long time, and VS 17 .NET Framework 4.7.2 on same OS also installed and updated long time ago before failure. So, also I can try run same code from 4.7.2 version build, where target is W10, version 1803 (10.0; Build 17134), but I'm not sure if it can be reason.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Everything used to work fine as a system with the old code until recently, and code has not been changed, it is still same old code, there is nothing added or even edited. I use this program and device for 3 years everyday. Now, every part of the system works fine individually, but not with serial command using, I have described this in details in 5 and 3 paragraphs of edit above. I'm really stacked, not because I can get new devices only in few weeks, but because devices separately works, seems like it is different problem. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit 3:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've tried disable Defender in Windows OS, but it does nothing with problem. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I still can't find solution for this problem. Here is my minimal &lt;code&gt;WinForms&lt;/code&gt; desktop application repository &lt;a href=&quot;https://github.com/ladooniani/Servo-control/blob/master/Form1.cs&quot; rel=&quot;nofollow noreferrer&quot;&gt;Single servo control&lt;/a&gt;, which is VS 17 .NET Framework 4.7.2 build, as example of my C# control with simple and basic button and trackbar controls for single servo motor. I'm almost sure, if you will try it for your controller with given PWN or any given sketch from above with appropriate shield library, it will work. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If someone has ideas, I'm not sure what can I check else, would be very helpful to get your advice. &lt;/p&gt;&#xA;" OwnerUserId="24233" LastEditorUserId="24233" LastEditDate="2019-11-30T02:52:47.257" LastActivityDate="2019-11-30T02:52:47.257" Title="Serial command receiving failure with Arduino and Adafruit shield from C# desktop application" Tags="&lt;arduino&gt;&lt;servomotor&gt;&lt;serial&gt;&lt;pwm&gt;" AnswerCount="0" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="19772" PostTypeId="1" CreationDate="2019-11-22T03:29:11.477" Score="0" ViewCount="25" Body="&lt;p&gt;I plan to control the flying height of my drone using a LIDAR (in real-time). Therefore, I would be attaching the LIDAR to my UAV, pointing vertically downwards. However, after looking at some of the LIDAR datasets, I see that there is a wreath of information. How do I extract the vertical height from here? &lt;/p&gt;&#xA;" OwnerUserId="24234" LastEditorUserId="24234" LastEditDate="2019-11-22T03:40:15.130" LastActivityDate="2019-11-22T03:40:15.130" Title="How to obtain live vertical height values using LIDAR" Tags="&lt;slam&gt;&lt;lidar&gt;&lt;autonomous-car&gt;" AnswerCount="0" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="19773" PostTypeId="1" AcceptedAnswerId="19778" CreationDate="2019-11-22T11:26:46.370" Score="2" ViewCount="60" Body="&lt;p&gt;I've been working on some small projects for fun to learn more control theory things and embedded programming. Thank the esp32 and Arduino!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Either way I've been programming everything entirely in a single loop, for a bit of pseudo code: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void loop(){&#xA;    data = get(sensor);&#xA;    pdata = process(data);&#xA;    lqr(pdata);&#xA;    millis(10):&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This above code is by no means real code, just a quick example of how my code is designed. I am by no means any kind of programming expert and only really know Arduino styled Wiring and bits of other things to complete small tasks. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I'm unsure of, is it better to buffer/loop sensor data as fast as the micro-controller can and then afterwards only call the controller (LQR in this case) to actuate the system at my calculated discrete period like so:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void loop(} {&#xA;    unsigned long currentMillis = millis()&#xA;    interval = 10;&#xA;    data = get(sensor);&#xA;    pdata = process(data);&#xA;&#xA;    if (currentMillis - previousMillis &amp;gt;= interval) {&#xA;        previousMillis = currentMillis;&#xA;        lqr(pdata);&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;or call everything sequentially as I have been doing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I feel as if having everything in the loop being calculated and then actuated sequentially adds extra time (if only microseconds the esp32 is 200~mhz or so) to the loop which isn't accounted for in my controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the best method/style for programming an embedded controller. Are both my methods/ideas incorrect?&lt;/p&gt;&#xA;" OwnerUserId="23148" LastEditorUserId="23148" LastEditDate="2019-11-22T17:10:20.517" LastActivityDate="2019-11-23T07:42:16.617" Title="Control loop in or outside of main loop" Tags="&lt;control&gt;&lt;microcontroller&gt;&lt;programming-languages&gt;&lt;dynamic-programming&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19774" PostTypeId="1" CreationDate="2019-11-22T14:25:26.043" Score="2" ViewCount="59" Body="&lt;p&gt;I recently purchased an iRobot Create 2.&#xA;To connect to it, I am using RealTerm&#xA;Although I can send opcode commands that do not require a Data Byte (128, 173, 133, etc), I cannot figure out the format for opcodes with data bytes&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, I want to turn on the power LED to full brightness.&#xA;I have tried the following formats, but to no avail:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;139,4,0,254&lt;/p&gt;&#xA;&#xA;&lt;p&gt;139 4 0 254&lt;/p&gt;&#xA;&#xA;&lt;p&gt;139004000254&lt;/p&gt;&#xA;&#xA;&lt;p&gt;13940254&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any direction is appreciated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/0as1R.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0as1R.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="24236" LastActivityDate="2019-11-22T23:42:22.833" Title="iRobot Create 2 opcodes, data bytes and Realterm" Tags="&lt;irobot-create&gt;&lt;serial&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19775" PostTypeId="1" CreationDate="2019-11-22T19:45:42.037" Score="0" ViewCount="37" Body="&lt;p&gt;Hope you all are doing well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I built a 5 bar linkage mechanism using arduino and python.It uses 2 servos, an arduino mega, a 12v power supply,a dc-dc step down converter to power everything.&#xA;The arduino's job is to to take two angle input in a csv format via usb serial input and rotate the servos to that specific angle.&#xA;The python script's job is to take a xy input in csv format via terminal and calculate the two angles using inverse kinematics so that the end-effector reaches the desired xy position and send them to the arduino via serial.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have been seeing a lot of pen plotter videos recently and saw almost all of them use grbl and universal g code sender.&#xA;What i want to do - use g codes to with my python script to plot figures.(I dont care about accuracy,i just want to see some plots :]).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So is there any scripts or something related which takes G-codes as input and outputs XYZ position of the toolpath in correect sequences so that&#xA;I can just input those sequences in my python code to get the plots hopefully?&lt;/p&gt;&#xA;" OwnerUserId="23645" LastActivityDate="2019-11-22T19:45:42.037" Title="G-code to cartesian co-ordinate converter" Tags="&lt;arduino&gt;&lt;python&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19776" PostTypeId="2" ParentId="19765" CreationDate="2019-11-22T21:03:27.163" Score="1" Body="&lt;p&gt;I recently built a robotic arm using 5 servos.Here is my thought process-&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Torque can be thought as angular force. As we know W = mg.Ignoring friction the minimum force required to move an object in the z direction(vertically), at least force greater than weight is needed.Let's say an object weighing w is placed on a friction-less surface.&#xA;In that case any amount force can move it, the acceleration will vary.(F= ma,applied force  /mass = resulting acceleration )&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case of the first revolute joint ,in theory any torque should do.But if the moment of inertia is very high it might burn the motor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;but for the second revolute joint minimum torque required = (mass of the first link * half of the length of first link) + (weight of the third servomotor * length of the first link) + (mass of the second link * (length of first link +  half of the length of second link)) + (weight  at the end-effector * (length of first link + length of second link)).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And for the thrid revolute joint minimum torque required = (mass of the second  link * half of the length of second link) + (weight  at the end-effector * ( length of second link)).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;use S.I. units in all cases.&lt;/p&gt;&#xA;" OwnerUserId="23645" LastActivityDate="2019-11-22T21:03:27.163" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19777" PostTypeId="2" ParentId="19774" CreationDate="2019-11-22T23:42:22.833" Score="1" Body="&lt;p&gt;Found the answer to my own question.&#xA;The iRobot needs to be in Safe or Full mode in order to control the LEDs.&#xA;So, I was entering the numbers correctly (139 4 0 254), but needed to send the command for Safe (131) or Full (132) first.&lt;/p&gt;&#xA;" OwnerUserId="24236" LastActivityDate="2019-11-22T23:42:22.833" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19778" PostTypeId="2" ParentId="19773" CreationDate="2019-11-23T07:42:16.617" Score="1" Body="&lt;p&gt;In simple case it probably doess not matter, but if you have more (and slow) sensors as well as more things to do, the second approach is better, because you can let do sensors do their work (in their HW and their own computing power), collect ressults when they are avaiable and in meantime do many other things.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Also pseudocode:)&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#define sensors 100&#xA;#define devices 50&#xA;....&#xA;void setup(){&#xA;   for (int i =0 ; i&amp;lt;sensors; i++){ start(sensor[i]);};&#xA;   for (int i =0 ; i&amp;lt;devices; i++){ open(device[i]);};&#xA;   ....&#xA;   drone.begin();&#xA;}&#xA;void loop(){&#xA;   for (int i =0 ; i&amp;lt;sensors; i++){ &#xA;        if (sensor[i].have_data()) {&#xA;            data.update(i,sensor[i].read_data());&#xA;        };&#xA;   };&#xA;   for (int i =0 ; i&amp;lt;devices; i++){ &#xA;        if (device[i].is_free()) {&#xA;             device[i].display_next_funny(message[i]);&#xA;        };&#xA;   };&#xA;   if (data.are_updated()) {&#xA;      drone.update_path(data);&#xA;   };&#xA;   if (drone.not_there_yet()) {&#xA;       drone.follow_planned_path();&#xA;   };&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Now your drone is following planned path as fast, as it can, while you read all sensors as fast, as they have some new data for you and show funny messsages on displays, play sounds, blink LEDS etc as fast, as possible. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does not matter, if sensor[0] can provide data 100x per sec and sensor[1] only every other second, does not matter, if LED goes on/off instantly and servo with &quot;radar&quot; need two seconds to make full turn. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You just read sensor, when it is available, send new message, when there is free buffer and still you can let your drone react hundred times per second (if there is somehing to do).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You will probably spend a lot of time just empty cycling the loop(), while waiting for new data arrive, all messages to be displayed and for your drone to move its slow mechanical motors to next step, but it is OK, as you have nothing better to do anyway. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand you can react nearly immediately to any event and still make funny effects in free time.&lt;/p&gt;&#xA;" OwnerUserId="16496" LastActivityDate="2019-11-23T07:42:16.617" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19779" PostTypeId="1" CreationDate="2019-11-23T16:08:51.913" Score="2" ViewCount="22" Body="&lt;p&gt;How can I check whether the external compass is really selected for my APM 2.8 using mission planner.&#xA;The primary purpose of using the external compass is to have less electro magnetic interference and hence higher accuracy but I am really not sure which of the two is really providing the input to the system.&lt;/p&gt;&#xA;" OwnerUserId="24019" LastEditorUserId="24019" LastEditDate="2019-12-01T04:45:06.127" LastActivityDate="2019-12-01T04:45:06.127" Title="Checking for external compass in mission planner" Tags="&lt;quadcopter&gt;&lt;uav&gt;&lt;ardupilot&gt;" AnswerCount="0" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19781" PostTypeId="1" AcceptedAnswerId="19794" CreationDate="2019-11-23T17:23:54.603" Score="-1" ViewCount="90" Body="&lt;p&gt;I have developed a prototype of a CNC Machine with Arduino and Raspberry Pi for my first client, I now need to use industrial grade components, but I struggle with the hardware, I am confused.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I just learned about PLC, and I don't know anything about them.&#xA;What it takes to make an Industrial-Grade CNC ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Should I use a PLC for my CNC ?&#xA;What PLC to use ? What modules ?&#xA;What is the hardware configuration ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to learn,&#xA;But I struggle to find informations for this on the web.&#xA;Do you have some documentations ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need your help, I am a little bit lost I have to admit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks !&lt;/p&gt;&#xA;" OwnerUserId="24239" LastActivityDate="2020-01-15T07:55:47.783" Title="Hardware for Industrial-Grade CNC" Tags="&lt;industrial-robot&gt;&lt;cnc&gt;&lt;plc&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19782" PostTypeId="1" CreationDate="2019-11-23T17:30:45.387" Score="0" ViewCount="33" Body="&lt;p&gt;anybody experienced problem with power saving and scheduler command?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have roomba 521 with last firmware updated via OSMO, so now it has also power saving feature.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have problem with scheduler command: I send command using serial connector, roomba seem to accept my command and it beep to confirm it; but roomba don't start at defined time...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could be some problem with power saving that prevent scheduler command?&lt;/p&gt;&#xA;" OwnerUserId="23471" LastActivityDate="2019-11-23T17:30:45.387" Title="problem roomba 500 power saving scheduler" Tags="&lt;irobot-create&gt;" AnswerCount="0" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19783" PostTypeId="2" ParentId="19131" CreationDate="2019-11-23T17:32:40.880" Score="0" Body="&lt;p&gt;I find right answer:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;with connected broken buck converter I measured 0V, but removing broken buck converter all work fine and I can measure 12V.&lt;/p&gt;&#xA;" OwnerUserId="23471" LastActivityDate="2019-11-23T17:32:40.880" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19784" PostTypeId="1" CreationDate="2019-11-23T18:43:22.340" Score="0" ViewCount="73" Body="&lt;p&gt;I am reading out the values for the light bumpers on the Icreate2 robot. According to the manual, these values should be in the range 0-4095.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Whenever I read out these values, they start out as well-behaved values in the expected range. However, after a minute or so, the values jump up to very high values &gt;20,000, for example.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have attached a screenshot of a python-based utility I wrote to show the values of all sensors. You can see that some bumper values have very large values. Nothing is in front of the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anybody have any idea about what's going on?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/U67NU.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/U67NU.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="24240" LastActivityDate="2019-12-16T15:55:18.337" Title="Very high value readings for light bumpers" Tags="&lt;irobot-create&gt;" AnswerCount="4" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19785" PostTypeId="1" AcceptedAnswerId="19811" CreationDate="2019-11-23T23:32:36.543" Score="2" ViewCount="66" Body="&lt;p&gt;I have read a robotic related paper called &lt;em&gt;Estimating SE(3) elements using a dual quaternion based linear Kalman filter&lt;/em&gt;, and the author proposed that the equation of position measurement is denoted as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\mathbf{a}=\mathbf{R}\mathbf{b}+\mathbf{t}$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where &lt;span class=&quot;math-container&quot;&gt;$\mathbf{a}$&lt;/span&gt; is the sensor measurement, &lt;span class=&quot;math-container&quot;&gt;$\mathbf{R}$&lt;/span&gt; ∈ SO(3) is the rotation matrix, &lt;span class=&quot;math-container&quot;&gt;$\mathbf{b}$&lt;/span&gt; ∈ &lt;span class=&quot;math-container&quot;&gt;$\mathbf{R}^{3}$&lt;/span&gt;is the point to be transformed and &lt;span class=&quot;math-container&quot;&gt;$\mathbf{t}$&lt;/span&gt; ∈ &lt;span class=&quot;math-container&quot;&gt;$\mathbf{R}^{3}$&lt;/span&gt; is the translation vector. In an application such as rigid registration of images, &lt;span class=&quot;math-container&quot;&gt;$\mathbf{a}$&lt;/span&gt; is the sensed location of points and &lt;span class=&quot;math-container&quot;&gt;$\mathbf{b}$&lt;/span&gt; is the corresponding point on the CAD model of the object.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The equation of pose measurement is denoted as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\mathbf{AX-XB=0}$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where &lt;span class=&quot;math-container&quot;&gt;$\mathbf{A,B}$&lt;/span&gt; are pose-measurements, and the &lt;span class=&quot;math-container&quot;&gt;$\mathbf{X}$&lt;/span&gt; is the desired transformation to be estimated. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So is there anyone who know what the difference between pose measurement and position measurement?&lt;/p&gt;&#xA;" OwnerUserId="24160" LastActivityDate="2019-11-27T07:39:48.773" Title="What's the difference between Pose Measurement and Position Measurement?" Tags="&lt;mobile-robot&gt;&lt;slam&gt;&lt;pose&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19786" PostTypeId="1" CreationDate="2019-11-24T00:51:41.003" Score="0" ViewCount="39" Body="&lt;p&gt;I have a 5 axis robotic arm that has a depth camera mounted near the toolhead on the left side.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have object detection software running on the camera and can find the XYZ of any object in mm that the camera sees relative to the middle of the camera.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The robot can move to any XYZ position in mm relative to the base mounting plate of the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd like to get the arm to move to the position of an object seen by the camera. How would I go about doing this? Is there a software library for this?&lt;/p&gt;&#xA;" OwnerUserId="24241" LastActivityDate="2019-11-24T03:01:00.100" Title="Camera mounted on robotic arm - XYZ mapping" Tags="&lt;computer-vision&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19787" PostTypeId="2" ParentId="19786" CreationDate="2019-11-24T03:01:00.100" Score="1" Body="&lt;p&gt;The problem is solved with just a straightforward application of multiplying the transformation frames. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P: 3D point in camera frame&lt;/p&gt;&#xA;&#xA;&lt;p&gt;T_to_C: Transform from Camera to toolhead&lt;/p&gt;&#xA;&#xA;&lt;p&gt;T_B_to: Transform from toolhead to Base(your base mounting plate)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PB: Point in Base frame&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just multiply them through PB=T_B_to * T_to_C * P&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You now have the XYZ of your Object in the Base Frame. Just calculate the inverse kinematics of that position to move your arm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Notes:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The transform between the toolhead and the camera is sometimes called the hand-eye calibration. If you don't have this then you must calculate it through a calibration process. ROS has a bunch of different packages for it.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Your transform between toolhead and base may be composed of multiple different transforms between the various joints in your robot arm.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="15265" LastActivityDate="2019-11-24T03:01:00.100" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19789" PostTypeId="2" ParentId="19785" CreationDate="2019-11-24T09:14:13.637" Score="6" Body="&lt;p&gt;what you are looking for is written in the paper. Position refers only to x,y,z translational measurements while pose means position and orientation. &lt;/p&gt;&#xA;" OwnerUserId="21229" LastActivityDate="2019-11-24T09:14:13.637" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19790" PostTypeId="2" ParentId="19784" CreationDate="2019-11-24T09:23:24.020" Score="0" Body="&lt;p&gt;I can only think there is something wrong with the firmware or the hardware. Maybe you can try to reupload the firmware or update it. &lt;/p&gt;&#xA;" OwnerUserId="21229" LastActivityDate="2019-11-24T09:23:24.020" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19791" PostTypeId="2" ParentId="19784" CreationDate="2019-11-24T14:45:00.483" Score="1" Body="&lt;p&gt;I would check to make sure as the program runs it’s not miss interpreting bits. If you use the Stream OP Code (148) it produces a check sum. I would Change to stream and verify that you still get &gt;20,000 with a correctly computed check sum. If you are getting correct check sums and high values post your code it could be something on how it’s being interpreted over time. &lt;/p&gt;&#xA;" OwnerUserId="20597" LastActivityDate="2019-11-24T14:45:00.483" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19792" PostTypeId="1" CreationDate="2019-11-24T19:48:39.240" Score="2" ViewCount="73" Body="&lt;p&gt;I'm very new with Arduino and Adafruit and I'm trying to get a DC motor running with my Adafruit Motor Shield V2.3, but it's not running. I have connected the motor to the right terminal (M3). I'm following the Adafruit website guide. Does anyone know what I'm doing wrong?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the Arduino and Motor Shield: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/6W3xY.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6W3xY.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And here is my code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;Wire.h&amp;gt;&#xA;#include &amp;lt;Adafruit_MotorShield.h&amp;gt;&#xA;#include &quot;utility/Adafruit_MS_PWMServoDriver.h&quot;&#xA;Adafruit_MotorShield AFMS = Adafruit_MotorShield();&#xA;Adafruit_DCMotor *myMotor = AFMS.getMotor(3);&#xA;&#xA;void setup()&#xA;{&#xA;  AFMS.begin();&#xA;  myMotor-&amp;gt;setSpeed(255);&#xA;}&#xA;&#xA;void loop()&#xA;{&#xA;  myMotor-&amp;gt;run(FORWARD);&#xA;  delay(2000);&#xA;  myMotor-&amp;gt;run(BACKWARD);&#xA;  delay(2000);&#xA;  myMotor-&amp;gt;run(FORWARD);&#xA;  delay(2000);&#xA;  myMotor-&amp;gt;run(RELEASE);&#xA;  delay(1000);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The code uploads with no errors but nothing happens after that. &lt;/p&gt;&#xA;" OwnerUserId="24247" LastActivityDate="2021-02-20T00:07:25.743" Title="Can't run DC Motor with Arduino and Adafruit Motor Shield" Tags="&lt;arduino&gt;&lt;motor&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19794" PostTypeId="2" ParentId="19781" CreationDate="2019-11-25T11:47:44.253" Score="1" Body="&lt;p&gt;Arduino and RPI can take the role of control systems hardware. They are not what someone would call industrial grade (although, in some cases, they are used in industrial context).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is hard to define what industrial grade means, it is in many cases subjective, but here are some aspects which I think are mostly agreed upon:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Hardware and Software interfaces compatible with industrial equipment. Industrial equipment communicate to each other using specific protocols like CanOpen, Sercos, EtherCAT, etc. These require a hardware interface and a well suited communication stack (on the software side)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Usable in an industrial setting (housing, rail-mountable, screw connector, no soldering needed for use, UL or CE certification (depends on country), 24V DC or 110V/230V/400V AC - depends on country)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Programming by the end-user. Industrial control systems are programmed by the system integrator or by the end-user. They need to be familiar with the programming language. CNCs are programmed in some G-Code dialect, PLCs have dedicated programming languages like Ladder diagram, Structured Text, etc. This is the application program, similar to a script, running on the PLC, CNC or RC (Robot Controller) on top of the manufacturer provided &quot;firmware&quot;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Technical support is required, since the end-user might have questions or problems in the exploitation of the system and if production stops at the end-user that can be costly. End-users want to be sure that there is long-term technical support available.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;PLCs are used for controlling industrial systems, but they are not the first choice for controlling synchronized motion (this is somewhat changing with the PLCOpen Motion Blocks for very simple applications, not for machining applications). CNC-controllers are the first choice to control synchronized motions. CNC-controllers also include PLC functionality for dealing with non-motion related tasks (e.g. switching coolant on or off during machining).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A high-end industrial grade CNC Controller would be a &lt;a href=&quot;https://www.siemens-industrial.com/SIEMENS-CNC-Control-System.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Siemens CNC Controller&lt;/a&gt;, a Beckhoff Controller with a &lt;a href=&quot;https://download.beckhoff.com/download/Document/Catalog/Main_Catalog/english/separate-pages/twincat/tf5200.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;CNC Module&lt;/a&gt;, Mid-range e.g. &lt;a href=&quot;https://www.fagorautomation.com/en/p/cnc/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Fagor&lt;/a&gt; CNC Controllers. On the very low-end (low-cost) side a CNC controller like the &lt;a href=&quot;https://www.machsupport.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mach3 or Mach4&lt;/a&gt; might (!) pass as industrial grade, depending on the client requirements. As for open source there is &lt;a href=&quot;http://linuxcnc.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;LinuxCNC&lt;/a&gt;, which migh(!) pass as industrial grade,  and the &lt;a href=&quot;https://github.com/grbl/grbl/wiki&quot; rel=&quot;nofollow noreferrer&quot;&gt;GBRL&lt;/a&gt; project which will probably not pass as industrial grade, due to its arduino target. Again, what is and what is not industrial grade is somewhat subjective.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;CNC Controller communicate with drive amplifiers. Some examples here are overlapintg with the ones above (Siemens, Beckhoff, Bosch, Lenze, ABB). Most of these also have matching motors for the drive amplifiers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for mechanical hardware, gearboxes (e.g. Nabtesco), linear guide rails (e.g. SKF). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Usually all companies mentions have pre-sales technical support to assist you in picking the right equipment for your application. Please note that brands in my answer is biased towards the EU market. There might be other comparable brands well known in other geographical regions)&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2019-11-25T12:10:09.077" LastActivityDate="2019-11-25T12:10:09.077" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19795" PostTypeId="1" CreationDate="2019-11-25T12:18:00.467" Score="0" ViewCount="62" Body="&lt;p&gt;I have a robot which has (for simplicity) only one degree of freedom; it rotates about the z-axis (think like a crane), and has no slip. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The shaft encoder delivers data in 0.1° increments, so when measured at 30 Hz, there is usually a succession of identical values until the value jumps to the next 0.1°.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have an IMU with a Gyroscope that I can place somewhere on the robot (not at the center of rotation).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to update estimates of the current angle of rotation at greater than 30 Hz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How would one go about fusing this very coarse encoder and IMU data? I'm assuming EKF filtering will be part of the answer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would be very satisfied with canonical literature on this topic as well. &lt;/p&gt;&#xA;" OwnerUserId="17267" LastEditorUserId="17267" LastEditDate="2019-11-26T10:06:52.320" LastActivityDate="2019-11-26T22:43:16.450" Title="How does one estimate motion from sparse encoders and IMU-Gyro data?" Tags="&lt;imu&gt;&lt;gyroscope&gt;&lt;sensor-fusion&gt;&lt;motion&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19796" PostTypeId="1" CreationDate="2019-11-25T12:53:41.287" Score="0" ViewCount="88" Body="&lt;p&gt;I need to sense the torque of a stepper motor at any given time. I'm planning to tension a wire by using a stepper motor, and in order to keep the wire at a fixed tension I would need to know the tension at any given time. Based on this I can turn the stepper motor to achieve the desired torque.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If this is not possible, appreciate some alternatives on how I can achieve this. I've looked into strain sensors as well, but not sure if this works.&lt;/p&gt;&#xA;" OwnerUserId="13551" LastActivityDate="2020-12-20T00:46:43.087" Title="Sensing torque of stepper motor" Tags="&lt;stepper-motor&gt;&lt;torque&gt;&lt;force-sensor&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19797" PostTypeId="1" AcceptedAnswerId="19798" CreationDate="2019-11-25T16:26:20.747" Score="0" ViewCount="71" Body="&lt;p&gt;Firstly I would like to say that I'm no expert in Bayesian Filters such as Kalman Filter and Particle Filter, but I've used the EKF before in a robot that has both wheel encoders and an IMU to localize itself in a map such that it knows its initial position in the map and it worked like a charm. Now I want to build a robot that uses the same sensors as above in addition to a vision sensor (be it a kinect or some kind of a 2d Lidar) that localizes itself in a known map but has no idea of its whereabouts when it starts; I heard that the Particle Filter is used for that kind of work so I have 2 questions:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;1- Can I achieve the same thing using just the Kalman Filter?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;2- Can I use both of them so that the particle filters will be used until the robot has the highest certainty of a location then &quot;turn it off due to its high computational cost&quot; and feed that location into an EKF as an initial estimate?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="24250" LastActivityDate="2019-11-25T17:07:34.733" Title="Robot localization in a known map without knowing its initial position in that map" Tags="&lt;mobile-robot&gt;&lt;localization&gt;&lt;kalman-filter&gt;&lt;particle-filter&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19798" PostTypeId="2" ParentId="19797" CreationDate="2019-11-25T17:07:34.733" Score="0" Body="&lt;p&gt;Answers to questions:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) Yes you can use a Kalman filter. The trick to doing it is setting the initial covariance to be big enough to cover the whole map. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) This is also a viable approach. I would probably keep them separate as you described. One advanced trick you could do is that depending on the implementation of the particle filter each particle is an EKF. Once you reach a high enough certainty you could maybe just continue working off of that one particle. The separate approach ,however, sounds a lot easier and is probably the one you should use.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason that a particle filter is better for localization over an EKF is that it allows for multiple hypothesis. As you begin to acquire data you could have 3 separate valid locations in the map. The EKF approach will generally force you to only consider 1 of them as valid. If more evidence comes along later that invalidates that choice then you are screwed.&lt;/p&gt;&#xA;" OwnerUserId="15265" LastActivityDate="2019-11-25T17:07:34.733" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19799" PostTypeId="2" ParentId="19763" CreationDate="2019-11-25T18:02:53.863" Score="0" Body="&lt;p&gt;Try to use Gazebo. &#xA;&lt;a href=&quot;http://gazebosim.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://gazebosim.org/&lt;/a&gt;&#xA;It has an interface to ROS which makes development of control software easy. and note that ROS is only usable on LINUX.&lt;/p&gt;&#xA;" OwnerUserId="24252" LastActivityDate="2019-11-25T18:02:53.863" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19800" PostTypeId="1" CreationDate="2019-11-25T18:44:40.060" Score="0" ViewCount="20" Body="&lt;p&gt;What does term &quot;number of movement steps&quot; mean in multi-robot exploration?.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is a performance metric for comparing results like exploration time and energy consumed by robots during exploration. &lt;/p&gt;&#xA;" OwnerUserId="23445" LastEditorUserId="37" LastEditDate="2019-11-27T11:43:04.790" LastActivityDate="2019-11-27T11:43:04.790" Title="robot movement steps" Tags="&lt;mobile-robot&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19801" PostTypeId="2" ParentId="19763" CreationDate="2019-11-25T20:56:50.693" Score="0" Body="&lt;p&gt;Try to use V-REP, it is very straighforward to use and got a MATLAB and ROS interface. Is usable in WIndows, MAC and Linux. &lt;/p&gt;&#xA;" OwnerUserId="21229" LastActivityDate="2019-11-25T20:56:50.693" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19802" PostTypeId="2" ParentId="19796" CreationDate="2019-11-25T20:59:38.040" Score="1" Body="&lt;p&gt;Sensing the torque in a stepper motor is not a straightforward task. A method named Field Oriented Control is used to control the torque in a Stepper motor and several companies supply stepper motors with integrated controllers as Schneider and Nanotec. You can also look at mechaduino where they are also implementing a torque control on stepper motors, which they also try to align the energize of the coils to the rotor orientation. An external torque sensor I believe would be more expensive. &lt;/p&gt;&#xA;" OwnerUserId="21229" LastActivityDate="2019-11-25T20:59:38.040" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19803" PostTypeId="1" AcceptedAnswerId="19813" CreationDate="2019-11-25T21:53:20.653" Score="2" ViewCount="35" Body="&lt;p&gt;I have a &lt;a href=&quot;https://www.pololu.com/category/169/zumo-robot-for-arduino&quot; rel=&quot;nofollow noreferrer&quot;&gt;Zumo Shield&lt;/a&gt;. It is small and tracked, and contains two micro metal gear motors soldered to it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In theory, these motors are identical and do seem to rotate at the same speed. However, the left side seems to have considerably less torque than the right. The left side will stall on small obstacles and the robot ends up veering off course. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another test of turning force, if I set both motors to spin at the same speed, while the robot is off the floor, I can put my finger on the track and cause the left to stop with a lot less pressure than the right. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know it's never going to be perfect and I need some sort of feedback loop will be required to keep it straight however there is a considerable difference between the two.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the likely cause of this difference? Soldering? Motors? Gearing? Motor drivers?&#xA;How can I go about diagnosing and therefore fixing this problem?&lt;/p&gt;&#xA;" OwnerUserId="24253" LastEditorUserId="24253" LastEditDate="2019-11-25T22:12:26.300" LastActivityDate="2019-11-27T12:09:33.077" Title="Diagnosing a lower torque on one motor of a Zumo Robot" Tags="&lt;motor&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19804" PostTypeId="2" ParentId="19763" CreationDate="2019-11-25T21:56:25.713" Score="1" Body="&lt;p&gt;The Simulink and SimMechanics combination is a well suited one. You can add further SimScape elements for motors ot similar elements are needed. There is a Matlab demo on simiar topics &lt;a href=&quot;https://mathworks.com/help/physmod/sm/examples/3-roll-robotic-wrist-mechanism.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;https://mathworks.com/help/physmod/sm/examples/stewart-platform.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2019-11-25T21:56:25.713" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19805" PostTypeId="2" ParentId="19795" CreationDate="2019-11-25T23:01:13.050" Score="1" Body="&lt;p&gt;When you have one fast-moving source and want to fuse it with a slow-moving source, a &lt;a href=&quot;https://www.pieter-jan.com/node/11&quot; rel=&quot;nofollow noreferrer&quot;&gt;complimentary filter&lt;/a&gt; should be sufficient. Hopefully, it's a lot easier to understand than Kalman filters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are plenty of examples where they use a complimentary filter to combine accelerometer and Gyroscope. When you say the Z-Axis, I assume you mean vertical axis and can't use the accelerometer to work out gravity. It doesnt matter where you place the gyro, &lt;a href=&quot;https://en.wikipedia.org/wiki/Angular_velocity#Consistency&quot; rel=&quot;nofollow noreferrer&quot;&gt;the angular velocity is independent of the origin&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Gyro gives a measure of angular velocity, and from that, we calculate the position of the crane. However, there will be noise on that signal which will gradually cause the position to be wrong.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In a drone, the accelerometer can be used to get gravity direction i.e. down. However, when the drone is moving, we can't use it because it's measuring the acceleration due to the movement. You can think of that like the inaccuracy like the shaft encoder. Though it's not noisy like an accelerometer, it is inaccurate in the short term, but stable long term. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;These two sensors/measures of turn can be turned into an angle and combined. The Gyro/fast-moving source will go through a high-pass filter and the stable/slow shaft encoder can go through a low-pass filter and then added. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I enjoyed watching &lt;a href=&quot;https://www.youtube.com/watch?v=whSw42XddsU&quot; rel=&quot;nofollow noreferrer&quot;&gt;this video from Brian Douglas&lt;/a&gt; about the topic.&lt;/p&gt;&#xA;" OwnerUserId="24253" LastEditorUserId="24253" LastEditDate="2019-11-26T22:43:16.450" LastActivityDate="2019-11-26T22:43:16.450" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19806" PostTypeId="1" CreationDate="2019-11-26T15:44:33.943" Score="2" ViewCount="39" Body="&lt;p&gt;I have a trajectory planner, which calculates the trajectory assuming that the robot is following the planned trajectory. From sensors I get the position of the robot, which has an offset from the planned trajectory. I would like to define some limits, and when the &quot;error&quot; is over these limits I would like to send a reset signal to the trajectory planner in order to replan from the actual position of the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Measurements that I can use:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Position (x, y)&lt;/li&gt;&#xA;&lt;li&gt;Orientation ( &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt;)&lt;/li&gt;&#xA;&lt;li&gt;Velocity longitudinal (v)&lt;/li&gt;&#xA;&lt;li&gt;Acceleration longitudinal (a)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The robot is a car-like robot, so my thought goes like this:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Vertical distance &lt;span class=&quot;math-container&quot;&gt;$\Delta y$&lt;/span&gt;, has the highest priority, in order not to bump on obstacles.&lt;/li&gt;&#xA;&lt;li&gt;Distance from the point on trajectory &lt;span class=&quot;math-container&quot;&gt;$\sqrt{\delta x + \delta y} $&lt;/span&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$\Delta \theta$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;li&gt;Velocity and acceleration are not so important.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;First of all I would like to know if I am in the correct way about this assumptions, and if there is some literature that I could read on this topic. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second how can I determine the limits for this errors? I was thinking for y taking the half of the robots' width.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance&lt;/p&gt;&#xA;" OwnerUserId="15592" LastActivityDate="2019-11-26T15:44:33.943" Title="Trajectory tolerance limits" Tags="&lt;path-planning&gt;&lt;trajectory&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19807" PostTypeId="1" AcceptedAnswerId="19809" CreationDate="2019-11-26T18:07:08.360" Score="2" ViewCount="126" Body="&lt;p&gt;At the moment I try to understand Bundle Adjustment on a level to be able to implement it on my own. The major point I'm still confused at is the management of the landmarks. So, let's think of a few frames, that all share  some landmarks with each other (like in the image below).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/hl3QAm.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hl3QAm.png&quot; alt=&quot;Stolen from: SBA: A Software Package for Generic Sparse Bundle Adjustment, MANOLIS I. A. LOURAKIS and ANTONIS A. ARGYROS&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can triangulate the same corresponding feature in image 1 to image 2, from image 2 to image 3 and so forth. However, I get (slightly) different results for the same point in the world. I first tried it with fusing all the landmark estimates from the different triangulations (&lt;a href=&quot;https://softwareengineering.stackexchange.com/questions/399331/fuse-3d-points-in-bundle-adjustment&quot;&gt;see an older post&lt;/a&gt;). But, I'm not sure if that is really the way to go. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If my question is still a bit to unclear, please let me know and I will improve it. I'm looking forward to interesting answers. &lt;/p&gt;&#xA;" OwnerUserId="24251" LastActivityDate="2020-05-12T11:09:02.840" Title="How to handle landmarks in Bundle Adjustment?" Tags="&lt;slam&gt;&lt;computer-vision&gt;&lt;optimization&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19808" PostTypeId="2" ParentId="19784" CreationDate="2019-11-26T21:51:27.543" Score="0" Body="&lt;p&gt;Just a guess: 4096 consists of two bytes, maybe a wrong ordering or a big/little endian thing? (Sry, cannot comment due to to less reputation)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: Basically what Pete already said...&lt;/p&gt;&#xA;" OwnerUserId="24251" LastEditorUserId="24251" LastEditDate="2019-11-27T17:10:01.773" LastActivityDate="2019-11-27T17:10:01.773" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19809" PostTypeId="2" ParentId="19807" CreationDate="2019-11-26T22:15:06.193" Score="1" Body="&lt;p&gt;First thing to do is pick your World frame. This is your main frame where the 3D coordinates of your points and poses of your cameras will be. Typically the origin of this world frame is the pose of your first camera. You then triangulate every point with &lt;em&gt;all&lt;/em&gt; of the cameras that see it. A rough guess can be computed with an algorithm like DLT, and then refined with some non-linear optimization. Some source code for this can be found &lt;a href=&quot;https://github.com/ethz-asl/aslam_cv2/blob/master/aslam_cv_triangulation/include/aslam/triangulation/triangulation.h&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;(notice it has from N views triangulate). Make sure the output for this is actually in the world frame and not relative to some camera.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now put all of your camera poses and 3D points in a bundle adjustment problem. You have 2 sets of variables. Each &lt;em&gt;landmark&lt;/em&gt; is going to be connected to every &lt;em&gt;camera pose&lt;/em&gt; that views it via the reprojection error. Solve it using a non-linear least squares solver like &lt;a href=&quot;http://ceres-solver.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ceres&lt;/a&gt;. They even have a &lt;a href=&quot;https://github.com/ceres-solver/ceres-solver/blob/master/examples/simple_bundle_adjuster.cc&quot; rel=&quot;nofollow noreferrer&quot;&gt;basic tutorial&lt;/a&gt; with some given 3D points and camera poses, and reprojections.&lt;/p&gt;&#xA;" OwnerUserId="15265" LastActivityDate="2019-11-26T22:15:06.193" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19810" PostTypeId="1" CreationDate="2019-11-26T22:55:27.370" Score="0" ViewCount="33" Body="&lt;p&gt;I'm reading &lt;em&gt;Theory of Applied Robotics, 2nd edition&lt;/em&gt; by Jazar. The author states that articulated configuration has the following form: &lt;span class=&quot;math-container&quot;&gt;$R \vdash R \perp R$&lt;/span&gt; where &lt;span class=&quot;math-container&quot;&gt;$R$&lt;/span&gt; stands for revolute joint, &lt;span class=&quot;math-container&quot;&gt;$\vdash$&lt;/span&gt; represents that 2 adjacent joint axes are orthogonal (intersect at right angle) and &lt;span class=&quot;math-container&quot;&gt;$\perp$&lt;/span&gt; represents that 2 adjacent joint axes are perpendicular (they close right angle with common normal). The example of articulated configuration is given in the image&#xA;&lt;a href=&quot;https://i.stack.imgur.com/R12FF.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/R12FF.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So by looking at the image axes &lt;span class=&quot;math-container&quot;&gt;$z_1$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$z_2$&lt;/span&gt; are supposed to be perpendicular but they look parallel to me. What am I missing ?&lt;/p&gt;&#xA;" OwnerUserId="24260" LastActivityDate="2019-12-01T16:14:46.580" Title="Articulated configuration" Tags="&lt;manipulator&gt;&lt;theory&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19811" PostTypeId="2" ParentId="19785" CreationDate="2019-11-27T07:39:48.773" Score="0" Body="&lt;p&gt;referring to your equation &#xA;&lt;span class=&quot;math-container&quot;&gt;$$ \boldsymbol{a}=\boldsymbol{Rb}+\boldsymbol{t} ,$$&lt;/span&gt;&#xA;the position measurement would be &lt;span class=&quot;math-container&quot;&gt;$\boldsymbol{t}$&lt;/span&gt; whilst the orientation measurement would be &lt;span class=&quot;math-container&quot;&gt;$\boldsymbol{R}$&lt;/span&gt;. &#xA;These quantities can be obtained in different ways, e.g. position could be measured using GPS while orientation could be obtained using an IMU.&#xA;I hope this helps,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S. feel free to ask further details, I've written my master thesis about a similar estimator.&lt;/p&gt;&#xA;" OwnerUserId="18341" LastActivityDate="2019-11-27T07:39:48.773" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19812" PostTypeId="2" ParentId="19810" CreationDate="2019-11-27T11:42:20.150" Score="1" Body="&lt;p&gt;Seems that the book has an error. You are right, they should correct that. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the drawing it can be seen that those two z-axis are indeed parallel. I recommend that you considered them parallel and try to draw them to see that it fits with the image. &lt;/p&gt;&#xA;" OwnerUserId="21229" LastEditorUserId="21229" LastEditDate="2019-12-01T16:14:46.580" LastActivityDate="2019-12-01T16:14:46.580" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19813" PostTypeId="2" ParentId="19803" CreationDate="2019-11-27T12:09:33.077" Score="1" Body="&lt;p&gt;This is not a complete answer, but one generic technique for diagnosing differences between devices which should be identical is &lt;em&gt;divide and conquer&lt;/em&gt;. Swap items until you see where the problem follows.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For instance, if you swap the motors and the problem stays with the motor, you probably have a faulty motor. If a different motor with the same amplifier exhibits the same problem, it's probably the motor driver. If swapping them and neither of them works properly, or both work, it may be (or have been) the soldering.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you have identified the subsystem which is at fault, you can then continue to investigate and find a more specific subsytem or component.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For instance, if it appears to be the motor drivers, you can try swapping the amplifier chips. If the problem follows the chip, replace the faulty one, if both chips work as well as each other, try measuring voltages across the chip, current flowing through the chip, the resistances seen between the pins of the chip and the motor and power supply connectors etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similarly with the motor module, you can try swapping wheels (as you've done) gearboxes, encoders (if they have them) and so on.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The key is to build a hypothesis about what might be wrong, conceive of a test which can prove (test) that hypothesis and then use the data from that test to either identify the component which needs to be fixed, replaced or investigated next.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Rinse and repeat until the root cause is found.&lt;/p&gt;&#xA;" OwnerUserId="37" LastActivityDate="2019-11-27T12:09:33.077" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19814" PostTypeId="1" CreationDate="2019-11-27T19:57:08.133" Score="3" ViewCount="72" Body="&lt;p&gt;I am trying to make robot drive around the room, avoiding obstacles with pathfinding. The problem is I get few waypoints from pathfinding algorithm for robot to drive to (green dots), but it drive a bit too close to corners. I try avoiding that by using blur and threshold, to make walls thicker for the algorithm, but it causes problems with different size walls(as in example picture, blur is these black dots). How do I make my robot drive in the middle as possible of room, to avoid walls and be as far as poosible (the orange line) from the obstacles?&#xA;&lt;a href=&quot;https://i.stack.imgur.com/brHGE.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/brHGE.png&quot; alt=&quot;example&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="24267" LastActivityDate="2021-04-22T11:03:13.630" Title="Make robot drive as far from obstacles as possible" Tags="&lt;slam&gt;&lt;python&gt;&lt;c++&gt;&lt;opencv&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19816" PostTypeId="1" CreationDate="2019-11-28T04:28:16.627" Score="0" ViewCount="21" Body="&lt;p&gt;I know that reinforcement learning has been used to solve the &lt;a href=&quot;https://en.wikipedia.org/wiki/Inverted_pendulum&quot; rel=&quot;nofollow noreferrer&quot;&gt;inverted pendulum&lt;/a&gt; problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can supervised learning be used to solve the inverted pendulum problem?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, there could be an interface (e.g. a joystick) with the cart-pole system, which the human can use to balance the pole and, at the same time, collect a dataset for supervised learning. Has this been done before?&lt;/p&gt;&#xA;" OwnerUserId="22818" LastActivityDate="2019-11-28T04:28:16.627" Title="Can supervised learning be used to solve the inverted pendulum problem?" Tags="&lt;machine-learning&gt;&lt;reinforcement-learning&gt;" AnswerCount="0" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="19817" PostTypeId="1" CreationDate="2019-11-28T17:34:56.203" Score="0" ViewCount="66" Body="&lt;p&gt;I am wondering how to go about localising a robot in a rectangle drawn on a smooth surface. Basically, there is a tape that lines the shape of the rectangle, and the color of this tape is unique in the scene. I have a camera mounted on the robot. So my question is, is it possible using image processing, and knowing the size of the rectangle, to localise the robot within this rectangle so it may navigate the area of the rectangle. Obviously the robot is driving in the same plane as the rectangle. Thanks&lt;/p&gt;&#xA;" OwnerUserId="23873" LastActivityDate="2021-04-22T17:00:30.073" Title="Localisation of Robot in a Rectangle" Tags="&lt;localization&gt;&lt;mapping&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19818" PostTypeId="2" ParentId="19814" CreationDate="2019-11-29T08:20:35.160" Score="0" Body="&lt;p&gt;Some hints:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Use Minskowski sums to &quot;grow&quot; the obstacles taking into account the shape/orientation of the robot.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Not easy to understand and implement, BUT already implemented in geometrical algorithm libraries.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;After finding the path, postprocess the output. Try to use a smoother for the path, like voronoi diagram in order to go to the middle of the corridor.&lt;/p&gt;&#xA;" OwnerUserId="15592" LastActivityDate="2019-11-29T08:20:35.160" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19819" PostTypeId="1" CreationDate="2019-11-29T09:59:01.993" Score="2" ViewCount="520" Body="&lt;p&gt;I am developing GUI c++ program to test path planning algorithms: A*, Dijkstra, ....etc in occupancy grid map.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found many open source codes , but I need to modify them to design a GUI for testing purposes since I am trying to develop new algorithm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I noticed that the c++ implementations (which is not for ROS) do not consider the rotation or the orientation for robot when deciding the next cell or movement, they only use x and y values with up, down, left, right movements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it enough to consider x and y only?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What about the rotation when I want to use my code in ROS? How to consider it in this case?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks a lot in advance,&lt;/p&gt;&#xA;" OwnerUserId="24278" LastActivityDate="2020-12-26T23:05:45.557" Title="How to implement path planning algorithm considering orientation?" Tags="&lt;path-planning&gt;&lt;c++&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19820" PostTypeId="2" ParentId="19817" CreationDate="2019-11-29T13:23:48.330" Score="0" Body="&lt;p&gt;If you know the color and also how long the line is then, you can detect it (easy color detection with opencv) and estimate the distance between the line and the camera. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basic concept you find how many pixels the line is occuping on the picture, you can find the focal length of your camera (from the manual) and you know also the actual size of the line in the real world so you can estimate the distance of the camera to the line.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/dOsOK.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dOsOK.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;as you can see in the picture&lt;/p&gt;&#xA;" OwnerUserId="15592" LastActivityDate="2019-11-29T13:23:48.330" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19821" PostTypeId="1" CreationDate="2019-11-29T15:04:10.503" Score="1" ViewCount="141" Body="&lt;p&gt;So I'm working on a project and it involves making a raspberry pi car, be it from scratch or with the help of can rc car. I chose the latter. Now the problem is I don't really have servo multiplexers being sold anywhere in my country, Bangladesh, so I have no idea how to get a hold of them. I read that their main function was to convert radio signals to PWM signals so that it could be sent to either the servo or the servo driver which would than be sent to the servo. But my project really require the radio control portion of the car, as I would like to control it through wifi with the help of my computer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So I wanna know firstly and clearly, what is the main function of a servo multiplexer?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Secondly, since I'm not planning on using any sort of radio communication with the car and the remote control but only plan on controlling the car using wifi and my computer, will I really need a servo multiplexer?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you&lt;/p&gt;&#xA;" OwnerUserId="22212" LastEditorUserId="22212" LastEditDate="2019-11-29T15:18:24.497" LastActivityDate="2020-08-25T22:33:05.700" Title="I wanna make a raspberry pi car using an RC car. I would like to know if the servo multiplexer is necessary?" Tags="&lt;mobile-robot&gt;&lt;wheeled-robot&gt;&lt;raspberry-pi&gt;&lt;servomotor&gt;&lt;rcservo&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19822" PostTypeId="1" CreationDate="2019-11-29T17:36:57.643" Score="2" ViewCount="48" Body="&lt;p&gt;I'm trying to run multiple instances (18 instances) of gazebo in parallel processes on my system to do reinforcement learning. However i'm running into an issue where the robot model in some of the instances becomes corrupted, as in, the wheels becomes detached from the robot body for some of the gazebo instances. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;With some trouble shooting, I think the problem might due to high CPU load, as I launch the gazebo simulations simultaneously. The problem seemed to be alleviated when i added some sleep time between launching each gazebo instance and reduced the number of instances. However, I don't know if this was the actual cause of my issue, and if there is a proper fix that I could apply to this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Video 1: &lt;a href=&quot;https://youtu.be/p5kU0BICVRI&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://youtu.be/p5kU0BICVRI&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Video 2: &lt;a href=&quot;https://youtu.be/47Sd_2S1-Ls&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://youtu.be/47Sd_2S1-Ls&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/C6F2W.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/C6F2W.png&quot; alt=&quot;robot model breaking breaking&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/HD56l.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HD56l.png&quot; alt=&quot;robot model breaking&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="21333" LastEditorUserId="21333" LastEditDate="2019-11-29T20:09:15.310" LastActivityDate="2019-11-29T20:09:15.310" Title="Corrupted Robot Model in Gazebo" Tags="&lt;ros&gt;&lt;gazebo&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19823" PostTypeId="1" CreationDate="2019-11-30T07:30:22.077" Score="0" ViewCount="55" Body="&lt;p&gt;I’m developing a differential robot. My wheeled robot has two castor wheels in the back and two driven wheels in the front. The motor controller I’m using can handle two motors each with 90 cpr. Each motor has a PI controller built-in in the motor controller to control how much current (torque) goes to the motors. I have a Python code that sends ticks/s to the motor controller for each motor. If I want the robot to go straight, I just send the same ticks for both of the motors. I know that is impossible to achieve perfect straight line. The problem is that I’m not able to maneuver the rover because whenever I want to go straight (sending same speed for both motors), it ends up rotating in place to the right. Therefore, the left side is moving way quicker than the right ride. Could it be and issue with the tuning? I have the same value of the PI constants (KP and KI) for both motors. I was thinking in implementing a PID controller in the Python side to have another closed loop system besides the one in the motor controller. Is it recommended this approach? What else I can try?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Best,&lt;/p&gt;&#xA;" OwnerUserId="15240" LastActivityDate="2019-11-30T07:30:22.077" Title="How to make a diff robot (2 traction wheels front and 2 castor wheels back) to go straight?" Tags="&lt;pid&gt;&lt;wheeled-robot&gt;&lt;torque&gt;&lt;differential-drive&gt;" AnswerCount="0" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="19824" PostTypeId="1" AcceptedAnswerId="19838" CreationDate="2019-11-30T19:16:54.207" Score="0" ViewCount="41" Body="&lt;p&gt;This question may be hard to explain or understand. I am studying Kalman Filters &lt;a href=&quot;https://github.com/rlabbe/Kalman-and-Bayesian-Filters-in-Python/blob/master/02-Discrete-Bayes.ipynb&quot; rel=&quot;nofollow noreferrer&quot;&gt;using this excellent resource&lt;/a&gt;. It divides up the process of a Bayesian Filter into two major steps, belief -&gt; prior and prior -&gt; posterior. There is an extended example involving a hallway with doors and a robot (dog) that we are trying to localize. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;We start with a 'belief' of where the robot is along the hallway. In the first step we take that 'belief' and incorporate information from a sensor with respect to the environment (e.g. is what is the probability that it is looking at door and from that it comes up with a preliminary probability distribution of where the robot is along the hallway, which is called the 'prior'. Now the robot moves 0 1 or 2 steps. Using that probability distribution, we update the distribution of where the robot might be - this is called the 'posterior'. The cycle is repeated using the posterior of one step as the 'belief' of the next cycle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ok so far? Please correct me if I am stating it wrong.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is this: the sensing of the door has a probability of being accurate, in other words, the sensor has a certain probability of giving an erroneous reading. And the sensing of the motion also has a chance to be inaccurate, in other words, the robot might think it moved one spot but it really didn't at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This may be overthinking it but I want to understand why those two sources of error are treated differently or specially. Why do they have different names (belief, prior, posterior), why do they have to be in that order, why couldn't you have a third measurement which also could have an error factor?&lt;/p&gt;&#xA;" OwnerUserId="17190" LastEditorUserId="17190" LastEditDate="2019-12-01T02:10:14.027" LastActivityDate="2019-12-03T19:12:55.840" Title="In a discrete bayes filter, why is noise in the sensor treated differently than noise in the motion" Tags="&lt;filter&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19825" PostTypeId="1" CreationDate="2019-11-30T22:55:44.090" Score="3" ViewCount="41" Body="&lt;p&gt;We all know that the fly time of a quadcopter is proportional to its weight (and the propellers size, etc), and a high capacity battery is heavy, but also a high capacity battery would make the fly time larger.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need a chart or comparison between battery capacity, battery weight, fly time and propellers size for a quadcopter. Or comparison between some of them. I couldn't find that, so any link or help would be appreciated&lt;/p&gt;&#xA;" OwnerUserId="23438" LastActivityDate="2019-11-30T22:55:44.090" Title="Battery weight in quadcopter" Tags="&lt;quadcopter&gt;&lt;uav&gt;" AnswerCount="0" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19826" PostTypeId="1" CreationDate="2019-12-01T04:29:34.097" Score="2" ViewCount="78" Body="&lt;p&gt;Sorry if this is a noobie question, it's my first time posting on this forum...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've been trying to mod an old Roomba 400 series (model #4220) by adding a raspberry pi to it. (I know real original huh?) I have the raspberry pi communicating over serial with the &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/B06XDPMY4Z&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;EZSync018&lt;/a&gt; cable. I have everything working, except that I can't seem to wake the roomba up after it goes to sleep. I try pulsing the DD (pin 5) with pyserial like so&lt;/p&gt;&#xA;&#xA;&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;import serial&#xA;import time&#xA;&#xA;ser = serial.Serial(&quot;/dev/ttyUSB0&quot;,57600)&#xA;&#xA;ser.setRTS(0)&#xA;time.sleep(0.1)&#xA;ser.setRTS(1)&#xA;time.sleep(2)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Even sending the &lt;em&gt;START&lt;/em&gt; or &lt;em&gt;CONTROL&lt;/em&gt; commands don't seem to do anything if the roomba is asleep. If I press the power button it turns on and accepts commands normally, but I want it to be able to wake up on it's own.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a suspicion that the cable might have a wire switched, but I wanted to post here to see if anyone else had any experience or ideas before I mutilate a perfectly good sync cable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help / feedback is greatly appreciated! Thanks!&lt;/p&gt;&#xA;" OwnerUserId="23493" LastActivityDate="2019-12-01T04:29:34.097" Title="Waking Up Roomba Over Serial" Tags="&lt;raspberry-pi&gt;&lt;irobot-create&gt;&lt;serial&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19828" PostTypeId="1" CreationDate="2019-12-01T04:36:51.620" Score="0" ViewCount="54" Body="&lt;p&gt;Why is it necessary to connect signal pins 2 and 3 via jumper on an APM2.8 board to enable PPM.&#xA;I am using flysky  fs-ia6b receiver with the APM mentioned above.&#xA;Pins 2 and 3 control pitch and throttle respectively so how does shorting these two pins helps with PPM and why not roll (pin1) and yaw (pin4) require such shorting. &lt;/p&gt;&#xA;" OwnerUserId="24019" LastEditorUserId="24019" LastEditDate="2019-12-06T14:47:49.537" LastActivityDate="2019-12-06T14:47:49.537" Title="Why do we connect pins 2 and 3 on APM to enable PPM" Tags="&lt;quadcopter&gt;&lt;uav&gt;&lt;ardupilot&gt;" AnswerCount="0" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="19829" PostTypeId="2" ParentId="521" CreationDate="2019-12-01T09:02:50.857" Score="0" Body="&lt;p&gt;As far as I understand your question that you want the Jacobian matrix for the 6 DOF joint.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let me start with very basics of robotics. You are in the vary initial phase of robotics learning. You need to understand that each joint represent a single DOF either it would be revolute or prismatic joint. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as spherical joint is concern, it can be converted in to 3 revolute joint with three mutually perpendicular axis. So, now you have simplified your spherical joint.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Moving forward to Jacobian matrix. It contain  6 rows. First 3 rows represents orientation and last 3 rows indicated position with reference to a particular coordinate system. Each column in matrix indicate a single joint. So the number of joint/DOF you have the same number column you have in Jacobian matrix. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the more clear view to your question:&#xA;A single joint never fulfil more than one DOF, because it complicates the joint and precise control will never achieve. Even if we consider hypothetically a joint with more than one DOF, you need to convert that joint into multiple joints with 1 DOF each to simplify the mathematics and solution. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ideally 6 DOF robot with 6 revolute joint works for majority on the real problems. But as per your question you considered 6 joint robot with each joint having 3 DOF that makes 18 DOF robot. This will give redundant DOF (i.e. 18-6= 12 redundant DOF). So, to reach robot end-effector to any location with any orientation you will have infinite different solutions (solution means rotation of each joint). So solve this kind of inverse kinematics problem you will require iterative method of inverse kinematics. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope, I have answered your question more clearly. To learn basic robotics you can refer John J. Craig - Introduction to Robotics Mechanics and Control -Pearson Education, Inc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regards,&#xA;Manan Kalasariya&lt;/p&gt;&#xA;" OwnerUserId="19034" LastActivityDate="2019-12-01T09:02:50.857" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19830" PostTypeId="1" CreationDate="2019-12-01T23:40:59.737" Score="0" ViewCount="32" Body="&lt;p&gt;I want to measure the airspeed on a flying vehicle and get the data with a microcontroller. Note that, there will not be any control mechanism on the flying object, it will be flying mechanicaly/passively, I mean no flight controller or something like that will be present.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I could not understand whether there is a sensor to measure the airspeed directly or is airspeed something you analyze by using other datas(temperature, pressure etc.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I saw there are sensors which are sold as &quot;airspeed sensor&quot; however it is not so common that I cannot find examples in which the incoming data is shown.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anybody ever experienced with this issue may lighten me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance.&lt;/p&gt;&#xA;" OwnerUserId="23502" LastActivityDate="2019-12-01T23:40:59.737" Title="How to obtain airspeed data" Tags="&lt;sensors&gt;&lt;sensor-fusion&gt;" AnswerCount="0" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="19831" PostTypeId="2" ParentId="19819" CreationDate="2019-12-02T00:49:47.647" Score="1" Body="&lt;p&gt;x,y may not be enough depends on your vehicle model. You need to use Hybrid A* in case you are using car like model. Refers to the following paper.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;paper: Practical Search Techniques in Path Planning for Autonomous Driving&lt;/p&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2019-12-02T00:49:47.647" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19832" PostTypeId="1" CreationDate="2019-12-02T05:43:46.190" Score="0" ViewCount="208" Body="&lt;p&gt;I am building a nano quadcopter in X-Configuration with coreless DC motors, 65mm 2 blade propellers and a 1S Lipo battery (860mAh, 25C). The weight of the assembly is around 70g in total.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am writing code for the flight controller of the quadcopter from scratch. However, even after multiple attempts, I am just not able to get the quadcopter PID controller to be stable. Currently, I am trying to tune just the controller for the pitch value. But even after trying lots of values and methods like the Zeigler-Nichols method the controller does not become stable. It always ends up unstable and oscillating about the setpoint.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could any of the following reasons be responsible for this:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Some quick measurements and tests on the motors indicated that each motor could generate a maximum of 25g thrust at max voltage(of the battery) 4.2V. So four motors would generate a max total of 100g. Could it be that the quadcopter is too heavy at 70g for these motor-prop pairs?&lt;/li&gt;&#xA;&lt;li&gt;I am tuning the output of the PID controller is in terms of voltage in the range of 0 - battery_voltage and this is then converted to PWM values. Could this be leading to problems?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;If not these then what else could be leading to an unstable controller? I am stuck on this for a long time now. I would greatly appreciate any help. &lt;/p&gt;&#xA;" OwnerUserId="24289" LastEditorUserId="851" LastEditDate="2019-12-02T16:47:28.993" LastActivityDate="2019-12-02T16:47:28.993" Title="Why am I unable to tune the PID parameters on my quadcopter?" Tags="&lt;control&gt;&lt;quadcopter&gt;&lt;arduino&gt;&lt;pid&gt;&lt;flight-controller&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19833" PostTypeId="2" ParentId="19819" CreationDate="2019-12-02T12:55:40.590" Score="0" Body="&lt;p&gt;Unfortunately, path planning is more complicated to implement than other algorithm within computer science. If the subject would be a simple audio compression algorithm (mp3) or an array sorting (quicksort) technique, it's possible to discuss the details of how to realize a certain algorithm in C++. In contrast, path planning is a problem from the Artificial Intelligence domain which prevents that the algorithm can be realized in a framework or as a library.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the concrete problem of an orientation aware path planner some papers were published in the past. The common strategy is to use domain knowledge as a heuristic guidance for a sampling based planner. This description means anything and nothing at the same time. A more elaborated starting point in developing an algorithm from scratch is to program only a path planner annotation system which is able to recognize actions of a human user who controls the robot with a joystick. Such a system would detect, if the robot changes it's direction and what the target location would be. Unfortunately, the task is strongly connected to probabilistic robotics and finite state machine parsers which results into a full blown phd thesis writing projects which goes over 3 years and longer.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2019-12-02T12:55:40.590" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19834" PostTypeId="1" AcceptedAnswerId="19836" CreationDate="2019-12-02T19:30:50.150" Score="3" ViewCount="55" Body="&lt;p&gt;Im currently designing a small robot that uses  2 of &lt;a href=&quot;https://www.servocity.com/227-rpm-mini-econ-gear-motor&quot; rel=&quot;nofollow noreferrer&quot;&gt;these 12v motors&lt;/a&gt;, which are manage by the &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/B014KMHSW6&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;L298N motor controller board&lt;/a&gt;, and is being controlled overall by an arduino. Now I have come across an &lt;a href=&quot;https://www.societyofrobots.com/schematics_powerregulation.shtml&quot; rel=&quot;nofollow noreferrer&quot;&gt;article&lt;/a&gt;(Scroll to bottom after clicking link for the schematic of what I am looking at) talking about powering the robot. It talks about using a switching regulator to stabilize the voltage going to the motors, but also has a disclaimer saying switching regulators uses about 1-2v. Now I am currently looking at &lt;a href=&quot;https://www.servocity.com/12v-6000mah-li-ion-power-bank-w-charger&quot; rel=&quot;nofollow noreferrer&quot;&gt;this 12v li-ion battery&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So one of my question are, will I need to bump up to a 15v battery because of the voltage drop across the switching regulator?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also want the battery to last as long as possible so efficiency is important.&#xA;And when it comes to efficiency, then it seems like it would waste a lot of power to use a voltage regulator to drop the voltage to 9 volts for the arduino (which already has a regulator built in, but only up to 12v). I know with this at least I can add 9v battery for the arduino alone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So overall, how do I maximize efficiency while ensuring the motors and arduino get the voltage they need&lt;/p&gt;&#xA;" OwnerUserId="24293" LastActivityDate="2019-12-02T22:18:21.627" Title="What Battery Voltage to use?" Tags="&lt;arduino&gt;&lt;motor&gt;&lt;battery&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19835" PostTypeId="2" ParentId="19819" CreationDate="2019-12-02T21:42:46.500" Score="1" Body="&lt;p&gt;You can have a look at Hybrid A*, a lot more complicated than normal A*, but it takes into account the orientation. Here the &lt;a href=&quot;https://d17h27t6h515a5.cloudfront.net/topher/2017/July/595fe838_junior-the-stanford-entry-in-the-urban-challenge/junior-the-stanford-entry-in-the-urban-challenge.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;paper&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="15592" LastActivityDate="2019-12-02T21:42:46.500" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19836" PostTypeId="2" ParentId="19834" CreationDate="2019-12-02T22:18:21.627" Score="2" Body="&lt;p&gt;A few things going on here. First of all -- voltage != efficiency (at least not necessarily). Efficiency is really a measure of total power output which is &lt;span class=&quot;math-container&quot;&gt;$I \cdot V$&lt;/span&gt; (where I is current). Next, your 12V battery isn't 12V, it's got an operating range (from your link) of 12.6 to 8.4V, and I assume a typical voltage somewhere in the 11s. That means that based on charge level, it'll range from 12.6 (completely full) to 8.4 (completely empty) and for the most part be somewhere around 11.1 (12.6 / 4.2 is 3, which leads me to believe that it's a 3S battery which will have a nominal voltage of 3.7*3 or 11.1). All of that means that if you need &lt;em&gt;exactly&lt;/em&gt; 12V, you won't have it most of the time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The standard way to do this is to get a battery that's at whatever minimum charge level you want is high enough that a voltage regulator still has room to bring it down to a stable 12V. In this case, it would likely mean going to a 4S battery (which would have a nominal voltage of 14.8), and then bucking it down to 12.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Back to the efficiency question - that mostly comes down to the voltage regulator. Linear regulators are very cheap and simple, but very inefficient - their power loss is directly proportional to the voltage drop (so going from 12V to 6V would waste half the power as heat). A switching regulator is generally a lot more efficient (can be high 80s low 90s % efficiency), and can both increase (boost) and decrease (buck) the source voltage. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally - the voltage regulator on your Arduino is an LDO, which is inefficient. You're better off using a switching regulator and feeding that into the RAW pin on the Arduino.&lt;/p&gt;&#xA;" OwnerUserId="6782" LastActivityDate="2019-12-02T22:18:21.627" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19837" PostTypeId="1" CreationDate="2019-12-03T12:41:54.177" Score="3" ViewCount="44" Body="&lt;p&gt;Together with a friend of mine and my professor, we were able to build a team and come up with our own self driving rc car.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Due to time we didn’t manage to apply for Carolo-Cup, which is a very good competition where teams from all over the country participate with their own self driving cars.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know if there is another autonomous driving rc Car competition in Germany that would take place in early phase of 2020 ?&lt;/p&gt;&#xA;" OwnerUserId="24296" LastEditorUserId="37" LastEditDate="2019-12-03T12:57:11.550" LastActivityDate="2019-12-03T21:13:43.850" Title="Autonomous RC Car Competitions in germany" Tags="&lt;autonomous-car&gt;&lt;self-driving&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19838" PostTypeId="2" ParentId="19824" CreationDate="2019-12-03T19:12:55.840" Score="1" Body="&lt;p&gt;The reason the two sources of error are treated differently is because.. they are different. To some extent, this is a matter of terminology. Imagine you're walking in a room where the lights keep flickering. Let's say you take five steps towards a door in the dark, and you can &lt;strong&gt;predict&lt;/strong&gt; how far you might have walked in meters based on muscle memory - but you're very likely to be off by a bit. This is your belief, or a &lt;em&gt;prior&lt;/em&gt;. Your internal conversion of &quot;footsteps-&gt;how close I am to the door&quot; is the 'system model', or 'process model'. While this is technically a type of measurement, you are not explicitly using external information. When the lights do flicker on, you might notice you're much closer to the wall than you'd initially thought. You take this &lt;em&gt;measurement&lt;/em&gt;, and &lt;strong&gt;update&lt;/strong&gt; your belief: i.e., convert the prior to a &lt;em&gt;posterior&lt;/em&gt;. By doing this update, you've effectively reduced the error in your own position estimate. This predict-&gt;update cycle is the crux of a Kalman filter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your robot scenario, it is very likely that the robot might have very expensive, accurate encoders that can measure ego-motion (proprioceptive sensing) very well, but a cheap camera or a rangefinder that outputs erroneous measurements of the environment (exteroceptive sensing). When trying to describe the error characteristics of a system, it is conventional to use data from a spec sheet or something similar, that affords you some information as to the error thresholds of the measured quantity, and thus, the two error sources could have different variances. Hence, when going through the predict/update steps of the Kalman filter, it is important to describe the error characteristics for both the steps accurately. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And yes, you can have as many measurements as you want, each with a different source of error. In this case, the Kalman filter cycle would look like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;predict&#xA;update from sensor 1&#xA;update from sensor 2&#xA;.&#xA;.&#xA;update from sensor k&#xA;predict&#xA;update from sensor 1&#xA;&amp;lt;so on&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="10310" LastActivityDate="2019-12-03T19:12:55.840" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19839" PostTypeId="2" ParentId="19837" CreationDate="2019-12-03T21:13:43.850" Score="2" Body="&lt;p&gt;You can find more info about many kinds competitions &lt;a href=&quot;https://diyrobocars.com/autonomous-racing-leaguescompetitions/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="14806" LastActivityDate="2019-12-03T21:13:43.850" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19840" PostTypeId="1" CreationDate="2019-12-03T22:50:40.830" Score="0" ViewCount="37" Body="&lt;p&gt;Below is my code. All values of theta, d, a and alpha are known. &#xA;How should I define T00, T01, and so on?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;function [T] = dhtransform(theta, d, a, alpha)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;T = [cosd(theta) -sind(theta) * cosd(alpha) sind(theta) * sind(alpha) a * cosd(theta);&#xA;     sind(theta) cosd(theta) * cosd(alpha)  -cosd(theta) * sind(alpha) a * sind(theta);&#xA;     0,sind(alpha),cosd(alpha),d;&#xA;     0,0,0,1];&lt;/p&gt;&#xA;&#xA;&lt;p&gt;end&lt;/p&gt;&#xA;&#xA;&lt;p&gt;T00 = [1 0 0 0; 0 1 0 0; 0 0 1 0; 0 0 0 1];&#xA;T01 = dhtransform(30, 10.25, 0, 90 );&#xA;T12 = dhtransform(45, 0, 9, 0);&#xA;T23 = dhtransform(-90,0, 9, 0);&#xA;T34 = dhtransform(45,0, 0, 90);&#xA;T45 = dhtransform(60, 6.25, 0, 0);&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Endeffector = T00 * T01 * T12 * T23 * T34 * T45;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;end&lt;/p&gt;&#xA;" OwnerUserId="24302" LastActivityDate="2019-12-03T22:50:40.830" Title="DH parameters to compute the transformation matrix" Tags="&lt;dh-parameters&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19841" PostTypeId="2" ParentId="19821" CreationDate="2019-12-03T23:45:19.893" Score="1" Body="&lt;p&gt;The thing that 'convert[s] radio signals to PWM signals' is usually called a receiver.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A servo multiplexer such as &lt;a href=&quot;https://www.pololu.com/product/721&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.pololu.com/product/721&lt;/a&gt; switches a bank of servos from being controlled by one source to being controlled by another source.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the raspberry pi is mounted in the car and will be the only thing controlling it, you don't need either, but you will need something to allow the pi to control at least two servos. There are boards to do this, many based on PCA9685 chips, though for a simple car you only need two channels and could do it with a few components.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you do want to be able to switch between the original RC controller and the raspberry pi on the fly, then you would need the multiplexer to do that, but it would only work if the controller has a spare channel to do so.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This assumes it's the sort of RC car with a receiver, and a proportional servo for steering, and a ESC for motor control, both controlled by PWM. Cheaper cars with integrated electronics will use an H-bridge to directly power the DC motor and often a second H-bridge for steering, where it only has left, right or straight ahead control. In that case a robot board with two H-bridges will suffice.&lt;/p&gt;&#xA;" OwnerUserId="1321" LastEditorUserId="1321" LastEditDate="2019-12-05T14:56:41.640" LastActivityDate="2019-12-05T14:56:41.640" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19843" PostTypeId="1" AcceptedAnswerId="19869" CreationDate="2019-12-04T05:45:51.700" Score="0" ViewCount="68" Body="&lt;p&gt;Is it wise / possible to use multithreading to handle control system on robot?&#xA;For example, a line follower robot with PID control flowchart would be:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;read_sensor()&lt;/em&gt; -&gt; &lt;em&gt;calculate_control()&lt;/em&gt; -&gt; &lt;em&gt;set_actuator_value()&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The control system will be much like this : &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void calculate_control(){&#xA;last_error = error&#xA;error = reference - sensorval&#xA;&#xA;//calculation&#xA;out_control = k1*error + k2*last_error + k3*last_out_control&#xA;last_out_control = out_control&#xA;//.. ...&#xA;//.. ..&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;What if the sensor I'd be using has high reading delay (example : image processing based). Should it follow the same flowchart or should I use multithreading so that while the sensor value is not updated, control system keeps running with updated value (because last_out_control will keeps changing).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;ps&lt;/strong&gt;:&#xA;changing the procedure for calculating control value is not possible. I'm just looking for input and suggestion to optimally integrates the system.&lt;/p&gt;&#xA;" OwnerUserId="15321" LastEditorUserId="15321" LastEditDate="2019-12-04T05:52:20.770" LastActivityDate="2019-12-12T10:18:35.217" Title="Multithreading on robot control" Tags="&lt;control&gt;&lt;algorithm&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19845" PostTypeId="1" AcceptedAnswerId="20610" CreationDate="2019-12-04T18:12:41.283" Score="3" ViewCount="315" Body="&lt;p&gt;This is probably a noob question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But as of right &lt;strong&gt;now I am having difficulty converting from the Modified DH to a Standard DH parameters&lt;/strong&gt; for the Franka Emika Panda. I need standard because it allows me to avoid recoding a lot of my other functions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The modified DH parameters are provided in the following link:&#xA;&lt;a href=&quot;https://frankaemika.github.io/docs/control_parameters.html#constants&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://frankaemika.github.io/docs/control_parameters.html#constants&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    Joint   a(m)     d(m)     α(rad)   θ(rad)&#xA;------------------------------------------&#xA;Joint 1     0        0.333    0         θ1*&#xA;Joint 2     0        0        −π/2      θ2*&#xA;Joint 3     0        0.316    π/2       θ3*&#xA;Joint 4     0.0825   0        π/2        θ4*&#xA;Joint 5     -0.0825  0.384    −π/2       θ5*&#xA;Joint 6     0        0        π/2        θ6*&#xA;Joint 7     0.088    0        π/2        θ7*&#xA;Flange      0        0.107    0         0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/jAbiy.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/jAbiy.png&quot; alt=&quot;Franka Emika Panda in MDH&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suspect my brain has frozen in favor of idiocy as I tried finding the parameters by doing it by hand, but right now I am consistently getting something that doesn't look right is there someone who can help me out? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;And to the bigger question: is there like an efficient way of doing this &quot;matlab, python, etc&quot;? Like a nice conversion method/strategy/algorithm etc?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help would be appreciated. Thanks in advance.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt; Is it really just shifting the &lt;em&gt;a(m)&lt;/em&gt; and &lt;em&gt;alpha(m)&lt;/em&gt; parameters?&lt;/p&gt;&#xA;" OwnerUserId="24309" LastEditorUserId="24309" LastEditDate="2019-12-05T11:11:31.070" LastActivityDate="2020-05-04T18:25:23.890" Title="Converting from Modified to Standard Denavit Hartenberg" Tags="&lt;kinematics&gt;&lt;matlab&gt;&lt;forward-kinematics&gt;&lt;manipulator&gt;&lt;dh-parameters&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19846" PostTypeId="2" ParentId="19821" CreationDate="2019-12-04T21:14:02.557" Score="0" Body="&lt;p&gt;&lt;strong&gt;Shot answer&lt;/strong&gt;: no&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It depends on how you want to control it.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;main function was to convert radio signals to PWM signals  &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I don`t see the reason of converting radio signals to PWM, as long as it is RC car and you have remote control, you can control it directly using RC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Possible solution:&lt;/strong&gt;&lt;br&gt;&#xA;If you wan`t to control the car (DC motors) using program running on RPi, you need 2 things:  &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;H-bridge (motor’s spinning direction can be controlled by changing&#xA;polarity of its input voltage) like L298N (a dual-channel H-Bridge&#xA;motor driver) &lt;/li&gt;&#xA;&lt;li&gt;any Raspberry PI library for PWM (for ex. RPi.GPIO)&#xA;for controlling speed of the rotation by setting duty cycles.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="23217" LastActivityDate="2019-12-04T21:14:02.557" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19847" PostTypeId="2" ParentId="19843" CreationDate="2019-12-05T04:06:53.767" Score="0" Body="&lt;p&gt;For a simple PID control you don't need parallel threads, as a control rate of 50 to 100 Hz should be enough.&lt;/p&gt;&#xA;" OwnerUserId="21747" LastActivityDate="2019-12-05T04:06:53.767" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="19849" PostTypeId="1" CreationDate="2019-12-05T21:09:44.520" Score="2" ViewCount="69" Body="&lt;p&gt;I’m looking for right motors for my first self-balancing robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Design assumptions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;robot height: around 120-200 mm&lt;/li&gt;&#xA;&lt;li&gt;robot weight: around 600-800 grams&lt;/li&gt;&#xA;&lt;li&gt;wheels: 80x10 mm or 90x10 mm&lt;/li&gt;&#xA;&lt;li&gt;battery voltage: not sure yet, but something between 7,2 - 12 V (depending on&#xA;the motors)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So as I know, I should looking for DC motors with encoders, right? I also thought about stepper motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My little calculations:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Required torque = robot height * robot weight * gravity * maximum tilt angle&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$Rt_{min} = 0,12 m * 0,6 kg * 9,81 \frac{m}{s^2} * sin(40^\circ) = 0,454 Nm$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$Rt_{max} = 0,20 m * 0,8 kg * 9,81 \frac{m}{s^2} * sin(40^\circ) = 1 Nm$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, in best scenario I will need 0,454 Nm and in worst 1 Nm. So, if I have two motors then I can divide this required torque by 2, right?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can you advise me on the right motors for my project? I’m not sure about motor speed, gear ratio and how much torque do I need to get good balancing without damaging/overloading motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you,&#xA;Adam.&lt;/p&gt;&#xA;" OwnerUserId="24315" LastActivityDate="2019-12-05T21:09:44.520" Title="Choosing right motors for self-balancing robot" Tags="&lt;mobile-robot&gt;&lt;motor&gt;&lt;wheeled-robot&gt;&lt;two-wheeled&gt;" AnswerCount="0" CommentCount="5" ClosedDate="2019-12-06T15:04:08.997" ContentLicense="CC BY-SA 4.0" />
  <row Id="19851" PostTypeId="1" AcceptedAnswerId="19852" CreationDate="2019-12-06T20:13:46.230" Score="0" ViewCount="21" Body="&lt;p&gt;Is there any change in the analysis of kinematic and dynamic analysis of the manipulator which is working in zero gravity or microgravity?&lt;/p&gt;&#xA;" OwnerUserId="24322" LastActivityDate="2019-12-06T21:06:04.000" Title="Kinematics and dynamics analysis of manipulator in zero gravity" Tags="&lt;manipulator&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19852" PostTypeId="2" ParentId="19851" CreationDate="2019-12-06T21:06:04.000" Score="1" Body="&lt;p&gt;Kinematics is based on geometry and joint constraints, so no change there at all. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Dynamic motion results from the sum of forces, so the only change to a dynamic analysis is that you don't include gravity, but all other forces would remain. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2019-12-06T21:06:04.000" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19853" PostTypeId="1" AcceptedAnswerId="19868" CreationDate="2019-12-06T23:02:26.487" Score="3" ViewCount="184" Body="&lt;p&gt;Given DH parameters of a serial manipulator, the forward kinematics gives me&lt;/p&gt;&#xA;&#xA;&lt;p&gt;T0n = T01*T12*T23*...*Tn-1n , n is the DOF of manipulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can calculate the Jacobian matrix J for the end-effector by taking first order partial directives. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then I know the relation between joint speed and end-effector speed &lt;/p&gt;&#xA;&#xA;&lt;p&gt;eeSpeed = J*jointSpeed or jointSpeed = J_inv*eeSpeed&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now my question is how to calculate the Jacobian for joints 1 to n-1, and how to derive the relationship between joint speed and speed of any point on a robot link?&lt;/p&gt;&#xA;" OwnerUserId="24323" LastActivityDate="2020-01-10T09:01:35.257" Title="How to compute associated (partial) Jacobian matrix for each joint of a serial manipulator?" Tags="&lt;robotic-arm&gt;&lt;jacobian&gt;&lt;dh-parameters&gt;&lt;joint&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19854" PostTypeId="1" CreationDate="2019-12-07T09:27:24.480" Score="1" ViewCount="42" Body="&lt;p&gt;I'm looking for a name of the mechanic part (axis-gear combination) with the following description to use it in an automatic window control. I can't find this online to get parts due to the lack of right keywords. I'm sorry if I did use some wrong words to describe the part – I'm not from this field of technology:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;I have a remote motor and an effector gear that is at minimum placed 30 cm away from it alongside the motor axis. The axis has teeth on which the effector is grabbing on. The gear is not strongly mounted on the axis, though: When the motor turns, it turns as well but it can still freely slip up and down the axis.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Z34ze.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Z34ze.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is this called?&lt;/p&gt;&#xA;" OwnerUserId="24324" LastActivityDate="2021-01-01T12:06:15.487" Title="Drive axis with slipping gear" Tags="&lt;motor&gt;&lt;gearing&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19855" PostTypeId="1" CreationDate="2019-12-07T22:25:55.170" Score="0" ViewCount="27" Body="&lt;p&gt;I'm starting a project and it's my hardest yet I'm dipping my toe in to robotics by creating a odradek from the game  death stranding I've laid out what the plans should look like and now I'm trying to see what I'm actually supposed to do now. I know I need a Arduino , a LED and a few dc motors but the kind of motors I need I can't seem to find any like it. Reminder I've never done something like this before and having a helping hand would be great just some one who can point me in the right direction. &#xA;I can send a concept Sketch&lt;/p&gt;&#xA;" OwnerUserId="24325" LastActivityDate="2019-12-07T22:25:55.170" Title="Looking for aid in a project" Tags="&lt;first-robotics&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19856" PostTypeId="2" ParentId="19854" CreationDate="2019-12-08T10:09:32.787" Score="1" Body="&lt;p&gt;Thanks to the comment of @jsotola (pls. give him an upvote) with the manual transmission parts I found out that this is called the &lt;strong&gt;reverse sliding gear&lt;/strong&gt; and the &lt;strong&gt;reverse sliding gear shaft&lt;/strong&gt; when used in manual transmissions for, well, the reverse gear in cars.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More technically it is simply known as &lt;strong&gt;slide gear&lt;/strong&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://isteam.wsimg.com/ip/43b3c89d-b7e9-11e4-acc3-14feb5d9e2d6/ols/1348_original/:/rs=w:600,h:600&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://isteam.wsimg.com/ip/43b3c89d-b7e9-11e4-acc3-14feb5d9e2d6/ols/1348_original/:/rs=w:600,h:600&quot; alt=&quot;Slide gear&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(&lt;a href=&quot;https://pdxrvwholesale.com/products/18-tooth-slide-out-spur-gear-122739&quot; rel=&quot;nofollow noreferrer&quot;&gt;Image source&lt;/a&gt;)&lt;/p&gt;&#xA;" OwnerUserId="24324" LastActivityDate="2019-12-08T10:09:32.787" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19857" PostTypeId="1" CreationDate="2019-12-08T11:28:20.050" Score="3" ViewCount="30" Body="&lt;p&gt;We built several systems coupling multiple linear micrometric stages. I can't find a standard defining the axis convention of these kinds of systems, it there are any.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/PPf7A.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/PPf7A.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Regarding the system on the left, I would say that is an XZ system while I would define the system on the right XY system. However, I can't find any standard where this convention is explicitly stated.&#xA;For us, this is very important because we want to define univocally the various categories that we developed.&#xA;Is there any ISO standard? Or best practice I can use as reference this convention?&lt;/p&gt;&#xA;" OwnerUserId="24331" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2019-12-08T14:48:04.480" Title="What is the corrispettive motion convention for robotic systems with X,Y,Z axis?" Tags="&lt;design&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19858" PostTypeId="2" ParentId="19853" CreationDate="2019-12-08T18:10:26.357" Score="0" Body="&lt;p&gt;I believe you refer to first order partial derivatives. It is as easy as to take the forward kinematics from T0n , where n is the point to where you want to take the partial jacobian matrix and do the same of the first order partial derivatives. &lt;/p&gt;&#xA;" OwnerUserId="21229" LastActivityDate="2019-12-08T18:10:26.357" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19859" PostTypeId="1" CreationDate="2019-12-08T23:09:41.547" Score="4" ViewCount="309" Body="&lt;p&gt;I am trying to figure out a more accurate way to calculate the change in the heading of a robot. I have two small omni wheels on either side of the robot facing forward and one on the right side facing sideways.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/B0PzT.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/B0PzT.jpg&quot; alt=&quot;robot underside&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Currently the heading is calculated by subtracting the difference in position of the left encoder by the difference in position of the right encoder and dividing that by the distance between them every iteration of the loop (roughly every 5ms currently).&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;double angleChange = (leftDifference - rightDifference) / wheelBase;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\Delta \theta = \frac{\Delta L - \Delta R}b$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The dead wheels are 60mm in diameter and the encoders are 4000 counts per rotation. Using the calculation described it is fairly accurate but the heading drifts relatively quickly leading to the accumulation of positioning errors as well. Is there a way to do this better? I know of another group that changed their calculations to improve it but haven't figured out exactly how.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Interview with the group that improved their solution (their odometry is described near the end):&#xA;&lt;a href=&quot;https://www.youtube.com/watch?v=zun--sNljks&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=zun--sNljks&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Their robot driving autonomously (first 30 seconds):&#xA;&lt;a href=&quot;https://www.youtube.com/watch?v=NQvhvYJXVMA&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=NQvhvYJXVMA&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The encoders are used rather than an IMU for the lower response time.&lt;/p&gt;&#xA;" OwnerUserId="24333" LastEditorUserId="24333" LastEditDate="2019-12-09T02:12:57.563" LastActivityDate="2019-12-12T12:30:58.550" Title="How to calculate heading more accurately using dead wheels?" Tags="&lt;odometry&gt;&lt;rotation&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19860" PostTypeId="2" ParentId="19859" CreationDate="2019-12-09T11:15:04.300" Score="0" Body="&lt;p&gt;You need to develop the differential kinematics of this mobile platform for all of the wheels then you can combine it in your model. Other way to do it is to implement an observer based technique to estimate more accurate the angular speed rather than having a time sample based differentiation. &lt;/p&gt;&#xA;" OwnerUserId="21229" LastActivityDate="2019-12-09T11:15:04.300" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19861" PostTypeId="1" AcceptedAnswerId="19903" CreationDate="2019-12-09T20:42:31.830" Score="0" ViewCount="76" Body="&lt;p&gt;I am working on &lt;strong&gt;parameter estimation&lt;/strong&gt; of a rigid two-link manipulator as shown in the picture below.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/ZyfcO.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZyfcO.png&quot; alt=&quot;Two-Link Manipulator&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unlike the &lt;strong&gt;cylindrical links&lt;/strong&gt; shown in the above image, my robot has links of &lt;strong&gt;oval&lt;/strong&gt; shape. &#xA;&lt;a href=&quot;https://i.stack.imgur.com/YTFSY.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/YTFSY.png&quot; alt=&quot;Link Shape&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the &lt;strong&gt;centre of mass&lt;/strong&gt; of links is not the &lt;strong&gt;midpoint&lt;/strong&gt; of the link. I tried to search for the model equation but each one assumed the cylindrical shape of the links and the centre of mass as the centre of the link.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I know till now is that we write Langragian equation &#xA;&lt;span class=&quot;math-container&quot;&gt;$$L=K E-P E$$&lt;/span&gt;&#xA;And then derive the torque equation using&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\frac{d}{d t}\left(\frac{\partial L}{\partial \dot{q}}\right)-\frac{\partial L}{\partial q}=\tau&#xA;$$&lt;/span&gt;&#xA;I referenced these papers&#xA;&lt;a href=&quot;https://drive.google.com/open?id=1RnREjMETJAlTkWSlDn6aMJ-iqNMNUqLV&quot; rel=&quot;nofollow noreferrer&quot;&gt;2 Dof Manipulator Dynamics&lt;/a&gt;,&#xA;&lt;a href=&quot;https://drive.google.com/open?id=1b-tGN_dhGS7AIaU9mj3Xj3849ttV0-2c&quot; rel=&quot;nofollow noreferrer&quot;&gt;Parameter Estimation of Manipulator Robot Dynamics&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even though both have considered the same robot structure with the same joint type and link shape, they both have different model equation. The former &lt;strong&gt;(page 6 to 9)&lt;/strong&gt; has considered the &lt;strong&gt;length&lt;/strong&gt; of the links while the latter &lt;strong&gt;(page 22)&lt;/strong&gt; has considered the &lt;strong&gt;centre of mass&lt;/strong&gt; of the links. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which one is correct for my robot? How should I derive the model for a rigid two-link manipulator with oval-shaped links? &lt;/p&gt;&#xA;" OwnerUserId="11698" LastActivityDate="2019-12-19T10:48:35.870" Title="Model of two link rigid manipulator" Tags="&lt;robotic-arm&gt;&lt;industrial-robot&gt;&lt;manipulator&gt;&lt;robot-model&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19862" PostTypeId="2" ParentId="15829" CreationDate="2019-12-10T01:48:25.807" Score="0" Body="&lt;p&gt;Check in betaflight go to motors take the props off and see if you can get them to run.&lt;/p&gt;&#xA;" OwnerUserId="24338" LastActivityDate="2019-12-10T01:48:25.807" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19863" PostTypeId="1" CreationDate="2019-12-10T07:21:32.757" Score="0" ViewCount="77" Body="&lt;p&gt;I need help creating a 4 sensor PID wall follower, which has two walls either side of the robot and the goal is to keep the robot central and not crash into the walls, the sensors are positioned in the following photo:&lt;br&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/63eeF.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/63eeF.png&quot; alt=&quot;Sensors&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So far I have successfully created a right side PID wall follower using sensors 1 and 3 but I am not sure how I should combine the right and left side, I am not sure if I should work out the total error rate for the right and left side then take it away, or work out the total PID by taking the PID from the right and left values. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any help would be greatly appreciated : )&lt;/p&gt;&#xA;" OwnerUserId="24341" LastActivityDate="2019-12-10T07:21:32.757" Title="How to create a 4 sensor PID wall follower" Tags="&lt;pid&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19865" PostTypeId="1" AcceptedAnswerId="19866" CreationDate="2019-12-10T23:55:07.990" Score="3" ViewCount="142" Body="&lt;p&gt;This may be a very basic question, however I am having great difficulty to find the right answer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a functioning python code for the inverse kinematics of a 6 axis UR Robot. For any transformation matrix in space I get the corresponding joint values. However: I do not know how I can add the TCP transformation to the calculation. I have a tool attached to the robot and the IK solution should of course account for that. How do I do this? can I simply transform the coordinates before I send them to the inverse kinematics function or does this need to happen inside of the IK function? This feels like it is super easy but I am drawing a blank for the last few days. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So far I have taken the dot product of the coordinates I want to approach and the TCP transformation. However this only works without any rotation as soon as rotation is added this doesn't work anymore what am I missing? My googling skills have failed me so far. &lt;/p&gt;&#xA;" OwnerUserId="24347" LastEditorUserId="110" LastEditDate="2019-12-12T16:39:03.280" LastActivityDate="2019-12-12T16:39:03.280" Title="How do I add a tool to an inverse kinematic solver" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;inverse-kinematics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19866" PostTypeId="2" ParentId="19865" CreationDate="2019-12-11T07:22:46.997" Score="3" Body="&lt;p&gt;A fixed (not dependent on any changing parameter) coordinate system transformation can be defined between the TCP and the &quot;end of the robot&quot; coordinate system. Depending on how you formulate CS transformations this can be a 4x4 transformation matrix or a double quaternion or any other form of expressing coordinate system transformations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Two possibilities exist which are equivalent in results but one of them may be preferred based on current implementation:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Transform the TCP coordinates to &quot;end of robot&quot; coordinates using the fixed transformation. Since you probably want to transform also orientation not just position, the simplest would be to take the unit vectors of the desired TCP coordinate system axes and transform them to capture both position and rotation. That maps all unit vectors to the coordinate system you have the inverse kinematics for, you just need to rewrite the unit vector coordinates to the convention you use to describe orientation (e.g. Euler angles)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Add the fixed transformation to the inverse kinematics problem. You can just add another fixed transformation to the kinematics problem. This will not affect the math, since is is a matrix (if you used the 4x4 matrices) with all elements known.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2019-12-11T07:22:46.997" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19867" PostTypeId="2" ParentId="19861" CreationDate="2019-12-11T07:56:58.430" Score="0" Body="&lt;p&gt;the model would be different because of the location of the center of mass of the links, so maybe in one model is just the total length d while in others might only be d/2. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To calculate the center of mass of your oval kind shape link you have two options: &#xA;separate the shape of your link into the basic shapes like a trapezoid and two half circles &lt;a href=&quot;https://www.youtube.com/watch?v=8jo8gVUmTEw&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=8jo8gVUmTEw&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;or take the data from a CAD program like solidworks/solid edge/catia etc. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;and use that vector to get the kinetic and potential energy of your links and derived the model. &lt;/p&gt;&#xA;" OwnerUserId="21229" LastActivityDate="2019-12-11T07:56:58.430" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19868" PostTypeId="2" ParentId="19853" CreationDate="2019-12-11T08:27:37.243" Score="0" Body="&lt;p&gt;Well, the answer is quite straight forward. With the given equation &#xA;&lt;span class=&quot;math-container&quot;&gt;$ T^n_0 = \ldots $&lt;/span&gt; you calculate the transformation from the &lt;span class=&quot;math-container&quot;&gt;$n^\mathrm{th}$&lt;/span&gt; coordinate frame (attached to the end effector) to the inertial coordinate frame. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Just imagine you want to know the Jacobian from the joint &lt;span class=&quot;math-container&quot;&gt;$n-1$&lt;/span&gt;, you do the exact same procedure. Calculate &lt;span class=&quot;math-container&quot;&gt;$T^{n-1}_0 = \ldots $&lt;/span&gt; and calculate the first partial derivative. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can do that for each coordinate frame, or point you wish for. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In other words, the Jacobian method is just the use of the chain rule from differentiation.&#xA;Given the translational velocity &lt;span class=&quot;math-container&quot;&gt;$v=\frac{\mathrm{d}}{\mathrm{d}t}p$&lt;/span&gt; of any point &lt;span class=&quot;math-container&quot;&gt;$p$&lt;/span&gt;. Any point &lt;span class=&quot;math-container&quot;&gt;$p$&lt;/span&gt;, expressed in the inertial frame depends on the joint configuration &lt;span class=&quot;math-container&quot;&gt;$q(t)$&lt;/span&gt;, so &lt;span class=&quot;math-container&quot;&gt;$p(q(t))$&lt;/span&gt;. Therefore you can apply the chain rule&#xA;&lt;span class=&quot;math-container&quot;&gt;$$ \frac{\mathrm{d}}{\mathrm{d}t}p = \frac{\partial}{\partial q} p \frac{\mathrm{d}}{\mathrm{d}t}q ~.$$&lt;/span&gt;&#xA;The partial derivative &lt;span class=&quot;math-container&quot;&gt;$\frac{\partial}{\partial q} p $&lt;/span&gt; is called the Jacobian of the point &lt;span class=&quot;math-container&quot;&gt;$p$&lt;/span&gt;. If &lt;span class=&quot;math-container&quot;&gt;$p$&lt;/span&gt; describes the end effector position, the Jacobian is called the manipulator jacobian.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note: &lt;span class=&quot;math-container&quot;&gt;$p$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$v$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$q$&lt;/span&gt; are usually vectors, therefore the partial derivative yields a matrix. &lt;/p&gt;&#xA;" OwnerUserId="18341" LastActivityDate="2019-12-11T08:27:37.243" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19869" PostTypeId="2" ParentId="19843" CreationDate="2019-12-12T10:18:35.217" Score="1" Body="&lt;p&gt;Multithreading doesn't help a simple robot much. For example, if you have just a couple of sensors for line following, multithreading isn't necessary.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, as the robot becomes more complex both electronically and in programming, multithreading makes sencpse.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Add more sensors to your line-follower, perhaps a lidar for distance measurements, audio for speech recognition for accepting new commands, and vision for object recognition. In this case multithreading really helps. Unlike a few quick sensor readings, the speech recognition takes more time and attention. A command, perhaps &quot;Robot, stop,&quot; takes maybe a second to say. In a single-threaded robot everything else would have to stop while this command was parsed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With multithreading, on thread could be used to listening, and the main thread might only be notified when the command was heard.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Yes, there is more overhead in a multithreaded program, but it can handle more complex cases more easily.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would suggest that you use a framework to handle multithreading. That way most of the difficult part of multithreading will have already been done.&lt;/p&gt;&#xA;" OwnerUserId="19275" LastActivityDate="2019-12-12T10:18:35.217" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19870" PostTypeId="1" CreationDate="2019-12-12T11:26:57.923" Score="0" ViewCount="15" Body="&lt;p&gt;Before I do the experiment, I am a bit confused about the expected signals provided by a 3-axis gyroscope (angular velocities vs. time) mounted on the edge of a (slightly) deflated car tire when the car is moving.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/OaBEg.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OaBEg.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="24354" LastActivityDate="2019-12-12T11:26:57.923" Title="Gyroscope signal when mounted on a deflated tire" Tags="&lt;kinematics&gt;&lt;wheeled-robot&gt;&lt;imu&gt;&lt;gyroscope&gt;&lt;wheel&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19871" PostTypeId="2" ParentId="19859" CreationDate="2019-12-12T12:30:58.550" Score="1" Body="&lt;p&gt;The FTC team I coach (Moderately Dangerous) uses the encoders on the motors rather than drag wheels, so I don't know if their solution will work as well for you.  They flip there problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Drive the the robot in a spin  for 500 counts on the left encoder. Record the number of counts on the right and number of degrees the robot turns 5-10 times. Do the same for several other counts on the left. You can now do a linear regression between the difference between the left and right counts and observed turn. If you get a good line fit the slope should give you the mapping. &lt;/p&gt;&#xA;" OwnerUserId="19756" LastActivityDate="2019-12-12T12:30:58.550" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19873" PostTypeId="1" AcceptedAnswerId="19896" CreationDate="2019-12-12T18:13:41.750" Score="0" ViewCount="24" Body="&lt;p&gt;I'm interested in attaching custom camera(s) to a quadcopter that can carry a modest (&amp;lt;0.25 kg) payload.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I prefer to write code to fly the quadcopter (e.g. traverse a region and image) rather than operate it manually.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Is this existing tech or do I need to build my own?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;SDK's for quadcopters seem few and far between (DJI, Parrot, and a few others).  Most appear to be phone based, not Windows or Linux based.  I want to write code to either control from remote (e.g. PC interface) or run on the microcontroller to have it operate autonomously.  Again, is this existing tech or DIY?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, most of the commercial options with SDK's don't carry custom payloads.  Only the DJI Matrice 100 seems designed for custom sensors.  Is this a proper assessment or are there more options?&lt;/p&gt;&#xA;" OwnerUserId="11495" LastActivityDate="2019-12-18T14:13:41.580" Title="Quadcopter for modest payloads w/SDK?" Tags="&lt;quadcopter&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19874" PostTypeId="1" CreationDate="2019-12-12T18:32:45.527" Score="1" ViewCount="40" Body="&lt;p&gt;I would like to move a piano. Having a mathematical background, I was trying to figure out whether I can get it into the new apartment.&#xA;In my research I stumbled upon the already explored &quot;&lt;a href=&quot;https://en.wikipedia.org/wiki/Moving_sofa_problem&quot; rel=&quot;nofollow noreferrer&quot;&gt;moving sofa problem&lt;/a&gt;&quot; as illustrated below:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/zmWsu.gif&quot; alt=&quot;moving sofa gif&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, my question is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Is there a computational model that is able (or at least tries) to find solution for this problem for any (or at least some) arbitrary shape?&lt;/strong&gt; By solution I mean a path along the object can be moved that brings it around the corner.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I stumbled on some interesting concepts in motion planing.&#xA;Most importantly on:&#xA;&lt;strong&gt;&quot;Potential field method&quot; in motion control&lt;/strong&gt; and &lt;strong&gt;navigation functions&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now to my two new subquestions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Exists a publicly available &quot;Potential field model&quot; for arbitrary movable object shapes, or something similiar?&lt;/li&gt;&#xA;&lt;li&gt;Is there a method that lets me construct an (optimal) navigation function if I know the potential field and the shape of the movable object?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Keep in mind that my special interest is in cases where there is almost no &quot;free space&quot;. Hence, where it is hard to move it around the corner.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you!&lt;/p&gt;&#xA;" OwnerUserId="24358" LastActivityDate="2019-12-13T09:17:20.410" Title="Moving Sofa Problem with the help of 'Potential Field Method' and 'Navigation Functions'" Tags="&lt;motion-planning&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19875" PostTypeId="2" ParentId="19874" CreationDate="2019-12-13T09:17:20.410" Score="1" Body="&lt;p&gt;Potential field methods usually model the moving object as a point. There is another concept in robotics called configuration space, which allow condensing the moving object to a point while expanding obstacles &quot;with the robots geometry&quot; (to simplify the method to one sentence). This essentially allows you to plan a path for a point while making sure that the actually geometry of the robot is considered. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To solve the above problem with potential fields the combination of these methods would be needed. Similar to the approach detailed &lt;a href=&quot;https://www.dis.uniroma1.it/~oriolo/amr/slides/MotionPlanning3_Slides.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. However tight corridors are not well suited for potential field planning, since the potential fields do not exactly represent the shape of the obstacles, they just approximate it. There are potential fields which can better approximate shapes (IIRC they are called harmonic potential fields, based on partial differential equations to describe the potential function), still potential fields methods are usually not well suited for tight corridors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The advantage of potential field methods is in their &quot;reactive&quot; nature. They can react to changes in the environment (moving obstacles) with a low amount of required computation. These are also called online methods, because the path is planned online, as the robot/moved object advances in contrast to the offline problems where a full path is computed prior to any motion of the robot/moved object.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The piano (or ladder or sofa) movers problem, since it does not include changing environment, can be solved using offline planning (like the a* algorithm). More details are given &lt;a href=&quot;http://www.math.tau.ac.il/~mvplab/Completed%20Projects/Piano%20Movers/Piano%20movers.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2019-12-13T09:17:20.410" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19876" PostTypeId="1" AcceptedAnswerId="19878" CreationDate="2019-12-13T19:04:24.043" Score="0" ViewCount="84" Body="&lt;p&gt;I've seen this linear actuator end effector on a few industrial SCARA 'bots but I am having trouble visualizing how it works internally:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2poJD.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2poJD.jpg&quot; alt=&quot;Linear Actuator&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It looks like a type of lead screw, but the nut must spin instead of the rod to cause motion. If this is the case would the end part of the effector not also spin with the rod? Does this end effector design have a specific name ? If you can explain how the mechanics of this joint works It would be very helpful.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All help appreciated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit:&#xA;Sorry for the low res picture, more detail about the type of joint im looking at can be found at:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Models that have this type of joint include the &lt;a href=&quot;https://www.epson.co.uk/products/robot/epson-scara-t3-series&quot; rel=&quot;nofollow noreferrer&quot;&gt;Epson T3&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=JDGp1S8lnn0&quot; rel=&quot;nofollow noreferrer&quot;&gt;Epson T3 Video&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.fanuc.eu/uk/en/robots/robot-filter-page/scara-series/scara-sr-3ia&quot; rel=&quot;nofollow noreferrer&quot;&gt;Fanuc SR-3iA&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="24365" LastEditorUserId="24365" LastEditDate="2019-12-14T08:20:58.860" LastActivityDate="2019-12-14T08:20:58.860" Title="How does this end effector work?" Tags="&lt;design&gt;&lt;mechanism&gt;&lt;joint&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19877" PostTypeId="1" AcceptedAnswerId="19882" CreationDate="2019-12-13T20:23:39.450" Score="0" ViewCount="40" Body="&lt;p&gt;I am planning to integrate a LIDAR sensor on my DJI Matrice 100 and I will use the data generated to control the height of my UAV. I was wondering if I would need to attach a separate processing unit such as raspberry pi/GPU to process the LIDAR data or would the onboard SDK suffice?&lt;/p&gt;&#xA;" OwnerUserId="24234" LastActivityDate="2019-12-15T06:17:40.247" Title="DJI on-board SDK vs. mini computer" Tags="&lt;quadcopter&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19878" PostTypeId="2" ParentId="19876" CreationDate="2019-12-14T01:54:35.880" Score="2" Body="&lt;p&gt;The actuator has two raceways cut into it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One is a screw thread, and engages with a rotary screw nut that is turned by a motor. Turning the nut moves the actuator linearly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other is a spline groove and is cut parallel to the actuator axis, and engages with a rotary spine nut that is turned by another motor. Turning the nut spins the actuator on its axis&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://duckduckgo.com/?q=BALL+SCREW+SPLINE+SPBR&amp;amp;iax=images&amp;amp;ia=images&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://duckduckgo.com/?q=BALL+SCREW+SPLINE+SPBR&amp;amp;iax=images&amp;amp;ia=images&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://euro-bearings.com/lin_SPBR.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://euro-bearings.com/lin_SPBR.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/5u6Yi.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/5u6Yi.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19143" LastEditorUserId="19143" LastEditDate="2019-12-14T02:44:11.687" LastActivityDate="2019-12-14T02:44:11.687" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19879" PostTypeId="1" AcceptedAnswerId="19884" CreationDate="2019-12-14T05:16:22.743" Score="0" ViewCount="85" Body="&lt;p&gt;I'm working on mobile manipulator and trying to do visual-positioning of the end-effector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/hRbAt.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hRbAt.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My camera will located around 1-2 meters from the robot. &#xA;I'm sure i cant use color tracking method because the color of end-effector not unique to the environment and i can't get the orientation of end-effector. If I'm using neural network, the computation cost will high (not reliable for high-speed control). What method of visual-positioning can i use for this case?&lt;/p&gt;&#xA;" OwnerUserId="22800" LastEditorUserId="110" LastEditDate="2019-12-16T20:37:15.177" LastActivityDate="2020-02-18T08:45:25.897" Title="Visual-Positioning Method" Tags="&lt;manipulator&gt;&lt;opencv&gt;&lt;visual-servoing&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19880" PostTypeId="1" CreationDate="2019-12-14T17:35:31.947" Score="0" ViewCount="46" Body="&lt;p&gt;The question really speaks for itself. I don't have any way to connect with my navio2, running ardupilot, during flight (except a radio controller if things go wrong). Could I still make my drone autonomously follow a certain path, take pictures, etc. ? &lt;/p&gt;&#xA;" OwnerUserId="23521" LastActivityDate="2021-05-11T17:01:05.050" Title="Can I preload a mission into my drone (navio2) so it can execute it without being connected to a ground station by telemetry during flight" Tags="&lt;quadcopter&gt;&lt;ardupilot&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19881" PostTypeId="2" ParentId="19718" CreationDate="2019-12-15T04:39:47.553" Score="0" Body="&lt;p&gt;It seems that the difference is not much, and mostly that having two cameras helps in overcoming the ambient effects of light that might otherwise pollute the scene, but otherwise perfectly interpretable results can be obtained from either of the two.&lt;/p&gt;&#xA;" OwnerUserId="24163" LastEditorUserId="24163" LastEditDate="2020-03-17T18:12:15.797" LastActivityDate="2020-03-17T18:12:15.797" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19882" PostTypeId="2" ParentId="19877" CreationDate="2019-12-15T06:17:40.247" Score="0" Body="&lt;p&gt;Yes, you can.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;M100 has a separate power output plug to power the on-board computer, such as Raspberry pi and NUC.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can use your on-board computer to do the lidar-related computing and send the final control movement command to the M100 sdk serial port.&lt;/p&gt;&#xA;" OwnerUserId="4514" LastActivityDate="2019-12-15T06:17:40.247" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19883" PostTypeId="1" AcceptedAnswerId="19887" CreationDate="2019-12-15T12:34:36.883" Score="0" ViewCount="23" Body="&lt;p&gt;I read the review[1] on flexible manipulators, the modeling method of multi-link(even if single-link) flexible manipulators seems very different from the continuum robots like OctArm(multi-section), hyper-redundant manipulator and etc which based on the backbone curve or constant curvature model.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[1]Sayahkarajy, Mostafa, Z. Mohamed, and Ahmad Athif Mohd Faudzi. &quot;Review of modelling and control of flexible-link manipulators.&quot; Proceedings of the Institution of Mechanical Engineers, Part I: Journal of Systems and Control Engineering 230.8 (2016): 861-873.&#xA;,&lt;/p&gt;&#xA;" OwnerUserId="19138" LastActivityDate="2019-12-16T11:51:57.553" Title="What is the difference between multi-link flexible manipulators and continuum robots?" Tags="&lt;dynamics&gt;&lt;manipulator&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19884" PostTypeId="2" ParentId="19879" CreationDate="2019-12-15T17:23:36.797" Score="4" Body="&lt;p&gt;So it sounds like you have an external camera system to track the end effector position and orientation?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In that case I would use QR codes or &lt;a href=&quot;https://github.com/AprilRobotics/apriltag&quot; rel=&quot;nofollow noreferrer&quot;&gt;april tags&lt;/a&gt;. Stick a couple of these on your end effector, and make sure that you put enough of them that 1 is always visible from your camera. The apriltags library provides the ability to extract position and orientation.&lt;/p&gt;&#xA;" OwnerUserId="15265" LastActivityDate="2019-12-15T17:23:36.797" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19885" PostTypeId="1" CreationDate="2019-12-16T08:17:17.747" Score="8" ViewCount="797" Body="&lt;p&gt;Often I see positions for robotics companies split into planning and controls engineers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But motion planning and controls seem to have a lot of overlap.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As I understand in motion planning the planner produces a trajectory. But to make sure the trajectory is feasible the planner must also take into consideration information about the dynamics of the system and can output controls as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similarly methods like MPC and optimal control output a trajectory of states and times with the controls. In fact in any control paradigm where you have a model or simulator you can produce a trajectory of states from your control inputs and initial condition.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus I have 4 questions:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;How does motion planning differ from controls?&lt;/li&gt;&#xA;&lt;li&gt;On a robotics team what is the problem the planning team seeks to solve? Once they solve it, what information do they give to the control module?&lt;/li&gt;&#xA;&lt;li&gt;On a robotics team what is the problem the control team seeks to solve? How do they use the information from the planning module?&lt;/li&gt;&#xA;&lt;li&gt;What sort of experience/classes do people on planning teams have? There's plenty of classes on control at my university but I have never seen any about planning. I took a robotics class this semester and it doesn't cover planning in depth and none of the syllabi for other robotics classes cover planning for more than a lecture.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Note here I'm assuming that the planning team works on &lt;a href=&quot;https://robotics.stackexchange.com/a/8306/24371&quot;&gt;motion planning instead of path planning&lt;/a&gt;. If they work on path planning then I understand 2 and 3.&lt;/p&gt;&#xA;" OwnerUserId="24371" LastActivityDate="2019-12-17T19:33:07.703" Title="Motion Planning vs. Control" Tags="&lt;control&gt;&lt;motion-planning&gt;&lt;path-planning&gt;&lt;planning&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19886" PostTypeId="2" ParentId="19885" CreationDate="2019-12-16T11:30:07.680" Score="5" Body="&lt;p&gt;There is a saying in software engineering which states that your company structure is reflected in your software architecture (I cannot recall the exact phrase). This is true for a robot control software stack also. &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Control is closed loop, planning (motion, trajectory or any other planning) is not (it is open loop). In a closed loop solution (i assume in all cases but it might be just the majority of cases) an error signal is built from the setpoint signal and a measured signal. The controller tries to minimize this error. In a planning problem the planner can receive an input (e.g.) current position, but the output is a &quot;plan&quot; how to get to the next point (and the problem is not formulated as how to minimize the distance to the next point, but how to build an polynomial which connects the points smoothly). It is open loop because the output of the planner is not in direct relation to its input. It does not want to minimize an error, all controllers (again I assume all controllers, there might be exceptions) try to minimize an error signal built as a difference between the setpoint and a current measured value. You can definitely build a closed loop controller which minimizes the distance to the next point and therefore generates a trajectory implicitly, but the goal of the trajectory planner is to respect geometrical constraints through planning which a controller could not respect (or only through a more complicated approach then the planner/controller). To have a very simplistic summary, the trajectory planner interpolates between the waypoints while respecting geometrical (and kinematic) constraints, while the controller follows the trajectory given by the series of interpolated points (not the far away waypoints). &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;In the application program of an industrial robot (manipulator) the waypoints for a motion are defined and the type of motion is specified. e.g. linear motion from the current pose to pose (x, y, z, a ,b,c). moreover, usually motions are flowed by other motion command, e.g. linear motion, circular motion, linear motion, spline motion, each with their own waypoints (an optionally target velocities and accelerations). Trajectory planning takes these motion types and waypoints and defines a (hopefully) smooth spline (incl. rounded edges if needed/allowed) and adds the velocity and acceleration components. Basically from a vector based description of the path (waypoints and target velocities and accelerations) you get a time dependent (smooth) curve, which respects the dynamic limits of the robot. Motion planning is sometimes used as a synonym of trajectory planning, sometimes it includes both path planning and trajectory planning. Path planning would find those waypoints, which I assumed where given in the application program. The planner might get the dynamic limits of the robot as parameters from the controls team (but usually there is a specification from which both teams work form)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The controls team is concerned mainly with designing, implementing and tuning control loops in order to get the best possible performance out of the hardware. They need to be prepared to get any trajectory and execute it (or stop with an error). After the controls module is finished the dynamic limits of the robot set (however, there is a design specification for target dynamic performance which the control team is seaking to accomplish). The control software module gets the curve from the trajectory planner.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;CNC controllers are similar to robotics controllers, an in depth understanding of CNC controllers offers a good insight into robot controllers. Otherwise SE cannot comment on what classes are offered at your university and their technical depth. Maybe look trajectory planning topics, path generation, robot control systems, motion control. Otherwise differential equations, differential geometry, curves (polynome-, akima-, b-splines, bessier curves, lines, circles, polylines), interpolation, numerical optimisation, physics of motion, kinematics, higher order kinematics, differential kinematics are some of the topics needed for trajectory planning. Furthermore software engineering (mostly C/C++ related) topics are important for the implementation. The book Numerical Recipes comes into mind, with 1 relevant chapter about interpolation and one about ordinary differential equations.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2019-12-17T10:00:35.417" LastActivityDate="2019-12-17T10:00:35.417" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19887" PostTypeId="2" ParentId="19883" CreationDate="2019-12-16T11:51:57.553" Score="0" Body="&lt;p&gt;Continuum robots do not have rigid elements while multi-link flexible manipulators use &quot;traditional&quot; rigid links between flexible joints. One long continuous flexible material vs. a series of short flexible material segments interconnected with rigid material.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2019-12-16T11:51:57.553" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19888" PostTypeId="2" ParentId="19784" CreationDate="2019-12-16T15:55:18.337" Score="0" Body="&lt;p&gt;I have a similar issue where I get internal ascii debug messages from the roomba, which interfere with data that I expect to receive. You may just connect via serial port, switch to some mode and output everything you get from the roomba. If you see english ascii text messages within five minutes, you are probably affected too.&lt;/p&gt;&#xA;" OwnerUserId="24147" LastActivityDate="2019-12-16T15:55:18.337" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19889" PostTypeId="1" CreationDate="2019-12-16T19:47:29.817" Score="1" ViewCount="473" Body="&lt;p&gt;I'm very familiar with the traditional position form of PID. The error is just the difference between some setpoint encoder value and the current encoder value. Although this suffices for basic autonomous routines, it would definitely be more powerful to control the motors' velocities. Thus I'm here now trying to implement velocity PID.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Error is probably going to be the difference between some desired encoder value change over time and the current change of encoder values over some known time. However, as the motor reaches that desired velocity, the error goes down (who would've thought), but because the output is proportional to the error (again, who would've thought), the motors logically begin to slow down. That's one problem, the motors have to keep up their outputs to stay at a velocity, not slow down as they get closer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My first idea was to implement some kind of feedforward to estimate the velocity then let I and D do the rest of the work to get the motors at the exact desired velocity. But is that really industry standard or something, like I would be eliminating P.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another idea was to take the derivative of the position form of PID (found it at this site: &lt;a href=&quot;https://www.controleng.com/articles/the-velocity-of-pid/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.controleng.com/articles/the-velocity-of-pid/&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/t2urS.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/t2urS.png&quot; alt=&quot;V = velocity, P = proportional term, and A = acceleration&quot;&gt;&lt;/a&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/PjprT.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/PjprT.png&quot; alt=&quot;rearranging terms&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've tried looking for alternatives to these two methods (my possibly very jank way and the probably more formal and accepted way). And oh god, I still have filtering sensor data to think about.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So my question:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How do I implement velocity PID in order to control my motors' velocity? Which algorithm should I use?&lt;/p&gt;&#xA;" OwnerUserId="24374" LastActivityDate="2020-09-16T23:03:35.380" Title="Implementation of Velocity Control Algorithm Based on PID" Tags="&lt;control&gt;&lt;pid&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19890" PostTypeId="2" ParentId="16074" CreationDate="2019-12-17T17:56:54.783" Score="0" Body="&lt;p&gt;AFAIK, this is not currently possible through official functionality.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is an open PR on rosdep which is meant for this very feature. I have not tested it personally, but looking at the code changes, it seems to allow for rosdep functionality to act only on certain dependency types through the &lt;code&gt;--dependency-types&lt;/code&gt; flag. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/ros-infrastructure/rosdep/pull/727&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/ros-infrastructure/rosdep/pull/727&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10310" LastActivityDate="2019-12-17T17:56:54.783" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19891" PostTypeId="2" ParentId="19885" CreationDate="2019-12-17T19:26:51.790" Score="1" Body="&lt;p&gt;I can speak to &lt;em&gt;space&lt;/em&gt; robotics, and &lt;em&gt;military&lt;/em&gt;-type robotics, and some &lt;em&gt;commercial&lt;/em&gt; robots, but there isn't really a &amp;quot;typical&amp;quot; robot yet.&lt;/p&gt;&#xA;&lt;h1&gt;How does motion planning differ from controls?&lt;/h1&gt;&#xA;&lt;p&gt;A drunk person can plan a path or sequence of motions, but cannot follow it well. A drunk person has motion and path planning but suffers poor control (&lt;em&gt;esp poor reaction time which creates a time-delay system which is notoriously difficult to control&lt;/em&gt;). Google maps gives you a &lt;em&gt;plan&lt;/em&gt;, but your brain determines the &lt;em&gt;motions&lt;/em&gt; (change lanes!) and your hands on the wheel gives the &lt;em&gt;controls&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/tbWGt.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tbWGt.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;On the mars rovers, the scientists give the plan (go there), the rover drivers determine the motions (drive along this curve) but the rover determines the controls (the wheel speeds) ... often. Sometimes the rover drives determine even the wheel speeds / turns.&lt;/p&gt;&#xA;&lt;h1&gt;On a robotics team what is the problem the planning team seeks to solve? Once they solve it, what information do they give to the control module?&lt;/h1&gt;&#xA;&lt;p&gt;A planning team usually determines first &lt;em&gt;actions&lt;/em&gt; (e.g., I should now mow the lawn), then &lt;em&gt;motions&lt;/em&gt; (Mowing the lawn should mean turning on the mower and then outputting a sequence of waypoints that, if navigated to in straight lines, will cover all the un-cut grass.) Then, the output to &lt;em&gt;one&lt;/em&gt; control module is those lines between waypoints, and the output &lt;em&gt;from&lt;/em&gt; that module is wheel speeds.&lt;/p&gt;&#xA;&lt;h1&gt;On a robotics team what is the problem the control team seeks to solve? How do they use the information from the planning module?&lt;/h1&gt;&#xA;&lt;p&gt;It usually looks like this:&lt;/p&gt;&#xA;&lt;p&gt;1: Goal (mow) -&amp;gt; 2. Actions (turn on blades, drive over all grass) -&amp;gt; 3. Discrete Path (seq of waypoints that covers the grass) -&amp;gt; 4. Continuous path (the curved path the robot can actually follow) -&amp;gt; 5. Wheel speeds to follow that path. Note, sometimes static obstacles are introduced at stage 3, and &lt;em&gt;moving&lt;/em&gt; obstacles are considered at stage 4-5. This is just my experience.&lt;/p&gt;&#xA;&lt;p&gt;Note, 4 and 5 are frequently recalculated based on where the robot is, 3 is infrequently recalculated if ever, and 1 or 2 are sometimes never recalculated (they may be hard-coded). 3-4 are sometimes called motion planning, and 5 is sometimes called controls. It's best to draw this pipeline out for each use case and get specific as quickly as possible.&lt;/p&gt;&#xA;&lt;h1&gt;What sort of experience/classes do people on planning teams have?&lt;/h1&gt;&#xA;&lt;p&gt;Typically, they may have heard of RRTs, MPC, PID loops, LQR, Visibility Graphs / Roadmap methods, velocity obstacles, artificial potential fields, and so on. If you want to work at stage 1/2 above, you should learn more about traditional AI and &lt;em&gt;activity planning&lt;/em&gt;, which is better characterized as planning and scheduling. Decision trees, Game trees, classical dependency graphs and job-shop type problems, even vehicle routing literature fits here.&lt;/p&gt;&#xA;" OwnerUserId="163" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2019-12-17T19:33:07.703" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19892" PostTypeId="2" ParentId="18455" CreationDate="2019-12-17T19:47:30.383" Score="1" Body="&lt;p&gt;Close. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A simple solution is to first track the heading over time using the yaw rate sensors. If you're getting measurements every &lt;span class=&quot;math-container&quot;&gt;$\delta t$&lt;/span&gt; seconds ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;H(t+1) = H(t) + Yaw(t)*dt&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The, you can use basically what you had to track position &lt;em&gt;relative to starting configuration&lt;/em&gt;, by:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;x(t+1) = x(t) + \cos(H(t))*v(t)*\delta t&#xA;$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;y(t+1) = y(t) + \sin(H(t))*v(t)*\delta t&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note, this assumes, &lt;span class=&quot;math-container&quot;&gt;$x(0)=y(0)=H(0)=0$&lt;/span&gt;, so you'll have to &quot;seed&quot; &lt;span class=&quot;math-container&quot;&gt;$x(0),y(0), H(0)$&lt;/span&gt; to get the &quot;real&quot; position and heading at time &lt;span class=&quot;math-container&quot;&gt;$t$&lt;/span&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This will do OK, but confounding factors are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The discrete heading is an approximation, the continuous yaw should ideally be integrated and a better movement model used&lt;/li&gt;&#xA;&lt;li&gt;Wheels slip, producing motion not well modeled&lt;/li&gt;&#xA;&lt;li&gt;You'll eventually want to &lt;a href=&quot;https://robotics.stackexchange.com/q/14879/163&quot;&gt;fuse estimates of the robots actual location&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Note, this is called &lt;em&gt;ackerman&lt;/em&gt; steering! Use that for your google-foo.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;But this'll do for simple projects.&lt;/p&gt;&#xA;" OwnerUserId="163" LastActivityDate="2019-12-17T19:47:30.383" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19893" PostTypeId="2" ParentId="19889" CreationDate="2019-12-17T20:32:15.500" Score="2" Body="&lt;p&gt;Why does the PID algorithm need to be different? You're basically describing robot cruise control. Your setpoint is your desired speed, your input is your current speed, and your output is an accelerator value (&quot;throttle&quot;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your comment about motors keeping their outputs up to stay at velocity is really a conversation about how much overshoot you want -- you want to accelerate at some non-zero rate to achieve your target velocity, and then slow down your acceleration as you approach it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The beauty of the PID is that it doesn't actually care about the system it's controlling - it just needs the input, the error and a single control value to adjust the input. You have all of those.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;... Unless I'm massively missing something, which is possible.&lt;/p&gt;&#xA;" OwnerUserId="6782" LastActivityDate="2019-12-17T20:32:15.500" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19894" PostTypeId="2" ParentId="11152" CreationDate="2019-12-18T05:45:48.013" Score="3" Body="&lt;p&gt;I encountered the same puzzle. I had a clue at the beginning that the gravity information is contained within accelerometer measurements due to aerodynamic drag. Then I found a paper &lt;a href=&quot;https://hal.archives-ouvertes.fr/file/index/docid/422423/filename/quadri_accelero_feedback.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;em&gt;The True Role of Accelerometer Feedback in Quadrotor&#xA;Control&lt;/em&gt;&lt;/a&gt;, which had proved the idea.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My simulation also revealed the process of stabilization. As long as a quadcopter produces a thrust not counteracting gravity and therefore has a non-zero velocity, the acceleration measured by IMU is more or less different from the acceleration caused by the thrust because of aerodynamic drag, inclining to the inverse of gravity vector. That difference makes the controller aware of the instability and try to correct. After correction, the thrust gets closer to the inverse of gravity and is less able to counteract the aerodynamic drag, which result in a stronger effect of drag force on accelerometer measurements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that the aerodynamic drag is so slight at low speed that a quadcopter knows little about gravity and thus depends mostly on gyro as well as human control or additional velocity/position information.&lt;/p&gt;&#xA;" OwnerUserId="24379" LastEditorUserId="24379" LastEditDate="2019-12-18T15:57:23.230" LastActivityDate="2019-12-18T15:57:23.230" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19895" PostTypeId="2" ParentId="19880" CreationDate="2019-12-18T14:02:23.073" Score="0" Body="&lt;p&gt;Yes you can, see:&lt;br&gt;&#xA;&lt;a href=&quot;https://ardupilot.org/copter/docs/auto-mode.html?highlight=mission&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://ardupilot.org/copter/docs/auto-mode.html?highlight=mission&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&quot;https://ardupilot.org/dev/docs/learning-ardupilot-storage-and-eeprom-management.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://ardupilot.org/dev/docs/learning-ardupilot-storage-and-eeprom-management.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;but you need to be careful to specific parameters in Ardupilot, so as not to terminate the flight inadvertently when you loss connections (caution only do this if you have a very specific reason for doing so, it can be dangerous to continue because you may loose control of your drone, i did NOT test these settings):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;AFS_DUAL_LOSS:&lt;br&gt;&#xA;AFS_RC_MAN_ONLY:&lt;br&gt;&#xA;AFS_RC_FAIL_TIME:&lt;br&gt;&#xA;AFS_MAX_COM_LOSS:  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For explainations for the parameters refere to here:&lt;br&gt;&#xA;&lt;a href=&quot;https://ardupilot.org/copter/docs/parameters.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://ardupilot.org/copter/docs/parameters.html&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'am not liable about any damage you may cause by doing so!&lt;/p&gt;&#xA;" OwnerUserId="22914" LastActivityDate="2019-12-18T14:02:23.073" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19896" PostTypeId="2" ParentId="19873" CreationDate="2019-12-18T14:13:41.580" Score="1" Body="&lt;p&gt;You need not write code unless you really want to (i would strongly advise against it), all platforms related to APM/PIXHAWK will do so, are opensource and proven to work, essentially you can get the information about these things here:&lt;br&gt;&#xA;&lt;a href=&quot;https://ardupilot.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://ardupilot.org/&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&quot;https://github.com/ArduPilot&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/ArduPilot&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&quot;https://px4.io/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://px4.io/&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&quot;https://github.com/PX4/Firmware&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/PX4/Firmware&lt;/a&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now you only need to chose an existing platform and integrate it, have fun and remember to be cautious about the documentation, it is not perfect and the learning curve can be steep, but for simple solutions you should find something for you, or create your own custom solution as countless have done. (it is linux, windows, mac, mobile, etc.)&lt;/p&gt;&#xA;" OwnerUserId="22914" LastActivityDate="2019-12-18T14:13:41.580" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19897" PostTypeId="1" CreationDate="2019-12-18T17:47:47.643" Score="1" ViewCount="33" Body="&lt;p&gt;I'm interested in analytic calculation of a moment of inertia of a robot's arm in the following situation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let us assume the following:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Stationary reference frame &lt;span class=&quot;math-container&quot;&gt;$ \{b\} =  \{X_B, Y_B, Z_B\}$&lt;/span&gt; and body-attached reference frame &lt;span class=&quot;math-container&quot;&gt;$\{s\} = \{X_1,Y_1,Z_1\}$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;li&gt;A robot with four 3-DOF legs consisting of a 3 revolute joints (2 of which have parallel rotation axis)&lt;/li&gt;&#xA;&lt;li&gt;Rigid body (with 6-DOF relative to &lt;span class=&quot;math-container&quot;&gt;$\{b\}$&lt;/span&gt; frame) that connects all legs via a revolute joints&lt;/li&gt;&#xA;&lt;li&gt;A leg of interest is constantly bent in a way that &lt;span class=&quot;math-container&quot;&gt;$\alpha = \frac{\pi}{2}$&lt;/span&gt; and can rotate only along &lt;span class=&quot;math-container&quot;&gt;$Z_1$&lt;/span&gt; axis about angle &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;li&gt;Moment of inertia &lt;span class=&quot;math-container&quot;&gt;$I_{1z}$&lt;/span&gt; of a leg of interest along &lt;span class=&quot;math-container&quot;&gt;$Z_1$&lt;/span&gt; axis&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/R3gX1.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/R3gX1.png&quot; alt=&quot;Depiction of a robot and mentioned reference frames&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given that the leg can only rotate along the &lt;span class=&quot;math-container&quot;&gt;$Z_1$&lt;/span&gt; axis how does one calculate the matrix of inertia of said leg for reference frame &lt;span class=&quot;math-container&quot;&gt;$\{b\}$&lt;/span&gt;?&lt;/p&gt;&#xA;" OwnerUserId="24385" LastActivityDate="2019-12-18T17:47:47.643" Title="Moment of Inertia of a planar rotation link with a 6-DOF base" Tags="&lt;dynamics&gt;&lt;rotation&gt;&lt;theory&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19898" PostTypeId="1" AcceptedAnswerId="19963" CreationDate="2019-12-18T23:31:08.550" Score="0" ViewCount="33" Body="&lt;p&gt;I found that a configuration-space approach is a elegant way to describe problems in motion planning.&#xA;However, I was not able to find a known general way to construct configuration-spaces.&#xA;By general I mean: arbitrarily shaped object, arbitrary amount of degrees of freedom.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To give an example:&#xA;Lets assume I can parameterise an object and a space which includes obstacles. Assuming that this object is rigid we have 6 degress of freedom. (Idealy I would like to also include non-rigid object, i.e. with  additional joints). This object now moves in a space which is partially blocked by arbitrary obstacles&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now:&#xA;&lt;strong&gt;How can I construct the configuration space which only includes allowed configurations (not reachable, but allowed)?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For simple problems, one can construct them &quot;by hand&quot;.&#xA;However, I expect there to be a general way how to do this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My best idea, so far, was to sample all possible (discretised and hence finite) configurations and check whether they are overlapping with any obstacle i.e. with the help of point clouds. However, I feel like there should be a better way. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How is this handled in modern robotics?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you!&lt;/p&gt;&#xA;" OwnerUserId="24358" LastActivityDate="2020-01-07T09:56:08.587" Title="Construct Configuration-Space with Obstacles for arbitrary Object/Robot in Motion Planning" Tags="&lt;motion-planning&gt;&lt;path-planning&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19901" PostTypeId="1" AcceptedAnswerId="19902" CreationDate="2019-12-19T06:49:31.433" Score="3" ViewCount="4012" Body="&lt;p&gt;AprilTag and Aruco are both popular methods for vision-based fiducial marker pose estimation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What are the pros and cons of each fiducial marker pose estimation systems?&lt;/p&gt;&#xA;" OwnerUserId="24388" LastActivityDate="2019-12-19T06:49:31.433" Title="AprilTag vs Aruco markers" Tags="&lt;computer-vision&gt;&lt;pose&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="2" ClosedDate="2019-12-19T10:37:19.513" ContentLicense="CC BY-SA 4.0" />
  <row Id="19902" PostTypeId="2" ParentId="19901" CreationDate="2019-12-19T06:49:31.433" Score="4" Body="&lt;p&gt;Aruco (as implemented in OpenCV)&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;pros&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Easy to set up (with readily available &lt;a href=&quot;http://ev.me/arucogen/&quot; rel=&quot;nofollow noreferrer&quot;&gt;aruco marker generator&lt;/a&gt;, opencv &amp;amp; ros implementation, etc.)&lt;/li&gt;&#xA;&lt;li&gt;fewer false detection (with default parameters)&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;cons&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Newer versions of aruco is GPL licensed, hence opencv is stuck on an old implementation of aruco when it was still BSD.&lt;/li&gt;&#xA;&lt;li&gt;More susceptible to &lt;a href=&quot;https://docs.google.com/document/d/1QU9KoBtjSM2kF6ITOjQ76xqL7H0TEtXriJX5kwi9Kgc/edit#bookmark=id.ve2m6nbh7fg0&quot; rel=&quot;nofollow noreferrer&quot;&gt;rotational ambiguity&lt;/a&gt; at medium to long ranges&lt;/li&gt;&#xA;&lt;li&gt;More &lt;a href=&quot;https://docs.opencv.org/3.4/d1/dcd/structcv_1_1aruco_1_1DetectorParameters.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;tuning parameters&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;More computationally intensive&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;AprilTag (as implemented in &lt;a href=&quot;http://wiki.ros.org/apriltag_ros&quot; rel=&quot;nofollow noreferrer&quot;&gt;apriltag_ros&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;pros&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;BSD license&lt;/li&gt;&#xA;&lt;li&gt;Fewer &lt;a href=&quot;http://wiki.ros.org/apriltag_ros/Tutorials/Detection%20in%20a%20video%20stream&quot; rel=&quot;nofollow noreferrer&quot;&gt;tuning parameters&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Works fairly well even at long range&lt;/li&gt;&#xA;&lt;li&gt;Used by &lt;a href=&quot;https://github.com/nasa/AprilNav&quot; rel=&quot;nofollow noreferrer&quot;&gt;NASA&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;More flexible marker design (e.g. markers not necessarily square)&lt;/li&gt;&#xA;&lt;li&gt;Less computationally intensive&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;li&gt;cons&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;less straight forward to setup (no opencv implementation AFAIK, only ros implementation, slightly more steps to &lt;a href=&quot;https://github.com/AprilRobotics/apriltag-imgs&quot; rel=&quot;nofollow noreferrer&quot;&gt;obtain markers&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;li&gt;more false detection (with default parameters)&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="24388" LastActivityDate="2019-12-19T06:49:31.433" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19903" PostTypeId="2" ParentId="19861" CreationDate="2019-12-19T10:48:35.870" Score="1" Body="&lt;p&gt;Those two papers have a different equation for the same robot because they have taken different assumption. The first paper has considered the centre of mass to be at the end of the link, and the other paper has considered the centre of mass at the middle of the link.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/4eU3z.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4eU3z.png&quot; alt=&quot;Two-Link manipulator&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now the dynamics of any two-link manipulator irrespective of the link shape is&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;    \tau = H(q)\ddot q + C(q,\dot q)\dot q + G(q) &#xA;$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;    \begin{bmatrix}&#xA;    \tau_1 \\&#xA;    \tau_2 \\&#xA;    \end{bmatrix}&#xA;=  \begin{bmatrix}&#xA;    I_1 + I_2 + m_2l_1^2  + 2m_2l_1l_{c2}cos(q_2) &amp;amp; I_2 + m_2l_1l_{c2}cos(q) \\&#xA;    I_2 + m_2l_1l_{c2}cos(q) &amp;amp; I_2 \\&#xA;    \end{bmatrix}&#xA;    \begin{bmatrix}&#xA;    \ddot{q}_1\\&#xA;    \ddot{q}_2 \\&#xA;    \end{bmatrix} \\&#xA;+ &#xA;    \begin{bmatrix}&#xA;     -m_2l_1l_{c2}\dot{q}_2sin(q_2) &amp;amp; -m_2l_1l_{c2}(\dot{q}_1 + &#xA;     \dot{q}_2)sin(q_2)\\&#xA;     m_2\dot{q}_1l_1l_{c2}sin(q_2) &amp;amp; 0&#xA;    \end{bmatrix}&#xA;    \begin{bmatrix}&#xA;    \dot{q}_1\\&#xA;    \dot{q}_2 \\&#xA;    \end{bmatrix} \\&#xA;+&#xA;    \begin{bmatrix}&#xA;    m_1gl_{c1}sin(q_1) + m_2g(l_1sin(q_1) + l_{c2}sin(q_1 + q_2))\\&#xA;    m_2gl_{c2}sin(q_1 + q_2) \\&#xA;    \end{bmatrix} &#xA;$$&lt;/span&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here &lt;span class=&quot;math-container&quot;&gt;$I_1$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$I_2$&lt;/span&gt; are the moment of inertia about the rotating axis of link-1 and link-2 respectively. &lt;span class=&quot;math-container&quot;&gt;$l_{c1}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$l_{c2}$&lt;/span&gt; are the centre of mass of the two links.  Moment of inertia can be calculated by any CAD software or separating the shape of link into basic shape and finding the moment of inertia by the composite method as mentioned in the other answer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, the derivation of this dynamic is simple. Proceed with the Lagrangian equation and differential equation as written in the question. The Kinetic and Potential energy should be about the centre of mass of the links.&#xA;For more information read this book &lt;a href=&quot;http://people.csail.mit.edu/jbarry/spring2011PR2/readings/asado.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Introduction to Robotics&lt;/a&gt; chapter 7.&lt;/p&gt;&#xA;" OwnerUserId="11698" LastActivityDate="2019-12-19T10:48:35.870" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19904" PostTypeId="1" CreationDate="2019-12-19T11:37:15.130" Score="0" ViewCount="7" Body="&lt;p&gt;I am building a fpv quadcopter and I encountered the following problem:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I soldered all points correctly into their allocated pads and ensured there were no shorts. I use a racerstarf4s flight controller and esc combo which is in relatively good condition.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I used a flysky ia6b receiver which is bound to the transmitter as indicated on both devices.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I start betaflight and continue to the transmitter section when I move the sticks around on the transmitter no input is detected.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How do I make this detectable, how can I make it control the drone?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="24128" LastEditorUserId="24128" LastEditDate="2019-12-20T00:09:03.103" LastActivityDate="2019-12-20T00:09:03.103" Title="Flysky I6 transmitter not responsive on betaflightl" Tags="&lt;quadcopter&gt;&lt;radio-control&gt;&lt;input&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19905" PostTypeId="1" CreationDate="2019-12-19T22:25:40.783" Score="1" ViewCount="101" Body="&lt;p&gt;I am working with a Universal Robots UR5e. I am attempting to do a simple back and forth movement of 60 Degrees with Wrist 2, operating at 2 Hz (back and forth in 0.5s). Looking at the Joint Limits, the maximum Joint Speed is listed at 191 deg/sec, which should be plenty fast for this. However, I can't seem to get it to move faster than about 1 Hz. Even if I set the Robot Limits to Least Restricted, I max out at this speed. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am using a movej command and setting t=0.100 to get the max speed. If I set it to  t=0.250 I will still see the movement take over a second to go back and forth. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyoneone have any suggestions for how to speed up the movement?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="24389" LastActivityDate="2021-02-03T02:44:06.903" Title="Speeding Up UR5e Joint Movement" Tags="&lt;robotic-arm&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19907" PostTypeId="2" ParentId="19889" CreationDate="2019-12-21T19:20:56.030" Score="0" Body="&lt;p&gt;When you have an encoder with sufficient resolution, you can just take the first difference (to get a velocity measurement), and then use a PI or PID controller for velocity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my experience, because you're basically taking the derivative before you wrap the thing with control, just a PI controller will be plenty.  The only exception to this would be if you're driving something that's got complicated dynamics (and then things may get weird, because you'd essentially be taking the derivative twice).&lt;/p&gt;&#xA;" OwnerUserId="1411" LastActivityDate="2019-12-21T19:20:56.030" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19909" PostTypeId="2" ParentId="19889" CreationDate="2019-12-21T21:45:57.623" Score="0" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;but because the output is proportional to the error (again, who&#xA;  would've thought), the motors logically begin to slow down. That's one&#xA;  problem, the motors have to keep up their outputs to stay at a&#xA;  velocity, not slow down as they get closer.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Theoretically and practically, even for simple systems, the error never really is exactly zero at all times, for nonzero setpoint. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are using a PID controller (not just P controller), then even if error &lt;span class=&quot;math-container&quot;&gt;$e = 0$&lt;/span&gt; the other terms may be nonzero: &#xA;&lt;span class=&quot;math-container&quot;&gt;$\int e \neq 0 $&lt;/span&gt; or &lt;span class=&quot;math-container&quot;&gt;$\frac{d}{dt}e \neq 0$&lt;/span&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If all the PID terms become zero, the input to the motor will be zero and the velocity will drop. But as soon as it deviates from the setpoint, the error becomes nonzero, and the PID will again come into action. There is some delay between the error computation and the output of the system. So error won't be zero at all times.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can implement the PID controller as usual. Tune it such that the error minimizes. You can plot the setpoint velocity and the motor velocity to see the controller performance. &lt;/p&gt;&#xA;" OwnerUserId="11698" LastActivityDate="2019-12-21T21:45:57.623" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19910" PostTypeId="1" CreationDate="2019-12-22T01:01:01.573" Score="1" ViewCount="47" Body="&lt;p&gt;If we consider the first-order Taylor expansion of a general nonlinear function at the operating point &lt;span class=&quot;math-container&quot;&gt;$x=x_0$&lt;/span&gt;, then we have the following,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$f(x) \approx f(x_0) + \frac{\partial{f}}{\partial{x}}|_{x=x_0} (x - x_0)$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If we now consider the linearization process of the EKF motion model equations with general nonlinear dynamics given by&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$\dot{x} = f(x,u)$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;then we find,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$f(x,u) \approx f(x_0,u_0) + \frac{\partial{f}}{\partial{x}}|_{x=x_0,u=u_0} (x - x_0) + \frac{\partial{f}}{\partial{u}}|_{x=x_0,u=u_0} (u - u_0)$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$\dot{x} \approx f(x_0,u_0) + \frac{\partial{f}}{\partial{x}}|_{x=x_0,u=u_0} (x - x_0) + \frac{\partial{f}}{\partial{u}}|_{x=x_0,u=u_0} (u - u_0)$$&lt;/span&gt;&#xA;And in discrete form using Euler integration,&#xA;&lt;span class=&quot;math-container&quot;&gt;$$x_{k+1} = x_{k} + f(x_0,u_0)\Delta t + \frac{\partial{f}}{\partial{x}}|_{x=x_0,u=u_0} (x - x_0) \Delta t + \frac{\partial{f}}{\partial{u}}|_{x=x_0,u=u_0} (u - u_0) \Delta t$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, whenever I see the EKF linearization process explained, the evaluation of the original function at the operating point, &lt;span class=&quot;math-container&quot;&gt;$f(x_0,u_0)$&lt;/span&gt;, and the differences from the operating point, &lt;span class=&quot;math-container&quot;&gt;$(x-x_0)$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$(u-u_0)$&lt;/span&gt;, seem to be ignored. As such, we instead get,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$x_{k+1} = x_{k} + \frac{\partial{f}}{\partial{x}}|_{x=x_0,u=u_0} x\Delta t + \frac{\partial{f}}{\partial{u}}|_{x=x_0,u=u_0} u \Delta t$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$x_{k+1} = x_{k} + A_k x_k \Delta t + B_k u_k \Delta t$$&lt;/span&gt;&#xA;where &lt;span class=&quot;math-container&quot;&gt;$A_k = \frac{\partial{f}}{\partial{x}}|_{x=x_0,u=u_0}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$B_k = \frac{\partial{f}}{\partial{u}}|_{x=x_0,u=u_0}$&lt;/span&gt;&#xA;which is equivalent to &#xA;&lt;span class=&quot;math-container&quot;&gt;$$x_{k+1} =  A_{d,k}x_k + B_{d,k} u_k$$&lt;/span&gt;&#xA;where &lt;span class=&quot;math-container&quot;&gt;$A_{d,k} = I+A_k\Delta t$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$B_{d,k} = B_k\Delta t$&lt;/span&gt; are the discrete-time state transition matrix and control input matrix, respectively.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm sure it has been well documented somewhere, by why are we allowed to only consider the operating point &lt;span class=&quot;math-container&quot;&gt;$(x_0, u_0)$&lt;/span&gt; in the &lt;span class=&quot;math-container&quot;&gt;$A$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$B$&lt;/span&gt; Jacobians (and by extension the observation/measurement Jacobian used in the EKF's update step), and ignore &lt;span class=&quot;math-container&quot;&gt;$f(x_0,u_0)$&lt;/span&gt; as well as replace &lt;span class=&quot;math-container&quot;&gt;$(x-x_0)$&lt;/span&gt; with &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$(u-u_0)$&lt;/span&gt; with &lt;span class=&quot;math-container&quot;&gt;$u$&lt;/span&gt;?&lt;/p&gt;&#xA;" OwnerUserId="24397" LastEditorUserId="24397" LastEditDate="2019-12-22T01:09:03.940" LastActivityDate="2019-12-22T01:09:03.940" Title="EKF linearization using Taylor expansion and absence of operating point" Tags="&lt;kalman-filter&gt;&lt;ekf&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19912" PostTypeId="1" AcceptedAnswerId="19913" CreationDate="2019-12-23T02:44:45.853" Score="1" ViewCount="25" Body="&lt;p&gt;I'm designing a fluid sprayer Drone &lt;strong&gt;(HEXACOPTER)&lt;/strong&gt; for Agriculture as my college final year project. The capacity of the fluid spraying unit including fluid &amp;amp; Sprayer around 2kg. I don't know how to select motor and blades. Can you suggest to me what motor and blade can be used for my project? within 30k. Thank you.&lt;/p&gt;&#xA;" OwnerUserId="21688" LastActivityDate="2019-12-23T18:12:03.087" Title="How should i select motor and blades for my Hexacopter?" Tags="&lt;quadcopter&gt;&lt;battery&gt;&lt;brushless-motor&gt;&lt;flight-controller&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19913" PostTypeId="2" ParentId="19912" CreationDate="2019-12-23T18:12:03.087" Score="1" Body="&lt;p&gt;Motor and blades must be selected on the basis of amount of thrust required. Estimation of thrust of a motor depends on battery voltage, prop size and motor choice. Changing one of these will change the amount of thrust generated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Motors must be purchased from the manufacturers providing thrust tables that shows how many grams of thrust will be generated for different variables mentioned above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let us assume that there is a thrust value of 670 grams for a 1045 prop at 11.1 volts  and 490 grams for a 8045 props at 11.1 volts according to the thrust table of a specific motor. Further the required thrust to weight ratio for the aircraft to fly is 2:1 then, the total thrust produced by 8045 props will be 490×6=2940 grams and that by 1045 props will be 670×6=4020 grams. &#xA;Assuming the total weight of the aircraft to be 1.5 kilograms, a total thrust of 2940 would be pretty close to what is required for the craft to fly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is just an example to help understand the concept behind. You can adopt this approach to choose correct parts for the specifications provided by you.&#xA;Coming to the cost part which you want to be &amp;lt;=30k rupees is something no one can assure because the cost of the parts will differ from manufacturer to manufacturer and there might be other factors involved into it like customs. So, you will have to compare the prices on your own or you can check with various forums to get used parts for a cheaper price for overall cost reduction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this helped ;)&#xA;Happy flying!!&lt;/p&gt;&#xA;" OwnerUserId="24019" LastActivityDate="2019-12-23T18:12:03.087" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19914" PostTypeId="2" ParentId="11072" CreationDate="2019-12-23T21:10:12.737" Score="0" Body="&lt;p&gt;Use a robot vacuum with mapping ability. Ramp up battery and find a friend than can code . That way you could get that sort of size for way under 4000$. Simple fix. Can be made accurate with RFID sensors and will give you limitless boundaries in theory.  Just a thought&lt;/p&gt;&#xA;" OwnerUserId="24404" LastActivityDate="2019-12-23T21:10:12.737" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19915" PostTypeId="2" ParentId="2250" CreationDate="2019-12-24T18:01:12.883" Score="0" Body="&lt;p&gt;From my side, I believe the Robotic toolbox provides a trajectory map and it might be useful with it to find the inverse kinematics of the manipulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;MATLAB: &lt;a href=&quot;https://ch.mathworks.com/help/robotics/ug/inverse-kinematics-algorithms.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://ch.mathworks.com/help/robotics/ug/inverse-kinematics-algorithms.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="24408" LastActivityDate="2019-12-24T18:01:12.883" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19916" PostTypeId="2" ParentId="2250" CreationDate="2019-12-24T22:19:08.340" Score="0" Body="&lt;p&gt;Depending on how deep you want to dive in to this topic, I can recommend the book by Peter Corke (&lt;a href=&quot;http://petercorke.com/wordpress/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://petercorke.com/wordpress/&lt;/a&gt;). It should be in stock in most universities. One may complain, that it simplifies some points every now and then, but for the entry level it is the weapon of choice, in my opinion. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further, for modelling a robot, it might be valuable to understand &lt;a href=&quot;https://en.wikipedia.org/wiki/Denavit%E2%80%93Hartenberg_parameters&quot; rel=&quot;nofollow noreferrer&quot;&gt;Denavit–Hartenberg parameters&lt;/a&gt; (also covered in the previously mentioned book).&lt;/p&gt;&#xA;" OwnerUserId="24251" LastActivityDate="2019-12-24T22:19:08.340" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19917" PostTypeId="1" AcceptedAnswerId="19921" CreationDate="2019-12-25T07:46:55.967" Score="0" ViewCount="21" Body="&lt;p&gt;The artificial potential method always takes robot as a point, if the manipulator is 6 degrees of freedom, how to use this method in path planning while six links can avoid the collision.&lt;/p&gt;&#xA;" OwnerUserId="19138" LastActivityDate="2020-01-25T00:00:19.717" Title="How to use artificial potential function in manipulator path planning?" Tags="&lt;manipulator&gt;&lt;path-planning&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19918" PostTypeId="1" CreationDate="2019-12-25T08:58:44.350" Score="0" ViewCount="22" Body="&lt;p&gt;Can I use 3 blades instead of 2 blades with the same pitch and dia to increase the thrust of my motor? Will it burn my motor? or it will damage my ESC? Some motors are having high torque but low rpm, others have low torque with high rpm. Is it possible to increase my thrust power without damaging the motor and ESC? will it efficient to hover my copter? &lt;/p&gt;&#xA;" OwnerUserId="21688" LastActivityDate="2019-12-25T17:20:49.603" Title="Can I use 3 blades instead of 2 blades with the same pitch and dia to increase the thrust of my motor?" Tags="&lt;quadcopter&gt;&lt;arduino&gt;&lt;battery&gt;&lt;brushless-motor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19919" PostTypeId="1" AcceptedAnswerId="19923" CreationDate="2019-12-25T11:34:59.397" Score="0" ViewCount="100" Body="&lt;p&gt;Hi I'm trying to mount a few things to the iRobot Create 2 and I wanted to secure it to the robot in a better way than the holes indicated on the green cover! Because once I drill does holes, how am I actually going to secure anything to the cover and not drill into the plastic chassis underneath? Maybe heatsets would work but I hope that's not the solution because the green cover is quite thin. So After tearing the whole thing down a few times, I thought of using the existing screw holes for the chassis. I know that they are meant to be self-tapping plastic screws (thanks iRobot!!!) but I'm pretty sure I found the thread size for them which is No. 4 (&lt;a href=&quot;https://www.mcmaster.com/99461a140&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.mcmaster.com/99461a140&lt;/a&gt;). I just wanted to see if anyone has done this before and what kind of results they got by mounting right to the chassis. &lt;/p&gt;&#xA;" OwnerUserId="24411" LastActivityDate="2019-12-26T02:47:13.243" Title="Can I screw directly into the iRobot Create 2 chassis rather than using the mounting holes indicated on the green cover?" Tags="&lt;irobot-create&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19920" PostTypeId="2" ParentId="19918" CreationDate="2019-12-25T17:20:49.603" Score="1" Body="&lt;p&gt;Increasing the number of  blades in the props increases the amount of thrust generated but at the cost of efficiency i.e. more current will be drawn as we increase the number of blades. This is due to addition of weight and also because of increased drag, as each blade will have to cut through the turbulent air from more preceding blades which will result into lesser flight time as the battery will be consumed very quickly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The thrust is increased due to increased surface area by the addition of extra blades which means you can lift same amount of weight with shorter dia props.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Further addition of blades slightly improves the control over the aircraft which might be required for racing multi rotor crafts or for indoor flying of smaller UAVs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But generally speaking a two blade prop is better option as compared to three blade because we do not want to overload the motor and make it draw more current which might result into heating issues and even burning of ESCs. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can further read about props from &lt;a href=&quot;http://aerotrash.over-blog.com/2015/02/2-blade-vs-3-blade-and-4-blade-propellers.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; to get a better understanding of the concept.&lt;/p&gt;&#xA;" OwnerUserId="24019" LastActivityDate="2019-12-25T17:20:49.603" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19921" PostTypeId="2" ParentId="19917" CreationDate="2019-12-25T23:20:10.660" Score="0" Body="&lt;p&gt;The artificial potential function correctly treats the robot as a point. It is the end-effector that is to be considered as the point object to be planned for while the rest of the manipulator kinematic chain is only considered to determine the free configuration space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When the planning algorithm determines an end-effector's cartesian coordinate,  you should employ collision checking algorithms (like the  Gilbert–Johnson–Keerthi distance algorithm available in open-source packages like Flexible Collision Library(FCL) or Bullet) to determine if the pose lies in the free configuration space or not. If the pose belongs to C-free, then it is added to the path else a new point in the vicinity is proposed and same steps are repeated.&lt;/p&gt;&#xA;" OwnerUserId="18572" LastActivityDate="2019-12-25T23:20:10.660" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19923" PostTypeId="2" ParentId="19919" CreationDate="2019-12-26T02:47:13.243" Score="2" Body="&lt;p&gt;I think you may have answered your own question here, but in case you're looking for reassurance, I don't see any reason why you couldn't use the bosses that already exist; iRobot provides their locations &lt;a href=&quot;https://www.irobotweb.com/-/media/MainSite/PDFs/About/STEM/Create/iRobotCreate2-ScrewBossLocations.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. I have seen projects where others use them, though I usually use inserts pressed into the cover, or else 3D-print a replacement bin. If you do use the existing bosses, be careful not to strip them, since as you pointed out, they're self-tapping screws. I suppose if you were feeling adventurous, you could take the top cover off and replace some of the bosses with heat set machine screw inserts...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;sup&gt;Please note that I am an iRobot employee, but the postings on this site are my own and don't necessarily represent iRobot's positions, strategies, or opinions.&lt;/sup&gt;&lt;/p&gt;&#xA;" OwnerUserId="7665" LastActivityDate="2019-12-26T02:47:13.243" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19925" PostTypeId="1" CreationDate="2019-12-26T07:01:24.517" Score="0" ViewCount="131" Body="&lt;p&gt;I would like to calculate the max torque and the rpm to select the right motor.&#xA;the application does not require a very fast rotation speed (rpm) however it should be accurately controlled.&#xA;I understand that the torque &lt;span class=&quot;math-container&quot;&gt;$T = L*m*g$&lt;/span&gt;, also it is &lt;span class=&quot;math-container&quot;&gt;$T = I*{\alpha}$&lt;/span&gt;&#xA;and if not mistaken the inertia in this case &lt;span class=&quot;math-container&quot;&gt;$I = 1/2 *MR^2$&lt;/span&gt;&#xA;but what would be the right way to implement these equations in this case, as the axis of rotation is about the shaft itself.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/HH0Uh.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HH0Uh.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="24405" LastEditorUserId="110" LastEditDate="2019-12-27T01:35:46.377" LastActivityDate="2021-05-20T04:08:15.803" Title="Torque calculation for a shaft end effector" Tags="&lt;robotic-arm&gt;&lt;motor&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19927" PostTypeId="1" CreationDate="2019-12-26T12:34:50.760" Score="0" ViewCount="12" Body="&lt;p&gt;I am working with Pixhawk 2.1 cube, using telemetry module and mavros to establish communication between vehicle and companion computer. I am using rostopic echo to save /mavros/local_position/pose msg to a csv file. While working in sitl there is loss-less transmission of data. But when I connect to real vehicle there is huge loss of data and very few data points gets stored in csv file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the reason behind this?&lt;/p&gt;&#xA;" OwnerUserId="23987" LastActivityDate="2019-12-26T12:34:50.760" Title="How to prevent loss of mavros msg packets?" Tags="&lt;quadcopter&gt;&lt;ros&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19928" PostTypeId="2" ParentId="19925" CreationDate="2019-12-26T18:36:17.263" Score="0" Body="&lt;p&gt;I will try share some light in this matter. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your understanding of the torque is only valid when the distance vector is not parallel with the axis of rotation (in your case is parallel). In your case that L is not the distance that you should consider for your problem, only the inertia generated by the added mass/payload. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is the center of mass of the payload (7kg) aligned with the rotation axis of the shaft ? If not, then you should consider the parallel axis theorem to add the corresponding inertia. You can get these inertia parameters from a CAD software or by approximating the shape of your part with a basic shape like a cylinder or cube. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To consider the torque needed to move it also consider what is the position that it is mounted, like horizontal, vertical or other angle. Then, you can add the torque needed from the gravity payload.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should also consider the reduction added by the gearbox which increase/decrease the torque in the shaft and decrease/increase the velocity depending on the configuration you have. The motor inertia in the shaft should be multiplied by the gearbox ratio ^2 . &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Later you can consider acceleration and deceleration needed for your application.  &lt;/p&gt;&#xA;" OwnerUserId="21229" LastActivityDate="2019-12-26T18:36:17.263" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19929" PostTypeId="1" CreationDate="2019-12-26T22:59:36.097" Score="0" ViewCount="79" Body="&lt;p&gt;So i solved the first 3 Joints of this 6DOF but i dont know how to deal with the Rotation Matrix at Joint 4,5 and 6. I know that i need a XYX Rotation Matrix but I dont know how to affect the TCP with it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is my current State:&#xA;&lt;a href=&quot;https://www.youtube.com/watch?v=YVI0FZqCo1g&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=YVI0FZqCo1g&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If there are Questions about smth let me know&lt;/p&gt;&#xA;" OwnerUserId="24417" LastActivityDate="2019-12-26T22:59:36.097" Title="6 DOF Spherical Wrist IK Calculation (Unity)" Tags="&lt;inverse-kinematics&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19931" PostTypeId="2" ParentId="4784" CreationDate="2019-12-27T23:42:17.233" Score="0" Body="&lt;p&gt;For someone who will investigate this issue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you created a model with two &lt;code&gt;link&lt;/code&gt; but without &lt;code&gt;joint&lt;/code&gt; between them, you will get parse issue:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Error [parser_urdf.cc:XXXX] Unable to call parseURDF on robot model&#xA;Error [parser.cc:XXX] parse as old deprecated model file failed.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="24422" LastActivityDate="2019-12-27T23:42:17.233" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19933" PostTypeId="1" AcceptedAnswerId="19948" CreationDate="2019-12-28T13:57:56.677" Score="1" ViewCount="123" Body="&lt;p&gt;Im reading &lt;em&gt;Theory of Applied Robotics, 2nd edition&lt;/em&gt; by Jazar, specifically section 7.1, example 207 on page 390. The author is trying to express angular velocity by unit quaternions. Starting from quaternion representation of rotation&#xA;&lt;span class=&quot;math-container&quot;&gt;\begin{equation}&#xA;{}^G \mathbf r = e(t) {}^B \mathbf r e^*(t) \tag{1}&#xA;\end{equation}&lt;/span&gt;&#xA;where &lt;span class=&quot;math-container&quot;&gt;$e$&lt;/span&gt; is unit quaternion and &lt;span class=&quot;math-container&quot;&gt;$e^*$&lt;/span&gt; is its inverse. Using product rule for derivative and &lt;span class=&quot;math-container&quot;&gt;$(1)$&lt;/span&gt; we get&#xA;&lt;span class=&quot;math-container&quot;&gt;\begin{align}&#xA;{}^G \dot{\mathbf r} &amp;amp;= \dot e {}^B \mathbf r e^* + e {}^B\mathbf r \dot{e}^*\\&#xA;&amp;amp;= \dot e e^* {}^G \mathbf r + {}^G \mathbf r e\dot{e}^*\\&#xA;&amp;amp;= 2\dot e e^* {}^G \mathbf r&#xA;\end{align}&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Author states that 3rd equality comes from orthogonality property of unit quaternion &lt;span class=&quot;math-container&quot;&gt;$ee^* = 1$&lt;/span&gt; which produces, using product rule&#xA;&lt;span class=&quot;math-container&quot;&gt;\begin{equation}&#xA;\dot e e^* + e \dot{e}^* = 0&#xA;\end{equation}&lt;/span&gt;&#xA;Using this we should get&#xA;&lt;span class=&quot;math-container&quot;&gt;\begin{align}&#xA;{}^G \dot{\mathbf r} &amp;amp;= \dot e {}^B \mathbf r e^* + e {}^B\mathbf r \dot{e}^*\\&#xA;&amp;amp;= \dot e e^* {}^G \mathbf r + {}^G \mathbf r e\dot{e}^*\\&#xA;&amp;amp;= \dot e e^* {}^G \mathbf r - {}^G \mathbf r \dot e e^*\\&#xA;\end{align}&lt;/span&gt;&#xA;so apparently to get &lt;span class=&quot;math-container&quot;&gt;$2\dot e e^* {}^G \mathbf r$&lt;/span&gt; in the end it should be that&#xA;&lt;span class=&quot;math-container&quot;&gt;\begin{equation}&#xA;- {}^G \mathbf r \dot e e^* = \dot e e^* {}^G \mathbf r \tag{2}&#xA;\end{equation}&lt;/span&gt; &#xA;I'm looking for an answer that explains how do we derive &lt;span class=&quot;math-container&quot;&gt;$(2)$&lt;/span&gt;&lt;/p&gt;&#xA;" OwnerUserId="24260" LastActivityDate="2020-01-03T06:50:33.733" Title="Angular velocity in terms of quaternions" Tags="&lt;kinematics&gt;&lt;theory&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19934" PostTypeId="1" AcceptedAnswerId="19936" CreationDate="2019-12-29T22:10:25.500" Score="0" ViewCount="38" Body="&lt;p&gt;I have 8 dynamixels that are connected together. Everything worked fine until I changed all their ids to 200,201,202, ... To change their ids, I used &lt;a href=&quot;https://github.com/HumaRobotics/dynamixel_hr&quot; rel=&quot;nofollow noreferrer&quot;&gt;this python library&lt;/a&gt;. Now, none of my motors are detected. I tried testing one motor at a time and I have the same results for all motors.&lt;/p&gt;&#xA;&lt;p&gt;I tried running &lt;code&gt;factory_reset.py&lt;/code&gt; from &lt;a href=&quot;https://github.com/ROBOTIS-GIT/DynamixelSDK/blob/master/python/tests/protocol1_0/factory_reset.py&quot; rel=&quot;nofollow noreferrer&quot;&gt;DynamixelSDK&lt;/a&gt; and the script returned:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Succeeded to open the port&lt;/p&gt;&#xA;&lt;p&gt;Succeeded to change the baudrate Now the controller baudrate is : 1000000&lt;/p&gt;&#xA;&lt;p&gt;[ID:001] Try factoryreset :&lt;/p&gt;&#xA;&lt;p&gt;Aborted&lt;/p&gt;&#xA;&lt;p&gt;[TxRxResult] There is no status packet!&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Any idea why I have this error, and how I can fix this? Thank you.&lt;/p&gt;&#xA;" OwnerUserId="24431" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2019-12-30T09:03:06.643" Title="Dynamixels (AX-12A) no longer detected after id change" Tags="&lt;python&gt;&lt;dynamixel&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19935" PostTypeId="1" CreationDate="2019-12-30T06:12:26.147" Score="1" ViewCount="158" Body="&lt;p&gt;When using a Kalman filter, one of the variables that must be defined is a matrix representing the covariance of the observation noise. In the implementations I have seen, this matrix is defined once, and that same matrix is then used throughout the algorithm, each time an update step is taken.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, in my particular problem, I am able to get a state-dependent covariance of the observation noise. This is because instead of using the raw observation, I actually use the observation to predict the state (using some machine learning), and this prediction itself comes with a known uncertainty. This is effectively equivalent to treating the state prediction as my &quot;observation&quot;, and the uncertainty from this prediction as the covariance of the observation noise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, in the update step of the Kalman filter, could I use this state-dependent noise covariance, such that each update would use a different covariance matrix? Or does this invalidate all the maths, and I really do need to use a fixed covariance matrix for the entire algorithm?&lt;/p&gt;&#xA;" OwnerUserId="8880" LastActivityDate="2020-01-02T11:25:55.663" Title="State-dependent Covariance in the Kalman Filter" Tags="&lt;kalman-filter&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19936" PostTypeId="2" ParentId="19934" CreationDate="2019-12-30T09:03:06.643" Score="1" Body="&lt;p&gt;Try a for loop with all possible ids until it is detected. &lt;/p&gt;&#xA;" OwnerUserId="21229" LastActivityDate="2019-12-30T09:03:06.643" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19937" PostTypeId="2" ParentId="10970" CreationDate="2019-12-30T09:59:55.837" Score="0" Body="&lt;p&gt;You need the power for Arduino Uno which you could get it from the ESC's red wire and connect it with vin pin.&lt;/p&gt;&#xA;" OwnerUserId="24433" LastActivityDate="2019-12-30T09:59:55.837" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19938" PostTypeId="2" ParentId="19935" CreationDate="2019-12-30T13:06:26.630" Score="2" Body="&lt;p&gt;The math is generally only done out for a fixed covariance matrix, so yes you would be invalidating the math. If you had an analytic solution, or at least bounds, for how your covariance changes it &lt;em&gt;might&lt;/em&gt; be possible to redo the math to either prove the normal equations still have the same guarantees or give updated equations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, in practice the covariance matrix is often treated as a tuning variable rather than real observation covariance. Even worse, nonlinear Kalman filters also invalidate the math. Both situations are very common, though, and have proved to work well when experimentally tuned. Generally all you are loosing is optimality and perhaps a narrower operation window.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2019-12-30T13:06:26.630" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19939" PostTypeId="2" ParentId="19933" CreationDate="2019-12-30T13:58:55.250" Score="0" Body="&lt;p&gt;This is given:&#xA;&lt;span class=&quot;math-container&quot;&gt;\begin{align}&#xA;{}^G \dot{\mathbf r} &amp;amp;= 2\dot e e^* {}^G \mathbf r&#xA;\end{align}&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And also:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;\begin{align}&#xA;{}^G \dot{\mathbf r} &amp;amp;= \dot e e^* {}^G \mathbf r - {}^G \mathbf r \dot e e^*\\&#xA;\end{align}&lt;/span&gt;&#xA;Equating both one has:&#xA;&lt;span class=&quot;math-container&quot;&gt;\begin{align}&#xA;2\dot e e^* {}^G \mathbf r &amp;amp;= \dot e e^* {}^G \mathbf r - {}^G \mathbf r \dot e e^*\\&#xA;\end{align}&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;\begin{align}&#xA;\dot e e^* {}^G \mathbf r &amp;amp;= - {}^G \mathbf r \dot e e^*\\&#xA;\end{align}&lt;/span&gt;&#xA;The last equation is &lt;span class=&quot;math-container&quot;&gt;$(2)$&lt;/span&gt;.&lt;/p&gt;&#xA;" OwnerUserId="15387" LastActivityDate="2019-12-30T13:58:55.250" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19940" PostTypeId="1" CreationDate="2019-12-30T15:47:13.810" Score="0" ViewCount="47" Body="&lt;p&gt;Let's say I am controlling a robot using a velocity controller. This involves specifying a target velocity for the motors, which is achieved using a PID controller (the low-level details of this PID controller are hidden from me, since it is built into the robot). I now want to use a Kalman filter to estimate the true position of the robot. In a Kalman filter, you need to define your state vector, and optionally your control input vector. What should I use as my state vector, and what should I use as my control vector?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason why I am unsure is due to the fact that I am using a velocity controller. So, the robot's velocity could be part of its state -- but it could also be part of the control vector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One option is that I could define the state vector as [&lt;em&gt;robot_position&lt;/em&gt;, &lt;em&gt;robot_velocity&lt;/em&gt;], where &lt;em&gt;robot_position&lt;/em&gt; is the estimated position, and &lt;em&gt;robot_velocity&lt;/em&gt; is the target velocity from the velocity controller. And I would not use a control vector. The prediction of the next state would be (&lt;em&gt;robot_position&lt;/em&gt; + &lt;em&gt;robot_velocity&lt;/em&gt; * time).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another option is that I could define the state vector as [&lt;em&gt;robot_position&lt;/em&gt;], and then define the control vector as [&lt;em&gt;robot_velocity&lt;/em&gt;]. The prediction of the next state would be similar to above, but that &lt;em&gt;robot_velocity&lt;/em&gt; would come from the control vector, rather than the state vector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A third option would be to define the state vector as [&lt;em&gt;robot_position&lt;/em&gt;, &lt;em&gt;robot_velocity&lt;/em&gt;], and then define the control vector as [&lt;em&gt;robot_velocity&lt;/em&gt;]. So, both the state and control vectors include the robot's velocity. But I'm not sure how the prediction step would then be calculated -- would the robot's velocity in the next step be based on the control velocity, or the previous robot velocity? Or both?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can somebody please explain which of these is the right approach? I'm just generally quite confused about the difference between the state and the control input, for the case where you have a controller in the loop which directly controls one of the components of the state vector.&lt;/p&gt;&#xA;" OwnerUserId="8880" LastActivityDate="2019-12-31T13:06:11.293" Title="In a Kalman filter, what should be included in the state, and what should be included in the control?" Tags="&lt;kalman-filter&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19941" PostTypeId="2" ParentId="19940" CreationDate="2019-12-31T12:49:03.347" Score="1" Body="&lt;p&gt;There are many valid ways to approach this. I think the most straight forward way is to have a kalman filter that has a state vector of position and velocity. The control input is used within the kalman filter propagation step. Assume that the tracking controllers will follow your command with some time constant t. Using your commanded velocity, you will be able to propagate the estimated position and velocity across dt using the commanded control input.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The design of the control input should be separate for now. The kalman filter does not need to know how you calculated the commanded velocity, all it needs is the commanded velocity and how that will change the states being estimated.&lt;/p&gt;&#xA;" OwnerUserId="8842" LastEditorUserId="8842" LastEditDate="2019-12-31T13:06:11.293" LastActivityDate="2019-12-31T13:06:11.293" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19944" PostTypeId="1" CreationDate="2020-01-02T09:55:29.443" Score="1" ViewCount="52" Body="&lt;p&gt;I am studying mobile robots, and I am focusing my attention to the unycicle. I have a doubt concerning the motion planning part. In particular I don't understand when the motion planning is done and where to put a motion planning module in a block scheme.&lt;/p&gt;&#xA;&lt;p&gt;Suppose I want to build an artificial potential field to drive the robot to an initial position to a final position. I don't understand if I have to do first the localization, for example using an Extended Kalman Filter, or the localization comes after.&lt;/p&gt;&#xA;&lt;p&gt;For what I have undeerstood, I first need to stabilize the system, for example using feedback linearization, and then pass the velocity inputs to the robot. Then I have seen that we do localization, which if we look at a block scheme will be in the feedback part.&lt;/p&gt;&#xA;&lt;p&gt;But, in this block scheme I don't undesrtand where to do motion planning.&lt;/p&gt;&#xA;&lt;p&gt;Can somebody please help me?&lt;/p&gt;&#xA;&lt;p&gt;[EDIT] I have to fill my block scheme with three elemnts:&lt;/p&gt;&#xA;&lt;p&gt;-A robot-independent module that uses the environment geometry and the assigned goal to build an artificial force field &lt;span class=&quot;math-container&quot;&gt;$f(p)$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;-A module that transforms the artificial command f(p) into actual velocity inputs &lt;span class=&quot;math-container&quot;&gt;$v$&lt;/span&gt;,&lt;span class=&quot;math-container&quot;&gt;$ ω$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;-. A module that computes the robot state needed by the first two.&lt;/p&gt;&#xA;&lt;p&gt;the robot I am considering is a unycicle were &lt;span class=&quot;math-container&quot;&gt;$q = (p, θ)$&lt;/span&gt; is the robot configuration, with &lt;span class=&quot;math-container&quot;&gt;$p = (x, y)$&lt;/span&gt;, and by &lt;span class=&quot;math-container&quot;&gt;$v$&lt;/span&gt;,&lt;span class=&quot;math-container&quot;&gt;$ ω$&lt;/span&gt; its velocity inputs. An idea that came into my mind is to wrrite a block scheme where I perform input-output linearization, so I have to add a decoupling matrix &lt;span class=&quot;math-container&quot;&gt;$T(x)$&lt;/span&gt;, which will work as module that transforms the artificial command f(p) into the velocities, but the rest I don't know much how to do. For example what I tried is:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/5M8pf.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/5M8pf.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;but for sure it is not correct, since I am not considering &lt;span class=&quot;math-container&quot;&gt;$f(q)$&lt;/span&gt; and I don't know how to place the motion planning part.&lt;/p&gt;&#xA;&lt;p&gt;I am considering artificial potential field.&lt;/p&gt;&#xA;&lt;p&gt;Can somebody help me?&lt;/p&gt;&#xA;&lt;p&gt;[EDIT] ingnore the arrow going a little bit out in the feedback, it is a mistake I did when using the software. Sorry it is the first time I do i blck diagram on a software.&lt;/p&gt;&#xA;" OwnerUserId="21797" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2020-01-08T02:22:22.893" Title="When do I do motion planning?" Tags="&lt;mobile-robot&gt;&lt;motion-planning&gt;" AnswerCount="0" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19945" PostTypeId="2" ParentId="19935" CreationDate="2020-01-02T11:25:55.663" Score="1" Body="&lt;p&gt;The maths of the Kalman filter depend on a &lt;strong&gt;dynamic&lt;/strong&gt; Ricatti equation. Under some assumtions about the covariance matrices, this dynamic equiation is stable and converges to a solution. The Kalman filter implementation that you must likely know, obtains the filter gain (also known as Kalman gain) by using the solution of the Ricatti equation for the (user) given convariance matrices.Ths produces a simpified &lt;strong&gt;steady state&lt;/strong&gt; filter implementation which is the most widely used version of the Kalman filter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As @ryan0279 mentioned, the simplified steady state solution has certain mathematical properties that make the filter have some very nice stability and performace characteristics. If you implement the filter differently, these characteristics might no longer hold. You might end up with an unstable filter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nevertheless, this does not mean that you cannot implement the filter using a time-varying model or covariance matrices. Heck, the widely used version of the nonlinear version of the Kalman Filter (&lt;a href=&quot;https://en.wikipedia.org/wiki/Extended_Kalman_filter&quot; rel=&quot;nofollow noreferrer&quot;&gt;Extended Kalman Filter&lt;/a&gt; kind of does that. Of course stability is not guaranteed for these kind of implementations, but people use them any way because in many use cases they just work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A way to implement what you want is to solve the dynamic ricatti equation of the Kamlan filter along with your filter dynamics, similar to how the &lt;a href=&quot;https://en.wikipedia.org/wiki/Kalman_filter#Hybrid_Kalman_filter&quot; rel=&quot;nofollow noreferrer&quot;&gt;Hybrid Kalman Filter&lt;/a&gt; is implemented. Then on each iteration of the ricatti equation solution, update your convariance matrices however you like. Just beware that you are entering the nonlinear domain and you might endup getting weird results and unstable estimates. But maybe after some tuning and testing all your operating conditions you are able to make it work fine.&lt;/p&gt;&#xA;" OwnerUserId="23950" LastActivityDate="2020-01-02T11:25:55.663" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19947" PostTypeId="1" AcceptedAnswerId="19949" CreationDate="2020-01-02T18:52:54.470" Score="0" ViewCount="36" Body="&lt;p&gt;I am studying motion planning, and I am focusing on artificial potential fields. I have seen that it consists in having a repulsive field for obstacles, and an attractive field toward the goal. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But what I don't understand is if this motion planning method creates a path which can be tracked, or it is just a matter of potential fields, and so the robot moves accordingly to them and not on a path.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can somebody help me understand this?&lt;/p&gt;&#xA;" OwnerUserId="21797" LastActivityDate="2020-01-03T05:28:57.000" Title="Doubt on artificial potential field" Tags="&lt;mobile-robot&gt;&lt;motion-planning&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19948" PostTypeId="2" ParentId="19933" CreationDate="2020-01-03T00:40:55.147" Score="2" Body="&lt;p&gt;A definition of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Quaternion#Quaternions_and_the_geometry_of_R3&quot; rel=&quot;nofollow noreferrer&quot;&gt;cross product for quaternions&lt;/a&gt; is &lt;span class=&quot;math-container&quot;&gt;$$p \times q = \frac{1}{2}(pq - qp)$$&lt;/span&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;We also have the identity (3.167) in Jazar &lt;span class=&quot;math-container&quot;&gt;$$pq = -p \cdot q + p \times q$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Apparently the vectors &lt;span class=&quot;math-container&quot;&gt;$ \dot{e}\overset{\ast}{e} $&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;${}^Gr$&lt;/span&gt; are orthogonal, so their dot product is zero and we have: &lt;span class=&quot;math-container&quot;&gt;$$\dot{e} \overset{\ast}{e}{}^Gr = \dot{e} \overset{\ast}{e} \times {}^Gr = \frac{1}{2}(\dot{e}\overset{\ast}{e}{}^Gr - {}^Gr \dot{e}\overset{\ast}{e})$$&lt;/span&gt; which can be rewritten as &lt;span class=&quot;math-container&quot;&gt;$$ 2\dot{e}\overset{\ast}{e}{}^Gr =  \dot{e}\overset{\ast}{e}{}^Gr - {}^Gr\dot{e}\overset{\ast}{e}$$&lt;/span&gt; and thus &lt;span class=&quot;math-container&quot;&gt;$\dot{e}\overset{\ast}{e}{}^Gr = - {}^Gr\dot{e}\overset{\ast}{e}$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(footnote: I found &lt;a href=&quot;https://www.euclideanspace.com/physics/kinematics/angularvelocity/QuaternionDifferentiation2.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this PDF&lt;/a&gt; somewhat helpful.)&lt;/p&gt;&#xA;" OwnerUserId="21266" LastEditorUserId="21266" LastEditDate="2020-01-03T06:50:33.733" LastActivityDate="2020-01-03T06:50:33.733" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19949" PostTypeId="2" ParentId="19947" CreationDate="2020-01-03T05:28:57.000" Score="0" Body="&lt;p&gt;It is a bit of both. The repulsive potentials help create a way to represent an environment that is conducive to planning. In the area of repulsive potentials, a simple gradient descent from a point will take you to the minimum, i.e., some collision free point. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the same time, the attractive potential increases as you move away from the goal, so attempting to minimize that function will eventually lead you towards the goal. For any given goal state, minimizing both these potentials will result in a path that can then be tracked using a controller of your choice. For a more intuitive understanding, you might want to look at a sample implementation:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/AtsushiSakai/PythonRobotics/blob/master/PathPlanning/PotentialFieldPlanning/potential_field_planning.py&quot; rel=&quot;nofollow noreferrer&quot;&gt;Potential fields from the PythonRobotics repository&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.cs.cmu.edu/~motionplanning/lecture/Chap4-Potential-Field_howie.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Howie Choset's slides&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10310" LastActivityDate="2020-01-03T05:28:57.000" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19952" PostTypeId="1" CreationDate="2020-01-03T14:12:29.097" Score="1" ViewCount="27" Body="&lt;p&gt;I am studying mobile robots, and I have encoutered the concept of differentially flat systems. I have seen that if a system is differentially flat, we can identify flat outputs, thanks to which we can reconstruct for example the inputs and the orientation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, for a unycicle, the flat outputs are &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt;, and with them we can reconstruct the inputs  &lt;span class=&quot;math-container&quot;&gt;$v ,w$&lt;/span&gt; , which are respectively the driving velocity and the steering velocity, and we can reconstruct the orientation &lt;span class=&quot;math-container&quot;&gt;$\theta $&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, how do we know if a system is differentially flat? And basing on what do we identify the flat outputs?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have understand what is a differentially flat system, but I don't know how to say if a given system is differentially flat or not, and if yes, I don't know how to identify the flat outputs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can somebody please help me?&lt;/p&gt;&#xA;" OwnerUserId="21797" LastActivityDate="2020-01-03T14:12:29.097" Title="How do I say if a system is differentially flat?" Tags="&lt;mobile-robot&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19954" PostTypeId="1" CreationDate="2020-01-04T00:58:57.890" Score="0" ViewCount="80" Body="&lt;p&gt;I decelerate the velocity of my robot very quickly by applying a common voltage (eg. 24V to both the terminals using Motor driver) to the DC motors. Given, the motor is running at a very high speed and suddenly a common voltage of 24V is applied to the motors. I suppose the kinetic energy should dissipate in the armature resistance. Is it safe for the motors or external braking is advisable?&lt;/p&gt;&#xA;" OwnerUserId="24441" LastEditorUserId="24441" LastEditDate="2020-01-11T10:01:05.930" LastActivityDate="2021-02-04T11:05:35.557" Title="Can I apply a common voltage to a high speed running DC motor to stop it? Will it damage the DC motor?" Tags="&lt;mobile-robot&gt;&lt;motor&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="19957" PostTypeId="1" AcceptedAnswerId="19964" CreationDate="2020-01-05T21:05:35.200" Score="0" ViewCount="84" Body="&lt;p&gt;There are mainly two approaches for controlling robots (mobile robots and static robots): 1) working with kinematic equations, controlling joint or wheel speeds , 2) working with dynamic equations and controlling torques and forces. &#xA;I would like to know in practice (in academia and also industry) which one is used more? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I mean dynamic modeling and control is complex, requires much more accurate modeling and therefore more prone to model imperfections and other errors. Kinematic modeling on the other hand is more straightforward and requires less knowledge. I don't mean some special functionalities of robots (for example, mobile robot has 1D arm on it, and it is going to do force control), but rather a general motion of mobile robots, static robotic arms and some other types of robots. Is it in general sufficient to do kinematics with speed control for this purpose?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If not, could you please mention some important deficiencies possible with pure kinematic modeling?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If my question does not have sufficient information for you to answer, could you, please, give some tips how can I make it more focused?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance&lt;/p&gt;&#xA;" OwnerUserId="23798" LastActivityDate="2020-01-07T16:52:53.513" Title="Modeling of Robots" Tags="&lt;mobile-robot&gt;&lt;control&gt;&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;dynamics&gt;" AnswerCount="1" CommentCount="12" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19958" PostTypeId="1" CreationDate="2020-01-06T05:34:41.620" Score="0" ViewCount="25" Body="&lt;p&gt;For a hobby project, I'm designing a clock with a single hand that makes one revolution per year.  Using really helpful sites like &lt;a href=&quot;https://geargenerator.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://geargenerator.com/&lt;/a&gt;, I have the gear ratios and dimensions worked out, and now I'd like to start prototyping.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What's a reasonable way to get some gears made for that?  I don't want to spend a lot of money (this is just something to hang on my own wall, probably) but I do want the gears to function correctly.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is 3d printing a good option for gears, or will they need to be machined?  For scale, I think the largest gears will be about 2-3 inches in diameter with around 80 teeth.  If machining is necessary, are there different quality options that affect price?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the curious: my gear ratios are 8:83, 8:59, 8:47, and 8:13.  That comes out to 4096:2992067, i.e. 0.5:365.2426 - so a motor designed to go around twice per day (a clock hour hand) should slow down to once per year (including leap years!).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Obviously there's probably some pretty basic stuff I don't know, like whether people usually work with gears in standard tooth numbers or whether weird numbers like the ones I have are accessible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks for any insight.&lt;/p&gt;&#xA;" OwnerUserId="24464" LastActivityDate="2020-01-06T05:34:41.620" Title="How to make small quantities of gears" Tags="&lt;mechanism&gt;&lt;gearing&gt;" AnswerCount="0" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="19959" PostTypeId="1" CreationDate="2020-01-06T09:00:16.067" Score="0" ViewCount="133" Body="&lt;p&gt;Is it normal, that a stepper motor with the following specifications can't reliably turn a plastic wheel with a diameter of 13cm and a simple direct coupling?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Type: &lt;strong&gt;bipolar, two phases&lt;/strong&gt;&lt;br&gt;&#xA;Voltage: &lt;strong&gt;2.55V&lt;/strong&gt;&lt;br&gt;&#xA;Current: &lt;strong&gt;1.7 A/Phase&lt;/strong&gt;&lt;br&gt;&#xA;Resistance: &lt;strong&gt;1.5 ± 10% Ω/Phase&lt;/strong&gt;&lt;br&gt;&#xA;Inductance: &lt;strong&gt;2.8 ± 20% mH/Phase&lt;/strong&gt;&lt;br&gt;&#xA;Holding Torque: &lt;strong&gt;40 N.cm Min&lt;/strong&gt;&lt;br&gt;&#xA;Detent Torque: &lt;strong&gt;2.2 N.cm Max&lt;/strong&gt;&lt;br&gt;&#xA;Rotor Torque: &lt;strong&gt;54 g.cm²&lt;/strong&gt;  &lt;/p&gt;&#xA;" OwnerUserId="24466" LastEditorUserId="7608" LastEditDate="2020-01-06T10:51:23.687" LastActivityDate="2021-02-08T01:03:10.233" Title="Stepper can't turn plastic wheel. Is it normal?" Tags="&lt;motor&gt;&lt;stepper-motor&gt;" AnswerCount="2" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19960" PostTypeId="1" AcceptedAnswerId="19982" CreationDate="2020-01-06T14:22:16.453" Score="0" ViewCount="50" Body="&lt;p&gt;I started researching Robotic Vision topics for a while but I found myself a bit stuck.&#xA;My background is in the Computer Vision and Machine Learning fields but I lack the knowledge in robotics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My goal for now is to make an eye-in-hand system perform pick-and-place movements. Something like this:&#xA;&lt;a href=&quot;https://www.youtube.com/watch?v=GOY5VED54zQ&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=GOY5VED54zQ&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm pretty sure the key to achieve this is the calibration phase but out of all the resources I found I could not understand how this is done. I get that I need to find transformations between camera frame to robot frame but I have no idea how to get them. Any paper that I read about this gets me lost in the math part which I find very hard to understand for now.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I know:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;how to deal with problems in the camera plane(i.e detect objects)&lt;/li&gt;&#xA;&lt;li&gt;how to control the robot which is an UR-3 cobot&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;What I don't know:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;how the camera world points relate to the robot world points&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Is there a general approach to this problem? Is there any library that can help me with this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any study materials/tutorials or explanations are highly appreciated. Thank you in advance.&lt;/p&gt;&#xA;" OwnerUserId="24434" LastActivityDate="2020-01-08T22:30:21.363" Title="Robotic vision eye-in-hand research" Tags="&lt;robotic-arm&gt;&lt;calibration&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19961" PostTypeId="1" AcceptedAnswerId="21765" CreationDate="2020-01-06T22:06:16.493" Score="2" ViewCount="374" Body="&lt;p&gt;When IMU is gravity aligned, yaw is not observable from linear acceleration data. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, when IMU has non null pitch, the sensor is not gravity aligned anymore and the gravity acceleration gets remapped on other axes. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Question: how do you compute the yaw angle from linear acceleration data when the pitch is not null (and therefore yaw is observable)? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you in advance &lt;/p&gt;&#xA;" OwnerUserId="24180" LastActivityDate="2021-02-07T10:53:34.377" Title="Yaw from IMU acceleration" Tags="&lt;imu&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19962" PostTypeId="2" ParentId="19961" CreationDate="2020-01-07T00:57:27.670" Score="0" Body="&lt;p&gt;Yaw is not observable from gravity regardless of pitch.&lt;/p&gt;&#xA;" OwnerUserId="8842" LastActivityDate="2020-01-07T00:57:27.670" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="19963" PostTypeId="2" ParentId="19898" CreationDate="2020-01-07T09:56:08.587" Score="1" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Minkowski_addition&quot; rel=&quot;nofollow noreferrer&quot;&gt;Minkowski sum&lt;/a&gt; is used to generate the configuration space in many applications. On Slide 45 of &lt;a href=&quot;http://cs.cmu.edu/~motionplanning/lecture/Chap3-Config-Space_howie.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this presentation&lt;/a&gt; you can find an example for using the Minkowski sum to generate the configuration space for the piano mover problem. &lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-01-07T09:56:08.587" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19964" PostTypeId="2" ParentId="19957" CreationDate="2020-01-07T10:26:33.427" Score="1" Body="&lt;p&gt;The two approaches you mention are not as separated as they seem. Both kinematic models and dynamic models are not 100% accurate. This is the reason closed loop control is needed (well probably only one of the reasons if you ask controls experts). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should not think of kinematic and dynamic models of being completely separated. They are all models describing the same system. Kinematic models include only motions, not forces, dynamic models include both, forces and motion. They all have their role in a control system. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You are right, dynamics modelling is more challenging because it is harder to come up with exact dynamic models. But this does not mean that the dynamic models are unusable. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most industrial motor control applications for motion planning use a cascaded control approach with an outer loop for position control (which is usually disabled for mobile robots) a &quot;middle loop&quot; for velocity control and an inner loop for torque control. All of these loops have a PID controller variant (mostly P and PI, PD or PID also possible) and have a feed forward input. This feed forward input is the easiest way to integrate inexact dynamic models. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider the case where there is not feed forward signal on the torque controller. This means that the control loop has to minimize the difference between the reference torque (generated by the outer velocity loop) and the currently applied torque. This assumes that the reference torque, generated by the velocity control loop (since it is a cascaded control system) is exactly the right amount of torque needed. Obviously it is not, but the we &quot;hope&quot; that the velocity feedback will take care of this. And it can, but with limited performance. It takes some time for the controllers to settle on just the right amount of torque. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To increase the performance of the control loop we can add a feed forward signal to &quot;help&quot; the controller. We &quot;inject&quot; an additional torque which we think is the right amount. Obviously this will also not be the right amount, but if it would be, the control loops would have &quot;nothing to do&quot; they would behave as pass through. Since we would have an exact model of the system we would not need a controller we could always calculate the right amount of torque. This works well in simulation when the controller plant is exactly known, but (almost) never works in real life. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If we use an inexact dynamic model to inject a feed forward torque, even if it is not exactly the right amount it helps the controller. A simplistic explanation is that the controller does not have to come up with the exact amount of torque needed, but it only needs to correct the feed forward torque.The more precise the dynamic model giving the feed forward signal to the controller is the more it &quot;helps&quot; the controller, the faster the controller settles on the right value. The closer we are to a perfect model the less we need the controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A more complex way to use dynamic models, even if they are not precise is model based control. This is well established in academia, but less widely used in the industrial practice. &lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-01-07T10:26:33.427" CommentCount="14" ContentLicense="CC BY-SA 4.0" />
  <row Id="19965" PostTypeId="1" CreationDate="2020-01-07T13:19:04.710" Score="0" ViewCount="27" Body="&lt;p&gt;I am using an MPU6050 IMU. I did a small experiment having Z-axis pointing upwards.&#xA;1. Rotate 90deg around Z-axis (yaw) and back to the original position&#xA;2. Rotate 90deg around X-axis (roll) and back to the original position&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The issue is that accel data is perfect and I could see data as expected. But, the gyro data shows rotation only around Y-axis. I am a bit confused. Is this expected and need some post-processing to get the Euler angles. OR is there an issue, Please explain.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/4nkU7.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4nkU7.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Accel Data&#xA;&lt;a href=&quot;https://i.stack.imgur.com/XnEaM.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XnEaM.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="23823" LastEditorUserId="23823" LastEditDate="2020-01-07T13:38:49.843" LastActivityDate="2020-01-07T13:38:49.843" Title="MPU6050 Gyro rotaion always around Y axis" Tags="&lt;imu&gt;&lt;gyroscope&gt;&lt;accelerometer&gt;&lt;rotation&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19969" PostTypeId="2" ParentId="19954" CreationDate="2020-01-07T21:25:26.597" Score="0" Body="&lt;p&gt;You can do various Bad Things to a motor by doing this -- but whether it's bad for &lt;em&gt;your&lt;/em&gt; motor in &lt;em&gt;your&lt;/em&gt; machine depends on what you're doing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you short a motor like that, it'll generate a lot of current, and in addition to heating up the armature, that current can damage the commutator or brushes.  On older motors it could demagnetize the magnets, but that's probably not an issue if your motor has rare-earth magnets.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can compute the current from the motor's speed, it's speed vs. voltage constant and its armature resistance.  Compare that to the motor datasheet's maximum current.  A &lt;em&gt;good&lt;/em&gt; motor datasheet will have not only a maximum current, but some sort of instantaneous current that gives you an idea of how much of an overload you can give it for how long.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may also want to consider how much torque the motor will be absorbing during this, and ask whether you'll be exceeding your mechanism's strengths.  You'll know the current, so use the motor's torque vs. current constant to calculate the torque, and compare that to the capability of whatever you have the motor attached to.&lt;/p&gt;&#xA;" OwnerUserId="1411" LastEditorUserId="1411" LastEditDate="2020-01-07T21:52:31.990" LastActivityDate="2020-01-07T21:52:31.990" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19970" PostTypeId="1" AcceptedAnswerId="19972" CreationDate="2020-01-08T01:49:04.740" Score="0" ViewCount="51" Body="&lt;p&gt;Assuming no GPS is available, what can be used to measure the horizontal speed of a hypothetical drone? Sensor mass and size don't need to be taken into account. Could small Doppler radars , maybe placed in an off-nadir angle measure it? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you in advance for your help!&lt;/p&gt;&#xA;" OwnerUserId="16294" LastEditorUserId="16294" LastEditDate="2020-01-21T18:24:51.657" LastActivityDate="2020-01-21T18:24:51.657" Title="Drone Horizontal Speed Measurement" Tags="&lt;quadcopter&gt;&lt;sensors&gt;&lt;sensor-fusion&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19971" PostTypeId="1" CreationDate="2020-01-08T02:37:17.940" Score="1" ViewCount="407" Body="&lt;p&gt;I need help understanding the difference from Y/P/R rate and the data that I can get from a gyroscope. I am using the raw readings of my IMU (MPU9250) and the Madwick Filter to calculate a quaternion that represents the orientation of my device, then I can get the Y/P/R angles from it, also I need to get the Y/P/R RATES and this is where my mind gets confused. If my understanding is correct, these are the rate of change of the corresponding angles. A gyroscope can measure rotation around three axes: x, y, and z, right? And they are not the same as the Y/P/R angles. How should I be getting the data I need with using only an IMU?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm am really sorry for my badly written explanation, English is not my first language and  I'm a software engineer not specialized in this field so it gets even harder to communicate my doubts. Thanks!&lt;/p&gt;&#xA;" OwnerUserId="24480" LastActivityDate="2020-01-08T02:37:17.940" Title="Yaw, Pitch, Roll rate concepts and how to calculate them with an IMU" Tags="&lt;imu&gt;&lt;gyroscope&gt;&lt;orientation&gt;" AnswerCount="0" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="19972" PostTypeId="2" ParentId="19970" CreationDate="2020-01-08T02:59:37.667" Score="0" Body="&lt;p&gt;You could use an IMU to measure the speed and position. You just have to:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Calculate the quaternion that represents your drone orientation, using a filter like the Madwick or Mahony filters.&lt;/li&gt;&#xA;&lt;li&gt;Strip the gravity from your accelerometer raw data readings, the quaternion you calculated is what you will be using for this. It's not the only way, you could also use a low pass filter. I asked this question some time ago &lt;a href=&quot;https://electronics.stackexchange.com/questions/466069/how-to-subtract-gravity-from-raw-acceleration-of-an-mpu9250-9dof-imu?noredirect=1#comment1176681_466069&quot;&gt;here&lt;/a&gt; . You can also read &lt;a href=&quot;http://www.varesano.net/blog/fabio/simple-gravity-compensation-9-dom-imus&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; explanation about how to compensate gravity from your accelerometer readings.&lt;/li&gt;&#xA;&lt;li&gt;Calculate the acceleration vector with the following formula: sqrt((ax * ax) + (ay *  ay) + (az * az))&lt;/li&gt;&#xA;&lt;li&gt;Finally, you integrate this acceleration value to get velocity, and then you integrate it a second time to get the position but.......&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;You are not supposed to be doing this. Your data will be extremely inaccurate. When you integrate you are getting an approximate value, and you will be integrating this not-so-precise data over time. If you want to read a really good explanation about this I suggest you &lt;a href=&quot;http://www.chrobotics.com/library/accel-position-velocity&quot; rel=&quot;nofollow noreferrer&quot;&gt;this article&lt;/a&gt;. You can also read &lt;a href=&quot;https://electronics.stackexchange.com/questions/156192/accelerometer-double-integration-error&quot;&gt;this question&lt;/a&gt;, someone asked about speed measurement with an IMU.&lt;/p&gt;&#xA;" OwnerUserId="24480" LastActivityDate="2020-01-08T02:59:37.667" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19973" PostTypeId="1" AcceptedAnswerId="19976" CreationDate="2020-01-08T05:08:25.463" Score="1" ViewCount="62" Body="&lt;p&gt;I want to develop a dynamic model of a parallel robot for control tasks. It is known that equations of motion based on Lagrange equations can be transformed into a state space and use such a model. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/NLl6Y.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/NLl6Y.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was wondering if it is possible to somehow include the stiffness matrix of the manipulator in this model and get a model like the one shown in the second figure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/3Bzvu.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3Bzvu.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="24481" LastActivityDate="2020-01-08T14:37:21.117" Title="Dynamic models of parallel robots in the form of multi-mass systems with stiffness coefficients" Tags="&lt;control&gt;&lt;mechanism&gt;&lt;robot-model&gt;" AnswerCount="2" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="19974" PostTypeId="2" ParentId="19973" CreationDate="2020-01-08T08:11:56.563" Score="1" Body="&lt;p&gt;Yes it is possible. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can look at the following paper&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Stiffness Analysis and Comparison of 3-PPR Planar Parallel Manipulators With Actuation Compliance &#xA;Guanglei Wu , Shaoping Bai , Jørgen A. Kepler&lt;/p&gt;&#xA;" OwnerUserId="21229" LastActivityDate="2020-01-08T08:11:56.563" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="19976" PostTypeId="2" ParentId="19973" CreationDate="2020-01-08T14:37:21.117" Score="1" Body="&lt;p&gt;The equations of motion is simply &#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\begin{align}&#xA;J_m \ddot{\theta}_1 + K_{md}(\theta_1-\theta_2) &amp;amp;= \tau_e \tag{1} \\&#xA;J_d \ddot{\theta}_2 + K_{md}(\theta_2-\theta_1) &amp;amp;= \tau_L + \tau_s \tag{2}&#xA;\end{align}&#xA;$$&lt;/span&gt;&#xA;Rewriting (1)&amp;amp;(2), we get &#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\begin{bmatrix}&#xA;J_m &amp;amp; 0 \\ 0 &amp;amp; J_d&#xA;\end{bmatrix}&#xA;\begin{bmatrix}&#xA;\ddot{\theta}_1 \\ \ddot{\theta}_2&#xA;\end{bmatrix}&#xA;+&#xA;\begin{bmatrix}&#xA;K_{md} &amp;amp; -K_{md} \\ -K_{md} &amp;amp; K_{md}&#xA;\end{bmatrix}&#xA;\begin{bmatrix}&#xA;\theta_1 \\ \theta_2&#xA;\end{bmatrix}&#xA;=&#xA;\begin{bmatrix}&#xA;\tau_e \\ \tau_L + \tau_s&#xA;\end{bmatrix}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;" OwnerUserId="2155" LastActivityDate="2020-01-08T14:37:21.117" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="19977" PostTypeId="5" CreationDate="2020-01-08T14:47:13.523" Score="0" Body="&lt;p&gt;Soft robotics draws heavily from the way in which living organisms move and adapt to their surroundings. In contrast to robots built from rigid materials, soft robots allow for increased flexibility and adaptability for accomplishing tasks, as well as improved safety when working around humans. These characteristics allow for its potential use in the fields of medicine and manufacturing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ref: &lt;a href=&quot;https://en.wikipedia.org/wiki/Soft_robotics&quot; rel=&quot;nofollow noreferrer&quot;&gt;Soft robotics&lt;/a&gt; wikipedia page&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="37" LastEditDate="2020-01-08T14:47:13.523" LastActivityDate="2020-01-08T14:47:13.523" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19978" PostTypeId="4" CreationDate="2020-01-08T14:47:13.523" Score="0" Body="Soft Robotics is the specific subfield of robotics dealing with constructing robots from highly compliant materials, similar to those found in living organisms." OwnerUserId="37" LastEditorUserId="37" LastEditDate="2020-01-08T14:47:13.523" LastActivityDate="2020-01-08T14:47:13.523" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19979" PostTypeId="5" CreationDate="2020-01-08T14:50:29.373" Score="0" Body="&lt;p&gt;Soft robotics draws heavily from the way in which living organisms move and adapt to their surroundings. In contrast to robots built from rigid materials, soft robots allow for increased flexibility and adaptability for accomplishing tasks, as well as improved safety when working around humans. These characteristics allow for its potential use in the fields of medicine and manufacturing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ref: &lt;a href=&quot;https://en.wikipedia.org/wiki/Soft_robotics&quot; rel=&quot;nofollow noreferrer&quot;&gt;Soft robotics&lt;/a&gt; wikipedia page&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="37" LastEditDate="2020-01-08T14:50:29.373" LastActivityDate="2020-01-08T14:50:29.373" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19980" PostTypeId="4" CreationDate="2020-01-08T14:50:29.373" Score="0" Body="Soft Robotics is the specific subfield of robotics dealing with constructing robots from highly compliant materials, similar to those found in living organisms." OwnerUserId="37" LastEditorUserId="37" LastEditDate="2020-01-08T14:50:29.373" LastActivityDate="2020-01-08T14:50:29.373" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19982" PostTypeId="2" ParentId="19960" CreationDate="2020-01-08T22:30:21.363" Score="0" Body="&lt;p&gt;What you are confused about are frame transformations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have ever poked around with ROS, you will see that robot joint locations are determined through frame transformations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These transformations are calculated because the current joint angles are known.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Those angles are then passed into what are called homogeneous transformation matrices. The matrices are essentially 4x4 matrices that multiply nicely together to keep track of the end-link orientation (upper left 3x3 part) and the tranlation aka. XYZ of the robot tip (upper right 3x1 vector in homog. matrix).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These matrices, before being given current joint angles, are often created from the Denavit-Hartenberg (D-H) parameters.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since you are confused with all the math, and robotics is really just applied math, I suggest you start learning how D-H params work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, once you understand how to get the tool-tip orientation and position from the joints, you can then link the camera frame with the base-frame of the robot you are working with. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Essentially, the camera relates to the rest of the world through a root frame, often called a world frame. All data points are synced to that frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, when you add XYZ points in the camera frame, you can automatically know where they are in Tool-tip frame, aka. End of Arm Tooling (EoAT) frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, if you mount a camera on the EoAT, you finally have the vision-in-eye setup you envision in your question title.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does this make sense?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You asked about libraries? There are many matrix libraries out there, and saying which is better or worse is outside the scope of Robotics Beta and this question. There are Python libraries and C++ libraries: you will have to choose one. I know that there are many matrix libraries to be used with OpenGL, so I recommend looking at what computer graphics people like to use. An example might be GLM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I should say though, that ROS uses quaternions, but those are faster to compute. They achieve the same thing as 4x4 homog. trans. matrices, with less CPU time.&lt;/p&gt;&#xA;" OwnerUserId="23597" LastActivityDate="2020-01-08T22:30:21.363" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19983" PostTypeId="2" ParentId="10970" CreationDate="2020-01-08T22:39:04.333" Score="0" Body="&lt;p&gt;I want to add to @holmeski and his answer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ESC, in order to know what voltage the Arduino is sending, needs to know what the reference HIGH voltage is. Usually, in a 3-wire setup as pictured, there is GROUND, HIGH, and SIGNAL. You need to connect an Arduino 5-volt out line to the red line, as well as connect ground and signal the way you did.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, as already mentioned, you still need to power the arduino through either &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;USB&lt;/li&gt;&#xA;&lt;li&gt;DC Jack&lt;/li&gt;&#xA;&lt;li&gt;The Vin pin - this is the most dangerous solution, I do not recommend it for nubes (not to be cocky, but you did say you are new to this).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Essentially, the Arduino is not configured to be powered in your current circuit diagram.&lt;/p&gt;&#xA;" OwnerUserId="23597" LastActivityDate="2020-01-08T22:39:04.333" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19987" PostTypeId="2" ParentId="16076" CreationDate="2020-01-09T19:41:01.700" Score="2" Body="&lt;p&gt;This depends on the machine specifically and the software that is being used to drive it, as well as the work placement and holding for the particular cut. Remember, there are typically two different zeros, a machine zero and a work area zero. Typically the tool moves to machine zero before travelling to the work area zero and beginning the paths. This means that entire travel distance needs to be consistently clear of obstruction to prevent collisions. If you have room to clear your entire cut area, you can use the switch locations as machine zero, typically the minimum travel on X and Y axes, and full retraction on the Z axis. You may want to reset your machine zero to a point inside mounting clamps for instance if there isn't enough clearance. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For me I typically set my toolpathing to use the bottom left corner of the part as the stock origin, so I set my work area zero to a spot on my material where there is sufficient room for the cut I'm making. I use the bottom left as it's pretty easy to reference for me, but any position would work as along as you can verify that there is sufficient area for your cut, and the stock is properly placed to match your toolpaths. Since my machine doesn't have homing switches I also have to be sure to manually set the machine zero to something out of the way of any hold downs and with enough clearance from the work before I set the work area zero.  &lt;/p&gt;&#xA;" OwnerUserId="24493" LastActivityDate="2020-01-09T19:41:01.700" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19988" PostTypeId="2" ParentId="19905" CreationDate="2020-01-09T21:58:09.917" Score="0" Body="&lt;p&gt;So it appears that although the documentation for movej() states that it is the time the robot will take to make the move, it's really closer to the time each joint will take to move. If I take my desired time to move and divide by 6 (number of joints), then the speed of movement is increased to be much closer to my goal. It isn't perfect, but it's much improved. I'd still like to hear what others have to say, but this is my best solution for now. &lt;/p&gt;&#xA;" OwnerUserId="24389" LastActivityDate="2020-01-09T21:58:09.917" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19989" PostTypeId="2" ParentId="10052" CreationDate="2020-01-11T00:00:02.857" Score="3" Body="&lt;p&gt;I think Mark Booth's answer was best.  Talked about the applicational differences between the modes, without getting into theory or detracting from the original question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I can expand a little further to bring more clarification:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each mode uses the commanded method as its PRIMARY form of control, and it has control of the other parameters only by way of limitation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As Mark mentioned above, you can use a POSITION MOVE with LIMITS on the torque and velocity.... the controller will do its best to get to that position within the limits provided, but makes no effort to meet anything specified by the velocity or torque limits.  Therefore, you could get to your commanded position with a speed of 10in/sec even though your limit was set at 40in/sec.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically, whatever you mode you command in, the move will attempt to meet that criteria first and will ignore the other two (aside from limits).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If VELOCITY is the most important thing you need to control, such as a conveyor... then use Velocity Mode.  If Torque is important, such as not tearing a web or overtensioning something, then use Torque Mode.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think where it's confusing is between VELOCITY mode and POSITION mode.  Arguably, you could control a conveyor using POSITION MOVES and simply setting limits on how much velocity the movement command can use.  Eventually, after getting up to speed, your conveyor will be moving at the velocity specified in your POSITION MOVE.  However, if you need to adjust your speed a bit, a POSITION MOVE makes this difficult.  You now have to find a new position to move to and either increase or decrease the limit on your &quot;speed max&quot;.  This is much easier if you are just using VELOCITY control, as the position of a conveyor is essentially cyclic and infinite.  You can simply adjust up or adjust down the velocity of your velocity command, and you DON'T REALLY CARE where the position of the conveyor is.  Namely, velocity is important but position isn't.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the &quot;egg robot&quot; example above, your torque control cares about keeping the torque at a specific value, but it doesn't care where the position of the gripper is, or what the velocity is.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It was confusing for me as well, but when you're spec'ing an application, just think about WHAT IS MOST IMPORTANT to you, and use that as your control method.  They all will essentially do the same thing, but it's kind of an &quot;order of precedence&quot; for what it cares about most.&lt;/p&gt;&#xA;" OwnerUserId="24500" LastActivityDate="2020-01-11T00:00:02.857" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19990" PostTypeId="1" CreationDate="2020-01-11T05:28:51.633" Score="0" ViewCount="40" Body="&lt;p&gt;Now the design we have has the 4 DOF (Base, Shoulder, Elbow, Wrist), there is no problem in moving the arm in a curved manner but the main problem arises in straight-line motion. I'm unable to fid=nd the solution for that. the main concern is which at least 2 motors I should move.&#xA;Hoping For Solutions Here.&#xA;Regards.  &lt;/p&gt;&#xA;" OwnerUserId="24501" LastActivityDate="2020-01-13T21:02:22.953" Title="How To Do path planning To move the Robotic Arm in straight line in 3D where the arm is having base, Shoulder, Elbow &amp; wrist?" Tags="&lt;inverse-kinematics&gt;&lt;industrial-robot&gt;&lt;path-planning&gt;&lt;automation&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2020-01-14T16:35:23.197" ContentLicense="CC BY-SA 4.0" />
  <row Id="19991" PostTypeId="1" CreationDate="2020-01-12T01:50:00.907" Score="1" ViewCount="228" Body="&lt;p&gt;How to calculate the maximum charge of the battery that it can give from a fully charged state to a fully discharged one. I have been trying to solve this problem for 2 months. The drone itself is not. &#xA;Maybe someone knows How to calculate the maximum charge of the battery?&#xA;And sorry about my English. I don't know him well.&#xA;Or some formulas for finding the electrical capacity of C?&lt;/p&gt;&#xA;" OwnerUserId="24506" LastEditorUserId="24506" LastEditDate="2020-01-12T01:52:20.630" LastActivityDate="2020-06-19T14:06:20.677" Title="How to calculate the maximum charge of the battery?" Tags="&lt;quadcopter&gt;&lt;battery&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="19992" PostTypeId="1" AcceptedAnswerId="19997" CreationDate="2020-01-12T04:50:23.990" Score="0" ViewCount="57" Body="&lt;p&gt;There is an ordinary linear three-mass system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/qPodJ.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qPodJ.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If we write its Lagrangian, we get the following equation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/giObv.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/giObv.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;where &lt;span class=&quot;math-container&quot;&gt;$W_k$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$W_n$&lt;/span&gt; - kinetic and potential energy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To find the moment of rotation of the first mass, we must differentiate lagrangian first by the angle of rotation of the first mass &lt;span class=&quot;math-container&quot;&gt;$\phi_1$&lt;/span&gt;, then find the rate of change in time of the Lagrangian derivative with respect to speed &lt;span class=&quot;math-container&quot;&gt;$\omega_1$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/NLl6Y.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;Lagrange equation&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Suppose we want to find the moment of the first mass &lt;span class=&quot;math-container&quot;&gt;$J_1$&lt;/span&gt; (we assume that on the shaft of the drive motor).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\frac{\partial L}{\partial q} = \frac{\partial L}{\partial \phi_1} = -c_{12} (\phi_1 - \phi_2)$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\frac{d}{dt}\frac{\partial L}{\partial \dot{q}} = \frac{d}{dt}\frac{\partial L}{\partial \omega_1} = J_1 \frac{\partial \omega_1}{\partial t}$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which ultimately gives us a dynamic equation:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$M - c_{12} (\phi_1 - \phi_2) = J_1 \frac{\partial \omega_1}{\partial t}$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My questions are as follows:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Where did the masses of &lt;span class=&quot;math-container&quot;&gt;$J_2$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$J_3$&lt;/span&gt; go? Because we are looking for a derivative and speeds of this masses &lt;span class=&quot;math-container&quot;&gt;$\omega_2$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\omega_3$&lt;/span&gt; do not explicitly depend on &lt;span class=&quot;math-container&quot;&gt;$\omega_1$&lt;/span&gt;, no matter how massive they are, they do not include into the equation of motion and do not affect the torque M.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Do I understand correctly that taking into account the influence of the moments of inertia of the remaining masses &lt;span class=&quot;math-container&quot;&gt;$J_2$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$J_3$&lt;/span&gt; is possible only by bringing the moments of inertia to the motor shaft &lt;span class=&quot;math-container&quot;&gt;$J_1$&lt;/span&gt; (by correcting the coefficients of the square of the gear ration).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Is it possible to do without this operation and include the gear ratio in the model?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="24481" LastEditorUserId="24481" LastEditDate="2020-01-13T16:14:18.533" LastActivityDate="2020-01-13T16:14:18.533" Title="Why are the angular velocities of concentrated masses in Lagrangian independent?" Tags="&lt;control&gt;&lt;mechanism&gt;&lt;robot-model&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19994" PostTypeId="1" CreationDate="2020-01-12T10:08:45.230" Score="0" ViewCount="49" Body="&lt;p&gt;I'm designing a Quadcopter for my project. I've seen a lot of guides that the motor rotational direction should be opposite to each other. My doubt is whether the motor have a variety of CW rotation and CCW rotation, or we should change any other thing in the motor?   &lt;/p&gt;&#xA;" OwnerUserId="21688" LastActivityDate="2020-10-21T16:03:00.297" Title="BLDC Outrunner Direction Change?" Tags="&lt;quadcopter&gt;&lt;motor&gt;&lt;flight-controller&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="19996" PostTypeId="1" CreationDate="2020-01-12T16:22:28.330" Score="1" ViewCount="41" Body="&lt;p&gt;I used OpenCV's findChessboardCorners on a few checkerboard images (40~) and about 27 seemed to find the corners accurately. How does one proceed from here? Do I calculate the reprojection error over just the correctly identified images? Is this normal to expect?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Some of the correctly identified images -&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/hKmXb.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hKmXb.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Some of the incorrectly identified images -&lt;/strong&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/OCcM7.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OCcM7.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How I'm calibrating my images -&lt;/p&gt;&#xA;&#xA;&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;def calibrate():&#xA;&#xA;    criteria = (cv.TERM_CRITERIA_EPS + cv.TERM_CRITERIA_MAX_ITER, 30, 0.001)&#xA;&#xA;    objp = np.zeros((6*9,3),np.float32)&#xA;    objp[:,:2] = np.mgrid[0:9, 0:6].T.reshape(-1,2)&#xA;&#xA;    objpoints = []&#xA;    imgpoints = []&#xA;&#xA;    images = glob.glob('*.png')&#xA;&#xA;    for fname in images:&#xA;        img = cv.imread(fname)&#xA;        gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)&#xA;&#xA;        ret, corners = cv.findChessboardCorners(gray, (9,6), None)&#xA;&#xA;        if ret == True:&#xA;            print('Hello')&#xA;&#xA;            objpoints.append(objp)&#xA;&#xA;            corners2 = cv.cornerSubPix(gray, corners, (11,11), (-1,-1), criteria)&#xA;            cv.drawChessboardCorners(img, (9,6), corners, ret)&#xA;            imgpoints.append(corners2)&#xA;&#xA;            cv.imshow('img',img)&#xA;            cv.waitKey(500)&#xA;    cv.destroyAllWindows()&#xA;&#xA;    ret, mtx, dist, rvecs, tvecs = cv.calibrateCamera(objpoints, imgpoints, gray.shape[::-1],None,None)&#xA;&#xA;    return objpoints, imgpoints, ret, mtx, dist, rvecs, tvecs&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="24163" LastActivityDate="2020-01-12T16:22:28.330" Title="Interpreting results from Camera Calibration?" Tags="&lt;computer-vision&gt;&lt;cameras&gt;&lt;opencv&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="19997" PostTypeId="2" ParentId="19992" CreationDate="2020-01-12T20:22:11.240" Score="0" Body="&lt;p&gt;Welcome to &lt;em&gt;Robotics&lt;/em&gt;, Andrew Sol. I think I'm a little confused with your question as it appears to be about independent rotational masses connected by rotational springs, but then later you're asking about gear ratios.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a succinct as I can think to put it, and again I may have misunderstood the question so please feel free to comment on this answer or edit your question to clarify:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The equations of motion govern the &lt;em&gt;dynamics&lt;/em&gt; of the system. If you have several bodies that are rigidly coupled, as in a gearbox, then you would (I would, at least) modify the moments of inertia to account for the gearbox ratio and then treat the entire gear train as one system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider this: If &lt;span class=&quot;math-container&quot;&gt;$\omega_2$&lt;/span&gt; could be calculated by &lt;span class=&quot;math-container&quot;&gt;$\omega_1$&lt;/span&gt; and a gear ratio, then what dynamics do you need to solve? &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-01-12T20:22:11.240" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="19998" PostTypeId="1" CreationDate="2020-01-13T08:02:13.463" Score="1" ViewCount="61" Body="&lt;p&gt;I want to measure the end-effector position of the robot that I attached. I'm using both gy-25 and gy-521 for calculation of the angle. As shown in the picture, joint 1 has 2 DOF, one for spatial movements, and the second one for planar rotation. The angles of the planar movement of joint 1, measures by an encoder. Each of joint 2 and 3 has 1 planar DOF, and the angles are measured by gy-521 and gy-25. I want to measure the angular rotation around the first joint's spatial axis and planar rotation of joint 2 with gy-25. The planar rotation of joint 3 measures by gy-521.&#xA;If I rotate the first joint around its spatial axis or rotate the joint 2 in the plane, the values of the roll, pitch, and yaw of both gyroscopes change which means that the rotation is a combination rotation around multiple axes because the gyroscope reference frame is global, but the rotation isn't around one of that reference frame's axes. So I want to transform the angles which are in the global frame to be measured in the local frame of the sensor, but I don't know. Can anybody help me with that?&lt;br/&gt;&#xA;Thanks in advance&lt;br/&gt;&lt;img src=&quot;https://i.stack.imgur.com/Sb8n3.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt;&lt;br/&gt;&#xA;I attached the new figure below. Z1, Z2, Z3, Z4 are the rotation axes. Joint 1 is for spatial rotation, and on the links 2 and 3, I attached two gyroscopes (gy-25 and gy-521) to measure the theta1 in joint 1, theta 3 in joint 3 and theta 4 in joint 4.  Theta 2 is being measured with an encoder.&lt;br/&gt;&lt;br&gt;&#xA;Forward kinematic:&lt;br/&gt;&#xA;&lt;br/&gt;&#xA;X = b&lt;em&gt;cos(theta1) + cos(theta1)&lt;/em&gt;(L1*cos(theta2) +L2*cos(theta3)+L3*cos(theta4))&lt;br/&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my real system, you should rotate the figure 90 degree CCW and with this configuration, if you fix joint 2, joint 3, and joint 4 and just rotate around joint 1 (theta1), then all the values of both gyroscopes change. So I need to transform the gyroscope values from their frame into the global frame so that I can measure theta 3, 4, and 1. I know I should use the transformation matrix, but I know how to calculate that based on the gyroscopes values.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Rg8ZR.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Rg8ZR.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="24511" LastEditorUserId="24511" LastEditDate="2020-01-14T13:26:57.140" LastActivityDate="2020-01-14T13:26:57.140" Title="Using gyroscope to calculate forward kinematics" Tags="&lt;arduino&gt;&lt;gyroscope&gt;&lt;forward-kinematics&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20000" PostTypeId="2" ParentId="19990" CreationDate="2020-01-13T21:02:22.953" Score="1" Body="&lt;p&gt;You need inverse kinematics. Which refers to calculating the joint angles so that the robot will reach a particular pose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can not simply move from point A to point B..&#xA;You will need to use inverse kinematics to calculate all the positions the arm will pass thru to form a straight line. &lt;/p&gt;&#xA;" OwnerUserId="1819" LastActivityDate="2020-01-13T21:02:22.953" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20001" PostTypeId="2" ParentId="19959" CreationDate="2020-01-13T21:11:46.867" Score="0" Body="&lt;p&gt;If you try to step to fast it will fail to move. If you wish to move a large mass quickly you must accelerate the step rate gradually. Any time you accelerate to fast you should expect the stepper motor to just stop and buzz.&lt;/p&gt;&#xA;" OwnerUserId="1819" LastActivityDate="2020-01-13T21:11:46.867" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20002" PostTypeId="2" ParentId="19994" CreationDate="2020-01-13T22:14:53.440" Score="1" Body="&lt;p&gt;Brushless (BLDC) motors are not inherently directional. They can be either clockwise or counter-clockwise, it only needs to be set in the software, or by swapping two of the motor wires on the physical phase output pads of the ESC. The only time a brushless motor will care about rotation is if they have different direction threads on the shaft where the propeller attaches. In that case you want the motors rotating in the direction so that the prop nut tightens against the force on the prop. This is purely functional, not electrical though, if you use nylock nuts, it won't matter if they are all a single thread direction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Brushed motors however often do have a handedness. Some brushed motors will have slight skew in the magnets that effectively advance the timing when they're running &quot;forward&quot; rather than &quot;reverse&quot; compared to their intended direction. This will result in a faster run speed in the forward direction than the reverse. Also once a brushed motor as been broken in in a particular direction it is often hard on the motor to then run the motor in the other direction. This can result in additional wear on the brushes and a motor that wears out quicker than intended. None of this should be an issue with brushless motors.&lt;/p&gt;&#xA;" OwnerUserId="24493" LastEditorUserId="24493" LastEditDate="2020-01-25T15:52:21.563" LastActivityDate="2020-01-25T15:52:21.563" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20003" PostTypeId="2" ParentId="19991" CreationDate="2020-01-13T22:31:42.970" Score="0" Body="&lt;p&gt;The mAh rating should be written on the battery. For Lipo batteries typically used in drones, the stated mAh is usually a fairly decent estimate of the actual, though that varies some depending on the brand and quality of the battery supplier and the current load and age of the battery. Even if there is no label on the battery, the mAh rating is typically printed on the side of the cells. If there is no label printed with mAh capacity, or you don't trust the stated mAh, you can discharge the battery till the resting voltage is about 3.7 volts per cell under no draw, and then charge it back. Your charger should tell you how many mAh were put back into the pack, and you can typically multiply this by about 1.2 to get an estimate of the total mAh available in the pack. It's not 100% accurate, but it's a safe ball-park. Regardless, the number you get will be a good value to use when estimating functional capacity for flight time estimates.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You typically won't want to draw your battery much below about 3.3-3.5v per cell under load, and it should recover to around 3.7v resting with no load. You don't want to use much more than about 80-85% of the overall mAh capcity of the battery. A resting voltage of 3.7v should get you right there, but if you have way of measuring mAh consumption via a current sensor, it will be much more reliable than relying on voltage alone, as voltage can fluctuate dramatically depending on the current draw load on the battery and the quality of the cells.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another thing to be aware of is as your battery ages, the useful capacity of the cells, as well as the safe current draw, can reduce fairly dramatically. You'll need to continually monitor the health of your packs throughout their life, and if you start to see a dramatic drop in performance, stop using them and replace them immediately.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Keep in mind this is true only for LiPo batteries we typically use. If you want to use Lithium Ion, the safe discharge voltage and discharge rates are very different, and the claimed mAh ratings can be dramatically off depending on the reliability of your source for the Li-Ion cells.  Some 18650 style Li-Ion cells have been found to contain powder filler and a much smaller cell inside, so be aware of those caveats. Li-Ion cells are also typically safe to draw down to around 2.5v per cell rather than the 3.3ish of LiPos, but that as well as the max recomended current draw can vary depending on the manufacturer. If you have Li-Ion cells, be sure to check the manufacturer supplied specifications if you can find them, and make sure your cells are genuine. Knockoffs are a problem in the Li-Ion world. In general Li-Ion is only suited to applications that have both low current draw and low transient spikes, and there is much more variation in quality and specifications. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For both types of cells, keep in mind the current being drawn from the battery can dramatically impact the ability of the battery to deliver its full capacity. The higher the current draw the less usable capacity you will have regardless of the true pack capacity. This is why it's always the best idea to confirm both the current delivery performance, and the mAh rating if you have any doubts, and why running both a current sensor and  voltage sensor in the air is ideal. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as identifying other characteristics of a battery, using a reliable &quot;internal resistance&quot; meter can tell you a lot about the battery performance and how much current you can safely draw from it. I use the Wayne Giles meter, and you can find a good discussion on the theory and how to use the meter here: &lt;a href=&quot;https://www.rcgroups.com/forums/showthread.php?1323465-ESR-IR-Meter-fo-Lipos&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.rcgroups.com/forums/showthread.php?1323465-ESR-IR-Meter-fo-Lipos&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="24493" LastEditorUserId="24493" LastEditDate="2020-01-21T13:39:32.407" LastActivityDate="2020-01-21T13:39:32.407" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="20004" PostTypeId="2" ParentId="19372" CreationDate="2020-01-14T07:01:52.490" Score="0" Body="&lt;p&gt;Kalman filter consists of two steps: Time Update and Measurement Update. For asynchronous measurement case you will have variable sampling time which you will calculate using timestamp. For each sensor data(should come with a timestamp information) you might calculate the time difference between the last iteration and the current iteration. Then, you will use this time difference into the time update step. After that, measurement update will be performed with the corresponding measurement.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;For each iteration:&#xA;    dt = timestamp - last_time&#xA;    TimeUpdate(dt)&#xA;    MeasurementUpdate()&#xA;    last_time = timestamp&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="24518" LastActivityDate="2020-01-14T07:01:52.490" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20005" PostTypeId="1" AcceptedAnswerId="20007" CreationDate="2020-01-14T09:13:35.813" Score="0" ViewCount="63" Body="&lt;p&gt;Just to clear some doubts:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Qn 1. Does kalman filter require constant time step?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;From my own study, it does not seem necessary to have a constant time step. You just need to take into account time interval between steps with the prediction steps&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Qn 2. What if you need to have an output at constant time interval but only have measurements at irregular interval, say your timestep is at 0.5s but your measurement only comes around 1.5-3s&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Does the conventional approach normally output the last kalman filtered result(doing prediction and measurement) at 0.5s &#xA;or could they interpolate the result by kalman filter(doing only prediction and not measurement)?  &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Is there some form of implementation? (with code I can referred to?)  &lt;/li&gt;&#xA;&lt;li&gt;Or what other measures do people normally adopt? &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Qn 3. If the measurements is irregularly timed and possibly delayed result&#xA;  say the measurements at 50s give actual reading of 49s result. What should we do?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The first idea I can think of is to increase measurement covariance. Am I right? What else can I do?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;THanks&lt;/p&gt;&#xA;" OwnerUserId="24512" LastActivityDate="2020-01-14T18:56:44.137" Title="Some Kalman filter implementation queries" Tags="&lt;kalman-filter&gt;&lt;imu&gt;&lt;c++&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20007" PostTypeId="2" ParentId="20005" CreationDate="2020-01-14T18:56:44.137" Score="3" Body="&lt;p&gt;Answers are inline&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Qn 1. Does kalman filter require constant time step?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Correct it does not. &#xA;The reason you may find in literature that it requires a constant time step has to do with with lack of computing power in the 60s-90s and the discretization of a continuous system. You can read more about this in something like &lt;a href=&quot;http://www.uta.edu/utari/acs/2015%20robotics%20SCUT/NEU%20June%20shorcourse%20notes/Lewis-%20Optimal%20and%20robust%20estimation.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt;, or other books that deal with Kalman filters. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Essentially it boils down to computing &lt;span class=&quot;math-container&quot;&gt;$e^{AT}$&lt;/span&gt; for every &lt;span class=&quot;math-container&quot;&gt;$T$&lt;/span&gt;. If you use a constant timestep you can compute this value once, and just reuse it.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Qn 2. What if you need to have an output at constant time interval but&#xA;  only have measurements at irregular interval, say your timestep is at&#xA;  0.5s but your measurement only comes around 1.5-3s&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You use whatever the last value was computed. That can come from either the measurement or the prediction step. No interpolation or anything else weird. Literally just the last value. The whole purpose of the prediction step is that it should accurately reflect how your model evolves with time.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Qn 3. If the measurements is irregularly timed and possibly delayed&#xA;  result say the measurements at 50s give actual reading of 49s result.&#xA;  What should we do?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There are a ton of different ways to deal with this and it is still an active area of research. I would say the easiest are the following options.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Constant Known time delay&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;If you know what the time delay is, and it is constant then take that into account in your implementation of prediction and measurement updates. E.g if your measurement update is actually measured at 49s, then only run a prediction up to 49s.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Time delay in filter&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;You can add the time delay as a state in your filter. You then hold off on predicting until you receive a measurement. You then run the prediction step up until &lt;span class=&quot;math-container&quot;&gt;$t_m+t_d$&lt;/span&gt;, and then run the measurement update. Note your measurement update has to somehow be able to also measure the time delay.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here &lt;span class=&quot;math-container&quot;&gt;$t_m$&lt;/span&gt; is your time of measurement, and &lt;span class=&quot;math-container&quot;&gt;$t_d$&lt;/span&gt; is your time delay.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you do need the predicted state value, at some earlier point then you run prediction as normal, except store the output somewhere differently.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Rolling back Kalman Filter state.&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;If your implementation is a Linear System, and able to be modeled by a Kalman Filter and not an EKF, then you can do some magic with reversing the state to a previous value. You would have to do some research on this cause I don't know how it is actually done in practice.&lt;/p&gt;&#xA;" OwnerUserId="15265" LastActivityDate="2020-01-14T18:56:44.137" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="20008" PostTypeId="2" ParentId="19959" CreationDate="2020-01-14T22:02:21.507" Score="0" Body="&lt;p&gt;Assuming the wheel is unloaded, or has a small load, it appears the wheel is not the problem in this application. Maybe I can point you to your problem in the application.&#xA;It appears that you are new to the use of stepper motors.&#xA;There are a few things with stepper motors that you need for proper operation:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A 12 volt dedicated supply (Unless the stepper motor specifically requests otherwise)&lt;/li&gt;&#xA;&lt;li&gt;A stepper driver that can handle around 2x the current requirements for steady state (the 1.7 amp ##, you have to take into account current surges)&lt;/li&gt;&#xA;&lt;li&gt;The microstep setting (on the driver) has to be configured - in my use cases, I recommend enable full microstep&lt;/li&gt;&#xA;&lt;li&gt;The driver also needs the current configured through a resistor, a potentiometer, or through digital means.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;If one of these things is not addressed, you can get unstable or no operation.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Power Supply&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Just because your motor says 2.XX volts doesn't mean that is the only voltage you need. That is simply the voltage coming directly off the driver - this is not the same thing as the &lt;strong&gt;&lt;em&gt;supply&lt;/em&gt;&lt;/strong&gt; voltage.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Stepper driver choice&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;You are given the steady-state current &lt;strong&gt;for each phase&lt;/strong&gt;. Most stepper motors are used in a 2-phase configuration, which means you should really use a driver that can supply 1.7*2=3.4 &lt;strong&gt;amps&lt;/strong&gt; of current, which, to be same, should be rounded to &lt;strong&gt;4 amps&lt;/strong&gt;. This will enable enough power is available to the stepper at all RPMs.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Microstepping&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;If you are trying to turn a wheel, I am assuming that you want smooth motion, not necessarily &lt;strong&gt;&lt;em&gt;fast&lt;/em&gt;&lt;/strong&gt; motion. Enabling full microstepping will give you smooth motion. There should be pins you need to set to logic HIGH or little switches on the driver, depends what driver model you have (cheap vs. expensive). &lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Current configuring&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Depending on how nice your stepper driver is, you may or may not need to configure the current on it. The nicer drivers are purchased for their specific current limits, and therefore you won't have to configure them. If you have a cheap one, like from a 3d printer driver board like the DRV8825 or those new Trinamic drivers with &lt;strong&gt;super&lt;/strong&gt; hich microstepping, you &lt;strong&gt;will&lt;/strong&gt; need to configure the current limits. Usually there is a potentiometer onboard that you can adjust with a non-conductive screwdriver. I have dipped my screwdrivers in nail polish for this purpose. I then start the motor up with the driver in the fully counter-clockwise position and then slowly turn clockwise until I get nice smooth motion. I suggest you use an Arduino to create a constant STEP and DIR signal such that you can then focus on tuning the current limits.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In summary, stepper motors need tuning for the desired application. You &lt;strong&gt;cannot&lt;/strong&gt; just hook them up like a BLDC and expect them to work perfectly. You need to create a test setup to verify the operation of a stepper motor before adding it to your end product. They are not as replaceable as BLDC motors either: a stepper motor may look the same in size and weight, but perform &lt;strong&gt;very&lt;/strong&gt; differently, keeping all other variables constant.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Try out my configuration recommendations before you attach something onto the stepper. You can use the wheel to check for the stepper resolution: the bigger steps will be more accentuated when you see a wheel doing the jerking.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Final notes&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Stepper motors are designed to run hot as ****. Do &lt;strong&gt;not&lt;/strong&gt; be surprised if the motor is so hot you cannot touch it, especially in applications where the the motor is always running for extended periods of time. You will need to look at the datasheet to verify stable temperatures. I have also found that, when choosing stepper motors, they do &lt;strong&gt;not&lt;/strong&gt; need to have much resistance when you try to backdrive a stepper motor shaft yourself. A weak motor can have a surprising amount of torque. I was in for a shocker when I first started using steppers in belt-drive applications.&lt;/p&gt;&#xA;" OwnerUserId="23597" LastActivityDate="2020-01-14T22:02:21.507" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20009" PostTypeId="1" CreationDate="2020-01-15T03:23:51.627" Score="1" ViewCount="26" Body="&lt;p&gt;I have a robot, some joints of which supports torque control,while the rest only supports velocity control. What should I do to implement torque control on the whole system?&lt;/p&gt;&#xA;" OwnerUserId="24522" LastActivityDate="2020-01-15T10:29:59.267" Title="implement torque control on a robot with some joints supporting torque control while others only supporting velocity control" Tags="&lt;control&gt;" AnswerCount="0" CommentCount="2" ClosedDate="2020-01-15T15:18:19.240" ContentLicense="CC BY-SA 4.0" />
  <row Id="20010" PostTypeId="2" ParentId="19781" CreationDate="2020-01-15T07:55:47.783" Score="0" Body="&lt;p&gt;CNC machines are usually used for moving a tool using multiple axes in a coordinated way. If you want to do the same with a PLC, the program gets very complicated and that's why it does not make sense to use a PLC instead of a CNC machine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PLCs are usually used BEHIND the CNC for controlling more PLC like functions for the machine such as hydraulics, clamps, etc. So the CNC does the more complicated moving stuff but the PLC controls the general functions of the machine in the &quot;back end&quot;. That being said, CNC's and PLC's are two different tools that are used for two different jobs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The PLC is also commonly used in civil applications such as in washing machines and for controlling traffic signals and elevators. They are used in many industries to monitor and control production processes and building systems.&lt;/p&gt;&#xA;" OwnerUserId="20795" LastActivityDate="2020-01-15T07:55:47.783" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20011" PostTypeId="1" CreationDate="2020-01-15T09:59:00.493" Score="0" ViewCount="88" Body="&lt;p&gt;I was trying to understand the mechanism of Wall-E's Legs from the Wall-E 3D animation movie of Pixar Animation Studios, how he is able to move up and down and move the tracks on all directions. Can anyone explain how or point me to some resource?, I've been searching for days or watching slow motion scenes from movies but still I don't get the big picture of it.&lt;/p&gt;&#xA;" OwnerUserId="18826" LastEditorUserId="18826" LastEditDate="2020-01-15T20:31:47.243" LastActivityDate="2020-01-15T20:56:57.107" Title="Wall-E Legs mechanism" Tags="&lt;mechanism&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="20012" PostTypeId="2" ParentId="19991" CreationDate="2020-01-15T10:10:16.277" Score="1" Body="&lt;p&gt;If you want to learn about batteries and their characteristics, you should probably go to the BatteryUniversity to learn a few things before you start to do calculations, because if you miss interpret stated parameters as facts, you will get wrong results.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://batteryuniversity.com/learn/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://batteryuniversity.com/learn/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The specific mAh you can get from a battery depends on the voltage difference from charged to discharged state you are willing to use and at what current you do it (careful it can be dangerous or damaging to discharge to low or charge to high as well as overdrawing current). The way to be sure is to measure when you charge or discharge. Stated capacities on batteries are estimnates at best, depending on battery type it can be the most achivable mAh or the minimum value which is always achived ... check your datasheet of the battery for this(if your battery has no datasheet then the only option is measuring).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is some websites and youtube channels doing battery tests, only if you test a cell you can know exactly how it performs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;LIION:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://lygte-info.dk/review/batteries2012/Common18650Summary%20UK.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://lygte-info.dk/review/batteries2012/Common18650Summary%20UK.html&lt;/a&gt;&#xA;&lt;a href=&quot;http://www.dampfakkus.de/akku_liste-nach-groesse.php?size=18650&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.dampfakkus.de/akku_liste-nach-groesse.php?size=18650&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;LIPO:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;very difficult to find tests because the batches of batteries even from the same vendor have different performance characteristics. Find some here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://rightbattery.com/lipo-liion-life-batteries/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://rightbattery.com/lipo-liion-life-batteries/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;NiMH/NiCd&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://rightbattery.com/nicd-nimh-batteries/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://rightbattery.com/nicd-nimh-batteries/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope this gives you the right pointers on where to start.&lt;/p&gt;&#xA;" OwnerUserId="22914" LastEditorUserId="22914" LastEditDate="2020-01-20T12:30:49.733" LastActivityDate="2020-01-20T12:30:49.733" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20014" PostTypeId="1" AcceptedAnswerId="20015" CreationDate="2020-01-15T15:07:44.257" Score="1" ViewCount="51" Body="&lt;p&gt;I have been reading about scan matching and so far I have gathered that scan matching tries to find the transformation (rotation and translation) which leads to the best match between overlapping points of the two scans. My question is : what algorithms does it use to find the overlapping regions ? Any explanations or links to relevant papers are greatly appreciated.&lt;/p&gt;&#xA;" OwnerUserId="23475" LastActivityDate="2020-01-15T17:52:16.227" Title="How does scan matching find overlapping regions in two scans?" Tags="&lt;mobile-robot&gt;&lt;slam&gt;&lt;lidar&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20015" PostTypeId="2" ParentId="20014" CreationDate="2020-01-15T17:52:16.227" Score="1" Body="&lt;p&gt;The process you are referring to is called &lt;strong&gt;point cloud registration&lt;/strong&gt; (or point matching). The goal of point cloud registration is find the spatial transformation that aligns two point clouds (i.e., sets of points). One of the most popular methods is iterative closest point (ICP), and many variants of ICP exist. Other methods exist as well such as robust point matching (RPM) and variants, but I am not familiar with RPM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The basic ICP algorithm essentially works by matching closest points and minimizing the error between point matches to find the rotation and translation between point clouds. The process is then repeated after transforming the original point cloud.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Methods for ICP are provided in the &lt;a href=&quot;http://pointclouds.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Point Cloud Library (PCL)&lt;/a&gt;, which is open source software for point cloud processing. Other software also includes implementation e.g., MATLAB, &lt;a href=&quot;https://github.com/ethz-asl/libpointmatcher&quot; rel=&quot;nofollow noreferrer&quot;&gt;libpointmatcher&lt;/a&gt;.  If you are interested in the theory, you can see the original ICP paper:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;P. Besl, N. McKay &quot;Method for Registration of 3-D Shapes&quot; in IEEE&#xA;  Transactions of Pattern Analysis and Machine Intelligence, 1992.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="15213" LastActivityDate="2020-01-15T17:52:16.227" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="20016" PostTypeId="2" ParentId="16703" CreationDate="2020-01-15T18:59:16.420" Score="0" Body="&lt;p&gt;If you want to incorporate magnetometer measurements in an EKF, you must model the magnetometer. In other words, you need an equation &lt;span class=&quot;math-container&quot;&gt;$\mathbf{y} = \mathbf{h}(\mathbf{x})$&lt;/span&gt; where &lt;span class=&quot;math-container&quot;&gt;$\mathbf{y}$&lt;/span&gt; is your magnetometer measurements or some transformation of the magnetometer measurements (e.g., you can preprocess your actual measurements) and &lt;span class=&quot;math-container&quot;&gt;$\mathbf{x}$&lt;/span&gt; is your state vector. This is called the observation model and is included in the standard EKF equations. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, you might already understand that part, and if so, I assume you don't understand how to come up with the observation model. I can provide you with some direction on what to do:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;What states can you measure using a magnetometer with some preprocessing? Can you measure any position states (e.g., x, y, or z)? Can you measure orientation states (roll, pitch, or yaw)? I will give you a hint. On Earth, you can estimate yaw using the magnetometer.&lt;/li&gt;&#xA;&lt;li&gt;If you can process the measurements to find yaw, you can write your observation model, then plug the observation model in your EKF.&lt;/li&gt;&#xA;&lt;li&gt;If you want to use in real life, you need to calibrate your magnetometer and do some outlier removal (e.g., do sanity check on yaw estimates from magnetometer). This is an absolute must for real life applications if you want the system to work.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;If you need help processing the magnetometer measurements, I recommend this &lt;a href=&quot;https://cache.freescale.com/files/sensors/doc/app_note/AN4248.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;article&lt;/a&gt; for a simple model. Many other references exist, but this one is straightforward for getting started.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have specific question/confusion about the article or details in processing the magnetometer measurements. I can add some detail to my answer.&lt;/p&gt;&#xA;" OwnerUserId="15213" LastEditorUserId="15213" LastEditDate="2020-01-15T19:21:13.147" LastActivityDate="2020-01-15T19:21:13.147" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20017" PostTypeId="2" ParentId="20011" CreationDate="2020-01-15T20:56:57.107" Score="2" Body="&lt;p&gt;This is an appropriate question over at movies SE, but even here its probably interesting. Wall-Es character is definitely an interesting one, very dynamic, anthropomorphic, and modelled quite realistic. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However there is a lot of film trickery going on here. Although Wall-E and other movie robots like Terminator seem like real mechanical systems, there are a lot of cgi clean up going on behind the scenes or scenes are planned in such a way that holding brackets and such are hidden, or things are designed in a way to terminate on faces of other models, but internally are simply non existing. This is Wall-Es case. It‘s modelled exactly enough to look mechanically feasible, but as you‘ve noticed it would be &lt;em&gt;very&lt;/em&gt; difficult or impossible to create all his movements.&lt;/p&gt;&#xA;" OwnerUserId="23148" LastActivityDate="2020-01-15T20:56:57.107" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20018" PostTypeId="1" AcceptedAnswerId="20027" CreationDate="2020-01-15T23:09:03.630" Score="0" ViewCount="71" Body="&lt;p&gt;Would fusing Odometry estimation with IMU sensor increase the accuracy of estimation for planar differential drive robots?&lt;/p&gt;&#xA;" OwnerUserId="23798" LastActivityDate="2020-01-16T20:46:52.690" Title="Fusing IMU sensor with odometry" Tags="&lt;odometry&gt;&lt;sensor-fusion&gt;&lt;estimation&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20019" PostTypeId="2" ParentId="19743" CreationDate="2020-01-16T03:33:11.057" Score="0" Body="&lt;p&gt;After considerable I was able to figure out how to use the Falkolib library. So, after you download the source code from github, you will have a folder called test. In that folder, there will be sample code for using the various detectors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my case I experimented with the Falko detector and the OC detector. However I found some issues with the OC detector in my case. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I assumed it to be used in environments where there are walls running parallel(on both sides) to the path of the robot. I assumed this because I understood that this is the use case of the OC detector from the documentation. But it appears that I was wrong and it cannot be used for that purpose. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried using the OC in that scenario in simulation and it started to detect landmarks in places where there was no landmark (mostly towards the front and the front was mostly clear). Hence then I experimented with the Falko detector and it worked perfectly. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I imagined the parallel walls scenario to be unique because the walls were always running parallel to the path of the robot and hence I thought that in this case it would be difficult to extract landmarks as it was a very monotonous environment and hence the algorithm would have a work extra hard and find landmarks only on the sides even though the sides would be really similar in most cases(office doors and labs were to the sides and as you know the office doors would appear very similar at each point along the corridor). But again, Falko worked well here. &lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Now onto how to use Falko: I started off with the &lt;code&gt;testKeypointFalko.cpp&lt;/code&gt; file in the test folder. In that file, a LaserScan object is created in the beginning of the main function and inside that object certain parameters are passed. The first parameter is the start angle of the LIDAR, second is the end angle, and the last is the number of beams that the LIDAR shoots. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my case, I was using a Kinect Laser Scanner and hence I got the start and end angle details by doing a rostopic echo on the Kinect Scanner. And you can find the number of beams for your scanner in the manual. Change those 3 parameters according to the scanner you are using. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then for the entering the range data, I used the &lt;code&gt;testData.cpp&lt;/code&gt; file in which you can manually put in the LIDAR scan ranges in &lt;code&gt;testRanges&lt;/code&gt; and &lt;code&gt;testRanges2&lt;/code&gt; array. The &lt;code&gt;testRangesOrtho1&lt;/code&gt; and 2 are if you are going to use the OC detector. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are 2 arrays for the Falko detector i.e &lt;code&gt;testRanges&lt;/code&gt; and &lt;code&gt;testRanges2&lt;/code&gt; because the Falko detector not only extracts the landmarks but also compares the the laser range readings (&lt;code&gt;testRanges&lt;/code&gt; and &lt;code&gt;testRanges2&lt;/code&gt; in our case) to find out the similar landmarks. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you update the &lt;code&gt;testData.cpp&lt;/code&gt; file you can make and run the Falko detector and the you will get the output on the terminal about the landmarks and also the similar landmarks in the 2 laser range readings. Also, in order to detect different types of landmarks, for example circular, you may play with the following variables in the &lt;code&gt;testKeypointOC.cpp&lt;/code&gt; file : &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;RangeRes&lt;/li&gt;&#xA;&lt;li&gt;RangeMax &lt;/li&gt;&#xA;&lt;li&gt;NMSRadius &lt;/li&gt;&#xA;&lt;li&gt;NeighMinPoint&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This library, I feel could also be used for data association because if you pass in the entire collected memory of laser scans and the current laser scan readings, it will be able to tell you how many of the extracted landmarks from the current readings are similar to each of the laser scan readings set in memory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Good luck!&lt;/p&gt;&#xA;" OwnerUserId="24184" LastEditorUserId="17029" LastEditDate="2020-01-16T17:35:45.243" LastActivityDate="2020-01-16T17:35:45.243" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20022" PostTypeId="1" AcceptedAnswerId="20025" CreationDate="2020-01-16T10:57:40.483" Score="0" ViewCount="26" Body="&lt;p&gt;Assume the following scenario:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A 2D LIDAR sensor is mounted with a vertical (not exactly known) scan plane at a height of 20m&lt;/li&gt;&#xA;&lt;li&gt;The scanner can be rotated about the vertical axis and the encoder values are known and absolute. But I would like to calibrate the scanner from a single scan line (which should contain enough points)&lt;/li&gt;&#xA;&lt;li&gt;The scanner sees objects relatively far away (no easy way to put calibration pattern close to the scanner)&lt;/li&gt;&#xA;&lt;li&gt;I can obtain 3d coordinates of scanned points in the global coordinate system&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I now wish to compute the scanner rotation and translation w.r.t. to the global coordinate frame.&lt;/p&gt;&#xA;&#xA;&lt;h1&gt;Question:&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Am I correct in the assumption that a few known global coordinates and   their scanner-local correspondences from measurement are sufficient in  computing rotation and translation? Algebraically, it seems that &lt;span class=&quot;math-container&quot;&gt;$R \cdot \vec{x}_\text{global} + \vec{t} = \vec{x}_\text{local}$&lt;/span&gt; would lead to a system of linear equations with 9 + 3 unknowns, so I would only need 12 / 3 = 4 coordinate correspondences.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If no, what would I need for performing this task?&lt;/p&gt;&#xA;" OwnerUserId="17267" LastEditorUserId="17267" LastEditDate="2020-01-17T07:49:57.813" LastActivityDate="2020-01-17T07:49:57.813" Title="How do I calibrate a rotating laser scanner pose from known global coordinates?" Tags="&lt;calibration&gt;&lt;lidar&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20023" PostTypeId="1" CreationDate="2020-01-16T15:52:30.757" Score="0" ViewCount="80" Body="&lt;p&gt;Just started with the topic of mobile robotics..&#xA;so I'm still into concept making and little programming, but have not setup everything or tested at all. I got a (differential) mobile robot (lego mindstorm) and a external camera mounted on the ceiling of my testarea, looking top down. Robot is equipped with a bumper for collision detection and ultrasonic sensor. Area has some static obstacles (3-4) in it and there should be another lego robot moving around as dynamic obstacle. No markers or colors on the ground.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I plan to do a camera self-calibration taking odometry data and tracking the position of the robot by template matching. Creating the map get's done by image processing, with edge filtering and later converting to a gridmap.&#xA;So next for localization:&#xA;While I get more and more into all the subjects I ask myself how to do the localization in the best manner and still as collaboraive system. Is it possible or even clever to use a particle filter out of robot sensor data? &#xA;Or is my localization given, just by my template matching and image position extracting? The problem I see comes with the second robot, which will get the localization very complex. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another Question is, how can I achieve an iterative map update? - The map should react on happenings, like the moving robot (dynamic). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was reading about layering the occupancy/grid maps and update the master map. So combining it with A* Path Planning should make it dynamic I guess?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks and best regards&lt;/p&gt;&#xA;" OwnerUserId="24537" LastActivityDate="2021-04-14T16:57:17.437" Title="Collaboration of mobile robot and survaillance camera - classic localization (still) needed?" Tags="&lt;mobile-robot&gt;&lt;localization&gt;&lt;cameras&gt;&lt;path-planning&gt;&lt;particle-filter&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20024" PostTypeId="1" CreationDate="2020-01-16T17:19:44.893" Score="0" ViewCount="58" Body="&lt;p&gt;I'm looking for some guidance on a project that I've been doing for quite a long time; the project is about a 4WD robotic platform for obstacle avoidance with haptic feedback. If you know about the appropriate communication protocols for my project and can tell me something based on your experience with some similar projects - I will really appreciate it. So, I'm going to tell you what I've done so far.&lt;/p&gt;&#xA;&lt;p&gt;I'm already taking the distances where the obstacle is located to my ESP8266. This is through a 340° detector made out of two Vl53L0X TOF sensors that use I2C CP, and a micro servo motor to make them turn around. With the same board, I control four Servos Dynamixel that use UART CP.&lt;/p&gt;&#xA;&lt;p&gt;I command the robot through a web page and receive the data of each sensor in real-time (a delay of 2s) using TCPIP protocol and HTTP.&lt;/p&gt;&#xA;&lt;p&gt;My questions are:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;How can I read the data on the web page using VREP which is where the haptic control will be implemented?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Do you know any other way to connect via WIFI the ESP8266 with VREP and establish a bidirectional communication?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I tried using MATLAB to read the data from the web page and send it back to VREP afterward, but I haven't succeeded, yet. I can just write data, so far. All this using the function TCPIP and TCPCLIENT. Is it convenient to use MATLAB as a bridge between the ESP8266 and VREP? If so, What am I missing to succeed in this?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="24538" LastEditorUserId="19515" LastEditDate="2020-08-08T17:47:35.113" LastActivityDate="2021-05-05T19:09:15.923" Title="How to communicate vrep with ESP8266 via wifi to send and receive data" Tags="&lt;arduino&gt;&lt;matlab&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20025" PostTypeId="2" ParentId="20022" CreationDate="2020-01-16T18:39:58.313" Score="1" Body="&lt;p&gt;You are mostly correct. You can compute the global coordinates from only a few point correspondences, but the system is not linear. If we expand the equation that described the relationship between the local and global coordinates (in 2D for simplicity), we have&#xA;&lt;span class=&quot;math-container&quot;&gt;$$\begin{bmatrix}&#xA;x_\mathsf{global}  \\ &#xA;y_\mathsf{global} &#xA;\end{bmatrix} = &#xA;\begin{bmatrix}&#xA;\cos{\theta} &amp;amp; -\sin{\theta} \\ &#xA;\sin{\theta} &amp;amp; \cos{\theta}&#xA;\end{bmatrix} &#xA;\begin{bmatrix}&#xA;x_\mathsf{local}  \\ &#xA;y_\mathsf{local} &#xA;\end{bmatrix} +&#xA;\begin{bmatrix}&#xA;x  \\ &#xA;y &#xA;\end{bmatrix}$$&lt;/span&gt;&#xA;where &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt; are the position and orientation of the lidar with respect to the global coordinate frame (I wrote in 2D but similar applied to 3D).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, the parameters you are solving for are the orientation and translation of the lidar, which are &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt;, and &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt; in 2D. If you have enough points, you can solve for these parameters, but you need to do some nonlinear optimization. If you have noise in your measurements (as you probably do), you will need even more points depending on how much noise. Hope this is helpful for you.&lt;/p&gt;&#xA;" OwnerUserId="15213" LastActivityDate="2020-01-16T18:39:58.313" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20026" PostTypeId="2" ParentId="20023" CreationDate="2020-01-16T18:54:07.463" Score="0" Body="&lt;p&gt;You ask several questions, but I will focus mostly on the localization part. &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Is it possible or even clever to use a particle filter out of robot sensor data? &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes. You can use a particle filter, but I don't understand what part of your system is collaborative. Instead, you have a robot operating in dynamic environment (with a remote sensor). See next comment.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Or is my localization given, just by my template matching and image position extracting?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You can get position (and maybe) orientation measurements from the camera, but the measurements are corrupted with error, so I suggest fusing the measurements from encoders and the camera in a filter. You mentioned a particle filter, but I would use a Kalman filter (however particle will work).&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Another Question is, how can I achieve an iterative map update?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I don't know what you mean. I suggest looking up some literature on Simultaneous Localization and Mapping (SLAM). I think you are wanting to do something along these lines, but doing this is not easy.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;I was reading about layering the occupancy/grid maps and update the master map. So combining it with A* Path Planning should make it dynamic I guess?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I am not sure what you are asking here. Dynamic usually refers environments that are not static, so in dynamic, obstacles or landmarks can change position while in static they do not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope this is helpful. The questions are very general, so hard to answer specifically.&lt;/p&gt;&#xA;" OwnerUserId="15213" LastEditorUserId="15213" LastEditDate="2020-01-16T20:22:07.893" LastActivityDate="2020-01-16T20:22:07.893" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20027" PostTypeId="2" ParentId="20018" CreationDate="2020-01-16T20:46:52.690" Score="1" Body="&lt;p&gt;Yes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Example of this can be found &lt;a href=&quot;https://hackernoon.com/ghost-iv-sensor-fusion-encoders-imu-c099dd40a7b&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depending on how good your modeling is you could also use the IMU to help detect wheel slippage.&lt;/p&gt;&#xA;" OwnerUserId="15265" LastActivityDate="2020-01-16T20:46:52.690" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20028" PostTypeId="1" AcceptedAnswerId="20053" CreationDate="2020-01-17T06:21:04.540" Score="3" ViewCount="86" Body="&lt;p&gt;I am training Turtlebot 2 to move around the office. I come from robotics hardware background but relatively new to computer vision and robotic mapping.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are my two fundamental questions related to localization and mapping. &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;The algorithm we are using to mapping is SLAM. This makes sense but my question is in general, if we have performed SLAM, then the map is created and this map can be saved for later. So is it right to say, next time if the bot moves in the same environment, it is not using SLAM but instead only localisation (since the map already exist). Is SLAM in general used only for first time mapping within an environment?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If there is no mapping at all, can bots be trained to move randomly and turn back or around only if there is an obstacle or wall.  This wouldn't require mapping, right? So is it right to say, bots can be moved either by mapping or without mapping, depending on the need. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="24539" LastActivityDate="2020-02-24T22:52:19.003" Title="Is SLAM done only first time in a given environment" Tags="&lt;slam&gt;&lt;localization&gt;&lt;navigation&gt;&lt;mapping&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20035" PostTypeId="1" AcceptedAnswerId="20036" CreationDate="2020-01-18T18:26:55.720" Score="0" ViewCount="1239" Body="&lt;p&gt;Let's say we have a three revolute joint robot with the following DH parameter table:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/TF1x1.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/TF1x1.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where the last row corresponds to the transformation between the last joint frame and the end-effector frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We can easily derive the transformation matrices from the DH table:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$A_{i-1,i}=A_{z,\theta}\cdot A_{z,d}\cdot A_{x,a}\cdot A_{x,\alpha}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And get the absolute transformation matrix of the minimal configuration:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$A_{0,2}=A_{0,1}\cdot A_{1,2}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And of the end-effector:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$A_{0,3}=A_{0,2}\cdot A_{2,3}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What are the steps to calculate the Jacobian, without using the predefined formulas:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/vDrAY.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vDrAY.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that there are some partial derivatives by each &lt;span class=&quot;math-container&quot;&gt;$\theta_i$&lt;/span&gt; involved, but I'm not sure what the procedure is.&lt;/p&gt;&#xA;" OwnerUserId="24552" LastActivityDate="2020-01-18T19:44:55.293" Title="Finding Jacobian matrix using the DH parameter table and relative transformation matrices" Tags="&lt;kinematics&gt;&lt;jacobian&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20036" PostTypeId="2" ParentId="20035" CreationDate="2020-01-18T19:08:10.740" Score="2" Body="&lt;p&gt;Your kinematic equation, which links TCP position to joint position is:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$X = A_{0,3} \times Q$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;or&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ \begin{pmatrix} x \\ y\\ z\\ 1\end{pmatrix} = A_{0,3} \times \begin{pmatrix} \theta_1 \\ \theta_2\\ \theta_3\\ 1\end{pmatrix} $$&lt;/span&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;based on this, you will need to  write:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ \left\{&#xA;\begin{eqnarray} &#xA;x &amp;amp;=&amp;amp; f_x(\theta_1, \theta_2, \theta_3)\\&#xA;y &amp;amp;=&amp;amp; f_y(\theta_1, \theta_2, \theta_3)\\&#xA;z &amp;amp;=&amp;amp; f_z(\theta_1, \theta_2, \theta_3)\\&#xA;\alpha &amp;amp;=&amp;amp; f_\alpha(\theta_1, \theta_2, \theta_3)\\&#xA;\beta &amp;amp;=&amp;amp; f_\beta(\theta_1, \theta_2, \theta_3)\\&#xA;\gamma &amp;amp;=&amp;amp; f_\gamma(\theta_1, \theta_2, \theta_3)&#xA;\end{eqnarray}&#xA;\right.$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where &lt;span class=&quot;math-container&quot;&gt;$\alpha, \beta, \gamma $&lt;/span&gt; are the Euler angles of end-effector orientation (it does not matter in which order they are defined, you just have to pick one and stick with it, e.g. XYZ order or ZXZ order). Based on these equations you can write the Jacobian as: &#xA;then&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ J = \left[&#xA;\begin{matrix}&#xA;\frac{\partial f_x}{\partial \theta_1}  &amp;amp;  \frac{\partial f_x}{\partial \theta_2} &amp;amp; \frac{\partial f_x}{\partial \theta_3}\\&#xA;\frac{\partial f_y}{\partial \theta_1} &amp;amp;  \frac{\partial f_y}{\partial \theta_2} &amp;amp; \frac{\partial f_y}{\partial \theta_3}\\&#xA;\frac{\partial f_z}{ \partial \theta_1 }  &amp;amp;  \frac{\partial f_z}{\partial \theta_2} &amp;amp; \frac{\partial f_z}{\partial \theta_3}\\&#xA;\frac{\partial f_\alpha}{ \partial \theta_1 }  &amp;amp;  \frac{\partial f_z}{\partial \theta_2} &amp;amp; \frac{\partial f_z}{\partial \theta_3}\\&#xA;\frac{\partial f_\beta}{ \partial \theta_1 }  &amp;amp;  \frac{\partial f_z}{\partial \theta_2} &amp;amp; \frac{\partial f_z}{\partial \theta_3}\\&#xA;\frac{\partial f_\gamma}{ \partial \theta_1 }  &amp;amp;  \frac{\partial f_z}{\partial \theta_2} &amp;amp; \frac{\partial f_z}{\partial \theta_3}\\&#xA;\end{matrix}&#xA;\right]$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please note that this is &lt;span class=&quot;math-container&quot;&gt;$6x3$&lt;/span&gt; as it is used to compute both linear and rotational velocities of the end-effector based on the 3 joint velocities as follows:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ \left[ \begin{array}&#xA;\dot{x} \\ \dot{y} \\ \dot{z} \\ \dot{\alpha} \\ \dot{\beta} \\ \dot{\gamma} &#xA;\end{array} \right]&#xA;= J \times \left[&#xA;\begin{array}&#xA;\dot{\theta_1} \\ \dot{\theta_2} \\ \dot{\theta_3}&#xA;\end{array}&#xA;\right]&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2020-01-18T19:44:55.293" LastActivityDate="2020-01-18T19:44:55.293" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="20037" PostTypeId="2" ParentId="11275" CreationDate="2020-01-19T06:47:26.193" Score="1" Body="&lt;p&gt;If not moving, file the rod down or machine it, and take the smooth rod approach or screw it all way in to head and seal it there..&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, if moving..  I'd say use a nylon bushing smaller than threading and screw it on to the point it will align with edge of box it goes into, if it screws on too easy, it may be a bit too loose cause the friction may unscrew it or you can make it stay using a couple more nuts on each side of the nylon...  Then seal the smooth outer edge of the nylon as if just straight rod going through.. The threaded will always work it's way through something so best afix nylon to it, epoxy it, and make it a permanent fixture to the threaded rod and then drill out your hole a tiny bit more.. The only other way I know of would be more costly than just buying straight rods and it involves a type two part joint to isolate inside from outside.. &lt;/p&gt;&#xA;" OwnerUserId="24556" LastActivityDate="2020-01-19T06:47:26.193" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20038" PostTypeId="2" ParentId="20024" CreationDate="2020-01-20T13:59:00.960" Score="0" Body="&lt;ol&gt;&#xA;&lt;li&gt;and 2.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;VREP is a simulator system. you can develop plug-ins for it which can run custom code (i.e. communicate with your robot). &lt;a href=&quot;http://www.coppeliarobotics.com/helpFiles/en/plugins.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here&lt;/a&gt; is a short intro on how to start. You can establish a bidirectional TCP-IP Communication from the plug-in. You can make a C TCP-IP Server (as presented &lt;a href=&quot;https://ops.tips/blog/a-tcp-server-in-c/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;) and run this on a different thread so it does not block your simulation. The &lt;code&gt;message()&lt;/code&gt; function of the plug-in can then handle the inter-thread communication between V-REP and the TCP-IP Server. I would ditch HTTP as there is no need for it. You can also consider other protocols, like MQTT instead of TCP-IP (as there are some tutorials, like &lt;a href=&quot;https://randomnerdtutorials.com/micropython-mqtt-esp32-esp8266/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt;, on getting this running on the ESP)&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;3&quot;&gt;&#xA;&lt;li&gt;&lt;p&gt;Technically, you can have Matlab in-between, acting as a bridge, but it does not make much sense since it ads additional complexity. If this helps you in any way getting the system running, then make the prototype with Matlab and then work on eliminating Matlab form the solution. This would be a programming exercise, again, I cannot see a technical advantage for having Matlab as a bridge, but it can have a didactic motivation.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2020-01-20T14:08:55.787" LastActivityDate="2020-01-20T14:08:55.787" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20039" PostTypeId="1" AcceptedAnswerId="20062" CreationDate="2020-01-20T20:48:23.967" Score="0" ViewCount="43" Body="&lt;p&gt;I found an article that can help in my investigations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://ieeexplore.ieee.org/document/4601715&quot; rel=&quot;nofollow noreferrer&quot;&gt;Forward kinematics of spherical parallel manipulators with revolute joints&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is solved for the following system of vectors, which is shown in the figure.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/DLb5B.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/DLb5B.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The methodology described in the article allows, using simple numerical calculations on a computer, to determine the angles &lt;span class=&quot;math-container&quot;&gt;$\psi$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$\psi$&lt;/span&gt;'and &lt;span class=&quot;math-container&quot;&gt;$\phi$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$\phi$&lt;/span&gt;'.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All other angles (&lt;span class=&quot;math-container&quot;&gt;$\alpha_2$&lt;/span&gt;,&lt;span class=&quot;math-container&quot;&gt;$\alpha_3$&lt;/span&gt;,&lt;span class=&quot;math-container&quot;&gt;$\alpha_4$&lt;/span&gt;,&lt;span class=&quot;math-container&quot;&gt;$\alpha_5$&lt;/span&gt;,&lt;span class=&quot;math-container&quot;&gt;$\mu$&lt;/span&gt;) are known.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The coordinates of points &lt;span class=&quot;math-container&quot;&gt;$B_1$&lt;/span&gt;,&lt;span class=&quot;math-container&quot;&gt;$B_2$&lt;/span&gt;,&lt;span class=&quot;math-container&quot;&gt;$B_3$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$C_1$&lt;/span&gt;,&lt;span class=&quot;math-container&quot;&gt;$C_2$&lt;/span&gt;,&lt;span class=&quot;math-container&quot;&gt;$C_3$&lt;/span&gt; are also known.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I do not know how, knowing these parameters, it is possible to determine the coordinates of points &lt;span class=&quot;math-container&quot;&gt;$A_1$&lt;/span&gt;,&lt;span class=&quot;math-container&quot;&gt;$A_2$&lt;/span&gt;,&lt;span class=&quot;math-container&quot;&gt;$A_3$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the same article on page 525 there is such a sentence:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/7AZoI.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7AZoI.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I do not understand how to do this.&#xA;I ask for help.&lt;/p&gt;&#xA;" OwnerUserId="24481" LastActivityDate="2020-01-27T06:17:02.940" Title="Forward kinematics of spherical parallel manipulators with revolute joints" Tags="&lt;mobile-robot&gt;&lt;kinematics&gt;&lt;forward-kinematics&gt;&lt;robot-model&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20041" PostTypeId="1" AcceptedAnswerId="20042" CreationDate="2020-01-21T13:20:12.797" Score="0" ViewCount="56" Body="&lt;p&gt;Let's say we have a manipulator with the following DH parameter table:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/4AUjr.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4AUjr.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;and transformation matrices:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$A_{01}=&#xA;\begin{bmatrix}&#xA;\cos(q_1) &amp;amp; \sin(q_1) &amp;amp; 0 &amp;amp; 95\cos(q_1)\\&#xA;\sin(q_1) &amp;amp; -\cos(q_1) &amp;amp; 0 &amp;amp; 95\sin(q_1)\\&#xA;0 &amp;amp; 0 &amp;amp; -1 &amp;amp; 0\\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1&#xA;\end{bmatrix}$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$A_{12}=&#xA;\begin{bmatrix}&#xA;\cos(q_2) &amp;amp; 0 &amp;amp; \sin(q_2) &amp;amp; 89\cos(q_2)\\&#xA;\sin(q_2) &amp;amp; 0 &amp;amp; -\cos(q_2) &amp;amp; 89\sin(q_2)\\&#xA;0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0\\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1&#xA;\end{bmatrix}$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$A_{23}=&#xA;\begin{bmatrix}&#xA;\cos(q_3) &amp;amp; -\sin(q_3) &amp;amp; 0 &amp;amp; 147\cos(q_3)\\&#xA;\sin(q_2) &amp;amp; \cos(q_2) &amp;amp; 0 &amp;amp; 147\sin(q_2)\\&#xA;0 &amp;amp; 0 &amp;amp; 1 &amp;amp; -28\\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1&#xA;\end{bmatrix}$$&lt;/span&gt;&#xA;When multiplied, they form the absolute transformation matrix of the end-effector relative to the reference frame:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$A_{03}=A_{01}\cdot A_{12}\cdot A_{23}=$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$\begin{bmatrix}&#xA;\cos(q_3)\cos(q_1-q_2) &amp;amp; -\sin(q_3)\cos(q_1-q_2) &amp;amp; -\sin(q_1-q_2) &amp;amp; 95\cos(q_1)+28\sin(q_1-q_2)+89\cos(q_1-q_2)+147\cos(q_3)\cos(q_1-q_2)\\&#xA;\cos(q_3)\sin(q_1-q_2) &amp;amp; -\sin(q_3)\sin(q_1-q_2) &amp;amp; \cos(q_1-q_2) &amp;amp; 95\sin(q_1)-28\cos(q_1-q_2)+89\sin(q_0-q_1)+147\cos(q_3)\sin(q_1-q_2)\\&#xA;-\sin(q_3) &amp;amp; -\cos(q_3) &amp;amp; 0 &amp;amp; -147\sin(q_3)\\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1&#xA;\end{bmatrix}$$&lt;/span&gt;&#xA;We can easily read the position of the end-effector relative to the reference frame just from the fourth column of the &lt;span class=&quot;math-container&quot;&gt;$A_{03}$&lt;/span&gt; matrix:&lt;br&gt;&lt;br&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$\begin{bmatrix}&#xA;x\\&#xA;y\\&#xA;z&#xA;\end{bmatrix} = $&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$\begin{bmatrix}&#xA;95\cos(q_1)+28\sin(q_1-q_2)+89\cos(q_1-q_2)+147\cos(q_3)\cos(q_1-q_2)\\&#xA;95\sin(q_1)-28\cos(q_1-q_2)+89\sin(q_0-q_1)+147\cos(q_3)\sin(q_1-q_2)\\&#xA;-147\sin(q_3)&#xA;\end{bmatrix}$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can we read the orientation of the end-effector relative to the reference frame?&lt;/p&gt;&#xA;" OwnerUserId="24552" LastActivityDate="2020-01-21T16:31:59.913" Title="Finding orientation angles of end-effector from the DH parameter table and transformation matrices" Tags="&lt;forward-kinematics&gt;&lt;orientation&gt;&lt;geometry&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20042" PostTypeId="2" ParentId="20041" CreationDate="2020-01-21T16:31:59.913" Score="1" Body="&lt;p&gt;Your &lt;span class=&quot;math-container&quot;&gt;$A_{0.3}$&lt;/span&gt; matrix is a 4x4 transformation matrix. In a general form these 4x4 matrices can be subdivided into a 3x3 rotation and a 3x1 translation part. (The remaining parts can be used for scaling, but are not used in robotics)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$&#xA;A_{0,3}= T_{4 \times 4}=&#xA;\begin{pmatrix}&#xA;R_{3 \times 3} &amp;amp; T_{3  \times 1}\\&#xA;0_{1 \times  3} &amp;amp; 1&#xA;\end{pmatrix}&#xA;$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;span class=&quot;math-container&quot;&gt;$R_{3 \times 3}$&lt;/span&gt; part is a 3x3 &lt;a href=&quot;https://en.wikipedia.org/wiki/Rotation_matrix&quot; rel=&quot;nofollow noreferrer&quot;&gt;rotation matrix&lt;/a&gt;, also called a &lt;a href=&quot;https://en.wikipedia.org/wiki/Direction_cosine&quot; rel=&quot;nofollow noreferrer&quot;&gt;direction cosine&lt;/a&gt; matrix. Basically it is built from the coordinates of the unit vectors of the end effector coordinate system expressed in the reference coordinate system. &lt;a href=&quot;https://www.gregslabaugh.net/publications/euler.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;This&lt;/a&gt; guide describes how to convert this matrix to Euler angles.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-01-21T16:31:59.913" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20044" PostTypeId="1" CreationDate="2020-01-22T05:58:51.343" Score="1" ViewCount="89" Body="&lt;p&gt;I'm trying to rotate a lever link to gently &quot;offload&quot; a load using a servo. Here's a drawing:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/UmfpI.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/UmfpI.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here, the red is a lever, yellow pivot and black is the load. To offload, the lever needs to be turned 90 degrees. I know I could simply put a servo where the yellow pivot is, but the problem is that the servo may not have enough torque to hold the load. The load is typically around 1-2kg and the distance from the pivot is around 15cm. The servo has a stall torque of around 10kg-cm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it a good idea to drive a cable on the right hand side of the lever with a servo? Or is there a link setup that allows such a small servo to drive this lever?&lt;/p&gt;&#xA;" OwnerUserId="11489" LastActivityDate="2020-01-25T17:58:43.937" Title="Rotating a lever with a small servo" Tags="&lt;mechanism&gt;&lt;servomotor&gt;&lt;torque&gt;&lt;rotation&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20045" PostTypeId="1" AcceptedAnswerId="20055" CreationDate="2020-01-22T08:40:43.770" Score="0" ViewCount="133" Body="&lt;p&gt;I am studying the forward kinematics for robot manipulators, and I am focusing on the Denavit Hartenberg convenction for assigning frames to the various joints of the manipulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is that I am often confused, and so it is easy to make mistakes for me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have understood the concept of the D-H convenction and how it assigns frames, but when I start having more complex manipulators to analyze, for example spacial manipulators with both prismatic and revoulute joints , I start making confusion and assigning frames wrongly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, my question is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a way to assign frames being sure (or at least reducing a lot) the chances of making mistakes?&lt;/p&gt;&#xA;" OwnerUserId="21797" LastEditorUserId="37" LastEditDate="2020-01-24T14:13:54.823" LastActivityDate="2020-01-25T00:31:36.443" Title="What is a simple way to assign frames to a robot manipulator using D-H convenction?" Tags="&lt;forward-kinematics&gt;&lt;manipulator&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20046" PostTypeId="1" CreationDate="2020-01-22T20:59:43.777" Score="0" ViewCount="342" Body="&lt;p&gt;working with hardware like arduino is completely new for me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;i bought a arduino kit with &quot;generic components&quot;... and with it is have a stepper motor called &quot;28byj-48&quot; (&lt;a href=&quot;https://images.app.goo.gl/y7tDxtL9sewgb4HS7&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://images.app.goo.gl/y7tDxtL9sewgb4HS7&lt;/a&gt;)... i want to work on something that can open and close a small window. (to control humidity in a greenhouse)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;... so i figure i should add some king of cog or gear on top of the spinning part of the &quot;28byj-48&quot; and have that move something to push the window open.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;... but this is where i am stuck.... i have no idea on what to search for. i have tried the following (...and more): &quot;stepper motor gear&quot;, &quot;arduino component gear&quot;, &quot;28byj-48 attachment&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;i don't really know much about mechanical engineering for creating some kind of arm mechanism... and it is difficult to learn because i don't know the search terms for what i am looking for.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;i hope i have have been more clear above by specifying the motor name and the &quot;greenhouse window opening&quot; intention.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;please ask if more information is needed and any guidance here would be great.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;thanks in advanced.&lt;/p&gt;&#xA;" OwnerUserId="10658" LastActivityDate="2021-04-15T05:27:49.840" Title="28BYJ-48 Gear/Cog Attachment Guidance" Tags="&lt;arduino&gt;&lt;stepper-motor&gt;&lt;gearing&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20048" PostTypeId="1" AcceptedAnswerId="20049" CreationDate="2020-01-23T23:20:10.070" Score="0" ViewCount="76" Body="&lt;p&gt;We just bought a &lt;a href=&quot;https://www.shopbottools.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;ShopBot&lt;/a&gt; for our Workshop and set it up ourselves. The ShopBot Software crashed every time we manually moved the gantry past its magnetic limit switches. Sometimes the software also crashed during a standard X-Y-Zeroing procedure. The machine has both limit switches and hard-stops installed that prevent the gantry from rolling off the rails after passing the limit switch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Have any of you experienced a similar problem? How can we fix this?&lt;/p&gt;&#xA;" OwnerUserId="24585" LastEditorUserId="17029" LastEditDate="2020-01-24T14:15:59.203" LastActivityDate="2020-01-24T14:15:59.203" Title="ShopBot router software crashes after machine moves past limit switch" Tags="&lt;software&gt;&lt;cnc&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20049" PostTypeId="2" ParentId="20048" CreationDate="2020-01-23T23:28:58.377" Score="1" Body="&lt;p&gt;We have a ShopBot at our Maker Space and have had a similar issue. In short, adjust the distance between your limit-switch trigger screws and your hard-stop. If your hard-stop is too far away from your limit-switch trigger screw and allows the magnetic limit-switch to disengage i.e. turn off after passing the limit switch the software encounters an unexpected state that is currently not properly handled. There should never be a scenario where your shop bot is outside of its limits and the limit-switch is not triggered.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can simply check if this is the problem by manually moving the gantry to its extremes and check if the red light on the limit switch turns off when hitting the switch and if your distance is too large on again after passing the switch before hitting the hard-stop.&lt;/p&gt;&#xA;" OwnerUserId="24586" LastActivityDate="2020-01-23T23:28:58.377" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20050" PostTypeId="1" CreationDate="2020-01-24T04:23:11.540" Score="0" ViewCount="106" Body="&lt;p&gt;I have a project that requires an extremely high rotation rate motor, and I have a 2.5&quot; HDD that I'd like to take the motor out of. I chose a 2.5&quot; HDD for lightweighting reasons and for the drive platter size. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Upon disassembly, I discovered that the motor was mounted with a press fit or epoxy. The method of mounting was something I had neglected to consider, but fortunately I didn't purchase a &lt;em&gt;new&lt;/em&gt; HDD for this experiment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have access to a milling machine and can cut the motor out, along with a built-in mounting bracket, but this would be tedious and I don't really want to do this. &lt;strong&gt;Does anyone know whether it is possible to extract a usable motor of this type from the HDD casing? If it is possible, how?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively, if anyone knows where I can find pre-balanced motor/disk combinations that can hit 10+ kRPM without breaking the bank, I'd be extremely interested in learning where such things exist.&lt;/p&gt;&#xA;" OwnerUserId="24587" LastActivityDate="2020-01-24T04:23:11.540" Title="Removing the motor from a 2.5&quot; HDD for controls project" Tags="&lt;motor&gt;&lt;stepper-motor&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20053" PostTypeId="2" ParentId="20028" CreationDate="2020-01-24T08:27:02.290" Score="2" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Is SLAM in general used only for first time mapping within an&#xA;  environment?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes, SLAM is used only once to build map of the environment before navigation operation. Also, In case of significant change in the environment.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If there is no mapping at all, can bots be trained to move randomly&#xA;  and turn back or around only if there is an obstacle or wall. This&#xA;  wouldn't require mapping, right? So is it right to say, bots can be&#xA;  moved either by mapping or without mapping, depending on the need.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Maps are required for &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Localization (to know the current location of Robot). One cam localize robot without maps using visual tag or some other markers to make robot identify it location. &lt;/li&gt;&#xA;&lt;li&gt;Path planning (given destination, returns obstacle free efficient path). &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Without map, it is possible to move the robot randomly and avoid obstacles. If you are using laser, you don't need learning, its easy to avoid obstacles based on sensor data.&lt;/p&gt;&#xA;" OwnerUserId="714" LastActivityDate="2020-01-24T08:27:02.290" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20054" PostTypeId="2" ParentId="19792" CreationDate="2020-01-24T15:40:41.600" Score="0" Body="&lt;p&gt;To quote &lt;a href=&quot;https://learn.adafruit.com/adafruit-motor-shield-v2-for-arduino/faq#faq-2861887&quot; rel=&quot;nofollow noreferrer&quot;&gt;Adafruit&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;You cannot power motors from a 9V battery. You must use AA batteries or a lead acid battery for motors.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You can grab a decent SLA (Sealed Lead Acid) battery by grabbing an alarm battery from any battery store for a relatively decent price (or an online retailer). Alternatively you could get an AA battery holder that lets you put several AA batteries in series.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason &lt;em&gt;why&lt;/em&gt; a 9V battery won't work is because 9V batteries are chemically incapable of providing the inrush current required to start a motor.&#xA;The 9 volt battery &lt;em&gt;can&lt;/em&gt; be used to power the arduino through the &lt;a href=&quot;https://learn.adafruit.com/ladyadas-learn-arduino-lesson-number-0/power-jack-and-supply&quot; rel=&quot;nofollow noreferrer&quot;&gt;power jack&lt;/a&gt; since it requires little current to function.&lt;/p&gt;&#xA;" OwnerUserId="15947" LastEditorUserId="23597" LastEditDate="2020-01-26T21:38:15.910" LastActivityDate="2020-01-26T21:38:15.910" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20055" PostTypeId="2" ParentId="20045" CreationDate="2020-01-25T00:31:36.443" Score="1" Body="&lt;p&gt;First of all, I have to share with you this link:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;https://www.youtube.com/watch?v=rA9tm0gTln8&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I like to think of a few tricks with D-H params.&#xA;First, the Z-axis is the axis of rotation/translation.&#xA;Then, theta rotates along the Z-axis to align with the start of the next D-H frame.&#xA;You then translate along the Z axis such that the point is tangent to the next frame's Z-X plane.&#xA;Then, the A term moves along the CURRENT X-axis to the start of the next frame.&#xA;Finally, you rotate about the X-Axis to align the Z-axis with the rotation/translation axis of the next frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Summary:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Rotate about Z-axis (theta)&lt;/li&gt;&#xA;&lt;li&gt;Translate along Z-axis  (z)&lt;/li&gt;&#xA;&lt;li&gt;Translate along X-axis (a)&lt;/li&gt;&#xA;&lt;li&gt;Reorient Z-Axis about X-axis (alpha)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;h1&gt;Note&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;The starting X-axis can be anywhere. You will want to choose a convenient orientation such that the math is easy later. If there is a world frame you are trying to align to, that can help you think of a start. Remember, you do NOT use the Y-axis for anything.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does this make sense?&lt;/p&gt;&#xA;" OwnerUserId="23597" LastActivityDate="2020-01-25T00:31:36.443" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20057" PostTypeId="1" AcceptedAnswerId="20066" CreationDate="2020-01-25T10:53:26.210" Score="1" ViewCount="75" Body="&lt;p&gt;I am studying robotic kinematics , and given the following manipulator with its D-H frames assigned:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/xMP9Q.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xMP9Q.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have to find the rotation matrix &lt;span class=&quot;math-container&quot;&gt;$R_{e}^{2}$&lt;/span&gt;, which is the rotation matrix of frame &lt;span class=&quot;math-container&quot;&gt;$e$&lt;/span&gt; with respect to frame &lt;span class=&quot;math-container&quot;&gt;$2$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that this matrix is :&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\begin{pmatrix}&#xA;0 &amp;amp;sin\beta   &amp;amp; cos\beta \\ &#xA; 0&amp;amp; cos\beta &amp;amp; -sin\beta\\ &#xA;-1 &amp;amp;0  &amp;amp;0 &#xA;\end{pmatrix}$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;but I cannot understand why.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can somebody please help me understand how does this reotation matrix comes out?&lt;/p&gt;&#xA;" OwnerUserId="21797" LastEditorUserId="21797" LastEditDate="2020-01-25T13:20:08.553" LastActivityDate="2020-01-28T14:59:45.013" Title="Problem defining rotation matrix" Tags="&lt;kinematics&gt;&lt;manipulator&gt;&lt;orientation&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20058" PostTypeId="1" CreationDate="2020-01-25T17:21:56.827" Score="0" ViewCount="44" Body="&lt;p&gt;We are using Hector slam(2-D Mapping) for our drone in which we are facing some problems &lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) as the orientation(axis) of the lidar changes the orientation of map changes&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) as the plane of the lidar changes the map order distorts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please give tips for these problems&lt;/p&gt;&#xA;" OwnerUserId="24602" LastActivityDate="2021-02-19T02:06:35.573" Title="Hector_Slam orientation probelm for drone" Tags="&lt;slam&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20059" PostTypeId="2" ParentId="20044" CreationDate="2020-01-25T17:46:37.333" Score="1" Body="&lt;p&gt;From your numbers, I believe you need something that can support at least &lt;code&gt;~30kg-cm&lt;/code&gt; torque at the load, unless you make other changes.  A few options:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Counterweight&lt;/strong&gt; - As @jsotla commented, a counterbalance might be added to the opposite side of the load on the lever.  If the servo attachment point or lever can not support that extra weight though, then perhaps it could make sense to use a remote cable or lever-activation mechanism to rotate the lever from the servo.  The servo would operate the cable/lever-activation mechanism to rotate the lever around the lever attachment point/pivot.  This is partly dependent on how much rotation your servo can support, if you need to be able to apply force in both rotation directions, etc.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Gear Reduction&lt;/strong&gt; - Another option might be to use a gear mechanism, such that extra rotation in the servo is translated into additional torque.  As one example, ServoCity makes &lt;a href=&quot;https://www.servocity.com/cm-400-180-servo-gearbox&quot; rel=&quot;nofollow noreferrer&quot;&gt;interesting gear boxes&lt;/a&gt; for RC type servos. Or, a custom &lt;a href=&quot;https://www.servocity.com/motion-components/rotary-motion/gears/worm-gears&quot; rel=&quot;nofollow noreferrer&quot;&gt;worm gear&lt;/a&gt; based solution might be particularly useful due to the special properties of worm gears ...depending on your project details.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pulleys&lt;/strong&gt; - Similar to gears, a pulley system would also work. Again, depends on the rotation capabilities of your servo, and this would likely be more complex than other solutions.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In summary, you will need to find some way of offsetting the load weight, or else transforming additional movement from your servo into torque.&lt;/p&gt;&#xA;" OwnerUserId="167" LastEditorUserId="167" LastEditDate="2020-01-25T17:58:43.937" LastActivityDate="2020-01-25T17:58:43.937" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20060" PostTypeId="2" ParentId="20058" CreationDate="2020-01-25T22:04:50.033" Score="0" Body="&lt;p&gt;Disclaimer:&#xA;I have not used the Hector libraries, but I have heard of them in the past.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Have you looked at homogeneous transformation matrices? Assuming that you only have a change in Yaw to keep track of, you can use the Z-axis rotation matrix to rotate the point to the correct location.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[ cos(theta)  -sin(theta)   0  0 ]&#xA;[ sin(theta)   cos(theta)   0  0 ]&#xA;[      0           0        1  0 ]&#xA;[      0           0        0  1 ]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Multiply this matrix with the 3D point vector&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[ x ]&#xA;[ y ]&#xA;[ z ]&#xA;[ 1 ]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And then you can rectify for the point for lidar Z-axis rotation.&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;You can take the RPY values from an IMU and then check to see if the &lt;code&gt;R&lt;/code&gt; and &lt;code&gt;P&lt;/code&gt; values pass a threshold. If the magnitudes of those &lt;code&gt;R&lt;/code&gt; and &lt;code&gt;P&lt;/code&gt; values are too large, then you can simply not count that point in the reading. You will be dropping data points, but that isn't necessarily a bad thing.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The smarter way (IMHO) to use the data is to use &lt;code&gt;3D SLAM&lt;/code&gt; to create a full-on point cloud. That is probably too computationally expensive, but I think these methods are good enough for a start, and it looks like you want a simpler methods anyways.&lt;/p&gt;&#xA;" OwnerUserId="23597" LastActivityDate="2020-01-25T22:04:50.033" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20061" PostTypeId="1" CreationDate="2020-01-26T07:19:19.867" Score="0" ViewCount="34" Body="&lt;p&gt;I need many knots tied repetitively and consistently in a string. I have been trying to make something which ties knots for me in a consistent manner. I've got a project which requires a few hundred strings, each with knots tied at regular intervals. I'm designing my own mechanism, but if another mechanism of the same sort already exists, I can draw a lot of inspiration from it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The most important parameters are:.&lt;br&gt;&#xA;The knots must not vary in size/line use by more than a millimeter.&lt;br&gt;&#xA;The knots must be square knots, or they can be simply looped to melt the line back on itself.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What kind of robots or mechanisms currently exist that can tie knots according to the parameters above? Do any such mechanisms exist?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are some examples of what I'm looking for the mechanism to do.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/yXyC3.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/yXyC3.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/Uyk6F.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Uyk6F.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="17194" LastEditorUserId="17194" LastEditDate="2020-01-26T23:18:07.080" LastActivityDate="2020-01-26T23:18:07.080" Title="What sort of robot would one use to tie precise knots in a string?" Tags="&lt;mechanism&gt;&lt;research&gt;" AnswerCount="0" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="20062" PostTypeId="2" ParentId="20039" CreationDate="2020-01-27T06:17:02.940" Score="0" Body="&lt;p&gt;Vectors &lt;span class=&quot;math-container&quot;&gt;$v_i$&lt;/span&gt; are restored very simply. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, vector &lt;span class=&quot;math-container&quot;&gt;$v_1$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First we need to rotate the &lt;span class=&quot;math-container&quot;&gt;$C_2$&lt;/span&gt; vector by the angle &lt;span class=&quot;math-container&quot;&gt;$\phi_1$&lt;/span&gt; around the &lt;span class=&quot;math-container&quot;&gt;$C_1$&lt;/span&gt; vector. This way we get the intermediate vector &lt;span class=&quot;math-container&quot;&gt;$v*_1$&lt;/span&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And then rotate this vector by the angle &lt;span class=&quot;math-container&quot;&gt;$(\alpha_2 - C_1 \cdot C_2)$&lt;/span&gt; around axis of rotation &lt;span class=&quot;math-container&quot;&gt;$(v*_1 \times C_1)$&lt;/span&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Vectors calculated in this way are similar to the calculated data given in the publication.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the remaining vectors, the principle is similar.&lt;/p&gt;&#xA;" OwnerUserId="24481" LastActivityDate="2020-01-27T06:17:02.940" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20063" PostTypeId="1" AcceptedAnswerId="20095" CreationDate="2020-01-27T10:45:11.987" Score="2" ViewCount="41" Body="&lt;p&gt;I'm designing a bot for a TDP(Team Documentation Profile) for a competition which is supposed to throw a rugby ball. Since the deadline is closing in soon, I can't test things out myself.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;After going through multiple ideas, I settled on using &lt;strong&gt;two wheels throwing mechanism&lt;/strong&gt;.&lt;br&gt;&#xA;&lt;a href=&quot;https://youtu.be/hMFzb7GVd18?t=102&quot; rel=&quot;nofollow noreferrer&quot;&gt;The mechanism&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can I implement the above-shown mechanism without using rotary encoders for the two motors?&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Basically I just want to ask if the two BLDC motors have any difference in angular velocity even when powered with the same voltage.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="24550" LastEditorUserId="24550" LastEditDate="2020-01-29T01:18:20.773" LastActivityDate="2020-01-30T21:38:01.310" Title="Are rotary encoders necessary for ball shooting mechanism?" Tags="&lt;motor&gt;&lt;wheeled-robot&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20064" PostTypeId="1" CreationDate="2020-01-27T11:04:59.277" Score="1" ViewCount="39" Body="&lt;p&gt;I'm making a robot which is going to have a holonomic mecanum drive. The doubt that I'm having is that should I use rotary encoders for doing so.&lt;br&gt;&#xA;The bot will be manually controlled so would it be possible for me to ignore the rotary encoders?&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Clarification&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The thing is that I need to decide whether or not I'll be using motors with rotary encoders in my robot.&lt;br&gt;&#xA;&lt;strong&gt;What I'm thinking:&lt;/strong&gt;&lt;br&gt;&#xA;  Is it really necessary for me to use rotary encoders for implementing holonomic drive? I know that holonomic motion is attained through the appropriate vector sum of velocities generated by the motors. But since the bot is going to be manually controlled, can't I ignore the accuracy of the motion(by not using rotary encoders) as the controlling human &lt;strong&gt;might&lt;/strong&gt; himself be managing those errors simply by seeing the bot's motion.&lt;/p&gt;&#xA;" OwnerUserId="24550" LastEditorUserId="24550" LastEditDate="2020-01-29T01:11:31.677" LastActivityDate="2020-01-29T09:07:18.093" Title="Are rotary encoders necessary for holonomic mecanum drive?" Tags="&lt;mobile-robot&gt;&lt;motor&gt;" AnswerCount="0" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="20065" PostTypeId="1" CreationDate="2020-01-27T17:14:49.857" Score="0" ViewCount="94" Body="&lt;p&gt;Consider a cable-driven flexible manipulator which has 3 cables. Consider the 3 cables to be actuated by 3 motors. Assume that by pulling the three cables in different configurations, we can span the entire 3D space in the workspace of the manipulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The manipulator is made up of a single flexible backbone and has disks mounted on it as shown in the figure.. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I read on some sources as the manipulator is flexible it has infinite degrees of freedom. Is that correct?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;How to define the degrees of freedom of the manipulator in task space and in configuration space?&lt;/strong&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/kNz7W.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kNz7W.png&quot; alt=&quot;Here we can see 3 blue cables actuating section 2 and 3 yellow cable actuating section 1&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="24611" LastActivityDate="2021-05-25T04:01:45.240" Title="How to define the degrees of freedom of a flexible manipulator?" Tags="&lt;manipulator&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="20066" PostTypeId="2" ParentId="20057" CreationDate="2020-01-27T22:53:21.490" Score="1" Body="&lt;p&gt;It looks like both frames are attached to the end effector at point P, and are offset by a constant angle &lt;span class=&quot;math-container&quot;&gt;$\beta$&lt;/span&gt;. So you don't really have to consider the D-H parameters to answer this question - just do a simple rotation matrix evaluation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So how are the frames, &lt;span class=&quot;math-container&quot;&gt;$F_2$&lt;/span&gt; = &lt;span class=&quot;math-container&quot;&gt;$[\hat{x_2} \; \hat{y_2} \; \hat{z_2}]^T$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$F_e$&lt;/span&gt; = &lt;span class=&quot;math-container&quot;&gt;$[\hat{x_e} \; \hat{y_e} \; \hat{z_e}]^T$&lt;/span&gt;, related? Well, from the diagram you have above, we have the following relationships:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$\hat{x_2} = \cos\beta \hat{y_e} + sin\beta \hat{z_e}$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$\hat{y_2} = \cos\beta \hat{y_e} - sin\beta \hat{z_e}$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$\hat{z_2} = -\hat{x_e}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that &lt;span class=&quot;math-container&quot;&gt;$\hat{x_e}$&lt;/span&gt; points into the page and &lt;span class=&quot;math-container&quot;&gt;$\hat{z_2}$&lt;/span&gt; points out of the page.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then do you see how your rotation matrix above falls out of that? Clearly,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$F_2 = R_e^2F_e$$&lt;/span&gt;&lt;/p&gt;&#xA;" OwnerUserId="24613" LastEditorUserId="24613" LastEditDate="2020-01-28T04:10:20.610" LastActivityDate="2020-01-28T04:10:20.610" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20067" PostTypeId="1" AcceptedAnswerId="20072" CreationDate="2020-01-28T12:05:03.027" Score="2" ViewCount="106" Body="&lt;p&gt;I am trying to understand some of the basics of the Kalman filter. The problem I am working on is quite complex, but I have spent some time trying to simplify the problem with an example.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, let's say we want to track the position &lt;span class=&quot;math-container&quot;&gt;$p$&lt;/span&gt; of a car, and the car can move left or right, at velocity &lt;span class=&quot;math-container&quot;&gt;$v$&lt;/span&gt;, in a 1-dimensional world. Noisy measurements of the car's position are being made by an external camera:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/nHtDN.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/nHtDN.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am struggling to understand how to formulate a Kalman filter for this problem. What I don't understand, is whether the velocity should be included in the state or the control input, given that it is something we are actually controlling.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To show my thinking, I have created two potential implementations of the Kalman filter below. I would like to know which of these are correct, or most appropriate, and why.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;1) In the first method, there is no control input. The state changes by inspecting other elements of the state.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The state at time &lt;span class=&quot;math-container&quot;&gt;$t$&lt;/span&gt; contains position &lt;span class=&quot;math-container&quot;&gt;$p_t$&lt;/span&gt; and velocity &lt;span class=&quot;math-container&quot;&gt;$v_t$&lt;/span&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$x_t = \begin{bmatrix}p_t\\v_t\end{bmatrix}$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The prediction stage only includes the state transition model &lt;span class=&quot;math-container&quot;&gt;$A$&lt;/span&gt; and noise &lt;span class=&quot;math-container&quot;&gt;$\epsilon$&lt;/span&gt;; there is no control input:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$x_{t+1} = Ax_{t} + \epsilon$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The state transition model says that the car's position changes based on the velocity in the state, by calculating the velocity multiplied by the timestep &lt;span class=&quot;math-container&quot;&gt;$\Delta t$&lt;/span&gt;. And the velocity remains the same:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$A = \begin{bmatrix}1&amp;amp;\Delta t\\0&amp;amp;1\end{bmatrix}$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We then have an observation &lt;span class=&quot;math-container&quot;&gt;$z_t$&lt;/span&gt; of the position, which is dependent only on the position and noise &lt;span class=&quot;math-container&quot;&gt;$\delta$&lt;/span&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$z_t = Cx_{t} + \delta$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The observation model is just identity, i.e. the observation is a direction observation of the position:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$C = \begin{bmatrix}1 &amp;amp; 0\end{bmatrix}$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;2) In the second method, we introduce a control input. The state changes by inspecting elements in both the state and the control input.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This time, the state only contains the position:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$x_t = \begin{bmatrix}p_t\end{bmatrix}$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And the state change is based on the state transition matrix, and the control input matrix.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$x_{t+1} = Ax_t + Bv_t$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This time, the state transition matrix is just identity, since we no longer include velocity and the dynamics is only due to the control input: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$A = \begin{bmatrix}1\end{bmatrix}$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And the control input matrix simply multiplies the velocity by the timestep &lt;span class=&quot;math-container&quot;&gt;$\Delta t$&lt;/span&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$B = \begin{bmatrix}\Delta t\end{bmatrix}$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And we know the velocity &lt;span class=&quot;math-container&quot;&gt;$v_t$&lt;/span&gt; because this is the command we are controlling the car with.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And we have the same observation model as before, but this becomes a 1-by-1 matrix rather than a 1-by-2 matrix, since we have dropped the velocity component from the state vector:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$z_t = Cx_{t} + \delta$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$C = \begin{bmatrix}1\end{bmatrix}$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;I don't really understand which is the most suitable method.  Method 2 seems to be better than method 1, because we are directly using the velocity, rather than estimating it. And since we actually control the velocity, it makes sense to actually use it in the estimation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But would method 1 even work? Would it be able to update its estimate of the velocity, even though the velocity is never measured or used in the dynamics model? Or can the velocity component of the state only change beyond its initial estimate if it is directly measured?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If anybody is able to help me with this, I would really appreciate it. Thank you!&lt;/p&gt;&#xA;" OwnerUserId="8880" LastActivityDate="2020-01-28T17:05:13.213" Title="Where to include velocity in a Kalman filter" Tags="&lt;localization&gt;&lt;kalman-filter&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20068" PostTypeId="2" ParentId="20057" CreationDate="2020-01-28T12:35:17.097" Score="1" Body="&lt;p&gt;A rotation matrix is also called a director cosine matrix. The elements of the rotation matrix are the cosines of the unit vectors of two coordinate systems involved. You can find a more generic explanation &lt;a href=&quot;http://www.starlino.com/dcm_tutorial.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let &lt;span class=&quot;math-container&quot;&gt;$\angle (e_{2,i}, e_{e,j})$&lt;/span&gt; denote the angle between the angle between unit vector on the i axis of the fixed reference frame and the unit vector of the j axis of the rotated frame. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;R_{2e} = \\&#xA;\begin{pmatrix}&#xA;cos(\angle (e_{2,x}, e_{e,x},)) &amp;amp; cos(\angle (e_{2,x}, e_{e,y},)) &amp;amp; cos(\angle (e_{2,x}, e_{e,z}))\\&#xA;cos(\angle ( e_{2,y}, e_{e,x},))) &amp;amp; cos(\angle (e_{2,y}, e_{e,y},)) &amp;amp; cos(\angle (e_{2,y}, e_{e,z}))\\&#xA;cos(\angle (e_{2,z}, e_{e,x},)) &amp;amp; cos(\angle (e_{2,z}, e_{e,y},)) &amp;amp; cos(\angle (e_{2,z}, e_{e,z}))&#xA;\end{pmatrix} &#xA;= &#xA;\begin{pmatrix}&#xA;0 &amp;amp;sin\beta   &amp;amp; cos\beta \\ &#xA; 0&amp;amp; cos\beta &amp;amp; -sin\beta\\ &#xA;-1 &amp;amp;0  &amp;amp;0 &#xA;\end{pmatrix}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your case we identify that:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$cos(\angle (e_{2,x}, e_{e,x})) = 0$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This translates to a &lt;span class=&quot;math-container&quot;&gt;$90^\circ $&lt;/span&gt; angle between the unit vectors of the two x axes. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$cos(\angle (e_{2,y}, e_{e,x})) = 0$&lt;/span&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This translates to a &lt;span class=&quot;math-container&quot;&gt;$90 \deg $&lt;/span&gt; angle between the unit vectors of the y axes of the reference frame and the x axis of the rotated frame. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$cos(\angle (e_{2,z}, e_{e,x})) = -1$&lt;/span&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This translates to a &lt;span class=&quot;math-container&quot;&gt;$180^\circ $&lt;/span&gt; angle between the unit vectors of the z axes of the reference frame and the x axis of the rotated frame. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similarly for all other elements of the matrix, but here is the most interesting ones:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$cos(\angle (e_{2,y}, e_{e,y},)) = cos(\beta)$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This translates to a &lt;span class=&quot;math-container&quot;&gt;$\beta^\circ $&lt;/span&gt; angle between the unit vectors of the y axes of the reference frame and the y axis of the rotated frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$cos(\angle (e_{2,z}, e_{e,x})) = cos(\beta)$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This translates to a &lt;span class=&quot;math-container&quot;&gt;$\beta^\circ $&lt;/span&gt; angle between the unit vectors of the z axes of the reference frame and the x axis of the rotated frame. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$cos(\angle ( (e_{2,y}, e_{e,z}) ) = -sin(\beta)$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using the &lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_trigonometric_identities#Shifts_and_periodicity&quot; rel=&quot;nofollow noreferrer&quot;&gt;quarter period phase shift property&lt;/a&gt; &lt;span class=&quot;math-container&quot;&gt;$cos(x + \frac{\pi}{2}) = -sin(x)$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$cos(\angle ((e_{2,y}, e_{e,z})) = cos(\beta + \frac{pi}{2})$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This translates to a &lt;span class=&quot;math-container&quot;&gt;$\beta + 90^\circ $&lt;/span&gt; angle between the unit vectors of the y axes of the reference frame and the z axis of the rotated frame. &lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2020-01-28T14:59:45.013" LastActivityDate="2020-01-28T14:59:45.013" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20069" PostTypeId="1" CreationDate="2020-01-28T13:53:57.643" Score="2" ViewCount="754" Body="&lt;p&gt;Suppose a ROS node receives new batch of data on a topic while the previous batch is still being processed by callback. Will ROS wait for its completion or will it spin a new thread and run both at the same time?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm asking because if they are sequential there is no need for a lock, but if they're not I'd need to use locking inside the callbacks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I looked up the documentation for the rospy.Subcriber class, but it has no mention of this.&lt;/p&gt;&#xA;" OwnerUserId="24618" LastActivityDate="2021-03-12T09:47:25.003" Title="Are Rospy subscriber callbacks executed sequentially for a single topic?" Tags="&lt;ros&gt;&lt;python&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20070" PostTypeId="1" CreationDate="2020-01-28T15:39:42.607" Score="0" ViewCount="92" Body="&lt;p&gt;I have an Arc welding RAPID program with many seams. One of them looks like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;ArcLStart W007_On, vtoArc, sm01, s_12, fine, R1_tWeld\WObj:=R1_wFix;&#xA;ArcL W007_1, vWeld, sm01, s_8, z1, R1_tWeld\WObj:=R1_wFix;&#xA;ArcC W007_2, W007_3, Vweld, sm01, s_8, z1, R1_tWeld\WObj:=R1_wFix;&#xA;ArcL W007_4, vWeld, sm01, s_8, z10, R1_tWeld\WObj:=R1_wFix;&#xA;ArcL W007_5, vWeld, sm01, s_8, z5, R1_tWeld\WObj:=R1_wFix;&#xA;ArcLEnd W007_Off, vWeld, sm01, s_8, z1, R1_tWeld\WObj:=R1_wFix;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;What I want to do is measure/calculate the seam length programatically. Calculation can take place during normal program execution or in specialised routine (doesn't matter). &lt;strong&gt;How can I do that in RAPID?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="24619" LastEditorUserId="24619" LastEditDate="2021-02-14T19:50:36.070" LastActivityDate="2021-03-22T21:00:25.047" Title="ABB RAPID - calculating seam length" Tags="&lt;industrial-robot&gt;&lt;movement&gt;&lt;programming-languages&gt;" AnswerCount="3" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="20071" PostTypeId="1" CreationDate="2020-01-28T11:00:16.477" Score="0" ViewCount="21" Body="&lt;p&gt;I try to make a ROV for some undergraduate science project.I planing to use  raspberrypi for control and image processing but ı will use ethernet cable for cominication. But every source ı look they say I need to use a tether interface board(fathom series mostly) my question is do I really need a tether interface cause I dont actually know why ı need a tether interface while ı can simply connect my raspberrypi to my computer with a ethernet cable.&lt;/p&gt;&#xA;" OwnerDisplayName="Umut" LastActivityDate="2020-01-28T16:33:01.213" Title="Do I need Fantom Tether Interface for ROV" Tags="&lt;communication&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20072" PostTypeId="2" ParentId="20067" CreationDate="2020-01-28T17:05:13.213" Score="1" Body="&lt;p&gt;I have split this into two main questions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&quot;whether the velocity should be included in the state or the control input&quot;&lt;/li&gt;&#xA;&lt;li&gt;&quot;would method 1 even work?&quot;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2&gt;Question 1&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The answer to question 1 is what information do you have available and what are you attempting to estimate? If you have measurement of the velocity or if estimating the velocity is not necessary, then &lt;em&gt;Method 2&lt;/em&gt; is probably what you are looking for.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you require velocity estimates, from the KF, then the velocity will need to be part of the state vector.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Question 2&lt;/h2&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;will it work?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So the problem here is inertial navigation, more or less. In a basic sense one would take acceleration measurements, integrate twice, and compare with the position measurements.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Method 2&lt;/em&gt; is more or less inertial navigation applied with velocity measurements instead of acceleration. Therefore this method should work fine.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Method 1&lt;/em&gt; on the other hand has assumed the following model for the velocity dynamics:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;v_{k+1} = v_{k}&#xA;$$&lt;/span&gt;&#xA;i.e. assumed that the velocity is constant. The problem here is the filtering performance is dependent on the validity of this model and the initial state estimate. I don't know your context but I imagine near constant velocity is probably not likely.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In addition it is slightly strange that there is no input at all. It kind of implies that this model is purely a zero-input response, i.e some decay from initial state for an asymptotically stable system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the velocity estimate is desired one would maybe expect to see something along the lines of&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{{x}} = \left[\matrix{0 &amp;amp;1\cr 0 &amp;amp;0}\right] + \left[\matrix{0 \cr 1}\right]u&#xA;$$&lt;/span&gt;&#xA;where &lt;span class=&quot;math-container&quot;&gt;$u$&lt;/span&gt; is the acceleration from an accelerometer. This way a model for the velocity dynamics is just simply&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{v} = a&#xA;$$&lt;/span&gt;&#xA;This is a very simplified version of the mechanization equation for an inertial navigation system, i.e. 1 dimension and no noise.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;TLDR: Where you include velocity depends on what information (read: measurements) you have available and what you want the Kalman filter to estimate.&lt;/p&gt;&#xA;" OwnerUserId="23193" LastActivityDate="2020-01-28T17:05:13.213" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="20075" PostTypeId="1" AcceptedAnswerId="20076" CreationDate="2020-01-29T04:32:20.790" Score="0" ViewCount="163" Body="&lt;p&gt;I want to track an object in a global Cartesian frame, denoted &lt;span class=&quot;math-container&quot;&gt;$G$&lt;/span&gt;. The object has a local frame, denoted &lt;span class=&quot;math-container&quot;&gt;$L$&lt;/span&gt;. The object is controlled by a velocity command &lt;span class=&quot;math-container&quot;&gt;$v$&lt;/span&gt;, defined in its local frame. This &quot;world&quot; is a 2D space as below:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/RXWp1.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/RXWp1.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this world, the object can only translate (no rotation), and the local axes and global axes are aligned. Therefore, I can track the object using a regular Kalman filter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I define the state as &lt;span class=&quot;math-container&quot;&gt;$x_t = \begin{bmatrix}x_t\\y_t\end{bmatrix}$&lt;/span&gt; where &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt; are the positions in the global frame. The control velocity is defined as &lt;span class=&quot;math-container&quot;&gt;$v_t = \begin{bmatrix}a_t\\b_t\end{bmatrix}$&lt;/span&gt;, where &lt;span class=&quot;math-container&quot;&gt;$a$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$b$&lt;/span&gt; are the local velocities defined in the local frame. The state transition matrix is defined as &lt;span class=&quot;math-container&quot;&gt;$A = \begin{bmatrix}1&amp;amp;0\\0&amp;amp;1\end{bmatrix}$&lt;/span&gt; and the input matrix is defined as &lt;span class=&quot;math-container&quot;&gt;$B = \begin{bmatrix}\Delta t&amp;amp;0\\0&amp;amp;\Delta t\end{bmatrix}$&lt;/span&gt;, where &lt;span class=&quot;math-container&quot;&gt;$\Delta t$&lt;/span&gt; is the time step.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So overall, my prediction stage of the Kalman filter is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\begin{bmatrix}x_{t+1}\\y_{t+1}\end{bmatrix} = \begin{bmatrix}1&amp;amp;0\\0&amp;amp;1\end{bmatrix} \begin{bmatrix}x_t\\y_t\end{bmatrix} + \begin{bmatrix}\Delta t&amp;amp;0\\0&amp;amp;\Delta t\end{bmatrix} \begin{bmatrix}a_t\\b_t\end{bmatrix}$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;But now I want to allow the object to rotate, about the axis going into the screen. So, my &quot;world&quot; now looks like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/21qHs.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/21qHs.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And now, the axes of the two frames are not aligned, so I cannot use the state transition model I defined above. So, to account for this in the Kalman filter, I do the following.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I take the current estimate of the object's pose, and create a transformation matrix to represent this frame. Let us denote this &lt;span class=&quot;math-container&quot;&gt;$T_{GL}$&lt;/span&gt;, which transforms a vector from the object's local frame to the global frame. Then, I take the velocity vector &lt;span class=&quot;math-container&quot;&gt;$v_L$&lt;/span&gt;, which is currently defined in the local frame, and transform to the global frame as follows: &lt;span class=&quot;math-container&quot;&gt;$v_G = T_{GL} v_L$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once this is done, I have the control velocity defined in the global frame, instead of the local frame. And so then I just use this velocity in the Kalman filter defined in the first example above. My intuition is that once the velocity is transformed to the global frame, I can use the simple state transformation model defined above, because the axes of the velocity and the global frame are now aligned.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I am rather confused now. It seems like I have effectively implemented the Extended Kalman Filter (EKF), because the relationship between the local velocity and the state update is actually non-linear, due to the rotation. The EKF involves linearising around the current estimate, and I am effectively doing this by computing the transformation matrix for the current estimation of the object's pose. However, when I read about the EKF, the maths is much more complex. It involves Taylor series expansions and partial derivatives, whereas all I am doing is transforming a vector from the estimated local frame to the global frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Have I actually implemented an EKF, unknowingly? Or is there something about my implementation that is fundamentally wrong?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you!&lt;/p&gt;&#xA;" OwnerUserId="8880" LastEditorUserId="8880" LastEditDate="2020-01-29T04:37:22.423" LastActivityDate="2020-01-29T07:01:36.227" Title="Transforming between a local and global frame for a Kalman filter" Tags="&lt;kinematics&gt;&lt;kalman-filter&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20076" PostTypeId="2" ParentId="20075" CreationDate="2020-01-29T07:01:36.227" Score="1" Body="&lt;p&gt;You have not accidentally implemented an Extended Kalman filter. All you are essentially doing is preprocessing the data with a known quantity &lt;span class=&quot;math-container&quot;&gt;$T_{GL}$&lt;/span&gt; into your global frame. You therefore removed any indication of rotation and therefore your math is still happening in the global frame which allows you to continue to use your Kalman filter implementation.&lt;/p&gt;&#xA;" OwnerUserId="15265" LastActivityDate="2020-01-29T07:01:36.227" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="20077" PostTypeId="1" AcceptedAnswerId="20079" CreationDate="2020-01-29T09:40:51.740" Score="1" ViewCount="38" Body="&lt;p&gt;I am trying to implement a functioning SLAM system for an autonomous surface vessel (ASV). I don't have any direct experience with SLAM, and I am therefore researching the topic before I try to implement anything.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am trying to figure out, if a maritime environment will make this job much harder than if our vessel was in a more static environment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From my readings, I am getting the impression that you need to have a fair estimate of your location over time, given your inputs. Usually SLAM techniques are described for robots that don't move, if you don't tell it to, and this puts a strong constraint on the possible error between estimated location and actual location.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For ASV's the position moves constantly, depending on waves and currents, both in xyz and in pitch, yaw and roll directions. Will this be a problem for standard SLAM techniques? If I have an IMU, can I potentially correct for these disturbances?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For reference, the ASV I'm working with has a GPS and an IMU, and a lidar and cameras for landmark detection.&lt;/p&gt;&#xA;" OwnerUserId="24624" LastActivityDate="2020-01-30T18:29:09.323" Title="Can standard SLAM techniques be used in maritime environments, where waves and currents move the vessel even with no control input" Tags="&lt;slam&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20078" PostTypeId="1" AcceptedAnswerId="20080" CreationDate="2020-01-29T10:13:57.037" Score="2" ViewCount="170" Body="&lt;p&gt;I am studying robotics kinematics and I have studied that if we plan a trajectory in joint space it is impossible for the robot manipulator to cross a singularity during its motion, while in cartesian space this is possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But why in joint space the manipulator never meet a singularity?&lt;/p&gt;&#xA;" OwnerUserId="21797" LastEditorUserId="21797" LastEditDate="2020-01-29T10:32:58.230" LastActivityDate="2020-01-31T02:41:47.033" Title="Why in trajectory planning in joint space the manipulator never crosses a singularity?" Tags="&lt;manipulator&gt;&lt;path-planning&gt;&lt;trajectory&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20079" PostTypeId="2" ParentId="20077" CreationDate="2020-01-29T11:38:39.293" Score="0" Body="&lt;p&gt;One of the central elements of SLAM is the map itself, build from sensor readings. There is a wide range of sensors which can be used, but they all have in common a capability of building a map (2D or 3D). In the case of an ASV, in a generic maritime environment, I doubt that there are features in the surrounding environment which can be picked up by a lidar/cameras and used to create a map. As the map element is unlikely, I would say that SLAM does not make sense. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am not familiar with sonar and the resolution/performance of sonars. It might be possible to use the ocean floor as a map and then SLAM would make sense (similar to upward facing cameras for robots in environments with ceilings.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, if you are near a coastline, which can be detected by sensors, than again, slam does make sense.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-01-29T11:38:39.293" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="20080" PostTypeId="2" ParentId="20078" CreationDate="2020-01-29T12:48:24.333" Score="4" Body="&lt;p&gt;The term &quot;&lt;em&gt;singularity&lt;/em&gt;&quot; characterizes those configurations in the joint space where the Jacobian matrix loses rank and thus it is not directly invertible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Jacobian, in turn, is used to remap a trajectory from the Cartesian space to the joint space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore, if you plan the trajectory straight in the joint space, then you are not going to use the Jacobian and, as a consequence, you will not have to deal with singularities.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastActivityDate="2020-01-29T12:48:24.333" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="20081" PostTypeId="2" ParentId="20069" CreationDate="2020-01-29T15:58:57.310" Score="0" Body="&lt;p&gt;The short answer is yes. In rospy, every subscriber/timer gets its own thread. So for a single topic that means the callback will be executed sequentially. If you are going to be regularly receiving messages before the previous callback has finished, you want to be sure to have reasonable &lt;a href=&quot;http://wiki.ros.org/rospy/Overview/Publishers%20and%20Subscribers#Choosing_a_good_queue_size&quot; rel=&quot;nofollow noreferrer&quot;&gt;queue size&lt;/a&gt;, or you might end up dropping messages!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You're right though, I don't seem to be able to find this documented on the wiki. You can dive into the Topic source code, it looks like the thread on a per-subscriber bases is created &lt;a href=&quot;https://github.com/ros/ros_comm/blob/767174722ef95249aeaced2103acb703c302d13c/clients/rospy/src/rospy/impl/tcpros_pubsub.py#L257&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; - and in the most basic case it will just start a loop which receives messages and handles callbacks in a &lt;a href=&quot;https://github.com/ros/ros_comm/blob/767174722ef95249aeaced2103acb703c302d13c/clients/rospy/src/rospy/impl/tcpros_base.py#L783&quot; rel=&quot;nofollow noreferrer&quot;&gt;receive loop&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="24613" LastActivityDate="2020-01-29T15:58:57.310" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20082" PostTypeId="2" ParentId="20070" CreationDate="2020-01-29T17:00:15.370" Score="0" Body="&lt;p&gt;Can you run something like this, parallel a parallel task (623-1: Multitasking) to the welding process?&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;VAR iodev Pos_file; &#xA;VAR string FilePath:=&quot;TCPPos&quot;; &#xA;VAR string TCP_str; &#xA;FilePath:=FilePath+&quot;_&quot;+CDate()+&quot;.log&quot;;&#xA;&#xA;Open FilePath, Pos_file\Append;&#xA;&#xA;//Cycle until Welding process is active&#xA;  TCP_str:= .. Add current TCP position&#xA;  WRITE TCP_str;&#xA;&#xA;Close FilePath&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then you can take the TCPPos_DATE_.log file and post process it on a PC&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2020-01-29T17:09:31.567" LastActivityDate="2020-01-29T17:09:31.567" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20083" PostTypeId="1" AcceptedAnswerId="20085" CreationDate="2020-01-29T17:16:18.697" Score="0" ViewCount="50" Body="&lt;p&gt;I am studying robotics and I am focusing my attention on the sensors used on robot manipulators. I have seen that there a proprioceptive sensors, such as encoders, and exteroceptive sensors, such as range finders and sonars.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;During my studies on this topics I have encoutered the concept of resolution of a sensor and I have seen in paericular that the encoder, both absolute and incremental, have a way of calculating resolution, and also exteroceptive sensors have the resolution, such as depth resolution , angular resolution and width resolution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am tryin to understand how everything works, but I cannot understand the concept of resolution. I have seen that the definition is :&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The resolution of a sensor is the smallest change it can detect in the quantity that it is measuring. The resolution of a sensor with a digital output is usually the resolution of the digital output. The resolution is related to the precision with which the measurement is made, but they are not the same thing. A sensor's accuracy may be considerably worse than its resolution.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;which I have found &lt;a href=&quot;https://en.wikipedia.org/wiki/Sensor#Resolution&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I don't understand this concept very well since I don't know how to apply it in the various problems and cannot idetify the concept of resolution with the various type of resolution I mentioned above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can somebody please help me? &lt;/p&gt;&#xA;" OwnerUserId="21797" LastEditorUserId="19143" LastEditDate="2020-01-30T12:48:48.350" LastActivityDate="2020-01-30T12:48:48.350" Title="What does &quot;resolution of a sensor&quot; mean?" Tags="&lt;sensors&gt;&lt;manipulator&gt;" AnswerCount="2" CommentCount="3" ClosedDate="2020-01-30T21:22:24.310" ContentLicense="CC BY-SA 4.0" />
  <row Id="20085" PostTypeId="2" ParentId="20083" CreationDate="2020-01-30T04:48:18.913" Score="2" Body="&lt;p&gt;This ruler has a resolution of 1 inch:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/BdbRA.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/BdbRA.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It has a resolution of 1 inch because the only readings on the ruler are 0, 1, 2, or 3 inches. It can't measure anything smaller than an inch; it only measures inches. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ruler below has a resolution of a half-inch (0.5 inches). This ruler now has the capacity to measure 0, 0.5, 1.0, 1.5, ..., 3.5 inches. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/86z9h.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/86z9h.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For these rulers, you or I could look at them and maybe guess a better reading, but digital circuits need to &lt;em&gt;quantize&lt;/em&gt; the data at some point so it can be &lt;em&gt;counted&lt;/em&gt;. The reading is more than an inch or it isn't. It's more than 2 inches or it isn't. Etc. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider a LIDAR unit. It flashes a laser and starts a stopwatch. It counts time until it sees the reflection, and then estimates the distance to the reflecting object by half the speed of light times that elapsed time (because the laser shines out and then returns - it travels twice the distance). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The stopwatch counts the elapsed time down to some degree of precision, and that precision then determines the positioning accuracy of the LIDAR.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Digital cameras have to measure the intensity of light that strikes the receptor; that intensity has to be &lt;em&gt;counted&lt;/em&gt;, so again the ability to differentiate light intensities (and thus shades of color) is limited by how many values the sensor has available for counting. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The odometer in your car might read to the nearest tenth of a mile/kilometer, but your car actually moves smoothly between those points. Again, your car's odometer is limited in the distance it represent because it has a limited number of digits from which to choose. You could have an odometer accurate to the nearest hundredth of a kilometer if you wanted, or meter, millimeter, etc., but then the display would be very large, the dials would turn very quickly and wear, etc., and what's more is that &lt;em&gt;it wouldn't provide the driver with useful information.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It all comes down to counting. To be digital, it must necessarily be countable. To be countable, there must then be some approximation. How close of an approximation is &lt;em&gt;required&lt;/em&gt; will depend on your application requirements and is really at the heart of a lot of engineering work.  &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-01-30T04:48:18.913" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20086" PostTypeId="2" ParentId="20083" CreationDate="2020-01-30T06:21:34.587" Score="2" Body="&lt;p&gt;Consider a single digital pin input into your microprocessor of your robot. What does the software record when the external pin voltage:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Is greater than zero, but less than the trigger point?&lt;/li&gt;&#xA;&lt;li&gt;Is less than maximum, but greater than the trigger point?&#xA;(omitting the probable hysteresis of that trigger point).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The pin electronics resolves the input voltage into either 0 or 1; there are no other possible values. So, if the input voltage increases from zero by anything less than the trigger voltage, it is still detected as 0. That change is too small to be resolved by the pin electronics. The resolution of a digital pin is &lt;span class=&quot;math-container&quot;&gt;$\pm{1\over2}$&lt;/span&gt; bit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a specific example of the limit of resolution in action. The little changes cannot be resolved by the tool being used. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that accuracy and reproducibility are also both factors in how wrong an answer might be.&lt;/p&gt;&#xA;" OwnerDisplayName="user24605" LastActivityDate="2020-01-30T06:21:34.587" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20087" PostTypeId="2" ParentId="20070" CreationDate="2020-01-30T07:05:33.357" Score="0" Body="&lt;p&gt;This is a good robotics question, IMHO. A 3D printer extruding molten plastic has to do this task, so the right amount of plastic is squeezed out (e.g. Marlin, Repetier). The slicer can give the total amount needed for a given object (e.g. Cura by Ultimaker). It is not a trivial thing to calculate, yet very useful to know (so you don't run out of filament before object finishes printing). &#xA;But all the 3D printers I work with use GCODE as file format. I do not know RAPID, but a pre-processor must be possible to create. Effectively, just need to parse the file, adding up lengths as they occur (and quietly ignoring anything irrelevant). Is there a simulator available (that might already implement the parsing part)?&lt;/p&gt;&#xA;" OwnerDisplayName="user24605" LastEditorDisplayName="user24605" LastEditDate="2020-01-30T23:30:07.023" LastActivityDate="2020-01-30T23:30:07.023" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20088" PostTypeId="1" AcceptedAnswerId="20131" CreationDate="2020-01-30T18:05:08.483" Score="1" ViewCount="510" Body="&lt;p&gt;I have a robot with four mecanum wheels and I would like to make it move correctly by using a RC transmitter (my controller has two sticks and several buttons, each stick has a proportional range of [1000 - 1500 - 2000] where 1500 is the center position).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've read different documents about how to control a robot with mecanum wheels, but I wasn't able to find any suitable example to use as starting point.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically, I would like to understand what kind of algorithm I need to use to set the velocity and the direction on each wheel depending on the stick position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The motor controllers I'm using for my robot use a proprietary language, so I do not need any code, I just need to know how it should work and then I'll translate it to make it work with my electronics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope you can help me!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT:&#xA;I was thinking something like this:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;left stick UP = forward &#xA;left stick DOWN  = backward &#xA;left stick RIGHT [UP/DOWN=0]= SLIDE left &#xA;left stick RIGHT [UP/DOWN=0] = SLIDE right &#xA;left stick UP/RIGHT = diagonal and so on..&#xA;right stick RIGHT = turn on RIGHT&#xA;right stick LEFT = turn on left&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;my joystick has a left stick with two axes and a right stick with two other axis.&#xA;Both stick are proportional.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT2:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The figure shows the directions I would like to implements for my robot.&#xA;In order to keep things simply, we can not consider the turning on rear axis and on a single wheel.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My motor controllers move each motor by using motor_command function which ranges from 0 to +/-1000, where 0 means motors stop and +1000 means motors at 100% forward while -1000 means motors at 100% backward.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/6VyRy.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6VyRy.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10626" LastEditorUserId="10626" LastEditDate="2020-01-31T16:44:11.233" LastActivityDate="2020-02-04T16:26:59.863" Title="How to drive mecanum wheels robot: code or algorithm" Tags="&lt;mobile-robot&gt;&lt;wheeled-robot&gt;&lt;algorithm&gt;&lt;differential-drive&gt;&lt;wheel&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20089" PostTypeId="1" AcceptedAnswerId="20101" CreationDate="2020-01-30T18:15:38.753" Score="2" ViewCount="2360" Body="&lt;p&gt;My question is related to this one (&lt;a href=&quot;https://robotics.stackexchange.com/questions/6652/how-to-get-a-python-node-in-ros-subscribe-to-multiple-topics&quot;&gt;here&lt;/a&gt;) but not exactly. Assume now I have 4 topics: topic_A,topic_B,topic_C,topic_D. Inside my control loop, I need to read the sensor values from the first three topics (all of them are publishing at 1000 Hz for example), calculate my control input and publish the control input to topic_D for each iteration. My question is related to how to write the control loop properly. My current pseudo code is summarized as below:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) I used the &lt;code&gt;rospy.wait_for_message&lt;/code&gt; because it guarantees that my control_input is being calculated from the most recent sensor values (a few ms before I calculate my control_input). Now I want to replace them because it seems like the subscriber callback function is faster, which is very important for my application. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) In terms of code structure, I didn't use subscriber because I didn't know how to incorporate three callback functions properly to publish my control gain (I need to the three sensor values to update even though I'm running the while loop in the &lt;code&gt;main_control_loop&lt;/code&gt; function to get my control).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based on the discussion from &lt;a href=&quot;https://robotics.stackexchange.com/questions/6652/how-to-get-a-python-node-in-ros-subscribe-to-multiple-topics&quot;&gt;here&lt;/a&gt;. It looks like I can have several subscribers running together for rospy. Now assume I have three subscribers running as listed below, will the sensor_X_value be updated in each iteration of my &lt;code&gt;main_control_loop&lt;/code&gt; function?&lt;/p&gt;&#xA;" OwnerUserId="18385" LastEditorUserId="18385" LastEditDate="2020-02-04T18:31:13.610" LastActivityDate="2020-02-04T18:31:13.610" Title="(not trivial) ROS how to subscribe to multiple topics and publish to another topic within one loop" Tags="&lt;control&gt;&lt;ros&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20090" PostTypeId="2" ParentId="20077" CreationDate="2020-01-30T18:29:09.323" Score="0" Body="&lt;p&gt;Not sure about all the way to SLAM but I know companies like Sonardyne or Teledyne implement inertial navigation systems for their autonomous underwater robots.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given underwater using GNSS as an aiding sensor is obviously not necessarily possible so instead they use sonar pointed at the ocean floor instead. For this to be possible they obviously need a map of some kind.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not sure if what they do extends all the way to SLAM or just stops at localization.&lt;/p&gt;&#xA;" OwnerUserId="23193" LastActivityDate="2020-01-30T18:29:09.323" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20091" PostTypeId="1" CreationDate="2020-01-30T19:17:59.287" Score="0" ViewCount="44" Body="&lt;p&gt;Can someone has the URDF model for the Create 2.0 from iRobot, I need to simulate at Gazebo the robot and simulate the laserscan with the robot, I would like to know if someone know about something of this for ROS.&lt;/p&gt;&#xA;" OwnerUserId="23315" LastActivityDate="2020-12-22T02:03:41.330" Title="URDF_model_for_Create 2" Tags="&lt;ros&gt;&lt;irobot-create&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20092" PostTypeId="1" AcceptedAnswerId="20106" CreationDate="2020-01-30T20:17:48.770" Score="0" ViewCount="155" Body="&lt;p&gt;I know similar questions have been asked before, but I have researched for hours now and have not been able to find a viable solution. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a Raspberry Pi 4 and the Adafruit LSM9DS1 IMU, which has a gyroscope, an accelerometer, and a magnetometer. I am trying to build a VR headset and find the 3D orientation of the IMU. What would be the best way (simplicity, lack of complicated math, and performance wise) to correct for gyroscopic drift using sensor fusion? I barely have any knowledge of quaternions, so a solution with Euler angles would be preferred. &lt;/p&gt;&#xA;" OwnerUserId="24633" LastActivityDate="2020-02-01T10:40:50.593" Title="How to Correct for Gyroscopic Drift?" Tags="&lt;raspberry-pi&gt;&lt;imu&gt;&lt;gyroscope&gt;&lt;sensor-fusion&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20095" PostTypeId="2" ParentId="20063" CreationDate="2020-01-30T21:38:01.310" Score="2" Body="&lt;p&gt;Yes.  Motors of the same type, by the same manufacturer, driven by the same voltage may still have different angular velocities (and different torque curves and any other parameter).  There are a variety of reasons for this: manufacturing tolerances resulting in different amounts of internal friction or mass, different magnet strengths, differences in winding, differences in internal resistance of the copper winding, the list goes on.  Furthermore, a motor's characteristics may change over time too as mechanical parts wear.  Depending on the quality of motor, these differences may be large or small.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Typically in robotics, this manifests as &quot;why doesn't my robot go straight&quot;?  When people simply provide the same voltage to both wheel motors without a velocity controller.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2020-01-30T21:38:01.310" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20097" PostTypeId="2" ParentId="20078" CreationDate="2020-01-30T22:18:25.540" Score="0" Body="&lt;p&gt;Using quaternions for 3D rotations avoids the 'gimbal lock' problem, being one form of singularity in a manipulator. &#xA;For a start to learning about quaternions in gaming and robotics, see &lt;a href=&quot;https://www.3dgep.com/understanding-quaternions/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.3dgep.com/understanding-quaternions/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerDisplayName="user24605" LastEditorDisplayName="user24605" LastEditDate="2020-01-31T02:41:47.033" LastActivityDate="2020-01-31T02:41:47.033" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="20098" PostTypeId="2" ParentId="20065" CreationDate="2020-01-31T01:03:41.640" Score="0" Body="&lt;p&gt;Your diagram has 6 cables and your question refers to 3 cables, so I'll just consider the simpler case. &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The distal end (effector) moves in 3D space (a volume) - task space. Whilst the accessible space is limited, it does require 3 axes to describe its terminal point.&lt;/li&gt;&#xA;&lt;li&gt;The input is 3 cables, so you only have 3 variables to play with to get a particular (accessible) distal end position. I suspect that is what you have called the configuration space. That looks like 3 dof to me.&lt;/li&gt;&#xA;&lt;li&gt;The mapping of 3 inputs to 3 outputs is possible, and that transformation has no superfluous components (meaning you have enough, but not too much, information).&lt;/li&gt;&#xA;&lt;li&gt;A little change to any input makes a little change to the output; there are no discontinuities in the transformation. In this sense, the manipulator can, theoretically, move infinitely small distances.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;In a jointed manipulator (like an arm, with a hand), there can be lots of servos. However, at the end of the first finger, we still only need 3 numbers to describe its position in space, even if we chose to move 17 servos to get it there. Our 17-dof manipulator still only achieves the position in 3D, needing only 3 numbers to define its position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Note that we have ignored the orientation of the manipulated object. Yes, there's lots more to think about, yet.)&lt;/p&gt;&#xA;" OwnerDisplayName="user24605" LastActivityDate="2020-01-31T01:03:41.640" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20099" PostTypeId="1" AcceptedAnswerId="20105" CreationDate="2020-01-31T08:22:27.203" Score="1" ViewCount="39" Body="&lt;p&gt;I'm going through this person's torque calculation of a simple crane setup. the servo used has a max torque of 57oz.in:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Hz3Ik.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Hz3Ik.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At the top, if &lt;code&gt;Mservo&lt;/code&gt; is 34.12oz.in, how is it 62.38% of stall torque when 34.12/57 = 0.5986?&lt;/p&gt;&#xA;" OwnerUserId="11489" LastActivityDate="2020-02-01T07:35:04.173" Title="How is this torque value arrived?" Tags="&lt;servomotor&gt;&lt;torque&gt;&lt;theory&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20101" PostTypeId="2" ParentId="20089" CreationDate="2020-01-31T18:32:10.570" Score="3" Body="&lt;p&gt;What you have there &lt;em&gt;should&lt;/em&gt; be okay.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically, each time you construct a subscriber for a new topic, &lt;code&gt;rospy.Subscriber(...)&lt;/code&gt;, a thread will be started to poll for messages received on that topic. So in your code above, the callback functions will asynchronously handle processing the latest message received and updating the value accordingly. Maybe use a queue size of 1, to ensure it's only the latest value you're polling from your sensors (See &lt;a href=&quot;http://wiki.ros.org/rospy/Overview/Publishers%20and%20Subscribers#queue_size:_publish.28.29_behavior_and_queuing&quot; rel=&quot;nofollow noreferrer&quot;&gt;rospy docs on publishers/subscribers&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So in your control loop, you shouldn't have to worry about it. Just make sure that your control loop rate is appropriate for the publishing rate of your control inputs.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;def main_control_loop(self,scan,pose):&#xA;&#xA;    # This is up to you&#xA;    r = rospy.Rate(1000)  # 1000 Hz&#xA;&#xA;    while not rospy.is_shutdown():&#xA;&#xA;        # compute control input&#xA;        # These will be the most up to date values&#xA;        control_input = some_function(self.topicA_value,&#xA;                                      self.topicB_value,&#xA;                                      self.topicC_value,&#xA;                                      **other args)&#xA;&#xA;        self.pub_topicsD.publish(control_input)&#xA;&#xA;        # sleep&#xA;        rate.sleep()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;There are a few caveats here - one of which being that depending on your publisher queues, latency, etc... there's a strong likelihood that your control loop will update with &quot;stale&quot; values (ie, use the same value twice), but that all depends on your control loop rate and your publishers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, I don't know what the application here is, but if you really need to run at 1000 Hz then you might consider writing your application in &lt;a href=&quot;http://wiki.ros.org/roscpp/Overview/Callbacks%20and%20Spinning&quot; rel=&quot;nofollow noreferrer&quot;&gt;roscpp&lt;/a&gt; to have more control over what threads are doing what, and when.&lt;/p&gt;&#xA;" OwnerUserId="24613" LastActivityDate="2020-01-31T18:32:10.570" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="20102" PostTypeId="2" ParentId="9728" CreationDate="2020-01-31T22:41:43.047" Score="0" Body="&lt;p&gt;In my configuration I have a PID algorithm for the main following mechanism. Then I have a separate routine to move into if The car ever goes off the line and all 6 sensors are sensing white. This tells the car to turn the direction that it saw the line last. This seems to work up to 45 degree turns for me. &lt;/p&gt;&#xA;" OwnerUserId="23770" LastActivityDate="2020-01-31T22:41:43.047" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20103" PostTypeId="1" CreationDate="2020-02-01T00:17:01.947" Score="0" ViewCount="29" Body="&lt;p&gt;What can happen to the motor driver if I give input PWM frequency more than the rated(capacity)? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm using Maxon motor with specifications:&#xA;Operating on 24V &#xA;Speed: 600 RPM&#xA;Nominal Torque: 21 Kg-cm&lt;/p&gt;&#xA;" OwnerUserId="24441" LastEditorUserId="24441" LastEditDate="2020-02-01T19:48:31.443" LastActivityDate="2020-02-01T19:48:31.443" Title="Motor driver PWM frequency" Tags="&lt;motor&gt;&lt;pwm&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20104" PostTypeId="2" ParentId="9728" CreationDate="2020-02-01T01:00:08.313" Score="0" Body="&lt;p&gt;It seems that you can have 4 possible readings (w,w), (w,b), (b,w) and (b,b). So, the program what to decide what to do in each situation. To help figure out the next action, the past history can also be used. So, it is up to you to decide how much history is useful, or practical. I suggest some kind of state diagram, but use whatever you are already familiar with. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, in your pseudocode, how much do you turn left and right? How far are you moving between each reading? Can you measure how far each wheel has gone?Is it possible to go backwards until line is found? How straight are your moves forward and backward? These questions are just some of the considerations for you to think about as you refine your strategy.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The bottom line is that the dual sensor does not provide enough data from a single reading, to, for example, identify whether you've just run over the edge of a straight line, the line has bent, or (if it has bent) by how much!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The whole point of a line robot competition is to get each builder to design (and test) their strategy.&lt;/p&gt;&#xA;" OwnerDisplayName="user24605" LastEditorDisplayName="user24605" LastEditDate="2020-02-01T02:54:41.550" LastActivityDate="2020-02-01T02:54:41.550" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20105" PostTypeId="2" ParentId="20099" CreationDate="2020-02-01T07:35:04.173" Score="1" Body="&lt;p&gt;I haven't seen the degree symbol &lt;span class=&quot;math-container&quot;&gt;$^{\circ}$&lt;/span&gt; to denote a percentage, but both percentages on your drawing result in the same torque: 54.7, not 57. (10.12/0.185) &lt;span class=&quot;math-container&quot;&gt;$\approx$&lt;/span&gt; (34.12/0.6238) &lt;span class=&quot;math-container&quot;&gt;$\approx$&lt;/span&gt; 54.7.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This, in turn, is about 96 percent of the &quot;rated torque,&quot; so I don't know if they de-rated the max torque or not. On the &lt;a href=&quot;https://saho.studio/crane.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;webpage you linked&lt;/a&gt;, they said,&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Lastly, we assumed that the max torque by the servo was 57 oz-in. After some prototyping, we discovered that we weren't getting anywhere near that torque despite that was what the manufacturer rated the servo for.  &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So again, they may have de-rated the max torque in the calculations there but failed to denote it (though I wouldn't say 96 percent of datasheet torque is not &quot;anywhere near&quot; the rated torque).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But really, the major flaw with their design is that they're trying to move something while the load is rated at stall torque. They're not left with any additional torque to &lt;strong&gt;accelerate the load&lt;/strong&gt;. If you want to change positions, you have to have speed. If you're starting from a stopped (stalled) position, then you have to accelerate. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\tau = I\alpha$&lt;/span&gt;, so if you're going to accelerate the load (and move from positions) then you need to have some torque reserve.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There's an email address on the page, though! Try contacting the person that posted the page and ask them directly. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-02-01T07:35:04.173" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20106" PostTypeId="2" ParentId="20092" CreationDate="2020-02-01T10:40:50.593" Score="1" Body="&lt;p&gt;I can propose you two solutions to solve your problem:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The first one is a not easy to implement with a MEMS but it works: A Kalman filter (maybe more a Extended Kalman filter for navigation). The advantage of this method is that it can gives you the covariance for each state of your model. The disavantage is that you need to implement the model of the sensor (MEMS). You can find models on internet relative to your sensor. &lt;/li&gt;&#xA;&lt;li&gt;The second possible solution is called 'complementary filter'. The goal of this filter is to 'estimate' (even if there are no covariances about the data compared to the Kalman Filter) the angles with the gyro data and the accelerometers data. It is easy to implement but less precise compared to a Kalman Filter in my opinion.&#xA;You will find below an article dealing with it, plus a github with it.&#xA;&lt;a href=&quot;https://www.researchgate.net/publication/336208125_A_Fast_and_Robust_Algorithm_for_Orientation_Estimation_using_Inertial_Sensors&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.researchgate.net/publication/336208125_A_Fast_and_Robust_Algorithm_for_Orientation_Estimation_using_Inertial_Sensors&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="24641" LastActivityDate="2020-02-01T10:40:50.593" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20107" PostTypeId="1" CreationDate="2020-02-01T13:19:53.537" Score="2" ViewCount="52" Body="&lt;p&gt;In CS223a homework there is a question to calculate DH parameters of given robot as below:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/fO9n6.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fO9n6.png&quot; alt=&quot;Robotic arm&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When he try to solve DH parameters of the robot in the solutions he set first and second frame positions same as below:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/3mB2O.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3mB2O.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can see first frame of the joint shifted through Z, and now first and second frame starting positions are same.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to know what is the rule for this? By intuition I believe joints frames can be shifted through Z axis. Is it the only rule? Is there any other thing I should know?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS: Solution manual for HW2 &lt;a href=&quot;https://see.stanford.edu/materials/aiircs223a/solution2.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://see.stanford.edu/materials/aiircs223a/solution2.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="24643" LastActivityDate="2020-02-02T18:08:14.787" Title="Shifting through Z axis for Calculating Kinematics?" Tags="&lt;kinematics&gt;&lt;frame&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20110" PostTypeId="1" AcceptedAnswerId="20115" CreationDate="2020-02-02T15:04:39.293" Score="1" ViewCount="115" Body="&lt;p&gt;How many landmark measurements are required to localize a robot (i.e. find its x,y position and orientation) moving in a 2D world using 1. only range measurements 2. range plus bearing measurements?&lt;/p&gt;&#xA;" OwnerUserId="23475" LastActivityDate="2020-02-02T22:12:32.153" Title="How many landmark measurements to localize a planar robot?" Tags="&lt;localization&gt;&lt;navigation&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20111" PostTypeId="2" ParentId="20107" CreationDate="2020-02-02T16:18:29.490" Score="1" Body="&lt;p&gt;If I understand your question correctly you are asking about what rules there are for assigning coordinate frame axes compatible with DH parameters?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are definitely rules when assigning coordinate frames. In order to guarantee that there exists a homogenous transformation from frame 1-&gt;0 must follow the properties&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Axis &lt;span class=&quot;math-container&quot;&gt;$x_1$&lt;/span&gt; is perpendicular to axis &lt;span class=&quot;math-container&quot;&gt;$z_0$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;li&gt;Axis &lt;span class=&quot;math-container&quot;&gt;$x_1$&lt;/span&gt; intersects axis &lt;span class=&quot;math-container&quot;&gt;$z_0$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In order to guarantee these the textbook &lt;em&gt;Robot Modeling and Control&lt;/em&gt; introduces three possible cases for how to set up the frames compatible with the DH convention. This is in sections 3.2.2 on page 80. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In short the coordinate frames are assumed to be right handed and picked iteratively based on some guidelines. &lt;span class=&quot;math-container&quot;&gt;$z_0$&lt;/span&gt; can be assigned arbitrarily and the following are assigned based on the cases&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$z_{i-1}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$z_{i}$&lt;/span&gt; are no coplanar&lt;/li&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$z_{i-1}$&lt;/span&gt; is parallel to &lt;span class=&quot;math-container&quot;&gt;$z_{i}$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$z_{i-1}$&lt;/span&gt; intersects &lt;span class=&quot;math-container&quot;&gt;$z_{i}$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;For a more thorough explanation and examples reference the book: &lt;em&gt;Robot Modeling and Control&lt;/em&gt; by Spong, Hutchinson, and Vidyasagar.&lt;/p&gt;&#xA;" OwnerUserId="23193" LastEditorUserId="23193" LastEditDate="2020-02-02T18:08:14.787" LastActivityDate="2020-02-02T18:08:14.787" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="20112" PostTypeId="1" AcceptedAnswerId="20181" CreationDate="2020-02-02T16:53:44.943" Score="2" ViewCount="398" Body="&lt;p&gt;I'm reading this article about which of vacuum pump or venturi vacuum generator is more efficient for a pick and place system: &lt;a href=&quot;https://fluidpowerjournal.com/pump-or-venturi/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://fluidpowerjournal.com/pump-or-venturi/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The example application is as follows:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Here’s a typical vacuum-lifting application: a small end-of-arm tool&#xA;  consisting of eight small vacuum cups of Ø40 mm (Ø1.5″). These eight&#xA;  cups are picking up a flat plastic sheet, which is, of course, non&#xA;  porous. Cycle rate is one sheet pick every 15 seconds, or four sheets&#xA;  a minute. The piece is being held for only three seconds during&#xA;  transfer. What’s the most efficient? Pump or venturi?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The conclusion appears to be venturi, but I find the argument a bit odd:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The pump will run continuously with the vacuum being turned on and off&#xA;  via a vacuum solenoid valve. The venturi will run only when required&#xA;  (during the lift part of the cycle), turned on and off using a&#xA;  compressed air solenoid valve. The vacuum pump uses 0.25 hp all day&#xA;  long during a 24-hour shift. The venturi uses 0.9 hp for every three&#xA;  seconds of a 15-second cycle. Therefore, the venturi uses on average&#xA;  0.18 hp of compressed air over the same cycle period. Consequently, the venturi is “more efficient” in overall running costs.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Does anyone know why the vacuum pump would need to run constantly for 24hrs whilst the pressure pump would not? Could the vacuum pump not be switched off just like the pressure pump? In fact, can the solenoid valve give a good seal in the venturi case?&lt;/p&gt;&#xA;" OwnerUserId="11489" LastActivityDate="2020-02-15T17:35:37.623" Title="Does a vacuum pump have to run constantly in a pick &amp; place system?" Tags="&lt;robotic-arm&gt;&lt;valve&gt;" AnswerCount="1" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="20114" PostTypeId="1" CreationDate="2020-02-02T19:23:08.660" Score="0" ViewCount="24" Body="&lt;p&gt;I'm completely new to robotics and software as a hobby. I've got my irobot create2 up and running and I'm trying to create a log file for specific messages in &quot;create_autonomy&quot; &lt;a href=&quot;https://github.com/AutonomyLab/create_autonomy&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/AutonomyLab/create_autonomy&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm hoping to log this once a minute in the terminal window or a .txt file&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;hour:minute:second    battery/charge &#xA;(95%) &lt;/li&gt;&#xA;&lt;li&gt;hour:minute:second   joint_states        (forward, 1.5&#xA;mph)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Any ELI5 help would be awesome, I'm not sure where to start&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This video ends at what I'm trying to do&#xA;&lt;a href=&quot;https://www.youtube.com/watch?v=T4KRgNBRA2U&amp;amp;t=9s&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=T4KRgNBRA2U&amp;amp;t=9s&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="24651" LastActivityDate="2020-02-03T08:15:43.590" Title="How do you create a log of create_autonomy published messages?" Tags="&lt;ros&gt;&lt;irobot-create&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20115" PostTypeId="2" ParentId="20110" CreationDate="2020-02-02T20:18:46.823" Score="2" Body="&lt;p&gt;&lt;strong&gt;1) Only range measurements&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Minimal landmarks is 3 for position &lt;span class=&quot;math-container&quot;&gt;$[x,y]$&lt;/span&gt;. This one is pretty easy to visualize. Just draw the distance from the landmarks as a circle. The intersection of the 3 circles is your position.&#xA;You can see the problem with 2 landmarks below as it has 2 valid solutions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/4X7fJ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4X7fJ.png&quot; alt=&quot;Localization with 2 landmarks&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Orientation(&lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt;) is impossible with just landmarks. You must have odometry information. So you must be able to calculate &lt;span class=&quot;math-container&quot;&gt;$p_{R_1,R_2}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\theta_{R_1,R_2}$&lt;/span&gt; which is the movement from robot pose &lt;span class=&quot;math-container&quot;&gt;$R_1$&lt;/span&gt; to &lt;span class=&quot;math-container&quot;&gt;$R_2$&lt;/span&gt; as estimated from your odometry.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;2) Range + Bearing&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Minimum is 2 points. With 1 landmark you only have two knowns (&lt;span class=&quot;math-container&quot;&gt;$r$&lt;/span&gt;,&lt;span class=&quot;math-container&quot;&gt;$\phi$&lt;/span&gt;) and 3 unknowns (&lt;span class=&quot;math-container&quot;&gt;$x,y,\theta$&lt;/span&gt;). Geometrically you can again imagine the distance circle. Now set the robot heading always tangent to the circle. By moving the robot around this circle you change the state &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt; , but the measurement &lt;span class=&quot;math-container&quot;&gt;$\phi$&lt;/span&gt; stays the same.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With odometry information you can get away with 1 landmark.&lt;/p&gt;&#xA;" OwnerUserId="15265" LastEditorUserId="15265" LastEditDate="2020-02-02T22:12:32.153" LastActivityDate="2020-02-02T22:12:32.153" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20117" PostTypeId="1" CreationDate="2020-02-03T05:31:04.460" Score="1" ViewCount="19" Body="&lt;p&gt;I'm trying to increase the suction force of the end effector in a pick and place system. Is it a good idea to add an extra vacuum pump and put it in parallel? AFAIK, having an extra pump in parallel increases airflow whilst an extra pump in series decreases pressure. However, this paper I'm reading claims to have two pumps in parallel: &lt;a href=&quot;https://arxiv.org/pdf/1710.01439.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://arxiv.org/pdf/1710.01439.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;To achieve this result the suction is driven by two vacuum pumps in&#xA;  parallel, each rated with a free air flow rate of 10CFM and an&#xA;  ultimate vacuum pressure of 0.3Pa.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In fact, would adding an extra pump render no effect as the pumps may leak due to such low pressure? The pump I've got is a rather weak one: 12V, vacuum range: 0 - 0.082Mpa, pressure range: -0.12Mpa - 0, flow: 400L/H. It's one of those with a rotating cam inside.&lt;/p&gt;&#xA;" OwnerUserId="11392" LastActivityDate="2020-02-03T05:31:04.460" Title="Increasing suction force" Tags="&lt;robotic-arm&gt;&lt;design&gt;&lt;valve&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20118" PostTypeId="2" ParentId="20114" CreationDate="2020-02-03T08:15:43.590" Score="1" Body="&lt;p&gt;, &lt;/p&gt;&#xA;&#xA;&lt;p&gt;there is a standard tool for that: rosbag, it can record any message on the ROS network, you can take a look at the following link to see its usage &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://wiki.ros.org/rosbag&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://wiki.ros.org/rosbag&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="21229" LastActivityDate="2020-02-03T08:15:43.590" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20120" PostTypeId="1" CreationDate="2020-02-03T21:13:58.473" Score="0" ViewCount="26" Body="&lt;p&gt;Assuming you have a fixed stereo camera, looking at a rigid object, what are the techniques used to track the object? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My google searches lead me to optical flow and similar algorithms, but I believe they are only for the 2D image space. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there something similar for the 3D case, especially when the object of interest fills up most of the FOV of the camera. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;edit: this has to be without fiducials&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you &lt;/p&gt;&#xA;" OwnerUserId="7266" LastEditorUserId="7266" LastEditDate="2020-02-28T04:30:44.947" LastActivityDate="2020-02-28T04:30:44.947" Title="Tracking 3D motion using a stereo camera" Tags="&lt;computer-vision&gt;&lt;stereo-vision&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20121" PostTypeId="1" CreationDate="2020-02-03T21:29:09.400" Score="1" ViewCount="48" Body="&lt;p&gt;I am trying to find the kinametic parameters using the J. Craig of the DH parameters for the following 2-DOF robotic manipulator. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Ky3lB.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Ky3lB.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where &lt;span class=&quot;math-container&quot;&gt;$\ x,y $&lt;/span&gt; are the axes of the reference frame and &lt;span class=&quot;math-container&quot;&gt;$\ q_1 , q_2 $&lt;/span&gt; are the parameters of the revolute and prosmatic joint correspondingly. Until now, I have come up with the following solution:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/h3jk2.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/h3jk2.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My problem is that I am not at all sure if the term &lt;span class=&quot;math-container&quot;&gt;$\ θ_1 - 90 $&lt;/span&gt; is correct and if I have correctly placed the frames for the joints and the end effector. Axes &lt;span class=&quot;math-container&quot;&gt;$\ x_0 , y_0 , z_0 $&lt;/span&gt; are the axes of the reference frame, axes &lt;span class=&quot;math-container&quot;&gt;$\ x_1 , z_1 $&lt;/span&gt; are for the revolute joint, axes &lt;span class=&quot;math-container&quot;&gt;$\ x_2,z_2 $&lt;/span&gt; are for the prismatic joint and axes &lt;span class=&quot;math-container&quot;&gt;$\ x_e,z_e $&lt;/span&gt; are for the end effector. I have intentionally left out the &lt;span class=&quot;math-container&quot;&gt;$\ y $&lt;/span&gt; axes of the joints and the end effector since they are derived from the right hand rule.  &lt;/p&gt;&#xA;" OwnerUserId="23342" LastActivityDate="2020-02-03T21:29:09.400" Title="Find the kinematic parameters using DH by Craig convention" Tags="&lt;kinematics&gt;&lt;manipulator&gt;&lt;forward-kinematics&gt;&lt;dh-parameters&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20122" PostTypeId="2" ParentId="20120" CreationDate="2020-02-04T02:26:19.487" Score="1" Body="&lt;p&gt;from my experience, you can do it on the 2D image together with the disparity information.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Reason:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;tracking based on image has been well developed in recent years, there should be many  advanced algorithms you can use directly(may based on NN&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;you can project the detection result from the 2D image to your disparity to get a distance of the object, which helps:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2.1. you can get the distance between your robot and target besides the x,y coordinates in camera view, which makes your control easier&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2.2. when the 2D tracking failed, like the result jumped to somewhere else, you can use the distance info to identify this kind of jump&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="4514" LastActivityDate="2020-02-04T02:26:19.487" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20123" PostTypeId="1" AcceptedAnswerId="20133" CreationDate="2020-02-04T02:38:55.247" Score="1" ViewCount="35" Body="&lt;p&gt;This may be a very simple question so please bear with me...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Suppose I have a stationary object and point clouds, &lt;span class=&quot;math-container&quot;&gt;$n$&lt;/span&gt; &lt;span class=&quot;math-container&quot;&gt;$(x,y,z)$&lt;/span&gt; points, of that object taken by a moving camera at time steps &lt;span class=&quot;math-container&quot;&gt;$t_i$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$t_{i+1}$&lt;/span&gt;, ...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using ICP on the point clouds from subsequent time steps I get the relative transformation (a rotation matrix and translation vector &lt;span class=&quot;math-container&quot;&gt;$\in SE3$&lt;/span&gt;) needed to map the cloud from some &lt;span class=&quot;math-container&quot;&gt;$t_i$&lt;/span&gt; to to the cloud at &lt;span class=&quot;math-container&quot;&gt;$t_{i + 1}$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is the Camera trajectory from time &lt;span class=&quot;math-container&quot;&gt;$t_i$&lt;/span&gt; to &lt;span class=&quot;math-container&quot;&gt;$t_{i + 1}$&lt;/span&gt; the same? ie I simply take the position of the camera at &lt;span class=&quot;math-container&quot;&gt;$t_i$&lt;/span&gt; and multiply it by the rotation matrix and then add the translation vector to get the new position?&lt;/p&gt;&#xA;" OwnerUserId="24660" LastActivityDate="2020-02-04T18:32:30.467" Title="How to derive the camera trajectory from ICP" Tags="&lt;slam&gt;&lt;cameras&gt;&lt;visual-odometry&gt;&lt;icp&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20124" PostTypeId="1" AcceptedAnswerId="20130" CreationDate="2020-02-04T05:25:16.580" Score="1" ViewCount="137" Body="&lt;p&gt;I am doing some robotic simulations in ROS/Gazebo and wondering what is the best way (programming-wise since I don't have a CS background) to implement a robot's motion controller. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are the questions:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Where should I call my Controller function (In a callback? which callback if I have multiple callbacks running simultaneously)?&lt;/li&gt;&#xA;&lt;li&gt;How to sync data coming from different nodes i.e. callbacks?&lt;/li&gt;&#xA;&lt;li&gt;What if my sensor nodes are running faster than my controller loop, then how should I implement the controller?&lt;/li&gt;&#xA;&lt;li&gt;Is there any way to subscribe to different topics with a single callback?&lt;/li&gt;&#xA;&lt;li&gt;Should I process the data in a callback or process it in the controller function?&lt;/li&gt;&#xA;&lt;li&gt;What is the exact use of buffers in ROS subscribers?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Sorry for a long list of inquiries but these questions have been bothering me for some time and I would like to make my code more efficient and aesthetically pleasant at the same time if possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;P.S: I am using C++ in ROS.&lt;/p&gt;&#xA;" OwnerUserId="21747" LastActivityDate="2020-02-04T15:22:06.950" Title="Controller algorithm implementation in ROS/Gazebo" Tags="&lt;mobile-robot&gt;&lt;ros&gt;&lt;c++&gt;&lt;gazebo&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20128" PostTypeId="2" ParentId="18750" CreationDate="2020-02-04T09:05:43.953" Score="0" Body="&lt;pre&gt;&lt;code&gt;catkin build -j15 --make-args=&quot;-j5&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;uses 15 make jobs with 5 processes each.&lt;/p&gt;&#xA;" OwnerUserId="24662" LastActivityDate="2020-02-04T09:05:43.953" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20130" PostTypeId="2" ParentId="20124" CreationDate="2020-02-04T15:16:13.620" Score="2" Body="&lt;p&gt;That is a long list of broad questions. Some of the answers depend heavily on application and personal preference. Assuming you're not using ROS2, then you might consider looking at the &lt;a href=&quot;http://wiki.ros.org/ros_control&quot; rel=&quot;nofollow noreferrer&quot;&gt;ros_control&lt;/a&gt; package. Not necessarily to use - just read through their architecture and tutorials for now. It will at least help give you an idea of where to start.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for the specifics:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;In general your control loop should be running at a fixed rate (e.g. 50 Hz), so your control function should be running independently of your sensor callbacks.&lt;/li&gt;&#xA;&lt;li&gt;It depends, what is your sensor data and where is it coming from? In your control node, you sensor subscribers could just provide your control loop with the most up to date data possible.&lt;/li&gt;&#xA;&lt;li&gt;This also depends on the application. Obviously if your sensor data is coming in at 10 Hz you probably don't need a 2000 Hz control loop. &lt;/li&gt;&#xA;&lt;li&gt;Maybe look at the &lt;a href=&quot;http://wiki.ros.org/message_filters&quot; rel=&quot;nofollow noreferrer&quot;&gt;message_filters&lt;/a&gt; package. It sounds like it'll answer some of your questions, too.&lt;/li&gt;&#xA;&lt;li&gt;Depends on your data. But you probably want your controller function to handle combining all of your sensor input and processing it at the controller's loop rate. &lt;/li&gt;&#xA;&lt;li&gt;Do you mean the &lt;a href=&quot;http://wiki.ros.org/roscpp/Overview/Publishers%20and%20Subscribers#publish.28.29_behavior_and_queueing&quot; rel=&quot;nofollow noreferrer&quot;&gt;queue sizes&lt;/a&gt;? It gives flexibility into the timing of processing published messages. For your sensor data your probably only care about the latest available reading, and your callback should probably never fall behind on processing messages from the queue. But say you had a sensor that produce a huge burst of information in a short amount of time, then with a sufficient queue size all of those messages could be published and processed without losing any of the data.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Hope that helps. I think the &lt;code&gt;ros_control&lt;/code&gt; stuff might be a good place for you start.&lt;/p&gt;&#xA;" OwnerUserId="24613" LastEditorUserId="24613" LastEditDate="2020-02-04T15:22:06.950" LastActivityDate="2020-02-04T15:22:06.950" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20131" PostTypeId="2" ParentId="20088" CreationDate="2020-02-04T16:26:59.863" Score="1" Body="&lt;p&gt;I've built one and added the code here: &lt;a href=&quot;https://github.com/charlch/MecanumBot/blob/master/MecanumBot.ino&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/charlch/MecanumBot/blob/master/MecanumBot.ino&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The core of the maths is this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Firstly turn the 1000 to 2000 input into -1.0 to 1.0&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;float norm(int in) {&#xA;    return (float(in-1500.0)) / 500.0; &#xA;}&#xA;&#xA;&#xA;float forward = norm(forward_raw);     &#xA;float strafe = norm(strafe_raw);&#xA;float turn = norm(turn_raw);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then calculate the speed for each wheel and set the motor to that speed:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;float m1 = (forward+strafe+turn)/3.0;&#xA;float m2 = (forward-strafe-turn)/3.0;&#xA;float m3 = (forward-strafe+turn)/3.0;&#xA;float m4 = (forward+strafe-turn)/3.0;&#xA;&#xA;motor1.set_signal(m1);&#xA;motor2.set_signal(m2);&#xA;motor3.set_signal(m3);&#xA;motor4.set_signal(m4);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="21215" LastActivityDate="2020-02-04T16:26:59.863" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20132" PostTypeId="1" AcceptedAnswerId="20143" CreationDate="2020-02-04T17:10:06.860" Score="1" ViewCount="96" Body="&lt;p&gt;Is it possible to drive the whole mobile differential drive robot with single arduino? Sonar sensor, servo motor, two encoders, two motors, imu, etc. I mean would it give a reasonable performance or very slow or impossible? If we use two arduinos would it be much better?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, two motor+encoder, imu, one servo motor for sonar sensor and one sonar sensor, + bluetooth communication with pc. The task is for example building map of the room, and kinematic control for tracking some trajectory. I mean it should do PID control for motors, kinematic control for robot, sensor fusion for imu+encoders, communicate with PC (this is to do some computationally intensive tasks such as trajectory planning or to store maybe the complete map in pc etc.).&lt;/p&gt;&#xA;" OwnerUserId="23798" LastEditorUserId="23798" LastEditDate="2020-02-05T19:23:01.197" LastActivityDate="2020-04-01T12:35:18.837" Title="Arduino for mobile robot" Tags="&lt;mobile-robot&gt;&lt;arduino&gt;&lt;differential-drive&gt;" AnswerCount="3" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20133" PostTypeId="2" ParentId="20123" CreationDate="2020-02-04T18:32:30.467" Score="2" Body="&lt;p&gt;Yes that is correct. Easiest way is probably to work with the homogeneous 4x4 Tranform Matrix(&lt;span class=&quot;math-container&quot;&gt;$T$&lt;/span&gt;) composed of &lt;span class=&quot;math-container&quot;&gt;$\begin{bmatrix}R &amp;amp; t\\0 &amp;amp; 1\end{bmatrix}$&lt;/span&gt;. Then your new pose is then just &lt;span class=&quot;math-container&quot;&gt;$T_i$&lt;/span&gt; multiplied by &lt;span class=&quot;math-container&quot;&gt;$\Delta T_{i+1}^{i}$&lt;/span&gt;(relative transform). For every new relative transform just do this concatenation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So&#xA;&lt;span class=&quot;math-container&quot;&gt;$T_{i+1}=T_i*\Delta T_{i+1}^{i}$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depending on your ICP implementation you may actually get the inverse relative transform &lt;span class=&quot;math-container&quot;&gt;$\Delta T_{i}^{i+1}$&lt;/span&gt;. If this happens then just invert the matrix and continue as normal.&lt;/p&gt;&#xA;" OwnerUserId="15265" LastActivityDate="2020-02-04T18:32:30.467" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20134" PostTypeId="1" CreationDate="2020-02-04T23:45:22.153" Score="2" ViewCount="87" Body="&lt;p&gt;I don't have a physical robot but I would like to test the performance of my C++ code for odometry, SLAM, and path planning. Are there any good simulation software where I can test my algorithm implementation?&lt;/p&gt;&#xA;" OwnerUserId="23423" LastActivityDate="2020-02-06T12:14:06.047" Title="What Software Is Used For Autonomy Software Simulation?" Tags="&lt;slam&gt;&lt;simulation&gt;&lt;path-planning&gt;&lt;software&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20136" PostTypeId="2" ParentId="10050" CreationDate="2020-02-05T05:32:56.000" Score="-1" Body="&lt;p&gt;Estimates the location of features in the environment&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Estimates the position and orientation of the robot with respect to the environment&lt;/p&gt;&#xA;" OwnerUserId="24669" LastActivityDate="2020-02-05T05:32:56.000" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20137" PostTypeId="2" ParentId="20132" CreationDate="2020-02-05T07:48:42.473" Score="-2" Body="&lt;p&gt;You can try a board named teensy. It is programmed in the arduino IDE but it got much higher performance. &lt;/p&gt;&#xA;" OwnerUserId="21229" LastActivityDate="2020-02-05T07:48:42.473" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20141" PostTypeId="2" ParentId="16595" CreationDate="2020-02-05T22:30:06.243" Score="1" Body="&lt;p&gt;Strain wave gears have practically zero backlash and high torque density (i.e. torque per unit weight) compared to other solutions available.  Gearbox weight is important in articulated arms, since it adds to the weight of each link in succession.  The extra weight means that each actuator must provide additional torque to maintain a specific speed target, but higher rated torque requires more gearbox mass, which increases the torque requirement, etc., etc.  Ultimately, the arm speed ends up getting limited.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Strain wave gearing were invented in the 1950's.  There are a couple of start-ups working on alternative solutions today, but they are still the most popular high torque density solution on the market that has near-zero backlash.&lt;/p&gt;&#xA;" OwnerUserId="19893" LastActivityDate="2020-02-05T22:30:06.243" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20142" PostTypeId="2" ParentId="20134" CreationDate="2020-02-05T22:35:20.097" Score="1" Body="&lt;p&gt;If you want to test everything together then you need to setup a simulator like &lt;a href=&quot;http://gazebosim.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Gazebo&lt;/a&gt;(integrates well with ROS which I assume you are using). Other options could be &lt;a href=&quot;https://github.com/microsoft/AirSim&quot; rel=&quot;nofollow noreferrer&quot;&gt;Airsim&lt;/a&gt;, or some custom simulator. These options though and are more involved in required setup on your part.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Testing separately:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;SLAM is pretty easy to test. Just download some dataset such as &lt;a href=&quot;http://www.cvlibs.net/datasets/kitti/eval_odometry.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;KITTI&lt;/a&gt;, or &lt;a href=&quot;https://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets&quot; rel=&quot;nofollow noreferrer&quot;&gt;Euroc&lt;/a&gt;, and test your algorithm on their data. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For path planning I would take a look at what &lt;a href=&quot;https://ompl.kavrakilab.org/integration.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;OMPL&lt;/a&gt; integrates into, and setup your code in the same way.&lt;/p&gt;&#xA;" OwnerUserId="15265" LastActivityDate="2020-02-05T22:35:20.097" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20143" PostTypeId="2" ParentId="20132" CreationDate="2020-02-05T22:35:56.237" Score="2" Body="&lt;p&gt;It depends what Arduino you are going to use. I don't think that you can use Arduino Nano/Micro for this because you will not have enough I/O and memory. You can use Arduino Mega (maybe UNO) but you will have to utilize hardware interrupts for all the communication and measurement stuff. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have done a similar robot a few years ago utilizing interrupts only on Arduino MEGA 2560 runnig at 500 Hz (the computation for all PID regulators, IMU complementary filter and low pass filters for signals was made every 2ms).&#xA;Using interrupts you can drive up to 10x servo motors using just one timer, measure analog values by ADC, communicate using I2C/SPI/UART at almost no cost because all the work will be done by dedicated hardware and not by the CPU. This is why it is called a micro-controller and not a micro-processor. You will utilize the CPU just to process the results from the interrupts and compute values for PID regulators, filters, etc. The sad thing is that a lot of libraries are not using interrupt because it's easier that way and therefore waste a lot  of computation work just waiting for the result.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nowadays, I would use a little bit more powerfull Arduino or another board that can run some kind of RTOS e.g. FreeRTOS. For this project is the Arduino Mega 2560 the absolute minimal requirement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the answer is simple: Yes, you can use Arduino but the less powerfull board you utilize the more sophisticated solution you will have to make.&lt;/p&gt;&#xA;" OwnerUserId="14146" LastActivityDate="2020-02-05T22:35:56.237" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20144" PostTypeId="2" ParentId="15489" CreationDate="2020-02-05T22:53:18.643" Score="0" Body="&lt;p&gt;There are a few different types of diversity.  You can find a decent description &lt;a href=&quot;https://iarjset.com/upload/2016/april-16/IARJSET%2041.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.  The specs for your unit don't say what your unit has, but chances are it is a simple selection combiner that is determining which antenna element has the highest signal strength and switching to it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Whatever it is, it's not really something you have any control over, unless you are thinking of modifying the RF front end of your FPV.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What you might consider instead is replacing the stock antenna elements with a higher gain solution.  Your model's antennas screw in with a standard SMA connector, so you could take them out and maybe try something like &lt;a href=&quot;https://www.getfpv.com/index.php/lumenier-axii-long-range-5-8ghz-antenna-rhcp-2.html?ccartCamp=65956434.1&amp;amp;recoSrc=3m-dl-samesess-alpha-avt:8144,6m-dl-samesess-alpha-fbicp:8144,6m-dl-samesess-alpha-fbi:resultset&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt;, which also has an SMA connector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The challenge in all of this is that none of what we are looking at is military or industrial grade, so it's hard to gauge how much of what you might see is design-related or manufacturing quality related.   &lt;/p&gt;&#xA;" OwnerUserId="19893" LastActivityDate="2020-02-05T22:53:18.643" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20145" PostTypeId="2" ParentId="15293" CreationDate="2020-02-05T23:01:56.260" Score="1" Body="&lt;p&gt;The &lt;span class=&quot;math-container&quot;&gt;$m$&lt;/span&gt; in your equation looks like the symbol for mass.  Really it should be &lt;span class=&quot;math-container&quot;&gt;$M$&lt;/span&gt;, the inertia matrix, but maybe you meant this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are only dealing with a dual-link arm in a single plane, then you should be able to determine the inverse.  This is dealt with in a lot of books, but the clearest explanation I have found is in an old &lt;a href=&quot;https://people.csail.mit.edu/bkph/AIWP/AI_WP_099.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;MIT AI Lab paper&lt;/a&gt;.  See p.12ff.&lt;/p&gt;&#xA;" OwnerUserId="19893" LastActivityDate="2020-02-05T23:01:56.260" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20146" PostTypeId="1" CreationDate="2020-02-05T23:21:00.663" Score="0" ViewCount="125" Body="&lt;p&gt;I have a robot with four mecanum wheels (blue square) that can move in an open-space room.&#xA;The position x,y of the robot is measured in a very accurate way by a fixed position sensor (red circle) that is placed in the origin of the place and has coordinates (0,0,0). The position of the robot is updated at 10Hz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to make the robot follow different paths like the one from A to B as showed in the picture (in green color).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the best and accurate way to do that? &#xA;I think I should have to create the path like a series of x,y points and make the robot move towards them but I don't know how to derive the motion equations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can you give me some advices or examples, please?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/3f5ri.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3f5ri.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10626" LastActivityDate="2020-03-10T06:33:24.930" Title="Path-following algorithm and suggestions for mecanum robot" Tags="&lt;wheeled-robot&gt;&lt;navigation&gt;&lt;algorithm&gt;&lt;path-planning&gt;&lt;precise-positioning&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20150" PostTypeId="1" CreationDate="2020-02-06T10:03:44.293" Score="2" ViewCount="33" Body="&lt;p&gt;I have installed Ubuntu 14.04 and installed ROS Indigo in order to run the kuka_experimental source code which can be found on github. I have built the catkin workspace and compiled the kuka_experimental source without errors. How do I run or launch the various KUKA robot models in RViz simulation environment? Do I ROSLaunch kuka_eki_hw_interface or kuka_rsi_hw_interface or kuka_rsi_simulator and how do I view it in RViz? Also how to use MoveIt with this kuka_experimental package as there is no Indigo version of MoveIt and Kinetic version has compile errors and requires Ubuntu 18.04?&lt;/p&gt;&#xA;" OwnerUserId="24475" LastActivityDate="2020-02-06T10:03:44.293" Title="How To Run the kuka_experimental program on github In RViz?" Tags="&lt;robotic-arm&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20151" PostTypeId="2" ParentId="20134" CreationDate="2020-02-06T12:14:06.047" Score="3" Body="&lt;p&gt;There are quite a lot options for this, each with different features, strengths and weaknesses. A few examples:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://gazebosim.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Gazebo&lt;/a&gt; (as mentioned by &lt;a href=&quot;https://robotics.stackexchange.com/a/20142/&quot;&gt;edwinem&lt;/a&gt;): very well known in the robotics community, some would say it's a little bit dated&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://microsoft.github.io/AirSim/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Microsoft Airsim&lt;/a&gt; (also mentioned by &lt;a href=&quot;https://robotics.stackexchange.com/a/20142/&quot;&gt;edwinem&lt;/a&gt;): originally developed for autonomous drones and autonomous driving, uses the unreal engine for high image quality (experimental support for Unity)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://developer.nvidia.com/isaac-sdk&quot; rel=&quot;nofollow noreferrer&quot;&gt;NVIDIA Isaac SDK&lt;/a&gt;: a &quot;newcomer&quot; with a lot of manpower from NVIDIA in the background where the focus is more on indoor applications, also has the ability to &lt;a href=&quot;https://docs.nvidia.com/isaac/isaac/apps/samples/navigation_rosbridge/doc/ros.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;work with ROS&lt;/a&gt;. It uses the Unity engine for high quality image rendering (Unreal support was planned, but doesn't seem to get pursued at the moment)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://cyberbotics.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;webots&lt;/a&gt;: general purpose simulator with quite a few robot models included, has C++ and Python APIs and is known to work with ROS&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://robotbenchmark.net/&quot; rel=&quot;nofollow noreferrer&quot;&gt;robotbenchmark&lt;/a&gt;: builds on webots and allows you to develop your skills in different challenges presented on the website (note: the robot is programmed in Python, not C++)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="24677" LastActivityDate="2020-02-06T12:14:06.047" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20152" PostTypeId="2" ParentId="20146" CreationDate="2020-02-06T17:05:57.550" Score="0" Body="&lt;p&gt;You could try to implement a &lt;a href=&quot;https://www.ri.cmu.edu/pub_files/pub3/coulter_r_craig_1992_1/coulter_r_craig_1992_1.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;pure pursuit controller&lt;/a&gt;. &lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-02-06T17:05:57.550" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20154" PostTypeId="1" CreationDate="2020-02-07T05:38:49.460" Score="0" ViewCount="231" Body="&lt;p&gt;I just finished a competition for underwater robots. The water is about 40-50cm in depth and 90% of the designs just exposed the thrust motors completely in the water similar to the picture below and nothing happened during the competition. BTW, the water is tap water, not salt water.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/8yBls.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8yBls.jpg&quot; alt=&quot;exposed thrust motor&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I saw many questions and how-to articles about sealing the motor shaft for underwater ROV. I am not sure I understand the reason, especially after I found this reply to &lt;a href=&quot;https://robotics.stackexchange.com/a/303/16828&quot;&gt;Preventing leaks in motor shafts for underwater bots&lt;/a&gt;. Is it because of the concern of short circuit or wear and tear if water goes into the bearings? Or will things be very different when the robot has to go deeper?&lt;/p&gt;&#xA;" OwnerUserId="16828" LastEditorUserId="19515" LastEditDate="2020-07-25T00:36:30.957" LastActivityDate="2021-04-26T16:04:10.343" Title="Why to seal a motor shaft, or the whole motor, for underwater ROV?" Tags="&lt;motor&gt;&lt;underwater&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20155" PostTypeId="1" AcceptedAnswerId="20164" CreationDate="2020-02-07T18:09:56.440" Score="0" ViewCount="122" Body="&lt;p&gt;I have a differential drive robot that needs to move along a path stored in its memory as a spline. I am currently trying to understand the mathematics of determining how much power to apply to each wheel so that the net movement conforms to the path in memory. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;These papers have been helpful, but I am not sure I fully understand what to do:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=400295&amp;amp;tag=1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Auto Guided Vehicle Control&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.cc.gatech.edu/ai/robot-lab/online-publications/IROS2003Bezier.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mobile Robots at Your Fingertip&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;If I knew some mapping between wheel power differences and rates of rotation, maybe I could take the derivative of the curve at each point and then apply a rotation to the robot to bring my driving vector into alignment with the tangent vector?&lt;/p&gt;&#xA;" OwnerUserId="24682" LastEditorUserId="20709" LastEditDate="2020-02-11T00:20:01.717" LastActivityDate="2020-02-11T00:20:01.717" Title="Going from Spline to Differential Drive Command" Tags="&lt;control&gt;&lt;motion-planning&gt;&lt;differential-drive&gt;&lt;theory&gt;&lt;trajectory&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20157" PostTypeId="1" CreationDate="2020-02-07T21:22:47.533" Score="3" ViewCount="38" Body="&lt;p&gt;I am trying to drive a small motor using (software emulated PWM) from a Pi like device.  I'm following a circuit that looks like this:L&#xA;&lt;a href=&quot;https://www.instructables.com/id/Raspberry-Pi-GPIO-Circuits-Controlling-High-Powere/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.instructables.com/id/Raspberry-Pi-GPIO-Circuits-Controlling-High-Powere/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Main differences are:  My power source is a 3.74 LIPO battery, and my load is a motor, not an LED.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I turn the GPIO pin fully on (not even PWM at this point), I don't get the full speed of the motor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not really sure what I am missing in my understanding.&lt;/p&gt;&#xA;" OwnerUserId="21423" LastEditorUserId="110" LastEditDate="2020-02-11T20:23:14.783" LastActivityDate="2020-02-11T20:23:14.783" Title="Driving a small motor" Tags="&lt;motor&gt;&lt;raspberry-pi&gt;&lt;electronics&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20158" PostTypeId="2" ParentId="20157" CreationDate="2020-02-08T10:24:39.103" Score="1" Body="&lt;p&gt;Transistors have voltage drop too! Try measuring all voltages. What is the nominal voltage for the motor?&lt;/p&gt;&#xA;" OwnerDisplayName="user24605" LastActivityDate="2020-02-08T10:24:39.103" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20159" PostTypeId="1" AcceptedAnswerId="20160" CreationDate="2020-02-08T13:19:08.273" Score="-2" ViewCount="57" Body="&lt;p&gt;All cleaning robots I found so far sold in stores, for cleaning an house, are not walking robots but rather short, wheeled robots.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I assume that walking robots could have way more sophisticated maneuvers in cleaning as they could more easily climb stairs, and lean towards, or navigate in or operate tools in narrow caveats.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Should a walking robot necessarily be a better cleaning robot than a wheeled robot?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are there mathematical/algorithmic explanations to how (or something close)?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the phrasing of the question is bad, please help me by suggesting an edit or by comments.&lt;/p&gt;&#xA;" OwnerDisplayName="user16003" LastEditorUserId="15160" LastEditDate="2020-09-06T21:33:58.880" LastActivityDate="2020-09-06T21:33:58.880" Title="Should a walking robot necessarily be a better cleaning robot than a wheeled robot?" Tags="&lt;wheeled-robot&gt;&lt;walking-robot&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20160" PostTypeId="2" ParentId="20159" CreationDate="2020-02-08T14:40:52.583" Score="2" Body="&lt;p&gt;“Better” is ambiguous.  A walking robot could certainly get to some places that a wheeled robot could not - steps are a good example.  But it would have challenges getting low enough to go under some objects.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should consider the entire requirements of a vacuuming robot, though.  Access and navigation are just some of the requirements.  What about battery life?  Wheeled travel is more efficient on smooth surfaces than walking.  What about affordability?  Would you create a walking robot that can travel everywhere a human can, yet can only run for 5 minutes and costs more than a consumer is willing to spend?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;NASA has funded the development of a hybrid rolling/walking design that may help merge solutions to some of the competing requirements:  &lt;a href=&quot;https://technology.nasa.gov/patent/GSC-TOPS-43&quot; rel=&quot;nofollow noreferrer&quot;&gt;NASA Tech Transfer&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suggest that you consider the problem as a whole rather than focusing only on locomotion.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastEditorUserId="6941" LastEditDate="2020-02-12T13:15:19.957" LastActivityDate="2020-02-12T13:15:19.957" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20161" PostTypeId="2" ParentId="20159" CreationDate="2020-02-08T17:34:20.230" Score="0" Body="&lt;p&gt;This is a very subjective issue question. Better meaning what? Better battery life, cleaning, efficiency? Overall I think wheeled is better as the brushed motors for the wheels are easier to produce and way more reliable than a walker bot. Plus with a walker bot, I’m not sure about how you’d get it low enough to suck up any debris. &lt;/p&gt;&#xA;" OwnerUserId="24688" LastActivityDate="2020-02-08T17:34:20.230" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20162" PostTypeId="2" ParentId="20154" CreationDate="2020-02-08T17:40:25.777" Score="0" Body="&lt;p&gt;Brushed motors are functionally waterproof not by design but by principle (brushes sending power to a stator, spins the motor) and will run under water, albeit inefficiently. Most brushed motors have an internal fan for cooling so if the motor does not have that and uses bushings or sealed bearings for holding the rotor, it is at least acceptable for submersion. Most radio control brushed motors are actually recommended to be “broken in” to wear down the carbon enough for good efficiency by being run underwater and oiled/cleaned afterwards, and in most cases, it increases life and power of the motor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Rust however is still an issue but if you aren’t running it 24/7 and oil it afterwards, it’ll be fine. &lt;/p&gt;&#xA;" OwnerUserId="24688" LastActivityDate="2020-02-08T17:40:25.777" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20164" PostTypeId="2" ParentId="20155" CreationDate="2020-02-08T22:07:46.903" Score="1" Body="&lt;p&gt;If you have the path you want the robot to stay on, it sounds like you need &lt;em&gt;Pure Pursuit&lt;/em&gt;.  In this simple algorithm, you steer the robot to some look-ahead point on the path.  The gist of it is illustrated by this image.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.researchgate.net/profile/Dong-hyung_Kim/publication/258177250/figure/fig2/Figure-2-Geometry-of-the-pure-pursuit.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://www.researchgate.net/profile/Dong-hyung_Kim/publication/258177250/figure/fig2/Figure-2-Geometry-of-the-pure-pursuit.png&quot; alt=&quot;Geometry of Pure Pursuit&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The original paper is framed in terms of ackerman steering angle.  But it is easy to adapt to differential drive robots.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should tune the parameters to the speed of your robot and the types of paths you will be following (i.e. curvy or straight).  Choosing the right parameters can make the path follower seem &quot;under damped&quot; or &quot;over damped&quot;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/KVLel.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KVLel.png&quot; alt=&quot;Look ahead distance selection&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Original algorithm proposed here:&#xA;&lt;a href=&quot;https://www.ri.cmu.edu/pub_files/pub3/coulter_r_craig_1992_1/coulter_r_craig_1992_1.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Implementation of the Pure Pursuit Path Tracking Algorithm&lt;/a&gt;. R. Craig Coulter, CMU, 1992.  &lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2020-02-08T22:07:46.903" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20165" PostTypeId="1" CreationDate="2020-02-09T03:06:57.900" Score="1" ViewCount="40" Body="&lt;p&gt;The problem i have is more or less is biology related, but I can simplify the problem as such. I have a tank of water. I try to increase the concentration level of this tank of a certain substance (X) at a fixed rate. Too fast or slow of change of concentration X is undesirable. I have infusion of concentrated X solution to the tank, with known concentration but adjustable rate. And there is a unknown leak of fluid in the tank. Every fixed amount of time, I measure the concentration of the tank, and need to change the infusion rate such that the desired rate of change is achieved. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only mathematical relationship is as follows&#xA;Concentration = solute / volume of solvent&lt;/p&gt;&#xA;&#xA;&lt;p&gt;New concentration = (tank volume x tank solute concentration + infusion rate x infusion solute concentration - loss volume x loss solute concentration ) / (tank volume + infusion rate - loss volume)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How would I design such control system? &lt;/p&gt;&#xA;" OwnerUserId="24689" LastEditorUserId="24689" LastEditDate="2020-02-09T03:21:42.007" LastActivityDate="2020-02-09T03:21:42.007" Title="Constructing control system" Tags="&lt;control&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20166" PostTypeId="1" CreationDate="2020-02-09T23:22:22.570" Score="0" ViewCount="80" Body="&lt;p&gt;I have a ROS node that seems to exit immediately or not even run at all. I have test print statements before the main loop and it never seems to get to that point. roscore is running and no error messages appear in the terminal window.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;ros/ros.h&amp;gt;&#xA;#include &amp;lt;iostream&amp;gt;&#xA;&#xA;#define ROS_LOOP_RATE 2000&#xA;&#xA;int main(int argc, char* argv[])&#xA;{&#xA;&#xA;    std::cout &amp;lt;&amp;lt; &quot;TEST1\n&quot;;&#xA;    ros::init(argc, argv, &quot;network_wdg_node&quot;);&#xA;&#xA;    std::cout &amp;lt;&amp;lt; &quot;TEST2\n&quot;;&#xA;    ros::NodeHandle wdgNodeHandle(&quot;~&quot;);&#xA;&#xA;    std::cout &amp;lt;&amp;lt; &quot;TEST3\n&quot;;&#xA;    ros::Rate loop_rate(ROS_LOOP_RATE);&#xA;&#xA;    std::cout &amp;lt;&amp;lt; &quot;TEST4\n&quot;;&#xA;&#xA;    while(ros::ok())&#xA;    {&#xA;        std::cout &amp;lt;&amp;lt; &quot;INSIDE LOOP\n&quot;;&#xA;        ros::spinOnce();&#xA;        loop_rate.sleep();&#xA;    }&#xA;    return 0;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Here's my terminal output:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[rosrun] Looking in catkin libexec dirs: &#xA;/home/catkin_ws/devel/lib/test&#xA;/home/catkin_ws/devel/share/test&#xA;/home/catkin_ws/src/test&#xA;[rosrun] Looking in rospack dir: /home/catkin_ws/src/test&#xA;[rosrun] Searching for network_wdg_node with permissions /111&#xA;[rosrun] Running  /home/catkin_ws/devel/lib/network_wdg/test_node&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I can't seem to figure out why the node doesn't start running or even get to the first debug statement. &lt;/p&gt;&#xA;" OwnerUserId="24693" LastActivityDate="2020-02-09T23:22:22.570" Title="rosrun does not appear to do anything. Node exits immediately" Tags="&lt;ros&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20169" PostTypeId="1" CreationDate="2020-02-12T14:11:10.257" Score="0" ViewCount="69" Body="&lt;p&gt;We need to estimate the position and orientation of differential drive robot by using encoders and imu sensor. For this specific case, is there any advantage of using Kalman filter than taking the average of encoder data and imu data. What I mean by taking the average is finding position at each sampling step by using encoders and imu seperately and taking our estimate at that time instant as the weighted average of encoders and imu. For next time step use this estimate as previous position value for both encoders and imu and then again calculate the individual estimates and take again the weighted average as final estimate. And continue this way. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If Kalman filter would do a better job than this simple weighted averaging, could you please explain intuitively why. &lt;/p&gt;&#xA;" OwnerUserId="23798" LastActivityDate="2020-03-15T13:02:00.363" Title="Advantage of Kalman filter in differential drive planar robot" Tags="&lt;mobile-robot&gt;&lt;kinematics&gt;&lt;kalman-filter&gt;&lt;differential-drive&gt;&lt;estimation&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20170" PostTypeId="2" ParentId="14878" CreationDate="2020-02-12T15:37:40.107" Score="1" Body="&lt;p&gt;Check UUV Simulator and UWSIM.&lt;/p&gt;&#xA;" OwnerUserId="24706" LastActivityDate="2020-02-12T15:37:40.107" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20171" PostTypeId="1" CreationDate="2020-02-12T16:54:18.153" Score="0" ViewCount="36" Body="&lt;p&gt;Apart from kinematics, what do i need to know about the dynamics and other things of a robot in order to calculate the angles of the joints for positions of the end effector exactly? that means: if i have a working model of a robot in matlab without considering masses and friction, will the end effector move according to the simulations in matlab?&lt;/p&gt;&#xA;" OwnerUserId="24707" LastActivityDate="2020-02-12T16:54:18.153" Title="What do I need to know about the dynamics of an industrial robot?" Tags="&lt;kinematics&gt;&lt;inverse-kinematics&gt;&lt;dynamics&gt;&lt;industrial-robot&gt;&lt;forward-kinematics&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20172" PostTypeId="2" ParentId="18365" CreationDate="2020-02-12T19:43:29.797" Score="1" Body="&lt;p&gt;So there's a couple of things you need to go through when choosing the power supply for this application. Number one you need to differentiate between the driver capabilities and the motors requirements.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now the motor you have listed is no longer available on the website, but I found several motors on the website that are similar to what you have listed.  The data sheets are a bit sparse, but the current requirements and recommended running voltages for the motor are what you're looking for. The MTBF (Mean time between failures) for &lt;a href=&quot;https://www.omc-stepperonline.com/download/34HE59-6004D-E1000.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;the motor I found&lt;/a&gt; is measured at 24v(though Nema34 are typically driven at at least 48v) and the current per phase is listed at 6A.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have 4 of these motors working at full torque capacity that means you'll need 48v at 24A. though you probably want to give yourself some overhead on current. Most of the time a 20% overhead margin is recommended. That would mean you'd need a 48v ~30A power supply if you were planning on fully loading all 4 motors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, since this is a CNC machine, and it is very unlikely that you'll ever have more than 2 motors working fully at any given time we have a bit of wiggle room. So if we assume the maximum load we're ever likely to see will be the equivalent of 2.5 motors working at full  torque capacity, that means we're down to about 15A, so with a margin of error a 48v 18A power supply should do nicely for your application. The closest thing they have on the website you have listed is &lt;a href=&quot;https://www.omc-stepperonline.com/power-supply/1000w-48v-21a-115230vac-switching-power-supply-stepper-motor-cnc-kits-s-1000-48.html?mfp=47-output-voltage-v%5B48%5D&quot; rel=&quot;nofollow noreferrer&quot;&gt;a 48v 1000W (21A)&lt;/a&gt; supply which would work well. It's always better to overshoot on the capacity of your power supply than to under-spec it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now this is another component of this to deal with. You mentioned a 60v power supply. If you are familiar with Ohm's law you might be inclined to think you could get away with a 60v power supply with equivalent wattage. That's not quite the case though, as the way stepper motors and drivers work, they are designed to hold a constant current regardless of input voltage. If you go up in voltage you'll need a higher wattage power supply to still be able to deliver the necessary current.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as unregulated, I would definitely not consider an unregulated power supply for any sensitive operations due to the high voltage ripple, and I don't think you'll be able to find one that would deliver the necessary wattage at a reasonable price. Typically they are limited to low current linear supplies. Unregulated supplies that could deliver the necessary current are extremely expensive, and you would still have the issues with the ripple voltage. The higher the load on the supply the larger the ripple in the voltage, so with a potential draw of 15A or more, you'll see tremendous fluctuations in the output voltage.  This would be pretty disastrous on a CNC machine.&lt;/p&gt;&#xA;" OwnerUserId="24493" LastActivityDate="2020-02-12T19:43:29.797" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20174" PostTypeId="1" CreationDate="2020-02-12T21:32:19.460" Score="0" ViewCount="66" Body="&lt;p&gt;I am tasked with building a robot that needs to localise and navigate itself on a rectangular surface (like a large desk). The rectangle's shorter sides will be marked with a red tape (or with two different colours if need be), while the longer edges are marked with a black tape. My robot is fitted with a forward facing camera, orientated downward slightly, as well as 6 sonar sensors around it's perimeter to detect any of the edges of the rectangle. There is also an IMU and encoders on each wheel (this is a two wheeled robot, with the third point of contact being a trolley wheel). The size of the rectangle is known and thus a map of it is available. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My questions are thus these:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Using the camera( I have both a wide angle cam or a standard camera at my disposal) how would I be able to find useful information from the edges of the rectangle. Obviously not all the rectangle edges will be in frame of the camera simultaneously, but what ros packages/methods could I use to gather information from them using the different colours of tape.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If/once I have information about the edges, are there any navigation tools that would allow me to do a sweep over the whole mirror (such as a lawnmower over a garden) to navigate the whole surface area. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;What is the simplest way to get the sonar's to prevent the robot driving off the edge, given that they are downward facing? &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The biggest challenge here seems to be that there is no real absolute reference, as the nature of the project requires the robot to localize itself only from data on the rectangle. &lt;/p&gt;&#xA;" OwnerUserId="23873" LastEditorUserId="20709" LastEditDate="2020-02-14T07:34:54.237" LastActivityDate="2021-03-10T09:08:35.880" Title="Planar Robot Boundary Detection" Tags="&lt;ros&gt;&lt;cameras&gt;&lt;line-following&gt;&lt;visual-odometry&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20175" PostTypeId="1" CreationDate="2020-02-13T14:30:45.487" Score="2" ViewCount="34" Body="&lt;p&gt;ServoCity sells a great little 2:1 bevel gear ratio set: &lt;a href=&quot;https://www.servocity.com/2-1-bevel-gear-set-1-4-bore-pinion-1-4-bore-spur&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.servocity.com/2-1-bevel-gear-set-1-4-bore-pinion-1-4-bore-spur&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have it currently set up in my project and was thinking a 1:1 gear ratio might be better suited for my purposes.  All over the site it says the 13t gear must be paired with the 26t gear. Is there any reason why pairing two 13t gears together wouldn't work?  I can't see why not, but, I want to confirm with people smarter than me. &lt;/p&gt;&#xA;" OwnerUserId="24715" LastActivityDate="2020-02-13T14:30:45.487" Title="Bevel Gear Compatibility" Tags="&lt;gearing&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20177" PostTypeId="2" ParentId="20174" CreationDate="2020-02-13T22:54:21.563" Score="0" Body="&lt;ol&gt;&#xA;&lt;li&gt;Since the lines are (usually) going to be perpendicular to the normal vector of your image, you can sample columns and use a &lt;a href=&quot;https://en.wikipedia.org/wiki/Butterworth_filter&quot; rel=&quot;nofollow noreferrer&quot;&gt;Butterworth filter&lt;/a&gt; to extract the &quot;peak&quot; frequencies (must be configured towards the desired line coloration). Converting to a gray scale first is typically more effective. This will give you the location of the line in your image. To find the exact color, just search the image at that specific location and check the RGB values (using an admissible range). &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;For dealing with corners, you can apply the filter to both a column and row and check both. If you are using python, you can see the &lt;a href=&quot;https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.butter.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;SciPy Butterworth Filter&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;&lt;p&gt;Assuming you have a sufficiently accurate controller, you can solve this issue with way-point navigation and short term dead reckoning (which is where IMUs are most effective).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;To answer this part (accurately), we need more information about the physical configuration of your sonar sensors w.r.t. the rest of your system.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="20709" LastActivityDate="2020-02-13T22:54:21.563" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20179" PostTypeId="1" CreationDate="2020-02-14T11:59:46.337" Score="0" ViewCount="38" Body="&lt;p&gt;I have to use LIDAR in my project. I was searching for some LIDARs with a camera and came across the &lt;a href=&quot;https://www.intelrealsense.com/introducing-intel-realsense-d400-product-family/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Intel RealSense d400 series&lt;/a&gt;. I know it has a camera but please suggest a way to use that camera along with getting the distance from the sensor in python.&lt;/p&gt;&#xA;" OwnerUserId="24719" LastEditorUserId="17029" LastEditDate="2020-02-14T12:05:38.113" LastActivityDate="2020-02-14T12:05:38.113" Title="Use Realsense camera to get the camera image" Tags="&lt;cameras&gt;&lt;python&gt;&lt;lidar&gt;" AnswerCount="0" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="20180" PostTypeId="2" ParentId="20169" CreationDate="2020-02-14T12:36:11.277" Score="2" Body="&lt;p&gt;It seem that your are missing some intuition about the function of a Kalman filter type filtering method. To a large degree the working principle of the Kalman filter is combining information from different sources in order to create estimates greater than the measurements from either individual sensor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The advantage of the Kalman filter is that it offers a very mathematically &quot;correct&quot; way of doing so in addition to having the capability to filter away some measurement noise simultaneously, which a pure averaging type approach may not.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is an extremely brief overview, for more information I have found that &lt;a href=&quot;https://github.com/rlabbe/Kalman-and-Bayesian-Filters-in-Python&quot; rel=&quot;nofollow noreferrer&quot;&gt;this book&lt;/a&gt; is a very nice resource. That being said it may not be as mathematically rigorous as some others, e.g. &lt;em&gt;Optimal and Robust Estimation&lt;/em&gt; or &lt;em&gt;Introduction to Random Signals and Applied Kalman Filtering&lt;/em&gt; or other such textbooks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;TLDR: Yes a Kalman filter would very likely perform better at the cost of effort/complexity. &quot;Explain a Kalman filter&quot; is a very non-trivial task, for which I refer you to some texts.&lt;/p&gt;&#xA;" OwnerUserId="23193" LastActivityDate="2020-02-14T12:36:11.277" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20181" PostTypeId="2" ParentId="20112" CreationDate="2020-02-14T16:07:37.827" Score="1" Body="&lt;p&gt;The problem with vacuum pick and place systems is the amount of time it takes to create the vacuum, so your design will revolve around your requirements.&lt;/p&gt;&#xA;&lt;h1&gt;Vacuum&lt;/h1&gt;&#xA;&lt;p&gt;If you run the vacuum continuously then, as you approach your target, you only have to wait long enough for the channels on your pick-up head to evacuate.&lt;/p&gt;&#xA;&lt;p&gt;If you switch off the vacuum pump, air rushes into the tubing, equalising at atmospheric pressure. The next time you want to pick, you need to evacuate all of the tubing between head and pump. This could take a long time, even if you have a vacuum 'reservoir' much larger than the volume of your tubing.&lt;/p&gt;&#xA;&lt;p&gt;In between these would be a vacuum solenoid close to the pick-up head. Here most of the tubing would stay evacuated, and you would only have to evacuate the pick-up head channels and the short tubing to the solenoid. This does require you to run power and control all the way to the head, though.&lt;/p&gt;&#xA;&lt;p&gt;The greater the volume of tubing on the open air side of the solenoid, the greater the time would be from switching the solenoid to their being sufficient vacuum.&lt;/p&gt;&#xA;&lt;h1&gt;Venturi&lt;/h1&gt;&#xA;&lt;p&gt;With a venturi generator, you can site it next to the head, keeping the volume to evacuate low, while putting the solenoid at the other end of the tube. High pressure air will rush into that tube much more quickly than the air could be evacuated, so you effectively get the best of both worlds. Fast actuation, but no need to add solenoids and run power and control to the head.&lt;/p&gt;&#xA;&lt;h1&gt;Comparison&lt;/h1&gt;&#xA;&lt;p&gt;Price and the difference in pressure differentials are the big advantages of compressed air. Air compressors can easily and cheaply supply air to a venturi generator, and can cope more easily with large changes in demand.&lt;/p&gt;&#xA;&lt;p&gt;A typical workshop compressor might store 100l of air at 8 bar and be rated at 410 litres/minute (14.5cfm). This could run venturi generators needing 80 litres/minute with the 5:1 duty cycle suggested in your quote. During that 15 second cycle, pressure would fall from 8 bar to around 7.8 bar until the pump kicks in again. This variation should be negligible in terms of pick-up performance.&lt;/p&gt;&#xA;&lt;p&gt;We could do something similar with a vacuum vessel, have a higher flow vacuum pump, a vacuum 'storage' vessel, and run it with a 3:12s duty cycle, but there are problems with this. We would need a much higher flow rate (and cost) pump. Vacuum vessels can have at most 1 atmosphere of pressure differential, in practice much less, so a 100l tank could never 'store' more than 100l of vacuum, and a 0.3bar (10&amp;quot;Hg) vacuum vessel would need to be around 2500 litres in size, to have a similar pressure variation over the duty cycle as with a 100l compressed air solution. Flow rate is affected significantly by current pressure in the storage vessel:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://fluidpowerjournal.com/pump-or-venturi/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fhYhS.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1&gt;Summary&lt;/h1&gt;&#xA;&lt;p&gt;In summary, almost all of the vacuum based pick and place machines I've worked on have used venturi generators. Vacuum pumps always have to be sized according to maximum required vacuum, assuming no storage, whereas compressed air systems can usually be sized based on average use.&lt;/p&gt;&#xA;&lt;p&gt;If you need constant vacuum, pumps may be better, but if demand varies significantly from second to second, as it probably does in a pick and place machine, venturi may be a better fit.&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2020-02-15T17:35:37.623" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20183" PostTypeId="2" ParentId="8757" CreationDate="2020-02-14T18:03:41.590" Score="0" Body="&lt;p&gt;FastSLAM 2.0 separates the estimation of the state of the vehicle from the state of the map, which in this case, is the set of landmarks one is using to self-localize.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If one were to use a grid based variant of the fast slam one would not need to estimate the state of each landmark via an EKF however, each particle should keep a its own estimate of the map. This is followed by a resampling step&lt;/p&gt;&#xA;" OwnerUserId="24720" LastActivityDate="2020-02-14T18:03:41.590" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20184" PostTypeId="2" ParentId="9625" CreationDate="2020-02-14T18:23:11.340" Score="0" Body="&lt;p&gt;1- to calculate the probability of the pose of the robot you can use a particle filter, it is easy and efficient&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2- the motion model depends on your vehicle/robot, is it a differential drive, an ackerman etc. &lt;/p&gt;&#xA;" OwnerUserId="24720" LastActivityDate="2020-02-14T18:23:11.340" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20185" PostTypeId="2" ParentId="12643" CreationDate="2020-02-14T18:35:47.637" Score="0" Body="&lt;p&gt;1- A occupancy grid map is simply a 2D array&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2- if you have a map and you just want to locate the robot/vehicle you can use a particle filter, it is easy and efficient&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3- it seems you want to SLAM, so you can use an algorithm called grid based fastslam 2.0, it uses particle filters and grid maps, you can find on this site some explanations of fastslam&lt;/p&gt;&#xA;&#xA;&lt;p&gt;a- in summary, you use a particle filter to localize the robot, this is done by using the motion model and scan matching&lt;/p&gt;&#xA;&#xA;&lt;p&gt;b- then you map your lidar scan &lt;/p&gt;&#xA;&#xA;&lt;p&gt;c- then you resample your particle&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS: each particle saves a full map with it&lt;/p&gt;&#xA;" OwnerUserId="24720" LastActivityDate="2020-02-14T18:35:47.637" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20186" PostTypeId="5" CreationDate="2020-02-14T19:50:59.250" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2020-02-14T19:50:59.250" LastActivityDate="2020-02-14T19:50:59.250" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20187" PostTypeId="4" CreationDate="2020-02-14T19:50:59.250" Score="0" Body="Questions related to the Yaskawa SmartPendant robot teach pendant." OwnerUserId="16622" LastEditorUserId="16622" LastEditDate="2020-02-15T17:36:39.630" LastActivityDate="2020-02-15T17:36:39.630" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20188" PostTypeId="5" CreationDate="2020-02-14T19:52:29.210" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2020-02-14T19:52:29.210" LastActivityDate="2020-02-14T19:52:29.210" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20189" PostTypeId="4" CreationDate="2020-02-14T19:52:29.210" Score="0" Body="Questions related to Yaskawa Motoman industrial robots, controllers, vision cameras, drives and related." OwnerUserId="16622" LastEditorUserId="16622" LastEditDate="2020-02-15T17:36:49.140" LastActivityDate="2020-02-15T17:36:49.140" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20191" PostTypeId="1" AcceptedAnswerId="20192" CreationDate="2020-02-15T15:08:11.707" Score="0" ViewCount="33" Body="&lt;p&gt;After having set up the inverse kinematics for each intermediate point on a line that the tcp is supposed to travel, I encountered a problem that stops the tcp when it is supposed to travel along the line. While all other joints do not have to make big changes  in the joint angles between the intermediate points, a joint has to rotate from -1 rad to 1 rad between two intermediate points, which is a very big rotation compared to the other joints. I understand that all joints have to make a different amount of angle change between two intermediate points, but the joint that has to do the large angle change cannot rotate as fast to compensate for this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Should the other joints wait until the rotation of the joint is finished and then continue with the interpolation? This seems to be the only reasonable solution for me. However, this would mean a short interruption of the movement of the tcp on the line.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore, I am confused by tasks that require the tcp to move at a constant speed on a line&lt;/p&gt;&#xA;" OwnerUserId="24707" LastActivityDate="2020-02-15T16:42:05.727" Title="How to deal with a joint suddenly having to make a large change in angle during linear interpolation?" Tags="&lt;kinematics&gt;&lt;motion-planning&gt;&lt;path-planning&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20192" PostTypeId="2" ParentId="20191" CreationDate="2020-02-15T15:13:04.780" Score="0" Body="&lt;p&gt;It sounds as if the path the robot is traversing comes close to a singularity.  This could be a wrist or an arm singularity.  For these situations, you only have two options with this type of robot:  either slow the path speed (possibly by setting your interpolation points closer together), or move the path within the robot’s workspace to avoid the singular configuration.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you don’t do these, the tcp will deviate from the path (if you don’t wait for the large joint motion to complete), or it will dwell along the path (if you do wait for the large joint motion to complete).  This is what makes singularities so challenging for tasks which require a certain path speed, such as seam welding or grinding.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastEditorUserId="11125" LastEditDate="2020-02-15T16:42:05.727" LastActivityDate="2020-02-15T16:42:05.727" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="20193" PostTypeId="1" CreationDate="2020-02-15T17:03:33.013" Score="0" ViewCount="77" Body="&lt;p&gt;I am building my own autonomous quadcopter. I wish to simulate it using V-REP/Gazebo in order to tune the flight controller. I see that there are inbuilt models but they have properties(physical dimensions and mass among others) very different from the one I am building. &lt;br&gt; &#xA;1) Can I modify these models so that it can simulate my drone? Is it enough to change the geometry, mass and inertias to make it work? &lt;br&gt;2) Do I have to deal with the physics and aerodynamics? Or do these simulators take care of it? If not what is there primary purpose of these simulators? &lt;br&gt;3) What is the process in general of simulating your hardware(in this case the quadcopter) in these simulators? &lt;/p&gt;&#xA;" OwnerUserId="24289" LastActivityDate="2020-02-17T17:30:37.073" Title="How to simulate a quadcopter using robotics simulator?" Tags="&lt;quadcopter&gt;&lt;simulation&gt;&lt;gazebo&gt;&lt;simulator&gt;&lt;robot-model&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20198" PostTypeId="2" ParentId="19732" CreationDate="2020-02-17T07:51:23.663" Score="0" Body="&lt;p&gt;In the introduction to the paper &lt;a href=&quot;https://pdfs.semanticscholar.org/e2dc/0dbb9fec9526b6c92ebdda8786189f3ebe75.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Efficient Method for redundancy resolution of a 7 DOF Manipulator&lt;/a&gt;, by Mihai CRENGANIS &amp;amp; Octavian BOLOGA, they say:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;A robotic arm with seven degrees of freedom (DOF) has numerous advantages because it gains a vast working space and high mobility and therefore it can be used in the automotive, aerospace industry and medical domains.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="20795" LastEditorUserId="37" LastEditDate="2020-02-17T14:30:17.410" LastActivityDate="2020-02-17T14:30:17.410" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20199" PostTypeId="1" CreationDate="2020-02-17T09:01:46.867" Score="0" ViewCount="28" Body="&lt;p&gt;Collegues, i am a little discouraged by the lack of a clearly formed section in the literature on which algorithms are used to control the low-speed movement of gearless robots.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my opinion, it is extremely important to take into account friction, disturbances in the measurement of controlled parameters, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In this case, conventional PI, PID controllers are not suitable.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems to me that you need to start by studying specific examples of such systems. For example, I noticed the book &lt;a href=&quot;https://www.springer.com/gp/book/9781846283048&quot; rel=&quot;nofollow noreferrer&quot;&gt;Hard Disk Drive Servo Systems&lt;/a&gt;. Robust control is commonly used here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What pushes me away is that the system can be unsteady and indefinite, and robust synthesis requires an accurate mathematical model.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Perhaps special adaptive algorithms are needed?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Are my arguments true, or is it worth going the other way?&#xA;Can anyone advise several sources from which you can begin to study the issue?&lt;/p&gt;&#xA;" OwnerUserId="24481" LastActivityDate="2020-02-17T09:01:46.867" Title="Algorithms for controlling low-speed movement of gearless robots" Tags="&lt;control&gt;&lt;algorithm&gt;&lt;movement&gt;" AnswerCount="0" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="20200" PostTypeId="1" CreationDate="2020-02-17T12:10:55.287" Score="0" ViewCount="44" Body="&lt;p&gt;In my textbook about industrial robots it says that if the angle q5 in this robot is equal to 0, there are infinite solutions for the angles q4 and q6. I understand this part, but I have a problem with the equation below.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a solution for this the book says f(q4,q6) = c1*(q4A - q4)^2 + c2*(q6A-q6)^2 = MIN &lt;/p&gt;&#xA;&#xA;&lt;p&gt;q4A and q6A are the joint angles calculated from the previous backward transformation when driving a robot path. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;By the above equation, a solution for q4 and q6 is taken which is closest to the previous solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Between two IK solutions (intermediate points) on a line that the TCP must travel, Q4 must rotate from -pi/2 to -3/2*pi, and Q6 must rotate from pi/2 to -pi/2. Both joints must therefore cover a rotation of -pi.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the formula would be: c1*(-pi/2 - (-3/2*pi))^2 + c2*(pi/2-(-pi/2))^2&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since I do not know c1 and c2 and the book does not tell me how to determine them, I cannot calculate a solution. How do I calculate the angles for Q4 and Q6?&lt;/p&gt;&#xA;" OwnerUserId="24707" LastActivityDate="2020-02-17T12:10:55.287" Title="Problem with solution (equation) for wrist singularity" Tags="&lt;kinematics&gt;&lt;inverse-kinematics&gt;&lt;motion-planning&gt;&lt;path-planning&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20201" PostTypeId="2" ParentId="20193" CreationDate="2020-02-17T17:30:37.073" Score="1" Body="&lt;p&gt;I have never used it ,because I have always dealt with custom simulators but I know others have had success with the &lt;a href=&quot;https://github.com/ethz-asl/rotors_simulator&quot; rel=&quot;nofollow noreferrer&quot;&gt;RotorS&lt;/a&gt; simulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Answers to your questions:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;1) Can I modify these models so that it can simulate my drone? Is it enough to change the geometry, mass and inertias to make it work? &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Kind of. You could just take one of their existing models, and change the mass and geometry. However, you would be using their hardware models for the motors which will give you slightly different results.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;2) Do I have to deal with the physics and aerodynamics? Or do these&#xA;  simulators take care of it? If not what is there primary purpose of&#xA;  these simulators?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The simulator will do the basic dynamics, and physics. For aerodynamics they usually do take care of things like rotor drag, and RotorS even has the capability of adding a wind field.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;3) What is the process in general of simulating your hardware(in this&#xA;  case the quadcopter) in these simulators?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Don't understand exactly what you mean here. You can simulate your hardware in regards to setting accurate values for your motors, and inertial sensors. You can also setup &lt;a href=&quot;https://github.com/ethz-asl/rotors_simulator/wiki/Setting-up-RotorS-as-Fixed-Wing-HiL-Simulation-(Pixhawk,-Mavros,-Mavlink,-QGC)&quot; rel=&quot;nofollow noreferrer&quot;&gt;hardware in the loop with the pixhawk&lt;/a&gt; if you want to test your system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To end it I would also say the purpose of these simulators is more to test the validity of your algorithms (mostly control, and some path planning) rather than to tune your flight controller. To tune something you want an accurate physical model, which is hard to come by in simulation. It either requires you generally doing a lot of experiments to get accurate values, or some kind of System ID algorithm. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your case it sounds like some kind of autotuning algorithm may be better as found on the pixhawk.&lt;/p&gt;&#xA;" OwnerUserId="15265" LastActivityDate="2020-02-17T17:30:37.073" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20203" PostTypeId="1" CreationDate="2020-02-18T00:02:58.930" Score="0" ViewCount="24" Body="&lt;p&gt;I've been asked to show that if a manipular is at a singular configuration, then the End Effector wrench can be balanced without any joint torques.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that t = J*F where (t = torques, F= end effector forces, J is the Jacobian). Hence F = (pinv(J))*t. Hence, if J is singular, then we cannot invert it and find F, as the inverse of J is effectively infinity. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here however, I basically have been asked to show that there is 0 torque for any end effector wrench F. Which is similar to Ax=0&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How would I proceed?&lt;/p&gt;&#xA;" OwnerUserId="10379" LastActivityDate="2020-02-18T00:02:58.930" Title="Singular Configuration - Balanced Wrench F?" Tags="&lt;torque&gt;&lt;jacobian&gt;&lt;force&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20204" PostTypeId="2" ParentId="19732" CreationDate="2020-02-18T02:17:21.297" Score="2" Body="&lt;p&gt;You need +1 joints than DOF so that the robot has multiple possible robot pose with which end-effector can reach a point in cartesian space. &lt;/p&gt;&#xA;" OwnerUserId="21443" LastActivityDate="2020-02-18T02:17:21.297" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20205" PostTypeId="1" CreationDate="2020-02-18T05:13:31.293" Score="1" ViewCount="20" Body="&lt;p&gt;I am using image based visual servoing using an eye-in-hand camera. However the camera's motion sometimes servos such that the image features are out of the field of view,and servoing stops. Is there any way to constrain the camera motion such that the image features always remain within the camera field of view ?&lt;/p&gt;&#xA;" OwnerUserId="24729" LastActivityDate="2020-02-18T05:13:31.293" Title="Constraining Field of view in visual servoing" Tags="&lt;visual-servoing&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20210" PostTypeId="1" CreationDate="2020-02-18T12:06:38.560" Score="1" ViewCount="44" Body="&lt;p&gt;First let me explain the problem. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;This is a maze made only out of black lines on a white surface. The robot has only a few IR sensors which can sense the position of the line. No other sensory input is available.&lt;/strong&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a maze with many self-loops and so a simple LSRB or equivalent algorithm wont work. &#xA;The robot is supposed to learn the maze and then solve it as optimally as possible . &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The above figure represent the possible intersections as all the paths are at 90deg to each other. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as my understanding goes, the robot will first scan how many nodes there are, and what their connections to each other is, thus effectively constructing the graph. Next, implement any shortest path algorithm and make your robot follow it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, the main problem that i cant get my head around is this: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;How will this blind robot know it isnt viewing the same node multiple &#xA;   times if it keeps coming back to the same point after getting caught in&#xA;   a loop?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, please suggest good approaches to solving this problems along with any experience anybody has. How does one shot searching methods like DFS , Iterative deepeing DFS , hill climbing work in such scenarios ? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/wjK8m.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wjK8m.png&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The arrow indicates the direction of the robot and the black lines represent the track, which the robot has to follow . &lt;/p&gt;&#xA;" OwnerUserId="24739" LastActivityDate="2020-02-18T12:06:38.560" Title="How to find the optimal path for a line following maze robot?" Tags="&lt;mobile-robot&gt;&lt;arduino&gt;&lt;motion-planning&gt;&lt;mapping&gt;&lt;line-following&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20212" PostTypeId="1" CreationDate="2020-02-19T01:05:17.687" Score="0" ViewCount="41" Body="&lt;p&gt;I want to be able to monitor the voltage of two 12V lead acid batteries in my system, and have the voltage reading to be displayed on a UI designed on QTcreator.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;One way I've thought of is to interface the two through ROS if the battery voltage reader is able to output signals. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone have any product recommendation or idea to achieve the aim? Thanks.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*Update for those who might be facing the same situation: &#xA;I'm using a voltage reader that supports modbus communication, and using a python library (minimalmodbus) found on GitHub for the modbus communication. Will be writing a node on ROS to publish the data. &lt;/p&gt;&#xA;" OwnerUserId="24743" LastEditorUserId="24743" LastEditDate="2020-02-21T10:06:35.920" LastActivityDate="2020-02-21T10:06:35.920" Title="Monitoring battery voltage for interfacing with UI on QT creator" Tags="&lt;ros&gt;&lt;battery&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20214" PostTypeId="1" CreationDate="2020-02-19T04:00:06.813" Score="1" ViewCount="34" Body="&lt;p&gt;As per my knowledge, the workspace of a manipulator can be determined if one knows the forward and inverse kinematics. But is it possible that the workspace of the manipulator can change after considering the effects of dynamics?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In other words, can I determine the workspace of a manipulator only from its kinematic model? Or do I need to consider the dynamic model as well?&lt;/p&gt;&#xA;" OwnerUserId="24611" LastActivityDate="2020-03-11T18:25:59.117" Title="Can workspace of a manipulator change after considering its dynamics?" Tags="&lt;inverse-kinematics&gt;&lt;dynamics&gt;&lt;manipulator&gt;&lt;forward-kinematics&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20215" PostTypeId="2" ParentId="20214" CreationDate="2020-02-19T04:09:44.817" Score="5" Body="&lt;p&gt;The workspace of a manipulator is strictly determined by its kinematics.  Since kinematics only consider the geometry of motion, without regard to forces and torques needed to accomplish tasks, you need the dynamics (and controls) to determine what motion profiles are achievable within the workspace.  But those dynamics do nothing to determine the workspace itself. &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2020-02-19T04:09:44.817" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20217" PostTypeId="1" CreationDate="2020-02-19T17:43:50.177" Score="1" ViewCount="67" Body="&lt;p&gt;i've been researching robotic arms for a personal project. I'm a computer engineering student, made some projects with arduino but my knowledge about robotics is currently limited.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So i was wondering, what was the limitations of the robot arms in the market? I'm planning to build a 3 joint robotic arm, it will be used for light weight job (like dotting paper with pen). Would making this fast(Sorry, i don't really know how i could explain that further) and precise(0.01-0.001 mm) possible? &lt;/p&gt;&#xA;" OwnerUserId="24750" LastActivityDate="2020-12-19T11:01:25.107" Title="Does increasing robotic arm's speed cost replayability?" Tags="&lt;robotic-arm&gt;" AnswerCount="3" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="20218" PostTypeId="1" CreationDate="2020-02-19T18:24:25.963" Score="0" ViewCount="105" Body="&lt;p&gt;I have a 7-DOF robot arm, and I want it to follow a trajectory. This trajectory is defined as a dense sequence of SE(3) waypoints, which were collected by moving the robot arm manually (i.e. by providing a demonstration of a task).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So at each time step, I have a translation error and a rotation error (the error is the distance between the robot's current pose, and the nearest-neighbour demonstration pose). These then need to be converted into a translational velocity and rotational velocity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But if I just divide each by the time step, (i.e. velocity = distance / time), then this would cause the robot to have a very high velocity when it is further away from the demonstration trajectory. However, I want the robot to move smoothly, with a smooth (ideally constant) translation and rotation velocity. How can I do this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="8880" LastActivityDate="2020-02-27T06:26:04.930" Title="Controlling a robot arm to follow an SE(3) trajectory" Tags="&lt;control&gt;&lt;kinematics&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20219" PostTypeId="2" ParentId="146" CreationDate="2020-02-20T01:30:46.133" Score="0" Body="&lt;p&gt;You do not want to use stainless steel with linear bearings because that type of steel is not hard enough and the bearing will wear grooves into the rod. You want high carbon steel with hardness greater than HRC 60.&lt;/p&gt;&#xA;" OwnerUserId="24751" LastActivityDate="2020-02-20T01:30:46.133" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20220" PostTypeId="1" AcceptedAnswerId="20221" CreationDate="2020-02-20T04:35:43.727" Score="2" ViewCount="150" Body="&lt;p&gt;I read the robot textbook of Peter Corke and Richard M. Murray, in Peter’s, chapter 8 about jacobian, there are two jacobian, one is geometric jacobian &lt;span class=&quot;math-container&quot;&gt;$^0J$&lt;/span&gt; from &lt;a href=&quot;https://robotics.stackexchange.com/q/8940/19138&quot;&gt;math&lt;/a&gt;, other is world coordinate frame jacobian &lt;span class=&quot;math-container&quot;&gt;$J$&lt;/span&gt;, I konw from &lt;span class=&quot;math-container&quot;&gt;$^0J$&lt;/span&gt; to &lt;span class=&quot;math-container&quot;&gt;$J$&lt;/span&gt; need transformation matrix.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is how to describe joint torque from the formula &lt;span class=&quot;math-container&quot;&gt;$\tau = J^T F$&lt;/span&gt;? Because there are two kind jacobian. In Peter’s book, use the geometric jacobian, as follows &#xA;&lt;a href=&quot;https://i.stack.imgur.com/GSeTF.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/GSeTF.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19138" LastEditorUserId="19138" LastEditDate="2020-02-20T04:42:20.467" LastActivityDate="2020-02-20T06:17:16.597" Title="relationship between geometric twist jacobian and wrench" Tags="&lt;jacobian&gt;&lt;geometry&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20221" PostTypeId="2" ParentId="20220" CreationDate="2020-02-20T05:47:13.043" Score="2" Body="&lt;p&gt;I'd suggest thinking about the problem this way:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you construct a Jacobian for an arm, it will typically map your joint velocities to to one of three representations of the end effector velocity:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The &quot;world velocity&quot;, which is the derivative of the position coordinates of the end effector.&lt;/li&gt;&#xA;&lt;li&gt;The &quot;body velocity&quot;, which is the world velocity you would get if you put your origin at the current location of the robot (so that it measures how the end effector would perceive its own motion, like a driver thinking in terms of forward-lateral components of motion).&lt;/li&gt;&#xA;&lt;li&gt;The &quot;spatial velocity&quot;, which is the velocity of a frame rigidly attached to the end effector, but currently collocated with and aligned with the origin frame (see my answer &lt;a href=&quot;https://robotics.stackexchange.com/a/9011/11712&quot;&gt;here&lt;/a&gt; for a description of why the spatial velocity is useful, although unintuitive).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The relationship &lt;span class=&quot;math-container&quot;&gt;$\tau=J^{T}F$&lt;/span&gt; works for each of these Jacobians as long as the &lt;span class=&quot;math-container&quot;&gt;$F$&lt;/span&gt; forces are described in the same frame as the output velocity:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;If your Jacobian outputs the world velocity, then &lt;span class=&quot;math-container&quot;&gt;$J^{T}$&lt;/span&gt; must take in a world wrench (force components in the coordinate &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt;, and &lt;span class=&quot;math-container&quot;&gt;$z$&lt;/span&gt; directions, and moment components around the coordinate &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt;, and &lt;span class=&quot;math-container&quot;&gt;$z$&lt;/span&gt; axes).&lt;/li&gt;&#xA;&lt;li&gt;If your Jacobian outputs the body velocity, then &lt;span class=&quot;math-container&quot;&gt;$J^{T}$&lt;/span&gt; must take in a body wrench (force components in the &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt;, and &lt;span class=&quot;math-container&quot;&gt;$z$&lt;/span&gt; directions of the end-effector frame, and moment components around the &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt;, and &lt;span class=&quot;math-container&quot;&gt;$z$&lt;/span&gt; axes of the end-effector frame).&lt;/li&gt;&#xA;&lt;li&gt;If your Jacobian outputs the spatial velocity, then &lt;span class=&quot;math-container&quot;&gt;$J^{T}$&lt;/span&gt; must take in a spatial wrench. (For any wrench applied at any location in the space, you can find an equivalent wrench that could be applied at the origin, which has an extra moment component equal to the cross product between the force component and the displacement between the point where the force is applied and the origin. This equivalent wrench is the spatial wrench.)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Two notes: &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;I'm not familiar with the book you're citing, but it's not clear to me from this passage whether the use of the word &quot;spatial&quot; here is the true &quot;spatial velocity&quot; discussed in Murray's book, or whether (as is sometimes the case) it's being used to mean &quot;through space&quot; in what I would call the world velocity. &lt;/li&gt;&#xA;&lt;li&gt;I believe that the text you highlighted &quot;can never be singular&quot; should be interpreted as &quot;transposing the Jacobian is always a computable operation, even if the Jacobian is a singular matrix whose inverse cannot be computed&quot;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="11712" LastEditorUserId="11712" LastEditDate="2020-02-20T06:17:16.597" LastActivityDate="2020-02-20T06:17:16.597" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20222" PostTypeId="1" CreationDate="2020-02-20T08:06:07.537" Score="1" ViewCount="73" Body="&lt;p&gt;How arduino stepper library handles stepper motor with ULN2003? I mean, for controlling stepper motor one actually needs four pwms. It can be reduced to two by encoding, or maybe even to one by using other techniques. But could you, please, clarify how arduino does it? I could not find the low level code for that from arduino to inspect.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="23798" LastActivityDate="2021-04-20T01:47:36.980" Title="Arduino and stepper motor" Tags="&lt;arduino&gt;&lt;stepper-motor&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20223" PostTypeId="1" CreationDate="2020-02-20T10:45:13.490" Score="0" ViewCount="44" Body="&lt;p&gt;I am trying to use the UR5 from my computer without having to write any script on the robot.  For that, I opened a TCP socket as a client from my computer (in a C program), and the robot indeed does accept the communication.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I write a UR script command through the TCP socket, the robot interprets it, and does the job.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, if I send him two consecutive commands, it doesn't behave well.  I would expect it to store the commands and not start one until it has finished the previous one (just as a shell would do).  Instead, it tries to do both at the same time.  As a result, if I tell him to write more than one text messages on the log, some of them get lost.  And if I tell him to do various moves, it stops with an error:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Security Stopped&#xA;SECURITY CHECK: Torque limit violation&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I could tune some parameters in my code to sleep for a few miliseconds or seconds until it should have finished, but there has to be a way to get that from the robot.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The robot does also talk though the socket, but I can't decypher that, and didn't find in the manuals what's the structure of that message.  I only know that it's always 560 bytes, and I know it sends it every 10th of a second, and that when the arm is stopped, some parts of the message are constant, and when the arm moves, most of it is changing, so I'm sure it's telling me it's position, movement, and probably more useful information.  I would like to be able to interpret those messages.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the part of my code where the robot moves:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&#xA;#define DELAY       (1000000)&#xA;&#xA;int ur_command  (int ur,&#xA;             const char *restrict cmd)&#xA;{&#xA;    ssize_t n;&#xA;    ssize_t len;&#xA;&#xA;    usleep(DELAY);&#xA;&#xA;    len = strlen(cmd);&#xA;    n   = write(ur, cmd, len);&#xA;    if (n != len)&#xA;        goto err;&#xA;&#xA;    len = strlen(&quot;\n&quot;);&#xA;    n   = write(ur, &quot;\n&quot;, len);&#xA;    if (n != len)&#xA;        goto err;&#xA;&#xA;    /* Read socket 10 times (1 second of delay each) */&#xA;    for (int k = 0; k &amp;lt; 10; k++) {&#xA;        char    buf[BUFSIZ];&#xA;        ssize_t m;&#xA;&#xA;        memset(buf, 0, ARRAY_SIZE(buf));&#xA;        m   = read(ur, buf, ARRAY_SIZE(buf) - 1);&#xA;        buf[m]  = '\0';&#xA;        if (m &amp;lt; 0) {&#xA;            perrorx(&quot;read() failed&quot;);&#xA;            goto err;&#xA;        }&#xA;        for (ssize_t j = 0; j &amp;lt; m; j++)&#xA;            printf(&quot;%.2x &quot;, (unsigned char)buf[j]);&#xA;        fputc('\n', stdout);&#xA;        fputc('\n', stdout);&#xA;        fputc('\n', stdout);&#xA;        printf(&quot;%s\n&quot;, buf);&#xA;        usleep(DELAY);&#xA;    }&#xA;&#xA;    return  0;&#xA;err:&#xA;    if (n &amp;lt; 0)&#xA;        return  n;&#xA;    return  (n % INT_MAX) + 1;&#xA;}&#xA;&#xA;&#xA;[...]&#xA;    for (ptrdiff_t i = 0; i &amp;lt; 10; i++) {&#xA;        if (ur_command(ur, &quot;movej([-0.106, -1.476, 1.346, -2.664, -2.224, -0.264])&quot;))&#xA;            goto out;&#xA;        if (ur_command(ur, &quot;movej([0.194, -0.699, 1.324, -2.671, -1.497, -0.264])&quot;))&#xA;            goto out;&#xA;        if (ur_command(ur, &quot;movej([-0.370, -1.183, 1.377, -1.696, -1.623, -0.209])&quot;))&#xA;            goto out;&#xA;    }&#xA;[...]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;And this is &lt;code&gt;stdout&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;user@LNV-debian:/media/user/DataNTFS/Alex-dev/git/smr-ur-cam-test&lt;span class=&quot;math-container&quot;&gt;$ ./client&#xA;New movement:&#xA;received 5040 bytes (showing first 560 only):&#xA;00 00 02 30 10 00 00 00 1d 00 00 00 00 00 00 10 8e 65 01 01 01 00 00 00 00 00 3f f0 00 00 00 00 00 00 00 00 00 fb 01 bf bb 21 44 d2 92 bd 40 bf bb 22 d0 e5 60 41 8a 00 00 00 00 00 00 00 00 3f 4b bc 5a 42 3e 00 00 41 d8 00 00 42 4e 66 67 fd bf f7 9d a7 e0 96 21 37 bf f7 9d b2 2d 0e 56 04 00 00 00 00 00 00 00 00 c0 20 b1 68 42 3e 00 00 41 f0 cc cd 42 57 99 9a fd 3f f5 89 39 17 c5 20 ec 3f f5 89 37 4b c6 a7 f0 00 00 00 00 00 00 00 00 c0 18 83 ce 42 3d 33 33 41 e0 00 00 42 59 33 33 fd c0 05 4f d3 c6 72 f9 89 c0 05 4f df 3b 64 5a 1d 00 00 00 00 00 00 00 00 3e 52 d2 5a 42 3e 00 00 42 08 cc cd 42 70 00 00 fd c0 01 ca b6 64 62 d4 fa c0 01 ca c0 83 12 6e 98 00 00 00 00 00 00 00 00 bb f9 dc dd 42 3e 00 00 42 10 cc cd 42 6b 99 9a fd bf d0 e5 6f a1 dc 61 c0 bf d0 e5 60 41 89 37 4c 00 00 00 00 00 00 00 00 be 00 0d fe 42 3c 66 67 42 15 33 33 42 70 00 00 fd 00 00 00 35 04 bf e0 d6 88 8c fb b6 7e bf 6c a1 f0 06 ae 39 2b 3f e4 27 77 ab c4 60 ca bf f7 e5 51 42 26 75 72 bf f1 77 6e c5 b4 32 60 3f ca e4 4f 16 17 5f bf 00 00 00 35 09 c0 23 c9 3e aa 35 ca 68 40 26 a1 b5 6f af ec 4f 40 2a 63 46 b3 6d fc 74 c0 05 6e f7 4e f2 65 88 bf 34 ec 5e 0c 8d 6f 33 3f f2 9b f1 1d 87 bd 2d 00 00 00 40 03 00 00 00 00 00 00 3f 44 01 40 14 01 40 14 3f 24 01 40 14 01 40 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 41 e3 33 33 42 40 00 00 3f 22 77 80 3e 10 62 4e 08 02 00 00 00 00 25 02 00 00 3f 90 bb fe 01 88 fa 1b 3f 8d a4 c9 44 8c 3e b3 42 34 00 00 00 3b c4 9b a6 42 4c 00 00 fd 00 00 00 3d 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3f 6d 0c f6 b6 74 8e 85 00 00 00 07 08 00 01 &#xA;End of msg.&#xA;received 5600 bytes (showing first 560 only):&#xA;00 00 02 30 10 00 00 00 1d 00 00 00 00 00 00 10 8e d5 01 01 01 00 00 00 00 00 3f f0 00 00 00 00 00 00 00 00 00 fb 01 bf bb 21 44 d2 92 bd 40 bf bb 22 d0 e5 60 41 8a 00 00 00 00 00 00 00 00 3f 5b 3b 2d 42 3e 66 67 41 d8 00 00 42 4e 00 00 fd bf f7 9d a7 e0 96 21 37 bf f7 9d b2 2d 0e 56 04 00 00 00 00 00 00 00 00 c0 21 b2 84 42 3e 66 67 41 f0 cc cd 42 57 99 9a fd 3f f5 89 39 17 c5 20 ec 3f f5 89 37 4b c6 a7 f0 00 00 00 00 00 00 00 00 c0 18 15 9e 42 3d 33 33 41 e0 00 00 42 59 33 33 fd c0 05 4f d3 c6 72 f9 89 c0 05 4f df 3b 64 5a 1d 00 00 00 00 00 00 00 00 3d 6d 5e 9f 42 3e 66 67 42 08 cc cd 42 70 00 00 fd c0 01 ca b6 64 62 d4 fa c0 01 ca c0 83 12 6e 98 00 00 00 00 00 00 00 00 3b 95 ea eb 42 3e 00 00 42 10 cc cd 42 6b 99 9a fd bf d0 e5 6f a1 dc 61 c0 bf d0 e5 60 41 89 37 4c 00 00 00 00 00 00 00 00 bd e0 e0 60 42 3c cc cd 42 15 33 33 42 70 00 00 fd 00 00 00 35 04 bf e0 d6 88 8c fb b6 7e bf 6c a1 f0 06 ae 39 2b 3f e4 27 77 ab c4 60 ca bf f7 e5 51 42 26 75 72 bf f1 77 6e c5 b4 32 60 3f ca e4 4f 16 17 5f bf 00 00 00 35 09 c0 25 4a 7d 1e ff 78 72 40 27 07 43 3d 6d 2f 23 40 2a 37 e6 05 61 43 72 bf f4 d9 e6 22 a7 0a 09 bf bd 69 c2 a6 95 54 d1 3f f0 56 f9 2c a9 22 fc 00 00 00 40 03 00 00 00 00 00 00 3f 34 01 40 14 01 40 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 41 e3 33 33 42 40 00 00 3f 34 7a 00 3e 0f 5c 29 08 02 00 00 00 00 25 02 00 00 3f 90 93 31 39 98 bd 35 3f 8e 47 fc 64 4d 32 49 42 34 00 00 00 3b c4 9b a6 42 4c 00 00 fd 00 00 00 3d 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3f 6d 0c f6 b6 74 8e 85 00 00 00 07 08 00 01 &#xA;End of msg.&#xA;New movement:&#xA;received 11200 bytes (showing first 560 only):&#xA;00 00 02 30 10 00 00 00 1d 00 00 00 00 00 00 10 8f 53 01 01 01 00 00 00 00 00 3f f0 00 00 00 00 00 00 00 00 00 fb 01 bf bb 21 44 d2 92 bd 40 bf bb 22 d0 e5 60 41 8a 00 00 00 00 00 00 00 00 3f 5a a8 41 42 3e 66 67 41 d8 00 00 42 4e 66 67 fd bf f7 9d a7 e0 96 21 37 bf f7 9d b2 2d 0e 56 04 00 00 00 00 00 00 00 00 c0 21 d7 3e 42 3e 66 67 41 f0 cc cd 42 57 99 9a fd 3f f5 89 39 17 c5 20 ec 3f f5 89 37 4b c6 a7 f0 00 00 00 00 00 00 00 00 c0 18 a8 89 42 3d 33 33 41 e0 00 00 42 58 cc cd fd c0 05 4f d3 c6 72 f9 89 c0 05 4f df 3b 64 5a 1d 00 00 00 00 00 00 00 00 3e 32 06 f7 42 3e 66 67 42 08 cc cd 42 70 00 00 fd c0 01 ca b6 64 62 d4 fa c0 01 ca c0 83 12 6e 98 00 00 00 00 00 00 00 00 3b f9 dc dd 42 3e 00 00 42 10 cc cd 42 6b 99 9a fd bf d0 e5 6f a1 dc 61 c0 bf d0 e5 60 41 89 37 4c 00 00 00 00 00 00 00 00 bd a2 69 29 42 3c cc cd 42 15 33 33 42 70 00 00 fd 00 00 00 35 04 bf e0 d6 88 8c fb b6 7e bf 6c a1 f0 06 ae 39 2b 3f e4 27 77 ab c4 60 ca bf f7 e5 51 42 26 75 72 bf f1 77 6e c5 b4 32 60 3f ca e4 4f 16 17 5f bf 00 00 00 35 09 c0 25 3c 38 70 01 7b 7b 40 27 15 c5 36 3f 14 1c 40 2a 71 bc 42 c7 8f 78 c0 03 0c e1 46 e2 79 8b bf c2 5f 7c 1c 5b c3 55 3f e7 9a 12 95 d7 dd 33 00 00 00 40 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 41 e3 33 33 42 40 00 00 3f 19 64 00 3e 11 68 73 08 02 00 00 00 00 25 02 00 00 3f 90 bb fe 01 88 fa 1b 3f 8d f6 62 d4 6c b8 7e 42 34 00 00 00 3b c4 9b a6 42 4c 00 00 fd 00 00 00 3d 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3f 6d 0c f6 b6 74 8e 85 00 00 00 07 08 00 01 &#xA;End of msg.&#xA;received 5600 bytes (showing first 560 only):&#xA;00 00 02 30 10 00 00 00 1d 00 00 00 00 00 00 10 90 4d 01 01 01 00 00 00 00 00 3f f0 00 00 00 00 00 00 00 00 00 fb 01 bf bb 21 44 d2 92 bd 40 bf bb 22 d0 e5 60 41 8a 00 00 00 00 00 00 00 00 3f 54 58 24 42 3e 66 67 41 d8 00 00 42 4e 66 67 fd bf f7 9d a7 e0 96 21 37 bf f7 9d b2 2d 0e 56 04 00 00 00 00 00 00 00 00 c0 1f d5 07 42 3e 66 67 41 f0 cc cd 42 57 99 9a fd 3f f5 89 39 17 c5 20 ec 3f f5 89 37 4b c6 a7 f0 00 00 00 00 00 00 00 00 c0 18 a8 89 42 3d 99 9a 41 e0 00 00 42 58 66 67 fd c0 05 4f d3 c6 72 f9 89 c0 05 4f df 3b 64 5a 1d 00 00 00 00 00 00 00 00 3e 59 11 7a 42 3e 00 00 42 08 cc cd 42 70 00 00 fd c0 01 ca b6 64 62 d4 fa c0 01 ca c0 83 12 6e 98 00 00 00 00 00 00 00 00 ba c7 e3 e4 42 3e 00 00 42 10 cc cd 42 6b 99 9a fd bf d0 e5 b3 97 58 f7 e0 bf d0 e5 60 41 89 37 4c 00 00 00 00 00 00 00 00 bd dd c0 d1 42 3c cc cd 42 15 33 33 42 70 00 00 fd 00 00 00 35 04 bf e0 d6 88 8c fb b6 7e bf 6c a1 f0 06 ae 39 2b 3f e4 27 77 ab c4 60 ca bf f7 e5 47 83 3c e6 7d bf f1 77 7b 1d 31 c0 a0 3f ca e3 f0 5f 32 44 9c 00 00 00 35 09 c0 24 9f 44 eb 17 9c df 40 26 4a a9 9a c4 8e 74 40 2a 71 bc 42 c7 8f 78 c0 05 e3 2c 44 4a c3 3f bf ad 7e af 04 a1 e2 41 3f f0 1c e0 61 5f ad 2a 00 00 00 40 03 00 00 00 00 00 00 3f 34 01 40 14 01 40 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 41 e4 00 00 42 40 00 00 3f 10 50 80 3e 14 7a e2 08 02 00 00 00 00 25 02 00 00 3f 90 6a 64 71 a8 80 50 3f 8d 01 96 24 cb 4b 1d 42 34 00 00 00 3b c4 9b a6 42 4c 00 00 fd 00 00 00 3d 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3f 6d 0c f6 b6 74 8e 85 00 00 00 07 08 00 01 &#xA;End of msg.&#xA;New movement:&#xA;received 11200 bytes (showing first 560 only):&#xA;00 00 02 30 10 00 00 00 1d 00 00 00 00 00 00 10 90 ca 01 01 01 00 00 01 00 00 3f f0 00 00 00 00 00 00 00 00 00 fb 01 3f c0 32 6f 88 2b 01 1a 3f c0 35 36 12 88 ec d6 3f d1 32 6b 23 43 95 b6 3e e9 01 3d 42 3e 66 67 41 d8 00 00 42 4e cc cd fd bf eb f4 b1 1c de eb 4f bf eb f3 be fd 73 40 07 3f e6 1c f0 c6 33 b8 76 c0 6b 03 74 42 3e 66 67 41 f0 cc cd 42 57 99 9a fd 3f f5 42 cf b7 72 5c e8 3f f5 43 57 8c b0 28 e0 bf 96 ff c3 75 a7 36 39 bf f7 a3 ae 42 3e 66 67 41 e0 cc cd 42 58 66 67 fd c0 05 5a ce 39 a2 24 79 c0 05 5a fd 02 85 05 99 bf 86 df ed de fc d5 13 be 41 a4 c5 42 3e 66 67 42 08 cc cd 42 70 00 00 fd bf fa 90 fe f7 2f 9d 84 bf fa 90 7c 4f ec 02 23 3f e4 50 51 69 53 ce 14 3e b5 ee 6a 42 3e 00 00 42 10 cc cd 42 6b 99 9a fd bf d0 e5 6f a1 dc 61 c0 bf d0 e5 60 41 89 37 4c 00 00 00 00 00 00 00 00 bd e3 ff f0 42 3c cc cd 42 15 33 33 42 70 00 00 fd 00 00 00 35 04 bf e7 66 54 49 f1 7b 13 bf c9 0a 85 ec 69 7a 5d 3f cd eb 1a 8c 34 3d d5 bf f7 4b 61 26 53 b4 11 c0 00 d7 4b b6 f3 5a 14 3f de 51 61 9b a4 6a 0d 00 00 00 35 09 40 02 89 5f 02 f7 b3 29 40 29 99 73 74 53 59 3d bf b7 63 9c 9c 47 2c 1e bf e6 a0 f2 4f ef 42 5a 3f c8 53 e5 15 e8 74 eb 3f f0 91 11 f7 f2 98 ce 00 00 00 40 03 00 00 00 00 00 00 3f 51 81 18 11 81 18 12 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 41 e3 33 33 42 40 00 00 3e 33 f4 00 3e 12 6e 98 08 02 00 00 00 00 25 02 00 00 3f 90 93 31 39 98 bd 35 3f 8d 53 2f b4 ab c4 e8 42 34 00 00 00 3b c4 9b a6 42 4c 00 00 fd 00 00 00 3d 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3f 8a 25 15 74 f8 60 16 00 00 00 07 08 00 01 &#xA;End of msg.&#xA;received 5600 bytes (showing first 560 only):&#xA;00 00 02 30 10 00 00 00 1d 00 00 00 00 00 00 10 91 c4 01 01 01 00 00 00 00 00 3f f0 00 00 00 00 00 00 00 00 00 fb 01 3f c8 d5 87 95 e9 db 16 3f c8 d4 fd f3 b6 45 a2 3f 04 1b 2f 76 bc 6e ee 3f 21 d7 3e 42 3e 00 00 41 d8 00 00 42 4e cc cd fd bf e6 5e 57 a8 21 d3 33 bf e6 5e 35 3f 7c ed 93 00 00 00 00 00 00 00 00 c0 5f 64 57 42 3e 66 67 41 f0 cc cd 42 57 99 9a fd 3f f5 2f 34 66 5d e9 08 3f f5 2f 1a 9f be 76 c8 be fa ce e9 f3 a5 e9 3d c0 04 92 5c 42 3e 00 00 41 e0 00 00 42 58 66 67 fd c0 05 5e 41 3d 25 f9 d9 c0 05 5e 35 3f 7c ed 91 be f9 21 fb 76 a5 b8 ab be 8b c4 58 42 3e 00 00 42 08 cc cd 42 70 00 00 fd bf f7 f3 cb 58 10 9b ac bf f7 f3 b6 45 a1 ca c3 3f 09 21 fb 76 a5 b8 ab 3e af af 4b 42 3e 00 00 42 10 cc cd 42 6b 99 9a fd bf d0 e5 2b ac 5f cb b0 bf d0 e5 60 41 89 37 4c 00 00 00 00 00 00 00 00 be 00 0d fe 42 3c 66 67 42 15 33 33 42 70 00 00 fd 00 00 00 35 04 bf e7 50 73 10 9e fa f5 bf d0 ad 41 8f d0 89 77 3f ba 7b 9b c6 d6 89 4f bf f7 45 5e b0 00 25 09 c0 03 16 2e 72 94 82 5e 3f e1 2e 1b 92 fc 6e 5a 00 00 00 35 09 c0 1f 6f 51 87 91 4f fc 3f dc 45 af c5 e7 b5 75 40 26 f6 c1 90 66 e6 d4 3f f1 02 82 dc 2a 7b 41 c0 09 98 e9 65 30 a6 c6 3f f2 9b f1 1d 87 bd 2d 00 00 00 40 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 41 e3 33 33 42 40 00 00 3f 2b 86 80 3e 0f 5c 29 08 02 00 00 00 00 25 02 00 00 3f 90 41 97 a9 b8 43 6b 3f 8d a4 c9 44 8c 3e b3 42 34 00 00 00 3b c4 9b a6 42 4c 00 00 fd 00 00 00 3d 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3f 8c 2d b4 de a0 6d ea 00 00 00 07 08 00 01 &#xA;End of msg.&#xA;New movement:&#xA;received 11200 bytes (showing first 560 only):&#xA;00 00 02 30 10 00 00 00 1d 00 00 00 00 00 00 10 92 41 01 01 01 00 00 01 00 00 3f f0 00 00 00 00 00 00 00 00 00 fb 01 bf c5 a3 d9 87 25 c1 20 bf c5 a9 ec 44 60 07 04 bf e2 bf 9e db 96 92 eb be c3 20 90 42 3d 99 9a 41 d8 00 00 42 4e cc cd fd bf f0 2b b7 7e 85 a0 47 bf f0 2b ec 7c 74 99 c9 bf df 72 39 f9 26 db 49 c0 83 10 b2 42 3d 99 9a 41 f0 cc cd 42 57 99 9a fd 3f f5 ba 90 de 71 01 58 3f f5 ba eb c9 5e 0b 8a 3f b0 59 70 6d b7 8e df bf 5f d2 87 42 3c 66 67 41 e0 00 00 42 58 00 00 fd c0 00 58 ab c1 8e b5 52 c0 00 58 27 af b9 d6 7b 3f ed e9 a1 f9 c6 5d 39 3d d7 81 b2 42 3c 66 67 42 08 cc cd 42 70 00 00 fd bf f9 40 f2 1b 89 2a 18 bf f9 40 1b 73 74 1d eb bf c0 f1 c1 21 05 ca 78 3d 47 e3 e4 42 3c 66 67 42 10 cc cd 42 6b 99 9a fd bf cd 43 28 ba 16 48 40 bf cd 42 01 ba 6c da 67 3f ac 97 e9 56 bc 0a 58 3e b1 3f 13 42 3c 66 67 42 15 33 33 42 70 00 00 fd 00 00 00 35 04 bf e6 a0 8b 80 cb 5d b9 3f 85 b4 ad 0a fe ba c1 3f cf 77 a2 4c 03 f6 4d c0 00 a2 d0 9b 1c 67 3b c0 01 a6 24 82 af 13 a6 3f b8 77 b2 0f 2f 8c 8f 00 00 00 35 09 c0 15 05 c5 d7 a1 8a fb 3f f9 6b 4f d6 2d 10 9b 3f f4 78 ef 4a a2 ec 2f 40 01 c3 8a fa c4 7b 0d bf fd 7e a4 07 61 43 32 bf ea d3 50 1f 92 27 d7 00 00 00 40 03 00 00 00 00 00 00 3f 24 01 40 14 01 40 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 41 e3 33 33 42 40 00 00 3f 9e 01 c0 3e 12 6e 98 08 02 00 00 00 00 25 02 00 00 3f 90 e4 ca c9 79 37 00 3f 8e 47 fc 64 4d 32 49 42 32 cc cd 00 3b c4 9b a6 42 4c 00 00 fd 00 00 00 3d 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3f 89 c7 21 33 ca 11 f8 00 00 00 07 08 00 01 &#xA;End of msg.&#xA;received 5600 bytes (showing first 560 only):&#xA;00 00 02 30 10 00 00 00 1d 00 00 00 00 00 00 10 93 3b 01 01 01 00 00 01 00 00 3f f0 00 00 00 00 00 00 00 00 00 fb 01 bf d7 ae 6c a8 11 87 00 bf d7 ad e1 5e b8 e3 cf 00 00 00 00 00 00 00 00 3e 45 6c 3e 42 3e 00 00 41 d8 00 00 42 4e cc cd fd bf f2 ed 9e 26 65 68 67 bf f2 ed 9f 96 ce 61 2d 00 00 00 00 00 00 00 00 c0 29 e0 1d 42 3e 66 67 41 f0 cc cd 42 57 99 9a fd 3f f6 08 1c 59 95 ab 4c 3f f6 08 2f a6 d0 0b 3c 3e fa ce e9 f3 a5 e9 3d bf 6f 51 5a 42 3d 33 33 41 e0 00 00 42 59 33 33 fd bf fb 22 d0 53 1d 5e 64 bf fb 22 ff bf 2f f2 6c 3f 12 d9 7c 98 fc 4a 80 3c ae e7 67 42 3e 66 67 42 08 cc cd 42 70 00 00 fd bf f9 f7 be f8 5b 04 40 bf f9 f7 eb ef a8 aa ae bf 09 21 fb 76 a5 b8 ab bd 2e e7 67 42 3e 00 00 42 10 cc cd 42 6b 99 9a fd bf ca c1 19 67 4c 3b e0 bf ca c0 98 5e 2a 16 7e 3f 09 21 fb 76 a5 b8 ab 3e 62 70 28 42 3c 66 67 42 15 33 33 42 70 00 00 fd 00 00 00 35 04 bf e4 23 c5 b5 00 78 a7 3f c0 da 0f 38 21 7a 36 3f d4 62 43 48 a3 e3 35 40 02 e5 97 f1 60 13 7d 40 00 1a cd 2e 5e 0e 73 3f bf 3d ed 93 17 8a fe 00 00 00 35 09 3f e9 0d c6 15 13 50 b2 c0 0a cf ed e4 cf ca 86 c0 19 ac a9 f2 47 fc 0f c0 0b eb c4 98 e7 70 38 bf e5 b5 eb 04 84 79 4b c0 00 f9 fe c6 54 e3 fd 00 00 00 40 03 00 00 00 00 00 00 3f 34 01 40 14 01 40 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 41 e3 33 33 42 40 00 00 3f 34 6f 80 3e 0e 56 05 08 02 00 00 00 00 25 02 00 00 3f 90 18 ca e1 c8 06 85 3f 8d a4 c9 44 8c 3e b3 42 34 00 00 00 3b c4 9b a6 42 4c 00 00 fd 00 00 00 3d 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3f 86 63 8e 22 7d 30 c0 00 00 00 07 08 00 01 &#xA;End of msg.&#xA;New movement:&#xA;received 11200 bytes (showing first 560 only):&#xA;00 00 02 30 10 00 00 00 1d 00 00 00 00 00 00 10 93 b8 01 01 01 00 00 01 00 00 3f f0 00 00 00 00 00 00 00 00 00 fb 01 bf c8 6b 41 1e 52 b3 e0 bf c8 63 d9 de 02 5e e8 3f d0 ac 96 2f 55 3f 74 3f 33 a1 be 42 3e 00 00 41 d8 00 00 42 4e 66 67 fd bf f6 1d 7a d7 d8 0e c4 bf f6 1d 59 78 b6 71 09 bf d2 34 3d 11 38 cb 4f c0 21 fb f9 42 3e 00 00 41 f0 cc cd 42 57 99 9a fd 3f f5 b1 31 65 55 d9 ec 3f f5 b1 e1 72 14 1b 08 bf a0 20 78 bc 91 ce 4f bf e2 fa 96 42 3c cc cd 41 e0 00 00 42 59 33 33 fd c0 02 d4 53 e0 cc 14 69 c0 02 d4 fa 92 cc 2b e0 bf ee 91 e7 7f 66 be c8 bf 43 fc 71 42 3d 99 9a 42 08 cc cd 42 70 00 00 fd c0 00 40 19 30 1e 5b 84 c0 00 40 91 39 13 27 92 bf e2 b9 df da b1 0e 0e be b8 46 16 42 3c 66 67 42 10 cc cd 42 6b 99 9a fd bf cf 85 b3 de d5 18 00 bf cf 89 93 8c b6 a1 a5 bf ad 57 8c 74 24 b9 f8 be 5c 31 09 42 3c 66 67 42 15 33 33 42 70 00 00 fd 00 00 00 35 04 bf e2 fe 13 7a a3 69 cb 3f a4 d7 19 10 27 f3 3b 3f e1 1b af f7 2b fa 88 bf fb 15 a9 a6 86 fa ab bf f7 6c f9 57 46 d8 e4 3f b2 63 06 26 49 56 34 00 00 00 35 09 bf ef 78 81 33 b2 bf 56 bf fe 2f c9 6c ab 22 36 c0 01 e9 b7 a0 fb 7c ea 40 05 bf 66 2c 95 8d e5 3f f4 2d 20 55 eb 67 ac 3f f3 2d d7 1b d5 31 8c 00 00 00 40 03 00 00 00 00 00 00 3f 3e 01 e0 1e 01 e0 1e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 41 e3 33 33 42 40 00 00 3f 82 f9 00 3e 13 74 bd 08 02 00 00 00 00 25 02 00 00 3f 91 0d 97 91 69 73 e6 3f 8d 53 2f b4 ab c4 e8 42 32 cc cd 00 3b c4 9b a6 42 4c 00 00 fd 00 00 00 3d 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3f 79 27 23 be cd 58 c8 00 00 00 07 08 00 01 &#xA;End of msg.&#xA;received 5600 bytes (showing first 560 only):&#xA;00 00 02 30 10 00 00 00 1d 00 00 00 00 00 00 10 94 b2 01 01 01 00 00 00 00 00 3f f0 00 00 00 00 00 00 00 00 00 fb 01 bf bb 21 44 ee 06 5d 00 bf bb 22 d0 e5 60 41 8a 00 00 00 00 00 00 00 00 3f 81 fd 39 42 3e 00 00 41 d8 00 00 42 4e 66 67 fd bf f7 9d 9d fd e3 0f 6e bf f7 9d b2 2d 0e 56 05 bf 04 1b 2f 76 bc 6e ee c0 29 96 a7 42 3e 66 67 41 f0 cc cd 42 57 99 9a fd 3f f5 89 42 fa 78 32 b4 3f f5 89 37 4b c6 a7 f0 be fa ce e9 f3 a5 e9 3d c0 17 5d f7 42 3c cc cd 41 e0 00 00 42 58 cc cd fd c0 05 4f d3 c6 72 f9 89 c0 05 4f df 3b 64 5a 1d 3f 19 21 fb 76 a5 b8 ab 3e 36 b6 4e 42 3e 00 00 42 08 cc cd 42 70 00 00 fd c0 01 ca b6 64 62 d4 fa c0 01 ca c0 83 12 6e 98 00 00 00 00 00 00 00 00 3c 79 dc dd 42 3e 00 00 42 10 cc cd 42 6b 99 9a fd bf d0 e5 2b ac 5f cb b0 bf d0 e5 60 41 89 37 4c bf 09 21 fb 76 a5 b8 ab bd f3 9d be 42 3c 66 67 42 15 33 33 42 70 00 00 fd 00 00 00 35 04 bf e0 d6 95 7d cd 91 3e bf 6c a0 8d d2 20 c9 62 3f e4 27 63 ca 81 a8 4c bf f7 e5 61 c6 4d e1 db bf f1 77 72 34 d3 f1 a2 3f ca e4 45 1b 32 99 fe 00 00 00 35 09 c0 29 3f 89 a7 70 a0 ee 40 2a 25 2f b2 85 60 dc 40 29 ef 9a 38 a1 64 6c c0 03 64 08 fe e4 bf d4 bf cb 89 ff 13 06 81 a2 3f f1 b3 8d f0 61 e5 e7 00 00 00 40 03 00 00 00 00 00 00 3f 49 01 90 19 01 90 19 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 41 e3 33 33 42 40 00 00 3f 34 6a 00 3e 0e 56 05 08 02 00 00 00 00 25 02 00 00 3f 90 bb fe 01 88 fa 1b 3f 8d f6 62 d4 6c b8 7e 42 34 00 00 00 3b c4 9b a6 42 4c 00 00 fd 00 00 00 3d 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3f 6d 0d 35 98 32 b5 e6 00 00 00 07 08 00 01 &#xA;End of msg.&#xA;New movement:&#xA;received 11200 bytes (showing first 560 only):&#xA;00 00 02 30 10 00 00 00 1d 00 00 00 00 00 00 10 95 2f 01 01 01 00 00 01 00 00 3f f0 00 00 00 00 00 00 00 00 00 fb 01 3f bf 3c 76 b8 6d e3 ae 3f bf 4b 47 ea dd 45 a0 3f d2 81 bb 2d 7d 16 e6 3f 34 34 a9 42 3e 66 67 41 d8 00 00 42 4e cc cd fd bf ec 52 ff 0f 9f 7d 6d bf ec 50 b5 47 55 8d 65 3f e7 72 be ed 16 3b d4 c0 69 01 3d 42 3e 66 67 41 f0 cc cd 42 57 99 9a fd 3f f5 44 1a 33 bb b3 a4 3f f5 44 a8 76 57 70 cf bf 8e 9a b6 94 66 27 84 c0 0e 53 fd 42 3e 00 00 41 e0 00 00 42 58 66 67 fd c0 05 5a 92 c2 d5 21 26 c0 05 5a c7 68 fb dd 10 bf 73 70 48 7d c4 2c d4 be 40 14 fd 42 3e 66 67 42 08 cc cd 42 70 00 00 fd bf fa bd 33 ef f6 61 40 bf fa bb f9 be ec 9c 9c 3f e5 fb 60 d8 3d e2 0c 3e a3 31 0d 42 3e 66 67 42 10 cc cd 42 6b 99 9a fd bf d0 e5 2b ac 5f cb b0 bf d0 e5 60 41 89 37 4c be f9 21 fb 76 a5 b8 ab be 00 0d fe 42 3c cc cd 42 15 33 33 42 70 00 00 fd 00 00 00 35 04 bf e7 5f 96 35 4b 38 1d bf c8 7a 0f aa d2 b4 22 3f cf 02 81 57 5e ea 10 bf f7 4d 7d 27 d8 fa 70 c0 00 b0 af 53 c8 ed e1 3f de 06 d1 b6 5b 73 4f 00 00 00 35 09 bf e3 11 6b 09 f4 96 ec 40 29 86 97 01 b0 61 b2 40 0b f1 9d f8 d9 37 d3 bf e7 cd da e1 2f fb 05 3f e1 db 7f f6 f0 fb 9c 3f f2 9b f1 1d 87 bd 2d 00 00 00 40 03 00 00 00 00 00 00 3f 34 01 40 14 01 40 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 41 e3 33 33 42 40 00 00 3e 33 f4 00 3e 13 74 bd 08 02 00 00 00 00 25 02 00 00 3f 90 e4 ca c9 79 37 00 3f 8e 47 fc 64 4d 32 49 42 34 00 00 00 3b c4 9b a6 42 4c 00 00 fd 00 00 00 3d 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3f 89 e8 e9 83 9f 20 af 00 00 00 07 08 00 01 &#xA;End of msg.&#xA;received 5600 bytes (showing first 560 only):&#xA;00 00 02 30 10 00 00 00 1d 00 00 00 00 00 00 10 96 2a 01 01 01 00 00 01 00 00 3f f0 00 00 00 00 00 00 00 00 00 fb 01 3f c8 cf f8 03 76 0a 3d 3f c8 c7 70 f9 05 14 1f bf 9b 83 de 9e d2 89 24 bf 18 15 9e 42 3e 66 67 41 d8 00 00 42 4e cc cd fd bf e6 5f e3 14 1c 9a 97 bf e6 61 1d 7a b7 d2 84 bf 91 72 ed 06 35 dc f0 c0 98 cd 44 42 3e 00 00 41 f0 cc cd 42 57 99 9a fd 3f f5 2f 34 66 5d e9 08 3f f5 2f 43 5f 48 d4 3e be ea ce e9 f3 a5 e9 3d bf f9 12 fa 42 3e 00 00 41 e0 00 00 42 58 66 67 fd c0 05 5d 9f d6 1e 15 66 c0 05 5c be 70 ff 66 6e 3f ac bd 9c 4f ee 02 ed 3e 40 14 fd 42 3e 00 00 42 08 cc cd 42 70 00 00 fd bf f7 f3 ed 52 ce e6 b4 bf f7 f4 17 25 24 b2 9c 3f 09 21 fb 76 a5 b8 ab 3e 52 d2 5a 42 3e 00 00 42 10 cc cd 42 6b 99 9a fd bf d0 e4 e7 b6 e3 35 a0 bf d0 e4 b7 1c cd 49 15 00 00 00 00 00 00 00 00 bd 8c 8c 3c 42 3c cc cd 42 15 33 33 42 70 00 00 fd 00 00 00 35 04 bf e7 50 b8 ab 3e 11 62 bf d0 ab 26 84 72 0c 52 3f ba 82 98 9e 4a 01 0d bf f7 46 7c be 8b 0d f3 c0 03 16 01 d6 a9 d4 ed 3f e1 2c b1 60 e3 cf 28 00 00 00 35 09 c0 01 38 da 79 ac 19 df 40 07 d9 06 b0 3a cd 42 40 25 d4 16 44 d7 3e e6 bf d4 48 5c 7e e6 65 e4 c0 05 8e 87 a5 49 76 59 3f f3 e0 ed a4 1c 56 5c 00 00 00 40 03 00 00 00 00 00 00 3f 24 01 40 14 01 40 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 41 e3 33 33 42 40 00 00 3f 61 a2 00 3e 13 74 bd 08 02 00 00 00 00 25 02 00 00 3f 91 0d 97 91 69 73 e6 3f 8e 47 fc 64 4d 32 49 42 34 00 00 00 3b c4 9b a6 42 4c 00 00 fd 00 00 00 3d 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3f 8c 2d ad cc 03 b9 c8 00 00 00 07 08 00 01 &#xA;End of msg.&#xA;./client:&#xA;	client.c:97:&#xA;	main():&#xA;		write() succeded&#xA;	E0 -	Success&#xA;user@LNV-debian:/media/user/DataNTFS/Alex-dev/git/smr-ur-cam-test$&lt;/span&gt;&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;How can I know that the arm is stopped (and possibly its position and more useful info) so that I know that it's prepared to receive a new command through the socket?&lt;/p&gt;&#xA;" OwnerUserId="24753" LastEditorUserId="24753" LastEditDate="2020-02-21T08:21:39.820" LastActivityDate="2021-04-24T17:16:31.470" Title="Interpret 560 byte msg from UR5 firmware 1.8 through TCP socket" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;c&gt;&lt;linux&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20224" PostTypeId="2" ParentId="20222" CreationDate="2020-02-20T18:05:41.630" Score="0" Body="&lt;p&gt;There is generally a stepper example in the arduino Compiler, you can find the code there, or look at the &lt;a href=&quot;https://www.arduino.cc/en/Reference/Stepper&quot; rel=&quot;nofollow noreferrer&quot;&gt;stepper library&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However arduinos can‘t control steppers directly, but they send signals to stepper drivers, which then send the correct voltages to the stepper to rotate in a specific direction and rotate at a specific frequency. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Arduinos are basically ‚bit banging‘ namely they send a single high and low signal at a specific frequency and duty cycle, which determines the rotational speed of the motor itself. One line is high/low for direction, another for the signal. The advantage is you can count how many times you bit banged, and have an open loop position control system for easy NC applications&lt;/p&gt;&#xA;&#xA;&lt;p&gt;No-one would use the analog pins on an arduino to control stepper motors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;4wire stepper motors have A and B coils that require specific timing to excite (read, step) the motor and a large amperage/voltage requirement. Hence the drivers. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Considering read the wiki about &lt;a href=&quot;https://en.m.wikipedia.org/wiki/Stepper_motor&quot; rel=&quot;nofollow noreferrer&quot;&gt;steppers&lt;/a&gt; to get a better idea about them. &lt;/p&gt;&#xA;" OwnerUserId="23148" LastActivityDate="2020-02-20T18:05:41.630" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="20225" PostTypeId="2" ParentId="20217" CreationDate="2020-02-21T05:02:38.000" Score="0" Body="&lt;p&gt;The robot arm can be made fast by making it light. Less mass to move allows higher acceleration which allows faster starts and stops. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The robot arm can be made precise by increasing stiffness. This is generally done by adding material.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Due to the slender nature and long unsupported nature of robot arms they are prone to movement and flex. Compared to CNC machines they are much less precise because of this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Most robot arms on the market cannot get anywhere close to 0.01mm precision, let alone hit the same mark again. And this includes the smaller ones similar to what you are trying to build. (UR and Motoman smartseries)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I just checked the specs for a UR 3, repeatability (ability to hit the same mark multiple times) is +- 0.1mm. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you can build something close to 0.01mm precision on a hobbyist budget I would be impressed.&lt;/p&gt;&#xA;" OwnerUserId="22496" LastEditorUserId="22496" LastEditDate="2020-02-22T04:16:59.057" LastActivityDate="2020-02-22T04:16:59.057" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20227" PostTypeId="1" CreationDate="2020-02-21T08:24:41.333" Score="0" ViewCount="15" Body="&lt;p&gt;I know the UR5 is sending me messages with its status (I can't yet understand them though, but I'm already working on that).  However, they are too far apart to be useful: It sends them every 0.1 s.  I would like that to be at least every 0.01 s.  How can I change that configuration?&lt;/p&gt;&#xA;" OwnerUserId="24753" LastActivityDate="2020-02-21T08:24:41.333" Title="Increase frequency of status messages from UR5" Tags="&lt;control&gt;&lt;robotic-arm&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20228" PostTypeId="2" ParentId="19821" CreationDate="2020-02-22T02:19:52.937" Score="1" Body="&lt;p&gt;Since you want to control the throttle and steering angle on the car, you will need to be able to send PWM signals to the ESC and servo, respectively.  Given that you are using a raspberry pi (presumably mounted on the car), there are several ways to do this.  The easiest is to use a PCA9685 servo controller and have the RaspberryPi talk to it via I2C serial.  Other options are to send the PWM commands to the ESC and servo directly from the RaspberryPi using the RPi headers.  See &lt;a href=&quot;https://raspberrypi.stackexchange.com/questions/298/can-i-use-the-gpio-for-pulse-width-modulation-pwm&quot;&gt;here&lt;/a&gt; .  Finally, you could also use an arduino in place of the PCA9685; use USB to send commands to the arduino and use the arduino to output the pwm, see &lt;a href=&quot;https://maker.pro/raspberry-pi/tutorial/how-to-connect-and-interface-raspberry-pi-with-arduino&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The Donkeycar project might be a good place to start.  You can look at that project for how to set up PCA9685. &lt;a href=&quot;https://www.donkeycar.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.donkeycar.com/&lt;/a&gt;. That project also includes a web server that runs on the car; so you can send the control commands over via a web browser - this could easily be extended to another http client.  You can also control the via bluetooth.  This is a presentation on the anatomy of such a car &lt;a href=&quot;https://www.youtube.com/watch?v=pq6hiZEdirE&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=pq6hiZEdirE&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="24763" LastEditorUserId="24763" LastEditDate="2020-08-25T22:33:05.700" LastActivityDate="2020-08-25T22:33:05.700" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20229" PostTypeId="2" ParentId="19764" CreationDate="2020-02-22T04:38:48.630" Score="0" Body="&lt;p&gt;I think you will need a number of sensors to estimate a robot's position/pose and those of the other robots relative to it.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Indoor position systems are like indoor GPS; they can give you very precise positioning of a robot.  You can then have robots share their position (if cooperative). See &lt;a href=&quot;https://www.robotshop.com/en/indoor-navigation-positioning-system-starter-set-case-433mhz.html?gclid=EAIaIQobChMI7aSktY3k5wIVhK_sCh2xlQQyEAYYASABEgLno_D_BwE&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.  In any case, this is really good, in conjunction with an IMU and odemetry, for precise localization and navigation.&lt;/li&gt;&#xA;&lt;li&gt;In a very open space, you could use a scanning 2d lidar like &lt;a href=&quot;http://www.ydlidar.com/products/view/5.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt;.  That would be good for detecting an object.   That won't work too well for detecting an object if the space is cluttered, but it could help you navigate the space, avoiding obstacles.&lt;/li&gt;&#xA;&lt;li&gt;You can use a camera with a 360 degree lens, like &lt;a href=&quot;https://www.ebay.com/p/1800546716&quot; rel=&quot;nofollow noreferrer&quot;&gt;kogeto dot&lt;/a&gt;, and train a neural network to recognize other robots in the image.  Or to make things simpler, have each robot emit a light, then use computer vision to identify that in the 360.  Identification on the 360 image would give you relative angle as well.  If you had that, you could point a time-of-flight sensor in that direction to estimate the distance.&lt;/li&gt;&#xA;&lt;li&gt;You could and should use as many of these as possible and combine the sensor data to get a more reliable estimate of the robot's own position/pose and those of the other robots.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="24763" LastActivityDate="2020-02-22T04:38:48.630" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20230" PostTypeId="2" ParentId="19215" CreationDate="2020-02-22T04:55:23.753" Score="0" Body="&lt;p&gt;The DC motor you have is a brushless type typically used to turn a propeller on a drone.  It can go in 'reverse' using an brushless ESC that supports reverse.  I would not think most ESCs used for propellers would bother doing that.  Rather, look for a brushless ESC for an RC car and specifically look to see if it has reverse.  The brushless ESC can be controlled easily with PWM signals, so an Arduino or and PCA9685 can be used to generate those control signals (or even the pins on a RaspberryPi if that is what you have).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;One thing to keep in mind, a simple brushless motor like that is hard to control at low speeds.  To create an actuator like in the video you would need to add a lot of gearing so you can run it at high rpm.  It would be much easier to use a stepper motor.  An actuator like that in the video is &lt;a href=&quot;https://www.banggood.com/Drive-Stepper-Motor-Screw-With-Nut-Slider-Small-Stage-2-Phase-4-Wire-p-956344.html?cur_warehouse=CN&quot; rel=&quot;nofollow noreferrer&quot;&gt;less expensive&lt;/a&gt; than all of those parts, so think about whether to buy or build.&lt;/p&gt;&#xA;" OwnerUserId="24763" LastActivityDate="2020-02-22T04:55:23.753" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20231" PostTypeId="1" AcceptedAnswerId="20236" CreationDate="2020-02-22T13:24:10.897" Score="4" ViewCount="167" Body="&lt;p&gt;I have a question regarding impedance control for a robotic manipulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given that we have a task space trajectory:&#xA;&lt;span class=&quot;math-container&quot;&gt;$\ddot{x}$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$\dot{x}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And the dynamics model of the robot:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$\tau = M(q)\ddot{q} + C(q,\dot{q})\dot{q} + G(q) + J^\intercal F_{ext}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Control law: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$u = M(q)a_{qin} + C(q,\dot{q})\dot{q} + G(q)$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Forward dynamics model (Robot):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$M^{-1} \{ u - C(q, \dot{q})\dot{q} - G(q) -J^\intercal F_{ext} \} = a_{qin}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where &lt;span class=&quot;math-container&quot;&gt;$M(q)$&lt;/span&gt; is the inertia matrix, &lt;span class=&quot;math-container&quot;&gt;$C(q,\dot{q})$&lt;/span&gt; is the coriolis matix, &lt;span class=&quot;math-container&quot;&gt;$G(q)$&lt;/span&gt; is the gravitational load vector, &lt;span class=&quot;math-container&quot;&gt;$J^\intercal F_{ext}$&lt;/span&gt; is the external force exerted onto the links, &lt;span class=&quot;math-container&quot;&gt;$\ddot{q}$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$\dot{q}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$q$&lt;/span&gt; are the joint space trajectories, &lt;span class=&quot;math-container&quot;&gt;$\tau$&lt;/span&gt; is the torque, &lt;span class=&quot;math-container&quot;&gt;$u$&lt;/span&gt; is the control signal and finally &lt;span class=&quot;math-container&quot;&gt;$a_{qin}$&lt;/span&gt; is the computed joint acceleration for the control law.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$\ddot{q} = a_{qin}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;For the above&lt;/strong&gt;, we have impedance control (Spong M.W, 2006), where:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$\alpha = \ddot{x}^d + M_d^{-1} (B_d (\dot{x}^d - \dot{x}) + K_d(x^d - x) + F)$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where the closed loop form is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$M_d \ddot{e} + B_d\dot{e} + K_d e = -F$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where &lt;span class=&quot;math-container&quot;&gt;$e = (x^d - x)$&lt;/span&gt;, and &lt;span class=&quot;math-container&quot;&gt;$\ddot{x} = \alpha $&lt;/span&gt; (double integrator system)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$a_{qin} = J^{-1} (\alpha - \dot{J} \dot{q})$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With &lt;span class=&quot;math-container&quot;&gt;$M_d$&lt;/span&gt; being the inertia, &lt;span class=&quot;math-container&quot;&gt;$B_d$&lt;/span&gt; the damping and &lt;span class=&quot;math-container&quot;&gt;$K_d$&lt;/span&gt; stiffness coefficients for each of the degrees of freedom for the Task-space trajectories &lt;span class=&quot;math-container&quot;&gt;$\ddot{x}$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$\dot{x}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$F$&lt;/span&gt; is sensor force?.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is how &lt;em&gt;I see&lt;/em&gt; the block diagram of the system (and it might be wrong):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/cTRV1.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/cTRV1.png&quot; alt=&quot;An overview of the system&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;My question:&lt;/strong&gt;&#xA;Where does the force&#xA;&lt;span class=&quot;math-container&quot;&gt;$$F$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Come into play? Is it the same as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$F_{ext} = F$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If &lt;span class=&quot;math-container&quot;&gt;$F_{ext} = F$&lt;/span&gt;, does this mean that the Force from the sensor is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$\tau = M(q)\ddot{q} + C(q,\dot{q})\dot{q} + G(q) + J^\intercal F ?$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These general equations are all fetched from (Spong M.W., 2006) and I am just trying to make sense of them. Consider me an idiot, but I need help :(!&lt;/p&gt;&#xA;" OwnerUserId="24309" LastEditorUserId="24309" LastEditDate="2020-02-22T19:44:49.630" LastActivityDate="2020-02-24T09:35:19.547" Title="Understanding Impedance Control" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;dynamics&gt;&lt;manipulator&gt;&lt;force&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20232" PostTypeId="1" AcceptedAnswerId="20233" CreationDate="2020-02-22T13:24:28.073" Score="0" ViewCount="42" Body="&lt;p&gt;Good day, &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It has been a while since I last posted. I would just like to ask if anyone part of a lab or company doing research on aerial robotics has any suggestions of a good platform for deploying computer vision algorithms for aerial robots? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Currently our lab has a set of DJI Matrice drones but are too heavy for our liking. We really wanted to use the Skydio R2 drone for out future research projects but found out later that the SDK does not allow access for implementing our own Deep Learning or Reinforcement Learning networks (only allows the user to code their own preset movements in python). We also took a look at the Parrot AR drones but found that they were discontinued and do not have the computing power that the Skydio has.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I suggested that we stick with the DJI Matrice and just use an Nvidia Jetson for deployment but I am still curious to know if anyone knows of other available platforms. Does anyone know of a more compact platform available for research purposes?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you :)&lt;/p&gt;&#xA;" OwnerUserId="11311" LastEditorUserId="11311" LastEditDate="2020-02-22T16:16:59.360" LastActivityDate="2020-02-23T08:57:55.260" Title="Drone or UAV Platform for deployment of Deep Learning / Reinforcement Learning" Tags="&lt;quadcopter&gt;&lt;uav&gt;&lt;machine-learning&gt;&lt;platform&gt;&lt;drone&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20233" PostTypeId="2" ParentId="20232" CreationDate="2020-02-23T08:57:55.260" Score="1" Body="&lt;p&gt;there seems to be no mature drone platform focused on the NN research&lt;/p&gt;&#xA;&#xA;&lt;p&gt;personally I suggest using a drone combines a NUC, TX2 for example&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;the drone works as a flying platform providing control APIs, and a gimble system if possible&lt;/li&gt;&#xA;&lt;li&gt;the vision system can be constructed by NUC, you can put your own camera on it and do your NN research&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;for this design, you need a drone platform that should be friendly to mount customize devices. I suggest Matrices 100 or DJI A3 with your own frame, which have enough space and can privide power to your NUC.&lt;/p&gt;&#xA;" OwnerUserId="4514" LastActivityDate="2020-02-23T08:57:55.260" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20234" PostTypeId="2" ParentId="19215" CreationDate="2020-02-24T00:24:32.377" Score="0" Body="&lt;p&gt;The motor in your list is sensorless meaning that there is no provision internally for commutation feedback.  Such a motor cannot be operated reliably below 10-20% of it's maximum speed and it requires a fairly complex sequence to initiate rotation when stopped.  All of this is because the controller needs to know the rotor's position relative to the stator while running and that is determined by detecting when the voltage from the undriven winding (at the motor rotates the windings are driven in sequence) crosses zero and at low RPM the voltage is too low to sense accurately.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To operate a BLDC motor in servo (position control) or full range reversible variable speed mode some feedback is required.  For servo mode that usually means a rotary encoder and for either you need at least a &quot;hall effect&quot; commutation sensor which has three outputs that indicate which magnetic pole is closest to alignment with the rotating magnet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's a couple links to projects using an Arduino plus some homemade electronics to control a BLDC motor with hall effect feedback:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.vbesmens.de/en/positioning-controller.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.vbesmens.de/en/positioning-controller.html&lt;/a&gt;&#xA;&lt;a href=&quot;https://simple-circuit.com/arduino-bldc-brushless-dc-motor-control/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://simple-circuit.com/arduino-bldc-brushless-dc-motor-control/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Neither has encoder feedback which is necessary if you need to control the motor's position to a small fraction of one rotation, but both designs will allow complete control of the motor's speed and direction from an Arduino.&lt;/p&gt;&#xA;" OwnerUserId="24769" LastActivityDate="2020-02-24T00:24:32.377" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20236" PostTypeId="2" ParentId="20231" CreationDate="2020-02-24T09:35:19.547" Score="3" Body="&lt;p&gt;Yes, it is the same, &lt;span class=&quot;math-container&quot;&gt;$F$&lt;/span&gt; should be the same as &lt;span class=&quot;math-container&quot;&gt;$F_{ext}$&lt;/span&gt;. And &lt;span class=&quot;math-container&quot;&gt;$F$&lt;/span&gt; comes from a sensor or an estimation, in general from a force sensor. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The diagram seems correct and you may have &lt;span class=&quot;math-container&quot;&gt;$F$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$F_{ext}$&lt;/span&gt; coming from the same source. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The impedance controller is an indirect force control, you directly do not control the force exerted to the environment but rather a behavior to an external force based on the position error of the manipulator (mass spring damper system). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A hybrid force/position control where you have a cascaded force control with an impedance control can directly control the force while having a mas spring damper behavior. &lt;/p&gt;&#xA;" OwnerUserId="21229" LastActivityDate="2020-02-24T09:35:19.547" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20238" PostTypeId="1" AcceptedAnswerId="20244" CreationDate="2020-02-24T12:47:08.977" Score="1" ViewCount="44" Body="&lt;p&gt;Given I am building a grid map, and poses are represented using particles, how can I calculate the uncertainty of a pose In a grid based fastslam 2.0?&lt;/p&gt;&#xA;" OwnerUserId="24720" LastActivityDate="2021-03-22T08:34:30.170" Title="Uncertainty in grid based fastslam" Tags="&lt;slam&gt;&lt;localization&gt;&lt;kalman-filter&gt;&lt;mapping&gt;&lt;uncertainty&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20239" PostTypeId="1" CreationDate="2020-02-24T16:31:49.887" Score="0" ViewCount="19" Body="&lt;p&gt;I want to combine a laser line projector (projects a laser plane) and a single web camera to determine the X, Y, Z position of the laser point. I am slightly confused as to how to use the fact that we know the plane of the laser to advantage. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have the camera intrinsics, and I know that the the laser projector is at an offset of some distance from the camera (no rotation.) &lt;/p&gt;&#xA;" OwnerUserId="24163" LastActivityDate="2020-02-24T16:31:49.887" Title="Single Camera + Laser Projector Triangulation" Tags="&lt;computer-vision&gt;&lt;stereo-vision&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20240" PostTypeId="2" ParentId="20028" CreationDate="2020-02-24T21:10:10.967" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Is SLAM in general used only for first time mapping within an&#xA;  environment?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Mostly, yes however there have been some works where the researchers tried to update the map. You can reuse the map later if the map is static. In most cases, this is not true in real life.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If there is no mapping at all, can bots be trained to move randomly&#xA;  and turn back or around only if there is an obstacle or wall. This&#xA;  wouldn't require mapping, right? So is it right to say, bots can be&#xA;  moved either by mapping or without mapping, depending on the need.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;As @nayab has said, you can operate in the environment without a map, however, using a map allows you to localize the robot in the map and plan the trajectory. You can still localize a robot without a map, using a global localization system (GPS/GNSS) or if it were indoor using beacons. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can plan a trajectory using a topological map, not necessarily a metric map.&lt;/p&gt;&#xA;" OwnerUserId="24720" LastEditorUserId="24720" LastEditDate="2020-02-24T22:52:19.003" LastActivityDate="2020-02-24T22:52:19.003" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20241" PostTypeId="2" ParentId="20028" CreationDate="2020-02-24T22:14:59.987" Score="2" Body="&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;SLAM is a recursive algorithm with no base case. I suppose you could have a termination criteria for the algorithm stating that &quot;This Map is Sufficient&quot;, and then change your algorithm to localization. If you already have a map of your environment, then no, SLAM is not necessary. So to answer your first question plainly, &lt;strong&gt;yes&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The type of agent you are referring to is a simple reflex agent without an internal model (does not track the environment state). This is one of the simplest types of agents and while yes, it can be used, it cannot make any guarantees of successful navigation. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="20709" LastActivityDate="2020-02-24T22:14:59.987" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20242" PostTypeId="1" CreationDate="2020-02-25T01:18:49.940" Score="0" ViewCount="34" Body="&lt;p&gt;I have just ordered my d435i and while it was not intended to do NDVI I read the data sheet and noticed it had seperate image sensors, it is possible to read the IR image from either left, right or both wide imagers? if so, would this image only contain reflectance values from NIR spectrum ie. 650um above?  &lt;/p&gt;&#xA;" OwnerUserId="19659" LastActivityDate="2020-02-25T01:18:49.940" Title="Intel RealSense Depth Camera D435i Wide Imager questions?" Tags="&lt;computer-vision&gt;&lt;cameras&gt;&lt;hardware&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20243" PostTypeId="2" ParentId="19215" CreationDate="2020-02-25T01:54:23.100" Score="0" Body="&lt;p&gt;This is a simple problem which can be solved with an Arduino, Brushless ESC with forward and backward capabilities, thats all. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You need to program the Arduino to provide a PWM signal to the ESC, it's not a standard PWM but yet a set of pulses sent within a specific timeframe, you can do this by using the Servo library provided by Arduino.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To learn more on how to get the ESC and Arduino to work together check this &lt;a href=&quot;https://howtomechatronics.com/tutorials/arduino/arduino-brushless-motor-control-tutorial-esc-bldc/&quot; rel=&quot;nofollow noreferrer&quot;&gt;How to use ESC with Arduino&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19659" LastActivityDate="2020-02-25T01:54:23.100" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20244" PostTypeId="2" ParentId="20238" CreationDate="2020-02-25T06:36:05.693" Score="2" Body="&lt;p&gt;This depends on how you want to quantify the uncertainty. For example, you can compute the sample covariance between all state variables i.e.,&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ q_{jk}  = \frac{1}{N-1} \sum_{i=1}^{N} (x_{ij} - \bar{x}_j) (x_{ik} - \bar{x}_k) $$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;where the covariance matrix is &lt;span class=&quot;math-container&quot;&gt;$\mathbf{Q}$&lt;/span&gt; with entries &lt;span class=&quot;math-container&quot;&gt;$q_{ji}$&lt;/span&gt;. This is straightforward; however, different approaches exist. For estimating the uncertainty, you could then compute the trace or determinant of the covariance matrix, but other metrics exist as well.&lt;/p&gt;&#xA;" OwnerUserId="15213" LastEditorUserId="15213" LastEditDate="2021-03-22T08:34:30.170" LastActivityDate="2021-03-22T08:34:30.170" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20246" PostTypeId="1" CreationDate="2020-02-25T14:12:53.203" Score="1" ViewCount="40" Body="&lt;p&gt;My goal is to make a UAV which can search an area while avoiding obstacles. I figured I would navigate using the SLAM and Intel Realsense D435i (a stereoscopic camera with an IMU built in), but all of Intel's examples seem to use D435i for object avoidance, but another camera, the T265 for navigation. Am I missing something about these cameras that would make this application necessary to contain both cameras? And if not, are there any suggestions for resources to look at to achieve this goal?&lt;/p&gt;&#xA;" OwnerUserId="24733" LastActivityDate="2020-02-25T14:12:53.203" Title="Intel Realsense Cameras for Object Avoidance and SLAM to go to destination" Tags="&lt;slam&gt;&lt;computer-vision&gt;&lt;imu&gt;&lt;uav&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20247" PostTypeId="1" CreationDate="2020-02-25T17:50:50.837" Score="0" ViewCount="47" Body="&lt;p&gt;The axis definition affect the roll, pitch and yaw definition in a quadcopter?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Image I have the axis defined this way:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/L5DyE.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/L5DyE.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;then to roll I have to put a higher velocity in (1) than in (3) (turn around the &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; axis), and to pitch I have to put a higher velocity in (2) than in (4) (turn around the &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt; axis), for example. But what if I have the axis defined like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/N0Urs.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/N0Urs.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;the turn around the &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; axis will happen when 1 and 4 have one velocity and 2 and 3 another one, and the turn around the &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt; axis will occur when the velocity in 1 and 2 is &lt;span class=&quot;math-container&quot;&gt;$v_1$&lt;/span&gt; and the velocity in 3 and 4 is &lt;span class=&quot;math-container&quot;&gt;$v_2$&lt;/span&gt;, for example.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is that correct? How are the kinematics equations in this case?&lt;/p&gt;&#xA;" OwnerUserId="23438" LastActivityDate="2020-02-25T17:50:50.837" Title="Roll, pitch and yaw in a quadcopter" Tags="&lt;quadcopter&gt;&lt;flight-controller&gt;" AnswerCount="0" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20248" PostTypeId="1" CreationDate="2020-02-25T19:01:20.377" Score="1" ViewCount="68" Body="&lt;p&gt;Imagine there is a web service (let's say Twitter) that handles tons of requests from around the world. I want to figure out how to let the web service pick a certain amount of (let's say 1 billion) requests within a full month, smoothly. By &quot;smoothly&quot; it means I prefer not to have a solution that picks the very first 1 billion requests of the month then becomes idle. The distribution of the picked requests should roughly match the distribution of real traffic. However, the traffic to Twitter is always fluctuating and hard to predict beforehand (e.g., in the case of Superbowl) so I would like to apply a PID controller as below:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Setpoint: number of requests I gonna pick for the next time interval&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Input: number of requests I actually pick for the next time interval&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Setpoint can be set as (1 billion monthly goal - how many have I picked so far in the month) / number of time intervals left. Input is obviously simply an observation value.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here come the parts I am confused: what should be the choice of actuator and process, and how to interpret the PID formula output? According to these videos on PID controller (&lt;a href=&quot;https://www.youtube.com/watch?v=wkfEZmsQqiA&amp;amp;vl=en&quot; rel=&quot;nofollow noreferrer&quot;&gt;1&lt;/a&gt;, &lt;a href=&quot;https://www.youtube.com/watch?v=NVLXCwc8HzM&quot; rel=&quot;nofollow noreferrer&quot;&gt;2&lt;/a&gt;):&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;In the case where you want to control a quadcopter s.t. it hovers on a certain height, propellers are the actuators and the drone is the process that is lifted by propellers. If the output is x, you set the RPM to x.&lt;/li&gt;&#xA;&lt;li&gt;In the case where you want to control a bot s.t. it stops in a spot 50m away, robot feet are the actuators and the robot is the process that is driven by its feet. If the output is x, you set its speed (m/s) to x.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;With a similar thought, in the system I describe, I want to consider a simple filter that picks any incoming request by a rate &lt;code&gt;r&lt;/code&gt; as the actuator, and the process is the web service itself. But there can be of course many other options to pick the actuator and the process function.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Am I correct that: PID itself does not care about the actuator and the process. It is nothing more than a formula that takes in a set of parameters and observation values, then give you the &quot;output&quot;. It is your call to pick an (actuator, process) combination and interpret the output accordingly, either RPM / speed(m/s) / filter rate r.&lt;/p&gt;&#xA;" OwnerUserId="24777" LastEditorUserId="15160" LastEditDate="2020-05-05T22:37:53.353" LastActivityDate="2020-10-03T00:05:10.517" Title="How to determine actuator and process for PID, and how to intepret the output" Tags="&lt;pid&gt;&lt;actuator&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20249" PostTypeId="1" CreationDate="2020-02-26T02:24:19.647" Score="0" ViewCount="61" Body="&lt;p&gt;I paste this algorithm from textbook &lt;code&gt;Modern Robotics&lt;/code&gt; P294 in chapter 8:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/bJIrP.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/bJIrP.png&quot; alt=&quot;s&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is coordinate invariance of Newton-Euler equations. In the textbook, they use the frame is &lt;code&gt;centers of mass&lt;/code&gt; so the inertial matrix is simple and beautiful, but the result &lt;code&gt;torque&lt;/code&gt; &lt;span class=&quot;math-container&quot;&gt;$\tau$&lt;/span&gt; is applied in the &lt;code&gt;centers of mass&lt;/code&gt; and NOT in the joint frame. so, when we use this frame, &lt;code&gt;\tau&lt;/code&gt; maybe need some transformation from centers of mass to the joint frame?&lt;/p&gt;&#xA;" OwnerUserId="19138" LastEditorUserId="10414" LastEditDate="2021-01-25T16:22:24.907" LastActivityDate="2021-01-25T16:22:24.907" Title="Newton-Euler Inverse Dynamics by Screw" Tags="&lt;dynamics&gt;&lt;manipulator&gt;&lt;screw-theory&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20250" PostTypeId="2" ParentId="20249" CreationDate="2020-02-26T02:58:27.603" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;maybe need some transformation from centers of mass to the joint frame?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Isn't that what &lt;span class=&quot;math-container&quot;&gt;$A_i$&lt;/span&gt; is? I don't have the book with me, but from your excerpt:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Let &lt;span class=&quot;math-container&quot;&gt;$A_i$&lt;/span&gt; be the screw axis of joint &lt;span class=&quot;math-container&quot;&gt;$i$&lt;/span&gt; defined in &lt;span class=&quot;math-container&quot;&gt;$\{i\}$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;where it says at the top,&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;frames &lt;span class=&quot;math-container&quot;&gt;$\{1\}$&lt;/span&gt; to &lt;span class=&quot;math-container&quot;&gt;$\{N\}$&lt;/span&gt; [are attached] to the centers of mass of links &lt;span class=&quot;math-container&quot;&gt;$\{1\}$&lt;/span&gt; to &lt;span class=&quot;math-container&quot;&gt;$\{N\}$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-02-26T02:58:27.603" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20251" PostTypeId="2" ParentId="20248" CreationDate="2020-02-26T14:49:15.287" Score="0" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Am I correct that: PID itself does not care about the actuator and the process.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes.  But keep in mind that a PID controller works well for processes that have a certain kind of dynamics, namely that they have some constant or slowly moving offset which driven by some random process with a finite variance (or are driven by something that can be reasonably modeled as such).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may find that your network processes don't fit that &quot;finite variance&quot; criteria.  In particular, your Super Bowl example -- if you didn't predict it by knowing when the Super Bowl is showing -- would have a very long-tailed distribution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To use your Super Bowl example, you'd start by over-collecting (because you didn't know the event was coming), then you'd lack space for the Super Bowl, then you'd under-collect for a while.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given that events are, essentially, totally unknown, it may be better to modify the algorithm that you initially describe -- pick the first billion samples, but time-stamp them.  Then, as more traffic comes in, discard existing samples so that the daily (or hourly) distribution of samples is driven to be a scaled version of the actual traffic, or whatever distribution you think is best.&lt;/p&gt;&#xA;" OwnerUserId="1411" LastActivityDate="2020-02-26T14:49:15.287" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20252" PostTypeId="2" ParentId="20248" CreationDate="2020-02-26T15:39:06.820" Score="1" Body="&lt;p&gt;I think you're way overthinking this. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to evenly handle N events in a month, then you convert a month to whatever time granularity you like (T) and then handle (N/T) events per T. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, if you want to handle 300 events in a 30 day window, and you want it smoothed to the day, then you handle (300/30) = 10 events per day.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have a billion events you want to handle in a 30 day window, and you want it smoothed to the millisecond, then you convert a month to milliseconds:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;T = (30 \mbox{days} * 24\mbox{hr/day} * 3600\mbox{s/hr} * 1000\mbox{ms/s}) \\&#xA;T = 2,592,000,000 \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then you handle (N/T) events per T, or (1,000,000,000 / 2,592,000,000) events per millisecond. This works out to 0.3858 events per millisecond.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can invert that number (1/result) or (T/N) to get T's per event, or in this example milliseconds per event - (2,592,000,000 / 1,000,000,000) = 2.592 milliseconds per event. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, to &quot;smoothly&quot; handle a billion events per month, set a timer for 2.592 milliseconds, then handle that event. You can add the sample delay to your next timer, such that if you actually wind up waiting 3 ms for the next message to come in, then you've waited &quot;too long&quot; by (3 - 2.592) = 0.408 ms, so you can adjust your next timer by the same to get &quot;back on track&quot; - the next timer becomes (2.592 - 0.408) ms = 2.184.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If perfectly sampled, you'd get two new samples at (2.592 + 2.592) = 5.184 ms, and with the delay-forwarding above you still get two new samples, even if the first one is delayed, in (3 + 2.184) = 5.184 ms.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-02-26T15:39:06.820" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20254" PostTypeId="1" CreationDate="2020-02-26T19:19:50.957" Score="0" ViewCount="65" Body="&lt;p&gt;I am new in localization algorithms and EKF is new for me as well. I think that I implemented EKF (the whole code of class is &lt;a href=&quot;https://github.com/blues-lead/moro_ros/blob/master/filtering_utils/src/filtering_utils/ekf.py&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. I have problems in updating bearing angle of the robot. Basically I have to subtract expected measurement from real measurement. Or &lt;span class=&quot;math-container&quot;&gt;$$ [range_{measured}, bearing_{measured}] - [range_{expected}, bearing_{expected}]$$&lt;/span&gt;. I am stuck a bit with that stuff. Please give me some advice on how to get correct bearing for innovation step.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is my measurement model function:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;def measurement_model(self,state):&#xA;        x = state[0]&#xA;        y = state[1]&#xA;        theta = state[2]&#xA;        px = self.cur_id[0] # x coordinate of current beacon&#xA;        py = self.cur_id[1] # y coordinate of current beacon&#xA;&#xA;        r = np.sqrt((px-x)**2 + (py-y)**2)      #Distance&#xA;        phi = np.arctan2(py-y, px-x) - theta    #Bearing&#xA;&#xA;        self.Z[0] = r&#xA;        self.Z[1] = phi &#xA;        return self.Z&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Update function:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;def update(self, msg): #&#xA;        self.cur_id = self.beacons[msg.ids[0]] # coordinates of current transmitter&#xA;&#xA;        # landmark position in robot frame&#xA;        pos_x = msg.pose.position.x&#xA;        pos_y = msg.pose.position.y&#xA;        rng = np.sqrt(pos_x**2 + pos_y**2)&#xA;        #bearing&#xA;        theta = self.wrap_to_pi(euler_from_quaternion([msg.pose.orientation.x, msg.pose.orientation.y, msg.pose.orientation.z, msg.pose.orientation.w])[2])&#xA;        self.observation_jacobian_state_vector()&#xA;        new_theta_meas = np.arctan2(self.cur_id[1] - pos_y, self.cur_id[0] - pos_x) - theta # HOW DO I GET THIS CORRECTLY&#xA;&#xA;        #nominator&#xA;        floor = self.cov_matrix.dot(self.obs_j_state.transpose()).astype(np.float32)&#xA;&#xA;        #denominator&#xA;        bottom = (self.obs_j_state.dot(self.cov_matrix).dot(self.obs_j_state.transpose()) + np.eye(2)*0.01).astype(np.float32)&#xA;&#xA;        self.K = floor.dot(np.linalg.inv(bottom))&#xA;&#xA;        expected_meas = self.measurement_model(self.state_vector)&#xA;        tempterm = np.array(([rng - expected_meas[0],new_theta_meas - expected_meas[1]]))&#xA;&#xA;        self.state_vector = self.state_vector + self.K.dot(tempterm)&#xA;        self.cov_matrix = (np.eye(3) - self.K.dot(self.obs_j_state)).dot(self.cov_matrix)&#xA;        print(self.state_vector)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="24796" LastEditorUserId="24796" LastEditDate="2020-02-26T19:38:27.980" LastActivityDate="2020-02-26T19:38:27.980" Title="EKF landmark-based help needed" Tags="&lt;mobile-robot&gt;&lt;ros&gt;&lt;kalman-filter&gt;&lt;ekf&gt;" AnswerCount="0" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="20257" PostTypeId="2" ParentId="20218" CreationDate="2020-02-27T06:13:29.137" Score="2" Body="&lt;p&gt;The Orocos-KDL library might have what you're looking for. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can first construct a spline-path using &lt;code&gt;Path__RoundedComposite&lt;/code&gt;. Each way point is defined with a desired position and orientation. Once the path has been defined, add velocity information using the &lt;code&gt;VelocityProfile&lt;/code&gt; class. For a smooth motion, you've 2 options: spline and trapezoidal. If sudden start and stop is acceptable, you could go with rectangular too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's an &lt;a href=&quot;https://github.com/snrkiwi/orocos-kdl/blob/master/orocos_kdl/examples/trajectory_example.cpp&quot; rel=&quot;nofollow noreferrer&quot;&gt;example&lt;/a&gt; from their official repository.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you've the trajectory down, extract inverse position and velocity kinematics using KDL's inverse kinematics solvers (assuming you've defined your robot as a KDL chain).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The math underlying all this (for eg. adding timing law to a Cartesian path, rotation interpolation) is pretty interesting, but it might take some time to code all that yourself ... that'd be a great learning experience nonetheless.&lt;/p&gt;&#xA;" OwnerUserId="21531" LastEditorUserId="21531" LastEditDate="2020-02-27T06:26:04.930" LastActivityDate="2020-02-27T06:26:04.930" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20259" PostTypeId="1" CreationDate="2020-02-27T19:08:06.143" Score="1" ViewCount="93" Body="&lt;p&gt;Hi im currently studying for an introduction on robotics test and i have this task to calculate the kinetic and potential energy of the robot.&#xA;The robot is an open chain and has one rotating joint as base then an arm as translatoric joinz and one rotating joint again.&#xA;Each of those joints has a mass m. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;m1,m2 and m3. And i need some matrix to express the masses of these joints so that i can calculate the energies. &lt;/p&gt;&#xA;" OwnerUserId="24807" LastActivityDate="2020-02-28T06:58:42.950" Title="How do I get the matrix for the mass?" Tags="&lt;kinematics&gt;&lt;industrial-robot&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20262" PostTypeId="2" ParentId="20259" CreationDate="2020-02-28T02:38:11.317" Score="0" Body="&lt;p&gt;Maybe you can use CAD software such as soildworks to read the inertial matrix after set link materials.But software also use the basic formula calculate matrix if you know the properties of link.&lt;/p&gt;&#xA;" OwnerUserId="19138" LastActivityDate="2020-02-28T02:38:11.317" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20263" PostTypeId="2" ParentId="20259" CreationDate="2020-02-28T06:58:42.950" Score="2" Body="&lt;p&gt;If you have the Jacobians from joint velocities to link body velocities (you can calculate these by taking each link &lt;span class=&quot;math-container&quot;&gt;$i$&lt;/span&gt; as if it were the end effector and calculating its body Jacobian &lt;span class=&quot;math-container&quot;&gt;$J^{b}_{i}$&lt;/span&gt;), then you can get the mass matrix for each link with respect to the joint angles as the transpose of the link's Jacobian multiplied by the link's mass and inertia matrix &lt;span class=&quot;math-container&quot;&gt;$mu_{i}$&lt;/span&gt; multiplied by the link's Jacobian,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$M_{i} =  (J^{b}_{i})^{T} \mu_{i} J^{b}_{i},$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and the total mass matrix with respect to the joint velocities as the sum of the individual links' mass matrices,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$M = \sum_{i} (J^{b}_{i})^{T} \mu_{i} J^{b}_{i}.$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Assuming that we put the link body frames at their centers of mass, the link mass matrices have the form&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ \mu_{i} = \begin{bmatrix} m_{i} &amp;amp; &amp;amp; \\ &amp;amp; m_{i} &amp;amp; \\ &amp;amp;&amp;amp; I_{i} \end{bmatrix}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;for planar systems (where &lt;span class=&quot;math-container&quot;&gt;$m_{i}$&lt;/span&gt; is the mass of the link and &lt;span class=&quot;math-container&quot;&gt;$I_{i}$&lt;/span&gt; is its moment of inertia), or&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ \mu_{i} = \begin{bmatrix} m_{i} &amp;amp; &amp;amp; &amp;amp;&amp;amp;&amp;amp; \\ &amp;amp; m_{i} &amp;amp; &amp;amp;&amp;amp;&amp;amp; \\ &amp;amp;&amp;amp;m_{i} &amp;amp;&amp;amp;&amp;amp; \\ &amp;amp;&amp;amp;&amp;amp; \phantom{-}I_{xx,i} &amp;amp; -I_{xy,i} &amp;amp; -I_{xz,i}\\&amp;amp;&amp;amp;&amp;amp; -I_{yx,i} &amp;amp; \phantom{-}I_{yy,i} &amp;amp; -I_{yz,i} \\&amp;amp;&amp;amp;&amp;amp; -I_{zx,i} &amp;amp; -I_{zy,i} &amp;amp; \phantom{-}I_{zz,i} \end{bmatrix}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;for systems moving in three-dimensional space. If the link body frames are aligned with the principle axes (longest and shortest mass distributions) of the links, then the off-diagonal &lt;span class=&quot;math-container&quot;&gt;$I$&lt;/span&gt; terms in the local expression of the three-dimensional moment of inertia become zero,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ \mu_{i} = \begin{bmatrix} m_{i} &amp;amp; &amp;amp; &amp;amp;&amp;amp;&amp;amp; \\ &amp;amp; m_{i} &amp;amp; &amp;amp;&amp;amp;&amp;amp; \\ &amp;amp;&amp;amp;m_{i} &amp;amp;&amp;amp;&amp;amp; \\ &amp;amp;&amp;amp;&amp;amp; I_{xx,i} &amp;amp;  &amp;amp; \\&amp;amp;&amp;amp;&amp;amp;  &amp;amp; I_{yy,i} &amp;amp;  \\&amp;amp;&amp;amp;&amp;amp; &amp;amp; &amp;amp; I_{zz,i} \end{bmatrix}.$$&lt;/span&gt;&lt;/p&gt;&#xA;" OwnerUserId="11712" LastActivityDate="2020-02-28T06:58:42.950" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20264" PostTypeId="1" CreationDate="2020-02-28T14:22:51.063" Score="2" ViewCount="68" Body="&lt;p&gt;if we have a robot with 5 DoF and we want to plan its movement. The inverse kinematic solver will do this job without a doubt. However, it is usually assumed that axes can be moved in a synchronized way. More precisely, if the solution of my IK solver is q_dot = [0.01,0,0.01,0.01,0.01], the robot will try to move 4 axes at the same time, however, what if the power of the robot is just sufficient to move only 2 axes at the same time. The actual motion will be probably different than one expected. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Questions:&lt;/strong&gt;  &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Using the nullspace technique, one can pre-define the sequence of axes so that axes are moved in this pre-defined hierarchy. However, I am afraid that this approach will limit the flexibility of the robot too much. Does anyone know a better solution or reference about it? &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="21382" LastActivityDate="2020-03-31T11:01:25.227" Title="Asynchronous axes movement" Tags="&lt;inverse-kinematics&gt;&lt;motion-planning&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20267" PostTypeId="2" ParentId="20264" CreationDate="2020-03-01T10:47:18.827" Score="2" Body="&lt;p&gt;You could use joint constraints with timers or guard conditions applied to them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically, the constraint of the axes that you don't want to move, you can set to zero degree allowed angles change. Then change this constraint to something non-zero, when certain condition is met. &#xA;This condition can be your timer, or the fact that other axes have finished their move, or reached certain angle. In turn this other turning axes constraints can be set to zero angle at the same time. This way you can have only a set of axes rotating (or translating if that is what you need) at the same time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, joint constraints can be very tedious. I am not sure how well you can apply them to conventional IK solutions, but they certainly lot easier to use with iterative solvers. &#xA;My practical suggestion would be to use FABRIK solver, with conic joint constraint projected on a 2D plane.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can find more information here: &lt;a href=&quot;http://www.andreasaristidou.com/FABRIK.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.andreasaristidou.com/FABRIK.html&lt;/a&gt;&#xA;If high precision is not the main target, this solution is pretty good.&#xA;My personal experience is, that this solver is very fast and gives a natural motion. Also, conic constraints can be applied relatively easily.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this helps you progressing on your project.&lt;/p&gt;&#xA;" OwnerUserId="18318" LastActivityDate="2020-03-01T10:47:18.827" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20268" PostTypeId="2" ParentId="19678" CreationDate="2020-03-01T10:57:07.447" Score="1" Body="&lt;p&gt;I think Felipe's answer is very useful. In addition to it I would suggest iterative IK solvers. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the recent months I've got involved in using FABRIK solver. It is very simple to understand and implement. Also it does not require extensive trigonometrical knowledge.&#xA;As a result you can get a very natural leg movement and the algorithm is very fast.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See the link for more info:&#xA;&lt;a href=&quot;http://www.andreasaristidou.com/publications/papers/FABRIK.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.andreasaristidou.com/publications/papers/FABRIK.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18318" LastActivityDate="2020-03-01T10:57:07.447" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20270" PostTypeId="1" CreationDate="2020-03-01T15:33:07.493" Score="1" ViewCount="48" Body="&lt;p&gt;I have a pose &lt;span class=&quot;math-container&quot;&gt;$\boldsymbol{x}_0 = (x, y, \theta)$&lt;/span&gt; in an absolute frame, right-handed and centered in (0, 0, 0). I obtain a measurement &lt;span class=&quot;math-container&quot;&gt;$\boldsymbol{m} = (\Delta x, \Delta y, \Delta \theta)$&lt;/span&gt; in the previous pose coordinate system. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the new pose &lt;span class=&quot;math-container&quot;&gt;$\boldsymbol{x}_1$&lt;/span&gt; in the absolute frame? &#xA;If the previous pose had a covariance &lt;span class=&quot;math-container&quot;&gt;$\Sigma_{x_0}$&lt;/span&gt;, and the measurement has a covariance &lt;span class=&quot;math-container&quot;&gt;$\Sigma_{m}$&lt;/span&gt;, what is the covariance of the new pose &lt;span class=&quot;math-container&quot;&gt;$\Sigma_{x_1}$&lt;/span&gt;?&lt;/p&gt;&#xA;" OwnerUserId="24189" LastActivityDate="2020-03-04T13:58:01.543" Title="Absolute 2D pose from previous pose and measurement" Tags="&lt;transforms&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20275" PostTypeId="1" CreationDate="2020-03-02T17:24:10.803" Score="1" ViewCount="23" Body="&lt;p&gt;I just started with mobile robotics. I'm trying to do a collaborative system between a mobile robot and a ceiling camera (Raspberry). They should do all tasks as a &quot;team&quot;. Means Calibration, Pathcreation/planning (just based on camera created map), Localization, Map Updating.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I want to implement a localization with a given map based on the camera image and a robot with odometry and sonar sensing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So far I implemented a Odometry Model and I have the projection matrix of my camera based on Calibration I did. It is from Vision Data (Template Matching) und Pose Data (Odometry). Algorithm was based on DLT.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And I created a binary map from the camera image which is a first Map for the Robot but the robot will Update it later based on sonar sensing (lines/marks on the ground are objects for the camera but no threat for the robot) This binary map should be like a grid map.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am stumbling on 2 questions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;What is the best way to implement localization here? Do I need to do it with a particle filter? What It be good to have camera data (Reconstruct Imagedata to world coordinates) and sonar data as measurement model? Another roboter will later be in the same playfield, which leads to bad vision data bc my template Matching will not guess the right robot I guess? &#xA;(Robot + Camera should work together in localization)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;How can I scale my so far created map after calibration? The binary image is 76x120 pixels and I have the camera projection matrix. &#xA;Do I just reconstruct the world points based on the image size?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Thanks!&#xA;Cheers.&lt;/p&gt;&#xA;" OwnerUserId="24537" LastEditorUserId="24537" LastEditDate="2020-03-03T08:48:11.173" LastActivityDate="2020-03-03T08:48:11.173" Title="Hint regarding Localization &amp; Map Scaling" Tags="&lt;mobile-robot&gt;&lt;localization&gt;&lt;cameras&gt;&lt;navigation&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20277" PostTypeId="1" CreationDate="2020-03-03T13:46:37.097" Score="4" ViewCount="46" Body="&lt;p&gt;As described in the book &lt;strong&gt;Modern Robotics&lt;/strong&gt; by &lt;strong&gt;Frank C. Park&lt;/strong&gt; the velocity of a reference frame can be described as :&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$V_s = J_s(\theta)\dot{\theta}$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$V_b = J_b(\theta)\dot{\theta}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However in the definition of the &lt;strong&gt;spatial velocities&lt;/strong&gt; &lt;span class=&quot;math-container&quot;&gt;$V_s$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$V_b$&lt;/span&gt; we have that:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ V_s = [\omega_s, v_s]^T  \in \mathcal{R}^6$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$ V_b = [\omega_b, v_b]^T  \in \mathcal{R}^6$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I get the idea that &lt;span class=&quot;math-container&quot;&gt;$\omega_s$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\omega_b$&lt;/span&gt; are the angular velocities as seen from each reference frame, however I quite dont get what does &lt;span class=&quot;math-container&quot;&gt;$v_s$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$v_b$&lt;/span&gt; are making reference to. &lt;/p&gt;&#xA;" OwnerUserId="24836" LastEditorUserId="10414" LastEditDate="2021-01-25T16:22:02.963" LastActivityDate="2021-01-25T16:22:02.963" Title="Velocity description in Screw Motion Theory" Tags="&lt;kinematics&gt;&lt;joint&gt;&lt;screw-theory&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20279" PostTypeId="2" ParentId="20277" CreationDate="2020-03-03T19:36:52.280" Score="3" Body="&lt;p&gt;The body velocity &lt;span class=&quot;math-container&quot;&gt;$V_{b}$&lt;/span&gt; is the velocity of the frame with respect to the world, as seen from the frame's perspective. Its rotational component &lt;span class=&quot;math-container&quot;&gt;$\omega_{b}$&lt;/span&gt; contains the rotation rates around the world-fixed axes instantaneously pointing in the frame's forward, lateral, and dorsal directions (local &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt;, and &lt;span class=&quot;math-container&quot;&gt;$z$&lt;/span&gt;), and its translational component &lt;span class=&quot;math-container&quot;&gt;$v_{b}$&lt;/span&gt; contains the frame's translational velocities along these axes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The spatial velocity &lt;span class=&quot;math-container&quot;&gt;$V_{s}$&lt;/span&gt; is the velocity of the frame with respect to the world, as seen from the perspective of a second frame rigidly attached to the first frame, but currently located at and aligned with the frame at the origin. Its rotational component &lt;span class=&quot;math-container&quot;&gt;$\omega_{s}$&lt;/span&gt; contains the rotation rates of this second frame around the world axes, and its translational component &lt;span class=&quot;math-container&quot;&gt;$v_{s}$&lt;/span&gt; contains the translational velocity of this second frame along the world axes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For an explanation of why the spatial velocity is useful, see my answer to &lt;a href=&quot;https://robotics.stackexchange.com/questions/8940/robotic-manipulator-jacobian-by-product-of-exponentials/9011#9011&quot;&gt;this question&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="11712" LastActivityDate="2020-03-03T19:36:52.280" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20280" PostTypeId="2" ParentId="20270" CreationDate="2020-03-04T13:58:01.543" Score="2" Body="&lt;p&gt;For your first question, it's just a a change in coordinate frames, you have the absolute coordinate frame and a coordinate frame &quot;local&quot; which is centered in x0 and the pose is in the local coordinate frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The equation would look like that:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$ \bigg( \begin{matrix} x'\\ y' \\ \theta' \end{matrix}\bigg) = \bigg( \begin{matrix} cos(\theta) &amp;amp; -sin(\theta) &amp;amp; x0 \\ sin(\theta) &amp;amp; cos(\theta) &amp;amp; y0 \\ 0 &amp;amp; 0 &amp;amp; 1 \end{matrix}\bigg)  \bigg( \begin{matrix} x \\ y \\ \theta \end{matrix}\bigg)$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the second question I think it's ok to also take into account the covariance matrices in the previous eq.&#xA;&lt;span class=&quot;math-container&quot;&gt;$ \bigg( \begin{matrix} x'\\ y' \\ \theta' \end{matrix}\bigg) = \bigg( \begin{matrix} cos(\theta) &amp;amp; -sin(\theta) &amp;amp; x0 \\ sin(\theta) &amp;amp; cos(\theta) &amp;amp; y0 \\ 0 &amp;amp; 0 &amp;amp; 1 \end{matrix}\bigg) Q_{m}  \bigg( \begin{matrix} x \\ y \\ \theta \end{matrix}\bigg)Q_{x1}$&lt;/span&gt;&lt;/p&gt;&#xA;" OwnerUserId="15592" LastActivityDate="2020-03-04T13:58:01.543" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20281" PostTypeId="1" CreationDate="2020-03-04T14:19:36.783" Score="2" ViewCount="49" Body="&lt;p&gt;I'm working on a project trying to make some electric roller curtains.&#xA;I can use 2 motors on this curtain, on each side to lift and pull down the curtain. Pulling down the curtain requires not as much power to pull it back up since pulling it up is bringing the weight of the curtain back up against gravity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if this curtain weighs in total, lets say 2 kgs. Once the curtain is all the way down, it's on a stall and I have to get it out of stall and roll it back up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I have for example a motor with the following data:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Specifications:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Rated Voltage: DC 12V&lt;/li&gt;&#xA;&lt;li&gt;Reduction Ratio: 1: 31.6&lt;/li&gt;&#xA;&lt;li&gt;No-Load Speed: 100RPM&lt;/li&gt;&#xA;&lt;li&gt;Rated Torque: 4.5Kg.cm&lt;/li&gt;&#xA;&lt;li&gt;Rated Current: 1.1Amp&lt;/li&gt;&#xA;&lt;li&gt;Gearbox Size: 37 x 24.5mm (1.46&quot; x 0.96&quot;) (D*L)&lt;/li&gt;&#xA;&lt;li&gt;Motor Size: 36.2 x 33.3mm (1.43&quot; x 1.31&quot;) (D*L)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;There's the rated torque of 4.5 kg.cm which means I can move 4.5kg with an &quot;arm&quot; of 1 cm. Here's my first doubt, what exactly does it mean 4.5kg with an arm of 1 cm. Does it mean that if I attach a 1 cm arm, perpendicular to the motor shaft, and then at the other end of that arm I have a weight of &amp;lt; 4.5 kg, it will move?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Will this motor have the power to lift the 2 kg curtain based on the data? What other variables should I analyze?&lt;/p&gt;&#xA;" OwnerUserId="24844" LastEditorUserId="110" LastEditDate="2020-03-04T17:37:30.517" LastActivityDate="2020-03-04T17:37:30.517" Title="How to calculate what motor I need to move weight" Tags="&lt;motor&gt;&lt;torque&gt;&lt;dc&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20282" PostTypeId="1" CreationDate="2020-03-04T14:34:25.163" Score="1" ViewCount="33" Body="&lt;p&gt;We have the following parallel robot architecture:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/L87fE.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/L87fE.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Positions of the vectors &lt;span class=&quot;math-container&quot;&gt;$u_i, v_i, w_i$&lt;/span&gt;, the angles &lt;span class=&quot;math-container&quot;&gt;$\theta_i$&lt;/span&gt;, angular velocity &lt;span class=&quot;math-container&quot;&gt;$\dot{\theta_i}$&lt;/span&gt; and the Jacobian &lt;span class=&quot;math-container&quot;&gt;$J$&lt;/span&gt;, that mapping vector of angular velocities &lt;span class=&quot;math-container&quot;&gt;$[\dot{\theta_1},\dot{\theta_2},\dot{\theta_3}]$&lt;/span&gt; into the angular velocity &lt;span class=&quot;math-container&quot;&gt;$[\omega_x,\omega_y,\omega_z]$&lt;/span&gt; of the platform are known.&#xA;Is it possible, using these parameters, to calculate the angular velocities of passive joints &lt;span class=&quot;math-container&quot;&gt;$\dot{\psi_i}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\dot{\xi_i}$&lt;/span&gt;?&lt;/p&gt;&#xA;" OwnerUserId="24481" LastEditorUserId="24481" LastEditDate="2020-03-04T17:12:46.953" LastActivityDate="2020-03-04T17:12:46.953" Title="Formulas for calculating the passive joints angular velocities" Tags="&lt;mobile-robot&gt;&lt;kinematics&gt;&lt;inverse-kinematics&gt;&lt;forward-kinematics&gt;" AnswerCount="0" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20284" PostTypeId="1" CreationDate="2020-03-05T08:41:41.317" Score="1" ViewCount="23" Body="&lt;p&gt;What is a canonical grasp and how is it different from normal/other grasp? I've searched through internet and forums but haven't found any answers. &lt;/p&gt;&#xA;" OwnerUserId="22218" LastActivityDate="2020-03-05T08:41:41.317" Title="What is canonical grasp?" Tags="&lt;robotic-arm&gt;&lt;manipulator&gt;&lt;theory&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20285" PostTypeId="2" ParentId="19055" CreationDate="2020-03-05T10:23:38.537" Score="0" Body="&lt;p&gt;Have a look at &lt;a href=&quot;http://wiki.ros.org/asr_ftc_local_planner&quot; rel=&quot;nofollow noreferrer&quot;&gt;asr_ftc_local_planner&lt;/a&gt;. &lt;/p&gt;&#xA;" OwnerUserId="9166" LastActivityDate="2020-03-05T10:23:38.537" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="20287" PostTypeId="1" CreationDate="2020-03-05T17:07:05.853" Score="0" ViewCount="25" Body="&lt;p&gt;I am trying to send commands via a Serial COM Port (RS 232) to a TMB200 SCARA Robot's controller and when I connect it to my laptop and open hyperterminal the following random characters start showing up on the screen repetitively.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/YBcIf.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/YBcIf.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have tried adjusting the baud rate and number of bits to all available options and while the type of characters being displayed changes, they do not become understandable. Does anyone know what the problem could be and how to fix it? &lt;/p&gt;&#xA;" OwnerUserId="24854" LastActivityDate="2020-03-05T17:07:05.853" Title="SCARA Robot sending strange ASCII Characters" Tags="&lt;rs232&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20288" PostTypeId="1" CreationDate="2020-03-05T19:16:52.977" Score="2" ViewCount="101" Body="&lt;p&gt;I have a mobile manipulator that moves on the plane. The base moves in SE(2) and the manipulator is also planar with 4 links. The mobile base will be a differential drive robot and its motion is defined as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gX7L1.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gX7L1.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The manipulator is attached to the center of our mobile base. How do I compute the Jacobian of the mobile manipulator?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that for the mobile manipulator I have something of the form:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/fY7WO.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fY7WO.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The middle matrix is what I need to compute.&lt;/p&gt;&#xA;" OwnerUserId="24855" LastActivityDate="2021-05-29T20:05:30.440" Title="Jacobian of a planar manipulator with 4 links" Tags="&lt;mobile-robot&gt;&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20289" PostTypeId="1" CreationDate="2020-03-05T19:43:06.657" Score="1" ViewCount="36" Body="&lt;p&gt;I am currently busy with a robot that needs to obtain it's orientation relative to a line seen by a camera. At the moment, I am using Hough lines to obtain a gradient for the line, but the gradient obtained is not the same as the orientation of the robot relative to the line. In other words, if I place the line 45 degrees Infront of the robot, the returned gradient of the line is not 1 (for a 45 degree line). I'm guessing this is due to the line being in a different plane to that of the camera image. The camera is tilted 15 degrees down, but can be made to be exactly vertical. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How would I calculate the orientation of the robot relative to the line from the lines obtained in the camera? I have attached an image to help aid in my explanation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would like to know if using the rotation and translation matrix of cameras would help solve this problem too.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/uiUOF.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/uiUOF.jpg&quot; alt=&quot;Image of the camera relative to the line&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="23873" LastEditorUserId="23873" LastEditDate="2020-03-18T13:16:51.617" LastActivityDate="2020-03-18T13:16:51.617" Title="Determining Orientation of a Robot Relative to a Line on Table" Tags="&lt;localization&gt;&lt;cameras&gt;&lt;line-following&gt;&lt;orientation&gt;" AnswerCount="0" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20290" PostTypeId="1" AcceptedAnswerId="20294" CreationDate="2020-03-06T13:57:59.387" Score="2" ViewCount="34" Body="&lt;p&gt;I want to ask a very simple question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For the robot dynamics Newton-Euler algorithm, suppose there is a two-link planar robot, we can write the simple dynamic equation form as &lt;span class=&quot;math-container&quot;&gt;$M(\theta)\ddot{\theta} =  \tau - h(\theta,\dot{\theta})$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the equation, we can see if we applied only one joint torque(suppose applied at joint one and ignore all links gravity), it will affect another joint accelerate(change the second joint angles).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's not intuitive, in my imagination, if we run the joint one motor and ignore the gravity of links, so just change the joint one angle. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;who can explain it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Best,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ben.&lt;/p&gt;&#xA;" OwnerUserId="19138" LastEditorUserId="19138" LastEditDate="2020-03-06T14:33:40.500" LastActivityDate="2020-03-06T18:52:33.683" Title="Why applied joint torque will affect another joint?" Tags="&lt;control&gt;&lt;motor&gt;&lt;dynamics&gt;&lt;manipulator&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20291" PostTypeId="1" CreationDate="2020-03-06T15:16:16.083" Score="0" ViewCount="28" Body="&lt;p&gt;I remember that when I was a kid, in the 1980s, I had some toys made in Taiwan that basically worked like this: they moved forward uniterruptily until they bumped into an obstacle; then they moved back a few centimeters and then keep moving forward with an angle in relation to the original trajectory of 15-30º clockwise; unless they bumped something while turning back, so a forward movement was triggered, which made then move in a smaller angle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With this routine, they could basically move everywhere in the house. I don't know very well their mechanism, all they had in common was was a wheel (or wheels?) under a metallic circle under the toy; or maybe an arc of circle where a wheel could change its direction by changing its position on the arc. My memory is fuzzy&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do you people have any idea of what was the mechanism of these toys? I am pretty sure they were quite simple as I don't remember seeing anything complicated inside them. Also, I am not a specialist in robotics, and I couldn't find anything about this type of thing by searching on google.&lt;/p&gt;&#xA;" OwnerUserId="24863" LastActivityDate="2020-03-06T15:58:43.787" Title="Bump and turn toys: how do they work?" Tags="&lt;motor&gt;&lt;wheeled-robot&gt;&lt;motion&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20292" PostTypeId="2" ParentId="20291" CreationDate="2020-03-06T15:58:43.787" Score="2" Body="&lt;p&gt;There's two parts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The wheel you're remembering is a castor wheel that's designed to stick at straight forward when the car is going forward, and will turn to about 20 degrees when the car goes backwards.  There used to be some really cheap remote-control cars that just had a button that did that (so, no response to hitting a wall).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you took that mechanism and combined it with a front bumper connected to a microswitch, then the bumper could actuate a timer that would reverse the car for some set amount of time, then go forward.  I suspect that's what these cars you remember did.&lt;/p&gt;&#xA;" OwnerUserId="1411" LastActivityDate="2020-03-06T15:58:43.787" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20293" PostTypeId="1" AcceptedAnswerId="20308" CreationDate="2020-03-06T16:11:24.050" Score="1" ViewCount="35" Body="&lt;p&gt;In google search, I find Abb industry robot wrist maximum torque is around 6000Nm, So I’m wondering, in most industry robot, how much the maximum torque can reach? In another words, which motor is advance and can provide the best torque in industry robot. Thank you very much!&#xA;Best,&#xA;Ben&lt;/p&gt;&#xA;" OwnerUserId="19138" LastActivityDate="2020-03-10T16:26:03.123" Title="Industry robot maximum torque" Tags="&lt;motor&gt;&lt;research&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20294" PostTypeId="2" ParentId="20290" CreationDate="2020-03-06T18:52:33.683" Score="3" Body="&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;When you apply torque to the first joint, it makes the first link rotate. This means that the far end of the first link translates.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Because the second joint pins the near end of the second link to the far end of the first link, this means that the near end of the second link must also move. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;In order for the second link to move, the pin in the second joint must apply a force to the second link.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The force is applied to the second link at a point that is not its center of mass, which means that there is a net torque from this force around the center of mass of the second link.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The torque/inertia ratio for the second link will in general not be the same as the torque/inertia ratio for the applied torque on the first link plus the reaction torque on that link from the pin.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Different torque/inertia ratios on the two links mean that they experience different rotational accelerations, and therefore rotate relative to one another.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;When the links rotate relative to one another, the joint angle between them by definition changes.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;(There are other explanations with deeper mathematics; this covers the phenomenon at a Newton-Euler force-balance level.)&lt;/p&gt;&#xA;" OwnerUserId="11712" LastActivityDate="2020-03-06T18:52:33.683" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20295" PostTypeId="1" AcceptedAnswerId="20298" CreationDate="2020-03-07T11:04:00.633" Score="3" ViewCount="145" Body="&lt;p&gt;For my master thesis in robotics I have to compute the orientation error between two coordinate frames, called E and H. Their orientation is expressed through rotation matrices (3x3) with respect to a &quot;world frame&quot;, W.&#xA;Remark: writing &lt;span class=&quot;math-container&quot;&gt;$R_A^B$&lt;/span&gt; I'm indicating the orientation of frame A with respect to frame B.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I have understood is that I have to do the following operation:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$R_{error} = R_E^W * R_W^H$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;is it correct? If yes, that error in which frame is expressed?&#xA;Thanks a lot&#xA;Ale &lt;/p&gt;&#xA;" OwnerUserId="24870" LastEditorUserId="15265" LastEditDate="2020-03-07T16:31:45.643" LastActivityDate="2020-03-09T14:47:58.747" Title="How to compute the orientation error between two 3D coordinate frames?" Tags="&lt;rotation&gt;&lt;orientation&gt;" AnswerCount="2" CommentCount="1" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20296" PostTypeId="2" ParentId="20295" CreationDate="2020-03-07T17:13:07.560" Score="3" Body="&lt;p&gt;A rotation matrix represents the rotation between two frames. Therefore, it does not make sense to talk about in which &quot;one&quot; frame the error rotation is expressed. Namely, the rotation matrix &lt;span class=&quot;math-container&quot;&gt;$R^B_A$&lt;/span&gt; represents the rotation from frame &lt;span class=&quot;math-container&quot;&gt;$B$&lt;/span&gt; to frame&lt;span class=&quot;math-container&quot;&gt;$A$&lt;/span&gt;. Therefore, the error rotation matrix you defined as&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;R_{error} = R^W_E R^H_W&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;can also be seen as the rotation from frame &lt;span class=&quot;math-container&quot;&gt;$H$&lt;/span&gt; to frame &lt;span class=&quot;math-container&quot;&gt;$W$&lt;/span&gt; and then from frame &lt;span class=&quot;math-container&quot;&gt;$W$&lt;/span&gt; to frame &lt;span class=&quot;math-container&quot;&gt;$E$&lt;/span&gt;, which is equivalent to &lt;span class=&quot;math-container&quot;&gt;$R^H_E$&lt;/span&gt;.&lt;/p&gt;&#xA;" OwnerUserId="1487" LastEditorUserId="1487" LastEditDate="2020-03-07T23:14:10.507" LastActivityDate="2020-03-07T23:14:10.507" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="20298" PostTypeId="2" ParentId="20295" CreationDate="2020-03-07T21:50:23.590" Score="5" Body="&lt;p&gt;The rotation error between two frames can be viewed in two ways:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;The orientation of one frame as seen from the other, calculated by multiplying the inverse of the observing frame by the observed frame. For frames &lt;span class=&quot;math-container&quot;&gt;$E$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$H$&lt;/span&gt;, this error in your notation would be&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\tag{1}&#xA;{R_{1}}^{E}_{H} = (R^{W}_{E})^{-1}R^{W}_{H} = R^{E}_{W}R^{W}_{H}&#xA;$$&lt;/span&gt;&#xA;for &lt;span class=&quot;math-container&quot;&gt;$H$&lt;/span&gt; as seen from &lt;span class=&quot;math-container&quot;&gt;$E$&lt;/span&gt;, or&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\tag{2}&#xA;{R_{1}}^{H}_{E} = (R^{W}_{H})^{-1}R^{W}_{E} = R^{H}_{W}R^{W}_{E}&#xA;$$&lt;/span&gt;&#xA;for &lt;span class=&quot;math-container&quot;&gt;$E$&lt;/span&gt; as seen from &lt;span class=&quot;math-container&quot;&gt;$H$&lt;/span&gt;. These matrices encode the rotations around local axes (the axes of the superscript frame) that map the superscript frame to the subscript frame,&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\tag{3}&#xA;R^{W}_{E}{R_{1}}^{E}_{H} = R^{W}_{H}&#xA;$$&lt;/span&gt;&#xA;and&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\tag{4}&#xA;R^{W}_{H}{R_{1}}^{H}_{E} = R^{W}_{E}&#xA;$$&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The orientation that would be reached by starting at one frame and moving by the inverse of the second frame's orientation relative to the world,&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\tag{5}&#xA;{R_{2}}^{E}_{H}  = R_{H}^{W} (R_{E}^{W})^{-1} = R_{H}^{W} R_{W}^{E}&#xA;$$&lt;/span&gt;&#xA;or&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\tag{6}&#xA;{R_{2}}^{H}_{E} = R_{E}^{W} (R_{H}^{W})^{-1} = R_{E}^{W} R_{W}^{H}&#xA;$$&lt;/span&gt;&#xA;These matrices encode the rotations around the &lt;em&gt;world&lt;/em&gt; axes that map the frames to each other,&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\tag{7}&#xA;{R_{2}}^{E}_{H} R^{W}_{E} = R^{W}_{H}&#xA;$$&lt;/span&gt;&#xA;and&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\tag{8}&#xA;{R_{2}}^{H}_{E}R^{W}_{H} = R^{W}_{E}&#xA;$$&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;The fundamental source of there being two interpretations of rotational error is that rotations are not commutative, and so our intuition that the differences &lt;span class=&quot;math-container&quot;&gt;$A + (-B)$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$(-B) + A$&lt;/span&gt; should be the same does not hold in this case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The equations have a left-right duality. When we take the difference by putting the inverse rotation on the left (globally rotating the second frame by the inverse of the first), we find the (local) rotation error that maps between the frames when placed to the right of the starting frame, and when we put the inverse rotation on the right (locally rotating the first frame by the inverse of the second), we find the (global) rotation error that maps between the frames when placed to the left of the starting frame.&lt;/p&gt;&#xA;" OwnerUserId="11712" LastEditorUserId="11712" LastEditDate="2020-03-09T14:47:58.747" LastActivityDate="2020-03-09T14:47:58.747" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="20300" PostTypeId="1" CreationDate="2020-03-09T10:05:12.020" Score="3" ViewCount="78" Body="&lt;p&gt;I am working on making a CAD model of a two link robotic manipulator, with link lengths around 15-20 cm. I am unable to figure how to set their mutual ratio and I want to know whether there is some fixed, determined ratio on how to take these values. I thought taking the human arm as an inspiration, but if so,  is it right to take so?&lt;/p&gt;&#xA;" OwnerUserId="24885" LastActivityDate="2020-03-10T16:11:10.873" Title="What should be the ideal ratio for link lengths ( L1/ L2) of a 2 link manipuator robot with revolute joints?" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;design&gt;&lt;industrial-robot&gt;&lt;forward-kinematics&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20302" PostTypeId="1" CreationDate="2020-03-09T16:05:35.270" Score="1" ViewCount="21" Body="&lt;p&gt;What type of camera or camera properties should I look for that would be ideal for performing image processing in a moving environment?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm researching the sensor requirements for processing video in real time on a mobile robot. In a past experiment, I used a simple Raspberry Pi 3 with the standard Picamera on a two-wheeled robot with the goal of navigating using visual cues. Although this was cheap and easy to setup, I found it to be nearly useless at processing video while the robot was moving because the Picamera's rolling shutter was so slow, any amount of movement would blur the image capture, making image processing nearly impossible. To implement any kind of image based navigation, I found I had to stop the robot, capture images, process, calculate the next step, then blindly move a small amount, and then repeat until the destination was reached.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is obviously a very slow and tedious approach and far from ideal. The goal of most mobile robots should be to continuously move while simultaneously processing video.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Researching this problem more, I found that the film industry has largely already solved this problem, albeit for high speed motion capture and not robotics, by using cameras with a global shutter. This type of shutter records each pixel simultaneously instead of scanning columns of pixels, resulting in much less blur. Unfortunately, these cameras tend to be enormously expensive and more difficult to source.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, there are some cheap cameras with rolling shutters that advertise an ability to capture motion without much blur. I believe the GoPro brand of cameras tout this ability without using a global shutter, but I've not confirmed it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When choosing a camera for high speed video processing applications, what should I be looking for that minimizes cost while maximizing the ability to capture clear images? Most USB cameras I see, even ones like GoPros design for motion, don't usually advertise explicit metrics that I can use to gauge performance vs cost. Do I have to use an expensive camera with a global shutter or is there a low cost alternative that should be &quot;good enough&quot; for most robotics experiments?&lt;/p&gt;&#xA;" OwnerUserId="740" LastActivityDate="2020-03-09T16:05:35.270" Title="What type of camera parameters are ideal for image processing on a moving platform?" Tags="&lt;cameras&gt;" AnswerCount="0" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20304" PostTypeId="2" ParentId="20300" CreationDate="2020-03-09T20:18:27.643" Score="2" Body="&lt;p&gt;This is a good question, and one you should definitely consider when designing a new robot arm.  But unfortunately, it depends a lot on the configuration of your arm (i.e. how the joints will be bent), and how you determine &quot;best&quot; (i.e. are you optimizing for speed, strength, dexterity, etc).  And even if you know these things, the metrics you use to determine &quot;best&quot; can differ.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should read up on &quot;manipulabilty&quot;.  This is a feature of the arm's configuration.  Roughly, it is a measure of how well the arm can move in a particular direction.  Usually, this is represented as an ellipse.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/hQbpb.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hQbpb.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The interesting thing about manupulabilty is that there are actually 2, orthogonal ellipoids.  One for velocity and one for force.  Intuitively, if you think about mechanics, where the arm can move fast, it is not very strong.  But where it is strong, it is not very fast.  And if you want a very general purpose arm, trying to achieve a more circular ellipse might be desirable. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You may have different link lengths and arm configurations depending on your use case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are other measures that you might want to consider too.  Such as distance from joint limits, and condition number.  &lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2020-03-09T20:18:27.643" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20305" PostTypeId="2" ParentId="20146" CreationDate="2020-03-10T06:33:24.930" Score="2" Body="&lt;p&gt;Let's suppose you have a required (continuous) trajectory in the form of an equation that you want to follow, for example take a straight line (whose equation is y=2x+5), you can break it down into discrete points and generate a velocity profile out of this trajectory, the calculated velocity profile could be fed to inverse kinematic equations &lt;strong&gt;[1]&lt;/strong&gt; of robot (omni-platform) for calculating the angular velocities of wheel which will be required to follow that above path (straight line in our example).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;[1]:&lt;/strong&gt; &lt;a href=&quot;https://www.researchgate.net/publication/308570348_Inverse_kinematic_implementation_of_four-wheels_mecanum_drive_mobile_robot_using_stepper_motors&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.researchgate.net/publication/308570348_Inverse_kinematic_implementation_of_four-wheels_mecanum_drive_mobile_robot_using_stepper_motors&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="24894" LastActivityDate="2020-03-10T06:33:24.930" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20306" PostTypeId="1" AcceptedAnswerId="20311" CreationDate="2020-03-10T15:23:13.257" Score="1" ViewCount="85" Body="&lt;p&gt;For a school project, I have designed and assembled a bipedal humanoid robot. The robot is roughly &lt;span class=&quot;math-container&quot;&gt;$54$&lt;/span&gt;cm tall, with the width(distance between two legs) at &lt;span class=&quot;math-container&quot;&gt;$20$&lt;/span&gt;cm. The parts that make up the robot are 3D-printed. It has &lt;span class=&quot;math-container&quot;&gt;$12$&lt;/span&gt; degrees of freedom, &lt;span class=&quot;math-container&quot;&gt;$2$&lt;/span&gt; for each foot, &lt;span class=&quot;math-container&quot;&gt;$1$&lt;/span&gt; for the legs, and &lt;span class=&quot;math-container&quot;&gt;$3$&lt;/span&gt; for each side of the hip.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the &lt;a href=&quot;https://github.com/zhenga1/Anodroid&quot; rel=&quot;nofollow noreferrer&quot;&gt;link&lt;/a&gt; to the Github repository.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My goal for this project has been to get the robot to walk. As of currently, my robot is connected to a microcontroller via &lt;strong&gt;PWM&lt;/strong&gt; wires, and I connected it to a computer. The robot is powered using a DC power supply. I use a simple robot control system on my computer, which sends specific &lt;strong&gt;PWM&lt;/strong&gt; signals to each servo within the range &lt;span class=&quot;math-container&quot;&gt;$500-2500$&lt;/span&gt;, covering a full &lt;span class=&quot;math-container&quot;&gt;$180$&lt;/span&gt; turn. For each &lt;strong&gt;PWM&lt;/strong&gt; signal, I can control its duration as well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My problem is the robot is failing to balance on one foot. I know my method of controlling it is extremely primitive, but I can't seem to get it to balance on one foot. I added an extra &lt;span class=&quot;math-container&quot;&gt;$DOF$&lt;/span&gt; on the foot, to allow the foot to shift the centre of gravity. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is an image:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/PJnLd.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/PJnLd.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the image shown, it seems like the centre of gravity indeed has shifted to a location directly above the foot. However, when trying to control it, the robot never manages to successfully balance on one foot. It usually falls towards the &lt;strong&gt;right&lt;/strong&gt; and &lt;strong&gt;backwards&lt;/strong&gt;(from the perspective of the image). The PLA material from the 3D-prints also seems to bend a little, causing the robot to lean towards the left. I have tried many ways to fix it, but it is to no avail.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is my first question on the Robotics Stack Exchange page. Sorry for possible bad/inaccurate terminology. Any help or suggestions will be greatly appreciated. &lt;/p&gt;&#xA;" OwnerUserId="24897" LastActivityDate="2020-03-11T12:27:38.570" Title="How to balance a humanoid robot on one feet?" Tags="&lt;rcservo&gt;&lt;humanoid&gt;&lt;balance&gt;&lt;walking-robot&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="20307" PostTypeId="2" ParentId="20300" CreationDate="2020-03-10T16:11:10.873" Score="0" Body="&lt;p&gt;Your question can't really be answered without understanding what you want the arm to do.  You will also need to account in turn for the masses of the payload and elbow actuator, as well as the maximum torque and angular velocity the actuator could support along with the gear ratio of any transmission.  You could then work out the dynamics of the arm for a given actuator as a function of the link length ratio, maximizing, for example, something like the speed of the arm tip or even the expected lifetime of the arm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's all quite complicated.  A good place to start, though, might be &lt;a href=&quot;https://people.csail.mit.edu/bkph/AIWP/AI_WP_099.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this old MIT AI Lab paper&lt;/a&gt;.  You could build a dynamic and kinematic model in R or some other tool and experiment with different combinations.  (Note that the linked paper doesn't deal with the elbow actuator mass, but it's easy to extend the model).&lt;/p&gt;&#xA;" OwnerUserId="19893" LastActivityDate="2020-03-10T16:11:10.873" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20308" PostTypeId="2" ParentId="20293" CreationDate="2020-03-10T16:26:03.123" Score="1" Body="&lt;p&gt;In order to generate the high levels of torque you are referring to, the actuator will certainly require a transmission of some sort.  Above 500 Nm, cycloidal rather than harmonic drives are employed, usually preceded by a planetary input stage.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Nabtesco, in Japan, is probably the current industry leader in these type of drives, which it brands as &quot;RV&quot; drives.  Looking at Nabtesco's product line, the highest repeatable torque available comes from the RV-500C line - around 12,250 Nm.  The Nabtesco website also has a &lt;a href=&quot;https://precision.nabtesco.com/en/products/select/&quot; rel=&quot;nofollow noreferrer&quot;&gt;product selector&lt;/a&gt; where you can explore different manufacturers' motor options. &lt;/p&gt;&#xA;" OwnerUserId="19893" LastActivityDate="2020-03-10T16:26:03.123" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20309" PostTypeId="1" CreationDate="2020-03-11T08:55:47.580" Score="0" ViewCount="15" Body="&lt;p&gt;I have access to an old CNC router that uses HY200 3424 stepper motors (NEMA 34, &lt;a href=&quot;http://www.ad.siemens.com.cn/club/bbs/upload/file/20170531/6363187097941910273468377.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;pdf&lt;/a&gt;). They are rated 4.7 A, 90 Volt and 150/193 Nm. I would like to run them with a CNC xPro, or similar. I would like to understand how to decide on a possible replacement and what specifications that I need to look for.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Will either of the steppers below work if I can get the shaft to fit?&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.oyostepper.com/goods-97-Dual-Shaft-Nema-34-Stepper-Motor-Unipolar-18-deg-22Nm-312ozin-2A-86x86x66mm-6-Wires.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Dual Shaft Nema 34 Stepper Motor Unipolar 1.8 deg 2.2Nm (312oz.in) 2A 86x86x66mm 6 Wires&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.oyostepper.com/goods-511-Nema-34-Bipolar-18deg-45-Nm-63738ozin-60A-86x86x74mm-4-Wires.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Nema 34 Bipolar 1.8deg 4.5 Nm(637.38oz.in) 6.0A 86x86x74mm 4 Wires&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;If not, what parameters do I need to be looking at to decide which motor I should buy?&lt;/p&gt;&#xA;" OwnerUserId="24907" LastEditorUserId="37" LastEditDate="2020-03-11T13:46:08.013" LastActivityDate="2020-03-11T13:46:08.013" Title="Question on Replacement for NEMA34 Step Motor" Tags="&lt;stepper-motor&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20310" PostTypeId="1" CreationDate="2020-03-11T11:29:33.797" Score="1" ViewCount="104" Body="&lt;p&gt;What does the phrase &quot;ego robot&quot; mean? I see it used in the context of multi robot systems like in the paper &lt;a href=&quot;https://link.springer.com/chapter/10.1007/978-3-030-05816-6_16&quot; rel=&quot;nofollow noreferrer&quot;&gt;Game Theoretic Motion Planning for Multi-robot Racing&lt;/a&gt; by Zijian Wang, Riccardo Spica &amp;amp; Mac Schwager, and also in visual odometry. &lt;/p&gt;&#xA;" OwnerUserId="24909" LastEditorUserId="37" LastEditDate="2020-03-13T13:27:34.270" LastActivityDate="2020-03-13T13:27:34.270" Title="What is the definition of the phrase &quot;ego robot&quot;?" Tags="&lt;mobile-robot&gt;&lt;cameras&gt;&lt;navigation&gt;&lt;visual-odometry&gt;&lt;multi-agent&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20311" PostTypeId="2" ParentId="20306" CreationDate="2020-03-11T12:27:38.570" Score="2" Body="&lt;p&gt;Humanoid robots balance and motion planning are not trivial tasks. I believe you will learn a lot if you read about Zero Moment Point (ZMP). Basically, it is a specific point of contact between the robot's planar foot and the ground. What makes this point special is that the reaction forces at it produce zero torque on the robot body. If there is no reaction torque on the robot body, it will not fall.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How to calculate it?&#xA;We need to know the positions of the center of mass of each body part as well as their orientations and velocities.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please, start from this thesis. It explains the concept very well.&#xA;&lt;a href=&quot;https://www.techunited.nl/media/files/humanoid/MaartenDekker_OPEN2009_Zero_Moment_Point_Method_for_Stable_Biped_Walking.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.techunited.nl/media/files/humanoid/MaartenDekker_OPEN2009_Zero_Moment_Point_Method_for_Stable_Biped_Walking.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10249" LastActivityDate="2020-03-11T12:27:38.570" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20312" PostTypeId="2" ParentId="20214" CreationDate="2020-03-11T18:25:59.117" Score="0" Body="&lt;p&gt;I think it depends on how much useful life you want to obtain from the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is possible that a perfectly acceptable kinematic solution within your target workspace without regard to dynamics could result in moments, velocities or accelerations that could cause one or more actuators to operate well beyond their rated torques.  By not imposing any dynamic constraints on your workspace you are basically risking unnecessary damage to your manipulator's hardware.&lt;/p&gt;&#xA;" OwnerUserId="19893" LastActivityDate="2020-03-11T18:25:59.117" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20313" PostTypeId="1" AcceptedAnswerId="20338" CreationDate="2020-03-12T11:29:59.993" Score="0" ViewCount="70" Body="&lt;p&gt;I'm currently studying IMU Sensor with 6dof(gyro and accelerometer).&#xA;My goal is to get Orientation of robot, and i found out that only 6dof imu sensor wouldn't be&#xA;possible to get a correct Orientation due to noise and gyroscope yaw drift(also roll and pitch).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But, I just want it to try with errors. (Working on the ROS.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;so I managed to get data from my IMU sensor data which gyroscope's R,P,Y and Acceleromter's R,P.&#xA;The Problem was that i don't know how to get a quaternion for some other library(package),&#xA;so i just used gyro's yaw value and accelerometer's roll and pitch value to find &#xA;quaternion. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Other fusion algorithms such as EKF,Complementary Filter ask linear_acc, angular_v, and Quaternion. But I don't feel like my ways to get quaternion is the right ways to do it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, Am i doing something wrong?&#xA;How can i mix(or use) gyroscope's roll, pitch, yaw data and acclerometer's roll,pitch,yaw(?) data to get a quaternion that fusion algorithms ask? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;some information :&#xA;I'm using &lt;a href=&quot;https://www.microstrain.com/inertial/3dm-cx5-15&quot; rel=&quot;nofollow noreferrer&quot;&gt;Microstrain 3dm-cx5-15&lt;/a&gt;, using ros, managed to publish sensor_msgs/Imu&#xA;(with not quite correct quaternion)&#xA;thx for the replies, any insight will help me &#xA;sorry for my bad english. &lt;/p&gt;&#xA;" OwnerUserId="24916" LastActivityDate="2020-03-19T11:08:55.387" Title="How can i fusion gyroscope and accelerometer when accelerometer has only roll,pitch val?" Tags="&lt;localization&gt;&lt;kalman-filter&gt;&lt;imu&gt;&lt;gyroscope&gt;&lt;accelerometer&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20314" PostTypeId="1" CreationDate="2020-03-12T14:02:23.970" Score="1" ViewCount="58" Body="&lt;p&gt;I am trying to tune the gains of my PD controller for a single axis flexible joint robot. The controller output is the motor torque. My question is: how can i tune the PD gains if the output (torque) is limited (i.e. the controller output is followed with saturation in Simulink).&lt;/p&gt;&#xA;" OwnerUserId="23750" LastActivityDate="2020-03-12T14:02:23.970" Title="PD controller tuning for flexible joint robotic arm" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;pid&gt;" AnswerCount="0" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="20315" PostTypeId="1" CreationDate="2020-03-12T14:14:01.417" Score="0" ViewCount="204" Body="&lt;p&gt;I am using an encoder to calculate the position and orientation of a mobile robot. The robot has two-wheel and each wheel is attached with an encoder, the result I am getting for my position x,y and theta is confusing. please I need help&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;// Pin definitions.&#xA;// - enc_a is ENC Signal A line (Arduino digital pin 2)&#xA;// - enc_b is ENC Signal B line (Arduino digital pin 3)&#xA;#define ENC_A1  2&#xA;#define ENC_B1  3&#xA;&#xA;#define ENC_A2  18&#xA;#define ENC_B2  19&#xA;&#xA;// Main loop refresh period.&#xA;#define REFRESH_MS  50&#xA;&#xA;// Main serial data connection to computer.&#xA;#define BAUD_RATE   115200&#xA;&#xA;// Encoder signal line states&#xA;volatile boolean state_a1 = 0;&#xA;volatile boolean state_b1 = 0;&#xA;&#xA;// Encoder signal line states&#xA;volatile boolean state_a2 = 0;&#xA;volatile boolean state_b2 = 0;&#xA;&#xA;// Encoder position&#xA;volatile int enc_pos_1 = 0;&#xA;int enc_pos_prev_1 = 0;&#xA;int enc_pos_change_1 = 0;&#xA;&#xA;volatile int enc_pos_2 = 0;&#xA;int enc_pos_prev_2 = 0;&#xA;int enc_pos_change_2 = 0;&#xA;&#xA;// normally on a differential drive system to when moving&#xA;// forwards the wheels are rotating in opposite directions&#xA;int encoder_direction_left = 1;&#xA;int encoder_direction_right = 1;&#xA;&#xA;// Timing&#xA;unsigned long micros_current = 0;&#xA;unsigned long micros_prev = 0;&#xA;long micros_change = 0;&#xA;&#xA;int dleft = 0;&#xA;int dright = 0;&#xA;&#xA;float pi = 3.14;&#xA;&#xA;float diameter = 42;                                    //(mm)&#xA;&#xA;int count_per_revolution = 12;                          //(mm)&#xA;&#xA;int Lwheel_c = 140;                                      //(mm)&#xA;int Rwheel_c = 139.9;                                       //(mm)&#xA;&#xA;float Rright = 0.00;                                       // radius of curvature of right wheel&#xA;&#xA;float Rleft = 0.00;                                      //Radius of curvature of left wheel&#xA;&#xA;float Rc = 0.00 ;                                     //Radius of curvature&#xA;&#xA;double theta = 0.00;&#xA;&#xA;float phi = 0.00;&#xA;&#xA;float RADS =  57.2958 ;&#xA;&#xA;float dtheta = 0.00;&#xA;&#xA;float beta = 0.00;                                     // orientatiom&#xA;&#xA;double  x= 0.00;&#xA;&#xA;int y = 0.00;&#xA;&#xA;float dx = 0.00;&#xA;&#xA;float dy = 0.00;&#xA;&#xA;//float d_ori = 0.00;&#xA;&#xA;int wheelbase = 91;                                   // wheelbase&#xA;&#xA;void setup() {&#xA;    pinMode(ENC_A1, INPUT);&#xA;    pinMode(ENC_B1, INPUT); &#xA;&#xA;    pinMode(ENC_A2, INPUT);&#xA;    pinMode(ENC_B2, INPUT); &#xA;&#xA;    state_a1 = (boolean) digitalRead(ENC_A1);&#xA;    state_b1 = (boolean) digitalRead(ENC_B1);&#xA;&#xA;    state_a2 = (boolean) digitalRead(ENC_A2);&#xA;    state_b2 = (boolean) digitalRead(ENC_B2);&#xA;&#xA;    attachInterrupt(0, interrupt_enc_a1, CHANGE);&#xA;    attachInterrupt(1, interrupt_enc_b1, CHANGE);&#xA;&#xA;    attachInterrupt(5, interrupt_enc_a2, CHANGE);&#xA;    attachInterrupt(4, interrupt_enc_b2, CHANGE); &#xA;&#xA;    micros_prev = micros();&#xA;&#xA;    Serial.begin(BAUD_RATE);&#xA;}&#xA;&#xA;void loop() {&#xA;    // Calculate elapsed time  &#xA;    micros_current = micros();&#xA;    if (micros_current &amp;lt; micros_prev) {&#xA;        micros_change = micros_current + (4294967295 - micros_prev);&#xA;    } else {&#xA;        micros_change = micros_current - micros_prev;&#xA;    }&#xA;&#xA;    // Calculate change in encoder1 position.&#xA;    enc_pos_change_1 = enc_pos_1 - enc_pos_prev_1;&#xA;    // enc_pos_change_1 = abs(enc_pos_change_1);&#xA;&#xA;    // Calculate change in encoder1 position.&#xA;    enc_pos_change_2 = enc_pos_2 - enc_pos_prev_2;&#xA;    // enc_pos_change_2 = abs(enc_pos_change_2);&#xA;&#xA;    // Emit data&#xA;    Serial.print(enc_pos_1);&#xA;    Serial.print(&quot;\t&quot;);&#xA;    Serial.print(enc_pos_2);&#xA;    Serial.print(&quot;\t&quot;);&#xA;    Serial.print(dright);&#xA;    Serial.print(&quot;\t&quot;);&#xA;    Serial.print(dleft);&#xA;    Serial.print(&quot;\t&quot;);&#xA;    Serial.print(x);&#xA;    Serial.print(&quot;\t&quot;);&#xA;    Serial.print(y);&#xA;    Serial.print(&quot;\t&quot;);&#xA;    Serial.print(theta);&#xA;    Serial.print(&quot;\t&quot;);&#xA;    //Serial.print(enc_pos_change_2);&#xA;    Serial.print(&quot;\t&quot;);&#xA;    //Serial.print(micros_current);&#xA;    Serial.print(&quot;\t&quot;);&#xA;    //Serial.print(micros_change);&#xA;    Serial.print(&quot;\t&quot;);&#xA;    //Serial.print(enc_pos_change_1 / (micros_change / 1e6));&#xA;    Serial.print(&quot;\t&quot;);&#xA;    //Serial.print(enc_pos_change_2 / (micros_change / 1e6));&#xA;    Serial.print(&quot;\n&quot;);&#xA;&#xA;    enc_pos_prev_1 = enc_pos_1;&#xA;&#xA;    enc_pos_prev_2 = enc_pos_2;&#xA;&#xA;    micros_prev = micros_current;&#xA;&#xA;    //dleft = (enc_pos_1 * Lwheel_c)/count_per_revolution;&#xA;&#xA;    //dright = (enc_pos_2 * Lwheel_c)/count_per_revolution;&#xA;&#xA;    dleft = (enc_pos_change_1 * encoder_direction_left) * Lwheel_c/count_per_revolution;&#xA;&#xA;    dright = (enc_pos_change_2 * encoder_direction_right)* Rwheel_c/count_per_revolution;&#xA;&#xA;    // add the change in angle to the previous angle&#xA;&#xA;&#xA;    // constrain _theta to the range 0 to 2 pi&#xA;&#xA;    if (theta &amp;gt; 2.0 * pi) &#xA;    theta -= 2.0 * pi;&#xA;    else if (theta &amp;lt; -2.0*pi)&#xA;    theta += 2.0 * pi;&#xA;&#xA;    Rc = (dleft + dright)/2;&#xA;&#xA;    theta = (dleft - dright)/wheelbase;&#xA;&#xA;    x = x + Rc * cos(theta);&#xA;&#xA;    y = y + Rc * sin(theta);&#xA;&#xA;    delay(REFRESH_MS);&#xA;}&#xA;&#xA;// Detect pulses from depth encoder.&#xA;&#xA;void interrupt_enc_a1() {&#xA;    if (!state_a1) {&#xA;        state_b1 ? enc_pos_1++: enc_pos_1--;         &#xA;    }&#xA;    state_a1 = !state_a1;&#xA;}&#xA;&#xA;void interrupt_enc_b1() {&#xA;    state_b1 = !state_b1;&#xA;}&#xA;&#xA;// Detect pulses from depth encoder.&#xA;&#xA;void interrupt_enc_a2() {&#xA;    if (!state_a2) {&#xA;        state_b2 ? enc_pos_2++: enc_pos_2--;         &#xA;    }&#xA;    state_a2 = !state_a2;&#xA;}&#xA;&#xA;void interrupt_enc_b2() {&#xA;    state_b2 = !state_b2;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="24918" LastEditorUserId="37" LastEditDate="2020-03-12T17:05:52.013" LastActivityDate="2020-03-12T17:05:52.013" Title="two wheel mobile robot odometry" Tags="&lt;mobile-robot&gt;&lt;arduino&gt;&lt;odometry&gt;&lt;pose&gt;&lt;quadrature-encoder&gt;" AnswerCount="0" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="20317" PostTypeId="1" CreationDate="2020-03-13T04:47:06.340" Score="0" ViewCount="50" Body="&lt;p&gt;I an trying to implement an electromagnetic suspension system on model/small scale (like the bose suspension system in this video: &lt;a href=&quot;https://youtu.be/3KPYIaks1UY&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://youtu.be/3KPYIaks1UY&lt;/a&gt;). Upon doing some research on this topic, I found out that linear electromagnetic motors are used for this system. But I am unable to find any actuators for small scale usage. Does anyone know which components I can use for this project? Or can I just use normal electromagnets and control them with a microcontroller (Is this possible ?) If not, what alternatives do you suggest for this project ? Before implementing a full 4 wheel car model, I just want to make a single wheel model first before moving ahead. Please help !&lt;/p&gt;&#xA;" OwnerUserId="24906" LastActivityDate="2020-03-13T04:47:06.340" Title="Need help regarding electromagnetic suspension implementation" Tags="&lt;arduino&gt;&lt;motor&gt;&lt;electronics&gt;&lt;actuator&gt;&lt;automation&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20318" PostTypeId="1" CreationDate="2020-03-14T17:13:04.217" Score="1" ViewCount="48" Body="&lt;p&gt;See image for reference:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/3R20Q.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3R20Q.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Essentially I have a robotic arm with two linear actuators. Lets say, for example, I wanted the endpoint on the arm (where you see the stepper motors) to move purely in the x direction (extending outwards). Both linear actuators would have to move in tandem with each other at the correct velocities to ensure that they cancel out each others y movements and sum up their x movements. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have equations that relate the required angular velocity of each segment (and therefore velocities of each linear actuator) to get from point A to point B. I am just confused how to implement this now.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My electronics consist of an arduino and H-bridge. Feedback are potentiometers at the joints. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm just looking for general guidance on the procedure, as I am just not sure what steps I need to take here. I have taken a number of classes in control systems, but don't quite understand how to relate all the theory to practice. &lt;/p&gt;&#xA;" OwnerUserId="9034" LastActivityDate="2020-06-29T00:41:26.173" Title="How to design a controller for a robotic arm given two velocity profiles" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;arduino&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20319" PostTypeId="1" CreationDate="2020-03-15T07:41:53.700" Score="0" ViewCount="11" Body="&lt;p&gt;I am using an IR sensor which detects the obstacle. My question is how does 2 robots stops on a finish line which is an object higher that the height of the car robot if i am using IR, comparator(LM741),Relay, bjt, diode And Hbridge (L293d) ? &#xA;How to detect the egde? If detected what it does ?&#xA;How to detect obstacle ? And how to detect the finish line which is  the an object higher in height?&lt;/p&gt;&#xA;" OwnerUserId="24929" LastActivityDate="2020-03-15T07:41:53.700" Title="Avoiding obstacle of a car robot using IR" Tags="&lt;wheeled-robot&gt;&lt;electronics&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20320" PostTypeId="1" CreationDate="2020-03-15T15:12:46.393" Score="2" ViewCount="171" Body="&lt;p&gt;I'm working on a robot with differential drive (2 drive wheels equipped with rotary encoders and 4 free spinning omni wheels for stability) and each wheel is controlled via a separate arduino nano.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have implemented two PID loops, one for position control and one for speed control (first one gets a position in number of pulses and second gets an RPM as their goals).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The position PID works fine by produces jerky motion and acts more like a &quot;bang bang&quot; control where it starts at full speed. I'm not sure how I can combine these to plan a move that reaches a certain number of pulses with a given maximum acceleration and / or velocity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know 3D printers for example, have settings for jerk,acceleration and velocity so I tried to go through marlin to see how that's implemented but I had no luck! Can anyone please provide examples or links to tutorials / papers regarding this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think an easy solution would be pre calculating the motion profile and then tracking it with the position PID, but I'm not sure if there are better solutions for this.&lt;/p&gt;&#xA;" OwnerUserId="24932" LastEditorUserId="24932" LastEditDate="2020-03-15T15:33:01.810" LastActivityDate="2021-02-01T13:02:40.223" Title="Motor acceleration and position with PID control" Tags="&lt;arduino&gt;&lt;pid&gt;&lt;differential-drive&gt;&lt;quadrature-encoder&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20321" PostTypeId="1" AcceptedAnswerId="20342" CreationDate="2020-03-16T04:19:39.803" Score="1" ViewCount="115" Body="&lt;p&gt;Currently working on a quadcopter simulation. I have a desired thrust vector, &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;t =sin(30)cos(45)a1+sin(30)sin(45)a2+cos(30)a3&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and desired yaw angle, &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;psi = 45. &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Because we are working with an under-actuated system, I am trying to solve for the rotation matrix that aligns the vector:b3 = [0,0,1] (direction of thrust in the body-fixed frame of reference) with the direction of t. Here is my code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;t = [sind(30) * cosd(45), sind(30) * sind(45), cosd(30)];&#xA;&#xA;b3 = [0;0;1];&#xA;&#xA;psi = 45;&#xA;&#xA;syms phi theta; &#xA;&#xA;eqn = [[cosd(psi)*cosd(theta)-sind(phi)*sind(psi)*sind(theta), - &#xA;cosd(phi)*sind(psi), cosd(psi)*sind(theta)+cosd(theta)*sind(phi)*sind(phi);&#xA;cosd(theta)*sind(psi)+cosd(psi)*sind(phi)*sind(theta), cosd(phi)*cosd(psi), &#xA;sind(psi)*sind(theta)-cosd(theta)*sind(phi)*cosd(psi);&#xA; -cosd(phi)*sind(theta), sind(phi), cosd(phi)*cosd(theta)] &#xA;* b3 == t/norm(t)];&#xA;&#xA;S = solve(eqn,[phi theta]);&#xA;disp(S.phi)&#xA;disp(S.theta)`&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The problem is that it outputs an empty symbolic struct, with no warnings or errors otherwise:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/apxKi.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/apxKi.png&quot; alt=&quot;Output&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I am doing wrong? It is an issue with my theory, my implementation, or both?&lt;/p&gt;&#xA;" OwnerUserId="24451" LastEditorUserId="24451" LastEditDate="2020-03-20T02:27:37.113" LastActivityDate="2020-03-20T02:27:37.113" Title="Solving for rotation matrix: Aligning vector a with vector b and then rotating around vector b" Tags="&lt;quadcopter&gt;&lt;matlab&gt;&lt;rotation&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20326" PostTypeId="1" CreationDate="2020-03-16T16:56:42.083" Score="0" ViewCount="51" Body="&lt;p&gt;Given the following rotation matrix:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$  &#xA;     R(φ, θ, ψ) =   \left( \begin{smallmatrix}&#xA;        cos(θ)*cos(ψ) &amp;amp;  -sin(φ)*sin(θ)*cos(ψ)-cos(φ)*sin(ψ) &amp;amp;  -cos(φ)*sin(θ)*cos(ψ)+sin(φ)*sin(ψ) \\&#xA;        cos(θ)*sin(ψ) &amp;amp;  -sin(φ)*sin(θ)*sin(ψ)+cos(φ)*cos(ψ) &amp;amp;  -cos(φ)*sin(θ)*sin(ψ)-sin(φ)*cos(ψ) \\&#xA;               sin(θ) &amp;amp;                        sin(φ)*cos(θ) &amp;amp;                        cos(φ)*cos(θ)&#xA;    \end{smallmatrix}  \right)&#xA;$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The multiplication &lt;span class=&quot;math-container&quot;&gt;$ R(0, 0, ψ)^T * \begin{pmatrix}ẋ&amp;amp; ẏ&amp;amp; ż\end{pmatrix}^T $&lt;/span&gt; returns new linear velocities:&#xA;&lt;span class=&quot;math-container&quot;&gt;\begin{pmatrix}ẋ_n&amp;amp; ẏ_n&amp;amp; ż\end{pmatrix}&lt;/span&gt;&#xA;Which account for the effect of yaw on &lt;span class=&quot;math-container&quot;&gt;$ ẋ $&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$ ẏ $&lt;/span&gt;, because only the components of &lt;span class=&quot;math-container&quot;&gt;$ ψ $&lt;/span&gt; remain in &lt;span class=&quot;math-container&quot;&gt;$ R $&lt;/span&gt; and since &lt;span class=&quot;math-container&quot;&gt;$ ψ $&lt;/span&gt; is around &lt;span class=&quot;math-container&quot;&gt;$ Z $&lt;/span&gt;, its components are in &lt;span class=&quot;math-container&quot;&gt;$ X $&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$ Y $&lt;/span&gt;.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now my question is, what does the following multiplication return: &lt;span class=&quot;math-container&quot;&gt;$ R(0, 0, ψ)^T * R(-φ, θ, -ψ)^T $&lt;/span&gt; ? and what does it account for?  &lt;/p&gt;&#xA;" OwnerUserId="24936" LastActivityDate="2020-03-16T16:56:42.083" Title="What's the result of multiplying a rotation matrix having only ψ components by another which has (−φ,θ,−ψ) components?" Tags="&lt;rotation&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20327" PostTypeId="1" AcceptedAnswerId="20328" CreationDate="2020-03-16T17:06:55.333" Score="0" ViewCount="258" Body="&lt;p&gt;Im working on quadcopter. At this stage im coding a reference system for quadcopter using 10DOF board.At this stage im at the point of only getting raw data values from accelerometer, gyroscope, &amp;amp; magnetometer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After searching around on web, I have rought idea of what I need to do, I need to implement a filter system that can help me determine accurate and stable position estimates from sensor data. Im planning on implementing kalman or Magwick based filter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;My Question:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) Before I go into filter design itself, I want to know do I just use the raw data from sensor ' as it is ' and feed it into filter system ? Or Do i need to some sort of preprocessing on data for filter to use ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) My second question is, after just glancing over some code on web, I saw alot of people adding some constants to their raw sensor data (i.e offsets? ) to smooth or correct raw sensor data. What kind of smoothing/correcting do i need to account for ? How does it relate to imu sensors ?&lt;/p&gt;&#xA;" OwnerUserId="20190" LastActivityDate="2020-03-16T20:49:38.707" Title="what kind of processing is required on raw IMU data before it is fed into a filter?" Tags="&lt;quadcopter&gt;&lt;sensors&gt;&lt;kalman-filter&gt;&lt;sensor-fusion&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20328" PostTypeId="2" ParentId="20327" CreationDate="2020-03-16T18:22:08.523" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;1) Before I go into filter design itself, I want to know do I just use the raw data from sensor ' as it is ' and feed it into filter system ? Or Do i need to some sort of preprocessing on data for filter to use ?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Both happens. In my applications(Visual-Inertial SLAM) we tend to just use the raw measurements. Note that the fusion algorithm(Kalman filters or Complementary filters) essentialy work as some sort of preprocessing step.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;2) My second question is, after just glancing over some code on web, I saw alot of people adding some constants to their raw sensor data (i.e offsets? ) to smooth or correct raw sensor data. What kind of smoothing/correcting do i need to account for ? How does it relate to imu sensors ?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The offset you are seeing is called the bias. This is required for good state estimation. Essentially it contains all the extra parameters that effect your readings, but that you are too lazy to model. You estimate these along with the rest of your states.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore your state vector would typically be something like:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ [p,v,q,a_b,g_b,m_b]$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$p$&lt;/span&gt; position&lt;/li&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$v$&lt;/span&gt; velocity&lt;/li&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$q$&lt;/span&gt; quaternion/attitude&lt;/li&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$a_b$&lt;/span&gt; accelerometer bias&lt;/li&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$g_b$&lt;/span&gt; gyro bias&lt;/li&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$m_b$&lt;/span&gt; magnetometer bias&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;To then get your actual measurement you subtract the bias.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ a_{real}=a_{raw}-a_{bias}$$&lt;/span&gt;&lt;/p&gt;&#xA;" OwnerUserId="15265" LastEditorUserId="15265" LastEditDate="2020-03-16T20:49:38.707" LastActivityDate="2020-03-16T20:49:38.707" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20329" PostTypeId="1" CreationDate="2020-03-18T09:49:02.883" Score="0" ViewCount="29" Body="&lt;p&gt;I have 2 arrays (s_left and s_right) a length (dis), the arrays in reality are produced from sensor values. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first situation entails looping the condition (s_left &amp;lt; dis) twice and at the same time looping (s_right &amp;lt; dis) once.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there a method to specify the number of times a individual condition can be looped through whilst preforming various conditions? The coding is in Java and &lt;strong&gt;I am not convinced the method attempted below is correct&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;public class test {&#xA;    public void test() {&#xA;        double s_right[] = new double[]{10, 13, 14, 15};&#xA;        double s_left[] = new double[]{12.6, 14, 18, 18};&#xA;&#xA;        double dis = 12.5;&#xA;&#xA;        for (int i = 0; i &amp;lt; s_left.length; i++) {&#xA;            if (s_left[i] &amp;lt; dis) {&#xA;                for (int j = 0; j &amp;lt; s_left.length; j++) {&#xA;                    if ((s_left[j] &amp;lt; dis) &amp;amp;&amp;amp; (s_right[i] &amp;lt; dis)) {&#xA;                        System.out.println(&quot;working!!!&quot;);&#xA;                    }&#xA;&#xA;                }&#xA;            }&#xA;        }&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="24952" LastEditorUserId="24952" LastEditDate="2020-03-18T10:18:28.263" LastActivityDate="2020-03-18T10:18:28.263" Title="How to loop various conditions multiple times" Tags="&lt;sensors&gt;&lt;programming-languages&gt;" AnswerCount="0" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="20330" PostTypeId="1" CreationDate="2020-03-18T10:31:06.597" Score="1" ViewCount="69" Body="&lt;p&gt;If anyone has worked with KITTI dataset, can you explain the reference frame used in roll pitch yaw values?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I downloaded the raw data from this link:&#xA;&lt;a href=&quot;http://www.cvlibs.net/datasets/kitti/raw_data.php&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.cvlibs.net/datasets/kitti/raw_data.php&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The KITTI data states the following:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;roll:  roll angle (rad),    0 = level, positive = left side up,      range: -pi   .. +pi&lt;/p&gt;&#xA;&#xA;&lt;p&gt;pitch: pitch angle (rad),   0 = level, positive = front down,        range: -pi/2 .. +pi/2&lt;/p&gt;&#xA;&#xA;&lt;p&gt;yaw:   heading (rad),       0 = east,  positive = counter clockwise, range: -pi   .. +pi&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;By counter clockwise do they mean car turning left is positive yaw?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also what is the convention for positive and negative for the angular rates? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;wx:    angular rate around x (rad/s)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;wy:    angular rate around y (rad/s)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;wz:    angular rate around z (rad/s)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would assume that x y and z are forward leftward and upward as mentioned in the text.&lt;/p&gt;&#xA;" OwnerUserId="24908" LastActivityDate="2020-03-18T10:31:06.597" Title="Can someone help me understanding reference frames in OxTS data in KITTI Vision Benchmark dataset?" Tags="&lt;kinematics&gt;&lt;kalman-filter&gt;&lt;imu&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20331" PostTypeId="2" ParentId="19240" CreationDate="2020-03-18T12:02:27.867" Score="1" Body="&lt;p&gt;The Danish line follower robot competition &quot;&lt;a href=&quot;https://robocup.dtu.dk/&quot; rel=&quot;nofollow noreferrer&quot;&gt;DTU RoboCup&lt;/a&gt;&quot; recommends using visible light sensors in their competition, since IR sensors have a hard time distinguishing the floor from the line. I've participated in this comepetition, and seen quite some IR-using robots getting confused and wandering off.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My experience is that using visible light has one major downside that has to be dealt with. You mention it yourself: Sun light/daylight/ambient light. And since you're already dealing with that, I think you're covering the single most significant downside already.&lt;/p&gt;&#xA;" OwnerUserId="284" LastActivityDate="2020-03-18T12:02:27.867" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20332" PostTypeId="1" CreationDate="2020-03-18T14:53:50.697" Score="0" ViewCount="17" Body="&lt;p&gt;Hey I'm building an underwater robot(ROV) for a school project and I recently bought plastic propellers 55mm but sadly they came without prop adapters. Is there any easy alternative such as using epoxy glue to fit the prop on the shaft? The shaft is 3.5mm and slightly smaller than the diameter of propeller. Please help me out. &lt;/p&gt;&#xA;" OwnerUserId="24954" LastEditorUserId="24954" LastEditDate="2020-03-20T13:25:08.470" LastActivityDate="2020-03-20T13:25:08.470" Title="Fitting propeller to shaft" Tags="&lt;underwater&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20333" PostTypeId="1" AcceptedAnswerId="20343" CreationDate="2020-03-18T15:53:54.850" Score="0" ViewCount="34" Body="&lt;h1&gt;Problem&lt;/h1&gt;&#xA;&#xA;&lt;p&gt;Quaternions &lt;span class=&quot;math-container&quot;&gt;$X$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$Y$&lt;/span&gt;, which represents 3-dimensional points are given.&#xA;Quaternion &lt;span class=&quot;math-container&quot;&gt;$q$&lt;/span&gt; is what is to be solved.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to know unknown rotation between &lt;span class=&quot;math-container&quot;&gt;$X$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$Y$&lt;/span&gt;.&#xA;In other words, I want to find &lt;span class=&quot;math-container&quot;&gt;$q$&lt;/span&gt; in the following equation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;Y = q * X * \overline{q}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\overline{q}$&lt;/span&gt; means conjugate quaternion of &lt;span class=&quot;math-container&quot;&gt;$q$&lt;/span&gt;.&#xA;Real parts of &lt;span class=&quot;math-container&quot;&gt;$X$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$Y$&lt;/span&gt; are always zero.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I find &lt;span class=&quot;math-container&quot;&gt;$q$&lt;/span&gt; mathematically?&lt;/p&gt;&#xA;" OwnerUserId="15206" LastActivityDate="2020-03-21T17:08:23.930" Title="Finding quaternion Q, where Y = q * X * q.inv()" Tags="&lt;kinematics&gt;&lt;rotation&gt;&lt;orientation&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20338" PostTypeId="2" ParentId="20313" CreationDate="2020-03-19T11:08:55.387" Score="1" Body="&lt;p&gt;First you have to understand that Gyroscope gives angular rates around X,Y,Z axes and Accelerometer gives linear accelerations in X,Y,Z directions. Neither of them gives Roll, Pitch and Yaw values. But you can calculate Roll and Pitch values using the Accelerometer readings.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For your question, in order to calculate the quaternion you need to have a 9 DoF IMU to feed data to both prediction and update step in the Kalman filter. I suggest you to follow the &lt;a href=&quot;https://engineeringunibooks.blogspot.com/2020/03/robotics-ebooks.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Probabilistic Robotics Book&lt;/a&gt; to get a better idea on this. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using a 6 DoF IMU, you can calculate Roll and Pitch using a Kalman Filter. But the gyro provides data only for the prediction step when calculating the yaw. An external magnetometer or a 9 DoF IMU can provide the absolute yaw for the update step. &lt;/p&gt;&#xA;" OwnerUserId="21353" LastActivityDate="2020-03-19T11:08:55.387" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20339" PostTypeId="1" AcceptedAnswerId="20340" CreationDate="2020-03-19T16:24:20.007" Score="2" ViewCount="80" Body="&lt;p&gt;I came across this doubt while reading the &lt;a href=&quot;https://en.wikipedia.org/wiki/PID_controller&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia page&lt;/a&gt; on PID Control. The section on &lt;a href=&quot;https://en.wikipedia.org/wiki/PID_controller#Steady-state_error&quot; rel=&quot;nofollow noreferrer&quot;&gt;Steady-state error&lt;/a&gt; states: &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Steady-state error (SSE) is proportional to the process gain and&#xA;  inversely proportional to proportional gain.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;First of all I'm not able to understand what &quot;process gain&quot; actually means and how it differs from proportional gain. Secondly, I can't understand the relation between SSE and the two gains. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;PS. I haven't taken a formal course on Control Systems and I'm just a hobbyist trying to make a PID controlled line follower at home. So, it might be the case that I've totally missed something important.&lt;/p&gt;&#xA;" OwnerUserId="24554" LastActivityDate="2020-03-19T18:03:24.353" Title="How do &quot;process gain&quot; and &quot;proportional gain&quot; affect the Steady State Error in a PID Controlled machine?" Tags="&lt;control&gt;&lt;pid&gt;&lt;plc&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20340" PostTypeId="2" ParentId="20339" CreationDate="2020-03-19T17:54:41.813" Score="2" Body="&lt;p&gt;To understand this, take a look at this image, also from the Wikipedia article:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/thumb/4/43/PID_en.svg/800px-PID_en.svg.png&quot; alt=&quot;Feedback control loop diagram&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The “process gain” is not part of your PID controller. Rather, it is a representation of what is actually happening in your process. Consider a heater control. The signal you are measuring is temperature, but the output of your controller would be something to turn your heater on and off (perhaps a pulse width modulation duty cycle). The “process gain” is simply a mathematical representation of how the actual temperature responds to what your heater is doing. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The article is saying that steady state error gets bigger if the process gain gets bigger, but gets smaller as you turn up the proportional gain in your PID controller. &lt;/p&gt;&#xA;" OwnerUserId="1748" LastEditorUserId="1748" LastEditDate="2020-03-19T18:03:24.353" LastActivityDate="2020-03-19T18:03:24.353" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="20341" PostTypeId="1" CreationDate="2020-03-20T00:14:05.677" Score="0" ViewCount="40" Body="&lt;p&gt;I'm working on an assignment where I need to derive Velocity Kinematics for 5 DOF Youbot kuka robotic arm manipulator. I want to Calculate the Joint Velocities and Angular Accelerations of 5 DOF Youbot kuka robotic arm. I'm working on Matlab code:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;clear all&#xA;close all&#xA;clc&#xA;syms q1 q2 q3 q4 q5 fx fy fz real&lt;/p&gt;&#xA;&#xA;&lt;p&gt;% length and offset of each link [x,y,z] (m)&#xA;l = [[0.046, 0, 0.147]; &#xA;[0.155, 0, 0]; &#xA;[0.135, 0, 0]; &#xA;[0, 0, 0]; &#xA;[0, 0, 0.218]];&lt;/p&gt;&#xA;&#xA;&lt;p&gt;% mass of each link (kg)&#xA;m = [0.961, 1.39, 1.318, 0.821, 0.769, 0.687, 0.199];&lt;/p&gt;&#xA;&#xA;&lt;p&gt;% Compute symbolic homogenous transform matrices based on KUKA YouBot&#xA;q = [q1, q2, q3, q4, q5];&#xA;[H, Hs] = CompH(q, l);&#xA;o = H(1:3,4);&#xA;% Compute symbolic Jacobian (velocity Jacobian only)&#xA;J = jacobian(o,q);&lt;/p&gt;&#xA;&#xA;&lt;p&gt;% Test jacobian by applying an angular velocity and computing linear&#xA;% velocity of end effector&#xA;cur_q = [0, 0, 0, pi/2, 0];&#xA;q_dot = [0, 0, 0, 0, 0]';&lt;/p&gt;&#xA;&#xA;&lt;p&gt;% Compute point of center of gravity for each link&#xA;cHs = CompCOGH(q, l);&#xA;o_cg_01 = cHs{1}(1:3,4);&#xA;o_cg_02 = cHs{2}(1:3,4);&#xA;o_cg_03 = cHs{3}(1:3,4);&#xA;o_cg_04 = cHs{4}(1:3,4);&#xA;o_cg_05 = cHs{5}(1:3,4);&lt;/p&gt;&#xA;&#xA;&lt;p&gt;% Gravity vector&#xA;gc = [0, 0, 9.82]';&lt;/p&gt;&#xA;&#xA;&lt;p&gt;% Compute Jacobians for each center of gravity&#xA;J1 = jacobian(o_cg_01, q);&#xA;J2 = jacobian(o_cg_02, q);&#xA;J3 = jacobian(o_cg_03, q);&#xA;J4 = jacobian(o_cg_04, q);&#xA;J5 = jacobian(o_cg_05, q);&lt;/p&gt;&#xA;&#xA;&lt;p&gt;% Compute torque needed based on each link's center of graivity and mass&#xA;t_cg = J1' * m(2) * gc;&#xA;t_cg = t_cg + J2' * m(3) * gc;&#xA;t_cg = t_cg + J3' * m(4) * gc;&#xA;t_cg = t_cg + J5' * (m(5)+m(6)+m(7)) * gc;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;% Test jacobian by adding our advanced torque computation above to our&#xA;% original computation of the torque based on the end effector jacobian.&#xA;F = [fx;fy;fz];&lt;/p&gt;&#xA;&#xA;&lt;p&gt;torque = t_cg + J'*F;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and the function code:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;function cHs = cHs(q, l)&#xA;[H, Hs] = CompH(q, l);&lt;/p&gt;&#xA;&#xA;&lt;p&gt;T01c = ScrewZ(q(1),l(1,3)/2)*ScrewX(-pi/2, l(1, 1)/2);&#xA;T02c = Hs{1}*ScrewZ(q(2) - pi/2,l(2,3)/2)*ScrewX(0, l(2, 1)/2);&#xA;T03c = Hs{2}*ScrewZ(q(3),l(3,3)/2)*ScrewX(0, l(3, 1)/2);&#xA;T04c = Hs{3}*ScrewZ(q(4) + pi/2,l(4,3)/2)*ScrewX(pi/2, l(4, 1)/2);&#xA;T05c = Hs{4}*ScrewZ(q(5),l(5,3)/2);&lt;/p&gt;&#xA;&#xA;&lt;p&gt;cHs = {T01c, T02c, T03c, T04c, T05c};&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;end&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I don't know where I made a mistake in the Matlab code. &lt;/p&gt;&#xA;" OwnerUserId="24955" LastEditorUserId="24955" LastEditDate="2020-03-21T22:08:37.323" LastActivityDate="2020-03-21T22:08:37.323" Title="I want to Calculate the Joint Velocities and Angular Accelerations of 5 DOF Youbot kuka robotic arm" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;robotics-toolbox&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20342" PostTypeId="2" ParentId="20321" CreationDate="2020-03-20T02:26:04.903" Score="0" Body="&lt;p&gt;Analytic Solution:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;t = [sind(30) * cosd(45), sind(30) * sind(45), cosd(30)];&#xA;b = [0;0;1];&#xA;psi = deg2rad(45);&#xA;&#xA;v = cross(b,t);&#xA;s = norm(v);&#xA;c = dot(b,t);&#xA;&#xA;phiB = psi;&#xA;uB = b;&#xA;uBhat = vector2ssMat(uB);&#xA;&#xA;I = eye(3);&#xA;&#xA;rotA = I+vector2ssMat(v)+(vector2ssMat(v)^2)*((1-c)/s^2);&#xA;rotB = I*cos(phiB)+uB*transpose(uB)*(1-cos(phiB))+uBhat*sin(phiB);&#xA;&#xA;Rdes = rotA*rotB;&#xA;disp(Rdes);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="24451" LastActivityDate="2020-03-20T02:26:04.903" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20343" PostTypeId="2" ParentId="20333" CreationDate="2020-03-20T15:34:32.440" Score="1" Body="&lt;p&gt;Your question is related to &lt;a href=&quot;https://en.wikipedia.org/wiki/Wahba%27s_problem&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wahba's problem&lt;/a&gt;, which initially is defined for rotation matrices but can also be defined for unit quaternions and can be solved with Davenport's q-method. However, in order to have a uniquely defined rotation it is required to have at least two pairs of vectors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You only have one pair of vectors. The second pair could be chosen as the rotation axis, which should remain unchanged during the rotation. For this rotation axis you can choose any unit vector which is equidistant to both vectors of the first pair. When denoting the vector/imaginary parts normalized to unit length of &lt;span class=&quot;math-container&quot;&gt;$X$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$Y$&lt;/span&gt; as &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt; respectively then the rotation axis &lt;span class=&quot;math-container&quot;&gt;$r$&lt;/span&gt; can be parameterized using&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\begin{align}&#xA;n &amp;amp;= \frac{x \times y}{\|x \times y\|}, \\&#xA;m &amp;amp;= \frac{x + y}{\|x + y\|}, \\&#xA;r &amp;amp;= \cos(\phi)\,n + \sin(\phi)\,m.&#xA;\end{align}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The smallest and largest resulting rotation (in terms of rotation angle) are obtained using &lt;span class=&quot;math-container&quot;&gt;$\phi=0$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\phi=\pi/2$&lt;/span&gt; respectively, with &lt;span class=&quot;math-container&quot;&gt;$n$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$m$&lt;/span&gt; as axis of rotation respectively. The corresponding unit quaternions are &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;q = \begin{bmatrix} m\cdot x \\ \|x \times m\|\,n\end{bmatrix}, \quad&#xA;q = \begin{bmatrix} 0 \\ m\end{bmatrix},&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;respectively. It can be noted that this method will fail if &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt; are linear dependent (i.e. &lt;span class=&quot;math-container&quot;&gt;$y = \pm x$&lt;/span&gt;). When &lt;span class=&quot;math-container&quot;&gt;$y = x$&lt;/span&gt; then any rotation with &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; as rotation axis would suffice, so &lt;span class=&quot;math-container&quot;&gt;$q = \begin{bmatrix}\cos(\theta) &amp;amp; \sin(\theta)\,x^\top\end{bmatrix}^\top$&lt;/span&gt;. When &lt;span class=&quot;math-container&quot;&gt;$y = -x$&lt;/span&gt; then any rotation of &lt;span class=&quot;math-container&quot;&gt;$\pi$&lt;/span&gt; radians around any axis &lt;span class=&quot;math-container&quot;&gt;$t$&lt;/span&gt;, which is perpendicular to &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt;, would suffice, so &lt;span class=&quot;math-container&quot;&gt;$q = \begin{bmatrix}0 &amp;amp; t^\top\end{bmatrix}^\top$&lt;/span&gt;.&lt;/p&gt;&#xA;" OwnerUserId="1487" LastEditorUserId="1487" LastEditDate="2020-03-21T17:08:23.930" LastActivityDate="2020-03-21T17:08:23.930" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20346" PostTypeId="1" AcceptedAnswerId="20391" CreationDate="2020-03-20T19:59:49.733" Score="0" ViewCount="59" Body="&lt;p&gt;What physics simulators exist which are open source/free? AI Gym uses a proprietary for-cost physics engine making it nonviable. &lt;/p&gt;&#xA;" OwnerUserId="21514" LastActivityDate="2020-04-01T07:43:26.373" Title="Free 2 and 3d simulators" Tags="&lt;simulation&gt;&lt;simulator&gt;" AnswerCount="1" CommentCount="4" FavoriteCount="1" ClosedDate="2020-04-01T12:20:01.800" ContentLicense="CC BY-SA 4.0" />
  <row Id="20347" PostTypeId="1" CreationDate="2020-03-21T00:22:53.083" Score="2" ViewCount="160" Body="&lt;p&gt;Currently my setup is:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;2x hobby TT motors connected to a Pi Zero with a motor HAT&lt;/li&gt;&#xA;&lt;li&gt;Python script running on the Pi which runs a &lt;a href=&quot;https://github.com/blynkkk/lib-python&quot; rel=&quot;nofollow noreferrer&quot;&gt;Blynk python client&lt;/a&gt; and controls&#xA;motors via the &lt;a href=&quot;https://gpiozero.readthedocs.io/en/stable/&quot; rel=&quot;nofollow noreferrer&quot;&gt;gpiozero&lt;/a&gt; library &lt;/li&gt;&#xA;&lt;li&gt;Blynk iOS app using the &lt;a href=&quot;http://docs.blynk.cc/#widgets-controllers-joystick&quot; rel=&quot;nofollow noreferrer&quot;&gt;joystick&lt;/a&gt; widget&lt;/li&gt;&#xA;&lt;li&gt;Motors are attached on either side of a 'homebrew' chassis at the rear, parallel to each other, with a free-rotating wheel at the front.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;What I want to do is to smoothly control motor direction &amp;amp; speed using the joystick values.  I have smooth control over speed forward / backwards on the y axis, but want to somehow interpolate x &amp;amp; y for fine control of direction also.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Something like &lt;a href=&quot;https://math.stackexchange.com/questions/553478/how-covert-joysitck-x-y-coordinates-to-robot-motor-speed&quot;&gt;this math.stackexchange question&lt;/a&gt; is what I'm looking for, but I have no idea how to convert the accepted answer into code.&lt;/p&gt;&#xA;" OwnerUserId="24968" LastActivityDate="2020-06-06T21:00:35.113" Title="How do I convert centre-returning joystick values to dual hobby-motor direction?" Tags="&lt;control&gt;&lt;motor&gt;&lt;raspberry-pi&gt;&lt;algorithm&gt;&lt;python&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20348" PostTypeId="1" CreationDate="2020-03-21T10:48:46.183" Score="0" ViewCount="25" Body="&lt;p&gt;I have to create a jumping mechanism for a small robotic car and was thinking about using a spring mechanism to do so. However, due to dimensions (16cmx8cm) and mass constraints (below 200g) I cannot figure out what would be an optimal spring release mechanism for a small jump. My initial idea was to use a motor to wind a spring attached to a platform at the bottom of the car which would be released to make whole structure jump. Moreover, I am unsure on how to chose the right spring (equations of force and energy seem to be insufficient to find both k and x).&lt;/p&gt;&#xA;" OwnerUserId="24970" LastActivityDate="2020-03-21T10:48:46.183" Title="How to create a jumping mechanism for a small robotic car?" Tags="&lt;motor&gt;&lt;mechanism&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20350" PostTypeId="1" CreationDate="2020-03-22T15:34:06.543" Score="0" ViewCount="30" Body="&lt;p&gt;My first question is: imagine I have a self-made quadcopter and I want it to land. How can I achieve that? Do I have to stop the 4 motors at the same time?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second question: I use an AR.Drone 2.0. When I send an empty message to the land topic, it lands (measuring the altitude and doing it in a smooth way). What happens when I send the land command? I don't care if you have the documentation about the AR.Drone or another drone. I just want to know how can I achieve the same result. If you have any article or paper or thesis, it will be very welcomed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="23438" LastActivityDate="2020-03-22T15:34:06.543" Title="What happens when I send the land command to my quadcopter?" Tags="&lt;quadcopter&gt;" AnswerCount="0" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="20351" PostTypeId="1" CreationDate="2020-03-22T16:25:59.650" Score="0" ViewCount="35" Body="&lt;p&gt;I am working on the adaptive control of quadrotor UAV in MATLAB/Simulink environment. I prepared some trajectories for the UAV to follow in &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$z$&lt;/span&gt; directions. I would like to implement these trajectories by using a commercial pilot joystick whose blocks are available on Simulink. What I am quite unclear is the selection of these inputs through the joystick. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In flight control systems, one can give roll, pitch and yaw rates (&lt;span class=&quot;math-container&quot;&gt;$p$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$q$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$r$&lt;/span&gt;) as inputs to be followed by the UAV. In a conference paper I came across an example where the roll angle (&lt;span class=&quot;math-container&quot;&gt;$\phi$&lt;/span&gt;), the pitch angle (&lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt;) and the yaw rate (&lt;span class=&quot;math-container&quot;&gt;$\dot{\psi}$&lt;/span&gt;) are given from the joystick. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is the following: What is the general selection for the UAV inputs through a joystick? I watched some videos on Youtube, where some people are controlling the UAVs with joysticks. Do they directly provide the desired &lt;span class=&quot;math-container&quot;&gt;$p$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$q$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$r$&lt;/span&gt; ?&lt;/p&gt;&#xA;" OwnerUserId="24977" LastActivityDate="2020-03-22T16:25:59.650" Title="Proper Joystick Inputs for UAV Quadrotor Control" Tags="&lt;quadcopter&gt;&lt;uav&gt;&lt;input&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20352" PostTypeId="1" CreationDate="2020-03-23T01:16:37.253" Score="1" ViewCount="43" Body="&lt;p&gt;Based on &lt;a href=&quot;https://cdn-shop.adafruit.com/datasheets/HMC5883L_3-Axis_Digital_Compass_IC.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;the datasheet&lt;/a&gt;, HMC5583L has 160Hz output rate and produce three axis direction angle data, X, Y, and Z. It can measure diversion from Earth magnet field with 1° to 2° accuracy. Does that means that the &quot;heading&quot; direction always point to the North perpendicular to vertical orientation or it is slightly point downward? Does it also has measurement drift overtime? Is it reasonable to use it alone as orientation detector or it needs to be orchestrated with other sensors?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I understand that gyro + accelerometer module is more suitable than this, but there is also the tricky drift to deal with if we want to detect the orientation overtime. I'm merely considering alternatives.&lt;/p&gt;&#xA;" OwnerUserId="24979" LastEditorUserId="24979" LastEditDate="2020-03-23T01:23:47.740" LastActivityDate="2020-03-23T01:23:47.740" Title="Does GY-271 (HMC5583L) or any 3-axis magnetometer suitable to detect orientation?" Tags="&lt;orientation&gt;&lt;magnetometer&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20354" PostTypeId="1" CreationDate="2020-03-23T18:16:36.810" Score="0" ViewCount="189" Body="&lt;p&gt;What are the differences between SLAM and Localization if you have a known map? How does the position probability update differ between the two? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In particular I'm curious on if localization is a fundamentally easier problem give you have map.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a virtual environment with a simulated LIDAR sensor and a known map. I want to try implementing localization but I'm not completely sure how to do it - you can do IPCM over the whole space but this is a very poor idea if you have a strong prior on where the robot started a sequence of sensor values/actions up until your current location. &lt;/p&gt;&#xA;" OwnerUserId="21514" LastActivityDate="2020-04-25T14:16:39.383" Title="Difference between SLAM and Localization" Tags="&lt;slam&gt;&lt;localization&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20356" PostTypeId="2" ParentId="20354" CreationDate="2020-03-24T15:14:29.973" Score="5" Body="&lt;p&gt;Localization is always done with respect to a map. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;SLAM(Simultaneous Localization and Mapping). As it is in the name, also does localization with respect to a map. The only difference is that the map is unavailable so it has to create it. It is simultaneously creating a map, and then localization itself against it.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How does the position probability update differ between the two? &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Mathematically they end up being the same thing. Just that in SLAM typically the uncertainty of the map is a factor in the position probability. (Should be done in localization to, but is sometimes ignored)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In particular I'm curious on if localization is a fundamentally easier problem give you have map.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Yes. As the map can be created offline you can spend a lot more computing power, and do a lot more refinement to ensure you have a high quality map. SLAM basically has to do everything in real time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is why actually most autonomous car companies don't do SLAM, they do mapping and localization separately. They first run there cars through a city to generate high quality maps. Then when it is running autonomously it is just localizing itself against that map.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you have a strong prior then just remove the parts of the pointcloud that you know will not be in range. You also want to make sure that your ICP algorithm is robust against outliers.&lt;/p&gt;&#xA;" OwnerUserId="15265" LastActivityDate="2020-03-24T15:14:29.973" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="20357" PostTypeId="1" CreationDate="2020-03-24T16:44:07.347" Score="1" ViewCount="89" Body="&lt;p&gt;The prompt here is to implement the IK on a real robot with constraints. I started off with writing the DH-Table.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\begin{bmatrix}n &amp;amp; a_{i-1} &amp;amp; \alpha_{i-1} &amp;amp; d_i &amp;amp; \theta_i&#xA;\\1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; \theta_1 \\ 2 &amp;amp; a_1 &amp;amp; \frac{pi}{2} &amp;amp; 0 &amp;amp; \theta_2 \\ 3 &amp;amp; a_3 &amp;amp; 0 &amp;amp; 0 &amp;amp; \theta_3 \\ 4 &amp;amp; a_3 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \end{bmatrix}$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've deduced this DH table into its corresponding matrices and solved them for &lt;span class=&quot;math-container&quot;&gt;$\theta_1$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$\theta_2$&lt;/span&gt; and  &lt;span class=&quot;math-container&quot;&gt;$\theta_3$&lt;/span&gt;. ( The math isn't shown here. )&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I arrive at these 3 equations. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$  \theta_1 = tan^{-1}\frac{P_y}{P_x}$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$  \theta_2 = ....$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$ \theta_3  = ...$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now the question is to place the legs on the edge of the robot's body. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;1.) Is there material out there that explains how the frame can be translated from the center of the body to the legs?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2.) Is there any material out there that explains Body IK and how it can be implemented for Roll Pitch and Yaw? and how to develop gaits for a robot like this in terms of code?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;any information, tips, and suggestions are much welcome. I've also placed a python script where the user can control the position of the leg using IK.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/twrTL.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/twrTL.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;import math&#xA;import numpy as np&#xA;from mpl_toolkits import mplot3d&#xA;import matplotlib.pyplot as plt&#xA;from matplotlib.widgets import Slider, RadioButtons&#xA;&#xA;LINK_1 = 60 + 60&#xA;LINK_2 = 110&#xA;LINK_3 = 120&#xA;&#xA;&#xA;&quot;&quot;&quot;&#xA;Place simulation on leg and check. Makes sure the image is inverted on the real leg.&#xA;&quot;&quot;&quot;&#xA;&#xA;def constrain(val, min_val, max_val):&#xA;    return min( max_val, max(min_val, val) )&#xA;&#xA;&#xA;class Joint:&#xA;    def __init__(self, link_1, link_2, link_3):&#xA;        self.link_1 = link_1&#xA;        self.link_2 = link_2&#xA;        self.link_3 = link_3&#xA;&#xA;        self.theta_1 = -1&#xA;        self.theta_2 = -1&#xA;        self.theta_3 = -1&#xA;&#xA;&#xA;def FK( joint ):&#xA;    T0_1 = np.array([ &#xA;        [math.cos(joint.theta_1), -math.sin(joint.theta_1), 0, 0], &#xA;        [math.sin(joint.theta_1),  math.cos(joint.theta_1), 0, 0],&#xA;        [0, 0, 1, 0],  &#xA;        [0, 0, 0, 1 ]&#xA;        ])&#xA;    T1_2 = np.array([&#xA;        [math.cos(joint.theta_2), -math.sin(joint.theta_2), 0, joint.link_1],  &#xA;        [0, 0, -1, 0], &#xA;        [math.sin(joint.theta_2),  math.cos(joint.theta_2), 0, 0], &#xA;        [0, 0, 0, 1]&#xA;        ])&#xA;    T2_3 = np.array([&#xA;        [math.cos(joint.theta_3), -math.sin(joint.theta_3), 0, joint.link_2],&#xA;        [math.sin(joint.theta_3),  math.cos(joint.theta_3), 0, 0],&#xA;        [0, 0, 1, 0],  &#xA;        [0, 0, 0, 1]&#xA;        ])&#xA;    T3_4 = np.array([&#xA;        [1, 0, 0, joint.link_3],&#xA;        [0, 1, 0, 0], &#xA;        [0, 0, 1, 0], &#xA;        [0, 0, 0, 1]&#xA;        ])&#xA;&#xA;    POINT_SET_1 = np.dot( T0_1, T1_2 )&#xA;    POINT_SET_2 = np.dot( POINT_SET_1, T2_3 )&#xA;    POINT_SET_3 = np.dot( POINT_SET_2, T3_4 )&#xA;    return [POINT_SET_1, POINT_SET_2, POINT_SET_3]&#xA;&#xA;&#xA;&#xA;def leg2( x, y, z ):&#xA;    #Final calculation resulting in smooth motion.&#xA;&#xA;    theta_1 = math.atan2(y, x)&#xA;    A = z&#xA;    B = math.cos(theta_1) * x + y * math.sin(theta_1) - LINK_1&#xA;    C = ((math.pow(A, 2) + math.pow(B,2) - math.pow(LINK_3, 2) - math.pow(LINK_2,2)) / (2 * LINK_3 * LINK_2))&#xA;    theta_3 = math.atan2( math.sqrt( 1 - math.pow( C,2 )), C)&#xA;    D = math.cos(theta_3) * LINK_3 + LINK_2&#xA;    E = math.sin(theta_3) * LINK_3&#xA;&#xA;    numerator = (A * D - B * E) / (math.pow(E,2) + math.pow(D,2) )&#xA;    denominator = 1 - math.pow(numerator,2)&#xA;&#xA;    theta_2 = math.atan2(numerator, math.sqrt(denominator))&#xA;    return [ math.degrees(theta_1), math.degrees(theta_2), math.degrees(theta_3)]&#xA;&#xA;&#xA;&#xA;&#xA;def filterEndPoints( point_set ):&#xA;    return (&#xA;        [&#xA;          [point_set[0][0][3], point_set[0][1][3], point_set[0][2][3]],&#xA;          [point_set[1][0][3], point_set[1][1][3], point_set[1][2][3]],&#xA;          [point_set[2][0][3], point_set[2][1][3], point_set[2][2][3]]&#xA;        ]&#xA;    )&#xA;&#xA;&#xA;fig  = plt.figure()&#xA;ax = plt.axes(projection='3d')&#xA;ax.set_xlim3d(-300, 300)&#xA;ax.set_ylim3d(-300, 300)&#xA;ax.set_zlim3d(-300, 300)&#xA;ax.set_xlabel(&quot;X-axis&quot;)&#xA;ax.set_ylabel(&quot;Y-axis&quot;)&#xA;ax.set_zlabel(&quot;Z-axis&quot;)&#xA;axe = plt.axes([0.25, 0.85, 0.001, 0.001])&#xA;&#xA;axxval = plt.axes([0.35, 0.9, 0.45, 0.03])&#xA;axyval = plt.axes([0.35, 0.93, 0.45, 0.03])&#xA;axzval = plt.axes([0.35, 0.96, 0.45, 0.03])&#xA;a0_val = Slider(axxval, &quot;X&quot;, -300, 300, valinit=180)&#xA;a1_val = Slider(axyval, &quot;Y&quot;, -300, 300, valinit=180)&#xA;a2_val = Slider(axzval, &quot;Z&quot;, -300, 300, valinit=180)&#xA;&#xA;&#xA;x_value = 0&#xA;y_value = 0&#xA;z_value = 0&#xA;&#xA;joint =  Joint(60+60, 110, 120)&#xA;joint_values = leg2( 100, 100, 100 )&#xA;joint.theta_1 = joint_values[0]&#xA;joint.theta_2 = joint_values[1]&#xA;joint.theta_3 = joint_values[2]&#xA;link_1 = filterEndPoints(FK( joint ))&#xA;originPoints = [0, 0, 0]&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;def returnConstrainedAngles( joint_values ):&#xA;    theta_1 = -constrain(joint_values[0], 0.0, 180.0)&#xA;    theta_2 = -constrain(joint_values[1], 0.0, 180.0)&#xA;    theta_3 = -constrain(joint_values[2], 0.0, 180.0)&#xA;    # theta_1 = -joint_values[0]&#xA;    # theta_2 = -joint_values[1]&#xA;    # theta_3 = -joint_values[2]&#xA;    return [math.radians(theta_1), math.radians(theta_2), math.radians(theta_3)]&#xA;&#xA;&#xA;def update_ao_val(val):  &#xA;    global link_1&#xA;    global x_value, y_value, z_value&#xA;    x_value = int(val)&#xA;&#xA;    try:  &#xA;        #joint_values = leg(x_value, y_value, z_value)&#xA;        joint_values = leg2(x_value, y_value, z_value)&#xA;    except Exception as e:&#xA;        return&#xA;&#xA;&#xA;    joint.theta_1 = returnConstrainedAngles( joint_values )[0]&#xA;    joint.theta_2 = returnConstrainedAngles( joint_values )[1]&#xA;    joint.theta_3 = returnConstrainedAngles( joint_values )[2]&#xA;    serial_print = &quot; T1 : &quot;+ str( abs( round( math.degrees( joint.theta_1 ) ) ) )  + &quot; T2: &quot; + str( abs( round( math.degrees( joint.theta_2 ) ) )) + &quot; T3 : &quot;+ str( abs( round( math.degrees( joint.theta_3 ) ) ))&#xA;    print( serial_print )&#xA;&#xA;    link_1 = filterEndPoints(FK( joint ))&#xA;    print( str(link_1[0][2]) + &quot; : &quot; + str(link_1[1][2]) + &quot; : &quot; + str(link_1[2][2]) )&#xA;    fig.canvas.draw_idle()&#xA;    ax.clear()&#xA;    ax.set_xlabel(&quot;X-axis&quot;)&#xA;    ax.set_ylabel(&quot;Y-axis&quot;)&#xA;    ax.set_zlabel(&quot;Z-axis&quot;)&#xA;    ax.set_xlim3d(-300, 300)&#xA;    ax.set_ylim3d(-300, 300)&#xA;    ax.set_zlim3d(-300, 300)&#xA;    ax.plot3D( [ -50, 50, 50, -50, -50 ], [ -50, -50, 50, 50, -50 ], [ 0, 0, 0, 0, 0 ], &quot;-r*&quot; )&#xA;    ax.plot3D( [ originPoints[0], link_1[0][0], link_1[1][0], link_1[2][0] ], &#xA;               [ originPoints[1], link_1[0][1], link_1[1][1], link_1[2][1] ], &#xA;               [ originPoints[2], link_1[0][2], link_1[1][2], link_1[2][2] ], &quot;-go&quot; )&#xA;    fig.canvas.draw()&#xA;&#xA;&#xA;def update_a1_val(val):  &#xA;    global link_1&#xA;    global x_value, y_value, z_value&#xA;    y_value = int(val)&#xA;    try:  &#xA;        #joint_values = leg(x_value, y_value, z_value)&#xA;        joint_values = leg2(x_value, y_value, z_value)&#xA;    except NoneType as e:&#xA;        return&#xA;    joint.theta_1 = returnConstrainedAngles( joint_values )[0]&#xA;    joint.theta_2 = returnConstrainedAngles( joint_values )[1]&#xA;    joint.theta_3 = returnConstrainedAngles( joint_values )[2]&#xA;    serial_print = &quot; T1 : &quot;+ str( abs( round( math.degrees( joint.theta_1 ) ) ) )  + &quot; T2: &quot; + str( abs( round( math.degrees( joint.theta_2 ) ) )) + &quot; T3 : &quot;+ str( abs( round( math.degrees( joint.theta_3 ) ) ))&#xA;    print( serial_print )&#xA;    link_1 = filterEndPoints(FK( joint ))&#xA;    print( str(link_1[0][2]) + &quot; : &quot; + str(link_1[1][2]) + &quot; : &quot; + str(link_1[2][2]) )&#xA;    ax.clear()&#xA;    ax.set_xlabel(&quot;X-axis&quot;)&#xA;    ax.set_ylabel(&quot;Y-axis&quot;)&#xA;    ax.set_zlabel(&quot;Z-axis&quot;)&#xA;    ax.set_xlim3d(-300, 300)&#xA;    ax.set_ylim3d(-300, 300)&#xA;    ax.set_zlim3d(-300, 300)&#xA;    ax.plot3D( [ -50, 50, 50, -50, -50 ], [ -50, -50, 50, 50, -50 ], [0, 0, 0, 0, 0], &quot;-r*&quot; )&#xA;    ax.plot3D( [ originPoints[0], link_1[0][0], link_1[1][0], link_1[2][0] ], &#xA;               [ originPoints[1], link_1[0][1], link_1[1][1], link_1[2][1] ], &#xA;               [ originPoints[2], link_1[0][2], link_1[1][2], link_1[2][2] ], &quot;-go&quot; )&#xA;    fig.canvas.draw()&#xA;&#xA;&#xA;# 228 81&#xA;# 116 169&#xA;def update_a2_val(val):  &#xA;    global link_1&#xA;    global x_value, y_value, z_value, radius_value&#xA;    z_value = int(val)&#xA;    try:  &#xA;&#xA;        joint_values = leg2(x_value, y_value, z_value)&#xA;    except NoneType as e:&#xA;        return&#xA;    joint.theta_1 = returnConstrainedAngles( joint_values )[0]&#xA;    joint.theta_2 = returnConstrainedAngles( joint_values )[1]&#xA;    joint.theta_3 = returnConstrainedAngles( joint_values )[2]&#xA;    serial_print = &quot;T1: &quot;+ str( abs( round( math.degrees( joint.theta_1 ) ) ) )  + &quot; T2: &quot; + str( abs( round( math.degrees( joint.theta_2 ) ) )) + &quot; T3 : &quot;+ str( abs( round( math.degrees( joint.theta_3 ) ) ))&#xA;    print( serial_print )&#xA;    link_1 = filterEndPoints(FK( joint ))&#xA;    print( str(link_1[0][2]) + &quot; : &quot; + str(link_1[1][2]) + &quot; : &quot; + str(link_1[2][2]) )&#xA;    ax.clear()&#xA;    ax.set_xlabel(&quot;X-axis&quot;)&#xA;    ax.set_ylabel(&quot;Y-axis&quot;)&#xA;    ax.set_zlabel(&quot;Z-axis&quot;)&#xA;    ax.set_xlim3d(-300, 300)&#xA;    ax.set_ylim3d(-300, 300)&#xA;    ax.set_zlim3d(-300, 300)&#xA;    ax.plot3D( [ -50, 50, 50, -50, -50 ], [ -50, -50, 50, 50, -50 ], [0, 0, 0, 0, 0], &quot;-r*&quot; )&#xA;    ax.plot3D( [ originPoints[0], link_1[0][0], link_1[1][0], link_1[2][0] ], &#xA;               [ originPoints[1], link_1[0][1], link_1[1][1], link_1[2][1] ], &#xA;               [ originPoints[2], link_1[0][2], link_1[1][2], link_1[2][2] ], &quot;-go&quot; )&#xA;    fig.canvas.draw()&#xA;&#xA;&#xA;&#xA;def generateTrajectorySemicircle( radius ):&#xA;    theta = np.linspace(0, -np.pi, 100)&#xA;    r     = np.sqrt( radius )&#xA;    x1    = r   * np.cos( theta )&#xA;    x2    = 75  + r * np.sin( theta )&#xA;    x3    = 170 - np.linspace(0, 0, 100)&#xA;    return [ x1, x2, x3 ]&#xA;&#xA;def plotGraph( graphInstance, currentPoint, trajectoryPoints ): &#xA;  graphInstance.clear()&#xA;  graphInstance.plot3D( trajectoryPoints[2], trajectoryPoints[0], trajectoryPoints[1], &quot;*&quot;, markerSize=&quot;4&quot;)&#xA;&#xA;  #Setting limits&#xA;  graphInstance.set_xlim3d(-200, 200)&#xA;  graphInstance.set_ylim3d(-200, 200)&#xA;  graphInstance.set_zlim3d(-200, 200)&#xA;&#xA;  graphInstance.set_xlabel(&quot;X-axis&quot;)&#xA;  graphInstance.set_ylabel(&quot;Y-axis&quot;)&#xA;  graphInstance.set_zlabel(&quot;Z-axis&quot;)&#xA;  graphInstance.plot3D( [ -50, 50, 50, -50, -50 ], [ -50, -50, 50, 50, -50 ], [0, 0, 0, 0, 0], &quot;-r*&quot; )&#xA;  graphInstance.plot3D( &#xA;      [ 100, currentPoint[0][0], currentPoint[1][0], currentPoint[2][0] ], &#xA;      [ 0, currentPoint[0][1], currentPoint[1][1], currentPoint[2][1] ], &#xA;      [ 0, currentPoint[0][2], currentPoint[1][2], currentPoint[2][2] ], &quot;-go&quot;)&#xA;&#xA;  plt.pause(0.00001)&#xA;&#xA;&#xA;points = generateTrajectorySemicircle( 1000 )&#xA;&#xA;&#xA;&#xA;a0_val.on_changed(update_ao_val)&#xA;a1_val.on_changed(update_a1_val)&#xA;a2_val.on_changed(update_a2_val)&#xA;plt.show()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="23724" LastEditorUserId="23724" LastEditDate="2020-03-25T17:35:31.083" LastActivityDate="2020-08-23T18:14:27.657" Title="Inverse Kinematics for 4 legged robots and body translation" Tags="&lt;inverse-kinematics&gt;&lt;simulation&gt;&lt;forward-kinematics&gt;&lt;hexapod&gt;&lt;gait&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20358" PostTypeId="1" AcceptedAnswerId="20362" CreationDate="2020-03-24T22:00:44.970" Score="0" ViewCount="38" Body="&lt;p&gt;With the pandemic going on, our school has decided to officially shutdown all sponsored club meetings. Now that we are all digital, our robotics club was looking for projects that students can do at home on their computers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do you have any suggestions for projects that you think do a good job at teaching important robotics concepts? So far many of the ideas we have revolve around computer vision and implementing path finding algorithms, however we just want to make sure we give our students as many options as possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="24697" LastActivityDate="2020-03-25T06:17:15.187" Title="Good Software Projects for Aspiring Engineers" Tags="&lt;control&gt;&lt;slam&gt;&lt;pid&gt;&lt;computer-vision&gt;&lt;software&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2020-03-25T11:24:29.493" ContentLicense="CC BY-SA 4.0" />
  <row Id="20360" PostTypeId="2" ParentId="14167" CreationDate="2020-03-25T01:36:42.400" Score="1" Body="&lt;p&gt;If the rotation looks right but translation look deviated, noise might be an issue. Usually rotations are more robust to noise than translations when using the calibration equations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Synthetic data might be a good choice to debug.&lt;/p&gt;&#xA;" OwnerUserId="24987" LastActivityDate="2020-03-25T01:36:42.400" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20361" PostTypeId="1" CreationDate="2020-03-25T01:54:55.577" Score="2" ViewCount="76" Body="&lt;p&gt;I wrote a simple code for where I take 500 samples with stationary gyro and subtract those offset values to get calibrated gyro data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Question:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this much calibration enough to implement this gyro for a quadcopter system ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What other methods exist for better and accurate gyroscope calibration ?&lt;/p&gt;&#xA;" OwnerUserId="20190" LastActivityDate="2020-05-11T10:03:05.340" Title="how to calibrate gyroscope using raw gyro data?" Tags="&lt;gyroscope&gt;&lt;sensor-fusion&gt;&lt;calibration&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20362" PostTypeId="2" ParentId="20358" CreationDate="2020-03-25T06:17:15.187" Score="0" Body="&lt;p&gt;I guess famous toy problems in the robotics/control literature which could be easily implemented in Matlab or Python are Linear Inverted Pendulum, Two-link robotic arm, and Cart-pole problem. If you need any further help with these topics let me know.&lt;/p&gt;&#xA;" OwnerUserId="21747" LastActivityDate="2020-03-25T06:17:15.187" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20364" PostTypeId="2" ParentId="20222" CreationDate="2020-03-25T21:42:50.087" Score="0" Body="&lt;p&gt;Here is &lt;a href=&quot;https://github.com/Ezward/Stepper28BYJ48&quot; rel=&quot;nofollow noreferrer&quot;&gt;Arduino library&lt;/a&gt; code specifically for the 28BYJ-48 stepper motor using the ULN2003 controller board.  The readme discusses the various driver modes and how they work.  It's not done with PWM like a servo motor (where PWM is a repeating square wave control signal). Rather it is done by energizing the coils in the motor such that they attract to magnets.  Energizing in a specific pattern will move the motor from magnet to magnet, thus turning the spindle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is an example sketch for implementing a differential drive robot using two 28BYJ-48 stepper motors.  There is an example sketch that uses a LM393 optical encoder to calculate the steps per rotation of the stepper motor.&lt;/p&gt;&#xA;" OwnerUserId="24763" LastActivityDate="2020-03-25T21:42:50.087" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20367" PostTypeId="2" ParentId="20357" CreationDate="2020-03-26T03:22:42.740" Score="0" Body="&lt;p&gt;For frame transformations, you need a homogenous transformation matrix (which consists of the rotation matrix and position vector between your reference frame and the target frame). I would suggest &quot;Foundations of Robotics: Analysis and Control&quot; by Tsuneo Yoshikawa if you can access it, or just google how to find a transformation matrix.&lt;/p&gt;&#xA;" OwnerUserId="21747" LastActivityDate="2020-03-26T03:22:42.740" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20368" PostTypeId="1" CreationDate="2020-03-26T07:30:41.250" Score="1" ViewCount="60" Body="&lt;p&gt;Assume that I have an object in 3D, and I want to have a controller that stabilizes its orientation (also referred to as &quot;attitude&quot;). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To be sure we are clear: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;attitude is measured in &quot;degrees&quot; or &quot;radians&quot; &lt;/li&gt;&#xA;&lt;li&gt;attitude rate is measured in &quot;degrees/s&quot; or &quot;radians/s&quot;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The controller is made of two cascaded control loops:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;attitude controller: the error controlled by this controller is the difference between the &lt;em&gt;reference attitude&lt;/em&gt; and the &lt;em&gt;real attitude&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;attitude rate controller: the error controlled by this controller is the difference between the  reference &lt;em&gt;attitude rate&lt;/em&gt; and the &lt;em&gt;real attitude rate&lt;/em&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The attitude controller is made only of a P term, and therefore it is not hard to tune. However, the attitude rate controller has all three terms P, I, and D.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am using the well-known &lt;a href=&quot;https://en.wikipedia.org/wiki/Ziegler%E2%80%93Nichols_method&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ziegler-Nichols method&lt;/a&gt; to tune the attitude rate controller. However, I am not sure that theoretically, what I am doing is correct. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is: is it possible to tune the P, I, and D terms of the attitude rate controller while observing the step response by giving a command in attitude? To apply this procedure, should I provide an attitude rate command instead? (The main problem is I cannot give an attitude rate command because my object would start to rotate and this is not practical). FYI and for completeness: my object is a drone, but I don't think it matters too much regarding my question.  &lt;/p&gt;&#xA;" OwnerUserId="10852" LastActivityDate="2021-01-30T16:02:00.127" Title="Tuning a cascaded attitude and attitude rate PID controller" Tags="&lt;quadcopter&gt;&lt;pid&gt;&lt;uav&gt;&lt;flight-controller&gt;&lt;tuning&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20373" PostTypeId="1" CreationDate="2020-03-27T15:50:07.110" Score="0" ViewCount="364" Body="&lt;p&gt;Hello robotics stack exchange community, hope my message finds you well during these challenging times. I need an opinion regarding path planning algorithms.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Goal&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;I am looking for a path planning algorithm that is able to produce smooth paths that are shorter and more predictable than RRT and RRT*. It shouldn't get stuck in local minima like Artificial Potential Field.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;What I tried&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;I have set up a Linux 16 system with ROS Kinetic Kame and Python. I implemented Artificial Potential Field Path Planning, RRT and RRT* and ran those on a robot in a small arena. The arena was a square and I placed different objects inside of it that needed to be avoided. See the picture below for an example of how my arena configuration looks like.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/A6Dcp.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/A6Dcp.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Artificial Field Path Planning creates nice, smooth curves and a robot executes smooth movements to follow it. My problem with them is &lt;strong&gt;local minima&lt;/strong&gt; where my robot gets stuck.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;RRT produced &lt;strong&gt;jagged paths&lt;/strong&gt;, but the nice thing about it was that it always found a path (albeit it was always a different one). I implemented RRT* to get smoother paths, but they're quite &quot;&lt;strong&gt;branchy&lt;/strong&gt;&quot; looking (still better than RRT though).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have also looked into other algorithm such as A* and MEA, but rather than trying to implement them straight away, I wanted to ask for your opinion.&lt;/p&gt;&#xA;" OwnerUserId="25009" LastActivityDate="2021-05-26T14:01:45.180" Title="Path planning algorithm better than RRT* and Artificial Potential Field" Tags="&lt;ros&gt;&lt;python&gt;&lt;planning&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20374" PostTypeId="1" AcceptedAnswerId="20377" CreationDate="2020-03-27T17:46:14.017" Score="1" ViewCount="44" Body="&lt;p&gt;I am trying to achieve a nonlinear optimization for SLAM on a function that contains two different constraints, like this :&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;T_{opt} = \underset{T}{\arg\min} \sum_i(\left\lVert T.X_i - x_i \right\rVert)^2 + \sum_j(\left\lVert\pi(T.Y_i) - y_i\right\rVert)^2&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;T : Affine transformation (Rotation + Translation),&lt;/li&gt;&#xA;&lt;li&gt;X_i some source's 3d points, x_i are target's 3d points that correspond to X_i,&lt;/li&gt;&#xA;&lt;li&gt;Y_i some source's 3d points (different than X_i), y_i are target's 2d points that correspond to Y_i,&lt;/li&gt;&#xA;&lt;li&gt;PI function is the projection of a 3d point to the image plane.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;My questions are :&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The two constraints have different units, first give an error in meter, second give an error in pixel. Is it a problem for the optimization to minimize two constraints with different scale units ?&lt;/li&gt;&#xA;&lt;li&gt;Is it a problem if one constraint have lot more data to deal with ? For example, first constraint would have 10 points for the optimization, second constraint would have 50 points. Is it a problem if sets of data have complete different sizes ?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Regards&lt;/p&gt;&#xA;" OwnerUserId="25011" LastActivityDate="2020-03-28T04:48:58.373" Title="Dual constraint non-linear optimization for SLAM" Tags="&lt;slam&gt;&lt;computer-vision&gt;&lt;pose&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20375" PostTypeId="2" ParentId="20354" CreationDate="2020-03-27T21:18:24.957" Score="2" Body="&lt;p&gt;edwinem already explains pretty well, let me add a couple of parts. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are two major scenarios (actually many more) making SLAM more difficult than localization. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) Revisiting: When creating a map, accumulated errors in a map is inevitable. When a robot revisits a same location after traveling a loop, the robot needs to determine if this environment is a new location or a part of map. This is especially more difficult, if the environment has similar patterns. Unfortunately, our living environment has many similar patterns. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) Kidnapping: For many reasons, a robot lost its location completely. This case, recreation of a map with data association is a big challenges. &lt;/p&gt;&#xA;" OwnerUserId="25013" LastActivityDate="2020-03-27T21:18:24.957" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20376" PostTypeId="2" ParentId="18914" CreationDate="2020-03-27T21:27:37.053" Score="0" Body="&lt;p&gt;The answer is highly depends on your application. If your application is a simply trajectory tracking PID control of a mobile robot. Such a timing would be not critical. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, if your application is a safety critical haptic device for human robot interaction with multi-DOF actuators, then you need to seriously care about all the timing issues. Based on my experience, the control input needs to be generated just after the most critical sensor information. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, a more important part than sequence is the short loop time for most of control algorithms. In you example, if the control loop is running at 125Hz, the order between control input and ADC would be probably not very critical. Since most of control algorithms would be finished within 1ms which is much shorter than one loop time. &lt;/p&gt;&#xA;" OwnerUserId="25013" LastActivityDate="2020-03-27T21:27:37.053" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20377" PostTypeId="2" ParentId="20374" CreationDate="2020-03-28T04:48:58.373" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;The two constraints have different units, first give an error in meter, second give an error in pixel. Is it a problem for the optimization to minimize two constraints with different scale units ?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;For your problem I think it will be fine(if your optimizer uses Levenberg Marquadt it will implicitly handle it). But generally yes this is a problem you have to deal with any sort of optimization algorithm(not limited to SLAM). The topic is called &lt;em&gt;feature scaling&lt;/em&gt; and comes up a lot in machine learning.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Is it a problem if one constraint have lot more data to deal with ? For example, first constraint would have 10 points for the optimization, second constraint would have 50 points. Is it a problem if sets of data have complete different sizes ?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Other things being equal then the constraint with more samples will have a bigger effect on your output. One way to fix this is to add a weighting(&lt;span class=&quot;math-container&quot;&gt;$\lambda$&lt;/span&gt;) parameter that will reduce the effect of that constraint.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So your equation would become something like this&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$T_{opt} = \underset{T}{\arg\min} \sum_i(\left\lVert T.X_i - x_i \right\rVert)^2 + \lambda \sum_j(\left\lVert\pi(T.Y_i) - y_i\right\rVert)^2$$&lt;/span&gt;&lt;/p&gt;&#xA;" OwnerUserId="15265" LastActivityDate="2020-03-28T04:48:58.373" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20378" PostTypeId="2" ParentId="1622" CreationDate="2020-03-28T06:28:21.823" Score="0" Body="&lt;p&gt;I'll chime in.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;You could use piezoelectric inchworm motors.  The approach is outlined here: &lt;a href=&quot;https://www.techbriefs.com/component/content/article/tb/techbriefs/mechanics-and-machinery/2273&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.techbriefs.com/component/content/article/tb/techbriefs/mechanics-and-machinery/2273&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;you could use a ball robot motor system, upside down with a spherical bearing rather than actuating with a toroidal motor.  The ball robot is well explained here: &lt;a href=&quot;https://www.youtube.com/watch?v=bI06lujiD7E&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=bI06lujiD7E&lt;/a&gt; Bearings are available here: &lt;a href=&quot;https://www.acornbearings.co.uk/bearings/spherical-roller-bearings&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.acornbearings.co.uk/bearings/spherical-roller-bearings&lt;/a&gt;.  an omniwheel appraoch is here: &lt;a href=&quot;https://www.semanticscholar.org/paper/Concept-of-a-three-D.O.F-spherical-joint-gripper-Weyrich-Abdullah/10699c6f1c39a8700c903d407a110910bef53f3c&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.semanticscholar.org/paper/Concept-of-a-three-D.O.F-spherical-joint-gripper-Weyrich-Abdullah/10699c6f1c39a8700c903d407a110910bef53f3c&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You could make a rare earth magnet ball rotor with an electromagnetic.  See these two links for a better idea.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/HRgZk.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HRgZk.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt; and &lt;a href=&quot;https://i.stack.imgur.com/0eQf4.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0eQf4.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;or a delta robot through a SR joint. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I'm guessing you are already familiar with stewart plaforms &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Hope this helps.  I can sketch stuff if this isn't clear, but I'm not fast enough at CAD to draw this all out.  I didn't post pictures because it seemed terribly slow.&lt;/p&gt;&#xA;" OwnerUserId="25016" LastActivityDate="2020-03-28T06:28:21.823" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20379" PostTypeId="2" ParentId="17873" CreationDate="2020-03-28T15:32:17.280" Score="2" Body="&lt;p&gt;This is an interesting question and I ran into the same issue.&#xA;First, let me mention that there are libraries that let you change the residual function (&lt;em&gt;i.e.&lt;/em&gt;, innovation). For instance, see the &lt;code&gt;residual&lt;/code&gt; argument of the &lt;code&gt;update&lt;/code&gt; function of the Extended Kalman Filter implementation of &lt;a href=&quot;https://filterpy.readthedocs.io/en/latest/_modules/filterpy/kalman/EKF.html#ExtendedKalmanFilter.update&quot; rel=&quot;nofollow noreferrer&quot;&gt;filterpy&lt;/a&gt;. However, I understand you may be stuck with a given library that does not let you change how the residual is calculated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You were thinking about substituting the state space variable &lt;span class=&quot;math-container&quot;&gt;$\alpha$&lt;/span&gt; by &lt;span class=&quot;math-container&quot;&gt;$[\cos(\alpha), \sin(\alpha)]$&lt;/span&gt;, which certainly would solve the issue. I went for another solution approach that modifies the sensor values before they get fed into the Kalman filter, &lt;em&gt;i.e.&lt;/em&gt;, it addresses the problem at the equation &lt;span class=&quot;math-container&quot;&gt;$\alpha_\text{new} = -170° \equiv 190°$&lt;/span&gt;. The idea is that if your sensor would report &lt;span class=&quot;math-container&quot;&gt;$190°$&lt;/span&gt; rather than &lt;span class=&quot;math-container&quot;&gt;$-170°$&lt;/span&gt;, the calculation of the residual would give the correct value of &lt;span class=&quot;math-container&quot;&gt;$20°$&lt;/span&gt;.&#xA;Therefore, I define a rotation counter variable &lt;span class=&quot;math-container&quot;&gt;$r=0$&lt;/span&gt; that gets incremented/decremented each time &lt;span class=&quot;math-container&quot;&gt;$\alpha^{\text{s}}$&lt;/span&gt; jumps across the discontinuity (the superscript &lt;code&gt;s&lt;/code&gt; indicates that this is the &lt;em&gt;raw&lt;/em&gt; sensor value). The jumps are detected via the conditions &lt;span class=&quot;math-container&quot;&gt;$\alpha_{t+1}^{\text{s}} - \alpha_t^{\text{s}} &amp;gt; \Delta$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\alpha_{t+1}^{\text{s}} - \alpha_t^{\text{s}} &amp;lt; -\Delta$&lt;/span&gt;. (I have set &lt;span class=&quot;math-container&quot;&gt;$\Delta = \pi$&lt;/span&gt;, but &lt;span class=&quot;math-container&quot;&gt;$\Delta$&lt;/span&gt; could also be set closer to &lt;span class=&quot;math-container&quot;&gt;$2\pi$&lt;/span&gt;.) This, of course, requires that your compass needle does not make more than half a rotation between two subsequent measurements - but I assume that your measurement frequency is high enough (in my case it certainly was). The &lt;em&gt;modified&lt;/em&gt; angle (superscript &lt;code&gt;m&lt;/code&gt;) that gets fed into the Kalman filter is then &lt;span class=&quot;math-container&quot;&gt;$\alpha^{\text{m}} = \alpha^{\text{s}} + r \cdot 2\pi$&lt;/span&gt;.&#xA;The Kalman filter output (state estimate/prediction) can be transformed back to &lt;span class=&quot;math-container&quot;&gt;$[-\pi,\pi)$&lt;/span&gt; if you like.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some python pseudo code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;alphaSOld = np.nan&#xA;r = 0&#xA;&#xA;while doMeasure:&#xA;    alphaS = getAngle() # returns angle in range [-pi, pi)&#xA;&#xA;    if not np.isnan(alphaSOld):&#xA;        if alphaS - alphaSOld &amp;lt; -math.pi:&#xA;            r += 1&#xA;        elif alphaS - alphaSOld &amp;gt; math.pi:&#xA;            r -= 1&#xA;&#xA;    alphaM = alphaS + r * 2 * math.pi&#xA;    kf.update(alphaM)&#xA;&#xA;    alphaSOld = alphaS&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="25017" LastActivityDate="2020-03-28T15:32:17.280" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20384" PostTypeId="2" ParentId="20223" CreationDate="2020-03-30T15:35:42.360" Score="0" Body="&lt;p&gt;&lt;a href=&quot;https://www.universal-robots.com/how-tos-and-faqs/how-to/ur-how-tos/remote-control-via-tcpip/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.universal-robots.com/how-tos-and-faqs/how-to/ur-how-tos/remote-control-via-tcpip/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is the manual regarding connexions as TCP clients to the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The frequency is &quot;fixed&quot; for a given interface but it varies from one interface to another, and it's the same for all UR models, only difference is that faster interfaces for e-series run at 500 Hz while for CB3 robots they run at 125Hz.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://s3-eu-west-1.amazonaws.com/ur-support-site/16496/Client_Interface_V3.12andV5.6.xlsx&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://s3-eu-west-1.amazonaws.com/ur-support-site/16496/Client_Interface_V3.12andV5.6.xlsx&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That file details the contents of the messages sent by the robot (I didn't find that for version 1.8).  (If this link breaks, I got it from the first link).&lt;/p&gt;&#xA;" OwnerUserId="24753" LastEditorUserId="24753" LastEditDate="2020-03-30T16:14:28.857" LastActivityDate="2020-03-30T16:14:28.857" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20386" PostTypeId="1" CreationDate="2020-03-31T07:26:39.067" Score="1" ViewCount="32" Body="&lt;p&gt;I am trying to have my robot arm follow a trajectory while avoiding collisions between obstacles and the robot links. The way I go about it is to find the closest point on the robot arm, and treat the links leading up to this point as a separate robot. Then for this separate robot I find joint velocities that make the robot move straight away from the obstacle. Lastly I project these joint velocities onto the nullspace of the complete robot's Jacobian &lt;span class=&quot;math-container&quot;&gt;$J$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This works well most of the times, but sometimes I experience that the jacobian for the separate robot &lt;span class=&quot;math-container&quot;&gt;$J_0$&lt;/span&gt; becomes ill conditioned - and produces huge joint velocities. This usually happens when the closest point sits on one of the first links, then the separate robot is often close to a singularity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am trying to improve the condition number of &lt;span class=&quot;math-container&quot;&gt;$J_0$&lt;/span&gt; by using the &quot;damped jacobian&quot; &lt;span class=&quot;math-container&quot;&gt;$$J_0 = (J_0 + \lambda I)$$&lt;/span&gt;&#xA;However unless the closest point on the robot sits on the sixth link &lt;span class=&quot;math-container&quot;&gt;$J_0$&lt;/span&gt; will not be square and you cannot add the identity matrix in this case. I guess there are ways to damp these subjacobians, but I am unsure how.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In essence I am looking for a way to condition variable sized jacobians. Or some alternative which makes the robot play nice close to singularities.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;An example of where it goes wrong, can be seen in the image below. The robot is following the blue dashed trajectory, while trying to avoid the brown rod. In this specific case the purple vector indicates the closest point on obstacle and link at one timestep. In the next timestep the closest link has changed (orange arrow). The jacobian for the manipulator leading up to the tip of the orange arrow has a condition number of 170 - compared to the condition number of the one leading up to the purple arrow tip, which is only 3. &#xA;&lt;a href=&quot;https://i.stack.imgur.com/wv9O3.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wv9O3.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For reference. This is the resolved rate motion scheme I am using:&#xA;&lt;span class=&quot;math-container&quot;&gt;\begin{align}&#xA; &amp;amp;\dot q_0 = J_0^+(q) \dot x_0 \\&#xA; &amp;amp;\dot q = J^+(q) \dot x + NN^+\dot q_0 \\&#xA;&amp;amp;q = q + \dot q \cdot dt&#xA;\end{align}&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\dot x_0$&lt;/span&gt; is the desired velocity of the endpoint of the separate robot&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\dot x$&lt;/span&gt; is the desired velocity of the end point for the full robot&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$A^+$&lt;/span&gt; is the pseudo inverse of A.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$N$&lt;/span&gt; is the nullspace of &lt;span class=&quot;math-container&quot;&gt;$J$&lt;/span&gt;&lt;/p&gt;&#xA;" OwnerUserId="24592" LastActivityDate="2020-03-31T07:26:39.067" Title="Link collision avoidance for redundant manipulator" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;motion-planning&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20387" PostTypeId="2" ParentId="20373" CreationDate="2020-03-31T15:32:47.793" Score="0" Body="&lt;p&gt;My understanding is that most people don't use the raw RRT solution directly.  First they smooth it.  A google search will yield many papers on this.  For example: &lt;a href=&quot;http://www.joace.org/uploadfile/2015/0408/20150408113835359.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Improved Path-Finding Algorithm for Robot Soccers&lt;/a&gt; by Rahib H. Abiyev, Nurullah Akkaya, Ersin Aytac, Irfan Günsel, and Ahmet Çağman.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The smoothed trajectory will necessarily be different than the RRT path and will therefore have a possibility of collision.  So you will have to check for that and possibly adjust the smoothing parameters iteratively.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can also use a more modern motion planner.  &lt;a href=&quot;http://wiki.ros.org/chomp_motion_planner&quot; rel=&quot;nofollow noreferrer&quot;&gt;CHOMP&lt;/a&gt; is a popular one.  Original paper: &lt;a href=&quot;https://www.ri.cmu.edu/pub_files/2013/5/CHOMP_IJRR.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;CHOMP: Covariant Hamiltonian Optimization for Motion Planning&lt;/a&gt; by Matt Zucker, Nathan Ratliff, Anca D. Dragan, Mihail Pivtoraiko, Matthew Klingensmith, Christopher M. Dellin, J. Andrew Bagnell, Siddhartha S. Srinivasa.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another idea is to use a completely different approach.  &lt;a href=&quot;http://rll.berkeley.edu/trajopt/doc/sphinx_build/html/&quot; rel=&quot;nofollow noreferrer&quot;&gt;TrajOpt&lt;/a&gt; is an optimization based approach and produces smooth trajectories without a secondary smoothing step.  Paper here: &lt;a href=&quot;http://rll.berkeley.edu/trajopt/ijrr/2013-IJRR-TRAJOPT.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Motion Planning with Sequential ConvexOptimization and Convex Collision Checking&lt;/a&gt; by John Schulman, Yan Duan, Jonathan Ho, Alex Lee, Ibrahim Awwal, Henry Bradlow, Jia Pan, Sachin Patil, Ken Goldberg, Pieter Abbeel. &lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2020-03-31T15:32:47.793" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20388" PostTypeId="2" ParentId="20373" CreationDate="2020-04-01T00:09:32.700" Score="0" Body="&lt;p&gt;You can apply rrt using a selection of smooth movements, basically you discritize the possible actions making sure you always connect paths in a way which is smooth. It increases the dimensionality of your problem by quite a bit though, so idk.&lt;/p&gt;&#xA;" OwnerUserId="21514" LastActivityDate="2020-04-01T00:09:32.700" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20389" PostTypeId="1" CreationDate="2020-04-01T00:40:55.547" Score="4" ViewCount="264" Body="&lt;p&gt;I have the pose at times t - 1 and time t. &#xA;We are given: that the the new pose, at time t, is &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$x_{t - 1} = [0,0,pi/6]$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$x_{t} = [0.2,0.1,(11*pi)/60]$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Where the vectors are [x, y, theta] with respect to some world frame.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In my head, I have the two poses. I just need to calculate the difference of the two and that'll be odometry, right?&#xA;So, subtracting the two vectors: [0.2,0.1,(11*pi)/60] - [0,0,pi/6] = [.2, .1, pi/60]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, according to the answer checker that doesn't seem to be the right approach. Can someone suggest a strategy to go about this?&lt;/p&gt;&#xA;" OwnerUserId="26030" LastEditorUserId="1906" LastEditDate="2020-04-01T17:35:45.190" LastActivityDate="2020-04-02T07:22:22.063" Title="How can I calculate odometry given two poses?" Tags="&lt;odometry&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="20390" PostTypeId="1" CreationDate="2020-04-01T07:17:31.900" Score="1" ViewCount="83" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/7CdPr.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7CdPr.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There is a rotating base joint #1 with z/joint axis pointing up and atop sits and arm with 3 z/joint axis facing away from the viewer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The elbow joint F2 has a kink before it of 90 degrees measuring 25.4mm &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The upper arm length between joint F1 and F2 is not as the diagram says 163.2 but actually 137.8&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is am I using twist offset and length parameters correctly? Because I can't seem to orient the input parameters to reflect the arms various extensions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I calculate using simple addition that the maximum length upward should be about 500 upward, or horizontally the reach is about 400 and the height is less the 100&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This question is a request am I plugging the numbers in correctly?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I model the green section as a angled joint that protrudes at 10.4 degrees from the base at a length of 140.1mm that helps&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/YKKOv.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/YKKOv.png&quot; alt=&quot;DH Params&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="26033" LastEditorUserId="26033" LastEditDate="2020-04-02T20:03:00.313" LastActivityDate="2021-04-28T15:08:05.793" Title="Verifying DH parameters. Unexpected Output" Tags="&lt;robotic-arm&gt;&lt;forward-kinematics&gt;&lt;dh-parameters&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20391" PostTypeId="2" ParentId="20346" CreationDate="2020-04-01T07:43:26.373" Score="2" Body="&lt;p&gt;As for as I am understanding your question, you are asking about open source physics engines for simulation, So here's a short list: &lt;br/&gt;&#xA;1. Box2D,&lt;br/&gt;&#xA;2. Bullet Physics,&lt;br/&gt;&#xA;3. Chipmunk,&lt;br/&gt;&#xA;4. Chrono::Engine,&lt;br/&gt;&#xA;5. DynaMo,&lt;br/&gt;&#xA;6. Moby (Physsim),&lt;br/&gt;&#xA;7. Newton Game Dynamics,&lt;br/&gt;&#xA;8. Open Dynamics Engine,&lt;br/&gt;&#xA;9. Open Physics Abstraction Layer,&lt;br/&gt;&#xA;10. OpenTissue.&lt;/p&gt;&#xA;" OwnerUserId="24894" LastActivityDate="2020-04-01T07:43:26.373" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20392" PostTypeId="2" ParentId="20389" CreationDate="2020-04-01T09:16:34.507" Score="2" Body="&lt;p&gt;Those POSEs are not 3D vectors or a 3D coordinate point. As such you can't subtract.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A pose is a state vector, and the last value is an angle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From this, how can you calculate odometry?&lt;/p&gt;&#xA;" OwnerUserId="26035" LastEditorUserId="1906" LastEditDate="2020-04-01T18:15:47.463" LastActivityDate="2020-04-01T18:15:47.463" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20393" PostTypeId="2" ParentId="20389" CreationDate="2020-04-01T09:27:56.527" Score="1" Body="&lt;p&gt;Assume you are in a 2D grid. &lt;br/&gt;&#xA;At time x(t-1), we have the first pose as p_1 = [x_1, y_1, theta_1] and &lt;br/&gt;&#xA;at time x(t), we have the second pose as p_2 = [x_2, y_2, theta_2]. &lt;br/&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The distance traveled could be calculated using the &lt;a href=&quot;https://en.wikipedia.org/wiki/Euclidean_distance&quot; rel=&quot;nofollow noreferrer&quot;&gt;Euclidean distance&lt;/a&gt; formula as in your case would be:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Distance = Sqrt[(0.2-0)^2 + (0.1-0)^2] = 0.2236.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And the angle traversed would be the difference between theta_2 and theta_1, so we have theta = Pi/60.&lt;/p&gt;&#xA;" OwnerUserId="24894" LastEditorUserId="1906" LastEditDate="2020-04-02T07:22:22.063" LastActivityDate="2020-04-02T07:22:22.063" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20395" PostTypeId="1" CreationDate="2020-04-01T12:28:41.670" Score="0" ViewCount="346" Body="&lt;p&gt;I am trying to fuse IMU and encoder using extended Kalman sensor fusion technique. how do I fuse IMU pitch, roll with the orientation data I obtained from the encoder. Also, how do I use my position x and Y I got from the encoder which is the only position data i have because integrating IMu acceleration to obtained position is almost impossible due to errors. &#xA;I guess my state are position x, y, pitch, roll and control input are velocity of the right and left wheel.&lt;/p&gt;&#xA;" OwnerUserId="24918" LastEditorUserId="4310" LastEditDate="2020-04-11T16:43:52.747" LastActivityDate="2020-04-11T16:43:52.747" Title="Extended Kalman filtering for IMU and Encoder" Tags="&lt;mobile-robot&gt;&lt;arduino&gt;&lt;imu&gt;&lt;differential-drive&gt;&lt;quadrature-encoder&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20396" PostTypeId="2" ParentId="20132" CreationDate="2020-04-01T12:35:18.837" Score="0" Body="&lt;p&gt;I am doing this project right now but it will be more appropriate to use two Arduinos for the number of different sensors you are mentioned. &lt;/p&gt;&#xA;" OwnerUserId="24918" LastActivityDate="2020-04-01T12:35:18.837" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20397" PostTypeId="2" ParentId="20390" CreationDate="2020-04-01T12:42:31.463" Score="1" Body="&lt;p&gt;Started this as a comment, but moved it here to an answer because (1) it's much longer than a typical comment and (2) hopefully it's got some helpful hints in here to get you started.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Welcome to &lt;em&gt;Robotics&lt;/em&gt;, Ddefin Orsstt. I think it would be helpful if you could label your frames and explain why you're choosing the particular values on your table. Typically I've seen z- or y-axes as the &quot;up&quot; axis, but you're stating that the &lt;code&gt;maximum length should be X 503.12, Y 0, Z close to 0&lt;/code&gt;. The only way I get 503.12 is if the arm is straight up, which again I would expect to be y- or z-value readings. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The maximum z-value (if z is up) I could calculate would be the F0 to F1 offset (J1) of 101.32 mm, plus the &quot;crook&quot; just before the joint 3 at F3 of 25.4; this give (101.32 + 25.4) = 126.72. My issue with looking at it from this point of view is that then the maximum x/horizontal reach is not the 503.12 anymore, but the &quot;upper arm&quot; length of 137.8, the &quot;forearm&quot; length 163.2, and the end effector length 100.8, or (137.8 + 163.2 + 100.8) = 401.8. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's also not clear to me what you're using in a particular transform; you should consider including the joint angles in your DH parameter table. I would expect a zero-length transform between an F0 frame (&quot;world origin&quot;) and F1, where the output of joint 1 is located, if joint 1's output is coincident with your world origin. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Right now, it's looking like you've got 6 joints, by your DH table, but I'm only counting 4 (or 5?) in your picture:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Joint 1, at the bottom,&lt;/li&gt;&#xA;&lt;li&gt;Joint 2, 101.32 up from Joint 1,&lt;/li&gt;&#xA;&lt;li&gt;Joint 3, 137.8 (shown as 163.2) up &lt;strong&gt;AND&lt;/strong&gt; 25.4 over from Joint 2,&lt;/li&gt;&#xA;&lt;li&gt;Joint 4, 163.2 over from Joint 3.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;After joint 4, you have two dimensions: 50.8, to something (can't tell if it's a joint or not), and 100.8, to the tip of the end effector. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The DH parameters should define one actuator relative to the previous actuator in the arm/chain. You've got joint 3 split out as &lt;strong&gt;two&lt;/strong&gt; actuators in your DH table, which is incorrect, and it looks like maybe you've got something at the end of your DH table to (I'm guessing) correct the orientation of the end effector? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Start with a simple drawing of your arm. Put an &quot;F0&quot; where the base of this would be screwed to a table, then start putting new frames (F1, F2, ..., etc.) at the output of each &lt;em&gt;actuator&lt;/em&gt;. Put a frame at the end effector in whatever orientation you want to use for that end effector. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This should be your starting point for making your DH parameters. Try making this drawing and, if you're still having trouble, please &lt;em&gt;edit your question&lt;/em&gt; to post that drawing here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;:EDIT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=rA9tm0gTln8&quot; rel=&quot;nofollow noreferrer&quot;&gt;This is the video I always refer people to when asking about DH Parameters&lt;/a&gt;. Going through the video and referring to your diagram, if the joints at F1, F2, and F3 are all oriented in the same direction, then your &lt;span class=&quot;math-container&quot;&gt;$d$&lt;/span&gt; vector, the vector of distances along the previous joint's z-axis, is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;d = \left[\begin{matrix}&#xA;101.32 \\&#xA;0 \\&#xA;0 \\&#xA;0 \\&#xA;\end{matrix}\right]&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;... but, as you continue to follow along with the video, you can see that the rest of the parameters depend on your frame definitions, especially the base. This is where it becomes really important to have a drawing that shows what your robot arm looks like when all the joints are set to zero.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Generally speaking, though, it looks like all your numbers are probably correct, but you're not using the &quot;standard&quot; terms of &lt;span class=&quot;math-container&quot;&gt;$d, a, \alpha, \theta$&lt;/span&gt;, so I think it's possible that, especially if you're getting wrong numbers, you could be entering your values into the incorrect vectors in a DH solver (i.e., swapping &lt;span class=&quot;math-container&quot;&gt;$d$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$a$&lt;/span&gt; and/or swapping &lt;span class=&quot;math-container&quot;&gt;$\alpha$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt;). Also, your polarities could be wrong. I personally try to define everything as right-handed. Right-handed rotations can be visualized by putting the thumb of your right hand along the z-axis of a joint; the fingers of your right hand then naturally curl in the direction of positive rotation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You're still asking if you've plugged the numbers in correctly, but I don't know what you're plugging them into and there's no update on what your software/algorithm is expecting or outputting. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2020-04-03T12:55:42.787" LastActivityDate="2020-04-03T12:55:42.787" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="20398" PostTypeId="1" CreationDate="2020-04-02T19:42:34.660" Score="1" ViewCount="80" Body="&lt;p&gt;Many global-control applications of robotics involve incomplete world information and at best can be represented as a POMDP.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given this, can we really apply RL to most robotics applications? From what I have seen RL almost always needs full state information to work even remotely well. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What areas of robotics do you have sufficient state information to use RL in? I have my doubts on its tractability for global planning so what subproblems work for RL and how can they be integrated into a global planning framework?  &lt;/p&gt;&#xA;" OwnerUserId="21514" LastActivityDate="2020-04-07T18:35:00.657" Title="Applications of Reinforcement Learning" Tags="&lt;mobile-robot&gt;&lt;motion-planning&gt;&lt;path-planning&gt;&lt;planning&gt;&lt;reinforcement-learning&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20399" PostTypeId="2" ParentId="8350" CreationDate="2020-04-02T21:07:59.143" Score="0" Body="&lt;p&gt;I am answering an old question, but Staubli does make a SCARA arm with the vertical joint over the base. It was called the TS20. &lt;a href=&quot;https://www.staubli.com/en-us/robotics/product-range/industrial-robots/4-axis-scara-robots/ts20/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.staubli.com/en-us/robotics/product-range/industrial-robots/4-axis-scara-robots/ts20/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="26046" LastActivityDate="2020-04-02T21:07:59.143" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20400" PostTypeId="1" CreationDate="2020-04-03T07:53:57.957" Score="0" ViewCount="25" Body="&lt;p&gt;I'm trying to implement a drone in vertical descend. As for maximum simplification, I maintain all its angles to 0, and just try to get to the my desired descend. However, when I debug, I see that my z_acel variable changes value when it comes to the velocity integration. And obviously cant reach to my desired height, which is 10cm below. Anyone can help?&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;import numpy as np&#xA;import math&#xA;import matplotlib.pyplot as plt&#xA;&#xA;from mpmath import *&#xA;&#xA;&#xA;#***DRONES****&#xA;&#xA;#Dynamic parameters&#xA;L=25 &#xA;b = 1e-5 &#xA;I = np.diag([5e-7, 5e-7, 10e-7]) &#xA;k=3e-5&#xA;m=0.5&#xA;kd=0.25&#xA;#PID Values&#xA;Kp, Ki, Kd = 4.05, 0, 20.64 &#xA;g=9.80&#xA;dt=0.1&#xA;&#xA;#variables inicialization&#xA;N=500&#xA;phi_acel= angulotheta_acel= psi_acel= [0] * N&#xA;phi_vel= angulotheta_vel= psi_vel= [0]*N&#xA;phi = angulotheta = psi = [0]*N&#xA;z= z_vel= z_acel= [0]*N&#xA;Torque=inputs=[0]*4&#xA;&#xA;height_objective=-10 #reach from 0 to -10cm height.&#xA;&#xA;for i in range(2,N):&#xA;&#xA;   #HEIGHT CONTROLLER&#xA;   err_height=height_objective-z[i-1]&#xA;&#xA;   Torque[0]=err_height*Kp + err_height*Ki*dt - (z_vel[i-1]-z_vel[i-2])*Kd*dt + (m*g)/(math.cos(phi[i-1])*math.cos(angulotheta[i-1])) &#xA;   if Torque[0]&amp;gt;20:&#xA;       Torque[0]=20&#xA;   elif Torque[0]&amp;lt;0:&#xA;       Torque[0]=0&#xA;&#xA;&#xA;   z_acel[i]= -g + (math.cos(angulotheta[i-1])*math.cos(phi[i-1]))*Torque[0]/m  #with all the angles zero, z_acel[i] should be -g = -9.8&#xA;&#xA;   z_vel[i]= z_vel[i-1] + z_acel[i]/2*dt   #however, in this step, the z_acel[i] changes the value&#xA;&#xA;   z[i]= z[i-1] + z_vel[i]/2*dt&#xA;&#xA;   plt.plot(i,z[i],'or')&#xA;   plt.pause(0.1)&#xA;plt.show() &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="10539" LastActivityDate="2020-12-29T09:07:20.743" Title="Numeric integration problem in a quadrotor vertical descend code" Tags="&lt;control&gt;&lt;quadcopter&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20401" PostTypeId="2" ParentId="19290" CreationDate="2020-04-03T08:52:46.690" Score="3" Body="&lt;p&gt;I totally agree that the documentation is poor and it took me quite some time to understand what is going on. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I recorded a rosbag for &quot;velodyne_points&quot; topic using a Velodyne VLP-16. The recorded message is PointCloud2 type. Since the recorded file was really large it gave me a lot of trouble even when only trying to take a look at it(initially I had it converted to .csv and used -010 Editor- to read but csv format turned out useless for me).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What worked was that when I converted this bag file to .pcd format. Take a look at this link for that: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://answers.ros.org/question/235063/bag-file-to-pcd-files/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://answers.ros.org/question/235063/bag-file-to-pcd-files/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then I took a look at one of the .pcd files and used the info in the following link to understand what is in it:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;http://pointclouds.org/documentation/tutorials/pcd_file_format.php#pcd-file-format&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://pointclouds.org/documentation/tutorials/pcd_file_format.php#pcd-file-format&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After these steps I understood what the PointCloud2 message is about...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the incoming data in that array you asked about is a 1-D array. That is the reason the height is 1. It is called an unordered or unorganized point cloud data. The ring field tells which one of the 16 lasers in VLP-16 is used (though it is different than the laser numbers in the hardware manual), for your case it should be between 0-63.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The datatype tells whether the fields are float, uint16, int8 etc. After taking a look at the .pcd file I understand that the x,y,z,intensity fields are 4 bytes representation of a floating point number (little endian in your message). The ring value is a uint16(unsigned short). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The count is how many of that datatype is there. So you have 4 byte long 1 x, 4 byte long 1 y, 4 byte long 1 z, 4 byte long 1 intensity and 2 byte long 1 ring fields.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Offset tells at which byte the related field starts. For example offset x is 0 so x is 235 171 54 190 in little endian. Then y starts at 4, which is 53 107...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is the header of my .pcd file:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;.PCD v0.7 - Point Cloud Data file format&lt;/p&gt;&#xA;&#xA;&lt;p&gt;VERSION 0.7&lt;/p&gt;&#xA;&#xA;&lt;p&gt;FIELDS x y z _ intensity ring _&lt;/p&gt;&#xA;&#xA;&lt;p&gt;SIZE 4 4 4 1 4 2 1&lt;/p&gt;&#xA;&#xA;&lt;p&gt;TYPE F F F U F U U&lt;/p&gt;&#xA;&#xA;&lt;p&gt;COUNT 1 1 1 4 1 1 10&lt;/p&gt;&#xA;&#xA;&lt;p&gt;WIDTH 26326&lt;/p&gt;&#xA;&#xA;&lt;p&gt;HEIGHT 1&lt;/p&gt;&#xA;&#xA;&lt;p&gt;VIEWPOINT 0 0 0 1 0 0 0&lt;/p&gt;&#xA;&#xA;&lt;p&gt;POINTS 26326&lt;/p&gt;&#xA;&#xA;&lt;p&gt;DATA binary&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It tells that there are empty bytes after z and ring fields. After z field there are 4 empty bytes (that is why intensity has an offset of 16, not 12), and after ring there are 10 empty bytes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;point_step is the length of a point in bytes says the PointCloud2 document. It is as follows:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;4 bytes (x) + 4 (y) + 4 (z) + 4 (empty) + 4 (intensity) + 2 (ring) + 10 (empty) = 32&lt;/p&gt;&#xA;&#xA;&lt;p&gt;row_step is the length of a row in bytes, which is 66811 points (width) * 32 bytes = 2137952&lt;/p&gt;&#xA;" OwnerUserId="22128" LastActivityDate="2020-04-03T08:52:46.690" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20402" PostTypeId="2" ParentId="20400" CreationDate="2020-04-03T09:00:00.367" Score="1" Body="&lt;p&gt;Ok, i got the answer. When I inicialize the variables, I wrote &lt;span class=&quot;math-container&quot;&gt;$z= z_v= z_a= [0]*N, $&lt;/span&gt;, even I thought it had no more influence in the code, it has. As it is written now the code, the value of z_vel is the new value for z_acel in every iteration.&lt;/p&gt;&#xA;" OwnerUserId="10539" LastActivityDate="2020-04-03T09:00:00.367" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20403" PostTypeId="1" CreationDate="2020-04-03T12:15:24.093" Score="0" ViewCount="43" Body="&lt;p&gt;How can we collect the flight data after a ROS simulation and what kind of dataset do we obtain? Can we get the sensor and video dataset with timestamps to be used in analysis?&lt;/p&gt;&#xA;" OwnerUserId="26049" LastActivityDate="2020-05-08T20:02:45.230" Title="Data collected from ROS" Tags="&lt;ros&gt;&lt;gyroscope&gt;&lt;simulation&gt;&lt;accelerometer&gt;&lt;lidar&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20405" PostTypeId="1" AcceptedAnswerId="20406" CreationDate="2020-04-03T17:41:09.773" Score="0" ViewCount="52" Body="&lt;p&gt;I tried to solve below question by Edx course. One part of the requirement was to assign frames and find the DH parameters of the given robot manipulator. I assigned the x and z axis as below and find the DH parameters like that:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/nwWoM.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/nwWoM.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/QG95j.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QG95j.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think I assigned axis correctly. Especially X2, because this one that make the problem. X2 can be both like in the picture and also upward, because in both of them it is perpendicular to both Z2 and Z1. However, when I did like that the answer became wrong. However, when I took the X2 as upward, the  answer became correct. It is interesting for me, why X2 has to be upward while it also can be like in the picture I showed? Thank you very much :)&lt;/p&gt;&#xA;" OwnerUserId="24958" LastActivityDate="2020-04-04T08:21:17.230" Title="What is wrong with the assignment of X axis in 5DOF robot manipulator's kinematic diagram?" Tags="&lt;robotic-arm&gt;&lt;dh-parameters&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20406" PostTypeId="2" ParentId="20405" CreationDate="2020-04-04T08:21:17.230" Score="0" Body="&lt;p&gt;When assigning the &lt;span class=&quot;math-container&quot;&gt;$x_i$&lt;/span&gt; axis, it doesn't just have to be perpendicular to &lt;span class=&quot;math-container&quot;&gt;$z_i$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$z_{i-1}$&lt;/span&gt;, it should be along their &lt;strong&gt;common normal&lt;/strong&gt; (and pointing from &lt;span class=&quot;math-container&quot;&gt;$z_i$&lt;/span&gt; to &lt;span class=&quot;math-container&quot;&gt;$z_{i-1}$&lt;/span&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the case of &lt;span class=&quot;math-container&quot;&gt;$x_2$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$z_2$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$z_1$&lt;/span&gt; do not have a unique common normal since they are parallel so the exact placement of the origin of frame 2 and the &lt;span class=&quot;math-container&quot;&gt;$x_2$&lt;/span&gt; axis is not fixed - imagine a vertical line that intersects &lt;span class=&quot;math-container&quot;&gt;$z_2$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$z_1$&lt;/span&gt; but can move along the &lt;span class=&quot;math-container&quot;&gt;$z_2$&lt;/span&gt; (and &lt;span class=&quot;math-container&quot;&gt;$z_1$&lt;/span&gt;) axis a bit like a trombone (that's what it makes me think of anyway). You would normally want to put the origin in such a place to produce the most zeros in the DH table which is where you have it currently.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So &lt;span class=&quot;math-container&quot;&gt;$x_2$&lt;/span&gt; should indeed be pointing upwards to be consistent with the DH convention.&lt;/p&gt;&#xA;" OwnerUserId="15397" LastActivityDate="2020-04-04T08:21:17.230" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20407" PostTypeId="2" ParentId="19686" CreationDate="2020-04-04T08:43:20.683" Score="0" Body="&lt;p&gt;You do not state which topic you are looking at - this answer assumes that you are looking at the pointcloud topic published by the cloud node.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ROS message time of the pointclouds is not the host system time, but is taken from the lidar's internal clock (see batch_and_publish lambda in os1_cloud_node.cpp and trace back where scan_ts variable comes from).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The ROS message time of the packets is taken from the host system, so if these exhibit the problem you described then I would assume that your problem is indeed with the host time. If not, then your problem is with the lidar clock(s) which you probably want to sync with the host (or some other clock) e.g. via PTP - there are instructions in the software manual.&lt;/p&gt;&#xA;" OwnerUserId="15397" LastActivityDate="2020-04-04T08:43:20.683" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20408" PostTypeId="1" AcceptedAnswerId="20410" CreationDate="2020-04-04T14:01:31.983" Score="1" ViewCount="66" Body="&lt;p&gt;I thought this is a simple and well known problem and therefore there is a lot of literature. But I'm not able to find the correct keywords to google the answer. Maybe instead of answering the whole question you can already help me by telling me the correct keywords.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;My problem is the following:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a given parametrisation of a robot, for example the simple two dimensional &lt;span class=&quot;math-container&quot;&gt;$(\varphi,p_1,p_2)$&lt;/span&gt;, where &lt;span class=&quot;math-container&quot;&gt;$\varphi$&lt;/span&gt; describes the orientation and &lt;span class=&quot;math-container&quot;&gt;$p$&lt;/span&gt; the 2D position, I want to find a trajectory &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$c:[0,1]\rightarrow S^1\times R^2$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;from one given pose &lt;span class=&quot;math-container&quot;&gt;$(\varphi_0,(p_1)_0,(p_2)_0)$&lt;/span&gt; to another given pose &lt;span class=&quot;math-container&quot;&gt;$(\varphi_1,(p_1)_1,(p_2)_1)$&lt;/span&gt;. This trajectory should also be optimal with respect to an energy functional for example&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\int_0^1 \varphi^2+p^2_1+p^2_2 \;dt$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and I want two constraints to be fulfilled in order to make sure that the robot moves only forward. These constraints are:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\dot{p_1}=\cos(\varphi)$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\dot{p_2}=\sin(\varphi)$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With Euler-Langrange I get the ODE system:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\ddot{\varphi}=\varphi^2$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\ddot{p_1}=-sin(\varphi)\dot{p_1}$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\ddot{p_2}=cos(\varphi)\dot{p_2}$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now I'm wondering if this equation system is solvable with my boundary conditions.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;My questions are&lt;/strong&gt;&#xA;1) Are there any theorems that I can use to make statements about the existence of solutions? Whenever I tried to solve this ODE in Matlab the second boundary condition was not reached.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) Would it be easier to proof the existence if I would use another model for example with an orientation independent stearing wheel?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3) How can I solve this equation system?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;4) In literature I only found very complicated models with a lot more parameters or the paper was not about reaching a specific goal pose can you advise me more basic literature with approches similar to what I derived here?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;One step back to the onedimensional model&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My parameters are &lt;span class=&quot;math-container&quot;&gt;$(p,v)\in R^2$&lt;/span&gt;, where &lt;span class=&quot;math-container&quot;&gt;$p$&lt;/span&gt; indicates the onedimensional position and &lt;span class=&quot;math-container&quot;&gt;$v$&lt;/span&gt; the velocity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I used the energyfuctional &lt;span class=&quot;math-container&quot;&gt;$\int v^2 dt$&lt;/span&gt; and the constraint &lt;span class=&quot;math-container&quot;&gt;$\dot{p}=v$&lt;/span&gt;.&#xA;The resulting ODE system is&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\ddot{x}_1=\dot{v}$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\ddot{x}_2=0$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I didn't find a solution for the boundary values &lt;span class=&quot;math-container&quot;&gt;$(0,1)$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$(1,1)$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And a new question araised. Maybe I should not assume that I get a continuous solustion for all my model parameters?&lt;/p&gt;&#xA;" OwnerUserId="26062" LastEditorUserId="26062" LastEditDate="2020-04-06T11:12:51.780" LastActivityDate="2020-04-23T09:14:08.323" Title="motion model for forward movement" Tags="&lt;mobile-robot&gt;&lt;kinematics&gt;&lt;motion-planning&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="20410" PostTypeId="2" ParentId="20408" CreationDate="2020-04-06T12:38:43.567" Score="1" Body="&lt;p&gt;Let me start by saying I haven't done trajectory optimization or anything, but I've done quite a bit of differential equations for controls. I think your equations might not be solvable because of the way you've defined your constraint conditions:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{p}_1=\cos{\phi} \\&#xA;\dot{p}_2=\sin{\phi} \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want your heading/orientation to remain steady, how do you change the translational speeds? In your ODE system,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\ddot{\phi} = \phi^2&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What if your starting heading &lt;span class=&quot;math-container&quot;&gt;$\phi(0) = 0$&lt;/span&gt;? It would look like &lt;span class=&quot;math-container&quot;&gt;$\ddot{\phi}$&lt;/span&gt; is &quot;trapped&quot; to be always zero, and your translational accelerations are always stuck at &lt;span class=&quot;math-container&quot;&gt;$\ddot{p}_1=−\sin(0)\dot{p}_1 = 0$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\ddot{p}_2=\cos(0)\dot{p}_2 = \dot{p}_2$&lt;/span&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given your constraint conditions &lt;span class=&quot;math-container&quot;&gt;$\dot{p_1} = \cos(0) = 1$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\dot{p_2} = \sin(0) = 0$&lt;/span&gt;. The constraints and accelerations seem to match, but it's a trivial solution that doesn't get you anywhere; &lt;span class=&quot;math-container&quot;&gt;$\dot{p}_1$&lt;/span&gt; is a constant speed of &lt;span class=&quot;math-container&quot;&gt;$1$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\dot{p}_2$&lt;/span&gt; is a constant speed of &lt;span class=&quot;math-container&quot;&gt;$0$&lt;/span&gt;, so again it looks like you're not able to change speed (e.g., stop) and you're not able to change position at all on the &lt;span class=&quot;math-container&quot;&gt;$p_2$&lt;/span&gt; axis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;You haven't provided a diagram of your system,&lt;/em&gt; so I'm not sure why you have that &quot;forward motion&quot; is defined by the sine/cosine of the heading. If I had to guess, I would think maybe you're looking at a steered vehicle, but in that instance you'd have an extra term - the vehicle's linear speed - and this would be reflected in your constraints:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{p}_1 = \dot{x}\left(\cos{\phi}\right) \\&#xA;\dot{p}_2 = \dot{x}\left(\sin{\phi}\right) \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This might be what's missing from your equations that's precluding you from obtaining a solution. Again, I haven't done anything with trajectory optimization, but in looking around I found the following paper that might be of use:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;a href=&quot;http://cours-online.gdr-robotique.org/Rob-Motion_Laumond/Ch1-Rob-Motion_Laumond-Sekhavat-Lamiraux.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Guidelines in Nonholonomic Motion Planning for Mobile Robots&lt;/a&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;J.P. Laumond S. Sekhavat F. Lamiraux&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;This is the first chapter of the book:&#xA;  Robot Motion Planning and Control&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Jean-Paul Laumond (Editor)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You had asked too about terms to search, and I found this paper by looking for &quot;nonholonomic trajectory control.&quot; &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-04-06T12:38:43.567" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20411" PostTypeId="1" CreationDate="2020-04-06T16:47:24.940" Score="0" ViewCount="26" Body="&lt;p&gt;I am attempting to design a robotic camera head - however, I am struggling to calculate the torque (in terms of KGf.CM) I will require to rotate the Y (tilt) axis of the head.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The motor I intend to use is rated at 40KGf.cm at 30RPM - however, I do not know by how many centimetres I should divide the 40KG to determine my head capacity when factoring in the height of the camera and it's centre of mass. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To explain myself better, please see this image:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ywNXU.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ywNXU.jpg&quot; alt=&quot;Camera Head&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Considering the centre mass of the camera (let's say 10KG) exactly lines up with the motor, can I leave the the equation to stand at 1CM - or do I need to factor in the 10CM drop to the bottom of the camera basket? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many Thanks in advanced! &lt;/p&gt;&#xA;" OwnerUserId="26082" LastActivityDate="2020-05-07T13:02:35.377" Title="Understanding KGf.CM in Camera Robotic Head Design" Tags="&lt;robotic-arm&gt;&lt;motor&gt;&lt;torque&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20413" PostTypeId="1" CreationDate="2020-04-06T18:37:27.337" Score="2" ViewCount="82" Body="&lt;p&gt;&lt;strong&gt;Context:&lt;/strong&gt; I am working on a 20 cm x 20 cm indoor robot on a 2D terrain and I need to decide on its path planning algorithm. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Algorithms:&lt;/strong&gt; &lt;a href=&quot;http://theory.stanford.edu/~amitp/GameProgramming/AStarComparison.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;A*&lt;/a&gt; and &lt;a href=&quot;https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=3&amp;amp;ved=2ahUKEwiP8KfAtNToAhX6IzQIHbIvChwQFjACegQIDBAD&amp;amp;url=https%3A%2F%2Fjvgomez.github.io%2Ffiles%2Fpubs%2Ffm2star.pdf&amp;amp;usg=AOvVaw2vLGcsiVgA8iUXyT51UlNA&quot; rel=&quot;nofollow noreferrer&quot;&gt;Fast marching&lt;/a&gt; are two popular (and fundamentally different) approaches for path planning for UAVs in 2D terrain. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;A star advantages&lt;/em&gt;: A* is faster than fast marching because it runs linear in path length whereas fast marching runs linear in map size. Also it has variants which works with dynamic changes in maps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Fast marching advantages:&lt;/em&gt; Both algorithms discretize the 2D space. Fast marching approximates the geodesic distances better than A* (which suffers due to discretization) and hence its optimal results is closer reality than A*'s optimal results.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Question:&lt;/strong&gt; Is there any body of literature which compares these two algorithms conceptually and empirically? Are there any other awesome algorithms for 2D terrains?&lt;/p&gt;&#xA;" OwnerUserId="26031" LastActivityDate="2020-04-06T21:40:42.633" Title="Path finding: A* vs Fast marching" Tags="&lt;design&gt;&lt;path-planning&gt;&lt;reference-request&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20414" PostTypeId="1" CreationDate="2020-04-06T21:21:52.047" Score="1" ViewCount="16" Body="&lt;p&gt;Model Predictive Control (MPC) works by finding a set of controls &lt;span class=&quot;math-container&quot;&gt;$u_0, \dots, u_n$&lt;/span&gt; that minimize a cost function &lt;span class=&quot;math-container&quot;&gt;$J$&lt;/span&gt; over a time-horizon &lt;span class=&quot;math-container&quot;&gt;$[t, t + T]$&lt;/span&gt;. Typically when MPC is used on mobile robots, each control &lt;span class=&quot;math-container&quot;&gt;$u_k$&lt;/span&gt; is a vector of velocity commands that are applied for the duration &lt;span class=&quot;math-container&quot;&gt;$\delta$&lt;/span&gt; of a slice &lt;span class=&quot;math-container&quot;&gt;$[t + \delta k, t + \delta (k + 1))$&lt;/span&gt; of the time-horizon. The consequence is that for a given time-horizon size &lt;span class=&quot;math-container&quot;&gt;$T$&lt;/span&gt;, we need to optimize over &lt;span class=&quot;math-container&quot;&gt;$\lceil \frac{T}{\delta} \rceil$&lt;/span&gt; controls.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm looking into using MPC for path-following, and I had the idea of using &lt;span class=&quot;math-container&quot;&gt;$n$&lt;/span&gt;-degree polynomials to generate the components of &lt;span class=&quot;math-container&quot;&gt;$u_k$&lt;/span&gt;, then redefine &lt;span class=&quot;math-container&quot;&gt;$J$&lt;/span&gt; in terms of the polynomial coefficients. For example, in the case of a differential platform, use one polynomial &lt;span class=&quot;math-container&quot;&gt;$v(k) = v_t + a_1 k + a_2 k^2 \dots a_n k^n$&lt;/span&gt; to generate linear velocities, &lt;span class=&quot;math-container&quot;&gt;$w(k) = w_t + b_1 k + b_2 k^2 \dots b_n k^n$&lt;/span&gt; to generate angular velocities, and have the MPC optimize over &lt;span class=&quot;math-container&quot;&gt;$a_1, \dots, a_n, b_1, \dots, b_n$&lt;/span&gt;. That way we have &lt;span class=&quot;math-container&quot;&gt;$2n$&lt;/span&gt; independent variables regardless the values of &lt;span class=&quot;math-container&quot;&gt;$\delta$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$T$&lt;/span&gt;; additionally, &lt;span class=&quot;math-container&quot;&gt;$v(k)$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$w(k)$&lt;/span&gt; could easily be differentiated to provide optimization constraints over acceleration, jerk etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This seemed like a reasonable idea to me, so I was certain I would find it already covered in the literature. However almost all articles I've seen so far stick to the approach of defining one independent control set per time slice; the only exception is &lt;a href=&quot;https://scholar.google.com/scholar?q=Autonomous+Person+Pacing+and+Following+with+Model+Predictive+Equilibrium+Point+Control&quot; rel=&quot;nofollow noreferrer&quot;&gt;this one&lt;/a&gt;, which instead optimizes over the space of targets for a pure-pursuit-like control law.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Am I missing something? Is there an obvious reason this approach wouldn't work (or at least not be worth the trouble) that I'm overlooking? Is it documented somewhere and I just wasn't able to find any references?&lt;/p&gt;&#xA;" OwnerUserId="4310" LastActivityDate="2020-04-06T21:21:52.047" Title="Use polynomials to detach number of MPC controls from size of time-horizon?" Tags="&lt;mobile-robot&gt;&lt;control&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20415" PostTypeId="2" ParentId="20413" CreationDate="2020-04-06T21:40:42.633" Score="1" Body="&lt;p&gt;I'm not sure there's a body of literature exactly, but I was able to find at least one article comparing A* to FMM:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Chiang, Chia Hsun, et al. &quot;&lt;a href=&quot;https://scholar.google.com/scholar?q=A+comparative+study+of+implementing+Fast+Marching+Method+and+A*+SEARCH&quot; rel=&quot;nofollow noreferrer&quot;&gt;A comparative study of implementing Fast&#xA;  Marching Method and A* SEARCH for mobile robot path planning in grid&#xA;  environment: Effect of map resolution.&lt;/a&gt;&quot; 2007 IEEE Workshop on Advanced&#xA;  Robotics and Its Social Impacts. IEEE, 2007.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If there is a thread of articles on the subject, you can look for it by checking its references, as well as other articles that cite this one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As for other path planning algorithms, you may want to look into sampling-based motion planning. The &lt;a href=&quot;https://ompl.kavrakilab.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;OMPL&lt;/a&gt; project provides both a number of reference implementations and a nice &lt;a href=&quot;http://ompl.kavrakilab.org/OMPL_Primer.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;overview&lt;/a&gt; of the approach.&lt;/p&gt;&#xA;" OwnerUserId="4310" LastActivityDate="2020-04-06T21:40:42.633" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="20416" PostTypeId="2" ParentId="20403" CreationDate="2020-04-06T21:53:54.563" Score="2" Body="&lt;p&gt;As Ben noticed, you may want to elaborate on your question, but in general data collection in ROS is performed using tools from the &lt;a href=&quot;http://wiki.ros.org/rosbag&quot; rel=&quot;nofollow noreferrer&quot;&gt;rosbag&lt;/a&gt; package.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you'll find when you read the documentation, data (either from a simulation or the real world) can be recorded &lt;em&gt;during&lt;/em&gt; a session, but not after it has already finished.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Recorded data can be replayed or extracted for analysis on various ways. In particular I recommend you check the &lt;a href=&quot;http://wiki.ros.org/rosbag/Code%20API&quot; rel=&quot;nofollow noreferrer&quot;&gt;API&lt;/a&gt; for programmatic manipulation of rosbag files, it includes many useful features, such as recovering message record times (which is very convenient for messages that don't already include a timestamp field).&lt;/p&gt;&#xA;" OwnerUserId="4310" LastActivityDate="2020-04-06T21:53:54.563" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20417" PostTypeId="1" CreationDate="2020-04-07T10:19:33.127" Score="1" ViewCount="67" Body="&lt;p&gt;I am implementing a particle filter using MATLAB. I am implementing it first time. I have written the system model and measurement model. Given below:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;%% SYSTEM MODEL&#xA;noise1 = sd*randn(1, 1); v_init(i)= (normrnd(mean,sigma));&#xA;x_init(i)=(x_init(i-1)*noise1+v_init(i-1)); %p(x_k | x_(k-1))&#xA;%% MEASUREMENT MODEL&#xA;noise2 = var(wgn(10,1,1)); n_init(i) = (normrnd(mean,sigma));&#xA;y_init(i) = noise2*x_init(i)+ n_init(i);    %p(y_k | x_k)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;As far as I know, the prediction step involves the following equation:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ p\left ( x_{k} \right|D_{k-1} ) = \int p\left ( x_{k} \right | x_{k-1} )p\left (x_{k-1} \right|D_{k-1} ) dx_{k-1}&#xA; $$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I cannot understand, how do I implement it. Kindly guide me what should be my next step?&lt;/p&gt;&#xA;" OwnerUserId="24905" LastActivityDate="2021-05-02T17:07:35.657" Title="What should be the prediction step in particle filter?" Tags="&lt;matlab&gt;&lt;particle-filter&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20418" PostTypeId="2" ParentId="20411" CreationDate="2020-04-07T12:48:21.043" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;Considering the centre mass of the camera (let's say 10KG) exactly lines up with the motor, can I leave the the equation to stand at 1CM - or do I need to factor in the 10CM drop to the bottom of the camera basket?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I don't know what you mean by &quot;leav[ing] the equation to stand at 1 cm,&quot; because I'm not sure where the 1 cm is coming from. If the center of mass of the camera is in-line with the motor shaft, then there should be no static torque required to hold the camera in any particular position. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You'll still have to deal with the moment of inertia of the camera, which has more to do with mass &lt;em&gt;distribution&lt;/em&gt; than with the mass itself; the moment of inertia will determine how quickly you can change speeds (i.e., how long it takes to get from stopped to 30 rpm and back to stopped). &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-04-07T12:48:21.043" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20420" PostTypeId="2" ParentId="20417" CreationDate="2020-04-07T15:44:17.363" Score="0" Body="&lt;p&gt;The prediction step is to pass every particle's state [for e.g (x,y, theta)] through the system model that you have written as p(xk|xk-1). You have to update the state for each particle using this model. This comprises of the prediction step in the particle filter.&lt;/p&gt;&#xA;" OwnerUserId="20551" LastActivityDate="2020-04-07T15:44:17.363" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20421" PostTypeId="2" ParentId="20398" CreationDate="2020-04-07T18:28:10.803" Score="3" Body="&lt;p&gt;It's true that using RL in robotics involves many challenges, including the usually high dimensionality of problem spaces, the cost and limitations of real-world sessions, the impossibility or perfectly modelling the robot-environment system, and the complexity of reward functions that accurately reflect desired behaviors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, a number of approaches have been proposed to address these issues: reducing space dimensionality through discretization or abstraction, enhance learning models with domain information, provide prior knowledge through demonstration and clever use of simulations, and handle uncertainties through probabilistic techniques.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There have been in fact many successful RL experiments involving robot navigation (both ground and aerial) as well as manipulator control. I recommend you check the following articles for an overview and further references:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Kober, Jens, J. Andrew Bagnell, and Jan Peters. &quot;&lt;a href=&quot;https://sci-hub.tw/10.1177/0278364913495721&quot; rel=&quot;nofollow noreferrer&quot;&gt;Reinforcement learning in robotics: A survey.&lt;/a&gt;&quot; &lt;em&gt;The International Journal of Robotics Research&lt;/em&gt; 32.11 (2013): 1238-1274.&lt;/li&gt;&#xA;&lt;li&gt;Kormushev, Petar, Sylvain Calinon, and Darwin G. Caldwell. &quot;&lt;a href=&quot;https://www.mdpi.com/2218-6581/2/3/122/pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Reinforcement learning in robotics: Applications and real-world challenges.&lt;/a&gt;&quot; Robotics 2.3 (2013): 122-148.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="4310" LastEditorUserId="4310" LastEditDate="2020-04-07T18:35:00.657" LastActivityDate="2020-04-07T18:35:00.657" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20422" PostTypeId="1" CreationDate="2020-04-08T01:24:27.460" Score="1" ViewCount="38" Body="&lt;p&gt;I'm struggling to see how Integral gain is used for motor positioning (with an encoder on the shaft).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Suppose we have an AC motor connected to a winch which drives an object forwards and backwards. At 0 speed and 0 torque, there is no movement.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, using Proportional gain, we can drive the motor to a position and as it approaches the setpoint, the output to the motor decreases. The motor hopefully lands close to the setpoint.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If we use Integral gain, where the error accumulates, when we reach the setpoint the value of I is still high and the motor overshoots (even with very little ki). This wouldn't be a problem if the motor required a non-zero voltage to maintain its position (e.g. using the motor as a hoist).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A basic solution I've come up with is to use Integral gain to &quot;push&quot; the motor to its setpoint (effectively correcting the steady-state error), and when the motor is &quot;close enough&quot; to the setpoint, set the output to 0.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is this a commonly used method? Are there any other approaches?&lt;/p&gt;&#xA;" OwnerUserId="26093" LastActivityDate="2020-04-08T13:03:55.157" Title="Using Integral gain for motor positioning" Tags="&lt;control&gt;&lt;motor&gt;&lt;pid&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20423" PostTypeId="1" CreationDate="2020-04-08T04:42:15.920" Score="0" ViewCount="64" Body="&lt;p&gt;I am working on a wheel mobile robot with multiple sensors which are IMU, two encoders, four ultrasonic sensors, and using two Arduino: Uno and Mega. The IMU, encoders, and ultrasonic sensors are connected to Arduino Mega while the motor controller with every other sensor attached to the robot is connected to the Arduino-Uno. The Uno is attached to the robot by the manufacturer and nearly all the pins have been used or attached to a function on the robot.&#xA;To use I2C to communicate these two Arduinos I connect SDL to SDL, SDA to SDA, GND, and VCC. Do I need to connect two separate Arduino USB cables to the Arduino simultaneously? Also, do I need to attach these lines of code from each Arduino before I can further write the codes?  Attached below the slave and then the master code&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;// Include the required Wire library for I2C&amp;lt;br&amp;gt;&#xA;#include &amp;lt;Wire.h&amp;gt;&#xA;int LED = 13;&#xA;int x = 0;&#xA;void setup() {&#xA;  // Define the LED pin as Output&#xA;  pinMode (LED, OUTPUT);&#xA;  // Start the I2C Bus as Slave on address 9&#xA;  Wire.begin(8); &#xA;  // Attach a function to trigger when something is received.&#xA;  Wire.onReceive(receiveEvent);&#xA;}&#xA;void receiveEvent(int bytes) {&#xA;  x = Wire.read();    // read one character from the I2C&#xA;}&#xA;void loop() {&#xA;  //If value received is 0 blink LED for 200 ms&#xA;  if (x == 0) {&#xA;    digitalWrite(LED, HIGH);&#xA;    delay(200);&#xA;    digitalWrite(LED, LOW);&#xA;    delay(200);&#xA;  }&#xA;  //If value received is 3 blink LED for 400 ms&#xA;  if (x == 1) {&#xA;    digitalWrite(LED, HIGH);&#xA;    delay(400);&#xA;    digitalWrite(LED, LOW);&#xA;    delay(400);&#xA;  }&#xA;  if (x == 2){&#xA;    digitalWrite(LED,HIGH);&#xA;  }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;this is the master code&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;Wire.h&amp;gt;&#xA;&#xA;// Include the required Wire library for I2C&amp;lt;br&amp;gt;#include &#xA;&#xA;int x = 0;&#xA;void setup() {&#xA;  // Start the I2C Bus as Master&#xA;  Wire.begin(); &#xA;}&#xA;void loop() {&#xA;  Wire.beginTransmission(9); // transmit to device #9&#xA;  Wire.write(x);              // sends x &#xA;  Wire.endTransmission();    // stop transmitting&#xA;  Wire.beginTransmission(8);&#xA;  Wire.write(x);&#xA;  Wire.endTransmission();&#xA;  x++; // Increment x&#xA;  if (x &amp;gt; 3) x = 0; // `reset x once it gets 6&#xA;  delay(500);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="24918" LastEditorUserId="26747" LastEditDate="2021-05-05T17:18:55.173" LastActivityDate="2021-05-05T17:18:55.173" Title="I2C Arduino Connection" Tags="&lt;arduino&gt;&lt;imu&gt;&lt;two-wheeled&gt;&lt;quadrature-encoder&gt;&lt;i2c&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20425" PostTypeId="1" CreationDate="2020-04-08T12:59:29.867" Score="1" ViewCount="35" Body="&lt;p&gt;I am trying to control a 7 DOF robot (a Franka Panda). I use jacobian based control (resolved rate motion control) to generate a joint trajectory from a cartesian trajectory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My contraints for the motion are, that I need to follow a trajectory, and I need to avoid obstacles, self collision and joint limits. I know how to satisfy each constraint independently by projecting joint velocities that avoid onto the null space.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I do all at the same time - is that even possible? Should I switch between constraints based on some kind of urgency?&lt;/p&gt;&#xA;" OwnerUserId="24592" LastActivityDate="2020-09-05T20:00:30.050" Title="Self motion with multiple constraints" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;jacobian&gt;&lt;redundant-robots&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20426" PostTypeId="2" ParentId="20422" CreationDate="2020-04-08T13:03:55.157" Score="1" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;At 0 speed and 0 torque, there is no movement.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Correct, &lt;em&gt;but&lt;/em&gt;, consider what would happen if the winch was not perfectly level when it was installed. In that case, the object would pull on the winch, like a car trying to roll downhill if left in neutral. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If your winch were setup to only use a proportional gain, then the position would &quot;droop&quot; from the ideal/setpoint until such a position was reached that the object's torque matched the torque provided by the proportional controller's output.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;Even if your winch were perfectly level before installation, the system will have friction, and that friction will prevent a purely proportional controller from ever achieving the desired setpoint. At some point, the proportional gain simply won't result in enough torque to overcome the system friction and get to target. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could increase the proportional gain to push the system closer to target, but this is a &lt;em&gt;bad idea&lt;/em&gt; because it's going to make your system &lt;em&gt;way&lt;/em&gt; more sensitive to large steps in command position, to the point that you could drive your system unstable. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Besides stability issues, the integral term &lt;em&gt;automatically&lt;/em&gt; pushes the system for you - an integral term &quot;watches&quot; the error. If it &quot;looks&quot; at error and sees you're not in position, then it automatically pushes a little harder. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Once the integral term sees you're in position, it stops increasing the applied force.&lt;/em&gt; Whatever it &lt;em&gt;had&lt;/em&gt; been applying is retained, and this is what makes up for position droop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It &lt;strong&gt;is&lt;/strong&gt; possible for an integral term to send you into instability, but that would only happen if the integral gain were too large for your system &lt;strong&gt;and&lt;/strong&gt; &lt;em&gt;you can get the same instability from a strictly proportional controller if the proportional gain is too high.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you're struggling to tune the system, then I would refer you to the &lt;a href=&quot;https://en.wikipedia.org/wiki/Ziegler%E2%80%93Nichols_method&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ziegler-Nichols method&lt;/a&gt;. From that page,&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;This tuning rule is meant to give PID loops best disturbance rejection.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;It yields an aggressive gain and overshoot – some applications wish to instead minimize or eliminate overshoot, and for these this method is inappropriate. In this case, the equations from the row labelled 'no overshoot' can be used to compute appropriate controller gains.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If that's not quite what you're looking for, then I would highly recommend some form of model-based control, like a feed-forward controller. You can use both feed-forward and PID (and I have, to great success!)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Feed-forward control allows you to exploit your knowledge of the system to get better performance by being &lt;em&gt;proactive&lt;/em&gt;, rather than waiting for setpoint errors to appear as in a &lt;em&gt;reactive&lt;/em&gt; PID controller. For example, if you know you want to accelerate your 10 kg load at 1 m/s^2, then you already know the winch should output (10*1) = 10 N of force. You don't need to wait for the position errors to appear before applying that 10 N of force. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you're using feed-forward, you apply PID control to whatever error is left, and in this way your PID controller is only really making up for &lt;em&gt;modeling errors&lt;/em&gt;. The PID controller will make up for any friction you failed to account for, any errors in your load mass (e.g., if it's 9 kg instead of 10 kg), etc. Your PID controller is no longer doing the &quot;heavy lifting&quot; of getting the bulk positioning response, so it should be much less sensitive to large step changes. Since it's only performing a positioning error adjustment, you can tune the PID controller much more aggressively than if it were trying to also perform the bulk motion.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-04-08T13:03:55.157" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="20428" PostTypeId="2" ParentId="10050" CreationDate="2020-04-08T13:58:06.007" Score="0" Body="&lt;p&gt;Estimates the location of features in the environment&#xA;Estimates the position and orientation of the robot with respect to the environment&lt;/p&gt;&#xA;&#xA;&lt;p&gt;only these two &lt;/p&gt;&#xA;" OwnerUserId="26098" LastActivityDate="2020-04-08T13:58:06.007" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20429" PostTypeId="1" AcceptedAnswerId="20432" CreationDate="2020-04-08T15:09:45.323" Score="1" ViewCount="45" Body="&lt;p&gt;I am reading the following paper: &lt;a href=&quot;http://rpg.ifi.uzh.ch/docs/TRO16_Forster-SVO.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;SVO: Semi-Direct Visual Odometry for Monocular&#xA;and Multi-Camera Systems&#xA;&lt;/a&gt;, and I am having some problem understanding some concepts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before starting I have to say that I am new to visual odometry, so maybe some simple concepts are not clear to me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The chapter of the paper i cannot undesrtand is the one related to &lt;em&gt;relaxation and refinement&lt;/em&gt; at pag.4 of the paper. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For what I have understood here, the paper says that for perfoeming image alignment, instead of using an image from the enviroment, it is better to use an image from a frame, so a 2D image instead of a 3D image, and in particular it is used the oldest frame in which the image was first reconstructed, and it is done because the oldest frame minimizes the feature drift (I don't undestand why).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Moreover, it says that by doing this, there is the problem of having a reprojection error. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;After this, there is a more mathematical analysis, which is also really unclear to me.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that it is a lot to ask an explaination on a full chapter of a paper, but can somebody please help me?&lt;/p&gt;&#xA;" OwnerUserId="21797" LastActivityDate="2020-04-08T17:28:45.107" Title="Problem understanding a paper about visual odometry" Tags="&lt;mobile-robot&gt;&lt;odometry&gt;&lt;visual-odometry&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20430" PostTypeId="2" ParentId="20423" CreationDate="2020-04-08T15:31:32.943" Score="0" Body="&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;The code you provide is only to give you example on how 2 arduino communicate using I2C protocol. You will need to modify it so it can fully work as intended. You can modify it so Arduino Mega can send command to Arduino Uno and Arduino Uno can send sensor data to Arduino Mega&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;When using I2C communication, you need common ground, so connect both arduino ground.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Edit (March 9, 2020)&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;3&quot;&gt;&#xA;&lt;li&gt;Example on reading sensor, processing it and send. Case : Arduino mega will receive range from SRF, if obstacle still far away it will keep moving. If it too close, robot stop.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Master.ino&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;Wire.h&amp;gt;&#xA;const unsigned int TRIG_PIN=13;&#xA;const unsigned int ECHO_PIN=12;&#xA;int data;&#xA;byte buffer1, buffer2;&#xA;&#xA;void setup()&#xA;{&#xA;  Wire.begin(); // join i2c bus (address optional for master)&#xA;  //For SRF&#xA;  pinMode(TRIG_PIN, OUTPUT);&#xA;  pinMode(ECHO_PIN, INPUT);&#xA;}&#xA;&#xA;int readSRF()&#xA;{&#xA;  digitalWrite(TRIG_PIN, LOW);&#xA;  delayMicroseconds(2);&#xA;  digitalWrite(TRIG_PIN, HIGH);&#xA;  delayMicroseconds(10);&#xA;  digitalWrite(TRIG_PIN, LOW);&#xA;  const unsigned long duration= pulseIn(ECHO_PIN, HIGH);&#xA;  int distance= duration/29/2;&#xA;  if(duration==0)&#xA;  {&#xA;    return -1; // if pulse from srf not found&#xA;  } &#xA;  else&#xA;  {&#xA;    return distance;&#xA;  }&#xA;}&#xA;&#xA;void loop()&#xA;{&#xA;&#xA;  Wire.beginTransmission(4); // transmit to device #4&#xA;  //sending 2 byte, so u can have more resolution of data to send (if u want)&#xA;  int read = readSRF()&#xA;  if(read==-1)&#xA;  {&#xA;    send = 0; //Stop&#xA;  }&#xA;  else if(read&amp;lt;5)&#xA;  {&#xA;    send = 0; //Stop too&#xA;  }&#xA;  else&#xA;  {&#xA;    send = 2; // Move&#xA;  }&#xA;  buffer1 = send &amp;gt;&amp;gt; 8; //high order byte&#xA;  buffer2 = send;      //lower order byte&#xA;  Wire.write(buffer1);              // sends one byte&#xA;  Wire.write(buffer2);  &#xA;  Wire.endTransmission();    // stop transmitting&#xA;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Slave.ino&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;Wire.h&amp;gt;&#xA;&#xA;byte temp1, temp2;&#xA;int setpoint;&#xA;&#xA;void setup()&#xA;{&#xA;  Wire.begin(4); //Address of slave&#xA;  Wire.onReceive(receiveEvent); //point where the function that handle if data arrive to slave&#xA;}&#xA;&#xA;void loop()&#xA;{&#xA;  if(setpoint == 0)&#xA;  {&#xA;  //some code to stop motor&#xA;  }&#xA;  else if(setpoint ==2)&#xA;  {&#xA;  //some code to run motor&#xA;  }&#xA;}&#xA;&#xA;// function that executes whenever data is received from master&#xA;// this function is registered as an event, see setup()&#xA;void receiveEvent(int howMany)&#xA;{&#xA;  if(Wire.available() &amp;gt;= 2)&#xA;  {&#xA;    temp1 = Wire.read();&#xA;    temp2 = Wire.read();&#xA;    setpoint = ((unsigned int)temp1&amp;lt;&amp;lt;8)+temp2; //combining 2 bytes&#xA;  }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="22800" LastEditorUserId="22800" LastEditDate="2020-04-09T11:54:06.210" LastActivityDate="2020-04-09T11:54:06.210" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="20432" PostTypeId="2" ParentId="20429" CreationDate="2020-04-08T17:28:45.107" Score="3" Body="&lt;p&gt;So SVO works a bit differently then other VO systems as it uses dense image alignment. You need to understand this concept first before understanding SVO. Look up Lucas and Kanade image alignment. The best paper on this topic can be found &lt;a href=&quot;https://www.ri.cmu.edu/publications/lucas-kanade-20-years-on-a-unifying-framework/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. This is required understanding, so you can't skip it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Required Understanding:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Lucas and Kanade(LK)&lt;/li&gt;&#xA;&lt;li&gt;How Sparse VO works (&lt;a href=&quot;https://github.com/HKUST-Aerial-Robotics/VINS-Mono&quot; rel=&quot;nofollow noreferrer&quot;&gt;VINS MONO&lt;/a&gt; or &lt;a href=&quot;https://github.com/raulmur/ORB_SLAM2&quot; rel=&quot;nofollow noreferrer&quot;&gt;ORB-SLAM2&lt;/a&gt; are my recommendations)&lt;/li&gt;&#xA;&lt;li&gt;Bundle adjustment&lt;/li&gt;&#xA;&lt;li&gt;KLT tracking (&lt;a href=&quot;https://docs.opencv.org/4.3.0/db/d7f/tutorial_js_lucas_kanade.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;OpenCV's KLT tracker&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h3&gt;Oldest Frame&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The reason it uses the oldest frame is to eliminate the accumulation of errors. Imagine we have frames &lt;span class=&quot;math-container&quot;&gt;$F_1,F_2,F_3$&lt;/span&gt;. What VO does is estimate the transform &lt;span class=&quot;math-container&quot;&gt;$T_{ab}$&lt;/span&gt; between 2 frames. Here our goal is to estimate the position of &lt;span class=&quot;math-container&quot;&gt;$T_{3}$&lt;/span&gt;. So &lt;span class=&quot;math-container&quot;&gt;$T_3$&lt;/span&gt; is equal to &lt;span class=&quot;math-container&quot;&gt;$T_3=T_1*T_{12}*T_{23}$&lt;/span&gt;. Now notice here that we have estimate both &lt;span class=&quot;math-container&quot;&gt;$T_{12},T_{23}$&lt;/span&gt;. Every time we estimate we introduce error/drift into the system. Now what if instead we estimate &lt;span class=&quot;math-container&quot;&gt;$T_{1,3}$&lt;/span&gt; directly. There is 1 less transform we need to estimate so 1 less chance for error. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Lets take a more extreme example with &lt;span class=&quot;math-container&quot;&gt;$F_1,...,F_{10}$&lt;/span&gt;. Which one will have less error?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ T_{10}=T_{1}*T_{12}*T_{23}*T_{34}*....T_{9,10}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;or &#xA;&lt;span class=&quot;math-container&quot;&gt;$$ T_{10}=T_{1}*T_{1,10}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming it is possible to match &lt;span class=&quot;math-container&quot;&gt;$F_1$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$F_{10}$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;2D vs 3D Image&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Short answer:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3D dense image alignment does not work well when the images are far apart. So it switches to standard sparse VO and uses KLT tracking.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Longer answer:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It is possible to use the LK algorithm in multiple different ways depending on the warp. The way SVO uses it normally, and also how &lt;a href=&quot;https://vision.in.tum.de/research/vslam/lsdslam&quot; rel=&quot;nofollow noreferrer&quot;&gt;LSD-SLAM&lt;/a&gt; and &lt;a href=&quot;https://vision.in.tum.de/data/software/dvo&quot; rel=&quot;nofollow noreferrer&quot;&gt;DVO&lt;/a&gt; do it is through warping the 3D image with a 3D rigid body warp. A point we are warping is parameterized by &lt;span class=&quot;math-container&quot;&gt;$[u_{pixel},v_{pixel},d_{meters}]$&lt;/span&gt;(3D image). Now this formulation only works if the images are taken very close together. If they are too far apart then it switches to working like a Sparse VO system. It tracks the movement of the 2D keypoints in the image plane(KLT algorithm). Since we are tracking in the image plane we don't need the 3D information and can work only on the pixels. These 2D locations are then fed into the bundle adjustment algorithm.&lt;/p&gt;&#xA;" OwnerUserId="15265" LastActivityDate="2020-04-08T17:28:45.107" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20434" PostTypeId="1" AcceptedAnswerId="20436" CreationDate="2020-04-08T18:37:29.223" Score="0" ViewCount="39" Body="&lt;p&gt;From this page, there are lots of sensors to be used in ros robots.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://wiki.ros.org/Sensors&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://wiki.ros.org/Sensors&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;But, I could not install any of them to the robots in my simulations.&lt;/p&gt;&#xA;&lt;p&gt;For example, I want to install the camera:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ sudo apt-get install ros-kinetic-usb-cam&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I get the error:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Reading package lists... Done Building dependency tree Reading state information... Done E: Unable to locate package ros-kinetic-usb-cam&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;What is the most straightforward way to install any sensor or camera to a robot? What can be the reason of the error I am getting?&lt;/p&gt;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="26049" LastEditorUserId="19515" LastEditDate="2020-07-22T17:29:14.357" LastActivityDate="2020-07-22T17:29:14.357" Title="ROS sensor implementation" Tags="&lt;ros&gt;&lt;sensors&gt;&lt;simulation&gt;&lt;uav&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="20435" PostTypeId="2" ParentId="20425" CreationDate="2020-04-08T18:40:01.890" Score="1" Body="&lt;p&gt;The way this is usually solved is by the use of a planner and a controller. The planner generates a sequence of configurations (joint states in the case of a manipulator) that satisfy the desired constraints, and the controller generates the necessary velocities to move the arm across the target configurations. The idea is that the plan is detailed enough that transitioning from one state to the other can be trivially done.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are a number of packages that implement planning algorithms, I recommend looking into &lt;a href=&quot;https://moveit.ros.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;MoveIt&lt;/a&gt; if you're working with ROS.&lt;/p&gt;&#xA;" OwnerUserId="4310" LastActivityDate="2020-04-08T18:40:01.890" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20436" PostTypeId="2" ParentId="20434" CreationDate="2020-04-08T19:49:13.030" Score="1" Body="&lt;p&gt;This isn't a problem with sensor packages specifically, the error message says that a package by that name wasn't found, which is more of an issue with the package manager.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can use the following command to list all ROS Kinetic packages available in your package manager:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ apt-cache search ros-kinetic&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;To check whether a specific package is available, enter the full package name, for example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ apt-cache search ros-kinetic-usb-cam&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If the package is not available, nothing will be printed.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your case, since you're using a cloud environment that is exclusively geared towards simulation, probably no sensor packages will be available. That is not a problem, as you don't need them — the Gazebo simulator used in ROS includes plugins to simulate sensors and other hardware components. See &lt;a href=&quot;http://gazebosim.org/tutorials?tut=ros_gzplugins&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; for details.&lt;/p&gt;&#xA;" OwnerUserId="4310" LastActivityDate="2020-04-08T19:49:13.030" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20437" PostTypeId="1" AcceptedAnswerId="20443" CreationDate="2020-04-09T06:54:28.627" Score="2" ViewCount="242" Body="&lt;p&gt;I have been reading about hand eye calibration for a couple days. Basically, I have 2 setups I want to execute hand eye calibration.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Camera is fixed in a position and arm is moving (eye on base);&lt;/li&gt;&#xA;&lt;li&gt;Camera is fixed to the robot wrist (eye on hand).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I have read Tsai's paper and a lot of other documents and read some similar question posted here (&lt;a href=&quot;https://robotics.stackexchange.com/questions/7163/hand-eye-calibration&quot;&gt;Hand Eye Calibration&lt;/a&gt;)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also, have found some libraries that I can achieve this with ROS. &lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;easy_handeye: &lt;a href=&quot;https://github.com/IFL-CAMP/easy_handeye&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/IFL-CAMP/easy_handeye&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;handeye_calib_camodocal: &lt;a href=&quot;https://github.com/jhu-lcsr/handeye_calib_camodocal&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/jhu-lcsr/handeye_calib_camodocal&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I believe that both hand-eye setups I described before can be solved with formulation AX=XB (since easy_handeye solves this way). Furthermore, I believe that setup 2 (eye-on-hand) is the classic problem for AX=XB. However, I cannot understand how to model the problem in order to solve for setup 1 (eye-on-base). Also, I cannot understand the difference between AX=XB and AX=ZB (which sometimes is written as AX=YB).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a more theoretical question, but I like to understand the theory before start using any tool, otherwise I will have some technical debt that can generate problems in the future. If someone can explain to me or provide material to clarify these points, I will be very grateful.&lt;/p&gt;&#xA;" OwnerUserId="26102" LastEditorUserId="37" LastEditDate="2020-04-14T07:37:52.427" LastActivityDate="2020-04-14T07:37:52.427" Title="Understanding types of hand eye calibration" Tags="&lt;robotic-arm&gt;&lt;calibration&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20439" PostTypeId="1" CreationDate="2020-04-09T09:18:44.610" Score="0" ViewCount="19" Body="&lt;p&gt;I'm designing a mobile robot with tracks and skid-steering driving system and I am evaluating whether an electric motor would be better than a hydraulic one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I did some calculations, the total weight of the robot is 1200Kg, there are two rubebr tracks and their sprocket had a diameter of 0.3 meters. The maximum velocity should not exceed 0.5 m/s and I do not think the robot will have to face slopes greater than 20%.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I use the hydraulic system, I would go with:&#xA;- 1 x 12kW AC Motor, 48VAC, 2900 RPM&#xA;- 2 x Oleodynamic pumps 8.5 cc/rev, 120Bar working pressure&#xA;- 2 x OMP 250 hydraulic motors&#xA;- 1 x AC motor controller 300A&#xA;- 1 x proportional valve controller&#xA;- 2 x proportional hydraulic valves&#xA;- 1 x 19kW/h battery pack&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I use the electric solution, I would go with:&#xA;- 2 x 2500W AC Motor, 48VAC, 2200 RPM&#xA;- 2 x gearbox 1:35&#xA;- 2 x AC motor controllers 300A&#xA;- 1 x 19kW/h battery pack&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If my calculations are correct, the first solution should be easy to maintain while the second one should be easier to implement. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What can you suggest?&#xA;I usually would go with the second solution, but since it is a big machine, I would like to save some money and keep the system easy to check, maintain and control.&lt;/p&gt;&#xA;" OwnerUserId="10626" LastActivityDate="2020-04-10T03:26:53.463" Title="AC Motors vs Hydraulic motors for skid-steering robot" Tags="&lt;mobile-robot&gt;&lt;motor&gt;&lt;electronics&gt;&lt;tracks&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20440" PostTypeId="1" AcceptedAnswerId="20444" CreationDate="2020-04-09T13:11:00.500" Score="1" ViewCount="69" Body="&lt;p&gt;I'm building a small tracked robot. Currently it's just a Raspberry Pi, two motors and an L298N controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;The problem&lt;/strong&gt; I'm facing is that &lt;strong&gt;the motors are stalling at low voltages&lt;/strong&gt; (which is what I assume the control controls). So it's impossible to move the robot slowly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't have any kind of datasheet for the motors. I only know that the &quot;recommended voltage is 3 - 9V&quot; and they draw 300mA without load at 6V. They came as part of the kit I bought. The kit is no longer for sale, but here is an old sales page for it: &lt;a href=&quot;https://www.botnroll.com/en/robots-educational-kits/1158-iron-man-4-tracked-chassis-for-arduino.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.botnroll.com/en/robots-educational-kits/1158-iron-man-4-tracked-chassis-for-arduino.html&lt;/a&gt;&#xA;(note that this is not where I bought the robot and I don't know botnroll at all)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The motors are powered by a rechargeable 9V battery (Duracell NiMH 8.4V, 170mAh) which I had lying around and was the correct voltage. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The motors are controlled by a L298N module I got from AliExpress.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've been trying to learn a bit about how these DC motors work (&lt;a href=&quot;https://medium.com/luosrobotics/how-to-read-a-dc-motors-datasheet-f70fa440452b&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://medium.com/luosrobotics/how-to-read-a-dc-motors-datasheet-f70fa440452b&lt;/a&gt;) and it looks like they need the highest current when stalled. So just before the robot begins to move, the motors need more current than when it is moving.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This leads me to believe that the problem is most likely the battery. The battery is not able to deliver the required current to overcome the stall. I haven't been able to find the max current for the battery. This is the only datasheet I have found: &lt;a href=&quot;http://www.farnell.com/datasheets/2039764.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.farnell.com/datasheets/2039764.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before going on a shopping spree, I'd like to ask you guys these questions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Is this conclusion correct and is the problem the battery?&lt;/li&gt;&#xA;&lt;li&gt;If yes, what battery solution would you suggest?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Here are some images if you are interested:&#xA;&lt;a href=&quot;https://photos.app.goo.gl/vT24qVB1xPFqTVScA&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://photos.app.goo.gl/vT24qVB1xPFqTVScA&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="26106" LastActivityDate="2020-04-09T21:26:35.283" Title="DC motors are stalling at low voltage (L298N controller)" Tags="&lt;control&gt;&lt;motor&gt;&lt;battery&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20442" PostTypeId="2" ParentId="3021" CreationDate="2020-04-09T20:11:10.783" Score="0" Body="&lt;p&gt;The easiest way to connect multiple microphones to a Linux PC is probably to use USB mics. There are myriad brands appealing to all tastes and pocket sizes, check your favorite online marketplace for options.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://www.portaudio.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;PortAudio&lt;/a&gt; C++ library (and its Python wrapper, &lt;a href=&quot;http://people.csail.mit.edu/hubert/pyaudio/&quot; rel=&quot;nofollow noreferrer&quot;&gt;PyAudio&lt;/a&gt;) enable cross-platform access to multiple audio devices in either callback or blocking modes. Also see &lt;a href=&quot;https://github.com/voice-engine/make-a-smart-speaker&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; for a list of audio-processing libraries; specifically, the &lt;a href=&quot;https://github.com/introlab/odas&quot; rel=&quot;nofollow noreferrer&quot;&gt;Open embeddeD Audition System (ODAS)&lt;/a&gt; and &lt;a href=&quot;https://github.com/xiongyihui/tdoa&quot; rel=&quot;nofollow noreferrer&quot;&gt;Time Difference of Arrival (TDOAS)&lt;/a&gt; libraries are concerned with determining the direction of sound sources. Additionally, a solution implemented directly on PyAudio is discussed &lt;a href=&quot;https://raspberrypi.stackexchange.com/q/64439&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For an integrated solution, the &lt;a href=&quot;https://respeaker.io/&quot; rel=&quot;nofollow noreferrer&quot;&gt;ReSpeaker&lt;/a&gt; project builds a variety of microphone arrays that can be controlled through a &lt;a href=&quot;https://github.com/respeaker/respeaker_python_library&quot; rel=&quot;nofollow noreferrer&quot;&gt;Python API&lt;/a&gt;. See &lt;a href=&quot;http://wiki.seeedstudio.com/ReSpeaker_Mic_Array_v2.0/#doa-direction-of-arrival&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; for how it can be used to determine sound source direction.&lt;/p&gt;&#xA;" OwnerUserId="4310" LastActivityDate="2020-04-09T20:11:10.783" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20443" PostTypeId="2" ParentId="20437" CreationDate="2020-04-09T20:11:38.080" Score="1" Body="&lt;p&gt;The references you gave actually have all the information that you need. I think you are maybe getting confused a bit with the different coordinate systems. As the same symbol can have subtle different meanings.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;difference between AX=XB and AX=ZB&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;If you write the transforms with the coordinate subscripts then it becomes more clear. The equations then become:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$A_{12}X=XB_{12}$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$A_{wc}X=Z_{w}B_{wh}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$w$&lt;/span&gt; is world origin&lt;/li&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$c$&lt;/span&gt; is camera frame&lt;/li&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$h$&lt;/span&gt; is hand frame&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So &lt;span class=&quot;math-container&quot;&gt;$AX=XB$&lt;/span&gt; is used when you have delta transforms. You have the camera on the wrist(scenario 2). You move the robot arm around to estimate &lt;span class=&quot;math-container&quot;&gt;$X$&lt;/span&gt;, which is the sole quantity you are trying to estimate. Note you don't ever actually care about any absolute poses. You only care about the transforms between 2 poses. If you look at the image you can see that &lt;span class=&quot;math-container&quot;&gt;$A$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$B$&lt;/span&gt; are between different poses. Not from some origin.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZUwOw.png&quot; width=&quot;400&quot; height=&quot;400&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$AX=ZB$&lt;/span&gt; is used when you have or are interested in the poses with respect to some coordinate frame(e.g World). You then need an extra term to represent this transform which is &lt;span class=&quot;math-container&quot;&gt;$Z$&lt;/span&gt;. Now &lt;span class=&quot;math-container&quot;&gt;$Z$&lt;/span&gt; might be given to you are it might be something you have to simultaneously estimate. It depends on your specific problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://robotics.stackexchange.com/questions/7163/hand-eye-calibration&quot;&gt;images in the stackoverflow post&lt;/a&gt; you link to show this quite well. The parameters with the question marks are the ones you are trying to estimate.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;1 (eye-on-base)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;It is a bit different then the general &lt;span class=&quot;math-container&quot;&gt;$AX=XB$&lt;/span&gt; or &lt;span class=&quot;math-container&quot;&gt;$AX=ZB$&lt;/span&gt; as here &lt;span class=&quot;math-container&quot;&gt;$X$&lt;/span&gt; is not constant. Instead it is the value that changes and we are interested in estimating &lt;span class=&quot;math-container&quot;&gt;$A$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The equation should be something like this&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ A_{bc}X_{ch}=B_{bh}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$b$&lt;/span&gt; is the robot base&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;and could be modified to look like &lt;span class=&quot;math-container&quot;&gt;$AX=ZB$&lt;/span&gt; by adding a world coordinate frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ A_{wc}X_{ch}=Z_{wb}B_{bh}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;which corresponds to the picture.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/2oeld.png&quot; width=&quot;400&quot; height=&quot;400&quot;&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To solve this you put a marker on your robot hand so the camera can track it as seen in your &lt;a href=&quot;https://github.com/IFL-CAMP/easy_handeye&quot; rel=&quot;nofollow noreferrer&quot;&gt;link here&lt;/a&gt;. &lt;span class=&quot;math-container&quot;&gt;$Z_{wb}$&lt;/span&gt; is arbitrary and depends on what you consider your origin. &lt;span class=&quot;math-container&quot;&gt;$B_{bh}$&lt;/span&gt; comes from your odometry/encoders, and &lt;span class=&quot;math-container&quot;&gt;$X_{ch}$&lt;/span&gt; comes from the marker tracking. You can then solve for &lt;span class=&quot;math-container&quot;&gt;$A_{wc}$&lt;/span&gt;&lt;/p&gt;&#xA;" OwnerUserId="15265" LastEditorUserId="15265" LastEditDate="2020-04-09T22:16:55.497" LastActivityDate="2020-04-09T22:16:55.497" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="20444" PostTypeId="2" ParentId="20440" CreationDate="2020-04-09T21:26:35.283" Score="1" Body="&lt;p&gt;You have two motors that&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;draw 300mA without load at 6V&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;and you have one battery that is rated at&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;8.4V, 170mAh&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Combined, you have two motors that draw a combined (2 * 0.3 * 6) = 3.6 Watts &lt;strong&gt;unloaded.&lt;/strong&gt; Compare that with your battery, that has a capacity of (8.4 * 0.17) = 1.428 Watt-hours. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;That is, you can run your motors &lt;strong&gt;unloaded&lt;/strong&gt; for (1.428/3.6) = 0.4 hours, or 24 minutes, and that's assuming you can get 100% of the power out of the batteries. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;As &lt;a href=&quot;https://robotics.stackexchange.com/questions/20440/dc-motors-are-stalling-at-low-voltage-l298n-controller#comment33592_20440&quot;&gt;NomadMaker pointed out&lt;/a&gt;, you're drawing a very high amount of current for that battery. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Drawing high current from a battery will heat the battery, which increases the internal resistance and results in more power lost in the battery.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It could be that the battery is undersized for your application, but I would bet it's just dead. I would typically only count on being able to charge to 90%, and only being able to discharge down to 20% before brownout, which means I typically only count on being able to access 70% of a battery's rated capacity. This would lower your operating time from 24 minutes down to ~17 minutes, and again that's assuming the motors are unloaded. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Stall current is what the motors would draw if you held the shaft stationary; it's not the same as &lt;em&gt;starting&lt;/em&gt; current, though starting current is higher (~3x) than running current. Still, your stall current is rated at 4 A (!!) each - if your normal running current is 1 A each then I'm guessing you've got about 5 minutes of run time before your battery is dead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, tl;dr here: Measure the battery voltage. I would guess it's dead at around 8V. If it's not dead then the battery might not be able to supply the current, but you should consider changing batteries anyways as you don't have much runtime even under ideal conditions. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-04-09T21:26:35.283" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20445" PostTypeId="1" AcceptedAnswerId="20449" CreationDate="2020-04-10T00:24:46.087" Score="3" ViewCount="2822" Body="&lt;p&gt;Running ROS &lt;strong&gt;melodic&lt;/strong&gt; on &lt;strong&gt;Ubuntu 18.04&lt;/strong&gt; and I keep getting this error. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ roslaunch arm robot_spawn.launch&#xA;&#xA;Command 'roslaunch' not found, but can be installed with:&#xA;&#xA;sudo apt install python-roslaunch&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I was able to launch &lt;strong&gt;prior&lt;/strong&gt; to this but decided to add another node &lt;strong&gt;though&lt;/strong&gt;. When I try to reinstall it, I get a recursive errors like in &lt;a href=&quot;https://answers.ros.org/question/260796/roslaunch-reinstallation/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this question&lt;/a&gt;. Anyway, I checked the solution provided in the question link that says that I need &lt;code&gt;ros-melodic-launch&lt;/code&gt; and not &lt;code&gt;python-roslaunch&lt;/code&gt; so I go ahead and try to source melodic's &lt;code&gt;setup.bash&lt;/code&gt; but I already had &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;source /opt/ros/kinetic/setup.bash&lt;/code&gt; in my &lt;code&gt;.bashrc&lt;/code&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Upon further digging I find &lt;a href=&quot;https://askubuntu.com/questions/1009201/how-to-list-installed-packages-from-some-command&quot;&gt;another question&lt;/a&gt;.  I have checked the logs of &lt;code&gt;apt&lt;/code&gt; in &lt;code&gt;/var/log/apt/history.log&lt;/code&gt; and can confirm that I have it. &lt;/p&gt;&#xA;" OwnerUserId="15157" LastEditorUserId="15157" LastEditDate="2020-04-10T01:08:22.853" LastActivityDate="2020-09-18T12:21:57.127" Title="roslaunch not found" Tags="&lt;ros&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20446" PostTypeId="2" ParentId="20439" CreationDate="2020-04-10T03:26:53.463" Score="1" Body="&lt;p&gt;A hydraulic system requires a hydraulic power unit (hpu), and then you still need a motor everywhere you want an electric motor, and then you've got hydraulic hoses (carrying full hydraulic pressure) running through your robot. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The hydraulic system will not be easier to maintain, will not be easier to install, and I'm pretty sure it'll be dramatically more expensive. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The only time I would consider hydraulics are:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;If you have space constraints that really require the actuator to be as small as possible, or&lt;/li&gt;&#xA;&lt;li&gt;If you only intend to operate one axis at a time (and thus can essentially have an undersized HPU), or&lt;/li&gt;&#xA;&lt;li&gt;You really need to use a fossil fuel system for motive power, or&lt;/li&gt;&#xA;&lt;li&gt;There's already hydraulics in use for some other aspect. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Especially vs. an AC motor, maybe the only thing you have to do for the AC system is grease a bearing. The hydraulic system has all the hoses to purchase or make up (don't screw that up!), hydraulic reservoir to fill, lines to bleed, etc. And if one of those lines ruptures (because everything fails eventually) then it could ruin the rest of the robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And did I mention it's expensive? &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-04-10T03:26:53.463" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20447" PostTypeId="1" AcceptedAnswerId="20448" CreationDate="2020-04-10T10:54:50.913" Score="1" ViewCount="31" Body="&lt;p&gt;We can use the Recursive Newton-Euler Algorithm to solve the dynamic problems of open chains manipulator, but how about the &lt;a href=&quot;https://www.youtube.com/watch?v=LCMZz6YhbOQ&quot; rel=&quot;nofollow noreferrer&quot;&gt;Cardan-joint&lt;/a&gt; manipulator?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, if we have one Cardan joint (Universal joint),2 degrees of freedom, like this picture, one is rotate around the z-axis,and another is rotate around the y-axis &lt;a href=&quot;https://i.stack.imgur.com/jFKwq.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/jFKwq.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to solve the inverse dynamics of this model, my idea is to set the virtual link between &lt;span class=&quot;math-container&quot;&gt;$\theta_1$&lt;/span&gt;(assume rotation axis is z-axis) and &lt;span class=&quot;math-container&quot;&gt;$\theta_2$&lt;/span&gt;(rotation around y-axis), and then the problems become open chains, so in forwarding iterations of Newton-Euler Algorithm, the velocity of &lt;span class=&quot;math-container&quot;&gt;$\theta_1$&lt;/span&gt; can transfer to the velocity of &lt;span class=&quot;math-container&quot;&gt;$\theta_2$&lt;/span&gt; by virtual link, and finally, the wrench of end-effector can be transfer by backward iterations. But the inertia matrix of virtual link is &lt;code&gt;diag([0,0,0,0,0,0])&lt;/code&gt;, is my idea correct? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I didn't know how to transfer the velocity and wrench between &lt;span class=&quot;math-container&quot;&gt;$\theta_1$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\theta_2$&lt;/span&gt; in the Recursive Newton-Euler Algorithm Framework, Or maybe I should use another method to build the dynamics of this model.&lt;/p&gt;&#xA;" OwnerUserId="19138" LastEditorUserId="9720" LastEditDate="2020-04-10T15:34:45.927" LastActivityDate="2020-04-10T15:34:45.927" Title="How to solve dynamics of cardan joint manipulator" Tags="&lt;dynamics&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20448" PostTypeId="2" ParentId="20447" CreationDate="2020-04-10T15:26:13.267" Score="1" Body="&lt;p&gt;In your diagram now, if it were real and &quot;unpaused,&quot; your end-effector would drop. I think the trouble you're having with your dynamics is that you're missing a constraint - what holds the end-effector stationary? To illustrate, if the following were a snapshot frozen in time:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/RYH0b.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/RYH0b.png&quot; alt=&quot;Static Pose&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And then you &quot;unfroze&quot; time, then the &quot;dynamics&quot; you would see would result in:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/GQQA1.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/GQQA1.png&quot; alt=&quot;Drooping Pose&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The cross, being an unactuated bearing, cannot support a moment. If it weren't for the faces or end-caps colliding with one another, the entire assembly would swing completely down:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/YXJ6Q.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/YXJ6Q.png&quot; alt=&quot;Self-colliding pose&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is what I meant when I said the cross moves - you have one joint between the base and the cross, and then you have another joint between the cross and the end-effector cylinder. The complex part here isn't the joint definitions, it's the addition of the constraint. You don't have one pictured here, so I'm not sure what you're expecting is going to hold the end-effector up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You either need a bearing or support of some kind for the end-effector or you need to actuate the universal/Cardan joint. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-04-10T15:26:13.267" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="20449" PostTypeId="2" ParentId="20445" CreationDate="2020-04-10T16:09:25.277" Score="5" Body="&lt;p&gt;Even though you have added &lt;code&gt;source /opt/ros/kinetic/setup.bash&lt;/code&gt; to your &lt;code&gt;.bashrc&lt;/code&gt;, the fact you get a &quot;command not found&quot; error indicates that somehow Bash can't find the &lt;code&gt;roslaunch&lt;/code&gt; executable. To double-check your configuration, run the following command:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;math-container&quot;&gt;$ echo $&lt;/span&gt;PATH&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If your environment is correctly configured to run ROS Kinetic, you should see an output of the form:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/opt/ros/kinetic/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Notice that the first entry in the colon-separated list above is &lt;code&gt;/opt/ros/kinetic/bin&lt;/code&gt;; if that's not the case in your system, that's probably the cause of the issue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even if the &lt;code&gt;apt&lt;/code&gt; logs say &lt;code&gt;roslaunch&lt;/code&gt; was installed, it's better to double-check whether it really is anywhere to be found. Search for the executable file using the command below:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ sudo find / -name roslaunch&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You should see the following output:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/opt/ros/kinetic/lib/python2.7/dist-packages/roslaunch&#xA;/opt/ros/kinetic/share/roslaunch&#xA;/opt/ros/kinetic/bin/roslaunch&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If that's not the case, then &lt;code&gt;roslaunch&lt;/code&gt; is not (correctly) installed. Otherwise, you might also check whether executable permissions are set for good measure:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ ls -l /opt/ros/kinetic/bin/roslaunch&#xA;-rwxr-xr-x 1 root root 1657 Oct  8  2019 /opt/ros/kinetic/bin/roslaunch&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Check whether the &lt;code&gt;x&lt;/code&gt; flags are present in the output.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Generally speaking, (re)installing packages should be your last resort when dealing with environment issues. It's all too easy to run into conflicts and wreck your system to a degree that you might as well rebuild it from scratch. It's better to first try and determine what the problem is to begin with, before rushing into attempts at a solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you installed the &lt;code&gt;ros-kinetic-desktop-full&lt;/code&gt; meta-package then you should already have everything needed to run &lt;code&gt;roslaunch&lt;/code&gt;; in any case, that certainly wouldn't have changed because you added another node to your project, either as sources in your workspace or by installing a binary package.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All that said, if &lt;code&gt;roslaunch&lt;/code&gt; isn't found in your environment or you can't otherwise determine why calling it doesn't work, you might want to try reinstalling the whole ROS setup:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;math-container&quot;&gt;$ sudo apt purge ros-kinetic-desktop-full # or whatever meta-package you used&#xA;$&lt;/span&gt; sudo apt autoremove&#xA;$ sudo apt install ros-kinetic-desktop-full&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But I personally think the best approach is to cut your losses and reinstall the system from scratch, then if you get the same issue again try to determine the cause before (re)installing anything.&lt;/p&gt;&#xA;" OwnerUserId="4310" LastActivityDate="2020-04-10T16:09:25.277" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20450" PostTypeId="1" CreationDate="2020-04-10T18:32:16.593" Score="3" ViewCount="58" Body="&lt;p&gt;I am looking to build a robot that will travel and zig-zag down the hallway.It will be headed towards a wall at roughly 45 degrees and then use a IR LED to detect when a wall is nearby. From there, the robot will rotate and head towards the other wall at a 45 degree angle. The robot will zig zag back and forth until it reaches the end of the hallway. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have researched a lot of various robots using a search of &quot;Obstacle Avoiding Robot&quot;. However, all of these designs use IC L293D motor drivers. However, for my class, I am only able to use a select few diodes, power MOSFETs, BJTs, OP-amps, and 555-timers, and &lt;strong&gt;no microcontroller&lt;/strong&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone give me advice on how to create a motor driver using these parts? Also, do you have any additional tips to help me build this robot? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you!&lt;/p&gt;&#xA;" OwnerUserId="26119" LastActivityDate="2021-05-06T03:11:51.473" Title="Robot - Wall Avoiding (Plinko Robot)" Tags="&lt;motor&gt;&lt;wheeled-robot&gt;&lt;design&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20451" PostTypeId="2" ParentId="20450" CreationDate="2020-04-10T19:20:31.783" Score="0" Body="&lt;p&gt;Perhaps what you are looking for is a &lt;a href=&quot;https://en.wikipedia.org/wiki/Braitenberg_vehicle&quot; rel=&quot;nofollow noreferrer&quot;&gt;Braitenberg vehicle&lt;/a&gt;.  These are simple theoretical vehicles that exhibit advanced behavior without traditional microcontrollers.  (The Wikipedia page is just a small summary of the full &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/0262521121&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;book&lt;/a&gt; which is definitely worth a read).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These vehicles are typically concerned with driving towards a light source.  But I think you can probably use two distance sensors instead of light sensors to drive down the center of the hallway.  Maybe like this:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/STSRF.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/STSRF.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming the distance sensors return a small value when close to a wall, and large value when far from a wall. For example the left sensor is close to the wall, and the right sensor is far, so the right motor gets a small signal and the left motor gets a large signal, thereby steering the robot away from the wall.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2020-04-10T19:20:31.783" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20452" PostTypeId="2" ParentId="20395" CreationDate="2020-04-10T20:44:44.677" Score="3" Body="&lt;p&gt;EKF sensor fusion is achieved simply by feeding data streams from different sensors to the filter. So all you need to do is setup your implementation to accept both encoder and IMU data. This is basically a matter of providing different versions of the observation model matrix &lt;span class=&quot;math-container&quot;&gt;$\mathbf{H}$&lt;/span&gt; that converts states to sensor measurements, one for each sensor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's often the case that each sensor captures a different subset of the full state. In the case of a state as below:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\mathbf{x} =&#xA;\begin{bmatrix}&#xA;x \\&#xA;y \\&#xA;roll \\&#xA;pitch \\&#xA;yaw&#xA;\end{bmatrix}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Encoder readings reflect &lt;span class=&quot;math-container&quot;&gt;$[x \quad y \quad yaw]^T$&lt;/span&gt;, while IMU readings reflect &lt;span class=&quot;math-container&quot;&gt;$[roll \quad pitch \quad yaw]^T$&lt;/span&gt;. This is encoded in the &lt;span class=&quot;math-container&quot;&gt;$\mathbf{H}$&lt;/span&gt; matrices by having the number of rows match the number of captured state components, the number of columns match the full state size, and the position of non-zero elements correspond to the position of the captured components in the state vector.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, the encoder observation model matrices &lt;span class=&quot;math-container&quot;&gt;$\mathbf{H}_{encoders}$&lt;/span&gt; and  &lt;span class=&quot;math-container&quot;&gt;$\mathbf{H}_{IMU}$&lt;/span&gt; would be defined as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\mathbf{H}_{encoders} =&#xA;\begin{bmatrix}&#xA;1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\&#xA;0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\&#xA;\end{bmatrix}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\mathbf{H}_{IMU} =&#xA;\begin{bmatrix}&#xA;0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \\&#xA;\end{bmatrix}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Notice how for the matrices above:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\mathbf{H}_{encoders} \mathbf{x} =&#xA;\begin{bmatrix}&#xA;x \\&#xA;y \\&#xA;yaw&#xA;\end{bmatrix}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\mathbf{H}_{IMU} \mathbf{x} =&#xA;\begin{bmatrix}&#xA;roll \\&#xA;pitch \\&#xA;yaw&#xA;\end{bmatrix}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All that said, I would counsel against having &lt;span class=&quot;math-container&quot;&gt;$(x, y)$&lt;/span&gt; coordinates in a state estimated by a Kalman filter. The reason is that encoder drift error is not bounded, but grows endlessly with distance traveled — that's why we need SLAM after all. Instead I would recommend keeping track of linear and angular velocities, and integrate those over time outside of the filter to get a position estimate, if no better alternative is available. Velocity estimates can be trivially computed from encoder tick counts as below:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;v = \frac{c_L \alpha_L + c_R \alpha_R}{2 \Delta t}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\omega = \frac{c_R \alpha_R - c_L \alpha_L}{2 l \Delta t}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where &lt;span class=&quot;math-container&quot;&gt;$(v, \omega)$&lt;/span&gt; are linear and angular velocity, &lt;span class=&quot;math-container&quot;&gt;$(c_L, c_R)$&lt;/span&gt; the tick counts,  &lt;span class=&quot;math-container&quot;&gt;$(\alpha_L, \alpha_R)$&lt;/span&gt; coefficients that convert tick count to traveled distance, &lt;span class=&quot;math-container&quot;&gt;$\Delta t$&lt;/span&gt; the tick collection interval, and &lt;span class=&quot;math-container&quot;&gt;$l$&lt;/span&gt; the lateral distance between wheels.&lt;/p&gt;&#xA;" OwnerUserId="4310" LastActivityDate="2020-04-10T20:44:44.677" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20453" PostTypeId="2" ParentId="20450" CreationDate="2020-04-10T21:08:01.093" Score="0" Body="&lt;p&gt;This looks like a BEAM robot. According to &lt;a href=&quot;https://en.wikipedia.org/wiki/BEAM_robotics&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia&lt;/a&gt;, &quot;BEAM robotics (from biology, electronics, aesthetics and mechanics) is a style of robotics that primarily uses simple analogue circuits, such as comparators, instead of a microprocessor in order to produce an unusually simple design. While not as flexible as microprocessor based robotics, BEAM robotics can be robust and efficient in performing the task for which it was designed.&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://solarbotics.net/library.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;BEAM Reference Library&lt;/a&gt; provides an overview of the paradigm, an extensive library of commonly used &lt;a href=&quot;http://solarbotics.net/library.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;circuits&lt;/a&gt;, and schematics for some robot designs. In particular, I believe &lt;a href=&quot;http://raysbeambots.solarbotics.net/FLEDtutorial.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;this one&lt;/a&gt; might be a good start for you: it desribes a robot that drives in the direction of a light source, I imagine that with a few modifications it could be reworked into moving away from obstacles instead.&lt;/p&gt;&#xA;" OwnerUserId="4310" LastActivityDate="2020-04-10T21:08:01.093" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20454" PostTypeId="2" ParentId="15876" CreationDate="2020-04-10T22:49:39.127" Score="0" Body="&lt;p&gt;Both FSM's and optimization approaches such as MPC will suffer as scenario constraints multiply. While at first glance FSM's may seem better suited to handle the increased complexity, in practice the interaction between different transition rules can quickly become difficult to track. This is most clear in the case of the so-called &lt;a href=&quot;https://www.coursera.org/lecture/mobile-robot/the-zeno-phenomenon-IsnqW&quot; rel=&quot;nofollow noreferrer&quot;&gt;Zeno phenomenon&lt;/a&gt;, where a hybrid (FSM-based) controller repeatedly switches between states. Similarly, approaches based on optimizing a cost function can descend into &quot;weight-tuning Hell&quot;, where increasing the weight of one objective has detrimental effects on another.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In either case the problem is not so much with the approach itself, but with taking a &quot;flat&quot; view of robot navigation, a problem that is hierarchical in nature. Instead of trying to satisfy every constraint at the same level of abstraction, modern navigation architectures divide them among a stack of modules:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Router:&lt;/strong&gt; find a route from the current robot location to a desired destination, satisfying environmental constraints (keep to driveable roads, respect direction of traffic, etc.) and maximizing optimality metrics (distance traveled, fuel consumption, etc.);&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Planner:&lt;/strong&gt; Find paths that keep the robot advancing alongside the planned route, while also avoiding unexpected obstacles;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Kinematic controller:&lt;/strong&gt; compute velocities that drive the robot forward alongside the planner path;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Dynamic controller:&lt;/strong&gt; compute actuator commands that match the velocities generated by the kinematic controller.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In an architecture such as this &quot;discrete&quot; decisions are taken at the inter-module level — for example, the planner could report failure searching a path around an obstacle, prompting the router to generate an alternative route — while &quot;continuous&quot; policies are enforced at the intra-module level. In this latter case optimization-based approaches do have an edge over FSM's, as the former are fundamentally better at handling continuous domains.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That said, &lt;a href=&quot;https://www.researchgate.net/publication/224258016_Motion_Planning_with_Complex_Goals&quot; rel=&quot;nofollow noreferrer&quot;&gt;navigation systems based on Linear Temporal Logic (LTL)&lt;/a&gt; have successfully enabled discrete logic planning to be applied in continuous domains. LTL is a step up from FSM's, but still an appealing alternative for describing complex navigation objectives in a more human-readable form.&lt;/p&gt;&#xA;" OwnerUserId="4310" LastActivityDate="2020-04-10T22:49:39.127" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20456" PostTypeId="1" AcceptedAnswerId="20459" CreationDate="2020-04-11T09:14:05.540" Score="4" ViewCount="123" Body="&lt;p&gt;My question is a basic one about velocity propagation from link to link, that is &lt;strong&gt;how to understand the following equation.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$&#xA;{^i\omega_{i+1}} = {^i\omega_{i}} + {_{i+1}^{\;\;\;i}{R}} \cdot {\dot{\theta}_{i+1}} \cdot {^{i+1}\hat{Z}_{i+1}}&#xA;$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The interpretation of this equation from &lt;em&gt;Introduction to Robotics&lt;/em&gt; by John J. Craig is:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The angular velocity of link &lt;strong&gt;i+1&lt;/strong&gt; is the same as that of link &lt;strong&gt;i&lt;/strong&gt; plus a new component caused by rotational velocity at joint &lt;strong&gt;i+1&lt;/strong&gt;. This can be written in terms of frame &lt;strong&gt;{i}&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Take the following figure as an example, I assume this equation is trying to compute the angular velocity of Link 2 with respect to the frame &lt;strong&gt;{1}&lt;/strong&gt;. i.e., &lt;span class=&quot;math-container&quot;&gt;$^1\omega_2$&lt;/span&gt;  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;What bewilders me most is I don't think every point on Link &lt;strong&gt;2&lt;/strong&gt; share the same angular velocity with respect to joint &lt;strong&gt;1&lt;/strong&gt;, because the axis of rotation is not joint &lt;strong&gt;1&lt;/strong&gt;. Then how come &lt;span class=&quot;math-container&quot;&gt;$^1\omega_2$&lt;/span&gt; be computed?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can anyone please help me out?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/qwyZT.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qwyZT.png&quot; alt=&quot;Fig 5-8&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="26123" LastActivityDate="2020-04-15T17:04:26.630" Title="How to understand the angular velocity of link i+1?" Tags="&lt;kinematics&gt;" AnswerCount="4" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20457" PostTypeId="1" CreationDate="2020-04-11T09:22:22.940" Score="1" ViewCount="29" Body="&lt;p&gt;How to formulate the equation and environment equations for motion planning algorithm use?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And if know the desired state, how to use motion planning to fill the data to reach this desired state?&lt;/p&gt;&#xA;" OwnerUserId="26122" LastActivityDate="2020-04-11T15:35:26.513" Title="How to formulate the equation and environment equations for motion planning algorithm use?" Tags="&lt;motion-planning&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ClosedDate="2020-04-13T15:36:47.143" ContentLicense="CC BY-SA 4.0" />
  <row Id="20458" PostTypeId="2" ParentId="20361" CreationDate="2020-04-11T09:28:59.603" Score="1" Body="&lt;p&gt;No (for best outcome) it is not enough. As you might have observed, the error that Gyro produces during stationary position is very random and has no specific order. No matter how much reading you take for average offset, you cannot eliminate it. &#xA;One solution is simply to use sophisticated sensor which is not always possible. Another solution is to use sophisticated algorithms. For example Gyroscope can be fused with Accelerometer and then to apply Complementary Filter. &#xA;Similarly if you want to dynamically calibrate Gyroscope at every reading then you can use Kalman Filter for estimation. Kalman Filter is slightly difficult to apply but it gives way better results. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Ref: Kalaman Filter by Phil Kim&lt;/p&gt;&#xA;" OwnerUserId="26124" LastActivityDate="2020-04-11T09:28:59.603" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20459" PostTypeId="2" ParentId="20456" CreationDate="2020-04-11T10:03:39.883" Score="2" Body="&lt;p&gt;I don't think it's that difficult. If you look closely the statement from Craig's book is self-explanatory. Let me explain this further. When you measure the angular velocity of link &lt;span class=&quot;math-container&quot;&gt;$2$&lt;/span&gt; it has a unit vector in frame &lt;span class=&quot;math-container&quot;&gt;$2$&lt;/span&gt;. Then you multiply it with a rotation matrix which transforms this angular velocity to frame &lt;span class=&quot;math-container&quot;&gt;$1$&lt;/span&gt;. But since it is not necessary that link 1 will be in a stationary position so the angular velocity of link &lt;span class=&quot;math-container&quot;&gt;$1$&lt;/span&gt; will be added with the final angular velocity of link &lt;span class=&quot;math-container&quot;&gt;$2$&lt;/span&gt; which is a common sense. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then comes the last part of your question. You might know the convention in this book but let me mention it here. &lt;span class=&quot;math-container&quot;&gt;${^i\omega_{i+1}}$&lt;/span&gt; means that you are measuring the velocity of frame &lt;span class=&quot;math-container&quot;&gt;$i+1$&lt;/span&gt; in frame &lt;span class=&quot;math-container&quot;&gt;$i$&lt;/span&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: &#xA;The last part of your question.&#xA;I thought you were were confused in linear velocity. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The angular velocity in rigid bodies is same. Thanks to the one who pointed it correctly in the comments. &lt;/p&gt;&#xA;" OwnerUserId="26124" LastEditorUserId="26124" LastEditDate="2020-04-13T09:15:35.323" LastActivityDate="2020-04-13T09:15:35.323" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20461" PostTypeId="1" CreationDate="2020-04-11T12:55:37.803" Score="3" ViewCount="213" Body="&lt;p&gt;I was recently introduced to Gaussian Process Regression (GPR). I read multiple papers regarding use cases of GPR in robotics, however, they were more or less very limited.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Use case from the literature&lt;/strong&gt;:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;There is a robot arm with 5 joints.&lt;/li&gt;&#xA;&lt;li&gt;The authors demonstrate an action such as avoiding an object. After several demonstrations, they build a GPR model.&lt;/li&gt;&#xA;&lt;li&gt;Using this trained GPR model, they demonstrate that the robot arm can avoid an object in a similar situation.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Use case that I am wondering:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;I would like to model the basic movements such as move your arm forward but in a certain manner. For example, I would like to train my GPR model so that it can learn the timing when and how long each joint has to move so that this arm can be moved forward in a certain manner that I demonstrated.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Challenges, in this case, would be that, for instance, the initial joint configuration changes, my trained GPR model will be useless since it is trained for the one specific set of initial joint configuration to move forward.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;What could be the solution for this use case? If GPR is not the right choice, what would be the better method?&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;In the below case, 2 demonstrations are used to represent the behavior/skill. However, in our case, &lt;em&gt;&quot;moving straight forward&quot;&lt;/em&gt; action can start from different start posture whereas in the figure below it is always q=0. Now, if we imagine that we are really trying to model this &quot;moving straight forward&quot; more generally (which means for different start postures) the trajectory distribution will be very giant (will probably cover the whole plot). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is whether GPR or any regression approach can be used for modeling this kind of general behavior.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/liJzV.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/liJzV.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="21382" LastEditorUserId="21382" LastEditDate="2020-04-13T17:38:42.823" LastActivityDate="2021-05-09T01:00:06.587" Title="Motion planning with Gaussian Process Regression" Tags="&lt;motion-planning&gt;&lt;machine-learning&gt;&lt;gaussian&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20462" PostTypeId="2" ParentId="20457" CreationDate="2020-04-11T12:57:33.063" Score="0" Body="&lt;p&gt;I will assume that we have a robot arm in a work cell and we want to plan a pick and place motion while avoiding some static obstacles in the work cell.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I understand that having equations is a very essential way of modeling the robot and its environment. However, for such a complex system some higher-level ways of representation are available. For example, the unified robot description format (&lt;a href=&quot;http://wiki.ros.org/urdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;URDF&lt;/a&gt;) that allows us to present the models of the robot and its environment from their CAD models. Those models can be used for the visualization as well as the planning tasks. If you are into modeling robots, you might have already heard of Denavit-Hartenberg (&lt;a href=&quot;https://en.wikipedia.org/wiki/Denavit%E2%80%93Hartenberg_parameters&quot; rel=&quot;nofollow noreferrer&quot;&gt;DH&lt;/a&gt;) parameters. Consider URDF a new way for the same purpose with more capabilities. This is a very general view of modeling. This is an awesome topic, the following image is an application of what I said. I made it while working on &lt;a href=&quot;https://industrial-training-master.readthedocs.io/en/melodic/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;ROS-Industrial&lt;/a&gt; developers' training.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/9YkGb.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9YkGb.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before going to the planning part, let's make sure that we know what are forward and inverse kinematics. Forward kinematics means we give the robot motor joint values and want to know where the last link of the robot is. This is a relatively easy task for robot arms. On the other hand, inverse kinematics is the question about which motor joints will bring the robot to where I want it to be (the desired state in your words). This is not an easy task especially when the arm degrees of freedom (DOF) increase. Usually, industrial arms have 6-DOF (6 motors). It is hard to solve because we need to solve sets of non-linear equations. This is why numerical methods are used to obtain the solution. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then, the planning part. If we know the start and the end poses of the robot to make a pick and place task, how can we know the path between them (sequence of key robot poses and their corresponding joints)? Here comes the need for motion planning algorithms. We need them because we will search for solutions in a high dimensional space 6D for 6DOF robot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's assume we will use the famous rapidly-exploring random tree (&lt;a href=&quot;https://en.wikipedia.org/wiki/Rapidly-exploring_random_tree&quot; rel=&quot;nofollow noreferrer&quot;&gt;RRT&lt;/a&gt;) famous planning algorithm. The algorithm will try to connect the start to the end through random sampling. Every sample, in this case, can be a robot pose. While the samples are generated, we can use them to check for things like if there is a collision with the static obstacles in the environment. If samples are satisfactory, they are connected in a path from the start to the end. If not satisfactory (collision is detected, for example) the current sample is discarded and a new satisfactory one is searched for till we reach the end. The result is a path of feasible robot sequences that can get our task done. To learn how to do this using open source software, I do recommend going through the tutorials of &lt;a href=&quot;https://industrial-training-master.readthedocs.io/en/melodic/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;ROS-Industrial&lt;/a&gt;. It will teach you how to use &lt;a href=&quot;https://www.ros.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;ROS&lt;/a&gt; and &lt;a href=&quot;https://moveit.ros.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;MoveIt&lt;/a&gt; to accomplish your goal. MoveIt is a package made for making motion planning accessible to us. The following is an example of motion planning for an arm robot with obstacle avoidance.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/QtXdw.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QtXdw.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I wish you got an idea about some of the concepts needed to answer your questions as well as the tools that help to implement them. Please keep asking.&lt;/p&gt;&#xA;" OwnerUserId="10249" LastEditorUserId="10249" LastEditDate="2020-04-11T15:35:26.513" LastActivityDate="2020-04-11T15:35:26.513" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20464" PostTypeId="1" AcceptedAnswerId="20471" CreationDate="2020-04-11T19:25:48.910" Score="0" ViewCount="176" Body="&lt;p&gt;What's the difference? I see my service in &lt;code&gt;rossrv list&lt;/code&gt; but not with &lt;code&gt;rosservice list&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From &lt;a href=&quot;http://wiki.ros.org/Services&quot; rel=&quot;nofollow noreferrer&quot;&gt;ROS wiki&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;• rossrv: displays information about .srv data structures.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;• rosservice: lists and queries ROS Services&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;There's an abridged tree structure of the files below this text for clarity. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have &lt;code&gt;catkin_ws/src/simple_arm/srv/GoToPosition.srv&lt;/code&gt; that I see when I run &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ rossrv list&#xA;...&#xA;simple_arm/GoToPosition&#xA;...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;However, my request handler is in &lt;code&gt;catkin_ws/src/simple_arm/src/arm_mover.cpp&lt;/code&gt; and I only see it in rosservice list as &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ rosservice list&#xA;...&#xA;/arm_mover/safe_move&#xA;...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Why can't I see &lt;code&gt;/arm_mover/safe_move&lt;/code&gt; under &lt;code&gt;rossrv list&lt;/code&gt; if it is a service? And the inverse with &lt;code&gt;simple_arm/GoToPosition&lt;/code&gt;?&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ tree&#xA;.&#xA;├── build&#xA;│   │   ├── setup.bash&#xA;│   ├── catkin_generated&#xA;│   ├── first_package&#xA;│   ├── simple_arm&#xA;│          ├── arm_mover.dir&#xA;├── devel&#xA;│   ├── include&#xA;│   │   └── simple_arm&#xA;│   │       ├── GoToPosition.h&#xA;│   │       ├── GoToPositionRequest.h&#xA;│   │       └── GoToPositionResponse.h&#xA;│   ├── lib&#xA;│   │   └── simple_arm&#xA;│   │       ├── arm_mover&#xA;│   │       └── simple_mover&#xA;└── src&#xA;    ├── CMakeLists.txt -&amp;gt; /opt/ros/melodic/share/catkin/cmake/toplevel.cmake&#xA;    ├── first_package&#xA;    │   ├── CMakeLists.txt&#xA;    │   └── package.xml&#xA;    └── simple_arm&#xA;        ├── CMakeLists.txt&#xA;        ├── config&#xA;        │   └── controllers.yaml&#xA;        ├── images&#xA;        │   └── simulation.png&#xA;        ├── launch&#xA;        │   ├── robot_control.xml&#xA;        │   ├── robot_description.xml&#xA;        │   └── robot_spawn.launch&#xA;        ├── LICENSE&#xA;        ├── meshes&#xA;        │   └── camera.dae&#xA;        ├── package.xml&#xA;        ├── README.md&#xA;        ├── src&#xA;        │   ├── arm_mover.cpp&#xA;        │   └── simple_mover.cpp&#xA;        ├── srv&#xA;        │   └── GoToPosition.srv&#xA;        ├── urdf&#xA;        │   ├── simple_arm.gazebo.xacro&#xA;        │   └── simple_arm.urdf.xacro&#xA;        └── worlds&#xA;            └── willow_garage.world&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="15157" LastActivityDate="2020-04-13T00:54:26.863" Title="Difference between rosservice and rossrv [the info version at least]" Tags="&lt;ros&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20465" PostTypeId="1" CreationDate="2020-04-12T09:03:18.460" Score="0" ViewCount="79" Body="&lt;p&gt;In the covariance matrix of the EKF SLAM, there are components that specifies the correlation between landmarks. Are those values important? Because while we bulding map of landmarks, we only draw the ellipse around each landmark (which correspond to the covariance of that landmark). I'm quite new to SLAM so any correction and help would be great. Thank you.&lt;/p&gt;&#xA;" OwnerUserId="16968" LastActivityDate="2020-04-12T17:02:18.027" Title="On the covariance matrix of the EKF SLAM" Tags="&lt;slam&gt;&lt;ekf&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20467" PostTypeId="1" AcceptedAnswerId="20513" CreationDate="2020-04-12T16:20:24.807" Score="0" ViewCount="75" Body="&lt;p&gt;I have a robot whose pose &lt;span class=&quot;math-container&quot;&gt;$(x, y)$&lt;/span&gt; is defined relative to the global frame. I have a sensor which estimates the robot's current pose in the global frame, and the sensor is known to have Gaussian error. The robot has a sensor which estimates the robot's local velocity &lt;span class=&quot;math-container&quot;&gt;$(u, v)$&lt;/span&gt; relative to the robot's own frame, and the sensor is known to have zero error, so the motion model is known perfectly.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/EAG9Eb.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/EAG9Eb.png&quot; alt=&quot;Axes&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I now want to track the estimated pose of the robot in the global frame, using a Kalman filter. I know that my observation noise is Gaussian, which is one requirement of the Kalman filter. The other requirement is that the dynamics model is linear. Most examples of this type (global position frame, local velocity frame) I have seen say that the Extended Kalman filter is needed. However, I am not sure about whether this is true for my case, because my velocity sensor has zero error.  I have two ideas:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) The velocity sensor has zero error, and so the motion model is known perfectly. So, at every timestep, the estimated state is simply the previous state, plus the velocity multiplied by the timestep. Since there is no uncertainty in the velocity, there is no uncertainty in the motion. Therefore, I can use a regular Kalman filter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) Even though the motion model as zero noise, the dynamics itself is still non-linear. This is because to transform from the local frame to the global frame requires a rotation, which is a non-linear function since it involves sin and cosine functions. There may be zero &quot;extra&quot; uncertainty caused by the motion, but the motion model is still non-lienar. Therefore, I must use an extended Kalman filter.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please could somebody explain which is correct, or if neither, what the correct solution is?&lt;/p&gt;&#xA;" OwnerUserId="8880" LastEditorUserId="8880" LastEditDate="2020-04-12T17:28:18.710" LastActivityDate="2020-04-18T03:18:42.680" Title="Kalman filter with a known motion model" Tags="&lt;localization&gt;&lt;kalman-filter&gt;&lt;ekf&gt;&lt;filter&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20468" PostTypeId="2" ParentId="20456" CreationDate="2020-04-12T16:57:36.697" Score="3" Body="&lt;blockquote&gt;&#xA;  &lt;p&gt;What bewilders me most is I don't think every point on Link &lt;strong&gt;2&lt;/strong&gt; share the same angular velocity with respect to joint &lt;strong&gt;1&lt;/strong&gt;, because the axis of rotation is not joint &lt;strong&gt;1&lt;/strong&gt;. Then how come &lt;span class=&quot;math-container&quot;&gt;$^1\omega_2$&lt;/span&gt; be computed?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Every point (more specifically, every &lt;em&gt;frame&lt;/em&gt;) on a rigid body does indeed share the same rotational velocity, and the rigid body can thus be said to have a rotational velocity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To see this, it is helpful to remember that the rotational velocity of a frame is the rate of change of the angle between a line drawn in that frame and a fixed reference line. For a rigid body, the angle between any two lines drawn on the body is constant, and so all frames must have the same rotational velocity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;More abstractly, when thinking about the rotational velocity, it is the axis vector that matters, not the center of rotation. The center of rotation (and its generalization to three dimensions) matters when calculating the difference in the translational velocities of two frames on a rotating rigid body.&lt;/p&gt;&#xA;" OwnerUserId="11712" LastActivityDate="2020-04-12T16:57:36.697" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20469" PostTypeId="2" ParentId="20465" CreationDate="2020-04-12T17:02:18.027" Score="1" Body="&lt;p&gt;Drawing the error ellipses is more a tool for you the human to see how the system is working. It is a proportional representation of the error, not an exact value. So it is OK to ignore the cross correlation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The cross covariances are important for the EKF to work correctly. That is why we still keep them in the Filter and propogate/update them accordingly. But you don't have to care about them when drawing the error ellipse.&lt;/p&gt;&#xA;" OwnerUserId="15265" LastActivityDate="2020-04-12T17:02:18.027" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20471" PostTypeId="2" ParentId="20464" CreationDate="2020-04-13T00:54:26.863" Score="2" Body="&lt;p&gt;The difference is that &lt;code&gt;rossrv&lt;/code&gt; is a tool for inspecting service &lt;em&gt;types&lt;/em&gt;  (i.e. &lt;code&gt;.srv&lt;/code&gt; files), while &lt;code&gt;rosservice&lt;/code&gt; provides access to &lt;em&gt;running&lt;/em&gt; services. So for example, when you call &lt;code&gt;rossrv list&lt;/code&gt; it will show what service types are known in the current workspace, while &lt;code&gt;rosservice list&lt;/code&gt; shows the names of the services currently running.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In your case, the service type is &lt;code&gt;simple_arm/GoToPosition&lt;/code&gt; and the running service name is &lt;code&gt;/arm_mover/safe_move&lt;/code&gt;, so logically the former shows up in &lt;code&gt;rossrv list&lt;/code&gt; and the latter in &lt;code&gt;rosservice list&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another way to explain the difference between both tools is to think of &lt;code&gt;rossrv&lt;/code&gt; as the service equivalent of &lt;code&gt;rosmsg&lt;/code&gt;, and of &lt;code&gt;rosservice&lt;/code&gt; as the service equivalent of &lt;code&gt;rostopic&lt;/code&gt;. Just like &lt;code&gt;rosmsg&lt;/code&gt; is concerned with message types and &lt;code&gt;rostopic&lt;/code&gt; with topics to / from which messages are published / subscribed, so does &lt;code&gt;rossrv&lt;/code&gt; is concerned with service types and &lt;code&gt;rosservice&lt;/code&gt; with endpoints from which services can be called.&lt;/p&gt;&#xA;" OwnerUserId="4310" LastActivityDate="2020-04-13T00:54:26.863" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20472" PostTypeId="1" AcceptedAnswerId="20478" CreationDate="2020-04-13T08:02:21.133" Score="1" ViewCount="92" Body="&lt;p&gt;I am studying control systems, and I was reading a paper about quadrotors. In the paper it is said that in the platform of the robot it has to be present a low level controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But what is a low level controller? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have tried to search online, but i have not really understood, since I think its definition depends also on the context in which it is used, so I posted the question here in Robotics stack exchange.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the paper it is also said that the low level controller is prefereable to be open source, so to have the possibility to add capabilities.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, what is the difference between a low level controller and a high level controller for a quadrotor?&lt;/p&gt;&#xA;" OwnerUserId="21797" LastActivityDate="2020-04-14T01:59:55.940" Title="What is a low level controller for a quadrotor?" Tags="&lt;control&gt;&lt;quadcopter&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20474" PostTypeId="1" CreationDate="2020-04-13T10:19:24.333" Score="0" ViewCount="50" Body="&lt;p&gt;I Solved inverse velocity (joint velocity) at velocity level problem. So, I have actual orientation of the manipulator. Now I wanted to get the desired orientation from angular velocity that I used to solve inverse kinematics. So I can calculate the orientation error. &#xA;&lt;span class=&quot;math-container&quot;&gt;$$ \boldsymbol{V} = \begin{vmatrix} 0 \\ 0 \\ 0 \\ \hline 10 \cos(2 \pi t) \\ 10 \sin(2 \pi t) \\ 5 \cos(2 \pi t) \end{vmatrix} $$&lt;/span&gt; is a velocity profile used to solve joint velocity.&lt;br&gt;&#xA;Thanks   &lt;/p&gt;&#xA;" OwnerUserId="22888" LastEditorUserId="691" LastEditDate="2020-04-15T23:09:07.303" LastActivityDate="2021-04-09T05:26:16.453" Title="Extract Euler angles from angular velocity profile" Tags="&lt;jacobian&gt;&lt;orientation&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20476" PostTypeId="1" CreationDate="2020-04-13T10:36:45.477" Score="1" ViewCount="33" Body="&lt;p&gt;What is the minimum number of point correspondences required for camera pose estimation given the perspective projections of points with known world coordinates?&lt;/p&gt;&#xA;" OwnerUserId="26143" LastActivityDate="2020-05-13T14:05:20.543" Title="Camera Pose Estimation" Tags="&lt;cameras&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20477" PostTypeId="2" ParentId="20476" CreationDate="2020-04-13T13:25:33.517" Score="1" Body="&lt;p&gt;The problem is called perspective-n-point. And has the answer in the &lt;a href=&quot;https://en.wikipedia.org/wiki/Perspective-n-Point&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia article&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;6 unknowns. 3 for rotation and 3 for translation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each perspective measurement provides 2 points of information. (x,y) in pixels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\frac{6}{2}$&lt;/span&gt; is 3. &lt;/p&gt;&#xA;" OwnerUserId="15265" LastActivityDate="2020-04-13T13:25:33.517" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20478" PostTypeId="2" ParentId="20472" CreationDate="2020-04-13T14:10:52.483" Score="2" Body="&lt;p&gt;Controllers, be it for quadrotors or industrial manipulators or any electromechanical system for that matter, are implemented as hierarchies. Controllers that directly drive the hardware are low-level controllers whereas those that implement logical decision-making are high-level controllers. The terms &quot;high&quot; and &quot;low&quot; are relative. Nested controllers ensure abstraction and code modularity. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the context of a quadrotor, the controller for the motor driver(s) that actually makes the rotors spin would be a low-level controller, whereas another controller that tells the quadrotor to move forward/backward etc. could be a high-level controller. The low-level controller has abstracted away all the details on how exactly to drive the rotors. All the high-level controller does is &lt;em&gt;instruct&lt;/em&gt; the low-level controllers that a particular action is desired. It's now the low-level controllers' job to actually spin the rotors in such a way that the quadrotor executes the desired action.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&quot;in the platform of the robot it has to be present a low level&#xA;  controller&quot;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Think of making your quadrotor execute actions like &lt;code&gt;ascend(desired_height)&lt;/code&gt; or &lt;code&gt;translate_forward(distance)&lt;/code&gt;. Great, you've called those functions and have passed the arguments. What then? If the control architecture is implemented as a hierarchy, then these functions would call low-level controllers to actuate the rotors:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;# high-level controller&#xA;ascend(desired_height)&#xA;{&#xA;    drive_motors(desired_height, 'up')&#xA;}&#xA;&#xA;# another high-level controller&#xA;translate_forward(distance)&#xA;{&#xA;    drive_motors(distance, 'forward')&#xA;}&#xA;&#xA;# low-level controller&#xA;drive_motors(distanceToTarget, direction_to_move_in)&#xA;{&#xA;    # code that actually drives the motors&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Note that the low-level controller can again call another &lt;em&gt;lower&lt;/em&gt;-level controller which is even closer to the &quot;metal&quot;. Likewise, the high level controllers can be called by an even &lt;em&gt;higher&lt;/em&gt; level controller, for eg. &lt;code&gt;go_above_obstacles()&lt;/code&gt; which utilizes &lt;code&gt;ascend()&lt;/code&gt; and &lt;code&gt;translate_forward()&lt;/code&gt;. High-level controllers thus are for high-level logic and are generally not concerned with the low-level mechatronic actuation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's another &lt;a href=&quot;https://robotics.stackexchange.com/a/4676/21531&quot;&gt;answer&lt;/a&gt; that might be useful.&lt;/p&gt;&#xA;" OwnerUserId="21531" LastEditorUserId="21531" LastEditDate="2020-04-14T01:59:55.940" LastActivityDate="2020-04-14T01:59:55.940" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20479" PostTypeId="2" ParentId="20461" CreationDate="2020-04-13T17:08:20.437" Score="0" Body="&lt;p&gt;Gaussian process regression is utilized in the domain of Learning from demonstration to generate the trajectories from multiple demonstrations. The idea is, that a human operator creates a database of trajectories. The points are converted into a mathematical model and a solver is generating trajectories for new situations. The first step is to build a database as a Python dictionary:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;skill_avoiding = {&#xA;    0: [(250,150),(170,160),(180,270)],    &#xA;    1: [(100,160),(180,180),(180,270)],        &#xA;    2: [(140,140),(170,180),(180,250)],  &#xA;}&#xA;print(skill_avoiding)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The skill avoiding is demonstrated three times with different trajectories. They are forming a space of possible actions. For generating a new trajectory an interpolation method is needed. Regression means, that the solver takes the three demonstration as input and generates a new trajectory which has a similar pattern. Gaussian process interpolation works with a RBF kernel. A kernel is an advanced sort of function approximation. In contrast to linear interpolation the resulting trajectory looks smooth.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2020-04-13T17:08:20.437" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20480" PostTypeId="1" CreationDate="2020-04-13T17:42:58.973" Score="0" ViewCount="42" Body="&lt;p&gt;I  made a map.world file and placed it under &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/opt/ros/kinetic/share/turtlebot_gazebo/worlds&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;and ran &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;roslaunch turtlebot_gazebo turtlebot_world.launch world_file:=/opt/ros/kinetic/share/turtlebot_gazebo/worlds/map.world &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;as mentioned &lt;a href=&quot;https://learn.turtlebot.com/2015/02/03/6/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I see the map but I don't see turtlebot. What am I doing wrong?&lt;/p&gt;&#xA;" OwnerUserId="26149" LastActivityDate="2021-05-10T15:06:30.587" Title="Turtulebot not showing in custom world" Tags="&lt;ros&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20482" PostTypeId="1" CreationDate="2020-04-13T19:06:53.790" Score="2" ViewCount="64" Body="&lt;p&gt;I am working on particle filter. I have studied it thoroughly, but stucked at one point during implementation. I have to implement it using MatLab. The issue is this that I am unable to implement the prediction step. As far as I know, it is dependent upon the motion model. motion model is generally dependent upon the noise and previous value of its output.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;                      x(t)= P[x(t) | x(t-1)] = f(x(t-1))+noise  //motion model&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But I am not getting this point that what should be my prediction step depends upon the motion model. As at time t, it is dependent upon the &lt;strong&gt;x(t)&lt;/strong&gt; and &lt;strong&gt;X_predict(t-1)&lt;/strong&gt;, but how do I arrange it, so that my actual and estimated output will have small error. I have tried different methods, but still having the same issue that my actual and estimated values are not approximated, and giving large errors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know that &lt;strong&gt;weights&lt;/strong&gt; depend upon the &lt;strong&gt;X_predict(t)&lt;/strong&gt;, and if it is not correct, so my estimated output will be wrong. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Kindly guide me how do I proceed.&lt;/p&gt;&#xA;" OwnerUserId="24905" LastActivityDate="2020-04-16T19:58:33.150" Title="How to take prediction step in particle filter?" Tags="&lt;matlab&gt;&lt;particle-filter&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20483" PostTypeId="1" CreationDate="2020-04-13T20:52:28.473" Score="1" ViewCount="24" Body="&lt;p&gt;Let's say we're trying to control the speed of a motor to 20 revs/sec, and we know that our controller output for that speed is approximately 5. We currently have a Proportional controller to drive the motor to our 20 revs/sec setpoint, with some steady-state error.&lt;/p&gt;&#xA;&lt;p&gt;If we included Feedforward but tuned it poorly, such that it outputs 2 instead of 5, will the following error still be less than it would have been with only the Proportional controller?&lt;/p&gt;&#xA;&lt;p&gt;I would think that for Feedforward to reduce the steady-state error, the output would need to be able to drive the motor closer to the setpoint than the Proportional controller could do by itself (without unacceptable oscillations). Is this the case?&lt;/p&gt;&#xA;" OwnerUserId="26093" LastEditorUserId="6941" LastEditDate="2020-12-30T18:57:27.467" LastActivityDate="2021-01-02T10:58:13.237" Title="Can badly tuned Feedforward still decrease steady-state error?" Tags="&lt;control&gt;&lt;pid&gt;&lt;motion&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20484" PostTypeId="1" AcceptedAnswerId="20502" CreationDate="2020-04-14T02:12:04.400" Score="2" ViewCount="229" Body="&lt;p&gt;Four wheel mecanum rover with a mass of approximately 50 Kg.  Each wheel has a 20:1 gearbox with encoder at the wheel (rather than the motor).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If this was something like a robot arm I would PID tune each DOF starting with the distal joints and work my way back to the base.  This is a case of four motors collaborating to accelerate and control the total mass.  What's the best approach to doing this?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One thought I had was to setup a tuning jig for single motor+gearbox+wheel, load it with 1/4 of the mass and tune them individually in this fashion.  This would likely work just fine.  Perhaps not the most elegant but it might do OK.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other one is to run the system open loop, issue a step change command, observe and record the response and use this to iterate a solution.  In many ways this is similar to the Twiddle algorithm, which is nothing more than sequential approximation and optimization.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'll have the hardware built next week so I can't test at the moment.  I am leaning towards tuning each motor+gearbox+wheel using the 1/4 mass jig first.  This could be followed by a fine tuning process using fine-step successive approximation to get it right with all four motors driving the entire mass.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of the questions I have has to do with what happens to this tuning in the context of a holonomic drive, which can move the mass in multiple directions and rotate about its axis (as well as rotate about any point on the xy plane).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Twiddle algorithm:&#xA;&lt;a href=&quot;https://www.youtube.com/watch?v=2uQ2BSzDvXs&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=2uQ2BSzDvXs&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="26151" LastActivityDate="2020-04-16T19:52:58.767" Title="How to PID tune a four wheel robot?" Tags="&lt;mobile-robot&gt;&lt;pid&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="20486" PostTypeId="2" ParentId="20456" CreationDate="2020-04-14T14:07:07.177" Score="3" Body="&lt;p&gt;Thanks @RLH for clarifying about the angular velocity of a rigid body. For the ones who are also confused by the naming convention in the book &lt;em&gt;Introduction to Robotics&lt;/em&gt; like I was, here's my thoughts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;the most important result of the chapter &lt;em&gt;Jacobians: velocities and static force&lt;/em&gt; in the origin convention is: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$&#xA;{^i\omega_{i+1}} = {^i\omega_{i}} + {_{i+1}^{\;\;\;i}{R}} \cdot {\dot{\theta}_{i+1}} \cdot {^{i+1}\hat{Z}_{i+1}}&#xA;$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$&#xA;{^iv_{i+1}} = {^iv_i} + {^i\omega_i} \times {^iP_{i+1}}&#xA;$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where &lt;span class=&quot;math-container&quot;&gt;$^bv_a$&lt;/span&gt; means the velocity of point &lt;span class=&quot;math-container&quot;&gt;$a$&lt;/span&gt; with respect to the reference frame (no specified) as observed in frame &lt;span class=&quot;math-container&quot;&gt;$b$&lt;/span&gt;. Now I am going to rewrite these two equations in a more tedious convention, in which &lt;span class=&quot;math-container&quot;&gt;$^Iv_{i/o}$&lt;/span&gt; means the velocity of point &lt;span class=&quot;math-container&quot;&gt;$i$&lt;/span&gt; (or frame &lt;span class=&quot;math-container&quot;&gt;$i$&lt;/span&gt;) with respect to point &lt;span class=&quot;math-container&quot;&gt;$o$&lt;/span&gt; (or frame &lt;span class=&quot;math-container&quot;&gt;$o$&lt;/span&gt;) as observed in the reference frame &lt;span class=&quot;math-container&quot;&gt;$I$&lt;/span&gt; :&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$&#xA;{^I\omega_{i+1/o} = {^I\omega_{i/o}}} + {^I\omega_{i+1/i}}&#xA;$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$&#xA;{^Iv_{i+1/o}} = {^Iv_{i/o}} + {^Iv_{i+1/i}} + {^I\omega_{i/o}} \times {^IP_{i+1/i}}&#xA;$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first equation relates to a wonderful property of angular velocity:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$&#xA;{^I\omega_{P/O}} = {^I\omega_{P/Q}} + {^I\omega_{Q/R}} + \dots + {^I\omega_{M/N}} + {^I\omega_{N/O}}&#xA;$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In other words, angular velocities add over intermediate frames. I once thought it impossible every frame on a rigid body share the same angular velocity while the rotational axis is not attached to the origin of the reference frame. It is completely not the case. @RLH has provided a good intuition about the angular velocity of a rigid body.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;To see this, it is helpful to remember that the rotational velocity of a frame is the rate of change of the angle between a line drawn in that frame and a fixed reference line. For a rigid body, the angle between any two lines drawn on the body is constant, and so all frames must have the same rotational velocity.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;The second equation is called transport theorem in kinematics. It uses the concept of angular velocity to avoid taking time derivatives of unit vectors on intermediate frames. This theorem is useful especially when trying to solve the velocity of end effector moving on parts moving on parts ... &lt;/p&gt;&#xA;" OwnerUserId="26123" LastActivityDate="2020-04-14T14:07:07.177" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20487" PostTypeId="1" CreationDate="2020-04-14T15:18:12.383" Score="1" ViewCount="38" Body="&lt;p&gt;I am trying to understand the Lucas–Kanade algorithm since I am reading a paper in which is applied the inverse compositional Lucas–Kanade algorithm, but in order to understand the latter I have to understand the first one before.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thw paper I am reading is &lt;a href=&quot;http://rpg.ifi.uzh.ch/docs/ICRA14_Forster.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;SVO: Fast Semi-Direct Monocular Visual Odometry&#xA;&lt;/a&gt;, which is really interesting, but before proceeding understand it well I have to understand how inverse compositional Lucas–Kanade algorithm works.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the paper theer is a short explanation on how this algorithm works at pag.4, but I don't understand it. So I started searching online for more. A paper that I have been suggested to read from an answer to a question I made on Stack Exchange Robotics is &lt;a href=&quot;https://www.ri.cmu.edu/pub_files/pub3/baker_simon_2004_1/baker_simon_2004_1.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Quantity Approximated, the Warp Update Rule,&#xA;and the Gradient Descent Approximation&lt;/a&gt;, which is really good, but still I am confused about this topic. I have searched more an found some videos, such as &lt;a href=&quot;https://www.youtube.com/watch?v=LV1slx9Ob7U&amp;amp;t=508s&quot; rel=&quot;nofollow noreferrer&quot;&gt;video_1&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=doTjXDFtyK0&quot; rel=&quot;nofollow noreferrer&quot;&gt;video_2&lt;/a&gt;, which explain it, but still can't grasp the concept and it is getting frustrating.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think it is useful that I give an explanation of what I have understand about this concept, even if my ideas are confused, so sorry if it does not make a lot of sense.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am tryng to apply this concept to semi direct visual odometry, so I will try to consider this context.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I have understood is that if I consider two consecutive frames, the objective of the Lucas–Kanade algorithm is to minimize the photometric error between the two images. So, since to solve this problem we have to deal with a non linear problem, it is computed a Taylor expansion to linearize the problem, and that it is solved iteratevely by updating the position of the 2D patch of the image (but it is the old frame, so at time k-1, or of the current frame, so at time k?). After some iterations, I shild obtain the photomeric error equa to zero.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I don't understand what is the difference between this and the inverse compositional Lucas–Kanade algorithm. Moreover in the paper it talks about template image and warping which I don't undestand what it means.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another interesting paper in which this is applied is &lt;a href=&quot;https://www.zora.uzh.ch/id/eprint/127902/1/TRO16_Forster-SVO.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;SVO: Semi-Direct Visual Odometry for Monocular and Multi-Camera&#xA;Systems&lt;/a&gt; , at pag.4&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can somebody help me understand how inverse compositional Lucas–Kanade algorithm and Lucas–Kanade algorithm work?&lt;/p&gt;&#xA;" OwnerUserId="21797" LastEditorUserId="21797" LastEditDate="2020-04-14T15:28:57.437" LastActivityDate="2020-04-14T15:28:57.437" Title="How does inverse compositional Lucas–Kanade algorithm work?" Tags="&lt;mobile-robot&gt;&lt;computer-vision&gt;&lt;motion-planning&gt;&lt;visual-odometry&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20488" PostTypeId="1" AcceptedAnswerId="20489" CreationDate="2020-04-15T10:16:53.590" Score="0" ViewCount="34" Body="&lt;p&gt;I have been trying to figure out why shapes in ROS are called links, ie &lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt; tags in &lt;code&gt;urdf&lt;/code&gt; and &lt;code&gt;gazebo&lt;/code&gt;? Why not &lt;code&gt;object&lt;/code&gt;s or &lt;code&gt;shape&lt;/code&gt;s as names? Why are these objects linked to? &lt;/p&gt;&#xA;" OwnerUserId="15157" LastActivityDate="2020-04-15T12:55:37.913" Title="Why are shapes in ROS and Gazebo called links?" Tags="&lt;ros&gt;&lt;gazebo&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20489" PostTypeId="2" ParentId="20488" CreationDate="2020-04-15T12:55:37.913" Score="2" Body="&lt;p&gt;Shapes are called links because they're &lt;em&gt;not&lt;/em&gt; joints. Keep in mind that these are for robotics and robotic simulations, so the primary concern is going to be expressing the robot's physical structure in such a way that it can be readily used/evaluated by conventional kinematic and dynamic techniques. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Notably, Gazebo and the URDF formats are not drafting tools and are not intended for &quot;decorating&quot; robots. There are joints, and then there are the physical structures that connect the joints (&quot;links&quot;). From a simulation perspective, the link needs to define the physical distance between joints and should have a mass, a center of mass, and a moment of inertia tensor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;These tools don't care about a front grille on a car, or body panels/trim on a robotic arm, flags, pennants, attached payloads, etc., &lt;em&gt;beyond&lt;/em&gt; their effects on the previously mentioned terms - mass, CoM, and moments of inertia. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The term you're referring to - &lt;code&gt;shape&lt;/code&gt; - &lt;em&gt;can&lt;/em&gt; be part of a link, but again the &lt;em&gt;shape&lt;/em&gt; of the link is irrelevant -  it's the physical parameters that matter. You can refer to &lt;a href=&quot;http://wiki.ros.org/urdf/XML/link#Elements&quot; rel=&quot;nofollow noreferrer&quot;&gt;elements of links from the URDF format&lt;/a&gt; and note that &quot;visual&quot; attributes are &lt;em&gt;entirely optional&lt;/em&gt;. However, if you choose to implement a visual attribute for a link, notice that &lt;strong&gt;geometry&lt;/strong&gt; is mandatory. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The geometry sub-attribute is what you're referring to as &quot;shape&quot; in the question. But again, to re-iterate the points above, Gazebo and URDF formats are intended for use with robotic simulations, so they prioritize the information that is most important kinematic and dynamic simulation. Visual appearance is irrelevant. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-04-15T12:55:37.913" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="20490" PostTypeId="2" ParentId="20480" CreationDate="2020-04-15T14:01:12.157" Score="0" Body="&lt;p&gt;Welcome to &lt;em&gt;Robotics&lt;/em&gt;, sevebebe. Your question doesn't include any supporting information, so it's hard to tell what you have and what you've done. From the &lt;a href=&quot;http://wiki.ros.org/turtlebot_gazebo/Tutorials/indigo/Gazebo%20Bringup%20Guide&quot; rel=&quot;nofollow noreferrer&quot;&gt;bringup guide&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;In this tutorial, we will bring up the turtlebot in the Gazebo simulator. This tutorial assumes you have completed &lt;a href=&quot;http://wiki.ros.org/turtlebot/Tutorials/indigo/Turtlebot%20Installation&quot; rel=&quot;nofollow noreferrer&quot;&gt;TurtleBot Installation&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Did you install the turtlebot? What do you get if you run the following?&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ roslaunch turtlebot_gazebo turtlebot_world.launch&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-04-15T14:01:12.157" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20491" PostTypeId="2" ParentId="20482" CreationDate="2020-04-15T15:05:28.940" Score="1" Body="&lt;p&gt;Like &lt;a href=&quot;https://robotics.stackexchange.com/questions/20482/how-to-take-prediction-step-in-particle-filter#comment33657_20482&quot;&gt;edwinem mentioned&lt;/a&gt;, the motion model just describes how the object should move. Consider gravity:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\ddot{y} = -g \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you wanted a motion model for position, then:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;y = y_0 + \dot{y}t + \frac{1}{2}\ddot{y}t^2 \\&#xA;y = y_0 + \dot{y}t - \frac{1}{2}gt^2 \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if you have a ball at &lt;span class=&quot;math-container&quot;&gt;$y_0 = 5$&lt;/span&gt;, does the ball go &lt;em&gt;down&lt;/em&gt; in the next instant or does it go &lt;em&gt;up&lt;/em&gt;? The answer to that depends on the &lt;em&gt;previous state&lt;/em&gt; of your system. If it had a vertical velocity such that &lt;span class=&quot;math-container&quot;&gt;$\left(\dot{y}t\right)&amp;gt;\left(\frac{1}{2}gt^2\right)$&lt;/span&gt; then the ball goes up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are finding that your predictions are very far from your measured values, then either your estimated states &lt;code&gt;X_predict(t-1)&lt;/code&gt; are wrong or your model is wrong. That is, you're either starting in the wrong location or you're moving in the wrong direction. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;:EDIT:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you don't think anything should be moving, then you could do the same, but now instead of:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\ddot{y} = -g\\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You could model acceleration as resulting strictly from some noise:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\ddot{y} = \sigma\\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And then modify the position model to rely on &quot;incremental&quot; updates, such that:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;y = y_0 + \dot{y}t + \frac{1}{2}\ddot{y}t^2\\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;becomes:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;y_k = y_{k-1} + \dot{y}\Delta t + \frac{1}{2}\ddot{y}\Delta t^2 \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And then, if the noisy acceleration is an input to the system, you wind up with:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\left[\begin{matrix}&#xA;\dot{y} \\&#xA;\ddot{y} \end{matrix}\right] = \left[\begin{matrix}&#xA;0 &amp;amp; 1\\&#xA;0 &amp;amp; 0 \end{matrix}\right]\left[\begin{matrix} &#xA;y \\&#xA;\dot{y}\end{matrix}\right] + &#xA;\left[\begin{matrix}&#xA;0 \\&#xA;1\end{matrix}\right]\sigma&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you depict this as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{x} = Ax + Bu \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;then you can do a kind of integration, such that:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;x_k = I*x_{k-1} + \left(\dot{x}\Delta t\right) \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and so you get:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\begin{matrix}&#xA;x_k \\&#xA;\left[\begin{matrix}&#xA;y_k \\&#xA;\dot{y}_k \end{matrix}\right]\end{matrix} = \begin{matrix}&#xA;I \\&#xA;\left[\begin{matrix}&#xA;1 &amp;amp; 0\\&#xA;0 &amp;amp; 1 \end{matrix}\right]\end{matrix} \begin{matrix}&#xA;x_{k-1} \\&#xA;\left[\begin{matrix} &#xA;y_{k-1} \\&#xA;\dot{y}_{k-1}\end{matrix}\right]\end{matrix} + \left(\begin{matrix}&#xA;A\Delta t \\&#xA;\left[\begin{matrix}&#xA;0 &amp;amp; \Delta t\\&#xA;0 &amp;amp; 0 \end{matrix}\right]\end{matrix}\begin{matrix}&#xA;x_{k-1} \\&#xA;\left[\begin{matrix} &#xA;y_{k-1} \\&#xA;\dot{y}_{k-1}\end{matrix}\right]\end{matrix} + &#xA;\begin{matrix}&#xA;B\Delta t &amp;amp; \sigma\\&#xA;\left[\begin{matrix}&#xA;0 \\&#xA;\Delta t\end{matrix}\right] &amp;amp; \sigma\end{matrix}\right)&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;which of course reduces to:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\left[\begin{matrix}&#xA;y_k \\&#xA;\dot{y}_k \end{matrix}\right] = \left[\begin{matrix}&#xA;1 &amp;amp; \Delta t\\&#xA;0 &amp;amp; 1 \end{matrix}\right]\left[\begin{matrix} &#xA;y_{k-1} \\&#xA;\dot{y}_{k-1}\end{matrix}\right] + &#xA;\left[\begin{matrix}&#xA;0 \\&#xA;\Delta t\end{matrix}\right]\sigma&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The above would be a decent first motion model &lt;em&gt;if you had no prior knowledge&lt;/em&gt; of how you expected something to move. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2020-04-16T19:58:33.150" LastActivityDate="2020-04-16T19:58:33.150" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20492" PostTypeId="2" ParentId="20456" CreationDate="2020-04-15T17:04:26.630" Score="2" Body="&lt;p&gt;There is a way to derive the joint velocity kinematics from the joint position kinematics.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For me it is easier to express everything on a common coordinate system (the inertial frame) such that vector algebra can be done between terms on different links. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Each link &lt;span class=&quot;math-container&quot;&gt;$i$&lt;/span&gt; has a local to world transformation matrix &lt;span class=&quot;math-container&quot;&gt;$\mathbf{R}_i$&lt;/span&gt; such that for example the local joint axis &lt;span class=&quot;math-container&quot;&gt;${}^i\boldsymbol{\hat{Z}}_i$&lt;/span&gt; expressed in world coordinates is &lt;span class=&quot;math-container&quot;&gt;$$ \boldsymbol{\hat{Z}}_i = \mathbf{R}_i {}^i\boldsymbol{\hat{Z}}_i \tag{1}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The rotational kinematics of the next joint is&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ \mathbf{R}_{i+1} = \mathbf{R}_i \, {\rm rot}({}^i\boldsymbol{\hat{Z}}_i, \theta_{i+1}) \tag{2}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now take the derivative of the above and note the following sub-expressions, derived from the time derivative of vectors in rotating frames&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ \begin{aligned}&#xA; \tfrac{\rm d}{{\rm d}t} \mathbf{R}_i &amp;amp; = \boldsymbol{\omega}_i \times \mathbf{R}_i \\&#xA; \tfrac{\rm d}{{\rm d}t} \mathbf{R}_{i+1} &amp;amp; = \boldsymbol{\omega}_{i+1} \times \mathbf{R}_{i+1} \\&#xA; \tfrac{\rm d}{{\rm d}t} {\rm rot}({}^i\boldsymbol{\hat{Z}}_i, \theta_{i+1}) &amp;amp; = \left( {}^i\boldsymbol{\hat{Z}}_i, \dot\theta_{i+1} \right) \times {\rm rot}({}^i\boldsymbol{\hat{Z}}_i, \theta_{i+1})&#xA;\end{aligned} \tag{3}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now use (3) into (2) and use the product rule to get&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$\begin{aligned} &#xA;\tfrac{\rm d}{{\rm d}t} \mathbf{R}_{i+1} &amp;amp;=\left( \tfrac{\rm d}{{\rm d}t}\mathbf{R}_i \right)\, {\rm rot}({}^i\boldsymbol{\hat{Z}}_i\, \theta_{i+1}) +  \mathbf{R}_i \,\left( \tfrac{\rm d}{{\rm d}t}{\rm rot}({}^i\boldsymbol{\hat{Z}}_i\, \theta_{i+1})\right) \\ &#xA;\boldsymbol{\omega}_{i+1} \times \mathbf{R}_{i+1} &amp;amp; = \boldsymbol{\omega}_i \times \mathbf{R}_i\, {\rm rot}({}^i\boldsymbol{\hat{Z}}_i\, \theta_{i+1}) +  \mathbf{R}_i \,\left( {}^i\boldsymbol{\hat{Z}}_i\, \dot\theta_{i+1} \right) \times {\rm rot}({}^i\boldsymbol{\hat{Z}}_i, \theta_{i+1}) \\&#xA;&amp;amp; =\boldsymbol{\omega}_i \times \mathbf{R}_{i+1} +  \left( \mathbf{R}_i \,{}^i\boldsymbol{\hat{Z}}_i, \dot\theta_{i+1} \right) \times \left( \mathbf{R}_i \,{\rm rot}({}^i\boldsymbol{\hat{Z}}_i, \theta_{i+1}) \right) \\&#xA; &amp;amp; = \boldsymbol{\omega}_i \times \mathbf{R}_{i+1} + \boldsymbol{\hat{Z}}_i\, \dot\theta_{i+1} \times \mathbf{R}_{i+1}&#xA;\end{aligned} \tag{4}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From which you factor out &lt;span class=&quot;math-container&quot;&gt;$\mathbf{R}_{i+1}$&lt;/span&gt; to get&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ \boxed{ \boldsymbol{\omega}_{i+1} = \boldsymbol{\omega}_{i} + \boldsymbol{\hat{Z}}_i\, \dot\theta_{i+1} } \tag{5}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The interpretation is clear now. Add the velocity of link &lt;span class=&quot;math-container&quot;&gt;$i$&lt;/span&gt; to the rotation about this axis (in word coordinates) &lt;span class=&quot;math-container&quot;&gt;$\boldsymbol{\hat{Z}}_i$&lt;/span&gt; with speed &lt;span class=&quot;math-container&quot;&gt;$\dot{\theta}_i$&lt;/span&gt;.&lt;/p&gt;&#xA;" OwnerUserId="691" LastActivityDate="2020-04-15T17:04:26.630" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20493" PostTypeId="2" ParentId="14505" CreationDate="2020-04-15T21:35:01.450" Score="0" Body="&lt;p&gt;I think there is a missing space in the makefile. the flag should be on a separate line from directories.&#xA;That is as far as I can say since I don't have the file.&lt;/p&gt;&#xA;" OwnerUserId="23597" LastActivityDate="2020-04-15T21:35:01.450" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20494" PostTypeId="1" AcceptedAnswerId="20499" CreationDate="2020-04-16T01:27:45.200" Score="0" ViewCount="57" Body="&lt;p&gt;How can you place two objects that seem to overlap with their units but appear stacked on top of each other [original intent] in RViz?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was watching &lt;a href=&quot;https://www.youtube.com/watch?v=Ale55LcdZeE&quot; rel=&quot;nofollow noreferrer&quot;&gt;this video&lt;/a&gt; tutorial on ROS and URDF. I have tried to paste screenshots to clarify but feel free to watch the video if you have the time. The presenter is showing how to create a joint between &lt;code&gt;base link&lt;/code&gt; and &lt;code&gt;link 01&lt;/code&gt; in the first image below. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/YlmSq.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/YlmSq.png&quot; alt=&quot;plan&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's the &lt;code&gt;xacro&lt;/code&gt; file that I am confused about. If the &lt;code&gt;xyz&lt;/code&gt; coordinates of the origin of the box are &lt;code&gt;[0 0 0]&lt;/code&gt; and its dimensions are &lt;code&gt;[1 1 1]&lt;/code&gt;, how can the cylinder have its origin at &lt;code&gt;[0 0 0.2]&lt;/code&gt;? Isn't it within the box?  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/xrMZV.png&quot; alt=&quot;xacro.xml file&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I considered that the &lt;code&gt;xyz&lt;/code&gt; coordinates may be relative to the link itself but where does RViz know where to place the object in the world? Moreover, the joint is placed at &lt;code&gt;[0 0 0.5]&lt;/code&gt; and this makes sense. Shouldn't the origin of the cylinder have been &lt;code&gt;[0 0 1.2]&lt;/code&gt;? This is how it looks like in RViz. &#xA;&lt;a href=&quot;https://i.stack.imgur.com/xCqAN.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xCqAN.png&quot; alt=&quot;RViz image&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15157" LastActivityDate="2020-04-25T12:57:47.023" Title="Coordinates seem to show overlapping but RViz doesn't" Tags="&lt;ros&gt;&lt;gazebo&gt;&lt;rviz&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20495" PostTypeId="1" CreationDate="2020-04-16T03:42:26.187" Score="0" ViewCount="48" Body="&lt;p&gt;So, im using a ESP-12E nothing special about it, to try and run this code i found from a custom library example.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;/* ============================================&#xA;I2Cdev device library code is placed under the MIT license&#xA;Copyright (c) 2012 Jeff Rowberg&#xA;&#xA;Permission is hereby granted, free of charge, to any person obtaining a copy&#xA;of this software and associated documentation files (the &quot;Software&quot;), to deal&#xA;in the Software without restriction, including without limitation the rights&#xA;to use, copy, modify, merge, publish, distribute, sublicense, and/or sell&#xA;copies of the Software, and to permit persons to whom the Software is&#xA;furnished to do so, subject to the following conditions:&#xA;&#xA;The above copyright notice and this permission notice shall be included in&#xA;all copies or substantial portions of the Software.&#xA;&#xA;THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR&#xA;IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,&#xA;FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE&#xA;AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER&#xA;LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,&#xA;OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN&#xA;THE SOFTWARE.&#xA;===============================================&#xA;*/&#xA;&#xA;/* This driver reads quaternion data from the MPU6060 and sends&#xA;   Open Sound Control messages.&#xA;&#xA;  GY-521  NodeMCU&#xA;  MPU6050 devkit 1.0&#xA;  board   Lolin         Description&#xA;  ======= ==========    ====================================================&#xA;  VCC     VU (5V USB)   Not available on all boards so use 3.3V if needed.&#xA;  GND     G             Ground&#xA;  SCL     D1 (GPIO05)   I2C clock&#xA;  SDA     D2 (GPIO04)   I2C data&#xA;  XDA     not connected&#xA;  XCL     not connected&#xA;  AD0     not connected&#xA;  INT     D8 (GPIO15)   Interrupt pin&#xA;&#xA;*/&#xA;&#xA;#if defined(ESP8266)&#xA;#include &amp;lt;ESP8266WiFi.h&amp;gt;&#xA;#else&#xA;#include &amp;lt;WiFi.h&amp;gt;&#xA;#endif&#xA;#include &amp;lt;DNSServer.h&amp;gt;&#xA;#include &amp;lt;WiFiClient.h&amp;gt;&#xA;#include &amp;lt;WiFiUdp.h&amp;gt;&#xA;#include &amp;lt;OSCMessage.h&amp;gt;&#xA;#include &amp;lt;WiFiManager.h&amp;gt;         //https://github.com/tzapu/WiFiManager&#xA;&#xA;// I2Cdev and MPU6050 must be installed as libraries, or else the .cpp/.h files&#xA;// for both classes must be in the include path of your project&#xA;#include &quot;I2Cdev.h&quot;&#xA;&#xA;#include &quot;MPU6050_6Axis_MotionApps20.h&quot;&#xA;//#include &quot;MPU6050.h&quot; // not necessary if using MotionApps include file&#xA;&#xA;// Arduino Wire library is required if I2Cdev I2CDEV_ARDUINO_WIRE implementation&#xA;// is used in I2Cdev.h&#xA;#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE&#xA;    #include &quot;Wire.h&quot;&#xA;#endif&#xA;&#xA;// class default I2C address is 0x68&#xA;// specific I2C addresses may be passed as a parameter here&#xA;// AD0 low = 0x68 (default for SparkFun breakout and InvenSense evaluation board)&#xA;// AD0 high = 0x69&#xA;MPU6050 mpu;&#xA;//MPU6050 mpu(0x69); // &amp;lt;-- use for AD0 high&#xA;&#xA;/* =========================================================================&#xA;   NOTE: In addition to connection 5/3.3v, GND, SDA, and SCL, this sketch&#xA;   depends on the MPU-6050's INT pin being connected to the ESP8266 GPIO15&#xA;   pin.&#xA; * ========================================================================= */&#xA;&#xA;// MPU control/status vars&#xA;bool dmpReady = false;  // set true if DMP init was successful&#xA;uint8_t mpuIntStatus;   // holds actual interrupt status byte from MPU&#xA;uint8_t devStatus;      // return status after each device operation (0 = success, !0 = error)&#xA;uint16_t packetSize;    // expected DMP packet size (default is 42 bytes)&#xA;uint16_t fifoCount;     // count of all bytes currently in FIFO&#xA;uint8_t fifoBuffer[64]; // FIFO storage buffer&#xA;&#xA;// orientation/motion vars&#xA;Quaternion q;           // [w, x, y, z]         quaternion container&#xA;VectorInt16 aa;         // [x, y, z]            accel sensor measurements&#xA;VectorInt16 aaReal;     // [x, y, z]            gravity-free accel sensor measurements&#xA;VectorInt16 aaWorld;    // [x, y, z]            world-frame accel sensor measurements&#xA;VectorFloat gravity;    // [x, y, z]            gravity vector&#xA;&#xA;&#xA;// uncomment &quot;OUTPUT_READABLE_QUATERNION&quot; if you want to see the actual&#xA;// quaternion components in a [w, x, y, z] format (not best for parsing&#xA;// on a remote host such as Processing or something though)&#xA;#define OUTPUT_READABLE_QUATERNION&#xA;&#xA;// uncomment &quot;OUTPUT_READABLE_EULER&quot; if you want to see Euler angles&#xA;// (in degrees) calculated from the quaternions coming from the FIFO.&#xA;// Note that Euler angles suffer from gimbal lock (for more info, see&#xA;// http://en.wikipedia.org/wiki/Gimbal_lock)&#xA;//#define OUTPUT_READABLE_EULER&#xA;&#xA;// uncomment &quot;OUTPUT_READABLE_YAWPITCHROLL&quot; if you want to see the yaw/&#xA;// pitch/roll angles (in degrees) calculated from the quaternions coming&#xA;// from the FIFO. Note this also requires gravity vector calculations.&#xA;// Also note that yaw/pitch/roll angles suffer from gimbal lock (for&#xA;// more info, see: http://en.wikipedia.org/wiki/Gimbal_lock)&#xA;//#define OUTPUT_READABLE_YAWPITCHROLL&#xA;&#xA;// uncomment &quot;OUTPUT_READABLE_REALACCEL&quot; if you want to see acceleration&#xA;// components with gravity removed. This acceleration reference frame is&#xA;// not compensated for orientation, so +X is always +X according to the&#xA;// sensor, just without the effects of gravity. If you want acceleration&#xA;// compensated for orientation, us OUTPUT_READABLE_WORLDACCEL instead.&#xA;//#define OUTPUT_READABLE_REALACCEL&#xA;&#xA;// uncomment &quot;OUTPUT_READABLE_WORLDACCEL&quot; if you want to see acceleration&#xA;// components with gravity removed and adjusted for the world frame of&#xA;// reference (yaw is relative to initial orientation, since no magnetometer&#xA;// is present in this case). Could be quite handy in some cases.&#xA;#define OUTPUT_READABLE_WORLDACCEL&#xA;&#xA;// uncomment &quot;OUTPUT_TEAPOT_OSC&quot; if you want output that matches the&#xA;// format used for the InvenSense teapot demo&#xA;//#define OUTPUT_TEAPOT_OSC&#xA;&#xA;&#xA;#ifdef OUTPUT_READABLE_EULER&#xA;float euler[3];         // [psi, theta, phi]    Euler angle container&#xA;#endif&#xA;#ifdef OUTPUT_READABLE_YAWPITCHROLL&#xA;float ypr[3];           // [yaw, pitch, roll]   yaw/pitch/roll container and gravity vector&#xA;#endif&#xA;&#xA;#define INTERRUPT_PIN 15 // use pin 15 on ESP8266&#xA;&#xA;const char DEVICE_NAME[] = &quot;mpu6050&quot;;&#xA;&#xA;WiFiUDP Udp;                                // A UDP instance to let us send and receive packets over UDP&#xA;const IPAddress outIp(192, 168, 1, 11);     // remote IP to receive OSC&#xA;const unsigned int outPort = 9999;          // remote port to receive OSC&#xA;&#xA;// ================================================================&#xA;// ===               INTERRUPT DETECTION ROUTINE                ===&#xA;// ================================================================&#xA;&#xA;volatile bool mpuInterrupt = false;     // indicates whether MPU interrupt pin has gone high&#xA;void dmpDataReady() {&#xA;    mpuInterrupt = true;&#xA;}&#xA;&#xA;void mpu_setup()&#xA;{&#xA;  // join I2C bus (I2Cdev library doesn't do this automatically)&#xA;#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE&#xA;  Wire.begin();&#xA;  Wire.setClock(400000); // 400kHz I2C clock. Comment this line if having compilation difficulties&#xA;#elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE&#xA;  Fastwire::setup(400, true);&#xA;#endif&#xA;&#xA;  // initialize device&#xA;  Serial.println(F(&quot;Initializing I2C devices...&quot;));&#xA;  mpu.initialize();&#xA;  pinMode(INTERRUPT_PIN, INPUT);&#xA;&#xA;  // verify connection&#xA;  Serial.println(F(&quot;Testing device connections...&quot;));&#xA;  Serial.println(mpu.testConnection() ? F(&quot;MPU6050 connection successful&quot;) : F(&quot;MPU6050 connection failed&quot;));&#xA;&#xA;  // load and configure the DMP&#xA;  Serial.println(F(&quot;Initializing DMP...&quot;));&#xA;  devStatus = mpu.dmpInitialize();&#xA;&#xA;  // supply your own gyro offsets here, scaled for min sensitivity&#xA;  mpu.setXGyroOffset(220);&#xA;  mpu.setYGyroOffset(76);&#xA;  mpu.setZGyroOffset(-85);&#xA;  mpu.setZAccelOffset(1788); // 1688 factory default for my test chip&#xA;&#xA;  // make sure it worked (returns 0 if so)&#xA;  if (devStatus == 0) {&#xA;    // turn on the DMP, now that it's ready&#xA;    Serial.println(F(&quot;Enabling DMP...&quot;));&#xA;    mpu.setDMPEnabled(true);&#xA;&#xA;    // enable Arduino interrupt detection&#xA;    Serial.println(F(&quot;Enabling interrupt detection (Arduino external interrupt 0)...&quot;));&#xA;    attachInterrupt(digitalPinToInterrupt(INTERRUPT_PIN), dmpDataReady, RISING);&#xA;    mpuIntStatus = mpu.getIntStatus();&#xA;&#xA;    // set our DMP Ready flag so the main loop() function knows it's okay to use it&#xA;    Serial.println(F(&quot;DMP ready! Waiting for first interrupt...&quot;));&#xA;    dmpReady = true;&#xA;&#xA;    // get expected DMP packet size for later comparison&#xA;    packetSize = mpu.dmpGetFIFOPacketSize();&#xA;  } else {&#xA;    // ERROR!&#xA;    // 1 = initial memory load failed&#xA;    // 2 = DMP configuration updates failed&#xA;    // (if it's going to break, usually the code will be 1)&#xA;    Serial.print(F(&quot;DMP Initialization failed (code &quot;));&#xA;    Serial.print(devStatus);&#xA;    Serial.println(F(&quot;)&quot;));&#xA;  }&#xA;}&#xA;&#xA;void setup(void)&#xA;{&#xA;  Serial.begin(9600);&#xA;  Serial.println(F(&quot;\nOrientation Sensor OSC output&quot;)); Serial.println();&#xA;&#xA;  //WiFiManager&#xA;  //Local intialization. Once its business is done, there is no need to keep it around&#xA;  WiFiManager wifiManager;&#xA;  //reset saved settings&#xA;  //wifiManager.resetSettings();&#xA;&#xA;  //fetches ssid and pass from eeprom and tries to connect&#xA;  //if it does not connect it starts an access point with the specified name&#xA;  //and goes into a blocking loop awaiting configuration&#xA;  wifiManager.autoConnect(DEVICE_NAME);&#xA;&#xA;  Serial.print(F(&quot;WiFi connected! IP address: &quot;));&#xA;  Serial.println(WiFi.localIP());&#xA;&#xA;  mpu_setup();&#xA;}&#xA;&#xA;void mpu_loop()&#xA;{&#xA;  // if programming failed, don't try to do anything&#xA;  if (!dmpReady) return;&#xA;&#xA;  // wait for MPU interrupt or extra packet(s) available&#xA;  if (!mpuInterrupt &amp;amp;&amp;amp; fifoCount &amp;lt; packetSize) return;&#xA;&#xA;  // reset interrupt flag and get INT_STATUS byte&#xA;  mpuInterrupt = false;&#xA;  mpuIntStatus = mpu.getIntStatus();&#xA;&#xA;  // get current FIFO count&#xA;  fifoCount = mpu.getFIFOCount();&#xA;&#xA;  // check for overflow (this should never happen unless our code is too inefficient)&#xA;  if ((mpuIntStatus &amp;amp; 0x10) || fifoCount == 1024) {&#xA;    // reset so we can continue cleanly&#xA;    mpu.resetFIFO();&#xA;    Serial.println(F(&quot;FIFO overflow!&quot;));&#xA;&#xA;    // otherwise, check for DMP data ready interrupt (this should happen frequently)&#xA;  } else if (mpuIntStatus &amp;amp; 0x02) {&#xA;    // wait for correct available data length, should be a VERY short wait&#xA;    while (fifoCount &amp;lt; packetSize) fifoCount = mpu.getFIFOCount();&#xA;&#xA;    // read a packet from FIFO&#xA;    mpu.getFIFOBytes(fifoBuffer, packetSize);&#xA;&#xA;    // track FIFO count here in case there is &amp;gt; 1 packet available&#xA;    // (this lets us immediately read more without waiting for an interrupt)&#xA;    fifoCount -= packetSize;&#xA;&#xA;#ifdef OUTPUT_READABLE_QUATERNION&#xA;    // display quaternion values in easy matrix form: w x y z&#xA;    mpu.dmpGetQuaternion(&amp;amp;q, fifoBuffer);&#xA;    Serial.print(&quot;quat\t&quot;);&#xA;    Serial.print(q.w);&#xA;    Serial.print(&quot;\t&quot;);&#xA;    Serial.print(q.x);&#xA;    Serial.print(&quot;\t&quot;);&#xA;    Serial.print(q.y);&#xA;    Serial.print(&quot;\t&quot;);&#xA;    Serial.println(q.z);&#xA;#endif&#xA;&#xA;#ifdef OUTPUT_TEAPOT_OSC&#xA;#ifndef OUTPUT_READABLE_QUATERNION&#xA;    // display quaternion values in easy matrix form: w x y z&#xA;    mpu.dmpGetQuaternion(&amp;amp;q, fifoBuffer);&#xA;#endif&#xA;    // Send OSC message&#xA;    OSCMessage msg(&quot;/imuquat&quot;);&#xA;    msg.add((float)q.w);&#xA;    msg.add((float)q.x);&#xA;    msg.add((float)q.y);&#xA;    msg.add((float)q.z);&#xA;&#xA;    Udp.beginPacket(outIp, outPort);&#xA;    msg.send(Udp);&#xA;    Udp.endPacket();&#xA;&#xA;    msg.empty();&#xA;#endif&#xA;&#xA;#ifdef OUTPUT_READABLE_EULER&#xA;    // display Euler angles in degrees&#xA;    mpu.dmpGetQuaternion(&amp;amp;q, fifoBuffer);&#xA;    mpu.dmpGetEuler(euler, &amp;amp;q);&#xA;    Serial.print(&quot;euler\t&quot;);&#xA;    Serial.print(euler[0] * 180/M_PI);&#xA;    Serial.print(&quot;\t&quot;);&#xA;    Serial.print(euler[1] * 180/M_PI);&#xA;    Serial.print(&quot;\t&quot;);&#xA;    Serial.println(euler[2] * 180/M_PI);&#xA;#endif&#xA;&#xA;#ifdef OUTPUT_READABLE_YAWPITCHROLL&#xA;    // display Euler angles in degrees&#xA;    mpu.dmpGetQuaternion(&amp;amp;q, fifoBuffer);&#xA;    mpu.dmpGetGravity(&amp;amp;gravity, &amp;amp;q);&#xA;    mpu.dmpGetYawPitchRoll(ypr, &amp;amp;q, &amp;amp;gravity);&#xA;    Serial.print(&quot;ypr\t&quot;);&#xA;    Serial.print(ypr[0] * 180/M_PI);&#xA;    Serial.print(&quot;\t&quot;);&#xA;    Serial.print(ypr[1] * 180/M_PI);&#xA;    Serial.print(&quot;\t&quot;);&#xA;    Serial.println(ypr[2] * 180/M_PI);&#xA;#endif&#xA;&#xA;#ifdef OUTPUT_READABLE_REALACCEL&#xA;    // display real acceleration, adjusted to remove gravity&#xA;    mpu.dmpGetQuaternion(&amp;amp;q, fifoBuffer);&#xA;    mpu.dmpGetAccel(&amp;amp;aa, fifoBuffer);&#xA;    mpu.dmpGetGravity(&amp;amp;gravity, &amp;amp;q);&#xA;    mpu.dmpGetLinearAccel(&amp;amp;aaReal, &amp;amp;aa, &amp;amp;gravity);&#xA;    Serial.print(&quot;areal\t&quot;);&#xA;    Serial.print(aaReal.x);&#xA;    Serial.print(&quot;\t&quot;);&#xA;    Serial.print(aaReal.y);&#xA;    Serial.print(&quot;\t&quot;);&#xA;    Serial.println(aaReal.z);&#xA;#endif&#xA;&#xA;#ifdef OUTPUT_READABLE_WORLDACCEL&#xA;    // display initial world-frame acceleration, adjusted to remove gravity&#xA;    // and rotated based on known orientation from quaternion&#xA;    mpu.dmpGetQuaternion(&amp;amp;q, fifoBuffer);&#xA;    mpu.dmpGetAccel(&amp;amp;aa, fifoBuffer);&#xA;    mpu.dmpGetGravity(&amp;amp;gravity, &amp;amp;q);&#xA;    mpu.dmpGetLinearAccel(&amp;amp;aaReal, &amp;amp;aa, &amp;amp;gravity);&#xA;    mpu.dmpGetLinearAccelInWorld(&amp;amp;aaWorld, &amp;amp;aaReal, &amp;amp;q);&#xA;    Serial.print(&quot;aworld\t&quot;);&#xA;    Serial.print(aaWorld.x);&#xA;    Serial.print(&quot;\t&quot;);&#xA;    Serial.print(aaWorld.y);&#xA;    Serial.print(&quot;\t&quot;);&#xA;    Serial.println(aaWorld.z);&#xA;#endif&#xA;  }&#xA;}&#xA;&#xA;/**************************************************************************/&#xA;/*&#xA;    Arduino loop function, called once 'setup' is complete (your own code&#xA;    should go here)&#xA;*/&#xA;/**************************************************************************/&#xA;void loop(void)&#xA;{&#xA;  if (WiFi.status() != WL_CONNECTED) {&#xA;    Serial.println();&#xA;    Serial.println(&quot;*** Disconnected from AP so rebooting ***&quot;);&#xA;    Serial.println();&#xA;    ESP.reset();&#xA;  }&#xA;&#xA;  mpu_loop();&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Heres a picture of my basic setup as code asks&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Ex8uZ.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Ex8uZ.jpg&quot; alt=&quot;Heres a picture of my basic setup as code asks&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;but when i log onto the Serial, nothing shows up, even though ive installed the drivers, wiped the flash, added extra boards library, and everything else. Im super confused and google bears no help either, that's why im here. I can give more if specifically asked for, but other than that, heres a snippit of the log i get in arduino.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Executable segment sizes:&#xA;&#xA;&#xA;IROM   : 284944          - code in flash         (default or ICACHE_FLASH_ATTR) &#xA;&#xA;&#xA;IRAM   : 28080   / 32768 - code in IRAM          (ICACHE_RAM_ATTR, ISRs...) &#xA;&#xA;&#xA;DATA   : 1264  )         - initialized variables (global, static) in RAM/HEAP &#xA;&#xA;&#xA;RODATA : 3664  ) / 81920 - constants             (global, static) in RAM/HEAP &#xA;&#xA;&#xA;BSS    : 30240 )         - zeroed variables      (global, static) in RAM/HEAP &#xA;&#xA;&#xA;Sketch uses 317952 bytes (30%) of program storage space. Maximum is 1044464 bytes.&#xA;Global variables use 35168 bytes (42%) of dynamic memory, leaving 46752 bytes for local variables. Maximum is 81920 bytes.&#xA;esptool.py v2.8&#xA;Serial port COM3&#xA;Connecting....&#xA;Chip is ESP8266EX&#xA;Features: WiFi&#xA;Crystal is 26MHz&#xA;MAC: 2c:f4:32:3c:71:07&#xA;Uploading stub...&#xA;Running stub...&#xA;Stub running...&#xA;Configuring flash size...&#xA;Auto-detected Flash size: 4MB&#xA;Compressed 322112 bytes to 230789...&#xA;&#xA;Writing at 0x00000000... (6 %)&#xA;Writing at 0x00004000... (13 %)&#xA;Writing at 0x00008000... (20 %)&#xA;Writing at 0x0000c000... (26 %)&#xA;Writing at 0x00010000... (33 %)&#xA;Writing at 0x00014000... (40 %)&#xA;Writing at 0x00018000... (46 %)&#xA;Writing at 0x0001c000... (53 %)&#xA;Writing at 0x00020000... (60 %)&#xA;Writing at 0x00024000... (66 %)&#xA;Writing at 0x00028000... (73 %)&#xA;Writing at 0x0002c000... (80 %)&#xA;Writing at 0x00030000... (86 %)&#xA;Writing at 0x00034000... (93 %)&#xA;Writing at 0x00038000... (100 %)&#xA;Wrote 322112 bytes (230789 compressed) at 0x00000000 in 20.5 seconds (effective 125.8 kbit/s)...&#xA;Hash of data verified.&#xA;&#xA;Leaving...&#xA;Hard resetting via RTS pin...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Any help is appreciated! =)&lt;/p&gt;&#xA;" OwnerUserId="26170" LastActivityDate="2020-04-16T03:42:26.187" Title="NodeMCU ESP-12E Wont Print to Serial in Arduino IDE" Tags="&lt;arduino&gt;&lt;kinematics&gt;&lt;motion-planning&gt;&lt;gyroscope&gt;&lt;accelerometer&gt;" AnswerCount="0" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="20496" PostTypeId="2" ParentId="20482" CreationDate="2020-04-16T05:49:35.783" Score="4" Body="&lt;p&gt;The prediction step generates a new set of states from the old set of states. The motion model of the system is used to make this best estimate of what we think the new state might be. The motion model basically uses the information about the previous state and the current control input to determine the new state. Some noise is also added for stochasticity. In cases where you do not have a motion model or any information about the control input, just adding noise is an option but most likely gives a less accurate estimate.&#xA;In a particle filter, the the accuracy of your best estimate/particle really depends on how well you have propagated your new particles into the next time step using the motion model. As you can imagine, having a higher number of particles to represent the distribution increases the chances that one of them is very close to the actual state. &lt;/p&gt;&#xA;" OwnerUserId="26172" LastActivityDate="2020-04-16T05:49:35.783" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20497" PostTypeId="1" CreationDate="2020-04-16T06:45:13.873" Score="2" ViewCount="88" Body="&lt;p&gt;I'm looking for help on a project where I will be placing sensor data in 3D space using augmented reality. Most solutions I have found for finding position with an IMU involve the magnetometer, but for my implementation that will not work because I am measuring magnetic fields so the magnetometer value will definitely not be pointing towards any poles. How would I be able to calculate position?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Relevant info:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;I am using four IMUs, so I could possibly filter noise by averaging their values.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;I will only be measuring for a short time (15-20seconds).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The magnet being measured will be stationary, so it could possibly be used as some sort of reference point?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Any help is appreciated!&#xA;Thanks in advance! &lt;/p&gt;&#xA;" OwnerUserId="26173" LastActivityDate="2021-05-16T16:47:04.843" Title="Is it possible to track position using gyroscope and accelerometer without a magnetometer?" Tags="&lt;control&gt;&lt;sensors&gt;&lt;imu&gt;&lt;sensor-fusion&gt;&lt;precise-positioning&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20498" PostTypeId="2" ParentId="3021" CreationDate="2020-04-16T09:07:59.983" Score="-1" Body="&lt;p&gt;I strongly suggest using a single sound card instead of multiple USB microphones or sound cards. For an application like sound location, it is essential that the samples from the different microphones are recorded at exactly the same time. When using multiple devices, that's next to impossible; they will be slightly out of sync when the recording starts, and because their sample rates are not exactly the same, after some time the time difference becomes substantial. This can be counteracted using adaptive clock synchronization and adaptive rate resampling (see alsaloop for an example) but you will never obtain the precision a single sound card can get you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So this means either using the stereo input of a standard sound card and dealing with the ambiguities this introduces or using a (USB) sound card that has 4 (microphone) inputs. Also a tip on the microphones: get omnidirectional ones, it makes the samples much easier to compare.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not aware of the kind of the kind of software you're looking for, but directly working with ALSA is not too difficult; ALSA comes with great examples and audio data is relatively easy to work with compared to image data.&lt;/p&gt;&#xA;" OwnerUserId="26175" LastActivityDate="2020-04-16T09:07:59.983" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20499" PostTypeId="2" ParentId="20494" CreationDate="2020-04-16T14:14:32.297" Score="1" Body="&lt;p&gt;The origin defined inside &lt;code&gt;link_01&lt;/code&gt; is &lt;em&gt;not&lt;/em&gt; the position of the cylinder in the global coordinate frame (the &quot;world&quot;), but in its own private frame. By default the object's center lies at the origin of its own coordinate frame, but in this case, the cylinder is shifted &lt;span class=&quot;math-container&quot;&gt;$0.2 m$&lt;/span&gt; upwards along the &lt;span class=&quot;math-container&quot;&gt;$z$&lt;/span&gt; axis, placing its bottom on the origin.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The effect of this shift is that the reference point for any further manipulations of &lt;code&gt;link_01&lt;/code&gt; now lies on its bottom, instead of its center as would normally be the case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Likewise, the origin defined in the &lt;code&gt;base_link__link_01&lt;/code&gt; joint is defined relative to the coordinate frame of the parent link, in this case &lt;code&gt;base_link&lt;/code&gt;. It also specifies where the &lt;em&gt;origin&lt;/em&gt; frame of the child link will be placed, relative to the frame of the parent link.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All this leads to the following configuration:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/pwwJE.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/pwwJE.jpg&quot; alt=&quot;links and frames&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can see in the image above, the &lt;code&gt;base_link__link_01&lt;/code&gt; joint places the origin frame of &lt;code&gt;link_01&lt;/code&gt; &lt;span class=&quot;math-container&quot;&gt;$0.5 m$&lt;/span&gt; above the origin frame of &lt;code&gt;base_link&lt;/code&gt;. And since &lt;code&gt;link_01&lt;/code&gt; itself is shifted relative to its own frame, the result is that the bottom of &lt;code&gt;link_01&lt;/code&gt; is placed exactly on top of &lt;code&gt;base_link&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The topic of coordinate frames, the transforms between them and their use in robotics is one of the more advanced, and unfortunately I don't know of a comprehensive reference on it, but &lt;a href=&quot;https://w3.cs.jmu.edu/spragunr/CS354_S19/handouts/frames.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this tutorial&lt;/a&gt; seems a good start point to getting acquainted with it.&lt;/p&gt;&#xA;" OwnerUserId="4310" LastEditorUserId="4310" LastEditDate="2020-04-25T12:57:47.023" LastActivityDate="2020-04-25T12:57:47.023" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20500" PostTypeId="1" AcceptedAnswerId="20501" CreationDate="2020-04-16T15:37:54.193" Score="1" ViewCount="498" Body="&lt;p&gt;Do the terms holding torque and stall torque imply the same thing? The information on torque for these &lt;a href=&quot;https://www.pololu.com/category/87/stepper-motors&quot; rel=&quot;nofollow noreferrer&quot;&gt;stepper motors&lt;/a&gt; is given as holding torque. While these &lt;a href=&quot;https://www.servocity.com/2000-series-dual-mode-servo-25-2&quot; rel=&quot;nofollow noreferrer&quot;&gt;servo motors&lt;/a&gt; have the torque given as stall torque. My hope is to use the maximum torque a motor can handle to compare different motors for a project.&lt;/p&gt;&#xA;" OwnerUserId="22930" LastActivityDate="2020-04-16T17:55:19.137" Title="What is the difference between the holding torque and stall torque of a motor?" Tags="&lt;motor&gt;&lt;servomotor&gt;&lt;stepper-motor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20501" PostTypeId="2" ParentId="20500" CreationDate="2020-04-16T17:55:19.137" Score="0" Body="&lt;p&gt;Both holding torque for a stepper motor, and stall torque for a servo motor, refer to the maximum amount of torque when the shaft is not spinning and the windings are fully energized.   A stepper motor also has a detent torque because of its magnet arrangement.  Detent torque is the amount of torque it takes to overcome the magnetic attraction and move a shaft one step from being stopped when the windings are not energized.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2020-04-16T17:55:19.137" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20502" PostTypeId="2" ParentId="20484" CreationDate="2020-04-16T19:52:58.767" Score="0" Body="&lt;p&gt;I can think of three ways to control this robot:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Do as you described and have one separate controller for each motor, tuned independently using a test fixture;&lt;/li&gt;&#xA;&lt;li&gt;Use a &lt;a href=&quot;https://web.stanford.edu/~boyd/papers/pdf/mimo_pid_tuning.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;MIMO PID controller&lt;/a&gt; to simultaneously control the four motors;&lt;/li&gt;&#xA;&lt;li&gt;Use two PID controllers, one for linear speed, another for angular.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;The last option would take advantage of the fact that, according to the &lt;a href=&quot;https://husarion.com/tutorials/ros-tutorials/3-simple-kinematics-for-mobile-robot/&quot; rel=&quot;nofollow noreferrer&quot;&gt;kinematic equations for a four-wheeled drive&lt;/a&gt;, the front and rear left wheels &lt;span class=&quot;math-container&quot;&gt;$W_{LF}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$W_{LR}$&lt;/span&gt; can be combined into a single &quot;virtual&quot; wheel &lt;span class=&quot;math-container&quot;&gt;$W_L$&lt;/span&gt; such that:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\omega W_L = \frac{\omega W_{LF} + \omega W_{LR}}{2}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where &lt;span class=&quot;math-container&quot;&gt;$\omega W_L$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$\omega W_{LF}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\omega W_{LR}$&lt;/span&gt; are respectively the angular speeds of the virtual left, left front and left rear wheels. A virtual right wheel &lt;span class=&quot;math-container&quot;&gt;$W_R$&lt;/span&gt; can be defined analogously. This reduces the system definition to a differential drive, for which linear and angular speeds can be computed as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;v = \frac{r (\omega W_L + \omega W_R)}{2}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\omega = \frac{\omega W_R - \omega W_L}{2l}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where &lt;span class=&quot;math-container&quot;&gt;$r$&lt;/span&gt; is the wheel radius and &lt;span class=&quot;math-container&quot;&gt;$l$&lt;/span&gt; the lateral distance between wheels. From the formulas above you get:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\omega W_L = \frac{v}{r} - \omega l&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\omega W_R = \frac{v}{r} + \omega l&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Allowing you to use linear and angular speeds as references to control the virtual wheels. &lt;/p&gt;&#xA;" OwnerUserId="4310" LastActivityDate="2020-04-16T19:52:58.767" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20503" PostTypeId="1" CreationDate="2020-04-17T00:07:31.007" Score="1" ViewCount="26" Body="&lt;p&gt;I was looking at a model &lt;code&gt;xacro&lt;/code&gt; [&lt;code&gt;urdf&lt;/code&gt;] file in a ROS tutorial when I saw: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;link name=&quot;robot_footprint&quot;&amp;gt;&amp;lt;/link&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;right at the top. There were no child tags for:  &lt;code&gt;&amp;lt;collision&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;visual&amp;gt;&lt;/code&gt; or &lt;code&gt;&amp;lt;inertial&amp;gt;&lt;/code&gt;. There was however a joint right after but no further references to the &lt;code&gt;robot_footprint&lt;/code&gt; link. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  &amp;lt;joint name=&quot;robot_footprint_joint&quot; type=&quot;fixed&quot;&amp;gt;&#xA;    &amp;lt;origin xyz=&quot;0 0 0&quot; rpy=&quot;0 0 0&quot; /&amp;gt;&#xA;    &amp;lt;parent link=&quot;robot_footprint&quot;/&amp;gt;&#xA;    &amp;lt;child link=&quot;chassis&quot; /&amp;gt;&#xA;  &amp;lt;/joint&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;What does the empty link serve? &lt;/p&gt;&#xA;" OwnerUserId="15157" LastActivityDate="2020-05-17T12:04:45.657" Title="What is the purpose of an empty link without any child elements?" Tags="&lt;mobile-robot&gt;&lt;ros&gt;&lt;joint&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20504" PostTypeId="2" ParentId="20503" CreationDate="2020-04-17T00:40:45.727" Score="1" Body="&lt;p&gt;In this particular case, it's probably used as a projection of the robot's root link on the floor. This is often useful for motion planning or SLAM, where the robot's pose is read (or set) as the projection from that frame to the global frame. Going back to &lt;a href=&quot;https://robotics.stackexchange.com/a/20499/4310&quot;&gt;that other case involving coordinate frames&lt;/a&gt;, &lt;code&gt;robot_footprint&lt;/code&gt; would serve the same purpose as shifting &lt;code&gt;link_01&lt;/code&gt; vertically relative to its frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another common use of such links is to define sensor coordinate frames. For example, coordinates in a point cloud are often given relative to frame of the sensor that generated it; by creating a link that matches the sensor's position relative to the robot's root link, transforms can be computed to map those points to the robot's pose in the global coordinate frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See the &lt;a href=&quot;http://wiki.ros.org/urdf/Tutorials&quot; rel=&quot;nofollow noreferrer&quot;&gt;URDF tutorials&lt;/a&gt; for more information on how links and joints work and are used in ROS.&lt;/p&gt;&#xA;" OwnerUserId="4310" LastEditorUserId="4310" LastEditDate="2020-04-17T11:52:58.870" LastActivityDate="2020-04-17T11:52:58.870" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="20505" PostTypeId="1" AcceptedAnswerId="20507" CreationDate="2020-04-17T11:35:07.783" Score="0" ViewCount="118" Body="&lt;p&gt;I have a urdf model that I have loaded with:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;roslaunch my_robot world.launch&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I noticed that I gave the wrong color to a part of the robot. I have made changes. Is there a command to run to refresh gazebo from roslaunch? I have been quitting everything every time I make a change and I feel it is too much of RAM usage and slower.&lt;/p&gt;&#xA;" OwnerUserId="15157" LastActivityDate="2020-04-17T12:53:58.167" Title="Can you refresh gazebo when you load through ROS?" Tags="&lt;ros&gt;&lt;gazebo&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20506" PostTypeId="1" AcceptedAnswerId="20509" CreationDate="2020-04-17T12:40:57.283" Score="1" ViewCount="1064" Body="&lt;p&gt;I have a chassis link that has casters. I would like the casters to be grey and the box to be blue. The &lt;a href=&quot;http://wiki.ros.org/urdf/XML/link&quot; rel=&quot;nofollow noreferrer&quot;&gt;ROS &lt;code&gt;link&lt;/code&gt; doc&lt;/a&gt; mentions &lt;code&gt;&amp;lt;material&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;color&amp;gt;&lt;/code&gt; tags as being needed for color. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  &amp;lt;link name='chassis'&amp;gt;&#xA;    &amp;lt;pose&amp;gt;0 0 0.1 0 0 0&amp;lt;/pose&amp;gt;&#xA;&#xA;    &amp;lt;inertial&amp;gt;&#xA;      &amp;lt;mass value=&quot;15.0&quot;/&amp;gt;&#xA;      &amp;lt;origin xyz=&quot;0.0 0 0&quot; rpy=&quot; 0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;inertia&#xA;          ixx=&quot;0.1&quot; ixy=&quot;0&quot; ixz=&quot;0&quot;&#xA;          iyy=&quot;0.1&quot; iyz=&quot;0&quot;&#xA;          izz=&quot;0.1&quot;&#xA;      /&amp;gt;&#xA;    &amp;lt;/inertial&amp;gt;&#xA;&#xA;    &amp;lt;collision name='chassis_collision'&amp;gt;&#xA;      &amp;lt;origin xyz=&quot;0 0 0&quot; rpy=&quot; 0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;box size=&quot;.4 .2 .1&quot;/&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;    &amp;lt;/collision&amp;gt;&#xA;&#xA;    &amp;lt;visual name='chassis_visual'&amp;gt;&#xA;      &amp;lt;origin xyz=&quot;0 0 0&quot; rpy=&quot; 0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;box size=&quot;.4 .2 .1&quot;/&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;      &amp;lt;material name=&quot;blue&quot;&amp;gt;&#xA;        &amp;lt;color rgba= &quot;0 0 1 1&quot;/&amp;gt;&#xA;      &amp;lt;/material&amp;gt;&#xA;    &amp;lt;/visual&amp;gt;&#xA;&#xA;&#xA;    &amp;lt;collision name='back_caster_collision'&amp;gt;&#xA;      &amp;lt;origin xyz=&quot;-0.15 0 -0.05&quot; rpy=&quot; 0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;sphere radius=&quot;0.0499&quot;/&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;    &amp;lt;/collision&amp;gt;&#xA;&#xA;    &amp;lt;visual name='back_caster_visual'&amp;gt;&#xA;      &amp;lt;origin xyz=&quot;-0.15 0 -0.05&quot; rpy=&quot; 0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;sphere radius=&quot;0.05&quot;/&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;      &amp;lt;material name=&quot;grey&quot;&amp;gt;&#xA;        &amp;lt;color rgba=&quot;0.75 0.75 0.75 1&quot;/&amp;gt;&#xA;      &amp;lt;/material&amp;gt;&#xA;    &amp;lt;/visual&amp;gt;&#xA;&#xA;    &amp;lt;collision name='front_caster_collision'&amp;gt;&#xA;      &amp;lt;origin xyz=&quot;0.15 0 -0.05&quot; rpy=&quot; 0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;sphere radius=&quot;0.0499&quot;/&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;    &amp;lt;/collision&amp;gt;&#xA;&#xA;    &amp;lt;visual name='front_caster_visual'&amp;gt;&#xA;      &amp;lt;origin xyz=&quot;0.15 0 -0.05&quot; rpy=&quot; 0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;sphere radius=&quot;0.05&quot;/&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;      &amp;lt;material name=&quot;grey&quot;&amp;gt;&#xA;        &amp;lt;color rgba=&quot;0.75 0.75 0.75 1&quot;/&amp;gt;&#xA;      &amp;lt;/material&amp;gt;&#xA;    &amp;lt;/visual&amp;gt;&#xA;&#xA;  &amp;lt;/link&amp;gt;&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;However, when I &lt;code&gt;roslaunch my_robot world.launch&lt;/code&gt; the bot is the same color, gray. It is only when I add the following that the color changes to blue. What is the purpose of the &lt;code&gt;&amp;lt;color&amp;gt;&lt;/code&gt; tag then? &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;  &amp;lt;gazebo reference=&quot;chassis&quot;&amp;gt;&#xA;    &amp;lt;material&amp;gt;Gazebo/Blue&amp;lt;/material&amp;gt;&#xA;  &amp;lt;/gazebo&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="15157" LastActivityDate="2020-04-17T13:45:43.653" Title="Gazebo not reading the material color in URDF" Tags="&lt;ros&gt;&lt;gazebo&gt;&lt;visualization&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20507" PostTypeId="2" ParentId="20505" CreationDate="2020-04-17T12:53:58.167" Score="2" Body="&lt;p&gt;It depends. If you're &lt;a href=&quot;http://gazebosim.org/tutorials?tut=ros_roslaunch#UsingroslaunchtoSpawnURDFRobots&quot; rel=&quot;nofollow noreferrer&quot;&gt;spawning&lt;/a&gt; the robot at runtime, either through the &lt;code&gt;spawn_model&lt;/code&gt; service or from the Gazebo model database, then you can just just remove the robot from the simulation (click it and hit the &amp;lt;Delete&gt; key), edit the model file and load it again. If it's directly included in the world file, then as far as I can find, no, you cannot reload it without restarting Gazebo.&lt;/p&gt;&#xA;" OwnerUserId="4310" LastActivityDate="2020-04-17T12:53:58.167" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20508" PostTypeId="2" ParentId="20506" CreationDate="2020-04-17T12:55:30.817" Score="1" Body="&lt;p&gt;I've never used ROS or Gazebo before, but it looks like all of your components are defined as being part of the same link, so Gazebo may be applying the last-specified color to all components because, as &lt;a href=&quot;http://wiki.ros.org/urdf/XML/link&quot; rel=&quot;nofollow noreferrer&quot;&gt;the documentation is written&lt;/a&gt;, &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The link element describes a rigid body with an inertia, visual features, and collision properties.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Describes &lt;strong&gt;A&lt;/strong&gt; rigid body. If you wanted to troubleshoot this, I would try changing the last color from grey to something completely different, like magenta, and see if that causes everything in the link to change to that color. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would also try splitting the individual components out into their own links; if it's only using the last-specified color then it may also only be using the last-specified collider.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-04-17T12:55:30.817" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20509" PostTypeId="2" ParentId="20506" CreationDate="2020-04-17T13:45:43.653" Score="3" Body="&lt;p&gt;It's a limitation in Gazebo's ability to convert URDF to &lt;a href=&quot;http://sdformat.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;SDF&lt;/a&gt;, Gazebo's native object description format. Frustratingly, &lt;a href=&quot;http://wiki.ros.org/rviz&quot; rel=&quot;nofollow noreferrer&quot;&gt;RViz&lt;/a&gt; works the other way around: it correctly parses URDF colors, but not the SDF fragments inserted by the &lt;code&gt;gazebo&lt;/code&gt; tag.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One tip though, instead of inlining your material definitions inside links, it's better to define them once at the beginning and just refer to them throughout the rest of the file. It's more concise and if you ever want to change a material's definition, you have just one place to change. For example:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;robot name=&quot;robot&quot; xmlns:xacro=&quot;http://ros.org/wiki/xacro&quot;&amp;gt;&#xA;  &amp;lt;material name=&quot;blue&quot;&amp;gt;&#xA;    &amp;lt;color rgba= &quot;0 0 1 1&quot;/&amp;gt;&#xA;  &amp;lt;/material&amp;gt;&#xA;  &amp;lt;material name=&quot;grey&quot;&amp;gt;&#xA;    &amp;lt;color rgba=&quot;0.75 0.75 0.75 1&quot;/&amp;gt;&#xA;  &amp;lt;/material&amp;gt;&#xA;&#xA;  &amp;lt;!-- ... --&amp;gt;&#xA;&#xA;  &amp;lt;link name='chassis'&amp;gt;&#xA;    &amp;lt;pose&amp;gt;0 0 0.1 0 0 0&amp;lt;/pose&amp;gt;&#xA;&#xA;    &amp;lt;inertial&amp;gt;&#xA;      &amp;lt;mass value=&quot;15.0&quot;/&amp;gt;&#xA;      &amp;lt;origin xyz=&quot;0.0 0 0&quot; rpy=&quot; 0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;inertia&#xA;          ixx=&quot;0.1&quot; ixy=&quot;0&quot; ixz=&quot;0&quot;&#xA;          iyy=&quot;0.1&quot; iyz=&quot;0&quot;&#xA;          izz=&quot;0.1&quot;&#xA;      /&amp;gt;&#xA;    &amp;lt;/inertial&amp;gt;&#xA;&#xA;    &amp;lt;collision name='chassis_collision'&amp;gt;&#xA;      &amp;lt;origin xyz=&quot;0 0 0&quot; rpy=&quot; 0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;box size=&quot;.4 .2 .1&quot;/&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;    &amp;lt;/collision&amp;gt;&#xA;&#xA;    &amp;lt;visual name='chassis_visual'&amp;gt;&#xA;      &amp;lt;origin xyz=&quot;0 0 0&quot; rpy=&quot; 0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;box size=&quot;.4 .2 .1&quot;/&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;      &amp;lt;material name=&quot;blue&quot;/&amp;gt;&#xA;    &amp;lt;/visual&amp;gt;&#xA;&#xA;&#xA;    &amp;lt;collision name='back_caster_collision'&amp;gt;&#xA;      &amp;lt;origin xyz=&quot;-0.15 0 -0.05&quot; rpy=&quot; 0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;sphere radius=&quot;0.0499&quot;/&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;    &amp;lt;/collision&amp;gt;&#xA;&#xA;    &amp;lt;visual name='back_caster_visual'&amp;gt;&#xA;      &amp;lt;origin xyz=&quot;-0.15 0 -0.05&quot; rpy=&quot; 0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;sphere radius=&quot;0.05&quot;/&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;      &amp;lt;material name=&quot;grey&quot;/&amp;gt;&#xA;    &amp;lt;/visual&amp;gt;&#xA;&#xA;    &amp;lt;collision name='front_caster_collision'&amp;gt;&#xA;      &amp;lt;origin xyz=&quot;0.15 0 -0.05&quot; rpy=&quot; 0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;sphere radius=&quot;0.0499&quot;/&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;    &amp;lt;/collision&amp;gt;&#xA;&#xA;    &amp;lt;visual name='front_caster_visual'&amp;gt;&#xA;      &amp;lt;origin xyz=&quot;0.15 0 -0.05&quot; rpy=&quot; 0 0 0&quot;/&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;sphere radius=&quot;0.05&quot;/&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;      &amp;lt;material name=&quot;grey&quot;/&amp;gt;&#xA;    &amp;lt;/visual&amp;gt;&#xA;  &amp;lt;/link&amp;gt;&#xA;&#xA;  &amp;lt;!-- ... --&amp;gt;&#xA;&#xA;&amp;lt;/robot&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="4310" LastActivityDate="2020-04-17T13:45:43.653" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20511" PostTypeId="1" CreationDate="2020-04-17T16:04:53.183" Score="1" ViewCount="84" Body="&lt;p&gt;I am currently looking for a way to do odometry using wheel encoders, for a car that has no differential drive. The two rear wheel would rotate at the exact same speed. I have been looking everywhere for an answer, but unable to find any. I am starting to think that this is not a possible thing to do. I would be very grateful if anybody can point me in the correct direction.&lt;/p&gt;&#xA;" OwnerUserId="26186" LastEditorUserId="110" LastEditDate="2020-04-19T12:28:26.167" LastActivityDate="2020-04-19T12:28:26.167" Title="Odometry using wheel encoder with no differential drive" Tags="&lt;mobile-robot&gt;&lt;algorithm&gt;&lt;odometry&gt;&lt;autonomous-car&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20512" PostTypeId="2" ParentId="20511" CreationDate="2020-04-17T19:37:43.213" Score="2" Body="&lt;p&gt;So long you have a sensor to read the angle of the steering wheel, you can use the &lt;a href=&quot;https://borrelli.me.berkeley.edu/pdfpub/IV_KinematicMPC_jason.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;bicycle kinematic model&lt;/a&gt; to compute odometry for an &lt;a href=&quot;https://en.wikipedia.org/wiki/Ackermann_steering_geometry&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ackermann drive&lt;/a&gt; platform, e.g. a car:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\begin{align}&#xA; \\&#xA;\dot{x} &amp;amp; = v \; cos(\psi + \beta) \\ \\&#xA;\dot{y} &amp;amp; = v \; sin(\psi + \beta) \\ \\&#xA;\dot{\psi} &amp;amp; = \frac{v}{l_r} sin(\beta) \\ \\&#xA;\beta  &amp;amp; = tan^{-1} \left ( \frac{l_r}{l_f + l_r} tan(\delta_f) \right )&#xA;\end{align}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where &lt;span class=&quot;math-container&quot;&gt;$v$&lt;/span&gt; is linear forward velocity, &lt;span class=&quot;math-container&quot;&gt;$\dot{x}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\dot{y}$&lt;/span&gt; are the linear velocities alongside the Cartesian axes, &lt;span class=&quot;math-container&quot;&gt;$\psi$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\dot{\psi}$&lt;/span&gt; are the heading angle and angular velocity, &lt;span class=&quot;math-container&quot;&gt;$l_f$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$l_r$&lt;/span&gt; are the distances from the center of mass to the front an rear axles, and &lt;span class=&quot;math-container&quot;&gt;$\delta_f$&lt;/span&gt; is the steering wheel angle.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;https://i.stack.imgur.com/jSiJK.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/jSiJK.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming &lt;span class=&quot;math-container&quot;&gt;$v$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\delta_f$&lt;/span&gt; are retrieved using encoders or other sensors, the vehicle pose can be approximated by:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\begin{align}&#xA; \\&#xA;x_t &amp;amp; = x_{t - 1} + \dot{x} \; \Delta t \\ \\&#xA;y_t &amp;amp; = y_{t - 1} + \dot{y} \; \Delta t \\ \\&#xA;\psi_t &amp;amp; = \psi_{t - 1} + \dot{\psi} \; \Delta t \\ \\&#xA;\end{align}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;" OwnerUserId="4310" LastActivityDate="2020-04-17T19:37:43.213" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20513" PostTypeId="2" ParentId="20467" CreationDate="2020-04-18T03:18:42.680" Score="0" Body="&lt;p&gt;The reason that a Kalman filter requires a linear system is that a gaussian distribution loses its properties when transformed with a non-linear function. Although your transformation from local to global frame is a non-linear function, since your velocity measurement has no gaussian noise associated with it, you dont need to worry about the requirement for linearity. That being said, in the case that you perfectly know you initial pose, then you can just transform the perfect velocity measurement from the local frame to the global frame and find the new pose without any uncertainty. So if you have the perfect initial state you would not even require a filter.&lt;/p&gt;&#xA;" OwnerUserId="26172" LastActivityDate="2020-04-18T03:18:42.680" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20514" PostTypeId="1" CreationDate="2020-04-18T09:09:28.547" Score="2" ViewCount="94" Body="&lt;p&gt;I am currently in the process of implementing Graph SLAM using ICP and g2o in python 2.7 &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The data I have are pose data (4 x 4 transformation matrix) and lidar data ( in the format of [x y z 1] with dimension of 4 x n)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As long as I am aware, for icp to work, you need to apply initial guessing (pose difference between the source and the destination node) before executing the ICP algorithm, which I am using later for adding more edges.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I have done so far is to initially add the nodes and the respective edges of each node that is larger than a certain threshold, and I'm currently struggling through to apply ICP to fine tune my graph SLAM map.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Currently, I have been able to derive the transformation matrix of the source node and the destination node (the two nodes that I think are matching pairs for closing the loop), and trying to process the point clouds for each sourceLidar and DestinationLidar which both have dimensions of 4 x n (4  = [x y z 1). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have set the sourcePoint cloud as source Lidar, but I need to transform the DestinationPointCloud with initial guessing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I have right now is: DestinationLidar values (4 x number of nodes) and transformation matrix of each source and destination node that I have derived from g2o and optimizer function. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know I am meant to apply rotation and translation to these, but I am not sure how to execute these....&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After this is executed, I will apply the icp and add any additional edges that lie below a set threshold, then regraph SLAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please help me on how I can apply the transformation (both Rotation and Translation) to DestinationLidar to apply initial guessing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks alot&lt;/p&gt;&#xA;" OwnerUserId="26190" LastActivityDate="2020-04-18T09:09:28.547" Title="Applying initial guessing to LiDAR point cloud for ICP processing in Graph SLAM" Tags="&lt;slam&gt;&lt;python&gt;&lt;lidar&gt;&lt;point-cloud&gt;" AnswerCount="0" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="20515" PostTypeId="1" CreationDate="2020-04-18T10:31:21.427" Score="1" ViewCount="70" Body="&lt;p&gt;A complementary filter (CF) uses orientation obtained calculated from gyroscope, accelerometer and magnetometer to find a more accurate measurement of orientation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, when my sensor is accelerating linearly, the orientation from trigonometric equations using accelerometer readings is not correct. These equations seem to work only when the linear acceleration is 0. It seems that it is useless to apply accelerometer orientation in the Complementary Filter in this case. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Magnetometer on the other hand gives only the heading angle and the roll angle and not the pitch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is there any way of using CF to find orientation for a linearly accelerating vehicle? Or is CF intended only for cases when linear acceleration is 0?&lt;/p&gt;&#xA;" OwnerUserId="24908" LastActivityDate="2020-05-18T15:00:15.233" Title="How to create a Complementary Filter for a linearly accelerating body to obtain estimate of orientation in quaternion?" Tags="&lt;control&gt;&lt;kinematics&gt;&lt;gyroscope&gt;&lt;accelerometer&gt;&lt;magnetometer&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20516" PostTypeId="2" ParentId="20515" CreationDate="2020-04-18T14:53:56.080" Score="2" Body="&lt;p&gt;The point of a complementary filter is combine the low-pass parts of some measurements (e.g. accelerometer) with the high-pass parts of other measurements (e.g. gyro). If the accelerometer perfectly reflected the direction of gravity you wouldn't need the gyroscope part.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So practical applications that successfully use complementary filters with an accelerometer have an average acceleration close to zero over the relevant time scale. Cars, quadrotors, etc all meet this requirement. Note that as your gyroscope quality improves, and you adjust the filter accordingly, you can tolerate longer and longer periods of significant acceleration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, accelerometers are not required for complementary filters. Any directional measurement will work. For example, if a plane were to track a known feature on the ground that could work as well.&lt;/p&gt;&#xA;" OwnerUserId="2669" LastActivityDate="2020-04-18T14:53:56.080" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20517" PostTypeId="2" ParentId="18497" CreationDate="2020-04-19T10:53:35.897" Score="1" Body="&lt;p&gt;The range between -1 or +1 is a normalized range like you said. The question is the following: Were those values divided by 180 (degrees) or 2*pi (radians)? You should check any existant documentation regarding Rutgers APC 2015. Usually, the convention is to have the angles bounded between -pi/pi or -180/180, because expressions like atan2 or atan2d returns angles in that range. The range 0-360 might lead to tricky bugs to catch and error during the 360,0 crossover. &lt;/p&gt;&#xA;" OwnerUserId="26035" LastActivityDate="2020-04-19T10:53:35.897" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20518" PostTypeId="1" AcceptedAnswerId="20520" CreationDate="2020-04-19T15:04:19.093" Score="0" ViewCount="73" Body="&lt;p&gt;I created my world with gazebo9 and saved it. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;world$ tree&#xA;.&#xA;└── myworld&#xA;    ├── model.config&#xA;    └── model.sd&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Now when I start it with&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ gazebo myworld&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I get&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;terminate called after throwing an instance of 'std::bad_alloc'&#xA;  what():  std::bad_alloc&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Why am I getting a memory error when all this ran fine. Starting Gazebo on its own works.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am using:&#xA;Ubuntu 18.04&#xA;gazebo9&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://answers.gazebosim.org//question/13553/unable-to-run-gazebo-from-the-terminal/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Question 1&lt;/a&gt; and &lt;a href=&quot;https://answers.gazebosim.org//question/18805/problem-with-gazebo-stdbad_alloc/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Question 2&lt;/a&gt; don't have solutions. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have restarted my virtual machine and still get the same error. In some cases, nothing happens.&lt;/p&gt;&#xA;" OwnerUserId="15157" LastActivityDate="2020-04-19T21:44:47.637" Title="Gazebo throwing error in opening model created in it" Tags="&lt;ros&gt;&lt;gazebo&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20519" PostTypeId="1" CreationDate="2020-04-19T17:02:44.747" Score="0" ViewCount="64" Body="&lt;p&gt;I am trying to work on a Digital Twin of a Physical Robot which is used at my uni. I made a rough model of the robot using Webots (Open source). I need to design certain controllers aiming at the Tilt, Heading, Velocity control of the robot. Can anyone explain to me the implementation &amp;amp; the initial steps for designing the control part using Webots? &lt;/p&gt;&#xA;" OwnerUserId="23735" LastActivityDate="2020-09-20T12:04:00.403" Title="Controller Design using Webots!" Tags="&lt;control&gt;&lt;first-robotics&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20520" PostTypeId="2" ParentId="20518" CreationDate="2020-04-19T21:44:47.637" Score="2" Body="&lt;p&gt;You might be confusing Gazebo worlds and models. A world is a single &lt;a href=&quot;http://sdformat.org/spec&quot; rel=&quot;nofollow noreferrer&quot;&gt;SDF&lt;/a&gt; file structured as below:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;sdf version=&quot;VERSION&quot;&amp;gt;&#xA;  &amp;lt;world name=&quot;NAME&quot;&amp;gt;&#xA;    &amp;lt;!-- Included models, links etc. --&amp;gt;&#xA;  &amp;lt;/world&amp;gt;&#xA;&amp;lt;/sdf&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;For example, these are the contents of the sample &lt;code&gt;/usr/share/gazebo-9/worlds/willowgarage.world&lt;/code&gt; world file:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; ?&amp;gt;&#xA;&amp;lt;sdf version=&quot;1.5&quot;&amp;gt;&#xA;  &amp;lt;world name=&quot;default&quot;&amp;gt;&#xA;    &amp;lt;include&amp;gt;&#xA;      &amp;lt;uri&amp;gt;model://ground_plane&amp;lt;/uri&amp;gt;&#xA;    &amp;lt;/include&amp;gt;&#xA;    &amp;lt;include&amp;gt;&#xA;      &amp;lt;uri&amp;gt;model://sun&amp;lt;/uri&amp;gt;&#xA;    &amp;lt;/include&amp;gt;&#xA;    &amp;lt;include&amp;gt;&#xA;      &amp;lt;uri&amp;gt;model://willowgarage&amp;lt;/uri&amp;gt;&#xA;    &amp;lt;/include&amp;gt;&#xA;  &amp;lt;/world&amp;gt;&#xA;&amp;lt;/sdf&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In order to pre-load a world at startup time, you pass the path to the file as argument to Gazebo:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ gazebo /usr/share/gazebo-9/worlds/willowgarage.world&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The directory structure you described looks more like that of a &lt;a href=&quot;http://gazebosim.org/tutorials?tut=model_structure&quot; rel=&quot;nofollow noreferrer&quot;&gt;model&lt;/a&gt;, which in addition to a SDF file also includes a configuration and (optionally) other resources such as meshes, materials etc. As far as I know there's no way to directly load a model at startup time, other than as an element included in a world file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So to answer your question, the problem is probably that Gazebo is expecting its argument to point to an SDF file, but finds it to be a directory instead, and crashes as a result.&lt;/p&gt;&#xA;" OwnerUserId="4310" LastActivityDate="2020-04-19T21:44:47.637" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20522" PostTypeId="1" AcceptedAnswerId="20523" CreationDate="2020-04-20T12:04:10.947" Score="0" ViewCount="178" Body="&lt;p&gt;Is it possible to start with a with an empty world, &lt;code&gt;empty.world&lt;/code&gt; and then import walls (other worlds into it)? I can't seem to find an import option in the gazebo menu.  &lt;/p&gt;&#xA;" OwnerUserId="15157" LastActivityDate="2020-04-20T13:10:42.540" Title="Importing a world into another world in gazebo" Tags="&lt;gazebo&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20523" PostTypeId="2" ParentId="20522" CreationDate="2020-04-20T13:10:42.540" Score="2" Body="&lt;p&gt;If you mean merging other world's contents into an open world file in the Gazebo GUI, no, there is no way to do that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can however open the world files in a text editor and just copy contents over. Most worlds are structured as a sequence of &lt;a href=&quot;http://sdformat.org/spec?ver=1.7&amp;amp;elem=world#world_include&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;&amp;lt;include&amp;gt;&lt;/code&gt;&lt;/a&gt; tags pointing to external models, so this would be quite easy to do. Notice you can add a &lt;code&gt;&amp;lt;pose&amp;gt;&lt;/code&gt; tag inside &lt;code&gt;&amp;lt;include&amp;gt;&lt;/code&gt; to shift models around if you need.&lt;/p&gt;&#xA;" OwnerUserId="4310" LastActivityDate="2020-04-20T13:10:42.540" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20524" PostTypeId="2" ParentId="20497" CreationDate="2020-04-20T13:40:18.460" Score="0" Body="&lt;p&gt;The short answer is that it's possible, but tricky.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To estimate position you integrate accelerometer readings over time to get linear velocity estimates, and then integrate the velocities to get position estimates.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The downside of this double integration is that either initial readings must be very accurate, or sophisticated smoothing / filtering algorithms must be used to compensate for errors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Moreover, since IMU measurements are not relative to a global reference point but only to the previous system state, there is no way to avoid the unbounded (however slowly) accumulation of estimate errors over time, except by resorting to different sensors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I recommend you refer to this article for a more complete treatment:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Kok, Manon, Jeroen D. Hol, and Thomas B. Schön. &quot;&lt;a href=&quot;https://arxiv.org/abs/1704.06053&quot; rel=&quot;nofollow noreferrer&quot;&gt;Using inertial sensors for position and orientation estimation&lt;/a&gt;.&quot; &lt;em&gt;arXiv preprint arXiv:1704.06053&lt;/em&gt; (2017).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="4310" LastActivityDate="2020-04-20T13:40:18.460" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20525" PostTypeId="1" AcceptedAnswerId="20531" CreationDate="2020-04-20T18:14:26.897" Score="0" ViewCount="104" Body="&lt;p&gt;&lt;strong&gt;Intro&lt;/strong&gt;: I am a student that just started a project regarding prototyping a mobile robot that involve &lt;strong&gt;Indoor SLAM implementation&lt;/strong&gt;. I am very new to the field of computer vision, SLAM and SBC (single board computer).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am searching for advice on &lt;strong&gt;choices of SBC&lt;/strong&gt; for &lt;strong&gt;visual ORB-SLAM&lt;/strong&gt; implementation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Below are the few options I came across, welcome to provide new suggestion:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Raspberry Pi&lt;/strong&gt; : Is the computational power of Raspberry Pi able to support ORB-SLAM? If so, which model would be my best choice?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;strong&gt;BeagleBone Black&lt;/strong&gt; : Any comments on this SBC for ORB-SLAM implementation?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;My budget for SBC is around $150&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would also like to know a rough estimate of the &lt;strong&gt;minimum requirement for SBC to implement ORB-SLAM&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I really appreciate any advice, resource or help I could get.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance.&lt;/p&gt;&#xA;" OwnerUserId="26211" LastActivityDate="2020-04-22T20:37:43.357" Title="Guidance on SBC for Visual-Based SLAM" Tags="&lt;ros&gt;&lt;slam&gt;&lt;computer-vision&gt;&lt;wheeled-robot&gt;&lt;raspberry-pi&gt;" AnswerCount="2" CommentCount="1" ClosedDate="2020-04-23T22:51:15.363" ContentLicense="CC BY-SA 4.0" />
  <row Id="20526" PostTypeId="2" ParentId="20525" CreationDate="2020-04-21T06:47:47.770" Score="0" Body="&lt;p&gt;Tbh ur going to need a Jetson nano at least, maybe a tx.&lt;/p&gt;&#xA;" OwnerUserId="21514" LastActivityDate="2020-04-21T06:47:47.770" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20529" PostTypeId="1" CreationDate="2020-04-21T15:40:55.733" Score="0" ViewCount="20" Body="&lt;p&gt;I am new to this site so please let me know if I can improve my question. A component of a robot I am designing includes a four-wheeled carriage that travels linearly on an aluminum surface. The wheels must be 3.5 inches in diameter, 0.5 inches thick and be able to bear 130 lbs of load together. Beyond that, I have complete freedom to select the wheel material and can surface the sheet aluminum however I want. I can replace the wheels every 10000 rotations and they need to be water resistant. Cost is pretty irrelevant. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;How do you recommend maximizing the coefficient of friction between the wheel and surface? Is there a database which shows different wheels on different materials? Are there resources which outline the affects of different surfacing techniques on friction? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am considering a pretty simple approach using 'off-the shelf' directional tread tires and aluminum oxide anti slip tape like what you see on some commercial stairs. Other ideas include using studded tires and roughing the aluminum surface. The overall goal is to make sure that the carriage does not slide when the wheels are not spinning using mechanical, not electronic/motorized means.&lt;/p&gt;&#xA;" OwnerUserId="26221" LastActivityDate="2020-04-21T15:40:55.733" Title="Maximizing the Coefficient of Friction Between Two Surfaces" Tags="&lt;kinematics&gt;&lt;wheeled-robot&gt;&lt;motion&gt;&lt;research&gt;&lt;wheel&gt;" AnswerCount="0" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="20530" PostTypeId="1" AcceptedAnswerId="20534" CreationDate="2020-04-21T15:49:44.293" Score="1" ViewCount="48" Body="&lt;p&gt;I'm trying to find screw axes for joint (on pic) with angle θ. It's on zero position. As I understood:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;joint has an angular velocity on the Z axis, clockwise, so the sign is positive and ω=(0,0,1);&lt;/li&gt;&#xA;&lt;li&gt;joint is located at height L along the X axis, so v=(L,0,0).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;But right answer is [0,0,1,0,-L,0]. Why?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/oOpwS.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/oOpwS.png&quot; alt=&quot;Joint with angle θ&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="26222" LastEditorUserId="10414" LastEditDate="2021-01-25T16:23:08.443" LastActivityDate="2021-01-25T16:23:08.443" Title="Screw Axes in the Base Frame" Tags="&lt;forward-kinematics&gt;&lt;screw-theory&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20531" PostTypeId="2" ParentId="20525" CreationDate="2020-04-21T18:23:25.130" Score="0" Body="&lt;p&gt;As &lt;a href=&quot;https://robotics.stackexchange.com/users/21514/fourierflux&quot;&gt;FourierFlux&lt;/a&gt; mentioned, the &lt;a href=&quot;https://www.nvidia.com/en-us/autonomous-machines/embedded-systems/jetson-nano-developer-kit/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Jetson Nano&lt;/a&gt; is perhaps the most processing power you're going to get for $150 and under. However getting ORB-SLAM to run in it might be a challenge — there is a &lt;a href=&quot;https://github.com/thien94/ORB_SLAM2_CUDA&quot; rel=&quot;nofollow noreferrer&quot;&gt;port&lt;/a&gt; but it doesn't seem to be very actively maintained.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If splurging a little more on the SBC is an option, you could get a &lt;a href=&quot;https://www.hackerboards.com/product/262/&quot; rel=&quot;nofollow noreferrer&quot;&gt;UDOO Bolt&lt;/a&gt;, which is a full x86-64 SBC built around the AMD Ryzen Embedded chipset. That would enable running the stock ORB-SLAM system. It sells &lt;a href=&quot;https://shop.udoo.org/products/bolt.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;online&lt;/a&gt; for \$332.00 (Vega 3 graphics) or \$418.00 (Vega 8).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Alternatively, if you don't require running all software on the robot itself, you could get a Raspberry Pi, set it up to stream visual data to a more powerful remote machine (e.g. a desktop PC), and run ORB-SLAM there instead. This could be easily accomplished in &lt;a href=&quot;https://www.ros.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;ROS&lt;/a&gt; by running hardware driver nodes on the Raspberry Pi, more demanding SLAM and navigation nodes on the remote machine, and have the two sides communicate over wi-fi:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/zp96P.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zp96P.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See &lt;a href=&quot;https://courses.ece.cornell.edu/ece6930/ECE6930_Spring16_Final_MEng_Reports/SLAM/Real-time%20ROSberryPi%20SLAM%20Robot.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this report&lt;/a&gt; for details on how this could be done.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, you could try a more economical SLAM approach: a successful implementation of FastSLAM2.0 for Raspberry Pi has been &lt;a href=&quot;https://link.springer.com/article/10.1186/s13639-017-0075-9&quot; rel=&quot;nofollow noreferrer&quot;&gt;reported&lt;/a&gt;, you could contact the authors and ask for the code, or re-implement it yourself.&lt;/p&gt;&#xA;" OwnerUserId="4310" LastEditorUserId="4310" LastEditDate="2020-04-22T20:37:43.357" LastActivityDate="2020-04-22T20:37:43.357" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20532" PostTypeId="1" AcceptedAnswerId="20538" CreationDate="2020-04-21T23:34:13.860" Score="0" ViewCount="48" Body="&lt;p&gt;I created a robot in the model editor that is made up of a cube and a cylinder with a revolute joint between them but after saving it and inserting another instance into the world, I only get the cylinder and no cube at the bottom. There is a revolute joint between the two so I don't get how the two don't move together or get bundled up. What is happening with gazebo? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using: &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Ubuntu 18.06 &lt;/li&gt;&#xA;&lt;li&gt;gazebo9&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's &lt;code&gt;myrobot.sdf&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;pre class=&quot;lang-xml prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;?xml version='1.0'?&amp;gt;&#xA;&amp;lt;sdf version='1.6'&amp;gt;&#xA;  &amp;lt;model name='myrobot'&amp;gt;&#xA;    &amp;lt;link name='link_0'&amp;gt;&#xA;      &amp;lt;inertial&amp;gt;&#xA;        &amp;lt;mass&amp;gt;1&amp;lt;/mass&amp;gt;&#xA;        &amp;lt;inertia&amp;gt;&#xA;          &amp;lt;ixx&amp;gt;0.166667&amp;lt;/ixx&amp;gt;&#xA;          &amp;lt;ixy&amp;gt;0&amp;lt;/ixy&amp;gt;&#xA;          &amp;lt;ixz&amp;gt;0&amp;lt;/ixz&amp;gt;&#xA;          &amp;lt;iyy&amp;gt;0.166667&amp;lt;/iyy&amp;gt;&#xA;          &amp;lt;iyz&amp;gt;0&amp;lt;/iyz&amp;gt;&#xA;          &amp;lt;izz&amp;gt;0.166667&amp;lt;/izz&amp;gt;&#xA;        &amp;lt;/inertia&amp;gt;&#xA;        &amp;lt;pose frame=''&amp;gt;0 0 0 0 -0 0&amp;lt;/pose&amp;gt;&#xA;      &amp;lt;/inertial&amp;gt;&#xA;      &amp;lt;pose frame=''&amp;gt;0 0 -0.5 0 -0 0&amp;lt;/pose&amp;gt;&#xA;      &amp;lt;gravity&amp;gt;1&amp;lt;/gravity&amp;gt;&#xA;      &amp;lt;self_collide&amp;gt;0&amp;lt;/self_collide&amp;gt;&#xA;      &amp;lt;kinematic&amp;gt;0&amp;lt;/kinematic&amp;gt;&#xA;      &amp;lt;enable_wind&amp;gt;0&amp;lt;/enable_wind&amp;gt;&#xA;      &amp;lt;visual name='visual'&amp;gt;&#xA;        &amp;lt;pose frame=''&amp;gt;0 0 0 0 -0 0&amp;lt;/pose&amp;gt;&#xA;        &amp;lt;geometry&amp;gt;&#xA;          &amp;lt;box&amp;gt;&#xA;            &amp;lt;size&amp;gt;1 1 1&amp;lt;/size&amp;gt;&#xA;          &amp;lt;/box&amp;gt;&#xA;        &amp;lt;/geometry&amp;gt;&#xA;        &amp;lt;material&amp;gt;&#xA;          &amp;lt;lighting&amp;gt;1&amp;lt;/lighting&amp;gt;&#xA;          &amp;lt;script&amp;gt;&#xA;            &amp;lt;uri&amp;gt;file://media/materials/scripts/gazebo.material&amp;lt;/uri&amp;gt;&#xA;            &amp;lt;name&amp;gt;Gazebo/Grey&amp;lt;/name&amp;gt;&#xA;          &amp;lt;/script&amp;gt;&#xA;          &amp;lt;shader type='vertex'&amp;gt;&#xA;            &amp;lt;normal_map&amp;gt;__default__&amp;lt;/normal_map&amp;gt;&#xA;          &amp;lt;/shader&amp;gt;&#xA;          &amp;lt;ambient&amp;gt;0.3 0.3 0.3 1&amp;lt;/ambient&amp;gt;&#xA;          &amp;lt;diffuse&amp;gt;0.7 0.7 0.7 1&amp;lt;/diffuse&amp;gt;&#xA;          &amp;lt;specular&amp;gt;0.01 0.01 0.01 1&amp;lt;/specular&amp;gt;&#xA;          &amp;lt;emissive&amp;gt;0 0 0 1&amp;lt;/emissive&amp;gt;&#xA;        &amp;lt;/material&amp;gt;&#xA;        &amp;lt;transparency&amp;gt;0&amp;lt;/transparency&amp;gt;&#xA;        &amp;lt;cast_shadows&amp;gt;1&amp;lt;/cast_shadows&amp;gt;&#xA;      &amp;lt;/visual&amp;gt;&#xA;      &amp;lt;collision name='collision'&amp;gt;&#xA;        &amp;lt;laser_retro&amp;gt;0&amp;lt;/laser_retro&amp;gt;&#xA;        &amp;lt;max_contacts&amp;gt;10&amp;lt;/max_contacts&amp;gt;&#xA;        &amp;lt;pose frame=''&amp;gt;0 0 0 0 -0 0&amp;lt;/pose&amp;gt;&#xA;        &amp;lt;geometry&amp;gt;&#xA;          &amp;lt;box&amp;gt;&#xA;            &amp;lt;size&amp;gt;1 1 1&amp;lt;/size&amp;gt;&#xA;          &amp;lt;/box&amp;gt;&#xA;        &amp;lt;/geometry&amp;gt;&#xA;        &amp;lt;surface&amp;gt;&#xA;          &amp;lt;friction&amp;gt;&#xA;            &amp;lt;ode&amp;gt;&#xA;              &amp;lt;mu&amp;gt;1&amp;lt;/mu&amp;gt;&#xA;              &amp;lt;mu2&amp;gt;1&amp;lt;/mu2&amp;gt;&#xA;              &amp;lt;fdir1&amp;gt;0 0 0&amp;lt;/fdir1&amp;gt;&#xA;              &amp;lt;slip1&amp;gt;0&amp;lt;/slip1&amp;gt;&#xA;              &amp;lt;slip2&amp;gt;0&amp;lt;/slip2&amp;gt;&#xA;            &amp;lt;/ode&amp;gt;&#xA;            &amp;lt;torsional&amp;gt;&#xA;              &amp;lt;coefficient&amp;gt;1&amp;lt;/coefficient&amp;gt;&#xA;              &amp;lt;patch_radius&amp;gt;0&amp;lt;/patch_radius&amp;gt;&#xA;              &amp;lt;surface_radius&amp;gt;0&amp;lt;/surface_radius&amp;gt;&#xA;              &amp;lt;use_patch_radius&amp;gt;1&amp;lt;/use_patch_radius&amp;gt;&#xA;              &amp;lt;ode&amp;gt;&#xA;                &amp;lt;slip&amp;gt;0&amp;lt;/slip&amp;gt;&#xA;              &amp;lt;/ode&amp;gt;&#xA;            &amp;lt;/torsional&amp;gt;&#xA;          &amp;lt;/friction&amp;gt;&#xA;          &amp;lt;bounce&amp;gt;&#xA;            &amp;lt;restitution_coefficient&amp;gt;0&amp;lt;/restitution_coefficient&amp;gt;&#xA;            &amp;lt;threshold&amp;gt;1e+06&amp;lt;/threshold&amp;gt;&#xA;          &amp;lt;/bounce&amp;gt;&#xA;          &amp;lt;contact&amp;gt;&#xA;            &amp;lt;collide_without_contact&amp;gt;0&amp;lt;/collide_without_contact&amp;gt;&#xA;            &amp;lt;collide_without_contact_bitmask&amp;gt;1&amp;lt;/collide_without_contact_bitmask&amp;gt;&#xA;            &amp;lt;collide_bitmask&amp;gt;1&amp;lt;/collide_bitmask&amp;gt;&#xA;            &amp;lt;ode&amp;gt;&#xA;              &amp;lt;soft_cfm&amp;gt;0&amp;lt;/soft_cfm&amp;gt;&#xA;              &amp;lt;soft_erp&amp;gt;0.2&amp;lt;/soft_erp&amp;gt;&#xA;              &amp;lt;kp&amp;gt;1e+13&amp;lt;/kp&amp;gt;&#xA;              &amp;lt;kd&amp;gt;1&amp;lt;/kd&amp;gt;&#xA;              &amp;lt;max_vel&amp;gt;0.01&amp;lt;/max_vel&amp;gt;&#xA;              &amp;lt;min_depth&amp;gt;0&amp;lt;/min_depth&amp;gt;&#xA;            &amp;lt;/ode&amp;gt;&#xA;            &amp;lt;bullet&amp;gt;&#xA;              &amp;lt;split_impulse&amp;gt;1&amp;lt;/split_impulse&amp;gt;&#xA;              &amp;lt;split_impulse_penetration_threshold&amp;gt;-0.01&amp;lt;/split_impulse_penetration_threshold&amp;gt;&#xA;              &amp;lt;soft_cfm&amp;gt;0&amp;lt;/soft_cfm&amp;gt;&#xA;              &amp;lt;soft_erp&amp;gt;0.2&amp;lt;/soft_erp&amp;gt;&#xA;              &amp;lt;kp&amp;gt;1e+13&amp;lt;/kp&amp;gt;&#xA;              &amp;lt;kd&amp;gt;1&amp;lt;/kd&amp;gt;&#xA;            &amp;lt;/bullet&amp;gt;&#xA;          &amp;lt;/contact&amp;gt;&#xA;        &amp;lt;/surface&amp;gt;&#xA;      &amp;lt;/collision&amp;gt;&#xA;    &amp;lt;/link&amp;gt;&#xA;    &amp;lt;link name='link_1'&amp;gt;&#xA;      &amp;lt;inertial&amp;gt;&#xA;        &amp;lt;mass&amp;gt;1&amp;lt;/mass&amp;gt;&#xA;        &amp;lt;inertia&amp;gt;&#xA;          &amp;lt;ixx&amp;gt;0.145833&amp;lt;/ixx&amp;gt;&#xA;          &amp;lt;ixy&amp;gt;0&amp;lt;/ixy&amp;gt;&#xA;          &amp;lt;ixz&amp;gt;0&amp;lt;/ixz&amp;gt;&#xA;          &amp;lt;iyy&amp;gt;0.145833&amp;lt;/iyy&amp;gt;&#xA;          &amp;lt;iyz&amp;gt;0&amp;lt;/iyz&amp;gt;&#xA;          &amp;lt;izz&amp;gt;0.125&amp;lt;/izz&amp;gt;&#xA;        &amp;lt;/inertia&amp;gt;&#xA;        &amp;lt;pose frame=''&amp;gt;0 0 0 0 -0 0&amp;lt;/pose&amp;gt;&#xA;      &amp;lt;/inertial&amp;gt;&#xA;      &amp;lt;pose frame=''&amp;gt;0 0 0.5 0 -0 0&amp;lt;/pose&amp;gt;&#xA;      &amp;lt;gravity&amp;gt;1&amp;lt;/gravity&amp;gt;&#xA;      &amp;lt;self_collide&amp;gt;0&amp;lt;/self_collide&amp;gt;&#xA;      &amp;lt;kinematic&amp;gt;0&amp;lt;/kinematic&amp;gt;&#xA;      &amp;lt;enable_wind&amp;gt;0&amp;lt;/enable_wind&amp;gt;&#xA;      &amp;lt;visual name='visual'&amp;gt;&#xA;        &amp;lt;pose frame=''&amp;gt;0 0 0 0 -0 0&amp;lt;/pose&amp;gt;&#xA;        &amp;lt;geometry&amp;gt;&#xA;          &amp;lt;cylinder&amp;gt;&#xA;            &amp;lt;radius&amp;gt;0.2&amp;lt;/radius&amp;gt;&#xA;            &amp;lt;length&amp;gt;1&amp;lt;/length&amp;gt;&#xA;          &amp;lt;/cylinder&amp;gt;&#xA;        &amp;lt;/geometry&amp;gt;&#xA;        &amp;lt;material&amp;gt;&#xA;          &amp;lt;lighting&amp;gt;1&amp;lt;/lighting&amp;gt;&#xA;          &amp;lt;script&amp;gt;&#xA;            &amp;lt;uri&amp;gt;file://media/materials/scripts/gazebo.material&amp;lt;/uri&amp;gt;&#xA;            &amp;lt;name&amp;gt;Gazebo/Grey&amp;lt;/name&amp;gt;&#xA;          &amp;lt;/script&amp;gt;&#xA;          &amp;lt;shader type='vertex'&amp;gt;&#xA;            &amp;lt;normal_map&amp;gt;__default__&amp;lt;/normal_map&amp;gt;&#xA;          &amp;lt;/shader&amp;gt;&#xA;          &amp;lt;ambient&amp;gt;0.3 0.3 0.3 1&amp;lt;/ambient&amp;gt;&#xA;          &amp;lt;diffuse&amp;gt;0.7 0.7 0.7 1&amp;lt;/diffuse&amp;gt;&#xA;          &amp;lt;specular&amp;gt;0.01 0.01 0.01 1&amp;lt;/specular&amp;gt;&#xA;          &amp;lt;emissive&amp;gt;0 0 0 1&amp;lt;/emissive&amp;gt;&#xA;        &amp;lt;/material&amp;gt;&#xA;        &amp;lt;transparency&amp;gt;0&amp;lt;/transparency&amp;gt;&#xA;        &amp;lt;cast_shadows&amp;gt;1&amp;lt;/cast_shadows&amp;gt;&#xA;      &amp;lt;/visual&amp;gt;&#xA;      &amp;lt;collision name='collision'&amp;gt;&#xA;        &amp;lt;laser_retro&amp;gt;0&amp;lt;/laser_retro&amp;gt;&#xA;        &amp;lt;max_contacts&amp;gt;10&amp;lt;/max_contacts&amp;gt;&#xA;        &amp;lt;pose frame=''&amp;gt;0 0 0 0 -0 0&amp;lt;/pose&amp;gt;&#xA;        &amp;lt;geometry&amp;gt;&#xA;          &amp;lt;cylinder&amp;gt;&#xA;            &amp;lt;radius&amp;gt;0.2&amp;lt;/radius&amp;gt;&#xA;            &amp;lt;length&amp;gt;1&amp;lt;/length&amp;gt;&#xA;          &amp;lt;/cylinder&amp;gt;&#xA;        &amp;lt;/geometry&amp;gt;&#xA;        &amp;lt;surface&amp;gt;&#xA;          &amp;lt;friction&amp;gt;&#xA;            &amp;lt;ode&amp;gt;&#xA;              &amp;lt;mu&amp;gt;1&amp;lt;/mu&amp;gt;&#xA;              &amp;lt;mu2&amp;gt;1&amp;lt;/mu2&amp;gt;&#xA;              &amp;lt;fdir1&amp;gt;0 0 0&amp;lt;/fdir1&amp;gt;&#xA;              &amp;lt;slip1&amp;gt;0&amp;lt;/slip1&amp;gt;&#xA;              &amp;lt;slip2&amp;gt;0&amp;lt;/slip2&amp;gt;&#xA;            &amp;lt;/ode&amp;gt;&#xA;            &amp;lt;torsional&amp;gt;&#xA;              &amp;lt;coefficient&amp;gt;1&amp;lt;/coefficient&amp;gt;&#xA;              &amp;lt;patch_radius&amp;gt;0&amp;lt;/patch_radius&amp;gt;&#xA;              &amp;lt;surface_radius&amp;gt;0&amp;lt;/surface_radius&amp;gt;&#xA;              &amp;lt;use_patch_radius&amp;gt;1&amp;lt;/use_patch_radius&amp;gt;&#xA;              &amp;lt;ode&amp;gt;&#xA;                &amp;lt;slip&amp;gt;0&amp;lt;/slip&amp;gt;&#xA;              &amp;lt;/ode&amp;gt;&#xA;            &amp;lt;/torsional&amp;gt;&#xA;          &amp;lt;/friction&amp;gt;&#xA;          &amp;lt;bounce&amp;gt;&#xA;            &amp;lt;restitution_coefficient&amp;gt;0&amp;lt;/restitution_coefficient&amp;gt;&#xA;            &amp;lt;threshold&amp;gt;1e+06&amp;lt;/threshold&amp;gt;&#xA;          &amp;lt;/bounce&amp;gt;&#xA;          &amp;lt;contact&amp;gt;&#xA;            &amp;lt;collide_without_contact&amp;gt;0&amp;lt;/collide_without_contact&amp;gt;&#xA;            &amp;lt;collide_without_contact_bitmask&amp;gt;1&amp;lt;/collide_without_contact_bitmask&amp;gt;&#xA;            &amp;lt;collide_bitmask&amp;gt;1&amp;lt;/collide_bitmask&amp;gt;&#xA;            &amp;lt;ode&amp;gt;&#xA;              &amp;lt;soft_cfm&amp;gt;0&amp;lt;/soft_cfm&amp;gt;&#xA;              &amp;lt;soft_erp&amp;gt;0.2&amp;lt;/soft_erp&amp;gt;&#xA;              &amp;lt;kp&amp;gt;1e+13&amp;lt;/kp&amp;gt;&#xA;              &amp;lt;kd&amp;gt;1&amp;lt;/kd&amp;gt;&#xA;              &amp;lt;max_vel&amp;gt;0.01&amp;lt;/max_vel&amp;gt;&#xA;              &amp;lt;min_depth&amp;gt;0&amp;lt;/min_depth&amp;gt;&#xA;            &amp;lt;/ode&amp;gt;&#xA;            &amp;lt;bullet&amp;gt;&#xA;              &amp;lt;split_impulse&amp;gt;1&amp;lt;/split_impulse&amp;gt;&#xA;              &amp;lt;split_impulse_penetration_threshold&amp;gt;-0.01&amp;lt;/split_impulse_penetration_threshold&amp;gt;&#xA;              &amp;lt;soft_cfm&amp;gt;0&amp;lt;/soft_cfm&amp;gt;&#xA;              &amp;lt;soft_erp&amp;gt;0.2&amp;lt;/soft_erp&amp;gt;&#xA;              &amp;lt;kp&amp;gt;1e+13&amp;lt;/kp&amp;gt;&#xA;              &amp;lt;kd&amp;gt;1&amp;lt;/kd&amp;gt;&#xA;            &amp;lt;/bullet&amp;gt;&#xA;          &amp;lt;/contact&amp;gt;&#xA;        &amp;lt;/surface&amp;gt;&#xA;      &amp;lt;/collision&amp;gt;&#xA;    &amp;lt;/link&amp;gt;&#xA;    &amp;lt;joint name='link_0_JOINT_0' type='revolute'&amp;gt;&#xA;      &amp;lt;parent&amp;gt;link_0&amp;lt;/parent&amp;gt;&#xA;      &amp;lt;child&amp;gt;link_1&amp;lt;/child&amp;gt;&#xA;      &amp;lt;pose frame=''&amp;gt;0 0 0 0 -0 0&amp;lt;/pose&amp;gt;&#xA;      &amp;lt;axis&amp;gt;&#xA;        &amp;lt;xyz&amp;gt;0 0 1&amp;lt;/xyz&amp;gt;&#xA;        &amp;lt;use_parent_model_frame&amp;gt;0&amp;lt;/use_parent_model_frame&amp;gt;&#xA;        &amp;lt;limit&amp;gt;&#xA;          &amp;lt;lower&amp;gt;-1.79769e+308&amp;lt;/lower&amp;gt;&#xA;          &amp;lt;upper&amp;gt;1.79769e+308&amp;lt;/upper&amp;gt;&#xA;          &amp;lt;effort&amp;gt;-1&amp;lt;/effort&amp;gt;&#xA;          &amp;lt;velocity&amp;gt;-1&amp;lt;/velocity&amp;gt;&#xA;        &amp;lt;/limit&amp;gt;&#xA;        &amp;lt;dynamics&amp;gt;&#xA;          &amp;lt;spring_reference&amp;gt;0&amp;lt;/spring_reference&amp;gt;&#xA;          &amp;lt;spring_stiffness&amp;gt;0&amp;lt;/spring_stiffness&amp;gt;&#xA;          &amp;lt;damping&amp;gt;0&amp;lt;/damping&amp;gt;&#xA;        &amp;lt;/dynamics&amp;gt;&#xA;      &amp;lt;/axis&amp;gt;&#xA;      &amp;lt;physics&amp;gt;&#xA;        &amp;lt;ode&amp;gt;&#xA;          &amp;lt;limit&amp;gt;&#xA;            &amp;lt;cfm&amp;gt;0&amp;lt;/cfm&amp;gt;&#xA;            &amp;lt;erp&amp;gt;0.2&amp;lt;/erp&amp;gt;&#xA;          &amp;lt;/limit&amp;gt;&#xA;          &amp;lt;suspension&amp;gt;&#xA;            &amp;lt;cfm&amp;gt;0&amp;lt;/cfm&amp;gt;&#xA;            &amp;lt;erp&amp;gt;0.2&amp;lt;/erp&amp;gt;&#xA;          &amp;lt;/suspension&amp;gt;&#xA;        &amp;lt;/ode&amp;gt;&#xA;      &amp;lt;/physics&amp;gt;&#xA;    &amp;lt;/joint&amp;gt;&#xA;    &amp;lt;static&amp;gt;0&amp;lt;/static&amp;gt;&#xA;    &amp;lt;allow_auto_disable&amp;gt;1&amp;lt;/allow_auto_disable&amp;gt;&#xA;  &amp;lt;/model&amp;gt;&#xA;&amp;lt;/sdf&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Updated &lt;code&gt;myrobot.sdf&lt;/code&gt; that shows up upside-down. &lt;/p&gt;&#xA;&#xA;&lt;pre class=&quot;lang-xml prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;?xml version='1.0'?&amp;gt;&#xA;&amp;lt;sdf version='1.6'&amp;gt;&#xA;  &amp;lt;model name='robot'&amp;gt;&#xA;    &amp;lt;link name='link_0'&amp;gt;&#xA;      &amp;lt;inertial&amp;gt;&#xA;        &amp;lt;mass&amp;gt;1&amp;lt;/mass&amp;gt;&#xA;        &amp;lt;inertia&amp;gt;&#xA;          &amp;lt;ixx&amp;gt;0.166667&amp;lt;/ixx&amp;gt;&#xA;          &amp;lt;ixy&amp;gt;0&amp;lt;/ixy&amp;gt;&#xA;          &amp;lt;ixz&amp;gt;0&amp;lt;/ixz&amp;gt;&#xA;          &amp;lt;iyy&amp;gt;0.166667&amp;lt;/iyy&amp;gt;&#xA;          &amp;lt;iyz&amp;gt;0&amp;lt;/iyz&amp;gt;&#xA;          &amp;lt;izz&amp;gt;0.166667&amp;lt;/izz&amp;gt;&#xA;        &amp;lt;/inertia&amp;gt;&#xA;        &amp;lt;pose frame=''&amp;gt;0 0 0 0 -0 0&amp;lt;/pose&amp;gt;&#xA;      &amp;lt;/inertial&amp;gt;&#xA;      &amp;lt;pose frame=''&amp;gt;0 0 1.0 0 0 0&amp;lt;/pose&amp;gt;&#xA;      &amp;lt;gravity&amp;gt;1&amp;lt;/gravity&amp;gt;&#xA;      &amp;lt;self_collide&amp;gt;0&amp;lt;/self_collide&amp;gt;&#xA;      &amp;lt;kinematic&amp;gt;0&amp;lt;/kinematic&amp;gt;&#xA;      &amp;lt;enable_wind&amp;gt;0&amp;lt;/enable_wind&amp;gt;&#xA;      &amp;lt;visual name='visual'&amp;gt;&#xA;        &amp;lt;pose frame=''&amp;gt;0 0 0 0 -0 0&amp;lt;/pose&amp;gt;&#xA;        &amp;lt;geometry&amp;gt;&#xA;          &amp;lt;box&amp;gt;&#xA;            &amp;lt;size&amp;gt;1 1 1&amp;lt;/size&amp;gt;&#xA;          &amp;lt;/box&amp;gt;&#xA;        &amp;lt;/geometry&amp;gt;&#xA;        &amp;lt;material&amp;gt;&#xA;          &amp;lt;lighting&amp;gt;1&amp;lt;/lighting&amp;gt;&#xA;          &amp;lt;script&amp;gt;&#xA;            &amp;lt;uri&amp;gt;file://media/materials/scripts/gazebo.material&amp;lt;/uri&amp;gt;&#xA;            &amp;lt;name&amp;gt;Gazebo/Grey&amp;lt;/name&amp;gt;&#xA;          &amp;lt;/script&amp;gt;&#xA;          &amp;lt;shader type='vertex'&amp;gt;&#xA;            &amp;lt;normal_map&amp;gt;__default__&amp;lt;/normal_map&amp;gt;&#xA;          &amp;lt;/shader&amp;gt;&#xA;          &amp;lt;ambient&amp;gt;0.3 0.3 0.3 1&amp;lt;/ambient&amp;gt;&#xA;          &amp;lt;diffuse&amp;gt;0.7 0.7 0.7 1&amp;lt;/diffuse&amp;gt;&#xA;          &amp;lt;specular&amp;gt;0.01 0.01 0.01 1&amp;lt;/specular&amp;gt;&#xA;          &amp;lt;emissive&amp;gt;0 0 0 1&amp;lt;/emissive&amp;gt;&#xA;        &amp;lt;/material&amp;gt;&#xA;        &amp;lt;transparency&amp;gt;0&amp;lt;/transparency&amp;gt;&#xA;        &amp;lt;cast_shadows&amp;gt;1&amp;lt;/cast_shadows&amp;gt;&#xA;      &amp;lt;/visual&amp;gt;&#xA;      &amp;lt;collision name='collision'&amp;gt;&#xA;        &amp;lt;laser_retro&amp;gt;0&amp;lt;/laser_retro&amp;gt;&#xA;        &amp;lt;max_contacts&amp;gt;10&amp;lt;/max_contacts&amp;gt;&#xA;        &amp;lt;pose frame=''&amp;gt;0 0 0 0 -0 0&amp;lt;/pose&amp;gt;&#xA;        &amp;lt;geometry&amp;gt;&#xA;          &amp;lt;box&amp;gt;&#xA;            &amp;lt;size&amp;gt;1 1 1&amp;lt;/size&amp;gt;&#xA;          &amp;lt;/box&amp;gt;&#xA;        &amp;lt;/geometry&amp;gt;&#xA;        &amp;lt;surface&amp;gt;&#xA;          &amp;lt;friction&amp;gt;&#xA;            &amp;lt;ode&amp;gt;&#xA;              &amp;lt;mu&amp;gt;1&amp;lt;/mu&amp;gt;&#xA;              &amp;lt;mu2&amp;gt;1&amp;lt;/mu2&amp;gt;&#xA;              &amp;lt;fdir1&amp;gt;0 0 0&amp;lt;/fdir1&amp;gt;&#xA;              &amp;lt;slip1&amp;gt;0&amp;lt;/slip1&amp;gt;&#xA;              &amp;lt;slip2&amp;gt;0&amp;lt;/slip2&amp;gt;&#xA;            &amp;lt;/ode&amp;gt;&#xA;            &amp;lt;torsional&amp;gt;&#xA;              &amp;lt;coefficient&amp;gt;1&amp;lt;/coefficient&amp;gt;&#xA;              &amp;lt;patch_radius&amp;gt;0&amp;lt;/patch_radius&amp;gt;&#xA;              &amp;lt;surface_radius&amp;gt;0&amp;lt;/surface_radius&amp;gt;&#xA;              &amp;lt;use_patch_radius&amp;gt;1&amp;lt;/use_patch_radius&amp;gt;&#xA;              &amp;lt;ode&amp;gt;&#xA;                &amp;lt;slip&amp;gt;0&amp;lt;/slip&amp;gt;&#xA;              &amp;lt;/ode&amp;gt;&#xA;            &amp;lt;/torsional&amp;gt;&#xA;          &amp;lt;/friction&amp;gt;&#xA;          &amp;lt;bounce&amp;gt;&#xA;            &amp;lt;restitution_coefficient&amp;gt;0&amp;lt;/restitution_coefficient&amp;gt;&#xA;            &amp;lt;threshold&amp;gt;1e+06&amp;lt;/threshold&amp;gt;&#xA;          &amp;lt;/bounce&amp;gt;&#xA;          &amp;lt;contact&amp;gt;&#xA;            &amp;lt;collide_without_contact&amp;gt;0&amp;lt;/collide_without_contact&amp;gt;&#xA;            &amp;lt;collide_without_contact_bitmask&amp;gt;1&amp;lt;/collide_without_contact_bitmask&amp;gt;&#xA;            &amp;lt;collide_bitmask&amp;gt;1&amp;lt;/collide_bitmask&amp;gt;&#xA;            &amp;lt;ode&amp;gt;&#xA;              &amp;lt;soft_cfm&amp;gt;0&amp;lt;/soft_cfm&amp;gt;&#xA;              &amp;lt;soft_erp&amp;gt;0.2&amp;lt;/soft_erp&amp;gt;&#xA;              &amp;lt;kp&amp;gt;1e+13&amp;lt;/kp&amp;gt;&#xA;              &amp;lt;kd&amp;gt;1&amp;lt;/kd&amp;gt;&#xA;              &amp;lt;max_vel&amp;gt;0.01&amp;lt;/max_vel&amp;gt;&#xA;              &amp;lt;min_depth&amp;gt;0&amp;lt;/min_depth&amp;gt;&#xA;            &amp;lt;/ode&amp;gt;&#xA;            &amp;lt;bullet&amp;gt;&#xA;              &amp;lt;split_impulse&amp;gt;1&amp;lt;/split_impulse&amp;gt;&#xA;              &amp;lt;split_impulse_penetration_threshold&amp;gt;-0.01&amp;lt;/split_impulse_penetration_threshold&amp;gt;&#xA;              &amp;lt;soft_cfm&amp;gt;0&amp;lt;/soft_cfm&amp;gt;&#xA;              &amp;lt;soft_erp&amp;gt;0.2&amp;lt;/soft_erp&amp;gt;&#xA;              &amp;lt;kp&amp;gt;1e+13&amp;lt;/kp&amp;gt;&#xA;              &amp;lt;kd&amp;gt;1&amp;lt;/kd&amp;gt;&#xA;            &amp;lt;/bullet&amp;gt;&#xA;          &amp;lt;/contact&amp;gt;&#xA;        &amp;lt;/surface&amp;gt;&#xA;      &amp;lt;/collision&amp;gt;&#xA;    &amp;lt;/link&amp;gt;&#xA;    &amp;lt;link name='link_1'&amp;gt;&#xA;      &amp;lt;inertial&amp;gt;&#xA;        &amp;lt;mass&amp;gt;1&amp;lt;/mass&amp;gt;&#xA;        &amp;lt;inertia&amp;gt;&#xA;          &amp;lt;ixx&amp;gt;0.145833&amp;lt;/ixx&amp;gt;&#xA;          &amp;lt;ixy&amp;gt;0&amp;lt;/ixy&amp;gt;&#xA;          &amp;lt;ixz&amp;gt;0&amp;lt;/ixz&amp;gt;&#xA;          &amp;lt;iyy&amp;gt;0.145833&amp;lt;/iyy&amp;gt;&#xA;          &amp;lt;iyz&amp;gt;0&amp;lt;/iyz&amp;gt;&#xA;          &amp;lt;izz&amp;gt;0.125&amp;lt;/izz&amp;gt;&#xA;        &amp;lt;/inertia&amp;gt;&#xA;        &amp;lt;pose frame=''&amp;gt;0 0 0 0 -0 0&amp;lt;/pose&amp;gt;&#xA;      &amp;lt;/inertial&amp;gt;&#xA;      &amp;lt;pose frame=''&amp;gt;-1e-06 0 0.5 0 -0 0&amp;lt;/pose&amp;gt;&#xA;      &amp;lt;gravity&amp;gt;1&amp;lt;/gravity&amp;gt;&#xA;      &amp;lt;self_collide&amp;gt;0&amp;lt;/self_collide&amp;gt;&#xA;      &amp;lt;kinematic&amp;gt;0&amp;lt;/kinematic&amp;gt;&#xA;      &amp;lt;enable_wind&amp;gt;0&amp;lt;/enable_wind&amp;gt;&#xA;      &amp;lt;visual name='visual'&amp;gt;&#xA;        &amp;lt;pose frame=''&amp;gt;0 0 0 0 -0 0&amp;lt;/pose&amp;gt;&#xA;        &amp;lt;geometry&amp;gt;&#xA;          &amp;lt;cylinder&amp;gt;&#xA;            &amp;lt;radius&amp;gt;0.2&amp;lt;/radius&amp;gt;&#xA;            &amp;lt;length&amp;gt;1&amp;lt;/length&amp;gt;&#xA;          &amp;lt;/cylinder&amp;gt;&#xA;        &amp;lt;/geometry&amp;gt;&#xA;        &amp;lt;material&amp;gt;&#xA;          &amp;lt;lighting&amp;gt;1&amp;lt;/lighting&amp;gt;&#xA;          &amp;lt;script&amp;gt;&#xA;            &amp;lt;uri&amp;gt;file://media/materials/scripts/gazebo.material&amp;lt;/uri&amp;gt;&#xA;            &amp;lt;name&amp;gt;Gazebo/Grey&amp;lt;/name&amp;gt;&#xA;          &amp;lt;/script&amp;gt;&#xA;          &amp;lt;shader type='vertex'&amp;gt;&#xA;            &amp;lt;normal_map&amp;gt;__default__&amp;lt;/normal_map&amp;gt;&#xA;          &amp;lt;/shader&amp;gt;&#xA;          &amp;lt;ambient&amp;gt;0.3 0.3 0.3 1&amp;lt;/ambient&amp;gt;&#xA;          &amp;lt;diffuse&amp;gt;0.7 0.7 0.7 1&amp;lt;/diffuse&amp;gt;&#xA;          &amp;lt;specular&amp;gt;0.01 0.01 0.01 1&amp;lt;/specular&amp;gt;&#xA;          &amp;lt;emissive&amp;gt;0 0 0 1&amp;lt;/emissive&amp;gt;&#xA;        &amp;lt;/material&amp;gt;&#xA;        &amp;lt;transparency&amp;gt;0&amp;lt;/transparency&amp;gt;&#xA;        &amp;lt;cast_shadows&amp;gt;1&amp;lt;/cast_shadows&amp;gt;&#xA;      &amp;lt;/visual&amp;gt;&#xA;      &amp;lt;collision name='collision'&amp;gt;&#xA;        &amp;lt;laser_retro&amp;gt;0&amp;lt;/laser_retro&amp;gt;&#xA;        &amp;lt;max_contacts&amp;gt;10&amp;lt;/max_contacts&amp;gt;&#xA;        &amp;lt;pose frame=''&amp;gt;0 0 0 0 -0 0&amp;lt;/pose&amp;gt;&#xA;        &amp;lt;geometry&amp;gt;&#xA;          &amp;lt;cylinder&amp;gt;&#xA;            &amp;lt;radius&amp;gt;0.2&amp;lt;/radius&amp;gt;&#xA;            &amp;lt;length&amp;gt;1&amp;lt;/length&amp;gt;&#xA;          &amp;lt;/cylinder&amp;gt;&#xA;        &amp;lt;/geometry&amp;gt;&#xA;        &amp;lt;surface&amp;gt;&#xA;          &amp;lt;friction&amp;gt;&#xA;            &amp;lt;ode&amp;gt;&#xA;              &amp;lt;mu&amp;gt;1&amp;lt;/mu&amp;gt;&#xA;              &amp;lt;mu2&amp;gt;1&amp;lt;/mu2&amp;gt;&#xA;              &amp;lt;fdir1&amp;gt;0 0 0&amp;lt;/fdir1&amp;gt;&#xA;              &amp;lt;slip1&amp;gt;0&amp;lt;/slip1&amp;gt;&#xA;              &amp;lt;slip2&amp;gt;0&amp;lt;/slip2&amp;gt;&#xA;            &amp;lt;/ode&amp;gt;&#xA;            &amp;lt;torsional&amp;gt;&#xA;              &amp;lt;coefficient&amp;gt;1&amp;lt;/coefficient&amp;gt;&#xA;              &amp;lt;patch_radius&amp;gt;0&amp;lt;/patch_radius&amp;gt;&#xA;              &amp;lt;surface_radius&amp;gt;0&amp;lt;/surface_radius&amp;gt;&#xA;              &amp;lt;use_patch_radius&amp;gt;1&amp;lt;/use_patch_radius&amp;gt;&#xA;              &amp;lt;ode&amp;gt;&#xA;                &amp;lt;slip&amp;gt;0&amp;lt;/slip&amp;gt;&#xA;              &amp;lt;/ode&amp;gt;&#xA;            &amp;lt;/torsional&amp;gt;&#xA;          &amp;lt;/friction&amp;gt;&#xA;          &amp;lt;bounce&amp;gt;&#xA;            &amp;lt;restitution_coefficient&amp;gt;0&amp;lt;/restitution_coefficient&amp;gt;&#xA;            &amp;lt;threshold&amp;gt;1e+06&amp;lt;/threshold&amp;gt;&#xA;          &amp;lt;/bounce&amp;gt;&#xA;          &amp;lt;contact&amp;gt;&#xA;            &amp;lt;collide_without_contact&amp;gt;0&amp;lt;/collide_without_contact&amp;gt;&#xA;            &amp;lt;collide_without_contact_bitmask&amp;gt;1&amp;lt;/collide_without_contact_bitmask&amp;gt;&#xA;            &amp;lt;collide_bitmask&amp;gt;1&amp;lt;/collide_bitmask&amp;gt;&#xA;            &amp;lt;ode&amp;gt;&#xA;              &amp;lt;soft_cfm&amp;gt;0&amp;lt;/soft_cfm&amp;gt;&#xA;              &amp;lt;soft_erp&amp;gt;0.2&amp;lt;/soft_erp&amp;gt;&#xA;              &amp;lt;kp&amp;gt;1e+13&amp;lt;/kp&amp;gt;&#xA;              &amp;lt;kd&amp;gt;1&amp;lt;/kd&amp;gt;&#xA;              &amp;lt;max_vel&amp;gt;0.01&amp;lt;/max_vel&amp;gt;&#xA;              &amp;lt;min_depth&amp;gt;0&amp;lt;/min_depth&amp;gt;&#xA;            &amp;lt;/ode&amp;gt;&#xA;            &amp;lt;bullet&amp;gt;&#xA;              &amp;lt;split_impulse&amp;gt;1&amp;lt;/split_impulse&amp;gt;&#xA;              &amp;lt;split_impulse_penetration_threshold&amp;gt;-0.01&amp;lt;/split_impulse_penetration_threshold&amp;gt;&#xA;              &amp;lt;soft_cfm&amp;gt;0&amp;lt;/soft_cfm&amp;gt;&#xA;              &amp;lt;soft_erp&amp;gt;0.2&amp;lt;/soft_erp&amp;gt;&#xA;              &amp;lt;kp&amp;gt;1e+13&amp;lt;/kp&amp;gt;&#xA;              &amp;lt;kd&amp;gt;1&amp;lt;/kd&amp;gt;&#xA;            &amp;lt;/bullet&amp;gt;&#xA;          &amp;lt;/contact&amp;gt;&#xA;        &amp;lt;/surface&amp;gt;&#xA;      &amp;lt;/collision&amp;gt;&#xA;    &amp;lt;/link&amp;gt;&#xA;    &amp;lt;joint name='link_0_JOINT_1' type='revolute'&amp;gt;&#xA;      &amp;lt;parent&amp;gt;link_0&amp;lt;/parent&amp;gt;&#xA;      &amp;lt;child&amp;gt;link_1&amp;lt;/child&amp;gt;&#xA;      &amp;lt;pose frame=''&amp;gt;0 0 0 -0.04 0 0&amp;lt;/pose&amp;gt;&#xA;      &amp;lt;axis&amp;gt;&#xA;        &amp;lt;xyz&amp;gt;0 0 1&amp;lt;/xyz&amp;gt;&#xA;        &amp;lt;use_parent_model_frame&amp;gt;0&amp;lt;/use_parent_model_frame&amp;gt;&#xA;        &amp;lt;limit&amp;gt;&#xA;          &amp;lt;lower&amp;gt;-1.79769e+308&amp;lt;/lower&amp;gt;&#xA;          &amp;lt;upper&amp;gt;1.79769e+308&amp;lt;/upper&amp;gt;&#xA;          &amp;lt;effort&amp;gt;-1&amp;lt;/effort&amp;gt;&#xA;          &amp;lt;velocity&amp;gt;-1&amp;lt;/velocity&amp;gt;&#xA;        &amp;lt;/limit&amp;gt;&#xA;        &amp;lt;dynamics&amp;gt;&#xA;          &amp;lt;spring_reference&amp;gt;0&amp;lt;/spring_reference&amp;gt;&#xA;          &amp;lt;spring_stiffness&amp;gt;0&amp;lt;/spring_stiffness&amp;gt;&#xA;          &amp;lt;damping&amp;gt;0&amp;lt;/damping&amp;gt;&#xA;        &amp;lt;/dynamics&amp;gt;&#xA;      &amp;lt;/axis&amp;gt;&#xA;      &amp;lt;physics&amp;gt;&#xA;        &amp;lt;ode&amp;gt;&#xA;          &amp;lt;limit&amp;gt;&#xA;            &amp;lt;cfm&amp;gt;0&amp;lt;/cfm&amp;gt;&#xA;            &amp;lt;erp&amp;gt;0.2&amp;lt;/erp&amp;gt;&#xA;          &amp;lt;/limit&amp;gt;&#xA;          &amp;lt;suspension&amp;gt;&#xA;            &amp;lt;cfm&amp;gt;0&amp;lt;/cfm&amp;gt;&#xA;            &amp;lt;erp&amp;gt;0.2&amp;lt;/erp&amp;gt;&#xA;          &amp;lt;/suspension&amp;gt;&#xA;        &amp;lt;/ode&amp;gt;&#xA;      &amp;lt;/physics&amp;gt;&#xA;    &amp;lt;/joint&amp;gt;&#xA;    &amp;lt;static&amp;gt;0&amp;lt;/static&amp;gt;&#xA;    &amp;lt;allow_auto_disable&amp;gt;1&amp;lt;/allow_auto_disable&amp;gt;&#xA;  &amp;lt;/model&amp;gt;&#xA;&amp;lt;/sdf&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="15157" LastEditorUserId="15157" LastEditDate="2020-04-25T13:02:06.897" LastActivityDate="2020-04-25T13:02:06.897" Title="My robot keeps getting saved as one cylinder leaving out the bottom cube" Tags="&lt;gazebo&gt;&lt;joint&gt;&lt;robot-model&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20533" PostTypeId="2" ParentId="4364" CreationDate="2020-04-22T00:14:12.143" Score="0" Body="&lt;p&gt;You can either have &lt;span class=&quot;math-container&quot;&gt;$d_1 \neq 0$&lt;/span&gt; or set &lt;span class=&quot;math-container&quot;&gt;$d_1=0$&lt;/span&gt; and embed the vertical displacement in &lt;span class=&quot;math-container&quot;&gt;$d_3^*$&lt;/span&gt;. &lt;/p&gt;&#xA;" OwnerUserId="26226" LastEditorUserId="37" LastEditDate="2020-04-23T22:45:36.600" LastActivityDate="2020-04-23T22:45:36.600" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20534" PostTypeId="2" ParentId="20530" CreationDate="2020-04-22T07:21:40.170" Score="1" Body="&lt;p&gt;If I'm understanding you correctly, you're attempting to put the position of the joint in for the translational velocity component of the screw axis. What you actually want to put in there is the velocity of a point rigidly attached to the rotating part of the joint, but currently located at the origin of the base frame,&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;v = \begin{bmatrix} \omega_{x} \\ \omega_{y} \\ \omega_{z} \end{bmatrix} \times \begin{bmatrix} -x \\ -y \\ -z \end{bmatrix} = \begin{bmatrix} 0 \\ 0 \\ 1 \end{bmatrix} \times \begin{bmatrix} -L \\ \phantom{-}0 \\ \phantom{-}0 \end{bmatrix} = \begin{bmatrix} \phantom{-}0 \\ -L \\ \phantom{-}0 \end{bmatrix}.&#xA;$$&lt;/span&gt;&#xA;You can interpret&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\begin{bmatrix} \omega \\ v \end{bmatrix} = \begin{bmatrix} \phantom{-}0 \\ \phantom{-}0 \\ \phantom{-}1 \\ \phantom{-}0 \\ -L \\ \phantom{-}0 \end{bmatrix}&#xA;$$&lt;/span&gt;&#xA;as the translational velocity you would have to give an object at the origin to have it act as if it were rotating about the &lt;span class=&quot;math-container&quot;&gt;$z$&lt;/span&gt; axis passing through &lt;span class=&quot;math-container&quot;&gt;$x=L, y=0$&lt;/span&gt;. This way of treating velocities is called the &quot;spatial&quot; approach, and I discuss it further in my answer here: &lt;a href=&quot;https://robotics.stackexchange.com/questions/8940/robotic-manipulator-jacobian-by-product-of-exponentials/9011#9011&quot;&gt;Robotic manipulator Jacobian by product of exponentials&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="11712" LastActivityDate="2020-04-22T07:21:40.170" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20536" PostTypeId="1" AcceptedAnswerId="20539" CreationDate="2020-04-22T11:52:08.770" Score="0" ViewCount="114" Body="&lt;p&gt;I created a world in gazebo with 2 levels and realized that I wouldn't see my robot moving in it. So I tried to delete the 2nd level but couldn't find a means to do so. Is the GUI not capable of doing this? Do I have to go through the thousand-line &lt;code&gt;sdf&lt;/code&gt; file to remove the level? &lt;/p&gt;&#xA;" OwnerUserId="15157" LastActivityDate="2020-04-22T17:26:49.297" Title="Is a gazebo world unmodifiable after you hit save?" Tags="&lt;gazebo&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20537" PostTypeId="1" CreationDate="2020-04-22T12:00:56.493" Score="1" ViewCount="42" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/FyXrb.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FyXrb.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;I was reading the FABRIK inverse kinematic that You can find more information here:  &lt;a href=&quot;http://www.andreasaristidou.com/publications/papers/FABRIK.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.andreasaristidou.com/publications/papers/FABRIK.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This paper suggests for each joint there is 4 value which constraint the rotational motion of that joint and constitutes a cone then Shows the composite ellipsoidal shape created by the distances q_j mapped from 3D to 2D. &#xA;My question is how to determine the x,y coordinate of the 2D plane? I mean there is infinite coordinate system that passes from point &quot;o&quot; in the mentioned plane. How can I fix this coordinate system?&lt;/p&gt;&#xA;" OwnerUserId="19682" LastEditorUserId="19682" LastEditDate="2020-04-22T16:05:18.547" LastActivityDate="2020-04-22T16:05:18.547" Title="FABRIK inverse kinematic" Tags="&lt;inverse-kinematics&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20538" PostTypeId="2" ParentId="20532" CreationDate="2020-04-22T12:23:41.937" Score="1" Body="&lt;p&gt;I suppose that what you're seeing when you add your robot model to the world is something like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Ij30a.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Ij30a.png&quot; alt=&quot;Top robot part&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That is, only the top part of the robot is visible. The problem is not that the bottom part isn't there, it's just that the robot's origin is the joint between the two parts, therefore the lower part is below the floor. If you rotate the world (hold &lt;code&gt;&amp;lt;Shift&amp;gt; + &amp;lt;Left Mouse Click&amp;gt;&lt;/code&gt; then move the mouse around) so you can see it from under the floor, you'll probably see something like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/jliuR.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/jliuR.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You have two ways to fix this. Either you keep the model as it is, and manually add a vertical offset to its pose when adding it to a world:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/zotAR.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zotAR.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or you add a vertical offset to the &lt;code&gt;model.sdf&lt;/code&gt; file:&lt;/p&gt;&#xA;&#xA;&lt;pre class=&quot;lang-xml prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;?xml version='1.0'?&amp;gt;&#xA;&amp;lt;sdf version='1.6'&amp;gt;&#xA;  &amp;lt;model name='myrobot'&amp;gt;&#xA;    &amp;lt;!-- This shifts the entire model 1.0 m up. --&amp;gt;&#xA;    &amp;lt;pose frame=''&amp;gt;0 0 1.0 0 0 0&amp;lt;/pose&amp;gt;&#xA;&#xA;    &amp;lt;link name='link_0'&amp;gt;&#xA;      &amp;lt;inertial&amp;gt;&#xA;        &amp;lt;mass&amp;gt;1&amp;lt;/mass&amp;gt;&#xA;        &amp;lt;inertia&amp;gt;&#xA;          &amp;lt;ixx&amp;gt;0.166667&amp;lt;/ixx&amp;gt;&#xA;          &amp;lt;ixy&amp;gt;0&amp;lt;/ixy&amp;gt;&#xA;          &amp;lt;ixz&amp;gt;0&amp;lt;/ixz&amp;gt;&#xA;          &amp;lt;iyy&amp;gt;0.166667&amp;lt;/iyy&amp;gt;&#xA;          &amp;lt;iyz&amp;gt;0&amp;lt;/iyz&amp;gt;&#xA;          &amp;lt;izz&amp;gt;0.166667&amp;lt;/izz&amp;gt;&#xA;        &amp;lt;/inertia&amp;gt;&#xA;        &amp;lt;pose frame=''&amp;gt;0 0 0 0 -0 0&amp;lt;/pose&amp;gt;&#xA;      &amp;lt;/inertial&amp;gt;&#xA;      &amp;lt;pose frame=''&amp;gt;0 0 -0.5 0 -0 0&amp;lt;/pose&amp;gt;&#xA;      &amp;lt;gravity&amp;gt;1&amp;lt;/gravity&amp;gt;&#xA;      &amp;lt;self_collide&amp;gt;0&amp;lt;/self_collide&amp;gt;&#xA;      &amp;lt;kinematic&amp;gt;0&amp;lt;/kinematic&amp;gt;&#xA;      &amp;lt;enable_wind&amp;gt;0&amp;lt;/enable_wind&amp;gt;&#xA;      &amp;lt;visual name='visual'&amp;gt;&#xA;        &amp;lt;pose frame=''&amp;gt;0 0 0 0 -0 0&amp;lt;/pose&amp;gt;&#xA;        &amp;lt;geometry&amp;gt;&#xA;          &amp;lt;box&amp;gt;&#xA;            &amp;lt;size&amp;gt;1 1 1&amp;lt;/size&amp;gt;&#xA;          &amp;lt;/box&amp;gt;&#xA;        &amp;lt;/geometry&amp;gt;&#xA;        &amp;lt;material&amp;gt;&#xA;          &amp;lt;lighting&amp;gt;1&amp;lt;/lighting&amp;gt;&#xA;          &amp;lt;script&amp;gt;&#xA;            &amp;lt;uri&amp;gt;file://media/materials/scripts/gazebo.material&amp;lt;/uri&amp;gt;&#xA;            &amp;lt;name&amp;gt;Gazebo/Grey&amp;lt;/name&amp;gt;&#xA;          &amp;lt;/script&amp;gt;&#xA;          &amp;lt;shader type='vertex'&amp;gt;&#xA;            &amp;lt;normal_map&amp;gt;__default__&amp;lt;/normal_map&amp;gt;&#xA;          &amp;lt;/shader&amp;gt;&#xA;          &amp;lt;ambient&amp;gt;0.3 0.3 0.3 1&amp;lt;/ambient&amp;gt;&#xA;          &amp;lt;diffuse&amp;gt;0.7 0.7 0.7 1&amp;lt;/diffuse&amp;gt;&#xA;          &amp;lt;specular&amp;gt;0.01 0.01 0.01 1&amp;lt;/specular&amp;gt;&#xA;          &amp;lt;emissive&amp;gt;0 0 0 1&amp;lt;/emissive&amp;gt;&#xA;        &amp;lt;/material&amp;gt;&#xA;        &amp;lt;transparency&amp;gt;0&amp;lt;/transparency&amp;gt;&#xA;        &amp;lt;cast_shadows&amp;gt;1&amp;lt;/cast_shadows&amp;gt;&#xA;      &amp;lt;/visual&amp;gt;&#xA;      &amp;lt;collision name='collision'&amp;gt;&#xA;        &amp;lt;laser_retro&amp;gt;0&amp;lt;/laser_retro&amp;gt;&#xA;        &amp;lt;max_contacts&amp;gt;10&amp;lt;/max_contacts&amp;gt;&#xA;        &amp;lt;pose frame=''&amp;gt;0 0 0 0 -0 0&amp;lt;/pose&amp;gt;&#xA;        &amp;lt;geometry&amp;gt;&#xA;          &amp;lt;box&amp;gt;&#xA;            &amp;lt;size&amp;gt;1 1 1&amp;lt;/size&amp;gt;&#xA;          &amp;lt;/box&amp;gt;&#xA;        &amp;lt;/geometry&amp;gt;&#xA;        &amp;lt;surface&amp;gt;&#xA;          &amp;lt;friction&amp;gt;&#xA;            &amp;lt;ode&amp;gt;&#xA;              &amp;lt;mu&amp;gt;1&amp;lt;/mu&amp;gt;&#xA;              &amp;lt;mu2&amp;gt;1&amp;lt;/mu2&amp;gt;&#xA;              &amp;lt;fdir1&amp;gt;0 0 0&amp;lt;/fdir1&amp;gt;&#xA;              &amp;lt;slip1&amp;gt;0&amp;lt;/slip1&amp;gt;&#xA;              &amp;lt;slip2&amp;gt;0&amp;lt;/slip2&amp;gt;&#xA;            &amp;lt;/ode&amp;gt;&#xA;            &amp;lt;torsional&amp;gt;&#xA;              &amp;lt;coefficient&amp;gt;1&amp;lt;/coefficient&amp;gt;&#xA;              &amp;lt;patch_radius&amp;gt;0&amp;lt;/patch_radius&amp;gt;&#xA;              &amp;lt;surface_radius&amp;gt;0&amp;lt;/surface_radius&amp;gt;&#xA;              &amp;lt;use_patch_radius&amp;gt;1&amp;lt;/use_patch_radius&amp;gt;&#xA;              &amp;lt;ode&amp;gt;&#xA;                &amp;lt;slip&amp;gt;0&amp;lt;/slip&amp;gt;&#xA;              &amp;lt;/ode&amp;gt;&#xA;            &amp;lt;/torsional&amp;gt;&#xA;          &amp;lt;/friction&amp;gt;&#xA;          &amp;lt;bounce&amp;gt;&#xA;            &amp;lt;restitution_coefficient&amp;gt;0&amp;lt;/restitution_coefficient&amp;gt;&#xA;            &amp;lt;threshold&amp;gt;1e+06&amp;lt;/threshold&amp;gt;&#xA;          &amp;lt;/bounce&amp;gt;&#xA;          &amp;lt;contact&amp;gt;&#xA;            &amp;lt;collide_without_contact&amp;gt;0&amp;lt;/collide_without_contact&amp;gt;&#xA;            &amp;lt;collide_without_contact_bitmask&amp;gt;1&amp;lt;/collide_without_contact_bitmask&amp;gt;&#xA;            &amp;lt;collide_bitmask&amp;gt;1&amp;lt;/collide_bitmask&amp;gt;&#xA;            &amp;lt;ode&amp;gt;&#xA;              &amp;lt;soft_cfm&amp;gt;0&amp;lt;/soft_cfm&amp;gt;&#xA;              &amp;lt;soft_erp&amp;gt;0.2&amp;lt;/soft_erp&amp;gt;&#xA;              &amp;lt;kp&amp;gt;1e+13&amp;lt;/kp&amp;gt;&#xA;              &amp;lt;kd&amp;gt;1&amp;lt;/kd&amp;gt;&#xA;              &amp;lt;max_vel&amp;gt;0.01&amp;lt;/max_vel&amp;gt;&#xA;              &amp;lt;min_depth&amp;gt;0&amp;lt;/min_depth&amp;gt;&#xA;            &amp;lt;/ode&amp;gt;&#xA;            &amp;lt;bullet&amp;gt;&#xA;              &amp;lt;split_impulse&amp;gt;1&amp;lt;/split_impulse&amp;gt;&#xA;              &amp;lt;split_impulse_penetration_threshold&amp;gt;-0.01&amp;lt;/split_impulse_penetration_threshold&amp;gt;&#xA;              &amp;lt;soft_cfm&amp;gt;0&amp;lt;/soft_cfm&amp;gt;&#xA;              &amp;lt;soft_erp&amp;gt;0.2&amp;lt;/soft_erp&amp;gt;&#xA;              &amp;lt;kp&amp;gt;1e+13&amp;lt;/kp&amp;gt;&#xA;              &amp;lt;kd&amp;gt;1&amp;lt;/kd&amp;gt;&#xA;            &amp;lt;/bullet&amp;gt;&#xA;          &amp;lt;/contact&amp;gt;&#xA;        &amp;lt;/surface&amp;gt;&#xA;      &amp;lt;/collision&amp;gt;&#xA;    &amp;lt;/link&amp;gt;&#xA;    &amp;lt;link name='link_1'&amp;gt;&#xA;      &amp;lt;inertial&amp;gt;&#xA;        &amp;lt;mass&amp;gt;1&amp;lt;/mass&amp;gt;&#xA;        &amp;lt;inertia&amp;gt;&#xA;          &amp;lt;ixx&amp;gt;0.145833&amp;lt;/ixx&amp;gt;&#xA;          &amp;lt;ixy&amp;gt;0&amp;lt;/ixy&amp;gt;&#xA;          &amp;lt;ixz&amp;gt;0&amp;lt;/ixz&amp;gt;&#xA;          &amp;lt;iyy&amp;gt;0.145833&amp;lt;/iyy&amp;gt;&#xA;          &amp;lt;iyz&amp;gt;0&amp;lt;/iyz&amp;gt;&#xA;          &amp;lt;izz&amp;gt;0.125&amp;lt;/izz&amp;gt;&#xA;        &amp;lt;/inertia&amp;gt;&#xA;        &amp;lt;pose frame=''&amp;gt;0 0 0 0 -0 0&amp;lt;/pose&amp;gt;&#xA;      &amp;lt;/inertial&amp;gt;&#xA;      &amp;lt;pose frame=''&amp;gt;0 0 0.5 0 -0 0&amp;lt;/pose&amp;gt;&#xA;      &amp;lt;gravity&amp;gt;1&amp;lt;/gravity&amp;gt;&#xA;      &amp;lt;self_collide&amp;gt;0&amp;lt;/self_collide&amp;gt;&#xA;      &amp;lt;kinematic&amp;gt;0&amp;lt;/kinematic&amp;gt;&#xA;      &amp;lt;enable_wind&amp;gt;0&amp;lt;/enable_wind&amp;gt;&#xA;      &amp;lt;visual name='visual'&amp;gt;&#xA;        &amp;lt;pose frame=''&amp;gt;0 0 0 0 -0 0&amp;lt;/pose&amp;gt;&#xA;        &amp;lt;geometry&amp;gt;&#xA;          &amp;lt;cylinder&amp;gt;&#xA;            &amp;lt;radius&amp;gt;0.2&amp;lt;/radius&amp;gt;&#xA;            &amp;lt;length&amp;gt;1&amp;lt;/length&amp;gt;&#xA;          &amp;lt;/cylinder&amp;gt;&#xA;        &amp;lt;/geometry&amp;gt;&#xA;        &amp;lt;material&amp;gt;&#xA;          &amp;lt;lighting&amp;gt;1&amp;lt;/lighting&amp;gt;&#xA;          &amp;lt;script&amp;gt;&#xA;            &amp;lt;uri&amp;gt;file://media/materials/scripts/gazebo.material&amp;lt;/uri&amp;gt;&#xA;            &amp;lt;name&amp;gt;Gazebo/Grey&amp;lt;/name&amp;gt;&#xA;          &amp;lt;/script&amp;gt;&#xA;          &amp;lt;shader type='vertex'&amp;gt;&#xA;            &amp;lt;normal_map&amp;gt;__default__&amp;lt;/normal_map&amp;gt;&#xA;          &amp;lt;/shader&amp;gt;&#xA;          &amp;lt;ambient&amp;gt;0.3 0.3 0.3 1&amp;lt;/ambient&amp;gt;&#xA;          &amp;lt;diffuse&amp;gt;0.7 0.7 0.7 1&amp;lt;/diffuse&amp;gt;&#xA;          &amp;lt;specular&amp;gt;0.01 0.01 0.01 1&amp;lt;/specular&amp;gt;&#xA;          &amp;lt;emissive&amp;gt;0 0 0 1&amp;lt;/emissive&amp;gt;&#xA;        &amp;lt;/material&amp;gt;&#xA;        &amp;lt;transparency&amp;gt;0&amp;lt;/transparency&amp;gt;&#xA;        &amp;lt;cast_shadows&amp;gt;1&amp;lt;/cast_shadows&amp;gt;&#xA;      &amp;lt;/visual&amp;gt;&#xA;      &amp;lt;collision name='collision'&amp;gt;&#xA;        &amp;lt;laser_retro&amp;gt;0&amp;lt;/laser_retro&amp;gt;&#xA;        &amp;lt;max_contacts&amp;gt;10&amp;lt;/max_contacts&amp;gt;&#xA;        &amp;lt;pose frame=''&amp;gt;0 0 0 0 -0 0&amp;lt;/pose&amp;gt;&#xA;        &amp;lt;geometry&amp;gt;&#xA;          &amp;lt;cylinder&amp;gt;&#xA;            &amp;lt;radius&amp;gt;0.2&amp;lt;/radius&amp;gt;&#xA;            &amp;lt;length&amp;gt;1&amp;lt;/length&amp;gt;&#xA;          &amp;lt;/cylinder&amp;gt;&#xA;        &amp;lt;/geometry&amp;gt;&#xA;        &amp;lt;surface&amp;gt;&#xA;          &amp;lt;friction&amp;gt;&#xA;            &amp;lt;ode&amp;gt;&#xA;              &amp;lt;mu&amp;gt;1&amp;lt;/mu&amp;gt;&#xA;              &amp;lt;mu2&amp;gt;1&amp;lt;/mu2&amp;gt;&#xA;              &amp;lt;fdir1&amp;gt;0 0 0&amp;lt;/fdir1&amp;gt;&#xA;              &amp;lt;slip1&amp;gt;0&amp;lt;/slip1&amp;gt;&#xA;              &amp;lt;slip2&amp;gt;0&amp;lt;/slip2&amp;gt;&#xA;            &amp;lt;/ode&amp;gt;&#xA;            &amp;lt;torsional&amp;gt;&#xA;              &amp;lt;coefficient&amp;gt;1&amp;lt;/coefficient&amp;gt;&#xA;              &amp;lt;patch_radius&amp;gt;0&amp;lt;/patch_radius&amp;gt;&#xA;              &amp;lt;surface_radius&amp;gt;0&amp;lt;/surface_radius&amp;gt;&#xA;              &amp;lt;use_patch_radius&amp;gt;1&amp;lt;/use_patch_radius&amp;gt;&#xA;              &amp;lt;ode&amp;gt;&#xA;                &amp;lt;slip&amp;gt;0&amp;lt;/slip&amp;gt;&#xA;              &amp;lt;/ode&amp;gt;&#xA;            &amp;lt;/torsional&amp;gt;&#xA;          &amp;lt;/friction&amp;gt;&#xA;          &amp;lt;bounce&amp;gt;&#xA;            &amp;lt;restitution_coefficient&amp;gt;0&amp;lt;/restitution_coefficient&amp;gt;&#xA;            &amp;lt;threshold&amp;gt;1e+06&amp;lt;/threshold&amp;gt;&#xA;          &amp;lt;/bounce&amp;gt;&#xA;          &amp;lt;contact&amp;gt;&#xA;            &amp;lt;collide_without_contact&amp;gt;0&amp;lt;/collide_without_contact&amp;gt;&#xA;            &amp;lt;collide_without_contact_bitmask&amp;gt;1&amp;lt;/collide_without_contact_bitmask&amp;gt;&#xA;            &amp;lt;collide_bitmask&amp;gt;1&amp;lt;/collide_bitmask&amp;gt;&#xA;            &amp;lt;ode&amp;gt;&#xA;              &amp;lt;soft_cfm&amp;gt;0&amp;lt;/soft_cfm&amp;gt;&#xA;              &amp;lt;soft_erp&amp;gt;0.2&amp;lt;/soft_erp&amp;gt;&#xA;              &amp;lt;kp&amp;gt;1e+13&amp;lt;/kp&amp;gt;&#xA;              &amp;lt;kd&amp;gt;1&amp;lt;/kd&amp;gt;&#xA;              &amp;lt;max_vel&amp;gt;0.01&amp;lt;/max_vel&amp;gt;&#xA;              &amp;lt;min_depth&amp;gt;0&amp;lt;/min_depth&amp;gt;&#xA;            &amp;lt;/ode&amp;gt;&#xA;            &amp;lt;bullet&amp;gt;&#xA;              &amp;lt;split_impulse&amp;gt;1&amp;lt;/split_impulse&amp;gt;&#xA;              &amp;lt;split_impulse_penetration_threshold&amp;gt;-0.01&amp;lt;/split_impulse_penetration_threshold&amp;gt;&#xA;              &amp;lt;soft_cfm&amp;gt;0&amp;lt;/soft_cfm&amp;gt;&#xA;              &amp;lt;soft_erp&amp;gt;0.2&amp;lt;/soft_erp&amp;gt;&#xA;              &amp;lt;kp&amp;gt;1e+13&amp;lt;/kp&amp;gt;&#xA;              &amp;lt;kd&amp;gt;1&amp;lt;/kd&amp;gt;&#xA;            &amp;lt;/bullet&amp;gt;&#xA;          &amp;lt;/contact&amp;gt;&#xA;        &amp;lt;/surface&amp;gt;&#xA;      &amp;lt;/collision&amp;gt;&#xA;    &amp;lt;/link&amp;gt;&#xA;    &amp;lt;joint name='link_0_JOINT_0' type='revolute'&amp;gt;&#xA;      &amp;lt;parent&amp;gt;link_0&amp;lt;/parent&amp;gt;&#xA;      &amp;lt;child&amp;gt;link_1&amp;lt;/child&amp;gt;&#xA;      &amp;lt;pose frame=''&amp;gt;0 0 0 0 -0 0&amp;lt;/pose&amp;gt;&#xA;      &amp;lt;axis&amp;gt;&#xA;        &amp;lt;xyz&amp;gt;0 0 1&amp;lt;/xyz&amp;gt;&#xA;        &amp;lt;use_parent_model_frame&amp;gt;0&amp;lt;/use_parent_model_frame&amp;gt;&#xA;        &amp;lt;limit&amp;gt;&#xA;          &amp;lt;lower&amp;gt;-1.79769e+308&amp;lt;/lower&amp;gt;&#xA;          &amp;lt;upper&amp;gt;1.79769e+308&amp;lt;/upper&amp;gt;&#xA;          &amp;lt;effort&amp;gt;-1&amp;lt;/effort&amp;gt;&#xA;          &amp;lt;velocity&amp;gt;-1&amp;lt;/velocity&amp;gt;&#xA;        &amp;lt;/limit&amp;gt;&#xA;        &amp;lt;dynamics&amp;gt;&#xA;          &amp;lt;spring_reference&amp;gt;0&amp;lt;/spring_reference&amp;gt;&#xA;          &amp;lt;spring_stiffness&amp;gt;0&amp;lt;/spring_stiffness&amp;gt;&#xA;          &amp;lt;damping&amp;gt;0&amp;lt;/damping&amp;gt;&#xA;        &amp;lt;/dynamics&amp;gt;&#xA;      &amp;lt;/axis&amp;gt;&#xA;      &amp;lt;physics&amp;gt;&#xA;        &amp;lt;ode&amp;gt;&#xA;          &amp;lt;limit&amp;gt;&#xA;            &amp;lt;cfm&amp;gt;0&amp;lt;/cfm&amp;gt;&#xA;            &amp;lt;erp&amp;gt;0.2&amp;lt;/erp&amp;gt;&#xA;          &amp;lt;/limit&amp;gt;&#xA;          &amp;lt;suspension&amp;gt;&#xA;            &amp;lt;cfm&amp;gt;0&amp;lt;/cfm&amp;gt;&#xA;            &amp;lt;erp&amp;gt;0.2&amp;lt;/erp&amp;gt;&#xA;          &amp;lt;/suspension&amp;gt;&#xA;        &amp;lt;/ode&amp;gt;&#xA;      &amp;lt;/physics&amp;gt;&#xA;    &amp;lt;/joint&amp;gt;&#xA;    &amp;lt;static&amp;gt;0&amp;lt;/static&amp;gt;&#xA;    &amp;lt;allow_auto_disable&amp;gt;1&amp;lt;/allow_auto_disable&amp;gt;&#xA;  &amp;lt;/model&amp;gt;&#xA;&amp;lt;/sdf&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In the latter case the robot model's bottom will be automatically aligned with the floor when you add it.&lt;/p&gt;&#xA;" OwnerUserId="4310" LastEditorUserId="4310" LastEditDate="2020-04-24T13:10:24.063" LastActivityDate="2020-04-24T13:10:24.063" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="20539" PostTypeId="2" ParentId="20536" CreationDate="2020-04-22T17:26:49.297" Score="1" Body="&lt;p&gt;You can call &lt;code&gt;gazebo&lt;/code&gt; passing the world file as argument, modify it and use &lt;em&gt;File -&gt; Save As...&lt;/em&gt; overwriting the original file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But a more robust approach is bypassing the GUI editor entirely and creating world and model files directly in your text editor of choice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The reason GUI editing features don't seem very robust is probably because advanced users seldom use them: instead we use e.g. &lt;a href=&quot;http://wiki.ros.org/xacro&quot; rel=&quot;nofollow noreferrer&quot;&gt;xacro&lt;/a&gt; to enable the creation of part libraries that can be reused in much more flexible ways than any GUI would ever allow.&lt;/p&gt;&#xA;" OwnerUserId="4310" LastActivityDate="2020-04-22T17:26:49.297" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="20541" PostTypeId="2" ParentId="20408" CreationDate="2020-04-23T09:14:08.323" Score="1" Body="&lt;p&gt;with the key words chuck gave me I found an article of David Anisi about &quot;Optimal motion control of a ground vehicle&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There he describes an algorithm using the Hamilton to solve these kind of optimal control problems. Chuck was right that I had to add parameters for linear as well as angular velocity. Therefore my constraints are&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\dot{p_1}=v cos(\phi)$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\dot{p_2}=v sin(\phi)$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\dot{p_3}=w$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The linear velocity &lt;span class=&quot;math-container&quot;&gt;$v$&lt;/span&gt; and the angular velocity &lt;span class=&quot;math-container&quot;&gt;$w$&lt;/span&gt; are not part of the parametrisation but control variables. &#xA;The function &lt;span class=&quot;math-container&quot;&gt;$L$&lt;/span&gt; simplifies to &lt;span class=&quot;math-container&quot;&gt;$L=v^2+w^2$&lt;/span&gt;. The right hand sides of the constraints are abreviated with &lt;span class=&quot;math-container&quot;&gt;$f$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Algorithm is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) define &lt;span class=&quot;math-container&quot;&gt;$H(x,v,w,\lambda):=-L+\lambda f$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) find the maximal argument &lt;span class=&quot;math-container&quot;&gt;$\bar{v}$&lt;/span&gt; &lt;span class=&quot;math-container&quot;&gt;$\bar{w}$&lt;/span&gt; s.t. H is maximal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3) the derivations of &lt;span class=&quot;math-container&quot;&gt;$H(x,\bar{v},\bar{w},\lambda)$&lt;/span&gt; with respect to &lt;span class=&quot;math-container&quot;&gt;$\lambda$&lt;/span&gt; define the derivatives of &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; and the negative derivations of &lt;span class=&quot;math-container&quot;&gt;$H(x,\bar{v},\bar{w},\lambda)$&lt;/span&gt; with respect to &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; define the derivatives of &lt;span class=&quot;math-container&quot;&gt;$\lambda$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;4) this ode system can be solved with the shooting method&lt;/p&gt;&#xA;" OwnerUserId="26062" LastActivityDate="2020-04-23T09:14:08.323" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20542" PostTypeId="2" ParentId="20519" CreationDate="2020-04-23T11:45:27.817" Score="2" Body="&lt;p&gt;Since you already have controller code written for the physical robot, I recommend creating a set of adapters so you can run the same code in Webots, instead of rewriting everything from scratch.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://www.cyberbotics.com/doc/guide/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Webots User Guide&lt;/a&gt; provides extensive guidance on how to setup and interface with the platform. In particular I recommend taking a look into the chapters on how to &lt;a href=&quot;https://cyberbotics.com/doc/guide/using-matlab?tab-language=matlab&quot; rel=&quot;nofollow noreferrer&quot;&gt;setup MATLAB language support&lt;/a&gt; and the &lt;a href=&quot;https://www.cyberbotics.com/doc/guide/matlab&quot; rel=&quot;nofollow noreferrer&quot;&gt;Webots MATLAB API&lt;/a&gt;. You'll probably also want to go through the &lt;a href=&quot;https://www.cyberbotics.com/doc/guide/tutorials&quot; rel=&quot;nofollow noreferrer&quot;&gt;tutorials&lt;/a&gt;, especially the one about &lt;a href=&quot;https://www.cyberbotics.com/doc/guide/tutorial-4-more-about-controllers?tab-language=matlab&quot; rel=&quot;nofollow noreferrer&quot;&gt;controllers&lt;/a&gt;. Notice that MATLAB code snippets are provided, but you may have to click the corresponding button in the code window to visualize it:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/9MDri.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9MDri.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="4310" LastActivityDate="2020-04-23T11:45:27.817" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20544" PostTypeId="1" CreationDate="2020-04-23T16:15:42.350" Score="0" ViewCount="202" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ToR3H.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ToR3H.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am trying to run this youbot ( sample world) from webots, where the controller is implemented in MATLAB, on running the code it pops out the following error seen in the picture attached. I have also however installed the Support for MinGW-w64 C/C++ Compiler, though it still shows the same error. Could someone help a bit? The error is as follows: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Warning: Name is nonexistent or not a directory: C:\Program Files\Webots\lib\matlab &#xA;&amp;gt; In path (line 109)&#xA;  In addpath (line 86)&#xA;  In launcher (line 23) &#xA;The MATLAB &quot;MinGW-w64 C/C++ Compiler&quot; addon is not installed, please install it from: https://fr.mathworks.com/matlabcentral/fileexchange/52848-matlab-support-for-mingw-w64-c-c-compiler&#xA;Waiting up to 5 seconds for C:\Users\asus\AppData\Local\Temp\webots_matlab_lock to be deleted by another MATLAB instance.&#xA;Deleting C:\Users\asus\AppData\Local\Temp\webots_matlab_lock...&#xA;Creating: C:\Users\asus\AppData\Local\Temp\protofile_matlab_2018b_webots_R2020a_revision_1.m&#xA;Load Library failed.&#xA;Error using loadlibrary&#xA;Could not find file allincludes.h.&#xA;&#xA;Error in loadlibrary&#xA;&#xA;Error in launcher (line 74)&#xA;      loadlibrary( ...&#xA;&lt;span class=&quot;math-container&quot;&gt;```&lt;/span&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="23735" LastEditorUserId="23735" LastEditDate="2020-04-23T16:55:22.527" LastActivityDate="2021-05-21T18:03:15.357" Title="Matlab Simulation using Webots!" Tags="&lt;mobile-robot&gt;&lt;control&gt;&lt;first-robotics&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20546" PostTypeId="2" ParentId="12313" CreationDate="2020-04-24T12:57:30.717" Score="0" Body="&lt;p&gt;In general terms, transforms between coordinate frames in ROS are achieved through the &lt;a href=&quot;http://wiki.ros.org/tf&quot; rel=&quot;nofollow noreferrer&quot;&gt;tf&lt;/a&gt; API. Strictly speaking we should actually use &lt;a href=&quot;http://wiki.ros.org/tf2&quot; rel=&quot;nofollow noreferrer&quot;&gt;tf2&lt;/a&gt;, but since its documentation still has &lt;a href=&quot;http://docs.ros.org/melodic/api/tf2_ros/html/python/tf2_ros.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;some catch up to do&lt;/a&gt; you might want to stick to tf for the time being.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;http://docs.ros.org/api/tf/html/python/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Python tf API&lt;/a&gt; makes it easy to convert geometric messages between coordinate frames. Following the scenario you outlined, converting IMU data from global to local coordinate frames could be done as below:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;import rospy&#xA;import tf&#xA;&#xA;import sensor_msgs.msg&#xA;import geometry_msgs.msg&#xA;&#xA;class IMUListener(object):&#xA;    def __init__(self):&#xA;        self.tf_listener = tf.TransformListener()&#xA;        self.global_frame = rospy.get_param('~global_frame', 'world')&#xA;        self.subscriber = rospy.Subscriber('imu', sensor_msgs.msg.Imu, self.callback, queue_size=1)&#xA;&#xA;    def callback(self, imu):&#xA;        global_frame = self.global_frame&#xA;        local_frame = imu.header.frame_id&#xA;&#xA;        if not (self.tf.frameExists(global_frame) and self.tf.frameExists(local_frame)):&#xA;            rospy.logerr('Could not transform between frames &quot;%s&quot; and &quot;%s&quot;' % (global_frame, local_frame))&#xA;            return&#xA;&#xA;        # Build a stamped quaternion message containing the IMU orientation readings,&#xA;        # timestamp and source reference frame (presumed to be the global reference frame).&#xA;        reading = geometry_msgs.msg.QuaternionStamped()&#xA;        reading.header.seq = imu.header.seq&#xA;        reading.header.stamp = imu.header.stamp&#xA;        reading.header.frame_id = global_frame&#xA;        reading.quaternion = imu.orientation&#xA;&#xA;        # Convert the input quaternion from its source frame (taken from header.frame_id)&#xA;        # to the given target frame, using the transform available at time header.stamp.&#xA;        transformed = self.tf_listener.transformQuaternion(local_frame, reading)&#xA;&#xA;        print transformed&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This code assumes that your problem is that even though IMU messages are assigned the sensor's frame id, the actual readings are relative to the global frame, and therefore you need a way to convert them to the right reference. It uses a &lt;code&gt;tf.TransformListener&lt;/code&gt; object to listen to messages in the &lt;code&gt;/tf&lt;/code&gt; topic and extract time-stamped transforms between coordinate frames. The method &lt;code&gt;transformQuaternion()&lt;/code&gt; transforms the input &lt;code&gt;QuaternionStamped&lt;/code&gt; message from its assigned &lt;code&gt;header.frame_id&lt;/code&gt; reference frame to the target frame, using the transform between source and target frames that was in effect at time &lt;code&gt;header.stamp&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="4310" LastActivityDate="2020-04-24T12:57:30.717" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20547" PostTypeId="2" ParentId="8607" CreationDate="2020-04-24T15:19:05.207" Score="1" Body="&lt;p&gt;A followup on holmeski's reply. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems those pages have been taken down.&#xA;I found the old webpages on the 'Way Back Machine'.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://web.archive.org/web/20150326184615/https://pixhawk.org/firmware/apps/attitude_estimator_ekf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pixhawk Attitude Estimator (EKF)&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://web.archive.org/web/20140730022711/https://pixhawk.org/firmware/apps/ekf_att_pos_estimator&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pixhawk ekf_att_pos_estimator (Application)&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="26246" LastActivityDate="2020-04-24T15:19:05.207" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20548" PostTypeId="1" AcceptedAnswerId="20554" CreationDate="2020-04-24T17:05:48.680" Score="2" ViewCount="41" Body="&lt;p&gt;I want to know what type of sensor hardware I need to allow detection of moving targets (20mm - 200mm size range) in heavily murky water, where visibility range of typical camera can be limited to 0.5 meter and less.The operational range of the sensor can be not more than 10-20 meters. The goal is to detect organic bodies,estimate their size and count them using computer vision software like OpenCV. I am software guy and looking for an advice for the hardware part of this task.&lt;/p&gt;&#xA;" OwnerUserId="26248" LastActivityDate="2020-04-25T15:11:53.530" Title="Sensors to detect targets in low visibility environment" Tags="&lt;sensors&gt;&lt;computer-vision&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20551" PostTypeId="1" CreationDate="2020-04-25T14:03:34.257" Score="0" ViewCount="602" Body="&lt;p&gt;&lt;a href=&quot;https://answers.gazebosim.org//question/20229/gazebo-does-not-load-simple-model/&quot; rel=&quot;nofollow noreferrer&quot;&gt;This question&lt;/a&gt; and the &lt;a href=&quot;http://gazebosim.org/tutorials?tut=components&amp;amp;cat=get_started&quot; rel=&quot;nofollow noreferrer&quot;&gt;docs&lt;/a&gt; pointed me to &lt;code&gt;$GAZEBO_MODEL_PATH&lt;/code&gt; as being the environment variable to change to include models in a gazebo world. However, I am getting an error. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is my current tree structure: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;.&#xA;├── CMakeLists.txt&#xA;├── model&#xA;│   └── robot&#xA;│       ├── model.config&#xA;│       └── model.sdf&#xA;├── script&#xA;│   └── hello.cpp&#xA;└── worlds&#xA;    ├── empty.world&#xA;    └── myworld&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;My &lt;code&gt;GAZEBO_MODEL_PATH&lt;/code&gt; is: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ $ echo $GAZEBO_MODEL_PATH&#xA;:/home/self/workspace/build_my_world/model/robot:&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But when I run gazebo I get an error. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ gazebo worlds/myworld &#xA;Error [parser.cc:652] Could not find model.config or manifest.xml for the model&#xA;terminate called after throwing an instance of 'std::bad_alloc'&#xA;  what():  std::bad_alloc&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This is what I have in &lt;code&gt;myworld&lt;/code&gt; file: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;   1 &amp;lt;sdf version='1.6'&amp;gt;&#xA;   2   &amp;lt;world name='default'&amp;gt;&#xA;   3     &#xA;   4     &amp;lt;include&amp;gt;&#xA;   5       &amp;lt;pose frame=''&amp;gt;0 0 30 0 0 0&amp;lt;/pose&amp;gt;&#xA;   6       &amp;lt;uri&amp;gt;model://model&amp;lt;/uri&amp;gt;&#xA;   7     &amp;lt;/include&amp;gt;&#xA;   8     &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The final problem is that even if I remove the model in the world file, entering &lt;code&gt;gazebo&lt;/code&gt; doesn't launch the application. There's NO output either. &lt;/p&gt;&#xA;" OwnerUserId="15157" LastEditorUserId="15157" LastEditDate="2020-04-25T14:11:53.583" LastActivityDate="2021-05-22T14:05:50.600" Title="Unable to find my robot with an error" Tags="&lt;gazebo&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20552" PostTypeId="2" ParentId="20354" CreationDate="2020-04-25T14:16:39.383" Score="1" Body="&lt;p&gt;There's one point to add: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you localize a vehicle in a pre-built map you assume that the map is static or at least the majority of the map hasn't changed which means that the changes will minimally affect your pose estimate&lt;/p&gt;&#xA;" OwnerUserId="24720" LastActivityDate="2020-04-25T14:16:39.383" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20553" PostTypeId="2" ParentId="20551" CreationDate="2020-04-25T14:23:23.110" Score="0" Body="&lt;p&gt;First, you should add to &lt;code&gt;$GAZEBO_MODEL_PATH&lt;/code&gt; the base directory of your model collection, &lt;code&gt;/home/self/workspace/build_my_world/model&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Second, you should refer to your model by the name of its subdirectory, &lt;code&gt;robot&lt;/code&gt; in this case.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Third, you should close the &lt;code&gt;&amp;lt;world&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;sdf&amp;gt;&lt;/code&gt; tags at the end of the file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It's also advisable to add the &lt;code&gt;sun&lt;/code&gt; and &lt;code&gt;ground_plane&lt;/code&gt; models to your world.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So in summary, what you should have is the following:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;math-container&quot;&gt;$ echo $&lt;/span&gt;GAZEBO_MODEL_PATH&#xA;:/home/self/workspace/build_my_world/model&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;pre class=&quot;lang-xml prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;&#xA;&amp;lt;sdf version='1.6'&amp;gt;&#xA;  &amp;lt;world name='default'&amp;gt;&#xA;    &amp;lt;include&amp;gt;&#xA;      &amp;lt;uri&amp;gt;model://sun&amp;lt;/uri&amp;gt;&#xA;    &amp;lt;/include&amp;gt;&#xA;    &amp;lt;include&amp;gt;&#xA;      &amp;lt;uri&amp;gt;model://ground_plane&amp;lt;/uri&amp;gt;&#xA;    &amp;lt;/include&amp;gt;&#xA;    &amp;lt;include&amp;gt;&#xA;      &amp;lt;pose frame=''&amp;gt;0 0 0 0 0 0&amp;lt;/pose&amp;gt;&#xA;      &amp;lt;uri&amp;gt;model://robot&amp;lt;/uri&amp;gt;&#xA;    &amp;lt;/include&amp;gt;&#xA;  &amp;lt;/world&amp;gt;&#xA;&amp;lt;/sdf&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="4310" LastEditorUserId="4310" LastEditDate="2020-04-27T11:42:03.087" LastActivityDate="2020-04-27T11:42:03.087" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="20554" PostTypeId="2" ParentId="20548" CreationDate="2020-04-25T15:11:53.530" Score="1" Body="&lt;p&gt;As you're probably aware, the sensor solution you're looking for is pretty much a research subject in itself. There have been &lt;a href=&quot;https://www.novuslight.com/seeing-through-murky-water-with-time-of-flight-cameras_N6063.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;experiments&lt;/a&gt; using infrared time-of-flight cameras in murky water, and there are a few &lt;a href=&quot;https://darkwatervision.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;devices&lt;/a&gt; commercially available, but they're most certainly expensive and will require some engineering work to be adapted for a robotics application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A relatively simpler option is to buy a set of &lt;a href=&quot;https://www.seaview.com/underwater-video-cameras-s/1814.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;underwater infrared cameras&lt;/a&gt; and implement range estimation in software, e.g. using OpenCV as you mentioned. Another alternative approach is to use sonar: there are &lt;a href=&quot;https://bluerobotics.com/store/sensors-sonars-cameras/sonar/ping360-sonar-r1-rp/&quot; rel=&quot;nofollow noreferrer&quot;&gt;2D&lt;/a&gt; and &lt;a href=&quot;https://toposens.com/robotic-navigation/&quot; rel=&quot;nofollow noreferrer&quot;&gt;3D&lt;/a&gt; sonars commercially available, or you could try to &lt;a href=&quot;https://hackaday.io/project/159297-ultrasonic-3d-scanner&quot; rel=&quot;nofollow noreferrer&quot;&gt;build your own&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="4310" LastActivityDate="2020-04-25T15:11:53.530" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20555" PostTypeId="2" ParentId="19315" CreationDate="2020-04-25T16:31:47.730" Score="0" Body="&lt;p&gt;usually ultrasonic sensors are not precise&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using an ultrasonic sensor will not very good for large environments. It is very imprecise and SLAM algorithms accumulate error intrinsically it my be enough for simple indoor environments but you'd better use a lidar or a camera (cameras are cheap)&lt;/p&gt;&#xA;" OwnerUserId="24720" LastActivityDate="2020-04-25T16:31:47.730" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20556" PostTypeId="2" ParentId="19241" CreationDate="2020-04-25T16:37:25.637" Score="0" Body="&lt;p&gt;The answer of @C.O Park is pretty good.&#xA;I will just add that when you SLAM, either you are doing it to localize the vehicle and thus the map is a consequence, in this case using transient objects which are stationary at the moment is good because they will help with the scan matching. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you are SLAMing to localize the vehicle currently and then use the map later on, the transient objects are useful for the current run, however they may not be there for the following runs. In this case they might affect the results of the scan matching for subsequent runs. In this case it might be interesting to filter such objects to improve the quality of the generated map as we suppose that the map generated contains static objects useful for localization.&lt;/p&gt;&#xA;" OwnerUserId="24720" LastActivityDate="2020-04-25T16:37:25.637" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20557" PostTypeId="2" ParentId="19120" CreationDate="2020-04-25T16:42:10.460" Score="0" Body="&lt;p&gt;If it is a real-time SLAM for some real application I would say yes, it is impossible. You won't be able to process 30 fps on your arduino&#xA;go for the latest Raspberry or Odroid or a similar SBC&lt;/p&gt;&#xA;" OwnerUserId="24720" LastActivityDate="2020-04-25T16:42:10.460" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20558" PostTypeId="2" ParentId="9851" CreationDate="2020-04-25T17:50:35.597" Score="1" Body="&lt;p&gt;Depending on the camera you are using, your SLAM algorithm has to be adapted.&#xA;You can simply use a RGB camera (webcam-like camera), it is not necessary that the camera is an RGB-D camera. Nevertheless, using only an RGB cam you'll be doing a bearing only SLAM.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I recommed you stay away from ultrasonic sensors for SLAM, they are not precise. They were used in the past but with LIDARs getting cheaper and more accessible it is a much better choice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Concerning the CPU, if you're doing a VSLAM and you're just grabbing some opensource code try to use a CPU with similar processing power. Otherwise you can try your algorithm (if you're writing your own code) on a pre-registered dataset offline on any PC and at the end if you cannot manage to run it in real-time then you should opt for a faster CPU. &#xA;If you were comfortable with GPU programming try to accelerate your code in VSLAM you will end up doing a lot of image processing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, it is true that the performance depends on the algorithm developed, however, keep in mind that a major factor is the quantity of data you are throwing at it per unit of time. Example with LIDAR-based SLAM processing data coming from a velodyne-16 layers was a lot easier than processing data coming from velodyne-64 layers or 128 layers. The number of points it will generate per second is much higher. One approach would be to down-sample the data acquired. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case of the camera, you should take into account the size of the processed frame, and the how many frames you're getting per second.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I recommend you start testing offline on any available PC and then estimate your needs based on your algorithms &amp;amp; sensor combination.&lt;/p&gt;&#xA;" OwnerUserId="24720" LastActivityDate="2020-04-25T17:50:35.597" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20560" PostTypeId="1" AcceptedAnswerId="20566" CreationDate="2020-04-25T23:29:08.623" Score="0" ViewCount="70" Body="&lt;p&gt;Hello Robotics Stack Exchange. I am trying to put frames to this robot so I can make forward and inverse kinematics. However, when I use the DH parameters I do not get the same results as roboDK (a robot visualisation program). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is said robot. &lt;a href=&quot;https://i.stack.imgur.com/tUYpp.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tUYpp.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are my reasoning for putting the frames there, showing my reasoning I believe will show my mistakes to those more knowledgable than me hopefully. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;-1: First i identify the joint axis. The second joint axis is displaced 25 mm to the side according to the data sheet so that's why its moved in the illustration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;0: Then I put a base frame. The base frame I chose to be exactly as the first frame since i want zeros in my data sheet to give me fewer variables when I need to make inverse kinematics later on. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;1: Then I put frame one in. I put the z direction around the axis of rotation. Then I put the frame one next to axis 2 because i want the common normal. For that they have to next to each other so it can be a line with 90 degrees. When they are next to each other x_1 is pointing to the common perpendicular. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;2: Frame 2 is there because the next link is parallel with it. Now z_2 is pointing into the page and x_2 is pointing towards the common perpendicular. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;3: Same logic as in 2. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;4: Frame four physically is at joint 4 but the origin is at frame 5. That is because frame 4 intersects frame 5 at the z axis. X_5 points toward the common normal. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;5: Now z_5 and z_6 do intersect but we chose that it has to be where frame 4 is because they already intersect. So the origin is at the same place as 5. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;6: Z follows the axis of rotation. The x_6 axis looks down because that's what the roboDK said it looks like. We want our calculations to match with that program and the last frame is also arbitrary because it does not have any link after to compare after it. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This was my reasoning. I hope someone can spot my mistake in my reasoning because I am sure I can do the DH-parameters from the frame description so the problems must be with the frames themselves. Thank you. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The data is here if it is needed: &lt;a href=&quot;https://www.kuka.com/-/media/kuka-downloads/imported/6b77eecacfe542d3b736af377562ecaa/0000210361_en.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.kuka.com/-/media/kuka-downloads/imported/6b77eecacfe542d3b736af377562ecaa/0000210361_en.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="24768" LastActivityDate="2020-04-27T07:03:51.817" Title="Problems fixing frames to a 6 degrees freedom robot" Tags="&lt;kinematics&gt;&lt;inverse-kinematics&gt;&lt;industrial-robot&gt;&lt;forward-kinematics&gt;&lt;dh-parameters&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20562" PostTypeId="2" ParentId="20544" CreationDate="2020-04-26T14:39:11.803" Score="1" Body="&lt;p&gt;You've got two serious problems clearly stated in your error message:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Warning: Name is nonexistent or not a directory: C:\Program Files\Webots\lib\matlab &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;And&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The MATLAB &quot;MinGW-w64 C/C++ Compiler&quot; addon is not installed, please install it&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Have you fixed these problems? It looks like you don't have the Webots library installed and you also don't have a compiler installed. Nothing is going to work and we can't provide any other assistance until you get these resolved (and resolving them may fix everything). &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-04-26T14:39:11.803" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20563" PostTypeId="1" CreationDate="2020-04-26T20:27:47.957" Score="1" ViewCount="105" Body="&lt;p&gt;For my application, I need to be able to control a servo with a simple on/off switch. When it's off (pulled LOW), I need to servo to go at -90 degrees and stay there - possibly for a prolonged time. When it's on (pulled HIGH), I need the servo to go to +90 degree and stay there - possibly for a prolonged time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'd like to minimize the control logic footprint and complexity, and also to minimize standby power consumption in servo jitter in both positions. So ideally I'd want to get by without Arduino at all - with some kind of a simple analog / IC comparator logic based on servo's internal potentiometer, and direct control of motor wires.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Rotation precision is not important, so +90 can be &quot;anything above +85 degrees&quot;, and -90 can be &quot;anything below -85 degrees&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I won't be able to fit external end-switches to the mechanical application and want to rely on servo's internals only. I have a bunch of no-name SG90 lying around (which are a perfect fit size-wise and torque-wise) - but I would not be against buying a different kind of a &quot;servo-like&quot; actuator that would facilitate a simpler conversion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can someone suggest where to look for the solution schematics - and whether it might exist as a pre-made IC?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found a Servo Trigger board: &lt;a href=&quot;https://www.sparkfun.com/products/13118?_ga=2.160099069.1169016740.1587923297-1103320110.1587923297&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.sparkfun.com/products/13118?_ga=2.160099069.1169016740.1587923297-1103320110.1587923297&lt;/a&gt; which at a first glance does what I need ad is easy to use. But it is still an over-complicated (internally) solution with a constantly running microcontroller to produce PWM pulses that are to be decoded on the servo side. I guess a much simpler (and less idle power draw) solution would be possible based on a direct hook-up to servo's potentiometer and analog comparator logic, but I can't find anything.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Will appreciate any advice.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="26265" LastActivityDate="2020-04-27T15:16:56.197" Title="Control a servo (two position 180-degree swing) with an On/Off switch without microcontrollers" Tags="&lt;control&gt;&lt;servomotor&gt;&lt;electronics&gt;&lt;rcservo&gt;&lt;otherservos&gt;" AnswerCount="1" CommentCount="4" ClosedDate="2020-04-28T00:31:05.103" ContentLicense="CC BY-SA 4.0" />
  <row Id="20564" PostTypeId="1" AcceptedAnswerId="20569" CreationDate="2020-04-27T00:01:24.343" Score="0" ViewCount="71" Body="&lt;p&gt;Recently I started studying papers on SLAM systems by Durrant-Whyte for my research and I'm finding some difficulties in the math (matrices and probability) that is tackled in these papers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Which math books/topics would you recommend me to go over before continuing with other papers?&lt;/p&gt;&#xA;" OwnerUserId="26130" LastActivityDate="2020-04-27T15:11:20.707" Title="Which math books would help in learning SLAM systems?" Tags="&lt;slam&gt;&lt;localization&gt;&lt;mapping&gt;&lt;probability&gt;" AnswerCount="2" CommentCount="2" ClosedDate="2020-04-28T00:07:14.150" ContentLicense="CC BY-SA 4.0" />
  <row Id="20565" PostTypeId="2" ParentId="20564" CreationDate="2020-04-27T06:24:47.867" Score="1" Body="&lt;p&gt;The Probabilistic Robotics written by Thuran and his colleagues was completely helpful for me. Also, you can follow one of their colleague &lt;a href=&quot;https://www.youtube.com/watch?v=V9qQc5X7O0k&quot; rel=&quot;nofollow noreferrer&quot;&gt;videos on youtube&lt;/a&gt; for SLAM. &lt;/p&gt;&#xA;" OwnerUserId="23917" LastActivityDate="2020-04-27T06:24:47.867" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20566" PostTypeId="2" ParentId="20560" CreationDate="2020-04-27T07:03:51.817" Score="0" Body="&lt;p&gt;I have studied manipulators kinematic by Craig book &quot;Intro to robotics&quot;. Based on this book you must consider frame 0 and 1 co-incident. Look at this much similar example in this book:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/KSrvq.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KSrvq.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/whBd1.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/whBd1.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="23917" LastActivityDate="2020-04-27T07:03:51.817" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20567" PostTypeId="1" CreationDate="2020-04-27T09:21:56.990" Score="2" ViewCount="61" Body="&lt;p&gt;I am developing a robot arm and after calculating the jacobian matrix and then the kinematic isotropy through:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/mznYp.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/mznYp.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I get a kinematic isotropy of zero, due to four zero eigenvalues in my jacobian. What does this mean for the smoothnes of my workspace? I have read that the closer the kinematic isotropy is to 1, the more isotropic the manipulability ellipsoid. Does a kinematic isotropy of zero imply no manipulability?&lt;/p&gt;&#xA;" OwnerUserId="26218" LastActivityDate="2020-04-27T22:59:57.743" Title="Kinematic isotropy equal 0" Tags="&lt;jacobian&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20569" PostTypeId="2" ParentId="20564" CreationDate="2020-04-27T15:11:20.707" Score="1" Body="&lt;p&gt;Probability and statistics.  Stochastic signal processing.  Estimation and Detection theory (I highly recommend that you find a class that uses Harry VanTrees's book and that offers office hours, that you enroll, and study, and that you reserve lots of time in your schedule to take it -- if you can learn that stuff by reading the book you're somewhere in the 99.9th percentile).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&quot;Optimal State Estimation&quot; by Dan Simon is a really good Kalman filter book, but if you find yourself just reading the words and not &lt;em&gt;getting&lt;/em&gt; the math, then you need to put it down and go study multivariate probability for a while.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Matrix math has been mentioned -- but you can know the matrix math up the wazoo, and all it does is make it quicker to formulate the problems.  Without the knowledge of probability &amp;amp; statistics part, the matrix math will just help you screw up quicker, and with more elan.&lt;/p&gt;&#xA;" OwnerUserId="1411" LastActivityDate="2020-04-27T15:11:20.707" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20570" PostTypeId="2" ParentId="20563" CreationDate="2020-04-27T15:16:56.197" Score="0" Body="&lt;p&gt;Make a 555 servo exerciser, and replace the position pot with your switch (or use a pair of position pots and switch between them).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's your starting point: &lt;a href=&quot;http://www.seattlerobotics.org/encoder/200210/servoex/ServoExcerciser.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.seattlerobotics.org/encoder/200210/servoex/ServoExcerciser.htm&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="1411" LastActivityDate="2020-04-27T15:16:56.197" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20573" PostTypeId="1" CreationDate="2020-04-27T19:58:04.830" Score="0" ViewCount="88" Body="&lt;p&gt;I am trying to simulate the experiments in the paper &quot;Time-Domain Passivity Control of Haptic Interfaces&quot;, Hanaford and Ryu, 2002, IEEE transactions on robotics and automation vol .18, No1 about the simulation 2, in Fig.8, and its results are fig.9 and fig.10. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know an exact model of fig.9 which I can draw again in Matlab/simulink to run. I'm having trouble visualizing the mathematical model explaining the input and output of the system so that I can put it in a MATLAB code and perform the simulation. I am using constants like the image.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I do to get similar results? When I try to emulate something I get inconsistent results and I have trouble putting the mathematical model in lines of code. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried drawing spring and damper as in fig.6 of the same paper, but I don't know which is my input (force, velocity or position) and also the type of signal of input (sine, step,...) to get a similar result as the paper, or how I can insert the initial conditions on the code editor or on the Simulink. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I added 3 images, one is the parameters that I chose and another is the model which I drew.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am really confused about initial condition of position. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In here, for the Virtual Environment: damping = -50 (I want to check the case without Passivity controller) k = 30000.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am sending the simulation if it help. Thanks a lot :D&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Wq7ju.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Wq7ju.png&quot; alt=&quot;Parameters&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/Qzs6p.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Qzs6p.jpg&quot; alt=&quot;Modeling1&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/kmoe3.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kmoe3.jpg&quot; alt=&quot;Modeling&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Matlab editor code:&#xA;(sorry for the mess, I don't know how to put the modeling in the code) :/&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;%%%% Simulation Haptic Interface System %%%%&#xA;&#xA;% - Impedance-based environment&#xA;&#xA;clc, clear&#xA;&#xA;%% Parameters&#xA;&#xA;freq = 1000;           % Sampling rate simulation&#xA;delta_T = 1/freq;      % Sampling period simulation&#xA;t = 0:delta_T:10;      % Simulation time&#xA;&#xA;%- Human Operator/ Disturbance (HO) -&amp;gt; mass + spring&#xA;M_HO = 0.1;            % Mass HO system (? kg)&#xA;k_HO = 10000;          % Spring HO constant  (? kN/m)&#xA;&#xA;%- Haptic device (Interface) (HI)&#xA;M_HI = 0.1;            % Mass HI system (? kg)&#xA;k_HI = 150000;         % Spring HI constant  (? kN/m)&#xA;b_HI = 50;             % Damping HI constant (? Ns/m)&#xA;&#xA;%- Delayed Virtual Environment (VE)&#xA;k_VE = 30000;          % Spring VE constant  (30 kN/m)&#xA;b_VE = - 50 ;          % Damping VE constant (-50 Ns/m)&#xA;&#xA;freq_VE = 200/3;       % Sampling rate VE (66.67 Hz)&#xA;delta_Tve = 1/freq_VE; % VE system operates at a realativily slow samplig rate (15 ms)&#xA;&#xA;%% Inicialization &#xA;&#xA;%- Human Operator/ Disturbance (HO) -&amp;gt; mass + spring&#xA;x_HO = [0];            % Human position&#xA;dx_HO = [0];&#xA;ddx_HO = [0];&#xA;f_HO = [0];            % Force output (? N)&#xA;&#xA;%- Haptic device (Interface) (HI)&#xA;x_HI = [0];            % Human disturbance input - position&#xA;dx_HI = [0];&#xA;ddx_HI = [0];&#xA;f_HI = [0];            % Force output (? N)&#xA;&#xA;%- Series PC (alpha)&#xA;W = [0 0];             % Passivity Observer (We set up the PO to monitor only the &#xA;                       %                     virtual environment and the PC)&#xA;alpha = [0 0];         % Passivity Controller&#xA;f_PC = [0];&#xA;&#xA;%- Delayed Virtual Environment (VE)&#xA;x_VE = [0];            % Haptic Interface disturbance input - position&#xA;dx_VE = [0];&#xA;ddx_VE = [0];&#xA;f_VE = [0];            % Force output (? N)&#xA;&#xA;n = 2;&#xA;&#xA;ve = [0];&#xA;fe = [0];&#xA;%% without PC (the system is highly unstable when driven to contact)&#xA;&#xA;sum_ve = 0;&#xA;ve_inte = 0;&#xA;&#xA;for t1 = 0.0000:delta_T:10&#xA;&#xA;    %- Human Operator&#xA;    if t1 &amp;lt; 4&#xA;        x_HO(:,end+1) = 0.140;                         % Human input (140 mm)&#xA;    else&#xA;        x_HO(:,end+1) = 0.090;                         % Human input (90 mm)&#xA;    end&#xA;&#xA;    dx_HO(:,end+1) = (x_HO(n) - x_HO(n-1))/delta_T;&#xA;    ddx_HO(:,end+1) = (dx_HO(n) - dx_HO(n-1))/delta_T;&#xA;&#xA;    f_HO(:,end+1) = M_HO*ddx_HO(n);&#xA;&#xA;    %- Haptic device&#xA;    x_HI(:,end+1) = (f_HO(n) + k_HO*x_HO(n))/k_HO;&#xA;&#xA;%     f_HI(:,end+1) = f_HO(n);                           % f_h&#xA;&#xA;    dx_HI(:,end+1) = (x_HI(n) - x_HI(n-1))/delta_T;    % v_h&#xA;    ddx_HI(:,end+1) = (dx_HI(n) - dx_HI(n-1))/delta_T;&#xA;&#xA;    %- Virtual Environment&#xA;&#xA;    ve(:,end+1) = dx_HO(n) - dx_HI(n);&#xA;&#xA;    ve_inte = ve_inte + ve(n);&#xA;&#xA;%     ve(n) = (x_VE(n) - x_VE(n-1))/delta_Tve;&#xA;    x_VE(:,end+1) = ve_inte*delta_Tve;&#xA;&#xA;    dx_VE(:,end+1) = (x_VE(n) - x_VE(n-1))/delta_T;&#xA;&#xA;    fe(:,end+1) = k_VE*x_VE(n) + b_VE*ve(n);&#xA;&#xA;&#xA;    n = n+1;&#xA;end&#xA;&#xA;&#xA;&#xA;&#xA;%  The signal flow should be as follows: haptic device &#xA;% --&amp;gt; Virtual Environment (f = ke + bv, where e = penetration depth inside &#xA;% the virtual environment/wall, v = haptic device velocity, &#xA;% k and b = stiffness and damping gains) &#xA;% --&amp;gt; PO/PC --&amp;gt; haptic device.&#xA;&#xA;%% with added PC (the system achieves stable contact after about 3 bounces)&#xA;&#xA;&#xA;sum_ve = 0;&#xA;ve_inte = 0;&#xA;&#xA;for t1 = 0.0000:delta_T:10&#xA;&#xA;    %- Human Operator&#xA;    if t1 &amp;lt; 4&#xA;        x_HO(:,end+1) = 0.140;                         % Human input (140 mm)&#xA;    else&#xA;        x_HO(:,end+1) = 0.090;                         % Human input (90 mm)&#xA;    end&#xA;&#xA;    dx_HO(:,end+1) = (x_HO(n) - x_HO(n-1))/delta_T;&#xA;    ddx_HO(:,end+1) = (dx_HO(n) - dx_HO(n-1))/delta_T;&#xA;&#xA;    f_HO(:,end+1) = M_HO*ddx_HO(n);&#xA;&#xA;    %- Haptic device&#xA;&#xA;&#xA;    %- Virtual Environment&#xA;&#xA;    f_PC(:,end+1) = alpha(n)*ve(n);&#xA;&#xA;    f_VE(:,end+1) = fe(n) + alpha(n)*ve(n);&#xA;&#xA;    f_HI(:,end+1) = f_VE(n) + M_HI*ddx_HI(n) + b_HI*dx_HI(n) + k_HI*x_HI(n) ...&#xA;                    - b_HI*dx_VE(n) - k_HI*x_VE(n);&#xA;&#xA;    %- Series PC&#xA;&#xA;    W(:,end+1) = W(n-1) + (fe(n)*ve(n) + alpha(n-1)*(ve(n-1))^2);&#xA;&#xA;    sum_ve = sum_ve + ve(n)^2;&#xA;&#xA;    if W(n) &amp;lt; -b_HI*sum_ve&#xA;        alpha(:,end+1) = (W(n) + b_HI*sum_ve)/(ve(n)^2);&#xA;    else&#xA;        alpha(:,end+1) = 0;&#xA;    end&#xA;&#xA;    n = n+1;&#xA;&#xA;end&#xA;&#xA;&#xA;%% Graphics&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Best regards,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;leonardo.fagundes@ufv.br&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit1: simulation 2, in Fig.8, and its results are fig.9 and fig.10&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/nlDBJ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/nlDBJ.png&quot; alt=&quot;Simple Haptic Interface&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/HMsuC.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HMsuC.png&quot; alt=&quot;Results1ab&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/9UJBq.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9UJBq.png&quot; alt=&quot;Results1cd&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/HFAPr.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HFAPr.png&quot; alt=&quot;Results2abc&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/yC3Xc.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/yC3Xc.png&quot; alt=&quot;Results2cd&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;edit2:&#xA;In the first simulation, the response for simple virtual wall system when driven by a sinusoidal velocity profile generates energy when damping is negative (the system becomes active). When wall damping is still negative and passivity controller is operating, dissipation is constrained to be positive and the system is stable. I figured, in the second simulation, I should also use the same damping gain. The authors quote that in this simulation &quot;The VE includes a spring constant of 30 kN/m and operates at a relatively slow sampling rate of 66.67 Hz (15 ms)&quot;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore, damping and spring constant values seem very out of scale with one another. But I don't know if they should stay that way, the article provided only the value of the spring constant. I am confused about that. I understood your remark about the constants, I agree, I had not thought about the rigidity due to the high values. Thank you so much for showing me this. I modeled the human operator (HO) as a mass+spring system. But for both HO and Haptic Interface, I couldn't define values for the constants, so I tried to follow the same logic.&lt;/p&gt;&#xA;" OwnerUserId="24798" LastEditorUserId="24798" LastEditDate="2020-05-06T10:00:47.410" LastActivityDate="2020-05-06T10:00:47.410" Title="How can I modeling a simple haptic interface system to obtain results similar to the paper “Time-Domain Passivity Control of Haptic Interfaces”?" Tags="&lt;control&gt;&lt;matlab&gt;&lt;algorithm&gt;&lt;simulation&gt;&lt;theory&gt;" AnswerCount="0" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="20575" PostTypeId="2" ParentId="20567" CreationDate="2020-04-27T22:59:57.743" Score="1" Body="&lt;p&gt;If you look at the formula, the only way for it to equal zero is if the determinant of the Jacobian equals zero.  This tells you that the device is in a singular configuration.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;With four eigenvalues zero, are you sure the robot is able to span the workspace in any pose?&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2020-04-27T22:59:57.743" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20577" PostTypeId="1" CreationDate="2020-04-28T18:10:47.453" Score="1" ViewCount="33" Body="&lt;p&gt;This can be a basic question but according to my knowledge I don’t know answer. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;We can use control system theories to control the position of motor. Considering two motor joint leg it can model and can control position with disturbances. (Consider Linkage to Hip and Hip motors)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/6L9vw.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6L9vw.png&quot; alt=&quot;Leg&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But how to control external disturbances to robot by control system. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;See this Video &lt;a href=&quot;https://youtu.be/xNeZWP5Mx9s&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://youtu.be/xNeZWP5Mx9s&lt;/a&gt; at 0.45 minute.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This man give external disturbances by kick to MIT mini cheetah robot. Then that robot move to side by activating linkage to hip and hip motor. How it is possible to do by control system?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;According to my knowledge control system do more margin to robust and use PID control. (Also can be use feed forward etc.) it use to control position by input voltage signal to Motor to stable the system. Not work like above video (Side move) to stable. &lt;/p&gt;&#xA;" OwnerUserId="26282" LastActivityDate="2020-04-28T18:10:47.453" Title="Robot dynamic control" Tags="&lt;control&gt;&lt;motor&gt;&lt;legged&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20578" PostTypeId="1" CreationDate="2020-04-28T18:39:14.497" Score="2" ViewCount="52" Body="&lt;p&gt;Recently I've successfully implemented PID controller for my robot's moving motors. Now the system can automatically adjust it's speed depending on different situations: increase it if something blocks robot's movement, decrease it if robot moves to fast and so on and so on. But with it system gained specific feature: after stop of the movement (sending zero speed from the joystick) integral error doesn't go to zero, it stays active resulting some signal on the output of pid controller. Check the diagrams:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/EZjkz.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/EZjkz.png&quot; alt=&quot;diagrams&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the upper diagram you can see 4 variables changing with time:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;'LeftWheel.target_ticks_speed' - speed which is sent from joystick&lt;/p&gt;&#xA;&#xA;&lt;p&gt;'actual_speed' - measured on the run&lt;/p&gt;&#xA;&#xA;&lt;p&gt;'speed_error' - difference between joystick speed and actual&lt;/p&gt;&#xA;&#xA;&lt;p&gt;'calc_pwm_value.summary' - output of pid controller which goes directly on motor&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the below diagram there are 3 components of the pid controller: proportional, integral and derivative.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can see at the time stamp 48.600 'speed_error' goes to zero but integral error and summary of pid controller save some value.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anybody encountered issues like that in their pid controller implementations? I'm just not sure is math model should be improved somehow? Or speed setting mechanism should be reworked? Any comments or thougths would be appreciated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Posting here C code of pid controller math model:&lt;/p&gt;&#xA;&#xA;&lt;pre class=&quot;lang-c prettyprint-override&quot;&gt;&lt;code&gt;#include &quot;pid.h&quot;&#xA;&#xA;#define K_P 1.0f&#xA;#define K_I 0.2f&#xA;#define K_D 0.5f&#xA;&#xA;/* Used for testing in STM studio*/&#xA;/*float sum_prop = 0;&#xA;float sum_int = 0;&#xA;float sum_diff = 0;*/&#xA;&#xA;static inline float prop_compute(float error)&#xA;{&#xA;    return error * K_P;&#xA;}&#xA;&#xA;static inline float int_compute(float error, float* int_error)&#xA;{&#xA;    float sum = 0;&#xA;    sum = *int_error + (K_I * error);&#xA;    *int_error = sum;&#xA;    return sum;&#xA;}&#xA;&#xA;static inline float diff_compute(float error, float* der_error)&#xA;{&#xA;    float sum = 0;&#xA;    sum = K_D * (error - *der_error);&#xA;    *der_error = error;&#xA;    return sum;&#xA;}&#xA;&#xA;void pid_calculate(int16_t error, pid_entity* process)&#xA;{&#xA;    /* Used for testing in STM studio*/&#xA;    /*sum_prop = prop_compute(error);&#xA;    sum_int = int_compute(error);&#xA;    sum_diff = diff_compute(error);&#xA;    result = sum_prop + sum_int + sum_diff;*/&#xA;&#xA;    process-&amp;gt;prop_calc = prop_compute(error);&#xA;    process-&amp;gt;integral_calc = int_compute(error, &amp;amp;(process-&amp;gt;integral_error));&#xA;    process-&amp;gt;derivative_calc = diff_compute(error, &amp;amp;(process-&amp;gt;derivative_error));&#xA;&#xA;    process-&amp;gt;summary = process-&amp;gt;prop_calc + process-&amp;gt;integral_calc + process-&amp;gt;derivative_calc;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="26284" LastActivityDate="2020-04-28T22:14:51.000" Title="PID controller issue" Tags="&lt;pid&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20579" PostTypeId="2" ParentId="20578" CreationDate="2020-04-28T22:14:51.000" Score="1" Body="&lt;p&gt;You should only enable the integral term when the system is “close” to the desired state.  This is because all physical systems will lag the control input, and the integral term will continue to build due to this lag.   This leads to overshoot before finally settling at the final state. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Controllers I’ve developed turn on the &lt;span class=&quot;math-container&quot;&gt;$I$&lt;/span&gt; gain when within &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; counts of the final state, or after they are 90% to that state.  This decreases overshoot but still allows the &lt;span class=&quot;math-container&quot;&gt;$I$&lt;/span&gt; term to eliminate steady-state offsets.  Some motor controllers will have a “settling” signal that you can use to turn on the &lt;span class=&quot;math-container&quot;&gt;$I$&lt;/span&gt; gain.  &lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2020-04-28T22:14:51.000" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20580" PostTypeId="1" CreationDate="2020-04-29T01:18:44.817" Score="1" ViewCount="75" Body="&lt;p&gt;I'm trying to design a PID system for the longitudinal control of an autonomous vehicle. I figured out about most of it but I'm trying to figure out the Kp, Ki and Kd values. This is an illustration of what I'm working with:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/5UOA1.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/5UOA1.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the PID controller outputs u, which is the acceleration value. However, I don't know how to find the Kp, Ki and Kd.&lt;/p&gt;&#xA;" OwnerUserId="26288" LastActivityDate="2020-04-29T17:54:59.627" Title="Finding the PID values for a vehicle control system" Tags="&lt;pid&gt;&lt;autonomous-car&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20581" PostTypeId="1" AcceptedAnswerId="20582" CreationDate="2020-04-29T02:34:58.633" Score="1" ViewCount="66" Body="&lt;p&gt;I have been reading some slam papers recently and many of the papers mention building and performing scan matching on submaps instead of individual poses. Does it mean that a submap is just a single vertex (pose) with its associated uncertainty or is it a combination of several poses. How do we maintain such sub maps with respect to g2o gtsam etc ? As far as I know we can build a pose graph with vertices and edges describing robot pose and perform incremental scan matching. Would be highly thankful for any explanation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.mathworks.com/help/nav/ug/perform-lidar-slam-using-3d-lidar-point-clouds.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.mathworks.com/help/nav/ug/perform-lidar-slam-using-3d-lidar-point-clouds.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="16715" LastEditorUserId="16715" LastEditDate="2020-04-29T03:16:07.857" LastActivityDate="2020-04-29T07:17:47.927" Title="What is the concepts of submaps in LIDAR based graph slam algorithms?" Tags="&lt;slam&gt;&lt;first-robotics&gt;&lt;point-cloud&gt;&lt;optimization&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20582" PostTypeId="2" ParentId="20581" CreationDate="2020-04-29T07:17:47.927" Score="2" Body="&lt;p&gt;The word is exactly as it sounds. It is a &lt;strong&gt;sub&lt;/strong&gt;map of a larger map. Essentially a large map is broken up into smaller submaps in order to improve the computational complexity. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the &lt;a href=&quot;https://www.mathworks.com/help/nav/ug/perform-lidar-slam-using-3d-lidar-point-clouds.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;reference&lt;/a&gt; you give the map is the accumulated pointcloud. This giant pointcloud is then broken up into smaller pointclouds(the submaps*).  These submaps are then used to facilitate loop closure. So rather than checking the current scan against the whole map, it will only check against the submaps.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At least in this case it looks like the submaps have nothing to do with the pose graph optimization. It is only used to identify loop closure candidates. However, in other papers like &lt;a href=&quot;https://www.cc.gatech.edu/~dellaert/pub/Ni07icra.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; it uses pose graph submaps. Again it is a larger pose graph broken up into smaller submap graphs in order to make the problem easier to solve.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So just to be clear:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Does it mean that a submap is just a single vertex (pose) with its associated uncertainty or is it a combination of several poses. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;No. In this case a submap is just a smaller pointcloud.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How do we maintain such sub maps with respect to g2o gtsam etc&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;In this case the submap is solely there for identifying loop closure. This information is stored separate from your Pose graph. &lt;/p&gt;&#xA;" OwnerUserId="15265" LastActivityDate="2020-04-29T07:17:47.927" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20583" PostTypeId="2" ParentId="20580" CreationDate="2020-04-29T09:22:37.050" Score="1" Body="&lt;p&gt;Kp, Kd, Ki are called gains of the controller and can be found using manual tuning or via some techniques for example the Ziegler-Nichols method which is more precise.&#xA;And you can use different software for example MATLAB to achive the desired controller response and can calculate PID gains.&#xA;For more information on PID gains tuning, I would like to refer a previous answer, which will elaborate in detail:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/167/what-are-good-strategies-for-tuning-pid-loops&quot;&gt;What are good strategies for tuning PID loops?&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="24894" LastActivityDate="2020-04-29T09:22:37.050" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20584" PostTypeId="2" ParentId="20580" CreationDate="2020-04-29T17:54:59.627" Score="2" Body="&lt;p&gt;In addition to the manual Ziegler-Nichols method on manual tuning, I wanted to point out that the dynamics of the throttle/brake might not be symmetric. In that case, the set of Kp, Ki, Kd working for throttle (acceleration), might not work for braking (deceleration). &lt;/p&gt;&#xA;" OwnerUserId="26289" LastActivityDate="2020-04-29T17:54:59.627" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20585" PostTypeId="1" CreationDate="2020-04-29T19:07:03.403" Score="1" ViewCount="100" Body="&lt;p&gt;If I understand this correctly, given the Jacobian Derivative &lt;span class=&quot;math-container&quot;&gt;$\dot{J}(q)$&lt;/span&gt; derived using the method presented from the paper by &lt;a href=&quot;https://ieeexplore.ieee.org/abstract/document/7880802&quot; rel=&quot;nofollow noreferrer&quot;&gt;(Rhee, J. Y., &amp;amp; Lee, B., 2017)&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where the algorithm summarized computes:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\overline{\underline{\bf{\text{Algorithm 1}}\textrm{ Jacobian and Jacobian Differentiation}}}\\&#xA;\begin{array}{lll}&#xA;1: &amp;amp; \omega_0^0 \leftarrow\left[0,0,0\right]^T &amp;amp; \\&#xA;2: &amp;amp; z_0^0 \leftarrow\left[0,0,1\right]^T &amp;amp; \\&#xA;3: &amp;amp; \pmb{J}_1 \leftarrow \left[\begin{matrix}&#xA;z_0^0\times d_n^0 \\ &#xA;z_0^0\end{matrix}\right] &amp;amp; \\&#xA;4: &amp;amp; \bf{\text{for }} \textrm{i = 2 to n } \bf{\text{do}} &amp;amp; \triangleright \textrm{ Jacobian Computation loop} \\&#xA;5: &amp;amp; \quad \pmb{J}_i = \left[\begin{matrix} &#xA;z_{i-1}^0 \times d_{i-1,n}^0 \\ &#xA;z_{i-1}^0\end{matrix}\right] &amp;amp;  \\&#xA;6: &amp;amp; \quad \omega_{i-1}^0 \leftarrow w_{i-2}^0 + z_{i-2}^0\dot{q}_{i-1} \\&#xA;7: &amp;amp; \bf{\text{end for}} &amp;amp; \\&#xA;8: &amp;amp; \beta \leftarrow J_{v,i}\dot{q}_i &amp;amp; \\&#xA;9: &amp;amp; \bf{\text{for }} \textrm{i = n to 2 } \bf{\text{do}} &amp;amp; \triangleright &#xA; \textrm{ Jacobian Differentiation loop}\\&#xA;10: &amp;amp; \quad \dot{z}_{i-1}^0 \leftarrow \omega_{i-1}^0 \times z_{i-1}^0 &amp;amp; \\&#xA;11: &amp;amp; \quad \alpha \leftarrow \left[0,0,0\right]^T &amp;amp; \\&#xA;12: &amp;amp; \quad \bf{\text{for }} \textrm{j = 1 to i-1 } \bf{\text{do}} \\&#xA;13: &amp;amp; \qquad \alpha \leftarrow \alpha + z_{j-1}^0 \times \left(d_n^0 - d_{i-1}^0\right)\dot{q}_j &amp;amp; \\&#xA;14: &amp;amp; \quad \bf{\text{end for}} &amp;amp; \\&#xA;15: &amp;amp; \quad \dot{J}_i = \left[\begin{matrix}&#xA;\left(\dot{z}_{i-1}^0\right) \times (d_{n}^0- d_{i-1,n}^0) + z_{i-1}^0 \times\left(\alpha + \beta\right) \\&#xA;\dot{z}_{i-1}^0 \end{matrix}\right] &amp;amp; \\&#xA;16: &amp;amp; \quad \beta \leftarrow \beta + J_{v,i-1}\dot{q}_{i-1} &amp;amp; \\&#xA;17: &amp;amp; \bf{\text{end for}} &amp;amp; \\&#xA;18: &amp;amp; \dot{J}_1 = \left[\begin{matrix}&#xA;z_0^0 \times \beta \\&#xA;\left[0,0,0\right]^T \end{matrix}\right] &amp;amp; \\&#xA;\end{array} \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;My question&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to compute the roll, pitch, yaw accelerations for the second-order differential kinematics of a robot, stating:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$\ddot{x} = J(q)\ddot{q} + \dot{J}\dot{q}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How do I proceed?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do I approach it similarly to how the analytical jacobian is computed?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$\Gamma = [r, p, y]^\intercal$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$A = \begin{bmatrix} 1 &amp;amp;0 &amp;amp;sin(p) \\ 0 &amp;amp;cos(r) &amp;amp;-cos(p) sin(r)\\ 0 &amp;amp;sin(r) &amp;amp;cos(p) cos(r) \end{bmatrix}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$J_a(q) = \begin{bmatrix} I &amp;amp;0\\ 0 &amp;amp;A^{-1}(\Gamma) \end{bmatrix} J(q)$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;where instead&lt;/strong&gt; of &lt;span class=&quot;math-container&quot;&gt;$J(q)$&lt;/span&gt; I use &lt;span class=&quot;math-container&quot;&gt;$\dot{J}(q)$&lt;/span&gt;, and the same with &lt;span class=&quot;math-container&quot;&gt;$[r, p, y]^\intercal$&lt;/span&gt;, I use &lt;span class=&quot;math-container&quot;&gt;$[\dot{r}, \dot{p}, \dot{y}]^\intercal$&lt;/span&gt; ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I apologize if this is too elementary, but I am genuinely curious.&lt;/p&gt;&#xA;" OwnerUserId="24309" LastEditorUserId="24309" LastEditDate="2020-04-30T20:39:02.673" LastActivityDate="2020-04-30T20:39:02.673" Title="Jacobian Derivative (Analytical?)" Tags="&lt;kinematics&gt;&lt;industrial-robot&gt;&lt;manipulator&gt;&lt;jacobian&gt;" AnswerCount="0" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="20588" PostTypeId="1" AcceptedAnswerId="20592" CreationDate="2020-04-30T09:19:55.397" Score="0" ViewCount="59" Body="&lt;p&gt;I am implementing an EKF algorithm for a drone localization, and while I was defining the observation model I got a bit confused. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is my situation: &#xA;I have a drone which is able to give me the landmarks' pose in the drone's reference frame (it is a &lt;a href=&quot;http://docs.ros.org/melodic/api/geometry_msgs/html/msg/PoseStamped.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;PoseStamped&lt;/a&gt; message).&#xA;In my implementation I have a state vector which contains not only the drone's pose, but also the landmarks' pose, all of them in the fixed reference frame (the world).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now my question: what should observation model be in this case? I have this question because the landmarks' pose are given, so should the observation model project the estimated landmark pose to the drone's reference frame and in the innovation compute the error between the observed and the estimated poses?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To be a bit more clear:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;My state vector is&#xA;&lt;span class=&quot;math-container&quot;&gt;$&#xA;\hat\mu = \begin{bmatrix} x_r &amp;amp; y_r &amp;amp; z_r &amp;amp; \phi_r &amp;amp; \theta_r &amp;amp; \psi_r &amp;amp; x_{m_i} &amp;amp; y_{m_i} &amp;amp; z_{m_i} &amp;amp; \phi_{m_i} &amp;amp; \theta_{m_i} &amp;amp; \psi_{m_i} \end{bmatrix}&#xA;$&lt;/span&gt; where elements with &lt;span class=&quot;math-container&quot;&gt;$r$&lt;/span&gt; represent the pose of the drone and &lt;span class=&quot;math-container&quot;&gt;$m_i$&lt;/span&gt; the pose for landmark &lt;span class=&quot;math-container&quot;&gt;$i$&lt;/span&gt;, everything expressed in the fixed reference frame.&lt;/li&gt;&#xA;&lt;li&gt;The observation at time &lt;span class=&quot;math-container&quot;&gt;$t$&lt;/span&gt; is &lt;span class=&quot;math-container&quot;&gt;$z_t = \begin{bmatrix}x_{m_i}^L &amp;amp; y_{m_i}^L &amp;amp; z_{m_i}^L &amp;amp; \phi_{m_i}^L &amp;amp; \theta_{m_i}^L &amp;amp; \psi_{m_i}^L \end{bmatrix}$&lt;/span&gt; in the drone's reference frame.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;So, should the observation model produce the following &lt;span class=&quot;math-container&quot;&gt;$h(\hat\mu) = \begin{bmatrix}\hat{x}_{m_i}^L &amp;amp; \hat{y}_{m_i}^L &amp;amp; \hat{z}_{m_i}^L &amp;amp; \hat\phi_{m_i}^L &amp;amp; \hat\theta_{m_i}^L &amp;amp; \hat\psi_{m_i}^L \end{bmatrix}$&lt;/span&gt; ?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is my reasoning correct? Am I missing something?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance!&lt;/p&gt;&#xA;" OwnerUserId="1992" LastActivityDate="2020-05-01T00:05:10.267" Title="EKF-SLAM what should the observation model be?" Tags="&lt;slam&gt;&lt;localization&gt;&lt;kalman-filter&gt;&lt;ekf&gt;&lt;drone&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20589" PostTypeId="1" AcceptedAnswerId="20590" CreationDate="2020-04-30T12:28:52.087" Score="0" ViewCount="1905" Body="&lt;p&gt;I ran the following and got an error with something that previously ran well (I was just missing the entire world though and not the robot). Something I did in the middle could be the problem. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ roslaunch my_robot world.launch &#xA;RLException: [world.launch] is neither a launch file in package [my_robot] nor is [my_robot] a launch file name&#xA;The traceback for the exception was written to the log file&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;However, the main question for now is what is this special &lt;strong&gt;log file&lt;/strong&gt;? The error mentions it like there's only one and it is evident where it is. &lt;a href=&quot;https://stackoverflow.com/questions/58698861/how-do-i-deal-with-the-rlexception-error-that-occurred-during-rolaunch&quot;&gt;This question&lt;/a&gt; has a similar error but no answer. My question for now though, is where can I find this log file? And what what does &lt;strong&gt;RL&lt;/strong&gt; stand for in &lt;code&gt;RLException&lt;/code&gt;?&lt;/p&gt;&#xA;" OwnerUserId="15157" LastActivityDate="2020-04-30T14:39:50.007" Title="What and where is &quot;the log file&quot; for errors in ROS?" Tags="&lt;ros&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20590" PostTypeId="2" ParentId="20589" CreationDate="2020-04-30T14:39:50.007" Score="3" Body="&lt;p&gt;tl;dr - &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;If you are using roslaunch, you can use the roslaunch-logs command to tell you the location of the log directory.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;From the &lt;a href=&quot;https://wiki.ros.org/roscpp/Overview/Logging&quot; rel=&quot;nofollow noreferrer&quot;&gt;ROS wiki&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;ol start=&quot;2&quot;&gt;&#xA;  &lt;li&gt;Output&lt;/li&gt;&#xA;  &lt;/ol&gt;&#xA;  &#xA;  &lt;p&gt;There are four potential places a log message may end up, depending on the verbosity level:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;code&gt;stdout&lt;/code&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;DEBUG and INFO messages arrive on stdout if they are enabled. Note that this may not be sent to the screen depending on the value of the roslaunch/XML/node output parameter.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;code&gt;stderr&lt;/code&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;WARN, ERROR and FATAL messages arrive on stderr if they are enabled.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Node log file&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Everything enabled goes into the log file. Your node's log file will be in ~/.ros/log unless you override it with the ROS_HOME or ROS_LOG_DIR environment variables. &lt;strong&gt;If you are using roslaunch, you can use the roslaunch-logs command to tell you the location of the log directory.&lt;/strong&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;code&gt;/rosout&lt;/code&gt; topic&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Everything enabled is sent to the /rosout topic. Note that until the node is fully started, messages will not be sent, so you may not see initial messages.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Here is a table summarizing the above:&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$\begin{matrix}&#xA;\text{ }        &amp;amp; \text{Debug} &amp;amp; \text{Info} &amp;amp; \text{Warn} &amp;amp; \text{Error} &amp;amp; \text{Fatal} \\&#xA;\text{stdout}   &amp;amp; \text{X}     &amp;amp; \text{X}    &amp;amp; \text{ }    &amp;amp; \text{ }     &amp;amp; \text{ }     \\&#xA;\text{stderr}   &amp;amp; \text{ }     &amp;amp; \text{ }    &amp;amp; \text{X}    &amp;amp; \text{X}     &amp;amp; \text{X}     \\&#xA;\text{log file} &amp;amp; \text{X}     &amp;amp; \text{X}    &amp;amp; \text{X}    &amp;amp; \text{X}     &amp;amp; \text{X}     \\&#xA;\text{/rosout}  &amp;amp; \text{X}     &amp;amp; \text{X}    &amp;amp; \text{X}    &amp;amp; \text{X}     &amp;amp; \text{X}     \end{matrix}$$&lt;/span&gt;&#xA;  Also note that this table is different for rospy.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(emphasis added)&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-04-30T14:39:50.007" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20592" PostTypeId="2" ParentId="20588" CreationDate="2020-05-01T00:05:10.267" Score="0" Body="&lt;p&gt;Since your state includes the position and orientation of the robot and the landmarks in the global frame, but your measurements are in the robot frame, like you said, the observation model will basically transform the pose estimate from the prediction step into the robot frame followed by addition of noise. Then you compute the innovation by finding the error between the actual measurement and that obtained from the measurement model (both of which are in the robot frame).&lt;/p&gt;&#xA;" OwnerUserId="26172" LastActivityDate="2020-05-01T00:05:10.267" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20593" PostTypeId="2" ParentId="18506" CreationDate="2020-05-01T06:09:23.540" Score="0" Body="&lt;p&gt;you need to check rostopic list while the talker node is running&lt;/p&gt;&#xA;" OwnerUserId="26301" LastActivityDate="2020-05-01T06:09:23.540" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20595" PostTypeId="1" CreationDate="2020-05-01T11:11:41.783" Score="0" ViewCount="49" Body="&lt;p&gt;How do I specify the directions of a unit vector &lt;span class=&quot;math-container&quot;&gt;$X_n$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$Y_n$&lt;/span&gt; of a frame &lt;span class=&quot;math-container&quot;&gt;$\{n\}$&lt;/span&gt; at an angle &lt;span class=&quot;math-container&quot;&gt;$θ$&lt;/span&gt; relative to a frame &lt;span class=&quot;math-container&quot;&gt;$\{a\}$&lt;/span&gt; in the form&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;X_n=cosθX_a + sinθY_a&#xA;$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;Y_n=-sinθX_a+cosθY_a&#xA;$$&lt;/span&gt;&#xA;? Can someone please help how the above equatione were derived?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Wvy8V.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Wvy8V.png&quot; alt=&quot;reference ram&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="26304" LastEditorUserId="110" LastEditDate="2020-05-02T00:32:49.020" LastActivityDate="2020-05-05T13:22:44.877" Title="Reference frame, vector" Tags="&lt;robotic-arm&gt;&lt;transforms&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20598" PostTypeId="2" ParentId="15107" CreationDate="2020-05-02T03:50:02.610" Score="0" Body="&lt;p&gt;catkin_create_pkg  [depend1] [depend2] [depend3]&#xA;- Just change the name of the package.There are some keywords that should not be used since it confuse the compiler. I first use  and I had an error after compiling(catkin_make). I changed it to  and it worked. Hope it helps.&lt;/p&gt;&#xA;" OwnerUserId="26308" LastActivityDate="2020-05-02T03:50:02.610" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20601" PostTypeId="1" CreationDate="2020-05-03T14:07:35.587" Score="0" ViewCount="120" Body="&lt;p&gt;I added some paths for model insertion in the gazebo UI. I have since move the projects elsewhere or deleted some of the models but can't seem to figure out how to delete the paths showing up under the insert tab. Is it possible to delete paths once you add them?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's an image that points shows the image that I have but doesn't include my paths, which is how I would like mine to look. &#xA;&lt;a href=&quot;https://i.stack.imgur.com/YosNM.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/YosNM.png&quot; alt=&quot;Here&amp;#39;s an image that points shows the image that I have but doesn&amp;#39;t include my paths&quot;&gt;&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="15157" LastActivityDate="2020-05-03T14:07:35.587" Title="How to remove 'insert' paths in gazebo UI" Tags="&lt;gazebo&gt;" AnswerCount="0" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="20602" PostTypeId="1" AcceptedAnswerId="20607" CreationDate="2020-05-03T17:02:04.397" Score="1" ViewCount="160" Body="&lt;p&gt;Suppose I receive a table containing the DH parameters of a 5 DOF robot. Am I able to reconstruct the geometry of this robot and actually visualize it (i.e. all the mechanical joints and links), using MATLAB or another tool?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was thinking that I could link all the origins of the frames with a line to get this raw visualization, but apparently, it's more complicated than that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From what I have been studying, the origin of the DH frame assignment is not always exactly linked to the mechanical construction of the robot, but it needs to respect some specific rules and can even be located &quot;outside&quot; the robot, or two frames may have the same origin in space.&lt;/p&gt;&#xA;" OwnerUserId="26264" LastActivityDate="2020-05-04T08:53:57.857" Title="Using DH parameters to visualize a robot" Tags="&lt;dh-parameters&gt;&lt;visualization&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20603" PostTypeId="1" CreationDate="2020-05-03T21:02:24.613" Score="0" ViewCount="105" Body="&lt;p&gt;I am writing codes in python for visual odometry from  single camera. I used cell phone camera for testing. I took video of 35 sec with camera moving. I used code below to read first image&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;height=4000&#xA;fx=3793&#xA;fy=3795&#xA;cx=2073&#xA;cy=1427&#xA;focal = fx&#xA;pp = (cx,cy)&#xA;R_total = np.zeros((3, 3))&#xA;t_total = np.empty(shape=(3, 1))&#xA;cur_ROT = np.eye(3)&#xA;cur_TRS = np.zeros((3,1))&#xA;kMinNumFeature= 1500&#xA;&#xA;&#xA;image_id = 0&#xA;frams_arr=[]&#xA;framrs= 3&#xA;&#xA;# params for ShiTomasi corner detection&#xA;feature_params = dict( maxCorners = 100,&#xA;                       qualityLevel = 0.3,&#xA;                       minDistance = 7,&#xA;                       blockSize = 7 )&#xA;&#xA;# Parameters for lucas kanade optical flow&#xA;lk_params = dict( winSize  = (15,15),&#xA;                  maxLevel = 2,&#xA;                  criteria = (cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 0.03))&#xA;traj = np.zeros((600,600,3), dtype=np.uint8)&#xA;&#xA;cap = cv2.VideoCapture('ga1.mp4')&#xA;ret,frame = cap.read()&#xA;img = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)&#xA;ref_frm = img&#xA;P0 = cv2.goodFeaturesToTrack(img, mask=None, **feature_params)&#xA;while(1):&#xA;    ret,new =cap.read()&#xA;    img2= cv2.cvtColor(new, cv2.COLOR_BGR2GRAY)&#xA;    cur_frm = img2&#xA;    P1, st, err = cv2.calcOpticalFlowPyrLK(ref_frm, cur_frm,P0, None, **lk_params)&#xA;    E, mask = cv2.findEssentialMat(P1, P0, focal=focal, pp=pp, method=cv2.RANSAC,&#xA;                                   prob=0.999, threshold=1.0)&#xA;    _, R, t, mask = cv2.recoverPose(E, P1, P0, focal=focal, pp=pp)&#xA;    cur_TRS = cur_TRS + cur_ROT.dot(t)&#xA;    cur_ROT = R.dot(cur_ROT)&#xA;    if (P1.shape[0] &amp;lt; kMinNumFeature):&#xA;        P1 = cv2.goodFeaturesToTrack(cur_frm, mask = None, **feature_params)&#xA;    ref_frm =cur_frm&#xA;    P0 = P1.copy()&#xA;cv2.imshow('img', img2)&#xA;k = cv2.waitKey(30) &amp;amp; 0xff&#xA;&#xA;cv2.destroyAllWindow&#xA;cap.release()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I want to know whether rotation and translation values are correct or not. When I executed python code I am getting this error.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;    Traceback (most recent call last):&#xA;  File &quot;C:/Users/HP/PycharmProjects/untitled3/venv/Lalsab.py&quot;, line 48, in &amp;lt;module&amp;gt;&#xA;    _, R, t, mask = cv2.recoverPose(E, P1, P0, focal=focal, pp=pp)&#xA;cv2.error: OpenCV(4.2.0) C:\projects\opencv-python\opencv\modules\core\src\matrix.cpp:832: error: (-13:Image step is wrong) The matrix is not continuous, thus its number of rows can not be changed in function 'cv::Mat::reshape'&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Please let me know what is the problem in this code.&lt;/p&gt;&#xA;" OwnerUserId="26321" LastEditorUserId="22800" LastEditDate="2020-05-04T12:54:26.880" LastActivityDate="2020-09-27T19:07:33.467" Title="How to find visual odometry by video from cellphone camera mounted on robot?" Tags="&lt;cameras&gt;&lt;python&gt;&lt;opencv&gt;&lt;visual-odometry&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20604" PostTypeId="1" AcceptedAnswerId="20622" CreationDate="2020-05-03T22:38:29.590" Score="0" ViewCount="83" Body="&lt;p&gt;What is the standard way to fuse multiple sensor measurements in an EKF framework?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Say you have Odometry, IMU and some form of Lidar which can produce landmarks. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;EKF is normally presented as a prediction/correction framework after each action but it's not clear how 3+ sensor sources can be integrated.  &lt;/p&gt;&#xA;" OwnerUserId="21514" LastActivityDate="2020-05-07T00:08:41.513" Title="EKF sensor fusion" Tags="&lt;localization&gt;&lt;kalman-filter&gt;&lt;ekf&gt;&lt;sensor-fusion&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20606" PostTypeId="1" CreationDate="2020-05-04T05:04:49.853" Score="1" ViewCount="74" Body="&lt;p&gt;I placed my drone on a table (i.e, at rest) and save (using a ROS topic) the IMU readings:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/jzHFY.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/jzHFY.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/hN2Fk.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hN2Fk.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can see, there's a lot of drift or error. I would expect the &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt; acceleration to be 0 (I know about the drift, but this is not something that keeps growing, it just has a bias) and &lt;span class=&quot;math-container&quot;&gt;$z$&lt;/span&gt; 9.8. What could happen? Before I measure everything, I called the topic &lt;a href=&quot;https://ardrone-autonomy.readthedocs.io/en/latest/services.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;flattrim&lt;/a&gt;. And I would expect also a better performance for the gyroscope&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What can I do to make if work better?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The funny thing is that the velocities (I suppose it integrates the accelerometer readings) are noisy, but their mean is approximately 0:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Oidio.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Oidio.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The covariance matrix is 0 for everything&lt;/p&gt;&#xA;" OwnerUserId="23438" LastEditorUserId="23438" LastEditDate="2020-05-04T20:46:15.770" LastActivityDate="2021-04-21T08:58:32.703" Title="Measurements of IMU (accelerometer and gyroscope) are drifted or with too much error" Tags="&lt;control&gt;&lt;quadcopter&gt;&lt;imu&gt;&lt;gyroscope&gt;&lt;accelerometer&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20607" PostTypeId="2" ParentId="20602" CreationDate="2020-05-04T05:53:19.830" Score="2" Body="&lt;p&gt;Yes you can visualive it in matlab, using robot toolbox for Matlab &lt;a href=&quot;https://github.com/petercorke/robotics-toolbox-matlab&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Visualization would look like this&#xA;&lt;a href=&quot;https://i.stack.imgur.com/gJ7PR.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gJ7PR.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And code example for MDH table for my 6 DOF Serial manipulator :&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;a = 40/1000;&#xA;b = 81/1000;&#xA;c = 130/1000;&#xA;d = 18/1000;&#xA;e = 166/1000;&#xA;f = 31/1000;&#xA;g = 95/1000;&#xA;&#xA;p = SerialLink([...&#xA;Revolute('d',b,'a',0,'alpha',0,'modified');...&#xA;Revolute('d',0,'a',a,'alpha',deg2rad(90),'offset',pi/4,'modified');...&#xA;Revolute('d',0,'a',c,'alpha',0,'modified');...&#xA;Revolute('d',e+f,'a',d,'alpha',deg2rad(90),'modified');...&#xA;Revolute('d',0,'a',0,'alpha',deg2rad(-90),'modified');...&#xA;Revolute('d',g,'a',0,'alpha',deg2rad(90),'modified');],...&#xA;'name','6 DOF')&#xA;p.teach([0 0 0 0 0 0])&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="22800" LastEditorUserId="22800" LastEditDate="2020-05-04T08:53:57.857" LastActivityDate="2020-05-04T08:53:57.857" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20608" PostTypeId="1" CreationDate="2020-05-04T09:39:33.990" Score="0" ViewCount="25" Body="&lt;p&gt;I am trying to design and implement certain controllers for a robot. &lt;strong&gt;I am currently designing controllers for the robot, where it aims to control the Heading, Velocity, Tilt, Balance of the robot.&lt;/strong&gt; Could someone guide me on how to implement this using WEBOTS? &lt;/p&gt;&#xA;" OwnerUserId="23735" LastEditorUserId="23735" LastEditDate="2020-05-04T13:33:11.863" LastActivityDate="2020-05-04T13:33:11.863" Title="Controller Design Using Webots! (Heading, Velocity, tilt,balance)" Tags="&lt;control&gt;&lt;software&gt;&lt;first-robotics&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20609" PostTypeId="2" ParentId="15456" CreationDate="2020-05-04T09:50:29.703" Score="1" Body="&lt;p&gt;DSO initializes the scene and camera poses with a specific scale factor such that the average inverse depth of the pointHessians is one. After the initialization the first two frameHessians are led into the backend to do a bundle adjustment like optimization in which, however, the previous determined scale can change (because the absolute scale is not observale in a monocular VO). After the initialization the scale should stay constant but still unknown. If you manually set new frame poses with the GT as predicted values for the trackNewCoarse function, the scales are not consistant. That's why your system gets lost right after the initialization. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want do the fusion in a tightly coupled way, you need do following things:&#xA;1. Determined the absolute scale after the initialization.&#xA;2. Incorperate ground truth poses into the backend optimization, that is, add residuals to the objective function which can be simply defined as the SE3 error between the estimated pose and ground truth pose. For the implementation, you need to add extra quantities to the HFinal_top and bFinal_top matrices. &#xA;3. Incorperate ground truth poses into the frontend coarse tracking like in the backend. &lt;/p&gt;&#xA;" OwnerUserId="26324" LastActivityDate="2020-05-04T09:50:29.703" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20610" PostTypeId="2" ParentId="19845" CreationDate="2020-05-04T18:25:23.890" Score="1" Body="&lt;p&gt;No, unfortunately there is no automated way to convert between different DH parameter conventions.  See my similar question here: &lt;a href=&quot;https://robotics.stackexchange.com/questions/8043/how-to-convert-between-classic-and-modified-dh-parameters&quot;&gt;How to convert between classic and modified DH parameters?&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also, you might be interested in this paper: &quot;&lt;a href=&quot;https://web.archive.org/web/20121119091715/http://profesores.usfq.edu.ec:80/laurents/IME440/DETC2005-85460_DenavitHartenberg.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Lipkin 2005: A Note on Denavit-Hartenberg Notation in Robotics&lt;/a&gt;&quot;.  It explains the &lt;strong&gt;3&lt;/strong&gt; main DH parameter conventions and how they differ.  It is also good background reading on DH parameters.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2020-05-04T18:25:23.890" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20611" PostTypeId="2" ParentId="19744" CreationDate="2020-05-04T18:43:26.180" Score="1" Body="&lt;p&gt;There are in fact two types of Jacobians, a &lt;em&gt;geometric Jacobian&lt;/em&gt; and an &lt;em&gt;analytical Jacobian&lt;/em&gt;.  The intro to chapter 3 in the book: &lt;a href=&quot;https://www.google.com/shopping/product/18328483085519729280&quot; rel=&quot;nofollow noreferrer&quot;&gt;Robotics: Modelling, Planning and Control&lt;/a&gt; by Bruno Siciliano, Lorenzo Sciavicco, Luigi Villani, Giuseppe Oriolo says it well:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;...&lt;em&gt;differential kinematics&lt;/em&gt; is the relationship between the joint&#xA;  velocities and the corresponding end-effector linear and angular&#xA;  velocity.  This mapping is described by a matrix, termed &lt;em&gt;geometric&#xA;  Jacobian&lt;/em&gt;, which depends on the manipulator configuration. &#xA;  Alternatively, if the end-effector pose is expressed with reference to&#xA;  a minimal representation in the operational space, it is possible to&#xA;  compute the Jacobian matrix via differentiation of the direct&#xA;  kinematics function with respect to the joint variables.  The&#xA;  resulting Jacobian, termed &lt;em&gt;analytical Jacobian&lt;/em&gt;, in general differs&#xA;  from the geometric one.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="110" LastActivityDate="2020-05-04T18:43:26.180" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20612" PostTypeId="2" ParentId="20288" CreationDate="2020-05-04T19:40:01.757" Score="0" Body="&lt;p&gt;This wikibook on robot kinematics does a pretty good job of explaining a 2 link arm example.  &lt;a href=&quot;https://en.wikibooks.org/wiki/Robotics_Kinematics_and_Dynamics&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikibooks.org/wiki/Robotics_Kinematics_and_Dynamics&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You should be able to extend it to 4 links like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;J =&#xA;\begin{bmatrix}&#xA;-a_1 s_1 - a_2 s_{12} - a_3 s_{123} - a_4 s_{1234} &amp;amp; -a_2 s_{12} - a_3 s_{123} - a_4 s_{1234} &amp;amp; - a_3 s_{123} - a_4 s_{1234} &amp;amp; - a_4 s_{1234} \\&#xA;a_1 c_1 + a_2 c_{12} + a_3 c_{123} + a_4 c_{1234} &amp;amp; a_2 c_{12} + a_3 c_{123} + a_4 c_{1234} &amp;amp; a_3 c_{123} + a_4 c_{1234} &amp;amp; a_4 c_{1234}\\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0&#xA;\end{bmatrix}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where: &lt;span class=&quot;math-container&quot;&gt;$a_1$&lt;/span&gt; is the link 1 length, &lt;span class=&quot;math-container&quot;&gt;$a_2$&lt;/span&gt; is the link 2 length, etc.  &lt;span class=&quot;math-container&quot;&gt;$s_1$&lt;/span&gt; is &lt;span class=&quot;math-container&quot;&gt;$\sin(\theta_1)$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$c_{12}$&lt;/span&gt; is &lt;span class=&quot;math-container&quot;&gt;$\cos(\theta_1 + \theta_2)$&lt;/span&gt; etc.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2020-05-04T19:40:01.757" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20614" PostTypeId="1" CreationDate="2020-05-04T23:40:46.567" Score="0" ViewCount="23" Body="&lt;p&gt;Note: I posted this on &lt;a href=&quot;https://stackoverflow.com/questions/61535005/syntax-highlighting-for-source-code-of-urdf-xml-based-file-on-github&quot;&gt;stack overflow&lt;/a&gt; but couldn't get an answer. I am trying it here. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have files that are in &lt;code&gt;urdf&lt;/code&gt; [Unified Robot Description Format] for &lt;code&gt;ROS&lt;/code&gt; and &lt;code&gt;sdf&lt;/code&gt; [Simulation Description Format] for &lt;code&gt;gazebo&lt;/code&gt;. URDF is &lt;code&gt;xml&lt;/code&gt; but Github only shows it in black. How can I get Github to show syntax highlighting on the file? Can I do this for any file extension including a missing extension? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; I am not referring to comments in markdown so back ticks don't apply. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;sdf version='1.6'&amp;gt;&#xA;  &amp;lt;world name='default'&amp;gt;&#xA;&#xA;    &amp;lt;include&amp;gt;&#xA;      &amp;lt;uri&amp;gt;model://ground_plane&amp;lt;/uri&amp;gt;&#xA;    &amp;lt;/include&amp;gt;&#xA;&#xA;    &amp;lt;include&amp;gt;&#xA;      &amp;lt;pose frame=''&amp;gt;0 0 30 0 0 0&amp;lt;/pose&amp;gt;&#xA;      &amp;lt;uri&amp;gt;model://robot&amp;lt;/uri&amp;gt;&#xA;    &amp;lt;/include&amp;gt;&#xA;&#xA;...&#xA;&#xA;&#xA;  &amp;lt;/world&amp;gt;&#xA;&amp;lt;/sdf&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Stack Overflow's syntax highlighting seems to get it. &lt;/p&gt;&#xA;" OwnerUserId="15157" LastActivityDate="2020-05-04T23:40:46.567" Title="Syntax highlighting for source code of urdf &amp; sdf (xml-based) files on Github" Tags="&lt;ros&gt;&lt;gazebo&gt;" AnswerCount="0" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="20616" PostTypeId="2" ParentId="20595" CreationDate="2020-05-05T13:22:44.877" Score="1" Body="&lt;p&gt;Here's a graphical answer. Given some vector &lt;span class=&quot;math-container&quot;&gt;$r$&lt;/span&gt; in Frame 1:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/VMxTU.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/VMxTU.png&quot; alt=&quot;r_F1&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can rotate to a new frame, F2:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/JvQ4K.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JvQ4K.png&quot; alt=&quot;r_F2&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All you do is project to the new axes. Counting along the x-axis in &lt;span class=&quot;math-container&quot;&gt;$F_2$&lt;/span&gt;, you can see that you go right (positive) in an amount &lt;span class=&quot;math-container&quot;&gt;$x_a \cos{\theta}$&lt;/span&gt;, then you go right (positive) in the amount &lt;span class=&quot;math-container&quot;&gt;$y_a \sin{\theta}$&lt;/span&gt;, so the total x-axis location is&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;x_{F_2} = +\left(x_a\cos{\theta}\right) + \left(y_a\sin{\theta}\right)&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Similarly, count &quot;down&quot; (negative) an amount &lt;span class=&quot;math-container&quot;&gt;$x_a \sin{\theta}$&lt;/span&gt; and then count up (positive) an amount &lt;span class=&quot;math-container&quot;&gt;$y_a \cos{\theta}$&lt;/span&gt; and get:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;y_{F_2} = -\left(x_a\sin{\theta}\right) + \left(y_a\cos{\theta}\right) &#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-05-05T13:22:44.877" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20618" PostTypeId="1" AcceptedAnswerId="20619" CreationDate="2020-05-06T11:53:31.177" Score="3" ViewCount="113" Body="&lt;p&gt;I am a student, and I have to study for a Robotics exam which consistes mainly in kinematics for a robotic manipulator and trajectory planning also for a robotic manipulator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the part relative to kinematics, I have found many sources to study, but for the part relative to trajectory planning I cannot find a complete explanation that allow me to understand deeply the concept.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where can I find a good source to study robotics kinematics and most of all trajectory planning relative to robotics arm manipulator?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know if this is the right place to ask for this, so if it is not in topic with the Robotics exchange policy please tell me and i will delete the question.&lt;/p&gt;&#xA;" OwnerUserId="21797" LastEditorUserId="21797" LastEditDate="2020-05-06T15:41:27.210" LastActivityDate="2020-05-06T15:41:27.210" Title="where can I find a good source to study robotics kinematics and trajectory planning relative to robotic arm manipulator?" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;trajectory&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20619" PostTypeId="2" ParentId="20618" CreationDate="2020-05-06T12:39:42.080" Score="3" Body="&lt;p&gt;Here is my main source, take a look at this book :&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Craig, John. J. (2005). Introduction to Robotic : Mechanics and&#xA;Control. Pearson Education Inc.&lt;/li&gt;&#xA;&lt;li&gt;Corke, Peter P. (2017). Robotics, Vision and Control. Springer.&lt;/li&gt;&#xA;&lt;li&gt;Siciliano, B. (2009). Robotic Modelling, Planning and Contol.&#xA;Springer.&lt;/li&gt;&#xA;&lt;li&gt;Paul, P.R. (1981). Robot Manipulator : Mathematics, Programming, and&#xA;Control. MIT.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="22800" LastActivityDate="2020-05-06T12:39:42.080" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20620" PostTypeId="1" CreationDate="2020-05-06T17:42:05.987" Score="1" ViewCount="45" Body="&lt;p&gt;I have a 5DOF robotic arm were 4 joints rotates around a Z axis and one around an x-axis. I am not that good with the Jacobian, but I think I have this. &#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;J[v,\Omega]=[Z_{i-1}×(O_n-O_{i-1}), Z_{i-1} Z_{i-1}×(O_n-O_{i-1}), z_{i-1} ... Z_{n-1}×(O_n-O_{n-1})]. &#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am a bit confused about Jacobian matrix on the part  (&lt;span class=&quot;math-container&quot;&gt;$Z_{i-1}$&lt;/span&gt;), Eg say &lt;span class=&quot;math-container&quot;&gt;$Z_1=[0,0,1]$&lt;/span&gt;. whereby I know that &quot;&lt;span class=&quot;math-container&quot;&gt;$Z$&lt;/span&gt;&quot; is the axis of actuation. What about when one of the joint in my robotic arm rotates around an x-axis does it affect the matrix??&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it correct to write, &lt;span class=&quot;math-container&quot;&gt;$X_{i-1}$&lt;/span&gt;, eg &lt;span class=&quot;math-container&quot;&gt;$X_1=[1,0,0]$&lt;/span&gt;?&lt;/p&gt;&#xA;" OwnerUserId="26343" LastEditorUserId="110" LastEditDate="2020-05-07T20:32:11.067" LastActivityDate="2020-05-08T09:27:00.450" Title="Problem in Jacobian matrix" Tags="&lt;robotic-arm&gt;&lt;jacobian&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20621" PostTypeId="1" AcceptedAnswerId="20660" CreationDate="2020-05-06T17:54:51.863" Score="1" ViewCount="64" Body="&lt;p&gt;I am aware of various different approaches of kinematic modelling of parallel mechanisms. I have currently employed the vector loop closure equations to solve the inverse kinematics problem. &#xA;The problem is, the vector loop closure method eliminates the passive joint variables. I need to see how these are behaving while I proceed with dynamic modelling.&#xA;Are there any textbook methods that are capable of estimating all the joint variables? (active + passive) &lt;/p&gt;&#xA;" OwnerUserId="26346" LastActivityDate="2020-05-13T09:07:42.483" Title="Complete kinematics for parallel mechanisms" Tags="&lt;inverse-kinematics&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="20622" PostTypeId="2" ParentId="20604" CreationDate="2020-05-07T00:08:41.513" Score="2" Body="&lt;p&gt;An EKF or any of the variants of the Kalman filter, as you said mainly works in two steps: prediction and correction. The prediction steps gives you a state estimate based on your process model and the correction step updates your state estimate based on the current measurement. If you have multiple measurements from more than one sensor, you would just update the state as you would in the correction step whenever a new measurement is available. The only difference is that your measurement model would change depending on which sensor is giving you the measurement. If your sensors give you data at different rates then you would do something like: prediction, correction1, prediction, correction2 ... and so on, where correction 1 and correction 2 are based on measurements from sensor 1 and sensor 2 respectively.&lt;/p&gt;&#xA;" OwnerUserId="26172" LastActivityDate="2020-05-07T00:08:41.513" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="20626" PostTypeId="2" ParentId="20347" CreationDate="2020-05-07T20:23:11.110" Score="1" Body="&lt;p&gt;Converting a joystick &lt;span class=&quot;math-container&quot;&gt;$(x,y)$&lt;/span&gt; into differential-drive &lt;span class=&quot;math-container&quot;&gt;$(left, right)$&lt;/span&gt; control is not difficult.  But there are multiple approaches because of different robot and joystick characteristics.  For example, compare the differences between a &quot;playstation-style&quot; controller joystick (which will usually be used in an all-or-nothing kind of way and might have a sloppy dead-band near the center) vs. a large PC gaming flight simulator joystick (which gives you much finer grained control).  Or a narrow 2-wheeled robot (which will rotate in place very fast) vs. a wide, tracked, skid-steer robot (which has lots of rotational friction).  So you can see how you will need to tweak the feel of the controller.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This simplest procedure falls out of the discovery that if you just rotated the joystick 45 degrees, then you can use the joystick's &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt; channels directly as the &lt;span class=&quot;math-container&quot;&gt;$left$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$right$&lt;/span&gt; wheel controls.  For example, with the joystick all the way to the upper right corner &lt;span class=&quot;math-container&quot;&gt;$(1, 1)$&lt;/span&gt;, this is both wheels full speed ahead.  And with the joystick to the upper left corner &lt;span class=&quot;math-container&quot;&gt;$(-1, 1)$&lt;/span&gt;, this is a full-speed turn in place with left wheel going backwards and the right wheel going forwards.  In other words:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\begin{bmatrix}&#xA;left \\&#xA;right \\&#xA;\end{bmatrix} = \begin{bmatrix}&#xA;cos(-45^o) &amp;amp;&amp;amp; -sin(-45^o)\\&#xA;sin(-45^o) &amp;amp;&amp;amp; cos(-45^o) \\&#xA;\end{bmatrix} \begin{bmatrix}&#xA;x_{joy} \\&#xA;y_{joy} \\&#xA;\end{bmatrix}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or in Python code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;def joy_to_diff_drive(joy_x, joy_y):&#xA;    left = joy_x * math.sqrt(2.0)/2.0 + joy_y * math.sqrt(2.0)/2.0&#xA;    right = -joy_x * math.sqrt(2.0)/2.0 + joy_y * math.sqrt(2.0)/2.0&#xA;return [left, right]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But if you use this, you will notice something strange.  The robot will go faster when turning than when going straight.  For example if your joystick axes go between -127 and 127, when going straight they will only be commanded to be 90, and when you put the joystick in a corner to turn with only 1 wheel, you will get a motor command of 180!  Of course you could scale and cap the output to achieve the desired behavior, but the root of the problem is what is described in the post you mention here: &lt;a href=&quot;https://math.stackexchange.com/questions/553478/how-covert-joysitck-x-y-coordinates-to-robot-motor-speed&quot;&gt;https://math.stackexchange.com/questions/553478/how-covert-joysitck-x-y-coordinates-to-robot-motor-speed&lt;/a&gt;.  I also discuss it in this post: &lt;a href=&quot;https://robotics.stackexchange.com/questions/7829/how-to-program-a-three-wheel-omni&quot;&gt;How to program a three wheel Omni?&lt;/a&gt;.  The problem is that the joystick range is square, but you really want it to be circular.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The easiest way to think about the problem from here on is in polar coordinates.  Some Python code again:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;# convert to polar coordinates&#xA;theta = math.atan2(joy_y, joy_x)&#xA;r = math.sqrt(joy_x * joy_x + joy_y * joy_y)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Then, let's determine the maximum &quot;r&quot; for the given theta.  (Actually, the math for this is quite simple using &quot;similar triangles&quot;, no trig required.)  This let's us determine the actual speed.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;# this is the maximum r for a given angle&#xA;if abs(joy_x) &amp;gt; abs(joy_y):&#xA;    max_r = abs(r / joy_x)&#xA;else:&#xA;    max_r = abs(r / joy_y)&#xA;&#xA;# this is the actual throttle  &#xA;magnitude = r / max_r&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Next we turn this into left and right wheel velocities.  Now we'll use theta instead of the raw joystick left and right.  But we do a similar rotation matrix thing.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;turn_damping = 3.0 # for example&#xA;left = magnitude * (math.sin(theta) + math.cos(theta) / turn_damping)&#xA;right = magnitude * (math.sin(theta) - math.cos(theta) / turn_damping)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;As you can see, I threw in something I alluded to earlier.  For many robots, turning in place with full speed is way too fast, so you can turn it down with a damping factor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Actually, the astute reader will find that for low values of &quot;turn_damping&quot;, the output can go above the input.  So some capping may still be required.  I haven't figured out how to get rid of this yet.  I believe it is because we really have an oval space instead of a circle, and this must be taken into account when calculating the magnitude.  &lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2020-05-07T20:23:11.110" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20628" PostTypeId="1" CreationDate="2020-05-08T00:11:26.293" Score="0" ViewCount="115" Body="&lt;p&gt;I am doing inverse kinematics for a 6dof robot. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have used the geometrical method to describe the angles from one to three. I have trouble doing the next part. I know I that I have found the location by trigonometry* and now I need to find the rotation algebraically. Since it is the rotation I can use the rotation matrix that describes the rotation from 0 to 6. Since I know my angles from 0 to 3 I can do this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$T_6^0=T_0^3\cdot T_3^6$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can take the inverse of &lt;span class=&quot;math-container&quot;&gt;$T_0^3$&lt;/span&gt; on both sides and you end up with&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$(T_3^0)^{-1} \cdot T_6^0= T_3^6$&lt;/span&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I don't know what to do now. I know I have to equate the different terms but what terms. How do I get the rotation matrices to solve the inverse kinematics? Essentially my question is how do I get the rotation matrices that will let me solve the problem. How do I insert angle &lt;span class=&quot;math-container&quot;&gt;$\theta_1$&lt;/span&gt; to &lt;span class=&quot;math-container&quot;&gt;$\theta_3$&lt;/span&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;*Just a side question: They say that in 6d0f freedom robot the first three give the location and the last three the rotation. However if I change &lt;span class=&quot;math-container&quot;&gt;$\theta_5$&lt;/span&gt; on a 6dof the location changes too? How come? The only one who doesn't change the location is &lt;span class=&quot;math-container&quot;&gt;$\theta_6$&lt;/span&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you for reading and hopefully answering,&#xA;Have a nice day.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here is my matlab code. I have also added a picture of the lengths and the DH-table we made. &#xA;&lt;a href=&quot;https://i.imgur.com/6QTCO2P.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://i.imgur.com/6QTCO2P.png&lt;/a&gt;&#xA;[![enter image description here][1]][1]&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The desired angles are 10,20,30,40,50,60 for theta1 to theta 6.&lt;/p&gt;&#xA;&#xA;&lt;pre class=&quot;lang-matlab prettyprint-override&quot;&gt;&lt;code&gt;    %% Definitions. &#xA;    clear all&#xA;    syms theta1 theta2 theta3 theta4 theta5 theta6&#xA;&#xA;&#xA;    %% MatriX&#xA;     T01=[ cos(theta1), -sin(theta1), 0, 0;&#xA;    sin(theta1),  cos(theta1), 0,   0;&#xA;                  0,                   0, 1,   0;&#xA;                  0,                   0, 0,   1];&#xA;&#xA;&#xA;    T12= [cos(theta2) -sin(theta2) 0 25;&#xA;          0                0     -1 0;&#xA;          sin(theta2) cos(theta2)  0 0;&#xA;          0              0        0 1];&#xA;&#xA;&#xA;&#xA;&#xA;    T23=[ cos(theta3 + pi/2), -sin(theta3 + pi/2), 0, 315;&#xA;    sin(theta3 + pi/2),  cos(theta3 + pi/2), 0,   0;&#xA;                  0,                   0, 1,   0;&#xA;                  0,                   0, 0,   1];&#xA;&#xA;     T34= [cos(theta4) -sin(theta4) 0 -35;&#xA;          0                0     -1 -365;&#xA;          -sin(theta4) -cos(theta4)  0 0;&#xA;          0              0           0 1];&#xA;&#xA;      T45= [cos(theta5) -sin(theta5) 0 0;&#xA;          0                0     -1 0;&#xA;          -sin(theta5) -cos(theta5)  0 0;&#xA;          0              0           0 1];&#xA;&#xA;      T56= [cos(theta6) -sin(theta6) 0 0;&#xA;          0                0         1 0;&#xA;          -sin(theta6) -cos(theta6)  0 0;&#xA;          0              0           0 1];&#xA;&#xA;    %% Wrist and tool&#xA;    T6W= [1  0  0  0;&#xA;          0  -1  0  0;&#xA;          0  0  -1 -80;&#xA;          0  0  0  1];&#xA;&#xA;      TB0= [1 0  0  0;&#xA;          0 -1 0  0;&#xA;          0 0  -1  400;&#xA;          0 0  0  1];&#xA;&#xA;    %% Placement of End Effector &#xA;    TBTtarget=eulerZYX2T(563.879,-139.427,-34.414,100.551*pi/180,29.536*pi/180,178.188*pi/180); %location of end effector. // Location from robotdk&#xA;    TWT=eulerZYX2T(556.600,-168.144,-86.590,100.551*pi/180,29.536*pi/180,178.188*pi/180);% the tool with respect the base  // FK works with Robodk&#xA;    %% Changing the target&#xA;    T06=inv(TB0)*TBTtarget;  %Remove the base so i have treansfomation 0-&amp;gt;6&#xA;&#xA;&#xA;    t06=[T06(1,4); &#xA;        T06(2,4);   &#xA;        T06(3,4)];&#xA;&#xA;    %% step one&#xA;     r_x=TBTtarget(1,3)&#xA;     r_y=TBTtarget(2,3) %The rotation from T06. This is from the third collumn. &#xA;     r_z=TBTtarget(3,3)&#xA;&#xA;&#xA;    direction=[r_x,;&#xA;               r_y;     %made into a roation vector.   These are the values from the third collumn&#xA;               r_z];&#xA;    t04=t06-(direction*-80)% Here it is as you wanted it. My d is -80. D6 is the lenght from frame 6 to the wrist right?&#xA;    %% step Two&#xA;    T04=T01*T12*T23*T34;    % Here i do forward kinematics, I defined the matrixes above but this gives Transformation from 0 to 4.&#xA;    x=T04(1,4)               % Here i Equal x,y,z to the so I can  do this &#xA;    y=T04(2,4)                %x=f(J1, J2, J3), y=f(J1, J2, J3), z=f(J2, J3)&#xA;    z=T04(3,4)                  % in the next section. &#xA;    %% step Three solving equations&#xA;    eqn1 = x==t04(1,1);&#xA;    eqn2 = z==t04(2,1);      %% Here the equations should had been solved but there are unsolveable. &#xA;    eqn3 = y==t04(3,1); &#xA;&#xA;&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="24768" LastEditorUserId="24768" LastEditDate="2020-05-10T15:23:56.273" LastActivityDate="2021-02-04T18:03:55.367" Title="What is my last rotation matrix for the last three angles when i have found the first three when doing inverse kinematics to a 6dof robot?" Tags="&lt;kinematics&gt;&lt;inverse-kinematics&gt;&lt;industrial-robot&gt;&lt;rotation&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20629" PostTypeId="2" ParentId="20620" CreationDate="2020-05-08T09:27:00.450" Score="1" Body="&lt;p&gt;Usually the axes of robots are determined using the so called Denavit Hartenberg convention. Based on this convention all actuated axes are Z axes (and the transformation matrices are defined in a way which enables this). This is why everybody assumes that the actuation axis is the Z axis (like in the formula above). &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you do not follow the DH Convention, you can have an actuation axis, which is not Z. In this case it is correct to use &lt;span class=&quot;math-container&quot;&gt;$X_i$&lt;/span&gt; instead of &lt;span class=&quot;math-container&quot;&gt;$Z_i$&lt;/span&gt;. Your assumption, that is equals &lt;span class=&quot;math-container&quot;&gt;$[1, 0, 0]$&lt;/span&gt; might be correct. If the &lt;span class=&quot;math-container&quot;&gt;$O$&lt;/span&gt; matrices are &lt;span class=&quot;math-container&quot;&gt;$4x4$&lt;/span&gt; in size, then &lt;span class=&quot;math-container&quot;&gt;$X$&lt;/span&gt; would equal &lt;span class=&quot;math-container&quot;&gt;$[1, 0, 0, 1]$&lt;/span&gt; (as in this case &lt;span class=&quot;math-container&quot;&gt;$Z$&lt;/span&gt; would also be &lt;span class=&quot;math-container&quot;&gt;$[0, 0, 1, 1]$&lt;/span&gt;). Also, please make sure that the positive movement (rotation or translation) direction of the motion axis matches the positive direction of the geometrical axis. &lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-05-08T09:27:00.450" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20632" PostTypeId="2" ParentId="20628" CreationDate="2020-05-09T11:30:23.497" Score="0" Body="&lt;p&gt;Whether you can use this technique depends on the actual arrangement of your actual robot. I will give an overview of the approach given some assumptions about your robot and then if you add details of your robot e.g. diagram of the joints I can provide more detail if required.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assumptions:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Your robot arm has the same arrangement in the last 3 joints as the robot shown in slide 2 here: &lt;a href=&quot;https://www.uio.no/studier/emner/matnat/ifi/INF3480/v14/undervisningsmatriale/lec08_inv_jaco.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.uio.no/studier/emner/matnat/ifi/INF3480/v14/undervisningsmatriale/lec08_inv_jaco.pdf&lt;/a&gt; (this also describes the same approach that I have written here)&lt;/li&gt;&#xA;&lt;li&gt;Joints are labelled J1 to J6.&lt;/li&gt;&#xA;&lt;li&gt;Frames are labelled F0 to F6.&lt;/li&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;${}^0T_1$&lt;/span&gt; is a transformation from F0 to F1 and is a function of J1, &lt;span class=&quot;math-container&quot;&gt;${}^1T_2$&lt;/span&gt; is a function of J2 etc.&lt;/li&gt;&#xA;&lt;li&gt;You are able calculate all transformations as a function of joint angles (forward kinematics).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Now look at your robot and consider the following:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The position of F4 e.g. the translation component xyz of &lt;span class=&quot;math-container&quot;&gt;${}^0T_4$&lt;/span&gt; is not affected by changes in J4, J5 or J6. I.e. It is a function only of J1, J2 J3.&#xA;(I think this is where you've misunderstood that it is the last frame that should be unaffected)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;${}^3R_6$&lt;/span&gt; is not affected by changes in J1, J2, J3 i.e. it is a function of only J4, J5, J6.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;For a given &lt;span class=&quot;math-container&quot;&gt;${}^0T_6$&lt;/span&gt; i.e. end position (that you choose), the position of F4 is fixed i.e. not affected by any joints.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Do not continue until you're confident that the above statements are correct.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So to do the IK:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Given a desired pose &lt;span class=&quot;math-container&quot;&gt;${}^0T_6$&lt;/span&gt;, you can calculate the actual numerical values for x,y,z of &lt;span class=&quot;math-container&quot;&gt;${}^0T_4$&lt;/span&gt; - it is the F4-F6 link lengths &lt;span class=&quot;math-container&quot;&gt;$d$&lt;/span&gt; (which are known values) back down the z axis of F6 (and J5 which is the same). The z axis of F6 is the 3rd column of the rotation matrix &lt;span class=&quot;math-container&quot;&gt;${}^0R_6$&lt;/span&gt; (which is a known value, because it's whatever you set it to).&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\text{direction} = \text{3rd column of } {}^0R_6 \\&#xA;{}^0t_4 = {}^0t_6 - d * \text{direction} \\&#xA;$$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Where 't' is the translation part only from the full transformation matrix 'T'. You will get a result with known numerical values.&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;&lt;p&gt;Calculate FK for &lt;span class=&quot;math-container&quot;&gt;${}^0T_4$&lt;/span&gt;. The xyz components will only depend on J1, J2, J3.&#xA;You will have something like x=f(J1, J2, J3), y=f(J1, J2, J3), z=f(J2, J3)&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Set the results of (1) and (2) equal to each other and you now you have 3 equations (one for x, one for y, one for z).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Solve for J1, J2, J3. If this is what you've already done so far then great. Now you know J1, J2, J3 for a given &lt;span class=&quot;math-container&quot;&gt;${}^0T_6$&lt;/span&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Calculate &lt;span class=&quot;math-container&quot;&gt;${}^0R_3$&lt;/span&gt; using forward kinematics.&#xA;Since you know J1, J2, J3 you will get a matrix of numbers (no unknowns).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Calculate &lt;span class=&quot;math-container&quot;&gt;${}^3R_6$&lt;/span&gt; using forward kinematics.&#xA;Since you don't know J4, J5, J6 yet, the values in this matrix will be expressed as a function of those joints.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Now you have &lt;span class=&quot;math-container&quot;&gt;${}^0R_3$&lt;/span&gt; with known values, &lt;span class=&quot;math-container&quot;&gt;${}^0R_6$&lt;/span&gt; with known values, and &lt;span class=&quot;math-container&quot;&gt;${}^3R_6$&lt;/span&gt; as a function of J4, J5, J6.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;{}^0R_3 * {}^3R_6 = {}^0R_6 \\&#xA;({}^0R_3)^{-1} * {}^0R_3 * {}^3R_6 = ({}^0R_3)^{-1} * {}^0R_6 \\&#xA;{}^3R_6 = ({}^0R_3)^{-1} * {}^0R_6&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You have 1 matrix of unknowns on the left, and a matrix of known values on the right i.e. you have 9 equations.&lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;8&quot;&gt;&#xA;&lt;li&gt;Solve these equations to find J4, J5, J6.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;And you're done!&#xA;Hopefully if you are still unsure you can narrow it down to one (or more) of the steps above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note on doing FK with unknown variables:&#xA;If you are doing this by hand it's quite easy to make mistakes because there are a lot of terms. It is much easier to use a symbolic algebra library, they are available for matlab and python and probably other languages. Wherever something e.g. a, d, alpha etc is zero, put it as zero, it will make the results much simpler.&lt;/p&gt;&#xA;" OwnerUserId="15397" LastEditorUserId="15397" LastEditDate="2020-05-10T06:44:19.997" LastActivityDate="2020-05-10T06:44:19.997" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="20634" PostTypeId="1" CreationDate="2020-05-10T10:33:52.020" Score="1" ViewCount="71" Body="&lt;p&gt;I'm running a simple robot involving a Raspberry Pi 3 and 2 JGA25-370 motors.&lt;br&gt;&#xA;The system is powered from a single Powerbank (EasyAcc 10000MAh) which has 2 2A ports.&#xA;DIY USB cable has data pins shortened so the powerbank would give it more power.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I'm running my robot on smaller speeds everything works fine, but as soon as I increase the speed Raspberry PI restarts when I press &quot;GO&quot; :)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My suspicion is that current draw from the motors when they start causes a power drop.&lt;br&gt;&#xA;I can see the red LED going dark on RPi even on lower speeds when I start the movement, but it doesn't really cause the restart, probably because it's so brief.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could this be solved by putting a capacitor in front of motor controller (TB6612FNG)?&#xA;If so, what the value of it should be?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any other ideas? I really don't want to have 2 separate batteries, especially since it's only a problem when the robot starts from a still position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Cheers!&lt;/p&gt;&#xA;" OwnerUserId="21379" LastActivityDate="2020-08-11T21:05:15.563" Title="Power to Raspberry Pi and DC motors from a single USB power bank" Tags="&lt;raspberry-pi&gt;&lt;power&gt;&lt;usb&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20635" PostTypeId="1" AcceptedAnswerId="20640" CreationDate="2020-05-10T15:38:24.730" Score="2" ViewCount="177" Body="&lt;p&gt;I am a student, and I am studying robotic arm manipulators. I am focusing on the concept of inverse kinematics, I have understood is the process of finding, from the direct kinematics, the joint varibles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For easy problems, such as a 2R manipulatoer, I am able to solve algebraically the inverse kinematics problem, but for more complex problems I really get in troubles, and almost every time I can't solve the preoblem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, consider the following arm manipulator:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/HKc0N.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HKc0N.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;if I compute the direct (or forward) kinematics of it, I get:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/CgIYr.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/CgIYr.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have tried computing analitically the inverse kinematics for it, but without success. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;My problem is that I don't understand how to tackle the problem of the inverse kinematics and so I don't know how to move.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What is the reasoning for solving inverse kinematics problems (both easy and hard) ?&lt;/p&gt;&#xA;" OwnerUserId="21797" LastActivityDate="2020-05-11T10:04:38.577" Title="What is the reasoning for solving inverse kinematics problems?" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;inverse-kinematics&gt;&lt;manipulator&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20636" PostTypeId="1" AcceptedAnswerId="20639" CreationDate="2020-05-10T19:26:02.383" Score="0" ViewCount="26" Body="&lt;p&gt;Can anybody please guide me about the robust modeling and control of a quadcopter. Where can i find the robust modeling that can be understandable for me as i am a undergraduate student. I am doing this in my FYP. Please suggest me some book that is written on robust modeling and control on quadcopter. Also, which uncertainties can we model? What are the best robust controllers. &lt;/p&gt;&#xA;" OwnerUserId="26327" LastActivityDate="2020-05-10T23:34:04.160" Title="Robust Controls of Quadcopter" Tags="&lt;control&gt;&lt;flight-controller&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20639" PostTypeId="2" ParentId="20636" CreationDate="2020-05-10T23:34:04.160" Score="0" Body="&lt;p&gt;Check this out&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.hindawi.com/journals/jr/2018/5607362/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.hindawi.com/journals/jr/2018/5607362/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Its not a book but its a very good paper.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also recommend you to read some general robust Control and think about how would you do for a quadrotor&lt;/p&gt;&#xA;" OwnerUserId="26035" LastActivityDate="2020-05-10T23:34:04.160" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20640" PostTypeId="2" ParentId="20635" CreationDate="2020-05-11T05:13:51.000" Score="1" Body="&lt;p&gt;Deriving analytic IK for higher DOFs is tricky. Numerical IK solvers are a good alternative usually, unless you absolutely must use analytic IK.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In various robotics textbooks, there are examples on how to derive analytical IK for 6R robots. The way it's done is by considering position IK and rotation IK independently (note that this is possible only if the wrist is spherical).&lt;/p&gt;&#xA;" OwnerUserId="21531" LastActivityDate="2020-05-11T05:13:51.000" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20643" PostTypeId="2" ParentId="19807" CreationDate="2020-05-11T09:55:10.100" Score="0" Body="&lt;p&gt;This question is already marked as answered, but I found an &lt;a href=&quot;http://openaccess.thecvf.com/content_ICCVW_2019/papers/3DRW/Mari_To_Bundle_Adjust_or_Not_A_Comparison_of_Relative_Geolocation_ICCVW_2019_paper.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;interesting paper&lt;/a&gt; (To Bundle Adjust or Not: A Comparison of Relative Geolocation&#xA;Correction Strategies for Satellite Multi-View Stereo, Marí et al.) that suggests an additional way to cope with the 3D points.&lt;/p&gt;&#xA;" OwnerUserId="24251" LastEditorUserId="24251" LastEditDate="2020-05-12T11:09:02.840" LastActivityDate="2020-05-12T11:09:02.840" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20644" PostTypeId="2" ParentId="20635" CreationDate="2020-05-11T10:04:38.577" Score="0" Body="&lt;p&gt;The reason for solving this problem becomes very obvious when you think of how to grab things. For example, consider a camera that is able to locate an object in the working range of the robot. Suppose you know the relation between camera and robot, but this is another problem...&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The visual system tells you the coordinates where your target is located. Now the robot has to move its joints to reach the object. Arises the question, what are the correct joint parameters? You get the answer from inverse kinematics. And yes, this can be hard to answer and mostly (for real robots) you need to use iterative numerical approaches.&lt;/p&gt;&#xA;" OwnerUserId="24251" LastActivityDate="2020-05-11T10:04:38.577" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20645" PostTypeId="2" ParentId="6601" CreationDate="2020-05-11T18:55:03.557" Score="1" Body="&lt;p&gt;Sorry that this response is very late. I had a little trouble when I first came across the Maestro board as well while working on a project. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Doing research on controlling the board, I came across this Github:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://github.com/FRC4564/Maestro&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/FRC4564/Maestro&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I wanted more comprehensive instructions then the README provided and also wanted to refactor the code to match PEP8 standards for my modules. I have put up the code here in order to help anyone else who finds themselves working with the Maestro board. Hope it helps:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://github.com/RedSunDave/maestro-python3&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/RedSunDave/maestro-python3&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Important things to remember:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Make sure to run ./MaestroControlCenter go to the &quot;Serial Settings&quot; tab and change the &quot;Serial Mode&quot; to &quot;USB DUAL PORT&lt;/li&gt;&#xA;&lt;li&gt;Install the appropriate drivers and &quot;pyserial&quot; module&lt;/li&gt;&#xA;&lt;li&gt;Look through the README, it provides step by step setup instructions.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Here is a quick sample code for using the maestro module:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;import maestro&#xA;servo = maestro.Controller()&#xA;servo.set_acceleration(0,4)   #set servo 0 acceleration to 4&#xA;servo.set_target(0,6000)      #set servo to move to center position&#xA;servo.set_speed(1,10)         #set speed of servo 1&#xA;x = servo.get_position(1)     #get the current position of servo 1&#xA;servo.close()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Good luck and hope this answer helps anyone who comes across.&lt;/p&gt;&#xA;" OwnerUserId="26381" LastActivityDate="2020-05-11T18:55:03.557" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20646" PostTypeId="1" AcceptedAnswerId="20647" CreationDate="2020-05-11T19:14:15.920" Score="0" ViewCount="35" Body="&lt;p&gt;It is known that with a 7DoF industrial you can achieve an accuracy of ~2mm. &#xA;However, the motion with a mobile platform is known to be more inaccurate and expensive. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can follow why the motion is more expensive, probably because of the larger mass. But what is the reason for this inaccuracy? &lt;/p&gt;&#xA;" OwnerUserId="21382" LastActivityDate="2020-05-11T20:19:37.260" Title="Motion of a mobile platform inaccurate than industrial robot arm" Tags="&lt;mobile-robot&gt;&lt;motion-planning&gt;&lt;industrial-robot&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20647" PostTypeId="2" ParentId="20646" CreationDate="2020-05-11T20:19:37.260" Score="0" Body="&lt;p&gt;Instead of motion accuracy, usually positioning accuracy is measured.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Positioning of a robot arm is relative to its fixed base. We can measure the relative angular positions of its joints very accurately using encoders and using a geometrical model of the robot, these measurements give an accurate estimate of the position of the end effector (or tool center point) of the robot. Encoders are relatively inexpensive and used in almost every industrial robot arm&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In case of mobile robots there is no fixed base, there is no relatively inexpensive way of measuring its position relative to a fixed coordinate system in space. In some cases this fixed coordinate system is not even visible form the robot (e.g. in a cluttered room). There are very expensive systems which could measure the position if there is direct visibility (e.g. laser tracker systems) but this leads to other complications (line of sight visibility) and significant cost increase. If we could measure the position accurately, we could position the robots accurately. Instead robots use onboard laser scanner (inaccurate compared to laser tracker systems), cameras and-or other sensor systems and calculates its position relative to features in its environment, which are themselves sometimes inaccurately positioned on a map.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It all comes down to measurements. If we can measure accurately, we can usually also position accurately.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-05-11T20:19:37.260" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20649" PostTypeId="1" AcceptedAnswerId="20657" CreationDate="2020-05-11T23:25:34.647" Score="0" ViewCount="60" Body="&lt;p&gt;Here's what I currently see in my terminal when logging: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;[ INFO] [1589145832.980129261, 843.227000000]: DriveToTarget received: &#xA;linear_x=0.00 &#xA;angular_z=0.00&#xA;[ INFO] [1589145832.980202376, 843.227000000]: Drive parameters sent:&#xA;linear z = 0.000000&#xA;angular z = 0.000000&#xA;[ INFO] [1589145833.363180798, 843.266000000]: Driving bot&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I have code to log parameters received, sent and indication that the bot is moving. One example is: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;DriveToTarget received: &#xA;linear_x=XXXXXX &#xA;angular_z=YYYYY&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I can tell that the &lt;code&gt;[INFO]&lt;/code&gt; is logged because it is &lt;code&gt;ROS_INFO_STREAM&lt;/code&gt; but what are the 2 doubles that are logged before my message, i.e.,  &lt;code&gt;[1589145832.980129261, 843.227000000]&lt;/code&gt;?  &lt;/p&gt;&#xA;" OwnerUserId="15157" LastActivityDate="2020-05-13T08:36:09.387" Title="What are the numbers to the left when logging with ROS_INFO_STREAM?" Tags="&lt;ros&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20650" PostTypeId="1" AcceptedAnswerId="20651" CreationDate="2020-05-12T05:44:06.410" Score="1" ViewCount="41" Body="&lt;p&gt;We are working on a computer vision project where an automated robotic system will be deployed on a 3-lane highway. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;We are using a bosch IP camera (I don't remember the model exactly, but it cost around $ 1k). The video resolution is 1920 by 1080 @ 60 FPS.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem is our LP (license plate) detector is really struggling to read the license plates. I have attached a sample frame from the video that we extracted from the IP camera.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/oeHyF.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/oeHyFm.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt; &lt;a href=&quot;https://pasteboard.co/J7Z2dnN.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;original &lt;em&gt;pasteboard&lt;/em&gt; image link&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If we cannot get this camera to provide the necessary resolution, how can we determine which cameras with a simple interfacing option (&lt;a href=&quot;https://en.wikipedia.org/wiki/Real_Time_Streaming_Protocol&quot; rel=&quot;nofollow noreferrer&quot;&gt;RTSP&lt;/a&gt; or streaming option) are optimized for text-based detection? I suspect due to compression the text quality is getting somewhat deteriorated. Our detector can run at 30 FPS max. so anything with &gt;= 30 FPS and good resolution (especially text) would be an option. (I do bufferless processing, so yes my model only processes half the frames at a time. But, I can configure my detector to run at different FPS, the thing is I can't go lower than 30 FPS for a camera.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Our budget is around (USD 1k to 2k) for the camera. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm open to any suggestion (maybe using a different setup, optimizing the current camera itself) from the experts in the field.&lt;/p&gt;&#xA;" OwnerUserId="26384" LastEditorUserId="26384" LastEditDate="2020-05-12T11:23:58.387" LastActivityDate="2020-05-12T11:23:58.387" Title="Automatic License Plate Recognition System in Highway" Tags="&lt;computer-vision&gt;&lt;cameras&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20651" PostTypeId="2" ParentId="20650" CreationDate="2020-05-12T10:59:17.060" Score="1" Body="&lt;p&gt;I think your big problem is that in the worst case, the characters on your number plates are only a few pixels wide, and the script really doesn't look ideal for OCR anyway.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Camera resolution&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;By my calculations, at the top of each frame the resolution is around 6mm/pixel (assuming a 7m wide highway which is 1200 pixels wide at that point in the image).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A higher resolution camera sensor might help, but you &lt;em&gt;may&lt;/em&gt; be limited more by the lens than by the sensor. A higher resolution camera might just give you more, blurrier pixels.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Before you go buying another camera, I would suggest that you need to determine what the limiting factor on image quality is.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Camera field of view&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;You may get significantly better results with three cameras, one per lane but zoomed in closer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would make sure that there is an overlap of half the width of a number plate between each cameras field of view, so a vehicle switching lanes would be captured on both cameras rather than a number plate being split between the two. You could stitch the images together after doing perspective correction, but that has other problems.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming the same camera angle and resolution with a 2.3m lane and 0.3m overlap, that would increase your resolution to around 2.2mm/pixel (2.6m/1200) which is better than an expensive 4k camera trying to cover a 7m width (also, three HD cameras would be 3/4 the bandwidth of one 4k camera and 3/4 of the pixel processing).&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Camera orientation&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Whether you orient the cameras in landscape or portrait will depend on resolution and field of view requirements, but also on traffic speed. While landscape maximises your resolution, portrait maximises the time dimension.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you orient the camera in landscape and a vehicle travelling at the maximum expected speed can pass the field of view of the camera without the number plate being captured, then orienting the camera in portrait would increase the speed it would have to be travelling at to have a chance of avoid detection.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For instance, if your field of view is 2.6m wide and 1.46m deep and a car speeds past at 100mph (161kph, 45m/s), then at 30 frames per second (1.5m/frame), there is a (small) chance that only the top half of the number plate will be visible on one frame, while only the bottom half of the number plate will be visible on the next. If a vehicle is going faster than that, there is an increasing chance that it may not be in frame at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Reorienting the camera to portrait would cut the top of frame resolution from 2.2mm/pixel to 3.9mm/pixel (2.62600m/(1200/16*9)), but increase time resolution significantly, potentially giving you several frames containing the numberplate of even the fastest moving vehicles (assuming the shutter speed isn't too high enough that the individual frames are blurry).&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Summary&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I think before you spend more money, you need to characterise what you can achieve with the hardware you already have. If you can get good results with your current \$1000 camera when looking at a single lane, then your \$2000 budget could buy you two more identical cameras to extend the system to all three lanes (you may even be able to get a discount on buying a pair).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If this is a prototype, and you will be doing other installations elsewhere later, then you can look into cost reduction mechanisms once the prototype is performing well and you you have a test bed for trying out cheaper components.&lt;/p&gt;&#xA;" OwnerUserId="37" LastActivityDate="2020-05-12T10:59:17.060" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20652" PostTypeId="1" CreationDate="2020-05-12T13:53:45.273" Score="0" ViewCount="140" Body="&lt;p&gt;I have a location of a tool with respect to the base. That location is described by an x,y,z coordinates and three rotations. I call that &lt;span class=&quot;math-container&quot;&gt;$Target$&lt;/span&gt;. I want to make a geometrical approach on the first three angles. I first have to remove some parts of my target to get it to the wrist and also remove the base. This. First I remove the base, then the wrist to tool(TWT) and lastly the frame 6 wrist(T6T). Then you end up with transformation from 0 to 6 (T60). There are 6 frames.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Essentially we did this&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$T06=TB0^{-1}\cdot target \cdot TWT^{-1} \cdot T6W^{-1}$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I as shown in the figure, when theta 1 is calculated for it makes athis equation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\theta_1=tan^{-1}(y/x)$&lt;/span&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This gave the wrong answer. Since the trigonometry was straightforward, my hunch is that the above statement where we changed the transformation was at fault. Did we do it correctly is my question. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/1IcQn.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1IcQn.png&quot; alt=&quot;figure showing how to find theta one&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="24768" LastEditorUserId="24768" LastEditDate="2020-05-12T20:48:24.340" LastActivityDate="2021-03-09T22:02:45.377" Title="Inverse Kinematics does not give the desired joint angles" Tags="&lt;inverse-kinematics&gt;" AnswerCount="4" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20654" PostTypeId="1" AcceptedAnswerId="20659" CreationDate="2020-05-12T14:31:49.130" Score="2" ViewCount="97" Body="&lt;p&gt;I am studying the Denavit Hartenberg and to practice I am using the following manipulator:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/QdGnb.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QdGnb.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have been able to assign some of the frames almost correctly, but i did some mistakes I cannot understand. First of all, the correct solution for this manipulator is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/3NaQY.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3NaQY.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;now, in my attemps, I did some mistakes, which are the following.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the first place, I did not use the frame zero as the frame of the prismatic joint, which is the first joint, bit I decided to define a frame 1 for it, but this is wrong apparently, but &lt;strong&gt;why?&lt;/strong&gt; , to me it seemed natural to define this additional frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another mistake I have done is to not let coincede frame 1 with frame 2, but also in this case I defined an additional frame, which is wrong.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, I have a problem understanding how to say when I can define two frames in the same point and when not. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;How do I understand when to to this?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, to be as clear as possible, my question is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;How do I assign the origin of the frames in the Denavit Hartenberg convention and how do I know if two frames have the same origin?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="21797" LastEditorUserId="21797" LastEditDate="2020-05-12T15:15:37.030" LastActivityDate="2020-05-13T09:08:26.923" Title="How do I assign the origin of the frames in the Denavit Hartenberg convention?" Tags="&lt;robotic-arm&gt;&lt;manipulator&gt;&lt;dh-parameters&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20655" PostTypeId="2" ParentId="20652" CreationDate="2020-05-12T20:34:45.587" Score="0" Body="&lt;p&gt;I think your transforms are assembled in reverse order maybe? I didn't really follow your explanation of what the frames are (&lt;em&gt;and they aren't labeled on your drawing&lt;/em&gt;), so I'll say that you can compose a transform matrix the following way:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;T_0^6 = T_0^1 T_1^2T_2^3 ... T_5^6 \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That is, to get from Frame 0 to Frame 6, you multiply together the transforms from 0 to 1, then 1 to 2, then 2 to 3, and so on. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This seems to be kind of similar to what you wrote:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;T06=TB0^{−1}⋅target⋅TWT^{−1}⋅T6W^{−1} \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But I'm not sure where your missing frames are (there are 6, right?) or what &lt;span class=&quot;math-container&quot;&gt;$target$&lt;/span&gt; is (a point or a frame or a transform?) &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But if you had some point in the end-effector frame (frame 6), then you would represent that via the base-to-frame-6 transform:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;T_B^6 = T_B^1T_1^2...T_5^6 \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And then&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\overrightarrow{x}_B = T_B^6 \overrightarrow{x}_6 \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you wanted to express a point given in base coordinates in the end effector's frame, just invert the transform:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\overrightarrow{x}_6 = (T_B^6)^{-1} \overrightarrow{x}_B \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;because:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\begin{array}{ccc}&#xA;\overrightarrow{x}_B &amp;amp;=&amp;amp; T_B^6 \overrightarrow{x}_6 \\&#xA;(T_B^6)^{-1}\overrightarrow{x}_B &amp;amp;=&amp;amp; (T_B^6)^{-1}T_B^6 \overrightarrow{x}_6 \\&#xA;(T_B^6)^{-1}\overrightarrow{x}_B &amp;amp;=&amp;amp; I \overrightarrow{x}_6 \\&#xA;(T_B^6)^{-1}\overrightarrow{x}_B &amp;amp;=&amp;amp; \overrightarrow{x}_6 \end{array}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-05-12T20:34:45.587" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20656" PostTypeId="2" ParentId="20652" CreationDate="2020-05-13T08:27:39.287" Score="0" Body="&lt;p&gt;The equation &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$T06=TB0^{-1}\cdot target \cdot TWT^{-1} \cdot T6W^{-1}$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;seems to be the probem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first equality which can be written is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;T_{robot} = T_{TCP}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Two transformation matrices which transform the same base frame to the same TCP Frame, but use different atomic transformations. &lt;span class=&quot;math-container&quot;&gt;$T_{robot}$&lt;/span&gt; uses joint angles and the &lt;span class=&quot;math-container&quot;&gt;$T_{TCP}$&lt;/span&gt; matrix uses the end effector coordinates as atomic transformations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$T_{robot} = T_{base} \cdot   T_{0,6} \cdot  T_{tool}$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$T_{TCP} = T_x \cdot T_y \cdot  T_z \cdot  R_{X} \cdot  R_{Y} \cdot  R_{Z}$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;T_{0,6} = T_{0,1} \cdot  T_{1,2} \cdot ...\cdot  T_{5,6}\\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the inverse kinematics problem is addressed, only &lt;span class=&quot;math-container&quot;&gt;$T_{0,6}$&lt;/span&gt; has unknowns, every other matrix is known and fully defined.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ T_{base} ^{-1} \cdot  T_{robot} \cdot  T_{tool}^{-1} = T_{0,6}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first step for solving inverse kinematics for robots with a wrist is finding the angle of the first joint. This is done by expressing the wirst point coordinates on both sides of the equation&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ T_{base} ^{-1} \cdot  T_{robot} \cdot  T_{tool}^{-1} = T_{0,1} \cdot  T_{1,2} \cdot ...\cdot  T_{5,6}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ T_{base} ^{-1} \cdot  T_{robot} \cdot  T_{tool}^{-1} \cdot T_{5,6}^{-1} \cdot \cdot T_{4,5}^{-1} = T_{0,1} \cdot  T_{1,2} \cdot ...\cdot  T_{3,4}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the matrix on the left hand side the last columnt should only contain known paramters, this is the X, Y, Z coordinate of the wrist point. Using the &lt;span class=&quot;math-container&quot;&gt;$atan2()$&lt;/span&gt; function, the &lt;span class=&quot;math-container&quot;&gt;$q_1$&lt;/span&gt; joint angle of the first axis can be calculated.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-05-13T08:27:39.287" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20657" PostTypeId="2" ParentId="20649" CreationDate="2020-05-13T08:36:09.387" Score="4" Body="&lt;p&gt;The first number is the walltime (sec seconds and nsec nanoseconds since January 1, 1970 UTC).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second number is the simulated time (also sec.nsec) since you started your simulation environment. (I assume you use some simulation environment like gazebo or similar)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can configure the rosconsole format as you like by setting the ROSCONSOLE_FORMAT environment variable.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;export ROSCONSOLE_FORMAT='[${severity}] [${time}]: ${message}'&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;have a look at &lt;a href=&quot;http://wiki.ros.org/rosconsole&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://wiki.ros.org/rosconsole&lt;/a&gt; (Section 6. Console Output Formatting) for the complete list of available variables&lt;/p&gt;&#xA;&#xA;&lt;p&gt;happy logging!&lt;/p&gt;&#xA;" OwnerUserId="19693" LastActivityDate="2020-05-13T08:36:09.387" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20659" PostTypeId="2" ParentId="20654" CreationDate="2020-05-13T09:01:49.540" Score="3" Body="&lt;p&gt;There is not one correct DH Frame assignment, but there are many. Even if you do not get the same results, you might still have a correct frame assignment. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first, base frame at the root of the robot, sometimes called robroot frame is the reference frame, relative to this are the TCP coordinates defined, this is why it is needed. A this is a frame relative to which the TCP coordinates are defined, in many cases it is application dependent, not necessarily DH dependent. If the application does not specify it, then you are free to define it as you prefer. In this case the best practice is at the base of the robot, with z pointing up, against gravity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Adding a frame with no joint variable is generally not practiced in DH. An additional atomic transformation, included in an additional frame, can be also added as an offset to the joint variable and the effect would be the same. E.g. a pure transformation matrix on the z axis is the same as adding a z offset to the next DH frame. Generally an absolute minimum amount of matrices and as many 0 valued DH parameters as possible should be preferred.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Generally, when you can express two frames with the same origin it is preferred. If you can do this or not depends on the joint configuration. If the joints are collinear you probably can express them using the same origin. &lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2020-05-13T09:08:26.923" LastActivityDate="2020-05-13T09:08:26.923" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20660" PostTypeId="2" ParentId="20621" CreationDate="2020-05-13T09:07:42.483" Score="0" Body="&lt;p&gt;After you calculate the joint angles, you can go back to each kinematic chain connecting the platforms ans solve the &quot;inverse kinematic problem&quot; of the kinematic chain only. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The base frame of the chain has known coordinates, the end of the chain should have known coordinates and the already calculated active joint angle can be used to reduce the number of unknowns.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-05-13T09:07:42.483" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20663" PostTypeId="2" ParentId="20652" CreationDate="2020-05-13T19:01:41.907" Score="0" Body="&lt;p&gt;I hope introducing yet another variation on the notation does not confuse things but I strongly prefer the following layout for a transform because it makes chaining transformations the wrong way around pretty much impossible.&lt;br&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;${}^aT_b$&lt;/span&gt; describes the position of &lt;em&gt;b&lt;/em&gt; in frame &lt;em&gt;a&lt;/em&gt;.&lt;br&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;${}^aT_{b} * {}^bT_c$&lt;/span&gt; -&gt; correct chaining&lt;br&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;${}^aT_b * {}^cT_b$&lt;/span&gt; -&gt; clearly wrong  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Your transformations:&lt;br&gt;&#xA;T06 -&gt; &lt;span class=&quot;math-container&quot;&gt;${}^0T_6$&lt;/span&gt; frame 6 described in frame 0&lt;br&gt;&#xA;TB0 -&gt; &lt;span class=&quot;math-container&quot;&gt;${}^BT_0$&lt;/span&gt; frame 0 described in frame 'base'&lt;br&gt;&#xA;target -&gt; &lt;span class=&quot;math-container&quot;&gt;${}^BT_{tool}$&lt;/span&gt; frame 'tool' described in frame 'base'&lt;br&gt;&#xA;TWT -&gt; &lt;span class=&quot;math-container&quot;&gt;${}^{wrist}T_{tool}$&lt;/span&gt; frame 'tool' described in frame 'wrist'&lt;br&gt;&#xA;T6W -&gt; &lt;span class=&quot;math-container&quot;&gt;${}^{6}T_{wrist}$&lt;/span&gt; frame 'wrist' described in frame 6&lt;br&gt;&#xA;(btw you refer to 'frame 6 wrist(T6T)' first in the description and and then 'T6W' in the equation - is this intentional?)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So if the above is all correct, then we have:&lt;br&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;${}^0T_6 = ({}^BT_0)^{-1} * {}^BT_{tool} * ({}^{wrist}T_{tool})^{-1} * ({}^{6}T_{wrist})^{-1}$&lt;/span&gt;&lt;br&gt;&#xA;Let's flip the frames on the inverses to make it more readable&lt;br&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;${}^0T_6 = {}^0T_B * {}^BT_{tool} * {}^{tool}T_{wrist} * {}^{wrist}T_{6}$&lt;/span&gt;&lt;br&gt;&#xA;Which we can easily see now looks correct so I don't think there is a problem with this part (assuming those transformations are all set up correctly).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I assume you are taking y and x from this &lt;span class=&quot;math-container&quot;&gt;${}^0T_6$&lt;/span&gt;? In which case, based on the layout of this robot and the particular configuration you show in the picture, I would indeed expect &lt;span class=&quot;math-container&quot;&gt;$\theta_1 = \tan^{-1}(y/x)$&lt;/span&gt;.&lt;br&gt;&#xA;Note that this equation will not always be true for &lt;span class=&quot;math-container&quot;&gt;${}^0T_6$&lt;/span&gt; but should always be true for &lt;span class=&quot;math-container&quot;&gt;${}^0T_5$&lt;/span&gt; (or &lt;span class=&quot;math-container&quot;&gt;${}^0T_{wrist}$&lt;/span&gt;).&lt;br&gt;&#xA;However, don't forget that there may be two solutions! They will be &lt;span class=&quot;math-container&quot;&gt;$\pi$&lt;/span&gt; apart.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If, as per your question, it does not, I think there is probably something wrong with one of your transformations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How wrong is the answer you get? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;To debug this I would set the joint angles to known values (as I guess you've already done as per the picture), then use forward kinematics to calculate the position of every frame, &lt;span class=&quot;math-container&quot;&gt;${}^BT_0$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;${}^0T_1$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;${}^1T_2$&lt;/span&gt; etc. If you have a way to visualise them that's ideal.&#xA;Now work along each frame from the base and check that each one is where you expect.&lt;/p&gt;&#xA;" OwnerUserId="15397" LastActivityDate="2020-05-13T19:01:41.907" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20664" PostTypeId="1" CreationDate="2020-05-14T00:04:02.530" Score="1" ViewCount="91" Body="&lt;p&gt;I am currently going through all the pixels in an image to determine what is a white pixel. I then have to decide where to drive the bot. I am also using &lt;a href=&quot;http://docs.ros.org/melodic/api/sensor_msgs/html/msg/Image.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;sensor_msgs/Image.msg&lt;/a&gt; that I get from the &lt;code&gt;/camera/rgb/image_raw&lt;/code&gt; channel. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;However, I can't seem to locate any white image with the code but the &lt;code&gt;RGBa&lt;/code&gt; values I set in my model in &lt;code&gt;gazebo&lt;/code&gt; all have value &lt;code&gt;1&lt;/code&gt; as shown in the image below the code .  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I logged all my values(more than once) with &lt;code&gt;ROS_INFO_STREAM&lt;/code&gt; but no values are &lt;code&gt;255&lt;/code&gt;, let alone &lt;code&gt;3&lt;/code&gt; consecutive ones. &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void process_image_callback(const sensor_msgs::Image img)&#xA;{&#xA;  const int white_pixel = 255;&#xA;&#xA;  const int image_slice_width = img.step / 3;&#xA;&#xA;  int j = 0;&#xA;  bool found = false;&#xA;&#xA;  for (int i = 0; not found and i &amp;lt; img.height; i++) &#xA;  {&#xA;    for (j; j &amp;lt; img.step-3; j += 3)&#xA;    {&#xA;      if (img.data[i*img.step + j] == white_pixel)&#xA;      {&#xA;      ROS_INFO_STREAM(&quot;img.data[i*img.step + (j + 0)]&quot; + std::to_string(img.data[i*img.step + (j + 0)]));&#xA;      ROS_INFO_STREAM(&quot;img.data[i*img.step + (j + 1)]&quot; + std::to_string(img.data[i*img.step + (j + 1)]));&#xA;      ROS_INFO_STREAM(&quot;img.data[i*img.step + (j + 2)]&quot; + std::to_string(img.data[i*img.step + (j + 2)]));&#xA;      }&#xA;      // img.data only has one index&#xA;      if (img.data[i*img.step +  j     ] == white_pixel and&#xA;          img.data[i*img.step + (j + 1)] == white_pixel and&#xA;          img.data[i*img.step + (j + 2)] == white_pixel)&#xA;      {&#xA;          found = true;&#xA;          break;&#xA;      }&#xA;    }&#xA;    ROS_INFO_STREAM(&quot;End of j loop&quot;);&#xA;  }&#xA;&#xA;  if (found)&#xA;  {&#xA;    // go left, forward or right&#xA;  }&#xA;  else&#xA;  {&#xA;    // no white pixel seen so stop the bot&#xA;  }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/QvFcY.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QvFcY.png&quot; alt=&quot;gazebo RGBA settings&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15157" LastEditorUserId="15157" LastEditDate="2020-05-14T00:34:55.193" LastActivityDate="2020-05-14T00:34:55.193" Title="Am I checking for a white pixel correctly?" Tags="&lt;ros&gt;&lt;gazebo&gt;" AnswerCount="0" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="20665" PostTypeId="1" CreationDate="2020-05-14T05:19:00.543" Score="1" ViewCount="69" Body="&lt;p&gt;I am currently estimating a robot's pose (3d position and rotation matrix) with an IMU and I want to reset the localizer in the middle of the run while keeping the relationship to the pose it had when the reset occurs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Basically, at time t, I have the position and velocity in the world frame of the robot as well as the rotation matrix from the body-fixed frame to the world frame. If, I then reset the localizer at time t and set the position to the origin and the rotation matrix to the identity; how should the velocity be rotated such that I can relate the new estimated trajectory to the pose the vehicle had when it reset at time t by:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ \mathbf{p}^{world}_{t+n} = \mathbf{R}_{t}\mathbf{p}_{t+n}+\mathbf{p}_{t}$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$ \mathbf{R}^{world}_{t+n} = \mathbf{R}_{t}\mathbf{R}_{t+n} $$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where n is any index of the estimated positions after the reset at time t.&lt;/p&gt;&#xA;" OwnerUserId="26398" LastActivityDate="2021-02-12T10:04:10.370" Title="Reset coordinate system of robot while maintaining relationship to the previous" Tags="&lt;rotation&gt;&lt;pose&gt;&lt;estimation&gt;&lt;trajectory&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20668" PostTypeId="1" AcceptedAnswerId="20669" CreationDate="2020-05-15T09:45:56.570" Score="0" ViewCount="33" Body="&lt;p&gt;I am trying to understand the axis/angle representation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So far, I have understood that the main idea is that every rotation can be represented as a rotation around an arbitrary axis of an angle &lt;span class=&quot;math-container&quot;&gt;$\theta $&lt;/span&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, for example, if I have a rotation matrix &lt;span class=&quot;math-container&quot;&gt;$R$&lt;/span&gt; I can find an axis &lt;span class=&quot;math-container&quot;&gt;$r$&lt;/span&gt; and an angle &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;what I have not clear is the following:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Suppose I have a rotation matrix which represents the orientation of a frame, &lt;span class=&quot;math-container&quot;&gt;$R ^{i}_0$&lt;/span&gt; for where &lt;span class=&quot;math-container&quot;&gt;$i$&lt;/span&gt; is used to express the fact that this is an initial frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, suppose I want to change reference frame, and so I can obtain a final reference frame, for example applying Roll Pitch Yaw sequence, and so I obtain &lt;span class=&quot;math-container&quot;&gt;$R_{f}^{i}$&lt;/span&gt;, where &lt;span class=&quot;math-container&quot;&gt;$f$&lt;/span&gt; stands for final frame. So I end up with the orientation of a final frame with respect to the initial frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I don't understand is: &lt;strong&gt;In which frame is the unit vector around which the rotation happens expressed?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="21797" LastEditorUserId="21797" LastEditDate="2020-05-15T09:52:35.763" LastActivityDate="2020-05-15T10:51:07.937" Title="Doubt about axis\angle representation" Tags="&lt;kinematics&gt;&lt;rotation&gt;&lt;frame&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20669" PostTypeId="2" ParentId="20668" CreationDate="2020-05-15T10:51:07.937" Score="1" Body="&lt;p&gt;Depending on which matrix you convert to an axis angle representation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you do it successively, you end up with 3 axis with 3 angles in 3 different frames (&lt;span class=&quot;math-container&quot;&gt;$R_0$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$R_1$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$R_2$&lt;/span&gt;). It is trivial to notice, that in this the axes will coincide with axes of the successive frames.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you choose to take the result of the multiplication and write it in axis angle form you will end up with 1 axis and 1 angle in the &lt;span class=&quot;math-container&quot;&gt;$R_0$&lt;/span&gt; Frame and the axis-angles expresses the effect of all 3 rotations.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-05-15T10:51:07.937" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20670" PostTypeId="1" CreationDate="2020-05-15T12:07:45.180" Score="1" ViewCount="74" Body="&lt;p&gt;How to rotate coordinate frame (transform point or vector coordinates) using angles from 2-axis inclination sensor if both X and Y angles are non-zero?&lt;/p&gt;&#xA;" OwnerUserId="26395" LastEditorUserId="110" LastEditDate="2020-05-18T19:22:00.750" LastActivityDate="2020-12-23T12:20:51.767" Title="Rotate coordinate frame using 2-axis inclinometer angles" Tags="&lt;rotation&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20672" PostTypeId="1" AcceptedAnswerId="20674" CreationDate="2020-05-16T09:51:19.997" Score="3" ViewCount="415" Body="&lt;p&gt;I am studying robotics, and I am trying to write a Matlab code for computing the derivative of the jacobian matrix.&lt;/p&gt;&#xA;&lt;p&gt;The formula for computing the derivative of the Jacobian is the following:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/D4iIV.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/D4iIV.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;so it has been done a derivation with respect to time and it has been applied the chain rule.&lt;/p&gt;&#xA;&lt;p&gt;I know how to do this computation by hand, but it takes really a long time if the Jacobian is large, and moreover if then I have to do some calculations with the derivative of the Jacobian it is hard without the code.&lt;/p&gt;&#xA;&lt;p&gt;I have found this question here on Stack Exchange Robotics where a code has been posted:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/10998/derivative-of-a-jacobian-matrix&quot;&gt;Derivative of a Jacobian matrix&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;which is similar(it is the same, I copied it but I changed T with q) to:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;clear all&#xA;clc&#xA;syms q1 q2 q3 t;&#xA;&#xA;q1(t) = symfun(sym('q1(t)'), t);&#xA;q2(t) = symfun(sym('q2(t)'), t);&#xA;q3(t) = symfun(sym('q3(t)'), t);&#xA;&#xA;J11 = -sin(q1(t))*(a3*cos(q2(t) + q3(t)) + a2*cos(q2(t)))&#xA;&#xA;dJ11dt = diff(J11,t)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;but if I use this code I get an error which says:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Error using sym&amp;gt;convertChar (line 1537)&#xA;Character vectors and strings in the first argument can only specify a variable or number. To evaluate&#xA;character vectors and strings representing symbolic expressions, use 'str2sym'.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;can somebody please help me?&lt;/p&gt;&#xA;" OwnerUserId="21797" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2020-12-09T12:16:28.443" Title="How do I compute the derivative of the Jacobian with Matlab?" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;jacobian&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20673" PostTypeId="1" AcceptedAnswerId="20675" CreationDate="2020-05-16T10:45:33.903" Score="3" ViewCount="371" Body="&lt;p&gt;Consider the following situation:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a robotic arm manipulator with all revolute joints, for example consider a 2R planar manipulator. We know that if we compute the direct kinematics of it, anf the from the direct kinematics we derive the Jacobian matrix (for example only the linear part), we have that:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\dot{p}=J(q)\dot{q}$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and if we want to do the inverse differential kinematics and obtain the joint velocities we just need to do the following:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\dot{q}=J^{-1}(q)\dot{p}$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;which is only possible if the Jacobian matrix is invertible, so if the robot is &lt;strong&gt;not&lt;/strong&gt; in a singular configuration.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, consider the case where the robot &lt;strong&gt;is in a singular configuration&lt;/strong&gt;. We have that we cannot do anymore what we have done before, because the Jacobian is not invertible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, studying I have seen that we can use a trick for inverting the jacobian and so finding the joint velocity anyway, and this is done by using the &lt;strong&gt;pseudoinverse&lt;/strong&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\dot{q}=J^{*}(q)\dot{p}$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where I have used &lt;span class=&quot;math-container&quot;&gt;$*$&lt;/span&gt; to imply the pesudoinverse (sorry but I don't know why it does not let me use #).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have seen that by using the pesudoinverse it is minimized the leaast square error and so the motion is possible to realize also from a singular configuration, but &lt;strong&gt;I have not understood this concept&lt;/strong&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This should me the minimum norm solution.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can someone please explain to me this concept?&lt;/p&gt;&#xA;" OwnerUserId="21797" LastEditorUserId="21797" LastEditDate="2020-05-16T12:11:53.693" LastActivityDate="2020-05-16T20:23:30.930" Title="Why with the pseudo-inverse it is possible to invert the Jacobian matrix even in a singular configuration?" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;inverse-kinematics&gt;&lt;jacobian&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20674" PostTypeId="2" ParentId="20672" CreationDate="2020-05-16T11:32:11.723" Score="5" Body="&lt;p&gt;To answer your solution, specifically, all you need to do is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;clear all&#xA;clc&#xA;syms q1 q2 q3 t a3 a2;&#xA;&#xA;q1(t) = symfun(str2sym('q1(t)'), t);&#xA;q2(t) = symfun(str2sym('q2(t)'), t);&#xA;q3(t) = symfun(str2sym('q3(t)'), t);&#xA;&#xA;J11 = -sin(q1(t))*(a3*cos(q2(t) + q3(t)) + a2*cos(q2(t)))&#xA;&#xA;dJ11dt = diff(J11,t)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But if you're interested, there is a paper you might want to check that solves for the Jacobian Derivative &lt;span class=&quot;math-container&quot;&gt;$\dot{J}(q)$&lt;/span&gt; analytically, &lt;a href=&quot;https://ieeexplore.ieee.org/abstract/document/7880802&quot; rel=&quot;noreferrer&quot;&gt;(Rhee, J. Y., &amp;amp; Lee, B., 2017)&lt;/a&gt;. The authors compare the method you presented with their own in terms of computation time. It is significantly faster.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The method they presented is summarized in the following algorithm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\overline{\underline{\bf{\text{Algorithm 1}}\textrm{ Jacobian and Jacobian Differentiation}}}\\&#xA;\begin{array}{lll}&#xA;1: &amp;amp; \omega_0^0 \leftarrow\left[0,0,0\right]^T &amp;amp; \\&#xA;2: &amp;amp; z_0^0 \leftarrow\left[0,0,1\right]^T &amp;amp; \\&#xA;3: &amp;amp; \pmb{J}_1 \leftarrow \left[\begin{matrix}&#xA;z_0^0\times d_n^0 \\ &#xA;z_0^0\end{matrix}\right] &amp;amp; \\&#xA;4: &amp;amp; \bf{\text{for }} \textrm{i = 2 to n } \bf{\text{do}} &amp;amp; \triangleright \textrm{ Jacobian Computation loop} \\&#xA;5: &amp;amp; \quad \pmb{J}_i = \left[\begin{matrix} &#xA;z_{i-1}^0 \times d_{i-1,n}^0 \\ &#xA;z_{i-1}^0\end{matrix}\right] &amp;amp;  \\&#xA;6: &amp;amp; \quad \omega_{i-1}^0 \leftarrow w_{i-2}^0 + z_{i-2}^0\dot{q}_{i-1} \\&#xA;7: &amp;amp; \bf{\text{end for}} &amp;amp; \\&#xA;8: &amp;amp; \beta \leftarrow J_{v,i}\dot{q}_i &amp;amp; \\&#xA;9: &amp;amp; \bf{\text{for }} \textrm{i = n to 2 } \bf{\text{do}} &amp;amp; \triangleright &#xA; \textrm{ Jacobian Differentiation loop}\\&#xA;10: &amp;amp; \quad \dot{z}_{i-1}^0 \leftarrow \omega_{i-1}^0 \times z_{i-1}^0 &amp;amp; \\&#xA;11: &amp;amp; \quad \alpha \leftarrow \left[0,0,0\right]^T &amp;amp; \\&#xA;12: &amp;amp; \quad \bf{\text{for }} \textrm{j = 1 to i-1 } \bf{\text{do}} \\&#xA;13: &amp;amp; \qquad \alpha \leftarrow \alpha + z_{j-1}^0 \times \left(d_n^0 - d_{i-1}^0\right)\dot{q}_j &amp;amp; \\&#xA;14: &amp;amp; \quad \bf{\text{end for}} &amp;amp; \\&#xA;15: &amp;amp; \quad \dot{J}_i = \left[\begin{matrix}&#xA;\left(\dot{z}_{i-1}^0\right) \times (d_{n}^0- d_{i-1,n}^0) + z_{i-1}^0 \times\left(\alpha + \beta\right) \\&#xA;\dot{z}_{i-1}^0 \end{matrix}\right] &amp;amp; \\&#xA;16: &amp;amp; \quad \beta \leftarrow \beta + J_{v,i-1}\dot{q}_{i-1} &amp;amp; \\&#xA;17: &amp;amp; \bf{\text{end for}} &amp;amp; \\&#xA;18: &amp;amp; \dot{J}_1 = \left[\begin{matrix}&#xA;z_0^0 \times \beta \\&#xA;\left[0,0,0\right]^T \end{matrix}\right] &amp;amp; \\&#xA;\end{array} \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;" OwnerUserId="24309" LastActivityDate="2020-05-16T11:32:11.723" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20675" PostTypeId="2" ParentId="20673" CreationDate="2020-05-16T20:23:30.930" Score="4" Body="&lt;p&gt;The pseudoinverse gives a “least squared error, minimum-norm” solution: Out of all &lt;span class=&quot;math-container&quot;&gt;$\dot{q}$&lt;/span&gt; vectors at your current &lt;span class=&quot;math-container&quot;&gt;$q$&lt;/span&gt;, the vector &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$\dot{q}_{s} = J^{+}(q)\dot{p}_{\text{in}}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;satisfies two conditions:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Least squared error: There is no &lt;span class=&quot;math-container&quot;&gt;$\dot{q}$&lt;/span&gt; vector which will get closer to &lt;span class=&quot;math-container&quot;&gt;$\dot{p}$&lt;/span&gt; when passed through &lt;span class=&quot;math-container&quot;&gt;$J(q)$&lt;/span&gt;. (I.e. for &lt;span class=&quot;math-container&quot;&gt;$\dot{p}_{s} = J(q)\dot{q}_{s}$&lt;/span&gt;, the normed difference &lt;span class=&quot;math-container&quot;&gt;$\lvert \dot{p}_{\text{in}}-\dot{p}_{s} \rvert$&lt;/span&gt; is smaller than any other &lt;span class=&quot;math-container&quot;&gt;$\lvert \dot{p}_{\text{in}} - \dot{p} \rvert$&lt;/span&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Minimum-norm: Out of all &lt;span class=&quot;math-container&quot;&gt;$\dot{q}$&lt;/span&gt; that satisfy the first condition, &lt;span class=&quot;math-container&quot;&gt;$\dot{q}_{s}$&lt;/span&gt; is the smallest of those vectors. (I.e. &lt;span class=&quot;math-container&quot;&gt;$\lvert \dot{q_{s}}\rvert$&lt;/span&gt; is smaller than &lt;span class=&quot;math-container&quot;&gt;$\lvert \dot{q} \rvert$&lt;/span&gt; for all &lt;span class=&quot;math-container&quot;&gt;$\dot{q}$&lt;/span&gt; that minimize error in &lt;span class=&quot;math-container&quot;&gt;$\dot{p}$&lt;/span&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;At the singularity, the set of achievable velocities loses one dimension (so that there are &lt;span class=&quot;math-container&quot;&gt;$\dot{p}$&lt;/span&gt; that cannot be exactly produced by a &lt;span class=&quot;math-container&quot;&gt;$\dot{q}$&lt;/span&gt;), but for any &lt;span class=&quot;math-container&quot;&gt;$\dot{p}_{\text{in}}$&lt;/span&gt; there is a set of &lt;span class=&quot;math-container&quot;&gt;$\dot{q}$&lt;/span&gt; that all come equally close to producing &lt;span class=&quot;math-container&quot;&gt;$\dot{p}_{\text{in}}$&lt;/span&gt;, and the pseudoinverse picks the smallest (in &lt;span class=&quot;math-container&quot;&gt;$\dot{q}$&lt;/span&gt;-space) of these vectors.&lt;/p&gt;&#xA;" OwnerUserId="11712" LastActivityDate="2020-05-16T20:23:30.930" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20676" PostTypeId="1" CreationDate="2020-05-16T23:01:20.880" Score="1" ViewCount="50" Body="&lt;p&gt;I'm new to this forum so I apologise if I disrespect some rules. I am considering using HTTP requests to control a robot remotely. The design problem I am trying to solve is that I would like to operate my robot using a wireless controller. The controller communicates to my pc, which then transmits data about its joystick to the robot. I am thinking of sending this data by means of HTTP requests. Based on the design problem, the communication will happen frequently.&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Are there any glaring issues with this approach?&lt;/li&gt;&#xA;&lt;li&gt;Are there any alternative communication protocols that might be better?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="26408" LastActivityDate="2020-07-27T07:03:20.400" Title="HTTP requestes for Robot Teleoperation" Tags="&lt;mobile-robot&gt;&lt;control&gt;&lt;wifi&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20678" PostTypeId="2" ParentId="20676" CreationDate="2020-05-17T10:04:57.810" Score="2" Body="&lt;p&gt;HTTP is a request reply communication. This is inherently limited to only one of the parties (the client) to initiate the exchange of messages. Furthermore as it is defined at the upper layers of the OSI stack it has more overhead, then protocols on lower layers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One alternative a protocol on the transport layer, like TCP, SCTP or UDP. TCP opens a communication channel and until this channel is open messages can be exchanged and messages are guaranteed to arrive. UDP does not offer this guarantee, but in a small network messages should not get lost. SCTP is a newer portocoll and it is meant for streaming applications, so it could fit your application well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another option to consider is MQTT or similar streaming protocols (similar is RabbitMQ, zeroMQ). MQTT uses a message broker and instead of request-reply it uses publish-subscribe pattern. It is at a higher layer then TCP, UDP or SCTP (This usually means that it is more convenient to use but has more overhead). The robot can publish its measured coordinates and the joystick can publish its reference position. The robot subscribes to the joystick reference positions and a user interface can subscribe to both reference and measured coordinates in order to display them.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All above solutions are supported by libraries for all popular programing languages and cross platform use is also possible.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you prefer a browser based interaction HTTP would be the easiest to implement. For native apps all above is similarly complex and plenty tutorials can be found. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please not that none of the above methods will reach a cycle time suitable for using them inside a closed control loop, MQTT, SCTP, TCP or UDP will all be ok for supplying reference values for control loops. I would expect HTTP to be a bit slower the the others.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2020-05-18T05:19:02.533" LastActivityDate="2020-05-18T05:19:02.533" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20679" PostTypeId="1" AcceptedAnswerId="20684" CreationDate="2020-05-17T17:12:59.720" Score="1" ViewCount="100" Body="&lt;p&gt;I'm a newcomer to this kind of tinkering so please bear with me here. I've searched high and low for an answer but have been unable to find one. I have a Raspberry Pi Zero W hooked up to a L298N motor controller and want to turn a motor forward or backward using Johnny Five. Oddly enough, when I do a simple trial of simply instantiating the motor via script, it begins turning without instruction and won't stop until I reboot the Pi; even killing the script doesn't stop the motor once it's started. Here's the code I'm using which starts the motor:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;&#xA;const raspi = require('raspi-io').RaspiIO&#xA;const five = require('johnny-five')&#xA;const board = new five.Board({&#xA;  io: new raspi()&#xA;})&#xA;&#xA;board.on('ready', function () {  &#xA;  const motor = new five.Motor(['GPIO23', 'GPIO24'])&#xA;})&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;That's it. the &lt;code&gt;new five.Motor&lt;/code&gt; call is the one that starts the motor going. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Script/lib info:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;NodeJS: v10.15.0&#xA;&quot;johnny-five&quot;: &quot;^1.4.0&quot;&#xA;&quot;raspi-io&quot;: &quot;^11.0.0&quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And, an image describing my wiring:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/PHj0e.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/PHj0e.jpg&quot; alt=&quot;Board Layout&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have the L298N using 5v power from the Pi board, ground connected, and the in1/in2 is hooked to GPIO23 and GPIO24.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I run the script with GPIO23 connected but not GPIO24, the motor does not run. If the opposite is true (GPIO24 connected but not GPIO23), then the motor runs on startup. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It seems like what I'm trying to do is very simple, but I also understand that I'm at the mercy of two libraries (raspi-io and johnny-five) that I may not be using properly. I've tried my best to follow all examples I could find (especially &lt;a href=&quot;http://johnny-five.io/examples/motor/&quot; rel=&quot;nofollow noreferrer&quot;&gt;This one&lt;/a&gt; and pared my code back to the bare minimum to still create this effect. Any help would be greatly appreciated. &lt;/p&gt;&#xA;" OwnerUserId="26415" LastActivityDate="2020-05-18T17:09:23.893" Title="Raspberry Pi &amp; L298N &amp; Johnny Five, motor turns when instantiated" Tags="&lt;motor&gt;&lt;raspberry-pi&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20681" PostTypeId="2" ParentId="20665" CreationDate="2020-05-17T20:08:53.980" Score="0" Body="&lt;p&gt;Instead of just considering it a reset, you should consider it a coordinate system transformation:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;You set the position to zero, that means that you create a transformation matrix which brings your current position to zero. &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You set the rotation matrix to the identity matrix, so you create a transformation matrix, which transforms your current rotation state to zero rotation.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;You can build these matrices as the inverse of the transformation matrices you already have. These matrices can then be used to convert the velocity vector (or even the whole previous trajectory) to the new frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do not do a reset by attributing a new position and rotation value, find the coordinate transformation which brings the current frame to the desired frame and use that transformation to transform all elements of the original frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Algorithmically, instead of&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;newPos = defaultPos&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;use&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;newPos = getTMat(oldPos, defaultPos) * oldPos&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If you have a velocity vector in the previous coordinate frame, oldVel = (xvel, yvel, zvel) and you want to convert it to the new coordinate frame:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;newVel = R * oldVel&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Where R is the rotation part (3x3) of the T transformation matrix (4x4) between the two frames. Please note, that if the velocity is expresses in a different frame (e.g. the mobile robots coordinates) you will need the rotation matrix between the robot and the old frame first:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;newVel = R_new, old * R_old, robot * oldVel&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2020-05-18T08:40:13.693" LastActivityDate="2020-05-18T08:40:13.693" CommentCount="19" ContentLicense="CC BY-SA 4.0" />
  <row Id="20682" PostTypeId="1" AcceptedAnswerId="20683" CreationDate="2020-05-18T10:31:12.397" Score="0" ViewCount="51" Body="&lt;p&gt;I am studying robotics and I am focusing on trajectory planning.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have been struggling with this topic for a while, and I still have some doubts that I cannot solve. One of them is the following:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was solving a problem for training which required this:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;A robot joint should perform a rest-to-rest rotation &lt;span class=&quot;math-container&quot;&gt;$\Delta \theta $&lt;/span&gt; in a total time &lt;span class=&quot;math-container&quot;&gt;$T$&lt;/span&gt; by using a bang-coast-bang&#xA;  acceleration profile with symmetric acceleration and deceleration phases, each of duration &lt;span class=&quot;math-container&quot;&gt;$Ts = \frac{T}{4}$&lt;/span&gt;.&#xA;  Given a maximum joint velocity &lt;span class=&quot;math-container&quot;&gt;$V_{max} &amp;gt; 0$&lt;/span&gt; and a maximum bound &lt;span class=&quot;math-container&quot;&gt;$A_{max} &amp;gt; 0$&lt;/span&gt; for the absolute value of the&#xA;  joint acceleration, find the minimum time &lt;span class=&quot;math-container&quot;&gt;$T_{min}$&lt;/span&gt; in this class of trajectories such that the motion is feasible.&lt;/strong&gt; &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;I think that for let understand my doubts, I have to first say how I thought to tackle the problem, even if it is clearly the wrong way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My idea for solving this proble was to find the maximum velocity, which is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$V_{max}=\frac{T}{4}$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and from it derive the time &lt;span class=&quot;math-container&quot;&gt;$T$&lt;/span&gt;, which in my opinion was the minimum motion of time because it is referred to the maximum velocity. So, I thought the minumum time velocity to be:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$T = \frac{4V_{max}}{A}$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;but this is obviusly wrong. Infact, when I went looking for the &lt;strong&gt;solution&lt;/strong&gt; that my professor proposed for this exercise, the correct way was the following:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/a3xva.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/a3xva.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/iDoHM.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/iDoHM.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where there are also numercal values for the quantities, which I did not included in the question.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After seeing the solution, most concept where clarified. For example, I have understood that I should have calculated the minimum motion time for completing the otion(so for completing the total displacement) on the displacement from zero to &lt;span class=&quot;math-container&quot;&gt;$T$&lt;/span&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But there is still something I don't understand. In the solution, my professor derived a velocity &lt;span class=&quot;math-container&quot;&gt;$V$&lt;/span&gt; and a displacement &lt;span class=&quot;math-container&quot;&gt;$\Delta \theta _s$&lt;/span&gt; where this displacement is the displacement from zero to &lt;span class=&quot;math-container&quot;&gt;$\frac{T}{4}$&lt;/span&gt; and it is equal to the displacement from &lt;span class=&quot;math-container&quot;&gt;$\frac{3T}{4}$&lt;/span&gt; to &lt;span class=&quot;math-container&quot;&gt;$T$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, with this quantities he has computed the total displacement as :&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\Delta \theta = 2\Delta \theta _s+V\frac{T}{2}$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and from it he computed the acceleration and the velocity. Then he substitute in these the limit velocity and acceleration and then computed the minimum time trajectory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But &lt;strong&gt;why he needed to compute both acceleration and velocity form the total displacement?&lt;/strong&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And &lt;strong&gt;what is &lt;span class=&quot;math-container&quot;&gt;$V=\frac{T}{4}$&lt;/span&gt; that he computed in the beginning? Shoudn't this be the maximum velocity?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have a lot of doubts on this, sice I do not understand also &lt;strong&gt;what are  &lt;span class=&quot;math-container&quot;&gt;$A=\frac{16\Delta \theta }{3T^{2}}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$V=\frac{4\Delta \theta }{3T}$&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And also, &lt;strong&gt;why there is the need to compute the time both from the acceleration and form the velocity?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can somebody please help me understand? &lt;/p&gt;&#xA;" OwnerUserId="21797" LastEditorUserId="21797" LastEditDate="2020-05-18T11:03:22.600" LastActivityDate="2020-05-18T15:28:52.217" Title="How do I find the minimum time for computing a trajecotry for a robotic arm?" Tags="&lt;robotic-arm&gt;&lt;manipulator&gt;&lt;trajectory&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20683" PostTypeId="2" ParentId="20682" CreationDate="2020-05-18T15:28:52.217" Score="3" Body="&lt;p&gt;Your problem statement is:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;using a bang-coast-bang acceleration profile with symmetric acceleration and deceleration phases, each of duration &lt;span class=&quot;math-container&quot;&gt;$T_s=\frac{T}{4}$&lt;/span&gt;. &lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;So, right off, you know the &lt;strong&gt;time spent&lt;/strong&gt; in acceleration is &lt;span class=&quot;math-container&quot;&gt;$T/4$&lt;/span&gt;. The peak velocity is &lt;em&gt;not&lt;/em&gt; &lt;span class=&quot;math-container&quot;&gt;$T/4$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'll agree that your professor's notation is hard to read (for me at least), but it looks like they're using &lt;em&gt;functions&lt;/em&gt; for the notation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &quot;bang-coast-bang&quot; is also called a trapezoidal speed profile and it's super common with my industry's speed-regulated motors. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, if your speed &lt;span class=&quot;math-container&quot;&gt;$\dot{\theta}$&lt;/span&gt; is a &lt;em&gt;function of time&lt;/em&gt;, and you ramp up to full speed &lt;span class=&quot;math-container&quot;&gt;$V$&lt;/span&gt; at time &lt;span class=&quot;math-container&quot;&gt;$t=T/4$&lt;/span&gt;, then you can express that data point by showing your speed, as a function of time &lt;span class=&quot;math-container&quot;&gt;$\dot{\theta}\left(t\right)$&lt;/span&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{\theta}\left(\frac{T}{4}\right) = V \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This might be more useful if you replace &lt;span class=&quot;math-container&quot;&gt;$V$&lt;/span&gt; with &lt;span class=&quot;math-container&quot;&gt;$\dot{\theta}_{max}$&lt;/span&gt;:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{\theta}\left(\frac{T}{4}\right) = \dot{\theta}_{max} \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and again, it's just saying that your angular speed &lt;span class=&quot;math-container&quot;&gt;$\dot{\theta}$&lt;/span&gt; reaches your maximum speed at &lt;span class=&quot;math-container&quot;&gt;$t = \frac{T}{4}$&lt;/span&gt;. Remember that &quot;big T&quot;, &lt;span class=&quot;math-container&quot;&gt;$T$&lt;/span&gt;, is the &lt;em&gt;total time elapsed for the move&lt;/em&gt;, or the &lt;em&gt;period&lt;/em&gt; for this operation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, the other way you can express a speed, generically speaking, is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;v = \int\left(a\right)dt \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;which, for a constant acceleration, is:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;v = at \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Speed is acceleration times time. If you are using a constant acceleration, then you could &lt;em&gt;also&lt;/em&gt; say that &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{\theta}\left(t=\frac{T}{4}\right) = A\frac{T}{4} \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So now put those two statements above together and see that:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\boxed{\dot{\theta}\left(\frac{T}{4}\right) = V = A\frac{T}{4}} \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is a slight re-arranging of your professor's statement &lt;span class=&quot;math-container&quot;&gt;$&#xA;V = \dot{\theta}\left(\frac{T}{4}\right) = A\frac{T}{4} \\&#xA;$&lt;/span&gt;, but I find the professor's form more confusing because then it looks like &lt;span class=&quot;math-container&quot;&gt;$V$&lt;/span&gt; is a function of &lt;span class=&quot;math-container&quot;&gt;$\dot{\theta}(t)$&lt;/span&gt; and not the other way around. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The next line goes on to continue the &quot;classic&quot; constant-acceleration position formula:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;x(t) = x_0 + v_0 t + \frac{1}{2}at^2 \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;or, in your angular case:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\theta(t) = \theta_0 + \dot{\theta}_0 t + \frac{1}{2} A t^2 \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And here you can move your &lt;span class=&quot;math-container&quot;&gt;$\theta_0$&lt;/span&gt; and assume  &lt;span class=&quot;math-container&quot;&gt;$\dot{\theta}_0 = 0$&lt;/span&gt; and so you wind up with:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\theta(t) - \theta_0 = \frac{1}{2}A t^2 \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and, since &lt;span class=&quot;math-container&quot;&gt;$\theta(t) - \theta_0 = \Delta \theta(t)$&lt;/span&gt;, you can re-write &lt;em&gt;that&lt;/em&gt; as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\Delta \theta(t) = \frac{1}{2}A t^2 \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now again you're trying to find out how much the angle shifted at the end of the starting acceleration period &lt;span class=&quot;math-container&quot;&gt;$(\Delta \theta_s)$&lt;/span&gt;, and the acceleration period ends at &lt;span class=&quot;math-container&quot;&gt;$t = \frac{T}{4}$&lt;/span&gt;, so:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\boxed{&#xA;\Delta \theta_s = \Delta\theta\left(t = \frac{T}{4}\right) = \frac{1}{2}A\left(\frac{T}{4}\right)^2} \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And now, finally, your speed profile states you accelerate for &lt;span class=&quot;math-container&quot;&gt;$t = \frac{T}{4}$&lt;/span&gt;, you move at constant speed &lt;span class=&quot;math-container&quot;&gt;$V$&lt;/span&gt; for &lt;span class=&quot;math-container&quot;&gt;$t = \frac{T}{2}$&lt;/span&gt;, and you decelerate for &lt;span class=&quot;math-container&quot;&gt;$t = \frac{T}{4}$&lt;/span&gt;. Since your acceleration and deceleration rates are the same, the total angle traversed during that transient is the same and so:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\Delta \theta\left(t = T\right) = \Delta \theta_s + V\frac{T}{2} + \Delta \theta_s \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or, as your professor stated it,&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\boxed{\Delta \theta\left(t = T\right) = 2\Delta \theta_s + V\frac{T}{2}} \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;So, what is &lt;span class=&quot;math-container&quot;&gt;$V$&lt;/span&gt;? That's from the first boxed equation here:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{\theta}\left(\frac{T}{4}\right) = V = A\frac{T}{4} \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and you can see:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;V = A\frac{T}{4} \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And, what is &lt;span class=&quot;math-container&quot;&gt;$\Delta \theta_s$&lt;/span&gt;? From the second boxed equation:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\Delta \theta_s = \Delta\theta\left(t = \frac{T}{4}\right) = \frac{1}{2}A\left(\frac{T}{4}\right)^2 \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;so:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\Delta \theta_s = \frac{1}{2}A\left(\frac{T}{4}\right)^2 \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And finally you can plug that all into the third boxed equation:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\Delta \theta\left(t = T\right) = 2\Delta \theta_s + V\frac{T}{2} \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And get:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\Delta \theta\left(t = T\right) = 2\left(\frac{1}{2}A\left(\frac{T}{4}\right)^2\right) + \left(A\frac{T}{4}\right)\frac{T}{2} \\&#xA;\Delta \theta\left(T\right) = \left(A\left(\frac{T}{4}\right)^2\right) + \left(A\frac{T}{4}\right)\frac{T}{2} \\&#xA;\Delta \theta\left(T\right) = A\left(\frac{T}{4}\right)\left(\frac{T}{4}\right) + A\left(\frac{T}{4}\right)\left(\frac{T}{2}\right) \\&#xA;\Delta \theta\left(T\right) = A\left(\frac{T^2}{16}\right) + A\left(\frac{T^2}{8}\right) \\&#xA;\Delta \theta\left(T\right) = A\left(\frac{T^2}{16}\right) + A\left(\frac{2T^2}{16}\right) \\&#xA;\boxed{\Delta \theta\left(T\right) = A\left(\frac{3T^2}{16}\right)}\\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And, realizing that the total angle change &lt;span class=&quot;math-container&quot;&gt;$\Delta\theta$&lt;/span&gt; &lt;strong&gt;is defined to be&lt;/strong&gt; &lt;span class=&quot;math-container&quot;&gt;$\Delta\theta(T)$&lt;/span&gt;, you can solve the boxed equation on the line above as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\Delta \theta = A\left(\frac{3T^2}{16}\right)\\&#xA;\Delta \theta\frac{16}{3T^2} = A \\&#xA;\boxed{A = \frac{16\Delta\theta}{3T^2}} \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can solve for &lt;span class=&quot;math-container&quot;&gt;$V$&lt;/span&gt; the same way with your expression &lt;span class=&quot;math-container&quot;&gt;$V = A\frac{T}{4}$&lt;/span&gt;, solving for &lt;span class=&quot;math-container&quot;&gt;$A = V\frac{4}{T}$&lt;/span&gt;, and then substituting into the above boxed formula:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;A = V\frac{4}{T} = \frac{16\Delta\theta}{3T^2} \\&#xA;\boxed{V = \frac{4\Delta\theta}{3T}} \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope this helps!&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-05-18T15:28:52.217" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20684" PostTypeId="2" ParentId="20679" CreationDate="2020-05-18T17:09:23.893" Score="1" Body="&lt;p&gt;In reading through &lt;a href=&quot;http://johnny-five.io/examples/&quot; rel=&quot;nofollow noreferrer&quot;&gt;the Johnny Five examples&lt;/a&gt;, it seems like the &lt;a href=&quot;http://johnny-five.io/examples/motor/&quot; rel=&quot;nofollow noreferrer&quot;&gt;basic Motor command&lt;/a&gt; is supposed to be used if you're driving a motor directly. You're not, though - you're using an H-Bridge configuration. &lt;a href=&quot;http://johnny-five.io/examples/motor-hbridge/&quot; rel=&quot;nofollow noreferrer&quot;&gt;There is an example for that as well&lt;/a&gt; that gives the following for the motor command:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;const motor = new Motor({&#xA;    pins: {&#xA;      pwm: 3,&#xA;      dir: 12&#xA;    },&#xA;    invertPWM: true&#xA;    });&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It's not immediately clear to me if you need the &lt;code&gt;invertPWM: true&lt;/code&gt; line or not, but try it and if it doesn't work then remove it. It just flips between a default of &quot;low&quot; or &quot;high,&quot; so having it one way will be stopped at 0 and running at 255 and having it wrong will make it run at 0 and stop at 255. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Anyways, looks like once you've got the motor configured, run it with &lt;code&gt;motor.forward()&lt;/code&gt; or &lt;code&gt;motor.reverse()&lt;/code&gt; and put your desired speed (0-255) in the parenthesis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You need to make sure your GPIO pins are able to do PWM, though. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-05-18T17:09:23.893" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="20685" PostTypeId="1" CreationDate="2020-05-18T18:49:47.307" Score="1" ViewCount="24" Body="&lt;p&gt;I am &lt;strong&gt;Bioengineering&lt;/strong&gt; student at one Iranian middle-rank university and have a small business in building some easy medical devices (&lt;strong&gt;PCB&lt;/strong&gt; and &lt;strong&gt;CAD&lt;/strong&gt; designing with &lt;strong&gt;Programming&lt;/strong&gt; and some &lt;strong&gt;market&lt;/strong&gt; experiments). So, one of my interests is finding teams of student during this study for my business, so interested in one of the university teams which just now in our university started to create and grow as one &lt;strong&gt;robotic team&lt;/strong&gt; with 25 members in telegram group until now.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As a rule, One of its goals is to participate in &lt;strong&gt;robotic champions&lt;/strong&gt;, so I like to know about your &lt;strong&gt;suggestion&lt;/strong&gt; on what are the best fields of work with some &lt;strong&gt;fundamental&lt;/strong&gt; knowledge with encouraging new students to work on it and have fun with better grow learning during this teamwork? (Also, maybe it would be good to consider the quarantine situation because of Covid-19)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I googled the &lt;a href=&quot;https://www.google.com/search?q=Robotics+competitions+types+in+world&amp;amp;oq=Robotics+competitions+types+in+world&amp;amp;aqs=chrome..69i57j33l5.6942j0j4&amp;amp;sourceid=chrome&amp;amp;ie=UTF-8&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;strong&gt;Robotics competitions types in world&lt;/strong&gt;&lt;/a&gt;, and found some results like &lt;a href=&quot;https://en.wikipedia.org/wiki/Category:Robotics_competitions&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; that could be useful to choose from them:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/hAHoD.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hAHoD.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="21645" LastEditorUserId="19515" LastEditDate="2020-05-19T06:07:27.473" LastActivityDate="2020-05-19T06:07:27.473" Title="Proper robotic competitions for one university team (first step)" Tags="&lt;design&gt;" AnswerCount="0" CommentCount="2" ClosedDate="2020-05-21T00:31:33.153" ContentLicense="CC BY-SA 4.0" />
  <row Id="20686" PostTypeId="1" CreationDate="2020-05-18T18:51:59.717" Score="0" ViewCount="38" Body="&lt;p&gt;My goal is to model an accelerometer and a gyroscope based on real hardware. I understand deterministic errors like bias and scaling but the different types of non-deterministic errors are difficult.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After a bit of research, I found a tutorial provided in the &lt;a href=&quot;https://de.mathworks.com/help/fusion/examples/inertial-sensor-noise-analysis-using-allan-variance.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;matlab documentation&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$\sigma^2(\tau) = \frac{1}{2\tau^2(n-2m)}\sum_{k=1}^{n-2m}(\theta_{k+2m} - 2\theta_{k+m} + \theta_{k})^2$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$\sigma(t) = \sqrt{\sigma^2(t)}$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Since I have no access to matlab, I implemented the function using python:&lt;/p&gt;&#xA;&#xA;&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;def calculate_avar(theta, t0, max_num_m):&#xA;    n = theta.size # number of samples&#xA;    max_m = 2**int(np.log2(n/2)) # maximum cluster size&#xA;    m = np.logspace(np.log10(1), np.log10(max_m), max_num_m) # cluster sizes&#xA;    m = np.ceil(m).astype(int) # m must be an integer.&#xA;    m = np.unique(m) # Remove duplicates.&#xA;&#xA;    tau = m*t0&#xA;    result = np.empty_like(m)&#xA;    for i in range(m.size):&#xA;        result[i] = np.sum((theta[2*m[i]:n] - 2*theta[m[i]:n-m[i]] + theta[:n-2*m[i]])**2)&#xA;    result = result / (2*tau**2 * (n - 2*m))&#xA;&#xA;    return tau, result&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Using this function I calculated:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Noise density/Angle Random Walk/Velocity random walk (slope = &lt;span class=&quot;math-container&quot;&gt;$-\frac{1}{2}$&lt;/span&gt;)&lt;/li&gt;&#xA;&lt;li&gt;Bias (in)stability (slope = 0)&lt;/li&gt;&#xA;&lt;li&gt;(Rate) Random walk (slope = &lt;span class=&quot;math-container&quot;&gt;$+\frac{1}{2}$&lt;/span&gt;)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;# find y intersection given a particular slope&#xA;def get_y_intersect(slope, tau, adev):&#xA;    logtau = np.log10(tau)&#xA;    logadev = np.log10(adev)&#xA;    dlogadev = np.diff(logadev) / np.diff(logtau)&#xA;    i = np.argmin(np.abs(dlogadev - slope))&#xA;&#xA;    return logadev[i] - slope*logtau[i], i&#xA;&#xA;# noise density N&#xA;slope = -0.5&#xA;b, _ = get_y_intersect(slope, tau, adev)&#xA;logN = slope*np.log10(1) + b&#xA;N = 10**logN&#xA;&#xA;# rate random walk R&#xA;slope = 0.5&#xA;b, _ = get_y_intersect(slope, tau, adev)&#xA;logK = slope*np.log10(3) + b&#xA;K = 10**logK&#xA;&#xA;# bias (in)stability B&#xA;slope = 0&#xA;b, i = get_y_intersect(slope, tau, adev)&#xA;scfB = np.sqrt(2*np.log(2)/np.pi)&#xA;logB = b - np.log10(scfB)&#xA;B = 10**logB&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The problem is that I don't have access to Matlab and don't understand how to simulate the resulting parameters &lt;strong&gt;N&lt;/strong&gt;, &lt;strong&gt;K&lt;/strong&gt; and &lt;strong&gt;B&lt;/strong&gt;. I've seen various names for these parameters (pink noise, white noise Brownian noise, second-order random walk, etc...) which is even more confusing to me. Everything I've found so far was either too shallow or requires in-depth knowledge about signal processing.&lt;/p&gt;&#xA;&#xA;&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;fs = 100 # sample rate&#xA;max_num_m = 1000 # number of clusters&#xA;n = 12*60*60*fs # number of samples (12hours of 100Hz samples)&#xA;t0 = 1/fs # sample time&#xA;theta = np.zeros(n, dtype=np.float64) # ideal samples&#xA;&#xA;##### I can't figure out this part #####&#xA;theta += np.random.normal(0, N, n) # noise density !?&#xA;theta += np.random.normal(0, B, n).cumsum() # bias (in)stability !?&#xA;# theta += ??? # rate random walk&#xA;########################################&#xA;&#xA;tau, avar = calculate_avar(theta, t0, max_num_m)&#xA;adev = np.sqrt(avar)&#xA;&#xA;## plotting everything&#xA;fig, ax = plt.subplots(1, 1, figsize=(16,9))&#xA;ax.loglog(tau, adev, &quot;-&quot;)&#xA;ax.grid(True)&#xA;ax.set_title(&quot;Allan Deviation&quot;)&#xA;ax.axis(&quot;equal&quot;)&#xA;ax.set_xlabel(&quot;&lt;span class=&quot;math-container&quot;&gt;$\\tau$&lt;/span&gt;&quot;)&#xA;ax.set_ylabel(&quot;&lt;span class=&quot;math-container&quot;&gt;$\\sigma(\\tau)$&lt;/span&gt;&quot;)&#xA;fig.show()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I'm not sure if the last bit of code is correct &lt;em&gt;(probably not)&lt;/em&gt; but I'm kind of stuck here... can someone help?&lt;/p&gt;&#xA;" OwnerUserId="11419" LastEditorUserId="11419" LastEditDate="2020-05-18T21:50:18.960" LastActivityDate="2021-02-12T23:07:25.750" Title="Simulating sensor readings based on an existing Alan Variance Analysis" Tags="&lt;sensors&gt;&lt;simulation&gt;&lt;python&gt;&lt;noise&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20687" PostTypeId="2" ParentId="20686" CreationDate="2020-05-18T21:41:12.770" Score="0" Body="&lt;p&gt;From the same documentation you linked,&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;The three noise parameters N (angle random walk), K (rate random walk), and B (bias instability) are estimated using data logged from a stationary gyroscope.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You shouldn't need to simulate these; they're typically terms provided to you on datasheets or, if you have a physical device, you can &lt;a href=&quot;https://robotics.stackexchange.com/a/17908/9720&quot;&gt;calculate them from the test device&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-05-18T21:41:12.770" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20688" PostTypeId="1" CreationDate="2020-05-19T13:54:36.257" Score="0" ViewCount="52" Body="&lt;p&gt;I have calibrated my cameras using OpenCV. &#xA;I used &lt;code&gt;cv.stereoCalibrate&lt;/code&gt; to get the E, and F matrices. I wanted to do a sanity check to see if the E matrix obtained is the same from what is manually computed, but I did not get the same results. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am using &lt;code&gt;E = np.dot(np.dot(K2.T, F), K1)&lt;/code&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;K2 is the Second (Right) Camera Matrix &amp;amp; K1 is the First (Left) Camera Matrix. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The values obtained from &lt;code&gt;cv.stereoCalibrate&lt;/code&gt; are - &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;K1 = array([[934.06230207,   0.        , 959.99754346],&#xA;           [  0.        , 933.44096222, 539.98442119],&#xA;           [  0.        ,   0.        ,   1.        ]])&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;K2 = array([[935.93262747,   0.        , 960.00167839],&#xA;            [  0.        , 936.1379955 , 539.98789096],&#xA;            [  0.        ,   0.        ,   1.        ]])&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;E = array([[-4.27815162e-05, -6.90641692e-02,  3.35371623e-02],&#xA;          [ 5.78660464e-02,  1.37740833e-02,  1.20282641e+01],&#xA;          [-3.54642135e-02, -1.20281991e+01,  1.37524047e-02]])&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;F = array([[-1.45461342e-09, -2.34981243e-06,  2.33536635e-03],&#xA;           [ 1.96707058e-06,  4.68541244e-07,  3.79780838e-01],&#xA;           [-2.18936224e-03, -3.81020843e-01,  1.00000000e+00]])&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;If I compute &lt;code&gt;E = np.dot(np.dot(K2.T, F), K1)&lt;/code&gt;&#xA;I get &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;E = array([[-1.27165124e-03, -2.05288509e+00,  9.96869161e-01],&#xA;          [ 1.72002857e+00,  4.09425185e-01,  3.57531907e+02],&#xA;           [-1.05414944e+00, -3.57529974e+02,  4.08780803e-01]])&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This is not equal to the E I got from OpenCV.&#xA;enter code here&lt;/p&gt;&#xA;" OwnerUserId="24163" LastEditorUserId="24163" LastEditDate="2020-05-19T15:12:52.673" LastActivityDate="2021-02-13T16:03:35.307" Title="Computing Essential Matrix from Fundamental Matrix" Tags="&lt;computer-vision&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20689" PostTypeId="2" ParentId="20688" CreationDate="2020-05-19T15:10:30.110" Score="0" Body="&lt;p&gt;How are you calling the function? The &lt;a href=&quot;https://docs.opencv.org/2.4/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html#double%20stereoCalibrate(InputArrayOfArrays%20objectPoints,%20InputArrayOfArrays%20imagePoints1,%20InputArrayOfArrays%20imagePoints2,%20InputOutputArray%20cameraMatrix1,%20InputOutputArray%20distCoeffs1,%20InputOutputArray%20cameraMatrix2,%20InputOutputArray%20distCoeffs2,%20Size%20imageSize,%20OutputArray%20R,%20OutputArray%20T,%20OutputArray%20E,%20OutputArray%20F,%20TermCriteria%20criteria,%20int%20flags)&quot; rel=&quot;nofollow noreferrer&quot;&gt;documentation says&lt;/a&gt;:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;And the function can also compute the fundamental matrix F:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;F = cameraMatrix2^{-T} E cameraMatrix1^{-1}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;And checking this doesn't give a correct/matching number either, so I'm wondering if maybe you've left an argument out and it's causing and off-by-one error that's failing to send the right parameter to the correct output. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-05-19T15:10:30.110" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20690" PostTypeId="1" CreationDate="2020-05-20T10:04:03.093" Score="1" ViewCount="37" Body="&lt;p&gt;According to the traditional kinematic theory for mobile robots [1][2] a mobile robot with a steerable wheel and two passive casters presents a &lt;span class=&quot;math-container&quot;&gt;$\delta_m=2,\delta_s=1,\delta_M=3$&lt;/span&gt;. This is easy to explain, looking at the kinematic constraints imposed by the standard wheel. What I cannot understand is the interpretation of these numbers, normally a degree of maneuverability &lt;span class=&quot;math-container&quot;&gt;$\delta_M=3$&lt;/span&gt; would imply that the robot is able to place the ICR at any point of the plane. What only would be possible if the caster wheels are also active (motorized). In the case that the caster wheels are passive, the robot would be able to move in any direction but cannot change its orientation what actually would imply for me having a &lt;span class=&quot;math-container&quot;&gt;$\delta_M=2$&lt;/span&gt; as the synchrodrive do.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Am I interpreting something wrong? There should be something else to consider, in terms of actuation etc &#xA;to calculate or interpret these coefficients?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;[1] Campion G, Bastin G, D'Andrea-Novel B (Hrsg) (1993) Structural properties and classification of kinematic and dynamic models of wheeled mobile robots&#xA;[2] Siegwart R, Nourbakhsh IR (2004) Introduction to autonomous mobile robots&lt;/p&gt;&#xA;" OwnerUserId="26432" LastActivityDate="2020-05-20T10:04:03.093" Title="Degree of maneuverability mobile robot" Tags="&lt;mobile-robot&gt;&lt;kinematics&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20691" PostTypeId="2" ParentId="18597" CreationDate="2020-05-20T13:16:16.510" Score="1" Body="&lt;p&gt;A. It seems your robot is not fixed to gazebo world so you have to add a joint to fix in gazebo environment.&#xA;Add below content into your urdf file and child link should be your base link name.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/5f40M.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/5f40M.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;B. Fine tune damping and friction values of dynamics tag for all joints in urdf file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;C. if more of your robot start vibrating than fine tune PID gain values from your either controller.yaml file or joint_parameter.yaml file.&lt;/p&gt;&#xA;" OwnerUserId="24986" LastActivityDate="2020-05-20T13:16:16.510" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20693" PostTypeId="1" AcceptedAnswerId="20696" CreationDate="2020-05-20T17:17:57.800" Score="0" ViewCount="36" Body="&lt;p&gt;I am working on a project to implement a collision avoidance algorithm on a real UAV. I'm interested in understanding the process to set up a negative reward to account for scenarios wherein there is a UAV crash. This can be done very easily during simulation(if the UAV touches any object, the episode stops giving a negative reward). &#xA;Any ideas will be highly appreciated.&lt;/p&gt;&#xA;" OwnerUserId="24234" LastActivityDate="2020-05-26T06:18:32.593" Title="Setting up rewards to account for UAV crashes (Reinforcement Learning)" Tags="&lt;quadcopter&gt;&lt;machine-learning&gt;&lt;reinforcement-learning&gt;&lt;drone&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20694" PostTypeId="1" AcceptedAnswerId="20695" CreationDate="2020-05-20T17:19:06.813" Score="0" ViewCount="57" Body="&lt;p&gt;I'm quite a fan of fortran and I was wondering if there were any libraries to control the GPIO pins in a raspberry pi with it. I find python to be quite slow so I think it is the best option for making it fast.&lt;/p&gt;&#xA;" OwnerUserId="26435" LastEditorUserId="4310" LastEditDate="2020-05-20T19:47:17.780" LastActivityDate="2020-05-20T19:47:17.780" Title="Raspberry pi libraries for fortran" Tags="&lt;raspberry-pi&gt;&lt;robotics-library&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20695" PostTypeId="2" ParentId="20694" CreationDate="2020-05-20T19:04:12.993" Score="1" Body="&lt;p&gt;Turns out there is in fact a very simple library called &lt;a href=&quot;https://github.com/playmoo/fortran-gpio&quot; rel=&quot;nofollow noreferrer&quot;&gt;fortran-gpio&lt;/a&gt; for exactly that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Another option is to access GPIO pins through device files, see &lt;a href=&quot;https://smist08.wordpress.com/2017/12/02/fortran-lives/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; for details.&lt;/p&gt;&#xA;" OwnerUserId="4310" LastActivityDate="2020-05-20T19:04:12.993" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20696" PostTypeId="2" ParentId="20693" CreationDate="2020-05-20T19:59:26.220" Score="0" Body="&lt;p&gt;From what I understand this is quite easy and you don't have to use reinforcement   learning. You can also use standard ANNs.   &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Algorithm:  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For as long as you want:&lt;br&gt;&#xA;  If Touch (sensor. Maybe a button???) == 1&lt;br&gt;&#xA;  Update network (the network should output the probability of crashing in the       next step. You can also use markov chains for multiple steps (just an idea))  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I hope this answers your question.&lt;/p&gt;&#xA;" OwnerUserId="26435" LastEditorUserId="26435" LastEditDate="2020-05-26T06:18:32.593" LastActivityDate="2020-05-26T06:18:32.593" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20697" PostTypeId="1" AcceptedAnswerId="20704" CreationDate="2020-05-21T08:51:52.230" Score="0" ViewCount="91" Body="&lt;p&gt;Dear Robotics Specialists, I want to contact you for advice.&#xA;I am developing a control system for complex parallel mechanisms like what I presented in this thread.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/20282/formulas-for-calculating-the-passive-joints-angular-velocities&quot;&gt;Formulas for calculating the passive joints angular velocities&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I faced the problem of estimating the pitch, roll and yaw angles of a platform. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the one hand, this problem can be solved by using IMU. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;On the other hand, the use of mathematical tools, for example, the synthesis of an observer (a mathematical model of the mechanism in the state-space is known), is a rather attractive way. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;But here another question arises: it is necessary to evaluate either the rotation angular velocities of the intermediate joints (&lt;span class=&quot;math-container&quot;&gt;$\dot{\psi_i}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\dot{\xi_i}$&lt;/span&gt;), and then use them to solve the direct kinematics problem (which determines the multiplicity of solutions, rather than uniqueness), or, to evaluate these angular velocities and pitch, roll and yaw angles using an observer, taking them in the form of a single state vector. I’m not sure if this is possible. only motor shaft position and velocity is available for control and measurement (&lt;span class=&quot;math-container&quot;&gt;$[\dot{\theta_1},\dot{\theta_2},\dot{\theta_3}]$&lt;/span&gt;).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;IMU - automatically solves the problem and ensures the uniqueness of solutions, but it is expensive and causes the accumulation of errors, which is their disadvantage. &lt;strong&gt;Are there any alternatives to the IMU that have been spared this drawback?&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;An observer is a computational tool implemented in software. It allows you to evaluate some parameters. &lt;strong&gt;How to use it to evaluate such a large vector when only 1 measured and controlled joint is available and what type of observer is best used for this??&lt;/strong&gt; (&lt;span class=&quot;math-container&quot;&gt;$[\dot{\theta_1},\dot{\theta_2},\dot{\theta_3}]$&lt;/span&gt;).&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="24481" LastEditorUserId="24481" LastEditDate="2020-05-21T15:29:09.860" LastActivityDate="2020-05-22T13:06:50.650" Title="Estimation of pitch, roll, yaw angles: synthesis of an observer or IMU?" Tags="&lt;inverse-kinematics&gt;&lt;imu&gt;&lt;irobot-create&gt;&lt;forward-kinematics&gt;&lt;robot-model&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20698" PostTypeId="1" CreationDate="2020-05-21T17:16:13.387" Score="1" ViewCount="139" Body="&lt;p&gt;I've a robot created with Peter Corke toolbox and I must plot it inside an app (must be in App Designer - Matlab). The problem is that everytime I try to plot it, it makes an independent figure outside the app. I've got the UIAxes created but I don't know if I can make it 'Parent' with a SerialLink.plot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it even possible to plot it with SerialLink.plot or there's another way to do it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit.: The plot must show an animation of different states using inverse kinematics. I can't do the animation either but I think after the plot issue, it should be easier.&lt;/p&gt;&#xA;" OwnerUserId="26442" LastEditorUserId="110" LastEditDate="2020-05-21T19:32:43.083" LastActivityDate="2021-02-17T21:03:50.363" Title="Plotting a Robot in App Designer" Tags="&lt;inverse-kinematics&gt;&lt;matlab&gt;&lt;robotics-toolbox&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20699" PostTypeId="1" AcceptedAnswerId="20700" CreationDate="2020-05-21T18:57:40.877" Score="0" ViewCount="30" Body="&lt;p&gt;I am a student studying robotics, and I am focusing on trajectory planning for a robotic arm. In particular, I am studying &lt;strong&gt;polynomial interpolation&lt;/strong&gt; for defining the trajectories, and I am having some doubts.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have understand that ny using a polynomial interpolation for defining the timing law of a trajectory I have a smooth interpolation. Also, I have seen in many examples, that usually, if I don't need to include acceleration in my profile, I can choose a cubic polynomial and if I have to include also acceleration, I have to use a quintic polynomial (this concept is not really clear to me, I am just using it automatically).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As far as I have understood this concept is relate to the number of parameters I have to use, but is this a fixed rue?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I mean is, &lt;strong&gt;how do I decide what is the order of the polynomial I need to use?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In many example I see it is said that it is sufficient a second order polynomial, or sometimes a third order polynomial, but I have not clear why.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can somebody please help me?&lt;/p&gt;&#xA;" OwnerUserId="21797" LastActivityDate="2020-05-21T19:58:13.013" Title="how do I decide what is the order of the polynomial I need to use in a polynomial iterpolation for a trajectory?" Tags="&lt;robotic-arm&gt;&lt;trajectory&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20700" PostTypeId="2" ParentId="20699" CreationDate="2020-05-21T19:58:13.013" Score="1" Body="&lt;p&gt;This sounds exactly like cam design.  When designing a cam profile, you typically want the cam follower to be at certain displacements at certain times, and you can usually choose how it gets there.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ZiS1K.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZiS1K.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you point out, there are many curve options.  Curves are chosen to eliminate discontinuities in position, velocity, and acceleration.  And when possible, minimizing acceleration.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When I was a cam designer, this book: &lt;a href=&quot;https://www.destaco.com/assets/docs/en/servicemanuals/CAMCO_Cam-Design_Moon-Book.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Cam Design by Clyde H. Moon&lt;/a&gt; was our bible.  It is very old, but still pretty useful. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;In cam design, a velocity or acceleration discontinuity will make the follower jump off the cam or cause excess wear.  You don't really have that issue with a robot arm, but I still believe that having a smooth acceleration profile is desirable. &lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2020-05-21T19:58:13.013" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20701" PostTypeId="1" AcceptedAnswerId="20705" CreationDate="2020-05-22T01:01:11.793" Score="3" ViewCount="51" Body="&lt;p&gt;I've built a simple robot that can move.  I'm using brushless motors.  I've realized that at slow speeds the motors pull a lot of current.  I didn't understand the power / current / efficiency charts when I started.  I see it in the charts, now, that the efficiency in electric motors is at high RPM and the low speed torque is awesome but comes at a price of high current.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For mobile robots, do people generally just provide high-current batteries for slow speeds, ignore slow speeds, or do they build robots with variable transmissions instead of fixed gearboxes?  When I look around I just see designs with fixed gearboxes but I feel like I'm missing something.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I look beyond hobby type projects I see talk about CVT and the Inception drive but I'm wondering anyone at the home / hobbiest level do anything like that.&lt;/p&gt;&#xA;" OwnerUserId="26444" LastEditorUserId="11712" LastEditDate="2020-05-24T00:25:10.253" LastActivityDate="2020-05-25T00:19:45.230" Title="Do mobile robots use variable transmissions?" Tags="&lt;mobile-robot&gt;&lt;brushless-motor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20703" PostTypeId="2" ParentId="10490" CreationDate="2020-05-22T08:23:18.583" Score="0" Body="&lt;p&gt;This seems to be the only place I'm finding with information regarding this question. The imax b6ac has a power mode function that you can set voltage and amperage up to 20v 5a, those values can also be altered real time without need to reset the function. &#xA;I guess it's also worth noting I have the knock off version as it was maybe $20, but otherwise it's the same thing. &lt;/p&gt;&#xA;" OwnerUserId="26445" LastActivityDate="2020-05-22T08:23:18.583" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20704" PostTypeId="2" ParentId="20697" CreationDate="2020-05-22T13:06:50.650" Score="1" Body="&lt;p&gt;Assuming this is a platform attached to a robot of some kind, you can:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Measure the platform pose directly, as with an inclinometer, IMU, laser, camera, etc.,&lt;/li&gt;&#xA;&lt;li&gt;Measure the platform pose indirectly, by putting rotary encoders on the joints and using kinematics to determine the platform pose for a given set of joint positions, or&lt;/li&gt;&#xA;&lt;li&gt;Estimate the platform pose with observers/filters. &lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;For an IMU, the &lt;a href=&quot;https://x-io.co.uk/open-source-imu-and-ahrs-algorithms/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Madgwick filter&lt;/a&gt; can fix roll and pitch angles. You would need a magnetometer (called &quot;9-axis IMU,&quot; typically) to fix yaw angle as well. &lt;strong&gt;No IMU is capable of fixing position&lt;/strong&gt;. You could filter with a GPS to fix position. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regarding your question about an observer:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;How to use it to evaluate such a large vector when only 1 measured and controlled joint is available and what type of observer is best used for this?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;You need to check for &lt;a href=&quot;https://en.wikipedia.org/wiki/Observability&quot; rel=&quot;nofollow noreferrer&quot;&gt;observability&lt;/a&gt;. You had stated&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;a mathematical model of the mechanism in the state-space is known&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;so you build the observability matrix:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;O = \left[\begin{matrix}&#xA;C \\&#xA;CA \\&#xA;CA^2 \\&#xA;\vdots \\&#xA;CA^{n-1}\end{matrix}\right]&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where &lt;span class=&quot;math-container&quot;&gt;$n$&lt;/span&gt; is the number of states of your system (number of rows/column of &lt;span class=&quot;math-container&quot;&gt;$A$&lt;/span&gt;) and then check that &lt;span class=&quot;math-container&quot;&gt;$\textrm{rank}\left(O\right) = n$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If &lt;span class=&quot;math-container&quot;&gt;$\textrm{rank}\left(O\right) &amp;lt; n$&lt;/span&gt; then the system is not observable and your states can't be estimated with the stated arrangement of feedback channel(s).&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-05-22T13:06:50.650" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="20705" PostTypeId="2" ParentId="20701" CreationDate="2020-05-23T13:09:52.363" Score="2" Body="&lt;p&gt;For a simple answer: no, most mobile robots do not use variable transmissions.  I believe it is far easier to just design a motor and gearbox combination that works well in your narrow range of desired speeds, than deal the extra mechanical complexity and cost of a variable transmission.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The long answer is that it depends on what you consider a mobile robot.  Let's take a quick survey of the range of &quot;mobile robots&quot;.  This can be a huge list, but I will try to span the space from very small to very large.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/gM5iN.png&quot; width=&quot;150&quot;&gt; Plum Geek Ringo Robot. Brushed motors, no transmission at all!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/u3aPz.png&quot; width=&quot;150&quot;&gt; Parallax BOT Bot. Brushed motors, no variable transmission.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/Trmpv.png&quot; width=&quot;150&quot;&gt; iRobot Roomba/Create. Brushed motors, no variable transmission.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/yye9C.png&quot; width=&quot;150&quot;&gt; FLIR Packbot. Brushless motors, no variable transmission.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/8l490.jpg&quot; width=&quot;150&quot;&gt; DARPA LAGR Program Robot. Electric wheelchair motors, no variable transmission. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/NFBFg.jpg&quot; width=&quot;150&quot;&gt; Stanley.  Desiel engine with variable transmission.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/WDT8b.jpg&quot; width=&quot;150&quot;&gt; Tesla Model 3, brushless electric motor with variable transmission.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So it looks like variable transmissions are really only needed when you have gas engines.  Or very high performance electric motors.&lt;/p&gt;&#xA;" OwnerUserId="110" LastEditorUserId="110" LastEditDate="2020-05-25T00:19:45.230" LastActivityDate="2020-05-25T00:19:45.230" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20706" PostTypeId="2" ParentId="20698" CreationDate="2020-05-23T18:45:14.250" Score="0" Body="&lt;p&gt;Plot functions plot to the &lt;code&gt;gca&lt;/code&gt;. &lt;code&gt;gca&lt;/code&gt; is an abraviation for get current axis. It returns the handle to the currently selected axis, which will recieve the next plot.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can take a look at the source code of the plot function you mentioned here:&#xA;&lt;a href=&quot;https://github.com/petercorke/robotics-toolbox-matlab/blob/master/%40SerialLink/plot.m&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/petercorke/robotics-toolbox-matlab/blob/master/%40SerialLink/plot.m&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you follow its logic, it seems that if you create a new axis on the UI and set it as the currently active axis and if this axis does &lt;strong&gt;not&lt;/strong&gt; have a tag which is set to 'RTB.plot' then the plot will be made in the current axis.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to set your preferred axis as the current axis, you can do this by calling:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;axes(handle_to_prefered_axis);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Also, you might want to call &lt;code&gt;hold on&lt;/code&gt; before plotting, as this will allow the next plot to be created in the same figure.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-05-23T18:45:14.250" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20709" PostTypeId="1" CreationDate="2020-05-24T16:20:17.520" Score="0" ViewCount="17" Body="&lt;p&gt;I am currently working on driving a bot based on the location of a white ball and I find that giving it negative angular movement moves it to the left rather than the right. Here's a code snippet for what my instruction. Note that for left direction &lt;code&gt;drive_bot&lt;/code&gt; has &lt;code&gt;0.0&lt;/code&gt; linear direction in the &lt;code&gt;x-axis&lt;/code&gt; but &lt;code&gt;0.5&lt;/code&gt; instead of &lt;code&gt;-0.5&lt;/code&gt; for angular motion. The entire project is &lt;a href=&quot;https://github.com/here2infinity/go_chase_it&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; but I provide my main code here.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;void process_image_callback(const sensor_msgs::Image img)&#xA;{&#xA;  const int white_pixel = 255;&#xA;  const int image_slice_width = img.step / 3;&#xA;&#xA;  int j;&#xA;  bool found = false;&#xA;&#xA;  for (int i = 0; not found and i &amp;lt; img.height; i++)&#xA;  {&#xA;    for (j = 0; j &amp;lt; img.step; j++)&#xA;    {&#xA;      // img.data only has one index&#xA;      if (img.data[i*img.step +  j     ] == white_pixel and&#xA;          img.data[i*img.step + (j + 1)] == white_pixel and&#xA;          img.data[i*img.step + (j + 2)] == white_pixel)&#xA;      {&#xA;          found = true;&#xA;          break;&#xA;      }&#xA;&#xA;    }&#xA;  }&#xA;&#xA;void drive_bot(float linear_x, float angular_z)&#xA;{&#xA;  // Request a service and pass the velocities to it to drive the robot&#xA;&#xA;  // ROS_INFO_STREAM(&quot;Driving bot&quot;);&#xA;  ball_chaser::DriveToTarget srv;&#xA;  srv.request.linear_x = linear_x;&#xA;  srv.request.angular_z = angular_z;&#xA;&#xA;  if (not client.call(srv))&#xA;  {&#xA;    ROS_ERROR(&quot;Failed to call service drive to target&quot;);&#xA;  }&#xA;&#xA;}&#xA;&#xA;  if (found)&#xA;  {&#xA;    // determine which third of image ball is&#xA;    switch (j / image_slice_width) // split into 3&#xA;    {   &#xA;      case 0: // white ball to the left&#xA;        drive_bot(0.0, -0.5);&#xA;        ROS_INFO_STREAM(&quot;LEFT&quot;);&#xA;        break;&#xA;      case 1: // white ball in front&#xA;        drive_bot(0.5, 0.0);&#xA;        ROS_INFO_STREAM(&quot;FORWARD&quot;);&#xA;        break;&#xA;      default: // white ball to the right &#xA;        drive_bot(0.0, 0.5);&#xA;        ROS_INFO_STREAM(&quot;RIGHT&quot;);&#xA;        break;&#xA;    }   &#xA;  }&#xA;  else&#xA;  {&#xA;    // no white pixel seen so stop the bot&#xA;    drive_bot(0.0, 0.0);&#xA;&#xA;  }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I suspect that it may be how the model is put together but I don't see how those values show up in my &lt;code&gt;my_robot.xacro&lt;/code&gt; and &lt;code&gt;my_robot.gazebo&lt;/code&gt; &lt;a href=&quot;https://github.com/here2infinity/go_chase_it/tree/master/catkin_ws/src/my_robot/urdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;linked here&lt;/a&gt;. &lt;/p&gt;&#xA;" OwnerUserId="15157" LastActivityDate="2020-05-24T16:20:17.520" Title="Why do inverse directions give correct movement?" Tags="&lt;ros&gt;&lt;gazebo&gt;" AnswerCount="0" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="20711" PostTypeId="2" ParentId="16710" CreationDate="2020-05-24T19:33:50.290" Score="-1" Body="&lt;p&gt;Check your board micro-stepping settings&lt;/p&gt;&#xA;" OwnerUserId="26461" LastActivityDate="2020-05-24T19:33:50.290" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20712" PostTypeId="1" CreationDate="2020-05-25T09:00:26.360" Score="2" ViewCount="92" Body="&lt;p&gt;I am able to control every desired aspect of my robot, except for vacuum motor which seems to be turned on for some reason every time I send &lt;code&gt;Seek Dock&lt;/code&gt; (code &lt;code&gt;143&lt;/code&gt;) command. Is there a way to turn it off? I was trying to send &lt;code&gt;Motors&lt;/code&gt; (&lt;code&gt;138&lt;/code&gt;) command with argument &lt;code&gt;0&lt;/code&gt; after sending &lt;code&gt;Seek Dock&lt;/code&gt;, but docking also means changing OI mode to &lt;code&gt;Passive&lt;/code&gt; and &lt;code&gt;Motors&lt;/code&gt; are not accepted in passive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I would also like to understand the rationale behind having vacuum motor turned on during docking.&lt;/p&gt;&#xA;" OwnerUserId="26396" LastActivityDate="2020-05-25T09:00:26.360" Title="Roomba iRobot Create 2 Open Interface, is there a way to turn off vacuum motor while the robot is docking?" Tags="&lt;irobot-create&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20715" PostTypeId="1" CreationDate="2020-05-25T17:09:05.133" Score="1" ViewCount="36" Body="&lt;p&gt;I have a robotic system with many sensors that need to have very accurate localization associated with the data they gather.&#xA;We have a geolocalization system that acquire localization at high speed (up to 100Hz) and we want to broadcast a synchronization signal that we can associate with this localization data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We develop the electronics for the whole system and we hesitate between a clock signal or a signal that delivers event such that we can have ids broadcasted that will serve as timestamp.&#xA;Our requirement is to be accurate with a drift of maximum 1ms.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The signal can have to traverse up to 4m of cables between the generator of the synchronization signal and the sensors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If we can we would like to use CAN bus, but we have no experience with it as a synchronization bus.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We would like to ask the community what communication bus is used in state of the art systems to implement a synchronization signal ?&lt;/p&gt;&#xA;" OwnerUserId="26472" LastActivityDate="2020-05-26T07:14:47.823" Title="What communication bus is used in state of the art systems to implement a synchronization signal?" Tags="&lt;sensor-fusion&gt;&lt;can&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20716" PostTypeId="1" AcceptedAnswerId="20719" CreationDate="2020-05-26T02:49:17.897" Score="5" ViewCount="128" Body="&lt;p&gt;In the literature, it is often seen that for a system:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;\begin{align}&#xA;        \Lambda \ddot{e} + D_d \dot{e} + K_d e = F_{ext}&#xA;\end{align}&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A dynamic damping matrix is required for a robot to take into account the structure and changes of &lt;span class=&quot;math-container&quot;&gt;$\Lambda$&lt;/span&gt; during movement. Hence the following method called the &quot;double diagonalization&quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Given a symmetric and positive definite matrix &lt;span class=&quot;math-container&quot;&gt;$\Lambda \in \mathcal{R}^{n\times n}$&lt;/span&gt; and a symmetric matrix &lt;span class=&quot;math-container&quot;&gt;$K_d \in \mathcal{R}^{n\times n}$&lt;/span&gt;, one can find a non singular matrix &lt;span class=&quot;math-container&quot;&gt;$Q \in \mathcal{R}^{n\times n}$&lt;/span&gt; and a diagonal matrix &lt;span class=&quot;math-container&quot;&gt;$B_0 \in \mathcal{R}^{n\times n}$&lt;/span&gt; such that:&#xA;&lt;span class=&quot;math-container&quot;&gt;\begin{align}&#xA;    \Lambda &amp;amp;= Q^\intercal Q\\&#xA;    K_d &amp;amp;= Q^\intercal B_0 Q&#xA;\end{align}&lt;/span&gt;&#xA;Where the diagonal elements of &lt;span class=&quot;math-container&quot;&gt;$B_0$&lt;/span&gt; are the generalized eigenvalues of &lt;span class=&quot;math-container&quot;&gt;$K_d$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The design of the damping matrix becomes:&#xA;&lt;span class=&quot;math-container&quot;&gt;\begin{align}&#xA;    D_d = 2 Q^\intercal diag( \xi \sqrt(\lambda_{K,i}^\Lambda) Q)&#xA;\end{align}&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Such that&#xA;&lt;span class=&quot;math-container&quot;&gt;\begin{align}&#xA;    Q^\intercal Q \ddot{x} + 2 Q^\intercal diag( \xi \sqrt(\lambda_{K,i}^\Lambda) Q) \dot{x} + Q^\intercal B_0 Q x = F_{ext}&#xA;\end{align}&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where &lt;span class=&quot;math-container&quot;&gt;$\xi_i$&lt;/span&gt; is the damping factor in the range of &lt;span class=&quot;math-container&quot;&gt;$[0,1]$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$\lambda_{K,i}^\Lambda$&lt;/span&gt; is the i'th diagonal element of &lt;span class=&quot;math-container&quot;&gt;$B_0$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-&#xA;Yeah, I 'm pretty dumb (I'm guessing the solution is simple but I cannot see it). I cannot figure out how to solve for the matrices &lt;span class=&quot;math-container&quot;&gt;$Q$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$B_0$&lt;/span&gt;, such that (in particular) &lt;span class=&quot;math-container&quot;&gt;$\Lambda = Q^\intercal Q$&lt;/span&gt;. What am I missing? Can elaborate for me? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;How do I solve this?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sources: (this article should be free and provide some context.)&#xA;&lt;a href=&quot;http://www.informatik.uni-bremen.de/agebv2/downloads/published/albuschaeffericra03.pdf&quot; rel=&quot;noreferrer&quot;&gt;(Albu-Schaffer, Alin, et al., 2003)&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="24309" LastActivityDate="2020-05-26T17:49:29.547" Title="Cartesian Impedance control Damping Design (Double Diagonalization)" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;dynamics&gt;&lt;manipulator&gt;&lt;theory&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20717" PostTypeId="2" ParentId="20715" CreationDate="2020-05-26T07:14:47.823" Score="1" Body="&lt;p&gt;There are many possible routes you can take.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You mentioned CAN. CANOpen is built on CAN and is used in many automation and robotics related devices. CANOpen specifies a SYNC mechanism exactly for the purpose you mention. More about this &lt;a href=&quot;https://www.can-cia.org/can-knowledge/canopen-fd/sync-protocol/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. As for cycle times, the bandwidth and exact message size of CAN packets is knows, so cycle times are easy to calculate. CANOpen is widely used in the automation industry for millisecond cycle time applications.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;PTP is a time synchronisation mechanism for networked devices. It can be implemented on different communication protocols. Most commonly it is used in ethernet-based networks with UDP implementation. More about this &lt;a href=&quot;https://en.wikipedia.org/wiki/Precision_Time_Protocol&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. This mechanism does not trigger a measurement but makes sure that internal clocks on the network are synched (and then measurements can be self-triggerd cyclically).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Depending on the application you are working on, low-latency industrial ethernet-based bu systems may be an option, as an alternative to CAN (or to be more precise, as an alternative to CANOpen), you could look into sercos, Ethernet-IP, Profinet, DeviceNet, EtherCAT. Some (most?) of this are proprietary and will require that you select equipment already compatible with the communication bus. These are designed to work as you intend, low jitter, low latency, high speed.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-05-26T07:14:47.823" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20718" PostTypeId="2" ParentId="14213" CreationDate="2020-05-26T11:28:31.507" Score="1" Body="&lt;p&gt;The projectors you are looking for are available with &lt;a href=&quot;https://ams.com/3d-imaging&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://ams.com/3d-imaging&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="26479" LastActivityDate="2020-05-26T11:28:31.507" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20719" PostTypeId="2" ParentId="20716" CreationDate="2020-05-26T17:49:29.547" Score="5" Body="&lt;p&gt;A hint towards what the answer is given in the paper. Namely, one can use the &lt;a href=&quot;https://en.wikipedia.org/wiki/Eigendecomposition_of_a_matrix#Generalized_eigenvalue_problem&quot; rel=&quot;noreferrer&quot;&gt;generalized eigenvalue decomposition&lt;/a&gt;, which in this case can be formulated as finding eigenvalues &lt;span class=&quot;math-container&quot;&gt;$\lambda \in \mathbb{R}$&lt;/span&gt; and eigenvectors &lt;span class=&quot;math-container&quot;&gt;$v \in \mathbb{R}^n$&lt;/span&gt; such that&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;(\lambda\,\Lambda - K_d)\,v = 0. \tag{1}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Consider two distinct solutions &lt;span class=&quot;math-container&quot;&gt;$(\lambda_i,v_i)$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$(\lambda_j,v_j)$&lt;/span&gt; of &lt;span class=&quot;math-container&quot;&gt;$(1)$&lt;/span&gt;, which can also be written as&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;\begin{align}&#xA;\lambda_i\,\Lambda\,v_i &amp;amp;= K_d\,v_i, \tag{2a} \\&#xA;\lambda_j\,\Lambda\,v_j &amp;amp;= K_d\,v_j. \tag{2b}&#xA;\end{align}&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By pre-multiplying &lt;span class=&quot;math-container&quot;&gt;$(2a)$&lt;/span&gt; by &lt;span class=&quot;math-container&quot;&gt;$v_j^\top$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$(2b)$&lt;/span&gt; by &lt;span class=&quot;math-container&quot;&gt;$v_i^\top$&lt;/span&gt; one gets&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;\begin{align}&#xA;\lambda_i\,v_j^\top \Lambda\,v_i &amp;amp;= v_j^\top K_d\,v_i, \tag{3a} \\&#xA;\lambda_j\,v_i^\top \Lambda\,v_j &amp;amp;= v_i^\top K_d\,v_j. \tag{3b}&#xA;\end{align}&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When using that &lt;span class=&quot;math-container&quot;&gt;$M = M^\top$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$K_d = K_d^\top$&lt;/span&gt; it follows that when subtracting the transpose of &lt;span class=&quot;math-container&quot;&gt;$(3b)$&lt;/span&gt; from &lt;span class=&quot;math-container&quot;&gt;$(3a)$&lt;/span&gt; one gets&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;(\lambda_i - \lambda_j)\,v_j^\top \Lambda\,v_i = 0. \tag{4}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thus when &lt;span class=&quot;math-container&quot;&gt;$\lambda_i \neq \lambda_j$&lt;/span&gt; it follows that &lt;span class=&quot;math-container&quot;&gt;$v_j^\top \Lambda\,v_i = 0$&lt;/span&gt;, from which together with &lt;span class=&quot;math-container&quot;&gt;$(3a)$&lt;/span&gt; it also follows that &lt;span class=&quot;math-container&quot;&gt;$v_j^\top K_d\,v_i = 0$&lt;/span&gt;. When &lt;span class=&quot;math-container&quot;&gt;$i \neq j$&lt;/span&gt; but &lt;span class=&quot;math-container&quot;&gt;$\lambda_i = \lambda_j$&lt;/span&gt; this orthogonality property between vectors &lt;span class=&quot;math-container&quot;&gt;$v_i$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$v_j$&lt;/span&gt;, and matrices &lt;span class=&quot;math-container&quot;&gt;$\Lambda$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$K_d$&lt;/span&gt; does not immediately follow. It can be noted that &lt;span class=&quot;math-container&quot;&gt;$\lambda_i = \lambda_j = \lambda$&lt;/span&gt; means that the kernel of &lt;span class=&quot;math-container&quot;&gt;$\lambda\,\Lambda - K_d$&lt;/span&gt; has a dimension larger then one, such that for all &lt;span class=&quot;math-container&quot;&gt;$\alpha,\beta\in\mathbb{R}$&lt;/span&gt; the vector &lt;span class=&quot;math-container&quot;&gt;$v = \alpha\,v_i + \beta\,v_j$&lt;/span&gt; would satisfy &lt;span class=&quot;math-container&quot;&gt;$(1)$&lt;/span&gt;. However, most generalized eigenvalue problem solvers &quot;choose&quot; &lt;span class=&quot;math-container&quot;&gt;$\alpha$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\beta$&lt;/span&gt; such that they do ensure that &lt;span class=&quot;math-container&quot;&gt;$v_j^\top \Lambda\,v_i = 0$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$v_j^\top K_d\,v_i = 0$&lt;/span&gt; whenever &lt;span class=&quot;math-container&quot;&gt;$\lambda_i = \lambda_j$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When defining &lt;span class=&quot;math-container&quot;&gt;$V$&lt;/span&gt; as the matrix whose columns are equal to &lt;span class=&quot;math-container&quot;&gt;$v_i\ \forall\,i=1,2,\cdots, n$&lt;/span&gt; it follows from &lt;span class=&quot;math-container&quot;&gt;$v_j^\top \Lambda\,v_i = v_j^\top K_d\,v_i = 0$&lt;/span&gt; that &lt;span class=&quot;math-container&quot;&gt;$V^\top \Lambda\,V$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$V^\top K_d\,V$&lt;/span&gt; are diagonal matrices. By also dividing each &lt;span class=&quot;math-container&quot;&gt;$i$&lt;/span&gt;th column of &lt;span class=&quot;math-container&quot;&gt;$V$&lt;/span&gt; by &lt;span class=&quot;math-container&quot;&gt;$\sqrt{v_i^\top \Lambda\,v_i}$&lt;/span&gt; one also obtains that &lt;span class=&quot;math-container&quot;&gt;$V^\top \Lambda\,V = I$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$V^\top K_d\,V = \text{diag}(\lambda_1,\lambda_2,\cdots,\lambda_n)$&lt;/span&gt;. Solving this for &lt;span class=&quot;math-container&quot;&gt;$\Lambda$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$K_d$&lt;/span&gt; yields&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;\begin{align}&#xA;\Lambda &amp;amp;= V^{-\top} V^{-1}, \tag{5a} \\&#xA;K_d &amp;amp;= V^{-\top} \text{diag}(\lambda_1,\lambda_2,\cdots,\lambda_n)\,V^{-1}, \tag{5b}&#xA;\end{align}&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;which is equivalent to using &lt;span class=&quot;math-container&quot;&gt;$Q = V^{-1}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$B_0 = \text{diag}(\lambda_1,\lambda_2,\cdots,\lambda_n)$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For more information of this derivation see section 3.3.2 from the book De Kraker, A. (2009). Mechanical vibrations. Shaker Publishing BV.&lt;/p&gt;&#xA;" OwnerUserId="1487" LastActivityDate="2020-05-26T17:49:29.547" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20720" PostTypeId="1" CreationDate="2020-05-27T00:15:12.913" Score="1" ViewCount="45" Body="&lt;p&gt;I am rather new to screw theory and also lost in robotics books' formulas. we have a simulator of a robot arm within Mujoco physics engine and I'm wondering how I can calculate wrench and twist in the local and base coordinate frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In the simulator what I have available is the end-effector's translational (jacp) and rotational(jacr) Jacobians. In addition I can obtain joins positions, velocities, accelerations and torque sensors' readings along with some other time dependent variables that are usually available in simulators.&lt;/p&gt;&#xA;" OwnerUserId="26403" LastEditorUserId="10414" LastEditDate="2021-01-25T16:22:37.500" LastActivityDate="2021-01-25T16:22:37.500" Title="How to calculate twist and wrench in local and global frames" Tags="&lt;robotic-arm&gt;&lt;jacobian&gt;&lt;geometry&gt;&lt;screw-theory&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20722" PostTypeId="1" CreationDate="2020-05-27T09:04:32.717" Score="3" ViewCount="50" Body="&lt;p&gt;given position and orientation of two coordinate frames, how can transfer a vector from one frame to another. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The position is given in Cartesian space and the orientations in quaternion or Euler angels.&lt;/p&gt;&#xA;" OwnerUserId="26403" LastActivityDate="2020-05-27T22:21:11.453" Title="given position and orientation of two coordinate frames, how to transfer a vector from one to another" Tags="&lt;geometry&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20723" PostTypeId="2" ParentId="20722" CreationDate="2020-05-27T15:55:41.633" Score="3" Body="&lt;p&gt;A homogeneous transform &lt;span class=&quot;math-container&quot;&gt;$T$&lt;/span&gt; is 4x4 matrix that looks like:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$T=\begin{bmatrix} &#xA;R &amp;amp; t \\&#xA;0_3 &amp;amp; 1&#xA;\end{bmatrix}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where &lt;span class=&quot;math-container&quot;&gt;$R$&lt;/span&gt; is a 3x3 rotation matrix and &lt;span class=&quot;math-container&quot;&gt;$t$&lt;/span&gt; is the translation. The rotation matrix can be calculated by converting either the quaternion or the euler angles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This matrix is used to transform a point from one coordinate system to another. The equation would look like this:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$p_A=T_{AB}*p_B$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;with &lt;span class=&quot;math-container&quot;&gt;$p$&lt;/span&gt; representing a point in the homogeneous form which is just appending a 1 to the end of it.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$p=\begin{bmatrix} &#xA;p_x \\ p_y \\ p_z \\ 1&#xA;\end{bmatrix}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you don't want to use the homogenous form then the equations just break down to&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$p_A=R_{AB}*p_B+t_{AB}$$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;here &lt;span class=&quot;math-container&quot;&gt;$p$&lt;/span&gt; is just a 3x1 vector without the 1.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can directly use the quaternion if you change the rotation matrix multiplication to quaternion multiplication.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$p_A=q_{AB}\otimes p_B+t_{AB}$$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This equation converts a point in the &lt;span class=&quot;math-container&quot;&gt;$B$&lt;/span&gt; coordinate system into the &lt;span class=&quot;math-container&quot;&gt;$A$&lt;/span&gt; coordinate system.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You have or can easily figure out &lt;span class=&quot;math-container&quot;&gt;$T_{AB}$&lt;/span&gt;. I don't know how you are storing the vector, but it can always be broken into 2 endpoints. Now just use the equation above to transform both points, and then convert back into your vector format.&lt;/p&gt;&#xA;" OwnerUserId="15265" LastEditorUserId="15265" LastEditDate="2020-05-27T22:21:11.453" LastActivityDate="2020-05-27T22:21:11.453" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20724" PostTypeId="1" AcceptedAnswerId="20726" CreationDate="2020-05-27T21:59:58.640" Score="0" ViewCount="39" Body="&lt;p&gt;I am working on a robot arm with 7 rotational joints.&#xA;I can generate the T of any position, what I want to do ist to represent the vector Xf of the end effector frame in the base frame.&#xA;How can I do it?&lt;/p&gt;&#xA;" OwnerUserId="26485" LastActivityDate="2020-05-28T09:22:18.430" Title="How to represent the Xf axis of the final frame (end-effector) in function of euler angles?" Tags="&lt;kinematics&gt;&lt;inverse-kinematics&gt;&lt;forward-kinematics&gt;&lt;dh-parameters&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20725" PostTypeId="1" CreationDate="2020-05-28T03:45:55.940" Score="1" ViewCount="75" Body="&lt;p&gt;I know how to set up &lt;code&gt;CMake&lt;/code&gt; and &lt;code&gt;Toolchain&lt;/code&gt; remotely using ssh through &lt;a href=&quot;https://www.jetbrains.com/help/clion/ros-setup-tutorial.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;official wiki&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does anyone know how to configure a remote &lt;code&gt;ROS&lt;/code&gt; environment in CLion?&lt;/p&gt;&#xA;" OwnerUserId="26486" LastActivityDate="2021-03-16T21:30:22.930" Title="How to setup CLion for ROS remotely?" Tags="&lt;ros&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20726" PostTypeId="2" ParentId="20724" CreationDate="2020-05-28T09:22:18.430" Score="0" Body="&lt;p&gt;Assuming:&#xA;* the T you mention is a 4x4 transformation matrix&#xA;* &quot;by any point you want&quot; you meant any given pose (pose is position and orientation)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the T transformation matrix links the end effector frame to the base frame. Let's assume that you have a given position (X=10, y = 20, z = 30) and orientation (A = 0, B = 0, C = 0). for this pose, the T matrix is trivial to make:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$T=\begin{bmatrix} &#xA;1 &amp;amp; 0&amp;amp; 0 &amp;amp; 10 \\&#xA;0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 20 \\&#xA;0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 30 \\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1\\&#xA;\end{bmatrix}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This matrix can be used to calculate the coordinates of a point given in the end effector frame in the base frame. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;E.g. the point (X = 1, Y = 1, Z = 1) in defined in the End Effector Frame will have the following coordinates in the base frame:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\begin{bmatrix} &#xA;1 &amp;amp; 0&amp;amp; 0 &amp;amp; 10 \\&#xA;0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 20 \\&#xA;0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 30 \\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1\\&#xA;\end{bmatrix}&#xA; \times &#xA;\begin{bmatrix} &#xA;1 \\&#xA;2  \\&#xA;3  \\&#xA;1 \\&#xA;\end{bmatrix}&#xA;=&#xA;\begin{bmatrix} &#xA;11 \\&#xA;22 \\&#xA;33  \\&#xA;1 \\&#xA;\end{bmatrix}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you want to represent the coordinate fram visually, you will need to take one point on each axis and the origin and see what coordinates corespond to these points in the base frame, so:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$P_X=&#xA;\begin{bmatrix} &#xA;1 &amp;amp; 0&amp;amp; 0 &amp;amp; 10 \\&#xA;0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 20 \\&#xA;0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 30 \\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1\\&#xA;\end{bmatrix}&#xA; \times &#xA;\begin{bmatrix} &#xA;1 \\&#xA;0  \\&#xA;0  \\&#xA;1 \\&#xA;\end{bmatrix}&#xA;=&#xA;\begin{bmatrix} &#xA;11 \\&#xA;20 \\&#xA;30  \\&#xA;1 \\&#xA;\end{bmatrix}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$P_Y=&#xA;\begin{bmatrix} &#xA;1 &amp;amp; 0&amp;amp; 0 &amp;amp; 10 \\&#xA;0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 20 \\&#xA;0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 30 \\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1\\&#xA;\end{bmatrix}&#xA; \times &#xA;\begin{bmatrix} &#xA;0 \\&#xA;1  \\&#xA;0  \\&#xA;1 \\&#xA;\end{bmatrix}&#xA;=&#xA;\begin{bmatrix} &#xA;10 \\&#xA;21 \\&#xA;30  \\&#xA;1 \\&#xA;\end{bmatrix}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$P_Z=&#xA;\begin{bmatrix} &#xA;1 &amp;amp; 0&amp;amp; 0 &amp;amp; 10 \\&#xA;0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 20 \\&#xA;0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 30 \\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1\\&#xA;\end{bmatrix}&#xA; \times &#xA;\begin{bmatrix} &#xA;0 \\&#xA;0  \\&#xA;1  \\&#xA;1 \\&#xA;\end{bmatrix}&#xA;=&#xA;\begin{bmatrix} &#xA;10 \\&#xA;20 \\&#xA;31  \\&#xA;1 \\&#xA;\end{bmatrix}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$P_O=&#xA;\begin{bmatrix} &#xA;1 &amp;amp; 0&amp;amp; 0 &amp;amp; 10 \\&#xA;0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 20 \\&#xA;0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 30 \\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1\\&#xA;\end{bmatrix}&#xA; \times &#xA;\begin{bmatrix} &#xA;0 \\&#xA;0  \\&#xA;0  \\&#xA;1 \\&#xA;\end{bmatrix}&#xA;=&#xA;\begin{bmatrix} &#xA;10 \\&#xA;20 \\&#xA;30 \\&#xA;1 \\&#xA;\end{bmatrix}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to visualize the coordinate system, you need to draw lines between &lt;span class=&quot;math-container&quot;&gt;$P_O P_X$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$P_O P_Y$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$P_O P_Z$&lt;/span&gt;. If the coordinate system drawn is too small, you can use a point on each axis which is further away from the origin (instead of alway useing 1 you can use 10, 100 or even larger numbers)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The above method works also if the rotation part of the transformation matrix is different from the identity matrix, this example was chosen for the easy calculations.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-05-28T09:22:18.430" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20728" PostTypeId="1" AcceptedAnswerId="20735" CreationDate="2020-05-28T15:23:08.720" Score="0" ViewCount="50" Body="&lt;p&gt;I have seen in the documentation of an old subcontractor's product that the controller of a robotic arm joint was basically feeding error position + error rate directly into one single PID. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;It feels wrong to have two different variations mixed before acting on the mix, but I may be wrong given that, after all, speed is directly linked to position. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Is it correct? What are the drawbacks to that, for systems where both positions and speeds need to be tracked? Should state-space MISO controllers be used instead?&lt;/p&gt;&#xA;" OwnerUserId="7390" LastActivityDate="2020-05-29T20:24:57.770" Title="Feed both position and speed errors to one single PID" Tags="&lt;control&gt;&lt;pid&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20730" PostTypeId="1" AcceptedAnswerId="20739" CreationDate="2020-05-28T18:42:54.367" Score="0" ViewCount="227" Body="&lt;p&gt;I have 4 3d points(x, y, z). Using these points how can I calculate rotation angle? Consequently, I want to have a 4x4 transformation matrix including rotation and translation information.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;4 points are in a plane and they are rectangle and I set the top-left point as the origin of the rectangle coordinate. Look at the bellow pictures. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Xi0ys.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Xi0ys.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/vKrif.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vKrif.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;Here I only have four 3D points(Xw,Tw,Zw) based on the world coordinate. According to the 4 points, I can calculate 4 points based on the rectangle coordinate. For instance, value [Xr] in P2 is the distance between P1 and P2. And [-Yr] in P3 is the distance between P1 and P3.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then how could I get rotation angle of the rectangle based on the world coordinate using those information?&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;Additional information (3d points in the world coordinate):&#xA;P1(-401.428, 485.929, 772.921)&#xA;P2(-21.4433, 475.611, 772.511)&#xA;P3(-400.982, 483.56, 403.703)&#xA;P4(-21.589, 473.028, 403.242)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="23802" LastActivityDate="2020-05-31T10:28:44.790" Title="How to calculate rotation angle from 3D points" Tags="&lt;rotation&gt;&lt;transforms&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20732" PostTypeId="1" CreationDate="2020-05-29T14:59:00.710" Score="0" ViewCount="51" Body="&lt;p&gt;&lt;strong&gt;Short description&lt;/strong&gt;: my steering servo goes into full (right) lock when my system is wired in the following way:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Pi provides power to the breakout board&lt;/li&gt;&#xA;&lt;li&gt;ESC with BEC is used to provide power to the breakout board for the servo(s)&lt;/li&gt;&#xA;&lt;li&gt;steering servo is connected to breakout board with GND, V+ and PWM&lt;/li&gt;&#xA;&lt;li&gt;ESC &quot;back&quot; connection is only PWM&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This is also depicted in the image below, as best as I could.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By &quot;lock&quot; I mean: it goes fully right, and I'm unable to move it at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Question is&lt;/strong&gt;:&#xA;Is the wiring explained correct (i.e. should it work)?&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;If yes: what would possibly explain the behaviour of the servo? &lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If no: what would the proper wiring look like to provide power from the BEC to the servo?&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Longer version&lt;/strong&gt;:&#xA;I'm trying to get rid of a multi adapter solution for providing power to my steering servo. Up until now, I've been using a smartphone powerbank, an USB -&gt; 2.5mm barrel adapter (male), 2.5mm barrel (female) -&gt; terminal block, which then connects to the breakout board's terminal block. This works fine, so the servo isn't generally broken.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://docs.donkeycar.com/parts/actuators/&quot; rel=&quot;nofollow noreferrer&quot;&gt;DonkeyCar docs&lt;/a&gt; mention that it should be possible to power the steering servo via BEC, and they also provide a diagram which connects V+ from BEC directly to the steering servo. This, however, does not work for me - the servo goes into full steering lock as soon as the battery is powered on (and thus the ESC).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The solution provided in the &lt;a href=&quot;https://forums.adafruit.com/viewtopic.php?f=22&amp;amp;t=42013&amp;amp;start=15&quot; rel=&quot;nofollow noreferrer&quot;&gt;adafruit forums&lt;/a&gt;, which mentions that GND and V+ is inter-connected for the entire rail, and that I should be able to simply attach the entire header from the BEC to the breakout board (i.e. V+, GND, PWM) which should then power the servo doesn't work either - with the same issue, it goes into full steering lock.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I've been trying last is connecting V+ and GND from the BEC directly to the terminal block of the breakout board, connecting only PWM back to the BEC's cable. This also fails, for the exact same reason as above.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm pretty much at my wits end here, as I also don't quite get what I'm doing wrong.&#xA;Note: as of now, I do NOT own a multimeter, so I can't provide any measurements of my own hand have to believe what a datasheet is saying.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you need any more details, please let me know and I'll be sure to provide what I can. Thanks in advance for any helpful idea, solution, or simply a hint in the right direction.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Parts used:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;RPi 3 / Jetson Nano&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;PCA9865 breakout board&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;Tamiya TBLE-02S ESC /w BEC&lt;/li&gt;&#xA;&lt;li&gt;Carson steering servo&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Note: I've also read other questions, like e.g. about &lt;a href=&quot;https://robotics.stackexchange.com/questions/10972/adafruit-pca9685-servo-driver-connected-to-beaglebone-green-wireless-generating&quot;&gt;erratic movement&lt;/a&gt;, however my servo doesn't behave that way right now - it doesn't work, even for a brief period, and movement is not erratic but fully locked.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/4Grxx.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4Grxx.png&quot; alt=&quot;servo / motor wiring via BEC&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="26492" LastEditorUserId="26492" LastEditDate="2020-05-30T10:06:36.023" LastActivityDate="2020-05-30T10:06:36.023" Title="Steering servo goes full lock when PCA9685 is powered via BEC" Tags="&lt;power&gt;&lt;rcservo&gt;&lt;circuit&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20734" PostTypeId="2" ParentId="6590" CreationDate="2020-05-29T20:20:43.920" Score="1" Body="&lt;p&gt;There are actually two sources of yaw torque in a quadrotor and a multirotor in general.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first is the torque from an imbalance between the torque generated by the CW spinning rotors and that generated by the CCW spinning rotors. This is entirely a function of friction in the motor bearings and aerodynamic drag.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second is torque arising from the conservation of angular momentum when the rotor speeds are changed, similar to how a reaction wheel works (see the Cubli). This effect is present in a vacuum, so it does not rely on aerodynamic forces.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first effect causes angular acceleration of the vehicle proportional to the difference in rotor speeds between the CW and CCW rotors. The second effect causes angular acceleration of the vehicle proportional to the difference in the derivative of the rotor speeds between the CW and CCW rotors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;See &lt;a href=&quot;https://aapt.scitation.org/doi/pdf/10.1119/1.5033880&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://aapt.scitation.org/doi/pdf/10.1119/1.5033880&lt;/a&gt; for a short experimental study of these two effects.&lt;/p&gt;&#xA;" OwnerUserId="26495" LastActivityDate="2020-05-29T20:20:43.920" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20735" PostTypeId="2" ParentId="20728" CreationDate="2020-05-29T20:24:57.770" Score="3" Body="&lt;p&gt;This is very standard, when the position error is multiplied by the P gain and the velocity error is multiplied by the D gain. Typically, a measurement of the velocity error is preferred as it will be smoother than that computed by numerically differentiating the position.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When you want to track both a position and a speed, it is important that the reference speed and reference position are consistent, i.e. that the derivative of the position is the velocity. In that case, yes you want to feed both into the PID or PD loop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It may depend on the application, but typically, there is a feedforward term that strives to keep both errors as low as possible (if pos error is always zero then so will vel error) so that the feedback controller has to do minimal work.&lt;/p&gt;&#xA;" OwnerUserId="26495" LastActivityDate="2020-05-29T20:24:57.770" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20736" PostTypeId="1" CreationDate="2020-05-30T02:00:40.960" Score="1" ViewCount="63" Body="&lt;p&gt;I am just learning about twists to represent 3D velocities (e.g. of a robot's end-effector), and I have two questions:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) Wikipedia defines a twist as &quot;an angular velocity around an axis and a linear velocity along this axis&quot;. To represent a twist mathematically, this requires defining a point in 3D space (3 coordinates), the direction of the axis passing through this point (2 coordinates), and the ratio of the linear and angular velocities. This is 6 numbers in total. However, it seems that you could also represent this same 3D velocity just by defining linear velocity about the axes (3 coordinates), and a rotational velocity about the three axes (3 coordinates), so that the linear and rotational velocities are defined independently. This is also 6 numbers in total. So why do we define 3D velocities as twists, rather than using my version? Is it just that there are some nice mathematical properties of twists that my version does not have? Or is it that my version is actually fundamentally wrong in some way?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) Let's say I have an object with positive x- and y- linear velocity, but zero z- linear velocity. The object is also spinning around its z-axis, but there is no rotation about the x- and y- axes. You can think of this as a ball sliding across the floor, whilst spinning about its vertical axis. I am struggling to understand how it is possible to represent this 3D velocity using &quot;an angular velocity around an axis and a linear velocity along this axis&quot;. In this example, it seems clear to me that the linear velocity is acting orthogonally to the axis of rotation of the angular velocity. The ball is rotating about its z-axis, and so it doesn't seem possible to also define the linear velocity in terms of this z-axis, because the linear velocity only has components in the x- and y- axes. What am I missing?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you!&lt;/p&gt;&#xA;" OwnerUserId="8880" LastEditorUserId="10414" LastEditDate="2021-01-25T16:23:29.250" LastActivityDate="2021-01-25T16:23:29.250" Title="Understanding Twists as 3D Velocities" Tags="&lt;kinematics&gt;&lt;rotation&gt;&lt;transforms&gt;&lt;screw-theory&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20737" PostTypeId="1" CreationDate="2020-05-30T11:13:35.193" Score="0" ViewCount="15" Body="&lt;p&gt;I am working on a 7 DOF robot (7 rotational joints).&#xA;I used euler angles to let the robot point down.&#xA;Zf (Z of the last frame &quot;end-effector frame&quot;) is the direction of the end-effector.&#xA;What I want to do is to rotate the end-effector around itself (in other words around its current Xf).&#xA;I have the transformation matrix of each point where the end-effector is and can easily change the values of the matrix. What can I do for it ?&lt;/p&gt;&#xA;" OwnerUserId="26485" LastActivityDate="2020-05-30T11:13:35.193" Title="Rotate the end-effector around its Xf axis" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20738" PostTypeId="1" CreationDate="2020-05-31T10:28:11.263" Score="0" ViewCount="74" Body="&lt;p&gt;I have a couple of motors on my mobile base other than the drive motors, and they tend to create vibration in the robot. When these motors are turned on, the wheel's encoder ticks increase without any actual movement. This is destroying my odometry. As I need the motors to be on all the time, I need some help to figure this out.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How to avoid false encoder counts like these due to vibration?&lt;/p&gt;&#xA;" OwnerUserId="13969" LastActivityDate="2020-06-01T20:34:41.657" Title="How to avoid false encoder counts due to vibration in robot?" Tags="&lt;mobile-robot&gt;&lt;motor&gt;&lt;software&gt;&lt;quadrature-encoder&gt;" AnswerCount="3" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="20739" PostTypeId="2" ParentId="20730" CreationDate="2020-05-31T10:28:44.790" Score="0" Body="&lt;p&gt;You want to find a translation vector &lt;span class=&quot;math-container&quot;&gt;$t \in \mathbb{R}^3$&lt;/span&gt; and rotation matrix &lt;span class=&quot;math-container&quot;&gt;$R \in \mathbb{R}^{3 \times 3}$&lt;/span&gt; such that vectors &lt;span class=&quot;math-container&quot;&gt;$p_k \in \mathbb{R}^3$&lt;/span&gt; map to &lt;span class=&quot;math-container&quot;&gt;$p_k' \in \mathbb{R}^3$&lt;/span&gt; using&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\begin{bmatrix}&#xA;p_k' \\ 1&#xA;\end{bmatrix} = &#xA;\begin{bmatrix}&#xA;R &amp;amp; t \\ 0 &amp;amp; 1&#xA;\end{bmatrix}&#xA;\begin{bmatrix}&#xA;p_k \\ 1&#xA;\end{bmatrix},&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;or equivalently &lt;span class=&quot;math-container&quot;&gt;$p_k' = R\,p_k + t$&lt;/span&gt;. Since the zero vector in rectangle coordinates should map to P1 in world coordinates it follows that &lt;span class=&quot;math-container&quot;&gt;$t$&lt;/span&gt; should be equal to P1 in world coordinates. The rotation matrix can be found by using a solution to &lt;a href=&quot;https://en.wikipedia.org/wiki/Wahba%27s_problem&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wahba's problem&lt;/a&gt;, which in your case can be defined as&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\min_{R \in SO(3)} \sum_{k=1}^n a_k\, \|w_k - R\,v_k\|^2,&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;with &lt;span class=&quot;math-container&quot;&gt;$w_k = p_k' - t$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$v_k = p_k$&lt;/span&gt;. The weights &lt;span class=&quot;math-container&quot;&gt;$a_k$&lt;/span&gt; can be any positive number, often used to indicate how &quot;trustworthy&quot; each vector is and/or normalize with respect to vector length. However, one can always just set all &lt;span class=&quot;math-container&quot;&gt;$a_k$&lt;/span&gt; equal to one.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If the world coordinates are subjected to any disturbance it might be that using P1 in world coordinates as &lt;span class=&quot;math-container&quot;&gt;$t$&lt;/span&gt; gives a slightly sub-optimal solution. However, the solution proposed in this answer should still give a good approximated optimal solution (with respect to &lt;span class=&quot;math-container&quot;&gt;$\sum \|R\,p_k + t - p_k'\|^2$&lt;/span&gt;).&lt;/p&gt;&#xA;" OwnerUserId="1487" LastActivityDate="2020-05-31T10:28:44.790" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20740" PostTypeId="1" AcceptedAnswerId="20749" CreationDate="2020-05-31T10:39:07.210" Score="2" ViewCount="180" Body="&lt;p&gt;Hey guys I am quite new to quaternions and I am a bit unsure as to how to use them. How are the velocities and accelerations trajectories determined using quaternions?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have been using slerp to interpolate the orientations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\begin{align}&#xA;Slerp(Q_0, Q_1,t) = Q_0(Q_0^{-1}Q_1)^t&#xA;\end{align}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where &lt;span class=&quot;math-container&quot;&gt;$t$&lt;/span&gt; is the interpolation parameter from &lt;span class=&quot;math-container&quot;&gt;$[0;1]$&lt;/span&gt;. I read on &lt;a href=&quot;https://en.wikipedia.org/wiki/Slerp#Quaternion_Slerp&quot; rel=&quot;nofollow noreferrer&quot;&gt;wikipedia&lt;/a&gt; that:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;*The derivative of &lt;span class=&quot;math-container&quot;&gt;$Slerp(q_0, q_1; t)$&lt;/span&gt; with respect to &lt;em&gt;t&lt;/em&gt;, assuming the ends are fixed, is &lt;span class=&quot;math-container&quot;&gt;$log(q_1 q_0^{−1})$&lt;/span&gt; times the function value, where the quaternion natural logarithm in this case yields half the 3D angular velocity vector.*&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This is further supported by a document I found on the topic of quaternion interpolation in animation &lt;a href=&quot;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.30.6788&amp;amp;rep=rep1&amp;amp;type=pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;(Dam, E. B., Koch, M., &amp;amp; Lillholm, M., (1998))&lt;/a&gt;, where in equation: (6.12), they show the first and second derivative (using their notation):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\begin{align}&#xA;\frac{d}{dt}Slerp(p,q,h) &amp;amp;= \frac{d}{dt} p (p^* q)^h \\&#xA;&amp;amp;= p(p^* q)^h log(p^* q)\\&#xA;&amp;amp;= Slerp(p,q,h) log(p^*q)\\\\&#xA;\frac{d^2}{dh^2}Slerp(p,q,h) &amp;amp;= p(p^* q)^h log(p^*q)^2\\&#xA;&amp;amp;= Slerp(p,q,h) log(p^* q)^2&#xA;\end{align} &#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In other words, to get the second derivative of &lt;span class=&quot;math-container&quot;&gt;$Slerp$&lt;/span&gt; you need to times the function value with &lt;span class=&quot;math-container&quot;&gt;$log(Q_1, Q_0^{-1})^2$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Is this legitimate?&lt;/strong&gt; And can I use these resulting quaternions for:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\begin{align}&#xA;X_d = \begin{bmatrix}p_d\\ Q_d \end{bmatrix}, \quad \dot{X}_d = \begin{bmatrix}\dot{p}_d\\ \dot{Q}_d \end{bmatrix} \quad \ddot{X}_d = \begin{bmatrix}\ddot{p}_d\\ \ddot{Q}_d \end{bmatrix}&#xA;\end{align}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where &lt;span class=&quot;math-container&quot;&gt;$p = [x,y,z]^\intercal$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$Q = \{\eta, \epsilon \}$&lt;/span&gt;, and the dots &lt;span class=&quot;math-container&quot;&gt;$\dot{X}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\ddot{X}$&lt;/span&gt; are the respective velocities and accelerations.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Because I am not sure what to make of the results. Maybe because I don't really understand quaternions. For context here's an example:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Python:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;import numpy as np&#xA;import quaternion&#xA;import matplotlib.pyplot as plt&#xA;import matplotlib as mpl&#xA;mpl.style.use('seaborn')&#xA;plt.rcParams['figure.figsize'] = [10, 15]&#xA;&#xA;t = np.linspace(0,1,100)&#xA;Q = np.zeros((4,100))&#xA;Qd = np.zeros((4,100))&#xA;Qdd = np.zeros((4,100))&#xA;&#xA;rot0 = np.array([[ 1.0,  0.0,  0.0],&#xA;                 [ 0.0, -1.0,  0.0],&#xA;                 [ 0.0,  0.0, -1.0]])&#xA;&#xA;rotf = np.array([[ 0.0, -1.0,  0.0],&#xA;                 [-1.0,  0.0,  0.0],&#xA;                 [ 0.0,  0.0, -1.0]])&#xA;&#xA;q0 = quaternion.from_rotation_matrix(rot0)&#xA;qf = quaternion.from_rotation_matrix(rotf)&#xA;&#xA;for i in range(100):&#xA;    slerp = q0 * (q0.inverse() * qf)**t[i]&#xA;    slerp_d = slerp * np.log(qf * q0.inverse())&#xA;    slerp_dd = slerp * np.log(qf * q0.inverse())**2&#xA;&#xA;    Q[:,i] = quaternion.as_float_array(slerp)&#xA;    Qd[:,i] = quaternion.as_float_array(slerp_d)&#xA;    Qdd[:,i] = quaternion.as_float_array(slerp_dd)&#xA;&#xA;fig, (ax1, ax2, ax3) = plt.subplots(3, 1)&#xA;ax1.plot(Q.T)&#xA;ax1.set_title(&quot;Slerp&quot;)&#xA;ax1.legend(['w','i','j','k'])&#xA;ax2.plot(Qd.T)&#xA;ax2.set_title(&quot;Slerp_d&quot;)&#xA;ax2.legend(['w','i','j','k'])&#xA;ax3.plot(Qdd.T)&#xA;ax3.set_title(&quot;Slerp_dd&quot;)&#xA;ax3.legend(['w','i','j','k'])&#xA;plt.show()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Sux3i.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Sux3i.png&quot; alt=&quot;Three plots depicting SLERP and their derivatives for trajectories&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="24309" LastActivityDate="2021-04-24T15:11:34.070" Title="SLERP velocity and acceleration (3d Orientation interpolation)" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;manipulator&gt;&lt;trajectory&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20741" PostTypeId="1" CreationDate="2020-05-31T15:13:39.487" Score="0" ViewCount="58" Body="&lt;p&gt;I've seen that there are plenty of ways of generating orientation errors with quaternions. But the one I've seen most often is the following: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;For example, say that for a quaternion &lt;span class=&quot;math-container&quot;&gt;$Q = \{\eta, \epsilon \}$&lt;/span&gt; that represents the quaternion associated with the rotation matrix &lt;span class=&quot;math-container&quot;&gt;$R$&lt;/span&gt;. Similarly, the orientation error can be described as &lt;span class=&quot;math-container&quot;&gt;$R_d R^\intercal$&lt;/span&gt;. This leads to the following idea:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\begin{align}&#xA;\Delta Q = Q_d * Q^{-1}&#xA;\end{align}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where we have the orientation error: &lt;span class=&quot;math-container&quot;&gt;$\Delta Q = \{\Delta\eta, \Delta\epsilon \}$&lt;/span&gt;. It can be recognized that if the orientation error is &lt;span class=&quot;math-container&quot;&gt;$\Delta Q = \{1, 0 \}$&lt;/span&gt;, if we have &lt;span class=&quot;math-container&quot;&gt;$R$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$R_d$&lt;/span&gt; are aligned. Hence it is sufficient to represent the orientation error as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\begin{align} &#xA;e_o = \epsilon_\Delta = \eta_d \epsilon - \eta \epsilon_d - S(\epsilon_d) \epsilon&#xA;\end{align}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Where &lt;span class=&quot;math-container&quot;&gt;$S(\cdot)$&lt;/span&gt; is the skew symmetric operator.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;I am scratching my head over this&lt;/strong&gt;. I saw someone try implementing this method from this &lt;a href=&quot;https://studywolf.wordpress.com/2018/12/03/force-control-of-task-space-orientation/&quot; rel=&quot;nofollow noreferrer&quot;&gt;blog&lt;/a&gt;, and it was mentioned in the comments section that this proposed method &lt;strong&gt;&lt;em&gt;only works for&lt;/em&gt;&lt;/strong&gt; the geometric Jacobian &lt;span class=&quot;math-container&quot;&gt;$J(q)_g$&lt;/span&gt; and not an analytic jacobian &lt;span class=&quot;math-container&quot;&gt;$J_A(q)$&lt;/span&gt; for quaternions. This leads to the complication because:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If we define the trajectory vectors as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\begin{align}&#xA;x = \begin{bmatrix}p_p \\ p_o\end{bmatrix} \quad \dot{x} = \begin{bmatrix}\dot{p}_p \\ \dot{p}_o\end{bmatrix} \quad \ddot{x} = \begin{bmatrix}\ddot{p}_p \\ \ddot{p}_o\end{bmatrix}&#xA;\end{align}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;What is&lt;/strong&gt; &lt;span class=&quot;math-container&quot;&gt;$p_o$&lt;/span&gt; ? is it just the vector part of the quaternion &lt;span class=&quot;math-container&quot;&gt;$\epsilon$&lt;/span&gt; ? And what about singularities? I'm curious about this because &lt;strong&gt;this relates to the choice of the Jacobian&lt;/strong&gt; (geometric or analytical) and the desired mass, dampig and stiffness matrices (dimensions) when computing the dynamics equation:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\begin{align}&#xA;\Lambda(x) \ddot{x} + \mu (x, \dot{x}) \dot{x} + F_g(x) = F_\tau + F_{ext}&#xA;\end{align}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;where:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\begin{align}&#xA;\Lambda(x) &amp;amp;= J(q)^{-\intercal} M(q) J(q)^{-1}, \\&#xA;\mu(x, \dot{x}) &amp;amp;= J(q)^{-\intercal} \Big(C(q, \dot{q}) - M(q) J(q^{-1} \dot{J}(q)) \Big) J(q)^{-1}&#xA;\end{align}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can see, the Jacobian is used a lot and if I were to implement the classical cartesian impedance controller:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\tau = g(q) + J(q)^\intercal (\Lambda(x) \ddot{x}_d + \mu(x, \dot{x}) \dot{x}) - \\&#xA;J(q)^\intercal \Lambda(x) \Lambda_d^{-1} (K_d \tilde{x} + D_d \dot{\tilde{x}}) +\\&#xA;J(q)^\intercal (\Lambda(x) \Lambda_d^{-1} - I) F_{ext}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It complicates the dimensions of the desired mass &lt;span class=&quot;math-container&quot;&gt;$\Lambda_d$&lt;/span&gt; , damping &lt;span class=&quot;math-container&quot;&gt;$D_d$&lt;/span&gt; and stiffness &lt;span class=&quot;math-container&quot;&gt;$K_d$&lt;/span&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;TLDR; How do I use quaternions for a classical cartesian impedance controller?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For context:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Book : Ott, C. (2008). Cartesian impedance control of redundant and&#xA;flexible-joint robots. Springer.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://studywolf.wordpress.com/2018/12/03/force-control-of-task-space-orientation/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://studywolf.wordpress.com/2018/12/03/force-control-of-task-space-orientation/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;http://www.cs.cmu.edu/~cga/dynopt/readings/Yuan88-quatfeedback.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;McGhee, R. B., &amp;amp; Iswandhi, I. (1988)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="24309" LastEditorUserId="24309" LastEditDate="2020-05-31T15:31:10.207" LastActivityDate="2020-05-31T15:31:10.207" Title="Quaternionic feedback for for cartesian impedance control" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;dynamics&gt;&lt;manipulator&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20742" PostTypeId="2" ParentId="20738" CreationDate="2020-05-31T17:19:42.603" Score="0" Body="&lt;p&gt;The one easy solution is to put in logic in your odometry that lets it know if your robot is moving. Just have a flag that tells your odometry to stop reading encoder inputs. when you know the robot is standing still.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If this doesn't work for you then it becomes quite a hard problem to solve. You can either try and model the vibration error(that seems to be the approach in &lt;a href=&quot;https://www.mdpi.com/1424-8220/12/4/4918&quot; rel=&quot;nofollow noreferrer&quot;&gt;this paper&lt;/a&gt;), or you can try and detect false positives using an additional sensor like an IMU. This approach is often used to help detect false encoder values during conditions like wheel slip. There are a ton of papers on this approach. E.g. &lt;a href=&quot;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.76.5048&amp;amp;rep=rep1&amp;amp;type=pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this one&lt;/a&gt;. You just have to understand and adapt it to your specific problem.&lt;/p&gt;&#xA;" OwnerUserId="15265" LastActivityDate="2020-05-31T17:19:42.603" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20743" PostTypeId="2" ParentId="20738" CreationDate="2020-05-31T18:25:38.980" Score="0" Body="&lt;p&gt;If you're talking about vibration causing the effect, then the encoders are giving you readings because the system is actually moving. It shouldn't affect odometry because a vibration is a back and forth thing; it should net zero counts over time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If it is causing you problems then it could be noise, or you're not sampling fast enough, or your arm is too rigidly constrained. Rigid systems are rigid because any effective spring constant is very high, which would cause very fast oscillations that may happen faster than you can count. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Also your encoder may be too sensitive. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-05-31T18:25:38.980" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20744" PostTypeId="1" CreationDate="2020-05-31T19:50:47.157" Score="0" ViewCount="40" Body="&lt;p&gt;I'm having problems finding the right sort of joint for my shoulder connection. It is a flat surface on the side of the mech body and I need to create a joint with maximum movement rotating: up, down and to have a possible butterfly style movement.the joint will be above and behind my arm like an exoskeleton.&lt;/p&gt;&#xA;" OwnerUserId="26503" LastEditorUserId="26503" LastEditDate="2020-05-31T22:17:58.977" LastActivityDate="2020-07-01T21:03:55.413" Title="what are shoulder ball and socket joints called? (i am trying to design and build a hydraulic assistance mech suit)" Tags="&lt;rotation&gt;&lt;joint&gt;&lt;movement&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20745" PostTypeId="1" AcceptedAnswerId="20767" CreationDate="2020-06-01T01:16:42.780" Score="1" ViewCount="155" Body="&lt;p&gt;&lt;strong&gt;Short Question:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As demonstrated in the image below, how can I calculate the rotation matrix that relates the base coordinate and the rectangle coordinate, given 3 known points P1, P2, P3 on the surface of the rectangle with respect to the base coordinate?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/8Dkbf.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8Dkbf.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Long Question:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am currently working on OMRON pick-and-place robots. Basically, the overall layout of the system is similar to what is shown in the following picture:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/tyfTH.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tyfTH.png&quot; alt=&quot;https://www.densorobotics.com/user-manuals/002221.html&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The system has a rotary encoder that reflects the conveyor belt motion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What I am trying to do is to come out with a transformation matrix &lt;strong&gt;&lt;em&gt;T&lt;/em&gt;&lt;/strong&gt; that represents the belt with respect to the robot coordinates. This transformation matrix is automatically calculated using a calibration wizard, however I am trying to understand how such matrix is calculated based on the 3-point belt calibration carried out as below:&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Simple Calibration Steps:&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The calibration can simply be completed after teaching 3 points on the belt as shown in the following image:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/hyhMn.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hyhMn.jpg&quot; alt=&quot;Belt calibration&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The steps are as follows:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A product is placed on the belt at the upstream limit that a robot&#xA;can start tracking the product from.&lt;/li&gt;&#xA;&lt;li&gt;The robot tip is then placed on the product. Its location and the encoder value are recorded. Let the point be &lt;em&gt;P&lt;sub&gt;1&lt;/sub&gt;&lt;/em&gt; and encoder value be &lt;em&gt;E&lt;sub&gt;1&lt;/sub&gt;&lt;/em&gt;.&lt;/li&gt;&#xA;&lt;li&gt;The belt is then allowed to move in the product feeding direction until the it reaches to another location which the robot tip can reach.&lt;/li&gt;&#xA;&lt;li&gt;Robot tip is placed on top of the product. This is the second calibration point &lt;em&gt;P&lt;sub&gt;2&lt;/sub&gt;&lt;/em&gt;. The encoder value is also recorded. Let it be &lt;em&gt;E&lt;sub&gt;2&lt;/sub&gt;&lt;/em&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Lastly the robot tip is moved and placed on the calibration product on a side location of the belt called &lt;code&gt;downstream pick limit&lt;/code&gt;. This would be the the third point &lt;em&gt;P&lt;sub&gt;3&lt;/sub&gt;&lt;/em&gt; and it is recorded.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;After I followed these steps for a test robot in hand, I got the following quantities:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$P_1 = \begin{bmatrix}-286.8 &amp;amp; -338.0 &amp;amp; 244.6\end{bmatrix} ; E_{1}=-71873$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$P_2 = \begin{bmatrix}140.3 &amp;amp; -422.2 &amp;amp; 246.7\end{bmatrix} ; E_{2}=-158710$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$P_3 = \begin{bmatrix}-18.004 &amp;amp; -590.452 &amp;amp; 248.746\end{bmatrix} $$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let &lt;em&gt;b = [b&lt;sub&gt;x&lt;/sub&gt; b&lt;sub&gt;y&lt;/sub&gt; b&lt;sub&gt;z&lt;/sub&gt;]&lt;/em&gt; be a belt point. Since the belt motion is having a magnitude along the &lt;em&gt;x&lt;/em&gt; direction, then the scale factor in units of mm/pulses can be calculated by:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$s = \frac {|P2-P1|}{E2-E1} = \frac {\sqrt{(140.3-(-286.8))^2 + (-422.2 -(-338.0))^2 + (246.7-244.6)^2}}{−158710 -(-71873)} =-0.005013$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is one important scale factor that we need to calculate during the calibration process (the minus sign means the encoder counts opposite to belt rotation)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Along with this scale that we get during calibration, we need to calculate all members of the transformation matrix &lt;strong&gt;T&lt;/strong&gt; which relates belt coordinates with robot coordinates. This has the rotation matrix R and translation matrix D.&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;p=Tb = \begin{bmatrix}&amp;amp; R &amp;amp; &amp;amp; D\\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1&#xA;\end{bmatrix}b&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$p=\begin{bmatrix}&#xA;p_x \\&#xA;p_y\\&#xA;p_z\\&#xA;1&#xA;\end{bmatrix}&#xA;=&#xA;\begin{bmatrix}&#xA;r_{11} &amp;amp; r_{12} &amp;amp; r_{13} &amp;amp; d_{x}\\&#xA;r_{21} &amp;amp; r_{22} &amp;amp; r_{23} &amp;amp; d_{y}\\&#xA;r_{31} &amp;amp; r_{32} &amp;amp; r_{33} &amp;amp; d_{z}\\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1\\&#xA;\end{bmatrix}&#xA;\begin{bmatrix}&#xA;b_x \\&#xA;b_y\\&#xA;b_z\\&#xA;1&#xA;\end{bmatrix}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Since b always has one component along the x axis of the belt, then the coordinate of the first calibration point with respect to belt coordinate is (Belt did not move yet):&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;b_1 = &#xA;\begin{bmatrix}&#xA;0  \\&#xA;0\\&#xA;0\\&#xA;1&#xA;\end{bmatrix}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and the coordinate of the second calibration point with respect to belt coordinate is (Belt moved from P1 to P2):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;b_2 = &#xA;\begin{bmatrix}&#xA;s\times(E2-E1)  \\&#xA;0\\&#xA;0\\&#xA;1&#xA;\end{bmatrix}&#xA;=&#xA;\begin{bmatrix}&#xA;435.3  \\&#xA;0\\&#xA;0\\&#xA;1&#xA;\end{bmatrix}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Therefore, from P1 calibration, we have:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$p_1=\begin{bmatrix}&#xA;−286.8 \\&#xA;−338.0\\&#xA;244.6\\&#xA;1&#xA;\end{bmatrix}&#xA;=&#xA;\begin{bmatrix}&#xA;r_{11} &amp;amp; r_{12} &amp;amp; r_{13} &amp;amp; d_{x}\\&#xA;r_{21} &amp;amp; r_{22} &amp;amp; r_{23} &amp;amp; d_{y}\\&#xA;r_{31} &amp;amp; r_{32} &amp;amp; r_{33} &amp;amp; d_{z}\\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1\\&#xA;\end{bmatrix}&#xA;\begin{bmatrix}&#xA;0 \\&#xA;0\\&#xA;0\\&#xA;1&#xA;\end{bmatrix}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Solving for T matrix members, we get d&lt;sub&gt;x&lt;/sub&gt; = −286.8, d&lt;sub&gt;y&lt;/sub&gt; = −338.0 and d&lt;sub&gt;z&lt;/sub&gt; = 244.6&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From P2 calibration, we have:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$p_2=\begin{bmatrix}&#xA;140.3  \\&#xA;−422.2\\&#xA;246.7\\&#xA;1&#xA;\end{bmatrix}&#xA;=&#xA;\begin{bmatrix}&#xA;r_{11} &amp;amp; r_{12} &amp;amp; r_{13} &amp;amp; −286.8\\&#xA;r_{21} &amp;amp; r_{22} &amp;amp; r_{23} &amp;amp; −338.0\\&#xA;r_{31} &amp;amp; r_{32} &amp;amp; r_{33} &amp;amp; 244.6\\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1\\&#xA;\end{bmatrix}&#xA;\begin{bmatrix}&#xA;435.3  \\&#xA;0\\&#xA;0\\&#xA;1&#xA;\end{bmatrix}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Solving for the Rotation matrix, we get:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;R = \begin{bmatrix}&#xA;0.981112257 &amp;amp; r_{12} &amp;amp; r_{13}\\&#xA;-0.193378015 &amp;amp; r_{22} &amp;amp; r_{23}\\&#xA;0.004866365 &amp;amp; r_{32} &amp;amp; r_{33}&#xA;\end{bmatrix}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Based on OMRON calibration wizard, the following matrix is obtained after finishing teaching the 3 points:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;T = \begin{bmatrix}&#xA;0.981112257 &amp;amp; -0.193427089 &amp;amp; 0.00216786 &amp;amp; −286.8\\&#xA;-0.193378015 &amp;amp; -0.981022085 &amp;amp; -0.01416372 &amp;amp; −338.0\\&#xA;0.004866365 &amp;amp; 0.013476983 &amp;amp; -0.999897339 &amp;amp; 244.6\\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1\\&#xA;\end{bmatrix}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As seen, the first column and 4th conform with the results that we got. However, I am not really sure what the mathematical way to follow using the third calibration point to calculate the rest of the transformation matrix that I have. How would I be able to calculate r&lt;sub&gt;12&lt;/sub&gt;, r&lt;sub&gt;22&lt;/sub&gt;, r&lt;sub&gt;32&lt;/sub&gt;, r&lt;sub&gt;13&lt;/sub&gt;, r&lt;sub&gt;23&lt;/sub&gt; and r&lt;sub&gt;33&lt;/sub&gt;?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;-&lt;strong&gt;&lt;em&gt;EDIT: (Response to the answer provided by @50k4)&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have tried your equations to find &lt;code&gt;P4&lt;/code&gt; for a sample coordinate that I got from the Google Sketchup 3D Designer, however I am getting big illogical values &lt;code&gt;a&lt;/code&gt; and &lt;code&gt;b&lt;/code&gt; and consequently for its &lt;code&gt;x&lt;/code&gt;, &lt;code&gt;y&lt;/code&gt; and &lt;code&gt;z&lt;/code&gt;. I created a Google sheet which contains the design with assigned values of each point and I also implemented your equations in it to calculate a, b, and P4 as well as &lt;span class=&quot;math-container&quot;&gt;$\vec v_1 = P_3 - P_4$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\vec v_2 = P_1 - P_4$&lt;/span&gt;. Here is the link for this sheet that I shared and can be publicly edited:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://bit.ly/2UqWvWn&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://docs.google.com/spreadsheets/d/1XGTqjk7kfwNi0hfktoVEtkkTNgrD1LUz8ui2Tyu455Y/edit?usp=sharing&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Why I Need to Know This in The First Place!&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am an experienced software engineer with robotics and control engineering qualification. I am planning to program 3D models and create a simulation platform and solve a problem in hand for the robotics world. Clear understanding of this field in mathematics is required.&lt;/p&gt;&#xA;" OwnerUserId="2533" LastEditorUserId="2533" LastEditDate="2020-06-11T09:29:28.147" LastActivityDate="2020-06-11T09:29:28.147" Title="Conveyor Belt Calibration for a Robot - Rotation Matrix" Tags="&lt;rotation&gt;&lt;movement&gt;&lt;transformation&gt;&lt;matrix&gt;&lt;coordinate-system&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20746" PostTypeId="1" CreationDate="2020-06-01T10:48:36.870" Score="1" ViewCount="43" Body="&lt;p&gt;I have an omnidirectional robot (x, y and rotation around z), which I would like to use the SLAM-algorithm from ROS. But the odometry from the robot has a drift, which makes some error. To improve the odometry error I need to calculate or specify the covariance matrix. How do I do that on a real system?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Regards&#xA;Markus&lt;/p&gt;&#xA;" OwnerUserId="26505" LastActivityDate="2020-06-01T10:48:36.870" Title="Caculate/Specify the covariance matrix for a omniwheel robot" Tags="&lt;ros&gt;&lt;slam&gt;&lt;odometry&gt;&lt;errors&gt;&lt;matrix&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20748" PostTypeId="2" ParentId="20744" CreationDate="2020-06-01T14:50:44.047" Score="1" Body="&lt;p&gt;A 2 degree of freedom shoulder joint can be called a gimbal or pan-tilt.  It can be modeled with a &lt;a href=&quot;https://en.wikipedia.org/wiki/Universal_joint&quot; rel=&quot;nofollow noreferrer&quot;&gt;universal joint&lt;/a&gt; (aka U-joint).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Usually, the third degree of freedom to twist the arm can be added a little further down the arm with no loss of generality.  Because the axis of rotation still intersects the other two.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But the human shoulder joint is actually much more complicated than just 3 DOF.  It is what allows you to shrug.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You might be interested in the &quot;Anthrobot&quot; designs by &lt;a href=&quot;http://www.anthrobot.com&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mark Roshiem&lt;/a&gt;.  Specifically the &lt;a href=&quot;http://www.anthrobot.com/omni_III/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Omni-Wrist III&lt;/a&gt; &quot;wrist&quot;.  (A wrist can also be used as a shoulder).  He has many different versions of this joint mechanism.  This one is driven by linear actuators which might suit your needs.  These joint designs are nice because there is free space down the center of the joint where the axes intersect.  This allows for cable routing or maybe a human arm.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;He also has a few books on robot joint design which are very interesting.  I highly recommend &quot;&lt;a href=&quot;https://www.google.com/books/edition/Robot_Evolution/IxtL54iiDPUC&quot; rel=&quot;nofollow noreferrer&quot;&gt;Robot Evolution: The Development of Anthrobotics&lt;/a&gt;&quot;.&lt;/p&gt;&#xA;" OwnerUserId="110" LastEditorUserId="110" LastEditDate="2020-06-01T20:17:29.093" LastActivityDate="2020-06-01T20:17:29.093" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20749" PostTypeId="2" ParentId="20740" CreationDate="2020-06-01T20:13:25.073" Score="3" Body="&lt;p&gt;Derivative of &lt;span class=&quot;math-container&quot;&gt;$\sin$&lt;/span&gt; is &lt;span class=&quot;math-container&quot;&gt;$\cos$&lt;/span&gt;, and the derivative of &lt;span class=&quot;math-container&quot;&gt;$\cos$&lt;/span&gt; is &lt;span class=&quot;math-container&quot;&gt;$-sin$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Given a &lt;a href=&quot;https://en.wikipedia.org/wiki/Versor&quot; rel=&quot;nofollow noreferrer&quot;&gt;quaternion definition of&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$q = \cos{a} + \mathbf{r}\sin{a}$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\mathbf{r}^2 = -1$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I would expect to see what is effectively a phase shift at every derivative level, and that's what I'm seeing in your curves. I noticed your magnitude seems to be growing, but that may be because you need to normalize at every step.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="-1" LastEditDate="2020-06-18T08:24:19.367" LastActivityDate="2020-06-01T20:13:25.073" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20750" PostTypeId="1" CreationDate="2020-06-01T20:25:06.613" Score="0" ViewCount="100" Body="&lt;p&gt;I am trying to set up a simple and listener talker across two machines connected on the same wifi network.&#xA;Machine A has the 10.42.0.89 address and is running the roscore and another node that publishes messages on a topic.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ printenv | grep ROS&#xA;ROS_IP=10.42.0.89&#xA;ROS_MASTER_URI=http://10.42.0.89:11311&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The other Machine B has the ROS_MASTER_URI set to match the one of machine A&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ printenv | grep ROS&#xA;ROS_MASTER_URI=http://10.42.0.89:11311&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Machine B can get the list of available topics and running nodes correctly&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ rostopic list&#xA;/pose/estimate&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;But can't print out messages in that topic using &lt;code&gt;rostopic echo /pose/estimate&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Do you have any advice? &lt;/p&gt;&#xA;" OwnerUserId="6970" LastActivityDate="2020-06-06T09:31:34.397" Title="ROS Network configuration on multiple machines - Publisher and Subsciber" Tags="&lt;ros&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20751" PostTypeId="2" ParentId="20738" CreationDate="2020-06-01T20:34:41.657" Score="1" Body="&lt;p&gt;As @jsotola guessed in the comments, it is possible you have magnetic interference between your motors and hall effect encoders.  This exact thing happened to me on a very compact electo-mechanical design for a robot hand seen &lt;a href=&quot;https://www.youtube.com/watch?v=NvhCk6BvLBE&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.  If I remember correctly, we wanted to keep our magnetic encoders so we moved the motors farther away.  But you might be able to switch to an optical encoder.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The other possibility is to switch to a full &lt;a href=&quot;https://en.wikipedia.org/wiki/Incremental_encoder#Quadrature_outputs&quot; rel=&quot;nofollow noreferrer&quot;&gt;quadrature&lt;/a&gt; encoder.  Most encoders already do this, but some very cheap encoders (like on the Roomba Create) are only half-quadrature.  With full quadrature, you should be able to determine the direction of travel from the signals, so any vibration will only make it oscillate between 2 values, not increase indefinitely.  With half-quadrature, it is only a square-wave and you have to assume a direction of travel, so noise might make the values increase as you said.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2020-06-01T20:34:41.657" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20752" PostTypeId="1" CreationDate="2020-06-02T00:34:17.387" Score="0" ViewCount="51" Body="&lt;p&gt;let's assume that our robot consists of 3 degree-of-freedoms. In order to move the end-effector of this robot along a straight line, these 3 joints have moved as below:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/4wzsH.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4wzsH.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, if the desired end-effector trajectory is changed, how can I deduce from this deviation of end-effector trajectory, the correspond joint movements? &lt;/p&gt;&#xA;" OwnerUserId="21382" LastActivityDate="2020-06-02T00:34:17.387" Title="From an end-effector trajectory to joints movements" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;motion-planning&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20753" PostTypeId="1" CreationDate="2020-06-02T01:12:45.300" Score="0" ViewCount="29" Body="&lt;p&gt;As a final safety measure regarding some high wattage motors, I want to measure their temperature (either internal or surface) in live time so that I can automatically kill the power if it crosses a threshold. Temperature modules I am finding appear to be mainly for air or liquids; I don't know if there's anything out there to measure the surface of metals (surrounded by air). A couple examples I don't think would work are the DS18B20 and DHT22 modules.&lt;/p&gt;&#xA;" OwnerUserId="26221" LastActivityDate="2020-07-02T17:04:50.587" Title="Measuring a Motor's Internal Temperature" Tags="&lt;arduino&gt;&lt;motor&gt;&lt;sensors&gt;&lt;servomotor&gt;&lt;hardware&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20754" PostTypeId="2" ParentId="20753" CreationDate="2020-06-02T05:58:15.777" Score="0" Body="&lt;p&gt;First, you would need to know:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;which are the parts of the motor that heat most;&lt;/li&gt;&#xA;&lt;li&gt;which are the parts of the motor (or surrounding components) that can get damaged by the heat;&lt;/li&gt;&#xA;&lt;li&gt;which are the maximum temperatures involved;&lt;/li&gt;&#xA;&lt;li&gt;the cause of the heating: friction, EM effects, surrounding components...&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;This might require some serious skills and work. Ideally, the manufacturer of the motor provides you with some information.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you have that information, you can choose the strategy and components to alleviate the issue.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Otherwise, you risk cooling the already &quot;cool&quot; areas, while the heat still does damage to your project.&lt;/p&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Temperature modules I am finding appear to be mainly for air or liquids&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Well, that is for a good reason. To measure the temperature inside a solid, you need to drill a hole in that solid, to reach the desired &quot;point&quot;. Or use some technologies (similar to X-rays, MRI, CAT scanners) which can see inside the solid without material damage.&lt;/p&gt;&#xA;" OwnerUserId="22248" LastActivityDate="2020-06-02T05:58:15.777" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20755" PostTypeId="2" ParentId="20736" CreationDate="2020-06-02T09:24:03.653" Score="1" Body="&lt;p&gt;1)&#xA;There are many ways to express velocities. All of them are mathematical constructs to describe the same motion. They can have some minor advantages/disadvantages depending on the applications. The one main disadvantage of an Euler angle based approach is the &lt;a href=&quot;https://en.wikipedia.org/wiki/Gimbal_lock&quot; rel=&quot;nofollow noreferrer&quot;&gt;gimbal lock problem&lt;/a&gt;. An advantage of Euler angle based approaches is, that they can be more intuitive to comprehend.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Screw_theory&quot; rel=&quot;nofollow noreferrer&quot;&gt;wikipedia site&lt;/a&gt; you quote addresses the advantage of screw-theory based approaches explicitly:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;An important result of screw theory is that geometric calculations for points using vectors have parallel geometric calculations for lines obtained by replacing vectors with screws. This is termed the transfer principle.[4]&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Screw theory has become an important tool in robot mechanics, mechanical design, computational geometry and multibody dynamics. This is in part because of the relationship between screws and dual quaternions which have been used to interpolate rigid-body motions.Based on screw theory, an efficient approach has also been developed for the type synthesis of parallel mechanisms (parallel manipulators or parallel robots)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;2) I am not sure if I interpret you're question right. I think the point you might be missing, is that you assume a constant, fixed set of reference frame and a fixed axis used to describe the motion. If you assume that the axis is fixed you do not have enough parameters left to describe a complex motion. If you consider that the axis is instantaneous, then you have all 6 parameters available and complex motions can be descirbed. Note that the reference frame in which the axis is expressed is fixed, but not the axis itself.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-06-02T09:24:03.653" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20756" PostTypeId="2" ParentId="20753" CreationDate="2020-06-02T16:10:50.927" Score="1" Body="&lt;p&gt;Measuring motor temperature and either forcing a stop or limiting performance when it gets too hot is common practice.  I have always used a simple thermistor.  You should make it have intimate contact with the motor's metal either by using thermal paste or epoxy.  Sometimes, you can put it in a small hole drilled in the motor mount.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The danger with motors getting too hot is the insulation melting off the very thin wires.  So putting the thermistor as close as possible to the winding is important.  With brushless motors you can sometimes get the thermistor inside and mounted right on the coils which is ideal.  Although I think this must usually be done in the factory. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The thermistor datasheet should give you the resistance vs temperature curve.  Being just a resistor, some external support circuitry will be needed.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2020-06-02T16:10:50.927" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20757" PostTypeId="2" ParentId="20736" CreationDate="2020-06-02T16:44:35.230" Score="0" Body="&lt;p&gt;For your second question: Moving in the xy plane, rotating around the z axis can be treated as instantaneously rotating around a &quot;virtual center&quot;, located along the line perpendicular to the xy velocity, with a distance that is the ratio between the speed and the spin rate.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This interpretation highlights the weakness of the &quot;slide along and rotate around an axis&quot; interpretation of twists -- if you were to reduce the spin rate, the axis would go further and further away. As the spin rate goes to zero, the axis distance goes to infinity, at spin=zero the axis is just the axis in the direction of the pure translation, and as the spin becomes negative, the axis jumps to negative infinity and then walks its way back in.&lt;/p&gt;&#xA;" OwnerUserId="11712" LastActivityDate="2020-06-02T16:44:35.230" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20759" PostTypeId="1" CreationDate="2020-06-02T23:25:08.050" Score="2" ViewCount="107" Body="&lt;p&gt;I want to control a robotic manipulator in Cartesian space, using inverse kinematics. I know that I can do this using &lt;span class=&quot;math-container&quot;&gt;$\omega=J^{-1}v$&lt;/span&gt;, where &lt;span class=&quot;math-container&quot;&gt;$\omega$&lt;/span&gt; is a vector of joint velocities, &lt;span class=&quot;math-container&quot;&gt;$J$&lt;/span&gt; is the Jacobian, and &lt;span class=&quot;math-container&quot;&gt;$v$&lt;/span&gt; is a vector of {position, orientation} velocities in Cartesian space. Here, the Jacobian expresses how the Cartesian {positions, orientations} change with respect to the joint angles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is as follows. What I have, is two poses of the manipulator in Cartesian space, pose &lt;span class=&quot;math-container&quot;&gt;$A$&lt;/span&gt; and pose &lt;span class=&quot;math-container&quot;&gt;$B$&lt;/span&gt;. And I want to move the manipulator from &lt;span class=&quot;math-container&quot;&gt;$A$&lt;/span&gt; to &lt;span class=&quot;math-container&quot;&gt;$B$&lt;/span&gt;. How do I create the vector &lt;span class=&quot;math-container&quot;&gt;$v$&lt;/span&gt; needed for the above inverse kinematics equation?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am confused, because currently &lt;span class=&quot;math-container&quot;&gt;$A$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$B$&lt;/span&gt; are transformation matrices, expressing the pose of the manipulator in the fixed world coordinates. So, somehow I need to find the difference between the two poses, and then I need to convert this &quot;difference&quot; into the velocity vector &lt;span class=&quot;math-container&quot;&gt;$v$&lt;/span&gt;. Can anybody help me out please?&lt;/p&gt;&#xA;" OwnerUserId="8880" LastEditorUserId="8880" LastEditDate="2020-06-03T01:47:13.677" LastActivityDate="2020-06-03T21:46:17.647" Title="Controlling the pose of a manipulator using inverse kinematics" Tags="&lt;inverse-kinematics&gt;&lt;manipulator&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20760" PostTypeId="2" ParentId="20759" CreationDate="2020-06-03T07:39:36.197" Score="4" Body="&lt;p&gt;As you already have the Jacobian vector, I assume you also solved the inverse kinematics problem. I will refer to the IK problem as &lt;span class=&quot;math-container&quot;&gt;$f^{-1}$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to get the joint space equivalent of the Cartesian pose A (position and orientation, denoted as &lt;span class=&quot;math-container&quot;&gt;$X_A$&lt;/span&gt;) you can use the inverse kinematics:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$Q_A = f^{-1}(X_A) $$&lt;/span&gt;&#xA;similarly&#xA;&lt;span class=&quot;math-container&quot;&gt;$$Q_B = f^{-1}(X_B) $$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(Please note that in most cases the IK has more then one solutions, I am just considering one, pre-selected solution here.)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now if you give the motors the reference position &lt;span class=&quot;math-container&quot;&gt;$Q_A$&lt;/span&gt; or &lt;span class=&quot;math-container&quot;&gt;$Q_B$&lt;/span&gt; &quot;eventually&quot; you will end up in pose &lt;span class=&quot;math-container&quot;&gt;$A$&lt;/span&gt; and in pose &lt;span class=&quot;math-container&quot;&gt;$B$&lt;/span&gt;. In this case there are no guaranties that the motors will have the same travel time and there are no guarantees about the &quot;shape&quot; of the path the robot will take. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can define a straight line between &lt;span class=&quot;math-container&quot;&gt;$A$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$B$&lt;/span&gt; and interpolate between these points on this straight line. In this case there are solutions for an equivalent interpolation technique for the orientation also. For each of the Cartesian interpolated points you can calculate the joint space equivalent and use them as reference positions for the robot. In this case you will have a straight line path in joint space, but the path will very likely have an oscillating velocity profile as the distance to each point will eventually (in the closed loop position controller) will define the implicit velocity profile. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;This can be done using IK only. If you prefer to use the &lt;span class=&quot;math-container&quot;&gt;$J^{-1}$&lt;/span&gt; you can subtract the current pose of the robot from your target pose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ D = X_B - X_{Current}$$&lt;/span&gt;&#xA;If we consider D a velocity vector, we can interpret it as the velocity needed to reach point B in unit time. If we are talking about millimetre and seconds, then it is mm/s.&#xA;&lt;span class=&quot;math-container&quot;&gt;$$\omega = J^{-1} \times D $$&lt;/span&gt;&#xA; If you give this as a constant reference velocity to the robot it will travel in the direction of B and then surpass B and continue. If you cyclically re-evaluate &lt;span class=&quot;math-container&quot;&gt;$D$&lt;/span&gt; using the current position it will slow down the robot until eventually almost reaching point &lt;span class=&quot;math-container&quot;&gt;$B$&lt;/span&gt;. You can add a multiplication factor to this equation and if it is cyclically evaluated with the updated robot positions you will have the effect of a proportional velocity controller. But the velocity profile obtained this way will still be an implicit profile, which slows down towards the end of the path (only) linearly and tries to start with a high velocity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In order to have a more controlled velocity profile and a straight line you can design an explicit velocity profile. This is called trajectory planning and, most commonly uses an S shaped curve. More about this &lt;a href=&quot;https://blogs.mathworks.com/racing-lounge/2019/11/06/robot-manipulator-trajectory/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you define a velocity profile in Cartesian space (or Task space if we consider pose not just position) at each point in time you can evaluate the velocity profile function at one given point. This is your &lt;span class=&quot;math-container&quot;&gt;$v$&lt;/span&gt; vector. You will need the Cartesian position or the joint space position, depending on how you derive your &lt;span class=&quot;math-container&quot;&gt;$J^{-1}$&lt;/span&gt; it is usually &lt;span class=&quot;math-container&quot;&gt;$(J(Q))^{-1}$&lt;/span&gt; or &lt;span class=&quot;math-container&quot;&gt;$J^{-1}(X)$&lt;/span&gt;. (One could argue that &lt;span class=&quot;math-container&quot;&gt;$(J(Q))^{-1}$&lt;/span&gt; is more helpful as it can use the current joint space coordinates to convert the velocity vector.). To summarize: you define a path in Task space, you plan a velocity profile and you convert this velocity profile, based on the current time step and current robot pose to obtain a new velocity vector in joint space which is given to the velocity controller as a reference value. &lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2020-06-03T08:03:39.650" LastActivityDate="2020-06-03T08:03:39.650" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20761" PostTypeId="1" CreationDate="2020-06-03T08:51:41.513" Score="0" ViewCount="122" Body="&lt;p&gt;&lt;strong&gt;Summary:&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm using new vision of opencv, opencv 4.2 with ubuntu 16.04 and python 2.7&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After built &lt;code&gt;cv_bridge&lt;/code&gt;, the output is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;import rospkg&#xA;ImportError: No module named rospkg&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Here's the more detailed version:&lt;/strong&gt; &lt;a href=&quot;https://github.com/ros-perception/vision_opencv/issues/272&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I tried to build cv_bridge in order to run OpenCV 4.2, Ubuntu 16.04 (ROS Kinetic) and python 2.7.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I will explain what I do for that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I built it before with OpenCV 3.3.1 in order to use GPU and it was very fine and it is still working now. To best my knowledge, there is &lt;code&gt;ros-kinetic-opencv3&lt;/code&gt;, it is working only on CPU. I removed it using &lt;code&gt;sudo apt remove ros-kinetic-opencv3&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After removing, I just downloaded your here and put in my &lt;code&gt;~/catkin_ws/src/&lt;/code&gt;, then making &lt;code&gt;~/catkin_ws/catkin_make&lt;/code&gt; on my PC without any modifications. I think that I was lucky.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, I'd like use some advantage of OpenCV 4.2 that is not with older versions like OpenCV 3.3.1. Meanwhile, I can't update robot's system, it is Ubuntu 16.04.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, I tried to build &lt;code&gt;cv_bridge&lt;/code&gt;, all modifications as following:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I copied and pasted &lt;code&gt;module_opencv3.cpp&lt;/code&gt;, then change its name to &lt;code&gt;module_opencv4.cpp&lt;/code&gt; so that became three models 4, 3 and 2.cpp instead of two 3 and 2.cpp.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next , Sreevan mentioned &lt;a href=&quot;https://github.com/ros-perception/vision_opencv/issues/272#issuecomment-471311300&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; some changes, I did like Sreevan:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;In &lt;code&gt;cv_bridge/src/module_opencv3.cpp&lt;/code&gt; change signature of two functions&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3.1) &lt;code&gt;UMatData* allocate(int dims0, const int* sizes, int type, void* data, size_t* step, int flags, UMatUsageFlags usageFlags) const&lt;/code&gt;&#xA;to&#xA;&lt;code&gt;UMatData* allocate(int dims0, const int* sizes, int type, void* data, size_t* step, AccessFlag flags, UMatUsageFlags usageFlags) const&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3.2) &lt;code&gt;bool allocate(UMatData* u, int accessFlags, UMatUsageFlags usageFlags) const&lt;/code&gt;&#xA;to&#xA;&lt;code&gt;bool allocate(UMatData* u, AccessFlag accessFlags, UMatUsageFlags usageFlags) const&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next, I went to this file &lt;code&gt;~/catkin_ws/src/vision_opencv/cv_bridge$ CMakeLists.txt&lt;/code&gt; and change it as:&#xA;from:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;find_package(OpenCV 3 REQUIRED&#xA;  COMPONENTS&#xA;    opencv_core&#xA;    opencv_imgproc&#xA;    opencv_imgcodecs&#xA;  PATHS /usr/local&#xA;  NO_DEFAULT_PATH&#xA;  CONFIG&#xA;)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;to:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;if ( NOT (OpenCV_VERSION_MAJOR VERSION_LESS 4) )&#xA;find_package(OpenCV REQUIRED&#xA;  COMPONENTS&#xA;    opencv_core&#xA;    opencv_imgproc&#xA;    opencv_imgcodecs&#xA;  #PATHS /usr/local/include&#xA;  PATHS /usr/local&#xA;  NO_DEFAULT_PATH&#xA;  CONFIG&#xA;)&#xA;else()&#xA;find_package(OpenCV 3 REQUIRED&#xA;  COMPONENTS&#xA;    opencv_core&#xA;    opencv_imgproc&#xA;    opencv_imgcodecs&#xA;  PATHS /usr/local&#xA;  NO_DEFAULT_PATH&#xA;  CONFIG&#xA;)&#xA;endif()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Next, I went to this file &lt;code&gt;~/catkin_ws/src/vision_opencv/cv_bridge/src$ CMakeLists.txt&lt;/code&gt; and change it as:&#xA;from:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;if (OpenCV_VERSION_MAJOR VERSION_EQUAL 3)&#xA;  add_library(&lt;span class=&quot;math-container&quot;&gt;${PROJECT_NAME}_boost module.cpp module_opencv3.cpp)&#xA;else()&#xA;  add_library($&lt;/span&gt;{PROJECT_NAME}_boost module.cpp module_opencv2.cpp)&#xA;endif()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;to&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;if (OpenCV_VERSION_MAJOR VERSION_EQUAL 4)&#xA;  add_library(&lt;span class=&quot;math-container&quot;&gt;${PROJECT_NAME}_boost module.cpp module_opencv4.cpp)&#xA;elseif(OpenCV_VERSION_MAJOR VERSION_EQUAL 3)&#xA;  add_library($&lt;/span&gt;{PROJECT_NAME}_boost module.cpp module_opencv3.cpp)&#xA;else()&#xA;  add_library(${PROJECT_NAME}_boost module.cpp module_opencv2.cpp)&#xA;endif()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Next, I think this step is not important, I went to this file &lt;code&gt;~/catkin_ws/src/vision_opencv/cv_bridge$ package.xml&lt;/code&gt; and change any &lt;code&gt;opencv3&lt;/code&gt; to &lt;code&gt;opencv4&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Finally, &lt;code&gt;~/catkin_ws$ catkin_make&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;everything was ok but when I run the code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;import rospy&#xA;import cv2&#xA;import numpy as np&#xA;from sensor_msgs.msg import Image&#xA;from cv_bridge import CvBridge, CvBridgeError&#xA;&#xA;print(cv2.__version__)&#xA;&#xA;class CVControl:&#xA;  def __init__(self):&#xA;    self.bridge = CvBridge()&#xA;    self.image_sub = rospy.Subscriber(&quot;/camera/rgb/image_raw&quot;, Image, self.img_callback)&#xA;  def img_callback(self, data):&#xA;    try:&#xA;      cv_image = self.bridge.imgmsg_to_cv2(data, &quot;bgr8&quot;)&#xA;    except CvBridgeError as e:&#xA;      print e&#xA;&#xA;    frame = cv_image&#xA;    cv2.imshow(&quot;Image window&quot;, frame)&#xA;    cv2.waitKey(3)&#xA;def main():&#xA;  ctrl = CVControl()&#xA;  rospy.init_node('image_converter')&#xA;  try:&#xA;    rospy.spin()&#xA;&#xA;  except KeyboardInterrupt:&#xA;    print &quot;Shutting down&quot;&#xA;    cv2.destroyAllWindows()&#xA;&#xA;if __name__ == '__main__':&#xA;  main()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;It runs by OpenCV 3.3.1&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If I need to run it by OpenCV 4.2&#xA;I added those lines in first the code:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;import sys&#xA;ros_path2 = '/usr/local/lib/python2.7/site-packages'&#xA;ros_path3 = '/usr/lib/python2.7/dist-packages'&#xA;if  ros_path2 and ros_path3 in sys.path:&#xA;  sys.path.remove(ros_path2)&#xA;  sys.path.remove(ros_path3)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The output is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;import rospkg&#xA;ImportError: No module named rospkg&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;What is wrong?&lt;/p&gt;&#xA;" OwnerUserId="24992" LastEditorUserId="24992" LastEditDate="2020-06-06T08:19:24.373" LastActivityDate="2020-06-06T08:19:24.373" Title="OpenCV4.2 and Ubuntu16.04 with python2.7?" Tags="&lt;ros&gt;&lt;python&gt;&lt;opencv&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20762" PostTypeId="2" ParentId="20761" CreationDate="2020-06-03T13:54:23.050" Score="1" Body="&lt;p&gt;Please try this. It would install &lt;code&gt;rospkg&lt;/code&gt; to your computer. (I have faced this issue too in the past, and this would most likely solve it)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;sudo apt-get install python-rospkg&lt;/code&gt;&lt;/p&gt;&#xA;" OwnerUserId="24057" LastActivityDate="2020-06-03T13:54:23.050" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20763" PostTypeId="1" CreationDate="2020-06-03T19:33:25.780" Score="0" ViewCount="124" Body="&lt;p&gt;Let's say I have a robot consisting of a base &lt;span class=&quot;math-container&quot;&gt;$B$&lt;/span&gt; and a manipulator &lt;span class=&quot;math-container&quot;&gt;$M$&lt;/span&gt;. The pose of the manipulator can be expressed as the transformation matrix &lt;span class=&quot;math-container&quot;&gt;$T_{BM}$&lt;/span&gt;. I also have a goal &lt;span class=&quot;math-container&quot;&gt;$G$&lt;/span&gt; which I want to move the manipulator to, which can be expressed as the transformation matrix &lt;span class=&quot;math-container&quot;&gt;$T_{BG}$&lt;/span&gt;. My task is to compute the robot's joint angles &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt; which will set the manipulator to the goal pose.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To do this, I can use inverse kinematics. Now, I have some code which will take in the robot's URDF, and give me the Jacobian. This Jacobian tells me the rate of change of &lt;span class=&quot;math-container&quot;&gt;$M$&lt;/span&gt; with respect to the rate of change of &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt;. In other words, &lt;span class=&quot;math-container&quot;&gt;$J=\frac{d T_{BM}}{d \theta}$&lt;/span&gt;. And so to find the joint angles for the goal pose, I can use &lt;span class=&quot;math-container&quot;&gt;$d \theta = J^{-1} d T_{BM}$&lt;/span&gt;. This gives me the change in joint angles needed to reach the goal pose. (In practice, the Jacobian is just a local linearisation of the derivative, so I would perform this step multiple times).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question is follows. The Jacobian is a 6-by-N matrix (for an N-DOF arm), and so I need a 6-by-1 vector to represent &lt;span class=&quot;math-container&quot;&gt;$d T_{BM}$&lt;/span&gt;. &lt;strong&gt;What should I use for &lt;span class=&quot;math-container&quot;&gt;$d T_{BM}$&lt;/span&gt;, given that all I know are the poses &lt;span class=&quot;math-container&quot;&gt;$T_{BM}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$T_{BG}$&lt;/span&gt;?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here are my thoughts so far. For the linear position, it seems easy enough to just find the linear position difference between &lt;span class=&quot;math-container&quot;&gt;$T_{BM}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$T_{BG}$&lt;/span&gt;. But what I am confused about, is how to calculate the orientation component of &lt;span class=&quot;math-container&quot;&gt;$d T_{BM}$&lt;/span&gt;. The Jacobian defines the rate of change of rotation about the {x, y, z} axes, and so I need to express &lt;span class=&quot;math-container&quot;&gt;$d T_{BM}$&lt;/span&gt; in terms of rotations about these axes. But how do I get this from &lt;span class=&quot;math-container&quot;&gt;$T_{BM}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$T_{BG}$&lt;/span&gt;? I know how to calculate &lt;span class=&quot;math-container&quot;&gt;$T_{MG}$&lt;/span&gt; from these, and then convert the rotation into Euler angles. But it doesn't seem right that these Euler angles are what I should use for &lt;span class=&quot;math-container&quot;&gt;$d T_{BM}$&lt;/span&gt;, because the Jacobian expresses the instantaneous rate of change around all three axes simultaneously, whereas Euler angles describe a rotation by applying each of the rotations sequentially.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;So, any help in understanding this would be great!&lt;/p&gt;&#xA;" OwnerUserId="26519" LastEditorUserId="26519" LastEditDate="2020-06-04T13:16:40.800" LastActivityDate="2020-06-04T13:16:40.800" Title="Inverse Kinematics with Orientations" Tags="&lt;kinematics&gt;&lt;inverse-kinematics&gt;&lt;manipulator&gt;&lt;jacobian&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20764" PostTypeId="2" ParentId="20759" CreationDate="2020-06-03T21:46:17.647" Score="1" Body="&lt;p&gt;If I understand correctly, your end effector is at pose A, you want to move it to pose B, and you have Jacobian pseudo-inverse control set up so that you can specify a pose velocity &lt;span class=&quot;math-container&quot;&gt;$v$&lt;/span&gt; and get a corresponding joint velocity &lt;span class=&quot;math-container&quot;&gt;$\omega$&lt;/span&gt; that will produce that pose velocity.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are several ways to produce the &lt;span class=&quot;math-container&quot;&gt;$v$&lt;/span&gt; vector. All of them start by defining a time period &lt;span class=&quot;math-container&quot;&gt;$T$&lt;/span&gt; for the motion. Your options then include&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Take a simple difference of the poses:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;a. Take the difference between the position components of the start and end poses, divide by &lt;span class=&quot;math-container&quot;&gt;$T$&lt;/span&gt;, and use this as the position component of your velocity,&#xA;&lt;span class=&quot;math-container&quot;&gt;$$ v_{\text{pos}} = \frac{B_{\text{pos}}-A_{\text{pos}}}{T}.$$&lt;/span&gt;&#xA;b. Take a difference between the orientation parameters of &lt;span class=&quot;math-container&quot;&gt;$A$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$B$&lt;/span&gt;, and divide by the time period to get the rotational component of your velocity,&#xA;&lt;span class=&quot;math-container&quot;&gt;$$ v_{\text{rot}} = \frac{B_{\text{rot}}-A_{\text{rot}}}{T}.$$&lt;/span&gt;&#xA;The orientation path you get from following this velocity will depend on your orientation parameterization. Some parameterizations (e.g., quaternions) will give you smooth interpolations, but others (e.g., Euler angles) may end up looking weird and awkward.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You can construct your Jacobian so that it gives the body velocity of the end effector (its velocity with respect to the world, in coordinates instantaneously aligned with the end-effector frame). If you have a world-frame Jacobian, you can get the body frame Jacobian by using the inverse of the end-effector's rotation matrix to rotate from world to local coordinates,&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;J_{b} = \begin{bmatrix} R_{E}^{-1} &amp;amp; \\ &amp;amp; R_{E}^{-1} \end{bmatrix} J_{w}.&#xA;$$&lt;/span&gt;&#xA;Once you have done this, you can find the local transformation from &lt;span class=&quot;math-container&quot;&gt;$A$&lt;/span&gt; to &lt;span class=&quot;math-container&quot;&gt;$B$&lt;/span&gt; (the pose that B would have if the origin were at &lt;span class=&quot;math-container&quot;&gt;$A$&lt;/span&gt;) by multiplying &lt;span class=&quot;math-container&quot;&gt;$B$&lt;/span&gt; by the inverse of &lt;span class=&quot;math-container&quot;&gt;$A$&lt;/span&gt;,&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\Delta^{b} = A^{-1}B.&#xA;$$&lt;/span&gt;&#xA;Taking the matrix log of &lt;span class=&quot;math-container&quot;&gt;$\Delta^{b}$&lt;/span&gt;,&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\delta^{b} = \log_{m}(\Delta^{b})&#xA;$$&lt;/span&gt;&#xA;gives you a matrix whose components are&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\delta^{b} = \begin{bmatrix} 0 &amp;amp; -v^{b}_{rz} &amp;amp; v^{b}_{ry} &amp;amp; v^{b}_{x} \\ v^{b}_{rz} &amp;amp; 0 &amp;amp; -v^{b}_{rx} &amp;amp; v^{b}_{y} \\ -v^{b}_{ry} &amp;amp; v^{b}_{rx} &amp;amp; 0 &amp;amp; v^{b}_{z} \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \end{bmatrix}.&#xA;$$&lt;/span&gt;&#xA;If you have the joints follow the trajectory defined by&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\omega = J_{b}^{-1} \frac{v^{b}}{T}&#xA;$$&lt;/span&gt;&#xA;the end effector will move between the start and end configurations at a constant body velocity.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;You can construct your Jacobian so that it gives the &lt;em&gt;spatial velocity&lt;/em&gt; of the end effector (its velocity with respect to the world, measured as the velocity of the frame attached to the end effector, but currently overlapping the origin). If you have a world-frame Jacobian, you can get the spatial Jacobian by using the  end-effector's position as,&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;J_{w} = \begin{bmatrix} &#xA;%&#xA;\begin{pmatrix} 1 &amp;amp;&amp;amp;\\ &amp;amp;1&amp;amp;\\ &amp;amp;&amp;amp; 1 \end{pmatrix}&#xA;%&#xA;&amp;amp; &#xA;%&#xA;\begin{pmatrix} \phantom{-}0 &amp;amp; -z &amp;amp; \phantom{-}y\\ \phantom{-}z&amp;amp; \phantom{-}0  &amp;amp; -x \\ -y&amp;amp; \phantom{-}x &amp;amp; \phantom{-}0 &#xA;\end{pmatrix} \\ \begin{pmatrix} 0&amp;amp;&amp;amp; \\ &amp;amp;0&amp;amp;\\ &amp;amp;&amp;amp;0 \end{pmatrix} &amp;amp; \begin{pmatrix} 1 &amp;amp;  &amp;amp;  \\  &amp;amp; 1 &amp;amp;  \\ &amp;amp;&amp;amp; 1 \end{pmatrix} \end{bmatrix} J^{s},&#xA;$$&lt;/span&gt;&#xA;with the terms in the upper-right block encoding the cross-product that relates the translational velocities of attached frames.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Once you have done this, you can find the spatial transformation from &lt;span class=&quot;math-container&quot;&gt;$A$&lt;/span&gt; to &lt;span class=&quot;math-container&quot;&gt;$B$&lt;/span&gt; (the global transformation that takes &lt;span class=&quot;math-container&quot;&gt;$A$&lt;/span&gt; to &lt;span class=&quot;math-container&quot;&gt;$B$&lt;/span&gt;) by &lt;em&gt;right&lt;/em&gt;-multiplying &lt;span class=&quot;math-container&quot;&gt;$B$&lt;/span&gt; by the inverse of &lt;span class=&quot;math-container&quot;&gt;$A$&lt;/span&gt;,&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\Delta^{s} = BA^{-1}.&#xA;$$&lt;/span&gt;&#xA;Taking the matrix log of &lt;span class=&quot;math-container&quot;&gt;$\Delta^{s}$&lt;/span&gt;,&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\delta^{s} = \log_{m}(\Delta^{s})&#xA;$$&lt;/span&gt;&#xA;gives you a matrix whose components are of the same form as those of &lt;span class=&quot;math-container&quot;&gt;$\delta^{b}$&lt;/span&gt;,&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\delta^{s} = \begin{bmatrix} 0 &amp;amp; -v^{s}_{rz} &amp;amp; v^{s}_{ry} &amp;amp; v^{s}_{x} \\ v^{s}_{rz} &amp;amp; 0 &amp;amp; -v^{s}_{rx} &amp;amp; v^{s}_{y} \\ -v^{s}_{ry} &amp;amp; v^{s}_{rx} &amp;amp; 0 &amp;amp; v^{s}_{z} \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \end{bmatrix}.&#xA;$$&lt;/span&gt;&#xA;If you have the joints follow the trajectory defined by&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\omega = J_{s}^{-1} \frac{v^{s}}{T}&#xA;$$&lt;/span&gt;&#xA;the end effector will move between the start and end configurations at a constant spatial velocity (i.e. the motion will be as if the end effector was extended to cover the whole space, and someone at the origin was propelling it at what they see as a constant velocity). &lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;An interesting property of physical motions is that both 2 and 3 produce the same trajectory -- a helix around a fixed axis, with special cases of a planar arc when the rotation axis is perpendicular to the translation vector, and a straight line when there is no rotation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For a smoother motion, you can use a time parameterization that changes the speed across the path so that it eases into and out of the motion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Beyond the options described above, you start to get deep into motion planning, where you choose paths that minimize things like joint torques or payload acceleration/jerk, take into account the mass distribution of the payload, or include the masses of the links as well as the payload.&lt;/p&gt;&#xA;" OwnerUserId="11712" LastActivityDate="2020-06-03T21:46:17.647" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20765" PostTypeId="2" ParentId="20763" CreationDate="2020-06-04T08:59:46.483" Score="2" Body="&lt;p&gt;The Jacobian is a 6x6 matrix and there are multiple ways it can be derived. The concept of the Jacobian has its roots in Mathematics, where it is not stricly tied to any problem, it is just a &lt;a href=&quot;https://en.wikipedia.org/wiki/Jacobian_matrix_and_determinant&quot; rel=&quot;nofollow noreferrer&quot;&gt;matrix of partial derivates of an equation system&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As such it is obtained as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;J = \frac{\partial f}{\partial \theta} = &#xA;\begin{bmatrix}&#xA;  \frac{\partial f_{\text{1}}}{\partial \theta_1}, &amp;amp; \frac{\partial f_{\text{1}}}{\partial \theta_2} &amp;amp; ..., \frac{\partial f_{\text{1}}}{\partial \theta_n} \\&#xA;.\\&#xA;.\\&#xA;.\\&#xA;  \frac{\partial f_{\text{n}}}{\partial \theta_1}, &amp;amp; \frac{\partial f_{\text{n}}}{\partial \theta_2} &amp;amp; ..., \frac{\partial f_{\text{n}}}{\partial \theta_n}&#xA;\end{bmatrix}&#xA;$$&lt;/span&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;When definee like this:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$ \dot X = J \times \dot Q$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$\dot X = [\dot x, \dot y, \dot z, \dot A, \dot B, \dot C]^T$&lt;/span&gt; and &#xA;&lt;span class=&quot;math-container&quot;&gt;$\dot Q = [\dot q_1, \dot q_2, \dot q_3, \dot q_4, \dot q_5, \dot q_6]^T$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are other ways to obtain this matrix, but the other ways are just applying specifics of the robotics domain (to be more precise, specifics of a robot stucture in combination with specifics of the Denavit Hartenberg convention) to obtain the same result.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If we use the form above we can better identify the equations in question. &lt;span class=&quot;math-container&quot;&gt;$f_1$&lt;/span&gt; represents the equation used to calculate the coordinate &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; of the end-effector. it can be written as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ x =f_1(\theta_1, \theta_2, ... \theta_n)$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If we consider a 6 DOF robot&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ x =f_1(\theta_1, \theta_2, ... \theta_6)$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$ y =f_2(\theta_1, \theta_2, ... \theta_6)$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$ z =f_3(\theta_1, \theta_2, ... \theta_6)$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$ A =f_4(\theta_1, \theta_2, ... \theta_6)$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$ B =f_5(\theta_1, \theta_2, ... \theta_6)$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$ C =f_6(\theta_1, \theta_2, ... \theta_6)$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now you can see from here, that these are the forward kinematics equations, and the Jacobi matrix obtained this way will be dependent on &lt;span class=&quot;math-container&quot;&gt;$\theta_1, ... \theta_6$&lt;/span&gt;. Furthermore, it can be observed, that these equations are in fact the ones which determine in which frame are the orientations expressed and in which order. Any combination is possible, in any order, as long as the mathematical equality stands. So it is important to notice that the concept of the Jacobi matrix itself is agnostic of how the rotations are expressed. It is the underlying equations which define the rotation order and the frame in which the rotations are expressed in. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Moving a robot can be very simple and very complex and anywhere in between. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Simplest is to use the inverse kinematics function, calculate the joint space coordinate of the target pose and use those as reference values for the position controller, no Jacobi involved, but it needs inverse kinematics. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Jacobi matrix converts velocities, not position. In order to use it, one must  task space (Cartesian space) velocities and feed those to a velocity controller. Here care must be taken to end up with 0 velocity at the target point in order to stay at the target position. See the &lt;a href=&quot;https://robotics.stackexchange.com/questions/20759/controlling-the-pose-of-a-manipulator-using-inverse-kinematics&quot;&gt;answers to this question&lt;/a&gt; for more details about this.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-06-04T08:59:46.483" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20766" PostTypeId="1" CreationDate="2020-06-04T09:57:53.677" Score="0" ViewCount="14" Body="&lt;p&gt;I would like to know &lt;strong&gt;What is the dynamic model of a biped robot in double support phase?&lt;/strong&gt; As drawn in Fig.b and Fig.c.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have already known (partly) how to model the single support phase drawn in Fig.a. That is to treat it like a classical robotic arm. The support foot is firmly attached to the ground as long as the center of mass coincides with the ZMP. Then I can use Newton-Euler or Lagrangian approach to get this dynamic model:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$ \tau = M(\theta)\ddot{\theta} + C(\theta,\dot{\theta})\dot{\theta} + G(\theta) $$&lt;/span&gt;&#xA;But continue using this model to control the biped robot to follow a certain trajectory when the CoM exceeds the supporting foot area might render the supporting foot unstable. (Though that's not mainly my question.) &#xA;All I am saying is, I am more familiar with classical open-chain robotic arm modeling. &lt;strong&gt;How should I model the robot in a double supporting phase where it's actually a close-chain robot.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Recommending books or other materials are also appreciated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/lGGqi.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/lGGqi.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt; &lt;/p&gt;&#xA;" OwnerUserId="26123" LastActivityDate="2020-06-04T09:57:53.677" Title="What is the dynamic model of a biped robot in double support phase?" Tags="&lt;dynamics&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20767" PostTypeId="2" ParentId="20745" CreationDate="2020-06-04T10:11:30.860" Score="2" Body="&lt;p&gt;A general approach would be to construct a so called axis-angle representation and convert that to a rotation matrix representation. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;On order to do so, one could start with a normal vector of the triangle. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's take the &lt;span class=&quot;math-container&quot;&gt;$P_1P_2$&lt;/span&gt; line and construct the perpendicular of the triangle from &lt;span class=&quot;math-container&quot;&gt;$P_3$&lt;/span&gt; to &lt;span class=&quot;math-container&quot;&gt;$P_1P_2$&lt;/span&gt;. Let's call &lt;span class=&quot;math-container&quot;&gt;$P_4$&lt;/span&gt; the point where the perpendicular intersects &lt;span class=&quot;math-container&quot;&gt;$P_1P_2$&lt;/span&gt; .Based on &lt;a href=&quot;https://stackoverflow.com/questions/9368436/3d-perpendicular-point-on-line-from-3d-point&quot;&gt;this answer&lt;/a&gt; the coordinates of this point can be found as: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\alpha = \frac{(x_3-x_1) \cdot (x_2-x_1) + (y_3-y_1) \cdot (y_2-y_1) + (z_3-z_1) \cdot (z_2-z_1)}  {(x_2-x_1) \cdot (x_2-x_1) + (y_2-y_1) \cdot (y_2-y_1) + (z_2-z_1) \cdot (z_2-z_1)}$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$P_4 = (x_1 + \alpha  \cdot (x_2-x_1), y_1+\alpha \cdot (y_2-y_1), z_1 + \alpha \cdot (z_2-z_1))$&lt;/span&gt;&#xA;where:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$P1 = (x_1, y_1, z_1)$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$P2 = (x_2, y_2, z_2)$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$P3 = (x_3, y_3, z_3)$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;so &lt;span class=&quot;math-container&quot;&gt;$P_1P_2$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$P_3P_4$&lt;/span&gt; are perpendicular and their intersection point is &lt;span class=&quot;math-container&quot;&gt;$P_4$&lt;/span&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Applied to the coordinates described in the attached google sheet file the triangle (in blue) and the perpendicular in red is presented in the following figure:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/prbhN.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/prbhN.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We can now construct 2 perpendicular vectors, in the &lt;span class=&quot;math-container&quot;&gt;$P_1P_2P_3$&lt;/span&gt; plane which share their origin in &lt;span class=&quot;math-container&quot;&gt;$P_4$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\vec v_1 = P_3 - P_4$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\vec v_2 = P_1 - P_4$&lt;/span&gt; (we could also use &lt;span class=&quot;math-container&quot;&gt;$\vec v_2 = P_2 - P_4$&lt;/span&gt;, this would cause an 180 deg offset around the z axis)&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The cross product of these two vectors will be the normal of the &lt;span class=&quot;math-container&quot;&gt;$P_1P_2P_3$&lt;/span&gt; plane.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\vec v_3 = \vec v_1 \times \vec v_2$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;care must be taken to make sure that &lt;span class=&quot;math-container&quot;&gt;$\vec v_3$&lt;/span&gt; points &quot;upwards or downwards&quot;, depending on the cross product order (&lt;span class=&quot;math-container&quot;&gt;$\vec v_1 \times \vec v_2$&lt;/span&gt; or &lt;span class=&quot;math-container&quot;&gt;$\vec v_2 \times \vec v_1$&lt;/span&gt;). The preferred one has to be chosen.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The three vectors now form an orthogonal coordinate system. in order to get the axes of this coordinate system the vectors should be normalized. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\vec x_n = normalize(\vec v_2) = [x_{xn}, y_{xn}, z_{xn}]$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\vec y_n = normalize(\vec v_1) = [x_{yn}, y_{yn}, z_{yn}]$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\vec z_n = normalize(\vec v_3) = [x_{zn}, y_{zn}, z_{zn}]$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please note that &lt;span class=&quot;math-container&quot;&gt;$\vec v_2$&lt;/span&gt; has been chosen as &lt;span class=&quot;math-container&quot;&gt;$\vec x_n$&lt;/span&gt; based on the additional information in the question, that &lt;span class=&quot;math-container&quot;&gt;$P_1P_2$&lt;/span&gt; is parallel to the &lt;span class=&quot;math-container&quot;&gt;$X$&lt;/span&gt; axis of the belt/rectangle frame. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;A rotation matrix can also be interpreted as a &lt;a href=&quot;https://engineering.purdue.edu/~bethel/rot.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;direction cosine matrix&lt;/a&gt;, based in this, the rotation matrix of the plane can be written as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;R = \begin{bmatrix} x_{xn} &amp;amp; y_{xn} &amp;amp;z_{xn} \\&#xA; x_{yn} &amp;amp; y_{yn} &amp;amp; z_{yn} \\&#xA; x_{zn} &amp;amp; y_{zn} &amp;amp; z_{zn} \end{bmatrix}.&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2020-06-09T09:08:08.220" LastActivityDate="2020-06-09T09:08:08.220" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="20768" PostTypeId="2" ParentId="20761" CreationDate="2020-06-04T19:45:00.900" Score="0" Body="&lt;p&gt;&lt;a href=&quot;https://www.python.org/doc/sunset-python-2/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Python 2.7 has been sunsetted&lt;/a&gt;. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;From the official documentation:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;&lt;strong&gt;What will happen if I did not upgrade by January 1st, 2020?&lt;/strong&gt;&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;If people find catastrophic security problems in Python 2, or in software written in Python 2, then most volunteers will not help fix them. &lt;strong&gt;If you need help with Python 2 software, then many volunteers will not help you, and over time fewer and fewer volunteers will be able to help you.&lt;/strong&gt; You will lose chances to use good tools because they will only run on Python 3, and you will slow down people who depend on you and work with you.&lt;/p&gt;&#xA;  &#xA;  &lt;p&gt;Some of these problems started on January 1. Other problems will grow over time.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;(emphasis added)&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-06-04T19:45:00.900" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="20769" PostTypeId="1" AcceptedAnswerId="20770" CreationDate="2020-06-05T01:33:57.173" Score="1" ViewCount="276" Body="&lt;p&gt;I've done the FK and IK for this robot:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/341lv.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/341lv.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;On those I seem to be able to get to the positions I want on the simulator so I'm assuming nothing is wrong with my FK and IK calculations. I've tried to calculate the Jacobian to later determine the speed at which each actuator needs to go while inputting a linear speed for the endpoint. I assume I can calculate that by inverting the Jacobian matrix and multiplying it to the speed I want, getting a 1x3 matrix with the speeds for each joint.&#xA;However, the Jacobian matrix I get isn't square (6x3) and even if I only consider the linear speed part (top part which is square), that part isn't possible to invert (rank of it is lower than it's length).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here's the parameters that constitute the Jacobian matrix that I calculated:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$Z^0_0 = \begin{bmatrix}0  \\  0  \\  1\end{bmatrix}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$Z^0_1 = \begin{bmatrix}\sin(\theta_1)  \\  -\cos(\theta_1)  \\  0\end{bmatrix}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$Z^0_2 = \begin{bmatrix}\cos(\theta_1)*\sin(\theta_2)+\cos(\theta_2)*\sin(\theta_1)  \\  \sin(\theta_1)*\sin(\theta_2)-\cos(\theta_1)*\cos(\theta_2)  \\  0\end{bmatrix}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$O^0_0 = \begin{bmatrix}0 \\ 0  \\  0\end{bmatrix}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$O^0_1 = \begin{bmatrix}0  \\  0  \\  d_1\end{bmatrix}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$O^0_2 = \begin{bmatrix}d_2*\cos(\theta_2)  \\  d_2*\sin(\theta_2)  \\  d_1\end{bmatrix}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$O^0_3 = \begin{bmatrix}d_3*\cos(\theta_3)+d_2*\cos(\theta_2)*\cos(\theta_3)-d_2*\sin(\theta_2)*\sin(\theta_3)  \\  d_3*\sin(\theta_3)+d_2*\cos(\theta_2)*\sin(\theta_3)+d_2*\cos(\theta_3)*\sin(\theta_2)  \\  d_1\end{bmatrix}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$J = \begin{bmatrix} Z^0_0\times(O^0_3 - O^0_0) &amp;amp; Z^0_1\times(O^0_3 - O^0_1) &amp;amp; Z^0_2\times(O^0_3 - O^0_2) \\ Z^0_0 &amp;amp; Z^0_1 &amp;amp; Z^0_2\end{bmatrix}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ \dot{q}(t) = \begin{bmatrix} \dot{q_1} \\ \dot{q_2} \\ \dot{q_3} \end{bmatrix}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What am I doing wrong?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: Added the DH parameters and used MathJax to better show the matrixes.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;\begin{array} {|r|r|}\hline link &amp;amp; a_i  &amp;amp; \alpha_i &amp;amp; d_i &amp;amp; \theta_i \\ \hline 1 &amp;amp; 0 &amp;amp; -90º &amp;amp; d1 &amp;amp; \theta_1* \\ \hline 2 &amp;amp; d2 &amp;amp; 0 &amp;amp; 0 &amp;amp; \theta_2* \\ \hline 3 &amp;amp; d3 &amp;amp; 0 &amp;amp; 0 &amp;amp; \theta_3* \\ \hline  \end{array}&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT2: Added the transformation matrixes for each joint.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ H^1_0 = \begin{bmatrix} \cos(\theta_1) &amp;amp; 0 &amp;amp; \sin(\theta_1) &amp;amp; 0 \\ \sin(\theta_1) &amp;amp; 0 &amp;amp; -\cos(\theta_1) &amp;amp; 0 \\ 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; d_1 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1\end{bmatrix} $$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ H^2_1 = \begin{bmatrix} \cos(\theta_2) &amp;amp; -\sin(\theta_2) &amp;amp; 0 &amp;amp; d_2*\cos(\theta_2) \\ \sin(\theta_2) &amp;amp; \cos(\theta_2) &amp;amp; 0 &amp;amp; d_2*\sin(\theta_2) \\ 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1\end{bmatrix} $$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ H^3_2 = \begin{bmatrix} \cos(\theta_3) &amp;amp; -\sin(\theta_3) &amp;amp; 0 &amp;amp; d_3*\cos(\theta_3) \\ \sin(\theta_3) &amp;amp; \cos(\theta_3) &amp;amp; 0 &amp;amp; d_3*\sin(\theta_3) \\ 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1\end{bmatrix} $$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ H^2_0 = H^2_1 * H^1_0  $$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$ H^3_0 = H^3_2 * H^2_1 * H^1_0 $$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;From &lt;span class=&quot;math-container&quot;&gt;$ H^n_0 $&lt;/span&gt; I'm getting &lt;span class=&quot;math-container&quot;&gt;$ Z_n $&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$ O^n_0 $&lt;/span&gt; which are: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$Z_n =\begin{bmatrix}H^n_0(1,3) \\ H^n_0(2,3) \\ H^n_0(3,3) \end{bmatrix} , O^n_0 = \begin{bmatrix}H^n_0(1,4) \\ H^n_0(2,4) \\ H^n_0(3,4) \end{bmatrix}$$&lt;/span&gt;&lt;/p&gt;&#xA;" OwnerUserId="26524" LastEditorUserId="26524" LastEditDate="2020-06-05T15:45:38.710" LastActivityDate="2020-06-05T17:31:35.733" Title="Jacobian to determine the linear velocity of each node (DOF 3 RRR robot arm)" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;jacobian&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="20770" PostTypeId="2" ParentId="20769" CreationDate="2020-06-05T02:01:47.423" Score="1" Body="&lt;p&gt;Your axes and link vectors seem off. The axes &lt;span class=&quot;math-container&quot;&gt;$z_{1}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$z_{2}$&lt;/span&gt; should be parallel, and your &lt;span class=&quot;math-container&quot;&gt;$O^{0}_{2}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$O^{0}_{3}$&lt;/span&gt; don’t seem to be accounting for all the rotations that occur prior to the link. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Note that as drawn, your arm is in a singular configuration. Shoulder and elbow will both move the end effector up, but no joint can extend it further (because the elbow is hyperextended, placing the forearm inline with the upper arm). This means that if you try taking the inverse of the position block of the Jacobian, you’ll find it to be rank deficient. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;———&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Edit: I’m not a fan of DH for this. A better procedure would be:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Identify your reference configuration.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Take the local definition for each joint axis as its axis direction in the reference configuration.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Take the local link vector as its vector in the reference configuration.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Convert each rotation axis into a rotation matrix. If you’ve chosen a good reference configuration, the resulting matrices will be canonical &lt;span class=&quot;math-container&quot;&gt;$R_x$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$R_{y}$&lt;/span&gt;, or &lt;span class=&quot;math-container&quot;&gt;$R_{z}$&lt;/span&gt; matrices.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Get the net rotations along the chain by taking the cumulative product of the rotation matrices &lt;em&gt;working left to right as you go down the chain&lt;/em&gt;.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Get the link vectors by multiplying the net rotations into the corresponding local link vectors.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Get the link endpoints by taking the cumulative sum of the link vectors.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Get the rotation axes by multiplying the net rotations into the corresponding local link axes.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;If you want to get one step fancier, you can build joint and link transformation matrices by augmenting the rotation matrices with a zero translation vector and the link transformation matrices with an identity rotation matrix. You can then take the left-to-right cumulative product to get the transform to each point on the chain.&lt;/p&gt;&#xA;" OwnerUserId="11712" LastEditorUserId="11712" LastEditDate="2020-06-05T17:31:35.733" LastActivityDate="2020-06-05T17:31:35.733" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="20771" PostTypeId="1" CreationDate="2020-06-05T11:32:06.620" Score="0" ViewCount="6" Body="&lt;p&gt;I have been watching this video series to try to understand the kalman filter. The instructor has this layout explaining the process. What I don't understand is the difference in the error matrix &lt;code&gt;Z&lt;/code&gt; in &lt;strong&gt;equation 5&lt;/strong&gt; and observation errors. The error matrix in the title is the &lt;code&gt;Z&lt;/code&gt; matrix.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/BO4id.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/BO4id.png&quot; alt=&quot;Kalman Filter Process&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The image above is from &lt;a href=&quot;https://www.youtube.com/watch?v=Fuy73n6_bBc&amp;amp;list=PLX2gX-ftPVXU3oUFNATxGXY90AULiqnWT&amp;amp;index=27&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; and he elaborates about &lt;strong&gt;equation 5&lt;/strong&gt; &lt;a href=&quot;https://youtu.be/_9qhtXqaT8c?t=43&quot; rel=&quot;nofollow noreferrer&quot;&gt;in this video&lt;/a&gt;. In the elaboration video, he says that &lt;code&gt;Z&lt;/code&gt; differs from the observation errors in the bottom right corner and these errors represent delays in the electronics. These errors makes sense to me but I thought they were the observation errors. What are observation errors then? Is there a physical explanation to them? &lt;/p&gt;&#xA;" OwnerUserId="15157" LastActivityDate="2020-06-05T11:32:06.620" Title="Difference between observed errors and this error matrix in kalman filter?" Tags="&lt;kalman-filter&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20772" PostTypeId="1" AcceptedAnswerId="20774" CreationDate="2020-06-05T12:04:15.483" Score="0" ViewCount="42" Body="&lt;p&gt;I don't understand where the matrices &lt;code&gt;A&lt;/code&gt; and &lt;code&gt;A transpose&lt;/code&gt; come from in the equation in &lt;a href=&quot;https://youtu.be/H7x4yZbgNOk&quot; rel=&quot;nofollow noreferrer&quot;&gt;this series&lt;/a&gt;. I have done a one-dimensional example in the series but I don't see how to derive these matrices in matrix form.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/B4f7L.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/B4f7L.png&quot; alt=&quot;Equation image&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="15157" LastActivityDate="2020-06-05T14:14:27.067" Title="Where do matrix A and A transpose come from in calculating the predicted covariance matrix?" Tags="&lt;kalman-filter&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20773" PostTypeId="1" AcceptedAnswerId="20775" CreationDate="2020-06-05T13:22:24.630" Score="0" ViewCount="19" Body="&lt;p&gt;What is the difference between constant curvature kinematics and rigid link kinematics and what is their respective definition?&lt;/p&gt;&#xA;" OwnerUserId="26528" LastEditorUserId="10748" LastEditDate="2020-06-08T10:08:23.423" LastActivityDate="2020-06-08T10:08:23.423" Title="Difference between constant curvature kinematics and rigid link kinematics" Tags="&lt;kinematics&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20774" PostTypeId="2" ParentId="20772" CreationDate="2020-06-05T14:14:27.067" Score="2" Body="&lt;p&gt;The &lt;span class=&quot;math-container&quot;&gt;$A$&lt;/span&gt; matrix (sometimes &lt;span class=&quot;math-container&quot;&gt;$F$&lt;/span&gt;) comes from your equations of motion. There's a &lt;a href=&quot;https://en.wikipedia.org/wiki/Kalman_filter#Example_application,_technical&quot; rel=&quot;nofollow noreferrer&quot;&gt;technical example on Wikipedia&lt;/a&gt; that goes over modeling position and speed of a truck. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can model speed and position with the following equations:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;x = x_0 + \Delta t \dot{x} + \frac{1}{2}\Delta t^2 \ddot{x} \\&#xA;\dot{x} = \dot{x}_0 + \Delta t \ddot{x} \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Assuming your input &lt;span class=&quot;math-container&quot;&gt;$u$&lt;/span&gt; is the acceleration (&lt;span class=&quot;math-container&quot;&gt;$u = \ddot{x}$&lt;/span&gt;), and being more explicit with the coefficients on everything, you could rewrite the above as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;x = \left(1\right)x_0 + \left(\Delta t\right) \dot{x} + \left(\frac{1}{2}\Delta t^2\right) u \\&#xA;\dot{x} = \left(0\right)x_0 + \left(1\right)\dot{x}_0 + \left(\Delta t\right)u \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And then you convert to matrix form:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\left[\begin{matrix}&#xA;x \\&#xA;\dot{x}\end{matrix}\right] = &#xA;\left[\begin{matrix}&#xA;1 &amp;amp; \Delta t \\&#xA;0 &amp;amp; 1 \end{matrix}\right]&#xA;\left[\begin{matrix}&#xA;x_0 \\&#xA;\dot{x}_0 \end{matrix}\right] + \left[\begin{matrix}&#xA;\frac{1}{2}\Delta t^2 \\&#xA;\Delta t\end{matrix}\right]u&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The current sample being:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;x_k = \left[\begin{matrix}&#xA;x \\&#xA;\dot{x}\end{matrix}\right]&#xA;$$&lt;/span&gt;&#xA;and the previous sample being:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;x_{k-1} = \left[\begin{matrix}&#xA;x_0 \\&#xA;\dot{x}_0 \end{matrix}\right]&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You can then define your &quot;state matrix&quot; &lt;span class=&quot;math-container&quot;&gt;$A$&lt;/span&gt; or &lt;span class=&quot;math-container&quot;&gt;$F$&lt;/span&gt; as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;A = &#xA;\left[\begin{matrix}&#xA;1 &amp;amp; \Delta t \\&#xA;0 &amp;amp; 1 \end{matrix}\right]&#xA;$$&lt;/span&gt;&#xA;and your input matrix &lt;span class=&quot;math-container&quot;&gt;$B$&lt;/span&gt; or &lt;span class=&quot;math-container&quot;&gt;$G$&lt;/span&gt; as:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;B = \left[\begin{matrix}&#xA;\frac{1}{2}\Delta t^2 \\&#xA;\Delta t\end{matrix}\right]&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And so you have:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;x_k = Ax_{k-1} + Bu&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And then those are used with the output equations:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;y_k = Cx_k + Du&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;to form the Kalman filter. These are all standard matrices from the &lt;a href=&quot;https://en.wikipedia.org/wiki/State-space_representation&quot; rel=&quot;nofollow noreferrer&quot;&gt;state space representation&lt;/a&gt; of a system. &lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-06-05T14:14:27.067" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="20775" PostTypeId="2" ParentId="20773" CreationDate="2020-06-05T16:40:51.170" Score="1" Body="&lt;p&gt;Rigid link kinematics assumes that the robot is made of rigid structural elements connected by pivot or sliding joints, and describes the locations of points on the robot (or more generally, the locations and orientations of frames attached to the robot) as a function of the joint angles.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Constant-curvature kinematics assumes that the robot is made up of a series of segments that can bend into constant-curvature (i.e., circular) arcs, and describes the locations of points (or locations and orientations of frames) as a function of the segment curvatures.&lt;/p&gt;&#xA;" OwnerUserId="11712" LastActivityDate="2020-06-05T16:40:51.170" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20776" PostTypeId="1" CreationDate="2020-06-05T19:13:21.913" Score="0" ViewCount="22" Body="&lt;p&gt;I originally wanted to make a shoddy vr system with two IMU's in two seperate right and left controllers, which their values could be sent over wifi to the game service unity so I can plot their position and incorperate them into half-assed vr games. But I quickly learned that although some problems with IMU tracking can be solved, gimbal lock with quaternions, and yaw drift with magnetometers, the problem of dead reckoning was just inherent in the process. I since have figured out it much better to use sensor fusion.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is my first idea for sensor fusion, so it could be wrong, but since I would like to make the setup as portable as possible, i would like to just have one IR camera in my headset and then have the two controllers be like trackers, which their position/depth in 3D space could be handled by the cameras, and orientation by the IMU. And when the trackers went out-of-bounds, I could use the IMU's accelerometer or simply freeze there position untill they went back in scope since it would not be third person and not matter what they do when you cannot see them. And in my scenario, I have the dvantage of only needing the controllers tracked because the vr 'headset' in this circumstance will be your phone.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;IR tracking was just my first idea, so if there may be a better method or more cost effective way to preform sensor fusion, do let me know. Since I want it to be as portable as possible, if IR tracking could not be preformed with just one sensor, yet another method could, thereby making it more portable, do let me know. My preferences for this project are as portable, cost effective, and user-friendly as possible. I have tried looking up on google for how to get started but have found no good results. So maybe the good people of arduino can help me! All input is appreciated. I can provide more details if nesecarry, and as always, &lt;em&gt;thank you!&lt;/em&gt; =)&lt;/p&gt;&#xA;" OwnerUserId="26170" LastActivityDate="2020-06-05T19:13:21.913" Title="get position of objects using ir" Tags="&lt;sensors&gt;&lt;computer-vision&gt;&lt;imu&gt;&lt;sensor-fusion&gt;&lt;wireless&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20778" PostTypeId="2" ParentId="20750" CreationDate="2020-06-06T09:31:34.397" Score="1" Body="&lt;p&gt;I had this problem and I solved my problem by adding both machines' hostname to /etc/hosts. refer to &lt;a href=&quot;https://husarion.com/tutorials/ros-tutorials/5-running-ros-on-multiple-machines/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://husarion.com/tutorials/ros-tutorials/5-running-ros-on-multiple-machines/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18774" LastActivityDate="2020-06-06T09:31:34.397" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20779" PostTypeId="1" CreationDate="2020-06-06T21:13:29.297" Score="1" ViewCount="62" Body="&lt;p&gt;How can the manipulability of a robot arm be calculated when the kinematics are described with screw theory such as dual quaternions?  These methods are sigularity-free, but what could we say about dexterity?&lt;/p&gt;&#xA;" OwnerUserId="26539" LastEditorUserId="110" LastEditDate="2020-06-09T19:00:09.913" LastActivityDate="2020-11-06T19:02:20.273" Title="Dexterity calculation with dual quaternions" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;manipulator&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20782" PostTypeId="1" CreationDate="2020-06-07T15:30:45.807" Score="0" ViewCount="37" Body="&lt;p&gt;I'm currently taking Udacity's AI for robotics course and came across a question that stumped me. The problem plays on localization probability given uncertainty in our measurement updates.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/ag2YO.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ag2YO.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first measurement distribution I was able to solve no problem. Original distribution was &lt;code&gt;[0.2, 0.2, 0.2, 0.2, 0.2]&lt;/code&gt;, multiply greens by 0.1, reds by 0.9, normalize and I get &lt;code&gt;[0.04761904761904762, 0.04761904761904762, 0.4285714285714286, 0.04761904761904762, 0.4285714285714286]&lt;/code&gt;. What's confusing me is how to manage the move. If the world was cyclic, I would just shift all the probabilities to the right by one. But since he says there is a wall blocking the right side...I'm not sure if the fifth element of resulting shifted matrix should be P(red) * P(green) or P(red) + P(green). I've tried both and neither have worked.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Any advice would be appreciated!&lt;/p&gt;&#xA;" OwnerUserId="22640" LastEditorUserId="22640" LastEditDate="2020-06-07T15:58:16.183" LastActivityDate="2020-06-07T15:58:16.183" Title="Robot Localization - Motion and Sense Probability" Tags="&lt;slam&gt;&lt;localization&gt;&lt;motion-planning&gt;&lt;probability&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20784" PostTypeId="1" AcceptedAnswerId="20785" CreationDate="2020-06-08T09:11:01.710" Score="0" ViewCount="34" Body="&lt;p&gt;In my case, I have a library handling 3D input data and want to write tests in order to make sure that my coordinate transform chains for getting the 3D points from A to B are correct.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem I see here is that in order to write a test, I have to reimplement the coordinate transformation on the test level and compare its result to what my code does. Isn't that a chicken an egg problem? What tells me that my implementation in my testing is more correct than the code itself?&lt;/p&gt;&#xA;" OwnerUserId="4429" LastActivityDate="2020-06-08T11:15:17.177" Title="How do you write unit tests for robotics related software?" Tags="&lt;coordinate-system&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20785" PostTypeId="2" ParentId="20784" CreationDate="2020-06-08T09:58:16.127" Score="4" Body="&lt;p&gt;Your statement about the need to reimplement the same feature in order to test it could be applied for all software which needs to be unit-tested and it is not specific only to your problem. A unit test does not implement redundant functionality, in this case an error cannot be attributed to a faulty implementation in the tested code, as it can just as easily be a faulty implementation of the test code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Unit tests for transformations usually work with data where you can devise the correct output for a given input by other means that the currently implemented software which needs testing. Ways to do this are:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Fringe cases like zero transformations where the output is the same as the input&lt;/li&gt;&#xA;&lt;li&gt;Cases where the answer is easily predictable, like 90 (180, 270, 360, -90, -180, -360) degrees rotations without translations or simple translations without rotations&lt;/li&gt;&#xA;&lt;li&gt;Back-and forth transformation chains: define a complex chain and define the exact opposite transformations and at the end you have to end up in the starting point&lt;/li&gt;&#xA;&lt;li&gt;Compound transformation chains: e.g. two consecutive rotations around the same axis should be equal to one rotation around the same axis with the compounded magnitude, or more complex compound operations can be also defined.&lt;/li&gt;&#xA;&lt;li&gt;Compare against mock data originating from other systems: create a dataset in Matlab, Octave, a CAD Software package or any other trusted source which includes the origin the transformation and the transformed entity. Save these to a file, read them in for the test and compare the results. (you could do also connect to such software and execute the transinformation, but that would introduce unnecessary dependencies in your tests)&lt;/li&gt;&#xA;&lt;li&gt;Carefully hand-craft a &quot;master&quot; or &quot;golden&quot; dataset for validation, same as above, but the file is created manually.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Probably a combination of the above will lead to good results, but these test should be treated with an appropriate amount of scepticism.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2020-06-08T11:15:17.177" LastActivityDate="2020-06-08T11:15:17.177" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20786" PostTypeId="1" CreationDate="2020-06-08T13:13:37.107" Score="0" ViewCount="50" Body="&lt;p&gt;I'm trying to obtain the relative rotation between two IMU's.&#xA;In order to verify the quality of the orientation delivered by the IMU (quaternions), I attached both IMUs to a rigid body (bar) but placed in a different orientation.&#xA;I recording of 1 min data for rotation of the system (2 IMUs attached to the bar) in slow motion.&#xA;Both IMUs should give the same orientations after aligning their frames or in other words the relative rotation between both should be constant.&#xA;So, to align the frames, I first take q_start of both (imu1 and 2) in the first 5s when the system was at rest on the table:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;q_start1 = mean(Q1(t0-&gt;5s));&lt;/p&gt;&#xA;&#xA;&lt;p&gt;q_start2 = mean(Q2(t0-&gt;5s));&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now in order to express their frames in world frame:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Q1_w = Q1 * Inverse(q_start1);&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Q2_w = Q2 * Inverse(q_start2);&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And to obtain the relative rotation between them:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Q_relative_w= Inverse(Q1_w) * Q2_w;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But Q_relative was not constant but if I switch the 3rd and – 2nd component of Q2_w that’s mean:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Q2_w = [w,x,y,z] -&gt; Q2_w_new = [w,-y,x,z] &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Then I apply:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Q_ relative_w_new = Inverse(Q1_w) * Q2_w_new; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I obtain a relative constant Q_ relative_w_new.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My question: Where is my error in the calculation or if this calibration makes sense at all?&#xA;If not how can I otherwise align the frames?&lt;/p&gt;&#xA;" OwnerUserId="26551" LastActivityDate="2020-06-08T13:13:37.107" Title="How to calculate relative rotation between two IMU's" Tags="&lt;imu&gt;&lt;calibration&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20787" PostTypeId="1" CreationDate="2020-06-08T15:34:09.313" Score="0" ViewCount="21" Body="&lt;p&gt;I'm doing a little hobby project where I want to weld two thin plastic sheets together, using two heated plates with a specific pattern. I was doing this manually but felt that the result was unreliable as it had too many human errors, unable to control the pressure and the welding time. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have electric linear actuator and Arduino in mind for this. I have never used any of it before, so before investing in parts I would like to ask if I am on the right path.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This is the welding process I am looking for:&#xA;I place the plastic sheets in the middle of the two heated plates and then I push a button and the two plates shall move towards each other (&gt;15 mm/s) and meet where the plastic sheets are. They “pinch” the plastic for a short period of x milliseconds and then moves back again to its original position. The plastic sheets should now have been welded together. So basically:&#xA;a) Extend the actuator on button press&#xA;b) Stop at full extension (or pre programmed position?).&#xA;c) Stay in that position for x milliseconds&#xA;d) Go back to original position and stop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Please, take a look at the attached image for reference.  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I know very little about actuators, so here are three questions:&#xA;1. Do the actuator &quot;know&quot; when it has been fully extended, so that the delay()-function will start when it is fully extended? That way I can mount the actuators to the aluminium profiles so that when they both are fully extended they are in connection with each other (second image). If not, I might need actuators with position feedback perhaps?  &lt;/p&gt;&#xA;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;&lt;p&gt;Do they have built in sensors where you can adjust the force it will continue to press on as it hits resistance? For example, if the actuator hits a wall, it will stop, but if is hits a 3 kg box it will continue and move the box? I'm thinking about the situation where they hit each other in the middle, if it's possible to adjust the pressure in a fairly easy way.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;In my case, one actuator will be pushing the weight (~7kg) up, and one will be pulling the weight (~7kg). With an actuator capable of pushing e.g. +20 kg, will this situation affect the speed which they extend and retract? So in my case, the actuators will arrive to the plastic films at different time positions (diff &gt;0,1 sec)? So, if I use Arduino delay(1000) for the welding time when they are fully extended, it will actually only be welding 900 ms if the arrival differs 100 ms.&lt;/p&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;p&gt;I am 100% new to robotics, so sorry for some basic questions. &#xA; &lt;a href=&quot;https://i.stack.imgur.com/l5FQ9.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/l5FQ9.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/0xH0l.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0xH0l.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="26553" LastActivityDate="2020-06-08T15:34:09.313" Title="Simple plastic welding machine" Tags="&lt;arduino&gt;&lt;actuator&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20788" PostTypeId="2" ParentId="20779" CreationDate="2020-06-09T17:11:30.907" Score="1" Body="&lt;p&gt;A robot arm's dexterity is a function of its physical structure (arrangement of joints) and configuration (joint positions).  And it can change depending on the way the arm is positioned.  It has nothing to do with the mathematical representation of the arm (DH parameters vs. dual quaternions, etc).  &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Looking at the function for manipulability involves the Jacobian.  But since this must be computed at specific joint angles, the Jacobian is just a matrix of numbers:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\mathit{w}(q) = \sqrt{det(\mathbf{J}(q)\mathbf{J}^T(q)}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you said, this dexterity can be calculated with a &quot;manipulability&quot; score.  But this is just a metric.  And it is not the only one.  I discuss a few other metrics in my answer to this post: &lt;a href=&quot;https://robotics.stackexchange.com/questions/9228/evaluating-the-similarity-of-two-7-degree-of-freedom-arms/9230#9230&quot;&gt;Evaluating the similarity of two 7 Degree of Freedom Arms&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And for an example of how different arrangements of joints can lead to different manipulabilty scores, see my answer in this post: &lt;a href=&quot;https://robotics.stackexchange.com/questions/14540/how-do-you-arrange-the-dof-in-a-robotic-arm/14654#14654&quot;&gt;How do you arrange the dof in a robotic arm?&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2020-06-09T17:11:30.907" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20789" PostTypeId="1" CreationDate="2020-06-10T10:06:14.757" Score="0" ViewCount="19" Body="&lt;p&gt;I have a robot (gray box in the picture) that I can rotate in 3D (x, y, z) relative to a center of rotation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let's say that this robot has two sensors with fixed poses in the robot:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;One IMU that can measure an angular velocity and acceleration&lt;/li&gt;&#xA;&lt;li&gt;One sensor that can measure a velocity&#xA;Both sensors send values in their own coordinate frame. The center of mass is not know&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The goal is to find the pose (position and rotation) of the velocity sensor relative to the IMU.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;By &lt;a href=&quot;https://electronics.stackexchange.com/questions/221739/determining-the-radius-length-of-an-imu-on-a-rotating-stick&quot;&gt;rotating the robot with a constant angular velocity&lt;/a&gt;, I can find the radius vector of the IMU relative to the center of rotation. Since every point in a rigid body has the same angular velocity, I can use the angular velocity measured by the IMU to find the radius of the other sensor (with the formula of the angular velocity &lt;img src=&quot;https://chart.googleapis.com/chart?cht=tx&amp;amp;chl=r%20%3D%20%5Cfrac%7Bv%7D%7B%5Comega%7D&quot; alt=&quot;formula&quot;&gt;). So in the end I can find the position of the center of rotation relative to both sensors in their own coordinate frame.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But is it possible to find the rotation (q) between the two coordinate frames?&#xA;&lt;a href=&quot;https://i.stack.imgur.com/jLuoP.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/jLuoP.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="13325" LastActivityDate="2020-06-10T10:06:14.757" Title="Relative pose of 2 sensors in rigid body" Tags="&lt;sensor-fusion&gt;&lt;calibration&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20790" PostTypeId="1" AcceptedAnswerId="20792" CreationDate="2020-06-10T10:36:02.320" Score="1" ViewCount="104" Body="&lt;p&gt;I have a few questions about controlling robot arm motion. I see that some have used Dynomotion KFLOP and other CNC motion controllers to control arms. Some have used Rumba board as well as several thousand dollar boards. But why don't we all just use ROS? What are the main benefits these boards give? AFAIK neither the KFLOP or Rumba allow realtime control. How come people invest (time/money) into these boards rather than ROS?&lt;/p&gt;&#xA;" OwnerUserId="11489" LastEditorUserId="10748" LastEditDate="2020-06-10T14:16:07.170" LastActivityDate="2020-06-10T14:16:07.170" Title="Can ROS be an alternative for a KFLOP or RUMBA Board?" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;ros&gt;&lt;motion&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20791" PostTypeId="1" AcceptedAnswerId="20793" CreationDate="2020-06-10T11:22:14.813" Score="0" ViewCount="69" Body="&lt;p&gt;This is my first question here and I'm not into this thing at all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I recently saw a movie named Pacific Rim and in that I saw a technique in which a robotic arm imitates human arm(in the beginning of the movie). I was wondering what is that technique called and is it ever possible to build giant robots like the ones shown in the movie( Considering we've no shortage of budget).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I'm not into robotics at all so I just thought about asking it here.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank You!&lt;/p&gt;&#xA;" OwnerUserId="26565" LastActivityDate="2020-06-17T00:26:05.210" Title="Name of imitating motion technique in Robotics" Tags="&lt;motion&gt;" AnswerCount="4" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20792" PostTypeId="2" ParentId="20790" CreationDate="2020-06-10T14:05:47.057" Score="1" Body="&lt;p&gt;You are comparing different products made for different use-cases. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;ROS is an open source software solution to control robots. It is intended (mainly) to be programmed by highly qualified software developers and in some rare cases the robots running ROS are used in the industry also. There is no technical support whatsoever, there are no guarantees that the software is capable of doing what you are planning to do. In order to control a robot from ROS you need a PC (or some similar iPC or SBC) and you need additional hardware to drive a motor (an amplifier stage and a motor controller). The drive amplifier has to be compatible with the motor and has to have a ROS driver. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;CNC motion controllers are professional industrial equipment controlling machine tools in the industry. Modern CNC controllers are PC based, earlier ones had proprietary hardware. Normally, a drive amplifier is connected to the CNC controller in order to be able to drive a motor (and subsequently a machine tool). Furthermore a CNC acts like a firmware, which allows you to load and execute application programs (the so called G-Code) which are workpiece specific. There are companies like Siemens or Fanuc who offer high-end CNC controllers and others who offer compatible drive amplifiers and offer technical support, warranty, certification etc. Professional CNC controllers are not used to control robot arms, these are used for machine tools. Robot controllers are used to control robot arms. There are some subtle but important differences between robot controllers and CNCs.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The KFLOP board is a commercial product, which has tech support, warranties and required certifications (e.g. UL or CE certification). It seems that it takes a buffer of planned trajectories and executes this trajectory in real time (in contrary to ROS) and can be used as a motion controller (e.g. you specify a trajectory) or as a CNC controller (you specify G-Code or NC Code). ROS does not execute G-Code or NC code and does not offer real-time execution of a buffered trajectory. It seems that the KFLOP boards, like a PC running ROS,  also need additional hardware to connect it to motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Rumba board is a low-cost solution to connect motors to your PC. It does not necessarily process trajectories, it is more similar to a drive amplifier as to the above 3 products. It is not real-time on the USB communication side, but depending on its internal software architecture it &lt;strong&gt;may&lt;/strong&gt; offer a real-time (closed-loop) controller for the motors.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;People usually invest money in commercial products because they see a benefit. this can be a functional or a non functional benefit. Commercial products offer tech support, warranty and sometimes certifications. This is not the case for open source products. ROS is software only, so you still need HW to run it, furthermore you need to connect the HW running ROS to the motors. The software is free but the hardware is not. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;You mention that people invest time and money. That is usually a trade-off. You can invest a lot of time in learning ROS alone, or you can invest money and a very limited amount of time to buy a commercial product and a crash-course for that product and start using it significantly faster.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2020-06-10T14:12:09.950" LastActivityDate="2020-06-10T14:12:09.950" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20793" PostTypeId="2" ParentId="20791" CreationDate="2020-06-10T16:35:32.253" Score="0" Body="&lt;p&gt;This is reference tracking. It's basically the sole point of the entire field of &lt;a href=&quot;https://en.wikipedia.org/wiki/Control_theory&quot; rel=&quot;nofollow noreferrer&quot;&gt;control theory&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Provide a reference input (like the encoder position from a device attached to your arm) and drive the system until the actual output matches the reference input. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Voltage regulation, cruise control, rocket guidance, autopilot, self-driving cars... nearly everything that has a &quot;behavior&quot; has a &lt;em&gt;target&lt;/em&gt; they're trying to achieve.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And for giant robot arms specifically, there is the &lt;a href=&quot;https://www.youtube.com/watch?v=vvFZTNJO-fA&quot; rel=&quot;nofollow noreferrer&quot;&gt;Hand of Man&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2020-06-12T21:14:49.643" LastActivityDate="2020-06-12T21:14:49.643" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20794" PostTypeId="2" ParentId="20791" CreationDate="2020-06-10T20:04:06.310" Score="-1" Body="&lt;p&gt;Anthropomorphic or human like arms are often use in automation. Most 6 and 7 axis industrial robot arms are designed to move like human arms. We even use human terms like shoulder, elbow, forearm and wrist to describe them. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Traditionally a series of positions was taught to the robot which it then repeats. A few people are workings on methods of videoing a human doing a job and then translating that video in robot positions and motion. I can't say much more, other then it is not the company I work for, but rather some people that I have talked to. Some day there may be a actual product that people can see. &lt;/p&gt;&#xA;" OwnerUserId="26046" LastActivityDate="2020-06-10T20:04:06.310" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20795" PostTypeId="1" CreationDate="2020-06-11T17:02:48.010" Score="0" ViewCount="80" Body="&lt;p&gt;I have defined a custom message: &lt;code&gt;uint8[] data&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The custom message is imported in my Node class with no problems: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;from my_shared.msg import MyMessage&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In the same Node, I create the publisher with: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;self.my_publisher = self.create_publisher(MyMessage, 'topic_in', 200)&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;and I publish the message with: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;self.my_publisher.publish(my_msg)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;my_msg is built in the following way: &lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;payload_bitstream = np.fromstring(my_data, np.uint8) my_msg = payload_bitstream.tolist()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Sadly, I get a TypeError: &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;File &quot;/opt/ros/eloquent/lib/python3.6/site-packages/rclpy/publisher.py&quot;, line 68, in publish raise TypeError() TypeError&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Could you help out with this if you know what I am doing wrong pls?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks in advance, G.&lt;/p&gt;&#xA;" OwnerUserId="26568" LastEditorUserId="26568" LastEditDate="2020-06-11T17:35:41.027" LastActivityDate="2021-04-14T19:58:46.620" Title="ROS2 and TypeError when publishing custom message to Topic" Tags="&lt;ros&gt;&lt;python&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20796" PostTypeId="1" CreationDate="2020-06-11T22:12:29.980" Score="1" ViewCount="78" Body="&lt;p&gt;How do you calculate the likelihood of making an observation ? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Does someone have a link to a book or article that explains the math that you need to do to implement a PF algorithm? &#xA;Conceptually i understand the implementation but I'm having a hard time updating the particles after a measurement update. Any resource that goes over the math in details/ with examples would really help. &lt;/p&gt;&#xA;" OwnerUserId="26569" LastActivityDate="2021-04-28T20:11:56.013" Title="Implementation of a particle filter algorithm" Tags="&lt;particle-filter&gt;&lt;probability&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20797" PostTypeId="2" ParentId="20791" CreationDate="2020-06-12T06:01:24.017" Score="2" Body="&lt;p&gt;A robot manipulator that’s designed to mimic an operator in real-time can be called a “&lt;a href=&quot;https://en.wikipedia.org/wiki/Remote_manipulator&quot; rel=&quot;nofollow noreferrer&quot;&gt;waldo&lt;/a&gt;” or &quot;telemanipulator&quot;. The term &quot;waldo&quot; originates from Robert Heinlein, and was widespread enough at least in the science fiction literature to be used without explanation or comment as a technical term by characters in works such as &lt;a href=&quot;https://en.wikipedia.org/wiki/The_Forever_War&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Forever War&lt;/a&gt; (1974) and &lt;a href=&quot;https://en.wikipedia.org/wiki/Burning_Chrome&quot; rel=&quot;nofollow noreferrer&quot;&gt;Burning Chrome&lt;/a&gt; (1982).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The background section of &lt;a href=&quot;https://link.springer.com/chapter/10.1007/978-1-4419-1126-1_9&quot; rel=&quot;nofollow noreferrer&quot;&gt;this paper&lt;/a&gt; about the da Vinci surgical robot describes the history of the term as &lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;Robert A. Heinlein's 1942 science fiction short story, titled &quot;Waldo&quot;, described a glove and harness device that allowed the lead character, Waldo Farthingwaite-Jones – born frail and weak, and unable to lift his own body weight – to control a powerful mechanical arm by merely moving his hand and fingers. It was not long before these kinds of remote manipulators – popularly known as &quot;waldoes&quot; – were developed in the real world for moving and manipulating hazardous radioactive materials.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="11712" LastEditorUserId="11712" LastEditDate="2020-06-12T17:04:10.157" LastActivityDate="2020-06-12T17:04:10.157" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20798" PostTypeId="2" ParentId="20795" CreationDate="2020-06-12T06:05:44.747" Score="0" Body="&lt;p&gt;The problem was caused by how I was creating and assigning value to the message.&lt;/p&gt;&#xA;&lt;p&gt;The right way in ROS2 is:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;my_msg = MyMessage()&#xA;&#xA;...&#xA;&#xA;my_msg.data = my_value&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;that did the trick and solved my problem&lt;/p&gt;&#xA;" OwnerUserId="26568" LastEditorUserId="24463" LastEditDate="2020-07-18T17:05:36.650" LastActivityDate="2020-07-18T17:05:36.650" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20801" PostTypeId="1" CreationDate="2020-06-13T18:10:55.923" Score="0" ViewCount="52" Body="&lt;p&gt;There are several methods like manipulability and conditioning index for design optimization kinematics performance, but these methods rely on the singular values of the jacobian matrix. I described kinematics by screw theory using dual quaternion that is singularity-free. I need an index to optimize links length and think, I shouldn't use manipulability and conditioning index for my purpose. What do you think???&lt;/p&gt;&#xA;" OwnerUserId="26539" LastEditorUserId="19515" LastEditDate="2020-07-22T17:27:58.393" LastActivityDate="2021-04-18T19:49:04.573" Title="Design optimization method using indices" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;manipulator&gt;&lt;optimization&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="20802" PostTypeId="2" ParentId="20801" CreationDate="2020-06-13T21:05:16.140" Score="0" Body="&lt;p&gt;I think it is likely that you are confusing two uses of the word “singular”:&lt;/p&gt;&#xA;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The singular values of a matrix as found via singular value decomposition.&lt;/li&gt;&#xA;&lt;li&gt;The singular configurations (or singularities) that occur when the Jacobian loses rank.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="11712" LastActivityDate="2020-06-13T21:05:16.140" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20803" PostTypeId="1" CreationDate="2020-06-14T08:09:16.970" Score="0" ViewCount="27" Body="&lt;p&gt;I am a novice to visual SLAM and computer vision. Recently I've read a paper &quot;A micro Lie theory for state estimation in robotics&quot; dedicated to introducing the essential part that necessary to roboticists. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I am wondering that are there some papers or books that compactly elaborate the essential part of the multiple view geometry in the manner like the former paper? &lt;/p&gt;&#xA;&#xA;&lt;p&gt;And as for bundle adjustment, any recommended papers?&lt;/p&gt;&#xA;" OwnerUserId="26583" LastActivityDate="2020-06-14T08:09:16.970" Title="Are there some papers or books that compactly elaborate the essential part of the multiple view geometry?" Tags="&lt;slam&gt;&lt;computer-vision&gt;&lt;visual-odometry&gt;&lt;3d-reconstruction&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20804" PostTypeId="1" CreationDate="2020-06-15T02:55:01.193" Score="0" ViewCount="72" Body="&lt;p&gt;I am using Anaconda base environment for &lt;a href=&quot;https://github.com/traveller59/second.pytorch&quot; rel=&quot;nofollow noreferrer&quot;&gt;second.pytorch&lt;/a&gt; of ubuntu 16.04 after executing the following: nvidia-docker run -it --rm -v /media/yy/960evo/datasets/:/root/data -v $HOME/pretrained_models:/root/model --ipc=host second-pytorch:latest&lt;/p&gt;&#xA;&#xA;&lt;p&gt;the next thing I executed is stated below: python ./pytorch/train.py evaluate --config_path=./configs/car.config --model_dir=/root/model/car&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I get the following error: Traceback (most recent call last): File &quot;/root/second.pytorch/second/core/non_max_suppression/nms_cpu.py&quot;, line 10, in from second.core.non_max_suppression.nms import ( ModuleNotFoundError: No module named 'second.core.non_max_suppression.nms'&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I also tried to go through the &lt;a href=&quot;https://github.com/traveller59/second.pytorch/issues/69#issuecomment-455753268&quot; rel=&quot;nofollow noreferrer&quot;&gt;solutions provided&lt;/a&gt; and ran the following piece of code: nvcc -std=c++11 -c -o ../cc/nms/nms_kernel.cu.o ../cc/nms/nms_kernel.cu.cc -I/usr/local/cuda/include -x cu -Xcompiler -fPIC -arch=sm_61 --expt-relaxed-constexpr&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I got the following error gcc: error: ../cc/nms/nms_kernel.cu.cc: No such file or directory gcc: warning: '-x c++' after last input file has no effect gcc: fatal error: no input files compilation terminated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;any help would be appreciated&lt;/p&gt;&#xA;" OwnerUserId="26587" LastActivityDate="2020-06-15T02:55:01.193" Title="ModuleNotFoundError: No module named 'second.core.non_max_suppression.nms'" Tags="&lt;computer-vision&gt;&lt;python&gt;&lt;point-cloud&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20805" PostTypeId="1" AcceptedAnswerId="20806" CreationDate="2020-06-15T05:09:15.163" Score="0" ViewCount="139" Body="&lt;p&gt;Let's say I have a Jacobian which gives the relationship between the velocity of a robot's joints, and the Cartesian velocity of its end-effector, relative to the end-effector's local frame. And let's say I also have a target pose to move the end-effector to, expressed relative to the end-effector's local frame, in Euler angles (a, b, c).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I want to move the end-effector to this target pose, and I want this rotation to happen in 1 second. To achieve this, I need to calculate the Cartesian velocity of the end-effector, so that I can use inverse kinematics to calculate the required joint velocities.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My first idea is to say that the Cartesian velocity is equal to the Euler angles (a, b, c), divided by the time (which is 1). So the angular velocity around the x-axis is a, the angular velocity around the y-axis is b, and the angular velocity around the z-axis is c.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After doing some reading, I'm not sure whether this is correct, and even if it is correct, if it is optimal.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Below, I have written three different things that might happen if I were to implement my controller like this. &lt;strong&gt;Which of these three is correct?&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;1) The end-effector rotates to the target pose in a smooth line (the most direct path).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;2) The end-effector rotates to the target pose, but the motion is not smooth (it does not follow the most direct path).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;3) The end-effector rotates but it does not end up at the target pose.&lt;/p&gt;&#xA;" OwnerUserId="26519" LastActivityDate="2020-06-15T17:42:47.643" Title="Cartesian Angular Velocity" Tags="&lt;kinematics&gt;&lt;inverse-kinematics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20806" PostTypeId="2" ParentId="20805" CreationDate="2020-06-15T06:46:25.080" Score="0" Body="&lt;p&gt;Using Euler angles and the velocities expressed as a difference between Euler angles over time will work, but it does not give you the minimum distance between the angles. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you calculate the velocity once like this, the end effector will move towards your goal. If you actually want to stop at your goal you will need to periodically recalculate velocities and times. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;The questions you formulated are not easy to adress:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;1) The end-effector rotates to the target pose in a smooth line (the&#xA;  most direct path).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Smooth does not mean &quot;most direct&quot;. Smooth is defined in terms of discontinuities in the derivates of the position (i.e. velocity, acceleration and jerk). The trajectories obtained this way will not be smooth! They will have discontinuities already at the velocity level. &#xA;It is not clear what exactly do you mean my most direct. It can mean shortest trajectory in joint space or in Cartesian space. Rotations are expressed in a somewhat special coordinate system. More about this &lt;a href=&quot;https://robotics.stackexchange.com/questions/8491/relative-orientation-of-two-robots&quot;&gt;here&lt;/a&gt;. (Ironically this question was asked years ago by me). So to answer your question, the velocities you obtain this way will take you to the desired position and orientation, but they will not be smooth and they will not be the shortest path (for the orientation)&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;2) The end-effector rotates to the target pose, but the motion is not&#xA;  smooth (it does not follow the most direct path).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This is correct, if the velocity is recalculated periodically, based on current position. The velocity profile will not be smooth and the path will not be the shortest. Setting the velocity once means that robot will try follow this direction until a joint limit is reached, not until the target is reached. Furthermore s velocity is not reached instantaneously an different joints have different acceleration times, setting the velocity only once will result in a slightly different direction then intended.&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;  &lt;p&gt;3) The end-effector rotates but it does not end up at the target pose.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;This depends on the way you control the velocity over time. It is expected that in different positions you will need different velocities. The absolute minium is that you stop the robot at the targer, better would be to slow it down when it is close to the target (but then the travel time would be longer, so you have to plan for this in advance).&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2020-06-15T17:42:47.643" LastActivityDate="2020-06-15T17:42:47.643" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20807" PostTypeId="1" CreationDate="2020-06-15T10:56:41.547" Score="0" ViewCount="14" Body="&lt;p&gt;this is a paragraph from the paper of the RRTx algorithm&#xA;and below it a figure referenced in the paragraph &lt;/p&gt;&#xA;&#xA;&lt;p&gt;however the No and Nr nodes types are unclear to me what are they exactly ? &#xA;&lt;a href=&quot;https://i.stack.imgur.com/CI7Gl.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/CI7Gl.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/CnbE7.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/CnbE7.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="22712" LastActivityDate="2020-06-15T10:56:41.547" Title="problem in understanding this part of the RRTx path finding algorithm" Tags="&lt;mobile-robot&gt;&lt;control&gt;&lt;wheeled-robot&gt;&lt;motion-planning&gt;&lt;path-planning&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20808" PostTypeId="1" CreationDate="2020-06-15T16:47:50.690" Score="0" ViewCount="19" Body="&lt;p&gt;The depth error for a stereo camera is given by: &lt;img src=&quot;https://chart.googleapis.com/chart?cht=tx&amp;amp;chl=%5Cfrac%7Bz%5E2%7D%7Bf.b%7D*%5Cpartial%20d&quot; alt=&quot;formula&quot;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As the depth increases the error increases quadratically. I'm wondering if there's a way to model that error and then correct the estimate. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;On my camera, I notice that the z value of these points are always over estimated as I move the object further. Is this always the case? Or is the error some sort of gaussian such that it cannot be modeled. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;I was wondering if I could just subtract some number from the depth value, based on where the object is to account for the quadratic nature of error and correct it?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thank you&lt;/p&gt;&#xA;" OwnerUserId="7266" LastActivityDate="2020-06-15T16:47:50.690" Title="Stereo depth error correction" Tags="&lt;stereo-vision&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20810" PostTypeId="1" CreationDate="2020-06-16T09:04:15.727" Score="0" ViewCount="55" Body="&lt;p&gt;I have gone to some of the blade designs and profiles of the blade which suits my requirement. But, once after entering the Theoretical calculation, I was stuck in the determination or the Justification for the Magnitude of Pitch mentioned in the Blade.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Example: I have taken the propeller of size 10 inch and 4.5-inch pitch value, Some blogs suggested to have a pitch of 0.2 times of the propeller dia for stable and efficient flight. But they didn't reveal how it affected the efficiency or why they stated those values...?&lt;/p&gt;&#xA;" OwnerUserId="26597" LastEditorUserId="19515" LastEditDate="2020-07-25T00:36:53.250" LastActivityDate="2021-04-21T02:01:45.127" Title="How to calculate the pitch of the quadcopter rotor blade and their efficiency?" Tags="&lt;quadcopter&gt;&lt;first-robotics&gt;&lt;multi-rotor&gt;&lt;drone&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20811" PostTypeId="1" AcceptedAnswerId="20937" CreationDate="2020-06-16T14:47:21.787" Score="0" ViewCount="37" Body="&lt;p&gt;I am trying to develop a EKF-SLAM algorithm for a drone, and I want to estimate its position in the inertial/world reference frame. I have as control variables the linear and angular velocities in the drone-reference frame. To do so, I am following this paper: &lt;a href=&quot;http://ingmec.ual.es/~jlblanco/papers/RangeBearingSLAM6D.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://ingmec.ual.es/~jlblanco/papers/RangeBearingSLAM6D.pdf&lt;/a&gt; in which it states that the position update is:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;x_ = x_ + delta_t * (vx * T(0,0) + vy * T(0,1) + vz * T(0,2));&#xA;y_ = y_ + delta_t * (vx * T(1,0) + vy * T(1,1) + vz * T(1,2));&#xA;z_ = z_ + delta_t * (vx * T(2,0) + vy * T(2,1) + vz * T(2,2));&#xA;yaw_ = yaw_ + delta_t * omega_z;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Where &lt;code&gt;T&lt;/code&gt; is the following transformation matrix:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\begin{bmatrix} cos(yaw) * cos(pitch) &amp;amp; cos(yaw) * sin(pitch) * sin(roll) - sin(yaw) * cos(roll) &amp;amp; cos(yaw) * sin(pitch) * cos(roll) + sin(yaw) * sin(roll) &amp;amp; 0 \\&#xA;sin(yaw) * cos(pitch) &amp;amp; sin(yaw) * sin(pitch) * sin(roll) + cos(yaw) * cos(roll) &amp;amp; sin(yaw) * sin(pitch) * cos(roll) - cos(yaw) * sin(roll) &amp;amp; 0 \\&#xA;-sin(pitch) &amp;amp; cos(pitch) * sin(roll) &amp;amp; cos(pitch) * cos(roll) &amp;amp; 0 \\&#xA; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 \end{bmatrix}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I have triple-check the transformation matrix and it seems to be fine, also the position updates make sense (or I think it does).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The problem comes when I plot the position to compare ground truth with my estimation, and I see the following:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/DcDzB.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/DcDzB.png&quot; alt=&quot;position and yaw&quot;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;As you can see between t=40 and 60, the ground truth (red) goes down, and my update (blue) goes to the opposite direction.. after this divergence it continues more or less fine, considering that it drifts (which is the expected). That moment in which one line goes up and the other down, is when the drone starts rotating 180 degrees (as you can see in the second plot - green line), that is why I think the problem is in the transformation matrix.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I've also tried to invert the yaw value or transposing &lt;code&gt;T&lt;/code&gt;, but the problem gets bigger.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Something that worth mentioning is that this is pure prediction, so no correction is done at this moment.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Can you spot any error in my reasoning? Is there something that I didn't mention that may worth quadruple-check? Or do you think this is more or less expected and I am creating a problem from nothing?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hope you can help me! Thanks in advance!&lt;/p&gt;&#xA;" OwnerUserId="1992" LastActivityDate="2020-07-16T12:56:06.283" Title="Motion model and homogeneous transformation issue on a drone" Tags="&lt;slam&gt;&lt;localization&gt;&lt;odometry&gt;&lt;rotation&gt;&lt;transforms&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20812" PostTypeId="1" CreationDate="2020-06-16T21:44:13.820" Score="0" ViewCount="10" Body="&lt;p&gt;My project is about to track the writer's wrist movements with IMU ( with a 3-axis accelerometer, gyro, and magnetometer). I have seen some claims that tracking object in 3-axis is not an easy task and not practical with only an IMU module and need some other components like GPS, and many said that they have completed the same project with this module only!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Honestly, my math background is not strong enough to understand some concepts like Kalman Filter (I am trying all my best thou). My question is about the possibility of tracking wrists in this limited area (paper size) with IMU modules, if yes, how can I find the source code materials?  &lt;/p&gt;&#xA;" OwnerUserId="26603" LastEditorUserId="26603" LastEditDate="2020-06-16T22:17:57.990" LastActivityDate="2020-06-16T22:17:57.990" Title="Wrist's displacement calculation with IMU" Tags="&lt;imu&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20813" PostTypeId="2" ParentId="20791" CreationDate="2020-06-17T00:26:05.210" Score="0" Body="&lt;p&gt;I'd call it a &lt;a href=&quot;https://en.wikipedia.org/wiki/Remote_manipulator&quot; rel=&quot;nofollow noreferrer&quot;&gt;waldo&lt;/a&gt; arm.  Another common term for it is a master-slave.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2020-06-17T00:26:05.210" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20814" PostTypeId="1" CreationDate="2020-06-17T00:38:42.860" Score="0" ViewCount="31" Body="&lt;p&gt;I set up a stereo-vision system to triangulate 3D point given two 2D points from 2 views (corresponding to the same point.) &#xA;I have some questions on the interpretability of the results. &lt;/p&gt;&#xA;&#xA;&lt;p&gt;So the size of my calibration squares are '25mm' a side, and after triangulating and normalizing the homogeneous coordinates (dividing the array of points by the fourth coordinate), I multiply all of them by 25mm and divide by 10 (to get in cm) to get the actual distance from the camera set up.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;For eg - the final coordinates that I got were something like &lt;code&gt;([-13.29, -5.94, 68.41])&lt;/code&gt; So how do I interpret this? &lt;code&gt;68.41&lt;/code&gt; is the distance in the &lt;code&gt;z&lt;/code&gt; direction, and &lt;code&gt;-5.94&lt;/code&gt; is the position in the &lt;code&gt;y&lt;/code&gt; and &lt;code&gt;-13.29&lt;/code&gt; is the position in the &lt;code&gt;x&lt;/code&gt;. But what is the origin here? By convention is it the left camera? Or is it the center of the epipolar baseline? I am using &lt;code&gt;OpenCV&lt;/code&gt; for reference.&lt;/p&gt;&#xA;" OwnerUserId="24163" LastActivityDate="2021-02-18T06:12:40.400" Title="Point of origin in stereo-calibration OpenCV?" Tags="&lt;stereo-vision&gt;&lt;opencv&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20815" PostTypeId="1" AcceptedAnswerId="20817" CreationDate="2020-06-17T12:57:58.343" Score="2" ViewCount="59" Body="&lt;p&gt;I have a sequence of measurements &lt;span class=&quot;math-container&quot;&gt;$\{(x_i, y_i, \theta_i)\}_{i = 1 \:...\: N}$&lt;/span&gt;. Each of these represents the new pose of the robot seen from the previous pose, i.e. a measurement &lt;span class=&quot;math-container&quot;&gt;$(x', y', \theta')$&lt;/span&gt; means that the robot moved of &lt;span class=&quot;math-container&quot;&gt;$x'$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$y'$&lt;/span&gt; units in the &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt; axis of the previous coordinates system and rotated of an angle &lt;span class=&quot;math-container&quot;&gt;$\theta'$&lt;/span&gt; &lt;strong&gt;afterward&lt;/strong&gt;. Therefore, the value of &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt; represents the rotation of the new coordinates system w.r.t. the previous.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How can I compute the absolute path (the sequence of all poses expressed in the absolute frame)?&lt;/p&gt;&#xA;" OwnerUserId="24189" LastActivityDate="2020-06-17T18:32:24.920" Title="Compute path in absolute frame from sequence of measurements" Tags="&lt;slam&gt;&lt;localization&gt;&lt;rotation&gt;&lt;transforms&gt;&lt;coordinate-system&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20816" PostTypeId="2" ParentId="20815" CreationDate="2020-06-17T18:18:14.623" Score="1" Body="&lt;p&gt;Each step can be represented by its transformation matrix,&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\begin{bmatrix} &#xA;\cos{\theta'_{i}} &amp;amp; -\sin{\theta'_{i}} &amp;amp; x'_{i}\\&#xA;\sin{\theta'_{i}} &amp;amp; \phantom{-}\cos{\theta'_{i}} &amp;amp; y'_{i} \\&#xA;0 &amp;amp; 0 &amp;amp; 1 &#xA;\end{bmatrix}.&#xA;$$&lt;/span&gt;&#xA;The world position at each step &lt;span class=&quot;math-container&quot;&gt;$i$&lt;/span&gt; is the rightward-propagating product of the transforms up to that point,&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\begin{bmatrix} &#xA;\cos{\theta_{i}} &amp;amp; -\sin{\theta_{i}} &amp;amp; x_{i}\\&#xA;\sin{\theta_{i}} &amp;amp; \phantom{-}\cos{\theta_{i}} &amp;amp; y_{i} \\&#xA;0 &amp;amp; 0 &amp;amp; 1 &#xA;\end{bmatrix} &#xA;= &#xA;\prod_{1}^{i}&#xA;\begin{bmatrix} &#xA;\cos{\theta'_{i}} &amp;amp; -\sin{\theta'_{i}} &amp;amp; x'_{i}\\&#xA;\sin{\theta'_{i}} &amp;amp; \phantom{-}\cos{\theta'_{i}} &amp;amp; y'_{i} \\&#xA;0 &amp;amp; 0 &amp;amp; 1 &#xA;\end{bmatrix}.&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;(This is the same math as is used for the forward kinematics of a robot arm -- each step is a link with geometry &lt;span class=&quot;math-container&quot;&gt;$x',y'$&lt;/span&gt; followed by a joint rotation &lt;span class=&quot;math-container&quot;&gt;$\theta'$&lt;/span&gt;.)&lt;/p&gt;&#xA;" OwnerUserId="11712" LastActivityDate="2020-06-17T18:18:14.623" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20817" PostTypeId="2" ParentId="20815" CreationDate="2020-06-17T18:22:55.763" Score="1" Body="&lt;p&gt;Assuming frame &lt;span class=&quot;math-container&quot;&gt;$0$&lt;/span&gt; is the 'absolute frame', if we let &lt;span class=&quot;math-container&quot;&gt;$^j P_i$&lt;/span&gt; be the &lt;span class=&quot;math-container&quot;&gt;$i^{th}$&lt;/span&gt; position/orientation expressed in the &lt;span class=&quot;math-container&quot;&gt;$j^{th}$&lt;/span&gt; coordinate frame, then what you're asking for is the sequence &#xA;&lt;span class=&quot;math-container&quot;&gt;$$\{(^0P_i)_{i=1 ... N}\},$$&lt;/span&gt; &#xA;correct?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Using your sequence of measurements &lt;span class=&quot;math-container&quot;&gt;$\{(x_i, y_i, \theta_i)_{i=1 ... N}\}$&lt;/span&gt;, it's straightforward to compute the &lt;span class=&quot;math-container&quot;&gt;$i^{th}$&lt;/span&gt; 2-D &lt;a href=&quot;http://www.cs.columbia.edu/~allen/F17/NOTES/frames2.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;transformation matrix&lt;/a&gt;, &lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$^i_{i+1} T = \begin{pmatrix}&#xA;\cos \theta_i &amp;amp; -\sin \theta_i &amp;amp; x_i\\&#xA;\sin \theta_i &amp;amp; \cos \theta_i &amp;amp; y_i \\&#xA;0 &amp;amp; 0 &amp;amp; 1&#xA;\end{pmatrix}$$&lt;/span&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;And since you have all of them, use the fact that &#xA;&lt;span class=&quot;math-container&quot;&gt;$$^0_i T = ^0_1T ^1_2 T ... ^{i-1}_i T,$$&lt;/span&gt; then just iterate through to list to compute each translation matrix and compute the data you're interested in. Note that you have to append a &lt;span class=&quot;math-container&quot;&gt;$1$&lt;/span&gt; to each &lt;span class=&quot;math-container&quot;&gt;$P_i$&lt;/span&gt; to make the 3x3 multiplcations work out (as noted in the reference):&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$^0P_{i+1} = ^0_i T ^i P_{i+1}$$&lt;/span&gt; &lt;/p&gt;&#xA;&#xA;&lt;p&gt;Hopefully that's helpful. Here's &lt;a href=&quot;https://www.youtube.com/watch?v=NsiJNvsuO3s&quot; rel=&quot;nofollow noreferrer&quot;&gt;a video explaining frame transformations&lt;/a&gt;, that I often refer back to. It's really easy to get lost in notation.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;EDIT: To compute the orientation of the &lt;span class=&quot;math-container&quot;&gt;$i^{th}$&lt;/span&gt; coordinate, you can use the rotational component of the &lt;span class=&quot;math-container&quot;&gt;$^0_iT$&lt;/span&gt; translation matrix, since you have the cos and sin of the angle in entries (1,1) and (2,1), just use the &lt;a href=&quot;https://en.wikipedia.org/wiki/Atan2&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;atan2&lt;/code&gt;&lt;/a&gt; function to pull out &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt;. Make sense?&lt;/p&gt;&#xA;" OwnerUserId="24613" LastEditorUserId="24613" LastEditDate="2020-06-17T18:32:24.920" LastActivityDate="2020-06-17T18:32:24.920" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20820" PostTypeId="2" ParentId="20810" CreationDate="2020-06-18T10:19:55.710" Score="0" Body="&lt;p&gt;Not long ago I had the same problem of evaluating different blade designs. Well it's  not an easy task. I used &lt;a href=&quot;http://If%20you%20want%20do%20evaluate&quot; rel=&quot;nofollow noreferrer&quot;&gt;JavaProp&lt;/a&gt; which is a tool for evaluating propeller designs. The author has an phd in aerdynamics so I guess the tool works properly. It allows you to caluclate the efficency depending on the pitch angles, altitude, cruising speed, rpm, motor torque etc.&lt;/p&gt;&#xA;" OwnerUserId="26608" LastActivityDate="2020-06-18T10:19:55.710" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20821" PostTypeId="1" CreationDate="2020-06-18T12:40:49.157" Score="0" ViewCount="34" Body="&lt;p&gt;I attached two quadrature optical encoders to the wheel of the mobile robot. I also have imu6050 attached to the breadboard to calculate the orientation of the wheel mobile robot localization.  I want to know if my code is right and also determine the starting point for the wheel mobile robot using these sensors.&lt;/p&gt;&#xA;&lt;pre&gt;&#xA;  #include &amp;lt;MPU6050_tockn.h&amp;gt;&#xA;&#xA;  MPU6050 mpu6050(Wire);&#xA;&#xA;  #define ENC_A1  2&#xA;  #define ENC_B1  3&#xA;&#xA;  #define ENC_A2  18&#xA;  #define ENC_B2  19&#xA;&#xA;  #define wheelbase 88                                           // wheelbase corner-to-corner&#xA;  #define count_per_revolution 12                               //(mm)&#xA;  #define Lwheel_c 140                                          //(mm)&#xA;  #define Rwheel_c 139.9                                        //(mm)&#xA;  #define pi 3.142&#xA;  #define TWOPI 6.284&#xA;  &#xA;  // Main loop refresh period.&#xA;  #define REFRESH_MS  50&#xA;&#xA;  // Main serial data connection to computer.&#xA;  #define BAUD_RATE   9600&#xA;&#xA;  // Encoder signal line states&#xA;  volatile boolean state_a1 = 0;&#xA;  volatile boolean state_b1 = 0;&#xA;&#xA;  // Encoder signal line states&#xA;  volatile boolean state_a2 = 0;&#xA;  volatile boolean state_b2 = 0;&#xA;&#xA;  // Encoder position&#xA;  volatile int enc_pos_1 = 0;&#xA;  int enc_pos_prev_1 = 0;&#xA;  int enc_pos_change_1 = 0;&#xA;&#xA;  volatile int enc_pos_2 = 0;&#xA;  int enc_pos_prev_2 = 0;&#xA;  int enc_pos_change_2 = 0;&#xA;&#xA;  // normally on a differential drive system to when moving&#xA;  // forwards the wheels are rotating in opposite directions&#xA;  int encoder_direction_left = 1;&#xA;  int encoder_direction_right = 1;&#xA;&#xA;  // Timing&#xA;  unsigned long micros_current = 0;&#xA;  unsigned long micros_prev = 0;&#xA;  long micros_change = 0;&#xA;&#xA;  /* ----------------------------------------------------------------------- */&#xA;  /* local variables */&#xA;  float dleft; &#xA;  float dright;&#xA;  float last_theta;&#xA;  &#xA;  /* ----------------------------------------------------------------------- */&#xA;  /* odometer maintains these global accumulator variables: */&#xA;  /* ----------------------------------------------------------------------- */&#xA;  float x_pos;                    // bot X position &#xA;  float y_pos;                    // bot Y position &#xA;  float wheel_distance;&#xA;  float theta;                     /* bot heading in radians minus theta_offset */&#xA;  float theta_global;&#xA;  &#xA;  /* rate of rotation measurements, used for stasis error detection */&#xA;  float wheel_theta; &#xA;  float imu_theta;&#xA;&#xA;  long timer;&#xA;  &#xA;  void setup() {&#xA;&#xA;  Wire.begin();&#xA;  mpu6050.begin();&#xA;  mpu6050.calcGyroOffsets(true);&#xA;    &#xA;    pinMode(ENC_A1, INPUT);&#xA;    pinMode(ENC_B1, INPUT); &#xA;&#xA;    pinMode(ENC_A2, INPUT);&#xA;    pinMode(ENC_B2, INPUT); &#xA;&#xA;    state_a1 = (boolean) digitalRead(ENC_A1);&#xA;    state_b1 = (boolean) digitalRead(ENC_B1);&#xA;&#xA;    state_a2 = (boolean) digitalRead(ENC_A2);&#xA;    state_b2 = (boolean) digitalRead(ENC_B2);&#xA;&#xA;    attachInterrupt(0, interrupt_enc_a1, CHANGE);&#xA;    attachInterrupt(1, interrupt_enc_b1, CHANGE);&#xA;&#xA;    attachInterrupt(5, interrupt_enc_a2, CHANGE);&#xA;    attachInterrupt(4, interrupt_enc_b2, CHANGE); &#xA;&#xA;    micros_prev = micros();&#xA;&#xA;    Serial.begin(BAUD_RATE);&#xA;  }&#xA;&#xA;  void loop() {&#xA;   mpu6050.update();&#xA;&#xA;  if(millis() - timer &amp;gt; 1000){&#xA;     timer = millis();&#xA;  }&#xA;    // Calculate elapsed time  &#xA;    micros_current = micros();&#xA;    if (micros_current &amp;lt; micros_prev) {&#xA;        micros_change = micros_current + (4294967295 - micros_prev);&#xA;    } else {&#xA;        micros_change = micros_current - micros_prev;&#xA;    }&#xA;      &#xA;    // Calculate change in encoder position.&#xA;    enc_pos_change_1 = enc_pos_1 - enc_pos_prev_1;&#xA;    &#xA;    enc_pos_change_2 = enc_pos_2 - enc_pos_prev_2;&#xA;  &#xA;    // Emit data&#xA;    Serial.print(enc_pos_change_1);&#xA;    Serial.print(&amp;quot;\t&amp;quot;);&#xA;    Serial.print(enc_pos_change_2);&#xA;    Serial.print(&amp;quot;\t&amp;quot;);&#xA;    Serial.print(dright);&#xA;    Serial.print(&amp;quot;\t&amp;quot;);&#xA;    Serial.print(dleft);&#xA;    Serial.print(&amp;quot;\t&amp;quot;);&#xA;    Serial.print(x_pos);&#xA;    Serial.print(&amp;quot;\t&amp;quot;);&#xA;    Serial.print(y_pos);&#xA;    Serial.print(&amp;quot;\t&amp;quot;);&#xA;    Serial.print(theta);&#xA;    Serial.print(&amp;quot;\t&amp;quot;);&#xA;    Serial.print(mpu6050.getAngleX());&#xA;    Serial.print(&amp;quot;\t&amp;quot;);&#xA;    Serial.print(mpu6050.getAngleY());&#xA;    Serial.print(&amp;quot;\t&amp;quot;);&#xA;    Serial.println(mpu6050.getAngleZ());&#xA;    &#xA;    // and update last sampling for next time &#xA;    enc_pos_prev_1 = enc_pos_1;&#xA;&#xA;    enc_pos_prev_2 = enc_pos_2;&#xA;&#xA;    micros_prev = micros_current;&#xA; &#xA;    dleft = (enc_pos_change_1) * Lwheel_c;&#xA;&#xA;    dright = (enc_pos_change_2)* Rwheel_c;&#xA;  &#xA;    // calculate distance we have traveled since last sampling &#xA;    &#xA;      wheel_distance = (dleft + dright)/2.0;&#xA;&#xA;    // accumulate total rotation around our center &#xA;   &#xA;    wheel_theta = ((dleft - dright)/wheelbase)*(180/pi); // You can multiply theta * (180.0/PI) to get the heading in degrees&#xA;&#xA;   /* read the YAW value from the imu struct and convert to radians */&#xA;   &#xA;   theta_global = ((float)mpu6050.getAngleZ()*TWOPI)/65536.0;&#xA;&#xA;    /* calculate rotation rate-of-change for stasis detector */&#xA;    &#xA;    imu_theta = theta_global - last_theta;&#xA;    &#xA;    last_theta = theta_global;&#xA;&#xA;   // if (g-&amp;gt;yaw_enable) {&#xA;&#xA;    if (mpu6050.getAngleZ()) {&#xA;      &#xA;    theta = theta_global;&#xA;&#xA;    } else {&#xA;    &#xA;    theta += wheel_theta;&#xA;    &#xA;    }&#xA;    &#xA;    //and clip the rotation to plus or minus 360 degrees&#xA;    &#xA;    theta -= (float)((int)(theta/TWOPI))*TWOPI;&#xA;    &#xA;    if (theta &amp;lt; -PI) { &#xA;      &#xA;      theta += TWOPI;&#xA;&#xA;      }else { &#xA;        &#xA;        if (theta &amp;gt; PI) &#xA;        &#xA;        theta -= TWOPI; &#xA;        &#xA;        }&#xA;&#xA;    x_pos =  x_pos + wheel_distance * cos(theta);&#xA;&#xA;    y_pos =  y_pos + wheel_distance * sin(theta);&#xA;   &#xA;   delay(REFRESH_MS);&#xA;  }&#xA;&#xA;  // Detect pulses from depth encoder.&#xA;&#xA;  void interrupt_enc_a1() {&#xA;    &#xA;    if (!state_a1) {&#xA;    &#xA;        state_b1 ? enc_pos_1++: enc_pos_1--;         &#xA;    }&#xA;   &#xA;    state_a1 = !state_a1;&#xA;  }&#xA;&#xA;  void interrupt_enc_b1() {&#xA;    state_b1 = !state_b1;&#xA;  }&#xA;&#xA;  // Detect pulses from depth encoder.&#xA;&#xA;  void interrupt_enc_a2() {&#xA;    if (!state_a2) {&#xA;        state_b2 ? enc_pos_2++: enc_pos_2--;         &#xA;    }&#xA;    state_a2 = !state_a2;&#xA;  }&#xA;&#xA;  void interrupt_enc_b2() {&#xA;    state_b2 = !state_b2;&#xA;  }&lt;span class=&quot;math-container&quot;&gt;```&lt;/span&gt;&#xA;&lt;/pre&gt;&#xA;" OwnerUserId="24918" LastActivityDate="2020-06-18T12:40:49.157" Title="Dead reckoning position estimation" Tags="&lt;arduino&gt;&lt;sensors&gt;&lt;imu&gt;&lt;odometry&gt;&lt;differential-drive&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20822" PostTypeId="1" CreationDate="2020-06-20T09:10:11.270" Score="0" ViewCount="462" Body="&lt;p&gt;I have a quadruped robot with base link (BL), 4 child links called LFT, LFT, RFT, RFT, T for thigh and each having 4 children with name LFC, LBC, RFC, RBC, C for Calf. 8 joints - Base link to 4 thighs and 4 thighs to 4 calfs are used.&lt;/p&gt;&#xA;&lt;p&gt;An excerpt from the URDF is posted below:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; &amp;lt;link&#xA;    name=&amp;quot;LFC&amp;quot;&amp;gt;&#xA;    &amp;lt;inertial&amp;gt;&#xA;      &amp;lt;origin&#xA;        xyz=&amp;quot;0 -0.085 0&amp;quot; rpy=&amp;quot;0 0 0&amp;quot; /&amp;gt;&#xA;      &amp;lt;mass value=&amp;quot;0.038416&amp;quot; /&amp;gt;&#xA;      &amp;lt;inertia ixx=&amp;quot;0.00010326&amp;quot; ixy=&amp;quot;0&amp;quot;  ixz=&amp;quot;0&amp;quot; iyy=&amp;quot;1.3494E-06&amp;quot; iyz=&amp;quot;0&amp;quot; izz=&amp;quot;0.00010451&amp;quot; /&amp;gt;&#xA;    &amp;lt;/inertial&amp;gt;&#xA;    &amp;lt;visual&amp;gt;&#xA;      &amp;lt;origin xyz=&amp;quot;0 0 0&amp;quot;            rpy=&amp;quot;0 0 0&amp;quot; /&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;mesh filename=&amp;quot;package://urdfgenesyssw/meshes/LFC.STL&amp;quot; /&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;      &amp;lt;material name=&amp;quot;&amp;quot;&amp;gt; &amp;lt;color rgba=&amp;quot;0.89804 0.91765 0.92941 1&amp;quot; /&amp;gt;&#xA;      &amp;lt;/material&amp;gt;&#xA;    &amp;lt;/visual&amp;gt;&#xA;    &amp;lt;collision&amp;gt;&#xA;      &amp;lt;origin xyz=&amp;quot;0 0 0&amp;quot; rpy=&amp;quot;0 0 0&amp;quot; /&amp;gt;&#xA;      &amp;lt;geometry&amp;gt;&#xA;        &amp;lt;mesh filename=&amp;quot;package://urdfgenesyssw/meshes/LFC.STL&amp;quot; /&amp;gt;&#xA;      &amp;lt;/geometry&amp;gt;&#xA;    &amp;lt;/collision&amp;gt;&#xA;  &amp;lt;/link&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;A Joint and Transmission sample is also shown:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;  &amp;lt;joint    name=&amp;quot;LFTLFC&amp;quot;    type=&amp;quot;revolute&amp;quot;&amp;gt;&#xA;&amp;lt;origin      xyz=&amp;quot;0 -0.17 0.004&amp;quot;      rpy=&amp;quot;0 0 1.5708&amp;quot; /&amp;gt;&#xA;&amp;lt;parent      link=&amp;quot;LFT&amp;quot; /&amp;gt;&#xA;&amp;lt;child      link=&amp;quot;LFC&amp;quot; /&amp;gt;&#xA;&amp;lt;axis      xyz=&amp;quot;0 0 1&amp;quot; /&amp;gt;&#xA;&amp;lt;limit      lower=&amp;quot;-0.7854&amp;quot;      upper=&amp;quot;0.7854&amp;quot;      effort=&amp;quot;0&amp;quot;      velocity=&amp;quot;0&amp;quot; /&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;&lt;pre&gt;&lt;code&gt;  &amp;lt;transmission name=&amp;quot;LFTLFC_trans&amp;quot;&amp;gt;&#xA;&amp;lt;type&amp;gt;transmission_interface/SimpleTransmission&amp;lt;/type&amp;gt;&#xA;&amp;lt;joint name=&amp;quot;LFTLFC&amp;quot;&amp;gt;&#xA;  &amp;lt;hardwareInterface&amp;gt;EffortJointInterface&amp;lt;/hardwareInterface&amp;gt;&#xA;&amp;lt;/joint&amp;gt;&#xA;&amp;lt;actuator name=&amp;quot;LFTLFC_motor&amp;quot;&amp;gt;&#xA;  &amp;lt;hardwareInterface&amp;gt;EffortJointInterface&amp;lt;/hardwareInterface&amp;gt;&#xA;  &amp;lt;mechanicalReduction&amp;gt;1&amp;lt;/mechanicalReduction&amp;gt;&#xA;&amp;lt;/actuator&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;  &#xA;&lt;p&gt;Controllers are as shown below:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;  # Publish all joint states -----------------------------------&#xA;  joint_state_controller:&#xA;    type: &amp;quot;joint_state_controller/JointStateController&amp;quot;&#xA;    publish_rate: 50&#xA;  # Position Controllers ---------------------------------------&#xA;  LFTLFC_controller:&#xA;    type: effort_controllers/JointPositionController&#xA;    joint: LFTLFC&#xA;    pid: {p: 100.0, i: 0.01, d: 10.0}&#xA;  /gazebo_ros_control/pid_gains:&#xA;    LFTLFC: {p: 100.0, i: 1.0, d: 10.0}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The launch part of the controllers is as follows:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;rosparam command=&amp;quot;load&amp;quot; file=&amp;quot;$(find urdfgenesyssw)/config/joints.yaml&amp;quot; ns=&amp;quot;/urdfgenesyssw&amp;quot; /&amp;gt;&#xA;&amp;lt;node name=&amp;quot;controller_spawner&amp;quot; pkg=&amp;quot;controller_manager&amp;quot; type=&amp;quot;spawner&amp;quot; respawn=&amp;quot;false&amp;quot; output=&amp;quot;screen&amp;quot; ns=&amp;quot;/urdfgenesyssw&amp;quot; &#xA;args=&amp;quot;joint_state_controller&#xA;BLLFT_controller&#xA;LFTLFC_controller&#xA;BLLHT_controller&#xA;LHTLHC_controller&#xA;BLRFT_controller&#xA;RFTRFC_controller&#xA;BLRHT_controller&#xA;RHTRHC_controller&#xA;--timeout 30 &amp;quot; /&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Why does the error show:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;[WARN] [1592642363.497903, 24.557000]: Controller Spawner couldn't find the expected controller_manager ROS interface.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="21580" LastEditorUserId="19515" LastEditDate="2020-07-22T17:28:38.913" LastActivityDate="2020-07-23T07:00:18.733" Title="Why can't the Controller Spawner find the expected controller_manager ROS interface?" Tags="&lt;control&gt;&lt;ros&gt;&lt;gazebo&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20823" PostTypeId="1" CreationDate="2020-06-20T15:10:30.867" Score="0" ViewCount="340" Body="&lt;p&gt;I installed &lt;code&gt;ros-melodic-navigation&lt;/code&gt; with:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ sudo apt-get install ros-melodic-navigation&#xA;[sudo] password for user: &#xA;Reading package lists... Done&#xA;Building dependency tree       &#xA;Reading state information... Done&#xA;ros-melodic-navigation is already the newest version (1.16.6-1bionic.20200530.114248).&#xA;The following packages were automatically installed and are no longer required:&#xA;  linux-headers-5.3.0-51 linux-headers-5.3.0-51-generic&#xA;  linux-image-5.3.0-51-generic linux-modules-5.3.0-51-generic&#xA;  linux-modules-extra-5.3.0-51-generic&#xA;Use 'sudo apt autoremove' to remove them.&#xA;0 upgraded, 0 newly installed, 0 to remove and 300 not upgraded.&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I can find the navigation package  with:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ apt list | grep navigation&#xA;...&#xA;ros-melodic-navigation/bionic,now 1.16.6-1bionic.20200530.114248 amd64 [installed]&#xA;...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;But when I try it with &lt;code&gt;rospack&lt;/code&gt;, I get an error&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;rospack find navigation&#xA;[rospack] Error: package 'navigation' not found&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;What is the issue here?&lt;/p&gt;&#xA;" OwnerUserId="15157" LastActivityDate="2020-07-08T09:26:15.190" Title="rospack can't find installed package" Tags="&lt;ros&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20824" PostTypeId="1" CreationDate="2020-06-22T10:05:52.397" Score="0" ViewCount="60" Body="&lt;p&gt;I am learning Kalman Filters and was working on a simple example:&lt;/p&gt;&#xA;&lt;p&gt;Temperature measurement of a room by using 4 thermometers(different biases and noises)&lt;/p&gt;&#xA;&lt;p&gt;if i consider that there is no bias in the system the model becomes simple with&lt;/p&gt;&#xA;&lt;p&gt;x = [temp]&#xA;F = [1]; H = [1 1 1 1];&lt;/p&gt;&#xA;&lt;p&gt;but lets assume my thermometers have a bias, how do I incorporate that into my model? How does my x, F and H matrix change?&#xA;I am assuming x = [x, B1, B2, B3, B4] but what becomes of F and H?&lt;/p&gt;&#xA;&lt;p&gt;Here is the code i have written so far.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;%a simple kalman test for multiple thermometers reading temp of same item&#xA;clc;clear;&#xA;&#xA;&#xA;N1 = 1;&#xA;N2 = 0.5&#xA;N3 = 1.5&#xA;N4 = 4.5&#xA;&#xA;B1 = -15;&#xA;B2 = -13;&#xA;B3 = -14;&#xA;B4 = -1;&#xA;&#xA;H = [1 0 0 0 ]'; % 0; 1 0 0 0 0; 1 0 0 0 0; 1 0 0 0 0];&#xA;&#xA;F = [1]; % -1 -1 -1 -1; 0 1 0 0 0; 0 0 1 0 0; 0 0 0 1 0; 0 0 0 0 1];&#xA;Q = [5] % 0 0 0 0; 0 2 0 0 0; 0 0 2 0 0; 0 0 0 2 0; 0 0 0 0 2]&#xA;P = Q;&#xA;&#xA;R = diag([N1, N2, N3, N4]);&#xA;x0 = [75]';% B1; B2; B3; B4]&#xA;&#xA;for i = 1:1:100&#xA;    T1(i) = 70+N1*randn;%+B1&#xA;    T2(i) = 70+N2*randn;%+B2&#xA;    T3(i) = 70+N3*randn;%+B3&#xA;    T4(i) = 70+N4*randn;%+B4&#xA;    &#xA;    xobs(:,i) = [T1(i);T2(i);T3(i);T4(i)];&#xA;    &#xA;    x_est(:,i) = F*x0;&#xA;&#xA;    P = F * P * F' + Q;&#xA;    K = P*H'*inv(H*P*H'+R);&#xA;    x(:,i) = x0 + K*(xobs(:,i)- H*x0);&#xA;    x0 = x(:,i);&#xA;end&#xA;    &#xA;plot(x(1,:));&#xA;hold on&#xA;plot(T1)&#xA;plot(T2)&#xA;plot(T3)&#xA;plot(T4)&#xA;grid&#xA;legend('x', 'T1', 'T2', 'T3', 'T4');&#xA;hold off&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="26629" LastActivityDate="2021-03-19T18:00:15.050" Title="Bias correction for multiple sensor fusion through Kalman Filtering" Tags="&lt;kalman-filter&gt;&lt;sensor-fusion&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20825" PostTypeId="2" ParentId="20824" CreationDate="2020-06-22T16:30:07.883" Score="0" Body="&lt;p&gt;Your state vector &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; is correct.&lt;/p&gt;&#xA;&lt;p&gt;When you do bias estimation(look up IMU kalman filters) you assume that the bias is constant/slowly varying. So your &lt;span class=&quot;math-container&quot;&gt;$F$&lt;/span&gt; matrix is just the identity(5x5).&lt;/p&gt;&#xA;&lt;p&gt;Your &lt;span class=&quot;math-container&quot;&gt;$H$&lt;/span&gt; matrix converts the predicted state into the form of the measurement. So essentially convert this equation into matrix form &lt;span class=&quot;math-container&quot;&gt;$T_{est}−B_{x}$&lt;/span&gt; which is just &lt;span class=&quot;math-container&quot;&gt;$[1,−1,0,0,0]$&lt;/span&gt; where the -1 will move depending on the sensor.&lt;/p&gt;&#xA;&lt;p&gt;Also what will probably end up happening is that your sensor with the lowest error/covariance will be taken as the true value, and its bias will tend towards 0.&lt;/p&gt;&#xA;" OwnerUserId="15265" LastEditorUserId="15265" LastEditDate="2020-06-22T16:38:42.000" LastActivityDate="2020-06-22T16:38:42.000" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20827" PostTypeId="1" CreationDate="2020-06-23T06:40:59.253" Score="0" ViewCount="35" Body="&lt;p&gt;&lt;strong&gt;I am currently working on a project where...&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Vehicle travels from point A to B&lt;/li&gt;&#xA;&lt;li&gt;GPS trajectory is used as a reference&lt;/li&gt;&#xA;&lt;li&gt;Vehicle odometry (bicycle model without slip angle beta) was used to estimate a trajectory, which resulted in odometry error&lt;/li&gt;&#xA;&lt;li&gt;I am now given sets of lidar contour points &amp;amp; lane data (timestamps aligned with those of gps &amp;amp; odometry data), which I would have to use to correct the error and prove it&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;em&gt;Note: The vehicle trajectory data I am using &lt;strong&gt;is NOT closed-loop&lt;/strong&gt;.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;My current thought is to use these lidar contour points to obtain rotational/translational vector between each frame and reverse-update the values to the vehicle to update the trajectory. When lacking lidar data, I'd like to use camera lane data to supplement the information.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I have read many articles on ICP and pose SLAM, yet there are some characteristics about my data that seem to hinder my progress.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;ICP requires 'reference' lidar/map points which I do not have. Can I use points at t = x as a reference to update the points at t = x + 1?&lt;/li&gt;&#xA;&lt;li&gt;I do not get same amount of lidar contour points per frame. That is, my data isn't in a PCL format. For example, some frames have 30 contour points whereas some frames have 150. (Some frames lack contour points). It seems that ICP algorithms require size of vectors to be the same. What would be the clever way to approach the problem when the number of contour points is fluctuating?&lt;/li&gt;&#xA;&lt;li&gt;The lane data are given in coefficients constituting 3rd degree polynomial with start/end range for your information.&lt;/li&gt;&#xA;&lt;li&gt;I have currently ONLY applied ICP to calculate R&amp;amp;T when the number of contour points at time t &amp;amp; t+1 is equal, and came up with R matrix of size 360x360. How would I apply this to vehicle that is located at a single point?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;I do not necessarily have to use ICP to solve the problem, yet being new to the topic, I am kind of stuck at the moment. I'd appreciate some opinion/feedback. Thank you!&lt;/p&gt;&#xA;" OwnerUserId="26635" LastEditorUserId="26635" LastEditDate="2020-06-23T06:47:20.273" LastActivityDate="2021-03-20T09:04:05.407" Title="Vehicle Odometry Correction Using Lidar Contour Points (Localization)" Tags="&lt;slam&gt;&lt;localization&gt;&lt;odometry&gt;&lt;lidar&gt;&lt;particle-filter&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20828" PostTypeId="2" ParentId="20827" CreationDate="2020-06-23T08:01:47.523" Score="0" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;ICP requires 'reference' lidar/map points which I do not have. Can I&#xA;use points at t = x as a reference to update the points at t = x + 1?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Reference just refers to a reference frame. Which can be just the previous frame, or one obtained earlier. So yes you can match t=x and t=x+1. That is how &lt;a href=&quot;https://www.roboticsproceedings.org/rss10/p07.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;LIDAR odometry&lt;/a&gt; works.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I do not get same amount of lidar contour points per frame. That is,&#xA;my data isn't in a PCL format. For example, some frames have 30&#xA;contour points whereas some frames have 150. (Some frames lack contour&#xA;points). It seems that ICP algorithms require size of vectors to be&#xA;the same. What would be the clever way to approach the problem when&#xA;the number of contour points is fluctuating?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This is not true. The whole point of ICP (Iterative closest Point) is that it doesn't require explicit matches. Two points are considered a match if they are the closest pair to each other.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I have currently ONLY applied ICP to calculate R&amp;amp;T when the number of&#xA;contour points at time t &amp;amp; t+1 is equal, and came up with R matrix of&#xA;size 360x360. How would I apply this to vehicle that is located at a&#xA;single point?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;You are doing something wrong. ICP should give you 1 &lt;span class=&quot;math-container&quot;&gt;$Rt$&lt;/span&gt; which is composed of a 3x3 rotation matrix and 3x1 translation matrix.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The lane data are given in coefficients constituting 3rd degree&#xA;polynomial with start/end range for your information.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I would probably ignore these. Or just convert them to points using the start and end of the line. You could do something like ICL(Iterative Closest Line), but it could make the implementation a lot more complicated.&lt;/p&gt;&#xA;" OwnerUserId="15265" LastActivityDate="2020-06-23T08:01:47.523" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20829" PostTypeId="1" AcceptedAnswerId="20834" CreationDate="2020-06-23T09:54:10.117" Score="0" ViewCount="54" Body="&lt;p&gt;I am currently working on fixing vehicle odometry data using lidar contour points. Since I am receiving lidar data in the form of countour points, I thought I'd use ICP to correct the odometry error calculated from bicycle model.&lt;/p&gt;&#xA;&lt;p&gt;Here is my question.&lt;/p&gt;&#xA;&lt;p&gt;The code I am referencing from &lt;a href=&quot;https://github.com/kissb2/PyICP-SLAM/blob/master/utils/ICP.py&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/kissb2/PyICP-SLAM/blob/master/utils/ICP.py&lt;/a&gt; requires that number of points at time t = x must equal number of points at time t = x+k, or at least be in the array of same size. (SHOWN by assert statement &amp;quot;assert A.shape == B.shape&amp;quot; ) However, I do get fluctuating number of contour points per every time frame, thus this algorithm is not applicable to my problem.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Has anyone ever came across an ICP with differing array size of 'source frame' and 'target frame'? If so, how should I address the issue? If you just append the points into the arrays A &amp;amp; B of same size M with empty spots being zeros, would the ICP algorithm autonomously sort itself out despite receiving different number of data points? (For example, if A had 30 points and B had 60 points, append A with empty matrix of size 30 to make it into size 60.)&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Thank you!&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;def icp(A, B, init_pose=None, max_iterations=20, tolerance=0.001):&#xA;    '''&#xA;    The Iterative Closest Point method: finds best-fit transform that maps points A on to points B&#xA;    Input:&#xA;        A: Nxm numpy array of source mD points&#xA;        B: Nxm numpy array of destination mD point&#xA;        init_pose: (m+1)x(m+1) homogeneous transformation&#xA;        max_iterations: exit algorithm after max_iterations&#xA;        tolerance: convergence criteria&#xA;    Output:&#xA;        T: final homogeneous transformation that maps A on to B&#xA;        distances: Euclidean distances (errors) of the nearest neighbor&#xA;        i: number of iterations to converge&#xA;    '''&#xA;&#xA;    assert A.shape == B.shape&#xA;&#xA;    # get number of dimensions&#xA;    m = A.shape[1]&#xA;&#xA;    # make points homogeneous, copy them to maintain the originals&#xA;    src = np.ones((m+1,A.shape[0]))&#xA;    dst = np.ones((m+1,B.shape[0]))&#xA;    src[:m,:] = np.copy(A.T)&#xA;    dst[:m,:] = np.copy(B.T)&#xA;&#xA;    # apply the initial pose estimation&#xA;    if init_pose is not None:&#xA;        src = np.dot(init_pose, src)&#xA;&#xA;    prev_error = 0&#xA;&#xA;    for i in range(max_iterations):&#xA;        # find the nearest neighbors between the current source and destination points&#xA;        distances, indices = nearest_neighbor(src[:m,:].T, dst[:m,:].T)&#xA;&#xA;        # compute the transformation between the current source and nearest destination points&#xA;        T,_,_ = best_fit_transform(src[:m,:].T, dst[:m,indices].T)&#xA;&#xA;        # update the current source&#xA;        src = np.dot(T, src)&#xA;&#xA;        # check error&#xA;        mean_error = np.mean(distances)&#xA;        if np.abs(prev_error - mean_error) &amp;lt; tolerance:&#xA;            break&#xA;        prev_error = mean_error&#xA;&#xA;    # calculate final transformation&#xA;    T,_,_ = best_fit_transform(A, src[:m,:].T)&#xA;&#xA;    return T, distances, i&#xA;&lt;span class=&quot;math-container&quot;&gt;```&lt;/span&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="26635" LastActivityDate="2020-06-23T19:56:56.447" Title="ICP(Iterative Closest Point) with Partially Overlapping Conditions &amp; Changing Point Numbers" Tags="&lt;slam&gt;&lt;localization&gt;&lt;path-planning&gt;&lt;lidar&gt;&lt;icp&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20830" PostTypeId="1" CreationDate="2020-06-23T10:44:36.353" Score="0" ViewCount="30" Body="&lt;p&gt;I try to design an attitude controller with cascaded PD-P structure (angle-angular rate) for well-known quadrotor dynamics according to the &lt;a href=&quot;https://repository.asu.edu/attachments/211462/content/Lu_asu_0010N_18420.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;thesis&lt;/a&gt;.&#xA;I use an imu as expected in order to get the angle(with fusion) and rate measurements. Before implementing the controller on the system, I just wanted to observe the outputs of imu alone which confused my mind. I attached a measurement result below. The &lt;em&gt;red line&lt;/em&gt; depicts the &lt;em&gt;angle&lt;/em&gt; and the &lt;em&gt;blue line&lt;/em&gt; represents &lt;em&gt;angular rate&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Vccq8.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Vccq8.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Since the angular rate seems noisy and its amplitudes fluctuates within the range of (+10-10) which is quite different from the simulations (+1-1), I thought my controller will not work properly and some questions appeared as listed below (although integration of angular rate gives an identical angle which means that the rate measurement is ok).&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;1&lt;/strong&gt;. How my system be affected if I apply a filter like a kalman filter on angular rate to smooth noisy-like signal? or should I use a filter as we apply on angle measurement?&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;2&lt;/strong&gt;. Why I see a different amplitude range (+1-1) in simulations (both are in radian)?&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;3&lt;/strong&gt;. Since the imu measures the body rates not euler rates, what will happen in real world dynamics if I use it directly instead of multiplying with transformation matrix? (there is only slight deviations in the simulations which can be ignored)&lt;/p&gt;&#xA;" OwnerUserId="10090" LastActivityDate="2020-06-23T10:44:36.353" Title="Angular rate controller" Tags="&lt;quadcopter&gt;&lt;imu&gt;&lt;simulation&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20831" PostTypeId="1" CreationDate="2020-06-23T14:41:52.110" Score="1" ViewCount="43" Body="&lt;p&gt;Why do we take probabilistic approch to model the environment for robots in occupancy grid maps.The assumption is always taken that each cell on the grid map is either free or occupied.So why have probabilitic approch?&lt;/p&gt;&#xA;" OwnerUserId="26638" LastActivityDate="2020-06-26T07:22:46.650" Title="Occupancy grid maps" Tags="&lt;mobile-robot&gt;&lt;slam&gt;&lt;mapping&gt;&lt;walking-robot&gt;&lt;robot-model&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20832" PostTypeId="2" ParentId="20831" CreationDate="2020-06-23T15:13:36.200" Score="3" Body="&lt;p&gt;As the &lt;a href=&quot;https://en.wikipedia.org/wiki/Occupancy_grid_mapping&quot; rel=&quot;nofollow noreferrer&quot;&gt;wikipedia page of Occupancy grid mapping&lt;/a&gt; explains, the result of the mapping process is a binary 1 or 0, occupied or not, the decision itself may be based on noisy data, which involves the probabilistic assessment of prior information to infer the posterior probability of the occupancy.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-06-23T15:13:36.200" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="20833" PostTypeId="1" CreationDate="2020-06-23T17:11:19.670" Score="0" ViewCount="101" Body="&lt;p&gt;I plan to implement a sensor fusion of IMU + Visual odometry using an EKF. I came across the excellent &lt;a href=&quot;http://wiki.ros.org/robot_localization&quot; rel=&quot;nofollow noreferrer&quot;&gt;robot_localization&lt;/a&gt; package which does pretty much all that I want. However, I need to use perform my task without using ROS, and work in an offline setting, where I have a dump of my IMU and Visual odometry data timestamped. Is there a way to use the package as a library, by calling functions as APIs? How would I go about it, has it been done?&lt;/p&gt;&#xA;&lt;p&gt;If not, are there any alternatives that fuse IMU + visual odometry data using an EKF or a UKF? I ideally wish to code in Python, however I am comfortable in C++ as well.&lt;/p&gt;&#xA;" OwnerUserId="26640" LastActivityDate="2020-07-01T11:31:08.147" Title="Custom implementation of robot_localization package" Tags="&lt;ros&gt;&lt;kalman-filter&gt;&lt;imu&gt;&lt;visual-odometry&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20834" PostTypeId="2" ParentId="20829" CreationDate="2020-06-23T19:56:56.447" Score="0" Body="&lt;p&gt;ICP does not require that the number of points match. It can automatically take care of different sized inputs due to using the closest pair. An example of this can be found &lt;a href=&quot;https://github.com/richardos/icp/blob/master/icp.py&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;, but in 2D.&lt;/p&gt;&#xA;&lt;p&gt;In the &lt;a href=&quot;https://github.com/kissb2/PyICP-SLAM&quot; rel=&quot;nofollow noreferrer&quot;&gt;PyICP-SLAM&lt;/a&gt; example you give you should notice that they randomly downsample the pointcloud to a fixed number(default 5000). That is how they are able to assert that the pointclouds are the same size. They mostly do this to increase the speed, but it can also give some better convergence properties.&lt;/p&gt;&#xA;&lt;p&gt;So it is up to you to choose which method you want to implement. Randomly sample the point sets to being the same size, or let the algorithm run with different sized inputs.&lt;/p&gt;&#xA;" OwnerUserId="15265" LastActivityDate="2020-06-23T19:56:56.447" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20835" PostTypeId="1" CreationDate="2020-06-23T22:07:30.087" Score="0" ViewCount="27" Body="&lt;p&gt;My place of work has recently acquired a Hydraulic Press Break from the 80's. It has a CNC controlled back stop which is driven by a DC motor and Screw drive. The encoder which couples to the motor provides feedback for the control loop.&lt;/p&gt;&#xA;&lt;p&gt;I have determined the Encoder is faulty as when i rotate it clockwise by one turn it increments by 5mm but when I rotate it anti-clockwise by 1 turn it increments by 10mm (approximately). It also feels quite clunky when i rotate it.&lt;/p&gt;&#xA;&lt;p&gt;I would like to replace the encoder however I am not sure how to go about choosing an encoder.&lt;/p&gt;&#xA;&lt;p&gt;What do pins B and C on the pin diagram represent?&#xA;What do the numbers on the encoder represent?&#xA;Would this encoder have a zero pulse?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/KprYH.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;Encoder reads 32/500N05.47&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/mpNaQ.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/mpNaQ.jpg&quot; alt=&quot;The top pin diagram show the outputs of the encoder&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="26642" LastEditorUserId="26642" LastEditDate="2020-06-24T00:47:16.650" LastActivityDate="2021-03-21T08:03:05.373" Title="Given this old pin diagram and numbers on this old encoder, what would be a suitable modern encoder to use?" Tags="&lt;control&gt;&lt;motor&gt;&lt;servomotor&gt;&lt;cnc&gt;&lt;quadrature-encoder&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20836" PostTypeId="1" CreationDate="2020-06-24T01:41:35.657" Score="1" ViewCount="17" Body="&lt;p&gt;I need some help in 3D Positioning system I'm trying to set up.&lt;/p&gt;&#xA;&lt;p&gt;At the moment I am using 2 Calibrated cameras, my strategy is to place an AR Marker on the scene, identify the position of the AR Marker in the two different (left &amp;amp; right) images, and then triangulate the point to get the 3D coordinates.&lt;/p&gt;&#xA;&lt;p&gt;Another approach I have is to project laser stripes on the scene, use the coordinates of the intersection of the laser points for triangulation. So I feel that if I calculate this intersection based on just images the performance difference will not be so much from using an AR marker, because ultimately we would be just using images to extract our feature. So I feel like one must calibrate the laser with the camera in order to get some real benefit of the geometry - not sure. I am a little confused. Any ideas?&lt;/p&gt;&#xA;&lt;p&gt;I guess in general my question is - how do we benefit from the laser? My intuition was that laser helps in identifying a feature on the scene easily, so it reduces the correspondence search - but we can say the same for an AR Marker, so in what other way can we benefit from using a laser? (Geometric constraint, or something?)&lt;/p&gt;&#xA;" OwnerUserId="24163" LastActivityDate="2020-06-24T01:41:35.657" Title="Triangulation in Stereo-Vision?" Tags="&lt;stereo-vision&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20837" PostTypeId="2" ParentId="20835" CreationDate="2020-06-24T05:55:46.687" Score="0" Body="&lt;p&gt;First, you need to find out how the encoder is used in your system. There are two sketches of plugs, I assume your encoder is connected as shown in the upper sketch.&lt;/p&gt;&#xA;&lt;p&gt;Since the company who produced this is still producing and selling encoders, website &lt;a href=&quot;https://www.bachofen.ch/en-us/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;, I would start by giving them a call.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;First of all ask, if they can provide a drop in replacement. It is a long shot, but not that uncommon in the automation/CNC world.&lt;/li&gt;&#xA;&lt;li&gt;You can ask the manufacturer for a technical specification for the encoder. How many counts/revolution does the encoder output is the main important characteristic to choose a replacement. Voltage of the output signals is probably 5 V but it does not hurt to ask to make sure. It is unclear what &amp;quot;H-I = Motor&amp;quot; means.&lt;/li&gt;&#xA;&lt;li&gt;The technical spec can help you shop around from other vendors. You can all sales people of different companies and ask them if they have something compatible to your spec sheet.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-06-24T05:55:46.687" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20838" PostTypeId="2" ParentId="20831" CreationDate="2020-06-24T07:08:52.617" Score="2" Body="&lt;p&gt;Cause of the intrinsic noise in sensory data, we have to consider a probabilistic model (mostly Gaussian) for the sensor measurements. As a matter of fact, the description and definition of the mapping problem will be probabilistic. The goal is to compute the most likely map given the sensor data and commands given to the robot:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/8jEke.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8jEke.gif&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;In occupancy grid mapping as the most simple method, each cell (grid) is a binary random variable:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/B36Ko.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/B36Ko.gif&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="23917" LastActivityDate="2020-06-24T07:08:52.617" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20839" PostTypeId="1" CreationDate="2020-06-24T08:55:54.450" Score="0" ViewCount="52" Body="&lt;p&gt;I am a PhD student, working on Sensor Fusion and estimation problems. I would like as I finish my PhD to have acquired sound knowledge in what seems to be the industry norm for working with real perception systems (irregardless of context) , modern C++. This is a required skill in literally any job post that I see. I do have basic knowledge and experience of how it works, but it just feels simpler, more time efficient, easier to visualise, and easier to debug for a researcher to test an algorithm on Python or Matlab. I totally understand the benefits of using a scripting language, but I feel that we as engineers are over-relying on such tools.&lt;/p&gt;&#xA;&lt;p&gt;Say for instance you want to test a RANSAC algorithm. My go-to approach would be start writing lines in MATLAB, no compilation necessary, all the tools are available in a single-line call, immediate access to documentation, very informative error messages, customisable plots on-the-fly and the list grows on. At the same time, I don't even want to imagine how much time it would take me to achieve the same results in C++, while most of the time I would have to spent it fighting with segmentation errors. So this brings me back to my question: &lt;strong&gt;How do I, in the context of my everyday PhD life, systematically build sound software development experience in C++, within my domain of expertise?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="26628" LastActivityDate="2020-06-25T09:19:34.330" Title="How do I get competent in using c++ for my projects?" Tags="&lt;control&gt;&lt;software&gt;&lt;c++&gt;&lt;estimation&gt;" AnswerCount="2" CommentCount="1" ClosedDate="2020-06-29T16:43:57.547" ContentLicense="CC BY-SA 4.0" />
  <row Id="20840" PostTypeId="2" ParentId="20839" CreationDate="2020-06-24T09:41:59.493" Score="0" Body="&lt;p&gt;Robot Operating System is a great framework for robotics, there are lots of libraries for SLAM and Sensor Fusion in general.&lt;/p&gt;&#xA;&lt;p&gt;You can program in python and c++. My ideia is to take the advantage of the libraries written in c++. What i do (doesn't work for anyone) is just erase code inside some functions and implement my own function and test within the library.&lt;/p&gt;&#xA;&lt;p&gt;C++ is essential, because thats the language you typically use to implement the algorithms on the actual robot.&lt;/p&gt;&#xA;" OwnerUserId="26035" LastActivityDate="2020-06-24T09:41:59.493" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20841" PostTypeId="1" CreationDate="2020-06-24T09:59:19.310" Score="2" ViewCount="39" Body="&lt;p&gt;When one is implementing a state estimator in a system that involves kinematics, will inevitably face the problem of angle discontinuities, i.e., the fact that the angles have to be wrapped between within [-pi -&amp;gt; pi), or between ( 0 -&amp;gt; 2pi ], or else estimation algorithms such as a KF will not work due to the possibility of the error state becoming biased.&lt;/p&gt;&#xA;&lt;p&gt;Roughly speaking, imagine the following&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\hat{e}_k = \hat{\theta}_k - \theta_k, \quad \text{where} \quad\hat{\theta}_k=2\pi \quad \text{and} \quad \theta_k = 0&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;In that case the estimated pose &lt;span class=&quot;math-container&quot;&gt;$\hat{\theta}$&lt;/span&gt; matches the actual pose &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt;, but the estimator is creating an error equal to &lt;span class=&quot;math-container&quot;&gt;$\hat{e}_k = 2\pi$&lt;/span&gt;. This error is propagated into the estimators correction step and is creating a correction to the pose that shouldn't occur.&lt;/p&gt;&#xA;&lt;p&gt;What kind of problems have you in general faced concerning this discontinuity issue and what was your solution?&lt;/p&gt;&#xA;&lt;p&gt;Thanks a lot,&#xA;A student form&#xA;Denmark&lt;/p&gt;&#xA;" OwnerUserId="26628" LastActivityDate="2020-06-24T09:59:19.310" Title="How do you handle angle discontinuities in estimation problems?" Tags="&lt;slam&gt;&lt;localization&gt;&lt;kalman-filter&gt;&lt;pose&gt;&lt;estimation&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20842" PostTypeId="1" CreationDate="2020-06-24T10:29:33.767" Score="3" ViewCount="81" Body="&lt;p&gt;I am working on a task that involves finding a distance of a moving object going a static linear object, e.g a long pole. After trying some approaches (mostly involving stereo vision), I have come up with the idea of building an array of 1D Lidars set apart in fixed distances from each other and from the static object that could help achieve this task: (array in red, pole is gray, pardon the drawing :) )&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/YGJko.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/YGJko.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The moving object goes over the static object, and &amp;quot;cuts&amp;quot; the beams of several of the 1D Lidars in our array.&lt;/li&gt;&#xA;&lt;li&gt;We thus know the object position with a precision of the space between Lidars in our 1D array.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;I have searched for various lidars to achieve this purpose, and because of the precision being tied to spacing between sensors, the following constraints arise:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Something small is necessary for this purpose - diameter of max 2cm, assuming this is still a circle-shaped sensor.&lt;/li&gt;&#xA;&lt;li&gt;Since it's tracking a moving object, a scanning frequency of, say, &amp;gt;30hz would be good.&lt;/li&gt;&#xA;&lt;li&gt;The range is up to 5 meters.&lt;/li&gt;&#xA;&lt;li&gt;The beam is very directional and focused, so that there is no crosstalk/interference between elements of lidar array.&lt;/li&gt;&#xA;&lt;li&gt;Precision does not matter, I just need to know if there is an object present or not.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;The closest candidate that fulfills the requirements by size is actually an ultrasonic sensor, however that has issues with focus and interference, plus needs a receiver on the other side, thus does not fit this task.&lt;/p&gt;&#xA;&lt;p&gt;I also searched for pre-built lidar arrays, but generally they were either too large or too slow. If anyone knows of a sensor that fulfills this purpose or can guide me to who might offer one, I would appreciate it. Thank you.&lt;/p&gt;&#xA;&lt;p&gt;EDIT: Clarifications for project:&lt;/p&gt;&#xA;&lt;p&gt;This is a research project for sports with a flexible budget, so costs are not much of a limit. The area of interest is within a range of 1 to 5 meters, and the tracked object is a human. Our desire is to precisely measure the object with a max disparity of up to 2cm to a height of up to 40cm, but it may be less. The attached pic illustrates our case - an object goes over the virtual &amp;quot;tube&amp;quot; (a region of interest, essentially) center with an unknown distance, which is the distance we would like to measure. &lt;a href=&quot;https://i.stack.imgur.com/xxAlZ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xxAlZ.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="26644" LastEditorUserId="26644" LastEditDate="2020-06-29T10:28:57.587" LastActivityDate="2020-06-29T10:28:57.587" Title="Assistance in finding correct LIDAR for short-range object detection task" Tags="&lt;sensors&gt;&lt;stereo-vision&gt;&lt;lidar&gt;" AnswerCount="0" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20843" PostTypeId="1" CreationDate="2020-06-24T16:52:32.403" Score="1" ViewCount="26" Body="&lt;p&gt;Does anyone know if a shaft can be pressed into a gimbal motor like &lt;a href=&quot;https://www.robotshop.com/en/ipower-gbm5208h-200t-gimbal-motor.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt;? Is the centre metal ring just the inner race of a ball bearing?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/5qDVGm.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/5qDVGm.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/nYzwFm.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/nYzwFm.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The ring looks thicker on one side but thinner on another though.&lt;/p&gt;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="11489" LastActivityDate="2020-06-24T16:52:32.403" Title="Gimbal motor shaft" Tags="&lt;motor&gt;&lt;brushless-motor&gt;" AnswerCount="0" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="20844" PostTypeId="1" AcceptedAnswerId="20853" CreationDate="2020-06-24T18:44:27.143" Score="1" ViewCount="68" Body="&lt;p&gt;I am exploring the option of using a EKF with my differential drive robot. I do not have any prior experience with kalman filters.&lt;/p&gt;&#xA;&lt;p&gt;The robot that is under consideration has two wheel encoders for odometry input using which can be used to calculate the displacement and heading change in the odom frame. It also has two magnetic sensors placed under either ends of the robot which will provide offset distance while traveling on top of a magnetic line.&lt;/p&gt;&#xA;&lt;p&gt;Using the odometry model I can calculate the x, y and yaw of the bot over a period of time. And the magnetic measurement provides the y and yaw in world frame. Using this &lt;a href=&quot;https://home.deec.uc.pt/%7Erui/publications/isie20052.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;paper&lt;/a&gt; as my reference, my state transition matrix is jacobian of the odometry model as included below.&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$A = \begin{bmatrix}1 &amp;amp; 0 &amp;amp; -\Delta \sin(\theta_k + \omega/2)\\0 &amp;amp; 1 &amp;amp; \Delta \cos(\theta_k + \omega/2)\\0 &amp;amp; 0 &amp;amp; 1 \end{bmatrix}$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;So, the system model is&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$X_k = A * X_{k-1}$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;For initial values of &lt;span class=&quot;math-container&quot;&gt;$(0,0,0)$&lt;/span&gt;, when the robot is aligned with the world frame,&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ \begin{bmatrix} x_{k+1} \\ y_{k+1} \\\theta_{k+1} \end{bmatrix} = \begin{bmatrix}1 &amp;amp; 0 &amp;amp; -\Delta \sin(\theta_k + \omega/2)\\0 &amp;amp; 1 &amp;amp; \Delta \cos(\theta_k + \omega/2)\\0 &amp;amp; 0 &amp;amp; 1 \end{bmatrix} * \begin{bmatrix} 0 \\ 0 \\0 \end{bmatrix}$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;My measurement model will provide only y and yaw values. Hence, my H matrix and the z are as below&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ H = \begin{bmatrix}0 &amp;amp; 1 &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 1\\\end{bmatrix}$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$ z_k = \begin{bmatrix}y_k \\ \theta_k\end{bmatrix}$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Going by the above model, if the robot is moving on top of the magnetic sensor in a straight line, my measured y and yaw will always be 0 and hence based on the equations outlined in the paper (also included above) my X value will never increment.&lt;/p&gt;&#xA;&lt;p&gt;Any inputs to help me understand what I am missing here are highly appreciated.&lt;/p&gt;&#xA;&lt;p&gt;[Edited]&lt;/p&gt;&#xA;&lt;p&gt;The heading of the bot is along the x axis. So as it travels forward with 0 yaw the X will increase.&lt;/p&gt;&#xA;" OwnerUserId="14385" LastEditorUserId="14385" LastEditDate="2020-06-26T13:33:59.853" LastActivityDate="2020-06-27T11:49:04.190" Title="Kalman filter with missing dimension on measurement input" Tags="&lt;kalman-filter&gt;&lt;ekf&gt;&lt;odometry&gt;&lt;magnetometer&gt;" AnswerCount="2" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="20845" PostTypeId="2" ParentId="20844" CreationDate="2020-06-25T00:03:42.623" Score="0" Body="&lt;p&gt;I can’t open the link to the paper you put in your question, but perhaps this is the way to think about the situation.  If your robot is facing along the y axis, and &lt;span class=&quot;math-container&quot;&gt;$\theta = 0$&lt;/span&gt;, then how can you get any motion in the x direction unless you first rotate &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt; until the wheels are not aligned with the y axis?   It seems to me the equation correctly reflects the physical constraints for such a nonholonomic system.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2020-06-25T00:03:42.623" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20846" PostTypeId="1" CreationDate="2020-06-25T06:45:06.140" Score="0" ViewCount="30" Body="&lt;p&gt;&lt;strong&gt;I've been tasked to use two YEI 3-space sensors (IMUs) to detect the azimuth and elevation (altitude in the image below) angle of a moving arm with respect to a fixed object, with a sensor on the end of the arm and one on the object.&lt;/strong&gt; For example, the sensor on the moving arm is the star shown in the image below and the sensor on the object is the observer (image is borrowed from the Wikipedia page on Azimuth).&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/0qUMz.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0qUMz.png&quot; alt=&quot;Azimuth and elevation image from wikipedia&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I can move the arm along the sphere of the horizon as in the image above, but I can move the arm up and down in a straight line only.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;However, I calculate correctly ONLY the azimuth angle. The angle equivalent to elevation/altitude barely ever changes during testing.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I've tried code based on &lt;a href=&quot;https://yostlabs.com/wp/wp-content/uploads/pdf/Yost-Calculating-Angles-Between-Two-3-Space-Sensor-Devices-on-a-Human-Body.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;the YEI documentation to calculate Pitch, Yaw, and Roll for a multi-axis joint&lt;/a&gt; or the following semi-pseudo code (based on quaternions to euler angles):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;oriquat1 = sensor1.getUntaredOrientationAsQuaternion()&#xA;oriquat2 = sensor2.getUntaredOrientationAsQuaternion()&#xA;diffquat = oriquat1.inverse()*oriquat2&#xA;eulerang = convert2Euler(diffquat)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;where &amp;quot;eulerang&amp;quot; is a vector containing the pitch, yaw, and roll. Both methods give me similar results.&lt;/p&gt;&#xA;&lt;p&gt;I don't think it's an issue with the code per se but an issue with how I am positioning the sensors/using the sensors. I think I am calculating azimuth correctly because I can change the orientation of the moving-arm-sensor in a spherical manner along the horizon but not in the other direction.&lt;/p&gt;&#xA;&lt;p&gt;Does it make sense for me to use the 3-space sensors to find the azimuth and elevation between a moving and static object? Is there a better method? (I do have some constraints if I should consider another method.)&lt;/p&gt;&#xA;" OwnerUserId="26654" LastActivityDate="2020-06-25T06:45:06.140" Title="Angular movement of a controlled arm relative to an object via Two IMUs" Tags="&lt;sensors&gt;&lt;localization&gt;&lt;imu&gt;&lt;rotation&gt;&lt;pose&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20847" PostTypeId="2" ParentId="20839" CreationDate="2020-06-25T09:11:33.273" Score="2" Body="&lt;p&gt;I would say that in order to learn C++ up to an acceptable level there is no shortcut: &lt;em&gt;you learn it by using it&lt;/em&gt;. And more often than not &lt;em&gt;you learn it by using it together with others that know more than you&lt;/em&gt;.&#xA;Then, I would assess three things:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Are there C++ projects in my domain of expertise to which I’d like to contribute? This could be open-source ones, or some project colleagues in your lab always wanted to start.&lt;/li&gt;&#xA;&lt;li&gt;How many hours per week do I want to invest on this? You still need to do your research, and it just won’t get easier learning another thing on top. Limiting it to an hour per day will keep things healthy for you.&lt;/li&gt;&#xA;&lt;li&gt;There are plenty of free online resources for learning C++. Moreover, physical books are always helpful. Check these options.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;More things:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Understand that this is simply going to take time. The amount depends on you.&lt;/li&gt;&#xA;&lt;li&gt;Learn from the Masters! - check out videos of the best C++ conferences to learn the state of the art of things: &lt;a href=&quot;https://isocpp.org/wiki/faq/conferences-worldwide&quot; rel=&quot;nofollow noreferrer&quot;&gt;Link to list of C++ conferences&lt;/a&gt; . Some conferences have “back to basics”-presentations which help beginners get engaged. Start with these ones before trying to tackle tougher ones.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Hope this helps.&lt;/p&gt;&#xA;" OwnerUserId="19554" LastEditorUserId="19554" LastEditDate="2020-06-25T09:19:34.330" LastActivityDate="2020-06-25T09:19:34.330" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20848" PostTypeId="2" ParentId="20831" CreationDate="2020-06-26T07:22:46.650" Score="0" Body="&lt;p&gt;If you want to incoorporate our sensors properly you first need to build a sensor model. This model tells you whenever your sensor measured something, what is the probability that this is the real value. You will get a distribution.&lt;/p&gt;&#xA;&lt;p&gt;So when you measure 1m there is a prob. of .5 that thus measurement is true and a prob of .3 that the real distance ist actually 1.2m. To process this information you will not just modify one cell in you map but all adjacent cells. You need to to merge the distribution into the map.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://HP%20Moravec%20-%20Sensor%20devices%20and%20systems%20for%20robotics,%201989%20-%20Springer&quot; rel=&quot;nofollow noreferrer&quot;&gt;HP Moravec - Sensor devices and systems for robotics, 1989 - Springer&lt;/a&gt; (original certainty map paper)&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://ais.informatik.uni-freiburg.de/teaching/ss10/robotics/slides/07-sensor-models.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Probabilistic Sensor Models&lt;/a&gt; (lecture on this topic)&lt;/p&gt;&#xA;" OwnerUserId="26608" LastActivityDate="2020-06-26T07:22:46.650" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20849" PostTypeId="1" CreationDate="2020-06-26T19:24:52.693" Score="0" ViewCount="21" Body="&lt;p&gt;I have (4) T200 thruster motors, I want to run all four at the same time with a servocity joy stick controller, I have been running (2) motors with a Y splitter but now want to run (4) motors with the same controller, is this possible?&lt;/p&gt;&#xA;&lt;p&gt;Below is a list of what i have.  Can i get a (4) splitter or do I need a new controller?&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;2 Servo Joystick JS-200&lt;/li&gt;&#xA;&lt;li&gt;12” Boosted Y-Harness SC6001S&lt;/li&gt;&#xA;&lt;li&gt;T200 Thruster × 4&lt;/li&gt;&#xA;&lt;li&gt;Basic ESC × 4&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="26666" LastEditorUserId="17029" LastEditDate="2020-06-29T16:39:07.107" LastActivityDate="2020-06-29T16:39:07.107" Title="T200 thruster motors / Blue robotics" Tags="&lt;servomotor&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20850" PostTypeId="1" CreationDate="2020-06-27T00:22:37.997" Score="0" ViewCount="47" Body="&lt;p&gt;We are in the process of implementing a motion control API for a research project. The goal is to implement a somewhat comprehensive API for motion control that provides the most commonly used primitives, while providing a workable programming model.&lt;/p&gt;&#xA;&lt;p&gt;There doesn't seem to be any standardization in the industry (or is there?), and the space seems fragmented. But a good place to start would be to look at common use cases and existing implementations. Do you have suggestions on how to go about exploring this space? Or suggestions for well implemented APIs?&lt;/p&gt;&#xA;&lt;p&gt;We intend for this to be good enough to be adopted for commercial use eventually.&lt;/p&gt;&#xA;" OwnerUserId="26667" LastActivityDate="2020-06-29T09:46:40.853" Title="What is an example of a good motion control API?" Tags="&lt;motion-planning&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2020-07-08T13:44:16.220" ContentLicense="CC BY-SA 4.0" />
  <row Id="20851" PostTypeId="2" ParentId="20676" CreationDate="2020-06-27T06:09:26.047" Score="0" Body="&lt;p&gt;&lt;strong&gt;If you want communicate over internet:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I think you should explore websockets for the purpose. Websocket connections allow both clients and server to send data. It's a full duplex communication mode.&#xA;If you are using python, you can simply use a websocket client package &lt;a href=&quot;https://pypi.org/project/websocket_client/&quot; rel=&quot;nofollow noreferrer&quot;&gt;like this one&lt;/a&gt; and get the python code to talk to your server (and let server talk to the python code).&lt;/p&gt;&#xA;&lt;p&gt;On user browser side too(assuming you want to control your robot using a web application), implementing websocket is fairly easy. If you are not using a web application for the user, you can use the same python websocket client method to get the job done.&#xA;Websocket server can be easily implemented in various langugages, however I suggest you not to use PHP for the job. It will make your life complicated. Check &lt;a href=&quot;https://github.com/heroku-examples/node-ws-test&quot; rel=&quot;nofollow noreferrer&quot;&gt;this link&lt;/a&gt; for example of a websocket server using Node.js&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;For a local network:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Go for ROS and do &lt;a href=&quot;http://wiki.ros.org/ROS/NetworkSetup&quot; rel=&quot;nofollow noreferrer&quot;&gt;Network setup&lt;/a&gt; and get the job done fairly easily than working on RPC yourself.&lt;/p&gt;&#xA;" OwnerUserId="13969" LastActivityDate="2020-06-27T06:09:26.047" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20852" PostTypeId="1" AcceptedAnswerId="20907" CreationDate="2020-06-27T09:51:10.480" Score="1" ViewCount="75" Body="&lt;p&gt;I know that DTAM and LSD-SLAM both employ the photometric error between two keyframes to estimate the image depth. But I don't know what the photometric error describes precisely.&#xA;In the DTAM paper, I found the following figure describing the principle:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/XQA8f.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XQA8f.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;However, if I only have images I_r and I_m and not the pose translation, how is the cost volume estimated? And how do I know in which row in I_m I have to look for my original Pixel I_r(u,v)?&lt;/p&gt;&#xA;" OwnerUserId="26671" LastEditorUserId="26671" LastEditDate="2020-06-27T14:51:16.057" LastActivityDate="2020-08-08T17:03:00.557" Title="How is the depth estimation done in DTAM / LSD-SLAM (direct VSLAM)?" Tags="&lt;slam&gt;&lt;computer-vision&gt;&lt;stereo-vision&gt;&lt;visual-odometry&gt;&lt;3d-reconstruction&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20853" PostTypeId="2" ParentId="20844" CreationDate="2020-06-27T11:49:04.190" Score="0" Body="&lt;p&gt;The answer from @edwinem is&lt;/p&gt;&#xA;&lt;p&gt;&amp;quot;You are confusing the jacobian matrix with the state transition equation. In the paper you referenced Eq 1 is what you use to update your state. It is also not even a matrix since it is non linear. The A matrix you have is used to update the covariance.You can see that the prediction step consists of 2 parts in Eq 9 and 10. One is used to update your state via some function (Eq 9,1), and the other is the jacobian of that function used to update your uncertainty(A matrix, Eq 10)&amp;quot;&lt;/p&gt;&#xA;" OwnerUserId="14385" LastActivityDate="2020-06-27T11:49:04.190" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20854" PostTypeId="1" CreationDate="2020-06-27T17:02:58.023" Score="1" ViewCount="194" Body="&lt;p&gt;Hi i am doing an apriltag following project. I am currently trying to test how to get distance between the tag and the camera. I have subscribed to the AprilTagDetectionArray msg.&lt;/p&gt;&#xA;&lt;p&gt;My main question is how do i get the distance between the tag and my camera. Should i use the position or the orientation values? I want the robot to detect and then approach the tag.&lt;/p&gt;&#xA;&lt;p&gt;I tried getting the values from both position and orientation but i am getting the error below.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;#!/usr/bin/env python&#xA;&#xA;import rospy&#xA;from apriltag_ros.msg import AprilTagDetectionArray&#xA;&#xA;w = 0.0&#xA;&#xA;def tagDetect(msg):&#xA;    global w&#xA;    w = msg.pose.pose.orientation.w  &#xA;    w = abs(w)&#xA;    rospy.loginfo(&amp;quot;w = %s&amp;quot;,w)&#xA;&#xA;def listener():&#xA;    rospy.init_node(&amp;quot;listener&amp;quot;,anonymous=True)&#xA;    rospy.Subscriber(&amp;quot;/tag_detections&amp;quot;,AprilTagDetectionArray,tagDetect)    &#xA;    rospy.spin()&#xA;&#xA;if __name__ == '__main__':&#xA;    listener()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;but i am getting this error. how do i resolve this??&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; [ERROR] [1593270010.489688]: bad callback: &amp;lt;function tagDetect at 0x7f53e4b62a28&amp;gt;&#xA;Traceback (most recent call last):&#xA;  File &amp;quot;/opt/ros/kinetic/lib/python2.7/dist-packages/rospy/topics.py&amp;quot;, line 750, in _invoke_callback&#xA;    cb(msg)&#xA;  File &amp;quot;/home/zeus/catkin_ws/src/autonav/src/test.py&amp;quot;, line 10, in tagDetect&#xA;    w = msg.pose.pose.position[0].x&#xA;AttributeError: 'AprilTagDetectionArray' object has no attribute 'pose'&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Here is the message just in case.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;[apriltag_ros/AprilTagDetectionArray]:&#xA;std_msgs/Header header&#xA;  uint32 seq&#xA;  time stamp&#xA;  string frame_id&#xA;apriltag_ros/AprilTagDetection[] detections&#xA;  int32[] id&#xA;  float64[] size&#xA;  geometry_msgs/PoseWithCovarianceStamped pose&#xA;    std_msgs/Header header&#xA;      uint32 seq&#xA;      time stamp&#xA;      string frame_id&#xA;    geometry_msgs/PoseWithCovariance pose&#xA;      geometry_msgs/Pose pose&#xA;        geometry_msgs/Point position&#xA;          float64 x&#xA;          float64 y&#xA;          float64 z&#xA;        geometry_msgs/Quaternion orientation&#xA;          float64 x&#xA;          float64 y&#xA;          float64 z&#xA;          float64 w&#xA;      float64[36] covariance&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="26672" LastEditorUserId="26672" LastEditDate="2020-06-28T06:40:42.660" LastActivityDate="2020-11-28T12:05:20.450" Title="Get Topic values in script" Tags="&lt;ros&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20855" PostTypeId="1" CreationDate="2020-06-27T20:31:00.577" Score="1" ViewCount="39" Body="&lt;p&gt;I have been trying to find the HTM of a 2-DOF arm in 2D by finding the rotation matrices and displacement vectors by hand rather than use DH parameters to better understand them. I have followed the steps in this &lt;a href=&quot;https://tinyurl.com/y8qoxgmw&quot; rel=&quot;nofollow noreferrer&quot;&gt;video&lt;/a&gt; to find the rotation matrices by finding the rotation when the joint angle is 0, and multiplying with the 2x2 rotation matrix around the z-axis.&lt;/p&gt;&#xA;&lt;p&gt;However, when I solve for the HTM with theta1 = 90 degrees in python, I get a displacement vector of 0,0. I am wondering if the method I'm using to find the R0-1 is correct, especially since frame 1 is offset from frame 0. My steps are listed below:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/6sgWI.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6sgWI.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;a1 and a2 are the link lengths, and theta1 and theta2 are the joint positions, shown starting at 0.&lt;/p&gt;&#xA;&lt;p&gt;Any help is very appreciated.&lt;/p&gt;&#xA;" OwnerUserId="26673" LastActivityDate="2020-06-27T20:31:00.577" Title="Help with 2D forward kinematics" Tags="&lt;forward-kinematics&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20856" PostTypeId="1" CreationDate="2020-06-27T22:09:42.980" Score="1" ViewCount="2117" Body="&lt;p&gt;To get straight to the point I want to know how to fix this error and understand it, what is an RLException? Why am I getting this? How can I avoid this later? Below I will post what I did step by step:&lt;/p&gt;&#xA;&lt;p&gt;This is the directory where I have my files&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;~/Desktop/Research/research_ws&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This is the error i'm getting:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;RLException: [ddrobot_rviz.launch] is neither a launch file in package [ros_robotics] nor is [ros_robotics] a launch file name&#xA;The traceback for the exception was written to the log file&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The following are the codes for &lt;code&gt;dd_robot.urdf&lt;/code&gt; and &lt;code&gt;ddrobot_rviz.launch&lt;/code&gt; respectively:&lt;/p&gt;&#xA;&lt;pre&gt;&amp;lt;robot name=&amp;quot;dd_robot&amp;quot;&amp;gt;&#xA;    &#xA;    &amp;lt;!-- Base Link --&amp;gt;&#xA;    &amp;lt;link name =&amp;quot;base_link&amp;quot;&amp;gt;&#xA;        &amp;lt;visual&amp;gt;&#xA;            &amp;lt;origin xyz = &amp;quot;0 0 0&amp;quot; rpy = &amp;quot;0 0 0&amp;quot; /&amp;gt;&#xA;            &amp;lt;geometry&amp;gt;&#xA;                &amp;lt;box size = &amp;quot;.5 .5 .25&amp;quot;/&amp;gt;&#xA;            &amp;lt;/geometry&amp;gt;&#xA;        &amp;lt;/visual&amp;gt;&#xA;    &amp;lt;/link&amp;gt;&#xA;&amp;lt;/robot&amp;gt;&#xA;&lt;/pre&gt;&#xA;&lt;pre&gt;    &amp;lt;!-- values passed by command line input --&amp;gt;&#xA;    &amp;lt;arg name = &amp;quot;model&amp;quot; /&amp;gt;&#xA;    &amp;lt;arg name = &amp;quot;gui&amp;quot; default =&amp;quot;False&amp;quot; /&amp;gt;&#xA;    &#xA;    &amp;lt;!-- Set these parameters on Parameter Server --&amp;gt;&#xA;    &amp;lt;param name = &amp;quot;robot_description&amp;quot;&#xA;        textfile = &amp;quot;&lt;span class=&quot;math-container&quot;&gt;$(find ros_robotics)/urdf/$&lt;/span&gt;(arg model)&amp;quot; /&amp;gt;&#xA;    &amp;lt;param name = &amp;quot;use_gui&amp;quot; value = &amp;quot;$(arg gui)&amp;quot; /&amp;gt;&#xA;    &#xA;    &amp;lt;!-- Start 3 nodes: joint_state_publisher, robot_state_publisher&#xA;    rviz --&amp;gt;&#xA;    &amp;lt;node name = &amp;quot;joint_state_publisher&amp;quot; pkg = &amp;quot;joint_state_publisher&amp;quot;&#xA;            type = &amp;quot;joint_state_publisher&amp;quot; /&amp;gt;&#xA;    &amp;lt;node name = &amp;quot;robot_state_publisher&amp;quot; pkg = &amp;quot;robot_state_publisher&amp;quot;&#xA;            type = &amp;quot;state_publisher&amp;quot; /&amp;gt;&#xA;    &amp;lt;node name = &amp;quot;rviz&amp;quot; pkg = &amp;quot;rviz&amp;quot; type = &amp;quot;rviz&amp;quot; &#xA;        args = &amp;quot;-d $(find ros_robotics)/urdf.rviz&amp;quot;&#xA;        required = &amp;quot;true&amp;quot; /&amp;gt;&#xA;&amp;lt;/launch&amp;gt;&#xA;&lt;/pre&gt;&#xA;&lt;p&gt;I do not yet completely understand what is written in the above codes, I'm following the &lt;strong&gt;ROS robotics by example&lt;/strong&gt; book &lt;em&gt;Fairchild&lt;/em&gt;.&lt;/p&gt;&#xA;" OwnerUserId="26130" LastEditorUserId="26130" LastEditDate="2020-06-29T16:02:46.210" LastActivityDate="2020-06-29T16:08:20.920" Title="RLException: neither a launch file package nor a launch file name" Tags="&lt;ros&gt;&lt;robotics-library&gt;&lt;rviz&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20857" PostTypeId="2" ParentId="20796" CreationDate="2020-06-28T01:25:32.543" Score="0" Body="&lt;p&gt;&amp;quot;Probabilistic Robotics&amp;quot; by Sebastian Thrun, Wolfram Burgard, Dieter Fox is the book you are looking for.&lt;/p&gt;&#xA;" OwnerUserId="16033" LastActivityDate="2020-06-28T01:25:32.543" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20858" PostTypeId="1" CreationDate="2020-06-28T09:50:52.357" Score="3" ViewCount="65" Body="&lt;p&gt;I wonder why most robotic arms use large J2 (shoulder) motors rather than counterweights. What sort of complexity do they add to the design beside increase in overall weight? In fact, rather than using extra weight as counterweight, the J3 (elbow) motor could be shifted down past J2 and use J3 motor as counterweight, but why isn't it done?&lt;/p&gt;&#xA;" OwnerUserId="11489" LastActivityDate="2020-06-29T09:28:38.727" Title="Counterweight in arm designs" Tags="&lt;robotic-arm&gt;&lt;motor&gt;&lt;design&gt;&lt;torque&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20860" PostTypeId="2" ParentId="19305" CreationDate="2020-06-28T15:18:56.777" Score="1" Body="&lt;p&gt;I think you'll find section IV. Loop Closure useful here:&#xA;&lt;a href=&quot;http://www.roboticsproceedings.org/rss06/p10.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.roboticsproceedings.org/rss06/p10.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="26679" LastActivityDate="2020-06-28T15:18:56.777" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20861" PostTypeId="2" ParentId="20318" CreationDate="2020-06-29T00:41:26.173" Score="2" Body="&lt;p&gt;At a high level, you would need to do something like this:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Create a kinematic chain the helps you map from the 2D &lt;em&gt;configuration space&lt;/em&gt; (the position of the linear actuators) to the 3D &lt;em&gt;task space&lt;/em&gt; (the position of the end of the robotic arm).&lt;/li&gt;&#xA;&lt;li&gt;Use &lt;em&gt;inverse kinematics&lt;/em&gt; (IK) to figure out how the actuators needs to be positioned for a desired task space position. If you use a library like KDL to represent your kinematics, it is easy to use one of their inverse kinematic solvers.&lt;/li&gt;&#xA;&lt;li&gt;Write a controller that uses this IK solver to move the arm as needed... This part depends on how you are able to control your linear actuators. If your interface to these actuators is a position, identify a sequence of positions in configuration space that you need to traverse will end in the desired task space position.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="9817" LastActivityDate="2020-06-29T00:41:26.173" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20862" PostTypeId="1" CreationDate="2020-06-29T07:36:54.127" Score="0" ViewCount="14" Body="&lt;p&gt;all. I am trying to construct the map of the environment by using the measurements from the proximity sensor in V-Rep. I have absolute position of the robot. So, I know the X1, Y1 coordinates of the robot with respect to inertial frame. And I also know the X2 and Y2 coordinates of the obstacle with respect to the sensor frame on the robot. My purpose is to calculate the coordinates of the obstacle with respect to the inertial frame. On my solution, I just sum up two coordinates like, (X1+X2) and (Y1+Y2). However, it didn't work. Isn't it correct?&lt;a href=&quot;https://i.stack.imgur.com/dfbZG.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dfbZG.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="24958" LastActivityDate="2020-06-29T07:36:54.127" Title="Compute absolute position of obstacle in V-Rep from proximity sensor measurement" Tags="&lt;simulation&gt;&lt;ultrasonic-sensors&gt;&lt;coordinate-system&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20863" PostTypeId="1" CreationDate="2020-06-29T08:06:35.950" Score="0" ViewCount="18" Body="&lt;p&gt;I'm currently learning the Visual SLAM. But I'm also very curious about the modern filter-based SLAM. Can someone share with me some modern review papers about it?&lt;/p&gt;&#xA;" OwnerUserId="26583" LastActivityDate="2020-06-29T08:06:35.950" Title="Can someone share with me some modern review paper about the filter-based SLAM?" Tags="&lt;slam&gt;&lt;filter&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20864" PostTypeId="2" ParentId="20858" CreationDate="2020-06-29T08:23:36.073" Score="2" Body="&lt;p&gt;The weight of the motors is less then the weight of the gears and bearings in the joint. So moving the motors only not that advantageous. Moving the gearboxes can be done, but bearings still need to be left at the joint. If motors and gearboxes are moved, but bearings are not, then additional bearings are required for the &amp;quot;moved&amp;quot; gearboxes and some kind of transmission shaft or mechanism will also be needed, which adds further weight.&lt;/p&gt;&#xA;&lt;p&gt;Many large robots include a hydro-pneumatic &amp;quot;spring&amp;quot; at J2 instead of a mass. This has more flexibility than a mess, since the force of this spring can be more easily adjusted (by increasing/decreasing the pressure). Usually this is set up based on the intended load of the robot.&lt;/p&gt;&#xA;&lt;p&gt;J3 is sometimes co-axial with J2, but this is more common for older robot models or currently for palatalizing robots.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/RLVsP.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/RLVsP.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/iZ48M.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/iZ48M.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;As for the J3 axis, moving J4-6 behind J3 is currently more popular then moving J3 behind or next to J2. Some manufacturers favour this approach, but even if all 3 motors are placed behind J3 a counterweight might still be needed, as this image shows. The black element behind the 3 motors next to J3 is a counterweight. this counterweight is optional, based on the intended load.  (Please also note the hydro-pneumatic spring next to J2).&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/YYbGu.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/YYbGu.gif&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2020-06-29T09:28:38.727" LastActivityDate="2020-06-29T09:28:38.727" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20865" PostTypeId="2" ParentId="20796" CreationDate="2020-06-29T08:28:19.997" Score="0" Body="&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=eAqAFSrTGGY&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here&lt;/a&gt; you can find a really interesting video explanation on particle filters.&lt;/p&gt;&#xA;" OwnerUserId="15592" LastActivityDate="2020-06-29T08:28:19.997" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20866" PostTypeId="2" ParentId="20850" CreationDate="2020-06-29T09:46:40.853" Score="1" Body="&lt;p&gt;You can take a look at &lt;a href=&quot;https://plcopen.org/technical-activities/motion-control&quot; rel=&quot;nofollow noreferrer&quot;&gt;PLCOpen Motion&lt;/a&gt;. This can be thought of a motion control SDK for programming languages used in the automation world. This is general purpose and well established.&lt;/p&gt;&#xA;&lt;p&gt;Furthermore, you can take a close look at all Robot Controller programming languages (like Kuka KRL, ABB Rapid, Fanuc Karel, Staubli Val3, etc.) These are programming languages build explicitly for motion control applications involving robots, so less general purpose then PLCOpen. The motion control related things are built in the language and do not have an explicit SDK or API character.&lt;/p&gt;&#xA;&lt;p&gt;For CNCs there is G-Code. It is a language for motion control, but its syntax is a direct successor of the punch-card system used before textual programming languages, so it is really bad in the syntax sense, but very good in the features which it offers for motion control of machine tools.&lt;/p&gt;&#xA;&lt;p&gt;If you want to have an example of motion control and a modern programming language, you can look at Kuka's Sunrise platform, which uses Java to program robots. I have never used it, so I do not know if it is any good.&lt;/p&gt;&#xA;&lt;p&gt;In general purpose motion control PLCOpen is the closest you get to a standard, basically anything else is manufacturer specific (event the standardized G-Code has manufacturer specific syntax and features).&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-06-29T09:46:40.853" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20867" PostTypeId="1" CreationDate="2020-06-29T14:18:20.680" Score="1" ViewCount="71" Body="&lt;p&gt;I need to control 10 &lt;strong&gt;Standard Servo Motors&lt;/strong&gt; &lt;em&gt;(operating at 4.8-7V/300mA-1A/2.5kg-5kg torque)&lt;/em&gt; in my project. I'm using RPi as my processor and I was looking for a servo driver. I came across PCA9685 16-ch 12-bit servo driver from adafruit, But it can only operate at 5.5V maximum. also, each standard servo can consume upto 1.5A current and PCA9685 board cannot handle that.&#xA;&lt;em&gt;&lt;strong&gt;Are there any other servo drivers available for handling 5-7V and 1-1.5Amp per channel?&lt;/strong&gt;&lt;/em&gt;&#xA;(Powering the servos separately is an option but if any board is available makes it easier for me)&lt;/p&gt;&#xA;" OwnerUserId="26684" LastActivityDate="2020-06-29T14:18:20.680" Title="Controlling high torque servo motors with Raspberry Pi" Tags="&lt;arduino&gt;&lt;raspberry-pi&gt;&lt;servomotor&gt;&lt;torque&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20868" PostTypeId="2" ParentId="20856" CreationDate="2020-06-29T16:08:20.920" Score="2" Body="&lt;p&gt;I just had to re-enter:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;source devel/setup.bash&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;In every new terminal.&lt;/p&gt;&#xA;" OwnerUserId="26130" LastActivityDate="2020-06-29T16:08:20.920" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20869" PostTypeId="1" CreationDate="2020-06-30T03:11:47.733" Score="2" ViewCount="64" Body="&lt;p&gt;&lt;strong&gt;Suppose&lt;/strong&gt; I have M lidar contour points from t = k and N lidar contour points from t = k+1.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;(Some of you might question why I have differing number of contour points, and the reason is that these lidar contour points have been filtered from raw point cloud data to only detect road edge, and sometimes these edges aren't detected.)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;My goal&lt;/strong&gt; is to localize the vehicle position using these lidar contour points. Currently, I have generated two plots to make comparison to the result of lidar localization.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;- Plot 1.&lt;/strong&gt; GPS trajectory plot (this will be my reference)&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;- Plot 2.&lt;/strong&gt; Vehicle odometry trajectory plot (this has drift compared to GPS trajectory)&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;I need to prove&lt;/strong&gt; that my lidar localized trajectory somewhat improved the drift that existed from plot 2.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;My current approach:&lt;/strong&gt; I am using ICP to solve the problem. Since I do not have 'absolute reference' point cloud, I am basically using lidar points at t = k as a reference to lidar points at t = k+1. Therefore, the reference point cloud is constantly being updated as I go. Once I derive the rotation &amp;amp; translation vector between t = k and t = k+1, I'd like to use that to correct the vehicle trajectory from t = k to t = k+1.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Note: Exception case is when lidar contour data at t = k + a is empty, in which I simply use odometry (dead reckoning) to predict the trajectory.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;My difficulty&lt;/strong&gt; lies with the fact that I am lost on how to apply the rotation and translation vector to the previous vehicle pos_x, previous vehicle pos_y, and heading angle theta to make the correction to the trajectory. I suppose the heading angle value doesn't really matter in terms of updating the next position since I am working with 'point' rather than shape. The code below is snippet from my work, where closest_rot_angle, closest_translation_x, and closest_translation_y are obtained from ICP iterations until it converges.&lt;/p&gt;&#xA;&lt;p&gt;I think the problem may be at the update step for the 'input_arr[0:2]' which contains x &amp;amp; y coordinate for the current position of the vehicle. Please provide me with some spark on a good way to apply ICP results for localization!&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;        # transform 'points' (using the calculated rotation and translation)&#xA;        c, s = math.cos(closest_rot_angle), math.sin(closest_rot_angle)&#xA;        rot = np.array([[c, -s],&#xA;                        [s, c]])&#xA;        aligned_points = np.dot(points, rot.T)&#xA;        aligned_points[:, 0] += closest_translation_x&#xA;        aligned_points[:, 1] += closest_translation_y&#xA;&#xA;        aligned_target = np.dot(input_arr[0:2], rot.T)&#xA;        aligned_target[0] += closest_translation_x&#xA;        aligned_target[1] += closest_translation_y&#xA;&#xA;        # update 'points' for the next iteration&#xA;        points = aligned_points&#xA;        input_arr[0:2] = aligned_target&#xA;&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="26635" LastActivityDate="2021-03-27T10:07:35.660" Title="Applying Rotation &amp; Translation Matrix Obtained from Iterative Closest Point" Tags="&lt;slam&gt;&lt;localization&gt;&lt;lidar&gt;&lt;estimation&gt;&lt;icp&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20870" PostTypeId="2" ParentId="20869" CreationDate="2020-06-30T05:08:47.930" Score="1" Body="&lt;p&gt;I don't know if your confusion is with applying the transform to the points or applying it to the pose. So I'll just show you both.&lt;/p&gt;&#xA;&lt;p&gt;The easiest way is to store your points and transform in the homogenous form. For 2D the transform is a matrix(3x3) that looks like&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$T=\begin{bmatrix}&#xA;cos(\theta) &amp;amp; -sin(\theta) &amp;amp; t_x\\&#xA;sin(\theta) &amp;amp; cos(\theta) &amp;amp; t_y \\&#xA;0 &amp;amp; 0 &amp;amp; 1&#xA;\end{bmatrix} $$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Points:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;A point in homogenous form just has a 1 appended at the end.&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$p=[x,y,1]$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;You can now multiply a point by this transform matrix to get the new position.&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$p_b=T_{ba}*p_a$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;where &lt;span class=&quot;math-container&quot;&gt;$a$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$b$&lt;/span&gt; are some coordinate frames. If you actually break this down you can see that the multiplication is the same as your code.&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$p_b=R_{ba}*p_a+t_{ba}$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Poses:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Your vehicle pose of &lt;span class=&quot;math-container&quot;&gt;$[t_x,t_y,\theta]$&lt;/span&gt; can be represented as a homogenous matrix. The nice thing about this form is that you can concatenate multiple transforms together with just matrix multiplication.&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$T_a=T_b*T_{ba}$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;In your application ICP solves for the delta transform between two coordinate frames. So at every timestep solve for the delta using ICP and multiply your previous pose.&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$T_{k+1}=T_{k}*T_{k,k+1}$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Note depending on your ICP algorithm your answer may be the inverse transform so &lt;span class=&quot;math-container&quot;&gt;$T_{k+1,k}$&lt;/span&gt;. Another nice property of the homogenous matrix is that the matrix inverse also is also the inverse of the transform.&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$T_{k+1,k}^{-1}=T_{k,k+1}$$&lt;/span&gt;&lt;/p&gt;&#xA;" OwnerUserId="15265" LastEditorUserId="15265" LastEditDate="2020-06-30T07:25:50.557" LastActivityDate="2020-06-30T07:25:50.557" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20871" PostTypeId="2" ParentId="19305" CreationDate="2020-06-30T08:16:53.433" Score="1" Body="&lt;p&gt;Sim3 is just the lie group associated a similarity transform which is the exact same thing as your 3D Affine transform. If you work out the multiplication for your two matrices you would find that they end up with the same result as we are dealing with homogenous coordinates. Therefore the following is true&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$x=kx$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;where &lt;span class=&quot;math-container&quot;&gt;$k$&lt;/span&gt; is just some constant, and &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; is a homogenous vector.&lt;/p&gt;&#xA;&lt;p&gt;Now if we multiply a vector &lt;span class=&quot;math-container&quot;&gt;$[x,y,z,1]$&lt;/span&gt; by your matrices. The results for the first row are shown below.&lt;/p&gt;&#xA;&lt;p&gt;For affine matrix:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$s(r_{11}*x + r_{12}*y + r_{13}*z) + t_1$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Sim3 matrix:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$r_{11}*x + r_{12}*y + r_{13}*z + \frac{t_1}{s^{-1}}$$&lt;/span&gt;&#xA;Multiply by &lt;span class=&quot;math-container&quot;&gt;$s$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$s(r_{11}*x + r_{12}*y + r_{13}*z) + t_1$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;So the results end up differing by some scaling constant &lt;span class=&quot;math-container&quot;&gt;$s$&lt;/span&gt;, which means they are the same point.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;what is this sim3 actually?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Similarity transform. Almost same thing as SE3, but with a extra degree of freedom for scaling. What you call 3D affine.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;How do I get the new pose (SE3) using sim3?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;You can't really. It has 1 extra degree of freedom so any conversion will lose information.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;How do I get the new set of 3D points visible on the old keyframe pose?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;You answered your own question. Multiply the point by the sim3 matrix. In ORB-SLAM they just break up the multiplication into the individual parts, but it is the same as multiplying by the matrix.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;If sim3 is a matrix that maps the old points to new points, why don't&#xA;we multiply the 3D points directly with sim3 matrix?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;You can, and that's what ORB-SLAM even does. The inverse is just used cause the sim3 transform is in the wrong direction(e.g. from keyframe 2 -&amp;gt; keyframe 1) when you want the opposite.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;In SLAM loop closure, What does a sim3 matrix do?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It does the same thing as the SE3 or SE2 transform in pose graph optimization. Add a constraint between poses. Sim3 is used instead as monocular based SLAM is special ,because scale/distance is unobservable. So the actual correct method to model this motion is sim3.&lt;/p&gt;&#xA;" OwnerUserId="15265" LastEditorUserId="15265" LastEditDate="2020-06-30T08:31:01.597" LastActivityDate="2020-06-30T08:31:01.597" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20872" PostTypeId="1" AcceptedAnswerId="20880" CreationDate="2020-06-30T12:23:39.863" Score="0" ViewCount="38" Body="&lt;p&gt;Given a rotation vector, can we always get the same corresponding rotation matrix computed by the &lt;strong&gt;Rodrigue's rotation formula&lt;/strong&gt;?&lt;/p&gt;&#xA;" OwnerUserId="26583" LastActivityDate="2020-07-01T23:28:07.750" Title="Does every rotation vector has an one-to-one corresponding rotation matrix?" Tags="&lt;slam&gt;&lt;rotation&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20874" PostTypeId="1" AcceptedAnswerId="20876" CreationDate="2020-06-30T15:34:17.033" Score="1" ViewCount="27" Body="&lt;p&gt;I know that a bar type load cell needs to be setup as shown here as to flex the strain gauge &lt;a href=&quot;https://i.stack.imgur.com/fIis1.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fIis1.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;However, most tutorials or guides show how to setup an S type load cell like this (for tension)&lt;a href=&quot;https://i.stack.imgur.com/hVUJ3.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hVUJ3.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;and not much info on how to setup for compression. Im guessing the load does not need to be right on top of the screw hole as per the bar type? I would be able to mount a platform directly onto the top and bottom surface of the &amp;quot;S&amp;quot;, right?&lt;/p&gt;&#xA;&lt;p&gt;On another note do most load cells already come wired with a wheatstone bridge? (some dude in a &lt;a href=&quot;https://youtu.be/lWFiKMSB_4M?t=307&quot; rel=&quot;nofollow noreferrer&quot;&gt;tutorial&lt;/a&gt; mentioned this)&lt;/p&gt;&#xA;&lt;p&gt;I'm a newbie and I'd appreciate any advice.&lt;/p&gt;&#xA;&lt;p&gt;Edit: This is the load cell Im looking to purchase. Does not mention much other than the material properties in their 'datasheet'. &lt;a href=&quot;https://cnpusidun.en.alibaba.com/product/62313710766-807031600/PSD_S1_Compression_Load_Cell_1000kg_Load_Weight_Sensor_50kg.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;link&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="26691" LastEditorUserId="26691" LastEditDate="2020-07-01T02:44:06.680" LastActivityDate="2020-07-01T02:44:06.680" Title="Does an S type load cell need to be loaded perpendicular to its screw holes?" Tags="&lt;sensors&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20875" PostTypeId="1" CreationDate="2020-06-30T17:53:30.203" Score="2" ViewCount="84" Body="&lt;p&gt;I am trying to implement an Extended Kalman filtering for combining IMU data and visual odometry in a simple 2D case where I have a robot that that can only accelerate in its local forward direction which is dictated by its current heading (theta). I am restricting IMU readings to a single acceleration reading (a) and a single angular velocity reading (omega). Visual odometry will only provide a single angular displacement as well as displacement in the u and v directions (x and y relative to the robot). The equations for the derivation of my state transition matrix are&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ x_{k+1} = x_k + \dot{x_k}\Delta T + 0.5a \cdot cos(\theta) \Delta T^2 $$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$ y_{k+1} = y_k + \dot{x_k}\Delta T + 0.5a \cdot sin(\theta) \Delta T^2 $$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$ \theta_{k+1} = \theta_k + \dot{\theta} \Delta T $$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$ \dot{x_{k+1}} = \dot{x_{k}} + a \cdot cos(\theta) \Delta $$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$ \dot{y_{k+1}} = \dot{y_{k}} + a \cdot sin(\theta) \Delta $$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$ \dot{\theta_{k+1}} = \dot{\theta_{k}} $$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$ \dot{\dot{x_{k+1}}} = \dot{\dot{x_{k}}}$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$ \dot{\dot{y_{k+1}}} = \dot{\dot{y_{k}}}$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;and the equations that I use to obtain the measurements are&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ \Delta x = \dot{x} \Delta T + 0.5 \dot{\dot{x}} \Delta T^2 $$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$ \Delta y = \dot{y} \Delta T + 0.5 \dot{\dot{y}} \Delta T^2 $$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$ \Delta u = \Delta x \cdot cos(\theta) + \Delta y \cdot sin(\theta) $$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$ \Delta v = -\Delta x \cdot sin(\theta) + \Delta y \cdot cos(\theta) $$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$ \Delta \theta = \dot{\theta} \cdot \Delta T $$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$ a = \dot{\dot{x}} \cdot cos(\theta) + \dot{\dot{y}} \cdot sin(\theta) $$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$ \omega = \dot{\theta} $$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;To calculate the Jacobian of the measurement function I used the following MATLAB code&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;deltaX = xDot*t + 0.5*xDotDot*(t^2);&#xA;deltaY = yDot*t + 0.5*yDotDot*(t^2);&#xA;deltaU = deltaX * cos(theta) + deltaY * sin(theta);&#xA;deltaV = -deltaX * sin(theta) + deltaY * cos(theta);&#xA;deltaTheta = thetaDot*t;&#xA;accel = xDotDot*cos(theta) + yDotDot*sin(theta);&#xA;omega = thetaDot;&#xA;&#xA;jacobian([accel, omega, deltaU, deltaV, deltaTheta], [x, y, theta, xDot, yDot, thetaDot, xDotDot, yDotDot])&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;To test my implementation I am creating test data from random acceleration and angular velocity values. I am plotting the trajectory calculated from this as well as from the trajectory calculated directly using the odometry values and the IMU values. I am then comparing this with the odometry estimated by my Kalman filter.&lt;/p&gt;&#xA;&lt;p&gt;The Kalman filter has been implemented without any control values and is combining all the sensor reading into a single measurement vector.&lt;/p&gt;&#xA;&lt;p&gt;To test if the filter has any hope of working, I first tested it without any added measurement noise but the outcome is fairly crazy as can be seen in&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/LQvgL.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/LQvgL.png&quot; alt=&quot;Kalman filter simulation result&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;where it can also be seen that using both sensor readings on their own without the filter produces the exact trajectory. This simulation, including my Kalman filter was implemented with the following Python code&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;import numpy as np&#xA;import matplotlib.pyplot as plt&#xA;from random import *&#xA;&#xA;# Sampling period&#xA;deltaT = 1&#xA;&#xA;# Array to store the true trajectory&#xA;xArr = [0]&#xA;yArr = [0]&#xA;thetaArr = [0]&#xA;&#xA;# Array to store IMU measurement&#xA;imuA = []&#xA;imuOmega = []&#xA;&#xA;# Current state variables&#xA;x = 0&#xA;y = 0&#xA;theta = 0&#xA;x_dot = 0&#xA;y_dot = 0&#xA;&#xA;# Arrays to store odometry measurements&#xA;odoU = []&#xA;odoV = []&#xA;odoTheta = []&#xA;&#xA;# Setup simulated data&#xA;for i in range(100):&#xA;    # Calculate a random forward (u-axis) acceleration&#xA;    a = uniform(-10, 10)&#xA;    imuA.append(a)&#xA;&#xA;    # Calculate the change in global coordinates&#xA;    deltaX = (x_dot * deltaT) + (0.5 * a * np.cos(theta) * deltaT**2)&#xA;    deltaY = (y_dot * deltaT) + (0.5 * a * np.sin(theta) * deltaT**2)&#xA;&#xA;    # Update the velocity at the end of the time step&#xA;    x_dot += a * np.cos(theta) * deltaT&#xA;    y_dot += a * np.sin(theta) * deltaT&#xA;&#xA;    # Update the current coordinates&#xA;    x += deltaX&#xA;    y += deltaY&#xA;&#xA;    # Store the coordinates for plotting&#xA;    xArr.append(x)&#xA;    yArr.append(y)&#xA;&#xA;    # Calculate local coordinate odometry&#xA;    odoU.append(deltaX * np.cos(theta) + deltaY * np.sin(theta))&#xA;    odoV.append(-deltaX * np.sin(theta) + deltaY * np.cos(theta))&#xA;&#xA;    # Calculate a random new angular velocity&#xA;    theta_dot = uniform(-0.2, 0.2)&#xA;    imuOmega.append(theta_dot)&#xA;&#xA;    # Calculate the change in angular displacement&#xA;    deltaTheta = theta_dot * deltaT&#xA;    odoTheta.append(deltaTheta)&#xA;&#xA;    # Update the angular displacement&#xA;    theta += theta_dot * deltaT&#xA;    thetaArr.append(theta)&#xA;&#xA;# Calculate the trajectory from just the odometery&#xA;xArr2 = []&#xA;yArr2 = []&#xA;&#xA;x = 0&#xA;y = 0&#xA;theta = 0&#xA;&#xA;for i in range(100):&#xA;    deltaU = odoU[i]&#xA;    deltaV = odoV[i]&#xA;    deltaTheta = odoTheta[i]&#xA;&#xA;    x += deltaU * np.cos(theta) - deltaV * np.sin(theta)&#xA;    y += deltaU * np.sin(theta) + deltaV * np.cos(theta)&#xA;    theta += deltaTheta&#xA;&#xA;    xArr2.append(x)&#xA;    yArr2.append(y)&#xA;&#xA;# Calculate the trajectory from just the IMU readings&#xA;xArr3 = []&#xA;yArr3 = []&#xA;&#xA;x = 0&#xA;y = 0&#xA;theta = 0&#xA;x_dot = 0&#xA;y_dot = 0&#xA;theta_dot = 0&#xA;&#xA;for i in range(100):&#xA;    # Calculate the change in global coordinates&#xA;    a = imuA[i]&#xA;    deltaX = (x_dot * deltaT) + (0.5 * a * np.cos(theta) * deltaT**2)&#xA;    deltaY = (y_dot * deltaT) + (0.5 * a * np.sin(theta) * deltaT**2)&#xA;&#xA;    # Update the velocity at the end of the time step&#xA;    x_dot += a * np.cos(theta) * deltaT&#xA;    y_dot += a * np.sin(theta) * deltaT&#xA;&#xA;    # Update the current coordinates&#xA;    x += deltaX&#xA;    y += deltaY&#xA;&#xA;    # Store the coordinates for plotting&#xA;    xArr3.append(x)&#xA;    yArr3.append(y)&#xA;&#xA;    # Calculate the change in angular displacement&#xA;    theta_dot = imuOmega[i]&#xA;    theta += theta_dot * deltaT&#xA;&#xA;# Estimate the true trajectory with a Kalman filter&#xA;&#xA;# State matrix&#xA;X_k_min = np.array([&#xA;    [0], # x&#xA;    [0], # y&#xA;    [0], # theta&#xA;    [0], # x_dot&#xA;    [0], # y_dot&#xA;    [0], # theta_dot&#xA;    [0], # x_dot_dot&#xA;    [0]  # y_dot_dot&#xA;])&#xA;&#xA;# State covariance matrix&#xA;P_k_min = np.zeros((8, 8))&#xA;&#xA;# State transition matrix&#xA;A = np.array([&#xA;    [1, 0, 0, deltaT, 0, 0, 0.5*deltaT**2, 0],&#xA;    [0, 1, 0, 0, deltaT, 0, 0, 0.5*deltaT**2],&#xA;    [0, 0, 1, 0, 0, deltaT, 0, 0],&#xA;    [0, 0, 0, 1, 0, 0, deltaT, 0],&#xA;    [0, 0, 0, 0, 1, 0, 0, deltaT],&#xA;    [0, 0, 0, 0, 0, 1, 0, 0],&#xA;    [0, 0, 0, 0, 0, 0, 1, 0],&#xA;    [0, 0, 0, 0, 0, 0, 0, 1]&#xA;])&#xA;&#xA;# Process covariance matrix&#xA;Q = np.eye(8)&#xA;&#xA;# Measurement vector&#xA;## 0: a (forward acceleration)&#xA;## 1: omega (angular velocity)&#xA;## 2: deltaU (local x displacement)&#xA;## 3: deltaV (local y displacement)&#xA;## 4: deltaTheta (local angular displacement)&#xA;&#xA;# Measurement covariance matrix&#xA;R = np.eye(5)&#xA;&#xA;# Function to calculate the measurement function Jacobian&#xA;def CalculateH_k(X, t):&#xA;    theta = X[2, 0]&#xA;    xDot = X[3, 0]&#xA;    yDot = X[4, 0]&#xA;    xDotDot = X[6, 0]&#xA;    yDotDot = X[7, 0]&#xA;&#xA;    return np.array([&#xA;        [0, 0, yDotDot * np.cos(theta) - xDotDot * np.sin(theta), 0, 0, 0, np.cos(theta), np.sin(theta)],&#xA;        [0, 0, 0, 0, 0, 1, 0, 0],&#xA;        [0, 0, np.cos(theta) * ((yDotDot * t**2) / 2 + yDot * t) - np.sin(theta) * (&#xA;                    (xDotDot * t**2) / 2 + xDot * t), t * np.cos(theta), t * np.sin(theta), 0, (t**2 * np.cos(theta)) / 2, (&#xA;                     t**2 * np.sin(theta)) / 2],&#xA;        [0, 0, - np.cos(theta) * ((xDotDot * t**2) / 2 + xDot * t) - np.sin(theta) * (&#xA;                    (yDotDot * t**2) / 2 + yDot * t), -t * np.sin(theta), t * np.cos(theta), 0, -(t**2 * np.sin(theta)) / 2, (&#xA;                     t**2 * np.cos(theta)) / 2],&#xA;        [0, 0, 0, 0, 0, t, 0, 0]&#xA;    ])&#xA;&#xA;# Measurement function&#xA;def Measure(X):&#xA;    theta = X[2, 0]&#xA;    xDot = X[3, 0]&#xA;    yDot = X[4, 0]&#xA;    thetaDot = X[5, 0]&#xA;    xDotDot = X[6, 0]&#xA;    yDotDot = X[7, 0]&#xA;&#xA;    deltaX = xDot * deltaT + 0.5 * xDotDot * (deltaT**2)&#xA;    deltaY = yDot * deltaT + 0.5 * yDotDot * (deltaT**2)&#xA;    deltaU = deltaX * np.cos(theta) + deltaY * np.sin(theta)&#xA;    deltaV = -deltaX * np.sin(theta) + deltaY * np.cos(theta)&#xA;    deltaTheta = thetaDot * deltaT&#xA;    accel = xDotDot * np.cos(theta) + yDotDot * np.sin(theta)&#xA;    omega = thetaDot&#xA;&#xA;    return np.array([&#xA;        [accel],&#xA;        [omega],&#xA;        [deltaU],&#xA;        [deltaV],&#xA;        [deltaTheta]&#xA;    ])&#xA;&#xA;xArr4 = []&#xA;yArr4 = []&#xA;&#xA;for i in range(100):&#xA;    a = imuA[i]&#xA;    omega = imuOmega[i]&#xA;&#xA;    # Setup the observation matrix&#xA;    Z_k = np.array([&#xA;        [imuA[i]],&#xA;        [imuOmega[i]],&#xA;        [odoU[i]],&#xA;        [odoV[i]],&#xA;        [odoTheta[i]]&#xA;    ])&#xA;&#xA;    # Calculate the estimated new state&#xA;    X_k = A.dot(X_k_min)&#xA;&#xA;    # Calculate the estimated new state covariance matrix&#xA;    P_k = A.dot(P_k_min).dot(np.transpose(A)) + Q&#xA;&#xA;    # Find the measurement Jacobian at the current time step&#xA;    H_k = CalculateH_k(X_k_min, deltaT)&#xA;&#xA;    # Calculate the Kalman gain&#xA;    G_k = P_k.dot(np.transpose(H_k)).dot(np.linalg.inv(H_k.dot(P_k).dot(np.transpose(H_k)) + R))&#xA;&#xA;    # Calculate the improved current state estimate&#xA;    X_k = X_k + G_k.dot(Z_k - Measure(X_k_min))&#xA;&#xA;    # Calculate the improved current state covariance&#xA;    P_k = (np.eye(8) - G_k.dot(H_k)).dot(P_k)&#xA;&#xA;    xArr4.append(X_k[0, 0])&#xA;    yArr4.append(X_k[1, 0])&#xA;&#xA;    # Make the current state the previous&#xA;    X_k_min = X_k&#xA;    P_k_min = P_k&#xA;&#xA;plt.plot(xArr, yArr, linewidth=3)&#xA;plt.plot(xArr2, yArr2)&#xA;plt.plot(xArr3, yArr3)&#xA;plt.plot(xArr4, yArr4)&#xA;plt.legend(['Ground truth', 'VO', 'IMU', 'Filtered'])&#xA;plt.grid()&#xA;plt.show()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I have double checked everything and just can't figure out what I am doing wrong even though it must be something obvious. Any ideas?&lt;/p&gt;&#xA;" OwnerUserId="26692" LastActivityDate="2020-08-04T19:01:25.200" Title="2D Visual-Inertial Extended Kalman Filter" Tags="&lt;kalman-filter&gt;&lt;python&gt;&lt;ekf&gt;&lt;odometry&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20876" PostTypeId="2" ParentId="20874" CreationDate="2020-06-30T19:14:41.730" Score="1" Body="&lt;p&gt;Your ability to calibrate a load cell is going to depend on the orientation of the strain gauges inside the load cell, which is determined by however the manufacturer chooses to apply or embed them.&lt;/p&gt;&#xA;&lt;p&gt;There are all kinds of &amp;quot;tricks&amp;quot; you can do with strain gauges, like being able to remove the effects of bending moments, thermal compensation, etc., but again it all depends on how the strain gauges are applied.&lt;/p&gt;&#xA;&lt;p&gt;If you are at all unsure of how the load cell is intended to be used then the first place you should go to is the datasheet.&lt;/p&gt;&#xA;&lt;p&gt;The top image in your question looks like it's setup to torque the load cell, but if you have a strain gauge on top and one on bottom, and they're wired in series, then one strain gauge is in tension when the other is in compression and the net result is (nearly) zero change in total resistance - this is one of the &amp;quot;neat tricks&amp;quot; I mentioned previously. Such an arrangement would give (virtually) no change in reading if you were to put that on a countertop and place items on it like a weighing scale, but WOULD give you a change if you were to mount it on a wall and use it like a coat rack.&lt;/p&gt;&#xA;&lt;p&gt;Again, it all depends on how the strain gauges are installed and wired. Consult the datasheet!&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-06-30T19:14:41.730" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20877" PostTypeId="1" CreationDate="2020-07-01T01:36:20.313" Score="0" ViewCount="14" Body="&lt;p&gt;Currently computer vision based inference is impractical on a drone given the significant power draw.&lt;/p&gt;&#xA;&lt;p&gt;Is connecting a drone to a base station which does CV a viable solution to this issue? Has it been done before?&lt;/p&gt;&#xA;" OwnerUserId="21514" LastActivityDate="2020-07-01T01:36:20.313" Title="Drone based CV via base station - power requirments" Tags="&lt;mobile-robot&gt;&lt;computer-vision&gt;&lt;drone&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20878" PostTypeId="1" CreationDate="2020-07-01T05:06:15.113" Score="2" ViewCount="54" Body="&lt;p&gt;I'm really sorry if this is a dumb question, but I don't have a clue on how to do this. I'm trying to write a kalman filter with a State vector of :&lt;/p&gt;&#xA;&lt;p&gt;{x,&lt;/p&gt;&#xA;&lt;p&gt;y,&lt;/p&gt;&#xA;&lt;p&gt;ẋ,&lt;/p&gt;&#xA;&lt;p&gt;ẏ,&lt;/p&gt;&#xA;&lt;p&gt;ẍ,&lt;/p&gt;&#xA;&lt;p&gt;ÿ&#xA;}&lt;/p&gt;&#xA;&lt;p&gt;To estimate the 2 dimensional position and velocity of a holonomic robot. Currently, I'm planning on fusing encoder odometry(50 hz, negligible latency), accelerometer data(50 hz, negligible latency), vision data (100 hz, 20 ms latency), and 3d vision data through solvepnp (20 hz, 20 ms latency). I'm hoping to get position and velocity data (+/- 1 meter, +/- 2 m/s respectively). How do I set up a filter for this using the apache commons math library?&lt;/p&gt;&#xA;" OwnerUserId="26695" LastEditorUserId="26695" LastEditDate="2020-07-02T08:31:13.740" LastActivityDate="2020-07-02T08:31:13.740" Title="Kalman Filter for 2d pose" Tags="&lt;localization&gt;&lt;kalman-filter&gt;&lt;odometry&gt;&lt;sensor-fusion&gt;&lt;first-robotics&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20880" PostTypeId="2" ParentId="20872" CreationDate="2020-07-01T06:07:37.230" Score="3" Body="&lt;p&gt;Mathematically a rotation vector(or axis angle) representation will always convert to the same rotation matrix.&lt;/p&gt;&#xA;&lt;p&gt;However, multiple different rotation vectors can lead to the same rotation matrix.&lt;/p&gt;&#xA;&lt;p&gt;A rotation vector represents a rotation by an axis and an angular rotation around that axis(axis angle).&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ \begin{bmatrix} e_x \\ e_y \\ e_z \end{bmatrix},\theta$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Thinking about it for a bit it is pretty easy to see where different axis angle representations will lead to the same rotation.&lt;/p&gt;&#xA;&lt;p&gt;One is when the angle(&lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt;) is the same angle but in the opposite direction. E.g &lt;span class=&quot;math-container&quot;&gt;$\frac{\pi}{2}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\frac{-3\pi}{2}$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The other is when the axis points in the opposite direction, and the angle is also in the opposite direction.&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ \{\begin{bmatrix} e_x \\ e_y \\ e_z \end{bmatrix},\theta\}=\{\begin{bmatrix} -e_x \\ -e_y \\ -e_z \end{bmatrix},-\theta\}$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Finally for numerical reason oftentimes the Rodrigues formula will also set some values constant/Identity if the rotation is small enough. So while mathematically they should lead to distinct values, on your computer they might end up being the same thing.&lt;/p&gt;&#xA;" OwnerUserId="15265" LastEditorUserId="15265" LastEditDate="2020-07-01T23:28:07.750" LastActivityDate="2020-07-01T23:28:07.750" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20881" PostTypeId="2" ParentId="20854" CreationDate="2020-07-01T11:26:20.420" Score="1" Body="&lt;p&gt;I can't comment, so writing this as an answer. Did you try calling &lt;code&gt;msg.detections.pose.pose.orientation.w&lt;/code&gt;?&lt;/p&gt;&#xA;&lt;p&gt;From your message definition hierarchy, is seems pose is under object detections.&lt;/p&gt;&#xA;" OwnerUserId="13969" LastActivityDate="2020-07-01T11:26:20.420" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20882" PostTypeId="2" ParentId="20833" CreationDate="2020-07-01T11:31:08.147" Score="1" Body="&lt;p&gt;Why would you not like to use ROS? Seems like if you use this package along with custom code for the rest of the solution it'll be good to go.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Is there a way to use the package as a library, by calling functions&#xA;as APIs? How would I go about it, has it been done?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It is possible by altering the code to remove ROS dependencies and use the cor filter algorithm in the package. However I won't suggest that. There should probably be other libraries independent of ROS to achieve this. You can try editing the code as a last resort.&lt;/p&gt;&#xA;&lt;p&gt;I've been using robot_localization package and have been getting satisfying results&lt;/p&gt;&#xA;" OwnerUserId="13969" LastActivityDate="2020-07-01T11:31:08.147" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20883" PostTypeId="2" ParentId="19506" CreationDate="2020-07-02T04:14:49.393" Score="2" Body="&lt;p&gt;D.T Kalman filter time update equations (predict) with initial estimates for &lt;span class=&quot;math-container&quot;&gt;$\hat{x}_k$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$P_{k}$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Project the state ahead: &lt;span class=&quot;math-container&quot;&gt;$\hat{x}^-_{k+1} = F\hat{x}_{k}+Bu_{k}$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;li&gt;Project the error covariance ahead: &lt;span class=&quot;math-container&quot;&gt;$P^-_{k+1} = FP_{k}F^T+Q$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Measurement equations (correct)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Compute the Kalman gain: &lt;span class=&quot;math-container&quot;&gt;$K_{k+1} = P^-_{k+1}C^T(CP^-_{k+1}C^T+R)^{-1}$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;li&gt;Update estimate with measurement: &lt;span class=&quot;math-container&quot;&gt;$\hat{x}_{k+1} = \hat{x}^-_{k+1}+K_{k+1}(y_{k+1}-C\hat{x}^-_{k+1})$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;li&gt;Update the error covariance: &lt;span class=&quot;math-container&quot;&gt;$P_{k+1}= (I-K_{k+1}C)P^-_{k+1}$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Note the super minus sign is for a priori estimate.&lt;/p&gt;&#xA;" OwnerUserId="21747" LastActivityDate="2020-07-02T04:14:49.393" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20884" PostTypeId="1" CreationDate="2020-07-02T06:02:46.407" Score="0" ViewCount="25" Body="&lt;p&gt;I am trying to find out if and how i could use Scratch to control Waveshare's Alphabot kit.&lt;/p&gt;&#xA;&lt;p&gt;I want to be used as an entry level robotics training for kids 8-10 that already manage standard Scratch.&lt;/p&gt;&#xA;&lt;p&gt;Unfortunately they are not ready yet for python.&lt;/p&gt;&#xA;&lt;p&gt;Any advice would be appreciated.&lt;/p&gt;&#xA;&lt;p&gt;Link: &lt;a href=&quot;https://www.waveshare.com/alphabot-pi.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.waveshare.com/alphabot-pi.htm&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/ppQ59.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ppQ59.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="26702" LastActivityDate="2020-07-02T06:02:46.407" Title="Using Scratch with Waveshare Alphabot pi robot" Tags="&lt;raspberry-pi&gt;&lt;kit&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20885" PostTypeId="1" CreationDate="2020-07-02T11:44:58.003" Score="0" ViewCount="36" Body="&lt;p&gt;This isn't about any complex math or physics of robots, but rather an annoying practical issue I don't find much information about.&lt;/p&gt;&#xA;&lt;p&gt;My robot works indoors (house, office) and there's certainly going to be hair or there, which gets entangled on the wheels. How do I avoid it?&lt;/p&gt;&#xA;&lt;p&gt;I don't know if it has some serious effect on the performance, so if someone can educate me on that as well, that would be great.&lt;/p&gt;&#xA;" OwnerUserId="13969" LastActivityDate="2020-07-02T11:44:58.003" Title="How to avoid hair entanglement in your robot wheels?" Tags="&lt;mobile-robot&gt;&lt;motor&gt;&lt;wheeled-robot&gt;&lt;two-wheeled&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20886" PostTypeId="1" AcceptedAnswerId="20898" CreationDate="2020-07-04T01:48:11.950" Score="1" ViewCount="75" Body="&lt;p&gt;I have purchased x4 612 RPM actobotics motors. Every time I try to drive the motors on ground, the motors stall, as if the torque was too low to drive.&lt;/p&gt;&#xA;&lt;p&gt;The motor model: &lt;a href=&quot;https://www.servocity.com/612-rpm-hd-premium-planetary-gear-motor&quot; rel=&quot;nofollow noreferrer&quot;&gt;servocity.com model #: 638284 Planetary Gear Motor 612 RPM @ 12v (1/14 Ratio)&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Here is a picture of how i assembled the motors to the chassis:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/5PTOC.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/5PTOC.jpg&quot; alt=&quot;Agent 390 motor assembly (modified to fit 4 612 RPM motors)&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;See: &lt;a href=&quot;https://www.servocity.com/media/catalog/product/cache/1/image/9df78eab33525d08d6e5fb8d27136e95/6/3/637182_agent_390_bottom_600px.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;Original Agent 390 chassis motor assembly&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I have looked at the &lt;a href=&quot;https://www.servocity.com/media/attachment/file/6/3/638284_and_638332_torque_vs_rpm.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;motor torque tables&lt;/a&gt; on this specific model. I have calculated that if my robot weighs 15lbs, that with x4 612 RPM motors, they should be able to run at about 500 RPM:&lt;/p&gt;&#xA;&lt;p&gt;I weighed my robot and it only weighs 12 lbs, but the motors are too weak to drive!&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;What I want to know, is&lt;/strong&gt;: what &lt;em&gt;should&lt;/em&gt; the RPM of four 612 RPM actobotics motors with 12 lbs on them collectively, being powered by an 11.5v, 3000mA battery pack be?&lt;/p&gt;&#xA;&lt;p&gt;And... should the motors be able to hold a 12 lb load?&lt;/p&gt;&#xA;" OwnerUserId="26710" LastEditorUserId="26710" LastEditDate="2020-07-06T17:47:33.073" LastActivityDate="2020-07-07T12:33:13.047" Title="Why aren't my 4x 612 RPM motors driving with only 12 lb load?" Tags="&lt;motor&gt;&lt;torque&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="20887" PostTypeId="1" CreationDate="2020-07-04T14:17:22.537" Score="2" ViewCount="40" Body="&lt;p&gt;I have a configuration space in 3D where my manipulator must reach certain points. Taking into account all the factors how do I decide the mininum number of links and joints my arm must have?&lt;/p&gt;&#xA;" OwnerUserId="26696" LastEditorUserId="26696" LastEditDate="2020-07-06T04:51:51.403" LastActivityDate="2020-07-06T12:17:41.067" Title="How do I decide the minimum number of link lengths and joints my manipulator must have from the configuration space?" Tags="&lt;robotic-arm&gt;&lt;manipulator&gt;&lt;joint&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20889" PostTypeId="2" ParentId="20875" CreationDate="2020-07-04T16:52:44.247" Score="1" Body="&lt;p&gt;Your noise term for the KF needs to reflect how you expect the true propagation of the state will differ from your model of the propagation. For example, the acceleration uncertainty is 1 while your true uncertainty is drawn from a uniform distribution of [-10,10].&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;I altered your code so the KF is now using the IMU information within the propagation step. It still needs to incorporate the IMU uncertainty correctly within the process noise. I also simplified the measurements to be the position and orientation of the state. You should probably rewrite the numerical Jacobians that I've used in favor of analytic Jacobians.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;import numpy as np&#xA;import matplotlib.pyplot as plt&#xA;from random import *&#xA;&#xA;# The state vector is&#xA;#  pos_x, pos_y, theta, vel_x, vel_y&#xA;&#xA;def getVehRate(state, imu):&#xA;    # position rate is equal to velocity&#xA;    dxdy = state[3:5]&#xA;&#xA;    # theta rate is euqal to the gyro measurement&#xA;    dtheta = imu[1]&#xA;&#xA;    # velocity rate is equal to the accel broken into the xy basis&#xA;    dvelx = imu[0] * np.cos(state[2])&#xA;    dvely = imu[0] * np.sin(state[2])&#xA;&#xA;    dstate = 0. * state&#xA;    dstate[0:2] = dxdy&#xA;    dstate[2] = dtheta&#xA;    dstate[3] = dvelx&#xA;    dstate[4] = dvely&#xA;    return dstate&#xA;&#xA;&#xA;def rk4(state, imu, func, dt):&#xA;    # runs a rk4 numerical integration&#xA;    k1 = dt * func(state, imu)&#xA;    k2 = dt * func(state + .5*k1, imu)&#xA;    k3 = dt * func(state + .5*k2, imu)&#xA;    k4 = dt * func(state + k3, imu)&#xA;&#xA;    return state + (1./6.)*(k1 + 2.*k2 + 2.*k3 + k4)&#xA;&#xA;&#xA;def numericalDifference(x, func, data, ep = .001):&#xA;    # calculates the numeical jacobian&#xA;&#xA;    y = func(x, data)&#xA;&#xA;    A = np.zeros([y.shape[0], x.shape[0]])&#xA;&#xA;    for i in range(x.shape[0]):&#xA;        x[i] += ep&#xA;        y_i = func(x, data)&#xA;        A[i] = (y_i - y)/ep&#xA;        x[i] -= ep&#xA;&#xA;    return A&#xA;&#xA;def numericalJacobianOfStatePropagationInterface(state, data):&#xA;    # data contains both the imu and dt, it needs to be broken up for the rk4&#xA;    return rk4(state, data[0], getVehRate, data[1])&#xA;&#xA;&#xA;&#xA;# Sampling period&#xA;dt = .1&#xA;t_steps = 500&#xA;state = np.zeros(5)&#xA;&#xA;state_hist = np.zeros([t_steps, 5])&#xA;imu_hist = np.zeros([t_steps, 2])&#xA;&#xA;&#xA;# Setup simulated data&#xA;for i in range(t_steps):&#xA;    # generate a rate to propagate states with&#xA;    accel = uniform(-10, 10)&#xA;    theta_dot = uniform(-0.2, 0.2)&#xA;    imu = np.array([accel, theta_dot])&#xA;&#xA;    # propagating the state with the IMU measurement&#xA;    state = rk4(state, imu, getVehRate, dt)&#xA;&#xA;    # saving off the current state&#xA;    state_hist[i] = state *1.&#xA;    imu_hist[i] = imu*1.&#xA;&#xA;&#xA;# kf stuff&#xA;state = np.zeros([5])&#xA;cov = np.eye(5) * .001&#xA;&#xA;kf_state_hist = np.zeros([t_steps, 5])&#xA;kf_cov_hist = np.zeros([t_steps, 5,5])&#xA;kf_meas_hist = np.zeros([t_steps, 3])&#xA;kf_imu_hist = np.zeros([t_steps, 2])&#xA;&#xA;# imu accel and gyro noise&#xA;accel_cov = .0001&#xA;gyro_cov  = .0001&#xA;Q_imu = np.array([[.1, 0],[0, .01]])&#xA;&#xA;r_meas = .001&#xA;&#xA;#  running the data through the KF with noised measurements&#xA;for i in range(t_steps):&#xA;&#xA;    # propagating the state&#xA;    imu_meas = imu_hist[i]&#xA;    imu_meas[0] += np.random.randn(1) * accel_cov**.5&#xA;    imu_meas[1] += np.random.randn(1) * gyro_cov**.5&#xA;&#xA;    A = numericalDifference(state, numericalJacobianOfStatePropagationInterface, [imu_meas, dt])&#xA;    cov = A.dot(cov.dot(A.T))&#xA;&#xA;    ###&#xA;    # TODO : calculate how the accel and gyro noise turn into the process noise for the system&#xA;    ###&#xA;    # A_state_wrt_imu = jacobianOfPropagationWrtIMU&#xA;    # Q = A_state_wrt_imu * Q_imu * A_state_wrt_imu.T&#xA;    # cov += Q&#xA;    # sloppy placeholder&#xA;    cov += np.eye(5) * .1&#xA;&#xA;    state = rk4(state, imu_meas, getVehRate, dt)&#xA;&#xA;    # measurement update&#xA;    zt = state[:3]  + np.random.randn(1) *r_meas**.5&#xA;    zt_hat = state[:3]&#xA;&#xA;    H = np.zeros([3,5])&#xA;    H[:3,:3] = np.eye(3)&#xA;&#xA;    S = np.linalg.inv(H.dot(cov.dot(H.T)) + r_meas * np.eye(3))&#xA;    K = cov.dot(H.T).dot( S )&#xA;&#xA;    #state = state + K.dot(zt - zt_hat)&#xA;    cov = (np.eye(5) - K.dot(H)).dot(cov)&#xA;&#xA;    kf_state_hist[i] = state&#xA;    kf_cov_hist[i] = cov&#xA;    kf_meas_hist[i] = zt_hat&#xA;    kf_imu_hist[i] = imu_meas&#xA;&#xA;&#xA;&#xA;plt.plot(state_hist[:,0], state_hist[:,1], linewidth=3)&#xA;plt.plot(kf_state_hist[:,0], kf_state_hist[:,1], linewidth=3)&#xA;plt.legend(['Ground truth', 'kf est'])&#xA;plt.grid()&#xA;plt.show()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="8842" LastEditorUserId="8842" LastEditDate="2020-07-05T17:08:21.153" LastActivityDate="2020-07-05T17:08:21.153" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20890" PostTypeId="1" CreationDate="2020-07-05T05:07:13.233" Score="0" ViewCount="68" Body="&lt;p&gt;I am looking to simulate a ZED camera in Microsoft Airsim in order to train my robot for vision tasks. How should I go about it?&lt;/p&gt;&#xA;" OwnerUserId="24234" LastActivityDate="2020-07-05T05:07:13.233" Title="Simulate a stereo camera in Airsim" Tags="&lt;simulation&gt;&lt;stereo-vision&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20892" PostTypeId="2" ParentId="20887" CreationDate="2020-07-06T12:17:41.067" Score="1" Body="&lt;p&gt;If you should consider not just points, but poses (position and orientations). If you can write these as a table, where the columns are the coordinates&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;+-------+--------+--------+-------+---------+--------+--------+&#xA;| Point | X [mm] | Y [mm] | Z [mm]| A [deg] | B[deg] | C[deg] |   &#xA;+-------+--------+--------+-------+---------+--------+--------+&#xA;| P1    |  100.0 |  200.0 | 400.0 |    90.0 |   20.0 |    0.0 |&#xA;| P2    | 1500.0 |  200.0 | 800.0 |    90.0 |   45.0 |    0.0 |&#xA;| P3    |   42.0 |  200.0 | 400.0 |     0.0 |   90.0 |    0.0 |&#xA;+-------+--------+--------+-------+---------+--------+--------+&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;In order to asses how many degree of freedom do you need, you have to see how many coordinates in the table are constant. e.g. the Y column is constant and the C column is constant so you &lt;strong&gt;might&lt;/strong&gt; be able to use a four degrees of freedom robot. However, systems with limited amount of degrees of freedom might have coupled motions, meaning that one or more of the coordinates which are not controlled are not constant, but change in a way which can be calculated, but not controlled. These simply result form the specifics of the mechanism used.&lt;/p&gt;&#xA;&lt;p&gt;In the example form the table, two transnational axes and two rotational axes and two rotational axes can be used, but four rotational axes would not be well suited.&lt;/p&gt;&#xA;&lt;p&gt;As for dimensioning the linkages maximum distances between the points can be considered. The angular difference between the orientation can be used to dimension the angular range of the orientation axes. Dimensioning the linkages is heavily dependent on the chosen axis types and configuration, there is no generic answer if the axis configuration is not known.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-07-06T12:17:41.067" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20894" PostTypeId="1" CreationDate="2020-07-06T17:56:04.637" Score="0" ViewCount="54" Body="&lt;p&gt;I am working on a bot controlled by Arduino-UNO using HC-SR04. I want my bot to go around the floor, avoiding all obstacles, covering the entire floor. I tried measuring wall distance on all sides and gradually navigating the bot so as to increase two distances(h2 and l1 in my case) and decrease the other two. But this approach works only in an rectangular room without obstacles.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/cUBCl.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/cUBCl.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;It appears my approach is not right. What should be my approach to navigate if the walls are not at right angles or has obstacle but navigable path behind?&lt;/p&gt;&#xA;" OwnerUserId="26717" LastActivityDate="2021-04-27T16:24:37.477" Title="Approach for covering entire floor plan using Arduino-UNO and HC-SR04" Tags="&lt;arduino&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20895" PostTypeId="2" ParentId="20886" CreationDate="2020-07-06T23:21:12.777" Score="0" Body="&lt;p&gt;Without the exact circuit its difficult to be sure. If connections are properly done, most probably the power source(battery pack in this case) is unable to provide sufficient current to power the motors. A good start would be to connect just 1 motor and check if the battery pack is able to run your motor. You can also try a different power source to confirm.&lt;/p&gt;&#xA;" OwnerUserId="26717" LastActivityDate="2020-07-06T23:21:12.777" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20896" PostTypeId="1" CreationDate="2020-07-07T03:22:57.340" Score="1" ViewCount="36" Body="&lt;p&gt;Consider a nonlinear system &lt;span class=&quot;math-container&quot;&gt;$x(k+1)=f(x(k),u(k))$&lt;/span&gt;, where &lt;span class=&quot;math-container&quot;&gt;$x(k)\in\mathbb{R}^{n}$&lt;/span&gt; is the state, &lt;span class=&quot;math-container&quot;&gt;$u(k)\in\mathbb{R}^m$&lt;/span&gt; is the control input. Here &lt;span class=&quot;math-container&quot;&gt;$u(k)$&lt;/span&gt; is normally distributed RV with mean &lt;span class=&quot;math-container&quot;&gt;$\mu_u(k)$&lt;/span&gt; and variance &lt;span class=&quot;math-container&quot;&gt;$\Sigma_u(k)$&lt;/span&gt;. I want to find the distribution of &lt;span class=&quot;math-container&quot;&gt;$x(k)$&lt;/span&gt; starting from some deterministic &lt;span class=&quot;math-container&quot;&gt;$x(0)$&lt;/span&gt; for some horizon &lt;span class=&quot;math-container&quot;&gt;$K$&lt;/span&gt;.&#xA;Then can the ordinary EKF update equation be used for the prediction in the below way?&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;\begin{align*}&#xA;\mu_x(k+1)&amp;amp;=f(\mu_x(k),\mu_u(k)),\\&#xA;\Sigma_x(k+1)&amp;amp;=\nabla_x f(\mu_x(k),\mu_u(k))\Sigma_x(k)\nabla_x f(\mu_x(k),\mu_u(k))^\top+\nabla_u f(\mu_x(k),\mu_u(k))\Sigma_u(k)\nabla_u f(\mu_x(k),\mu_u(k))^\top&#xA;\end{align*}&lt;/span&gt;&lt;/p&gt;&#xA;" OwnerUserId="22582" LastActivityDate="2020-07-08T13:29:10.487" Title="State propagation from uncertain control input" Tags="&lt;kalman-filter&gt;&lt;ekf&gt;&lt;uncertainty&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20897" PostTypeId="2" ParentId="20896" CreationDate="2020-07-07T12:07:20.390" Score="1" Body="&lt;p&gt;Yes. This approach is commonly used when IMUs are present because they measure the rate of state change with some uncertainty.&lt;/p&gt;&#xA;" OwnerUserId="8842" LastEditorUserId="8842" LastEditDate="2020-07-08T13:29:10.487" LastActivityDate="2020-07-08T13:29:10.487" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20898" PostTypeId="2" ParentId="20886" CreationDate="2020-07-07T12:33:13.047" Score="1" Body="&lt;p&gt;The no load current draw, &lt;em&gt;per motor&lt;/em&gt;, is 0.52 amps. You have 4 motors, so you're looking at over 2 amps for no load.&lt;/p&gt;&#xA;&lt;p&gt;The stall current is TWENTY amps, &lt;em&gt;per motor.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;You also appear to not be using an actual battery, but rather some portable power device that has an internal battery. The electronics in it could easily be performing a short circuit detection and killing output to safeguard the battery.&lt;/p&gt;&#xA;&lt;p&gt;You should check current draw with your multimeter:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Make sure the multimeter probes are plugged into the current (&amp;quot;A&amp;quot;) connectors, then&lt;/li&gt;&#xA;&lt;li&gt;Make sure the multimeter is set to current, then&lt;/li&gt;&#xA;&lt;li&gt;Attach the positive lead from your battery device to the positive port/probe on the multimeter, then&lt;/li&gt;&#xA;&lt;li&gt;Attach the negative lead from the multimeter to the positive connector on your robot.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;You measure current with a multimeter by putting it in series with the load. Putting it between the battery and load will let you measure the total current output of the battery.&lt;/p&gt;&#xA;&lt;p&gt;I would guess you'll see one of two things:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Some small power draw for your electronics, then a rise in current when you try to run the motors, but to an amount not sufficient to run them, like 1 or 1.5 amps, for example, or&lt;/li&gt;&#xA;&lt;li&gt;Some small power draw for your electronics, then suddenly no current at all when you try to run the motors, which would be a short circuit protection disconnecting the power output.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;You'll either need more battery packs or you'll need to ditch the portable electronics and use the batteries directly (or both!)&lt;/p&gt;&#xA;&lt;p&gt;Lastly, your four motors have the potential to draw a combined EIGHTY AMPS of current. I would strongly suggest you check the current limits of the wire gauge you're using, pick a value LESS than that, and add a fuse so you don't start a fire.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-07-07T12:33:13.047" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20899" PostTypeId="1" CreationDate="2020-07-07T14:18:00.423" Score="0" ViewCount="720" Body="&lt;p&gt;I am trying to find out the math formulas for Inverse Kinematics for a &lt;strong&gt;4-DOF articulated manipulator&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/q7elK.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/q7elK.png&quot; alt=&quot;4-DOF articulated manipulator diagram&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;By Googling I found information about inverse kinematics for 3-DOF, 4-DOF and 6-DOF articulated manipulator, but very few information for 4-DOF robot arm.&lt;/p&gt;&#xA;&lt;p&gt;But what I found is a paper explaining how to calculate FK and IK for a 4-DOF robot arm:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.researchgate.net/publication/279201859_Kinematics_Modeling_of_a_4-DOF_Robotic_Arm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Kinematics Modeling of a 4-DOF Robotic Arm&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I tried to implement the math formula in C code but the calculation doesn't seem to work.&lt;/p&gt;&#xA;&lt;p&gt;I believe that the formulas are wrong.&lt;/p&gt;&#xA;&lt;p&gt;The math formula algebraically is the as follow:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/0Cobv.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0Cobv.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;dx, dy and dz&lt;/strong&gt; are the global en effector coordinates.&lt;/p&gt;&#xA;&lt;p&gt;Angle &lt;strong&gt;phi&lt;/strong&gt; is the end effector orientation.&lt;/p&gt;&#xA;&lt;p&gt;The C-code looks like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;&#xA;#include &amp;lt;math.h&amp;gt;&#xA;&#xA;#define M_PI   3.14159265358979323846264338327950288&#xA;&#xA;#define deg2Rad(angleInDegrees) ((angleInDegrees) * M_PI / 180.0)&#xA;#define rad2Deg(angleInRadians) ((angleInRadians) * 180.0 / M_PI)&#xA;&#xA;int main()&#xA;{&#xA;&#xA;    float l1, l2, l3, l4;   // Links mm&#xA;    float dx, dy, dz;       // EE position&#xA;    float phi;              // EE orientation&#xA;    float theta1, theta2, theta3, theta4;   // Joint variables that will be calculated&#xA;    float A, B, C;&#xA;    &#xA;    l1 = 170.0;&#xA;    l2 = 45.0;&#xA;    l3 = 85.0;&#xA;    l4 = 130.0;&#xA;    phi = 0.4;&#xA;&#xA;    dx = 30.0;&#xA;    dy = 15.0;&#xA;    dz = 20.0;&#xA;&#xA;    theta1 = atan(dy/dx);&#xA;&#xA;    A = (dx - l4 * cos(theta1) * cos(phi));&#xA;    B = (dy - l4 * sin(theta1) * cos(phi));&#xA;    C = (dz - l1 - l4 * sin(phi));&#xA;&#xA;   theta3 = acos(((A*A+B*B+C*C)-(l2*l2)-(l3*l3))/(2*l2*l3));&#xA;&#xA;   printf(&amp;quot;theta1: %f\n&amp;quot;, theta1);&#xA;   printf(&amp;quot;A: %f\n&amp;quot;, A);&#xA;   printf(&amp;quot;B: %f\n&amp;quot;, B);&#xA;   printf(&amp;quot;C: %f\n&amp;quot;, C);&#xA;&#xA;   printf(&amp;quot;theta3: %f\n&amp;quot;, theta3);&#xA;&#xA;   return 0;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;When I calculate theta3 I get nand because what is inside acos is greater than 1 and acos can't have a value greater than 1. The conclusion is that something is wrong with the formulas.&lt;/p&gt;&#xA;&lt;p&gt;Any suggestion?&lt;/p&gt;&#xA;" OwnerUserId="26627" LastEditorUserId="17029" LastEditDate="2020-07-07T16:08:39.790" LastActivityDate="2021-04-07T20:04:50.500" Title="Inverse kinematics for 4-DOF Articualted manipluator" Tags="&lt;inverse-kinematics&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20900" PostTypeId="2" ParentId="20899" CreationDate="2020-07-07T17:02:20.320" Score="0" Body="&lt;p&gt;If your image is correct, it appears that you have a &amp;quot;planar 3 link arm&amp;quot; mounted on a turn-table.  If so, I would suggest that you decompose the problem into yaw (joint 1), and X/Y in the plane (joints 2-4).  It will probably be easiest to use polar coordinates.&lt;/p&gt;&#xA;&lt;p&gt;You should be able to find many solutions online for a planar 3 link arm.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2020-07-07T17:02:20.320" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20901" PostTypeId="1" CreationDate="2020-07-07T18:04:51.047" Score="1" ViewCount="34" Body="&lt;p&gt;I know of several robot manufacturers who can perform automatic inertial measurement for 6 axis robots. Fanuc, for example, moves with axes 5 and 6 each from +180 to -180 °, once with and once without load.&#xA;My question is how I can calculate the inertia parameter from e.g. the torques and the positions (thus also from speeds and accelerations) for each individual axis.&#xA;There are some papers about this, but no practical examples (e.g. &lt;a href=&quot;https://hal.archives-ouvertes.fr/hal-00362677/document&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://hal.archives-ouvertes.fr/hal-00362677/document&lt;/a&gt;).&#xA;Can anyone help me with this?&lt;/p&gt;&#xA;&lt;p&gt;My goal would be to run a trajectory once with and once without load and calculate mass and inertia of load, I found some topics here but none of them directly regarding to my question (in my opinion).&lt;/p&gt;&#xA;&lt;p&gt;Thanks for your effort.&lt;/p&gt;&#xA;" OwnerUserId="23631" LastActivityDate="2020-07-08T16:24:55.797" Title="How to find inertia parameter of payload automatically" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;dynamics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20902" PostTypeId="2" ParentId="20901" CreationDate="2020-07-07T21:03:31.247" Score="2" Body="&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Parallel_axis_theorem&quot; rel=&quot;nofollow noreferrer&quot;&gt;parallel axis theorem&lt;/a&gt; gives:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;I = I_{\textrm{cm}} + md^2 \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;where &lt;span class=&quot;math-container&quot;&gt;$I_{\textrm{cm}}$&lt;/span&gt; is the moment of inertia about the object's center of mass, &lt;span class=&quot;math-container&quot;&gt;$m$&lt;/span&gt; is the mass of the object, and &lt;span class=&quot;math-container&quot;&gt;$d$&lt;/span&gt; is the distance from the center of mass of the object to the axis of rotation.&lt;/p&gt;&#xA;&lt;p&gt;You can also look at load acceleration and torque, where:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\tau = I\alpha \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Or, torque is moment of inertia times angular acceleration. Then, you could estimate&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;I = \frac{\tau}{\alpha} \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Apply a torque, measure the angular acceleration, and divide the two to get load inertia. You could assume the center of mass is located at the tip of the end effector, which isn't true, but as long as the load is fixed it doesn't really matter because the effective moment of inertia is what the arm's actually controlling. Consider it like:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;I_{\textrm{apparent}} = I_{\textrm{effective}} + md^2\\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;where &lt;span class=&quot;math-container&quot;&gt;$d$&lt;/span&gt; is the distance from the joint to the tip of the end effector, and &lt;span class=&quot;math-container&quot;&gt;$I_{\textrm{effective}}$&lt;/span&gt; is&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;I_{\textrm{effective}} = I_{\textrm{cm}} + md_{\textrm{offset}}^2 \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;where &lt;span class=&quot;math-container&quot;&gt;$d_{\textrm{offset}}$&lt;/span&gt; is the difference between the object's center of mass and the object's connection to the end effector. Again, the arm &lt;strong&gt;actually&lt;/strong&gt; moves the effective moment of inertia of the load.&lt;/p&gt;&#xA;&lt;p&gt;You could also determine the mass by the holding torque required to keep the arm stationary, where&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\tau = mgd\sin{\theta}\\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2020-07-08T16:24:55.797" LastActivityDate="2020-07-08T16:24:55.797" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="20903" PostTypeId="1" CreationDate="2020-07-07T22:14:13.703" Score="3" ViewCount="50" Body="&lt;p&gt;I am trying to implement a compliance controller for a robot arm and stumbled upon an existing code snippet where the compliance velocity of the endeffector is calculated by:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$v_{out} = v_{in} + \frac{F}{K} - \frac{\dot{F}}{B} $&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;where &lt;span class=&quot;math-container&quot;&gt;$F$&lt;/span&gt; is a 6D wrench vector, &lt;span class=&quot;math-container&quot;&gt;$K$&lt;/span&gt; is a given stiffness with the units &lt;span class=&quot;math-container&quot;&gt;$\frac{N}{m/s}$&lt;/span&gt; &amp;amp; &lt;span class=&quot;math-container&quot;&gt;$\frac{Nm}{rad/s}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$B$&lt;/span&gt; is a given damping with the units &lt;span class=&quot;math-container&quot;&gt;$\frac{N}{m}$&lt;/span&gt; &amp;amp; &lt;span class=&quot;math-container&quot;&gt;$\frac{Nm}{rad}$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I don't understand where this equation comes from, in particular the second part. In (cartesian space) admittance control, there is e.g. the equation &lt;span class=&quot;math-container&quot;&gt;$\dot{x}=C \cdot F$&lt;/span&gt;, where C is the compliance, thus the inverse of stiffness &lt;span class=&quot;math-container&quot;&gt;$K$&lt;/span&gt;. But how to explain the second part &lt;span class=&quot;math-container&quot;&gt;$\frac{\dot F}{B}$&lt;/span&gt;? Is there any reference literature which are recommended?&lt;/p&gt;&#xA;&lt;p&gt;Many thanks in advance!&lt;/p&gt;&#xA;" OwnerUserId="16072" LastEditorUserId="16072" LastEditDate="2020-07-08T09:19:49.980" LastActivityDate="2020-07-08T09:19:49.980" Title="output velocity equation of compliance control" Tags="&lt;control&gt;&lt;robotic-arm&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20904" PostTypeId="2" ParentId="20823" CreationDate="2020-07-08T09:26:15.190" Score="1" Body="&lt;p&gt;generally, I think posting ROS related questions would be better on &lt;a href=&quot;https://answers.ros.org&quot; rel=&quot;nofollow noreferrer&quot;&gt;ROS answers&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Regarding your question - did you &lt;code&gt;source /opt/ros/melodic/setup.bash&lt;/code&gt; ?&lt;/p&gt;&#xA;&lt;p&gt;You can check the package path by &lt;code&gt;echo $ROS_PACKAGE_PATH&lt;/code&gt; , which is the path where &lt;code&gt;rospack&lt;/code&gt; will search&lt;/p&gt;&#xA;" OwnerUserId="16072" LastActivityDate="2020-07-08T09:26:15.190" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20905" PostTypeId="2" ParentId="10490" CreationDate="2020-07-08T18:09:57.177" Score="0" Body="&lt;p&gt;I strongly recomend you to use the iCharger X6, it has the &amp;quot;Power Output&amp;quot; function, this function allow you to adjust the Output Voltage from 2.0V to 26.5V in 0.1V increments, you can limit the output current from 1.0A to 30.0A (&amp;quot;&amp;quot;&amp;quot;YES 30A&amp;quot;&amp;quot;&amp;quot;) in 0.1A incrmentes. Honestly I found this functionality lovely. Most Bench power supplies are very limited in output current typically 2 to 5 Amps. Just be carefull this function is only available on X6 and X8 modeles only, the other iCharger models don´t include this functionalitiy&lt;/p&gt;&#xA;" OwnerUserId="26728" LastActivityDate="2020-07-08T18:09:57.177" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20906" PostTypeId="1" AcceptedAnswerId="20909" CreationDate="2020-07-09T05:55:42.273" Score="0" ViewCount="74" Body="&lt;p&gt;Sorry, this might be a bit lengthy, but I really need some help (I am aware that there is a question similar to mine that has already been asked &lt;a href=&quot;https://robotics.stackexchange.com/questions/16316/the-arduino-turns-off-after-attaching-a-servo-motor&quot;&gt;here&lt;/a&gt;. However, I couldn't come up with a solution to my problem based on the answers to that question as I am using a separate power source as stated in that question's answers.).&lt;/p&gt;&#xA;&lt;p&gt;This is my first project with an Arduino and a &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/B00PNEQI7W&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;stepper motor&lt;/a&gt;. I did some research and found that an L298N motor driver can both drive the motor and power the Arduino if using an external 12V power supply, but it could also handle up to 35V to the motors if the jumper cable was removed and the Arduino externally powered. I wired the stepper motor to the L298N according to the diagram on &lt;a href=&quot;https://lastminuteengineers.com/stepper-motor-l298n-arduino-tutorial/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this website&lt;/a&gt;. I removed the jumper on the L298N and hooked up the circuit with a cheap &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/B07SDRDV5B&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;24V 2A power brick&lt;/a&gt; and a 24V to 5V 3A &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/B00J3MHRNO&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;Tobsun EA15-5V&lt;/a&gt; DC to DC converter (I wired the 24V positive to the Tobsun and the L298N +12V positive, and I wired the 5V output of the Tobsun to the +5V of the L298N and to the 5V of the Arduino. The ground of the Arduino and the L298N were both wired to the negative of the 24V).&lt;/p&gt;&#xA;&lt;p&gt;I uploaded the example &lt;em&gt;StepperOneRevolution&lt;/em&gt; example to the Arduino, and it seemed to work fine with the motor spinning as expected when the Arduino was plugged into my computer (the 24V power brick was plugged in as well). As soon as I removed the link to my computer, the Arduino and L298N seemed to turn off and on about twice a second (ALL the lights of the Arduino and L298N would flash on and off). The stepper motor would move just a fraction of a rotation when the lights of the Arduino and L298N were on and would stop when they were off. When I unplugged the wires to the motor, the Arduino and L298N would stop flashing and stay on.&lt;/p&gt;&#xA;&lt;p&gt;After using a multimeter to measure various voltages across the circuit, I thought that maybe the cheap power brick and/or the Tobsun or my wiring were to blame, so I found a 12V 1A power brick around the home that I know works. I replaced the jumper on the L298N and re-wired the circuit to look exactly like the circuit from &lt;a href=&quot;https://lastminuteengineers.com/stepper-motor-l298n-arduino-tutorial/&quot; rel=&quot;nofollow noreferrer&quot;&gt;the same website as before&lt;/a&gt; (12V directly to L298N +12V,L298N +5V to the 5V of the Arduino, GND of both to the negative of the 12V brick).&#xA;This time, once I plugged in the 12V brick, the motor spun for about a second (twice as long as before), but then the Arduino and L298N turned off and the motor cut out again. This is consistent with it resetting (as stated in the answers to the similar question I mentioned at the beginning).&lt;/p&gt;&#xA;&lt;p&gt;I have attempted to look for a solution to this, rewire the circuit again, use a different L298N controller, but all to no avail; however, one interesting thing I noticed was that if I get rid of the &lt;em&gt;delay(500)&lt;/em&gt;, then the motor spins continuously one revolution back and forth (as the &lt;em&gt;StepperOneRevolution&lt;/em&gt; example dictates, minus the &lt;em&gt;delay&lt;/em&gt;) and Arduino doesn't turn off. I'm pretty sure it's not the &lt;em&gt;delay&lt;/em&gt; function that is causing the Arduino and L298N to turn off and on because the time between the motor turning off and on remains consistent no matter the amount I put in the &lt;em&gt;delay&lt;/em&gt;. If I leave the &lt;em&gt;delay&lt;/em&gt;, the motor also doesn't spin in the opposite direction like it is supposed to after the first &lt;em&gt;delay&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I know that was quite long, but I wanted to get all of the backstory there in detail so that there was no confusion as to what exactly the problem might be. Thank you very much f you read through or even skimmed those paragraphs, and I would truly appreciate if anyone could answer this very specific question! (Please let me know if I missed a detail; I tried not to, but I might have :) )&lt;/p&gt;&#xA;" OwnerUserId="26730" LastActivityDate="2020-07-09T18:07:35.983" Title="Arduino turning off when using bipolar stepper motor (L298N Driver)" Tags="&lt;arduino&gt;&lt;stepper-motor&gt;&lt;stepper-driver&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20907" PostTypeId="2" ParentId="20852" CreationDate="2020-07-09T10:21:28.583" Score="0" Body="&lt;p&gt;I can only describe the general idea. I can not tell you exactly how they solve it mathematically.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;if I only have images I_r and I_m and not the pose translation, how is the cost volume estimated?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;You know that the cost volume lies in a space between depth e_max, e_min, and width u and height v.&#xA;Now you take every small &amp;quot;cube&amp;quot; in this cuboid of size (e_max-e_min) x u x v and project it into your two images l_m and l_r. Then you have one pixel in image A (pixelA) and one pixel in image B (pixelB).&lt;/p&gt;&#xA;&lt;p&gt;Then you calculate the photometric error. I am not sure how they do it here. You could go and sum the red, green and blue values of pixelA and sum the red,green and blue values of pixelB. Then you subtract these values.&#xA;If the difference is small then the color or intensity might be similar. This might tell you that the cube is at the correct place.&lt;/p&gt;&#xA;&lt;p&gt;And then you do this for every single of these little cubes. And calculate the average.&lt;/p&gt;&#xA;&lt;p&gt;Now you say &amp;quot;what? but how do I know how to project the little cube to the second image?&amp;quot;. The first image is easy. That is just 3d-backpropagation. But for the second image, you need the pose transformation. And here a minimization procedure comes into place.&lt;/p&gt;&#xA;&lt;p&gt;Your transformation can be described by 6+ variables (depending on whether you use Euler angles, rotation matrices etc.). You want to estimate these variables. If there was a perfect solution then you could do this using gauss jordan elimination.&lt;/p&gt;&#xA;&lt;p&gt;You have some initial guess of your transformation.&#xA;This is of course not a good guess. Therefore the photometric error described above is really high. If you guess multiple times then you might see that the error increases or decreases.&lt;/p&gt;&#xA;&lt;p&gt;This procedure is described in the paper in detail. It does the same as gauss jordan but for many variables. There is no perfect solution so gauss jordan can not work here and it would be far too slow.&lt;/p&gt;&#xA;&lt;p&gt;Maybe this helps.&lt;/p&gt;&#xA;" OwnerUserId="26733" LastEditorUserId="26733" LastEditDate="2020-07-09T12:31:07.560" LastActivityDate="2020-07-09T12:31:07.560" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20908" PostTypeId="1" AcceptedAnswerId="20911" CreationDate="2020-07-09T10:40:28.807" Score="0" ViewCount="70" Body="&lt;p&gt;I am trying to initialize the position of a set of landmarks using only bearing observations. Each robot pose, described by position (x,y) and orientation (theta), observes a small set of landmarks. Each observation, bearing angle, is expressed in the robot frame.&#xA;My idea was to consider pair of consecutive robot poses, retrieve the equation of the lines passing though them and make the intersection to obtain the position of the landmark observed by both poses. Using the robot position and the bearing observation, I can retrieve the equation of a line as  &lt;em&gt;y-y&lt;sub&gt;1&lt;/sub&gt;=m(x-x&lt;sub&gt;1&lt;/sub&gt;)&lt;/em&gt; where the slope &lt;strong&gt;m&lt;/strong&gt; can be computed as &lt;em&gt;m=tan(bearing)&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;To check if this is the right way to proceed I tested the method on the data from the ground truth dataset. For instance, two consecutives poses  R&lt;sub&gt;1&lt;/sub&gt;=(1.0384, 0.037015, 0.0057897) and R&lt;sub&gt;2&lt;/sub&gt;=(2.0171, 0.019962, 0.0017791) both observe the landmark L&lt;sub&gt;1&lt;/sub&gt; in position (2.8116, -4.2695), respectively with bearing values of B&lt;sub&gt;1&lt;/sub&gt;=-1.1860 and B&lt;sub&gt;2&lt;/sub&gt;=-1.3894. Evaluating the lines passing through R&lt;sub&gt;1&lt;/sub&gt;-L&lt;sub&gt;1&lt;/sub&gt; and R&lt;sub&gt;2&lt;/sub&gt;-L&lt;sub&gt;1&lt;/sub&gt; their equation is &lt;em&gt;y&lt;sub&gt;1&lt;/sub&gt;=-2.4287x + 2.5589&lt;/em&gt; and &lt;em&gt;y&lt;sub&gt;2&lt;/sub&gt;=-5.3989x+10.9102&lt;/em&gt;. If now I try to retrieve the slope of the two lines using the method mentioned before I obtain different values &lt;em&gt;m&lt;sub&gt;1&lt;/sub&gt;=-2.4692&lt;/em&gt; and &lt;em&gt;m&lt;sub&gt;2&lt;/sub&gt;=-5.4522&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Some final notes:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I'm almost completely sure that the bearing observation provided is the actual &amp;quot;mathematical&amp;quot; angle measurement, hence no transformation of it is required.&lt;/li&gt;&#xA;&lt;li&gt;I think that I should use also the theta angle of the robot pose in some way, but I'm not sure how.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;What am I missing?&lt;/p&gt;&#xA;" OwnerUserId="26732" LastActivityDate="2020-07-10T03:20:13.323" Title="Bearing landmark localization" Tags="&lt;localization&gt;&lt;geometry&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20909" PostTypeId="2" ParentId="20906" CreationDate="2020-07-09T18:07:35.983" Score="0" Body="&lt;p&gt;You replaced a 2A power supply with a 1A power supply, and then you're having what sounds like a brownout condition when you try to run a motor that is rated to consumer 2A. One of the reviews on the Amazon link you posted says,&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;In order to drive this motor you either need a current limited power supply &amp;lt;2A or you need to drive it at about 2V. If you supply it with 12V as stated in the spec sheet, it will draw about 11A, which is plenty to smoke-check both the motor and your H-Bridge. If you're going to use this with the L298N, you must use PWM, or wire 4-8ohm@5W resistors. If you don't know what any of this means, don't use it with the L298N modules you will end up smoke checking the motor or the bridge.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The part itself says in the specifications:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;As a stepper motor, it should connect to a constant current or chopper driver. Connecting the motor directly to a power supply will destroy the motor.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;What is your power supply voltage when you run it? I would guess you're basically shorting it and you'd see very low voltage if you measured it.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-07-09T18:07:35.983" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20910" PostTypeId="1" CreationDate="2020-07-09T19:06:27.520" Score="0" ViewCount="24" Body="&lt;p&gt;I have nrf24L01 radio transceiver. One i've connected to raspberry pi and another to my pc throught spi to usb converter.&lt;/p&gt;&#xA;&lt;p&gt;When i send the data from terminal like &lt;code&gt;echo 'hello from sender' &amp;gt; /dev/ttyUSB0&lt;/code&gt; and read it in another machine with command &lt;code&gt;cat &amp;lt; /dev/ttyUSB0&lt;/code&gt; it is showing the message.&lt;/p&gt;&#xA;&lt;p&gt;Also when i send the data from putty gui application the data is being comming in another machine.&lt;/p&gt;&#xA;&lt;p&gt;But when i send the same message from c++ file its not comming. Here is the header file of the class which is used to read and write the message through the serial port:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;// Header guard&#xA;#ifndef SERIAL_PORT_SERIAL_PORT_H&#xA;#define SERIAL_PORT_SERIAL_PORT_H&#xA;&#xA;// System headers&#xA;#include &amp;lt;string&amp;gt;&#xA;#include &amp;lt;fstream&amp;gt; // For file I/O (reading/writing to COM port)&#xA;#include &amp;lt;sstream&amp;gt;&#xA;#include &amp;lt;termios.h&amp;gt; // POSIX terminal control definitions (struct termios)&#xA;#include &amp;lt;vector&amp;gt;&#xA;&#xA;// User headers&#xA;#include &amp;quot;Exception.hpp&amp;quot;&#xA;&#xA;namespace mn {&#xA;    namespace CppLinuxSerial {&#xA;&#xA;        /// \brief      Strongly-typed enumeration of baud rates for use with the SerialPort class&#xA;        enum class BaudRate {&#xA;            B_9600,&#xA;            B_38400,&#xA;            B_57600,&#xA;            B_115200,&#xA;            CUSTOM&#xA;        };&#xA;&#xA;        enum class State {&#xA;            CLOSED,&#xA;            OPEN&#xA;        };&#xA;&#xA;/// \brief      SerialPort object is used to perform rx/tx serial communication.&#xA;        class SerialPort {&#xA;&#xA;        public:&#xA;            /// \brief      Default constructor. You must specify at least the device before calling Open().&#xA;            SerialPort();&#xA;&#xA;            /// \brief      Constructor that sets up serial port with the basic (required) parameters.&#xA;            SerialPort(const std::string &amp;amp;device, BaudRate baudRate);&#xA;&#xA;            //! @brief      Destructor. Closes serial port if still open.&#xA;            virtual ~SerialPort();&#xA;&#xA;            /// \brief      Sets the device to use for serial port communications.&#xA;            /// \details    Method can be called when serial port is in any state.&#xA;            void SetDevice(const std::string &amp;amp;device);&#xA;&#xA;            void SetBaudRate(BaudRate baudRate);&#xA;&#xA;            /// \brief      Sets the read timeout (in milliseconds)/blocking mode.&#xA;            /// \details    Only call when state != OPEN. This method manupulates VMIN and VTIME.&#xA;            /// \param      timeout_ms  Set to -1 to infinite timeout, 0 to return immediately with any data (non&#xA;            ///             blocking, or &amp;gt;0 to wait for data for a specified number of milliseconds). Timeout will&#xA;            ///             be rounded to the nearest 100ms (a Linux API restriction). Maximum value limited to&#xA;            ///             25500ms (another Linux API restriction).&#xA;            void SetTimeout(int32_t timeout_ms);&#xA;&#xA;            /// \brief      Enables/disables echo.&#xA;            /// \param      value       Pass in true to enable echo, false to disable echo.&#xA;            void SetEcho(bool value);&#xA;&#xA;            /// \brief      Opens the COM port for use.&#xA;            /// \throws     CppLinuxSerial::Exception if device cannot be opened.&#xA;            /// \note       Must call this before you can configure the COM port.&#xA;            void Open();&#xA;&#xA;            /// \brief      Closes the COM port.&#xA;            void Close();&#xA;&#xA;            /// \brief      Sends a message over the com port.&#xA;            /// \param      data        The data that will be written to the COM port.&#xA;            /// \throws     CppLinuxSerial::Exception if state != OPEN.&#xA;            void Write(const std::string&amp;amp; data);&#xA;&#xA;            /// \brief      Use to read from the COM port.&#xA;            /// \param      data        The object the read characters from the COM port will be saved to.&#xA;            /// \param      wait_ms     The amount of time to wait for data. Set to 0 for non-blocking mode. Set to -1&#xA;            ///                 to wait indefinitely for new data.&#xA;            /// \throws     CppLinuxSerial::Exception if state != OPEN.&#xA;            void Read(std::string&amp;amp; data);&#xA;&#xA;        private:&#xA;&#xA;            /// \brief      Returns a populated termios structure for the passed in file descriptor.&#xA;            termios GetTermios();&#xA;&#xA;            /// \brief      Configures the tty device as a serial port.&#xA;            /// \warning    Device must be open (valid file descriptor) when this is called.&#xA;            void ConfigureTermios();&#xA;&#xA;            void SetTermios(termios myTermios);&#xA;&#xA;            /// \brief      Keeps track of the serial port's state.&#xA;            State state_;&#xA;&#xA;            /// \brief      The file path to the serial port device (e.g. &amp;quot;/dev/ttyUSB0&amp;quot;).&#xA;            std::string device_;&#xA;&#xA;            /// \brief      The current baud rate.&#xA;            BaudRate baudRate_;&#xA;&#xA;            /// \brief      The file descriptor for the open file. This gets written to when Open() is called.&#xA;            int fileDesc_;&#xA;&#xA;            bool echo_;&#xA;&#xA;            int32_t timeout_ms_;&#xA;&#xA;            std::vector&amp;lt;char&amp;gt; readBuffer_;&#xA;            unsigned char readBufferSize_B_;&#xA;&#xA;            static constexpr BaudRate defaultBaudRate_ = BaudRate::B_57600;&#xA;            static constexpr int32_t defaultTimeout_ms_ = -1;&#xA;            static constexpr unsigned char defaultReadBufferSize_B_ = 255;&#xA;&#xA;&#xA;        };&#xA;&#xA;    } // namespace CppLinuxSerial&#xA;} // namespace mn&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="26734" LastActivityDate="2020-07-09T19:06:27.520" Title="serial communication not working with radio module" Tags="&lt;serial&gt;&lt;communication&gt;&lt;radio-control&gt;&lt;linux&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20911" PostTypeId="2" ParentId="20908" CreationDate="2020-07-10T03:20:13.323" Score="1" Body="&lt;p&gt;So the method to figure of something with only bearing measurements is called triangulation. While I think your method works you can much more easily solve it using sin rule.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/nF2mW.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/nF2mW.png&quot; alt=&quot;Triangle&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Given at least 1 side and 2 angles you can figure out all the properties of a triangle using the sin rule.&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$\frac{a}{sin(a)}=\frac{c}{sin(C)}=\frac{b}{sin(B)}$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;In your problem you have a length(distance between poses), and 2 angles(bearing measurements). So you have all the information you need to figure out the position of the landmark.&lt;/p&gt;&#xA;&lt;p&gt;Picture is from &lt;a href=&quot;https://www.cimt.org.uk/projects/mepres/step-up/sect4/index.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.cimt.org.uk/projects/mepres/step-up/sect4/index.htm&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I think that I should use also the theta angle of the robot pose in&#xA;some way, but I'm not sure how.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Correct. It is pretty simple. You use it to convert the local bearing measurement into the global frame.&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$\theta_{bG}=\theta_R+\theta_{bmeas}$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;So the global angle bearing measurement(&lt;span class=&quot;math-container&quot;&gt;$\theta_{bG}$&lt;/span&gt;) is the heading(&lt;span class=&quot;math-container&quot;&gt;$\theta_R$&lt;/span&gt;) of your robot plus your bearing measurement(&lt;span class=&quot;math-container&quot;&gt;$\theta_{bmeas}$&lt;/span&gt;).&lt;/p&gt;&#xA;&lt;p&gt;The global bearing measurement is what you plug into the sin rule equations.&lt;/p&gt;&#xA;" OwnerUserId="15265" LastActivityDate="2020-07-10T03:20:13.323" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20912" PostTypeId="1" CreationDate="2020-07-10T12:15:37.870" Score="0" ViewCount="367" Body="&lt;p&gt;In VSLAM or visual odometry, we use a camera matrix P to transform 3D scene points to 2D image points. When using homogeneous representation, we may choose the image coordinates as the normalized image coordinates &lt;span class=&quot;math-container&quot;&gt;$(x, y, 1)^T$&lt;/span&gt;, which means the image plane is placed at &lt;span class=&quot;math-container&quot;&gt;$Z = 1$&lt;/span&gt; measured in 3D Euclidean coordinate system.&lt;/p&gt;&#xA;&lt;p&gt;My question is, after normalized the image coordinates, are the x and y components of the image coordinates also measured in 3D Euclidean coordinate system?&lt;/p&gt;&#xA;" OwnerUserId="26583" LastActivityDate="2020-07-10T12:15:37.870" Title="What does the normalized image coordinates imply?" Tags="&lt;slam&gt;&lt;cameras&gt;&lt;visual-odometry&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20913" PostTypeId="1" AcceptedAnswerId="20921" CreationDate="2020-07-10T20:59:40.477" Score="4" ViewCount="150" Body="&lt;p&gt;I am really struggling to understand how to do Cartesian velocity control when 3D rotations are involved. So, below is a very simple example which I am hoping somebody can help me with.&lt;/p&gt;&#xA;&lt;p&gt;Let's say the base frame of my robot is labelled &lt;span class=&quot;math-container&quot;&gt;$B$&lt;/span&gt;, the end-effector frame is labelled &lt;span class=&quot;math-container&quot;&gt;$E$&lt;/span&gt;, and the goal frame is labelled &lt;span class=&quot;math-container&quot;&gt;$G$&lt;/span&gt;. So, the Cartesian pose of the end-effector relative to the base can be expressed as a matrix &lt;span class=&quot;math-container&quot;&gt;$T_{BE}$&lt;/span&gt;, and similarly, &lt;span class=&quot;math-container&quot;&gt;$T_{BG}$&lt;/span&gt; for the goal. The Jacobian, which describes the rate of change of the end-effector about the base frame, is &lt;span class=&quot;math-container&quot;&gt;$J$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I want to move the end-effector from &lt;span class=&quot;math-container&quot;&gt;$E$&lt;/span&gt; to &lt;span class=&quot;math-container&quot;&gt;$G$&lt;/span&gt;, in time &lt;span class=&quot;math-container&quot;&gt;$T$&lt;/span&gt;. To do this, I can create a loop which continually calculates the required Cartesian velocity of the end-effector, about the base frame. This is a vector length 6, containing translational velocity about the base's x-y-z axes, and rotational velocity about the base's x-y-z axes. We call this velocity vector &lt;span class=&quot;math-container&quot;&gt;$v$&lt;/span&gt;. Then, I will move the end-effector at this velocity, using the inverse Jacobian to calculate the required velocities of the joints, &lt;span class=&quot;math-container&quot;&gt;$q$&lt;/span&gt;. This equation is &lt;span class=&quot;math-container&quot;&gt;$q = J^{-1} v$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;However, what I don't understand, is how to calculate &lt;span class=&quot;math-container&quot;&gt;$v$&lt;/span&gt;, which is the required Cartesian velocity of the end-effector about the base frame. I know how to do this with 1D rotation: I would just take the difference between the current angle and the goal angle, and divide by &lt;span class=&quot;math-container&quot;&gt;$T$&lt;/span&gt;. I also know how to do this in 3D if the motion only involves translation, and no rotation: again, I can find the difference in the current and goal position. But when 3D rotations are involved, I don't know how to do this.&lt;/p&gt;&#xA;&lt;p&gt;I have tried converting matrices &lt;span class=&quot;math-container&quot;&gt;$T_{BE}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$T_{BG}$&lt;/span&gt; into Euler representations (with X-Y-Z rotations about &lt;span class=&quot;math-container&quot;&gt;$B$&lt;/span&gt;), and then finding the difference in the three components of the Euler vectors, between &lt;span class=&quot;math-container&quot;&gt;$T_{BE}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$T_{BG}$&lt;/span&gt;. My intuition was that I could then divide these three components by &lt;span class=&quot;math-container&quot;&gt;$T$&lt;/span&gt;, and this would give me the rotational velocity components of vector &lt;span class=&quot;math-container&quot;&gt;$v$&lt;/span&gt;. However, I have implemented this, and I do not get the desired behaviour. I think that this is because the three rotational components are dependent on each other, and so I cannot simply treat each one independently like this.&lt;/p&gt;&#xA;&lt;p&gt;So, can anybody help me please? How can I create the rotational components of vector &lt;span class=&quot;math-container&quot;&gt;$v$&lt;/span&gt;, given the current pose &lt;span class=&quot;math-container&quot;&gt;$T_{BE}$&lt;/span&gt; and the target pose &lt;span class=&quot;math-container&quot;&gt;$T_{BG}$&lt;/span&gt;?&lt;/p&gt;&#xA;&lt;p&gt;The below image summarises the problem:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/vQ14J.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vQ14J.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="26519" LastEditorUserId="26519" LastEditDate="2020-07-10T23:20:47.217" LastActivityDate="2020-07-14T05:19:09.307" Title="Cartesian Velocity Control between Two 3D Poses" Tags="&lt;control&gt;&lt;kinematics&gt;&lt;inverse-kinematics&gt;&lt;manipulator&gt;&lt;jacobian&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20915" PostTypeId="2" ParentId="20913" CreationDate="2020-07-11T11:34:50.693" Score="0" Body="&lt;p&gt;You could run the solution with some guess of &lt;span class=&quot;math-container&quot;&gt;$v$&lt;/span&gt; then command a velocity normalized by how long your guess velocity took.&lt;/p&gt;&#xA;" OwnerUserId="8842" LastActivityDate="2020-07-11T11:34:50.693" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20916" PostTypeId="2" ParentId="17917" CreationDate="2020-07-11T18:56:13.483" Score="0" Body="&lt;p&gt;Firstly inspect propellers for damage, followed by motor assembly, and finally to reduce vibration on electronics use double sided tape. The other problem I see in the picture is the breadboard. By soldering your components onto a PCB you'll reduce vibration slightly.  I had a similar problem with my rocket, so I soldered my wires and sensors to a PCB.&lt;/p&gt;&#xA;" OwnerUserId="23868" LastActivityDate="2020-07-11T18:56:13.483" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20917" PostTypeId="2" ParentId="20899" CreationDate="2020-07-11T19:56:35.483" Score="0" Body="&lt;p&gt;I found what I was looking for:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.robotshop.com/media/files/PDF/robotshop-multi-purpose-robotic-arm-guide.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.robotshop.com/media/files/PDF/robotshop-multi-purpose-robotic-arm-guide.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="26627" LastActivityDate="2020-07-11T19:56:35.483" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20918" PostTypeId="2" ParentId="20634" CreationDate="2020-07-12T20:31:07.803" Score="1" Body="&lt;p&gt;The initial motor current required to pull away from standstill is likely the cause of the pi being reset, you could try to accelerate slowly rather than hitting the gas too quickly.&lt;/p&gt;&#xA;&lt;p&gt;A capacitor is used to stop the voltage spikes caused by the motor&#xA;starting and stopping and reduce RF interference. The spikes could also be a cause of the pi reset. I use a 100uF capacitor across the power lines to minimise spikes and noise.&lt;/p&gt;&#xA;&lt;p&gt;Depending on the motors size I don't think your power-bank will be suitable to provide enough current for the pi and the motors together, check the stall current on the motors and give this overhead at least, if you have usb devices plugged into the pi, desktop ui, wifi and blue-tooth enabled the pi could be using nearly 1 amp.&lt;/p&gt;&#xA;&lt;p&gt;I use a bigger battery and have 2 dc-dc buck converters to bring the voltage down - one for the pi and one for the motors, separately fused. the battery lasts longer and is under less stress, a decent rc car battery can be inexpensive compared to a usb power bank.&lt;/p&gt;&#xA;" OwnerUserId="18374" LastActivityDate="2020-07-12T20:31:07.803" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20919" PostTypeId="1" AcceptedAnswerId="20920" CreationDate="2020-07-13T00:28:28.797" Score="0" ViewCount="48" Body="&lt;p&gt;Considering the scenario represented in the following image, and the function open_gripper(), close_gripper() and Offs(), present the necessary instructions for the robot to perform the path 1 - 2 - 3, represented by the red line, to transport the block on the table. Consider that the only known point is the point P1. The length of each route is shown in the image. The directions of the robot's movements must be in accordance with the direction of the arrows.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/PHI67.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/PHI67.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is my version of code, but i am not sure that this is right. What i am doing wrong? How the code should be?&#xA;&lt;a href=&quot;https://i.stack.imgur.com/XgqfX.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XgqfX.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="26752" LastActivityDate="2020-07-13T10:44:08.633" Title="Rapid code pick and place" Tags="&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20920" PostTypeId="2" ParentId="20919" CreationDate="2020-07-13T10:44:08.633" Score="1" Body="&lt;p&gt;There is a discrepancy in notation. P1 is the current point at the TCP on the image but 1 denoted the position of the box. By this logic you would need a P4 corresponding to the point on the table marked as 3.&lt;/p&gt;&#xA;&lt;p&gt;P1 does not seem to be defined in the code and P2, defined relative to P1 should have -700 as z coordinate and P3 should have -200 as x coordinated, relative to P1. I assume the axes of P1 are not rotated relative to the global CS.&lt;/p&gt;&#xA;&lt;p&gt;You seem to be closing the gripper before arriving to P2. If P2 is a pickup point you should close the gripper after moving to P2.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-07-13T10:44:08.633" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20921" PostTypeId="2" ParentId="20913" CreationDate="2020-07-14T05:19:09.307" Score="6" Body="&lt;p&gt;You essentially want to find the time derivative of a linear interpolation between two rotations. The easiest way to obtain this would probably to convert the rotation matrix between the two orientations to a axis-angle representation and the angular velocity would simply be the axis times the angle divided by &lt;span class=&quot;math-container&quot;&gt;$T$&lt;/span&gt;.&lt;/p&gt;&#xA;" OwnerUserId="1487" LastActivityDate="2020-07-14T05:19:09.307" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="20922" PostTypeId="1" CreationDate="2020-07-14T12:35:23.290" Score="0" ViewCount="49" Body="&lt;p&gt;I am trying to use the webots platform for developing controllers. I need the differential equations governing the motion of the robots. How can I get the equations of motion used in webots?&lt;/p&gt;&#xA;" OwnerUserId="26755" LastActivityDate="2021-04-11T12:01:10.203" Title="How can I get the equations of motion used in webots?" Tags="&lt;mobile-robot&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20923" PostTypeId="1" CreationDate="2020-07-14T13:42:47.193" Score="1" ViewCount="26" Body="&lt;p&gt;I am working on building a quadcopter with an Arduino nano. I am currently only working with 2 motors. However, I am experiencing an odd issue. When I try to run my motors, one of them runs fine, while the other stutters - it turns on and off extremely quickly to get this stuttering effect, all the while emitting a quick beeping sound. I know the motor and the ESC are both perfectly fine because when I isolate the problematic motor and run it without the Arduino using a Servo consistency master, it works perfectly normally. It also cannot be the signal pin pf the Arduino which the motor is attached to because I switched the signal pins of the two motors, but the issue still persists with the same motor. I'd really appreciate some help, thanks!&lt;/p&gt;&#xA;" OwnerUserId="26757" LastActivityDate="2020-07-22T17:01:16.497" Title="BLDC Stuttering when attached to Arduino Nano" Tags="&lt;quadcopter&gt;&lt;arduino&gt;&lt;motor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20924" PostTypeId="1" CreationDate="2020-07-14T15:55:22.873" Score="0" ViewCount="104" Body="&lt;p&gt;We're working on a bigger system that'll use two UR robots as well (although we only have one at the moment for development). We're communicating with the robot through its TCP/IP based RTDE protocol to send parameters like command and desired position. This works perfectly. We're using UR Script's &lt;code&gt;get_inverse_kin()&lt;/code&gt; function to convert position (TCP) into joint angles near known ones (e.g. along a prerecorded trajectory or the previous joint values). This also works most of the time.&lt;/p&gt;&#xA;&lt;p&gt;Sometimes however, we get an error, as the desired position is too far for the robot arm to reach, or the orientation is wrong or the robot doesn't like something else. This wouldn't be a problem, but now a &lt;code&gt;get_inverse_kin()&lt;/code&gt; call raises a popup, pauses the robot program, and everything stops.&lt;/p&gt;&#xA;&lt;p&gt;What is the most civilized way to handle an error like that? We can close the popup and start the robot program again through the dashboard protocol, but we need to recognize it, and it looks like a hack. Also, get_inverse_kin doesn't send the robot to that wrong place, just calculates new joint angles, so stopping everything is wrong in the first place (we could use a try-catch block before the &lt;code&gt;movej&lt;/code&gt; if the robot program had one).&lt;/p&gt;&#xA;&lt;p&gt;Any suggestions?&lt;/p&gt;&#xA;" OwnerUserId="24261" LastEditorUserId="10748" LastEditDate="2020-07-15T07:41:02.283" LastActivityDate="2020-07-15T07:41:02.283" Title="Handling Inverse Kinematics error on a UR Robot" Tags="&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20925" PostTypeId="2" ParentId="18926" CreationDate="2020-07-14T18:46:14.667" Score="0" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Is this a problem that is accounted for in the EKF SLAM algorithm from the book?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It is. If you look at the pseudo code implementation you posted you will notice that the update only works for the &lt;strong&gt;observed&lt;/strong&gt; features.&lt;/p&gt;&#xA;&lt;p&gt;For all your matrices,jacobian,&lt;span class=&quot;math-container&quot;&gt;$H$&lt;/span&gt; matrix, Kalman gain. The parts related to the unobserved landmark is 0. Therefore the update will be 0, and the landmark will not be changed. If you want to see an implementation of this in code then I recommend looking at &lt;a href=&quot;https://github.com/AtsushiSakai/PythonRobotics/blob/0c23ebe62be248000151f6fe543bcd551d964177/SLAM/EKFSLAM/ekf_slam.py#L183&quot; rel=&quot;nofollow noreferrer&quot;&gt;this EKF&lt;/a&gt; implementation. I specifically linked to the part where the matrices are formed with a bunch of zeros in the necessary places.&lt;/p&gt;&#xA;" OwnerUserId="15265" LastActivityDate="2020-07-14T18:46:14.667" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20926" PostTypeId="2" ParentId="20924" CreationDate="2020-07-15T07:36:27.687" Score="1" Body="&lt;p&gt;URScript offers a function to check if a pose is within the currently set safety limits. If there are no safety limits set, it should take into account the default joint limits (i.e. it checks reachability of a pose). The function is &lt;code&gt;is_within_safety_limits(pose)&lt;/code&gt;. It can be used in an if-condition to check reachability, before calling the IK function. This way no try-catch is needed.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-07-15T07:36:27.687" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20928" PostTypeId="5" CreationDate="2020-07-15T10:39:49.507" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2020-07-15T10:39:49.507" LastActivityDate="2020-07-15T10:39:49.507" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20929" PostTypeId="4" CreationDate="2020-07-15T10:39:49.507" Score="0" Body="About Pepper robot, by SoftBank Robotics." OwnerUserId="17881" LastEditorUserId="17881" LastEditDate="2020-07-15T23:36:10.030" LastActivityDate="2020-07-15T23:36:10.030" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20930" PostTypeId="2" ParentId="20922" CreationDate="2020-07-15T11:36:29.137" Score="0" Body="&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt; the below mention function does not export equations directly, as you requested, but exports the dynamic system in the DIF - Dynamics Interchange Format&lt;/p&gt;&#xA;&lt;p&gt;Webots uses the Open Dynamics Engine (ODE) to simulate physics. ODE includes an export &lt;a href=&quot;http://opende.sourceforge.net/docs/export-dif_8h_source.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;function for exporting the ODE&lt;/a&gt; called &lt;code&gt;dWorldExportDIF()&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Webots seems to support this export function and it also includes a test, which uses the function mentioned above to export the equations. The test, which exports the equations can be found here:&#xA;&lt;a href=&quot;https://github.com/cyberbotics/webots/blob/master/tests/physics/plugins/physics/ode_dif_exporter/ode_dif_exporter.c&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/cyberbotics/webots/blob/master/tests/physics/plugins/physics/ode_dif_exporter/ode_dif_exporter.c&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2020-07-15T11:52:53.390" LastActivityDate="2020-07-15T11:52:53.390" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20931" PostTypeId="1" AcceptedAnswerId="20953" CreationDate="2020-07-15T12:27:59.073" Score="1" ViewCount="158" Body="&lt;p&gt;I am trying to implement inverse kinematics for a robot arm with 5DOF within Unity. The robot arm is supposed to depict the mechanical, hydraulic driven cylinder arm of a heavy machine such as excavators have. As of now, the forward kinematics control of the arm is done with two joysticks (4DOF) in two modes due to the missing DOF. I would like to control the arm with inverse kinematics by controlling the target/end effector with rate control with the same controller setup i.e. the two joysticks.&lt;/p&gt;&#xA;&lt;p&gt;System description:&#xA;In my right handed Cartesian coordinate system, the first joint is supposed to rotate around the vertical y-axis, while the rest of the joints are hinge joints around the z-axis. All joints have their individual work/angle range constraint.&lt;/p&gt;&#xA;&lt;p&gt;My system requires the following:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;IK within the constrained ranges of my joints.&lt;/li&gt;&#xA;&lt;li&gt;Real-time mapping of input from controller to motion.&lt;/li&gt;&#xA;&lt;li&gt;Integration of velocities of the joints or the integration of an end effector velocity.&lt;/li&gt;&#xA;&lt;li&gt;Even distribution of the angles.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I'm trying to use known computer graphic algorithms such as FABRIK and CCD, but have also tried to approach the problem with simple (gradient descent) and more complex (cobyla) optimization methods.&lt;/p&gt;&#xA;&lt;p&gt;My problems:&#xA;The last two requirements of the list are my biggest problem.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;As far as I understand, joint velocities or the end effector velocity is usually done in the field of robotics by calculating the relationship between the joint velocities and end effector via the Jacobian. The angular and linear velocities are then combined to show the full manipulator velocity. What I do not understand is: if I use the Jacobian with joint angle constraints with upper and lower bound angle limits and also velocity limits, my problem has to be formulated with these inequality constraints. How can make sure, that my end effector is following the trajectory given through the user in the given? I cannot find any explaination of where this is considered.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The distribution of the angles is suppposed to help the arm always hold a more or less curved form downwards much like a banana would. By this I mean I do not want my arm to have any sharp buckling in the middle as such, as it tends to find solutions for some positions, but rather stay similiar to the image below. Is it possible to extend these computer graphic algorithms to achieve this type of angle distribution without interupting the main calculation?&#xA;&lt;a href=&quot;https://i.stack.imgur.com/W97ao.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/W97ao.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Thank you to anyone, who can help me with these questions!&lt;/p&gt;&#xA;" OwnerUserId="26760" LastEditorUserId="26760" LastEditDate="2020-07-16T07:37:32.043" LastActivityDate="2020-07-20T10:52:14.107" Title="Constrained Inverse Kinematics velocity calculation via Jacobian" Tags="&lt;inverse-kinematics&gt;&lt;motion-planning&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20932" PostTypeId="1" CreationDate="2020-07-16T04:33:20.340" Score="0" ViewCount="10" Body="&lt;p&gt;I have been looking for tutorials for modelling a soft actuator but haven't found any. I would like to replicate something similar to &lt;a href=&quot;https://softroboticstoolkit.com/book/modeling-soft-pneumatic-actuators&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; or &lt;a href=&quot;https://www.youtube.com/watch?v=_8FyQta6yMw&quot; rel=&quot;nofollow noreferrer&quot;&gt;this one&lt;/a&gt; I have been actively learning abaqus to do the same. I would really appreciate it if someone could point me in the right direction.&lt;/p&gt;&#xA;" OwnerUserId="23975" LastActivityDate="2020-07-16T04:33:20.340" Title="Is there any good tutorial for modeling soft actuators?" Tags="&lt;soft-robotics&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20935" PostTypeId="1" AcceptedAnswerId="21906" CreationDate="2020-07-16T09:15:39.687" Score="0" ViewCount="27" Body="&lt;p&gt;I want to work with Kinova Jaco with spherical wrist in CoppeliaSim, because currently I do not have access to a physical manipulator. The model there is in reset configuration (arm fully extended and points up), but I want it to be in home configuration.&lt;br /&gt;&#xA;Does anyone know what are values of joint positions for Kinova Jaco with spherical wrist in home configuration?&lt;/p&gt;&#xA;" OwnerUserId="26563" LastEditorUserId="26563" LastEditDate="2020-07-16T15:51:51.683" LastActivityDate="2021-03-12T08:15:39.717" Title="What are joint angles of Kinova Jaco in home position?" Tags="&lt;joint&gt;&lt;precise-positioning&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20936" PostTypeId="1" AcceptedAnswerId="20939" CreationDate="2020-07-16T12:15:12.943" Score="0" ViewCount="40" Body="&lt;p&gt;I'm doing some research for my university project and in particular it concerns a functional design project. I thought it would have been possible to design a 3-wheel mobile robot with an active caster wheel in the front and two passive standard wheels in the back using differental drive. But all papers i'm reading states exactly the opposite: differential drive robots have two active wheels in the back and a passive caster wheel in the front for balance. Does any of you know if it is possible to realize my idea?&lt;/p&gt;&#xA;" OwnerUserId="26770" LastActivityDate="2020-07-19T03:46:44.317" Title="Differential Drive Tricycle WMR with active caster wheel" Tags="&lt;mobile-robot&gt;&lt;wheeled-robot&gt;&lt;design&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20937" PostTypeId="2" ParentId="20811" CreationDate="2020-07-16T12:56:06.283" Score="0" Body="&lt;p&gt;Ok, just to answer this and close the question. I asked the lab people to test my node with prediction only, and it turned out that it is ok.. So my conclusion is that for some reason, the simulation in my computer is giving me wrong velocities (I don't know why exactly).&lt;/p&gt;&#xA;&lt;p&gt;My solution to this, was to record a bag in the lab's computer, and use that to continue the development.&lt;/p&gt;&#xA;" OwnerUserId="1992" LastActivityDate="2020-07-16T12:56:06.283" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20938" PostTypeId="2" ParentId="20923" CreationDate="2020-07-16T18:14:12.807" Score="1" Body="&lt;p&gt;If you ran the setup with servo tester, connection between motor and ESC is fine. Therefore, check with oscilloscope if your Arduino generates proper signal. Typically, ESCs proper input is 50Hz PWM with 1000-2000us duty. Ensure, that you have these values correctly. Moreover, ensure that high and low voltage levels are correct - 5V/3.3V (depending on Arduino version) for the high state and 0V for the low state.&lt;/p&gt;&#xA;&lt;p&gt;If you have your PWM generated by the software you created, the signal will not be consistent and may cause some problems. I'd rather use hardware timer set to generate PWM signal. Also, if you use 8-bit timer, resolution of the output PWM signal will not be good: 20ms period divided by 256 is 0.07ms. The signal you want to generate has a duty between 1 and 2ms, therefore this 1 millisecond used for control is divided in 13 possible positions. Use 16-bit timer instead, to get better results.&lt;/p&gt;&#xA;&lt;p&gt;The problem with one particular motor can also be caused by tolerance between ESCs; ie. you generate with your Arduino signal, that has slightly low frequency (like, 49Hz) and one of the ESCs gets it and works correctly, the other however does not &amp;quot;understand&amp;quot; the signal you generate. That is why you should precisely check PWM's frequency, duty cycle and voltages. Also mind the timers I mentioned above.&lt;/p&gt;&#xA;&lt;p&gt;Lastly, your question is more related to the Arduino, than robotics. &lt;a href=&quot;https://arduino.stackexchange.com/&quot;&gt;There is an Arduino Stack Exchange&lt;/a&gt; with far superior number of visitors and Arduino programmers/designers.&lt;/p&gt;&#xA;" OwnerUserId="14673" LastEditorUserId="14673" LastEditDate="2020-07-22T17:01:16.497" LastActivityDate="2020-07-22T17:01:16.497" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20939" PostTypeId="2" ParentId="20936" CreationDate="2020-07-17T07:24:16.370" Score="0" Body="&lt;p&gt;A caster is non driven but I think I get what you're asking. It is possible. But with one driving wheel, you would have to be able to rotate the swivel joint of the wheel as well in order to make the robot turn. (Two motors - one driving the wheel and other rotating the wheel around the axis perpendicular to the floor)&lt;/p&gt;&#xA;&lt;p&gt;This wheel configuration is called &amp;quot;tricycle drive&amp;quot;. Google and you can find more material on this. &lt;a href=&quot;https://www.researchgate.net/publication/328589823_The_Tricycle_Mobile_Robot_Movement_Simulation&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here's a random paper&lt;/a&gt; related&lt;/p&gt;&#xA;" OwnerUserId="24463" LastEditorUserId="24463" LastEditDate="2020-07-19T03:46:44.317" LastActivityDate="2020-07-19T03:46:44.317" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20941" PostTypeId="1" CreationDate="2020-07-18T08:03:29.467" Score="-1" ViewCount="49" Body="&lt;p&gt;KUKA seems to be everywhere, why are they better?&#xA;Or, what makes one robot(robotic arm) better than&#xA;another anyway?&lt;/p&gt;&#xA;&lt;p&gt;How much does the raw material of a robot cost&#xA;compared to its price? Is most of the cost&#xA;of the robot in Intellectual property?&lt;/p&gt;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="26787" LastActivityDate="2020-07-18T23:24:55.487" Title="What makes Kuka robots better?" Tags="&lt;kuka&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2020-07-22T17:31:35.550" ContentLicense="CC BY-SA 4.0" />
  <row Id="20942" PostTypeId="1" CreationDate="2020-07-18T11:03:42.790" Score="1" ViewCount="42" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/4AVXK.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4AVXK.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;How to determine the required torque while choosing a DC motor?&lt;/p&gt;&#xA;&lt;p&gt;Here is a simple scenario. Think of a 4WD or 2WD vehicle. The max load the vehicle will have is 100kg.&lt;br&gt;&#xA;Q1. How do I determine the required torque for the motor? &lt;br&gt;&#xA;Q2. Should the &lt;strong&gt;Rated Torque&lt;/strong&gt;(Kg-cm) more than &lt;code&gt;100&lt;/code&gt; or the &lt;strong&gt;Stall Torque&lt;/strong&gt; more than &lt;code&gt;100&lt;/code&gt; &lt;br&gt;&#xA;Q3. And if use 2 Motor rated at 50kg-cm torque can it carry a load of 100kg?&lt;/p&gt;&#xA;" OwnerUserId="26788" LastActivityDate="2020-07-18T11:03:42.790" Title="Determining required torque for DC motor" Tags="&lt;motor&gt;&lt;torque&gt;&lt;dc&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20943" PostTypeId="2" ParentId="20941" CreationDate="2020-07-18T23:18:10.717" Score="2" Body="&lt;p&gt;Kuka is not generally better. Better at some aspects, worst at others. Kuka does not seem to have the largest market share by revenue (according to &lt;a href=&quot;https://www.statista.com/statistics/257177/global-industrial-robot-market-share-by-company/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt;article from 2017) (Admittedly direct revenue from industrial robot sales is hard to measure and the article is old)&lt;/p&gt;&#xA;&lt;p&gt;If a robot arm is better or worst then the other one is heavily application and context dependent. A different manufacturer might fit the application better, but if a company already has a number of Kuka robots, they will probably keep buying Kuka robots, as mixing different brand will increase maintenance and training costs.&lt;/p&gt;&#xA;&lt;p&gt;Kuka robots offer some advanced software packages that go beyond just moving the robot. Software packages e.g for welding integrate with welding tools and ease the workload of robotic welding engineers by offering an integrated solution. Kuka is not the only manufacturer doing this, but it is recognized as one of the robot manufacturers, who offers more advanced software features, a large number of integrations with other equipment and advanced SW features which go beyond simple robot motion.&lt;/p&gt;&#xA;&lt;p&gt;Generally the positioning precision, maximum velocity, reach and maximum payload is comparable between the top industrial robot manufacturers, with small exceptions, like Kuka and Fanuc offering extra high payload capacity. There are some differences in the mechanical capabilities, but the main difference between robots is software features and functions and technical support from the manufacturer.&lt;/p&gt;&#xA;&lt;p&gt;It is hard to say what is the raw material cost of a robot, since robot manufacturers have (presumably) significant discounts on list prices from suppliers (raw metal suppliers,  motor suppliers, gearbox suppliers, drive amplifier suppliers, connector suppliers, cable suppliers, cabinet suppliers, to name only the big ticket items). Building a prototype robot (incl. mech and elec design) without software, at list prices would be probably more expensive then buying a robot. One could speculate, that the  materials and equipment used in an industrial robot should be less then half of the cost of the robot, for a robot manufacturer, since the robot sales should be able to keep the company profitable. (And there are many auxiliary activities which need to be carried out at these companies, besides the actual production)&lt;/p&gt;&#xA;&lt;p&gt;IP can be a big issue and robot manufacturer patent their designs and inventions at a significant cost, but patents for the &lt;strong&gt;most basic&lt;/strong&gt; functions of a robot have expired a long time ago.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2020-07-18T23:24:55.487" LastActivityDate="2020-07-18T23:24:55.487" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20944" PostTypeId="2" ParentId="20046" CreationDate="2020-07-19T03:11:11.163" Score="0" Body="&lt;p&gt;A 5mm Shaft Pinion Gear is where I'm going with a project I'm working on. It may work for you.&#xA;&lt;a href=&quot;https://www.amazon.com/s?k=5mm+shaft+pinion+gear&amp;amp;crid=2V71LVY7T7QSQ&amp;amp;sprefix=5mm+shaft%2Caps%2C180&amp;amp;ref=nb_sb_ss_ts-o-p_7_9&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.amazon.com/s?k=5mm+shaft+pinion+gear&amp;amp;crid=2V71LVY7T7QSQ&amp;amp;sprefix=5mm+shaft%2Caps%2C180&amp;amp;ref=nb_sb_ss_ts-o-p_7_9&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="26790" LastActivityDate="2020-07-19T03:11:11.163" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20945" PostTypeId="1" CreationDate="2020-07-19T04:16:27.843" Score="0" ViewCount="89" Body="&lt;p&gt;For planar robots, we can calculate how small changes in the angle of each joint corresponds to the displacement of the end effector, by constructing a jacobian consisting of cross products between the axis of rotation of each joint and difference between the position of each joint and the end joint. I tried to use the same logic for a spherical joint with 3dof by calculating three angles for each global axis of rotation, from the displacement of the end effector at each global axis. I then tried to construct a rotational matrix to correctly orient the joint from these three Euler angles. However, since rotations of each angle stack on top of each other in rotation matrices, this didn't work. Is there a practical way to construct a rotation matrix from these angles or is there a different solution to this problem?&lt;/p&gt;&#xA;" OwnerUserId="24926" LastEditorUserId="19515" LastEditDate="2020-07-22T17:28:09.513" LastActivityDate="2020-07-22T17:28:09.513" Title="How to calculate displacement of the end effector by the yaw, pitch, and roll in the spherical joint?" Tags="&lt;manipulator&gt;&lt;joint&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20946" PostTypeId="1" CreationDate="2020-07-19T17:30:00.067" Score="0" ViewCount="32" Body="&lt;p&gt;I'm good on the programming, control systems and electronics aspect of robotics, but need help with a problem with mechanical design.&lt;/p&gt;&#xA;&lt;p&gt;How do I avoid bending of my chassis due to weight?&#xA;It is a 2 wheeled differential drive robot with a castor wheel in front. Since these are the only three contact points, the chassis is bent along Xand Y axis. What changes can I make to the design to avoid this effect by the bending stress?&lt;/p&gt;&#xA;" OwnerUserId="13969" LastActivityDate="2020-12-16T21:06:15.693" Title="How to design a robot chassis so as to avoid bending issues?" Tags="&lt;design&gt;&lt;mechanism&gt;&lt;differential-drive&gt;&lt;two-wheeled&gt;&lt;chassis&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20947" PostTypeId="2" ParentId="20946" CreationDate="2020-07-19T19:49:46.533" Score="1" Body="&lt;p&gt;It is difficult to provide a specific answer due to not knowing details of your design, but consider these factors for the deflection of a beam.  They should give you ideas.&lt;/p&gt;&#xA;&lt;p&gt;For a beam supported at the endpoints, with a load in the center, the deflection increases if:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The load increases.&lt;/li&gt;&#xA;&lt;li&gt;The distance between endpoints increases.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;The deflection decreases if the material supporting the load:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Has a higher Young’s modulus.&lt;/li&gt;&#xA;&lt;li&gt;Is thicker.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Interestingly, the distance between endpoints very much affects the deflection - all of the other parameters are linear for increasing or decreasing deflection except for the distance.  For that parameter, the deflection increases relative to the cube of the distance between endpoints.&lt;/p&gt;&#xA;&lt;p&gt;So what can you do?&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;lighten the load&lt;/li&gt;&#xA;&lt;li&gt;move the attachment points closer together&lt;/li&gt;&#xA;&lt;li&gt;use a stronger base to hold the load&lt;/li&gt;&#xA;&lt;li&gt;use a thicker base to hold the load&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Now it gets interesting.  You don’t need to increase the strength or thickness of the whole platform, just that of the material between the connection points.   Consider if you added a thin, flat bar of metal to brace the platform.  This bar is much more easily deflected if it lies flat relative to the floor than it is if it is mounted with the longer dimension vertical (like a wall instead of a floor).  But that is harder to mount.  So here is my favorite idea besides moving the mount points closer together:  use angle braces under the platform between your attachment points.   The 90 degree angle allows you to have a horizontal surface for mounting to the platform, and the vertical section provides the strength and thickness to counter the deflection force.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2020-07-19T19:49:46.533" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20948" PostTypeId="2" ParentId="20945" CreationDate="2020-07-19T20:00:38.897" Score="1" Body="&lt;p&gt;Write the rotation matrix from the first coordinate system to the coordinate system moved by the first motor.  Four of the elements should include a cosine or sine of the first motor angle.  Then write the rotation matrix from that coordinate system to the coordinate system moved by the second motor.  Do this again for the third motor.&lt;/p&gt;&#xA;&lt;p&gt;Multiply these three rotation matrixes together and you will get the rotation matrix for the 3 dof spherical joint.&lt;/p&gt;&#xA;&lt;p&gt;Incidentally, you can easily write the individual 3x3 rotation matrices as follows:&lt;/p&gt;&#xA;&lt;p&gt;The first column is composed of the direction cosines of the moving x axis relative to the fixed coordinate system; the second column is composed of the direction cosines of the moving y axis with respect to the fixed coordinate system; the third column is composed of the direction cosines of the moving z axis with respect to the fixed coordinate system.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastEditorUserId="11125" LastEditDate="2020-07-19T20:23:23.833" LastActivityDate="2020-07-19T20:23:23.833" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="20949" PostTypeId="1" CreationDate="2020-07-19T21:49:19.240" Score="0" ViewCount="24" Body="&lt;p&gt;I am planning on using 10 Towerpro SG90 servos, which operate at 4.8V or 6V and can require a maximum stall current of 700ma. If I use a breadboard like this one (&lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/B073ZC68QG&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.amazon.com/gp/product/B073ZC68QG/&lt;/a&gt;), will I be able to supply 5v @700ma to all 10 servos? I am confused because one of the customers asked &amp;quot;What is the maximum current rating on the power supply module?&amp;quot; and the answer was &amp;quot;The Power Supply Module Maximum Output Current: &amp;lt; 700ma.&amp;quot; Does that mean each servo that is connected to the breadboard gets 700ma max or does it mean that the current all the servos draw combined is under 700ma?&lt;/p&gt;&#xA;" OwnerUserId="26791" LastActivityDate="2020-07-19T21:49:19.240" Title="Can I use a breadboard to power multiple SG90 servos?" Tags="&lt;rcservo&gt;&lt;circuit&gt;&lt;current&gt;" AnswerCount="0" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="20951" PostTypeId="1" AcceptedAnswerId="20955" CreationDate="2020-07-20T02:49:57.350" Score="1" ViewCount="418" Body="&lt;p&gt;hope you are all doing well.&lt;/p&gt;&#xA;&lt;p&gt;I am taking a course at Coursera about Robotics and in one of the quizes, I had some problem with a particular question. I passed the quiz (4/5 correct answers), however I would like to know what was wrong with my approach. The discussion forums of the course are pretty useless. I had tried them for some questions in the past and I did not get even a single response from anybody. This is the reason I am posting the question here. Here is the question:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/wRBfs.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wRBfs.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;What I did was; I first divided the dumbbell into three parts: two spheres and one cylinder. Then I calculated the mass of the cyliner (1.4074) and then the mass of one of the spheres (23.52). Then I calculated the moment of inertia for each axis of the cylinder (Ix = 0.000281, Iy = 0.0048, Iz = 0.0048). After that, I did the same thing for one of the spheres (Ix = 0.0941, Iy = 0.0941, Iz = 0.0941) and multiplied each axis by 2. Then I added this result to first cylinder and I got the matrix;&lt;/p&gt;&#xA;&lt;p&gt;[0.1885 0 0; 0 0.1930 0; 0 0 0.1930]. However, my result was incorrect. Can you tell me what was wrong with my approach?&lt;/p&gt;&#xA;" OwnerUserId="26789" LastActivityDate="2020-07-21T09:56:44.680" Title="Moment of Inertia of a Dumbbell" Tags="&lt;dynamics&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20952" PostTypeId="2" ParentId="20951" CreationDate="2020-07-20T07:36:59.010" Score="2" Body="&lt;p&gt;You have correctly identified, that you have to segment the body into 3 geometrical shapes, and calculate the inertia for all of these separately. If I understand your explanation correctly, you did not compound the inertias of the segments correctly.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Moment_of_inertia#Inertia_tensor&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here&lt;/a&gt; is the Wikipedia article on how to compound the inertia of N masses. It is not just a simple summation because the inertia is dependent on geometrical coordinates. Summing up two matrices disregards this geometrical dependency.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-07-20T07:36:59.010" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20953" PostTypeId="2" ParentId="20931" CreationDate="2020-07-20T10:45:59.733" Score="0" Body="&lt;p&gt;As you correctly identified and mentioned, the Jacobian matrix links the joint velocities to the end effector velocities.&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$\dot X  = J \cdot \dot Q $$&lt;/span&gt;&#xA;or&#xA;&lt;span class=&quot;math-container&quot;&gt;$$\dot Q  = J^{-1} \cdot \dot X $$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;What these expressions of the Jacobi Matrix do not explicitly show is their dependency of the current pose of the robot. Depending on how the Jacobi matrix has been obtained, this might be dependent of &lt;span class=&quot;math-container&quot;&gt;$Q$&lt;/span&gt; or &lt;span class=&quot;math-container&quot;&gt;$X$&lt;/span&gt;. If the inverse kinematics equations have been derived there the inverse kinematics is defined as &lt;span class=&quot;math-container&quot;&gt;$f^{-1} (X)$&lt;/span&gt; then the Jacobi matrix will be dependent on the TCP position &lt;span class=&quot;math-container&quot;&gt;$J^{-1}(X)$&lt;/span&gt;. If the forward kinematics equations have been used to derive the Jacobi matrix then &lt;span class=&quot;math-container&quot;&gt;$J(Q)$&lt;/span&gt;. Please note that this notation does not refer to actually inverting &lt;span class=&quot;math-container&quot;&gt;$J$&lt;/span&gt;, but it is meant to express that the inverse Jacobi is usually derived from the inverse kinematics equations and are dependent on the TCP position &lt;span class=&quot;math-container&quot;&gt;$X$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Every time the robot changes its position, the velocities have to be recalculated in order to stay on path. The lower the cycle time, the higher the frequency at which the velocity is recalculated the better the robot will stay on path.&lt;/p&gt;&#xA;&lt;p&gt;For Unity this will be the &lt;code&gt;Update()&lt;/code&gt; function of a game object, called every frame, for 60fps this would mean every 16ms. For a robot controller this is in the 1ms range (maybe up to 4ms). (There are also some advanced features, like path lookahead for robot controller which come into play here, but let's remain at the question in hand)&lt;/p&gt;&#xA;&lt;p&gt;The question explicitly mentioned velocities. There is a way to follow a given curve without considering the velocities. This would be simpler, but it is not considered here.&lt;/p&gt;&#xA;&lt;p&gt;So given a curve in Cartesian (or Task space) a velocity profile has to be attached to this curve (if it is not already done when defining the curve). A simple velocity profile can be planned using co called &amp;quot;S-Curves&amp;quot;. &lt;a href=&quot;https://www2.et.byu.edu/%7Eered/ME537/Notes/Ch5.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Here&lt;/a&gt; is an example on how to do this.&lt;/p&gt;&#xA;&lt;p&gt;Now, assuming that the current position of the robot matches the starting point of the curve, the  first thing to do is to get the next step of the curve, where the robot should be in the next frame (or next control loop cycle). This can be calculated in terms of position, or if the target velocity profile is available, it can be calculated what velocity should the robot currently have instead of where is should be in the next timestep.&lt;/p&gt;&#xA;&lt;p&gt;Here comes the tricky part for your manipulator. Since your manipulator is redundant, you (most probably) cannot define &lt;span class=&quot;math-container&quot;&gt;$J^{-1}(X)$&lt;/span&gt;. However, by adding additional constraints you can solve the inverse kinematics problem. Here is where you would want to add the additional constraints to make sure that the banana shape is kept. Effectively you are solving &lt;span class=&quot;math-container&quot;&gt;$Q = f^{-1}(X)$&lt;/span&gt; with additional constraints. Also here, since you have all joint angles, you can compare to joint angle limits. In Unity this will be solved in an &lt;code&gt;Update()&lt;/code&gt; function of a MonoBehaviour script. Now you have the desired, banana shaped joint angles and now, you can calculate &lt;span class=&quot;math-container&quot;&gt;$J(Q_i)$&lt;/span&gt;. This matrix will have actual values and not an expression, hence it can be inverted (or pseudoinverted). If inverted (or pseudoinverted) you get &lt;span class=&quot;math-container&quot;&gt;${(J(Q_i))}^{-1}$&lt;/span&gt;, which maps cartesian velocities to joint space velocities, while also taking account your desired banana shape. Now that you have the velocities in joint space, you can actuate your joint using these velocities&lt;/p&gt;&#xA;&lt;p&gt;So, to summarize, your robot seams redundant, so you cannot solve the IK without additional constraints. This is why an expression for &lt;span class=&quot;math-container&quot;&gt;$J^{-1}(X)$&lt;/span&gt; which takes into account the &amp;quot;banana shape preference is not easy to do&amp;quot;. You can solve your IK with any additional contraint you like (e.g. a constraint for banana shape) and calculate the Jacobi matrix which links joint space velocities to cartesian velocities, &lt;span class=&quot;math-container&quot;&gt;$J(Q)$&lt;/span&gt;. This is pose dependent and is not an expression or a function but a matrix filled with values. You can invert (or pseudoinver) this and use it to map TCP velocity to joint space velocity but for this exact pose only. When the robot changes position, the same calculation has to be made again for that pose.&lt;/p&gt;&#xA;&lt;p&gt;Again, there are simpler ways to achieve the same effect in Unity, since Unity does not need a smooth velocity profile for smooth-looking motions (as opposed to real robots). Furthermore, there is a somewhat more complicated approach needed for a real robot, where you have a position-velocity-torque cascaded control loop. The described solution is somewhat in-between, because it answers the points explicitly raised in the question.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2020-07-20T10:52:14.107" LastActivityDate="2020-07-20T10:52:14.107" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20954" PostTypeId="1" CreationDate="2020-07-20T12:57:12.023" Score="0" ViewCount="141" Body="&lt;p&gt;I want to learn and understand the Open Motion Planning Library (OMPL) through Python as I don't have much experience with C++. Almost all tutorials are written in C++ and there are some demos in Python. I installed and checked OMPL version 1.5. It worked well, and I want to know more about other applications. Are there any resources or suggestions on how I can learn OMPL through Python?&lt;/p&gt;&#xA;&lt;p&gt;I use Ubuntu 18.04&#xA;Python 3.6&#xA;OMPL 1.5&lt;/p&gt;&#xA;" OwnerUserId="26798" LastActivityDate="2021-04-17T23:53:05.277" Title="Are there any tutorials for OMPL in Python?" Tags="&lt;motion-planning&gt;&lt;python&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20955" PostTypeId="2" ParentId="20951" CreationDate="2020-07-20T13:49:58.740" Score="3" Body="&lt;p&gt;First, I don't get the same mass for the spheres. Volume of a sphere is &lt;span class=&quot;math-container&quot;&gt;$\frac{4}{3}\pi r^3$&lt;/span&gt;, right? When I do &lt;span class=&quot;math-container&quot;&gt;$5600\left(\frac{4}{3}\right)\left(\pi\right)\left(0.1^3\right)$&lt;/span&gt; I get a different answer.&lt;/p&gt;&#xA;&lt;p&gt;Second, if you're going to offset the centers of mass then you need to use the &lt;a href=&quot;https://en.wikipedia.org/wiki/Parallel_axis_theorem&quot; rel=&quot;nofollow noreferrer&quot;&gt;parallel axis theorem&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;I = I_{cm} + md^2 \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;That is, the shifted moment of inertia is the base moment of inertia (about the center of mass) and then you offset by mass times the offset distance squared.&lt;/p&gt;&#xA;&lt;p&gt;You submitted the answer as though all objects were centered on the same spot, but they're not.&lt;/p&gt;&#xA;&lt;p&gt;:edit:&lt;/p&gt;&#xA;&lt;p&gt;I edited the calculation to use the radius instead of what I had originally put (the diameter). Used the right value in the actual calculation I did, but wrote the wrong numbers down here (like I've done on SO many tests)&lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2020-07-21T09:56:44.680" LastActivityDate="2020-07-21T09:56:44.680" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20956" PostTypeId="1" CreationDate="2020-07-20T16:31:04.693" Score="4" ViewCount="129" Body="&lt;p&gt;&lt;strong&gt;Problem Overview&lt;/strong&gt;: our project consists of an iRobot Create2, a RaspberryPi 4 and a YDLIDAR X4. The RaspberryPi is powered from the Create2 serial port. We tried to power the lidar from the RaspberryPi, but reached the limits of the Create2 serial port power/current. We managed to directly tap from the Create2 battery, and also from the Main Brush. However, we are experiencing problems when tapping to the Vacuum's power, which would have been a more elegant and simpler solution.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Context&lt;/strong&gt;: As per the suggested approach from the &lt;a href=&quot;https://www.irobotweb.com/-/media/MainSite/PDFs/About/STEM/Create/BatteryPower.pdf?la=en&quot; rel=&quot;nofollow noreferrer&quot;&gt;official documentation's&lt;/a&gt;, when the serial port of the Create 2 (rated at 20.5V-10V 0.2A) is not enough for powering your project, one can try to draw power from one of the motor brushes:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;  Method         Voltage        Current        Power       &#xA; -------------- -------------- -------------- ------------ &#xA;  Serial          20.5V–10V      0.2A           2W         &#xA;  Main Brush      16V – 12V      1.45A          17W        &#xA;  Side Brush      16V – 12V      0.54A          6.5W       &#xA;  Vacuum Brush    16V – 12V      0.56A          6.7W       &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The Vacuum Brush (rated at 0.56A 6.7W) should be more than enough for our YDLIDAR X4, whose &lt;a href=&quot;https://www.ydlidar.com/Public/upload/files/2020-04-13/YDLIDAR%20X4%20Datasheet.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;datasheet&lt;/a&gt; specifies that it requires up to 480mA when starting, but then idles at 350mA:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&#xA;       Subject         Min.    Typical    Max.    Unit                                                               Remark                                                             &#xA; -------------------- ------- ---------- ------- ------- ------------------------------------------------------------------------------------------------------------------------------ &#xA;  Supply Voltage        4.8          5     5.2     V      If the voltage exceeds the max value, it may damage the core. Too low Voltage may affect performance and even stop ranging    &#xA;  Voltage Ripple          0         50     100     mV     High ripple may cause working failure                                                                                         &#xA;  Start current         400        450     480    mA      Relatively higher current is required at startup of the device                                                                &#xA;  Sleep mode Current    280        300     340    mA      System dormancy with motor rotating                                                                                           &#xA;  Work mode Current     330        350     380    mA                                                                                                                                    &#xA;&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;We have used the recommended 2.2mH 1.5A inductor (specifically, the Murata 1422514C inductor, as per the manual), and are also using an LTC3780 based DC/DC BUCK BOOST Converter &lt;em&gt;(we know this is overkill, and are waiting for a bunch of LM2596 based Buck converters to be shipped)&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Despite all our efforts, the YDLIDAR X4 is only powered for about 5 seconds, and then the Create 2 cuts all current to the Vacuum Brush. We have no idea why this happens.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;We have verified that this happens both when we press the &amp;quot;Clean&amp;quot; button to turn on the robot's default program, and also when we set the robot to FULL mode and send the turn-motors-on command through the tethered serial connection using RealTerm.&lt;/p&gt;&#xA;&lt;p&gt;We have checked all related questions, but none mention the power cut we are experiencing:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/15354/directly-tapping-create2-battery&quot;&gt;directly tapping Create2 battery&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/7895/irobot-create-2-powering-up-after-sleep&quot;&gt;IRobot Create 2: Powering Up after Sleep&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/8686/increase-current-draw-from-serial-port-of-icreate-2&quot;&gt;increase current draw from serial port of icreate 2&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;We have also contacted support at create@irobot.com but have not gotten any answer (yet).&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;When trying to tap to the Vacuum power, we had already disconnected the vacuum's motor. The same goes to the Main Brush' motor.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;EDIT 2:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Taking Steve &amp;amp; Chuck's remarks into account, we have redesigned our initially intended setup.&lt;/p&gt;&#xA;&lt;p&gt;Since we were indeed running the Raspberry Pi 4 dangerously close to the power limit of the Mini DIN serial port, we have decided to power it from the Main Brush motor drive (16V – 12V,  1.45A, 17W).&lt;/p&gt;&#xA;&lt;p&gt;This, on the other hand, raises a bootsrapping problem (as noted by &lt;a href=&quot;https://robotics.stackexchange.com/a/20958/26800&quot;&gt;Steve&lt;/a&gt;). To overcome this, we have come up with the solution shown below:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/jFnJl.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/jFnJl.png&quot; alt=&quot;Breadboard wiring overview of the new setup&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/pH6Is.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/pH6Is.png&quot; alt=&quot;Wiring schematic of the new setup&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;In short, we have added a MOSFET that powers the Raspberry Pi from the Mini DIN serial port by default (when the Create 2 is Passive/Safe/Full modes). After the Raspberry Pi boots, a script will command the Create 2 through the Open Interface to power the Main Brush motor drive. The current coming from the main brush driver will automatically switch the MOSFET, and the Raspberry Pi will now be powered by the main brush driver. We have added a capacitor just in case the switching is not fast enough and cause a power outage on the Raspberry Pi.&lt;/p&gt;&#xA;&lt;p&gt;Finally, the LIDAR is now powered through the Raspberry Pi's USB ports.&lt;/p&gt;&#xA;&lt;p&gt;Hopefully, this design will be handy for anyone trying to tap directly from the Create 2 battery.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;strong&gt;NOTE: this new setup has not yet been tested. We're still waiting for some remaining components to be shipped, but I will report back with our results once we have finished building and testing the new wiring setup.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="26800" LastEditorUserId="26800" LastEditDate="2020-07-22T09:45:05.410" LastActivityDate="2020-07-22T09:45:05.410" Title="Directly tapping Create2 battery through vacuum brush" Tags="&lt;irobot-create&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20957" PostTypeId="2" ParentId="20956" CreationDate="2020-07-20T19:06:48.643" Score="2" Body="&lt;p&gt;Welcome to &lt;em&gt;Robotics&lt;/em&gt;, XabiGarde. I can't tell from the documentation whether the stated power is the total amount the driver can source or if it's the net amount available AFTER accounting for the motors themselves. You're looking at a startup power draw of 2.25 W on a port rated for 6.7 W. It would seem like that's capable, but you might also be browning out the bus if the 6.7 W is also driving the motor. The 5-second shutoff might be a short-circuit protection built into the Create2.&lt;/p&gt;&#xA;&lt;p&gt;Troubleshooting steps I would try are:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Measure the voltage during the power-on sequence and see if your supply voltage is normal - manual states it should be 12-16 volts.&lt;/li&gt;&#xA;&lt;li&gt;Disconnect the Create2's driven motor and see if the problem continues.&lt;/li&gt;&#xA;&lt;li&gt;Try connecting to a higher-power source (main brush) and see if the problem continues.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;If you try the above and the problem persists, please post the code section you're using to run the motors. It's been a while since I looked at the OP codes for the Create2.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-07-20T19:06:48.643" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20958" PostTypeId="2" ParentId="20956" CreationDate="2020-07-20T20:15:32.920" Score="2" Body="&lt;p&gt;A few thoughts, here:&lt;/p&gt;&#xA;&lt;p&gt;First thought: you are dangerously close to the power limit on the serial port with just the Raspberry Pi 4. Worst case trip power out of the serial port is 12 V @ 0.2 A = 2.4 W (assuming perfect DC to DC conversion), but the Pi 4 B draws 3.4 W at idle. I suspect you're getting away with this (for now) because your battery is (currently) fully charged; on the dock, you'll see 21 V, which will get you 4.2 W continuous. Once the battery droops, your Pi may reset.&lt;/p&gt;&#xA;&lt;p&gt;Second thought: As @&lt;a href=&quot;https://robotics.stackexchange.com/users/9720/chuck&quot;&gt;Chuck&lt;/a&gt; pointed out, you can't run both the LIDAR and the associated motor at once, so if you haven't disconnected the motor, please do that.&lt;/p&gt;&#xA;&lt;p&gt;Third thought: The motor PWM is switching the low side, but if you're powering the Pi off the serial port still, the PTC is on the high side. There might be some weird current flowing that is tripping the current limit on the motor driver.&lt;/p&gt;&#xA;&lt;p&gt;If this were my project, I would run everything off the main brush power port; clip the leads to the brush motor, add the Murata inductor you mentioned in series, and you'll have 17 W at your disposal, which should be more than enough for the Pi and the LRF. The only downside of that is that you end up with a bootstrapping problem when the robot is on the dock. I don't have a good answer for you on that one.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Please note that I am an iRobot employee, but the postings on this site are my own and don't necessarily represent iRobot's positions, strategies, or opinions.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="7665" LastActivityDate="2020-07-20T20:15:32.920" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20959" PostTypeId="1" CreationDate="2020-07-20T22:38:28.923" Score="1" ViewCount="39" Body="&lt;p&gt;How is real time control normally handled? Do you run a separate motor control unit which has its own RTOS or is there some other way?&lt;/p&gt;&#xA;" OwnerUserId="21514" LastActivityDate="2020-07-21T07:02:34.853" Title="Real Time Motion Control" Tags="&lt;control&gt;&lt;motion&gt;&lt;real-time&gt;" AnswerCount="1" CommentCount="1" ClosedDate="2020-07-22T17:37:25.520" ContentLicense="CC BY-SA 4.0" />
  <row Id="20960" PostTypeId="2" ParentId="20959" CreationDate="2020-07-21T07:02:34.853" Score="2" Body="&lt;p&gt;The key elements to real-time motor control is the motor controller and the motion controller (which can be a CNC, a robot controller or other type of controller). The following description fits most modern industrial control systems in use today where precise motions down to the 10-50 micrometer range can be archived.&lt;/p&gt;&#xA;&lt;p&gt;The motor controller usually is not x86/x64 based. It is usually some kind of DSP (or microcontroller or FPGA). It might use some very simple OS (with hard real-time constraints), but it can also just be bare metal. This device has a cascaded closed loop controls for controlling torque (current), velocity and position. It has an &amp;quot;amplifier&amp;quot; stage (e.g. H-bridge or a &amp;quot;triple H-bridge&amp;quot; for 3 phase motors) for supplying the motors and usually it also has encoder inputs. The control loop cycle time on this device is a key feature. the Torque controller has the highest frequency and the position controller (the outermost loop) has cycle time close o a millisecond (up to 4 ms is still practised).&lt;/p&gt;&#xA;&lt;p&gt;The motor controller receives setpoints (or reference values) from the motion controller. Furthermore it can also receive feed forward offsets for the velocity and torque control loops. The motion controller has a RTOS (e.g. VxWorks) and its main role is to plan the trajectories based on some application program (e.g. G-Code for CNC machines) and cyclically send setpoints to the motor controller with a cycletime in the milliseconds range. The motion controller communicates with the drive amplifier via a real-time bus system (e.g. CanOpen, ProfiNet).&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-07-21T07:02:34.853" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20961" PostTypeId="1" CreationDate="2020-07-21T09:07:42.407" Score="0" ViewCount="14" Body="&lt;p&gt;I've read the &lt;strong&gt;libmv&lt;/strong&gt; library dedicated to solving the bundle adjustment problem. The author states it's better to wrap the rotation and translation parameters into a single vector during optimization for improving optimization performance.&lt;/p&gt;&#xA;&lt;p&gt;My question is, in addition to wrapping the rotation and translation parameters, will it be better if we also wrap the intrinsic and extrinsic parameters into a single vector during optimization? By the way, the author separates them during optimization.&lt;/p&gt;&#xA;&lt;p&gt;The optimization is performed using ceres-solver.&lt;/p&gt;&#xA;" OwnerUserId="26583" LastEditorUserId="19515" LastEditDate="2020-07-21T13:44:59.347" LastActivityDate="2020-07-21T13:44:59.347" Title="Should I wrap the intrinsic and extrinsic parameters to a single vector during optimization?" Tags="&lt;slam&gt;&lt;visual-odometry&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20962" PostTypeId="2" ParentId="20954" CreationDate="2020-07-21T15:08:23.557" Score="0" Body="&lt;p&gt;OMPL does have Python bindings.  There is a section on the site documentation explaining the &lt;a href=&quot;https://ompl.kavrakilab.org/python.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;differences between the Python and C++ APIs and some samples&lt;/a&gt;.  That may provide you with a starting points, though I don't see any full tutorials using Python as of this writing (&lt;a href=&quot;https://web.archive.org/web/20200426172449/https://ompl.kavrakilab.org/python.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;alternate long-lived link&lt;/a&gt;).&lt;/p&gt;&#xA;" OwnerUserId="16622" LastActivityDate="2020-07-21T15:08:23.557" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20963" PostTypeId="2" ParentId="20217" CreationDate="2020-07-21T15:16:42.810" Score="0" Body="&lt;p&gt;An alternate approach is to reduce the mass and stiffness to enable higher accelerations, in combination with better sensing and control.  For example, controlling the end-effector in relation to the target in sensor space instead of a global coordinate frame (which is likely arbitrary with respect to the task).  The control scheme will have to allow for dynamic changes in the shape of the mechanism as it accelerates.&lt;/p&gt;&#xA;" OwnerUserId="16622" LastActivityDate="2020-07-21T15:16:42.810" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20964" PostTypeId="2" ParentId="20217" CreationDate="2020-07-22T09:11:21.123" Score="1" Body="&lt;p&gt;Back in the 90's I worked on a robot for a pen manufacturer customer. They wanted to simulate nib wear by having a robot write cursive script continuously for hundreds of hours at a time, in a reproducible way.&lt;/p&gt;&#xA;&lt;p&gt;If I remember correctly, the robot we developed was around 70cm tall, a tripod with the pen suspended on rods from near the apex. The motors were close to the top, one each for the x and y axis, using the long rod to amplify the speed and range of travel of the limited travel motors (voice coil, IIRC) we were using.&lt;/p&gt;&#xA;&lt;p&gt;As others suggested, in order to be fast enough it had to be be incredibly lightweight. The low payload weight (just a pen) made this just about possible, but to get that speed sacrifices in positional accuracy had to be made with the technology available at the time.&lt;/p&gt;&#xA;&lt;p&gt;These days we wouldn't have the control issues we did back then (integer PID parameters with the National instruments motor controller we were using, left our system at most marginally stable most of the time, forcing us to cut back the speed to retain stability) but the fundamental limitations of torque, speed, range of travel, precision and cost are always going to be difficult to balance, and unusual requirements in one of these aspects can push the component cost sky high.&lt;/p&gt;&#xA;&lt;p&gt;There are lots more options available now though, from flexture stages, piezo walk or stack actuators, smaller, more precise lightweight linear motors, but all of these options are going to be expensive, far beyond most hobby budgets.&lt;/p&gt;&#xA;&lt;p&gt;If you go for a Cartesian robot design, rather than a traditional 'arm', 50 micron accuracy is not too difficult/expensive if your range of movement is not too high. Even relatively cheap fused deposition 3d printers can get 10um step size (not accuracy). Much below 10 micron accuracy gets tough unless your range of movement is very restricted though.&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="37" LastEditDate="2020-07-22T09:21:53.267" LastActivityDate="2020-07-22T09:21:53.267" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20966" PostTypeId="2" ParentId="7600" CreationDate="2020-07-23T00:02:52.790" Score="0" Body="&lt;p&gt;RoboDK offers a driver that sits on the KPC. You can write your code in most high-level languages like Python, for example. Point the local RoboDK application towards your IDE of choice, import RoboDK library into your project, and use RoboDK, well documented, API to run online debug from your python IDE.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://robodk.com/doc/en/RoboDK-API.html#RoboDKAPI&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://robodk.com/doc/en/RoboDK-API.html#RoboDKAPI&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="26818" LastActivityDate="2020-07-23T00:02:52.790" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20967" PostTypeId="2" ParentId="20822" CreationDate="2020-07-23T07:00:18.733" Score="1" Body="&lt;p&gt;It is always recommended to mention your ROS distribution and OS. I believe the error is coming from missing ROS package controller_manager. You can download and install it from the following link&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/ros-controls/ros_control&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/ros-controls/ros_control&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="21747" LastActivityDate="2020-07-23T07:00:18.733" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20971" PostTypeId="1" CreationDate="2020-07-24T06:46:19.113" Score="1" ViewCount="19" Body="&lt;p&gt;I am using pybullet.&lt;/p&gt;&#xA;&lt;p&gt;I have a cuboid with half extents [4,2,1] corresponding to x,y,z dimensions. I rotate this cuboid around the z world axis theta and also translate it by [0, 0, .65].&lt;/p&gt;&#xA;&lt;p&gt;I take a pointcloud of the cuboid, giving me an &lt;span class=&quot;math-container&quot;&gt;$N \times 3$&lt;/span&gt; vector where &lt;span class=&quot;math-container&quot;&gt;$N$&lt;/span&gt; is the number of points, and 3 is the xyz dimensionality. Let's call it &lt;span class=&quot;math-container&quot;&gt;$P$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;How do I apply a second rotation to this cuboid such that the longest edge becomes aligned with the z-world axis?&lt;/p&gt;&#xA;&lt;p&gt;I have been doing:&#xA;&lt;span class=&quot;math-container&quot;&gt;$P' = P @ \begin{bmatrix}0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \\ 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 \\ 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\ 0 &amp;amp; 0&amp;amp; 0 &amp;amp; 1\end{bmatrix}$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;(where @ is the matrix multiply operator in torch/numpy)&lt;/p&gt;&#xA;&lt;p&gt;But this is giving me totally wrong results: &lt;a href=&quot;https://i.snipboard.io/4qbup0.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://i.snipboard.io/4qbup0.jpg&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;(Red is the pointcloud after the second rotation is applied, black is the pointcloud after the first rotation is applied. The longest edge of the red one should be aligned with the z-axis.)&lt;/p&gt;&#xA;" OwnerUserId="21582" LastEditorUserId="26991" LastEditDate="2020-09-01T15:58:26.927" LastActivityDate="2020-09-01T15:58:26.927" Title="How to do a relative rotation of a cuboid such that the longest edge is upright?" Tags="&lt;kinematics&gt;&lt;simulation&gt;" AnswerCount="0" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20972" PostTypeId="1" CreationDate="2020-07-24T11:28:54.933" Score="0" ViewCount="357" Body="&lt;p&gt;I want to simulate an Arduino MEGA (or UNO) controlling a NEMA17 (stepper motor) using A4988 (stepper motor driver). I couldn't find the stepper motor and driver on TinkerCAD. Can this be done in Proteus? Or is there any other workaround possible?&lt;/p&gt;&#xA;" OwnerUserId="26696" LastActivityDate="2020-08-23T20:00:05.093" Title="Simulator for NEMA17 (stepper motor) and A4988 (stepper motor driver) along with Arduino" Tags="&lt;arduino&gt;&lt;stepper-motor&gt;&lt;simulation&gt;&lt;simulator&gt;&lt;stepper-driver&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20973" PostTypeId="2" ParentId="20972" CreationDate="2020-07-24T19:25:55.127" Score="1" Body="&lt;p&gt;You can do that in Proteus. You can simulate a stepper motor there, but only to see the motion, it is not possible to simulate the speed, inertia, and mechanical response.&lt;/p&gt;&#xA;" OwnerUserId="21229" LastActivityDate="2020-07-24T19:25:55.127" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20975" PostTypeId="1" CreationDate="2020-07-24T22:13:04.743" Score="0" ViewCount="42" Body="&lt;p&gt;My students and I are using a Hiwonder LD-220MG digital servo to position a &amp;quot;shoulder&amp;quot; on a robot. &lt;a href=&quot;https://i.stack.imgur.com/JuWpE.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JuWpE.jpg&quot; alt=&quot;robot bulldozer on workbench&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;We are seeing a behavior (on every one of these servos that we test) that it won't go between arbitrary angle values. If the angle we want to go to is too far from where the servo is currently positioned, then it either ignores the new target value, or very slowly creeps to it if it's not &amp;quot;too far&amp;quot;. If the target angle is &amp;quot;close&amp;quot;, say within 15 degrees, the servo will correctly and quickly move to the target angle.&lt;/p&gt;&#xA;&lt;p&gt;So far, we've looked at voltage (right at the top of the spec for the servo), signal quality (nice solid 50Hz square wave coming from a PCA9685 16-Channel 12-Bit PWM Servo Driver), and software (used a hobby R/C tester).&lt;/p&gt;&#xA;&lt;p&gt;Any and all suggestions appreciated.&lt;/p&gt;&#xA;" OwnerUserId="26831" LastEditorUserId="26831" LastEditDate="2020-07-24T22:23:58.413" LastActivityDate="2021-04-21T12:07:35.693" Title="digital servo won't seek to angle if delta between current position and target is more than ~15 degrees" Tags="&lt;mobile-robot&gt;&lt;robotic-arm&gt;&lt;rcservo&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="20976" PostTypeId="2" ParentId="20975" CreationDate="2020-07-25T10:52:10.843" Score="0" Body="&lt;p&gt;Gever, do you have any clue on what type of feedback control you are using? This is usually a PID kind of controller (at least as far as I know). It could be that the once you give a large target position, the controller values get too high, causing an error to your servo. Adjusting the values of the PID (or any kind of) controller parameters would maybe help.&lt;/p&gt;&#xA;" OwnerUserId="26836" LastActivityDate="2020-07-25T10:52:10.843" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20979" PostTypeId="1" CreationDate="2020-07-26T04:49:34.817" Score="1" ViewCount="43" Body="&lt;p&gt;Over the past month since I bought iRobot Create 2, I have failed to establish communication between the Arduino and iRobot Create 2. I will describe my hardware setup and my Arduino code, then ask several questions that would help future projects as well.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Hardware Setup:&lt;/strong&gt; The iRobot Create 2 is connected with the Arduino based on the connection provided in pdf document at this link - &lt;a href=&quot;https://edu.irobot.com/learning-library/controlling-create-2-with-arduino-and-android&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://edu.irobot.com/learning-library/controlling-create-2-with-arduino-and-android&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Software Setup:&lt;/strong&gt; Following is a very basic code that I am using in my Arduino.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&#xA;#include &amp;lt;SoftwareSerial.h&amp;gt; &#xA;&#xA;int rxPin = 10; //connected to pin 4 (TXD) of iRobot based on above document&#xA;int txPin = 11; //connected to pin 3 (RXD) of iRobot based on above document&#xA;int ddPin = 5;  //connected to pin 5 (BRC) of iRobot&#xA;&#xA;//Set up a new Software Serial Port&#xA;SoftwareSerial softSerial = SoftwareSerial(rxPin, txPin);&#xA;&#xA;void setup() {&#xA;&#xA;// Defining PinModes&#xA;  pinMode(rxPin, INPUT);&#xA;  pinMode(txPin, OUTPUT);&#xA;  pinMode(ddPin, OUTPUT);&#xA;  softSerial.begin(19200); &#xA; &#xA;&#xA;// Change the BAUD Rate/Waking up&#xA;  digitalWrite(ddPin, HIGH);&#xA;  delay(100);&#xA;  digitalWrite(ddPin, LOW);&#xA;  delay(500);&#xA;  digitalWrite(ddPin, HIGH);&#xA;  delay(2000);&#xA;  &#xA;// Start Command&#xA;  softSerial.write(128); //Starts the OI&#xA;&#xA;// Mode Command - Passive, Safe, Full &#xA;  softSerial.write(131); //Set mode to Safe&#xA;}&#xA;&#xA;void loop() {&#xA;  // put your main code here, to run repeatedly:&#xA;  Serial.write(145);  //Serial.print(137, BYTE); &#xA;  Serial.write(0x00);  &#xA;  Serial.write(0xc8);&#xA;  Serial.write(0x00);&#xA;  Serial.write(0x01);  &#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;How I am deploying it ?&lt;/strong&gt;&#xA;I burn the above code into my Arduino using my laptop (Mac Pro). It compiles and burns fine without any issue. Then I disconnect the Arduino from my laptop and connect the Arduino using Jumper Wires to iRobot Mini DIN as following -&#xA;Pin 10 of Arduino -&amp;gt; Pin 4 of iRobot;&#xA;Pin 11 of Arduino -&amp;gt; Pin 3 of iRobot;&#xA;Pin 5 of Arduino  -&amp;gt; Pin 5 of iRobot;&lt;br /&gt;&#xA;GND of Arduino    -&amp;gt; Pin 6 of iRobot;&#xA;Vin of Arduino    -&amp;gt; Pin 1 of iRobot&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Observations&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;When I connect the GND of Arduino to iRobot Pin 6, iRobot gets active - Green light&lt;/li&gt;&#xA;&lt;li&gt;Create 2 doesn't move at all OR No Reaction.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;strong&gt;Questions&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;I am unsure if the bot is communicating at 19200 Baud Rate ? In the above code, I believe that the code is wrong and maybe that's the problem.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;What could possibly be any other problems ?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;What is the correct way to set up the Baud Rate ? I do not clearly understand the documentation for Baud Rate for the &lt;strong&gt;Method 2&lt;/strong&gt; ? How do you execute Method 2 on Arduino ?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="26795" LastActivityDate="2020-07-26T04:49:34.817" Title="Connecting iRobot Create 2 with Arduino; Unable to interface with iRobot using Arduino" Tags="&lt;irobot-create&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20980" PostTypeId="1" CreationDate="2020-07-26T13:35:21.507" Score="1" ViewCount="40" Body="&lt;p&gt;I want to get the difference between the orientation of my robot and a target point. The orientation is expressed as an angle as shown in the pictue below. The point is expressed as &lt;code&gt;(x, z)&lt;/code&gt; in a cartesian space that has origin in the robot position. The x and z axis are always fixed.&lt;/p&gt;&#xA;&lt;p&gt;This image explains how the angle and the axis are intended.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/pyYQK.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/pyYQK.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I need the angle between the orientation and the target, and I need it to be positive/negative when the target is left/right.&lt;/p&gt;&#xA;" OwnerUserId="24189" LastActivityDate="2021-04-23T01:40:23.530" Title="Signed difference between two directions" Tags="&lt;orientation&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20981" PostTypeId="2" ParentId="20980" CreationDate="2020-07-27T00:05:33.530" Score="0" Body="&lt;p&gt;Assuming you know the &lt;a href=&quot;https://en.wikipedia.org/wiki/Heading_(navigation)&quot; rel=&quot;nofollow noreferrer&quot;&gt;heading&lt;/a&gt; of your own vehicle, you then need to find the &lt;a href=&quot;https://en.wikipedia.org/wiki/Absolute_bearing&quot; rel=&quot;nofollow noreferrer&quot;&gt;absolute bearing&lt;/a&gt; of your target so you can find the &lt;a href=&quot;https://en.wikipedia.org/wiki/Relative_bearing&quot; rel=&quot;nofollow noreferrer&quot;&gt;relative bearing&lt;/a&gt; between your vehicle and the target.&lt;/p&gt;&#xA;&lt;p&gt;The best way to do this, if you have the x/z position of the target, is with the &lt;a href=&quot;https://en.wikipedia.org/wiki/Atan2&quot; rel=&quot;nofollow noreferrer&quot;&gt;atan2 function&lt;/a&gt;, where:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;code&gt;atan2(y, x)&lt;/code&gt; returns a single value θ such that −π &amp;lt; θ ≤ π&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;If you just use &lt;code&gt;atan&lt;/code&gt; then you wind up with an ambiguous result and you need to check/offset the answer by checking the signs of y and x. The &lt;code&gt;atan2&lt;/code&gt; function does this automatically.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-07-27T00:05:33.530" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20982" PostTypeId="1" CreationDate="2020-07-27T01:08:40.790" Score="1" ViewCount="187" Body="&lt;p&gt;I've read numerous posts (&lt;a href=&quot;https://robotics.stackexchange.com/questions/1232/how-can-i-use-the-arduino-pid-library-to-drive-a-robot-in-a-straight-line/1234#1234&quot;&gt;1&lt;/a&gt; , &lt;a href=&quot;https://robotics.stackexchange.com/questions/1711/approach-to-using-pid-to-get-a-differential-robot-driving-straight&quot;&gt;2&lt;/a&gt;, &lt;a href=&quot;http://brettbeauregard.com/blog/2011/04/improving-the-beginners-pid-introduction/&quot; rel=&quot;nofollow noreferrer&quot;&gt;3&lt;/a&gt; ) about using PID to control motors. All examples I've seen deal with the control signal being in the same units as the measurement signal. For example, use PID to set PWM values and measure PWM values as feedback or read stepper motor values in encoder clicks and then set new motor values also in clicks.&lt;/p&gt;&#xA;&lt;p&gt;What I'm not understanding is how does one use PWM as the control when the measurements are in Encoder Clicks as would be common on a DC brush motor with encoder. How does the output of the PID taking Clicks as input, outputs and setpoint get translated to an appropriate 0 to 255 PWM signal (Assuming 8-bit PWM)?&lt;/p&gt;&#xA;&lt;p&gt;It seems like there's a fundamental disconnect between the encoder clicks which can be though of as velocity (change of distance over time) vs PWM control signal which is an amount of power provided to the motor.&lt;/p&gt;&#xA;&lt;p&gt;My naive guess would be to:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Determine the MAX encoder clicks per second at a given PWM value of 255 emperically.&lt;/li&gt;&#xA;&lt;li&gt;Determine the MIN encoder value for the PWM value right before the motor stops moving under load. (For example my &lt;a href=&quot;https://www.pololu.com/category/167/20d-metal-gearmotors&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pololu motors&lt;/a&gt; need at least 60 PWM on my motor controller to actually turn, below that value they just 'whine'.)&lt;/li&gt;&#xA;&lt;li&gt;Linearly map the encoder readings from the MIN and MAX to an appropriate MIN and MAX PWM reading?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;pre&gt;&lt;code&gt;// Using the Arduino PID library&#xA;encoderLow = 60;   // determined empirically&#xA;encoderHigh = 8400;// determined empirically&#xA;PWMLow = 60; // determined empirically&#xA;PWMHigh = 255;  // PWM as which we reach encoderHigh&#xA;&#xA;Input = reading_from_encoder();  // clicks per second&#xA;Setpoint = 1000; // also in clicks&#xA;PID myPID(&amp;amp;Input, &amp;amp;Output, &amp;amp;Setpoint, Kp, Ki, Kd, DIRECT);&#xA;translated_pwm = map(Output, encoderLow, encoderHigh, PWMLow, PWMHigh) &#xA;drive_motor(translated_pwm); // control signal to motor as PWM value.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Where Input (the feedback from the encoders), Setpoint, and Output are in clicks. Output is the control signal from the &lt;a href=&quot;https://github.com/br3ttb/Arduino-PID-Library/issues&quot; rel=&quot;nofollow noreferrer&quot;&gt;Arduino PID library&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Questions:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Is this the normal approach?&lt;/li&gt;&#xA;&lt;li&gt;My map() function assumes a linear relationship between encoder values and PWM values. I doubt that's true. Is the PID going to compensate for the nonlinearities?&lt;/li&gt;&#xA;&lt;li&gt;What is the correct way to do this?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="2152" LastActivityDate="2021-02-17T08:09:40.907" Title="PID control brushed motors via PWM using Encoder Clicks at SetPoints/Measurements" Tags="&lt;pid&gt;&lt;pwm&gt;&lt;quadrature-encoder&gt;" AnswerCount="4" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20984" PostTypeId="1" CreationDate="2020-07-27T03:50:16.310" Score="0" ViewCount="27" Body="&lt;p&gt;I am referring to pre-computed torque control techniques that are based on the Task Space dynamic model.&lt;/p&gt;&#xA;&lt;p&gt;Maybe by using pseudo-inverse for the Jacobian and the task space inertia matrix ?&lt;/p&gt;&#xA;&lt;p&gt;Cheers,&#xA;Titouan&lt;/p&gt;&#xA;" OwnerUserId="23605" LastActivityDate="2020-07-27T07:37:03.050" Title="Is it possible to control a 5 DOF manipulator in the 6 DOF Task Space?" Tags="&lt;control&gt;&lt;dynamics&gt;&lt;manipulator&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20985" PostTypeId="2" ParentId="20984" CreationDate="2020-07-27T07:37:03.050" Score="1" Body="&lt;p&gt;This is a somewhat awkwardly worded question, hopefully I'm getting at the essence of what you're trying to ask here.&lt;/p&gt;&#xA;&lt;p&gt;In short, no, you can't because with 5 DOF, you won't be able to apply force/move the end effector of the robot in any arbitrary combination of directions.&lt;/p&gt;&#xA;&lt;p&gt;However, it might be okay that you only have 5 DOF &lt;strong&gt;if&lt;/strong&gt; the motions that you need to do also only have 5 DOF. (eg. only motions in x, y, z and rotation in the x and z dimensions)&lt;/p&gt;&#xA;" OwnerUserId="7537" LastActivityDate="2020-07-27T07:37:03.050" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20988" PostTypeId="1" AcceptedAnswerId="20989" CreationDate="2020-07-27T15:35:15.450" Score="1" ViewCount="111" Body="&lt;p&gt;I always have had a problem understanding Chebychev–Grübler–Kutzbach Formula of Degree of Freedom:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$d = 6\,n - \sum_{i= 1}^{m}\left( 6 - f_i\right)$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;where &lt;span class=&quot;math-container&quot;&gt;$n$&lt;/span&gt; is the number of moving links, &lt;span class=&quot;math-container&quot;&gt;$m$&lt;/span&gt; is the number of joints and &lt;span class=&quot;math-container&quot;&gt;$f_i$&lt;/span&gt; is the degree of freedom of each &lt;span class=&quot;math-container&quot;&gt;$i$&lt;/span&gt;-th joint.&lt;br /&gt;&#xA;I read about it in the Wikipedia and there its said that the formula should work for any non-over constrained system. Hence I assume that it should work for parallel manipulators. But when I try to compute it for some parallel manipulators I don't get the degree of freedom that I expect. Maybe I don't understand what parts to consider as the &amp;quot;moving links&amp;quot;. I would appreciate if someone explains this through computing it for the cases of &amp;quot;3-RPR&amp;quot; and &amp;quot;Gough-Stewart&amp;quot; parallel platforms.&lt;/p&gt;&#xA;" OwnerUserId="15163" LastActivityDate="2020-07-28T06:24:51.980" Title="Chebychev–Grübler–Kutzbach Formula of Degree of Freedom" Tags="&lt;kinematics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20989" PostTypeId="2" ParentId="20988" CreationDate="2020-07-27T20:48:02.507" Score="5" Body="&lt;p&gt;You can check &lt;a href=&quot;http://motion.cs.illinois.edu/RoboticSystems/Kinematics.html#Configurations-for-parallel-mechanisms&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; how to apply the formula to a parallel robot.&lt;/p&gt;&#xA;&lt;p&gt;For a 6DOF Stewart platform&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$d = 6\,n - \sum_{i= 1}^{m}\left( 6 - f_i\right)$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$n = 13$&lt;/span&gt; links, &lt;span class=&quot;math-container&quot;&gt;$m = 18$&lt;/span&gt; joints, six of which with mobility 1 (the prismatic joints), 3 of which with mobility 3 (the spherical joints) and three of which with mobility 2 (the universal joints). There is a different variant, where you have 6 spherical joints. That is a bit more complicated since there is a &amp;quot;lost&amp;quot; (or redundant) degree of freedom between the two spherical joints so you have to subtract this. (The pragmatic explanation is, that if the prismatic joint is between two spherical joints it can freely rotate around its axis, but this rotation does not contribute to the motion of the mechanism)&lt;/p&gt;&#xA;&lt;p&gt;So &lt;span class=&quot;math-container&quot;&gt;$d = 6 \cdot 13 - 6 \cdot (6-1) - 6 \cdot (6-2) - 6 \cdot (6-3) = 78 - 30 - 24 - 18 = 6$&lt;/span&gt; dof&lt;/p&gt;&#xA;&lt;p&gt;For the 3-RPR, since it is planar mechanism the formula is:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$d = 3\,n - \sum_{i= 1}^{m}\left( 3 - f_i\right)$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$n = 7$&lt;/span&gt; links, &lt;span class=&quot;math-container&quot;&gt;$m = 9$&lt;/span&gt; joints, all with mobility 1.&#xA;So &lt;span class=&quot;math-container&quot;&gt;$d = 3 \cdot 7 - 9 \cdot (3-1) = 21 - 18 = 3$&lt;/span&gt; dof&lt;/p&gt;&#xA;&lt;p&gt;However, as far as I know, it is not exactly correct to say, that this formula applies to &lt;strong&gt;all&lt;/strong&gt; non-overconstrained types of mechanisms. There is a special, very rarely used case of parallel robots, called the Isoglide robot to which this formula cannot be applied correctly.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2020-07-28T06:24:51.980" LastActivityDate="2020-07-28T06:24:51.980" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20990" PostTypeId="1" CreationDate="2020-07-27T21:04:10.833" Score="0" ViewCount="79" Body="&lt;p&gt;Surfing through websites and videos, I interpreted that cost refers to parameters such as time taken to go from start position to the goal position or distance traveled in every possible path and cost functions refers to the functions of these parameters with some condition such as shortest time taken or shortest distance traveled.&#xA;So is this interpretation, right?&lt;/p&gt;&#xA;" OwnerUserId="26638" LastEditorUserId="26991" LastEditDate="2020-09-01T15:58:32.143" LastActivityDate="2020-09-01T15:58:32.143" Title="What is a cost and cost function in path planning?" Tags="&lt;path-planning&gt;&lt;trajectory&gt;&lt;robotics-library&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20991" PostTypeId="1" AcceptedAnswerId="20992" CreationDate="2020-07-27T21:12:51.823" Score="0" ViewCount="35" Body="&lt;p&gt;I'm looking for a product for home hobby-level robotics. Something that has modular robot hardware allowing me to design the robot itself, but lets me write the logic in a JVM or Android language. I have searched several times so I'm not expecting a big list, but it could be designed any of three ways that I can think of:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;connects to a configurable API endpoint, OR conversely,&#xA;&lt;ul&gt;&#xA;&lt;li&gt;publishes an HTTP or RPC API for a controlling client to connect to, or&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;supports running a jar or apk on the robot itself, or&lt;/li&gt;&#xA;&lt;li&gt;plugs into and carries around an Android device or small computer with some standard language-agnostic way of communicating with control APIs locally.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;I'd like to dabble in robotics. The thing I know best is the JVM. For better or worse, I've worked almost exclusively with the JVM for over 10 years and know several JVM-based languages. Call me specialized, but I'm not investing full work days in developing a new skill, and if I can't lean on my familiarity with known tech, I would anticipate dipping a toe into robotics to be more frustrating than fun. I know the JVM is heavy for the low-cost, bare-metal architecture choices that are typically made in the field of robotics; let's not talk about that here.&lt;/p&gt;&#xA;&lt;p&gt;Extra points if a kit comes with a Kotlin library.&lt;/p&gt;&#xA;" OwnerUserId="26851" LastActivityDate="2020-07-28T12:07:35.413" Title="How can I leverage my experience with the JVM and Android to do some hobby-level building and controlling robots at home?" Tags="&lt;software&gt;&lt;research&gt;&lt;beginner&gt;&lt;wifi&gt;&lt;platform&gt;" AnswerCount="2" CommentCount="5" ClosedDate="2020-07-28T13:20:54.650" ContentLicense="CC BY-SA 4.0" />
  <row Id="20992" PostTypeId="2" ParentId="20991" CreationDate="2020-07-27T21:51:14.593" Score="2" Body="&lt;p&gt;Have you taken a look at &lt;a href=&quot;http://www.lejos.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;LeJOS&lt;/a&gt;? It's a port of the Java VM and SDK to the various Lego MINDSTORMS robot kits. The Lego kits themselves are quite capable as hobbyist robotics kits go, I bought the NXT version years ago and had a lot of fun with it. The newest &lt;a href=&quot;https://www.lego.com/en-ca/product/lego-mindstorms-ev3-31313&quot; rel=&quot;nofollow noreferrer&quot;&gt;EV3&lt;/a&gt; kit has a powerful ARM CPU and an SD card reader for loading software, it looks like a good option if you don't want to spend much time fiddling around with firmware installation.&lt;/p&gt;&#xA;" OwnerUserId="4310" LastActivityDate="2020-07-27T21:51:14.593" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="20993" PostTypeId="1" CreationDate="2020-07-28T00:56:12.247" Score="1" ViewCount="26" Body="&lt;p&gt;In this image, we see LHipYawPitch, as well as a dedicated LHipPitch. Why would they combine the yaw and pitch in the upper joint instead of making a dedicated yaw joint? I understand that this makes it more similar to a human hip, but is there any practical advantage?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/UmDsO.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/UmDsO.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="26393" LastActivityDate="2020-07-28T00:56:12.247" Title="Why do some humanoid robots use a slanted yaw joint on the hip?" Tags="&lt;joint&gt;&lt;humanoid&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="20994" PostTypeId="2" ParentId="20990" CreationDate="2020-07-28T04:33:42.920" Score="2" Body="&lt;p&gt;The term cost function in path planning is borrowed from optimization. Rightfully so, since path planning in most cases is, in fact, an optimization problem.&lt;/p&gt;&#xA;&lt;p&gt;The cost function in optimization expresses the function which should be minimized (as optimization is a synonym for minimization). Optimizing a cost function translates to finding its minimum. So if your function is &lt;span class=&quot;math-container&quot;&gt;$$f(x,y) = \sqrt{x^2+y^2}$$&lt;/span&gt; by minimizing this function as:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$ \begin{align}&#xA;\underset{x,y}{\min}&amp;amp;\quad f(x,y)\end{align} $$&lt;/span&gt;&#xA;you will get &lt;span class=&quot;math-container&quot;&gt;$f=0$&lt;/span&gt;. If we attribute meaning to this you could say that we are looking to minimize a distance and here cost becomes the distance. In this trivial example, the minimum cost is 0, i.e. you cannot be closer than distance 0.&lt;/p&gt;&#xA;&lt;p&gt;If we look at path planning the cost function gets more complicated. If we look to minimize the travelled distance the cost function is the travelled distance, which is dependent on all the waypoints which you travel through. Let‘s denote the list (or vector) of waypoints with&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$\Theta =[\theta_1 \dots \theta_n ] $$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;So the distance you travel can be calculated from these waypoints as &lt;span class=&quot;math-container&quot;&gt;$$f(\Theta)=\sum{\theta_i} $$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;(If all &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt; are adjacent points on a uniform grid.) Minimizing this alone as&#xA;&lt;span class=&quot;math-container&quot;&gt;$$ \begin{align}&#xA;\underset{\Theta}{\min}&amp;amp;\quad f(\Theta) &#xA;\end{align} $$&lt;/span&gt;&#xA;does not bring much since we can already know, that the minimum amount of travel we can do is 0. What makes this interesting are additional &lt;em&gt;constraints&lt;/em&gt;, in other words, the function is &lt;em&gt;subject to&lt;/em&gt; (s.t.) constraints. Setting the first point &lt;span class=&quot;math-container&quot;&gt;$\theta_1$&lt;/span&gt; to be the starting point, forcing the last one &lt;span class=&quot;math-container&quot;&gt;$\theta_n$&lt;/span&gt; to be the last one and forcing the all neighbouring &lt;span class=&quot;math-container&quot;&gt;$\theta_i$&lt;/span&gt; to be adjacent. Loosly describing these as contraints gives:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;\begin{align}&#xA;\underset{\Theta}{\min}&amp;amp;\quad f(\Theta)\\&#xA;\text{s.t.}&amp;amp;\quad \theta_1 = \theta_{start}\\&#xA;&amp;amp;\quad \theta_n = \theta_{end}\\&#xA;&amp;amp;\quad \text{adjacent}(\theta_i, \theta_{i+1}) = 1\end{align}&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;This way, by minimizing the function, the minimum length of the path which connects the starting point with the target point can be found. However, finding the length is in many cases not what we are looking for. Finding the waypoints themself is in many cases of interest. This is also minimization (or optimization) of the same function, but we are not interested in the output of the function, but in the argument of the function, &lt;span class=&quot;math-container&quot;&gt;$\Theta$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ \begin{align}&#xA;\underset{\Theta}{\text{argmin}} &amp;amp;\quad f(\Theta) \end{align} $$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Distance is just one example of cost. It can also be the fastest route (minimum time), minimum energy, a combination of more factors (e.g time and distance) expressed as a weighted sum.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2020-07-28T06:18:28.773" LastActivityDate="2020-07-28T06:18:28.773" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20995" PostTypeId="2" ParentId="20991" CreationDate="2020-07-28T12:07:35.413" Score="1" Body="&lt;p&gt;Another alternative are robots based on the Raspberry Pi or Arduino microcontrollers. The &lt;a href=&quot;https://pi4j.com/1.2/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Pi4J&lt;/a&gt; library implements convenient API's for accessing Raspberry Pi I/O's, while the &lt;a href=&quot;https://github.com/SINTEF-9012/JArduino&quot; rel=&quot;nofollow noreferrer&quot;&gt;JArduino&lt;/a&gt; distribution enables controlling Arduino boards from Java over a serial or Bluetooth connection. You can search for &amp;quot;arduino robot kit&amp;quot; or &amp;quot;raspberry pi robot kit&amp;quot; to find hobbyist kits based on those platforms.&lt;/p&gt;&#xA;" OwnerUserId="4310" LastActivityDate="2020-07-28T12:07:35.413" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20996" PostTypeId="1" AcceptedAnswerId="20997" CreationDate="2020-07-28T21:24:28.273" Score="0" ViewCount="20" Body="&lt;p&gt;I've read the VFH paper and now reading the VFH+. Odometry does not seem to be necessary, but I'm kind of confused about the grid and how to track how much distance the robot has traveled between samples.&lt;/p&gt;&#xA;&lt;p&gt;Should I read sensor readings and calculate distances to obstacles without taking into account the distance traveled?&lt;/p&gt;&#xA;" OwnerUserId="26856" LastActivityDate="2020-07-29T09:33:11.993" Title="Is odometry necessary for Vector Field Histogram?" Tags="&lt;odometry&gt;&lt;vfh&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20997" PostTypeId="2" ParentId="20996" CreationDate="2020-07-29T09:33:11.993" Score="0" Body="&lt;p&gt;No. VFH is a method to identify the next heading direction, which, from the current information available seem to be the best choice.&lt;/p&gt;&#xA;&lt;p&gt;It is independent of how the current position is determined and how the information about the surroundings of the robot is required. As far as I know, both VFH and VFH+ are independent of distance travelled. The only depend on the current surroundings and target position, so, to answer your question regarding sensor readings: yes, the Histogram for VHF is build up using obstacle distances &lt;em&gt;relative to the current position&lt;/em&gt; of the robot, so there is no need to calculate the distance travelled.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-07-29T09:33:11.993" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="20999" PostTypeId="1" CreationDate="2020-07-29T15:46:45.020" Score="0" ViewCount="35" Body="&lt;p&gt;im going through the odometry motion model proposed by Thurn in Probabilistic Robotics famous book and i have some questions concerning the kind of command that we can use. I will explain more my problematic below :&lt;/p&gt;&#xA;&lt;p&gt;The odometry motion model from Thurn is :&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/cxcKi.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/cxcKi.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;So the motion of the robot depend on the previous state AND the three basic motions described as :&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/iF7uv.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/iF7uv.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This three basic motions are computed from a relative position acquired from sensor readings, but in most books,publications that i read, this sensor readings refer to odometry(encoders) readings. So im wondering if i can use for example the relative positions given by ICP scan matching methods in the odometry motion model described above OR i have to use it directly as motion information in the prediction step of particle filter for example.&lt;/p&gt;&#xA;&lt;p&gt;In &amp;quot;An Improved Technique for Robot Global Localization in Indoor Environments&amp;quot; article, they use ICP results to compute motion of robot but i dont understand if it used in an odometry motion model or it used directly.&lt;/p&gt;&#xA;&lt;p&gt;NB : I tried to use ICP results as command in odometry motion model of AMCL in ROS and it works perfectly but its not really clear for me because when publications mention odometry motion model, they always refer to encoders readings.&lt;/p&gt;&#xA;&lt;p&gt;Thank you&lt;/p&gt;&#xA;" OwnerUserId="26866" LastActivityDate="2020-07-29T15:46:45.020" Title="ICP results as command in odometry motion model" Tags="&lt;mobile-robot&gt;&lt;odometry&gt;&lt;motion&gt;&lt;robot-model&gt;&lt;icp&gt;" AnswerCount="0" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="21001" PostTypeId="2" ParentId="14765" CreationDate="2020-07-29T17:21:09.427" Score="0" Body="&lt;p&gt;The main application of servos is to move to a position, not at a constant speed, but in order to change the speed while maintaining the torque, you can simply slowly change the pwm duty cycle from one value to another (eg 1500 to 2000) and the servo will slowly move. If you would like to control the velocity precisely, then a motor with an encoder output would be better.&lt;/p&gt;&#xA;" OwnerUserId="26867" LastActivityDate="2020-07-29T17:21:09.427" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21002" PostTypeId="2" ParentId="19216" CreationDate="2020-07-29T17:25:36.163" Score="0" Body="&lt;p&gt;If you haven't yet connected your pi to wifi, follow &lt;a href=&quot;https://www.raspberrypi.org/documentation/configuration/wireless/headless.md&quot; rel=&quot;nofollow noreferrer&quot;&gt;this guide&lt;/a&gt; first.&lt;/p&gt;&#xA;&lt;p&gt;If you are on Windows, then you will need to install an ssh client such as PuTTY.&#xA;If you are on MacOS or Linux, simply open a terminal and use the &lt;code&gt;ssh&lt;/code&gt; command. (&lt;code&gt;ssh pi@raspberrypi&lt;/code&gt;).&lt;/p&gt;&#xA;&lt;p&gt;By default, raspberry pis flashed with raspbian have the hostname &lt;code&gt;raspberrypi&lt;/code&gt;, user &lt;code&gt;pi&lt;/code&gt;, and password &lt;code&gt;raspberry&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="26867" LastActivityDate="2020-07-29T17:25:36.163" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21003" PostTypeId="2" ParentId="20982" CreationDate="2020-07-29T17:30:23.253" Score="0" Body="&lt;p&gt;You are correct that for PID your output and input should be in the same unit, generally position or velocity. You will need a way to convert your encoder input to that unit, which should be the same unit as your setpoint.&lt;/p&gt;&#xA;&lt;p&gt;The arduino PID library appears to abstract this for you.&lt;/p&gt;&#xA;" OwnerUserId="26867" LastActivityDate="2020-07-29T17:30:23.253" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21004" PostTypeId="1" CreationDate="2020-07-29T19:15:53.247" Score="0" ViewCount="30" Body="&lt;p&gt;I have an IMU device with an accelerometer sensor and I fix that on top of the linear motion rail.so it can only move to the right or left (in the x-axis) side.&lt;/p&gt;&#xA;&lt;p&gt;How can I determine the direction (right or left) of movement base on the accelerometer's data and relative to the start point? Do I need other sensors' data?&lt;/p&gt;&#xA;" OwnerUserId="26603" LastActivityDate="2020-07-29T19:15:53.247" Title="Find IMU's movement direction in x-axis" Tags="&lt;imu&gt;&lt;accelerometer&gt;" AnswerCount="0" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="21005" PostTypeId="2" ParentId="20154" CreationDate="2020-07-30T13:46:02.700" Score="0" Body="&lt;p&gt;The only major reason for doing this is the outcome of the interaction of water &amp;amp; current!!!&lt;/p&gt;&#xA;&lt;p&gt;Besides, as the depth increases, the pressure increases &amp;amp; the probability of the contact(water &amp;amp; current) as well increases.&lt;/p&gt;&#xA;" OwnerUserId="4448" LastActivityDate="2020-07-30T13:46:02.700" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21006" PostTypeId="2" ParentId="20069" CreationDate="2020-07-30T19:42:19.063" Score="1" Body="&lt;p&gt;Apparently the ROS topics have an ambiguous behavior. I have also tested publishing through the rostopic pub and it showed a parallel behavior. But when the publication came from another node it apeears to wait for the execution of the last callback on a sequential approach.&lt;/p&gt;&#xA;" OwnerUserId="26869" LastActivityDate="2020-07-30T19:42:19.063" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21007" PostTypeId="1" CreationDate="2020-07-30T22:08:11.100" Score="1" ViewCount="53" Body="&lt;p&gt;I am trying to build a quadcopter and think it is essential to have its center of mass in the middle. Therefore, I am planning on putting the battery in the center. However, this will cause me to place my gyroscope/accelerometer sensor not in the center. Will the sensor data be not useful if the sensor is placed away from the center of mass of the quadcopter? Should I put the sensor in the center of the drone and place the battery with a slight offset from center? Also if the sensor data can be used no matter where it is placed, would it require a lot of math to transform the data to something useful for control?&lt;/p&gt;&#xA;" OwnerUserId="26870" LastActivityDate="2020-08-29T23:04:40.493" Title="For a quadcopter do i need to place the gyroscope sensor at the center of mass?" Tags="&lt;quadcopter&gt;&lt;sensors&gt;&lt;stability&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21008" PostTypeId="2" ParentId="21007" CreationDate="2020-07-30T22:28:36.647" Score="1" Body="&lt;p&gt;Most quadcopters position the flight controller/sensors at the center with the battery slightly above or below but still on the center.&lt;/p&gt;&#xA;&lt;p&gt;If you are planning on building a race quad that will not use auto level, then you can place your gyro anywhere as the roll rate will be measured the same (just ensure that you set the orientation parameter properly in its settings).&lt;/p&gt;&#xA;&lt;p&gt;If you are planning on using auto level, then you should put the sensors in the center, as auto level requires accelerometers which &lt;a href=&quot;https://www.basicairdata.eu/knowledge-center/compensation/inertial-measurement-unit-placement/&quot; rel=&quot;nofollow noreferrer&quot;&gt;need to be at the center of mass for the highest accuracy&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="26867" LastActivityDate="2020-07-30T22:28:36.647" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21009" PostTypeId="1" CreationDate="2020-07-31T01:18:29.373" Score="2" ViewCount="222" Body="&lt;p&gt;I am currently working on developing a ROS application for autonomous navigation using AMCl. I am first trying to get &lt;code&gt;move_base&lt;/code&gt; to work before continuing with AMCL. I came across an issue that shows the LaserScan rotating in a similar fashion to the robot when I use &lt;code&gt;teleop_twist_keyboard&lt;/code&gt; to manually rotate the robot. I am using the &lt;code&gt;rplidar_ros&lt;/code&gt; package to run the lidar and the &lt;code&gt;create_autonomy&lt;/code&gt; package for controlling the robot. I have tried searching for an issue similar to mine and could not find one.&lt;/p&gt;&#xA;&lt;p&gt;Hardware: - Robot: iRobot Create 2 - Lidar: RPLidar A1M8 - Computer: Jetson NX with Ubuntu 18 running ROS Melodic&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Launch File:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&#xA;&amp;lt;launch&amp;gt;&#xA;&#xA;  &amp;lt;arg name=&amp;quot;use_robot&amp;quot; default=&amp;quot;true&amp;quot; /&amp;gt;&#xA;  &amp;lt;arg name=&amp;quot;use_gazebo&amp;quot; default=&amp;quot;false&amp;quot; /&amp;gt;&#xA;  &amp;lt;arg name=&amp;quot;gui&amp;quot; default=&amp;quot;false&amp;quot;/&amp;gt;&#xA;&#xA;&#xA;  &amp;lt;include if=&amp;quot;&lt;span class=&quot;math-container&quot;&gt;$(arg use_gazebo)&quot; file=&quot;$&lt;/span&gt;(find gazebo_ros)/launch/empty_world.launch&amp;quot;&amp;gt;&#xA;    &amp;lt;arg name=&amp;quot;world_name&amp;quot; value=&amp;quot;&lt;span class=&quot;math-container&quot;&gt;$(find example_bot_sim)/worlds/maze.world&quot;/&amp;gt;&#xA;&amp;lt;arg name=&quot;paused&quot; value=&quot;false&quot;/&amp;gt;&#xA;&amp;lt;arg name=&quot;use_sim_time&quot; value=&quot;true&quot;/&amp;gt;&#xA;&amp;lt;arg name=&quot;gui&quot; value=&quot;$&lt;/span&gt;(arg gui)&amp;quot;/&amp;gt;&#xA;    &amp;lt;arg name=&amp;quot;headless&amp;quot; value=&amp;quot;false&amp;quot;/&amp;gt;&#xA;    &amp;lt;arg name=&amp;quot;debug&amp;quot; value=&amp;quot;false&amp;quot;/&amp;gt;&#xA;    &amp;lt;arg name=&amp;quot;verbose&amp;quot; value=&amp;quot;true&amp;quot;/&amp;gt;&#xA;  &amp;lt;/include&amp;gt;&#xA;&#xA;  &amp;lt;!-- Spawn Robot &#xA;       This must be the same robot type as the robot application&#xA;  --&amp;gt;&#xA;  &amp;lt;include if=&amp;quot;&lt;span class=&quot;math-container&quot;&gt;$(arg use_gazebo)&quot; file=&quot;$&lt;/span&gt;(find example_bot_sim)/launch/spawn_bot.launch&amp;quot;&amp;gt;&#xA;      &amp;lt;!-- Override arg parameters here e.g,&#xA;          &amp;lt;arg name=&amp;quot;x_pos&amp;quot; default=&amp;quot;10.0&amp;quot;/&amp;gt;&#xA;          &amp;lt;arg name=&amp;quot;y_pos&amp;quot; default=&amp;quot;5.0&amp;quot;/&amp;gt;&#xA;     --&amp;gt;&#xA;  &amp;lt;/include&amp;gt;&#xA;&#xA;&#xA;&#xA;  &amp;lt;include if=&amp;quot;&lt;span class=&quot;math-container&quot;&gt;$(arg use_robot)&quot; file=&quot;$&lt;/span&gt;(find ca_driver)/launch/create_2.launch&amp;quot; /&amp;gt;&#xA;&#xA;&#xA;  &amp;lt;node pkg=&amp;quot;tf&amp;quot; type=&amp;quot;static_transform_publisher&amp;quot; name=&amp;quot;laser_broadcaster&amp;quot; args=&amp;quot;0 0 0 0 0 0  base_link laser 100&amp;quot; /&amp;gt;&#xA;&#xA;&#xA;  &amp;lt;include if=&amp;quot;&lt;span class=&quot;math-container&quot;&gt;$(arg use_robot)&quot; file=&quot;$&lt;/span&gt;(find rplidar_ros)/launch/rplidar.launch&amp;quot; /&amp;gt;&#xA;&#xA;  &amp;lt;include file=&amp;quot;$(find example_bot_sim)/launch/gmapping.launch&amp;quot;/&amp;gt;&#xA;&#xA;  &amp;lt;include file=&amp;quot;$(find example_bot_sim)/launch/move_base.launch&amp;quot;/&amp;gt;&#xA;&#xA;&#xA;  &amp;lt;node pkg=&amp;quot;rviz&amp;quot; type=&amp;quot;rviz&amp;quot; name=&amp;quot;rviz&amp;quot;/&amp;gt;&#xA;&#xA;&#xA;&amp;lt;/launch&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;Initial robot pose:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://imgur.com/azVQusU&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.imgur.com/azVQusU.jpg&quot; title=&quot;source: imgur.com&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Robot pose after moving:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://imgur.com/tS2LI15&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.imgur.com/tS2LI15.jpg&quot; title=&quot;source: imgur.com&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;rosrun tf view_frames&lt;/code&gt; &lt;strong&gt;output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://imgur.com/grFWm3S&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.imgur.com/grFWm3S.jpg&quot; title=&quot;source: imgur.com&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="26871" LastActivityDate="2020-07-31T01:18:29.373" Title="ROS Laser Scan rotates with the robot in RVIZ" Tags="&lt;ros&gt;&lt;irobot-create&gt;&lt;lidar&gt;&lt;rviz&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21010" PostTypeId="1" CreationDate="2020-07-31T02:03:01.247" Score="0" ViewCount="30" Body="&lt;p&gt;I am currently learning about robotic grasping and came across a matrix &lt;span class=&quot;math-container&quot;&gt;$H_i \in \mathbb{R}  ^{l_i \times 6}$&lt;/span&gt; which selects &lt;span class=&quot;math-container&quot;&gt;$l_i$&lt;/span&gt; components of the relative contact twists and sets them to zero. My issue is that the rotational component of &lt;span class=&quot;math-container&quot;&gt;$H_i$&lt;/span&gt; is said to be &amp;quot;vacuous&amp;quot; for the hard finger and point without friction models. Could someone please explain what the vacuous means in this context? Is it just a zero matrix?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ezDht.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ezDht.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="14878" LastActivityDate="2020-07-31T02:03:01.247" Title="What is a &quot;vacuous matrix&quot;?" Tags="&lt;robotic-arm&gt;&lt;dynamics&gt;&lt;robot-model&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21011" PostTypeId="1" CreationDate="2020-07-31T10:29:38.390" Score="1" ViewCount="24" Body="&lt;p&gt;I am working on a pose estimation problem solved by Levenberg-Marquardt with &lt;a href=&quot;https://github.com/RainerKuemmerle/g2o&quot; rel=&quot;nofollow noreferrer&quot;&gt;g2o&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I want to build 3D rigid constraint between two pose, so I choose &lt;strong&gt;Edge_V_V_GICP&lt;/strong&gt; and test the &lt;a href=&quot;https://github.com/RainerKuemmerle/g2o/blob/master/g2o/examples/icp/gicp_demo.cpp&quot; rel=&quot;nofollow noreferrer&quot;&gt;g2o/examples/icp/gicp_demo.cpp&lt;/a&gt; .&lt;/p&gt;&#xA;&lt;p&gt;I changed the Vertex class of  &lt;strong&gt;Edge_V_V_GICP&lt;/strong&gt;  from VertexSE3 to &lt;strong&gt;VertexSE3Expmap&lt;/strong&gt;, meanwhile I rewrite some code to make original  &lt;strong&gt;Edge_V_V_GICP&lt;/strong&gt;  compatible with VertexSE3Expmap. Run gicp_demo.cpp, the Optimization failed early ( it should iterate 10 times )...&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;amax:~/Project/g2o/bin$ ./gicp_demo &#xA;0 0 0 | 0 0 0 1&#xA;0 0 1 | 0 0 0 1&#xA;[VertexSE3Expmap] GICPEdge&#xA;Initial Second vertex =   0   0 0.2&#xA;Initial chi2 = 7.885232&#xA;iteration= 0     chi2= 7.885232  time= 0.00560661    cumTime= 0.00560661     edges= 1000     schur= 0    lambda= 135142887383192720.000000   levenbergIter= 10&#xA;Iteration = 10&#xA;&#xA;Second vertex should be near 0,0,1&#xA;0 0 0&#xA;  0   0 0.2&#xA;Final chi2 = 7.885232&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Because using original vertex Class: VertexSE3 lead to successful optimization, I guess something wrong with VertexSE3Expmap...&lt;/p&gt;&#xA;&lt;p&gt;Here are involved codes which I changed to make original  &lt;strong&gt;Edge_V_V_GICP&lt;/strong&gt;  compatible with VertexSE3Expmap:&#xA;&lt;a href=&quot;https://github.com/LongruiDong/For_debug/blob/master/g2o/examples/icp/gicp_demo.cpp&quot; rel=&quot;nofollow noreferrer&quot;&gt;gicp_demo.cpp&lt;/a&gt;, &lt;a href=&quot;https://github.com/LongruiDong/For_debug/blob/master/g2o/types/icp/types_icp.h&quot; rel=&quot;nofollow noreferrer&quot;&gt;types_icp.h&lt;/a&gt;, &lt;a href=&quot;https://github.com/LongruiDong/For_debug/blob/master/g2o/types/icp/types_icp.cpp&quot; rel=&quot;nofollow noreferrer&quot;&gt;types_icp.cpp&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I have been confused by this question for days,&#xA;Anybody know how to fix this? How to correctly use [VertexSE3Expmap] as two connecting Vertex in Edge_V_V_GICP ?&lt;/p&gt;&#xA;&lt;p&gt;I have also made an issue in &lt;a href=&quot;https://github.com/RainerKuemmerle/g2o/issues/433&quot; rel=&quot;nofollow noreferrer&quot;&gt;g2o github&lt;/a&gt;...&lt;/p&gt;&#xA;&lt;p&gt;Thanks in advance!!&lt;/p&gt;&#xA;" OwnerUserId="26778" LastActivityDate="2020-07-31T10:29:38.390" Title="How to correctly use [VertexSE3Expmap] as two connecting Vertex in Edge_V_V_GICP?" Tags="&lt;slam&gt;&lt;c++&gt;" AnswerCount="0" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21013" PostTypeId="2" ParentId="20894" CreationDate="2020-07-31T15:13:15.900" Score="0" Body="&lt;p&gt;When it comes to mechanisms to avoid obstacles, you have several algorithms. Each one of them has good and bad things. In general, they are grouped in two main categories:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;You have no previous knowledge about the environment.&lt;/li&gt;&#xA;&lt;li&gt;You have some knowledge about the environment.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;I only know about the first type. &lt;strong&gt;Vector Field Histogram&lt;/strong&gt; and its revisions &lt;strong&gt;VFH+&lt;/strong&gt; and &lt;strong&gt;VFH&lt;/strong&gt;* seem to be good solutions. Simpler solutions can be &lt;strong&gt;Virtual Force Field&lt;/strong&gt; and &lt;strong&gt;Bug Algorithms&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Most of them relay on ultrasound sensors to sweep the surrounding and calculate what the best local path is.&lt;/p&gt;&#xA;&lt;p&gt;Papers:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;THE VECTOR FIELD HISTOGRAM - FAST OBSTACLE AVOIDANCE FOR MOBILE&#xA;ROBOTS by J. Borenstein and  Y. Koren&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;After this first paper, you can read its revisions VFH+ and VFH*.&lt;/p&gt;&#xA;&lt;p&gt;When it comes to the second category, I find the best ones require image processing and high computational requirements, however others add ultrasound beacons in the room. The robot would use the pulses send by the beacons to triangulate its position in the room.&lt;/p&gt;&#xA;&lt;p&gt;Papers:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;POSITIONING SYSTEM FOR INDOOR MOBILE ROBOT USING ACTIVE ULTRASONIC&#xA;BEACONS by Hiroaki SEKI,  Yasuo TANAKA, Masaharu TAKANO and Ken&#xA;SASAKI&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="26856" LastEditorUserId="26856" LastEditDate="2020-07-31T15:28:46.117" LastActivityDate="2020-07-31T15:28:46.117" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21014" PostTypeId="1" CreationDate="2020-07-31T19:21:00.637" Score="1" ViewCount="102" Body="&lt;p&gt;I am trying to compute the joint velocities a 6-DOF manipulator(a typical industrial robot).&lt;/p&gt;&#xA;&lt;p&gt;I have an initial position [xi, yi, zi, T1i, T2i, T3i] and goal position [xf, yf, zf, T1f, T2f, T3f] in the Cartesian task space and a given cartesian velocity in mm/s. T1, T2 and T3 are ZYZ Euler orientation angles.&lt;/p&gt;&#xA;&lt;p&gt;My approach to computing the joint velocities is to use the inverse Jacobian. I multiply the 6x1 velocities vector, [Vx, Vy, Vz, w1, w2, w3], with the 6x6 inverse Jacobian matrix. Vx, Vy, Vz are in mm/s and w1, w2, w3 in rad/s. The result is the 6x1 joint velocities vector.&lt;/p&gt;&#xA;&lt;p&gt;Vx, Vy, Vz are easy to compute. At every scan, I compute:&lt;/p&gt;&#xA;&lt;p&gt;Px=(Goal_positionX - Current_positionX)&lt;/p&gt;&#xA;&lt;p&gt;Py=(Goal_positionY - Current_positionY)&lt;/p&gt;&#xA;&lt;p&gt;Pz=(Goal_positionZ - Current_positionY)&lt;/p&gt;&#xA;&lt;p&gt;Then I compute the magnitude:&lt;/p&gt;&#xA;&lt;p&gt;MAG_P=SQRT(Px^2 + Py^2 + Pz^2)&lt;/p&gt;&#xA;&lt;p&gt;The velocity is set by the user in mm/s, e.g. Vo=5mm/s. It is interpolated by a &lt;em&gt;&lt;strong&gt;t&lt;/strong&gt;&lt;/em&gt; factor [0--&amp;gt;1](a function of time), which I compute using the first derivative of a 5th order polynomial, to provide smooth acceleration, deceleration and zero final velocity.&lt;/p&gt;&#xA;&lt;p&gt;Then:&lt;/p&gt;&#xA;&lt;p&gt;Vx= (Vo*Px/MAG_P)*t&lt;/p&gt;&#xA;&lt;p&gt;Vy= (Vo*Py/MAG_P)*t&lt;/p&gt;&#xA;&lt;p&gt;Vz= (Vo*Pz/MAG_P)*t&lt;/p&gt;&#xA;&lt;p&gt;I use the velocities above to multiply with the 6x6 inverse jacobian the result are the joint velocities, with no orientation change of the robot end-effector. Everything works fine. The robot reaches its goal position as expected following an expected linear path.&lt;/p&gt;&#xA;&lt;p&gt;Now I going to the main topic of my question. I want to interpolate the orientation velocities as well [w1, w2, w3].&lt;/p&gt;&#xA;&lt;p&gt;I have done a lot of research and reading and still could not figure out. I learned that I can't just subtract the orientation angles e.g. [T1f - T1i] and divide by total time to get velocities.&lt;/p&gt;&#xA;&lt;p&gt;I found that a common approach is to use SLERP interpolation, with quaternions and a &lt;em&gt;&lt;strong&gt;t&lt;/strong&gt;&lt;/em&gt; [0--&amp;gt;1] interpolation factor as input parameters. I convert my [T1i, T2i, T3i] and [T1f, T2f, T3f] to quaternions, qI and qF, and use the 5th order &lt;em&gt;&lt;strong&gt;t&lt;/strong&gt;&lt;/em&gt; interpolation factor computed above. The result is a quaternion representing the orientation at a given time, not velocities.&lt;/p&gt;&#xA;&lt;p&gt;Every scan my system computes new &lt;em&gt;&lt;strong&gt;t&lt;/strong&gt;&lt;/em&gt; value factor(that progresses over time) which I use with SLERP to give me the next computed orientation:&lt;/p&gt;&#xA;&lt;p&gt;qN=SLERP(qI,qF,t), which is the next interpolated orientation.&lt;/p&gt;&#xA;&lt;p&gt;I compute the current end-effector orientation in quaternion: qC, and subtract qN - qC to give me the displacement to use as orientation velocities.&lt;/p&gt;&#xA;&lt;p&gt;qV = qN - qC (doing proper quaternion subtraction = (qc)-1*qN)&lt;/p&gt;&#xA;&lt;p&gt;Then I convert qV to ZYZ angles in radians:&lt;/p&gt;&#xA;&lt;p&gt;[w1,w2,w3] = TO_ZYZ_FROM_QUATERNION(qV).&lt;/p&gt;&#xA;&lt;p&gt;And use the above orientation velocities together with the cartesian velocities to multiple with the (J)-1.&lt;/p&gt;&#xA;&lt;p&gt;Unfortunately, this approach does not work. The robot does not interpolate correctly to the final goal position.&lt;/p&gt;&#xA;&lt;p&gt;I have read a lot of literature and posts approaching this same topic:&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/20759/controlling-the-pose-of-a-manipulator-using-inverse-kinematics/20760#20760?newreg=b5f7de8531994b508f4a2696d9259250&quot;&gt;Controlling the pose of a manipulator using inverse kinematics&lt;/a&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/6617/jacobian-based-trajectory-following&quot;&gt;Jacobian-based trajectory following&lt;/a&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/14785/inverse-kinematic-orientation-problem&quot;&gt;Inverse kinematic orientation problem&lt;/a&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/20763/inverse-kinematics-with-orientations&quot;&gt;Inverse Kinematics with Orientations&lt;/a&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;I would appreciate it if someone could point me in the right direction. I would like to stick with this approach using the inverse Jacobian and not use IK.&lt;/p&gt;&#xA;&lt;p&gt;Note: My system is a PLC(industrial programmable controller)and there are no built-in complex math libraries. So approaches using simpler math functions would be better. All of the main math functions had to be implemented by me, e.g matrix dot product, matrix inverse, transpose, quaternion conversion, SLERP algorithm, ZYZ conversion, Jacobian inverse, etc. I have tested my functions comparing the results with online tools and I'm confident my implementations are working correctly.&lt;/p&gt;&#xA;&lt;p&gt;Below I illustrate my problem:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2RfaZ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2RfaZ.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="26616" LastActivityDate="2021-01-02T21:05:15.473" Title="Compute orientation velocities 6-DOF robot" Tags="&lt;kinematics&gt;&lt;industrial-robot&gt;&lt;orientation&gt;&lt;trajectory&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21016" PostTypeId="1" CreationDate="2020-08-01T14:56:45.740" Score="0" ViewCount="42" Body="&lt;p&gt;I have a skid steer robot where I have four individual DC motors with an H bridge so I can control speed and direction. There are also four quadrature encoders with 6000 ticks per revolution.&#xA;The motors are 12v and I am controlling them with a 10bit PWM (0 to 1023). First test I did was to raise all wheels and test the minimum value where the wheels start moving, which is around 500.&lt;/p&gt;&#xA;&lt;p&gt;I am able to measure the current speed of the wheels correctly by using a counter where the quadrature encoder set it to count up or down. Therefore, by reading the current count every 50ms (20Hz), I can measure the current speed:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;       encoders_curr.FR = COUNTER_mReadReg(ENC0_BASEADDR, COUNTER_S00_AXI_SLV_REG1_OFFSET);&#xA;       encoders_curr.FL = COUNTER_mReadReg(ENC1_BASEADDR, COUNTER_S00_AXI_SLV_REG1_OFFSET);&#xA;       encoders_curr.RR = COUNTER_mReadReg(ENC2_BASEADDR, COUNTER_S00_AXI_SLV_REG1_OFFSET);&#xA;       encoders_curr.RL = COUNTER_mReadReg(ENC3_BASEADDR, COUNTER_S00_AXI_SLV_REG1_OFFSET);&#xA;&#xA;       encoders_diff.FR = encoders_curr.FR - encoders_prev.FR;&#xA;       encoders_diff.FL = encoders_curr.FL - encoders_prev.FL;&#xA;       encoders_diff.RL = encoders_curr.RL - encoders_prev.RL;&#xA;       encoders_diff.RR = encoders_curr.RR - encoders_prev.RR;&#xA;&#xA;       encoders_prev = encoders_curr;&#xA;&#xA;       speed_measured.FR = (2*M_PI*WHEEL_RADIUS*encoders_diff.FR) / (0.05*TICKS);&#xA;       speed_measured.FL = (2*M_PI*WHEEL_RADIUS*encoders_diff.FL) / (0.05*TICKS);&#xA;       speed_measured.RR = (2*M_PI*WHEEL_RADIUS*encoders_diff.RR) / (0.05*TICKS);&#xA;       speed_measured.RL = (2*M_PI*WHEEL_RADIUS*encoders_diff.RL) / (0.05*TICKS);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Which I convert to X, Y and Z with:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;       // Inverse Kinematics: http://robotsforroboticists.com/drive-kinematics/&#xA;       kinematics_measured.linear.x = (speed_measured.FR+speed_measured.FL+speed_measured.RR+speed_measured.RL)*(WHEEL_RADIUS/4);&#xA;       kinematics_measured.linear.y = (-speed_measured.FR+speed_measured.FL+speed_measured.RR-speed_measured.RL)*(WHEEL_RADIUS/4);&#xA;       kinematics_measured.angular.z = (-speed_measured.FR+speed_measured.FL-speed_measured.RR+speed_measured.RL)*(WHEEL_RADIUS/(4*(WHEEL_SEPARATION_WIDTH+WHEEL_SEPARATION_LENGTH)));&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Now for the control part, to set the individual velocities of each of the four wheels, I am using these equations, as my input is linear x, linear Y and angular Z speeds (rad/seg):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;       // Forward kinematics: http://robotsforroboticists.com/drive-kinematics/&#xA;       speed_desired.FL = (1/WHEEL_RADIUS)*(kinematics_desired.linear.x-kinematics_desired.linear.y-kinematics_desired.angular.z*(WHEEL_SEPARATION_LENGTH+WHEEL_SEPARATION_WIDTH));&#xA;       speed_desired.FR = (1/WHEEL_RADIUS)*(kinematics_desired.linear.x+kinematics_desired.linear.y+kinematics_desired.angular.z*(WHEEL_SEPARATION_LENGTH+WHEEL_SEPARATION_WIDTH));&#xA;       speed_desired.RL = (1/WHEEL_RADIUS)*(kinematics_desired.linear.x+kinematics_desired.linear.y-kinematics_desired.angular.z*(WHEEL_SEPARATION_LENGTH+WHEEL_SEPARATION_WIDTH));&#xA;       speed_desired.RR = (1/WHEEL_RADIUS)*(kinematics_desired.linear.x-kinematics_desired.linear.y+kinematics_desired.angular.z*(WHEEL_SEPARATION_LENGTH+WHEEL_SEPARATION_WIDTH));&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The PID function that I have implemented is the following:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;float integral=0.0, prev_error=0.0;&#xA;#define dt  0.05    // in seconds&#xA;#define Kp  1&#xA;#define Ki  0&#xA;#define Kd  0&#xA;float pid(float desired, float measured)&#xA;{&#xA;    if(measured&amp;lt;0)&#xA;        measured = (-1)*measured;&#xA;&#xA;    // Calculate error&#xA;    float error = desired-measured;&#xA;&#xA;    // Proportional term&#xA;    float Pout = Kp*error;&#xA;&#xA;    // Integral term&#xA;    integral += error*dt;&#xA;    float Iout = Ki*integral;&#xA;&#xA;    // Derivate term&#xA;    float derivate = (error-prev_error)/dt;&#xA;    float Dout = Kd*derivate;&#xA;&#xA;    return (Pout+Iout+Dout);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;So, after measuring the current speed, I can call it to obtain the speed I need to set the &lt;code&gt;duty&lt;/code&gt; of each motor.&lt;/p&gt;&#xA;&lt;p&gt;My questions:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The sign of the velocity indicates the direction of rotation (clockwise=forward, counterclockwise=backwards). Do I need to pass to the pid function the desired velocity as a signed or unsigned value?&lt;/li&gt;&#xA;&lt;li&gt;What should I do with velocity values that would mean a lower pwm so the motor will not spin?&lt;/li&gt;&#xA;&lt;li&gt;To convert from linear velocity that the pid will dictate to duty cycle, I am calculating the equation that passes over two points. For this, I measured the speeds at the &lt;strong&gt;minimum and maximum&lt;/strong&gt; duties where the wheels rotation (500 and 1023) giving (0.81 and 1.03). I use these numbers to get the equation: &lt;code&gt;p = 511 + (uint16_t)(((1023-511)/(1.02-0.8))*(v-0.8));&lt;/code&gt;. Should I consider that the speed can be negative to compute a &amp;quot;negative&amp;quot; duty which will later represent only the direction to set for the motors? If so, it means that I have to consider that the two points for the equation are (-1023, -1.03) and (1023, 1.03)?&lt;/li&gt;&#xA;&lt;li&gt;As I have four motors, they all show different velocities. So, to simplify the process, even thought there will be 4 PIDs, I got for the lowest duty cycle the maximum velocity value of all motors and for the highest duty cycle the lowest velocity of all motors. Would that be correct?&lt;/li&gt;&#xA;&lt;li&gt;Do I need to include the speed limits for the PID?&lt;/li&gt;&#xA;&lt;li&gt;Considering the signs, won't be a problem if the measured speed is higher than the desired, the pid would compute a negative value and the fact that the rotation switches directions might cause an issue, or not?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Thank you for the help.&lt;/p&gt;&#xA;" OwnerUserId="26879" LastEditorUserId="26879" LastEditDate="2020-08-01T15:41:57.933" LastActivityDate="2020-12-29T14:50:14.880" Title="PID on DC motor turning on both directions" Tags="&lt;control&gt;&lt;pid&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21018" PostTypeId="2" ParentId="19216" CreationDate="2020-08-01T16:37:41.327" Score="0" Body="&lt;p&gt;You can operate your RPI via your computer’s  Remote Desktop Connection app. You will need some access to your RPIs HDMI cable for a short time however, or access to it via SSH while setting up. And will obviously need to have network connection or WiFi connection.&lt;/p&gt;&#xA;&lt;h3&gt;Step 1 - Get IP address of RPI&lt;/h3&gt;&#xA;&lt;p&gt;Open Terminal and execute the following command:&#xA;&lt;code&gt;hostname -I&lt;/code&gt;&#xA;(Note that this is with a capital I)&lt;/p&gt;&#xA;&lt;h3&gt;Step 2 – Install xRDP&lt;/h3&gt;&#xA;&lt;p&gt;Enter these commands into the terminal:&#xA;&lt;code&gt;sudo apt-get install xrdp&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;(If it says the package does not exist, then enter this command): &lt;code&gt;sudo apt-get update&lt;/code&gt;&lt;/p&gt;&#xA;&lt;h3&gt;Step 3 - connect via Remote Desktop&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Start your operating systems Remote Desktop Client (if you are using Windows, open RDP Client)&lt;/li&gt;&#xA;&lt;li&gt;Enter IP address of your RPI.&lt;/li&gt;&#xA;&lt;li&gt;Click OK&lt;/li&gt;&#xA;&lt;li&gt;You will be taken to the XRDP login screen, unless you have already entered it into your Remote Desktop client before connecting (if that is the case, skip step 5).&lt;/li&gt;&#xA;&lt;li&gt;Enter the RPIs username and password and click “OK”&#xA;You can now access your RPI via Remote Desktop!&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="26710" LastActivityDate="2020-08-01T16:37:41.327" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21019" PostTypeId="1" CreationDate="2020-08-02T03:55:19.287" Score="0" ViewCount="19" Body="&lt;p&gt;I have been doing a project on robot path planning. A question has arisen in my mind during the project&lt;/p&gt;&#xA;&lt;p&gt;What are the state of the art sampling-based path planning schemes for the dynamic environment?&lt;/p&gt;&#xA;&lt;p&gt;Any suggestions would be appreciatable.&lt;/p&gt;&#xA;&lt;p&gt;Thank you.&lt;/p&gt;&#xA;" OwnerUserId="20610" LastActivityDate="2020-08-02T03:55:19.287" Title="sampling-based path planning approach" Tags="&lt;mobile-robot&gt;&lt;motion-planning&gt;&lt;path-planning&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21020" PostTypeId="1" CreationDate="2020-08-02T07:51:27.077" Score="1" ViewCount="91" Body="&lt;p&gt;I am a student of mechanical engineering, currently working on my 3rd-year project. I am designing a sheet-metal enclosure for a belt drive. We have a common laser cutter that could be used for my engineering Design &amp;amp; Fabrication project (3rd Year Project), to cut the said sheet metal. The problem is that I don't know how to write the G/N code program for the laser machine or any CNC per se.&lt;/p&gt;&#xA;&lt;p&gt;My question is, how can I use the data in an AutoCAD design or any DWG file and produce a CNC program for 2D profiling?&lt;/p&gt;&#xA;" OwnerUserId="26881" LastEditorUserId="37" LastEditDate="2020-08-05T16:37:47.447" LastActivityDate="2020-08-05T16:37:47.447" Title="How to convert 2D AutoCad drawing into CODE for CNC machine (laser cutter)?" Tags="&lt;design&gt;&lt;programming-languages&gt;&lt;cnc&gt;" AnswerCount="2" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="21021" PostTypeId="1" CreationDate="2020-08-02T11:36:49.863" Score="0" ViewCount="59" Body="&lt;p&gt;When designing a robot (manipulator, house robot, drone, autonomous driving system), what options does one have regarding the general software architecture? Is there even such a thing, as a very high level view on different software architectures?&lt;/p&gt;&#xA;&lt;p&gt;I have very little clue about software architectures, so hopefully the answers can give an entry point into the topic.&lt;/p&gt;&#xA;" OwnerUserId="26883" LastActivityDate="2020-08-23T16:50:00.230" Title="Software Architectures for Robots" Tags="&lt;software&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21022" PostTypeId="1" CreationDate="2020-08-02T16:26:40.377" Score="0" ViewCount="28" Body="&lt;p&gt;I want to perform rectangular area survey. The sensor can either work with very narrow FOV or with wide FOV but requiring very high overlap.&lt;/p&gt;&#xA;&lt;p&gt;My plane's turn diameter is much greater than required spacing for boustrophedon path. I would like what is optimal strategy for surveying with such constrain.&lt;/p&gt;&#xA;&lt;p&gt;I would like to minimize time spent flying, while getting full coverage with required overlap. Bellow is ASCII image of necessary (scanning) part of the path.&#xA;I want to connect these lines in such a way as to visit every one exactly once while being unable to go from  line x to n neighboring lines on each side.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;0 1 2 3 4 5 6 7 8 9 &#xA;&#xA;| | | | | | | | | |&#xA;| | | | | | | | | |&#xA;| | | | | | | | | |&#xA;| | | | | | | | | |&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;For example if n=3 i can go like 0 → 5 → 1 → 6 → 2 → 7 → ...&lt;br /&gt;&#xA;but not 0 → 1 or 2 or 3&#xA;This above is a very specific case that in my opinion illustrates the situation well. I am however looking for a more general solution that works for most cases in witch surveyed space is wider than this (4*turn_radius+distance_between_tracks)&lt;/p&gt;&#xA;&lt;p&gt;I was unable to find any papers on this specific subject, all papers I found assumed that UAV would be able tu turn sharply enough to enter next line without issues.&lt;/p&gt;&#xA;" OwnerUserId="26884" LastEditorUserId="26884" LastEditDate="2020-08-02T17:08:33.867" LastActivityDate="2020-08-02T17:08:33.867" Title="Survey path planning for UAV with high turning radius" Tags="&lt;navigation&gt;&lt;algorithm&gt;&lt;path-planning&gt;&lt;uav&gt;" AnswerCount="0" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="21023" PostTypeId="1" CreationDate="2020-08-02T21:19:25.243" Score="0" ViewCount="79" Body="&lt;p&gt;I am working on this short assignment where I have to find the right PD values for a simulated quadcopter.  I have to reach 0.9 meters under 1 second with an overshoot of less than 5%.  This is my code:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;function [ u ] = pd_controller(~, s, s_des, params)&#xA;%PD_CONTROLLER  PD controller for the height&#xA;%&#xA;%   s: 2x1 vector containing the current state [z; v_z]&#xA;%   s_des: 2x1 vector containing desired state [z; v_z]&#xA;%   params: robot parameters&#xA;&#xA;% u = 0;&#xA;&#xA;error = s_des - s;&#xA;z_des = 0.9;&#xA;&#xA;Kp = 0.5;&#xA;Kv = 1.0;&#xA;&#xA;u = params.mass*(z_des + Kp*error(1) + Kv*error(2) + params.gravity);&#xA;&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;So far this is my output:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/GpKQZ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/GpKQZ.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I've tried many different value combinations and so far this is the closest that I could get.&lt;/p&gt;&#xA;" OwnerUserId="26288" LastActivityDate="2021-03-25T10:26:41.593" Title="Finding the right PD values for a quadcopter simulator" Tags="&lt;pid&gt;&lt;matlab&gt;&lt;drone&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21024" PostTypeId="2" ParentId="21023" CreationDate="2020-08-02T22:01:26.683" Score="0" Body="&lt;p&gt;You are controlling a second order system. Set both kp and kv to 4.&lt;/p&gt;&#xA;&lt;p&gt;If the system does not reach your desired altitude then there are additional problems with the code.&lt;/p&gt;&#xA;" OwnerUserId="8842" LastActivityDate="2020-08-02T22:01:26.683" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="21025" PostTypeId="1" CreationDate="2020-08-03T06:19:39.777" Score="2" ViewCount="34" Body="&lt;p&gt;I have read some about loop closure and I am somewhat confused.&lt;/p&gt;&#xA;&lt;p&gt;Suppose we implement something like EKF slam using LIDAR and suppose loop closure is aided by computer vision based features so that if it re-visits a location, it can detect where it is.&lt;/p&gt;&#xA;&lt;p&gt;What's not clear to me is how the map prior to loop closure is actually updated once proper loop closure is detected.&lt;/p&gt;&#xA;&lt;p&gt;For example, this image shows the covariance matrix prior to vision based loop closure:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/cyjQY.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/cyjQY.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;And after closure:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/84ELZ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/84ELZ.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;What is normally the actual process to modify the map once closure is detected so everything lines up? What kinds of fundamental assumptions are made to make it work? For example, in this case it appears you need to be confident that straight-looking walls are actually straight.&lt;/p&gt;&#xA;&lt;p&gt;The images were pulled from this old SLAM paper:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.robots.ox.ac.uk/%7Epnewman/papers/NewmanHoICRA05.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.robots.ox.ac.uk/~pnewman/papers/NewmanHoICRA05.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I think the most interesting thing is actually back-propagating the probability of states given the closure constraint which it completely ignores.&lt;/p&gt;&#xA;" OwnerUserId="21514" LastEditorUserId="21514" LastEditDate="2020-08-03T06:29:42.287" LastActivityDate="2020-08-03T06:29:42.287" Title="How does loop closure backpropagate the robots states into prior times?" Tags="&lt;slam&gt;&lt;localization&gt;" AnswerCount="0" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21026" PostTypeId="2" ParentId="21020" CreationDate="2020-08-03T07:21:43.450" Score="1" Body="&lt;p&gt;Your question can be generalized as how to &amp;quot;convert: a CAD model to G-Code (or NC Code).&#xA;Generally CAD is used to design parts and CAM (Computer Aided Manufacturing) software is used to design the manufacturing process for the part designed in the CAD tool.&lt;/p&gt;&#xA;&lt;p&gt;In some cases this is highly complex (e.g. for 5 axis milling) and in some cases this can be simple (e.g. your case of following a contour). If you have a 2D image there are a number of free tools you can use to export contours these as G-Code, like:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.cnctoolsworld.com/Converter&quot; rel=&quot;nofollow noreferrer&quot;&gt;All to G-Code converter&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://sourceforge.net/projects/dxf2gcode/&quot; rel=&quot;nofollow noreferrer&quot;&gt;DXFG2GCode&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;These are similar in nature to a CAM software, but they lack certain functions and so, they are not ready for series production, but are OK for prototyping and experimenting.&lt;/p&gt;&#xA;&lt;p&gt;There is a collection of free tools listed &lt;a href=&quot;https://listoffreeware.com/free-dxf-to-gcode-converter-software-windows/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;, but I am not sure about the quality.&lt;/p&gt;&#xA;&lt;p&gt;After you have generated the G-Code you can visualize it in &lt;a href=&quot;https://ncviewer.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;NCViewer&lt;/a&gt;. This also might help to improve your G-Code skills.&lt;/p&gt;&#xA;&lt;p&gt;Please note that I am not including plasma or laser cutting generally in the above description, as these might require some other advanced features for series production, like &lt;a href=&quot;https://en.wikipedia.org/wiki/Nesting_(process)&quot; rel=&quot;nofollow noreferrer&quot;&gt;nesting&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-08-03T07:21:43.450" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21027" PostTypeId="1" CreationDate="2020-08-03T08:55:20.883" Score="1" ViewCount="33" Body="&lt;p&gt;I'm struggling to implement Unscented Kalman Filter for tracking objects using radar. My state vector contains [x y z vx vy vz] and I can measure [rho phi theta velocity]. So everything looks trivial at the begging, because state estimation is simply&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;  x = rho * sin(theta) * cos(phi);&#xA;  y = rho * sin(theta) * sin(phi);&#xA;  z = rho * cos(theta);&#xA;  vx = v * sin(theta) * cos(phi);&#xA;  vy = v * sin(theta) * sin(phi);&#xA;  vz = v * cos(theta);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Measurement model is also well-known:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;rho = sqrt(p_x*p_x + p_y*p_y + p_z*p_z);         &#xA;phi = atan(p_y/p_x); &#xA;theta = atan(sqrt(p_x*p_x + p_y*p_y)/p_z); &#xA;velocity = sqrt(v_x*v_x + v_y*v_y + v_z*v_z);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;My predictions are based on the constant velocity model and looks like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;//predicted state values&#xA;px_p = p_x + v_x*delta_t;&#xA;py_p = p_y + v_y*delta_t;&#xA;pz_p = p_z + v_z*delta_t;&#xA;vx_p = v_x + err_x*delta_t;&#xA;vy_p = v_y + err_y*delta_t;&#xA;vz_p = v_z + err_z*delta_t; &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;And... it doesn't work. The only one case when it is working is constant velocity along x-axis with. Could anyone explain me what am I doing wrong? What should be Q-matrix in this case? Appreciate any tips and hints.&lt;/p&gt;&#xA;" OwnerUserId="26886" LastEditorUserId="9176" LastEditDate="2020-08-03T10:04:14.117" LastActivityDate="2020-08-03T10:04:14.117" Title="UKF for radar implementation" Tags="&lt;ros&gt;&lt;kalman-filter&gt;" AnswerCount="0" CommentCount="6" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21029" PostTypeId="1" CreationDate="2020-08-05T06:19:29.223" Score="0" ViewCount="56" Body="&lt;p&gt;I want to design a 3 DOF pick and place robotic arm. I've accomplished stress analysis. now i'm going to do frequency analysis. software give me natural frequencies in different configurations. but i don't know what to do about these frequencies in order to redesign robot. so i have some question in my mind.&lt;br /&gt;&#xA;What are vibration sources in robotic arm and what is appropriate natural frequency for robot?&lt;/p&gt;&#xA;" OwnerUserId="26539" LastActivityDate="2020-08-05T06:19:29.223" Title="Natural frequency of robot arm" Tags="&lt;robotic-arm&gt;&lt;design&gt;" AnswerCount="0" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="21031" PostTypeId="1" AcceptedAnswerId="21032" CreationDate="2020-08-05T08:53:23.373" Score="0" ViewCount="297" Body="&lt;p&gt;What are point-to-point controlled robots actually good for? Only pick and place tasks?&#xA;Since continuous path controlled manipulators can do anything a p2p robot can do, plus tasks that require a &amp;quot;steady hand&amp;quot; (painting, welding, etc.), what is the point of p2p controlled robots? Are there any other applications you can trust it with?&lt;/p&gt;&#xA;" OwnerUserId="26904" LastActivityDate="2020-08-05T11:13:53.477" Title="What can a Point-to-Point Robot do?" Tags="&lt;control&gt;&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21032" PostTypeId="2" ParentId="21031" CreationDate="2020-08-05T10:53:56.877" Score="2" Body="&lt;p&gt;Any task, where the task itself is not dependent on a specific trajectory or motion profile uses (and should use) point to point motions. Furthermore, tasks where only a portion of the task is reliant on a specific path should use point to point motions to connect these. Furthermore, all major industrial robot vendors do not exclusively offer point to point controllers, but these point to point motion commands are part of the programming language, alongside linear motions, circular motions or spline motions.&lt;/p&gt;&#xA;&lt;p&gt;Tasks where p2p is used are pick and place, spot welding where only the last few millimetres of the path should have a defined profile (final positioning the electrodes  before clamping them), machine tending tasks, even for spray painting, the motions which are not actually needed for painting are most likely ptp.&lt;/p&gt;&#xA;&lt;p&gt;A straight line, a LIN path is the shortest in Cartesian space between two points. However, the robot, from a motion amplitude and energy consumption perspective does not move in Cartesian space, but in joint space. We can simplify a bit, and call the p2p motion the equivalent of the straight line in joint space. It is not quite that, but almost. So if you want to travel minimum distance between two points your best option is p2p motion.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2020-08-05T11:13:53.477" LastActivityDate="2020-08-05T11:13:53.477" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21033" PostTypeId="2" ParentId="21020" CreationDate="2020-08-05T13:53:09.557" Score="0" Body="&lt;p&gt;You could also look at Fusion 360. Fusion 360 is a CAD application that has a number of post processors to generate G code for a variety of machining, 3D printing, and laser cutting devices. Both AutoCAD and Fusion 360 are owned by Autodesk. Fusion 360 is subscription based, but I believe there is a free version for students and also for hobbyists.&lt;/p&gt;&#xA;" OwnerUserId="26046" LastActivityDate="2020-08-05T13:53:09.557" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21035" PostTypeId="2" ParentId="21014" CreationDate="2020-08-05T20:08:45.397" Score="1" Body="&lt;p&gt;I was able to figure out after digging further through several other posts and google searches.&lt;/p&gt;&#xA;&lt;p&gt;This post pointed me in the right direction:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://physics.stackexchange.com/questions/293037/how-to-compute-the-angular-velocity-from-the-angles-of-a-rotation-matrix&quot;&gt;https://physics.stackexchange.com/questions/293037/how-to-compute-the-angular-velocity-from-the-angles-of-a-rotation-matrix&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Then Wikipedia:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Angular_displacement#Infinitesimal_rotation_matrices&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Angular_displacement#Infinitesimal_rotation_matrices&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Then this document:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://arxiv.org/ftp/arxiv/papers/1311/1311.6010.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://arxiv.org/ftp/arxiv/papers/1311/1311.6010.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Basically the solution is to use an infinitesimal rotation matrix. My mistake was computing from the quaternion displacement to ZYZ angles.The correct procedure should be converting from the displacement quaternion to a rotation matrix, which would be the infinitesimal rotation matrix:&lt;/p&gt;&#xA;&lt;p&gt;V_ROT_M= TO_ROTATION_FROM_QUATERNION(qV)&lt;/p&gt;&#xA;&lt;p&gt;Then the result is:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/rMM2Z.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rMM2Z.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Then dividing each component by the scan-time(compute time between current rotation and next rotation) results in the orientation velocities:&lt;/p&gt;&#xA;&lt;p&gt;w1=V_ROT_M[3,2]/deltaT&lt;/p&gt;&#xA;&lt;p&gt;w2=V_ROT_M[1,3]/deltaT&lt;/p&gt;&#xA;&lt;p&gt;w3=V_ROT_M[2,1]/deltaT&lt;/p&gt;&#xA;&lt;p&gt;After testing with several goal poses the results seems to be satisfatory, the robot interpolates correctly following the expected linear path and end-effector orientation change.&lt;/p&gt;&#xA;" OwnerUserId="26616" LastActivityDate="2020-08-05T20:08:45.397" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21036" PostTypeId="1" AcceptedAnswerId="21067" CreationDate="2020-08-06T06:43:54.597" Score="0" ViewCount="102" Body="&lt;p&gt;I am wondering, how do you differentiate between linear acceleration and rotational velocity and acceleration for IMU? A rotational velocity or acceleration will still appear to the accelerometer as a time varying acceleration.&lt;/p&gt;&#xA;" OwnerUserId="21514" LastActivityDate="2020-08-19T03:44:29.497" Title="Detection of linear acceleration vs rotational velocity/acceleration" Tags="&lt;quadcopter&gt;&lt;sensors&gt;&lt;imu&gt;&lt;flight-controller&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21037" PostTypeId="2" ParentId="21036" CreationDate="2020-08-06T06:53:42.760" Score="0" Body="&lt;p&gt;When you buy an IMU from a manufacturer, it provides the guidelines on how to read this sensor (IMU). For clarification, IMUs only provide linear accelerations, not the rotational ones. Rotational velocities are obtained from the gyroscope embedded inside an IMU. These velocities are then integrated to obtain the orientation. Some IMUs come with a magnetometer that are able to provide absolute orientation.&lt;/p&gt;&#xA;" OwnerUserId="21747" LastActivityDate="2020-08-06T06:53:42.760" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="21039" PostTypeId="1" CreationDate="2020-08-06T15:31:31.837" Score="0" ViewCount="100" Body="&lt;p&gt;I am facing the following issue, and some hint or orientation would be great. I am working on a project in which I was given a ROS bag, and I have to implement a localization node using SLAM. To do so, I have developed the prediction and correction part of the algorithm, and I am now working on adding new landmarks to the map (there are 2 kind of landmarks). My current problem is that, for one of the landmark types, I don't have the noise covariance matrix for the correction step (sometimes referred as Q, sometimes referred as R). The observations for this kind of landmarks is of type &lt;code&gt;geometry_msgs/Pose&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I want to know if from the ROS bag data, I can estimate the covariance matrix for the observations of that kind of landmark. I've tried the following things:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;importing the data to Matlab, and calculate the covariance matrix using the &lt;code&gt;cov&lt;/code&gt; function. The result is a 6x6 covariance matrix, with values that go from -0.1 to 8.XX. With this, the result in the robot's position is very noisy.&lt;/li&gt;&#xA;&lt;li&gt;importing the data to Matlab and calculate the correlation matrix using the &lt;code&gt;corr&lt;/code&gt; function. The result using this values is a bit better than the previous attempt but still noisy.&lt;/li&gt;&#xA;&lt;li&gt;I tried an Identity matrix filled with some values in the order of &lt;code&gt;1e-3&lt;/code&gt; in the variance fields. I did this assuming that the position of the landmark has no correlation with its orientation, as well as the &lt;code&gt;x&lt;/code&gt; position has no correlation with its &lt;code&gt;y&lt;/code&gt; position (something that I now think it's not true). The result in this case is something a bit less noisy than the first point, but more than the second point.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So, here is my question: is there a way I can estimate the measurement's noise covariance matrix from the ROS bag?&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Edit:&lt;/p&gt;&#xA;&lt;p&gt;To clarify a bit what I need:&#xA;The EKF is composed by a prediction step and a correction step. The prediction step is:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\hat\mu = g(\mu_{t})$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\hat\Sigma = G_t \hat\Sigma G_t^T + Q_t$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;The correction step is&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$K_t = \hat\Sigma H_t^T ( H_t \hat\Sigma H_t^T + R_t )^{-1}$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\mu_{t+1} = \hat\mu + K_t ( z_t - h ( \hat\mu ) )$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\Sigma_{t+1} = ( I - K_t H_t ) \hat\Sigma$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;I am trying to estimate &lt;span class=&quot;math-container&quot;&gt;$R_t$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Hope you can help me!&#xA;Thanks in advance!&lt;/p&gt;&#xA;" OwnerUserId="1992" LastEditorUserId="1992" LastEditDate="2020-08-08T11:22:06.540" LastActivityDate="2021-05-05T14:01:02.583" Title="Estimate noise covariance matrix of measurements using a ros-bag" Tags="&lt;ros&gt;&lt;slam&gt;&lt;localization&gt;&lt;ekf&gt;&lt;estimation&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21041" PostTypeId="1" CreationDate="2020-08-07T18:36:45.827" Score="0" ViewCount="6" Body="&lt;p&gt;I don't know where this question should be asked so excuse me if this isn't the place. I have a 3S1P 2.2A 50C battery for a drone that I build. I have a charger that looks like this:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ObodP.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ObodP.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.alibaba.com/product-detail/RC-B3-AC-Lipo-Battery-Charger_60812527463.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.alibaba.com/product-detail/RC-B3-AC-Lipo-Battery-Charger_60812527463.html&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;At first, when the battery was new, I pulled a solid 15-20 minutes of aggressive flight time but now, only 6 months later, it is getting only 3 minutes! I have charged it for like 5 hours and it reached 12.48 volts which is good but I think the charger doesn't put much current and when it hits 12V it just stops charging. This is just a guess. Can someone please help me with this. I don't have much of a budget so is there is a safe way for me to get more flight time, I am more than happy to hear it!&lt;/p&gt;&#xA;&lt;p&gt;Specs:&#xA;My drone is an F450 frame with 4 A2212 100kv motors and weighs a total of 4lbs. My props ar 1045 props and I have 3S 30A ESCs!&lt;/p&gt;&#xA;" OwnerUserId="26747" LastActivityDate="2020-08-07T18:36:45.827" Title="LiPo battery power maximization" Tags="&lt;quadcopter&gt;&lt;battery&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21043" PostTypeId="2" ParentId="21039" CreationDate="2020-08-08T12:20:30.113" Score="0" Body="&lt;p&gt;You can estimate the noise in the kf by adding a covariance state to your state vector. I don't know how practice this is but it can be done.&lt;/p&gt;&#xA;" OwnerUserId="8842" LastActivityDate="2020-08-08T12:20:30.113" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21044" PostTypeId="1" CreationDate="2020-08-08T18:48:30.117" Score="0" ViewCount="50" Body="&lt;p&gt;What are the advantages and disadvantages for each?&lt;/p&gt;&#xA;&lt;p&gt;I can build a small form factor PC with a GTX 1050 which will easily out perform a jetson for the same price.&lt;/p&gt;&#xA;&lt;p&gt;When and where are each more appropriate to use? What are the advantages of each?&lt;/p&gt;&#xA;" OwnerUserId="21514" LastActivityDate="2021-05-07T14:01:50.170" Title="Jetson TX2 vs small form factor PC for autonomous robots" Tags="&lt;mobile-robot&gt;&lt;autonomous-car&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="21045" PostTypeId="2" ParentId="19074" CreationDate="2020-08-08T22:57:09.550" Score="0" Body="&lt;p&gt;You need to low-pass filter the input data.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2020-08-08T22:57:09.550" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21046" PostTypeId="1" CreationDate="2020-08-10T07:13:24.957" Score="0" ViewCount="41" Body="&lt;p&gt;I am trying to track an object indoors using an IMU (only accel and gyroscope) and a visual marker. This is similar to IMU+GPS fusion, where GPS is effectively replaced by the position that my vision based system gives based on the marker.&#xA;I am writing an error EFK to fuse the two readings. I am including the accel and gyro biases as part of my state estimation as well, to reduce the drift caused by IMU in between measurements. For the same, I have a couple of queries.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;What are the jacobians for the state uncertainty propogation in the prediction step. Here are my notations:&lt;/p&gt;&#xA;&lt;p&gt;P = F * P * F.t() + G * L * G.t()&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;where&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;P is my state covariance matrix (15x15) - 3 for position, 3 for&#xA;velocity, 4 for orientation (quaternion) and 6 for accel and gyro&#xA;biases&lt;/li&gt;&#xA;&lt;li&gt;F is the jacobian of prediction model. It should be of size 15x15. For the first 9 rows, it is straightforward, however, I am not sure about the last 6 rows (that correspond to the biases)&lt;/li&gt;&#xA;&lt;li&gt;L is the variance and bias variances of the accel and the gyroscope (12x12) (a simple diagonal matrix)&lt;/li&gt;&#xA;&lt;li&gt;Finally G is the jacobian associated with the noise and biases. I am not sure what this should be as well. It should be a (15x12) matrix. The first 3 rows are zeros, but dont know how to fill the rest of the matrix. Is this also a simple diagonal matrix (from row 4) with values &lt;code&gt;1&lt;/code&gt; in the diagonal? I am confused primarily about this matrix.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Any help on deriving these jacobian matrices would be very helpful!&lt;/p&gt;&#xA;&lt;p&gt;Finally, will my method work? I.e. I follow a pipeline similar to IMU+GPS fusion, however I replace the GPS component with my visual marker position estimate.&lt;/p&gt;&#xA;" OwnerUserId="26640" LastActivityDate="2020-08-10T07:13:24.957" Title="IMU Vision Fusion using EKF" Tags="&lt;kalman-filter&gt;&lt;imu&gt;&lt;ekf&gt;&lt;pose&gt;" AnswerCount="0" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="21047" PostTypeId="2" ParentId="21021" CreationDate="2020-08-10T11:38:25.143" Score="1" Body="&lt;p&gt;ROS the Robot Operating System provides a framework and functions for robots - ROS is modular and operates different functions in separate nodes - each their own process. Each node can publish or subscribe to topics(messages) managed through a central core process - nodes can be distributed across machines. ROS has known data structures for messages or you can create your own. The way it all fits together gives you an architecture that you can expand as necessary. I would recommend this to anyone learning robotics, just the amount of available open source nodes/code is worth the time learning ROS. (just a fanboy)&lt;/p&gt;&#xA;" OwnerUserId="18374" LastActivityDate="2020-08-10T11:38:25.143" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21048" PostTypeId="2" ParentId="21044" CreationDate="2020-08-10T11:51:56.797" Score="0" Body="&lt;p&gt;A Jetson TX2 is about 15 Watts at full load and can run from 9v-15v.&lt;/p&gt;&#xA;&lt;p&gt;The PC with GTX 1050 will be above 300 Watts and likely require both 5v and 12v supplies with little wiggle room in those numbers.&lt;/p&gt;&#xA;&lt;p&gt;A mobile robot would need to be quite big to carry the batteries for the PC+GPU This would also be larger in physical size.&lt;/p&gt;&#xA;&lt;p&gt;The Jetson TX2 is smaller, lighter and with the lower power requirements can have a smaller battery.&lt;/p&gt;&#xA;" OwnerUserId="18374" LastActivityDate="2020-08-10T11:51:56.797" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21050" PostTypeId="1" CreationDate="2020-08-10T19:57:29.220" Score="1" ViewCount="27" Body="&lt;p&gt;I want to calculate altitude using a barometer which is mounted in the proximity of a number of components which get quite hot and raise the localised temperature. The barometric pressure &lt;a href=&quot;https://en.m.wikipedia.org/wiki/Barometric_formula&quot; rel=&quot;nofollow noreferrer&quot;&gt;equation&lt;/a&gt; is dependent on temperature. Most typical mem’s barometers come with an internal temperature sensor - I assume to allow calculation of altitude. However, would the altitude calculation using the barometric pressure equation be incorrect if this calculated using the internal temperature sensor influenced by the localised heating from other devices? Is a temperature reading of the external temperature needed? If the localised temperature effects do influence the altitude calculation then it would necessitate that I remove the components which heat up from the proximity of the barometer or take an external temperature reading at distance unaffected by the localised heating?&lt;/p&gt;&#xA;" OwnerUserId="21594" LastActivityDate="2020-08-10T19:57:29.220" Title="Barometer altitude calculation" Tags="&lt;quadcopter&gt;&lt;sensors&gt;&lt;imu&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="21051" PostTypeId="1" CreationDate="2020-08-11T06:33:04.173" Score="0" ViewCount="52" Body="&lt;p&gt;I just started studying localization for robotics. I started with Markov localization.&#xA;There was a cool lecture on Udacity. I also came across another localization called hidden Markov localization, but couldn't find many blogs on it. Can anyone explain to me briefly what's the difference between both?&lt;/p&gt;&#xA;" OwnerUserId="26932" LastEditorUserId="26991" LastEditDate="2020-08-31T13:01:11.257" LastActivityDate="2021-05-28T14:00:35.070" Title="What is the difference between Markov localization and hidden Markov localization?" Tags="&lt;localization&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21052" PostTypeId="1" CreationDate="2020-08-11T08:39:26.330" Score="2" ViewCount="264" Body="&lt;p&gt;I have recently started learning robotics. Being at uni, I had access to Linux PCs where I could easily run ROS and Gazebo. However, due to the current pandemic and closure of universities, I now have to rely on my MacBook.&lt;/p&gt;&#xA;&lt;p&gt;Following are the specs of my machine:&lt;br /&gt;&#xA;Core i7 2.7GHz Quad-Core&lt;br /&gt;&#xA;16GB RAM&lt;br /&gt;&#xA;Intel Iris Graphics 655 1536 MB&lt;/p&gt;&#xA;&lt;p&gt;Is it possible to run ROS and Gazebo simulations on a machine with these specs?&lt;br /&gt;&#xA;Although it is mentioned on the gazebo website that a dedicated Nvidia graphics card is required, but I have found threads on this forum where ROS and Gazebo run fine on intel graphics. For example:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://robotics.stackexchange.com/a/16824/26934&quot;&gt;https://robotics.stackexchange.com/a/16824/26934&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I also tried running a gazebo simulation using Ubuntu with VirtualBox but got a &lt;strong&gt;Segmentation Core Dumped&lt;/strong&gt; error. I did some research and found a thread where it was mentioned that it may be caused by using a non-Nvidia graphics card:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://answers.ros.org/question/281376/gazebo-is-crashingsegmentation-fault/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://answers.ros.org/question/281376/gazebo-is-crashingsegmentation-fault/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Need some guidance on how to run gazebo simulations on MacBook.&lt;br /&gt;&#xA;Thanks.&lt;/p&gt;&#xA;" OwnerUserId="26934" LastActivityDate="2021-05-08T12:07:35.690" Title="Running ROS, Gazebo and RViz on Macbook" Tags="&lt;ros&gt;&lt;gazebo&gt;&lt;rviz&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21053" PostTypeId="2" ParentId="21052" CreationDate="2020-08-11T11:31:03.430" Score="0" Body="&lt;p&gt;I have run Gazebo in machines that don't have Nvidia cards for years now, never had any problems with it.&lt;/p&gt;&#xA;&lt;p&gt;The problem is more likely related to the virtual machine environment, see &lt;a href=&quot;https://answers.gazebosim.org//question/13214/virtual-machine-not-launching-gazebo/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;https://answers.gazebosim.org//question/25/run-gazebo-in-virtualbox/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; for relevant threads.&lt;/p&gt;&#xA;&lt;p&gt;In any case, you should consider installing Ubuntu in dual-boot mode. It will help avoid this sort of compatibility issue, and you will make better use of your hardware resources.&lt;/p&gt;&#xA;" OwnerUserId="4310" LastActivityDate="2020-08-11T11:31:03.430" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21054" PostTypeId="2" ParentId="21051" CreationDate="2020-08-12T05:38:10.860" Score="0" Body="&lt;p&gt;From some basic googling.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://dtransposed.github.io/blog/Robot-Localization.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://dtransposed.github.io/blog/Robot-Localization.html&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.cs.ubc.ca/%7Ecarenini/TEACHING/CPSC322-10/SLIDES/lecture32-2010.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.cs.ubc.ca/~carenini/TEACHING/CPSC322-10/SLIDES/lecture32-2010.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://web.mit.edu/16.412j/www/html/lectures/L4_Introduction%20to%20SLAM%20II.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://web.mit.edu/16.412j/www/html/lectures/L4_Introduction%20to%20SLAM%20II.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.columbia.edu/%7Emh2078/MachineLearningORFE/HMMs_MasterSlides.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.columbia.edu/~mh2078/MachineLearningORFE/HMMs_MasterSlides.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Also the wikipedia article on Hidden Markov models is pretty clear.&lt;/p&gt;&#xA;&lt;p&gt;A hidden markov model is just a case where the state/variables you are interested are not directly observable. This is the more common situation as generally you don't have a nice sensor that directly measures the variable you want. Instead you have to infer the hidden state through measuring other visible variables.&lt;/p&gt;&#xA;&lt;p&gt;For a localization example, you are interested in the robots global position and heading. These are your hidden variables ,because in many cases you don't have a sensor that can directly measure this. Instead you might have something like range measurements to 2D landmarks, and a motion model which predicts how your robot moves. Now neither of them directly measure the hidden state(position,heading), but you can use a series of them to infer the hidden states.&lt;/p&gt;&#xA;" OwnerUserId="15265" LastActivityDate="2020-08-12T05:38:10.860" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21055" PostTypeId="1" CreationDate="2020-08-12T08:39:53.087" Score="1" ViewCount="167" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/iHVus.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/iHVus.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I want to compute the DOF of this system if it composed of (n) such links grasping this common object using Grubler's formula obtaining the solution as a function of (n), considering this to be a spatial system then we have: &lt;strong&gt;m = 6&lt;/strong&gt;, The number of rigid bodies or links including the ground &lt;strong&gt;N = 4&lt;/strong&gt;, The number of joints &lt;strong&gt;J = 3&lt;/strong&gt;, The added DOFs from those joints &lt;strong&gt;f = 7&lt;/strong&gt;, so if we used the formula:&#xA;&lt;strong&gt;DOF = m(N - 1 - J) + f&lt;/strong&gt; we get: 7, and considering the (n) links then the total degrees of freedom of such a system is &lt;strong&gt;7n&lt;/strong&gt;. I want to make sure that I didn't make any mistake and I am getting it right. Thanks in advance.&lt;/p&gt;&#xA;" OwnerUserId="20909" LastActivityDate="2020-08-12T11:54:06.250" Title="Multi-Link Robot Degrees of Freedom" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;manipulator&gt;&lt;industrial-robot&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21056" PostTypeId="2" ParentId="21055" CreationDate="2020-08-12T09:19:10.453" Score="1" Body="&lt;p&gt;The formula is&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$d = 6\,n - \sum_{i= 1}^{J}\left( 6 - f_i\right)$$&lt;/span&gt;&#xA;or&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$d = 6N - 1 - \sum_{i=1}^j\ (6 - f_i) =  6(N-1 - J) + \sum_{i=1}^J\ f_i $$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;In the book Modern Robotics, there is an additional (-1) in the formula, as shown in the second version of the formula, as they recommend counting the ground as linkage. I do not count ground as linkage, I do not use the -1. For me it is just more logical this way, since ground is not a linkage and then I do not need to subtract 1 form the number of linkages. Furthermore the constant 6 in this version of the formula is denoted by m in the book Modern Robotics.&lt;/p&gt;&#xA;&lt;p&gt;let's denote the number of chains grasping the object with &lt;span class=&quot;math-container&quot;&gt;$c$&lt;/span&gt; in order to avoid confusion with the already used &lt;span class=&quot;math-container&quot;&gt;$n$&lt;/span&gt; notation.&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$N$&lt;/span&gt; is the number of links including the ground link,&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$n$&lt;/span&gt; is the number of links not including the ground link,&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$J$&lt;/span&gt; is the number of joints and&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$fi$&lt;/span&gt; is the number of degrees of freedom of joint &lt;span class=&quot;math-container&quot;&gt;$i$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;so fort of all we have 1 linkage, the object being held commonly (assuming the grasp is rigid) counts as a linkage.&#xA;Per kinematic chain we have 3 linkages, we have to subtract 1 since the last one is grasping, therefore is part of the first linkage. In other words adding another kinematik chain increases the number of linkages  by 2 and not by three, since the last linkage will be part of the rigid body, there is no motion between them, therefore it does not count as a new linkage.&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$n = 1 + 2 \cdot c$&lt;/span&gt; for the case in the picture, for &lt;span class=&quot;math-container&quot;&gt;$c = 4$&lt;/span&gt; linkages &lt;span class=&quot;math-container&quot;&gt;$n = 9$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;There are 3 joints per kinematic chain. one of the joints with 3 dof, one of the joints with 1 dof and the last joint ... is tricky, it seems to have 3 dof, but in only counts as 2, since the two spherical joints produce a local rotation motion around the axis between their middle points. This a degree of freedom, which does not effect the motion of the whole chain, therefor it needs to be subtracted (if the number of kinematic chains is greater then 1, &lt;span class=&quot;math-container&quot;&gt;$c &amp;gt; 1$&lt;/span&gt;). So:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$\sum_{i= 1}^{J}\left( 6 - f_i\right) = c \cdot ((6 - 3) + (6 - 1) + (6 - 2)) = c \cdot (3 + 5 + 4) = c \cdot 12 = 4 \cdot 12 = 48$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Therfore, for the mechanism in the picture:&#xA;&lt;span class=&quot;math-container&quot;&gt;$d = 6 \cdot 9 - 48 = 54 - 48 = 6$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;For the generalized version, for &lt;span class=&quot;math-container&quot;&gt;$c &amp;gt; 1$&lt;/span&gt; number of kinematic chains added:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$d = 6 \cdot (1 + 2 \cdot c) - (c \cdot 12) = 6 + 12 \cdot c - 12 \cdot c$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$d = 6$&lt;/span&gt;, independent of the number of chains used.&lt;/p&gt;&#xA;&lt;p&gt;It makes scene, since one chain has 6 degrees of freedom, if you couple the same chain parallel, is should not loose of gain any degrees of freedom.&lt;/p&gt;&#xA;&lt;p&gt;If we would add 6 linkages, then we would obtain a structure very similar to the Stewart platform. It is commonly known that the Stewart platform has 6 DOF.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2020-08-12T11:54:06.250" LastActivityDate="2020-08-12T11:54:06.250" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="21058" PostTypeId="1" CreationDate="2020-08-12T17:26:09.990" Score="2" ViewCount="51" Body="&lt;p&gt;I'm trying to model a robot which is composed of a non-holonomic and a holonomic system overall is non-holonomic. Basically it's a robot arm + mobile platform. So far I have found a similar work like this &lt;a href=&quot;https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=293207&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=293207&lt;/a&gt; before the Simulation section, they say they ignore the dynamics of the manipulator over the mobile platform, so they are treated independently. I cannot ignore it. So far I got this:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ &#xA;Vel_{mobilePlataform} = \begin{bmatrix} \dot x_1 \\ \dot y_1 \\ \dot z_1\end{bmatrix} = \begin{bmatrix} f_x(yaw, pitch, roll) \\ f_y(yaw, pitch, roll) \\ f_z (yaw)\end{bmatrix}  &#xA;$$&lt;/span&gt;&#xA;thanks to this: A tratise on Analytical Dyanmics - L.A.Pars example, the rolling penny.&lt;/p&gt;&#xA;&lt;p&gt;So the &lt;strong&gt;fx&lt;/strong&gt; and &lt;strong&gt;fy&lt;/strong&gt; are non integrables, so they are constraints, so far so good. But attaching a single joint on the penny's radios direction. I will get this velocities on the joints&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;Vel_{joint} = \begin{bmatrix} \dot x_2 \\ \dot y_2 \\ \dot z_2 \end{bmatrix} = \begin{bmatrix}g_x \\ g_y \\ g_z \end{bmatrix} + \begin{bmatrix} \dot x_1 \\ \dot y_1 \\ \dot z_1 \end {bmatrix}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;since &lt;strong&gt;gz&lt;/strong&gt; is not integrable, z2 also becomes a constraint. So, the whole system is non-holonomic, right? I'm stuck here.&#xA;Then, the equation of motion should be for every Q like this?&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;Q_{x1}, Q_{y1}, Q_{yaw}, Q_{pitch}, Q_{roll}, Q_{x2}, Q_{y2}, Q_{z2}, Q_{joint-angle}&#xA;$$&lt;/span&gt;&#xA;So, then for computing the lagrange multipliers will be like this&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;Q_{x1}\delta x_1 + Q_{y1}\delta y_1+ Q_{yaw}\delta(yaw)+ Q_{pitch}\delta(pitch)+ Q_{roll}\delta(roll)+ Q_{x2}\delta x_2+ Q_{y2}\delta y_2+ Q_{z2} \delta z_2+ Q_{joint-angle}\delta(joint-angle) = \lambda_1 (\delta x_1 - f_x) + \lambda_2(\delta y_2 - f_y)+\lambda_3(\delta x_2-g_x-f_x) +\lambda_4(\delta y_2 -g_y-f_y) + \lambda_5(\delta z_2-g_z-f_z)&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;by grouping terms I can have the values of all &lt;code&gt;lambdas&lt;/code&gt;, for example:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;Q_{x1} = \lambda_1 \\&#xA;... \\&#xA;Q_{x2} = \lambda_3 &#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Am I doing ok? Does this mean the trajectory of the linked masses can be independent of each other?&lt;/p&gt;&#xA;" OwnerUserId="26945" LastEditorUserId="26991" LastEditDate="2020-08-31T09:15:09.543" LastActivityDate="2020-08-31T09:15:09.543" Title="How to properly model a non-holonomic system?" Tags="&lt;mobile-robot&gt;&lt;dynamics&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21059" PostTypeId="1" AcceptedAnswerId="21061" CreationDate="2020-08-13T18:25:20.417" Score="1" ViewCount="159" Body="&lt;p&gt;I have been attempting to estimate a bunch of 3d coordinates viewed via a multi-view setup with known poses, I have the code running, but the output of ceres seems baffling.&lt;/p&gt;&#xA;&lt;p&gt;There are 7 image frames/poses, and only the re-projection error with respect to the last pose(7th frame) is close to 0. 2d Reprojections of the ceres-estimated 3dpoint onto rest of the frames(1-6) do not match with the actual pixel measurements.&#xA;If I reduce the number of frames, it gives out a different 3d point whose 2d projections again match only with the last frame.&lt;/p&gt;&#xA;&lt;p&gt;I'm adding code snippets here, can someone just look at the code and give any insights as to why this could be happening?&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&#xA;class ReprojectionError {&#xA; public:&#xA;  ReprojectionError(&#xA;        const Eigen::Matrix&amp;lt;double, 3, 4&amp;gt;&amp;amp; projection_matrix,&#xA;        const Eigen::Vector2d&amp;amp; feature)&#xA;        : projection_matrix_(projection_matrix), feature_(feature) {}&#xA;&#xA;  template &amp;lt;typename T&amp;gt;&#xA;  bool operator()(const T* input_point, T* reprojection_error) const {&#xA;        Eigen::Map&amp;lt;const Eigen::Matrix&amp;lt;T, 4, 1&amp;gt; &amp;gt; point(input_point);&#xA;&#xA;        // Multiply the point with the projection matrix, then perform homogeneous&#xA;        // normalization to obtain the 2D pixel location of the reprojection.&#xA;&#xA;        const Eigen::Matrix&amp;lt;T, 2, 1&amp;gt; reprojected_pixel =  (projection_matrix_ * point).hnormalized();&#xA;        // Reprojection error is the distance from the reprojection to the observed&#xA;        // feature location.&#xA;        cout &amp;lt;&amp;lt; point &amp;lt;&amp;lt; endl;&#xA;        reprojection_error[0] = feature_[0] - reprojected_pixel[0]; &#xA;        reprojection_error[1] = feature_[1] - reprojected_pixel[1];&#xA;&#xA;        return true;&#xA;  }&#xA;  static ceres::CostFunction * Create(const Eigen::Matrix&amp;lt;double, 3, 4&amp;gt;&amp;amp; projection_matrix_, &#xA;        const Eigen::Vector2d&amp;amp; feature_) {&#xA;            return (new ceres::AutoDiffCostFunction&amp;lt;ReprojectionError, 2,4&amp;gt;&#xA;                (new ReprojectionError(projection_matrix_,feature_)));&#xA;    }&#xA;&#xA; private:&#xA;    const Eigen::Matrix&amp;lt;double, 3, 4&amp;gt;&amp;amp; projection_matrix_;&#xA;    const Eigen::Vector2d&amp;amp; feature_;&#xA;};&#xA;&#xA;Eigen::Vector3d Triangulate(std::vector&amp;lt;std::pair&#xA;    &amp;lt;Eigen::Matrix&amp;lt;double, 3, 4&amp;gt;,Eigen::Vector2d&amp;gt;&amp;gt; datas) {&#xA;        Eigen::Vector4d x;&#xA;        x &amp;lt;&amp;lt; 0,0,0,1;&#xA;        ceres::Problem problem;&#xA;        ceres::Solver::Options options;&#xA;        ceres::LossFunction* loss= nullptr;&#xA;        ceres::Solver::Summary summary;&#xA;&#xA;        for(auto data:datas) {&#xA;            problem.AddResidualBlock(ReprojectionError::Create(data.first,data.second),loss,&amp;amp;x[0]);&#xA;        }&#xA;        ceres::Solve(options,&amp;amp;problem, &amp;amp;summary);&#xA;        std::cout &amp;lt;&amp;lt; summary.FullReport() &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&#xA;        return x.hnormalized();&#xA;}&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Here's the summary:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Solver Summary (v 2.0.0-eigen-(3.3.4)-lapack-suitesparse-(5.1.2)-cxsparse-(3.1.9)-eigensparse-no_openmp)&#xA;&#xA;                                     Original                  Reduced&#xA;Parameter blocks                            1                        1&#xA;Parameters                                  4                        4&#xA;Residual blocks                             7                        7&#xA;Residuals                                  14                       14&#xA;&#xA;Minimizer                        TRUST_REGION&#xA;&#xA;Sparse linear algebra library    SUITE_SPARSE&#xA;Trust region strategy     LEVENBERG_MARQUARDT&#xA;&#xA;                                        Given                     Used&#xA;Linear solver          SPARSE_NORMAL_CHOLESKY   SPARSE_NORMAL_CHOLESKY&#xA;Threads                                     1                        1&#xA;Linear solver ordering              AUTOMATIC                        1&#xA;&#xA;Cost:&#xA;Initial                          4.220501e+04&#xA;Final                            2.554256e-13&#xA;Change                           4.220501e+04&#xA;&#xA;Minimizer iterations                        5&#xA;Successful steps                            5&#xA;Unsuccessful steps                          0&#xA;&#xA;Time (in seconds):&#xA;Preprocessor                         0.000060&#xA;&#xA;  Residual only evaluation           0.000774 (5)&#xA;  Jacobian &amp;amp; residual evaluation     0.002446 (5)&#xA;  Linear solver                      0.000053 (5)&#xA;Minimizer                            0.003332&#xA;&#xA;Postprocessor                        0.000002&#xA;Total                                0.003394&#xA;&#xA;Termination:                      CONVERGENCE (Parameter tolerance reached. Relative step_norm: 1.091788e-09 &amp;lt;= 1.000000e-08.)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="26948" LastEditorUserId="26991" LastEditDate="2020-08-31T13:01:36.520" LastActivityDate="2020-08-31T13:01:36.520" Title="Triangulation: Ceres solver minimizes only the last residual block" Tags="&lt;slam&gt;&lt;computer-vision&gt;&lt;opencv&gt;&lt;robotics-library&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21060" PostTypeId="2" ParentId="21059" CreationDate="2020-08-13T19:35:38.637" Score="0" Body="&lt;p&gt;Tricky to look at for me, but I'm not a C++ person in general. In looking at it, though, is your &lt;code&gt;ReprojectionError::Create&lt;/code&gt; defined correctly?&lt;/p&gt;&#xA;&lt;p&gt;You have:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;static ceres::CostFunction * Create(const Eigen::Matrix&amp;lt;double, 3, 4&amp;gt;&amp;amp; projection_matrix_, &#xA;    const Eigen::Vector2d&amp;amp; feature_) {&#xA;        return (new ceres::AutoDiffCostFunction&amp;lt;ReprojectionError, 2,4&amp;gt;&#xA;            (new ReprojectionError(projection_matrix_,feature_)));&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;But your call to &lt;code&gt;ceres::AutoDiffCostFunction&lt;/code&gt; uses &lt;code&gt;&amp;lt;ReprojectionError, 2,4&amp;gt;&lt;/code&gt;. In the &lt;a href=&quot;http://ceres-solver.org/nnls_modeling.html#_CPPv2N5ceres20AutoDiffCostFunctionE&quot; rel=&quot;nofollow noreferrer&quot;&gt;documentation I found online&lt;/a&gt;, I see the following:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Then given this class definition, the auto differentiated cost function for it can be constructed as follows.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;CostFunction* cost_function&#xA;= new AutoDiffCostFunction&amp;lt;MyScalarCostFunctor, 1, 2, 2&amp;gt;(&#xA;    new MyScalarCostFunctor(1.0));              ^  ^  ^&#xA;                                                |  |  |&#xA;                    Dimension of residual ------+  |  |&#xA;                    Dimension of x ----------------+  |&#xA;                    Dimension of y -------------------+&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;You have &lt;code&gt;&amp;lt;ReprojectionError, 2, 4&amp;gt;&lt;/code&gt;, which would make it look like the dimension of residual is 2, which may explain your problem. Not positive this is the answer, because I don't normally do anything with C++ and have never seen this library before, but I would think that, even if it were a 2x1 vector, you'd still need &lt;code&gt;&amp;lt;ReprojectionError, 2, 2, 1&amp;gt;&lt;/code&gt;, right?&lt;/p&gt;&#xA;&lt;p&gt;There's a note at the bottom of that section that states the following:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;WARNING 1&lt;/strong&gt; A common beginner’s error when first using &lt;code&gt;AutoDiffCostFunction&lt;/code&gt; is to get the sizing wrong. In particular, there is a tendency to set the template parameters to (dimension of residual, number of parameters) instead of passing a dimension parameter for every parameter block. In the example above, that would be &lt;code&gt;&amp;lt;MyScalarCostFunction, 1, 2&amp;gt;&lt;/code&gt;, which is missing the 2 as the last template argument.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This seems to echo my gut reaction that the parameters aren't set correctly. I would have expected some sort of error or something, but C++ is a bunch of black magic that gives you enough rope to hang yourself and then shoots you in the face.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-08-13T19:35:38.637" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21061" PostTypeId="2" ParentId="21059" CreationDate="2020-08-13T21:45:53.783" Score="1" Body="&lt;p&gt;Suggestion by Markus was right :&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I believe that your problem lies here:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;for(auto data:datas) {&#xA;     problem.AddResidualBlock(ReprojectionError::Create(data.first,data.second),loss,&amp;amp;x[0]); &#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;data will be a copy of your matrix/point tuple. You're then storing references&#xA;to data's members in your newly created residuals. This is not what you want.&lt;/p&gt;&#xA;&lt;p&gt;Try &lt;code&gt;for(auto&amp;amp; data : datas)&lt;/code&gt; instead.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://groups.google.com/forum/#!msg/ceres-solver/2IRuiVuRE54/wJzSC3X4BQAJ&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://groups.google.com/forum/#!msg/ceres-solver/2IRuiVuRE54/wJzSC3X4BQAJ&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="26948" LastEditorUserId="9720" LastEditDate="2020-08-14T18:53:47.717" LastActivityDate="2020-08-14T18:53:47.717" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21062" PostTypeId="1" CreationDate="2020-08-16T13:03:29.433" Score="0" ViewCount="49" Body="&lt;p&gt;Hello friends of the robotics,&lt;br /&gt;&#xA;for Data Association I have the Robots cov matrix in a 3x3 Form, but the measurements and landmarks only in 2x2. I want to compute the Mahalanobis distance, so how translates a 3x3 Cov Matrix (x,y,theta) to 2x2 (x,y) ? Just making the landmarks and measurements 3x3 results in a too small Mahalanobis Distance.&lt;/p&gt;&#xA;" OwnerUserId="26963" LastEditorUserId="26963" LastEditDate="2020-08-16T13:28:01.160" LastActivityDate="2020-08-16T13:28:01.160" Title="Transforming a 3x3 Covariance Matrix to 2x2" Tags="&lt;slam&gt;&lt;data-association&gt;" AnswerCount="0" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="21063" PostTypeId="2" ParentId="18454" CreationDate="2020-08-17T07:47:31.003" Score="1" Body="&lt;p&gt;You can represent the O vector as a vector with 3 parameters&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$O = [q_1, q_2, q_3, q_4, q_5, q_6]$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;There is no conceptual difference in how to write the Jacobian matrix. It is the same idea written for both positions ad orientations. For 6 degrees of freedom (assuming your 3D robot has 6 degreees of freedom) the Jacobian will be a &lt;span class=&quot;math-container&quot;&gt;$6\times6$&lt;/span&gt; matrix.&lt;/p&gt;&#xA;&lt;p&gt;We can think of the columns which create the Jacobi Matrix seperatly&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ J = [ J_1,  J_2,  \cdots J_n ] $$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;where&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$J_i = \begin{cases}&#xA;\begin{bmatrix}z_{i - 1}\\0_{3\times1}\end{bmatrix} &amp;amp; \text{the $i^\text{th}$ joint is revolute}\\&#xA;\begin{bmatrix}z_{i - 1} \times (P - p_{i - 1})\\z_{i - 1}\end{bmatrix} &amp;amp; \text{the $i^\text{th}$ joint is prismatic (linear)}&#xA;\end{cases}$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Where&#xA;&lt;span class=&quot;math-container&quot;&gt;$z_i$&lt;/span&gt; is the axis of the &lt;span class=&quot;math-container&quot;&gt;$i^\text{th}$&lt;/span&gt; joint expressed as a 3D vector, P is the position of the final frame,  in the and &lt;span class=&quot;math-container&quot;&gt;$o_i$&lt;/span&gt; is the position of the origin of the &lt;span class=&quot;math-container&quot;&gt;$i^\text{th}$&lt;/span&gt; frame. It is applied to a robot structure &lt;a href=&quot;https://arxiv.org/ftp/arxiv/papers/1707/1707.04821.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-08-17T07:47:31.003" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21064" PostTypeId="1" AcceptedAnswerId="21065" CreationDate="2020-08-18T14:58:35.927" Score="0" ViewCount="23" Body="&lt;p&gt;I am completely new to robotics and engineering and it looks as though I have stumbled at the first hurdle when building a prototype.&lt;/p&gt;&#xA;&lt;p&gt;I am trying to build a curved track upon which a motorised carriage can run. I know that I need a stepper motor and a cog, however for the tracks I can't find anything similar to the picture below:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/9dBoi.jpg&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;Curved track&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9dBoi.jpg&quot; alt=&quot;Curved track&quot; title=&quot;Curved track&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The youtube video is as follows: &lt;a href=&quot;https://www.youtube.com/watch?v=TsJiL6Uod1M&quot; rel=&quot;nofollow noreferrer&quot;&gt;Lumia 640XL mach3 step motor curve motion&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;There is a slight difference in that I need straight sections and 90-degree bends for the tracks, rather than a circle.&lt;/p&gt;&#xA;&lt;p&gt;Does anyone know what these sections are called, as &amp;quot;tracks&amp;quot; and &amp;quot;runners&amp;quot; doesn't yield anything.&lt;/p&gt;&#xA;" OwnerUserId="26967" LastEditorUserId="9176" LastEditDate="2020-08-18T22:07:42.277" LastActivityDate="2020-08-18T22:07:42.277" Title="Help needed sourcing gear/track material for stepper motor" Tags="&lt;tracks&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="21065" PostTypeId="2" ParentId="21064" CreationDate="2020-08-18T16:13:02.137" Score="1" Body="&lt;p&gt;This particular part is called a &lt;a href=&quot;https://en.wikipedia.org/wiki/Starter_ring_gear&quot; rel=&quot;nofollow noreferrer&quot;&gt;ring gear&lt;/a&gt;, but you're probably not going to find one because the item in your picture is almost certainly custom-made.&lt;/p&gt;&#xA;&lt;p&gt;The particular article I linked is for engine starter motors, so it has &lt;em&gt;external&lt;/em&gt; teeth, but there are internally-toothed ring gears, too.&lt;/p&gt;&#xA;&lt;p&gt;What you're describing, beyond the picture, &lt;em&gt;does&lt;/em&gt; sound like a kind of modular track system, but I'm unaware of any off-the-shelf solutions. You might have luck with &lt;a href=&quot;https://en.wikipedia.org/wiki/Timing_belt_(camshaft)&quot; rel=&quot;nofollow noreferrer&quot;&gt;timing belts&lt;/a&gt; (or &lt;a href=&quot;https://en.wikipedia.org/wiki/Toothed_belt&quot; rel=&quot;nofollow noreferrer&quot;&gt;toothed belts&lt;/a&gt;), but it would probably be easier to get parts custom-fabricated to your exact specification than to try to cobble something together from miscellaneous parts.&lt;/p&gt;&#xA;&lt;p&gt;There seems to be a good number of off-the-shelf small-scale timing belts &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/B07JKT5BZQ&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;like this&lt;/a&gt; intended for 3D printers, though. Not affiliated with or recommending the Amazon link, just wanted to give an example.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-08-18T16:13:02.137" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="21067" PostTypeId="2" ParentId="21036" CreationDate="2020-08-19T03:44:29.497" Score="4" Body="&lt;p&gt;&lt;strong&gt;The IMU itself cannot distinguish between &amp;quot;true&amp;quot; linear acceleration and &amp;quot;fictitious&amp;quot; (Coriolis) linear acceleration&lt;/strong&gt; induced by rotation of the IMU coordinate frame with respect to an inertial frame. You must make that distinction in your choice of models. Your estimator will represent your robot's acceleration in some way in its state, and &lt;strong&gt;the model that predicts an IMU reading from your state must take into account this Coriolis effect&lt;/strong&gt;. As long as you are correctly modeling the IMU given your choice of state, your estimator should figure things out &amp;quot;for you&amp;quot;.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Consider for instance an estimator (e.g. a Kalman filter) estimating the IMU's 6DoF pose, along with first and second derivatives, expressed as follows (in the language of Lie groups):&#xA;&lt;span class=&quot;math-container&quot;&gt;\begin{align}&#xA;x(t) &amp;amp;\in \mathrm{SE}(3) \\&#xA;\dot x(t)&#xA;    &amp;amp;:= \left. \frac{d}{dh} \right|_{h=0} \log\left( x(t + h) x(t)^{-1} \right) \in \mathfrak{se}(3) \\&#xA;\ddot x(t) &amp;amp;:= \frac{d}{dt} \dot x(t) \in \mathfrak{se}(3).&#xA;\end{align}&lt;/span&gt;&#xA;where &lt;span class=&quot;math-container&quot;&gt;$x(t)$&lt;/span&gt; is the transformation from world-frame coordinates to IMU-frame coordinates. The first derivative takes the form&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot x(t) = \begin{bmatrix} \omega(t) \\ v(t) \end{bmatrix},&#xA;$$&lt;/span&gt;&#xA;where &lt;span class=&quot;math-container&quot;&gt;$\omega(t)$&lt;/span&gt; is the IMU-frame angular velocity and &lt;span class=&quot;math-container&quot;&gt;$v(t)$&lt;/span&gt; is the (negative) IMU-frame linear velocity, each expressed in the IMU frame. The second derivative has the form&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\ddot x(t) = \begin{bmatrix} q(t) \\ a(t) \end{bmatrix} =&#xA;    \begin{bmatrix} \dot \omega(t) \\ \dot v(t) \end{bmatrix}.&#xA;$$&lt;/span&gt;&#xA;In this setup, &lt;span class=&quot;math-container&quot;&gt;$a(t)$&lt;/span&gt; is the &amp;quot;true&amp;quot; linear acceleration (not taking into account the Coriolis acceleration); it is &lt;em&gt;not&lt;/em&gt; the quantity that the accelerometer measures, which is the second derivative of the IMU frame origin in the world frame, rotated into the IMU frame. Note that if the IMU is revolving around the world frame at a constant angular and linear velocity, then the IMU will read positive acceleration orthogonal to the direction of motion, while &lt;span class=&quot;math-container&quot;&gt;$a(t)$&lt;/span&gt; will be identically zero.&lt;/p&gt;&#xA;&lt;p&gt;In order to perform estimation using the IMU, you will need a model for predicting what value the gyro and accelerometer will take given an arbitrary state. The gyro model will be simple:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\mathrm{gyro}_{\mathrm{pred}}(t) = \omega(t).&#xA;$$&lt;/span&gt;&#xA;But the accelerometer model must take into account the IMU frame's angular velocity:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\mathrm{accel}_{\mathrm{pred}}(t) = -a(t) + \omega(t) \times v(t) + g_{\mathrm{IMU}}&#xA;$$&lt;/span&gt;&#xA;(where &lt;span class=&quot;math-container&quot;&gt;$g_{\mathrm{IMU}}$&lt;/span&gt; is the gravity vector rotated into the IMU frame).&lt;/p&gt;&#xA;&lt;p&gt;Your filter will then distinguish the true from Coriolis acceleration &amp;quot;for you&amp;quot; by producing an estimated state maximizing the likelihood (or something similar) of your observed IMU readings.&lt;/p&gt;&#xA;" OwnerUserId="19347" LastActivityDate="2020-08-19T03:44:29.497" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21068" PostTypeId="1" CreationDate="2020-08-19T06:38:04.410" Score="0" ViewCount="56" Body="&lt;p&gt;My ROS-system was working pretty well.&lt;/p&gt;&#xA;&lt;p&gt;Then, I installed &lt;strong&gt;rosdep&lt;/strong&gt; by using &lt;code&gt;sudo apt install python-rosdep2&lt;/code&gt;, which ended fine without showing any issues. Then I issued&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo rosdep init&#xA;sudo rosdep update&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;which also ended without showing issues.&lt;/p&gt;&#xA;&lt;p&gt;But now, my ROS-installation seems to be broken because I can't source my ROS any more!&lt;/p&gt;&#xA;&lt;p&gt;For example, typing ROS-commands, such as&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;roscore&lt;/code&gt; or &lt;code&gt;rqt&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;results in:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/34lrP.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/34lrP.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Sourcing, as usual with &lt;code&gt;source /opt/ros/meldoic/setub.bash&lt;/code&gt; makes no difference.&lt;/p&gt;&#xA;&lt;p&gt;What has happened? How to fix this?&lt;/p&gt;&#xA;&lt;p&gt;Additional Info:&lt;/p&gt;&#xA;&lt;p&gt;Typing &lt;code&gt;ros&amp;lt;tab&amp;gt;&amp;lt;tab&amp;gt;&lt;/code&gt; only shows me the following options anymore:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/94N5f.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/94N5f.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Where is all the rest gone?&lt;/p&gt;&#xA;" OwnerUserId="23509" LastActivityDate="2021-05-21T13:46:26.640" Title="No ROS 'sourceing' anymore after installing rosdep2" Tags="&lt;ros&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21071" PostTypeId="5" CreationDate="2020-08-20T08:35:27.510" Score="0" Body="" OwnerUserId="-1" LastEditorUserId="-1" LastEditDate="2020-08-20T08:35:27.510" LastActivityDate="2020-08-20T08:35:27.510" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21072" PostTypeId="4" CreationDate="2020-08-20T08:35:27.510" Score="0" Body="Arrangement of toothed wheels (gears) to transmit motion and power" OwnerUserId="26977" LastEditorUserId="26977" LastEditDate="2020-08-20T15:29:37.113" LastActivityDate="2020-08-20T15:29:37.113" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21074" PostTypeId="1" AcceptedAnswerId="21077" CreationDate="2020-08-20T23:35:47.937" Score="0" ViewCount="21" Body="&lt;p&gt;Is it ok to apply too many volts to Actobotics motors?&#xA;Too many as in 14.8V. Each motor requires 12V.&lt;/p&gt;&#xA;&lt;p&gt;Would it damage the motors in any way? and if so, in what way?&lt;/p&gt;&#xA;" OwnerUserId="26710" LastEditorUserId="26991" LastEditDate="2020-09-01T15:58:45.707" LastActivityDate="2020-09-01T15:58:45.707" Title="Is it OK to apply too many volts to Actobotics HD motors?" Tags="&lt;motor&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21077" PostTypeId="2" ParentId="21074" CreationDate="2020-08-21T13:05:48.587" Score="1" Body="&lt;p&gt;Like &lt;a href=&quot;https://robotics.stackexchange.com/questions/21074/is-it-ok-to-apply-too-many-volts-to-actobotics-hd-motors#comment34535_21074&quot;&gt;jsotola said&lt;/a&gt;, the datasheet will tell you how much voltage is too much. Regarding damage, the higher voltage can cause too much current in the motor windings and potentially melt the insulation off, shorting the motor internally, or it can overspeed the motor and cause bearing damage.&lt;/p&gt;&#xA;&lt;p&gt;I know it doesn't sound like a big difference, but 14.8 V is almost 25% more voltage than 12 V.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-08-21T13:05:48.587" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21078" PostTypeId="2" ParentId="12693" CreationDate="2020-08-21T14:47:51.660" Score="0" Body="&lt;p&gt;those inductors is to block back ac voltage from going back to the DC power source&lt;/p&gt;&#xA;" OwnerUserId="26983" LastActivityDate="2020-08-21T14:47:51.660" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21080" PostTypeId="1" AcceptedAnswerId="21166" CreationDate="2020-08-22T13:35:00.373" Score="0" ViewCount="42" Body="&lt;p&gt;I am trying to calculate the corner points of the vehicle given the details below:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Localization data from rear axle of the vehicle&lt;/li&gt;&#xA;&lt;li&gt;Length and Width of the vehicle&lt;/li&gt;&#xA;&lt;li&gt;Heading of the vehicle ENU&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Could anybody help me calculate the 4 corner points of the vehicle?&lt;/p&gt;&#xA;" OwnerUserId="21081" LastEditorUserId="9176" LastEditDate="2020-08-22T17:35:51.147" LastActivityDate="2020-09-18T12:50:24.600" Title="Calculate the Vehicle corner points given localization" Tags="&lt;localization&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21082" PostTypeId="2" ParentId="21021" CreationDate="2020-08-23T16:50:00.230" Score="0" Body="&lt;p&gt;First, start with the systems architecture. You need to design the system considering cost, safety, ease of development.&lt;/p&gt;&#xA;&lt;p&gt;After that, for each item, main features are defined. This defines the high-level architecture of software elements (platform-side, maintenance computer or controller softwares).&lt;/p&gt;&#xA;&lt;p&gt;The question is most probably about the main (vehicle) software, which conducts the most important calculations.&lt;/p&gt;&#xA;&lt;p&gt;The main software architecture depends a lot on what one wants to accomplish. Is it a remotely-operated-vehicle? is it an autonomous system? how autonomous?&lt;/p&gt;&#xA;&lt;p&gt;After that, software architecture is defined, taking into consideration any dictated or selected data interfaces.&lt;/p&gt;&#xA;&lt;p&gt;The software architecture functionally resembles the systems architecture, because the main computer interacts with almost all of the elements of the robot.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.mdpi.com/2076-3417/9/23/5126/htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;Sample architecture for a robot racer&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;There are several studies regarding autonomous vehicle system and software solutions. You can dive deeper into the topic by visiting &lt;a href=&quot;https://www.google.com/search?q=software+architecture+for+autonomous+vehicle&quot; rel=&quot;nofollow noreferrer&quot;&gt;Google&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="9570" LastActivityDate="2020-08-23T16:50:00.230" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21083" PostTypeId="2" ParentId="20357" CreationDate="2020-08-23T18:14:27.657" Score="1" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;1.) Is there material out there that explains how the frame can be translated from the center of the body to the legs?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;When you say &lt;code&gt;I've deduced this DH table into its corresponding matrices&lt;/code&gt; - presumably these matrices you mention are homogenous transformation matrices that capture the four movements implied by the DH parameters (&lt;span class=&quot;math-container&quot;&gt;$a, \alpha, d, \theta$&lt;/span&gt;). You can also use these to describe the (fixed) relationship between the centre of the body and the base frame of the leg. For example, if your body frame has the x axis pointing forwards, and the front left leg is located 2 units forward and 1.5 units left, with the base frame of that leg rotated (around z axis) so that the leg is pointed 'outwards' by 90 degrees, then you'll have&#xA;&lt;span class=&quot;math-container&quot;&gt;$$ {}^{body}T_{frontleftleg} = \begin{bmatrix} &#xA;\mathbf{R} &amp;amp; t \\&#xA;\mathbf{0} &amp;amp; 1\\&#xA;\end{bmatrix}&#xA;=&#xA;\begin{bmatrix} &#xA;0 &amp;amp; -1 &amp;amp; 0 &amp;amp; 2 \\&#xA;1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1.5\\&#xA;0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0\\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1\\&#xA;\end{bmatrix}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;2.) Is there any material out there that explains Body IK and how it can be implemented for Roll Pitch and Yaw?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Once you've got the leg IK worked out, there isn't much more to do. Consider the robot being stationary with all feet on the ground and the body in some known position. You can work out where a foot is relative to the body by combining the fixed transformation between body and frame at the base of the leg with the transformation from the base of the leg to the foot which is a function of the joint angles (which you control and so should be known). &lt;span class=&quot;math-container&quot;&gt;$${}^{body}T_{foot} = {}^{body}T_{leg} * {}^{leg}T_{foot}(\theta_1,\theta_2,\theta_3)$$&lt;/span&gt;&#xA;Now if you want to move the body, create a transformation matrix representing that movement &lt;span class=&quot;math-container&quot;&gt;${}^{body}T_{bodynew}$&lt;/span&gt; and use it to find out the required position (relative to the current body) that the leg base frame would need to have &lt;span class=&quot;math-container&quot;&gt;$${}^{body}T_{legnew} = {}^{body}T_{bodynew} * {}^{body}T_{leg}$$&lt;/span&gt; in order to produce this body position.&lt;/p&gt;&#xA;&lt;p&gt;Then find out where the foot is relative to this desired leg base position &lt;span class=&quot;math-container&quot;&gt;$${}^{legnew}T_{foot} = ({}^{body}T_{legnew})^{-1} * {}^{body}T_{foot}$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;And you can just use your leg IK equations to find the joint angles that give this transformation. Do that for all legs and the body will move as desired.&lt;/p&gt;&#xA;" OwnerUserId="15397" LastActivityDate="2020-08-23T18:14:27.657" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21084" PostTypeId="1" CreationDate="2020-08-24T05:15:07.490" Score="0" ViewCount="101" Body="&lt;p&gt;I have camera feed (in the form of RGB images) from 3 cameras with partially overlapping Field-of-view i.e. for the time stamp 0 to 100, I have total 300 frames or say synchronized 100 RGB frames for each camera.&lt;/p&gt;&#xA;&lt;p&gt;The object (Robot) is moving from one place to another place. I don't know about the camera locations but for each frame &amp;amp; for each camera, I have 8-corner points of 3D bounding-box which are just 2D projections of corresponding 3D camera points on an image. For example, in frames, depending upon the time stamp, if the object appears then I have 2D coordinates of the 8 corners of the blue (3D) bounding box. Note that, in the below image, I have shown only an example object not the entire frame!&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/959JA.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/959JA.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://docs.esko.com/docs/en-us/artioscad/12/userguide/assets/ac/se_ac_120_3DExtendToolExample.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;image source&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Apart from this, I have an Intrinsic Matrix which is same for all the cameras. I also know the object (Robot) dimensions (length, breadth, &amp;amp; height).&lt;/p&gt;&#xA;&lt;p&gt;So, using these RGB frames from all the cameras, 2D coordinates of 8 corner-points and object (Robot) dimensions, how can I calibrate 3 cameras as well as how can I find the poses of each camera w.r.t. the first camera in the form of a 4x4 transformation matrix [SE(3)]?&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Edit 1:&lt;/strong&gt;&lt;br&gt;&#xA;After the calibration, how can I get the global 3-DOF pose of the robot (center of 3D bounding box) for all the 100 frames? For this purpose, I'm assuming the pose of the first camera as a global coordinate frame.&lt;/p&gt;&#xA;" OwnerUserId="26991" LastEditorUserId="26991" LastEditDate="2020-08-30T08:02:13.187" LastActivityDate="2020-08-30T08:02:13.187" Title="How can I calibrate 3 cameras without knowing global pose of the object &amp; camera locations? How can I find the pose of each camera wrt the first one?" Tags="&lt;computer-vision&gt;&lt;cameras&gt;&lt;stereo-vision&gt;&lt;pose&gt;&lt;visual-odometry&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21085" PostTypeId="2" ParentId="21068" CreationDate="2020-08-24T08:25:34.000" Score="0" Body="&lt;p&gt;Install ROS properly again using (Just execute this command, don't worry nothing will be installed twice)&#xA;&lt;code&gt;sudo apt-get update&lt;/code&gt; &lt;br/&gt;&#xA;&lt;code&gt;sudo apt-get install ros-melodic-desktop-full&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;also source your ROS packages using (there seems to be a typo in what you've typed above) &lt;br/&gt;&#xA;&lt;code&gt;source /opt/ros/melodic/setup.bash&lt;/code&gt; &lt;br/&gt;&#xA;You can add this line to your &lt;code&gt;.bashrc&lt;/code&gt; file so your ROS automatically get  sourced everytime you open any terminal.&lt;/p&gt;&#xA;" OwnerUserId="26696" LastActivityDate="2020-08-24T08:25:34.000" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21086" PostTypeId="1" CreationDate="2020-08-24T10:26:11.973" Score="2" ViewCount="27" Body="&lt;p&gt;I'm writing a SLAM algorithm. One of the main problems is, that the landmark measurement error is not really Gaussian distributed, which means, their error doesn't have a mean value of 0.&lt;/p&gt;&#xA;&lt;p&gt;I already tried other M-Estimators, but they all make the assumptions, that the error has a mean of 0. How do you cope with these problems? I think it is safe to say, that most measurements in real life are not gaussian distributed with a mean error of 0.&lt;/p&gt;&#xA;" OwnerUserId="26993" LastEditorUserId="26991" LastEditDate="2020-08-31T13:01:44.647" LastActivityDate="2020-08-31T13:01:44.647" Title="How to deal with Gaussian Errors, which don't have a mean value of 0?" Tags="&lt;slam&gt;&lt;data-association&gt;&lt;gaussian&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21087" PostTypeId="2" ParentId="21086" CreationDate="2020-08-24T13:21:20.643" Score="3" Body="&lt;p&gt;I don't know if this is mathematically sound or not, but it's given me good results in practice. What I've done in this situation personally, when I expect/know that there is a bias, is to include the bias as a state in my state space representation of the system.&lt;/p&gt;&#xA;&lt;p&gt;For example, if I have a system to track position, I might write the state space models like:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\left[\begin{matrix}&#xA;\dot{x} \\&#xA;\ddot{x} \end{matrix}\right] = &#xA;\left[\begin{matrix}&#xA;0 &amp;amp; 1 \\&#xA;0 &amp;amp; 0 \end{matrix}\right]\left[\begin{matrix}&#xA;x \\&#xA;\dot{x} \end{matrix}\right] + \left[\begin{matrix}&#xA;0 \\&#xA;K \end{matrix}\right] u&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;So in this model, hypothetically, the input is maybe some motor torque through a gearbox to a wheel, so the input is a torque, some constant K converts it to an acceleration. Straightforward enough, but what if I &lt;em&gt;know&lt;/em&gt; that I'm operating on an incline, but can't measure it? Or, if I know I'm testing on flat ground, but the event track will have an incline?&lt;/p&gt;&#xA;&lt;p&gt;The trick here requires a bit of fundamental understanding of the differential equation - a differential equation tells you how the variable &lt;em&gt;changes&lt;/em&gt;. So, if I expect the slope to be &lt;em&gt;constant&lt;/em&gt; in the long-term (&amp;quot;long&amp;quot; relative to the other dynamics of the system), then I can get away with describing the &lt;em&gt;change&lt;/em&gt; in slope as being zero! So I modify my state space representation to be:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\left[\begin{matrix}&#xA;\dot{x} \\&#xA;\ddot{x} \\&#xA;\frac{d}{dt}\theta \end{matrix}\right] = &#xA;\left[\begin{matrix}&#xA;0 &amp;amp; 1 &amp;amp; 0\\&#xA;0 &amp;amp; 0 &amp;amp; -mg\\&#xA;0 &amp;amp; 0 &amp;amp; 0 \end{matrix}\right]\left[\begin{matrix}&#xA;x \\&#xA;\dot{x} \\&#xA;\theta \end{matrix}\right] + \left[\begin{matrix}&#xA;0 \\&#xA;K \\&#xA;0 \end{matrix}\right] u&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;So where previously I was assuming the acceleration is some linear function of my input (torque):&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\ddot{x} = Ku \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Now I'm saying that the acceleration is the torque times a constant &lt;em&gt;minus the effect of the slope&lt;/em&gt;:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\ddot{x} = Ku - mg\theta \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a use of the small angle approximation &lt;span class=&quot;math-container&quot;&gt;$\sin\left(\theta\right) \approx \theta$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Assuming I can measure position and speed, but not slope, this leaves me with the typical state-space matrices:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ &#xA;A = \left[\begin{matrix}&#xA;0 &amp;amp; 1 &amp;amp; 0\\&#xA;0 &amp;amp; 0 &amp;amp; -mg\\&#xA;0 &amp;amp; 0 &amp;amp; 0 \end{matrix}\right]&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;and&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;C = \left[\begin{matrix}&#xA;1 \\&#xA;1 \\&#xA;0 \end{matrix}\right]&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;and then I can check for &lt;a href=&quot;https://en.wikipedia.org/wiki/Observability&quot; rel=&quot;nofollow noreferrer&quot;&gt;observability&lt;/a&gt; in Matlab:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt; syms m g&#xA;&amp;gt;&amp;gt; A = [0, 1, 0; 0, 0, -m*g; 0, 0, 0];&#xA;&amp;gt;&amp;gt; C = [1, 0, 0; 0, 1, 0];&#xA;&amp;gt;&amp;gt; O = [C; C*A; C*A*A];&#xA;&amp;gt;&amp;gt; rank(O)&#xA;&#xA;ans =&#xA;&#xA;     3&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;And so you can see that the bias-estimating state-space form &lt;strong&gt;is observable&lt;/strong&gt;, meaning that it is possible to estimate the bias term (slope, in this example) just by measuring the position and speed of the vehicle.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-08-24T13:21:20.643" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="21089" PostTypeId="2" ParentId="21084" CreationDate="2020-08-25T02:36:26.417" Score="2" Body="&lt;p&gt;The process you need to go through is actually similar to the camera calibration procedure in OpenCV or other software. The chessboard is replaced by your robot, and you can skip the intrinsic estimation step. I would actually recommend you take a look &lt;a href=&quot;https://github.com/hengli/camodocal&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/hengli/camodocal&lt;/a&gt; a multi rig camera calibrator.&lt;/p&gt;&#xA;&lt;p&gt;Anyways a high level overview.&lt;/p&gt;&#xA;&lt;p&gt;The two steps you have to take are:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Initial Pose Estimation&lt;/li&gt;&#xA;&lt;li&gt;Refinement via Bundle Adjustment.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;strong&gt;Step 1:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;You actually only need 1 frame for this. Probably take the synced images that has the most the most projected points in common. (Minimum is 3 points, but you really need each camera to see the 4 same points).&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Define your reference frame/origin in your robot/object. You will be estimating the camera positions relative to this. You now also have the 3D bounding box corner positions relative to this frame. If you define it to be the center of the object then a point might look like &lt;span class=&quot;math-container&quot;&gt;$[\frac{width}{2},\frac{length}{2},\frac{height}{2}]$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Take your pick of &lt;a href=&quot;https://en.wikipedia.org/wiki/Perspective-n-Point&quot; rel=&quot;nofollow noreferrer&quot;&gt;PnP algorithm&lt;/a&gt;, and estimate the camera poses(Se3) individually. The 3D points are your bounding box corners relative to your origin. The projections are the 2D coordinates in your image. If you pick the origin to be the center of your robot then you now have calculated the pose of your camera with respect to the center of the robot.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Do some matrix multiplication to convert the camera poses in the object frame, to be relative to the first camera pose.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ T_{1,2}=T_{o,1}^{-1}*T_{o,2} $$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Should look like that. Here &lt;span class=&quot;math-container&quot;&gt;$o$&lt;/span&gt; is your object coordinate frame, and &lt;span class=&quot;math-container&quot;&gt;$1,2$&lt;/span&gt; refer to camera 1 and camera 2.&lt;/p&gt;&#xA;&lt;p&gt;If your cameras only partially overlap(e.g. only cameras 1,2 and 2,3 have overlaps) then do the same steps for each pair, and then just chain the transforms.&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$T_{13} = T_{1,2}*T_{2,3} $$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Step 2:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I will say this step might be optional for you. You already have the camera positions from step 1, so this just helps refine the results.&lt;/p&gt;&#xA;&lt;p&gt;Essentially you just need to set up a large Bundle Adjustment problem and solve it using something like &lt;a href=&quot;http://ceres-solver.org/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ceres&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Build your 3D Pointcloud. This pointcloud is composed of your bounding box corners at every timestamp. So in total you should have maximum &lt;span class=&quot;math-container&quot;&gt;$8*100=800$&lt;/span&gt; points(probably less because sometimes a point isn't visible).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;How to exactly do this is tricky. If your robot has perfect odometry then you can just multiply your points by the odometry transform. You can run an object pose estimator algorithm for all timestamps in camera 1. You can use the PnP algorithm again. You just need all 800 3D corner positions in a common reference frame, and there are different ways of doing that.&lt;/p&gt;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;&lt;p&gt;Build your optimization problem in something like Ceres. Your cost function terms should link the 3D points and the cameras that observe it. See the camodocal code for examples of this.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Solve the bundle adjustment problem.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="15265" LastEditorUserId="15265" LastEditDate="2020-08-25T08:00:43.907" LastActivityDate="2020-08-25T08:00:43.907" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="21091" PostTypeId="1" CreationDate="2020-08-25T04:31:54.250" Score="1" ViewCount="34" Body="&lt;p&gt;I am a software developer. I make apps.&lt;/p&gt;&#xA;&lt;p&gt;I have several ideas for Bluetooth-enabled smart devices using basic accessories and peripherals like cameras, speakers/headphones, lights and some external buttons/controls - Like a helmet with front and rear camera, headset/speakers and physical volume/call controls or buttons.&lt;/p&gt;&#xA;&lt;p&gt;I can code the apps but where do I start with the electronics?&lt;/p&gt;&#xA;&lt;p&gt;Is it best to just buy a Raspberry Pi kit with all the USB accessories, install android or Linux and code directly against that Pi unit - or is there a simpler way?&lt;/p&gt;&#xA;&lt;p&gt;Is there anywhere I can find learning or study material to help me?&lt;/p&gt;&#xA;" OwnerUserId="27002" LastEditorUserId="27002" LastEditDate="2020-08-25T04:43:34.050" LastActivityDate="2020-08-26T05:24:26.160" Title="DIY Smart Devices" Tags="&lt;raspberry-pi&gt;&lt;electronics&gt;&lt;bluetooth&gt;" AnswerCount="2" CommentCount="2" ClosedDate="2020-08-26T15:07:21.507" ContentLicense="CC BY-SA 4.0" />
  <row Id="21093" PostTypeId="2" ParentId="21091" CreationDate="2020-08-25T05:44:27.770" Score="1" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;where do I start with the electronics?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;and&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;basic accessories and peripherals like cameras, speakers/headphones, lights and some external buttons/controls - Like a helmet with front and rear camera, headset/speakers and physical volume/call controls or buttons&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;While it would be easy for anyone to connect some button to an electronic device successfully, peripherals like video cameras, network communication, etc., use very high frequencies, which pose very tricky challenges.&lt;/p&gt;&#xA;&lt;p&gt;Possible solutions:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;(long learning curve) Actually learn electronics, from the ground up. You will be able to design your device by yourself. Learn the basics (you might already know them), and then concentrate on the details that you actually need. Ideally, you learn the theory too, but it should be enough (for the beginning) to concentrate on the practical stuff.&lt;/li&gt;&#xA;&lt;li&gt;(almost no learning curve) Team-up with a friend/colleague, who already knows how to design electronic circuits.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="22248" LastEditorUserId="22248" LastEditDate="2020-08-26T05:24:26.160" LastActivityDate="2020-08-26T05:24:26.160" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21094" PostTypeId="2" ParentId="21091" CreationDate="2020-08-25T10:42:02.190" Score="1" Body="&lt;p&gt;To learn electronics (which is pretty much essential), then a copy of &lt;em&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/The_Art_of_Electronics&quot; rel=&quot;nofollow noreferrer&quot;&gt;The Art of Electronics&lt;/a&gt;&lt;/em&gt;, by Horowitz and Hill (ISBN: 978-0-521-37095-0), is indispensable.&lt;/p&gt;&#xA;&lt;p&gt;Nevertheless, on its own, it might not get you up and running as quickly as you like. Also, as you want to build a smart device, you will probably also need a controller of some sort, and you have mentioned the Pi (or Pi kit).&lt;/p&gt;&#xA;&lt;p&gt;However, as an alternative to the Pi you might want to consider Arduino (or Arduino beginners kit).&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.arduino.cc&quot; rel=&quot;nofollow noreferrer&quot;&gt;Arduino&lt;/a&gt; is a lot simpler than Pi, with a lot less over head, code footprint wise. Yes, you can get a Python script running quickly on a Pi, that is true, so the Pi is simpler in that respect.&lt;/p&gt;&#xA;&lt;p&gt;However, with Arduino, you are coding onto bare-metal, so to speak. You write and compile a &amp;quot;few&amp;quot; lines of code, and upload that to the Arduino, and that is all of the code that you need. Whereas, with Pi, you (usually) end up writing a Linux based application, &lt;em&gt;to run on an OS&lt;/em&gt;. So, in that respect, Arduino code can run faster (generally - although some more argue otherwise), as there is no code running for screen updates or keyboard input, and all of the other baggage that comes with a full-blown PC (which is what a Pi is, albeit a rather small one).&lt;/p&gt;&#xA;&lt;p&gt;Arduino comes with countless libraries so, when it comes to interfacing the Arduino with a particular device, most to the work will be done for you. There's also a lot of ready-to-go examples and projects out there for you to copy or adapt for your own purposes. So, while you will need to, or should, learn electronics (in the end), for a while you may be able to get away without learning/knowing the theory.&lt;/p&gt;&#xA;&lt;p&gt;That said, I have a few friends (with no electronics training/background), who have tried Arduino, and after &lt;em&gt;trying to run before learning to walk&lt;/em&gt;, they have sadly given up. This is because they refused to start off slowly with the excellent basic examples provided and tried to do big projects without any understanding of either C/C++/OOP and/or electronic theory.&lt;/p&gt;&#xA;&lt;p&gt;You could counter all of the above, with equal arguments for the Pi... It really depends on what you want to do. For simple devices, like &lt;em&gt;wearables&lt;/em&gt;, which you seem to refer to, then Arduino would &lt;em&gt;seem&lt;/em&gt; to be more sensible, due to the possibility size reduction. For large complex projects, with a lot of data processing, a Pi would be more useful (as the memory (and processing power) on an Arduino is rather limited). Of course, you could use both, with an Arduino monitoring sensors and feeding that data back to the Pi for processing and display on a large monitor.&lt;/p&gt;&#xA;&lt;p&gt;Depending upon your requirements for quantity of IO ports, you can make large or tiny devices (using large (Arduino Mega 2560) or tiny (Arduino Micro) Arduino based boards respectively), or just the µController IC itself with a few extra support components (two capacitors and a crystal), and the the components for your project (i.e. LEDs, speakers, sensors, or what-have-you).&lt;/p&gt;&#xA;&lt;p&gt;Finally, Arduinos can be a lot cheaper than Pi - if you go for the Chinese clones, they can be found for a few dollars, and work just as well, in my experience.&lt;/p&gt;&#xA;&lt;p&gt;Either way, in addition to the very good Arduino and Pi support sites, both &lt;a href=&quot;https://raspberrypi.stackexchange.com&quot;&gt;Pi-SE&lt;/a&gt; and &lt;a href=&quot;https://arduino.stackexchange.com&quot;&gt;Arduino-SE&lt;/a&gt; are excellent Stack Exchange sites, right here, as well.&lt;/p&gt;&#xA;&lt;p&gt;If you really need faster devices then look into FPGA, but that would seem to not be necessary for you yet, nor is it really for beginners.&lt;/p&gt;&#xA;" OwnerUserId="9176" LastEditorUserId="9176" LastEditDate="2020-08-25T12:04:52.233" LastActivityDate="2020-08-25T12:04:52.233" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="21095" PostTypeId="1" CreationDate="2020-08-25T13:11:55.837" Score="1" ViewCount="20" Body="&lt;p&gt;How do I get the size in mm of the smallest feature a depth camera can detect?&lt;/p&gt;&#xA;&lt;p&gt;Known variables are: distance from the target (for instance 1 meter), depth resolution in pixels (for instance 1280 x 720) and depth Field of view angles (for instance H=90°, V=60°).&lt;/p&gt;&#xA;&lt;p&gt;This &lt;a href=&quot;http://robotsforroboticists.com/camera-lens-selection/&quot; rel=&quot;nofollow noreferrer&quot;&gt;resource&lt;/a&gt; mentions the relation between minimum feature size and pixel resolution for the 2D RGB case.&lt;/p&gt;&#xA;" OwnerUserId="19260" LastEditorUserId="19260" LastEditDate="2020-08-25T14:16:44.813" LastActivityDate="2020-08-25T14:16:44.813" Title="Size of smallest feature from pixel depth resolution" Tags="&lt;computer-vision&gt;&lt;cameras&gt;&lt;stereo-vision&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21097" PostTypeId="1" CreationDate="2020-08-26T22:16:36.183" Score="1" ViewCount="21" Body="&lt;p&gt;I have this brushed DC motor (Vex 775pro: &lt;a href=&quot;https://motors.vex.com/vexpro-motors/775pro;&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://motors.vex.com/vexpro-motors/775pro;&lt;/a&gt; motor curve data here I assume is useful but I do not exactly know how to make sense of it) My question is, how do I select a motor driver that can handle the current that my motor is drawing and how do I know how much current my motor is drawing?&lt;/p&gt;&#xA;&lt;p&gt;I would like to purchase a standard H-bridge motor driver so I can control the speed and make the motor go clockwise or counterclockwise. Looking up some things online, I see that I should pick a motor driver that can provide current equal to or above the motor's continuous current consumption under load, however I am not sure what the &amp;quot;continuous current consumption under load&amp;quot; is for this motor. Also in case it matters for anything, I do plan on using this with an Arduino. Any help would be greatly appreciated.&lt;/p&gt;&#xA;" OwnerUserId="27012" LastActivityDate="2020-08-27T07:59:29.817" Title="How to pick the right motor driver?" Tags="&lt;arduino&gt;&lt;motor&gt;&lt;current&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="21098" PostTypeId="2" ParentId="21097" CreationDate="2020-08-27T07:59:29.817" Score="1" Body="&lt;p&gt;For every component you can search for data sheets over the respective manufacturer site. You can know the rated current of motor otherwise on the shopping site. Then find a motor driver for that rating. Or else you can design it on your own.&lt;/p&gt;&#xA;" OwnerUserId="22242" LastActivityDate="2020-08-27T07:59:29.817" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21099" PostTypeId="1" CreationDate="2020-08-27T18:11:57.337" Score="0" ViewCount="11" Body="&lt;p&gt;I read about incremental smoothing and mapping (iSAM) first in the paper on hector_slam (a flexible and scalable SLAM system with full 3D motion estimation by Stefan Kohlbrecher et al) and then read more about it at &lt;a href=&quot;https://people.csail.mit.edu/kaess/isam/comparison.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://people.csail.mit.edu/kaess/isam/comparison.html&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Can someone give a direct comparison of iSAM, Gmapping and Hector_mapping for planar robots? Has anyone used hector_mapping as SLAM front-end and iSAM as SLAM backend?&lt;/p&gt;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="13969" LastActivityDate="2020-08-27T18:11:57.337" Title="How does isam compare with Gmapping and Hector?" Tags="&lt;ros&gt;&lt;slam&gt;&lt;mapping&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21101" PostTypeId="1" CreationDate="2020-08-28T16:29:56.840" Score="0" ViewCount="19" Body="&lt;p&gt;This is my first post on the forum although I read Q&amp;amp;A posted here constantly. I haven´t seen a similar question so here it goes:&lt;/p&gt;&#xA;&lt;p&gt;I am implementing an EKF for localization from scratch just for fun. I am using ROS and the device is the Turtlebot Burger.&#xA;The idea is to develop my own benchmark between velocity and odometry based motion controls.&#xA;I have implemented a class that handles all the data coming from the turtlebot (velocity, odometry, lidar, etc). The published velocity and lidar values measured have different frequencies.&lt;/p&gt;&#xA;&lt;p&gt;Then I have implemented the two steps of the EKF (prediction and correction) as functions having this turtlebot object as argument.&lt;/p&gt;&#xA;&lt;p&gt;The question here is how frequent should I call these functions. Every time I receive values would be a good state? For example, if I receive velocity values every 10Hz should I call the prediction at the same frequency?, so  When the robot is not moving (stopped or just after booting) I am receiving zeros for the velocity. I guess calling the prediction step here would be an error, as I would be incrementing the covariance due to the noise matrix Q.&#xA;Same scenario happens with the Lidar values, should I call the correction at the same frequencies as the read values? Same for when the robot is not moving.&lt;/p&gt;&#xA;&lt;p&gt;And also while moving, what should be a good prediction/correction ratio?&lt;/p&gt;&#xA;&lt;p&gt;Any help would be appreciated,&#xA;Many thanks.&lt;/p&gt;&#xA;" OwnerUserId="27022" LastActivityDate="2020-08-28T16:29:56.840" Title="What should be a good frequency for the EKF prediction and correction updates?" Tags="&lt;mobile-robot&gt;&lt;ekf&gt;" AnswerCount="0" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21102" PostTypeId="1" CreationDate="2020-08-28T19:21:04.253" Score="1" ViewCount="54" Body="&lt;p&gt;My kids want to get into robotics, where Online can I buy the motors (dc,ac,stepper...) and mechanical assembly (nuts, bolts, sheet metal, springs, rods...) for a very affordable price, you know I just want to get a big box of all this stuff and let them tinker around with it. Even where to find cheap microcontrollers, leds, wheel bearings, wheels and tracks, sensors...&lt;/p&gt;&#xA;" OwnerUserId="27023" LastActivityDate="2020-09-17T19:08:26.110" Title="Where to buy cheap motors and mechanical parts for hobby robotics applications?" Tags="&lt;mobile-robot&gt;&lt;arduino&gt;&lt;motor&gt;&lt;microcontroller&gt;&lt;wheel&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2020-09-18T12:29:54.753" ContentLicense="CC BY-SA 4.0" />
  <row Id="21103" PostTypeId="1" CreationDate="2020-08-29T07:22:11.470" Score="0" ViewCount="21" Body="&lt;p&gt;When dealing with rectified images, why would the inverse of a simple permutation matrix &lt;span class=&quot;math-container&quot;&gt;$$P =&#xA;{\begin{bmatrix} &#xA;0 &amp;amp; -1 &amp;amp; 0 \\ &#xA;0 &amp;amp; 0 &amp;amp; -1 \\ &#xA;1 &amp;amp; 0 &amp;amp; 0 &#xA;\end{bmatrix}}^{-1}$$&lt;/span&gt;&#xA;is sufficient to transform coordinate in camera frame to world frame, such that &lt;span class=&quot;math-container&quot;&gt;$X_w = P * X_c$&lt;/span&gt; ?&lt;/p&gt;&#xA;" OwnerUserId="27027" LastActivityDate="2020-08-29T07:22:11.470" Title="When a permutation matrix is desired for transforming camera frame to world frame?" Tags="&lt;mobile-robot&gt;&lt;slam&gt;&lt;matrix&gt;&lt;transformation&gt;" AnswerCount="0" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21104" PostTypeId="1" CreationDate="2020-08-30T08:15:48.353" Score="0" ViewCount="26" Body="&lt;p&gt;I have camera feed (in the form of RGB images) from 3 cameras with partially overlapping Field-of-view i.e. for the time stamp 0 to 100, I have total 300 frames or say synchronized 100 RGB frames for each camera.&lt;/p&gt;&#xA;&lt;p&gt;Apart from this, the only available information is the Intrinsic Matrix which is same for all the cameras.&lt;/p&gt;&#xA;&lt;p&gt;So, using these RGB frames from 3 cameras, how can I calibrate (extrinsic calibration) 3 cameras and calculate the global 3-DOF pose of an object (Robot - which is moving from one place to another)? For the object pose, assume a global coordinate system is defined by the first camera pose. (I might have access to the robot dimension: length, breadth, &amp;amp; height!)&lt;/p&gt;&#xA;&lt;p&gt;If any direct method is not possible then I'm also open to using machine learning based method(s)?&lt;/p&gt;&#xA;&lt;p&gt;Note: this question is an extension of my other question: &lt;a href=&quot;https://robotics.stackexchange.com/questions/21084/how-can-i-calibrate-3-cameras-without-knowing-global-pose-of-the-object-camera&quot;&gt;How can I calibrate 3 cameras without knowing global pose of the object &amp;amp; camera locations? How can I find the pose of each camera wrt the first one?&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="26991" LastActivityDate="2020-08-30T08:15:48.353" Title="How can I calibrate 3 cameras and track the object using only synchronized cameras feeds from all the cameras?" Tags="&lt;computer-vision&gt;&lt;cameras&gt;&lt;stereo-vision&gt;&lt;machine-learning&gt;&lt;pose&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21105" PostTypeId="1" CreationDate="2020-09-01T11:23:02.387" Score="1" ViewCount="115" Body="&lt;p&gt;I'd like to define an argument in ROS2 launch file which is a list of tuples. How should the list in &lt;code&gt;default_value&lt;/code&gt; be formatted?&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;def generate_launch_description():&#xA;   argument = LaunchConfiguration('argument', default_value=[(1, 0, 0), (0, 1, 0), (0, 0, 1)])&#xA;   node = Node(package='...', executable='...', parameters=[{'argument': argument}])&#xA;   return node, argument&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Currently, I'm getting the following errors based on different formatting:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;argument.default_value = [(1, 0, 0), (0, 1, 0), (0, 0, 1)]&#xA;&amp;gt;&amp;gt;&amp;gt; Failed to normalize given item of type '&amp;lt;class 'tuple'&amp;gt;', when only 'str' or 'launch.Substitution' were expected.&#xA;&#xA;argument.default_value = ['(1, 0, 0)', '(0, 1, 0)', '(0, 0, 1)']&#xA;&amp;gt;&amp;gt;&amp;gt; In the node argument.value[0] is '(' whereas it should be (1, 0, 0). &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="27039" LastEditorUserId="27039" LastEditDate="2020-09-01T11:44:48.647" LastActivityDate="2021-01-30T08:05:20.557" Title="List of tuples as argument in ROS2 launch" Tags="&lt;ros&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21106" PostTypeId="2" ParentId="21105" CreationDate="2020-09-01T11:42:27.770" Score="0" Body="&lt;p&gt;I found a solution which works yet is not perfect. When the argument value in the launch file is formatted as:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;argument.default_value = &amp;quot;['(1, 0, 0)', '(0, 1, 0)', '(0, 0, 1)']&amp;quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;the argument is passed to the node as:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;argument.value[0]&#xA;&amp;gt;&amp;gt;&amp;gt; '(1, 0, 0)'&#xA;&#xA;eval(argument.value[0])&#xA;&amp;gt;&amp;gt;&amp;gt; (1, 0, 0)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;If anyone knows a way to skip &lt;code&gt;eval(..)&lt;/code&gt; by passing Tuple directly, that'd be better.&lt;/p&gt;&#xA;" OwnerUserId="27039" LastEditorUserId="27039" LastEditDate="2020-09-02T07:49:17.417" LastActivityDate="2020-09-02T07:49:17.417" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21107" PostTypeId="1" AcceptedAnswerId="21116" CreationDate="2020-09-01T17:51:16.813" Score="1" ViewCount="40" Body="&lt;p&gt;I recently got a ATSAMC21N Xplained Pro dev board.&lt;/p&gt;&#xA;&lt;p&gt;I was planning to use &lt;code&gt;avr-g++&lt;/code&gt; and &lt;code&gt;avrdude&lt;/code&gt; to do development (I’m running Linux so Atmel Studio isn’t an option). I’ve used &lt;code&gt;avr-gcc&lt;/code&gt; and &lt;code&gt;avrdude&lt;/code&gt; in the past for Atmel development but the SAM C21 chip doesn’t seem to be on the supported target list.&lt;/p&gt;&#xA;&lt;p&gt;Does anyone have an idea about what toolchain I could use to build and deploy the program to the board?&lt;/p&gt;&#xA;" OwnerUserId="24349" LastEditorUserId="9176" LastEditDate="2020-09-02T02:50:51.980" LastActivityDate="2020-09-04T18:23:27.540" Title="Sam C21 Xplained Pro - Linux toolchain" Tags="&lt;microcontroller&gt;&lt;avr&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21110" PostTypeId="1" CreationDate="2020-09-03T13:12:14.630" Score="1" ViewCount="39" Body="&lt;p&gt;I have been working on a ground vehicle project for some time that has bunch of sensors, until now I have managed to overcome the problems I have encountered. I have used catkin_make many times and had no problem until I try to include another sensor (an imu by xsens). After including the package to the workspace I work on, when I ran the command &amp;quot;catkin_make&amp;quot; I got these errors in the error image below.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/anmYv.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/anmYv.png&quot; alt=&quot;here.&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I have done some research, and tried &amp;quot;sudo apt-get install build-essential&amp;quot; getting the response that states everything is up-to-date, nothing to be installed etc.&lt;/p&gt;&#xA;&lt;p&gt;Then I tried checking the system dependencies using the command &amp;quot;rosdep check --from-paths /home/bfd/catkin_opt/src --ignore-src&amp;quot; and saw that there was only 1 that has not been satisfied, so I used &amp;quot;rosdep install--from-paths /home/bfd/catkin_opt/src --ignore-src&amp;quot;, and I got the response &amp;quot;All dependencies have been satisfied&amp;quot;. Thinking that the problem is solved, I tried running catkin_make command on my workspace again, yet I got the same errors once again.&lt;/p&gt;&#xA;&lt;p&gt;At this point, I do not know what to do or try next. Can you help me fixing this problem or lead me to where the solution is? Thanks.&lt;/p&gt;&#xA;" OwnerUserId="27050" LastActivityDate="2021-02-01T14:00:20.033" Title="&quot;catkin_make&quot; prompts &quot;+make&quot; and &quot;recipe for target ... failed&quot; errors" Tags="&lt;ros&gt;&lt;imu&gt;&lt;linux&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21111" PostTypeId="2" ParentId="21110" CreationDate="2020-09-04T05:26:14.803" Score="0" Body="&lt;p&gt;Could these set of drivers work for you? :&#xA;&lt;a href=&quot;https://github.com/ethz-asl/ethzasl_xsens_driver&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/ethz-asl/ethzasl_xsens_driver&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;If yes clone this package inside &lt;code&gt;src&lt;/code&gt; folder  your workspace and then try to build your workspace.&lt;/p&gt;&#xA;" OwnerUserId="26696" LastActivityDate="2020-09-04T05:26:14.803" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21113" PostTypeId="1" CreationDate="2020-09-04T10:47:59.960" Score="1" ViewCount="167" Body="&lt;p&gt;I do have a land-based robot with an &lt;strong&gt;IMU&lt;/strong&gt; and a &lt;strong&gt;GNSS&lt;/strong&gt; receiver.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;From the IMU, I get the &lt;strong&gt;velocity&lt;/strong&gt; and &lt;strong&gt;acceleration&lt;/strong&gt; in both &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt; directions.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;From the GNSS receiver, I get the &lt;strong&gt;latitude&lt;/strong&gt; and &lt;strong&gt;longitude&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I want to fuse these data to get my exact position on the field. To get the most accurate position I want to use an &lt;a href=&quot;https://en.wikipedia.org/wiki/Kalman_filter#Unscented_Kalman_filter&quot; rel=&quot;nofollow noreferrer&quot;&gt;Unscented Kalman Filter&lt;/a&gt; (UKF).&lt;/p&gt;&#xA;&lt;p&gt;However, I don't really understand the concept of fusing these data. Most of the books I found just fused the IMU data and used it together with the GNSS data but by my understanding, I should get a more precise position when I fuse IMU and GNSS.&lt;/p&gt;&#xA;&lt;p&gt;Can someone explain to me the concept of doing so or has a good source/tutorial?&lt;/p&gt;&#xA;&lt;p&gt;This is for my bachelor thesis. Help would be much appreciated. Thanks!&lt;/p&gt;&#xA;" OwnerUserId="27056" LastEditorUserId="13736" LastEditDate="2020-09-05T11:45:59.870" LastActivityDate="2021-03-05T04:04:25.403" Title="Sensor fusion of GNSS and IMU using UKF" Tags="&lt;kalman-filter&gt;&lt;imu&gt;&lt;sensor-fusion&gt;&lt;gnss&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21114" PostTypeId="2" ParentId="21110" CreationDate="2020-09-04T11:53:38.277" Score="0" Body="&lt;p&gt;I have figured out the solution for the problem. I was using the driver folder directly to run the package. Instead if you are going to use the driver on this link &lt;a href=&quot;http://wiki.ros.org/xsens_mti_driver&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://wiki.ros.org/xsens_mti_driver&lt;/a&gt; , follow exactly every step through.&lt;/p&gt;&#xA;&lt;p&gt;Especially, execute this mtsdk_linux-x##_####.#.sh file as stated, and then follow the 5th step. Otherwise, you may get the same error as I did.&lt;/p&gt;&#xA;" OwnerUserId="27050" LastActivityDate="2020-09-04T11:53:38.277" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21116" PostTypeId="2" ParentId="21107" CreationDate="2020-09-04T18:23:27.540" Score="2" Body="&lt;p&gt;The SAM chips have ARM cores, so you should look compiliing with &lt;code&gt;arm-none-eabi-gcc&lt;/code&gt; and flashing/debugging with &lt;code&gt;openocd&lt;/code&gt; instead.&lt;/p&gt;&#xA;&lt;p&gt;OpenOCD is a program that communicates with debugging probes for a number of processor/microcontroller architectures, analogous to &lt;code&gt;avrdude&lt;/code&gt; for AVR. You will have to figure out how to configure openocd to talk to your board. A quick google search brought me &lt;a href=&quot;https://www.omzlo.com/articles/programming-samd21-using-atmel-ice-with-openocd&quot; rel=&quot;nofollow noreferrer&quot;&gt;this guide&lt;/a&gt;, which might point you in the right direction, although I don't have a SAM breakout board to verify it with.&lt;/p&gt;&#xA;&lt;p&gt;OpenOCD is definitely worth learning if you're going to be working with ARM chips, but you could probably also flash your code using Atmel's IDE, Atmel Studio. I shy away from using proprietary IDEs, but if you need to get up and running quickly, you could probably use it to both build and flash your project. Hope this helps.&lt;/p&gt;&#xA;&lt;p&gt;edit: I glossed over the word &amp;quot;Linux&amp;quot; in the title of your question. I believe Atmel Studio is only available for Windows, so unfortunately you're stuck using the much more versatile open source tools which are available for Linux.&lt;/p&gt;&#xA;" OwnerUserId="27059" LastActivityDate="2020-09-04T18:23:27.540" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21117" PostTypeId="1" CreationDate="2020-09-04T18:33:53.020" Score="0" ViewCount="23" Body="&lt;p&gt;Has the relation between Control and reinforcement learning been studied by the scientific community? I would like to read credible studies about each ones pros and cons when it comes to control problems.&lt;/p&gt;&#xA;&lt;p&gt;A similar question was answered in &lt;a href=&quot;https://robotics.stackexchange.com/questions/19319/control-vs-artificial-intelligence/21109?noredirect=1#comment34582_21109&quot;&gt;Control VS artificial intelligence?&lt;/a&gt; but only with opinions. Is it possible to find scientific sources?&lt;/p&gt;&#xA;" OwnerUserId="27048" LastActivityDate="2020-09-04T18:33:53.020" Title="Relation between control and reinforcement learning" Tags="&lt;control&gt;&lt;reinforcement-learning&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="21118" PostTypeId="1" CreationDate="2020-09-05T00:21:38.333" Score="0" ViewCount="27" Body="&lt;p&gt;I'm interested in quadcopter position tracking using a mix of IMU and visual navigation.&lt;/p&gt;&#xA;&lt;p&gt;I want to implement an EKF filter but what's not clear to me is how the filter would be updated using the control input.&lt;/p&gt;&#xA;&lt;p&gt;In particular I haven't seen any ESC give actual rotational speed measurements for the motors.&lt;/p&gt;&#xA;&lt;p&gt;Anyone have a suggestion for this? All the ESC I have seen are open loop and don't actually target a particular speed.&lt;/p&gt;&#xA;" OwnerUserId="21514" LastActivityDate="2020-09-05T00:21:38.333" Title="Quadcopter sensor fusion" Tags="&lt;quadcopter&gt;&lt;kalman-filter&gt;" AnswerCount="0" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21119" PostTypeId="1" CreationDate="2020-09-05T06:25:54.127" Score="1" ViewCount="50" Body="&lt;p&gt;I want to make my own CNC machine from scratch because it's cheaper to make than buy a premade one.  I noticed that some machines go for tens of thousands of dollars and I cannot understand how they can cost that much to build.  I am not afraid to learn what I need to learn to make one.&lt;/p&gt;&#xA;&lt;p&gt;I can do basic Arduino programming and stuff.  I understand the concept of G-code, its not that hard.  The thing I cannot understand is how you go from G-code to moving the stepper motors.&lt;/p&gt;&#xA;&lt;p&gt;How does a controller translate a move &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; 20 units to moving the stepper &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; amount of steps and keep dimensional accuracy?  If the CAD G-code says move 200 mm in the &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; direction, how to you translate the G-code to tell the stepper motor that 200 mm?&lt;/p&gt;&#xA;&lt;p&gt;Any help is greatly appreciated. If you need clarification, please ask in the comments.&lt;/p&gt;&#xA;" OwnerUserId="27060" LastEditorUserId="9176" LastEditDate="2020-09-05T17:10:51.867" LastActivityDate="2020-09-09T21:14:31.940" Title="How to make a CNC machine from scratch?" Tags="&lt;stepper-motor&gt;&lt;software&gt;&lt;programming-languages&gt;&lt;cnc&gt;&lt;stepper-driver&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="21120" PostTypeId="2" ParentId="21113" CreationDate="2020-09-05T21:30:28.723" Score="0" Body="&lt;p&gt;How did you come to the conclusion that you will need an UKF? Make sure you understand the math behind a Kalman Filter first and understand why you would need an EKF or UKF over a normal KF. This article describes the math behind a Kalman Filter using an IMU but you can add more sensors to this setup..&#xA;&lt;a href=&quot;https://www.bzarg.com/p/how-a-kalman-filter-works-in-pictures/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.bzarg.com/p/how-a-kalman-filter-works-in-pictures/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Also, what platform (hardware/software) do you plan to implement your project in?&lt;/p&gt;&#xA;" OwnerUserId="27064" LastActivityDate="2020-09-05T21:30:28.723" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21121" PostTypeId="1" CreationDate="2020-09-05T21:49:17.000" Score="1" ViewCount="17" Body="&lt;p&gt;Alright, I'm working on a small Arduino script that determines orientation using a a gyroscope and a quaternion. My hardware:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;LSM9DS1 IMU (Gyroscope, Accelerometer, Magnetometer)&lt;/li&gt;&#xA;&lt;li&gt;Teensy 4.0&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;My basic flow is:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Set gyroscope to measure -2000&amp;lt; x &amp;lt;2000 deg/s&lt;/li&gt;&#xA;&lt;li&gt;Calibrate each axis by taking 1000 measurements and dividing the summed total of those measurements by the number of measurements taken to obtain the average value value. This value is then subtracted on each subsequent measurement of the gyroscope.&lt;/li&gt;&#xA;&lt;li&gt;Calculate the change time differential of the quaternion&lt;/li&gt;&#xA;&lt;li&gt;Propagate the previous quaternion using that time differential (ensuring that I normalize at each point to ensure the quaternion magnitude is always 1)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;When rotating on a single axis at a time, the accuracy is pretty good. Even at high rotation rates, the values of the quaternion will return to their original, post-cal values.&lt;/p&gt;&#xA;&lt;p&gt;BUT, when rotating on multiple axes at a time, the accuracy quickly deteriorates. Like picking up the board and moving it in whatever directions, then setting it back down in its (sort of) original position, the quaternion is absolutely all over the place.&lt;/p&gt;&#xA;&lt;p&gt;I am fairly confident I've gotten the algorithm for calculating the quaternion correct. Looking at the calculated gyro values, they don't seem to be improperly scaled, clipped, or railing.&lt;/p&gt;&#xA;&lt;p&gt;I am only using dead reckoning, understand that it can cause error, and know that I'll need to do some sort of correction if I want things to be really accurate. It just seems like somethings wrong. Or Im not understanding something about how the gyro works, or missing something about how error accumulates in the algorithm.&lt;/p&gt;&#xA;&lt;p&gt;In general, is there something about multi-axis movement vs single axis movement that causes quaternion propagation to deteriorate so quickly?&lt;/p&gt;&#xA;&lt;p&gt;Anyway, heres the code:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;Wire.h&amp;gt;&#xA;#include &amp;quot;SparkFunMPL3115A2.h&amp;quot;&#xA;&#xA;#include &amp;lt;LSM9DS1_Registers.h&amp;gt;&#xA;#include &amp;lt;LSM9DS1_Types.h&amp;gt;&#xA;#include &amp;lt;SparkFunLSM9DS1.h&amp;gt;&#xA;&#xA;// CHANGE TO ALLOW FOR VARYING LOOP SIZE&#xA;&#xA;//----------------------------------------------------------------------------&#xA;// STATE LOOP DEFINITIONS&#xA;//----------------------------------------------------------------------------&#xA;unsigned long mission_time;&#xA;unsigned long flight_control_loop_delta = 50000;&#xA;unsigned long flight_control_loop_time = 0;&#xA;unsigned long flight_data_loop_delta = 10000;&#xA;unsigned long flight_data_loop_time = 0;&#xA;unsigned long flight_tx_loop_delta = 200000;&#xA;unsigned long flight_tx_loop_time = 0;&#xA;&#xA;&#xA;//----------------------------------------------------------------------------&#xA;// FLIGHT CONTROL DEFINITIONS&#xA;//----------------------------------------------------------------------------&#xA;boolean abort_mission = 0;&#xA;unsigned int current_state;&#xA;unsigned int queued_state;&#xA;const String possible_states[11] = {&amp;quot;ground_idle&amp;quot;, // ---------- 1&#xA;                                    &amp;quot;pad&amp;quot;, // ------------------ 2&#xA;                                    &amp;quot;abort&amp;quot;, // ---------------- 3&#xA;                                    &amp;quot;powered_ascent&amp;quot;, // ------- 4 &#xA;                                    &amp;quot;coast&amp;quot;, // ---------------- 5&#xA;                                    &amp;quot;arcing_over&amp;quot;, // ---------- 6 &#xA;                                    &amp;quot;drogue_deploy&amp;quot;, // -------- 7&#xA;                                    &amp;quot;drogue_descent&amp;quot;, // ------- 8&#xA;                                    &amp;quot;main_deploy&amp;quot;, // ---------- 9&#xA;                                    &amp;quot;main_descent&amp;quot;, // --------- 10&#xA;                                    &amp;quot;landed&amp;quot;}; // -------------- 11&#xA;&#xA;&#xA;//----------------------------------------------------------------------------&#xA;// FLIGHT DATA DEFINITIONS&#xA;//----------------------------------------------------------------------------&#xA;&#xA;const float deg_to_rad = PI/180;&#xA;const int cal_reading_count = 1000;&#xA;&#xA;float gyro_x, gyro_y, gyro_z;&#xA;float gyro_x_cal = 0, gyro_y_cal = 0, gyro_z_cal = 0;&#xA;&#xA;float q [4] = {1, 0, 0, 0};&#xA;float omega [16] = {};&#xA;float q_dot [4] = {0, 0, 0, 0};&#xA;&#xA;&#xA;//----------------------------------------------------------------------------&#xA;// HARDWARE DEFINITIONS&#xA;//----------------------------------------------------------------------------&#xA;&#xA;int pin_green = 2, pin_red = 3, pin_blue = 4, pin_yellow = 5;&#xA;LSM9DS1 imu;&#xA;&#xA;&#xA;//----------------------------------------------------------------------------&#xA;// BEGIN SETUP&#xA;//----------------------------------------------------------------------------&#xA;void setup() {&#xA;  Serial.begin(115200); // start serial at a high baud rate&#xA;  Wire.begin(); // turn on i2c&#xA;&#xA;  imu.settings.device.commInterface = IMU_MODE_I2C;&#xA;  imu.settings.device.mAddress = 0x1E;&#xA;  imu.settings.device.agAddress = 0x6B;&#xA;  if (!imu.begin())&#xA;  {&#xA;    Serial.println(&amp;quot;Failed to communicate with LSM9DS1.&amp;quot;);&#xA;    Serial.println(&amp;quot;Double-check wiring.&amp;quot;);&#xA;    Serial.println(&amp;quot;Default settings in this sketch will &amp;quot; \&#xA;                  &amp;quot;work for an out of the box LSM9DS1 &amp;quot; \&#xA;                  &amp;quot;Breakout, but may need to be modified &amp;quot; \&#xA;                  &amp;quot;if the board jumpers are.&amp;quot;);&#xA;    while (1)&#xA;      ;&#xA;  }&#xA;  imu.setGyroScale(2000);&#xA;  &#xA;  queued_state = &amp;quot;ground_idle&amp;quot;;&#xA;  current_state = 1;&#xA;  setup_sensors();&#xA;}&#xA;&#xA;&#xA;//----------------------------------------------------------------------------&#xA;// BEGIN LOOP&#xA;//----------------------------------------------------------------------------&#xA;void loop() {&#xA;&#xA;  // get the mission time at the front of the loop for comparison in the switch&#xA;  mission_time = micros();&#xA;  &#xA;  &#xA;  //----------------------------------------------------------------------------&#xA;  // BEGIN SWITCH&#xA;  //----------------------------------------------------------------------------&#xA;  switch(current_state) {&#xA;    &#xA;    &#xA;    //----------------------------------------------------------------------------&#xA;    // GROUND STATE&#xA;    //----------------------------------------------------------------------------&#xA;    case 1:&#xA;      // run the data loop to collect most recent flight data&#xA;      if (mission_time-flight_data_loop_time &amp;gt;= flight_data_loop_delta) {&#xA;//        Serial.print(&amp;quot;Data loop: &amp;quot;);&#xA;        Serial.println(mission_time-flight_data_loop_time);&#xA;        flight_data_loop_time = mission_time;&#xA;        collect_sensor_data(flight_data_loop_time);&#xA;        calc_omega();&#xA;        calc_quart_dot();&#xA;        calc_orientation();&#xA;        print_quats();&#xA;//        print_gyro();&#xA;      }&#xA;    &#xA;    //----------------------------------------------------------------------------&#xA;    // UNDEFINED&#xA;    //----------------------------------------------------------------------------&#xA;  } &#xA;}&#xA;&#xA;&#xA;//----------------------------------------------------------------------------&#xA;// FUNCTION DEFINITIONS&#xA;//----------------------------------------------------------------------------&#xA;void setup_sensors()&#xA;{&#xA;  calibrate_sensors();&#xA;}&#xA;&#xA;void collect_sensor_data(long collection_time)&#xA;{&#xA;&#xA;&#xA;&#xA;  imu.readGyro();&#xA;  gyro_x = (imu.calcGyro(imu.gx)-gyro_x_cal)*deg_to_rad;&#xA;  gyro_y = (imu.calcGyro(imu.gy)-gyro_y_cal)*deg_to_rad;&#xA;  gyro_z = (imu.calcGyro(imu.gz)-gyro_z_cal)*deg_to_rad;&#xA;&#xA;  &#xA;&#xA;  // if data_counter is less than the maximum, add data to the arrays&#xA;}&#xA;&#xA;void calibrate_sensors() {&#xA;  for (int i = 0; i &amp;lt; cal_reading_count; i++) {&#xA;    delay(5);&#xA;    &#xA;   &#xA;    imu.readGyro();&#xA;    &#xA;    &#xA;&#xA;    gyro_x_cal += imu.calcGyro(imu.gx);&#xA;    gyro_y_cal += imu.calcGyro(imu.gy);&#xA;    gyro_z_cal += imu.calcGyro(imu.gz);&#xA;  }&#xA;  &#xA;&#xA;  gyro_x_cal = gyro_x_cal/float(cal_reading_count);&#xA;  gyro_y_cal = gyro_y_cal/float(cal_reading_count);&#xA;  gyro_z_cal = gyro_z_cal/float(cal_reading_count);&#xA;}&#xA;&#xA;void calc_orientation()&#xA;{&#xA;  float delta = flight_data_loop_delta/1000000.0;&#xA;  q[0] += q_dot[0]*delta;&#xA;  q[1] += q_dot[1]*delta;&#xA;  q[2] += q_dot[2]*delta;&#xA;  q[3] += q_dot[3]*delta;&#xA;&#xA;  float q_norm = sqrt(sqr(q[0])+sqr(q[1])+sqr(q[2])+sqr(q[3]));&#xA;  &#xA;  q[0] = q[0]/q_norm;&#xA;  q[1] = q[1]/q_norm;&#xA;  q[2] = q[2]/q_norm;&#xA;  q[3] = q[3]/q_norm;  &#xA;}&#xA;&#xA;void calc_omega()&#xA;{&#xA;  omega [0] = 0;&#xA;  omega [1] = gyro_x;&#xA;  omega [2] = gyro_y;&#xA;  omega [3] = gyro_z;&#xA;  omega [4] = -gyro_x;&#xA;  omega [5] = 0;&#xA;  omega [6] = -gyro_z;&#xA;  omega [7] = gyro_y;&#xA;  omega [8] = -gyro_y;&#xA;  omega [9] = gyro_z;&#xA;  omega [10] = 0;&#xA;  omega [11] = -gyro_x;&#xA;  omega [12] = -gyro_z;&#xA;  omega [13] = -gyro_y;&#xA;  omega [14] = gyro_x;&#xA;  omega [15] = 0;&#xA;}&#xA;&#xA;void calc_quart_dot()&#xA;{&#xA;  q_dot[0] = -.5*float(omega[0]*q[0] + omega[1]*q[1] + omega[2]*q[2] + omega[3]*q[3]);&#xA;  q_dot[1] = -.5*float(omega[4]*q[0] + omega[5]*q[1] + omega[6]*q[2] + omega[7]*q[3]);&#xA;  q_dot[2] = -.5*float(omega[8]*q[0] + omega[9]*q[1] + omega[10]*q[2] + omega[11]*q[3]);&#xA;  q_dot[3] = -.5*float(omega[12]*q[0] + omega[13]*q[1] + omega[14]*q[2] + omega[15]*q[3]);&#xA;}&#xA;&#xA;&#xA;float sqr(float num)&#xA;{&#xA;  return num*num;&#xA;}&#xA;&#xA;void print_quats()&#xA;{&#xA;  Serial.print(q[0]);&#xA;  Serial.print(&amp;quot;, &amp;quot;);&#xA;  Serial.print(q[1]);&#xA;  Serial.print(&amp;quot;, &amp;quot;);&#xA;  Serial.print(q[2]);&#xA;  Serial.print(&amp;quot;, &amp;quot;);&#xA;  Serial.print(q[3]);&#xA;  Serial.println();&#xA;}&#xA;&#xA;void print_gyro() {&#xA;  Serial.print(gyro_x);&#xA;  Serial.print(&amp;quot;, &amp;quot;);&#xA;  Serial.print(gyro_y);&#xA;  Serial.print(&amp;quot;, &amp;quot;);&#xA;  Serial.println(gyro_z);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Hope this is enough info to help out. Thanks!&lt;/p&gt;&#xA;" OwnerUserId="27065" LastActivityDate="2020-09-05T21:49:17.000" Title="What could cause quaternion error to go up drastically when a gyroscope is rotated on more than one axis at a time?" Tags="&lt;imu&gt;&lt;gyroscope&gt;&lt;rotation&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21122" PostTypeId="1" CreationDate="2020-09-06T15:51:59.640" Score="0" ViewCount="8" Body="&lt;p&gt;So I do have a wheeled robot and I want to fuse position data with odometry data.&lt;/p&gt;&#xA;&lt;p&gt;Someone suggested using the position encoded in &lt;a href=&quot;https://en.wikipedia.org/wiki/ECEF&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;strong&gt;ECEF&lt;/strong&gt;&lt;/a&gt; rather than using the &lt;strong&gt;LAT/LON/Height&lt;/strong&gt; information I get from the GNSS receiver for fusing with a UKF and then converting back.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;The questions now are&lt;/strong&gt;:&lt;br /&gt;&#xA;What are the kee advantages by doing so?&lt;br /&gt;&#xA;And how would you suggest to do it, are there any papers about this?&lt;br /&gt;&#xA;Do I need to convert the odometry data too, and if yes, to what?&lt;/p&gt;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="27056" LastActivityDate="2020-09-06T15:51:59.640" Title="ECEF postion vs. LAT/LON/Height position with odometry" Tags="&lt;localization&gt;&lt;odometry&gt;&lt;sensor-fusion&gt;&lt;precise-positioning&gt;&lt;gnss&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21127" PostTypeId="1" AcceptedAnswerId="21130" CreationDate="2020-09-07T10:38:37.220" Score="0" ViewCount="31" Body="&lt;p&gt;I already asked this question in the mathoverflow forum, but no one could answer. Probably it is not a question of mathematics but robotics.&lt;/p&gt;&#xA;&lt;p&gt;I'm struggling with the definitions and differences between a non-holonomic and a linear control systems.&lt;/p&gt;&#xA;&lt;p&gt;I'm working with a phase space &lt;span class=&quot;math-container&quot;&gt;$P\subset R^{m}$&lt;/span&gt; and a control space &lt;span class=&quot;math-container&quot;&gt;$U\subset R^{l}$&lt;/span&gt; and my control system&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\dot{p}=f(p,u)$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;is of the form&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\dot{p}=\sum^{l}_{i=1}u_{i}P_{i}(p)$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;where &lt;span class=&quot;math-container&quot;&gt;$P_{1},\dots,P_{l}$&lt;/span&gt; are smooth vector fields on &lt;span class=&quot;math-container&quot;&gt;$P$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;In Frederic Jeans book Definition 1.1 a control system of this form is called non-holonomic. I already read that there is the adjective &amp;quot;linear&amp;quot; which would fit better in my opinion since whenever I use the form of the control system I use the fact that it depends linearly on the control.&lt;/p&gt;&#xA;&lt;p&gt;Can someone advice me literature where it is stated like that?&lt;/p&gt;&#xA;&lt;p&gt;When I read more about non-holonomicity I found that it is a question whether the vectorfields &lt;span class=&quot;math-container&quot;&gt;$P_{i}$&lt;/span&gt; span the whole &lt;span class=&quot;math-container&quot;&gt;$TP$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Can someone explain how linearity and non-holonomicity are connected?&lt;/p&gt;&#xA;" OwnerUserId="26062" LastActivityDate="2020-09-07T22:06:26.293" Title="difference between non-holonomic and linear control systems" Tags="&lt;control&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21128" PostTypeId="1" CreationDate="2020-09-07T11:44:16.607" Score="1" ViewCount="87" Body="&lt;p&gt;I am trying to make the Create2 dance a specific choreography. I´m not using the sensors, I just let it drive and turn for a specific amount of time. In general it works fine.&lt;/p&gt;&#xA;&lt;p&gt;But after working with it for a while, it suddenly doesn't do a full turn any more. It seems like something changes and than driving in a specific angle and turning in place takes a bit longer or shorter. It also happens, that Roomba doesn't drive straight any more but slightly turns to the right. And than it changes again and it´s back to the first configuration.&lt;/p&gt;&#xA;&lt;p&gt;I tried changing the baudrate, I did manual resets, I charged Roomba and tried in full battery power and low battery power but I can´t find an explanation. The bug occurs without changing code or anything.&#xA;Does anyone have an idea, what the problem might be?&lt;/p&gt;&#xA;&lt;p&gt;Another problem that I ran into: I let Create2 play songs. Most of the time it works. But from time to time I get some weird issues. The tune doesn't play until the end but lingers on one note for a moment. Than the tune stops. Often the next song won´t play at all. Next time I run the code it works just fine.&#xA;Any ideas?&lt;/p&gt;&#xA;&lt;p&gt;The whole thing makes me go crazy because it messes up the whole choreography and makes it totally unreliable...&lt;/p&gt;&#xA;&lt;p&gt;My set up:&#xA;Arduino Nano connected to serial port of Create2.&#xA;Arduino-Create2 Libary &lt;a href=&quot;https://github.com/brinnLabs/Create2&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/brinnLabs/Create2&lt;/a&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;// Include Create2 libary&#xA;#include &amp;lt;iRobotCreate2.h&amp;gt;&#xA;&#xA;// connect Roomba TX to pin 10 and Roomba RX to pin 11, &#xA;// connect Roomba BaudRateChange to pin 5&#xA;iRobotCreate2 roomba(true, 10,11,5);&#xA;&#xA;// set pins for LED and Startbutton:&#xA;const int ledPin =  13; &#xA;const int buttonPin = 4; &#xA;int incomingByte = 0;   &#xA;&#xA;// variable for reading the Startbutton status&#xA;int buttonState = 0;   &#xA;&#xA;// full rotation of roomba with VEL 100&#xA;int fullspin100 = 7319;&#xA;int fullspin200 = 3659;&#xA;int fullspin300 = 2439;&#xA;&#xA;&#xA;void setup(){&#xA;  &#xA;  Serial.begin(115200);&#xA;  &#xA;  // set pinmode for LED and Startbutton&#xA;  pinMode(ledPin, OUTPUT);&#xA;  pinMode(buttonPin, INPUT_PULLUP); &#xA;  &#xA;  // reset BaudRate to 19200&#xA;  roomba.resetBaudRate();&#xA;  delay(2000);&#xA;  &#xA;  // start communication and safe mode&#xA;  roomba.start();&#xA;  roomba.safeMode();&#xA;  delay(1000); &#xA;&#xA;  // song nr. 1&#xA;  Notes songNotes[16];&#xA;  songNotes[0].note = 31;&#xA;  songNotes[1].note = 43;&#xA;  songNotes[2].note = 31;&#xA;  songNotes[3].note = 43;&#xA;  songNotes[4].note = 55;&#xA;  songNotes[5].note = 67;&#xA;  songNotes[6].note = 79;&#xA;  songNotes[7].note = 91;&#xA;  songNotes[8].note = 103;&#xA;  songNotes[9].note = 91;&#xA;  songNotes[10].note = 79;&#xA;  songNotes[11].note = 67;&#xA;  songNotes[12].note = 55;&#xA;  songNotes[13].note = 43;&#xA;  songNotes[14].note = 31;&#xA;  songNotes[15].note = 103;&#xA;  &#xA;  songNotes[0].duration = 8;&#xA;  songNotes[1].duration = 8;&#xA;  songNotes[2].duration = 8;&#xA;  songNotes[3].duration = 8;&#xA;  songNotes[4].duration = 8;&#xA;  songNotes[5].duration = 8;&#xA;  songNotes[6].duration = 8;&#xA;  songNotes[7].duration = 8;&#xA;  songNotes[8].duration = 8;&#xA;  songNotes[9].duration = 8;&#xA;  songNotes[10].duration = 8;&#xA;  songNotes[11].duration = 8;&#xA;  songNotes[12].duration = 8;&#xA;  songNotes[13].duration = 8;&#xA;  songNotes[14].duration = 8; &#xA;  songNotes[15].duration = 8;&#xA;  &#xA;  roomba.createSong(1, 16, songNotes);&#xA;&#xA;  // turn on PowerLed red to indicate that roomba is ready for dancing &#xA;  roomba.setPowerLEDs(255, 255);&#xA;  delay(10);  &#xA;} &#xA;&#xA;void loop(){&#xA;  // listen to input from the button&#xA;  buttonState = digitalRead(buttonPin);&#xA;  &#xA;  // if button is pressed, start dancing&#xA;  if (buttonState == LOW) {&#xA;    digitalWrite(ledPin, LOW);&#xA;    dance();&#xA;    &#xA;  } &#xA;  if (buttonState == HIGH) {&#xA;   digitalWrite(ledPin, HIGH);  &#xA;  } &#xA;} &#xA;&#xA;&#xA;void dance(){&#xA;&#xA;  roomba.turnCW(100, 0); &#xA;  delay(fullspin100);&#xA;  roomba.drive(0, 0);&#xA;  delay(1000);&#xA;&#xA;  roomba.turnCCW(100, 0); &#xA;  delay(fullspin100);&#xA;  roomba.drive(0, 0);&#xA;  delay(1000);&#xA;&#xA;  roomba.turnCW(200, 0); &#xA;  delay(fullspin200);&#xA;  roomba.drive(0, 0);&#xA;  delay(1000);&#xA;&#xA;  roomba.turnCCW(200, 0); &#xA;  delay(fullspin200);&#xA;  roomba.drive(0, 0);&#xA;  delay(1000);&#xA;&#xA;  roomba.turnCW(300, 0); &#xA;  delay(fullspin300);&#xA;  roomba.drive(0, 0);&#xA;  delay(1000);&#xA;&#xA;  roomba.turnCCW(300, 0); &#xA;  delay(fullspin300);&#xA;  roomba.drive(0, 0);&#xA;  delay(1000);&#xA;&#xA;  roomba.playSong(1);&#xA;  delay(1300);&#xA;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="27074" LastEditorUserId="17029" LastEditDate="2020-09-07T21:43:19.150" LastActivityDate="2020-11-17T15:03:48.170" Title="irobot create 2: random changes in driving speed" Tags="&lt;mobile-robot&gt;&lt;control&gt;&lt;arduino&gt;&lt;irobot-create&gt;&lt;navigation&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21130" PostTypeId="2" ParentId="21127" CreationDate="2020-09-07T22:06:26.293" Score="1" Body="&lt;p&gt;I have to admit, I have no experience with non-holomonic CONTROL System. I have dealt with non-holomonic MECHANICAL systems.&lt;/p&gt;&#xA;&lt;p&gt;As defined &lt;a href=&quot;http://www.dis.uniroma1.it/%7Eoriolo/cns/cns_slides.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;, a non-holominc mechanical system annot move in arbitrary directions inits configuration space. A mundane example is a car. It can occupy and X, Y position and Z rotation on a flat surface, but it cannot move laterally in the Y direction. It has to manuver to get there.&lt;/p&gt;&#xA;&lt;p&gt;In mobile robotics, simplisticly this problem is dealt with at a higher level then the closed loop control system. It is considered a constraint for the path/trajectory planner (open loop). After the path/trajectory has been planned, the setpoints are given to the closed loop control system (cyclically), which can be a linear control system.&lt;/p&gt;&#xA;&lt;p&gt;I understand that there is research in Optimal Control Theory, which includes the non holomonic planning in the closed loop as an optimization problem, e.g. &lt;a href=&quot;https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.390.21&amp;amp;rep=rep1&amp;amp;type=pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; paper and &lt;a href=&quot;http://www.cds.caltech.edu/%7Ekoon/research/optimal/optimalKM.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this paper&lt;/a&gt;, but i cannot offer any insight on the intricacies of these methods.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-09-07T22:06:26.293" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21131" PostTypeId="1" CreationDate="2020-09-08T06:07:48.693" Score="0" ViewCount="49" Body="&lt;p&gt;I am trying to understand the technology/procedure related to &lt;strong&gt;one of the trivial functions&lt;/strong&gt; of a modern self-driving cars.&lt;/p&gt;&#xA;&lt;p&gt;Let us consider the example of Tesla's Model S (or any).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The car is parked at the garage and needs to get get its batteries charged at the local charging station/gas station. It needs to self-drive to this station (say &lt;strong&gt;Monty's&lt;/strong&gt;) and then, on reaching there, find where the charging dock is, and finally, align itself such that the charging port on the car's body, is precisely in front of the charging hose (or cable).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;For this, the Model-S needs to do the following:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Locate Monty's and find a way to self-drive there.&lt;/li&gt;&#xA;&lt;li&gt;Stop at the station and align its charging port to the charging dock's hose.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;What is the method(s) used by the robots/cars to achieve these two functions ?&lt;/p&gt;&#xA;" OwnerUserId="26766" LastActivityDate="2021-02-05T09:04:10.463" Title="How does a Tesla or any self-driving car self-drive to a remote place and align itself to an object?" Tags="&lt;localization&gt;&lt;navigation&gt;&lt;autonomous-car&gt;&lt;self-driving&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21132" PostTypeId="2" ParentId="21131" CreationDate="2020-09-08T07:26:59.177" Score="0" Body="&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;High level path planning is present in any navigation system. You can select a goal and a start position (or your current position) and a (drivable) path will be planned by any navigation system, incl. google maps.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Tesla cars use a neural network based control system. Video and radar feeds are combined and a semantic segmented map of the environment is available. This will identify a charger for example. Aligning to that charger, technology-wise could be done by a neural network (being trained by a vast amount of labeled charging videos, or by some classical trajectory planing application for non-holomonic systems (a car is a non-holomonic system). I do not know which option is used by Tesla.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-09-08T07:26:59.177" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21135" PostTypeId="1" CreationDate="2020-09-09T15:49:53.370" Score="0" ViewCount="13" Body="&lt;p&gt;Are there some papers and/or works that describe improvements for the FastSLAM2.0 algorithm? I'm particularly interested in the following areas:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The map is completely unknown at the beginning of the exploration&lt;/li&gt;&#xA;&lt;li&gt;The map is a fixed track (e.g a racing circuit)&lt;/li&gt;&#xA;&lt;li&gt;The landmark observations are much noisier than the motion measurements, with a non-negligible number of outlier detections&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="24189" LastActivityDate="2020-09-09T15:49:53.370" Title="Improvements over FastSLAM2.0" Tags="&lt;slam&gt;&lt;localization&gt;&lt;mapping&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21136" PostTypeId="2" ParentId="21128" CreationDate="2020-09-09T17:42:37.733" Score="0" Body="&lt;p&gt;Looking at your code quickly, it looks like you are sending velocity commands and then waiting for some amount of time to execute your motions, without using any encoder feedback to verify the robot is moving the amount you expect. I would suggest that you implement a control loop to make your movements more accurate. I suspect a simple PI controller would get you where you need to be, though then your timings might not work out. You'd need to figure out a way to synchronize with your external track.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Please note that I am an iRobot employee, but the postings on this site are my own and don't necessarily represent iRobot's positions, strategies, or opinions.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="7665" LastActivityDate="2020-09-09T17:42:37.733" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21137" PostTypeId="1" AcceptedAnswerId="21139" CreationDate="2020-09-09T19:56:47.270" Score="0" ViewCount="44" Body="&lt;p&gt;Seen in &lt;a href=&quot;https://medium.com/@GDurendal/i-created-an-a-i-clone-of-jesus-4263339c327&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; story, and in * many * others relating to AI and robots (determined via google image search...)&lt;/p&gt;&#xA;&lt;p&gt;What build is this and it's origin?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/9678H.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9678H.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="27084" LastActivityDate="2020-09-09T20:30:52.727" Title="Identify this robot?" Tags="&lt;identification&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21138" PostTypeId="1" CreationDate="2020-09-09T20:19:56.827" Score="0" ViewCount="32" Body="&lt;p&gt;I see in the realm of app/web dev theres quite a few books out there to detail on system design templates, best practices and concepts. For example senior software engineers are often asked to design the backend of a simple app&lt;/p&gt;&#xA;&lt;p&gt;Are there such books in robotics that covers system design? I use ROS mostly these days, and it feels like the bulk of the design is builtin or forced on you by the packages you use as well as the ROS REPS. However, even ROS has right and wrong way of system design carried out by the end user.&lt;/p&gt;&#xA;" OwnerUserId="335" LastActivityDate="2020-09-09T20:19:56.827" Title="system design books for robot software" Tags="&lt;ros&gt;&lt;design&gt;&lt;books&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21139" PostTypeId="2" ParentId="21137" CreationDate="2020-09-09T20:30:52.727" Score="3" Body="&lt;p&gt;The robot is called Alter. It is part of the robot exhibit at the Miraikan museum in Tokio. It seems from &lt;a href=&quot;https://www.miraikan.jst.go.jp/en/research/facilities/AndroidALTER/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this website&lt;/a&gt;, that it has been created by Ikegami Takashi, specially for the exhibit, in order to explore human interaction by mimicking human poses.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-09-09T20:30:52.727" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21140" PostTypeId="2" ParentId="21119" CreationDate="2020-09-09T21:14:31.940" Score="2" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;How does a controller translate a move x 20 units to moving the stepper x amount of steps and keep dimensional accuracy? If the CAD G-code says move 200 mm in the x direction, how to you translate the G-code to tell the stepper motor that 200 mm?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The G-Code interpreter interprets the motion command. It applies some basic transformations on it to make sure that all coordinates in the motion buffer are in the same coordinate system. Assuming it is G01 (linear interpolation) X 200, The interpreter will place the appropriate command to the motion buffer. Please note that there is a difference between currently executed command and interpreted command. The difference is a lookahead, or a motion command buffer with several hundreds of commands (in case of industrial high-end CNC machines).&lt;/p&gt;&#xA;&lt;p&gt;The trajectories are planned by evaluating machine dynamics (the trajectory generator is aware of the maximum velocities and acceleration of each axis). So if the max velocity of your CNC is 5000 m/min and you have set the F paramter for your G01 to 8000 your machine will accelerate to 5000 and keep that velocity until possible or set otherwise.&lt;/p&gt;&#xA;&lt;p&gt;There are some advanced transformation functions (optionally) applied, like tool radius compensations, etc.&lt;/p&gt;&#xA;&lt;p&gt;At this point there is a trajectory in form of a spline curve with attached velocity/acceleration profiles planned for the entire lookahead buffer. This spline is then discretized to achieve the next reference point for the closed loop controls (position, velocity and torque control loops on an industrial CNC machine) or just a stepper motor on a hobby CNC.So if you have a linear motion on the x axis, the spline will be only a line segment from the previous value in the motion buffer to X200. If the motion buffer is empty, i.e. this is the first command the current position will be used to start the line.&lt;/p&gt;&#xA;&lt;p&gt;There is another transformation here. The industrial system measure current position in encoder ticks, the hobby systems in stepper motor steps. There has to be a transformation function available to convert from ticks or steps to mm and vice-versa. This comes from the geometrical model of the machine and includes transmission ratios of gearboxes, ballscrew drives or belt drives. This is a design parameter of the machine and is included as parameter for the software. More advanced functions, like compensating for belt elasticity and/or backlash are also common. So 200 mm might translate to 2 000 000 encoder ticks or steps.&lt;/p&gt;&#xA;&lt;p&gt;For a stepper motor quite simply the missing number of steps are calculated and executed. So if you are at x100 mm you will need to execute 1 000 000 steps. For a stepper motor without an encoder you have to count the steps travelled and use this count instead of an encoder position reading. If you loos count (e.g turn off machine) there is a reference position with a mechanical switch at one end of the axis. You drive to that end and reset count to 0 when you hit the switch.&lt;/p&gt;&#xA;&lt;p&gt;For a closed loop system and error signal is created between current and target position for the first control loop, and cascaded error signals including feed forward reference signals for the velocity and torque control loops. Also here there might be a reference position, or you might have absolute encoders, which do not need a reference position.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-09-09T21:14:31.940" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21141" PostTypeId="2" ParentId="16535" CreationDate="2020-09-10T02:07:13.830" Score="0" Body="&lt;p&gt;According to what I was taught in physics class, the convention Leonhard Euler introduced in the 1700s was YZY Eulers -- but the phrase &amp;quot;Euler Angles&amp;quot; is commonly applied to any of the 12 rotation order conventions mentioned by Peter Corke.&lt;/p&gt;&#xA;&lt;p&gt;At my company we used to always use XYZ or ZYX rotation order, but we have discovered that using something like YZY is more intuitive.  Suppose you have some type of member (say the forearm of an arm mechanism) that in its default configuration points in the Y-direction.  If you consider a north pole to lie on the +Y axis, YZY rotation corresponds to a roll, followed by a change in latitude, followed by a change in longitude.  If I can envision the orientation I want to achieve, I can guess its roll, latitude and longitude; or if the forearm is already at some orientation I can predict what will happen when I manipulate roll, latitude and longitude sliders.  On the other hand, if the forearm is far from the default orientation, I have no idea what its X,Y,Z Eulers will be or what changes in one of those angles will do to the orientation.&lt;/p&gt;&#xA;" OwnerUserId="27085" LastActivityDate="2020-09-10T02:07:13.830" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21142" PostTypeId="1" AcceptedAnswerId="21145" CreationDate="2020-09-10T06:15:59.053" Score="2" ViewCount="61" Body="&lt;p&gt;I'm considering Aero-Astro grad school and am looking into acquiring a drone hardware platform to implement GNC/ PNT/ autonomy papers like those I might see from, e.g., &lt;a href=&quot;http://web.stanford.edu/%7Egracegao/publications.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;the Navigation and Autonomous Vehicles&lt;/a&gt; group at Stanford, the &lt;a href=&quot;https://groups.csail.mit.edu/rrg/index.php?n=Main.Research&quot; rel=&quot;nofollow noreferrer&quot;&gt;Robust Robotics&lt;/a&gt; group at MIT or the &lt;a href=&quot;http://groups.csail.mit.edu/mers/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Model Based Robotics Systems&lt;/a&gt; group at MIT. My current plan is to take a PX4/Ardupilot based drone and modify the code as needed to implement the concepts of a given paper.&lt;/p&gt;&#xA;&lt;p&gt;Which of these firmware stacks, if any, is more popular in aerial GNC/PNT/autonomy research environments, and beyond algorithms themselves, are any kinds of low-level/ infrastructural modifications made to the firmware stack? When implementing a new idea for a given paper, do researchers in this space generally start by modifying the public repo, or do they have their own forks with some levels of improved infrastructure, broadly defined, that they use as a starting point?&lt;/p&gt;&#xA;" OwnerUserId="27087" LastEditorUserId="27087" LastEditDate="2020-09-10T08:46:05.770" LastActivityDate="2020-09-10T17:48:36.293" Title="What flight firmware stack is most common in aerial robotics research environments?" Tags="&lt;quadcopter&gt;&lt;navigation&gt;&lt;software&gt;&lt;research&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21143" PostTypeId="2" ParentId="17873" CreationDate="2020-09-10T10:24:26.437" Score="2" Body="&lt;p&gt;Here is a &lt;a href=&quot;https://arxiv.org/pdf/1708.05551&quot; rel=&quot;nofollow noreferrer&quot;&gt;paper&lt;/a&gt; on the subject.  By doing the proper maths with the SO(2) Lie group to represent the angle, they show that the very simple approach of wrapping the predicted state angle to &lt;span class=&quot;math-container&quot;&gt;$[-\pi, \pi)$&lt;/span&gt; with&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\mod(\alpha + \pi, 2 \pi)-\pi&#xA;$$&lt;/span&gt;&#xA;is equivalent, so you don't have to worry about Lie algebras.&lt;/p&gt;&#xA;" OwnerUserId="27089" LastActivityDate="2020-09-10T10:24:26.437" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21144" PostTypeId="2" ParentId="21128" CreationDate="2020-09-10T10:37:42.333" Score="0" Body="&lt;p&gt;I see that working with control loops is a more elegant way of controlling the robot. But I’m pretty sure that this isn’t the problem. I uploaded a video to demonstrate the strange behaviour:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=hms2z7WoUgQ&amp;amp;feature=youtu.be&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=hms2z7WoUgQ&amp;amp;feature=youtu.be&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;One time it does exactly what it is supposed to do and the next day it drifts to the left, turns at different speed and ends up in the wrong place. But Running the program several times in a row it repeats the movement (doesn’t matter if it chose the right or the wrong) precisely. It’s doing exactly the same movement in every run (expect when it is changing all parameters mysteriously) So the &amp;quot;drive motor - wait - stop&amp;quot; method is actually accurate enough for me. And a control loop also wouldn't prevent the robot to drift to the left instead of driving straight.&#xA;That's why to me it seems to be a different problem. Could there be something wrong in the firmware?&#xA;This is my version: r3-robot/tags/release-stm32-3.7.5:6216 CLEAN&lt;/p&gt;&#xA;&lt;p&gt;Any other ideas?&lt;/p&gt;&#xA;&lt;p&gt;Thanks for helping!&lt;/p&gt;&#xA;" OwnerUserId="27074" LastActivityDate="2020-09-10T10:37:42.333" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21145" PostTypeId="2" ParentId="21142" CreationDate="2020-09-10T17:48:36.293" Score="5" Body="&lt;p&gt;It is usually a combination of 2 different pieces software. Generally a higher level software which implements most of your autonomy, advanced navigation algorithms, and a lower level software which deals with interfacing the motors, a simple state estimator, and accepts waypoint commands.&lt;/p&gt;&#xA;&lt;p&gt;Most common is ROS for the higher level software, and a PX4 for lower level. They are also frequently run on separate computers. With ROS running on something beefier like a TX2 or Intel Nuc, and the px4 software running on a pixhawk.&lt;/p&gt;&#xA;&lt;p&gt;Generally the way it is set up is that your pixhawk is connected to the motors, and connected to your bigger computer via a serial link. It receives waypoint commands from your more powerful computer. And does the necessary logic to convert them to motor RPMS. It is also running a basic state estimator which can fuse data from your more advanced algorithms running on the stronger computer.&lt;/p&gt;&#xA;&lt;p&gt;Regarding research most of the work is done on the higher level/ROS side. It is rare that someone makes a modification to the PX4 firmware. Most labs have a set of frameworks in place to take care of motion planning, SLAM, decision making, and more. So when someone wants to implement a new idea they can modify existing code, or just re-implement 1 module. Rather than having to write the whole system from scratch. Since it is mostly ROS that is pretty easy to do.&lt;/p&gt;&#xA;&lt;p&gt;Note that ROS + Px4 is probably the most common combination, but different labs may have different things. I know certain groups at MIT use ROS, and sometimes a custom middleware solution based off of LCM.&lt;/p&gt;&#xA;" OwnerUserId="15265" LastActivityDate="2020-09-10T17:48:36.293" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21149" PostTypeId="1" CreationDate="2020-09-12T18:19:44.627" Score="0" ViewCount="60" Body="&lt;p&gt;I am attempting to connect to the supplied USB serial cable that came with iRobot Create 2 from Chromium 78.0.3904.108 (32-bit) on a Raspberry Pi 4.&lt;/p&gt;&#xA;&lt;p&gt;From &lt;code&gt;lsusb&lt;/code&gt;, I was able to determine that the board has vendor ID &lt;code&gt;0x0403&lt;/code&gt;. From the &lt;a href=&quot;https://cdn-shop.adafruit.com/datasheets/create_2_Open_Interface_Spec.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Open Interface Spec&lt;/a&gt;, I was able to connect via &lt;a href=&quot;https://github.com/Jeija/gtkterm&quot; rel=&quot;nofollow noreferrer&quot;&gt;GtkTerm&lt;/a&gt; using the following settings:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Baud rate: 115200&lt;/li&gt;&#xA;&lt;li&gt;Data bits: 8&lt;/li&gt;&#xA;&lt;li&gt;Parity: None&lt;/li&gt;&#xA;&lt;li&gt;Stop bits: 1&lt;/li&gt;&#xA;&lt;li&gt;Flow control: None&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;That's all well and good, so I shut down GtkTerm and opened Chromium console on an HTTPS origin:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;const usbDevice = await navigator.usb.requestDevice({filters: [{vendorId: 0x0403}]})&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;So far so good. I got the permission prompt and then a &lt;code&gt;USBDevice&lt;/code&gt; object back with &lt;a href=&quot;https://www.usb.org/defined-class-codes#anchor_BaseClass00h&quot; rel=&quot;nofollow noreferrer&quot;&gt;BaseClass 0x00&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;But when I try to &lt;code&gt;await usbDevice.open()&lt;/code&gt;, I get the following error:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Uncaught (in promise) DOMException: Access denied.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;No other errors come back. Any ideas how to debug? I am not sure if something in the Raspbian OS failed to free up the resource, or if the device is not supported by WebUSB.&lt;/p&gt;&#xA;" OwnerUserId="27101" LastActivityDate="2020-09-12T18:19:44.627" Title="Connecting to iRobot Create 2 serial port over WebUSB" Tags="&lt;irobot-create&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21151" PostTypeId="1" CreationDate="2020-09-15T10:09:29.673" Score="0" ViewCount="28" Body="&lt;p&gt;My robot lawn mower (a Robomow rx20u) was moving erratically, so I took apart the wheel assembly and found that one of the reduction gears has several broken teeth (in the picture, look at the right-hand side of the smaller gear. The diameter of the larger gear is 37 mm).&lt;/p&gt;&#xA;&lt;p&gt;I've found a replacement for the whole motor and reduction gearbox, but its price is about 80 USD. I think that the broken piece costs about 1/100th of that.&lt;/p&gt;&#xA;&lt;p&gt;Does it make sense to shop around until I find the right gear, or is it a hopeless task and I'd better buy the whole assembly?&lt;/p&gt;&#xA;&lt;p&gt;What sites / shops do you suggest to consult if I want to buy just the gear? (I think that 3D-printing it is out of question.)&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/OucNK.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OucNK.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="27108" LastActivityDate="2020-09-15T10:09:29.673" Title="Help finding a replacement for a broken gear" Tags="&lt;wheeled-robot&gt;&lt;two-wheeled&gt;&lt;gearing&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21153" PostTypeId="1" AcceptedAnswerId="21155" CreationDate="2020-09-15T13:13:30.317" Score="0" ViewCount="28" Body="&lt;p&gt;I'm trying to find the optimal components list for  a radio controlled lawn mover i'm trying to build.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The blades will be rotated by a 140 cc engine. I choose this engine because it's already mine. It's weight is 25 kg&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The movement will be electrical powered by 2 battery 12v and 18 amp h&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;i will use arduino and 2 motor drivers. Each driver can handle 6v to  27v and  a maximum of 43 amp&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I wanna move &amp;quot;that thing&amp;quot; with a speed of 4/5 km hour.&#xA;It have to climb hill until 40% (with dry terrain).&lt;/p&gt;&#xA;&lt;p&gt;It is possible to calculate the specs of a dc engine that could &amp;quot;approximately&amp;quot; move that thing in that conditions ?&lt;/p&gt;&#xA;&lt;p&gt;I would like to know: watt,gear ratio, rpm, volt ...&#xA;I know, it's all approximate but anyway it will give me an help.&lt;/p&gt;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="27115" LastActivityDate="2020-09-15T14:09:21.183" Title="Choosing the right dc motor" Tags="&lt;motor&gt;&lt;hardware&gt;&lt;dc&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21154" PostTypeId="1" CreationDate="2020-09-15T13:50:14.940" Score="0" ViewCount="30" Body="&lt;p&gt;I just saw what looked like a normal bicycle drive around the a block a few times without a rider. There was a clear plastic box with some electronics, a motor on the back wheel and something connected to the handlebars (presumably some servo mechanism), and a person briskly walking next to it with some gizmo in their hand, but at a few paces distant and not touching it.&lt;/p&gt;&#xA;&lt;p&gt;It could turn a fairly sharp corner at speed, with a radius of perhaps 3 meters.&lt;/p&gt;&#xA;&lt;p&gt;There were some packs that could be weights and/or batteries near the seat as well.&lt;/p&gt;&#xA;&lt;p&gt;Is this &lt;em&gt;unusual&lt;/em&gt; or particularly challenging or a just-recently-solved engineering challenge, or is this well known and oft-repeated feat?&lt;/p&gt;&#xA;" OwnerUserId="17872" LastActivityDate="2020-09-15T13:50:14.940" Title="Are robotic, riderless street bikes common now?" Tags="&lt;self-driving&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="21155" PostTypeId="2" ParentId="21153" CreationDate="2020-09-15T14:03:18.713" Score="2" Body="&lt;p&gt;Your maximum power is already given by the driver.&#xA;Assuming that 24V motors are easier to come by, &lt;span class=&quot;math-container&quot;&gt;$$24V * 43A = 1023  W$$&lt;/span&gt; electrical power. I am assuming that you have the combined maximum output at &lt;span class=&quot;math-container&quot;&gt;$43A$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Depending on what type of motor you find with &lt;span class=&quot;math-container&quot;&gt;$24V$&lt;/span&gt; Voltage and &lt;span class=&quot;math-container&quot;&gt;$1kW$&lt;/span&gt; power you can add a gearbox and adjust wheel diameters to get to a desired performance.&lt;/p&gt;&#xA;&lt;p&gt;A &lt;span class=&quot;math-container&quot;&gt;$150mm$&lt;/span&gt; wheel diameter gives you &lt;span class=&quot;math-container&quot;&gt;$150 mm \times \pi = 471 mm$&lt;/span&gt; of travel for one rotation of the wheel. The target &lt;span class=&quot;math-container&quot;&gt;$5 km/h$&lt;/span&gt; equals to  &lt;span class=&quot;math-container&quot;&gt;$83 m$&lt;/span&gt; each minute. If you advance &lt;span class=&quot;math-container&quot;&gt;$0.47 m$&lt;/span&gt; at each wheel rotation, this &lt;span class=&quot;math-container&quot;&gt;$83m$&lt;/span&gt; each minute results in a requirement of &lt;span class=&quot;math-container&quot;&gt;$176 rpm$&lt;/span&gt; rotations per minute on the wheel. Using a different unit of measurement for the rotational velocity, this gives you &lt;span class=&quot;math-container&quot;&gt;$18.43 rad/s$&lt;/span&gt;. Basically, you need to find a &lt;span class=&quot;math-container&quot;&gt;$24V$&lt;/span&gt; &lt;span class=&quot;math-container&quot;&gt;$1kW$&lt;/span&gt; motor and gearbox that will result in an output rpm of &lt;span class=&quot;math-container&quot;&gt;$176 rpm$&lt;/span&gt;. Please note that this is at the wheel axis, so any differential transmission will also have a reduction ratio which needs to be considered.&lt;/p&gt;&#xA;&lt;p&gt;We know the maximum electrical power and let us assume an &lt;span class=&quot;math-container&quot;&gt;$80\%$&lt;/span&gt; efficiency (conversion rate to mechanical power). That gives you about &lt;span class=&quot;math-container&quot;&gt;$800W$&lt;/span&gt; of mechanical power. Now we know that your target velocity is &lt;span class=&quot;math-container&quot;&gt;$18.43 rad/s$&lt;/span&gt; and we know that:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ P = \tau \times \omega$$&lt;/span&gt;&#xA;Mechanical power is the product of torque and angular velocity. We can calculate that for the given mechanical power of &lt;span class=&quot;math-container&quot;&gt;$800W$&lt;/span&gt;, with the target velocity of &lt;span class=&quot;math-container&quot;&gt;$18.45 rpm$&lt;/span&gt; you will have &lt;span class=&quot;math-container&quot;&gt;$43.4 Nm$&lt;/span&gt; of Torque available at the wheel axis. Now we have assumed &lt;span class=&quot;math-container&quot;&gt;$150mm$&lt;/span&gt; wheel diameter, so the radius of the wheel is &lt;span class=&quot;math-container&quot;&gt;$75mm$&lt;/span&gt;. &lt;span class=&quot;math-container&quot;&gt;$43.4 Nm$&lt;/span&gt; on a distance of &lt;span class=&quot;math-container&quot;&gt;$75mm$&lt;/span&gt; produces &lt;span class=&quot;math-container&quot;&gt;$578.6 N$&lt;/span&gt; of force. This is the maximum force that you can get at your wheels.&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$40\%$&lt;/span&gt; slope translates to &lt;span class=&quot;math-container&quot;&gt;$21.8 \deg$&lt;/span&gt;. From this we can deduce, that the sin component of your gravitational force cannot exceed &lt;span class=&quot;math-container&quot;&gt;$578 N$&lt;/span&gt;. At the limit&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$F= m * g * sin(21.8 \deg)$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$ 578.6 N = m  kg \times 9.81 m/s^2 \times 0.189$&lt;/span&gt;. So your absolute maximum weight from a static perspective is about &lt;span class=&quot;math-container&quot;&gt;$312 kg$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Please note that this is the max weight you can move at &lt;span class=&quot;math-container&quot;&gt;$5km/h$&lt;/span&gt; with a &lt;span class=&quot;math-container&quot;&gt;$1kW$&lt;/span&gt; motor at a 40% slope on a perfectly flat terrain and it does not mean that with this weight your system can actually accelerate to this velocity. The more you are under this weight limit the more dynamic performance your system will have! Furthermore there might be some fictions forces to consider from the 140 cc engine that will further reduce the dynamic performance.&lt;/p&gt;&#xA;&lt;p&gt;For the power capacity, if you put the two batteries in series, you get 24V and 18 Ah. This will mean that your batteries will be able to power your system under full load, for &lt;span class=&quot;math-container&quot;&gt;$18Ah / 43A =  0.41h$&lt;/span&gt;. So about 24 minutes of fun.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2020-09-15T14:09:21.183" LastActivityDate="2020-09-15T14:09:21.183" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21157" PostTypeId="1" CreationDate="2020-09-15T14:39:47.723" Score="0" ViewCount="16" Body="&lt;p&gt;I want to attach a servo that has an A1-sized end on it to a shaft. I'm building an RC submarine, and I want this to control the dive planes. My problem is that I only see horns for a servo of that size and no good coupler to attach to a shaft. Is there some other method via which I can accomplish this? Any recommendations on vendors?&lt;/p&gt;&#xA;" OwnerUserId="1957" LastActivityDate="2020-09-15T14:39:47.723" Title="Attaching A1 Servo Splint to Shaft" Tags="&lt;servomotor&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21158" PostTypeId="1" CreationDate="2020-09-16T10:35:09.223" Score="1" ViewCount="71" Body="&lt;p&gt;I'd like to extract &amp;quot;features&amp;quot; of an environment scanned with a 2D LiDAR.&lt;/p&gt;&#xA;&lt;p&gt;I tried to create a temporary occupancy map to extract &amp;quot;corners&amp;quot; with the Harris Corner Detector. However LiDAR data is noisy, it creates false corners even after applying a Gaussian filter on the map. I wonder if there are more reliable algorithms for this.&lt;/p&gt;&#xA;&lt;p&gt;Another method I tried is to use raw data output of the LiDAR, i.e. the &lt;span class=&quot;math-container&quot;&gt;$(r,\theta)$&lt;/span&gt; vector, and calculate its first and second derivatives and choose &amp;quot;abrupt changes&amp;quot; as landmarks. This has a major drawback, it is harder to track landmarks when LiDAR position changes since &lt;span class=&quot;math-container&quot;&gt;$(r,\theta)$&lt;/span&gt; vectors are totally different.&lt;/p&gt;&#xA;&lt;p&gt;I appreciate any help. Thanks.&lt;/p&gt;&#xA;" OwnerUserId="24487" LastActivityDate="2021-04-13T21:39:13.720" Title="LiDAR Feature Extraction" Tags="&lt;localization&gt;&lt;lidar&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21160" PostTypeId="1" CreationDate="2020-09-16T14:01:37.407" Score="0" ViewCount="10" Body="&lt;p&gt;I am starting with slam using &lt;strong&gt;imu, stereo camera (that gives RGB + depth info) camera and gps&lt;/strong&gt; mounted on my robot. I wish to create a 2D map for it like this:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/eXqZw.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/eXqZw.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;But with landmarks, so that I can stop the robot near those landmarks.&lt;/p&gt;&#xA;&lt;p&gt;I am unable to find a good way to structure this.&lt;/p&gt;&#xA;&lt;h2&gt;How should I start with this. What all steps are needed to implement this ?&lt;/h2&gt;&#xA;&lt;p&gt;Thanks and Regards.&lt;/p&gt;&#xA;" OwnerUserId="26766" LastActivityDate="2020-09-16T14:01:37.407" Title="How to get 2D map using Stereoscopic camer (RGB+D), IMU and GPS?" Tags="&lt;slam&gt;&lt;mapping&gt;&lt;autonomous-car&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21161" PostTypeId="1" CreationDate="2020-09-17T07:18:13.000" Score="0" ViewCount="28" Body="&lt;p&gt;I am trying to implement localisation by storing images from a camera and their accompanying point clouds from a 2D lidar during mapping. During localisation I then use image matching to suggest the closest image and perform ICP on the point cloud to find the relative pose to where the original image was taken. My problem is that the best matching image is not always correct so I want to use the top say 5 images and see which one's point cloud aligns the best and if any of the alignments are any good at all. Unfortunately I have not been able to find any way of evaluating how good a point cloud registration is. Currently I am using the LibPointMatcher library and the best that it can provide is a residual error after alignment but some rough testing seems to suggest that this does not really help to determine if an alignment failed or not and does not seem to help with comparing the relative quality of different alignments either.&lt;/p&gt;&#xA;&lt;p&gt;It is my understanding that there are algorithms such as Monte Carlo localisation/particle filter that can localise quite well using just 2D lidar scans. From my understanding of how they work they, they need to rank how likely each particle is after obtaining a lidar scan based on how well the current scan aligns with what would be expected given said particle's pose and the current map. Now obviously I am not actually building a point cloud map from which I am then calculating the expected points from each particle, but I think that my approach still amounts to something similar in that I also need to rank how likely it is that the current point cloud correlates with what was expected. Unfortunately, I have not been able to figure out how these Monte Carlo systems derive such an alignment probability.&lt;/p&gt;&#xA;&lt;p&gt;Any suggestions on how I can rank the relative success of 2D point clouds registrations and preferably also identify alignments that were complete failures would be greatly appreciated.&lt;/p&gt;&#xA;" OwnerUserId="26692" LastActivityDate="2020-09-20T13:43:40.637" Title="2D point cloud registration success probability" Tags="&lt;localization&gt;&lt;lidar&gt;&lt;particle-filter&gt;&lt;point-cloud&gt;&lt;icp&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21163" PostTypeId="1" CreationDate="2020-09-17T16:22:02.727" Score="4" ViewCount="103" Body="&lt;p&gt;I am currently working on the &amp;quot;likelihood field&amp;quot; sensor model (aka &amp;quot;endpoint model&amp;quot;) by Thrun et al. (book: Probabilistic Robotics, Thrun et al., p.169-174)&#xA;In this context I have two questions. According to the authors, the probability of a sensor measurement zt^k can be described by a weighted set consisting of phit, prand and pmax (mixing weights zhit, zrand, zmax):&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/zKRSx.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zKRSx.jpg&quot; alt=&quot;Probabilistic Robotics, Thrun et al., p.171&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;In the following, the authors describe that the implementation of the likelihood field algorithm (see below) does not take zmax measurements into account.&lt;/p&gt;&#xA;&lt;p&gt;Question 1: If zmax measurements are rejected, what is the intention of the probability pmax in equation (6.34)?&lt;/p&gt;&#xA;&lt;p&gt;My second question refers to line 8 of the following algorithm:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/uimL4.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/uimL4.jpg&quot; alt=&quot;Probabilistic Robotics, TRHUN et al., p.172&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Note errata : replace &amp;quot;z_random&amp;quot; by &amp;quot;z_rand&amp;quot;&#xA;(&lt;a href=&quot;http://probabilistic-robotics.informatik.uni-freiburg.de/errata.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://probabilistic-robotics.informatik.uni-freiburg.de/errata.html&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;p&gt;What is the meaning of the second term zrand/zmax? Does zrand describe the weight factor of the uniform distribution prand = 1/zmax? In this context, zmax describes the maximum range of the laser scanner and not a weight factor...&lt;/p&gt;&#xA;&lt;p&gt;Thanks for your help.&lt;/p&gt;&#xA;" OwnerUserId="27092" LastEditorUserId="10748" LastEditDate="2020-09-18T12:29:46.317" LastActivityDate="2020-09-18T12:29:46.317" Title="Likelihood field sensor model (Probabilistic Robotics, Thrun et al., p.169-174)" Tags="&lt;mobile-robot&gt;&lt;localization&gt;&lt;wheeled-robot&gt;&lt;algorithm&gt;" AnswerCount="0" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21164" PostTypeId="2" ParentId="21102" CreationDate="2020-09-17T19:08:26.110" Score="-1" Body="&lt;p&gt;Go to ebay and type things like arduino robot into the search bar and use search descriptions. Anything you click on will if you scroll down have a section labeled people who bought this also bought. Its a way to do a tour of  what people have been buying.&lt;/p&gt;&#xA;" OwnerUserId="27130" LastActivityDate="2020-09-17T19:08:26.110" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21165" PostTypeId="2" ParentId="20445" CreationDate="2020-09-18T12:21:57.127" Score="2" Body="&lt;p&gt;You may also just try running&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo apt install ros-&amp;lt;your-distribution&amp;gt;-roslaunch&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I was repeatedly running&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo apt install python3-roslaunch&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Which was installing roslaunch into python installation path and thus on running roscore, roslaunch was missing in&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;/opt/ros/&amp;lt;ros-distro&amp;gt;/share/ros&#xA;/opt/ros/&amp;lt;ros-distro&amp;gt;/share&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="27132" LastActivityDate="2020-09-18T12:21:57.127" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21166" PostTypeId="2" ParentId="21080" CreationDate="2020-09-18T12:50:24.600" Score="3" Body="&lt;p&gt;Your vehicle heading is some angle, and the corner is some distance from the rear axle. The best coordinate system to use for angles and distances is &lt;em&gt;polar&lt;/em&gt;. So, start with a vehicle layout like:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/96bxR.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/96bxR.png&quot; alt=&quot;Polar vehicle arrangement&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I'm only going to go over one corner (the rest is &lt;em&gt;your&lt;/em&gt; work to do &lt;code&gt;:-)&lt;/code&gt;), but consider the front passenger-side corner (top view), from the center of the rear axle. You could measure the corner to be some &lt;span class=&quot;math-container&quot;&gt;$&amp;lt;x_0, y_0&amp;gt;$&lt;/span&gt; from the center, but the easier way to handle it would be as an &lt;span class=&quot;math-container&quot;&gt;$&amp;lt;r, \theta&amp;gt;$&lt;/span&gt; from the rear center.&lt;/p&gt;&#xA;&lt;p&gt;Unless the car body is deforming, your &lt;span class=&quot;math-container&quot;&gt;$r$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt; remain constant. Now, whenever you get a new heading &lt;span class=&quot;math-container&quot;&gt;$\phi$&lt;/span&gt;, you can add that to your &amp;quot;default&amp;quot; angle &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt;. That is, &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt; is driven by your vehicle's geometry, &lt;span class=&quot;math-container&quot;&gt;$\phi$&lt;/span&gt; is driven by your vehicle's heading. You wind up with:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;x = r\cos\left(\theta + \phi\right) \\&#xA;y = r\sin\left(\theta + \phi\right)&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;You need to be careful with the combination of &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\phi$&lt;/span&gt; - how the angles are added will depend on how you choose to define your angles. If you were lay a compass rose over the vehicle image I've drawn, my definition of &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt; would be from the &amp;quot;East&amp;quot; and increasing positive &lt;em&gt;counter-clockwise&lt;/em&gt;. Compass angles, though, start with zero at the &lt;em&gt;North&lt;/em&gt; and increase positive in the &lt;em&gt;clockwise&lt;/em&gt; direction.&lt;/p&gt;&#xA;&lt;p&gt;The easiest way to handle this would be to define your own &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt; using the same angular conventions as your heading, because then you really can just sum the two angles and get your corners. You may (will probably) need to redefine which trig functions are used if you're changing the angular definitions.&lt;/p&gt;&#xA;&lt;p&gt;Please give this a shot and, if you've still got questions, please feel free to ask them here! Small follow-ups can be handled in comments, but if there's a big change in scope then please start a new question (you can link to this question in the new post).&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-09-18T12:50:24.600" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21167" PostTypeId="1" AcceptedAnswerId="21174" CreationDate="2020-09-19T21:07:54.677" Score="2" ViewCount="43" Body="&lt;p&gt;I'm having trouble with a gear motor being powered by a power supply, while it is being driven by the load in the same direction as the driver wants to drive it. Here is a simple diagram:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ex103.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ex103.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The gear motor is the prime mover in a winch system that lifts and lowers a mass of about 25 pounds.&lt;/p&gt;&#xA;&lt;p&gt;for reference this is the motor:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.superdroidrobots.com/shop/item.aspx/ig52-04-24vdc-082-rpm-gear-motor-with-encoder/1181/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.superdroidrobots.com/shop/item.aspx/ig52-04-24vdc-082-rpm-gear-motor-with-encoder/1181/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is the motor driver:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.basicmicro.com/RoboClaw-2x15A-Motor-Controller_p_10.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.basicmicro.com/RoboClaw-2x15A-Motor-Controller_p_10.html&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;And this is the power supply:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/B07ML2MP9Q&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.amazon.com/gp/product/B07ML2MP9Q/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&amp;amp;psc=1&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I'm controlling the system by doing all speed/position control on a raspberry pi, sending forward/backward duty cycle commands to the roboclaw over serial. When lifting the system performs exactly as expected: the motor smoothly rotates. Initially, when lowering, if I sent the motor driver a duty cycle to lower it would jerk, then freewheel, then lower very slowly, and that channel of the driver would no longer function, and would produce a 'damaged' error code. I solved this by simply sending it a duty cycle of 0 and allowing it to lower slowly. This is turning out to be inconvenient for my project timeline, so I'm trying to solve it. I found this video:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=-5YFYhBU-jQ&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=-5YFYhBU-jQ&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;So I'm guessing the H bridge on the driver opening up when lowering, allowed the motor to try to sink current into the power supply, the power supply didn't like that and would get fussy and temporarily shut off, thereby shutting off the motor driver, but then the motor driver would get powered on by the back drive voltage of the motor, freak out, freewheel, get damaged, and shut everything down. This was somewhat confirmed by added a forward bias schottky diode to the positive pole of the power supply, as I can now give the system a lowering duty cycle and it will run without destroying itself. &lt;strong&gt;HOWEVER&lt;/strong&gt; now when it is lowering, the behavior is very jerky, like the driving of the motor is producing a current that want's to run into the power supply, but it has nowhere to go. The shuddering vibration is not great for the mechanical aspects of the system, so I'd like to try and solve this. Is there anything I can add to the circuit to help smooth out this behavior? or anything I can add to give the driven motor current somewhere to go?&lt;/p&gt;&#xA;" OwnerUserId="27138" LastActivityDate="2020-09-21T13:38:37.617" Title="Motor driver damage and jerking behavior when load driving in same direction as motor" Tags="&lt;motor&gt;&lt;power&gt;&lt;circuit&gt;&lt;driver&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21169" PostTypeId="2" ParentId="21161" CreationDate="2020-09-20T13:43:40.637" Score="1" Body="&lt;p&gt;Matching point clouds can be very tricky.  It is kind of a needle-in-a-haystack type of problem when you don't have an initial guess at the correspondence.  As you found, if the point clouds are very different there really isn't a great way to quantify the similarity.  This holds even if the two scans are similar (or even the same!) but have very different orientations.&lt;/p&gt;&#xA;&lt;p&gt;Algorithms like Iterative Closest Point (ICP) (which LibPointMatcher uses) requires the two point clouds to be closely aligned to begin with.  Only then can it find the correspondence between the two and also produce a reasonable residual.&lt;/p&gt;&#xA;&lt;p&gt;Particle filter localization with 2D lidar scans works quite well because you are simply matching one scan with the next in time so they are very similar to begin with.  The robot hasn't moved very much between scans, and you have other sensors like wheel odometry and an Inertial Measurement Unit (IMU) so you have a good guess for the alignment.  Furthermore, particle filters use a large population of points surrounding the hypothesized new location of the robot.  Each point has its own translation and rotation from the original point, and does its own scan matching to determine a score.&lt;/p&gt;&#xA;&lt;p&gt;I don't think a particle filter will work for you in this situation, but you can use some of its methods.  If you have two different scans and no prior knowledge of the correspondence between them, you will need to try many different random translations and rotations.  I can't say how many, that is entirely dependent on your application, time constraints, etc.  But hopefully you will have some heuristics to be able to narrow the search space.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2020-09-20T13:43:40.637" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21170" PostTypeId="1" CreationDate="2020-09-20T15:32:50.510" Score="2" ViewCount="23" Body="&lt;p&gt;I'm looking for a mathematical proof or example of non tranformable model, and I couldn't find any.&lt;/p&gt;&#xA;" OwnerUserId="17413" LastActivityDate="2020-09-20T15:32:50.510" Title="Is every state space model transformable to transfer function and vice versa?" Tags="&lt;control&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="21171" PostTypeId="1" CreationDate="2020-09-20T17:01:20.853" Score="4" ViewCount="51" Body="&lt;p&gt;I am trying to gather some information about university courses offered about drones (or Unmanned Aerial Vehicles).&lt;/p&gt;&#xA;&lt;p&gt;At the beginning, I thought that I would have found way more than what I found and instead I could notice that most of the universities do not offer courses directly about drones (or aerial robotics) but more about mobile robotics (which of course include drones).&#xA;Some of the universities I have seen that are offering these kinds of courses are listed below (it might be useful for someone else in the same situation). However, I would like to know if you know of more of these courses.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://www.coursera.org/learn/robotics-flight&quot; rel=&quot;nofollow noreferrer&quot;&gt;Upenn (Coursera) - Aerial Robotics&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.kostasalexis.com/introduction-to-aerial-robotics.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;University of Nevada Reno - Introduction to Aerial Robotics&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://moodle.epfl.ch/enrol/index.php?id=15799&quot; rel=&quot;nofollow noreferrer&quot;&gt;Swiss Federal Institue of Technology (EPFL) - Aerial Robotics&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Somehow related:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.mathworks.com/academia/courseware/aeronautical-systems-guidance-and-control.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Politecnico di Milano - Aeronautical Systems-Guidance and Control&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;If I will find more of them I will try to add them to this post.&#xA;Thanks in advance.&lt;/p&gt;&#xA;" OwnerUserId="10852" LastActivityDate="2020-09-20T18:39:20.327" Title="Universities offering courses about Drones (Unmanned Aerial Vehicles [UAVs])" Tags="&lt;mobile-robot&gt;&lt;uav&gt;&lt;research&gt;&lt;drone&gt;" AnswerCount="1" CommentCount="3" FavoriteCount="2" ClosedDate="2020-09-22T00:32:11.417" ContentLicense="CC BY-SA 4.0" />
  <row Id="21172" PostTypeId="2" ParentId="21171" CreationDate="2020-09-20T18:39:20.327" Score="1" Body="&lt;p&gt;You should probably check out the universities below. I have read about some great research work done in the field of Aerial Robotics in these universities. They might not have a separate program as such for Aerial Robotics but there's extensive amount of projects that several students and researchers take part in under this area, be it through the Mechanical or Electrical side.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Queensland University of Technology&lt;/li&gt;&#xA;&lt;li&gt;National University of Singapore&lt;/li&gt;&#xA;&lt;li&gt;ETH Zurich&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Hope this helps you out!&lt;/p&gt;&#xA;" OwnerUserId="23347" LastActivityDate="2020-09-20T18:39:20.327" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21173" PostTypeId="1" CreationDate="2020-09-21T13:06:20.260" Score="0" ViewCount="97" Body="&lt;p&gt;My question might be a bit off-topic but I don't know where else to ask.&lt;/p&gt;&#xA;&lt;p&gt;When I do have a &lt;code&gt;GNSS Module&lt;/code&gt; with integrated &lt;code&gt;IMU&lt;/code&gt; and &lt;code&gt;Dead Reckoning&lt;/code&gt;, for example, the &lt;a href=&quot;https://www.u-blox.com/en/product/zed-f9k-module#tab-documentation-resources&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ublox ZED - F9K&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Does it still make sense to use a &lt;code&gt;Filter&lt;/code&gt; for fusing GNSS and IMU / Odometry data or is that not necessary as the Module is handling that for me?&lt;/p&gt;&#xA;&lt;p&gt;Or will the Dead Reckoning just enhance the precision after applying a Filter even more?&lt;/p&gt;&#xA;" OwnerUserId="27056" LastActivityDate="2020-09-23T08:14:29.077" Title="GNSS Dead Reckoning -- Sensor Fusion Filter not necessary?" Tags="&lt;imu&gt;&lt;sensor-fusion&gt;&lt;filter&gt;&lt;dead-reckoning&gt;&lt;gnss&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="21174" PostTypeId="2" ParentId="21167" CreationDate="2020-09-21T13:38:37.617" Score="2" Body="&lt;p&gt;What you need is something that is generally referred to as a &amp;quot;brake resistor.&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;It looks like there's an &lt;a href=&quot;https://resources.basicmicro.com/using-a-voltage-clamp-with-roboclaw/&quot; rel=&quot;nofollow noreferrer&quot;&gt;application note&lt;/a&gt; specifically for your product. It says, in part:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A voltage clamp is a circuit used with a motor controller to divert excess energy away from the control circuitry and power supply to prevent damage. In the two applications discussed below a MOSFET is used as switch to divert excess power through a power resistor where it’s dissipated as a heat.&lt;/p&gt;&#xA;&lt;p&gt;...&lt;/p&gt;&#xA;&lt;p&gt;The primary purpose of a voltage clamp is to protect a motor&#xA;controller’s power supply from the regenerative power created when a&#xA;motor is stopped or slowed down quickly. A motor spins when power is&#xA;applied to it however it also acts as a generator when slowing down or&#xA;suddenly stooped. This energy opposes the flow of current to the motor&#xA;and is directed back to the motor controller and power source.&#xA;Switching power supplies are not designed to handle this power surge&#xA;and some batteries will also not tolerate the sudden inrush of&#xA;current. A voltage clamp detects this power surge as a rise in voltage&#xA;and sends the excess current to a resistor where it’s turned in to&#xA;heat.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Basically exactly as it says - you can generate power by back-driving a motor; this is how regenerative braking works. The catch is that there needs to be somewhere for the power to go, and switching power supplies can't put the power back in the battery.&lt;/p&gt;&#xA;&lt;p&gt;The solution, then, is to just dump that excess power. Burn it off as heat. The easiest way to determine a power rating on your brake resistor would be to use your power electronics as a guide, with the assumption that your regenerative power generation capacity is going to be approximately the same as your applied power generation capacity.&lt;/p&gt;&#xA;&lt;p&gt;That is, if you've got a system where you could provide 5 amps at 12 volts, then you can apply (5*12) = 60 watts of power. If you can provide 60 watts winching up, then the winched load could back-drive at 60 watts lowering.&lt;/p&gt;&#xA;&lt;p&gt;The application note states:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Select the resistor for the voltage clamp based on the table below. Note that the Digikey parts listed below are all 50 watt resistors which are sufficient for most use cases. However if the voltage clamp is expected to be on for long periods of time or the motor is driving a large load a resistor with a higher power rating may be necessary.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This is the board manufacturer's suggestion, so you could start with this, but again I would (personally) look at your &lt;em&gt;continuous&lt;/em&gt; power draw on the hoist operation and rate at 1.5 to 2x the power draw for the brake resistor's power rating.&lt;/p&gt;&#xA;&lt;p&gt;As a final note - the manufacturer is suggesting you use FIFTY WATT power resistors. Imagine touching a 60 watt incandescent light bulb - the brake resistors are going to get about that hot. Don't put this near any wire harnesses, combustibles, etc. It's going to get very hot - the brake resistor alone is what's controlling your load's descent.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-09-21T13:38:37.617" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21175" PostTypeId="2" ParentId="21173" CreationDate="2020-09-22T03:18:13.557" Score="1" Body="&lt;p&gt;&lt;em&gt;&lt;strong&gt;Question&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Is it necessary to use any filter to fuse Ublox ZED-F9K's GNSS and IMU/Odometry&#xA;data?&lt;/em&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Mdu6h.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Mdu6h.jpg&quot; alt=&quot;zed-9fr&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;strong&gt;Answer&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;strong&gt;My answer is NO&lt;/strong&gt;&lt;/em&gt;, &lt;em&gt;for the following reasons:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;(1)  GNSS and IMU are independently developed modules with matured software. It is unlikely for the vendor to &amp;quot;fuse&amp;quot; them at the hardware level.  A more efficient method is to let the MCU/SBC to talk to either or both guys using I2C,  UART, or SPI.&lt;/p&gt;&#xA;&lt;p&gt;(2) uBlox uCenter uses very simple, text based NMEA0183 protocol, and update rate is of the order of 25Hz, so the user can easily pass the slow GNSS data to IMU for processing.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;strong&gt;Discussion, Conclusion, and Recommendation&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;I think it is not a good idea to use the expensive US$300 ZED-F9K module to do any feasibility studies.  I would suggest to use two separate modules (1) UART NEO-8M, (2) Any I2C IMU and use Rpi python to do any system integration test.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;strong&gt;References&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;(1) &lt;a href=&quot;https://www.sparkfun.com/categories/tags/gnss&quot; rel=&quot;nofollow noreferrer&quot;&gt;SparkFun GNSS Products Catalog&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;(2) &lt;a href=&quot;https://www.sparkfun.com/products/16344&quot; rel=&quot;nofollow noreferrer&quot;&gt;GPS-RTK ZED-F9R Dead Reckoning Breakout - SparkFun US$300&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;(3) &lt;a href=&quot;https://learn.sparkfun.com/tutorials/sparkfun-gps-rtk-dead-reckoning-zed-f9r-hookup-guide&quot; rel=&quot;nofollow noreferrer&quot;&gt;SparkFun GPS-RTK Dead Reckoning ZED-F9R Hookup Guide (Python)&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;(4) &lt;a href=&quot;https://electronics.stackexchange.com/questions/519711/gps-taking-long-time-to-fix-out-in-the-open/519716#519716&quot;&gt;GPS Fixing Time Problem Q&amp;amp;A - tlfong01, EE SE, 2020sep03&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;(5) &lt;a href=&quot;https://raspberrypi.stackexchange.com/questions/113544/rpi-neo-6m-neo-8m-gps-module-setup-fix-update-problems/113601#113601&quot;&gt;Neo-6M/7M/8M GPS Module Setup/Fix/Update Problem Q&amp;amp;A - tlfong01 Rpi SE 2020jun18&lt;/a&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;" OwnerUserId="20219" LastEditorUserId="20219" LastEditDate="2020-09-23T08:14:29.077" LastActivityDate="2020-09-23T08:14:29.077" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21176" PostTypeId="1" CreationDate="2020-09-23T05:24:50.263" Score="3" ViewCount="43" Body="&lt;p&gt;I ask the advice of specialists on control systems. We have the following system.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/depyC.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/depyC.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Where &lt;span class=&quot;math-container&quot;&gt;$u(t)$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$y(t)$&lt;/span&gt; time-varying input and output. The characteristic &lt;span class=&quot;math-container&quot;&gt;$y(t)=f(u(t))$&lt;/span&gt; is assumed to be non-inertial.&lt;/p&gt;&#xA;&lt;p&gt;Only input and output are available for measurement.&lt;/p&gt;&#xA;&lt;p&gt;Let me make a reservation that the variant of estimating this derivative by the Euler method, i.e.&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$g(t)=\frac{y_{n}(t)-y_{n-1}(t)}{u_{n}(t)-u_{n-1}(t)}$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;is not suitable, since the system does not allow elements of delays (delay by 1 time step).&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Is it possible to construct an observer estimating the gradient&lt;/em&gt; &lt;span class=&quot;math-container&quot;&gt;$g(t)=\frac{dy}{du}$&lt;/span&gt;?&lt;/p&gt;&#xA;" OwnerUserId="24481" LastActivityDate="2020-12-27T18:47:41.443" Title="Synthesis gradient observer" Tags="&lt;control&gt;&lt;microcontroller&gt;&lt;estimation&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="21177" PostTypeId="1" CreationDate="2020-09-23T15:55:53.333" Score="2" ViewCount="46" Body="&lt;p&gt;I am trying to implement point to point ICP using a Turtlebot3 as part of a state estimation stack. Here are the sensor specs:&#xA;&lt;a href=&quot;http://www.robotis.us/360-laser-distance-sensor-lds-01-lidar/&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.robotis.us/360-laser-distance-sensor-lds-01-lidar/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Currently the transformations returned by my algorithm are short of what they should be - e.g. a 30cm movement in the x direction is detected as a translation of around 7cm. The same goes for rotations. I am struggling to find the issue(s) with my code; I am also wondering whether this LIDAR is suitable for such a purpose.&lt;/p&gt;&#xA;&lt;p&gt;My initial guess for the transformation is provided by the state output by a kalman filter that is currently only running the prediction step. I have carefully verified that these estimates are very close to the true transformation in my short tests.&lt;/p&gt;&#xA;&lt;p&gt;When I transform the LIDAR scan into [x,y] coordinates in the sensor reference frame, if the range of the point is less than the minimum range, I set it to the minimum range and likewise for the maximum range. I don't think this is the issue, but putting it here in case.&lt;/p&gt;&#xA;&lt;p&gt;Here is my pseudo-code for ICP:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;ICP(src, dst, guess):&#xA;&#xA;    src = transform_points(src, guess)&#xA;    transform = guess&#xA;&#xA;    for i in range MAX_ITERATIONS:&#xA;        // Returns the indicies of the coordinates in dst that are closest to each point in src  &#xA;        // and the distances between pairs&#xA;        dists, idxs = find_nearest_neighbour(src, dst)&#xA;&#xA;        // Remove outliers&#xA;        src = src[dists &amp;lt;= 0.02]&#xA;        idxs = idxs[dists &amp;lt;= 0.02]&#xA;        dst = dst[idxs]&#xA;&#xA;        tr = compute_transform(src, dst)&#xA;        &#xA;        src = transform_points(src, tr)&#xA;&#xA;        // Update transform with dot product&#xA;        transform = tr * transform&#xA;&#xA;    return transform&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I have tried playing with the value of MAX_ITERATIONS, introducing a change in error termination condition and absolute error condition.&lt;/p&gt;&#xA;&lt;p&gt;This way of removing outliers is quite crude, but without it, the robot's pose as computed by applying the transformation returned by ICP will diverge even if the robot is not moving. The transform is computed with around 250 out of the original 360 points.&lt;/p&gt;&#xA;&lt;p&gt;Compute transform uses the closed form solution utilising centroids and SVD of cross-covariance matrix. I noticed that the first time this is called in the ICP loop (i.e. the iteration straight after the guess transform was applied), the transform returned &amp;quot;undoes&amp;quot; most of what the guess did to the src coordinates. This is the python code for the function in case this is the issue&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;def compute_transform(self, src, dst):&#xA;        src_centroid = np.mean(src, axis=0)&#xA;        dst_centroid = np.mean(dst, axis=0)&#xA;        s = src - src_centroid&#xA;        d = dst - dst_centroid&#xA;        ccovar = (d.T @ s) / dst.shape[0]&#xA;        u, _, v = np.linalg.svd(ccovar)&#xA;        # Ensure we get a proper rotation without a reflection:&#xA;        v[-1, :] *= np.linalg.det(u) * np.linalg.det(v)&#xA;        r = u @ v.T&#xA;        t = dst_centroid - r.T @ src_centroid&#xA;        return np.c_[r, t]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I am hoping someone might be able to spot any mistakes / suggest where to look / tell me that what I'm trying to do isn't possible as I've spent a good few weeks trying to debug my code to no avail. Thank you very much for your time.&lt;/p&gt;&#xA;" OwnerUserId="27157" LastActivityDate="2020-09-23T15:55:53.333" Title="Turtlebot3 2D LIDAR pose estimation" Tags="&lt;icp&gt;" AnswerCount="0" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="21178" PostTypeId="1" CreationDate="2020-09-23T17:12:21.643" Score="0" ViewCount="32" Body="&lt;p&gt;I have a type of flight sensor interfaced with Arduino Uno via I2C. The sensor is VL53L0X i am getting the 1D measurement value of distance in mm which i can monitor using serial monitor in Arduino IDE. Looking for a software that can take real time values from COM port of PC when Arduino uno is attached via USB. After reading the values from serial port post process these values by taking mean values and draw point cloud. The algorithm needs to be efficient and reliable which can locate the sensor inside the object while the dimension of object is known.&lt;/p&gt;&#xA;" OwnerUserId="27158" LastEditorUserId="27175" LastEditDate="2020-09-26T23:23:26.200" LastActivityDate="2020-09-26T23:23:26.200" Title="Self localization inside machine of interest" Tags="&lt;localization&gt;&lt;pose&gt;&lt;point-cloud&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21179" PostTypeId="1" CreationDate="2020-09-24T01:45:21.730" Score="0" ViewCount="31" Body="&lt;p&gt;I am building a 3phase BLDC motor controller based on an STM32 MCU, a high resolution 26 bit optical encoder and a DRV8301 motor driver from TI.&lt;/p&gt;&#xA;&lt;p&gt;This is a for a high precision rotary stage for an optical project.&lt;/p&gt;&#xA;&lt;p&gt;My question is about the strategy to control the motor. I have tried multiple different techniques but at the end of the day I am not able to tune the system for the various operating modes I will need when using the rotary stage.&lt;/p&gt;&#xA;&lt;p&gt;The modes I will be needing are: position hold, very slow speed control (from 100 to 1000 counts per second) to moderate speeds (a few degrees per seconds), up to high speed (relative to my application) or about 60 degrees per second.&lt;/p&gt;&#xA;&lt;p&gt;In other words we are talking a wide range of speeds from 100 or counts per second to about 10 million counts per second.&lt;/p&gt;&#xA;&lt;p&gt;Position data is polled at 8KHz and the noise is roughly 2 counts RMS which is pretty good.&lt;/p&gt;&#xA;&lt;p&gt;I initially tried a P-PI cascade controller (a position controller feeding a velocity controller). it worked, but this technique didn't yield the best tracking accuracy mainly because the velocity measurements are derived from the position and the delta position between two periods is roughly equivalent to noise. Boosting the filtering helped but not enough.&lt;/p&gt;&#xA;&lt;p&gt;I tried variations of this cascade controller, by adding I and D terms. Which didn't really help.&lt;/p&gt;&#xA;&lt;p&gt;I then tried to do a simple position controller (PI, and PID) which gave me the best results in terms of tracking accuracy. The biggest challenge with this one is that there is realistically no way of tuning for one specific speed without significantly damaging the other speeds I am interested in.&lt;/p&gt;&#xA;&lt;p&gt;Of course I could retune or create various presets, or even try to correlate PID gains to the velocity I want to track at.&lt;/p&gt;&#xA;&lt;p&gt;My question is this: what is the best approach to this problem? Is there a better strategy than any of the ones I mentioned?&lt;/p&gt;&#xA;&lt;p&gt;Cheers&#xA;SM&lt;/p&gt;&#xA;" OwnerUserId="27160" LastActivityDate="2021-02-21T22:02:55.293" Title="Rotary Stage (high resolution controller for BLDC motor)" Tags="&lt;control&gt;&lt;bldc&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="21180" PostTypeId="1" CreationDate="2020-09-24T18:49:45.473" Score="-1" ViewCount="76" Body="&lt;p&gt;I was thinking about the possible ways to program nanorobots, it can't be done with the regular tools.So I'm curious to know how professionals program nanobots?&#xA;Any complementary articles, extra readings are welcomed.&lt;/p&gt;&#xA;" OwnerUserId="26448" LastActivityDate="2020-09-26T23:23:41.077" Title="How nanorobots are programmed?" Tags="&lt;robotics-toolbox&gt;" AnswerCount="1" CommentCount="5" ClosedDate="2020-09-26T23:25:17.837" ContentLicense="CC BY-SA 4.0" />
  <row Id="21181" PostTypeId="2" ParentId="21179" CreationDate="2020-09-24T20:43:16.353" Score="0" Body="&lt;p&gt;Do you have a predefined trajectory to track?&#xA;Did you try adding a feed forward term to the cascaded controller based on the velocity of the trajectory?&#xA;Do you use a torque controller(cascaded pos-vel-torque controllers)?&#xA;If this is part of an optical system I assume that you can very well approximate the forces in your system so you could also add a feed forward signal to your torque controller, based on a model of your system&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-09-24T20:43:16.353" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21182" PostTypeId="1" CreationDate="2020-09-25T04:23:19.540" Score="0" ViewCount="31" Body="&lt;p&gt;//ERROR: Task 'autonomous' is not defined at global scope level&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;#pragma config(StandardModel, &amp;quot;RVW CLAWBOT&amp;quot;)&#xA;//*!!Code automatically generated by 'ROBOTC' configuration wizard               !!*//&#xA;&#xA;#pragma DebuggerWindows(&amp;quot;joystickSimple&amp;quot;)&#xA;task autonomous();&#xA;task main()&#xA;&#xA;{&#xA;while (true)&#xA;&#xA;{&#xA;&#xA;&#xA;    // update buttons and joysticks&#xA;    getJoystickSettings(joystick);&#xA;&#xA;    //Assign the left and right joystick values&#xA;    //to the left and right motors&#xA;    motor[leftMotor] = joystick.joy1_y1;&#xA;    motor[rightMotor] = joystick.joy1_y1;&#xA;&#xA;task autonomous()&#xA;  {&#xA;    motor[leftMotor] = 80;&#xA;    motor[rightMotor] = 80;&#xA;    wait1Msec(2500);&#xA;    motor[leftMotor] = 0;&#xA;    motor[rightMotor] = 0;&#xA;    &#xA;    wait1Msec(1000);&#xA;    &#xA;    motor[leftMotor] = 80;&#xA;    motor[rightMotor] = -80;&#xA;    wait1Msec(2500);&#xA;    motor[leftMotor] = 0;&#xA;    motor[rightMotor] = 0;&#xA;    &#xA;  }&#xA;    if(motor[rightMotor] == 1) {&#xA;    startTask(autonomous);&#xA;    stopTask(main);&#xA;  &#xA;}&#xA;}&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="27170" LastActivityDate="2020-09-25T13:29:20.753" Title="How can I allow for this code to switch from remote control to autonomous?" Tags="&lt;first-robotics&gt;&lt;programming-languages&gt;&lt;c&gt;&lt;robotc&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21183" PostTypeId="1" CreationDate="2020-09-25T07:02:10.213" Score="1" ViewCount="49" Body="&lt;p&gt;These are the estimated torque values of all axis in our applications&#xA;1st Axis- 226.57 oz-in - 478oz-in&#xA;2nd Axis- 756 oz-in -1590oz-in&#xA;3rd Axis- 356 oz-in - 749.7 oz-in&#xA;4th Axis- 188 oz-in - 395 oz-inch&#xA;5th Axis-17.7oz-in - 37.2 oz-inches&#xA;Robot arm has to lift  payload of 50 kg, I want to source servo motors , for selection I am confused what operating voltage for servo motors would be suitable,DC or Ac and how much in Dc&lt;/p&gt;&#xA;" OwnerUserId="27171" LastActivityDate="2020-09-25T07:02:10.213" Title="What should be the required operating voltage for Servo motors in my 5 DOF robotic arm, with 50 kg payload" Tags="&lt;robotic-arm&gt;&lt;servomotor&gt;&lt;industrial-robot&gt;&lt;electronics&gt;" AnswerCount="0" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="21184" PostTypeId="2" ParentId="21182" CreationDate="2020-09-25T13:29:20.753" Score="2" Body="&lt;p&gt;The code for “task autonomous()” should be outside of the main() function.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2020-09-25T13:29:20.753" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21185" PostTypeId="2" ParentId="21180" CreationDate="2020-09-25T18:58:31.263" Score="3" Body="&lt;p&gt;For anyone having the same question, I have found the answer :&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The development of programmable nanobot arch-types offers an&#xA;opportunity to consider tools for programming nanobot cocktails.&#xA;Inspired by modern software development environments, which separates&#xA;high-level programming languages from specific CPU details, we aim to&#xA;allow medical professionals to directly program treatments in Athelas,&#xA;a medication programming language.  the design of Athelas is&#xA;motivated by  the  success  of  rule-based  systems  at  capturing&#xA;expert  knowledge  [6,  7].   A  compiler  (Bilbo)  translates Athelas&#xA;programs to nanobot specifications, which implement the program.  The&#xA;compiler relies on a library of generic nanobot arch-types, and&#xA;specializes them to create the specific roles needed for the swarm.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Reference: &lt;em&gt;&lt;a href=&quot;http://u.cs.biu.ac.il/%7Egalk/Publications/papers/fnano16.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;A Compiler for Programming Molecular Robots&lt;/a&gt; Inbal Wiesel, Noa Agmon, and Gal A. Kaminka&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="26448" LastEditorUserId="17029" LastEditDate="2020-09-26T23:23:41.077" LastActivityDate="2020-09-26T23:23:41.077" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21186" PostTypeId="1" AcceptedAnswerId="21190" CreationDate="2020-09-26T13:31:40.840" Score="1" ViewCount="42" Body="&lt;p&gt;I have a 6DOF robotic arm that I wish to teleoperate by tracking my own hands. For the sake of simplicity, let us assume a 3DOF arm where only position is fed, and the orientation is constant.  Suppose I get my wrist pose in mm (which is my end effector) at 100 Hz. (slightly noisy in the order of a couple of mm). There are no network latency issues.&lt;/p&gt;&#xA;&lt;p&gt;The IK solver of my robotic arm is fast, and more or less realtime (order of a millisecond). The speed for every step of the motion has to be fed in, i.e. for every position command, the speed at which to execute the motion has to be specified.&lt;/p&gt;&#xA;&lt;p&gt;Here is my problem: The teleoperation mapping does not seem to be realtime nor smooth. If the hand moves from point A to B, the arm takes a while to get there, probably a couple of seconds delay, however, when the hand is still, then it is realtime, (since there is no movement to make, thus it is real-time). Fast motions are not mapped very well in realtime, thus the teleoperation experience is poor.&lt;/p&gt;&#xA;&lt;p&gt;I'm sure these are general problems faced when someone gets started with teleoperation.&lt;/p&gt;&#xA;&lt;p&gt;What is the ideal way to approach this, from a general concept of teleoperation.&#xA;There are various things to consider such as&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Time taken for IK solver.&lt;/li&gt;&#xA;&lt;li&gt;How often to the end effector (wrist) position.&lt;/li&gt;&#xA;&lt;li&gt;Speed to feed for each motion.&lt;/li&gt;&#xA;&lt;li&gt;Buffer size of the receiver on the robotic arm side, to process.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;While I understand that one solution/method will not fit all types, a general detailed explanation of a methodology on how to approach hand teleoperation, and the various things to consider would be very helpful. What is the established method to ensure both smoothness of motion, and realtime time/latency mapping for teleoperation? While most papers deal with accuracy, and how to get the hand position, not a lot of papers discuss this issue of time and speed for operation.&lt;/p&gt;&#xA;&lt;p&gt;Currently, this is how I approach the issue. I collect position values, and find the distance between the previous hand position (A), and the current reading. If the distance is less than some threshold (eg. 5mm), the current reading is discarded. Once the distance exceeds the threshold, it is sent to the robotic arm. The time is calculated as the distance by the time between previous position (A) and current reading. Though this works well for most cases, it fails fast random motions.&#xA;However, I am not sure if this is a general practice for teleoperation.&lt;/p&gt;&#xA;&lt;p&gt;Finally, is solving IK for each pose required? If not, how can this be done?&lt;/p&gt;&#xA;" OwnerUserId="26640" LastActivityDate="2020-09-29T10:16:57.933" Title="Time Mapping for Robot Arm Teleoperation" Tags="&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21187" PostTypeId="2" ParentId="20603" CreationDate="2020-09-27T19:07:33.467" Score="1" Body="&lt;p&gt;When working with odometry, you need to consider that the resulting calculation may not be valid when comparing frames. Therefore I’d suggest you add &lt;em&gt;try&lt;/em&gt; and &lt;em&gt;except&lt;/em&gt; statements.&lt;/p&gt;&#xA;" OwnerUserId="27175" LastActivityDate="2020-09-27T19:07:33.467" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21188" PostTypeId="1" CreationDate="2020-09-29T03:54:40.200" Score="1" ViewCount="57" Body="&lt;p&gt;I have been studying robotics by myself, lately.&lt;/p&gt;&#xA;&lt;p&gt;I noticed that there are various mapping, localization methods (popularly under SLAM), but are there concepts relating to the robot moving in a straight trajectory, like &lt;strong&gt;strictly&lt;/strong&gt; parallel to a wall or a line ?&lt;/p&gt;&#xA;&lt;h3&gt;Common Scenario:&lt;/h3&gt;&#xA;&lt;p&gt;The robots (especially the &lt;strong&gt;differential tank drive&lt;/strong&gt; robots) find it difficult to strictly follow a particular line and displacing itself to a point parallel to its location.&lt;/p&gt;&#xA;&lt;p&gt;What are the methods used previously and today ?&lt;/p&gt;&#xA;" OwnerUserId="26766" LastActivityDate="2020-09-29T08:05:50.423" Title="How do robots move parallel to a wall/line?" Tags="&lt;slam&gt;&lt;navigation&gt;&lt;differential-drive&gt;" AnswerCount="1" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="21189" PostTypeId="2" ParentId="21188" CreationDate="2020-09-29T08:05:50.423" Score="1" Body="&lt;p&gt;The simplest method line following robots use is 3 sensor system:&#xA;Consider the 2 block sensors, let's assume they sense color. The middle one senses white, the remaining two senses grey. This robot follows the white line in the image.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;pre&gt;&lt;code&gt;    X&#xA;        XXXXX&#xA;            XXXXX&#xA;    XX          XXXXX&#xA;     XXXXXX         XX&#xA;          XXX        XX&#xA;            XXX       X&#xA;              X       X&#xA;               X      XX&#xA;               X       XX&#xA;               X       X&#xA;               X       X&#xA;               X       X&#xA; ^             X       X&#xA; |       +---+ X +---+ X +---+&#xA; |       |   | X |   | X |   |&#xA; |       +---+ X +---+ X +---+&#xA; |             X       X&#xA; |             X       X&#xA; +             X       X&#xA;               X       X &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;As the robot advances, towards the turn, the left sensor evetually will sens white color. This is the trigger which makes the robot turn to the left. If the middle sensor senses grey intead of white, the robot knows that it has to turn at a sharper angle. As the left one senses grey again, and the middle one does not sens white, the robot knows that it is off track and has to turn even more sharply to the left. So there are 3 stages of triggers for turning even sharper curves to the left. If you consider the sensors not binary, but being able to sense the &amp;quot;closenes&amp;quot; of the white stripe (as it starts to reflect more light if the sensors on the side approach it) you can derive a signal which is more contous and you can create a PID line following controller based on &amp;quot;how much white does the side sensor sense).&lt;/p&gt;&#xA;&lt;p&gt;Special logic is required to get back to the track once the robot left the stripe completely. In this case the sensor which last sensed white gives the direction of the line search behaviour. Once the line is found, the line following controller can be re-activated.&lt;/p&gt;&#xA;&lt;p&gt;This is similar to wall fallowing. In that case distance to a wall gives a similar signal to which a wall following controller (e.g. a PID controller) can be tied to.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-09-29T08:05:50.423" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21190" PostTypeId="2" ParentId="21186" CreationDate="2020-09-29T10:16:57.933" Score="2" Body="&lt;p&gt;You have to decide what are your teleoperation priorities:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Do you want to replicate exactly the trajectory of the hand&lt;/li&gt;&#xA;&lt;li&gt;Do you want to synchronize the current position of the hand as best as possible with the robot?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;Trajectory fidelity:&lt;/strong&gt;&#xA;This might introduce a lag between the current position of the hand and the robot, if your robot is slower than the hand motion you are trying to copy. You can refine the sampling of the hand trajectory, say to a 100ms range, but instead of sending the coordinates directly to the robot, and changing the setpoint of the robot controller every 100ms, regardless of the fact that the robot reached the position or not, you should create a motion buffet with the waypoints your robot needs to follow. You should connect these waypoint with a spline and/or use a multi-point trajectory planner to generate and execute this trajectory, by taking into account the dynamic capabilities of your robot.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Position/pose fidelity:&lt;/strong&gt;&#xA;If you do not care about the trajectory of your hand, just he final point, you should use a PTP trajectory planner, which always brings your robot from its current point to the current position of the hand, while taking into account its dynamic capabilities.&lt;/p&gt;&#xA;&lt;p&gt;In both cases, there is a need to plan a trajectory, not just dump setpoints on the controller. If your controller is good enough, it might be able to cope with them, but this is not guaranteed. Planning a trajectory shapes the way the setpoints are generated and makes sure that the robot can actually follow the intended motion. Yes, you might loose some dynamic performance in some cases, but the benefits outweigh this.&lt;/p&gt;&#xA;&lt;p&gt;As for IK, if you have Cartesian position, you have 2 choices. Plan a path in Cartesian space and convert to joint angles afterwards, or convert to joint space and plan a path in joint space. Every time you transition from Cartesian to joint space you need the IK transformation, there is no way around this. If you want to follow a straight line, you have to plan in cartesian space. If you do not care about the shape of the trajectory between the waypoints, you can plan in joint space.&lt;/p&gt;&#xA;&lt;p&gt;If you want to evaluate, where your robot is currently in relation to the intended Cartesian path, you need the forward kinematic transformation to transform your the current joint angles of your robot to Cartesian space and see where you are in relation to the intended Cartesian path.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-09-29T10:16:57.933" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21191" PostTypeId="1" CreationDate="2020-09-29T16:12:20.000" Score="0" ViewCount="52" Body="&lt;p&gt;I am using 4 mecanum wheeled robot and have recently tested its wheel odometry. It was accurate to about 5-10 cm.&lt;/p&gt;&#xA;&lt;p&gt;How sensible is it to use the wheel odometry for 100 meters after which I have some external sensors that can correct the pose and orientation?&lt;/p&gt;&#xA;&lt;p&gt;P.S. For orientation estimation I am using IMU, wheel odometry is only used for translational calculation&lt;/p&gt;&#xA;" OwnerUserId="21200" LastEditorUserId="21200" LastEditDate="2020-09-29T17:01:35.333" LastActivityDate="2021-03-01T00:06:05.603" Title="Relying on odometry for 100 meters" Tags="&lt;odometry&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="21192" PostTypeId="1" AcceptedAnswerId="21198" CreationDate="2020-09-30T06:42:16.380" Score="2" ViewCount="94" Body="&lt;p&gt;I want to simulate my 5 DOF robotic arm, in such a way that the calculated Torque and mass values of each joints (Servos) defined to be tested that are they capable of physically bear all the weight and are these defined torque would be perfect or not, is it all possible to simulate in MATLAB simmechanics&lt;/p&gt;&#xA;" OwnerUserId="27171" LastActivityDate="2020-10-31T13:01:10.120" Title="Simulation of Robotic arm" Tags="&lt;robotic-arm&gt;&lt;matlab&gt;&lt;mechanism&gt;&lt;simulation&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="21193" PostTypeId="1" AcceptedAnswerId="21589" CreationDate="2020-09-30T16:17:03.920" Score="0" ViewCount="56" Body="&lt;p&gt;I am working with a system(closed-loop feedback control) that has a transfer function like this&lt;/p&gt;&#xA;&lt;p&gt;F = 20*(s+5)/(s^4+13.5&lt;em&gt;s^3+41&lt;/em&gt;s^2+80*s+100)&lt;/p&gt;&#xA;&lt;p&gt;this one is in the s-domain but for the response analysis, I needed it to be on the time-domain.&lt;/p&gt;&#xA;&lt;p&gt;I used python sympy to get the inverse Laplace transform of this&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;import sympy as sp&#xA;s, t = sp.symbols('s, t', real=True)&#xA;F = 20*(s+5)/(s**4+13.5*s**3+41*s**2+80*s+100)&#xA;ilt = sp.inverse_laplace_transform(F, s, t)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;the thing that surprised me was that answer contained some imaginary part as well:-&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/iCdnY.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/iCdnY.png&quot; alt=&quot;Here is the image containing the resultant answer from sympy&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;so my quest is about the existence, correctness, and if it is possible to have an imaginary part then what could be the significance of such a system.&lt;/p&gt;&#xA;" OwnerUserId="27190" LastEditorUserId="27190" LastEditDate="2020-09-30T18:56:29.077" LastActivityDate="2021-01-01T21:33:25.063" Title="Imaginary part in result of inverse laplace transform" Tags="&lt;control&gt;&lt;quadcopter&gt;&lt;pid&gt;&lt;flight-controller&gt;&lt;drone&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21194" PostTypeId="1" CreationDate="2020-09-30T16:23:50.533" Score="2" ViewCount="54" Body="&lt;p&gt;Having a setup of a mobile robot with a 360° 2D lidar (1 plane). What is the current easiest approach to detect moving object with a high reliability from a moving robot? To make it simple, we consider an indoor application.&lt;/p&gt;&#xA;&lt;p&gt;My current considerations:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Creating a SLAM occupancy map (e.g. Hector SLAM)&lt;/li&gt;&#xA;&lt;li&gt;conducting  a projection of the measurement points to the created 2D occupancy map from &lt;em&gt;t-2&lt;/em&gt;. Points which are projected to the free space can be clustered as moving objects.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;The issues of the above approach are the chicken-egg-problem of the new measurement points and reliability of the detection.&lt;/p&gt;&#xA;&lt;p&gt;I've read the DATMO approach (detection and tracking moving object). However, the papers about DATMO are too complicated and too abstract for me.&lt;/p&gt;&#xA;&lt;p&gt;Is there any reliable approach without creating a global map through SLAM? Comparing points from &lt;em&gt;t&lt;/em&gt; and &lt;em&gt;t-1&lt;/em&gt; directly without estimating the robot movement/odometry is not a possible task.&lt;/p&gt;&#xA;" OwnerUserId="27151" LastActivityDate="2021-03-01T02:05:15.443" Title="What is the state-of-the-art approach to detect moving objects from mobile robot with 2D Lidar only?" Tags="&lt;slam&gt;&lt;lidar&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21195" PostTypeId="1" AcceptedAnswerId="21196" CreationDate="2020-09-30T17:03:57.917" Score="0" ViewCount="34" Body="&lt;p&gt;I am using a 1D lidar in one of my projects and it returns the distance it measures, in millimeters (mm). At some point in time, it gives garbage values that go as high as 10,000 or higher, when the value is expected to be under 200.&lt;/p&gt;&#xA;&lt;p&gt;To mitigate such such outliers, I though of using a Kalman filter. Although it is something new to me, I used &lt;a href=&quot;https://medium.com/blogyuxiglobal/kalman-filter-the-way-to-remove-outliers-bb6aa616788e&quot; rel=&quot;nofollow noreferrer&quot;&gt;this MEDIUM blog as a start&lt;/a&gt; and tried modifying his code to suit my case.&lt;/p&gt;&#xA;&lt;p&gt;I have the following data&#xA;&lt;a href=&quot;https://i.stack.imgur.com/WMcbk.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/WMcbk.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;. The visible peaks are the noise I added.&lt;/p&gt;&#xA;&lt;p&gt;I create a &lt;strong&gt;live&lt;/strong&gt; kalman filter as:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;import numpy as np&#xA;import math&#xA;from numpy import  dot&#xA;from numpy.linalg import inv&#xA;&#xA;class kf():&#xA;    def __init__(self):&#xA;        ### Defining filter&#xA;        #Transition Matrix&#xA;        self.F = np.array([[1.0]])&#xA;        #Observation Matrix&#xA;        self.H = np.array([[1.0]])&#xA;        #Process Noise Covariance&#xA;        self.Q = np.array([[0.09]])  # how much I trust the model&#xA;        #Measurement Noise Covariance&#xA;        self.R = np.array([[0.2*0.2]])&#xA;        # Control action Matrix&#xA;        self.B = np.array([1])&#xA;        #Control input&#xA;        self.U = np.array([1])&#xA;&#xA;        #Covariance Matrix&#xA;        self.P = 1.0&#xA;&#xA;        self.x_old = 100.0&#xA;&#xA;    def filter(self, y):&#xA;        x_old = self.x_old&#xA;        F = self.F&#xA;        B = self.B&#xA;        U = self.U&#xA;        P = self.P&#xA;        Q = self.Q&#xA;        H = self.H&#xA;        R = self.R&#xA;        I = np.identity(1)&#xA;        &amp;quot;&amp;quot;&amp;quot;&#xA;        Prediction&#xA;        &amp;quot;&amp;quot;&amp;quot;&#xA;        x = dot(F, x_old) + dot(B, U)&#xA;        P = dot(F, dot(P, F.T)) + Q&#xA;&#xA;        &amp;quot;&amp;quot;&amp;quot;&#xA;        Innovation&#xA;        &amp;quot;&amp;quot;&amp;quot;&#xA;        e = y - H*x&#xA;        S = dot(H, dot(P, H.T)) + R&#xA;&#xA;        &amp;quot;&amp;quot;&amp;quot;&#xA;        Mahalanobis distance approximation&#xA;        &amp;quot;&amp;quot;&amp;quot;&#xA;        MD = math.sqrt(e*e)/S&#xA;        #Weighted MD&#xA;        MDw = 1/(1+(math.exp(-MD) + 0.9))&#xA;        #New Measurement Noise Covariance&#xA;        R = np.array([[4*MDw]]) # bigger the R, the lesser the trust the system will have on the sensor measurement.&#xA;        #Kalman gain&#xA;        K = dot(P, dot(H.T, inv(S)))&#xA;        &amp;quot;&amp;quot;&amp;quot;&#xA;        Update&#xA;        &amp;quot;&amp;quot;&amp;quot;&#xA;        x_new = x + dot(K, dot(e,K))&#xA;        self.x_old = x_new&#xA;        self.P = dot(I - dot(K,H), P)&#xA;&#xA;        return x_new, x&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;And run as instance of this class each time I read the lidar value. The results are, (&lt;strong&gt;ignore the blue plot&lt;/strong&gt;)&#xA;&lt;a href=&quot;https://i.stack.imgur.com/mwQ50.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/mwQ50.png&quot; alt=&quot;ignore the blue plot&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I expected the filter to not be so severly affected by the outliers, I am new to this field and hence tried playing with the tunable parameters but to no gain :/&lt;/p&gt;&#xA;&lt;h3&gt;Where am I going wrong ? Is there any other non-computation-intense method for filtering data in real time ?&lt;/h3&gt;&#xA;" OwnerUserId="26766" LastActivityDate="2020-09-30T22:53:25.373" Title="Not getting expected performance from kalman filter+mahalanobis distance" Tags="&lt;kalman-filter&gt;&lt;lidar&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21196" PostTypeId="2" ParentId="21195" CreationDate="2020-09-30T22:53:25.373" Score="1" Body="&lt;p&gt;You are calculating the new R, but you're not using it. You just replace the new R with the line R = self.R.&lt;/p&gt;&#xA;&lt;p&gt;You are not removing the outliers, because you are ditching that result!&lt;/p&gt;&#xA;" OwnerUserId="26035" LastActivityDate="2020-09-30T22:53:25.373" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21197" PostTypeId="1" CreationDate="2020-10-01T12:40:22.740" Score="0" ViewCount="85" Body="&lt;p&gt;I'm using ros-melodic in a docker container based on the &lt;code&gt;osrf/ros:melodic-desktop-full&lt;/code&gt; image.&lt;/p&gt;&#xA;&lt;h3&gt;What my docker file does:&lt;/h3&gt;&#xA;&lt;p&gt;My Dockerfile installs the jackal's robot ros-stack as in this &lt;a href=&quot;https://www.clearpathrobotics.com/assets/guides/kinetic/jackal/simulation.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;tutorial&lt;/a&gt; from clearpath themselves.&lt;/p&gt;&#xA;&lt;p&gt;After that, I install the ros-bridge-server, since I have to connect to Unity. (this part is not a problem though).&lt;/p&gt;&#xA;&lt;p&gt;Finally I install my custom package which simply contains a custom &lt;a href=&quot;https://github.com/EricVoll/jackal_description/blob/master/ms_jackal_demo/launch/jackal_demo.launch&quot; rel=&quot;nofollow noreferrer&quot;&gt;roslaunch file&lt;/a&gt;.&#xA;This launch file is finally executed at the bottom of the Dockerfile.&lt;/p&gt;&#xA;&lt;h3&gt;What I'd expect:&lt;/h3&gt;&#xA;&lt;p&gt;When running the container (with appropriate port mapping etc.) I'd expect the container to start, launch roscore, gazebo with the defined worlds &amp;amp; robots, and move_base as a planner.&lt;/p&gt;&#xA;&lt;h3&gt;What happens:&lt;/h3&gt;&#xA;&lt;p&gt;A few nodes start:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;controller_spawner (controller_manager/spawner)&#xA;ekf_localization (robot_localization/ekf_localization_node)&#xA;file_server (file_server/file_server)&#xA;gazebo (gazebo_ros/gzserver)&#xA;move_base (move_base/move_base)&#xA;robot_state_publisher (robot_state_publisher/robot_state_publisher)&#xA;rosapi (rosapi/rosapi_node)&#xA;rosbridge_websocket (rosbridge_server/rosbridge_websocket)&#xA;twist_marker_server (interactive_marker_twist_server/marker_server)&#xA;twist_mux (twist_mux/twist_mux)&#xA;urdf_spawner (gazebo_ros/spawn_model)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;But then some errors in the ASLA lib are thrown. (missing sound cards; I am assuming that this does not break gazebo in total). Then the controller-spawner (and a few other processes) starts but quickly prints a warning &amp;quot;Controller Spawner couldn't find the expected controller_manager ROS interface.&amp;quot; A little bit later a error &amp;quot;Spawn service failed. Exiting.&amp;quot; comes up.&lt;/p&gt;&#xA;&lt;p&gt;Sending goals to move_base does not result in anything.&#xA;The output of &lt;code&gt;roswtf&lt;/code&gt; shows that the controller_spawner node died.&lt;/p&gt;&#xA;&lt;p&gt;Sometimes, if I run the exact same roslaunch command again in an attached shell after the startup of the container, the gazebo world works fine and the robots moves.&lt;/p&gt;&#xA;&lt;p&gt;I did work through &lt;a href=&quot;https://answers.ros.org/question/214712/gazebo-controller-spawner-warning/?answer=214731#post-id-214731&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; answer (and 4 hours of additional research, tests etc.), tried / checked all of their ideas, but that did not change anything.&#xA;&lt;a href=&quot;https://robotics.stackexchange.com/questions/20822/why-cant-the-controller-spawner-find-the-expected-controller-manager-ros-interf&quot;&gt;This&lt;/a&gt; answer does not help. All proposed packages are installed.&lt;/p&gt;&#xA;&lt;h2&gt;Question:&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;If everything &lt;a href=&quot;https://answers.ros.org/question/214712/gazebo-controller-spawner-warning/?answer=214731#post-id-214731&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; this answer is implemented as written there, what could be the reason for the error messages?&lt;/li&gt;&#xA;&lt;li&gt;Could somebody point me to a docker-file that works with gazebo more or less out of the box so that I can go from there?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;I can also post a link to my dockerfile if it helps. Any help and ideas appreciated.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;OS: Ubuntu 18.04 (in a container)&lt;/li&gt;&#xA;&lt;li&gt;ROS: Melodic&lt;/li&gt;&#xA;&lt;li&gt;all in docker on WSL2&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr /&gt;&#xA;" OwnerUserId="24330" LastActivityDate="2020-10-01T12:40:22.740" Title="Why can't the Controll Spawner find the expected control_manager ROS interface in a docker container?" Tags="&lt;ros&gt;&lt;gazebo&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21198" PostTypeId="2" ParentId="21192" CreationDate="2020-10-01T12:44:23.253" Score="1" Body="&lt;p&gt;SimMechanics has two ways to drive a joint - by angle or by torque. You can give it a position or speed and SimMechanics will auto-calculate the torque required to achieve that setpoint, or you can provide the torque and SimMechanics will auto-calculate what the resulting position change will be.&lt;/p&gt;&#xA;&lt;p&gt;You can simulate the system first by passing in the joint position references you'd like to have, and you can trend the joint torques and forces to see what size actuator you'd like to specify.&lt;/p&gt;&#xA;&lt;p&gt;If, for example, you wind up with some torque profile that has a really short-duration peak that is much higher than you'd like to specify the motors for, then you can do a simple motor simulation by passing a torque reference and clamping that to whatever your motor's rated torque is. Performance will degrade some, as you then can't drive to the same peak torque, but the performance hit might not be noticeable.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-10-01T12:44:23.253" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21200" PostTypeId="1" AcceptedAnswerId="21204" CreationDate="2020-10-01T18:08:21.693" Score="0" ViewCount="48" Body="&lt;p&gt;I understand that due to numerical errors (e.g., round off error and machine precision) that the covariance matrix may not be positive definite, but if computers had infinite precision, is the covariance positive definite?&lt;/p&gt;&#xA;&lt;p&gt;Along this line, are the noise matrices required to be positive definite as well if this is the case? This seems like a requirement just to be able to compute the residual covariance, but if I search EKF, the definiteness isn't mentioned for any of the matrices (except for the case of numerical errors).&lt;/p&gt;&#xA;" OwnerUserId="15213" LastEditorUserId="15213" LastEditDate="2020-10-01T19:56:18.367" LastActivityDate="2020-10-01T23:59:25.377" Title="Is the covariance matrix in the extended Kalman filter guaranteed to be positive definite (ignoring numerical errors)?" Tags="&lt;kalman-filter&gt;&lt;navigation&gt;&lt;ekf&gt;&lt;estimation&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21201" PostTypeId="1" CreationDate="2020-10-01T19:06:41.480" Score="1" ViewCount="29" Body="&lt;p&gt;I am brain storming platforms to use for a project I am working on. I'm looking for an mobile platform with a manipulator attached. I originally was focusing on the PiBot, but after doing some research the platform might is too short for my project. I am looking for something capable of reaching doorknobs and the tops of tables.&lt;/p&gt;&#xA;&lt;p&gt;I was wondering if anyone had suggestions for development platforms with the same profile as the locobot (thin and tall on a roomba type base). Or even robots that are used in industry. Let's pretend cost in not an issue for now...&lt;/p&gt;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="22640" LastActivityDate="2020-10-01T19:06:41.480" Title="Robotic Platforms Similar to the PiBot(Locobot)" Tags="&lt;mobile-robot&gt;&lt;robotic-arm&gt;&lt;manipulator&gt;&lt;autonomous-car&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="21202" PostTypeId="2" ParentId="21194" CreationDate="2020-10-01T23:18:52.243" Score="1" Body="&lt;p&gt;Obviously this problem can get very complicated when you just consider a 2D lidar. So I'm gonna try to keep my answer simple. You will want to estimate the position of the robot (odometry) as a minimum in order to project everything into a global space, rather than the local vehicle space. You can technically do it locally, but I personally don't think it is clean and you will run into more issues.&lt;/p&gt;&#xA;&lt;p&gt;If you wanted to just track a moving object, you can use something simple like k-means clustering to estimate the center of the moving objects based on N scan point. Anything that doesn't move in the global space between t and t-1 (within a reasonable margin of error) could be filtered out. Anything that does move can be estimated, flagged, and tracked with something like a kalman filter to cover potential misdetections or if the obstacle stops moving. Obviously this isn't a flawless idea, I'm just trying to give something to go off of based on your sensing capabilities.&lt;/p&gt;&#xA;" OwnerUserId="27199" LastActivityDate="2020-10-01T23:18:52.243" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21203" PostTypeId="2" ParentId="21191" CreationDate="2020-10-01T23:25:44.560" Score="0" Body="&lt;p&gt;5-10cm isn't too bad after 100m. Obviously this is kind of subjective because I don't know what hardware you are using. You could be using the cheapest encoders on the market for all I know. That being said, it's pretty good. I'd expect to see around 0.1% error in odometry without anything fancy like SLAM.&lt;/p&gt;&#xA;" OwnerUserId="27199" LastActivityDate="2020-10-01T23:25:44.560" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21204" PostTypeId="2" ParentId="21200" CreationDate="2020-10-01T23:31:23.843" Score="2" Body="&lt;p&gt;It is always guaranteed to be positive semi definite.&lt;/p&gt;&#xA;&lt;p&gt;That being said you have to somewhat deliberately set up your system to be that way. So essentially yes it is always positive definite.&lt;/p&gt;&#xA;&lt;p&gt;Reasoning:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Covariance matrix by definition is always &lt;a href=&quot;https://en.wikipedia.org/wiki/Covariance_matrix&quot; rel=&quot;nofollow noreferrer&quot;&gt;positive semidefinite&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://statisticaloddsandends.wordpress.com/2018/01/31/xtx-is-always-positive-semidefinite/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;span class=&quot;math-container&quot;&gt;$A^TA$&lt;/span&gt; is always positive semidefinite&lt;/a&gt; (Takes care of the propagation matrix and the information matrix)&lt;/li&gt;&#xA;&lt;li&gt;Addition and subtraction of positive semidefinite matrices are also positive semi definite. (Also applies to positive definite)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Since we are ignoring machine precision the only way for a matrix to be positive semidefinite(PSD) is if all of your matrices end up being positive semidefinite. This includes your covariances, Propogation matrix, and information matrix. If one of them ends up being definite(PD) then the result will be positive definite.&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$PSD + PD = PD$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;A semidefinite matrix occurs when you have problems with your observability. Essentially you are trying to measure something that is impossible for you to observe. Crazy example would be you are tracking a robot position with IMU+GPS and additionally are trying to estimate temperature. Your IMU+GPS combination can not observe the temperature so it is unobservable.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Along this line, are the noise matrices required to be positive&#xA;definite as well if this is the case? This seems like a requirement&#xA;just to be able to compute the residual covariance, but if I search&#xA;EKF, the definiteness isn't mentioned for any of the matrices (except&#xA;for the case of numerical errors).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Again you could potentially make one of your &lt;a href=&quot;https://stats.stackexchange.com/questions/56832/is-every-covariance-matrix-positive-definite/56833&quot;&gt;noise matrices positive semidefinite&lt;/a&gt;, but then you are probably making some sort of modeling mistake. A covariance matrix is only positive &lt;strong&gt;semi&lt;/strong&gt;definite if one of the variables is a linear combination of the others.&lt;/p&gt;&#xA;" OwnerUserId="15265" LastEditorUserId="15265" LastEditDate="2020-10-01T23:59:25.377" LastActivityDate="2020-10-01T23:59:25.377" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21206" PostTypeId="1" AcceptedAnswerId="21207" CreationDate="2020-10-02T06:24:50.560" Score="0" ViewCount="43" Body="&lt;p&gt;I am trying to simulate a &lt;strong&gt;cartesian regulator&lt;/strong&gt; for a unicycle with Simulink and I am having some problems.&lt;/p&gt;&#xA;&lt;p&gt;My simulink model is the following:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/x21vD.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/x21vD.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;and when I run it I get the following error message:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/B4wwE.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/B4wwE.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;so it seems I am doing something wrong with the dimensions.&lt;/p&gt;&#xA;&lt;p&gt;I have added also some &lt;strong&gt;ToWorkspace&lt;/strong&gt; blocks since I want to use the results to do some plots.&lt;/p&gt;&#xA;&lt;p&gt;I have not very good at using Simulink, so I am having a lot of problem and &lt;strong&gt;I don't know how to solve the error message I get.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Cab somebody please help me?&lt;/p&gt;&#xA;" OwnerUserId="21797" LastEditorUserId="21797" LastEditDate="2020-10-03T08:02:08.050" LastActivityDate="2020-10-03T08:02:08.050" Title="error with dimensions in Simulink" Tags="&lt;mobile-robot&gt;&lt;wheeled-robot&gt;&lt;matlab&gt;&lt;simulation&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21207" PostTypeId="2" ParentId="21206" CreationDate="2020-10-02T06:51:57.377" Score="0" Body="&lt;p&gt;Split the output of the regulator into to seperate signals.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;function [v_out, omega_out] = C_REG(q)&#xA;...&#xA;v_out = v;&#xA;omega_out = omega;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;You are probably compounding the signals in a different way then Simulink is trying to demux it. You can use a Mux block if you really want just one signal path.&lt;/p&gt;&#xA;&lt;p&gt;There is also a change that simply changing the last line to a row vector instead of a column vector could also help&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;inputs=[v,omega];&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-10-02T06:51:57.377" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="21208" PostTypeId="1" CreationDate="2020-10-02T15:26:24.387" Score="0" ViewCount="11" Body="&lt;p&gt;The questions is quite straightforward. For the past few days I've been looking into point cloud registration. It looks like it all started with the basic ICP algorithm as described in &lt;em&gt;P. J. Besl and N. D. McKay, &amp;quot;A method for registration of 3-D shapes&amp;quot;&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Since then, there have been possibly thousands of papers describing faster or more accurate variants of this algorithm. &lt;strong&gt;Is there a go-to variation of the algorithm or some variations that stand out nowadays?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I know different papers focus on different parts of the algorithm. Others try to find a good correspondence between points, others try to increase the speed of specific methods of correspondence, others try to take advantage of RGB values or any other data collected from images accompanying the point cloud...&lt;/p&gt;&#xA;&lt;p&gt;It's been chaotic trying to pick a specific algorithm for this. I'm mostly interested in real-time registration if that helps. I can use RGB data in my implementation but I'd also like to know efficient ways without image data.&lt;/p&gt;&#xA;" OwnerUserId="27202" LastActivityDate="2020-10-02T15:26:24.387" Title="What are the state-of-the-art variants of the basic ICP algorithm for point cloud registration?" Tags="&lt;slam&gt;&lt;localization&gt;&lt;point-cloud&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21209" PostTypeId="1" AcceptedAnswerId="21211" CreationDate="2020-10-02T15:27:23.760" Score="0" ViewCount="56" Body="&lt;p&gt;I have built a simulink model for performing cartesian regulation on a unicycle:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ENlL2.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ENlL2.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;and plot the results with a Matlab code&lt;/p&gt;&#xA;&lt;p&gt;but, I am not very confident with Simulink and so I don't know how to call these codes into my Simulink model.&lt;/p&gt;&#xA;&lt;p&gt;Can somebody please help me?&lt;/p&gt;&#xA;" OwnerUserId="21797" LastEditorUserId="21797" LastEditDate="2020-10-03T08:03:31.233" LastActivityDate="2020-10-03T08:03:31.233" Title="How do I call Matlab code into Simulink for doing a simulation for doing plots?" Tags="&lt;mobile-robot&gt;&lt;control&gt;&lt;matlab&gt;&lt;simulation&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21210" PostTypeId="1" CreationDate="2020-10-02T16:22:22.833" Score="0" ViewCount="22" Body="&lt;p&gt;I am new to ROS and have inherited simple code to subscribe and monitor topic on a remote node. The code is using ws4py's &lt;code&gt;WebSocketClient&lt;/code&gt;, connecting to &lt;code&gt;wss://myhost/ws&lt;/code&gt;, subscribing to the topic by sending &lt;code&gt;{'op':'subscribe','topic':'mynode/mytopic'}&lt;/code&gt; request. The messages are coming just fine.&lt;/p&gt;&#xA;&lt;p&gt;How do I list all topics published by &lt;code&gt;myhost/mynode&lt;/code&gt; using a websocket request?&lt;/p&gt;&#xA;&lt;p&gt;Would it be better to use &lt;code&gt;rospy&lt;/code&gt; for higher-level access?&lt;/p&gt;&#xA;&lt;p&gt;I tried some google-fu, no result, found only &lt;a href=&quot;https://github.com/RobotWebTools/rosbridge_suite/blob/groovy-devel/ROSBRIDGE_PROTOCOL.md&quot; rel=&quot;nofollow noreferrer&quot;&gt;rosbridge protocol&lt;/a&gt; description, but it does not mention listing topics.&lt;/p&gt;&#xA;&lt;p&gt;Thanks for help!&lt;/p&gt;&#xA;" OwnerUserId="27203" LastEditorUserId="27203" LastEditDate="2020-10-02T17:17:05.440" LastActivityDate="2020-10-02T17:17:05.440" Title="How to list all topics of a remote node" Tags="&lt;ros&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21211" PostTypeId="2" ParentId="21209" CreationDate="2020-10-02T16:35:55.633" Score="2" Body="&lt;p&gt;There's a &lt;a href=&quot;https://www.mathworks.com/help/simulink/ug/creating-an-example-model-that-uses-a-matlab-function-block.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Matlab function block&lt;/a&gt;. Follow the example and your inputs and outputs will create source/sink connections on the Simulink block to wire in values.&lt;/p&gt;&#xA;&lt;p&gt;I would only put the controller in there, and don't use the &lt;code&gt;clear all&lt;/code&gt; command - if it's not &lt;code&gt;persistent&lt;/code&gt; then a variable inside a function ceases to exist between function calls. Every call to the function wipes all the internal variables inside that function.&lt;/p&gt;&#xA;&lt;p&gt;If you're wanting your data to be plotted at the end then you can use a &lt;a href=&quot;https://www.mathworks.com/help/simulink/slref/toworkspace.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;To Workspace block&lt;/a&gt; and send the data out that way and plot from the console or script after the Simulink project finishes.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-10-02T16:35:55.633" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="21212" PostTypeId="1" CreationDate="2020-10-02T23:01:35.420" Score="1" ViewCount="33" Body="&lt;p&gt;The robot is standing in the middle of the arena. I am confused on how to convert the pixels into a real life distance and how to use the bounding box. Starting help is appreciated.&lt;/p&gt;&#xA;" OwnerUserId="27204" LastActivityDate="2021-03-02T07:06:40.730" Title="How can I find a robot's distance from an object given FOV, bounding box measure, and image width and height in pixels?" Tags="&lt;kinematics&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21213" PostTypeId="2" ParentId="21212" CreationDate="2020-10-03T05:32:08.113" Score="0" Body="&lt;p&gt;The best (and cheapest) method would be to use &lt;a href=&quot;https://github.com/AprilRobotics/apriltag&quot; rel=&quot;nofollow noreferrer&quot;&gt;AprilTags&lt;/a&gt;. I have added the python bindings for it &lt;a href=&quot;https://github.com/duckietown/lib-dt-apriltags&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;For a great starting point, refer to &lt;a href=&quot;https://www.orangenarwhals.com/2018/04/getting-started-with-apriltags-on-ubuntu-16-04/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this blog&lt;/a&gt; that explains the setup in C++.&lt;/p&gt;&#xA;&lt;p&gt;It can not only tell you the distance but also &lt;a href=&quot;http://downloads.hindawi.com/journals/ijae/2019/7050915.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;the orientation of the object&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I hope it helps.&lt;/p&gt;&#xA;" OwnerUserId="26766" LastActivityDate="2020-10-03T05:32:08.113" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21214" PostTypeId="1" AcceptedAnswerId="21557" CreationDate="2020-10-03T05:42:52.427" Score="0" ViewCount="68" Body="&lt;p&gt;I am trying to use Kalman Filter in my project to eliminate outliers that go beyond certain limit.&lt;/p&gt;&#xA;&lt;p&gt;I am use 1D lidar to get the distance between the robot and an object. I get pretty accurate values in &lt;strong&gt;mm&lt;/strong&gt;. The output from 3 such lidars looks as follows:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/qUCzi.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qUCzi.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Now, I know that the outlier can be removed using &lt;a href=&quot;https://medium.com/blogyuxiglobal/kalman-filter-the-way-to-remove-outliers-bb6aa616788e&quot; rel=&quot;nofollow noreferrer&quot;&gt;Kalman Filter + Maholobonis distance&lt;/a&gt;. It is efficient in doing so. But I too can do that by passing all the values through a limiter (that rejects all values above a threshold). (e.g., `if(val &amp;gt; threshold): continue).&lt;/p&gt;&#xA;&lt;p&gt;Another inherent feature of this Kalman filter is that it smoothes the values, as shown in this demo.&lt;/p&gt;&#xA;&lt;p&gt;(&lt;a href=&quot;https://i.stack.imgur.com/M6KYS.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/M6KYS.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3&gt;Do I really need a Kalman Filter ?&lt;/h3&gt;&#xA;" OwnerUserId="26766" LastActivityDate="2020-12-28T09:08:51.767" Title="Is Kalman filter really desired here?" Tags="&lt;kalman-filter&gt;&lt;lidar&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21216" PostTypeId="1" CreationDate="2020-10-03T13:09:22.867" Score="0" ViewCount="39" Body="&lt;p&gt;I first state my humble probably wrong opinion on the connection of these concepts: In gravity compensation mode, each joint has equilibrium as its set point, a human demonstrator can effortlessly move the robot arm to conduct a task like pick up a ball, during this process, the orientation, angular speed and acceleration of the joint is recorded, as well as the Torque (Gravity Compensation torque plus the anti-torque the human exerted).   An inverse dynamic model, mapping from (orientation, angular speed, acceleration) to Torque can be built.  At reproduction phase,  the path is planned by a motion encoder trying to reproduce the demonstrated trajectory, then the inverse dynamics learned is used to exert torque to achieve each point in the planned path.  Is the statement correct?&lt;/p&gt;&#xA;&lt;p&gt;Question1 : If one sees a multi-joint robot (the industry robot for production line) sitting there without power input, there is mechanical constraint which will govern the relative orientation of each joint. In gravity compensation mode, it is each separate joint can rest in arbitrary position, right?&lt;/p&gt;&#xA;&lt;p&gt;But the human demonstrator can not ensure the individual joint always in the equilibrium state, there must be some acceleration, in this case, how the extra torque from the Gravity Compensation mechanism is executed?  Is there a book about gravity compensation or the mechanics analysis of Kinesthetic Teaching?&lt;/p&gt;&#xA;&lt;p&gt;Question2: haptic control is advantageous for gripping than simply use a joystick which might break the object or not executing enough force, is there any sources explaining technical details about how that works?&lt;/p&gt;&#xA;" OwnerUserId="27206" LastEditorUserId="27206" LastEditDate="2020-10-03T13:48:20.277" LastActivityDate="2021-03-03T17:10:15.900" Title="Understanding across gravity compensation, demonstration (Kinesthetic Teaching vs. Teleoperation) and inverse dynamics" Tags="&lt;control&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21217" PostTypeId="1" CreationDate="2020-10-03T16:30:03.513" Score="0" ViewCount="59" Body="&lt;h3&gt;Scenario:&lt;/h3&gt;&#xA;&lt;p&gt;I have a robotic arm that has a (1D) lidar on its end, to orient itself with respect to the slant table in front of it. The lidar returns pretty accurate distance values in &lt;strong&gt;mm&lt;/strong&gt;. The motor controlling the arm's motion towards the table (or away from it), uses time-duration values in &lt;strong&gt;seconds&lt;/strong&gt; provided by the user and moves the arm fast or slow, &lt;strong&gt;at a pre-defined velocity&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;e.g., &lt;code&gt;arm_up(0.5)&lt;/code&gt; pulls the arm up at some velocity, for 0.5 seconds.&lt;/p&gt;&#xA;&lt;h3&gt;What am I trying to do:&lt;/h3&gt;&#xA;&lt;p&gt;I am trying to control the the position of the arm before it comes to a certain distance from the table (200 mm). That is, it moves &lt;em&gt;more&lt;/em&gt; when far and &lt;em&gt;less&lt;/em&gt; when near it.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/FM01e.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FM01e.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3&gt;Attempts:&lt;/h3&gt;&#xA;&lt;p&gt;I planned to use a controller to achieve this. First attempt included using a P-controller (P: Proportional) which involved fixing a gain &lt;em&gt;Kp&lt;/em&gt; that gets multiplied with the error. I wanted the output of this controller to be in the range 0.1 to 1.0. I tried multiple values of Kp but did not get &lt;code&gt;factor&lt;/code&gt; values proportional to the distance to be covered. When I set Kp=0.008, It works well when the error = 500 (mm), and the factor comes out to be = error x Kp, or 500 x 0.008=0.4, but when the error=10mm, factor=10 x 0.008=0.8 which is too below for the actuator to do anything, owing to the fact that all values must be in the range 0.1 to 1.0. Alternatively, setting higher values for Kp (as 0.01), requires me to clamp the output to a fixed value.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Kp = 0.003&#xA;if(LIDAR_1 &amp;gt; 200):&#xA;                # P Controller&#xA;                error = abs(200 - LIDAR_1)&#xA;                duration = error * Kp&#xA;                # To keep everything &amp;lt; 1.0 &#xA;                factor = duration%1.0&#xA;                arm_down(factor)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Then, I used the &lt;a href=&quot;https://en.wikipedia.org/wiki/Feature_scaling&quot; rel=&quot;nofollow noreferrer&quot;&gt;feature scaler&lt;/a&gt; to scale the range (given by the lidar) to the desired range (0.1 to 1.0). To filter very high values, I used a &lt;code&gt;mod&lt;/code&gt; operator a.k.a &lt;code&gt;%&lt;/code&gt; in Python.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;if(LIDAR_1 &amp;gt; 200):&#xA;                # Using Feature Scaling&#xA;                duration = ((LIDAR_1-200)*0.8/800) + 0.2&#xA;                # To keep everything &amp;lt; 1.0 &#xA;                factor = duration%1.0&#xA;                arm_down(factor)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h3&gt;How is the (P) controller not standing up to its task ? Is it not meant to provide a value of Kp that satisfy all the cases (arm's distant or close encounters)&lt;/h3&gt;&#xA;" OwnerUserId="26766" LastEditorUserId="26766" LastEditDate="2020-10-10T04:35:28.263" LastActivityDate="2020-10-10T04:35:28.263" Title="Res-Scaling method beats PID controller. How?" Tags="&lt;control&gt;&lt;pid&gt;&lt;python&gt;&lt;lidar&gt;" AnswerCount="1" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="21218" PostTypeId="2" ParentId="21158" CreationDate="2020-10-04T10:25:01.720" Score="0" Body="&lt;p&gt;In general you have to assign some probability distribution to your map or cells individually and update them iteratively.&lt;/p&gt;&#xA;&lt;p&gt;In the very simple case you can just apply a low-pass filter to each of your cells. Like that: &lt;span class=&quot;math-container&quot;&gt;$p[t] = a*p[t-1] + (1-a)*I(occupied)$&lt;/span&gt;&#xA;where I is an indicator function which is set to 1 if current lidar measurement shows that cell is occupied and to 0 otherwise.&lt;/p&gt;&#xA;&lt;p&gt;Better way is to look at SLAM methods like FastSLAM. Which use particles and Kalman filters underneath. Comparing to the case I described above, Kalman filter will produce better estimates, because  it is optimal in the sense that it minimizes variances thus giving you as precise estimate of a mean as possible.&lt;/p&gt;&#xA;" OwnerUserId="15392" LastEditorUserId="21531" LastEditDate="2021-03-13T19:25:47.373" LastActivityDate="2021-03-13T19:25:47.373" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21219" PostTypeId="2" ParentId="19427" CreationDate="2020-10-04T16:19:10.123" Score="1" Body="&lt;p&gt;I think another good place to jump right in is to examine the &lt;a href=&quot;http://docs.ros.org/melodic/api/robot_localization/html/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;robot_localization&lt;/a&gt; package that is used in the ROS community. It implements both EKF and UKF sensor fusion estimators. The package is widely used, supported, and documented which makes it ideal for someone looking to start understanding how robot localization with multiple sensors works at a practical level. The &lt;a href=&quot;https://answers.ros.org/questions/scope:all/sort:activity-desc/tags:robot_localization/page:1/&quot; rel=&quot;nofollow noreferrer&quot;&gt;robot_localization ROS Answers&lt;/a&gt; tag is very very active and is a good place to field questions about he package if you run in to them while experimenting with it.&lt;/p&gt;&#xA;&lt;p&gt;For the particular case of implementing GPS and imu fusion look at &lt;a href=&quot;http://docs.ros.org/melodic/api/robot_localization/html/integrating_gps.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;robot_localization Integrating GPS Data&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I know this may not be a narrow and specific answer, but I think it could lead any one interested in the area onto a very useful path of discovery and has helped me build an understanding of the subject over the last year.&lt;/p&gt;&#xA;" OwnerUserId="27205" LastActivityDate="2020-10-04T16:19:10.123" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21220" PostTypeId="2" ParentId="21216" CreationDate="2020-10-04T16:58:38.440" Score="0" Body="&lt;p&gt;No, your statement is not entirely correct. During the teaching of the robot the trajectory in geometrical terms (positions velocities, maybe accelerations) are recorded, not torque. The trajectory is then replayed (although in many cases only some way points are recorded not in entire trajectory)&lt;/p&gt;&#xA;&lt;p&gt;The inverse dynamics is not learned. All parameters of the robot required for a dynamic model and inverse dynamic model are available for robot manufacturers about their robot. However, they do not make these parameters public.&lt;/p&gt;&#xA;&lt;p&gt;At the &amp;quot;reporoduction phase&amp;quot; as you call it, the inverse dynamics model does not play an important role. It is simply a geometrical path, a trajectory  (velocities) is planned for the path and the motion controller executes this motion, by setting the set-point of the position controller, the feed forward signal of the velocity controller and here the inverse dynamics might be used to set the feed forward signal of the torque controller, but this only improves the jerkiness of the motion, it is not essential for obtaining movement.&lt;/p&gt;&#xA;&lt;p&gt;Your Question 1 is not quite clear. An industrial robot, without power is held in place by many factors. First holding brakes at each joint, used to block the axis mechanically. If the breaks are released, there is still a good probability that the robot will not fall due to friction in many axes (in the gearbox) and due to a hydro pneumatic spring used in the second axis (most subjected to gravitational forces). Robots which have this hydropnenumatic spring set up to a high pressure (exerted force) can lift up instead of falling down on releasing the brakes without power to the motors.&lt;/p&gt;&#xA;&lt;p&gt;For large industrial robots it is no customary to have a &amp;quot;free-joint&amp;quot; mode.&lt;/p&gt;&#xA;&lt;p&gt;Haptic feedback is has multiple variants, vibration in a joystick is also a haptic feedback. I assume you refer to force feedback. I do not think force feedback is extensively used in the way you describe. Having the gripper force translate to a joystick force feedback would be beneficial if someone wants to learn to grip with a joystick, but the breaking limit is then learned by the human after many trials intuitively and is not advantageous to make a process dependent on the intuitive knowledge of on human operator. Instead, the breaking force can be determined and the grasping force can be set to a certain upper limit. This would not necessarily work for different grasping positions, but that is also true for a force feedback solution. It is not similar to how a human would feel the force while grasping something, since our fingers feel both force and slippage, such a feedback is not possible with technical systems.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-10-04T16:58:38.440" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21221" PostTypeId="1" AcceptedAnswerId="21222" CreationDate="2020-10-05T06:18:15.843" Score="0" ViewCount="55" Body="&lt;p&gt;I have an autonomous differential drive robot that moves on the floor and its purpose is to &lt;strong&gt;always&lt;/strong&gt; move parallel to the longer edge of the table (just assume that the table never ends). It looks something like :&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/OQxZa.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OQxZa.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Now, the robot will be using this same method to align itself to the table edge for the first time. Also, when it travels forward (along the edge), it is prone to deviate from its path due to various reasons. Again, this method will guide it to stay on the right track.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I can't use any line-following method.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="26766" LastActivityDate="2020-10-05T08:12:08.483" Title="How to make my robot move parallel to edge of the table?" Tags="&lt;sensors&gt;&lt;differential-drive&gt;&lt;precise-positioning&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21222" PostTypeId="2" ParentId="21221" CreationDate="2020-10-05T06:29:52.210" Score="2" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;I can't use any line-following method.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Actually, you are quite wrong, the way I understand the problem. It is a line-following. It is just that the line is not painted (like on the road). The line is the edge of the table.&lt;/p&gt;&#xA;&lt;p&gt;The way I see it, your robot needs to look up, and detect the line &amp;quot;painted&amp;quot; by the edge of the table on the ceiling. Once the line is detected, just follow it.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;I have in mind 2 ways to detect the edge of the table.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Contrast based: using an imaging sensor (e.g., camera), detect the edge of the table by detecting the contrast / color change. Based on this, adjust the trajectory.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Distance measurement: an IR sensor (practically, more) can be used to measure the distance to the first obstacle (table or ceiling), vertically. It should be easy to do, considering that the ceiling is significantly higher than the table.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/FGkMX.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FGkMX.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="22248" LastEditorUserId="22248" LastEditDate="2020-10-05T08:12:08.483" LastActivityDate="2020-10-05T08:12:08.483" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="21223" PostTypeId="2" ParentId="21221" CreationDate="2020-10-05T07:29:30.440" Score="2" Body="&lt;p&gt;The problem you are describing is quite similar to line following from a controls perspective, there is a difference in how the line is detected.&lt;/p&gt;&#xA;&lt;p&gt;Line following robots use a wide variety of ways to detect line. Simplest is probably photo-resistors or phototransistors, however magnetic stripes (lines) and hall effect sensors have been quite popular in the industrial world some years ago.&lt;/p&gt;&#xA;&lt;p&gt;Industrial applications of mobile robots have now switched to camera (and laserscanner) based systems. In many cases the camera is downward facing, however upward facing cameras are also not uncommon (not exactly industrial, but roomba vacuums use also partially upward facing cameras)&lt;/p&gt;&#xA;&lt;p&gt;If you mount a camera on your robot, facing upwards, and the edge of the table is visible, you can use edge detection algorithms to detect the edge of the table. If you are lucky and there is a high contrast between the area under the table and above the table edge detection will perform quite well.&lt;/p&gt;&#xA;&lt;p&gt;The edge is your line, but you still have to map this to the line you want to follow. The line being in the middle of the camera image is not necessarily what you want, but you can apply simple transformations to make this line your path to follow. If you can deduce a signed distance function (negative distance one side of the line, positive distance on the other side of the line, zero on the line) you can use this signed distance function as an input to your line following controller.&lt;/p&gt;&#xA;&lt;p&gt;The only difference to a more common line following approach is how you detect the line and com up with the current position relative to the line. Everything else is like a classical line following problem.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-10-05T07:29:30.440" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21224" PostTypeId="2" ParentId="21113" CreationDate="2020-10-06T03:12:42.283" Score="0" Body="&lt;p&gt;I cannot recommend the robot_localization package in ROS enough. Please see my response to another post I made today &lt;a href=&quot;https://robotics.stackexchange.com/a/21219/27205&quot;&gt;How does sensor fusion help in robot localization&lt;/a&gt;. The documentation for the package is superb and I think, assuming you have ROS avaliable, you can have a EKF or UKF up and running in a week.&lt;/p&gt;&#xA;&lt;p&gt;And as it regards the authors claim in a comment to another answer that the UKF provides &amp;quot;a better way of linearizing the non linear functions&amp;quot; I think it should be clear that is not true. A UKF does not linearize anything. It just picks some well placed samples (called sigma points) and passes them through the nonlinear functions, calculating weighted approximations to the expected values and covariances as it goes along. It is not calculating a Jacobian and linearizing about the mean like the EKF does.&lt;/p&gt;&#xA;" OwnerUserId="27205" LastEditorUserId="27205" LastEditDate="2020-10-06T03:18:10.380" LastActivityDate="2020-10-06T03:18:10.380" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21225" PostTypeId="2" ParentId="21217" CreationDate="2020-10-06T13:26:51.887" Score="2" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;How is the (P) controller not standing up to its task ?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Well, just like you said - &lt;strong&gt;how&lt;/strong&gt; is it not standing up to its task? What is it doing that makes you think it's not working? You said,&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I tried multiple values of Kp but could not succeed&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Nobody here knows what that means. &amp;quot;Could not succeed&amp;quot; could be a lot of problems. My guess is that you're trying to regulate something with only a proportional controller. &lt;a href=&quot;https://engineering.stackexchange.com/a/7740/1633&quot;&gt;Integral gains are the only way to drive steady-state error to zero&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;What are some other things you could be doing wrong? Well, for starters, you said:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I am trying to control the the position of the arm [so]... it moves more when far and less when near [the table].&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This sounds like you want a &lt;strong&gt;signed&lt;/strong&gt; error, to drive your arm in &lt;strong&gt;two&lt;/strong&gt; directions, yet your code you provided has error calculated as:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;error = abs(200 - LIDAR_1)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;If your error only has one sign (positive) then your arm only moves in one direction. Also, your error is calculated only with &lt;code&gt;LIDAR_1&lt;/code&gt;, even though your entry into that calculation depends on &lt;code&gt;LIDAR_1&lt;/code&gt; &lt;strong&gt;and&lt;/strong&gt; &lt;code&gt;LIDAR_2&lt;/code&gt;. Are you sure that you don't want something like&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;error = LIDAR_2 - LIDAR1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;or something similar? &lt;em&gt;You haven't provided any diagrams showing what your values are, what the significance of 200 is, what angle it is you're trying to control, or how you're calculating that angle.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Next, following your code all the way through:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;error = abs(200 - LIDAR_1)&#xA;duration = error * Kp&#xA;# To keep everything &amp;lt; 1.0 &#xA;factor = factor%1.0&#xA;arm_down(factor)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Let's look at your code line-by-line:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Calculate the (absolute value of an) error,&lt;/li&gt;&#xA;&lt;li&gt;Modify the error with a proportional gain to make a &amp;quot;duration,&amp;quot;&lt;/li&gt;&#xA;&lt;li&gt;Modify a &amp;quot;factor,&amp;quot;&lt;/li&gt;&#xA;&lt;li&gt;Use the factor to run &lt;code&gt;arm_down&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;strong&gt;Note: At no point in there did you use the duration.&lt;/strong&gt; Maybe you meant &lt;code&gt;factor = duration % 1.0&lt;/code&gt;?&lt;/p&gt;&#xA;&lt;p&gt;But, finally, &lt;em&gt;modulus is not your friend.&lt;/em&gt; This is definitely &lt;strong&gt;NOT&lt;/strong&gt; what you want for it to be doing.&lt;/p&gt;&#xA;&lt;p&gt;On the topic of the modulus, you said&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;to scale the range (given by the lidar) to the desired range (0.1 to 5.0). To filter very high values, I used a mod operator a.k.a % in Python.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;First, you say that you want the desired range to be 0.1 to 5.0, but you're doing &lt;code&gt;value % 1.0&lt;/code&gt;, so you're only going to get numbers between 0 and 0.999.&lt;/p&gt;&#xA;&lt;p&gt;Second, you're making your control signal &amp;quot;wrap.&amp;quot; Assuming you actually did &lt;code&gt;value % 5.0&lt;/code&gt;, which I think is what you were intending given your stated desired range, then you get the following:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;4.8 % 5.0 = 4.8&#xA;4.9 % 5.0 = 4.9&#xA;5.0 % 5.0 = 0&#xA;5.1 % 5.0 = 0.1&#xA;5.2 % 5.0 = 0.2&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;If you think of this like a cruise-control system, a very fast acceleration would have you push the pedal all the way to the floor, but if you wanted to accelerate even faster then your modulus operation actually has the controller take its foot completely off the pedal.&lt;/p&gt;&#xA;&lt;p&gt;What you need instead is to &lt;strong&gt;clamp&lt;/strong&gt; the value, like&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;if(duration &amp;gt; 5.0)&#xA;    duration = 5.0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The best thing you can do for us, and yourself, is to make a drawing that shows where your lidar units are, what measurement you're expecting from them, and how those measurements relate to an angle you're trying to control.&lt;/p&gt;&#xA;&lt;p&gt;You should then calculate that angle, using the diagram as a guide for developing the equation, and use the angle instead of raw lidar readings in your code.&lt;/p&gt;&#xA;&lt;p&gt;Finally, structurally speaking, your PID/controller code should accept the angle/error and use that to calculate a raw control signal. If you have some downstream process that needs it to be in a particular range, then you can modify/saturate/clamp that signal inside that downstream process. This keeps your code more modular and easier to troubleshoot.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-10-06T13:26:51.887" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="21226" PostTypeId="1" AcceptedAnswerId="21227" CreationDate="2020-10-06T14:37:30.053" Score="0" ViewCount="38" Body="&lt;p&gt;In the Kalman Filter the final covariance matrix is the estimate of the filter's uncertainty.&#xA;How does one do so in Particle filters? Is it just the variance among the particles for each state?&lt;/p&gt;&#xA;&lt;p&gt;If so, then how do you deal with crosscorrelation?&lt;/p&gt;&#xA;" OwnerUserId="17461" LastActivityDate="2020-10-06T15:45:54.383" Title="How do Particle Filters give estimates of uncertainty?" Tags="&lt;kalman-filter&gt;&lt;particle-filter&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21227" PostTypeId="2" ParentId="21226" CreationDate="2020-10-06T14:45:37.947" Score="1" Body="&lt;p&gt;For a simple case, given a particle set, calculate the weighted sum of the particles by iterating over each particle &lt;span class=&quot;math-container&quot;&gt;$i$&lt;/span&gt; in the set &lt;span class=&quot;math-container&quot;&gt;$N$&lt;/span&gt;:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$\mu_{x} = \Sigma_{I=1}^{N} w_{i} x_{i}$$&lt;/span&gt;&#xA;And then calculate the weighted covariance for each particle &lt;span class=&quot;math-container&quot;&gt;$i$&lt;/span&gt; in the set &lt;span class=&quot;math-container&quot;&gt;$N$&lt;/span&gt; and sum them up:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$P_{xx} = \Sigma_{I=1}^{N} w_{i} (x_{i}-\mu_{x})(x_{i}-\mu_{x})^{T}$$&lt;/span&gt;&#xA;Where &lt;span class=&quot;math-container&quot;&gt;$w_{i}$&lt;/span&gt; is the weight of the i(th) particle and &lt;span class=&quot;math-container&quot;&gt;$x_{i}$&lt;/span&gt; is the state vector (column vector in this case) represented by that particle.&lt;/p&gt;&#xA;" OwnerUserId="27205" LastEditorUserId="27205" LastEditDate="2020-10-06T15:45:54.383" LastActivityDate="2020-10-06T15:45:54.383" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21228" PostTypeId="1" AcceptedAnswerId="21231" CreationDate="2020-10-07T23:14:04.913" Score="1" ViewCount="52" Body="&lt;p&gt;hope you are all well.&lt;/p&gt;&#xA;&lt;p&gt;I am trying to finish a capstone project on Coursera. It asks me to carry a cube object from an initial position to goal. &lt;a href=&quot;https://www.youtube.com/watch?v=Q1CekpBW6Js&amp;amp;ab_channel=NorthwesternRobotics&quot; rel=&quot;nofollow noreferrer&quot;&gt;This&lt;/a&gt; video shows the movement.&lt;/p&gt;&#xA;&lt;p&gt;Project website: &lt;a href=&quot;http://hades.mech.northwestern.edu/index.php/Mobile_Manipulation_Capstone&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://hades.mech.northwestern.edu/index.php/Mobile_Manipulation_Capstone&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;On the simulation software, simulation commands are sent as 13 element row vectors. The vector information looks like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;chassis phi, chassis x, chassis y, J1, J2, J3, J4, J5, W1, W2, W3, W4, gripper state&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;J1 to J5 are robot arm joints and the W1 to W4 are mobile wheel angels. Gripper state is 0 if the gripper is open and 1 if the gripper is closed.&lt;/p&gt;&#xA;&lt;p&gt;In the project page, it tells me to create 3 separate functions.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;First function (NextState) takes 3 inputs:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A twelve-vector containing robot configuration (without gripper state)&lt;/li&gt;&#xA;&lt;li&gt;A 9 vector containing joint and wheel speeds (1 to 5 for joint speeds and 6 to 9 are wheel speeds)&lt;/li&gt;&#xA;&lt;li&gt;A timestep t&lt;/li&gt;&#xA;&lt;li&gt;A maximum value for the arm joints and wheels (can be set as a very high number if desired)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;strong&gt;It produces 1 input:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;12 vector containing the robot configuration after timestep t.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;strong&gt;Second function (TrajectoryGenerator) takes 6 inputs:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Initial end-effector configuration, Tse&lt;/li&gt;&#xA;&lt;li&gt;Initial cube configuration, Tsc_initial&lt;/li&gt;&#xA;&lt;li&gt;Desired cube configuration, Tsc_final&lt;/li&gt;&#xA;&lt;li&gt;End effector related to cube configuration while grasping, Tce_grasp&lt;/li&gt;&#xA;&lt;li&gt;End effector related to cube configuration before and after grasping, Tce_standoff&lt;/li&gt;&#xA;&lt;li&gt;Trajectory reference configurations per second, k.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;strong&gt;Second function produces 1 output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;1 13 by m matrix containing reference robot configurations in each row (13 th row contains gripper state).&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Third function takes 5 inputs:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Actual end effector configuration, X or Tse&lt;/li&gt;&#xA;&lt;li&gt;Reference end effector configuration, Xd or Tse_d&lt;/li&gt;&#xA;&lt;li&gt;Next reference end effector configuration, Xd_next or Tse_d_next&lt;/li&gt;&#xA;&lt;li&gt;PI gain Kp and Ki&lt;/li&gt;&#xA;&lt;li&gt;Timestep t&lt;/li&gt;&#xA;&lt;li&gt;Actual joint configuration, thetaList&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;strong&gt;Third function produces 4 outputs:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Feed-forward reference twist, Vd&lt;/li&gt;&#xA;&lt;li&gt;End-effector twist, in end-effector frame, V.&lt;/li&gt;&#xA;&lt;li&gt;Je to calculate controls vector&lt;/li&gt;&#xA;&lt;li&gt;controls vector, u or u_theta_dot&lt;/li&gt;&#xA;&lt;li&gt;Xerr to inspect the reference error.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Here are my function implementations:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;function newConfiguration = NextState(currentConfiguration, controls, delta_t, limit)&#xA;&#xA;%% Assigning the properties of the robot:&#xA;l = 0.47/2;&#xA;w = 0.30/2;&#xA;r = 0.0475;&#xA;&#xA;%% Assigning current and new configurations and speeds:&#xA;currentJoints = currentConfiguration(4:8)';&#xA;currentWheels = currentConfiguration(9:12)';&#xA;armJointSpeeds = controls(1:5)';&#xA;wheelSpeeds = controls(6:9)';&#xA;newJoints = currentJoints + (armJointSpeeds .* delta_t);&#xA;newWheels = currentWheels + (wheelSpeeds .* delta_t);&#xA;Tsbk = [cos(currentConfiguration(1)), -sin(currentConfiguration(1)), 0, currentConfiguration(2); sin(currentConfiguration(1)), cos(currentConfiguration(1)), 0, currentConfiguration(3); 0, 0, 1, 0.0963; 0, 0, 0, 1];&#xA;&#xA;%% Calculating deltaTheta to initiate the odometry process:&#xA;deltaTheta = newWheels - currentWheels;&#xA;thetaDot = deltaTheta/delta_t;&#xA;&#xA;Vb = (r/4) * [-1 / (l + w), 1 / (l + w), 1 / (l + w), -1 / (l + w); 1, 1, 1, 1; -1, 1, -1, 1] * thetaDot;&#xA;Vb6 = [0; 0; Vb; 0];&#xA;newChassisRelative = expm(VecTose3(Vb6));&#xA;Tsbk1 = Tsbk * newChassisRelative;&#xA;&#xA;phi = acos(Tsbk1(1,1));&#xA;x = Tsbk1(1, 4);&#xA;y = Tsbk1(2, 4);&#xA;&#xA;chass = [phi x y];&#xA;&#xA;newConfiguration = [chass'; newJoints; newWheels]';&#xA;&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;................&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;function movement = TrajectoryGenerator(Tse_initial, Tsc_initial, Tsc_final, Tce_grasp, Tce_standoff, k)&#xA;&#xA;%% Sequence:&#xA;%  1. Arm moves above the cube.&#xA;%  2. Arm reaches the cube.&#xA;%  3. Arm grasps the cube.&#xA;%  4. Arm returns to the position 1&#xA;%  5. Arm goes to final position.&#xA;&#xA;Tse_standoff = Tsc_initial * Tce_standoff;&#xA;&#xA;Tse_grasp = Tsc_initial * Tce_grasp;&#xA;&#xA;Tse_final = Tsc_final * [cosd(135), 0, sind(135) 0; 0, 1, 0  0; -sind(135), 0, cosd(135), 0; 0 0 0 1];&#xA;&#xA;% Standing on top of the cube tracejtory:&#xA;traj1 = CartesianTrajectory(Tse_initial, Tse_standoff, 8, (8*k) / 0.01, 5)&#xA;&#xA;traj2 = CartesianTrajectory(Tse_standoff, Tse_grasp, 8, (8*k) / 0.01, 5);&#xA;&#xA;traj3 = CartesianTrajectory(Tse_grasp, Tse_standoff, 8, (8*k) / 0.01, 5);&#xA;&#xA;traj4 = CartesianTrajectory(Tse_standoff, Tse_final, 8, (8*k) / 0.01, 5);&#xA;&#xA;&#xA;for i = 1 : length(traj1)&#xA;    trajectory1(i, :) = [traj1{i}(1,1) traj1{i}(1,2) traj1{i}(1,3) traj1{i}(2,1) traj1{i}(2,2) traj1{i}(2,3) traj1{i}(3,1) traj1{i}(3,2) traj1{i}(3,3) traj1{i}(1, 4) traj1{i}(2, 4) traj1{i}(3, 4) 0];&#xA;end&#xA;&#xA;for i = 1 : length(traj2)&#xA;    trajectory2(i, :) = [traj2{i}(1,1) traj2{i}(1,2) traj2{i}(1,3) traj2{i}(2,1) traj2{i}(2,2) traj2{i}(2,3) traj2{i}(3,1) traj2{i}(3,2) traj2{i}(3,3) traj2{i}(1, 4) traj2{i}(2, 4) traj2{i}(3, 4) 0];&#xA;end&#xA;&#xA;index = size(trajectory2);&#xA;&#xA;for i = 1 : 15&#xA;    trajectory3(i, :) = [traj3{i}(1,1) traj3{i}(1,2) traj3{i}(1,3) traj3{i}(2,1) traj3{i}(2,2) traj3{i}(2,3) traj3{i}(3,1) traj3{i}(3,2) traj3{i}(3,3) traj3{i}(1, 4) traj3{i}(2, 4) traj3{i}(3, 4) 1];&#xA;end &#xA;&#xA;for i = 16 : length(traj3)&#xA;    trajectory3(i, :) = [traj3{i}(1,1) traj3{i}(1,2) traj3{i}(1,3) traj3{i}(2,1) traj3{i}(2,2) traj3{i}(2,3) traj3{i}(3,1) traj3{i}(3,2) traj3{i}(3,3) traj3{i}(1, 4) traj3{i}(2, 4) traj3{i}(3, 4) 1];&#xA;end &#xA;&#xA;trajectory2(:, 13) = 0; &#xA;trajectory2(1:35, 13) = 0;&#xA;&#xA;for i = 1 : length(traj4)&#xA;    trajectory4(i, :) = [traj4{i}(1,1) traj4{i}(1,2) traj4{i}(1,3) traj4{i}(2,1) traj4{i}(2,2) traj4{i}(2,3) traj4{i}(3,1) traj4{i}(3,2) traj4{i}(3,3) traj4{i}(1, 4) traj4{i}(2, 4) traj4{i}(3, 4) 1];&#xA;end&#xA;index = size(trajectory4);&#xA;trajectory4(index(1)-20:index(1), 13) = 0; &#xA;&#xA;%% traj2_5 is used for the arm to wait for few seconds before grasping.&#xA;for i = 1 : 10&#xA;traj2_5{i} = traj2{length(traj2)};&#xA;end&#xA;&#xA;%% traj4_5 is used for the arm to wait for few seconds before releasing the cube.&#xA;for i = 1 : 50&#xA;traj4_5{i} = traj4{length(traj4)};&#xA;end&#xA;&#xA;for i = 1 : length(traj4_5)&#xA;trajectory4_5(i, :) = [traj4_5{i}(1,1) traj4_5{i}(1,2) traj4_5{i}(1,3) traj4_5{i}(2,1) traj4_5{i}(2,2) traj4_5{i}(2,3) traj4_5{i}(3,1) traj4_5{i}(3,2) traj4_5{i}(3,3) traj4_5{i}(1, 4) traj4_5{i}(2, 4) traj4_5{i}(3, 4) 0];&#xA;end&#xA;&#xA;for i = 1 : length(traj2_5)&#xA;trajectory2_5(i, :) = [traj2_5{i}(1,1) traj2_5{i}(1,2) traj2_5{i}(1,3) traj2_5{i}(2,1) traj2_5{i}(2,2) traj2_5{i}(2,3) traj2_5{i}(3,1) traj2_5{i}(3,2) traj2_5{i}(3,3) traj2_5{i}(1, 4) traj2_5{i}(2, 4) traj2_5{i}(3, 4) 1];&#xA;end&#xA;&#xA;movement = [trajectory1; trajectory2; trajectory2_5; trajectory3; trajectory4; trajectory4_5];  &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;.........&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;function [Vd, V, Je, u_theta_dot, Xerr] = FeedbackControl(X, Xd, Xd_next, Kp, Ki, delta_t, thetaList)&#xA;&#xA;%% Arm properties.&#xA;Blist = [0 0 1 0 0.033 0; 0 -1 0 -0.5076 0 0; 0 -1 0 -0.3526 0 0; 0 -1 0 -0.2176 0 0; 0 0 1 0 0 0]';&#xA;l = 0.47/2;&#xA;w = 0.30/2;&#xA;r = 0.0475;&#xA;F = (r/4) * [-1/(l + w), 1/(l + w), 1/(l + w), -1/(l + w); 1 1 1 1; -1 1 -1 1];&#xA;sizee = size(F);&#xA;m = sizee(2);&#xA;zeross = zeros(1, m);&#xA;F6 = [zeross; zeross; F; zeross];&#xA;&#xA;Tb0 = [1 0 0 0.1662; 0 1 0 0; 0 0 1 0.0026; 0 0 0 1];&#xA;M0e = [1 0 0 0.033; 0 1 0 0; 0 0 1 0.6546; 0 0 0 1];&#xA;T0e = FKinBody(M0e, Blist, thetaList);&#xA;Tbe = Tb0 * T0e;&#xA;Teb = inv(Tbe);&#xA;Jbase = Adjoint(Teb) * F6;&#xA;Jarm = JacobianBody(Blist, thetaList);&#xA;Je = [Jbase, Jarm];&#xA;&#xA;psInv = pinv(Je, 1e-02);&#xA;&#xA;Xerr_bracket = MatrixLog6(inv(X) * Xd);&#xA;Xerr = se3ToVec(Xerr_bracket);&#xA;Vd_bracket = (1/delta_t) * MatrixLog6(inv(Xd) * Xd_next);&#xA;Vd = se3ToVec(Vd_bracket);&#xA;&#xA;V = (Adjoint(inv(X) * Xd) * Vd) + (Kp * Xerr) + (Ki*(Xerr + Xerr * delta_t));&#xA;&#xA;u_theta_dot = psInv * V;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;end&lt;/p&gt;&#xA;&lt;p&gt;.....&lt;/p&gt;&#xA;&lt;p&gt;I tested my 3 functions in order to check for any possible errors; however function outputs were exactly like the expected ones on the project website. However, I wrote a final program to put together everything, but the results are nowhere close to the solution. I believe that I did something wrong in the program.&lt;/p&gt;&#xA;&lt;p&gt;This was my approach:&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;1. Cube's final and initial configurations are given.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;2. End effector initial reference configuration is given.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;3. I created a reference trajectory with Trajectory Generator function&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;4. I chose a 12 vector robot configuration at random.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;5. I calculated the 4x4 Tse_actual with that 12 vector&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;6. I choose the kth and k+1th steps as the Xd and Xd_next&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;7. I calculated the Feed-forward twist V and controls with Kp and Ki = 0 with FeedbackControl function&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;8. I calculated the new robot configuration with the current actual robot configuration(12 vector) and controls with NextState function.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;9. Went to step 4&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;10. Loop as many times number of trajectory points.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;And this is my program to find the robot configurations to accomplish the goal:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    clc&#xA;clear&#xA;&#xA;Blist = [0 0 1 0 0.033 0; 0 -1 0 -0.5076 0 0; 0 -1 0 -0.3526 0 0; 0 -1 0 -0.2176 0 0; 0 0 1 0 0 0]';&#xA;Tb0 = [1 0 0 0.1662; 0 1 0 0; 0 0 1 0.0026; 0 0 0 1];&#xA;M0e = [1 0 0 0.033; 0 1 0 0; 0 0 1 0.6546; 0 0 0 1];&#xA;&#xA;l = 0.47/2;&#xA;w = 0.30/2;&#xA;r = 0.0475;&#xA;F = (r/4) * [-1/(l + w), 1/(l + w), 1/(l + w), -1/(l + w); 1 1 1 1; -1 1 -1 1];&#xA;&#xA;sizee = size(F);&#xA;m = sizee(2);&#xA;zeross = zeros(1, m);&#xA;F6 = [zeross; zeross; F; zeross];&#xA;&#xA;Kp = 0.005;&#xA;Ki = 0.005 * 0.1;&#xA;delta_t = 0.1;&#xA;&#xA;%%&#xA;Tse_initial = [0 0 1 0; 0 1 0 0; -1 0 0 0.25; 0 0 0 1];&#xA;Tsc_initial = [1 0 0 1; 0 1 0 0; 0 0 1 0.025; 0 0 0 1];&#xA;Tsc_final = [0 1 0 0; -1 0 0 -1; 0 0 1 0.025; 0 0 0 1];&#xA;Tce_standoff = [1 0 0 0; 0 1 0 0; 0 0 1 0.1; 0 0 0 1] * [cosd(135), 0, sind(135) 0; 0, 1, 0  0; -sind(135), 0, cosd(135), 0; 0 0 0 1];&#xA;Tce_grasp = [1 0 0 0; 0 1 0 0; 0 0 1 0; 0 0 0 1] * [cosd(135), 0, sind(135) 0; 0, 1, 0  0; -sind(135), 0, cosd(135), 0; 0 0 0 1];&#xA;&#xA;movement = TrajectoryGenerator(Tse_initial, Tsc_initial, Tsc_final, Tce_grasp, Tce_standoff, 1);&#xA;&#xA;conf1(1, :) = [0.5, -0.9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];&#xA;o = conf1(1);&#xA;x = conf1(2);&#xA;y = conf1(3);&#xA;z = 0.0963;&#xA;Tsb = [cos(o), -sin(o), 0 x; sin(o), cos(o), 0, y; 0, 0, 1, z; 0, 0, 0, 1];&#xA;Tb0 = [1, 0, 0, 0.1662; 0, 1, 0, 0; 0, 0, 1, 0.0026; 0, 0, 0, 1];&#xA;thetalist = conf1(4 : 8);&#xA;T0e = FKinBody(M0e, Blist, thetalist);&#xA;%%&#xA;X = Tsb * Tb0 * T0e;&#xA;%%&#xA;refconf1 = movement(1,:);&#xA;refconf2 = movement(1,:);&#xA;&#xA;oconf1 = refconf1(1);&#xA;xconf1 = refconf1(2);&#xA;yconf1 = refconf1(3);&#xA;&#xA;oconf2 = refconf2(1);&#xA;xconf2 = refconf2(2);&#xA;yconf2 = refconf2(3);&#xA;&#xA;Tsb1 = [cos(oconf1), -sin(oconf1), 0 xconf1; sin(oconf1), cos(oconf1), 0, yconf1; 0, 0, 1, z; 0, 0, 0, 1];&#xA;thetalist1 = refconf1(4 : 8);&#xA;T0e1 = FKinBody(M0e, Blist, thetalist1);&#xA;Xd1 = Tsb1 * Tb0 * T0e1;&#xA;&#xA;Tsb2 = [cos(oconf2), -sin(oconf2), 0 xconf2; sin(oconf2), cos(oconf2), 0, yconf2; 0, 0, 1, z; 0, 0, 0, 1];&#xA;thetalist2 = refconf2(4 : 8);&#xA;T0e2 = FKinBody(M0e, Blist, thetalist2);&#xA;Xd2 = Tsb2 * Tb0 * T0e2;&#xA;[Vd, V, Je, controls, Xerr] = FeedbackControl(X, Xd1, Xd2, Kp, Ki, delta_t, thetalist);&#xA;&#xA;%%&#xA;for i = 2 : length(movement) -1&#xA;conf1(i, :) = NextState(conf1(i-1, :), controls', delta_t, 5000);&#xA;o = conf1(1);&#xA;x = conf1(2);&#xA;y = conf1(3);&#xA;z = 0.0963;&#xA;Tsb = [cos(o), -sin(o), 0 x; sin(o), cos(o), 0, y; 0, 0, 1, z; 0, 0, 0, 1];&#xA;Tb0 = [1, 0, 0, 0.1662; 0, 1, 0, 0; 0, 0, 1, 0.0026; 0, 0, 0, 1];&#xA;thetalist = conf1(4 : 8);&#xA;T0e = FKinBody(M0e, Blist, thetalist);&#xA;X = Tsb * Tb0 * T0e;&#xA;%&#xA;refconf1 = movement(i,:);&#xA;refconf2 = movement(i+1,:);&#xA;&#xA;oconf1 = refconf1(1);&#xA;xconf1 = refconf1(2);&#xA;yconf1 = refconf1(3);&#xA;&#xA;oconf2 = refconf2(1);&#xA;xconf2 = refconf2(2);&#xA;yconf2 = refconf2(3);&#xA;&#xA;Tsb1 = [cos(oconf1), -sin(oconf1), 0 xconf1; sin(oconf1), cos(oconf1), 0, yconf1; 0, 0, 1, z; 0, 0, 0, 1];&#xA;thetalist1 = refconf1(4 : 8);&#xA;T0e1 = FKinBody(M0e, Blist, thetalist1);&#xA;Xd1 = Tsb1 * Tb0 * T0e1;&#xA;&#xA;Tsb2 = [cos(oconf2), -sin(oconf2), 0 xconf2; sin(oconf2), cos(oconf2), 0, yconf2; 0, 0, 1, z; 0, 0, 0, 1];&#xA;thetalist2 = refconf2(4 : 8);&#xA;T0e2 = FKinBody(M0e, Blist, thetalist2);&#xA;Xd2 = Tsb2 * Tb0 * T0e2;&#xA;[Vd, V, Je, controls, Xerr] = FeedbackControl(X, Xd1, Xd2, Kp, Ki, delta_t, thetalist);&#xA;%&#xA;end&#xA;sizee = size(conf1);&#xA;&#xA;for i = 1 : sizee(1)&#xA;    conf1(i, 13) = movement(i, 13);&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I know that this is a lot to look for; however I am trying for almost 2 days and I could never figure my mistake out. Can you help me?&lt;/p&gt;&#xA;" OwnerUserId="26789" LastEditorUserId="26789" LastEditDate="2020-10-08T01:28:47.117" LastActivityDate="2020-10-08T11:09:50.250" Title="My Pick and Place Program Not Working" Tags="&lt;robotic-arm&gt;&lt;manipulator&gt;&lt;simulation&gt;&lt;trajectory&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21230" PostTypeId="1" AcceptedAnswerId="21235" CreationDate="2020-10-08T08:32:49.277" Score="0" ViewCount="35" Body="&lt;p&gt;I'm trying to design a controller for a path-planning robot  using &lt;a href=&quot;https://www.cs.cmu.edu/%7Emotionplanning/lecture/Chap4-Potential-Field_howie.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Artificial Potnetial Functions&lt;/a&gt; [Prof. Howie Choset, Page 6 and 9, &lt;span class=&quot;math-container&quot;&gt;$\nabla D(q)$&lt;/span&gt;] and had a question about calculating the gradients of the potential functions to generate the force.&lt;/p&gt;&#xA;&lt;p&gt;From what I understand, the attractive and repulsive force is calculated from the gradient of the attractive and repulsive potentials, i.e. &lt;span class=&quot;math-container&quot;&gt;$\nabla f_{a}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\nabla f_{r}$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\begin{equation}&#xA;f_{r} = \begin{cases} \eta * (1/d(q, q_{o}) - 1/\rho_{o}))^2, &amp;amp;&amp;amp; d(q, q_{o}) \leq \rho_{o} \\&#xA;0, &amp;amp;&amp;amp; d(q, q_{o}) &amp;gt; \rho_{o}&#xA;\end{cases}&#xA;\tag{1}&#xA;\end{equation}$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\begin{equation}&#xA;f_{a} = \epsilon * d(q, q_{g})^2 &#xA;\tag{2}&#xA;\end{equation}$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$q$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$q_{o}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$q_{g}$&lt;/span&gt; are the coordinates of location of the agent, nearest obstacle  and the goal respectively. &lt;span class=&quot;math-container&quot;&gt;$\rho_{o}$&lt;/span&gt; is the repulsive radius of each obstacle. &lt;span class=&quot;math-container&quot;&gt;$d$&lt;/span&gt; is the Euclidean distance.&lt;/p&gt;&#xA;&lt;p&gt;This gradient operation on each of the potentials in (1), (2), yields an &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; and a &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt; component, which are the &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; and the &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt; components of the gradient vector at that point. We then combine all the horizontal components and the vertical components to calculate the angle, &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt;, of the resultant force &lt;span class=&quot;math-container&quot;&gt;$F_{r}$&lt;/span&gt; with the horizontal.&lt;/p&gt;&#xA;&lt;p&gt;Is this the right approach or am I misinterpretating the &lt;span class=&quot;math-container&quot;&gt;$\nabla$&lt;/span&gt; operations? The &lt;span class=&quot;math-container&quot;&gt;$X$&lt;/span&gt; and the &lt;span class=&quot;math-container&quot;&gt;$Y$&lt;/span&gt; components of the gradient at each point have to be computed seperately and then combined or am I missing something here?&lt;/p&gt;&#xA;&lt;p&gt;Any and all help is appreciated!&lt;/p&gt;&#xA;" OwnerUserId="20925" LastEditorUserId="20925" LastEditDate="2020-10-08T08:41:37.327" LastActivityDate="2020-10-09T07:22:51.787" Title="Computing attractive and repulsive forces from gradient of Artificial Potential Functions for path-planning" Tags="&lt;path-planning&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21231" PostTypeId="2" ParentId="21228" CreationDate="2020-10-08T11:09:50.250" Score="3" Body="&lt;p&gt;The best way to debug geometry related applications is by using plots.&lt;/p&gt;&#xA;&lt;p&gt;First of all, plot the initial configuration, with robot TCP, cube initial position, cube final position. As these are all input values all should be ok.&lt;/p&gt;&#xA;&lt;p&gt;After this, plot the generated trajectory. Is this what you are expecting it to be? does it link the start end end points exactly? You can use small arrows (quiver plot) to add orientations to each point to make sure that those are also as expected. Visually it is easy to judge if something goes wrong.&lt;/p&gt;&#xA;&lt;p&gt;After this, you can better identify where the problem is, before trajectory generation, during or after. This is the goal of debugging (a kind of meta divide et impera) to slowly close in on the problematic part by dividing and subdividing the code and checking if it works ok.&lt;/p&gt;&#xA;&lt;p&gt;For each timestep after trajectory generation you can plot the robot itself. You can check if it follows the trajectory or not, or where does it go off track.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-10-08T11:09:50.250" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="21232" PostTypeId="1" CreationDate="2020-10-08T13:30:50.147" Score="1" ViewCount="40" Body="&lt;p&gt;In my robotics textbook &lt;sup&gt; 1 &lt;/sup&gt;, the configuration space has been defined configuration space the following way:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A configuration space is a metric space compromising of all given configuration of a system.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Then he goes one about how we can define a metric on a configuration space of a system and some other ideas on based on it... I can't understand this at all.&lt;/p&gt;&#xA;&lt;p&gt;What exactly is the concept of configuration space and secondly what is the idea behind defining distances behind it?&lt;/p&gt;&#xA;&lt;p&gt;After some quick googling, I understood that a metric space is just a set endowed with a notion of distance but I can't understand how it connects to robotics. What exactly is the idea behind what the author is trying to say here?&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;sup&gt; 1 &lt;/sup&gt; Mechanics of Robot Manipualtion, Matthew T. Mason,page-11&lt;/p&gt;&#xA;" OwnerUserId="27228" LastEditorUserId="27228" LastEditDate="2020-10-08T13:36:51.913" LastActivityDate="2020-10-08T16:10:50.030" Title="What is the idea behind calling configuration space a metric space?" Tags="&lt;geometry&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21233" PostTypeId="2" ParentId="21232" CreationDate="2020-10-08T14:33:57.010" Score="1" Body="&lt;p&gt;I did not read the book. But one of possible thinks that came to my mind is this:&lt;/p&gt;&#xA;&lt;p&gt;There is big field in mathematica dedicated to preciselly define some terms (set, metric, metric space, ...) and prove a lot of thinks about them. Once you can prove, that something is &amp;quot;metric space&amp;quot; then you can use any result from this part about &amp;quot;metric space&amp;quot; and safely apply it to your problem, knowing, that it fits.&lt;/p&gt;&#xA;&lt;p&gt;So many authors use this &amp;quot;reduction on known problem&amp;quot; to be able use all knowledge collected about the &amp;quot;known problem&amp;quot; and apply it on the problem they have (and maybe then add something new).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Say I want win a contest on running thru maze in less time (and I have 2 tries).&lt;/p&gt;&#xA;&lt;p&gt;Then I would just prove, that the maze can be described as graph where crossing are nodes and ways between them are weighted edges, where the weight is travel time.&lt;/p&gt;&#xA;&lt;p&gt;Then I can first run just &amp;quot;map&amp;quot; all the maze and in second run use &lt;a href=&quot;https://en.wikipedia.org/wiki/Shortest_path_problem&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Shortest_path_problem&lt;/a&gt; known graph theory to find &amp;quot;shortest path&amp;quot;, in my case fastest (as I maesure the time, not distance).&lt;/p&gt;&#xA;&lt;p&gt;And then I would folow the fastest way and the rest just dependes on how good motor and navigatition I have, knowing I cannot get better result any other way (I can get the same result at the best).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;So I think, that the author of the book took the same approach - he &amp;quot;proved&amp;quot;, that configurations can be described as some already known mathematic constructs and then he use proven knowledges about those mathematical constructs to apply them on configurations and get desired results &amp;quot;fast, easy and proven way&amp;quot;.&lt;/p&gt;&#xA;" OwnerUserId="16496" LastActivityDate="2020-10-08T14:33:57.010" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21234" PostTypeId="2" ParentId="21232" CreationDate="2020-10-08T16:10:50.030" Score="0" Body="&lt;p&gt;In regard to your question about what a configuration space is:&lt;/p&gt;&#xA;&lt;p&gt;Lets pretend we have a car (which is kinda like a mobile robot).&lt;/p&gt;&#xA;&lt;p&gt;The C-space can be though of as the locations on the map where there is no collision. But what does that really mean for a  mobile vehicle?&lt;/p&gt;&#xA;&lt;p&gt;For example if we are traveling 50 mph towards a brick wall and our breaks are out, you can imagine  that at some point it will be too late to turn away from the wall and we will crash into it at some point in the future. So even though the space BEFORE we collided (but after it was too late to turn away) was technically free open space, it was not a free C-space because there was no action we could take at that point which would have avoided a collision.&lt;/p&gt;&#xA;&lt;p&gt;So what the C-space models is the entire set of valid states of the car, which therefore considers its position, kinematic motion, and steering constraints. These should satisfy some property, like our ability to not crash into the wall. I think the understanding that the C-space is a function of more than just position is an important thing to understand. Because it can be a function of so many things it can be challenging to visualize it in our dimension limited 3D world.&lt;/p&gt;&#xA;&lt;p&gt;I bet there is some robotics guru who will disagree with my characterization of C-space, and I look forward to learning more from them, but I hope this helps answer the question or spawns at least one productive thought.&lt;/p&gt;&#xA;" OwnerUserId="27205" LastActivityDate="2020-10-08T16:10:50.030" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21235" PostTypeId="2" ParentId="21230" CreationDate="2020-10-09T07:22:51.787" Score="0" Body="&lt;p&gt;The role of the gradient here is to get vector information from the potential functions and not just a value. You are right in assuming, that you work separately on the X and Y axes, in the sense that the equations are vector and not scalar equations.&lt;/p&gt;&#xA;&lt;p&gt;The potential function is a differentiable scalar function. Adding the gradient to the scalar function will return a vector and this operation transforms the operations to a vector function. This is not the only affect of the gradient function. The gradient does not only project to axes, but expresses the (partial) derivates, instead of just projections. This effect is very nicely demonstrated on the &lt;a href=&quot;https://en.wikipedia.org/wiki/Gradient&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia page&lt;/a&gt; of the gradient on &lt;a href=&quot;https://en.wikipedia.org/wiki/Gradient#/media/File:Gradient2.svg&quot; rel=&quot;nofollow noreferrer&quot;&gt;this image&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-10-09T07:22:51.787" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21236" PostTypeId="1" CreationDate="2020-10-09T23:11:04.047" Score="1" ViewCount="25" Body="&lt;p&gt;I'm hoping to build a 40kg rover for running on soft and loose dirt by using fewer than 4 motors. Does anyone know if differential steering is possible on 3 actuated wheels? That is, two at the front and one at the back.&lt;/p&gt;&#xA;&lt;p&gt;Any advice appreciated.&lt;/p&gt;&#xA;" OwnerUserId="11489" LastActivityDate="2020-10-09T23:11:04.047" Title="Differential steering" Tags="&lt;differential-drive&gt;&lt;steering&gt;" AnswerCount="0" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="21237" PostTypeId="1" CreationDate="2020-10-10T19:48:36.487" Score="1" ViewCount="441" Body="&lt;p&gt;I am planning to produce and release a robot to the market and also worked with different platforms for development such as arduino,pic,micropython/python. But now I want to do this professional. I just want to know what will be the best microcontroller to produce a bot for the market. Language will not be a great matter but it's better if python/js is a choice.&lt;/p&gt;&#xA;" OwnerUserId="27238" LastActivityDate="2021-03-15T01:01:20.217" Title="Best microcontroller for develop a robot for the market" Tags="&lt;python&gt;&lt;soft-robotics&gt;" AnswerCount="4" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="21238" PostTypeId="1" CreationDate="2020-10-11T02:00:47.963" Score="0" ViewCount="66" Body="&lt;p&gt;How is trajectory planning normally carried out in off-road/unstructured environments? In particular I'm interested in how stereo vision can be used to plot trajectories over obstacles - for example, how does one generate ground planes when the environment is extremely rough and the robot is sitting at an angle?&lt;/p&gt;&#xA;" OwnerUserId="21514" LastActivityDate="2020-10-16T20:44:36.463" Title="Trajectory planning in unstructured environments" Tags="&lt;computer-vision&gt;&lt;stereo-vision&gt;&lt;trajectory&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21239" PostTypeId="1" CreationDate="2020-10-11T17:48:08.873" Score="1" ViewCount="347" Body="&lt;p&gt;I need to do odometry for a 4 mecanum wheeled robot for indoor applications. Is it possible to do it with just wheel encoders and IMU sensors? If possible, how? It will be of great help if someone shares any material. Thanks!&lt;/p&gt;&#xA;" OwnerUserId="26283" LastActivityDate="2020-10-12T07:25:20.143" Title="How to do odometry for 4 mecanum wheeled robot?" Tags="&lt;mobile-robot&gt;&lt;odometry&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="21240" PostTypeId="2" ParentId="21239" CreationDate="2020-10-12T07:20:15.373" Score="2" Body="&lt;p&gt;In order to transform encoder signals to robot motions a kinematic model of the robot is needed. In some cases this is very simple, just including the gear ratios and a heading angle (e.g. with Ackerman steering model). This is a simple kinematic model.&lt;/p&gt;&#xA;&lt;p&gt;A more complex case is differential steering, where the encoder signals pass through a kinematic transformation in order to calculate the heading angle.&lt;/p&gt;&#xA;&lt;p&gt;The differential drive kinematic model can be a good inspiration to the Mecanum kinematic model. The Mecanum wheel robot will include more encoders (at least 3), since it has more holomonic degrees of freedom. Furthermore, if you have 4 wheels and 4 encoder, care must be taken in the kinematics model, since you have one more sensor then degrees of freedom. You can use this to improve the accuracy of the model, but it will make things a bit more complex.&lt;/p&gt;&#xA;&lt;p&gt;You take all encoder signals and feed them to a forward kinematic model, which gives you the Cartesian position change (if we consider tick change to be the encoder signal).&lt;/p&gt;&#xA;&lt;p&gt;After you obtain the Cartesian position change (or other derived signal, like position or velocity) you can use this in any odometry, sensor fusion (with IMU) or SLAM algorithm (with optical sensors).&lt;/p&gt;&#xA;&lt;p&gt;You can google &amp;quot;4 wheel mecanum kinematic model&amp;quot; and you can find examples on how to implement this.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2020-10-12T07:25:20.143" LastActivityDate="2020-10-12T07:25:20.143" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="21241" PostTypeId="1" AcceptedAnswerId="21242" CreationDate="2020-10-12T07:55:16.860" Score="1" ViewCount="36" Body="&lt;p&gt;Trying to create a collision avoidance model (RRT) for an RRRRR manipulator. I am unable to wrap my head around how to represent the same in configuration space. Anything upto 3 joint variables is easy to visualize but how do I go about for anything with more variables?&lt;/p&gt;&#xA;&lt;p&gt;I understand that I need to sample points in C-space and check for collision using forward kinematics. But how do I sample these points if I dont know what the C space looks like (what the x, y or z axis represent - I have only 3 axis's for 5 variables)?&lt;/p&gt;&#xA;&lt;p&gt;Any explanation or link to reading material would be highly appreciated!&lt;/p&gt;&#xA;" OwnerUserId="27243" LastActivityDate="2020-10-12T09:10:12.200" Title="C space for R5 manipulator" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;manipulator&gt;&lt;path-planning&gt;&lt;beginner&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21242" PostTypeId="2" ParentId="21241" CreationDate="2020-10-12T09:10:12.200" Score="0" Body="&lt;p&gt;You do not neceserily create an explicit C-Space representation which you sample.&lt;/p&gt;&#xA;&lt;p&gt;You have to choose, if you want to create your path in axis space or operational space (Cartesian space). This is a design choice and has some influence on the final shape of the trajectory. I am going to assume, that you plan in operational space (Cartesian-like).&lt;/p&gt;&#xA;&lt;p&gt;You sample the operational space. You select one pose of the TCP with 5 coordinates, e.g. &lt;span class=&quot;math-container&quot;&gt;$X_{TCP} = [x, y, z, a, b]$&lt;/span&gt;, 3 positions and 2 orientations.&lt;/p&gt;&#xA;&lt;p&gt;You apply the inverse kinematics to find the position and orientation of the linkages of the robot which sets the TCP to this pose. This starts with finding the axis angles.&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$Q = f^{-1}(X_{TCP})$$&lt;/span&gt;&#xA;where &lt;span class=&quot;math-container&quot;&gt;$Q = [q_1, q_2, q_3, q_5, q_5]$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;If you have the axis angles you can build up the transformation matrices for each linkage and position the linkages in the operational space.&lt;/p&gt;&#xA;&lt;p&gt;The full collision check now can be done. There is no constraint on which method you use, the more accurate the method, the more accurate the results, obviously.&lt;/p&gt;&#xA;&lt;p&gt;The results of the collision check is binary, collision or now collision. If you get a collision, you know that in the C-Space you sampled a configuration which collides. If not, you sampled a configuration, which did not collide. Essentially, you got the evaluation of the C-Space function&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ \mathcal{c}_{X_{TCP}} = \mathcal{C}(X_{TCP})$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;As expected this way of sampling is less efficient then creating an actual C-Space function and sampling that explicit function. However, it is expected that creating the explicit function, if possible, will have a large overhead. Something in between is also possible, where the sampling can be sped up by pre-computing different elements which are often required, or caching results which are often sampled.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-10-12T09:10:12.200" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="21243" PostTypeId="2" ParentId="21237" CreationDate="2020-10-12T09:27:14.490" Score="0" Body="&lt;p&gt;Some &amp;quot;robots&amp;quot; can be implemented without any micro-controller at all. When I was a child, I created &amp;quot;robots&amp;quot; by just gluing empty cigarette packs together.&lt;/p&gt;&#xA;&lt;p&gt;There are other robots which are so complex, that a single micro-controller is not enough at all. So the choice depends highly on the product you want to develop.&lt;/p&gt;&#xA;&lt;p&gt;For any project, when choosing the micro-controller, at least the following have to taken into consideration:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;computational power (including number of cores);&lt;/li&gt;&#xA;&lt;li&gt;code flash memory;&lt;/li&gt;&#xA;&lt;li&gt;data flash memory;&lt;/li&gt;&#xA;&lt;li&gt;volatile / RAM memory;&lt;/li&gt;&#xA;&lt;li&gt;communication lines (RS232, SPI, CAN, LIN, ...);&lt;/li&gt;&#xA;&lt;li&gt;other peripherals (ADC, DAC, PWM, timers / counters ...);&lt;/li&gt;&#xA;&lt;li&gt;price;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;while keeping in mind:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the specifics of the project / product;&lt;/li&gt;&#xA;&lt;li&gt;the price of implementing the same features with external components (price of component + cost of implementation);&lt;/li&gt;&#xA;&lt;li&gt;others.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So what is the best? The best price, the best computing speed, the easiest development...&lt;/p&gt;&#xA;" OwnerUserId="22248" LastActivityDate="2020-10-12T09:27:14.490" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21245" PostTypeId="1" CreationDate="2020-10-12T18:58:19.510" Score="1" ViewCount="32" Body="&lt;p&gt;I'm looking to learn more about this sim-to-real gap. I'm new to the concept and am trying to understand what to look for. Most notably i'm curious about how well an object detection algorithm trained based on simulation data would transfer over to reality and vice versa. Should I mix the training and test datasets with both sim and real data? How much does the performance differ? Will I be crippling the accuracy of my real object recognition by polluting the training dataset with some simulation data? Looking for some guidance.&lt;/p&gt;&#xA;" OwnerUserId="27199" LastActivityDate="2020-10-13T17:48:26.943" Title="How well does object detection transfer from simulation to reality?" Tags="&lt;computer-vision&gt;&lt;cameras&gt;&lt;machine-learning&gt;" AnswerCount="2" CommentCount="2" ClosedDate="2020-10-14T13:32:03.510" ContentLicense="CC BY-SA 4.0" />
  <row Id="21246" PostTypeId="2" ParentId="21245" CreationDate="2020-10-13T06:47:29.743" Score="0" Body="&lt;p&gt;Even though it is very interesting, your question is quite broad. I will not cover all the details, but give you an overview.&lt;/p&gt;&#xA;&lt;p&gt;Also, there are some open questions to your question.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;What do you simulate? The entire robot? Only the AI? Only the hardware, with real AI? The target? The rest of the environment? A mix of these? Which mix?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Simulation and reality can be as related or as independent as you want. In &amp;quot;serious&amp;quot; projects, the simulation improves the &amp;quot;reality&amp;quot;, and the reality is used to improve the simulation environment. How these are done, depends on the specifics of the project and the genius-ness of the people working on it.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Will I be crippling&lt;/strong&gt; the accuracy of my real object recognition by polluting the training dataset with some simulation data?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;As I mentioned earlier, that is where the genius-ness (or strike of luck) come into play. It depends how you mix and separate the data - you might pollute and destroy, but you might also improve and &amp;quot;educate-to-maturity&amp;quot;.&lt;/p&gt;&#xA;" OwnerUserId="22248" LastActivityDate="2020-10-13T06:47:29.743" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21247" PostTypeId="1" CreationDate="2020-10-13T10:31:18.403" Score="1" ViewCount="42" Body="&lt;p&gt;There are different types of scan matching algorithms to match consecutive 2D lidar scans, see &lt;a href=&quot;https://youtu.be/nvFcN2-NqRc?t=421&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://youtu.be/nvFcN2-NqRc?t=421&lt;/a&gt; (ICP, correlative matching, RANSAC). Most of the algorithms return the estimated robot pose as a result.&#xA;From the intuition, if we can match the data points, we shall extract the points that don't match. These outliers after the scan matching can be the dynamic objects which can be filtered again.&lt;/p&gt;&#xA;&lt;p&gt;Update:&#xA;My concrete question, during a robot motion, how can I extract the unmatched measurement points from two consecutive lidar scan, after a scan-matching pre-processing? This question is of course depends on the utilized scan-matching algorithm.&lt;/p&gt;&#xA;" OwnerUserId="27151" LastEditorUserId="27151" LastEditDate="2020-10-14T10:40:29.690" LastActivityDate="2021-03-14T17:03:05.297" Title="Which scan matching algorithm can be used to extract the moving objects (in 2D lidar scanner)?" Tags="&lt;slam&gt;&lt;lidar&gt;&lt;icp&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="21248" PostTypeId="2" ParentId="21237" CreationDate="2020-10-13T13:27:25.420" Score="0" Body="&lt;p&gt;Try with the old Raspberry Pi 2, ARM A7 900MHz first. If it is too slow, then you can check ARM R or M microprocessor. If you want to deploy your Python code you need an OS for it. Using Ubuntu on ARM M will be difficult.&lt;/p&gt;&#xA;" OwnerUserId="27151" LastActivityDate="2020-10-13T13:27:25.420" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21249" PostTypeId="1" AcceptedAnswerId="21260" CreationDate="2020-10-13T13:58:49.603" Score="1" ViewCount="527" Body="&lt;p&gt;In ROS TURTLESIM, While moving the turtle in circle using the linear velocity and angular velocity , how do i track the distance so as to stop the turtle moving after one revolution ??&lt;/p&gt;&#xA;" OwnerUserId="27248" LastActivityDate="2020-10-17T15:35:17.327" Title="ROS TURTLESIM using PYTHON" Tags="&lt;ros&gt;&lt;python&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21250" PostTypeId="1" CreationDate="2020-10-13T17:25:18.690" Score="0" ViewCount="257" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/GCfzv.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/GCfzv.png&quot; alt=&quot;Kinematic model of 4 wheel mecanum drive robot&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Above is the Kinematic model of a 4 wheeled from &lt;a href=&quot;https://cdn.intechopen.com/pdfs/465/InTechOmnidirectional_mobile_robot_design_and_implementation.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://cdn.intechopen.com/pdfs/465/InTechOmnidirectional_mobile_robot_design_and_implementation.pdf&lt;/a&gt;, My question is how to use these kinematic equations while coding on a micro controller? I have an IMU and wheel encoders, how to use these sensor data and achieve odometry for the robot&lt;/p&gt;&#xA;" OwnerUserId="26283" LastEditorUserId="26283" LastEditDate="2020-10-13T18:11:16.820" LastActivityDate="2021-03-14T22:01:10.103" Title="How to implement a 4 Mecanum wheel Robot kinematic model Practically in code?" Tags="&lt;mobile-robot&gt;&lt;odometry&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21252" PostTypeId="2" ParentId="21245" CreationDate="2020-10-13T17:48:26.943" Score="0" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;i'm curious about how well an object detection algorithm trained based on simulation data would transfer over to reality and vice versa&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It depends on how accurately your simulator reflects reality on the metrics that matter.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Will I be crippling the accuracy of my real object recognition by polluting the training dataset with some simulation data?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;If your simulator doesn't generate data that accurately reflects reality.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-10-13T17:48:26.943" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21253" PostTypeId="2" ParentId="21249" CreationDate="2020-10-13T17:52:34.243" Score="0" Body="&lt;pre&gt;&lt;code&gt;$ rosmsg show turtlesim/Pose&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Get the pose. How are you wanting to know if it did a complete revolution? You could check that the path length is equal to the circumference, or that the rotation angle is back to the start angle, or the horizontal x/y position is the same as the starting position.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-10-13T17:52:34.243" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="21254" PostTypeId="2" ParentId="21250" CreationDate="2020-10-13T17:58:09.067" Score="0" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/7EDi8.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7EDi8.png&quot; alt=&quot;Update equations&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I think I figured out, please someone confirm if i'm right&lt;/p&gt;&#xA;&lt;p&gt;In the above equations, w1, w2, w3 and w4 are taken from the wheel encoders at each time step and (x,y) of the robot are updated as per the equations and using an IMU orientation of the robot is calculated and updated according to the equations at each time step.&lt;/p&gt;&#xA;" OwnerUserId="26283" LastActivityDate="2020-10-13T17:58:09.067" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="21256" PostTypeId="1" CreationDate="2020-10-13T19:49:04.987" Score="0" ViewCount="66" Body="&lt;p&gt;I have two synchronized video streams of a moving deformable object from two different cameras (same brand/model type) but two different views.&lt;/p&gt;&#xA;&lt;p&gt;How can I do the 3D reconstruction of this moving object?&lt;/p&gt;&#xA;&lt;p&gt;The 3D reconstruction needs not be real-time. I already have done the capture and need to do this as a postprocessing step.&lt;/p&gt;&#xA;&lt;p&gt;A few more details:&lt;/p&gt;&#xA;&lt;p&gt;My camera is FLIR SC8000 camera which has thermal videography. The current format of video is sfmov (SAF movie) which has 2 bytes (RGB+ count values -as for thermal aspect) and can also be converted to RGB (1 byte per pixel) too in WMV format. I am also able to convert the video stream using th ResearchIR Max+HSDR software to a series of lossless JPEG images that are called Radiometric JPEG (2 bytes per pixel).&lt;/p&gt;&#xA;" OwnerUserId="16739" LastActivityDate="2021-04-26T03:15:06.340" Title="3D reconstruction of a moving object from two camera video stream" Tags="&lt;cameras&gt;&lt;3d-reconstruction&gt;&lt;3d-model&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21257" PostTypeId="1" CreationDate="2020-10-13T19:53:35.400" Score="0" ViewCount="11" Body="&lt;p&gt;I have two FLIR SC8000 cameras and I do not know how to spatially calibrate them? I am doing stereo videography of a deformable moving object in a 1mx1m square.&lt;/p&gt;&#xA;&lt;p&gt;I also don't know what angle of these cameras as well as what camera spatial configuration would be best as for best result.&lt;/p&gt;&#xA;&lt;p&gt;Are there codes or guidelines for spatial calibration of thermal cameras?&lt;/p&gt;&#xA;" OwnerUserId="16739" LastActivityDate="2020-10-13T19:53:35.400" Title="How to spatially calibrate two FLIR thermal SC8000 cameras?" Tags="&lt;sensors&gt;&lt;cameras&gt;&lt;calibration&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21258" PostTypeId="2" ParentId="21237" CreationDate="2020-10-13T20:55:07.107" Score="0" Body="&lt;p&gt;There are quite a few ways to go, and opinions vary both by person and by application.&lt;/p&gt;&#xA;&lt;p&gt;Check out these links to see some examples of this:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/questions/2137153/does-it-matter-which-microcontroller-to-use-for-1st-time-embed-system-programmer&quot;&gt;https://stackoverflow.com/questions/2137153/does-it-matter-which-microcontroller-to-use-for-1st-time-embed-system-programmer&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://electronics.stackexchange.com/questions/1199/what-are-good-microcontrollers-available-today&quot;&gt;https://electronics.stackexchange.com/questions/1199/what-are-good-microcontrollers-available-today&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;What type of application is your robot release?  Industrial? Educational? Smaller home-based? Large non-backdrivable? Developer friendly? Stationary or mobile?&lt;/p&gt;&#xA;&lt;p&gt;Most large scale, non-backdriveable industrial robots that are mobile use more PCLs and other large Motion Driver power supplies so they aren't always packaged nicely for mobility.&lt;/p&gt;&#xA;&lt;p&gt;If you're going for a developer friendly robot for your consumer, then a package that uses a raspberry pi or Arduino would be ideal.&lt;/p&gt;&#xA;&lt;p&gt;C seems to be the go to if you're going for microcontroller programming for embedded systems, so Python and Javascript applications are not very common.  If you decide on a microcontroller, learning C will be the best.&lt;/p&gt;&#xA;&lt;p&gt;Any choice you pick will also depend on how many input/output pins you might need, power supply choices, and speed/memory etc. virolino mentioned some of these above.&lt;/p&gt;&#xA;&lt;p&gt;In the end familiarizing yourself well with the documentation manual/data sheet associated for your embedded microcontroller of choice, is always an absolute must.&lt;/p&gt;&#xA;" OwnerUserId="23162" LastActivityDate="2020-10-13T20:55:07.107" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21259" PostTypeId="2" ParentId="21238" CreationDate="2020-10-14T00:57:24.660" Score="1" Body="&lt;p&gt;In general, you want to build a 3D map of the environment, or more likely an approximation of a 3D map. Typically such maps are grid-based across the horizontal plane, and each cell contains some additional information like height (see '2D occupancy maps', 'digital elevation models' and '2.5D grid maps' for more information). They often focus on geometric attributes of the environment, but may also include things like appearance (from which you may be able to infer other properties). These types of maps can be created from stereo camera data.&lt;/p&gt;&#xA;&lt;p&gt;Then in order to be able to path plan you need some way of quantifying how good/bad a given path is. I suggest you look for research around 'traversibility' for various methods of evaluating this for some given terrain but as a basic idea, the 'cost' of traversing (or moving into) some area may be calculated based on its height, gradient, roughness, surface material, difference vs neighbouring areas, some properties in relation to specific vehicle attributes etc.&#xA;Once you have a map containing this information, you can apply common path planning techniques e.g. A* on a grid based map.&#xA;In rougher or more unstructured environments, there may be more unknown information e.g. the vehicle can't see over a ridge, or behind an obstacle, or its field of view might not include ground that contains holes ('negative obstacle'), so vehicle movement will need to take these into account - both in terms of being able to create a useful and accurate map by observing enough of the environment, and also by avoiding potentially dangerous areas.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for example, how does one generate ground planes when the environment is extremely rough and the robot is sitting at an angle?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;To address this specifically, you don't. You can instead use a different approach like the one described above which does not involve ground planes. Though in my (perhaps limited) experience, a lot of rough and unstructured environments featured in robotics research usually aren't really that rough, and often still have significant and relatively flat (compared to the scale of the vehicle) ground planes.&lt;/p&gt;&#xA;" OwnerUserId="15397" LastActivityDate="2020-10-14T00:57:24.660" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21260" PostTypeId="2" ParentId="21249" CreationDate="2020-10-14T10:20:32.320" Score="1" Body="&lt;p&gt;write a distance function with the maximum value being the circumference, use rospy's Time function to update distance and whenever the current_distance exceeds the circumference, publish a zero velocity msg to stop the turtle.&lt;/p&gt;&#xA;" OwnerUserId="27234" LastEditorUserId="27234" LastEditDate="2020-10-14T10:25:36.303" LastActivityDate="2020-10-14T10:25:36.303" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="21261" PostTypeId="1" CreationDate="2020-10-14T20:33:39.480" Score="1" ViewCount="12" Body="&lt;p&gt;Lets say I have 2d poses as such (angles in degrees):&lt;/p&gt;&#xA;&lt;p&gt;world_to_robot = {0, 4, 45} robot_to_object = {4, -4, -45}&lt;/p&gt;&#xA;&lt;p&gt;From a graph it would be easy to see that:&lt;/p&gt;&#xA;&lt;p&gt;world_to_object = {4, 8, theta}, what goes in for theta? atan2(8, 4)? What if the object has a world heading?&lt;/p&gt;&#xA;&lt;p&gt;Ultimately this will need done in a format that is implemented in code and usable with any list of poses. So I would have as such for a c++ implementation,&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Eigen::Matrix&amp;lt;float, 3, 1&amp;gt; world_to_robot;&#xA;Eigen::Matrix&amp;lt;float, 3, 1&amp;gt; world_to_object;&#xA;Eigen::Matrix&amp;lt;float, 3, 1&amp;gt; robot_to_object;&#xA;&#xA;// My omniscient poses below from my fake scenario&#xA;world_to_robot &amp;lt;&amp;lt; 0, 4, M_PI/2;&#xA;robot_to_object &amp;lt;&amp;lt; 4, -4, -M_PI/4;&#xA;wold_to_object &amp;lt;&amp;lt; 4, 8, some_theta_rad;   // place holder for whatever this ends up being&#xA;&#xA;Eigen::Matrix&amp;lt;float, 3, 3&amp;gt; rotationM;&#xA;rotationM &amp;lt;&amp;lt; cos(M_PI/2), -sin(M_PI/2), 0,&#xA;             sin(M_PI/2,   cos(M_PI/2), 4,&#xA;                  0,             0,     1;&#xA;&#xA;Eigen::Matrix&amp;lt;float, 3, 1&amp;gt; robot_to_objectM;&#xA;robot_to_objectM &amp;lt;&amp;lt; 4, -4, 1;&#xA;&#xA;Eigen::Matrix&amp;lt;float, 3, 1&amp;gt; calculated_world_to_object = rotationM*robot_to_objectM;&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This will give me my expected world_to_object x and y pose for object wrt the global frame, but what would some_theta_rad be?&lt;/p&gt;&#xA;&lt;p&gt;Then lets say I have the scenario where I have world_to_object and robot_to_object. Also assume I know theta for world_to_object because we identified the object based on a signature and there is an absolute pose. I want to calculate world_to_robot. Let's use the same poses as above.&lt;/p&gt;&#xA;&lt;p&gt;I know that to get world_to_robot, I need to do a transform consisting of world_to_object * object_to_robot. I do not have object_to_robot. I need the inverse of the robot_to_object, which is not square. Here is what I have done in this scenario:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Eigen::Matrix&amp;lt;float, 3, 3&amp;gt; rotationM;&#xA;rotationM &amp;lt;&amp;lt; cos(theta_rad), -sin(theta_rad), 4,&#xA;             sin(M_PI/2,     cos(theta_rad),  8,&#xA;                  0,           0,             1;    // What is theta_rad? Just the world_to_object theta?&#xA;&#xA;Eigen::Matrix&amp;lt;float, 3, 1&amp;gt; robot_to_objectM;&#xA;robot_to_objectM &amp;lt;&amp;lt; -4, 4, 1;               // Note: I inverted the signs for the translation&#xA;&#xA;Eigen::Matrix&amp;lt;float, 3, 1&amp;gt; calculated_world_to_robot = rotationM*robot_to_objectM;&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This seems to give the correct new x and y pose if I use world_to_robot heading for theta. However there could be a scenario where this is not known ahead of time. So how would I correctly get my theta value? Also, I know the new robot pose needs to be M_PI/2, but how do I get this from my last piece of code segment. Typically I would start doing a bunch of &amp;quot;atan2(y,x)&amp;quot;, but am missing the key &amp;quot;theta's&amp;quot; in the code implementations above.&lt;/p&gt;&#xA;" OwnerUserId="27216" LastActivityDate="2020-10-14T20:33:39.480" Title="Getting the new heading after a Transformation" Tags="&lt;localization&gt;&lt;c++&gt;&lt;pose&gt;&lt;transforms&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21262" PostTypeId="1" AcceptedAnswerId="21264" CreationDate="2020-10-14T22:14:13.953" Score="0" ViewCount="12" Body="&lt;p&gt;Hello there, hope you are doing great.&lt;/p&gt;&#xA;&lt;p&gt;Right now I am trying to control youbot to pick and cube and place it to a certain position, on simulation. However, I believe that the reference trajectory is very prone to singularities. Because of that, I am trying to create a reference trajectory that does not contain singularity possibilities.&lt;/p&gt;&#xA;&lt;p&gt;I am trying on new initial end-effector configurations for the youbot. However I need to extract Tsb matrix (base frame relative to space frame) from the Tse (end-effector frame, relative to space frame) matrix. Because, in order to tune my PI gains, I need to start the robot with 0 error. How can I manage to do that? For example to get Tse from Tsb I do this:&lt;/p&gt;&#xA;&lt;p&gt;Tse = Tsb * Tb0 (which has a fixed value) * T0e (comes from Forward Kinematics)&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/miWMk.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/miWMk.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="26789" LastActivityDate="2020-10-15T08:10:31.360" Title="Determining Base Configuration Tsb from End-Effector Configuration Tse for youbot" Tags="&lt;mobile-robot&gt;&lt;robotic-arm&gt;&lt;forward-kinematics&gt;&lt;transforms&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21264" PostTypeId="2" ParentId="21262" CreationDate="2020-10-15T08:10:31.360" Score="1" Body="&lt;p&gt;Do I understand correctly, that the problem is with the matrix equation you have posted and how to calculate &lt;span class=&quot;math-container&quot;&gt;$T_{sb}$&lt;/span&gt; from that equation?&#xA;You can solve the matrix equation by multiplying from the right with the inverse of the last matrix on the rhs, step by step.&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$\require{cancel} $$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$T_{se} = T_{sb} \times T_{b0} \times T_{0e}$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$T_{se} \times T_{0e}^{-1}= T_{sb} \times T_{b0} \times T_{0e} \times T_{0e}^{-1}$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$T_{se} \times T_{0e}^{-1}= T_{sb} \times T_{b0} \times \cancel{ T_{0e} \times T_{0e}^{-1}}$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$T_{se} \times T_{0e}^{-1}= T_{sb} \times T_{b0}$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$T_{se} \times T_{0e}^{-1} \times T_{b0}^{-1}= T_{sb} \times T_{b0} \times T_{b0}^{-1}$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$T_{se} \times T_{0e}^{-1} \times T_{b0}^{-1}= T_{sb} \times \cancel{T_{b0} \times T_{b0}^{-1}}$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$T_{se} \times T_{0e}^{-1} \times T_{b0}^{-1}= T_{sb}$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$T_{sb} = T_{se} \times T_{0e}^{-1} \times T_{b0}^{-1}$$&lt;/span&gt;&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-10-15T08:10:31.360" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21265" PostTypeId="2" ParentId="7387" CreationDate="2020-10-15T14:29:31.030" Score="1" Body="&lt;p&gt;The core part of the HectorSLAM is in the file &lt;code&gt;hector_slam/hector_mapping/include/hector_slam_lib/matcher/ScanMatcher.h&lt;/code&gt; and &lt;code&gt;hector_slam/hector_mapping/include/hector_slam_lib/map/OccGridMapUtil.h&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The implementation of the scan matching in HectorSLAM uses the maximum likelihood estimator (MLE), which is implemented in the function &lt;code&gt;estimateTransformationLogLh&lt;/code&gt;. &lt;code&gt;LogLh&lt;/code&gt; stands for &lt;a href=&quot;https://en.wikipedia.org/wiki/Likelihood_function#Log-likelihood&quot; rel=&quot;nofollow noreferrer&quot;&gt;log likelihood function&lt;/a&gt;. This video explains the MLE very good: &lt;a href=&quot;https://www.youtube.com/watch?v=XepXtl9YKwc&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=XepXtl9YKwc&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The Hessian derivative matrix is calculated in the function &lt;code&gt;getCompleteHessianDerivs&lt;/code&gt; which represents the formula (13) in the paper.&lt;/p&gt;&#xA;" OwnerUserId="27151" LastActivityDate="2020-10-15T14:29:31.030" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21266" PostTypeId="1" CreationDate="2020-10-15T14:51:09.130" Score="0" ViewCount="13" Body="&lt;p&gt;I'm new to robotics and I'm using ros noetic with the package rp_lidar. I want to use the data collected from my a1m8 slamteck lidar and generate a 2d map for my rover to navigate and avoid collision. I added gmap slam package but I don't know how to set it up&lt;/p&gt;&#xA;" OwnerUserId="27262" LastActivityDate="2020-10-15T14:51:09.130" Title="How to use data collect from lidar to generate a 2d map with" Tags="&lt;ros&gt;&lt;navigation&gt;&lt;lidar&gt;&lt;mapping&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21267" PostTypeId="1" AcceptedAnswerId="21269" CreationDate="2020-10-15T16:08:23.943" Score="2" ViewCount="891" Body="&lt;p&gt;I wonder that horns for servos are marked in some &lt;code&gt;T&lt;/code&gt; units. Example: &lt;a href=&quot;https://www.servocity.com/servo-horns/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;25T&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Please help me getting out, what does it mean.&lt;/p&gt;&#xA;" OwnerUserId="27264" LastActivityDate="2020-10-15T19:22:57.970" Title="Servo horn dimensions - What is 25T?" Tags="&lt;servomotor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21268" PostTypeId="2" ParentId="21247" CreationDate="2020-10-15T16:08:58.740" Score="0" Body="&lt;p&gt;I think I understand the problem more now, after your comment about ICP.&lt;/p&gt;&#xA;&lt;p&gt;Iterative Closest Point (ICP) doesn't exactly match a point or some subset of points, or even features. ICP finds the pose that minimizes the total error.&lt;/p&gt;&#xA;&lt;p&gt;What you would need to do is to define some threshold where you would consider points to be matched or unmatched. Then, you have a scan1, a scan2, and your scan matching algorithm returns a pose that minimizes error.&lt;/p&gt;&#xA;&lt;p&gt;Apply your pose to scan 2, such that your scan1 and scan2 sets are &amp;quot;aligned,&amp;quot; then run a nearest-neighbor search between the scan sets. Neighbor distances falling below the threshold are &amp;quot;matched,&amp;quot; so you remove those, and what's left is then the data you're looking for.&lt;/p&gt;&#xA;&lt;p&gt;I think this question is a bit more on-topic now because it seems to get at the heart of what ICP is doing, which again is to minimize RMS error across the entire dataset.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-10-15T16:08:58.740" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21269" PostTypeId="2" ParentId="21267" CreationDate="2020-10-15T16:10:46.890" Score="3" Body="&lt;p&gt;The &lt;code&gt;T&lt;/code&gt; indicates the number of teeth or ridges in the servo spline. You need to match the servo spline to any device splines or they won't mate.&lt;/p&gt;&#xA;&lt;p&gt;:EDIT: Because it's a good link, and because I hate it when links to resources &lt;a href=&quot;https://en.wikipedia.org/wiki/Link_rot&quot; rel=&quot;nofollow noreferrer&quot;&gt;rot&lt;/a&gt;, I figured I'd duplicate the information here from the excellent &lt;a href=&quot;https://www.servocity.com/glossary/#servo-splines&quot; rel=&quot;nofollow noreferrer&quot;&gt;Servo City&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Servo Splines&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Servos have an output shaft that typically uses a splined profile in order to transfer the torque from the output shaft into the servo attachment that is fastened to it.  This splined profile is typically classified by the number of teeth, however, there is potential for two very different servo splines to have the same tooth count as it doesn't capture the spline diameter or tooth profile.  For example, A15T and D15T both have 15 teeth, however the D15T is a much larger spline size than the A15T.  The graphics below are loose representations of the common spline sizes that are found on hobby servos.  If you have a servo that we do not offer on the site, you can check to see if your servo has a spline that matches any of the below spline profiles by counting the teeth and measuring the distance across the spline.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/1VUBF.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1VUBF.png&quot; alt=&quot;Several &quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2020-10-15T19:22:57.970" LastActivityDate="2020-10-15T19:22:57.970" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="21270" PostTypeId="2" ParentId="21237" CreationDate="2020-10-16T00:06:49.507" Score="0" Body="&lt;p&gt;In recommend, some version of a raspberry pi. It is based on a Linux interface, and this allows you to program in any language you please&lt;/p&gt;&#xA;" OwnerUserId="26710" LastActivityDate="2020-10-16T00:06:49.507" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21271" PostTypeId="1" CreationDate="2020-10-16T09:15:45.853" Score="0" ViewCount="38" Body="&lt;p&gt;I am a doing my FYP in drone swarm anti collision algorithm.&lt;/p&gt;&#xA;&lt;p&gt;The project aims to develop an algorithm to fly a minimum of 3 drones and here are the requirements:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;1-the drones can identify the position of the other swarm members and keep a distance (anti collision) between them and the adjacent drone.&lt;/li&gt;&#xA;&lt;li&gt;The drones are to fly in different orientations like a horizontal formation or a vertical one.&lt;/li&gt;&#xA;&lt;li&gt;The drones are to fly together as a swarm and either maintain the flight formation during the flight&#xA;or reposition after reaching destination.&lt;/li&gt;&#xA;&lt;li&gt;The swarm is to adjust the distance between its members autonomously as in (every drone calculates&#xA;the distance to its neighboring drone and plan its action position itself accordingly based on a&#xA;preprogrammed distance&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;I just started and my first step is to find a method for each drone to calculate the distance between it and the next drone.&#xA;I have been doing research and I found out that (Ad-hoc networking) gives the ability to calculate the distance between two nodes using the strength of the Wi-Fi signal. However, I could not find a proper research paper to identify how to use that system in a drone swarm and how to obtain the data to be used in the calculations.&lt;/p&gt;&#xA;&lt;p&gt;so my question is: Is using ad-hoc network the way to go in this project or is there a better method?&#xA;and in addition, how to actually implement it n a drone swarm, i.e. what type of sensors to use?&lt;/p&gt;&#xA;&lt;p&gt;To emphasize it more, what is the best reasonable method for a drone swarm to have the ability to locate its members and measure/keep a distance between its members?&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Additional information about my project:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The project aims to implement the algorithm in a real 3 drone swarm system. However, due to budget issues the project might end up being only a simulation.&lt;/li&gt;&#xA;&lt;li&gt;There are a lot of missing variables in the information I provided , such as: how to control each swarm (each drone individually or leader/follower method), what type of drone/controller/autopilot to use, and other things I can't think of yet. However, my concern at the moment is to identify the method for the swarm to keep a certain distance between them thus having some sort of method to locate each drone in position and distance from the adjacent drone.&lt;/li&gt;&#xA;&lt;li&gt;I will have more follow up questions as I proceed in the project&lt;/li&gt;&#xA;&lt;li&gt;I am doing Final year Mechatronics Engineering&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="27272" LastActivityDate="2021-03-15T14:03:20.383" Title="Communication method between drone swarm members" Tags="&lt;uav&gt;&lt;communication&gt;&lt;drone&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21272" PostTypeId="1" CreationDate="2020-10-16T10:07:47.243" Score="0" ViewCount="24" Body="&lt;p&gt;I have imported my Solidwork Robotic arm into Simmechanics successfully, now I want to calculate  torque required for each joints at different conditions, I cant find the Torque, I have tried Total Torque and constraints Torque both  in revolute Joint blocks but Torque values are not correct and not changing when I change position in radians from constant block, what I am doing wrong here&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/KaJiu.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KaJiu.png&quot; alt=&quot;Robotarm&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/y9n6G.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/y9n6G.png&quot; alt=&quot;RobotarmTorque&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="27171" LastActivityDate="2020-10-16T10:07:47.243" Title="How I Calculate the correct Joint Torques of Robotic arm in Simmechanics?" Tags="&lt;robotic-arm&gt;&lt;matlab&gt;&lt;simulation&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21273" PostTypeId="2" ParentId="21271" CreationDate="2020-10-16T12:58:23.010" Score="0" Body="&lt;p&gt;It is widely known that in many (most) living societies (human, animal, marine...), individuals prefer to be parts of teams, which inherently have leaders.&lt;/p&gt;&#xA;&lt;p&gt;In the case of your project, the situation is similar. The leader dictates most of the (flight and mission) parameters for the swarm. The followers:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;make sure to stay within a certain range from the leader;&lt;/li&gt;&#xA;&lt;li&gt;will make sure to not collide with other team members, or with the environment.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;With a minimal effort, you can build redundancy within the swarm, so in case a drone fails to be a leader, another drone will automatically take leadership.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;About the technical way to measure the relative positions, I cannot really help right now.&lt;/p&gt;&#xA;&lt;p&gt;Comment: maybe the easiest would be to have GPS sensors on the drones - the kind of sensors that are synchronized AND of high precision. Unfortunately, they would be expensive beyond any reasonable budget.&lt;/p&gt;&#xA;" OwnerUserId="22248" LastEditorUserId="22248" LastEditDate="2020-10-16T13:04:22.730" LastActivityDate="2020-10-16T13:04:22.730" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="21274" PostTypeId="2" ParentId="21238" CreationDate="2020-10-16T20:44:36.463" Score="1" Body="&lt;p&gt;Short answer: At first, a motion capture recording of the robot is created. Secondly, the recording is converted into a task model.&lt;/p&gt;&#xA;&lt;p&gt;Long answer: A human operator is the natural source for providing high quality control signals. A well trained operator is able to let the robot solve difficult situations. The only problem is, that the actions of a human operator are not formalized in software code, so that a planner can't use the existing heuristics. To solve the issue, a motion capture device is used which records a set of features including the actions of the human operator. This recording is converted into a prediction model which can be used by a motion solver autonomously.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2020-10-16T20:44:36.463" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21275" PostTypeId="1" CreationDate="2020-10-17T01:02:00.907" Score="1" ViewCount="131" Body="&lt;p&gt;I am trying to use a PID controller to stop a quadcopter at a specific location while travelling horizontally, however currently it overshoots/undershoots depending on the max velocity. I have tried manually tuning the P,I and D gains with limited success. Essentially the velocity needs to go from maxSpeed to 0 at the very end of the flight path.&lt;/p&gt;&#xA;&lt;p&gt;It uses the DJI SDK so the inputs to the quadcopter are very simplistic, the pitch input to the quadcopter is in m/s and I recalculate the distance(m) to the target on each iteration.&lt;/p&gt;&#xA;&lt;p&gt;I run a loop that executes every 0.1 of a second. Some pseudo code:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;kP = 0.25&#xA;kI = 0.50&#xA;kD = 90&#xA;timeStep = 0.1&#xA;maxSpeed = 10&#xA;&#xA;currentError = initialDistanceToLocation - currentDistanceToLocation&#xA;derivativeError = (currentError - previousError) / timeStep&#xA;previousError = currentError&#xA;output = kP * currentError + kI * integralError + kD * derivativeError&#xA;integralError = integralError + currentError * timeStep&#xA;&#xA;if &amp;gt;= maxSpeed {&#xA;    output = maxSpeed&#xA;} else if output &amp;lt;= 0 {&#xA;    output = 0&#xA;}&#xA;return output&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Is there a way to reliably tune this PID controller to this system that will work for different max velocities, or is it too simplistic and there are other factors I need to consider?&lt;/p&gt;&#xA;" OwnerUserId="27277" LastEditorUserId="10748" LastEditDate="2020-10-20T09:08:25.387" LastActivityDate="2020-12-27T22:00:05.313" Title="Quadcopter PID Controller for distance" Tags="&lt;control&gt;&lt;quadcopter&gt;&lt;pid&gt;" AnswerCount="3" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21276" PostTypeId="2" ParentId="21275" CreationDate="2020-10-17T10:05:46.157" Score="1" Body="&lt;p&gt;If you want to work with higher velocities, you need to look into velocity controller as well. You can also try incorporating velocity control into your control system. It enables smooth stopping to point which can alleviate your problem. But a generic PID controller with just position control should not overshoot too much if tuned correctly and the maximum velocities aren't too high.&lt;/p&gt;&#xA;" OwnerUserId="18787" LastActivityDate="2020-10-17T10:05:46.157" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21279" PostTypeId="1" CreationDate="2020-10-18T04:58:49.357" Score="0" ViewCount="47" Body="&lt;p&gt;IMU are often used in theoretical models involving SLAM.&lt;/p&gt;&#xA;&lt;p&gt;I'm a bit confused on their practical value since error accumulation is so bad that after a couple seconds you need to completely ignore it.&lt;/p&gt;&#xA;&lt;p&gt;What is the reason to use and IMU and when should they be used?&lt;/p&gt;&#xA;&lt;p&gt;More generally, how do you handle the horrible accumulation of error making the item essentially useless for localization?&lt;/p&gt;&#xA;" OwnerUserId="21514" LastActivityDate="2020-10-18T06:35:29.867" Title="Do IMU have value in SLAM?" Tags="&lt;slam&gt;&lt;imu&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21280" PostTypeId="2" ParentId="21279" CreationDate="2020-10-18T06:35:29.867" Score="2" Body="&lt;p&gt;IMU's are extremely useful in SLAM.&lt;/p&gt;&#xA;&lt;p&gt;Here is just a basic list of some of the benefits/uses.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Provides an initial guess on pose for optimization methods.&lt;/li&gt;&#xA;&lt;li&gt;Helps filter out outliers for computer vision feature matching.&lt;/li&gt;&#xA;&lt;li&gt;Provides scale in monocular slam.&lt;/li&gt;&#xA;&lt;li&gt;Provides global pitch and roll estimates.&lt;/li&gt;&#xA;&lt;li&gt;Works much better for Kalman filters prediction then a basic velocity model.&lt;/li&gt;&#xA;&lt;li&gt;Only sensor that can reliably work everywhere.(Cameras need lighting, GPS needs a connection, LIDAR problems with reflections and rain)&lt;/li&gt;&#xA;&lt;li&gt;An easy source of angular velocity which is useful for getting rid of motion blur in cameras and LIDAR.&lt;/li&gt;&#xA;&lt;li&gt;Scenario identification: In car odometry it can help detect when the wheels are slipping.&lt;/li&gt;&#xA;&lt;li&gt;And more that I can't think of the moment.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;When should they be used?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Always. You should never have a sensing platform/robot without an IMU.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;More generally, how do you handle the horrible accumulation of error&#xA;making the item essentially useless for localization?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;You always have to pair it with a sensor that is more accurate in the long term. LIDAR,GPS, Cameras, are all viable options. The IMU is there to estimate the pose in the short time between these other measurements.&lt;/p&gt;&#xA;&lt;p&gt;Also if your motion model is good for something like a car then you can also get some really good estimates. Take a look at &lt;a href=&quot;https://github.com/mbrossar/ai-imu-dr&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/mbrossar/ai-imu-dr&lt;/a&gt;. The results with purely an IMU is on par with several state of the art SLAM methods.&lt;/p&gt;&#xA;" OwnerUserId="15265" LastActivityDate="2020-10-18T06:35:29.867" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="21281" PostTypeId="1" CreationDate="2020-10-18T07:02:13.747" Score="1" ViewCount="38" Body="&lt;p&gt;I have a 24v DC motor with a planetary gear box, Hbridge, and encoder feedback that drives an arduino robot similar to a winch that moves a weight by spooling a strap up and down.  The problem I am having is that the speed is to high in freefall.  I thought I could just apply PWM to the motor in the opposite direction to slow it down, but flipping in1 and in2 on the hbridge causes the motor to stop abruptly as opposed to slowing down to the desired speed.&lt;/p&gt;&#xA;&lt;p&gt;I think a worm gear would prevent this, but I do not think it is a viable solution due to space/geometric constraints.  I am considering attempting to PWM in1 and in2 in hopes this will have a soft breaking effect, but before I go through all the trouble I was wondering if there is a more traditional solution that I am not aware of.&lt;/p&gt;&#xA;" OwnerUserId="27285" LastActivityDate="2020-11-18T14:00:35.050" Title="How to compensate for back drive caused by gravity" Tags="&lt;arduino&gt;&lt;motor&gt;&lt;pid&gt;&lt;h-bridge&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21282" PostTypeId="1" CreationDate="2020-10-19T01:47:00.387" Score="0" ViewCount="95" Body="&lt;p&gt;Here is the program I have written. The function is to make the turtlesim complete one revolution, with a fixed angular velocity and speed.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;#!/usr/bin/env python&#xA;&#xA;import rospy&#xA;from geometry_msgs.msg import Twist&#xA;from turtlesim.msg import Pose&#xA;from math import *&#xA;&#xA;&#xA;def pose_callback(msg):&#xA;    print(msg.x,msg.y,msg.theta)&#xA;    return &#xA;&#xA;&#xA;def main():&#xA;&#xA;    speed = 10&#xA;    angular_vel= 5&#xA;&#xA;    rospy.init_node('turtle_revolve', anonymous=True)&#xA;    rate= rospy.Rate(10)&#xA;    velocity_publisher = rospy.Publisher('/turtle1/cmd_vel', Twist, queue_size=10)&#xA;    vel_msg = Twist()&#xA;&#xA;    rospy.Subscriber(&amp;quot;/turtle1/pose&amp;quot;, Pose, pose_callback)&#xA;    posi = Pose()&#xA;    &#xA;#Setting the time of the start of the node to be t1&#xA;    t1= rospy.Time.now().to_sec()&#xA;#Initial positions x and y    &#xA;    x = posi.x&#xA;    y=  posi.y&#xA;    vel_msg.linear.x = speed&#xA;    vel_msg.angular.z = angular_vel&#xA;    rospy.logwarn(posi.x)&#xA;    rospy.logwarn(posi.y)&#xA;&#xA;    while not rospy.is_shutdown():&#xA;           &#xA;        velocity_publisher.publish(vel_msg)&#xA;&#xA;#Another time measurement t2 is taken for every iteration&#xA;    &#xA;    t2 = rospy.Time.now().to_sec()&#xA;&#xA;# difference in time measurements t1 and t2 &#xA; &#xA;    t_diff = t2 - t1&#xA;&#xA;#If the time delay between measurements is greater than 0.5 secs and theta has reached 0 ,&#xA;#it means that the circle has been completed &#xA;    &#xA;    if (t_diff &amp;gt;0.5  and posi.theta == 0.0 ): &#xA;        &#xA;        &#xA;        break&#xA;        &#xA;    rospy.logwarn(&amp;quot;Completing circle&amp;quot;)&#xA;    &#xA;    &#xA;&#xA;if __name__ == '__main__':&#xA;    try:&#xA;        main()&#xA;    except rospy.ROSInterruptException:&#xA;        pass&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Now my reasoning here is that theta will become  zero again when it reaches the initial position and x, y should be equal  to the initial values.&#xA;I tried to find out x, y with posi = Pose () , after subscribing to turtle1/Pose . However all  values in posi, i.e x,y, theta etc are  zero. Ive confirmed this with multiple print/logwarn statements that i removed. It seems posi is returning zero values continuosly.&lt;/p&gt;&#xA;&lt;p&gt;However I have confirmed using rostopic in the terminal that the Pose topic is printing values. Furthermore the pose values are correctly being displayed by the pose_callback function. So the zero values are only in the main function.&#xA;Could anyone point out anything wrong in the code ? Why does posi have all values zero all the time ?&lt;/p&gt;&#xA;&lt;p&gt;Here is the output showing zero in logwarn and proper values for the pose_callback function :&#xA;&lt;a href=&quot;https://i.stack.imgur.com/ulKYT.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ulKYT.png&quot; alt=&quot;Terminal output&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="27290" LastEditorUserId="27290" LastEditDate="2020-10-19T01:53:28.707" LastActivityDate="2021-03-18T17:06:50.637" Title="Error in Pose(): All values are zero for turtlesim/Pose" Tags="&lt;control&gt;&lt;ros&gt;&lt;pose&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21283" PostTypeId="1" CreationDate="2020-10-19T05:26:10.877" Score="2" ViewCount="57" Body="&lt;p&gt;&lt;em&gt;(this is a cross post from &lt;a href=&quot;https://stackoverflow.com/q/64393373/2682209&quot;&gt;https://stackoverflow.com/q/64393373/2682209&lt;/a&gt; as I didn't know the robotics community before.)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;I'm trying to use some inverse kinematics algorithm to perform a path planning task. I take my path as a kinematic chain with joined segments and define the start and target. As the curvature of the path shall be restricted, the maximum bending angles at each joint must be limited.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Additionally, the orientation of the start segment as well as the orientation of the final segment shall be well defined within some tolerance margins.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I started out to implement the quite simple FABRIK algorithm (&lt;a href=&quot;https://www.youtube.com/watch?v=UNoX65PRehA&quot; rel=&quot;nofollow noreferrer&quot;&gt;youtube&lt;/a&gt; resp. &lt;a href=&quot;http://www.andreasaristidou.com/publications/papers/FABRIK.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;paper&lt;/a&gt;). I think, I also added the angular constraints respecting the inner joint angles correctly, but I fail in getting the fixed angles of the start- and the end-segment correct.&lt;/p&gt;&#xA;&lt;p&gt;I started out with the kinematic chain unfolded in a curve like fashion, bridging the angular difference form start angle to target angle. From there on, I use the FABRIK algorithm and restrict it's joint bending to maintain the given limitations.&lt;br /&gt;&#xA;This way, the angular constraints are an invariant of the algorithm and are never violated during the run. In quite some settings, this works out OK.&lt;/p&gt;&#xA;&lt;p&gt;Unfortunately however, this algorithm keeps running in deadlock situations it can't escape from like shown in this picture:&lt;br /&gt;&#xA;The upper panels shows the start configuration, the lower panel the situation after 18 iterations in a deadlock situation with no more progress.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/J2rSC.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/J2rSC.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&#xA;The purple path should take a turn from the left bubble to the right bubble entering the right bubble from the left to the right (like sketched in red).&lt;/p&gt;&#xA;&lt;p&gt;This behavior must be due to the fact, that the head-segment (the last before the target) must not turn round, as it must maintain the target angular constraint invariant all the time.&lt;/p&gt;&#xA;&lt;p&gt;any idea, how to overcome this issue and how to do inverse kinematics with no only postional, but also orientational target values.&lt;/p&gt;&#xA;&lt;p&gt;Cheers,&lt;/p&gt;&#xA;&lt;p&gt;Felix&lt;/p&gt;&#xA;" OwnerUserId="27291" LastActivityDate="2020-10-19T05:26:10.877" Title="2D inverse kinematics with orientation constraints (especially at start and target) for path planning" Tags="&lt;inverse-kinematics&gt;&lt;path-planning&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21284" PostTypeId="1" AcceptedAnswerId="21285" CreationDate="2020-10-19T11:07:43.347" Score="2" ViewCount="45" Body="&lt;p&gt;Assume we have a 6DOF manipulator, take &lt;a href=&quot;https://www.universal-robots.com/media/50588/ur5_en.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;UR5&lt;/a&gt; as an example. Does adding a &lt;a href=&quot;https://www.kuka.com/en-us/products/robotics-systems/robot-periphery/linear-units&quot; rel=&quot;nofollow noreferrer&quot;&gt;linear rail&lt;/a&gt;, on which the robot sits, add a 7th DOF to the system, making it equivalent to a 7DOF manipulator? Any caveats?&lt;/p&gt;&#xA;" OwnerUserId="19260" LastActivityDate="2020-10-19T11:57:56.423" Title="Does 6DOF robot arm + linear rail = 7DOF arm?" Tags="&lt;robotic-arm&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21285" PostTypeId="2" ParentId="21284" CreationDate="2020-10-19T11:23:28.837" Score="4" Body="&lt;p&gt;You are correct.&#xA;Adding an external axis results in 6+1=7 DOF.&lt;/p&gt;&#xA;&lt;p&gt;Caveats...the same as for any redundant system&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;solving IK requires a more complex approach (and then path/trajectory planning also)&lt;/li&gt;&#xA;&lt;li&gt;precision/repeatability/accuracy can be affected if the external axis has a worse precision/repeatability//accuracy&lt;/li&gt;&#xA;&lt;li&gt;same goes for dynamic performance&lt;/li&gt;&#xA;&lt;li&gt;technical compatibility issues might arise (depending on how the external axis is controlled and what communication protocols are available at the robot controller)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2020-10-19T11:57:56.423" LastActivityDate="2020-10-19T11:57:56.423" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21286" PostTypeId="2" ParentId="21281" CreationDate="2020-10-19T13:51:19.300" Score="2" Body="&lt;p&gt;Yeah, just like you'd PWM to have some kind of variable drive torque between zero and the torque provided by maximum current, you'll PWM to have some kind of variable brake torque between free-wheeling and maximum electric braking.&lt;/p&gt;&#xA;&lt;p&gt;The only thing to be careful of is that your electric braking power needs somewhere to go, and your power electronics and/or battery might not appreciate the reversed current. &lt;a href=&quot;https://robotics.stackexchange.com/q/21167/9720&quot;&gt;Here's a recent question&lt;/a&gt; about electric braking where the OP of that question needed to use a brake resistor to dump the power instead of sending it back to the battery.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-10-19T13:51:19.300" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21287" PostTypeId="2" ParentId="21282" CreationDate="2020-10-19T16:17:01.540" Score="0" Body="&lt;p&gt;The position values look like they're getting to the callback okay, but then you're not doing anything with them in the callback. I can't see where &lt;code&gt;posi.x&lt;/code&gt; or &lt;code&gt;posi.y&lt;/code&gt; are defined, but what if instead of:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;def pose_callback(msg):&#xA;    print(msg.x,msg.y,msg.theta)&#xA;    return &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;you had:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;def pose_callback(msg):&#xA;    posi.x = msg.x&#xA;    posi.y = msg.y&#xA;    print(posi.x,posi.y,msg.theta)&#xA;    return &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-10-19T16:17:01.540" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21288" PostTypeId="1" CreationDate="2020-10-19T21:29:18.073" Score="1" ViewCount="45" Body="&lt;p&gt;I am training a reinforcement learning network in simulation for a robot which at the current stage learns Euler Angles to rotate the end-effector based on the actual state. The performance is overall not that satisfying. My network architecture is rather small and contains only two hidden layers. So, I would like to know what type of rotations can best be learned by neural networks? Euler Angles, Rotation matrices or Quaternions?&lt;/p&gt;&#xA;&lt;p&gt;If someone could recommend a publication or paper for this topic, I would be very interested. Thank you for your help!&lt;/p&gt;&#xA;" OwnerUserId="27295" LastActivityDate="2020-10-20T06:36:38.830" Title="What type of rigid body rotation can best be learned by neural networks?" Tags="&lt;robotic-arm&gt;&lt;rotation&gt;&lt;orientation&gt;&lt;reinforcement-learning&gt;&lt;neural-networks&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21289" PostTypeId="1" CreationDate="2020-10-20T00:00:20.630" Score="0" ViewCount="9" Body="&lt;p&gt;I'm trying to install ROS on my VMware fusion 12, but after updating the bash file as per the installation document, I get an error when I enter roscore in the terminal. The error seems to be that my VMware cannot ping itself. It also affected me using openCv. It offers a solution which asks me to ping an IP address, however when I do this I get another error which I also included in this question. Thanks for your help!&lt;/p&gt;&#xA;&lt;p&gt;Here is the error&lt;a href=&quot;https://i.stack.imgur.com/G0B9N.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/G0B9N.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/TJ1Kg.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/TJ1Kg.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="27297" LastActivityDate="2020-10-20T00:00:20.630" Title="I get an error when I try to install ROS on VMware fusion 12 pro" Tags="&lt;ros&gt;&lt;opencv&gt;" AnswerCount="0" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21290" PostTypeId="2" ParentId="21288" CreationDate="2020-10-20T04:26:57.757" Score="1" Body="&lt;p&gt;Every three-dimensional parameterization of rotations has &lt;a href=&quot;https://epubs.siam.org/doi/pdf/10.1137/1006093?casa_token=VoOK1j7KTacAAAAA:hbJNYwrLG9gc68KnJ1sWJFRAr9QOTBvjyshM3HbdBoll1UwlJaD66Ie-rY0wqesMU_yyHzCugA&quot; rel=&quot;nofollow noreferrer&quot;&gt;singularity&lt;/a&gt;. So even if you would implement the kinematics directly you would still run into trouble for some rotations when using Euler angles (or any other three-dimensional parameterization).&lt;/p&gt;&#xA;&lt;p&gt;Quaternions, or more accurately unit quaternions, do not have such singularities. Though, do not have a unique parameterization (negating the quaternion would represent the same rotation). However, if you only consider the kinematics then unit quaternions already don't pose any issue in my opinion. So using a three by three rotation matrix would not really simplify the kinematics at the cost of higher over-parameterization. Additionally, unit quaternions are also easier than rotation matrices to &amp;quot;normalize&amp;quot;, so ensuring that a four dimensional vector represents a unit quaternion vs that a three by three matrix represents a rotation matrix.&lt;/p&gt;&#xA;" OwnerUserId="1487" LastActivityDate="2020-10-20T04:26:57.757" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21291" PostTypeId="1" CreationDate="2020-10-20T04:58:14.147" Score="2" ViewCount="116" Body="&lt;p&gt;We were using a regular POLOLU d.c motor whose stall current is 0.36A. We want to use this motor in a robotic hand where the motor will be stalled while holding the object. We are limiting the current at 0.11A because according to datasheet at this current we get the maximum efficiency. Is it safe to do this? I mean stalling it at low currents? If not what can we do to tackle this situation?&lt;/p&gt;&#xA;" OwnerUserId="27299" LastActivityDate="2020-10-20T20:15:14.220" Title="No electric motors can handle being stalled for even short periods of time, even at low power. Is this statement true in all cases?" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;motor&gt;&lt;torque&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21292" PostTypeId="2" ParentId="21288" CreationDate="2020-10-20T06:36:38.830" Score="1" Body="&lt;p&gt;The main problem is the continuity of the representation. &lt;a href=&quot;https://openaccess.thecvf.com/content_CVPR_2019/html/Zhou_On_the_Continuity_of_Rotation_Representations_in_Neural_Networks_CVPR_2019_paper.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;This paper&lt;/a&gt; explains it.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-10-20T06:36:38.830" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21293" PostTypeId="2" ParentId="21291" CreationDate="2020-10-20T06:48:48.870" Score="4" Body="&lt;p&gt;Electric motors designed for stall torque can handle stall torque just fine. One giveaway sign of high stall torque motors is forced cooling (cooling with a powered fan and not just a fan mounted passively on the axis of the motor). One of the issued with stalling motors is heat, as the stopped rotor does not facilitate and airflow and the winding are more prone to overheating.&lt;/p&gt;&#xA;&lt;p&gt;If your motors stall but the maximum specified stall current is not exceeded you will not damage the motor. Please take care as some motors specify more then one maximum stall current, larger ones (if there are more) can only be applied for a limited amount of time.&lt;/p&gt;&#xA;&lt;p&gt;Efficiency is not directly related to the stall torque, it is safe to apply the maximum continuous stall torque current to the motor for a prolonged time without any damage.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-10-20T06:48:48.870" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="21294" PostTypeId="1" CreationDate="2020-10-20T12:54:19.600" Score="0" ViewCount="118" Body="&lt;p&gt;I have worked through navigation stack on diff-drive, I'm wondering how to get the stack running on 4 wheeled Omni-wheel robot equipped with Arduino and how to get odometry from 4 wheel encoders&lt;/p&gt;&#xA;&lt;p&gt;It would be great if you would give me some hints to get it running. I am especially confused how to setup the 4 omni wheel control&lt;/p&gt;&#xA;" OwnerUserId="27300" LastActivityDate="2021-03-21T10:04:55.477" Title="ROS Navigation stack with Omni-wheel robot" Tags="&lt;ros&gt;&lt;navigation&gt;&lt;odometry&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21295" PostTypeId="2" ParentId="21291" CreationDate="2020-10-20T20:15:14.220" Score="1" Body="&lt;p&gt;Efficiency is power output divided by power input. Electrical power, your input, is&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;P = IV \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Mechanical power, your output, is&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;P = Fv \\&#xA;$$&lt;/span&gt;&#xA;or&#xA;&lt;span class=&quot;math-container&quot;&gt;$$ &#xA;P = \tau \omega \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;that is, force times speed or torque times angular speed. If you are stalled, then your speed is zero. If your speed is zero then your power is zero and your efficiency is zero.&lt;/p&gt;&#xA;&lt;p&gt;As &lt;a href=&quot;https://robotics.stackexchange.com/a/21293/9720&quot;&gt;50k4 said&lt;/a&gt;, you can do whatever the datasheet says you can do. The keyword to look for is &lt;strong&gt;continuous&lt;/strong&gt;. That's what you should be able to safely do, forever, without risk of damage.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-10-20T20:15:14.220" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21296" PostTypeId="1" AcceptedAnswerId="21298" CreationDate="2020-10-20T23:17:35.277" Score="0" ViewCount="75" Body="&lt;p&gt;I'm trying to work out the orientation of a block at the end of two axis gimbal. I know the position of the two rotational joints, but would like to calculate the final orientation of the block given the position of the two axis gimbal. Hence I thought calculating the forward kinematics would be an appropriate solution.&lt;/p&gt;&#xA;&lt;p&gt;The gimbal system I'm trying to calculate the forward kinematics for is shown in the image below.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/scpnl.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/scpnl.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I've attempted to model the gimbal diagrammatically below.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/toy6f.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/toy6f.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The Denavit-Hartenberg parameter table I calculate as:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;θ          α          r          d&#xA;90         -90        0          0&#xA;180 + θ1   90         0          0&#xA;180 + θ2   180        0          0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I've implemented this in Matlab as:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;clear all;&#xA;clc;&#xA;&#xA;inner = 90;&#xA;outer = 180;&#xA;&#xA;theta = 90;&#xA;alpha = 90;&#xA;&#xA;h01 = DH(theta, alpha);&#xA;&#xA;theta = 180 + outer;&#xA;alpha = -90;&#xA;&#xA;h12 = DH(theta, alpha);&#xA;&#xA;theta = 180 + inner;&#xA;alpha = 180;&#xA;&#xA;h13 = DH(theta, alpha);&#xA;&#xA;effector = h01*h12*h13;&#xA;&#xA;disp(effector);&#xA;&#xA; function h = DH(theta, alpha)&#xA; &#xA;    h= [cosd(theta), -sind(theta)*cosd(alpha), sind(theta)*sind(alpha);&#xA;        sind(theta), cosd(theta)*cosd(alpha), -cosd(theta)*sind(alpha);&#xA;        0,           sind(alpha),              cosd(alpha)];&#xA; &#xA; end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;However, I'm getting the wrong answer as if I apply an inner axis rotation of 90 degrees and an outer axis rotation of 180 degrees I should get the identity matrix i.e. my block frame should align with the frame I've set for the base. Can anyone see where I'm going wrong and give some pointers?&lt;/p&gt;&#xA;" OwnerUserId="21594" LastEditorUserId="21594" LastEditDate="2020-10-22T15:38:38.147" LastActivityDate="2020-10-22T17:51:58.040" Title="Forward Kinematics for Two Axis Gimbal Mount" Tags="&lt;kinematics&gt;&lt;forward-kinematics&gt;&lt;orientation&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21297" PostTypeId="1" CreationDate="2020-10-21T12:45:42.183" Score="0" ViewCount="25" Body="&lt;p&gt;I am running ORB SLAM 2 on a drone with a downward facing, RGBD camera. I'm using Gazebo to simulate and Rviz to see the &lt;code&gt;vision_pose&lt;/code&gt; ROS topic (the orientation/position of the drone calculated using slam). I am having an issue with the &lt;code&gt;vision_pose&lt;/code&gt; being incorrect because the pose is initialised as if the camera is pointing straight forward towards the horizon by default instead of straight down.&lt;/p&gt;&#xA;&lt;p&gt;If anyone is familiar with the ORB_SLAM2 code, to try and initialise the pose to suit my initial conditions, in the &lt;code&gt;Tracking::StereoInitialization()&lt;/code&gt; function, I have replaced the line:&lt;br /&gt;&#xA;&lt;code&gt;mCurrentFrame.SetPose(cv::Mat::eye(4,4,CV_32F));&lt;/code&gt;&lt;br /&gt;&#xA;With:&lt;br /&gt;&#xA;&lt;code&gt;mCurrentFrame.SetPose(cv::Mat(4,4,CV_32F,quat_rot));&lt;/code&gt; where &lt;code&gt;quat_rot&lt;/code&gt; is a quaternion that represents a 90 degree pitch down on the Z axis.&lt;/p&gt;&#xA;&lt;p&gt;I used an online calculator to find that the quaternion for the pitch down would be: (0.7071, 0, 0, -0.7071) or more simply, (0.7071 - 0.7071k).&lt;/p&gt;&#xA;&lt;p&gt;I declared the &lt;code&gt;quat_rot&lt;/code&gt; quaternion with those numbers:&lt;br /&gt;&#xA;&lt;code&gt;float quat_rot[16] = &lt;/code&gt;&lt;br /&gt;&#xA;&lt;code&gt;{0.7071, 0, 0, -0.7071,&lt;/code&gt;&lt;br /&gt;&#xA;&lt;code&gt;0, 0.7071, -0.7071, 0,&lt;/code&gt;&lt;br /&gt;&#xA;&lt;code&gt;0, -0.7071, 0.7071, 0,&lt;/code&gt;&lt;br /&gt;&#xA;&lt;code&gt;-0.7071, 0, 0, 0.7071};&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;But when using Rviz to check the pose, it is only rotated down at 45 degrees. I have tried swapping the position of the scalar number in the quaternion after reading about the differences in how Eigen processes quaternions but it doesn't seem like Eigen is used for this particular part. I have also tried with some different numbers but none give a rotation past 45 degrees without throwing errors.&lt;/p&gt;&#xA;&lt;p&gt;I'm out of ideas and would greatly appreciate any input, perhaps the basis of the question is wrong and I should be doing this elsewhere in the code, I don't know, maybe someone can point me in the right direction.&lt;/p&gt;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="27303" LastActivityDate="2020-10-21T12:45:42.183" Title="Setting An Initial Pose Rotation In ORB SLAM2" Tags="&lt;ros&gt;&lt;slam&gt;&lt;visual-odometry&gt;&lt;drone&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21298" PostTypeId="2" ParentId="21296" CreationDate="2020-10-21T16:31:34.140" Score="2" Body="&lt;p&gt;To expand on my comment, the last line of your DH table gives the transform between &lt;code&gt;END_EFFECTOR-1&lt;/code&gt; and &lt;code&gt;END_EFFECTOR&lt;/code&gt; frames, right? I'm saying instead of &lt;code&gt;&amp;lt;θ2, 0, 0, 0&amp;gt;&lt;/code&gt; to have &lt;code&gt;&amp;lt;180+θ2, 180, 0, 0&amp;gt;&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;There's no movement between your end effector and the object you're attaching to the end effector, so there's no point in keeping the end effector frame. Dragging it along through all your calculations isn't going to add anything for you.&lt;/p&gt;&#xA;&lt;p&gt;The other easy alternative is to add an extra line that defines the relationship between the end effector and the object.&lt;/p&gt;&#xA;&lt;p&gt;:EDIT:&lt;/p&gt;&#xA;&lt;p&gt;I modified your script a bit to make some visualizations of the frames. I used &lt;code&gt;subplot&lt;/code&gt; in Matlab to try to orient the plots to roughly what you've drawn above, and then I could see immediately where you were having trouble. I changed your theta/alpha values to get the frames to match up, and I renamed &lt;code&gt;h13&lt;/code&gt; to &lt;code&gt;h23&lt;/code&gt; because it's the transform between frames 2 and 3, not 1 and 3.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;clear all;&#xA;close all;&#xA;clc;&#xA;&#xA;inner = 0;&#xA;outer = 0;&#xA;&#xA;theta = 90;&#xA;alpha = 90;&#xA;&#xA;h01 = DH(theta, alpha);&#xA;&#xA;theta = 180 + outer;&#xA;alpha = 90;&#xA;&#xA;h12 = DH(theta, alpha);&#xA;&#xA;theta = 180 + inner;&#xA;alpha = 180;&#xA;&#xA;h23 = DH(theta, alpha);&#xA;&#xA;effector = h01*h12*h23;&#xA;&#xA;disp(effector);&#xA;&#xA;x = [1, 0, 0].';&#xA;y = [0, 1, 0].';&#xA;z = [0, 0, 1].';&#xA;&#xA;viewAZ = 30;&#xA;viewEL = 30;&#xA;viewSettings = [viewAZ, viewEL];&#xA;xMin = -1;&#xA;xMax = 1;&#xA;yMin = -1;&#xA;yMax = 1;&#xA;zMin = -1; &#xA;zMax = 1;&#xA;axisLimits = [xMin, xMax, yMin, yMax, zMin, zMax];&#xA;&#xA;figure(1)&#xA;subplot(3,2,5)&#xA;plot3([0, x(1)],[0, x(2)],[0, x(3)],'Color',[1 0 0]);&#xA;hold on;&#xA;plot3([0, y(1)],[0, y(2)],[0, y(3)],'Color',[0 1 0]);&#xA;plot3([0, z(1)],[0, z(2)],[0, z(3)],'Color',[0 0 1]);&#xA;axis equal;&#xA;axis(axisLimits)&#xA;view(viewSettings);&#xA;title('F0 - Base')&#xA;&#xA;x1 = h01*x;&#xA;y1 = h01*y;&#xA;z1 = h01*z;&#xA;&#xA;subplot(3,2,3)&#xA;plot3([0, x1(1)],[0, x1(2)],[0, x1(3)],'Color',[1 0 0]);&#xA;hold on;&#xA;plot3([0, y1(1)],[0, y1(2)],[0, y1(3)],'Color',[0 1 0]);&#xA;plot3([0, z1(1)],[0, z1(2)],[0, z1(3)],'Color',[0 0 1]);&#xA;axis equal;&#xA;axis(axisLimits)&#xA;view(viewSettings);&#xA;title('F1')&#xA;&#xA;x2 = (h01*h12)*x;&#xA;y2 = (h01*h12)*y;&#xA;z2 = (h01*h12)*z;&#xA;&#xA;subplot(3,2,4)&#xA;plot3([0, x2(1)],[0, x2(2)],[0, x2(3)],'Color',[1 0 0]);&#xA;hold on;&#xA;plot3([0, y2(1)],[0, y2(2)],[0, y2(3)],'Color',[0 1 0]);&#xA;plot3([0, z2(1)],[0, z2(2)],[0, z2(3)],'Color',[0 0 1]);&#xA;axis equal;&#xA;axis(axisLimits)&#xA;view(viewSettings);&#xA;title('F2')&#xA;&#xA;x3 = (h01*h12*h23)*x;&#xA;y3 = (h01*h12*h23)*y;&#xA;z3 = (h01*h12*h23)*z;&#xA;&#xA;subplot(3,2,2)&#xA;plot3([0, x3(1)],[0, x3(2)],[0, x3(3)],'Color',[1 0 0]);&#xA;hold on;&#xA;plot3([0, y3(1)],[0, y3(2)],[0, y3(3)],'Color',[0 1 0]);&#xA;plot3([0, z3(1)],[0, z3(2)],[0, z3(3)],'Color',[0 0 1]);&#xA;axis equal;&#xA;axis(axisLimits)&#xA;view(viewSettings);&#xA;title('F3 - End Effector')&#xA;&#xA;&#xA;&#xA; function h = DH(theta, alpha)&#xA;&#xA;    h= [cosd(theta), -sind(theta)*cosd(alpha), sind(theta)*sind(alpha);&#xA;        sind(theta), cosd(theta)*cosd(alpha), -cosd(theta)*sind(alpha);&#xA;        0,           sind(alpha),              cosd(alpha)];&#xA;&#xA; end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2020-10-22T17:51:58.040" LastActivityDate="2020-10-22T17:51:58.040" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="21299" PostTypeId="1" AcceptedAnswerId="21300" CreationDate="2020-10-21T20:43:58.550" Score="0" ViewCount="22" Body="&lt;p&gt;I am looking at servos to make a robot claw, and I want to make sure the one i am getting can turn under a specific amount of weight. The servos specify their torque in oz-in. I am not sure how to read this.&lt;/p&gt;&#xA;&lt;p&gt;What i need to know is, how to I convert oz-in into the specific weight it can withstand in lbs.&lt;/p&gt;&#xA;" OwnerUserId="26710" LastActivityDate="2020-10-21T22:35:24.327" Title="How to convert torque in oz-in into the weight it can withstand?" Tags="&lt;servomotor&gt;&lt;torque&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21300" PostTypeId="2" ParentId="21299" CreationDate="2020-10-21T22:35:24.327" Score="1" Body="&lt;p&gt;If you are not familiar with the unit of measurement:&lt;/p&gt;&#xA;&lt;p&gt;1 oz-in = 0.00706 Nm&lt;/p&gt;&#xA;&lt;p&gt;if you are not familiar with torque:&lt;/p&gt;&#xA;&lt;p&gt;1 Nm torque translates to 1N of force at a radial distance from the shaft of the motor of 1 m. As 1N gravitational force corresponds to an approx. 0.1kg weight, 1 Nm torque can lift* 0.1kg weight 1m away from the shaft, or 1 kg weight 0.1m away from the shaft.&lt;/p&gt;&#xA;&lt;p&gt;*Lift in this case means that if such weight is attached to the rotor, the rotor would be in equilibrium, less weight then this would start to rotate.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-10-21T22:35:24.327" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21301" PostTypeId="2" ParentId="21294" CreationDate="2020-10-22T09:40:07.810" Score="0" Body="&lt;p&gt;It really depends on your robot kinematics (where is the location of the wheels in the robot frame and what type of wheels it have). There are a lot of resources online to get it from the configuration you have or you can even calculate it yourself. Since you got experience with diff drive then you know that you need to compute something like this for the linear velocity in the x axis of the local frame of your diff drive robot:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;vx = radius_wheel* (vel_wheel_left + vel_wheel_right) / distance_between_wheels; &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;when you get the kinematics for an omnidirectional 4 wheels you can also get such an equation to put it in your arduino and send the info to the main robot computer.&lt;/p&gt;&#xA;&lt;p&gt;An arduino by itself is not powerful enough to run the full nav stack, you would need at least a raspberry pi to work as the main robot computer and the arduino as a low level controller for the motors and read encoders.&lt;/p&gt;&#xA;&lt;p&gt;You can start by googling kinematics of 4 wheels omnidirectional robot.&lt;/p&gt;&#xA;" OwnerUserId="21229" LastActivityDate="2020-10-22T09:40:07.810" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21302" PostTypeId="1" CreationDate="2020-10-23T04:04:40.987" Score="0" ViewCount="30" Body="&lt;p&gt;is making a quadcopter hover forwards or backwards possible ? The only two ways I can think of making this happen is by using motors to move the rotors in such a way that they are always vertical and adjusting the thrust accordingly , The second one is using nozzles to direct the flow of air such that it's always downwards , Can any of these methods work and what can be the problems with them ?&lt;/p&gt;&#xA;" OwnerUserId="27310" LastActivityDate="2020-10-26T13:18:14.620" Title="How to make a quadcopter hover when tilted forward or backward?" Tags="&lt;quadcopter&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21303" PostTypeId="1" CreationDate="2020-10-23T04:11:42.723" Score="1" ViewCount="55" Body="&lt;p&gt;I have a robot with a drivetrain that is comprised of 4 mecanum wheels. These wheels are able to move vertically and horizontally, as well as rotate. The robot is square (18in x 18in) with the front 2 wheels in line, back 2 wheels in line, left 2 wheels in line, and right 2 wheels in line.&lt;/p&gt;&#xA;&lt;p&gt;My question is would it be possible to strafe (move horizontally) while rotating? Is this feasible with mecanum wheels? If so, what would be the required relative speeds of each wheel?&lt;/p&gt;&#xA;&lt;p&gt;Any help is appreciated, thanks!&lt;/p&gt;&#xA;" OwnerUserId="27311" LastEditorUserId="27311" LastEditDate="2020-10-23T13:45:13.983" LastActivityDate="2020-10-23T13:45:13.983" Title="Rotate while strafing with mecanum wheels" Tags="&lt;wheeled-robot&gt;&lt;rotation&gt;&lt;movement&gt;&lt;wheel&gt;" AnswerCount="0" CommentCount="3" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21306" PostTypeId="1" AcceptedAnswerId="21341" CreationDate="2020-10-24T02:11:27.577" Score="0" ViewCount="33" Body="&lt;p&gt;New manufacturing facility of telescopic conveyors has been established one Eastern country of European Union. The managers of the facility are very proud that human workforce is their main asset - all is being done by human hands - they are specifically stating that the following jobs are being done by the human hands: welding, painting, assembling. They are stating also that their facility is the most modern one in the world.&lt;/p&gt;&#xA;&lt;p&gt;It is quite interesting. Welding, painting, assembling are tasks that are already automated in the car manufacturing and are routinely done by the industrial robots. Why such tasks can not be done for the manufacturing of the telescopic conveyors?&lt;/p&gt;&#xA;&lt;p&gt;One explanation is that car manufacturing is quite defined and immutable process - robots are programmed for the specific model and few specific models. But the conveyors are adapted for each customer separately. But again - today we have so much work about reconfigurable and adaptable manufacturing. Can we establish software defined pipeline which starts with the CAD files for the conveyors designed together with the customer. Then automatic transformation process generates the specific configuration and plans for the industrial robots for this kind of model, then automatic tests and calibration procedures can be run and at the last stage the plans can be uploaded to the robots and the manufacturing executed.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;My question is - what prevents the use of industrial robots in the manufacturing of telescopic conveyors and whether the reconfigurable adaptable manufacturing can be used for the automatic reconfiguration of industrial robots for one-off production of the conveyor from the CAD files?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Is this is the process in the future then how near is such future and what are the main challenges for implementation of such process?&lt;/p&gt;&#xA;&lt;p&gt;p.s. I am not the expert in robotics in manufacturing, but my efforts are around the machine learning, symbolic computation and automated theorem proving and these are the areas which can be used for the processing of the CAD files and for the generation of the production commands from some kind of meta-rules, meta-knowledge. Though I have not tried to implement that, but may be this is the perspective research and commerce area?&lt;/p&gt;&#xA;" OwnerUserId="809" LastActivityDate="2020-11-01T02:25:05.137" Title="What capabilities of industrial robots should be improved to use them for the manufacturing of the telescopic conveyors?" Tags="&lt;industrial-robot&gt;&lt;manufacturing&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21307" PostTypeId="1" AcceptedAnswerId="21308" CreationDate="2020-10-24T03:00:09.010" Score="1" ViewCount="31" Body="&lt;p&gt;I'm a programmer, but not savvy with robotics (to lay a baseline for my lack of knowledge). I have a &lt;a href=&quot;https://wiki.starbasegame.com/index.php/Robot_arms&quot; rel=&quot;nofollow noreferrer&quot;&gt;game-simulated arm&lt;/a&gt; that allows me to set joint angles which it will automatically move the joints to match, unless blocked. Thus this is a very high-level control scheme; I don't need to worry about forces and actuators directly. For my use-case I also needn't concern myself with how fast the arm can react or the servo delay.&lt;/p&gt;&#xA;&lt;p&gt;What I need to understand is how I translate joint measurements and allowed angles into linear equations / matrices, and then how to plug in the desired end-effector location/orientation to those matrices to get the set of joint angles as an output (or an error if the desired coordinate cannot be reached with the given arm constraints). I know the full answer must be involved and long, involving multiple chapters of a robotics textbook; a high level explanation plus a pointer to freely published resources is all I'm expecting.&lt;/p&gt;&#xA;" OwnerUserId="27313" LastActivityDate="2020-10-24T08:29:08.923" Title="I'm looking for a simplified control scheme for a game-rendered robotic arm" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;simulation&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21308" PostTypeId="2" ParentId="21307" CreationDate="2020-10-24T08:29:08.923" Score="3" Body="&lt;p&gt;If I understand correctly you are not looking for a control scheme, you are tryin to solve the (inverse) kinematics problem.&lt;/p&gt;&#xA;&lt;p&gt;In robotics, kinematics is preoccupied with motions, disregarding forces. The simplest kinematic problem, which applies in your case is the forward kinematics problem, which can be formulated as:&#xA;How to calculate the position and orientation of the end effector (&lt;span class=&quot;math-container&quot;&gt;$X$&lt;/span&gt;) from the joint angles (&lt;span class=&quot;math-container&quot;&gt;$Q$&lt;/span&gt;):&#xA;&lt;span class=&quot;math-container&quot;&gt;$$X = f(Q)$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Solving this problem is straight forward for serial robots (the kind that you have). Explanation &lt;a href=&quot;https://blog.robotiq.com/how-to-calculate-a-robots-forward-kinematics-in-5-easy-steps&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The inverse kinematics problem is the opposite of this, how to calculate the joint angles, given the end effector position and orientation:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$Q = f^{-1}(X)$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Now this a a bit more complicates then the forward kinematics. there may or may not exist a closed form solution. In your case at the first sight it seems that you will need a numerical solution. You can take a look at &lt;a href=&quot;https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2323867/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Cyclical Coordinate Descent&lt;/a&gt; as a simple numerical way to solve the inverse kinematics problem, and advance to more advanced ways to solve it if needed.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-10-24T08:29:08.923" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21311" PostTypeId="2" ParentId="21256" CreationDate="2020-10-25T16:34:50.373" Score="0" Body="&lt;p&gt;First you have to use OpenGL to capture images and process fast While the pictures are JPG technology Very slow to process a single frame taking longer Second, anything that is in the frame of the picture must be transformed into waves An example of this Triangle shape Beginning, rows of pixels of the color type are combined from right to left, and the result is a waveform number one Then rows of pixels of color type are combined from top to bottom, and the result is a vector number two Then, router number one and router number two enter the database, and here the program knows that this data is that this is a triangle shape Even if you enter a large or small triangle, the program will tell you that this is the shape of a triangle And so on the rest of the geometric shapes&lt;/p&gt;&#xA;" OwnerUserId="27317" LastActivityDate="2020-10-25T16:34:50.373" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21315" PostTypeId="1" CreationDate="2020-10-26T04:48:47.403" Score="0" ViewCount="48" Body="&lt;p&gt;I am trying to understand various SLAM algorithms.&lt;/p&gt;&#xA;&lt;p&gt;In my case, I need my robot to start from point A and reach point B with maximum accuracy as well as precision for all the cases.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/V0Cpi.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/V0Cpi.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Note that, as the pic below shows, there are'nt walls around for the conventional SLAM methods to vouch for. The square signifies a reference object ( a table for instance). The pic shows a top-view of the cases. I am aware that either of the cases (I, II or III) will need different SLAM instances, each with its own map.&lt;/p&gt;&#xA;&lt;p&gt;Once I have the map, maybe using &lt;a href=&quot;https://github.com/Jiankai-Sun/ORB_SLAM2_Enhanced&quot; rel=&quot;nofollow noreferrer&quot;&gt;ORB SLAM 2&lt;/a&gt;. How does one use the map to control the motors of the robot (can be tank bot) such that the map is utilized to get from A to B ?&lt;/p&gt;&#xA;" OwnerUserId="26766" LastEditorUserId="26766" LastEditDate="2020-10-26T06:05:47.303" LastActivityDate="2020-10-26T06:05:47.303" Title="How to use SLAM generated map to navigate my robot to the destination?" Tags="&lt;slam&gt;&lt;localization&gt;&lt;navigation&gt;&lt;differential-drive&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21316" PostTypeId="1" AcceptedAnswerId="21318" CreationDate="2020-10-26T05:44:31.533" Score="3" ViewCount="53" Body="&lt;p&gt;I'm trying to obtain dynamics of a 4 DOF robot. Firstly, I calculated all Transformation matrices and Jacobians. While solving Lagrangian there is a term I - Inertia tensor . I couldn't understand the formula and how it is applied to a link (Because I couldn't find any example of Finding inertia tensor for a link instead they are explaining with ordinary rectangular bar).&#xA;I wanted to know how to find that Inertia tensor matrix ? So please someone help me&lt;/p&gt;&#xA;" OwnerUserId="27323" LastActivityDate="2020-10-26T09:41:17.923" Title="How to calculate Inertia tensor?" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;dynamics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21317" PostTypeId="2" ParentId="21315" CreationDate="2020-10-26T05:59:55.680" Score="1" Body="&lt;p&gt;Once you have a map, you need to use a planning algorithm to get the robot from point A to point B. I'd reccomend reading up on &lt;a href=&quot;https://en.wikipedia.org/wiki/Rapidly-exploring_random_tree&quot; rel=&quot;nofollow noreferrer&quot;&gt;RRT algorithm.&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;How to go from point A to point B is mostly independent of how you calculate the map and how you position yourself in the map.&lt;/p&gt;&#xA;" OwnerUserId="16033" LastActivityDate="2020-10-26T05:59:55.680" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="21318" PostTypeId="2" ParentId="21316" CreationDate="2020-10-26T09:41:17.923" Score="2" Body="&lt;p&gt;You can calculate the inertia tensor for some primitive geometries of a linkage using known formula. Most of these are listed &lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_moments_of_inertia#List_of_3D_inertia_tensors&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. If you do not have a regular shape for which you can find the inertia tensor by a simple formula, you need to obtain this through integration (using the generalised formula). As this is not practicable by hand, most CAD programs (e.g. SolidWorks, Invetor) can calculate the inertia tensor for you for a CAD model. Care must be taken:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Make sure that the inertia tensor is expressed in the coordinate system your dynamical model is expecting it to be expressed in. You can change the coordinate system it is expressed in in the CAD program.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Furthermore, care must be taken to make sure the right material (material density) is selected for the model (as this is not required for any other purposes then static/dynamic load and/or deformation calculations it is often neglected leading to incorrect results)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Also, please be advised that due to modelling inaccuracies, the calculated inertia tensor is usually only close to the actual value, it does not exactly equal it. Reasons behind this are modelling inaccuracies (e.g. motors are modelled as a block, instead of a rotor and a stator with exact dimensions, cables, shafts, gearboxes are not modelled correctly, etc.).&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-10-26T09:41:17.923" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21319" PostTypeId="2" ParentId="21302" CreationDate="2020-10-26T13:18:14.620" Score="1" Body="&lt;p&gt;A quadcopter tilts in order to point its thrust vector in a direction that is not straight up. This creates a horizontal component to the thrust vector that allows the quadcopter to move along a horizontal plane.&lt;/p&gt;&#xA;&lt;p&gt;If the motors are typical, i.e. rigidly mounted to the frame, and the rotors are typical, i.e. rigidly mounted to the motor, then tilting the quadcopter frame &lt;strong&gt;necessarily&lt;/strong&gt; creates a horizontal thrust component.&lt;/p&gt;&#xA;&lt;p&gt;The only way to tilt the frame of the quadcopter and have it hover is to re-point the thrust vector to vertical or to counteract the horizontal component of force. You could do this any number of ways, including gimbals on the motors, swashplates on the rotors (like the main rotor of a helicopter), or with a horizontal fan of some kind that would blow contrary to the horizontal thrust generated by the body rotation.&lt;/p&gt;&#xA;&lt;p&gt;Of course, the easiest and least expensive way to handle this would be to have a payload or subframe with a gimbal and move your payload. Leave the base quadcopter alone and move just whatever you're trying to move.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-10-26T13:18:14.620" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21320" PostTypeId="1" CreationDate="2020-10-26T16:12:45.837" Score="2" ViewCount="76" Body="&lt;p&gt;We've got a mobile platform with a source of odometry and an IMU, which are merged in an EKF filter (robot_localization node), producing continuous &lt;strong&gt;odom-&amp;gt;base_link&lt;/strong&gt; transform. The robot is also equipped with a lidar, that we use for SLAM. Now, since the robot's pose estimate coming from SLAM has a known covariance, I used a second EKF, merging the odometry, IMU and SLAM pose and producing the &lt;strong&gt;map-&amp;gt;odom&lt;/strong&gt; transform. As you can see, I followed the standard approach to use two EKFs, where the first one is merging continuous data and the second all data.&lt;/p&gt;&#xA;&lt;p&gt;From what I understood, the pose coming from SLAM is not continuous (similary to GPS signal). On the other hand, I noticed that visual odometry is usually considered continuous, thus only one EKF is used. However, the &lt;strong&gt;map-&amp;gt;odom&lt;/strong&gt; transform is not static, so the second EKF looks like a good way to update it dynamically.&lt;/p&gt;&#xA;&lt;p&gt;If we stick with two separate EKFs as mentioned in the beginning, what are the state of the art techniques to take into account the quality of previous position estimates? For example, if the robot starts at a docking station, the initial position is well known and shouldn't be too much affected by the &lt;strong&gt;map-&amp;gt;odom&lt;/strong&gt; transform. Or if the initial position has a large covariance, then the ongoing computation could actually improve it.&lt;/p&gt;&#xA;&lt;p&gt;Thanks for any suggestion or links to articles regarding this topic.&lt;/p&gt;&#xA;" OwnerUserId="27094" LastActivityDate="2021-03-26T16:00:35.060" Title="What's the correct approach to merging of localization and odometry data?" Tags="&lt;ros&gt;&lt;slam&gt;&lt;localization&gt;&lt;ekf&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21321" PostTypeId="1" AcceptedAnswerId="21323" CreationDate="2020-10-27T07:20:05.590" Score="1" ViewCount="857" Body="&lt;p&gt;DISCLAIMER: New to electrical engineering topics. I'm a 3d-printing hobbyist. I don't know all the Jargon being used but trying my best to keep up.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;PROBLEM&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Recently bought a Nema 17 stepper pancake motor to replace the Ender 3 extrusion stepper. It's only used for direct extrusion with a BMG 3/1 gear ratio, which leads me to believe it doesn't need a lot of juice to have it work optimally.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;*Got this from TriangleLab:*&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.aliexpress.com/item/32768043304.html?spm=a2g0s.9042311.0.0.27424c4d4HQcug&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.aliexpress.com/item/32768043304.html?spm=a2g0s.9042311.0.0.27424c4d4HQcug&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This thin stepper is running very hot. Via pronterface and/or octoprint, I adjusted the &amp;quot;current&amp;quot; from the default ender 3 E850 to E50, using command M906 and saving with M500.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;It is still running hot and TriangleLab hasn't been very forthcoming.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;strong&gt;NOTE:&lt;/strong&gt;&lt;/em&gt; i'm not sure what &amp;quot;&lt;em&gt;current&lt;/em&gt;&amp;quot; is being referred to, amps or voltage. I just followed this youtuber's advice for the adjustment...&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Used this guy's method:&lt;/em&gt; &lt;a href=&quot;https://youtu.be/GHUr1a3nXDU&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://youtu.be/GHUr1a3nXDU&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Question&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;How do I know if the stepper is running TOO hot?&#xA;(not sure what the consequences of a hot stepper might be, other than the thing burning out and becoming a fire hazard.)&lt;/p&gt;&#xA;&lt;p&gt;Is there a calculation that is better than just eyeballing the situation and doing random tweaks?&lt;/p&gt;&#xA;&lt;p&gt;Any info would be much appreciated.&#xA;Thanks in advance.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;**Triangle Lab's Stepper specifications**&#xA;&#xA;NEMA 17&#xA;&#xA; - 1.8° Step Angle&#xA; - 200 Steps Per Revolution&#xA; - 1.0 Amp&#xA; - per phase 5.1 Ω 5.9mH&#xA; - 21 N/cm Holding Torque&#xA; - 23mm Body&#xA; - 20mm Output Shaft(5mm diameter)(17mm D-Shaped)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;......&lt;/p&gt;&#xA;" OwnerUserId="27327" LastEditorUserId="19143" LastEditDate="2020-10-29T04:23:04.030" LastActivityDate="2021-04-06T23:00:13.333" Title="How to calculate Current for pancake stepper motor - To change in Pronterface" Tags="&lt;stepper-motor&gt;&lt;current&gt;&lt;encoding&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21322" PostTypeId="1" AcceptedAnswerId="21328" CreationDate="2020-10-27T08:16:47.057" Score="1" ViewCount="44" Body="&lt;p&gt;I obtain the heading or yaw angle from a source which I am not allowed to modify, but when the angle goes more than +180 or -180, it interchanges either from 180 to -180 or the other way around. Any suggestion on how to overcome this drastic angle changes will be appreciated.&lt;/p&gt;&#xA;&lt;p&gt;Here is the plot of angle changes over time,&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/lp9KM.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/lp9KM.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Update after @Chuc comment,&#xA;Here is what I feel like desired behaviour&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/FNHB6.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FNHB6.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="18159" LastEditorUserId="18159" LastEditDate="2020-10-27T20:44:46.757" LastActivityDate="2020-10-28T18:43:02.783" Title="How to estimate proper heading angle" Tags="&lt;mobile-robot&gt;&lt;motion-planning&gt;&lt;orientation&gt;" AnswerCount="1" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="21323" PostTypeId="2" ParentId="21321" CreationDate="2020-10-27T13:35:38.363" Score="0" Body="&lt;p&gt;Current is amps. The set of specifications you gave states&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;1.0 Amp&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;so as long as your current is &amp;lt;= 1.0 Amp then it doesn't really matter how hot it's getting because the motor is rated for that current.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-10-27T13:35:38.363" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21324" PostTypeId="2" ParentId="21320" CreationDate="2020-10-27T13:43:01.170" Score="0" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;what are the state of the art techniques to take into account the quality of previous position estimates?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The Kalman filter and extended Kalman filter use the measurement and model covariances to balance the &amp;quot;quality&amp;quot; of estimated (model-based) and measured (feedback-based) position estimates.&lt;/p&gt;&#xA;&lt;p&gt;From the &lt;a href=&quot;https://en.wikipedia.org/wiki/Kalman_filter#Underlying_dynamical_system_model&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia entry on Kalman filters&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$w_k$&lt;/span&gt; is the process noise which is assumed to be drawn from a zero mean multivariate normal distribution, &lt;span class=&quot;math-container&quot;&gt;$\mathcal{N}$&lt;/span&gt;, with covariance, &lt;span class=&quot;math-container&quot;&gt;$Q_k$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$v_k$&lt;/span&gt; is the observation noise which is assumed to be zero mean Gaussian white noise with covariance &lt;span class=&quot;math-container&quot;&gt;$R_k$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;and from the &lt;a href=&quot;https://en.wikipedia.org/wiki/Extended_Kalman_filter#Formulation&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia entry on extended Kalman filters&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$w_k$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$v_k$&lt;/span&gt; are the process and observation noises which are both assumed to be zero mean multivariate Gaussian noises with covariance &lt;span class=&quot;math-container&quot;&gt;$Q_k$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$R_k$&lt;/span&gt; respectively.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So the covariances are built into the Kalman filter already. It's all taken care of for you :)&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-10-27T13:43:01.170" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21326" PostTypeId="2" ParentId="9413" CreationDate="2020-10-28T09:40:51.273" Score="0" Body="&lt;p&gt;Here is the minimalistic implementation of RRT for ROS in C++.&lt;/p&gt;&#xA;&lt;p&gt;Requirements&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;You should have ROS (latest version) installed on your system&lt;/li&gt;&#xA;&lt;li&gt;Use Linux OS to install ROS&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Link to the repo:- &lt;a href=&quot;https://github.com/Safire-AI/RRT&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/Safire-AI/RRT&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="27335" LastActivityDate="2020-10-28T09:40:51.273" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21328" PostTypeId="2" ParentId="21322" CreationDate="2020-10-28T18:43:02.783" Score="1" Body="&lt;p&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/21322/how-to-estimate-proper-heading-angle?noredirect=1#comment34968_21322&quot;&gt;Based on your comment&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;if I am able to get 0 to 2pi, would be enough as well.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The following code will do it:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;modifiedHeading = SensorOutput();&#xA;if(modifiedHeading &amp;lt; 0)&#xA;{&#xA;    modifiedHeading += 360f;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;But, as I've mentioned previously, you still have the jump discontinuity, but you've moved it from the 359/1 degree range from the 179/-179 degree range.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-10-28T18:43:02.783" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="21329" PostTypeId="1" AcceptedAnswerId="21330" CreationDate="2020-10-29T02:48:44.263" Score="2" ViewCount="90" Body="&lt;p&gt;I have a somewhat specific need for a project I'm building:  I am trying to create a sensor grid of 1.5m height by 2m wide that has to be able to detect objects, ~10cm in diameter,  in potentially high light that are moving a maximum of 185kmh.&lt;/p&gt;&#xA;&lt;p&gt;I want this grid to be as tight as possible because I want to then build x/y coordinates out of it through triangulation.&lt;/p&gt;&#xA;&lt;p&gt;I'm looking for help on finding the correct type of sensors I should be using.  I had considered some IR sensors, but experimenting with them I haven't found any that really give me the correct type of distance I'm looking for.&lt;/p&gt;&#xA;&lt;p&gt;I have also considered ultrasonic sensors, but it looks like they are too slow to really handle anything moving as fast as I'm looking for.&lt;/p&gt;&#xA;&lt;p&gt;Could I get some help and get pointed in the correct direction to find the type of sensors I'm looking for?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/W5XOw.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/W5XOw.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="27337" LastActivityDate="2020-10-29T14:26:16.647" Title="IR Sensor to detect fast moving object" Tags="&lt;arduino&gt;&lt;sensors&gt;&lt;ultrasonic-sensors&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21330" PostTypeId="2" ParentId="21329" CreationDate="2020-10-29T14:26:16.647" Score="2" Body="&lt;p&gt;As-is, the question is off-topic, but if I rephrase it as &amp;quot;Is it possible to use multiple IR sensors near each other?&amp;quot; then the answer is &lt;strong&gt;no&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;IR sensors are the mix of genius and dumb that I love - it does rangefinding by shining a light and measuring the reflection. That's it. You typically wind up needing to calibrate to particular objects, because shape and surface finish will how the light is reflected back at the sensor.&lt;/p&gt;&#xA;&lt;p&gt;Generally speaking, intensity falls off with &lt;span class=&quot;math-container&quot;&gt;$r^2$&lt;/span&gt;, because a point source spreads light over an &lt;em&gt;angular&lt;/em&gt; swath, so you can get some decent estimates with an IR sensor for most objects.&lt;/p&gt;&#xA;&lt;p&gt;The issue comes when you put several IR sensors together. You can get a kind of &lt;a href=&quot;https://en.wikipedia.org/wiki/Crosstalk&quot; rel=&quot;nofollow noreferrer&quot;&gt;crosstalk&lt;/a&gt; if you don't include shields or hoods - some of the light that was emitted by Sensor A is reflected at Sensor B, which then interprets the reflected light as its own and thus registers an object.&lt;/p&gt;&#xA;&lt;p&gt;You'll have the same issue with sonar, too, for the same reason. Your best option for a situation like this would be to go with a single-sensor solution; a multiplane lidar is doable but very expensive, but a webcam would probably suit your needs at a reasonable cost.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-10-29T14:26:16.647" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21334" PostTypeId="2" ParentId="18433" CreationDate="2020-10-30T09:48:59.920" Score="0" Body="&lt;p&gt;To understand this concept, you can compare two famous algorithms, Probabilistic Roadmap (PRM) and RRT.&lt;/p&gt;&#xA;&lt;p&gt;RRT is a single query algorithm. In other words, it can evaluate a single path when two points are selected, i.e., the path between start and goal point. RRT forms a tree-like structure that branches out in all directions sampling and connecting the points(waypoints).&lt;/p&gt;&#xA;&lt;p&gt;On the other hand, PRM is more like a planner than a typical algorithm. It forms a graph-like structure that spreads but doesn't branch-like RRT. It can be used to find multiple paths/queries from start to goal. The biggest advantage of using PRM is that it retains the graph structure and reuses it every time you select two points. Although RRT guarantees a feasible path but at the expense of optimality.&lt;/p&gt;&#xA;&lt;p&gt;Hope this helps.&lt;/p&gt;&#xA;" OwnerUserId="27335" LastActivityDate="2020-10-30T09:48:59.920" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21336" PostTypeId="1" CreationDate="2020-10-31T16:10:35.670" Score="0" ViewCount="55" Body="&lt;p&gt;I cloned a gazebo ROS package from &lt;a href=&quot;https://github.com/YugAjmera/omni3ros_pkg&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/YugAjmera/omni3ros_pkg&lt;/a&gt; and if I try to do &lt;strong&gt;catkin_make&lt;/strong&gt;,I get the following error.&#xA;I am using Gazebo 11 and ROS Noetic and i've made sure to source the shell.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/0adsm.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0adsm.png&quot; alt=&quot;error&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I am new to ROS and Gazebo. It will be helpful if someone help me resolve this, Thanks!&lt;/p&gt;&#xA;" OwnerUserId="26283" LastActivityDate="2020-11-02T14:17:38.327" Title="Error when &quot;catkin_make&quot; is run" Tags="&lt;ros&gt;&lt;gazebo&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="21337" PostTypeId="1" CreationDate="2020-10-31T16:11:56.963" Score="0" ViewCount="46" Body="&lt;p&gt;How do I calculate roll,pitch and yaw value from the position co ordinates of the drone, that is x,y and z from the gps sensor???&#xA;Using the x,y and z co ordinates I have to calculate roll,pitch and yaw. What is the equation for this??&lt;/p&gt;&#xA;" OwnerUserId="27248" LastActivityDate="2020-10-31T16:11:56.963" Title="To calculate roll,pitch and yaw" Tags="&lt;ros&gt;&lt;pid&gt;&lt;imu&gt;&lt;gps&gt;&lt;drone&gt;" AnswerCount="0" CommentCount="1" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21338" PostTypeId="1" AcceptedAnswerId="21339" CreationDate="2020-10-31T17:21:27.780" Score="3" ViewCount="66" Body="&lt;p&gt;I'm studying motion control and I start with the simplest case, I have to go from A to B in a straight line using a &lt;strong&gt;trapezoidal motion profile&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/vmvSW.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vmvSW.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I understand that in a real case, due to the fact that the controller is discrete I need a position/velocity feedback to reach the desidered position with a good accuracy.&lt;/p&gt;&#xA;&lt;p&gt;Reading some books I found that the most &lt;strong&gt;common control scheme&lt;/strong&gt; is the one below, in which there are a controller for position, velocity and current (torque).&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/1uaI8.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1uaI8.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The questions I have is:&lt;/p&gt;&#xA;&lt;p&gt;-&amp;gt; &lt;strong&gt;How can I use the control scheme with a given motion profile (for instance the trapezoidal) ?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I'm sure it's very trivial but I cannot solve.&lt;/p&gt;&#xA;&lt;p&gt;At the time being, I understand that if I define the &lt;em&gt;desired position&lt;/em&gt; for instance &lt;em&gt;B&lt;/em&gt; (in the control scheme) I cannot use a custom motion profile but I'm restricted to the one the control system provide. So for instance if I'm in the deceleration stage (of the trapezoidal profile) the position/velocity/acceleration profiles will be provided by the control scheme and not but my needs.&lt;/p&gt;&#xA;&lt;p&gt;I feel that what I understand is not correct but I don't know why: practically how to merge the two concepts.&lt;/p&gt;&#xA;" OwnerUserId="22661" LastActivityDate="2020-10-31T21:01:31.930" Title="Motion profile and Motion control scheme, how do they interact?" Tags="&lt;control&gt;&lt;pid&gt;&lt;motion-planning&gt;&lt;dynamics&gt;&lt;trajectory&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21339" PostTypeId="2" ParentId="21338" CreationDate="2020-10-31T21:01:31.930" Score="2" Body="&lt;p&gt;These two concepts are complementary and you use them together, the motion profile providing the input to your control scheme. At each time-step the motion profile gives you the reference values for the control loop scheme (and also some feed forward values if needed).&lt;/p&gt;&#xA;&lt;p&gt;This goes both for the acceleration and the deceleration phases. in both cases, the motion profile is generating the momentarily set-points at each timestep, which your closed loop control schemes tries to follow.&lt;/p&gt;&#xA;&lt;p&gt;To understand the need for this you have to imagine a scenario where you want to get to point B, within a certain time (let's say 1 second). Your closed loop control loop is tuned for maximum performance, it would take you there in 0.1 seconds. This is when you need the motion profile, keep the closed loop controls at maximum performance but generate the set points accordingly. (In order to make sure the profile is executed smoothly a feed forward term is used at the acceleration and at the velocity level which is added as on offset at the summing blocks at your cascaded loop.)&lt;/p&gt;&#xA;&lt;p&gt;The profile you have presented is a simple one (the simplest one which sees limited practical use), but this approach, trajectory planning, extended to mutiple axes and multiple waypoints and even higher degree polynomials is the basis for synchronizing high precision (e.g. CNC Machines) motion control. The profile is used to make sure the axes remain geometrically synchronized while moving with the desired on-path velocity.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-10-31T21:01:31.930" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21341" PostTypeId="2" ParentId="21306" CreationDate="2020-11-01T02:25:05.137" Score="2" Body="&lt;p&gt;So much to unpack. Let's make sure we understand each other.&lt;/p&gt;&#xA;&lt;p&gt;You said &amp;quot; today we have so much work about reconfigurable and adaptable manufacturing&amp;quot;. My understanding is that you are talking about something like a baxter robot. it is easy to place the robot in a new location, and to teach it a new task. Basically a robot that is easily &amp;quot;trained&amp;quot; for a new task. Instead of a programmer coming in and writing code, a non-technical person can (for example) press a button and guide the arms, and the robot will repeat the motion. One thing to remember is that this is a tool with very limited capability.&lt;/p&gt;&#xA;&lt;p&gt;you said &amp;quot;Can we establish software defined pipeline which starts with the CAD files for the conveyors designed together with the customer. Then automatic transformation process generates the specific configuration and plans for the industrial robots for this kind of model, then automatic tests and calibration procedures can be run and at the last stage the plans can be uploaded to the robots and the manufacturing executed.&amp;quot; OK, there is one core idea here that stands in the way: cost. Regardless of the kind of robot you choose, you are talking about an automated system. With enough money, you CAN create what you suggest, it just will cost an insane amount of money to execute. If you were to take that route, you would have to define all the work the robots need to do (screw every nut, put every bolt in place, attach each component, align sensors, install the belt, lace the belt, etc...), then some company would provide the robot hardware, and program it for your application, and give you an interface to the system (ex: build model A, or model B). This would make no business sense due to cost.&lt;/p&gt;&#xA;&lt;p&gt;Lets do your question piece by piece.&lt;/p&gt;&#xA;&lt;p&gt;&amp;quot; what prevents the use of industrial robots in the manufacturing of telescopic conveyors?&amp;quot; in short, it's cost:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Telescoping conveyors are low volume production - anytime we are dealing with low volume production, it doesn't make sense to automate. There is no business case for it.&lt;/li&gt;&#xA;&lt;li&gt;Manufacturing requires high dexterity &amp;amp; mobility - you need to go under the conveyor, and say pull a cable from here to there. You need to install a cable reel under the unit, you need to install bearings, you need to swing one part of the boom into the other, etc... There is so much &amp;quot;variety&amp;quot; of work, that the cost of automation will be crazy expensive and won't make sense.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&amp;quot;&lt;em&gt;can&lt;/em&gt; reconfigurable adaptable manufacturing can be used for the automatic reconfiguration of industrial robots for one-off production of the conveyor from the CAD files?&amp;quot; If you have unlimited money, yes. In real practice no. The real key to automation in the real world is having a robot do a task uninterrupted. Say you need to screw a nut. A $40,000 robot that screws one nut, means you paid 40,000 to get that nut screwed. If it screws 1,000,000,000 nuts, then the price per nut is very cheap, and automation makes sense. The issue is that a robot that can screw a nut, cannot simply &amp;quot;change it's job&amp;quot; as it has to be retooled. it needs to exchange it's nut screwing hardware for some other task, and this switch is mechanically complicated, and complicated from a software perspective. Take for example the steps to building an electrical panel for an extending conveyor:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;pick parts&lt;/li&gt;&#xA;&lt;li&gt;place the panel on the work bench&lt;/li&gt;&#xA;&lt;li&gt;open the door (you need a key)&lt;/li&gt;&#xA;&lt;li&gt;pull out the backplate hardware (will be floating around)&lt;/li&gt;&#xA;&lt;li&gt;pull out the backplate&lt;/li&gt;&#xA;&lt;li&gt;lay out the parts&lt;/li&gt;&#xA;&lt;li&gt;cut the din rail&lt;/li&gt;&#xA;&lt;li&gt;put the terminal block on the din rail&lt;/li&gt;&#xA;&lt;li&gt;cut cable&lt;/li&gt;&#xA;&lt;li&gt;strip cable&lt;/li&gt;&#xA;&lt;li&gt;screw cable into terminal&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Just here you can see how much variety of tooling a robot would need to have to build a simple control panel. One robot cannot do it all; so you need many robots. Well how many panels you building per year? 20? not enough to justify automation.&lt;/p&gt;&#xA;&lt;p&gt;&amp;quot;Adaptable automation&amp;quot; is not very practical. In the future as more software is available for &amp;quot;human&amp;quot; like hardware (ex: hands that can screw a nut, AND pick up tools to tighten it), this will become more of a reality, but at present it's not economically feasible.&lt;/p&gt;&#xA;&lt;p&gt;&amp;quot;Is this is the process in the future&amp;quot; I think so. When robot hardware is on par with human capability, and the software enables the hardware to do things that we people find &amp;quot;easy&amp;quot; like holding and using tools then you will see robots doing more skilled work.&lt;/p&gt;&#xA;&lt;p&gt;&amp;quot;how near is such future?&amp;quot; I believe about 40 years, or one giant war away.&lt;/p&gt;&#xA;&lt;p&gt;&amp;quot;and what are the main challenges for implementation of such process?&amp;quot; the software. you can put a robotiq hand on Boston Dynamic's Atlas, but do you think you will be able to code it to use a screw driver like a human? It comes down to software.&lt;/p&gt;&#xA;&lt;p&gt;If you can get robots to learn, then the hardware is already there. Really expensive at present, but nothing mass production can't fix. The real issue is software.&lt;/p&gt;&#xA;&lt;p&gt;The reason why doing one-off automation is not done in the real world is because a robot with specific tooling is needed for every one task. and when you break down building a telescoping conveyor there are thousands of tasks, and the cost of hardware to do those tasks doesn't make sense when you have the option to hire people (where one electrician can build a panel on their own).&lt;/p&gt;&#xA;" OwnerUserId="18167" LastActivityDate="2020-11-01T02:25:05.137" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21343" PostTypeId="2" ParentId="21275" CreationDate="2020-11-02T13:27:15.240" Score="-1" Body="&lt;p&gt;The posted sourcecode measures the current system state and then the control action is determined. Even if the calculation is done 10 times per second it is based on a single measurement in the now. The desired behavior to stop the quadcopter smoothly and avoid overshooting is a multi-stage problem. Multi state means, that more than a single decision and measurement are required. In the simplest case, the source code has to be extended with a second input value, so that the equation takes t and t-1 as input.&lt;/p&gt;&#xA;&lt;p&gt;From an implementation perspective the architecture has a lot of common with using a recurrent neural network and a pid controller together. This helps to improve the quality of the control actions.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2020-11-02T13:27:15.240" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21344" PostTypeId="2" ParentId="21336" CreationDate="2020-11-02T14:17:38.327" Score="1" Body="&lt;p&gt;From the error screenshot you posted:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;Add the installation prefix of &amp;quot;gazebo&amp;quot; to CMAKE_PREFIX_PATH or set &amp;quot;gazebo_DIR&amp;quot; to a directory containing one of the above files. If &amp;quot;gazebo&amp;quot; provides a separate development package or SDK, be sure it has been installed.&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Since &lt;a href=&quot;https://robotics.stackexchange.com/questions/21336/error-when-catkin-make-is-run?noredirect=1#comment34990_21336&quot;&gt;you said that you have gazebo installed&lt;/a&gt;, do you have the reference set in &lt;code&gt;gazebo_DIR&lt;/code&gt;? Find what &lt;code&gt;gazebo_DIR&lt;/code&gt; is currently set to, find where the &lt;code&gt;gazeboConfig.cmake&lt;/code&gt; or &lt;code&gt;gazebo-config.cmake&lt;/code&gt; files are located on your computer, and check that the two directories match.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-11-02T14:17:38.327" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21345" PostTypeId="1" CreationDate="2020-11-02T18:18:30.817" Score="0" ViewCount="65" Body="&lt;p&gt;I'm trying to obtain dynamics of a 4 DOF robot. Firstly, I calculated all Transformation matrices and Jacobians. While solving Lagrangian there is two main things one is kinetic energy and the other is potential energy . The kinetic energy is simplified into D matrix and Coriolis's factor, which to find the gravitational factor in lagrangian method , we need to find the potential energy. My problem is in that potential energy which is equal to P=m&lt;em&gt;g&lt;/em&gt;h . I don't know what does that h correspond to and how to find the value of h .&#xA;Could some one help me solving this issue ?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2w5jO.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2w5jO.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/nyFCs.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/nyFCs.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="27323" LastEditorUserId="27323" LastEditDate="2020-11-07T15:19:34.570" LastActivityDate="2021-04-06T17:02:05.183" Title="How to calculate potential enegy of manipulator?" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;dynamics&gt;&lt;manipulator&gt;&lt;first-robotics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21346" PostTypeId="2" ParentId="21345" CreationDate="2020-11-02T18:24:45.773" Score="0" Body="&lt;p&gt;The height &lt;code&gt;h&lt;/code&gt; is a height relative to some arbitrary baseline. You can set it anywhere you want, but I think typically the easiest way to choose your baseline height is to set zero as the lowest reachable point for your robot. Then all heights are positive and you can have zero kinetic energy when speed is zero and zero potential energy when your arm is at its lowest point.&lt;/p&gt;&#xA;&lt;p&gt;:EDIT:&lt;/p&gt;&#xA;&lt;p&gt;Based on your graphic, it looks like &lt;span class=&quot;math-container&quot;&gt;$F_1$&lt;/span&gt;, your first joint, is at the top, so you've drawn the arm with as low of a reach as it could have. That means the &lt;span class=&quot;math-container&quot;&gt;$h=0$&lt;/span&gt; datum should be through the center of the bottom joint (or center of mass of the end effector, but you don't have a Frame 5 &lt;span class=&quot;math-container&quot;&gt;$F_5$&lt;/span&gt; depicted):&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/YS0Ht.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/YS0Ht.png&quot; alt=&quot;h=0 datum&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2020-11-06T18:08:42.613" LastActivityDate="2020-11-06T18:08:42.613" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="21347" PostTypeId="1" AcceptedAnswerId="21357" CreationDate="2020-11-02T23:03:05.283" Score="0" ViewCount="75" Body="&lt;p&gt;I'm new to Kalman filter design and I'm struggling to understand how to apply the Kalman filter methodology to my problem. I've read a research paper which seems to describe what I'm trying to do &lt;a href=&quot;https://journals.sagepub.com/doi/pdf/10.5772/57516&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://journals.sagepub.com/doi/pdf/10.5772/57516&lt;/a&gt;. The paper describes experiments in which the data collected consists of a noisy measurement paired with a truth measurement. In the paper the Kalman filter matrices are designated as follows:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$\boldsymbol{X}=\begin{bmatrix} b_{x} &amp;amp;P_{11} &amp;amp;P_{12} &amp;amp;P_{13} \end{bmatrix}^{T}$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$\boldsymbol{H}=\begin{bmatrix}&#xA;        1       &amp;amp;r              &amp;amp;0          &amp;amp;0\\&#xA;        1       &amp;amp;-r             &amp;amp;0          &amp;amp;0\\&#xA;        1       &amp;amp;r/\sqrt{2}     &amp;amp;r/\sqrt{2} &amp;amp;0\\&#xA;        1       &amp;amp;r/\sqrt{2}     &amp;amp;0          &amp;amp;r/\sqrt{2}\\&#xA;\end{bmatrix}$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$\boldsymbol{\Phi} = \boldsymbol{I}_{4\times4}$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;The state vector describes bias and scale factor states. Whilst I'm not entirely sure how the H matrix was derived I can't understand how the filter would be used with real data i.e. the observed measurement replaces the elements r in the H matrix, but the ground truth which this is to be calibrated or compared against is a single value i.e. we know the true rate or true acceleration, we do not know the true bias and scale factor states. How then does the filter include this ground truth which I assume it uses to update its estimate of the bias and scale factor terms. Could someone shed some light on how the Kalman filter is laid out to allow the estimation to use this pairing of measurement and ground truth?&lt;/p&gt;&#xA;" OwnerUserId="21594" LastEditorUserId="21594" LastEditDate="2020-11-03T23:52:24.323" LastActivityDate="2020-11-03T23:52:24.323" Title="Kalman Filter Design" Tags="&lt;kalman-filter&gt;&lt;estimation&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21350" PostTypeId="1" CreationDate="2020-11-03T07:28:04.110" Score="0" ViewCount="27" Body="&lt;p&gt;Suppose I want to train butterfly robot with reinforcement learning. So I need physically correct simulation of aerodynamics and material physics (because butterfly wings should bend etc). Also I physical correctness is more important that speed, so I can leave limulation to work slowly, no need for real time. Also I need GPU usage.&lt;/p&gt;&#xA;&lt;p&gt;Which software system I need for this like Gazebo, Unreal etc?&lt;/p&gt;&#xA;" OwnerUserId="9723" LastActivityDate="2020-11-03T08:31:48.153" Title="Reinforcement train butterfly robot in virtual reality?" Tags="&lt;simulation&gt;&lt;reinforcement-learning&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21351" PostTypeId="1" AcceptedAnswerId="21359" CreationDate="2020-11-03T08:10:34.293" Score="0" ViewCount="56" Body="&lt;p&gt;I am reading this paper: &lt;a href=&quot;https://www.researchgate.net/publication/224635390_The_motion_control_problem_for_the_CyberCarpet&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.researchgate.net/publication/224635390_The_motion_control_problem_for_the_CyberCarpet&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;in which is implemented a cartesian regulator to bring the position &lt;span class=&quot;math-container&quot;&gt;$(x,y)$&lt;/span&gt; to &lt;span class=&quot;math-container&quot;&gt;$(0,0)$&lt;/span&gt;. I have built it as in the paper, so with velocity inputs, and the output is the following:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/lkMcx.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/lkMcx.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;the final velocities has to be zero, and since I can only control position and orientation, I think it is correct that I get the plot on the right.&lt;/p&gt;&#xA;&lt;p&gt;The problem is a posture regulatoin prolem. If we consider for example a unicycle, we have that the desired behavior is the following:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/WDrfo.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/WDrfo.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;so with this type of controller the unicycle is driven to the origin.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ys3TA.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ys3TA.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;from here: &lt;a href=&quot;https://people.kth.se/%7Edimos/pdfs/IET15_Zambelli.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://people.kth.se/~dimos/pdfs/IET15_Zambelli.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;where &lt;span class=&quot;math-container&quot;&gt;$R$&lt;/span&gt;,&lt;span class=&quot;math-container&quot;&gt;$\gamma$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\delta$&lt;/span&gt; are the polar coordinates for the system. &lt;span class=&quot;math-container&quot;&gt;$\gamma$&lt;/span&gt; can be defined as a pointing error, and &lt;span class=&quot;math-container&quot;&gt;$\delta$&lt;/span&gt; is the orientation on the final position.&lt;/p&gt;&#xA;&lt;p&gt;I use polar coordinates, because I have read in many papers that in this way we can use Lyapunov function to find the controller.&lt;/p&gt;&#xA;&lt;p&gt;The controller is the following(written in a Simulink block):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;temp = x^2+y^2;&#xA;&#xA;%polar coordinates&#xA;&#xA;R = sqrt(temp);                   &#xA;gamma = atan(tan(y/x))-theta;&#xA;delta = gamma + theta;          %not used now&#xA;&#xA;sinc = sin(gamma)*sign(cos(gamma));&#xA;&#xA;&#xA;%linear and angular velocity&#xA;if R == 0 &#xA;    v=k_1*((R^2)*sign(cos(gamma)));&#xA;&#xA;% steering velocity&#xA;&#xA;    omega = k_1*R*sinc;      &#xA;else&#xA;    v=k_1*R*sign(cos(gamma));&#xA;    omega = k_1*sin(gamma)*sign(cos(gamma));&#xA;&#xA;end&#xA;&#xA;inputs = [v;omega];&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;which is obtained throgh feedback linearization, but it can also be obtained using a Lyapunov method.&lt;/p&gt;&#xA;&lt;p&gt;Now, I am trying to go a little furhter, and instead of using velocity inputs, I would like to use acceleration inputs. What I have done is the following:&lt;/p&gt;&#xA;&lt;p&gt;I have defined &lt;code&gt;v&lt;/code&gt; and &lt;code&gt;omega&lt;/code&gt; as states of the system, and I have built a cascade controller. So, to the controller I hve just added these lines:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;a = k_2*(v-v_s);               %linear acceleration&#xA;alpha = k_2*(omega-omega_s);          %angular acceleration&#xA;&#xA;inputs = [a;alpha];               %acceleration inputs&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;where &lt;code&gt;v_s&lt;/code&gt; and &lt;code&gt;omega_s&lt;/code&gt; are now the linear and angular velocities, which are states now and &lt;code&gt;v&lt;/code&gt; and &lt;code&gt;omega&lt;/code&gt; are now the desired linear and angular velocity respectively. And the model of the system (written in nother Simulink block) becomes:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;x_dot = -v_s*cos(theta)+y*omega_s;&#xA;y_dot = -v_s*sin(theta)-x*omega_s;&#xA;theta_dot = omega_s;&#xA;theta_w_dot = -omega_s;&#xA;v_dot = a;&#xA;omega_dot = alpha;&#xA;&#xA;state_dot = [x_dot;y_dot;theta_dot;v_dot;omega_dot];    %out of the block I integrate this and send it back as [x;y;theta;v;omega], which are the states of the system&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;and if I do so, now I get the following plots:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/TZt5l.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/TZt5l.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;so it diverges in practically everithing!&lt;/p&gt;&#xA;&lt;p&gt;I don't understand what I am doing wrong. For the definition of the acceleration inputs I am trying to follow this paper, which is for a uniccyle but it should be similar, since they are both non-holonomic systems: &lt;a href=&quot;https://www.researchgate.net/publication/276184094_Stabilized_Feedback_Control_of_Unicycle_Mobile_Robots&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.researchgate.net/publication/276184094_Stabilized_Feedback_Control_of_Unicycle_Mobile_Robots&lt;/a&gt;  (at pag. 4)&lt;/p&gt;&#xA;&lt;p&gt;My final objective is actually to build a controller for this system that converges both in position and orientation, so apply the concept written in the latter paper, at pag.3, to my system of study.&lt;/p&gt;&#xA;&lt;p&gt;But I think now that the problem lies in the definition of the acceleration law.&lt;/p&gt;&#xA;&lt;p&gt;Can somebody please help me understand what I am doing wrong?&lt;/p&gt;&#xA;&lt;p&gt;[EDIT]If I try to substitute &lt;code&gt;gamma = atan(tan(y/x))-theta;&lt;/code&gt; with &lt;code&gt;gamma = atan2(y,x)-theta;&lt;/code&gt; I get:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/i32sJ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/i32sJ.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;which I think it is a little better then before, even if the acceleration profile is a bit weird I think.&lt;/p&gt;&#xA;&lt;p&gt;Could you give me some help understanding if up to now I have done somehting wrong? &lt;strong&gt;The acceleration profile that I get seems to be not really ok to me, what do you think?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;[EDIT] I wrote &lt;code&gt;sinc&lt;/code&gt; as an abbreviation for &lt;code&gt;sin*cos&lt;/code&gt; , sorry for the confusion, when I wrote it I really wasn't thinking about the sinc function.&lt;/p&gt;&#xA;" OwnerUserId="21797" LastEditorUserId="21797" LastEditDate="2020-11-03T20:28:06.997" LastActivityDate="2020-11-03T20:28:06.997" Title="Problem designing acceleration inputs controller" Tags="&lt;mobile-robot&gt;&lt;control&gt;&lt;kinematics&gt;&lt;matlab&gt;&lt;trajectory&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21352" PostTypeId="2" ParentId="21350" CreationDate="2020-11-03T08:31:48.153" Score="1" Body="&lt;p&gt;Unreal, Unity and other game engines, Gazebo, Mujoco and other Physics engines are good at simulating multi body dynamics. There is no deep conceptual difference between them. You can use whichever you prefer.&lt;/p&gt;&#xA;&lt;p&gt;Flying is not only multi body dynamics but also fluid dynamics. This is extremely hard to simulate accurately. It is usually done with CFD (Computational Fluid Dynamics). An open source variant for CFD is OpenFoam.&lt;/p&gt;&#xA;&lt;p&gt;You can create a simplified version, which you can implement in a muli-body dynamics engine and you can create an even more simplified version and write the simplified equations for it.&lt;/p&gt;&#xA;&lt;p&gt;Depending on the level of accuracy you need, you can choose your simulation. I would recommend starting simple and increasing complexity gradually.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-11-03T08:31:48.153" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21353" PostTypeId="1" CreationDate="2020-11-03T09:38:09.190" Score="0" ViewCount="42" Body="&lt;p&gt;I understand this is very conceptual. I am working on a system when I am trying to track the path taken by an object as it moves across a field. Imagine a maze built on roughly the size of a football pitch. I want to be able to track where someone is with a wearable of somekind. What kind of transmitter and receiver can I use? How can I know the relative positioning of these objects from the center of the pitch.&lt;/p&gt;&#xA;&lt;p&gt;I cannot use camera or image processing for this because of other limitations.&lt;/p&gt;&#xA;" OwnerUserId="27367" LastActivityDate="2020-12-03T19:02:30.370" Title="What is the best to track an object and its relative position in field?" Tags="&lt;design&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21356" PostTypeId="2" ParentId="21353" CreationDate="2020-11-03T15:36:38.093" Score="1" Body="&lt;p&gt;Some potential ideas you could use are:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;GPS + IMU&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Probably the easiest solution and depending on how much you want to pay you can adjust for accuracy. You just measure the GPS coordinate of the center pitch, and then just do some simple subtraction to get relative pose.&lt;/p&gt;&#xA;&lt;p&gt;Another advantage of this combination is that it is a simple system to build yourself. The math is also very well known, and you can find multiple open source projects on github.&lt;/p&gt;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;Transmitter and Receiver Localization + IMU&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;There are solutions that work with a transmitter and receiver. So you have some sort of device on the object and beacons around the field. If you want to research them I would look up IPS(Indoor Positioning System) Possible options are:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Ultra WideBand(UWB)&lt;/li&gt;&#xA;&lt;li&gt;Acoustics&lt;/li&gt;&#xA;&lt;li&gt;Wifi&lt;/li&gt;&#xA;&lt;li&gt;Bluetooth&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Probably the most accurate one of these is UWB.&lt;/p&gt;&#xA;&lt;p&gt;However, for all of these you probably have to buy a solution. Making your own is not really an option unless you have a lot of time to develop the hardware and software. It could also be quite expensive to have enough beacons to cover the soccer field.&lt;/p&gt;&#xA;&lt;ol start=&quot;3&quot;&gt;&#xA;&lt;li&gt;Embed beacons in the field + IMU:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Similar to the transmitter and receiver option. But instead of having a few beacons surrounding the field you have a ton of beacons embedded in the field. When the object passes by the beacon gets triggered. You can improve results using prediction and interpolation.&lt;/p&gt;&#xA;&lt;p&gt;Possible options for this could be pressure plates or RFID tags.&lt;/p&gt;&#xA;&lt;p&gt;Problems are somewhat obvious:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Have to actually modify the field.&lt;/li&gt;&#xA;&lt;li&gt;Object must stay close enough to the beacons. So if it flies above the field then it won't be detected.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;For all options you should if possible always have an IMU on the object. That way you can do some sensor fusion to always improve the results.&lt;/p&gt;&#xA;&lt;p&gt;Regarding which one is best is up to you. I recommend Option 1, and if it doesn't work for some reason then rethink your camera limitation. Options 2/3 are going to require either money or an extraordinary amount of effort.&lt;/p&gt;&#xA;" OwnerUserId="15265" LastEditorUserId="15265" LastEditDate="2020-11-03T18:44:28.383" LastActivityDate="2020-11-03T18:44:28.383" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21357" PostTypeId="2" ParentId="21347" CreationDate="2020-11-03T15:42:47.207" Score="2" Body="&lt;p&gt;The measurements don't get inserted into &lt;span class=&quot;math-container&quot;&gt;$H$&lt;/span&gt;. The &lt;span class=&quot;math-container&quot;&gt;$H$&lt;/span&gt; matrix is the &amp;quot;measurement matrix&amp;quot; or &amp;quot;output matrix&amp;quot; such that you get an &lt;strong&gt;estimate&lt;/strong&gt; of the output when you multiply &lt;span class=&quot;math-container&quot;&gt;$H$&lt;/span&gt; by your state vector estimate &lt;span class=&quot;math-container&quot;&gt;$\hat{X}$&lt;/span&gt;. You can see this in equation (23) in the paper you linked, on document page 7:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The model can be expressed as follows:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ X_{i+1} = \Phi X_i + w_i \\&#xA;Z_{i+1} = HX_{i+1} + \epsilon_{i+1} \\ &#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The Kalman filter action happens in equation (25), when the Kalman gain &lt;span class=&quot;math-container&quot;&gt;$K_i$&lt;/span&gt; is applied to the measurement error or &amp;quot;residual.&amp;quot; The measurement error is the difference between what you actually saw, the measurement vector &lt;span class=&quot;math-container&quot;&gt;$Z_i$&lt;/span&gt;, and what you expected to see, which is the output matrix &lt;span class=&quot;math-container&quot;&gt;$H_i$&lt;/span&gt; times the predicted state &lt;span class=&quot;math-container&quot;&gt;$\hat{X}_{i|i-1}$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The Kalman filter takes that modified residual and adds it to the predicted state to get the &amp;quot;corrected&amp;quot; or filtered state. It all happens as one equation in (25):&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\hat{X}_i = \hat{X}_{i|i-1} + K_i\left(Z_i - H_i\hat{X}_{i|i-1}\right) \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Where again the &lt;span class=&quot;math-container&quot;&gt;$\hat{X}_{i|i-1}$&lt;/span&gt; term means, &amp;quot;given my previous state &lt;span class=&quot;math-container&quot;&gt;$i-1$&lt;/span&gt;, what does the model say my state at &lt;span class=&quot;math-container&quot;&gt;$i$&lt;/span&gt; should be?&amp;quot; Rewriting it from the earlier equation:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;X_{i+1} = \Phi X_i + w_i \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;or&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;X_{i|i-1} = \Phi X_{i-1} \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;or&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;X_{i|i-1} = (I + A\Delta t)X_{i-1} + B\Delta t u \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;which is just a numeric integration of&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{x} = Ax + Bu \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;such that&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;x_i = x_{i-1} + \dot{x} \Delta t\\&#xA;x_i = x_{i-1} + (Ax_{i-1} + Bu)\Delta t \\&#xA;x_i = x_{i-1} + A\Delta t x_{i-1} + B \Delta t u\\&#xA;x_i = (I + A\Delta t) x_{i-1} + B\Delta t u \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Hope this makes more sense!&lt;/p&gt;&#xA;" OwnerUserId="9720" LastEditorUserId="9720" LastEditDate="2020-11-03T16:10:04.750" LastActivityDate="2020-11-03T16:10:04.750" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="21359" PostTypeId="2" ParentId="21351" CreationDate="2020-11-03T18:45:46.107" Score="2" Body="&lt;p&gt;You've been asking lots of questions along these lines, and I've been there before - I know what it is to be at your wits end trying to find a solution. I'm going to try to help, but part of my &amp;quot;help&amp;quot; is to point out that I don't understand how your equations are derived. To that end, I'm going to show &lt;strong&gt;why&lt;/strong&gt; I understand how they're derived. I'll start with some equations you've given:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;x_dot = -v_s*cos(theta)+y*omega_s;&#xA;y_dot = -v_s*sin(theta)-x*omega_s;&#xA;theta_dot = omega_s;&#xA;theta_w_dot = -omega_s;&#xA;v_dot = a;&#xA;omega_dot = alpha;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Okay, working from the bottom to the top, with the help of MathJax, it looks like&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{\omega} = \alpha \\&#xA;\dot{v} = a \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Those make sense to me. Derivative of an angular speed &lt;span class=&quot;math-container&quot;&gt;$\omega$&lt;/span&gt; is an angular acceleration &lt;span class=&quot;math-container&quot;&gt;$\alpha$&lt;/span&gt;, and the derivative of a linear speed &lt;span class=&quot;math-container&quot;&gt;$v$&lt;/span&gt; is a linear acceleration &lt;span class=&quot;math-container&quot;&gt;$a$&lt;/span&gt;. Got it.&lt;/p&gt;&#xA;&lt;p&gt;Moving on:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{\theta} = \omega_s \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;and you said in your text that (replacing code with Mathjax):&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;where &lt;span class=&quot;math-container&quot;&gt;$v_s$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\omega_s$&lt;/span&gt; are now the linear and angular velocities, which are states now and &lt;span class=&quot;math-container&quot;&gt;$v$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\omega$&lt;/span&gt; are now the desired linear and angular velocity respectively.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;You've got a &lt;span class=&quot;math-container&quot;&gt;$\dot{\theta_w}$&lt;/span&gt; that I don't know what it's doing, but otherwise I'm still on board with your definitions - they're all identity so far. Where I have trouble is with the next line. Again, in Mathjax, you're saying:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{x} = -v_s \cos{\theta} + y (\omega_s) \\&#xA;\dot{y} = -v_s \sin{\theta} - x (\omega_s) \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;So you've got &lt;span class=&quot;math-container&quot;&gt;$v_s$&lt;/span&gt; as the linear velocity, so I can understand the sine/cosine of an angle times the linear velocity to get the components of linear velocity, but what is this &lt;span class=&quot;math-container&quot;&gt;$x(\omega_s)$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$y(\omega_s)$&lt;/span&gt; business? I'm assuming that it's your x/y position, but the x/y position should have &lt;strong&gt;nothing to do with&lt;/strong&gt; your speed.&lt;/p&gt;&#xA;&lt;p&gt;What you're saying is that, by changing your reference point for zero position, you're changing your speed. If &lt;span class=&quot;math-container&quot;&gt;$x = 0$&lt;/span&gt; then &lt;span class=&quot;math-container&quot;&gt;$x(\omega_s) = 0$&lt;/span&gt;, and if &lt;span class=&quot;math-container&quot;&gt;$x = 100$&lt;/span&gt; then &lt;span class=&quot;math-container&quot;&gt;$x(\omega_s) = 100*\omega_s$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;It feels like you're trying to combine a linear speed and a tangential speed, but the tangential speed would be an angular speed times a radius of curvature, but there's a lot lacking from that. It seems almost like you're maybe trying to do something like with a Coriolis force, but that would be a &lt;strong&gt;force&lt;/strong&gt; that would impact &lt;em&gt;acceleration&lt;/em&gt;, not &lt;em&gt;velocity.&lt;/em&gt; And there's no &lt;span class=&quot;math-container&quot;&gt;$r$&lt;/span&gt; for radius of curvature or rotating frame distance, etc.&lt;/p&gt;&#xA;&lt;p&gt;I would think you should omit the &lt;span class=&quot;math-container&quot;&gt;$x(\omega_s)$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$y(\omega_s)$&lt;/span&gt; terms completely, but again I'm not understanding how they're derived or what they mean.&lt;/p&gt;&#xA;&lt;p&gt;Continuing up:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;a = k_2*(v-v_s);               %linear acceleration&#xA;alpha = k_2*(omega-omega_s);          %angular acceleration&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;it looks like you've got acceleration as a linear function of the difference in reference and state speed, but what is &lt;span class=&quot;math-container&quot;&gt;$k_2$&lt;/span&gt;? The more important problem for me is that you have the &lt;strong&gt;same gain&lt;/strong&gt; &lt;span class=&quot;math-container&quot;&gt;$k_2$&lt;/span&gt; being used to drive both your linear and angular accelerations. This might make sense if you were doing some vector operation, but if you did it longhand like that then I'd expect a &lt;span class=&quot;math-container&quot;&gt;$k_1$&lt;/span&gt; for the linear acceleration and a &lt;span class=&quot;math-container&quot;&gt;$k_2$&lt;/span&gt; for the angular. Since I'm not seeing where &lt;span class=&quot;math-container&quot;&gt;$k_2$&lt;/span&gt; (or &lt;span class=&quot;math-container&quot;&gt;$k_1$&lt;/span&gt;) is defined I can't give any feedback on that.&lt;/p&gt;&#xA;&lt;p&gt;Now finally I work my way back up to your first set of equations, which have me totally lost. I would expect that your reference would be either a constant setpoint, like &lt;code&gt;v=0&lt;/code&gt;, or the result of some profile, like &lt;code&gt;v = MySpeedProfileGenerator(t)&lt;/code&gt;. What I'm seeing instead is that your linear and angular speeds are again functions of distance, but not the x/y positions; just the radial distance &lt;span class=&quot;math-container&quot;&gt;$R$&lt;/span&gt; from origin to the x/y point.&lt;/p&gt;&#xA;&lt;p&gt;That is, you have:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;R = \sqrt{x^2 + y^2} \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;and that's fine, but then why do your targets &lt;span class=&quot;math-container&quot;&gt;$v$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt; depend on whether or not &lt;span class=&quot;math-container&quot;&gt;$R==0$&lt;/span&gt;? And, IF &lt;span class=&quot;math-container&quot;&gt;$R$&lt;/span&gt; is zero, then:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;if R == 0 &#xA;    v=k_1*((R^2)*sign(cos(gamma)));&#xA;    omega = k_1*R*sinc;      &#xA;else&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;is just a really fancy way of writing&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;if R == 0 &#xA;    v = 0;&#xA;    omega = 0;      &#xA;else&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;But I'm also not understanding the rest of it - what is &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt;? What is &lt;span class=&quot;math-container&quot;&gt;$\gamma$&lt;/span&gt; supposed to be? Finally, the biggest thing I don't understand here, what is this &lt;code&gt;sinc&lt;/code&gt; function you've got, and what is it doing? You have:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sinc = sin(gamma)*sign(cos(gamma));&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;But the &lt;a href=&quot;https://en.wikipedia.org/wiki/Sinc_function&quot; rel=&quot;nofollow noreferrer&quot;&gt;sinc function&lt;/a&gt; is&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sinc = sin(x)/x;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;so maybe you're abbreviating some other name? But why does the &lt;strong&gt;sign&lt;/strong&gt; (not &lt;strong&gt;sine!&lt;/strong&gt;) of &lt;code&gt;cos(gamma)&lt;/code&gt; keep coming up?&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;I would almost guess you're trying to constrain it to run in a circle or something, the way these angles keep coming up, and that you're using an &lt;span class=&quot;math-container&quot;&gt;$R$&lt;/span&gt; to drive your speed and... angle? I'm assuming &lt;code&gt;theta&lt;/code&gt; is an input, but &lt;code&gt;theta&lt;/code&gt; doesn't drive your values directly, &lt;em&gt;gamma&lt;/em&gt; does, and that's a function of position.&lt;/p&gt;&#xA;&lt;p&gt;The crazy thing for me is that I can't tell how or even if your position ever gets back to anything. You have position driving &lt;span class=&quot;math-container&quot;&gt;$R$&lt;/span&gt; and driving &lt;span class=&quot;math-container&quot;&gt;$\gamma$&lt;/span&gt;, which means position also drives everything else, and then you're outputting &lt;span class=&quot;math-container&quot;&gt;$\dot{x}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\dot{y}$&lt;/span&gt;, but you're never doing anything with x or y.&lt;/p&gt;&#xA;&lt;p&gt;I thought you had given some drawings previously but I can't find those now; they're not in your list of questions for this site. I think that you should go back to the problem statement for your project and do the following:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Clearly define what you're trying to control - is it x/y position? Radial position? Heading? Is this a SISO system or MIMO?&lt;/li&gt;&#xA;&lt;li&gt;Clearly define the kinematic relationships at play - this means you need a &lt;em&gt;labeled drawing&lt;/em&gt; of your setup.&lt;/li&gt;&#xA;&lt;li&gt;Pick Cartesian or Polar, and stick with it. You're begging for accidents by switching back and forth mid-block.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;:EDIT:&lt;/p&gt;&#xA;&lt;p&gt;As I was writing the last line of this answer, I had a sudden flash - I think maybe you're trying to convert from Polar to Cartesian in your &lt;code&gt;x_dot&lt;/code&gt; and &lt;code&gt;y_dot&lt;/code&gt; equations! But you're not doing it correctly. For one, you're using the &lt;strong&gt;linear speed&lt;/strong&gt; instead of the &lt;strong&gt;radial&lt;/strong&gt; speed. For two, you're using the wrong equation (but you're &lt;em&gt;so&lt;/em&gt; close!):&lt;/p&gt;&#xA;&lt;p&gt;You have:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;x_dot = -v_s*cos(theta) + y*omega_s;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;where the proper polar-to-Cartesian conversion would be:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;x_dot = R_dot*cos(theta) - r*omega_s*sin(theta);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I hope all of this leads you to some insight into your problem.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-11-03T18:45:46.107" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21360" PostTypeId="1" CreationDate="2020-11-04T12:25:22.617" Score="2" ViewCount="22" Body="&lt;p&gt;I'm in the process of building a stereo vision system with YOLO detection. The system have to detect airplanes in far distance and also measure the depth from the airplane to the camera. I think because of the long distance that I have from the camera to the airplane, I must have cameras with a high resolution, maybe also a big baseline. I should use a wide-angle lens with shor focal lenth that can improve the YOLO object detection. I understand that I have to be very carefuly with the camera calibration. What are the best practices for picking cameras for that stereo vision system?&lt;/p&gt;&#xA;" OwnerUserId="27375" LastActivityDate="2020-11-04T12:25:22.617" Title="Choosing cameras for stereo vision system?" Tags="&lt;computer-vision&gt;&lt;stereo-vision&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21361" PostTypeId="1" CreationDate="2020-11-04T21:04:20.673" Score="0" ViewCount="102" Body="&lt;p&gt;Could you please tell me how can I add, additional prismatic joint to the end 6th joint in URDF file of an Universal robot as in the link below:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/ros-industrial/universal_robot/blob/kinetic-devel/ur_description/urdf/ur5.urdf.xacro&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/ros-industrial/universal_robot/blob/kinetic-devel/ur_description/urdf/ur5.urdf.xacro&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="24643" LastEditorUserId="24643" LastEditDate="2020-11-05T18:22:14.030" LastActivityDate="2020-11-05T18:22:14.030" Title="How to add, additional prismatic joint to the end of Universal robot last joint inside URDF file?" Tags="&lt;ros&gt;&lt;industrial-robot&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21362" PostTypeId="2" ParentId="21361" CreationDate="2020-11-05T03:42:41.493" Score="2" Body="&lt;p&gt;What do you mean by &amp;quot;&lt;em&gt;&lt;strong&gt;end&lt;/strong&gt; of an URDF file&lt;/em&gt;&amp;quot;?&lt;/p&gt;&#xA;&lt;p&gt;The last two links (&lt;code&gt;wrist_3_link&lt;/code&gt; and &lt;code&gt;ee_link&lt;/code&gt;) are connected by a &lt;code&gt;fixed&lt;/code&gt; joint. Change the joint &lt;a href=&quot;http://wiki.ros.org/urdf/XML/joint#Attributes&quot; rel=&quot;nofollow noreferrer&quot;&gt;type&lt;/a&gt; to &lt;code&gt;prismatic&lt;/code&gt; and then update the joint properties (joint axis and joint limits).&lt;/p&gt;&#xA;&lt;p&gt;Or do you want to add an additional link to the manipulator i.e. add a new link after &lt;code&gt;ee_link&lt;/code&gt;? In that case, define a new &lt;a href=&quot;http://wiki.ros.org/urdf/XML/link&quot; rel=&quot;nofollow noreferrer&quot;&gt;link&lt;/a&gt; with a unique name, for eg. &lt;code&gt;new_link&lt;/code&gt;. Then, define a prismatic joint with &lt;em&gt;parent&lt;/em&gt; as &lt;code&gt;ee_link&lt;/code&gt; and &lt;em&gt;child&lt;/em&gt; as &lt;code&gt;new_link&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="21531" LastActivityDate="2020-11-05T03:42:41.493" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="21364" PostTypeId="2" ParentId="14321" CreationDate="2020-11-06T13:38:06.963" Score="1" Body="&lt;p&gt;AutoNaut Limited in the UK Chichester have been developing a vessel similar to your ideas, it might be worth getting in touch with them.&lt;/p&gt;&#xA;" OwnerUserId="24947" LastActivityDate="2020-11-06T13:38:06.963" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21365" PostTypeId="1" CreationDate="2020-11-06T22:19:26.373" Score="0" ViewCount="27" Body="&lt;p&gt;I have very limited experience in operating systems and compiler, and most of my experience is with integration and control systems. Currently I am using ros kinetic with teb_local_planner for navigation. For those who are not familiar, teb uses libg2o which is a nonlinear least square solver, and libg2o does depends on cvsparse which uses BLAS and LAPACK; I am assuming all of these are optimized.&lt;/p&gt;&#xA;&lt;p&gt;What I observe is that when I am running simulation and tries to give a navigation goal at a desired 20 hz, everything behaves as expected. However, when I tries to increase the number of loops with g2o (inner_iteration and outer_iteration for teb_local_planner), move_base returns teb is returning cmd_vel at lower rate (around 12 HZ let's say).&lt;/p&gt;&#xA;&lt;p&gt;When I tried to check the amount of computation with htop, all my cores are running at around 70-80% while none of them maxed out. And when I tried to use sysprof to profile the computation, only around 5% of computation are related to teb and g2o.&lt;/p&gt;&#xA;&lt;p&gt;My main question is why is teb lagging (not at desired rate), even though the cores are not maxed out, and it is only taking 5% of overall computation. My other question is whether compiling g2o from source and specify Cmake build type to be Release will be helpful to me. Could ROS not being a real time system cause this in any way? move_base itself is a single node, so even if communication is lagged in subscriber/publisher, it shouldn't cause any problems since it is a single process?&lt;/p&gt;&#xA;&lt;p&gt;This question maybe a bit too specific, I think I need a fresh perspective on this since I am not trained on these topics at all.&lt;/p&gt;&#xA;&lt;p&gt;P.S. I am using Jetson TX2 which is an ARM processor.&lt;/p&gt;&#xA;" OwnerUserId="27387" LastEditorUserId="27387" LastEditDate="2020-11-06T22:52:47.160" LastActivityDate="2020-11-06T22:52:47.160" Title="Ros Kinetic teb_local_planner computation issue" Tags="&lt;ros&gt;&lt;navigation&gt;&lt;real-time&gt;&lt;embedded-systems&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21366" PostTypeId="1" CreationDate="2020-11-06T23:09:30.617" Score="2" ViewCount="60" Body="&lt;p&gt;I see people are using a lot the terms sensing, perception, and learning together in the context of artificial intelligence. It seems to me perception is a more board term that may include sensing and learning. What are their definitions and how do they interact with each other? Any paper references are highly appreciated.&lt;/p&gt;&#xA;" OwnerUserId="27388" LastActivityDate="2021-04-08T09:06:25.640" Title="What are the differences between sensing, perception and learning" Tags="&lt;artificial-intelligence&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21368" PostTypeId="1" CreationDate="2020-11-07T04:27:47.273" Score="1" ViewCount="41" Body="&lt;p&gt;Consider a robotic manipulator with 7-DOF (all joints are revolute) that accepts joint velocities as execution commands. What I am trying to achieve is the following:&lt;/p&gt;&#xA;&lt;p&gt;I want to calculate the velocities of the joints needed in order for the &lt;span class=&quot;math-container&quot;&gt;$z$&lt;/span&gt; vector of the end effector frame to point towards a ball which moves on the &lt;span class=&quot;math-container&quot;&gt;$xy$&lt;/span&gt; plane. I am asked only to change the end effectors orientation and not its position. The position and the velocity of the ball, both expressed in the end effector frame are given by a function &lt;code&gt;get_state()&lt;/code&gt;. The time step of the simulation is &lt;span class=&quot;math-container&quot;&gt;$T = 0.004ms$&lt;/span&gt;. So, basically the procedure is like this:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Simulate one step of the ball&lt;/li&gt;&#xA;&lt;li&gt;Use &lt;code&gt;get_state()&lt;/code&gt; function to obtain ball's position and velocity expressed in the end effector frame&lt;/li&gt;&#xA;&lt;li&gt;Do what it needs to be done to calculate the appropriate joint velocities such that &lt;span class=&quot;math-container&quot;&gt;$z$&lt;/span&gt; vector of end effector frame points towards the ball&lt;/li&gt;&#xA;&lt;li&gt;Repeat&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Considering the fact that the &lt;span class=&quot;math-container&quot;&gt;$z$&lt;/span&gt; vector of the end effector should point towards the center of the ball, the problem breaks down to the simpler one that the &lt;span class=&quot;math-container&quot;&gt;$z$&lt;/span&gt; vector should point towards a point in space. Consider also that the forward kinematics is solved, so the homogeneous transform from the 'world_frame' to the 'end_effector_frame' is known. My thoughts for solving it are:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;At the end the &lt;span class=&quot;math-container&quot;&gt;$z$&lt;/span&gt; vector of the &amp;quot;end_effector_frame&amp;quot; should be aligned to the unit vector &lt;span class=&quot;math-container&quot;&gt;$u$&lt;/span&gt; in the direction from the origin of the end effector frame to the point &lt;span class=&quot;math-container&quot;&gt;$p$&lt;/span&gt; which is the position of the ball expressed in the end effector frame and is known.&lt;/li&gt;&#xA;&lt;li&gt;So, basically I have to come up with a rotation matrix &lt;span class=&quot;math-container&quot;&gt;$R$&lt;/span&gt; capable of rotating the &lt;span class=&quot;math-container&quot;&gt;$z$&lt;/span&gt; vector onto the &lt;span class=&quot;math-container&quot;&gt;$u$&lt;/span&gt; vector. I found a possible way of deriving this rotation matrix &lt;a href=&quot;https://math.stackexchange.com/questions/180418/calculate-rotation-matrix-to-align-vector-a-to-vector-b-in-3d&quot;&gt;here&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;After having this rotation matrix &lt;span class=&quot;math-container&quot;&gt;$R$&lt;/span&gt;, I thought of expressing it as an &lt;span class=&quot;math-container&quot;&gt;$[ \text{angle} \ \text{axis} ]$&lt;/span&gt; representation and then calculate &lt;span class=&quot;math-container&quot;&gt;$dw = angle \cdot axis$&lt;/span&gt;, which is the rotational movement the end effector has to perform in order to achieve the new orientation (maybe add also a proportional controller &lt;span class=&quot;math-container&quot;&gt;$K \cdot dw$&lt;/span&gt;).&lt;/li&gt;&#xA;&lt;li&gt;So, because then end effector performs only a rotational movement and not at all any translational, its total desired movement should be: &lt;span class=&quot;math-container&quot;&gt;$ D = [0 \ \ 0 \ \ 0 \ \ dw(1) \ \ dw(2) \ \ dw(3)]^T $&lt;/span&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Final step is to compute the joint velocities by using the pseudoinverse of the manipulator's jacobian, like so: &lt;span class=&quot;math-container&quot;&gt;$ \dot{q} = J^{-1}(q) \cdot D $&lt;/span&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Basically it is cartesian control of the manipulator. First of all, my basic concern is whether this approach is correct or is it completely wrong and if it is correct, should I use the aforementioned formula (found at the link) in order to compute the proper rotation matrix or is there another way of finding this matrix that is more suitable for robotics ? Besides that would an inverse kinematics approach be more suitable ?&lt;/p&gt;&#xA;&lt;p&gt;Finally, I am curious about the fact that the velocity of the ball is given and expressed in the end effector frame. The procedure I described above doesn't use this knowledge and I am curious if I am missing something and I should use this velocity in any certain way.&lt;/p&gt;&#xA;" OwnerUserId="23342" LastEditorUserId="23342" LastEditDate="2020-11-07T13:49:05.490" LastActivityDate="2020-11-07T13:49:05.490" Title="Cartesian control for $z$ vector of end effector frame to point towards a specific direction" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;inverse-kinematics&gt;&lt;jacobian&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21369" PostTypeId="2" ParentId="21368" CreationDate="2020-11-07T12:58:17.717" Score="1" Body="&lt;p&gt;By imposing that the position of the end-effector &lt;span class=&quot;math-container&quot;&gt;$\mathbf{x} \in \mathbb{R}^3$&lt;/span&gt; has to remain fixed, you're actually limiting your IK that, as a result, might struggle to achieve the task of aligning the vector &lt;span class=&quot;math-container&quot;&gt;$\mathbf{z} \in \mathbb{R}^3$&lt;/span&gt; to point toward the target &lt;span class=&quot;math-container&quot;&gt;$\mathbf{p} \in \mathbb{R}^3$&lt;/span&gt; when, for instance, one of the joints &lt;span class=&quot;math-container&quot;&gt;$\mathbf{q} \in \mathbb{R}^n$&lt;/span&gt; reaches its bounds. To sum up, we are not required to stick to the same position, but rather to point to the ball.&lt;/p&gt;&#xA;&lt;p&gt;To this end, you could try to solve a different optimization problem. Aligning the vector &lt;span class=&quot;math-container&quot;&gt;$\mathbf{z}$&lt;/span&gt; to point toward &lt;span class=&quot;math-container&quot;&gt;$\mathbf{p}$&lt;/span&gt; can be written as:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\max_{\mathbf{q}} \{ \mathbf{z}\left(\mathbf{q}\right) \cdot \left(\mathbf{p}-\mathbf{x}\left(\mathbf{q}\right)\right) \},&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;where &lt;span class=&quot;math-container&quot;&gt;$\mathbf{z}$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$\mathbf{x}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\mathbf{p}$&lt;/span&gt; are all expressed in the world reference frame.&lt;/p&gt;&#xA;&lt;p&gt;The maximization of the dot product can be easily turned into the following minimization:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\min_{\mathbf{q}} \{ \mathbf{z}\left(\mathbf{q}\right) \cdot \left(\mathbf{x}\left(\mathbf{q}\right)-\mathbf{p}\right) \},&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;At this point, you can apply standard IK algorithms such as the Jacobian transposed, the pseudoinverse, the damped least-squares, and the like.&lt;/p&gt;&#xA;&lt;p&gt;Concerning the velocity of the ball &lt;span class=&quot;math-container&quot;&gt;$\dot{\mathbf{p}}$&lt;/span&gt;, you could recruit the well-known differential law &lt;span class=&quot;math-container&quot;&gt;$\dot{\mathbf{p}}=\mathbf{J} \dot{\mathbf{q}}$&lt;/span&gt;, invert it and plug into your IK using the null-space policy.&lt;/p&gt;&#xA;&lt;p&gt;My suggestion is to start off considering that, instead of dealing with &lt;span class=&quot;math-container&quot;&gt;$\mathbf{p}$&lt;/span&gt; in the minimization above, you could come up with a better estimate using a look-ahead, which is in its simplest form &lt;span class=&quot;math-container&quot;&gt;$\tilde{\mathbf{p}} = \mathbf{p} + \dot{\mathbf{p}} \cdot \Delta t$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Interestingly, in the past, I implemented something similar for the iCub robot using a nonlinear constrained optimization package called &lt;a href=&quot;https://github.com/coin-or/Ipopt&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ipopt&lt;/a&gt;. See the relative &lt;a href=&quot;https://github.com/robotology/icub-main/pull/413&quot; rel=&quot;nofollow noreferrer&quot;&gt;pull request&lt;/a&gt; and the corresponding &lt;a href=&quot;https://github.com/robotology/icub-main/blob/master/src/modules/actionsRenderingEngine/src/pointing_far.cpp&quot; rel=&quot;nofollow noreferrer&quot;&gt;code&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2020-11-07T13:04:45.107" LastActivityDate="2020-11-07T13:04:45.107" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="21372" PostTypeId="2" ParentId="21366" CreationDate="2020-11-09T07:49:32.297" Score="1" Body="&lt;p&gt;Sense and perceive, in robotics, are synonyms. There is no practical technological step between sensing and perception.&#xA;If we take a robot for example, or in intelligent thermostat, the sensor signal is fed to the controller (or agent if we consider reinforcement learning), actions come out of controller (or agent). There is no in-between step practically which would constitute a difference between sensing and perception.&lt;/p&gt;&#xA;&lt;p&gt;One could argue, that there is a difference between the sensor signal and the robots internal representation of state. If we consider SLAM algorithms or sensor fusion also in this case there is &amp;quot;no extra&amp;quot; step which one could call perception, differentiated from sensing.&lt;/p&gt;&#xA;&lt;p&gt;Learning is a procedure, which uses data to create models. It is very loosely linked to sensing. Sensing can be used to gather data for learning and sensed data can be passed though a machine learning model to achieve a certain goal (e.g. classifying that signal or identifying an object if the signal is a camera).&lt;/p&gt;&#xA;&lt;p&gt;The comments to the question are suggesting that perception would be somehow information derived from sensing...That is just signal processing, has been called that for years, the goal of signal processing is not to &amp;quot;create perception&amp;quot; but to process signals and derive other/better information from it.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2020-11-09T08:07:19.140" LastActivityDate="2020-11-09T08:07:19.140" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21373" PostTypeId="1" CreationDate="2020-11-09T17:59:09.457" Score="1" ViewCount="76" Body="&lt;p&gt;I'm trying to obtain dynamics of a 4 DOF robot. Firstly, I calculated all Transformation matrices and Jacobians. While solving Lagrangian there is two main things one is kinetic energy and the other is potential energy . The kinetic energy is simplified into D matrix and Coriolis's factor, which to find the gravitational factor in lagrangian method , we need to find the potential energy. My problem is in that potential energy which is equal to P=mgh . I don't know what does that h correspond to and how to find the value of h . Could some one help me solving this issue ?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/WbRr8.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/WbRr8.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/tieiF.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tieiF.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="27323" LastActivityDate="2021-01-21T22:34:06.333" Title="How to calculate potential enegy of manipulator dynamics?" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;dynamics&gt;&lt;manipulator&gt;&lt;first-robotics&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21374" PostTypeId="1" AcceptedAnswerId="21375" CreationDate="2020-11-10T02:13:43.323" Score="0" ViewCount="68" Body="&lt;p&gt;What kind of machine would be best suited to engrave a photograph (grayscale) on a glass sphere?&lt;/p&gt;&#xA;&lt;p&gt;I have checked out the eggbot, and openbuilds &amp;quot;spherebots&amp;quot;....but neither of these options can do something like a photograph.&lt;br /&gt;&#xA;Would I need a 5-axis machine? If so what type? I know nothing about them.&#xA;What types of cnc machines out there could achieve this?&lt;/p&gt;&#xA;" OwnerUserId="27400" LastEditorUserId="27400" LastEditDate="2020-12-15T04:20:02.200" LastActivityDate="2020-12-15T04:20:02.200" Title="Sphere-bot CNC that can engrave in a high resolution?" Tags="&lt;cnc&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21375" PostTypeId="2" ParentId="21374" CreationDate="2020-11-10T15:20:05.760" Score="1" Body="&lt;p&gt;Laser cutters like this &lt;a href=&quot;https://www.epiloglaser.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Epilog&lt;/a&gt; can engrave grayscale images as well as glass and curved surfaces.  See some sample images below.  But I am not sure how much grayscale you will be able to achieve on glass.  You might need to achieve this effect with &lt;a href=&quot;https://en.wikipedia.org/wiki/Halftone&quot; rel=&quot;nofollow noreferrer&quot;&gt;halftone&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;You will need an added rotary attachment for curved surfaces.  This will limit the size of work piece you can use.  The laser with rotary attachment is really only suited for cylindrical objects, not spheres.  As the sphere surface curves away, the laser will de-focus and loose power and resolution.  Fixing a sphere in the rotary attachment will also be a challenge.&lt;/p&gt;&#xA;&lt;p&gt;That being said, I have engraved logos on pumpkins in the past with reasonable results.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/FZTVhm.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FZTVhm.jpg&quot; alt=&quot;image engraving&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/NhoBLm.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/NhoBLm.jpg&quot; alt=&quot;glass engraving&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2020-11-10T15:20:05.760" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="21376" PostTypeId="1" CreationDate="2020-11-11T11:10:20.033" Score="0" ViewCount="25" Body="&lt;p&gt;I am working on developing a 5 DOF robotic arm having 50 kg Payload using PLC, we are willing to source the integrated servo all in one (servo drives, encoder, and servo motor) with no breaks and external breaks have to be attached,&#xA;and I have some doubts before sourcing servos that would this Integrated servo motor be convenient to be controlled with PLC accurately? IS there any chance of mispositioning or any inaccuracy in the case of these integrated servos?&#xA;Is Controlling External break with the integrated servos reasonable?&lt;/p&gt;&#xA;" OwnerUserId="27171" LastActivityDate="2020-11-11T12:01:27.723" Title="Controlling Integrated Servo motors with PLC for 5 DOFIndustrial Robotic arm" Tags="&lt;robotic-arm&gt;&lt;servomotor&gt;&lt;plc&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21377" PostTypeId="2" ParentId="21376" CreationDate="2020-11-11T12:01:27.723" Score="2" Body="&lt;p&gt;Industrial servos with integrated driver and encoder have a limited power compared to non-integrated counterparts. Other then that, their spec sheet specifies their accuracy and if they are good/acceptable quality they will conform the spec sheet. You can extrapolate the positioning accuracy of your robot, based on your mechanism and the positioning (in)accuracy of each joint.&lt;/p&gt;&#xA;&lt;p&gt;Depending on your country, sales representatives might be willing to work with you on finding the right motor for your application from their offering, but you have to break down the requirements to the motor level, you cannot go to them with robot requirements. It is not uncommon for industrial companies to admit, that they cannot fulfil your specs.&lt;/p&gt;&#xA;&lt;p&gt;The Kuka iiwa 7DoF robot arm, the Schunk 6 DOF robot arm, the Pilz 6 Dof root arm are built with integrated servos. There is high quality precedent for integrated servos in robots, although payloads are lighter.&lt;/p&gt;&#xA;&lt;p&gt;Depending on your targeted application(s), programming and motion synchronisation requirements and the chosen PLC, the PLC can be a serious limiting factor (!), although this was not part of your question, as I understand the question focuses on the integrated servos aspect. There is no precedent of a versatile industrial robot using only PLC (and servo drives, regardless of integration).  If the task is highly specific, it might fit, but unlikely. It should be called a &amp;quot;positioning mechanism&amp;quot; (or similar?) not a robot, then...&lt;/p&gt;&#xA;&lt;p&gt;External brakes are uncommon, but not unheard of. Depending on the (safety) certification of the robot cells your robot is placed in (e.g. CE, UL, ISO13849) &amp;quot;diy&amp;quot; brake integration can be a serious problem (not necessarily, highly application dependent).&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-11-11T12:01:27.723" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21378" PostTypeId="1" CreationDate="2020-11-11T16:37:33.507" Score="0" ViewCount="27" Body="&lt;p&gt;In the robot simulation software VREP / Coppelia Sim, how can I show the sonars range on the robot as it moves? Secondly how can I show a trail of where the robot has travelled, a line a so to speak? (Not to be confused with a path 'to' travel on)&lt;/p&gt;&#xA;" OwnerUserId="22956" LastActivityDate="2020-11-11T16:37:33.507" Title="In the robot simulation software VREP / Coppelia Sim how can I show visible sensors and a line of travelled path?" Tags="&lt;simulation&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21379" PostTypeId="1" AcceptedAnswerId="21382" CreationDate="2020-11-11T21:28:07.887" Score="0" ViewCount="31" Body="&lt;p&gt;Consider a 7-DOF robotic manipulator. I want the end effector to follow a predefined trajectory and suppose I care only about the position and not about the orientation. So, the rotation part of the forward kinematics will always be the identity matrix. Now, here is my question. Is it possible for each of the end effector's position coordinates &lt;span class=&quot;math-container&quot;&gt;$ (x,y,z) $&lt;/span&gt; to impose a sinusoidal trajectory of the same frequency ? I mean it like this:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ x(t) = A_1\sin(\omega \pi t) $$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$ y(t) = A_2\sin(\omega \pi t) $$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$ z(t) = A_3\sin(\omega \pi t) $$&lt;/span&gt;&#xA;So, at each time instant the desired cartesian position of the end effector is obtained by the above sinusoids. If this is possible, I assume that I could also find the desired trajectory of each one of the &lt;span class=&quot;math-container&quot;&gt;$7$&lt;/span&gt; joints by solving the inverse kinematics, right ?&lt;/p&gt;&#xA;" OwnerUserId="23342" LastActivityDate="2020-11-13T10:32:12.543" Title="Sinusoidal trajectory of each cartesian coordinate for the end effector" Tags="&lt;inverse-kinematics&gt;&lt;manipulator&gt;&lt;trajectory&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21382" PostTypeId="2" ParentId="21379" CreationDate="2020-11-12T08:18:04.233" Score="1" Body="&lt;p&gt;The short answer is yes, it is possible.&lt;/p&gt;&#xA;&lt;p&gt;The long answer is:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The all xyz coordinates have to be inside workspace boundaries of the robot&lt;/li&gt;&#xA;&lt;li&gt;Solving IK for 7 DOF is a bit harder then any other non redundant structure, you need an additional equation.&lt;/li&gt;&#xA;&lt;li&gt;If you are using an industrial robot arm, with its own programming language, you have to find out how to get a &amp;quot;time signal&amp;quot; or create your own by incrementing a variable in a loop.&lt;/li&gt;&#xA;&lt;li&gt;The frequency of the sinusoids has to be very low, I would start with 0.05Hz and increase gradually to see what happens. Maybe 0.1 if the amplitudes are small.&lt;/li&gt;&#xA;&lt;li&gt;You should avoid exiting the eigenfrequency of the robot.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="21531" LastEditDate="2020-11-13T10:32:12.543" LastActivityDate="2020-11-13T10:32:12.543" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21384" PostTypeId="1" AcceptedAnswerId="21389" CreationDate="2020-11-13T03:52:46.880" Score="0" ViewCount="93" Body="&lt;p&gt;I've tried to create a URDF model of an arm robot similar to the following links using Solidworks to URDF plugin. This plugin creates a hierarchy relation between joint and links in any robot mechanism&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://grabcad.com/library/robot-arm-assembly-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://grabcad.com/library/robot-arm-assembly-1&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;however, I've noticed this robot arm style has a couple of interaction links &amp;amp; joints that is not easy to make simple child-parent tree links.&#xA;I've trying to extract the child-parent link relations according to the following image&#xA;&lt;a href=&quot;https://i.stack.imgur.com/dpTvy.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dpTvy.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;for example, the child-parent relation  of link 1 is not clear for me, however, I made the following child-parent tree according to that image&#xA;I really appreciated any tip that helps me verify my design&#xA;&lt;a href=&quot;https://i.stack.imgur.com/WsD8x.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/WsD8x.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="27414" LastActivityDate="2020-11-16T15:20:19.907" Title="Solidworks to URDF for robot arm with complex joint's" Tags="&lt;robotic-arm&gt;&lt;ros&gt;&lt;inverse-kinematics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21385" PostTypeId="1" CreationDate="2020-11-13T10:22:10.663" Score="0" ViewCount="28" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/P6f6x.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/P6f6x.png&quot; alt=&quot;Illustration of problem&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Given the above constellation, I have to find the orientation of object B in the coordinate system of Object C. The objects A and B are fixed to a certain place and the object C can move in freely in 3D space.&lt;/p&gt;&#xA;&lt;p&gt;I am given the following values:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;position of object B in the coordinate system of object A: &lt;span class=&quot;math-container&quot;&gt;$Pos_B = (x_B, y_B, z_B)^T$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;li&gt;position of object C in the coordinate system of object A: &lt;span class=&quot;math-container&quot;&gt;$Pos_C = (x_C, y_C, z_C)^T$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;li&gt;the orientation of object C in its own coordinate system : &lt;span class=&quot;math-container&quot;&gt;$Rot_C = (\alpha_C, \beta_C, \gamma_C)^T$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;li&gt;A transformation matrix to move from (x,y,z)-coordinates (system A) to (m,n,o)-coordinates (system B): &lt;span class=&quot;math-container&quot;&gt;$T_{xyz}$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Additionally, I can always measure &lt;span class=&quot;math-container&quot;&gt;$Pos_C$&lt;/span&gt; whenever object C moves.&lt;/p&gt;&#xA;&lt;p&gt;Given the above information, does anyone have an idea how to get the orientation of object B?&lt;/p&gt;&#xA;&lt;p&gt;Thanks in advance and if anything is unclear please let me know.&lt;/p&gt;&#xA;" OwnerUserId="27419" LastActivityDate="2020-11-13T10:22:10.663" Title="Finding orientation of object in 3D space" Tags="&lt;orientation&gt;&lt;transforms&gt;&lt;coordinate-system&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="21386" PostTypeId="1" AcceptedAnswerId="21400" CreationDate="2020-11-13T16:34:58.197" Score="0" ViewCount="15" Body="&lt;p&gt;I am currently working on developing a hybrid Indoor Positioning system where images from an overhead camera will be used to identify and track people.&lt;/p&gt;&#xA;&lt;p&gt;I am new to the field of visual tracking and a challenge that I have recently faced was choosing a suitable camera/lens combination.&lt;/p&gt;&#xA;&lt;p&gt;My question is what are the parameters that would help me choose the right camera with the right field of view?&lt;/p&gt;&#xA;&lt;p&gt;To clarify, I installed a raspberry pi camera module v2 on the ceiling and recorded its video output wirelessly. It seems the field of view was too small for looking at the scene effectively. My conclusion is there must be some techniques/equations which can guide me in choosing the horizontal view distance of the camera in relation to its height from the ground floor.&lt;/p&gt;&#xA;" OwnerUserId="27420" LastEditorUserId="10748" LastEditDate="2020-11-18T13:58:21.713" LastActivityDate="2020-11-18T13:58:21.713" Title="What are the parameters that I need to consider when figuring out the horizontal viewing distance of a camera mounted overhead for effective tracking?" Tags="&lt;cameras&gt;&lt;visual-odometry&gt;&lt;identification&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21387" PostTypeId="1" CreationDate="2020-11-14T14:42:03.033" Score="1" ViewCount="35" Body="&lt;p&gt;Say we have an object (e.g., end-effector of a robot) that is defined in a general coordinate system by a Cartesian position and Quaternion.&lt;/p&gt;&#xA;&lt;p&gt;since the Quaternion is with respect to a general and fixed coordinate system, it is rather not intuitive for me how to calculate this Quaternion if the object is rotated locally.&lt;/p&gt;&#xA;&lt;p&gt;That is, assuming a local coordinate system on this object, while keeping the position of it also fixed, I want to calculate a new Quaternion vector if the object is rotated by small angles (α, β, γ, or pitch, yaw, and roll) with respect to this local frame/coordinate-system.&lt;/p&gt;&#xA;" OwnerUserId="26403" LastActivityDate="2021-04-16T21:47:50.080" Title="given current position and Quaternion and target local rotations (α, β, γ, in radians), how to calculate the new Quaternion" Tags="&lt;pose&gt;&lt;geometry&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21388" PostTypeId="2" ParentId="20023" CreationDate="2020-11-15T15:12:42.597" Score="0" Body="&lt;p&gt;I am also working on visual tracking using overhead imagery. What I am proposing to do is training a YOLO V3 object detector on an edge device (camera with a wide-angle lens) to first identify and classify the objects within a scene. Once that is done, the objects can then be tracked within the scene using SORT, DeepSORT, or a similar algorithm.&lt;/p&gt;&#xA;&lt;p&gt;Now regarding navigation, I have experimented with a Genetic Algorithm but for a 2D static environment (will release the code and the graduate report soon). Maybe you could start there, rather than hardcoding the static environment, you may want to train the vision system to build the 2D static map. Once that information is passed into the robot, it may use GA to find the best path and then move across the map. You mentioned a moving obstacle, the vision system can track multiple objects so another idea could be to run the GA multiple times and reoptimize your robot's path as it traverses along a feasible path while avoiding collision with the companion robot. In my humble opinion, it would be best if you fixed the scope of your project first as in literature you would soon see, just this scenario has hundreds of different implementation each with increasing level of difficulty.&lt;/p&gt;&#xA;&lt;p&gt;On a concluding note, have a look at these papers, I hope they come of some use to you.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Overhead View Person Detection Using YOLO -- &lt;a href=&quot;https://doi.org/10.1109/UEMCON47517.2019.8992980&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://doi.org/10.1109/UEMCON47517.2019.8992980&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Implementation of Path Planning using Genetic Algorithms on&#xA;Mobile Robots -- &lt;a href=&quot;https://ieeexplore.ieee.org/document/1688529&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://ieeexplore.ieee.org/document/1688529&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Good luck&lt;/p&gt;&#xA;" OwnerUserId="27420" LastActivityDate="2020-11-15T15:12:42.597" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21389" PostTypeId="2" ParentId="21384" CreationDate="2020-11-16T15:20:19.907" Score="0" Body="&lt;p&gt;You're not going to get a parent-child relationship with this because it's not a kinematic tree. You've got a &lt;a href=&quot;https://en.wikipedia.org/wiki/Four-bar_linkage&quot; rel=&quot;nofollow noreferrer&quot;&gt;four-bar linkage&lt;/a&gt;, which is closed chain linkage. The angle that Link 2 makes with Link 1 depends on the angle at AxisX1 AND the distance from AxisX1 to AxisX3 AND the length of bar1 AND the length of link1 AND the distance from Axis4 to AxisX7.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-11-16T15:20:19.907" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21390" PostTypeId="1" AcceptedAnswerId="21391" CreationDate="2020-11-16T17:14:29.747" Score="2" ViewCount="53" Body="&lt;br&gt;&#xA;I am new to Create2 and I hope someone can help me.&lt;br&gt;&#xA;I have a problem with reading the sensor data or the data I get.&lt;br&gt;&#xA;I have setup a nodeJS application running on a Raspberry PI 3B+. Sending data (e.g: drive commands) is no problem - the robot makes what I want.&lt;br&gt;&#xA;At program start I send the optcodes 128 (start) and 132 (full mode). After that I send optcode 148 with the packageIds to start streaming. This works also very fine.&#xA;I have defined the sensors I need in an array:&#xA;&lt;pre&gt;&lt;code&gt;this.readCommands = [&#xA;        {&#xA;            packetId: 21, //Charging state&#xA;            len: 1,&#xA;            name: 'Charging state',&#xA;            signed: false,&#xA;            value: 0&#xA;        },&#xA;        {&#xA;            packetId: 25, //Battery charge&#xA;            len: 2,&#xA;            name: 'Battery charge',&#xA;            signed: false,&#xA;            value: 0&#xA;        },&#xA;        {&#xA;            packetId: 26, //Battery capacity&#xA;            len: 2,&#xA;            name: 'Battery capacity',&#xA;            signed: false,&#xA;            value: 0&#xA;        },        &#xA;        {&#xA;            packetId: 28, //Cliff left Signal&#xA;            len: 2,&#xA;            name: 'Cliff left Signal',&#xA;            signed: false,&#xA;            value: 0&#xA;        },&#xA;        {&#xA;            packetId: 29, //Cliff front left Signal&#xA;            len: 2,&#xA;            name: 'Cliff font left Signal',&#xA;            signed: false,&#xA;            value: 0&#xA;        },&#xA;        {&#xA;            packetId: 30, //Cliff front right Signal&#xA;            len: 2,&#xA;            name: 'Cliff front right Signal',&#xA;            signed: false,&#xA;            value: 0&#xA;        },&#xA;        {&#xA;            packetId: 31, //Cliff right Signal&#xA;            len: 2,&#xA;            name: 'Cliff right Signal',&#xA;            signed: false,&#xA;            value: 0&#xA;        },&#xA;        {&#xA;            packetId: 46, //Light Bump Left Signal&#xA;            len: 2,&#xA;            name: 'Light Bump Left Signal',&#xA;            signed: false,&#xA;            value: 0&#xA;        },&#xA;        {&#xA;            packetId: 47, //Light Bump Front Left Signal&#xA;            len: 2,&#xA;            name: 'Light Bump Front Left Signal',&#xA;            signed: false,&#xA;            value: 0&#xA;        },&#xA;        {&#xA;            packetId: 48, //Light Bump Center Left Signal&#xA;            len: 2,&#xA;            name: 'Light Bump Center Left Signal',&#xA;            signed: false,&#xA;            value: 0&#xA;        },&#xA;        {&#xA;            packetId: 49, //Light Bump Center Right Signal&#xA;            len: 2,&#xA;            name: 'Light Bump Center Right Signal',&#xA;            signed: false,&#xA;            value: 0&#xA;        },&#xA;        {&#xA;            packetId: 50, //Light Bump Front Right Signal&#xA;            len: 2,&#xA;            name: 'Light Bump Front Right Signal',&#xA;            signed: false,&#xA;            value: 0&#xA;        },&#xA;        {&#xA;            packetId: 51, //Light Bump Right Signal&#xA;            len: 2,&#xA;            name: 'Light Bump Right Signal',&#xA;            signed: false,&#xA;            value: 0&#xA;        }&#xA;];&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;To fill the 148-data:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;const tempArr = [148, this.readCommands.length];&#xA;this.readCommands.forEach(c =&amp;gt; tempArr.push(c.packetId));&#xA;this.writeToPort(Uint8Array.from(tempArr)).subscribe(() =&amp;gt; {&#xA;});&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;When data arrives I collect the data and when I have a full package I try to interpret the data.&#xA;The packets I get seem to be ok (also the checksum is fine)&lt;br&gt;&#xA;Here one as UINT8s:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;19, 38, 21, 0, 25, 9, 253, 26, 10, 137, 28, 10, 46, 29, 10, 77, 30, 10, 86, 31, 10, 83, 46, 0, 31, 47, 0, 65, 48, 0, 59, 49, 0, 22, 50, 0, 24, 51, 0, 6, 50&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;But when I take these values I have data, e.g. for cliff-signals, that are much more greater than 4095 as described in the OI spec. &lt;br&gt;Also I get a battery capacity of 35082 while battery charge is greater than 60000.&lt;br&gt;&#xA;Here's my code for reading the packet:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;if (!this._checkData(data))&#xA;            return;&#xA;let index = 2;&#xA;while (index &amp;lt; data.length-1) {&#xA;    const id = data.readUInt8(index);&#xA;    const cmd = this.readCommands.find(c =&amp;gt; c.packetId === id);&#xA;    if (!cmd) {&#xA;       index++;&#xA;       continue;&#xA;    }&#xA;    switch (cmd.len) {&#xA;        case 1:&#xA;           cmd.value = cmd.signed? data.readInt8(index +1) : data.readUInt8(index+1);&#xA;           index+=2;&#xA;           break;&#xA;        case 2:&#xA;           cmd.value = cmd.signed ? data.readInt16LE(i+1) : data.readUInt16LE(i+1);&#xA;           index+=3;&#xA;           break;&#xA;        }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;What am I doing wrong?&lt;br&gt;&#xA;When I reset the robot I get the message:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Soft reset!&#xA;Roomba by iRobot!&#xA;&#xA;stm32 2016-06-13-1127-L&#xA;&#xA;battery-current-zero&#xA; 254&#xA;&#xA;b&#xA;box vars restored!&#xA;languages: english (0)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Is the firmware too old?&#xA;Can someone help me with that problem?&lt;br&gt;&lt;br&gt;&#xA;Daniel&lt;/p&gt;&#xA;" OwnerUserId="27432" LastActivityDate="2020-11-17T14:50:33.600" Title="Create2: Getting strange data reading sensor data" Tags="&lt;sensors&gt;&lt;irobot-create&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21391" PostTypeId="2" ParentId="21390" CreationDate="2020-11-16T19:40:50.820" Score="1" Body="&lt;p&gt;I think you're swapping the bytes in your multi-byte messages. Considering just the battery charge and capacity, you said:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Here one as UINT8s:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;19, 38, 21, 0, 25, 9, 253, 26, 10, 137, 28, 10, 46, 29, 10, 77, 30, 10, 86, 31, 10, 83, 46, 0, 31, 47, 0, 65, 48, 0, 59, 49, 0, 22, 50, 0, 24, 51, 0, 6, 50&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I get a battery capacity of 35082 while battery charge is greater than 60000&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So, looking at battery charge:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;25, 9, 253&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;That's giving you packet ID 25, which is battery charge, and then two bytes, which in hex are:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;9 = 0x09&#xA;253 = 0xFD&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;You need to merge the two bytes to get the full value; if you put them together as &lt;code&gt;0x09FD&lt;/code&gt; then you get 2,557. If you swap them, then you get &lt;code&gt;0xFD09&lt;/code&gt;, which is 64,777.&lt;/p&gt;&#xA;&lt;p&gt;Similarly, with the battery capacity, you have the response&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;26, 10, 137&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;which would be the hex values &lt;code&gt;10 = 0x0A&lt;/code&gt; and &lt;code&gt;137 = 0x89&lt;/code&gt;. You can join them as &lt;code&gt;0x0A89&lt;/code&gt; and get 2,697 or you can swap them and join as &lt;code&gt;0x890A&lt;/code&gt; and get 35,082.&lt;/p&gt;&#xA;&lt;p&gt;A test like this, where you try interpreting the data both ways, can be an easy way to check if you're doing it correctly - with the bytes swapped, your charge is greater than your capacity, which doesn't make sense. When done correctly, though, it looks like the battery capacity is about 2.7 Ah and the current charge is about 2.6 Ah - looks good!&lt;/p&gt;&#xA;&lt;p&gt;It took me a while to find which way it should be interpreted in the &lt;a href=&quot;https://cdn-shop.adafruit.com/datasheets/create_2_Open_Interface_Spec.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Open Interface specification&lt;/a&gt; (warning: direct download). I didn't see where it said anything about byte order until the &amp;quot;Quick Reference&amp;quot; section at the end of the spec, where it states&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Some of the sensor data values are 16 bit values. These values are sent as two bytes, high byte first.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;That's telling you that the first byte is the &amp;quot;most significant&amp;quot; byte and the second byte is the &amp;quot;least significant&amp;quot; byte, which is exactly how we're treating the data in the correct interpretation.&lt;/p&gt;&#xA;&lt;p&gt;Hope this helps!&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-11-16T19:40:50.820" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21392" PostTypeId="1" AcceptedAnswerId="21393" CreationDate="2020-11-17T11:06:19.323" Score="0" ViewCount="28" Body="&lt;p&gt;In my system, I have two frames.&#xA;I want to convert my velocities(x,y,z,r,p,y) in frame 1 to be represented in frame 2.&#xA;Does multiply the linear component and the angular component with the rotation matrix is correct?&lt;/p&gt;&#xA;" OwnerUserId="24610" LastActivityDate="2020-11-17T11:34:13.387" Title="velocities transformations between frames" Tags="&lt;transformation&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21393" PostTypeId="2" ParentId="21392" CreationDate="2020-11-17T11:34:13.387" Score="1" Body="&lt;p&gt;Yes it is. The rotation matrix of the coordinates system B relative to the coordinate system A or its inverse backwards, A relative to B.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-11-17T11:34:13.387" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21396" PostTypeId="2" ParentId="21128" CreationDate="2020-11-17T15:03:48.170" Score="1" Body="&lt;p&gt;I think I found the problem that was causing the errors.&#xA;I was sending serial commands to the create 2 via Arduino. To make things easier I was using the create2 libary that summarizes commands (&lt;a href=&quot;https://github.com/brinnLabs/Create2&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/brinnLabs/Create2&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;It looks like the freezing of the sound results from some bugs in that libary (maybe the calculation of the songlength). And also the changes in driving speed and the problem of not driving straight seem to disappear when i send all the commands directly (up to now they didn`t appear again).&lt;/p&gt;&#xA;&lt;p&gt;With the create2 libary I used serial communication. Now I´m using soft serial. Not sure if that was also part of the problem.&lt;/p&gt;&#xA;&lt;p&gt;I really liked the create2 libary, because it seemd to be the best libary available for create2 that allows easy control for all functions. But be sure to check that piece of your setup when problems occure.&lt;/p&gt;&#xA;" OwnerUserId="27074" LastActivityDate="2020-11-17T15:03:48.170" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21397" PostTypeId="2" ParentId="21387" CreationDate="2020-11-17T19:58:38.673" Score="0" Body="&lt;p&gt;It is often useful to create a 2D example and use rigid-body transforms (i.e., &lt;span class=&quot;math-container&quot;&gt;$T\in\text{SE}(2)$&lt;/span&gt;, where &lt;span class=&quot;math-container&quot;&gt;${\small T=\begin{bmatrix}R&amp;amp;t\\0&amp;amp;1\end{bmatrix}}$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$R\in\text{SO}(2),t\in\mathbb{R}^2$&lt;/span&gt;). In this way, the position and rotation are compactly encoded in a single element.&lt;/p&gt;&#xA;&lt;p&gt;When working through these types of problems, it is important to clearly define notation and coordinate frames. For example, here we will write &lt;span class=&quot;math-container&quot;&gt;$T^a_b$&lt;/span&gt; to describe the coordinate frame &lt;span class=&quot;math-container&quot;&gt;$\mathcal{F}^b$&lt;/span&gt; with respect to &lt;span class=&quot;math-container&quot;&gt;$\mathcal{F}^a$&lt;/span&gt;. In other words, &lt;span class=&quot;math-container&quot;&gt;$T^a_b$&lt;/span&gt; transforms data in &lt;span class=&quot;math-container&quot;&gt;$b$&lt;/span&gt; and expresses it in &lt;span class=&quot;math-container&quot;&gt;$a$&lt;/span&gt; (e.g., see more &lt;a href=&quot;https://robotics.stackexchange.com/a/16555/14272&quot;&gt;here&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;In the following diagram, I have drawn the world frame axis &lt;span class=&quot;math-container&quot;&gt;$\mathcal{F}^W$&lt;/span&gt; and an object that has a position and orientation with respect to that world frame (i.e., &lt;span class=&quot;math-container&quot;&gt;$T^W_b$&lt;/span&gt;). This object has &lt;strong&gt;its own&lt;/strong&gt; coordinate frame &lt;span class=&quot;math-container&quot;&gt;$\mathcal{F}^b$&lt;/span&gt;. Now, a further transformation &lt;span class=&quot;math-container&quot;&gt;$T^b_{b'}$&lt;/span&gt; occurs, where it just so happens that there was no translation. This final coordinate body position and orientation can be expressed in terms of the world frame by composition as&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;T^W_{b'} = T^W_b T^b_{b'}.&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Now, to answer your question more concretely, we can consider just the unit quaternion encoding the orientation of &lt;span class=&quot;math-container&quot;&gt;$\mathcal{F}^{b'}$&lt;/span&gt; w.r.t &lt;span class=&quot;math-container&quot;&gt;$\mathcal{F}^W$&lt;/span&gt;, that is, for &lt;span class=&quot;math-container&quot;&gt;$q\in S^3$&lt;/span&gt;,&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;q^W_{b'} = q^W_b q^b_{b'}.&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;In your setup, it sounds like you have &lt;span class=&quot;math-container&quot;&gt;$q^W_b$&lt;/span&gt; and some Euler angles describing the rotation &lt;span class=&quot;math-container&quot;&gt;$q^b_{b'}$&lt;/span&gt;. Given everything above, your question seems to become &amp;quot;how do I convert Euler angles to a quaternion,&amp;quot; for which many answers and software packages exist (&lt;a href=&quot;https://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia&lt;/a&gt;). Please take care to know if your Euler angles are expressed as intrinsic or extrinsic and the correct rotation order. I recommend using something like MATLAB's &lt;code&gt;eul2quat&lt;/code&gt; or, in Python, &lt;code&gt;transformations.py&lt;/code&gt; (embedded in &lt;a href=&quot;http://docs.ros.org/en/melodic/api/tf/html/python/transformations.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;ROS as &lt;code&gt;tf.transformations&lt;/code&gt;&lt;/a&gt;) to verify.&lt;/p&gt;&#xA;&#xA;&lt;img src=&quot;https://i.stack.imgur.com/wc6Tm.png&quot; width=&quot;400&quot; alt=&quot;coordinate transformations from world to body to body'&quot; /&gt;&#xA;&lt;/p&gt;&#xA;" OwnerUserId="14272" LastActivityDate="2020-11-17T19:58:38.673" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21398" PostTypeId="1" AcceptedAnswerId="21399" CreationDate="2020-11-17T21:38:44.337" Score="0" ViewCount="146" Body="&lt;p&gt;I am using ROS2 real-time (still a lot to learn) to implement the various control element of my robot : SLAM, path planning, controller, etc...&lt;/p&gt;&#xA;&lt;p&gt;For the first step of prototyping we would like to build a system with only the actuators : A PC will run ROS2 with the controller, an external power supply for the power. Our idea is to have the computer (through ROS2) send the torque control command and receive the sensor info from our actuators.&lt;/p&gt;&#xA;&lt;p&gt;Our actuators have built in drivers with a CAN Bus interface :&#xA;&lt;strong&gt;What are our options to connect the computer running ROS2 to the drivers of the actuators ?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Since our controller must run real-time, I imagine the bandwidth of the Computer/Actuator interface is a critical factor.&lt;/p&gt;&#xA;" OwnerUserId="23605" LastActivityDate="2020-11-21T23:21:04.680" Title="Is it possible to use ROS2 real-time on a computer and connect to the robot actuator using a CAN bus?" Tags="&lt;ros&gt;&lt;real-time&gt;&lt;can&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21399" PostTypeId="2" ParentId="21398" CreationDate="2020-11-18T05:52:30.147" Score="1" Body="&lt;p&gt;First, you should define what real-time requirements do you have, not necessarily from a CAN-Bus, but from the application perspective. What is your cycle time, what latency can you accept, what jitter is acceptable by your application.&lt;/p&gt;&#xA;&lt;p&gt;If your requirements can be fulfilled by a PC with a CAN-Open extension, then you can use a ROS CanOpen package (like &lt;a href=&quot;http://wiki.ros.org/ros_canopen?distro=noetic&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt;) to act as a CAN-Open master and &amp;quot;bridge&amp;quot; the information on ROS and the CAM-Open network. If not, and you need faster cycle time in your control system, then what ROS on a PC with CAN extension can provide, then you can look at running parts of ROS system on a single board computer or to using a different solution (e.g. decoupling your controller loop from ROS).&lt;/p&gt;&#xA;&lt;p&gt;I am not sure what current CAN-Open extensions are supported, but USB extensions compatible with the PCAN inerface (e.g. PEAK CAN USB converters) are definitely supported. USB obviously will add more latency then a PCI CAN card would.&lt;/p&gt;&#xA;&lt;p&gt;If you are planning to send torque command form ROS, it is probably not the right approach. ROS should at best be included in the position loop, not in the torque loop.&lt;/p&gt;&#xA;&lt;p&gt;.....&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="19143" LastEditDate="2020-11-21T23:21:04.680" LastActivityDate="2020-11-21T23:21:04.680" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21400" PostTypeId="2" ParentId="21386" CreationDate="2020-11-18T13:53:15.547" Score="0" Body="&lt;p&gt;A field of view of a camera is generally measured in degrees. If you connect the imaginary focus point of the lens with two sides of the camera sensor, in case of &lt;strong&gt;rectilinear lenses&lt;/strong&gt;, you get your field of view. Obviously you can do that in the horizontal and in the vertical direction, you get practically two different fields of view. Usually the wider one is considered the field of view, and the other one is linked to the previous one by the aspect ration of the sensor (e.g. 16:9).&lt;/p&gt;&#xA;&lt;p&gt;So the physical size of the imager and the focus length are what influence the field of view.&lt;/p&gt;&#xA;&lt;p&gt;Den pending on the distance resolution might be important. Given a flat surface you are filming, perpendicular to the camera's optical axis , given the field of view, the physical size of the sensor and its resolution, using simple geometry, it can ba calculates how many pixels of the sensor will be used to register 1mm on the surface. This will be important to see if e.g. a QR code can be read by the camera or not.&lt;/p&gt;&#xA;&lt;p&gt;For fisheye lenses, the calculations are not this simple, but are analogue. &lt;a href=&quot;https://en.wikipedia.org/wiki/Fisheye_lens#Focal_length&quot; rel=&quot;nofollow noreferrer&quot;&gt;This page&lt;/a&gt; describes how fisheye lenses are modelled. For a Field of View, similar as in the rectilinear case, the angle between the outermost rays hitting the sensor have to be calculated.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/cJpQV.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/cJpQV.png&quot; alt=&quot;Camera FoV&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-11-18T13:53:15.547" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21401" PostTypeId="1" CreationDate="2020-11-18T19:59:29.723" Score="0" ViewCount="56" Body="&lt;p&gt;I have a Velodyne and camera that both have transformations specified relative to the origin of the robot.&lt;/p&gt;&#xA;&lt;p&gt;The original transformations were specified as yaw, roll, pitch, x, y, z. I wrote a script to convert these to extrinsic matrices (my end goal is to have an extrinsic matrix describing the camera's position relative to the Velodyne).&lt;/p&gt;&#xA;&lt;p&gt;Figuring out the relative transformation of the camera to the Velodyne is easy for translation - I just calculate the offsets. However, I'm not sure how to approach making the camera rotation relative to the Velodyne, since I believe the translation will also need to be taken into account.&lt;/p&gt;&#xA;&lt;p&gt;Here is the original ROS transform:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    &amp;lt;node pkg=&amp;quot;tf&amp;quot; type=&amp;quot;static_transform_publisher&amp;quot; &#xA;        respawn=&amp;quot;true&amp;quot; &#xA;        name=&amp;quot;camera_static_transform_publisher&amp;quot; &#xA;        args=&amp;quot;0.5080 0.0 0.1778 0 0.05 0 base_link camera 100&amp;quot;&#xA;    /&amp;gt;&#xA;&#xA;    &amp;lt;node pkg=&amp;quot;tf&amp;quot; type=&amp;quot;static_transform_publisher&amp;quot; &#xA;        respawn=&amp;quot;true&amp;quot; &#xA;        name=&amp;quot;velodyne_static_transform_publisher&amp;quot; &#xA;        args=&amp;quot;0.4445 0.0 0.09525 0.0 0.06981 0.0 base_link velodyne 100&amp;quot;&#xA;    /&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Here are the extrinsic matrices I calculated:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    Camera extrinsic relative to base_link: &#xA;    [[ 0.99875026  0.          0.04997917  0.508     ]&#xA;    [ 0.          1.          0.          0.        ]&#xA;    [-0.04997917  0.          0.99875026  0.1778    ]]&#xA;&#xA;    Velodyne extrinsic  relative to base_link: &#xA;    [[ 0.99756427  0.          0.06975331  0.4445    ]&#xA;    [ 0.          1.          0.          0.        ]&#xA;    [-0.06975331  0.          0.99756427  0.09525   ]]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Research:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I found &lt;a href=&quot;https://stackoverflow.com/a/8693964/6942666&quot;&gt;this&lt;/a&gt; post that mentioned needing to do the inverse of one transformation * the other transformation, but not sure if that works.&lt;/li&gt;&#xA;&lt;li&gt;I also found &lt;a href=&quot;https://stackoverflow.com/a/55169091/6942666&quot;&gt;this&lt;/a&gt; post that also seems to invert the first transformation and multiply it by the second. I will try this out.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;Edit: Here is my attempt&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Here is my attempt based on the second post I linked. I'm not sure this is correct because the translation of &lt;code&gt;camera_to_velodyne&lt;/code&gt; doesn't match what you would get if you just calculated the offsets between the &lt;code&gt;camera&lt;/code&gt; and &lt;code&gt;velodyne&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;def get_homogeneous_transformation(rotation, translation):&#xA;    &amp;quot;&amp;quot;&amp;quot;&#xA;    Parameters:&#xA;    - rotation: a 3x3 rotation np array&#xA;    - translation: a 3x1 translation np array&#xA;    &amp;quot;&amp;quot;&amp;quot;&#xA;    homogeneous = np.zeros((4, 4))&#xA;    homogeneous[-1][-1] = 1&#xA;    homogeneous[:3, :3] = rotation&#xA;    homogeneous[:3, -1:] = translation&#xA;    return homogeneous&#xA;&#xA;def get_relative_transformation(a_to_base, b_to_base):&#xA;    &amp;quot;&amp;quot;&amp;quot;&#xA;    Finds the relative transformation from a to b given transformations for both &#xA;    relative to base_link.&#xA;&#xA;    See: https://stackoverflow.com/a/55169091/6942666 for more details&#xA;&#xA;    Parameters:&#xA;    - a_to_base: 4x4 np.array representing homoegenous transformation of a to base_link&#xA;    - b_to_base: 4x4 np.array representing homoegenous transformation of b to base_link&#xA;    &amp;quot;&amp;quot;&amp;quot;&#xA;&#xA;    base_to_a = np.linalg.inv(a_to_base)&#xA;    return base_to_a @ b_to_base&#xA;&#xA;if __name__ == &amp;quot;__main__&amp;quot;:&#xA;    &amp;quot;&amp;quot;&amp;quot;&#xA;    &amp;lt;node pkg=&amp;quot;tf&amp;quot; type=&amp;quot;static_transform_publisher&amp;quot; &#xA;        respawn=&amp;quot;true&amp;quot; &#xA;        name=&amp;quot;camera_static_transform_publisher&amp;quot; &#xA;        args=&amp;quot;0.5080 0.0 0.1778 0 0.05 0 base_link camera 100&amp;quot;&#xA;    /&amp;gt;&#xA;&#xA;    &amp;lt;node pkg=&amp;quot;tf&amp;quot; type=&amp;quot;static_transform_publisher&amp;quot; &#xA;        respawn=&amp;quot;true&amp;quot; &#xA;        name=&amp;quot;velodyne_static_transform_publisher&amp;quot; &#xA;        args=&amp;quot;0.4445 0.0 0.09525 0.0 0.06981 0.0 base_link velodyne 100&amp;quot;&#xA;    /&amp;gt;&#xA;&#xA;    Camera static transform:&#xA;    [[ 0.99875026  0.          0.04997917  0.508     ]&#xA;    [ 0.          1.          0.          0.        ]&#xA;    [-0.04997917  0.          0.99875026  0.1778    ]&#xA;    [ 0.          0.          0.          1.        ]]&#xA;&#xA;    Velodyne static transform:&#xA;    [[ 0.99756427  0.          0.06975331  0.4445    ]&#xA;    [ 0.          1.          0.          0.        ]&#xA;    [-0.06975331  0.          0.99756427  0.09525   ]&#xA;    [ 0.          0.          0.          1.        ]]&#xA;&#xA;    Camera relative to Velodyne&#xA;    [[ 0.99980379  0.          0.0198087  -0.05929486]&#xA;    [ 0.          1.          0.          0.        ]&#xA;    [-0.0198087   0.          0.99980379 -0.08562051]&#xA;    [ 0.          0.          0.          1.        ]]&#xA;    &amp;quot;&amp;quot;&amp;quot;&#xA;&#xA;    print(&amp;quot;Camera static transform: &amp;quot;)&#xA;    camera_to_base = static_transform_to_extrinsic([0.5080, 0.0, 0.1778, 0, 0.05, 0])&#xA;    print(camera_to_base)&#xA;&#xA;    print(&amp;quot;Velodyne static transform: &amp;quot;)&#xA;    velodyne_to_base = static_transform_to_extrinsic([0.4445, 0.0, 0.09525, 0.0, 0.06981, 0.0])&#xA;    print(velodyne_to_base)&#xA;&#xA;    print(&amp;quot;Camera relative to Velodyne&amp;quot;)&#xA;    camera_to_velodyne = get_relative_transformation(&#xA;        camera_to_base, velodyne_to_base)&#xA;    print(camera_to_velodyne)&#xA;&#xA;&lt;span class=&quot;math-container&quot;&gt;```&lt;/span&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="27444" LastEditorUserId="27444" LastEditDate="2020-11-18T20:40:22.987" LastActivityDate="2021-04-22T21:21:22.013" Title="How to make two frames relative to each other" Tags="&lt;ros&gt;&lt;rotation&gt;&lt;frame&gt;&lt;transforms&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="21402" PostTypeId="1" AcceptedAnswerId="21404" CreationDate="2020-11-20T07:36:45.040" Score="1" ViewCount="28" Body="&lt;p&gt;I was looking up on the Curiosity Mars Rover and noticed that the steering appears to be driven by a (geared) stepper:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Ab0Bs.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Ab0Bs.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I presume the drive contains a worm gear to reduce power consumption of the stepper motor. However, because there's no shock absorber visible, would the gears risk being damaged by shocks?&lt;/p&gt;&#xA;" OwnerUserId="11489" LastActivityDate="2020-11-20T13:20:55.127" Title="Motorised steering without shock absorber?" Tags="&lt;wheeled-robot&gt;&lt;mechanism&gt;&lt;gearing&gt;&lt;steering&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21403" PostTypeId="1" AcceptedAnswerId="21405" CreationDate="2020-11-20T12:06:44.813" Score="2" ViewCount="188" Body="&lt;p&gt;I practiced various examples of block algebra and I came across this example where I have to reduce the block diagram. The problem now is that I have there successively set branching points and sum points. How can I get rid of them?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Ht3aR.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Ht3aR.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Here is how I came to this block diagram:&lt;/p&gt;&#xA;&lt;h2&gt;Starting point and first step:&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/RE8TM.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/RE8TM.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2&gt;Second step:&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/f0dRG.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/f0dRG.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2&gt;Third step:&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ggQOa.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ggQOa.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2&gt;Final block diagram:&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Vw6Ip.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Vw6Ip.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Don't know what to do now... I thought to merge (G1G2) with (G5/G2 +1) and (G3G4) but again there isn't so much improvement.&lt;/p&gt;&#xA;" OwnerUserId="27450" LastActivityDate="2020-11-20T14:18:18.377" Title="How can I solve this block diagram problem?" Tags="&lt;control&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21404" PostTypeId="2" ParentId="21402" CreationDate="2020-11-20T13:20:55.127" Score="1" Body="&lt;p&gt;My bet is on a PMSM not a stepper, but that cannot be determined from an image. A non-back-driveable mechanism is advantageous, and can reduce the steady state power consumption of a system. It does not necessarily have to be a worm-gear.&lt;/p&gt;&#xA;&lt;p&gt;Regarding shock-absorbers..well a few things have to be considered:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Shock absorbers are normally tuned to filter out specific frequencies, which are correlated with the terrain they are designed for and their intended speed. The intended speed of the mars rover is 1cm/s, according to &lt;a href=&quot;https://mars.nasa.gov/mer/mission/rover/wheels-and-legs/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Nasa&lt;/a&gt;. (Maybe it is a different rover..but I expect no 100x change from rover to rover). Common shock absorbers (spring damper system in cars) are for a very different use case. One could argue that not much vibration can be excited at those speeds, so not much shock to absorb...&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The &lt;a href=&quot;https://mars.nasa.gov/resources/6327/scarecrow-rover-wheel-closeup/&quot; rel=&quot;nofollow noreferrer&quot;&gt;wheel spikes&lt;/a&gt; have an interesting design. They probably act as a very simple shock absorber (probably more a spring, then a damper..). As they the closes to the wheel, the unsprung mass is only the wheel itself. It is always good to have minimum unsprung mass.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The rover overall has a &lt;a href=&quot;https://en.wikipedia.org/wiki/Rocker-bogie&quot; rel=&quot;nofollow noreferrer&quot;&gt;rocker-bogie&lt;/a&gt; type suspension system. This might include some damping effect, but that is not clear from the pictures.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-11-20T13:20:55.127" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21405" PostTypeId="2" ParentId="21403" CreationDate="2020-11-20T14:18:18.377" Score="4" Body="&lt;p&gt;I'm not going to write in the answers, but if I redraw your stuff just a little:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/IG34s.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/IG34s.png&quot; alt=&quot;Starting redrawn&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;One of the things that might make it easier is to duplicate some of your boxes. Consider doubling up the H2*G2*G3 section:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/x7LAa.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/x7LAa.jpg&quot; alt=&quot;Doubling up H2G2G3&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;If I redraw THAT just a little then it should show you how to clear up the middle section:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/vpPL2.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vpPL2.jpg&quot; alt=&quot;Resolve the middle&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I'll just call whatever the middle resolves to &amp;quot;A&amp;quot; so I can keep going without needing to do the work:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/1GKWd.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1GKWd.png&quot; alt=&quot;Middle section resolved&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The last tricky business is that summing junction in the middle of that feedback line. What I'd like to is to push the summing junction to the left so it can be with the second summing junction (from the start). Then you can split each branch of the summation into its own feedback line. To do that, first get that H1 out of the way:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/d9Wpd.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/d9Wpd.png&quot; alt=&quot;Moving H1 behind the summing junction&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Now distribute the negative from the second summing junction and reorganize:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/798E8.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/798E8.png&quot; alt=&quot;Cleaning up the summing junction&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;And then finally split the group of summing junctions up into their own lines, which makes the feedback branches clearer.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/JuOtG.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JuOtG.png&quot; alt=&quot;Last difficult reduction&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Now you just do like you'd do, resolve the feedback loops from inner to outer and you should have the reduction.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-11-20T14:18:18.377" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21407" PostTypeId="1" CreationDate="2020-11-22T11:11:48.267" Score="1" ViewCount="45" Body="&lt;p&gt;I am using pinocchio library for a custom 6 axis robot arm (all joints are revolute).&#xA;I implemented efficient inverse-kinematics solving as proposed in Pinocchio library tutorial example (&lt;a href=&quot;https://gepettoweb.laas.fr/doc/stack-of-tasks/pinocchio/master/doxygen-html/md_doc_b-examples_i-inverse-kinematics.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://gepettoweb.laas.fr/doc/stack-of-tasks/pinocchio/master/doxygen-html/md_doc_b-examples_i-inverse-kinematics.html&lt;/a&gt;). I modified slightly the example to have robot model built from URDF with all joints definitions including Lower/Upper limits.&lt;/p&gt;&#xA;&lt;p&gt;So far, I have two problems:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;This cyclic solver implementation does not consider joints limits as some convergences results succeeds with out of range angle for some joints. Is there a solution to integrate joints limits in this cyclic solver?&lt;/li&gt;&#xA;&lt;li&gt;This example merges Trans &amp;amp; rotation error (as explained in text). Did someone experience a modification of algo to have independant Position &amp;amp; Orientation errors in convergence process?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Many thanks,&lt;/p&gt;&#xA;&lt;p&gt;Richard&lt;/p&gt;&#xA;" OwnerUserId="27460" LastActivityDate="2020-11-22T11:11:48.267" Title="Pinocchio Lib and Inverse-kinematics" Tags="&lt;inverse-kinematics&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21408" PostTypeId="1" AcceptedAnswerId="21410" CreationDate="2020-11-22T17:19:12.313" Score="1" ViewCount="34" Body="&lt;p&gt;I have a 6-dimensional vector(x,y,z,roll,pitch,yaw) in frame 1, I want to convert it to frame 2 in order to represent the value in frame 2.&#xA;I know that p2=R12*p1 where p1 is the (xyz) in frame 1.&#xA;The question is how I convert the roll, pitch yaw to the other frame?&lt;/p&gt;&#xA;" OwnerUserId="24610" LastActivityDate="2020-11-23T01:53:24.567" Title="orientation transformation" Tags="&lt;transformation&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21409" PostTypeId="1" CreationDate="2020-11-22T17:42:40.853" Score="0" ViewCount="24" Body="&lt;p&gt;Given a quadruped standing on all fours, or trotting with 2 legs down/2 up, I've seen a few methods of computing inverse dynamics. All derive from centroidal momentum physics, and I think all distill down to the same conservation of linear and angular accelerations, but the formulations vary significantly. A common equation of motion,&#xA;: &lt;a href=&quot;https://i.stack.imgur.com/9hOeS.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9hOeS.png&quot; alt=&quot; &quot; /&gt;&lt;/a&gt;, can be manipulated to solve for tau.&lt;br /&gt;&#xA;Another form directly utilizes summation of torques from the ground reaction forces and linear/angular forces about the center of mass and ends up with a set of underdetermined set of linear (I hope) equations that are solved as a QP optimization problem with constraints dependent up frictional forces and feet on the ground.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gUnoO.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gUnoO.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;And another approach is Recursive Newton-Euler modified for a floating-base robot.&lt;/p&gt;&#xA;&lt;p&gt;While all seem to give either forces multiplied by the Jacobian for torque or torque directly, I can understand systems of linear equations, though the constraints can be complex.  Reading Featherstone's articles it seems that RNEA produces torque results without complexities of other approaches, but there must be limitations to RNEA, otherwise why resort to optimization approaches.  My goal is to calculate either torque for a PD controller or for better tracking, feed-forward torque control, but am not sure of the better approaches and their potential limitations.&lt;/p&gt;&#xA;" OwnerUserId="27464" LastActivityDate="2020-11-22T17:42:40.853" Title="What are the best approaches and limitations for calculating the Inverse dynamics for a floating base quadruped?" Tags="&lt;mobile-robot&gt;&lt;dynamics&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21410" PostTypeId="2" ParentId="21408" CreationDate="2020-11-23T01:53:24.567" Score="2" Body="&lt;p&gt;Your 6d vector can also be considered a frame. Lets call it the frame of the object. Convert your 6d vector to something easier to work with like Homogeneous Transforms. Another alternative is Quaternion + Translation, but homogeneous matrices are easier.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Homogeneous Transform:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;A 4x4 matrix that looks like:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$T=\begin{bmatrix} &#xA;R &amp;amp; t \\&#xA;0_3 &amp;amp; 1&#xA;\end{bmatrix}$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Here &lt;span class=&quot;math-container&quot;&gt;$R$&lt;/span&gt; is a 3x3 rotation matrix. &lt;span class=&quot;math-container&quot;&gt;$t$&lt;/span&gt; is your translation vector (x,y,z). &lt;span class=&quot;math-container&quot;&gt;$0_3$&lt;/span&gt; is just a row vector of all 0s.&lt;/p&gt;&#xA;&lt;p&gt;To get the rotation matrix you have to convert your euler angles to the rotation matrix form. You can google that or check out the equation on the &lt;a href=&quot;https://en.wikipedia.org/wiki/Euler_angles&quot; rel=&quot;nofollow noreferrer&quot;&gt;wikipedia page&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Your frames 1,2 should also be stored in the homogeneous matrix form. We now can just multiply the various transforms together to get the end result. If you get confused it sometimes helps to draw it out.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/inf4z.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/inf4z.png&quot; alt=&quot;Drawing of Transforms&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;By convention &lt;span class=&quot;math-container&quot;&gt;$T_{a,b}$&lt;/span&gt; means the Transform of frame &lt;span class=&quot;math-container&quot;&gt;$b$&lt;/span&gt; in frame &lt;span class=&quot;math-container&quot;&gt;$a$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I have labeled the pieces of information we have. For instance we have the Transform of the object in frame 1( &lt;span class=&quot;math-container&quot;&gt;$T_{1,o}$&lt;/span&gt; ). We want to find the question mark &lt;span class=&quot;math-container&quot;&gt;$?$&lt;/span&gt;. To do that just trace the path of the arrows. If 2 separate paths start on the same frame and end on the same frame then it means they are equivalent. So for this example the &lt;span class=&quot;math-container&quot;&gt;$?$&lt;/span&gt; transform will be the same as the path using &lt;span class=&quot;math-container&quot;&gt;$T_{1,2}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$T_{1,o}$&lt;/span&gt;. If we ever end up going against the arrow direction then it means we need to inverse that Transform.&lt;/p&gt;&#xA;&lt;p&gt;All that being said your final equation is:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$? = T_{2,o} = T_{1,2}^{-1}*T_{1,o} $&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;If you want your 6d vector form again then I would just convert the rotation matrix back to euler angles.&lt;/p&gt;&#xA;" OwnerUserId="15265" LastActivityDate="2020-11-23T01:53:24.567" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21412" PostTypeId="1" AcceptedAnswerId="21413" CreationDate="2020-11-23T05:58:22.763" Score="1" ViewCount="211" Body="&lt;p&gt;I'm a newbie on robotics, and currently, I'm working on a project to make an autonomous robot that can mapping the surrounding environment and decide the shortest route towards the goal while avoiding the obstacles along the way. The sensor that I used for this project is RPLidar A1M8. I'm working using Ubuntu Mate 18.04 on my Raspberry Pi, but right now I'm testing it using my computer.&lt;/p&gt;&#xA;&lt;p&gt;I use the hector_slam for mapping, and everything works fine. After that, I try to clone the hector_navigation from &lt;a href=&quot;https://github.com/tu-darmstadt-ros-pkg/hector_navigation&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/tu-darmstadt-ros-pkg/hector_navigation&lt;/a&gt; on my catkin workspace, but there's the problem began. When I try to catkin_make, the system found an error in the CMakeLists file. The error I'm getting is below&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;-- +++ processing catkin package: 'hector_gps_calibration' -- ==&amp;gt; add_subdirectory(hector_navigation/hector_gps_calibration) -- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy CMake Error at /home/foriansyah/catkin_ws/devel/share/ceres_catkin/cmake/ceres_catkinConfig.cmake:173 (message): Project 'hector_gps_calibration' tried to find library 'ceres'. The library is neither a target nor built/installed properly. Did you compile project 'ceres_catkin'? Did you find_package() it before the subdirectory containing its code is included? Call Stack (most recent call first): /opt/ros/melodic/share/catkin/cmake/catkinConfig.cmake:76 (find_package) hector_navigation/hector_gps_calibration/CMakeLists.txt:10 (find_package)&#xA;&#xA;-- Configuring incomplete, errors occurred! See also &amp;quot;/home/foriansyah/catkin_ws/build/CMakeFiles/CMakeOutput.log&amp;quot;. See also &amp;quot;/home/foriansyah/catkin_ws/build/CMakeFiles/CMakeError.log&amp;quot;. Makefile:4632: recipe for target 'cmake_check_build_system' failed make: * [cmake_check_build_system] Error 1 Invoking &amp;quot;make cmake_check_build_system&amp;quot; failed&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;What should I do about this? Any references that maybe I can use for this problem?&#xA;Thank in advance.&lt;/p&gt;&#xA;" OwnerUserId="27469" LastEditorUserId="110" LastEditDate="2020-11-24T19:57:43.973" LastActivityDate="2020-11-27T05:50:25.500" Title="Hector_navigaton on ROS Melodic error" Tags="&lt;mobile-robot&gt;&lt;ros&gt;&lt;slam&gt;&lt;navigation&gt;&lt;mapping&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21413" PostTypeId="2" ParentId="21412" CreationDate="2020-11-23T08:57:50.007" Score="1" Body="&lt;p&gt;Actually, the HECTOR_NAVIGATION package depends on other packages and one of them is ceres_catkin (&lt;a href=&quot;https://github.com/tu-darmstadt-ros-pkg/ceres_catkin&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/tu-darmstadt-ros-pkg/ceres_catkin&lt;/a&gt;) which you need to clone and build in your catkin workspace. However, this ceres_catkin further depends on catkin_simple (&lt;a href=&quot;https://github.com/catkin/catkin_simple&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/catkin/catkin_simple&lt;/a&gt;), glog_catkin (&lt;a href=&quot;https://github.com/ethz-asl/glog_catkin&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/ethz-asl/glog_catkin&lt;/a&gt;), gflags(&lt;a href=&quot;https://github.com/gflags/gflags/blob/master/INSTALL.md&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/gflags/gflags/blob/master/INSTALL.md&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;After you clone all these in your workspace, I would recommend to run,&#xA;&lt;code&gt;&amp;gt;&amp;gt;sudo apt-get install python-catkin-tools python-rosdep&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;and then from your catkin workspace&#xA;&lt;code&gt;&amp;gt;&amp;gt; rosdep install -r -y --from-paths src --ignore-src&lt;/code&gt;&#xA;that will install all the missing dependencies of your catkin workspace packages.&lt;/p&gt;&#xA;&lt;p&gt;Once you are done with the above, then try to run &lt;code&gt;catkin_make&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="21747" LastActivityDate="2020-11-23T08:57:50.007" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21414" PostTypeId="2" ParentId="21401" CreationDate="2020-11-23T20:20:32.177" Score="0" Body="&lt;p&gt;So it seems like what you want to perform is camera-lidar extrinsic calibration. Seems like you have the translations figured out but not the rotation?&lt;/p&gt;&#xA;&lt;p&gt;You can use one of the already available packages that do this for you. Like Autoware's calibration tool &lt;a href=&quot;https://autoware.readthedocs.io/en/feature-documentation_rtd/DevelopersGuide/PackagesAPI/sensing/autoware_camera_lidar_calibrator.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;autoware_camera_lidar_calibration&lt;/a&gt;. This tool will let you select points in an image and corresponding points in the point-cloud that will be used to calculate a transform between the two and a new frame can be published&lt;/p&gt;&#xA;" OwnerUserId="27064" LastActivityDate="2020-11-23T20:20:32.177" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21415" PostTypeId="1" CreationDate="2020-11-24T07:09:57.430" Score="0" ViewCount="24" Body="&lt;p&gt;I am new to Robotics and transformation topics. I need help in understanding and solving the below problem.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;I have data (surrounding obstacle position, orientation and velocity) which are in sensor frame. Basically it gives the relative speed of the surrounding obstacles (v_rx, v_ry)&lt;/li&gt;&#xA;&lt;li&gt;I have converted the obstacle position and orientation to UTM coordinates (WCS) using Translation and Rotation matrix.&lt;/li&gt;&#xA;&lt;li&gt;How the velocity can be converted to WCS if the received data (Vx, Vy, Vz) is in sensor frame?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Thank you, &lt;br /&gt;&#xA;KK&lt;/p&gt;&#xA;" OwnerUserId="21081" LastEditorUserId="21081" LastEditDate="2020-11-24T13:32:01.830" LastActivityDate="2020-12-01T11:46:23.313" Title="Transform Velocity data from sensor frame to world frame" Tags="&lt;transforms&gt;&lt;transformation&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21416" PostTypeId="1" AcceptedAnswerId="21422" CreationDate="2020-11-24T07:16:56.230" Score="3" ViewCount="30" Body="&lt;p&gt;I'm planning on making a smallish off-road rover (15-25kg net weight) with 4-wheel steering and I was wondering if it'd be a good idea to use (self-locking) worm gearboxes for steering. I've thought about using planetary gearboxes, but self-locking gearboxes will help improve power consumption.&lt;/p&gt;&#xA;&lt;p&gt;I've found this &lt;a href=&quot;https://www.ketterer-drives.com/products/detailansicht/worm-gear-2010/&quot; rel=&quot;nofollow noreferrer&quot;&gt;gearbox&lt;/a&gt; but it's not clear whether it's applicable to steering tasks. Here's the spec:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/naMVw.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/naMVw.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I have several questions and it'd be great if anyone could help:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;As the 1:18 variant has a axial force of 250N, does that mean if the load is ~25kg, I'd need to have additional bearings and support for distributing the load?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The duty cycle is 20% at 5min. Is this generally adequate for steering? When steering in a straight line on off-road at low speed, the adjustment may be small but frequent.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A gearbox like that costs around $180. Are there more economical alternatives that are self-locking?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Any advice appreciated. TIA.&lt;/p&gt;&#xA;" OwnerUserId="11489" LastEditorUserId="11489" LastEditDate="2020-11-24T10:40:04.543" LastActivityDate="2020-11-25T14:13:19.547" Title="Worm gearbox for steering" Tags="&lt;mobile-robot&gt;&lt;wheeled-robot&gt;&lt;steering&gt;&lt;self-driving&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21417" PostTypeId="1" CreationDate="2020-11-24T16:04:53.543" Score="0" ViewCount="38" Body="&lt;p&gt;&lt;strong&gt;UPDATE: I have clarified my question for answerers to better understand what I am asking&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;If I have a flywheel, like the one shown in this image, and I know the torque, weight distribution, and weight. How do I know the drag of the flywheel, and resulting speed of this flywheel in full motion?&lt;/p&gt;&#xA;&lt;p&gt;Just a heads up, I don't really know anything about physics.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Dxrbh.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Dxrbh.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="26710" LastEditorUserId="26710" LastEditDate="2020-11-27T22:50:58.657" LastActivityDate="2021-04-27T03:10:21.263" Title="Calculate body speed in m/s with weight in the equation?" Tags="&lt;mobile-robot&gt;&lt;torque&gt;&lt;wheel&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21421" PostTypeId="1" CreationDate="2020-11-25T12:28:24.560" Score="0" ViewCount="62" Body="&lt;p&gt;I know this equation: &lt;span class=&quot;math-container&quot;&gt;$\tau = J^T f$&lt;/span&gt;. In my case, the Jacobian &lt;span class=&quot;math-container&quot;&gt;$J$&lt;/span&gt; is not square. Is it valid to use the pseudoinverse of &lt;span class=&quot;math-container&quot;&gt;$J^T$&lt;/span&gt; to calculate end effector forces &lt;span class=&quot;math-container&quot;&gt;$f$&lt;/span&gt; based on joint torques &lt;span class=&quot;math-container&quot;&gt;$\tau$&lt;/span&gt;? I have just never seen this equation used with given joint torques, this is why I am curious.&lt;/p&gt;&#xA;" OwnerUserId="21760" LastEditorUserId="21760" LastEditDate="2020-11-25T13:59:34.070" LastActivityDate="2020-11-25T14:40:17.350" Title="When not to use pseudoinverse?" Tags="&lt;torque&gt;&lt;jacobian&gt;&lt;force&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21422" PostTypeId="2" ParentId="21416" CreationDate="2020-11-25T14:13:19.547" Score="1" Body="&lt;ol&gt;&#xA;&lt;li&gt;Axial (or thrust) force refers to the force applied along the axis of rotation, not the load that is applied to the motor. (This load would be a torque, anyways... not a force).&lt;/li&gt;&#xA;&lt;li&gt;Probably fine for a tractor, not fine for a F1 racecar. This is a question you need to answer based on your application.&lt;/li&gt;&#xA;&lt;li&gt;There might be. You can adapt drills with anti-backdrive pins to accomplish this (they are a planetary gearset). Example: &lt;a href=&quot;https://www.chiefdelphi.com/uploads/short-url/k05tcmRrq5EsCc5xvPtZvbKd5DT.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.chiefdelphi.com/uploads/short-url/k05tcmRrq5EsCc5xvPtZvbKd5DT.pdf&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Other things to think about:&lt;/p&gt;&#xA;&lt;ol start=&quot;4&quot;&gt;&#xA;&lt;li&gt;A typical vehicle suspension system has caster and kingpin angles such that the tires automatically re-center. This not only produces a desirable user experience (resistance in an even direction), but it prevents wheels from shaking at high speeds. You'll probably want to consider having this self-centering behavior which will produce higher load on your actuator.&lt;/li&gt;&#xA;&lt;li&gt;Linkages matter. What sort of linkages are you connecting the steering to the gearbox via?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="27485" LastActivityDate="2020-11-25T14:13:19.547" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21423" PostTypeId="2" ParentId="21421" CreationDate="2020-11-25T14:40:17.350" Score="1" Body="&lt;p&gt;Short answer: you can use it.&lt;/p&gt;&#xA;&lt;p&gt;Long answer: Depend on your case, but I have seen many papers where they use the pseudoinverse of the non-square Jacobian matrix.&lt;/p&gt;&#xA;&lt;p&gt;The rectangular Jacobian matrix opens the window to optimize in terms of other variables such as space constraints or force minimization.&lt;/p&gt;&#xA;&lt;p&gt;The pseudo inverse by definition (in a redundant manipulator) minimizes the joints velocities.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.cs.cmu.edu/afs/cs/academic/class/15384/web/16_pseudoinverse.ppt&quot; rel=&quot;nofollow noreferrer&quot;&gt;Source&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="21229" LastActivityDate="2020-11-25T14:40:17.350" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21424" PostTypeId="1" CreationDate="2020-11-26T02:27:44.743" Score="0" ViewCount="49" Body="&lt;p&gt;I have a PID loop for a small vehicle implemented in a microcontroller. Currently the PID loop is implemented in a timer interrupt. I want to implement an FSM that will have states that enable or disable the function that the PID loop is controlling, so in some states the PID loop should be disabled and in some it's enabled. I want to implement this control in a way that minimally disturbs the PID loop.&lt;/p&gt;&#xA;&lt;p&gt;I've been told that I shouldn't disable the timer interrupt if possible. Is a good option for this to implement the FSM itself inside of the timer interrupt and then update the PID loop inside the FSM states?&lt;/p&gt;&#xA;&lt;p&gt;The alternative would be to have just the PID loop inside the timer interrupt and then the FSM implemented inside the microcontroller's &lt;code&gt;main()&lt;/code&gt;, which I think would need to temporarily enable or disable the timer loop while updating state.&lt;/p&gt;&#xA;" OwnerUserId="27489" LastActivityDate="2021-05-25T12:04:40.383" Title="Reliably enabling/disabling a PID loop via FSM in a microcontroller" Tags="&lt;control&gt;&lt;pid&gt;&lt;microcontroller&gt;&lt;interrupts&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21425" PostTypeId="2" ParentId="21424" CreationDate="2020-11-26T09:41:32.310" Score="0" Body="&lt;p&gt;You could probably just have the FSM outside the interrupt routine since it is not a time critical function of your system as a PID is.&lt;/p&gt;&#xA;&lt;p&gt;Then in the FSM can update an enable or disable variable that will enable or disable to use the PID computed value (rather than not compute)&lt;/p&gt;&#xA;&lt;p&gt;A pseudo-code would look like&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;void time_interrupt() &#xA;    compute_PID()&#xA;    if USE_IT&#xA;        use_PID_computed_value()&#xA;    else&#xA;        not_use_PID_computed_value&#xA;&#xA;void main()&#xA;    for( , ,) &#xA;        read_control_FSM();&#xA;        switch FSM:&#xA;            case A: &#xA;                 USE_IT = false&#xA;            case B: &#xA;                 USE_IT = true&#xA;    &#xA;    &#xA;  &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="21229" LastActivityDate="2020-11-26T09:41:32.310" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21428" PostTypeId="1" CreationDate="2020-11-27T00:00:08.080" Score="0" ViewCount="56" Body="&lt;p&gt;Many computing platforms used by robots are not real time(ex Jetson).&lt;/p&gt;&#xA;&lt;p&gt;How are real time constraints handled in real robots? Are all software transfered into a hardware solution with real time performance? How does it work?&lt;/p&gt;&#xA;" OwnerUserId="21514" LastActivityDate="2020-12-27T12:04:35.543" Title="Robots and RTOS" Tags="&lt;mobile-robot&gt;&lt;real-time&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21431" PostTypeId="2" ParentId="21428" CreationDate="2020-11-27T11:07:48.490" Score="1" Body="&lt;p&gt;The answer is yes, for example many robot computers are based on the linux real-time kernels to handle the real-time constraints.&lt;/p&gt;&#xA;&lt;p&gt;For small robots for teaching like the &lt;a href=&quot;https://emanual.robotis.com/docs/en/platform/turtlebot3/overview/&quot; rel=&quot;nofollow noreferrer&quot;&gt;turtlebot&lt;/a&gt; uses a raspberry pi for the high-level control, and a motor control board for the real-time control.&lt;/p&gt;&#xA;&lt;p&gt;Another example is the &lt;a href=&quot;https://github.com/mindThomas/Kugle-Embedded&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ball balancing robot&lt;/a&gt; that uses an STM32 Nucleo board with the free RTOS kernel to handle the real-time control and communicates to the onboard computer for autonomous navigation.&lt;/p&gt;&#xA;" OwnerUserId="21229" LastActivityDate="2020-11-27T11:07:48.490" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21432" PostTypeId="1" AcceptedAnswerId="21434" CreationDate="2020-11-27T11:27:38.910" Score="0" ViewCount="28" Body="&lt;p&gt;I am working for development of a 5 DOF Robotic arm , and I am confused in the Torque calculation&#xA;This is a 5 Axis revolute Joints Robotic arm , where Motor for 1st axis will rotate the turning table and all the robotic arm and 2nd and third joints have a rotation axis out and into the page(such that against gravity) , 4th axis will rotate the last joint  and 5th axis will make payload up and down, Free body diagram is attached&#xA;I am calculating Torque of each joints considering the gravity using this formula on all 4 axis,&lt;/p&gt;&#xA;&lt;p&gt;Torque(2nd axis) = (MLink2*(L2/2) + Mjoint2&lt;em&gt;L2 +MLink3&lt;/em&gt;((L3/2) +L2) +Mj3*(L3+L2) +ML4*((L4/2) +L3+L2) + Mj4*(L4+L3+L2) +ML5*(L5/2+L4+L3+L2) + Payloas*(L5+L4+L3+L2)) *9.81&lt;br /&gt;&#xA;I am using this formula for all axis except 1st&lt;/p&gt;&#xA;&lt;p&gt;and I am using&#xA;Torque= (moment of Inertia)*(Angular acceleration)&#xA;Torque=(1/2(Mass of all joints and link )*R^2)*Angular acceleration&lt;/p&gt;&#xA;&lt;p&gt;on 1st axis,considering 1st axis will not have effect of gravity, it give very small value and when I calculate Torque of 1st joint using above same formula formula considering gravity and all Links, I get largest torque value, but I think 1st axis motor will only be resposible for rotating the turning table(with all joints) but 2nd axis will be against gravity it should have large value than 1st axis?&#xA;where I am being wrong in these calculations&lt;/p&gt;&#xA;&lt;p&gt;and I want to know also about 4th and 5 axis calculation, should I use the same formula which I am using or some thing else should be considered&#xA;&lt;a href=&quot;https://i.stack.imgur.com/UjlER.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/UjlER.png&quot; alt=&quot;Free body Diagram&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="27171" LastActivityDate="2020-11-27T17:51:31.457" Title="What is the most accurate method to calculate Torque of 5 DOF Robotic arm" Tags="&lt;robotic-arm&gt;&lt;mechanism&gt;&lt;industrial-robot&gt;&lt;torque&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21433" PostTypeId="1" AcceptedAnswerId="21450" CreationDate="2020-11-27T16:46:54.853" Score="0" ViewCount="58" Body="&lt;p&gt;I have to design a observer to estimate disturbances which are applied to a unicycle model. So, the unicycle model with disturbances is:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\dot{x}=v cos\theta + d_x$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\dot{y}=v sin\theta + d_y$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\dot{\theta}=\omega$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;where &lt;span class=&quot;math-container&quot;&gt;$d_x$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$d_y$&lt;/span&gt; are the disturbances, which can be thought as velocities which I cannot access. I would like to define a disturbance observer to estimate these velocities, and use them in the controller for the control law.&lt;/p&gt;&#xA;&lt;p&gt;The problem is that I am not practicle with disturbance observers, since I have never studied them. Searching online I have understood that I have to define a copy of the system of the type:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\dot{\xi_x}=v cos\theta + k(x-\xi_x)$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\dot{\xi_y}=v cos\theta + k(y-\xi_y)$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;where I have understood that : &lt;span class=&quot;math-container&quot;&gt;$d_x=k(x-\xi_x)$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$d_y=k(y-\xi_y)$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Now, I have to design this on Simulink, but while doing it I have realized that I haave not clear from where I should access &lt;span class=&quot;math-container&quot;&gt;$\xi_x$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\xi_y$&lt;/span&gt;. Moreover, from the observer, the output should be &lt;span class=&quot;math-container&quot;&gt;$d_x$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$d_y$&lt;/span&gt;, which are the estimates, since I have to use those in the definition of the controller, but in the equation of the observer I am computing &lt;span class=&quot;math-container&quot;&gt;$\dot{\xi_x}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\dot{\xi_y}$&lt;/span&gt;, so how do I output them in order to send them to the controller?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/OS3OM.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OS3OM.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I am probaly saying something wrong in the question, but I have not clear how to work with observers.&lt;/p&gt;&#xA;&lt;p&gt;If needed I can write here the Simulink model and the code insede the blocks. I have not written to avoid making the question  too long.&lt;/p&gt;&#xA;" OwnerUserId="21797" LastEditorUserId="21797" LastEditDate="2020-11-29T17:40:08.633" LastActivityDate="2020-11-30T15:09:47.580" Title="How do I apply a disturbance observer to a mobile robot?" Tags="&lt;mobile-robot&gt;&lt;control&gt;&lt;matlab&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21434" PostTypeId="2" ParentId="21432" CreationDate="2020-11-27T17:51:31.457" Score="1" Body="&lt;p&gt;I do not think your equation is correct.&#xA;You should use an established method for writing the equations, like the &lt;a href=&quot;https://www.diag.uniroma1.it/deluca/rob2_en/06_NewtonEulerDynamics.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Recursive Newton Euler Method.&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-11-27T17:51:31.457" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21435" PostTypeId="1" CreationDate="2020-11-27T18:43:51.283" Score="0" ViewCount="32" Body="&lt;p&gt;I'm new to electronics/robotics and I'd like to start with a simple project that uses a speaker to play sound clips when a certain event/input/stimulus is detected.&lt;/p&gt;&#xA;&lt;p&gt;Looking on Digi-Key and similar sights, there's a billion little two-wire speakers like &lt;a href=&quot;https://www.visaton.de/en/products/drivers/miniature-speakers/k-15-s-8-ohm&quot; rel=&quot;nofollow noreferrer&quot;&gt;this one&lt;/a&gt;, but I'm not sure how to make sense of their characteristics/attributes to determine whether they will suit my needs or not.&lt;/p&gt;&#xA;&lt;p&gt;Are all speakers capable of producing just about &lt;em&gt;any&lt;/em&gt; sound, if driven correctly? Or are different speakers &amp;quot;capped&amp;quot; to simpler sounds, like the typical 8-bit audio sound of older video games? What characteristics of speakers determines what kinds of sounds they are capable of playing?&lt;/p&gt;&#xA;&lt;p&gt;For instance, on Digi-Key, you can search for speakers by a large variety of attributes, such as:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Series (Agile, APS, ASB, etc.)&lt;/li&gt;&#xA;&lt;li&gt;Technology (Magnetic vs Piezo)&lt;/li&gt;&#xA;&lt;li&gt;Type (Exciter, General Purpose, Subwoofer)&lt;/li&gt;&#xA;&lt;li&gt;Frequency Range&lt;/li&gt;&#xA;&lt;li&gt;Impedance&lt;/li&gt;&#xA;&lt;li&gt;Efficiency&lt;/li&gt;&#xA;&lt;li&gt;list goes on&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Again, I'm just looking for a speaker that &lt;em&gt;can&lt;/em&gt; play some sound clips (that I'll probably record on a computer or phone). Once I know that I'm dealing with a speaker that &lt;em&gt;can&lt;/em&gt; play sound clips, I'll start dealing with the headache of figuring out how to drive it and get it to play them.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;I do need a small speaker that can fit on a small (bread loaf-sized) hobby project.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Thanks in advance for any and all help!&lt;/p&gt;&#xA;" OwnerUserId="27499" LastActivityDate="2020-12-04T04:29:22.833" Title="Understanding import attributes of electronics speakers, by example" Tags="&lt;noise&gt;&lt;driver&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21436" PostTypeId="1" CreationDate="2020-11-27T20:44:55.393" Score="0" ViewCount="15" Body="&lt;p&gt;I am planning out a small hobby robotics project where I hope to &lt;strong&gt;wirelessly&lt;/strong&gt; send video frames (images) from a camera sensor to either an app running on my Android, or to a desktop app running on my PC.&lt;/p&gt;&#xA;&lt;p&gt;I will be using an &lt;a href=&quot;https://www.microchipdirect.com/product/ATSAMR21-XPRO?dfw_tracker=66485-ATSAMR21-XPRO&amp;amp;gclid=CjwKCAiA5IL-BRAzEiwA0lcWYtopr7FWt9dXpIhRGTzZarzYzY3zW5VQiowQ_w2GwMnmGh2aapU77BoCwVoQAvD_BwE&quot; rel=&quot;nofollow noreferrer&quot;&gt;ARM-based MCU evaluation board&lt;/a&gt; (contains lots of GPIO pins) running a RIOT OS app (that I'm writing myself). I already have a good understanding of how to connect the camera to the MCU's GPIO and drive the camera with my own RIOT-based firmware.&lt;/p&gt;&#xA;&lt;p&gt;Where I'm really fuzzy is in sending the video frames to an app running on my phone or desktop. I &lt;strong&gt;believe&lt;/strong&gt; I need to use a radio transceiver that can:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;receive radio transmissions to begin taking video (or to stop); and&lt;/li&gt;&#xA;&lt;li&gt;transmit the video frame images from the camera&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;I &lt;em&gt;believe&lt;/em&gt; I can use a simple &lt;a href=&quot;https://www.digikey.com/en/products/detail/silicon-labs/SI4721-B20-GM/2278262&quot; rel=&quot;nofollow noreferrer&quot;&gt;radio transceiver IC such as this&lt;/a&gt; but wanted to get the thoughts of this community.&lt;/p&gt;&#xA;&lt;p&gt;Dealing with interfacing such a transceiver to my MCU will certainly come with its own headaches, but at least I see the general path/approach. I'm guessing I would need to solder this chip on my own PCB, solder pins onto the PCB as well, and then use jumpers or similar wires to connect that PCB to my MCU. I would likely also have to add other components to the PCB to make the MCU &amp;quot;compatible&amp;quot; with it, voltage/current wise, etc.&lt;/p&gt;&#xA;&lt;p&gt;My question: is this the right type of transceiver chip for the job of receiving wireless commands, and sending video frames? Or am I way off base here?&lt;/p&gt;&#xA;" OwnerUserId="27499" LastActivityDate="2020-11-27T20:44:55.393" Title="What types of components can be used for wireless, radio-based transceiving?" Tags="&lt;microcontroller&gt;&lt;radio-control&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21437" PostTypeId="1" CreationDate="2020-11-27T22:32:27.893" Score="2" ViewCount="25" Body="&lt;p&gt;I am trying to understand Bayes Filter. In its update step we have &lt;code&gt;P(z_t|x_t)&lt;/code&gt; as observation model.&lt;/p&gt;&#xA;&lt;p&gt;Slide 37: Bullet 5 of &lt;a href=&quot;http://ais.informatik.uni-freiburg.de/teaching/ss10/robotics/slides/07-sensor-models.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this lecture&lt;/a&gt; states &amp;quot;Likelihood of measurement is given by “probabilistically comparing” the actual with the expected measurement.&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;For example from the following data:&lt;/p&gt;&#xA;&lt;p&gt;Observation: [0, 1, 0, 0, 0, 0, 1, 0, 0, 0] -&amp;gt; This what the robot sense&lt;/p&gt;&#xA;&lt;p&gt;Actual World: [0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0]&lt;/p&gt;&#xA;&lt;p&gt;And actual world we can say [0, 1] resembles to [white, black] tile and sensor recognize them with [White: 0.7, Black: 0.9] probability. I am not able to understand here how can we calculate this likelihood for each step&#xA;?&lt;/p&gt;&#xA;" OwnerUserId="22770" LastActivityDate="2020-12-28T05:33:16.317" Title="How can we calculate likelihood of sensor values wrt to actual real world?" Tags="&lt;slam&gt;&lt;filter&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21438" PostTypeId="1" CreationDate="2020-11-27T23:45:51.300" Score="2" ViewCount="73" Body="&lt;p&gt;I hope that my question is not too stupid ... but I have a hard time to understand why Jacobians computed from forward kinematics would allow a better and smoother control than using pure inverse kinematics equations when they exist.&lt;/p&gt;&#xA;&lt;p&gt;I understand that Jacobian may map linearly cartesian coordinates to joints coordinates but why we could'nt get the same result whith small increments of inverse kinematics ?&lt;/p&gt;&#xA;&lt;p&gt;With the example of a 3 joints robot having to reach the pose (x , y, z) from the current pose (u, v, w), if this new pose requires to increase its joints state from (q0, q1, q2) to (q0 + 10, q1 -20, q2 + 40) and if I order to my robot these joint goals computed form inverse kinematic equations with velocities (v0, v1, v2) proportional to the ordered angular motion (v0, v1 = v0 x 2, v2 = v0 x 4), why this would not provide the same result than those with jacobian control ?&lt;/p&gt;&#xA;&lt;p&gt;Thanks for helping my understanding.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Ugo,&lt;/p&gt;&#xA;&lt;p&gt;Many thanks for your detailed explanation. I understand from your reply that Jacobian is used for a large set of tasks I probably don't know. I realized that my questiion is not accurate enough. Practically, I am working on a demonstrator to get a proof of concept on microsurgery. I have designed a 4 DOF slave for which I have found FK and IK closed form equations. This slave is controlled with a custom master control for which I have also the FK equations. I applied a scaling factor from master to slave in order to convert large master motion to smaller slave motion. The scalling is applied on cartesian space. Since this is made within a loop, the motion increments are small.  Each joints velocity is, at each step, ordered to be proportionnal to each joint course to get a synchronized movement. I get a decent result but not as smooth as I expected (hardware is presumed optimally tuned). It is why I consider using only velocity control with numerical jacobians, but I don't understand why it could be better than using small steps of IK with proprtionnal velocities...&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Ugo,&lt;/p&gt;&#xA;&lt;p&gt;Thank you for interest. The slave robot is essentially made of 3 revolute joints which rotation axis are respectively q0: around z (= gravity axis), q1 and q2 both turn around x and q3 rotates around y axis. At the output of motor q3 we have an universal joint linking to a bar which end is constrained in a second universal joint itself linked to the ground.&#xA;The master control have similar structure. Right hand rule.&lt;/p&gt;&#xA;&lt;p&gt;Here are the FK equations:&#xA;( Where p4 is the position of the center of rotation of the universal joint linked&#xA;to q3 output and p2p4 the constant distance beetween p4 and the center of rotation of motor q1)&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; 1- first we compute position of p4:&#xA; p4x = qx - q1 * s0 - q2 * s0 * c1 + p2p4 * (s0 * s1 + s0 * c1)&#xA; p4y = qy + q2 * s1 + p2p4 * (c1 * s1)&#xA; p4z = qz + q1 * c0 + q2 * c0 * c1 - p2p4 * ( s1 * c0 +* c0 * c1)&#xA;&#xA;2- Compute translation and orientation of link p4 to distal pivot (which is the tool)&#xA;pE is the part of the link outside the distal pivot (pivotX, pivotY, pivotZ). &#xA;(note that pivotZ = 0 by construction):&#xA;Ia = sqrt((pivotX - p4x)^2 + (pivotY - p4y)^2 + p4z ^2 )&#xA;Ib = IL - Ia //(Translation outside the distal pivot point)&#xA;Ibr = Ib / Ia&#xA;pEx = pivotX + (pivotX - p4x) * Ibr //(vector projection)&#xA;pEy = pivotY + (pivotY - p4y) * Ibr&#xA;pEz = -p4z * Ibr&#xA;fk.tr = Ib&#xA;## tool orientation:&#xA;alpha = atan((pEyy - p4y) / (pEz - p4z))&#xA;beta = atan((pEx - p4x) / sqrt((pEz - p4z)^2 + (pEy - p4y)^2))&#xA;//(gamma, the tool rotation is directly given by q3).&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;A loop read at 650 Hz the pose of the 4 DOF master control, compute the FK and if a change occurs, apply a scaling factor to the cartesian change of mastercontrol and send a new pose to the slave by adding to its IK order the cartesian change to the starting pose of the slave. Velocity orders are sent with values proportionnal to the change in joints values. Basically the slave is position controlled, velocties are used only to synchronize joints motions.&#xA;This works, but the global motion is not as smooth as got when motors are individually controlled. And here (microsurgery), smoothness is very important.&lt;/p&gt;&#xA;" OwnerUserId="27502" LastEditorUserId="27502" LastEditDate="2020-11-30T11:31:41.783" LastActivityDate="2020-12-05T15:10:13.513" Title="Is it better to use Jacobians to compute IK when a closed form for IK is available?" Tags="&lt;control&gt;" AnswerCount="2" CommentCount="4" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21439" PostTypeId="2" ParentId="21417" CreationDate="2020-11-28T02:40:26.530" Score="0" Body="&lt;p&gt;Torque is moment of inertia times angular acceleration. Theoretically, if you could provide a constant torque and there were no losses, you could accelerate to an infinite speed even with a small torque.&lt;/p&gt;&#xA;&lt;p&gt;In reality, though, losses exist. Frictional losses are based solely on load weight, like static and dynamic friction in a bearing. There's also viscous damping, which is proportional to speed.&lt;/p&gt;&#xA;&lt;p&gt;Given &amp;quot;enough time,&amp;quot; your speed will equalize because the damping losses will exactly equal the applied torque. If you know how much torque you're applying and what the steady state speed is, then you can calculate the losses.&lt;/p&gt;&#xA;&lt;p&gt;If you know what the damping constant is then you can calculate the ultimate speed for a given torque.&lt;/p&gt;&#xA;&lt;p&gt;If you don't have either then there's nothing really you can do, though. You can try to get numbers from other systems but little differences in fiction could make the difference between 10,000 and 30,000 rpm, for example.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-11-28T02:40:26.530" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21440" PostTypeId="1" CreationDate="2020-11-28T09:23:48.297" Score="0" ViewCount="29" Body="&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Third_umpire&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Third_umpire&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Is it possible using Robotics, Artificial intelligence, Machine learning technologies to replace the TV umpire - Human by a Robot (machine)?&lt;/p&gt;&#xA;&lt;p&gt;i.e. The Robot will take the decision whether the batsman is out or not out after watching the replays.&#xA;&lt;img src=&quot;https://i.stack.imgur.com/W9tAz.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;&#xA;" OwnerUserId="26865" LastActivityDate="2020-11-28T12:21:06.623" Title="TV Umpire replaced by Robot (machine)" Tags="&lt;robotic-arm&gt;&lt;robotics-toolbox&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21441" PostTypeId="2" ParentId="21438" CreationDate="2020-11-28T09:36:57.003" Score="2" Body="&lt;p&gt;Saying in general terms that with the Jacobian we can obtain smoother control and thus better movements is an overstatement if it is not referred to a specific context where one is able to analyze all the implications in depth.&lt;/p&gt;&#xA;&lt;p&gt;In fact, we can do great things by knowing the exact IK anyway.&lt;/p&gt;&#xA;&lt;p&gt;From a broader perspective, the Jacobian is a linear map relating the velocities of the joints with the velocity of the robot's end-effector, hence it is intimately connected to the control problem where we are asked to generate suitable velocity commands (we are dealing here with the kinematics and not with the dynamics) to achieve a goal.&lt;/p&gt;&#xA;&lt;p&gt;With this in mind, your following definition of the Jacobian is not quite right:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I understand that Jacobian may map linearly cartesian coordinates to joints coordinates but why we could'nt get the same result whith small increments of inverse kinematics ?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;That said, we need to consider other essential aspects that are more difficult to be implemented, if not impossible, with a closed-form IK:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Generally, the movements we aim to perform through a controller are not only specified in the joint space but rather also in the task space. For example, we need to move linearly with the tip while staying away from the joint bounds. To this end, we ought to use the Jacobian to trade off these requirements.&lt;/li&gt;&#xA;&lt;li&gt;Nowadays, robots tend to be equipped with lots of degrees of freedom so that closed-form solutions to IK do not even exist.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="6941" LastActivityDate="2020-11-28T09:36:57.003" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21442" PostTypeId="2" ParentId="21440" CreationDate="2020-11-28T12:21:06.623" Score="1" Body="&lt;p&gt;No robotics, machine learning or AI required. Tennis relies heavily on &lt;a href=&quot;https://www.hawkeyeinnovations.com/sports/tennis&quot; rel=&quot;nofollow noreferrer&quot;&gt;HawkEye&lt;/a&gt; technology for a while now, static high speed cameras and analytical dynamic models. Hawkeye also makes progress in &lt;a href=&quot;https://www.hawkeyeinnovations.com/products/ball-tracking/cricket-decision-review-system&quot; rel=&quot;nofollow noreferrer&quot;&gt;cricket&lt;/a&gt; and other sports.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-11-28T12:21:06.623" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21444" PostTypeId="1" AcceptedAnswerId="21568" CreationDate="2020-11-28T14:03:50.397" Score="0" ViewCount="32" Body="&lt;p&gt;The craig(p.180) states that equations can be made to represent the dynamic equations. The first one being the state space equation.&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\tau=M(\Theta)\cdot\ddot{\Theta} + V(\Theta,\dot{\Theta}) + G(\Theta)$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;The other one being the configuration state space equation.&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\tau=M(\Theta)\cdot\ddot{\Theta} + B(\Theta)[\dot{\Theta} \dot{\Theta}]+ C(\Theta)[\dot{\Theta}^2] + G(\Theta)$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Why would one need to split the velocity term into a Coriolis and centrifugal part? I need one of these versions to make a controller but can't see why one should be desirable than the other. Why is this important for computer control of a robot?&lt;/p&gt;&#xA;" OwnerUserId="24768" LastActivityDate="2020-12-29T10:28:22.463" Title="What is the difference between The state-space equation and The configuration-space equation" Tags="&lt;control&gt;&lt;pid&gt;&lt;motion-planning&gt;&lt;dynamics&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21449" PostTypeId="1" CreationDate="2020-11-30T02:08:08.100" Score="0" ViewCount="24" Body="&lt;p&gt;I'm trying to do Hand-Eye Robot-Camera calibration.&#xA;And I'm using MZ12(NACHI robot) and D435(Intel camera).&lt;/p&gt;&#xA;&lt;p&gt;But accuracy of the calibration result is so low. Average error of translation moving is about 2mm.&lt;/p&gt;&#xA;&lt;p&gt;Maybe the reason of it is that I haven't done zero adjustment for absolute position of the robot arm.&#xA;I tested absolute position error of the robot. I moved the robot 800mm on X-axis, but teach pendent showed 803mm. I'm not sure it is big error or not. Do you think this error affects to the Hand-Eye  calibration?&lt;/p&gt;&#xA;&lt;p&gt;To solve the problem, is it necessary to do this calibration (zero adjustment of joints)?&lt;/p&gt;&#xA;" OwnerUserId="23802" LastActivityDate="2020-11-30T02:08:08.100" Title="Hand-Eye Calibration without Robot Arm Calibration" Tags="&lt;robotic-arm&gt;&lt;calibration&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21450" PostTypeId="2" ParentId="21433" CreationDate="2020-11-30T15:09:47.580" Score="1" Body="&lt;p&gt;I think the thing to recognize here is that you're not actually going to have an error solely in the x- or y-directions unless the tire is slipping. The errors instead would be better modeled as a linear speed error &lt;span class=&quot;math-container&quot;&gt;$v_{err}$&lt;/span&gt; and an angular speed error &lt;span class=&quot;math-container&quot;&gt;$\omega_{err}$&lt;/span&gt;. Those errors then propagate through your system like you'd expect, with the sine/cosine modifiers, etc.&lt;/p&gt;&#xA;&lt;p&gt;You mentioned that you're not clear on how to work with observers, so here's a quick tutorial on those.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Suppose you have a linear system with dynamics. If you have states &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt;, an input &lt;span class=&quot;math-container&quot;&gt;$u$&lt;/span&gt;, outputs &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt;, then the system is typically modeled as:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{x} = Ax + Bu \\&#xA;y = Cx \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;You can't know the true states, though; you can only make approximations or &lt;strong&gt;estimates&lt;/strong&gt;. Your estimates take the same form, though -&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{\hat{x}} = A\hat{x} + Bu \\&#xA;\hat{y} = C\hat{x} \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;What you want is a way to estimate the error in your system and to then drive that error to zero, so you add a term to your model. In the above model, you can include a &amp;quot;control signal&amp;quot; based on the measurement error.&lt;/p&gt;&#xA;&lt;p&gt;You can measure the actual output of the system &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt; and subtract from that the output of your model &lt;span class=&quot;math-container&quot;&gt;$\hat{y}$&lt;/span&gt;. Your model should include some gain &lt;span class=&quot;math-container&quot;&gt;$L$&lt;/span&gt; that will drive the state error to zero. This leaves you with a new model:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{\hat{x}} = A\hat{x} + Bu + L(y - \hat{y})\\&#xA;\hat{y} = C\hat{x} \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Now, for the state error. If you define it to be the difference between actual and estimated states:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;e = x - \hat{x} \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Then you can describe how the error changes as the difference between how the actual state is changing and how the estimated state is changing:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{e} = \dot{x} - \dot{\hat{x}} \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;But we've got equations for &lt;span class=&quot;math-container&quot;&gt;$\dot{x}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\dot{\hat{x}}$&lt;/span&gt;! You can say:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\begin{matrix}&#xA;\dot{e} \\&#xA;\dot{e}&#xA;\end{matrix}&#xA; = \begin{matrix}&#xA;\dot{x} &amp;amp; -\dot{\hat{x}} \\&#xA;A\hat{x} + Bu &amp;amp; -\left(A\hat{x} + Bu + L(y - \hat{y})\right)&#xA;\end{matrix}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;I can expand that and re-group terms:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{e} = A\hat{x} + Bu -\left(A\hat{x} + Bu + L(y - \hat{y})\right) \\&#xA;\dot{e} = A\hat{x} + Bu -A\hat{x} - Bu - L(y - \hat{y}) \\&#xA;\dot{e} = \left(A\hat{x}-A\hat{x}\right) + \left(Bu-Bu\right) - L(y - \hat{y})\\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;The input terms there &lt;span class=&quot;math-container&quot;&gt;$Bu$&lt;/span&gt; cancel. Also, we can substitute in the expression for &lt;span class=&quot;math-container&quot;&gt;$y = Cx$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\hat{y} = C\hat{x}$&lt;/span&gt;:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{e} = \left(A\hat{x}-A\hat{x}\right)  - L(Cx - C\hat{x}) \\&#xA;\dot{e} = A\left(x - \hat{x}\right) - LC\left(x - \hat{x}\right) \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;which, when you substitute back &lt;span class=&quot;math-container&quot;&gt;$e = x - \hat{x}$&lt;/span&gt;, leaves you with&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\boxed{\dot{e} = [A - LC]e} \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;If you are assuming that your state feedback controller is going to use gains of&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;u = -Gx \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;then your controller winds up looking like:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{x} = Ax + B(-Gx) \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;or&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\boxed{\dot{x} = [A-BG]x} \\&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;That is, the general structure of your state feedback controller and your error dynamics controller are the same. The observer design process is commonly referred to as the &amp;quot;dual&amp;quot; of the controller design process for this reason. For the controller design you're trying to drive the states to zero and for the observer design you're trying to drive the state error to zero.&lt;/p&gt;&#xA;&lt;p&gt;The error dynamics need to be &amp;quot;faster&amp;quot; than the state dynamics so you drive the error to zero first (and thus your controller acts on a &amp;quot;good estimate&amp;quot; of the states). You can choose whatever you want, but faster error dynamics (higher frequency response) requires more actuator authority. Typically the error dynamics are chosen to be 5 to 10 times faster than the state dynamics.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-11-30T15:09:47.580" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21453" PostTypeId="2" ParentId="21415" CreationDate="2020-12-01T11:46:23.313" Score="1" Body="&lt;p&gt;You can use the rotation matrix.&lt;/p&gt;&#xA;&lt;p&gt;linear_v= R*sensor_linear_v + p X sensor_angular_v&#xA;p is the translation vector and the X is the cross operator&lt;/p&gt;&#xA;&lt;p&gt;angular_v=R*sensor_angular_v&lt;/p&gt;&#xA;" OwnerUserId="24610" LastActivityDate="2020-12-01T11:46:23.313" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21455" PostTypeId="1" CreationDate="2020-12-02T02:30:22.707" Score="0" ViewCount="26" Body="&lt;p&gt;I have a system like shown in the diagram&lt;img src=&quot;https://i.imgur.com/ZKvdZXn.jpg&quot; alt=&quot;diagram&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;where 2 robots having differential drive are physically constrained together. &lt;a href=&quot;http://www.cs.columbia.edu/%7Eallen/F17/NOTES/icckinematics.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Traditionally for a single robot, we find the Instantaneous center of curvature (ICC)&lt;/a&gt; by equating the &amp;quot;omega&amp;quot;  for both wheels. That would work since there are 2 equations (the relationship between the wheel velocities and angular velocity) and 2 unknowns (the distance of ICC from the center of the wheels and the angular velocity). However, in my system, there will be 4 equations and 2 unknowns. So should I solve it as an over-determined system? Or should I only consider the extreme cases, i.e. left most wheel speed for the left robot and rightmost wheel speed for the right robot? If neither approach is correct then how do I proceed?&lt;/p&gt;&#xA;" OwnerUserId="26149" LastEditorUserId="10748" LastEditDate="2020-12-03T18:31:39.563" LastActivityDate="2021-05-02T19:02:15.213" Title="How can I find the kinematics 2 differential drives attached together along their axes?" Tags="&lt;kinematics&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="21456" PostTypeId="2" ParentId="21455" CreationDate="2020-12-02T10:27:07.007" Score="0" Body="&lt;p&gt;You do not have an overdetermined system, you have an underdetermined or redundant system. There are multiple ways to deal with such systems, but all include adding further constraints or equations.&lt;/p&gt;&#xA;&lt;p&gt;Simplest would be to consider an artificial coupling between the two subsystems. e.g. constrain the differential drives to have the same velocity vector. This way, you add two equations to the existing two equations and you have a fully defined system. Other ways of adding equations can also be considered.&lt;/p&gt;&#xA;&lt;p&gt;Solving this as on optimization problem with a solver is also feasible. The cost function must be formulated. What is the function that should be minimized. This could be for e.g. deviation from the intended path/trajectory or similar.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;After I managed to open the image you attached:&#xA;I still do not think this system is overdetermined. I think you have 4 equations and 4 unknowns and you can solve for each.&#xA;You can devise a generic formula for the rotational velocity of any wheel on the axis:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$V_i = f(\omega, d) = \omega \cdot d$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Where omega is the rotational velocity of the system around the ICC and d is the distance between the wheel and ICC. Just account for the distances between the wheels and it should be fine.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2020-12-03T18:41:54.910" LastActivityDate="2020-12-03T18:41:54.910" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21458" PostTypeId="2" ParentId="19562" CreationDate="2020-12-03T00:02:10.473" Score="0" Body="&lt;p&gt;Maybe this answer comes a bit too late:&lt;/p&gt;&#xA;&lt;p&gt;How about using a wide angle camera that sees the whole surface of the mirror?&#xA;It would be on a separate fixed mount next to the mirror.&lt;/p&gt;&#xA;&lt;p&gt;Using only image processing to determine the robot position assuming that the camera can see the mirrors edges and the robot can be definitely distinct from the mirror (has an outstanding color for example).&lt;/p&gt;&#xA;&lt;p&gt;I don't know how the robot is transported from mirror to mirror, but the same transportation means could be used for the camera mount as for the robot. If the robot is not transported, but fixed per mirror, you can have a retractable mount for each mirror.&lt;/p&gt;&#xA;" OwnerUserId="18318" LastActivityDate="2020-12-03T00:02:10.473" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21459" PostTypeId="1" CreationDate="2020-12-03T01:36:40.670" Score="0" ViewCount="121" Body="&lt;p&gt;I would like to get a robotic kit for myself to play around with and possibly play with some AI. So far I have mostly looked at Lego Mindstorms kits (EV3 and EV4 in particular).&lt;/p&gt;&#xA;&lt;p&gt;I have quite some experience in programming, so a visual programming language is not something I need, nor something I would use. The main point of why I am looking at Lego robots is because they are easy to assemble and modify. If you have any other suggestions for robots that are easy to modify I would also very much appreciate it.&lt;/p&gt;&#xA;&lt;p&gt;The main difference between the processors of the EV3 and EV4 that I was able to make out is that the EV4 is quite a bit slower than the EV3 (100Mhz vs 300Mhz) and has less RAM. On the other hand the EV4 runs on MicroPython instead of Unix, which might result in the EV4 being faster(?) but I don't know enough about that to know for sure.&lt;/p&gt;&#xA;&lt;p&gt;Another thing that keeps me from just going for it is that both kits are marketed for children and I'm afraid that I might reach its limits quite quickly.&lt;/p&gt;&#xA;&lt;p&gt;Thanks in advance for any help :)&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tl;dr&lt;/strong&gt;: What is a good robot kit, that is easy to assemble and modify and also suitable for an experienced programmer. Possible options so far: Lego Mindstorms EV3 or EV4&lt;/p&gt;&#xA;" OwnerUserId="27525" LastActivityDate="2021-05-21T02:04:55.480" Title="Which robotic kit is suitable for an experienced programmer?" Tags="&lt;mindstorms&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21460" PostTypeId="2" ParentId="21459" CreationDate="2020-12-03T01:41:05.417" Score="0" Body="&lt;p&gt;If you're up to learning ROS, you can get your hands on the &lt;a href=&quot;https://www.robotis.us/turtlebot-3-burger-us/&quot; rel=&quot;nofollow noreferrer&quot;&gt;turtlebot3&lt;/a&gt;!&lt;/p&gt;&#xA;" OwnerUserId="27064" LastActivityDate="2020-12-03T01:41:05.417" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21461" PostTypeId="1" CreationDate="2020-12-03T06:01:31.857" Score="0" ViewCount="16" Body="&lt;p&gt;While I am working on a project, a question comes to my mind; how can we estimate reliable angular motion from a monocular camera, just for a typical indoor environment within a few seconds? So to speak, can we estimate the camera's angular velocity and angular acceleration only by exploiting a sequence of images?&lt;/p&gt;&#xA;&lt;p&gt;Just from my intuition, a possible solution might be composed of two stages.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;First, carry out monocular visual odometry. By doing so, we can obtain a rotational trajectory along which the camera has traversed. (So to speak, a set of the camera's traversed rotation would be outcomes at this step.)&lt;/li&gt;&#xA;&lt;li&gt;Next, derive angular motion by interpolating or differentiating along the constructed rotational trajectory. Even though it may not be so accurate as desired, it will be sufficient enough if I can get a merely &lt;em&gt;reasonable&lt;/em&gt; angular motion from the estimated rotational spline curve. (For example, the estimated angular velocity should have a cosine similarity of 0.8 w.r.t. its ground-truth value, and 1/10 of error in Euler distance.)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I think there exist two challenges to this approach. (1) The second step is based on the assumption that the monocular visual odometry's outcome is quite successful to construct a decent rotational spline curve. I believe the acceptable range of drift error might be an order of magnitude smaller than the traversed angle, but I have no clue whether this is viable with any existing monocular visual odometry. (2) Though estimating the camera's rotational trajectory is attainable, it may be a hazardous idea to estimate angular motion from the trajectory, either by simple numerical method or way more sophisticated mathematics. Someone who has tried some similar kinds of stuff, such as integration or differentiation with discrete data, may sympathize with what I am saying.&lt;/p&gt;&#xA;&lt;p&gt;Is it possible to derive angular motion by exclusively using a single camera, without any other aiding sensors such as IMU? Does my approach seem reasonable to do it? Also, I would be happy if anyone knows the materials or resources that may be a sort of help for me. Thanks!&lt;/p&gt;&#xA;" OwnerUserId="27527" LastActivityDate="2020-12-03T06:01:31.857" Title="How can we estimate reliable angular motion from a monocular camera?" Tags="&lt;kinematics&gt;&lt;computer-vision&gt;&lt;navigation&gt;&lt;visual-odometry&gt;&lt;estimation&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21462" PostTypeId="1" CreationDate="2020-12-04T02:05:26.177" Score="0" ViewCount="25" Body="&lt;p&gt;I was wondering if it is possible to increase the computing power in a Lego Mindstorms robot. For example by either being able to switch components on the mainboard or by completely exchanging the &amp;quot;original brain&amp;quot; with another device, e.g. a Raspberry PI or Arduino. As far as I am aware there is also a way to plug additional custom boards into the v4. Is it possible to attach an additional processing unit to some port and use it to execute calculations on the attached unit?&lt;/p&gt;&#xA;&lt;p&gt;Unfortunately, I did not find anything about this on the internet other than for the EV3 version.&lt;/p&gt;&#xA;&lt;p&gt;If that is possible, are there any manuals to do this out there or possibly even preassembled kits?&lt;/p&gt;&#xA;&lt;p&gt;If nobody has ever done this, is it likely that this is possible by &amp;quot;hacking&amp;quot; ports and sending custom data to a custom-built unit? Since it has been done for the EV3 I would guess it is just a matter of time, right?&lt;/p&gt;&#xA;&lt;p&gt;Thank you for any help&lt;/p&gt;&#xA;" OwnerUserId="27525" LastEditorUserId="27525" LastEditDate="2020-12-04T15:37:23.340" LastActivityDate="2020-12-04T15:37:23.340" Title="Is it possible to increase computing power in a Lego Mindstorms v4 robot?" Tags="&lt;mindstorms&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21463" PostTypeId="2" ParentId="21435" CreationDate="2020-12-04T04:29:22.833" Score="1" Body="&lt;p&gt;A small speaker like &lt;a href=&quot;https://www.sparkfun.com/products/7950&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; one should be able to play tunes as you have mentioned. You can use an arduino or a raspberry-pi to stream audio over as shown in &lt;a href=&quot;https://extramaster.net/tools/midiToArduino&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; link.&lt;/p&gt;&#xA;" OwnerUserId="27064" LastActivityDate="2020-12-04T04:29:22.833" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21464" PostTypeId="2" ParentId="13932" CreationDate="2020-12-04T12:23:26.310" Score="5" Body="&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt;: Improved based on the comments below.&lt;/p&gt;&#xA;&lt;p&gt;If you have a CAD assembled, that means that you have one valid configuration given. You move the TCP (Tool Center Point) only a small amount, since your mouse  (which drags the mechanism) travels only a small amount between two update periods, that means that the two solutions are close to each other. Each refresh (probably) fills up a buffer of waypoints very close to each other, and for each point in the buffer the solution of the previous point can be used as an initial guess. This buffer essentially becomes a path with waypoints described by the mouse movements. Using the previous position as an initial guess, for the current one, which is only a slight change to the previous position will results in a very fast convergence, probably 5-8 iterations using a simple Newton-Raphson method.&lt;/p&gt;&#xA;&lt;p&gt;The key to fast numerical solutions is a good initial guess. Using a solution for the kinematics problem in a position physically close to the current one is a great initial guess.&lt;/p&gt;&#xA;&lt;p&gt;CAD software uses a numerical solver in the background, same as Matlab SimMechanics. If you implement it form scratch, make sure to re-use solutions as an initial guess for the neighbouring positions and you will get fast results.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2020-12-05T09:35:10.083" LastActivityDate="2020-12-05T09:35:10.083" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="21466" PostTypeId="1" AcceptedAnswerId="21470" CreationDate="2020-12-05T11:16:00.913" Score="0" ViewCount="25" Body="&lt;p&gt;I have a question. I have found some papers, where they use a Mono-VIO to recover depth of a scene. My question is:&#xA;Suppose I have a robot arm and attach a mono-VIO system to it. Then I move this arm once over my desk, which is about 1m long. Is it possible to get depth information with metric scaling about the objects lying on my desk from the received data of the Mono-VIO system? With a stereo camera, a snapshot of my desk may be sufficient to accomplish this.&lt;/p&gt;&#xA;&lt;p&gt;Can someone tell me if this works or if the drift is too high or the accuracy is too low.&lt;/p&gt;&#xA;" OwnerUserId="27536" LastActivityDate="2020-12-06T22:47:36.787" Title="Mono VIO vs. Stereo-Camera to recover Depth Information" Tags="&lt;imu&gt;&lt;stereo-vision&gt;&lt;visual-odometry&gt;&lt;monocular&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21467" PostTypeId="2" ParentId="21438" CreationDate="2020-12-05T15:04:42.327" Score="1" Body="&lt;p&gt;My question was probably badly formulated and, finally, I think the right answer is the following:&lt;/p&gt;&#xA;&lt;p&gt;When a master-slave system is used and when the kinematics or geometry of both systems are not similar, we need to use jacobians for master-slave control due to the intrinsic dynamic differences between master and slave joints motion. So, algebraic IK is not usefull except for reaching some specific points without master control.&lt;/p&gt;&#xA;&lt;p&gt;Howhever, if the master control velocity is low regarding the control loop speed (= increment betwwen two frames), controlling slave by using IK (if exists) and ordering velocities proportionnal to joint courses is equivalent to using pure jacobian based control.&lt;/p&gt;&#xA;" OwnerUserId="27502" LastEditorUserId="27502" LastEditDate="2020-12-05T15:10:13.513" LastActivityDate="2020-12-05T15:10:13.513" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21468" PostTypeId="1" CreationDate="2020-12-06T07:43:51.090" Score="0" ViewCount="12" Body="&lt;p&gt;I am aware of the conventional Lane Keeping Assistance Systems (LKAS) approaches like&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.hackster.io/kemfic/curved-lane-detection-34f771&quot; rel=&quot;nofollow noreferrer&quot;&gt;sliding windows-based&lt;/a&gt; and&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://towardsdatascience.com/lane-detection-with-deep-learning-part-2-3ba559b5c5af&quot; rel=&quot;nofollow noreferrer&quot;&gt;CNN-based&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;The end result of either of them is 2 lines of reference and the steering angle can be approximated using the imaginary line running between the both detected lines. I suppose the distance measurements are done in pixels. A PID controller can then be devised to replicate a line-follower method.&lt;/p&gt;&#xA;&lt;p&gt;What if we only have a single line, for e.g., the white marking on the left end of the road. How can one still navigate the car autonomously ?&lt;/p&gt;&#xA;" OwnerUserId="26766" LastEditorUserId="26766" LastEditDate="2020-12-09T02:34:57.997" LastActivityDate="2020-12-09T02:34:57.997" Title="Lane Keeping Assistance Systems (LKAS) but with only one reference line" Tags="&lt;computer-vision&gt;&lt;line-following&gt;&lt;autonomous-car&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21469" PostTypeId="1" AcceptedAnswerId="21474" CreationDate="2020-12-06T15:32:35.500" Score="1" ViewCount="44" Body="&lt;p&gt;Why do we say a robotic arm has 2 degrees of freedom even though the two joints rotate along the same axis? Why isn't it called a 1 dof robot?&lt;/p&gt;&#xA;" OwnerUserId="27539" LastEditorUserId="110" LastEditDate="2020-12-07T00:55:13.750" LastActivityDate="2020-12-09T04:55:27.870" Title="Why do we say a robotic arm have 2 dof even though the two joints rotates along the same axis?" Tags="&lt;kinematics&gt;&lt;mechanism&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21470" PostTypeId="2" ParentId="21466" CreationDate="2020-12-06T16:05:07.173" Score="0" Body="&lt;p&gt;You are basically describing an object 3D-reconstruction device. Though usually they use a turntable and fixed camera, but the principle is the exact same. See how this &lt;a href=&quot;http://www.aoki.ecei.tohoku.ac.jp/mvs/&quot; rel=&quot;nofollow noreferrer&quot;&gt;dataset&lt;/a&gt; were created. I also know for sure that people sometimes instead use a robotic arm rather than a turntable, so your idea is definitely feasible. The field you want to look into is called multi-view stereo.&lt;/p&gt;&#xA;&lt;p&gt;I am just going to assume you can find a working multi-view stereo algorithm. So you need to find a way to estimate the positions between the cameras. A Mono-VIO algorithm would work, but is probably not the best solution. One problem is that many Mono-VIO algorithms assume they are always moving to a new area. Basically it forgets past data, because it is irrelevant to the current position. However, in your case the camera is moving in a limited area(the span of the table). So you would you actually want your algorithm to store all the data related to the table, and just use that for pose estimation. They also tend to drift over time, which is again related to not using past data. If you are familiar with SLAM/VIO terms, you want your algorithm to always be doing localization, rather than odometry.&lt;/p&gt;&#xA;&lt;p&gt;If you do decide to still go the Mono-VIO route then I would recommend &lt;a href=&quot;https://github.com/UZ-SLAMLab/ORB_SLAM3&quot; rel=&quot;nofollow noreferrer&quot;&gt;ORB-SLAM3&lt;/a&gt;. It actually does do localization, so it should hopefully mitigate the drifting problem. However, it would still probably do a large amount of irrelevant work.&lt;/p&gt;&#xA;&lt;p&gt;As I said before this is actually a pretty common sort of device to build. So you do have other potential options.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Use the robot arm positioning system. If you have a high quality robot arm with good encoders, then it will know how far it moves better than any Mono-VIO system can estimate. You need to calibrate your camera/robot arm together using &lt;a href=&quot;http://campar.in.tum.de/Chair/HandEyeCalibration&quot; rel=&quot;nofollow noreferrer&quot;&gt;Hand-eye calibration software&lt;/a&gt;, and now when your robot moves you also know how far the camera moves.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Use &lt;a href=&quot;https://www.youtube.com/watch?v=-k3f0G5xTOQ&quot; rel=&quot;nofollow noreferrer&quot;&gt;fiduciary markers like aruco/April tags&lt;/a&gt;. Basically put a couple of markers around the table. Your camera can then estimate its position relative to those markers.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Build custom VIO/SLAM system that does more relocalization, and is more customized to your specific problem.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;To answer your questions:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Is it possible to get depth information with metric scaling about the&#xA;objects lying on my desk from the received data of the Mono-VIO&#xA;system?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Can someone tell me if this works or if the drift is too high or the accuracy is too low.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Could work with the right Mono-VIO algorithm. A specialized version ,however, would be better.&lt;/p&gt;&#xA;&lt;p&gt;Overall I would recommend options 1 or 2. Option 3 or  an off the shelf Mono-VIO algorithm should only be attempted if you have to.&lt;/p&gt;&#xA;" OwnerUserId="15265" LastEditorUserId="15265" LastEditDate="2020-12-06T22:47:36.787" LastActivityDate="2020-12-06T22:47:36.787" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21473" PostTypeId="2" ParentId="15515" CreationDate="2020-12-08T07:58:34.960" Score="1" Body="&lt;p&gt;23 cm from center to center. The wheel's width is 2.4 cm.&lt;/p&gt;&#xA;" OwnerUserId="27544" LastActivityDate="2020-12-08T07:58:34.960" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21474" PostTypeId="2" ParentId="21469" CreationDate="2020-12-08T08:39:37.923" Score="2" Body="&lt;p&gt;The degrees of freedom of a serial manipulator equals its number of joints. A more general definition can be found on &lt;a href=&quot;https://en.wikipedia.org/wiki/Degrees_of_freedom_(mechanics)&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wikipedia&lt;/a&gt;. It is about being able to describe the state (configuration) of the robot (in terms of position) and the length of the vector required to describe the configuration. For a serial kinematic chain the length of the vector equals the number of joints. Even when the setup is redundant, the objective is not to express the pose of the final frame (tool center point or end effector), but the robot itself.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-12-08T08:39:37.923" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21475" PostTypeId="1" AcceptedAnswerId="21476" CreationDate="2020-12-08T15:27:39.380" Score="0" ViewCount="37" Body="&lt;p&gt;I have a velocity command, which is:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$v=k_1\rho cos(\alpha)$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;where each quantity &lt;span class=&quot;math-container&quot;&gt;$\rho$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\alpha$&lt;/span&gt; depend by the time.&lt;/p&gt;&#xA;&lt;p&gt;I would like now to take the time derivative of this, in order to use it as feedforward. The problem is that I have also an angular velocity command, which is much more complex than this, and do it by hand would be almost impossible to do it without mistakes.&lt;/p&gt;&#xA;&lt;p&gt;So, my question is:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;What is a matlab code that takes the time derivative of expression of this type?&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="21797" LastActivityDate="2020-12-08T16:02:38.080" Title="Matlab code to take time derivatives" Tags="&lt;mobile-robot&gt;&lt;control&gt;&lt;matlab&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21476" PostTypeId="2" ParentId="21475" CreationDate="2020-12-08T16:02:38.080" Score="2" Body="&lt;p&gt;In newer versions of Matlab (I can't remember when this change was made) you can define symbolic variables as a function of time, like&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;syms rho(t) alpha(t);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Symbolic constants are anything defined not as a function of time, like:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;syms k1;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Then you can define your expression for v without needing to declare v itself as symbolic:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;v = k1*rho*cos(alpha);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Finally, if you want the derivative of this, since you've defined &lt;span class=&quot;math-container&quot;&gt;$\rho$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\alpha$&lt;/span&gt; as being time-dependent, just call the &lt;code&gt;diff&lt;/code&gt; command:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;dvdt = diff(v, t);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;which yields the following result:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt; dvdt = diff(v, t)&#xA; &#xA;dvdt(t) =&#xA; &#xA;k1*cos(alpha(t))*diff(rho(t), t) - k1*sin(alpha(t))*rho(t)*diff(alpha(t), t)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;You can clean it up by recognizing that &lt;code&gt;diff(rho(t), t)&lt;/code&gt; is Matlab's way of expressing &lt;span class=&quot;math-container&quot;&gt;$\dot{\rho}$&lt;/span&gt; and likewise for &lt;span class=&quot;math-container&quot;&gt;$\alpha$&lt;/span&gt;, so you wind up with&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;v = k_1 \rho \cos{\left(\alpha\right)} \\&#xA;\frac{d}{dt}v = k_1 \cos{\left(\alpha\right)}\dot{\rho} - k_1 \sin{\left(\alpha\right)} \rho \dot{\alpha}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-12-08T16:02:38.080" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21477" PostTypeId="1" AcceptedAnswerId="21480" CreationDate="2020-12-08T20:11:36.457" Score="0" ViewCount="41" Body="&lt;p&gt;I am working on fusing IMU and Camera Sensor Fusion for the Drone to precisely land on the target location.&lt;/p&gt;&#xA;&lt;p&gt;With the Camera, I am tracking the April Tag which is on the ground. This gives me the x,y,z position of the camera in the drone with respect to the April tag on the ground.&lt;/p&gt;&#xA;&lt;p&gt;With the IMU, I am measuring the Acceleration and Angular rates of the drone. From which I am integrating and finding the x,y,z position of the drone with respect to the starting point.&lt;/p&gt;&#xA;&lt;p&gt;My question is,&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;In my case, the Camera provides the x,y,z position with respect to April Tag. And IMU provides x,y,z position with respect to its starting point. How these two different position information fused together help in improving the position accuracy of my system ??&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Can I use the Camera x,y,z position to reduce the drift in the IMU. Or Should I only use GPS information to reduce the drift in IMU ??&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="27548" LastActivityDate="2021-01-08T02:04:05.367" Title="IMU-Camera Senor Fusion" Tags="&lt;kalman-filter&gt;&lt;imu&gt;&lt;cameras&gt;&lt;sensor-fusion&gt;&lt;gps&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21478" PostTypeId="1" CreationDate="2020-12-08T22:16:47.990" Score="0" ViewCount="36" Body="&lt;p&gt;I'm experimenting with a device for tuning piano strings. It attaches to the piano's tuning pins and turns them slightly by applying a torque impulse. It is a semi-automatic process, handled by a human operator.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Operator presses a piano key, control system records the tone and calculates the frequency error. (The set frequency is known.)&lt;/li&gt;&#xA;&lt;li&gt;The control system calculates the required size of the torque impulse.&lt;/li&gt;&#xA;&lt;li&gt;The device applies the torque impulse.&lt;/li&gt;&#xA;&lt;li&gt;The operator presses the key again. If pitch error is still large, repeat from 1.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;The change in frequency caused by a torque impulse is a function of the impulse size and the current frequency of the string.&lt;/p&gt;&#xA;&lt;p&gt;I'm now going to design a control system for this. So far I've found that it probably is a Markov process, since it is not time dependent and not depends on previous states. But what could be a suitable control method for this application?&lt;/p&gt;&#xA;" OwnerUserId="27547" LastActivityDate="2021-05-08T00:06:00.543" Title="Control method advice for Markov (?) process" Tags="&lt;control&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="21479" PostTypeId="2" ParentId="21478" CreationDate="2020-12-08T23:03:40.563" Score="0" Body="&lt;p&gt;There are multiple methods to pose this problem. The good news is, that you are right, and it is a time-invariant system, if you consider multiple keystrokes for tuning one key.&lt;/p&gt;&#xA;&lt;p&gt;I have no idea about the intricacies of piano/guitar/other string instrument tuning, but it might be worthwhile to check if it is a &lt;a href=&quot;https://courses.washington.edu/bioen302/Lecture/302_LTI_Control_notes.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;linear time invariant system&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;If you do not want to/cannot go down the LTI route, you can just disregard any highly theoretical controls approach and try an intuitive approach, similar to what you described in your steps, but instead of trying to come up with a torque value in step 2, you just use increments, a constant large increment if you are far away, constant small increment if you are close.&lt;/p&gt;&#xA;&lt;p&gt;You can see a guitar tuning variant explained &lt;a href=&quot;https://www.youtube.com/watch?v=EJltXLUTFHk&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&#xA;A detailed description of a different motorized guitar tuning solution can be found &lt;a href=&quot;https://www2.spsc.tugraz.at/www-archive/downloads/MGT_documentation.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Obviously Machine Learning can also be used to solve this problem. You can pose it as a reinforcement learning problem, where your action space is either discrete (small increment to tighten or to loosen) or continuos (the torque range) your observation space could be the current value of the torque (for the increments) or the frequency response. The reward function is how far you are form the ideal frequency. This would be the lease efficient way to do it, but probably the most fun one...&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-12-08T23:03:40.563" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21480" PostTypeId="2" ParentId="21477" CreationDate="2020-12-09T01:22:13.733" Score="1" Body="&lt;p&gt;&lt;strong&gt;Short answers:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;In my case, the Camera provides the x,y,z position with respect to&#xA;April Tag. And IMU provides x,y,z position with respect to its&#xA;starting point. How these two different position information fused&#xA;together help in improving the position accuracy of my system ??&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;With an Extended Kalman Filter(EKF). IMU for short term prediction step, and Camera measurements for the slower April Tags position updates. The IMU x,y,z positions are supposed to be integrated from the latest position, not some arbitrary starting point.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Can I use the Camera x,y,z position to reduce the drift in the IMU. Or&#xA;Should I only use GPS information to reduce the drift in IMU ??&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes. And you should use both.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Longer discussion:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;The way this is properly done is with an EKF. The IMU gives you position information at a much faster rate in the prediction step portion. The camera, and gps measurements update the EKF estimate at a much slower rate. You can find a ton of papers,tutorials and code online just looking for IMU+GPS EKF.&lt;/p&gt;&#xA;&lt;p&gt;Should also show you that the way you are describing using the IMU is wrong. You integrate for x,y,z information from the IMU from the last known good position(e.g your latest camera measurement), not from some arbitrary starting point. After a couple of seconds integrating the IMU is already quite inaccurate, so can't use it from some far away position anyways.&lt;/p&gt;&#xA;&lt;p&gt;The place where you do have a coordinate system mismatch is with the camera and the GPS. GPS gives you GPS coordinates and camera information is relative to the April tag. For this you have 2 options. For both you have to choose a main coordinate frame. For these examples I am going to pick the camera(&lt;span class=&quot;math-container&quot;&gt;$c$&lt;/span&gt;).&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;1: Use relative updates.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;We had a gps measurement at &lt;span class=&quot;math-container&quot;&gt;$p_1^g$&lt;/span&gt; which coincided with our latest position &lt;span class=&quot;math-container&quot;&gt;$p_1^c$&lt;/span&gt;. We now get a new gps measurment &lt;span class=&quot;math-container&quot;&gt;$p_2^g$&lt;/span&gt;. We can now calculate the relative transform from the first gps to the second. &lt;span class=&quot;math-container&quot;&gt;$p_2^g-p_1^g=p_{2,1}$&lt;/span&gt;. And then update the position in the camera frame using this relative transform. &lt;span class=&quot;math-container&quot;&gt;$p_2^c=p_1^c+p_{2,1}$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;2: Use an offset&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Maybe you know where the April tag is in GPS coordinates. Or the first time you observe the April tag you record the GPS and camera position. You can then cal offset between camera and GPS frames. So that when you get a GPS measurement &lt;span class=&quot;math-container&quot;&gt;$p_2^g$&lt;/span&gt; you can calculate the position in the camera frame &lt;span class=&quot;math-container&quot;&gt;$p_2^c=p_2^g+offset$&lt;/span&gt;.&lt;/p&gt;&#xA;" OwnerUserId="15265" LastActivityDate="2020-12-09T01:22:13.733" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21481" PostTypeId="2" ParentId="21469" CreationDate="2020-12-09T04:55:27.870" Score="0" Body="&lt;p&gt;The number of degrees of freedom any mechanism has (including a robot) is solely based on how many different ways there are to change its configuration (the position and orientation of every part of the system).&lt;/p&gt;&#xA;&lt;p&gt;In the case of a robot arm with two joints, you can change its configuration in two different ways (by moving each joint) so it is said to have two degrees of freedom.&lt;/p&gt;&#xA;" OwnerUserId="10414" LastActivityDate="2020-12-09T04:55:27.870" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21482" PostTypeId="2" ParentId="21459" CreationDate="2020-12-09T07:23:04.040" Score="0" Body="&lt;p&gt;Turtlebot+ROS is good option but I find turtlebot to be very expensive.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://centaurirobotics.in/dev/&quot; rel=&quot;nofollow noreferrer&quot;&gt;CK-9&lt;/a&gt; is a good alternative. I was able to implement ROS packages for autonomous navigation and waypoint coverage fairly easily on it.&lt;/p&gt;&#xA;&lt;p&gt;If you are experienced in programming and want abstraction for mechanical and electronics part of the robot, it is a good option.&lt;/p&gt;&#xA;" OwnerUserId="13969" LastActivityDate="2020-12-09T07:23:04.040" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21484" PostTypeId="1" CreationDate="2020-12-09T13:20:35.290" Score="1" ViewCount="161" Body="&lt;p&gt;I find that in some robotic toolboxs(e.g. FROST &lt;a href=&quot;https://ayonga.github.io/frost-dev/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://ayonga.github.io/frost-dev/index.html&lt;/a&gt;) they use&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/1gLXn.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1gLXn.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;to calculate time derivative of jacobian matrix.&lt;/p&gt;&#xA;&lt;p&gt;Here is my guess about the reason of using this formula:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/o0N8i.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/o0N8i.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;if this is right, could anyone please tell me how to prove this part which shows that derivative and partial derivative can exchange?&#xA;&lt;a href=&quot;https://i.stack.imgur.com/m9vaY.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/m9vaY.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Thanks in advance!!&lt;/p&gt;&#xA;" OwnerUserId="27555" LastActivityDate="2020-12-09T16:13:12.963" Title="Questions about time derivative of jacobian matrix" Tags="&lt;matlab&gt;&lt;jacobian&gt;&lt;matrix&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21485" PostTypeId="1" CreationDate="2020-12-09T15:22:17.970" Score="0" ViewCount="25" Body="&lt;p&gt;I am working on a robotic path finding problem for my personal project and I am stuck on how to get from point A to point B.&lt;/p&gt;&#xA;&lt;p&gt;Please note that this is a visual robot, as I am looking to implement it software-wise first based on all the requirements I found (sensors, mechanics with my team etc). Once the software is done, we will be transferring the code into the actual robot which we will be building in the next months.&lt;/p&gt;&#xA;&lt;p&gt;The requirements of the robot are:&lt;/p&gt;&#xA;&lt;p&gt;Can move at any direction with 10 degrees interval (it can turn from 0 to 10˚, 0 to -10˚, 0 to 50˚, but not 0 to 5 or 0 to 7.&#xA;Has a fixed movement of 0.5 meters. As the robot it tall, it can only move distances of a multiple of 0.5 meters at any direction (it can turn from 0 to 70˚ and move to 0.5 meters at that direction.&#xA;Each point can be reached with 0.1m offset. For instance, the robot doesn't have to reach to point B exactly, but can reach within 0.1m away from the point at any direction.&#xA;Below I have an illustration of the robot starting at point A and needs to reach to point B. I forgot to add a compass where 0˚ is east, 90 is North, 180 is west and 270 is south. So the point B is southeast of the point A with an angle of 312˚.&lt;/p&gt;&#xA;&lt;p&gt;The second figure, illustrates roughly the path the robot should take to reach to point B from point A.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/v5EqC.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/v5EqC.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I am writing the program on Java and help would be very appreciated!&lt;/p&gt;&#xA;" OwnerUserId="27556" LastActivityDate="2020-12-09T15:22:17.970" Title="Robot movement between point A and B with fixed angle and step length" Tags="&lt;mobile-robot&gt;&lt;path-planning&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21486" PostTypeId="2" ParentId="21484" CreationDate="2020-12-09T16:13:12.963" Score="1" Body="&lt;p&gt;If you use the partial differentiation you can get to that expression as&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;\begin{align}&#xA;\frac{dJ}{dt} &amp;amp;= \frac{\partial J}{\partial q}\frac{\partial q}{\partial t} \\&#xA;\frac{dJ}{dt} &amp;amp;= \frac{\partial J}{\partial q}\frac{d q}{d t}\\&#xA;\frac{dJ}{dt} &amp;amp;= \frac{\partial (J \dot q)}{\partial q}&#xA;\end{align}&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;In the last line &lt;span class=&quot;math-container&quot;&gt;$\dot q$&lt;/span&gt; is a constant that can enter the partial differentiation part.&lt;/p&gt;&#xA;" OwnerUserId="21229" LastActivityDate="2020-12-09T16:13:12.963" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="21487" PostTypeId="1" CreationDate="2020-12-10T10:12:10.303" Score="0" ViewCount="39" Body="&lt;p&gt;I am trying to learn DH parameters for this anthropomorphic arm is.&lt;/p&gt;&#xA;&lt;p&gt;What I understand is robot's/or serial arms can have different initial position.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/39ke8.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/39ke8.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;But here, how is theta 3 = theta 3 + pi/2?&lt;/p&gt;&#xA;&lt;p&gt;I am struggling to intuitively understand why the pi/2 is added&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/7tU8N.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7tU8N.png&quot; alt=&quot;initial pose 2. I don't get why theta 3 = theta 3 + pi/2&quot; /&gt;&lt;/a&gt;.com/AwLrb.png&lt;/p&gt;&#xA;" OwnerUserId="26190" LastActivityDate="2020-12-20T20:35:37.270" Title="Adding 90 degrees to DH parameter" Tags="&lt;kinematics&gt;&lt;forward-kinematics&gt;&lt;dh-parameters&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21488" PostTypeId="2" ParentId="21487" CreationDate="2020-12-10T13:25:42.330" Score="0" Body="&lt;p&gt;There are two kinds of (rotary or linear) position encoders: relative and absolute. A relative encoder only &amp;quot;knows&amp;quot; what the position is &lt;strong&gt;relative&lt;/strong&gt; to what position it was in when the encoder was powered on.&lt;/p&gt;&#xA;&lt;p&gt;The DH parameters define the arm's joint arrangement. It looks like your upper/first image would be the DH parameters with the joints all at an &lt;strong&gt;absolute&lt;/strong&gt; zero value.&lt;/p&gt;&#xA;&lt;p&gt;If the encoders were relative, you could turn power off to the arm, reposition it manually, and then power it back on. The relative encoder has no knowledge of what happened while it was powered off and so they always default to zero on startup.&lt;/p&gt;&#xA;&lt;p&gt;The joint configuration didn't change, &lt;strong&gt;but&lt;/strong&gt; your value for &lt;span class=&quot;math-container&quot;&gt;$\theta_3$&lt;/span&gt; changed because it's now offset - this is the information that was lost when the joint was reconfigured.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;span class=&quot;math-container&quot;&gt;$\pi/2$&lt;/span&gt; value is the &amp;quot;joint angle correction&amp;quot; to account for the fact that you are treating the joint angle &lt;span class=&quot;math-container&quot;&gt;$\theta_3$&lt;/span&gt; as &amp;quot;zero&amp;quot; when the arm is straight.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-12-10T13:25:42.330" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21489" PostTypeId="1" CreationDate="2020-12-10T16:18:01.437" Score="1" ViewCount="142" Body="&lt;p&gt;I'm trying to find the state-space model of the following ball-in-tube system.&#xA;I designed the SISO system, with the h(ball height), w(angular velocity of propeller), and I(current) as the system states. I tried to find out the stat-space model by using the state-space model of DC-motor and dh/dt = Kw - v0 (experimentally obtained, where K is constant, v0 is an intercept).&#xA;The question is how I can deal with v0 to obtain the state-space model form of dx/dt = Ax+Bu, y = Cx +Du.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/3f8H7.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3f8H7.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="27565" LastActivityDate="2020-12-20T14:03:04.577" Title="How to consider gravity for the state space modeling" Tags="&lt;control&gt;&lt;automatic&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="21490" PostTypeId="2" ParentId="21489" CreationDate="2020-12-10T17:35:27.553" Score="0" Body="&lt;p&gt;Make gravity a state that doesn't change, like:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\left[&#xA;\begin{matrix}&#xA;\dot{x}\\&#xA;0&#xA;\end{matrix}\right] = \left[\begin{matrix}&#xA;A &amp;amp; 0 \\&#xA;0 &amp;amp; 0&#xA;\end{matrix}\right]\left[\begin{matrix}&#xA;x \\&#xA;g&#xA;\end{matrix}\right] + \left[\begin{matrix}&#xA;B \\&#xA;0&#xA;\end{matrix}\right]u&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Then gravity is a state and you can include it with whatever coefficients you need. You of course won't be able to control the system, because there is no path back to manipulate the gravity state, but you can go for the lesser &amp;quot;&lt;a href=&quot;https://en.wikipedia.org/wiki/Controllability#Stabilizability&quot; rel=&quot;nofollow noreferrer&quot;&gt;stabilizable&lt;/a&gt;&amp;quot; system and control the states that actually matter.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-12-10T17:35:27.553" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21491" PostTypeId="1" CreationDate="2020-12-11T16:56:46.623" Score="0" ViewCount="11" Body="&lt;p&gt;I have the following problem: I have an x,y,z reference frame that is to be rotated around its x-axis and around its y-axis. Three axial motors Mp,Mq,Mr (120 deg apart) are responsible for these rotations -- the motors are aligned along the z-axis (they are coming out of the screen -- see picture below). I was told to use the DCM matrices, however I would like to be able to visualize the math that I need to map the x,y rotations to the rotations of the three motor axes.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Zjt13.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Zjt13.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;In contrast, if I have to displace the frame along its x or y axis, I can use three radial motors Ma,Mb,Mc (the system has a total of 6 motors). I don't have any problems there. I 'see' the math, I simply project the x and y displacements on the three motors (see picture below) and the system behaves as expected ...&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/tnIoi.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tnIoi.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="27573" LastActivityDate="2020-12-11T16:56:46.623" Title="Frame Rotation to Motor Displacement" Tags="&lt;motor&gt;&lt;orientation&gt;&lt;frame&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21492" PostTypeId="1" CreationDate="2020-12-12T11:43:22.830" Score="0" ViewCount="109" Body="&lt;p&gt;I am working on calculating the Jacobian Determinant to find the singularity of my 5 DOF Robotic arm, I have calculated the jacobian matrix, and the matrix I got is a very large value&#xA;As it is non square matrix(6x5),For singularity I am using Pseudo Inverse method( I studied in a Research Paper)&#xA;Jinv=(Jtrans)&lt;em&gt;(Inverse(J&lt;/em&gt;Jtrans))&#xA;But In Matlab when I calculate the Inverse of (J*Jtrans) It goes Out Of memory, what is the alternate or right method to do that&#xA;I know It is not the Matlab forum but I want to know is that right jacobian matrices Or I am doing some thing wrong in calculating the jacobian( as being very large matrice)&lt;a href=&quot;https://i.stack.imgur.com/REv4x.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/REv4x.png&quot; alt=&quot;Jacob1&quot; /&gt;&lt;/a&gt;I am also attaching the code  am using&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/REv4x.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/REv4x.png&quot; alt=&quot;code1&quot; /&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/B6jqc.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/B6jqc.png&quot; alt=&quot;code2&quot; /&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/S3kCm.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/S3kCm.png&quot; alt=&quot;code3&quot; /&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/FURVg.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FURVg.png&quot; alt=&quot;freebodydiagram&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="27171" LastActivityDate="2020-12-12T20:52:49.863" Title="how to find Singularity and jacobian Inverseof 5 DOF Robotic arm?" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;matlab&gt;&lt;dynamics&gt;&lt;jacobian&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21494" PostTypeId="2" ParentId="21492" CreationDate="2020-12-12T20:52:49.863" Score="1" Body="&lt;p&gt;Are you trying to somehow use this to determine lengths of the linkages later or are you trying to find the singular pose of one specific manipulator?&lt;/p&gt;&#xA;&lt;p&gt;In case you are doing a study on how to calculate linkages lengths, you need a PC with more RAM if you want to progress.&lt;/p&gt;&#xA;&lt;p&gt;If you already have values for the lengths, you should not use these as symbols, just use them as values instead. The only symbols should be the joint angles. That will make the matrix smaller and will fit in memory.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-12-12T20:52:49.863" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21496" PostTypeId="1" CreationDate="2020-12-13T01:01:14.537" Score="0" ViewCount="53" Body="&lt;p&gt;I've spent far too long this evening researching whether it's possible to clone a Starship; for my own amusement and/or to terrorise the neighbourhood. A &lt;a href=&quot;https://www.starship.xyz/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Starship delivery robot&lt;/a&gt;, that is, not the &lt;a href=&quot;https://www.spacex.com/vehicles/starship/&quot; rel=&quot;nofollow noreferrer&quot;&gt;SpaceX&lt;/a&gt; Starship.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/goRFgb.png&quot; alt=&quot;Starship robot&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;Amongst other &lt;a href=&quot;https://www.slideshare.net/Codiax/sergii-kharagorgiiev-chief-computer-vision-engineer-at-starship-technologies-selfdriving-robots-for-revolutionary-local-delivery&quot; rel=&quot;nofollow noreferrer&quot;&gt;detail&lt;/a&gt; there's a fair bit of info on the basic &lt;a href=&quot;https://www.post.ch/-/media/post/ueber-uns/medienmitteilungen/2017/factsheet-lieferroboter.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;specifications&lt;/a&gt; knocking about:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Weight: 23kg empty&lt;/li&gt;&#xA;&lt;li&gt;Payload: 10 kg&lt;/li&gt;&#xA;&lt;li&gt;Battery: 18.5V 8000 mAh&lt;/li&gt;&#xA;&lt;li&gt;Runtime: 2 hours / 6 km&lt;/li&gt;&#xA;&lt;li&gt;Speed: 3 km/h nominal; 6 km/h max&lt;/li&gt;&#xA;&lt;li&gt;Motors: brushless&lt;/li&gt;&#xA;&lt;li&gt;Wheel diameter: 200mm (derived from &lt;a href=&quot;https://www.dimensions.com/element/starship-robot&quot; rel=&quot;nofollow noreferrer&quot;&gt;Dimensions.com&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Utilising the calculation elaborated in &lt;a href=&quot;https://medium.com/husarion-blog/10-steps-to-choosing-the-right-motors-for-your-robotic-project-bf5c4b997407&quot; rel=&quot;nofollow noreferrer&quot;&gt;this Medium post&lt;/a&gt; and Robot Shop's &lt;a href=&quot;https://www.robotshop.com/community/blog/show/drive-motor-sizing-tool&quot; rel=&quot;nofollow noreferrer&quot;&gt;motor sizing tool&lt;/a&gt;, I reckon the six motors need to rotate at about 80 rpm, with a torque of about 1 Nm and power of 6 W each if I consider a similar weight. I can sort of get there with a geared DC motor something like this &lt;a href=&quot;https://www.active-robots.com/catalog/product/view/id/7874/s/98-rpm-econ-gear-motor-638350/category/261/&quot; rel=&quot;nofollow noreferrer&quot;&gt;economy variant from Active Robots&lt;/a&gt; and can probably get even closer with a bit more research.&lt;/p&gt;&#xA;&lt;p&gt;But I note the above spec lists use of &amp;quot;brushless electric motors.&amp;quot; If the brushless motors are anything like those i used in aircraft then they'll turn at a high rpm. Unlike DC brushed motors, I'm struggling to find (m)any turnkey brushless motors with a gearbox ready-attached and then opening up a whole world of pain to find the right combination. Is brushless + gearbox a normal use-case, or am I going down blind alley?&lt;/p&gt;&#xA;" OwnerUserId="27576" LastActivityDate="2020-12-13T18:30:43.183" Title="Is it uncommon to use a gearbox with a brushless motor?" Tags="&lt;motor&gt;&lt;brushless-motor&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21498" PostTypeId="2" ParentId="21496" CreationDate="2020-12-13T18:30:43.183" Score="1" Body="&lt;p&gt;Yes, brushless and grearbox is a normal usecase. Due to the popular application of using brushless motors on drone propellers other applications are harder to find. The keywords &amp;quot;Brushless Planetary Gear Motor&amp;quot; gives me plenty good search results.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2020-12-13T18:30:43.183" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21499" PostTypeId="1" AcceptedAnswerId="21500" CreationDate="2020-12-13T18:51:25.863" Score="0" ViewCount="171" Body="&lt;p&gt;I would like to write a Matlab code for an angular velocity of this type:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\omega=\omega_{fb}+sat(\omega_{ff})$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;where &lt;span class=&quot;math-container&quot;&gt;$\omega_{fb}$&lt;/span&gt; is a feedback angular velocity and &lt;span class=&quot;math-container&quot;&gt;$\omega_{ff}$&lt;/span&gt; is a feedforward angular velocity.&lt;/p&gt;&#xA;&lt;p&gt;As you can see, the feedforward term has been saturated.&lt;/p&gt;&#xA;&lt;p&gt;The problem is that there is not a saturation function in Matlab. Moreover, I would like to do this inside a Matlab function block, and not use the saturation block of Simulink.&lt;/p&gt;&#xA;&lt;p&gt;I have heard that some use the atan() function to perform the saturation, but I am not sure I can do this.&lt;/p&gt;&#xA;&lt;p&gt;So, my question is:&lt;/p&gt;&#xA;&lt;p&gt;How can I define the saturation function in Matlab?&lt;/p&gt;&#xA;" OwnerUserId="21797" LastEditorUserId="21797" LastEditDate="2020-12-14T07:12:47.783" LastActivityDate="2020-12-14T07:12:47.783" Title="How can I define the saturation function in Matlab?" Tags="&lt;control&gt;&lt;matlab&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21500" PostTypeId="2" ParentId="21499" CreationDate="2020-12-13T22:08:47.810" Score="2" Body="&lt;p&gt;You could always employ conditional expressions that are clear and explicit.&#xA;Instead, if you like compact forms, you may implement saturation as below:&lt;/p&gt;&#xA;&lt;pre class=&quot;lang-matlab prettyprint-override&quot;&gt;&lt;code&gt;w = w_fb + min(hi, max(low, w_ff));&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;where &lt;code&gt;hi&lt;/code&gt; and &lt;code&gt;low&lt;/code&gt; are the upper and lower bounds of the saturation.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastActivityDate="2020-12-13T22:08:47.810" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21502" PostTypeId="1" CreationDate="2020-12-14T01:37:26.707" Score="0" ViewCount="22" Body="&lt;p&gt;I want to make a CNC machine using a Dremel for the spindle and NEMA 17 motors. For the movement, I have chosen to go with the 2020 aluminum extrusion along with the wheels and other things. I was wondering whether a GT2 belt and pulley will be sufficient enough to move it accurately and without any step loss from the belt slipping. If not, can I increase the thickness of the belt or something to make it not slip? I plan on cutting cardboard, foamboard, and some softwood.&lt;/p&gt;&#xA;" OwnerUserId="26747" LastActivityDate="2020-12-14T01:37:26.707" Title="Dremel CNC with belt drive?" Tags="&lt;stepper-motor&gt;&lt;cnc&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21503" PostTypeId="1" AcceptedAnswerId="21504" CreationDate="2020-12-14T15:57:59.277" Score="1" ViewCount="41" Body="&lt;p&gt;I have the following situation. I have computed the linear and angular velocity which are the controls for a mobile robot, which have the form:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$v_d=v_{fb}+v_{ff}$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\omega_d=\omega_{fb}+\omega_{ff}$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;now, I would like to define the acceleration controls, and I know that I can do it in the following way:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$a_v=(v_d-v_{actual})+\dot{v_d}$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$a_\omega=(\omega_d-\omega_{actual})+\dot{\omega_d}$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;I would like to do this using Matlab\Simulink. This code is inside a Matlab function clock.&lt;/p&gt;&#xA;&lt;p&gt;my question is:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Is there a way I can compute the feedforward terms &lt;span class=&quot;math-container&quot;&gt;$\dot{v_d}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\dot{\omega_d}$&lt;/span&gt; without computing them manually?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I would like to avoid to compute them manually since their expression is really complicated and it is almost impossible to not make mistakes.&lt;/p&gt;&#xA;" OwnerUserId="21797" LastEditorUserId="21797" LastEditDate="2020-12-14T16:28:54.843" LastActivityDate="2020-12-14T16:28:54.843" Title="How do I compute the feedforward terms in a control law using Matlab?" Tags="&lt;mobile-robot&gt;&lt;control&gt;&lt;matlab&gt;&lt;simulation&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21504" PostTypeId="2" ParentId="21503" CreationDate="2020-12-14T16:17:03.830" Score="0" Body="&lt;p&gt;How are you calculating &lt;span class=&quot;math-container&quot;&gt;$v_d$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\omega_d$&lt;/span&gt;? Simulink has a &lt;a href=&quot;https://www.mathworks.com/help/simulink/slref/derivative.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;derivative block&lt;/a&gt;, have you tried using that?&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-12-14T16:17:03.830" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21505" PostTypeId="1" CreationDate="2020-12-14T17:15:48.277" Score="0" ViewCount="52" Body="&lt;p&gt;I have been running the same rviz conf for months and mostly have had no issues. But lately there is often a black screen at rviz startup and it happens seemingly randomly, without any error messages on the console. More percisely, the rviz visualization window where the map and robot TF-s are supposed to appear, just black color window appears and nothing else. The left and right rviz menus are present and look correct. At first it looked like just the map does not load but after trying with several different maps, it does not seem to be related to any specific map file. Also the console last rows say that the map is loaded successfully:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt; Map loaded from data with 651 lanes&#xA;******* Map V2 Is Loaded successfully from the Behavior Selector !!&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;So far just closing everything and running it again has helped but the issue appears more and more often, approx 50% of the cases. What can be wrong? Can anyone help me to locate the problem?&lt;/p&gt;&#xA;&lt;p&gt;I also posted the question in ROS answers forum but didn't get any feedback or answers.&lt;/p&gt;&#xA;&lt;p&gt;ROS Melodic, Ubuntu 18.04, Nvidia GTX 2080 Super.&lt;/p&gt;&#xA;" OwnerUserId="27584" LastActivityDate="2021-05-13T19:08:30.873" Title="What causes rviz black screen at startup?" Tags="&lt;ros&gt;&lt;rviz&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21506" PostTypeId="2" ParentId="21505" CreationDate="2020-12-14T17:43:12.280" Score="0" Body="&lt;pre&gt;&lt;code&gt;Also the console last rows say that the map is loaded successfully&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;What map are you loading? Could you share the rviz configuration you are facing issues with? And are you sure the map is what you expect it to be?&lt;/p&gt;&#xA;&lt;p&gt;Also, could you try to launch rviz (bare) without the map and/or any other special plugins you might be using and see if you still face issues? If you don't, there is probably a bug in the plugin/viewer or the map you are using. I suggest turning off everything and launching them one at a time to see when the issues starts and if it persists.&lt;/p&gt;&#xA;" OwnerUserId="27064" LastActivityDate="2020-12-14T17:43:12.280" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="21507" PostTypeId="2" ParentId="15107" CreationDate="2020-12-14T21:28:50.057" Score="0" Body="&lt;p&gt;I found the solution by many tries. It is not guaranteed that it will help you, in my case, this helped.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A good start was &lt;a href=&quot;https://answers.ros.org/question/204024/no-module-named-catkin_pkgpackage-on-catkin_make-w-hydro/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&amp;quot;No module named catkin_pkg.package&amp;quot; on catkin_make w/ Hydro&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;The main steps are already documented at a rather neighboured thread of &lt;a href=&quot;https://stackoverflow.com/questions/63448467/installing-opencv-fails-because-it-cannot-find-skbuild/65479652#65479652&quot;&gt;Installing OpenCV fails because it cannot find “skbuild”&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;But why do I need to have &lt;code&gt;python -m pip -V&lt;/code&gt; = 2.7 and be in the Python base environment in order to get rid of that error?&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The standard &lt;code&gt;python -m pip&lt;/code&gt; command after having applied &lt;code&gt;sudo apt-get install python-pip&lt;/code&gt; under Python 2.7 seems important. &lt;code&gt;python -V&lt;/code&gt; must be &lt;code&gt;Python 2.7.17&lt;/code&gt; or the like. This is probably because the catkin installer simply needs the old pip as the standard assignment, in my case in order to deal with gazebo.&lt;/li&gt;&#xA;&lt;li&gt;By the same time it seems important that &lt;code&gt;sudo apt-get install python3-pip&lt;/code&gt; is installed as well, which is then installed automatically under Python 3.6.&lt;/li&gt;&#xA;&lt;li&gt;If you are in a virtual environment, the configuration of the base environment that is used by the installer is conflicting with versions that are installed in the virtual environment.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://lists.ros.org/pipermail/ros-users/2015-October/069721.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;This comment&lt;/a&gt; of a developer already in 2015 explains why 3.6 is installed even if you have another version like 3.7 or the like installed:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The issue you're running into is that the Python that is turned on by&#xA;default is a non-system Python 2.6 install which is unaffected by&#xA;installing Python packages with apt-get. By using the minimal image&#xA;you avoid having to deal with custom versions of Python.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The old standard 2.6 has now become 3.6; if you install with apt-get, 3.6 will likely be installed. But if you install &lt;code&gt;python-pip&lt;/code&gt; instead of &lt;code&gt;python3-pip&lt;/code&gt;, it will use a python 2.7 version by default.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;apt-get&lt;/code&gt; does not at all care about any python version that you already have. That would mean that one should install as much as possible with apt-get to avoid any Python version conflicts / have an independent install. And using pip should at best be clear by putting the needed &lt;code&gt;python -m&lt;/code&gt; / &lt;code&gt;python3.7 -m&lt;/code&gt; / ... in front.&lt;/p&gt;&#xA;&lt;p&gt;Quoting something else from &lt;a href=&quot;https://answers.ros.org/question/340510/catkin_make-no-module-named-catkin_pkg/&quot; rel=&quot;nofollow noreferrer&quot;&gt;catkin_make: No module named 'catkin_pkg'&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;You'll either have to install catkin_pkg (and a few others) for the&#xA;Python 3 interpreter (using the pip3 command shown by @...),&#xA;or make sure Catkin uses the Python 2 interpreter.&lt;/p&gt;&#xA;&lt;p&gt;My recommendation would be the latter, as the rest of Melodic will&#xA;also have been built against Python 2. Not Python 3.&lt;/p&gt;&#xA;&lt;p&gt;The next release of ROS 1 (Noetic) will support Python 3.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This was in 2019. In 2020, Python 3 is now supported by ROS, but that does not mean that a project that has started in 2019 supports it entirely. So better keep to python2.7 for pip and most of the installations that you do for a project that has started in 2019 and has &lt;code&gt;cmake&lt;/code&gt; errors.&lt;/p&gt;&#xA;&lt;p&gt;Further ideas:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/questions/55342640/invoking-cmake-failed&quot;&gt;Invoking “cmake” failed&lt;/a&gt; on Stack Overflow&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://answers.ros.org/question/348505/installing-python3-catkin-pkg-uninstalls-ros-melodic-desktop-packages/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Installing python3-catkin-pkg uninstalls ros-melodic-desktop packages&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="27423" LastEditorUserId="27423" LastEditDate="2020-12-28T16:02:34.223" LastActivityDate="2020-12-28T16:02:34.223" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21508" PostTypeId="1" AcceptedAnswerId="21543" CreationDate="2020-12-14T21:41:34.690" Score="1" ViewCount="187" Body="&lt;p&gt;I need to detect Aruco/Apriltags markers and perform pose estimation, but I've no particular constraint on their physical size. I'm not talking about the number of square (e.g. 4x4, 6x6, etc.), but of the dimension of the markers in millimeters.  Which size should I choose, in order to maximise the positive detection rate?&#xA;Are large markers easier to detect than smaller ones?&lt;/p&gt;&#xA;&lt;p&gt;I suspect that the full answer will depend non trivially on the distance camera-markers, and possibly on lighting. Assume good lighting and 0.5-1m distance from the markers, if needed.&lt;/p&gt;&#xA;&lt;p&gt;Any reference is appreciated.&lt;/p&gt;&#xA;" OwnerUserId="19260" LastEditorUserId="19260" LastEditDate="2020-12-16T10:58:52.260" LastActivityDate="2020-12-23T13:21:23.187" Title="Is easier to detect a large or a small marker? (Aruco / Apriltags)" Tags="&lt;computer-vision&gt;&lt;pose&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21511" PostTypeId="1" CreationDate="2020-12-15T21:26:02.930" Score="0" ViewCount="52" Body="&lt;p&gt;Why does high derivative gain in PD control results in motor noise or chatter?&#xA;The graph that I see on MATLAB simulation is smooth enough, so following that it should not make noise..&lt;/p&gt;&#xA;" OwnerUserId="26638" LastActivityDate="2020-12-29T17:04:43.757" Title="High derivative gain in PD control" Tags="&lt;control&gt;&lt;pid&gt;&lt;flight-controller&gt;&lt;robotics-toolbox&gt;&lt;logic-control&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21512" PostTypeId="2" ParentId="21511" CreationDate="2020-12-15T21:49:38.480" Score="1" Body="&lt;p&gt;Real signals have noise. Because noise happens on a per-sample basis, you wind up with a derivative that is constantly fluctuating. A derivative gain acts on this fluctuation and feeds it to the motor, resulting in the noise or jitter you observe.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-12-15T21:49:38.480" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21515" PostTypeId="1" CreationDate="2020-12-18T03:02:36.960" Score="0" ViewCount="60" Body="&lt;p&gt;My question relates to the prediction step in EKF SLAM when we get measurements. This is a question I've encountered while implementing EKF SLAM in ROS.&lt;/p&gt;&#xA;&lt;p&gt;At the beginning of the SLAM loop, we predict where we think the robot is by taking its expected location given the previous location and the previous controls. If we have valid measurements we then use those to compute the Kalman gain and update the robot position given these measurements.&lt;/p&gt;&#xA;&lt;p&gt;These measurements, from a LIDAR scan, for example, will probably be captured in between SLAM loops, meaning that at time &lt;span class=&quot;math-container&quot;&gt;$t$&lt;/span&gt; the measurements will be with respect to some time between &lt;span class=&quot;math-container&quot;&gt;$t-1$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$t$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Consider, for example, that the measurements come in at time &lt;span class=&quot;math-container&quot;&gt;$t-0.1$&lt;/span&gt;. In order to make the update step more accurate, shouldn't we predict up to time &lt;span class=&quot;math-container&quot;&gt;$t-0.1$&lt;/span&gt;, update, and then predict up to time &lt;span class=&quot;math-container&quot;&gt;$t$&lt;/span&gt;?&lt;/p&gt;&#xA;" OwnerUserId="27604" LastActivityDate="2021-05-17T05:04:15.253" Title="EKF SLAM Prediction Step" Tags="&lt;slam&gt;&lt;ekf&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21516" PostTypeId="2" ParentId="21515" CreationDate="2020-12-18T04:17:45.223" Score="0" Body="&lt;p&gt;Your intuition is correct. You run the prediction step to the timestamp with the measurement, and then keep on running the prediction step.&lt;/p&gt;&#xA;&lt;p&gt;Basically prediction, and measurement update must always coincide on the same timestamp.&lt;/p&gt;&#xA;&lt;p&gt;Now this is easy to do if you know your time delay. If ,however, you don't know it then you have to somehow figure it out, or design your system to be robust against it. Probably the most common method people use is to add the time delay to your state vector.&lt;/p&gt;&#xA;" OwnerUserId="15265" LastActivityDate="2020-12-18T04:17:45.223" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21517" PostTypeId="1" CreationDate="2020-12-18T13:03:29.323" Score="2" ViewCount="43" Body="&lt;p&gt;I'm trying to compute derivative of end effector positions &lt;span class=&quot;math-container&quot;&gt;$\mathbf{p}\in \mathbb{R}^{3}$&lt;/span&gt; with respect to quaterion &lt;span class=&quot;math-container&quot;&gt;$\mathbf{q}\in \mathbb{R}^{4}$&lt;/span&gt;.&#xA;When I use euler angles for joint rotations, the derivatives can be fairly easily computed using cross product (&lt;a href=&quot;https://cseweb.ucsd.edu/classes/wi17/cse169-a/slides/CSE169_08.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://cseweb.ucsd.edu/classes/wi17/cse169-a/slides/CSE169_08.pdf&lt;/a&gt;).&#xA;However, I want to use quaternion, and I'm struggling to compute Jacobian &lt;span class=&quot;math-container&quot;&gt;$\mathbf{J} =\frac{\partial \mathbf{p}}{\partial \mathbf{q}} $&lt;/span&gt;. Do I have to compute something like below for quaternion based Inverse Kinematics ?:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\mathbf{J} = \begin{bmatrix}&#xA;\frac{\partial p_{x}}{\partial q_{x}} &amp;amp; \frac{\partial p_{x}}{\partial q_{y}} &amp;amp;\frac{\partial p_{x}}{\partial q_{z}}  &amp;amp; \frac{\partial p_{x}}{\partial q_{w}} \\ &#xA;\frac{\partial p_{y}}{\partial q_{x}} &amp;amp; \frac{\partial p_{y}}{\partial q_{y}} &amp;amp;\frac{\partial p_{y}}{\partial q_{z}}  &amp;amp; \frac{\partial p_{x}}{\partial q_{w}} \\ &#xA;\frac{\partial p_{z}}{\partial q_{x}} &amp;amp; \frac{\partial p_{z}}{\partial q_{y}} &amp;amp;\frac{\partial p_{z}}{\partial q_{z}}  &amp;amp; \frac{\partial p_{x}}{\partial q_{w}} &#xA;\end{bmatrix}\in \mathbb{R}^{3 \times 4}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;If so, please help me out to compute those values.&lt;/p&gt;&#xA;&lt;p&gt;Thanks in advance!&lt;/p&gt;&#xA;" OwnerUserId="24182" LastActivityDate="2020-12-18T13:03:29.323" Title="Inverse kinematics with quaternion" Tags="&lt;inverse-kinematics&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21518" PostTypeId="2" ParentId="21489" CreationDate="2020-12-18T14:01:52.833" Score="2" Body="&lt;p&gt;As Ugo Pattacini said, the experiment must be rethought taking into account the dynamics of the ball. In this case, your system will have 4 states: current &lt;span class=&quot;math-container&quot;&gt;$j$&lt;/span&gt;, angular velocity &lt;span class=&quot;math-container&quot;&gt;$\omega$&lt;/span&gt;, ball height &lt;span class=&quot;math-container&quot;&gt;$h$&lt;/span&gt;, and ball speed &lt;span class=&quot;math-container&quot;&gt;$s=\dot{h}$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;As pointed out, the dynamics of &lt;span class=&quot;math-container&quot;&gt;$s$&lt;/span&gt;, neglecting viscous friction and other aerodynamic effects, can be modeled as &lt;span class=&quot;math-container&quot;&gt;$\dot{s}={T\over m}-{g\over m}$&lt;/span&gt;. The last term (gravity) can be seen as a disturbance &lt;span class=&quot;math-container&quot;&gt;$\delta=[0\;0\;0\;{g\over m}]^T$&lt;/span&gt; in your system that you can reject using your control loop.&lt;/p&gt;&#xA;&lt;p&gt;You can rewrite your state-space model using &lt;span class=&quot;math-container&quot;&gt;$$\dot{x}=Ax+Bu+\delta.$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;You can estimate the thrust &lt;span class=&quot;math-container&quot;&gt;$T$&lt;/span&gt; running an experiment where the ball gets balanced at multiple heights.&lt;/p&gt;&#xA;" OwnerUserId="27540" LastEditorUserId="6941" LastEditDate="2020-12-20T14:03:04.577" LastActivityDate="2020-12-20T14:03:04.577" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21519" PostTypeId="1" CreationDate="2020-12-19T00:59:22.260" Score="0" ViewCount="36" Body="&lt;p&gt;I'm wondering what's the best vehicle kit for testing control/navigation algorithms. I want something with some degree of hardware abstraction (in the sense of not having to write too much i/o, opening ports, etc.), but that is low-level algorithmically speaking. Like I want something that basically gives me arrays of pixels from a camera and possibly wheel speed/inertial measurements as input and motor speed/steering as output. Not something that's oriented toward high-level programs that &amp;quot;glue together&amp;quot; existing vision/control algorithms from lots of 3rd party code. If I end up reinventing something that looks like an existing algorithm from computer vision/machine learning/control theory then so be it, but I'd like the learning experience/freedom of starting &amp;quot;from physics/geometry/math&amp;quot;. I.e I'd rather spend my time as a hobbyist inventing (or reinventing) rather than reading about existing solutions/learning jargon, etc. Also as I'm not a hardware person I don't want to spend most of my time buying/assembling/addressing incompatibilities in hardware. What kit sounds best for this?&lt;/p&gt;&#xA;" OwnerUserId="27613" LastActivityDate="2020-12-25T13:55:03.953" Title="Best kit for prototyping/testing driving/vision algorithms" Tags="&lt;algorithm&gt;&lt;autonomous-car&gt;&lt;kit&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21520" PostTypeId="1" AcceptedAnswerId="21530" CreationDate="2020-12-19T03:54:20.913" Score="1" ViewCount="117" Body="&lt;p&gt;Dear Research Community,&lt;/p&gt;&#xA;&lt;p&gt;I am new to object detection research and currently working on a project which will detect people using YOLO from a top-down camera image.&lt;/p&gt;&#xA;&lt;p&gt;While looking through tutorials for YOLO, I see all tutorials asks us to download 'pre-trained weights', but to the best of my knowledge, none of the tutorials talks about why(or how) we are using the pre-trained weights and whether we can train the YOLO model without it.&lt;/p&gt;&#xA;&lt;p&gt;I will appreciate it if someone can shed some light into what are the pre-trained weights in YOLO?&lt;/p&gt;&#xA;&lt;p&gt;With best,&#xA;Azmyin&lt;/p&gt;&#xA;" OwnerUserId="27420" LastActivityDate="2020-12-23T01:53:27.043" Title="What are the purpose of pre-trained weights for YOLO object detector?" Tags="&lt;computer-vision&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21521" PostTypeId="1" CreationDate="2020-12-19T11:30:31.713" Score="1" ViewCount="21" Body="&lt;ul&gt;&#xA;&lt;li&gt;I want to perceive the images from the cameras embedded in YuMi IRB 14000 arms and store them as videos, in Ubuntu &lt;strong&gt;without&lt;/strong&gt; using &lt;a href=&quot;https://new.abb.com/products/robotics/robotstudio&quot; rel=&quot;nofollow noreferrer&quot;&gt;ABB RobotStudio&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;is there any way to do that? if yes how can I do that please?&lt;/li&gt;&#xA;&lt;li&gt;I have read &lt;a href=&quot;https://library.e.abb.com/public/b227fcd260204c4dbeb8a58f8002fe64/Rapid_instructions.pdf?x-sign=f79v/883X1nHGc8fqH+WAJ2F30y/M6TZfYUuPuQpP+jeMBygouyGg+WSj8A9Otry&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;strong&gt;RAPID Technical Reference Manual 3HAC050917-001&lt;/strong&gt;&lt;/a&gt; but didn't find a way to obtain the image array with rapid!&lt;/li&gt;&#xA;&lt;li&gt;Note: they mentioned in page 57 that : &lt;code&gt;CamReqImage&lt;/code&gt; (Camera Request Image) orders the camera to acquire an image, but they didn't mention how to obtain that image!&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="26586" LastEditorUserId="26586" LastEditDate="2021-02-28T19:29:31.810" LastActivityDate="2021-02-28T19:29:31.810" Title="Is there any RAPID instruction to save image as variable in YuMi integrated vision without using RobotStudio?" Tags="&lt;robotic-arm&gt;&lt;computer-vision&gt;&lt;industrial-robot&gt;&lt;communication&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21522" PostTypeId="1" AcceptedAnswerId="21679" CreationDate="2020-12-19T12:35:57.353" Score="1" ViewCount="75" Body="&lt;p&gt;can anyone identify this switch type, please? I've been looking all day at various websites. I'm just looking for a very simple touch sensor, and this seems ideal&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/JcuqR.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JcuqR.jpg&quot; alt=&quot;photo of switch&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="2554" LastActivityDate="2021-01-21T14:04:26.873" Title="please identify this switch" Tags="&lt;sensors&gt;" AnswerCount="2" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="21523" PostTypeId="1" CreationDate="2020-12-19T17:29:33.553" Score="2" ViewCount="69" Body="&lt;p&gt;Assuming I have a system:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;a \, \ddot{x}_1 + b \, \ddot{x}_2 + c \,\dot{x_1} + d \,\dot{x_2} + e = u_1 \\&#xA;f \, \ddot{x}_1 + g \, \ddot{x}_2 + h \,\dot{x_1} + i \,\dot{x_2} + j = u_2&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;How would I write this system in state space representation:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$\dot{x} = Ax+Bu$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$y = Cx + Du$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Usually, I would isolate for &lt;span class=&quot;math-container&quot;&gt;$\ddot{x_1}$&lt;/span&gt; or &lt;span class=&quot;math-container&quot;&gt;$\ddot{x_2}$&lt;/span&gt;, but in this case, they are functions of each other.&#xA;Would the only way be to rewrite the dynamics in matrix form after setting new state variables?&lt;/p&gt;&#xA;" OwnerUserId="27615" LastActivityDate="2020-12-21T10:21:17.930" Title="How to obtain the state space representation of a computed torque control system?" Tags="&lt;control&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21524" PostTypeId="2" ParentId="21523" CreationDate="2020-12-19T22:34:08.947" Score="-1" Body="&lt;p&gt;Before the question can be answered with mathematical terms, a bit meta knowledge may help to understand the thought system. The goal of creating a state space formula for robotics problems is a typical application of the matlab software. The students are educated how to use a commercial software package for describing real world problems.&lt;/p&gt;&#xA;&lt;p&gt;With this pre-knowledge in mind it is much easier to identify the correct answer. It was given in the internet already under the URL &lt;a href=&quot;https://in.mathworks.com/help/control/getstart/linear-lti-models.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://in.mathworks.com/help/control/getstart/linear-lti-models.html&lt;/a&gt; The website explains, how to use the famous mathematical software for creating a state space model for a torgue control. What is provided too, is how to create the differential equations and transform them into the matrix notation.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2020-12-19T22:34:08.947" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21525" PostTypeId="2" ParentId="19796" CreationDate="2020-12-20T00:46:43.087" Score="0" Body="&lt;p&gt;One could brainstorm alternatives to measuring the motor torque electrically.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Measure the tension force directly. Put a load cell  arrangement at the fixed (non-motor) end of the wire.&lt;/li&gt;&#xA;&lt;li&gt;Route the wire (or a flexible leader) over an idler pulley. Wire tension tries to pull the pulley off its attachment.  Put a load cell there.&lt;/li&gt;&#xA;&lt;li&gt;Measure the motor torque mechanically. Tension in the wire is trying to wrench the motor off its mounting. Put a load cell there.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="27616" LastActivityDate="2020-12-20T00:46:43.087" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21526" PostTypeId="2" ParentId="21523" CreationDate="2020-12-20T11:50:38.290" Score="0" Body="&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\begin{align}&#xA;a \, \ddot{x}_1 + b \, \ddot{x}_2 + c \,\dot{x_1} + d \,\dot{x_2} + e &amp;amp;= u_1 \tag{1} \\&#xA;f \, \ddot{x}_1 + g \, \ddot{x}_2 + h \,\dot{x_1} + i \,\dot{x_2} + j &amp;amp;= u_2 \tag{2}&#xA;\end{align}&#xA;$$&lt;/span&gt;&#xA;Let's write Eq(1) without &lt;span class=&quot;math-container&quot;&gt;$\ddot{x}_2$&lt;/span&gt;, hence:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\begin{align}&#xA;a \, \ddot{x}_1 + b \, \Big[\frac{u_2-f \, \ddot{x}_1 - h \,\dot{x}_1 - i \,\dot{x}_2 - j}{g}\Big] + c \,\dot{x}_1 + d \,\dot{x}_2 + e &amp;amp;= u_1 \\&#xA;\left[a-\frac{bf}{g} \right] \, \ddot{x}_1 +  \, \frac{b}{g}u_2 - \frac{bh}{g} \,\dot{x}_1 - \frac{bi}{g} \,\dot{x}_2 - \frac{b}{g}j + c \,\dot{x}_1 + d \,\dot{x}_2 + e &amp;amp;= u_1 \\&#xA;%&#xA;\left[a-\frac{bf}{g} \right] \, \ddot{x}_1  = u_1 -  \, \frac{b}{g}u_2 + \frac{bh}{g} \,\dot{x}_1 + \frac{bi}{g} \,\dot{x}_2 + \frac{b}{g}j - c \,\dot{x}_1 - d \,\dot{x}_2 - &amp;amp;e \\&#xA;%&#xA;\ddot{x}_1  = \left[\frac{g}{(ag-bf)} \right] \left[u_1 -  \, \frac{b}{g}u_2 + \frac{bh}{g} \,\dot{x}_1 + \frac{bi}{g} \,\dot{x}_2 + \frac{b}{g}j - c \,\dot{x}_1 - d \,\dot{x}_2 - e\right]  \tag{3}&#xA;\end{align}&#xA;$$&lt;/span&gt;&#xA;Now we do same procedure which is eliminating &lt;span class=&quot;math-container&quot;&gt;$\ddot{x}_1$&lt;/span&gt; from Eq(2) hence,&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\begin{align}&#xA;f \, \Big[\frac{u_1- b \, \ddot{x}_2 - c \,\dot{x_1} - d \,\dot{x_2} - e}{a}\Big] + g \, \ddot{x}_2 + h \,\dot{x_1} + i \,\dot{x_2} + j &amp;amp;= u_2 \\&#xA;%&#xA;\Big[ g - \frac{fb}{a}\Big] \ddot{x}_2 +  \frac{f}{a} u_1 - \frac{fc}{a} \,\dot{x_1} - \frac{fd}{a} \,\dot{x_2} - \frac{fe}{a} + h \,\dot{x_1} + i \,\dot{x_2} + j &amp;amp;= u_2 \\&#xA;%&#xA;\Big[ g - \frac{fb}{a}\Big] \ddot{x}_2  = u_2 -  \frac{f}{a} u_1 + \frac{fc}{a} \,\dot{x_1} + \frac{fd}{a} \,\dot{x_2} + \frac{fe}{a} - h \,\dot{x_1} - i \,\dot{x_2} - j \\&#xA;%&#xA;\ddot{x}_2  = \left[\frac{a}{(ag-bf)} \right] \left[ u_2 -  \frac{f}{a} u_1 + \frac{fc}{a} \,\dot{x_1} + \frac{fd}{a} \,\dot{x_2} + \frac{fe}{a} - h \,\dot{x_1} - i \,\dot{x_2} - j \right] \tag{4}&#xA;\end{align}&#xA;$$&lt;/span&gt;&#xA;Now let &lt;span class=&quot;math-container&quot;&gt;$y_1=x_1, y_2=\dot{x}_1, y_3=x_2, y_4=\dot{x}_2$&lt;/span&gt;, hence:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\begin{align}&#xA;\dot{y}_1 &amp;amp;= y_2 \\&#xA;\dot{y}_2 &amp;amp;= \left[\frac{g}{(ag-bf)} \right] \left[u_1 -  \, \frac{b}{g}u_2 + \Big[\frac{bh-cg}{g}\Big] \,y_2 + \Big[\frac{bi-dg}{g} \Big] \,y_4 + \frac{bj-eg}{g}\right] \\&#xA;\dot{y}_3 &amp;amp;= y_4 \\&#xA;\dot{y}_4 &amp;amp;= \left[\frac{a}{(ag-bf)} \right] \left[ u_2 -  \frac{f}{a} u_1 + \Big[\frac{fc-ha}{a} \,\Big] y_2 + \Big[\frac{fd-ia}{a}\Big] \,y_4 + \frac{fe-aj}{a}  \right]&#xA;\end{align}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;where &lt;span class=&quot;math-container&quot;&gt;$ag\neq bf$&lt;/span&gt;. You can proceed from here.&lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="2155" LastEditDate="2020-12-21T10:21:17.930" LastActivityDate="2020-12-21T10:21:17.930" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21527" PostTypeId="2" ParentId="21523" CreationDate="2020-12-20T12:01:40.540" Score="3" Body="&lt;p&gt;First, isolate the second order from the other terms:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;a \, \ddot{x}_1 + b \, \ddot{x}_2 =- c \,\dot{x_1} - d \,\dot{x_2} - e + u_1 \\&#xA;f \, \ddot{x}_1 + g \, \ddot{x}_2 = - h \,\dot{x_1} - i \,\dot{x_2} - j + u_2&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Then, put it in a matrix form:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\left[\begin{matrix}a&amp;amp;b\\f&amp;amp;g\end{matrix}\right]\left[\begin{matrix}\ddot{x_1}\\\ddot{x_2}\end{matrix}\right]=\left[\begin{matrix}- c \,\dot{x_1} - d \,\dot{x_2} - e + u_1\\- h \,\dot{x_1} - i \,\dot{x_2} - j + u_2\end{matrix}\right].&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Supposing &lt;span class=&quot;math-container&quot;&gt;$\left[\begin{smallmatrix}a&amp;amp;b\\f&amp;amp;g\end{smallmatrix}\right]$&lt;/span&gt; is invertible, we can left multiply both sides by &lt;span class=&quot;math-container&quot;&gt;$\left[\begin{smallmatrix}a&amp;amp;b\\f&amp;amp;g\end{smallmatrix}\right]^{-1}$&lt;/span&gt;:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\left[\begin{matrix}a&amp;amp;b\\f&amp;amp;g\end{matrix}\right]^{-1}\left[\begin{matrix}a&amp;amp;b\\f&amp;amp;g\end{matrix}\right]\left[\begin{matrix}\ddot{x_1}\\\ddot{x_2}\end{matrix}\right]=\left[\begin{matrix}a&amp;amp;b\\f&amp;amp;g\end{matrix}\right]^{-1}\left[\begin{matrix}- c \,\dot{x_1} - d \,\dot{x_2} - e + u_1\\- h \,\dot{x_1} - i \,\dot{x_2} - j + u_2\end{matrix}\right].&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Thus, we get:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\left[\begin{matrix}\ddot{x_1}\\\ddot{x_2}\end{matrix}\right]&#xA;=&#xA;{1\over ag-bf}&#xA;\left[\begin{matrix}g&amp;amp;-b\\-f&amp;amp;a\end{matrix}\right]\left[\begin{matrix}- c \,\dot{x_1} - d \,\dot{x_2} - e + u_1\\- h \,\dot{x_1} - i \,\dot{x_2} - j + u_2\end{matrix}\right],&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\left[\begin{matrix}\ddot{x_1}\\\ddot{x_2}\end{matrix}\right]&#xA;=&#xA;{1\over ag-bf}&#xA;\left[\begin{matrix}(bh-gc)\dot{x_1}+(bi-gd)\dot{x_2}+(bj-je)\\&#xA;(fc-ah)\dot{x_1}+(fd-ai)\dot{x_2} + (fe-aj)\end{matrix}\right]&#xA;+{1\over ag-bf}&#xA;\left[\begin{matrix}&#xA; g&amp;amp;-b\\&#xA;-f&amp;amp;a&#xA;\end{matrix}\right]&#xA;\left[\begin{matrix}&#xA;u_1\\&#xA;u_2&#xA;\end{matrix}\right].&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Using auxiliary variables:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\left[\begin{matrix}\ddot{x_1}\\\ddot{x_2}\end{matrix}\right]&#xA;=&#xA;\left[\begin{matrix}\alpha\dot{x_1}+\beta\dot{x_2}+\gamma\\&#xA;\delta\dot{x_1}+\epsilon\dot{x_2} + \zeta\end{matrix}\right]&#xA;+&#xA;\left[\begin{matrix}&#xA; \eta&amp;amp;\theta\\&#xA;\iota&amp;amp;\kappa&#xA;\end{matrix}\right]&#xA;\left[\begin{matrix}&#xA;u_1\\&#xA;u_2&#xA;\end{matrix}\right].&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Here, &lt;span class=&quot;math-container&quot;&gt;$\gamma$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\zeta$&lt;/span&gt; can represent either uncontrolled inputs or disturbances.&lt;/p&gt;&#xA;&lt;p&gt;As uncontrolled inputs:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\left[\begin{matrix}\ddot{x_1}\\\ddot{x_2}\end{matrix}\right]&#xA;=&#xA;\left[\begin{matrix}\alpha\dot{x_1}+\beta\dot{x_2}\\&#xA;\delta\dot{x_1}+\epsilon\dot{x_2}\end{matrix}\right]&#xA;+&#xA;\left[\begin{matrix}&#xA; \eta&amp;amp;\theta&amp;amp;\gamma\\&#xA;\iota&amp;amp;\kappa&amp;amp;\zeta&#xA;\end{matrix}\right]&#xA;\left[\begin{matrix}&#xA;u_1\\&#xA;u_2\\&#xA;1&#xA;\end{matrix}\right].&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;As disturbances:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\left[\begin{matrix}\ddot{x_1}\\\ddot{x_2}\end{matrix}\right]&#xA;=&#xA;\left[\begin{matrix}\alpha\dot{x_1}+\beta\dot{x_2}\\&#xA;\delta\dot{x_1}+\epsilon\dot{x_2}\end{matrix}\right]&#xA;+&#xA;\left[\begin{matrix}&#xA; \eta&amp;amp;\theta\\&#xA;\iota&amp;amp;\kappa&#xA;\end{matrix}\right]&#xA;\left[\begin{matrix}&#xA;u_1\\&#xA;u_2&#xA;\end{matrix}\right]+&#xA;\left[\begin{matrix}&#xA;\gamma\\&#xA;\zeta&#xA;\end{matrix}\right].&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Creating the state &lt;span class=&quot;math-container&quot;&gt;$s=[s_1\;s_2\;s_3\;s_4]^T=[x_1\;\dot{x_1}\;x_2\;\dot{x_2}]^T$&lt;/span&gt;:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$\dot{s}&#xA;=&#xA;\dot{\left[\begin{matrix}s_1\\ s_2\\ s_3\\ s_4\end{matrix}\right]}&#xA;=&#xA;\left[\begin{matrix}&#xA;0&amp;amp;1&amp;amp;0&amp;amp;0\\ &#xA;0&amp;amp;\alpha&amp;amp;0&amp;amp;\beta\\&#xA;0&amp;amp;0&amp;amp;0&amp;amp;1\\&#xA;0&amp;amp;\delta&amp;amp;0&amp;amp;\epsilon&#xA;\end{matrix}\right]&#xA;\left[\begin{matrix}s_1\\ s_2\\ s_3\\ s_4\end{matrix}\right]&#xA;+&#xA;\left[\begin{matrix}&#xA;0&amp;amp;0\\&#xA;\eta&amp;amp;\theta\\&#xA;0&amp;amp;0\\&#xA;\iota&amp;amp;\kappa&#xA;\end{matrix}\right]&#xA;\left[\begin{matrix}&#xA;u_1\\&#xA;u_2&#xA;\end{matrix}\right]&#xA;+&#xA;\left[\begin{matrix}&#xA;0\\&#xA;\gamma\\&#xA;0\\&#xA;\zeta&#xA;\end{matrix}\right].&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Depending on your system, you can design a controller that rejects those disturbances; the presence of integrators in the system can help remove steady-state errors.&lt;/p&gt;&#xA;" OwnerUserId="27540" LastEditorUserId="6941" LastEditDate="2020-12-20T13:55:57.683" LastActivityDate="2020-12-20T13:55:57.683" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21528" PostTypeId="2" ParentId="21520" CreationDate="2020-12-20T15:01:48.623" Score="0" Body="&lt;p&gt;I found this post, which sheds some light to this question.&#xA;&lt;a href=&quot;https://machinelearningspace.com/yolov3-tensorflow-2-part-3/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://machinelearningspace.com/yolov3-tensorflow-2-part-3/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Hope this helps someone out&lt;/p&gt;&#xA;" OwnerUserId="27420" LastEditorUserId="27420" LastEditDate="2020-12-23T01:53:27.043" LastActivityDate="2020-12-23T01:53:27.043" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21529" PostTypeId="2" ParentId="21522" CreationDate="2020-12-20T17:26:44.543" Score="0" Body="&lt;p&gt;Looks like a broken limit switch. Something like this &lt;a href=&quot;https://www.zencnc.com/product/limit-switch/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.zencnc.com/product/limit-switch/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="27064" LastActivityDate="2020-12-20T17:26:44.543" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="21530" PostTypeId="2" ParentId="21520" CreationDate="2020-12-20T17:37:13.043" Score="1" Body="&lt;p&gt;From what I understand, CNN's like Yolo here, require loads of images to train. These images must have lots of variations in them to be robust enough (in your case variability in types of people, lighting conditions, viewing angles, etc.). Therefore, a popular use case is to use transfer learning where a pre-trained model is used and the user can then train a new model by starting from this point. The idea here, I believe, is that the first few layers have already learnt what kind of features to extract, what to look for in the images, etc. It just needs to learn the last (or maybe last few) layers to work for your specific use case.&lt;/p&gt;&#xA;&lt;p&gt;Another reason to use pre-trained models is to be able to use readily available images and get comfortable with the framework and see it in practice before starting your own work.&lt;/p&gt;&#xA;&lt;p&gt;Intel's openvino has a lot of pre-trained models &lt;a href=&quot;https://github.com/openvinotoolkit/open_model_zoo/blob/master/models/intel/index.md&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; including one for pedestrian (person) detection which can be converted and used with yolo. This could be used as a starting point in your work!&lt;/p&gt;&#xA;" OwnerUserId="27064" LastActivityDate="2020-12-20T17:37:13.043" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21531" PostTypeId="2" ParentId="21519" CreationDate="2020-12-20T17:44:28.083" Score="1" Body="&lt;p&gt;Have you looked into &lt;a href=&quot;https://www.ros.org/about-ros/&quot; rel=&quot;nofollow noreferrer&quot;&gt;ROS&lt;/a&gt;? It will abstract the lower levels for you and take care of the inter-process communication. There are several sensor drivers available and you just need to install them to use. There are also several examples available from the official wiki and the user base is awesome!&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;https://emanual.robotis.com/docs/en/platform/turtlebot3/overview/&quot; rel=&quot;nofollow noreferrer&quot;&gt;turtlebot3&lt;/a&gt; is a good starting robot. It has, I believe, a raspberry-pi for the processor and ability to add sensors as you please with native ros support.&lt;/p&gt;&#xA;" OwnerUserId="27064" LastActivityDate="2020-12-20T17:44:28.083" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21532" PostTypeId="1" CreationDate="2020-12-20T17:59:15.840" Score="2" ViewCount="25" Body="&lt;p&gt;How do the dynamics of a system change when an error term is introduced?&#xA;For instance, if I have a system (computed torque control - robot manipulator):&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$M\ddot{q} + C\dot{q} + G = u$$&lt;/span&gt;&#xA;and &lt;span class=&quot;math-container&quot;&gt;$e = q-q_{ref}$&lt;/span&gt;, where &lt;span class=&quot;math-container&quot;&gt;$q_{ref}$&lt;/span&gt; is a time varying reference, how would this system be rewritten in terms of the error &lt;span class=&quot;math-container&quot;&gt;$e$&lt;/span&gt;?&lt;/p&gt;&#xA;&lt;p&gt;I was thinking it would be:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$M\ddot{e} + C\dot{e} + G = u$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;but then I would be missing terms &lt;span class=&quot;math-container&quot;&gt;$-M\ddot{q_{ref}}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$-C\dot{q_{ref}}$&lt;/span&gt; correct?&lt;/p&gt;&#xA;&lt;p&gt;I am confused on how tracking errors manifest in the system equation.&lt;/p&gt;&#xA;" OwnerUserId="27615" LastActivityDate="2020-12-21T03:14:27.767" Title="Dynamics with error term" Tags="&lt;control&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21534" PostTypeId="2" ParentId="21487" CreationDate="2020-12-20T20:19:40.927" Score="1" Body="&lt;p&gt;A joint angle &lt;span class=&quot;math-container&quot;&gt;$\theta_n$&lt;/span&gt; is defined as the angle between &lt;span class=&quot;math-container&quot;&gt;$X_{n-1}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$X_n$&lt;/span&gt; measured about &lt;span class=&quot;math-container&quot;&gt;$Z_{n-1}$&lt;/span&gt;. In the case of &lt;span class=&quot;math-container&quot;&gt;$\theta_3$&lt;/span&gt;, please notice that there is an initial angle of &lt;span class=&quot;math-container&quot;&gt;$+\pi/2$&lt;/span&gt; (anti-clockwise direction) between &lt;span class=&quot;math-container&quot;&gt;$X_2$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$X_3$&lt;/span&gt;, when measured about &lt;span class=&quot;math-container&quot;&gt;$Z_2$&lt;/span&gt;. Hence, that additional &lt;span class=&quot;math-container&quot;&gt;$+\pi/2$&lt;/span&gt; comes in the picture.&lt;/p&gt;&#xA;" OwnerUserId="26969" LastEditorUserId="26969" LastEditDate="2020-12-20T20:35:37.270" LastActivityDate="2020-12-20T20:35:37.270" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21535" PostTypeId="2" ParentId="21532" CreationDate="2020-12-21T03:14:27.767" Score="2" Body="&lt;p&gt;You are confusing the “robot + controller” with the robot itself.   Every physical system has dynamic properties.  As shown by your first equation, the dynamics are related to joint accelerations, velocities, and positions (embedded within the matrices).   The desired state has nothing to do with how the physical system responds to its state variables.  That is the job of the computed torque controller.  The controller uses desired states, computes errors, and determines the torque/acceleration values to apply to the individual joints.  But regardless of what the controller commands, the physical robot’s dynamics depend on its state and not on some computed, or desired, state.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2020-12-21T03:14:27.767" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21536" PostTypeId="1" CreationDate="2020-12-21T13:04:31.453" Score="0" ViewCount="45" Body="&lt;p&gt;I am using &lt;a href=&quot;http://wiki.ros.org/diff_drive_controller&quot; rel=&quot;nofollow noreferrer&quot;&gt;diff drive controller&lt;/a&gt; to control the wheels of my robot. Here i am trying to use the control toolbox pid class for making the input velocity and velocity measured from wheel encoder to be equal. Here i have used the computeCommand() to calculate the pwm output to the motors. Here is my code:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;namespace rrbot_control&#xA;{&#xA;&#xA;RRBotHWInterface::RRBotHWInterface(ros::NodeHandle &amp;amp;nh_, urdf::Model *urdf_model)&#xA;  : ros_control_boilerplate::GenericHWInterface(nh_, urdf_model)&#xA;{&#xA;    ROS_INFO_NAMED(&amp;quot;rrbot_hw_interface&amp;quot;, &amp;quot;RRBotHWInterface Ready.&amp;quot;);&#xA;    nhp_ = ros::NodeHandle(&amp;quot;~&amp;quot;);&#xA;    if (!nhp_.hasParam(&amp;quot;my_pid/p&amp;quot;))&#xA;        nhp_.setParam(&amp;quot;my_pid/p&amp;quot;, 100.0);&#xA;    if (!nhp_.hasParam(&amp;quot;my_pid/i&amp;quot;))&#xA;        nhp_.setParam(&amp;quot;my_pid/i&amp;quot;, 10.0);&#xA;    if (!nhp_.hasParam(&amp;quot;my_pid/d&amp;quot;))&#xA;        nhp_.setParam(&amp;quot;my_pid/d&amp;quot;, 0.0);&#xA;    if (!nhp_.hasParam(&amp;quot;my_pid/i_clamp_min&amp;quot;))&#xA;        nhp_.setParam(&amp;quot;my_pid/i_clamp_min&amp;quot;, -10.0);&#xA;    if (!nhp_.hasParam(&amp;quot;my_pid/i_clamp_max&amp;quot;))&#xA;        nhp_.setParam(&amp;quot;my_pid/i_clamp_max&amp;quot;, 10.0);&#xA;    nhp_.setParam(&amp;quot;publish_state&amp;quot;, true);&#xA;&#xA;    my_pid_.init(ros::NodeHandle(nhp_, &amp;quot;my_pid&amp;quot;), false);&#xA;&#xA;    x_to_control_ = 0.0;&#xA;    ROS_INFO_STREAM(&amp;quot;Node ready&amp;quot;);&#xA;&#xA;    min_ang = 0.00119361423;&#xA;    prev_right_wheel_pos = 0;&#xA;    prev_left_wheel_pos = 0;&#xA;    max_pwm_to_max_vel_radio = 80.7501211252;    &#xA;    time = ros::Time::now();&#xA;    Setup();&#xA;}&#xA;&#xA;void RRBotHWInterface::read(ros::Duration &amp;amp;elapsed_time)&#xA;{&#xA;    const char* enc_data = Read();  &#xA;    std::vector&amp;lt;std::string&amp;gt; result;  &#xA;    boost::split(result, enc_data, boost::is_any_of(&amp;quot;,&amp;quot;));&#xA;    if(result.size()==2) {&#xA;        int curr_left_wheel_pos = atof(result[0].c_str());&#xA;        int curr_right_wheel_pos = atof(result[1].c_str());&#xA;        int delta_left_wheel_pos =  prev_left_wheel_pos - curr_left_wheel_pos;&#xA;        int delta_right_wheel_pos = prev_right_wheel_pos - curr_right_wheel_pos;&#xA;        joint_position_[0] += delta_left_wheel_pos * min_ang; &#xA;        joint_velocity_[0] = (delta_left_wheel_pos * min_ang)/elapsed_time.toSec();&#xA;        joint_position_[1] += delta_right_wheel_pos * min_ang; &#xA;        joint_velocity_[1] = (delta_right_wheel_pos * min_ang)/elapsed_time.toSec();&#xA;        prev_left_wheel_pos = curr_left_wheel_pos;&#xA;        prev_right_wheel_pos = curr_right_wheel_pos;&#xA;    }&#xA;}&#xA;&#xA;void RRBotHWInterface::write(ros::Duration &amp;amp;elapsed_time)&#xA;{&#xA;  // Safety&#xA;  enforceLimits(elapsed_time);&#xA;  ros::Time tnow = ros::Time::now();&#xA;  // If any problem arises, make sure dt is &amp;gt; 0.0&#xA;  // as if its 0.0 the computedCommand will be 0.0&#xA;  ros::Duration dt = tnow - last_cmd_time_;&#xA;&#xA;  double error1 = joint_velocity_command_[0] - joint_velocity_[0];&#xA;  double error2 = joint_velocity_command_[1] - joint_velocity_[1];&#xA;&#xA;  double joint1_out_pow = my_pid1_.computeCommand(error1, dt);&#xA;  double joint2_out_pow = my_pid2_.computeCommand(error2, dt);&#xA;  std::cout&amp;lt;&amp;lt;&amp;quot;error1=&amp;quot;&amp;lt;&amp;lt;error1&amp;lt;&amp;lt;&amp;quot;\t&amp;quot;&amp;lt;&amp;lt;&amp;quot;joint1_out_pow=&amp;quot;&amp;lt;&amp;lt;joint1_out_pow&amp;lt;&amp;lt;&amp;quot;\t&amp;quot;&amp;lt;&amp;lt;&#xA;      &amp;quot;joint1_velocity_given=&amp;quot;&amp;lt;&amp;lt;joint_velocity_command_[0]&amp;lt;&amp;lt;&amp;quot;\t&amp;quot;&amp;lt;&amp;lt;&amp;quot;joint1_velocity_measured=&amp;quot;&amp;lt;&amp;lt;joint_velocity_[0]&amp;lt;&amp;lt;std::endl;&#xA;&#xA;  last_cmd_time_ = tnow;&#xA;  ros::Duration(0.1).sleep();&#xA;&#xA;  if(joint1_out_pow&amp;gt;255)&#xA;      joint1_out_pow = 255;&#xA;  else if(joint1_out_pow&amp;lt;-255)&#xA;      joint1_out_pow=-255;&#xA;  if(joint2_out_pow&amp;gt;255)&#xA;      joint2_out_pow=255;&#xA;  else if(joint2_out_pow&amp;lt;-255)&#xA;      joint2_out_pow=-255;&#xA;  std::string pwm_datas = std::to_string(joint1_out_pow)+&amp;quot;,&amp;quot;+std::to_string(joint2_out_pow);&#xA;  while(pwm_datas.length()&amp;lt;16) {&#xA;    pwm_datas.push_back(',');&#xA;  }&#xA;  const char *res = pwm_datas.c_str(); &#xA;  if(pwm_datas.length()==16) {&#xA;    Write(res);    &#xA;    usleep(10000);&#xA;  }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Here when the input velocity is 20 the pwm is something 10... which is not rotating the wheels due to not having enough power. So the error is equal to 20-0 = 20 itself. My doubt is how do i properly use this pid controller such that the pid controller gives the pwm output which balances the input velocity and output velocity. What is the standard, right way to do it?&lt;/p&gt;&#xA;" OwnerUserId="20529" LastActivityDate="2020-12-21T14:04:51.087" Title="pid tuning the wheel velocity" Tags="&lt;ros&gt;&lt;pid&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21537" PostTypeId="2" ParentId="21536" CreationDate="2020-12-21T14:04:51.087" Score="1" Body="&lt;p&gt;If you're using a full PID controller then the integral error term should build until the output gets large enough to turn the wheel. I can't see your PID code so I'm not sure how your error terms are calculated, and I also can't see how that integral clamp is getting applied.&lt;/p&gt;&#xA;&lt;p&gt;I would recommend against doing any kind of clamping on integral error terms unless you find some really good reason to use it - the integral term is what eliminates steady state error. It should be allowed to grow as big as necessary to do that.&lt;/p&gt;&#xA;&lt;p&gt;Finally, as a side note, I thought it was odd that you are limiting the output to +/- 255. An 8-bit unsigned value is 0 to 255, but a signed 8-bit value is - 127 to 128. You should double check what the acceptable output range is. You might be correct but I thought it was odd.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2020-12-21T14:04:51.087" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21539" PostTypeId="2" ParentId="20091" CreationDate="2020-12-22T02:03:41.330" Score="1" Body="&lt;p&gt;Might be a bit late, but the create_robot/create_autonomy package has various URDFs for the Create here: &lt;a href=&quot;https://github.com/AutonomyLab/create_robot/tree/melodic/create_description/urdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/AutonomyLab/create_robot/tree/melodic/create_description/urdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="27628" LastActivityDate="2020-12-22T02:03:41.330" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21540" PostTypeId="1" AcceptedAnswerId="21542" CreationDate="2020-12-22T03:02:29.120" Score="2" ViewCount="59" Body="&lt;p&gt;I've recently acquired a Create 2 and want to power a Raspberry Pi (and potentially other sensors/motors) off of the serial port. I've seen the official recommendations (e.g. power from the motor drivers instead) but am trying to see if I can make use of the more accessible power from the port.&lt;/p&gt;&#xA;&lt;p&gt;Through testing, it looks like skipping the 200mA fuse (using an ammeter on the board) allows for at least ~1.5A of draw. However, the 26AWG wires of the serial-to-USB cable limit the current to ~360mA for power transmission, which I can bypass by unbundling the cable or just using header wires and recombining them for the USB converter. I also see D80 on the board in particular that could be a little small/have a low current limit, and the traces seem somewhat small in comparison to the traces that lead to the motor outputs.&lt;/p&gt;&#xA;&lt;p&gt;Are there any other current limitations? If I were to replace or bypass the fuse, what might be an appropriate current limit?&lt;/p&gt;&#xA;" OwnerUserId="27628" LastActivityDate="2020-12-22T17:35:59.277" Title="iRobot Create 2 - bypassing fuse for serial port power, other current limitations?" Tags="&lt;irobot-create&gt;&lt;electronics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21541" PostTypeId="2" ParentId="20670" CreationDate="2020-12-22T11:33:58.247" Score="2" Body="&lt;p&gt;The output angle of an inclinometer is generally the angle between the axes of the sensor frame and the horizontal plane instead of the Euler angles. You can refer to the following article about how to use these two angles to get the rotation matrix:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://iopscience.iop.org/article/10.1088/1361-6501/aa7275&quot; rel=&quot;nofollow noreferrer&quot;&gt;Integrated calibration of a 3D attitude sensor in large-scale metrology&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;It is worth noting that the inclinometer cannot obtain a complete rotation matrix, and may need to cooperate with other sensors&lt;/p&gt;&#xA;" OwnerUserId="27631" LastEditorUserId="9176" LastEditDate="2020-12-23T12:20:51.767" LastActivityDate="2020-12-23T12:20:51.767" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21542" PostTypeId="2" ParentId="21540" CreationDate="2020-12-22T17:35:59.277" Score="6" Body="&lt;p&gt;First the disclaimer - if you modify the robot by defeating or replacing the protection features you're on your own.&lt;/p&gt;&#xA;&lt;p&gt;That being said here is some useful information that will hopefully help you make good design decisions.&lt;/p&gt;&#xA;&lt;p&gt;The fuse is actually a PTC.  The benefit is when you eventually accidentally short battery to ground in your project the PTC protects but then resets after you clear the fault.  This saves you from having to disassemble the robot and perform additional soldering and eventually damage the SMD pads.  It also avoids you not having the right value fuse and just deciding to short it through because you tell yourself you know what you're doing and you promise yourself you'll be careful.  That never ends badly.&lt;/p&gt;&#xA;&lt;p&gt;The connector pins are rated for 0.5A each, the diode is a 1A diode, the tracks are 12mil wide 1oz copper, also good for about 1A, and the power supply in the dock delivers 1.25A to the robot when the battery is charging.  A few tens of miliamps go to running the robot processors and the rest of the 1.25A goes to charging the battery.  This last bit is important.  While you are developing on your project it is likely that you will sit the robot on the dock assuming all is good because the dock is powering the robot.  If your project takes all of that 1.25A or more then the remainder actually comes from the battery so you can kill the battery by drawing too much power even while docked.  Be sure to use both pins 1 &amp;amp; 2 and 6 &amp;amp; 7 for power and ground on the connector so you don't overload the contact pins.&lt;/p&gt;&#xA;&lt;p&gt;A 1A PTC doesn't protect at 1A, it will allow 1A to pass without tripping.  If you choose to replace the PTC choose one that is rated above your expected load but less than 1A.  Usually the goal for the PTC is to protect from a loose wire or failed component from damaging the robot.  The PTC needs to protect before the diode or tracks fuse themselves.  This ends up being a thermal mass race so picking a lower rated PTC biases the race in favor of protecting.  The 200mA PTC was chosen based on the anticipated load of powering processor in the communication cable.&lt;/p&gt;&#xA;&lt;p&gt;What if you need 1A or more?  You will have to get it via the motor drivers.  The battery has built in protection as well.  Depending on which battery you are using it is either a 4.2A PTC or a 5.5A current limit.  The motor drivers in the robot run directly from the battery rail and have built in current limit.  Those current limits are based on the capabilities of the motor drivers and the anticipated motor loads when it was a Roomba.  You will need to pay more attention to the robot battery state of charge and will need to remember to turn off your project's heavy loads when the robot is docked to enable the battery to charge.&lt;/p&gt;&#xA;&lt;p&gt;If you need more current then that you will need to provide power from a source other than the robot battery.&lt;/p&gt;&#xA;" OwnerUserId="9343" LastActivityDate="2020-12-22T17:35:59.277" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21543" PostTypeId="2" ParentId="21508" CreationDate="2020-12-23T13:21:23.187" Score="1" Body="&lt;p&gt;In general, a larger fiducial will always produce a more robust and accurate measurement.  This is because any sub-pixel detection errors will be reduced by the larger baseline.  (For example, the detector erroneously measures one corner of the fiducial to be 1 pixel too high.  The angular error will be greater if the tag in view is 20 pixels across as opposed to 200).&lt;/p&gt;&#xA;&lt;p&gt;This is assuming the fiducial isn't so large as to be out of the camera frame.  So the exact dimensions of the tag is highly dependent on your physical robot and environment. And if your set up is sufficiently flexible so that the robot must see the tag from very far away and very close, then you must make the trade off where you need the robot to be able to see the tag.  Or possibly use multiple tags of different sizes.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2020-12-23T13:21:23.187" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21544" PostTypeId="1" AcceptedAnswerId="21565" CreationDate="2020-12-24T16:46:17.657" Score="1" ViewCount="78" Body="&lt;p&gt;I am posting this here because my background in estimation theory and optimization has been developed entirely through my experience in robotics.&lt;/p&gt;&#xA;&lt;p&gt;TLDR: What makes it so that any time you put something in an exponential you can suddenly call it a probability distribution?&lt;/p&gt;&#xA;&lt;p&gt;The Deets: I thought of this question while reading &lt;a href=&quot;https://openaccess.thecvf.com/content_CVPR_2019/papers/Barron_A_General_and_Adaptive_Robust_Loss_Function_CVPR_2019_paper.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;A General and Adaptive Robust Loss Function by Jonathan Barron&lt;/a&gt;. The paper describes a single parameter loss function that can subsume the most commonly used individual loss functions:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$f(x, \alpha, c)$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Where &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; is parameter, &lt;span class=&quot;math-container&quot;&gt;$\alpha$&lt;/span&gt; is the &amp;quot;single parameter&amp;quot;, and &lt;span class=&quot;math-container&quot;&gt;$c$&lt;/span&gt; is a distance scale that describes the &amp;quot;quadratic bowl&amp;quot; around the origin which all the loss functions share in common. When &lt;span class=&quot;math-container&quot;&gt;$\alpha = 2$&lt;/span&gt; it is squared error loss, &lt;span class=&quot;math-container&quot;&gt;$\alpha =1$&lt;/span&gt; it is essentially absolute error loss, and when &lt;span class=&quot;math-container&quot;&gt;$\alpha = 0$&lt;/span&gt; it is cauchy loss.&lt;/p&gt;&#xA;&lt;p&gt;My confusion starts when the paper goes on to say &amp;quot;With our loss function we construct a general probability distribution&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ p(x|\mu,\alpha, c) = \frac{1}{cZ(\alpha)}\exp(-f(x-\mu, \alpha, c)) $$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;My question is, why does dividing by a normalization constant, and taking the exponential of the negative loss function suddenly make it a pdf? I understand the results, I have used these same ideas in my estimation theory courses, but I just don't get how we can make the jump from loss to pdf OR why it is so intuitive to do so.&lt;/p&gt;&#xA;&lt;p&gt;Cheers, and happy holidays :)&lt;/p&gt;&#xA;" OwnerUserId="27205" LastActivityDate="2020-12-29T13:23:58.627" Title="Why Does an Exponential Make ANYTHING a Probability Distribution" Tags="&lt;theory&gt;&lt;probability&gt;&lt;estimation&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21546" PostTypeId="2" ParentId="21519" CreationDate="2020-12-25T13:55:03.953" Score="0" Body="&lt;p&gt;There is no such “best for prototyping vision algorithms” robot.&lt;/p&gt;&#xA;&lt;p&gt;I second the ROS OS suggestion for decoupling the mobile platform from the vision processing platform.&lt;/p&gt;&#xA;&lt;p&gt;If you want a well designed, supported, yet inexpensive mobile platform that already has a ROS node available, the &lt;a href=&quot;https://gopigo.io/&quot; rel=&quot;nofollow noreferrer&quot;&gt;GoPiGo3&lt;/a&gt; has the hardware interface to motors, encoders, sensors, and camera worked out on a variety of programming languages.&lt;/p&gt;&#xA;" OwnerUserId="10195" LastActivityDate="2020-12-25T13:55:03.953" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21547" PostTypeId="2" ParentId="11072" CreationDate="2020-12-25T23:55:35.743" Score="0" Body="&lt;p&gt;In the most literal case, the answer to your apparent question (which is not terminated by an interrogation point but is otherwise phrased much like a question) is &amp;quot;No&amp;quot;... because no such thing as a &amp;quot;CNC&amp;quot; has ever existed in the sense you mean. &amp;quot;CNC&amp;quot; is an adjective, not a noun. Therefore, it is not possible to &amp;quot;build a CNC&amp;quot; at all.&lt;/p&gt;&#xA;&lt;p&gt;Opening up our translation a little and assuming that by &amp;quot;a CNC&amp;quot; you really mean a CNC router or laser engraver or 3D printer or sewing machine... yes, it is possible to build such a machine using a linear motion system which does not contain any timing pulley or lead screw. You never asked how to accomplish that, but there are many ways of getting it done.&lt;/p&gt;&#xA;&lt;p&gt;In response to your stated main objective... the &lt;strong&gt;cheapest&lt;/strong&gt; method would be to manually drag you axis back and forth with tiedown twine stolen from Home Depot. That probably isn't going to feel very satisfactory to you, though. I think what you're actually looking for is going to be a stick of All-Thread rod and some clanky nuts that fit it, maybe even some shopmade ones so you don't have to weld them (or glue them) to your carriage. I wouldn't expect your accuracy and repeatability to be any great shakes, but it would do the job very cheaply.&lt;/p&gt;&#xA;&lt;p&gt;Given that you'll likely want greater accuracy than that, you'd best get used to the fact that any reasonably accurate positioning system is going to be a bit more expensive than you're ready for. That's a good thing, since it means that every dog's man isn't wasting his time &amp;amp; money building a nasty CNC machine in a back bedroom with baling wire and bubble gum.&lt;/p&gt;&#xA;&lt;p&gt;Just sigh and relax and surf Amazon and eBay looking for Asian import lead screws and ballscrews. They'll get you there. The lead screws will be the most accurate, the timing belts will be fastest, the ball screws will fit somewhere in the middle between speed and accuracy. Oh, they'll also wear worse than the lead screws but not as bad as the timing belts.&lt;/p&gt;&#xA;" OwnerUserId="27642" LastActivityDate="2020-12-25T23:55:35.743" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21548" PostTypeId="2" ParentId="21424" CreationDate="2020-12-26T10:31:51.553" Score="0" Body="&lt;p&gt;Deciding where to deploy the FSM, either in the timer interrupt or in the main routine, is the easiest part. Either way will work just fine. Probably, the FSM is not that critical, hence it could be conveniently running within &lt;code&gt;main()&lt;/code&gt;, whereas disabling/enabling the timer interrupt is not really necessary if you resort to the use of a dedicated flag (protected with a mutex) for that.&lt;/p&gt;&#xA;&lt;p&gt;The trickiest part, instead, is represented by how you stop and reinstate the PID controller without yielding unwanted phenomena. As you know, a PID contains internal states that need to be carefully blended with the plant dynamics that certainly continues to evolve in the meantime.&lt;/p&gt;&#xA;&lt;p&gt;There exist suitable ways to implement the so-called &lt;em&gt;bumpless switching&lt;/em&gt; you may look for in literature or on the web. One interesting example is this &lt;a href=&quot;https://www.mathworks.com/help/simulink/slref/bumpless-control-transfer-between-manual-and-pid-control.html;jsessionid=e90e8ea03354da8fbf00160ac06f&quot; rel=&quot;nofollow noreferrer&quot;&gt;practical resource&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastActivityDate="2020-12-26T10:31:51.553" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21549" PostTypeId="1" CreationDate="2020-12-26T11:03:17.063" Score="1" ViewCount="22" Body="&lt;p&gt;I am wondering how (if) one can translate trajectories of translation matrices to joint velocities?&lt;/p&gt;&#xA;&lt;p&gt;I'm reading the &lt;a href=&quot;http://manipulation.csail.mit.edu/pick.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;notes&lt;/a&gt; of Russ Tedrake's class on manipulation. One part of the notes concerns a discussion of the joint velocities, calculates as function of the end-effector frame velocity: For a given end-effector frame velocity &lt;span class=&quot;math-container&quot;&gt;$V$&lt;/span&gt; and jacobian of the joint positions &lt;span class=&quot;math-container&quot;&gt;$J(\theta)$&lt;/span&gt;, one can calculate the joint velocities as:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;d\theta = J(\theta)^{-1} V&#xA;$$&lt;/span&gt;&#xA;(equation 18). Now suppose the end-effector follows the trajectory:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;X(s) = X_{start}  \exp(\log(X_{start}^{-1} X_{End} ) s))&#xA;$$&lt;/span&gt;&#xA;The derivative of &lt;span class=&quot;math-container&quot;&gt;$X'(s)$&lt;/span&gt; seem to be to me &lt;span class=&quot;math-container&quot;&gt;$X'(s) = X_{start} \exp(\log(X_{start}^{-1} X_{End} ) s)) X_{start}^{-1} X_{End}$&lt;/span&gt;. This is however a &lt;span class=&quot;math-container&quot;&gt;$4x4$&lt;/span&gt; matrix and I do not understand how to use it to determine the joint velocities &lt;span class=&quot;math-container&quot;&gt;$d\theta$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I do not understand how (if) one can use any information about the trajectory &lt;span class=&quot;math-container&quot;&gt;$X(s)$&lt;/span&gt; to determine appropriate joint velocities &lt;span class=&quot;math-container&quot;&gt;$d\theta$&lt;/span&gt; to follow that trajectory. There seems to be a relationship to me, but I cannot figure the mathematical formula to relate them. Does somebody else know? I am grateful for any hints or suggestions!&lt;/p&gt;&#xA;" OwnerUserId="27647" LastActivityDate="2020-12-26T11:03:17.063" Title="Can I relate trajectory generation to differential inverse kinematics?" Tags="&lt;jacobian&gt;&lt;trajectory&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21550" PostTypeId="2" ParentId="20982" CreationDate="2020-12-26T18:49:35.500" Score="0" Body="&lt;p&gt;A PID controller takes an error as input (the encoder ticks) and yields an output whose unit of measurement &lt;span class=&quot;math-container&quot;&gt;$O$&lt;/span&gt; (the PWM percentage, usually) is uncorrelated with the unit of measurement &lt;span class=&quot;math-container&quot;&gt;$I$&lt;/span&gt; of the input.&lt;/p&gt;&#xA;&lt;p&gt;To this end, the PID gains &lt;span class=&quot;math-container&quot;&gt;$K_P$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$K_I$&lt;/span&gt;, and &lt;span class=&quot;math-container&quot;&gt;$K_D$&lt;/span&gt; do have units of measurement:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$[K_P] = \frac{O}{I}$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$[K_I] = \frac{O}{I \cdot s}$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$[K_D] = \frac{O \cdot s}{I}$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6941" LastActivityDate="2020-12-26T18:49:35.500" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="21551" PostTypeId="1" CreationDate="2020-12-27T06:31:45.127" Score="1" ViewCount="48" Body="&lt;p&gt;I see that the create 2 spec says it is based on the roomba 600 series, but I don't know if they are the same or if I should expect differences.  I want to send it a command to get it to turn around with a raspberry PI.  Bump, Virtual Wall, or whatever else works.&lt;/p&gt;&#xA;" OwnerUserId="27651" LastActivityDate="2021-05-26T20:02:45.287" Title="Does the roomba 675 have the same open interface spec and as the roomba create 2?" Tags="&lt;irobot-create&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21552" PostTypeId="2" ParentId="21176" CreationDate="2020-12-27T11:25:20.090" Score="1" Body="&lt;p&gt;As you pointed out, &lt;span class=&quot;math-container&quot;&gt;$y=f\left(u\right)$&lt;/span&gt; is a static map, hence it does not represent in any way the temporal evolution of a dynamical system.&lt;/p&gt;&#xA;&lt;p&gt;With this in mind, resorting to an observer is fundamentally a wrong approach. An observer, in fact, provides you with an estimate of the temporal evolution of the dynamical system under subject; however, here &lt;span class=&quot;math-container&quot;&gt;$f\left(\cdot\right)$&lt;/span&gt; has nothing to do with the time.&lt;/p&gt;&#xA;&lt;p&gt;Thereby, you ought to fit a static map. There exist a plethora of methods to achieve this goal but you have to switch from designing an observer to a context where you deal with fitting.&lt;/p&gt;&#xA;&lt;p&gt;You're already equipped with good knowledge to start: you essentially know the bases &lt;span class=&quot;math-container&quot;&gt;$b_1 = -v$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$b_2 = \exp(-v)$&lt;/span&gt;, and &lt;span class=&quot;math-container&quot;&gt;$b_3 = 1 / \left(v+1\right)$&lt;/span&gt;, where &lt;span class=&quot;math-container&quot;&gt;$v = u^2$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;You could then try to explore whether a linear combination of &lt;span class=&quot;math-container&quot;&gt;$b_i$&lt;/span&gt; fits well &lt;span class=&quot;math-container&quot;&gt;$f$&lt;/span&gt;, or if you need to resort to polynomial fitting or even nonlinear fitting (e.g. by means of multilayer neural networks).&lt;/p&gt;&#xA;&lt;p&gt;Once done, you can extract the gradient out of the fitted model.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;If you want to fit directly the gradient &lt;span class=&quot;math-container&quot;&gt;$g = df/dx$&lt;/span&gt;, to avoid problems related to divisions by zero, you could:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;feed in &lt;span class=&quot;math-container&quot;&gt;$x_i = at_i+b$&lt;/span&gt;, with &lt;span class=&quot;math-container&quot;&gt;$a&amp;gt;0$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$b&amp;lt;0$&lt;/span&gt; (to explore the whole range);&lt;/li&gt;&#xA;&lt;li&gt;read back &lt;span class=&quot;math-container&quot;&gt;$y_i = f\left(x_i\right)$&lt;/span&gt;;&lt;/li&gt;&#xA;&lt;li&gt;compute &lt;span class=&quot;math-container&quot;&gt;$\dot{\tilde{y}}_i = \left(y_i-y_{i-1}\right)/\Delta t$&lt;/span&gt;;&lt;/li&gt;&#xA;&lt;li&gt;compute &lt;span class=&quot;math-container&quot;&gt;$g_i = \dot{\tilde{y}}_i / a$&lt;/span&gt;;&lt;/li&gt;&#xA;&lt;li&gt;fit &lt;span class=&quot;math-container&quot;&gt;$g$&lt;/span&gt; based upon the sampled points &lt;span class=&quot;math-container&quot;&gt;$g_i$&lt;/span&gt; exploiting the same techniques discussed above.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2020-12-27T18:47:41.443" LastActivityDate="2020-12-27T18:47:41.443" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21554" PostTypeId="2" ParentId="21551" CreationDate="2020-12-27T18:47:22.423" Score="0" Body="&lt;p&gt;Yes, the Roomba 675 supports the same &lt;a href=&quot;https://www.irobotweb.com/-/media/MainSite/Files/About/STEM/Create/2018-07-19_iRobot_Roomba_600_Open_Interface_Spec.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Open Interface Spec&lt;/a&gt; as the &lt;a href=&quot;https://www.irobot.com/about-irobot/stem/create-2.aspx&quot; rel=&quot;nofollow noreferrer&quot;&gt;Create 2&lt;/a&gt;.  You won't get the custom faceplate with mounting hole locations.  But you can download the locations &lt;a href=&quot;https://www.irobotweb.com/-/media/MainSite/PDFs/About/STEM/Create/iRobotCreate2-ScrewBossLocations.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.  Remember the serial connector is under the faceplate, then you are good to go.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2020-12-27T18:47:22.423" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21555" PostTypeId="2" ParentId="21275" CreationDate="2020-12-27T20:02:28.737" Score="1" Body="&lt;p&gt;I don't know to which extent your pseudo-code can be taken as representative of your real code, but I can see the following concerns with it.&lt;/p&gt;&#xA;&lt;h3&gt;Derivative term&lt;/h3&gt;&#xA;&lt;p&gt;In practical applications, the derivative term computed as a one-step finite difference as below is completely useless:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;derivativeError = (currentError - previousError) / timeStep&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;There is a large number of reasons for that, mainly related to the fact that physical signals just like the measured distance from the target are heavily affected by the noise, which in turn has high-frequency components that get amplified by this operation degrading inevitably the PID performance and causing instability.&lt;/p&gt;&#xA;&lt;p&gt;Thereby, you should instead resort to more sophisticated techniques such as velocity observers (e.g. the Kalman state estimator) or robust filtering (e.g. Savitzky–Golay filtering), or even better sensors that are apt to measure the velocity natively (they are rare and quite expensive devices though).&lt;/p&gt;&#xA;&lt;p&gt;Don't panic/worry, just drop the derivative term lightheartedly. Remember that 90% of the worldwide PID controllers are simply PI &lt;/p&gt;&#xA;&lt;h3&gt;Integral term&lt;/h3&gt;&#xA;&lt;p&gt;This is the most problematic part. You cannot threshold the controller output within [0, maxSpeed] without telling the PID what is going on. It won't simply work out. By doing this, in fact, you will elicit unwanted oscillations that are right what you have been observing.&lt;/p&gt;&#xA;&lt;p&gt;To let the controller be aware of actuation bounds, you shall rely on a standard &lt;strong&gt;anti-windup&lt;/strong&gt; diagram.&lt;/p&gt;&#xA;&lt;p&gt;This is a well-known procedure in literature. You can find it out in the &lt;a href=&quot;https://aiecp.files.wordpress.com/2012/07/1-0-1-k-j-astrom-pid-controllers-theory-design-and-tuning-2ed.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;bible of PID controllers&lt;/a&gt; (par. 3.5), plus you could read up this interesting &lt;a href=&quot;https://www.mathworks.com/help/simulink/slref/anti-windup-control-using-a-pid-controller.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;MATLAB resource&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Essentially, you need to integrate also the difference between the thresholded output and the sheer output (see the illustration below).&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;integralError += (currentError + thresOutput - sheerOutput) * timeStep&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/WbJ51.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/WbJ51.png&quot; alt=&quot;Integral Anti-windup&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3&gt;Final remarks&lt;/h3&gt;&#xA;&lt;p&gt;Once you'll have fiddled with all the points above, you'll certainly have more chances to reduce the over/undershoots.&#xA;That being said, a pure velocity controller turns to be a kind of simplistic approach. Therefore, to be even more effective and accurate, you should be eventually playing with the dynamical model of the quadcopter.&lt;/p&gt;&#xA;&lt;p&gt;Hope it helps out.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2020-12-27T22:00:05.313" LastActivityDate="2020-12-27T22:00:05.313" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21556" PostTypeId="2" ParentId="21511" CreationDate="2020-12-27T22:21:46.123" Score="2" Body="&lt;p&gt;Chuck's answer is spot on. Anyway, if you want to derive the reason mathematically, you can start off from the most common form of a PD controller where we employ a setpoint-weighting for the derivative part:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;u(t) = K \cdot \left( e(t) - T_d \cdot \dot{y}(t) \right).&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;The Laplace transform of a &lt;strong&gt;feasible&lt;/strong&gt; &lt;span class=&quot;math-container&quot;&gt;$D$&lt;/span&gt; term is thus:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;D(s) = -\frac{sKT_d}{1+sT_d/N}\cdot Y(s),&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;where &lt;span class=&quot;math-container&quot;&gt;$N$&lt;/span&gt; is typically in the order of 8÷20 since the pole &lt;span class=&quot;math-container&quot;&gt;$-N/T_d$&lt;/span&gt; needs to be located at high frequency to make &lt;span class=&quot;math-container&quot;&gt;$D(s)$&lt;/span&gt; behave like a derivative at the frequencies of interest.&lt;/p&gt;&#xA;&lt;p&gt;The high-frequency gain of a PD controller is finally &lt;span class=&quot;math-container&quot;&gt;$K^{PD}_{hf} = K(1+N)$&lt;/span&gt;, which is &lt;span class=&quot;math-container&quot;&gt;$(1+N)$&lt;/span&gt; times higher than the high-frequency gain of a simple P controller &lt;span class=&quot;math-container&quot;&gt;$K^P_{hf} = K$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;This means that a PD controller enhances &lt;span class=&quot;math-container&quot;&gt;$(1+N)$&lt;/span&gt; times the high-frequency noise – which is always present in the closed-loop – with respect to the pure proportional counterpart.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Put differently, a sinusoidal measurement &lt;span class=&quot;math-container&quot;&gt;$y=a\sin\omega t$&lt;/span&gt; gives the following contribution to the derivative term of the control signal:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;u_D=-aKT_d\omega \cos\omega t.&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;The amplitude of the control signal can thus be arbitrarily large if the noise has a sufficiently high frequency (&lt;span class=&quot;math-container&quot;&gt;$\omega$&lt;/span&gt;). The high-frequency gain of the derivative term is therefore limited to avoid this difficulty.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2020-12-29T17:04:43.757" LastActivityDate="2020-12-29T17:04:43.757" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21557" PostTypeId="2" ParentId="21214" CreationDate="2020-12-27T23:59:10.960" Score="1" Body="&lt;h3&gt;TL;DR&lt;/h3&gt;&#xA;&lt;p&gt;&lt;strong&gt;Nope! You don't really need Kalman filtering in this context!&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;To perform outliers rejection, there are other techniques that you can apply successfully and more easily without the bother of dealing with the Kalman filter's requirements.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Kalman filtering can be demonstrated to be the optimal stochastic filter when we have:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;a linear model of our process.&lt;/li&gt;&#xA;&lt;li&gt;Gaussian noise affecting the measurements.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;In reality, neither condition 1 nor condition 2 are ever verified, as the model cannot encapsulate the whole knowledge of our physical system and the noise is never perfectly Gaussian. Anyway, engineers do not tend to get scared about that and keep applying Kalman filtering and its variants everywhere regardless of the extent to which those conditions are true.&lt;/p&gt;&#xA;&lt;p&gt;If we think about it, the same applies to PID controllers, which are linear systems and as such can be used only paired with linear processes. There exists no single linear process in nature. What the heck? Well, who cares, we keep on using both PID and Kalman estimator, which do work really great!&lt;/p&gt;&#xA;&lt;p&gt;In this digression, I have purposely exaggerated the context, as engineers are pretty much careful to gauge the limits of applicability of these useful linear tools (the extent I mentioned earlier). To this end, they study the model of the process at hand together with its relevant properties, which is often the very first step of the analysis.&lt;/p&gt;&#xA;&lt;p&gt;Do you have a model for your process and a rough estimate of the noise statistics? If the answer is yes, you could continue to have a deeper look and make attempts to characterize this model (identification) and work out a good first guess for the noise and process variance to then run some tests to verify your hypotheses. However, this would entail that you sit down and put in a non-negligible effort.&lt;/p&gt;&#xA;&lt;p&gt;Want to try out something simpler, where resorting to heuristics is – so to speak – more reasonable and sound than betting with Kalman parameters? Well, make use of &lt;strong&gt;Median Filtering&lt;/strong&gt;!&lt;/p&gt;&#xA;&lt;p&gt;Median filtering is a very simple nonlinear technique that does its best with outliers removal without introducing significant lag in the response.&lt;/p&gt;&#xA;&lt;p&gt;You can appreciate the 1D median filter at work here:&#xA;&lt;a href=&quot;https://www.mathworks.com/help/signal/ref/medfilt1.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.mathworks.com/help/signal/ref/medfilt1.html&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2020-12-28T09:08:51.767" LastActivityDate="2020-12-28T09:08:51.767" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21558" PostTypeId="1" CreationDate="2020-12-28T00:30:23.027" Score="0" ViewCount="327" Body="&lt;p&gt;I started working with GPS + IMU fusion using Kalman Filter. For this, I'm using Python, with Madgwick filter from a library (&lt;a href=&quot;https://github.com/morgil/madgwick_py&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/morgil/madgwick_py&lt;/a&gt;) and Kalman filter also from an library (&lt;a href=&quot;http://github.com/rlabbe/filterpy&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://github.com/rlabbe/filterpy&lt;/a&gt;), i developed a model as below, where C(east or north) is the coordinate in east or north, v is the velocity and a is the acceleration.&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;\begin{equation}&#xA;C_{north}(k) = C_{north}(k-1) + v_{north}(k)\Delta t + a_{north}(k) \frac{\Delta t^2}{2}&#xA;\end{equation}&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;\begin{equation}&#xA;C_{east}(k) = C_{east}(k-1) + v_{east}(k)\Delta t + a_{east}(k) \frac{\Delta t^2}{2}&#xA;\end{equation}&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;\begin{equation}&#xA;v_{north}(k) = v_{north}(k-1) + a_{north}(k) \Delta t&#xA;\end{equation}&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;\begin{equation}&#xA;v_{east}(k) = v_{east}(k-1) + a_{east}(k) \Delta t&#xA;\end{equation}&lt;/span&gt;&#xA;Before i make an hardware implementation, im simulating my model with a dataset that provides GPS latitude,longitude and speed and IMU (MPU 9250) data (accel + gyro + mag). But as the dataset dont provides me heading or course over the ground information, im using madgwick filter to get yaw and use this as my heading (with magnetic declination subtracted). And with this i decompose the velocity vector in east and north component. Like the picture below:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/lfQnS.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/lfQnS.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;About the GPS, im transforming the latitude and longitude from geodetic to NED frame of reference, and taking the velocity vector and decomposing it, as i described above with yaw angle. And with the GPS, no doubts, i think thats correct.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/2Ezka.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2Ezka.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;My doubts arise from IMU fusion with madgwick to get the acceleration in NED frame and heading, the y axis of the accelerometer is pointing to the north of the car and the x axis to the east of the car, how should i pass the IMU data to the madgwick filter, and its correct i get the yaw as my heading information? With the yaw as my heading will i get the correct angle to decompose my velocity that is coming from the GPS? Now, the madgwick requires accel, gyro and mag data in (x,y,z), but as the axis of the accelerometer in this dataset are inverted, im passing accel and gyro in (y,x,z) order and mag(y,x,-z). Just to test what the model with this logic is getting, I put 0 in all the components of the covariance matrix Q and a large number in the components of the covariance matrix R, so in the figure below is what the model and only the model is predicting&#xA;&lt;a href=&quot;https://i.stack.imgur.com/qipQm.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qipQm.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;In blue is the model prediction without updating phase, and in black is the &amp;quot;truth displacement&amp;quot;. I known that without the updating process with GPS the model should diverge, but it seems horrible. The last picture is the Kalman Filter with R and Q with the values that i think that should be.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/c4yrb.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/c4yrb.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;As we can see, the model follows the truth displacement but not finish the path, so any help with the Madgwick filter will help me a lot. Other problems like R or Q covariance matrix i already found good matrix. I think that the IMU fusion itself is the problem here.&lt;/p&gt;&#xA;" OwnerUserId="27655" LastEditorUserId="27655" LastEditDate="2020-12-28T18:45:49.103" LastActivityDate="2020-12-28T18:45:49.103" Title="IMU + GPS fusion and change of reference frame" Tags="&lt;kalman-filter&gt;&lt;imu&gt;&lt;sensor-fusion&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21559" PostTypeId="1" CreationDate="2020-12-28T00:42:25.083" Score="1" ViewCount="105" Body="&lt;p&gt;Trying to understand how does the Denavit-Hartenberg work.&lt;br /&gt;&#xA;While I understood how is the table constructed, I however don't understand how are the signs for the orientation parameters (theta, joint angle and alpha, twist link) determined.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Is there any rule that I'm missing, that determines whether the value is going to be negative or positive?&lt;/li&gt;&#xA;&lt;li&gt;Why is the joint angle of the last link 6 has the value of 180 even though there's no transformation between the end effector and the rotational joint?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/RQkhY.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/RQkhY.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="27657" LastActivityDate="2021-01-01T09:39:58.047" Title="Denavit-hartenberg parameters sign 6-DOF" Tags="&lt;kinematics&gt;&lt;inverse-kinematics&gt;&lt;forward-kinematics&gt;&lt;robot-model&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21560" PostTypeId="2" ParentId="21437" CreationDate="2020-12-28T05:33:16.317" Score="1" Body="&lt;p&gt;The likelihood is with respect to your predicted state &lt;strong&gt;not&lt;/strong&gt; the world state (You will never know the world state)&lt;/p&gt;&#xA;&lt;p&gt;For example, if you predict you will be at [0,0] but the measurement tells you [.5,.5] you can calculate the likelihood of that measurement given your predicted state. In that scenario, you can use a normal distribution or some more complex function to calculate the likelihood.&lt;/p&gt;&#xA;&lt;p&gt;In your case of a white black tile vector you can possibly treat each entry as a binomial distribution then calculate the joint probability.&lt;/p&gt;&#xA;" OwnerUserId="16033" LastActivityDate="2020-12-28T05:33:16.317" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21561" PostTypeId="2" ParentId="14801" CreationDate="2020-12-28T11:00:58.153" Score="0" Body="&lt;p&gt;Running &lt;code&gt;catkin_make -j8&lt;/code&gt; in my catkin workspace in the Python base environment, the error message was &lt;code&gt;Invoking &amp;quot;make -j8&amp;quot; failed&lt;/code&gt; instead of &lt;code&gt;Invoking &amp;quot;make -j4 -l4“ failed&amp;quot;&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Here is the traceback:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Traceback (most recent call last):&#xA;  File &amp;quot;/opt/ros/melodic/share/gencpp/cmake/../../../lib/gencpp/gen_cpp.py&amp;quot;, line 43, in &amp;lt;module&amp;gt;&#xA;    import genmsg.template_tools&#xA;  File &amp;quot;/opt/ros/melodic/lib/python2.7/dist-packages/genmsg/template_tools.py&amp;quot;, line 39, in &amp;lt;module&amp;gt;&#xA;    import em&#xA;ImportError: No module named em&#xA;util/ros_canopen/can_msgs/CMakeFiles/can_msgs_generate_messages_cpp.dir/build.make:63: recipe for target '/home/stu16291/rosyard/devel/include/can_msgs/Frame.h' failed&#xA;make[2]: *** [/home/stu16291/rosyard/devel/include/can_msgs/Frame.h] Error 1&#xA;CMakeFiles/Makefile2:1641: recipe for target 'util/ros_canopen/can_msgs/CMakeFiles/can_msgs_generate_messages_cpp.dir/all' failed&#xA;make[1]: *** [util/ros_canopen/can_msgs/CMakeFiles/can_msgs_generate_messages_cpp.dir/all] Error 2&#xA;make[1]: *** Waiting for unfinished jobs....&#xA;[  4%] Built target can_msgs_generate_messages_lisp&#xA;[  4%] Linking CXX executable /home/stu16291/rosyard/devel/lib/robot_localization/test_ros_robot_localization_listener_publisher&#xA;[  4%] Built target test_ros_robot_localization_listener_publisher&#xA;[  4%] Linking CXX shared library /home/stu16291/rosyard/devel/lib/libddynamic_reconfigure.so&#xA;[  4%] Built target ddynamic_reconfigure&#xA;[  6%] Linking CXX shared library /home/stu16291/rosyard/devel/lib/libros_filter_utilities.so&#xA;[  6%] Built target ros_filter_utilities&#xA;[  6%] Linking CXX executable /home/stu16291/rosyard/devel/lib/socketcan_interface/socketcan_dump&#xA;[  6%] Built target socketcan_dump&#xA;[  6%] Linking CXX shared library /home/stu16291/rosyard/devel/lib/libcomplementary_filter.so&#xA;[  6%] Built target complementary_filter&#xA;[  7%] Linking CXX shared library /home/stu16291/rosyard/devel/lib/libvelodyne_sensor_plugin.so&#xA;[  7%] Built target velodyne_sensor_plugin&#xA;Makefile:140: recipe for target 'all' failed&#xA;make: *** [all] Error 2&#xA;Invoking &amp;quot;make -j8&amp;quot; failed&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Solution was to remove the catkin workspace and install it again.&lt;/p&gt;&#xA;&lt;p&gt;Remove:&#xA;In your catkin workspace, usually your project folder, delete (or rename with suffix &amp;quot;_old&amp;quot; if you want to compare the not working catkin workspace later with the working catkin workspace):&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;build&lt;/li&gt;&#xA;&lt;li&gt;devel&lt;/li&gt;&#xA;&lt;li&gt;optionally src/CMakeLists.txt (I did that, not sure if it is really needed)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Source:&#xA;&lt;a href=&quot;https://answers.ros.org/question/66012/removing-catkin-workspace/?answer=66014#post-id-66014&quot; rel=&quot;nofollow noreferrer&quot;&gt;Removing catkin workspace&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Afterwards, the fresh &lt;code&gt;catkin_make -j8&lt;/code&gt; in my catkin workspace in the Python base environment installed without errors.&lt;/p&gt;&#xA;" OwnerUserId="27423" LastActivityDate="2020-12-28T11:00:58.153" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21562" PostTypeId="1" AcceptedAnswerId="21563" CreationDate="2020-12-28T11:54:18.353" Score="0" ViewCount="88" Body="&lt;p&gt;When running a command similar to the &lt;code&gt;roslaunch gazebo_ros empty_world.launch&lt;/code&gt; of the &lt;a href=&quot;http://gazebosim.org/tutorials?tut=ros_roslaunch&quot; rel=&quot;nofollow noreferrer&quot;&gt;Tutorial: Using roslaunch to start Gazebo, world files and URDF models&lt;/a&gt;, I get the following error:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;[Err] [Plugin.hh:180] Failed to load plugin libgazebo[...]:&#xA;libgazebo[...]: cannot open shared object file: No such file or&#xA;directory&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;How to solve this?&lt;/p&gt;&#xA;" OwnerUserId="27423" LastActivityDate="2021-01-27T12:00:50.077" Title="Failed to load plugin libgazebo...: libgazebo...: cannot open shared object file: No such file or directory" Tags="&lt;ros&gt;&lt;gazebo&gt;&lt;linux&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21563" PostTypeId="2" ParentId="21562" CreationDate="2020-12-28T11:54:18.353" Score="0" Body="&lt;p&gt;Solution was to remove the catkin workspace and install it again.&lt;/p&gt;&#xA;&lt;p&gt;Remove:&#xA;In your catkin workspace, usually your project folder, delete (or rename with suffix &amp;quot;_old&amp;quot; if you want to compare the not working catkin workspace later with the working catkin workspace):&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;build&lt;/li&gt;&#xA;&lt;li&gt;devel&lt;/li&gt;&#xA;&lt;li&gt;optionally src/CMakeLists.txt (I did that, not sure if it is really needed)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Source:&#xA;&lt;a href=&quot;https://answers.ros.org/question/66012/removing-catkin-workspace/?answer=66014#post-id-66014&quot; rel=&quot;nofollow noreferrer&quot;&gt;Removing catkin workspace&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Afterwards, the fresh &lt;code&gt;catkin_make -j8&lt;/code&gt; (or whatever catkin command you use) in my catkin workspace in the Python base environment installed without errors and the &lt;code&gt;roslaunch&lt;/code&gt; command ran through.&lt;/p&gt;&#xA;" OwnerUserId="27423" LastActivityDate="2020-12-28T11:54:18.353" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21564" PostTypeId="1" CreationDate="2020-12-28T15:25:39.067" Score="2" ViewCount="82" Body="&lt;p&gt;I understand the functioning of Particle Filters from the book Probabilistic Robotics and the robotics course provided by Cyrill Stachniss.&lt;/p&gt;&#xA;&lt;p&gt;I want to implement, from scratch, a particle filter to estimate the tilt angle &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt;, angular velocity &lt;span class=&quot;math-container&quot;&gt;$\omega := \dot\theta$&lt;/span&gt; and bias &lt;span class=&quot;math-container&quot;&gt;$b$&lt;/span&gt; in one direction. I want to implement the most basic PF version as shown below. I have the mathematical model (that I can't post here for legal reasons) to do so when I was learning Kalman Filters in a University course. To explain in short, I have a process model,&#xA;&lt;span class=&quot;math-container&quot;&gt;\begin{equation}&#xA;x_k = A x_{t-1},&#xA;\end{equation}&lt;/span&gt;&#xA;and a corresponding motion uncertainty matrix &lt;span class=&quot;math-container&quot;&gt;$Q$&lt;/span&gt;. Similarly, I have a measurement model,&#xA;&lt;span class=&quot;math-container&quot;&gt;\begin{equation}&#xA;z_t = C x_t,&#xA;\end{equation}&lt;/span&gt;&#xA;and the measurement covariance matrix &lt;span class=&quot;math-container&quot;&gt;$R$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;How do I go from this model to implementing the same in Particle Filters? PF requires to sample from the probabilistic state transition model:&#xA;&lt;span class=&quot;math-container&quot;&gt;\begin{equation}&#xA;x \sim p(x_t ~ | ~ x_{t-1}, u_t).&#xA;\end{equation}&lt;/span&gt;&#xA;Then, how do I assign a weight to each particle? That is, how do I evaluate this step of the algorithm&#xA;&lt;span class=&quot;math-container&quot;&gt;\begin{equation}&#xA;w = p(z_t ~ | ~ x_{t}),&#xA;\end{equation}&lt;/span&gt;&#xA;which requires evaluating the posterior for each particle &lt;span class=&quot;math-container&quot;&gt;$x_t$&lt;/span&gt;. I want to implement the most basic PF algorithm shown below, which I was able to do with Kalman Filters.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/1MbJP.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1MbJP.png&quot; alt=&quot;Particle Filter Algorithm from Probabilistic Robotics&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="23143" LastActivityDate="2021-05-27T19:06:45.633" Title="Particle Filter for IMU tilt angle and bias estimation from Kalman Filter models" Tags="&lt;kalman-filter&gt;&lt;imu&gt;&lt;particle-filter&gt;&lt;probability&gt;&lt;estimation&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21565" PostTypeId="2" ParentId="21544" CreationDate="2020-12-28T18:25:48.750" Score="3" Body="&lt;p&gt;I believe it's because you're essentially constructing an &lt;a href=&quot;https://en.wikipedia.org/wiki/Exponential_distribution&quot; rel=&quot;nofollow noreferrer&quot;&gt;exponential distribution&lt;/a&gt; which has the form&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/3GUOh.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3GUOh.png&quot; alt=&quot;expontial distribution pdf&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Because your loss function will always be &amp;gt;= 0, you form a valid PDF (valid in that it integrates to 1, but your loss function might not make that practically true)&lt;/p&gt;&#xA;" OwnerUserId="16033" LastActivityDate="2020-12-28T18:25:48.750" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21566" PostTypeId="2" ParentId="21564" CreationDate="2020-12-28T18:32:33.603" Score="0" Body="&lt;p&gt;The simplest way to construct &lt;span class=&quot;math-container&quot;&gt;$$x \sim p(x_t | x_{t-1}, u)$$&lt;/span&gt; if you have &lt;span class=&quot;math-container&quot;&gt;$$x_t = Ax_{t-1}$$&lt;/span&gt; is to just use &lt;span class=&quot;math-container&quot;&gt;$$x_t = Ax_{t-1} + \mathcal{N}(0,R)$$&lt;/span&gt; where R is some process noise. You may way to sample from a more complex distribution.&lt;/p&gt;&#xA;&lt;p&gt;Similarly, to construct &lt;span class=&quot;math-container&quot;&gt;$$p(z_t | x_t)$$&lt;/span&gt; you can just use &lt;span class=&quot;math-container&quot;&gt;$$\mathcal{N}(Cx_t,Q)$$&lt;/span&gt; (again you may want to use some more complex distribution)&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$R$&lt;/span&gt; is your process noise, &lt;span class=&quot;math-container&quot;&gt;$Q$&lt;/span&gt; is your sensor noise.&lt;/p&gt;&#xA;&lt;p&gt;As an addendum, Probabilistic Robotics has a whole chapter on constructing these probabilities for particle filters.&lt;/p&gt;&#xA;" OwnerUserId="16033" LastActivityDate="2020-12-28T18:32:33.603" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="21567" PostTypeId="2" ParentId="21544" CreationDate="2020-12-29T09:18:01.800" Score="2" Body="&lt;p&gt;To complement what Octopuscabbage correctly reported, there exists a strong theoretical foundation for using normal probability distributions in many different contexts, which builds on the &lt;a href=&quot;https://en.wikipedia.org/wiki/Central_limit_theorem&quot; rel=&quot;nofollow noreferrer&quot;&gt;Central Limit Theorem (CLT)&lt;/a&gt; that explains how the &amp;quot;exponential&amp;quot; distribution can work well with problems involving other types of distributions.&lt;/p&gt;&#xA;&lt;p&gt;As a result, when you don't know the probability distribution of a random variable, picking up the normal distribution turns out to be the most preferable choice.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2020-12-29T13:23:58.627" LastActivityDate="2020-12-29T13:23:58.627" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21568" PostTypeId="2" ParentId="21444" CreationDate="2020-12-29T09:37:29.633" Score="0" Body="&lt;p&gt;They are exactly the same equation, being the former only a compact version of the latter.&lt;/p&gt;&#xA;&lt;p&gt;From the Euler-Lagrange approach to the dynamics of a manipulator, you can build the &lt;span class=&quot;math-container&quot;&gt;$B$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$C$&lt;/span&gt; terms distinctively from the knowledge of your robot (e.g. distribution of masses of the links).&lt;/p&gt;&#xA;&lt;p&gt;Thus, for constructing the dynamics that you aim to control, you have to deal with the second equation. This knowledge is way important (oftentimes a prerequisite) to design a good controller.&lt;/p&gt;&#xA;&lt;p&gt;However, when it comes to designing the controller, you can conveniently group up terms in &lt;span class=&quot;math-container&quot;&gt;$\Theta$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\dot{\Theta}$&lt;/span&gt; (first equation) as their influence can be aggregated.&lt;/p&gt;&#xA;&lt;p&gt;Differently, if you don't have available the inertial parameters of your manipulator, you could think of estimating those dynamical terms, perhaps by means of adaptive control. In this specific case, you will most likely estimate &lt;span class=&quot;math-container&quot;&gt;$V$&lt;/span&gt; rather than &lt;span class=&quot;math-container&quot;&gt;$B$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$C$&lt;/span&gt; separately, right because their effects accumulate and it is not straightforward to observe them in isolation.&lt;/p&gt;&#xA;&lt;p&gt;Hope it helps out.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2020-12-29T10:28:22.463" LastActivityDate="2020-12-29T10:28:22.463" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21569" PostTypeId="1" AcceptedAnswerId="21571" CreationDate="2020-12-29T14:49:47.297" Score="2" ViewCount="238" Body="&lt;p&gt;I have a 3d physics simulation where I use a PID controller to reach a set orientation (orientation error drives a torque output).  Which works well enough some cases, but in others it's not working as nicely as I would like - especially in the case of rapid rotation.  I am still tuning however.&lt;/p&gt;&#xA;&lt;p&gt;I'm not proficient in control theory, but I was thinking maybe perhaps that the controller is only ensuring the desired orientation is reached as a constraint, but not what the angular velocity should be when it gets there - ideally zero in most situations.&lt;/p&gt;&#xA;&lt;p&gt;So I was wondering if it made sense to somehow combine a second PID controller that uses angular velocity rather than orientation mismatch as the error.  I'm not sure if this makes sense, and if so if it should just output another torque that is summed with the torque of the other PID?  Or if it's more complicated than that?  Or if it would be duplicating the work of the first PID anyway?&lt;/p&gt;&#xA;&lt;p&gt;I think I would want the angular velocity closer to zero, the more closer the orientation error is to zero - so I am not sure if any kind of scaling to do that makes sense?  I can imagine that would then become a balancing act between the two PID's coefficients to determine how fast it can correct vs stability when stopping (But then that kind of sounds like what the first PID would be doing anyway!?).&lt;/p&gt;&#xA;&lt;p&gt;Also in general I am not sure of the correct way to combine multiple PID controllers that are trying to balance concerns like that.&lt;/p&gt;&#xA;" OwnerUserId="15267" LastActivityDate="2021-01-11T14:16:30.567" Title="PID controller that targets a set rotation and a set velocity at that rotation?" Tags="&lt;pid&gt;" AnswerCount="1" CommentCount="9" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21570" PostTypeId="2" ParentId="21016" CreationDate="2020-12-29T14:50:14.880" Score="1" Body="&lt;h3&gt;Q1&lt;/h3&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Do I need to pass to the pid function the desired velocity as a signed or unsigned value?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Definitely, you shall deal with &lt;strong&gt;signed&lt;/strong&gt; velocities. The PID will take care of all the signs down the operations' chain, providing positive and or negative rotational velocities.&lt;/p&gt;&#xA;&lt;h3&gt;Q2&lt;/h3&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What should I do with velocity values that would mean a lower pwm so the motor will not spin?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The integral part of the PID will be responsible for that. Anyway, see the note on the anti-windup.&lt;/p&gt;&#xA;&lt;h3&gt;Q3&lt;/h3&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Should I consider that the speed can be negative to compute a &amp;quot;negative&amp;quot; duty ...?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Sure! As per &lt;strong&gt;Q1&lt;/strong&gt;.&#xA;Anyway, it's not clear to me why you're doing the conversion from velocity to duty. The PID will find its way to it. Let the PID do its job.&lt;/p&gt;&#xA;&lt;h3&gt;Q4&lt;/h3&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Would that be correct?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I don't think so. You're adding up knowledge on top of the task that is not required, making things overcomplicated. Just let the PID do its job based on the measurements and it will work. If the measurements are reliable, the 4 PID will make the 4 wheels spin at the same speed (after transients), regardless of their constructive differences.&lt;/p&gt;&#xA;&lt;p&gt;The task of attaining the same speed on the 4 different wheels is thus doable at the steady-state. However, that doesn't mean that the robot will be reaching your target location or tightly following your desired path as controlling velocity does not guarantee that you can compensate for different position errors that will accumulate during transitions. To get around this, you may consider applying a hierarchical approach with an outer controller that will close the loop on the position (e.g. odometry, SLAM).&lt;/p&gt;&#xA;&lt;h3&gt;Q5&lt;/h3&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Do I need to include the speed limits for the PID?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Although it's not strictly required, it may be beneficial. Be careful as the speed limits (a.k.a. actuation bounds) need to be handled properly by means of the &lt;strong&gt;anti-windup&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;h3&gt;Q6&lt;/h3&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;... won't be a problem if the measured speed is higher than the desired ...?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Nope, the PID is apt to the task of controlling around 0 error, thus the signs are correctly handled.&lt;/p&gt;&#xA;&lt;h3&gt;Integral anti-windup&lt;/h3&gt;&#xA;&lt;p&gt;The PID needs to be aware that the process under control does show actuation limits. To this end, one can apply the standard mechanism of anti-windup to prevent the integral term from overcharging when the system working point is beyond those bounds. The net result is that the anti-windup purposely avoids unwanted oscillations.&lt;/p&gt;&#xA;&lt;p&gt;See this &lt;a href=&quot;https://robotics.stackexchange.com/a/21555/6941&quot;&gt;answer&lt;/a&gt; for more information on the anti-windup.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastActivityDate="2020-12-29T14:50:14.880" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21571" PostTypeId="2" ParentId="21569" CreationDate="2020-12-29T15:09:07.930" Score="4" Body="&lt;p&gt;Find here a &lt;a href=&quot;https://robotics.stackexchange.com/questions/10127/pid-with-position-and-velocity-goal/10128#10128&quot;&gt;similar question&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A well-tuned position PID is most of the time capable of accomplishing the task of reaching a target with zero velocity. The central point here is that you shall provide the PID with a smooth reference trajectory (planning or input-shaping) connecting your starting point with the desired orientation.&lt;/p&gt;&#xA;&lt;p&gt;Usually, this reference trajectory is generated in the form of a minimum-jerk path that reduces oscillations, especially at the onset and the endpoint. To code this trajectory you ought to resort to a &lt;a href=&quot;http://courses.shadmehrlab.org/Shortcourse/minimumjerk.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;5th order polynomial&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;r(t) = r_i + (r_d-r_i) \cdot \left( 10\left(\frac{t}{t_f}\right)^3 -15\left(\frac{t}{t_f}\right)^4 +6\left(\frac{t}{t_f}\right)^5\right),&#xA;$$&lt;/span&gt;&#xA;where &lt;span class=&quot;math-container&quot;&gt;$t_f$&lt;/span&gt; is the time to execute the whole trajectory, hence &lt;span class=&quot;math-container&quot;&gt;$t \in [0,t_f]$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$r_i$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$r_d$&lt;/span&gt; are the starting and the ending points, respectively.&lt;/p&gt;&#xA;&lt;p&gt;This smooth input will guarantee that the PID won't struggle to deliver its effort to reach the target at a very low speed without overshoot.&lt;/p&gt;&#xA;&lt;p&gt;Of course, you are still required to properly tune the PID to let it behave successfully when fed with stepwise inputs.&lt;/p&gt;&#xA;&lt;p&gt;That said, adding cascaded PID controllers is also quite common. The diagram foresees that controllers are nested from the inner to the outer following this order:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;inner: torque (current) PID&lt;/li&gt;&#xA;&lt;li&gt;intermediate: velocity PID&lt;/li&gt;&#xA;&lt;li&gt;outer: position PID&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Have a look at this quite enlightening &lt;a href=&quot;https://www.researchgate.net/profile/Muhammet_Biberoglu/publication/284888377_Tuning_Cascade_PID_Controllers_in_PMDC_Motor_Drives_A_Performance_Comparison_for_Different_Types_of_Tuning_Methods/links/5659b48108aeafc2aac4c729/Tuning-Cascade-PID-Controllers-in-PMDC-Motor-Drives-A-Performance-Comparison-for-Different-Types-of-Tuning-Methods.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;resource&lt;/a&gt; to see how this is done.&lt;/p&gt;&#xA;&lt;p&gt;You could also have implementations with only 2 cascaded PID out of the 3 above (e.g. velocity and position) but always in the prescribed order.&lt;/p&gt;&#xA;&lt;p&gt;The key point of cascaded PID controllers is that this design can improve the overall performance and allow for tuning according to this procedure:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;First tune the torque (current) inner PID considering the motor+load as the plant;&lt;/li&gt;&#xA;&lt;li&gt;Then, tune the velocity intermediate PID considering the motor+load+current_pid as the plant;&lt;/li&gt;&#xA;&lt;li&gt;Finally, tune the position outer PID considering the motor+load+current_pid+velocity_pid as the plant.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Thereby, at the end of the story, there will be only one objective that is the position setpoint. Still, a cascaded controller cannot impose velocity setpoints, for example; rather, it will serve &amp;quot;merely&amp;quot; to improve the closed-loop system performance.&lt;/p&gt;&#xA;&lt;p&gt;Find below an illustrative example concerned with the altitude control of a drone where a 2-level cascaded PID controller is employed. The outer altitude (position) controller is combined along with the inner velocity controller.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/DMUR2.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/DMUR2.png&quot; alt=&quot;cascaded PID&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This example is taken from &amp;quot;&lt;a href=&quot;https://www.mathworks.com/videos/understanding-pid-control-part-7-important-pid-concepts-1533639185431.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Understanding PID Control, Part 7: Important PID Concepts&lt;/a&gt;&amp;quot; by Brian Douglas.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2021-01-11T14:16:30.567" LastActivityDate="2021-01-11T14:16:30.567" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="21572" PostTypeId="1" AcceptedAnswerId="21573" CreationDate="2020-12-29T16:18:58.473" Score="2" ViewCount="58" Body="&lt;p&gt;I am new to robotics, please forgive/correct any errors.&lt;/p&gt;&#xA;&lt;h2&gt;My Project Plan&lt;/h2&gt;&#xA;&lt;p&gt;I want to use a PID controlled motor in a human-interface device where I need to measure the user's exerted force on an end actuator.  The force measurement does not need to be exact (it will just be used for &amp;quot;feel&amp;quot;), but ideally it should be reasonably repeatable.  The actuator will be held at position using a PID controller (position will eventually be dynamic).&lt;/p&gt;&#xA;&lt;p&gt;I will likely be using a geared-down DC motor.  With the motor's voltage controlled via PID, my understanding is that I should be able to (roughly) measure the torque via a current sensor in series.&lt;/p&gt;&#xA;&lt;h2&gt;Question&lt;/h2&gt;&#xA;&lt;p&gt;I found a DC motor that meets all of my needs*, the &lt;a href=&quot;https://www.aliexpress.com/item/33001415863.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;JGB37-12V-76RPM&lt;/a&gt;.  However, after some research, I have found that this motor is likely a worm-gear drive.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Can I use current sensing to measure the torque on a wormgear drive&lt;/strong&gt;?  As I understand it, wormgear drives cnnIf it does not backdrive, I imagine that current will not need to increase as load torque increases (and position stays the same), and therefore will not be a reliable signal.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;If I cannot measure the torque using current sensing, what would be the best path forward?&lt;/strong&gt;  I could use a load-cell, but I imagine that will make my design bulky.  Is there a plain torque sensor I could use?&lt;/p&gt;&#xA;&lt;h2&gt;Edit: My Solution&lt;/h2&gt;&#xA;&lt;p&gt;It turns out my requirements were off by a factor of 10x: I need 28kg-cm of torque, not 2.8kg-cm.&lt;/p&gt;&#xA;&lt;p&gt;In addition to my speed requirement, I decided to use a 25 kg-cm servo (the next stronger standard, 35 kg-cm, is a bit slow).  To get my end actuator force readings, I will be using 3x 5 kg half-bridge micro load cells (each is 2 strain gauges on a small square load cell), mounted orthogonality, that should determine my actuator's contact force far better than torque measurements, without any of the possible issues (e.g. detecting force when there is no torque, like if all arm links are in a line and the user pushes axially).&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;* Motor needs:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;&amp;gt;75RPM (no load)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&amp;gt;28kg-cm {old: 2.8kg-cm} (~2 lbs force at actuator)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Bi-directional encoder with &amp;gt;1400 clicks per rotation after reduction (translates to ~1mm encoder accuracy at actuator)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Not stupidly expensive.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="27664" LastEditorUserId="27664" LastEditDate="2020-12-31T16:56:28.633" LastActivityDate="2020-12-31T16:56:28.633" Title="Can I measure torque from this motor by only measuring the current?" Tags="&lt;motor&gt;&lt;sensors&gt;&lt;pid&gt;&lt;torque&gt;&lt;force&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21573" PostTypeId="2" ParentId="21572" CreationDate="2020-12-29T16:35:50.153" Score="2" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Can I use current sensing to measure the torque on a wormgear drive?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Nope as the worm-gear is not back-driveable by construction.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;what would be the best path forward?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Using an FT sensor mounted at the end-effector would be the best solution but they are expensive.&lt;/li&gt;&#xA;&lt;li&gt;Replacing the worm-gear with a BLDC motor being careful about the gear ratio. In fact, a high gear ratio will prevent you from sensing the applied force by measuring the motor current.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2020-12-29T21:11:26.580" LastActivityDate="2020-12-29T21:11:26.580" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21575" PostTypeId="1" AcceptedAnswerId="21594" CreationDate="2020-12-30T06:06:31.110" Score="2" ViewCount="69" Body="&lt;p&gt;&lt;strong&gt;CONTEXT:&lt;/strong&gt; I'm working on a project consisting of making an underwater robot &amp;quot;fish&amp;quot; for an aquarium. It is mandatory to get at least 8 hours of autonomy. I'm responsible of the electrical part of the project and during all of my bachelor degree I've never got any lecture on batteries and I have no idea on how to get what is required. But I managed to do some research and try to figure it out:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;I took the power consumption of all the potential components necessary for the project (motors &amp;amp; pumps, Usound captors, ucontroller and a set of RF receiver and transmitters) from the specs and datasheets available.&lt;/li&gt;&#xA;&lt;li&gt;I got a battery of a 1200 mAh capacity. The battery is originally used for quadrocopters, i figured it would be good for the project since it's relatively the same thing (a software and motors).&#xA;&lt;a href=&quot;https://i.stack.imgur.com/pGfzA.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/pGfzA.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Thanks to some references (Battery university, Eletropaedia), I estimated the battery autonomy. I used an ideal estimation [=Battery Capacity/sum of power consumptions] and I supposed all the components worked 100% of the time.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;The results I got is far bellow needed :(&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Observations :&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;It seems that the pump is the only component to have an excessive consumption&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Difficulties :&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Since I have no experience in the field, I don't know if the battery I'm using is good.&lt;/li&gt;&#xA;&lt;li&gt;The pump seems to be necessary and irreplaceable. I talked to the mechanical team and replacing the pump with something else will make the project unrealistic.&lt;/li&gt;&#xA;&lt;li&gt;The 8 hours autonomy is a necessity to the project's success.&lt;/li&gt;&#xA;&lt;li&gt;The underwater environment.&lt;/li&gt;&#xA;&lt;li&gt;Dimensions (less than 8 inches long)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;strong&gt;QUESTIONS :&lt;/strong&gt; First, is the 8 hours autonomy doable? What should I do to get that? Change battery? Change pump? Use a totally different approach?&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;LINKS&lt;/strong&gt; &lt;strong&gt;:&lt;/strong&gt;&#xA;&lt;a href=&quot;https://www.amazon.ca/gp/product/B07HQLVCRX/ref=ppx_yo_dt_b_asin_title_o02_s00?ie=UTF8&amp;amp;psc=1&quot; rel=&quot;nofollow noreferrer&quot;&gt;PUMP&lt;/a&gt;&#xA;&lt;a href=&quot;https://www.amazon.ca/gp/product/B0795CJWPB/ref=ppx_yo_dt_b_asin_image_o00_s00?ie=UTF8&amp;amp;language=en_CA&amp;amp;psc=1&quot; rel=&quot;nofollow noreferrer&quot;&gt;BATTERY&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Thank you for your time&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="27665" LastEditorUserId="2289" LastEditDate="2021-01-06T01:30:06.357" LastActivityDate="2021-01-06T01:30:06.357" Title="how to get an 8 hour autonomy for an underwater robot?" Tags="&lt;battery&gt;&lt;underwater&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21576" PostTypeId="2" ParentId="21575" CreationDate="2020-12-30T15:53:13.043" Score="2" Body="&lt;p&gt;Lithium Polymer batteries are, in general, the best you're going to get as far as either energy per weight or energy per volume.  Going to a different brand may gain your 10% more capacity per volume, but not much more (if you get to that point, and you're in the US, check out ThunderPower batteries -- I fly model airplanes in competition, and the folks I fly against who fly electric either use ThunderPower, or they're not seriously expecting to win).&lt;/p&gt;&#xA;&lt;p&gt;There's not really a viable alternative -- diesel fuel has about 20 times the energy capacity as LiPo batteries, but you need a diesel engine (which doesn't exist in the form factor you need) or a diesel fuel cell (which even more so doesn't exist in the form factor you need).  There's some experimental battery technologies that get a lot of breathless press from University public relations departments, but nothing has been commercialized.&lt;/p&gt;&#xA;&lt;p&gt;Do all the bits of the fish robot have to work continuously?  Can it swim more slowly?  Does the pump have to run all the time?  If you can conserve power by having it run intermittently, that'll help a lot.&lt;/p&gt;&#xA;&lt;p&gt;If you can't get a save by operating things intermittently, you need to go back to the mechanical engineers and show them what LiPo cells are capable of, and mention that conservation of energy is a thing.  You'll be doing your part by making sure that no power is unnecessarily wasted -- but they have to make sure the goal can be accomplished with the available power.&lt;/p&gt;&#xA;" OwnerUserId="1411" LastActivityDate="2020-12-30T15:53:13.043" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="21577" PostTypeId="1" AcceptedAnswerId="21585" CreationDate="2020-12-30T18:16:34.507" Score="2" ViewCount="41" Body="&lt;p&gt;I have been reading about different types of underwater navigation.&#xA;According to this &lt;a href=&quot;https://www.youtube.com/watch?v=6_AOB9Z1Mgs&quot; rel=&quot;nofollow noreferrer&quot;&gt;Youtube video&lt;/a&gt;, these are the following navigation systems:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Inertial navigation systems (use of Inertial Measurement Unit)&lt;/li&gt;&#xA;&lt;li&gt;Acoustic (e.g., long-baseline)&lt;/li&gt;&#xA;&lt;li&gt;Geophysical (use of external environment information)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.mcsuk.org/news/beaked-whales-sonar&quot; rel=&quot;nofollow noreferrer&quot;&gt;This article&lt;/a&gt; states sonar affects whales and the use of the acoustic navigational systems should be minimized. It seems like the combination of inertial and geophysical underwater navigation is not enough. So what kind of underwater navigation system one should use in order to be environmentally friendly but also accurate?&lt;/p&gt;&#xA;" OwnerUserId="27669" LastActivityDate="2020-12-31T18:24:55.257" Title="Underwater navigation without the use of acoustic sensors" Tags="&lt;sensors&gt;&lt;navigation&gt;&lt;underwater&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21578" PostTypeId="2" ParentId="10607" CreationDate="2020-12-30T18:42:15.647" Score="0" Body="&lt;p&gt;I decided to build a V-plotter.&#xA;I am using Arduino based software.&#xA;I'd like to adapt your V-plotter math solution.&#xA;Can you solve an example problem with your calculations?&#xA;Can you help me.&#xA;I will be waiting for your answer.&#xA;thank you&#xA;&lt;a href=&quot;https://i.stack.imgur.com/qwiGz.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qwiGz.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/EX5kV.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/EX5kV.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/TNYdJ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/TNYdJ.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="27670" LastActivityDate="2020-12-30T18:42:15.647" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21579" PostTypeId="2" ParentId="20483" CreationDate="2020-12-30T18:53:32.340" Score="1" Body="&lt;p&gt;Your intuition is right as a feedforward term always helps the PID do its job, which in this case means that the steady-state error is lower.&lt;/p&gt;&#xA;&lt;p&gt;We could have practical proof of this.&lt;/p&gt;&#xA;&lt;p&gt;Imagine that in your example the effort value to get &lt;span class=&quot;math-container&quot;&gt;$20$&lt;/span&gt; rev/s amounts to &lt;span class=&quot;math-container&quot;&gt;$6$&lt;/span&gt;, for which the steady-state error &lt;span class=&quot;math-container&quot;&gt;$e$&lt;/span&gt; is thus &lt;span class=&quot;math-container&quot;&gt;$0$&lt;/span&gt; rev/s.&lt;/p&gt;&#xA;&lt;p&gt;Therefore the static gain of the process under control is &lt;span class=&quot;math-container&quot;&gt;$G_0=20/6$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;In the condition where we have a pure proportional controller with gain &lt;span class=&quot;math-container&quot;&gt;$K$&lt;/span&gt;, we can derive the following:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;K \cdot \left( 20 - 5 \cdot G_0\right) = 5.&#xA;$$&lt;/span&gt;&#xA;It comes out that the gain is &lt;span class=&quot;math-container&quot;&gt;$K = 3/2$&lt;/span&gt;, which is responsible for a steady-state error &lt;span class=&quot;math-container&quot;&gt;$e=3.33$&lt;/span&gt; rev/s.&lt;/p&gt;&#xA;&lt;p&gt;Now, let's plug the feedforward term delivering an effort &lt;span class=&quot;math-container&quot;&gt;$u_{ff}=2$&lt;/span&gt;:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;K \cdot \left(20 - (u_{ff} + u_{fb}) \cdot G_0) \right) = u_{fb}.&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;It turns out that &lt;span class=&quot;math-container&quot;&gt;$u_{fb}=10/3$&lt;/span&gt; and the error is &lt;span class=&quot;math-container&quot;&gt;$e=2.22$&lt;/span&gt; rev/s, which is lower.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2021-01-02T10:58:13.237" LastActivityDate="2021-01-02T10:58:13.237" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21580" PostTypeId="1" CreationDate="2020-12-31T01:29:29.843" Score="0" ViewCount="54" Body="&lt;p&gt;I am using an IMU which provides absolute orientation of the sensors frame &lt;span class=&quot;math-container&quot;&gt;$S$&lt;/span&gt; relative to an earth-fixed frame &lt;span class=&quot;math-container&quot;&gt;$N$&lt;/span&gt; in quaternion form, &lt;span class=&quot;math-container&quot;&gt;$^S_Nq$&lt;/span&gt;. In my experiments, I first obtain an initial orientation (when the sensor is relatively static) &lt;span class=&quot;math-container&quot;&gt;$^I_Nq$&lt;/span&gt;, and I would like to obtain the relative orientation of the sensor in the form of ZYX Euler angles (more precisely &lt;span class=&quot;math-container&quot;&gt;$ZY^{'}X^{''}$&lt;/span&gt;).&lt;/p&gt;&#xA;&lt;p&gt;Here is the procedure that I have tried:&lt;br /&gt;&#xA;First, I invert the initial orientation,&lt;br /&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$^N_Iq$&lt;/span&gt; = &lt;span class=&quot;math-container&quot;&gt;$^I_Nq^{-1}$&lt;/span&gt;&lt;br /&gt;&#xA;then, I use the result the obtain the relative quaternion as follows,&lt;br /&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$^S_Iq$&lt;/span&gt; = &lt;span class=&quot;math-container&quot;&gt;$^S_Nq$&lt;/span&gt; &lt;span class=&quot;math-container&quot;&gt;$\otimes$&lt;/span&gt; &lt;span class=&quot;math-container&quot;&gt;$^N_Iq$&lt;/span&gt;&lt;br /&gt;&#xA;Finally, to visualize the results, I convert the relative orientation to Euler angles. I also have reference trajectories calculated in a motion capture software which uses the same data. However, my result looks completely different (and wrong) as seen below,&lt;br /&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/g7LQs.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;Calculated vs. reference  relative orientation&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Curiously, if I manually set the &lt;span class=&quot;math-container&quot;&gt;$Z$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$Y$&lt;/span&gt; rotations of &lt;span class=&quot;math-container&quot;&gt;$^I_Nq$&lt;/span&gt; to zero (and then convert the result back to quaternion form), the angle trajectories match exactly (except for the offset of &lt;span class=&quot;math-container&quot;&gt;$Z$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$Y$&lt;/span&gt;).&lt;br /&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/GBZNi.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;Result with setting the first two rotations of initial orientation set to zero&lt;/a&gt;&lt;br /&gt;&#xA;What am I doing wrong?&lt;/p&gt;&#xA;&lt;p&gt;By the way, this is the MATLAB code that I'm using. Note that &lt;code&gt;initQ&lt;/code&gt; is &lt;span class=&quot;math-container&quot;&gt;$^I_Nq$&lt;/span&gt; and &lt;code&gt;relQ&lt;/code&gt; is &lt;span class=&quot;math-container&quot;&gt;$^S_Iq$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;% Average quaternion using meanrot to obtain initial orientation.&#xA;[q(1), q(2), q(3), q(4)] = parts(meanrot(quaternion(initData));&#xA;initQ = q;&#xA;&#xA;% The second method, if I manually set the first two rotations to zero.&#xA;% initEul = quat2eul(q,'ZYX');&#xA;% initEul(2) = 0;&#xA;% initEul(1) = 0;&#xA;% initQ = eul2quat(initEul,'ZYX');&#xA;&#xA;relQ = quatmultiply(mocapData,quatinv(initQ));&#xA;eulerAngles = quat2eul(quaternion(relQ),'ZYX')*180/pi;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="27673" LastActivityDate="2021-01-01T08:59:20.400" Title="Problem with calculating relative orientation" Tags="&lt;orientation&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21581" PostTypeId="2" ParentId="21023" CreationDate="2020-12-31T11:20:16.800" Score="2" Body="&lt;p&gt;This problem can be conveniently solved by resorting to a state-feedback controller as the one depicted below.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/kOLCh.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kOLCh.png&quot; alt=&quot;state-feedback&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;In this case, we have that &lt;span class=&quot;math-container&quot;&gt;$P=\frac{1}{m \cdot s^2}$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$x=\left[ z, \dot{z} \right]^T$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$K=\left[k_p, k_d\right]$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$k_f=\frac{k_p}{m}$&lt;/span&gt;. Then, we need to apply the feed-forward term &lt;span class=&quot;math-container&quot;&gt;$v=mg$&lt;/span&gt; to counteract the gravity.&lt;/p&gt;&#xA;&lt;p&gt;We end up with the transfer function of the closed-loop system:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\frac{y(s)}{r(s)}=\frac{\frac{k_p}{m}}{s^2+\frac{k_d}{m}s+\frac{k_p}{m}}.&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a well-known and well-studied second-order system given in the form&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\frac{\omega_n^2}{s^2+2\xi\omega_ns+\omega_n^2},&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;where the parameters &lt;span class=&quot;math-container&quot;&gt;$\omega_n$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\xi$&lt;/span&gt; are expressed as functions of the gains &lt;span class=&quot;math-container&quot;&gt;$k_p$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$k_d$&lt;/span&gt; and the mass &lt;span class=&quot;math-container&quot;&gt;$m$&lt;/span&gt; as &lt;span class=&quot;math-container&quot;&gt;$\omega_n=\sqrt\frac{k_p}{m}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\xi=\frac{k_d}{2\sqrt{m \cdot k_p}}$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;To meet the given requirements, have a look at the information you can peruse for example at &lt;a href=&quot;https://www.javatpoint.com/control-system-time-response-of-second-order-system&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.javatpoint.com/control-system-time-response-of-second-order-system&lt;/a&gt;, where the overshoot and the settling-time are provided by the following expressions:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\begin{cases}&#xA;e^\frac{\pi\xi}{\sqrt{1-\xi^2}}=0.05 \\&#xA;\frac{4}{\xi\omega_n}=1&#xA;\end{cases}.&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;The gains &lt;span class=&quot;math-container&quot;&gt;$k_p$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$k_d$&lt;/span&gt; can be thus readily determined from the formulas above through substitution.&lt;/p&gt;&#xA;&lt;p&gt;For a unitary mass &lt;span class=&quot;math-container&quot;&gt;$m=1$&lt;/span&gt; kg, it comes out that &lt;span class=&quot;math-container&quot;&gt;$k_d=8$&lt;/span&gt; Ns/m and &lt;span class=&quot;math-container&quot;&gt;$k_p=k_f=33.596$&lt;/span&gt; N/m.&lt;/p&gt;&#xA;&lt;p&gt;Here's the step response:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/oAfOp.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/oAfOp.png&quot; alt=&quot;step-response&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The step response is generally given with respect to a unitary input step; however, the system is linear and thus this behavior is preserved also for an input step of amplitude &lt;span class=&quot;math-container&quot;&gt;$0.9$&lt;/span&gt; m.&lt;/p&gt;&#xA;&lt;p&gt;To conclude, your controller's output shall be:&lt;/p&gt;&#xA;&lt;pre class=&quot;lang-matlab prettyprint-override&quot;&gt;&lt;code&gt;u = params.mass*params.gravity - kp*z - kd*v_z + kf*z_des;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2021-03-25T10:26:41.593" LastActivityDate="2021-03-25T10:26:41.593" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21582" PostTypeId="1" CreationDate="2020-12-31T13:49:15.330" Score="0" ViewCount="26" Body="&lt;p&gt;In gear design, the backlash is introduced in the design itself (not by tolerances of manufacturing) to allow free meshing of the gears. The backlash in the design can be minimized by reducing the pitch of the gears. For example, If the pitch of a gear is halved the designed backlash can also be halved. Though the reduced pitch also reduces the torque capacity of the gear. Similarly, is it possible to reduce the pitch of the lead screw to reduce the backlash in the design?&lt;/p&gt;&#xA;" OwnerUserId="23311" LastActivityDate="2020-12-31T13:49:15.330" Title="Can we reduce pitch of a lead screw to reduce backlash of the lead screw?" Tags="&lt;motion&gt;&lt;gearing&gt;&lt;linear-bearing&gt;" AnswerCount="0" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="21583" PostTypeId="2" ParentId="20368" CreationDate="2020-12-31T15:26:11.440" Score="0" Body="&lt;p&gt;You can operate the quadcopter with a poorly tuned attitude rate PID, log relevant quantities, build a model from the data, and finally use the model to tune the PID iteratively.&lt;/p&gt;&#xA;&lt;p&gt;Suppose that such an inner PID delivers voltage commands to the propellers. You could instruct the quadcopter to safely perform a bunch of maneuvers and at the same time log/acquire the data you will then use to build the model. Candidate data will consist of pairs of voltage and measured speed samples.&lt;/p&gt;&#xA;&lt;p&gt;The key point here is to control the quad such that the acquired dataset will be informative enough to support the subsequent identification stage. To this end, alternate low and quick maneuvers with different amplitudes. Anyway, since the inner and outer loops will be operational, the quad will fly safely.&lt;/p&gt;&#xA;&lt;p&gt;Using those data you can perform closed-loop identification via the Predicted Error Method (PEM). Typical PEM based approaches resort to the well-known ARX, ARMAX, BJ, OE structures.&lt;/p&gt;&#xA;&lt;p&gt;Once done with the model, you could tune your PID based on such knowledge by employing standard methods like pole placement, loop shaping and the like. If you use MATLAB, there exist automatic techniques for that.&lt;/p&gt;&#xA;&lt;p&gt;Iterate through this process multiple times until you get acceptable performance.&lt;/p&gt;&#xA;&lt;p&gt;Better off giving up with Ziegler-Nichols methods to adhere to model-based design instead.&lt;/p&gt;&#xA;&lt;p&gt;You may find this &lt;a href=&quot;https://www.mathworks.com/videos/series/drone-simulation-and-control.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;webinar&lt;/a&gt; very much interesting.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastActivityDate="2020-12-31T15:26:11.440" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21584" PostTypeId="2" ParentId="21575" CreationDate="2020-12-31T18:20:00.730" Score="1" Body="&lt;p&gt;In underwater autonomous vehicles there are basically two solutions to increasing long term autonomy.&lt;/p&gt;&#xA;&lt;p&gt;The first, better power generation, (which has already been mentioned) won't really work in your case. See &lt;a href=&quot;https://www.mbari.org/technology/emerging-current-tools/power/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; for a discussion page on larger fuel cells&lt;/p&gt;&#xA;&lt;p&gt;The second, which is more common, is reducing the amount of actuation. One of the most popular underwater vehicle designs is the glider design. The &lt;a href=&quot;https://www.whoi.edu/what-we-do/explore/underwater-vehicles/auvs/slocum-glider/&quot; rel=&quot;nofollow noreferrer&quot;&gt;slocum glider&lt;/a&gt; which only pumps water in and out and moves a tailfin (IT also has a very low power computer running)&lt;/p&gt;&#xA;&lt;p&gt;My suggestion: the project in its current state is unfeasible. You need to redesign many components. Just running the motor for 8 hours is infeasible, not to mention the other components you want to run (computers and ultrasounds).&lt;/p&gt;&#xA;" OwnerUserId="16033" LastActivityDate="2020-12-31T18:20:00.730" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21585" PostTypeId="2" ParentId="21577" CreationDate="2020-12-31T18:24:55.257" Score="2" Body="&lt;p&gt;Usually, most underwater robots are running on just inertial navigation and surfacing occasionally. This tends to work better than one would expect and is what most large scale deployments end up using. Additionally, most of these use a &lt;a href=&quot;https://en.wikipedia.org/wiki/Acoustic_Doppler_current_profiler#Bottom_tracking&quot; rel=&quot;nofollow noreferrer&quot;&gt;Doppler Velocity Log&lt;/a&gt;, Pressure Sensor, and Compass in addition to their IMU.&lt;/p&gt;&#xA;&lt;p&gt;Geophysical localization is fairly precise, SLAM solutions have been developed for mobile and underwater robotics for a long time. I believe underwater SLAM solutions are in a fairly mature place and if your robot is operating in a feature-rich environment and has the ability to use LIDAR or cameras you could get a fairly good localization solution.&lt;/p&gt;&#xA;&lt;p&gt;As an aside, usually, the sonar on robots is much less powerful and less overused than shipboard sonar. It's probably not a huge issue unless you plan to explicitly work near whales (but I am not a marine biologist).&lt;/p&gt;&#xA;" OwnerUserId="16033" LastActivityDate="2020-12-31T18:24:55.257" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="21586" PostTypeId="1" CreationDate="2021-01-01T02:11:15.973" Score="1" ViewCount="60" Body="&lt;p&gt;Currently, I am interested in calculating the inverse kinematics of the robot illustrated below. The robot has 2DoF with two revolute joints. Without the cylinder which physically connecting the two links, the problem might be ideal:&#xA;&lt;span class=&quot;math-container&quot;&gt;$\delta q$&lt;/span&gt;= &lt;span class=&quot;math-container&quot;&gt;$J^{-1} \delta x$&lt;/span&gt;.&lt;br /&gt;&#xA;Since the cylinder movement is caused by the rotation of J1, the relationship between J1 and J2 can be described as follow:&#xA;&lt;span class=&quot;math-container&quot;&gt;$\delta q_{2 additional} $&lt;/span&gt; =&lt;span class=&quot;math-container&quot;&gt;$scalefactor $&lt;/span&gt; * &lt;span class=&quot;math-container&quot;&gt;$\delta q_1$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;By simply extending the output from &lt;span class=&quot;math-container&quot;&gt;$\delta q$&lt;/span&gt;= &lt;span class=&quot;math-container&quot;&gt;$J^{-1} \delta x$&lt;/span&gt; by&#xA;(&lt;span class=&quot;math-container&quot;&gt;$\delta q_1,\delta q_2+scalefactor*\delta q_1)$&lt;/span&gt; the problem could be solved, but it seems to be rather ad-hoc. Is there a way to consider this extra movement of the cylinder already during calculating the Jacobian matrix?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/7nSX3.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7nSX3.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="21382" LastEditorUserId="21382" LastEditDate="2021-01-02T11:49:23.643" LastActivityDate="2021-01-02T11:49:23.643" Title="Inverse Kinematic of physically connected 2DoF robot with revolute joints" Tags="&lt;inverse-kinematics&gt;&lt;jacobian&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21587" PostTypeId="2" ParentId="21580" CreationDate="2021-01-01T08:59:20.400" Score="1" Body="&lt;p&gt;Referencing book &amp;quot;Robotics Modelling, Planning and control&amp;quot; by Bruno Siciliano from Springer publication. Chapter 3.7 Orientation error i.e relative orientation.&lt;/p&gt;&#xA;&lt;p&gt;Relative Eulers angle can only use if you have a spherical joint i.e 3-revolute joints each abut different perpendicular axis. Check your configuration before using Eulers angle. For more refer referenced book to understand more.&lt;/p&gt;&#xA;&lt;p&gt;Check out the similar solved question- &lt;a href=&quot;https://robotics.stackexchange.com/questions/14785/inverse-kinematic-orientation-problem/15274#15274&quot;&gt;Inverse kinematic orientation problem&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="19034" LastActivityDate="2021-01-01T08:59:20.400" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21588" PostTypeId="2" ParentId="21559" CreationDate="2021-01-01T09:39:58.047" Score="1" Body="&lt;p&gt;First thing first- you can consider any direction as positive or negative, but need to keep it constant while solving the problem and even while programming robot.&lt;/p&gt;&#xA;&lt;p&gt;In almost all cases of 6-DOF manipulator, the co-ordinate system of joint 1 is aligned with the universal coordinate system.&lt;/p&gt;&#xA;&lt;p&gt;Theta- its joint parameter, it signifies angle between 2 x-axis about the z-axis.&lt;/p&gt;&#xA;&lt;p&gt;Alpha- its link parameter, it signifies twist of 2 z-axis about x-axis. Consider one link and try to visualize the coordinate system at each end of the link.&lt;/p&gt;&#xA;&lt;p&gt;The answer to question-2 is- you can either write 0 or 180 degree, but remember it while programming for setting home position of the robot and while calibration of joints.&lt;/p&gt;&#xA;&lt;p&gt;Hope this helps.&lt;/p&gt;&#xA;" OwnerUserId="19034" LastActivityDate="2021-01-01T09:39:58.047" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21589" PostTypeId="2" ParentId="21193" CreationDate="2021-01-01T10:30:22.120" Score="0" Body="&lt;p&gt;We can solve this problem by using MATLAB and specifically by applying the &lt;em&gt;partial fraction expansion&lt;/em&gt; by means of the function &lt;a href=&quot;https://www.mathworks.com/help/matlab/ref/residue.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;strong&gt;&lt;code&gt;residue&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The MATLAB code below&lt;/p&gt;&#xA;&lt;pre class=&quot;lang-matlab prettyprint-override&quot;&gt;&lt;code&gt;[r, p] = residue([20 100], [1 13.5 41 80 100]);&#xA;&#xA;syms s;&#xA;F1 = r(1) / (s - p(1));&#xA;F2 = r(2) / (s - p(2));&#xA;F3 = r(3) / (s - p(3));&#xA;F4 = r(4) / (s - p(4));&#xA;&#xA;F34 = (2*real(r(3))*s - 2*real(r(3))*real(p(3)) - 2*imag(r(3))*imag(p(3))) / ...&#xA;      (s^2 - 2*real(p(3))*s + abs(p(3)));&#xA;&#xA;F = F1 + F2 + F34;&#xA;f = ilaplace(F);&#xA;&#xA;disp('F(s) = ');&#xA;pretty(vpa(F1 + F2 + F3 + F4, 5));&#xA;disp(' = ');&#xA;pretty(vpa(F, 5));&#xA;&#xA;disp('f(t) = ');&#xA;pretty(vpa(f, 5));&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;outputs the following result:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;F(s) = &#xA;  1.0121       0.13579     - 0.57396 - 0.74149i    - 0.57396 + 0.74149i&#xA;---------- + ---------- + --------------------- + ---------------------&#xA;s + 2.2394   s + 10.138   s + 0.56117 - 2.0223i   s + 0.56117 + 2.0223i&#xA;&#xA; = &#xA;  1.0121     (1.1479 s - 2.3549) 1.0     0.13579&#xA;---------- - ----------------------- + ----------&#xA;s + 2.2394     2                       s + 10.138&#xA;              s  + 1.1223 s + 2.0987&#xA;&#xA;f(t) = &#xA;exp(-2.2394 t) 1.0121 + exp(-10.138 t) 0.13579 - exp(-0.56117 t)&#xA;&#xA;   (cos(1.3356 t) - sin(1.3356 t) 1.9561) 1.1479&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The key is that the fractions &lt;code&gt;F3&lt;/code&gt; and &lt;code&gt;F4&lt;/code&gt; containing imaginary numbers can be conveniently grouped up into &lt;code&gt;F34&lt;/code&gt;, which is instead a fraction with a second-order denominator containing only real numbers that in turn yields the well-known oscillatory behavior with an exponential profile.&lt;/p&gt;&#xA;&lt;p&gt;In general, polynomials with real coefficients may exhibit only up to complex and conjugate roots, which can be always handled following the procedure above that basically lets imaginary numbers fade away into fractions with second-order denominators.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2021-01-01T21:33:25.063" LastActivityDate="2021-01-01T21:33:25.063" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21590" PostTypeId="1" AcceptedAnswerId="21596" CreationDate="2021-01-02T06:29:29.207" Score="1" ViewCount="55" Body="&lt;p&gt;I am working in the development of 5 DOF robotic arm, The Controller will be consisted of 5 Serad Intelligent  Servo Motion control drives, and I am working for HMI development currently, The Teach pandent as kuka uses in its KR C4 controller with its own processor, I want to do that on windows , I want to know which software will be best for this purpose for doing all necessary features which Kuka does&lt;/p&gt;&#xA;" OwnerUserId="27171" LastActivityDate="2021-01-08T11:00:02.763" Title="How to develop Teach pandent for robotic arm" Tags="&lt;robotic-arm&gt;&lt;industrial-robot&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="21591" PostTypeId="1" CreationDate="2021-01-02T07:05:54.183" Score="0" ViewCount="13" Body="&lt;p&gt;&lt;br /&gt;&#xA;I'm working on ABB's IRB 14000 Yumi robot but I'm having some problems.&lt;br /&gt;&#xA;I’m trying to figure out a way in which I could use a Yumi arm in jogging mode while it is carrying out some tasks (the task concerning the jogging arm is not active).&lt;br /&gt;&#xA;For now, I just tried it during the simulation on RobotStudio: I carried out the tasks, and then I moved the FlexPendant joystick but every time I get the “not allowed command” error.&lt;br /&gt;&#xA;The tasks that I carry out are: T_ROB_L and OtherMyTask all of them are set with “normal” type.&lt;br /&gt;&#xA;Has anybody succeeded in doing it or has suggestions regarding how I can be able to do it?&lt;/p&gt;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="27684" LastActivityDate="2021-01-02T07:05:54.183" Title="ABB IRB 14000 Yumi problem with jogging arm and task execution" Tags="&lt;robotic-arm&gt;&lt;industrial-robot&gt;&lt;redundant-robots&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21592" PostTypeId="2" ParentId="20320" CreationDate="2021-01-02T12:07:48.810" Score="0" Body="&lt;p&gt;I believe the resource &lt;a href=&quot;https://robotics.stackexchange.com/a/21571/6941&quot;&gt;https://robotics.stackexchange.com/a/21571/6941&lt;/a&gt; already pretty much answers your question.&lt;/p&gt;&#xA;&lt;p&gt;In essence, both the following approaches are valuable and can be combined together:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A pre-calculated motion profile helps the system reduce the jerk.&lt;/li&gt;&#xA;&lt;li&gt;Cascaded PID controllers allow for improving the system response.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2021-01-02T12:42:35.390" LastActivityDate="2021-01-02T12:42:35.390" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21594" PostTypeId="2" ParentId="21575" CreationDate="2021-01-02T21:33:22.987" Score="0" Body="&lt;p&gt;Thank you for your answers and comments. We finally decided to change the pump with a less energy consuming system. We're testing the prototype in the next to weeks we hope we get the estimated autonpmy&lt;/p&gt;&#xA;" OwnerUserId="27665" LastActivityDate="2021-01-02T21:33:22.987" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21595" PostTypeId="2" ParentId="287" CreationDate="2021-01-04T00:06:01.847" Score="0" Body="&lt;p&gt;The approach I took to this in my project, &lt;a href=&quot;https://github.com/Ezward/Esp32CameraRover2&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/Ezward/Esp32CameraRover2&lt;/a&gt;, was to develop a small core for the robot in C++; enough to do closed loop speed control on motors, provide a command interpreter so the client can control the robot and to serve an html/css/js client application over http.  The client is served by the robot itself and connects to the robot over websockets.  Partitioning in this way allows very time critical tasks, like speed control, to run on the robot, and higher level tasks (like go-to-goal, path following or object recognition) to run in JavaScript.  This also allows the robot to be built using a very inexpensive microcontroller; this project uses an Esp32Cam.  It can stream real-time video from the robot to the client which opens up a lot of options for processing images in JavaScript.  The project is build on a very inexpensive platform (about $40 total for parts) and requires little-to-no soldering.  I'm using the ESP32 Arduino library in the PlatformIO IDE, which is a plugin for Visual Studio Code.  This is a great IDE for this kind of project; you get the ease of the Arduino framework for the low level robot code and you get a very nice JavaScript experience (unlike the Arduino IDE).  Debugging the client code is done using browser developer tools.&lt;/p&gt;&#xA;" OwnerUserId="24763" LastActivityDate="2021-01-04T00:06:01.847" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21596" PostTypeId="2" ParentId="21590" CreationDate="2021-01-05T14:17:58.107" Score="1" Body="&lt;p&gt;As it (almost) always, there is no best in (software) engineering. There are only trade-offs.&#xA;For a windows based pendant, there are 2 main decisions groups to make. (1) The UI Framework you will be using and (2) the programming language editor features (assuming yout robot will have possibility to write an &amp;quot;application program&amp;quot;).&lt;/p&gt;&#xA;&lt;p&gt;Alongside the software, teach pendants (subject to local laws and standards) require an e-stop and a deadmansswitch (a 3 position enable button). These are subject to a risk-analysis (!) and are connected to a safety controller (again subject to a risk analysis!).  &lt;strong&gt;The importance of knowing and respecting local laws/regulations and (safety) standards when making anything capable of endangering humans cannot be emphasised enough!!!&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I guess step 0 is to come up with a UI concept and draw it on paper, in Powerpoint, in Visio, in Adobe XD or in Figma to have a concept what you can implement.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;UI Frameworks help you create windows, icons, input fields, labels, etc. all Graphical related thing you see on screen. The first choice here is to decide if you want a web-based UI, displayed only in a browser, a native UI for windows (or should it be cross platform, this way you can avoid the need for win license for every pendant) or both.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;You can look into web bases UI Frameworks like Vue, Angular, React, Svelte&lt;/li&gt;&#xA;&lt;li&gt;You can look into the .net UI Framework (Windows Forms, but this see being deprecated), or something Linux/Mac/Win cross platform like &lt;a href=&quot;https://devblogs.microsoft.com/dotnet/introducing-net-multi-platform-app-ui/&quot; rel=&quot;nofollow noreferrer&quot;&gt;.net MAUI&lt;/a&gt; (I assume this will be the successor of WinForms), &lt;a href=&quot;https://www.electronjs.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Electron&lt;/a&gt;, &lt;a href=&quot;https://reactnative.dev/&quot; rel=&quot;nofollow noreferrer&quot;&gt;React Native&lt;/a&gt; (with React Native for Windows) or &lt;a href=&quot;https://www.qt.io/&quot; rel=&quot;nofollow noreferrer&quot;&gt;qt&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;You can use something that (should/will) work anywhere like &lt;a href=&quot;https://flutter.dev/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Flutter&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I think with the exception of winForms and qt all other frameworks are bound to a certain programming language (not accounting for javascript/typescript difference). If you have a concept you can create the UI in the chosen Framework.&lt;/p&gt;&#xA;&lt;p&gt;The next step would be to add functionality to the UI. As the UI is only graphics there will be absolutely no robot related functionality behind it. You need an interface to the robot controller (you can choose from HTTP Rest, MQTT, AMQP, ROS, protobuf, cap'n proto, gRPC, WebSockets). Please note that the interface alone also does not provide actual functionality only message exchange. Make sure that the selected interface has libraries both for the programing language used on the controller and on the pendant.&lt;/p&gt;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;On the pendant side, all functionality that is needed is somewhat straight forward to implement compared to the programming language editor part.&#xA;That is the most complex task on the pendant (assuming you want syntax highlighting and intelligent code completion (&amp;quot;intellisense&amp;quot;) integrated in the UI).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;For Syntax highlighting you need a syntax of a programming language. You can consider copying an existing language (like KRL), but I do not know if that is legal. Anyways, once you have a language, you need (at least a partial) interpreter (parser+lexer) for the language you use to program your robot. By partial interpreter, I mean at least a lexer which can color the words (tokens) you type,&lt;/li&gt;&#xA;&lt;li&gt;For good &amp;quot;intellisense&amp;quot; you probably need a parser also. You can use an interpreter generator like &lt;a href=&quot;https://www.antlr.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;ANTLR&lt;/a&gt;, or &lt;a href=&quot;http://dinosaur.compilertools.net/yacc/&quot; rel=&quot;nofollow noreferrer&quot;&gt;yacc&lt;/a&gt; to generate your interpreter based on the syntax of the programming language you are using. This interpreter will also come in handy, when you are actually interpreting the program you  wrote on the pendant, when you execute it on the controller.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2021-01-08T11:00:02.763" LastActivityDate="2021-01-08T11:00:02.763" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="21597" PostTypeId="1" AcceptedAnswerId="21599" CreationDate="2021-01-06T02:43:06.677" Score="0" ViewCount="118" Body="&lt;p&gt;Im trying to rotate one accelerometer vector from body frame to ned frame, but i cant found what im doing wrong. For now, im using an online dataset that provides me roll, pitch and heading information, where heading is 0 rad when alligned with east axis, not north axis, the dataset also provides accelereration in x, y, z. For making the rotation im using a direct cossine matrix, like this below:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/u5so3.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/u5so3.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The x axis of the imu is alligned with the movement of the car, the y axis with the lateral acceleration, and z axis with gravity. What im doing is first change the heading angle to get an orientation with respect of north, after this, multiply the DCM with the acceleration [Ax,-Ay,Az] in this order, Ay is negated because the dataset gives me acceleration positive in the left axis.  Im expecting to have the NED acceleration. But the answer seems wrong. The IMU used in this dataset is one oxts rt3003.&lt;/p&gt;&#xA;" OwnerUserId="27655" LastActivityDate="2021-01-06T15:14:24.070" Title="IMU Change of reference frame" Tags="&lt;imu&gt;&lt;rotation&gt;&lt;frame&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21599" PostTypeId="2" ParentId="21597" CreationDate="2021-01-06T13:53:06.030" Score="1" Body="&lt;p&gt;&lt;strong&gt;The IMU senses deviations from gravity within the inertial frame&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Essentially, IMU measures the specific force &lt;span class=&quot;math-container&quot;&gt;$f_b$&lt;/span&gt; given in the base frame as:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;f_b = R^{bn}(a_{ii}^n-g^n),&#xA;$$&lt;/span&gt;&#xA;where &lt;span class=&quot;math-container&quot;&gt;$g^n$&lt;/span&gt; is the gravity in the navigation frame (NED), &lt;span class=&quot;math-container&quot;&gt;$a_{ii}^n$&lt;/span&gt; is the inertial acceleration expressed in NED frame and, finally, &lt;span class=&quot;math-container&quot;&gt;$R^{bn}$&lt;/span&gt; is the rotation matrix from NED to the body frame.&lt;/p&gt;&#xA;&lt;p&gt;Further, it holds that the acceleration we are interested in, that is &lt;span class=&quot;math-container&quot;&gt;$a_{nn}^n$&lt;/span&gt; given in the NED frame, can be expressed in relation to &lt;span class=&quot;math-container&quot;&gt;$a_{ii}^n$&lt;/span&gt; through the centrifugal and Coriolis terms:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;a_{ii}^n=a_{nn}^n + 2\omega_{ie}^n \times v_n^n + \omega_{ie}^n \times \omega_{ie}^n \times p^n.&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Usually, both centrifugal and Coriolis contributions can be neglected, thus: &lt;span class=&quot;math-container&quot;&gt;$a_{nn}^n \approx a_{ii}^n$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Thereby, it comes out:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;a_{nn}^n=R^{nb}f_b+g^n.&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Most likely, you are not considering the contribution of &lt;span class=&quot;math-container&quot;&gt;$g^n$&lt;/span&gt; in your transformation above.&lt;/p&gt;&#xA;&lt;p&gt;I warmly recommend that you refer to Section 2.3 &amp;quot;&lt;a href=&quot;https://arxiv.org/pdf/1704.06053.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Using Inertial Sensors for Position&#xA;and Orientation Estimation&lt;/a&gt;&amp;quot; by M. Kok, &lt;em&gt;et al.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2021-01-06T15:14:24.070" LastActivityDate="2021-01-06T15:14:24.070" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="21600" PostTypeId="2" ParentId="19235" CreationDate="2021-01-06T18:37:51.547" Score="1" Body="&lt;p&gt;The referenced paper appears to be talking mainly about &amp;quot;mobile devices&amp;quot; (i.e. phones), not mobile robots.  I believe there are simply physical limitations to using something like LIDAR on a phone.  When holding a small device in your hand and up against your head, most of the device is covered, so optical technologies won't work well.  That is why the majority of techniques the paper investigates are radio technologies.  (Radio waves can travel around and through human bodies and walls as opposed to line of sight optical sensors like LIDAR).&lt;/p&gt;&#xA;&lt;p&gt;I'd contend that LIDAR for indoor mobile robots is used extensively.  Robots that use 2D LIDAR for indoor SLAM can be found throughout the literature.  Including some notable books like &lt;a href=&quot;http://probabilistic-robotics.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Probabilistic Robotics&lt;/a&gt;.  For 2D LIDAR to be most effective, it needs to be held at a consistent height above the ground.  Something that comes naturally to wheeled indoor robots.&lt;/p&gt;&#xA;&lt;p&gt;The costs of 2D LIDAR have greatly been reduced over the years.  Now even commodity vacuuming robots use it.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/tQlPg.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tQlPg.jpg&quot; alt=&quot;SICK Lidar&quot; /&gt;&lt;/a&gt; --&amp;gt; &lt;a href=&quot;https://i.stack.imgur.com/VeUqft.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/VeUqft.jpg&quot; alt=&quot;Hokuyo Lidar&quot; /&gt;&lt;/a&gt; --&amp;gt; &lt;a href=&quot;https://i.stack.imgur.com/TjjjYt.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/TjjjYt.jpg&quot; alt=&quot;Neato Botvac&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;However, I will also mention that in recent years cheap 3D sensors like the Kinect and its derivatives have shifted robotics (and SLAM research) to 3D.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2021-01-06T18:37:51.547" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21601" PostTypeId="2" ParentId="19494" CreationDate="2021-01-07T14:25:59.333" Score="0" Body="&lt;p&gt;I'm going to try to answer this question but please don't flame me if I got something wrong. Those were two heavy papers and I didn't have as much time as I wish to go through them.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;The pyramids are the same as shrank image indeed. Image pyramids are images with lower resolution. As a general concept, by reducing the resolution and representing a different amount of details, the tracking algorithm can focus on different types of feature and become more generic. See &lt;a href=&quot;https://docs.opencv.org/3.4/d4/d1f/tutorial_pyramids.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;pyrUp/Down&lt;/a&gt; in OpenCV.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;It is a little hard to answer because it is not clear what is the granularity of your question.&lt;/p&gt;&#xA;&lt;p&gt;I feel like the general steps of the algorithm are there but if I have the time later, I'll go through it again later. However, Gaussian-Newton optimization are rarely plug and play for me, so I would be cautious there in there of the time needed to have it running.&lt;/p&gt;&#xA;&lt;p&gt;I'm wondering if, since you'll be ignoring &lt;span class=&quot;math-container&quot;&gt;$\alpha$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\sigma^2_{d_{i}}$&lt;/span&gt; You're not implementing the method of &lt;strong&gt;Steinbrücker et al.&lt;/strong&gt; in &lt;em&gt;Real-Time Visual Odometry from Dense RGB-D Images&lt;/em&gt; (full disclaimer I didn't have time to read this one in details just skimmed it).&lt;/p&gt;&#xA;" OwnerUserId="1615" LastActivityDate="2021-01-07T14:25:59.333" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21602" PostTypeId="1" CreationDate="2021-01-07T19:28:15.617" Score="0" ViewCount="26" Body="&lt;p&gt;If I knew the exact location of my robot and have an accurate map (for eg. an occupancy grid map) of the environment beforehand, how can I compute a measure of how well the laser scan data agree with the given map ?&lt;/p&gt;&#xA;" OwnerUserId="23475" LastActivityDate="2021-02-14T16:02:35.337" Title="Compute how well a laser scan matches or overlaps with its environment given a map of the environment and location of the robot is known" Tags="&lt;mobile-robot&gt;&lt;slam&gt;&lt;localization&gt;&lt;lidar&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21603" PostTypeId="1" CreationDate="2021-01-08T00:58:08.287" Score="0" ViewCount="11" Body="&lt;p&gt;I have seen a lot of posts citing &lt;a href=&quot;https://robotics.stackexchange.com/a/7461&quot;&gt;this answer&lt;/a&gt; which gives the rough estimate that a quadcopter needs approximately 150 watts of power per kg in order to hover. I am trying to do some theoretical calculations on the current draw of my four brushless motors.&lt;/p&gt;&#xA;&lt;p&gt;I have four &lt;a href=&quot;https://shop.makerfire.com/products/copy-of-4pcs-emax-tinyhawk-s-0802-15500kv-brushless-motor-for-indoor-racing-drone&quot; rel=&quot;nofollow noreferrer&quot;&gt;EMAX 0802 15500KV&lt;/a&gt; motors. I have calculated the total mass of my build, including the weight of the engine, propellors, ESCs, etc to be approximately 200 grams. Using the results of the previously mentioned post implies that I need no more than 40 total watts of power in order to hover. If I am running these motors at ~8v than the current draw from my motors, and thus from the ESC, should be no more than 5-6 Amps total.&lt;/p&gt;&#xA;&lt;p&gt;Does this rough calculation make sense? This seems like a very small current draw considering most ESCs are rated for 30-40 amps.&lt;/p&gt;&#xA;" OwnerUserId="27704" LastEditorUserId="27704" LastEditDate="2021-01-08T01:17:01.210" LastActivityDate="2021-01-08T01:17:01.210" Title="Calculating lift capability and current draw of quadcopter motors" Tags="&lt;quadcopter&gt;&lt;brushless-motor&gt;&lt;esc&gt;&lt;current&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21604" PostTypeId="1" CreationDate="2021-01-08T03:00:56.927" Score="0" ViewCount="33" Body="&lt;p&gt;I have a ground mobile robot with wheel for indoor applications and I want to develop a vSLAM algorithm for it. So one problem for me is how to know my modifications do really improve the performance of vSLAM. Since I want to test it in real home environment, it is not feasible to install a motion capture system.&#xA;So my questions are:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Could you recommend some public vslam datasets for indoor ground robots?&lt;/li&gt;&#xA;&lt;li&gt;Can consumer level 1d lidar provides ground truth? such as rpLidar? Since the environment is not that friendly. What I concern is that I am not sure if lidar can provide much more accurate pose as ground truth in the place where vSLAM can't meet my accuracy target, such as mirror, windows/door with transparent glasses.&lt;/li&gt;&#xA;&lt;li&gt;Are there any methods to evaluate vSLAM accuracy without ground truth?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;I really appreciate your answers. Thanks.&lt;/p&gt;&#xA;&lt;p&gt;Best&#xA;Yanming&lt;/p&gt;&#xA;" OwnerUserId="27705" LastActivityDate="2021-01-08T03:00:56.927" Title="How to evaluate the location accuracy of a visual slam algorithm in an indoor enviorment without motion capture system?" Tags="&lt;slam&gt;&lt;wheeled-robot&gt;&lt;lidar&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21605" PostTypeId="1" CreationDate="2021-01-08T06:23:46.530" Score="0" ViewCount="102" Body="&lt;p&gt;So I followed this guide to install opencv on Ubuntu 16.04 LTS &lt;a href=&quot;https://www.pyimagesearch.com/2016/10/24/ubuntu-16-04-how-to-install-opencv/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.pyimagesearch.com/2016/10/24/ubuntu-16-04-how-to-install-opencv/&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;When I try running a python script that imports cv2 I get this issue:&#xA;ImportError: /opt/ros/kinetic/lib/python2.7/dist-packages/cv2.so: undefined symbol: PyCObject_Type&lt;/p&gt;&#xA;&lt;p&gt;I am aware of all the other posts that have the same error but most of the solutions result with ROS and opencv not being compatible together anymore or something like that. I need to use computer vision with ROS.&lt;/p&gt;&#xA;" OwnerUserId="27706" LastActivityDate="2021-01-08T06:23:46.530" Title="ImportError: /opt/ros/kinetic/lib/python2.7/dist-packages/cv2.so: undefined symbol: PyCObject_Type" Tags="&lt;computer-vision&gt;&lt;python&gt;&lt;opencv&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21607" PostTypeId="2" ParentId="7199" CreationDate="2021-01-08T13:14:47.790" Score="2" Body="&lt;p&gt;I assume that you'd aim to place the poles in &lt;span class=&quot;math-container&quot;&gt;$-0.5 \pm 0.2 \cdot i$&lt;/span&gt; for stability reasons.&lt;/p&gt;&#xA;&lt;p&gt;In the s-domain, the transfer function is:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\frac{\Phi_c}{\Phi}=\frac{K_p}{s^2+K_ds+K_p}.&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Computing the closed-loop poles, hence the roots of the characteristics polynomial &lt;span class=&quot;math-container&quot;&gt;$s^2+K_ds+K_p$&lt;/span&gt;, gives you:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\begin{array}{cc}&#xA;K_d=1 \\&#xA;K_p=1.16/4&#xA;\end{array}.&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2021-01-08T21:50:01.867" LastActivityDate="2021-01-08T21:50:01.867" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21608" PostTypeId="1" CreationDate="2021-01-08T13:57:02.063" Score="1" ViewCount="42" Body="&lt;p&gt;I have two webcams, which are mounted close together. I plan to use them to find out the true depth of certain pixels of images. Suppose I use a standard multi camera calibration setup and find out the relative orientation of one with respect to the other camera, can it perform as well as a stereo camera setup for depth estimation? What are the challenges typically? How accurate must the calibration be?&lt;/p&gt;&#xA;" OwnerUserId="26640" LastActivityDate="2021-01-09T10:38:52.290" Title="Is two cameras equivalent to Stereo camera setup?" Tags="&lt;computer-vision&gt;&lt;cameras&gt;&lt;3d-reconstruction&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21609" PostTypeId="2" ParentId="21608" CreationDate="2021-01-09T10:12:31.677" Score="1" Body="&lt;p&gt;Yes you can use two camera the same as using single stereo camera for depth perception.&lt;br /&gt;&#xA;Step on calibration camera for two camera and stereo camera is same.&lt;/p&gt;&#xA;" OwnerUserId="22800" LastActivityDate="2021-01-09T10:12:31.677" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21610" PostTypeId="2" ParentId="21608" CreationDate="2021-01-09T10:38:52.290" Score="1" Body="&lt;p&gt;The challenges you are going to face is more how to mount the cameras and find the relative positions between them (also the rotation). You can find a lot of designs for mounts for the cameras, also 3D printers' designs. The calibration is pretty similar to the one for one camera chess pattern etc. There are also a lot of tutorials explaining how you should proceed. Have fun!&lt;/p&gt;&#xA;" OwnerUserId="15592" LastActivityDate="2021-01-09T10:38:52.290" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21611" PostTypeId="1" CreationDate="2021-01-09T15:03:55.580" Score="0" ViewCount="9" Body="&lt;p&gt;I am wanting to start a submarine project, but I want long range capabilities. I want the sub to be able to go 100m deep in saltwater with a range of 100m. I want it to have at least the same range in freshwater too.&lt;/p&gt;&#xA;&lt;p&gt;I want to know if it is better to make a receiver that goes underwater or on land. I also want to know which are the best frequencies for this project. I also want it to work in salt water. I am very new to this.&lt;/p&gt;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="27718" LastActivityDate="2021-01-09T15:03:55.580" Title="Is a radio receiver better to be placed underwater or on land for an rc submarine" Tags="&lt;first-robotics&gt;&lt;radio-control&gt;&lt;underwater&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21612" PostTypeId="1" CreationDate="2021-01-09T18:36:44.047" Score="0" ViewCount="27" Body="&lt;p&gt;Is Image Based Visual Servoing a non-linear controller? I think it is as the Image Jacobian has square terms of u &amp;amp; v (image-plane coords).&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/h6uMV.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/h6uMV.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Where &lt;span class=&quot;math-container&quot;&gt;$p_u, p_v$&lt;/span&gt; are the width &amp;amp; height of each pixel, &lt;span class=&quot;math-container&quot;&gt;$f$&lt;/span&gt; is the focal length of the camera lens, &lt;span class=&quot;math-container&quot;&gt;$Z$&lt;/span&gt; is the depth of the object which has been projected on the image-plane.&lt;/p&gt;&#xA;" OwnerUserId="27719" LastEditorUserId="27719" LastEditDate="2021-01-11T12:10:29.927" LastActivityDate="2021-01-11T12:10:29.927" Title="Is Image Based Visual Servoing a non-linear controller?" Tags="&lt;mobile-robot&gt;&lt;control&gt;&lt;quadcopter&gt;&lt;computer-vision&gt;&lt;visual-servoing&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21613" PostTypeId="2" ParentId="19639" CreationDate="2021-01-09T23:02:26.977" Score="1" Body="&lt;p&gt;Consider the traditional control diagram below.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/OFWFR.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OFWFR.png&quot; alt=&quot;control-diagram&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;If you set &lt;span class=&quot;math-container&quot;&gt;$C=(2\zeta\omega_ns+\omega_n^2)/(0.13s+1)$&lt;/span&gt;, then you'll get the following closed-loop system transfer function:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;T=\frac{GC}{1+GC}=\frac{2\zeta\omega_ns+\omega_n^2}{s^2+2\zeta\omega_ns+\omega_n^2}.&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;This can be achieved through zero-pole cancelation, which is doable since &lt;span class=&quot;math-container&quot;&gt;$G$&lt;/span&gt; has a zero in LHP.&lt;/p&gt;&#xA;&lt;p&gt;Finally, you can easily attain your design requirements with &lt;span class=&quot;math-container&quot;&gt;$\omega_n \approx 10\,\text{rad/s}$&lt;/span&gt; and e.g. &lt;span class=&quot;math-container&quot;&gt;$\zeta=\sqrt{2}/2$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The requirement on the maximum controller effort cannot be attained with a pure LTI controller though. You may thus consider LTV and/or nonlinear approaches to this end for controlling a double integrator (for example relying on optimal control).&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2021-01-21T12:45:57.740" LastActivityDate="2021-01-21T12:45:57.740" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21614" PostTypeId="1" CreationDate="2021-01-10T01:38:46.893" Score="0" ViewCount="40" Body="&lt;p&gt;How would I generate a trajectory (e.g. minimum snap/jerk/acceleration) for a quad rotor between GPS coordinates? In all the examples that I have seen, they assume that the x,y positions are in meters relative to a starting point (0,0). Is it as simple as calculating the distance of a straight line between the 2 points and dividing that up into segments to create a continuous path?&lt;/p&gt;&#xA;&lt;p&gt;By the way I'm ignoring the z/altitude value as that value will be a constant value throughout in my case.&lt;/p&gt;&#xA;&lt;p&gt;A sample trajectory for reference that I have seen when applying boundary conditions to a quin-tic polynomial to generate velocity and acceleration polynomials.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;time,   x,                  y&#xA;0.0,    0.0,                0.0&#xA;0.1,    0.00350070021007,   0.00350070021007&#xA;0.2,    0.0105021006302,    0.0105021006302&#xA;0.3,    0.0210042012604,    0.0210042012604&#xA;0.4,    0.0350070021007,    0.0350070021007&#xA;0.5,    0.0525105031511,    0.0525105031511&#xA;0.6,    0.0735147044115,    0.0735147044115&#xA;0.7,    0.098019605882,     0.098019605882&#xA;0.8,    0.126025207563,     0.126025207563&#xA;0.9,    0.157531509453,     0.157531509453&#xA;1.0,    0.231046213865,     0.231046213865&#xA;1.1,    0.273054616385,     0.273054616385&#xA;1.2,    0.318563719116,     0.318563719116&#xA;1.3,    0.367573522057,     0.367573522057&#xA;1.4,    0.420084025208,     0.420084025208&#xA;1.5,    0.47609522857,      0.47609522857&#xA;1.6,    0.535607132141,     0.535607132141&#xA;1.7,    0.598619735922,     0.598619735922&#xA;1.8,    0.665133039913,     0.665133039913&#xA;1.9,    0.735147044115,     0.735147044115&#xA;2.0,    0.808661748526,     0.808661748526&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="27277" LastActivityDate="2021-01-11T19:27:27.070" Title="Generate a Trajectory from GPS coordinates" Tags="&lt;quadcopter&gt;&lt;motion-planning&gt;&lt;trajectory&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21615" PostTypeId="2" ParentId="21614" CreationDate="2021-01-10T09:20:14.937" Score="1" Body="&lt;p&gt;As reported for example in &lt;a href=&quot;https://robotics.stackexchange.com/a/21571/6941&quot;&gt;https://robotics.stackexchange.com/a/21571/6941&lt;/a&gt;, a minimum-jerk trajectory in one dimension is coded with respect to time &lt;span class=&quot;math-container&quot;&gt;$t$&lt;/span&gt; as:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;x(t) = x_i + (x_f-x_i) \cdot \left( 10\left(\frac{t}{t_f}\right)^3 -15\left(\frac{t}{t_f}\right)^4 +6\left(\frac{t}{t_f}\right)^5\right),&#xA;$$&lt;/span&gt;&#xA;where &lt;span class=&quot;math-container&quot;&gt;$t_f$&lt;/span&gt; is the final time (&lt;span class=&quot;math-container&quot;&gt;$2\, \text{s}$&lt;/span&gt; in your case), &lt;span class=&quot;math-container&quot;&gt;$t \in \left[0, t_f\right]$&lt;/span&gt;, and &lt;span class=&quot;math-container&quot;&gt;$x_i$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$x_f$&lt;/span&gt; are the initial and final position, respectively.&lt;/p&gt;&#xA;&lt;p&gt;You can easily extend this to the two-dimensional case.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastActivityDate="2021-01-10T09:20:14.937" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21616" PostTypeId="2" ParentId="2919" CreationDate="2021-01-10T18:03:44.893" Score="1" Body="&lt;p&gt;We have two basic Ziegler-Nichols tuning rules: one method is used with the frequency response and one method is characterized by the use of the open-loop step response of the system. You ought to use the latter then, which sticks around the identification of two main parameters &lt;span class=&quot;math-container&quot;&gt;$a$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\tau$&lt;/span&gt; that are the intercepts of the steepest tangent of the step response with the coordinate axes (see the figure).&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/bPlbG.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/bPlbG.png&quot; alt=&quot;step-response&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Once &lt;span class=&quot;math-container&quot;&gt;$a$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\tau$&lt;/span&gt; are identified, the method proposes the following heuristic estimates for the PID gains:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/t6y2T.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/t6y2T.png&quot; alt=&quot;table&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3&gt;References&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&amp;quot;Feedback Systems&amp;quot;, K. J. Astrom, R. M. Murray.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="6941" LastActivityDate="2021-01-10T18:03:44.893" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21617" PostTypeId="1" CreationDate="2021-01-10T22:34:00.687" Score="3" ViewCount="80" Body="&lt;p&gt;I am implementing PID control in c++ to make a differential drive robot turn an accurate number of degrees, but I am having many issues.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Exiting control loop early due to fast loop runtime&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;If the robot measures its error to be less than .5 degrees, it exits the control loop and consider the turn &amp;quot;finished&amp;quot; (the .5 is a random value that I might change at some point). It appears that the control loop is running so quickly that the robot can turn at a very high speed, turn past the setpoint, and exit the loop/cut motor powers, because it was at the setpoint for a short instant. I know that this is the entire purpose of PID control, to accurately reach the setpoint without overshooting, but this problem is making it very difficult to tune the PID constants. For example, I try to find a value of kp such that there is steady oscillation, but there is never any oscillation because the robot thinks it has &amp;quot;finished&amp;quot; once it passes the setpoint. To fix this, I have implemented a system where the robot has to be at the setpoint for a certain period of time before exiting, and this has been effective, allowing oscillation to occur, but the issue of exiting the loop early seems like an unusual problem and my solution may be incorrect.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;D term has no effect due to fast runtime&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Once I had the robot oscillating in a controlled manner using only P, I tried to add D to prevent overshoot. However, this was having no effect for the majority of the time, because the control loop is running so quickly that 19 loops out of 20, the rate of change of error is 0: the robot did not move or did not move enough for it to be measured in that time. I printed the change in error and the derivative term each loop to confirm this and I could see that these would both be 0 for around 20 loop cycles before taking a reasonable value and then back to 0 for another 20 cycles. Like I said, I think that this is because the loop cycles are so quick that the robot literally hasn't moved enough for any sort of noticeable change in error. This was a big problem because it meant that the D term had essentially no effect on robot movement because it was almost always 0. To fix this problem, I tried using the last non-zero value of the derivative in place of any 0 values, but this didn't work well, and the robot would oscillate randomly if the last derivative didn't represent the current rate of change of error.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Note: I am also using a small feedforward for the static coefficient of friction, and I call this feedforward &amp;quot;f&amp;quot;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Should I add a delay?&lt;/p&gt;&#xA;&lt;p&gt;I realized that I think the source of both of these issues is the loop running very very quickly, so something I thought of was adding a wait statement at the end of the loop. However, it seems like an overall bad solution to intentionally slow down a loop. Is this a good idea?&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;turnHeading(double finalAngle, double kp, double ki, double kd, double f){&#xA;    std::clock_t timer;&#xA;    timer = std::clock();&#xA;&#xA;    double pastTime = 0;&#xA;    double currentTime = ((std::clock() - timer) / (double)CLOCKS_PER_SEC);&#xA;&#xA;    const double initialHeading = getHeading();&#xA;    finalAngle = angleWrapDeg(finalAngle);&#xA;&#xA;    const double initialAngleDiff = initialHeading - finalAngle;&#xA;    double error = angleDiff(getHeading(), finalAngle);&#xA;    double pastError = error;&#xA;&#xA;    double firstTimeAtSetpoint = 0;&#xA;    double timeAtSetPoint = 0;&#xA;    bool atSetpoint = false;&#xA;&#xA;    double integral = 0;&#xA;    double derivative = 0;&#xA;    double lastNonZeroD = 0;&#xA;&#xA;    while (timeAtSetPoint &amp;lt; .05)&#xA;    {&#xA;        updatePos(encoderL.read(), encoderR.read());&#xA;        error = angleDiff(getHeading(), finalAngle);&#xA;&#xA;        currentTime = ((std::clock() - timer) / (double)CLOCKS_PER_SEC);&#xA;        double dt = currentTime - pastTime;&#xA;&#xA;        double proportional = error / fabs(initialAngleDiff);&#xA;        integral += dt * ((error + pastError) / 2.0);&#xA;        double derivative = (error - pastError) / dt;&#xA;        &#xA;        //FAILED METHOD OF USING LAST NON-0 VALUE OF DERIVATIVE&#xA;        // if(epsilonEquals(derivative, 0))&#xA;        // {&#xA;        //     derivative = lastNonZeroD;&#xA;        // }&#xA;        // else&#xA;        // {&#xA;        //     lastNonZeroD = derivative;&#xA;        // }&#xA;&#xA;        double power = kp * proportional + ki * integral + kd * derivative;&#xA;&#xA;        if (power &amp;gt; 0)&#xA;        {&#xA;            setMotorPowers(-power - f, power + f);&#xA;        }&#xA;        else&#xA;        {&#xA;            setMotorPowers(-power + f, power - f);&#xA;        }&#xA;&#xA;        if (fabs(error) &amp;lt; 2)&#xA;        {&#xA;            if (!atSetpoint)&#xA;            {&#xA;                atSetpoint = true;&#xA;                firstTimeAtSetpoint = currentTime;&#xA;            }&#xA;            else //at setpoint&#xA;            {&#xA;                timeAtSetPoint = currentTime - firstTimeAtSetpoint;&#xA;            }&#xA;        }&#xA;        else //no longer at setpoint&#xA;        {&#xA;            atSetpoint = false;&#xA;            timeAtSetPoint = 0;&#xA;        }&#xA;        pastTime = currentTime;&#xA;        pastError = error;&#xA;    }&#xA;    setMotorPowers(0, 0);&#xA;}&#xA;&#xA;turnHeading(90, .37, 0, .00004, .12);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="27722" LastActivityDate="2021-01-12T01:36:25.163" Title="PID Control: Is adding a delay before the next loop a good idea?" Tags="&lt;control&gt;&lt;pid&gt;&lt;raspberry-pi&gt;&lt;c++&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21618" PostTypeId="1" CreationDate="2021-01-10T23:52:01.570" Score="2" ViewCount="47" Body="&lt;p&gt;I am implementing the Go To Goal algorithm for a differential drive robot as described &lt;a href=&quot;http://faculty.salina.k-state.edu/tim/robot_prog/MobileBot/Steering/pointFwd.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; and in this &lt;a href=&quot;https://www.youtube.com/watch?v=P-9oFbd9lr8&quot; rel=&quot;nofollow noreferrer&quot;&gt;video&lt;/a&gt;.  The issue I have is that there is a large dead zone in pwm values where the motors are stalled.  I have calibration data for each motor that measures the stall pwm and the minimum speed that the motor can turn just above stall.  I also have calibration data for the maximum speed.  I'm using optical encoders to measure the rotational speed of the wheels.  So my issue is that the point-forward algorithm controls both linear velocity and angular velocity and it is calculating wheel speeds that cannot be achieved by the robot; they are in the stall zone.  How does one handle that issue?  It seems like just upping velocities by the minimum velocity does not work because then the turning angle is too shallow to reach the goal.&lt;/p&gt;&#xA;" OwnerUserId="24763" LastActivityDate="2021-01-12T01:44:02.683" Title="How to handle motor stall zones in differential drive point-forward go to goal algorithm?" Tags="&lt;differential-drive&gt;&lt;pwm&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21619" PostTypeId="1" CreationDate="2021-01-11T15:32:39.433" Score="0" ViewCount="21" Body="&lt;p&gt;The complete question is posted &lt;a href=&quot;https://answers.gazebosim.org/question/26065/robot-wheels-go-to-zero-positionblow-up-when-inertia-values-are-small-while-controller-is-launched/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="27730" LastActivityDate="2021-01-11T15:32:39.433" Title="Robot doesn't load properly in Gazebo when inertia values are small" Tags="&lt;ros&gt;&lt;gazebo&gt;&lt;wheel&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21620" PostTypeId="1" AcceptedAnswerId="21652" CreationDate="2021-01-11T19:24:51.637" Score="0" ViewCount="28" Body="&lt;p&gt;I’ve helped develop the forward kinematic chain for a two-axis gimbal. The Denavit-Hartenberg parameter table for the kinematic chain is given below.&lt;/p&gt;&#xA;&lt;div class=&quot;s-table-container&quot;&gt;&#xA;&lt;table class=&quot;s-table&quot;&gt;&#xA;&lt;thead&gt;&#xA;&lt;tr&gt;&#xA;&lt;th&gt;&lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt;&lt;/th&gt;&#xA;&lt;th&gt;&lt;span class=&quot;math-container&quot;&gt;$\alpha$&lt;/span&gt;&lt;/th&gt;&#xA;&lt;th&gt;&lt;span class=&quot;math-container&quot;&gt;$r$&lt;/span&gt;&lt;/th&gt;&#xA;&lt;th&gt;&lt;span class=&quot;math-container&quot;&gt;$d$&lt;/span&gt;&lt;/th&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/thead&gt;&#xA;&lt;tbody&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;span class=&quot;math-container&quot;&gt;$90^{\circ}$&lt;/span&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;span class=&quot;math-container&quot;&gt;$90^{\circ}$&lt;/span&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;span class=&quot;math-container&quot;&gt;$0$&lt;/span&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;span class=&quot;math-container&quot;&gt;$0$&lt;/span&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;span class=&quot;math-container&quot;&gt;$180^{\circ} + θ_{1}$&lt;/span&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;span class=&quot;math-container&quot;&gt;$90^{\circ}$&lt;/span&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;span class=&quot;math-container&quot;&gt;$0$&lt;/span&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;span class=&quot;math-container&quot;&gt;$0$&lt;/span&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;span class=&quot;math-container&quot;&gt;$180^{\circ} + θ_{2}$&lt;/span&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;span class=&quot;math-container&quot;&gt;$180^{\circ}$&lt;/span&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;span class=&quot;math-container&quot;&gt;$0$&lt;/span&gt;&lt;/td&gt;&#xA;&lt;td&gt;&lt;span class=&quot;math-container&quot;&gt;$0$&lt;/span&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;If a known angular rate was applied to a particular joint in the kinematic chain, is there a way of determining the components of that angular rate which would be observed on the end effector frame? For example, if &lt;span class=&quot;math-container&quot;&gt;$\theta_{1}$&lt;/span&gt; is rotated at &lt;span class=&quot;math-container&quot;&gt;$10$&lt;/span&gt; deg/sec and &lt;span class=&quot;math-container&quot;&gt;$\theta_{2}$&lt;/span&gt; equals &lt;span class=&quot;math-container&quot;&gt;$270^{\circ}$&lt;/span&gt;, what would be the rates observed on the x, y and z axes of the end effector?&lt;/p&gt;&#xA;" OwnerUserId="21594" LastEditorDisplayName="user27662" LastEditDate="2021-01-20T12:30:33.103" LastActivityDate="2021-01-20T12:30:33.103" Title="How do I calculate components of an angular rate on end effector frame?" Tags="&lt;kinematics&gt;&lt;forward-kinematics&gt;&lt;rotation&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21621" PostTypeId="2" ParentId="21614" CreationDate="2021-01-11T19:27:27.070" Score="1" Body="&lt;p&gt;Extending the previous answer which describes how to compute a minimum-jerk trajectory given a consistent distance coordinate system. A simple way to do this is to treat the first coordinate as your origin then convert each other GPS point to meter distances from your first coordinate using one of the latitude and longitude equations &lt;a href=&quot;https://www.movable-type.co.uk/scripts/latlong.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="16033" LastActivityDate="2021-01-11T19:27:27.070" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21622" PostTypeId="2" ParentId="21617" CreationDate="2021-01-11T22:14:56.367" Score="3" Body="&lt;h3&gt;Don't disengage your controller.&lt;/h3&gt;&#xA;&lt;p&gt;The purpose of a controller is not only to steer your system to the desired setpoint according to a predetermined dynamical response but also to counteract potential external factors that may impede this task. Think of a disturbance that will drive the system far from the setpoint once it has been reached. Thus, the controller shall be always operational (unless you need to change the task itself and as a result change the controller too).&lt;/p&gt;&#xA;&lt;p&gt;To this end, you would certainly need to add up the integral part, which is responsible for attaining a null steady-state error in presence of unmodeled quantities and external disturbances.&lt;/p&gt;&#xA;&lt;p&gt;This is quite a related resource: &lt;a href=&quot;https://robotics.stackexchange.com/a/19198/6941&quot;&gt;https://robotics.stackexchange.com/a/19198/6941&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h3&gt;Leave out the derivative.&lt;/h3&gt;&#xA;&lt;p&gt;95% of PID controllers in the industries are PI controllers (see &amp;quot;Feedback Systems&amp;quot; Astrom, Murray) as the D part can play a significant role only with slow processes (like those concerned with temperature and tank level regulation). This is definitely not your case. Somehow related resources about the difficulties of the derivative terms are:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://robotics.stackexchange.com/a/21556/6941&quot;&gt;https://robotics.stackexchange.com/a/21556/6941&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://robotics.stackexchange.com/a/21555/6941&quot;&gt;https://robotics.stackexchange.com/a/21555/6941&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Once I had the robot oscillating in a controlled manner using only P, I tried to add D to prevent overshoot.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Well, it seems that you are following the prescriptions of Ziegler-Nichols to tune your controller. There are tables you need to stick to that give you estimates for the gains. However, these are heuristic and it's likely that won't work in your case.&lt;/p&gt;&#xA;&lt;p&gt;Simply drop the D part and focus on the PI controller. There is also another Z-N variant that does not rely on purposely generated oscillations: &lt;a href=&quot;https://robotics.stackexchange.com/a/21616/6941&quot;&gt;https://robotics.stackexchange.com/a/21616/6941&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h3&gt;Never ever add up delays to the system.&lt;/h3&gt;&#xA;&lt;p&gt;Delays are bad guys to deal with in a control loop, and the worst beasts engineers have to fight against (&lt;a href=&quot;https://www.mathworks.com/videos/control-systems-in-practice-part-4-why-time-delay-matters-1536913253300.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;watch this &lt;/a&gt;) as they reduce significantly the phase margin pushing the overall system toward instability.&lt;/p&gt;&#xA;&lt;p&gt;If you deem that your loop is too fast, then apply input-shaping to the setpoint (with for example &lt;a href=&quot;https://robotics.stackexchange.com/a/21571/6941&quot;&gt;minimum-jerk trajectory&lt;/a&gt;) to smooth out the sharp step onset. The closed-loop system will react more gracefully. Another possibility is that your P gain is too high: just detune the controller then.&lt;/p&gt;&#xA;&lt;p&gt;In this respect, if you insert the integral term I, then you will need to reason about the sample time &lt;span class=&quot;math-container&quot;&gt;$T_s$&lt;/span&gt; as well.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2021-01-11T22:22:06.197" LastActivityDate="2021-01-11T22:22:06.197" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21623" PostTypeId="2" ParentId="21617" CreationDate="2021-01-12T01:36:25.163" Score="1" Body="&lt;p&gt;It would be much better to determine a fixed sample rate for your controller.  A really rough rule of thumb is that whatever the settling time you need out of the loop &lt;em&gt;once it is operating in the linear regime&lt;/em&gt;, your sampling interval should be between 10 times and 100 times less than the settling time.  Put another way, the sample rate should be 10 to 100 times faster than the desired loop bandwidth.&lt;/p&gt;&#xA;&lt;p&gt;As a small added bonus, this means you can calculate dt outside the loop&lt;/p&gt;&#xA;&lt;p&gt;By preference, the sample rate should be dictated by hardware, e.g. by a hardware timer, and even better the sampling of the position should be done by hardware, triggered off of a timer.  This significantly eases the real-time constraints on the software.&lt;/p&gt;&#xA;&lt;p&gt;If you're using a reasonable sample rate and you're mostly not registering changes in your encoder, then your encoder doesn't have enough steps.&lt;/p&gt;&#xA;&lt;p&gt;I'm going to disagree with @Ugo_Pattachini, in that if the loop involves a motor and your controller is clean enough, some differential action can be beneficial.  But there's a good chance that it needs to be bandlimited (i.e., you need a lead-lag controller), and if you're doing seat-of-the-pants PID tuning there's a good chance you don't have the tools to set the bandlimiting correctly.&lt;/p&gt;&#xA;&lt;p&gt;However, if you can't enforce very tight timing on sampling the encoder, don't even try to use derivative control.  Irregular sampling times plus some velocity on your motor will make for extra noise, and derivative controllers tend to amplify noise.  If you can't arrange for a clean signal to control on, derivative control won't be suitable.&lt;/p&gt;&#xA;" OwnerUserId="1411" LastActivityDate="2021-01-12T01:36:25.163" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21624" PostTypeId="2" ParentId="21618" CreationDate="2021-01-12T01:44:02.683" Score="2" Body="&lt;p&gt;For a similar problem (TT motors can't start the bot rolling on a carpet) I have been toying with the idea of setting up PID control for the angular velocity.  If it stays stuck, the integral term will start upping the power.  Once it suddenly breaks loose, the differential term will throttle it back.  That's the idea, anyway -- someday I'll actually try it.  Tuning might be a challenge, especially since the minuscule bit of control theory I have is quite rusty by now.&lt;/p&gt;&#xA;" OwnerUserId="27618" LastActivityDate="2021-01-12T01:44:02.683" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21625" PostTypeId="1" AcceptedAnswerId="21657" CreationDate="2021-01-12T15:34:37.983" Score="0" ViewCount="43" Body="&lt;p&gt;I'm trying to hack an electric RC car with the goal to make it autonomous, as part of my PhD research.&#xA;The mounted ESC is able to send back telemetry data, including the spinning velocity (in RPM) of the brushless motor used as tracking system.&lt;/p&gt;&#xA;&lt;p&gt;I'm wondering if it could be possible to estimate the vehicle forward velocity from this information, noting that the vehicle has three differentials and therefore negating a trivial relation between wheel velocities and motor rotations.&lt;/p&gt;&#xA;&lt;p&gt;I'm aware that there is no way to detect slipping, but I the car will work with modest velocities and smooth accelerations, therefore an estimate of the wheel velocities should still be a significant information in e.g. a Kalman filter that fuses it with IMU data.&lt;/p&gt;&#xA;&lt;p&gt;I've searched for anything related in literature, but nothing seems to be released on this topic.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Note: vehicle differentials are supposed to be configured as open differentials, but not sure of this.&lt;/p&gt;&#xA;" OwnerUserId="27735" LastActivityDate="2021-01-18T07:41:23.350" Title="wheeled vehicle forward velocity from RPM brushless data" Tags="&lt;wheeled-robot&gt;&lt;brushless-motor&gt;&lt;esc&gt;&lt;estimation&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21626" PostTypeId="1" CreationDate="2021-01-13T07:45:16.383" Score="3" ViewCount="64" Body="&lt;p&gt;In Modern Robotics by Kevin Lynch, there is a term &amp;quot;stationary&amp;quot; frame, but this is never defined. Googling shows that this is synonymous with inertial frame.&lt;/p&gt;&#xA;&lt;p&gt;Apparently inertial frame means rigidly attaching an accelerometer to a frame would show that the frame has 0 acceleration.&lt;/p&gt;&#xA;&lt;p&gt;However, in Modern Robotics, it says body frames, which are attached to moving objects, are also inertial frames. How is this possible? If the body frame is attached to a baseball bat, and our robot swings the bat, won't the frame undergo acceleration?&lt;/p&gt;&#xA;" OwnerUserId="21582" LastEditorUserId="10414" LastEditDate="2021-01-25T16:22:29.340" LastActivityDate="2021-02-24T17:02:15.190" Title="Stationary/inertial reference frame" Tags="&lt;kinematics&gt;&lt;dynamics&gt;&lt;screw-theory&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21627" PostTypeId="1" CreationDate="2021-01-13T14:11:22.573" Score="2" ViewCount="68" Body="&lt;p&gt;Let's assume that I assembled a multicopter (quadcopter, hexacopter or octocopter) and let's say that I disable yaw control on it while roll and pitch controllers are enabled.&lt;/p&gt;&#xA;&lt;p&gt;Now let's assume that I require it to hover in a specific xyz point.&lt;/p&gt;&#xA;&lt;p&gt;What could cause the multicopter to indefinitely yaw?&lt;/p&gt;&#xA;&lt;p&gt;My answers are:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;imbalance between the RPMs provided by the motors (e.g., I ask the motors a specific RPM values X (to hover) and some of them provide (consistently) X+delta).&lt;/li&gt;&#xA;&lt;li&gt;motors not all aligned among each other and therefore able to exert a thrust perfectly aligned with gravity (correct?)&lt;/li&gt;&#xA;&lt;li&gt;broken propellers&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Is there something else that does not come to my mind?&lt;/p&gt;&#xA;&lt;p&gt;I am asking since my octorotor, with the yaw controller enabled, tries to compensate all the time an almost constant yaw rate if I ask it to maintain a certain yaw angle. Therefore, I am thinking about a structural problem.&lt;/p&gt;&#xA;" OwnerUserId="10852" LastActivityDate="2021-02-15T13:04:45.583" Title="What can cause yaw rotation on a multirotor when yaw control is disabled?" Tags="&lt;control&gt;&lt;multi-rotor&gt;&lt;flight-controller&gt;&lt;drone&gt;" AnswerCount="1" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="21628" PostTypeId="2" ParentId="21626" CreationDate="2021-01-13T14:15:49.747" Score="0" Body="&lt;p&gt;The frames are considered inertial because we are not considering &amp;quot;dynamics&amp;quot; (read: acceleration). Essentially, as far as my experience goes with MR, all the math around frames in the book considers that you are momentarily frozen in time, &amp;quot;viewing&amp;quot; that state of the frame at that instantaneous time. Because of this it is considered stationary and therefore inertial.&lt;/p&gt;&#xA;&lt;p&gt;I am no expert on the matter so I'd love to hear feedback on my answer!&lt;/p&gt;&#xA;&lt;p&gt;From Chapter 3 Page 59 of &lt;a href=&quot;http://hades.mech.northwestern.edu/images/2/25/MR-v2.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;MR&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;All  frames  in  this  book  are  stationary,  inertial,  frames.When we refer to a body frame{b}, we mean a motionless frame that is instantaneously coincident with a frame that is fixed to a (possibly moving) body. This is important to keep in mind, since you may have had a dynamics course that used non-inertial moving frames attached to rotating bodies. Do not confuse these with the stationary, inertial, body frames of this book.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="27205" LastEditorUserId="27205" LastEditDate="2021-01-13T14:38:40.543" LastActivityDate="2021-01-13T14:38:40.543" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21630" PostTypeId="1" CreationDate="2021-01-13T17:08:14.297" Score="0" ViewCount="87" Body="&lt;p&gt;I have a project to design a hand exoskeleton for hand rehabilitation. The problem is that i'm thinked I only need the linkage mechanism with multiple 4 bar linkages. But because of human fingers joints and linkage supports on middle of each phalange I realised that there are 5 bar linkages and I really can't figure it out how to solve it or what equations should I use. The mechanism is driven by one actuator. Any help would be appreciated!&lt;/p&gt;&#xA;&lt;p&gt;Here's an image for reference.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/O8nXy.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/O8nXy.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="27744" LastEditorUserId="27744" LastEditDate="2021-01-13T18:07:56.683" LastActivityDate="2021-02-16T09:04:15.293" Title="5 bar linkage hand exoskeleton" Tags="&lt;kinematics&gt;&lt;inverse-kinematics&gt;&lt;design&gt;&lt;mechanism&gt;&lt;forward-kinematics&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21631" PostTypeId="1" CreationDate="2021-01-14T11:49:05.417" Score="0" ViewCount="14" Body="&lt;p&gt;I have a robot which has 2 multi-spectral cameras and 1 laser scanner attached. In the end I would like to have the images from the cameras aligned with the scanner so that I can have spectral information added to the scanner's point cloud. However I am having some troubles with the final alignment and am struggling to find a way to identify the location of the error. I was thus wondering if any of you know of any datasets or online exercises that deal with this problem where the correct outputs are given? ION this way I could test my approach on the dataset and see where my errors stem from.&lt;/p&gt;&#xA;" OwnerUserId="27753" LastActivityDate="2021-02-13T17:03:35.317" Title="Trouble aligning/calibrating camera with laser scanner" Tags="&lt;cameras&gt;&lt;calibration&gt;&lt;opencv&gt;&lt;laser&gt;&lt;point-cloud&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21632" PostTypeId="1" CreationDate="2021-01-14T12:42:46.300" Score="0" ViewCount="8" Body="&lt;p&gt;For one stereo camera, stereo calibration is performed to obtain intrinsic and extrinsic parameters during manufacturing.&#xA;During the process of usage, intrinsic and extrinsic parameters may be changed, and left image and right image are not aligned any more if rectification is applied.&#xA;I have some point correspondences between left image and right image.The y coordinates of the correpondences is not same.&#xA;If I rectify the left and right images, I can find the disparity may be negative which means that the points are behind the camera.&#xA;I can also triangulate the point correpondences using intrinsic and extrinsic parameters to obtain 3d point coordinates, and the z coordinates of 3d points may be negative.&lt;/p&gt;&#xA;&lt;p&gt;Is there any way to know whether the disparity is negative without stereo rectification?&lt;br /&gt;&#xA;Is there any way to know the case the calcuated points is behind the camera without trigulation?&lt;/p&gt;&#xA;&lt;p&gt;I know the corresponding point doesn't lie on the epipolar line for such cases, however such information can't tell me whether the 3d point of point correspondence is behind the camera. I try to calculate the sign of the distance from the point to the epipolar line but it seems the sign can't tell me such information.&lt;/p&gt;&#xA;" OwnerUserId="15460" LastActivityDate="2021-01-14T12:42:46.300" Title="Is there any way to know whether the disparity is negative without stereo rectification?" Tags="&lt;cameras&gt;&lt;stereo-vision&gt;&lt;calibration&gt;&lt;opencv&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21633" PostTypeId="2" ParentId="21627" CreationDate="2021-01-14T13:41:36.713" Score="1" Body="&lt;p&gt;A disturbance yaw rate of &lt;span class=&quot;math-container&quot;&gt;$-0.1, \text{deg/s}$&lt;/span&gt; seems way low. Are sure that in steady-state there won't be any cause external to your copter (very low airflow?) justifying it?&lt;/p&gt;&#xA;&lt;h3&gt;Imbalance between the RPMs provided by the motors (max current not reached) ❌&lt;/h3&gt;&#xA;&lt;p&gt;The open-loop response of different motors will certainly vary because of the variability of the building components. Thus, if commanded with the exact same input voltage, different motors will respond with slightly different speeds.&lt;/p&gt;&#xA;&lt;p&gt;However, closed-loop control is purposely designed and implemented to overcome this type of imbalance. So, nope; this is unlikely to be the problem if your controllers are up to the task.&lt;/p&gt;&#xA;&lt;p&gt;This reasoning is valid if all the process controllers+motors do work in their &amp;quot;linear&amp;quot; range so that there's no saturation.&lt;/p&gt;&#xA;&lt;h3&gt;Imbalance between the RPMs provided by the motors (max current reached by one or more controllers) ❌&lt;/h3&gt;&#xA;&lt;p&gt;Differently, if you realize that one or more controllers provide the maximum allowed current, then the corresponding motors are clearly not able to deliver the requested speed and you may be in the situation you reported.&lt;/p&gt;&#xA;&lt;p&gt;It is however unlikely that you had to deliver maximum current to a motor and this won't cause trouble to pitch and roll as well.&lt;/p&gt;&#xA;&lt;h3&gt;Variability of speed sensors ❌&lt;/h3&gt;&#xA;&lt;p&gt;Variability of the components in the speed sensors may impede the control. The outer loop, which is closed over IMU feedback, should adapt for such a difference in speed setpoints. Anyway, the inner speed control loop will experience a constant thrust that it will be required to compensate for.&lt;/p&gt;&#xA;&lt;p&gt;It is unlikely that sensor variability affects only the yaw though.&lt;/p&gt;&#xA;&lt;h3&gt;Motors not all aligned among each other ✅&lt;/h3&gt;&#xA;&lt;p&gt;This is the most likely cause, yep. It is concerned with a structural configuration of your propellers and can possibly generate a nonnull yaw rate.&lt;/p&gt;&#xA;&lt;h3&gt;Broken propellers ❌&lt;/h3&gt;&#xA;&lt;p&gt;I tend to rule out this as you would have realized it visually, instead, plus it would have affected the pitch and roll as well.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2021-01-16T12:02:09.590" LastActivityDate="2021-01-16T12:02:09.590" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="21634" PostTypeId="1" CreationDate="2021-01-14T14:36:58.580" Score="0" ViewCount="13" Body="&lt;p&gt;I want to use A* algorithm for my robot path planning in c-space. But now I want to map the obstacles from cartesian-space to configuration space. I am building a visualizer in python to see all the process going on. But I am confused about mapping the obstacles from cartesian space to configuration space. Could anyone please tell me how to do that? what should be the algorithm for it?&lt;/p&gt;&#xA;" OwnerUserId="16491" LastActivityDate="2021-01-14T14:36:58.580" Title=".How to draw obstacles in c-space for my 2DOF scara robot?" Tags="&lt;robotic-arm&gt;&lt;manipulator&gt;&lt;path-planning&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21635" PostTypeId="2" ParentId="21631" CreationDate="2021-01-14T15:50:39.667" Score="0" Body="&lt;p&gt;Within ros there is a &lt;a href=&quot;http://wiki.ros.org/lidar_camera_calibration&quot; rel=&quot;nofollow noreferrer&quot;&gt;lidar_camera_calibration&lt;/a&gt; package that should take care of this for you! Their github page has a detailed readme. If you aren't using ros, you can probably take a look at the core functions and compare it with your work.&lt;/p&gt;&#xA;&lt;p&gt;Autoware foundation has also released their own &lt;a href=&quot;https://autoware.readthedocs.io/en/feature-documentation_rtd/DevelopersGuide/PackagesAPI/sensing/autoware_camera_lidar_calibrator.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;autoware_camera_lidar_calibrator&lt;/a&gt; package which is more recent.&lt;/p&gt;&#xA;" OwnerUserId="27064" LastActivityDate="2021-01-14T15:50:39.667" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21637" PostTypeId="1" CreationDate="2021-01-15T07:20:23.223" Score="0" ViewCount="22" Body="&lt;p&gt;I'm planning to drive the steering of a AWD rover using stepper motors. Is it usually a good idea to use sprockets and chains for that? Would the precision typically be too low for steering? The sprockets would spin along the direction of gravity - would that pose a problem as the chains would always sit on the same face of the sprockets?&lt;/p&gt;&#xA;&lt;p&gt;Any advice appreciated.&lt;/p&gt;&#xA;" OwnerUserId="11489" LastActivityDate="2021-02-16T10:01:15.137" Title="Sprockets for steering" Tags="&lt;mobile-robot&gt;&lt;wheeled-robot&gt;&lt;steering&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21638" PostTypeId="2" ParentId="21637" CreationDate="2021-01-15T08:13:42.090" Score="0" Body="&lt;ul&gt;&#xA;&lt;li&gt;Is there any special requirement for a very precise steering?&lt;/li&gt;&#xA;&lt;li&gt;Do you heavily rely on dead reckoning and your sensors are before the chain?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;If not, you can add a tensioner for the chain and it should be fine for steering.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2021-01-15T08:13:42.090" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21639" PostTypeId="2" ParentId="21602" CreationDate="2021-01-15T15:27:19.193" Score="1" Body="&lt;p&gt;You should look into localization algorithms. A good source is the book Probabilistic Robotics - W. Burgard, D. Fox and S. Thrun.&lt;/p&gt;&#xA;&lt;p&gt;If you just want to compute somehow how well it agrees you could try to compute the Root Square Mean Error of the closest point of your measurement to the point in the occupied square in the grid describing the map, given an accurate robot position and map description.&lt;/p&gt;&#xA;" OwnerUserId="21229" LastActivityDate="2021-01-15T15:27:19.193" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21640" PostTypeId="2" ParentId="2048" CreationDate="2021-01-15T22:06:23.680" Score="0" Body="&lt;p&gt;The &lt;code&gt;update_motors()&lt;/code&gt; method looks like it implements a constant step controller, basically increasing pwm if too slow, decreasing pwm if too fast.  What I also see is the calculated error involves multiplying the set point &lt;code&gt;req_speed&lt;/code&gt; by 10, which exagerates the error, which can definitely cause oscillations.  Also there is no tolerance value 'close to zero' for the error, so it will always oscillate.  Finally, I don't see any feed forward logic; estimating the initial PWM when the setpoint changes from zero can make a big different in how fast the controller converges on the setpoint.  My &lt;a href=&quot;https://github.com/Ezward/Esp32CameraRover2&quot; rel=&quot;nofollow noreferrer&quot;&gt;project&lt;/a&gt; also uses a constant step controller for speed control and implements feed-forward; it works pretty well.  You will still need lateral control in order to do a good job of holding a line, as any initial speed differential between the wheels can create an angular offset that will not be corrected by simple speed control.  See that project's go-to-goal behavior for an example.&lt;/p&gt;&#xA;" OwnerUserId="24763" LastEditorUserId="24763" LastEditDate="2021-01-18T07:26:43.560" LastActivityDate="2021-01-18T07:26:43.560" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21641" PostTypeId="1" CreationDate="2021-01-15T18:07:28.850" Score="0" ViewCount="62" Body="&lt;p&gt;I have two question regarding a Chess robot.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;I want to build a Scara  robot that could play chess on a 37 x 37 cm chess board, but I couldn't find any design that can cover the whole chess board and an extra space to throw dead pieces, and I have no experience in editing 3d printer files, so where I could find such designs for free?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;What is the best total length for Scara robot arm to be able to cover the whole chessboard and an extra area to throw the pieces?&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerDisplayName="Ali" LastEditorUserId="15160" LastEditDate="2021-01-31T14:23:07.447" LastActivityDate="2021-03-02T15:07:25.887" Title="Scara chess robot design for 3d printing" Tags="&lt;robotic-arm&gt;&lt;3d-printing&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21642" PostTypeId="1" CreationDate="2021-01-15T23:50:19.490" Score="0" ViewCount="67" Body="&lt;pre&gt;&lt;code&gt;int16_t CalculatePID(MotorHandleTypeDef *motor)&#xA;{&#xA;    float error = motor-&amp;gt;TargetSpeed-motor-&amp;gt;Speed;&#xA;    /// calculate total error&#xA;    motor-&amp;gt;PID.TotalError+=error;&#xA;    /// Check if the calculated total error value is in boundries&#xA;    if(motor-&amp;gt;PID.TotalError&amp;gt;motor-&amp;gt;PID.MaxTotalError)&#xA;        motor-&amp;gt;PID.TotalError=motor-&amp;gt;PID.MaxTotalError;&#xA;    else if(motor-&amp;gt;PID.TotalError&amp;lt;-motor-&amp;gt;PID.MaxTotalError)&#xA;        motor-&amp;gt;PID.TotalError=-motor-&amp;gt;PID.MaxTotalError;&#xA;    /// Calculate the result of PID&#xA;    float duty=(motor-&amp;gt;PID.P*error) + (motor-&amp;gt;PID.I*motor-&amp;gt;PID.TotalError)+(motor-&amp;gt;PID.D*(error-motor-&amp;gt;PID.PreviousError));&#xA;    motor-&amp;gt;PID.PreviousError=error;&#xA;    if(duty&amp;gt;1)&#xA;        duty+=motor-&amp;gt;PWM_Offset;&#xA;    else if(duty&amp;lt;-1)&#xA;        duty-=motor-&amp;gt;PWM_Offset;&#xA;    duty+=motor-&amp;gt;PID.FeedForward*motor-&amp;gt;TargetSpeed;&#xA;&#xA;    /// Check if the Calculated Duty values are in boundries&#xA;    if(duty&amp;gt;motor-&amp;gt;MaxDuty)&#xA;        duty=motor-&amp;gt;MaxDuty;&#xA;    else if(duty&amp;lt;-motor-&amp;gt;MaxDuty)&#xA;        duty=-motor-&amp;gt;MaxDuty;&#xA;    /// Return calculated value&#xA;    motor-&amp;gt;Duty=duty;&#xA;    return (int16_t)duty;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Hi everyone.&lt;/p&gt;&#xA;&lt;p&gt;I am trying to make an efficient dc motor speed controller and this is my PID update function. I am running my update loop in 1 kHz. The DC Motor I am using is 24 VDC 100 Watt with 6000 CPR quadrature encoder. I am using Single Dimensional Kalman Filter to calculate motor speed that is running in 2 kHz. With this method there is almost no delay and ripple in speed calculation yet I am keeping my pid frequency lower than encoder update frequency to avoid errors that can be caused by the lag. I have tuned the PID parameters using Genetic Algorithm by using 400 individuals so I am thinking that the parameters are almost at their best. I am also applying  speed feed forward control that's coefficient is 0.95.&lt;/p&gt;&#xA;&lt;p&gt;Open loop step response of the motor has a rise time of 150 ms and the best rise time that I get with PID is 55 ms. I have posted one the output samples for lower 10 and 20 RPMs. (Dont worry about the overshoot. There is a motion planner on higher control level so it will be tolarated)&#xA;&lt;a href=&quot;https://i.stack.imgur.com/mawra.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/mawra.png&quot; alt=&quot;Pid Sample&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I would like to know if there is a way to lower this rise time to  around 30ms or is this the best I can get from a brushed DC motor?&lt;/p&gt;&#xA;" OwnerUserId="27764" LastEditorUserId="27764" LastEditDate="2021-01-16T13:28:49.223" LastActivityDate="2021-01-17T22:18:38.037" Title="How can I improve DC Motors rise time?" Tags="&lt;motor&gt;&lt;pid&gt;&lt;driver&gt;&lt;dc&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="21643" PostTypeId="2" ParentId="10607" CreationDate="2021-01-16T02:43:32.253" Score="0" Body="&lt;p&gt;The kinematics model which Keith Selbo contributed (and OP Bar Smith posted) is great. I've &lt;a href=&quot;https://github.com/ademuri/iconograph-cnc/blob/main/client/src/Kinematics.java&quot; rel=&quot;nofollow noreferrer&quot;&gt;implemented it in Java&lt;/a&gt; for use in the g-code generator for a hanging plotter that I'm building. I haven't totally tuned it, but it already provides better results than treating the system as a simple triangle and using Pythagorean theorem.&lt;/p&gt;&#xA;" OwnerUserId="27765" LastActivityDate="2021-01-16T02:43:32.253" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21644" PostTypeId="2" ParentId="1020" CreationDate="2021-01-16T03:31:05.520" Score="0" Body="&lt;p&gt;I've made a small robot that follows a virtual path drawn on a smartphone under an NSF funded research grant.&lt;/p&gt;&#xA;&lt;p&gt;The way you would make a robot follow a virtual path is to use the Pure Pursuit path following algorithm along with dead reckoning.&lt;/p&gt;&#xA;&lt;p&gt;I developed the following C++ Arduino libraries for virtual robot path following:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Dead reckoning library - Dead reckoning for differential drive robots using encoders. The key limitation with this library is that only encoders are used to determine position.&lt;/li&gt;&#xA;&lt;li&gt;PreMo (Precise mover library) - Contains the implementation for pure pursuit for path following. Designed for easy implementation for students and hobbyists.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;These libraries can be modified to work on other platforms than the Arduino.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.ri.cmu.edu/pub_files/pub3/coulter_r_craig_1992_1/coulter_r_craig_1992_1.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;About pure pursuit algorithm&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://sites.google.com/stonybrook.edu/dead-reckon-lib/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Dead reckoning library&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/purwar2016/PreciseMovement-library&quot; rel=&quot;nofollow noreferrer&quot;&gt;Precise movement library&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="27766" LastEditorUserId="27766" LastEditDate="2021-01-16T03:38:42.007" LastActivityDate="2021-01-16T03:38:42.007" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21645" PostTypeId="2" ParentId="20982" CreationDate="2021-01-16T11:28:02.900" Score="0" Body="&lt;p&gt;Output of a PID controller is a some kind of force ratio that will be applied to your motor. And the input of your PID is the error of what you are trying to control (velocity, position, torque etc.) so the input and the output dont have to be in same unit. it depends on what  you are controlling with your pwm module.&lt;/p&gt;&#xA;&lt;p&gt;Let's say you are trying to control your motor speed. first you have to calculate the difference between your target speed and current speed. Then you will send this error to your pid function. The output of your pid function is your DUTY CYCLE. Lets say your pwm resolution is 8 bits. So your code will look like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;float error=TargetSpeed-CurrentSpeed;&#xA;&#xA;int duty=CalculatePID(error);&#xA;&#xA;if(duty&amp;gt;0)&#xA; SetDirectionPinHigh();&#xA;else if(duty&amp;lt;0)&#xA;{&#xA;  SetDirectionPinLow();&#xA;  duty=-duty;&#xA;}&#xA;analogWrite(MotorPin,duty);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;....&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    int CalculatePID(float error)&#xA;    {&#xA;        TotalError+=error;  /// TotalError is used for integral term and is the sum of all previous errors&#xA;        /// it is useful to limit this value (anti-wind up)&#xA;        int duty= kp*error+ki*TotalError+kd*(error-PreviousError);&#xA;        PreviousError=error;&#xA;        /// Check the duty value if it is between 0 and 255&#xA;        if(duty&amp;gt;255)&#xA;          duty = 255;&#xA;        else if(duty&amp;lt;-255)&#xA;          duty = -255;&#xA;    return duty;&#xA;    }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I hope this example helps. Dont get confused with input and output units of pid. it is a closed loop control so it will adjust the right force by itself eventually. The key here is to tune pid parameters correctly.&lt;/p&gt;&#xA;" OwnerUserId="27764" LastEditorUserId="27764" LastEditDate="2021-01-16T11:40:43.740" LastActivityDate="2021-01-16T11:40:43.740" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21646" PostTypeId="1" CreationDate="2021-01-17T00:09:24.247" Score="0" ViewCount="23" Body="&lt;p&gt;I am trying to use the CHOMP planner for my custom robot by following the tutorial.&lt;/p&gt;&#xA;&lt;p&gt;After setting everything up as shown in the tutorial, I tried to plan a very simple movement. As one can see in the below screenshot, the planner is &amp;quot;planning&amp;quot; (I assume that it is planning since the Plan and Execute button is not clickable anymore). However it is not giving any output back. On the right side, you can also see that I have moved the interactive marker just very slightly, but the planner still doesn't make it happen.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;[ INFO] [1610835807.249180611]: MoveGroup context using planning plugin &#xA;&#xA;chomp_interface/CHOMPPlanner&#xA;[ INFO] [1610835807.249199772]: MoveGroup context initialization complete&#xA;&#xA;You can start planning now!&#xA;&#xA;[ WARN] [1610835807.338433399]: IK plugin for group 'my_arm' relies on deprecated API. Please implement initialize(RobotModel, ...).&#xA;[ INFO] [1610835807.339821286]: IK Using joint my_base -3.14159 3.14159&#xA;[ INFO] [1610835807.339840764]: IK Using joint my_body1 -3.14159 3.14159&#xA;[ INFO] [1610835807.339855676]: IK Using joint my_body2 -3.14159 3.14159&#xA;[ INFO] [1610835807.339867021]: IK Using joint my_body3 -3.14159 3.14159&#xA;[ INFO] [1610835807.339878619]: IK Using joint my_body4 -3.14159 3.14159&#xA;[ INFO] [1610835807.339889941]: IK Using joint my_tip -3.14159 3.14159&#xA;[ INFO] [1610835807.339923501]: Looking in common namespaces for param name: my_arm/position_only_ik&#xA;[ INFO] [1610835807.340579340]: Looking in common namespaces for param name: my_arm/solve_type&#xA;[ INFO] [1610835807.341201626]: Using solve type Speed&#xA;[ INFO] [1610835807.942195559]: Starting planning scene monitor&#xA;[ INFO] [1610835807.946225213]: Listening to '/move_group/monitored_planning_scene'&#xA;QObject::connect: Cannot queue arguments of type 'QVector&amp;lt;int&amp;gt;'&#xA;(Make sure 'QVector&amp;lt;int&amp;gt;' is registered using qRegisterMetaType().)&#xA;QObject::connect: Cannot queue arguments of type 'QVector&amp;lt;int&amp;gt;'&#xA;(Make sure 'QVector&amp;lt;int&amp;gt;' is registered using qRegisterMetaType().)&#xA;[ INFO] [1610835808.216240325]: Constructing new MoveGroup connection for group 'my_arm' in namespace ''&#xA;[ INFO] [1610835809.328760959]: Ready to take commands for planning group my_arm.&#xA;[ INFO] [1610835809.328864724]: Looking around: no&#xA;[ INFO] [1610835809.328933427]: Replanning: no&#xA;[ INFO] [1610836013.834534655]: Combined planning and execution request received for MoveGroup action. Forwarding to planning and execution pipeline.&#xA;[ INFO] [1610836013.834957349]: Planning attempt 1 of at most 1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/kKX3b.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kKX3b.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="21382" LastActivityDate="2021-01-17T00:09:24.247" Title="CHOMP Planner freezes rviz Motionplanning in ros" Tags="&lt;ros&gt;&lt;motion-planning&gt;&lt;rviz&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21647" PostTypeId="2" ParentId="21641" CreationDate="2021-01-17T08:02:06.153" Score="0" Body="&lt;p&gt;1- Grabcad is a good source for free 3D material: &lt;a href=&quot;https://grabcad.com/library&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://grabcad.com/library&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;2- The &amp;quot;best&amp;quot; total length, depends on lots of factors. You want it to be 37x37cm, ok, but that workspace will require a conscientious analysis and design of other components as well -&amp;gt; Mostly the arms geometry. You can check on the design of cantilever beams and static stress calculation. If your arm is too long (more than 30, 40cm), it's better to double check these kind of things before building it.&lt;/p&gt;&#xA;" OwnerUserId="10183" LastActivityDate="2021-01-17T08:02:06.153" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21648" PostTypeId="2" ParentId="21637" CreationDate="2021-01-17T08:09:50.070" Score="0" Body="&lt;p&gt;They use of sprockets over synchronous belts depends on the power you need to move the rover steering.&lt;/p&gt;&#xA;&lt;p&gt;I wouldn't use sprockets + chains, mostly because moving the chains requires more power than moving the synchronous belts, so you're basically wasting power there. Of course, if you need a high power steering.&lt;/p&gt;&#xA;&lt;p&gt;With regards to the precision, it should be fine if you have a chain tensor.&lt;/p&gt;&#xA;&lt;p&gt;Now, with the chain always resting on the same side, that could cause more wear in the long term, but I believe the rover will end it's useful life before you worry about changing the sprocket or the chain (in a motorcycle a sprocket+chain kit can last 20-25k km / 12-15k miles).&lt;/p&gt;&#xA;" OwnerUserId="10183" LastActivityDate="2021-01-17T08:09:50.070" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21649" PostTypeId="2" ParentId="21630" CreationDate="2021-01-17T08:28:40.280" Score="0" Body="&lt;p&gt;With 5 bar linkages, you either need two inputs (one per each bar), or you need to couple the movement from one bar to the other (with gears for &lt;a href=&quot;https://en.wikipedia.org/wiki/Five-bar_linkage#/media/File:Closed-Chain_Geared_Five_bar_mechanism.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;example&lt;/a&gt;), and then have only one input. Input meaning the rotation angle of the bars connected to the grounded link.&lt;/p&gt;&#xA;&lt;p&gt;In case it might be useful, here are the equations of the &lt;a href=&quot;http://download.ni.com/support/acadcw/QNET_Mech_Systems_CW/QNETMSInverseKinematicsWorkbook(Student).zip&quot; rel=&quot;nofollow noreferrer&quot;&gt;inverse kinematics&lt;/a&gt; of a 5 bar linkage. Also remember that for closed chain linkages the direct kinematics is far more complicated than the inverse kinematics (unlike for open chain linkages).&lt;/p&gt;&#xA;&lt;p&gt;In my opinion there is missing information in the paper you took as reference.&lt;/p&gt;&#xA;" OwnerUserId="10183" LastActivityDate="2021-01-17T08:28:40.280" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21651" PostTypeId="1" CreationDate="2021-01-17T11:06:58.550" Score="1" ViewCount="83" Body="&lt;p&gt;I'm a beginner in ROS, since the learning curve for ROS is steep i decided to use a book to learn how to use ros ([ROS Robotics Projects - Second Edition][1]). I'm currently on the third chapter. I'm learning how to create URDF files and connect ROS with Gazebo. I'm trying to test the robot base and see how it moves in gazebo but when i type the code&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ roslaunch robot_description base_gazebo_control_xacro.launch &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Gazebo opens up but never passes the loading screen and it just stays frozen throughout. I decided to check gazebo's site and i realized in the book we didn't created a world file but if that was the issue shouldn't gazebo open up at least and give an error?&#xA;I'm currently using ROS melodic on Ubuntu 18.4 running on VirtualBox&#xA;My PC specs are:&#xA;Hp Envy m4,&#xA;Intel core i7-3632QM 4 cores,&#xA;8gb RAM,&#xA;My virtualbox settings:&#xA;25gb storage,&#xA;4gb RAM,&#xA;Display | Video Memory: 128 MB,&#xA;Acceleration: 3D,&#xA;Number of CPUs: 1.&#xA;Do you think the reason my gazebo freezes is because of my laptops specs? If so do you think it'll run better if i dual boot or use windows subsystem for linux and which option do you think is better?&#xA;Thank you&#xA;[1]: &lt;a href=&quot;https://www.packtpub.com/product/ros-robotics-projects-second-edition/9781838649326&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.packtpub.com/product/ros-robotics-projects-second-edition/9781838649326&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="27772" LastActivityDate="2021-01-18T19:16:48.493" Title="Gazebo freezes on vm after running roscore" Tags="&lt;ros&gt;&lt;simulation&gt;&lt;gazebo&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21652" PostTypeId="2" ParentId="21620" CreationDate="2021-01-17T17:48:06.870" Score="1" Body="&lt;p&gt;You can calculate that with the Angular Jacobian (&lt;span class=&quot;math-container&quot;&gt;$J_\omega$&lt;/span&gt;) of the gimbal (see details &lt;a href=&quot;https://www.tu-chemnitz.de/informatik/KI/edu/robotik/ws2017/vel.kin.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;Based on your D-H, your angular Jacobian should look like:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ {\&#xA;  J_\omega=&#xA;  \left[ {\begin{array}{cc}&#xA;   0 &amp;amp; 0 \\&#xA;   -\sin(\theta_1) &amp;amp; \sin(\theta_1) \\&#xA;    \cos(\theta_1) &amp;amp; -\cos(\theta_1) \\&#xA;  \end{array} } \right]&#xA;\&#xA;}$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;So to obtain the angular speeds of the end efector &lt;span class=&quot;math-container&quot;&gt;${\omega_x, \omega_y, \omega_z}$&lt;/span&gt; as seen from a grounded frame, you multiply &lt;span class=&quot;math-container&quot;&gt;$J_\omega$&lt;/span&gt; by the vector of joint angular speeds &lt;span class=&quot;math-container&quot;&gt;$[\dot{\theta}_1, \dot{\theta}_2]^{T}$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I ran quick calculations, so you need to verify if the Jacobian is correct. But I hope you got the idea.&lt;/p&gt;&#xA;" OwnerUserId="10183" LastActivityDate="2021-01-17T17:48:06.870" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21653" PostTypeId="2" ParentId="21642" CreationDate="2021-01-17T22:18:38.037" Score="1" Body="&lt;p&gt;Besides the control code, I wonder whether the physics is worth a look:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Is there enough instantaneous torque to accelerate the rotor's moment of inertia as fast as you want?&lt;/li&gt;&#xA;&lt;li&gt;The torque is proportional to the current.  Slow current risetime will give you slow acceleration.&lt;/li&gt;&#xA;&lt;li&gt;dI/dt = V/L.  The motor inductance (L) limits how fast the current can increase (dI/dt).  Your 24 VDC motor might briefly tolerate a voltage (V) higher than 24 V -- if you trust your control code not to keep it high for long!&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="27618" LastActivityDate="2021-01-17T22:18:38.037" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21654" PostTypeId="2" ParentId="21651" CreationDate="2021-01-17T22:20:53.730" Score="1" Body="&lt;p&gt;Dual booting is always a better option. It allocates all your resources for linux to use and since ros is built on top of ubuntu, you are better off dual booting. Moreover, if you are learning ros and going to be using it often, why not dual boot?&lt;/p&gt;&#xA;&lt;p&gt;That being said, gazebo should run in your vm (given your specs). Can you launch gazebo normally (without your xacro file)? If not, do any errors show up? gazebo comes with some empty world examples. Try to see if you can load those. If you can, then your gazebo installation and runtime is probably fine and your issue stems from the xacro file you created. If gazebo throws some erros/freezes in a similar way, you probably should reinstall gazebo.&lt;/p&gt;&#xA;" OwnerUserId="27064" LastActivityDate="2021-01-17T22:20:53.730" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="21655" PostTypeId="2" ParentId="21373" CreationDate="2021-01-18T07:00:16.927" Score="1" Body="&lt;p&gt;We have the position of the COM of the &lt;span class=&quot;math-container&quot;&gt;$i_{th}$&lt;/span&gt; link with respect to the &lt;span class=&quot;math-container&quot;&gt;$(i-1)_{th}$&lt;/span&gt; frame (or joint). Also, the homogeneous transformation matrix relating the &lt;span class=&quot;math-container&quot;&gt;$(i-1)_{th}$&lt;/span&gt; frame to the &lt;span class=&quot;math-container&quot;&gt;$0_{th}$&lt;/span&gt; frame is known from the DH parameters. We simply multiply them in order get the transformation matrix of the &lt;span class=&quot;math-container&quot;&gt;$i_{th}$&lt;/span&gt; link's COM w.r.t to &lt;span class=&quot;math-container&quot;&gt;$0_{th}$&lt;/span&gt; frame. The &lt;span class=&quot;math-container&quot;&gt;$3rd$&lt;/span&gt; element of the &lt;span class=&quot;math-container&quot;&gt;$4th$&lt;/span&gt; column of the resultant matrix is the height of the COM from the ground.&lt;/p&gt;&#xA;" OwnerUserId="26969" LastActivityDate="2021-01-18T07:00:16.927" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21656" PostTypeId="2" ParentId="20982" CreationDate="2021-01-18T07:11:20.020" Score="0" Body="&lt;p&gt;In my &lt;a href=&quot;https://github.com/Ezward/Esp32CameraRover2&quot; rel=&quot;nofollow noreferrer&quot;&gt;project&lt;/a&gt; I did exactly what you suggested; I measured calibration data for minimum speed/pwm and maximum speed at pwm = 255.  Anything below minimum pwm is in the stall zone and yields zero velocity.  I used this calibration data to calculate a feed-forward estimated pwm for the velocity set point, assuming linear relationship between velocity and pwm above the stall zone.  The feed-forward estimate is applied when the velocity set point changes significantly. This causes the control to converge on the set point very quickly. Then I use a very simple constant-step controller (not PID) to do closed-loop control on the velocity.  The constant-step controller requires no further calibration.  The combination works very well for my simple differential drive robot and requires no calibration other than measuring min/max speed and pwm.&lt;/p&gt;&#xA;" OwnerUserId="24763" LastActivityDate="2021-01-18T07:11:20.020" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21657" PostTypeId="2" ParentId="21625" CreationDate="2021-01-18T07:41:23.350" Score="2" Body="&lt;p&gt;This &lt;a href=&quot;https://github.com/a1k0n/cycloid&quot; rel=&quot;nofollow noreferrer&quot;&gt;project&lt;/a&gt; does exactly that on an RC car.  The author is a top competitor in the DIYRobocars community; it's the blue car in this &lt;a href=&quot;https://www.youtube.com/watch?v=PsfkLj527Go&quot; rel=&quot;nofollow noreferrer&quot;&gt;video&lt;/a&gt;. He uses tachometry from the brushless motor, an IMU and visual odometry for localization.  I don't know the code well enough to point you to any specific file.&lt;/p&gt;&#xA;" OwnerUserId="24763" LastActivityDate="2021-01-18T07:41:23.350" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="21659" PostTypeId="1" CreationDate="2021-01-18T18:31:18.043" Score="0" ViewCount="93" Body="&lt;p&gt;I was looking for a simple inverse Kinematic algorithm that doesn't depend on eigen(doesn't work on my machine + dependency conflict never fixed it)&lt;/p&gt;&#xA;&lt;p&gt;Most of the code out in the internet is way to complex and has eigen3 as a Dependency.&lt;/p&gt;&#xA;&lt;p&gt;If the code is in C or C++ it would be highly appreached!&lt;/p&gt;&#xA;&lt;p&gt;Does anyone know of a code that fits those requirements?&lt;/p&gt;&#xA;&lt;p&gt;My OS is debian lastest stable version (don't know the exact version).&lt;/p&gt;&#xA;&lt;p&gt;Last time I was looking at code it required Eigen3 and setting it up was always complaining about problems.&lt;/p&gt;&#xA;" OwnerUserId="27125" LastEditorUserId="27125" LastEditDate="2021-05-17T14:20:14.533" LastActivityDate="2021-05-17T14:20:14.533" Title="Simple inverse Kinematic algorithm" Tags="&lt;kinematics&gt;&lt;inverse-kinematics&gt;&lt;c++&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="21662" PostTypeId="1" CreationDate="2021-01-19T00:45:25.947" Score="0" ViewCount="44" Body="&lt;p&gt;I am studying SLAM (Simultaneous Localization and Mapping) with textbook &amp;quot;probabilistic robotics&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;I cannot understand well about Sparsification step, so I found original paper for that;&#xA;&lt;a href=&quot;https://web.mit.edu/2.166/www/handouts/thrun_et_al_ijrr2004_seifs.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://web.mit.edu/2.166/www/handouts/thrun_et_al_ijrr2004_seifs.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;According to this paper, information matrix for the distribution of all variables without passive features can be written as equation (38), this is ok for me, but how equation(40) can be lead ??&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/aDsrH.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/aDsrH.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It says that using the matrix inversion lemma like annotated (39), but what is &amp;quot;B&amp;quot; matrix here and why has it gone from resulting equation (40) &amp;amp; (41) ...?&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/xZDNP.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xZDNP.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Anyone help ??&lt;/p&gt;&#xA;" OwnerUserId="27775" LastActivityDate="2021-03-21T06:35:58.997" Title="Sparcification of SLAM with SEIF (Sparse Extended Information Filter)" Tags="&lt;slam&gt;&lt;localization&gt;&lt;filter&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21663" PostTypeId="1" AcceptedAnswerId="21678" CreationDate="2021-01-19T01:22:02.007" Score="0" ViewCount="57" Body="&lt;p&gt;I am trying to learn ROS and so I was looking for some guide or tutorial series. I already managed to set up ROS Kinetic on a Raspberry Pi and ROS Noetic on a Ubuntu VM. I am quite experienced in Python and just need to learn ROS. Where is a good place to start. All the places I looked at were paid. I also have a basic robot setup with a L298N, 2 DC motors, and a camera.&lt;/p&gt;&#xA;" OwnerUserId="26747" LastActivityDate="2021-01-20T14:41:49.297" Title="Where to learn ROS?" Tags="&lt;ros&gt;&lt;beginner&gt;" AnswerCount="2" CommentCount="0" ClosedDate="2021-01-23T08:55:30.377" ContentLicense="CC BY-SA 4.0" />
  <row Id="21664" PostTypeId="2" ParentId="21663" CreationDate="2021-01-19T01:28:53.017" Score="2" Body="&lt;p&gt;The official &lt;a href=&quot;http://wiki.ros.org/ROS/Tutorials&quot; rel=&quot;nofollow noreferrer&quot;&gt;ROS tutorials&lt;/a&gt; are the best place to start. If you go through each of them (shouldn't take too long given your skill set), you will learn all the basics needed to start using widely available complex packages!&lt;/p&gt;&#xA;" OwnerUserId="27064" LastActivityDate="2021-01-19T01:28:53.017" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21667" PostTypeId="1" CreationDate="2021-01-19T13:10:01.600" Score="0" ViewCount="66" Body="&lt;p&gt;I'm working on a machine and the position has a high impact by the jerk and acceleration of the machine. I'm using Grbl for my machine. Does Grbl has S-curve or Harmonic velocity profiles?&lt;/p&gt;&#xA;" OwnerUserId="23311" LastActivityDate="2021-02-18T18:01:40.153" Title="Does the Grbl have S-curve or harmonic velocity profiles?" Tags="&lt;control&gt;&lt;servomotor&gt;&lt;stepper-motor&gt;&lt;cnc&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21668" PostTypeId="1" AcceptedAnswerId="21691" CreationDate="2021-01-19T16:21:33.953" Score="2" ViewCount="91" Body="&lt;p&gt;I’m building a drawbot with a self imposed constraint that it’s method of motion is just two rotating disks. One holding the paper and one holding the pen. However, the math to calculate the right rotations in order to move the pen along a given line (eventually an entire vector line art image) eludes me. Can someone point me in the right direction?&lt;/p&gt;&#xA;&lt;p&gt;I’ve attached an image of the basic idea/layout of the discs since that should make things clearer than my description. :) (note that in order to allow the Center of the pen disk to be outside the paper disk’s area, the pen disk is intentionally larger in size so it can still reach the center of the paper)&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/zJQFQ.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zJQFQ.jpg&quot; alt=&quot;proof of concept&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="27787" LastActivityDate="2021-01-27T10:41:42.907" Title="How can I draw a line using rotation of two circles?" Tags="&lt;stepper-motor&gt;&lt;rotation&gt;&lt;geometry&gt;" AnswerCount="2" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="21669" PostTypeId="2" ParentId="21667" CreationDate="2021-01-19T17:22:38.153" Score="1" Body="&lt;p&gt;grbl has a trapezoidal velocity profile. It has an acceleration limit (so a ramp on the velocity), but does not set a jerk limit. Jerk limiting would be probably an overkill for stepper-motors. However, grbl does use smooth stepping on for the stepper motors, this reduces the stepping frequency induced vibrations.&lt;/p&gt;&#xA;&lt;p&gt;Source: &lt;a href=&quot;https://github.com/grbl/grbl/blob/3ce1a9d637f05e28462a36cb8b166386aab94afc/grbl/stepper.c#L142&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2021-01-19T17:22:38.153" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21670" PostTypeId="2" ParentId="21668" CreationDate="2021-01-19T17:58:16.653" Score="0" Body="&lt;p&gt;Your line has a series of XY coordiantes relative to an arbitrary frame of reference, e.g. the center of the page you are drawing on, or even, the beginning of the line you are drawing.&lt;/p&gt;&#xA;&lt;p&gt;The key is to take the XY coordinate and convert them to rotation angles for the tow rotation axes. You have to find two equations which link the two angles (&lt;span class=&quot;math-container&quot;&gt;$q_1, q_2$&lt;/span&gt;) to the XY coordinates:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$x = f_1(q_1, q_2)$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$y = f_2(q_1, q_2)$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;or the other way around&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$q_1 = g_1(x, y)$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$q_2 = g_2(x, y)$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Obviously the relative position of the centers of your circles to the chosen fixed reference plane will play a role here. You should start by choosing the frame of reference, project all distances to the X and Y axes and try to link everything together with geometrical relationships and get to the equations above.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2021-01-19T17:58:16.653" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21671" PostTypeId="2" ParentId="21626" CreationDate="2021-01-19T19:26:26.647" Score="2" Body="&lt;p&gt;Due to the way that frames are defined in the Modern Robotics book (and in this type of vector-field mechanics in general, such as those of Featherstone), both the spatial frame and the body frames are defined as stationary inertial frames. This requires a bit of a different conceptual understanding than the more traditional moving frames that have been &amp;quot;attached&amp;quot; to moving bodies in most dynamics textbooks.&lt;/p&gt;&#xA;&lt;p&gt;As stated in the &lt;a href=&quot;http://hades.mech.northwestern.edu/images/2/25/MR-v2.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;MR&lt;/a&gt; quote in &lt;a href=&quot;https://robotics.stackexchange.com/a/21628/10414&quot;&gt;the answer by JJB_UT&lt;/a&gt;, the body frames that are used to perform calculations at each instant in time are defined as the stationary inertial frames that are in the same pose (position and orientation) as the more classic moving body frames might be at that same instant. This key difference is what enables a lot of the simpler math in MR compared to other dynamics textbooks and notations.&lt;/p&gt;&#xA;&lt;p&gt;Cheers,&#xA;Brandon&lt;/p&gt;&#xA;" OwnerUserId="10414" LastEditorUserId="10414" LastEditDate="2021-01-19T19:37:36.377" LastActivityDate="2021-01-19T19:37:36.377" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21672" PostTypeId="1" CreationDate="2021-01-19T22:49:36.893" Score="0" ViewCount="13" Body="&lt;p&gt;The Beta value is set according to the original report, which specifies for IMU B-0.033.&#xA;and the sensor data acquisition and filter update is periodic at 200Hz.&lt;/p&gt;&#xA;&lt;p&gt;The angular velocity values from the gyroscope are converted to rads/s and fed to the filter.&#xA;the resulting quaternion values are used to calculate Euler angles using the below conversion algorithm.&lt;/p&gt;&#xA;&lt;p&gt;//      Euler Angles&lt;/p&gt;&#xA;&lt;p&gt;//      roll (x-axis rotation)&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    double sinr_cosp = 2 * (q0 * q1 + q2 * q3);&#xA;    double cosr_cosp = 1 - 2 * (q0 * q1 + q2 * q3);&#xA;    ROLL = atan2(sinr_cosp, cosr_cosp);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;//      pitch (y-axis rotation)&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    double sinp = 2 * (q0 * q2 - q3 * q1);&#xA;    if (abs(sinp) &amp;gt;= 1)&#xA;        PITCH = copysign(M_PI / 2, sinp); // use 90 degrees if out of range&#xA;    else&#xA;        PITCH = asin(sinp);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;// yaw (z-axis rotation)&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    double siny_cosp = 2 * (q0 * q3 + q1 * q2);&#xA;    double cosy_cosp = 1 - 2 * (q2 * q2 + q3 * q3);&#xA;    YAW = atan2(siny_cosp, cosy_cosp);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;//conversion to degrees&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    Eu_Roll = ROLL*(180/M_PI); &#xA;    Eu_Pitch = PITCH*(180/M_PI);&#xA;    Eu_Yaw = YAW*(180/M_PI);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Find the attached image of the Roll Pitch and Yaw drifting.&#xA;[1]: &lt;a href=&quot;https://i.stack.imgur.com/jguNN.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://i.stack.imgur.com/jguNN.png&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="27790" LastActivityDate="2021-01-19T22:49:36.893" Title="When Implementing Madgwick filter for attitude estimation, the calculated Euler angles are drifting significantly. What could be the reason?" Tags="&lt;imu&gt;&lt;sensor-fusion&gt;" AnswerCount="0" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="21673" PostTypeId="1" AcceptedAnswerId="21680" CreationDate="2021-01-20T03:49:59.903" Score="0" ViewCount="111" Body="&lt;p&gt;I'm trying to do a multi agent simulation using leo_rover which is open source. I'm comfortable with single system, but when I add a second robot using namespaces i get the second robot spawned in the gazebo exactly where i want, but the controllers for the two agents try to get published at the same node location. In the end neither of the controller spawns and I'm left with rovers without controllers.&lt;/p&gt;&#xA;&lt;p&gt;This is the rover.launch file.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;launch&amp;gt;&#xA;   &amp;lt;arg name=&amp;quot;init_pose&amp;quot;/&amp;gt;&#xA;   &amp;lt;arg name=&amp;quot;robot_name&amp;quot;/&amp;gt;&#xA;   &amp;lt;param name=&amp;quot;robot_description&amp;quot; command=&amp;quot;&lt;span class=&quot;math-container&quot;&gt;$(find xacro)/xacro $&lt;/span&gt;(find leo_description)/urdf/new.urdf.xacro&amp;quot; /&amp;gt;&#xA;&#xA;   &amp;lt;!-- push robot_description to factory and spawn robot in gazebo --&amp;gt;&#xA;   &amp;lt;node name=&amp;quot;urdf_spawner&amp;quot; pkg=&amp;quot;gazebo_ros&amp;quot; type=&amp;quot;spawn_model&amp;quot;&#xA;    args=&amp;quot;&lt;span class=&quot;math-container&quot;&gt;$(arg init_pose) -unpause -urdf -model $&lt;/span&gt;(arg robot_name) -param /robot_description&amp;quot; respawn=&amp;quot;false&amp;quot; output=&amp;quot;screen&amp;quot;/&amp;gt;&#xA;&#xA;  &amp;lt;node pkg=&amp;quot;robot_state_publisher&amp;quot; type=&amp;quot;robot_state_publisher&amp;quot;  name=&amp;quot;robot_state_publisher&amp;quot; ns=&amp;quot;leo&amp;quot;&amp;gt;&#xA;      &amp;lt;param name=&amp;quot;publish_frequency&amp;quot; type=&amp;quot;double&amp;quot; value=&amp;quot;30.0&amp;quot; /&amp;gt;&#xA;  &amp;lt;/node&amp;gt;&#xA;&#xA;  &amp;lt;include file=&amp;quot;$(find leo_control)/launch/control.launch&amp;quot;&amp;gt;&#xA;   &amp;lt;!-- TODO: add possible arguments for depth camera, etc.--&amp;gt;&#xA;  &amp;lt;/include&amp;gt;&#xA;&#xA;&amp;lt;/launch&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This is the control.launch used in the rover.launch&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;launch&amp;gt;&#xA;&#xA;&#xA;  &amp;lt;arg name=&amp;quot;use_tf_static&amp;quot; default=&amp;quot;false&amp;quot;/&amp;gt;&#xA;  &amp;lt;arg name=&amp;quot;model&amp;quot; default=&amp;quot;$(find leo_description)/urdf/new.urdf.xacro&amp;quot;/&amp;gt;&#xA;&#xA;  &amp;lt;!-- Load controller configuration /&amp;gt;--&amp;gt;&#xA;  &amp;lt;rosparam command=&amp;quot;load&amp;quot; file=&amp;quot;$(find leo_control)/config/control.yaml&amp;quot; /&amp;gt;&#xA;&#xA;  &amp;lt;node name=&amp;quot;controller_spawner&amp;quot; pkg=&amp;quot;controller_manager&amp;quot; type=&amp;quot;spawner&amp;quot;&#xA;    respawn=&amp;quot;false&amp;quot; args=&amp;quot;leo_velocity_controller leo_joint_publisher&amp;quot; output=&amp;quot;screen&amp;quot; ns=&amp;quot;leo&amp;quot;/&amp;gt;&#xA;&#xA;&amp;lt;/launch&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Below launch file tries to add 2rovers into the simulation using namespaces.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;launch&amp;gt;&#xA;  &amp;lt;!-- No namespace here as we will share this description. &#xA;      Access with slash at the beginning --&amp;gt;&#xA;  &amp;lt;param name=&amp;quot;robot_description&amp;quot; command=&amp;quot;&lt;span class=&quot;math-container&quot;&gt;$(find xacro)/xacro $&lt;/span&gt;(find leo_description)/urdf/new.urdf.xacro&amp;quot; /&amp;gt;&#xA;&#xA;  &amp;lt;!-- BEGIN ROBOT 1--&amp;gt;&#xA;  &amp;lt;group ns=&amp;quot;rover1&amp;quot;&amp;gt;&#xA;    &amp;lt;param name=&amp;quot;tf_prefix&amp;quot; value=&amp;quot;rover1_tf&amp;quot; /&amp;gt;&#xA;    &amp;lt;include file=&amp;quot;$(find btp)/launch/rover.launch&amp;quot; &amp;gt;&#xA;      &amp;lt;arg name=&amp;quot;init_pose&amp;quot; value=&amp;quot;-x 0 -y 0 -z 0&amp;quot; /&amp;gt;&#xA;      &amp;lt;arg name=&amp;quot;robot_name&amp;quot;  value=&amp;quot;Robot1&amp;quot; /&amp;gt;&#xA;    &amp;lt;/include&amp;gt;&#xA;  &amp;lt;/group&amp;gt;&#xA;&#xA;  &amp;lt;!-- BEGIN ROBOT 2--&amp;gt;&#xA;  &amp;lt;group ns=&amp;quot;rover2&amp;quot;&amp;gt;&#xA;    &amp;lt;param name=&amp;quot;tf_prefix&amp;quot; value=&amp;quot;rover2_tf&amp;quot; /&amp;gt;&#xA;    &amp;lt;include file=&amp;quot;$(find btp)/launch/rover.launch&amp;quot; &amp;gt;&#xA;      &amp;lt;arg name=&amp;quot;init_pose&amp;quot; value=&amp;quot;-x -2 -y 0 -z 0&amp;quot; /&amp;gt;&#xA;      &amp;lt;arg name=&amp;quot;robot_name&amp;quot;  value=&amp;quot;Robot2&amp;quot; /&amp;gt;&#xA;    &amp;lt;/include&amp;gt;&#xA;  &amp;lt;/group&amp;gt;&#xA;&amp;lt;/launch&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Below multisim.launch file combines all these launches.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;launch&amp;gt;&#xA;   &amp;lt;arg name=&amp;quot;world_name&amp;quot; default=&amp;quot;worlds/empty.world&amp;quot;/&amp;gt;&#xA;&#xA;   &amp;lt;include file=&amp;quot;&lt;span class=&quot;math-container&quot;&gt;$(find gazebo_ros)/launch/empty_world.launch&quot;&amp;gt;&#xA;     &amp;lt;arg name=&quot;world_name&quot; value=&quot;$&lt;/span&gt;(arg world_name)&amp;quot;/&amp;gt; &amp;lt;!-- world_name is wrt GAZEBO_RESOURCE_PATH environment variable --&amp;gt;&#xA;     &amp;lt;arg name=&amp;quot;paused&amp;quot; value=&amp;quot;false&amp;quot;/&amp;gt;&#xA;     &amp;lt;arg name=&amp;quot;use_sim_time&amp;quot; value=&amp;quot;true&amp;quot;/&amp;gt;&#xA;     &amp;lt;arg name=&amp;quot;gui&amp;quot; value=&amp;quot;true&amp;quot;/&amp;gt;&#xA;     &amp;lt;arg name=&amp;quot;headless&amp;quot; value=&amp;quot;false&amp;quot;/&amp;gt;&#xA;     &amp;lt;arg name=&amp;quot;debug&amp;quot; value=&amp;quot;true&amp;quot;/&amp;gt;&#xA;     &amp;lt;arg name=&amp;quot;verbose&amp;quot; value=&amp;quot;true&amp;quot;/&amp;gt;&#xA;   &amp;lt;/include&amp;gt;&#xA;   &amp;lt;!-- start gui --&amp;gt;&#xA;   &amp;lt;!-- &amp;lt;node name=&amp;quot;gazebo_gui&amp;quot; pkg=&amp;quot;gazebo&amp;quot; type=&amp;quot;gui&amp;quot; respawn=&amp;quot;false&amp;quot; output=&amp;quot;screen&amp;quot;/&amp;gt; --&amp;gt;&#xA;&#xA;   &amp;lt;!-- include our robots --&amp;gt;&#xA;   &amp;lt;include file=&amp;quot;$(find btp)/launch/multi_rover.launch&amp;quot;/&amp;gt;&#xA;&amp;lt;/launch&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Now the error why I launch this multisim.launch file.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;[ERROR] [1611075925.200755903, 0.394000000]: Tried to advertise a service that is already advertised in this node [/leo/controller_manager/list_controllers]&#xA;[ERROR] [1611075925.200778314, 0.394000000]: Tried to advertise a service that is already advertised in this node [/leo/controller_manager/list_controller_types]&#xA;[ERROR] [1611075925.200811448, 0.394000000]: Tried to advertise a service that is already advertised in this node [/leo/controller_manager/load_controller]&#xA;[ERROR] [1611075925.200824730, 0.394000000]: Tried to advertise a service that is already advertised in this node [/leo/controller_manager/unload_controller]&#xA;[ERROR] [1611075925.200841861, 0.394000000]: Tried to advertise a service that is already advertised in this node [/leo/controller_manager/switch_controller]&#xA;[ERROR] [1611075925.200859178, 0.394000000]: Tried to advertise a service that is already advertised in this node [/leo/controller_manager/reload_controller_libraries&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="27234" LastActivityDate="2021-01-20T14:52:03.187" Title="Tried to advertise a service that is already advertised in this node [/leo/controller_manager/list_controllers]" Tags="&lt;ros&gt;&lt;simulation&gt;&lt;gazebo&gt;&lt;multi-agent&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21674" PostTypeId="1" CreationDate="2021-01-20T09:34:56.127" Score="0" ViewCount="39" Body="&lt;p&gt;I have a manipulator A with known Jacobian matrix and manipulator B with also known Jacobian matrix. Now I want to chain them, B will be attached at the end of A. How do I get the Jacobian of this manipulator? Can I just multiply the both knwon Jacobian matrices?&lt;/p&gt;&#xA;" OwnerUserId="21760" LastActivityDate="2021-01-20T16:22:59.203" Title="Concatenate Jacobian matrices" Tags="&lt;jacobian&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21676" PostTypeId="1" CreationDate="2021-01-20T12:39:56.883" Score="0" ViewCount="47" Body="&lt;p&gt;I'm currently working on a quadcopter using f450 frame and YMF32 code. I was able to successfully build the quadcopter and It flies without having any vibrations or wobbles. Also, I tuned the PID setting almost two days now.&lt;/p&gt;&#xA;&lt;p&gt;But the problem is whenever I tried to roll or pitch the quadcopter descends and need to give some trust to avoid crashing. This happens only when tried to roll or pitch. My quad is approximately 1.5kg(or more not less) weighted and 1000kv motors are used.&lt;/p&gt;&#xA;&lt;p&gt;I can understand what's happening using physics but not sure what I should do, So what can be the problem and what can I do to solve it.&lt;/p&gt;&#xA;&lt;p&gt;Thanks in advance!&lt;/p&gt;&#xA;" OwnerUserId="27581" LastActivityDate="2021-02-20T07:45:29.620" Title="Quadcopter descends when rolled or pitched" Tags="&lt;quadcopter&gt;&lt;pid&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21677" PostTypeId="2" ParentId="21674" CreationDate="2021-01-20T13:04:40.557" Score="1" Body="&lt;p&gt;Unfortunately is not as straightforward as multiplying them.&lt;/p&gt;&#xA;&lt;p&gt;The Jacobian of B is considering that the first body is fixed to the plane. You would need to add the velocity at that point, which is the end-point of the first Jacobian.&lt;/p&gt;&#xA;&lt;p&gt;Basically, you would have an intermediate point, which needs to have the precedent velocity and with some math manipulation, you could get to the full end Jacobian. q&lt;/p&gt;&#xA;" OwnerUserId="21229" LastActivityDate="2021-01-20T13:04:40.557" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21678" PostTypeId="2" ParentId="21663" CreationDate="2021-01-20T14:41:49.297" Score="1" Body="&lt;p&gt;In addition to the ROS tutorials already mentioned by Akhil Kurup, Robotis has a list of resources &lt;a href=&quot;https://emanual.robotis.com/docs/en/platform/turtlebot3/learn/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;. There are YT videos and a free e-book. Some of them are centered around their Turtlebot kit, but there are also general ROS info.&lt;/p&gt;&#xA;" OwnerUserId="23524" LastActivityDate="2021-01-20T14:41:49.297" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21679" PostTypeId="2" ParentId="21522" CreationDate="2021-01-20T14:48:48.233" Score="2" Body="&lt;p&gt;It looks like a leaf switch. A search on AliExpress for &amp;quot;leaf switch&amp;quot; and sort by price gave me &lt;a href=&quot;https://www.aliexpress.com/item/4001026309542.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="23524" LastActivityDate="2021-01-20T14:48:48.233" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21680" PostTypeId="2" ParentId="21673" CreationDate="2021-01-20T14:52:03.187" Score="0" Body="&lt;p&gt;I have resolved the problem. It was about conflicting namespaces for the controller manager. I have removed the control.launch file and included the stuff in the rover.launch itself. then i had to include namespaces everywhere.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;launch&amp;gt;&#xA;  &amp;lt;arg name=&amp;quot;init_pose&amp;quot;/&amp;gt;&#xA;  &amp;lt;arg name=&amp;quot;robot_name&amp;quot;/&amp;gt;&#xA;  &amp;lt;param name=&amp;quot;robot_description&amp;quot; command=&amp;quot;&lt;span class=&quot;math-container&quot;&gt;$(find xacro)/xacro $&lt;/span&gt;(find leo_description)/urdf/new.urdf.xacro&amp;quot; /&amp;gt;&#xA;&#xA;  &amp;lt;!-- push robot_description to factory and spawn robot in gazebo --&amp;gt;&#xA;  &amp;lt;node name=&amp;quot;urdf_spawner&amp;quot; pkg=&amp;quot;gazebo_ros&amp;quot; type=&amp;quot;spawn_model&amp;quot; ns=&amp;quot;/&lt;span class=&quot;math-container&quot;&gt;$(arg robot_name)&quot;&#xA;        args=&quot;$&lt;/span&gt;(arg init_pose) -unpause -urdf -model &lt;span class=&quot;math-container&quot;&gt;$(arg robot_name) -param /robot_description &quot; respawn=&quot;false&quot; output=&quot;screen&quot;/&amp;gt;&#xA;  &amp;lt;node pkg=&quot;robot_state_publisher&quot; type=&quot;robot_state_publisher&quot;  name=&quot;robot_state_publisher&quot; ns=&quot;leo&quot;&amp;gt;&#xA;    &amp;lt;param name=&quot;publish_frequency&quot; type=&quot;double&quot; value=&quot;30.0&quot; /&amp;gt;&#xA;  &amp;lt;/node&amp;gt; &#xA;  &amp;lt;arg name=&quot;model&quot; default=&quot;$&lt;/span&gt;(find leo_description)/urdf/new.urdf.xacro&amp;quot;/&amp;gt;&#xA;&#xA;  &amp;lt;!-- Load controller configuration /&amp;gt;--&amp;gt;&#xA;  &amp;lt;rosparam command=&amp;quot;load&amp;quot; file=&amp;quot;&lt;span class=&quot;math-container&quot;&gt;$(find leo_control)/config/control.yaml&quot; ns=&quot;/$&lt;/span&gt;(arg robot_name)&amp;quot; /&amp;gt;&#xA;  &amp;lt;node name=&amp;quot;controller_spawner_&lt;span class=&quot;math-container&quot;&gt;$(arg robot_name)&quot; pkg=&quot;controller_manager&quot; type=&quot;spawner&quot; ns=&quot;/$&lt;/span&gt;(arg robot_name)&amp;quot;&#xA;    respawn=&amp;quot;false&amp;quot; args=&amp;quot; leo/leo_velocity_controller leo/leo_joint_publisher --namespace=/$(arg robot_name)&amp;quot; output=&amp;quot;screen&amp;quot;/&amp;gt;   &#xA;&amp;lt;/launch&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;and i had also removed the namespace from the urdf/xacro file at the bottom with the help of this &lt;a href=&quot;https://answers.gazebosim.org//question/16497/spawning-multiple-robots-each-with-a-controller-in-the-same-namespace-as-the-controller_manager/&quot; rel=&quot;nofollow noreferrer&quot;&gt;answer's&lt;/a&gt;  first part.&lt;/p&gt;&#xA;" OwnerUserId="27234" LastActivityDate="2021-01-20T14:52:03.187" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21681" PostTypeId="2" ParentId="21674" CreationDate="2021-01-20T16:22:59.203" Score="1" Body="&lt;p&gt;If you have the two Jacobian matrices, do you also have the two positional transformation matrices?  If so, you could multiply these two matrices together, and take partial derivatives of the result to get the full Jacobian.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2021-01-20T16:22:59.203" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21683" PostTypeId="1" CreationDate="2021-01-21T00:11:31.950" Score="0" ViewCount="76" Body="&lt;p&gt;I am using LIDAR to measure a robot's altitude. The robot's orientation relative to the ground is dynamic; i.e. the XY plane tilts relative to the Z axis. I would like the LIDAR to remain pointed close to perfectly downward as the robot tilts.&lt;/p&gt;&#xA;&lt;p&gt;Some details: the tilts can be large, up to 30 degrees, but are short lived; the robot largely corrects its orientation within a few seconds.&lt;/p&gt;&#xA;&lt;p&gt;Note, I have considered measuring the robots angle to trigonometrically derive altitude. I have also considered barometric pressure altimeters, but those do not have the reaction time I need.&lt;/p&gt;&#xA;&lt;p&gt;Apologies if anything here was unclear, thank you.&lt;/p&gt;&#xA;" OwnerUserId="26221" LastActivityDate="2021-04-27T18:07:15.717" Title="How to keep a sensor pointed downward" Tags="&lt;lidar&gt;&lt;stability&gt;&lt;real-time&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21684" PostTypeId="2" ParentId="21676" CreationDate="2021-01-21T04:25:07.347" Score="1" Body="&lt;p&gt;What you describe is probably due to cosine losses. Namely, when you pitch or roll your thrust vector points away from the vertical direction and thus not completely compensating gravity anymore. One way to compensate for this would be to scale your thrust by dividing it by the cosine of angle of your thrust vector with the vertical direction.&lt;/p&gt;&#xA;" OwnerUserId="1487" LastEditorUserId="6941" LastEditDate="2021-02-20T07:45:29.620" LastActivityDate="2021-02-20T07:45:29.620" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21685" PostTypeId="1" CreationDate="2021-01-21T11:04:50.817" Score="0" ViewCount="41" Body="&lt;p&gt;Assuming ideal environment/hardware flying conditions, is it possible that the autopilot loses the control of the quadcopter?&#xA;What is the maximum tilt in roll and pitch that is allowed for the quadcopter to be under the control? How to drive that from the quadcopter dynamics model?&lt;/p&gt;&#xA;&lt;p&gt;I do not have a strong mathematical/physics background. I had followed this report to understand the quadcopter dynamics.&#xA;&lt;a href=&quot;https://andrew.gibiansky.com/downloads/pdf/Quadcopter%20Dynamics,%20Simulation,%20and%20Control.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://andrew.gibiansky.com/downloads/pdf/Quadcopter%20Dynamics,%20Simulation,%20and%20Control.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Any insights would be appreciated!&lt;/p&gt;&#xA;" OwnerUserId="27802" LastActivityDate="2021-01-22T21:18:45.083" Title="When is the Quadcopter out of the control?" Tags="&lt;quadcopter&gt;&lt;dynamics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21686" PostTypeId="1" CreationDate="2021-01-21T12:11:57.120" Score="0" ViewCount="54" Body="&lt;p&gt;I'm a newbee to SLAM. I have a question that in Lidar SLAM(including 2D lidar and 3D lidar), if I only use a single lidar without any other sensors like IMU and no loop closure in the mapping process, is this just a laser odometry? Can I get a map?&lt;/p&gt;&#xA;&lt;p&gt;Another question is what's the relationship between loop closure detection and backend optimization in laser SLAM? Does there exist backend optimization without other sensors and loop closure detection?&lt;/p&gt;&#xA;&lt;p&gt;Thanks a lot!&lt;/p&gt;&#xA;" OwnerUserId="24576" LastEditorUserId="24576" LastEditDate="2021-01-23T14:26:22.313" LastActivityDate="2021-01-23T14:26:22.313" Title="Is Lidar SLAM with only lidar sensor and no loop closure detection just a odometry?" Tags="&lt;slam&gt;&lt;lidar&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21687" PostTypeId="1" AcceptedAnswerId="21820" CreationDate="2021-01-21T13:27:42.560" Score="1" ViewCount="32" Body="&lt;p&gt;I have a turtle bot and I want to modify its heading so it moves to certain point (x,y) in the world.&lt;/p&gt;&#xA;&lt;p&gt;Now I reckon that yaw is angle from robots reference, how do I determine the yaw as the point (x,y) is from global (world's reference)?&lt;/p&gt;&#xA;" OwnerUserId="23562" LastActivityDate="2021-02-19T21:57:19.677" Title="Determining (Heading) Yaw to rotate the Turtle Robot to desired point (X,Y) so it moves towards it" Tags="&lt;ros&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21688" PostTypeId="2" ParentId="21683" CreationDate="2021-01-21T13:34:26.763" Score="0" Body="&lt;p&gt;To keep your lidar pointing downwards either:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;mount the LIDAR differently to staticly fix the orientation.&lt;/li&gt;&#xA;&lt;li&gt;mount the LIDAR on a gimble to let Gravitation forces point it down.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="27125" LastEditorUserId="21531" LastEditDate="2021-02-25T12:45:07.547" LastActivityDate="2021-02-25T12:45:07.547" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21691" PostTypeId="2" ParentId="21668" CreationDate="2021-01-21T21:32:10.277" Score="4" Body="&lt;p&gt;Made a quick diagram and a couple of calculations in matlab, let me know if it works for you.&lt;/p&gt;&#xA;&lt;p&gt;First of all, I am assuming you are considering your piece of paper as your reference coordinate system (CS), in the sense that the coordinates &lt;span class=&quot;math-container&quot;&gt;$(x_2, y_2)$&lt;/span&gt;, are the input to your problem. Also, I will consider &lt;span class=&quot;math-container&quot;&gt;$\theta_1$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\theta_3$&lt;/span&gt;, as the positions of your stepper motors, both measured from a horizontal line.&lt;/p&gt;&#xA;&lt;p&gt;The CS &lt;span class=&quot;math-container&quot;&gt;$X_1Y_1$&lt;/span&gt; is fixed to the ground. The CS &lt;span class=&quot;math-container&quot;&gt;$X_2Y_2$&lt;/span&gt; on the other hand, shares the same origin as &lt;span class=&quot;math-container&quot;&gt;$X_1Y_1$&lt;/span&gt; but rotates with the paper. See Figure 1.&lt;/p&gt;&#xA;&lt;p&gt;We will assume that you already have certain geometric parameters such as: &lt;span class=&quot;math-container&quot;&gt;$R$&lt;/span&gt; - distance from the big disk to the pen and &lt;span class=&quot;math-container&quot;&gt;$D$&lt;/span&gt; - distance between disk's centers.&lt;/p&gt;&#xA;&lt;p&gt;So, let's say you want to place the pen in a position &lt;span class=&quot;math-container&quot;&gt;$x_2, y_2$&lt;/span&gt;. There will be two possible locations where you can rotate the sheet of paper, if you want to meet the pen there. These locations are at the intersections of the two circles with radii &lt;span class=&quot;math-container&quot;&gt;$R$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$r$&lt;/span&gt; (being &lt;span class=&quot;math-container&quot;&gt;$r$&lt;/span&gt; the radius of the small disk). I marked them with red crosses in the Figure 2.&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$r$&lt;/span&gt; is obtained as follows:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ r = \sqrt{x^{2}_{2} + y^{2}_{2}}$$&lt;/span&gt;&#xA;now, knowing &lt;span class=&quot;math-container&quot;&gt;$x_2,y_2$&lt;/span&gt; also allows us to calculate &lt;span class=&quot;math-container&quot;&gt;$\alpha_{3}$&lt;/span&gt; as:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$\alpha_{3} = \arctan\left(\frac{y_2}{x_2}\right)$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;If we know &lt;span class=&quot;math-container&quot;&gt;$r$&lt;/span&gt;, by using &lt;span class=&quot;math-container&quot;&gt;$R$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$D$&lt;/span&gt;, we can then find out the angles &lt;span class=&quot;math-container&quot;&gt;$\theta_1$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\theta_2$&lt;/span&gt;, thus:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$\theta_1 = \arccos\left(\frac{R^2 + D^2 - r^2}{2RD}\right)$$&lt;/span&gt; and&#xA;&lt;span class=&quot;math-container&quot;&gt;$$\theta_2 = \arccos\left(\frac{r^2 + D^2 - R^2}{2rD}\right)$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;These pair &lt;span class=&quot;math-container&quot;&gt;$\theta_1, \theta_2$&lt;/span&gt; should satisfy the condition that the points are located where both circles cross.&lt;/p&gt;&#xA;&lt;p&gt;Now, to calculate &lt;span class=&quot;math-container&quot;&gt;$\theta_3$&lt;/span&gt;, you apply:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ \theta_3 = 180 - \theta_2 - \alpha_{3}$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Being &lt;span class=&quot;math-container&quot;&gt;$\theta_3$&lt;/span&gt; the angle you have to rotate your small disk to be able to meet the pen at the intended position (defined using coordinates &lt;span class=&quot;math-container&quot;&gt;$x_2,y_2$&lt;/span&gt;).&lt;/p&gt;&#xA;&lt;p&gt;Now, these set of equations are basically your inverse kinematics.&lt;/p&gt;&#xA;&lt;p&gt;Now what you need to do is to generate a vector of points in the CS &lt;span class=&quot;math-container&quot;&gt;$X_2Y_2$&lt;/span&gt;, that will represent the line (you choose the spacing between points).&lt;/p&gt;&#xA;&lt;p&gt;This vector of points allows you to calculate a vector of &lt;span class=&quot;math-container&quot;&gt;$r$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\alpha_3$&lt;/span&gt; values as well.&lt;/p&gt;&#xA;&lt;p&gt;With &lt;span class=&quot;math-container&quot;&gt;$r$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\alpha_3$&lt;/span&gt;, you will now obtain the combinations of positions for &lt;span class=&quot;math-container&quot;&gt;$\theta_1$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\theta_3$&lt;/span&gt; that will draw the line.&lt;/p&gt;&#xA;&lt;p&gt;P.S.: This equations don't account for singularities, so you will have to take into consideration the checks that need to be made in order to know before hand if the point you want to reach, is in the reachable space of the robot.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/6mzeD.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6mzeD.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10183" LastEditorUserId="10183" LastEditDate="2021-01-27T10:41:42.907" LastActivityDate="2021-01-27T10:41:42.907" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21692" PostTypeId="2" ParentId="21373" CreationDate="2021-01-21T22:34:06.333" Score="0" Body="&lt;p&gt;To calculate the potential energy you need to define where robot reaches a potential energy zero.&lt;/p&gt;&#xA;&lt;p&gt;For example, if you have a single rotating arm, that moves up and down, the usual is to consider that the zero potential energy is achieved when the robot is horizontal (we can imagine that at this position it collides with the floor).&lt;/p&gt;&#xA;&lt;p&gt;In your case it's the same. So what you have indicated as &lt;span class=&quot;math-container&quot;&gt;$r_{c,i}$&lt;/span&gt;, corresponds to the distance between the center of mass of each robot link and this zero potential energy plane. Generally, there is one potential energy associated with each actuator, and this helps you to calculate the torque that each actuator needs to apply to keep the robot in an static position, that doesn't coincide with the zero potential energy plane.&lt;/p&gt;&#xA;" OwnerUserId="10183" LastActivityDate="2021-01-21T22:34:06.333" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21694" PostTypeId="2" ParentId="21686" CreationDate="2021-01-22T16:40:11.687" Score="1" Body="&lt;p&gt;The problem with defining the terms SLAM, and odometry is that various people define them differently, and sometimes even use them interchangeably. It can also change depending on what your main sensor is(camera vs LIDAR), and even what sort of feature representation you use (scan-matching vs landmark based).&lt;/p&gt;&#xA;&lt;p&gt;So for this question I am going to use the terms odometry/SLAM in regards to a LIDAR sensor with a scan matching implementation.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;if I only use a single lidar without any other sensors like IMU and no&#xA;loop closure in the mapping process, is this jsut a laser odometry?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;You are mostly right about this. SLAM is just odometry with loop closure. However, you can use multiple sensors(IMU,GPS,...) and still have it be odometry. Sensor fusion doesn't define whether it is odometry or SLAM.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Can I get a map?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes. Since you know your poses from odometry you can still combine the LIDAR scans into a map. However, since you don't have loop closure you can't refine the map which is the key part of SLAM(SLA-MAPPING).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Another question is what's the relationship between loop closure&#xA;detection and backend optimization in laser SLAM? Does there exist&#xA;backend optimization without other sensors and loop closure detection?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;When we are doing backend optimization we are essentially taking the history of past poses and trying to optimize them all together. However, this is useless without knowing any additional information. It would just give us the same result as running the odometry algorithm. So somehow you need to introduce additional information/constraints.&lt;/p&gt;&#xA;&lt;p&gt;This is where loop closure comes in. If we know these two poses distant in time are actually connected. Then we have introduced new information.&lt;/p&gt;&#xA;&lt;p&gt;Here is the pose graph of just odometry, and with a red loop closure link.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/v9aoZ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/v9aoZ.png&quot; alt=&quot;Pose graph&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://i.stack.imgur.com/zX7Zz.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zX7Zz.png&quot; alt=&quot;Pose graph with loop closure link&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;You can see with the loop closure we are adding new information(the extra edge).&lt;/p&gt;&#xA;&lt;p&gt;Using a pose graph is a good way to visualize problem, because if you can think of any new ways of adding edges and nodes to this graph then you are introducing new information.&lt;/p&gt;&#xA;&lt;p&gt;Some other options are a localization constraint. We know a pose is connected to some landmark/map with known position.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/xzjeT.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xzjeT.png&quot; alt=&quot;Localization constraint&quot; /&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Another popular one is that we know the start and end location of the robot/car. So we fix those and optimize the positions of the rest.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/t7EGk.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/t7EGk.png&quot; alt=&quot;Constraints of start and end pose&quot; /&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="15265" LastEditorUserId="15265" LastEditDate="2021-01-22T23:42:38.040" LastActivityDate="2021-01-22T23:42:38.040" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21695" PostTypeId="1" CreationDate="2021-01-22T18:06:41.683" Score="0" ViewCount="10" Body="&lt;p&gt;Can Movement Primitives be used to model the orientation (or pose) of a robotic arm end effector?&lt;/p&gt;&#xA;&lt;p&gt;In literature (see for instance &lt;a href=&quot;https://arxiv.org/ftp/arxiv/papers/1811/1811.06711.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this imitation learning review&lt;/a&gt; at pag.69) it's common to see DMP (Dynamic Movement Primitives) and  ProMP (Probabilistic Movement Primitives) applied to trajectories of positions and velocity pairs.&#xA;I would like to apply the same formalism to predict the orientation along the trajectory, for instance of the end effector reference frame (given as Euler angles or quaternions).&lt;/p&gt;&#xA;&lt;p&gt;I don't see a priori obstacles for Euler angles, but the normalisation conditions for quaternions may give issues.&lt;/p&gt;&#xA;" OwnerUserId="19260" LastActivityDate="2021-01-22T18:06:41.683" Title="Orientation Movement Primitives for Imitation Learning" Tags="&lt;pose&gt;&lt;movement&gt;&lt;trajectory&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21696" PostTypeId="2" ParentId="21685" CreationDate="2021-01-22T21:18:45.083" Score="1" Body="&lt;p&gt;I suppose it depends on what you mean by &amp;quot;under control&amp;quot;. If you mean the point where the flight controller will stop being able to correct for the error, then I'm not sure that it's well defined. It will depend a lot on how sophisticated the flight control software is and how much time it has to correct(how long it will take for it to crash).&lt;/p&gt;&#xA;&lt;p&gt;If you mean the maximum roll/pitch that can be maintained while flying, then that will also vary widely based on weight and thrust. If the craft tilts more than 90 degrees then there will be no downward thrust and it will lose altitude, but the angle at which it can maintain its altitude will vary drastically. A lightweight high thrust racing drone might be able to maintain more than 45 degrees without dropping, whereas a larger and heavier craft might not be able to go past 20 degrees. If you know the maximum thrust then you can figure out how much downward thrust it will produce at a given angle using the equation:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://chart.googleapis.com/chart?cht=tx&amp;amp;chl=downwardthrust%3Dcos%28angle%29*totalthrust&quot; alt=&quot;1&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;If the downward thrust is greater than or equal to the weight of your craft then it will be able to maintain it's altitude.&lt;/p&gt;&#xA;&lt;p&gt;I hope that helps even if I can't give a precise answer.&lt;/p&gt;&#xA;" OwnerUserId="9220" LastActivityDate="2021-01-22T21:18:45.083" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21697" PostTypeId="1" CreationDate="2021-01-23T11:49:24.063" Score="2" ViewCount="47" Body="&lt;p&gt;Let's say I have one laser scanner and a radar device, which I should use to measure a distance to a wall (Fig. 1). Both devices are place on the same support, so... they should measure the same distance (+/- the tolerances of the single device). It is an ideal scenary, so both devices are measuring the distance perfect perpendicular to the wall. Both tolerances of the devices are taken from the datasheet of the device. So the values of &lt;span class=&quot;math-container&quot;&gt;$\delta r_{1}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\delta r_{2}$&lt;/span&gt; are known. We consider the case, where those values are normal distributed.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/aY5ti.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/aY5ti.jpg&quot; alt=&quot;Figure 1&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Now... I need to &lt;em&gt;fuse&lt;/em&gt; both measures to one value using a Kalman filter.&#xA;Reading &lt;a href=&quot;https://robotics.stackexchange.com/questions/16817/sensor-fusion-kalman-for-two-identical-position-sensors&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;https://stackoverflow.com/questions/55813719/multi-sensors-fusion-using-kalman-filter/55819191#55819191&quot;&gt;here&lt;/a&gt; I can imagine two way to achieve this goal:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;From both values and measures I calculate the &lt;em&gt;mean&lt;/em&gt; value and the &lt;em&gt;new variance&lt;/em&gt; by simply computing:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$\mu_{new} = \frac{\mu_{1}\delta r_{2}^{2} + \mu_{2}\delta r_{1}^{2}}{\delta r_{1}^{2} + \delta r_{2}^{2}} &#xA;$$&lt;/span&gt;&#xA;and&#xA;&lt;span class=&quot;math-container&quot;&gt;$$\delta_{new} = \frac{1}{\frac{1}{\delta r_{1}^{2}} + \frac{1}{\delta r_{2}^{2}}}&#xA;$$&lt;/span&gt;&#xA;where &lt;span class=&quot;math-container&quot;&gt;$\mu_{1}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\mu_{2}$&lt;/span&gt; are the mean values of the measures from device 1 and 2 respectively (a serie of measurements is undergone).&#xA;After calculating those values I apply the Kalman Filter algorithm, as I would handle a &lt;em&gt;single input, single output&lt;/em&gt; system. So there is nothing new and or special in this case. By calculating the mean value and the mean variance of both devices together I can use any kalman filter implementation I want.&lt;/li&gt;&#xA;&lt;li&gt;I would like to keep the measures and the variances &lt;em&gt;separated&lt;/em&gt; and I don't want to calculate the mean values (&lt;span class=&quot;math-container&quot;&gt;$\mu_{new}, \delta_{new}$&lt;/span&gt;) like (1) above, for istance because they are taken with different time intervalls or for some other reasons...&#xA;Anyway... I need to rewrite my time update equations:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$ \hat{\mathbf{x}}_{n+1,n} = \mathbf{F}\hat{\mathbf{x}}_{n,n} + \mathbf{G}\hat{\mathbf{u}}_{n,n} $$&lt;/span&gt;&#xA;and &lt;span class=&quot;math-container&quot;&gt;$$ \mathbf{P}_{n+1,n} = \mathbf{F}\mathbf{P}\mathbf{F}^{T} + \mathbf{Q}$$&lt;/span&gt;&#xA;in such a way, that I can just provide both measures &lt;span class=&quot;math-container&quot;&gt;$\mathbf{z}_{n}$&lt;/span&gt; from both devices and then the new state prediction is calculated at every step.&#xA;But since my state vector is a position &lt;span class=&quot;math-container&quot;&gt;$\mathbf{x} = [x, y, z]$&lt;/span&gt; I can't figure out, how I can treat the 2 measures independently at every iteration step (of course we consider in this case only the &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; axis, since &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$z$&lt;/span&gt; can be put 0. Just for simplification).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Any idea?&lt;/p&gt;&#xA;" OwnerUserId="7097" LastActivityDate="2021-01-23T19:10:47.557" Title="Kalman Filter with multiple inputs" Tags="&lt;kalman-filter&gt;&lt;input&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21698" PostTypeId="1" CreationDate="2021-01-23T18:54:35.183" Score="0" ViewCount="21" Body="&lt;p&gt;I need to perform some analysis on motor failure detection and compensation in quadcopter. I have been using PX4+Gazebo for 3 months and recently found that it does not include motor failure detection logic. Are there any suggestions for a simulator that implements motor failure detection?&lt;/p&gt;&#xA;&lt;p&gt;Any suggestion would be very appreciated!&lt;/p&gt;&#xA;" OwnerUserId="27802" LastEditorUserId="27802" LastEditDate="2021-01-23T19:16:36.420" LastActivityDate="2021-01-23T19:16:36.420" Title="Motor failure detection and compensation in quadcopter" Tags="&lt;quadcopter&gt;&lt;motor&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21700" PostTypeId="2" ParentId="21697" CreationDate="2021-01-23T19:10:47.557" Score="4" Body="&lt;p&gt;In fact you can update the filter's state using the input from each sensor separately, you just need to use a different covariance matrix &lt;span class=&quot;math-container&quot;&gt;$\mathbf{R}$&lt;/span&gt; and observation matrix &lt;span class=&quot;math-container&quot;&gt;$\mathbf{H}$&lt;/span&gt; depending on the sensor. This will only affect the &lt;a href=&quot;https://en.wikipedia.org/wiki/Extended_Kalman_filter#Update&quot; rel=&quot;nofollow noreferrer&quot;&gt;update&lt;/a&gt; step — the &lt;a href=&quot;https://en.wikipedia.org/wiki/Extended_Kalman_filter#Predict&quot; rel=&quot;nofollow noreferrer&quot;&gt;prediction&lt;/a&gt; step equations (the ones you referred to) are computed the same way regardless of the reading's source.&lt;/p&gt;&#xA;&lt;p&gt;Years ago I wrote a simple program for this exact scenario of running an EKF on LiDAR and RADAR data, you can find it &lt;a href=&quot;https://github.com/xperroni/kalmon&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; if you'd like to take a look.&lt;/p&gt;&#xA;" OwnerUserId="4310" LastActivityDate="2021-01-23T19:10:47.557" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21703" PostTypeId="1" CreationDate="2021-01-24T19:30:36.127" Score="0" ViewCount="38" Body="&lt;p&gt;So I want to establish a client-server connection between the computer and raspberry pi or controlling raspberry-pi from another computer. I'm using python on my external computer(Sender), so whenever I press any keystroke it must be received by RS-pi and it performs further operations depending on the collected input.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Computer 1&lt;/strong&gt; = Sender&#xA;&lt;strong&gt;Computer 2&lt;/strong&gt; = RS-pi (reciever)&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Both are using python&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Please guide me. how I can achieve this?&lt;/p&gt;&#xA;" OwnerUserId="27824" LastEditorUserId="27824" LastEditDate="2021-01-24T19:57:57.343" LastActivityDate="2021-02-23T20:02:50.253" Title="Can we sync Raspberry Pi to an external computer?" Tags="&lt;raspberry-pi&gt;&lt;wireless&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21704" PostTypeId="2" ParentId="21703" CreationDate="2021-01-24T19:39:53.933" Score="0" Body="&lt;p&gt;Please elaborate on your question. What is the data you trying to sync? How frequently do you want to sync your data?&lt;/p&gt;&#xA;&lt;p&gt;Depending on your need, you can use something as basic as &lt;a href=&quot;https://linux.die.net/man/1/rsync&quot; rel=&quot;nofollow noreferrer&quot;&gt;rsync&lt;/a&gt; (with &lt;a href=&quot;https://linux.die.net/man/1/watch&quot; rel=&quot;nofollow noreferrer&quot;&gt;watch&lt;/a&gt; if you run at a predefined interval) or setup an &lt;a href=&quot;https://www.ubuntupit.com/best-linux-ftp-client-top-10-reviewed-for-linux-geeks/&quot; rel=&quot;nofollow noreferrer&quot;&gt;ftp client&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="27064" LastActivityDate="2021-01-24T19:39:53.933" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21706" PostTypeId="1" AcceptedAnswerId="21714" CreationDate="2021-01-25T19:33:39.940" Score="1" ViewCount="71" Body="&lt;p&gt;I am not a V-SLAM expert yet, but as far as I understand with monocular V-SLAM there is a scale ambiguity introduced by the fact that a camera essentially is an azimuth sensor that maps the 3D world to the 2D world via a projectivity.&lt;/p&gt;&#xA;&lt;p&gt;In particular I was reading/using &lt;a href=&quot;https://github.com/appliedAI-Initiative/orb_slam_2_ros&quot; rel=&quot;nofollow noreferrer&quot;&gt;orb_slam_2_ros&lt;/a&gt; and came across the following:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This is the ROS implementation of the ORB-SLAM2 real-time SLAM library for Monocular, Stereo and RGB-D cameras that computes the camera trajectory and a sparse 3D reconstruction &lt;strong&gt;(in the stereo and RGB-D case with true scale)&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;So my question is, from a practical perspective, if with monocular SLAM you don't have &amp;quot;true scale&amp;quot; then what is the point, what useful information would monocular V-SLAM give to a mobile robot trying to localize in a space?&lt;/p&gt;&#xA;&lt;p&gt;Thanks!&#xA;Cheers&lt;/p&gt;&#xA;" OwnerUserId="27205" LastActivityDate="2021-01-26T19:24:19.483" Title="What is the Point of Monocular SLAM" Tags="&lt;ros&gt;&lt;slam&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21707" PostTypeId="2" ParentId="954" CreationDate="2021-01-25T21:50:09.780" Score="0" Body="&lt;p&gt;You only need to chage the value of:&lt;/p&gt;&#xA;&lt;p&gt;#define SERVOS_PER_TIMER       12     // the maximum number of servos controlled by one timer&lt;/p&gt;&#xA;&lt;p&gt;Change 12 for your value.&lt;/p&gt;&#xA;" OwnerUserId="27830" LastActivityDate="2021-01-25T21:50:09.780" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21708" PostTypeId="1" CreationDate="2021-01-26T05:26:01.337" Score="1" ViewCount="12" Body="&lt;p&gt;I bought an RTK receiver, only one because I wanted to do some testing before I invested in two receivers. I found one I like more, but if I have two different recievers will the accuracy be reduced because the GPS signal is not being processed in the same way.&lt;/p&gt;&#xA;&lt;p&gt;Maybe I misunderstand, because I think of RTK as subtraction. The receivers are getting the same signal and then the fixed one is the error so if they aren't processing the signal in the same way then the subtraction won't work as well.&lt;/p&gt;&#xA;&lt;p&gt;So do I need the same two RTK receivers to get the best results from RTK?&lt;/p&gt;&#xA;" OwnerUserId="27832" LastActivityDate="2021-01-26T05:26:01.337" Title="Do I need the same RTK reciever if I want to implement RTK?" Tags="&lt;gps&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21709" PostTypeId="2" ParentId="954" CreationDate="2021-01-26T11:28:48.607" Score="0" Body="&lt;p&gt;Instead of driving the servos with the Teensy, you could use a &lt;a href=&quot;https://learn.adafruit.com/16-channel-pwm-servo-driver&quot; rel=&quot;nofollow noreferrer&quot;&gt;servo driver&lt;/a&gt;. The one in the link has an I2C servodriver that handles 16 servos and can be &lt;a href=&quot;https://learn.adafruit.com/16-channel-pwm-servo-driver/chaining-drivers&quot; rel=&quot;nofollow noreferrer&quot;&gt;chained together&lt;/a&gt; to address more servos. This will take the load off the microcontroller and leave processing power for other tasks.&lt;/p&gt;&#xA;" OwnerUserId="23524" LastActivityDate="2021-01-26T11:28:48.607" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21710" PostTypeId="5" CreationDate="2021-01-26T12:21:07.567" Score="0" Body="&lt;p&gt;For reference, see &amp;quot;Modern Robotics&amp;quot; by Lynch and Park.&lt;/p&gt;&#xA;" OwnerUserId="37" LastEditorUserId="37" LastEditDate="2021-01-26T12:21:07.567" LastActivityDate="2021-01-26T12:21:07.567" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21711" PostTypeId="4" CreationDate="2021-01-26T12:21:07.567" Score="0" Body="A method of representing the mechanics (kinematics and dynamics) of a system using 6-element vectors (such as a twist or a wrench) which combine both the angular and linear components." OwnerUserId="37" LastEditorUserId="37" LastEditDate="2021-01-26T12:21:07.567" LastActivityDate="2021-01-26T12:21:07.567" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21714" PostTypeId="2" ParentId="21706" CreationDate="2021-01-26T19:24:19.483" Score="4" Body="&lt;p&gt;I would say true scale actually doesn't really matter. A good way to reason about this is actually video games. If you play a racing game(or really any kind of 3D game) do you care that the world has the proper scale? No you don't. If I went in and modified the video game to double the size/scale of all the models you would still be able to play it.&lt;/p&gt;&#xA;&lt;p&gt;So it is possible to setup your system to navigate a world without knowing the true scale. It is what you do when you play a video game. A SLAM map still has a use in this world as it can be used to localize your position/build a map.&lt;/p&gt;&#xA;&lt;p&gt;The reason true scale is used in the real world is that it unifys the units of your other sensors, and devices like motors,encoders,... . E.g. if your motors makes you move 1 m/s you know exactly how it will interact with some other sensor.&lt;/p&gt;&#xA;&lt;p&gt;The are other tasks you can do that also don't require knowing the scale e.g. 3D reconstruction or &lt;em&gt;structure from motion&lt;/em&gt;(computer vision terminology for monocular SLAM). We only care about the quality of the 3D reconstruction. The scale doesn't really matter. This scaleless 3D model can then be used in things like video games, 3D printing, and more which all don't care about the final scale of the model. If you do need true scale, you can also always scale it later to the correct size. E.g I know this object is 1 meter tall so scale the whole scene by the appropriate amount.&lt;/p&gt;&#xA;&lt;p&gt;If you do need scale then another alternative is to is to fuse the monocular SLAM results in a loosely coupled fashion with an IMU or other sensor. So your SLAM algorithm may not be aware of the true scale, but your fused estimator algorithm is. A lot of of visual SLAM work on drones, was implemented this way before tightly coupled implementation became the standard.&lt;/p&gt;&#xA;&lt;p&gt;Finally I would argue the lack of true scale is not the main problem of monocular SLAM algorithms, it is &lt;em&gt;scale drift&lt;/em&gt;. As long as your map has the same consistent scale then everything works out. Problems start to occur when different parts of the map have different scales. This means reasoning in one area doesn't work in another.&lt;/p&gt;&#xA;" OwnerUserId="15265" LastActivityDate="2021-01-26T19:24:19.483" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21715" PostTypeId="1" CreationDate="2021-01-26T22:43:56.493" Score="0" ViewCount="18" Body="&lt;p&gt;I thought I would be clever and use TWO shopping-cart-style casters (more stable) instead of the ONE usual omnidirectional ball caster. Now that I am running it I am almost positive that the kinematics are totally different and in fact very hard to model.&lt;/p&gt;&#xA;&lt;p&gt;Can someone confirm or deny this belief, and give any context (links etc.) so I can dig deeper?&lt;/p&gt;&#xA;" OwnerUserId="17190" LastActivityDate="2021-02-27T02:02:05.123" Title="Differential Drive using shopping cart-style casters" Tags="&lt;differential-drive&gt;&lt;caster&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21717" PostTypeId="1" AcceptedAnswerId="21721" CreationDate="2021-01-27T15:13:45.273" Score="0" ViewCount="28" Body="&lt;p&gt;My questions is the following: How do I find the DH values of a given transformation matrix? Or a set of transformation matrices if one is not enough?&#xA;I can assume that the angle theta is known for each of them and all other DH parameters are the same accross transformation matrices.&lt;/p&gt;&#xA;&lt;p&gt;thank you guys,&#xA;Alex&lt;/p&gt;&#xA;" OwnerUserId="27840" LastActivityDate="2021-02-27T00:07:15.883" Title="Finding the DH parameters from Transformation Matrices" Tags="&lt;dh-parameters&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21718" PostTypeId="1" CreationDate="2021-01-27T16:25:14.350" Score="0" ViewCount="13" Body="&lt;p&gt;My question is that I cannot deduce the relation between phi1, phi2, phi3 values of the omni robot (3 wheeled) and the motor's PWM values, since I'm planning on designing the robot to perform &amp;quot;go to goal&amp;quot; operation, I have the jacobian matrix, from which I will get the phi1, phi2, phi3 values (instantaneous), although for odometry I cannot find anywhere the relation between the angular positions and the PWM values for the quad encoder motor that I'm planning to use. Please reply.&#xA;I have attached paper that I referred to -&#xA;&lt;a href=&quot;http://mate.tue.nl/mate/pdfs/7566.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://mate.tue.nl/mate/pdfs/7566.pdf&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="27258" LastEditorUserId="27258" LastEditDate="2021-01-28T15:20:08.393" LastActivityDate="2021-01-28T15:20:08.393" Title="What is the mathematical relation between phi1, phi2, phi3 and motor PWM values for 3 wheel omni drive robot?" Tags="&lt;mobile-robot&gt;&lt;kinematics&gt;&lt;wheeled-robot&gt;&lt;industrial-robot&gt;&lt;odometry&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21719" PostTypeId="2" ParentId="4766" CreationDate="2021-01-27T18:58:08.687" Score="0" Body="&lt;p&gt;The USB1 host port can deliver 500mA if powered from 5V 2A&lt;/p&gt;&#xA;" OwnerUserId="27842" LastActivityDate="2021-01-27T18:58:08.687" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21721" PostTypeId="2" ParentId="21717" CreationDate="2021-01-27T23:14:43.127" Score="0" Body="&lt;p&gt;Consider the expression at the bottom as the transformation between one system and the next.&lt;/p&gt;&#xA;&lt;p&gt;If you have the numeric values of this transformation (from coordinate system &lt;span class=&quot;math-container&quot;&gt;$i$&lt;/span&gt;, to coordinate system &lt;span class=&quot;math-container&quot;&gt;$i+1$&lt;/span&gt;) you could use the elements of the matrix in equation 3.10 as follows:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$\theta_i = \arctan \left(\frac{A_{2,1}}{A_{1,1}} \right)$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$\alpha_i = \arctan \left(\frac{A_{3,2}}{A_{3,3}} \right)$$&lt;/span&gt;&#xA;Knowing &lt;span class=&quot;math-container&quot;&gt;$\theta_i$&lt;/span&gt;, you can then find &lt;span class=&quot;math-container&quot;&gt;$a_i$&lt;/span&gt; easily as:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$a_i=\frac{A_{1,4}}{\cos(\theta_i)}$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Finally, &lt;span class=&quot;math-container&quot;&gt;$d_i=A_{3,4}$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/6tC1W.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6tC1W.png&quot; alt=&quot;D-H matrix&quot; /&gt;&lt;/a&gt;&#xA;equation taken from &lt;a href=&quot;https://users.cs.duke.edu/%7Ebrd/Teaching/Bio/asmb/current/Papers/chap3-forward-kinematics.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="10183" LastActivityDate="2021-01-27T23:14:43.127" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21722" PostTypeId="2" ParentId="21715" CreationDate="2021-01-28T01:33:33.953" Score="0" Body="&lt;p&gt;You might take a look at this paper dealing with a powered wheelchair, which has two caster wheels.  &lt;a href=&quot;https://hal.inria.fr/hal-02124781/document&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://hal.inria.fr/hal-02124781/document&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="24763" LastActivityDate="2021-01-28T01:33:33.953" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21725" PostTypeId="1" CreationDate="2021-01-28T11:44:20.667" Score="3" ViewCount="81" Body="&lt;p&gt;I am just getting started on understanding Factor Graphs, by going through the excellent guide &lt;a href=&quot;http://www.cs.cmu.edu/%7Ekaess/pub/Dellaert17fnt.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Factor Graph For Robot Perception by Dallaert and Kaess&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;While I am familiar with the SLAM problem, and have a fair understanding of the probability and statistics involved, I fail to understand why a Factor Graph is a better representation compared to a Bayes net.&lt;/p&gt;&#xA;&lt;p&gt;To me, they seem to be the same thing. In the Bayes Net, you visualize functions (factors) by incoming and outgoing edges, while in a factor graph, you represent it by a bridge (node) between nodes. However, the underlying principle is the same, i.e. MAP and MLE, yielding the same computation.&lt;/p&gt;&#xA;&lt;p&gt;Thus, fundamentally, what is the difference between a Bayes Net and a Factor Graph. (I understand what they are, but cannot really seem to point out the difference between them). And consequently, in what way does a Bayes Net fail to capture the SLAM problem, that a Factor Graph can?&lt;/p&gt;&#xA;&lt;p&gt;Any explanation with examples would be appreciated!&lt;/p&gt;&#xA;" OwnerUserId="26640" LastEditorUserId="110" LastEditDate="2021-01-31T14:39:35.303" LastActivityDate="2021-01-31T14:39:35.303" Title="What is the difference between a Bayes Net and a Factor Graph" Tags="&lt;slam&gt;&lt;navigation&gt;&lt;pose&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21726" PostTypeId="1" CreationDate="2021-01-28T16:25:29.487" Score="0" ViewCount="35" Body="&lt;p&gt;I am going through the board's calibration process and it is declaring success. Do I still need to pay attention to how I mount the board, that is, match the x,y,z directions printed on the board?&lt;/p&gt;&#xA;" OwnerUserId="17190" LastActivityDate="2021-01-28T21:31:04.267" Title="Does it matter how I mount an IMU board?" Tags="&lt;imu&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21727" PostTypeId="1" AcceptedAnswerId="21729" CreationDate="2021-01-28T18:13:25.873" Score="1" ViewCount="202" Body="&lt;p&gt;Im currently working with Kalman Filter for position and velocity, one of the important parameters that im using is the heading that the sensor fusion of the imu gives me, but i have seen that the GPS also provides me one heading called course over the ground, so i think that i will put the heading information as a state variable as well and compare both heading to produce a better estimate, but i want to know how the GPS calculate this information and have not found some valuable information, is this angle with reference to magnetic north? Can i compare these two headings? or they are distinct information. The figure below in orange is the course that i get with gps and in blue is the heading with sensor fusion that IMU provides me, i collected this data with a displacement around my building and recorded it into a sd card. With these data, it seems a good idea to fuse them to get a better estimate of the actual heading.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Zi85e.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Zi85e.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Now im working with a linear kalman filter,and keep north, east coordinate and north, east velocity. The IMU BNO085 makes the sensor fusion for me, with this i use the heading to get the north and east velocity, using the velocity that is coming from the GPS rmc sentence. And with the R-P-Y angles i rotate the acceleration from body frame to NED frame. With the Lat lon that is coming from the GPS i get the ned coordinates. Im using the equations below to use as the state transition matrix, where &lt;span class=&quot;math-container&quot;&gt;$N_k$&lt;/span&gt; is the north coordinate, &lt;span class=&quot;math-container&quot;&gt;$E_k$&lt;/span&gt; is the east coordinate, &lt;span class=&quot;math-container&quot;&gt;$Vn_k$&lt;/span&gt; is the north velocity abd &lt;span class=&quot;math-container&quot;&gt;$Ve_k$&lt;/span&gt; is the east velocity:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$N_k = N_{k-1} + Vn_k * dt +\frac{A_e * dt^2}{2}  $&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$Vn_k = Vn_{k-1} + A_n * dt   $&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$E_k =  E_{k-1} + Ve_k * dt +\frac{A_e * dt^2}{2}  $&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$Ve_k = Ve_{k-1} + A_e * dt $&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Since the velocity that is coming from the GPS isn't in north and east coordinate i use the heading to get this information as below:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$V_n = V_{GPS} * cos(heading) $&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$V_e = V_{GPS} * sin(heading) $&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;This velocity goes to measurement vector and its used at update step of kalman filter together with GPS LAT-LON converted to ned coordinate.&lt;/p&gt;&#xA;&lt;p&gt;I have GPS and IMU as the sensors, now im trying to increase the accuracy of the results, so im learning about unscented kalman filter and trying to increase the number of state variables. Any suggestions are welcome.&#xA;Below is the last result i got walking with the device. In red are the gps data and in blue the filter data.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/xsWka.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xsWka.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="27655" LastEditorUserId="4310" LastEditDate="2021-02-01T14:04:28.357" LastActivityDate="2021-02-01T14:04:28.357" Title="GPS Course vs IMU Course" Tags="&lt;kalman-filter&gt;&lt;sensor-fusion&gt;&lt;gps&gt;&lt;orientation&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21728" PostTypeId="2" ParentId="21726" CreationDate="2021-01-28T21:31:04.267" Score="1" Body="&lt;p&gt;Not necessarily, so long you're aware how the IMU's mounting orientation may affect readings.&lt;/p&gt;&#xA;&lt;p&gt;I don't know what IMU model you're using or how, but assuming it integrates a gyroscope and accelerometer, and you're using readings from both to compute roll, pitch and yaw, you must be aware how results will be affected by the device's orientation relative to its host device (e.g. a robot) and the Earth's surface.&lt;/p&gt;&#xA;&lt;p&gt;For example, if you mount the IMU at an angle, this will result in non-zero roll and pitch readings; if it's upside-down, this will reverse the direction of yaw changes. Depending on the intended application, you'll have to account for that in code.&lt;/p&gt;&#xA;&lt;p&gt;In general it's worth the trouble avoiding these complications and just mounting the IMU in a way that agrees with the host device's orientation conventions. However you're free to do otherwise, so long you know what you're doing.&lt;/p&gt;&#xA;" OwnerUserId="4310" LastActivityDate="2021-01-28T21:31:04.267" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21729" PostTypeId="2" ParentId="21727" CreationDate="2021-01-28T22:51:23.353" Score="2" Body="&lt;p&gt;So this probably won't work as course over ground and heading are often 2 different things. Heading is the direction your vehicle is facing, while course over ground is the direction your vehicle is traveling.&lt;/p&gt;&#xA;&lt;p&gt;Imagine a boat facing north, and it is in a drift current flowing east to west. Your heading is north, but your course over ground is west, as the current is moving the boat westward.&lt;/p&gt;&#xA;&lt;p&gt;As for how it is calculated it is simply the difference between a start and end position. So the GPS simply continuously records a start and end position over a time interval(e.g 5 seconds). So simply the vector &lt;span class=&quot;math-container&quot;&gt;$v_{cog}=v_{end}-v_{start}=[x_{end}-x_{start},y_{end}-y_{start}]$&lt;/span&gt;. If it reports an angle rather than a vector then they probably just use arctan2 to convert it.&lt;/p&gt;&#xA;" OwnerUserId="15265" LastActivityDate="2021-01-28T22:51:23.353" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="21730" PostTypeId="1" CreationDate="2021-01-29T01:50:51.137" Score="3" ViewCount="27" Body="&lt;p&gt;Im currently on the hunt for resources / examples / words to use in a search engine in regards to &lt;strong&gt;orienting (aligning, funneling) an object on a conveyor.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I am looking for techniques / utilities used to 'line up' an object on a standard belt conveyor.  Essentially I have objects, boxes of the same size, coming in at some x,y position.  I would like to funnel (either passively with bars or objects, or actively with actuation) objects such that they are lined up in a specific position and orientations (straight at a single x,y position).&lt;/p&gt;&#xA;&lt;p&gt;I have been looking for examples of such funneling however a lot of my queries &lt;code&gt;conveyor object funneling&lt;/code&gt; &lt;code&gt;conveyor object orientation&lt;/code&gt; &lt;code&gt;conveyor object alignment&lt;/code&gt; are not yielding results withing the funneling realm.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/qGT1y.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qGT1y.png&quot; alt=&quot;image of desired behavior where the purple lines represent a funneling system of any degree of sophistication&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Im curious if there are keywords that I am missing in my research to find more examples, papers, vidoes, resources of such a task being completed&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;If such a question is not encouraged in this community or if I am asking at the wrong stack exchange my apologies in advance.&lt;/p&gt;&#xA;" OwnerUserId="27809" LastActivityDate="2021-02-01T22:21:03.180" Title="Looking for resources regarding conveyor object allignment / object orientation" Tags="&lt;orientation&gt;&lt;automation&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21731" PostTypeId="1" CreationDate="2021-01-29T10:46:11.547" Score="0" ViewCount="33" Body="&lt;p&gt;I'm currently working on a mobile robot's indoor localization. On the perception side, I can only rely on a 2D lidar and wheel odometry.&lt;/p&gt;&#xA;&lt;p&gt;I have used these sources as input of different localization's packages such as &lt;a href=&quot;https://github.com/SteveMacenski/slam_toolbox&quot; rel=&quot;nofollow noreferrer&quot;&gt;slam_toolbox&lt;/a&gt;, an icp based package that does scan-to-map matching and a landmark detector.&#xA;They all give interesting outputs but for the landmark detector and the scan-to-map matcher, the results are sporadic.&lt;/p&gt;&#xA;&lt;p&gt;I would like to fuse all the estimated positions into a more reliable one and therefore tried to use &lt;a href=&quot;http://docs.ros.org/en/noetic/api/robot_localization/html/state_estimation_nodes.html#ukf-localization-node&quot; rel=&quot;nofollow noreferrer&quot;&gt;robot_localization's ukf&lt;/a&gt; implementation to do so.&#xA;For those familiar with ros, I am trying to find the tf between odom and map based on the results of all these packages.&lt;/p&gt;&#xA;&lt;p&gt;The problem is, all these results are based on cross-correlated measurements and this might affect the convergence of the filter.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Is it possible to fuse results based on the same input sources ?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;If yes, is ukf a right way to do so ?&lt;/p&gt;&#xA;&lt;p&gt;Otherwise, are there other filters more adapted to this application ?&lt;/p&gt;&#xA;&lt;p&gt;Thank you in advance for your help !&lt;/p&gt;&#xA;" OwnerUserId="27853" LastActivityDate="2021-01-29T10:46:11.547" Title="Fusing cross-correlated measurements for mobile robot's localization using unscented kalman filter (ukf)" Tags="&lt;mobile-robot&gt;&lt;localization&gt;&lt;kalman-filter&gt;&lt;sensor-fusion&gt;&lt;lidar&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21732" PostTypeId="2" ParentId="21727" CreationDate="2021-01-29T16:30:29.773" Score="1" Body="&lt;p&gt;If GPS course heading angle is computed as &lt;a href=&quot;https://robotics.stackexchange.com/users/15265/edwinem&quot;&gt;edwinem&lt;/a&gt; described — that is, as the slope of a line crossing the sensor's current and previous coordinates in &lt;span class=&quot;math-container&quot;&gt;$(x, y)$&lt;/span&gt; notation — and the robot's always headed towards the direction of movement, then IMU heading and GPS heading readings are relative to the same reference frame, and they can be directly fed to the Kalman filter in the update step.&lt;/p&gt;&#xA;&lt;p&gt;Even if course heading doesn't exactly agree with the direction the robot is pointed to, so long it's never completely off, that can still be accounted for in the variance attributed to the measurement.&lt;/p&gt;&#xA;" OwnerUserId="4310" LastActivityDate="2021-01-29T16:30:29.773" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21733" PostTypeId="1" AcceptedAnswerId="21754" CreationDate="2021-01-30T08:22:18.273" Score="0" ViewCount="45" Body="&lt;p&gt;I want to run my bot over a map that has nodes and I am just stuck about how to begin the path planning, I literally searched over the internet and found so many algorithms Like A* , Dijkstra's, etc.&#xA;But after reading that all I am more frustrated, as I am a beginner in this domain.&lt;/p&gt;&#xA;&lt;p&gt;Let me explain what I want to do with the help of Example:-&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Hr5yo.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Hr5yo.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;In the above provide map Node 1 is the start position and the blue highlighted box are the area where bot has to go.&lt;/p&gt;&#xA;&lt;p&gt;From the start position, the bot has to go at node 27 and after he finds node 27 he has to go at node 18 with the shortest part every time.&lt;/p&gt;&#xA;&lt;p&gt;After the bot reaches 18 he again travels to node 26 and returns to node 18.&lt;/p&gt;&#xA;&lt;p&gt;After completing all the runs bot has to come back to node 1.&lt;/p&gt;&#xA;&lt;p&gt;I want to perform the same like this but how to calculate the shortest path and even how to plan the LEFT and RIGHT turning.&lt;/p&gt;&#xA;&lt;p&gt;I can code like the counting of the node and turning according to node number but this doesn't seem fun. Fun is in coding the bot for finding its own way to a particular node.&lt;/p&gt;&#xA;&lt;p&gt;I just need a kickstart to perform this any help from your side is really appreciated.&lt;/p&gt;&#xA;" OwnerUserId="27858" LastEditorUserId="27858" LastEditDate="2021-02-06T18:06:38.913" LastActivityDate="2021-02-06T18:06:38.913" Title="Path planning using nodes" Tags="&lt;algorithm&gt;&lt;path-planning&gt;&lt;line-following&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21735" PostTypeId="1" AcceptedAnswerId="21737" CreationDate="2021-01-30T12:52:12.417" Score="0" ViewCount="14" Body="&lt;p&gt;I'm trying multi-agent simulations using ROSBOT 2.0 by husarion. I'm comfortable with single agent but when it comes to multiple agents I'm able to spawn them and control them independently but the problem comes with Rviz. I'm unable to visualize the robot in Rviz. It spwans upside down, i'm unable to see the camera feed and lidar output but the topics are present in the rostopic list.&lt;/p&gt;&#xA;&lt;p&gt;The below is the launch file which I run.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;launch&amp;gt;&#xA;  &amp;lt;arg name=&amp;quot;world_name&amp;quot; default=&amp;quot;worlds/empty.world&amp;quot;/&amp;gt;&#xA;&#xA;  &amp;lt;include file=&amp;quot;&lt;span class=&quot;math-container&quot;&gt;$(find gazebo_ros)/launch/empty_world.launch&quot;&amp;gt;&#xA;    &amp;lt;arg name=&quot;world_name&quot; value=&quot;$&lt;/span&gt;(arg world_name)&amp;quot;/&amp;gt; &amp;lt;!-- world_name is wrt GAZEBO_RESOURCE_PATH environment variable --&amp;gt;&#xA;    &amp;lt;arg name=&amp;quot;paused&amp;quot; value=&amp;quot;false&amp;quot;/&amp;gt;&#xA;    &amp;lt;arg name=&amp;quot;use_sim_time&amp;quot; value=&amp;quot;true&amp;quot;/&amp;gt;&#xA;    &amp;lt;arg name=&amp;quot;gui&amp;quot; value=&amp;quot;true&amp;quot;/&amp;gt;&#xA;    &amp;lt;arg name=&amp;quot;headless&amp;quot; value=&amp;quot;false&amp;quot;/&amp;gt;&#xA;    &amp;lt;arg name=&amp;quot;debug&amp;quot; value=&amp;quot;true&amp;quot;/&amp;gt;&#xA;    &amp;lt;arg name=&amp;quot;verbose&amp;quot; value=&amp;quot;true&amp;quot;/&amp;gt;&#xA;  &amp;lt;/include&amp;gt;&#xA;  &amp;lt;include file=&amp;quot;$(find rosbot_gazebo)/launch/multi_rosbot.launch&amp;quot;/&amp;gt;&#xA;&#xA;&amp;lt;/launch&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Below is multi_rosbot.launch file.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;launch&amp;gt;&#xA;  &amp;lt;param name=&amp;quot;robot_description&amp;quot; command=&amp;quot;&lt;span class=&quot;math-container&quot;&gt;$(find xacro)/xacro.py '$&lt;/span&gt;(find rosbot_description)/urdf/rosbot.xacro'&amp;quot;/&amp;gt;&#xA;&#xA;  &amp;lt;!-- BEGIN ROBOT 1--&amp;gt;&#xA;  &amp;lt;group ns=&amp;quot;rover1&amp;quot;&amp;gt;&#xA;    &amp;lt;param name=&amp;quot;tf_prefix&amp;quot; value=&amp;quot;rover1&amp;quot; /&amp;gt;&#xA;    &amp;lt;include file=&amp;quot;$(find rosbot_gazebo)/launch/rosbot_empty_world.launch&amp;quot; &amp;gt;&#xA;      &amp;lt;arg name=&amp;quot;init_pose&amp;quot; value=&amp;quot;-x 0 -y 0 -z 0&amp;quot; /&amp;gt;&#xA;      &amp;lt;arg name=&amp;quot;robot_name&amp;quot;  value=&amp;quot;rover1&amp;quot; /&amp;gt;&#xA;    &amp;lt;/include&amp;gt;&#xA;  &amp;lt;/group&amp;gt;&#xA;&#xA;  &amp;lt;!-- BEGIN ROBOT 2--&amp;gt;&#xA;  &amp;lt;group ns=&amp;quot;rover2&amp;quot;&amp;gt;&#xA;    &amp;lt;param name=&amp;quot;tf_prefix&amp;quot; value=&amp;quot;rover2&amp;quot; /&amp;gt;&#xA;    &amp;lt;include file=&amp;quot;$(find rosbot_gazebo)/launch/rosbot_empty_world.launch&amp;quot; &amp;gt;&#xA;      &amp;lt;arg name=&amp;quot;init_pose&amp;quot; value=&amp;quot;-x -2 -y 0 -z 0&amp;quot; /&amp;gt;&#xA;      &amp;lt;arg name=&amp;quot;robot_name&amp;quot;  value=&amp;quot;rover2&amp;quot; /&amp;gt;&#xA;    &amp;lt;/include&amp;gt;&#xA;  &amp;lt;/group&amp;gt;&#xA;&#xA;  &amp;lt;!-- BEGIN ROBOT 3 --&amp;gt;&#xA;  &amp;lt;group ns=&amp;quot;rover3&amp;quot;&amp;gt;&#xA;    &amp;lt;param name=&amp;quot;tf_prefix&amp;quot; value=&amp;quot;rover3&amp;quot; /&amp;gt;&#xA;    &amp;lt;include file=&amp;quot;$(find rosbot_gazebo)/launch/rosbot_empty_world.launch&amp;quot; &amp;gt;&#xA;      &amp;lt;arg name=&amp;quot;init_pose&amp;quot; value=&amp;quot;-x -4 -y 0 -z 0&amp;quot; /&amp;gt;&#xA;      &amp;lt;arg name=&amp;quot;robot_name&amp;quot;  value=&amp;quot;rover3&amp;quot; /&amp;gt;&#xA;    &amp;lt;/include&amp;gt;&#xA;  &amp;lt;/group&amp;gt;&#xA;&amp;lt;/launch&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Below is the rosbot_empty_world.launch&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;launch&amp;gt;&#xA;&#xA;  &amp;lt;arg name=&amp;quot;init_pose&amp;quot;/&amp;gt;&#xA;  &amp;lt;arg name=&amp;quot;robot_name&amp;quot;/&amp;gt;&#xA;  &amp;lt;param name=&amp;quot;robot_description&amp;quot; command=&amp;quot;&lt;span class=&quot;math-container&quot;&gt;$(find xacro)/xacro.py '$&lt;/span&gt;(find rosbot_description)/urdf/rosbot.xacro'&amp;quot;/&amp;gt;&#xA;  &amp;lt;arg name=&amp;quot;model&amp;quot; default=&amp;quot;&lt;span class=&quot;math-container&quot;&gt;$(find xacro)/xacro.py '$&lt;/span&gt;(find rosbot_description)/urdf/rosbot.xacro'&amp;quot;/&amp;gt;&#xA;  &#xA;  &amp;lt;node name=&amp;quot;rosbot_spawn&amp;quot; pkg=&amp;quot;gazebo_ros&amp;quot; type=&amp;quot;spawn_model&amp;quot; ns=&amp;quot;/&lt;span class=&quot;math-container&quot;&gt;$(arg robot_name)&quot;&#xA;        args=&quot;$&lt;/span&gt;(arg init_pose) -unpause -urdf -model $(arg robot_name) -param /robot_description &amp;quot; respawn=&amp;quot;false&amp;quot; output=&amp;quot;screen&amp;quot;/&amp;gt;&#xA;&#xA;  &amp;lt;node pkg=&amp;quot;robot_state_publisher&amp;quot; type=&amp;quot;robot_state_publisher&amp;quot;  name=&amp;quot;robot_state_publisher&amp;quot; ns=&amp;quot;/&lt;span class=&quot;math-container&quot;&gt;$(arg robot_name)&quot; args=&quot;--namespace=/$&lt;/span&gt;(arg robot_name)&amp;quot;&amp;gt;&#xA;    &amp;lt;param name=&amp;quot;publish_frequency&amp;quot; type=&amp;quot;double&amp;quot; value=&amp;quot;30.0&amp;quot; /&amp;gt;&#xA;    &amp;lt;param name=&amp;quot;tf_prefix&amp;quot; value=&amp;quot;/&lt;span class=&quot;math-container&quot;&gt;$(arg robot_name)&quot; type=&quot;str&quot;/&amp;gt;&#xA;  &amp;lt;/node&amp;gt; &#xA;  &amp;lt;rosparam command=&quot;load&quot; file=&quot;$&lt;/span&gt;(find joint_state_controller)/joint_state_controller.yaml&amp;quot; ns=&amp;quot;/$(arg robot_name)&amp;quot;/&amp;gt;&#xA;  &#xA;  &amp;lt;node name=&amp;quot;controller_spawner_&lt;span class=&quot;math-container&quot;&gt;$(arg robot_name)&quot; pkg=&quot;controller_manager&quot; type=&quot;spawner&quot; ns=&quot;/$&lt;/span&gt;(arg robot_name)&amp;quot; &#xA;        respawn=&amp;quot;false&amp;quot; args=&amp;quot; joint_state_controller --namespace=/$(arg robot_name)&amp;quot; output=&amp;quot;screen&amp;quot;/&amp;gt;&#xA;&#xA;&amp;lt;/launch&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I cannot visualize anything in Rviz. Therobot spawns upside down, the camera is blank.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/EKltY.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/EKltY.png&quot; alt=&quot;rviz and gazebo&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Here's the rostopic list output.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;wally1002@wally:~$ rostopic list&#xA;    /clock&#xA;    /gazebo/link_states&#xA;    /gazebo/model_states&#xA;    /gazebo/parameter_descriptions&#xA;    /gazebo/parameter_updates&#xA;    /gazebo/set_link_state&#xA;    /gazebo/set_model_state&#xA;    /rosout&#xA;    /rosout_agg&#xA;    /rover1/camera/depth/camera_info&#xA;    /rover1/camera/depth/image_raw&#xA;    /rover1/camera/depth/points&#xA;    /rover1/camera/parameter_descriptions&#xA;    /rover1/camera/parameter_updates&#xA;    /rover1/camera/rgb/camera_info&#xA;    /rover1/camera/rgb/image_raw&#xA;    /rover1/camera/rgb/image_raw/compressed&#xA;    /rover1/camera/rgb/image_raw/compressed/parameter_descriptions&#xA;    /rover1/camera/rgb/image_raw/compressed/parameter_updates&#xA;    /rover1/camera/rgb/image_raw/compressedDepth&#xA;    /rover1/camera/rgb/image_raw/compressedDepth/parameter_descriptions&#xA;    /rover1/camera/rgb/image_raw/compressedDepth/parameter_updates&#xA;    /rover1/camera/rgb/image_raw/theora&#xA;    /rover1/camera/rgb/image_raw/theora/parameter_descriptions&#xA;    /rover1/camera/rgb/image_raw/theora/parameter_updates&#xA;    /rover1/cmd_vel&#xA;    /rover1/imu&#xA;    /rover1/joint_states&#xA;    /rover1/odom&#xA;    /rover1/range/fl&#xA;    /rover1/range/fr&#xA;    /rover1/range/rl&#xA;    /rover1/range/rr&#xA;    /rover1/scan&#xA;    /rover2/camera/depth/camera_info&#xA;    /rover2/camera/depth/image_raw&#xA;    /rover2/camera/depth/points&#xA;    /rover2/camera/parameter_descriptions&#xA;    /rover2/camera/parameter_updates&#xA;    /rover2/camera/rgb/camera_info&#xA;    /rover2/camera/rgb/image_raw&#xA;    /rover2/camera/rgb/image_raw/compressed&#xA;    /rover2/camera/rgb/image_raw/compressed/parameter_descriptions&#xA;    /rover2/camera/rgb/image_raw/compressed/parameter_updates&#xA;    /rover2/camera/rgb/image_raw/compressedDepth&#xA;    /rover2/camera/rgb/image_raw/compressedDepth/parameter_descriptions&#xA;    /rover2/camera/rgb/image_raw/compressedDepth/parameter_updates&#xA;    /rover2/camera/rgb/image_raw/theora&#xA;    /rover2/camera/rgb/image_raw/theora/parameter_descriptions&#xA;    /rover2/camera/rgb/image_raw/theora/parameter_updates&#xA;    /rover2/cmd_vel&#xA;    /rover2/imu&#xA;    /rover2/joint_states&#xA;    /rover2/odom&#xA;    /rover2/range/fl&#xA;    /rover2/range/fr&#xA;    /rover2/range/rl&#xA;    /rover2/range/rr&#xA;    /rover2/scan&#xA;    /rover3/camera/depth/camera_info&#xA;    /rover3/camera/depth/image_raw&#xA;    /rover3/camera/depth/points&#xA;    /rover3/camera/parameter_descriptions&#xA;    /rover3/camera/parameter_updates&#xA;    /rover3/camera/rgb/camera_info&#xA;    /rover3/camera/rgb/image_raw&#xA;    /rover3/camera/rgb/image_raw/compressed&#xA;    /rover3/camera/rgb/image_raw/compressed/parameter_descriptions&#xA;    /rover3/camera/rgb/image_raw/compressed/parameter_updates&#xA;    /rover3/camera/rgb/image_raw/compressedDepth&#xA;    /rover3/camera/rgb/image_raw/compressedDepth/parameter_descriptions&#xA;    /rover3/camera/rgb/image_raw/compressedDepth/parameter_updates&#xA;    /rover3/camera/rgb/image_raw/theora&#xA;    /rover3/camera/rgb/image_raw/theora/parameter_descriptions&#xA;    /rover3/camera/rgb/image_raw/theora/parameter_updates&#xA;    /rover3/cmd_vel&#xA;    /rover3/imu&#xA;    /rover3/joint_states&#xA;    /rover3/odom&#xA;    /rover3/range/fl&#xA;    /rover3/range/fr&#xA;    /rover3/range/rl&#xA;    /rover3/range/rr&#xA;    /rover3/scan&#xA;    /tf&#xA;    /tf_static&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I'm unable to solve this. Any help is appreciated. Thank You.&lt;/p&gt;&#xA;" OwnerUserId="27234" LastActivityDate="2021-02-01T11:37:24.630" Title="Multi-Agent simulation causing trouble in Rviz" Tags="&lt;ros&gt;&lt;rviz&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21737" PostTypeId="2" ParentId="21735" CreationDate="2021-02-01T11:37:24.630" Score="0" Body="&lt;p&gt;I have managed to solve the problem.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;It was a problem of Fixed Frame used in the visualization&lt;/li&gt;&#xA;&lt;li&gt;tf_prefix was not used correctly.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;You can look at this &lt;a href=&quot;https://answers.ros.org/question/370651/multi-agent-simulation-causing-trouble-in-rviz/&quot; rel=&quot;nofollow noreferrer&quot;&gt;answer&lt;/a&gt; for more details. Thanks to anyone who tried.&lt;/p&gt;&#xA;" OwnerUserId="27234" LastActivityDate="2021-02-01T11:37:24.630" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21738" PostTypeId="1" CreationDate="2021-02-01T15:11:41.180" Score="0" ViewCount="23" Body="&lt;p&gt;When I put my shaft through the vehicle body (small robot) and have the motor attached to it through two rotating gears, the shaft isn’t rotating?&lt;/p&gt;&#xA;&lt;p&gt;I think it’s due to how the hole diameter is the same as the shaft diameter? Do I need to put a component in between the hole and shaft to allow rotation please?&lt;/p&gt;&#xA;&lt;p&gt;Thank you&lt;/p&gt;&#xA;" OwnerUserId="27861" LastActivityDate="2021-02-01T15:11:41.180" Title="Why isn’t my shaft moving?" Tags="&lt;motor&gt;&lt;wheeled-robot&gt;&lt;mechanism&gt;&lt;motion&gt;&lt;gearing&gt;" AnswerCount="0" CommentCount="3" ClosedDate="2021-02-04T12:47:42.303" ContentLicense="CC BY-SA 4.0" />
  <row Id="21739" PostTypeId="1" AcceptedAnswerId="21740" CreationDate="2021-02-01T16:40:55.933" Score="2" ViewCount="57" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Hello! :) What I have here is a gear system I need to simulate using&#xA;MATLAB and Simulink.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/UXUKe.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;To do that, firstly I need to get the differential equation for this&#xA;rotation (gear) system. I &lt;strong&gt;think&lt;/strong&gt; I managed to do so and it is as&#xA;follows &lt;code&gt;iT1 = J * theta2''+D * theta2'+K * theta2&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;, where &lt;code&gt;J = i^2 * Jn1 + Jn2 + J2&lt;/code&gt; (also, i is the gear ratio; &lt;code&gt;i = theta1/theta2 = N2/N1 = Tn2 / Tn1 = T2/T1&lt;/code&gt;).&lt;/p&gt;&#xA;&lt;p&gt;Now I need to solve this second-order differential equation using&#xA;ode23 in MATLAB. The problem is, I don't know any initial conditions,&#xA;nor do I know how to get them from this particular system e.g. &lt;code&gt;y(0) = 0, y'(0) = 1&lt;/code&gt; Can I still solve this particular problem without the&#xA;initial conditions, or do I make the initial conditions up...? In case&#xA;anyone needs it the parameters of my problem are as follows:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;N2 = 90, N1 = 36, Jn1 = 0.5 Nms^2/rad, Jn2 = 0.8 Nms^2/rad, J2 = 2 Nms^2/rad, D = 8 Nms/rad, K = 5 Nm/rad&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;The differential equation should look like this for &lt;code&gt;y=theta2&lt;/code&gt; and&#xA;&lt;code&gt;x=T1&lt;/code&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;y''+1.3502y'+0.8439y = 0.4219x&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Any help would be really appreciated! :)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="27875" LastEditorUserId="19143" LastEditDate="2021-02-03T14:50:48.580" LastActivityDate="2021-02-03T14:50:48.580" Title="How to solve this differential equation using ode23?" Tags="&lt;matlab&gt;&lt;gearing&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21740" PostTypeId="2" ParentId="21739" CreationDate="2021-02-01T21:38:21.203" Score="0" Body="&lt;p&gt;You can certainly employ &lt;code&gt;ode23&lt;/code&gt; to solve this ordinary differential equation, but it's much simpler if you recruit the state space approach via &lt;a href=&quot;https://www.mathworks.com/help/control/ref/ss.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;ss&lt;/code&gt;&lt;/a&gt; and then &lt;a href=&quot;https://www.mathworks.com/help/control/ref/lti.lsim.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;lsim&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The response of a linear system is always the aggregate of its forced (with a null initial state) and unforced evolutions (with &lt;span class=&quot;math-container&quot;&gt;$T_1=0$&lt;/span&gt; and a given initial state &lt;span class=&quot;math-container&quot;&gt;$\mathbf{x}_0$&lt;/span&gt;).&lt;/p&gt;&#xA;&lt;p&gt;The unforced evolution can be determined by means of &lt;a href=&quot;https://www.mathworks.com/help/control/ref/initial.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;code&gt;initial&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;So, to answer your direct question, the initial conditions (read the initial state) are crucial as they establish part of the transient response of the system.&lt;/p&gt;&#xA;&lt;pre class=&quot;lang-matlab prettyprint-override&quot;&gt;&lt;code&gt;% parameters&#xA;N2  = 90;&#xA;N1  = 36;&#xA;Jn1 = 0.5;&#xA;Jn2 = 0.8;&#xA;J2  = 2;&#xA;D   = 8;&#xA;K   = 5;&#xA;J   = (N2/N1)^2 * Jn1 + Jn2 + J2;&#xA;&#xA;% define the system&#xA;sys = ss([0 1; -K/J -D/J], [0; N2/(N1*J)], [1 0], 0);&#xA;&#xA;% initial state: (position, velocity) [rad; rad/s]&#xA;x0 = [0.1; 0];&#xA;&#xA;% define the time span&#xA;t = linspace(0, 15, 10000)';&#xA;&#xA;% define the input step&#xA;T1 = zeros(length(t), 1);&#xA;T1(t&amp;gt;=1) = 1;&#xA;&#xA;% compute the system step response at once&#xA;theta1 = lsim(sys, T1, t, x0);&#xA;&#xA;% compute the system response as aggregate of the forced and unforced&#xA;% temporal evolutions&#xA;theta2 = lsim(sys, T1, t, [0; 0]) + initial(sys, x0, t);&#xA;&#xA;% plot results&#xA;figure('color', 'white');&#xA;hold on;&#xA;yyaxis left;&#xA;plot(t, T1, '-.', 'linewidth', 2);&#xA;ylabel('[N]');&#xA;yyaxis right;&#xA;plot(t, theta1, 'linewidth', 3);&#xA;plot(t, theta2, 'k--');&#xA;xlabel('t [s]');&#xA;ylabel('[rad]');&#xA;grid minor;&#xA;legend({'&lt;span class=&quot;math-container&quot;&gt;$T_1$&lt;/span&gt;', '&lt;span class=&quot;math-container&quot;&gt;$\theta_1$&lt;/span&gt;', '&lt;span class=&quot;math-container&quot;&gt;$\theta_2$&lt;/span&gt;'}, 'Interpreter', 'latex',...&#xA;       'location', 'southeast');&#xA;hold off;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Here's the resulting plot:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/gdUJ4.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/gdUJ4.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;If you really want to use &lt;code&gt;ode23&lt;/code&gt;, then you can run the following snippet:&lt;/p&gt;&#xA;&lt;pre class=&quot;lang-matlab prettyprint-override&quot;&gt;&lt;code&gt;% initial state: (position, velocity) [rad; rad/s]&#xA;x0 = [0.1; 0];&#xA;&#xA;% define the time span&#xA;t = linspace(0, 15, 10000)';&#xA;&#xA;% integrate the differential equation&#xA;[t, x] = ode23(@fun, t, x0);&#xA;&#xA;% plot results&#xA;figure('color', 'white');&#xA;plot(t, x(:, 1));&#xA;xlabel('t [s]');&#xA;ylabel('[rad]');&#xA;grid minor;&#xA;legend({'&lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt;'}, 'Interpreter', 'latex', 'location', 'southeast');&#xA;&#xA;&#xA;function g = fun(t, x)&#xA;% parameters&#xA;N2  = 90;&#xA;N1  = 36;&#xA;Jn1 = 0.5;&#xA;Jn2 = 0.8;&#xA;J2  = 2;&#xA;D   = 8;&#xA;K   = 5;&#xA;J   = (N2/N1)^2 * Jn1 + Jn2 + J2;&#xA;&#xA;% compute gradient&#xA;g = zeros(2, 1);&#xA;g(1) = x(2);&#xA;g(2) = (-K/J)*x(1) + (-D/J)*x(2) + (N2/(N1*J)*(t&amp;gt;=1));&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;yielding the graph below:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/5qdqv.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/5qdqv.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Finally, if you aim to integrate a generic input as a function of time &lt;span class=&quot;math-container&quot;&gt;$t$&lt;/span&gt;, you could resort to the code below:&lt;/p&gt;&#xA;&lt;pre class=&quot;lang-matlab prettyprint-override&quot;&gt;&lt;code&gt;function x = integrate(t, u, x0)&#xA;    % parameters&#xA;    N2  = 90;&#xA;    N1  = 36;&#xA;    Jn1 = 0.5;&#xA;    Jn2 = 0.8;&#xA;    J2  = 2;&#xA;    D   = 8;&#xA;    K   = 5;&#xA;    J   = (N2/N1)^2 * Jn1 + Jn2 + J2;&#xA;&#xA;    % integrate the differential equation&#xA;    [t, x] = ode23(@fun, t, x0);&#xA;&#xA;    % plot results&#xA;    figure('color', 'white');&#xA;    &#xA;    % plot position&#xA;    yyaxis left;&#xA;    plot(t, x(:, 1));&#xA;    ylabel('&lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; [rad]', 'Interpreter', 'latex');&#xA;    &#xA;    % plot velocity&#xA;    yyaxis right;&#xA;    plot(t, x(:, 2));&#xA;    ylabel('&lt;span class=&quot;math-container&quot;&gt;$\dot{x}$&lt;/span&gt; [rad/s]', 'Interpreter', 'latex');&#xA;    &#xA;    grid minor;&#xA;    xlabel('&lt;span class=&quot;math-container&quot;&gt;$t$&lt;/span&gt; [s]', 'Interpreter', 'latex');&#xA;&#xA;    function g = fun(t, x)&#xA;        g = zeros(2, 1);&#xA;        g(1) = x(2);&#xA;        g(2) = (-K/J)*x(1) + (-D/J)*x(2) + (N2/(N1*J)*u(t));&#xA;    end&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;You can now employ &lt;a href=&quot;https://www.mathworks.com/help/matlab/matlab_prog/anonymous-functions.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;anonymous functions&lt;/a&gt; to specify the temporal evolution of the input. For example, if the input is sinusoidal with pulse frequency &lt;span class=&quot;math-container&quot;&gt;$\omega = 0.5 \; \text{rad/s}$&lt;/span&gt;, you'll need to run:&lt;/p&gt;&#xA;&lt;pre class=&quot;lang-matlab prettyprint-override&quot;&gt;&lt;code&gt;t = linspace(0, 15, 10000)';&#xA;x0 = [0.1; 0];&#xA;integrate(t, @(t)(sin(0.5*t)), x0);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;to get:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/jlSJ8.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/jlSJ8.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2021-02-03T07:23:40.243" LastActivityDate="2021-02-03T07:23:40.243" CommentCount="11" ContentLicense="CC BY-SA 4.0" />
  <row Id="21741" PostTypeId="2" ParentId="21730" CreationDate="2021-02-01T22:21:03.180" Score="1" Body="&lt;p&gt;The best option will be to use &lt;a href=&quot;https://scholar.google.com/scholar?q=conveyor+orienting+items&quot; rel=&quot;nofollow noreferrer&quot;&gt;Google Scholar(direct link)&lt;/a&gt;  about item orientation on conveyer belts.&lt;/p&gt;&#xA;&lt;h1&gt;General TIP&lt;/h1&gt;&#xA;&lt;p&gt;If &amp;quot;normal&amp;quot; Google doesn't return your results, try it via scholar.google.com&lt;/p&gt;&#xA;" OwnerUserId="27125" LastActivityDate="2021-02-01T22:21:03.180" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21742" PostTypeId="1" CreationDate="2021-02-02T16:04:29.103" Score="1" ViewCount="41" Body="&lt;p&gt;I'm working on a project where  a  robot  needs  to keep  a  ball  at  a  desired  position  on  a  gutter.  The  gutter  is fixed  at  one  end  and  held  at  the  other  end  by  the  robot’s effector  which  therefore  decides  of  its  orientation  and,  as a consequence,  of  the  position  of  the  ball. The robot's effector can move up or down vertically. The robot's controller is deep learning based and was trained in simulation.&lt;/p&gt;&#xA;&lt;p&gt;Once trained, I deployed it on the physical robot to perform the task on the real world. The position of the ball and velocity of the ball are both needed by the controller. The ball position is obtained through visual tracking with a low quality webcam which means that the observations are noisy. The velocity is obtained by computing the difference in ball position between two timesteps (~0.1s). However, noise in the ball position produce large error in the velocity computation. Even if the controller is performing ok with noisy observations, I'd like to improve it. So I started looking into the Kalman filter.&lt;/p&gt;&#xA;&lt;p&gt;My state is composed of the ball position (1d) and velocity (1d), however I'm measuring the ball position only with the camera. My state model looks like this :&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\binom{x_k}{v_k} =A\binom{x_{k-1}}{v_{k-1}}+B.U&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;with&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\begin{cases}&#xA;A = \begin{bmatrix}&#xA;1&amp;amp;dt\\&#xA;0&amp;amp;1\end{bmatrix} \\&#xA;B=\binom{0.5dt^2}{dt} \\&#xA;U=a \\&#xA;dt=0.1 \\ &#xA;\end{cases}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;For the command &lt;span class=&quot;math-container&quot;&gt;$U$&lt;/span&gt;, I considered 4 cases (depending on of the direction of the ball and the orientation of the gutter) and derived the acceleration for each :&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/HBpP4.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HBpP4.png&quot; alt=&quot;manip&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$u$&lt;/span&gt; is the effector height (which is controlled) below or above the equilibrium position of the gutter and &lt;span class=&quot;math-container&quot;&gt;$\mu = 0.06$&lt;/span&gt; is the friction coefficient plastic/plastic (both ball and gutter are in plastic) that I found to be given the most realistic behavior (see figure below). In code I'm checking, the sign of &lt;span class=&quot;math-container&quot;&gt;$v$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt; to know which equation to use. I recorded a trajectory of the robot performing the task to validate the model (prediction step). However, the model doesn't seems to be very accurate :&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ySb3Z.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ySb3Z.png&quot; alt=&quot;predict&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The predicted ball position doesn't fit the true (measured) position at all. However the predicted speed is smoother than the naively computed one (measured). So my first question is : Is something wrong with my prediction step ? Even when adding air friction the predicted ball trajectory is still very wrong. Is the Kalman filter still able to work with such an inaccurate model ?&lt;/p&gt;&#xA;" OwnerUserId="27885" LastEditorUserId="9720" LastEditDate="2021-02-02T17:46:17.847" LastActivityDate="2021-02-02T17:46:17.847" Title="Kalman filter for visual tracking of a ball sliding on a gutter" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;kalman-filter&gt;&lt;filter&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="21743" PostTypeId="1" AcceptedAnswerId="21748" CreationDate="2021-02-03T00:27:16.037" Score="0" ViewCount="26" Body="&lt;p&gt;I wish to simulate the output of a certain gear system I have. How the gear system looks isn't particularly important to the problem, I managed to get the differential equation needed from the mechanical system. Here is the code I have (big thanks to the person who helped me with this)&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;% parameters&#xA;N2  = 90;&#xA;N1  = 36;&#xA;Jn1 = 0.5;&#xA;Jn2 = 0.8;&#xA;J2  = 2;&#xA;D   = 8;&#xA;K   = 5;&#xA;J   = (N2/N1)^2 * Jn1 + Jn2 + J2;&#xA;&#xA;% define the system&#xA;sys = ss([0 1; -K/J -D/J], [0; N2/(N1*J)], [1 0], 0);&#xA;&#xA;% initial state: (position, velocity) [rad; rad/s]&#xA;x0 = [0; 0];&#xA;&#xA;% define the time span&#xA;t = linspace(0, 15, 10000)';&#xA;&#xA;% define the input step&#xA;T1 = zeros(length(t), 1);&#xA;T1(t&amp;gt;=0) = 1;&#xA;&#xA;% compute the system step response at once&#xA;theta1 = lsim(sys, T1, t, x0);&#xA;&#xA;% compute the system response as aggregate of the forced and unforced&#xA;% temporal evolutions&#xA;theta2 = lsim(sys, T1, t, [0; 0]) + initial(sys, x0, t);&#xA;&#xA;% plot results&#xA;figure('color', 'white');&#xA;hold on;&#xA;yyaxis left;&#xA;plot(t, T1, '-.', 'linewidth', 2);&#xA;ylabel('[N]');&#xA;yyaxis right;&#xA;plot(t, theta1, 'linewidth', 3);&#xA;plot(t, theta2, 'k--');&#xA;xlabel('t [s]');&#xA;ylabel('[rad]');&#xA;grid minor;&#xA;legend({'&lt;span class=&quot;math-container&quot;&gt;$T_1$&lt;/span&gt;', '&lt;span class=&quot;math-container&quot;&gt;$\theta_1$&lt;/span&gt;', '&lt;span class=&quot;math-container&quot;&gt;$\theta_2$&lt;/span&gt;'}, 'Interpreter', 'latex',...&#xA;       'location', 'southeast');&#xA;hold off;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This should work in generating a graph that shows the positions, my outputs, for a Heaviside/step input. My question is, how would I do this for a sine wave input. I figure I should have &lt;code&gt;sin(w*t)&lt;/code&gt; instead of &lt;code&gt;(t&amp;gt;=0)&lt;/code&gt;, where w is my pulse frequency. Still, I can't seem to make this work. Any help would be really appreciated! :)&lt;/p&gt;&#xA;" OwnerUserId="27875" LastActivityDate="2021-02-03T13:50:40.810" Title="How to simulate a system output with a sine wave input?" Tags="&lt;control&gt;&lt;matlab&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="21744" PostTypeId="2" ParentId="19905" CreationDate="2021-02-03T02:44:06.903" Score="1" Body="&lt;p&gt;Sounds like it could also be voltage sag in the power source that powers the servos.&lt;/p&gt;&#xA;&lt;p&gt;Check the servo specs for the peak instantaneous current they draw under load, and multiply by 6 (or whatever concurrency you need).&lt;/p&gt;&#xA;&lt;p&gt;If your power source can't robustly supply that total demand, its voltage will sag and the servos will operate slowly (at best), erratically (at worst), or not at all.  Depending on the speed of the transients, an ordinary voltmeter might not be fast enough to measure the dropoff reliably.&lt;/p&gt;&#xA;" OwnerUserId="27618" LastActivityDate="2021-02-03T02:44:06.903" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21745" PostTypeId="1" AcceptedAnswerId="21750" CreationDate="2021-02-03T04:57:18.220" Score="1" ViewCount="36" Body="&lt;p&gt;I'm watching a MOOC about &lt;a href=&quot;https://www.coursera.org/lecture/visual-perception-self-driving-cars/lesson-5-visual-odometry-Zq8NO&quot; rel=&quot;nofollow noreferrer&quot;&gt;Machine Vision for Robotics&lt;/a&gt;, but I really do not know the meaning of some vocabulary of this domain.&lt;/p&gt;&#xA;&lt;p&gt;For example, What does the professor mean when he says this:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;However, we usually cannot estimate the &lt;strong&gt;absolute scale&lt;/strong&gt; from a single&#xA;camera. What this means is that estimation of motion produced from one&#xA;camera can be &lt;strong&gt;stretched&lt;/strong&gt; or &lt;strong&gt;compressed&lt;/strong&gt; in the 3D world without&#xA;affecting the pixel feature locations by adjusting the &lt;strong&gt;relative&lt;/strong&gt; motion&#xA;estimate between the two images.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;1- What does the &lt;strong&gt;absolute scale&lt;/strong&gt; mean? In this context, &lt;strong&gt;scale&lt;/strong&gt; refers to what property related to an image?&lt;/p&gt;&#xA;&lt;p&gt;2- What is the meaning of the statement &lt;strong&gt;stretching and compressing the estimation of motion in the 3D world&lt;/strong&gt;?&lt;/p&gt;&#xA;&lt;p&gt;3- What does a &lt;strong&gt;scaled trajectory&lt;/strong&gt; mean?&lt;/p&gt;&#xA;" OwnerUserId="16865" LastEditorUserId="16865" LastEditDate="2021-02-03T05:12:19.870" LastActivityDate="2021-02-04T02:20:32.907" Title="Visual Odometry terminology: Scale, Relative scale, absolute scale" Tags="&lt;computer-vision&gt;&lt;cameras&gt;&lt;visual-odometry&gt;&lt;estimation&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21746" PostTypeId="2" ParentId="628" CreationDate="2021-02-03T06:49:36.680" Score="0" Body="&lt;p&gt;This question is probably old but here's my code to attempt to answer this question:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://codereview.stackexchange.com/questions/255545/implement-an-algorithm-for-a-room-cleaning-robot&quot;&gt;https://codereview.stackexchange.com/questions/255545/implement-an-algorithm-for-a-room-cleaning-robot&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="27887" LastActivityDate="2021-02-03T06:49:36.680" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21747" PostTypeId="1" CreationDate="2021-02-03T12:33:00.443" Score="0" ViewCount="41" Body="&lt;p&gt;I'm trying to develop an understanding of the control law for longitudinal and lateral control for self driving cars. While doing so, I came across the kinematic bicycle model which is used to derive relations for these.&lt;/p&gt;&#xA;&lt;p&gt;While studying about path tracking, the curvature was defined as&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$k(s)$&lt;/span&gt; = &lt;span class=&quot;math-container&quot;&gt;$e_{ra}$&lt;/span&gt;*&lt;span class=&quot;math-container&quot;&gt;$\theta_p(s)$&lt;/span&gt;/&lt;span class=&quot;math-container&quot;&gt;$ds$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Where &lt;span class=&quot;math-container&quot;&gt;$k(s)$&lt;/span&gt;: Curvature; &lt;span class=&quot;math-container&quot;&gt;$e_{ra}$&lt;/span&gt;: Orthagonal distance between rear axle centre and path; &lt;span class=&quot;math-container&quot;&gt;$\theta_p(s)$&lt;/span&gt;: Angle between path tangent and global x at point s&lt;/p&gt;&#xA;&lt;p&gt;I'm attaching a picture for reference below&#xA;&lt;a href=&quot;https://i.stack.imgur.com/yYVUk.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/yYVUk.png&quot; alt=&quot;kinematic bicycle model in path coordinates&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I have a few doubts on this,&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I'm unable to understand how the curvature formula was derived&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Furthermore, two more relations were given for &lt;span class=&quot;math-container&quot;&gt;$s_{dot}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\theta_{dot}$&lt;/span&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/lr6fM.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/lr6fM.png&quot; alt=&quot;s_dot,theta_dot&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I'm unable to understand how these relations were derived, I've been sitting on this for a long time, I sincerely can use some help. Thank you so much for taking the time to read and help with this :)&lt;/p&gt;&#xA;" OwnerUserId="27889" LastActivityDate="2021-02-03T12:33:00.443" Title="Path curvature in kinematic bicycle model" Tags="&lt;control&gt;&lt;kinematics&gt;&lt;dynamics&gt;&lt;autonomous-car&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21748" PostTypeId="2" ParentId="21743" CreationDate="2021-02-03T13:41:34.580" Score="0" Body="&lt;p&gt;Marx, you already asked me this and I've provided the answer to that in the bottom line of &lt;a href=&quot;https://robotics.stackexchange.com/a/21740/6941&quot;&gt;https://robotics.stackexchange.com/a/21740/6941&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Let me recall the function here as well:&lt;/p&gt;&#xA;&lt;pre class=&quot;lang-matlab prettyprint-override&quot;&gt;&lt;code&gt;function x = integrate(t, u, x0)&#xA;    % parameters&#xA;    N2  = 90;&#xA;    N1  = 36;&#xA;    Jn1 = 0.5;&#xA;    Jn2 = 0.8;&#xA;    J2  = 2;&#xA;    D   = 8;&#xA;    K   = 5;&#xA;    J   = (N2/N1)^2 * Jn1 + Jn2 + J2;&#xA;&#xA;    % integrate the differential equation&#xA;    [t, x] = ode23(@fun, t, x0);&#xA;&#xA;    % plot results&#xA;    figure('color', 'white');&#xA;    &#xA;    % plot position&#xA;    yyaxis left;&#xA;    plot(t, x(:, 1));&#xA;    ylabel('&lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; [rad]', 'Interpreter', 'latex');&#xA;    &#xA;    % plot velocity&#xA;    yyaxis right;&#xA;    plot(t, x(:, 2));&#xA;    ylabel('&lt;span class=&quot;math-container&quot;&gt;$\dot{x}$&lt;/span&gt; [rad/s]', 'Interpreter', 'latex');&#xA;    &#xA;    grid minor;&#xA;    xlabel('&lt;span class=&quot;math-container&quot;&gt;$t$&lt;/span&gt; [s]', 'Interpreter', 'latex');&#xA;&#xA;    function g = fun(t, x)&#xA;        g = zeros(2, 1);&#xA;        g(1) = x(2);&#xA;        g(2) = (-K/J)*x(1) + (-D/J)*x(2) + (N2/(N1*J)*u(t));&#xA;    end&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Example call:&lt;/p&gt;&#xA;&lt;pre class=&quot;lang-matlab prettyprint-override&quot;&gt;&lt;code&gt;t = linspace(0, 15, 10000)';&#xA;x0 = [0.1; 0];&#xA;x = integrate(t, @(t)(sin(0.5*t)), x0);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2021-02-03T13:50:40.810" LastActivityDate="2021-02-03T13:50:40.810" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="21750" PostTypeId="2" ParentId="21745" CreationDate="2021-02-03T22:53:20.203" Score="2" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;What does the absolute scale mean? In this context, scale refers to&#xA;what property related to an image?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Essentially scale refers to the size of the object/scene that the camera sees.&#xA;As a projective sensor the camera can't know the depth/size of the object it is viewing. Look at the below image. While we might know that the big and small boxes are different sizes the camera/image can't tell the difference.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/kUdWD.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kUdWD.png&quot; alt=&quot;Example of different sized objects projecting to same result.&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The same reason is why people are always doing the &lt;a href=&quot;https://www.google.com/search?q=leaning%20tower%20of%20pisa%20person&amp;amp;tbm=isch&amp;amp;ved=2ahUKEwjwotKO4s7uAhXIq1kKHZ--DrwQ2-cCegQIABAA&amp;amp;oq=leaning%20tower%20of%20pisa%20person&amp;amp;gs_lcp=CgNpbWcQAzIGCAAQCBAeMgYIABAIEB46BAgAEEM6AggAOgYIABAFEB46BAgAEBg6BQgAELEDUO9eWOlyYLJ0aAFwAHgAgAHDAYgBlgeSAQQxMC4xmAEAoAEBqgELZ3dzLXdpei1pbWfAAQE&amp;amp;sclient=img&amp;amp;ei=_CMbYPC0AsjX5gKf_brgCw&amp;amp;bih=1341&amp;amp;biw=2488&quot; rel=&quot;nofollow noreferrer&quot;&gt;optical illusion of holding up the leaning tower of pisa&lt;/a&gt;. A purely projective sensor can't tell the actual size of the object.&lt;/p&gt;&#xA;&lt;p&gt;Note that the actual equation for using scale is typically something like this.&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$size_{true} = scale_{absolute} * size$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;In your case &lt;em&gt;absolute scale&lt;/em&gt; is just the true size/ or the scalar multiple needed to get the true size of the object.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;2- What is the meaning of the statement stretching and compressing the&#xA;estimation of motion in the 3D world?&lt;/p&gt;&#xA;&lt;p&gt;3- What does a scaled trajectory mean?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;These can be answered with the same example.&lt;/p&gt;&#xA;&lt;p&gt;In the image below you have 3 cases of the robot trajectory generated from a monocular visual odometry algorithm. In reality they are just stretched(bigger) or compressed(smaller) versions of the same trajectory. This is because we can't tell the size of the world. These trajectories would be equally valid for a robot the size of an ant, or one as large as a truck.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/bZVDL.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/bZVDL.png&quot; alt=&quot;Examples of robot trajectory stretched and compressed&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;A &lt;em&gt;scaled trajectory&lt;/em&gt; generally means a trajectory that is scaled to the correct size. Generally used for evaluation purposes. As we want to compare our visual odometry algorithm against something like GPS poses.&lt;/p&gt;&#xA;" OwnerUserId="15265" LastEditorUserId="15265" LastEditDate="2021-02-04T02:20:32.907" LastActivityDate="2021-02-04T02:20:32.907" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21751" PostTypeId="2" ParentId="18787" CreationDate="2021-02-03T22:54:39.267" Score="0" Body="&lt;p&gt;In answer to your question the results do appear to be in degrees and unless you’ve entered a declination value then the results should point to magnetic north. If you’ve entered a declination offset for your local area then the magnetometer should point to true north.&lt;/p&gt;&#xA;&lt;p&gt;In answer to your other question a magnetometer will be distorted by its local environment so if you have any local magnetic disturbances which dominate the earths magnetic field then this will distort the results and the magnetometer will point to this local source. If however the magnitude of the local disturbances are less than the earths magnetic field then there net effect will be to distort the results. These type of effects can be removed by calibrating for what are called hard iron (bias values) and soft iron (scaling values) which should account for the local distortions and ensure the magnetometer operates correctly (providing its local environment doesn’t change).  To calibrate the magnetometer, data needs to be recorded whilst rotating the magnetometer (and the platform to which it’s attached) so that the collected data looks like an ellipse (data from all orientations). The collected data then needs to be transformed to a unit sphere. Various algorithms exist for performing this transformation to a unit sphere but a typical approach is a &lt;a href=&quot;https://uk.mathworks.com/matlabcentral/fileexchange/23398-magnetometers-calibration&quot; rel=&quot;nofollow noreferrer&quot;&gt;least squares&lt;/a&gt; estimation.&lt;/p&gt;&#xA;" OwnerUserId="21594" LastEditorUserId="21594" LastEditDate="2021-02-05T07:52:54.853" LastActivityDate="2021-02-05T07:52:54.853" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21752" PostTypeId="1" CreationDate="2021-02-04T04:47:34.177" Score="0" ViewCount="267" Body="&lt;p&gt;The last three axes of PUMA robot:-&lt;/p&gt;&#xA;&lt;p&gt;option(1) intersect at a point&lt;/p&gt;&#xA;&lt;p&gt;option(2) are at equal distance from first three coordinate axes&lt;/p&gt;&#xA;&lt;p&gt;option(3) have non-zero link lengths&lt;/p&gt;&#xA;&lt;p&gt;option(4) have parallel z-axes&lt;/p&gt;&#xA;&lt;p&gt;which one is correct i can't able to determine ! Please help... &lt;strong&gt;I am new in Robotics&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="27892" LastActivityDate="2021-02-04T04:47:34.177" Title="The last three axes of PUMA robot" Tags="&lt;robotic-arm&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21753" PostTypeId="1" CreationDate="2021-02-04T05:42:28.980" Score="-1" ViewCount="123" Body="&lt;p&gt;The modulus of each columns of the rotation matrix is&lt;/p&gt;&#xA;&lt;p&gt;1, 0.5, 0.866 or 1.366&lt;/p&gt;&#xA;&lt;p&gt;which one is correct?&lt;/p&gt;&#xA;" OwnerUserId="27892" LastActivityDate="2021-02-04T21:16:11.577" Title="The modulus of each columns of the rotation matrix is" Tags="&lt;robotic-arm&gt;&lt;inverse-kinematics&gt;&lt;matrix&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21754" PostTypeId="2" ParentId="21733" CreationDate="2021-02-04T12:04:20.393" Score="0" Body="&lt;p&gt;You have presented a map of the robot. This is the correct first step. Now this map has to be reformulated as a sequence of decision which path to take.&lt;/p&gt;&#xA;&lt;p&gt;If you do this, you can build a tree. In this tree, each stage (level) of the tree you advance from one note to the other. So, if your start node is 1 this is the first node in your tree.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/xnNwB.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xnNwB.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;From the first node, you can have move to 5 paths which lead to adjacent nodes. Let's indicate that these are reachable within one step from the starting node by adding S1 as prefix. Now if we add these 5 choices to the starting node we get:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/LGrsC.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/LGrsC.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;We can continue expanding these nodes, by listing their adjacent nodes. Usually it is bes t to omit the node you came from into this nodes again and again increasing the depth of the tree. (The tree might not match exactly your map but it is close)&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/BFZBT.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/BFZBT.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Now if you are in a uniform  (and unitary) cost environment the cost of taking a decision, or moving form a parent node to a child node is 1. If you actually calculate distances each edge (line) in this tree will have a different cost which will be the distance metric between the nodes.&lt;/p&gt;&#xA;&lt;p&gt;Any graph base path planning algorithm will try to build such a tree and the goal is the find the minimum cost path from the start until one of the nodes (leafs) in this tree will be your goal node. The difference is how they get to this path.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Breadth First Search:&lt;/strong&gt; expands all nodes in the tree going level by level.  Starting at the S1 level all S1 nodes will be expanded. If none of them contains the target node, the next level will be extended...and so on&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Depth First Search:&lt;/strong&gt; Similar to BFS, but goes downwards, not sideways. It expands the nodes downwards until there the maximum depth is reached than goes to the next branch.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Dijkstra:&lt;/strong&gt; It is more efficient then the two above because it uses an internal rule to select the nodes that  is more application oriented. For each node expanded is ads cost information about the cost to get to that node. The cost is the edges traversed to get to the node (if the cost it uniform 1) or the sum of costs (e.g. cartesian distance between the nodes). This cost is what selects the next node to be extended. Regardless of the level in the tree, you always select the node for expansion, which has minimal cost.&lt;/p&gt;&#xA;&lt;p&gt;The algorithm performs better then BFS if the cost is not uniform. It is more ore less the same as BFS in a uniform unitary cost map.&lt;/p&gt;&#xA;&lt;p&gt;For implementation, usually there are two lists, closed and open. The closed list contains all nodes which have been expanded. The open list contains all nodes which have not yet been expanded.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;First step is to add the first node to the open list.&lt;/li&gt;&#xA;&lt;li&gt;Select the node with minimal cost in the open list&lt;/li&gt;&#xA;&lt;li&gt;Check if this node is the target node, if yes, recreate the path using the pointers to its parents set below. if not:&lt;/li&gt;&#xA;&lt;li&gt;Expand the selected node, this is where we get the adjacent nodes&lt;/li&gt;&#xA;&lt;li&gt;Add all newly obtained nodes and add them to the open list&lt;/li&gt;&#xA;&lt;li&gt;Calculate the cost to get to the expanded nodes (parent cost + edge cost)&lt;/li&gt;&#xA;&lt;li&gt;Connect a pointer from the children nodes to the parent node.&lt;/li&gt;&#xA;&lt;li&gt;Add delete the expanded node from the open list and add it to the closed list&#xA;Go to 2&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Please note that some implementations and explanations consider the presence of the target node in the open list a stop condition. This is wrong, it has to be the in the open list and has to have the minimum cost in the open list for the algorithm to complete. Otherwise it is not guaranteed that the shortest path is found&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;em&gt;A&lt;/em&gt;:&lt;/em&gt;* it is based on Dijkstra, but has one difference. The cost calculated in step 6  has one further component. It is an approximated cost of how much would it take to get from the current node to the target node. If this approximation is less or equal then the actual real cost to get to the target node then the algorithm will function correctly. E.g. in a uniform cost environment this approximation can be 1. On a map, this approximation could be the Cartesian distance between the current node and the target node. Please note, that the approximation plays a role only is the selection of the node, the actual cost component is calculated based on the actual cost only, not the approximated part.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="10748" LastEditDate="2021-02-04T12:41:05.677" LastActivityDate="2021-02-04T12:41:05.677" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21755" PostTypeId="1" CreationDate="2021-02-04T13:38:15.277" Score="1" ViewCount="36" Body="&lt;p&gt;I am trying to use KDL to do inverse kinematics. However I am not interested in the orientation of the end effector, but only in the location. Is there a way to specify this in KDL? The function &lt;code&gt;CartToJnt&lt;/code&gt; only seems to accept a Frame with a rotation matrix. Is there maybe a different way to do this in KDL?&lt;/p&gt;&#xA;" OwnerUserId="27898" LastActivityDate="2021-02-18T16:40:53.077" Title="Inverse kinematics in KDL without rotation" Tags="&lt;ros&gt;&lt;inverse-kinematics&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="21756" PostTypeId="2" ParentId="21753" CreationDate="2021-02-04T21:16:11.577" Score="0" Body="&lt;p&gt;The modulus of each column vector is 1. The column vectors of a rotation matrix are expected to be orthonormal.&lt;/p&gt;&#xA;" OwnerUserId="10183" LastActivityDate="2021-02-04T21:16:11.577" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21757" PostTypeId="1" CreationDate="2021-02-05T00:07:38.067" Score="0" ViewCount="21" Body="&lt;p&gt;If we have the map of an environment (an occupancy grid for instance) and precisely know the pose of the robot within it. How can one reconstruct what the laser scan should look like at a given location ?&lt;/p&gt;&#xA;" OwnerUserId="23475" LastActivityDate="2021-03-08T22:02:00.350" Title="Extract laser scan from a map and known location" Tags="&lt;mobile-robot&gt;&lt;localization&gt;&lt;lidar&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21758" PostTypeId="1" CreationDate="2021-02-05T16:19:19.223" Score="1" ViewCount="69" Body="&lt;p&gt;I am working on controlling a robot to various points on an x,y grid. The robot starts at random locations and I can control it's velocity and angular velocity.&lt;/p&gt;&#xA;&lt;p&gt;Currently, I am using the technique of rotate the robot until the atan2 of the distance between the robot and the target goal like so:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;dx = target_position.x - robot_position.x&#xA;dy = target_position.y - robot_position.y&#xA;angle = atan2(dy, dx)&#xA;angle = wrap_to_pi(angle) # Wrap the angles to the range [-π, π] radians.&#xA;&#xA;if angle - robot_angle &amp;lt;= some_error_factor:&#xA;   increase_linear_velocity() # note this is pseudo code&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This works pretty well to get me to target positions when the robot never has to go near x=0 on the coordinate system. I know there is a discontinuity with atan2 near pi, but my question is how can I wrap the angle or control the robot because currently when x is close to 0 the robot just spins around unable to get under the error factor to say you're pointing at the position&lt;/p&gt;&#xA;" OwnerUserId="27906" LastEditorUserId="27906" LastEditDate="2021-02-05T17:33:04.487" LastActivityDate="2021-02-06T01:52:47.520" Title="How to handle robot movement close to coordinates x=0 with atan2" Tags="&lt;rotation&gt;&lt;movement&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21759" PostTypeId="1" AcceptedAnswerId="21761" CreationDate="2021-02-06T01:34:02.913" Score="0" ViewCount="31" Body="&lt;p&gt;I'm confused how to set up an initial heading for my mobile robot project. I've determined heading from gyro integration and also using magnetometer readings. Gyro initializes at 0 and magnetometer initializes to a random value between -180 and 180 based on direction of the imu.&lt;/p&gt;&#xA;&lt;p&gt;My question is how should I set up this parameter initially. I plan keep the range between -pi and pi, but do i want to use the global magnetic field as my reference and navigate based upon this, or do i want to offset that value to agree with the gyro at startup?&lt;/p&gt;&#xA;&lt;p&gt;Thanks for any help!&lt;/p&gt;&#xA;" OwnerUserId="27911" LastActivityDate="2021-02-06T14:58:49.957" Title="How to set initial heading" Tags="&lt;imu&gt;&lt;gyroscope&gt;&lt;magnetometer&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21760" PostTypeId="2" ParentId="21758" CreationDate="2021-02-06T01:52:47.520" Score="1" Body="&lt;p&gt;First off, your code may have some confusion about atan2, which already returns an angle between -pi and +pi.  That's one reason to use atan2(dy, dx) instead of atan(dy/dx) -- it figures out the correct quadrant so we don't have to.  (The other reason to use atan2 is that it works fine when dx is near zero, where atan(dy/dx) will suffer loss of precision, overflow, or even division by zero.)&lt;/p&gt;&#xA;&lt;p&gt;Secondly, I think your code is doing the pi-wrap in the wrong place.  Try something more like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;dx, dy = target_position - robot_position&#xA;target_angle = atan2(dy, dx)&#xA;d_angle = target_angle - robot_angle&#xA;d_angle = wrap_to_p(d_angle)    # wrap the angle here&#xA;if abs(d_angle) &amp;lt; acceptable_error&#xA;   see_about_moving_forward&#xA;elif d_angle &amp;lt; 0:&#xA;   turn left some&#xA;else:&#xA;   turn right some&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="27618" LastActivityDate="2021-02-06T01:52:47.520" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21761" PostTypeId="2" ParentId="21759" CreationDate="2021-02-06T14:58:49.957" Score="0" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;magnetometer initializes to a random value between -180 and 180&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It's not a random value, it's&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;based on direction of the imu.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;If your question is&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;how should I set up this parameter initially.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Then you need to decide what you want it to be. Do you want zero to be whatever direction the robot is pointing when it's powered on, or do you want zero to be magnetic North?&lt;/p&gt;&#xA;&lt;p&gt;Either way, you need to grab the magnetometer output on startup (or maybe average the first five or ten samples.) Store it in a variable called &lt;code&gt;absoluteInitialHeading&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Then, if you want zero to be magnetic North, you set the initial gyro angle to be that absolute initial heading and you're done.&lt;/p&gt;&#xA;&lt;p&gt;If you want zero to be initial vehicle heading then you can subtract the absolute initial heading from all subsequent magnetometer readings.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2021-02-06T14:58:49.957" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21762" PostTypeId="2" ParentId="21757" CreationDate="2021-02-06T21:46:42.843" Score="0" Body="&lt;p&gt;This would depend on how your map is formed in the first place. Is it saved by aggregating several scans into one map? If so, it'd be very hard to extract individual scans since this information is lost in the registration and subsequent aggregation. You can however, use a filter (eg: &lt;a href=&quot;https://pointclouds.org/documentation/tutorials/remove_outliers.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;radius filter&lt;/a&gt;, &lt;a href=&quot;https://pointclouds.org/documentation/classpcl_1_1_crop_box.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;crop box&lt;/a&gt;, etc.) to query the map based on your current pose and extract a portion of the map. This wont give you an individual scan but will be close.&lt;/p&gt;&#xA;&lt;p&gt;The other option would be to skip the aggregation step and save individual scans with their poses. You will have to write a script to merge them at runtime and view/show a complete map, but no information is lost in the process. Extracting a scan would then be easy, as you just find the scan with the lowest distance between the current pose and one saved in the files.&lt;/p&gt;&#xA;" OwnerUserId="27064" LastActivityDate="2021-02-06T21:46:42.843" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21764" PostTypeId="1" CreationDate="2021-02-07T09:05:19.477" Score="0" ViewCount="7" Body="&lt;p&gt;I have been having trouble in connecting the mavproxy.py script to the dronekit-SITL.&lt;/p&gt;&#xA;&lt;p&gt;I have tried mavproxy.py - - master tcp:127.0.0.1:5760 - - out udp:127.0.0.1:14550.&lt;/p&gt;&#xA;&lt;p&gt;The udp connects to the qground control. After executing the command, the qgc connects the disconnects when mavproxy cli says link down.&lt;/p&gt;&#xA;&lt;p&gt;I am using windows 10 on HP and I have tried to reboot the system but the same results, errors reappear. I rebooted because it worked on another computer.(This was in another pc)&lt;/p&gt;&#xA;&lt;p&gt;I have tried to such on the internet but the solution seems not be there...&#xA;I will enormously appreciate your answers!&lt;/p&gt;&#xA;" OwnerUserId="27917" LastActivityDate="2021-02-07T09:05:19.477" Title="Mavproxy command returns no link" Tags="&lt;ros&gt;&lt;drone&gt;&lt;mavlink&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21765" PostTypeId="2" ParentId="19961" CreationDate="2021-02-07T10:45:22.170" Score="2" Body="&lt;p&gt;If you assume the IMU lies on a fixed incline plane with pitch &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt;, and you define yaw &lt;span class=&quot;math-container&quot;&gt;$\psi$&lt;/span&gt; as the rotation between the IMU and the downhill direction, then the answer is&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$\psi = \text{atan2}(-a_y, a_x)$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;where &lt;span class=&quot;math-container&quot;&gt;$a_x$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$a_y$&lt;/span&gt; are the X and Y accelerometer readings respectively. Note that this is independent of the inclined plane pitch &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt; (which is not equal to the pitch as measured by the IMU; the IMU may be facing perpendicularly to the descent direction).&lt;/p&gt;&#xA;&lt;p&gt;There are many definitions of yaw but the one we are using here is with respect to the downhill direction of the inclined plane. If that inclined plane were to rotate around the &lt;span class=&quot;math-container&quot;&gt;$z$&lt;/span&gt; axis, the yaw as defined using e.g. Euler ZYX angles would change, but our yaw would stay the same. I suspect this is the disconnect between the question and the other answers. To be clear, this computation for &lt;span class=&quot;math-container&quot;&gt;$\psi$&lt;/span&gt; is only the &amp;quot;local&amp;quot; yaw with respect to the incline. Getting the angle with respect to a fixed north or world &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt;-axis given just an accelerometer reading and no other information is not possible. This is because gravity points down, and rotations around that axis (the down axis) will not cause a change in the accelerometer reading.&lt;/p&gt;&#xA;&lt;p&gt;To derive this expression for &lt;span class=&quot;math-container&quot;&gt;$\psi$&lt;/span&gt;, note that the orientation of the IMU, &lt;span class=&quot;math-container&quot;&gt;$R$&lt;/span&gt;, in this inclined plane scenario only really has one degree of freedom: the yaw.&#xA;The orientation can be described by first pitching downwards by an angle of &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt;, then rotating around the new body &lt;span class=&quot;math-container&quot;&gt;$z$&lt;/span&gt;-axis by &lt;span class=&quot;math-container&quot;&gt;$\psi$&lt;/span&gt;.&#xA;We can compute an expression for this orientation given &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\psi$&lt;/span&gt; by multiplying an elementary rotation around the &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt; axis and an elementary rotation about the &lt;span class=&quot;math-container&quot;&gt;$z$&lt;/span&gt; axis. See &lt;a href=&quot;https://en.wikipedia.org/wiki/Rotation_matrix&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://en.wikipedia.org/wiki/Rotation_matrix&lt;/a&gt; for their definitions. Since the rotation around &lt;span class=&quot;math-container&quot;&gt;$z$&lt;/span&gt; is intrinsic (w.r.t. the new &lt;span class=&quot;math-container&quot;&gt;$z$&lt;/span&gt;-axis), we post multiply &lt;span class=&quot;math-container&quot;&gt;$R_y(\theta)$&lt;/span&gt; with &lt;span class=&quot;math-container&quot;&gt;$R_z(\psi)$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;R = R_y(\theta)R_z(\psi) = \begin{bmatrix} \cos\theta &amp;amp; 0 &amp;amp; \sin\theta \\ 0 &amp;amp; 1 &amp;amp; 0 \\ -\sin\theta &amp;amp; 0 &amp;amp; \cos\theta \end{bmatrix} \begin{bmatrix} \cos\psi &amp;amp; -\sin\psi &amp;amp; 0 \\ \sin\psi &amp;amp; \cos\psi &amp;amp; 0 \\ 0 &amp;amp; 0 &amp;amp; 1\end{bmatrix} = \begin{bmatrix} \cos\theta \cos\psi &amp;amp; - \cos\theta \sin\psi &amp;amp; \sin\theta \\ \sin\psi &amp;amp; \cos\psi &amp;amp; 0 \\ -\sin\theta \cos\psi &amp;amp; \sin\theta \sin\psi &amp;amp; \cos\theta \end{bmatrix}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Now what does the accelerometer measure? It measures the gravity vector in the body frame*. The gravity vector in the world frame is &lt;span class=&quot;math-container&quot;&gt;$\begin{pmatrix} 0 &amp;amp; 0 &amp;amp; g \end{pmatrix}^\top$&lt;/span&gt;, so in the body frame, it is&#xA;&lt;span class=&quot;math-container&quot;&gt;$$ R^\top \begin{pmatrix} 0 \\ 0 \\ g \end{pmatrix} = \begin{pmatrix} -g\sin\theta \cos\psi \\ g\sin\theta \sin\psi \\  g\cos\theta \end{pmatrix} = \begin{pmatrix} a_x \\ a_y \\ a_z \end{pmatrix} $$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Now note that &lt;span class=&quot;math-container&quot;&gt;$$ -\frac{a_y}{a_x} = \tan \psi $$&lt;/span&gt;&#xA;and we have a simple way to compute &lt;span class=&quot;math-container&quot;&gt;$\psi$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Note that when both &lt;span class=&quot;math-container&quot;&gt;$a_x$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$a_y$&lt;/span&gt; are zero, i.e. &lt;span class=&quot;math-container&quot;&gt;$\theta = 0$&lt;/span&gt;, we are not able to get any information about &lt;span class=&quot;math-container&quot;&gt;$\psi$&lt;/span&gt;. This corresponds to the intuition that on flat ground, the accelerometer cannot tell you about yaw.&lt;/p&gt;&#xA;&lt;p&gt;*I am assuming there is no linear acceleration, which is a very common assumption. If the linear acceleration is known, it can be subtracted. For example, if this is a mobile robot, linear acceleration is typically close to zero or it can be estimated using the control inputs.&lt;/p&gt;&#xA;" OwnerUserId="26495" LastEditorUserId="26495" LastEditDate="2021-02-07T10:53:34.377" LastActivityDate="2021-02-07T10:53:34.377" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21767" PostTypeId="2" ParentId="20652" CreationDate="2021-02-07T21:45:44.603" Score="0" Body="&lt;p&gt;Your atan probably returns radians. Were you expecting degrees?&lt;/p&gt;&#xA;&lt;p&gt;Forgive me if this seems so basic as to be insulting, but just yesterday it snagged two engineers pair programming (one was me)!&lt;/p&gt;&#xA;" OwnerUserId="27618" LastActivityDate="2021-02-07T21:45:44.603" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21769" PostTypeId="1" AcceptedAnswerId="21773" CreationDate="2021-02-09T07:25:02.297" Score="3" ViewCount="93" Body="&lt;p&gt;I'm trying to efficiently calculate the vertical offset of each corner of a rectangular base. I have an accelerometer mounted in the middle of the base, ADXL345. The steps I have taken, and seems to work are below. Can anyone advise if this is the most efficient way of doing this. I'm using the raspberry pi pico, with MicroPython:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;convert the accelerometer into a unit vector&lt;/li&gt;&#xA;&lt;li&gt;use the dot product and cross products ( between X =0, y= 0, z= 1 and the accelerometer unit vector) to calculate the quaternion&lt;/li&gt;&#xA;&lt;li&gt;calculate the quaternion rotation matrix&lt;/li&gt;&#xA;&lt;li&gt;calculate the rotation of the four corners using the rotation matrix, but only for the z component, as I'm only interested in vertical offset of the corners&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="18530" LastActivityDate="2021-02-10T10:52:52.167" Title="Calculating rotation matrix efficiently" Tags="&lt;rotation&gt;" AnswerCount="1" CommentCount="7" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21770" PostTypeId="2" ParentId="14213" CreationDate="2021-02-09T13:31:01.050" Score="1" Body="&lt;p&gt;You can find a wide selection of pattern projectors &lt;a href=&quot;https://enphotonics.com/random-dot-projectors-catalog/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;,&#xA;some of them have eye-safety features, other are better than AMS projectors in the sense that the pattern is much more random.&lt;/p&gt;&#xA;" OwnerUserId="27937" LastActivityDate="2021-02-09T13:31:01.050" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21772" PostTypeId="2" ParentId="1564" CreationDate="2021-02-10T09:21:18.417" Score="0" Body="&lt;p&gt;The following hacky method is only valid if you have packages / launch files that are ONLY available on remote.  If the packages / launch files are available on both host and remote machine, you can simply use the &lt;code&gt;&amp;lt;machine&amp;gt;&lt;/code&gt; tag from roslaunch which is much cleaner.&lt;/p&gt;&#xA;&lt;p&gt;(cross posting from &lt;a href=&quot;https://answers.ros.org/question/371480/roslaunch-nodes-launch-files-only-available-on-remote-machine/?answer=371491#post-id-371491&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://answers.ros.org/question/371480/roslaunch-nodes-launch-files-only-available-on-remote-machine/?answer=371491#post-id-371491&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;p&gt;Assuming host has ssh key access to remote, I accomplished this with the following:&lt;/p&gt;&#xA;&lt;p&gt;Host machine launch file:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;launch&amp;gt;&#xA;    &amp;lt;node pkg=&amp;quot;local_pkg&amp;quot; type=&amp;quot;remote_bringup.sh&amp;quot; name=&amp;quot;remote_bringup&amp;quot;/&amp;gt;&#xA;&amp;lt;/launch&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Host machine &lt;code&gt;remote_bringup.sh&lt;/code&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;#!/usr/bin/env bash&#xA;&#xA;trap 'ssh remote@remote &amp;quot;pkill roslaunch&amp;quot;' INT TERM&#xA;ssh remote@remote &amp;quot;~/bringup.sh&amp;quot;&#xA;wait&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Remote machine &lt;code&gt;bringup.sh&lt;/code&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;#!/bin/bash&#xA;&#xA;source /opt/ros/melodic/setup.bash&#xA;source /opt/ros/install/setup.bash&#xA;export ROS_MASTER_URI=http://host_machine:11311&#xA;export ROS_IP=remote_machine&#xA;nohup roslaunch remote_pkg normal.launch &amp;amp;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The script properly catches SIGINT, SIGTERM and forwards it to the remote machine's &lt;code&gt;roslaunch&lt;/code&gt;&lt;/p&gt;&#xA;" OwnerUserId="24388" LastActivityDate="2021-02-10T09:21:18.417" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21773" PostTypeId="2" ParentId="21769" CreationDate="2021-02-10T10:52:52.167" Score="3" Body="&lt;p&gt;The accelerometer measures the gravity vector in the body frame, call it &lt;span class=&quot;math-container&quot;&gt;$a$&lt;/span&gt;. If you normalize that, say &lt;span class=&quot;math-container&quot;&gt;$\hat a$&lt;/span&gt;, it's the third row of the rotation matrix &lt;span class=&quot;math-container&quot;&gt;$R$&lt;/span&gt; that represents the rotation of the body. i.e.&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;R^\top \begin{pmatrix}0 \\ 0 \\ 1\end{pmatrix} = \frac{a}{||a||} = \hat a =  z_{\mathcal{W}}^{\mathcal{B}}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;So &lt;span class=&quot;math-container&quot;&gt;$$ R = \begin{pmatrix} ? \\ ? \\ \hat a \end{pmatrix} $$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Now to get the world coordinates of a corner point &lt;span class=&quot;math-container&quot;&gt;$p^{\mathcal{B}}$&lt;/span&gt; expressed in the body frame,&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;p^{\mathcal{W}} = R p^{\mathcal{B}} = \begin{pmatrix} ? \\ ? \\ \hat a \end{pmatrix} p^{\mathcal{B}} = \begin{pmatrix} ? \\ ? \\ \hat a ^\top p^{\mathcal{B}} \end{pmatrix}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Thus the world &lt;span class=&quot;math-container&quot;&gt;$z$&lt;/span&gt; coordinate of the corner point is the dot product between the normalized accelerometer vector and the corner point expressed in the body frame.&lt;/p&gt;&#xA;&lt;p&gt;If you just need the &lt;span class=&quot;math-container&quot;&gt;$z$&lt;/span&gt; coordinate, you do not need to construct the rotation matrix.&lt;/p&gt;&#xA;" OwnerUserId="26495" LastActivityDate="2021-02-10T10:52:52.167" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="21774" PostTypeId="2" ParentId="19424" CreationDate="2021-02-11T21:17:24.453" Score="0" Body="&lt;p&gt;My &lt;a href=&quot;https://github.com/Ezward/Esp32CameraRover2&quot; rel=&quot;nofollow noreferrer&quot;&gt;robot project&lt;/a&gt; uses an Esp32Cam to control the robot and stream video to a web ui over a websocket connection.  &lt;a href=&quot;https://github.com/Ezward/Esp32CameraRover2&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/Ezward/Esp32CameraRover2&lt;/a&gt;.  It is also possible to do this with an Arduino Uno and a &lt;a href=&quot;https://maker.pro/arduino/tutorial/how-to-interface-the-ov7670-camera-module-with-arduino&quot; rel=&quot;nofollow noreferrer&quot;&gt;OV7670 camera module&lt;/a&gt;, but it is way easier with an Esp32Cam.  Cheap and easy.&lt;/p&gt;&#xA;" OwnerUserId="24763" LastEditorUserId="24763" LastEditDate="2021-02-11T21:22:30.543" LastActivityDate="2021-02-11T21:22:30.543" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21775" PostTypeId="1" CreationDate="2021-02-12T00:21:43.730" Score="0" ViewCount="90" Body="&lt;p&gt;In my project, I'm making a robot using two hover board motors, a motor control board such as this one:&#xA;&lt;a href=&quot;https://www.ebay.com/p/2242827374?iid=162674407600&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.ebay.com/p/2242827374?iid=162674407600&lt;/a&gt;&#xA;and a raspberry pi. I've connected the motor to the motor controller board, and the motor controller board to the motor. The motors work fine, I can run a function that makes the motors spin forward or backward. The one problem is the speed. I read that a pin on the motor controller board[VR pin] controls the speed. When running the motor, it is meant to simply take a parameter that controls the speed of the motor. However the motor only runs at max speed regardless of what number I use in the parameter. Thank you in advance and let me know if you need any more details.&lt;/p&gt;&#xA;" OwnerUserId="27957" LastEditorUserId="27957" LastEditDate="2021-02-12T02:02:31.183" LastActivityDate="2021-03-14T03:07:55.780" Title="Is it possible to control the speed of a hoverboard motor[BLDC motor] with a raspberry pi? If so, how?" Tags="&lt;raspberry-pi&gt;&lt;brushless-motor&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21776" PostTypeId="2" ParentId="21775" CreationDate="2021-02-12T02:35:59.183" Score="0" Body="&lt;p&gt;You're looking for an electronic speed controller. Be careful to check that the one you purchase supports forward AND reverse if you need both directions, and that they're rated for the voltage and current that you need.&lt;/p&gt;&#xA;&lt;p&gt;The electronic speed controllers should take a PWM signal, but also you can check the datasheet for specifics.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2021-02-12T02:35:59.183" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21777" PostTypeId="1" AcceptedAnswerId="22009" CreationDate="2021-02-12T15:48:54.043" Score="0" ViewCount="115" Body="&lt;p&gt;I am trying to stream the images from my camera to a VM via ROS. Here is my setup:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Raspberry Pi 3B+ with Picamera v2. It is running ROS Noetic with &lt;code&gt;cv_camera_node&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;An Ubuntu 20.04.1 VM with ROS Noetic. I am reviewing the live stream using &lt;code&gt;rosrun rqt_image_view rqt_image_view&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;When I tried this, the stream is really laggy and slow. I am barely getting 10 fps. I was able to do camera calibration with it but mapping with it will be really challenging. Is there any way to speed it up. Can I decrease the quality of the camera capture? Any help is truly appreciated.&lt;/p&gt;&#xA;&lt;p&gt;Here is my launch file:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;launch&amp;gt;&#xA;  &amp;lt;node name=&amp;quot;usb_cam&amp;quot; pkg=&amp;quot;usb_cam&amp;quot; type=&amp;quot;usb_cam_node&amp;quot; output=&amp;quot;screen&amp;quot; &amp;gt;&#xA;    &amp;lt;param name=&amp;quot;video_device&amp;quot; value=&amp;quot;/dev/video0&amp;quot; /&amp;gt;&#xA;    &amp;lt;param name=&amp;quot;image_width&amp;quot; value=&amp;quot;640&amp;quot; /&amp;gt;&#xA;    &amp;lt;param name=&amp;quot;image_height&amp;quot; value=&amp;quot;480&amp;quot; /&amp;gt;&#xA;    &amp;lt;param name=&amp;quot;pixel_format&amp;quot; value=&amp;quot;uyvy&amp;quot; /&amp;gt;&#xA;    &amp;lt;param name=&amp;quot;camera_frame_id&amp;quot; value=&amp;quot;camera&amp;quot; /&amp;gt;&#xA;    &amp;lt;param name=&amp;quot;io_method&amp;quot; value=&amp;quot;mmap&amp;quot;/&amp;gt;&#xA;    &amp;lt;param name=&amp;quot;framerate&amp;quot; value=&amp;quot;30&amp;quot; /&amp;gt;&#xA;    &amp;lt;param name=&amp;quot;autofocus&amp;quot; value=&amp;quot;true&amp;quot; /&amp;gt;&#xA;    &amp;lt;param name=&amp;quot;camera_name&amp;quot; value=&amp;quot;camera&amp;quot; /&amp;gt;&#xA;    &#xA;  &amp;lt;/node&amp;gt;&#xA;  &amp;lt;node name=&amp;quot;image_view&amp;quot; pkg=&amp;quot;image_view&amp;quot; type=&amp;quot;image_view&amp;quot; respawn=&amp;quot;false&amp;quot; output=&amp;quot;screen&amp;quot;&amp;gt;&#xA;    &amp;lt;remap from=&amp;quot;image&amp;quot; to=&amp;quot;/camera/image_raw&amp;quot;/&amp;gt;&#xA;    &amp;lt;param name=&amp;quot;autosize&amp;quot; value=&amp;quot;true&amp;quot; /&amp;gt;&#xA;  &amp;lt;/node&amp;gt;&#xA;&amp;lt;/launch&amp;gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;```&lt;/span&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="26747" LastEditorUserId="26747" LastEditDate="2021-02-13T00:18:54.667" LastActivityDate="2021-04-07T13:15:58.270" Title="ROS Webcam Stream Really Slow" Tags="&lt;ros&gt;&lt;computer-vision&gt;&lt;raspberry-pi&gt;&lt;cameras&gt;&lt;monocular&gt;" AnswerCount="3" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21778" PostTypeId="2" ParentId="21777" CreationDate="2021-02-12T16:01:21.707" Score="0" Body="&lt;p&gt;What camera are you using? It might be helpful to know since the driver might be at fault here.&lt;br /&gt;&#xA;Also, any particular reason you are working with the cv_camera_node? &lt;a href=&quot;http://wiki.ros.org/usb_cam&quot; rel=&quot;nofollow noreferrer&quot;&gt;usb_cam&lt;/a&gt; has worked much better for me in the past. It works with libusb rather than opencv which could also be a culprit here. In the end, you just get a sensor_msgs::Image with both packages. So it'd be worth a shot. You can also set a bunch of different parameters in the launch file itself. Maybe play around with those? Specifically the framerate and image width/height.&lt;/p&gt;&#xA;" OwnerUserId="27064" LastActivityDate="2021-02-12T16:01:21.707" CommentCount="13" ContentLicense="CC BY-SA 4.0" />
  <row Id="21781" PostTypeId="1" CreationDate="2021-02-13T14:11:59.177" Score="2" ViewCount="34" Body="&lt;p&gt;I'm working on building an LQR for a system which consists of a ball in a vertical tube, a fan is situated at the bottom of the tube and a distance sensor is at the top, a raspberry Pi is used to send a PWM signal to the fan which can be supplied with 0-5 Volts. The idea is that the user can set the desired height of the ball and the fan will lift it up the the desired height. I have two equations which I combined to get the ball dynamics in terms of voltage supplied, my maths can be seen below:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/fyxRu.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fyxRu.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I have the simulation working in MATLAB but I've gotten stuck in a rut with grasping what the &amp;quot;U&amp;quot; control signal actually refers to in the physical system, I want to believe that the &amp;quot;U&amp;quot; term in the state space model is the voltage supplied to the fan but I've received other opinions that this isn't the case and that the &amp;quot;U&amp;quot; signal being produced by the LQR calculations is somewhat arbitrary and is to be converted for interpretation  by the Pi with a multiplier of &amp;quot;5/255&amp;quot; (which is referring to the resolution that the Pi can receive the signal in). The main reason for this question is I have to ensure that the 0-5 Volts saturation limit is adhered to by the LQR and am unsure as to how to achieve this. So in this case, is the &amp;quot;U&amp;quot; term in the state space model exactly equal to the required supply voltage, or is there something more to consider? Any thoughts are welcome.&lt;/p&gt;&#xA;&lt;p&gt;Thanks in advance.&lt;/p&gt;&#xA;" OwnerUserId="27961" LastActivityDate="2021-02-14T15:33:28.070" Title="Control signal of an LQR Controller" Tags="&lt;control&gt;&lt;electronics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21782" PostTypeId="2" ParentId="21777" CreationDate="2021-02-13T19:19:18.643" Score="0" Body="&lt;p&gt;If you are using the Raspberry Pi camera and not a USB camera, it is better to use this node: &lt;a href=&quot;https://github.com/UbiquityRobotics/raspicam_node&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/UbiquityRobotics/raspicam_node&lt;/a&gt;. This gave me really good speed.&lt;/p&gt;&#xA;" OwnerUserId="26747" LastActivityDate="2021-02-13T19:19:18.643" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21783" PostTypeId="1" CreationDate="2021-02-14T14:38:16.553" Score="0" ViewCount="19" Body="&lt;p&gt;I have a robotic welding system with two ABB IRB1600ID robots. I'm trying to setup tuning robtargets using HotEdit function in FlexPendant. Each weld has its points saved in an array of robtargets - similar to this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;PERS robtarget W26{7} := [&#xA;   [[901.47,246.13,488.04],[0.173963,-0.211681,-0.961732,0.000722468].[0,-1,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],&#xA;   [[901.47,323.87,479.16],[0.173963,-0.21168,-0.961732,0.00072254],[0,-1,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],&#xA;   [[901.47,390.56,479.16],[0.173963,-0.21168,-0.961732,0.00072258],[0,-1,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],&#xA;   [[901.47,450.15,479.16],[0.173963,-0.21168,-0.961732,0.000722628],[0,-1,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],&#xA;   [[901.47,590.94,479.16],[0.173963,-0.21168,-0.961732,0.000722584],[0,-1,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],&#xA;   [[901.47,678.42,479.16],[0.173963,-0.21168,-0.961732,0.000722581],[0,-1,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],&#xA;   [[899.27,761.87,479.16],[0.173963,-0.211679,-0.961732,0.000722644],[0,-1,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]]&#xA;];&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;After that I have a procedure similar to this (simplified):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;PROC Weld_W26()&#xA;    ArcLStart W26{1}, vtoArc, sm01, wd26_1, fine, R1_tWeld\WObj:=wobj0;&#xA;    ArcL W26{2}, Vweld, sm01, wd26_1, z1, R1_tWeld\WObj:=wobj0;&#xA;    ArcL W26{3}, Vweld, sm01, wd26_1, z1, R1_tWeld\WObj:=wobj0;&#xA;    ArcL W26{4}, Vweld, sm01, wd26_1, z1, R1_tWeld\WObj:=wobj0;&#xA;    ArcL W26{5}, Vweld, sm01, wd26_1, z1, R1_tWeld\WObj:=wobj0;&#xA;    ArcL W26{6}, Vweld, sm01, wd26_1, z1, R1_tWeld\WObj:=wobj0;&#xA;    ArcLEnd W26{7}, Vweld, sm01, wd26_1, z10, R1_tWeld\WObj:=wobj0;&#xA;ENDPROC&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;According to manual (&lt;a href=&quot;https://abb.sluzba.cz/Pages/Public/IRC5UserDocumentationRW6/en/3HAC050941%20OM%20IRC5%20with%20FlexPendant%20RW%206-en.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;IRC 5 with FlexPendant&lt;/a&gt;), &lt;strong&gt;if a robtarget is declared as an array, it must be indexed with a number to be modified in HotEdit&lt;/strong&gt;. What exactly does this line mean? Is my example done according to it?&lt;/p&gt;&#xA;&lt;p&gt;When I open HotEdit on my FlexPendant, everything looks fine:&lt;a href=&quot;https://i.stack.imgur.com/sRtsj.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/sRtsj.png&quot; alt=&quot;HotEdit window&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;But when I apply some offsets, some strange things start to happen:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Applied offsets are not shown in &amp;quot;Selected targets&amp;quot; view, just &amp;quot;0,0&amp;quot; everywhere, although the changes ARE reflected in RAPID.&lt;/li&gt;&#xA;&lt;li&gt;It becomes impossible to add more targets to &amp;quot;Selected targets&amp;quot; view by clicking arrow on the side (nothing happens). Only warm start solves this.&lt;/li&gt;&#xA;&lt;li&gt;Most importantly: When I press Baseline-&amp;gt;Restore selection (or Restore entire program), HotEdit somehow truncates my robtarget array into single point (for example into this: &lt;code&gt;PERS robtarget W26{7} := [[901.47,246.13,485.04],[0.173963,-0.211681,-0.961732,0.000722468],[0,-1,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];&lt;/code&gt;) with syntax error on top.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;All of things listed above happen only when using array of robtargets. When all the robtargets are in separate variables, everything works fine. I can't help but to think this must be some bug regarding arrays, &lt;strong&gt;but is there any way to work around it?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I almost forgot to mention: If I try to edit same position in manual mode using &amp;quot;Modify position&amp;quot; button, it works just fine. Therefore I think it has something to do with HotEdit functionality.&lt;/p&gt;&#xA;&lt;p&gt;Thank you for help in advance.&lt;/p&gt;&#xA;" OwnerUserId="24619" LastEditorUserId="24619" LastEditDate="2021-02-20T20:32:59.510" LastActivityDate="2021-02-20T20:32:59.510" Title="ABB FlexPendant - HotEdit - unable to restore baseline with array of robtargets" Tags="&lt;industrial-robot&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21784" PostTypeId="2" ParentId="21781" CreationDate="2021-02-14T15:33:28.070" Score="3" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;I've gotten stuck in a rut with grasping what the &amp;quot;U&amp;quot; control signal actually refers to in the physical system&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;But you've written what it is already!&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{x} = Ax + Bu&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;It's whatever the input to your system is. Maybe it's speed, or thrust, or acceleration. It's the thing that is exciting your system.&lt;/p&gt;&#xA;&lt;p&gt;I'm looking at your equations and I don't think they're correct - you have your input there mapping to &lt;span class=&quot;math-container&quot;&gt;$\dot{x_3}$&lt;/span&gt;. You are writing that &lt;span class=&quot;math-container&quot;&gt;$x_3$&lt;/span&gt; is acceleration, so your input is affecting... Jerk? Is that correct? Typically I would expect to see an x1/x2 that are position and speed, and then the inputs map to the derivative of x2, which is acceleration.&lt;/p&gt;&#xA;&lt;p&gt;It is very likely that your control output goes to some other system, like a throttle pedal, or a speed regulator, etc. It's up to you to map the signals appropriately and, importantly, the dynamics of the downstream system need to either be negligible or included in the plant model.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2021-02-14T15:33:28.070" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21785" PostTypeId="1" CreationDate="2021-02-14T16:04:43.497" Score="0" ViewCount="52" Body="&lt;p&gt;I have an EKF SLAM Algorithm which tries to estimate the robots position (X,Y,Theta) + the X,Y coordinates of several landmarks. Like in the posted algorithm i have a range/bearing sensor. I understand every step until line 19. Why is there no conversion between my measurement and my mean? The same thing for line 20. Shouldnt be there a conversion so the &amp;quot;units&amp;quot; fit? &amp;quot;z(t)&amp;quot; is a range and bearing in my model (2 row vector). mu(t) is a 3+2N vector. Can somebody explain why this should still work?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/sFdQ6.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/sFdQ6.png&quot; alt=&quot;EKF SLAM Algorithm&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="27965" LastActivityDate="2021-02-14T16:04:43.497" Title="EKF Update Step measurement data doesnt fit state vector" Tags="&lt;slam&gt;&lt;localization&gt;&lt;ekf&gt;&lt;estimation&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21786" PostTypeId="2" ParentId="20070" CreationDate="2021-02-14T19:45:43.807" Score="0" Body="&lt;p&gt;Thanks everyone for useful suggestions!&lt;/p&gt;&#xA;&lt;p&gt;I ended up using module with ArcX instruction aliases. It calculates seam length during program execution. Following is a simplified example of implementation:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;MODULE ArcEx(NOSTEPIN)&#xA;   CONST robtarget ArcEx_pNonePoint := [[0,0,0],[0,0,0,0],[0,0,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];&#xA;   TASK VAR robtarget ArcEx_pRefPoint := ArcEx_pNonePoint; ! Variable for storing previous point&#xA;   TASK VAR num ArcEx_nWeldDistance := 0; ! Calculated weld distance&#xA;&#xA;   PROC ArcLStartEx(robtarget ToPoint) ! Arguments ommited for readibility (same as original ArcLStart)&#xA;      ArcEx_nWeldDistance := 0;&#xA;      ArcEx_pRefPoint := ToPoint;&#xA;    &#xA;      ArcLStart ToPoint, \ID?ID, Speed, Seam, \AdvData?AdvData, Weld, \Weave?Weave, Zone, Tool, \WObj?WObj, \Corr?Corr, \Track?Track, \SeamName?SeamName, \T1?T1, \T2?T2, \T3?T3, \T4?T4, \T5?T5, \T6?T6, \T7?T7, \TLoad?TLoad;&#xA;   ENDPROC&#xA;&#xA;   PROC ArcLEx() ! Arguments ommited for readibility (same as original ArcL)&#xA;      ArcEx_nWeldDistance := ArcEx_nWeldDistance + Distance(ArcEx_pRefPoint.trans, ToPoint.trans);&#xA;      ArcEx_pRefPoint := ToPoint;&#xA;    &#xA;      ArcL ToPoint, \ID?ID, Speed, Seam, Weld, \Weave?Weave, Zone, Tool, \WObj?WObj, \Corr?Corr, \Track?Track, \Time?Time, \T1?T1, \T2?T2, \T3?T3, \T4?T4, \T5?T5, \T6?T6, \T7?T7, \TLoad?TLoad;&#xA;   ENDPROC&#xA;&#xA;   PROC ArcLEndEx() ! Arguments ommited for readibility (same as original ArcLEnd)&#xA;      ArcEx_nWeldDistance := ArcEx_nWeldDistance + Distance(ArcEx_pRefPoint.trans, ToPoint.trans);            &#xA;      ArcEx_pRefPoint := ArcEx_pNonePoint;&#xA;        &#xA;      TPWrite &amp;quot;Seam length: &amp;quot;\num:=ArcEx_nWeldDistance&#xA;    &#xA;      ArcLEnd ToPoint, \ID?ID, Speed, Seam, Weld, \Weave?Weave, Zone, Tool, \WObj?WObj, \Corr?Corr, \Track?Track, \Time?Time, \T1?T1, \T2?T2, \T3?T3, \T4?T4, \T5?T5, \T6?T6, \T7?T7, \TLoad?TLoad;&#xA;   ENDPROC&#xA;ENDMODULE&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Example usage:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;ArcLStartEx W007_On, vtoArc, sm01, s_12, fine, R1_tWeld\WObj:=R1_wFix\SeamName:=&amp;quot;W007&amp;quot;;&#xA;ArcLEx W007_1, vWeld, sm01, s_8, z1, R1_tWeld\WObj:=R1_wFix;&#xA;ArcCEx W007_2, W007_3, Vweld, sm01, s_8, z1, R1_tWeld\WObj:=R1_wFix;&#xA;ArcLEx W007_4, vWeld, sm01, s_8, z10, R1_tWeld\WObj:=R1_wFix;&#xA;ArcLEx W007_5, vWeld, sm01, s_8, z5, R1_tWeld\WObj:=R1_wFix;&#xA;ArcLEndEx W007_Off, vWeld, sm01, s_8, z1, R1_tWeld\WObj:=R1_wFix;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This obviously needs a lot of work for handling circular movements, zones etc. That's why I'm not marking this question answered yet.&lt;/p&gt;&#xA;" OwnerUserId="24619" LastEditorUserId="24619" LastEditDate="2021-02-20T20:31:56.603" LastActivityDate="2021-02-20T20:31:56.603" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21787" PostTypeId="1" AcceptedAnswerId="21790" CreationDate="2021-02-14T22:13:11.980" Score="0" ViewCount="58" Body="&lt;p&gt;I'm a software engineer and I've recently engaged into Robotics field. I've started by a course on Coursera which talks about Aerial robotics and thus quad-rotors. I'm trying to understand how quad-rotors dynamic works and i'm struggling understanding some key points.&lt;/p&gt;&#xA;&lt;p&gt;I'm going to explain and make some assumptions based on what i've understood by studying till now, and will ask a specific question at the end, please correct me if i'm wrong.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;A quad-rotor is a robot of &lt;strong&gt;6 degrees of freedom&lt;/strong&gt;, which involved &lt;strong&gt;translations in the 3 different axis (X, Y, Z)&lt;/strong&gt; and &lt;strong&gt;rotating over the same axis&lt;/strong&gt;, which defines the 3 famous movements: &lt;strong&gt;Roll, Pitch and Yaw&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The quad-rotor has 4 motors rotating with specific &lt;strong&gt;angular velocities&lt;/strong&gt;, and the previously discussed motions are achieved by &lt;strong&gt;regulating&lt;/strong&gt; these &lt;strong&gt;angular velocities&lt;/strong&gt;. More specifically, when rotating, the m&lt;strong&gt;otor blades create two type of forces&lt;/strong&gt;, commonly known as &lt;strong&gt;Thrust&lt;/strong&gt; and &lt;strong&gt;Torque&lt;/strong&gt;. The &lt;strong&gt;Thrust&lt;/strong&gt; permit the robot to &lt;strong&gt;maintain a specific altitude&lt;/strong&gt;, however the &lt;strong&gt;Torque&lt;/strong&gt; is used to allow the robot to &lt;strong&gt;rotate&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;&lt;strong&gt;My question is:&lt;/strong&gt; &lt;strong&gt;how are these forces generated ?&lt;/strong&gt; &lt;strong&gt;what's the physical explanation behind it ?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;My assumptions&lt;/strong&gt; are as follow:&lt;/p&gt;&#xA;&lt;p&gt;1- The &lt;strong&gt;Thrust&lt;/strong&gt; is generated because of the &lt;strong&gt;existence of a flowing air&lt;/strong&gt; which &lt;strong&gt;flows from the bottom to the top&lt;/strong&gt; passing through the motor's blade due to the high velocity of this latter&lt;/p&gt;&#xA;&lt;p&gt;2- The b is generated due to the &lt;strong&gt;existing of Thrust&lt;/strong&gt; and &lt;strong&gt;depends on the blade's length&lt;/strong&gt;. What i basically understood is that, when an object is rotating over an axe of rotation, a &lt;strong&gt;moment is generated&lt;/strong&gt; (also denoted Torque when the involved quantity is a force), which is no more than the &lt;strong&gt;cross-product&lt;/strong&gt; of both the &lt;strong&gt;force&lt;/strong&gt; and the &lt;strong&gt;length&lt;/strong&gt; between a considered point of that object and the axis of rotation. (Here &lt;strong&gt;i'm assuming this force is the Thrust&lt;/strong&gt;, but my mind is doubting on my assumption, correct me if i'm wrong)&lt;/p&gt;&#xA;&lt;p&gt;To illustrate my assumptions, here's a picture depicting what i said:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/B9ewm.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/B9ewm.jpg&quot; alt=&quot;Quad-rotor dynamics illustration&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;From this picture you can see the &lt;strong&gt;flowing air&lt;/strong&gt;, creating the &lt;strong&gt;Thurst&lt;/strong&gt;, and the &lt;strong&gt;Torque&lt;/strong&gt; represented on the &lt;strong&gt;blade's tip&lt;/strong&gt;, created by the previous &lt;strong&gt;Thrust&lt;/strong&gt; and &lt;strong&gt;depends&lt;/strong&gt; on the &lt;strong&gt;blade's length&lt;/strong&gt; (or radius). More specifically:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\overrightarrow{Torque} = \overrightarrow{Thrust} * \overrightarrow{Blade's length}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;The above operation is the Vector Cross-Product&lt;/p&gt;&#xA;&lt;p&gt;One more question, is about the &lt;strong&gt;Torque's direction&lt;/strong&gt;, i've been reading across multiple sources that it should be in the &lt;strong&gt;inverse direction of the angular velocity&lt;/strong&gt;, but i don't exactly know why.&lt;/p&gt;&#xA;&lt;p&gt;Thanks and sorry for the long post.&lt;/p&gt;&#xA;" OwnerUserId="27968" LastActivityDate="2021-02-15T07:18:31.980" Title="Quadrotor dynamics: How is torque created" Tags="&lt;quadcopter&gt;&lt;motor&gt;&lt;dynamics&gt;&lt;torque&gt;&lt;force&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21788" PostTypeId="2" ParentId="21787" CreationDate="2021-02-14T23:44:23.420" Score="2" Body="&lt;p&gt;Each motor generates torque to spin it's fan.   As the fan turns, the quadrotor will experience the same torque on the frame, only in the opposite direction.&lt;/p&gt;&#xA;&lt;p&gt;This is similar to a helicopter - the tail rotor is needed to counteract the torque from the main engine.    If the tail rotor fails, the helicopter will start to rotate in the opposite direction from it's airfoil.&lt;/p&gt;&#xA;&lt;p&gt;This is why drones always have an even number of fans - half of them spin counterclockwise and half spin clockwise to keep the torque balanced.&lt;/p&gt;&#xA;&lt;p&gt;The fans convert most of the torque into thrust by pushing air down.  The relationship between torque and thrust isn't going to be a simple linear relationship as you suggest.    Fan/propeller performance is usually modelled empirically.&lt;/p&gt;&#xA;" OwnerUserId="27969" LastActivityDate="2021-02-14T23:44:23.420" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21789" PostTypeId="1" CreationDate="2021-02-15T03:26:00.740" Score="-1" ViewCount="78" Body="&lt;p&gt;I am using &lt;code&gt;darknet_ros_3d&lt;/code&gt; package and getting the published 3D coordinates. Now I need to subscribe these coordinates into a Python file (&lt;code&gt;main.py&lt;/code&gt;) of another package named &lt;code&gt;kth-ros-pkg/yumi_demos&lt;/code&gt;. The code of &lt;code&gt;main.py&lt;/code&gt; is given as below:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;import sys&#xA;import copy&#xA;import rospy&#xA;import moveit_commander&#xA;import yumi_moveit_utils as yumi&#xA;import moveit_msgs.msg&#xA;import geometry_msgs.msg&#xA;from std_srvs.srv import Empty&#xA;&#xA;&#xA;&#xA;&#xA;def close_grippers(arm):&#xA;    &amp;quot;&amp;quot;&amp;quot;Closes the grippers.&#xA;    Closes the grippers with an effort of 15 and then relaxes the effort to 0.&#xA;    :param arm: The side to be closed (moveit_utils LEFT or RIGHT)&#xA;    :type arm: int&#xA;    :returns: Nothing&#xA;    :rtype: None&#xA;    &amp;quot;&amp;quot;&amp;quot;&#xA;    yumi.gripper_effort(arm, 15.0)&#xA;    yumi.gripper_effort(arm, 0.0)&#xA;&#xA;def open_grippers(arm):&#xA;    &amp;quot;&amp;quot;&amp;quot;Opens the grippers.&#xA;    Opens the grippers with an effort of -15 and then relaxes the effort to 0.&#xA;    :param arm: The side to be opened (moveit_utils LEFT or RIGHT)&#xA;    :type arm: int&#xA;    :returns: Nothing&#xA;    :rtype: None&#xA;    &amp;quot;&amp;quot;&amp;quot;&#xA;    yumi.gripper_effort(arm, -15.0)&#xA;    yumi.gripper_effort(arm, 0.0)&#xA;&#xA;&#xA;&#xA;def move_and_grasp(arm, pose_ee, grip_effort):&#xA;    try:&#xA;        yumi.traverse_path([pose_ee], arm, 10)&#xA;    except Exception:&#xA;        if (arm == yumi.LEFT):&#xA;            yumi.plan_and_move(yumi.group_l, yumi.create_pose_euler(pose_ee[0], pose_ee[1], pose_ee[2], pose_ee[3], pose_ee[4], pose_ee[5]))&#xA;        elif (arm == yumi.RIGHT):&#xA;            yumi.plan_and_move(yumi.group_r, yumi.create_pose_euler(pose_ee[0], pose_ee[1], pose_ee[2], pose_ee[3], pose_ee[4], pose_ee[5]))&#xA;&#xA;    if (grip_effort &amp;lt;= 20 and grip_effort &amp;gt;= -20):&#xA;        yumi.gripper_effort(arm, grip_effort)&#xA;    else:&#xA;        print(&amp;quot;The gripper effort values should be in the range [-20, 20]&amp;quot;)&#xA;&#xA;&#xA;&#xA;&#xA;def run():&#xA;    &amp;quot;&amp;quot;&amp;quot;Starts the node&#xA;    Runs to start the node and initialize everthing. Runs forever via Spin()&#xA;    :returns: Nothing&#xA;    :rtype: None&#xA;    &amp;quot;&amp;quot;&amp;quot;&#xA;&#xA;    rospy.init_node('yumi_moveit_demo')&#xA;&#xA;    #Start by connecting to ROS and MoveIt!&#xA;    yumi.init_Moveit()&#xA;&#xA;&#xA;    # Print current joint angles&#xA;    yumi.print_current_joint_states(yumi.RIGHT)&#xA;    yumi.print_current_joint_states(yumi.LEFT)&#xA;&#xA;    # Reset YuMi joints to &amp;quot;home&amp;quot; position&#xA;    yumi.reset_pose()&#xA;&#xA;&#xA;    # Drive YuMi end effectors to a desired position (pose_ee), and perform a grasping task with a given effort (grip_effort)&#xA;    # Gripper effort: opening if negative, closing if positive, static if zero&#xA;    pose_ee = [0.3, 0.15, 0.2, 0.0, 3.14, 3.14]&#xA;    grip_effort = -10.0&#xA;    move_and_grasp(yumi.LEFT, pose_ee, grip_effort)&#xA;&#xA;    pose_ee = [0.3, -0.15, 0.2, 0.0, 3.14, 3.14]&#xA;    grip_effort = -10.0&#xA;    move_and_grasp(yumi.RIGHT, pose_ee, grip_effort)&#xA;&#xA;    rospy.spin()&#xA;&#xA;&#xA;&#xA;&#xA;if __name__ == '__main__':&#xA;    try:&#xA;        run()&#xA;&#xA;        print &amp;quot;####################################     Program finished     ####################################&amp;quot;&#xA;    except rospy.ROSInterruptException:&#xA;        pass &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;And I am getting coordinates from the &lt;code&gt;darknet&lt;/code&gt; package in the following format:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;header:&#xA;  stamp:&#xA;    sec: 1593723845&#xA;    nanosec: 430724839&#xA;  frame_id: camera_link&#xA;bounding_boxes:&#xA;- object_name: person&#xA;  probability: 0.7609682679176331&#xA;  xmin: 0.4506256580352783&#xA;  ymin: -0.3164764642715454&#xA;  xmax: 0.7936256527900696&#xA;  ymax: 0.11368180811405182&#xA;  zmin: -0.25958430767059326&#xA;  zmax: 0.10506562888622284&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="27972" LastEditorUserId="9176" LastEditDate="2021-02-27T09:19:20.577" LastActivityDate="2021-02-27T09:19:20.577" Title="How to subscribe message coming from a package of ROS into Python code of another package?" Tags="&lt;ros&gt;&lt;python&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21790" PostTypeId="2" ParentId="21787" CreationDate="2021-02-15T07:05:44.800" Score="1" Body="&lt;p&gt;You're right that each spinning prop creates both a force and a torque.&lt;/p&gt;&#xA;&lt;p&gt;The force is created &lt;strong&gt;opposite&lt;/strong&gt; the direction of the flowing air; each action has an equal and opposite reaction. The same way you can push away from a wall by pushing onto it, the propeller pushes &amp;quot;away&amp;quot; from the air (up) by pushing the air down.&lt;/p&gt;&#xA;&lt;p&gt;That same force also exerts a torque on the body of the quadrotor, since typically the line of action does not go through the center of mass. This is separate from the torque generated by the propeller itself. The torque about the body center of mass generated by the force is used to tilt the quadrotor and initiate motion in the horizontal plane. When the quadrotor is hovering, each of the four rotors is carefully balancing the torques they generate.&lt;/p&gt;&#xA;&lt;p&gt;The torque generated by the propeller itself is, as @billmcc mentioned, produced in opposite direction to the torque exerted by the motor on the prop (the same equal and opposite reaction principle as with the force). This torque is around the axis of the motor shaft, and tends to spin the body of the quadrotor around its z-axis. When the rotor is spinning at a constant angular velocity, this torque is needed to fight the drag the propeller experiences as it moves through the air, as well as friction from the motor itself. If there were no air and no friction, a prop spinning at constant angular velocity would not generate any torque on the body.&lt;/p&gt;&#xA;&lt;p&gt;So the torque generated by the propeller is not quite coming from the force generated by the propeller, but incidentally, many quadrotor controllers model this relationship linearly: Torque = C * Thrust. This tends to hold roughly after empirical analysis. By your &amp;quot;r x F&amp;quot; reasoning and diagram, the torque would be generated coming out of the screen, and since the prop is rotating, the torque on one side is equally cancelled by an opposite torque on the other side.&lt;/p&gt;&#xA;&lt;p&gt;There is a second type of torque generated around the z-axis when the rotor speed is changing due to the conservation of angular momentum. This torque is proportional to the rate of change of the angular velocity of the rotor, but is typically ignored in quadrotor controllers since it's quite small for small propellers relative to the other torque (the torque due to propeller drag).&lt;/p&gt;&#xA;&lt;p&gt;Hope this helps and let me know if you have questions!&lt;/p&gt;&#xA;" OwnerUserId="26495" LastEditorUserId="26495" LastEditDate="2021-02-15T07:18:31.980" LastActivityDate="2021-02-15T07:18:31.980" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="21791" PostTypeId="1" AcceptedAnswerId="21792" CreationDate="2021-02-15T07:40:48.757" Score="1" ViewCount="32" Body="&lt;p&gt;A trajectory is described by a position vector, i.e., traj = &lt;span class=&quot;math-container&quot;&gt;$[q_0, q_1,...,q_n]$&lt;/span&gt;. The objective is to minimize the jerk of the trajectory.&lt;/p&gt;&#xA;&lt;p&gt;I am referring to &lt;a href=&quot;https://github.com/ZJU-FAST-Lab/ego-planner/blob/master/src/planner/bspline_opt/src/bspline_optimizer.cpp#L423&quot; rel=&quot;nofollow noreferrer&quot;&gt;this code&lt;/a&gt; to understand how the gradient of jerk is defined. It's clear how Jerk is defined, but I am not clear how the gradient of jerk is defined. Any help to understand this much appreciated.&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$jerk_i = q_{i+3}-3q_{i+2}+3q_{i+1}-x_i, \forall jerk_i, i=1,...,n-3$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;In that implementation, &lt;span class=&quot;math-container&quot;&gt;$\bigtriangledown jerk_i $&lt;/span&gt; is defined as follows:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\bigtriangledown jerk_i \; \mathrel{+}= -2 \cdot jerk_i , \quad  \bigtriangledown jerk_{i+1} \; \mathrel{+}= 6 \cdot jerk_i, \quad   \bigtriangledown jerk_{i+2} \; \mathrel{-}= 6 \cdot jerk_i, \quad  \bigtriangledown jerk_{i+2} \; \mathrel{+}= 2 \cdot jerk_i$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Not clear why they have defined gradient this way?&lt;/p&gt;&#xA;" OwnerUserId="18159" LastActivityDate="2021-02-15T08:11:58.123" Title="How to estimate gradient of Jerk" Tags="&lt;control&gt;&lt;trajectory&gt;&lt;optimization&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21792" PostTypeId="2" ParentId="21791" CreationDate="2021-02-15T08:11:58.123" Score="2" Body="&lt;p&gt;The code is computing the gradient of the cost, which is jerk squared, not the gradient of the jerk. The comment there is misleading! As written, it seems the code is implementing the chain rule of&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;c = j^\top j&#xA;$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\frac{\partial c}{\partial q} = 2j\frac{\partial j}{\partial q}&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$2j$&lt;/span&gt; is set to &lt;code&gt;temp_j&lt;/code&gt; and you can see how the partial of jerk w.r.t &lt;code&gt;q&lt;/code&gt; is computed given the expression for jerk. The constants 1, -3, 3, and -1 can be read off.&lt;/p&gt;&#xA;" OwnerUserId="26495" LastActivityDate="2021-02-15T08:11:58.123" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21793" PostTypeId="2" ParentId="21789" CreationDate="2021-02-15T09:45:41.120" Score="0" Body="&lt;p&gt;Subscribing to messages from a different package is no different than from the same package, just make sure to get the topic name right in case of &lt;a href=&quot;https://answers.ros.org/question/314560/namespaces-of-nodes/&quot; rel=&quot;nofollow noreferrer&quot;&gt;namespaces&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;code&gt;rospy&lt;/code&gt; &lt;a href=&quot;http://wiki.ros.org/rospy_tutorials/Tutorials/WritingPublisherSubscriber#The_Code_Explained-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Subscriber tutorial&lt;/a&gt; shows how to create a subscriber for a topic:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;rospy.Subscriber(&amp;lt;topic_name&amp;gt;, &amp;lt;msg_type&amp;gt;, &amp;lt;callback_function&amp;gt;)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;A &lt;a href=&quot;https://github.com/IntelligentRoboticsLabs/gb_visual_detection_3d/blob/master/darknet_ros_3d/config/darknet_3d.yaml&quot; rel=&quot;nofollow noreferrer&quot;&gt;quick search&lt;/a&gt; shows the topic of interest for you might be &lt;code&gt;/darknet_ros_3d/bounding_boxes&lt;/code&gt;? If that's so, import the corresponding message type from &lt;a href=&quot;https://github.com/IntelligentRoboticsLabs/gb_visual_detection_3d_msgs&quot; rel=&quot;nofollow noreferrer&quot;&gt;gb_visual_detection_3d_msgs&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;from gb_visual_detection_3d_msgs.msg import BoundingBoxes3d&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="21531" LastActivityDate="2021-02-15T09:45:41.120" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21794" PostTypeId="1" CreationDate="2021-02-15T20:32:22.810" Score="0" ViewCount="25" Body="&lt;p&gt;I'm having a problem to prove the stability of PD control in trajectory tracking. Let say we have a system with double integrator dynamics and we what to minimalize the tracking error &lt;span class=&quot;math-container&quot;&gt;$\tilde{x} $&lt;/span&gt;.&#xA;The problem is stated as follows:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;\begin{equation}&#xA;    \ddot{x} = u,&#xA;\end{equation}&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;\begin{equation}&#xA;    \tilde{x} = x - x_d, \quad \dot{\tilde{x}} = \dot{x} - \dot{x}_d, \quad \dot{x}_{d} \neq 0, \quad x_d(0) = 0, \quad \dot{x}_{d}(0) = 0,&#xA;\end{equation}&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;\begin{equation}&#xA;     u = -K_P\tilde{x} -K_D\dot{\tilde{x}}, \quad where \quad K_P,K_D \in R^+&#xA;\end{equation}&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Finally my question is:&lt;/p&gt;&#xA;&lt;p&gt;What Lyapunov function could be chosen (&lt;span class=&quot;math-container&quot;&gt;$V = ?$&lt;/span&gt;) and what assumptions should be made to prove the stability of the proposed controler?&lt;/p&gt;&#xA;&lt;p&gt;Is it even possible to prove the stability without assuming that &lt;span class=&quot;math-container&quot;&gt;$\dot{x}_d \approx 0 ?$&lt;/span&gt;&lt;/p&gt;&#xA;" OwnerUserId="17413" LastActivityDate="2021-02-15T20:32:22.810" Title="How to prove the stability of trajectory tracking with PD control using Lyapunov method?" Tags="&lt;pid&gt;&lt;stability&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21795" PostTypeId="1" CreationDate="2021-02-15T22:04:18.270" Score="0" ViewCount="30" Body="&lt;p&gt;-I have an RPi on Ubuntu with ROS (Kinetic). The task is to solve a maze. I have implemented a left-hand algorithm to navigate through the maze.&lt;/p&gt;&#xA;&lt;p&gt;-The robot is equipped with 3 ultrasonic HC-SR04 sensors.&lt;/p&gt;&#xA;&lt;p&gt;How do I detect and navigate through a curved path using these sensors?&lt;/p&gt;&#xA;" OwnerUserId="27980" LastActivityDate="2021-03-18T14:04:10.593" Title="How to handle curved paths in maze" Tags="&lt;mobile-robot&gt;&lt;ros&gt;&lt;localization&gt;&lt;raspberry-pi&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21796" PostTypeId="1" CreationDate="2021-02-16T00:11:04.637" Score="0" ViewCount="31" Body="&lt;p&gt;Direct integration of IMU will result in massive error incredibly quickly.&lt;/p&gt;&#xA;&lt;p&gt;What I am wondering is, how do you use an IMU over a small time intervals to aid in pose estimation?&lt;/p&gt;&#xA;&lt;p&gt;In particular, suppose we have used Kalman filter for the first time step t_0 and got a fused estimate t_1, what happens next with the IMU?&lt;/p&gt;&#xA;&lt;p&gt;You don't continue to integrate it, so what do you do?&lt;/p&gt;&#xA;&lt;p&gt;Do you zero it? Doing so will only then give you acceleration over the current time step. How does this get combined into a velocity estimate?&lt;/p&gt;&#xA;" OwnerUserId="21514" LastActivityDate="2021-02-16T00:11:04.637" Title="How is IMU noise dealt with between steps?" Tags="&lt;kalman-filter&gt;&lt;imu&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21797" PostTypeId="1" CreationDate="2021-02-16T03:42:20.173" Score="-1" ViewCount="59" Body="&lt;p&gt;I am using darknet_ros_3d package and writing a subscriber. So far, I have followed the code given as under:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;import rospy&#xA;from sensor_msgs.msg import Image&#xA;from darknet_ros_msgs.msg import BoundingBoxes&#xA;from std_msgs.msg import Header&#xA;from std_msgs.msg import String&#xA;&#xA;&#xA;def callback(data):&#xA;    for box in data.bounding_boxes:&#xA;        rospy.loginfo(&#xA;            &amp;quot;Xmin: {}, Xmax: {} Ymin: {}, Ymax: {}&amp;quot;.format(&#xA;                box.xmin, box.xmax, box.ymin, box.ymax&#xA;            )&#xA;        )&#xA;&#xA;&#xA;def main():&#xA;    while not rospy.is_shutdown():&#xA;        rospy.init_node('listener', anonymous=True)&#xA;        rospy.Subscriber('/darknet_ros/bounding_boxes', BoundingBoxes , callback)&#xA;        rospy.spin()&#xA;&#xA;&#xA;if __name__ == '__main__':&#xA;    try :&#xA;        main()&#xA;    except rospy.ROSInterruptException:&#xA;        pass&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;How can I save the values coming from Xmin: {}, Ymin: {}, etc. into the variables for the later usage?&lt;/p&gt;&#xA;" OwnerUserId="27972" LastActivityDate="2021-02-16T04:43:09.153" Title="How can I save messages publishing from a ROS package into a variable?" Tags="&lt;ros&gt;&lt;python&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21798" PostTypeId="2" ParentId="21797" CreationDate="2021-02-16T04:43:09.153" Score="1" Body="&lt;p&gt;You will need to use &lt;strong&gt;classes&lt;/strong&gt; and save the data into class variables. Try this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;import rospy&#xA;from sensor_msgs.msg import Image&#xA;from darknet_ros_msgs.msg import BoundingBoxes&#xA;from std_msgs.msg import Header&#xA;from std_msgs.msg import String&#xA;&#xA;&#xA;class darknet_ros_3d:&#xA;&#xA;  def __init__(self):&#xA;    rospy.init_node('listener', anonymous=True)&#xA;    rospy.Subscriber('/darknet_ros/bounding_boxes', BoundingBoxes , self.callback)&#xA;&#xA;  def callback(self, data):&#xA;    for box in data.bounding_boxes:&#xA;      rospy.loginfo(&#xA;        &amp;quot;Xmin: {}, Xmax: {} Ymin: {}, Ymax: {}&amp;quot;.format(&#xA;        box.xmin, box.xmax, box.ymin, box.ymax)&#xA;        )&#xA;    # save data into variables&#xA;    self.Xmin = box.xmin&#xA;    self.Xmax = box.xmax&#xA;    self.Ymin = box.ymin&#xA;    self.Ymax = box.ymax&#xA;&#xA;&#xA;if __name__ == '__main__':&#xA;  darknet_ros_3d()&#xA;  try:&#xA;    rospy.spin()&#xA;  except KeyboardInterrupt:&#xA;    print(&amp;quot;Shutting down&amp;quot;)&#xA;    &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;You can now use these variables by calling self.(variable) in other parts of your code as long as it is referenced within the class&lt;/p&gt;&#xA;" OwnerUserId="27064" LastActivityDate="2021-02-16T04:43:09.153" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="21799" PostTypeId="1" CreationDate="2021-02-16T12:09:48.977" Score="-2" ViewCount="41" Body="&lt;p&gt;After publishing the messages from another package, I am using darknet_ros_3d package and writing a subscriber. For saving the messages into variables for the later use, I am following the answer mentioned in: &lt;a href=&quot;https://robotics.stackexchange.com/a/21798/27972&quot;&gt;https://robotics.stackexchange.com/a/21798/27972&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The code is given as follows:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;import rospy&#xA;from sensor_msgs.msg import Image&#xA;from darknet_ros_msgs.msg import BoundingBoxes3d&#xA;from std_msgs.msg import Header&#xA;from std_msgs.msg import String&#xA;&#xA;&#xA;class darknet_ros_3d:&#xA;&#xA;  def callback(self, msg):&#xA;    for box in msg.bounding_boxes:&#xA;      rospy.loginfo(&#xA;        &amp;quot;Xmin: {}, Xmax: {} Ymin: {}, Ymax: {}, Zmin: {}, Zmax: {}&amp;quot;.format(&#xA;        box.xmin, box.xmax, box.ymin, box.ymax)&#xA;        )&#xA;    # save data into variables&#xA;    self.Xmin = box.xmin&#xA;    self.Xmax = box.xmax&#xA;    self.Ymin = box.ymin&#xA;    self.Ymax = box.ymax&#xA;    self.Zmin = box.zmin&#xA;    self.Zmax = box.zmax&#xA;&#xA;  def __init__(self):&#xA;    rospy.init_node('listener', anonymous=True)&#xA;    &#xA;    rospy.Subscriber('/darknet_ros_3d/bounding_boxes', BoundingBoxes3d, self.callback)&#xA;    pose = [self.Xmin, self.Ymin, self.Zmin, self.Xmax, self.Ymax, self.Zmax]&#xA;&#xA;&#xA;if __name__ == '__main__':&#xA;  darknet_ros_3d()&#xA;  try:&#xA;    rospy.spin()&#xA;  except KeyboardInterrupt:&#xA;    print(&amp;quot;Shutting down&amp;quot;)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I am getting the following error for the line&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;pose = [self.Xmin, self.Ymin, self.Zmin, self.Xmax, self.Ymax, self.Zmax]:&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;pre&gt;&lt;code&gt;AttributeError: darknet_ros_3d instance has no attribute 'Xmin'&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="27972" LastEditorUserId="19143" LastEditDate="2021-02-18T18:57:55.343" LastActivityDate="2021-02-18T18:57:55.343" Title="AttributeError: darknet_ros_3d instance has no attribute 'Xmin'" Tags="&lt;ros&gt;&lt;python&gt;" AnswerCount="1" CommentCount="0" ClosedDate="2021-02-16T15:04:41.443" ContentLicense="CC BY-SA 4.0" />
  <row Id="21800" PostTypeId="2" ParentId="21795" CreationDate="2021-02-16T13:24:36.787" Score="0" Body="&lt;p&gt;Use a distance threshold between the wall and robot and make the robot turn every time the output of sensor is less than the threshold. I guess you are using a differential drive robot. And if you are not mapping, there is no use of other 2 sensors. You just need to create a publisher for the sensor data and subscribe it to calculate the threshold and send the appropriate velocity for the bot.&lt;/p&gt;&#xA;" OwnerUserId="27234" LastActivityDate="2021-02-16T13:24:36.787" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21801" PostTypeId="2" ParentId="21799" CreationDate="2021-02-16T15:02:24.390" Score="2" Body="&lt;p&gt;You have added an extra line to the &lt;code&gt;__init__&lt;/code&gt; function given in the &lt;a href=&quot;https://robotics.stackexchange.com/a/21798/37&quot;&gt;referenced answer&lt;/a&gt;, and that code tries to use values which haven't been set yet.&lt;/p&gt;&#xA;&lt;p&gt;To fix the error just remove the &lt;code&gt;pose = [self.Xmin, ... , self.Zmax]&lt;/code&gt; line.&lt;/p&gt;&#xA;" OwnerUserId="37" LastActivityDate="2021-02-16T15:02:24.390" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21802" PostTypeId="2" ParentId="8990" CreationDate="2021-02-17T00:55:07.137" Score="0" Body="&lt;p&gt;I used ESP8266 with BL HC-10 and L293D motor controller to operate RC car with the differential steering. I used a factor, &amp;quot;f&amp;quot; to adjust (tune) the steering&#xA;The code is as follows&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;SoftwareSerial.h&amp;gt;&#xA;#include &amp;lt;ArduinoBlue.h&amp;gt;&#xA;&#xA;int prevThrottle = 49;&#xA;int prevSteering = 49;&#xA;int throttle, steering;&#xA;&#xA;SoftwareSerial bluetooth(13, 15);&#xA;ArduinoBlue phone(bluetooth);&#xA;&#xA;void setup()&#xA;{&#xA;  pinMode(16, OUTPUT);&#xA;  pinMode(4, OUTPUT);&#xA;  pinMode(5, OUTPUT);&#xA;  pinMode(14, OUTPUT);&#xA;  pinMode(12, OUTPUT);&#xA;  pinMode(0, OUTPUT);&#xA;&#xA;  Serial.begin(9600);&#xA;&#xA;  bluetooth.begin(9600);&#xA;&#xA;  delay(100);&#xA;&#xA;  Serial.println(&amp;quot;setup complete&amp;quot;);&#xA;&#xA;}&#xA;void loop()&#xA;{&#xA;  throttle = phone.getThrottle();&#xA;  steering = phone.getSteering();&#xA;&#xA;  if (prevThrottle != throttle || prevSteering != steering) {&#xA;    Serial.print(&amp;quot;Throttle: &amp;quot;); Serial.print(throttle); Serial.print(&amp;quot;\tSteering: &amp;quot;); Serial.println(steering);&#xA;    prevThrottle = throttle;&#xA;    prevSteering = steering;&#xA;    int f = 25;     // factor for steering response&#xA;    &#xA;    if (throttle &amp;gt; 49 &amp;amp;&amp;amp; steering &amp;gt; 49) {&#xA;&#xA;      digitalWrite(16, HIGH);   // L side wheels&#xA;      digitalWrite(4, LOW);&#xA;      analogWrite(5, (throttle - 50) * 20);&#xA;&#xA;      digitalWrite(14, HIGH);   // R side wheels&#xA;      digitalWrite(12, LOW);&#xA;      analogWrite(0, ((throttle - 50) * 20  - (steering - 50)*f));&#xA;    }&#xA;&#xA;&#xA;    if (throttle &amp;gt; 49 &amp;amp;&amp;amp; steering &amp;lt; 50) {&#xA;&#xA;      digitalWrite(16, HIGH);&#xA;      digitalWrite(4, LOW);&#xA;      analogWrite(5, (throttle - 50) * 20 - (49 - steering)* f) ;&#xA;&#xA;      digitalWrite(14, HIGH);&#xA;      digitalWrite(12, LOW);&#xA;      analogWrite(0, ((throttle - 50) * 20));&#xA;    }&#xA;&#xA;    if (throttle &amp;lt; 50 &amp;amp;&amp;amp; steering &amp;gt; 49) {&#xA;&#xA;      digitalWrite(16, LOW);&#xA;      digitalWrite(4, HIGH);&#xA;      analogWrite(5, ((49 - throttle) * 20));&#xA;&#xA;      digitalWrite(14, LOW);&#xA;      digitalWrite(12, HIGH);&#xA;      analogWrite(0, (49 - throttle) * 20 - (steering - 50)* f);&#xA;    }&#xA;&#xA;    if (throttle &amp;lt; 50 &amp;amp;&amp;amp; steering &amp;lt; 50) {&#xA;&#xA;      digitalWrite(16, LOW);&#xA;      digitalWrite(4, HIGH);&#xA;      analogWrite(5, (49 - throttle) * 20 - (49 - steering)* f);&#xA;&#xA;      digitalWrite(14, LOW);&#xA;      digitalWrite(12, HIGH);&#xA;      analogWrite(0, (49 - throttle) * 20);&#xA;    }&#xA;&#xA;  }&#xA;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="27988" LastEditorUserId="110" LastEditDate="2021-02-17T15:32:12.000" LastActivityDate="2021-02-17T15:32:12.000" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21803" PostTypeId="1" CreationDate="2021-02-17T21:05:35.667" Score="0" ViewCount="24" Body="&lt;p&gt;Im trying to bring an EKF - SLAM to life but it keeps on failing. Specifially, I think, my mistake lies in the initialization of the new cone &amp;lt;-&amp;gt; covariance. I multiply the Jacobian (derived with the robots specific variables [x,y,theta] with the Crosscovariance robot &amp;lt;-&amp;gt; cone of this specific cone. I repeat this step for all the cones which got measured before the one im initiating right now. Is this the right way to &amp;quot;fill&amp;quot; the whole row (besides from the robot &amp;lt;-&amp;gt; new cone covariances)&lt;/p&gt;&#xA;&lt;p&gt;These are the Jacobians:&#xA;J_h_inv = [1 0 -sin(angle+theta_robot)*distance&#xA;; 0 1 cos(angle +theta_robot)*distance];&#xA;J_z = [cos(angle+theta_robot) -sin(angle+theta_robot)*distance&#xA;;sin(angle+theta_robot) cos(angle+theta_robot)*distance];&lt;/p&gt;&#xA;&lt;p&gt;matrices=[J_h_inv J_z];&lt;/p&gt;&#xA;&lt;p&gt;Also because of the negative sin within the jacobians the landmarks get initialized negativly which cant be correct, right? But the Jacobians are the same as in &amp;quot;SLAM for dummies&amp;quot;, Thrun, &amp;quot;Ekf A very quick guide&amp;quot; etc...&lt;/p&gt;&#xA;&lt;p&gt;This is the specific part of my code:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;        P_zero = zeros(length(x_local));                        %Creating a broader matrix&#xA;        P_zero(1:length(P_local),1:length(P_local)) = P_local;  %Filling in the old one&#xA;        &#xA;        %Add new variance Cone &#xA;        P_zero(end-1:end,end-1:end) = Jacobians_new_covariance(:,1:3)*P_local(1:3,1:3)*Jacobians_new_covariance(:,1:3)'+Jacobians_new_covariance(:,4:5)*R_local*Jacobians_new_covariance(:,4:5)';&#xA;        % in short -&amp;gt; Jac_v*P_local*Jac_v'+Jac_c*R_local*Jac_c'&#xA;        &#xA;        %Add new Cone &amp;lt;-&amp;gt; Cone Covariance&#xA;            for t = 1:length(cone_positions_cell{1,1}(:,1))-1 % Cone_positions_cell{1,1} just counts the number of cones. Thats why it´s -1 not 2&#xA;                &#xA;            P_cross_cones = Jacobians_new_covariance(:,1:3)*P_local((2+2*t):(3+2*t),1:3)';  %Is this the right formula?!&#xA;            P_zero(2+2*t:3+2*t,end-1:end) = P_cross_cones';&#xA;            P_zero(end-1:end,2+2*t:3+2*t) = P_cross_cones;&#xA;            end&#xA;            &#xA;        %Add covariance vehicle &amp;lt;-&amp;gt; new cone   &#xA;        P_cross_vehicle_new = Jacobians_new_covariance(:,1:3)*P_local(1:3,1:3); &#xA;        P_zero(end-1:end,1:3) = P_cross_vehicle_new;&#xA;        P_zero(1:3,end-1:end) = P_cross_vehicle_new';&#xA;&#xA;        P_local = P_zero;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="27965" LastEditorUserId="27965" LastEditDate="2021-02-17T21:21:43.223" LastActivityDate="2021-02-17T21:21:43.223" Title="SLAM Initialize new landmark - specifically the covariance" Tags="&lt;mobile-robot&gt;&lt;slam&gt;&lt;localization&gt;&lt;ekf&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21805" PostTypeId="2" ParentId="16341" CreationDate="2021-02-18T08:28:14.710" Score="1" Body="&lt;p&gt;If I get this correctly, you should think that the filter is divided into prediction step &amp;quot;motion update&amp;quot; and correction step &amp;quot;measurement update&amp;quot;. if the bot has not observed any landmark then there is no measurement to process in the measurement update. therefore, the robot is entirely relying on the dead reckoning algorithm for position and the SEIF is just updating pose. However, since the SEIF SLAM algorithm information matrix express the landmarks relation in links that are stronger if they are near, after many timestamps and long range movement the next landmark observed will present a weak link to the previous landmarks. hence, this link is subject to sparsification.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/xYbZC.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xYbZC.png&quot; alt=&quot;SEIF SLAM algorithm&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="28000" LastActivityDate="2021-02-18T08:28:14.710" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21806" PostTypeId="2" ParentId="19160" CreationDate="2021-02-18T14:29:32.570" Score="1" Body="&lt;p&gt;Not sure if it still helps, but for both traditional and modified D-H convention, you need your Z-axis to be at the direction of the joint axis. Your frame 2 did not comply to this requirement. This probably explains the missing link parameter 0.024m.&lt;/p&gt;&#xA;" OwnerUserId="28002" LastActivityDate="2021-02-18T14:29:32.570" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21807" PostTypeId="2" ParentId="15065" CreationDate="2021-02-18T16:31:26.433" Score="0" Body="&lt;p&gt;I found this answer from a Google search, just for your information in 2021 installing ROS in conda should be much straightforward, see the following links:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://medium.com/robostack/cross-platform-conda-packages-for-ros-fa1974fd1de3&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://medium.com/robostack/cross-platform-conda-packages-for-ros-fa1974fd1de3&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://github.com/RoboStack/ros-noetic&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/RoboStack/ros-noetic&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="9691" LastActivityDate="2021-02-18T16:31:26.433" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21808" PostTypeId="2" ParentId="21755" CreationDate="2021-02-18T16:40:53.077" Score="2" Body="&lt;p&gt;The KDL Ik solver &lt;strong&gt;KDL::ChainIkSolverPos_LMA&lt;/strong&gt; can be construct with a &lt;a href=&quot;http://docs.ros.org/en/kinetic/api/orocos_kdl/html/classKDL_1_1ChainIkSolverPos__LMA.html#a5322326848d618e0ec2af8683344274e&quot; rel=&quot;nofollow noreferrer&quot;&gt;weight matrix&lt;/a&gt;. You should be able to solve using only the end effector's target position by setting rotation components weights to 0.&lt;/p&gt;&#xA;" OwnerUserId="28004" LastActivityDate="2021-02-18T16:40:53.077" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21809" PostTypeId="2" ParentId="1263" CreationDate="2021-02-19T00:13:26.773" Score="1" Body="&lt;p&gt;There is now an easy way of installing ROS on OSX using conda: &lt;code&gt;conda install ros-noetic-desktop -c robostack&lt;/code&gt;. More info on &lt;a href=&quot;https://medium.com/robostack/cross-platform-conda-packages-for-ros-fa1974fd1de3&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://medium.com/robostack/cross-platform-conda-packages-for-ros-fa1974fd1de3&lt;/a&gt; and &lt;a href=&quot;https://github.com/RoboStack/ros-noetic&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/RoboStack/ros-noetic&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="28005" LastActivityDate="2021-02-19T00:13:26.773" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21810" PostTypeId="1" AcceptedAnswerId="21812" CreationDate="2021-02-19T02:39:19.613" Score="3" ViewCount="279" Body="&lt;p&gt;I have been reading up on impedance control, and several sources have stated that it is much safer than position control. However, frustratingly, none of these sources have explained why this is. So... why is impedance control safer than position control?&lt;/p&gt;&#xA;&lt;p&gt;I have tried to think about this myself, based on my understanding of the difference in the control loop of the two methods. I know that impedance control models the system as a mass-spring-damper. So here, the larger the position error, the larger the force, due to the spring. However, I also know that in regular position control, the larger the position error, the larger the force (proportional control). So I don't really see what the main difference is, and why impedance control would be any safer.&lt;/p&gt;&#xA;&lt;p&gt;For example, in &lt;a href=&quot;https://www.youtube.com/watch?v=Vf9fQK5PKn4&quot; rel=&quot;nofollow noreferrer&quot;&gt;this video&lt;/a&gt; describing impedance control, there is the following quote (at 00:52):&#xA;&amp;quot;While the end-effector follows the reference position, a person can still deflect it away. An ordinary position-controlled system would not allow for such smooth deflection&amp;quot;. But in both methods, the force would increase linearly as the person deflects the end-effector away, so I don't understand why the behaviour would be &amp;quot;smoother&amp;quot; in impedance control.&lt;/p&gt;&#xA;" OwnerUserId="8880" LastActivityDate="2021-02-19T10:15:42.377" Title="Impedance Control vs Position Control" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;force&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21811" PostTypeId="2" ParentId="21810" CreationDate="2021-02-19T08:58:21.873" Score="4" Body="&lt;p&gt;You can view impedance control as having more control over the force resulting at the end effector, than in position control. In position control, the goal is to get to the reference position no matter what, even if it needs the maximum force of the motor.&lt;/p&gt;&#xA;&lt;p&gt;In impedance control, you control the ratio between force and velocity. Even if the robot deviates from its target position, the controller will not engage the full motor force to get back on track.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="6941" LastEditDate="2021-02-19T09:26:04.310" LastActivityDate="2021-02-19T09:26:04.310" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21812" PostTypeId="2" ParentId="21810" CreationDate="2021-02-19T09:14:31.803" Score="8" Body="&lt;p&gt;In classical position control, the feedback controller only cares about the position error and is tuned to minimize it. This is done by using very high gains, i.e. if there is even a small position error, the controller counteracts by applying very high torques to the joints. It does not matter if there is a person or a concrete wall in its path; just minimize the error with whatever force is necessary.&lt;/p&gt;&#xA;&lt;p&gt;Impedance control is designed to adapt to the characteristics of the environment and thus limit contact forces. This achieved through (virtual) mass, damping and stiffness matrices that are not isotropic, i.e. different directions see different reaction forces. If you expect a stiff environment in one direction, you command the robot to react softly / compliantly in that direction. In directions you expect to move freely along, you command the robot to be stiff in order to achieve low position error.&#xA;To go with the example from the lecture slides:&#xA;Imagine standing in front of a wall blindfolded (slide 10 in reference [1]). You know that a flat wall is in front of you, but not where exactly. So in order to get into contact, you cautiously / softly move your arm forwards until you make contact.&#xA;Perpendicular to the wall you can move rigidly without excessive force (neglecting friction).&lt;/p&gt;&#xA;&lt;p&gt;This system can be extended by using various state-dependent matrices depending on where in your task space you are and how certain you are that there might be contacts.&lt;/p&gt;&#xA;&lt;p&gt;Also, to quote the main points from the introduction of [1]:&lt;/p&gt;&#xA;&lt;p&gt;Impedance Control&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;imposes a desired &lt;em&gt;dynamic behavior&lt;/em&gt; to the interaction between robot end-effector and environment&lt;/li&gt;&#xA;&lt;li&gt;the desired performance is specified through a &lt;em&gt;generalized dynamic impedance&lt;/em&gt;, namely a complete set of mass-spring-damper equations (typically chosen as linear and decoupled, but also nonlinear)&lt;/li&gt;&#xA;&lt;li&gt;a model describing how reaction forces are generated in association with environment deformation is not explicitly required&lt;/li&gt;&#xA;&lt;li&gt;suited for tasks in which &lt;em&gt;contact forces should be “kept small”&lt;/em&gt;, while their accurate regulation is not mandatory&lt;/li&gt;&#xA;&lt;li&gt;since a control loop based on &lt;em&gt;force error&lt;/em&gt; is missing, &lt;em&gt;contact forces&lt;/em&gt; are only indirectly assigned by &lt;em&gt;controlling position&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;the choice of a specific stiffness in the impedance model along a Cartesian direction results in a &lt;em&gt;trade-off&lt;/em&gt; between contact forces and position accuracy in that direction&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Reference:&lt;/p&gt;&#xA;&lt;p&gt;[1] De Luca, Robotics 2, Lecture 15: Impedance Control &lt;a href=&quot;https://www.diag.uniroma1.it//%7Edeluca/rob2_en/15_ImpedanceControl.pdf&quot; rel=&quot;noreferrer&quot;&gt;Slides&lt;/a&gt; &lt;a href=&quot;https://web.archive.org/web/20181123103728/https://www.diag.uniroma1.it//%7Edeluca/rob2_en/15_ImpedanceControl.pdf&quot; rel=&quot;noreferrer&quot;&gt;Mirror&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="28007" LastEditorUserId="28007" LastEditDate="2021-02-19T10:15:42.377" LastActivityDate="2021-02-19T10:15:42.377" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21813" PostTypeId="1" AcceptedAnswerId="21817" CreationDate="2021-02-19T11:14:02.533" Score="1" ViewCount="23" Body="&lt;p&gt;I want to define ee-poses from a point cloud in a way that the pose for each point is pointed to by a unit vector from origin. Rotation about the vector pointing towards the point can be whatever as the tool is round.&lt;/p&gt;&#xA;&lt;p&gt;I guess this would be mathematically equal to using the normal of a surface and not care about rotation about the normal?&lt;/p&gt;&#xA;&lt;p&gt;E.g.&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$p(x, y, z) =&amp;gt; q(w,x, y, z)$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$p(1, 0, 0) =&amp;gt; q(1, 0, 0, 0) =&amp;gt; \text{No rotation}$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$p(0, 1,0) =&amp;gt; q(\frac{1}{\sqrt{2}}, 0, 0, \frac{1}{\sqrt{2}})  =&amp;gt; \text{equal to 90deg rotation about Z}$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$p(0, 0, 1) =&amp;gt; q(\frac{1}{\sqrt{2}}, 0, -\frac{1}{\sqrt{2}}, 0)  =&amp;gt; \text{equal to -90deg rotation about Y}$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;How can i solve this?&lt;/p&gt;&#xA;" OwnerUserId="28010" LastActivityDate="2021-02-19T15:13:32.603" Title="Define end-effector quaternion orientation from unit vector" Tags="&lt;orientation&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21814" PostTypeId="1" CreationDate="2021-02-19T12:47:01.963" Score="0" ViewCount="24" Body="&lt;p&gt;I am working on a project where we want a RF transceiver on the AUV for communicating with the ground station when its on the water surface.&lt;/p&gt;&#xA;&lt;p&gt;I am looking for RF modules that can work in proximity to water body and can provide transmission range of 5 km with throughput of 10 Mbps.&lt;/p&gt;&#xA;&lt;p&gt;Can you please suggest me some OEMs that make long range RF transceivers. Also, how do other AUVs use RF with antenna being just some centimetres above from water surface?&lt;/p&gt;&#xA;&lt;p&gt;I talked with one RF OEM, he mentioned that due to fresnel zone clearance issue we cannot have RF communication for than 200 m for antenna being 25 cm above water. He said that for 5 km range the the fresnel zone radius is 10 m so antenna on AUV should be 10 m above water surface which is not feasible in our application.&lt;/p&gt;&#xA;&lt;p&gt;So how do other AUVs have RF communication for long range?&lt;/p&gt;&#xA;" OwnerUserId="28011" LastEditorUserId="9176" LastEditDate="2021-02-27T09:18:16.133" LastActivityDate="2021-03-29T10:01:30.140" Title="What RF transceivers modules are used on AUVs for communication with ground station?" Tags="&lt;communication&gt;&lt;radio-control&gt;&lt;wireless&gt;&lt;wifi&gt;&lt;auv&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21815" PostTypeId="1" CreationDate="2021-02-19T13:51:16.110" Score="0" ViewCount="21" Body="&lt;p&gt;I need to call &lt;code&gt;rs2_project_color_pixel_to_depth_pixel&lt;/code&gt; from Python with synthetic data. The data are generated in Python and do not come directly from the RealSense.&lt;/p&gt;&#xA;&lt;p&gt;The first argument is the depth map of type &lt;code&gt;BufData&lt;/code&gt;. How do I construct a &lt;code&gt;BufData&lt;/code&gt; object in Python from a bytestream or an array? &lt;code&gt;BufData&lt;/code&gt; does not seem to have a Python constructor, and I have not seen a way to get it from another type. &lt;code&gt;BufData&lt;/code&gt; does support the buffer protocol, though it still might need a constructor. Another way would be to construct a frame, which has a method to provide &lt;code&gt;BufData&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The binding to &lt;code&gt;rs2_project_color_pixel_to_depth_pixel&lt;/code&gt; is defined on &lt;a href=&quot;https://github.com/IntelRealSense/librealsense/blob/d8f5d4212df85522a14b4a7b83bf4d54219b06fa/wrappers/python/pyrsutil.cpp#L69&quot; rel=&quot;nofollow noreferrer&quot;&gt;line 69&lt;/a&gt; of &lt;a href=&quot;https://github.com/IntelRealSense/librealsense/blob/d8f5d4212df85522a14b4a7b83bf4d54219b06fa/wrappers/python/pyrsutil.cpp&quot; rel=&quot;nofollow noreferrer&quot;&gt;pyrsutil.cpp&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;BufData&lt;/code&gt; is defined on &lt;a href=&quot;https://github.com/IntelRealSense/librealsense/blob/bc0910f8ba3c33307ff247a29dd2b9e9ef1b269d/wrappers/python/python.hpp#L197&quot; rel=&quot;nofollow noreferrer&quot;&gt;line 197&lt;/a&gt; of &lt;a href=&quot;https://github.com/IntelRealSense/librealsense/blob/bc0910f8ba3c33307ff247a29dd2b9e9ef1b269d/wrappers/python/python.hpp&quot; rel=&quot;nofollow noreferrer&quot;&gt;python.hpp&lt;/a&gt; and the binding apparently on &lt;a href=&quot;https://github.com/IntelRealSense/librealsense/blob/4f37f2ef0874c1716bce223b20e46d00532ffb04/wrappers/python/pyrs_frame.cpp#L8&quot; rel=&quot;nofollow noreferrer&quot;&gt;line 8&lt;/a&gt; of &lt;a href=&quot;https://github.com/IntelRealSense/librealsense/blob/4f37f2ef0874c1716bce223b20e46d00532ffb04/wrappers/python/pyrs_frame.cpp&quot; rel=&quot;nofollow noreferrer&quot;&gt;pyrs_frame.cpp&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="28013" LastEditorUserId="9176" LastEditDate="2021-02-27T09:24:12.180" LastActivityDate="2021-02-27T09:24:12.180" Title="RealSense Python API: Construct BufData or frame" Tags="&lt;cameras&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21816" PostTypeId="1" CreationDate="2021-02-19T13:56:09.277" Score="0" ViewCount="22" Body="&lt;p&gt;What is the technical term for a computer mechanically interfaces another computer? For example a robot mechanically interacting (vs API) with a PC or smartphone as a human would to automatically gather data and making input decisions based on feedback from the device&lt;/p&gt;&#xA;&lt;p&gt;At a software level, it can be like Selenium Webdriver simulating clicks on a web page.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/pxXj3.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/pxXj3.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Possible use cases are&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Quick and dirty way to interface with a proprietary mobile app system to achieve automation interoperability without reverse engineering APIs&lt;/li&gt;&#xA;&lt;li&gt;Software Testing Cases&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I wish to do more research into this. Is there an off the shelf prototype that is available for purchase? Or some schematic that would allow you to device your own, complete with open source APIs? One that fits many device types and brands?&lt;/p&gt;&#xA;" OwnerUserId="28015" LastEditorUserId="28015" LastEditDate="2021-02-19T14:03:51.853" LastActivityDate="2021-03-21T16:01:05.120" Title="Automated Manual Testing / Robot-computer interaction" Tags="&lt;software&gt;&lt;artificial-intelligence&gt;&lt;automation&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21817" PostTypeId="2" ParentId="21813" CreationDate="2021-02-19T15:13:32.603" Score="0" Body="&lt;p&gt;From your examples it seems that you are looking for a rotation that rotates the vector &lt;span class=&quot;math-container&quot;&gt;$(1,0,0)$&lt;/span&gt; to some given unit vector &lt;span class=&quot;math-container&quot;&gt;$(x,y,z)$&lt;/span&gt;. This indeed doesn't define a unique rotation. However, the rotation with the smallest angle of rotation can in most cases be defined uniquely. If desired one could always apply an additional rotation with as rotation axis the &lt;span class=&quot;math-container&quot;&gt;$(x,y,z)$&lt;/span&gt; vector. This shortest rotation can be found using the dot and cross products, which gives&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;\begin{align}&#xA;\cos \theta =&amp;amp; (1,0,0) \cdot (x,y,z) = x, \\&#xA;n \sin\theta =&amp;amp; (1,0,0) \times (x,y,z) = (0,-z,y),&#xA;\end{align}&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;with &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt; the (smallest) angle of rotation and the &lt;span class=&quot;math-container&quot;&gt;$n$&lt;/span&gt; the unit axis of rotation.&lt;/p&gt;&#xA;&lt;p&gt;A unit quaternion, used to describe such rotation can be defined with &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$n$&lt;/span&gt; using&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;q = \left(\cos\theta/2,n\sin\theta/2\right).&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;In order to evaluate the sine and cosine of half the angle one could first calculate &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt; for example using the atan2 function. However, one could also use the following mathematical identities&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;\begin{align}&#xA;\cos \theta/2 =&amp;amp; \sqrt{(1+\cos\theta)/2}, \\&#xA;\sin\theta/2 =&amp;amp; \frac{\sin\theta}{\sqrt{2\,(1+\cos\theta)}}.&#xA;\end{align}&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Substituting this together with the dot and cross products in the unit quaternion expression yields&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;q = \left(\sqrt{\frac{1+x}2},0,\frac{-z}{\sqrt{2\,(1+x)}},\frac{y}{\sqrt{2\,(1+x)}}\right).&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;The identities used do have some sign discrepancies, but when multiplying a unit quaternion by minus one yields another unit quaternion which represents the same rotation. The only thing you need to watch out for is when &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; is equal (or sufficiently close) to minus one. In that case you could pick any axis perpendicular to the x-axis and rotate around that with 180°.&lt;/p&gt;&#xA;" OwnerUserId="1487" LastActivityDate="2021-02-19T15:13:32.603" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21818" PostTypeId="2" ParentId="21816" CreationDate="2021-02-19T15:20:43.147" Score="0" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;Is there an off the shelf prototype that is available for purchase?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Generally, of the shelf robots, there are plenty, specifically for UI testing there are none&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Or some schematic that would allow you to device your own, complete with open source APIs?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Generally schematics/APIs for robots, there are plenty. Specifically for UI testing there are none&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2021-02-19T15:20:43.147" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21819" PostTypeId="2" ParentId="21814" CreationDate="2021-02-19T19:21:56.013" Score="0" Body="&lt;p&gt;I will mention that &lt;a href=&quot;https://en.wikipedia.org/wiki/Fresnel_zone&quot; rel=&quot;nofollow noreferrer&quot;&gt;fresnel zone&lt;/a&gt; issues are no joke.  When the zone is violated either by the ground plane, or other objects, the transmission will be severely attenuated.&lt;/p&gt;&#xA;&lt;p&gt;Note however that the shape of the fresnel zone depends on:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;the frequency used, (higher frequency is a smaller zone)&lt;/li&gt;&#xA;&lt;li&gt;the locations of the antennas, (higher antennas move the zone away from the ground and other objects).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;So using low-frequency transmissions to a low base-station antenna may not work, but high-frequency transmissions to a very high base-station antenna might be ok.&lt;/p&gt;&#xA;&lt;p&gt;Existence proof: the &lt;a href=&quot;https://apl.uw.edu/project/project.php?id=seaglider_auv&quot; rel=&quot;nofollow noreferrer&quot;&gt;Seaglider AUV&lt;/a&gt;.  This &lt;a href=&quot;https://en.wikipedia.org/wiki/Underwater_glider&quot; rel=&quot;nofollow noreferrer&quot;&gt;underwater glider&lt;/a&gt; had an antenna that was over a meter long.  The antenna communicated via satellite link.  (i.e. nearly straight up).&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/yhFVMm.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/yhFVMm.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2021-02-19T19:21:56.013" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21820" PostTypeId="2" ParentId="21687" CreationDate="2021-02-19T21:57:19.677" Score="1" Body="&lt;p&gt;This is basic geometry/trigonometry. Here is an image of your situation (the plane being your turtle bot, and the red circle being your target (&lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt;,&lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt;).&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/sHOBS.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/sHOBS.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;You want your turtle bot to first turn to face the target and then head towards it. So first you need to compute your desired heading (&lt;span class=&quot;math-container&quot;&gt;$\theta_t$&lt;/span&gt;)&lt;/p&gt;&#xA;&lt;p&gt;This is basic trigonometry:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$ tan(\theta_t) = \frac{y_t-y}{x_t - x} \Rightarrow \theta_t = atan(\frac{y_t-y}{x_t - x})$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;So you need to turn your robot of &lt;span class=&quot;math-container&quot;&gt;$\theta - \theta_t$&lt;/span&gt; to face your target first.&lt;/p&gt;&#xA;" OwnerUserId="11462" LastActivityDate="2021-02-19T21:57:19.677" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21821" PostTypeId="1" CreationDate="2021-02-20T17:26:32.210" Score="0" ViewCount="46" Body="&lt;p&gt;New here and to robotics and have encountered my first 2 problems. Following instructions in a book, I have fitted 1 HR-SR04 ultra sound detector but could not get the code given to work, seems to get stuck in the first while loop, so never getting a return time :&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;import gpiozero&#xA;import time&#xA;&#xA;TRIG = 23&#xA;ECHO = 24&#xA;&#xA;trigger = gpiozero.OutputDevice(TRIG)&#xA;echo = gpiozero.DigitalInputDevice(ECHO)&#xA;&#xA;robot = gpiozero.Robot(left=(17,18), right=(27,22))&#xA;&#xA;def get_distance(trigger, echo):&#xA;    trigger.on()&#xA;    time.sleep(0.00001)&#xA;    trigger.off()&#xA;&#xA;    while echo.is_active == False:&#xA;        pulse_start = time.time()&#xA;&#xA;    while echo.is_active == True:&#xA;        pulse_end = time.time()&#xA;&#xA;    pulse_duration = pulse_end - pulse_start&#xA;&#xA;    distance = 34300 * (pulse_duration/2)&#xA;&#xA;    round_distance = round(distance,1)&#xA;&#xA;    return(round_distance)&#xA;&#xA;while True:&#xA;    dist = get_distance(trigger,echo)&#xA;    if dist &amp;lt;= 15:&#xA;        robot.right(0.3)&#xA;        time.sleep(0.25)&#xA;    else:&#xA;        robot.forward(0.3)&#xA;        time.sleep(0.1)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I then found some sample code using RPi.GPIO - which worked,returning values down to 3-4cm, so I know the sensor is ok.&#xA;I also found the GPIOzero docs and tried the following code:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;from gpiozero import DistanceSensor&#xA;from time import sleep&#xA;&#xA;sensor = DistanceSensor(echo=18, trigger=17)&#xA;while True:&#xA;    print('Distance: ', sensor.distance * 100)&#xA;    sleep(1)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This code worked in that it would detect an obstacle, but wouldn't return a value less than 10cm.&lt;/p&gt;&#xA;&lt;p&gt;So my 2 questions (after 2 days of trying to figure this out myself!):&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Why does the first code not work? I have seen almost exactly the same code repeated elsewhere as how to use the sensor but I just cannot get it to work for me.&lt;/li&gt;&#xA;&lt;li&gt;Why does the second code, using gpiozero not return a value less than 10cm?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;I know this is probably very basic stuff, but would greatly appreciate some advice/explanations/pointers.&lt;/p&gt;&#xA;" OwnerUserId="28021" LastActivityDate="2021-03-30T18:07:25.953" Title="HC-SR04 sensor - beginners gpiozero coding problems" Tags="&lt;ultrasonic-sensors&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21822" PostTypeId="1" AcceptedAnswerId="21824" CreationDate="2021-02-20T19:52:44.240" Score="2" ViewCount="62" Body="&lt;p&gt;I've recently enrolled in a Coursera aerial robotics course and i'm trying to understand how the &lt;strong&gt;rate of change&lt;/strong&gt; of the &lt;strong&gt;angular momentum&lt;/strong&gt; is &lt;strong&gt;computed from the inertia frame to the body-fixed frame&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;According to the course:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/5TqLo.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/5TqLo.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;From this picture, we can see that the &lt;strong&gt;rate of change of the angular momentum&lt;/strong&gt; in the &lt;strong&gt;inertial frame&lt;/strong&gt; (denoted with the super-script A) of the &lt;strong&gt;center of mass&lt;/strong&gt; (denoted with the sub-script C) &lt;strong&gt;is equal to the net moment&lt;/strong&gt; generated by a quad-rotor.&lt;/p&gt;&#xA;&lt;p&gt;By computing this quantity in the &lt;strong&gt;body-fixed frame&lt;/strong&gt;, this is translated to the &lt;strong&gt;rate of change of the angular momentum in the body-fixed frame&lt;/strong&gt; (denoted with super-script B) &lt;strong&gt;plus a correction factor&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;This &lt;strong&gt;correction factor&lt;/strong&gt; is equal to the &lt;strong&gt;cross product&lt;/strong&gt; of the &lt;strong&gt;angular velocity of the body B&lt;/strong&gt; (denoted with the super-script B) in the &lt;strong&gt;inertial frame&lt;/strong&gt; (denoted with the super-script A) with the &lt;strong&gt;angular momentum itself&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The professor talks about this &lt;strong&gt;correction factor&lt;/strong&gt; as a &lt;strong&gt;well-known correction factor&lt;/strong&gt; used in mechanics / kinematics and this i can't find anywhere in the net and doesn't seem to be very obvious to me.&lt;/p&gt;&#xA;&lt;p&gt;Can you explain me the origin of that &lt;strong&gt;correction factor&lt;/strong&gt; or maybe give me a resource i can document myself on ?&lt;/p&gt;&#xA;&lt;p&gt;Thanks in advance.&lt;/p&gt;&#xA;" OwnerUserId="27968" LastActivityDate="2021-02-21T02:54:17.067" Title="Inertial frame VS Body-fixed frame momentum correction factor" Tags="&lt;quadcopter&gt;&lt;kinematics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21823" PostTypeId="1" CreationDate="2021-02-20T20:44:08.387" Score="1" ViewCount="33" Body="&lt;p&gt;i am currently building up a EKF SLAM. I dont know where my mistake is but i think it has something to do with the angle my robot is driving towards but im not completly sure. First i thought it could be a failure in Data association and new cone placement but in the picture below you can see the trajectorie my robot is driving when the positions are already known! So it´s basically just localization with a lidar sensor at the moment. I use the atan2 function. I would really appreciate your help, thanks!&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/x3Cj5.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/x3Cj5.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is currently my code for calculating the current angle from landmark to robot. I actually tried to play the atan2 function a bit and change it so it gives me negative values if x_local(3,1) [theta] crosses -pi but it didnt seem to improve very much. It still had areas like this.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    %LIDAR&#xA;%Nonlinear differential equations of the localization estimation problem&#xA;sigmax = cone_positions_cell{1,1}(cone_positions_cell{1,4}(j,1),1) - x_local(1,1); %X-position robot&#xA;sigmay = cone_positions_cell{1,1}(cone_positions_cell{1,4}(j,1),2) - x_local(2,1); %y-position robot&#xA;&#xA;estimated_distance = sqrt(sigmax^2+sigmay^2);&#xA;lidar_angle = atan2((sigmay),(sigmax)); &#xA;&#xA;estimated_angle = lidar_angle - x_local(3,1); %x_local(3,1) is the robot´s angle&#xA;&#xA;nonlinear_h = [estimated_distance; estimated_angle];&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="27965" LastEditorUserId="27965" LastEditDate="2021-02-20T21:49:38.360" LastActivityDate="2021-02-20T21:49:38.360" Title="SLAM - Angle calculation failure ?-EKF" Tags="&lt;slam&gt;&lt;localization&gt;&lt;ekf&gt;&lt;filter&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21824" PostTypeId="2" ParentId="21822" CreationDate="2021-02-21T02:54:17.067" Score="1" Body="&lt;p&gt;The cross-product correction factor shows up any time we take the time derivative of a vector described in a moving frame.&lt;/p&gt;&#xA;&lt;p&gt;When I teach this topic in my classes, I generally introduce it when talking about taking time derivatives of position vectors, because it's easier to visualize in that situation:&lt;/p&gt;&#xA;&lt;p&gt;Start by considering the positions of two points &lt;span class=&quot;math-container&quot;&gt;$A$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$B$&lt;/span&gt;, denoted by vectors &lt;span class=&quot;math-container&quot;&gt;$\vec{r}_{A}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\vec{r}_{B}$&lt;/span&gt;. We can then take the relative position of &lt;span class=&quot;math-container&quot;&gt;$B$&lt;/span&gt; with respect to &lt;span class=&quot;math-container&quot;&gt;$A$&lt;/span&gt; as a vector &lt;span class=&quot;math-container&quot;&gt;$\vec{r}_{B/A} = \vec{r}_{B}-\vec{r}_{A}$&lt;/span&gt; such that &lt;span class=&quot;math-container&quot;&gt;$\vec{r}_{B} = \vec{r}_{A} + \vec{r}_{B/A}$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Now let's say that the vector &lt;span class=&quot;math-container&quot;&gt;$\vec{r}_{B/A}$&lt;/span&gt; is fundamentally defined in a frame whose orientation is encoded by a rotation matrix &lt;span class=&quot;math-container&quot;&gt;$R_{AB}$&lt;/span&gt;, such that &lt;span class=&quot;math-container&quot;&gt;$\vec{r}_{B/A}=R_{AB}\ \vec{r}_{B/A}'$&lt;/span&gt; (where &lt;span class=&quot;math-container&quot;&gt;$'$&lt;/span&gt; indicates a vector defined in the rotated frame).&lt;/p&gt;&#xA;&lt;p&gt;If we take the time derivative of the position of &lt;span class=&quot;math-container&quot;&gt;$B$&lt;/span&gt;, we then get&#xA;&lt;span class=&quot;math-container&quot;&gt;\begin{equation}&#xA;\frac{d}{dt} \vec{r}_{B} = \frac{d}{dt} \vec{r}_{A} + \left(\frac{d}{dt} R_{AB}\right)\ \vec{r}_{B/A}' + R_{AB} \left(\frac{d}{dt} \vec{r}_{B/A}'\right).&#xA;\end{equation}&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;The time derivative of a rotation matrix is the product of its rotational velocity with itself, &lt;span class=&quot;math-container&quot;&gt;$\frac{d}{dt} R_{AB} = \vec{\Omega}_{AB} \times R_{AB}$&lt;/span&gt;, such that the total time derivative can be regrouped as&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\frac{d}{dt} \vec{r}_{B} = \frac{d}{dt} \vec{r}_{A} + \vec{\Omega}_{AB} \times \left(\vphantom{\frac{d}{dt}}R_{AB}\ \vec{r}_{B/A}'\right) + R_{AB} \left(\frac{d}{dt} \vec{r}_{B/A}'\right).&#xA;$$&lt;/span&gt;&#xA;If you think of &lt;span class=&quot;math-container&quot;&gt;$A$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$B$&lt;/span&gt; as being points on a piece of paper, the first term in the expansion says how the paper is moving at point &lt;span class=&quot;math-container&quot;&gt;$A$&lt;/span&gt;, which transfers to how it is moving at point &lt;span class=&quot;math-container&quot;&gt;$B$&lt;/span&gt;. The second term describes how rotation of the paper makes point &lt;span class=&quot;math-container&quot;&gt;$B$&lt;/span&gt; orbit around &lt;span class=&quot;math-container&quot;&gt;$A$&lt;/span&gt;, and the third term describes how point &lt;span class=&quot;math-container&quot;&gt;$B$&lt;/span&gt; moves on the paper relative to point &lt;span class=&quot;math-container&quot;&gt;$A$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;For your angular momentum problem, you can think of the angular momentum as a &amp;quot;free vector&amp;quot;, i.e., saying that we only want the &lt;span class=&quot;math-container&quot;&gt;$\vec{r}_{B/A}$&lt;/span&gt; component and not the &lt;span class=&quot;math-container&quot;&gt;$\vec{r}_{A}$&lt;/span&gt; component. When we take the time derivative, we then get the latter two terms from the full equation, and thus the &amp;quot;time derivative as seen in the frame&amp;quot; plus the &amp;quot;frame-rotation cross product&amp;quot; terms.&lt;/p&gt;&#xA;&lt;p&gt;In the standard expression from within the body frame, we then multiply all the terms by &lt;span class=&quot;math-container&quot;&gt;${R}^{-1}_{AB}$&lt;/span&gt;. By a bit of algebra that I won't go into right now, it works out that&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;{R}^{-1}_{AB}\left[\vec{\Omega}_{AB} \times \left(\vphantom{\frac{d}{dt}}R_{AB}\ \vec{r}_{B/A}'\right)\right] = \vec{\Omega}_{AB}' \times  \vec{r}_{B/A}'&#xA;$$&lt;/span&gt;&#xA;so that&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;{R}^{-1}_{AB} \left(\frac{d}{dt} \vec{r}_{B}\right) = {R}^{-1}_{AB}\left(\frac{d}{dt} \vec{r}_{A}\right) + \vec{\Omega}_{AB}' \times  \vec{r}_{B/A}' +\frac{d}{dt} \vec{r}_{B/A}',&#xA;$$&lt;/span&gt;&#xA;in which the last two terms are the standard expression for the derivative of a free vector expressed in a rotating set of coordinates.&lt;/p&gt;&#xA;" OwnerUserId="11712" LastActivityDate="2021-02-21T02:54:17.067" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21826" PostTypeId="2" ParentId="21821" CreationDate="2021-02-21T20:30:00.987" Score="0" Body="&lt;p&gt;Your code looks fine but maybe the problem is about your circuit. I dont know if you did but you should connect a voltage divider to HC SR04's Echo pin. The reason for this is that the sensor works at 5V but your Raspberry is working at 3.3V. You can use 2K and 1K resistor with 2K is the one connected to GND.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/Eakhr.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Eakhr.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="27764" LastActivityDate="2021-02-21T20:30:00.987" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21827" PostTypeId="1" AcceptedAnswerId="21832" CreationDate="2021-02-22T06:25:50.423" Score="0" ViewCount="30" Body="&lt;p&gt;If this is not the right community please point me in the right direction.&lt;/p&gt;&#xA;&lt;p&gt;I am looking for a speed measuring wheel similar to the one in the picture..&lt;/p&gt;&#xA;&lt;p&gt;What is it called?&lt;/p&gt;&#xA;&lt;p&gt;I have googled for a description and used an image search for google but can't find a wheel that's the same.&lt;/p&gt;&#xA;&lt;p&gt;It is for a Square Meter measuring table in our factory. Everywhere we ask they want to supply us with an encoder that is directly connected to the wheel. This means the encoder is spinning the whole time. We don't want this setup.&#xA;What were looking for is a wheel that can be used by the pickup sensor that is connected to the bracket, and the wheel must have its own bearing.&#xA;I have added descriptions on the image.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/pzWdp.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/pzWdp.jpg&quot; alt=&quot;Pickup Sensor with Wheel&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="28028" LastActivityDate="2021-02-24T16:02:19.487" Title="Looking for a wheel" Tags="&lt;sensors&gt;&lt;wheel&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="21830" PostTypeId="1" AcceptedAnswerId="21947" CreationDate="2021-02-23T22:21:51.003" Score="0" ViewCount="46" Body="&lt;p&gt;I'm working with the iRobot Create 2. When I read the encoder count and sum it for total, I'm able to do so without apparent error. I've used this to 'successfully' estimate position combining with heading from a gyro. However, when I try to estimate velocity from the encoder count, the signal seems pretty noisy.&lt;/p&gt;&#xA;&lt;p&gt;I'll get maybe 10-15 values that are expected, and then a random outlier or two. For example: If I set the wheels to 100 mm/s and calculate the change of time between cycles (which also appears to agree with the sample time i've set of 0.017s), maybe 10-14 values will be within +-10 of 100mm/s, but then I'll get a one or two values that differ by +-50-100 mm/s.&lt;/p&gt;&#xA;&lt;p&gt;Is this normal and I'll need to filter for a better estimation, or could there be a possible timing issue? The only thing that really impacts the program speed is the checksum used to initially discard corrupted packets.&lt;/p&gt;&#xA;" OwnerUserId="27911" LastEditorUserId="110" LastEditDate="2021-02-24T14:13:39.267" LastActivityDate="2021-03-27T05:52:52.160" Title="Is this encoder error expected?" Tags="&lt;ros&gt;&lt;irobot-create&gt;&lt;serial&gt;&lt;c&gt;&lt;estimation&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21831" PostTypeId="2" ParentId="21830" CreationDate="2021-02-24T08:36:36.687" Score="1" Body="&lt;p&gt;This might be &amp;quot;normal&amp;quot;, depending on how the signal is acquired. Whenever a signal is derived, timing of the signal acquisition is crucial.&lt;/p&gt;&#xA;&lt;p&gt;Counting ticks is not time sensitive, as it does not matter if one tick is acquires a few microseconds later or earlier, what matter is, that it is acquired.&lt;/p&gt;&#xA;&lt;p&gt;For deriving a velocity from the ticks of an encoder, we need to know exactly when the tick happened. Given a constant velocity of 100 mm/s, we can assume a wheel circumference of 100mm, meaning 1 rotation per second. If an encoder has 1024 ticks per rotation, translates to approximately 1 tick every millisecond.&lt;/p&gt;&#xA;&lt;p&gt;So if we do the calculation backwards, 1024 translates to 100mm/s, to make the calculations easier let us assume 1 tick translates to 0.1mm movement.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;1 tick every 1 millisecond translating to 0.1 mm movement every millisecond.&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;In order to calculate the velocity for every tick, means that we need to measure the time between ticks, which translates to registering the exact time of the tick event or stating a timer and stopping a timer at tick events. The precision of the time measurement can be influenced by:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;The timer precision. If the timer has a millisecond precision, that, in an extreme worst case could mean that we have 0 registered milliseconds between two ticks resulting in an unfeasible velocity. A 0.1 millisecond precision of the timer would mean a 10% precision of the velocity for the example above&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The event detection. Before we get to start top timers or register time, we need to actually detect the event. If the encoder can trigger hardware interrupts, that translates to starting the interrupt routine at clock frequency (e.g. 8Mhz for a microcontroller). If we are regularly polling the state of the encoder, the polling rate has a major influence on the precision. If we are polling with 0.1 milliseconds the extreme worst case is that we register the tick event 0.1 ms late, but we register the next tick exactly at the right moment. So 0.1 ms polling would lead to a 10% precision on the velocity for the example above.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2021-02-24T08:36:36.687" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21832" PostTypeId="2" ParentId="21827" CreationDate="2021-02-24T16:02:19.487" Score="0" Body="&lt;p&gt;The device you're looking for is called a &lt;a href=&quot;https://en.wikipedia.org/wiki/Hall-effect_sensor&quot; rel=&quot;nofollow noreferrer&quot;&gt;Hall-effect sensor&lt;/a&gt;. There's a decent video on how they work &lt;a href=&quot;https://www.youtube.com/watch?v=wpAA3qeOYiI&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;, and they're commonly used as crankshaft and camshaft position sensors in vehicles.&lt;/p&gt;&#xA;&lt;p&gt;A typical Hall-effect sensor will only send a pulse when the magnetic/ferrous object passes by the sensor, so you've got no way to determine direction. If you want to determine direction, too, then you should look for a Hall-effect &lt;a href=&quot;https://en.wikipedia.org/wiki/Incremental_encoder#Quadrature_outputs&quot; rel=&quot;nofollow noreferrer&quot;&gt;quadrature encoder&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2021-02-24T16:02:19.487" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21833" PostTypeId="1" CreationDate="2021-02-24T19:37:40.263" Score="0" ViewCount="18" Body="&lt;p&gt;i want to implement an UKF Filter for SLAM but i cant seem to wrap around the update step.&lt;/p&gt;&#xA;&lt;p&gt;When computing the innovation matrices and everything, do i need to compute the sigma points in respect to every landmark in the state vector or can i just select the few ones that actually got observed in the timestep? I know that in the EKF the specific landmark gets picked and then gets projected into the higher dimensions later on. How is it done in UKF?&lt;/p&gt;&#xA;" OwnerUserId="27965" LastEditorUserId="27965" LastEditDate="2021-02-24T19:51:16.160" LastActivityDate="2021-02-24T19:51:16.160" Title="UKF - Correction Step [SLAM] - Only compute the sigma point of the vehicle pose and the specific landmark that got spotted?" Tags="&lt;mobile-robot&gt;&lt;kalman-filter&gt;&lt;ekf&gt;&lt;estimation&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21834" PostTypeId="1" CreationDate="2021-02-24T21:27:58.460" Score="1" ViewCount="43" Body="&lt;p&gt;I was reading about the SLAM problem in a research paper, &lt;a href=&quot;http://www.roboticsproceedings.org/rss01/p27.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;Multi-robot Simultaneous Localization and Mapping using Particle Filters&lt;/a&gt; by Andrew Howard.&lt;/p&gt;&#xA;&lt;p&gt;What does '&lt;span class=&quot;math-container&quot;&gt;$m$&lt;/span&gt;' mean here?&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The SLAM problem for a single robot is treated as follows.&lt;/p&gt;&#xA;&lt;p&gt;Let &lt;span class=&quot;math-container&quot;&gt;$x_{1:t}$&lt;/span&gt; denote a sequence of robot poses at times 1, 2, ...t,&#xA;let &lt;span class=&quot;math-container&quot;&gt;$z_{1:t}$&lt;/span&gt; denote a corresponding sequence of observations, and let&#xA;&lt;span class=&quot;math-container&quot;&gt;$u_{0:t−1}$&lt;/span&gt; denote the sequence of actions executed by the robot.&lt;/p&gt;&#xA;&lt;p&gt;Our (intermediate) aim is to compute the posterior probability&#xA;&lt;span class=&quot;math-container&quot;&gt;$p(x_{1:t}, m | z_{1:t}, u_{0:t−1}, x_0)$&lt;/span&gt; over the robot trajectory&#xA;&lt;span class=&quot;math-container&quot;&gt;$x_{1:t}$&lt;/span&gt; and map &lt;span class=&quot;math-container&quot;&gt;$m$&lt;/span&gt;, given some initial pose &lt;span class=&quot;math-container&quot;&gt;$x_0$&lt;/span&gt;. We write this as&#xA;the product of two factors:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$p(x_{1:t}, m | z_{1:t}, u_{0:t−1}, x_0) = p(m | x_{1:t}, z_{1:t},&#xA;&amp;gt; u_{0:t−1}, x_0)p(x_{1:t} | z_{1:t}, u_{0:t−1}, x_0)$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="27245" LastEditorUserId="9176" LastEditDate="2021-02-27T13:51:59.750" LastActivityDate="2021-03-02T13:49:36.070" Title="Doubt regarding a slam parameter in research paper" Tags="&lt;slam&gt;&lt;research&gt;" AnswerCount="2" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21835" PostTypeId="2" ParentId="21834" CreationDate="2021-02-24T21:30:24.283" Score="0" Body="&lt;p&gt;It represents the map. It is mentioned above the product.&lt;/p&gt;&#xA;" OwnerUserId="27245" LastEditorUserId="9176" LastEditDate="2021-02-27T09:35:17.990" LastActivityDate="2021-02-27T09:35:17.990" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21836" PostTypeId="1" AcceptedAnswerId="21868" CreationDate="2021-02-24T21:35:38.007" Score="0" ViewCount="30" Body="&lt;p&gt;&lt;strong&gt;I would like to learn, how to find proper kinematic model of robot in mathematical form.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;For example:&lt;/p&gt;&#xA;&lt;p&gt;I would like to create a model of a car, from which I could compute its position and rotation at given time steps.&lt;/p&gt;&#xA;&lt;p&gt;Assume Ackerman steering system and knowns &lt;em&gt;l, w&lt;/em&gt; (see picture)&lt;/p&gt;&#xA;&lt;p&gt;Inputs are:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;constant speed of wheels's rolling&lt;/li&gt;&#xA;&lt;li&gt;variable velocity of wheels's steering&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;I found similar problem here &lt;a href=&quot;https://math.stackexchange.com/questions/3055263/path-of-a-simple-turning-car&quot;&gt;path-of-a-simple-turning-car&lt;/a&gt;. I think principal is the same, &lt;strong&gt;but my question is what are the steps to find proper model&lt;/strong&gt;. I understand the equations in the link, but I would not be able to make them on my own and slight change in geometry of robot  would confuse me.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Bw9yT.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Bw9yT.png&quot; alt=&quot;car&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="28049" LastEditorUserId="28049" LastEditDate="2021-03-02T20:24:22.743" LastActivityDate="2021-03-04T21:07:45.947" Title="How to find mathematical model of a wheeled robot (to compute robot's trajectory at given time steps) including its kinematic" Tags="&lt;motion-planning&gt;&lt;path-planning&gt;&lt;geometry&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21837" PostTypeId="1" CreationDate="2021-02-25T08:32:54.973" Score="0" ViewCount="20" Body="&lt;p&gt;I have the following task: to select all the individual items in the RGB image into separate segments, and among these items there may be items that have not been used before. I have attached an example RGB and Depth image of the scene.&lt;/p&gt;&#xA;&lt;p&gt;I have conducted my own review of existing articles in this area. This article shows very good results: &lt;a href=&quot;https://arxiv.org/pdf/2007.15157.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://arxiv.org/pdf/2007.15157.pdf&lt;/a&gt;. In it, the authors used a pre-trained neural network as a feature extractor (since it already has weights configured to highlight image properties). Then, using this neural network, they obtained a feature map, and then clustered the resulting image and thus allocated segments.&lt;/p&gt;&#xA;&lt;p&gt;The question is: what training data can be used to train this neural network? And how to get a single featuremap, because the neural network has several feature maps stored in filters. Unfortunately, the authors of this article do not respond to me by Email, perhaps the community will have guesses?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/VwSha.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/VwSha.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/8Tr9g.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8Tr9g.png&quot; alt=&quot;Typical RGB-image of the scene&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/q359T.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/q359T.png&quot; alt=&quot;Typical Depth-image of the scene&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="27899" LastActivityDate="2021-02-25T08:32:54.973" Title="Unseen object segmentation problem" Tags="&lt;computer-vision&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21838" PostTypeId="1" CreationDate="2021-02-26T05:45:57.123" Score="0" ViewCount="55" Body="&lt;p&gt;I’ve got a few servo motors MG995, MG996R, etc.&lt;/p&gt;&#xA;&lt;p&gt;For my make I need a servo to have a longer shaft – 6cm or so.&lt;/p&gt;&#xA;&lt;p&gt;I cannot find a way to achieve it.&#xA;There is lots of Shaft Coupler for steppers and DC motors in the shop. But they don’t suite a servo motor shaft which is short.&lt;/p&gt;&#xA;&lt;p&gt;Does anybody know how to solve this problem?&lt;/p&gt;&#xA;" OwnerUserId="28056" LastActivityDate="2021-02-28T17:32:04.500" Title="Make servo's shaft longer" Tags="&lt;motor&gt;&lt;servomotor&gt;" AnswerCount="2" CommentCount="5" ClosedDate="2021-03-05T12:50:53.447" ContentLicense="CC BY-SA 4.0" />
  <row Id="21839" PostTypeId="2" ParentId="21838" CreationDate="2021-02-26T09:03:19.133" Score="1" Body="&lt;p&gt;This is something I used in a Lego assembly some time back. It's using an FS90 servo which is considerably smaller than the one you list, but You can get the picture. This version of gluing things on, allows some amount of disassembly and reuse. Other glue jobs are not equally as graceful.&lt;/p&gt;&#xA;&lt;p&gt;To get the servo horn screw in, I had to knock off the corners of the shaft hole in the Lego piece that is glued to the horn. Then the next piece gives good engagement to the shaft.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/6H7iY.jpg&quot; alt=&quot;Assembled Lego servo shaft adapter&quot; /&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/dPBPK.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dPBPK.jpg&quot; alt=&quot;Parts Detail&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="28057" LastActivityDate="2021-02-26T09:03:19.133" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21840" PostTypeId="1" CreationDate="2021-02-26T17:59:04.867" Score="1" ViewCount="66" Body="&lt;p&gt;I am a student studying in 11th grade.&lt;/p&gt;&#xA;&lt;p&gt;I have some knowledge about python (more than what an ordinary student in 12th grade will have). I also have some knowledge of C# as I have been creating games with unity using C#.&lt;/p&gt;&#xA;&lt;p&gt;But, I have no knowledge of C++ and I am planning to start learning ROS. I do not have any knowledge about where to start. Just have read a bunch of articles online which made me very confused for where to begin.&lt;/p&gt;&#xA;&lt;p&gt;Should I start learning ROS with python only or should I first learn C++ as it is more efficient? As a school student, I literally have no money so I cannot buy paid content. It will be very grateful if you will suggest me some free content online to begin my Journey with ROS. Is there any good book that I can start reading? ...&lt;/p&gt;&#xA;" OwnerUserId="28063" LastEditorUserId="19143" LastEditDate="2021-02-27T05:46:34.057" LastActivityDate="2021-02-27T05:46:34.057" Title="Learning ROS for Absolute Beginners in Robotics" Tags="&lt;ros&gt;&lt;programming-languages&gt;&lt;beginner&gt;" AnswerCount="1" CommentCount="5" ClosedDate="2021-03-08T18:07:25.993" ContentLicense="CC BY-SA 4.0" />
  <row Id="21841" PostTypeId="2" ParentId="21840" CreationDate="2021-02-26T21:57:38.700" Score="1" Body="&lt;p&gt;Welcome to the ROS world :).&#xA;Definitely, stick with python in learning ROS. You'll learn C++ with time and adapt your ROS knowledge to it.&lt;/p&gt;&#xA;&lt;p&gt;You'll find a lot of very good tutorials online, starting with the ROS ownd tutorials.&lt;/p&gt;&#xA;&lt;p&gt;You should learn the basics: topics, services, actions.&lt;/p&gt;&#xA;&lt;p&gt;As I often like to teach it, ROS is 3 things:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;a middleware that allows multiple process to communicate together via topics, services, actions&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;a set of visual tools for debugging (RViz, RQT ...)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;a community of developers that propose a thousands of open source packages that already implement a lot of robot functions.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;For references, you'll find many free books online. A quick google search gaves me the following results:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://vladestivill-castro.net/teaching/robotics.d/READINGS/Learning%20ROS%20for%20Robotics%20Programming%20%5beBook%5d.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://vladestivill-castro.net/teaching/robotics.d/READINGS/Learning%20ROS%20for%20Robotics%20Programming%20%5beBook%5d.pdf&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.cse.sc.edu/%7Ejokane/agitr/agitr-letter.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.cse.sc.edu/~jokane/agitr/agitr-letter.pdf&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;But my all time favorite is the &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/1449323898&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;Programming Robotics with ROS by Morgan Quigley&lt;/a&gt;.. If you had to read one book, that would be my go to book.&lt;/p&gt;&#xA;" OwnerUserId="11462" LastActivityDate="2021-02-26T21:57:38.700" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21843" PostTypeId="2" ParentId="21838" CreationDate="2021-02-28T17:32:04.500" Score="0" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/bl1UW.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/bl1UW.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I'd use a bolt or something. I had this issue with the MG995. A 3mm bolt will fit snug into the hole, maybe use some nuts to add spacing?&lt;/p&gt;&#xA;" OwnerUserId="28074" LastActivityDate="2021-02-28T17:32:04.500" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21844" PostTypeId="2" ParentId="21821" CreationDate="2021-02-28T17:39:58.213" Score="0" Body="&lt;p&gt;In addition to what Yahya said, An arduino does a way better job of controlling sensors than an RPi does. I would personally use an arduino to get the sensor values and send that to the RPi for processing.&lt;/p&gt;&#xA;" OwnerUserId="28074" LastActivityDate="2021-02-28T17:39:58.213" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21846" PostTypeId="1" AcceptedAnswerId="21858" CreationDate="2021-02-28T23:28:28.193" Score="1" ViewCount="52" Body="&lt;p&gt;I'm following a robotics course on coursera which talks about aerial robotics and more specifically quadrotors.&lt;/p&gt;&#xA;&lt;p&gt;I'm trying to understand the logic behind the relationship between the angular velocity expressed in the Inertial frame and the rates of change of the euler angles expressed in the body-fixed frame which are collected using an IMU sensor.&lt;/p&gt;&#xA;&lt;p&gt;Basically in the course, the answer is given as shown below, but unfortunatly, nothing is explained.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/MAvFz.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MAvFz.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I decided to look arround in the internet in order to understand the origin behind this inbetween matrix which converts one angular velocity to another and came up with very convenients explanations in these articles:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.wilselby.com/research/arducopter/modeling/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Wilselby Article&lt;/a&gt;&#xA;&lt;a href=&quot;http://www.chrobotics.com/library/understanding-euler-angles&quot; rel=&quot;nofollow noreferrer&quot;&gt;Chrobotics Article&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;After understanding the idea behind this transformation matrix, which is the fact that each angular need to be reversed to a specific intermediate reference frame, which also depends on which convention we consider (Z-Y-X convention, Z-X-Y convention, ...) which is makes sense since changing the convention would mean that a specific euler angle would have a different reference frame to be reversed to afterwards.&lt;/p&gt;&#xA;&lt;p&gt;In my course, the convention used is the Z-X-Y convention. I decided then to prove and compute the provided matrix in the course's picture with the help of Matlab. Below is the matrix i got from my Matlab program:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;angularRotation =&#xA;&#xA;[  cos(theta), 0, cos(phi)*sin(theta)]&#xA;[           0, 1,           -sin(phi)]&#xA;[ -sin(theta), 0, cos(phi)*cos(theta)]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;You can see that the result is exactly the same as shown in the picture, &lt;strong&gt;except some components are in a incorrect sign&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Below is my Matlab program:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;syms psi theta phi real&#xA;&#xA;yaw = [cos(psi), -sin(psi), 0; sin(psi), cos(psi), 0; 0, 0, 1]&#xA;pitch = [1 0 0; 0 cos(phi) -sin(phi); 0 sin(phi) cos(phi)]&#xA;roll = [cos(theta) 0 sin(theta); 0 1 0; -sin(theta) 0 cos(theta)]&#xA;&#xA;angularRotation_1 = roll * pitch * [0 0 1]' * [0 0 1]&#xA;angularRotation_2 = roll * [1 0 0]' * [1 0 0]&#xA;angularRotation_3 = [0 1 0]' * [0 1 0]&#xA;&#xA;angularRotation = angularRotation_1 + angularRotation_2 + angularRotation_3&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;In any case the full Matlab log is needed, here it is:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;yaw =&#xA;&#xA;[ cos(psi), -sin(psi), 0]&#xA;[ sin(psi),  cos(psi), 0]&#xA;[        0,         0, 1]&#xA;&#xA;&#xA;pitch =&#xA;&#xA;[ 1,        0,         0]&#xA;[ 0, cos(phi), -sin(phi)]&#xA;[ 0, sin(phi),  cos(phi)]&#xA;&#xA;&#xA;roll =&#xA;&#xA;[  cos(theta), 0, sin(theta)]&#xA;[           0, 1,          0]&#xA;[ -sin(theta), 0, cos(theta)]&#xA;&#xA;&#xA;angularRotation_1 =&#xA;&#xA;[ 0, 0, cos(phi)*sin(theta)]&#xA;[ 0, 0,           -sin(phi)]&#xA;[ 0, 0, cos(phi)*cos(theta)]&#xA;&#xA;&#xA;angularRotation_2 =&#xA;&#xA;[  cos(theta), 0, 0]&#xA;[           0, 0, 0]&#xA;[ -sin(theta), 0, 0]&#xA;&#xA;&#xA;angularRotation_3 =&#xA;&#xA; 0     0     0&#xA; 0     1     0&#xA; 0     0     0&#xA;&#xA;&#xA;angularRotation =&#xA;&#xA;[  cos(theta), 0, cos(phi)*sin(theta)]&#xA;[           0, 1,           -sin(phi)]&#xA;[ -sin(theta), 0, cos(phi)*cos(theta)]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Thanks in advance.&lt;/p&gt;&#xA;" OwnerUserId="27968" LastActivityDate="2021-03-03T02:15:07.260" Title="Inertial frame's angular velocity expression" Tags="&lt;quadcopter&gt;&lt;kinematics&gt;&lt;matlab&gt;&lt;rotation&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21847" PostTypeId="1" CreationDate="2021-03-01T09:40:20.377" Score="0" ViewCount="63" Body="&lt;p&gt;I am building a robot rover comprised of dual DC motors each with hall sensors to obtain rotaional speed. I currently have a PID controller for each DC motor that is able to control the speed of the rover.. ie. I can provide a setpoint and the rover will move forward at a steady speed.&lt;/p&gt;&#xA;&lt;p&gt;The next step is that I want to tel the Robot to move forward a certain distance. I'm thinking the approach here is to use a outer PID loop running at a much lower rate, taking a cumulative measuerment from the hall sensor to determin the distance traveled from the start point. The output would feed the inner PID loop for the motors.&lt;/p&gt;&#xA;&lt;p&gt;Is this the right approach ?&lt;/p&gt;&#xA;&lt;p&gt;My concern is that i've used the input from the hall sensors in two place, is one of these redundant for example ?&lt;/p&gt;&#xA;" OwnerUserId="17566" LastActivityDate="2021-03-04T23:06:19.913" Title="PID controller for motor speed control and distance control" Tags="&lt;motor&gt;&lt;pid&gt;&lt;wheeled-robot&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21848" PostTypeId="2" ParentId="21847" CreationDate="2021-03-01T10:09:21.360" Score="2" Body="&lt;p&gt;The approach is the right beginning. The term for it is &lt;a href=&quot;https://en.wikipedia.org/wiki/Dead_reckoning&quot; rel=&quot;nofollow noreferrer&quot;&gt;dead reckoning&lt;/a&gt;. It has some problems regarding its precision. Next steps in increasing precision would be sensor adding optical flow or other sources for distance travelled some using sensor fusion technique.&lt;/p&gt;&#xA;&lt;p&gt;You do not have a redundancy problem. If you use the same sensor signal and transform it into something else it will not be redundant. You would need to have redundancy later, to increase precision. E.g. you get another signal measuring position, now you have redundancy, and it is good to have redundancy in this case, because you can (probably) increase precision.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2021-03-01T10:09:21.360" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21849" PostTypeId="1" AcceptedAnswerId="21850" CreationDate="2021-03-01T19:53:44.457" Score="1" ViewCount="26" Body="&lt;p&gt;Let's say I have a robot arm with a force-torque sensor on the wrist, between the final motor and the gripper. If the arm and wrist are stationary, then what would the reading on the sensor be?&lt;/p&gt;&#xA;&lt;p&gt;I know this might sound like a silly question, but I don't understand which of the following would be true:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The reading would be g (gravity), since the only force acting on the sensor is gravity.&lt;/li&gt;&#xA;&lt;li&gt;The reading would be g + w, where w is the weight of the gripper, because both gravity and the gripper's weight are acting on the sensor.&lt;/li&gt;&#xA;&lt;li&gt;The reading would be 0, because whilst g + w are acting down on the sensor, since the arm is stationary, there must be an equal an opposite upward force applied by the robot, which exactly cancels out the downwards force.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Which of these is correct? And consequently, why are the other two not correct?&lt;/p&gt;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="8880" LastActivityDate="2021-03-01T20:06:09.740" Title="Force-torque sensor reading when a robot is stationary" Tags="&lt;sensors&gt;&lt;manipulator&gt;&lt;torque&gt;&lt;force&gt;&lt;force-sensor&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21850" PostTypeId="2" ParentId="21849" CreationDate="2021-03-01T20:06:09.740" Score="3" Body="&lt;p&gt;The answer is &lt;span class=&quot;math-container&quot;&gt;$\vec{G}$&lt;/span&gt;! and also any &lt;span class=&quot;math-container&quot;&gt;$\vec{\tau}$&lt;/span&gt; torque caused by it, if the axis connecting the geometrical center of the sensor (assuming it measures torques relative to its geometrical center) to the centre of gravity of the gripper.&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\vec{G} = m * \vec{g}$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;where &lt;span class=&quot;math-container&quot;&gt;$m$&lt;/span&gt; is the mass of the gripper, &lt;span class=&quot;math-container&quot;&gt;$g$&lt;/span&gt; is the gravitational ACCELERATION, not force and G is the gravitational pull (force) on the gripper.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2021-03-01T20:06:09.740" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="21851" PostTypeId="1" CreationDate="2021-03-01T20:32:20.260" Score="0" ViewCount="47" Body="&lt;p&gt;I'm designing a piston that I need to expand a few cm in &amp;lt;100ms to load energy into a spring-mass system with around a pound of force (as shown below). Based on power specs alone, high-end hobby servos are light, strong and cheap enough for my needs: they simulate well when I'm able to push max voltage into them right away (i.e. operating them on the max torque-speed curve).&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/uGJLD.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/uGJLD.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;What I'm concerned about is the torque behavior in real-world servos. I'm interested in digital high-torque, high-frequency servos, typically used for steering in RC vehicles, that are either coreless or brushless. As a representative example, consider something like the &lt;a href=&quot;https://www.savoxusa.com/collections/high-voltage-servos/products/savsv1272sg-hv-coreless-digital-servo#technical-details&quot; rel=&quot;nofollow noreferrer&quot;&gt;Savox SV1272&lt;/a&gt; or &lt;a href=&quot;https://www.savoxusa.com/collections/brushless-servos/products/savsb2274sg-high-voltage-brushless-digital&quot; rel=&quot;nofollow noreferrer&quot;&gt;SB2274&lt;/a&gt; (resp.), with refresh rates of 333Hz.&lt;/p&gt;&#xA;&lt;p&gt;Is anyone aware if servos like this hold back on their power output with some kind of integrating control/loop delay in response to a step function? The tight timing of the stroke is what really concerns me: even if they wait for ~50ms I could lose most of the energy.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;Looking around for clues, I've seen &lt;a href=&quot;https://www.reddit.com/r/robotics/comments/frqeip/pid_tuning_does_not_give_servo_enough_power/flx44p3&quot; rel=&quot;nofollow noreferrer&quot;&gt;this comment here&lt;/a&gt; that links to &lt;a href=&quot;https://engineering.purdue.edu/%7Eandrisan/Courses/AAE451%20Fall2000/Servo.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;this linearized position model of a Futaba servo&lt;/a&gt; as an example. This model is a PID controller in &lt;em&gt;position&lt;/em&gt; rather than torque, so I imagine this is the response you get from operating below the torque-speed ceiling, while I really want to know the delta → torque behavior along that ceiling.&lt;/p&gt;&#xA;" OwnerUserId="7651" LastEditorUserId="7651" LastEditDate="2021-03-02T08:44:49.193" LastActivityDate="2021-04-01T21:00:08.520" Title="Do hobby servos respond to step inputs with a step in torque?" Tags="&lt;control&gt;&lt;servomotor&gt;&lt;torque&gt;&lt;power&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="21852" PostTypeId="1" CreationDate="2021-03-02T05:37:33.407" Score="0" ViewCount="40" Body="&lt;p&gt;The system includes three devices: PC, robot's computer, and wireless device.&lt;/p&gt;&#xA;&lt;p&gt;In order to improve the signal quality of the wireless in the whole robot's environment. I'd like to put a big wireless device in the middle corridor where it is not Ethernet (no internet) and only feed by power, then use its signal to connects it with the robot's computer. The robot's computer has a small wireless device that will connect with a big wireless device. Both wireless devices have no internet, only electric power, and signal.&lt;/p&gt;&#xA;&lt;p&gt;Can I transmit data from the robot to my PC and vice versa over Wi-Fi's signal ?&lt;/p&gt;&#xA;&lt;p&gt;Can I access the robot's computer using Wi-Fi's signal to launch the robot ?&lt;/p&gt;&#xA;&lt;p&gt;If yes, please your suggestions, and what are its disadvantages?&lt;/p&gt;&#xA;&lt;p&gt;Any suggestions would be greatly appreciated.&lt;/p&gt;&#xA;&lt;p&gt;Note: the system is working fine now using the internet in the big wireless device and connect it with the robot's computer and PC, only some problem when the robot is very far from a big wireless device because of dropping the signal quality to 5% &lt;a href=&quot;https://dot11ap.wordpress.com/cwna/radio-frequency-rf-technologies/rssi/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="24992" LastActivityDate="2021-03-02T08:49:56.460" Title="Is it possible to setup a wireless network without internet for the robot and PC?" Tags="&lt;ros&gt;&lt;wifi&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21853" PostTypeId="2" ParentId="21852" CreationDate="2021-03-02T08:49:56.460" Score="2" Body="&lt;p&gt;The easiest way is to set up a new router that is not connected to the internet. This gives you an isolated network that only local devices can see and connect with. You can even hide the SSID so it can be even more private. This requires the expense of purchasing a new router but has the advantage that you can use a router with multiple high gain antennas and your range for the robot is limited by the range to the fixed router, not to the computer which may be on the other end of the routers range. This effectively gives you twice the range to the computer from the robot with the right setup. If the robot always operates in the same area, this is most ideal.&lt;/p&gt;&#xA;&lt;p&gt;Another option is to use the WIFI controller on the robot as an access point (most WIFI controllers can do this) and connect your computer to that SSID each time you want to communicate with the robot. This SSID may also be hidden if you like that option. The down side of this is that you'll have to use a high gain antenna (not likely supplied) on the robot in order to get a decent range to the computer. This will not have the same range as with the router, even using high gain antennas. The plus side is that you can follow the robot with the computer and you essentially have an unlimited area of operation as long as you can be close to the robot.&lt;/p&gt;&#xA;" OwnerUserId="28057" LastActivityDate="2021-03-02T08:49:56.460" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="21854" PostTypeId="2" ParentId="21851" CreationDate="2021-03-02T10:20:22.323" Score="1" Body="&lt;p&gt;Generally, for small movements (or steps), most servos are torque limited to prevent overshoot and oscillations. If you change the input pulse timing by 20uS, the motor will not reach full torque before it starts braking the motor to stop. The motor torque is also throttled at the end of the desired motion to prevent overshoot of the target position. Even when moving about 10 degrees (100uS change in pulse width) the motor will not reach full torque before it starts to get throttled to stop. At movements of about 15 degrees the motor will reach maximum speed in about 20-40 mS (depends on load), but then is throttled to stop within 10-20 mS. Greater movements sustain maximum speed for longer, of course.&lt;/p&gt;&#xA;&lt;p&gt;So, If 50 mS is problematic in your system, you will likely have problems with the servo response.&lt;/p&gt;&#xA;&lt;p&gt;One additional note is that servos can behave poorly with elastic loads.&lt;/p&gt;&#xA;&lt;p&gt;As far as the specific servos that you reference, I don't have experience with those. The second one claims 12 bit resolution, I'm guessing this is the encoder resolution that is probably a magnetic sensor rather than a potentiometer like the old-school servos. If these servos are very high accuracy, this definitely requires some advanced motor current control schemes that will limit torque for low angle moves and at the end of the movement as the angle approaches the set point.&lt;/p&gt;&#xA;&lt;p&gt;Some scope traces measuring motor current @300mA/V Ch1 and motor voltage (across motor terminals) Ch2. Servo is JX 5521 digital with a constant elastic load. Notice that the rise time on motor current stays the same no matter the step size of the setpoint. Also, you can see by the commutation glitch frequency that the speed is still increasing even after the current reaches its maximum. Time constant on this servo is about 28 mS for max current and &amp;gt;70 mS for max speed.&lt;/p&gt;&#xA;&lt;p&gt;Image 1 - 100 uS step from 1500 uS to 1600 uS.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/AbzKU.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/AbzKU.png&quot; alt=&quot;Image 1 - 100 uS step from 1500 uS to 1600 uS.&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Image 2 - 200 uS step from 1400 uS to 1600 uS.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ulT2b.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ulT2b.png&quot; alt=&quot;Image 2 - 200 uS step from 1400 uS to 1600 uS.&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Image 3 - 400 uS step from 1300 uS to 1700 uS.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/4Z3hC.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4Z3hC.png&quot; alt=&quot;Image 3 - 400 uS step from 1300 uS to 1700 uS.&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="28057" LastEditorUserId="28057" LastEditDate="2021-03-02T19:19:56.993" LastActivityDate="2021-03-02T19:19:56.993" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="21855" PostTypeId="2" ParentId="21834" CreationDate="2021-03-02T13:49:36.070" Score="3" Body="&lt;p&gt;m is an abstract representation of the map. In practice, m typically is some form of parametric model, whose parameters need to be estimated. Some very typical models:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;A set of point locations of objects in space. m becomes a vector of (x,y,[z]) coordinates (each for one object).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;A grid of cells which can have distinct states, in the simplest form just free/occupied. m becomes a vector of cell states (which each refer to a certain part of 2d/3d space).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The formula given above is a very abstract problem formulation. For actual solutions allowing calculation, it is required to choose a concrete state representation (where SLAM state = combination of environment state + robot location), as well as certain models describing the robot's(/environment's) behavior and the sensor used to observe.&lt;/p&gt;&#xA;" OwnerUserId="28084" LastActivityDate="2021-03-02T13:49:36.070" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21856" PostTypeId="1" AcceptedAnswerId="21901" CreationDate="2021-03-02T21:16:31.203" Score="0" ViewCount="58" Body="&lt;p&gt;I was reading the paper, which you can find: &lt;a href=&quot;https://hal.inria.fr/inria-00567668/document&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://hal.inria.fr/inria-00567668/document&lt;/a&gt;. I got so confused with equation (33) and (34), it seems like instead of an equal sign in eq.(33) on the left that should be a multiplication, which can be supported by the first author's thesis: &lt;a href=&quot;https://pastel.archives-ouvertes.fr/pastel-01038025/document&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://pastel.archives-ouvertes.fr/pastel-01038025/document&lt;/a&gt;, eq.(2.62).&lt;/p&gt;&#xA;&lt;p&gt;But I cannot understand what it means physically, can someone help me understand this!&lt;/p&gt;&#xA;" OwnerUserId="28085" LastActivityDate="2021-03-10T01:03:53.750" Title="Help on the Walking without thinking about it paper!" Tags="&lt;control&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21857" PostTypeId="1" AcceptedAnswerId="21859" CreationDate="2021-03-03T00:14:54.237" Score="1" ViewCount="54" Body="&lt;p&gt;I have a five DoF robot. Each axis is connected to a cylinder. You can send PWM values to each cylinder and you are able to read out the position values of each cylinder which makes it possible to design a closed-loop inverse kinematic controller. Given a desired goal position for the manipulator, assume you have estimated the desired velocity change of each joint (for example using &lt;code&gt;move_group&lt;/code&gt; library in ROS).&lt;/p&gt;&#xA;&lt;p&gt;Although we can control the velocity of the robot's joints by manipulating the PWM values, we cannot perfectly recreate these velocity values since we don't have the dynamic model of the robot. Thus, our best bet is to go for the position control of the robot.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Is my theory so far correct? Or is there a way to implement a velocity controller without a dynamic model?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="21382" LastEditorUserId="28193" LastEditDate="2021-03-19T13:08:14.857" LastActivityDate="2021-03-19T17:01:54.410" Title="Velocity-Control of a manipulator without a dynamic model" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;inverse-kinematics&gt;&lt;motion-planning&gt;&lt;dynamics&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21858" PostTypeId="2" ParentId="21846" CreationDate="2021-03-03T02:15:07.260" Score="1" Body="&lt;p&gt;My initial response would be that your angular variables are being measured in the opposite direction from the matrix in the slide you shared. In other words, theta should actually be negative theta, phi should actually be negative phi, and psi should be negative psi. If you perform this conversion, then you have the same matrix as the slide.&lt;/p&gt;&#xA;" OwnerUserId="10414" LastActivityDate="2021-03-03T02:15:07.260" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21859" PostTypeId="2" ParentId="21857" CreationDate="2021-03-03T07:35:46.973" Score="4" Body="&lt;p&gt;Your intuition is partially correct in the sense that you ought to go with position control implemented via velocity commands resorting to a kinematic (not dynamic) model of the manipulator.&lt;/p&gt;&#xA;&lt;p&gt;This can be explained by inspecting one of the easiest policy used for inverse kinematics,&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\dot{\mathbf{q}} = \mathbf{J}^{-1} \cdot \left( \mathbf{x}_d - \mathbf{x}(\mathbf{q}) \right),&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;that establishes a closed-loop between the actual error in the Cartesian space and the velocity commands to be sent to the joint motors &lt;span class=&quot;math-container&quot;&gt;$\dot{\mathbf{q}}$&lt;/span&gt;, being &lt;span class=&quot;math-container&quot;&gt;$\mathbf{J}^{-1}$&lt;/span&gt; the inverse of the Jacobian matrix.&lt;/p&gt;&#xA;&lt;p&gt;Essentially, you cannot send velocity commands without applying instant corrections through the readouts of the end-effector position &lt;span class=&quot;math-container&quot;&gt;$\mathbf{x}(\mathbf{q})$&lt;/span&gt;, otherwise the small discrepancies of how the commands will get integrated into joint positions (because motors are not perfect integrators) will let you end up far from the target &lt;span class=&quot;math-container&quot;&gt;$\mathbf{x}_d$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The point here is that you only need a kinematic model – in this case the Jacobian – and not a complete dynamic model of the joints comprising for example the masses distribution. The lack of such a latter knowledge can be in fact compensated by the high-level kinematic closed loop.&lt;/p&gt;&#xA;&lt;p&gt;Nevertheless, if you somehow deal with the dynamics of the system, then you'll certainly obtain better performance.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2021-03-19T17:01:54.410" LastActivityDate="2021-03-19T17:01:54.410" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21860" PostTypeId="1" CreationDate="2021-03-03T14:17:53.503" Score="2" ViewCount="89" Body="&lt;p&gt;I just built a 4 DOF Articulated manipulator with open-loop servo motors and the servos signals are generated using a micro-controller. I followed the Angela Sodemann's videos on YouTube, I calculated properly the forward kinematics using Denavit-Hartenberg, Inverse Kinematics and the Jacobian matrix which is in this case the dimensions of the Jacobian matrix are 6x4. All joints are revolute. Now i want to move the end-effector in a particular direction. The manipulator goes in the desired direction but i also want to control its speed using the Jacobian but I cannot take the inverse of the Jacobian since it is not a square matrix. Books on robotics mention 3-rd order/5-th order polynomial for trajectory generation but I could not &lt;strong&gt;relate&lt;/strong&gt; the polynomial equation with the inverse kinematics and the Jacobian matrix. Can anyone suggest on any resources on how to go from here? I will be writing all the code my self in C language without any libraries, or more precisely, how do I learn from here to go to the next nasic step of trajectory generation?&lt;/p&gt;&#xA;&lt;p&gt;Any response will be greatly appreciated.&lt;/p&gt;&#xA;&lt;p&gt;Thank you.&lt;/p&gt;&#xA;&lt;p&gt;EDIT: Someone else had a same problem and was told that if only linear speed control was required, then this could be a solution,&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;\begin{bmatrix} \dot{x} \\ \dot{y} \\ \dot{z} \\ 0 \\ 0 \\ 0 \end{bmatrix}&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;I am assuming we are talking about the &lt;strong&gt;linear speed&lt;/strong&gt; of the end-effector here? Have I understood this correctly?&lt;/p&gt;&#xA;" OwnerUserId="28089" LastEditorUserId="28089" LastEditDate="2021-03-03T14:32:32.950" LastActivityDate="2021-03-06T13:21:32.643" Title="Trajectory generation equation from jacobian and inverse kinematics" Tags="&lt;robotic-arm&gt;&lt;inverse-kinematics&gt;&lt;jacobian&gt;&lt;trajectory&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21861" PostTypeId="1" AcceptedAnswerId="21862" CreationDate="2021-03-04T06:37:20.740" Score="1" ViewCount="38" Body="&lt;p&gt;I am confused about how high level my behavior tree has to be. For example, if I want to create an autonomous robot that goes from point A to point, what would be a reasonable behavior tree?&lt;/p&gt;&#xA;&lt;p&gt;For now, I think one of the first actions should be something like, loading parameter / configure nodes but I don't know if that's way lower level than the behavior tree is supposed to take care of.&lt;/p&gt;&#xA;" OwnerUserId="28091" LastActivityDate="2021-03-04T09:04:35.957" Title="How to design a behavior tree with ROS1 framework" Tags="&lt;mobile-robot&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21862" PostTypeId="2" ParentId="21861" CreationDate="2021-03-04T09:04:35.957" Score="1" Body="&lt;p&gt;A behaviour tree in robotics is in most cases used instead of an application program. It already assumes a running robot and a set of behaviours which are available at programming time.&lt;/p&gt;&#xA;&lt;p&gt;I am not sure if ROS supports an application program based programming model, like industrial robots. If yes, the behaviour tree would represent the application program and would not include any steps, which are infrastructure relevant (like node config). But this is only through analogy with the current behaviour tree use-cases, not a technical limitation.&lt;/p&gt;&#xA;&lt;p&gt;Other use-cases can be found for behaviour trees, so there is no rule on how granular a behaviour tree &amp;quot;has to be&amp;quot; or what it &amp;quot;has to do&amp;quot;. For sure it could include configuration steps also, it might also make sense, the only limitation is that the entity interpreting/executing the behaviour tree instance has to support the defined behaviour. This is the only technical limitation.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastActivityDate="2021-03-04T09:04:35.957" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21863" PostTypeId="1" CreationDate="2021-03-04T11:44:06.280" Score="0" ViewCount="67" Body="&lt;p&gt;I have implemented LEGO-LOAM on my system. I h&lt;a href=&quot;https://i.stack.imgur.com/qqko2.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qqko2.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;ave a velodyne VLP16 lidar. I am getting a display like this in the rviz window. I need help in creating and saving a map from this data. What should I do?&lt;/p&gt;&#xA;" OwnerUserId="26934" LastActivityDate="2021-03-04T11:44:06.280" Title="LEGO-LOAM: Creating and Saving a Map" Tags="&lt;ros&gt;&lt;lidar&gt;&lt;mapping&gt;&lt;rviz&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21865" PostTypeId="1" CreationDate="2021-03-04T19:25:28.437" Score="0" ViewCount="14" Body="&lt;p&gt;maybe this is a stupid question but i came across a problem with my ukf implementation.&lt;/p&gt;&#xA;&lt;p&gt;I use chol() in matlab for my sigma point creation instead of the normal square root of my covariance matrix. Do i have to mirror it in order to get a symmetric matrix? Because when i compute a square root of my covariance matrix it is always symmetric.&lt;/p&gt;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="27965" LastActivityDate="2021-03-04T19:25:28.437" Title="UKF - sigma point creation - Mirroring the chol matrices" Tags="&lt;mobile-robot&gt;&lt;slam&gt;&lt;kalman-filter&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21866" PostTypeId="1" CreationDate="2021-03-04T19:27:46.367" Score="0" ViewCount="93" Body="&lt;p&gt;For the simple 6-DOF shown, we have to solve for the inverse kinematic equations and its resulting figures.&lt;/p&gt;&#xA;&lt;p&gt;But I'm sorry, I really don't have any idea where to begin. Can someone please help?&lt;/p&gt;&#xA;&lt;p&gt;What should I do to solve this?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/hWHxF.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hWHxF.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;P.s. That's all the information our teacher gave us.&lt;/p&gt;&#xA;" OwnerUserId="28096" LastActivityDate="2021-04-09T01:00:15.047" Title="How to derive the inverse kinematic equations for this simple 6-DOF robot?" Tags="&lt;inverse-kinematics&gt;" AnswerCount="3" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21868" PostTypeId="2" ParentId="21836" CreationDate="2021-03-04T21:07:45.947" Score="0" Body="&lt;p&gt;This lecture from Georgia Tech's Control of Mobile Robot's Coursera class derives the bicycle model; &lt;a href=&quot;https://youtu.be/cQWhYCrK06M&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://youtu.be/cQWhYCrK06M&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="24763" LastActivityDate="2021-03-04T21:07:45.947" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21869" PostTypeId="2" ParentId="21847" CreationDate="2021-03-04T23:06:19.913" Score="1" Body="&lt;p&gt;Given that you are using 2 dc motors, I'm guessing you are using a differential drive configuration.  Your intuition about the algorithm is good.  The encoders on the motors along with some physical/mechanical measurements (wheel radius/circumference and wheel base) are used as input to a kinematic model, in this case the unicycle model. Using this, you can maintain a running estimate of the robot's position and orientation.  Using that, you can find the delta from a desired goal point (as a delta angle).  You can then use this delta as input to a P-regulator whose set point is the angle to the goal and whose output is wheel velocities.  I've implemented that algorithm this &lt;a href=&quot;https://github.com/Ezward/Esp32CameraRover2&quot; rel=&quot;nofollow noreferrer&quot;&gt;project&lt;/a&gt;; see the gotoPoint() method in the &lt;a href=&quot;https://github.com/Ezward/Esp32CameraRover2/blob/master/src/rover/goto_goal.cpp&quot; rel=&quot;nofollow noreferrer&quot;&gt;go-to-goal behavior&lt;/a&gt;.  The documentation on the &lt;a href=&quot;https://github.com/Ezward/Esp32CameraRover2/blob/master/docs/rover_firmware.md&quot; rel=&quot;nofollow noreferrer&quot;&gt;firmware internals&lt;/a&gt; contains a link to a presentation that describes the unicycle model and dead reckoning algorithm with illustrations.&lt;/p&gt;&#xA;&lt;p&gt;Note that dead reckoning with only wheel encoders is useful for short distances, but other sensors will be necessary for accurate pose estimates for anything more.&lt;/p&gt;&#xA;" OwnerUserId="24763" LastActivityDate="2021-03-04T23:06:19.913" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21870" PostTypeId="2" ParentId="18048" CreationDate="2021-03-05T00:33:08.847" Score="0" Body="&lt;p&gt;Your result is correct: I got encoder values by a measurement, which perfectly fit with your equations. However, I don't understand your thoughts.&lt;/p&gt;&#xA;&lt;p&gt;Firstly, you wrote velocity = rounds per something * circumference. You calculated with rpm, which is rounds per minute (= 60 s). But what to do in case of rps? Then you cannot divide through 60, which is here a quite important step to do.&lt;/p&gt;&#xA;&lt;p&gt;Secondly, you mentioned that the DIST_PER_RAD is the circumference (2 * pi * r) divided by 2 * pi for a complete revolution, which results just in the radius. In my opinion there must be calculated v = n * 2 * pi * r (with n = number of revolutions in 1/s or 1/min or whatever). Then you'll get the distance, which belongs to n. Example: 1 round per something (s, min, h) is a complete revolution of the wheel in one second, minute or hour. We'll get just the half distance in case of n = 1/2 rounds per something (s, min, h). I.e. it isn't necessary to divide the circumference by 2 * pi.&lt;/p&gt;&#xA;&lt;p&gt;However, when I calculate the velocity as v = n * 2 * pi * r I don't get the correct results, i.e. in fact the factor 0.1047 is absolutely necessary.&lt;/p&gt;&#xA;&lt;p&gt;Do you've any idea where my mistake is?&lt;/p&gt;&#xA;" OwnerUserId="28100" LastEditorUserId="134" LastEditDate="2021-03-12T09:48:33.973" LastActivityDate="2021-03-12T09:48:33.973" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21871" PostTypeId="1" CreationDate="2021-03-05T10:14:32.113" Score="0" ViewCount="23" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/o6x93.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/o6x93.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;I am trying to map a Gazebo environment using 2 husky bots using the multirobot_map_merge package.&lt;/p&gt;&#xA;&lt;p&gt;However, the merged map being produced is wrong and the robots are not being localized correctly inside the merged map.&lt;/p&gt;&#xA;&lt;p&gt;How can I improve this? I have been trying to figure this out for quite some time now.&lt;/p&gt;&#xA;" OwnerUserId="27245" LastEditorUserId="27245" LastEditDate="2021-03-05T15:37:49.453" LastActivityDate="2021-03-05T15:37:49.453" Title="multirobot_map_merge package not working properly" Tags="&lt;localization&gt;&lt;multi-agent&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21872" PostTypeId="1" AcceptedAnswerId="21874" CreationDate="2021-03-05T13:36:16.880" Score="0" ViewCount="49" Body="&lt;p&gt;Let's say I want a robot to run at a certain speed. I have one motor attached to each robot rear wheel. The feedback value to the controller comes from an encoder, which outputs pulses per time unit, i.e. the measured variable is speed of the robot.&lt;/p&gt;&#xA;&lt;p&gt;Something has been bugging me, so please correct me if I am wrong: I don't think it is possible to solely use a P-controller for velocity control. I seems to me that it is impossible to reach the desired target speed if your output signal from the controller (i.e. a velocity value) is proportional to the error value. Then when the error goes towards zero (which is what the P-controller strives for) the output signal (velocity) would go towards zero. But then how can you maintain a non-zero speed? Instead you will probably reach an equilibrium point were the robot velocity control is in a steady-state error. Is this reasoning correct or wrong?&lt;/p&gt;&#xA;" OwnerUserId="26254" LastActivityDate="2021-03-06T07:49:42.037" Title="Is it possible to solely use a P-controller for velocity control?" Tags="&lt;control&gt;" AnswerCount="1" CommentCount="2" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21874" PostTypeId="2" ParentId="21872" CreationDate="2021-03-05T23:07:40.420" Score="2" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;output signal from the controller (i.e. a velocity value) is proportional to the error value&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I think there is some confusion here.&lt;/p&gt;&#xA;&lt;p&gt;In a standard velocity control loop, the controller output cannot be the velocity itself, by definition. Instead, the velocity is the feedback, whereas the controller output is most likely the voltage applied to the electrical motor.&lt;/p&gt;&#xA;&lt;p&gt;That said, your intuition is correct, a simple P controller is not sufficient for achieving the target velocity.&lt;/p&gt;&#xA;&lt;p&gt;It is easy to verify that, as result of a zero error, the voltage command will be zero, hence the motor won't spin any longer. Thus, a generic target speed different from zero is not attainable.&lt;/p&gt;&#xA;&lt;p&gt;More rigorously, if we consider that the transfer function voltage-speed can be well approximated with a first-order response, we end up with no integral in the loop if we close it with a simple P controller. In turn, no integral entails a non-null steady-state error. To compensate for that, one must purposely introduce the I term as it is well known.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2021-03-06T07:49:42.037" LastActivityDate="2021-03-06T07:49:42.037" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21876" PostTypeId="2" ParentId="21866" CreationDate="2021-03-06T13:13:28.300" Score="0" Body="&lt;p&gt;The first step is to create the model of the robot. I recommend you to model the robot using modified denavit hartenberg (There are plenty of book and youtube provide the information you need). Then you can simply use &lt;a href=&quot;https://petercorke.com/toolboxes/robotics-toolbox/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; robotic toolbox and use function like SerialLink.ikine to get the mathematical function of inverse kinematic.&lt;/p&gt;&#xA;&lt;p&gt;Hope that help :)&lt;/p&gt;&#xA;" OwnerUserId="22800" LastActivityDate="2021-03-06T13:13:28.300" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21877" PostTypeId="2" ParentId="21860" CreationDate="2021-03-06T13:21:32.643" Score="1" Body="&lt;p&gt;As suggested by ben, i will put my comment as answer.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;1st How to control robot&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I recommend you to look about resolved motion rate control. It's a complete algorithm to control a robot from path planning, control system, inverse jacobian and simulating plant. (And you can add several other algorithm to measure the state of system if you want too, very good algorithm)&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;2nd How to inverse non square jacobian&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;You can inverse non square jacobian by using pseudo-inverse &lt;a href=&quot;https://en.wikipedia.org/wiki/Moore%E2%80%93Penrose_inverse&quot; rel=&quot;nofollow noreferrer&quot;&gt;look here&lt;/a&gt; Because you jacobian dimension 6x4. Then the pseudo inverse of your jacobian is&lt;/p&gt;&#xA;&lt;p&gt;A+ = (AT A)^-1 * AT&lt;/p&gt;&#xA;&lt;p&gt;AT = A transpose&lt;/p&gt;&#xA;&lt;p&gt;By using pseudoinverse, you also make your robot more robust to singularity&lt;/p&gt;&#xA;&lt;p&gt;Hope that help&lt;/p&gt;&#xA;" OwnerUserId="22800" LastActivityDate="2021-03-06T13:21:32.643" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21878" PostTypeId="1" CreationDate="2021-03-06T23:06:46.017" Score="0" ViewCount="25" Body="&lt;p&gt;I am designing an articulated robot arm that will not need to hold essentially any weight at its end, but that will need to perform thousands of repetitions (currently using MG 996R servos, but might switch if those aren't durable enough). I am a design newbie, and as I've designed it currently, the only point of contact between each joint is the servo axle, meaning the weight of the arm is resting on that servo axle at each joint. I know this will produce undue stress on the axles over time, and I want to design the arm in such a way that the weight of the arm will not be placed on the servo axles. Can anyone point me in the right direction on how I can avoid that? Perhaps examples or principles of how joints can be designed such that the weight of the arm parts below it go through the frame of the arm rather than through the axle. Thanks!&lt;/p&gt;&#xA;" OwnerUserId="28113" LastActivityDate="2021-04-06T05:03:50.473" Title="Reducing stress on servo axle" Tags="&lt;robotic-arm&gt;&lt;design&gt;&lt;servomotor&gt;&lt;rcservo&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21879" PostTypeId="1" CreationDate="2021-03-07T03:55:45.340" Score="0" ViewCount="16" Body="&lt;p&gt;I am trying to use kilobots to make layered rings (like concentric circles like) around a central robot. I am able to form rings with radius smaller than the communication radius of the central robot however I want to form rings with a radius larger than the communication radius.&lt;/p&gt;&#xA;&lt;p&gt;This is what I currently have&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/iTdRk.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/iTdRk.jpg&quot; alt=&quot;This is what I have&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is what I want to do&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/auPFK.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/auPFK.jpg&quot; alt=&quot;This is what I want to do&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Here is what I have tried so far&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Trilateration: In hopes of building a local co-ordinate system (because kilobots are these stupid robots who can only exchange ID and distance information to each other, they don't have a GPS, no camera, no orientation data) I tried implementing trilateration so I could get the position of a robot relative to 2 beacon robots (I used just 2 bc I could always eliminate the non-feasible solution) but I realized that there are some &amp;quot;blind-spots&amp;quot; in my testing area where a robot is not always in communication with 2 beacon robots. Furthermore, I had to use 9 beacon robots to cover the whole testing area which I cannot do due limited no of robots and I cannnot shrink the testing area either. So I dropped it.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;This algorithm&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;pre&gt;&lt;code&gt;int previous_minimum distance = 30000;&#xA;int actionable_distance=0;&#xA;int current_distance; //this is the distance measurements recieved by our robot&#xA;&#xA;void loop()&#xA;{&#xA;&#xA;  if (within the desired distance)&#xA;  {&#xA;    STOP&#xA;  }&#xA;&#xA;//so basically only updated whenever there exists a robot  in the already formed ring (in red) which has a smaller&#xA;// distance to our robot (in green) than the previous robot in the ring (red)&#xA;&#xA;  if (previous_minimum distance &amp;gt; current_distance)&#xA;  {&#xA;    previous_minimum distance=current_distance; /&#xA;  } &#xA;&#xA;  if (actionable_distance &amp;lt; previous_minimum distance) //moving away&#xA;  {&#xA;    TURN&#xA;  }&#xA;&#xA;  if (actionable_distance &amp;gt; previous_minimum distance)&#xA;  {&#xA;    GO STRAIGHT&#xA;  }&#xA;  &#xA;  actionable_distance = previous_minimum distance&#xA;}&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Neither of the methods has worked for me and now I'm out of ideas. So if anyone could recommend any ideas that would be appreciated.&lt;/p&gt;&#xA;&lt;p&gt;Notes: All robots have the same communication radius&lt;/p&gt;&#xA;" OwnerUserId="26149" LastActivityDate="2021-03-07T03:55:45.340" Title="Need suggestions for pattern formation algorithm for kilobots" Tags="&lt;algorithm&gt;&lt;swarm&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21880" PostTypeId="2" ParentId="21878" CreationDate="2021-03-07T04:28:20.850" Score="0" Body="&lt;p&gt;This is commonly done by putting a bearing or two on the axis of servo rotation and making those bearing support the load. Try looking at parts like the Lynxmotion Aluminum &amp;quot;C&amp;quot; Servo Brackets. You can also look at products made by Trossen Robotics to see how they do it. And, search thingiverse.com for &amp;quot;servo joint&amp;quot;, you'll see lots of ideas there.&lt;/p&gt;&#xA;&lt;p&gt;Best of luck!&lt;/p&gt;&#xA;" OwnerUserId="28057" LastActivityDate="2021-03-07T04:28:20.850" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21881" PostTypeId="1" CreationDate="2021-03-07T19:17:53.943" Score="0" ViewCount="50" Body="&lt;p&gt;I have an imu that can be placed with any orientation inside the vehicle, my work is perform a virtual rotation of the imu output with respect of vehicle X-Y-Z axis. With a little of search i have found nericell  (&lt;a href=&quot;https://www.researchgate.net/publication/221091832_Nericell_Using_mobile_smartphones_for_rich_monitoring_of_road_and_traffic_conditions&quot; rel=&quot;nofollow noreferrer&quot;&gt;Link of the paper&lt;/a&gt;) project, and now im trying to implement this, but untill now without sucess.&lt;/p&gt;&#xA;&lt;p&gt;The idea is find the gravitational vector by making a sample of N seconds and calculating the mean. And find the vehicle acceleration mainly in the direction of the movement with the GPS data, finding samples where the coordinates follows a rought straight line and velocity decrease with time. Aftert that build a Z-Y-Z rotation vector (equations in the paper). My idea to find the second constraint (linear movement and velocity decrease) is perform linear regression at lat-lon and with R² avaliate if data follow a straight line, and again linear regression at timestamp-velocity to see if velocity have a negative slope, because this will indicate that its decreasing with time. I allocated a buffer that have 10 seconds of imu data and other buffer with 5 seconds of gps data. When the seconds contraint is met, the gps firmware will send the timestamp where this happens to the imu firmware and with this i will perform a mean calculation of 3 seconds of imu data starting with the position that the gps timestamp (or the most closely) is placed inside the imu buffer. New gps data and new imu data will be placed inside each buffer always when the respective task is executed. To find gravitational vector i simply make a moving average of 10 seconds of imu data.&lt;/p&gt;&#xA;&lt;p&gt;The first image is 3 seconds of gps velocity sample that linear regression algorithm interprets as a decreasing velocity. I think thats is a good guess&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/fJrWM.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fJrWM.png&quot; alt=&quot;GPS velocity&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The image below is the lat-lon coordinates that have passed in the linear regression constraint. I set R² to 0.9 threshold,  below this value, the path will not be considered as follows a strainght line.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/AD3c9.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/AD3c9.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;So with these samples above, this block of samples have passed the linear regression test. And i send the timestamp of the first sample of this block to the imu.&lt;/p&gt;&#xA;&lt;p&gt;But the accelerometer doesn´t seems to &amp;quot;see&amp;quot; this change in velocity.&lt;/p&gt;&#xA;&lt;p&gt;X-axis of accelerometer&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/M0t7V.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/M0t7V.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Y-axis of accelerometer&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/oZ3bp.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/oZ3bp.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Z-axis of accelerometer&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/pVbVZ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/pVbVZ.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Someone already faced this problems to help me with ideas? Or should i make something with accelerometer data before run this algorithm?&lt;/p&gt;&#xA;" OwnerUserId="27655" LastEditorUserId="27655" LastEditDate="2021-03-08T14:03:10.433" LastActivityDate="2021-03-08T14:03:10.433" Title="How to perform virtual reorientation of imu" Tags="&lt;imu&gt;&lt;calibration&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21882" PostTypeId="1" CreationDate="2021-03-07T19:23:47.850" Score="1" ViewCount="24" Body="&lt;p&gt;I'm trying to fix my kid's power wheel. When you press the gas pedal, nothing happens. I took it apart and checked everything. I noticed that when I disconnect the wires from the motor and check them with a DVM, it registers roughly 12v when I press the gas pedal. The weird thing is when I connect the wires to the motor and check the voltage, I don't register anything when I press the gas pedal. I can't figure out what would cause that. Any ideas? Motor shot?&lt;/p&gt;&#xA;" OwnerUserId="28116" LastActivityDate="2021-04-07T14:02:35.290" Title="Voltage not registering when motor is connected?" Tags="&lt;motor&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21883" PostTypeId="1" CreationDate="2021-03-07T21:38:58.327" Score="1" ViewCount="26" Body="&lt;p&gt;How does one generate a trajectory for a ground vehicle using an RGBD camera? For a drone it's simpler since you're not constrained by having to move on the ground but it's not clear to me how trajectory planning works if your movements limit you to moving on the ground plane.&lt;/p&gt;&#xA;" OwnerUserId="21514" LastActivityDate="2021-03-07T21:38:58.327" Title="Ground based path generation from RGBD camera" Tags="&lt;kinematics&gt;&lt;dynamics&gt;&lt;stereo-vision&gt;&lt;path-planning&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21884" PostTypeId="1" CreationDate="2021-03-07T22:08:22.490" Score="0" ViewCount="32" Body="&lt;p&gt;I have generated a &lt;code&gt;map&lt;/code&gt; named &lt;code&gt;map_1.pgm&lt;/code&gt; using &lt;code&gt;map_server&lt;/code&gt; package. I want to display it in an OpenCV window. How can I achieve this?&lt;/p&gt;&#xA;&lt;p&gt;I am currently trying this -&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;std::string file_name = &amp;quot;map_1.pgm&amp;quot;; &#xA;cv::Mat m = cv::imread(file_name.c_str(), 0);&#xA;&#xA;cv::namedWindow(&amp;quot;map_1&amp;quot;);&#xA;cv::imshow(&amp;quot;map_one_window&amp;quot;, m);&#xA;&#xA;cv::waitKey(0);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This is my &lt;code&gt;map_1.yaml&lt;/code&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;image: map_1.pgm&#xA;resolution: 0.050000&#xA;origin: [-100.000000, -100.000000, 0.000000]&#xA;negate: 0&#xA;occupied_thresh: 0.65&#xA;free_thresh: 0.196&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;However, on doing the above steps, I get a big OpenCV window which is completely grey.&lt;/p&gt;&#xA;&lt;p&gt;How do I solve this problem?&lt;/p&gt;&#xA;&lt;p&gt;I am attaching the results of xdg-open map_1.pgm.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/SN1yz.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/SN1yz.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="27245" LastEditorUserId="27245" LastEditDate="2021-03-08T15:02:10.297" LastActivityDate="2021-04-07T15:04:50.520" Title="Need help in loading occupancy_grid map to OpenCV window" Tags="&lt;mapping&gt;&lt;opencv&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21886" PostTypeId="1" CreationDate="2021-03-08T07:11:50.527" Score="0" ViewCount="8" Body="&lt;p&gt;I am dealing with 5 axis CNC machining time prediction. I would like to ask the question with providing some background and mentioning the constraints which what I concluded from some of the experiements with the machine.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Background&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;The trajectory profile of each individual axis (X, Y, Z, A, C) of our CNC machine is &amp;quot;exponential profile&amp;quot; whose equation can be given as:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/DoG06.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/DoG06.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/1APIY.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/1APIY.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;where f is time-varying feed rate fs is starting feed rate and F is constant feed rate. We know T1 and T2 which are time constant special for the axis.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;The Question&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I will ask the question based on an example, Let's have a G-Code File like:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;G01 X0 Y0 Z0 A0 C0&#xA;G01 X2 Y7 Z5 A5 C6&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;strong&gt;To produce axis commands, the total length of NC block should be calculated but, how?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;i.e. if the machine was 3 axis, NC block length would have been calculated as:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;NClength = sqrt(X^2+Y^2+Z^2);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;Constraints&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;What I infer from the experiemts:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;rA = rC = 58mm (approximately)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;where rA is assumed radius of A-axis and rC is assumed radius of C axis. This assumption is done to convert angular movement to linear distance. For example, if the G code is like:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;G01 C0&#xA;G01 C20&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;NClength = 2&lt;em&gt;π&lt;/em&gt;rC*(20/360)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;( I found assumed radii (rA and rC) by measuring the time passed for 360 degrees of A and C axis. And calculated rA (or rC) from the equation :&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;2&lt;em&gt;π&lt;/em&gt;r = F*t     where F is commanded feedrate, r is rA or rC depending on the axis measured. )&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;2.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;The length of NC block is calculated in a way which machine's kinematics does not matter.&lt;/p&gt;&#xA;" OwnerUserId="27032" LastActivityDate="2021-03-08T07:11:50.527" Title="How to Calculate Individual Axis Commands Out of 5 Axes G-Code?" Tags="&lt;kinematics&gt;&lt;motion-planning&gt;&lt;motion&gt;&lt;cnc&gt;&lt;trajectory&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21887" PostTypeId="2" ParentId="21884" CreationDate="2021-03-08T08:19:43.417" Score="0" Body="&lt;p&gt;I am not familiar with ROS maps, but the threshold values in the yaml seem to indicate your map values are floats in the [0,1] range. I think OpenCV will not properly visualize these.&lt;/p&gt;&#xA;&lt;p&gt;Check the minimum/maximum values in your matrix.&lt;/p&gt;&#xA;&lt;p&gt;Try to generate a uint8 image with values in the [0,255] range for display, by just multiplying your map values with 255 (you may even have to make it a 3-channel image [with 3 identical channels] for OpenCV to handle it properly).&lt;/p&gt;&#xA;" OwnerUserId="28084" LastActivityDate="2021-03-08T08:19:43.417" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="21888" PostTypeId="1" AcceptedAnswerId="21894" CreationDate="2021-03-08T09:22:41.400" Score="1" ViewCount="53" Body="&lt;p&gt;I have a small crop field inside my house and I want to create a map of it. The goal is to create a map so that I can monitor the growth of the plants and do some post processing to analyze the details of individual plant.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Hardware:&lt;/strong&gt; Since it is a small crop field, I have two poles on either ends of the field with a wire connecting the two poles. the robot/assembly will be hooked to the wire. Therefore, the path of the robot is always fixed. I have a 3D lidar, a camera, IMU and a GPS.&lt;br /&gt;&#xA;I have interfaced all the sensors with my Nvidia TX2 controller using ROS. In short, I have raw data coming into the system from all sensors. I want some advice regarding how to proceed with this project?&lt;/p&gt;&#xA;&lt;p&gt;Should I start with localization? As a first step, should I fuse data from the GPS and IMU to get accurate positioning of the system? With the idea that, if I accurately localize my system in the field and then acquire images for every position, is it possible to join the images somehow?&lt;/p&gt;&#xA;&lt;p&gt;Do I need to implement SLAM here?&lt;/p&gt;&#xA;" OwnerUserId="26934" LastActivityDate="2021-03-09T05:00:40.697" Title="Localization and Mapping in a Small Crop Field" Tags="&lt;ros&gt;&lt;localization&gt;&lt;imu&gt;&lt;mapping&gt;&lt;gps&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21889" PostTypeId="2" ParentId="21882" CreationDate="2021-03-08T13:39:27.250" Score="0" Body="&lt;p&gt;Two reasonable options I can think of for why you're getting zero volts when the system is hooked up:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The battery is shot. Try probing battery voltage - a 12 volt lead-acid battery is dead if the voltage is less than about 11.8 volts. If the battery is fully charged then it should be about 12.8 volts.&lt;/li&gt;&#xA;&lt;li&gt;The motor is shot. Try probing motor resistance. Typically, if the motor is bad, I would expect a wire break, in which case you'd see an infinite resistance, or the insulation is damaged, shorting the wiring and you'd get zero resistance. Since you're seeing zero volts with the pedal down I would guess the motor is shorted.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;If you're probing the motor, be sure you're probing it at the motor with the motor disconnected or else you're probing the entire control circuit, too, which could give false readings. The battery state of charge estimate by measuring voltage is supposed to be with the battery &amp;quot;rested,&amp;quot; but it sounds like it's not working so that shouldn't be an issue.&lt;/p&gt;&#xA;&lt;p&gt;I would guess the battery is shot, but it could also just be that it's not charged. My kids will mess with theirs while it's plugged in, so it could be someone's pulled the charger out after you plugged it in, or unplugged it from the wall outlet or turned a power strip off, etc.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2021-03-08T13:39:27.250" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="21890" PostTypeId="1" CreationDate="2021-03-08T16:25:15.470" Score="0" ViewCount="26" Body="&lt;p&gt;I have mapped my &lt;code&gt;Gazebo&lt;/code&gt; environment using the &lt;code&gt;slam_gmapping&lt;/code&gt; node. On running &lt;code&gt;map_server map_saver -f map_1.pgm&lt;/code&gt;, I am able to save the map to my local disk.&lt;/p&gt;&#xA;&lt;p&gt;This is how the saved map looks - &lt;a href=&quot;https://i.stack.imgur.com/tE7rt.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tE7rt.png&quot; alt=&quot;map_1.pgm&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;As we can see, there is a lot of grey space arond the map. How do I eliminate this? I need to do this because I intend to run some OpenCV algorithms over this map.&lt;/p&gt;&#xA;&lt;p&gt;This is my &lt;code&gt;map_1.yaml&lt;/code&gt; looks like -&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;image: map_1.pgm&#xA;resolution: 0.050000&#xA;origin: [-100.000000, -100.000000, 0.000000]&#xA;negate: 0&#xA;occupied_thresh: 0.65&#xA;free_thresh: 0.196&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="27245" LastActivityDate="2021-03-09T16:15:14.543" Title="Eliminate grey space around the saved map" Tags="&lt;ros&gt;&lt;mapping&gt;&lt;opencv&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21891" PostTypeId="2" ParentId="20069" CreationDate="2021-03-09T01:52:55.990" Score="2" Body="&lt;p&gt;I prototyped a bit to investigate this behaviour. Ran the following node:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;#!/usr/bin/env python                                                                                                                                                                                       &#xA;import rospy                                                                                                                                                                                                &#xA;from threading import Lock                                                                                                                                                                                  &#xA;from std_msgs.msg import String                                                                                                                                                                             &#xA;mutex = Lock()                                                                                                                                                                                              &#xA;def handler(data):                                                                                                                                                                                          &#xA;    print &amp;quot;Handle called&amp;quot;                                                                                                                                                                                   &#xA;    mutex.acquire()                                                                                                                                                                                         &#xA;    print &amp;quot;Handle executed&amp;quot;                                                                                                                                                                                 &#xA;    import time; time.sleep(10)                                                                                                                                                                              &#xA;    mutex.release()                                                                                                                                                                                         &#xA;rospy.init_node('test')                                                                                                                                                                                     &#xA;rospy.Subscriber('/foo', String, handler)                                                                                                                                                                   &#xA;rospy.spin()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;When I publish several individual messages I see that indeed the handler is getting called on another thread while the current handler is still in execution.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;rospy pub /foo std_msgs/String &amp;quot;data: 'hello'&amp;quot;&#xA;ctrl-c&#xA;rospy pub /foo std_msgs/String &amp;quot;data: 'hello'&amp;quot;&#xA;ctrl-c&#xA;rospy pub /foo std_msgs/String &amp;quot;data: 'hello'&amp;quot;&#xA;ctrl-c&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I see the output:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Handle called&#xA;Handle executed&#xA;Handle called&#xA;Handle called&#xA;... several seconds later&#xA;Handle executed&#xA;... several seconds later&#xA;Handle executed&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;However, when I publish a msg periodically from the same publish call:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;rospy pub /foo std_msgs/String &amp;quot;data: 'hello'&amp;quot;-r 1 # publish once a second&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I see this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Handle called&#xA;Handle executed&#xA;... 10 seconds pass&#xA;Handle called&#xA;Handle executed&#xA;... 10 seconds pass&#xA;Handle called&#xA;Handle executed&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I know the message is being published once a second, yet it doesn't spawn a new thread for the callback - so something is throttling the msgs until they have been handled.&lt;/p&gt;&#xA;&lt;p&gt;So the behavior seems to diff depending on if the msgs are arriving from the same process or multiple processes.&lt;/p&gt;&#xA;&lt;p&gt;I confirmed that it wasn't just a behaviour of rostopic pub by writing a simple node that publishes a msg every second and it behaves the same.&lt;/p&gt;&#xA;&lt;p&gt;I haven't looked at the ROS code yet so not sure if its the ROS publisher or subscriber code that is throttling in the same process case.&lt;/p&gt;&#xA;&lt;p&gt;So if you are publishing a topic from a single source then strictly speaking it seems like you don't need a mutex to protect about re-entry by the same topic handler.&lt;/p&gt;&#xA;&lt;p&gt;However, in my opinion, considering that you (or a future developer) might call the same work function from a different callback or from a timer or from a main loop, or since you can use the same handler for multiple topics (that might come from different processes) and since adding a mutex is pretty easy and low effort and overhead it seems reasonable.&lt;/p&gt;&#xA;" OwnerUserId="28122" LastEditorUserId="134" LastEditDate="2021-03-12T09:47:25.003" LastActivityDate="2021-03-12T09:47:25.003" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21892" PostTypeId="2" ParentId="21890" CreationDate="2021-03-09T04:43:41.427" Score="1" Body="&lt;p&gt;Maybe you are looking to crop the occupancy grid. Map server provides some &lt;a href=&quot;http://docs.ros.org/en/jade/api/map_server/html/crop__map_8py.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;api's for cropping&lt;/a&gt;. This sample script from their documentation would shed some light&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;#!/usr/bin/env python&#xA;&#xA;import sys&#xA;import yaml&#xA;from PIL import Image&#xA;import math&#xA;&#xA;def find_bounds(map_image):&#xA;    x_min = map_image.size[0]&#xA;    x_end = 0&#xA;    y_min = map_image.size[1]&#xA;    y_end = 0&#xA;    pix = map_image.load()&#xA;    for x in range(map_image.size[0]):&#xA;        for y in range(map_image.size[1]):&#xA;            val = pix[x, y]&#xA;            if val != 205:  # not unknown&#xA;                x_min = min(x, x_min)&#xA;                x_end = max(x, x_end)&#xA;                y_min = min(y, y_min)&#xA;                y_end = max(y, y_end)&#xA;    return x_min, x_end, y_min, y_end&#xA;&#xA;def computed_cropped_origin(map_image, bounds, resolution, origin):&#xA;00025     &amp;quot;&amp;quot;&amp;quot; Compute the image for the cropped map when map_image is cropped by bounds and had origin  &amp;quot;&amp;quot;&amp;quot;&#xA;    ox = origin[0]&#xA;    oy = origin[1]&#xA;    oth = origin[2]&#xA;&#xA;    # First figure out the delta we have to translate from the lower left corner (which is the origin)&#xA;    # in the image system&#xA;    dx = bounds[0] * resolution&#xA;    dy = (map_image.size[1] - bounds[3]) * resolution&#xA;&#xA;    # Next rotate this by the theta and add to the old origin&#xA;&#xA;    new_ox = ox + dx * math.cos(oth) - dy * math.sin(oth)&#xA;    new_oy = oy + dx * math.sin(oth) + dy * math.cos(oth)&#xA;&#xA;    return [new_ox, new_oy, oth]&#xA;&#xA;if __name__ == &amp;quot;__main__&amp;quot;:&#xA;    if len(sys.argv) &amp;lt; 2:&#xA;        print &amp;gt;&amp;gt; sys.stderr, &amp;quot;Usage: %s map.yaml [cropped.yaml]&amp;quot; % sys.argv[0]&#xA;        sys.exit(1)&#xA;&#xA;    with open(sys.argv[1]) as f:&#xA;        map_data = yaml.safe_load(f)&#xA;&#xA;    if len(sys.argv) &amp;gt; 2:&#xA;        crop_name = sys.argv[2]&#xA;        if crop_name.endswith(&amp;quot;.yaml&amp;quot;):&#xA;            crop_name = crop_name[:-5]&#xA;        crop_yaml = crop_name + &amp;quot;.yaml&amp;quot;&#xA;        crop_image = crop_name + &amp;quot;.pgm&amp;quot;&#xA;    else:&#xA;        crop_yaml = &amp;quot;cropped.yaml&amp;quot;&#xA;        crop_image = &amp;quot;cropped.pgm&amp;quot;&#xA;&#xA;    map_image_file = map_data[&amp;quot;image&amp;quot;]&#xA;    resolution = map_data[&amp;quot;resolution&amp;quot;]&#xA;    origin = map_data[&amp;quot;origin&amp;quot;]&#xA;&#xA;    map_image = Image.open(map_image_file)&#xA;&#xA;    bounds = find_bounds(map_image)&#xA;&#xA;    # left, upper, right, lower&#xA;    cropped_image = map_image.crop((bounds[0], bounds[2], bounds[1] + 1, bounds[3] + 1))&#xA;&#xA;    cropped_image.save(crop_image)&#xA;    map_data[&amp;quot;image&amp;quot;] = crop_image&#xA;    map_data[&amp;quot;origin&amp;quot;] = computed_cropped_origin(map_image, bounds, resolution, origin)&#xA;    with open(crop_yaml, &amp;quot;w&amp;quot;) as f:&#xA;        yaml.dump(map_data, f)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="27064" LastEditorUserId="27064" LastEditDate="2021-03-09T16:15:14.543" LastActivityDate="2021-03-09T16:15:14.543" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21894" PostTypeId="2" ParentId="21888" CreationDate="2021-03-09T05:00:40.697" Score="1" Body="&lt;p&gt;If you intend to stitch images together, you don't need to strictly implement slam. As long as there is good overlap between images, you can use SIFT/SURF features to extract matching keypoints and stitch the images together. Take a look at &lt;a href=&quot;https://www.pyimagesearch.com/2016/01/11/opencv-panorama-stitching/&quot; rel=&quot;nofollow noreferrer&quot;&gt;this tutorial&lt;/a&gt; on panorama creation.&lt;/p&gt;&#xA;&lt;p&gt;However, given your setup, I believe SLAM would be the way to go! since you already have ros setup, I'd suggest going forward with the &lt;a href=&quot;http://docs.ros.org/en/melodic/api/robot_localization/html/index.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;robot_localization&lt;/a&gt; package. You can use this package to fuse the GPS and IMU data to get an accurate location of your robot and then use that to &lt;a href=&quot;http://wiki.ros.org/tf/Tutorials/Writing%20a%20tf%20listener%20%28C%2B%2B%29&quot; rel=&quot;nofollow noreferrer&quot;&gt;transform&lt;/a&gt; your images and lidar pointclouds to create a map. To create a map with lidar pointcloud you can use &lt;a href=&quot;https://pcl.readthedocs.io/projects/tutorials/en/latest/pairwise_incremental_registration.html?highlight=iterative%20closest%20point&quot; rel=&quot;nofollow noreferrer&quot;&gt;iterative closest points&lt;/a&gt; or use a package like &lt;a href=&quot;http://wiki.ros.org/rtabmap_ros&quot; rel=&quot;nofollow noreferrer&quot;&gt;rtabmap&lt;/a&gt;/&lt;a href=&quot;http://wiki.ros.org/octomap&quot; rel=&quot;nofollow noreferrer&quot;&gt;octomap&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;As a stretch, you can even fuse your lidar pointcloud with images to &lt;a href=&quot;https://autoware.readthedocs.io/en/feature-documentation_rtd/DevelopersGuide/PackagesAPI/detection/pixel_cloud_fusion.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;colorize your map&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="27064" LastActivityDate="2021-03-09T05:00:40.697" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21896" PostTypeId="2" ParentId="21866" CreationDate="2021-03-09T11:47:36.733" Score="0" Body="&lt;p&gt;As mentioned above, you first need to develop the kinematic model of the robot. Try formulating the forward kinematics of the robot. For the inverse kinematics, you can either use geometric or algebraic method. A very good source to learn would be this book: &amp;quot;Introduction to Robotics - Mechanics and Control&amp;quot;. In fact, there is a complete solution for forward and inverse kinematics of a 6dof robotics arm. Specifically, the inverse kinematics is solved in the 4th chapter. Here's the &lt;a href=&quot;http://www.mech.sharif.ir/c/document_library/get_file?uuid=5a4bb247-1430-4e46-942c-d692dead831f&amp;amp;groupId=14040&quot; rel=&quot;nofollow noreferrer&quot;&gt;Link&lt;/a&gt; to the book&lt;/p&gt;&#xA;" OwnerUserId="26934" LastActivityDate="2021-03-09T11:47:36.733" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21897" PostTypeId="2" ParentId="18220" CreationDate="2021-03-09T14:59:49.590" Score="2" Body="&lt;p&gt;The answer is not a trivial one. Because,&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;the system dynamics depends on multiple sub-system dynamics (including software, sensors, and actuators (motors in this case))&lt;/li&gt;&#xA;&lt;li&gt;finding the optimum value for t_loop, requires finding the best possible controller for all (i.e. several) t_loop values.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;It's worth considering the following approach:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;assume that the motors have the slowest dynamics (hence they are the bottle-neck for the problem)&lt;/li&gt;&#xA;&lt;li&gt;the bandwidth of the motors will define the frequency at which they can be successfully commanded (you can utilize an open-loop test code, e.g. a code that runs sine waves for the motors in different frequencies, and the decide when the motors are not able to keep up with the commands)&lt;/li&gt;&#xA;&lt;li&gt;the frequency that the motors can receive commands is the control frequency (fm). It is best practice to use a 10*fm frequency to control the motor in this case. ref: &lt;a href=&quot;https://controlguru.com/sample-time-is-a-fundamental-design-and-tuning-specification/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://controlguru.com/sample-time-is-a-fundamental-design-and-tuning-specification/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Further than this, you will need to refer to modern-control literature for the following terms:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;system bandwidth,&lt;/li&gt;&#xA;&lt;li&gt;crossover frequency,&lt;/li&gt;&#xA;&lt;li&gt;nyquist theorem&lt;/li&gt;&#xA;&lt;li&gt;aliasing&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;But, I think a deeper dive into control theory is not necessary at this moment.&lt;/p&gt;&#xA;" OwnerUserId="9570" LastEditorUserId="9570" LastEditDate="2021-03-11T18:51:40.450" LastActivityDate="2021-03-11T18:51:40.450" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21898" PostTypeId="1" CreationDate="2021-03-09T16:10:11.047" Score="0" ViewCount="16" Body="&lt;p&gt;We have a First Tech Challenge kit, but the team that was using it last year forgot the password, so we resulted to a reset.&lt;/p&gt;&#xA;&lt;p&gt;While the reset, the LED lamp in the control hub was supposed to flash purple, then blue, then yellow, then red (as I remember from the control hub manual) but when I do the steps, the LED lamp only flashes green and blue, and the reset isn't complete (I tried entering the default password and It doesn't work).&lt;/p&gt;&#xA;&lt;p&gt;What could possibly be the problem and how can I fix it?&lt;/p&gt;&#xA;&lt;p&gt;Note that ordering a new control hub now is quite difficult and we're really short on time.&lt;/p&gt;&#xA;" OwnerUserId="28125" LastEditorUserId="134" LastEditDate="2021-03-12T09:50:33.560" LastActivityDate="2021-03-12T09:50:33.560" Title="Control Hub not resetting" Tags="&lt;first-robotics&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21899" PostTypeId="1" CreationDate="2021-03-09T16:17:32.637" Score="1" ViewCount="30" Body="&lt;p&gt;I have a simple robot which drives along a track and waters plants. After each watering mission, it should return to its dock for further instructions. The dock has a Raspberry Pi, while the robot uses an Arduino Pro Mini clone.&lt;/p&gt;&#xA;&lt;p&gt;When the robot is at the dock, it connects to the pi using pogo-pins to form a serial connection.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/a9cef.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/a9cef.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Sometimes, the connection is not good - one or more pins are not connecting.&lt;/p&gt;&#xA;&lt;p&gt;What other ways are there to form a serial connection, or what would you recommend?&lt;/p&gt;&#xA;" OwnerUserId="2554" LastActivityDate="2021-03-09T16:17:32.637" Title="solid communication methods for a docking robot" Tags="&lt;serial&gt;&lt;communication&gt;" AnswerCount="0" CommentCount="9" ContentLicense="CC BY-SA 4.0" />
  <row Id="21900" PostTypeId="2" ParentId="21866" CreationDate="2021-03-10T00:48:51.863" Score="0" Body="&lt;p&gt;Since you are solving an Inverse Kinematics (IK) problem, you should already have the pose (position and orientation) of the end effector (EE) relative to the fixed base of the robot (or the pose of both the base and the EE in one common frame). You should also already know how to generate the Forward Kinematics (FK), which can come in handy.&lt;/p&gt;&#xA;&lt;p&gt;There are two ways that I generally recommend approaching an IK problem for a robot that you haven't seen before: one where you turn it into a simpler IK problem and one where you look carefully at the FK equations.&lt;/p&gt;&#xA;&lt;p&gt;For the first one, see if you can find a reference point on the robot that you can locate using only the EE pose which will not move when you rotate the last 1-3 (or more) joints. Once you've found that reference point, you can solve a simpler IK problem to figure out how to use the remaining joints to place the reference point at the desired location.&lt;/p&gt;&#xA;&lt;p&gt;For the second one, the FK equations will tell you which elements of the EE pose are affected by which of the joints: if the joint variable appears in the equation for the height of the EE, for example, then that joint affects the height. If you can find one element that only has 1 joint variable in it then you can solve that element using the reduced set of equations. This also works if there are 2 elements with only 2 joint variables, as long as they are the same 2 variables in both equations, and so on for more elements.&lt;/p&gt;&#xA;&lt;p&gt;Hope that helps! As Ben said in his &lt;a href=&quot;https://robotics.stackexchange.com/questions/21866/how-to-derive-the-inverse-kinematic-equations-for-this-simple-6-dof-robot#comment35650_21866&quot;&gt;comment&lt;/a&gt;, without more details on what you've tried so far we won't be able to provide more than the first steps of a homework problem.&lt;/p&gt;&#xA;&lt;p&gt;Cheers,&#xA;Brandon&lt;/p&gt;&#xA;" OwnerUserId="10414" LastActivityDate="2021-03-10T00:48:51.863" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21901" PostTypeId="2" ParentId="21856" CreationDate="2021-03-10T01:03:53.750" Score="0" Body="&lt;p&gt;I think you are correct that the equals sign in equation (33) should not be there, as reinforced by the first author's thesis.&lt;/p&gt;&#xA;&lt;p&gt;The purpose of those equations are to constrain the MPC-generated footstep positions to ensure that each foot position is within the polygon shown in the following figure relative to the stance foot. In effect, the combination of those matrices will make sure that the generated steps are feasible, as you said.&lt;/p&gt;&#xA;&lt;p&gt;The challenging part (to me at least) is that they have to do it for all steps from the current one to the end of the MPC, so they need to include details for all of those &amp;quot;future&amp;quot; steps in addition to the current step.&lt;/p&gt;&#xA;&lt;p&gt;Hope that helps!&lt;/p&gt;&#xA;&lt;p&gt;Cheers,&#xA;Brandon&lt;/p&gt;&#xA;" OwnerUserId="10414" LastActivityDate="2021-03-10T01:03:53.750" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="21902" PostTypeId="1" CreationDate="2021-03-10T03:08:25.080" Score="0" ViewCount="12" Body="&lt;p&gt;I am reading this description &lt;a href=&quot;http://wiki.ros.org/kinect_calibration/technical#Kinect_operation&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; concerning calibration of the Kinect v1. I am trying to get an understanding of how it all works.&lt;/p&gt;&#xA;&lt;p&gt;From what I understand, the kinect has an near-infrared projector and a near infrared camera. From the description:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The IR camera and the IR projector form a stereo pair with a baseline of approximately 7.5 cm. The IR projector sends out a fixed pattern of light and dark speckles, shown below. The pattern is generated from a set of diffraction gratings, with special care to lessen the effect of zero-order propagation of a center bright dot (see the PrimeSense patent).&#xA;Depth is calculated by triangulation against a known pattern from the projector. The pattern is memorized at a known depth. For a new image, we want to calculate the depth at each pixel. For each pixel in the IR image, a small correlation window (9x9 or 9x7, see below) is used to compare the local pattern at that pixel with the memorized pattern at that pixel and 64 neighboring pixels in a horizontal window (see below for how we estimate the 64-pixel search). The best match gives an offset from the known depth, in terms of pixels: this is called disparity. The Kinect device performs a further interpolation of the best match to get sub-pixel accuracy of 1/8 pixel (again, see below for how this is estimated). Given the known depth of the memorized plane, and the disparity, an estimated depth for each pixel can be calculated by triangulation&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I do not understand the statement: &lt;em&gt;Depth is calculated by triangulation against a known pattern from the projector. The pattern is memorized at a known depth.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;What is the known pattern and what does the author mean the pattern is memorized at a known depth? I'm imagining the projector is projecting some kind of pattern to an object, and then the NIR camera looks at the pattern at a given patch, and tries to match it to some patch in the original pattern (as if the original pattern were projected on a flat plane with no distortion). Then I am not sure what mathematical techniques are used to relate the distorted pattern to the original pattern to compute disparity (and hence depth).&lt;/p&gt;&#xA;&lt;p&gt;Any insights appreciated.&lt;/p&gt;&#xA;" OwnerUserId="26570" LastActivityDate="2021-03-10T03:08:25.080" Title="Understanding how the Kinect v1 works with Structured Light to compute disparity" Tags="&lt;computer-vision&gt;&lt;kinect&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21903" PostTypeId="2" ParentId="21662" CreationDate="2021-03-12T05:41:58.110" Score="0" Body="&lt;p&gt;&lt;strong&gt;Open discussion&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I have the same question and use the marginalization method (instead of matrix inversion lemma) to get the following derivation.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Note: &lt;span class=&quot;math-container&quot;&gt;$z_t$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$u_t$&lt;/span&gt; are ignored to make the equations shorter in the follwoing derivation.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;The equation (38) is the information matrix&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/n0aMg.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/n0aMg.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;for the distribution &lt;span class=&quot;math-container&quot;&gt;$p(x_t,Y^0,Y^+|Y^-=0)$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;If we separate &lt;span class=&quot;math-container&quot;&gt;$Y^0$&lt;/span&gt; and non-&lt;span class=&quot;math-container&quot;&gt;$Y^0$&lt;/span&gt; (&lt;span class=&quot;math-container&quot;&gt;$x_t$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$Y^+$&lt;/span&gt;) parts in &lt;span class=&quot;math-container&quot;&gt;$H'_t$&lt;/span&gt; as&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\begin{matrix}&#xA;H_{x_tY^+x_tY^+} &amp;amp;  H_{x_tY^+Y^0}  &amp;amp; \\&#xA; H_{Y^0x_tY^+} &amp;amp;  H_{Y^0Y^0}  &amp;amp;&#xA;\end{matrix}&#xA;$$&lt;/span&gt;&#xA;, where&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$H_{Y^0Y^0}$&lt;/span&gt; is &lt;span class=&quot;math-container&quot;&gt;$S_{Y^0}H'_tS_{Y^0}^T$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$H_{x_tY^+x_tY^+}$&lt;/span&gt; is &lt;span class=&quot;math-container&quot;&gt;$S_{x_tY^+}H'_tS_{x_tY^+}^T$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$H_{Y^0x_tY^+}$&lt;/span&gt; is &lt;span class=&quot;math-container&quot;&gt;$S_{Y^0}H'_tS_{x_tY^+}^T$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$H_{x_tY^+Y^0}$&lt;/span&gt; is &lt;span class=&quot;math-container&quot;&gt;$S_{x_tY^+}^TH'_tS_{Y^0}$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;And based on the marginalizayion rule:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/krVK1.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/krVK1.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&amp;quot;from &lt;a href=&quot;https://docs.ufpr.br/%7Edanielsantos/ProbabilisticRobotics.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;PROBABILISTIC ROBOTICS&lt;/a&gt;&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;So the informaiton matrix for &lt;span class=&quot;math-container&quot;&gt;$p(x_t,Y^+|Y^-=0)$&lt;/span&gt; is&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;H_{x_tY^+x_tY^+}  - H_{x_tY^+Y^0}(H_{Y^0Y^0})^{-1}H_{Y^0x_tY^+} &#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;equal to&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;S_{x_tY^+}(H'_t - H'_tS_{Y^0}^T(S_{Y^0}H'_tS_{Y^0}^T)^{-1}S_{Y^0}H'_t)S_{x_tY^+}^T&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;I am still working on elimiting &lt;span class=&quot;math-container&quot;&gt;$S_{x_tY^+}$&lt;/span&gt; ...&lt;/p&gt;&#xA;&lt;p&gt;I understand this derivation is not even close to an &amp;quot;answer&amp;quot; but think creating another thread is kind of wasting because we already have this thread.&lt;/p&gt;&#xA;" OwnerUserId="11214" LastActivityDate="2021-03-12T05:41:58.110" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21906" PostTypeId="2" ParentId="20935" CreationDate="2021-03-12T08:15:39.717" Score="0" Body="&lt;p&gt;With the quarantine going less strict I finally have an access to a physical Jaco arm.&lt;br /&gt;&#xA;If someone else will need this info, here are the joint positions of Jaco arm in the home state:&lt;br /&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\boldsymbol{\theta}_{home}=\begin{bmatrix}&#xA;4.8055, 2.9211, 0.9989, 4.2076, 1.4420, 1.3220&#xA;\end{bmatrix}rad&#xA;$$&lt;/span&gt;&#xA;And these are joint positions in retracted state.&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\boldsymbol{\theta}_{ret}=\begin{pmatrix}&#xA;4.7143, 2.6191, 0.4693, 4.6728, 0.0916, 1.7412&#xA;\end{pmatrix}rad&#xA;$$&lt;/span&gt;&#xA;Finally, these are joint positions in retracted state just after you turn on the Jaco and before you do any operation:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\boldsymbol{\theta}_{ret\_off}=\begin{pmatrix}&#xA;4.7246, 2.6108, 0.3681, 4.6694, 0.0905, 1.7441&#xA;\end{pmatrix}rad&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;" OwnerUserId="26563" LastActivityDate="2021-03-12T08:15:39.717" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21908" PostTypeId="1" CreationDate="2021-03-14T00:09:33.933" Score="0" ViewCount="25" Body="&lt;p&gt;One thing I don't understand in EKF SLAM is how landmarks interact with each other. From my understanding this interaction only happens during a loop closing event.&lt;/p&gt;&#xA;&lt;p&gt;When a loop closing occurs, how do you use your new observation of a past landmark to update the prior landmark positions? I understand that your covariance reduces WRT your repeatedly observed landmark but I don't understand how this information is sent back to other landmarks to improve the graph. Can someone explain this to me?&lt;/p&gt;&#xA;" OwnerUserId="21514" LastActivityDate="2021-03-14T00:09:33.933" Title="How are landmarks updated with respect to each other in SLAM?" Tags="&lt;mobile-robot&gt;&lt;slam&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21909" PostTypeId="1" CreationDate="2021-03-14T07:24:31.697" Score="0" ViewCount="10" Body="&lt;p&gt;I had an idea for a LiDAR scanner but am having trouble locking in the feasibility of it.&lt;/p&gt;&#xA;&lt;p&gt;First of all - I know stereo matching would be way more efficient - this is more of a thought experiment at this stage.&lt;/p&gt;&#xA;&lt;p&gt;Usually LiDAR scanners are directed by either single or dual axis robotics, generating either a single axis scanline or a full 3D model.&lt;/p&gt;&#xA;&lt;p&gt;What I am wondering is the feasibility of creating a LiDAR rig that scans within a 2D window, much in the same way a camera takes in light information and eventually ends up as a 2D pixel map.  The purpose of this data being for real-time recreation of an environment, requiring 30+ frames generated per second.&lt;/p&gt;&#xA;&lt;p&gt;The data collection area would be similar to that of a stereo matching device - a field of view around the direction the unit is pointing at would get scanned.&lt;/p&gt;&#xA;&lt;p&gt;I imagine the major data acquisition bottle neck would be the rotors the sensor is mounted on - how quickly can they traverse the acquisition window.  I believe there are LiDAR units with a high enough point collection rate for the task, but I am unsure about the robotics involved.&lt;/p&gt;&#xA;&lt;p&gt;As an example, let's say that the task was to collect point data in a 60° x 40° window in front of the rig, with a point density of 100 x 70 and at 30 ticks per second.&#xA;7,000 points must be collected per frame to populate the region, multiplied by 30 frames per second = 210,000 points per second.  Not a huge ask for quite a few modern sensors.&#xA;Where I'm getting stumped is the best way to construct a robotics rig that will direct the sensor to the angles it needs to collect the data at, if it is even possible to move a sensor that fast.&lt;/p&gt;&#xA;" OwnerUserId="28157" LastActivityDate="2021-03-14T07:24:31.697" Title="LiDAR rig that scans within a projection window" Tags="&lt;lidar&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="21910" PostTypeId="2" ParentId="21158" CreationDate="2021-03-14T19:34:49.403" Score="0" Body="&lt;p&gt;You need to use something like RANSAC or Hough line detectors.&lt;/p&gt;&#xA;" OwnerUserId="21514" LastActivityDate="2021-03-14T19:34:49.403" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21911" PostTypeId="1" CreationDate="2021-03-15T03:49:26.447" Score="1" ViewCount="57" Body="&lt;p&gt;I'm applying a PID for position control on a diff drive robot, got the angles (orientation )between -pi and pi. It works fine until it needs to change its orientation from (let's say) -170 degrees to 170, when instead of changing its orientation by only 20 degrees it does an entire turn (almost 360) to get to the desired orientation. Does anyone knows how to solve this?&lt;/p&gt;&#xA;" OwnerUserId="28161" LastEditorUserId="110" LastEditDate="2021-03-16T16:47:47.563" LastActivityDate="2021-03-16T16:47:47.563" Title="How to choose closest angle when crossing -180 degrees" Tags="&lt;control&gt;&lt;pid&gt;&lt;differential-drive&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21913" PostTypeId="1" CreationDate="2021-03-15T14:10:00.217" Score="0" ViewCount="31" Body="&lt;p&gt;I have been using the standard MG90/SG90 servo motors for years now and am familiar with them. Recently, I am trying to build a robot dog with them with no success. The motors keep on vibrating and can't handle any load. They also use up all the I/O on my Arduino. The gears on the servos also constantly break. (Note: My MG90 still has plastic gears for some reason). That is why I have been looking into Smart Servos. Correct me if I am wrong:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The motors use a Serial bus to communicate with each other and the&#xA;Arduino.&lt;/li&gt;&#xA;&lt;li&gt;You can individually control them and they can do 360 rotation as well as standard 180.&lt;/li&gt;&#xA;&lt;li&gt;They can also send motor status like angle, mode, and current draw back to the Arduino.&lt;/li&gt;&#xA;&lt;li&gt;Most of them also have a lot of torque and metal gears.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;If I am correct so far, could you please explain the difference between the following motors:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;LewanSoul/HiWonder LX-16A&lt;/li&gt;&#xA;&lt;li&gt;Robotis Dynamixel XL330-M077-T&lt;/li&gt;&#xA;&lt;li&gt;Robotis Dynamixel XL330-M288-T&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Also, would switching over to Smart Motors resolve my issues.&lt;/p&gt;&#xA;" OwnerUserId="26747" LastEditorUserId="26747" LastEditDate="2021-03-15T19:44:30.177" LastActivityDate="2021-03-15T19:44:30.177" Title="Smart Servo Motor Type Comparison" Tags="&lt;motor&gt;&lt;servomotor&gt;&lt;serial&gt;&lt;dynamixel&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21914" PostTypeId="1" CreationDate="2021-03-15T15:30:46.290" Score="0" ViewCount="24" Body="&lt;p&gt;I am looking for a good RGBD Camera that I want to use with ROS. Is there a way to know if a camera will work with ROS? Or is it that every camera is compatible with the usb_cam node? I want to send camera_info, image, and depth.&lt;/p&gt;&#xA;" OwnerUserId="26747" LastEditorUserId="26747" LastEditDate="2021-03-16T17:29:42.187" LastActivityDate="2021-03-16T17:29:42.187" Title="RGBD Camera Compatibility with ROS" Tags="&lt;ros&gt;&lt;computer-vision&gt;&lt;cameras&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21915" PostTypeId="1" CreationDate="2021-03-16T05:24:49.307" Score="0" ViewCount="18" Body="&lt;p&gt;Can anybody compare semantic segmentation against optical flow for pixel-level clustering and object detection?&lt;/p&gt;&#xA;" OwnerUserId="18572" LastActivityDate="2021-03-16T05:24:49.307" Title="Semantic Segmentation vs Optical Flow Object Detection" Tags="&lt;computer-vision&gt;&lt;artificial-intelligence&gt;&lt;machine-learning&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21916" PostTypeId="2" ParentId="21911" CreationDate="2021-03-16T16:22:47.107" Score="2" Body="&lt;p&gt;This looks like a common angle wrapping mistake.&#xA;I am assuming you're defining your angles between -180° (&lt;span class=&quot;math-container&quot;&gt;$-\pi$&lt;/span&gt;) to +180° (&lt;span class=&quot;math-container&quot;&gt;$\pi$&lt;/span&gt;).&lt;/p&gt;&#xA;&lt;p&gt;Let's say your current heading is -170°.&lt;br /&gt;&#xA;And you desired heading is 170°.&lt;br /&gt;&#xA;The error in angle is: 170 - (-170) = 340, so your robot has to do almost a full turn to get to the desired heading.&lt;/p&gt;&#xA;&lt;p&gt;Since you're defining your angle in the range &lt;span class=&quot;math-container&quot;&gt;$\left[ -180 ; 180 \right] $&lt;/span&gt;, you should also wrap the error in the same range.&#xA;In the example above, this means removing 360, so the error becomes 340 - 360 = -20. Which is what your PID needs to correct the heading.&lt;/p&gt;&#xA;" OwnerUserId="11462" LastActivityDate="2021-03-16T16:22:47.107" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21919" PostTypeId="1" CreationDate="2021-03-17T00:00:45.023" Score="1" ViewCount="18" Body="&lt;p&gt;I'm currently following a course on coursera on quadrotors, and i'm currently focusing on the trajectory planning mechanism.&lt;/p&gt;&#xA;&lt;p&gt;In the course, it's said that one of the criterias when planning a trajectory, is the smoothness of it, and they define this mathematically as minimizing an &amp;quot;input&amp;quot; that can vary and depends on the system itself (here the quadrotor).&lt;/p&gt;&#xA;&lt;p&gt;I somehow understand that in order to have a smooth trajectory, we need to reduce a specific quantity that i define as &amp;quot;trajectory noise&amp;quot; and cause troubles during the flight and mathematically they define this as follow:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/zJ0po.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/zJ0po.png&quot; alt=&quot;Smoothness function&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;1- We want to reduce this quantity (which i qualify as a trajectory noise) along all the trajectory, and thus we take the integral, basically that how i understood it, correct me if i'm wrong.&lt;/p&gt;&#xA;&lt;p&gt;2- Later in the course, they take several example of inputs and they reduce their square, for example, they consider:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The velocity, and thus they optimize the square of the velocity.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/MqFnw.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MqFnw.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;The acceleration, and thus they optimize the square of the velocity&lt;/li&gt;&#xA;&lt;li&gt;The 3rd derivative (Jerk)&lt;/li&gt;&#xA;&lt;li&gt;The forth derivative (Snap)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;And then at the end, they prove with some mathematical processes that the Snap (4rd derivative) is proportional to the rotation force applied to the quad-rotor (due to the inertia) and therefore they consider the quad-rotor as a 4th degree system, which means the best trajectory is the trajectory that is computed when optimizing the snap of each degree of freedom (x, y, z, roll, pitch, yaw) and they show videos of autonomous quad-rotors flying autonomously based on a snap optimized trajectory and indeed it works pretty well.&lt;/p&gt;&#xA;&lt;p&gt;My questions are:&lt;/p&gt;&#xA;&lt;p&gt;1- Why is the optimized function depending only on either velocity, or acceleration or jerk or snap, i mean why it can't some a combination of these with custom functions ?&lt;/p&gt;&#xA;&lt;p&gt;2- Why specifically optimizing the square of an input ?&lt;/p&gt;&#xA;&lt;p&gt;3- Why snap is the best input for having the smoothest trajectory ? i mean being proportional to the rotation force doesn't seem to me as an obvious critaria to be used for such purpose.&lt;/p&gt;&#xA;&lt;p&gt;Please correct me if i'm wrong in any of my declarations.&lt;/p&gt;&#xA;" OwnerUserId="27968" LastActivityDate="2021-03-17T00:00:45.023" Title="Quadrotor Smooth Trajectory optimization" Tags="&lt;quadcopter&gt;&lt;path-planning&gt;&lt;trajectory&gt;&lt;planning&gt;&lt;optimization&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21922" PostTypeId="1" CreationDate="2021-03-19T03:47:04.050" Score="0" ViewCount="17" Body="&lt;p&gt;I have a circle of radius 300 cm on whose circumference robots stop after moving in the environment. The robots only have a communication radius of 10 cm such that they can fit 6 robots along the diameter of the communication circle. Robots can only communicate i.e. receive and transmit messages from robots within their communication radius. Now I want to keep track of how many robots are present on the circumference of the 300 cm circle at any instant t.&lt;/p&gt;&#xA;&lt;p&gt;What I was doing is this :&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;If robot_1 stops on the circumference on circle then echo&#xA;&amp;quot;counter=1&amp;quot;. Counter is initialized with counter=0&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Another robot_2 stops on the circumference and within the comm.&#xA;radius of robot_1 and recieves the echoed &amp;quot;Counter=1&amp;quot;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;It checks its own counter value and if (recived_counter_value &amp;gt;&#xA;own_counter_value) then own_counter_value=recived counter value+1&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Robot_2 then send its counter value to robot_1&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Similarly the counter value propogates as robots keep stopping&#xA;within comm. radius of each other.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;But it doesn't seem to work. Robots also have unique IDs so I can keep the track of IDs from which the current robot is receiving messages from but the memory is limited so I'm trying to avoid using the IDs but if you have an algorithm that makes use of ID then please feel free to help.&lt;/p&gt;&#xA;" OwnerUserId="26149" LastActivityDate="2021-03-19T03:47:04.050" Title="Need help with counting the number of robots on the circumference of a circle much larger than the communication radius of the robots" Tags="&lt;mobile-robot&gt;&lt;algorithm&gt;" AnswerCount="0" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="21923" PostTypeId="1" AcceptedAnswerId="21934" CreationDate="2021-03-19T05:52:23.850" Score="0" ViewCount="53" Body="&lt;p&gt;I'm trying to make a roughly 5 pound, hanging halloween decoration bounce on a string from about 1-3 times per second, preferably at variable speeds if I can.&lt;/p&gt;&#xA;&lt;p&gt;I've looked up a simple DC motor circuit with a potentiometer and 3 power transistors CTC-1351 in parallel to act as a speed controller (picture attached), but wanted to verify the right type/powered motor, as well as the correct transistors to be able to lift small weights.&lt;/p&gt;&#xA;&lt;p&gt;(I'm going to tie a string to a bent metal rod attached to the motor shaft to achieve the oscillating bounce.)&lt;/p&gt;&#xA;&lt;p&gt;[&lt;img src=&quot;https://i.stack.imgur.com/EDvfv.jpg&quot; alt=&quot;The circuit made by the instructables page mentioned][1]&quot; /&gt;&lt;/p&gt;&#xA;" OwnerUserId="28196" LastActivityDate="2021-03-23T15:49:12.990" Title="What type of electric motor and speed-controlled circuit do I use to bounce a hanging, 5 pound weight? (it's for a Halloween decoration)" Tags="&lt;motor&gt;&lt;kinematics&gt;&lt;rotation&gt;&lt;circuit&gt;&lt;dc&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21924" PostTypeId="1" CreationDate="2021-03-19T11:45:02.050" Score="1" ViewCount="26" Body="&lt;p&gt;“update area outside of original map area” is the error I get when visualising the topic /move_base/global_costmap/costmap. The cost map displays correctly, there is nothing on google or the docs to suggest what might cause it except the source code for rviz here where the error originates.'&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://docs.ros.org/en/jade/api/rviz/..&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://docs.ros.org/en/jade/api/rviz/..&lt;/a&gt;. at line 506&lt;/p&gt;&#xA;&lt;p&gt;I tried setting up the height and width parameters in the global costmap common params to the size of the map in pixels (384x384); the map is generated by Gmapping. I read the documentation but couldn't find anything helpful to troubleshoot or what might be causing it.&lt;/p&gt;&#xA;" OwnerUserId="18345" LastActivityDate="2021-03-19T11:45:02.050" Title="Rviz Status Error in Costmap: Update area outside original area" Tags="&lt;mobile-robot&gt;&lt;ros&gt;&lt;navigation&gt;&lt;path-planning&gt;&lt;rviz&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21925" PostTypeId="1" CreationDate="2021-03-20T05:44:22.540" Score="1" ViewCount="24" Body="&lt;p&gt;i have a question about the output of lidar sendor (like velodyne vlp-16, etc)&lt;/p&gt;&#xA;&lt;p&gt;Is there any spatial or temporal locality for output data which is from lidar sensor?&#xA;Does the produced output data from lidar sensor are stored in memory position sequentially or randomly?&#xA;(which means that if a data from 0x000 and 0x001 point are spatially or temporally related.)&lt;/p&gt;&#xA;&lt;p&gt;I see that lidar output data is obtained by spherical coordinate system and converted to cartesian coordiate system.&#xA;(FIG 9-1, &lt;a href=&quot;https://greenvalleyintl.com/wp-content/uploads/2019/02/Velodyne-LiDAR-VLP-16-User-Manual.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://greenvalleyintl.com/wp-content/uploads/2019/02/Velodyne-LiDAR-VLP-16-User-Manual.pdf&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;p&gt;And there is a driver code to make un-ordered point cloud data to ordered data&#xA;(&lt;a href=&quot;https://github.com/ros-drivers/velodyne/blob/master/velodyne_pointcloud/include/velodyne_pointcloud/organized_cloudXYZIRT.h&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/ros-drivers/velodyne/blob/master/velodyne_pointcloud/include/velodyne_pointcloud/organized_cloudXYZIRT.h&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;p&gt;So, i guess lidar sensor is rotating 360' and sequentially produce the output and save them to certain memory location. So, is that possible to presume that memory address could give us hint for point cloud data information even before the ordering process?&lt;/p&gt;&#xA;&lt;p&gt;Thank you.&#xA;If i have some lidar sensor, then this question could be solved easily. but i don't have one.&lt;/p&gt;&#xA;" OwnerUserId="28191" LastActivityDate="2021-04-22T23:06:30.650" Title="does lidar sensor output data have spatial locality?" Tags="&lt;lidar&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21926" PostTypeId="1" CreationDate="2021-03-20T08:57:00.337" Score="1" ViewCount="62" Body="&lt;p&gt;I built EKF and UKF SLAM algorithms. The problem is that I expected to see a difference because of the more precise approximation of the system in the UKF.&lt;/p&gt;&#xA;&lt;p&gt;Here's a screenshot from the estimated path from both filters [sorry about the German]:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/o8PEJ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/o8PEJ.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;As you can see, the differences are very minor and sum up to an equal performance of both filters within the mean errors for every estimated state. I thought increasing the system noise for a bigger uncertainty would make the advantages of the UKF clearer but it didn't make a difference.&lt;/p&gt;&#xA;&lt;p&gt;UKF Parameters:&#xA;&lt;span class=&quot;math-container&quot;&gt;$\alpha$&lt;/span&gt;: 0.01,&#xA;&lt;span class=&quot;math-container&quot;&gt;$\kappa$&lt;/span&gt;: 0,&#xA;&lt;span class=&quot;math-container&quot;&gt;$\beta$&lt;/span&gt;: 0.&lt;/p&gt;&#xA;&lt;p&gt;My question is, what could be the reason for the similiar results of both filters and how can we enhence the UKF performance?&lt;/p&gt;&#xA;&lt;p&gt;Thanks.&lt;/p&gt;&#xA;&lt;p&gt;Nvm, the result improved with UKF parameters from a backup. The parameters where to low. New Parameters:&#xA;&lt;span class=&quot;math-container&quot;&gt;$\alpha$&lt;/span&gt;: 0.5,&#xA;&lt;span class=&quot;math-container&quot;&gt;$\kappa$&lt;/span&gt;: 25,&#xA;&lt;span class=&quot;math-container&quot;&gt;$\beta$&lt;/span&gt;: 2.&lt;/p&gt;&#xA;&lt;p&gt;New Result&#xA;&lt;a href=&quot;https://i.stack.imgur.com/nD0IC.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/nD0IC.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Mean error X-Position&lt;/p&gt;&#xA;&lt;p&gt;EKF 0.7572&lt;/p&gt;&#xA;&lt;p&gt;UKF 0.2501&lt;/p&gt;&#xA;&lt;p&gt;mean error Y-Position&lt;/p&gt;&#xA;&lt;p&gt;EKF 0.4535&lt;/p&gt;&#xA;&lt;p&gt;UKF 0.1708&lt;/p&gt;&#xA;&lt;p&gt;Mean error orientation&lt;/p&gt;&#xA;&lt;p&gt;EKF 0.0112&lt;/p&gt;&#xA;&lt;p&gt;UKF 0.0083&lt;/p&gt;&#xA;" OwnerUserId="27965" LastEditorUserId="28193" LastEditDate="2021-03-30T15:28:44.683" LastActivityDate="2021-03-30T15:28:44.683" Title="No difference between UKF and EKF for SLAM" Tags="&lt;slam&gt;&lt;localization&gt;&lt;kalman-filter&gt;&lt;ekf&gt;&lt;sensor-fusion&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21928" PostTypeId="2" ParentId="21662" CreationDate="2021-03-21T06:18:46.670" Score="1" Body="&lt;p&gt;I still couldn't derive it, but maybe I could prove it thanks to &lt;a href=&quot;https://robotics.stackexchange.com/users/11214/willsapgreen&quot;&gt;willSapgreen&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Information matrix of distribution &lt;span class=&quot;math-container&quot;&gt;$p(x_t, Y^+, Y^0|Y^-=0)$&lt;/span&gt; is &lt;span class=&quot;math-container&quot;&gt;$H_t'$&lt;/span&gt;;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$H_t'=S_{x_t,Y^+,Y^0}S^T_{x_t,Y^+,Y^0}H_tS^T_{x_t,Y^+,Y^0}S_{x_t,Y^+,Y^0}$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;This matrix can be written as&#xA;&lt;span class=&quot;math-container&quot;&gt;$$H_t' = \left(\begin{array}{cc}&#xA;H_{x_t,Y^+,x_t,Y^+}&amp;amp;H_{x_t,Y^+,Y^0}\\H_{Y^0,x_t,Y^+}&amp;amp;H_{Y^0,Y^0}&#xA;\end{array}\right)\tag{1}$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Information matrix of marginal distribution &lt;span class=&quot;math-container&quot;&gt;$p(x_t, Y^+|Y^-=0)$&lt;/span&gt; is as follows. Note that dimension of &lt;span class=&quot;math-container&quot;&gt;$\tilde{H}_{x_t,Y^+,x_t,Y^+}$&lt;/span&gt; is &lt;span class=&quot;math-container&quot;&gt;$3n\times3n$&lt;/span&gt; where &lt;span class=&quot;math-container&quot;&gt;$n$&lt;/span&gt; is the number of active features that we are going to inactivate.&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$\tilde{H}_{x_t,Y^+,x_t,Y^+}=H_{x_t,Y^+,x_t,Y^+}-H_{x_t,Y^+,Y^0}H^{-1}_{Y^0,Y^0}H_{Y^0,x_t,Y^+}$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;What we need as &lt;span class=&quot;math-container&quot;&gt;$H_t^1$&lt;/span&gt; should be as follows. Note that dimension of &lt;span class=&quot;math-container&quot;&gt;$H_t^1$&lt;/span&gt; is &lt;span class=&quot;math-container&quot;&gt;$3(N+1)\times3(N+1)$&lt;/span&gt; where dimension of &lt;span class=&quot;math-container&quot;&gt;$x_t$&lt;/span&gt; is &lt;span class=&quot;math-container&quot;&gt;$1\times3$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$N$&lt;/span&gt; is the number of all features(&lt;span class=&quot;math-container&quot;&gt;$Y^+,Y^0,Y^-$&lt;/span&gt;), and &lt;span class=&quot;math-container&quot;&gt;$&quot;0&quot;$&lt;/span&gt; here means zero matrix that has appropriate dimension.&#xA;&lt;span class=&quot;math-container&quot;&gt;$$H_t^1 = \left(\begin{array}{cc}&#xA;\tilde{H}_{x_t,Y^+,x_t,Y^+}&amp;amp;0\\0&amp;amp;0&#xA;\end{array}\right)\tag{2}$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;If we calculate equation(38) with using elements of (1), then&#xA;&lt;span class=&quot;math-container&quot;&gt;$$\begin{align}&#xA;H_t'&amp;amp;-H_t'S_{Y^0}(S_{Y^0}^TH_t'S_{Y^0})^{-1}S_{Y^0}^TH_t' \\&#xA;&amp;amp;=&#xA;\left(\begin{array}{cc}&#xA;H_{x_t,Y^+,x_t,Y^+}&amp;amp;H_{x_t,Y^+,Y^0}\\H_{Y^0,x_t,Y^+}&amp;amp;H_{Y^0,Y^0}&#xA;\end{array}\right)-&#xA;\left(\begin{array}{c}H_{x_t,Y^+,Y^0}\\H_{Y^0,Y^0}\end{array}\right) &#xA;H_{Y^0,Y^0}^{-1}&#xA;\left(\begin{array}{cc}H_{x_t,Y^+,x_t,Y^+}&amp;amp;H_{x_t,Y^+,Y^0}\end{array}\right) &#xA;\\&#xA;&amp;amp;=&#xA;\left(\begin{array}{cc}&#xA;H_{x_t,Y^+,x_t,Y^+}&amp;amp;H_{x_t,Y^+,Y^0}\\H_{Y^0,x_t,Y^+}&amp;amp;H_{Y^0,Y^0}&#xA;\end{array}\right)-&#xA;\left(\begin{array}{cc}&#xA;H_{x_t,Y^+,x_t,Y^+}H_{Y^0,Y^0}^{-1}H_{Y^0,x_t,Y^+}&amp;amp;H_{x_t,Y^+,Y^0}\\H_{Y^0,x_t,Y^+}&amp;amp;H_{Y^0,Y^0}&#xA;\end{array}\right)\\&#xA;&amp;amp;=&#xA;\left(\begin{array}{cc}\tilde{H}_{x_t,Y^+,x_t,Y^+}&amp;amp;0\\0&amp;amp;0\end{array}\right)\\&#xA;&amp;amp;=H_t^1&#xA;\end{align}$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Equation (38) can be equalled with (2).&lt;/p&gt;&#xA;&lt;p&gt;This is not exactly the answer to what I questioned, but this is ok for me.&lt;/p&gt;&#xA;" OwnerUserId="27775" LastEditorUserId="27775" LastEditDate="2021-03-21T06:35:58.997" LastActivityDate="2021-03-21T06:35:58.997" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21929" PostTypeId="1" CreationDate="2021-03-21T08:45:38.920" Score="1" ViewCount="42" Body="&lt;p&gt;So I'm trying to send commands to my Roomba Discovery via python serial and it works fine as long as it only requires the command opcode. The commands that require additional data bytes (like specific movement or music) don't seem to be working. It's an old roomba, however, I do not believe that is the issue as I am able to use Java based applications like RoombaMidi2 from hackingroomba.com. The code below works fine to have the roomba clean for 5 seconds then sleep:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;import serial&#xA;import time&#xA;import struct&#xA;&#xA;ser = serial.Serial(&amp;quot;/dev/ttyUSB0&amp;quot;, 57600)&#xA;&#xA;ser.write(bytes([128])) # 128: start command &#xA;ser.write(bytes([131])) # 131: Safe Mode&#xA;time.sleep (0.25)&#xA;&#xA;ser.write(bytes([135])) # 135: clean command &#xA;time.sleep (5)&#xA;&#xA;ser.write(bytes([133])) # 133: puts robot to sleep&#xA;ser.close()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;But if I want to do a move command it doesn't seem to work. I've tried:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;ser.write(bytes([137]))&#xA;ser.write(bytearray([255, 56]))&#xA;ser.write(bytearray([1, 244]))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;No error, but it doesn't do anything. I've also tried sending it as 1 byte array:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;ser.write(bytearray([137, 255, 56, 1, 244]))&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Any idea on what I'm doing wrong?&lt;/p&gt;&#xA;" OwnerUserId="28209" LastActivityDate="2021-04-01T13:34:33.747" Title="How do you send multiple data bytes to Irobot Roomba via python serial" Tags="&lt;irobot-create&gt;&lt;python&gt;&lt;serial&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21930" PostTypeId="1" CreationDate="2021-03-21T22:04:45.797" Score="1" ViewCount="21" Body="&lt;p&gt;I know most vehicles are controlled via CAN (Controlled Area Network) protocol through an ECU (Electronic Control Unit) which send/receives data using this protocol and then sends/receives Amps/Volts to appropriate sensors throughout the vehicle.&lt;/p&gt;&#xA;&lt;p&gt;I was wondering &lt;strong&gt;what is the most common system to control servo-driven robots&lt;/strong&gt; that is analogous to CAN/ECU controlling vehicles.&lt;/p&gt;&#xA;" OwnerUserId="28211" LastActivityDate="2021-03-21T22:04:45.797" Title="What network protocol/control units are servo-based robots controlled with?" Tags="&lt;robotic-arm&gt;&lt;servomotor&gt;&lt;can&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21931" PostTypeId="2" ParentId="21926" CreationDate="2021-03-22T08:32:24.263" Score="2" Body="&lt;p&gt;The EKF is a first-order approximation, which is achieved by linearizing the system about the current state estimate (i.e., the mean). In some cases, the EKF is not stable due to nonlinearities. For example, if the system is highly nonlinear, then the EKF might not work well.&lt;/p&gt;&#xA;&lt;p&gt;In contrast, the UKF uses the unscented transform , which is a function to estimate a nonlinear transformation applied to a probability distribution. Ideally, the exact nonlinear transformation would be used, but often is not possible or not practical.&lt;/p&gt;&#xA;&lt;p&gt;The main benefit in using the UKF instead of the EKF is to handle nonlinearities, but the EKF is often less computationally expensive as the Jacobians can be computed analytically offline. If the system is linear, the UKF provides no benefit (as far as I know), and if the system is close to linear, the result of the EKF and UKF will be similar.&lt;/p&gt;&#xA;&lt;p&gt;I suspect that the linearization is adequate, so the UKF just doesn't provide much benefit.&lt;/p&gt;&#xA;" OwnerUserId="15213" LastActivityDate="2021-03-22T08:32:24.263" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21932" PostTypeId="2" ParentId="21929" CreationDate="2021-03-22T17:16:11.700" Score="1" Body="&lt;p&gt;I'm not sure if/how pyserial works with a &lt;code&gt;bytearray&lt;/code&gt;, but the way it is typically done is with the &lt;a href=&quot;https://docs.python.org/3/library/struct.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;struct&lt;/a&gt; library.  Here is some sample code:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;import serial&#xA;import struct&#xA;&#xA;ser = serial.Serial(&amp;quot;/dev/ttyUSB0&amp;quot;, 57600)&#xA;&#xA;# compute left and right wheel velocities&#xA;right_vel = int(velocity + (rotation/2))&#xA;left_vel = int(velocity - (rotation/2))&#xA;&#xA;cmd = struct.pack(&amp;quot;&amp;gt;Bhh&amp;quot;, 145, right_vel, left_vel)&#xA;&#xA;ser.write(cmd)&#xA;ser.flush()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I know the &lt;code&gt;&amp;quot;&amp;gt;Bhh&amp;quot;&lt;/code&gt; thing can look scary, but it is simply specifying the format of the bytes to transmit over the wire.  Here, you are saying this:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;&amp;gt;&lt;/code&gt; The bytes will be in &lt;a href=&quot;https://en.wikipedia.org/wiki/Endianness&quot; rel=&quot;nofollow noreferrer&quot;&gt;big-endian&lt;/a&gt; format&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;B&lt;/code&gt; The first thing transmitted (145) is an &amp;quot;unsigned char&amp;quot;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;hh&lt;/code&gt; The next two things transmitted are &amp;quot;signed short integers&amp;quot;.  Note that these are 2 bytes long each.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;See this tutorial for more info on using Python to control Create2: &lt;a href=&quot;https://edu.irobot.com/learning-library/python-tethered-driving-for-create-2&quot; rel=&quot;nofollow noreferrer&quot;&gt;Python Tethered Driving for Create 2&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2021-03-22T17:16:11.700" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21933" PostTypeId="1" CreationDate="2021-03-23T13:15:19.563" Score="2" ViewCount="31" Body="&lt;p&gt;I am trying to compute the forward kinematics for a 6 DOF robot arm.&lt;/p&gt;&#xA;&lt;p&gt;I've found two methods : the Denavit-Hartenberg (original and modified) and the product of exponentials with the Rodrigues formula.&lt;/p&gt;&#xA;&lt;p&gt;But I did not found any paper on the advantages and disadvantages of these two.&lt;/p&gt;&#xA;&lt;p&gt;This methods are very similar because we define the axis lengths and twist angles but how are they different?&lt;/p&gt;&#xA;&lt;p&gt;Thanks a lot for your explanations.&lt;/p&gt;&#xA;" OwnerUserId="28222" LastActivityDate="2021-03-23T13:15:19.563" Title="Difference between Denavit-Hartenberg and Rodrigues formulas/conventions" Tags="&lt;kinematics&gt;&lt;forward-kinematics&gt;&lt;path-planning&gt;&lt;dh-parameters&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21934" PostTypeId="2" ParentId="21923" CreationDate="2021-03-23T15:35:13.617" Score="0" Body="&lt;p&gt;I can see several issues with your design. The motor control is just one.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Gearing&lt;/strong&gt;. For 1-3 bounces per second, that's 60-180 RPM.  Your motor probably goes something like 1750 RPM.  As jsotola commented, you'll need to add a gearbox, or else replace the motor with one that has an integrated gearbox (&amp;quot;gear motor&amp;quot;). You won't be able to reliably control a motor at less than 1/10 its rated speed -- it'll stall, or groan but not move, depending on how you hold your mouth when turning the knob :-).&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Resonance&lt;/strong&gt;. If the weight is to be oscillating on the spring, your system will have a natural frequency. Making the weight heavier, or using a longer or wimpier spring will be slower oscillation; lighter weight or stiffer/shorter spring will be faster.  You should plan on experimenting with springs to get the right bounce speed.&lt;/p&gt;&#xA;&lt;p&gt;The up-and-down drive from the motor should match the mechanical resonance.  Adjusting motor speed to drive it off-resonance will still sort of work, but not nearly as well. If you really want variable frequency you'll need have some way to adjust the spring length, or pick up and shed weight on the fly, or something. If you drive it at resonance, the resonance will mean the motor doesn't have to do all the heavy lifting. Maybe you could even get away with a smaller motor.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;PWM&lt;/strong&gt;. Controllers for motors as beefy as the one in your picture typically use pulse-width modulation. Your linear setup with pot and transistors is attractively simple and intuitive. But consider that all the electric power that your motor isn't drawing will have to be dissipated as heat by those poor heat-sink-less transistors. A PWM setup, instead of dissipating the power, in effect turns it off for some fraction of the time, many times a second. It will be considerably more complicated, though -- probably including something like an Arduino. Keep those transistors, though, they might yet serve as the switching element.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Crank, or cam&lt;/strong&gt;. (You only asked about the motor and controller, so this is just kibitzing.) A crank, shaped like the L-shape part that connects a bicycle pedal to the gears, would convert rotary motion from the gearbox shaft into up&amp;amp;down motion of the 5-pound decoration.  If you drive it at mechanical resonance, the weight will bounce on the spring higher than just the crank throw. OTOH you might get interesting behavior by driving with a cam shaped to do something besides sinusoidal -- like a gradual rise followed by a sudden drop.&lt;/p&gt;&#xA;" OwnerUserId="27618" LastEditorUserId="27618" LastEditDate="2021-03-23T15:49:12.990" LastActivityDate="2021-03-23T15:49:12.990" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="21935" PostTypeId="1" CreationDate="2021-03-23T15:46:52.513" Score="3" ViewCount="64" Body="&lt;p&gt;I am currently working on a system with a BLDC motor attached to a non linear spring on which a user can apply a force. Meaning the torque applied on the motor's output is most of the time unknown.&lt;/p&gt;&#xA;&lt;p&gt;What matters for my application currently is the position of the motor regarding its reference.&#xA;I control this motor using a DRV8323 chip and a single PWM as input to this chip. The driver chip is doing the phase commutation itself thanks to Hall sensors.&lt;/p&gt;&#xA;&lt;p&gt;The control strategy that I currently use is the following :&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Given a reference position as input to a PID&lt;/li&gt;&#xA;&lt;li&gt;The PID compute the position error and gives as output the duty cycle of the PWM send to the DRV8323 chip. (here there is an implicit conversion from position to speed but it works)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;It happened to me already that the motor coils burnt because of current going crazy because of bad configuration or mechanical problems. Also, I saw in a lots of article that BLDC motor are most of the time control with nested &lt;strong&gt;position &amp;gt; speed &amp;gt; current&lt;/strong&gt; loops.&lt;/p&gt;&#xA;&lt;p&gt;So my question are the following :&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;What would be the benefits of implementing this full nested control architecture for the control compared to my current implementation ? Taking into consideration that what I want to control is the motor position but overshoot, acoustic noise and heat generation are also a concern.&lt;/li&gt;&#xA;&lt;li&gt;Could a simple &lt;strong&gt;if condition&lt;/strong&gt; on a specific current thresold would be enough to protect the hardware from overccurent accident ?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Thank you in advance for your help !!&lt;/p&gt;&#xA;" OwnerUserId="28223" LastActivityDate="2021-03-29T19:37:55.320" Title="Inner current controller benefits" Tags="&lt;pid&gt;&lt;current&gt;&lt;bldc&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21936" PostTypeId="2" ParentId="21925" CreationDate="2021-03-23T22:47:45.263" Score="0" Body="&lt;p&gt;You can’t assume the order in memory corresponds to a particular point in space. The Velodyne you are referring rotates to collect data to make a point cloud, but not necessarily in the order that is intuitive without understanding the hardware.&lt;/p&gt;&#xA;&lt;p&gt;However, the driver of the sensor may have some particular ordering in memory corresponding to the spherical coordinates of the points, but you would need to check the documentation.&lt;/p&gt;&#xA;" OwnerUserId="15213" LastActivityDate="2021-03-23T22:47:45.263" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21937" PostTypeId="2" ParentId="21935" CreationDate="2021-03-24T21:53:33.010" Score="4" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;What would be the benefits of implementing this full nested control architecture for the control compared to my current implementation&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Textbooks are always a great source of information!&lt;/p&gt;&#xA;&lt;p&gt;Reference: &amp;quot;Feedback Systems - An Introduction for Scientists and Engineers&amp;quot;, Karl Johan Astrom, Richard M. Murray.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/WsvXy.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/WsvXy.png&quot; alt=&quot;par-1&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/kig8z.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kig8z.png&quot; alt=&quot;par-2&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Could a simple if condition on a specific current thresold would be enough to protect the hardware from overccurent accident&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes!&lt;/p&gt;&#xA;" OwnerUserId="6941" LastActivityDate="2021-03-24T21:53:33.010" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21938" PostTypeId="1" CreationDate="2021-03-25T06:19:18.593" Score="1" ViewCount="31" Body="&lt;p&gt;I have a robotic arm 6-DOF and an Intel RealSense depth camera. I want to go from pixel values to 3D world coordinates, is it possible with eye-in-hand calibration? If yes can you guide me on how to perform this calibration?&#xA;I have done some study on my own but have a lot of doubts.&lt;/p&gt;&#xA;" OwnerUserId="28237" LastEditorUserId="110" LastEditDate="2021-03-25T13:18:11.230" LastActivityDate="2021-03-26T12:44:37.123" Title="Depth camera pixel values to 3D coordinates" Tags="&lt;robotic-arm&gt;&lt;computer-vision&gt;&lt;calibration&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21939" PostTypeId="1" AcceptedAnswerId="21941" CreationDate="2021-03-25T10:30:51.750" Score="0" ViewCount="34" Body="&lt;p&gt;I trying to understand how manipulators robot works (6 DOF)&lt;/p&gt;&#xA;&lt;p&gt;I would like to know if the inverse kinematics (IK) solution give only one or multiple solution if we include the rotation (3x3 matrix) of the TCP ?&#xA;In others words, can we have the same TCP position and orientation for multiple configuraiton angles of the robot ?&lt;/p&gt;&#xA;&lt;p&gt;I know that forward kinematics (FK) give only 1 solution (which seems logic) but IK is way more difficult to represent.&lt;/p&gt;&#xA;&lt;p&gt;Thank in advance !&lt;/p&gt;&#xA;" OwnerUserId="28222" LastActivityDate="2021-03-25T21:26:43.527" Title="Can a 6 DOF robot have multiple inverse kinematics solution with a constrained rotation/orientation" Tags="&lt;kinematics&gt;&lt;inverse-kinematics&gt;&lt;forward-kinematics&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21940" PostTypeId="1" CreationDate="2021-03-25T15:14:10.680" Score="0" ViewCount="22" Body="&lt;p&gt;I'm testing &lt;a href=&quot;https://github.com/cartographer-project/cartographer&quot; rel=&quot;nofollow noreferrer&quot;&gt;cartographer&lt;/a&gt; using the Deutsches Museum public bag.&#xA;I'm trying different Lua settings and checking how it affects the mapping process, etc.&lt;/p&gt;&#xA;&lt;p&gt;What I notice is that, no matter what configuration I change (whether it's sampling ratios, publish frequencies, accumulated range data for submaps, voxel filter size, motion filter settings, etc, etc), the amount of points in the trajectory seems to be always the same. Take for example this screenshot taken from Rviz:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/FFLPf.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/FFLPf.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;What I get from this image is that every intra-submap contraint in gold/yellow for submap 0, goes from the coordinates origin (0,0) to each and every node in the trajectory for this submap. This amount of nodes, and the consequent amount of constraints, seem to remain invariant no matter what configuration I change.&lt;/p&gt;&#xA;&lt;p&gt;Is it because it depends purely on range scan frequency (which is constant because I'm replaying a bag)?&lt;/p&gt;&#xA;&lt;p&gt;What controls when/if a node is added to a trajectory?&lt;/p&gt;&#xA;&lt;p&gt;Thanks!&lt;/p&gt;&#xA;" OwnerUserId="7812" LastActivityDate="2021-03-25T15:14:10.680" Title="Cartographer: What determines how many nodes are added to a trajectory?" Tags="&lt;slam&gt;&lt;localization&gt;&lt;mapping&gt;&lt;pose&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21941" PostTypeId="2" ParentId="21939" CreationDate="2021-03-25T21:26:43.527" Score="0" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;can we have the same TCP position and orientation for multiple configuraiton angles of the robot&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Sure!&lt;/p&gt;&#xA;&lt;p&gt;The number of DOF of a manipulator tells us if it's possible or not to reach a pose (position + orientation) in the operational space at hand (usually 6-dimensional).&lt;/p&gt;&#xA;&lt;h2&gt;Examples&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If we work in a 6D operational space, then we are required to have &lt;strong&gt;at least&lt;/strong&gt; a 6-DOF manipulator to reach a full pose (when this pose is within the allowed range).&lt;/li&gt;&#xA;&lt;li&gt;If we deal with a planar manipulator and we are interested in attaining only a target position (i.e. no orientation), then we need a 2-DOF manipulator &lt;strong&gt;at least&lt;/strong&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Same as above but now we include the orientation of the gripper; it follows that we need &lt;strong&gt;at least&lt;/strong&gt; a 3-DOF manipulator.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Notice how I've highlighted the term &amp;quot;&lt;strong&gt;at least&lt;/strong&gt;&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;On the other hand, nothing is said about how many joint configurations can resolve the single given target pose.&lt;/p&gt;&#xA;&lt;p&gt;In general, we have many joint configurations! A clear example of that is provided by a 6-DOF manipulator that can easily move all its joints while keeping the position as well as the orientation of the tip fixed. The latter can be achieved by resorting to the so-called null-space projection method.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastActivityDate="2021-03-25T21:26:43.527" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21942" PostTypeId="1" CreationDate="2021-03-25T22:41:46.083" Score="1" ViewCount="22" Body="&lt;p&gt;I am working on a 7 DOF robot. I want to solve the Inverse Kinematic(IK) of the robot using the inverse transformation matrix which I found them using DH. I mean:&#xA;&lt;span class=&quot;math-container&quot;&gt;\begin{equation*}&#xA;T = &#xA;\begin{pmatrix}&#xA;R &amp;amp; p  \\&#xA;0 &amp;amp; 1  \\&#xA;\end{pmatrix}\\&#xA;T ^{-1}= &#xA;\begin{pmatrix}&#xA;R^{T} &amp;amp; -R^{T}p  \\&#xA;0 &amp;amp; 1  \\&#xA;\end{pmatrix}&#xA;\end{equation*}&lt;/span&gt;&#xA;I am a little bit confused about that and I have these questions:&lt;/p&gt;&#xA;&lt;p&gt;1)Does this method gives a unique solution, eventhough there is 7 joints?&lt;br /&gt;&#xA;&lt;br /&gt;&#xA;2)How to avoid singularities by this method?&lt;br /&gt;&#xA;&lt;br /&gt;&#xA;3)If I want to have a center of motion on my robot(lets say on link 2, that the robot always stays on that point and rotate over it, like a surgerical robot that only should go through the body over a single small hole), How can I consider that in my IK solution?&lt;br /&gt;&#xA;If I put my first three frames of DH on that point, does that make the IK solution consider that constraint automatically?&lt;br /&gt;&#xA;&lt;br /&gt;&#xA;Thanks in advance&lt;/p&gt;&#xA;" OwnerUserId="28244" LastActivityDate="2021-03-25T22:41:46.083" Title="solving inverse kinematic using DH to keep it rotating over a center of motion" Tags="&lt;inverse-kinematics&gt;&lt;dh-parameters&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21943" PostTypeId="2" ParentId="21938" CreationDate="2021-03-26T12:44:37.123" Score="1" Body="&lt;p&gt;The steps are pretty easy to implement!&lt;/p&gt;&#xA;&lt;p&gt;The Realsense provides you with the depth &lt;span class=&quot;math-container&quot;&gt;$d$&lt;/span&gt; corresponding to the pixel &lt;span class=&quot;math-container&quot;&gt;$(u,v)$&lt;/span&gt;. Knowing from the forward kinematics of the robot arm the &lt;span class=&quot;math-container&quot;&gt;$4 \times 4$&lt;/span&gt; homogeneous transformation &lt;span class=&quot;math-container&quot;&gt;$\mathbf{T}$&lt;/span&gt; from the root reference frame to the 3D frame of the camera attached to the end-effector, the 3D coordinates of the point &lt;span class=&quot;math-container&quot;&gt;$\mathbf{p}$&lt;/span&gt; projected in the pixel at hand are:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\mathbf{p} =  \mathbf{T} \cdot \left( \frac{d}{f} \cdot \left( u-\frac{w-1}{2} \right), \; \frac{d}{f} \cdot \left( v-\frac{h-1}{2} \right), \; d, \; 1 \right)',&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;where the resolution of the camera is &lt;span class=&quot;math-container&quot;&gt;$w \times h$&lt;/span&gt; pixels, while &lt;span class=&quot;math-container&quot;&gt;$f$&lt;/span&gt; is the camera focal length that you can retrieve from the Realsense API.&lt;/p&gt;&#xA;&lt;p&gt;Clearly, &lt;span class=&quot;math-container&quot;&gt;$\mathbf{T}$&lt;/span&gt; depends on the current configuration of the arm joints.&lt;/p&gt;&#xA;&lt;p&gt;Bear in mind that the standard reference frame of the camera has the z-axis orthogonal to the image plane and pointing outward, the x-axis pointing rightward, and the y-axis pointing downward as specified by the &lt;a href=&quot;https://en.wikipedia.org/wiki/Pinhole_camera_model&quot; rel=&quot;nofollow noreferrer&quot;&gt;pinhole camera model&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastActivityDate="2021-03-26T12:44:37.123" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21944" PostTypeId="1" CreationDate="2021-03-26T13:10:20.587" Score="0" ViewCount="64" Body="&lt;p&gt;If I have the following area-split box:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/VrxIQ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/VrxIQ.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Depending on the mass distribution of the box, the center of mass (CM) could be inside the light gray area labeled A, the red area labeled B, the blue area labeled C, the pink area labeled D, the green area labeled E, the yellow area labeled F, or the dark gray area labeled G. These areas come close to, but do not touch, the dashed force lines that bound them.&lt;/p&gt;&#xA;&lt;p&gt;During quasistatic pushing, the contact forces acting on the box, from the pushing finger and the table, must balance the downward gravity force. If the contact mode is SrSr (the box slides to the right without tipping) as the finger moves to the right, &lt;strong&gt;in which areas might the center of mass be?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is for a course I'm taking now, and I have tried every possible answer and it didn't work.&lt;/p&gt;&#xA;" OwnerUserId="20909" LastActivityDate="2021-04-06T00:15:18.757" Title="Center of Mass of a Box" Tags="&lt;force&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21946" PostTypeId="2" ParentId="2676" CreationDate="2021-03-26T21:32:58.613" Score="0" Body="&lt;p&gt;I'm sure you know that torque is rotational force about an axis. It is a combination of distance from the center of the shaft and the force. It seems that you are being suggested all kinds of fancy tools (no disrespect to anyone), how about keeping it simple and cheap (and a bit inaccurate)? put tape around the shaft to grow the diameter (make it tight so it doesn't compress under the next step). Then put a string and a weight (pennies in a plastic bag). When your motor stalls, measure the weight of the pennies, and multiply it by the radius of the shaft. Since tape doesn't weigh much, and it's offset by the counterweight on the other side, it shouldn't skew your readings too much. It's one way to what you are looking for.&lt;/p&gt;&#xA;&lt;p&gt;You didn't specify this in questions, but I am assuming you want starting torque, which is the highest anyway, and goes down with speed.&lt;/p&gt;&#xA;&lt;p&gt;Good luck.&lt;/p&gt;&#xA;" OwnerUserId="18167" LastActivityDate="2021-03-26T21:32:58.613" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21947" PostTypeId="2" ParentId="21830" CreationDate="2021-03-26T22:52:57.553" Score="0" Body="&lt;p&gt;I had this problem in my project.  If you are sampling very quickly, then sometimes you get zero ticks and sometimes one.  That causes a lot of noise.  The solution is to only calculate velocity after a sampling time AND minimum number of ticks has passed.  I do that in this &lt;a href=&quot;https://github.com/Ezward/Esp32CameraRover2&quot; rel=&quot;nofollow noreferrer&quot;&gt;project&lt;/a&gt;.  See discussion in docs; &lt;a href=&quot;https://github.com/Ezward/Esp32CameraRover2/blob/master/docs/wheel_encoders.md#reducing-noise-in-velocity-measurements&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/Ezward/Esp32CameraRover2/blob/master/docs/wheel_encoders.md#reducing-noise-in-velocity-measurements&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="24763" LastEditorUserId="24763" LastEditDate="2021-03-27T05:52:52.160" LastActivityDate="2021-03-27T05:52:52.160" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21948" PostTypeId="2" ParentId="21256" CreationDate="2021-03-27T01:45:03.317" Score="1" Body="&lt;p&gt;If the cameras are stationary it should work to use Structure from Motion (&lt;a href=&quot;https://github.com/mapillary/OpenSfM&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/mapillary/OpenSfM&lt;/a&gt;). Failing that the cameras are stationary you could attempt to create a factor graph in gtsam to solve for the camera movement, object movement, and projections between the cameras and object. See a simple SFM setup here: &lt;a href=&quot;https://gtsam-jlblanco-docs.readthedocs.io/en/latest/StructureFromMotion.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://gtsam-jlblanco-docs.readthedocs.io/en/latest/StructureFromMotion.html&lt;/a&gt; or here &lt;a href=&quot;http://nghiaho.com/?p=2379&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://nghiaho.com/?p=2379&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="16033" LastActivityDate="2021-03-27T01:45:03.317" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21949" PostTypeId="1" CreationDate="2021-03-27T17:55:23.383" Score="3" ViewCount="69" Body="&lt;p&gt;I have to calculate the required torque to rotate a point mass of 15N on the end of an 1.2m long arm which I have calculated to be 10kg in mass. The rotation must have a constant angular velocity of 50rad/s. I am just wondering how to calculate the required torque at the joint. I am also wondering how to deal with the inertia and acceleration of the point mass and the rotating arm which relates to torque required. Any help with calculations for this problem would be greatly appreciated.&lt;/p&gt;&#xA;" OwnerUserId="28252" LastEditorUserId="110" LastEditDate="2021-03-30T15:32:38.907" LastActivityDate="2021-03-30T15:32:38.907" Title="Torque required to rotate arm with mass at end" Tags="&lt;motor&gt;&lt;torque&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21950" PostTypeId="2" ParentId="21949" CreationDate="2021-03-28T00:16:42.710" Score="1" Body="&lt;p&gt;First let's consider the peak torque required, important for sizing the motor.&lt;/p&gt;&#xA;&lt;p&gt;The peak torque will be max when the arm is horizontal, rising.  It will be the sum of torques due to the point mass plus that of the arm itself.&lt;/p&gt;&#xA;&lt;p&gt;Your point mass applies a torque of 15N * 1.2m = ____ N-m.&lt;/p&gt;&#xA;&lt;p&gt;If the arm's mass is 10kg, its weight is ____ N.&lt;/p&gt;&#xA;&lt;p&gt;You can model the arm as a point mass at the center of mass.&lt;/p&gt;&#xA;&lt;p&gt;If it is uniform, the center of mass is at the center of the arm, 0.6 m.&lt;/p&gt;&#xA;&lt;p&gt;The arm applies a torque of [arm weight] N * 0.6 m = _____N-m.&lt;/p&gt;&#xA;&lt;p&gt;As long as the actuator can apply torque greater than that, the machine will (eventually) accelerate to the required angular velocity.&lt;/p&gt;&#xA;&lt;p&gt;Now let's move on to the instantaneous torque, as a function of time, in order to maintain a &lt;em&gt;constant&lt;/em&gt; angular velocity.&lt;/p&gt;&#xA;&lt;p&gt;Let theta be the angle the arm makes with the up-vertical (clock hands at midnight). The moment arm for each of the above torques is proportional to sin theta. So the instantaneous torque will be a sinusoid. Note that half the time the actuator is lifting the weight and the other half it is holding back the weight to keep it from falling freely. This is consistent with sin theta being negative half the time.&lt;/p&gt;&#xA;" OwnerUserId="27618" LastEditorUserId="27618" LastEditDate="2021-03-28T17:04:34.960" LastActivityDate="2021-03-28T17:04:34.960" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21951" PostTypeId="2" ParentId="21935" CreationDate="2021-03-28T02:10:25.423" Score="0" Body="&lt;blockquote&gt;&#xA;&lt;p&gt;What would be the benefits of implementing this full nested control architecture for the control compared to my current implementation ?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;There are lots of them, but from the sounds of things the two biggest advantages would be &amp;quot;automatic&amp;quot; current limiting and the inner current loop would present a more linear plant to the outer position or velocity loop.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Could a simple if condition on a specific current thresold would be enough to protect the hardware from overccurent accident ?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;If you mean, could you just use the loop you have and cut the power if a limit was exceeded?  Yes, this would protect hardware, but it would be very difficult to smoothly control either the current or the overall plant, because any time the current limit was exceeded the plant would -- from the perspective of the outer controller -- change behavior.&lt;/p&gt;&#xA;&lt;p&gt;If you mean could you incorporate a current limit by using &amp;quot;if&amp;quot; statements to limit the current command -- yes, by all means, in a computerized control system that's how you do it.&lt;/p&gt;&#xA;" OwnerUserId="1411" LastActivityDate="2021-03-28T02:10:25.423" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21952" PostTypeId="1" CreationDate="2021-03-28T17:03:55.383" Score="1" ViewCount="16" Body="&lt;p&gt;i been trying to code IK solver for few days, and i finally move the robot to the desired position.&#xA;However im having hard time to orient the end-effector as i want it.&lt;/p&gt;&#xA;&lt;p&gt;I read the &amp;quot;Robotics Modeling, Planning control -Siciliano&amp;quot; and few simillar question&amp;amp;answers.&lt;/p&gt;&#xA;&lt;p&gt;As i understand, there are two ways.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Use analytic Jacobian to map the &lt;span class=&quot;math-container&quot;&gt;$ \dot{p}  =[v_x, v_y, v_z, w_x, w_y, w_z]'$&lt;/span&gt; to &lt;span class=&quot;math-container&quot;&gt;$ \dot{p}'  =[v_x, v_y, v_z, \dot{\phi}, \dot{\theta}, \dot{\psi}]'$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;li&gt;using &lt;span class=&quot;math-container&quot;&gt;$R_d=[n_d, s_d, a_d], R_e=[n_e, s_e, a_e]$&lt;/span&gt; rotation matrix of the end-effector and desired rotation matrix, find orientation error. (angle-axis method maybe?)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;I tried first method since I didn't really understand the second method.&#xA;as far as i know analytic Jacobian can be obtained by&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;\begin{equation*}&#xA;J_a(q) = &#xA;\begin{bmatrix}&#xA;I &amp;amp; 0 \\&#xA;0 &amp;amp; B^{-1}(r,p,y) \\&#xA;\end{bmatrix}*J(q)&#xA;\end{equation*}&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;where B matrix is&#xA;&lt;span class=&quot;math-container&quot;&gt;\begin{equation*}&#xA;B = &#xA;\begin{bmatrix}&#xA;-sin(r)cos(p)/sin(p) &amp;amp; cos(r)cos(p)/sin(p) &amp;amp; 1\\&#xA;cos(r) &amp;amp; sin(r) &amp;amp; 0 \\&#xA;sin(r)/sin(p) &amp;amp; -cos(r)/sin(p) &amp;amp; 0&#xA;\end{bmatrix}&#xA;\end{equation*}&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;With this analytic jacobian i tried to find&#xA;&lt;span class=&quot;math-container&quot;&gt;\begin{equation*} \dot{q}_{1-6} = Ja(q)^{-1}\dot{p}'\end{equation*}&lt;/span&gt;&#xA;Considering there is no problem on getting jacobian. I will briefly explain my code in case there is something i am missing.&lt;/p&gt;&#xA;&lt;p&gt;For the desired pos, orientation i gave x,y,z,r,p,yaw desire value with initial joint anlge.&#xA;and I find roll,pitch,yaw value for each iteration to compare with desired value.&#xA;I make geometric jacobian and analytic jacobian to get a thetadot by multiplying pseudoinvser analytic jacobian with [x,y,z,roll,pitch,yaw] and check if position and r,p,y values are converges. Also update theat value with thetaddot value.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;error_X = Xdesire - Xcurrent;&#xA;error_Y = Ydesire - Ycurrent;&#xA;error_Z = Zdesire - Zcurrent;&#xA;error_Roll = Rolldesire - Rollcurrent;&#xA;error_Pitch = Pitchdesire - Pitchcurrent;&#xA;error_Yaw = Yawdesire - Yawcurrent;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;For the error part, position error always convserge but not r,p,yaw error. Maybe problem here?&#xA;Everything seems okay for me but orientation doesn't considered.&#xA;Am i doing something wrong or is there something i am missing?&lt;/p&gt;&#xA;&lt;p&gt;Mycode is based on the this work.&#xA;&lt;a href=&quot;https://kr.mathworks.com/matlabcentral/fileexchange/61380-3dof-inverse-kinematics-pseudoinverse-jacobian?s_tid=prof_contriblnk&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://kr.mathworks.com/matlabcentral/fileexchange/61380-3dof-inverse-kinematics-pseudoinverse-jacobian?s_tid=prof_contriblnk&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I added my code if ther e is anyone who is kind enough to review it, i would really thankful. It doesn't requires any function so if you have matlab u can just run it.&lt;/p&gt;&#xA;&lt;p&gt;thx for reading a long question. If there is any unclear things let me know!&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;clc&#xA;clear&#xA;close&#xA;&#xA;goal_pos =[575 50 425 0 90 0]; % x, y, z, roll, pitch, yaw&#xA;init_ang =[10 20 5 10 10 10];&#xA;&#xA;theta1=init_ang(1);  d1=0;   a1=50;  alpha1=-90; %parameter link1&#xA;theta2=init_ang(2);  d2=50;   a2=425;  alpha2=0; %parameter link2&#xA;theta3=init_ang(3);  d3=0;  a3=0;  alpha3=90; %parameter link3&#xA;theta4=init_ang(4);  d4=425;   a4=0;  alpha4=-90; %parameter link4&#xA;theta5=init_ang(5);  d5=0; a5=0;  alpha5=90; %parameter link5&#xA;theta6=init_ang(6);  d6=100; a6=0;  alpha6=0; %parameter link6&#xA;offset2 = -90;&#xA;offset3 = 90;&#xA;T01=[cosd(theta1) -cosd(alpha1)*sind(theta1) sind(alpha1)*sind(theta1) a1*cosd(theta1);&#xA;    sind(theta1) cosd(alpha1)*cosd(theta1)  -sind(alpha1)*cosd(theta1) a1*sind(theta1);&#xA;    0,sind(alpha1),cosd(alpha1),d1;&#xA;    0,0,0,1];&#xA;T12=[cosd(theta2+offset2) -cosd(alpha2)*sind(theta2+offset2) sind(alpha2)*sind(theta2+offset2) a2*cosd(theta2+offset2);&#xA;    sind(theta2+offset2) cosd(alpha2)*cosd(theta2+offset2)  -sind(alpha2)*cosd(theta2+offset2) a2*sind(theta2+offset2);&#xA;    0,sind(alpha2),cosd(alpha2),d2;&#xA;    0,0,0,1];&#xA;T23=[cosd(theta3+offset3) -cosd(alpha3)*sind(theta3+offset3) sind(alpha3)*sind(theta3+offset3) a3*cosd(theta3+offset3);&#xA;    sind(theta3+offset3) cosd(alpha3)*cosd(theta3+offset3)  -sind(alpha3)*cosd(theta3+offset3) a3*sind(theta3+offset3);&#xA;    0,sind(alpha3),cosd(alpha3),d3;&#xA;    0,0,0,1];&#xA;T34=[cosd(theta4) -cosd(alpha4)*sind(theta4) sind(alpha4)*sind(theta4) a4*cosd(theta4);&#xA;     sind(theta4) cosd(alpha4)*cosd(theta4)  -sind(alpha4)*cosd(theta4) a4*sind(theta4);&#xA;     0,sind(alpha4),cosd(alpha4),d4;&#xA;     0,0,0,1];&#xA;T45=[cosd(theta5) -cosd(alpha5)*sind(theta5) sind(alpha5)*sind(theta5) a5*cosd(theta5);&#xA;     sind(theta5) cosd(alpha5)*cosd(theta5)  -sind(alpha5)*cosd(theta5) a5*sind(theta5);&#xA;     0,sind(alpha5),cosd(alpha5),d5;&#xA;     0,0,0,1];&#xA;T56=[cosd(theta6) -cosd(alpha6)*sind(theta6) sind(alpha6)*sind(theta6) a6*cosd(theta6);&#xA;     sind(theta6) cosd(alpha6)*cosd(theta6)  -sind(alpha6)*cosd(theta6) a6*sind(theta6);&#xA;     0,sind(alpha6),cosd(alpha6),d6;&#xA;     0,0,0,1];&#xA;T01;&#xA;T02 = T01*T12;&#xA;T03 = T01*T12*T23;&#xA;T04 = T01*T12*T23*T34;&#xA;T05 = T01*T12*T23*T34*T45;&#xA;T06 = T01*T12*T23*T34*T45*T56;&#xA;%%%%%                      POSITION                %%%%%%%%%%%%%%%&#xA;ne = T06(1:3,1);&#xA;se = T06(1:3,2);&#xA;ae = T06(1:3,3);&#xA;Re = [ne se ae] % orientation of ee&#xA;roll = rad2deg(atan2(ne(2), ne(1)));&#xA;pitch = rad2deg(atan2(-ne(3),sqrt(se(3)^2+ae(3)^2)));&#xA;yaw = rad2deg(atan2(se(3),ae(3)));&#xA;&#xA;%R = inv(R03')*R36; &#xA;disp(&amp;quot;init ee&amp;quot;);&#xA;INIT_EE = T06;&#xA;% DH paramter &#xA;&#xA;Xc=goal_pos(1);Yc=goal_pos(2);Zc=goal_pos(3);&#xA;r_e=goal_pos(4);p_e=goal_pos(5);yaw_e=goal_pos(6);&#xA;% init pos and orientation(Euler)&#xA;&#xA;iteration = 0;&#xA;b = 0 ;&#xA;deltatheta1=0;deltatheta2=0; deltatheta3=0; %theta1,2,3 velocity&#xA;deltatheta4=0;deltatheta5=0; deltatheta6=0; %theta4,5,6 velocity&#xA;while b == 0&#xA;%     result = [theta1 theta2 theta3 theta4 theta5 theta6];&#xA;%     disp(&amp;quot;result&amp;quot;); disp(result);&#xA;    theta1=theta1+deltatheta1/2;&#xA;    theta2=theta2+deltatheta2/2;&#xA;    theta3=theta3+deltatheta3/2;&#xA;    theta4=theta4+deltatheta4/2;&#xA;    theta5=theta5+deltatheta5/2;&#xA;    theta6=theta6+deltatheta6/2;&#xA;    result = [deg2rad(theta1) deg2rad(theta2) deg2rad(theta3) deg2rad(theta4) deg2rad(theta5) deg2rad(theta6)];&#xA;    if(iteration &amp;gt; 1000)&#xA;        % avoid too many calculation&#xA;        b=1;&#xA;        iteration = 0;&#xA;    end&#xA;    T01=[cosd(theta1) -cosd(alpha1)*sind(theta1) sind(alpha1)*sind(theta1) a1*cosd(theta1);&#xA;        sind(theta1) cosd(alpha1)*cosd(theta1)  -sind(alpha1)*cosd(theta1) a1*sind(theta1);&#xA;        0,sind(alpha1),cosd(alpha1),d1;&#xA;        0,0,0,1];&#xA;    T12=[cosd(theta2+offset2) -cosd(alpha2)*sind(theta2+offset2) sind(alpha2)*sind(theta2+offset2) a2*cosd(theta2+offset2);&#xA;        sind(theta2+offset2) cosd(alpha2)*cosd(theta2+offset2)  -sind(alpha2)*cosd(theta2+offset2) a2*sind(theta2+offset2);&#xA;        0,sind(alpha2),cosd(alpha2),d2;&#xA;        0,0,0,1];&#xA;    T23=[cosd(theta3+offset3) -cosd(alpha3)*sind(theta3+offset3) sind(alpha3)*sind(theta3+offset3) a3*cosd(theta3+offset3);&#xA;        sind(theta3+offset3) cosd(alpha3)*cosd(theta3+offset3)  -sind(alpha3)*cosd(theta3+offset3) a3*sind(theta3+offset3);&#xA;        0,sind(alpha3),cosd(alpha3),d3;&#xA;        0,0,0,1];&#xA;    T34=[cosd(theta4) -cosd(alpha4)*sind(theta4) sind(alpha4)*sind(theta4) a4*cosd(theta4);&#xA;         sind(theta4) cosd(alpha4)*cosd(theta4)  -sind(alpha4)*cosd(theta4) a4*sind(theta4);&#xA;         0,sind(alpha4),cosd(alpha4),d4;&#xA;         0,0,0,1];&#xA;    T45=[cosd(theta5) -cosd(alpha5)*sind(theta5) sind(alpha5)*sind(theta5) a5*cosd(theta5);&#xA;         sind(theta5) cosd(alpha5)*cosd(theta5)  -sind(alpha5)*cosd(theta5) a5*sind(theta5);&#xA;         0,sind(alpha5),cosd(alpha5),d5;&#xA;         0,0,0,1];&#xA;    T56=[cosd(theta6) -cosd(alpha6)*sind(theta6) sind(alpha6)*sind(theta6) a6*cosd(theta6);&#xA;         sind(theta6) cosd(alpha6)*cosd(theta6)  -sind(alpha6)*cosd(theta6) a6*sind(theta6);&#xA;         0,sind(alpha6),cosd(alpha6),d6;&#xA;         0,0,0,1];&#xA;    T01;&#xA;    T02 = T01*T12;&#xA;    T03=T01*T12*T23;&#xA;    T04=T01*T12*T23*T34;&#xA;    T05=T01*T12*T23*T34*T45;&#xA;    T06=T01*T12*T23*T34*T45*T56;&#xA;    &#xA;    ne = T06(1:3,1);&#xA;    se = T06(1:3,2);&#xA;    ae = T06(1:3,3);&#xA;    Re = [ne se ae] % orientation of ee&#xA;    roll = rad2deg(atan2(ne(2), ne(1)));&#xA;    pitch = rad2deg(atan2(-ne(3),sqrt(se(3)^2+ae(3)^2)));&#xA;    yaw = rad2deg(atan2(se(3),ae(3)));&#xA;&#xA;%     if theta6 &amp;lt; 90&#xA;%         theta6 = pi-theta6;&#xA;%     elseif theta6 &amp;gt; 90&#xA;%         theta6  = theta6;&#xA;%     end&#xA;    &#xA;    P0=[0 0 0];&#xA;    P1=transpose(T01(1:3,4));&#xA;    P2=transpose(T02(1:3,4));&#xA;    P3=transpose(T03(1:3,4));&#xA;    P4=transpose(T04(1:3,4));&#xA;    P5=transpose(T05(1:3,4));&#xA;    P6=transpose(T06(1:3,4));&#xA;    %%%%%%%%%%%%%%%%%%%%%%%&#xA;    Z0  = [0;0;1];Ori =[0;0;0]; O6=T06(1:3,4);&#xA;    Jv1 = cross(Z0,(O6-Ori));&#xA;    &#xA;    Z1  = T01(1:3,3);Ori_1=T01(1:3,4);&#xA;    Jv2 = cross(Z1,(O6-Ori_1));&#xA;    &#xA;    Z2  = T12(1:3,3);Ori_2=T12(1:3,4);&#xA;    Jv3 = cross(Z2,(O6-Ori_2));&#xA;&#xA;    Z3  = T23(1:3,3);Ori_3=T23(1:3,4);&#xA;    Jv4 = cross(Z3,(O6-Ori_3));&#xA;    &#xA;    Z4  = T34(1:3,3);Ori_4=T34(1:3,4);&#xA;    Jv5 = cross(Z4,(O6-Ori_4));&#xA;    &#xA;    Z5  = T45(1:3,3);Ori_5=T45(1:3,4);&#xA;    Jv6 = cross(Z5,(O6-Ori_5));&#xA;    Jg=[Jv1 Jv2 Jv3 Jv4 Jv5 Jv6;&#xA;       Z0 Z1 Z2 Z3 Z4 Z5];&#xA;   &#xA;    B = [-sind(roll)*cosd(pitch)/sind(pitch) cosd(roll)*cosd(pitch)/sind(pitch) 1;&#xA;        cosd(roll) sind(roll) 0;&#xA;        sind(roll)/sind(pitch) -cosd(roll)/sind(pitch) 0];&#xA;    &#xA;    Ja =[eye(3) zeros(3);&#xA;        zeros(3) inv(B)] * Jg;&#xA;    Xinit=P6(1,1); &#xA;    Yinit=P6(1,2);&#xA;    Zinit = P6(1,3);&#xA;    Rinit=roll; &#xA;    Pinit=pitch;&#xA;    Yawinit = yaw;&#xA;    Xend=Xc;Yend=Yc; Zend = Zc;&#xA;    Rend=r_e; Pend=p_e; Yawend = yaw_e;&#xA;    Xspeed=(Xend-Xinit);&#xA;    Yspeed=(Yend-Yinit);&#xA;    Zspeed=(Zend-Zinit);&#xA;    Rspeed=(Rend-Rinit);&#xA;    Pspeed=(Pend-Pinit);&#xA;    Yawspeed=(Yawend-Yawinit);&#xA;    thetadot=pinv(Ja)*[Xspeed;Yspeed;Zspeed;Rspeed;Pspeed;Yawspeed];&#xA;    error_x = Xspeed^2;&#xA;    error_y = Yspeed^2;&#xA;    error_z = Zspeed^2;&#xA;    error_r = Rspeed^2;&#xA;    error_p = Pspeed^2;&#xA;    error_yaw = Yawspeed^2;&#xA;      &#xA;    if abs(error_x)&amp;lt;=0.2 &amp;amp;&amp;amp; abs(error_y)&amp;lt;=0.2 &amp;amp;&amp;amp; abs(error_z)&amp;lt;=0.2 &amp;amp;&amp;amp; abs(error_r)&amp;lt;=0.5 &amp;amp;&amp;amp; abs(error_p)&amp;lt;=0.5 &amp;amp;&amp;amp; abs(error_yaw)&amp;lt;=0.5&#xA;        End_EE = T06;&#xA;        b=1;&#xA;    end&#xA;    theta1dot=thetadot(1,1);&#xA;    theta2dot=thetadot(2,1);&#xA;    theta3dot=thetadot(3,1);&#xA;    theta4dot=thetadot(4,1);&#xA;    theta5dot=thetadot(5,1);&#xA;    theta6dot=thetadot(6,1);&#xA;    &#xA;    deltatheta1=rad2deg(theta1dot);&#xA;    deltatheta2=rad2deg(theta2dot);&#xA;    deltatheta3=rad2deg(theta3dot);&#xA;    deltatheta4=rad2deg(theta4dot);&#xA;    deltatheta5=rad2deg(theta5dot);&#xA;    deltatheta6=rad2deg(theta6dot);&#xA;    Q1=[P0(1,1) P1(1,1) P2(1,1),P3(1,1),P4(1,1),P5(1,1)];&#xA;    Q2=[P0(1,2) P1(1,2) P2(1,2),P3(1,2),P4(1,2),P5(1,2)];&#xA;    Q3=[P0(1,3) P1(1,3) P2(1,3),P3(1,3),P4(1,3),P5(1,3)];&#xA;    plot3(Q1,Q2,Q3, '-o','LineWidth',4);&#xA;    axis([-700 700 -700 700 -700 700]);&#xA;    grid on&#xA;    pause(0.001);&#xA;    iteration = iteration +1;&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="24916" LastActivityDate="2021-03-28T17:03:55.383" Title="How can i consider orientation of 6dof manipulator for inverse kinematic?" Tags="&lt;inverse-kinematics&gt;&lt;manipulator&gt;&lt;forward-kinematics&gt;&lt;jacobian&gt;&lt;orientation&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21953" PostTypeId="2" ParentId="21683" CreationDate="2021-03-28T17:48:45.803" Score="0" Body="&lt;p&gt;Your LIDAR will need some active stabilization. Under gravity alone it will sway like a pendulum.&lt;/p&gt;&#xA;&lt;p&gt;You could start with a web search for &amp;quot;servo gimbal&amp;quot;. Resulting hits show complete devices, arduino projects, tuning strategies, hobbyist guides, etc., for drones, copters, UAVs, etc. Your LIDAR mount might benefit from work done for mounting cameras. That suggests a look at camera pan-tilt setups, which sort of combine gimbal and servo motors.&lt;/p&gt;&#xA;&lt;p&gt;The solution, whether manufactured or DIY, will have a gimbal mount, an accelerometer, servo motors, and a microcontroller.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;strong&gt;gimbal&lt;/strong&gt; is like a 2 degree of freedom mounting bracket. Your LIDAR would be rigidly fastened to the moving part of the gimbal, and the gimbal's base would be rigidly fastened to your airframe.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;strong&gt;accelerometer&lt;/strong&gt;, mounted to the LIDAR, measures the tilt (i.e. 1 g, pointing down). It'll be only approximate if your airframe is being chaotically accelerated by violent wind gusts, or in freefall!&lt;/p&gt;&#xA;&lt;p&gt;The two &lt;strong&gt;servo motors&lt;/strong&gt; tilt the gimbal in the two degrees of freedom. Model airplane servos conveniently bundle motor, geartrain, and control electronics in one little package.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;strong&gt;microcontroller&lt;/strong&gt; provides the smarts to tie it all together. Its basic control algorithm is pretty simple. Continuously, it reads the &amp;quot;g&amp;quot; vector from the accelerometer, and commands the servos to move the gimbal (hence LIDAR) to counteract any tilt. Fancier coding can try to deal with anomalous responses, or respond to commands from the transmitter.&lt;/p&gt;&#xA;&lt;p&gt;If you go the DIY route, the arduino is popular and has a broad, supportive user community, but it is by no means the only option (or necessarily the best).  Accelerometers are pretty cheap and light. Servos are engineered to be light.&lt;/p&gt;&#xA;" OwnerUserId="27618" LastActivityDate="2021-03-28T17:48:45.803" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21954" PostTypeId="2" ParentId="2676" CreationDate="2021-03-28T18:22:59.880" Score="0" Body="&lt;p&gt;Measuring the force applied to a measured moment arm will give you what is needed to compute the torque.&lt;/p&gt;&#xA;&lt;p&gt;I think the simplest way is to use a servo horn and a kitchen scale (if you already have one).&lt;/p&gt;&#xA;&lt;p&gt;On the servo horn, measure the distance from the axis to the mounting hole you'll use. When that arm of the servo horn is horizontal, your measured distance will be the moment arm for the torque.&lt;/p&gt;&#xA;&lt;p&gt;To measure the force, to use an electronic kitchen scale to measure how much &lt;em&gt;lighter&lt;/em&gt; a weight gets when the servo tries to lift it.&lt;/p&gt;&#xA;&lt;p&gt;Choose a weight a little too heavy for the servo to lift. With the weight on the scale, use string or something and rig the servo to try to lift it at &amp;quot;arm's length&amp;quot; -- that is, with the servo horn arm horizontal. With the weight on the scale, but servo not lifting, zero (tare) the scale.  As the servo struggles to lift the weight, whatever force it exerts will reduce the scale's measured weight, directly reading the force you want, albeit negative.&lt;/p&gt;&#xA;&lt;p&gt;If you are measuring your only servo, consider that some servo designs cannot tolerate stall. Overheating and broken gears are the symptoms of engineering to minimize weight and manufacturing cost.&lt;/p&gt;&#xA;" OwnerUserId="27618" LastActivityDate="2021-03-28T18:22:59.880" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21955" PostTypeId="1" CreationDate="2021-03-28T19:57:57.100" Score="3" ViewCount="37" Body="&lt;p&gt;I am studying robot arm kinematics. In order to construct a transformation from a global coordinate frame to the end effector frame, I have seen references to the Denavit–Hartenberg (DH) convention. In this convention, a single operator is constructed for each joint which takes its frame to the next and depends on the angle of the joint and three other parameters specific to the convention.&lt;/p&gt;&#xA;&lt;p&gt;However, in &lt;a href=&quot;http://www.programmingvision.com/rosen_diankov_thesis.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this paper&lt;/a&gt;, section 4.1.1 page 104 implies that the transformation chain can be deconstructed into two transformations for each joint, one of which represents the rotation about an arbitrary axis (the joint axis) and the other is a constant affine transformation.&lt;/p&gt;&#xA;&lt;p&gt;Does anyone know how to deconstruct the chain as this paper references?  To me it seems that even what they call a constant affine transformation must still depend on the angle of the previous joint when compared to the DH method.&lt;/p&gt;&#xA;" OwnerUserId="28267" LastEditorUserId="28193" LastEditDate="2021-03-30T15:28:12.733" LastActivityDate="2021-03-30T15:28:12.733" Title="Forward kinematics confusing point" Tags="&lt;kinematics&gt;&lt;forward-kinematics&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21956" PostTypeId="1" AcceptedAnswerId="21961" CreationDate="2021-03-29T03:42:23.123" Score="1" ViewCount="32" Body="&lt;p&gt;I am currently doing a project as my hobby. I am trying to simulate a robot car in a grid arena.      Below is the image of the arena:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/EWrhb.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/EWrhb.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The start point of the car is the bottom-right corner(dark green box). And I have to reach at pink grid using the shortest path possible. Shortest path in the sense that cost of crossing the grid. The weights/costs of grids are as follows:&lt;br /&gt;&#xA;Red:4, Yellow:3, Green:2, White:1. Black grids are block/walls.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;My implementation:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I used the OpenCV library in python to segment the colors of the grid and finding the centroids for each grid. centroid matrix is as follows:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;[[( 34,  34) ( 85,  34) (137,  34) (  0,   0) (240,  34) (292,  34)]&#xA; [( 34,  85) (  0,   0) (137,  85) (  0,   0) (240,  85) (291,  85)]&#xA; [( 34, 137) ( 85, 137) (137, 137) (188, 137) (240, 137) (291, 137)]&#xA; [(  0,   0) ( 86, 191) (137, 188) (188, 188) (  0,   0) (291, 188)]&#xA; [( 34, 240) ( 85, 240) (137, 240) (  0,   0) (  0,   0) (291, 240)]&#xA; [( 34, 292) (  0,   0) (137, 291) (188, 291) (240, 291) (291, 291)]]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Then I created an adjacency matrix(36*36) based on the nodes connected. Below is the adjacency matrix in form of a list:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;[[0 2 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]&#xA; [1 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]&#xA; [0 2 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]&#xA; [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]&#xA; [0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]&#xA; [0 0 0 0 3 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]&#xA; [1 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]&#xA; [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]&#xA; [0 0 4 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]&#xA; [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]&#xA; [0 0 0 0 3 0 0 0 0 0 0 2 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]&#xA; [0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]&#xA; [0 0 0 0 0 0 2 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]&#xA; [0 0 0 0 0 0 0 0 0 0 0 0 3 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]&#xA; [0 0 0 0 0 0 0 0 2 0 0 0 0 2 0 4 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]&#xA; [0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 3 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0]&#xA; [0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 4 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]&#xA; [0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 3 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0]&#xA; [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]&#xA; [0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 2 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0]&#xA; [0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0]&#xA; [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]&#xA; [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]&#xA; [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0]&#xA; [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0]&#xA; [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 2 0 1 0 0 0 0 0 0 0 0 0]&#xA; [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 1 0 0 0 0 0 0 4 0 0 0]&#xA; [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]&#xA; [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]&#xA; [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1]&#xA; [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0]&#xA; [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]&#xA; [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 2 0 0]&#xA; [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 2 0]&#xA; [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 1]&#xA; [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 2 0]]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Then I have implemented the Dijkstra algorithm to find the shortest path as:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;from collections import defaultdict&#xA;class Graph:&#xA;    def minDistance(self,dist,queue):&#xA;        minimum = float(&amp;quot;Inf&amp;quot;)&#xA;        min_index = -1&#xA;        for i in range(len(dist)):&#xA;            if dist[i] &amp;lt; minimum and i in queue:&#xA;                minimum = dist[i]&#xA;                min_index = i&#xA;        return min_index&#xA;def printPath(self, parent, j):&#xA;    if parent[j] == -1 : &#xA;        print (j)&#xA;        return&#xA;    self.printPath(parent , parent[j])&#xA;    print(j)&#xA;def printSolution(self, dist, parent):&#xA;    src = 0&#xA;    print(&amp;quot;Vertex \t\tDistance from Source\tPath&amp;quot;)&#xA;    for i in range(1, len(dist)):&#xA;        print(&amp;quot;\n%d --&amp;gt; %d \t\t%d \t\t\t\t\t&amp;quot; % (src, i, dist[i])),&#xA;        self.printPath(parent,i)&#xA;def dijkstra(self, graph, src):&#xA;&#xA;    row = len(graph)&#xA;    col = len(graph[0])&#xA;    dist = [float(&amp;quot;Inf&amp;quot;)] * row&#xA;    parent = [-1] * row&#xA;    dist[src] = 0&#xA;    queue = []&#xA;    for i in range(row):&#xA;        queue.append(i)&#xA;    while queue:&#xA;        u = self.minDistance(dist,queue)  &#xA;        queue.remove(u)&#xA;    for i in range(col):&#xA;        if graph[u][i] and i in queue:&#xA;            if dist[u] + graph[u][i] &amp;lt; dist[i]:&#xA;                dist[i] = dist[u] + graph[u][i]&#xA;                parent[i] = u&#xA;    self.printSolution(dist,parent)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;However, this code is raising an error on executing as:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;g= Graph()&#xA;g.dijkstra(graph,35) #src at node 35    &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Error:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;---------------------------------------------------------------------------&#xA;  ValueError                                Traceback (most recent call last)&#xA;&amp;lt;ipython-input-166-4785fe512432&amp;gt; in &amp;lt;module&amp;gt;&#xA;      1 g= Graph()&#xA;      2 graph = adj&#xA;----&amp;gt; 3 g.dijkstra(graph,35)&#xA;&#xA;&amp;lt;ipython-input-146-4fd492228481&amp;gt; in dijkstra(self, graph, src)&#xA;     86 &#xA;     87             # remove min element&#xA;---&amp;gt; 88             queue.remove(u)&#xA;     89 &#xA;     90             # Update dist value and parent&#xA;&#xA; ValueError: list.remove(x): x not in list&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The output should be like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; Vertex           Distance         Path &#xA; 0 -&amp;gt; 2          12        0 1 2 &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;My doubts/questions:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;1)&lt;/strong&gt; Am I implementing/proceeding rightly to help the car reach its destination? Are these ideas good or I should choose a different approach? If yes, please suggest.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;2)&lt;/strong&gt; How can I resolve the issue in my code? I don't know why I am getting this error. If I should use a different algorithm/approach, please sugget.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;3)&lt;/strong&gt; Is my adjacency matrix right? I made it based on 36 connecting nodes with weights.&lt;/p&gt;&#xA;&lt;p&gt;I am not a computer science student but doing it because of my interest. I have got no guide/teacher to teach me these things and looking at this site to resolve my issues.&#xA;I request you to please provide guidance.&lt;br /&gt;&#xA;Thank you.&lt;/p&gt;&#xA;" OwnerUserId="28268" LastActivityDate="2021-03-29T14:23:49.283" Title="Path planning for robot car on grid" Tags="&lt;python&gt;&lt;path-planning&gt;&lt;opencv&gt;&lt;autonomous-car&gt;&lt;dynamic-programming&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21957" PostTypeId="1" AcceptedAnswerId="21958" CreationDate="2021-03-29T10:57:27.383" Score="0" ViewCount="88" Body="&lt;p&gt;I had the following errors and warnings in a ROS project. They showed up using docker-compose or when running a mere container from the image, which strangely had worked once somehow but then later did not open the RViz anymore:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;process[rviz-3]: started with pid [124]&#xA;QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'&#xA;qt.qpa.screen: QXcbConnection: Could not connect to display&#xA;Could not connect to any X display.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;or:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;talker_1      | [Err] [RenderEngine.cc:725] Can't open display: &#xA;talker_1      | [Wrn] [RenderEngine.cc:93] Unable to create X window. Rendering will be disabled&#xA;talker_1      | [Wrn] [RenderEngine.cc:293] Cannot initialize render engine since render path type is NONE. Ignore this warning ifrendering has been turned off on purpose.&#xA;listener_1    |  * /nodes/slam_QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'&#xA;listener_1    | qt.qpa.screen: QXcbConnection: Could not connect to display &#xA;listener_1    | Could not connect to any X display.&#xA;listener_1    | [rviz-2] process has died [pid 64, exit code 1, cmd /opt/ros/melodic/lib/rviz/rviz -d /MYPROJECT/src/MYPROJECT_common/config/config.rviz __name:=rviz __log:=/root/.ros/log/8a57a040-8bf6-11eb-bfa4-0242ac120003/rviz-2.log].&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;or:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;talker_1      | [Err] [CameraSensor.cc:112] Unable to create CameraSensor. Rendering is disabled.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;or:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;WARNING: Unable to locate/open X configuration file.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;or:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;WARNING: Unable to parse X.Org version string.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;or:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Package xorg-server was not found in the pkg-config search path.&#xA;Perhaps you should add the directory containing `xorg-server.pc'&#xA;to the PKG_CONFIG_PATH environment variable&#xA;No package 'xorg-server' found&#xA;Option &amp;quot;AllowEmptyInitialConfiguration&amp;quot; &amp;quot;True&amp;quot; added to Screen &amp;quot;Screen0&amp;quot;.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;or:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;ERROR: Unable to write to directory '/etc/X11'.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Because of all of these errors and warnings, it &lt;em&gt;slowly and all of a sudden caught my mind that it might be about that X / X11&lt;/em&gt; :)...&lt;/p&gt;&#xA;&lt;p&gt;I left my project aside since the errors and warnings could have been caused by the image itself. Instead, I started from scratch, using a general guide with an easy image. I am following &lt;a href=&quot;http://marinerobotics.gtorg.gatech.edu/running-ros-with-gui-in-docker-using-windows-subsystem-for-linux-2-wsl2/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Running ROS with GUI in Docker using Windows Subsystem for Linux 2 (WSL2)&lt;/a&gt; about how to setup the X server on Windows and use it as the output of the ROS gazebo visualization. In order to automate the setup test and have a better overview, I put it in this Dockerfile:&lt;/p&gt;&#xA;&lt;p&gt;--- Start of the Dockerfile ---&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;# Start this Dockerfile by going to the Dockerfile's directory in terminal and enter&#xA;#docker build -t ros-test .&#xA;&#xA;FROM osrf/ros:kinetic-desktop-full&#xA;#ARG HOSTNAME&#xA;&#xA;RUN apt-get update &amp;amp;&amp;amp; \&#xA;    apt-get install -y dbus&#xA;&#xA;RUN apt-get install -y mesa-utils libgl1-mesa-glx&#xA;&#xA;ENV LIBGL_ALWAYS_INDIRECT=0&#xA;# &amp;quot;host.docker.internal&amp;quot; only works in Docker Desktop, on WSL distro, you will need to run with either&#xA;# your Windows computer name (like &amp;quot;DESKTOP-1234567&amp;quot;) or with your Windows computer IP &amp;quot;xxx.xxx.xxx.xxx&amp;quot;, for example:&#xA;# docker run -it --name ros-test -e DISPLAY=xxx.xxx.xxx.xxx:0.0 -e LIBGL_ALWAYS_INDIRECT=0 osrf/ros:kinetic-desktop-full bash&#xA;ENV DISPLAY=host.docker.internal:0.0 &#xA;#ENV DISPLAY=$HOSTNAME:0.0&#xA;#ENV DISPLAY=DESKTOP-1234567:0.0&#xA;#ENV DISPLAY=xxx.xxx.xxx.xxx:0.0&#xA;&#xA;RUN bash -c &amp;quot;echo 'source /opt/ros/kinetic/setup.bash' &amp;gt;&amp;gt; ~/.bashrc; \&#xA;    source ~/.bashrc&amp;quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;--- End of the Dockerfile ---&lt;/p&gt;&#xA;&lt;p&gt;Here are the steps how you could get the Dockerfile working on WSL2, no matter whether you use Docker Desktop or a Linux distro. It is put in tiny steps so that it can be followed by newcomers, I will not shrink it to its core since it might also help someone like this.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;# Download vcxsrv from https://sourceforge.net/projects/vcxsrv/&#xA;# install &#xA;# start XLaunch.exe (Desktop link)&#xA;# choose next (multiple windows, display number -1)&#xA;# start no client&#xA;# (check Clipboard, this is checked by default), uncheck &amp;quot;Native opengl&amp;quot;, check &amp;quot;Disable access control&amp;quot;&#xA;# finish without saving the configuration&#xA;&#xA;# start container from image with:&#xA;#docker run -it --name ros-test -e DISPLAY=host.docker.internal:0.0 -e LIBGL_ALWAYS_INDIRECT=0 osrf/ros:kinetic-desktop-full bash&#xA;#docker run -it --name ros-test -e DISPLAY=xxx.xxx.xxx.xxx:0.0 -e LIBGL_ALWAYS_INDIRECT=0 osrf/ros:kinetic-desktop-full bash&#xA;#docker run -it --name ros-test -e DISPLAY=DESKTOP-1234567:0.0 -e LIBGL_ALWAYS_INDIRECT=0 osrf/ros:kinetic-desktop-full bash&#xA;&#xA;# If the following commands do not work since there is already such a container name, you can&#xA;#docker stop ros-test&#xA;#docker rm ros-test&#xA;# If this is not possible and you are asked to force &amp;quot;(must force)&amp;quot;, use&#xA;#docker rm ros-test -f&#xA;# before you go on.&#xA;&#xA;# since environment variables are set already in the image, you can also start with:&#xA;# If you use Docker Desktop, `DISPLAY=host.docker.internal:0.0` is standard:&#xA;#docker run -it --name ros-test -e ros-test bash&#xA;# If you use a distro on WSL2, you need to find out your IP using ipconfig in Windows PowerShell (Drahtlos-LAN-Adapter WLAN: --&amp;gt; IPv4-Adresse  . . . . . . . . . . :):&#xA;#docker run -it --name ros-test -e DISPLAY=xxx.xxx.xxx.xxx:0.0 ros-test bash&#xA;# If you use a distro on WSL2, you can also ask for your hostname in Windows PowerShell by entering `hostname` and run it like this:&#xA;#docker run -it --name ros-test -e DISPLAY=DESKTOP-1234567:0.0 ros-test bash&#xA;&#xA;# or if you want to see the content of all directories:&#xA;#docker run -it --volume :./:./ --name ros-test ros-test bash&#xA;#docker run -it --volume :./:./ --name ros-test -e DISPLAY=xxx.xxx.xxx.xxx:0.0 ros-test bash&#xA;#docker run -it --volume :./:./ --name ros-test -e DISPLAY=DESKTOP-1234567:0.0 ros-test bash&#xA;&#xA;&#xA;# If you have already run the container, but the bash is not there, or you want to start a second container in another terminal, use&#xA;#docker exec -it ros-test bash&#xA;&#xA;# If the container is not running, but is already there (`docker ps -a`) start it again.&#xA;#docker start ros-test&#xA;#docker exec -it ros-test bash&#xA;&#xA;# Open a second terminal with the same container so that you have two bash terminals open.&#xA;#docker exec -it ros-test bash&#xA;&#xA;# In the first terminal:&#xA;#roscore&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;And now comes the actual code line in question:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;# After roscore has started, start on a second terminal and enter:&#xA;#gazebo worlds/pioneer2dx.world&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;This &lt;code&gt;gazebo worlds/pioneer2dx.world&lt;/code&gt; does not open any window&lt;/strong&gt;; it is already good that it does not throw any error either. The question remains: How can I test a gazebo visualization (no matter which) in the X11 window with the given image?&lt;/p&gt;&#xA;" OwnerUserId="27423" LastEditorUserId="27423" LastEditDate="2021-03-29T20:14:33.700" LastActivityDate="2021-03-31T12:43:54.460" Title="Docker on WSL2: Dockerfile: how to test whether ROS gazebo can connect to already working X server (using its X11 display on Windows)?" Tags="&lt;ros&gt;&lt;gazebo&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21958" PostTypeId="2" ParentId="21957" CreationDate="2021-03-29T10:57:27.383" Score="0" Body="&lt;p&gt;This command opens the RViz in an X11 window of the Windows X server.&lt;/p&gt;&#xA;&lt;p&gt;After roscore has started, start a second terminal and enter (according to &lt;a href=&quot;http://gazebosim.org/tutorials?tut=ros_roslaunch&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://gazebosim.org/tutorials?tut=ros_roslaunch&lt;/a&gt;) (you do no need to have the firewall deactivated for this to run, at least in my case):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;roslaunch gazebo_ros empty_world.launch&#xA;&#xA;#For killing the app, press Ctrl+C in the roscore terminal&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This setting also works in docker-compose, see &lt;a href=&quot;https://robotics.stackexchange.com/questions/21962/docker-on-wsl2-ros-gazebo-in-docker-compose-demo-test-talker-needed-as-the&quot;&gt;this example&lt;/a&gt; which starts many containers in one go. The docker-compose now opens RViz in the X11 window on Windows X server with just one terminal command.&lt;/p&gt;&#xA;" OwnerUserId="27423" LastEditorUserId="27423" LastEditDate="2021-03-31T12:43:54.460" LastActivityDate="2021-03-31T12:43:54.460" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21959" PostTypeId="1" AcceptedAnswerId="21960" CreationDate="2021-03-29T13:42:05.223" Score="1" ViewCount="78" Body="&lt;p&gt;I follow the guide of &lt;a href=&quot;http://gazebosim.org/tutorials?tut=ros_installing&quot; rel=&quot;nofollow noreferrer&quot;&gt;kinetic - Installing from source&lt;/a&gt; and put the steps in a Dockerfile.&lt;/p&gt;&#xA;&lt;p&gt;At this point, I get an error, although I follow exactly the guide, and although it works in the bash of the container created on the image before these lines, and although &lt;a href=&quot;https://stackoverflow.com/questions/41234957/catkin-command-not-found&quot;&gt;Catkin command not found&lt;/a&gt; shows the same - in bash, not in Docker, though.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;RUN /bin/bash -c 'echo &amp;quot;source /opt/ros/kinetic/setup.bash&amp;quot; &amp;gt;&amp;gt; ~/.bashrc &amp;amp;&amp;amp;\&#xA;    source ~/.bashrc &amp;amp;&amp;amp;\&#xA;    mkdir -p ~/catkin_ws/src &amp;amp;&amp;amp;\&#xA;    cd ~/catkin_ws/src &amp;amp;&amp;amp;\&#xA;    catkin_init_workspace &amp;amp;&amp;amp;\&#xA;    cd ~/catkin_ws &amp;amp;&amp;amp;\&#xA;    catkin_make'&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Commenting &lt;code&gt;catkin_init_workspace&lt;/code&gt; out, it throws &lt;code&gt;catkin_make: command not found&lt;/code&gt;, and keeping it, it throws &lt;code&gt;catkin_init_workspace: command not found&lt;/code&gt; of course.&lt;/p&gt;&#xA;" OwnerUserId="27423" LastEditorUserId="27423" LastEditDate="2021-03-29T13:50:58.397" LastActivityDate="2021-03-29T14:15:25.730" Title="Docker - Dockerfile: /bin/bash: catkin_init_workspace / catkin_make: command not found" Tags="&lt;ros&gt;&lt;gazebo&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21960" PostTypeId="2" ParentId="21959" CreationDate="2021-03-29T13:42:05.223" Score="0" Body="&lt;p&gt;In a Dockerfile, you cannot add the setup.bash to the .bashrc and then source the .bashrc. Instead, you want to source the setup.bash in one go:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;RUN /bin/bash -c 'source /opt/ros/kinetic/setup.bash &amp;amp;&amp;amp;\&#xA;    mkdir -p ~/catkin_ws/src &amp;amp;&amp;amp;\&#xA;    cd ~/catkin_ws/src &amp;amp;&amp;amp;\&#xA;    #catkin_init_workspace &amp;amp;&amp;amp;\&#xA;    cd ~/catkin_ws &amp;amp;&amp;amp;\&#xA;    catkin_make'&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;And the line&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;catkin_init_workspace &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;can be removed, the container also works without it.&lt;/p&gt;&#xA;&lt;p&gt;Half of the credits go to &lt;a href=&quot;https://answers.ros.org/question/312577/catkin_make-command-not-found-executing-by-a-dockerfile/?answer=312730#post-id-312730&quot; rel=&quot;nofollow noreferrer&quot;&gt;catkin_make command not found executing by a dockerfile&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="27423" LastEditorUserId="27423" LastEditDate="2021-03-29T14:15:25.730" LastActivityDate="2021-03-29T14:15:25.730" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21961" PostTypeId="2" ParentId="21956" CreationDate="2021-03-29T14:23:49.283" Score="1" Body="&lt;p&gt;I don't have time to do a full code review here, but the short version of why you're getting the error is that, as the error states, you're trying to remove an element from &lt;code&gt;queue&lt;/code&gt; that either wasn't added or was already removed.&lt;/p&gt;&#xA;&lt;p&gt;I don't think your code is doing what you think it's doing, so I would highly suggest you attach a debugger and step through your code and watch it operate. For example:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;def minDistance(self,dist,queue):&#xA;    minimum = float(&amp;quot;Inf&amp;quot;)&#xA;    min_index = -1&#xA;    for i in range(len(dist)):&#xA;        if dist[i] &amp;lt; minimum and i in queue:&#xA;            minimum = dist[i]&#xA;            min_index = i&#xA;    return min_index&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;You're comparing all the entries in &lt;code&gt;dist&lt;/code&gt; to &lt;code&gt;float(&amp;quot;Inf&amp;quot;)&lt;/code&gt;, but what is &lt;code&gt;dist&lt;/code&gt;? That's defined in the calling function:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;def dijkstra(self, graph, src):&#xA;&#xA;    dist = [float(&amp;quot;Inf&amp;quot;)] * row&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;So if every element in &lt;code&gt;dist&lt;/code&gt; is &lt;code&gt;float(&amp;quot;Inf&amp;quot;)&lt;/code&gt;, then will there ever be an element in &lt;code&gt;dist&lt;/code&gt; that is less than &lt;code&gt;float(&amp;quot;Inf&amp;quot;)&lt;/code&gt;? No. So what happens then, if your distance entries aren't less than &lt;code&gt;Inf&lt;/code&gt;? You will still&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;return min_index&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;where &lt;code&gt;min_index&lt;/code&gt; is initialized to &lt;code&gt;-1&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The summary on what I think is going wrong here is this:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;You build a queue of all rows, then&lt;/li&gt;&#xA;&lt;li&gt;You check the distance on each row, then&lt;/li&gt;&#xA;&lt;li&gt;If that distance fails your check, you are returning -1 as the index, then&lt;/li&gt;&#xA;&lt;li&gt;You are not checking the index on the returned variable, you're instead just blindly removing that index from queue, then&lt;/li&gt;&#xA;&lt;li&gt;Because queue is a vector of row numbers and -1 is not a row number, you get an exception when you try to remove -1 from your queue.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;The part that I don't have time to get into here is your &lt;em&gt;intent&lt;/em&gt;. Why are you trying to do with your code? You are running&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;while queue:&#xA;    u = self.minDistance(dist,queue)  &#xA;    queue.remove(u)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This will remove all the entries in your queue until &lt;code&gt;queue&lt;/code&gt; is null/empty, but as mentioned above &lt;code&gt;self.minDistance&lt;/code&gt; will return -1 unless the &lt;code&gt;dist[i] &amp;lt; minimum and i in queue&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I can't tell what your intent is, but I &lt;em&gt;think&lt;/em&gt; maybe you should just be calling &lt;code&gt;u = self.minDistance&lt;/code&gt; once and not repeatedly. This hunch seems to be further confirmed by looking a few lines down in your code:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;while queue:&#xA;    u = self.minDistance(dist,queue)  &#xA;    queue.remove(u)&#xA;for i in range(col):&#xA;    if graph[u][i] and i in queue:&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;If you are running &lt;code&gt;queue.remove(u)&lt;/code&gt; until &lt;code&gt;queue&lt;/code&gt; becomes empty/null, then how does it exist later when you check &lt;code&gt;if graph[u][i] and i in queue&lt;/code&gt;?&lt;/p&gt;&#xA;&lt;p&gt;I would guess instead of:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;for i in range(row):&#xA;    queue.append(i)&#xA;while queue:&#xA;    u = self.minDistance(dist,queue)  &#xA;    queue.remove(u)&#xA;for i in range(col):&#xA;    if graph[u][i] and i in queue:&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;would you would want&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;for i in range(row):&#xA;    queue.append(i)&#xA;u = self.minDistance(dist,queue)  &#xA;for i in range(col):&#xA;    if graph[u][i] and i in queue:&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;but I'm not a python user and haven't looked more at your algorithm.&lt;/p&gt;&#xA;&lt;p&gt;At a minimum, though, if you are going to do &lt;code&gt;queue.remove(u)&lt;/code&gt; then you need to check if &lt;code&gt;queue&lt;/code&gt; &lt;strong&gt;contains&lt;/strong&gt; &lt;code&gt;u&lt;/code&gt; first. If it doesn't then print yourself a nice warning and I'd bet that'll reveal your issue.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2021-03-29T14:23:49.283" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21962" PostTypeId="1" CreationDate="2021-03-29T14:55:49.393" Score="0" ViewCount="45" Body="&lt;p&gt;Taking the image and the X server setting that you get from &lt;a href=&quot;https://robotics.stackexchange.com/questions/21957/docker-on-wsl2-how-to-test-whether-ros-gazebo-can-connect-to-already-working-x&quot;&gt;Docker on WSL2: how to test whether ROS gazebo can connect to already working X server (using its X11 window on Windows)?&lt;/a&gt;, I was curious how to use this ros-test container in docker-compose. And it turned out that that ros-test image was not enough, since you also need a catkin workspace on top of ROS. Here is the full Dockerfile to build the &amp;quot;ros-test&amp;quot; image:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;FROM osrf/ros:kinetic-desktop-full&#xA;#ARG HOSTNAME&#xA;&#xA;RUN apt-get update &amp;amp;&amp;amp; \&#xA;    apt-get install -y dbus&#xA;&#xA;RUN apt-get install -y mesa-utils libgl1-mesa-glx&#xA;&#xA;ENV LIBGL_ALWAYS_INDIRECT=0&#xA;# &amp;quot;host.docker.internal&amp;quot; only works in Docker Desktop, on WSL distro, you will need to run with either&#xA;# your Windows computer name (like &amp;quot;DESKTOP-1234567&amp;quot;) or with your Windows computer IP &amp;quot;xxx.xxx.xxx.xxx&amp;quot;, for example:&#xA;# docker run -it --name ros-test -e DISPLAY=xxx.xxx.xxx.xxx:0.0 -e LIBGL_ALWAYS_INDIRECT=0 osrf/ros:kinetic-desktop-full bash&#xA;ENV DISPLAY=host.docker.internal:0.0 &#xA;#ENV DISPLAY=$HOSTNAME:0.0&#xA;#ENV DISPLAY=DESKTOP-1234567:0.0&#xA;#ENV DISPLAY=xxx.xxx.xxx.xxx:0.0&#xA;&#xA;RUN DEBIAN_FRONTEND=noninteractive apt-get install -y python-catkin-tools&#xA;&#xA;RUN /bin/bash -c 'source /opt/ros/kinetic/setup.bash &amp;amp;&amp;amp;\&#xA;    mkdir -p ~/catkin_ws/src &amp;amp;&amp;amp;\&#xA;    cd ~/catkin_ws/src &amp;amp;&amp;amp;\&#xA;    #catkin_init_workspace &amp;amp;&amp;amp;\&#xA;    cd ~/catkin_ws &amp;amp;&amp;amp;\&#xA;    catkin_make'&#xA;&#xA;RUN bash -c &amp;quot;echo 'source ~/catkin_ws/devel/setup.bash' &amp;gt;&amp;gt; ~/.bashrc; \&#xA;    source ~/.bashrc&amp;quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;For the docker-compose file to run, an &amp;quot;.env&amp;quot; file must be in the same directory as the &amp;quot;docker-compose.yml&amp;quot; (if you do not hard-code the environment variables).&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;# Along https://docs.docker.com/compose/environment-variables/, you can see the docker-compose with all ENV in it with:&#xA;#docker-compose config &#xA;&#xA;# To start, fill the .env file before with your DESTINATION_IP_OR_NAME, it is then loaded as a default for&#xA;#docker-compose up --build &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The &amp;quot;.env&amp;quot; file looks as follows:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;# Find your Windows computer name by entering &amp;quot;hostname&amp;quot; in PowerShell&#xA;DESTINATION_IP_OR_NAME=DESKTOP-1234567&#xA;&#xA;#or find your Windows Computer IP using &amp;quot;ipconfig&amp;quot; in PowerShell&#xA;#DESTINATION_IP_OR_NAME=xxx.xxx.xxx.xxx&#xA;&#xA;# or if you use Docker Desktop, use:&#xA;#DISPLAY=host.docker.internal:0.0&#xA;&#xA;# Should always be 0 if you want to use a Windows X server (standard case on WSL)&#xA;LIBGL_ALWAYS_INDIRECT=0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The docker-compose.yml then looks as follows (the image &amp;quot;ros-test&amp;quot; must already be built, or you need to put its Dockerfile in the same directory):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;# https://wiki.ros.org/docker/Tutorials/Compose&#xA;version: '2.0'&#xA;&#xA;networks:&#xA;  ros:&#xA;    driver: bridge&#xA;&#xA;services:&#xA;  ros-master:&#xA;    image: ros-test&#xA;    command: stdbuf -o L roscore&#xA;    networks:&#xA;      - ros&#xA;    restart: always&#xA;&#xA;  talker:&#xA;    image: ros-test&#xA;    depends_on:&#xA;      - ros-master&#xA;    environment:&#xA;      - &amp;quot;ROS_MASTER_URI=http://ros-master:11311&amp;quot;&#xA;      - &amp;quot;ROS_HOSTNAME=talker&amp;quot;&#xA;    #command: stdbuf -o L rostopic pub /chatter std_msgs/String &amp;quot;hello&amp;quot; -r 1&#xA;    command: bash -c &amp;quot;source ~/catkin_ws/devel/setup.bash &amp;amp;&amp;amp; roslaunch gazebo worlds/pioneer2dx.world&amp;quot;&#xA;    networks:&#xA;      - ros&#xA;    restart: always&#xA;&#xA;  listener:&#xA;    image: ros-test&#xA;    depends_on:&#xA;      - ros-master&#xA;    environment:&#xA;      #- &amp;quot;DISPLAY=DESKTOP-1234567:0.0&amp;quot;&#xA;      - &amp;quot;DISPLAY=&lt;span class=&quot;math-container&quot;&gt;${DESTINATION_IP_OR_NAME}:0.0&quot;&#xA;      #- &quot;LIBGL_ALWAYS_INDIRECT=0&quot;  &#xA;      - &quot;LIBGL_ALWAYS_INDIRECT=$&lt;/span&gt;{LIBGL_ALWAYS_INDIRECT}&amp;quot;  &#xA;      - &amp;quot;ROS_MASTER_URI=http://ros-master:11311&amp;quot;&#xA;      - &amp;quot;ROS_HOSTNAME=listener&amp;quot;&#xA;    #command: stdbuf -o L rostopic echo /chatter&#xA;    # Choose command from http://gazebosim.org/tutorials?tut=ros_roslaunch#Exampleroslaunchcommand&#xA;    #command: bash -c &amp;quot;source ~/catkin_ws/devel/setup.bash &amp;amp;&amp;amp; roslaunch gazebo_ros empty_world.launch&amp;quot;&#xA;    #command: bash -c &amp;quot;source ~/catkin_ws/devel/setup.bash &amp;amp;&amp;amp; roslaunch gazebo_ros willowgarage_world.launch&amp;quot;&#xA;    #command: bash -c &amp;quot;source ~/catkin_ws/devel/setup.bash &amp;amp;&amp;amp; roslaunch gazebo_ros mud_world.launch&amp;quot;&#xA;    #command: bash -c &amp;quot;source ~/catkin_ws/devel/setup.bash &amp;amp;&amp;amp; roslaunch gazebo_ros shapes_world.launch&amp;quot;&#xA;    command: bash -c &amp;quot;source ~/catkin_ws/devel/setup.bash &amp;amp;&amp;amp; roslaunch gazebo_ros rubble_world.launch&amp;quot;&#xA;    &#xA;    networks:&#xA;      - ros&#xA;    restart: always&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This will open gazebo RViz on Windows.&lt;/p&gt;&#xA;&lt;p&gt;In the easy test which is commented out, the talker (&lt;code&gt;command: stdbuf -o L rostopic pub /chatter std_msgs/String &amp;quot;hello&amp;quot; -r 1&lt;/code&gt;) sends messages to the listener (&lt;code&gt;command: stdbuf -o L rostopic echo /chatter&lt;/code&gt;). In the RViz test, the listener seems to get parameters and commands to show their effect as a gazebo RViz in the X11 display of a Windows X server, and I do not know &lt;strong&gt;what to send from the talker to the listener so that I can see something is changing in that listener's RViz&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The question:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;When using the default ros-test image built from &amp;quot;osrf/ros:kinetic-desktop-full&amp;quot; and with the catkin workspace on top of it, is there a sort of demo &amp;quot;test talker&amp;quot; in the image? The &lt;code&gt;roslaunch gazebo worlds/pioneer2dx.world&lt;/code&gt; shall be replaced by this &amp;quot;test talker&amp;quot; so that we can see something happening in the RViz window.&lt;/li&gt;&#xA;&lt;li&gt;In other words, can the talker / listener setting be tested only with talker files that are already inside the image, or if not, how could a &amp;quot;test talker&amp;quot; be added?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="27423" LastEditorUserId="27423" LastEditDate="2021-03-30T11:54:20.717" LastActivityDate="2021-03-30T11:54:20.717" Title="Docker on WSL2: ROS gazebo in &quot;docker-compose&quot;: demo &quot;test talker&quot; needed as the input of the standard RViz listener" Tags="&lt;ros&gt;&lt;gazebo&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21963" PostTypeId="1" CreationDate="2021-03-29T17:24:18.667" Score="1" ViewCount="39" Body="&lt;p&gt;I have tested my SLAM algorithm on EuRoC, TUM and KITTI Datasets. But I would like to test on my own custom dataset. Moreover, I already rectify how to make my own dataset in TUM dataset format, but I didn't know how to calculate the ground truth of my own data set so that I calculate the accuracy of my SLAM algorithm.&lt;/p&gt;&#xA;&lt;p&gt;Would kindly provide me any suggestions and recommendation?&lt;/p&gt;&#xA;&lt;p&gt;Thank you.&lt;/p&gt;&#xA;" OwnerUserId="28276" LastActivityDate="2021-04-28T18:21:47.113" Title="How to calculate the ground truth of your own simple dataset for testing your SLAM Algorithm?" Tags="&lt;mobile-robot&gt;&lt;slam&gt;&lt;imu&gt;&lt;algorithm&gt;&lt;data-association&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21964" PostTypeId="2" ParentId="21963" CreationDate="2021-03-29T17:41:24.473" Score="0" Body="&lt;p&gt;This depends on how you acquire your data. You can either manually label ground truth or use sensors such as GPS. I have used GPS data with RTK corrections (sub cm accuracy) as ground truth in the past. You could also place markers such as AR/april tags at known locations in your surroundings and use their measurements in your dataset as ground truth.&lt;/p&gt;&#xA;" OwnerUserId="27064" LastActivityDate="2021-03-29T17:41:24.473" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21965" PostTypeId="1" CreationDate="2021-03-29T17:47:00.487" Score="1" ViewCount="14" Body="&lt;p&gt;Hope you are all doing well. I am working on a navigation project right now. According to a starting and goal location, I use Open Route Service to create a GPS Route. I have the coordinates (lateral and longitudinal) of the route (it has around 50 waypoints). Is there any way for me to add those coordinates to Mission Planner (Ardupilot) one by one? I mean I do not want an autonomous navigation. I just want to have the route showing up on mission planner. I tried creating a mission, but the vehicle (ArduRover) moves autonomously and I do not see the route on Mission Planner - by the way vehicle just moves forward, not following my route. For an example I will show you my code:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;import openrouteservice&#xA;import folium&#xA;from openrouteservice.directions import directions&#xA;import json&#xA;import itertools&#xA;import pickle&#xA;import numpy as np&#xA;import matplotlib.pyplot as plt&#xA;from geopy.geocoders import Nominatim&#xA;from dronekit import connect, VehicleMode, LocationGlobalRelative, Command, LocationGlobal&#xA;from pymavlink import mavutil&#xA;&#xA;print('Connecting...')&#xA;vehicle = connect('tcp:127.0.0.1:5762')&#xA;vehicle.mode = VehicleMode(&amp;quot;AUTO&amp;quot;)&#xA;&#xA;coords = ((vehicle.location.global_relative_frame.lon, vehicle.location.global_relative_frame.lat),(28.87180, 41.00560))&#xA;client = openrouteservice.Client(key='hidden for safety purposes') # Specify your personal API key&#xA;&#xA;geometry = client.directions(coords)['routes'][0]['geometry']&#xA;decoded = openrouteservice.convert.decode_polyline(geometry)&#xA;coordsArray = np.zeros((len(decoded[&amp;quot;coordinates&amp;quot;]), 2))&#xA;for i in range(len(decoded[&amp;quot;coordinates&amp;quot;])):&#xA;    coordsArray[i][0] = decoded[&amp;quot;coordinates&amp;quot;][i][1]&#xA;    coordsArray[i][1] = decoded[&amp;quot;coordinates&amp;quot;][i][0]&#xA;&#xA;cmds = vehicle.commands&#xA;cmds.download()&#xA;cmds.wait_ready()&#xA;# Save the vehicle commands to a list&#xA;missionlist=[]&#xA;# Modify the mission as needed. For example, here we change the&#xA;# first waypoint into a MAV_CMD_NAV_TAKEOFF command.&#xA;&#xA;for i in range(len(coordsArray)):&#xA;    cmd = Command(0,0,0, mavutil.mavlink.MAV_FRAME_GLOBAL_RELATIVE_ALT,&#xA;    mavutil.mavlink.MAV_CMD_NAV_WAYPOINT, 0, 0, 0, 0, 0, 0,coordsArray[i, 1], coordsArray[i, 0], 100)&#xA;&#xA;    missionlist.append(cmd)&#xA;# Araca yükleniyor...&#xA;missionlist[0].command=mavutil.mavlink.MAV_CMD_NAV_TAKEOFF&#xA;cmds.clear()&#xA;for cmd in missionlist:&#xA;    cmds.add(cmd)&#xA;cmds.upload()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This script results with the vehicle (rover) just going forward, without following a route. Also I cannot see the pre-calculated route on Mission Planner. Can you help me with that? The only thing I need is to show the route on Mission Planner.&lt;/p&gt;&#xA;" OwnerUserId="26789" LastActivityDate="2021-03-29T17:47:00.487" Title="Displaying a GPS Route (By Waypoints) on Mission Planner with Dronekit" Tags="&lt;navigation&gt;&lt;ardupilot&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21968" PostTypeId="1" CreationDate="2021-03-30T10:57:11.350" Score="2" ViewCount="57" Body="&lt;p&gt;I have implemented the pure pursuit algorithm for my differential wheeled robot as described in the following paper:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://www.enseignement.polytechnique.fr/profs/informatique/Eric.Goubault/MRIS/coulter_r_craig_1992_1.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.enseignement.polytechnique.fr/profs/informatique/Eric.Goubault/MRIS/coulter_r_craig_1992_1.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Such that the steering angle is given by λ=2x/l^2&lt;/p&gt;&#xA;&lt;p&gt;I want the robot to have a constant linear velocity V (say of 0.5m/s) but I am unsure of how I'd go about finding the angular velocity ω using this calculated steering angle.&lt;/p&gt;&#xA;&lt;p&gt;I wish to plug the angular and linear velocity into the following inverse kinematics formuala for a  differential wheeled robot as shown in the figure below.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/p9WS5.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/p9WS5.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Where the formulas are described in section 3.2.2 'Introduction to Autonomous Mobile Robots' found here:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://ieeexplore.ieee.org/book/6267528&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://ieeexplore.ieee.org/book/6267528&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I'm unsure of what I need to do to translate the steering angle into a form where it can be input into the formula described above for each of the wheel speeds. I'm sure there is a simple solution but I am lost as to the next steps to take&lt;/p&gt;&#xA;" OwnerUserId="28189" LastEditorUserId="28189" LastEditDate="2021-03-30T14:20:44.613" LastActivityDate="2021-05-01T21:01:20.140" Title="How to find angular velocity using pure pursuit algorithm?" Tags="&lt;mobile-robot&gt;&lt;control&gt;&lt;kinematics&gt;&lt;inverse-kinematics&gt;&lt;differential-drive&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21971" PostTypeId="1" AcceptedAnswerId="21983" CreationDate="2021-03-31T13:06:45.123" Score="0" ViewCount="56" Body="&lt;p&gt;I had a misfortune to buy this very poorly made tracked &lt;a href=&quot;https://usa.banggood.com/3V-7V-Light-Shock-Absorbed-Smart-Robot-Tank-Chassis-Car-DIY-Kit-With-130-Motor-p-1155263.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;chassis&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I now have some Arduino-based controller to attach to it. I see three posts with what seems to be holes for screws, and two of them even appear level :). Nothig I find on the internet matches the layout. In fact, there is no documentation on that chassis that would describe the layout.&lt;/p&gt;&#xA;&lt;p&gt;Is there some generic part I could customize to cover this situation? Any tips and tricks for attaching PCBs to chassis would be appreciated.&lt;/p&gt;&#xA;" OwnerUserId="28292" LastActivityDate="2021-04-26T22:16:13.330" Title="Attaching electronics to a very bad chassis" Tags="&lt;chassis&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21972" PostTypeId="1" AcceptedAnswerId="21975" CreationDate="2021-03-31T13:21:15.867" Score="1" ViewCount="33" Body="&lt;p&gt;I have noticed everywhere that professional robotics companies use hydraulics over electric motors. I want to know why that is. Why can they make custom electric motors that are really powerful. Surely that would be cheaper than buying hydraulic fluid, solenoids, pumps, etc. Could someone please explain why that is?&lt;/p&gt;&#xA;" OwnerUserId="26747" LastActivityDate="2021-03-31T19:56:24.763" Title="Why Hydraulics and Not Motors?" Tags="&lt;motor&gt;&lt;actuator&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21973" PostTypeId="1" CreationDate="2021-03-31T13:42:33.130" Score="1" ViewCount="15" Body="&lt;p&gt;I am using the &lt;strong&gt;Contec SMC-8DL&lt;/strong&gt; Motion control card to control the Oriental Stepper motors via the &lt;strong&gt;AZD-C driver&lt;/strong&gt;. The Contec helper functions only allow for sending pulses to the driver, is there a way of instead of sending pulse I send the torque commands?&lt;/p&gt;&#xA;&lt;p&gt;Best&lt;/p&gt;&#xA;" OwnerUserId="28294" LastActivityDate="2021-03-31T13:42:33.130" Title="Is there a way I can achieve Torque control from pulse control?" Tags="&lt;control&gt;&lt;stepper-motor&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21974" PostTypeId="1" CreationDate="2021-03-31T17:34:22.403" Score="1" ViewCount="34" Body="&lt;p&gt;So I am using slam algorithm to localize the drone which is gps denied . The input to the slam algo is imu data and a video .&#xA;Now after the first run of the slam algorithm it creates the trajectory files .so if my video was 600 seconds long it creates traj file upto 400 sec . And then it looses the traj and hence no xyz position from 400-600 seconds . Is there any way I can use the first 400 seconds and I have imu data ,angular velocity and velocity information as well to get those xyz values from 400 sec to 600 sec ?&lt;/p&gt;&#xA;" OwnerUserId="28295" LastActivityDate="2021-05-01T20:04:56.900" Title="Drone lost traj recovery" Tags="&lt;quadcopter&gt;&lt;slam&gt;&lt;kalman-filter&gt;&lt;imu&gt;&lt;drone&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21975" PostTypeId="2" ParentId="21972" CreationDate="2021-03-31T19:56:24.763" Score="2" Body="&lt;p&gt;Hydraulics and pneumatics let you separate the mechanical power generation component (compressor, hydraulic power unit, etc.) from the actuator. In the case of something like a robotic arm, this means that you only have to move the actuator.&lt;/p&gt;&#xA;&lt;p&gt;Consider a gripper on a robotic arm. If you're going to use a motor, then you have to determine how quickly you want the gripper to open and close and how much force you want the gripper to be able to apply; this would determine the gearing and motor specifications.&lt;/p&gt;&#xA;&lt;p&gt;You can use a smaller motor and get high grip forces with a high gearing, but then you are moving at a slow speed. If you want a high-speed, high-force gripper, then you need to have a larger motor.&lt;/p&gt;&#xA;&lt;p&gt;The issue then is that your motor, driving the gripper, is at the very end of the robot arm. This increases the torque requirements on all the other joint motors, which have to support that large motor on the end effector.&lt;/p&gt;&#xA;&lt;p&gt;The alternative is to use hydraulics or pneumatics. A cylinder is a hollow metal tube with a plunger inside. The weight of the actuator is relatively independent of the hydraulic motor, which can be moved off the arm.&lt;/p&gt;&#xA;&lt;p&gt;When you move the motor off the arm you reduce the weight limit on the other joints, but you also reduce your motor requirements. You are now able to use a low-efficiency (read: cheap) motor to pressurize the hydraulics. If you have one hydraulic power unit then you can probably run multiple hydraulic actuators simultaneously; the incremental cost of getting a marginally larger hydraulic power unit is probably less than the cost of another high-performance electric motor.&lt;/p&gt;&#xA;&lt;p&gt;The hydraulic cylinders themselves are remarkably cheap; here's one (no affiliation) that is rated for 9,500 lbf with an 8 inch stroke for \$120, &lt;a href=&quot;https://www.grainger.com/product/18G751&quot; rel=&quot;nofollow noreferrer&quot;&gt;here's an electric actuator&lt;/a&gt; (again no affiliation) that does about 1/8th of the force (1,200 lbf) at a 50% duty cycle for \$800.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2021-03-31T19:56:24.763" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21976" PostTypeId="1" CreationDate="2021-03-31T20:05:58.090" Score="1" ViewCount="18" Body="&lt;p&gt;I want to implement PID control on my 4 wheel mecanun robot. I want to give a position instruction to my robot and that it follow the following curves of velocity and position. The only feedback that my robot have is an encoder on each wheel . How can I code this?&#xA;&lt;a href=&quot;https://i.stack.imgur.com/vUs64.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vUs64.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="28296" LastActivityDate="2021-03-31T20:05:58.090" Title="How to implement PID position control for 4wheel mecanum robot?" Tags="&lt;pid&gt;&lt;wheeled-robot&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21977" PostTypeId="1" CreationDate="2021-04-01T07:03:39.727" Score="1" ViewCount="14" Body="&lt;p&gt;I am trying to interface Stonex S900A GPS with nVidia TX2 which has ROS melodic installed. The GPS data cable is a DB9 type (RS232). I connected a DB9 to USB converter with the cable and connected it to the USB port of TX2. I intend to use nmea_driver_navsat ros package to read the GPS data. However, when trying to monitor the GPS data on a serial monitor (such as puTTY or CuteCom), I am getting messages in the following format: \&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/j4wcw.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/j4wcw.png&quot; alt=&quot;error image&quot; /&gt;&lt;/a&gt; \&lt;/p&gt;&#xA;&lt;p&gt;Could it be an issue with the serial driver? When I connect the same GPS with the same cable to another system, I get valid information on the serial monitor. What could be the issue here?&lt;/p&gt;&#xA;" OwnerUserId="26934" LastActivityDate="2021-04-01T07:03:39.727" Title="Faulty GPS data on Serial Monitor" Tags="&lt;gps&gt;&lt;serial&gt;&lt;usb&gt;&lt;rs232&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21978" PostTypeId="2" ParentId="21929" CreationDate="2021-04-01T13:34:33.747" Score="1" Body="&lt;p&gt;I'm not sure if this helps or not, but Discovery models manufactured before November 2005 do not contain the entirety of the SCI set. For more information on this, see the first paragraph of the &lt;a href=&quot;https://web.archive.org/web/20131202230831/http://www.irobot.com/images/consumer/hacker/Roomba_SCI_Spec_Manual.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;SCI specification&lt;/a&gt; for Discovery Series. It is possible that your robot is one of the unlucky ones. Unfortunately, I'm not aware that the OSMO upgrade modules for these robots are still available (I am 99.9% confident iRobot no longer makes or stocks them). It is possible that your problem is not a Python one but a compatibility one. What's the manufacture date on your robot?&lt;/p&gt;&#xA;&lt;p&gt;Please note that I am an iRobot employee, but the postings on this site are my own and don't necessarily represent iRobot's positions, strategies, or opinions.&lt;/p&gt;&#xA;" OwnerUserId="7665" LastActivityDate="2021-04-01T13:34:33.747" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21979" PostTypeId="2" ParentId="21974" CreationDate="2021-04-01T19:25:45.877" Score="0" Body="&lt;p&gt;The &lt;em&gt;any way&lt;/em&gt; would be SLAM itself. The point of SLAM &lt;em&gt;is to reconstruct a trajectory given sensor inputs&lt;/em&gt;. That's just semantics though. I'm guessing you want to know how to handle failed sensor cases. If so, you have to detect those cases and reject the results. This can be done with multi-hypothesis SLAM or particle filters, but are significantly more complicated and I'm not aware of tools that do this automatically. You will likely have to manually massage the data until the trajectory reconstruction works better.&lt;/p&gt;&#xA;&lt;p&gt;If you just want a good result for this run:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Inspect the video / imu data after 400 seconds.. Is it junk? Trim the video using ffmpeg and try again.&lt;/li&gt;&#xA;&lt;li&gt;Is the IMU outputting junk? Run with camera only.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Honestly, without information about &lt;em&gt;how&lt;/em&gt; you're doing SLAM, I can't say.  I'd recommend plugging the whole thing into &lt;a href=&quot;https://github.com/ethz-asl/maplab&quot; rel=&quot;nofollow noreferrer&quot;&gt;maplab&lt;/a&gt; and see what you get. For video-only you could try a structure from motion pipeline such as OpenSFM.&lt;/p&gt;&#xA;" OwnerUserId="163" LastActivityDate="2021-04-01T19:25:45.877" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21980" PostTypeId="2" ParentId="21968" CreationDate="2021-04-01T19:33:12.817" Score="0" Body="&lt;p&gt;You can set the angular velocity to whatever you want, that's the control input and depends on the algorithm. You have to set it to be something proportional to the difference in the &lt;em&gt;desired&lt;/em&gt; angle (from the intercept trajectory) and the &lt;em&gt;actual angle&lt;/em&gt; as measured. You then update the desired angle and velocity and re-calculate.&lt;/p&gt;&#xA;&lt;p&gt;Try this:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://robotics.stackexchange.com/a/12497/163&quot;&gt;https://robotics.stackexchange.com/a/12497/163&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Which will show you how to derive angular velocity as a function of desired heading / speed to a fixed point. Then note that in the paper you linked, they do the same, calculating a velocity that converges to a &amp;quot;look ahead&amp;quot; point.&lt;/p&gt;&#xA;" OwnerUserId="163" LastActivityDate="2021-04-01T19:33:12.817" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21981" PostTypeId="2" ParentId="21974" CreationDate="2021-04-01T19:35:44.190" Score="0" Body="&lt;p&gt;Hey Josh thanks for your reply .&#xA;I am using maplab as a slam algo as it takes imu data as an input&lt;/p&gt;&#xA;&lt;p&gt;Do you think there is something wrong with the imu data at timestamp 400 and beyond ? Or is it maplab doesn't detect key points on the video properly ?&lt;/p&gt;&#xA;&lt;p&gt;I am thinking of using extended kalman filter from 400 sec to 600 sec and using the output of maplab at timestamp 399 as an input (basically the xyz and the quaternion) to the extended kalman filter . I am new to this so I don't know if EKF is the ticket ,but it appears to be . Maybe you can suggest otherwise or confirm ?&lt;/p&gt;&#xA;&lt;p&gt;Also how can we know/verify imu is outputting junk ?&lt;/p&gt;&#xA;" OwnerUserId="28295" LastActivityDate="2021-04-01T19:35:44.190" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21982" PostTypeId="1" AcceptedAnswerId="21984" CreationDate="2021-04-01T19:42:39.380" Score="1" ViewCount="31" Body="&lt;p&gt;I want to find out the inverse kinematics solution of 6 link manipulator planar robot, using DH Parameters, but I don't know how to, I know how to calculate for 3 link manipulator but not for 6 links, I found out that we have to use Inverse Transformation Matrices for higher DOF problems but I was not able to find the solution even with those, and I couldn't find any example either, in which they would show how to solve this problem. Can anyone tell me the solution to this problem or provide me with a link to the solution?&lt;/p&gt;&#xA;" OwnerUserId="28302" LastActivityDate="2021-04-02T13:29:15.007" Title="How to find Inverse Kinematics solution to 6 link manipulator planar robot using DH parameters" Tags="&lt;robotic-arm&gt;&lt;inverse-kinematics&gt;&lt;dh-parameters&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21983" PostTypeId="2" ParentId="21971" CreationDate="2021-04-01T22:37:05.600" Score="1" Body="&lt;p&gt;If you need to use a chassis so poorly made, its manufacturer has pushed you out of the realm of engineering and into tinkering.&lt;/p&gt;&#xA;&lt;p&gt;I would suggest that you release yourself from the desire for precision, elegance, and beauty. Instead, embrace the embarrassment of cardboard, foamcore, X-acto knives, hot glue, and toothpicks.&lt;/p&gt;&#xA;&lt;p&gt;Especially when it's necessary, such tinkering can actually be freeing. Commenter jsotola might agree.&lt;/p&gt;&#xA;" OwnerUserId="27618" LastActivityDate="2021-04-01T22:37:05.600" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21984" PostTypeId="2" ParentId="21982" CreationDate="2021-04-02T13:29:15.007" Score="1" Body="&lt;p&gt;This question is a bit too broad to answer here.  I recommend you find a good robotics manipulation textbook and work through it.  Here are three classics:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Robotics: Modelling, Planning and Control by Bruno Siciliano, Lorenzo Sciavicco, Luigi Villani, and Giuseppe Oriolo.  Available on &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/1846286417&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;Amazon&lt;/a&gt; or &lt;a href=&quot;https://github.com/yangmingustb/planning_books_1/blob/master/Siciliano%20-%202009%20-%20Robotics%20modelling,%20planning%20and%20control.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;pdf&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Robot Modeling and Control by Mark W. Spong, Seth Hutchinson, and M. Vidyasagar.  Available on &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/0471649902&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;Amazon&lt;/a&gt; or &lt;a href=&quot;https://www.researchgate.net/profile/Mohamed-Mourad-Lafifi/post/How_to_avoid_singular_configurations/attachment/59d6361b79197b807799389a/AS%3A386996594855942%401469278586939/download/Spong+-+Robot+modeling+and+Control.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;pdf&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;A Mathematical Introduction to Robotic Manipulation by Richard M. Murray, Zexiang Li, and S. Shankar Sastry.  Available on &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/0849379814&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;Amazon&lt;/a&gt; or &lt;a href=&quot;https://www.in.tum.de/fileadmin/w00bws/i23/murray-li-sastry-94-complete.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;pdf&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;But there are many others on the topic.  I prefer the first book by Siciliano et al.  Note that the last book by Murray et al uses a different formulation for kinematics.  They use Product of Exponentials instead of DH Parameters.&lt;/p&gt;&#xA;" OwnerUserId="110" LastActivityDate="2021-04-02T13:29:15.007" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21985" PostTypeId="1" CreationDate="2021-04-02T18:51:15.783" Score="1" ViewCount="10" Body="&lt;p&gt;Is there a reason that a lot of constructors in ROS based code take in &lt;code&gt;tf2_ros::TransformListener&lt;/code&gt; as one of the input? I want to get an idea from the design perspective.&lt;/p&gt;&#xA;" OwnerUserId="27245" LastActivityDate="2021-04-02T18:51:15.783" Title="Significance of tf2_ros::TransformListener in constructors" Tags="&lt;ros&gt;&lt;design&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21986" PostTypeId="1" CreationDate="2021-04-02T19:51:48.357" Score="1" ViewCount="31" Body="&lt;p&gt;What is the difference between the 2 pieces of code -&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;tf2_ros::Buffer buffer(ros::Duration(10)); &#xA;&#xA;&#xA;costmap_2d::Costmap2DROS costmap_one(&amp;quot;costmap_one&amp;quot;, buffer); &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;and&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;costmap_2d::Costmap2DROS *costmap_one = new costmap_2d::Costmap2DROS(&amp;quot;costmap_one&amp;quot;, buffer)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I understand that in the first case, we get a costmap_2d::Costmap2DROS object named costmap_one whereas in the second case, we get a pointer named costmap_one that points to a costmap_2d::Costmap2DROS object.&lt;/p&gt;&#xA;&lt;p&gt;When should we use one over the other?&lt;/p&gt;&#xA;" OwnerUserId="27245" LastActivityDate="2021-04-04T22:42:18.287" Title="difference between the two constructors" Tags="&lt;c++&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21987" PostTypeId="1" CreationDate="2021-04-02T21:57:56.523" Score="1" ViewCount="13" Body="&lt;p&gt;I am trying to use a &lt;code&gt;costmap_2d::Costmap2DROS&lt;/code&gt; object to read the occupacy grid being published on the &lt;code&gt;/map&lt;/code&gt; topic. How do I modify the values of the &lt;code&gt;global_frame&lt;/code&gt; and the &lt;code&gt;robot_base_frame&lt;/code&gt; parameters for the costmap_2d::Costmap2DROS object? I tried to go through the &lt;a href=&quot;http://wiki.ros.org/costmap_2d#Coordinate_frame_and_tf_parameters&quot; rel=&quot;nofollow noreferrer&quot;&gt;documentation&lt;/a&gt;. But, I didn't really get it.&lt;/p&gt;&#xA;" OwnerUserId="27245" LastActivityDate="2021-04-02T21:57:56.523" Title="Set global_frame and robot_base_frame parameters for costmap_2d::Costmap2DROS object" Tags="&lt;ros&gt;&lt;occupancygrid&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21988" PostTypeId="1" CreationDate="2021-04-02T23:23:06.840" Score="1" ViewCount="48" Body="&lt;p&gt;I have the &amp;quot;x&amp;quot;, &amp;quot;y&amp;quot; and &amp;quot;z&amp;quot; readings of gyroscope and accelerometer. From these readings I want to interpret that wether my robot took a right turn or left turn. Can some one guide me how should I proceed?&lt;/p&gt;&#xA;" OwnerUserId="28311" LastActivityDate="2021-04-06T17:23:00.710" Title="Determining the turn of robot using gyroscope and accelerometer data" Tags="&lt;gyroscope&gt;&lt;accelerometer&gt;" AnswerCount="3" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="21989" PostTypeId="2" ParentId="21988" CreationDate="2021-04-03T04:02:13.677" Score="0" Body="&lt;p&gt;Just monitor the rotation velocity of z-axis (z value from gyroscope or any other axis according to your setup).&lt;/p&gt;&#xA;&lt;p&gt;If the value is over some threshold and the sign is positive, it is turning left. If the sign is negative it is the right turn.&lt;/p&gt;&#xA;&lt;p&gt;The right way to do this is to accumulate the value stream and see if the accumulated angle is near to 90 or -90 degree. But it would be difficult for you.&lt;/p&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2021-04-03T04:02:13.677" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21990" PostTypeId="2" ParentId="21988" CreationDate="2021-04-03T17:52:08.357" Score="1" Body="&lt;p&gt;Expanding on the answer given by C.O Park and comment by Ben.&lt;/p&gt;&#xA;&lt;p&gt;The gyroscope and accelerometer will give you 6 sensor values corresponding to the &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt;/&lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt;/&lt;span class=&quot;math-container&quot;&gt;$z$&lt;/span&gt; linear accelerations and the &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt;/&lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt;/&lt;span class=&quot;math-container&quot;&gt;$z$&lt;/span&gt; angular velocities. If you are looking to interpret whether your robot is turning left or right at any particular moment then you can simply check the sign of the angular velocity about the z-axis (assuming you are taking z to be the vertical direction). If you are looking to interpret whether your robot has turned left or right relative to its original direction then you can keep track of an accumulated angle through numerical integration. A simple algorithm for this would be the following:&lt;/p&gt;&#xA;&lt;p&gt;Let &lt;span class=&quot;math-container&quot;&gt;$\theta(t)$&lt;/span&gt; denote the rotation about the vertical axis (also called heading angle) at time &lt;span class=&quot;math-container&quot;&gt;$t$&lt;/span&gt;. Let &lt;span class=&quot;math-container&quot;&gt;$\omega(t)$&lt;/span&gt; denote the angular velocity about the vertical axis at time &lt;span class=&quot;math-container&quot;&gt;$t$&lt;/span&gt;. Every &lt;span class=&quot;math-container&quot;&gt;$t_s$&lt;/span&gt; seconds you will take a measurement of &lt;span class=&quot;math-container&quot;&gt;$\omega(t)$&lt;/span&gt; from your gyroscope sensor. The rotation can then be estimated by&#xA;&lt;span class=&quot;math-container&quot;&gt;$$\theta((k+1)t_s) = \theta(kt_s)+\omega(kt_s)t_s,$$&lt;/span&gt;&#xA;where &lt;span class=&quot;math-container&quot;&gt;$k$&lt;/span&gt; is an integer that denotes how many measurements you have taken so far. &lt;span class=&quot;math-container&quot;&gt;$\theta(0)$&lt;/span&gt; can be assumed zero since it is your initial direction. In words, the heading angle at timestep &lt;span class=&quot;math-container&quot;&gt;$k+1$&lt;/span&gt; is the heading angle at timestep &lt;span class=&quot;math-container&quot;&gt;$k$&lt;/span&gt; plus the rotation that occurred during that timestep. Then to interpret whether your robot has turned left or right relative to its original direction you can look at the sign of &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt;. In pseudocode:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;# intialize heading angle estimate&#xA;theta = 0;&#xA;&#xA;# update information every ts seconds&#xA;loop:&#xA;&#xA;    # read sensor and update estimate&#xA;    omega = read_rotation_rate();&#xA;    theta = theta + omega*ts;&#xA;&#xA;    # check turning direction&#xA;    if omega &amp;gt; 0: turning = left;&#xA;    else if omega &amp;lt; 0: turning = right;&#xA;&#xA;    # check net direction&#xA;    if theta &amp;gt; 0: turned = left;&#xA;    else if theta &amp;lt; 0: turned = right;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;In practice there will be some complications like sensor noise and drift that will result in errors in your estimate of the heading angle, but this should provide you with a starting point.&lt;/p&gt;&#xA;" OwnerUserId="28316" LastActivityDate="2021-04-03T17:52:08.357" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21991" PostTypeId="1" CreationDate="2021-04-03T20:29:49.847" Score="1" ViewCount="23" Body="&lt;p&gt;I'm currently recording data points from an analog accelerometer(PCB 353b33) using a TDS3014B oscilloscope which has a Record Length of 10,000 points at a Sample Rate of 1.25 GSa/s. Since the oscilloscope is a triggered data logging device, it's not capturing the whole cycle of the experiment.&#xA;I trying to look into analog data loggers that would help in seamless data logging for a minute or more with a good sampling rate that would help me capture data for at least one cycle. Is analog data logger the only option remaining?&#xA;I'm not sure if an analog data logger would be a good solution for my problem, so if anything else would work for my case please suggest that as well.&lt;/p&gt;&#xA;" OwnerUserId="28317" LastActivityDate="2021-05-07T23:00:10.083" Title="Are there any analog data loggers for recording PCB 353b33 accelerometer datapoints for a minute or more?" Tags="&lt;accelerometer&gt;" AnswerCount="1" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="21992" PostTypeId="1" AcceptedAnswerId="22010" CreationDate="2021-04-04T20:30:41.103" Score="2" ViewCount="50" Body="&lt;p&gt;I have a speed control system which is part of a hierarchical planning and control stack. The final output of this system is torque and the input is desired speed. The system is experiencing some oscillation which seems related to the highest level of the target speed planning frequency. I have a hunch that the different operational frequencies of various levels of the stack might be having an impact, but I am unsure how best to investigate and quantify the impacts. So I am wondering the following:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;What are the terms I can use to find information about the impact of input frequency on control response?&lt;/li&gt;&#xA;&lt;li&gt;Are there any well known approaches to analyzing the relation between input frequency and control response so I can more clearly conclude if this is the issue?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;The system is developed using ROS, so if there are any ROS package which might help the analysis please let me know.&lt;/p&gt;&#xA;" OwnerUserId="17524" LastActivityDate="2021-04-07T16:32:50.553" Title="How to investigate the relation between planning frequency and control response?" Tags="&lt;control&gt;&lt;ros&gt;&lt;motion-planning&gt;&lt;trajectory&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21993" PostTypeId="2" ParentId="21986" CreationDate="2021-04-04T20:34:33.650" Score="2" Body="&lt;p&gt;IMHO the main difference is, that inside function/method the first one (object) is allocated on the stack and destroyed after leaving the function, while the other (pointer) allocates its data on the heap, so it can be safely returned from the function and survive its end. It must be destroyed more explicitly, when you want to get rid of it.&lt;/p&gt;&#xA;&lt;p&gt;Allocating on the stack does not fragment the memory and living scope is clearly visible.&#xA;Allocating on the heap may fragment the memory, may stay living much longer than needed and its living scope is much less clear - but can be used for making more complicated structures such as graphs, buffers and similar ...&lt;/p&gt;&#xA;" OwnerUserId="16496" LastEditorUserId="110" LastEditDate="2021-04-04T22:42:18.287" LastActivityDate="2021-04-04T22:42:18.287" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21994" PostTypeId="2" ParentId="21992" CreationDate="2021-04-05T00:14:32.720" Score="0" Body="&lt;p&gt;This seems like an interesting question! Read it once and haven't put a ton of thought into this, but my gut reaction was a disturbance model.&lt;/p&gt;&#xA;&lt;p&gt;Suppose you had some optimal path, &lt;span class=&quot;math-container&quot;&gt;$P$&lt;/span&gt;. Your path planning could be attempting to map that optimal path, but the calculated path might be constantly updating based on noise in sensor readings, localization estimates, etc.&lt;/p&gt;&#xA;&lt;p&gt;Your path updates are occurring on some sample interval, which is introducing a disturbance input on the input-side of your control loop. I would try running some models that inject noise at the same frequency and see if that reproduces the results you're seeing.&lt;/p&gt;&#xA;&lt;p&gt;I don't know what form of control you're using for the controller, but disturbance rejection should be well-studied regardless of the format.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2021-04-05T00:14:32.720" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="21995" PostTypeId="1" AcceptedAnswerId="21996" CreationDate="2021-04-05T20:37:30.550" Score="1" ViewCount="58" Body="&lt;p&gt;I want to make a real-time end-effector position control simulation of a 6 DOF robotic arm. To do so, I should solve the inverse kinematic problem, but due to the complexity of calculations, it is impossible to do that in real-time. As I know, industrial robots like KUKA or ABB can solve the inverse kinematic problem in real-time. Can anyone help me with the algorithms and explain those solutions to me?&lt;/p&gt;&#xA;" OwnerUserId="24511" LastActivityDate="2021-04-06T06:02:42.810" Title="How do industrial robots solve the inverse kinematic problem?" Tags="&lt;robotic-arm&gt;&lt;inverse-kinematics&gt;&lt;matlab&gt;&lt;simulation&gt;&lt;industrial-robot&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21996" PostTypeId="2" ParentId="21995" CreationDate="2021-04-05T21:34:10.593" Score="2" Body="&lt;p&gt;Closed-form inverse kinematic equations are used to determine joint angles based on the end effector pose.  These equations are well established in the literature.  For example, the classic robotics books by Craig or by Paul show the equations for typical 6dof industrial arms.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2021-04-05T21:34:10.593" CommentCount="8" ContentLicense="CC BY-SA 4.0" />
  <row Id="21997" PostTypeId="2" ParentId="21944" CreationDate="2021-04-06T00:15:18.757" Score="1" Body="&lt;p&gt;Let's consider the rectangle to be in a vertical plane, all one single rigid part. The bottom edge is the one resting on the table.&#xA;Since you specified quasistatic, we only care about the first infinitesimal motion. If the box starts sliding, we don't care about tipping. If it starts tipping, we don't care about sliding.&lt;/p&gt;&#xA;&lt;p&gt;Nothing in the problem statement quantifies the coefficient of friction, so we'll have to carry it around symbolically. We might have to do the same with the finger height.&lt;/p&gt;&#xA;&lt;p&gt;We will compute the forces and torques that resist tipping and sliding. If tipping occurs, the rectangle will rotate about the bottom-right corner, so we'll put the origin there.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Definitions&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;point &lt;span class=&quot;math-container&quot;&gt;$O$&lt;/span&gt;: the bottom-right corner. This is the origin of the coordinate system. Coordinate &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt; increases going up, &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; increases to the &lt;em&gt;left&lt;/em&gt;.&lt;/li&gt;&#xA;&lt;li&gt;point &lt;span class=&quot;math-container&quot;&gt;$C$&lt;/span&gt;: the center of mass&lt;/li&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$X$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$Y$&lt;/span&gt;: coordinates of point &lt;span class=&quot;math-container&quot;&gt;$C$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$h$&lt;/span&gt;: the height of the finger above table&lt;/li&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$F$&lt;/span&gt;: the horizontal force of the finger pushing&lt;/li&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$W$&lt;/span&gt;: the weight (mass * g)&lt;/li&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$\mu$&lt;/span&gt;: coefficient of (static) friction at the table.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tipping&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;First, consider the tipping torques at point &lt;span class=&quot;math-container&quot;&gt;$O$&lt;/span&gt;. The finger is trying to rotate the box clockwise. The rectangle's weight is trying to rotate it counterclockwise.&lt;/p&gt;&#xA;&lt;p&gt;The force &lt;span class=&quot;math-container&quot;&gt;$F$&lt;/span&gt; pushing from the left (between area B and area D) is equivalent to a force pulling at the right (between area C and area F). Operating at height &lt;span class=&quot;math-container&quot;&gt;$h$&lt;/span&gt;, that applies a torque of &lt;span class=&quot;math-container&quot;&gt;$F h$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Consider the weight &lt;span class=&quot;math-container&quot;&gt;$W$&lt;/span&gt; to be concentrated at the center of mass &lt;span class=&quot;math-container&quot;&gt;$C$&lt;/span&gt; (that is, at &lt;span class=&quot;math-container&quot;&gt;$(X,Y)$&lt;/span&gt;). It's trying to rotate the rectangle counter-clockwise about &lt;span class=&quot;math-container&quot;&gt;$O$&lt;/span&gt;. The downward weight vector operates about &lt;span class=&quot;math-container&quot;&gt;$O$&lt;/span&gt; with moment arm &lt;span class=&quot;math-container&quot;&gt;$X$&lt;/span&gt;. So the torque due to weight is &lt;span class=&quot;math-container&quot;&gt;$W X$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The box will tip (if it doesn't slide) if the torque at &lt;span class=&quot;math-container&quot;&gt;$O$&lt;/span&gt; due to the finger exceeds the torque due to gravity &lt;span class=&quot;math-container&quot;&gt;$F h &amp;gt; W X$&lt;/span&gt;. Call the limiting tipping force &lt;span class=&quot;math-container&quot;&gt;$F_{tip}$&lt;/span&gt;:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$F_{tip} = W X/h$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Sliding&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Now examine the friction at the table. The max friction force is &lt;span class=&quot;math-container&quot;&gt;$W \mu$&lt;/span&gt;, pushing horizontally to the left (countering the finger). It cannot exert any torque at &lt;span class=&quot;math-container&quot;&gt;$O$&lt;/span&gt;. Thus the box will slide (if it doesn't tip) when the finger force exceeds the friction. Call the limiting force &lt;span class=&quot;math-container&quot;&gt;$F_{slide}$&lt;/span&gt;:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$F_{slide} = W mu$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Comparison&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Imagine the finger gradually pushing harder and harder.  At first, nothing happens.  Eventually, the box will start to move. It will either tip or slide, depending on which of &lt;span class=&quot;math-container&quot;&gt;$F_{tip}$&lt;/span&gt; or &lt;span class=&quot;math-container&quot;&gt;$F_{slide}$&lt;/span&gt; is reached first -- that is, which one is less. In comparing the two forces, both have a factor of &lt;span class=&quot;math-container&quot;&gt;$W$&lt;/span&gt; which we can divide out. So comparing &lt;span class=&quot;math-container&quot;&gt;$X/h$&lt;/span&gt; with &lt;span class=&quot;math-container&quot;&gt;$\mu$&lt;/span&gt;:&lt;/p&gt;&#xA;&lt;p&gt;slide if &lt;span class=&quot;math-container&quot;&gt;$X &amp;gt; h*\mu$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;We can sanity-check this by looking at limiting cases.  High friction (high &lt;span class=&quot;math-container&quot;&gt;$\mu$&lt;/span&gt;) means &lt;span class=&quot;math-container&quot;&gt;$X$&lt;/span&gt; can't be large enough so it will tip. With no friction (zero &lt;span class=&quot;math-container&quot;&gt;$\mu$&lt;/span&gt;) any &lt;span class=&quot;math-container&quot;&gt;$X$&lt;/span&gt; will let it slide. If &lt;span class=&quot;math-container&quot;&gt;$X=0$&lt;/span&gt; (&lt;span class=&quot;math-container&quot;&gt;$C$&lt;/span&gt; anywhere on the right edge) it will always tip.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Restated, the box will slide if &lt;span class=&quot;math-container&quot;&gt;$C$&lt;/span&gt; is to the left of &lt;span class=&quot;math-container&quot;&gt;$h \mu$&lt;/span&gt;. The boundary between the tip region and the slide region will be vertical. (It is curious, perhaps suspicious, that the results do not depend on &lt;span class=&quot;math-container&quot;&gt;$Y$&lt;/span&gt;, the height of point &lt;span class=&quot;math-container&quot;&gt;$C$&lt;/span&gt;.)&lt;/p&gt;&#xA;&lt;p&gt;Recall that the problem statement doesn't specify anything about &lt;span class=&quot;math-container&quot;&gt;$\mu$&lt;/span&gt;. Neither does it say those angles that look like 45 degrees really are, so we can't relate &lt;span class=&quot;math-container&quot;&gt;$h$&lt;/span&gt; to the width. Without that critical information, I don't see any way to connect analysis to geometry in order to answer the question about the regions.&lt;/p&gt;&#xA;" OwnerUserId="27618" LastActivityDate="2021-04-06T00:15:18.757" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="21998" PostTypeId="2" ParentId="21971" CreationDate="2021-04-06T01:08:48.537" Score="0" Body="&lt;p&gt;Well, I embraced my inner Tinkerer as @r-bryan and @jsotola suggested. Index cards and sewing needles and toothpicks and a digital caliper. Also QCad :) .&lt;/p&gt;&#xA;&lt;p&gt;For any unfortunate who got stuck with the &amp;quot;3V-7V Light Shock Absorbed Smart Robot Tank Chassis Car DIY Kit With 130 Motor&amp;quot; (I place the full thing here advisedly to make it findable), here is the &lt;a href=&quot;https://github.com/belousa/tank-chassis&quot; rel=&quot;nofollow noreferrer&quot;&gt;cad file&lt;/a&gt; that got me there. Print it, tape to the rectangle of a plastic of your choice, drill the holes as indicated. Your plastic will fit. The thick column that goes through the plastic will need a spacer of ~2.5 mm under it, I am yet not done with that part. But the holes fit, as tested by the two toothpicks.&lt;/p&gt;&#xA;" OwnerUserId="28292" LastEditorUserId="28292" LastEditDate="2021-04-26T22:16:13.330" LastActivityDate="2021-04-26T22:16:13.330" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="21999" PostTypeId="2" ParentId="21995" CreationDate="2021-04-06T03:20:04.287" Score="0" Body="&lt;p&gt;3 motors from the base decide the xyz position of the end effector and the other 3 on the tip decide the rotation of it. This is a really simple model as Steve mentioned. I don't know how much speed do you need but it will easily reach 10kHz and over to numerically solve the inverse kinematics with a modern computer and modern lib such as ceres.&lt;/p&gt;&#xA;" OwnerUserId="19219" LastEditorUserId="19219" LastEditDate="2021-04-06T06:02:42.810" LastActivityDate="2021-04-06T06:02:42.810" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22000" PostTypeId="1" AcceptedAnswerId="22003" CreationDate="2021-04-06T04:36:16.413" Score="1" ViewCount="33" Body="&lt;p&gt;I am running turtlebot3_navigation and want to make it subscribe to my own waypoints topic &lt;code&gt;/my_waypoints&lt;/code&gt; rather than RVIZ's Set 2D Goal topic &lt;code&gt;/move_base_simple/goal&lt;/code&gt;. What I actually want to do is &lt;code&gt;roslaunch turtlebot3_gazebo turtlebot3_world.launch /move_base_simple/goal:=/my_waypoints&lt;/code&gt;. Command-line remapping of topics isn't working in this case, neither the remapping in launch file &lt;code&gt;/opt/ros/kinetic/share/turtlebot3_navigation/launch/move_base&lt;/code&gt;.launch.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/6tE2a.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6tE2a.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Can anyone please help me remapping the topics?&lt;/p&gt;&#xA;" OwnerUserId="28329" LastActivityDate="2021-04-06T14:49:10.700" Title="How to remap /move_base_simple/goal to my own topic in turtlebot3_navigation?" Tags="&lt;ros&gt;&lt;gazebo&gt;&lt;rviz&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22003" PostTypeId="2" ParentId="22000" CreationDate="2021-04-06T14:49:10.700" Score="0" Body="&lt;p&gt;You cannot rename topics in your node and use them from the command line. If you want to use command line, you have to define them as args before the node. In your case, under arguments, define:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;arg name=&amp;quot;goal_topic&amp;quot; default=&amp;quot;/move_base_simple/goal&amp;quot; doc=&amp;quot;goal topic for turtlebot3&amp;quot;/&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;and in your remap,&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;param name=&amp;quot;/move_base_simple/goal&amp;quot; value=&amp;quot;$(arg goal_topic)&amp;quot;/&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Then you should be able to use it over he command line as:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;roslaunch turtlebot3_gazebo turtlebot3_world.launch goal_topic:=/my_waypoints&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="27064" LastActivityDate="2021-04-06T14:49:10.700" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22004" PostTypeId="2" ParentId="21988" CreationDate="2021-04-06T17:23:00.710" Score="0" Body="&lt;p&gt;Some common accelerometer/gyro chips have built-in processor that performs integration for you. An example I am familiar with is MPU-6050.&lt;/p&gt;&#xA;&lt;p&gt;Given that capabilty, you can get the ready-made data for current direction of your chip directly from the chip using I2C.&lt;/p&gt;&#xA;&lt;p&gt;Please search for &amp;quot;mpu 6050 dmp&amp;quot; to see some examples.&lt;/p&gt;&#xA;" OwnerUserId="28292" LastActivityDate="2021-04-06T17:23:00.710" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22005" PostTypeId="1" CreationDate="2021-04-06T19:19:49.747" Score="1" ViewCount="11" Body="&lt;p&gt;I recently came across 'ros::SingleSubscriberPubliser' class. The &lt;a href=&quot;http://docs.ros.org/en/indigo/api/roscpp/html/classros_1_1SingleSubscriberPublisher.html#details&quot; rel=&quot;nofollow noreferrer&quot;&gt;documentation&lt;/a&gt; describes it as 'Allows publication of a message to a single subscriber. Only available inside subscriber connection callbacks'.&lt;/p&gt;&#xA;&lt;p&gt;What does 'subscriber connection callbacks' mean?&lt;/p&gt;&#xA;&lt;p&gt;Also, when does it make sense to use this class?&lt;/p&gt;&#xA;" OwnerUserId="27245" LastActivityDate="2021-04-06T19:19:49.747" Title="seeking details on ros::SingleSubscriberPublisher class" Tags="&lt;ros&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22006" PostTypeId="2" ParentId="21321" CreationDate="2021-04-06T23:00:13.333" Score="0" Body="&lt;p&gt;Ender 3's stock mainboard does not allow you to set driver currents in firmware, as it requires a TMC driver in UART mode and creality 1.x and 4.2.x mainboards run the stepper drivers in standalone mode. There's a little screw pot by each driver for setting the reference voltage.&lt;/p&gt;&#xA;&lt;p&gt;This might be helpful &lt;a href=&quot;https://teachingtechyt.github.io/calibration.html#steppers&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://teachingtechyt.github.io/calibration.html#steppers&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Note whilst TMC drivers use rms current, supplied formula VREF = (RMS current * 2.5) / 1.77 simplifies to VREF= RMS Current * 1.41 so VREF ~= peak current for your convenience.&lt;/p&gt;&#xA;" OwnerUserId="28336" LastActivityDate="2021-04-06T23:00:13.333" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="22007" PostTypeId="1" AcceptedAnswerId="22008" CreationDate="2021-04-06T23:14:51.007" Score="2" ViewCount="49" Body="&lt;p&gt;I have built a juggling machine. Each arm is driven by a 4A 23mm stepper motor. The motors are each driven by a TB6600 set to 800 microsteps. By trial and error, I have found that the motors skip when the drivers are set at 2A (running at 36v) but not when set at 3A.&lt;/p&gt;&#xA;&lt;p&gt;The motors are directly attached to the panto-graph arm mechanism. Each arm makes 81 start-and-stop revolutions per minute. The each arm is at rest for 25% of the time. I believe this causes the arms to jerk and induces error into the balls trajectory.&lt;/p&gt;&#xA;&lt;p&gt;The obvious advantage of direct drive is simplicity. The next easiest options are belt drive or a geared stepper motor.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Would a geared or belt drive help reduce the vibration in the mechanism?&lt;/li&gt;&#xA;&lt;li&gt;Would I be able to run the drivers at a lower power setting if I used gearing?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/RWCvz.gif&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/RWCvz.gif&quot; alt=&quot;gif of juggling machine&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/smeschke/juggling/blob/master/pantograph_juggler/toss_juggler.ino&quot; rel=&quot;nofollow noreferrer&quot;&gt;This is the Arduino Code.&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=-9zD_8erkck&quot; rel=&quot;nofollow noreferrer&quot;&gt;Video of the machine running.&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="28337" LastEditorUserId="28337" LastEditDate="2021-04-07T13:53:37.003" LastActivityDate="2021-04-07T13:53:37.003" Title="Stepper Motor: Direct Drive vs. Belt Drive vs. Geared Stepper Motor" Tags="&lt;robotic-arm&gt;&lt;stepper-motor&gt;&lt;power&gt;&lt;gearing&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22008" PostTypeId="2" ParentId="22007" CreationDate="2021-04-07T03:05:51.737" Score="2" Body="&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Vibration is a matter of optimal motion control problem, not the type of motor that is used (as long as you used more than 16 micro steps for your steppers). You already used AccelStepper which is the best thing you can do without the complicated motion control.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;If your system still works with slower speed than your current motor speed you are good to use a geared motor and lower your motor current. But if you need the same speed as the motor without gear, you need to rotate the stepper very fast which requires either high current or high voltage. For example, if your gear is 1:5 you need to run your stepper five times faster to achieve the same rotation speed.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2021-04-07T03:05:51.737" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22009" PostTypeId="2" ParentId="21777" CreationDate="2021-04-07T13:15:58.270" Score="0" Body="&lt;p&gt;The problem is that you are using VMWare. For some reason, when I used a physical machine with ROS and Ubuntu, it worked! Maybe there is a fix in VMWare. If anybody knows the solution, they are free to explain.&lt;/p&gt;&#xA;" OwnerUserId="26747" LastActivityDate="2021-04-07T13:15:58.270" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22010" PostTypeId="2" ParentId="21992" CreationDate="2021-04-07T16:27:15.277" Score="1" Body="&lt;p&gt;On the theory side, this is related to the &lt;a href=&quot;https://en.wikipedia.org/wiki/Nyquist_rate&quot; rel=&quot;nofollow noreferrer&quot;&gt;Nyquist Sampling Rate&lt;/a&gt;, which is how frequently you must measure a single to get an accurate reconstruction of it's peaks / valleys.&lt;/p&gt;&#xA;&lt;p&gt;Not suprisingly, Nyquist as a name appears all over some fundamental results in optimal control &lt;a href=&quot;https://en.wikipedia.org/wiki/Nyquist_stability_criterion&quot; rel=&quot;nofollow noreferrer&quot;&gt;like the nyquist stability theorem&lt;/a&gt;. I suspect the insight you are looking for is right there, but understanding it will require some study. Begin with Nyquist stability, and follow the keywords &amp;quot;Stability, Optimal Control, Sampling Rate&amp;quot;, and probably &amp;quot;Nyqist&amp;quot; on Google Scholar. Start with textbooks on optimal control. Understanding the state of the art is actually near impossible from paper sampling (that's where you go to understand what's just beyond the SoA).&lt;/p&gt;&#xA;&lt;p&gt;On the practical side, I have never seen anything done except the following:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Increase the low-level controller to the maximum possible rate (e.g., 100Hz). This loop tries to achieve velocities.&lt;/li&gt;&#xA;&lt;li&gt;Decrease the input to the controller (desired velocities) to the minimum rate and increase only as necessary (e.g 1Hhz). This loop tries to follow paths.&lt;/li&gt;&#xA;&lt;li&gt;Re-plan paths very infrequently (e.g., every few seconds or slower).&lt;/li&gt;&#xA;&lt;li&gt;For time-critical events like hazard avoidance, the robot just ceases these loops temporarily and goes into a hard-coded avoidance maneuver (e.g., BRAKES!) until it can replan.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="163" LastEditorUserId="163" LastEditDate="2021-04-07T16:32:50.553" LastActivityDate="2021-04-07T16:32:50.553" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22011" PostTypeId="1" CreationDate="2021-04-07T18:42:13.960" Score="1" ViewCount="26" Body="&lt;p&gt;I'm working on a project where using a gear motor with an encoder and an Arduino Uno. I have not done Arduino in a long time and am struggling getting it to do what I want. If you look at the wiring guide for the motor below here is what I have currently wired up:&lt;/p&gt;&#xA;&lt;p&gt;1 - M1 (-) wired to the ground of the voltage source, 2-GND Encoder wired to the GND pin on the Arduino, 3-Encoder A phase wired to Pin9, 4-Encoder B phase wired to Pin10, 5-3V3 Encoder + wired to 3V3 pin on the Arduino, 6-M1 motor (+) wired to the hot voltage source.&lt;/p&gt;&#xA;&lt;p&gt;When I supply a voltage source the motor begins to spin. I want the motor to start not moving even when the power is supplied. Then I want to be able to set the angle that the position of the motor will turn to that spot and have it stop moving. I will then turn off the power supply and the motor will stay in that position until power is supplied again a new position is programed into the code. This motor can rotate in both directions. Please help even suggestions what commands to use will be great. &lt;a href=&quot;https://i.stack.imgur.com/dbVlA.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/dbVlA.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="28341" LastActivityDate="2021-05-07T22:45:00.343" Title="gear motor with encoder and Arduino Uno" Tags="&lt;arduino&gt;&lt;motor&gt;&lt;precise-positioning&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="22012" PostTypeId="2" ParentId="22011" CreationDate="2021-04-07T21:03:30.310" Score="0" Body="&lt;p&gt;The motor should not be connected directly to your power source since this will not allow it to be controlled by the Arduino. The encoder is a passive add-on to the motor (mechanical coupling only). There is no electrical connection between the encoder and the motor to allow for control of motor motion. You'll need to use the H-Bridge to allow the Arduino's DIO pins to control the motor and the encoder to provide rotation feedback to the Arduino through DIO pins so you can decide when to turn on and off the motor. This motor/encoder combination does not provide accurate rotational position, i.e. you won't be able to &amp;quot;tell&amp;quot; the motor to go to a specific angle with any reasonable accuracy.&lt;/p&gt;&#xA;&lt;p&gt;Here is a generic application of the H-Bridge... You should find a datasheet for your specific H-Bridge for a more detailed idea of the proper application of the circuit.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/y2KKH.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/y2KKH.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="28057" LastActivityDate="2021-04-07T21:03:30.310" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22013" PostTypeId="2" ParentId="21991" CreationDate="2021-04-07T21:54:24.040" Score="0" Body="&lt;p&gt;There are many devices that would provide the recordings that you need. National Instruments makes a large number of DAQ devices that can record analog signals with very high fidelity. You could also use products from DATAQ. I would recommend something very cheap like the Adafruit Feather M0 Adalogger for projects that don't require the high precision of NI-DAQ or DATAQ instruments.&lt;/p&gt;&#xA;" OwnerUserId="28057" LastActivityDate="2021-04-07T21:54:24.040" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22015" PostTypeId="1" CreationDate="2021-04-08T08:47:54.347" Score="1" ViewCount="34" Body="&lt;p&gt;I'm pretty new to robotics, but have learned about the tranformation matrices and how to relate relationships between joints using transformation matrices.&lt;/p&gt;&#xA;&lt;p&gt;I just wonder if there is a system that represents these relationships without having to choose a root node?&lt;/p&gt;&#xA;&lt;p&gt;The reason I'm asking is for re-rooting of an arm.&lt;/p&gt;&#xA;&lt;p&gt;If we think of a simple robotic arm in 2-D, we usually have a base or root joint, then a few links and an end-effector.&lt;/p&gt;&#xA;&lt;p&gt;We can then compute each joint position in the global (root) reference frame using the transformation matrices for each link.&lt;/p&gt;&#xA;&lt;p&gt;But what if we want to suddenly switch and fix the end-effector as the new root/base and move the old root (as the new end effector)?&lt;/p&gt;&#xA;&lt;p&gt;Normally, we need to re-create the transformation matrices from the new root out to the new end effector.&lt;/p&gt;&#xA;&lt;p&gt;Is there a more elegant way to do this?&lt;/p&gt;&#xA;&lt;p&gt;thanks in advance&lt;/p&gt;&#xA;" OwnerUserId="28347" LastActivityDate="2021-04-10T15:44:46.337" Title="Elegant way to mathematically relate joint positions (without a root/base joint) for easy re-rooting?" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;forward-kinematics&gt;&lt;beginner&gt;&lt;transformation&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22016" PostTypeId="1" CreationDate="2021-04-08T15:51:24.477" Score="0" ViewCount="35" Body="&lt;p&gt;I'm trying to remove the drift generated upon the double integration of a noisy acceleration signal. But this question discusses only removing the drift upon single integration to generate velocity signal.&lt;/p&gt;&#xA;&lt;p&gt;I'm following &lt;a href=&quot;https://www.jvejournals.com/article/16965/pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;this&lt;/a&gt; research paper which uses Envelope method to remove the drift generated upon double integration of a signal.&lt;/p&gt;&#xA;&lt;p&gt;TLDR Envelope Method for a given discrete signal &lt;span class=&quot;math-container&quot;&gt;$x(n)$&lt;/span&gt;:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Identify all the local extrema of &lt;span class=&quot;math-container&quot;&gt;$x(n)$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;li&gt;Interpolate between maxima (resp., minima) by a cubic spline to form the upper envelope &lt;span class=&quot;math-container&quot;&gt;$e_{u}(n)$&lt;/span&gt; (resp., the lower envelope &lt;span class=&quot;math-container&quot;&gt;$e_{d}(n)$&lt;/span&gt;)&lt;/li&gt;&#xA;&lt;li&gt;Calculate the mean of the envelopes &lt;span class=&quot;math-container&quot;&gt;$e_{a}(n) = (e_{u}(n) + e_{d}(n))/2$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;li&gt;Compute &lt;span class=&quot;math-container&quot;&gt;$y(n) = x(n) - e_{a}(n)$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Example I was trying to solve using envelope method&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;t = np.arange(0, 20, 0.1)&#xA;f1 = lambda t: 0.1*np.sin(np.pi*t) + 0.1*np.sin(20*np.pi*t) #Clean accleration signal&#xA;f2 = lambda t: 0.1*np.sin(np.pi*t) + 0.1*np.sin(20*np.pi*t) + 0.01 #Noisy acceleration signal&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/DvqkU.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/DvqkU.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Upon Single integration for velocity:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/X9PTc.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/X9PTc.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Then located maxima and minima and performed cubic interpolation to generate upper and lower envelopes respectively using CubicSpline Method from the scipy package.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Ob9AA.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Ob9AA.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Then Generated mean of the envelopes:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/hekUp.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/hekUp.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Then Subtracting the mean of the envelopes from the Drift prone velocity:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/b35Ws.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/b35Ws.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I don't know what I did wrong but as it can be seen in the final plot, clean signal of velocity does not match the noisy signal corrected using the envelope method.&#xA;I know there are other/better methods for correcting the baseline offsets but as starting point, the envelope method seemed easier to implement. If there are methods better than this and easier to implement, I'm all ears.&lt;/p&gt;&#xA;&lt;p&gt;I would like to know what mistake I made along the way.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://colab.research.google.com/drive/1wwmLctLVywPDRkx2FiZtMbHOYJ-IcYla?usp=sharing&quot; rel=&quot;nofollow noreferrer&quot;&gt;code&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="28317" LastEditorUserId="28317" LastEditDate="2021-04-12T14:08:30.663" LastActivityDate="2021-05-12T15:00:50.040" Title="Eliminating drift generated from double integration of acceleration signal using Envelope Method" Tags="&lt;python&gt;&lt;noise&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22017" PostTypeId="2" ParentId="22016" CreationDate="2021-04-08T19:08:21.437" Score="0" Body="&lt;p&gt;It looks like you are adding a constant for noise, so it makes sense the envelope output is a constant offset from the clean.  I would think you need to add gaussian noise to simulate more realistic noise.  Guassian noise would be centered around the clean signal.&lt;/p&gt;&#xA;" OwnerUserId="24763" LastActivityDate="2021-04-08T19:08:21.437" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22018" PostTypeId="2" ParentId="20474" CreationDate="2021-04-09T05:21:05.857" Score="1" Body="&lt;p&gt;Although this is quite late, I believe this question should get an answer. The solution for this problem is:&#xA;If one has no other information but the angular velocity and needs to get the Euler angles, using the relation of quaternion derivative and angular velocity is the best option I found.  Then, the quaternion derivative can be integrated numerically to get the Euler angles. Integration of quaternion derivative perfectly satisfies the property of special orthogonal group S0(3).&lt;/p&gt;&#xA;&lt;p&gt;Let me know if otherwise.&lt;/p&gt;&#xA;" OwnerUserId="22888" LastEditorUserId="22888" LastEditDate="2021-04-09T05:26:16.453" LastActivityDate="2021-04-09T05:26:16.453" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22019" PostTypeId="1" AcceptedAnswerId="22040" CreationDate="2021-04-09T07:48:54.110" Score="1" ViewCount="49" Body="&lt;p&gt;I want to ask people who have designed the control/behaviour system of the mobile robot? As far as I know, architecture might be implemented as a finite-state machine or a behaviour tree. What are the key advantages of using a tree as opposed to a finite-state machine? Does it make sense to use a neural network in conjunction with a behaviour tree  (interested in the real implementation experience or example)? If so, what opportunities can this provide?&lt;/p&gt;&#xA;" OwnerUserId="28356" LastActivityDate="2021-04-14T05:58:56.080" Title="Mobile robot behaviour" Tags="&lt;mobile-robot&gt;&lt;neural-networks&gt;" AnswerCount="1" CommentCount="2" ClosedDate="2021-04-19T18:17:37.473" ContentLicense="CC BY-SA 4.0" />
  <row Id="22020" PostTypeId="1" CreationDate="2021-04-09T22:13:45.600" Score="1" ViewCount="31" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/kqD0Q.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kqD0Q.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The parallel mechanism is composed of a moving platform&#xA;and a base (or frame) connected by four legs. Each leg is composed of five&#xA;revolute joints numbered 1, 2, … 5 from the base to the moving platform. The&#xA;axes of the revolute joints 3, 4 and 5 in leg 1, the revolute joints 1 and 5 in leg 2,&#xA;as well as the revolute joints 1, 2 and 3 in leg 3 are all parallel to the Z-axis. The&#xA;axes of the remaining revolute joints in each leg are parallel&lt;/p&gt;&#xA;&lt;p&gt;I want to know the DOF. Can someone help?&lt;/p&gt;&#xA;" OwnerUserId="28363" LastActivityDate="2021-05-10T10:04:35.493" Title="Parallel spatial mechanism - DOF" Tags="&lt;kinematics&gt;&lt;manipulator&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22021" PostTypeId="2" ParentId="22020" CreationDate="2021-04-10T09:32:22.290" Score="0" Body="&lt;p&gt;So I guess you want to know the DOF of the moving platform. First of all keep in mind that for a parallel mechanism with a fixed base and one moving platform the maximum degrees of freedom for the moving platform are 6, e.g. 3 rotational and 3 translational DOF.&lt;/p&gt;&#xA;&lt;p&gt;In this case it is kind of hard to see intuitively what DOF the moving platform could reach. So I would suggest following procedure:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;Imagine the legs without the revolute joints, linked to the moving platform in a way they can provide the 6 DOF to the moving platform. In this case the link should be able to change its length and be able to rotate around the joints at the base and the moving platform freely. The first example that comes to my mind would be telescopic legs with ball joints at the base and the moving platform.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Now we know what kind of motion the legs need to be able to achieve to have 6 DOF at the moving platform. This means you can analyze the legs individually to determine the actual DOF of the platform. Take the actual leg 2 for example and forget the moving platform. Think only about the leg which is attached to the base. The leg can achieve all translations and rotations, at least inside a very small workspace. (Take a minute to think about it)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;Do the same for leg 1 and 3. Looking at leg 3 we can see that we could remove the revolute joints 1 and 2 and the top would have the same DOF, so we only have to consider 3, 4 and 5. Where it is clear that the leg can achieve all rotations but is not variable in length, e.g. the translational motion can't be achieved and therefore has only 3 DOF. And since leg one is the same as leg 3 only in reverse, it also has only 3 DOF.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;The moving platform can only achieve the DOF of the leg with the minimum DOF. This is because all legs have to provide the same 'amount' of DOF in order to achieve the DOF. This sounds a bit weird but again take a minute and think about it. For example if wanted the platform to move towards us in an only translational motion, leg 2 would try to pull the platform towards us but leg 1 and 3 would only come towards us including some rotational motion. Therefore an only translational motion would not be possible. Try to think about more restrictions. The final conclusion would therefore be that the moving platform has only 3 DOF.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Maybe somebody else knows about some special formula you can apply, but I hope this helps a bit in terms of intuitive understanding of DOF.&lt;/p&gt;&#xA;" OwnerUserId="28366" LastActivityDate="2021-04-10T09:32:22.290" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22022" PostTypeId="1" CreationDate="2021-04-10T09:57:07.860" Score="1" ViewCount="6" Body="&lt;p&gt;Here's how my code looks -&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;costmap_2d::Costmap2DROS *global_costmap = new costmap_2d::Costmap2DROS(&amp;quot;global_costmap&amp;quot;, buffer);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I have specified the following params in my configuration file -&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;global_frame: odom&#xA;rolling_window: true&#xA;track_unknown_space: true&#xA;&#xA;plugins:&#xA;  - {name: obstacles_laser,           type: &amp;quot;costmap_2d::ObstacleLayer&amp;quot;}&#xA;  - {name: inflation,                 type: &amp;quot;costmap_2d::InflationLayer&amp;quot;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I am able to publish the occupancy grid using the terminal by running rostopic echo -n1 /global_costmap/costmap.&lt;/p&gt;&#xA;&lt;p&gt;However, when I add the following line to my code -&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;unsigned char* global_og = global_costmap-&amp;gt;getCostmap()-&amp;gt;getCharMap() ; &#xA;&#xA;cout &amp;lt;&amp;lt; global_og[10] &amp;lt;&amp;lt; endl; &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I see some strange characters being published.&lt;/p&gt;&#xA;" OwnerUserId="27245" LastActivityDate="2021-04-10T09:57:07.860" Title="unable to publish values of costmap_2d occupancy grid" Tags="&lt;ros&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22023" PostTypeId="2" ParentId="22015" CreationDate="2021-04-10T15:44:46.337" Score="1" Body="&lt;p&gt;If &lt;span class=&quot;math-container&quot;&gt;$T^{ee}_{root}$&lt;/span&gt; is the homogeneous transformation that relates coordinates expressed in the end-effector frame into coordinates expressed in the root frame, then it holds that &lt;span class=&quot;math-container&quot;&gt;$T^{root}_{ee} = \left( T^{ee}_{root} \right)^{-1}$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Interestingly, the computation of the matrix inverse is straightforward and can be done by applying the rules reported in &lt;a href=&quot;https://robotics.stackexchange.com/a/7539/6941&quot;&gt;https://robotics.stackexchange.com/a/7539/6941&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastActivityDate="2021-04-10T15:44:46.337" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22025" PostTypeId="1" CreationDate="2021-04-11T03:40:05.330" Score="0" ViewCount="20" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/KqAYo.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KqAYo.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;the subscript of the last m-1 &lt;em&gt;p&lt;/em&gt; and &lt;em&gt;r&lt;/em&gt; why not is &lt;em&gt;z&lt;/em&gt; ?, since it refers to 3D case.&lt;/p&gt;&#xA;" OwnerUserId="28200" LastEditorUserId="28200" LastEditDate="2021-04-11T08:54:56.953" LastActivityDate="2021-04-11T08:54:56.953" Title="Trajectory Planning for Automatic Machines and Robots Book-page 365, is there an error ? it is not included in the Errata" Tags="&lt;motion-planning&gt;&lt;trajectory&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22026" PostTypeId="1" CreationDate="2021-04-11T07:46:47.597" Score="1" ViewCount="25" Body="&lt;p&gt;I know that the &lt;strong&gt;flight controller&lt;/strong&gt; is the heart of the quadcopter and a device which has to be considered greatly when building a quadcopter project. In regards to this quadcopter project that I'm working on what microcontrollers can I use to actually make myself a flight controller from scratch? Would something like an Arduino mega2560, STM32 board, Raspberry Pi work? To follow up with this, what would be the first step in developing the flight controller on these microcontrollers? If anyone knows please inform.&lt;/p&gt;&#xA;" OwnerUserId="28373" LastActivityDate="2021-04-16T20:01:18.037" Title="What devices can I use as a flight controller in a Quadcopter project?" Tags="&lt;quadcopter&gt;&lt;arduino&gt;&lt;microcontroller&gt;&lt;drone&gt;" AnswerCount="1" CommentCount="0" ClosedDate="2021-04-19T18:18:28.343" ContentLicense="CC BY-SA 4.0" />
  <row Id="22028" PostTypeId="1" CreationDate="2021-04-12T09:54:53.300" Score="1" ViewCount="23" Body="&lt;p&gt;I am working on the &amp;quot;CONF&amp;quot; parameter of FANUC Robots.&lt;/p&gt;&#xA;&lt;p&gt;The &amp;quot;CONF&amp;quot; param determine the pose of the robot (maybe to have only one inverse kinematics solution). This configuration is based on 3 mains parameters : the position of the wrist (Flip/No-flip), the elbow (Up/Down)  and waist (Top/Bottom).&lt;/p&gt;&#xA;&lt;p&gt;I want to find a way to develop a function which the purpose is to give in enter a CONF param (like NUT of FUT) and return all the possible angles configurations of the robots which satisfied this CONF param (n,6 array).&lt;/p&gt;&#xA;&lt;p&gt;I have managed to find the min and max angles for J5 to satisfied the flip or no-flip CONF parameter (which is dependent of +/-180° on J4 and J6).&lt;/p&gt;&#xA;&lt;p&gt;If we take a 6 DOF robot (J1,J2,J3,J4,J5,J6), it's quite simple to find all the possible configuration with a fixed J2 and fixed J3.&lt;/p&gt;&#xA;&lt;p&gt;But when I want to include J2 and J3, the problem become way more complex.&lt;/p&gt;&#xA;&lt;p&gt;Have you any clue ?&lt;/p&gt;&#xA;&lt;p&gt;Thanks in advance for your help, have a good day!&lt;/p&gt;&#xA;" OwnerUserId="28222" LastActivityDate="2021-04-12T09:54:53.300" Title="Deduce all possible configuration for a given CONF param FANUC" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;inverse-kinematics&gt;&lt;design&gt;&lt;algorithm&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="22029" PostTypeId="1" CreationDate="2021-04-12T13:38:49.683" Score="1" ViewCount="31" Body="&lt;p&gt;My GNSS modules gives me one NMEA packet with ECEF velocity. My doubt is about how i convert these 3 vectors to NED frame. Can i use the conventional matrix rotation &lt;a href=&quot;https://www.mathworks.com/help/aeroblks/directioncosinematrixeceftoned.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;MathWorksRef&lt;/a&gt;. If yes, i use the latitude and longitude with the same timestamp of the velocity points, or other?&lt;/p&gt;&#xA;" OwnerUserId="27655" LastEditorUserId="27655" LastEditDate="2021-04-12T17:26:28.240" LastActivityDate="2021-04-12T17:26:28.240" Title="Convert ECEF Velocity to NED Velocity" Tags="&lt;navigation&gt;&lt;frame&gt;&lt;gnss&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22030" PostTypeId="1" CreationDate="2021-04-12T22:37:54.670" Score="2" ViewCount="26" Body="&lt;p&gt;in terms of motion planning, what are the difference between gradient-based motion planning (for instance, CHOMP &lt;a href=&quot;http://www.nathanratliff.com/thesis-research/chomp&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www.nathanratliff.com/thesis-research/chomp&lt;/a&gt;) and deep reinforcement learning?&lt;/p&gt;&#xA;&lt;p&gt;Both of the approaches are iterated many times to optimize the given gradient function/ reward function in the simulation. Can someone give his/her insights into these two methods?&lt;/p&gt;&#xA;" OwnerUserId="21382" LastActivityDate="2021-04-12T22:37:54.670" Title="Difference between CHOMP and DRL" Tags="&lt;mobile-robot&gt;&lt;robotic-arm&gt;&lt;motion-planning&gt;&lt;reinforcement-learning&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22031" PostTypeId="2" ParentId="20740" CreationDate="2021-04-13T02:43:37.503" Score="1" Body="&lt;p&gt;I think you may have a mistake in python code.&#xA;That is:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;slerp_d = slerp * np.log(qf * q0.inverse())&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;I think the correct one is:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;slerp_d = slerp * np.log(q0.inverse()*qf)&lt;/code&gt;&lt;/p&gt;&#xA;" OwnerUserId="28411" LastEditorUserId="110" LastEditDate="2021-04-24T15:11:34.070" LastActivityDate="2021-04-24T15:11:34.070" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22032" PostTypeId="1" CreationDate="2021-04-13T06:36:20.113" Score="1" ViewCount="17" Body="&lt;p&gt;I am trying to self localize a 3 wheeled omni directional robots using just motor encoders&#xA;I followed the odometry method mentioned in equations 5,8,9 of &lt;a href=&quot;https://bibliotecadigital.ipb.pt/bitstream/10198/1897/1/C2_002_Gon%C3%A7alves.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://bibliotecadigital.ipb.pt/bitstream/10198/1897/1/C2_002_Gon%C3%A7alves.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;But I cant seem to implement the equations in code, It'll be helpful if anyone help me out with the basic structure of the code or flowchart&lt;/p&gt;&#xA;" OwnerUserId="26283" LastActivityDate="2021-04-13T06:36:20.113" Title="Self localization for 3 wheeled omnidirectional robot" Tags="&lt;localization&gt;&lt;odometry&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22033" PostTypeId="1" CreationDate="2021-04-13T14:11:42.730" Score="1" ViewCount="43" Body="&lt;p&gt;I have one Picamera and one normal USB Webcam and would like to use them together as one stereo camera. Is this even possible as the 2 cameras aren't exactly the same? I would like to use them in ROS where I want to do SLAM. If it is possible, is there a guide on how to do it because as of now, I have only been using one camera for SLAM and it is not working too well.&lt;/p&gt;&#xA;" OwnerUserId="26747" LastActivityDate="2021-04-14T02:06:36.130" Title="Use 2 Cameras as 1 Stereo Camera" Tags="&lt;ros&gt;&lt;slam&gt;&lt;cameras&gt;&lt;stereo-vision&gt;&lt;monocular&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="22034" PostTypeId="1" AcceptedAnswerId="22043" CreationDate="2021-04-13T16:57:09.333" Score="1" ViewCount="24" Body="&lt;p&gt;I can not find a clear answer on the internet about the difference between a &lt;em&gt;uniform&lt;/em&gt; and &lt;em&gt;non-uniform&lt;/em&gt; cost map. I am interested in getting an answer in the context of grid maps for robot navigation.&lt;/p&gt;&#xA;&lt;p&gt;EDIT: I found the answer, in my case the uniformity was referring to the cost of traversing from one cell to another. Thus, if the cost is fixed the cost map is said to be of &lt;em&gt;uniform cost&lt;/em&gt;. Otherwise, if the cost is variable the map is said to be of &lt;em&gt;non-uniform cost&lt;/em&gt;.&lt;/p&gt;&#xA;" OwnerUserId="28425" LastEditorUserId="28425" LastEditDate="2021-04-20T10:08:56.420" LastActivityDate="2021-04-20T10:08:56.420" Title="Uniform and non-uniform cost maps" Tags="&lt;mapping&gt;&lt;occupancygrid&gt;" AnswerCount="1" CommentCount="0" ClosedDate="2021-04-19T18:18:07.247" ContentLicense="CC BY-SA 4.0" />
  <row Id="22035" PostTypeId="1" AcceptedAnswerId="22038" CreationDate="2021-04-13T18:40:14.793" Score="1" ViewCount="22" Body="&lt;p&gt;I am trying to find the joint angles or at least theta to be used to find the Denavit-Hartenberg Parameter for a robotic arm (Baxter's right arm). I have the link lengths and such, but I don't know how to find theta using the link lengths or anything. Help with anything would be appreciated.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ppwEJ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ppwEJ.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="28426" LastActivityDate="2021-04-13T20:44:20.870" Title="How to find Joint Angles or Theta for 7DoF Robotic Arm" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;forward-kinematics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22036" PostTypeId="2" ParentId="14154" CreationDate="2021-04-13T18:54:39.707" Score="2" Body="&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$SE(3)$&lt;/span&gt; is the representation for both translation and rotation in 3D space, whereas &lt;span class=&quot;math-container&quot;&gt;$SO(3)$&lt;/span&gt; is only the representation for rotations. &lt;span class=&quot;math-container&quot;&gt;$\mathbb{R}^3$&lt;/span&gt; is for translations in 3D space.&lt;/p&gt;&#xA;&lt;p&gt;If you only consider 2-dimentional space, then you can simply change 3 to 2, i.e., &lt;span class=&quot;math-container&quot;&gt;$SE(2)$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$SO(2)$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$\mathbb{R}^2$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I wouldn't worry too much about it. You can just consider these as mathematical notations.&lt;/p&gt;&#xA;" OwnerUserId="28424" LastActivityDate="2021-04-13T18:54:39.707" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22038" PostTypeId="2" ParentId="22035" CreationDate="2021-04-13T20:44:20.870" Score="0" Body="&lt;p&gt;Since that arm is redundant, there are an infinite number of solutions for the inverse kinematics.  Fortunately, Dr. Williams at Ohio U has developed the forward and inverse kinematics for this arm &lt;a href=&quot;https://www.ohio.edu/mechanical-faculty/williams/html/PDF/BaxterKinematics.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt;.   He describes the complete forward kinematics, and the inverse kinematics two ways:  once for the case where &lt;span class=&quot;math-container&quot;&gt;$\theta_3$&lt;/span&gt; is fixed at zero degrees, and again using a numerical approach to resolve the redundant system.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2021-04-13T20:44:20.870" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22039" PostTypeId="2" ParentId="22033" CreationDate="2021-04-14T02:00:17.230" Score="1" Body="&lt;p&gt;Yes, it is possible. That is often called a heterogeneous stereo camera.&lt;/p&gt;&#xA;&lt;p&gt;Step1: stereo camera calibration.&lt;/p&gt;&#xA;&lt;p&gt;Find relative camera location to each other (extrinsic).&lt;/p&gt;&#xA;&lt;p&gt;Find camera lens distortion parameters (intrinsic).&lt;/p&gt;&#xA;&lt;p&gt;Lens distortion is simply done by usual camera calibration but for the extrinsic finding, you need a bit of coding.&lt;/p&gt;&#xA;&lt;p&gt;Step2: image rectifying&lt;/p&gt;&#xA;&lt;p&gt;If you make the two cameras look in the same direction( same z-direction), you can make the processing a lot faster. But even if you make the hw well the z-direction can't be the same. Image rectifying makes the two images virtually parallel.&lt;/p&gt;&#xA;&lt;p&gt;Step3: stereo matching.&lt;/p&gt;&#xA;&lt;p&gt;Find a correspondence of a pixel on the left image in the right side image. The result is a disparity or depth map.&lt;/p&gt;&#xA;&lt;p&gt;Step2 and 3 are where your problem is complicated due to the heterogeneous setup. It is likely you won't find an open-source code for the heterogeneous stereo camera. Even if you find one, it will be hard to use it without thoroughly understanding the stereo camera algorithm.&lt;/p&gt;&#xA;&lt;p&gt;Camera synchronization is a big problem too especially if you need it for SLAM.&lt;/p&gt;&#xA;&lt;p&gt;My recommendation is to try your best to void this configuration. Tell your supervisor it is semi-impossible and the expected outcome quality is way lower than a low-cost visual-inertial camera (I am sure this should be cheaper than your picam + usb cam configuration).&lt;/p&gt;&#xA;&lt;p&gt;If you still would like to give it a try, see if Opencv supports a heterogeneous stereo camera setup.&lt;/p&gt;&#xA;" OwnerUserId="19219" LastEditorUserId="19219" LastEditDate="2021-04-14T02:06:36.130" LastActivityDate="2021-04-14T02:06:36.130" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="22040" PostTypeId="2" ParentId="22019" CreationDate="2021-04-14T05:58:56.080" Score="0" Body="&lt;p&gt;The similarity between finite state machines and behavior trees is, that both concepts are model-free control strategies. The programmer writes down a script, e.g. “movetoball(), opengripper(), graspball()” and if the script fails to reach the goal, the programmer is in charge to improve the written statements. The reason why model free policies are used in the reality is because they don't need any form of CPU resources, but can be executed very fast. At the same time, the programmer gets a working robot who is moving it's servo motors without implementing complicated reinforcement learning- or motion planning algorithms.&lt;/p&gt;&#xA;&lt;p&gt;Within the AI gaming domain, behavior trees are perceived as more powerful than finite state machines because they are containing a hierarchical component to structure nested tasks. They are often visualized as a mindmap and lots of documentation is available how to create a behavior tree for ingame AI characters in a certain game engine (without naming one of the larger one which are starting with the letter U).&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2021-04-14T05:58:56.080" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22042" PostTypeId="1" CreationDate="2021-04-14T21:58:28.897" Score="1" ViewCount="12" Body="&lt;p&gt;I have this cheap DRO from Amazon/China&#xA;&lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/B00E7XFF5Q&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.amazon.com/gp/product/B00E7XFF5Q/ref=ppx_yo_dt_b_asin_title_o07_s00?ie=UTF8&amp;amp;psc=1&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I'm able to read the values out of it using a small FPGA.&#xA;The documentation says the update rate can be as fast as every 20 ms if it's in fast mode, but it doesn't say how to enable fast mode.  Currently the output is only every ~125 ms.&lt;/p&gt;&#xA;&lt;p&gt;I've tried long-pressing the zero and inch/mm buttons, and various combinations of buttons (including power) but there is no change in mode.  There are no other buttons.  There is no input wire for example to send a command.&lt;/p&gt;&#xA;&lt;p&gt;Does someone know how to get this thing into fast mode?&lt;/p&gt;&#xA;&lt;p&gt;thanks&lt;/p&gt;&#xA;" OwnerUserId="10681" LastActivityDate="2021-04-14T21:58:28.897" Title="How to set &quot;fast mode&quot; in low cost DRO" Tags="&lt;sensors&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="22043" PostTypeId="2" ParentId="22034" CreationDate="2021-04-15T09:22:43.197" Score="0" Body="&lt;p&gt;The cost map is indeed an important sub problem within robot navigation, because it guides a solver into a certain direction. The idea is, that a sampling based solver like RRT is searching in the cost map for a gradient descent which reduces the state space to interesting regions. A fast path planner and a well created cost map are the same.&lt;/p&gt;&#xA;&lt;p&gt;Uniform cost maps for path planning are the easier one. The distance to the goal is determined by the distance in the euclidean space which is sqrt(diffx²+diffy²) and all the coordinates on the map can be traversed. Non uniform cost maps are more realistic because each position is labeled with a probability value for the existence of an obstacle.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2021-04-15T09:22:43.197" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22044" PostTypeId="1" AcceptedAnswerId="22045" CreationDate="2021-04-15T11:47:49.510" Score="1" ViewCount="27" Body="&lt;p&gt;Dear Robotics Stack Exchange,&lt;/p&gt;&#xA;&lt;p&gt;I am trying to calculate the torques and forces for a 2DOF robot.&lt;/p&gt;&#xA;&lt;p&gt;I’m used the partial differentiation method to find the Jacobian matrix. I managed to find the Transformation martix to find the Jacobian matrix in as shown in the figure but, I have hit a stopping block when I’ve been calculating the torques and forces. I’ve shown my working out below just as a reference.&lt;/p&gt;&#xA;&lt;p&gt;I was wondering if anyone can shed light into finding the torques as im very close into gathering the equations.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/b8Wdg.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/b8Wdg.png&quot; alt=&quot;Jacobian Matrix&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Sdk9g.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Sdk9g.png&quot; alt=&quot;TorqueCalculation&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="24952" LastActivityDate="2021-04-15T15:28:36.573" Title="Calculate Torques &amp; Forces From Jacobian Matrix" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;torque&gt;&lt;jacobian&gt;&lt;force&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22045" PostTypeId="2" ParentId="22044" CreationDate="2021-04-15T15:28:36.573" Score="1" Body="&lt;p&gt;Your computations of the transformation matrices are incorrect.  DH transformation matrices are computed as a multiplication of four matrices:  rotate about z by &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt;, translate along z by &lt;span class=&quot;math-container&quot;&gt;$d$&lt;/span&gt;, translate along x by &lt;span class=&quot;math-container&quot;&gt;$a$&lt;/span&gt;, and rotate about x by &lt;span class=&quot;math-container&quot;&gt;$\alpha$&lt;/span&gt;.  More simply: you are missing the &lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt; terms in the rightmost columns of your transformation matrices.&lt;/p&gt;&#xA;&lt;p&gt;The result will be that your Jacobian becomes a 2x2 matrix when differentiated.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2021-04-15T15:28:36.573" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22046" PostTypeId="1" CreationDate="2021-04-15T18:31:29.493" Score="1" ViewCount="27" Body="&lt;p&gt;I am an electronics engineering student who recently started working on Arduino. As part of my efforts to wake up on time, I decided that I should make an automatic water spray alarm clock. I have all the raw material ready (Spray Bottle, Arduino Uno, MG995 servo, external power supply for servo). I also have the test code ready. The only thing I am having trouble is how my servo should pull the spray handle.&lt;/p&gt;&#xA;&lt;p&gt;Here is the spray bottle:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/tG6UX.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tG6UX.jpg&quot; alt=&quot;spray bottle&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;And here is my thought configuration of where servo would be and the interface location (red doodling):&#xA;&lt;a href=&quot;https://i.stack.imgur.com/0BdX1.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/0BdX1.jpg&quot; alt=&quot;mechanism&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;For this interface, my options are:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://www.amazon.in/Futurekart-35mm-Strong-Fishing-Thread/dp/B07KS1K9MT?ref_=Oct_s9_apbd_orecs_hd_bw_b3iMhaB&amp;amp;pf_rd_r=9NG9HYXCTWYJ5Y2NQNKS&amp;amp;pf_rd_p=9b4aa23b-223f-50cd-8480-a08c63b5aaef&amp;amp;pf_rd_s=merchandised-search-10&amp;amp;pf_rd_t=BROWSE&amp;amp;pf_rd_i=3403968031&quot; rel=&quot;nofollow noreferrer&quot;&gt;Nylon fishing line&lt;/a&gt;. It is small enough to go thru mounting holes of servo arm of servo, but not strong enough to pull the spray handle.&lt;/li&gt;&#xA;&lt;li&gt;Something that sticks to plastic servo arm as well as plastic spray handle, should it be a rod or a long piece of wood that can be put in place with screws? &lt;strong&gt;This is the part where I am stuck, as to what should I choose as the interface that sticks tightly to the servo arm and the spray handle and pushes spray handle when servo moves.&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="28318" LastActivityDate="2021-04-15T18:31:29.493" Title="What should be my spray handle-servo interface for pull mechanism?" Tags="&lt;servomotor&gt;&lt;mechanism&gt;" AnswerCount="0" CommentCount="4" ClosedDate="2021-04-19T18:16:48.450" ContentLicense="CC BY-SA 4.0" />
  <row Id="22047" PostTypeId="1" AcceptedAnswerId="22048" CreationDate="2021-04-16T10:24:22.500" Score="2" ViewCount="45" Body="&lt;p&gt;Consider the unicycle dynamics in 2D plane:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/tfyMV.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tfyMV.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$\begin{array}{l}&#xA;\dot x = v\cos \varphi \\&#xA;\dot y = v\sin \varphi \\&#xA;\dot \varphi  = \omega &#xA;\end{array}$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;What is the range of the heading angle &lt;span class=&quot;math-container&quot;&gt;$\phi$&lt;/span&gt;? Some texts say &lt;span class=&quot;math-container&quot;&gt;$\varphi  \in [ - \pi ,\pi ) $&lt;/span&gt; and other use this convention &lt;span class=&quot;math-container&quot;&gt;$\varphi  \in [ 0 ,2\pi ) $&lt;/span&gt;. What is the reason for this difference?&lt;/p&gt;&#xA;" OwnerUserId="16865" LastActivityDate="2021-04-16T13:28:51.900" Title="Range of a heading angle [0,2π) or [−π,π)" Tags="&lt;mobile-robot&gt;&lt;kinematics&gt;&lt;dynamics&gt;&lt;coordinate-system&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22048" PostTypeId="2" ParentId="22047" CreationDate="2021-04-16T13:28:51.900" Score="2" Body="&lt;p&gt;No difference at all although φ∈[−π,π) is much more reasonable and intuitive. It is just a matter of system definition.&lt;/p&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2021-04-16T13:28:51.900" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22049" PostTypeId="2" ParentId="22026" CreationDate="2021-04-16T20:01:18.037" Score="0" Body="&lt;p&gt;STM32F103C8T6 blue pill, the microcontroller can be a good candidate.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;You can program it with Arduino and Arduino IDE.&lt;/li&gt;&#xA;&lt;li&gt;Importantly, it is really weightless and has a small footprint.&lt;/li&gt;&#xA;&lt;li&gt;Supports high-speed UART and SPI(400KHz) which would be necessary for IMU-based feedback control.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="28447" LastActivityDate="2021-04-16T20:01:18.037" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="22050" PostTypeId="2" ParentId="5171" CreationDate="2021-04-17T09:50:01.423" Score="1" Body="&lt;p&gt;Steps one should take to eventually write a flight controller software:&lt;/p&gt;&#xA;&lt;h2&gt;Step 1&lt;/h2&gt;&#xA;&lt;p&gt;Learn the mathematics and physics laws behind the airplanes, helicopters, multi-rotors, etc.&lt;/p&gt;&#xA;&lt;h2&gt;Step 2&lt;/h2&gt;&#xA;&lt;p&gt;Learn electronics.&lt;/p&gt;&#xA;&lt;p&gt;Electronics is a huge field and learning the robotics related stuff would be enough.&lt;/p&gt;&#xA;&lt;h2&gt;Step 3&lt;/h2&gt;&#xA;&lt;p&gt;Learn how computers work.&lt;/p&gt;&#xA;&lt;p&gt;The electronics behind a computer. How does a computer stores information, how does a CPU or micro-controller processes those information, how would you send those information to another system through the wire or air, etc. The concepts are same from an Arduino Uno to a bad-ass gaming PC.&lt;/p&gt;&#xA;&lt;h2&gt;Step 4&lt;/h2&gt;&#xA;&lt;p&gt;Learn a programming language.&lt;/p&gt;&#xA;&lt;p&gt;Choosing a language depends on the platform you want to target. Are you targeting a specific micro-controller? then you need to learn that micro-controller's specific language (which is an assembly language or maybe a C like language). Are you targeting an Operating System? For example your goal may be that I want to write a flight controller for the Linux OS which requires the real-time patch and would work on any Linux enabled SBC with some specified MPU sensors that I support. In that case you need to learn C (because Linux's native APIs are in C) and you also need to master the Linux kernel. There are wrappers around native APIs in many languages but none of them cover all of the APIs and may give you less control over how you can call them.&lt;/p&gt;&#xA;&lt;h2&gt;Step 5&lt;/h2&gt;&#xA;&lt;p&gt;Put it all together!&lt;/p&gt;&#xA;&lt;p&gt;At this point you can start writing a flight controller.&lt;/p&gt;&#xA;&lt;p&gt;Depending on how much time and energy you have, this may take from a few years to a few decades! :D&lt;/p&gt;&#xA;&lt;p&gt;This is why these things are usually created in a team work.&lt;/p&gt;&#xA;" OwnerUserId="28448" LastActivityDate="2021-04-17T09:50:01.423" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22051" PostTypeId="1" AcceptedAnswerId="22052" CreationDate="2021-04-18T05:46:30.193" Score="3" ViewCount="55" Body="&lt;p&gt;Let's say I have a 2-link planar robot arm. The motors in both joints have maximum angular speeds that limit how fast they can spin. If I plan a path from point A to point B with a constant end effector velocity, how do I calculate the maximum velocity the end effector can travel with along this path?&lt;/p&gt;&#xA;&lt;p&gt;I know I can calculate the velocity of the end effector with this equation: &lt;span class=&quot;math-container&quot;&gt;$v=J(q)\dot{q}$&lt;/span&gt;.&#xA;I could iterate through points along the path plugging in the joint's maximum angular speeds to calculate the maximum velocity at each point. Then I would use the smallest velocity as the &amp;quot;maximum&amp;quot; velocity the end effector can travel at.&lt;/p&gt;&#xA;&lt;p&gt;Is this the best way to accomplish my goal?&lt;/p&gt;&#xA;" OwnerUserId="26473" LastEditorUserId="26473" LastEditDate="2021-04-18T15:25:04.757" LastActivityDate="2021-04-20T05:49:33.787" Title="Compute Maximum End Effector Velocity Along Path" Tags="&lt;robotic-arm&gt;&lt;inverse-kinematics&gt;&lt;path-planning&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="22052" PostTypeId="2" ParentId="22051" CreationDate="2021-04-18T12:38:24.253" Score="2" Body="&lt;p&gt;Nope, you cannot simply plug the maximum joint velocities in the differential forward kinematic law, as you need to guarantee that &lt;span class=&quot;math-container&quot;&gt;$\mathbf{v}$&lt;/span&gt; will always point toward the target: in fact, &lt;span class=&quot;math-container&quot;&gt;$\mathbf{v}$&lt;/span&gt; is a vector.&lt;/p&gt;&#xA;&lt;p&gt;As a result, you need to solve the inverse kinematics problem first for each point of the path. This can be done iteratively:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Assign a desired &lt;span class=&quot;math-container&quot;&gt;$\mathbf{v}$&lt;/span&gt; with a given magnitude and direction.&lt;/li&gt;&#xA;&lt;li&gt;Solve for each point &lt;span class=&quot;math-container&quot;&gt;$\dot{\mathbf{q}} = \mathbf{J}^{-1} \cdot \mathbf{v}$&lt;/span&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Check if the components of &lt;span class=&quot;math-container&quot;&gt;$\dot{\mathbf{q}}$&lt;/span&gt; are within the allowed range of the motors throughout the entire path. If not, reduce the magnitude of &lt;span class=&quot;math-container&quot;&gt;$\mathbf{v}$&lt;/span&gt; and iterate again.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;In practice, you ought to consider that the kinematic singularities may impede the simple solution resorting to the (pseudo)inverse of the Jacobian.&lt;/p&gt;&#xA;&lt;p&gt;To get around the singularities, one usually resorts to the Damped Least-Squares inversion &lt;span class=&quot;math-container&quot;&gt;$\mathbf{J}^*$&lt;/span&gt; of the Jacobian &lt;span class=&quot;math-container&quot;&gt;$\mathbf{J}$&lt;/span&gt;, where&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\mathbf{J}^* = \mathbf{J}^T \left( \mathbf{J}\mathbf{J}^T + k^2\mathbf{I} \right).&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Then, because of the tuning of &lt;span class=&quot;math-container&quot;&gt;$k$&lt;/span&gt;, you won't have most likely a unique correspondence between the joint and the end-effector velocity, but rather you would need to reason in terms of margins.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;To elaborate more on the particular 2D case, I could argue the following:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;We need first to solve the IK problem and come up with the exact solution &lt;span class=&quot;math-container&quot;&gt;$f \left( q_1, q_2 \right) = \left( x, y \right)^T$&lt;/span&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Then, we need to solve a constrained optimization problem to find the couple &lt;span class=&quot;math-container&quot;&gt;$\left( \dot{q}_1, \dot{q}_2 \right)$&lt;/span&gt; that maximizes the Cartesian velocity knowing that this velocity is required to be along a given direction and we have bounds for the speed of the motors.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Of course, the above procedure needs to be iterated throughout the points of the entire path anyway, to finally determine which is the lowest Cartesian velocity that can be attained. This will be your final value as it will guarantee that the bounds on the motor speeds won't be violated at any point of the path.&lt;/p&gt;&#xA;&lt;p&gt;Here below some more details.&lt;/p&gt;&#xA;&lt;h3&gt;Step 1&lt;/h3&gt;&#xA;&lt;p&gt;We know the &lt;a href=&quot;https://robotacademy.net.au/lesson/inverse-kinematics-for-a-2-joint-robot-arm-using-geometry/&quot; rel=&quot;nofollow noreferrer&quot;&gt;exact solution&lt;/a&gt; of the IK problem:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\begin{cases}&#xA;q_1 = \arctan{\frac{y}{x}} + \tan{\frac{a_2\sin{q_2}}{a_1+a_2\cos{q_2}}} \\&#xA;q_2 = -\arccos{\frac{x^2 + y^2 -a^2_1 -a^2_2}{2a_1a_2}}&#xA;\end{cases},&#xA;$$&lt;/span&gt;&#xA;where &lt;span class=&quot;math-container&quot;&gt;$a_1$&lt;/span&gt;, &lt;span class=&quot;math-container&quot;&gt;$a_2$&lt;/span&gt; are the link lengths.&lt;/p&gt;&#xA;&lt;h3&gt;Step 2&lt;/h3&gt;&#xA;&lt;p&gt;The velocity equations are:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\begin{cases}&#xA;\dot{x} = -a_1\sin{q_1}\cdot\dot{q_1} -a_2\sin{\left(q_1+q_2\right)} \cdot \left(\dot{q_1}+\dot{q_2}\right) \\&#xA;\dot{y} = a_1\cos{q_1}\cdot\dot{q_1} +a_2\cos{\left(q_1+q_2\right)} \cdot \left(\dot{q_1}+\dot{q_2}\right)&#xA;\end{cases},&#xA;$$&lt;/span&gt;&#xA;where &lt;span class=&quot;math-container&quot;&gt;$\left(q_1, q_2\right)$&lt;/span&gt; are determined in step 1.&lt;/p&gt;&#xA;&lt;p&gt;The Cartesian velocities &lt;span class=&quot;math-container&quot;&gt;$\left( \dot{x}, \dot{y} \right)$&lt;/span&gt; cannot be generic as they need to enforce the assigned direction; so, it holds that &lt;span class=&quot;math-container&quot;&gt;$\frac{\dot{y}}{\dot{x}} = \text{known constant} = c$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;By aggregating all this information, we get that the solution &lt;span class=&quot;math-container&quot;&gt;$\left( \dot{q_1}, \dot{q_2} \right)^*$&lt;/span&gt; is the outcome of the following constrained optimization problem:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;\begin{array}{lcr}&#xA;\left( \dot{q_1}, \dot{q_2} \right)^* = \arg \max\limits_{\dot{q_1},\dot{q_2}} \frac{1}{2}\left( \dot{y}\left(\dot{q_1},\dot{q_2}\right) \right)^2 \\&#xA;\text{s.t.} \begin{cases} \frac{\dot{y}}{\dot{x}} \left(\dot{q_1},\dot{q_2}\right) = c \\&#xA;-M_1 &amp;lt; \dot{q_1} &amp;lt; M_1 \\&#xA;-M_2 &amp;lt; \dot{q_2} &amp;lt; M_2&#xA;\end{cases}&#xA;\end{array},&#xA;$$&lt;/span&gt;&#xA;where &lt;span class=&quot;math-container&quot;&gt;$M_1$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$M_2$&lt;/span&gt; are the motors max speeds.&lt;/p&gt;&#xA;&lt;p&gt;The 2D case boils down to the maximization of a quadratic cost function subject to a hyperbolic constraint.&lt;/p&gt;&#xA;&lt;h3&gt;Concluding remarks&lt;/h3&gt;&#xA;&lt;p&gt;In the 2-steps procedure, I didn't mention that you would likely need to deal with kinematic singularities depending on the type of path you have in mind. This will certainly add up more difficulties on top of the process so that, I reckon, the fully-iterative routine detailed in the first place tends to be easier to implement, clearer to maintain, and definitely more scalable with respect to the number of DOF.&lt;/p&gt;&#xA;" OwnerUserId="6941" LastEditorUserId="6941" LastEditDate="2021-04-20T05:49:33.787" LastActivityDate="2021-04-20T05:49:33.787" CommentCount="5" ContentLicense="CC BY-SA 4.0" />
  <row Id="22053" PostTypeId="1" CreationDate="2021-04-19T02:55:06.227" Score="2" ViewCount="37" Body="&lt;p&gt;I am trying to build an occupancy grid map using odometry and 2D lidar data through graph optimization. I am not aware of any reliable loop closing methods using only the 2D laser scans. I have been reading about ICP for scan registration and am thinking that it may be what I need for loop closure detection.&lt;/p&gt;&#xA;&lt;p&gt;What are some common methods of loop closure detection given only the 2D laser scans?&lt;/p&gt;&#xA;" OwnerUserId="27315" LastActivityDate="2021-04-19T04:25:57.493" Title="How to detect loop closures in 2D laser SLAM?" Tags="&lt;slam&gt;&lt;mapping&gt;&lt;laser&gt;&lt;icp&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22054" PostTypeId="1" CreationDate="2021-04-19T03:27:11.500" Score="1" ViewCount="46" Body="&lt;p&gt;I see that in SLAM literatures, factor graph optimization is frequently used. While in Structure from Motion literatures, usually they use bundle adjustment. What's the difference between the two methods ?&lt;/p&gt;&#xA;&lt;p&gt;Furthermore, can we implement one method with libraries for the other ? E.g. implementing Bundle adjustment with g2o, or implementing factor graph optimization with ceres solver ?&lt;/p&gt;&#xA;&lt;p&gt;Thanks in advance!&lt;/p&gt;&#xA;" OwnerUserId="17902" LastActivityDate="2021-04-19T07:27:52.747" Title="What's the difference between factor graph optimization and bundle adjustment?" Tags="&lt;slam&gt;&lt;3d-reconstruction&gt;&lt;structure-from-motion&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22055" PostTypeId="2" ParentId="22054" CreationDate="2021-04-19T04:11:59.000" Score="1" Body="&lt;p&gt;The simplest explanation will be:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;In structure from motion, it estimates structure(xyz points), camera locations, camera intrinsic.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;In graph optimization, it only estimates camera locations. In the graph SLAM, the structure is just a by-product of a corrected trajectory or graph nodes.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;E.g. implementing Bundle adjustment with g2o -&amp;gt; You can do it by modifying g2o but simply there is no reason to do that. g2o is not designed to estimate the structure and camera intrinsic. It doesn't mean that you can't estimate these but BA and SLAM are fundamentally different. You will end up changing 99% of the existing g2o code.&lt;/p&gt;&#xA;&lt;p&gt;implementing factor graph optimization with ceres solver ? -&amp;gt; Ceres solver is an optimization library, not a bundle adjustment software although one of the ceres problem examples is bundle adjustmemt. Anyway, you can modify ceres bundle adjustment example to do graph optimization with a lot of modifications.&lt;/p&gt;&#xA;" OwnerUserId="19219" LastEditorUserId="19219" LastEditDate="2021-04-19T07:27:52.747" LastActivityDate="2021-04-19T07:27:52.747" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22056" PostTypeId="2" ParentId="22053" CreationDate="2021-04-19T04:25:57.493" Score="2" Body="&lt;p&gt;The most traditional method is to keep looking at the trajectory and see if your current location is close enough to the previously visited place. Once this happens run the ICP. If ICP converged normally, that is your loop closure.&lt;/p&gt;&#xA;&lt;p&gt;A bit more advanced method is doing a place recognition. Generate a keyframe every few meters and extract a feature descriptor from the keyframe. Whenever you create a new keyframe compare this descriptor to the previously created descriptor. If you find any similar descriptor, you are likely re visited the place. Run ICP and see if it is really the case.&lt;/p&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2021-04-19T04:25:57.493" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22058" PostTypeId="1" AcceptedAnswerId="22075" CreationDate="2021-04-19T15:55:54.397" Score="2" ViewCount="52" Body="&lt;p&gt;I try to understand jacobian for robot control. I want to precisely understand how to build that matrix.&#xA;Can someone advice me course which explain how to create that matrix on a simple sample?&lt;/p&gt;&#xA;&lt;p&gt;An other question about that matrix, I read that this matrix had to be process every step. Is it true?&lt;/p&gt;&#xA;" OwnerUserId="28462" LastActivityDate="2021-04-23T06:55:06.420" Title="Question about robot jacobian" Tags="&lt;jacobian&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22059" PostTypeId="1" CreationDate="2021-04-19T17:31:56.603" Score="2" ViewCount="46" Body="&lt;p&gt;How can I measure the amount of voltage I'm giving a servo motor? How can I give a servo motor the correct amount of power it needs to run at it's full potential? Say I had this motor:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;ANNIMOS 60KG Digital Servo 8.4V High Voltage Stainless Steel Gear Large Torque High Speed Waterproof Baja Servos - 180 Degrees&lt;/strong&gt;&#xA;(this is an example that I copied from amazon)&lt;/p&gt;&#xA;&lt;p&gt;What does the 60KG mean? I assume that 8.4V High Voltage is the amount of power it needs to run at full potential. Large torque means it can lift a lot of weight, but how much?&lt;/p&gt;&#xA;&lt;p&gt;I've tried to find answers to these questions, I've watched a lot of YouTube videos and read a lot of tutorials, but I found nothing about my questions. Thank you for taking the time to read  through this!&lt;/p&gt;&#xA;" OwnerUserId="28463" LastEditorUserId="28463" LastEditDate="2021-04-19T19:31:17.530" LastActivityDate="2021-05-20T16:04:55.470" Title="I've got a few servo motor questions" Tags="&lt;servomotor&gt;&lt;otherservos&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22060" PostTypeId="1" CreationDate="2021-04-19T21:22:03.937" Score="0" ViewCount="33" Body="&lt;p&gt;Can you please point me to a data set that can be used to validate monocular visual SLAM?&lt;/p&gt;&#xA;&lt;p&gt;My vision for what this data set looks like is a series of frames, with ground truth pose, ground truth pixel measurements of features, and ground truth positions of all features. I imagine that this would be a synthetic dataset generated in a simulator.&lt;/p&gt;&#xA;&lt;p&gt;If you think this exists a link would be appreciated, I couldn't turn anything up myself.&lt;/p&gt;&#xA;&lt;p&gt;Cheers and thanks!&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt; I am not looking for something like kitti or the tum data sets or some RGB-D datasets, I want ground truth poses, feature measurements, and feature positions.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt; I only need this to validate the optimization - not all the other parts of the classic VSLAM pipeline fyi&lt;/p&gt;&#xA;" OwnerUserId="27205" LastEditorUserId="27205" LastEditDate="2021-04-19T21:29:54.000" LastActivityDate="2021-05-20T01:05:05.463" Title="Ground Truth Visual SLAM Data Set" Tags="&lt;slam&gt;&lt;monocular&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22062" PostTypeId="2" ParentId="22060" CreationDate="2021-04-20T00:23:18.353" Score="0" Body="&lt;p&gt;I have a github project that extracts the visual inertial simulator from OpenVins to its own mini project.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://github.com/Edwinem/VI-Simulator&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/Edwinem/VI-Simulator&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I think it fulfills your needs. Gives you access to the ground truth poses, features,feature positions, ... .&lt;/p&gt;&#xA;&lt;p&gt;If you ignore the inertial data portion then it is also not too hard to create your own. Just generate a random pointcloud and use some of the multi view geometry equations to project them to a random camera pose.&lt;/p&gt;&#xA;" OwnerUserId="15265" LastEditorUserId="15265" LastEditDate="2021-04-20T00:41:15.663" LastActivityDate="2021-04-20T00:41:15.663" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22063" PostTypeId="1" AcceptedAnswerId="22071" CreationDate="2021-04-20T11:34:15.213" Score="0" ViewCount="80" Body="&lt;p&gt;I asked on stackoverflow for the DH-Parameter for my robotic arm (moveo bcn3d).&#xA;I also copied the arduino code of Skyentific (YouTuber). Modified it to match my settings but i still does not work. Can someone please help me??? I am getting depressed if this keeps going like that.&lt;/p&gt;&#xA;&lt;p&gt;In the home position, all joints have angle 0.&#xA;If I tell the forward kinematic that I want the 3rd joint and the 5th joint rotated 90 degrees, the values should be: (224, 0, 280) {x, y, z} should come out + some euler angles (can be ignored for now).&#xA;But I don't understand why these values come out, because the r and d values of the DH matrix are correct(&lt;a href=&quot;https://stackoverflow.com/questions/67159164/denavit-hartenberg-6dof-moveo-inverse-kinematic-robot-arm?noredirect=1#comment118726837_67159164&quot;&gt;https://stackoverflow.com/questions/67159164/denavit-hartenberg-6dof-moveo-inverse-kinematic-robot-arm?noredirect=1#comment118726837_67159164&lt;/a&gt;)&#xA;Output of the Arduino:\&lt;/p&gt;&#xA;&lt;p&gt;inverse:&#xA;0.00&#xA;0.00&#xA;-0.00&#xA;-180.00&#xA;180.00&#xA;-180.00&lt;/p&gt;&#xA;&lt;p&gt;forward:&#xA;-224.00&#xA;0.00&#xA;280.00&#xA;45.00&#xA;180.00&#xA;45.00&lt;/p&gt;&#xA;&lt;p&gt;In this example you can see that the inverse kinematic calculates three times 180 although the arm is already in the home position.&#xA;Also you can see that the forward kinematics calculates a negative number for the x axis and strange rotations for joints 4, 5 and 6.&lt;/p&gt;&#xA;&lt;p&gt;Translated with &lt;a href=&quot;http://www.DeepL.com/Translator&quot; rel=&quot;nofollow noreferrer&quot;&gt;www.DeepL.com/Translator&lt;/a&gt; (free version)&lt;/p&gt;&#xA;&lt;p&gt;The DH-Parameters: &lt;a href=&quot;https://stackoverflow.com/questions/67159164/denavit-hartenberg-6dof-moveo-inverse-kinematic-robot-arm?noredirect=1#comment118726837_67159164&quot;&gt;https://stackoverflow.com/questions/67159164/denavit-hartenberg-6dof-moveo-inverse-kinematic-robot-arm?noredirect=1#comment118726837_67159164&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;His github:&lt;a href=&quot;https://github.com/SkyentificGit/SmallRobotArm&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/SkyentificGit/SmallRobotArm&lt;/a&gt; &lt;br /&gt;&#xA;The YT-video:&lt;a href=&quot;https://youtu.be/Sgsn2CM3bjY&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://youtu.be/Sgsn2CM3bjY&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;You can ignore the Pins and just focus on the inverse and forward kinematics&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;/*&#xA;Simple script to move my tiny 6dof robotic arm&#xA;*/&#xA;#include &amp;lt;math.h&amp;gt;&#xA;&#xA;#define PI 3.1415926535897932384626433832795&#xA;&#xA;//driver for the axis 1&#xA;#define PUL1_PIN 39&#xA;#define DIR1_PIN 37&#xA;//driver for the axis 2&#xA;#define PUL2_PIN 43&#xA;#define DIR2_PIN 41&#xA;//driver for the axis 3&#xA;#define PUL3_PIN 47&#xA;#define DIR3_PIN 45&#xA;//driver for the axis 4&#xA;#define PUL4_PIN 46&#xA;#define DIR4_PIN 48&#xA;//driver for the axis 5&#xA;#define PUL5_PIN A6&#xA;#define DIR5_PIN A7&#xA;//driver for the axis 6&#xA;#define PUL6_PIN A0&#xA;#define DIR6_PIN A1&#xA;&#xA;//enable pin for the axis 3, 2 and 1&#xA;#define EN321_PIN 32&#xA;#define EN4_PIN A8&#xA;#define EN5_PIN A2&#xA;#define EN6_PIN 38&#xA;&#xA;double curPos1 = 0.0;&#xA;double curPos2 = 0.0;&#xA;double curPos3 = 0.0;&#xA;double curPos4 = 0.0;&#xA;double curPos5 = 0.0;&#xA;double curPos6 = 0.0;&#xA;&#xA;boolean PULstat1 = 0;&#xA;boolean PULstat2 = 0;&#xA;boolean PULstat3 = 0;&#xA;boolean PULstat4 = 0;&#xA;boolean PULstat5 = 0;&#xA;boolean PULstat6 = 0;&#xA;&#xA;//robot geometry&#xA;const double dl1 = 360.0/200.0/32.0;&#xA;const double dl2 = 360.0/200.0/32.0;&#xA;const double dl3 = 360.0/200.0/32.0;&#xA;const double dl4 = 360.0/200.0/32.0;&#xA;const double dl5 = 360.0/200.0/32.0;&#xA;const double dl6 = 360.0/200.0/32.0;&#xA;const double r1 = 0.0;&#xA;const double r2 = 223.0;&#xA;const double r3 = 0.0;&#xA;const double d1 = 232.0;&#xA;const double d3 = 0.0;&#xA;const double d4 = 224.0;&#xA;const double d6 = 175.0;&#xA;&#xA;void setup()&#xA;{&#xA;  Serial.begin(9600);&#xA;  pinMode(PUL1_PIN, OUTPUT);&#xA;  pinMode(DIR1_PIN, OUTPUT);&#xA;  pinMode(PUL2_PIN, OUTPUT);&#xA;  pinMode(DIR2_PIN, OUTPUT);&#xA;  pinMode(PUL3_PIN, OUTPUT);&#xA;  pinMode(DIR3_PIN, OUTPUT);&#xA;  pinMode(PUL4_PIN, OUTPUT);&#xA;  pinMode(DIR4_PIN, OUTPUT);&#xA;  pinMode(PUL5_PIN, OUTPUT);&#xA;  pinMode(DIR5_PIN, OUTPUT);&#xA;  pinMode(PUL6_PIN, OUTPUT);&#xA;  pinMode(DIR6_PIN, OUTPUT);&#xA;&#xA;  pinMode(EN321_PIN, OUTPUT);&#xA;  pinMode(EN4_PIN, OUTPUT);&#xA;  pinMode(EN5_PIN, OUTPUT);&#xA;  pinMode(EN6_PIN, OUTPUT);&#xA;  &#xA;  digitalWrite(PUL1_PIN, LOW); // gear ratio = 96/20 = 4.8&#xA;  digitalWrite(DIR1_PIN, LOW); //LOW = negative direction&#xA;  &#xA;  digitalWrite(PUL2_PIN, LOW); // gear ratio = 4&#xA;  digitalWrite(DIR2_PIN, LOW); //LOW = positive direction&#xA;  &#xA;  digitalWrite(PUL3_PIN, LOW); // gear ratio = 5&#xA;  digitalWrite(DIR3_PIN, LOW); //LOW = negative direction&#xA;  &#xA;  digitalWrite(PUL4_PIN, LOW); // gear ratio = 56/20 = 2.8&#xA;  digitalWrite(DIR4_PIN, LOW); //LOW = positive direction&#xA;  &#xA;  digitalWrite(PUL5_PIN, LOW); // gear ratio = 42/20 = 2.1&#xA;  digitalWrite(DIR5_PIN, LOW); //LOW = positive direction&#xA;  &#xA;  digitalWrite(PUL6_PIN, LOW); // gear ratio = 1&#xA;  digitalWrite(DIR6_PIN, LOW); //LOW = positive direction&#xA;&#xA;  // all joints disabled!&#xA;  digitalWrite(EN32A1_PIN, HIGH);&#xA;  digitalWrite(EN4_PIN, HIGH);&#xA;  digitalWrite(EN5_PIN, HIGH);&#xA;  digitalWrite(EN6_PIN, HIGH); &#xA;}&#xA;&#xA;void loop()&#xA;{&#xA;  // enable all joints&#xA;  delay(5000);&#xA;  Serial.println(&amp;quot;gogo&amp;quot;);&#xA;  digitalWrite(EN321_PIN, LOW);&#xA;  digitalWrite(EN4_PIN, LOW);&#xA;  digitalWrite(EN5_PIN, LOW);&#xA;  digitalWrite(EN6_PIN, LOW);&#xA;  delay(1000);&#xA;  //--------------------------------------------------------GoGoGo-------------------&#xA;  curPos1=0.0;&#xA;  curPos2=0.0;&#xA;  curPos3=0.0;&#xA;  curPos4=0.0;&#xA;  curPos5=0.0;&#xA;  curPos6=0.0;&#xA;&#xA;  //float Xhome[6]={0.0, 0.0, 854.0, 0.0, 0.0, 0.0};&#xA;  float Xhome[6]={224.0, 0.0, 280.0, 0.0, 180.0, 0.0};&#xA;  float Yhome[6]={0.0, 0.0, -90.0, 0.0, -90.0, 0.0};&#xA;  &#xA;  float X1[6]={164.5, 0.0, 141.0, 90.0, 180.0, -90.0};&#xA;  float X11[6]={164.5+14.7, 35.4, 141.0, 90.0, 180.0, -90.0};&#xA;  float X12[6]={164.5+50.0, 50.0, 141.0, 90.0, 180.0, -90.0};&#xA;  float X13[6]={164.5+85.3, 35.4, 141.0, 90.0, 180.0, -90.0};&#xA;  float X14[6]={164.5+100.0, 0.0, 141.0, 90.0, 180.0, -90.0};&#xA;  float X15[6]={164.5+85.3, -35.4, 141.0, 90.0, 180.0, -90.0};&#xA;  float X16[6]={164.5+50.0, -50.0, 141.0, 90.0, 180.0, -90.0};&#xA;  float X17[6]={164.5+14.7, -35.4, 141.0, 90.0, 180.0, -90.0};&#xA;&#xA;  float X18[6]={164.5+50.0, 0.0, 141.0, 90.0, 180.0, -90.0};&#xA;  &#xA;  float X2[6]={264.5, 0.0, 141.0, 0.0, 90.0, 0.0};&#xA;  float X3[6]={164.5, 100.0, 141.0, 90.0, 90.0, 0.0};&#xA;  float X4[6]={164.5, -100.0, 141.0, 90.0, -90.0, 0.0};&#xA;  &#xA;  float Jhome[6], J1[6], J11[6], J12[6], J13[6], J14[6], J15[6], J16[6], J17[6], J18[6], J2[6], J3[6], J4[6];&#xA;  float Fhome[6];&#xA;  InverseK(Xhome, Jhome);&#xA;  ForwardK(Yhome, Fhome);&#xA;  Serial.println(&amp;quot;inverse:&amp;quot;);&#xA;  Serial.println(Jhome[0]);&#xA;  Serial.println(Jhome[1]);&#xA;  Serial.println(Jhome[2]);&#xA;  Serial.println(Jhome[3]);&#xA;  Serial.println(Jhome[4]);&#xA;  Serial.println(Jhome[5]);&#xA;  Serial.println(&amp;quot;------&amp;quot;);&#xA;  Serial.println(&amp;quot;forward:&amp;quot;);&#xA;  Serial.println(Fhome[0]);&#xA;  Serial.println(Fhome[1]);&#xA;  Serial.println(Fhome[2]);&#xA;  Serial.println(Fhome[3]);&#xA;  Serial.println(Fhome[4]);&#xA;  Serial.println(Fhome[5]);&#xA;  Serial.println(&amp;quot;------&amp;quot;);&#xA;  InverseK(X1, J1);&#xA;  InverseK(X11, J11);&#xA;  InverseK(X12, J12);&#xA;  InverseK(X13, J13);&#xA;  InverseK(X14, J14);&#xA;  InverseK(X15, J15);&#xA;  InverseK(X16, J16);&#xA;  InverseK(X17, J17);&#xA;  InverseK(X18, J18);&#xA;  InverseK(X2, J2);&#xA;  InverseK(X3, J3);&#xA;  InverseK(X4, J4);&#xA;&#xA;  goStrightLine(Jhome, J1, 0.25e-4, 0.75e-10, 0.0, 0.0);&#xA;&#xA;  float velG=0.25e-4;&#xA;  goStrightLine(J1, J11, 0.25e-4, 0.75e-10, 0.0, 0.5*velG);&#xA;  goStrightLine(J11, J12, 0.25e-4, 0.75e-10, 0.5*velG, 0.5*velG);&#xA;  goStrightLine(J12, J13, 0.25e-4, 0.75e-10, 0.5*velG, 0.5*velG);&#xA;  goStrightLine(J13, J14, 0.25e-4, 0.75e-10, 0.5*velG, 0.5*velG);&#xA;  goStrightLine(J14, J15, 0.25e-4, 0.75e-10, 0.5*velG, 0.5*velG);&#xA;  goStrightLine(J15, J16, 0.25e-4, 0.75e-10, 0.5*velG, 0.5*velG);&#xA;  goStrightLine(J16, J17, 0.25e-4, 0.75e-10, 0.5*velG, 0.5*velG);&#xA;  goStrightLine(J17, J1, 0.25e-4, 0.75e-10, 0.5*velG, 0.0);&#xA;&#xA;  goStrightLine(J1, J18, 0.25e-4, 0.75e-10, 0.0, 0.8*velG);&#xA;  goStrightLine(J18, J14, 0.25e-4, 0.75e-10, 0.8*velG, 0.0);&#xA;  goStrightLine(J14, J1, 0.25e-4, 0.75e-10, 0.0, 0.0);&#xA;  &#xA;  goStrightLine(J1, J2, 0.25e-4, 0.75e-10, 0.0, 0.0);&#xA;  goStrightLine(J2, J1, 0.25e-4, 0.75e-10, 0.0, 0.0);&#xA;&#xA;  goStrightLine(J1, J3, 0.25e-4, 0.75e-10, 0.0, 0.0);&#xA;  goStrightLine(J3, J1, 0.25e-4, 0.75e-10, 0.0, 0.0);&#xA;&#xA;  goStrightLine(J1, J4, 0.25e-4, 0.75e-10, 0.0, 0.0);&#xA;  goStrightLine(J4, J1, 0.25e-4, 0.75e-10, 0.0, 0.0);&#xA;  &#xA;  goStrightLine(J1, Jhome, 0.25e-4, 0.75e-10, 0.0, 0.0);&#xA;  //--------------------------------------------------------GoGoGoBack---------------&#xA;}&#xA;&#xA;&#xA;void goStrightLine(float* xfi, float* xff, float vel0, float acc0, float velini, float velfin){&#xA;  //&#xA;  float lmax = max(abs(xff[0]-xfi[0]),abs(xff[1]-xfi[1]));&#xA;  lmax = max(lmax,abs(xff[2]-xfi[2]));&#xA;  lmax = max(lmax,abs(xff[3]-xfi[3]));&#xA;  lmax = max(lmax,abs(xff[4]-xfi[4]));&#xA;  lmax = max(lmax,abs(xff[5]-xfi[5]));&#xA;  unsigned long preMil = micros();&#xA;  double l = 0.0;&#xA;  vel0 = min(vel0,sqrt(lmax*acc0+0.5*velini*velini+0.5*velfin*velfin));&#xA;  unsigned long curMil = micros();&#xA;  unsigned long t = 0;&#xA;  double tap = vel0/acc0-velini/acc0;&#xA;  double lap = velini*tap+acc0*tap*tap/2.0;&#xA;  double lcsp = lmax-(vel0*vel0/2.0/acc0-velfin*velfin/2.0/acc0);&#xA;  double tcsp = (lcsp-lap)/vel0+tap;&#xA;  double tfin = vel0/acc0-velfin/acc0+tcsp;&#xA;  while (curMil-preMil&amp;lt;=tfin){&#xA;    t = curMil-preMil;&#xA;    //acceleration phase&#xA;    if (t&amp;lt;=tap) {&#xA;      l = velini*t+acc0*t*t/2.0;&#xA;    }&#xA;    //contant maximum speed phase&#xA;    if (t&amp;gt;tap &amp;amp;&amp;amp; t&amp;lt;=tcsp) {&#xA;      l = lap+vel0*(t-tap);&#xA;    }&#xA;    //deceleration phase&#xA;    if (t&amp;gt;tcsp) {&#xA;      l = lcsp+vel0*(t-tcsp)-acc0*(t-tcsp)*(t-tcsp)/2.0;&#xA;    }&#xA;  &#xA;    //trajectory x and y as a function of l&#xA;    float Xx[6];&#xA;    Xx[0]=xfi[0]+(xff[0]-xfi[0])/lmax*l;&#xA;    Xx[1]=xfi[1]+(xff[1]-xfi[1])/lmax*l;&#xA;    Xx[2]=xfi[2]+(xff[2]-xfi[2])/lmax*l;&#xA;    Xx[3]=xfi[3]+(xff[3]-xfi[3])/lmax*l;&#xA;    Xx[4]=xfi[4]+(xff[4]-xfi[4])/lmax*l;&#xA;    Xx[5]=xfi[5]+(xff[5]-xfi[5])/lmax*l;&#xA;    &#xA;    goTrajectory(Xx);&#xA;    curMil = micros();&#xA;  }&#xA;}&#xA;&#xA;void goTrajectory(float* Jf){&#xA;  &#xA;  //execution&#xA;  int delF=2;&#xA;  // joint #1&#xA;  if (Jf[0]-curPos1&amp;gt;0.0) { // positive direction of rotation&#xA;    digitalWrite(DIR1_PIN, HIGH);&#xA;    while (Jf[0]-curPos1&amp;gt;dl1/2.0) {&#xA;      if (PULstat1 == 0) {&#xA;        digitalWrite(PUL1_PIN, HIGH);&#xA;        PULstat1 = 1;&#xA;      } else {&#xA;        digitalWrite(PUL1_PIN, LOW);&#xA;        PULstat1 = 0;&#xA;      }&#xA;      //curPos1 = Jf[0];&#xA;      curPos1 = curPos1 + dl1/2.0;&#xA;      if (Jf[0]-curPos1&amp;gt;dl1/2.0) {&#xA;        delayMicroseconds(delF);&#xA;      }&#xA;    }&#xA;  } else {&#xA;    digitalWrite(DIR1_PIN, LOW);&#xA;    while (-Jf[0]+curPos1&amp;gt;dl1/2.0) {&#xA;      if (PULstat1 == 0) {&#xA;        digitalWrite(PUL1_PIN, HIGH);&#xA;        PULstat1 = 1;&#xA;      } else {&#xA;        digitalWrite(PUL1_PIN, LOW);&#xA;        PULstat1 = 0;&#xA;      }&#xA;      //curPos1 = Jf[0];&#xA;      curPos1 = curPos1 - dl1/2.0;&#xA;      if (-Jf[0]+curPos1&amp;gt;dl1/2.0) {&#xA;        delayMicroseconds(delF);&#xA;      }&#xA;    }&#xA;  }&#xA;  // joint #2&#xA;  if (Jf[1]-curPos2&amp;gt;0.0) { // positive direction of rotation&#xA;    digitalWrite(DIR2_PIN, HIGH);&#xA;    while (Jf[1]-curPos2&amp;gt;dl2/2.0) {&#xA;      if (PULstat2 == 0) {&#xA;        digitalWrite(PUL2_PIN, HIGH);&#xA;        PULstat2 = 1;&#xA;      } else {&#xA;        digitalWrite(PUL2_PIN, LOW);&#xA;        PULstat2 = 0;&#xA;      }&#xA;      //curPos2 = Jf[1];&#xA;      curPos2 = curPos2 + dl2/2.0;&#xA;      if (Jf[1]-curPos2&amp;gt;dl2/2.0) {&#xA;        delayMicroseconds(delF);&#xA;      }&#xA;    }&#xA;  } else {&#xA;    digitalWrite(DIR2_PIN, LOW);&#xA;    while (-Jf[1]+curPos2&amp;gt;dl2/2.0) {&#xA;      if (PULstat2 == 0) {&#xA;        digitalWrite(PUL2_PIN, HIGH);&#xA;        PULstat2 = 1;&#xA;      } else {&#xA;        digitalWrite(PUL2_PIN, LOW);&#xA;        PULstat2 = 0;&#xA;      }&#xA;      //curPos2 = Jf[1];&#xA;      curPos2 = curPos2 - dl2/2.0;&#xA;      if (-Jf[1]+curPos2&amp;gt;dl2/2.0) {&#xA;        delayMicroseconds(delF);&#xA;      }&#xA;    }&#xA;  }&#xA;  // joint #3&#xA;  if (Jf[2]-curPos3&amp;gt;0.0) { // positive direction of rotation&#xA;    digitalWrite(DIR3_PIN, LOW);&#xA;    while (Jf[2]-curPos3&amp;gt;dl3/2.0) {&#xA;      if (PULstat3 == 0) {&#xA;        digitalWrite(PUL3_PIN, HIGH);&#xA;        PULstat3 = 1;&#xA;      } else {&#xA;        digitalWrite(PUL3_PIN, LOW);&#xA;        PULstat3 = 0;&#xA;      }&#xA;      //curPos3 = Jf[2];&#xA;      curPos3 = curPos3 + dl3/2.0;&#xA;      if (Jf[2]-curPos3&amp;gt;dl3/2.0) {&#xA;        delayMicroseconds(delF);&#xA;      }&#xA;    }&#xA;  } else {&#xA;    digitalWrite(DIR3_PIN, HIGH);&#xA;    while (-Jf[2]+curPos3&amp;gt;dl3/2.0) {&#xA;      if (PULstat3 == 0) {&#xA;        digitalWrite(PUL3_PIN, HIGH);&#xA;        PULstat3 = 1;&#xA;      } else {&#xA;        digitalWrite(PUL3_PIN, LOW);&#xA;        PULstat3 = 0;&#xA;      }&#xA;      //curPos3 = Jf[2];&#xA;      curPos3 = curPos3 - dl3/2.0;&#xA;      if (-Jf[2]+curPos3&amp;gt;dl3/2.0) {&#xA;        delayMicroseconds(delF);&#xA;      }&#xA;    }&#xA;  }&#xA;  // joint #4&#xA;  if (Jf[3]-curPos4&amp;gt;0.0) { // positive direction of rotation&#xA;    digitalWrite(DIR4_PIN, HIGH);&#xA;    while (Jf[3]-curPos4&amp;gt;dl4/2.0) {&#xA;      if (PULstat4 == 0) {&#xA;        digitalWrite(PUL4_PIN, HIGH);&#xA;        PULstat4 = 1;&#xA;      } else {&#xA;        digitalWrite(PUL4_PIN, LOW);&#xA;        PULstat4 = 0;&#xA;      }&#xA;      //curPos4 = Jf[3];&#xA;      curPos4 = curPos4 + dl4/2.0;&#xA;      if (Jf[3]-curPos4&amp;gt;dl4/2.0) {&#xA;        delayMicroseconds(delF);&#xA;      }&#xA;    }&#xA;  } else {&#xA;    digitalWrite(DIR4_PIN, LOW);&#xA;    while (-Jf[3]+curPos4&amp;gt;dl4/2.0) {&#xA;      if (PULstat4 == 0) {&#xA;        digitalWrite(PUL4_PIN, HIGH);&#xA;        PULstat4 = 1;&#xA;      } else {&#xA;        digitalWrite(PUL4_PIN, LOW);&#xA;        PULstat4 = 0;&#xA;      }&#xA;      //curPos4 = Jf[3];&#xA;      curPos4 = curPos4 - dl4/2.0;&#xA;      if (-Jf[3]+curPos4&amp;gt;dl4/2.0) {&#xA;        delayMicroseconds(delF);&#xA;      }&#xA;    }&#xA;  }&#xA;  // joint #5&#xA;  if (Jf[4]-curPos5&amp;gt;0.0) { // positive direction of rotation&#xA;    digitalWrite(DIR5_PIN, HIGH);&#xA;    while (Jf[4]-curPos5&amp;gt;dl5/2.0) {&#xA;      if (PULstat5 == 0) {&#xA;        digitalWrite(PUL5_PIN, HIGH);&#xA;        PULstat5 = 1;&#xA;      } else {&#xA;        digitalWrite(PUL5_PIN, LOW);&#xA;        PULstat5 = 0;&#xA;      }&#xA;      //curPos5 = Jf[4];&#xA;      curPos5 = curPos5 + dl5/2.0;&#xA;      if (Jf[4]-curPos5&amp;gt;dl5/2.0) {&#xA;        delayMicroseconds(delF);&#xA;      }&#xA;    }&#xA;  } else {&#xA;    digitalWrite(DIR5_PIN, LOW);&#xA;    while (-Jf[4]+curPos5&amp;gt;dl5/2.0) {&#xA;      if (PULstat5 == 0) {&#xA;        digitalWrite(PUL5_PIN, HIGH);&#xA;        PULstat5 = 1;&#xA;      } else {&#xA;        digitalWrite(PUL5_PIN, LOW);&#xA;        PULstat5 = 0;&#xA;      }&#xA;      //curPos5 = Jf[4];&#xA;      curPos5 = curPos5 - dl5/2.0;&#xA;      if (-Jf[4]+curPos5&amp;gt;dl5/2.0) {&#xA;        delayMicroseconds(delF);&#xA;      }&#xA;    }&#xA;  }&#xA;  // joint #6&#xA;  if (Jf[5]-curPos6&amp;gt;0.0) { // positive direction of rotation&#xA;    digitalWrite(DIR6_PIN, HIGH);&#xA;    while (Jf[5]-curPos6&amp;gt;dl6/2.0) {&#xA;      if (PULstat6 == 0) {&#xA;        digitalWrite(PUL6_PIN, HIGH);&#xA;        PULstat6 = 1;&#xA;      } else {&#xA;        digitalWrite(PUL6_PIN, LOW);&#xA;        PULstat6 = 0;&#xA;      }&#xA;      //curPos6 = Jf[5];&#xA;      curPos6 = curPos6 + dl6/2.0;&#xA;      if (Jf[5]-curPos6&amp;gt;dl6/2.0) {&#xA;        delayMicroseconds(delF);&#xA;      }&#xA;    }&#xA;  } else {&#xA;    digitalWrite(DIR6_PIN, LOW);&#xA;    while (-Jf[5]+curPos6&amp;gt;dl6/2.0) {&#xA;      if (PULstat6 == 0) {&#xA;        digitalWrite(PUL6_PIN, HIGH);&#xA;        PULstat6 = 1;&#xA;      } else {&#xA;        digitalWrite(PUL6_PIN, LOW);&#xA;        PULstat6 = 0;&#xA;      }&#xA;      //curPos6 = Jf[5];&#xA;      curPos6 = curPos6 - dl6/2.0;&#xA;      if (-Jf[5]+curPos6&amp;gt;dl6/2.0) {&#xA;        delayMicroseconds(delF);&#xA;      }&#xA;    }&#xA;  }&#xA;}&#xA;&#xA;void InverseK(float* Xik, float* Jik) {&#xA;  // inverse kinematics&#xA;  // input: Xik - pos value for the calculation of the inverse kinematics&#xA;  // output: Jfk - joints value for the calculation of the inversed kinematics&#xA;  &#xA;  // from deg to rad&#xA;  // Xik(4:6)=Xik(4:6)*pi/180;&#xA;  Xik[3]=Xik[3]*PI/180.0;&#xA;  Xik[4]=Xik[4]*PI/180.0;&#xA;  Xik[5]=Xik[5]*PI/180.0;&#xA;  &#xA;  // Denavit-Hartenberg matrix&#xA;  float theta[6]={0.0, 90.0, -90.0, 0.0, 0.0, 0.0}; // theta=[0; -90+0; 0; 0; 0; 0];&#xA;  float alfa[6]={90.0, 0.0, -90.0, 90.0, -90.0, 0.0}; // alfa=[-90; 0; -90; 90; -90; 0];&#xA;  float r[6]={r1, r2, r3, 0.0, 0.0, 0.0}; // r=[47; 110; 26; 0; 0; 0];&#xA;  float d[6]={d1, 0.0, d3, d4, 0.0, d6}; // d=[133; 0; 7; 117.5; 0; 28];&#xA;  // from deg to rad&#xA;  MatrixScale(theta, 6, 1, PI/180.0); // theta=theta*pi/180;&#xA;  MatrixScale(alfa, 6, 1, PI/180.0); // alfa=alfa*pi/180;&#xA;  &#xA;  // work frame&#xA;  float Xwf[6]={0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; // Xwf=[0; 0; 0; 0; 0; 0];&#xA;  &#xA;  // tool frame&#xA;  float Xtf[6]={0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; // Xtf=[0; 0; 0; 0; 0; 0];&#xA;  &#xA;  // work frame transformation matrix&#xA;  float Twf[16];&#xA;  pos2tran(Xwf, Twf); // Twf=pos2tran(Xwf);&#xA;  &#xA;  // tool frame transformation matrix&#xA;  float Ttf[16];&#xA;  pos2tran(Xtf, Ttf); // Ttf=pos2tran(Xtf);&#xA;  &#xA;  // total transformation matrix&#xA;  float Twt[16];&#xA;  pos2tran(Xik, Twt); // Twt=pos2tran(Xik);&#xA;  &#xA;  // find T06&#xA;  float inTwf[16], inTtf[16], Tw6[16], T06[16];&#xA;  invtran(Twf, inTwf); // inTwf=invtran(Twf);&#xA;  invtran(Ttf, inTtf); // inTtf=invtran(Ttf);&#xA;  MatrixMultiply(Twt, inTtf, 4, 4, 4, Tw6); // Tw6=Twt*inTtf;&#xA;  MatrixMultiply(inTwf, Tw6, 4, 4, 4, T06); // T06=inTwf*Tw6;&#xA;  &#xA;  // positon of the spherical wrist&#xA;  float Xsw[3];&#xA;  // Xsw=T06(1:3,4)-d(6)*T06(1:3,3);&#xA;  Xsw[0]=T06[0*4 + 3]-d[5]*T06[0*4 + 2];&#xA;  Xsw[1]=T06[1*4 + 3]-d[5]*T06[1*4 + 2];&#xA;  Xsw[2]=T06[2*4 + 3]-d[5]*T06[2*4 + 2];&#xA;  &#xA;  // joints variable&#xA;  // Jik=zeros(6,1);&#xA;  // first joint&#xA;  Jik[0]=atan2(Xsw[1],Xsw[0])-atan2(d[2],sqrt(Xsw[0]*Xsw[0]+Xsw[1]*Xsw[1]-d[2]*d[2])); // Jik(1)=atan2(Xsw(2),Xsw(1))-atan2(d(3),sqrt(Xsw(1)^2+Xsw(2)^2-d(3)^2));&#xA;  // second joint&#xA;  Jik[1]=PI/2.0&#xA;  -acos((r[1]*r[1]+(Xsw[2]-d[0])*(Xsw[2]-d[0])+(sqrt(Xsw[0]*Xsw[0]+Xsw[1]*Xsw[1]-d[2]*d[2])-r[0])*(sqrt(Xsw[0]*Xsw[0]+Xsw[1]*Xsw[1]-d[2]*d[2])-r[0])-(r[2]*r[2]+d[3]*d[3]))/(2.0*r[1]*sqrt((Xsw[2]-d[0])*(Xsw[2]-d[0])+(sqrt(Xsw[0]*Xsw[0]+Xsw[1]*Xsw[1]-d[2]*d[2])-r[0])*(sqrt(Xsw[0]*Xsw[0]+Xsw[1]*Xsw[1]-d[2]*d[2])-r[0]))))&#xA;  -atan((Xsw[2]-d[0])/(sqrt(Xsw[0]*Xsw[0]+Xsw[1]*Xsw[1]-d[2]*d[2])-r[0])); // Jik(2)=pi/2-acos((r(2)^2+(Xsw(3)-d(1))^2+(sqrt(Xsw(1)^2+Xsw(2)^2-d(3)^2)-r(1))^2-(r(3)^2+d(4)^2))/(2*r(2)*sqrt((Xsw(3)-d(1))^2+(sqrt(Xsw(1)^2+Xsw(2)^2-d(3)^2)-r(1))^2)))-atan((Xsw(3)-d(1))/(sqrt(Xsw(1)^2+Xsw(2)^2-d(3)^2)-r(1)));&#xA;  // third joint&#xA;  Jik[2]=PI&#xA;  -acos((r[1]*r[1]+r[2]*r[2]+d[3]*d[3]-(Xsw[2]-d[0])*(Xsw[2]-d[0])-(sqrt(Xsw[0]*Xsw[0]+Xsw[1]*Xsw[1]-d[2]*d[2])-r[0])*(sqrt(Xsw[0]*Xsw[0]+Xsw[1]*Xsw[1]-d[2]*d[2])-r[0]))/(2*r[1]*sqrt(r[2]*r[2]+d[3]*d[3])))&#xA;  -atan(d[3]/r[2]); // Jik(3)=pi-acos((r(2)^2+r(3)^2+d(4)^2-(Xsw(3)-d(1))^2-(sqrt(Xsw(1)^2+Xsw(2)^2-d(3)^2)-r(1))^2)/(2*r(2)*sqrt(r(3)^2+d(4)^2)))-atan(d(4)/r(3));&#xA;  // last three joints&#xA;  float T01[16], T12[16], T23[16], T02[16], T03[16], inT03[16], T36[16];&#xA;  DH1line(theta[0]+Jik[0], alfa[0], r[0], d[0], T01); // T01=DH1line(theta(1)+Jik(1),alfa(1),r(1),d(1));&#xA;  DH1line(theta[1]+Jik[1], alfa[1], r[1], d[1], T12); // T12=DH1line(theta(2)+Jik(2),alfa(2),r(2),d(2));&#xA;  DH1line(theta[2]+Jik[2], alfa[2], r[2], d[2], T23); // T23=DH1line(theta(3)+Jik(3),alfa(3),r(3),d(3));&#xA;  MatrixMultiply(T01, T12, 4, 4, 4, T02); // T02=T01*T12;&#xA;  MatrixMultiply(T02, T23, 4, 4, 4, T03); // T03=T02*T23;&#xA;  invtran(T03, inT03); // inT03=invtran(T03);&#xA;  MatrixMultiply(inT03, T06, 4, 4, 4, T36); // T36=inT03*T06;&#xA;  // forth joint&#xA;  Jik[3]=atan2(-T36[1*4+2], -T36[0*4+2]); // Jik(4)=atan2(-T36(2,3),-T36(1,3));&#xA;  // fifth joint&#xA;  Jik[4]=atan2(sqrt(T36[0*4+2]*T36[0*4+2]+T36[1*4+2]*T36[1*4+2]), T36[2*4+2]); // Jik(5)=atan2(sqrt(T36(1,3)^2+T36(2,3)^2),T36(3,3));&#xA;  // sixth joints&#xA;  Jik[5]=atan2(-T36[2*4+1], T36[2*4+0]); // Jik(6)=atan2(-T36(3,2),T36(3,1));&#xA;  // rad to deg&#xA;  MatrixScale(Jik, 6, 1, 180.0/PI); // Jik=Jik/pi*180;&#xA;}&#xA;&#xA;void ForwardK(float* Jfk, float* Xfk)&#xA;{&#xA;  // forward kinematics&#xA;  // input: Jfk - joints value for the calculation of the forward kinematics&#xA;  // output: Xfk - pos value for the calculation of the forward kinematics&#xA;  &#xA;  // Denavit-Hartenberg matrix&#xA;  float theTemp[6]={0.0, 90.0, -90.0, 0.0, 0.0, 0.0};&#xA;  float theta[6];&#xA;  MatrixAdd(theTemp, Jfk, 6, 1, theta); // theta=[Jfk(1); -90+Jfk(2); Jfk(3); Jfk(4); Jfk(5); Jfk(6)];&#xA;  float alfa[6]={90.0, 0.0, -90.0, 90.0, -90.0, 0.0}; // alfa=[-90; 0; -90; 90; -90; 0];&#xA;  float r[6]={r1, r2, r3, 0.0, 0.0, 0.0}; // r=[47; 110; 26; 0; 0; 0];&#xA;  float d[6]={d1, 0.0, d3, d4, 0.0, d6}; // d=[133; 0; 7; 117.5; 0; 28];&#xA;  // from deg to rad&#xA;  MatrixScale(theta, 6, 1, PI/180.0); // theta=theta*pi/180;&#xA;  MatrixScale(alfa, 6, 1, PI/180.0); // alfa=alfa*pi/180;&#xA;  &#xA;  // work frame&#xA;  float Xwf[6]={0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; // Xwf=[0; 0; 0; 0; 0; 0];&#xA;  &#xA;  // tool frame&#xA;  float Xtf[6]={0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; // Xtf=[0; 0; 0; 0; 0; 0];&#xA;  &#xA;  // work frame transformation matrix&#xA;  float Twf[16];&#xA;  pos2tran(Xwf, Twf); // Twf=pos2tran(Xwf);&#xA;  &#xA;  // tool frame transformation matrix&#xA;  float Ttf[16];&#xA;  pos2tran(Xtf, Ttf); // Ttf=pos2tran(Xtf);&#xA;  &#xA;  // DH homogeneous transformation matrix&#xA;  float T01[16], T12[16], T23[16], T34[16], T45[16], T56[16];&#xA;  DH1line(theta[0], alfa[0], r[0], d[0], T01); // T01=DH1line(theta(1),alfa(1),r(1),d(1));&#xA;  DH1line(theta[1], alfa[1], r[1], d[1], T12); // T12=DH1line(theta(2),alfa(2),r(2),d(2));&#xA;  DH1line(theta[2], alfa[2], r[2], d[2], T23); // T23=DH1line(theta(3),alfa(3),r(3),d(3));&#xA;  DH1line(theta[3], alfa[3], r[3], d[3], T34); // T34=DH1line(theta(4),alfa(4),r(4),d(4));&#xA;  DH1line(theta[4], alfa[4], r[4], d[4], T45); // T45=DH1line(theta(5),alfa(5),r(5),d(5));&#xA;  DH1line(theta[5], alfa[5], r[5], d[5], T56); // T56=DH1line(theta(6),alfa(6),r(6),d(6));&#xA;&#xA;  float Tw1[16], Tw2[16], Tw3[16], Tw4[16], Tw5[16], Tw6[16], Twt[16];&#xA;  MatrixMultiply(Twf, T01, 4, 4, 4, Tw1); // Tw1=Twf*T01;&#xA;  MatrixMultiply(Tw1, T12, 4, 4, 4, Tw2); // Tw2=Tw1*T12;&#xA;  MatrixMultiply(Tw2, T23, 4, 4, 4, Tw3); // Tw3=Tw2*T23;&#xA;  MatrixMultiply(Tw3, T34, 4, 4, 4, Tw4); // Tw4=Tw3*T34;&#xA;  MatrixMultiply(Tw4, T45, 4, 4, 4, Tw5); // Tw5=Tw4*T45;&#xA;  MatrixMultiply(Tw5, T56, 4, 4, 4, Tw6); // Tw6=Tw5*T56;&#xA;  MatrixMultiply(Tw6, Ttf, 4, 4, 4, Twt); // Twt=Tw6*Ttf;&#xA;  &#xA;  // calculate pos from transformation matrix&#xA;  tran2pos(Twt, Xfk); // Xfk=tran2pos(Twt);&#xA;  // Xfk(4:6)=Xfk(4:6)/pi*180;&#xA;  Xfk[3]=Xfk[3]/PI*180.0;&#xA;  Xfk[4]=Xfk[4]/PI*180.0;&#xA;  Xfk[5]=Xfk[5]/PI*180.0;&#xA;}&#xA;&#xA;void invtran(float* Titi, float* Titf)&#xA;{&#xA;  // finding the inverse of the homogeneous transformation matrix&#xA;  // first row&#xA;  Titf[0*4 + 0] = Titi[0*4 + 0];&#xA;  Titf[0*4 + 1] = Titi[1*4 + 0];&#xA;  Titf[0*4 + 2] = Titi[2*4 + 0];&#xA;  Titf[0*4 + 3] = -Titi[0*4 + 0]*Titi[0*4 + 3]-Titi[1*4 + 0]*Titi[1*4 + 3]-Titi[2*4 + 0]*Titi[2*4 + 3];&#xA;  // second row&#xA;  Titf[1*4 + 0] = Titi[0*4 + 1];&#xA;  Titf[1*4 + 1] = Titi[1*4 + 1];&#xA;  Titf[1*4 + 2] = Titi[2*4 + 1];&#xA;  Titf[1*4 + 3] = -Titi[0*4 + 1]*Titi[0*4 + 3]-Titi[1*4 + 1]*Titi[1*4 + 3]-Titi[2*4 + 1]*Titi[2*4 + 3];&#xA;  // third row&#xA;  Titf[2*4 + 0] = Titi[0*4 + 2];&#xA;  Titf[2*4 + 1] = Titi[1*4 + 2];&#xA;  Titf[2*4 + 2] = Titi[2*4 + 2];&#xA;  Titf[2*4 + 3] = -Titi[0*4 + 2]*Titi[0*4 + 3]-Titi[1*4 + 2]*Titi[1*4 + 3]-Titi[2*4 + 2]*Titi[2*4 + 3];&#xA;  // forth row&#xA;  Titf[3*4 + 0] = 0.0;&#xA;  Titf[3*4 + 1] = 0.0;&#xA;  Titf[3*4 + 2] = 0.0;&#xA;  Titf[3*4 + 3] = 1.0;&#xA;}&#xA;&#xA;void tran2pos(float* Ttp, float* Xtp)&#xA;{&#xA;  // pos from homogeneous transformation matrix&#xA;  Xtp[0] = Ttp[0*4 + 3];&#xA;  Xtp[1] = Ttp[1*4 + 3];&#xA;  Xtp[2] = Ttp[2*4 + 3];&#xA;  Xtp[4] = atan2(sqrt(Ttp[2*4 + 0]*Ttp[2*4 + 0] + Ttp[2*4 + 1]*Ttp[2*4 + 1]),Ttp[2*4 + 2]);&#xA;  Xtp[3] = atan2(Ttp[1*4 + 2]/sin(Xtp[4]),Ttp[0*4 + 2]/sin(Xtp[4]));&#xA;  Xtp[5] = atan2(Ttp[2*4 + 1]/sin(Xtp[4]),-Ttp[2*4 + 0]/sin(Xtp[4]));&#xA;}&#xA;&#xA;void pos2tran(float* Xpt, float* Tpt)&#xA;{&#xA;  // pos to homogeneous transformation matrix&#xA;  // first row&#xA;  Tpt[0*4 + 0] = cos(Xpt[3])*cos(Xpt[4])*cos(Xpt[5])-sin(Xpt[3])*sin(Xpt[5]);&#xA;  Tpt[0*4 + 1] = -cos(Xpt[3])*cos(Xpt[4])*sin(Xpt[5])-sin(Xpt[3])*cos(Xpt[5]);&#xA;  Tpt[0*4 + 2] = cos(Xpt[3])*sin(Xpt[4]);&#xA;  Tpt[0*4 + 3] = Xpt[0];&#xA;  // second row&#xA;  Tpt[1*4 + 0] = sin(Xpt[3])*cos(Xpt[4])*cos(Xpt[5])+cos(Xpt[3])*sin(Xpt[5]);&#xA;  Tpt[1*4 + 1] = -sin(Xpt[3])*cos(Xpt[4])*sin(Xpt[5])+cos(Xpt[3])*cos(Xpt[5]);&#xA;  Tpt[1*4 + 2] = sin(Xpt[3])*sin(Xpt[4]);&#xA;  Tpt[1*4 + 3] = Xpt[1];&#xA;  // third row&#xA;  Tpt[2*4 + 0] = -sin(Xpt[4])*cos(Xpt[5]);&#xA;  Tpt[2*4 + 1] = sin(Xpt[4])*sin(Xpt[5]);&#xA;  Tpt[2*4 + 2] = cos(Xpt[4]);&#xA;  Tpt[2*4 + 3] = Xpt[2];&#xA;  // forth row&#xA;  Tpt[3*4 + 0] = 0.0;&#xA;  Tpt[3*4 + 1] = 0.0;&#xA;  Tpt[3*4 + 2] = 0.0;&#xA;  Tpt[3*4 + 3] = 1.0;&#xA;}&#xA;&#xA;void DH1line(float thetadh, float alfadh, float rdh, float ddh, float* Tdh)&#xA;{&#xA;  // creats Denavit-Hartenberg homogeneous transformation matrix&#xA;  // first row&#xA;  Tdh[0*4 + 0] = cos(thetadh);&#xA;  Tdh[0*4 + 1] = -sin(thetadh)*cos(alfadh);&#xA;  Tdh[0*4 + 2] = sin(thetadh)*sin(alfadh);&#xA;  Tdh[0*4 + 3] = rdh*cos(thetadh);&#xA;  // second row&#xA;  Tdh[1*4 + 0] = sin(thetadh);&#xA;  Tdh[1*4 + 1] = cos(thetadh)*cos(alfadh);&#xA;  Tdh[1*4 + 2] = -cos(thetadh)*sin(alfadh);&#xA;  Tdh[1*4 + 3] = rdh*sin(thetadh);&#xA;  // third row&#xA;  Tdh[2*4 + 0] = 0.0;&#xA;  Tdh[2*4 + 1] = sin(alfadh);&#xA;  Tdh[2*4 + 2] = cos(alfadh);&#xA;  Tdh[2*4 + 3] = ddh;&#xA;  // forth row&#xA;  Tdh[3*4 + 0] = 0.0;&#xA;  Tdh[3*4 + 1] = 0.0;&#xA;  Tdh[3*4 + 2] = 0.0;&#xA;  Tdh[3*4 + 3] = 1.0;&#xA;}&#xA;&#xA;void MatrixPrint(float* A, int m, int n, String label)&#xA;{&#xA;  // A = input matrix (m x n)&#xA;  int i, j;&#xA;  Serial.println();&#xA;  Serial.println(label);&#xA;  for (i = 0; i &amp;lt; m; i++)&#xA;  {&#xA;    for (j = 0; j &amp;lt; n; j++)&#xA;    {&#xA;      Serial.print(A[n * i + j]);&#xA;      Serial.print(&amp;quot;\t&amp;quot;);&#xA;    }&#xA;    Serial.println();&#xA;  }&#xA;}&#xA;&#xA;void MatrixCopy(float* A, int n, int m, float* B)&#xA;{&#xA;  int i, j;&#xA;  for (i = 0; i &amp;lt; m; i++)&#xA;    for(j = 0; j &amp;lt; n; j++)&#xA;    {&#xA;      B[n * i + j] = A[n * i + j];&#xA;    }&#xA;}&#xA;&#xA;//Matrix Multiplication Routine&#xA;// C = A*B&#xA;void MatrixMultiply(float* A, float* B, int m, int p, int n, float* C)&#xA;{&#xA;  // A = input matrix (m x p)&#xA;  // B = input matrix (p x n)&#xA;  // m = number of rows in A&#xA;  // p = number of columns in A = number of rows in B&#xA;  // n = number of columns in B&#xA;  // C = output matrix = A*B (m x n)&#xA;  int i, j, k;&#xA;  for (i = 0; i &amp;lt; m; i++)&#xA;    for(j = 0; j &amp;lt; n; j++)&#xA;    {&#xA;      C[n * i + j] = 0;&#xA;      for (k = 0; k &amp;lt; p; k++)&#xA;        C[n * i + j] = C[n * i + j] + A[p * i + k] * B[n * k + j];&#xA;    }&#xA;}&#xA;&#xA;&#xA;//Matrix Addition Routine&#xA;void MatrixAdd(float* A, float* B, int m, int n, float* C)&#xA;{&#xA;  // A = input matrix (m x n)&#xA;  // B = input matrix (m x n)&#xA;  // m = number of rows in A = number of rows in B&#xA;  // n = number of columns in A = number of columns in B&#xA;  // C = output matrix = A+B (m x n)&#xA;  int i, j;&#xA;  for (i = 0; i &amp;lt; m; i++)&#xA;    for(j = 0; j &amp;lt; n; j++)&#xA;      C[n * i + j] = A[n * i + j] + B[n * i + j];&#xA;}&#xA;&#xA;&#xA;//Matrix Subtraction Routine&#xA;void MatrixSubtract(float* A, float* B, int m, int n, float* C)&#xA;{&#xA;  // A = input matrix (m x n)&#xA;  // B = input matrix (m x n)&#xA;  // m = number of rows in A = number of rows in B&#xA;  // n = number of columns in A = number of columns in B&#xA;  // C = output matrix = A-B (m x n)&#xA;  int i, j;&#xA;  for (i = 0; i &amp;lt; m; i++)&#xA;    for(j = 0; j &amp;lt; n; j++)&#xA;      C[n * i + j] = A[n * i + j] - B[n * i + j];&#xA;}&#xA;&#xA;&#xA;//Matrix Transpose Routine&#xA;void MatrixTranspose(float* A, int m, int n, float* C)&#xA;{&#xA;  // A = input matrix (m x n)&#xA;  // m = number of rows in A&#xA;  // n = number of columns in A&#xA;  // C = output matrix = the transpose of A (n x m)&#xA;  int i, j;&#xA;  for (i = 0; i &amp;lt; m; i++)&#xA;    for(j = 0; j &amp;lt; n; j++)&#xA;      C[m * j + i] = A[n * i + j];&#xA;}&#xA;&#xA;void MatrixScale(float* A, int m, int n, float k)&#xA;{&#xA;  for (int i = 0; i &amp;lt; m; i++)&#xA;    for (int j = 0; j &amp;lt; n; j++)&#xA;      A[n * i + j] = A[n * i + j] * k;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="28474" LastEditorUserId="28474" LastEditDate="2021-04-21T09:11:52.223" LastActivityDate="2021-04-21T11:32:39.617" Title="6DOF Kinematics moveo" Tags="&lt;robotic-arm&gt;&lt;arduino&gt;&lt;kinematics&gt;&lt;c&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="22064" PostTypeId="2" ParentId="22059" CreationDate="2021-04-20T15:09:56.517" Score="1" Body="&lt;p&gt;That's a hobby servo, from a dubious source.  It's not a technical device marketed to technical people, so don't expect a datasheet that has technical, verifiable specifications.&lt;/p&gt;&#xA;&lt;p&gt;There &lt;em&gt;are&lt;/em&gt; hobby servos that come with specifications, and sometimes they even meet their claims.  If you want to buy one and have it Just Work, start with a company that lists said specifications, and that has a reputation for standing behind their work.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What does the 60KG mean?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It's very possibly a model name.  Servos produce torque, and a kilogram is a unit of mass.  Even when misused as a unit of force (i.e., &lt;span class=&quot;math-container&quot;&gt;$\mathrm {kg} \cdot 9.8\mathrm{m/s}$&lt;/span&gt; it's still not a torque.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I assume that 8.4V High Voltage is the amount of power it needs to run at full potential.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;If it were a &lt;em&gt;technical&lt;/em&gt; specification, &lt;span class=&quot;math-container&quot;&gt;$\mathrm{8.4V}$&lt;/span&gt; would be enough.  &amp;quot;High voltage&amp;quot; just indicates that it uses more than the old-style 4-cell Nicad pack (4.8V nominal, essentially between 4V and 5V).&lt;/p&gt;&#xA;&lt;p&gt;Assuming that it's a quality part, &amp;quot;&lt;span class=&quot;math-container&quot;&gt;$\mathrm{8.4V}$&lt;/span&gt;&amp;quot; almost certainly means that it's designed to run off of two unregulated Lithium-Polymer batteries in series.  But you're buying a no-name part from an unreliable vendor.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Large torque means it can lift a lot of weight, but how much?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&amp;quot;Large&amp;quot; is a marketing word, designed to make stop thinking long enough to buy the thing.  A real specification would list a torque in inch-pounds or Newton-meters.  A better specification would have short-term torque and holding torque (but you won't find that in a hobby servo from any source).&lt;/p&gt;&#xA;&lt;p&gt;&amp;quot;Large&amp;quot; torque means it can twist hard.  Force = torque / diameter, so large torque means nothing in terms of how much weight it can lift unless you specify a lever arm.&lt;/p&gt;&#xA;" OwnerUserId="1411" LastActivityDate="2021-04-20T15:09:56.517" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22065" PostTypeId="2" ParentId="287" CreationDate="2021-04-21T01:29:54.380" Score="0" Body="&lt;p&gt;A new compiler is available through the Microsoft App Store called &amp;quot;Robot JavaScript&amp;quot;.  This compiler works in Windows10 and compiles code for EV3 Mindstorms robots.  If you have a Lego Mindstorms EV3, check out: https://www.microsoft.com/en-us/p/robot-javascript/9nb6w06lpx68&lt;/p&gt;&#xA;" OwnerUserId="28488" LastActivityDate="2021-04-21T01:29:54.380" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22066" PostTypeId="2" ParentId="2131" CreationDate="2021-04-21T01:46:37.870" Score="0" Body="&lt;p&gt;The EV3 color sensor can easily be used to follow different colored lines (e.g., red lines, green lines, blue lines).  The important part about using the sensor is selecting the proper mode for following the particular colored line.  For example, if the line is just a black line on a white background, then set the sensor to reflected light.  However, if the line is a colored line (red/green/blue/other), then set the sensor to RGB Color mode which will output three numeric values (r, g, b).  Each numeric value will range from 0% to 100% of that color.  If the colored line is on a white background, then the percentages of the various colors may range from 100% to 50% or lower depending on how much of the sensor is over the line.  For example, if it is a red line, then the red value from the sensor will be 100% regardless of whether the sensor is over the red line or white background.  This is because the white background will generate a value of 100% for each RGB color.  If the red line is over a black background, then the value for red will vary between 100% (over the red line) to 0% over the black background.  So, if the line is red and the background is white, how do you follow the line since the sensor will only show 100% red?  The answer is to use one of the other values from the sensor (e.g., green or blue).  If the line is red and the background is white, then use the blue value from the sensor which will show 0% when over the red line and 100% when over the white background.&lt;/p&gt;&#xA;&lt;p&gt;For example programs about using the EV3 sensors for line following, and detection and for  examples about detecting colors, see: &lt;a href=&quot;https://robotjavascript.com/line-following-examples.htm&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://robotjavascript.com/line-following-examples.htm&lt;/a&gt; and &lt;a href=&quot;https://robotjavascript.com/sensor-examples.htm#colorSensorValue&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://robotjavascript.com/sensor-examples.htm#colorSensorValue&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;These examples are written in Robot JavaScript.  The colorSensorValue() function returns an object with three numeric properties: { r: [0-100] , g: [0-100], b: [0-100] }&lt;/p&gt;&#xA;&lt;p&gt;To follow the line, use the syncMotors() function and set the steering parameter to your desired sensor value:  colorObject=colorSensorPct(); syncMotors(2, 3, constantPower, gain*(colorObject.b-target));&#xA;Then all you need to do is adjust the constantPower, gain, and target for your particular needs.&lt;/p&gt;&#xA;" OwnerUserId="28488" LastActivityDate="2021-04-21T01:46:37.870" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22067" PostTypeId="2" ParentId="21459" CreationDate="2021-04-21T01:59:31.307" Score="0" Body="&lt;p&gt;If you have an EV3 and are an experienced programmer, you may want to look at the free JavaScript compiler on the Microsoft Apps Store (&lt;a href=&quot;https://www.microsoft.com/en-us/p/robot-javascript/9nb6w06lpx68&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.microsoft.com/en-us/p/robot-javascript/9nb6w06lpx68&lt;/a&gt;).  This compiler compiles JavaScript into native EV3 bytecodes which makes it very fast for both compilation, downloading, and program execution.  As for the capabilities of the language, the language supports arrays, objects, object constructor functions, ternary operator, function arguments array, sensor event handlers, timer events.  It currently does not support Regex or bitwise operations.&lt;/p&gt;&#xA;" OwnerUserId="28488" LastActivityDate="2021-04-21T01:59:31.307" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22068" PostTypeId="2" ParentId="18118" CreationDate="2021-04-21T02:06:09.880" Score="0" Body="&lt;p&gt;No.  The files are no longer accessible from the brick.  You will have to re-download them.  The EV3 operating system (LMS2012) is sensitive to unexpected shutdowns.  When an unexpected shutdown occurs, information is lost in the internal memory of the device.  There is no hard-drive inside the EV3.  So, programs are stored in a Flash Memory chip.  I have found from personal experience that all of the file in the user programs folder are wiped out and disappear completely as if they never existed on the brick.  Sorry.  That has been my experience.&lt;/p&gt;&#xA;" OwnerUserId="28488" LastActivityDate="2021-04-21T02:06:09.880" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22069" PostTypeId="1" CreationDate="2021-04-21T03:22:53.137" Score="0" ViewCount="42" Body="&lt;p&gt;How do I find the viscous friction for my DC motor without measuring the input current and output torque.&#xA;I have to do a theoretical model on simulink and can't find any answers on how to find it&lt;/p&gt;&#xA;" OwnerUserId="28489" LastActivityDate="2021-04-21T03:22:53.137" Title="Find viscous friction for DC motor transfer function" Tags="&lt;control&gt;&lt;motor&gt;&lt;pid&gt;&lt;microcontroller&gt;&lt;dc&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="22070" PostTypeId="2" ParentId="20606" CreationDate="2021-04-21T08:58:32.703" Score="1" Body="&lt;p&gt;The acceleration raw data looks weird, because of the discrete jumps. For comparison here is raw data from a stationary MPU-9150 (MEMS IMU): &lt;a href=&quot;https://i.stack.imgur.com/ETxxd.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ETxxd.png&quot; alt=&quot;raw data&quot; /&gt;&lt;/a&gt; The raw accelerometer and gyroscope data are not integrated, and thus should not experience integration drift. The roll and pitch are integrated quantities, which then follow a random walk, and could end up anywhere.&lt;/p&gt;&#xA;&lt;p&gt;Other error sources may be the following: Depending on the dynamic range, you may see different quantization levels, such as in the gyro raw data. There might also be a slowly time-varying bias, such as in the y-axis of the accelerometers.&lt;/p&gt;&#xA;" OwnerUserId="28471" LastActivityDate="2021-04-21T08:58:32.703" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22071" PostTypeId="2" ParentId="22063" CreationDate="2021-04-21T11:32:39.617" Score="0" Body="&lt;p&gt;Well, i would address one of your problem :&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Weird result&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;One thing you need to understand while working with serial manipulator control inverse kinematic is concept of multi solution. With understanding that 6 dof serial manipulator usually consist of anthromorphic arm (basic 2 dof planar robot) and spherical wrist, therefore a multi solution possibly exist for one point.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/alv5Y.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/alv5Y.png&quot; alt=&quot;Multi solution of serial manipulator inverse kinematic&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Fig 1. Solution A and solution B for point x,y&lt;/p&gt;&#xA;&lt;p&gt;Simple testing give result that configuration :&lt;/p&gt;&#xA;&lt;p&gt;q = [0 0 90 0 90 0]&lt;/p&gt;&#xA;&lt;p&gt;&lt;b&gt;Didn't give position 224, 0, 280 (x,y,z)&lt;/b&gt;&lt;/p&gt;&#xA;&lt;p&gt;But it give&#xA;HTM :&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    -1         0         0        -1&#xA;     0         1         0         0&#xA;     0         0        -1        57&#xA;     0         0         0         1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Read : -1, 0, 57 (x,y,z)&lt;/p&gt;&#xA;&lt;p&gt;while this configuration would give u the position u want :&lt;/p&gt;&#xA;&lt;p&gt;q = [ 0 0 0 -180 180 -180]&lt;/p&gt;&#xA;&lt;p&gt;q = [0  -84.3114   19.6625 0   65.1509 0]&lt;/p&gt;&#xA;&lt;p&gt;Additional note :&lt;/p&gt;&#xA;&lt;p&gt;for -224 in x axis, maybe u wanna check if ur code have additional minus symbol or anything that accidentally make the value of x is -1. Testing with another configuration may help.&lt;/p&gt;&#xA;" OwnerUserId="22800" LastActivityDate="2021-04-21T11:32:39.617" CommentCount="12" ContentLicense="CC BY-SA 4.0" />
  <row Id="22072" PostTypeId="1" CreationDate="2021-04-22T06:53:32.617" Score="0" ViewCount="10" Body="&lt;p&gt;I have a simple proteus circuit simulation with a PIC18 chip and LED connected to RD0 port with a resistor.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;My objective is to make the LED blink once only&lt;/strong&gt; when i start the simulation and the following is the code I used. I set PortD as output and force it to 0 at the beginning. Thereafter, RD0 is forced to 1. 500ms later, RD0 is forced to 0.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;#include &amp;lt;xc.h&amp;gt;&#xA;#define _XTAL_FREQ 8000000&#xA;void delay_ms(unsigned int t);&#xA;&#xA;void main(void)&#xA;{&#xA;   TRISD = 0x00;&#xA;   LATD = 0x00;&#xA;   LATD = 0b00000001;&#xA;   delay_ms(500);&#xA;   LATD = 0b00000000;&#xA;   delay_ms(500);&#xA;}&#xA;&#xA;void delay_ms(unsigned int t)&#xA;{&#xA;   for (int i=0 ; i&amp;lt;t ; i++)&#xA;   {&#xA;      __delay_ms(1);&#xA;   }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;When I start the simulation, the LED keep blinking forever until I stop the simulation. I did not use any form of loop in my program, what is causing this behavior?&lt;/p&gt;&#xA;" OwnerUserId="28498" LastActivityDate="2021-04-22T06:53:32.617" Title="Proteus simulation keep on looping forever" Tags="&lt;microcontroller&gt;&lt;simulation&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="22073" PostTypeId="1" CreationDate="2021-04-22T08:45:56.490" Score="0" ViewCount="13" Body="&lt;p&gt;The title is pretty much it.&lt;/p&gt;&#xA;&lt;p&gt;Anyone have seen a closed-form solution of extrinsic on 2D to 3D projection problem?&lt;/p&gt;&#xA;&lt;p&gt;Seems like this should exist in old camera calibration literature but I can't really find it.&lt;/p&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2021-04-22T08:45:56.490" Title="Closed-form solution of extrinsic in 2D to 3D projection problem" Tags="&lt;calibration&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="22074" PostTypeId="1" CreationDate="2021-04-22T09:11:18.940" Score="0" ViewCount="59" Body="&lt;p&gt;I am trying to find a well documented library which I can use for my 6dof robotic arm (&lt;a href=&quot;https://www.thingiverse.com/thing:1693444&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.thingiverse.com/thing:1693444&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;p&gt;But I cant find anything :(&lt;/p&gt;&#xA;&lt;p&gt;Does anyone have a python/c code for calculating it or knows a well documented (easy to use) library i could use?&lt;/p&gt;&#xA;&lt;p&gt;I tried to use this code, but this was coded for a different robotic arm and I am getting a headache trying to change it to calculate the kinematics for my robotic arm.&lt;/p&gt;&#xA;&lt;p&gt;Asked someone to help me with the DH-Parameters (&lt;a href=&quot;https://stackoverflow.com/questions/67159164/denavit-hartenberg-6dof-moveo-inverse-kinematic-robot-arm?noredirect=1#comment118726837_67159164&quot;&gt;https://stackoverflow.com/questions/67159164/denavit-hartenberg-6dof-moveo-inverse-kinematic-robot-arm?noredirect=1#comment118726837_67159164&lt;/a&gt;)&#xA;so these Parameter are for sure right.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;/*&#xA;Simple script to move my tiny 6dof robotic arm&#xA;*/&#xA;#include &amp;lt;math.h&amp;gt;&#xA;&#xA;#define PI 3.1415926535897932384626433832795&#xA;&#xA;//driver for the axis 1&#xA;#define PUL1_PIN 39&#xA;#define DIR1_PIN 37&#xA;//driver for the axis 2&#xA;#define PUL2_PIN 43&#xA;#define DIR2_PIN 41&#xA;//driver for the axis 3&#xA;#define PUL3_PIN 47&#xA;#define DIR3_PIN 45&#xA;//driver for the axis 4&#xA;#define PUL4_PIN 46&#xA;#define DIR4_PIN 48&#xA;//driver for the axis 5&#xA;#define PUL5_PIN A6&#xA;#define DIR5_PIN A7&#xA;//driver for the axis 6&#xA;#define PUL6_PIN A0&#xA;#define DIR6_PIN A1&#xA;&#xA;//enable pin for the axis 3, 2 and 1&#xA;#define EN321_PIN 32&#xA;#define EN4_PIN A8&#xA;#define EN5_PIN A2&#xA;#define EN6_PIN 38&#xA;&#xA;double curPos1 = 0.0;&#xA;double curPos2 = 0.0;&#xA;double curPos3 = 0.0;&#xA;double curPos4 = 0.0;&#xA;double curPos5 = 0.0;&#xA;double curPos6 = 0.0;&#xA;&#xA;boolean PULstat1 = 0;&#xA;boolean PULstat2 = 0;&#xA;boolean PULstat3 = 0;&#xA;boolean PULstat4 = 0;&#xA;boolean PULstat5 = 0;&#xA;boolean PULstat6 = 0;&#xA;&#xA;//robot geometry&#xA;const double dl1 = 360.0/200.0/32.0;&#xA;const double dl2 = 360.0/200.0/32.0;&#xA;const double dl3 = 360.0/200.0/32.0;&#xA;const double dl4 = 360.0/200.0/32.0;&#xA;const double dl5 = 360.0/200.0/32.0;&#xA;const double dl6 = 360.0/200.0/32.0;&#xA;const double r1 = 0.0;&#xA;const double r2 = 223.0;&#xA;const double r3 = 0.0;&#xA;const double d1 = 232.0;&#xA;const double d3 = 0.0;&#xA;const double d4 = 224.0;&#xA;const double d6 = 175.0;&#xA;&#xA;void setup()&#xA;{&#xA;  Serial.begin(9600);&#xA;  pinMode(PUL1_PIN, OUTPUT);&#xA;  pinMode(DIR1_PIN, OUTPUT);&#xA;  pinMode(PUL2_PIN, OUTPUT);&#xA;  pinMode(DIR2_PIN, OUTPUT);&#xA;  pinMode(PUL3_PIN, OUTPUT);&#xA;  pinMode(DIR3_PIN, OUTPUT);&#xA;  pinMode(PUL4_PIN, OUTPUT);&#xA;  pinMode(DIR4_PIN, OUTPUT);&#xA;  pinMode(PUL5_PIN, OUTPUT);&#xA;  pinMode(DIR5_PIN, OUTPUT);&#xA;  pinMode(PUL6_PIN, OUTPUT);&#xA;  pinMode(DIR6_PIN, OUTPUT);&#xA;&#xA;  pinMode(EN321_PIN, OUTPUT);&#xA;  pinMode(EN4_PIN, OUTPUT);&#xA;  pinMode(EN5_PIN, OUTPUT);&#xA;  pinMode(EN6_PIN, OUTPUT);&#xA;  &#xA;  digitalWrite(PUL1_PIN, LOW); // gear ratio = 96/20 = 4.8&#xA;  digitalWrite(DIR1_PIN, LOW); //LOW = negative direction&#xA;  &#xA;  digitalWrite(PUL2_PIN, LOW); // gear ratio = 4&#xA;  digitalWrite(DIR2_PIN, LOW); //LOW = positive direction&#xA;  &#xA;  digitalWrite(PUL3_PIN, LOW); // gear ratio = 5&#xA;  digitalWrite(DIR3_PIN, LOW); //LOW = negative direction&#xA;  &#xA;  digitalWrite(PUL4_PIN, LOW); // gear ratio = 56/20 = 2.8&#xA;  digitalWrite(DIR4_PIN, LOW); //LOW = positive direction&#xA;  &#xA;  digitalWrite(PUL5_PIN, LOW); // gear ratio = 42/20 = 2.1&#xA;  digitalWrite(DIR5_PIN, LOW); //LOW = positive direction&#xA;  &#xA;  digitalWrite(PUL6_PIN, LOW); // gear ratio = 1&#xA;  digitalWrite(DIR6_PIN, LOW); //LOW = positive direction&#xA;&#xA;  // all joints disabled!&#xA;  digitalWrite(EN32A1_PIN, HIGH);&#xA;  digitalWrite(EN4_PIN, HIGH);&#xA;  digitalWrite(EN5_PIN, HIGH);&#xA;  digitalWrite(EN6_PIN, HIGH); &#xA;}&#xA;&#xA;void loop()&#xA;{&#xA;  // enable all joints&#xA;  delay(5000);&#xA;  Serial.println(&amp;quot;gogo&amp;quot;);&#xA;  digitalWrite(EN321_PIN, LOW);&#xA;  digitalWrite(EN4_PIN, LOW);&#xA;  digitalWrite(EN5_PIN, LOW);&#xA;  digitalWrite(EN6_PIN, LOW);&#xA;  delay(1000);&#xA;  //--------------------------------------------------------GoGoGo-------------------&#xA;  curPos1=0.0;&#xA;  curPos2=0.0;&#xA;  curPos3=0.0;&#xA;  curPos4=0.0;&#xA;  curPos5=0.0;&#xA;  curPos6=0.0;&#xA;&#xA;  //float Xhome[6]={0.0, 0.0, 854.0, 0.0, 0.0, 0.0};&#xA;  float Xhome[6]={224.0, 0.0, 280.0, 0.0, 180.0, 0.0};&#xA;  float Yhome[6]={0.0, 0.0, -90.0, 0.0, -90.0, 0.0};&#xA;  &#xA;  float X1[6]={164.5, 0.0, 141.0, 90.0, 180.0, -90.0};&#xA;  float X11[6]={164.5+14.7, 35.4, 141.0, 90.0, 180.0, -90.0};&#xA;  float X12[6]={164.5+50.0, 50.0, 141.0, 90.0, 180.0, -90.0};&#xA;  float X13[6]={164.5+85.3, 35.4, 141.0, 90.0, 180.0, -90.0};&#xA;  float X14[6]={164.5+100.0, 0.0, 141.0, 90.0, 180.0, -90.0};&#xA;  float X15[6]={164.5+85.3, -35.4, 141.0, 90.0, 180.0, -90.0};&#xA;  float X16[6]={164.5+50.0, -50.0, 141.0, 90.0, 180.0, -90.0};&#xA;  float X17[6]={164.5+14.7, -35.4, 141.0, 90.0, 180.0, -90.0};&#xA;&#xA;  float X18[6]={164.5+50.0, 0.0, 141.0, 90.0, 180.0, -90.0};&#xA;  &#xA;  float X2[6]={264.5, 0.0, 141.0, 0.0, 90.0, 0.0};&#xA;  float X3[6]={164.5, 100.0, 141.0, 90.0, 90.0, 0.0};&#xA;  float X4[6]={164.5, -100.0, 141.0, 90.0, -90.0, 0.0};&#xA;  &#xA;  float Jhome[6], J1[6], J11[6], J12[6], J13[6], J14[6], J15[6], J16[6], J17[6], J18[6], J2[6], J3[6], J4[6];&#xA;  float Fhome[6];&#xA;  InverseK(Xhome, Jhome);&#xA;  ForwardK(Yhome, Fhome);&#xA;  Serial.println(&amp;quot;inverse:&amp;quot;);&#xA;  Serial.println(Jhome[0]);&#xA;  Serial.println(Jhome[1]);&#xA;  Serial.println(Jhome[2]);&#xA;  Serial.println(Jhome[3]);&#xA;  Serial.println(Jhome[4]);&#xA;  Serial.println(Jhome[5]);&#xA;  Serial.println(&amp;quot;------&amp;quot;);&#xA;  Serial.println(&amp;quot;forward:&amp;quot;);&#xA;  Serial.println(Fhome[0]);&#xA;  Serial.println(Fhome[1]);&#xA;  Serial.println(Fhome[2]);&#xA;  Serial.println(Fhome[3]);&#xA;  Serial.println(Fhome[4]);&#xA;  Serial.println(Fhome[5]);&#xA;  Serial.println(&amp;quot;------&amp;quot;);&#xA;  InverseK(X1, J1);&#xA;  InverseK(X11, J11);&#xA;  InverseK(X12, J12);&#xA;  InverseK(X13, J13);&#xA;  InverseK(X14, J14);&#xA;  InverseK(X15, J15);&#xA;  InverseK(X16, J16);&#xA;  InverseK(X17, J17);&#xA;  InverseK(X18, J18);&#xA;  InverseK(X2, J2);&#xA;  InverseK(X3, J3);&#xA;  InverseK(X4, J4);&#xA;&#xA;  goStrightLine(Jhome, J1, 0.25e-4, 0.75e-10, 0.0, 0.0);&#xA;&#xA;  float velG=0.25e-4;&#xA;  goStrightLine(J1, J11, 0.25e-4, 0.75e-10, 0.0, 0.5*velG);&#xA;  goStrightLine(J11, J12, 0.25e-4, 0.75e-10, 0.5*velG, 0.5*velG);&#xA;  goStrightLine(J12, J13, 0.25e-4, 0.75e-10, 0.5*velG, 0.5*velG);&#xA;  goStrightLine(J13, J14, 0.25e-4, 0.75e-10, 0.5*velG, 0.5*velG);&#xA;  goStrightLine(J14, J15, 0.25e-4, 0.75e-10, 0.5*velG, 0.5*velG);&#xA;  goStrightLine(J15, J16, 0.25e-4, 0.75e-10, 0.5*velG, 0.5*velG);&#xA;  goStrightLine(J16, J17, 0.25e-4, 0.75e-10, 0.5*velG, 0.5*velG);&#xA;  goStrightLine(J17, J1, 0.25e-4, 0.75e-10, 0.5*velG, 0.0);&#xA;&#xA;  goStrightLine(J1, J18, 0.25e-4, 0.75e-10, 0.0, 0.8*velG);&#xA;  goStrightLine(J18, J14, 0.25e-4, 0.75e-10, 0.8*velG, 0.0);&#xA;  goStrightLine(J14, J1, 0.25e-4, 0.75e-10, 0.0, 0.0);&#xA;  &#xA;  goStrightLine(J1, J2, 0.25e-4, 0.75e-10, 0.0, 0.0);&#xA;  goStrightLine(J2, J1, 0.25e-4, 0.75e-10, 0.0, 0.0);&#xA;&#xA;  goStrightLine(J1, J3, 0.25e-4, 0.75e-10, 0.0, 0.0);&#xA;  goStrightLine(J3, J1, 0.25e-4, 0.75e-10, 0.0, 0.0);&#xA;&#xA;  goStrightLine(J1, J4, 0.25e-4, 0.75e-10, 0.0, 0.0);&#xA;  goStrightLine(J4, J1, 0.25e-4, 0.75e-10, 0.0, 0.0);&#xA;  &#xA;  goStrightLine(J1, Jhome, 0.25e-4, 0.75e-10, 0.0, 0.0);&#xA;  //--------------------------------------------------------GoGoGoBack---------------&#xA;}&#xA;&#xA;&#xA;void goStrightLine(float* xfi, float* xff, float vel0, float acc0, float velini, float velfin){&#xA;  //&#xA;  float lmax = max(abs(xff[0]-xfi[0]),abs(xff[1]-xfi[1]));&#xA;  lmax = max(lmax,abs(xff[2]-xfi[2]));&#xA;  lmax = max(lmax,abs(xff[3]-xfi[3]));&#xA;  lmax = max(lmax,abs(xff[4]-xfi[4]));&#xA;  lmax = max(lmax,abs(xff[5]-xfi[5]));&#xA;  unsigned long preMil = micros();&#xA;  double l = 0.0;&#xA;  vel0 = min(vel0,sqrt(lmax*acc0+0.5*velini*velini+0.5*velfin*velfin));&#xA;  unsigned long curMil = micros();&#xA;  unsigned long t = 0;&#xA;  double tap = vel0/acc0-velini/acc0;&#xA;  double lap = velini*tap+acc0*tap*tap/2.0;&#xA;  double lcsp = lmax-(vel0*vel0/2.0/acc0-velfin*velfin/2.0/acc0);&#xA;  double tcsp = (lcsp-lap)/vel0+tap;&#xA;  double tfin = vel0/acc0-velfin/acc0+tcsp;&#xA;  while (curMil-preMil&amp;lt;=tfin){&#xA;    t = curMil-preMil;&#xA;    //acceleration phase&#xA;    if (t&amp;lt;=tap) {&#xA;      l = velini*t+acc0*t*t/2.0;&#xA;    }&#xA;    //contant maximum speed phase&#xA;    if (t&amp;gt;tap &amp;amp;&amp;amp; t&amp;lt;=tcsp) {&#xA;      l = lap+vel0*(t-tap);&#xA;    }&#xA;    //deceleration phase&#xA;    if (t&amp;gt;tcsp) {&#xA;      l = lcsp+vel0*(t-tcsp)-acc0*(t-tcsp)*(t-tcsp)/2.0;&#xA;    }&#xA;  &#xA;    //trajectory x and y as a function of l&#xA;    float Xx[6];&#xA;    Xx[0]=xfi[0]+(xff[0]-xfi[0])/lmax*l;&#xA;    Xx[1]=xfi[1]+(xff[1]-xfi[1])/lmax*l;&#xA;    Xx[2]=xfi[2]+(xff[2]-xfi[2])/lmax*l;&#xA;    Xx[3]=xfi[3]+(xff[3]-xfi[3])/lmax*l;&#xA;    Xx[4]=xfi[4]+(xff[4]-xfi[4])/lmax*l;&#xA;    Xx[5]=xfi[5]+(xff[5]-xfi[5])/lmax*l;&#xA;    &#xA;    goTrajectory(Xx);&#xA;    curMil = micros();&#xA;  }&#xA;}&#xA;&#xA;void goTrajectory(float* Jf){&#xA;  &#xA;  //execution&#xA;  int delF=2;&#xA;  // joint #1&#xA;  if (Jf[0]-curPos1&amp;gt;0.0) { // positive direction of rotation&#xA;    digitalWrite(DIR1_PIN, HIGH);&#xA;    while (Jf[0]-curPos1&amp;gt;dl1/2.0) {&#xA;      if (PULstat1 == 0) {&#xA;        digitalWrite(PUL1_PIN, HIGH);&#xA;        PULstat1 = 1;&#xA;      } else {&#xA;        digitalWrite(PUL1_PIN, LOW);&#xA;        PULstat1 = 0;&#xA;      }&#xA;      //curPos1 = Jf[0];&#xA;      curPos1 = curPos1 + dl1/2.0;&#xA;      if (Jf[0]-curPos1&amp;gt;dl1/2.0) {&#xA;        delayMicroseconds(delF);&#xA;      }&#xA;    }&#xA;  } else {&#xA;    digitalWrite(DIR1_PIN, LOW);&#xA;    while (-Jf[0]+curPos1&amp;gt;dl1/2.0) {&#xA;      if (PULstat1 == 0) {&#xA;        digitalWrite(PUL1_PIN, HIGH);&#xA;        PULstat1 = 1;&#xA;      } else {&#xA;        digitalWrite(PUL1_PIN, LOW);&#xA;        PULstat1 = 0;&#xA;      }&#xA;      //curPos1 = Jf[0];&#xA;      curPos1 = curPos1 - dl1/2.0;&#xA;      if (-Jf[0]+curPos1&amp;gt;dl1/2.0) {&#xA;        delayMicroseconds(delF);&#xA;      }&#xA;    }&#xA;  }&#xA;  // joint #2&#xA;  if (Jf[1]-curPos2&amp;gt;0.0) { // positive direction of rotation&#xA;    digitalWrite(DIR2_PIN, HIGH);&#xA;    while (Jf[1]-curPos2&amp;gt;dl2/2.0) {&#xA;      if (PULstat2 == 0) {&#xA;        digitalWrite(PUL2_PIN, HIGH);&#xA;        PULstat2 = 1;&#xA;      } else {&#xA;        digitalWrite(PUL2_PIN, LOW);&#xA;        PULstat2 = 0;&#xA;      }&#xA;      //curPos2 = Jf[1];&#xA;      curPos2 = curPos2 + dl2/2.0;&#xA;      if (Jf[1]-curPos2&amp;gt;dl2/2.0) {&#xA;        delayMicroseconds(delF);&#xA;      }&#xA;    }&#xA;  } else {&#xA;    digitalWrite(DIR2_PIN, LOW);&#xA;    while (-Jf[1]+curPos2&amp;gt;dl2/2.0) {&#xA;      if (PULstat2 == 0) {&#xA;        digitalWrite(PUL2_PIN, HIGH);&#xA;        PULstat2 = 1;&#xA;      } else {&#xA;        digitalWrite(PUL2_PIN, LOW);&#xA;        PULstat2 = 0;&#xA;      }&#xA;      //curPos2 = Jf[1];&#xA;      curPos2 = curPos2 - dl2/2.0;&#xA;      if (-Jf[1]+curPos2&amp;gt;dl2/2.0) {&#xA;        delayMicroseconds(delF);&#xA;      }&#xA;    }&#xA;  }&#xA;  // joint #3&#xA;  if (Jf[2]-curPos3&amp;gt;0.0) { // positive direction of rotation&#xA;    digitalWrite(DIR3_PIN, LOW);&#xA;    while (Jf[2]-curPos3&amp;gt;dl3/2.0) {&#xA;      if (PULstat3 == 0) {&#xA;        digitalWrite(PUL3_PIN, HIGH);&#xA;        PULstat3 = 1;&#xA;      } else {&#xA;        digitalWrite(PUL3_PIN, LOW);&#xA;        PULstat3 = 0;&#xA;      }&#xA;      //curPos3 = Jf[2];&#xA;      curPos3 = curPos3 + dl3/2.0;&#xA;      if (Jf[2]-curPos3&amp;gt;dl3/2.0) {&#xA;        delayMicroseconds(delF);&#xA;      }&#xA;    }&#xA;  } else {&#xA;    digitalWrite(DIR3_PIN, HIGH);&#xA;    while (-Jf[2]+curPos3&amp;gt;dl3/2.0) {&#xA;      if (PULstat3 == 0) {&#xA;        digitalWrite(PUL3_PIN, HIGH);&#xA;        PULstat3 = 1;&#xA;      } else {&#xA;        digitalWrite(PUL3_PIN, LOW);&#xA;        PULstat3 = 0;&#xA;      }&#xA;      //curPos3 = Jf[2];&#xA;      curPos3 = curPos3 - dl3/2.0;&#xA;      if (-Jf[2]+curPos3&amp;gt;dl3/2.0) {&#xA;        delayMicroseconds(delF);&#xA;      }&#xA;    }&#xA;  }&#xA;  // joint #4&#xA;  if (Jf[3]-curPos4&amp;gt;0.0) { // positive direction of rotation&#xA;    digitalWrite(DIR4_PIN, HIGH);&#xA;    while (Jf[3]-curPos4&amp;gt;dl4/2.0) {&#xA;      if (PULstat4 == 0) {&#xA;        digitalWrite(PUL4_PIN, HIGH);&#xA;        PULstat4 = 1;&#xA;      } else {&#xA;        digitalWrite(PUL4_PIN, LOW);&#xA;        PULstat4 = 0;&#xA;      }&#xA;      //curPos4 = Jf[3];&#xA;      curPos4 = curPos4 + dl4/2.0;&#xA;      if (Jf[3]-curPos4&amp;gt;dl4/2.0) {&#xA;        delayMicroseconds(delF);&#xA;      }&#xA;    }&#xA;  } else {&#xA;    digitalWrite(DIR4_PIN, LOW);&#xA;    while (-Jf[3]+curPos4&amp;gt;dl4/2.0) {&#xA;      if (PULstat4 == 0) {&#xA;        digitalWrite(PUL4_PIN, HIGH);&#xA;        PULstat4 = 1;&#xA;      } else {&#xA;        digitalWrite(PUL4_PIN, LOW);&#xA;        PULstat4 = 0;&#xA;      }&#xA;      //curPos4 = Jf[3];&#xA;      curPos4 = curPos4 - dl4/2.0;&#xA;      if (-Jf[3]+curPos4&amp;gt;dl4/2.0) {&#xA;        delayMicroseconds(delF);&#xA;      }&#xA;    }&#xA;  }&#xA;  // joint #5&#xA;  if (Jf[4]-curPos5&amp;gt;0.0) { // positive direction of rotation&#xA;    digitalWrite(DIR5_PIN, HIGH);&#xA;    while (Jf[4]-curPos5&amp;gt;dl5/2.0) {&#xA;      if (PULstat5 == 0) {&#xA;        digitalWrite(PUL5_PIN, HIGH);&#xA;        PULstat5 = 1;&#xA;      } else {&#xA;        digitalWrite(PUL5_PIN, LOW);&#xA;        PULstat5 = 0;&#xA;      }&#xA;      //curPos5 = Jf[4];&#xA;      curPos5 = curPos5 + dl5/2.0;&#xA;      if (Jf[4]-curPos5&amp;gt;dl5/2.0) {&#xA;        delayMicroseconds(delF);&#xA;      }&#xA;    }&#xA;  } else {&#xA;    digitalWrite(DIR5_PIN, LOW);&#xA;    while (-Jf[4]+curPos5&amp;gt;dl5/2.0) {&#xA;      if (PULstat5 == 0) {&#xA;        digitalWrite(PUL5_PIN, HIGH);&#xA;        PULstat5 = 1;&#xA;      } else {&#xA;        digitalWrite(PUL5_PIN, LOW);&#xA;        PULstat5 = 0;&#xA;      }&#xA;      //curPos5 = Jf[4];&#xA;      curPos5 = curPos5 - dl5/2.0;&#xA;      if (-Jf[4]+curPos5&amp;gt;dl5/2.0) {&#xA;        delayMicroseconds(delF);&#xA;      }&#xA;    }&#xA;  }&#xA;  // joint #6&#xA;  if (Jf[5]-curPos6&amp;gt;0.0) { // positive direction of rotation&#xA;    digitalWrite(DIR6_PIN, HIGH);&#xA;    while (Jf[5]-curPos6&amp;gt;dl6/2.0) {&#xA;      if (PULstat6 == 0) {&#xA;        digitalWrite(PUL6_PIN, HIGH);&#xA;        PULstat6 = 1;&#xA;      } else {&#xA;        digitalWrite(PUL6_PIN, LOW);&#xA;        PULstat6 = 0;&#xA;      }&#xA;      //curPos6 = Jf[5];&#xA;      curPos6 = curPos6 + dl6/2.0;&#xA;      if (Jf[5]-curPos6&amp;gt;dl6/2.0) {&#xA;        delayMicroseconds(delF);&#xA;      }&#xA;    }&#xA;  } else {&#xA;    digitalWrite(DIR6_PIN, LOW);&#xA;    while (-Jf[5]+curPos6&amp;gt;dl6/2.0) {&#xA;      if (PULstat6 == 0) {&#xA;        digitalWrite(PUL6_PIN, HIGH);&#xA;        PULstat6 = 1;&#xA;      } else {&#xA;        digitalWrite(PUL6_PIN, LOW);&#xA;        PULstat6 = 0;&#xA;      }&#xA;      //curPos6 = Jf[5];&#xA;      curPos6 = curPos6 - dl6/2.0;&#xA;      if (-Jf[5]+curPos6&amp;gt;dl6/2.0) {&#xA;        delayMicroseconds(delF);&#xA;      }&#xA;    }&#xA;  }&#xA;}&#xA;&#xA;void InverseK(float* Xik, float* Jik) {&#xA;  // inverse kinematics&#xA;  // input: Xik - pos value for the calculation of the inverse kinematics&#xA;  // output: Jfk - joints value for the calculation of the inversed kinematics&#xA;  &#xA;  // from deg to rad&#xA;  // Xik(4:6)=Xik(4:6)*pi/180;&#xA;  Xik[3]=Xik[3]*PI/180.0;&#xA;  Xik[4]=Xik[4]*PI/180.0;&#xA;  Xik[5]=Xik[5]*PI/180.0;&#xA;  &#xA;  // Denavit-Hartenberg matrix&#xA;  float theta[6]={0.0, 90.0, -90.0, 0.0, 0.0, 0.0}; // theta=[0; -90+0; 0; 0; 0; 0];&#xA;  float alfa[6]={90.0, 0.0, -90.0, 90.0, -90.0, 0.0}; // alfa=[-90; 0; -90; 90; -90; 0];&#xA;  float r[6]={r1, r2, r3, 0.0, 0.0, 0.0}; // r=[47; 110; 26; 0; 0; 0];&#xA;  float d[6]={d1, 0.0, d3, d4, 0.0, d6}; // d=[133; 0; 7; 117.5; 0; 28];&#xA;  // from deg to rad&#xA;  MatrixScale(theta, 6, 1, PI/180.0); // theta=theta*pi/180;&#xA;  MatrixScale(alfa, 6, 1, PI/180.0); // alfa=alfa*pi/180;&#xA;  &#xA;  // work frame&#xA;  float Xwf[6]={0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; // Xwf=[0; 0; 0; 0; 0; 0];&#xA;  &#xA;  // tool frame&#xA;  float Xtf[6]={0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; // Xtf=[0; 0; 0; 0; 0; 0];&#xA;  &#xA;  // work frame transformation matrix&#xA;  float Twf[16];&#xA;  pos2tran(Xwf, Twf); // Twf=pos2tran(Xwf);&#xA;  &#xA;  // tool frame transformation matrix&#xA;  float Ttf[16];&#xA;  pos2tran(Xtf, Ttf); // Ttf=pos2tran(Xtf);&#xA;  &#xA;  // total transformation matrix&#xA;  float Twt[16];&#xA;  pos2tran(Xik, Twt); // Twt=pos2tran(Xik);&#xA;  &#xA;  // find T06&#xA;  float inTwf[16], inTtf[16], Tw6[16], T06[16];&#xA;  invtran(Twf, inTwf); // inTwf=invtran(Twf);&#xA;  invtran(Ttf, inTtf); // inTtf=invtran(Ttf);&#xA;  MatrixMultiply(Twt, inTtf, 4, 4, 4, Tw6); // Tw6=Twt*inTtf;&#xA;  MatrixMultiply(inTwf, Tw6, 4, 4, 4, T06); // T06=inTwf*Tw6;&#xA;  &#xA;  // positon of the spherical wrist&#xA;  float Xsw[3];&#xA;  // Xsw=T06(1:3,4)-d(6)*T06(1:3,3);&#xA;  Xsw[0]=T06[0*4 + 3]-d[5]*T06[0*4 + 2];&#xA;  Xsw[1]=T06[1*4 + 3]-d[5]*T06[1*4 + 2];&#xA;  Xsw[2]=T06[2*4 + 3]-d[5]*T06[2*4 + 2];&#xA;  &#xA;  // joints variable&#xA;  // Jik=zeros(6,1);&#xA;  // first joint&#xA;  Jik[0]=atan2(Xsw[1],Xsw[0])-atan2(d[2],sqrt(Xsw[0]*Xsw[0]+Xsw[1]*Xsw[1]-d[2]*d[2])); // Jik(1)=atan2(Xsw(2),Xsw(1))-atan2(d(3),sqrt(Xsw(1)^2+Xsw(2)^2-d(3)^2));&#xA;  // second joint&#xA;  Jik[1]=PI/2.0&#xA;  -acos((r[1]*r[1]+(Xsw[2]-d[0])*(Xsw[2]-d[0])+(sqrt(Xsw[0]*Xsw[0]+Xsw[1]*Xsw[1]-d[2]*d[2])-r[0])*(sqrt(Xsw[0]*Xsw[0]+Xsw[1]*Xsw[1]-d[2]*d[2])-r[0])-(r[2]*r[2]+d[3]*d[3]))/(2.0*r[1]*sqrt((Xsw[2]-d[0])*(Xsw[2]-d[0])+(sqrt(Xsw[0]*Xsw[0]+Xsw[1]*Xsw[1]-d[2]*d[2])-r[0])*(sqrt(Xsw[0]*Xsw[0]+Xsw[1]*Xsw[1]-d[2]*d[2])-r[0]))))&#xA;  -atan((Xsw[2]-d[0])/(sqrt(Xsw[0]*Xsw[0]+Xsw[1]*Xsw[1]-d[2]*d[2])-r[0])); // Jik(2)=pi/2-acos((r(2)^2+(Xsw(3)-d(1))^2+(sqrt(Xsw(1)^2+Xsw(2)^2-d(3)^2)-r(1))^2-(r(3)^2+d(4)^2))/(2*r(2)*sqrt((Xsw(3)-d(1))^2+(sqrt(Xsw(1)^2+Xsw(2)^2-d(3)^2)-r(1))^2)))-atan((Xsw(3)-d(1))/(sqrt(Xsw(1)^2+Xsw(2)^2-d(3)^2)-r(1)));&#xA;  // third joint&#xA;  Jik[2]=PI&#xA;  -acos((r[1]*r[1]+r[2]*r[2]+d[3]*d[3]-(Xsw[2]-d[0])*(Xsw[2]-d[0])-(sqrt(Xsw[0]*Xsw[0]+Xsw[1]*Xsw[1]-d[2]*d[2])-r[0])*(sqrt(Xsw[0]*Xsw[0]+Xsw[1]*Xsw[1]-d[2]*d[2])-r[0]))/(2*r[1]*sqrt(r[2]*r[2]+d[3]*d[3])))&#xA;  -atan(d[3]/r[2]); // Jik(3)=pi-acos((r(2)^2+r(3)^2+d(4)^2-(Xsw(3)-d(1))^2-(sqrt(Xsw(1)^2+Xsw(2)^2-d(3)^2)-r(1))^2)/(2*r(2)*sqrt(r(3)^2+d(4)^2)))-atan(d(4)/r(3));&#xA;  // last three joints&#xA;  float T01[16], T12[16], T23[16], T02[16], T03[16], inT03[16], T36[16];&#xA;  DH1line(theta[0]+Jik[0], alfa[0], r[0], d[0], T01); // T01=DH1line(theta(1)+Jik(1),alfa(1),r(1),d(1));&#xA;  DH1line(theta[1]+Jik[1], alfa[1], r[1], d[1], T12); // T12=DH1line(theta(2)+Jik(2),alfa(2),r(2),d(2));&#xA;  DH1line(theta[2]+Jik[2], alfa[2], r[2], d[2], T23); // T23=DH1line(theta(3)+Jik(3),alfa(3),r(3),d(3));&#xA;  MatrixMultiply(T01, T12, 4, 4, 4, T02); // T02=T01*T12;&#xA;  MatrixMultiply(T02, T23, 4, 4, 4, T03); // T03=T02*T23;&#xA;  invtran(T03, inT03); // inT03=invtran(T03);&#xA;  MatrixMultiply(inT03, T06, 4, 4, 4, T36); // T36=inT03*T06;&#xA;  // forth joint&#xA;  Jik[3]=atan2(-T36[1*4+2], -T36[0*4+2]); // Jik(4)=atan2(-T36(2,3),-T36(1,3));&#xA;  // fifth joint&#xA;  Jik[4]=atan2(sqrt(T36[0*4+2]*T36[0*4+2]+T36[1*4+2]*T36[1*4+2]), T36[2*4+2]); // Jik(5)=atan2(sqrt(T36(1,3)^2+T36(2,3)^2),T36(3,3));&#xA;  // sixth joints&#xA;  Jik[5]=atan2(-T36[2*4+1], T36[2*4+0]); // Jik(6)=atan2(-T36(3,2),T36(3,1));&#xA;  // rad to deg&#xA;  MatrixScale(Jik, 6, 1, 180.0/PI); // Jik=Jik/pi*180;&#xA;}&#xA;&#xA;void ForwardK(float* Jfk, float* Xfk)&#xA;{&#xA;  // forward kinematics&#xA;  // input: Jfk - joints value for the calculation of the forward kinematics&#xA;  // output: Xfk - pos value for the calculation of the forward kinematics&#xA;  &#xA;  // Denavit-Hartenberg matrix&#xA;  float theTemp[6]={0.0, 90.0, -90.0, 0.0, 0.0, 0.0};&#xA;  float theta[6];&#xA;  MatrixAdd(theTemp, Jfk, 6, 1, theta); // theta=[Jfk(1); -90+Jfk(2); Jfk(3); Jfk(4); Jfk(5); Jfk(6)];&#xA;  float alfa[6]={90.0, 0.0, -90.0, 90.0, -90.0, 0.0}; // alfa=[-90; 0; -90; 90; -90; 0];&#xA;  float r[6]={r1, r2, r3, 0.0, 0.0, 0.0}; // r=[47; 110; 26; 0; 0; 0];&#xA;  float d[6]={d1, 0.0, d3, d4, 0.0, d6}; // d=[133; 0; 7; 117.5; 0; 28];&#xA;  // from deg to rad&#xA;  MatrixScale(theta, 6, 1, PI/180.0); // theta=theta*pi/180;&#xA;  MatrixScale(alfa, 6, 1, PI/180.0); // alfa=alfa*pi/180;&#xA;  &#xA;  // work frame&#xA;  float Xwf[6]={0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; // Xwf=[0; 0; 0; 0; 0; 0];&#xA;  &#xA;  // tool frame&#xA;  float Xtf[6]={0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; // Xtf=[0; 0; 0; 0; 0; 0];&#xA;  &#xA;  // work frame transformation matrix&#xA;  float Twf[16];&#xA;  pos2tran(Xwf, Twf); // Twf=pos2tran(Xwf);&#xA;  &#xA;  // tool frame transformation matrix&#xA;  float Ttf[16];&#xA;  pos2tran(Xtf, Ttf); // Ttf=pos2tran(Xtf);&#xA;  &#xA;  // DH homogeneous transformation matrix&#xA;  float T01[16], T12[16], T23[16], T34[16], T45[16], T56[16];&#xA;  DH1line(theta[0], alfa[0], r[0], d[0], T01); // T01=DH1line(theta(1),alfa(1),r(1),d(1));&#xA;  DH1line(theta[1], alfa[1], r[1], d[1], T12); // T12=DH1line(theta(2),alfa(2),r(2),d(2));&#xA;  DH1line(theta[2], alfa[2], r[2], d[2], T23); // T23=DH1line(theta(3),alfa(3),r(3),d(3));&#xA;  DH1line(theta[3], alfa[3], r[3], d[3], T34); // T34=DH1line(theta(4),alfa(4),r(4),d(4));&#xA;  DH1line(theta[4], alfa[4], r[4], d[4], T45); // T45=DH1line(theta(5),alfa(5),r(5),d(5));&#xA;  DH1line(theta[5], alfa[5], r[5], d[5], T56); // T56=DH1line(theta(6),alfa(6),r(6),d(6));&#xA;&#xA;  float Tw1[16], Tw2[16], Tw3[16], Tw4[16], Tw5[16], Tw6[16], Twt[16];&#xA;  MatrixMultiply(Twf, T01, 4, 4, 4, Tw1); // Tw1=Twf*T01;&#xA;  MatrixMultiply(Tw1, T12, 4, 4, 4, Tw2); // Tw2=Tw1*T12;&#xA;  MatrixMultiply(Tw2, T23, 4, 4, 4, Tw3); // Tw3=Tw2*T23;&#xA;  MatrixMultiply(Tw3, T34, 4, 4, 4, Tw4); // Tw4=Tw3*T34;&#xA;  MatrixMultiply(Tw4, T45, 4, 4, 4, Tw5); // Tw5=Tw4*T45;&#xA;  MatrixMultiply(Tw5, T56, 4, 4, 4, Tw6); // Tw6=Tw5*T56;&#xA;  MatrixMultiply(Tw6, Ttf, 4, 4, 4, Twt); // Twt=Tw6*Ttf;&#xA;  &#xA;  // calculate pos from transformation matrix&#xA;  tran2pos(Twt, Xfk); // Xfk=tran2pos(Twt);&#xA;  // Xfk(4:6)=Xfk(4:6)/pi*180;&#xA;  Xfk[3]=Xfk[3]/PI*180.0;&#xA;  Xfk[4]=Xfk[4]/PI*180.0;&#xA;  Xfk[5]=Xfk[5]/PI*180.0;&#xA;}&#xA;&#xA;void invtran(float* Titi, float* Titf)&#xA;{&#xA;  // finding the inverse of the homogeneous transformation matrix&#xA;  // first row&#xA;  Titf[0*4 + 0] = Titi[0*4 + 0];&#xA;  Titf[0*4 + 1] = Titi[1*4 + 0];&#xA;  Titf[0*4 + 2] = Titi[2*4 + 0];&#xA;  Titf[0*4 + 3] = -Titi[0*4 + 0]*Titi[0*4 + 3]-Titi[1*4 + 0]*Titi[1*4 + 3]-Titi[2*4 + 0]*Titi[2*4 + 3];&#xA;  // second row&#xA;  Titf[1*4 + 0] = Titi[0*4 + 1];&#xA;  Titf[1*4 + 1] = Titi[1*4 + 1];&#xA;  Titf[1*4 + 2] = Titi[2*4 + 1];&#xA;  Titf[1*4 + 3] = -Titi[0*4 + 1]*Titi[0*4 + 3]-Titi[1*4 + 1]*Titi[1*4 + 3]-Titi[2*4 + 1]*Titi[2*4 + 3];&#xA;  // third row&#xA;  Titf[2*4 + 0] = Titi[0*4 + 2];&#xA;  Titf[2*4 + 1] = Titi[1*4 + 2];&#xA;  Titf[2*4 + 2] = Titi[2*4 + 2];&#xA;  Titf[2*4 + 3] = -Titi[0*4 + 2]*Titi[0*4 + 3]-Titi[1*4 + 2]*Titi[1*4 + 3]-Titi[2*4 + 2]*Titi[2*4 + 3];&#xA;  // forth row&#xA;  Titf[3*4 + 0] = 0.0;&#xA;  Titf[3*4 + 1] = 0.0;&#xA;  Titf[3*4 + 2] = 0.0;&#xA;  Titf[3*4 + 3] = 1.0;&#xA;}&#xA;&#xA;void tran2pos(float* Ttp, float* Xtp)&#xA;{&#xA;  // pos from homogeneous transformation matrix&#xA;  Xtp[0] = Ttp[0*4 + 3];&#xA;  Xtp[1] = Ttp[1*4 + 3];&#xA;  Xtp[2] = Ttp[2*4 + 3];&#xA;  Xtp[4] = atan2(sqrt(Ttp[2*4 + 0]*Ttp[2*4 + 0] + Ttp[2*4 + 1]*Ttp[2*4 + 1]),Ttp[2*4 + 2]);&#xA;  Xtp[3] = atan2(Ttp[1*4 + 2]/sin(Xtp[4]),Ttp[0*4 + 2]/sin(Xtp[4]));&#xA;  Xtp[5] = atan2(Ttp[2*4 + 1]/sin(Xtp[4]),-Ttp[2*4 + 0]/sin(Xtp[4]));&#xA;}&#xA;&#xA;void pos2tran(float* Xpt, float* Tpt)&#xA;{&#xA;  // pos to homogeneous transformation matrix&#xA;  // first row&#xA;  Tpt[0*4 + 0] = cos(Xpt[3])*cos(Xpt[4])*cos(Xpt[5])-sin(Xpt[3])*sin(Xpt[5]);&#xA;  Tpt[0*4 + 1] = -cos(Xpt[3])*cos(Xpt[4])*sin(Xpt[5])-sin(Xpt[3])*cos(Xpt[5]);&#xA;  Tpt[0*4 + 2] = cos(Xpt[3])*sin(Xpt[4]);&#xA;  Tpt[0*4 + 3] = Xpt[0];&#xA;  // second row&#xA;  Tpt[1*4 + 0] = sin(Xpt[3])*cos(Xpt[4])*cos(Xpt[5])+cos(Xpt[3])*sin(Xpt[5]);&#xA;  Tpt[1*4 + 1] = -sin(Xpt[3])*cos(Xpt[4])*sin(Xpt[5])+cos(Xpt[3])*cos(Xpt[5]);&#xA;  Tpt[1*4 + 2] = sin(Xpt[3])*sin(Xpt[4]);&#xA;  Tpt[1*4 + 3] = Xpt[1];&#xA;  // third row&#xA;  Tpt[2*4 + 0] = -sin(Xpt[4])*cos(Xpt[5]);&#xA;  Tpt[2*4 + 1] = sin(Xpt[4])*sin(Xpt[5]);&#xA;  Tpt[2*4 + 2] = cos(Xpt[4]);&#xA;  Tpt[2*4 + 3] = Xpt[2];&#xA;  // forth row&#xA;  Tpt[3*4 + 0] = 0.0;&#xA;  Tpt[3*4 + 1] = 0.0;&#xA;  Tpt[3*4 + 2] = 0.0;&#xA;  Tpt[3*4 + 3] = 1.0;&#xA;}&#xA;&#xA;void DH1line(float thetadh, float alfadh, float rdh, float ddh, float* Tdh)&#xA;{&#xA;  // creats Denavit-Hartenberg homogeneous transformation matrix&#xA;  // first row&#xA;  Tdh[0*4 + 0] = cos(thetadh);&#xA;  Tdh[0*4 + 1] = -sin(thetadh)*cos(alfadh);&#xA;  Tdh[0*4 + 2] = sin(thetadh)*sin(alfadh);&#xA;  Tdh[0*4 + 3] = rdh*cos(thetadh);&#xA;  // second row&#xA;  Tdh[1*4 + 0] = sin(thetadh);&#xA;  Tdh[1*4 + 1] = cos(thetadh)*cos(alfadh);&#xA;  Tdh[1*4 + 2] = -cos(thetadh)*sin(alfadh);&#xA;  Tdh[1*4 + 3] = rdh*sin(thetadh);&#xA;  // third row&#xA;  Tdh[2*4 + 0] = 0.0;&#xA;  Tdh[2*4 + 1] = sin(alfadh);&#xA;  Tdh[2*4 + 2] = cos(alfadh);&#xA;  Tdh[2*4 + 3] = ddh;&#xA;  // forth row&#xA;  Tdh[3*4 + 0] = 0.0;&#xA;  Tdh[3*4 + 1] = 0.0;&#xA;  Tdh[3*4 + 2] = 0.0;&#xA;  Tdh[3*4 + 3] = 1.0;&#xA;}&#xA;&#xA;void MatrixPrint(float* A, int m, int n, String label)&#xA;{&#xA;  // A = input matrix (m x n)&#xA;  int i, j;&#xA;  Serial.println();&#xA;  Serial.println(label);&#xA;  for (i = 0; i &amp;lt; m; i++)&#xA;  {&#xA;    for (j = 0; j &amp;lt; n; j++)&#xA;    {&#xA;      Serial.print(A[n * i + j]);&#xA;      Serial.print(&amp;quot;\t&amp;quot;);&#xA;    }&#xA;    Serial.println();&#xA;  }&#xA;}&#xA;&#xA;void MatrixCopy(float* A, int n, int m, float* B)&#xA;{&#xA;  int i, j;&#xA;  for (i = 0; i &amp;lt; m; i++)&#xA;    for(j = 0; j &amp;lt; n; j++)&#xA;    {&#xA;      B[n * i + j] = A[n * i + j];&#xA;    }&#xA;}&#xA;&#xA;//Matrix Multiplication Routine&#xA;// C = A*B&#xA;void MatrixMultiply(float* A, float* B, int m, int p, int n, float* C)&#xA;{&#xA;  // A = input matrix (m x p)&#xA;  // B = input matrix (p x n)&#xA;  // m = number of rows in A&#xA;  // p = number of columns in A = number of rows in B&#xA;  // n = number of columns in B&#xA;  // C = output matrix = A*B (m x n)&#xA;  int i, j, k;&#xA;  for (i = 0; i &amp;lt; m; i++)&#xA;    for(j = 0; j &amp;lt; n; j++)&#xA;    {&#xA;      C[n * i + j] = 0;&#xA;      for (k = 0; k &amp;lt; p; k++)&#xA;        C[n * i + j] = C[n * i + j] + A[p * i + k] * B[n * k + j];&#xA;    }&#xA;}&#xA;&#xA;&#xA;//Matrix Addition Routine&#xA;void MatrixAdd(float* A, float* B, int m, int n, float* C)&#xA;{&#xA;  // A = input matrix (m x n)&#xA;  // B = input matrix (m x n)&#xA;  // m = number of rows in A = number of rows in B&#xA;  // n = number of columns in A = number of columns in B&#xA;  // C = output matrix = A+B (m x n)&#xA;  int i, j;&#xA;  for (i = 0; i &amp;lt; m; i++)&#xA;    for(j = 0; j &amp;lt; n; j++)&#xA;      C[n * i + j] = A[n * i + j] + B[n * i + j];&#xA;}&#xA;&#xA;&#xA;//Matrix Subtraction Routine&#xA;void MatrixSubtract(float* A, float* B, int m, int n, float* C)&#xA;{&#xA;  // A = input matrix (m x n)&#xA;  // B = input matrix (m x n)&#xA;  // m = number of rows in A = number of rows in B&#xA;  // n = number of columns in A = number of columns in B&#xA;  // C = output matrix = A-B (m x n)&#xA;  int i, j;&#xA;  for (i = 0; i &amp;lt; m; i++)&#xA;    for(j = 0; j &amp;lt; n; j++)&#xA;      C[n * i + j] = A[n * i + j] - B[n * i + j];&#xA;}&#xA;&#xA;&#xA;//Matrix Transpose Routine&#xA;void MatrixTranspose(float* A, int m, int n, float* C)&#xA;{&#xA;  // A = input matrix (m x n)&#xA;  // m = number of rows in A&#xA;  // n = number of columns in A&#xA;  // C = output matrix = the transpose of A (n x m)&#xA;  int i, j;&#xA;  for (i = 0; i &amp;lt; m; i++)&#xA;    for(j = 0; j &amp;lt; n; j++)&#xA;      C[m * j + i] = A[n * i + j];&#xA;}&#xA;&#xA;void MatrixScale(float* A, int m, int n, float k)&#xA;{&#xA;  for (int i = 0; i &amp;lt; m; i++)&#xA;    for (int j = 0; j &amp;lt; n; j++)&#xA;      A[n * i + j] = A[n * i + j] * k;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="28474" LastActivityDate="2021-04-22T09:11:18.940" Title="6DOF kinematic robotic arm programm" Tags="&lt;robotic-arm&gt;&lt;arduino&gt;&lt;kinematics&gt;&lt;python&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22075" PostTypeId="2" ParentId="22058" CreationDate="2021-04-22T12:49:42.210" Score="2" Body="&lt;p&gt;Jacobian matrix is used to describe the relationship between the &lt;code&gt;configuration space&lt;/code&gt; (space of joint angles) and the &lt;code&gt;task space&lt;/code&gt; (space of end-effector pose)&#xA;as follows:&lt;/p&gt;&#xA;&lt;h2&gt;&lt;span class=&quot;math-container&quot;&gt;$\textbf{$\dot{p}$} = \textbf{J(q)}\textbf{$\dot{q}$}$&lt;/span&gt;,&lt;/h2&gt;&#xA;&lt;p&gt;where &lt;span class=&quot;math-container&quot;&gt;$\textbf{J(q)}$&lt;/span&gt; is the Jacobian matrix, &lt;span class=&quot;math-container&quot;&gt;$\textbf{p}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\textbf{q}$&lt;/span&gt; are vectors represented for the end-effector pose and joint angles, respectively.&lt;/p&gt;&#xA;&lt;p&gt;Several tutorials:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://realitybytes.blog/2017/06/20/forward-and-inverse-kinematics-jacobians-and-differential-motion/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://realitybytes.blog/2017/06/20/forward-and-inverse-kinematics-jacobians-and-differential-motion/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://automaticaddison.com/the-ultimate-guide-to-jacobian-matrices-for-robotics/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://automaticaddison.com/the-ultimate-guide-to-jacobian-matrices-for-robotics/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;http://www8.tfe.umu.se/courses/elektro/RobotControl/Lecture07_5EL158.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://www8.tfe.umu.se/courses/elektro/RobotControl/Lecture07_5EL158.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;You can do further searching with keywords: Denavit–Hartenberg, kinematics modeling, etc.&lt;/p&gt;&#xA;" OwnerUserId="28502" LastEditorUserId="28502" LastEditDate="2021-04-23T06:55:06.420" LastActivityDate="2021-04-23T06:55:06.420" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="22076" PostTypeId="1" CreationDate="2021-04-24T11:10:58.107" Score="0" ViewCount="22" Body="&lt;p&gt;I have trouble understanding calculation sequences for RPY-transformation and Euler-transformation.&lt;br /&gt;&#xA;Let's assume that there are 3 (rotation/translation) instructions.&lt;br /&gt;&#xA;I will notate transformation matrix for instruction 1 as [1],&lt;br /&gt;&#xA;transformation matrix for instruction 2 as [2],&lt;br /&gt;&#xA;transformation matrix for instruction 3 as [3]&lt;/p&gt;&#xA;&lt;p&gt;In this situation when using RPY-method, calculation order will be [3][2][1] -&amp;gt; [3][2 * 1] -&amp;gt; [3 * 2 * 1].&lt;br /&gt;&#xA;First multiply [2] and [1], and then multiply [3]. Right?&lt;/p&gt;&#xA;&lt;p&gt;When using Euler-method, I am not sure what is correct order.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;[1][2][3] -&amp;gt; [1 * 2][3] -&amp;gt; [1 * 2 * 3]&lt;br /&gt;&#xA;First multiply [1] and [2], and then multiply [3]&lt;/li&gt;&#xA;&lt;li&gt;[3][2][1] -&amp;gt; [3 * 2][1] -&amp;gt; [3 * 2 * 1]&lt;br /&gt;&#xA;First multiply [3] and [2], and then multiply [1]&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;What is correct sequence when calculation Euler-method? Is it 1) or 2) ?&lt;br /&gt;&#xA;Also I think the resulting 4x4 matrix should be same whether I use RPY or Euler transformation. Is it correct?&lt;/p&gt;&#xA;" OwnerUserId="28510" LastActivityDate="2021-05-24T15:01:55.163" Title="calculation sequences when using RPY-transformation vs Euler-transformation" Tags="&lt;transformation&gt;&lt;matrix&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22077" PostTypeId="2" ParentId="22076" CreationDate="2021-04-24T14:10:37.560" Score="0" Body="&lt;p&gt;I was quite confused but now got an answer by myself.&lt;br /&gt;&#xA;Let's assume 3 instructions like below.&lt;br /&gt;&#xA;#1 rotation about world x axis(reference frame)&lt;br /&gt;&#xA;#2 rotation about world z axis(reference frame)&lt;br /&gt;&#xA;#3 rotation about world y axis(reference frame)&lt;/p&gt;&#xA;&lt;p&gt;When using RPY convention, you process in order of #1 -&amp;gt; #2 -&amp;gt; #3.&lt;br /&gt;&#xA;Then your matrix will be like [3][2][1]&lt;br /&gt;&#xA;because in absolute frame, we use pre-multiplication. So new matrix goes to the left side of an existing matrix.&lt;/p&gt;&#xA;&lt;p&gt;On the other hand, when using Euler convention, you process in order of #3 -&amp;gt; #2 -&amp;gt; #1.&lt;br /&gt;&#xA;In this case, matrix will also be like [3][2][1]&lt;br /&gt;&#xA;because in relative frame, we use post-multiplication. So new matrix goes to the right side of an existing matrix.&lt;/p&gt;&#xA;" OwnerUserId="28510" LastActivityDate="2021-04-24T14:10:37.560" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22078" PostTypeId="1" CreationDate="2021-04-24T16:22:18.417" Score="1" ViewCount="30" Body="&lt;p&gt;I am trying to calculate the derivative of the Jacobian matrix without using any symbolic methods or toolbox. The problem is that the calculation leads to a different result that the what it should be after manual differentiation. The method of calculation I am using for the derivative is the using the Hessian tensor &lt;span class=&quot;math-container&quot;&gt;$\dot J= (H(q) \overline \times_3 \dot q)$&lt;/span&gt; where &lt;span class=&quot;math-container&quot;&gt;$\overline \times _3$&lt;/span&gt; is the &lt;em&gt;n-mode vector product of a tensor&lt;/em&gt; as in [1]. The Hessians are computed as [2].&lt;/p&gt;&#xA;&lt;p&gt;The example I am using for the calculation is a double pendulum but with the second joint being about the x-axis (perpendicular to the first axis of rotation) such that the double pendulum rotates in 3-dimensions.&lt;/p&gt;&#xA;&lt;p&gt;Assume the Jacobian is given as:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;\begin{equation}&#xA;J_2=\begin{pmatrix} l_1cos(\alpha_1) &amp;amp; 0\\ 0 &amp;amp; l_2cos(\alpha_2)\\ l_1sin(\alpha_1)+l_2sin(\alpha_1)cos(\alpha_2) &amp;amp; l_2cos(\alpha_1)sin(\alpha_2)\\ 0 &amp;amp; cos(\alpha_1)\\ -1 &amp;amp; 0 \\0 &amp;amp; sin(\alpha_1)\end{pmatrix}&#xA;\end{equation}&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Starting from the given Jacobian the results of the Hessians are as follows:&#xA;&lt;span class=&quot;math-container&quot;&gt;\begin{align}&#xA;\frac{\partial^2X_2}{\partial \theta_1^2} &amp;amp;= \begin{pmatrix}\begin{pmatrix}0\\-1\\0\end{pmatrix} \times \begin{pmatrix}l_1cos(\alpha_1)\\0\\l_1sin(\alpha_1)+l_2sin(\alpha_1)cos(\alpha_2)\end{pmatrix} \\ 0 \\0\\0 \end{pmatrix} = \begin{pmatrix}-l_1sin(\alpha_1)-l_2sin(\alpha_1)cos(\alpha_2)\\0\\l_1cos(\alpha_1)\\0\\0\\0\end{pmatrix}\\&#xA;\frac{\partial^2X_2}{\partial \theta_1\theta_2} &amp;amp;= \begin{pmatrix}\begin{pmatrix}0\\-1\\0\end{pmatrix} \times \begin{pmatrix}0\\l_2cos(\alpha_2)\\l_2cos(\alpha_1)sin(\alpha_2)\end{pmatrix} \\ \begin{pmatrix}0\\-1\\0\end{pmatrix} \times \begin{pmatrix}cos(\alpha_1) \\0\\sin(\alpha_1) \end{pmatrix}\end{pmatrix} = \begin{pmatrix}-l_2cos(\alpha_1)sin(\alpha_2)\\0\\0\\-sin(\alpha_1)\\0\\cos(\alpha_1)\end{pmatrix}\\&#xA;\frac{\partial^2X_2}{\partial \theta_2^2} &amp;amp;= \begin{pmatrix}\begin{pmatrix}cos(\alpha_1)\\0\\sin(\alpha_1)\end{pmatrix} \times \begin{pmatrix}0\\l_2cos(\alpha_2)\\l_2cos(\alpha_1)sin(\alpha_2)\end{pmatrix} \\ 0\\0\\0 \end{pmatrix} = \begin{pmatrix}-l_2cos(\alpha_2)sin(\alpha_1)\\-l_2cos^2(\alpha_1)sin(\alpha_2)\\l_2cos(\alpha_1)cos(\alpha_2)\\0\\0\\0\end{pmatrix}&#xA;\end{align}&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;The Hessian Tensor becomes:&#xA;&lt;span class=&quot;math-container&quot;&gt;\begin{align}&#xA;H_1 &amp;amp;= \begin{pmatrix}-l_1sin(\alpha_1)-l_2sin(\alpha_1)cos(\alpha_2) &amp;amp; -l_2cos(\alpha_1)sin(\alpha_2)\\ -l_2cos(\alpha_1)sin(\alpha_2)&amp;amp; -l_2cos(\alpha_2)sin(\alpha_1)\end{pmatrix}\\&#xA;H_2 &amp;amp;= \begin{pmatrix}0&amp;amp;0\\0&amp;amp;l_2cos^2(\alpha_1)sin(\alpha_2)\end{pmatrix}\\&#xA;H_3 &amp;amp;= \begin{pmatrix}l_1cos(\alpha_1) &amp;amp;0\\0 &amp;amp; l_2cos(\alpha_1)cos(\alpha_2)\end{pmatrix}\\&#xA;H_4 &amp;amp;= \begin{pmatrix}0 &amp;amp; -sin(\alpha_1)\\-sin(\alpha_1)&amp;amp;0\end{pmatrix}\\&#xA;H_5 &amp;amp;= \begin{pmatrix}0&amp;amp;0\\0&amp;amp;0\end{pmatrix}\\&#xA;H_6 &amp;amp;= \begin{pmatrix}0&amp;amp;cos(\alpha_1)\\cos(\alpha_1)&amp;amp;0\end{pmatrix}&#xA;\end{align}&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;This results in:&#xA;&lt;span class=&quot;math-container&quot;&gt;\begin{equation}&#xA;\dot J = \begin{pmatrix} (-l_1sin(\alpha_1)-l_2sin(\alpha_1)cos(\alpha_2))\dot \alpha_1 + -l_2cos(\alpha_1)sin(\alpha_2)\dot \alpha_2 &amp;amp; -l_2cos(\alpha_1)sin(\alpha_2)\dot \alpha_1 + -l_2cos(\alpha_2)sin(\alpha_1)\dot \alpha_2\\ 0 &amp;amp; l_2cos^2(\alpha_1)sin(\alpha_2)\dot \alpha_2\\ l_1cos(\alpha_1) \dot \alpha_1 &amp;amp; l_2cos(\alpha_1)cos(\alpha_2)\dot \alpha_2\\ -sin(\alpha_1)\dot \alpha_2 &amp;amp; -sin(\alpha_1)\dot \alpha_1 \\ 0 &amp;amp;0 \\ cos(\alpha_1)\dot\alpha_2 &amp;amp; cos(\alpha_1)\dot \alpha_2\end{pmatrix}&#xA;\end{equation}&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Am I doing something wrong with the n-mode vector product of a tensor? I don't think the Hessian are wrong since the 2nd column in the rotation term of the &lt;span class=&quot;math-container&quot;&gt;$\dot J$&lt;/span&gt; is right. Any help would be appreciated.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.kolda.net/publication/TensorReview.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;1&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.researchgate.net/profile/Arjang-Hourtash/publication/4201008_The_kinematic_Hessian_and_higher_derivatives/links/56ab204708aeadd1bdcb7d44/The-kinematic-Hessian-and-higher-derivatives.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;2&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="27347" LastEditorUserId="27347" LastEditDate="2021-04-25T09:17:23.870" LastActivityDate="2021-04-25T09:17:23.870" Title="Derivative of the Jacobian using Hessian" Tags="&lt;forward-kinematics&gt;&lt;jacobian&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22079" PostTypeId="2" ParentId="230" CreationDate="2021-04-24T17:51:32.293" Score="0" Body="&lt;p&gt;ROS runs amazingly well on my &amp;quot;Raspberry PI 3B+&amp;quot; with any of the below images from Ubiquity robotics page.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://downloads.ubiquityrobotics.com/pi.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://downloads.ubiquityrobotics.com/pi.html&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;It is ROS Kinetic and you can install other packages like Gazebo as well.&lt;/p&gt;&#xA;" OwnerUserId="28513" LastActivityDate="2021-04-24T17:51:32.293" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22080" PostTypeId="1" CreationDate="2021-04-24T19:14:42.480" Score="0" ViewCount="5" Body="&lt;p&gt;I am doing a project that uses TensorFlow object Detection. What I am making is a visor that can help people with blindness. It uses a Jetson Nano and a Camera and Ultra Sonic Sensor. It is like Autonomous Driving and uses object detection to tell people to turn left or right to avoid obstacles. Two servos are connected to each side of the visor which can inform people to turn left or right. If you can help and want credit please reply so I can contact you and collaborate. Thank you for your time.&lt;/p&gt;&#xA;" OwnerUserId="28515" LastActivityDate="2021-04-24T19:14:42.480" Title="Help with TensorFlow Object Detection Project" Tags="&lt;autonomous-car&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="22081" PostTypeId="1" CreationDate="2021-04-25T00:49:05.703" Score="1" ViewCount="21" Body="&lt;p&gt;I have run a code to extract features from lidar scans like poles and facades, and I created the reference map just concatenating results from each scan (i.e local map) now my question is;&#xA;How can I run map matching algo to get the robots poses?&lt;/p&gt;&#xA;" OwnerUserId="28109" LastActivityDate="2021-04-25T01:31:12.203" Title="How to perform map matching algo using lidar scan s" Tags="&lt;localization&gt;&lt;lidar&gt;&lt;mapping&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="22082" PostTypeId="2" ParentId="22081" CreationDate="2021-04-25T01:31:12.203" Score="1" Body="&lt;p&gt;Concatenation will work only if your positioning/localization is super precise which is seldom the case. What you want to be doing is &lt;a href=&quot;https://pcl.readthedocs.io/en/latest/registration_api.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;scan registration&lt;/a&gt;. ICP and NDT are the two most widely used registration techniques which you can speed up by matching only the features you are extracting. In scan registration, your sensor gets a scan (from which you will extract features) and match them to the next scan which will give you a pose between them. So if you know your starting pose, you can get your new pose!&lt;/p&gt;&#xA;&lt;p&gt;Of course you will find a lot of resources using C/C++, but PCL has a &lt;a href=&quot;https://github.com/strawlab/python-pcl/tree/master/examples/official/Registration&quot; rel=&quot;nofollow noreferrer&quot;&gt;python version of icp&lt;/a&gt; which I haven't used. So if you do end up using it, please let us know!&lt;/p&gt;&#xA;&lt;p&gt;Finally, if you are working within ROS, there are several packages/projects that can perform SLAM for you like &lt;a href=&quot;http://introlab.github.io/rtabmap/&quot; rel=&quot;nofollow noreferrer&quot;&gt;rtabmap&lt;/a&gt;, &lt;a href=&quot;http://wiki.ros.org/hector_mapping&quot; rel=&quot;nofollow noreferrer&quot;&gt;hector_mapping&lt;/a&gt;, etc.&lt;/p&gt;&#xA;" OwnerUserId="27064" LastActivityDate="2021-04-25T01:31:12.203" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="22083" PostTypeId="1" CreationDate="2021-04-25T03:25:00.830" Score="1" ViewCount="15" Body="&lt;p&gt;I originally thought this was a really simple problem. However, to my surprise I did not find any resource talking about it, the only thing I found was that using Matlab's nonlinear MPC toolbox you could do it. I thus tried to solve it myself. I tried to use a trapezoidal direct collocation  at each step with a quadratic cost on both the state error and control, and I got rid of the terminal state constraint. I then noticed that it would not be able to swing it up. Also I noticed that without the terminal state constraint, even the planned state trajectory will not swing the pole to the top.&lt;/p&gt;&#xA;&lt;p&gt;This is to me a surprising result. Thus, I want to ask if this is really the case or would this be due to a bug in my code? And how would people usually solve this problem using MPC?&lt;/p&gt;&#xA;&lt;p&gt;My implementation is attached below. I used Matlab to program it since I wanted to used fmincon, instead of spicy.minimize.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;%% Cartpole Parameters&#xA;m1=1;&#xA;m2=0.3;&#xA;l=0.5;&#xA;g=9.81;&#xA;&#xA;% get next state&#xA;state = [0; 0; 0; 0];&#xA;tspan = [0, 0.02];&#xA;states = [state];&#xA;&#xA;%% Optimization Configurations&#xA;N = 100;&#xA;dt = 0.02;&#xA;T = 2.0;&#xA;&#xA;x0 = [];&#xA;for i = 0:N&#xA;    xtmp = i*dt/T*([1.0; pi; 0.0; 0.0] - state) + state;&#xA;    x0 = [x0; xtmp];&#xA;end&#xA;&#xA;init_guess = [x0; zeros(N+1, 1)];&#xA;&#xA;&#xA;%% MPC&#xA;for i = 1:100&#xA;    [control, planned_states] = get_control(state, init_guess);&#xA;    next_state = planned_states(5:8)';&#xA;    states = [states, next_state'];&#xA;    state = next_state';&#xA;    disp(i)&#xA;    init_guess = [next_state'; planned_states(9:end); 1.0; pi; 0.0; 0.0; control(2:end); 0.0];&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;the &lt;code&gt;get_control&lt;/code&gt; function is defined as&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;function [control, states] = get_control(x_init, x0)&#xA;    %% Optimization Configurations&#xA;    N = 100;&#xA;&#xA;&#xA;    %% Set up objective&#xA;    q1 = ones(1, 4*N+4);&#xA;    q1(1:4) = 0.5;&#xA;    q1(end-3:end) = 100.5;&#xA;    Q1 = diag(q1);&#xA;&#xA;    q2 = ones(1, N+1);&#xA;    q2(1) = 0.5;&#xA;    q2(end) = 0.5;&#xA;    Q2 = 0.01*diag(q2);&#xA;    &#xA;    x_target = [1.0; pi; 0.0; 0.0];&#xA;    x_targets = repmat(x_target, N+1, 1);&#xA;    u_targets = zeros(N+1, 1);&#xA;    &#xA;    targets = [x_targets; u_targets];&#xA;&#xA;    Q = blkdiag(Q1, Q2);&#xA;&#xA;    fun = @(x)(x-targets).'*Q*(x-targets);&#xA;&#xA;&#xA;    %% Set up lower and upper bound&#xA;    bound_piece = [10; 10; 10; 10];&#xA;    state_bnd = repmat(bound_piece, N+1, 1);&#xA;    control_bnd = 20*ones(N+1, 1);&#xA;&#xA;    ub = [state_bnd; control_bnd];&#xA;    lb = -ub;&#xA;&#xA;&#xA;    %% Set initial and terminal condition&#xA;    I = eye(4);&#xA;    zeros1 = zeros(4, 4*N+N+1);&#xA;    left1 = [I, zeros1];&#xA;    Aeq = left1;&#xA;    beq = x_init;&#xA;&#xA;&#xA;    %% Collocation Constraints&#xA;    nonlcon = @collocateConstraint;&#xA;&#xA;&#xA;    %% fmincon&#xA;    A = [];&#xA;    b = [];&#xA;&#xA;    options = optimoptions(@fmincon,'Algorithm','sqp','MaxIterations',100);&#xA;    x = fmincon(fun, x0, A, b, Aeq, beq, lb, ub, nonlcon, options);&#xA;    &#xA;    control = x(405:end);&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;and the nonlinear constraints &lt;code&gt;collocateConstraint&lt;/code&gt; are defined as&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;function [c, ceq] = collocateConstraint(x)&#xA;    dt = 0.02;&#xA;    N = 100;&#xA;    &#xA;    ceq = [];&#xA;    &#xA;    for i = 0:N-1&#xA;        x_i = x((i*4+1):(i+1)*4);&#xA;        x_ip1 = x((i+1)*4+1:((i+2)*4));&#xA;        &#xA;        u_i = x(4*N+4+i+1);&#xA;        u_ip1 = x(4*N+4+i+2);&#xA;        &#xA;        m1=1;&#xA;        m2=0.3;&#xA;        l=0.5;&#xA;        g=9.81;&#xA;&#xA;        denominatori = m1 + m2*(sin(x_i(2))^2);&#xA;&#xA;        Ai = [x_i(3); &#xA;              x_i(4); &#xA;              (l*m2*sin(x_i(2))*(x_i(4)^2) + m2*g*cos(x_i(2))*sin(x_i(2))) / denominatori;&#xA;              -(l*m2*cos(x_i(2))*sin(x_i(2))*(x_i(4)^2) + (m1 + m2)*g*sin(x_i(2))) / (l*denominatori)&#xA;            ];&#xA;&#xA;        Bi = [0; &#xA;             0;&#xA;             1 / denominatori;&#xA;             -cos(x_i(2))/(l*denominatori)&#xA;            ];&#xA;        &#xA;        denominatorip1 = m1 + m2*(sin(x_ip1(2))^2);&#xA;&#xA;        Aip1 = [x_ip1(3); &#xA;                x_ip1(4); &#xA;                (l*m2*sin(x_ip1(2))*(x_ip1(4)^2) + m2*g*cos(x_ip1(2))*sin(x_ip1(2))) / denominatorip1;&#xA;                -(l*m2*cos(x_ip1(2))*sin(x_ip1(2))*(x_ip1(4)^2) + (m1 + m2)*g*sin(x_ip1(2))) / (l*denominatorip1)&#xA;            ];&#xA;&#xA;        Bip1 = [0; &#xA;                0;&#xA;                1 / denominatorip1;&#xA;                -cos(x_ip1(2))/(l*denominatorip1)&#xA;            ];&#xA;        &#xA;        ceqi = x_ip1 - x_i - (dt/2)*(Bi*u_i + Bip1*u_ip1) - (dt/2)*(Ai + Aip1);&#xA;        &#xA;        ceq = [ceq; ceqi];&#xA;    end&#xA;    &#xA;    c = [];&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Thanks in advance.&lt;/p&gt;&#xA;" OwnerUserId="28085" LastActivityDate="2021-04-25T03:25:00.830" Title="How to perform a cart-pole swing up task using MPC?" Tags="&lt;control&gt;&lt;optimization&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="22085" PostTypeId="1" CreationDate="2021-04-25T07:42:32.183" Score="0" ViewCount="23" Body="&lt;p&gt;My project is to be able to compute my linear speed on my scooter only with my IMU.&#xA;I have a IMU build with my arduino which is in my backpack.&lt;/p&gt;&#xA;&lt;p&gt;I want first to compensate the acceleration measurement due to my body rotation. For example when I look left of right my backpack is moving and I want to compensate that.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/rZg9l.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/rZg9l.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;At the time t I have:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;the rotation matrix R(t) and R(t-1)&lt;/li&gt;&#xA;&lt;li&gt;the angular velocity (p,q,r).&lt;/li&gt;&#xA;&lt;li&gt;the position of my imu from my body center ( dP = (-xi,0,-zi))&lt;/li&gt;&#xA;&lt;li&gt;between two measurements there is dTe seconde&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I can create a anti skew symmetric matrix Ran from p,q,r ( Ras(p,q,r))&#xA;For me, my position IMU at t : 0P = Ras(p,q,r) * dP&#xA;So my speed is : 0V = 0P / dTe ?&lt;/p&gt;&#xA;&lt;p&gt;Can someone tell me if I do wrong until now?&lt;/p&gt;&#xA;" OwnerUserId="28462" LastActivityDate="2021-04-25T07:42:32.183" Title="How to compute linear speed on scooter without gps and wheel odometry" Tags="&lt;imu&gt;&lt;gyroscope&gt;&lt;accelerometer&gt;&lt;rotation&gt;&lt;matrix&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22086" PostTypeId="1" CreationDate="2021-04-25T12:54:59.663" Score="0" ViewCount="49" Body="&lt;p&gt;I design a solar tracking mechanisim. You can see the very undetailed representation in the pic. For choosing a servo motor how can I calculate the torque etc?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Gm8bK.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Gm8bK.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="28518" LastActivityDate="2021-05-04T02:19:58.170" Title="How to choose a servo motor for solar tracking mechanism?" Tags="&lt;servomotor&gt;&lt;mechanism&gt;&lt;torque&gt;&lt;tracks&gt;" AnswerCount="2" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="22087" PostTypeId="1" AcceptedAnswerId="22127" CreationDate="2021-04-25T17:07:05.300" Score="1" ViewCount="36" Body="&lt;p&gt;sorry for the long post, just want to make sure i include all the details.&lt;/p&gt;&#xA;&lt;p&gt;I am working on learning ROS2 by building a robot which maps and navigates my apartment.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;I'm using the RPLidar A1 sensor with the &lt;code&gt;RPLidar&lt;/code&gt; package&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;a Robot Create 2 as the chassis with the &lt;code&gt;create_robot&lt;/code&gt; package&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;code&gt;nav2&lt;/code&gt; for navigation&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&lt;code&gt;slam-toolbox&lt;/code&gt; for mapping&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;and running everything off of a Raspberry Pi 4 4GB with Ubuntu Mate&lt;/p&gt;&#xA;&lt;p&gt;Currently, I am able to get LIDAR readings to successfully be viewed in RVIZ. I can also get one or two frames of a map to be built. When the robot starts to move, the lidar readings update, but the map itself does not. However, i continue to 'receive' map updates at about 1 every 1.5 seconds.&lt;/p&gt;&#xA;&lt;p&gt;Here are images from rviz showing the moving scan but with the non-moving map:&#xA;&lt;a href=&quot;https://imgur.com/a/acfHs4I&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://imgur.com/a/acfHs4I&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I'm also getting a few errors, from RVIZ i am getting:&#xA;&lt;code&gt;[rviz]: Message Filter dropping message: frame 'map' at time 1619194935.882 for reason 'Unknown'&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;from nav2, I am getting&#xA;&lt;code&gt;[global_costmap.global_costmap_rclcpp_node]: Message Filter dropping message: frame 'laser' at time 1619194959.629 for reason 'Unknown'&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;My frame map looks like this (Most of the frames are created by the &lt;code&gt;create_robot&lt;/code&gt; package):&#xA;&lt;a href=&quot;https://imgur.com/a/WFDXKxj&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://imgur.com/a/WFDXKxj&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I suspect my issue is with my transforms, either they're configured completely wrong, or there is something small&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;slam_toolbox&lt;/code&gt; does the transform from map -&amp;gt; odom&lt;/li&gt;&#xA;&lt;li&gt;the &lt;code&gt;create_robot&lt;/code&gt; package has other transforms from base_link to wheels, bumpers, etc and it also publishes odom data&lt;/li&gt;&#xA;&lt;li&gt;using tf2, i'm publishing a transform between base_link and laser and then laser to base_scan.&lt;/li&gt;&#xA;&lt;li&gt;I am also creating a transform from odom to base_footprint because of a ros2 navigation course i was taking on the construct.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Has anyone seen this type of error before? I feel like I am most of the way to the solution but i'm missing something easy&lt;/p&gt;&#xA;" OwnerUserId="28520" LastActivityDate="2021-05-04T15:31:44.150" Title="Frozen map + 'Message filter dropping' - Issues with mapping and navigation in ROS2 Foxy" Tags="&lt;slam&gt;&lt;navigation&gt;&lt;mapping&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22088" PostTypeId="2" ParentId="22086" CreationDate="2021-04-25T17:27:42.390" Score="0" Body="&lt;p&gt;Most solar tracking rigs only move along one axis because the efficiency savings from moving along 2 doesn't make up for the energy losses of having 2 motors.&lt;/p&gt;&#xA;&lt;p&gt;If you're just doing this for fun, then you have questions to ask yourself:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;How heavy is the system that you're moving?&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Is it so heavy that a normal hobby servo couldn't handle it?&lt;/li&gt;&#xA;&lt;li&gt;Is this application better suited for something like a large brushless motor &amp;amp; an O-Drive?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;You really didn't provide a ton of detail here, so it's hard to help with motor selection.&lt;/p&gt;&#xA;" OwnerUserId="28520" LastActivityDate="2021-04-25T17:27:42.390" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="22089" PostTypeId="2" ParentId="18463" CreationDate="2021-04-25T17:51:43.933" Score="1" Body="&lt;p&gt;One way to improve GPS accuracy is RTK GPS.   RTK GPS is what some of these robot lawnmowers use because of its centimeters accuracy.&#xA;&lt;a href=&quot;https://learn.sparkfun.com/tutorials/what-is-gps-rtk/all&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://learn.sparkfun.com/tutorials/what-is-gps-rtk/all&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="23868" LastActivityDate="2021-04-25T17:51:43.933" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22090" PostTypeId="1" AcceptedAnswerId="22091" CreationDate="2021-04-25T22:04:17.737" Score="1" ViewCount="21" Body="&lt;p&gt;I would like to know if I can find the end effector position according to joint velocities. I have found joint velocities of a manipulator. I need to check if it is correct. So I need to know that how can I combine joints veloties and the end effector postion. Thank you in advance.&lt;/p&gt;&#xA;" OwnerUserId="28521" LastActivityDate="2021-04-26T14:01:05.453" Title="Can I find the end effector position from joint velocities?" Tags="&lt;jacobian&gt;" AnswerCount="1" CommentCount="1" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="22091" PostTypeId="2" ParentId="22090" CreationDate="2021-04-26T00:06:16.810" Score="2" Body="&lt;p&gt;No, you cannot determine the end effector position by using only joint velocities.  If you use the Jacobian matrix, you can determine the velocity vector of the end effector given a set of joint velocities.  If you have a finite time over which the joint velocities were measured, you can know how much the end effector has moved in that short time.  But unless you have a starting position, the joint velocities are insufficient for determining end effector position.&lt;/p&gt;&#xA;&lt;p&gt;However, if you do know the forward kinematics as well as the joint velocities, you can use &lt;span class=&quot;math-container&quot;&gt;$\dot{x} = \mathrm{J} \dot{\theta}$&lt;/span&gt; to determine incremental end effector motion.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastEditorUserId="11125" LastEditDate="2021-04-26T14:01:05.453" LastActivityDate="2021-04-26T14:01:05.453" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="22092" PostTypeId="2" ParentId="230" CreationDate="2021-04-26T01:10:49.670" Score="0" Body="&lt;p&gt;As of 2020/2021, the answer is yes, ROS runs on Raspberry Pi.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://roboticsbackend.com/install-ros2-on-raspberry-pi/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://roboticsbackend.com/install-ros2-on-raspberry-pi/&lt;/a&gt;&#xA;&lt;a href=&quot;https://www.youtube.com/watch?v=AmuLiA840fA&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=AmuLiA840fA&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Both of these resources use Ubuntu; RaspberryPi is a first class target for Ubuntu now.  &lt;a href=&quot;https://ubuntu.com/raspberry-pi&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://ubuntu.com/raspberry-pi&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="24763" LastActivityDate="2021-04-26T01:10:49.670" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22094" PostTypeId="2" ParentId="20373" CreationDate="2021-04-26T13:24:01.767" Score="0" Body="&lt;p&gt;First some notes:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;RRT* is not an optimal algorithm, it just tends to converge to the optimal path as time approaches infinity. Similarly, it is not guaranteed that it will find a path (even though it usually finds it with enough time). In other words it is a probabilistically complete algorithm.&lt;/li&gt;&#xA;&lt;li&gt;A*-derivates are resolution complete. If the resolution is low enough to find a path, it will find it, and it will be the optimal path as long as a) the heuristic is admissible (never overestimates the real distance to the goal) and b) consistent (the heuristic of the goal node is 0 and the triangle inequality is fulfilled).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;In my experience, I would encourage you to deep further into A* derived planners for your use-case. More specifically, take a look at &lt;em&gt;Hybrid A&lt;/em&gt;* which takes into account continuous values within the discrete grid, thus allowing motion constraints to be taken into account.&lt;/p&gt;&#xA;&lt;p&gt;Take this paper in which Hybrid A* is adapted to work in the 3D (underwater) space with AUV constraints, for example. The algorithm (for 2D) is explained there as well:&#xA;&lt;a href=&quot;https://www.mdpi.com/1424-8220/21/4/1152&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.mdpi.com/1424-8220/21/4/1152&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Hope this helps.&lt;/p&gt;&#xA;" OwnerUserId="19554" LastActivityDate="2021-04-26T13:24:01.767" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22095" PostTypeId="1" CreationDate="2021-04-26T18:04:05.350" Score="0" ViewCount="19" Body="&lt;p&gt;assume we have maximum angular velocity and maximum angular velocity for each joint in 6 DOF manipulator.&#xA;now how can we calculate maximum velocity and acceleration of end effector at any path planing?&lt;/p&gt;&#xA;" OwnerUserId="26539" LastActivityDate="2021-04-26T18:04:05.350" Title="velocity and acceleration of end effector" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;&lt;manipulator&gt;&lt;jacobian&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="22096" PostTypeId="1" CreationDate="2021-04-27T00:59:52.777" Score="0" ViewCount="15" Body="&lt;p&gt;Given a mobile robot, running ROS, with a Lidar on it, I've experimented quite a bit with using gmapping etc for building a map, and AMCL for localization, and movebase for navigating.&lt;/p&gt;&#xA;&lt;p&gt;I am sure there are other advanced algorithms for navigation, or obstacle avoidance or mapping that use Lidar data in a totally different way.&lt;/p&gt;&#xA;&lt;p&gt;I've been plumbing the literature kind of randomly for some interesting starting points. Can you suggest places where I can look?&lt;/p&gt;&#xA;&lt;p&gt;For example, I can imagine an algorithm which given one lidar scan of the surrounding can create an estimated map of locations and shapes of obstacles arranged in the robot's own coordinate system. I could imaging a series of such scans allowing that estimated map to be made more accurate and estimate which of the targets around it are moving. That's just an intuitive idea. But I know ideas like this must exist in the literature.&lt;/p&gt;&#xA;&lt;p&gt;Thanks for any tips or pointers!&lt;/p&gt;&#xA;" OwnerUserId="17190" LastActivityDate="2021-04-27T00:59:52.777" Title="How else can we use Lidar data?" Tags="&lt;lidar&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22097" PostTypeId="1" CreationDate="2021-04-27T04:24:14.417" Score="0" ViewCount="32" Body="&lt;p&gt;I realized an analisis of inverse Kinematics but I couldnt solver the equations that I find.&#xA;the robot is RRR&#xA;I believe that this problem have solution however I didnt find in the web :( if somebody know where check this problem please say me&#xA;&lt;a href=&quot;https://i.stack.imgur.com/V13TA.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/V13TA.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="28531" LastEditorUserId="28531" LastEditDate="2021-04-27T04:32:24.900" LastActivityDate="2021-04-27T04:32:24.900" Title="inverse kinematics robot RRR" Tags="&lt;robotic-arm&gt;&lt;kinematics&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="22098" PostTypeId="1" CreationDate="2021-04-27T11:06:57.117" Score="0" ViewCount="19" Body="&lt;p&gt;Suppose I want to train butterfly robot with reinforcement learning. Which environment can I use? Does ROS support aerodynamics?&lt;/p&gt;&#xA;&lt;p&gt;Which tools are suitable?&lt;/p&gt;&#xA;" OwnerUserId="9723" LastActivityDate="2021-04-27T11:06:57.117" Title="How to train butterfly robot?" Tags="&lt;ros&gt;&lt;reinforcement-learning&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22099" PostTypeId="1" CreationDate="2021-04-27T13:06:37.193" Score="0" ViewCount="46" Body="&lt;p&gt;I am trying to optimize a pose graph I created in MATLAB using either the &lt;code&gt;optimizePoses(viewSet)&lt;/code&gt;-function on the imageViewSet that I have or the &lt;code&gt;optimizePoseGraph(poseGraph)&lt;/code&gt;-function after converting that imageViewSet to a poseGraph using &lt;code&gt;createPoseGraph(vSet)&lt;/code&gt;.&#xA;Both functions do not optimize the pose graph correctly.&lt;br /&gt;&#xA;This is the uncorrected pose graph, with loop closures in red:&#xA;&lt;a href=&quot;https://i.stack.imgur.com/b4Idp.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/b4Idp.png&quot; alt=&quot;uncorrected pose graph&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;and this is the pose graph after the optimization:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/UL1qn.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/UL1qn.png&quot; alt=&quot;optimized pose graph&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Clearly, the optimization is not correct. I used a dataset from Sensefly, and you can look at the &amp;quot;ground-truth&amp;quot; here: &lt;a href=&quot;https://senseflycom.s3.amazonaws.com/datasets/small-village-merlishachen/postflight-report/merlischachen_report.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://senseflycom.s3.amazonaws.com/datasets/small-village-merlishachen/postflight-report/merlischachen_report.pdf&lt;/a&gt;&lt;br /&gt;&#xA;As you see, the UAV flew some kind of a grid-trajectory.&lt;br /&gt;&#xA;I don't have a real clue where to start looking for the problem. There seems to be an issue with the distribution of the error over all poses.&#xA;The graph was created using visual odometry, i. e. matching features and calculating and decomposing homographies between consecutive images.&lt;/p&gt;&#xA;&lt;p&gt;Can anyone point me in the right direction?&lt;br /&gt;&#xA;If you need more information, feel free to ask.&lt;/p&gt;&#xA;" OwnerUserId="28535" LastActivityDate="2021-04-27T13:06:37.193" Title="Pose-Graph Optimization in MATLAB does not give expected results" Tags="&lt;slam&gt;&lt;visual-odometry&gt;" AnswerCount="0" CommentCount="6" ContentLicense="CC BY-SA 4.0" />
  <row Id="22100" PostTypeId="1" AcceptedAnswerId="22101" CreationDate="2021-04-28T11:56:54.563" Score="0" ViewCount="58" Body="&lt;p&gt;I'm getting started with robotics, as a side project while I'm still studying, I'm taking mechatronics at the moment, with prior knowledge of coding i learned a little bit of python and i have it easy while learning new languages, so i wanted to know what language should I start with on robotics, i plan on using arduino boards, i hear they use C and C++ i also researched that C is faster and more efficient than C++ tho it's harder to right code in since I don't know much about either Wich one should I be be learning to start with robotics?&lt;/p&gt;&#xA;" OwnerUserId="28542" LastActivityDate="2021-04-29T05:47:08.760" Title="Getting started with robotics" Tags="&lt;programming-languages&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="22101" PostTypeId="2" ParentId="22100" CreationDate="2021-04-28T16:10:51.787" Score="0" Body="&lt;p&gt;To start learning robotic, the first thing you need to learn is the robotic and control it self.&lt;/p&gt;&#xA;&lt;p&gt;About programming language, you actually can use C, C++ and Python (three most common language in robotic).&lt;/p&gt;&#xA;&lt;p&gt;C and C++ will be used together, so learn both. But if you want to reduce the workload on programming and more focus on hardware and robotic control etc., you can use python like I did.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Upside of C &amp;amp; C++&lt;/strong&gt; :&lt;/p&gt;&#xA;&lt;p&gt;You can achieve real time control&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Downside&lt;/strong&gt; :&lt;/p&gt;&#xA;&lt;p&gt;Take a lot more effort in programming side, i.e. you need to create your own function for matrix operation&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Upside of Python&lt;/strong&gt; :&lt;/p&gt;&#xA;&lt;p&gt;Reducing work load on programming side&lt;/p&gt;&#xA;&lt;p&gt;Easier if u wanna implement image processing in robotic&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Downside&lt;/strong&gt; :&lt;/p&gt;&#xA;&lt;p&gt;Slower process, unlikely to achieve real time control performance&lt;/p&gt;&#xA;" OwnerUserId="22800" LastEditorUserId="22800" LastEditDate="2021-04-29T05:47:08.760" LastActivityDate="2021-04-29T05:47:08.760" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="22103" PostTypeId="1" CreationDate="2021-04-29T07:37:33.317" Score="0" ViewCount="15" Body="&lt;p&gt;I'm a completely beginner with pixhawk and MAVLink. So I want MAVLink (via AP Mission Planner) to send vehicle data e.g. attitude etc. in real-time to a third-party system that has a built-in propietary software, but it will come with SDK in C language.&lt;/p&gt;&#xA;&lt;p&gt;Do I need to make an interface between Mission Planner and the third system? Or is there any way to stream the MAVLink data directly?&lt;/p&gt;&#xA;&lt;p&gt;I would appreciate any clue. Thanks!&lt;/p&gt;&#xA;" OwnerUserId="28544" LastActivityDate="2021-04-29T07:37:33.317" Title="MAVLink data stream to third-party system" Tags="&lt;control&gt;&lt;c&gt;&lt;mavlink&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22104" PostTypeId="1" CreationDate="2021-04-29T12:08:44.970" Score="0" ViewCount="50" Body="&lt;p&gt;I have two robots, I wish for the second robot to follow the first one while keeping a constant distance &lt;code&gt;d_safe&lt;/code&gt; between them. I am trying to implement a PID controller that takes as input the current distance between the second robot and the first one and then returns the second robot's velocity. I need help with the mapping of the information provided by the PID to the velocity. I can measure the current distance between the two robots at any time. Approaches I have tried in vain:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;using the error, &lt;code&gt;e(t)&lt;/code&gt; provided by the PID as the acceleration of the following robot over time. This seemed to me as the most appealing approach, however, its main flaws include the second robot reversing when the acceleration turns out to be negative for a given period. I wish to avoid reversing and backward motion. However, stopping is fine. So let's say it's a stop-go system.&#xA;used velocity equation:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;code&gt;v2 = v2 + e(t) * dt&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;where &lt;code&gt;dt&lt;/code&gt; is the change in time and &lt;code&gt;v2&lt;/code&gt; is the velocity of the second robot that is following.&lt;/p&gt;&#xA;&lt;ol start=&quot;2&quot;&gt;&#xA;&lt;li&gt;I tried setting the absolute value of the error as the velocity and only reduce the velocity component by this much if and only if the velocity remains greater or equal to zero if necessary (robots getting too close to each other). But with this approach I can never reach my desired distance between robots especially when the velocity of the first vehicle is smaller than the distance I wish.&#xA;So any approach, modification suggestions are all appreciated in advance. Implementation tests being performed in python - for what it is worth. Thanks. If there's something unclear, please let me know.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="28547" LastEditorUserId="26747" LastEditDate="2021-05-05T17:18:50.187" LastActivityDate="2021-05-05T17:18:50.187" Title="Robots Following Robots with Safety Distance Planning and Coordination" Tags="&lt;control&gt;&lt;pid&gt;" AnswerCount="1" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="22105" PostTypeId="2" ParentId="22104" CreationDate="2021-04-29T13:31:48.953" Score="2" Body="&lt;p&gt;I think you've got a conceptual issue here with your PID setup. You mention both:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;a PID controller that takes as input the current distance between the second robot and the first one&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;and&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;using the error, e(t) provided by the PID&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;A PID controller accepts an &lt;strong&gt;error&lt;/strong&gt; as an &lt;strong&gt;input&lt;/strong&gt; and tries to drive that error to zero. If you are providing an absolute position as an input then I can definitely see where you would be having issues, because the PID controller should react to drive the input to zero. Again, then input should be &lt;strong&gt;error&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;To get the error, you should take your inter-robot distance feedback and compare that to your desired inter-robot distance reference to get the distance error, like&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;float distanceError = distanceReference - distanceFeedback;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This is your proportional error. The integral and derivative errors are calculated by taking the integral and derivative of that error, like:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;float dT = // however you get elapsed time on your system. &#xA;// don't forget to reset your timer/stopwatch so you can get elapsed time on the next loop&#xA;&#xA;static float distanceIntegralError = 0; // static so the value is retained call-to-call; &amp;quot;persistent&amp;quot; in Matlab&#xA;float distanceProportionalError = distanceError; // For naming consistency&#xA;distanceIntegralError += distanceError * dT;&#xA;float distanceDerivativeError = distanceError / dT;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Once you've got your proportional, derivative, and integral errors, you can do the PID control. You multiply each error term by its corresponding gain term, and then sum those products:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;float pProduct = pGain * distanceProportionalError;&#xA;float iProduct = iGain * distanceIntegralError;&#xA;float dProdcut = dGain * distanceDerivativeError;&#xA;&#xA;float pidOutput = pProduct + iProduct + dProduct;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Typically the output of the PID controller is applied to whatever units are the derivative of the reference input; if you're trying to control position (as in this example) then you'd use the output as a speed reference, or if you're trying to control speed (as in a cruise control system) then you'd use the output as acceleration (torque) reference.&lt;/p&gt;&#xA;&lt;p&gt;It's possible that you've got some other scaling that happens on the output of your PID controller, but that generally doesn't matter because it'll be &amp;quot;absorbed&amp;quot; by the PID gains when you do your tuning.&lt;/p&gt;&#xA;&lt;p&gt;For tuning I always point people at the &lt;a href=&quot;https://en.wikipedia.org/wiki/Ziegler%E2%80%93Nichols_method&quot; rel=&quot;nofollow noreferrer&quot;&gt;Ziegler–Nichols method&lt;/a&gt; because it's a methodical way to tune that's been proven to work, but it's your system - feel free to adjust it however you like.&lt;/p&gt;&#xA;&lt;p&gt;The last comment I'll make about this is that you should to save the PID controller to make up honest error in the control; if you use &lt;em&gt;feed forward&lt;/em&gt; in addition to your PID controller then you get &amp;quot;bulk&amp;quot; movement out of the feed-forward signal and PID makes up the difference.&lt;/p&gt;&#xA;&lt;p&gt;So, for example, if you have the speed reference going to the first robot, pass that same speed reference to the second robot. The PID controller then only has to do a little bit of work to make up for minor differences, like traction, wind, weight, motor power, etc.&lt;/p&gt;&#xA;&lt;p&gt;You'll get much, much more consistent performance with feed-forward and PID than with just PID alone. The total output of the controller would just be the sum of the feed-forward term and the &lt;code&gt;pidOutput&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2021-04-29T13:31:48.953" CommentCount="10" ContentLicense="CC BY-SA 4.0" />
  <row Id="22106" PostTypeId="1" CreationDate="2021-04-29T15:56:31.327" Score="0" ViewCount="12" Body="&lt;p&gt;my question is how to convert from lidar scans frame to the reference frame,&#xA;I'm working with Kitti data set which contain the oxts data (transformation from word frame to imu)&#xA;and another file like transformation from imu to Velo&lt;/p&gt;&#xA;" OwnerUserId="28109" LastActivityDate="2021-04-29T15:56:31.327" Title="convert to a reference frame for lidar scan in kitti data" Tags="&lt;localization&gt;&lt;mapping&gt;&lt;frame&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22107" PostTypeId="1" CreationDate="2021-04-29T16:36:11.313" Score="1" ViewCount="40" Body="&lt;p&gt;A little bit of context : I want to create an app using C++ (or C#) to handle 3D objects (obj), I will perform some operations on those 3D models to create some robotic trajectories. Then I want to simulate those trajectories showing the Staubli robot (a tx2-90) to the user.&lt;/p&gt;&#xA;&lt;p&gt;I am totally new in the 3D coding world and so far I've only been using manufacturers softwares (for staubli it's SRS which integrates a powerful simulator) but now I want to create my own app to simulate the behavior of the robot when given different trajectories.&lt;/p&gt;&#xA;&lt;p&gt;What librairies or 3D engines (considering I have some 3D objects to handle as well)  should I use for that? Gazebo (same thing for RoboDk apparently) seemed pretty promising but it seems that you can't modify the interface and I need something I can have the hand on as it's going to be a proprietary interface.&lt;/p&gt;&#xA;&lt;p&gt;I am struggling to find my starting point for this so if you could guide to some ressources or anything that would be lovely!&lt;/p&gt;&#xA;&lt;p&gt;Thank you in advance!&lt;/p&gt;&#xA;" OwnerUserId="28548" LastActivityDate="2021-05-01T22:25:59.930" Title="What is the best way to simulate Staubli robots inside a C++/C# app" Tags="&lt;robotic-arm&gt;&lt;simulation&gt;&lt;c++&gt;" AnswerCount="2" CommentCount="0" FavoriteCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="22108" PostTypeId="2" ParentId="22107" CreationDate="2021-04-29T17:16:19.983" Score="1" Body="&lt;p&gt;You should look into Energid's Actin SDK, its a commercial product that allows for this.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.energid.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.energid.com/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Full disclosure I work for Energid, and i work with customers doing similar things&lt;/p&gt;&#xA;" OwnerUserId="28549" LastActivityDate="2021-04-29T17:16:19.983" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="22110" PostTypeId="1" CreationDate="2021-04-29T23:35:09.950" Score="0" ViewCount="18" Body="&lt;p&gt;So I plan to build a robot-tank thing. It’s max weight will be 35kg and it’s driving wheel will have a radius of 0.05m. Those are the two values I know for certain and there will be no gears between the motor and driving wheels. I plan to have one driving motor for each tread. How does the calculation work and where to you even buy dc motors of that torque?&lt;/p&gt;&#xA;" OwnerUserId="28551" LastActivityDate="2021-04-29T23:35:09.950" Title="I’m not sure how to calculate the torque of a tank chassis what values do I need?" Tags="&lt;motor&gt;&lt;wheeled-robot&gt;&lt;dynamics&gt;&lt;torque&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22112" PostTypeId="1" CreationDate="2021-04-30T09:07:23.643" Score="0" ViewCount="35" Body="&lt;p&gt;I am working on the distance between a robot (defined by its joints angles) and its configuration space. I want to defined a simple distance to be able to get in which configuration the robot is too close from the environment, and a distance based on joints angles.&lt;/p&gt;&#xA;&lt;p&gt;I'm working in 6 dimensions (with a 6 DOF robot).&lt;/p&gt;&#xA;&lt;p&gt;If we fix the last 3 joints of a 6DOF robot, to become a 3 DOF robot, I can used euclidean distance because we can defining most of the angles configuration only with the 3 first joints.&#xA;But if I take all of the 6 angles, the distance is wrong : the value is too big and I don't know how to define if the robot is under collision or not.&lt;/p&gt;&#xA;&lt;p&gt;The last 3 joints do not defined the position of the robot but only the TCP but I need them to be sure that the end effector do not touch the envrionement.&lt;/p&gt;&#xA;&lt;p&gt;I hope my explanations are understanable,&lt;/p&gt;&#xA;&lt;p&gt;Do you have any clue ?&lt;/p&gt;&#xA;&lt;p&gt;Thank you in advance&lt;/p&gt;&#xA;" OwnerUserId="28222" LastEditorUserId="28222" LastEditDate="2021-05-03T15:09:54.483" LastActivityDate="2021-05-03T15:09:54.483" Title="Distance between a robot configuration and its configuration space" Tags="&lt;robotic-arm&gt;&lt;industrial-robot&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="22113" PostTypeId="1" CreationDate="2021-04-30T17:18:02.590" Score="-1" ViewCount="50" Body="&lt;p&gt;I have got stuck on this problem for 2 days. I think I got part a down but as for part b-d. I am not sure what all those parameters (theta 1, d_2, theta t) are refering to since the schematics is not provided. Can anyone help or give some himts or clarifications? Thank you. (r stands for robot and t stands for tool)&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2tYzb.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2tYzb.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="28487" LastActivityDate="2021-04-30T17:18:02.590" Title="Hi. I really need help on this robotics coordinate practice problem" Tags="&lt;control&gt;&lt;inverse-kinematics&gt;&lt;forward-kinematics&gt;&lt;matrix&gt;&lt;coordinate-system&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="22114" PostTypeId="1" CreationDate="2021-04-30T21:37:33.877" Score="0" ViewCount="17" Body="&lt;p&gt;I implemented an EKF on Victoria Park Dataset (Odometry + GPS + Lidar) I read an article that said that GPS coordinates can be considered as ground truth. Is it logical to calculate the euclidean distance between my estimates with the 3 sensors and the gps coordinates?&lt;/p&gt;&#xA;&lt;p&gt;It seems wierd to do so but I didn't find an article that could explain to me how to test my algorithm.&lt;/p&gt;&#xA;&lt;p&gt;Thank you!&lt;/p&gt;&#xA;" OwnerUserId="28557" LastActivityDate="2021-04-30T21:37:33.877" Title="Kalman Filter and Victoria Park Dataset - Which metric to use" Tags="&lt;ekf&gt;&lt;sensor-error&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22115" PostTypeId="1" CreationDate="2021-05-01T06:33:23.387" Score="1" ViewCount="37" Body="&lt;p&gt;&lt;strong&gt;Background&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I'm working on 4-omniwheel mobile robot. It have encoder on each wheel and MPU 6050 IMU. The robot positioning suffer a great error because slip, so i try to increase the accuracy of positioning by fusing sensor value from encoder and IMU.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Question&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I have look a lot of paper regarding sensor fusion using EKF [&lt;a href=&quot;https://ieeexplore.ieee.org/document/6686387&quot; rel=&quot;nofollow noreferrer&quot;&gt;1&lt;/a&gt;][&lt;a href=&quot;https://ieeexplore.ieee.org/document/7373480&quot; rel=&quot;nofollow noreferrer&quot;&gt;2&lt;/a&gt;][&lt;a href=&quot;https://ieeexplore.ieee.org/document/4399477&quot; rel=&quot;nofollow noreferrer&quot;&gt;3&lt;/a&gt;].&lt;/p&gt;&#xA;&lt;p&gt;With algorithm of EKF&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$\hat\beta^-_k=f(\hat\beta^+_{k-1},u_k)$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$P^-_k=F_kP_{k-1}F^T_k+Q_k$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$K_k=P^-_kH^T_k(H_kP^-_kH^T_k+R_k)^{-1}$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$\hat\beta^+_{k-1}=\hat\beta^-_k+K_k(z_k-h(\hat\beta^-_k))$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$P^+_k=P^-_k-K_kH_kP^-_k$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;state to predict&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$&#xA;    \left[\begin{matrix}&#xA;    x \\&#xA;    y \\&#xA;    \theta \\&#xA;    \dot x\\&#xA;    \dot y\\&#xA;    \omega\\&#xA;    \end{matrix}\right]&#xA;$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;and measurement model of each sensor&lt;/p&gt;&#xA;&lt;p&gt;Encoder[&lt;a href=&quot;https://ieeexplore.ieee.org/document/8062502&quot; rel=&quot;nofollow noreferrer&quot;&gt;4&lt;/a&gt;]&#xA;&lt;span class=&quot;math-container&quot;&gt;$$h_{encoder} = \left[\begin{matrix}v_1\\v_2\\v_3\\v_4\\\end{matrix}\right]$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$H_{encoder} = \frac{r}{4}&#xA;\left[\begin{matrix}&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; \frac{1}{a+b}\\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; -1 &amp;amp; \frac{-1}{a+b}\\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 1 &amp;amp; \frac{-1}{a+b}\\&#xA;0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; -1 &amp;amp; \frac{1}{a+b}\\&#xA;\end{matrix}\right]$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$z_k = H_{encoder}\beta_k+v_k$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;IMU&#xA;&lt;span class=&quot;math-container&quot;&gt;$$h_{imu} = \left[\begin{matrix}\theta\\\omega\end{matrix}\right]$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$H_{imu} = \left[\begin{matrix} 0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0\\0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 1\end{matrix}\right]$$&lt;/span&gt;&#xA;&lt;span class=&quot;math-container&quot;&gt;$$z_k = H_{imu}\beta_k+v_k$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;I'm not quite sure where to put both sensor equation. I mean in EKF algorithm, I can literally place &lt;span class=&quot;math-container&quot;&gt;$h, H$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$z_k$&lt;/span&gt; of sensor on Step 3, 4 and 5 one at a time. But how to put both of IMU and Encoder equation? Or maybe I have misunderstanding about EKF sensor fusion?&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Reference&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://ieeexplore.ieee.org/document/7373480&quot; rel=&quot;nofollow noreferrer&quot;&gt;E. I. Al Khatib, M. A. Jaradat, M. Abdel-Hafez and M. Roigari, &amp;quot;Multiple sensor fusion for mobile robot localization and navigation using the Extended Kalman Filter,&amp;quot; 2015 10th International Symposium on Mechatronics and its Applications (ISMA), 2015, pp. 1-5, doi: 10.1109/ISMA.2015.7373480.&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://ieeexplore.ieee.org/document/6686387&quot; rel=&quot;nofollow noreferrer&quot;&gt;V. Sangale and A. Shendre, &amp;quot;Localization of a Mobile Autonomous Robot Using Extended Kalman Filter,&amp;quot; 2013 Third International Conference on Advances in Computing and Communications, 2013, pp. 274-277, doi: 10.1109/ICACC.2013.59.&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://ieeexplore.ieee.org/document/4399477&quot; rel=&quot;nofollow noreferrer&quot;&gt;Jingang Yi, Junjie Zhang, Dezhen Song and Suhada Jayasuriya, &amp;quot;IMU-based localization and slip estimation for skid-steered mobile robots,&amp;quot; 2007 IEEE/RSJ International Conference on Intelligent Robots and Systems, 2007, pp. 2845-2850, doi: 10.1109/IROS.2007.4399477.&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://ieeexplore.ieee.org/document/8062502&quot; rel=&quot;nofollow noreferrer&quot;&gt;C. Röhrig, D. Heß and F. Künemund, &amp;quot;Motion controller design for a mecanum wheeled mobile manipulator,&amp;quot; 2017 IEEE Conference on Control Technology and Applications (CCTA), 2017, pp. 444-449, doi: 10.1109/CCTA.2017.8062502.&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="22800" LastActivityDate="2021-05-01T06:33:23.387" Title="How to actually fuse sensor using Extended Kalman Filter" Tags="&lt;mobile-robot&gt;&lt;kalman-filter&gt;&lt;imu&gt;&lt;odometry&gt;&lt;sensor-fusion&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22116" PostTypeId="1" CreationDate="2021-05-01T16:54:13.210" Score="0" ViewCount="13" Body="&lt;p&gt;I am trying to optimize a pose-graph generated through visual odometry with loop closure constraints.&lt;/p&gt;&#xA;&lt;p&gt;I wanted to know if there are any particular situations where optimizing the graph only once is beneficial as opposed to optimizing it everytime upon finding a loop closure. I am not sure what happens to the original constraints once an optimization step is performed (I am using g2o).&lt;/p&gt;&#xA;&lt;p&gt;Whenever I try to optimize continuously, my pose graph actually deviates farther from the ground truth. Also there is no difference between the initial and the final loss.&lt;/p&gt;&#xA;&lt;p&gt;I wanted to know how to incorporate new constraints after an optimization step is complete?&lt;/p&gt;&#xA;" OwnerUserId="27315" LastActivityDate="2021-05-01T16:54:13.210" Title="What's the difference between optimizing a pose graph only once as opposed to optimizing a pose graph whenever loop closures are found?" Tags="&lt;slam&gt;&lt;pose&gt;&lt;optimization&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22117" PostTypeId="2" ParentId="22107" CreationDate="2021-05-01T22:09:00.417" Score="1" Body="&lt;p&gt;What you're looking for is doable but it is difficult for beginners. There is a plethora of skills you need. The skills are&lt;/p&gt;&#xA;&lt;p&gt;1- &lt;strong&gt;Mathematical modelling:&lt;/strong&gt; The first step for any project is to derive the mathematical model of your system. This requires expertise in specific fields. For manipulators, you need to apply, for example, Netwon's laws to derive the dynamics equations of your manipulator. Please take a look at these books. These are the most common textbooks in introduction to robotics.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Robot Manipulators by Paul MIT Press&lt;/li&gt;&#xA;&lt;li&gt;Introduction to Robotics Mechanics and Control 3th by Graig&lt;/li&gt;&#xA;&lt;li&gt;Robot Modeling and Control by Spong and Et. al.&lt;/li&gt;&#xA;&lt;li&gt;A mMthematical Introduction to Robotic Manipulation by Murray and Et. al.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;2- &lt;strong&gt;Numerical Analysis:&lt;/strong&gt; mathematical models are usually in the form of differential or difference equations. Because these equations are highly nonlinear, the only solution is to utilize numerical methods to solve them.&lt;/p&gt;&#xA;&lt;p&gt;3- &lt;strong&gt;Control Strategy:&lt;/strong&gt; to move your robot, you need control methods so that your robot follow your commands. Linear and nonlinear techniques are common. Usually for highly nonlinear models like manipulators, you need nonlinear methods.&lt;/p&gt;&#xA;&lt;p&gt;For &lt;strong&gt;linear Control&lt;/strong&gt; books: (common textbooks in universities)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Control Systems Engineering by Nise (highly recommended)&lt;/li&gt;&#xA;&lt;li&gt;Automatic Control Systems by Golnaraghi and Et. al.&lt;/li&gt;&#xA;&lt;li&gt;Modern Control Systems by Dorf (extremely popular but not easy for the first read)&lt;/li&gt;&#xA;&lt;li&gt;Modern Control Engineering by Ogata&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;For &lt;strong&gt;nonlinear Control&lt;/strong&gt; books:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Nonlinear Control Systems Analysis and Design by Marquez (highly recommended)&lt;/li&gt;&#xA;&lt;li&gt;Nonlinear Systems by Khalil (highly recommended).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;4- &lt;strong&gt;Computer Graphics:&lt;/strong&gt; to draw and simulate your manipulator, you need a good background in computer graphics. For purely graphics, you may need to learn OpenGL (i.e. for all OSs) or DirectX (i.e. for Windows). You could use any programming languages for this matter. For C++, there are numerous libraries for simplifying graphics such SDL2, Glue, FreeGlut, SMFL, etc. These libraries not for drawing rather they allow the interaction with hardware (e.g. mouse, keyboard) but they are simple so you can learn them very fast.&lt;/p&gt;&#xA;" OwnerUserId="2155" LastEditorUserId="2155" LastEditDate="2021-05-01T22:25:59.930" LastActivityDate="2021-05-01T22:25:59.930" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="22118" PostTypeId="1" AcceptedAnswerId="22126" CreationDate="2021-05-02T01:16:21.590" Score="0" ViewCount="30" Body="&lt;p&gt;I would like to know How to extract robots localization from the icp or ndt algo, currently I'm using scan registration for this reason&lt;/p&gt;&#xA;" OwnerUserId="28109" LastActivityDate="2021-05-04T04:42:57.423" Title="How to extract robots coordinates using ICP algo" Tags="&lt;ros&gt;&lt;localization&gt;&lt;mapping&gt;&lt;frame&gt;&lt;coordinate-system&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="22119" PostTypeId="1" CreationDate="2021-05-03T13:06:36.587" Score="0" ViewCount="30" Body="&lt;p&gt;Suppose we a 1DoF planar robot with only 1 prismatic joint  (for the sake of the example).&#xA;The prismatic joint can extend the link or shrink the link.&#xA;Suppose the length of link 1 is &lt;em&gt;a&lt;/em&gt;, and suppose the center of mass is in the middle of the link.&#xA;Let &lt;em&gt;d&lt;/em&gt; be the ony generalized variable.&#xA;My doubt is: the center of mass is (a/2)+d or (a+d)/2  (w.r.t. the frame placed in the joint) ?&lt;/p&gt;&#xA;" OwnerUserId="28577" LastActivityDate="2021-05-04T00:58:49.170" Title="How to calculate center of mass with a prismatic joint" Tags="&lt;dynamics&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22120" PostTypeId="1" AcceptedAnswerId="22132" CreationDate="2021-05-03T13:30:18.623" Score="1" ViewCount="72" Body="&lt;p&gt;I've been seeing a lot of these diagrams online and wondering how can I replicate this myself. Is there any easy-to-use software package that will allow me to draw these diagrams quickly and accurately? Ideally, I would be able to draw joints, links and label, angles and lengths of the robot manipulator.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/9UzKC.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/9UzKC.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/srRQo.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/srRQo.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="28578" LastActivityDate="2021-05-06T13:11:00.857" Title="How to draw robot manipulator diagram" Tags="&lt;robotic-arm&gt;&lt;manipulator&gt;" AnswerCount="4" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="22121" PostTypeId="2" ParentId="15916" CreationDate="2021-05-03T14:20:34.580" Score="1" Body="&lt;p&gt;Klampt Library by Kris Hauser is very good and implement a lot of distances functions including SE3 (R3 + SO3).&#xA;I use Klampt for some robotic arms applications&lt;/p&gt;&#xA;" OwnerUserId="28222" LastEditorUserId="28222" LastEditDate="2021-05-17T12:01:01.527" LastActivityDate="2021-05-17T12:01:01.527" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="22123" PostTypeId="1" CreationDate="2021-05-03T21:19:42.840" Score="1" ViewCount="33" Body="&lt;p&gt;After hooking up my Raspberry Pi4 to the Create2 for the second time, I am now unable to communicate with the Create2. When I open minicom on the pi I see the following messages repeated on the screen. I tried resetting the Create 2 and got the messages again. Has anyone seen something like this?&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;================Pasted from minicom on the Pi4===========================================&#xA;&#xA;Welcome to minicom 2.7.1&#xA;&#xA;OPTIONS: I18n&#xA;Compiled on Dec 23 2019, 02:06:26.&#xA;Port /dev/ttyUSB0, 17:57:46&#xA;&#xA;Press CTRL-A Z for help on special keys&#xA;&#xA;key-wakeup&#xA;batt-rx-decode-error: 1 invalid-bit (0)&#xA;batt-rx-decode-error: 6 invalid-sync (20)&#xA;bat:   min 16648  sec 33  mV 16028  mA 16  rx-byte 90  mAH 1902  state 18  mode 9&#xA;    Flash CRC successful: 0x0 (0x0)&#xA;bat:   min 16648  sec 34  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16648  sec 35  mV 16028  mA 0  rx-byte 65535  mAH 1902  state 14  mode 9&#xA;initial-lithium-battery-capacity: set to 2068 mAH&#xA;initial-lithium-battery-level: set to 1902 mAH&#xA;bat:   min 16648  sec 36  mV 16028  mA -16  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16648  sec 37  mV 16028  mA -8  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16648  sec 38  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16648  sec 39  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16648  sec 40  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16648  sec 40  mV 16056  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;key-wakeup&#xA;batt-rx-decode-error: 6 invalid-sync (2)&#xA;bat:   min 16649  sec 26  mV 16056  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16649  sec 27  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16649  sec 28  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16649  sec 29  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16649  sec 30  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16649  sec 31  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16649  sec 32  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16649  sec 33  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16649  sec 34  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16649  sec 35  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16649  sec 36  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16649  sec 37  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16649  sec 38  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16649  sec 39  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16649  sec 40  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16649  sec 41  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16649  sec 42  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16649  sec 43  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16649  sec 44  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16649  sec 45  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16649  sec 46  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16649  sec 47  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16649  sec 48  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16649  sec 49  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16649  sec 50  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16649  sec 51  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16649  sec 52  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16649  sec 53  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16649  sec 54  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16649  sec 55  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16649  sec 56  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16649  sec 57  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16649  sec 58  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16649  sec 59  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16650  sec 0  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16650  sec 1  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16650  sec 2  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16650  sec 3  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16650  sec 4  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16650  sec 5  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16650  sec 6  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16650  sec 7  mV 16056  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16650  sec 8  mV 16056  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16650  sec 9  mV 16056  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16650  sec 10  mV 16056  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16650  sec 11  mV 16056  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16650  sec 12  mV 16056  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16650  sec 13  mV 16056  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16650  sec 14  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16650  sec 15  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16650  sec 16  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16650  sec 17  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16650  sec 18  mV 16056  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16650  sec 19  mV 16056  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16650  sec 20  mV 16056  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16650  sec 21  mV 16056  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16650  sec 22  mV 16056  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16650  sec 23  mV 16056  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16650  sec 24  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16650  sec 25  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16650  sec 26  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16650  sec 27  mV 16028  mA 0  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16650  sec 28  mV 16028  mA -56  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16650  sec 29  mV 16028  mA -56  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16650  sec 30  mV 16028  mA -56  rx-byte 90  mAH 1902  state 18  mode 9&#xA;bat:   min 16650  sec 30  mV 16028  mA -56  rx-byte 90  mAH 1902  state 18  mode 9&#xA;key-wakeup-wheel-drop&#xA;batt-rx-decode-error: 1 invalid-bit (0)&#xA;saving bbox vars&#xA;&lt;span class=&quot;math-container&quot;&gt;```&lt;/span&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="28582" LastEditorUserId="110" LastEditDate="2021-05-05T17:32:18.647" LastActivityDate="2021-05-18T21:52:28.440" Title="Now Unable to Communicate with Create2 and Getting repeated Bat: messages via the serial port" Tags="&lt;raspberry-pi&gt;&lt;irobot-create&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22124" PostTypeId="2" ParentId="22119" CreationDate="2021-05-04T00:58:49.170" Score="0" Body="&lt;p&gt;You have rigid parts that can move independently (subject to the degree-of-freedom constraint). Each part has its own center of mass. The overall CoM is the mean of the part CoM's, expressed in a common Cartesian coordinate system, weighted (pun unavoidable) by their respective mass fraction.&lt;/p&gt;&#xA;&lt;p&gt;That should be general enough to compute the overall CoM for any number of parts with any number of generalized coords.&lt;/p&gt;&#xA;" OwnerUserId="27618" LastActivityDate="2021-05-04T00:58:49.170" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22125" PostTypeId="2" ParentId="22086" CreationDate="2021-05-04T02:19:58.170" Score="0" Body="&lt;p&gt;&lt;strong&gt;Servo 1.&lt;/strong&gt; Referring to your diagram, first consider the tilting part at the top. Imagine a line connecting its bearings. It will tilt (rotate) about that axis. The weight (force due to gravity) of the top part can be modeled as a single point, located at the Center of Gravity. The force, pointing straight down, tries to make the top part flop over -- it will exert a torque around the axis. To keep things stable, the servo has to exert a, equal but opposite torque.&lt;/p&gt;&#xA;&lt;p&gt;That torque will be &lt;span class=&quot;math-container&quot;&gt;$T = F\ r\ sin\ \theta$&lt;/span&gt; where&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$T$&lt;/span&gt; is the torque&lt;/li&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$F$&lt;/span&gt; is the weight of the top part.&lt;/li&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$r$&lt;/span&gt; is the distance of the CoG from the axis.&lt;/li&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$\theta$&lt;/span&gt; is the angle that the tabletop surface makes with the horizontal.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;If things are sufficiently symmetrical, the CoG will be directly above the axis when the top surface is perfectly level. Then, &lt;span class=&quot;math-container&quot;&gt;$\sin \theta = 0$&lt;/span&gt; so &lt;span class=&quot;math-container&quot;&gt;$T = 0$&lt;/span&gt;. When it tilts so far that the surface becomes vertical (assuming that it's not obstructed somehow), &lt;span class=&quot;math-container&quot;&gt;$\sin \theta = 1$&lt;/span&gt; and the torque is at the max.&lt;/p&gt;&#xA;&lt;p&gt;The rest of your design will determine the max angle -- you might have some stops or bumpers or something. Plug that max angle, along with the weight and dimensions, into the formula above.&lt;/p&gt;&#xA;&lt;p&gt;But wait, there's more.  The servo has to do more than just hold the mechanism still. It has to move it. That means it has to exert additional torque to overcome friction, which we can't calculate here because it depends on the sort of bearings you design in. Also, in general, the servo has to accelerate the mass to start it moving, and decelerate to stop it -- but that will be negligible if you're just tracking the sun.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Servo 2&lt;/strong&gt; is a lot simpler, because the vertical rotation axis is always parallel with gravity. You have friction (mitigated by a lazy-susan bearing or something) and acceleration (as above). Again, there's no good way to calculate it here.&lt;/p&gt;&#xA;&lt;p&gt;For prototyping with relatively inexpensive things like hobby servos, we typically specify torques lots beefier than the theoretical calculations suggest. If you were moving a multi-ton radio telescope dish, the engineering gets a lot more involved.&lt;/p&gt;&#xA;" OwnerUserId="27618" LastActivityDate="2021-05-04T02:19:58.170" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22126" PostTypeId="2" ParentId="22118" CreationDate="2021-05-04T04:37:09.610" Score="0" Body="&lt;p&gt;The transformation T itself contains the location and orientation of your robot. Try to search for some related information regarding SE3 pose representation.&lt;/p&gt;&#xA;&lt;p&gt;Keywords: SE3, SO3, Rigid Body Kinematics, Matrix pose representation, coordinate transform&lt;/p&gt;&#xA;&lt;p&gt;Some related materials:&#xA;&lt;a href=&quot;https://www.seas.upenn.edu/%7Emeam620/slides/kinematicsI.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.seas.upenn.edu/~meam620/slides/kinematicsI.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Important: don't try to understand lie algebra.&lt;/p&gt;&#xA;&lt;p&gt;T is composed of rotation and translation. The rotation is 3x3 matrix that is starting from left-top of your T. Each column of the rotation matrix is the x,y,z axis direction of the robot. And the translation which start from the left-most column of your T is just xyz location of your robot with respect to the world coordinate.&lt;/p&gt;&#xA;&lt;p&gt;Direction is important. You need to find out if your T is world to robot or robot to world.&lt;/p&gt;&#xA;" OwnerUserId="19219" LastEditorUserId="19219" LastEditDate="2021-05-04T04:42:57.423" LastActivityDate="2021-05-04T04:42:57.423" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="22127" PostTypeId="2" ParentId="22087" CreationDate="2021-05-04T15:31:44.150" Score="0" Body="&lt;p&gt;I ended up solving my issue.&lt;/p&gt;&#xA;&lt;p&gt;Turns out, the create_robot package publishes a transform from odom -&amp;gt; base_footprint. I needed to toy around with my transforms so that:&lt;/p&gt;&#xA;&lt;p&gt;slam-toolbox created map -&amp;gt; odom&lt;/p&gt;&#xA;&lt;p&gt;create_robot created odom -&amp;gt; base_footprint&lt;/p&gt;&#xA;&lt;p&gt;On top of those two things, I had an issue with timing where the transform from map -&amp;gt; base_link did not work either. There was an issue with timings where I was getting the error:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;[INFO] [1619986350.507533125] [tf2_echo]: Waiting for transform map -&amp;gt; base_footprint: Lookup would require extrapolation into the past. Requested time 0.200000 but the earliest data is at time 1619986346.813953, when looking up transform from frame [base_footprint] to frame [map]&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;To solve this error, I just had to call nav2 with the argument &lt;code&gt;use_sim_time:=false&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Now that I've done this, everything seems to be working completely fine.&lt;/p&gt;&#xA;" OwnerUserId="28520" LastActivityDate="2021-05-04T15:31:44.150" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22128" PostTypeId="2" ParentId="20423" CreationDate="2021-05-04T17:05:58.513" Score="0" Body="&lt;p&gt;Dronebot workshop has a good video on communicating with I2C between two Arduinos; &lt;a href=&quot;https://www.youtube.com/watch?v=PnG4fO5_vU4&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=PnG4fO5_vU4&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="24763" LastActivityDate="2021-05-04T17:05:58.513" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22131" PostTypeId="1" CreationDate="2021-05-05T07:14:14.547" Score="1" ViewCount="39" Body="&lt;p&gt;Initially we started with 3-DOF. We checked collisions in the c-space and it worked well. With 6-DOF we're having problems.&#xA;Any ideas about how to check collisions for a 6-DOF robotic arm?&lt;/p&gt;&#xA;&lt;p&gt;--Edit&#xA;I'm going to clarify my needs. I have a algorithm based on a hybrid architecture (PRM + Q learning) that plan trajectories.&#xA;As some of you now, when building the roadmap using a PRM algorithm, you need to sample configurations (series of 6 angles for a 6R 6DOF robot in my case as we are working in the configuration space). You have to check if these configurations lead to a collision or not. If not you add them to the roadmap.&#xA;My problem is with the part where i need to check if a configuration leads to a collision.&#xA;At first, when we were testing for a 3R 3DOF robot, we had a brute-force method that worked pretty well but i'm not going into the details here unless some of you are interested.&#xA;This method didn't work for a 6R robot for many reasons.&#xA;What i need is a check-collision function that takes into account the kinematics of my robot and the environment in order to calculate if a configuration leads to a collision or not.&#xA;Thanks in advance.&lt;/p&gt;&#xA;" OwnerUserId="28596" LastEditorUserId="28596" LastEditDate="2021-05-28T13:38:06.650" LastActivityDate="2021-05-28T13:38:06.650" Title="Collision check of a 6-DOF robotic arm" Tags="&lt;robotic-arm&gt;" AnswerCount="2" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22132" PostTypeId="2" ParentId="22120" CreationDate="2021-05-05T07:39:52.527" Score="1" Body="&lt;p&gt;There is no specialized tool to draw it, but you can draw these with generic software.&lt;/p&gt;&#xA;&lt;p&gt;You can get very similar diagrams from PowerPoint or Inkscape. Furthermore if you use Latex, &lt;a href=&quot;https://texample.net/tikz/examples/three-link-annotated/&quot; rel=&quot;nofollow noreferrer&quot;&gt;here&lt;/a&gt; you can find an example using Tikz.&lt;/p&gt;&#xA;" OwnerUserId="10748" LastEditorUserId="-1" LastEditDate="2021-05-06T13:11:00.857" LastActivityDate="2021-05-06T13:11:00.857" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="22133" PostTypeId="1" AcceptedAnswerId="22138" CreationDate="2021-05-05T10:14:46.160" Score="-1" ViewCount="34" Body="&lt;p&gt;Pybullet needs a mesh file to go along with URDF. Is there a non painful way how to generate one?&lt;/p&gt;&#xA;&lt;p&gt;Ideally I'd love to generate one from the URDF file itself, as it has all the boxed already defined there. Less ideally, I could use a hint on how to make these mesh files without learning blender or unity or other monstrous tools.&lt;/p&gt;&#xA;" OwnerUserId="28602" LastActivityDate="2021-05-05T14:29:48.610" Title="How to generate a mesh file for URDF" Tags="&lt;ros&gt;&lt;simulator&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="22136" PostTypeId="1" CreationDate="2021-05-05T13:46:57.510" Score="0" ViewCount="14" Body="&lt;p&gt;I have a problem to programming on Matlab the path planning fuzzy in an unknown environment I am using a fuzzy toolbox for fuzzy rule&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;p&gt;How to do obstacle avoid by Matlab demo program&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;How to reach the goal demo program&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;How to programming dynamic obstacle&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;I have 3 ultrasonic&#xA;&lt;a href=&quot;https://i.stack.imgur.com/KnFjC.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/KnFjC.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="28606" LastEditorUserId="26747" LastEditDate="2021-05-05T17:18:37.793" LastActivityDate="2021-05-05T17:18:37.793" Title="Fuzzy Path Planning for an Unknown Environment" Tags="&lt;control&gt;&lt;path-planning&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22137" PostTypeId="2" ParentId="22131" CreationDate="2021-05-05T13:50:39.247" Score="0" Body="&lt;h1&gt;solution&lt;/h1&gt;&#xA;&lt;p&gt;The arm should stop on Resistence(Torque increase) or detected Impact. Build the arm to be soft.&lt;/p&gt;&#xA;&lt;h1&gt;Alternative solution&lt;/h1&gt;&#xA;&lt;p&gt;Otherwise the Software can Check if the angle are close to the folddown position and stop moving further.&lt;/p&gt;&#xA;" OwnerUserId="27125" LastActivityDate="2021-05-05T13:50:39.247" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22138" PostTypeId="2" ParentId="22133" CreationDate="2021-05-05T14:29:48.610" Score="3" Body="&lt;p&gt;The URDF file simply references DAE/COLLADA files that exist elsewhere on the filesystem. Blender and FreeCAD have exporters for DAE files. Saying Blender is a &amp;quot;monstrous tool&amp;quot; is an opinion that probably has little facts to back it up. If you plan on doing URDF file generation more in the future, you will need to learn Blender. DAE is the default exporter for Blender and my experience with it has shown that it works well. There is a Stackexchange page for Blender &lt;a href=&quot;https://blender.stackexchange.com/&quot;&gt;as well&lt;/a&gt;. There are also great youtube channels that show how to use blender. Your best bet is to learn Blender though.&lt;/p&gt;&#xA;" OwnerUserId="23597" LastActivityDate="2021-05-05T14:29:48.610" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="22139" PostTypeId="2" ParentId="22120" CreationDate="2021-05-05T14:35:02.763" Score="0" Body="&lt;p&gt;If you know how to use plot3 and scatter3 from matlab, by extension you can use plot and scatter with matplotlib and matrices with numpy. You can easily create serial linkages from FK matrices generated by numpy and then plot with matplotlib.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://matplotlib.org/stable/gallery/mplot3d/scatter3d.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;scatterplot&lt;/a&gt;&#xA;&lt;a href=&quot;https://www.studytonight.com/matplotlib/matplotlib-3d-plotting-line-and-scatter-plot&quot; rel=&quot;nofollow noreferrer&quot;&gt;line plot&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="23597" LastActivityDate="2021-05-05T14:35:02.763" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22140" PostTypeId="2" ParentId="22123" CreationDate="2021-05-05T17:39:22.090" Score="1" Body="&lt;p&gt;These battery charging messages are normal when the battery is charging.&lt;/p&gt;&#xA;&lt;p&gt;What happens when you take the robot off the charger? Have you tried putting the robot into safe mode (b'\x80\x83') before sending commands? Have you tried either of the scripts on the iRobot STEM &lt;a href=&quot;https://github.com/iRobotSTEM/CreatePython/&quot; rel=&quot;nofollow noreferrer&quot;&gt;github repo&lt;/a&gt;?&lt;/p&gt;&#xA;&lt;p&gt;Please note that I'm an iRobot employee but the postings on this site are my own and don't necessarily represent iRobot's positions, strategies or opinions.&lt;/p&gt;&#xA;" OwnerUserId="7665" LastActivityDate="2021-05-05T17:39:22.090" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22141" PostTypeId="2" ParentId="22120" CreationDate="2021-05-05T17:47:34.300" Score="0" Body="&lt;p&gt;Interesting question. Those drawings are so stylized and so similar, it seems unlikely that they were done with a generic drawing program.  Next time somebody encounters one online -- if it wasn't just copied from a textbook -- try to locate contact info for the author, and ask him or her what tools were used to do it. Let's hope the answer isn't always &amp;quot;Dunno, it was our graphic arts people&amp;quot;.&lt;/p&gt;&#xA;" OwnerUserId="27618" LastActivityDate="2021-05-05T17:47:34.300" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22142" PostTypeId="2" ParentId="22120" CreationDate="2021-05-06T03:51:53.430" Score="0" Body="&lt;p&gt;When I used to make these types of figures, I would just use PowerPoint (for Windows) or XDraw (for Unix or Solaris), as @504k mentions.   First I would make an ellipse with the desired perspective for the front (or top) face.  Then I’d copy that ellipse and move it to the back of the viewing plane for the back face.   Next I’d draw two lines tangent to those faces for the top and bottom (or left and right) boundaries.   Then I would zoom in and, using shapes with no visible borders, create blobs that hide the lines which should not be visible.  Finally I’d make that set of shapes into a group so the entire joint could be copied, rotated, and mirrored to create the remaining joints.   It was not elegant but it was effective.&lt;/p&gt;&#xA;&lt;p&gt;If you have access to a mechanical design package such as SolidWorks, you could extrude a cylinder to create this more accurately.   However, for the purpose of creating a kinematic model, the brute force method was effective.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastActivityDate="2021-05-06T03:51:53.430" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22143" PostTypeId="1" CreationDate="2021-05-07T02:06:56.123" Score="0" ViewCount="15" Body="&lt;p&gt;I am asked to make Braitenberg vehicle for small robotic exhibition. I am asked to use GL5528 light sensor. My job is to construct and program Braitenberg vehicle 2b, which uses GL5528 light sensors and wheels.&lt;/p&gt;&#xA;&lt;p&gt;Can anyone please help me with and create pseudo code for Braitenberg vehicle 2b please would be really appreciated as I have wired the robot but am weak at programming part just a general pseudo code would do thank you.&lt;/p&gt;&#xA;" OwnerUserId="28628" LastActivityDate="2021-05-07T02:06:56.123" Title="How to create pseudo code for Braitenberg vehicle 2b?" Tags="&lt;sensors&gt;&lt;wheeled-robot&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="22144" PostTypeId="2" ParentId="22131" CreationDate="2021-05-07T06:45:42.803" Score="1" Body="&lt;p&gt;This is quite a vague question, but from what you provided I would suggest:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Check &lt;strong&gt;how&lt;/strong&gt; you are defining your C-Space. Do redundant configurations perform different collision checking?&lt;/li&gt;&#xA;&lt;li&gt;Take a look at the &lt;a href=&quot;https://github.com/flexible-collision-library/fcl&quot; rel=&quot;nofollow noreferrer&quot;&gt;Flexible Collision Library - FCL&lt;/a&gt; . Maybe their framework guides you towards a proper arrangement of your overall joint system.&lt;/li&gt;&#xA;&lt;li&gt;Check the &lt;a href=&quot;https://ompl.kavrakilab.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Open Motion Planning Library - OMPL&lt;/a&gt; . Combined with the FCL, you should be able to end up with a proper collision checking system for your arm.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Hope that helps.&lt;/p&gt;&#xA;" OwnerUserId="19554" LastActivityDate="2021-05-07T06:45:42.803" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22145" PostTypeId="2" ParentId="22011" CreationDate="2021-05-07T22:45:00.343" Score="0" Body="&lt;p&gt;M1- and M1+ are motor inputs that should come from the outputs of the HBridge; you control current and direction to the motor using the HBridge.  I like the &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/B00M0F243E&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;L9119S&lt;/a&gt; hbridge; it's inexpensive and efficient.  I used it in this &lt;a href=&quot;https://github.com/Ezward/Esp32CameraRover2/blob/master/src/motor/motor_l9110s.h&quot; rel=&quot;nofollow noreferrer&quot;&gt;project&lt;/a&gt; as an example.&lt;/p&gt;&#xA;" OwnerUserId="24763" LastActivityDate="2021-05-07T22:45:00.343" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22146" PostTypeId="1" CreationDate="2021-05-08T00:17:51.513" Score="0" ViewCount="21" Body="&lt;p&gt;I am using a raspberry pi 4 connecting to a PCA9685 and following the instruction on the donkeycar doc site (the link can be found below). I am at the step &amp;quot;fine tuning calibration.&amp;quot; When I run &amp;quot;python manage.py drive&amp;quot; the steering works using my keyboard controls but the throttle is not causing any movement with the keys. I know that the throttle is not broken because the wheels turn when I do the calibration of the throttle. How do I solve this?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://docs.donkeycar.com/guide/calibrate/&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://docs.donkeycar.com/guide/calibrate/&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="28634" LastActivityDate="2021-05-08T00:26:38.020" Title="Raspberry Pi 4 to PCA9685 Steering Working but not Throttle" Tags="&lt;raspberry-pi&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22147" PostTypeId="2" ParentId="22146" CreationDate="2021-05-08T00:26:38.020" Score="1" Body="&lt;p&gt;There can be a few explanations for this:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Does your motor controller (ESC) have an on-off switch? If so, try flipping that&lt;/li&gt;&#xA;&lt;li&gt;Some ESCs need to &amp;quot;arm&amp;quot;. Try going to full throttle and back and see if that makes a difference&lt;/li&gt;&#xA;&lt;li&gt;I'm assuming you have your battery plugged in ;-)&lt;/li&gt;&#xA;&lt;li&gt;Try reversing the direction in the myconfig.py file&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="28635" LastActivityDate="2021-05-08T00:26:38.020" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="22149" PostTypeId="1" CreationDate="2021-05-08T14:33:02.827" Score="0" ViewCount="16" Body="&lt;p&gt;I wanna deploy the ultrasonic sensor as a receiver only or as a sender, Is it possible ?&lt;/p&gt;&#xA;" OwnerUserId="28605" LastActivityDate="2021-05-08T14:33:02.827" Title="Ultrasonic as a receiver only or as a sender only, How can i achieve that?" Tags="&lt;arduino&gt;&lt;ultrasonic-sensors&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="22150" PostTypeId="1" CreationDate="2021-05-08T17:52:41.967" Score="1" ViewCount="37" Body="&lt;p&gt;I found a video which talk about best autonomous robots that use IA technology to harvest crops. The video is very interesting because, the “ecosystem” of each robot varies a lot from company to company. I am trying to identify with a list of the components which interact (wireless communication) with the robot in such a case, here what I found so far:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The robot that uses IA techniques for harvesting&lt;/li&gt;&#xA;&lt;li&gt;A supporting robot or an autonomous truck which provides empty storage to carry the harvested crops,&lt;/li&gt;&#xA;&lt;li&gt;A laptop used to monitor the whole operation for quality purpose&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Are there any other components that I might have missed? The only that I can think of is the communication between the robot arm and the carrier which provides the autonomous mobility of the entire robot (this is part of the robot). What are other components that participate in this harvesting operation?&lt;/p&gt;&#xA;&lt;p&gt;PS: Robotics is an aera outside of my expertise, so please feel free to correct me if I said anything wrong.&lt;/p&gt;&#xA;" OwnerUserId="28639" LastActivityDate="2021-05-09T16:56:15.967" Title="Autonomous harvesting robots. What are model possible components and interactions for the entire system?" Tags="&lt;mobile-robot&gt;&lt;robotic-arm&gt;&lt;computer-vision&gt;&lt;industrial-robot&gt;&lt;autonomous-car&gt;" AnswerCount="1" CommentCount="6" ClosedDate="2021-05-14T23:42:13.903" ContentLicense="CC BY-SA 4.0" />
  <row Id="22151" PostTypeId="2" ParentId="22150" CreationDate="2021-05-09T16:56:15.967" Score="0" Body="&lt;p&gt;Guessing which part is missing in the list is pretty easy. What was provided so far is the robot system itself which contains of the mechanical device, a computer controlled robot and a PC on which the AI software is running. The assumption is that the overall system provides a closed system, which means that the intelligence in the system is able to solve the harvesting task and no further help for the robot is needed. This is equal to an autonomous robot which is self-sufficient because of what?&lt;/p&gt;&#xA;&lt;p&gt;Right, the reason why the robot doesn't need further advice is because the AI software has reached a certain amount of intelligence which ensures that the system is able to avoid obstacles, can grasp the fruits and can switch off itself if the task is done ...&lt;/p&gt;&#xA;&lt;p&gt;But let us speculate which part is missing so that the system is working fully autonomous. Or let me answer the question the other way around. Which part is redundant? Perhaps it is possible to combine the laptop with the robot into a single apparatus so that the overall system is reduced to it's minimum and can solve the task more efficient. This would minimize the amount of interface and the amount of communication as well.&lt;/p&gt;&#xA;" OwnerUserId="14283" LastActivityDate="2021-05-09T16:56:15.967" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22152" PostTypeId="1" CreationDate="2021-05-09T21:44:26.597" Score="1" ViewCount="58" Body="&lt;p&gt;What method is “better” for solving inverse kinematics for a robot arm: matrix algebra or trigonometry?&lt;/p&gt;&#xA;&lt;p&gt;To define “better”:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;efficiency/performance vs memory usage&lt;/li&gt;&#xA;&lt;li&gt;generality (how well can it be adapted to different arm configurations)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I know trigonometry/geometric methods get very complicated when solving for more that a few DOF so matrix algebra would probably be the best solution there.&lt;/p&gt;&#xA;&lt;p&gt;But for 2-3 DOF robot arms which method is preferred?&lt;/p&gt;&#xA;" OwnerUserId="26473" LastActivityDate="2021-05-11T23:29:57.577" Title="Matrix Algebra vs Trigonometry for Inverse Kinematics" Tags="&lt;inverse-kinematics&gt;&lt;matrix&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="22153" PostTypeId="1" CreationDate="2021-05-09T23:14:43.977" Score="0" ViewCount="10" Body="&lt;p&gt;I have to monocular USB cameras and I want to use ROS to make it a stereo camera. I am having a hard time finding a ROS package that publishes there 2 images in this format:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;/my_stereo/left/camera_info&#xA;/my_stereo/left/image_raw&#xA;/my_stereo/right/camera_info&#xA;/my_stereo/right/image_raw&#xA;/my_stereo_both/parameter_descriptions&#xA;/my_stereo_both/parameter_updates&#xA;/my_stereo_l/parameter_descriptions&#xA;/my_stereo_l/parameter_updates&#xA;/my_stereo_r/parameter_descriptions&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;How can I do this? Any help is truly appreciated!&lt;/p&gt;&#xA;" OwnerUserId="26747" LastActivityDate="2021-05-09T23:14:43.977" Title="ROS Publish Stereo Image From 2 USB Cameras" Tags="&lt;ros&gt;&lt;cameras&gt;&lt;stereo-vision&gt;&lt;monocular&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22154" PostTypeId="1" AcceptedAnswerId="22156" CreationDate="2021-05-10T01:02:19.753" Score="1" ViewCount="32" Body="&lt;p&gt;I am working on some manipulator projects and come across a few variants of the homogenous transformation matrix. I've been working on matlab and they give slightly different answers. Assuming both are correct, I would like to ask which one to use and under what circumstances? Are there any conventions that follow along with these trransformation matrices.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/4E95y.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4E95y.png&quot; alt=&quot;variant 1&quot; /&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/BO0iJ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/BO0iJ.png&quot; alt=&quot;variant 2&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="28578" LastActivityDate="2021-05-10T03:14:48.253" Title="homogenous transformation matrix variants" Tags="&lt;manipulator&gt;&lt;dh-parameters&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22155" PostTypeId="1" CreationDate="2021-05-10T02:12:55.357" Score="0" ViewCount="11" Body="&lt;p&gt;I'm making an AUV that requires 15-20 minutes of operating time. I'm using 6 of these motors (Blue Robotics T100 Thrusters with specs at max are 135 watts and 12.5 amp ) I don't know how to calculate the capacity (mAh) I need to run my vehicle. Is there any formula that allows me to calculate for specify the battery which I will select?&lt;/p&gt;&#xA;" OwnerUserId="28645" LastActivityDate="2021-05-10T19:34:55.900" Title="AUV LiPo battery" Tags="&lt;battery&gt;&lt;auv&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22156" PostTypeId="2" ParentId="22154" CreationDate="2021-05-10T03:14:48.253" Score="0" Body="&lt;p&gt;On serial manipulator modelling, we commonly use Denavit-Hartenberg system. One important thing you need to know, there are 2 variant of it, that is Denavit-Hartenberg system and Modified Denavit-Hartenberg. The main difference between two is coordinates system attachment to links and order of performed transformation [&lt;a href=&quot;https://en.wikipedia.org/wiki/Denavit%E2%80%93Hartenberg_parameters&quot; rel=&quot;nofollow noreferrer&quot;&gt;1&lt;/a&gt;].&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Denavit-Hartenberg System&lt;/strong&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/JRRSJ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JRRSJ.png&quot; alt=&quot;DH System&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Fig 1. DH Coordinate System Attachment&lt;/p&gt;&#xA;&lt;p&gt;Will have HTM&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/BO0iJ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/BO0iJ.png&quot; alt=&quot;DH HTM&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Modified Denavit-Hartenberg System&lt;/strong&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/OtIUd.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/OtIUd.png&quot; alt=&quot;MDH System&quot; /&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Fig 2. MDH Coordinate System Attachment&lt;/p&gt;&#xA;&lt;p&gt;Will have HTM&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/4E95y.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/4E95y.png&quot; alt=&quot;MDH HTM&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;And both are correct. My professor recommendation was to use MDH because it use less variable to represent manipulator.&lt;/p&gt;&#xA;&lt;p&gt;Reference :&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Denavit%E2%80%93Hartenberg_parameters&quot; rel=&quot;nofollow noreferrer&quot;&gt;Denavit Hartenberg Modelling Wikipedia&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="22800" LastActivityDate="2021-05-10T03:14:48.253" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="22157" PostTypeId="1" AcceptedAnswerId="22161" CreationDate="2021-05-10T09:36:59.247" Score="0" ViewCount="25" Body="&lt;p&gt;I am looking for an off-the-shelf small AGV which runs or could be used with ROS. It may include some basic sensors like a camera, an IMU, an Ultrasonic range finder, etc.&lt;/p&gt;&#xA;&lt;p&gt;Really appreciate all the valuable suggestions from the community.&lt;/p&gt;&#xA;" OwnerUserId="21747" LastActivityDate="2021-05-11T06:20:38.477" Title="Small AGV robot for ROS application" Tags="&lt;mobile-robot&gt;&lt;ros&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="22158" PostTypeId="2" ParentId="22155" CreationDate="2021-05-10T19:34:55.900" Score="0" Body="&lt;p&gt;If you want to run one motor at maximum output, it will draw 12.5 amps. If you run it for an hour, it will require 12.5 amp-hours of capacity.&lt;/p&gt;&#xA;&lt;p&gt;If you have six motors running for an hour at maximum output, then you will need (6)*(12.5) = 75 amp-hours of capacity.&lt;/p&gt;&#xA;&lt;p&gt;If you want to run the six motors at maximum output for 1/3 of an hour (20 minutes), then you need (1/3)*(75) = 25 amp-hours, or 25,000 mAh.&lt;/p&gt;&#xA;&lt;p&gt;You should also take into account battery discharge capability (the &amp;quot;C&amp;quot; rating) and min/max states of charge.&lt;/p&gt;&#xA;&lt;p&gt;For the &amp;quot;C&amp;quot; rating, it's referring to how quickly it can charge or discharge. If you find a battery pack that does have 25,000 mAh, but it's rated for 1C, then it would safely discharge all 25,000 mA in one hour. You need it discharged as quickly as 15 minutes, so you would look for a battery with a C rating of at least 4, else you would need to increase the capacity of your battery pack.&lt;/p&gt;&#xA;&lt;p&gt;Finally, as a general rule I would generally only assume that I could charge to 80% and discharge to 20%, so I would assume I can only get 60% out of a battery; this would mean I would try to spec a pack that is (1/0.6666) = 150% of what I think I need.&lt;/p&gt;&#xA;" OwnerUserId="9720" LastActivityDate="2021-05-10T19:34:55.900" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22159" PostTypeId="1" CreationDate="2021-05-10T20:48:19.137" Score="1" ViewCount="13" Body="&lt;p&gt;Can someone send reliable sources for how this is derived? I understand the diagonal values are for scale, but how do you determine all 6 values needed for this matrix? I would also like to normalize the radius to 1 while doing so. I've found many papers of ellipsoid fitting, but am unsure of how to translate this for my use, and honestly could just use some outside input.&lt;/p&gt;&#xA;" OwnerUserId="27911" LastActivityDate="2021-05-10T20:48:19.137" Title="How do you derive the soft iron matrix for magnetometer calibration?" Tags="&lt;ros&gt;&lt;imu&gt;&lt;magnetometer&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22160" PostTypeId="1" CreationDate="2021-05-10T23:06:27.763" Score="0" ViewCount="20" Body="&lt;p&gt;I am trying to setup a workstation for Baxter to simulate Baxter in Gazebo. I am using this tutorial: &lt;em&gt;&lt;a href=&quot;https://sdk.rethinkrobotics.com/wiki/Workstation_Setup&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://sdk.rethinkrobotics.com/wiki/Workstation_Setup&lt;/a&gt;&lt;/em&gt;, but I am stuck on this step:&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Edit the 'baxter_hostname' field Baxter's hostname is defaulted as the robot's serial number. The serial number can be located on the back of the robot, next to the power button. Alternatively, you can find your robot's hostname by plugging a USB keyboard into the back of Baxter and pressing Ctrl+Alt+F3.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;# Specify Baxter's hostname&#xA;baxter_hostname=&amp;quot;baxter_hostname.local&amp;quot;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Since I am not working with a real Baxter robot, I am not sure what to put as the baxter_hostname.&lt;/p&gt;&#xA;&lt;p&gt;Any help would be appreciated.&lt;/p&gt;&#xA;&lt;p&gt;Thank you!&lt;/p&gt;&#xA;" OwnerUserId="28654" LastActivityDate="2021-05-10T23:06:27.763" Title="Setting up a workstation for Baxter" Tags="&lt;gazebo&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22161" PostTypeId="2" ParentId="22157" CreationDate="2021-05-11T06:20:38.477" Score="1" Body="&lt;p&gt;The turtlebot-3 is a good option. It comes in &lt;a href=&quot;https://emanual.robotis.com/docs/en/platform/turtlebot3/overview/&quot; rel=&quot;nofollow noreferrer&quot;&gt;two variants&lt;/a&gt; and has basic sensors ideal for teaching/learning ROS. Clearpath has &lt;a href=&quot;https://clearpathrobotics.com/robots/&quot; rel=&quot;nofollow noreferrer&quot;&gt;several options&lt;/a&gt; ranging from small to large robots. These are the ones I am familiar with. If you are looking beyond these: &lt;a href=&quot;https://robots.ros.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;ros-robots&lt;/a&gt; has an official list of robots with intended capabilities listed out.&lt;/p&gt;&#xA;&lt;p&gt;Also, there is the option of learning ROS in simulation using either Gazebo or something like &lt;a href=&quot;http://constructsim&quot; rel=&quot;nofollow noreferrer&quot;&gt;the construct&lt;/a&gt;.&lt;/p&gt;&#xA;" OwnerUserId="27064" LastActivityDate="2021-05-11T06:20:38.477" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22162" PostTypeId="1" CreationDate="2021-05-11T06:28:43.307" Score="0" ViewCount="21" Body="&lt;p&gt;I installed &lt;strong&gt;ROS Noetic&lt;/strong&gt; on &lt;strong&gt;Ubuntu Mate 20.04&lt;/strong&gt; in my Raspberry Pi but couldn't find any specific tutorial to follow along for Noetic. Most are available for Melodic, which doesn't work with the latest one.&lt;/p&gt;&#xA;&lt;p&gt;I tried following with one of JdeRobots guides: &lt;a href=&quot;https://github.com/JdeRobot/drones&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/JdeRobot/drones&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;But the following command doesn't seem to work:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo apt-get install ros-noetic-jderobot-drones&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Output:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Reading package lists... Done&#xA;Building dependency tree       &#xA;Reading state information... Done&#xA;E: Unable to locate package ros-noetic-jderobot-drones&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I want to do Drone Development using Noetic, but there's not much I could find specific for Noetic or I could convert old commands to. I tried searching Github repos but they aren't specifically for Noetic.&lt;/p&gt;&#xA;" OwnerUserId="28656" LastEditorUserId="28656" LastEditDate="2021-05-11T08:08:58.730" LastActivityDate="2021-05-11T08:08:58.730" Title="Drone Development using ROS Noetic on Ubuntu 20.04" Tags="&lt;quadcopter&gt;&lt;ros&gt;&lt;simulation&gt;&lt;linux&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22164" PostTypeId="1" AcceptedAnswerId="22188" CreationDate="2021-05-11T16:38:45.510" Score="1" ViewCount="55" Body="&lt;p&gt;I want to compare the rotation of two cameras with respect to a common frame. Let's call these &lt;code&gt;R_World_Cam0&lt;/code&gt; and &lt;code&gt;R_World_Cam1&lt;/code&gt;. When comparing these two rotations, one common approach is to compute the Euler angles (for example XYZ) and compare the components. This comparison is nice because it tells us which part of the rotation changes more (roll, pitch, or yaw).&lt;/p&gt;&#xA;&lt;p&gt;I wonder if it is possible to do something similar with the tangent space vectors of the rotations. More specifically, we can compute &lt;code&gt;V_World_cam0 = Log(R_World_Cam0)&lt;/code&gt; and &lt;code&gt;V_World_cam1 = Log(R_World_Cam1)&lt;/code&gt;. But I understand that we cannot compare these directly as we would do with Euler angles, because we are talking about components of a vector which represents&#xA;the rotations with the angle-axis representation (potentially not normalized).&lt;/p&gt;&#xA;&lt;p&gt;Is my understanding that the tangent vectors should not be used for comparison? I have done some synthetic experiments trying to compare the Euler angles and the tangent space vectors, and they are different, but their numerical values are very close, which is something I wasn't expecting. For example (I omit code for brevity), I create a rotation using the Euler angles XYZ convention and I apply &lt;code&gt;Log&lt;/code&gt; operator to the created matrix:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Input: XYZ Euler angles: [ 45.00000936 -0.         30.00000624]&#xA;Output:  tangent vector: [43.94588114  11.77526336 28.42800051]&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Is this just a coincidence?&lt;/p&gt;&#xA;&lt;p&gt;Thank you in advance!&lt;/p&gt;&#xA;" OwnerUserId="11478" LastActivityDate="2021-05-17T03:19:28.857" Title="Can the tangent space vector of SO3 be interpreted as Euler angles?" Tags="&lt;rotation&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22165" PostTypeId="1" CreationDate="2021-05-11T17:59:48.633" Score="0" ViewCount="21" Body="&lt;p&gt;Using XY stages is common in many fields:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;3D printing&lt;/li&gt;&#xA;&lt;li&gt;Genetics instruments&lt;/li&gt;&#xA;&lt;li&gt;semiconductor lithography&lt;/li&gt;&#xA;&lt;li&gt;automated microscope slide imaging&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;See for example &lt;a href=&quot;https://www.asml.com/en/technology/lithography-principles/mechanics-and-mechatronics&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.asml.com/en/technology/lithography-principles/mechanics-and-mechatronics&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Optimizing an XY stage for:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;precision&lt;/li&gt;&#xA;&lt;li&gt;accuracy&lt;/li&gt;&#xA;&lt;li&gt;speed&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Is a challenging problem of controls, structural engineering, and motion.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Is there an online or in person course that teaches the fundamentals of systems built for these purposes?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Perhaps a graduate level course?  Coursera? LinkedIn? Kahn Academy? a stage vendor?&lt;/p&gt;&#xA;" OwnerUserId="11495" LastActivityDate="2021-05-11T17:59:48.633" Title="Looking for a course (online?) RE: systems with XY stages" Tags="&lt;control&gt;&lt;kinematics&gt;&lt;dynamics&gt;" AnswerCount="0" CommentCount="7" ContentLicense="CC BY-SA 4.0" />
  <row Id="22166" PostTypeId="2" ParentId="22152" CreationDate="2021-05-11T23:29:57.577" Score="0" Body="&lt;p&gt;I may not be the most experienced person to answer your question. However, I wanted to share my experience from a year ago.&lt;/p&gt;&#xA;&lt;p&gt;On an online course I learned about the Screw Theory, which seemed like a very good way to approach the Robot Arm Kinematics. During an homework/mini-project of the course I needed to calculate the Inverse Kinematics of a 6-DOF robot arm using the Screw Theory and an analytical solution. You may already know this, however I want to explain this solution in few sentences. You calculate the Screw Axes for all of the joints (which was pretty straight-forward and easy, this will not be very hard if we have good visual model of the robot) and construct the Screw Matrix. Then for the given end-effector configuration, you make an initial &amp;quot;guess&amp;quot;. Then, you run your algorithm, which was an iterative Newton-Raphson root finding method, to find the solution of the Inverse Kinematics. One draw-back of this method was the initial &amp;quot;guess&amp;quot;. If you do not enter a good initial guess, your algorithm never converges to the solution. My potential solution to that was to create a Look-Up table of Forward Kinematics results which than could be used to pick a proper initial guess. However, I felt lazy and never tried it.&lt;/p&gt;&#xA;&lt;p&gt;Since you asked for a 2-3 DOF Robot Arm, I would go with an Analytical Solution. Especially for SCARA type Robot Arms, Inverse Kinematics calculations are not too hard to handle and can be generalized for certain types. Also, in the end, you are left with equations that yields the joint displacements in terms of the end-effector configurations.  Therefore as I said, I would go for an Analytical Solution for a Scara-Type Robot.&lt;/p&gt;&#xA;&lt;p&gt;Also, maybe you can check &lt;a href=&quot;https://github.com/ros-planning/moveit&quot; rel=&quot;nofollow noreferrer&quot;&gt;&amp;quot;MoveIt for ROS&amp;quot;&lt;/a&gt;, which provides an amazingly extensive framework for Robotics manipulators.&lt;/p&gt;&#xA;" OwnerUserId="26789" LastActivityDate="2021-05-11T23:29:57.577" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="22167" PostTypeId="1" CreationDate="2021-05-12T12:48:26.197" Score="0" ViewCount="28" Body="&lt;p&gt;I am trying to control Stepper motors which has a pulse input driver.&lt;/p&gt;&#xA;&lt;p&gt;I have a speed of 1000pps, and I want to move 1 pulse at a time. So that means 1 pulse will take 1ms.&lt;/p&gt;&#xA;&lt;p&gt;After I send a command to move 1pulse, I sleep for 1ms so the pulse can be completed before I can send another pulse&lt;/p&gt;&#xA;&lt;p&gt;Below is my pseudocode&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;while(1)// loop forever&#xA;      speed = 1000pps&#xA;      pulses = 1;&#xA;      move(pulses) //move the motor 1 pulse&#xA;      sleep(1 millisecond) //sleep for 1ms&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;How ever when when I specify a distance of say 10000 pulses and instruct the motor to move at once, I get a perfect square pulse train with a period of 1.&lt;/p&gt;&#xA;&lt;p&gt;Expectation&#xA;I am expecting to see a square pulse train on the oscilloscope, where the on time will be equal to the off time. But instead the on time is 0.5ms and the off time is becoming 1ms. Is it possible to have the off time and off time both at 0.5ms while moving one pulse at a time?&lt;/p&gt;&#xA;" OwnerUserId="28294" LastActivityDate="2021-05-12T15:07:16.867" Title="How can I achieve a square pulse train while sending pulses one pulse at a time to a stepper motor?" Tags="&lt;control&gt;&lt;stepper-motor&gt;&lt;stepper-driver&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="22168" PostTypeId="2" ParentId="22167" CreationDate="2021-05-12T15:07:16.867" Score="0" Body="&lt;p&gt;Split the sleep() into two halves if you want your software to control both halves of the pulse.  Your loop body would then look like&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;set_output(1)&#xA;sleep(0.5)&#xA;set_output(0)&#xA;sleep(0.5)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Your 'scope might show a period slightly greater than 1.0 msec -- besides the sleeps, those other statements take time too. If that's a problem, you could manually tune the sleeps, which is both tedious and fragile. Or change the code to consult a clock:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;now = clock()&#xA;while 1:&#xA;    next1 = now + 0.5&#xA;    next2 = now + 1.0&#xA;    set_output(1)&#xA;    while (clock() &amp;lt; next1) do_nothing;&#xA;    set_output(0)&#xA;    while (clock() &amp;lt; next2) do_nothing;&#xA;    now = next2&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="27618" LastActivityDate="2021-05-12T15:07:16.867" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22170" PostTypeId="1" CreationDate="2021-05-12T22:31:00.640" Score="0" ViewCount="44" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/IzfJd.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/IzfJd.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;three_link_visual.m (MATLAB file):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;% three_link_visual: creates a plot of a three-link arm given the link&#xA;% lengths and joint configuration&#xA;&#xA;%----- Configuration Parameters -----%&#xA;% Robot Length&#xA;L1 = 1;&#xA;L2 = 1;&#xA;L3 = 1;&#xA;% Joint Angles&#xA;theta1 = 1;&#xA;theta2 = 1;&#xA;theta3 = 1;&#xA;% Target&#xA;target = [1,1,1];&#xA;%------------------------------------%&#xA;&#xA;% Calculate the endpoints for each of the links&#xA;p1 = [0; 0; 0];&#xA;p2 = [0; 0; L1];&#xA;p3 = [L2*sin(theta2)*cos(theta1); L2*sin(theta2)*sin(theta1); p2(3) + L2*cos(theta2)];&#xA;p4 = [p3(1) + L3*sin(theta2 + theta3)*cos(theta1); p3(2) + L3*sin(theta2 + theta3)*sin(theta1); p3(3) + L3*cos(theta2 + theta3)];&#xA;points = [p1, p2, p3, p4];&#xA;&#xA;% Plot the arm&#xA;hold off;&#xA;plot3(points(1, :), points(2, :), points(3, :), 'LineWidth', 4, 'Color', [0, 0.5, 0.7]);&#xA;&#xA;% Plot the base axes&#xA;length = L1/4;&#xA;hold on;&#xA;% X axis&#xA;plot3([0, length], [0, 0], [0, 0], 'r-');&#xA;% Y axis&#xA;plot3([0, 0], [0, length], [0, 0], 'g-');&#xA;% Z axis&#xA;plot3([0, 0], [0, 0], [0, length], 'b-');&#xA;&#xA;% Plot the components&#xA;% X component&#xA;plot3([0, p4(1)], [0, 0], [0, 0], 'r:', 'LineWidth', 2);&#xA;% Y component&#xA;plot3([p4(1), p4(1)], [0, p4(2)], [0, 0], 'g:', 'LineWidth', 2);&#xA;% Z component&#xA;plot3([p4(1), p4(1)], [p4(2), p4(2)], [0, p4(3)], 'b:', 'LineWidth', 2);&#xA;% Radial distance&#xA;plot3([0, p4(1)], [0, p4(2)], [0, 0], 'k:', 'LineWidth', 2);&#xA;&#xA;% Plot the target&#xA;marker = plot3(target(1), target(2), target(3), 'ro', 'LineWidth', 4);&#xA;&#xA;% Configure the axes&#xA;grid on;&#xA;axis equal;&#xA;axis([-5, 5, -5, 5, 0 5]);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="28668" LastActivityDate="2021-05-12T22:31:00.640" Title="Inverse Kinematics Problem" Tags="&lt;inverse-kinematics&gt;&lt;matlab&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="22171" PostTypeId="1" CreationDate="2021-05-12T22:43:07.703" Score="0" ViewCount="13" Body="&lt;p&gt;I have a question about the ratio of the drive continuous current / motor continuous stall current. I read that a good ratio between these values is around 2, but cannot find an explanation why. I understand that when the ratio is too low, the drive cannot supply the motor needed, but what happens if the reatio is for example 5? What are the disadvanatages?&lt;/p&gt;&#xA;&lt;p&gt;Thank you&lt;/p&gt;&#xA;" OwnerUserId="28670" LastActivityDate="2021-05-12T22:43:07.703" Title="Motor Drive Sizing Drive continuous current / motor continuous stall current Ratio" Tags="&lt;motor&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22172" PostTypeId="1" CreationDate="2021-05-13T17:08:04.313" Score="0" ViewCount="12" Body="&lt;p&gt;I want to measure two or more distances between two or more sensors and a truck-trailer front face in an outdoors (night/day, rain/shine) environment. I've been looking at the different types of sensors, but I still am having trouble deciding between ultrasonic, IR, lidar, and time of flight sensors. For example, I read that infrared sensors are not good in outdoor situations, but also read that you can find filters that will mitigate this problem. I want some tips or advice on which option I should lean towards for reliability and accuracy in an outdoors environment, at ranges of around 2-5 m. Any help would be greatly appreciated, thanks!&lt;/p&gt;&#xA;" OwnerUserId="28680" LastActivityDate="2021-05-13T17:13:21.330" Title="What kind of distance sensors should I use for outdoors applications?" Tags="&lt;sensors&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22173" PostTypeId="2" ParentId="22172" CreationDate="2021-05-13T17:13:21.330" Score="0" Body="&lt;p&gt;You can ideally use any or all the above mentioned sensors for the task you have in mind. Ultrasonics, RADAR and LiDAR are commonly used sensors for this purpose. Each sensor has its own merits and if you want to operate them in varying conditions you will have to account for sensor uncertainty. To be robust, you should use more than just the one sensor and run it through a kalman filter type estimator.&lt;/p&gt;&#xA;" OwnerUserId="27064" LastActivityDate="2021-05-13T17:13:21.330" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22175" PostTypeId="1" CreationDate="2021-05-13T23:34:21.253" Score="0" ViewCount="34" Body="&lt;p&gt;&lt;a href=&quot;https://www.reddit.com/r/robotics/comments/nbqx55/does_this_design_for_a_leg_make_sense_description/?utm_medium=android_app&amp;amp;utm_source=share&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.reddit.com/r/robotics/comments/nbqx55/does_this_design_for_a_leg_make_sense_description/?utm_medium=android_app&amp;amp;utm_source=share&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;So essentially I'm trying to make a leg that's able to kick. Motor A drives a pole, and that pole is connected to another pole with a hinge. That second pole can either be extended or retracted like a calf, it can do this by a string that's connected to the end of it that goes through the first pole, into the shaft of motor A, out the center of the shaft, and into Motor B that retracts or let's go of the line in order to control whether the calf is extended or not, determined by code.&lt;/p&gt;&#xA;" OwnerUserId="28682" LastEditorUserId="28682" LastEditDate="2021-05-13T23:39:32.927" LastActivityDate="2021-05-13T23:39:32.927" Title="Are there any problems with this design?" Tags="&lt;robotic-arm&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="22176" PostTypeId="1" CreationDate="2021-05-14T12:37:07.423" Score="0" ViewCount="39" Body="&lt;p&gt;I am doing &lt;strong&gt;Monocular Visual Odometry&lt;/strong&gt;, and I have problem with &lt;strong&gt;relative scale&lt;/strong&gt;. Most of the time its value is between 0.8-1.1, but sometimes it goes crazy and it has value 3,4 and once it had value &lt;strong&gt;25&lt;/strong&gt;. This ruins me my translation vector &lt;strong&gt;t&lt;/strong&gt;, and then my vehicle trajectory become shifted a lot. I extracted 3D points normally, I can't resolve why this is happening. I don't know if 3D points cloud making this problem, but I used &lt;code&gt;triangulatePoints&lt;/code&gt; method for getting 3D points. For relative scale, I take median of all calculated distances between points of 3D cloud.&lt;/p&gt;&#xA;&lt;p&gt;Does inliers and outliers have something to do with this problem? Should I get rid of all outliers first? I mean there are not too many outliers in keypoints set.&lt;/p&gt;&#xA;&lt;p&gt;P.S. I tested this for 2 datasets. One had about 110 frames, and another had about 20 frames. One with 20 frames had no problems, this with 110 frames had problems. Relative scale had value 25 when I was computing it between frames 3 and 4. It is dataset from KITTI. You can find it on KITTI webpage: Raw data - &lt;strong&gt;2011_09_28_drive_0001&lt;/strong&gt; (name of dataset).&lt;/p&gt;&#xA;&lt;p&gt;I hope you will help me to understand why this is happening.&lt;/p&gt;&#xA;&lt;p&gt;Note: KITTI dataset is stereo camera. So I used right camera as monocular.&lt;/p&gt;&#xA;" OwnerUserId="28688" LastActivityDate="2021-05-17T03:27:58.540" Title="Relative scale problem" Tags="&lt;slam&gt;&lt;python&gt;&lt;visual-odometry&gt;&lt;trajectory&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22178" PostTypeId="1" CreationDate="2021-05-14T13:13:51.920" Score="0" ViewCount="49" Body="&lt;p&gt;I'm working on DIY robotic arm. Robotic arm has 5 servos. The problem is that servo motors are shaking. I found different solutions but none of them works. What happens is that when I connect one PWM pin it works fine. Then add second pin and it works fine and so on. But when I connect power supply when all 5 pins are connected to ESP32 microcontroller it starts vibrating. I tried to power all servo motors separately but it doesn't work either. Does anyone have similar experience?&#xA;P.S. I use JMT200 servo motors with 50 Hz frequency and 800 ~ 2200 uS pulse width. Here is link &lt;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/B086HKQTC5&quot; rel=&quot;nofollow noreferrer&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.amazon.com/JMT-Happymodel-Steering-Suitable-12v-24v/dp/B086HKQTC5&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="28689" LastActivityDate="2021-05-17T01:40:53.340" Title="Servo motor vibration problem" Tags="&lt;servomotor&gt;&lt;rcservo&gt;" AnswerCount="1" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="22179" PostTypeId="1" CreationDate="2021-05-14T22:26:56.670" Score="0" ViewCount="11" Body="&lt;p&gt;hope you are all doing well.&lt;/p&gt;&#xA;&lt;p&gt;I am doing in a project in which I receive GPS data (Longitude, and Latitude) from an Android device via an SQL server. What I am trying to do is to send this Longitude - Latitude data to my SITL vehicle in Ardupilot. I thought about using Dronekit Python API as such:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;from dronekit import connect, VehicleMode&#xA;&#xA;import time&#xA;import mysql.connector&#xA;import time&#xA;&#xA;#--- Start the Software In The Loop (SITL)&#xA;import dronekit_sitl&#xA;#&#xA;sitl = dronekit_sitl.start_default()   #(sitl.start)&#xA;#connection_string = sitl.connection_string()&#xA;&#xA;mydb = mysql.connector.connect(&#xA;  host=&amp;quot;******&amp;quot;,&#xA;  user=&amp;quot;******&amp;quot;,&#xA;  password=&amp;quot;*****&amp;quot;,&#xA;  database=&amp;quot;koordinat&amp;quot;&#xA;)&#xA;mycursor = mydb.cursor()&#xA;&#xA;#--- Now that we have started the SITL and we have the connection string (basically the ip and udp port)...&#xA;print(&amp;quot;Araca bağlanılıyor&amp;quot;)&#xA;vehicle = connect('tcp:127.0.0.1:5762', wait_ready=False, baud = 115200) &#xA;vehicle.wait_ready(True, raise_exception=False)&#xA;&#xA;#-- Read information from the autopilot:&#xA;#- Version and attributes&#xA;vehicle.wait_ready('autopilot_version')&#xA;print('Autopilot version: %s'%vehicle.version)&#xA;&#xA;#- Does the firmware support the companion pc to set the attitude?&#xA;print('Supports set attitude from companion: %s'%vehicle.capabilities.set_attitude_target_local_ned)&#xA;&#xA;vehicle.mode = VehicleMode(&amp;quot;GUIDED&amp;quot;)&#xA;vehicle.armed = True&#xA;&#xA;&#xA;while(True):&#xA;&#xA;    mycursor.execute(&amp;quot;SELECT * FROM koordinat WHERE 1&amp;quot;)&#xA;&#xA;    location = str(mycursor.fetchall())&#xA;    location = location.split(&amp;quot;,&amp;quot;)&#xA;&#xA;    location[0] = location[0].replace(&amp;quot;[&amp;quot;, &amp;quot;&amp;quot;)&#xA;    location[0] = location[0].replace(&amp;quot;(&amp;quot;, &amp;quot;&amp;quot;)&#xA;    location[0] = location[0].replace(&amp;quot;'&amp;quot;, &amp;quot;&amp;quot;)&#xA;&#xA;    location[1] = location[1].replace(&amp;quot;[&amp;quot;, &amp;quot;&amp;quot;)&#xA;    location[1] = location[1].replace(&amp;quot;)&amp;quot;, &amp;quot;&amp;quot;)&#xA;    location[1] = location[1].replace(&amp;quot;'&amp;quot;, &amp;quot;&amp;quot;)&#xA;    location[1] = location[1].replace(&amp;quot;)&amp;quot;, &amp;quot;&amp;quot;)&#xA;&#xA;    # Converting the longitude and latitude to float, before assigning to the vehicle GPS data:&#xA;&#xA;    location[0] = float(location[0])&#xA;    location[1] = float(location[1])&#xA;    &#xA;    # Setting the location of the vehicle:&#xA;&#xA;    vehicle.location.global_frame.lat = location[0]&#xA;    vehicle.location.global_frame.lon = location[1]&#xA;&#xA;    print('Konum:', str(vehicle.location.global_frame.lat)+str(&amp;quot;,&amp;quot;), str(vehicle.location.global_frame.lon)+str(&amp;quot;,&amp;quot;), str(vehicle.location.global_frame.alt))&#xA;&#xA;   &#xA;    #- When did we receive the last heartbeat&#xA;    print('Son bilgi gelişi: %s'%vehicle.last_heartbeat)&#xA;&#xA;&#xA;    time.sleep(1)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;However, when I check from the SITL and Mission Planner (also from the print statement from my code) the location does not change; the simulator simply ignores those commands sent by the Dronekit. Is there a working method to accomplish what I am trying to do? I tried to change the sim_vehicle.py script which I use to start the simulation. But I was only able to change the starting/home location of the vehicle. I was not able to change the current location of the vehicle on SITL and Mission Planner.&lt;/p&gt;&#xA;" OwnerUserId="26789" LastActivityDate="2021-05-14T22:26:56.670" Title="Ardupilot - Dronekit Setting the Current Location of the Vehicle" Tags="&lt;python&gt;&lt;gps&gt;&lt;ardupilot&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22180" PostTypeId="1" CreationDate="2021-05-15T17:59:30.133" Score="0" ViewCount="25" Body="&lt;p&gt;I am trying to build a small 3D printed CNC machine but can't afford lead screws as of now. I need to 3D print a lead screw or use a rack and pinion gear system. I am a little skeptical able the rack and pinion because I don't know how big of a problem backlash will be. I need to know if I will get a +- 3mm accuracy. Is it possible to use 3D printed rack and pinion gears to make a CNC or should I 3D print a lead screw?&lt;/p&gt;&#xA;" OwnerUserId="26747" LastActivityDate="2021-05-28T01:25:53.077" Title="Rack and Pinion Gear for CNC" Tags="&lt;gearing&gt;&lt;cnc&gt;&lt;3d-printing&gt;&lt;3d-model&gt;" AnswerCount="1" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="22182" PostTypeId="2" ParentId="19336" CreationDate="2021-05-15T23:01:33.073" Score="2" Body="&lt;p&gt;Here is what I 'believe'.&lt;/p&gt;&#xA;&lt;p&gt;Lets make the diagram more labeled. Say door 1 starting from left most is at 4 meters from the origin at left, door 2 at 7 meters, door 3 at 15 meters.&lt;/p&gt;&#xA;&lt;p&gt;When the robot senses a measurement corresponding to a door it thinks that it has high and equal probability of standing in front of any of those doors and very low probability that it is not in front of a door. Now it believes that it is highly at either 4,7 and 15 meters and low likely to be any other x meters. The position of a peak is where it think it might be(4,7 and 15). Here there are 3 doors so there are 3 peaks. Clear till now?&lt;/p&gt;&#xA;&lt;p&gt;Now it moves 1 meters lets say. Now it will believe that it has high probability of being at either 4+1, 7+1 or 15+1 meters. Now you can see that the peaks has to be at 4+1, 7+1 and 15+1 meters as this is just a simple shift to update its current belief (Now it believes it is highly 1 meter right to any of those doors). That said the peaks has to be shifted or ultimately the whole distribution about its current belief. This is the reason why the distribution shifts towards right.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Rest of the answer is a bonus! Lets move ahead&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Dang!!! but it knows that it might has not moved exactly to be 1 meter and has errors in movement (lets say 0.1 meters for every meter it moves). so it now might be at 4+1+-0.1 and so on. So the graph flattens a bit as now it thinks it is highly nearby 4+1, 7+1 and 15+1 but not exactly there!. So the peaks flatten.(black as in original &amp;quot;Probabilistic robotics book figure 1.1&amp;quot;) If it has moved by 3 meters the uncertainty would be more to be at exactly 4+3, 7+3 and 15+3 meters (4+3+-0.3 etc). This explains, as answered above the more it moves the more its belief gets uncertain for those peaks(current highly possible positions)!&lt;/p&gt;&#xA;&lt;p&gt;Now again it moves(by lets say 'nearly' 2 meters) and senses a door. So it shifts its distribution and changes it to 'around' 7,10 and 18 meters. Now as it has sensed a door it again thinks that it is in front of any of those doors. So 3 red peaks again at 4,7 and 15 meters. But given the black peaks already at around 7, 10 and 18 meters, logically it can only be at 7 as the intersection of those beliefs sets {4,7,15} and {7,10,18} is 7, Here we are talking about intersection of peaks (highly possible positions!!) now it is certain that it is at 7 meters. This can be done by just multiplying the probabilities distributions(of prior belief and belief according to 2nd measurement) as the two measurements are independent (that's why we took red peaks when it sensed a second door) as supported by Markov's independent assumption rule.&lt;/p&gt;&#xA;&lt;p&gt;Now wherever it moves it belief of where it is moves.&lt;/p&gt;&#xA;&lt;p&gt;Hope that helps.&lt;/p&gt;&#xA;" OwnerUserId="28705" LastEditorUserId="28705" LastEditDate="2021-05-15T23:09:49.793" LastActivityDate="2021-05-15T23:09:49.793" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22183" PostTypeId="2" ParentId="11509" CreationDate="2021-05-16T12:21:09.437" Score="3" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/tNA8F.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/tNA8F.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&#xA;&lt;strong&gt;State-space equations for your case.&lt;/strong&gt;&lt;/p&gt;&#xA;" OwnerUserId="28711" LastActivityDate="2021-05-16T12:21:09.437" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22184" PostTypeId="2" ParentId="20497" CreationDate="2021-05-16T16:47:04.843" Score="0" Body="&lt;p&gt;We developed this for pipeline inspections and used this to map a pipeline. We found magnetism not to be very reliable and did it without. It works, but you have accumulative errors that can be significant. In our case you will try to find reference points and make corrections for these accordingly. And with a pipeline you always have 2 reference points anyways. The beginning and the end.&lt;/p&gt;&#xA;&lt;p&gt;Joey&lt;/p&gt;&#xA;" OwnerUserId="28712" LastActivityDate="2021-05-16T16:47:04.843" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22185" PostTypeId="1" CreationDate="2021-05-16T17:04:15.120" Score="0" ViewCount="31" Body="&lt;p&gt;I have an irobot create 4400 model and I'm trying to use a jetson nano to send commands to it. I want to try &lt;a href=&quot;https://i.imgur.com/rewh6bP.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;this example&lt;/a&gt; that turns on the play led. I connected the tx and rx and gnd ports from J41 header on the jetson nano to rx and tx and gnd ports on create's db25. Here's &lt;a href=&quot;https://ideone.com/ZghN0y&quot; rel=&quot;nofollow noreferrer&quot;&gt;my code&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;However, the create just won't move at all. I don't know if I'm missing some setup steps or just simply my codes are wrong. I wonder if anyone could be kind enough to check and see if there's anything wrong with my code? How would u write it if u want to send this command? Sorry if my problem is a bit foolish, but I'm really new to this and everything seems so complicated.&lt;/p&gt;&#xA;" OwnerUserId="28713" LastActivityDate="2021-05-16T17:04:15.120" Title="How can I control an Irobot Create using Jetson Nano?" Tags="&lt;irobot-create&gt;" AnswerCount="0" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="22186" PostTypeId="1" CreationDate="2021-05-16T17:47:39.077" Score="0" ViewCount="15" Body="&lt;p&gt;I recently started learning ROS and I am having Macbook (MacOS Catalina) which is not ideal for running ROS. So, I decided to install ROS in my local home ubuntu 20.04 desktop server and connect it to my local Macbook, but I was searching for the setup all over the internet but I didn't find any so please help me to set up it.&lt;/p&gt;&#xA;" OwnerUserId="27415" LastActivityDate="2021-05-16T17:47:39.077" Title="How to setup ROS and it's GUI tools in local server and connect to local macbook" Tags="&lt;ros&gt;&lt;gazebo&gt;&lt;rviz&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22187" PostTypeId="2" ParentId="22178" CreationDate="2021-05-17T01:40:53.340" Score="2" Body="&lt;p&gt;In my experience, when a servo is shaking, that's how it tells you its power source (battery, etc) is inadequate. Especially if the servo hums or buzzes at around the command frequency (50 Hz in your case).&lt;/p&gt;&#xA;&lt;p&gt;That beefy servo model you cite is rated at 12V-24V with a stall current of like 11 amps. Normal operating current will be less, but running all five servos at once will be demanding.&lt;/p&gt;&#xA;&lt;p&gt;Personally I would try two multimeter measurements.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;p&gt;Voltage sag. Set up to measure the voltage as close to the servo as you can, then run the servos in &amp;quot;shaking&amp;quot; mode. I suspect the voltage will be significantly less than the 12 V those servos need at minimum.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;p&gt;&amp;quot;Normal&amp;quot; current. Set up to measure the current drawn by one servo. With a mechanical load on it (e.g., robot arm parts) command the servo to move from one end of its range to the other end. I hope your ammeter reading will stabilize in the time the servo takes to travel its full range.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;If your voltage measurement is low, that confirms the voltage-sag hypothesis. If it's normal, that still leaves the possibility of a bad connection between where you measured and the servo itself.&lt;/p&gt;&#xA;&lt;p&gt;Your power source must be capable of supplying well in excess of the measured &amp;quot;normal&amp;quot; current, times five (the number of servos).  In fact, you may want it to be capable of delivering stall current to all five (like 50A) -- otherwise one stalled servo could disable all the other degrees of freedom.&lt;/p&gt;&#xA;&lt;p&gt;If all that's ok too, I would (re)check the connections, and confirm the wires are fat enough to carry the current. Beyond that, ask for more help, providing more detail.&lt;/p&gt;&#xA;" OwnerUserId="27618" LastActivityDate="2021-05-17T01:40:53.340" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22188" PostTypeId="2" ParentId="22164" CreationDate="2021-05-17T03:19:28.857" Score="1" Body="&lt;p&gt;But I understand that we cannot compare these directly as we would do with Euler angles, because&lt;/p&gt;&#xA;&lt;p&gt;-&amp;gt; Because of singularity around PI.&lt;/p&gt;&#xA;&lt;p&gt;Instead of directly comparing the value in R3, you can do it like this.&lt;/p&gt;&#xA;&lt;p&gt;V_cam1_cam0 = Log(inv(R_World_Cam1)*R_World_Cam0)&lt;/p&gt;&#xA;&lt;p&gt;Now with V_cam1_cam0, cam1 is the reference coordinate and V_cam1_cam0 encodes the rotation axis of cam0 with respect to your cam 1. You can visualize the difference in rpy form if you want.&lt;/p&gt;&#xA;&lt;p&gt;Is this just a coincidence?&lt;/p&gt;&#xA;&lt;p&gt;-&amp;gt; Yes. Some might look similar according to your rotation configuration.&lt;/p&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2021-05-17T03:19:28.857" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="22189" PostTypeId="2" ParentId="22176" CreationDate="2021-05-17T03:27:58.540" Score="0" Body="&lt;p&gt;Does inliers and outliers have something to do with this problem?&lt;/p&gt;&#xA;&lt;p&gt;-&amp;gt; Yes, your odometry estimation error will be accumulated in the point cloud and it will eventually end up what you are experiencing now. Obviously, the error accumulates more over time. That explains why your longer dataset fails.&lt;/p&gt;&#xA;&lt;p&gt;Should I get rid of all outliers first? I mean there are not too many outliers in keypoints set.&lt;/p&gt;&#xA;&lt;p&gt;-&amp;gt; That's very tricky. It might improve if you do it well. But how would your algorithm know which one is the true outlier? Removing outliers is the most tricky part of mono slam. I recommend you to read ORB-SLAM paper. It has all the answer you want to know.&lt;/p&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2021-05-17T03:27:58.540" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="22190" PostTypeId="1" CreationDate="2021-05-17T07:48:14.037" Score="0" ViewCount="53" Body="&lt;p&gt;I am currently doing a personal project and get stuck in something as below. In this project, I am going to use the RRT algorithm on the ur5 robot to make it reach the target frame without any collision. So after the RRT algorithm, a path (i.e. a series of poses) would be generated. And my question is how I can use the Jacobian pseudo inverse method to make the end-effector follow the path smoothly. I am only allowed to perform differential method instead of IK solutions.&lt;/p&gt;&#xA;&lt;p&gt;Of course the easiest way for this is to do interpolation, such as defining 10 intermediate points in the path. But such operation would make the movement not very smooth, i.e. it would first accelerate and then decelerate between each pair of points.&lt;/p&gt;&#xA;&lt;p&gt;Can anyone provide any idea? Thank you very much!&lt;/p&gt;&#xA;" OwnerUserId="28719" LastActivityDate="2021-05-17T23:02:26.767" Title="How to use Jacobian Method for path following?" Tags="&lt;robotic-arm&gt;&lt;inverse-kinematics&gt;&lt;jacobian&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22191" PostTypeId="2" ParentId="22190" CreationDate="2021-05-17T23:02:26.767" Score="1" Body="&lt;p&gt;You can use some Trajectory Generators to create intermediate points between the points calculated by RRT Algorithm. You can use &lt;a href=&quot;https://github.com/NxRLab/ModernRobotics&quot; rel=&quot;nofollow noreferrer&quot;&gt;Moden Robotics Library by Neuroscience and Robotics Lab at Northwestern University on Github&lt;/a&gt; for example to find some functions which can help you at this time step. You can take a look at &amp;quot;CartesianTrajectory&amp;quot; and &amp;quot;ScrewTrajectory&amp;quot; functions of the library for example. They allow you to create trajectories between two configurations by a specified time input. I mentioned this Trajectory Generation, because as far as I know, the reason Jacobian Inverse method is used is, the fact that it allows you to calculate the Inverse Kinematics between very small time steps.&lt;/p&gt;&#xA;&lt;p&gt;You just calculate the Jacobian Matrix of the robot and take its inverse. Then you can use the following equations to (1) calculate the joint displacements according to the translational movement, (2) to calculate the Pseudo Inverse of the Jacobian matrix, according to the article proposed by Robert Krasnansky, Peter Valach, Dávid Soós, Javad Zarbakhsh (Reference trajectory tracking for a multi-DOF robot arm; you can find some useful information from this article as well).&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/3d6fY.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/3d6fY.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The reason Pseudo-Inverse Jacobian is used is, most of the time the inverse Jacobian leads to a matrix which is not full-rank, especially with robots which have many joints, like UR5. When that is the case, Pseudo-Inverse is used instead of the direct inverse method. However, I worked with youBot once in a project, which uses Pseudo-Inverse method for trajectory planning and I dealt with so many singularity cases. So singularities are not guaranteed to be prevented with Pseudo-Inverse Method. To avoid singularities, you can use some tolerance levels (you are able to select a tolerance value with built-in Pseudo-Inverse functions), or make sure that your trajectory is physically feasible and not too fast for your robot.&lt;/p&gt;&#xA;&lt;p&gt;Also you might want to use some type of Control System for the trajectory following task. Here is a video that may help you on that; it is actually part of the videos which belong to my project which I mentioned earlier. Even though it is for a Mobile Manipulator; the idea is not very different for a Robot Arm; instead of acquiring joint and wheel velocities, you receive only joint velocities:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=1MgpqD7v2x0&amp;amp;list=PLggLP4f-rq02vX0OQQ5vrCxbJrzamYDfx&amp;amp;index=97&amp;amp;t=185s&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.youtube.com/watch?v=1MgpqD7v2x0&amp;amp;list=PLggLP4f-rq02vX0OQQ5vrCxbJrzamYDfx&amp;amp;index=97&amp;amp;t=185s&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="26789" LastActivityDate="2021-05-17T23:02:26.767" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22192" PostTypeId="1" CreationDate="2021-05-18T06:30:06.143" Score="0" ViewCount="28" Body="&lt;p&gt;I am using ORB-SLAM3 with a monocular camera on a drone for Augmented Reality application. I need to know the absolute scale of the map formed by the SLAM.&lt;/p&gt;&#xA;&lt;p&gt;I cannot use a stereo or RBG-D setup. Tthe scale of the monocular SLAM is defined every time the SLAM is started. Can someone please suggest any ideas how can I get the scale factor/ absolute scale of the map?&lt;/p&gt;&#xA;&lt;p&gt;Can GPS be used to do this? To measure the distance between points in GPS co-ordinates and the corresponding distance in SLAM map and just divide those to get the scale factor?&lt;/p&gt;&#xA;" OwnerUserId="28728" LastEditorUserId="-1" LastEditDate="2021-05-18T10:11:20.673" LastActivityDate="2021-05-19T06:54:17.617" Title="Scale factor of Monocular SLAM (Simultaneous Localization and Mapping )" Tags="&lt;slam&gt;&lt;gps&gt;&lt;monocular&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22193" PostTypeId="1" CreationDate="2021-05-18T16:18:36.093" Score="0" ViewCount="22" Body="&lt;p&gt;I want the motor to be free to move by hand when I set the PWM to zero. Instead, there is a torque that makes the motor still in one position. Is that possible to do?&lt;/p&gt;&#xA;" OwnerUserId="28731" LastActivityDate="2021-05-18T16:18:36.093" Title="How to control the Dynamixel Motor in PWM mode without having it locked when PWM is zero" Tags="&lt;dynamixel&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="22194" PostTypeId="2" ParentId="22123" CreationDate="2021-05-18T21:52:28.440" Score="0" Body="&lt;p&gt;Ok...So I have now more information. I did not have the inductors necessary hooked up to the motor power connectors so I think the internal circuits of the Create2 were reporting errors.&lt;/p&gt;&#xA;I have now connected the recommended inductors and the robot works and I can control it but ONLY if it is OFF the charger. That is a big problem since I wanted the robot to function autonomously and return to the charger to charge and then resume once the battery was fully charged. If it is on the charger I cannot communicate with it unless I press the CLEAN button and then I can only communicate for 30 secs or so before it goes back to sleep (??).  Has anyone run into the same issue? I am using the python pycreate2 library (which I have expanded).&lt;/p&gt;&#xA;" OwnerUserId="28732" LastActivityDate="2021-05-18T21:52:28.440" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22195" PostTypeId="2" ParentId="22192" CreationDate="2021-05-19T06:54:17.617" Score="0" Body="&lt;p&gt;GPS is a good idea. Draw a trajectory using the GPS and align/scale it to your slam trajectory. But if your drone movement is small (few meters) it is not a solution.&lt;/p&gt;&#xA;&lt;p&gt;Or you can just put a scale known object in the scene around the initial position. By comparing the reconstructed size of the object and the actual object size, you will find the scale factor.&lt;/p&gt;&#xA;" OwnerUserId="19219" LastActivityDate="2021-05-19T06:54:17.617" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22196" PostTypeId="1" CreationDate="2021-05-19T07:29:01.030" Score="0" ViewCount="65" Body="&lt;p&gt;I'm doing application in Android Studio that will scan for devices within reach of a phone. What it does exactly is not important. The problem is, that when I scan for devices, I'd get only the ones that aren't paired. Paired ones are stored in separate list and Android's discovery process automatically skips them. As far as I looked it seems I can't change that.&lt;/p&gt;&#xA;&lt;p&gt;So I need Bluetooth module that won't be able to get paired with a phone, to be 100% sure the whole project will work correctly.&lt;/p&gt;&#xA;&lt;p&gt;Is it possible to set a module (like HC-06) to make it unparable?&lt;/p&gt;&#xA;&lt;p&gt;Can I buy a module like that somewhere? I couldn't find anything.&lt;/p&gt;&#xA;" OwnerUserId="28733" LastEditorUserId="28733" LastEditDate="2021-05-24T16:20:45.500" LastActivityDate="2021-05-26T19:53:51.103" Title="Unparable Bluetooth module" Tags="&lt;hardware&gt;&lt;bluetooth&gt;" AnswerCount="0" CommentCount="9" FavoriteCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22197" PostTypeId="1" CreationDate="2021-05-20T00:22:04.393" Score="0" ViewCount="19" Body="&lt;p&gt;If this is not the correct community for this kind of question please direct me to a better one.&lt;/p&gt;&#xA;&lt;p&gt;Currently I am working on my thesis, which is trying to validate different lidar sensors. In order to validate a sensor I would need a target, which my plan is to use portable targets that have set reflectance values. My goal was to have three different targets at 10%, 50%, and 80%.&lt;/p&gt;&#xA;&lt;p&gt;I have tried looking for these topic online, but I have not been able to find much on test targets for lidars. I have thought of painting some cardboard with some paint that has a specific light reflectance value, but I do not know if this is the best way.&lt;/p&gt;&#xA;&lt;p&gt;What would be the best route to getting and object at set reflectance values?&lt;/p&gt;&#xA;" OwnerUserId="28741" LastActivityDate="2021-05-20T00:22:04.393" Title="What to use to validate a lidar sensor at set reflectances?" Tags="&lt;sensors&gt;&lt;lidar&gt;" AnswerCount="0" CommentCount="3" ContentLicense="CC BY-SA 4.0" />
  <row Id="22198" PostTypeId="1" CreationDate="2021-05-20T06:36:48.170" Score="0" ViewCount="13" Body="&lt;p&gt;I tried installing smach on ROS Melodic with the command:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ sudo apt-get install ros-melodic-smach ros-melodic-smach-ros ros-melodic-executive-smach ros-melodic-smach-viewer  &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;from the book i'm reading ROS Robotics Projects by Ramkumar Gandhinathan, Lentin Joseph. while the other packages got installed the smach_viewer package gave a 404 error. After checking the package on this link i found out that some of the deb files were missing. please how do i solve this problem.&lt;/p&gt;&#xA;&lt;p&gt;this is the error i'm getting:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Reading package lists... Done&#xA;Building dependency tree       &#xA;Reading state information... Done&#xA;The following packages were automatically installed and are no longer required:&#xA;python3-click python3-colorama&#xA;Use 'sudo apt autoremove' to remove them.&#xA;The following additional packages will be installed:&#xA;libatk-bridge2.0-dev libatspi2.0-dev libdbus-1-dev libepoxy-dev libgtk-3-dev&#xA;libxkbcommon-dev libxtst-dev python-gi-cairo wayland-protocols&#xA;x11proto-record-dev&#xA;Suggested packages:&#xA;libgtk-3-doc&#xA;The following NEW packages will be installed:&#xA;libatk-bridge2.0-dev libatspi2.0-dev libdbus-1-dev libepoxy-dev libgtk-3-dev&#xA;libxkbcommon-dev libxtst-dev python-gi-cairo ros-melodic-smach-viewer&#xA;wayland-protocols x11proto-record-dev&#xA;0 upgraded, 11 newly installed, 0 to remove and 3 not upgraded.&#xA;Need to get 83.6 kB/1,551 kB of archives.&#xA;After this operation, 16.1 MB of additional disk space will be used.&#xA;Do you want to continue? [Y/n] y&#xA;Err:1 http://packages.ros.org/ros/ubuntu bionic/main amd64 ros-melodic-smach-viewer amd64 3.0.0-1bionic.20210414.224955&#xA;404  Not Found [IP: 64.50.233.100 80]&#xA;E: Failed to fetch http://packages.ros.org/ros/ubuntu/pool/main/r/ros-melodic-smach-viewer/ros-melodic-smach-viewer_3.0.0-1bionic.20210414.224955_amd64.deb  &#xA;404  Not Found [IP: 64.50.233.100 80]&#xA;E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;please can anyone help me solve this problem. Thank you&lt;/p&gt;&#xA;" OwnerUserId="27772" LastActivityDate="2021-05-20T06:36:48.170" Title="can't install smach_viewer on ros melodic" Tags="&lt;ros&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22200" PostTypeId="1" AcceptedAnswerId="22212" CreationDate="2021-05-21T05:28:27.967" Score="0" ViewCount="47" Body="&lt;p&gt;Artificial potential barriers are known that allow robots to avoid obstacles. They are constructed as follows. &lt;a href=&quot;https://authors.library.caltech.edu/106548/1/2010.09819.pdf&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://authors.library.caltech.edu/106548/1/2010.09819.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/BgYmb.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/BgYmb.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Can you please tell me how this approach is generalized to the case of limiting several coordinates of the controlled robot?&lt;/p&gt;&#xA;" OwnerUserId="24481" LastActivityDate="2021-05-25T18:48:18.140" Title="Multidimensional obstacle avoidance" Tags="&lt;control&gt;&lt;microcontroller&gt;&lt;dynamics&gt;&lt;dynamic-programming&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22202" PostTypeId="1" CreationDate="2021-05-21T11:04:59.550" Score="0" ViewCount="52" Body="&lt;p&gt;I want to create a pick and place robot arm simulation, which also integrates object detection, using MATLAB. I have read all of MATLAB's documentation and watched all the relevant videos, and studied them for hours, however I am still struggling to understand how to do this. Is there any other learning resources out there that could help me? Thank you.&lt;/p&gt;&#xA;" OwnerUserId="27836" LastActivityDate="2021-05-21T11:04:59.550" Title="Learning Resources for Pick and Place Robot" Tags="&lt;robotic-arm&gt;&lt;matlab&gt;" AnswerCount="0" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="22203" PostTypeId="2" ParentId="21068" CreationDate="2021-05-21T13:46:26.640" Score="0" Body="&lt;p&gt;&lt;code&gt;rosdep update&lt;/code&gt; should be run without sudo. &lt;a href=&quot;http://wiki.ros.org/rosdep&quot; rel=&quot;nofollow noreferrer&quot;&gt;ROS wiki/rosdep&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;pre class=&quot;lang-bash prettyprint-override&quot;&gt;&lt;code&gt;sudo rosdep init&#xA;rosdep update ## without sudo&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Running &lt;code&gt;rosdep update&lt;/code&gt; again might solve your problem, although I haven't encountered this specific problem myself. Further steps to investigate could be to search for the commands you are missing (rqt, rostopic). For example search for &lt;code&gt;roscore&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;pre class=&quot;lang-bash prettyprint-override&quot;&gt;&lt;code&gt;find /opt/ros/$ROS_DISTRO/bin -iname roscore&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;code&gt;$ROS_DISTRO&lt;/code&gt; might need to be manually to your ROS distribution (for example noetic).&lt;/p&gt;&#xA;" OwnerUserId="28761" LastActivityDate="2021-05-21T13:46:26.640" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22204" PostTypeId="2" ParentId="15107" CreationDate="2021-05-24T13:01:40.440" Score="0" Body="&lt;p&gt;Delete folder catkin_ws , And do it again.&lt;/p&gt;&#xA;" OwnerUserId="28775" LastEditorUserId="110" LastEditDate="2021-05-28T12:32:32.230" LastActivityDate="2021-05-28T12:32:32.230" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="22205" PostTypeId="1" CreationDate="2021-05-24T16:56:45.680" Score="1" ViewCount="39" Body="&lt;p&gt;I'm interested in decreasing the cycle time (time to execute a given task) of a robotic arm. As in the title, are there any downsides to maximising the joint jerks of the robot?&lt;/p&gt;&#xA;&lt;p&gt;Naively, increasing the rate of acceleration should lead to shorter cycle times. Perhaps are there long term negative effects on the wear and tear of the robot?&lt;/p&gt;&#xA;" OwnerUserId="19260" LastEditorUserId="19260" LastEditDate="2021-05-27T09:38:14.287" LastActivityDate="2021-05-27T09:38:14.287" Title="Is higher jerk always better for reducing cycle time?" Tags="&lt;robotic-arm&gt;&lt;jerk&gt;&lt;cycle-time&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="22206" PostTypeId="1" CreationDate="2021-05-24T19:04:13.933" Score="1" ViewCount="28" Body="&lt;p&gt;I am beginner in the robotics space and I am trying to apply inverse kinematics to robot leg that has 4 degrees of freedom. I do not know how to think about solving these problems, so any guidance would be greatly appreciated!&lt;/p&gt;&#xA;&lt;p&gt;The legs are from this system and I am working to understand only one currently (this may be the wrong approach):&#xA;&lt;a href=&quot;https://www.robotshop.com/en/lynxmotion-t-hex-4dof-hexapod-robot-kit-hardware-only.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.robotshop.com/en/lynxmotion-t-hex-4dof-hexapod-robot-kit-hardware-only.html&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;My first question is, is inverse kinematics the correct approach? To me it seems to be since I want to determine the angles for the servos based on the foot position and trajectory. If anyone has any recommendations with respect to this I would greatly appreciate it so that I know am not headed down the right path. That being said, I am struggling to find solutions to problems of this sort. It seems as though 4 DoF is more challenging and is often not solved analytically. I would still like to solve this analytically, but I have moved on to try out numerical solutions.&lt;/p&gt;&#xA;&lt;p&gt;In MATLAB, I have worked through several examples and I have tried to transition them to the case of this system. I have attached my code so far. Currently, I am struggling with applying joint constraints, getting the configuration that is more physical, and getting a useable solution from this approach. So my questions to this are:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Is this a valid approach to finding the solution to inverse kinematics of this system?&#xA;&lt;ul&gt;&#xA;&lt;li&gt;As in, if I manage to get this to work, is the solution useable? I may be picturing this wrong, but I foresee getting a sequence of servo angles that will correspond to the trajectory. If I get these servo angles (and the joint constraints, lengths, etc. are all physically accurate) will I be able to give the leg the sequence? If this is even a valid approach, I have some MATLAB questions to follow.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Will this approach transition well to when there are more legs (i.e. the complete robot with 6 legs)?&lt;/li&gt;&#xA;&lt;li&gt;How do joint constraints work in the robotics toolbox?&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It seems like rotation is right-handed with respect to the axis of rotation. In addition, when a positive angle is applied, it seems to rotate the rigidbody below the local coordinate system of the joint. However, there are joint constraints to the servos and when I try to apply these, the IK solver that I setup fails to follow the defined trajectory and will give errors saying that the joint angle is outside of the constraints set, even when I make sure that they are valid ranges. I have not been able to find useful documentation on this.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;If I get the joint constraints set correctly, will the solution be in the correct configuration?&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Should I consider other constraints to apply?&lt;/li&gt;&#xA;&lt;li&gt;Is the invverseKinematics from MATLAB what I need or should I be trying generalizedInverseKinematics?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Currently, I defined some random arc for the trajectory. Should I consider something else for the walk of a hexapedal robot?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;I am open to any suggestions since it is clear that I do not have any direction. Please let me know if more information is needed and I will edit the post. Physical dimensions of the robot are included in the code. The height of base is arbitrary currently. I have tried to comment the code heavily so that it is easy to understand. Lastly, here are 4 images showing the current results of the MATLAB simulation. blue lines are the body segments and the black ark is the trajectory.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/XVpkJ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/XVpkJ.png&quot; alt=&quot;XY and YZ Perspective&quot; /&gt;&lt;/a&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/ssyv8.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ssyv8.png&quot; alt=&quot;Labeled 3D System&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Code:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;% Robot_Advanced_Real.m&#xA;% Copied from matlab and adapted for my scenario.&#xA;% Creates robot, uses IK to calculate positions, Creates animation&#xA;&#xA;% Initialize MATLAB&#xA;clear all;&#xA;close all;&#xA;clc;&#xA;tic;&#xA;&#xA;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&#xA;%% Building Robot&#xA;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&#xA;&#xA;% Start with Blank RigidTreeBody Model&#xA;robot = rigidBodyTree('DataFormat','column','MaxNumBodies',5);&#xA;&#xA;% Specify Arm Lengths of the Robot Arm. Units: [mm]&#xA;L1 = 28.45;&#xA;L2 = 75.41;&#xA;L3 = 70.02;&#xA;L4 = 87.14;&#xA;&#xA;% Height of robot body off of Ground&#xA;G = 100;&#xA;&#xA;% Add first body with joint. Set as robot base.&#xA;body = rigidBody('link1');&#xA;joint1 = rigidBodyJoint('joint1', 'revolute');&#xA;setFixedTransform(joint1,trvec2tform([0 0 G]));&#xA;joint1.JointAxis = [0 0 1];&#xA;joint1.HomePosition = pi/6;&#xA;% joint.PositionLimits = [0, pi];&#xA;body.Joint = joint1;&#xA;addBody(robot, body, 'base');&#xA;&#xA;% Add second body with joint. Attach to First&#xA;body = rigidBody('link2');&#xA;joint2 = rigidBodyJoint('joint2','revolute');&#xA;setFixedTransform(joint2, trvec2tform([L1,0,0]));&#xA;joint2.JointAxis = [0 1 0];&#xA;joint2.HomePosition = pi/6;&#xA;% joint.PositionLimits = [0, pi];&#xA;body.Joint = joint2;&#xA;addBody(robot, body, 'link1');&#xA;&#xA;% Add third body with joint. Attach to second&#xA;body = rigidBody('link3');&#xA;joint3 = rigidBodyJoint('joint3','revolute');&#xA;setFixedTransform(joint3, trvec2tform([L2,0,0]));&#xA;joint3.JointAxis = [0 1 0];&#xA;joint3.HomePosition = pi/6;&#xA;% joint.PositionLimits = [0, pi];&#xA;body.Joint = joint3;&#xA;addBody(robot, body, 'link2');&#xA;&#xA;% Add fourth body with joint. Attach to third&#xA;body = rigidBody('link4');&#xA;joint4 = rigidBodyJoint('joint4','revolute');&#xA;setFixedTransform(joint4, trvec2tform([L3,0,0]));&#xA;joint4.JointAxis = [0 1 0];&#xA;joint4.HomePosition = pi/6;&#xA;% joint.PositionLimits = [0, pi];&#xA;body.Joint = joint4;&#xA;addBody(robot, body, 'link3');&#xA;&#xA;% Add End Effector with Fixed Joint. Attach to final body.&#xA;body = rigidBody('tool');&#xA;joint = rigidBodyJoint('fix1','fixed');&#xA;setFixedTransform(joint, trvec2tform([L4, 0, 0]));&#xA;body.Joint = joint;&#xA;addBody(robot, body, 'link4');&#xA;&#xA;% View Robot Input details to review setup&#xA;showdetails(robot);&#xA;&#xA;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&#xA;%% Define Trajectory&#xA;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&#xA;&#xA;&#xA;% Define series of [x y z] for arc step.&#xA;% Define parameters of the arc.&#xA;xCenter = 0;&#xA;yCenter = 120;&#xA;zCenter = 0;&#xA;xRadius = 70;&#xA;yRadius = 20;&#xA;zRadius = 20;&#xA;&#xA;% Define the angle theta as going from 30 to 150 degrees in 100 steps.&#xA;theta = linspace(30, 150, 100);&#xA;% Define x and y using &amp;quot;Degrees&amp;quot; version of sin and cos.&#xA;x = (xRadius * cosd(theta) + xCenter)'; &#xA;y = (yRadius * sind(theta) + yCenter)'; &#xA;z = (zRadius * sind(theta) + zCenter)';&#xA;&#xA;% Points around circle&#xA;% points = center + [x y z];&#xA;points = [x y z];&#xA;count  = length(x);&#xA;&#xA;% Check&#xA;% plot3(points(:,1),points(:,2),points(:,3))&#xA;plot3(x,y,z)&#xA;hold on&#xA;plot3(points(:,1),points(:,2),points(:,3),'k')&#xA;xlabel('x')&#xA;ylabel('y')&#xA;zlabel('z')&#xA;&#xA;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&#xA;%% Inverse Kinematics&#xA;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&#xA;&#xA;% Use IK object to find a solution to the joint configurations that achieve&#xA;% end effector coordinates along ttrajectory&#xA;&#xA;% Pre-allocate configuration solutions as a matrix, qs&#xA;q0 = homeConfiguration(robot);&#xA;ndof = length(q0);&#xA;qs = zeros(count, ndof);&#xA;&#xA;% create the IK Solver.&#xA;ik = inverseKinematics('RigidBodyTree', robot);&#xA;&#xA;% Use desired weights for solution (First three are orientation, last three are translation)&#xA;% Since it is a 4-DOF robot with only one revolute joint in Z we do not&#xA;% put a weight on Z rotation; otherwise it limits the solution space&#xA;% weights = [0, 0, 0, 1, 1, 0];&#xA;weights = [0.1, 0.1, 0, 1, 1, 1];&#xA;endEffector = 'tool';&#xA;&#xA;% Loop through the trajectory and store the configurations. IK is used to&#xA;% give joint configurations.&#xA;qInitial = q0; % Use home configuration as the initial guess&#xA;for i = 1:count&#xA;    % Solve for the configuration satisfying the desired end effector&#xA;    % position&#xA;    point = points(i,:);&#xA;    qSol = ik(endEffector,trvec2tform(point),weights,qInitial);&#xA;    % Store the configuration&#xA;    qs(i,:) = qSol;&#xA;    % Start from prior solution&#xA;    qInitial = qSol;&#xA;end&#xA;&#xA;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&#xA;%% Animate Solution&#xA;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&#xA;&#xA;% Show first configuration. Show trajectory.&#xA;figure&#xA;show(robot,qs(1,:)');&#xA;ax = gca;&#xA;ax.Projection = 'orthographic';&#xA;hold on&#xA;plot3(points(:,1),points(:,2),points(:,3),'k')&#xA;view([-37.5 30])&#xA;&#xA;% Set up animation. Show robot in each configuration on trajectory&#xA;framesPerSecond = 7;&#xA;r = rateControl(framesPerSecond);&#xA;for i = 1:count&#xA;    show(robot,qs(i,:)','PreservePlot',false);&#xA;    drawnow&#xA;    waitfor(r);&#xA;end&#xA;&#xA;toc&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;" OwnerUserId="28776" LastActivityDate="2021-05-24T19:04:13.933" Title="Inverse Kinematics for a 4-DoF Leg" Tags="&lt;inverse-kinematics&gt;&lt;matlab&gt;&lt;robotics-toolbox&gt;&lt;hexapod&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22207" PostTypeId="1" AcceptedAnswerId="22215" CreationDate="2021-05-25T14:54:05.070" Score="0" ViewCount="59" Body="&lt;p&gt;I propagate the attitude of a satellite in a free-floating, torque free environment from &lt;span class=&quot;math-container&quot;&gt;$t_k$&lt;/span&gt; to &lt;span class=&quot;math-container&quot;&gt;$t_{k+1}$&lt;/span&gt; by integrating &lt;a href=&quot;https://en.wikipedia.org/wiki/Euler%27s_equations_%28rigid_body_dynamics%29&quot; rel=&quot;nofollow noreferrer&quot;&gt;Euler's equation of motion&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ \dot{\omega} = [J]^{-1}([\omega]_{\times}[J]\:\omega)$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;with &lt;span class=&quot;math-container&quot;&gt;$[J]\in\mathbb{R}^{3\times3}$&lt;/span&gt; being the (full) inertia matrix and &lt;span class=&quot;math-container&quot;&gt;$\omega \in \mathbb{R}^3$&lt;/span&gt; the angular velocity vector, and &lt;span class=&quot;math-container&quot;&gt;$[\cdot]_{\times}$&lt;/span&gt; being the skew-symmetric operator.&lt;/p&gt;&#xA;&lt;p&gt;If we consider an Euler integration step of &lt;span class=&quot;math-container&quot;&gt;$dt$&lt;/span&gt;, we can therefore write:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ \omega_{k+1} = \dot{\omega}_k\cdot dt = [J]^{-1}([\omega_k]_{\times}[J]\:\omega_k)\cdot dt$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;I would like to compute the analytical Jacobian &lt;span class=&quot;math-container&quot;&gt;$\textbf{F}_\omega = \frac{\partial\omega_{k+1}}{\partial \omega_k}$&lt;/span&gt;, or an approximation of it, in order to propagate the covariance from &lt;span class=&quot;math-container&quot;&gt;$t_k$&lt;/span&gt; to &lt;span class=&quot;math-container&quot;&gt;$t_{k+1}$&lt;/span&gt;. Is there any known closed-form solution? With the cross-product, I really don't know how to tackle the problem.&lt;/p&gt;&#xA;&lt;p&gt;Any help is welcome. Thank you.&lt;/p&gt;&#xA;" OwnerUserId="28786" LastEditorUserId="28786" LastEditDate="2021-05-26T14:39:18.840" LastActivityDate="2021-05-26T14:39:18.840" Title="Jacobian of Euler's rotation equations" Tags="&lt;dynamics&gt;&lt;jacobian&gt;" AnswerCount="1" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="22210" PostTypeId="2" ParentId="22205" CreationDate="2021-05-25T15:40:47.000" Score="3" Body="&lt;p&gt;I haven't directly worked with robot arms, but I would think that too much jerk is a bad idea. I think it could increase the wear and tear of the joints and also affect final precision.&lt;/p&gt;&#xA;&lt;p&gt;Anyways, &lt;a href=&quot;https://www.sciencedirect.com/science/article/pii/S0736584512000981&quot; rel=&quot;nofollow noreferrer&quot;&gt;this paper&lt;/a&gt; sheds some insights on this topic.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;High jerk of the robot joint can heavily excite the resonance&#xA;frequencies of the body structure, creating vibrations, and slow down&#xA;the tracking speed, as well as affect the tracking precision&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;" OwnerUserId="27064" LastActivityDate="2021-05-25T15:40:47.000" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22211" PostTypeId="1" AcceptedAnswerId="22214" CreationDate="2021-05-25T18:21:48.600" Score="2" ViewCount="38" Body="&lt;p&gt;I was watching James Bruton's &lt;a href=&quot;https://www.youtube.com/watch?v=zKLMCO0-How&amp;amp;t=66s&quot; rel=&quot;nofollow noreferrer&quot;&gt;video&lt;/a&gt; on his spherical omniwheeled robot and he was explaining how to go directly sideways. He explains this from 6:09 to 7:06. I didn't understand how the velocity of the wheels not facing the direction of movement move exactly the cos(60). I kind of get how the yaw force from the directional wheel need to be counteracted by the other 2 wheels so each wheel spins at half the velocity of the directional wheel but how does this have to do with the cos(60)? Can someone please explain the math behind this?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/8zQi7.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8zQi7.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;" OwnerUserId="26747" LastActivityDate="2021-05-26T11:58:40.833" Title="Omnidirectional Movement for 3 Wheeled Spherical Omni wheel robot" Tags="&lt;kinematics&gt;&lt;motion&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="22212" PostTypeId="2" ParentId="22200" CreationDate="2021-05-25T18:48:18.140" Score="1" Body="&lt;p&gt;I am assuming that the desired application would be to control a quadrotor drone or similar platform.&lt;/p&gt;&#xA;&lt;p&gt;The scalar representations of distance shown in the paper above can be represented in 2 ways (that I see). You could extend from the 2d plane to the 3d plane using the same vector norm function as before. This would mean that the mathematical operations would not change, just the low level data structure would be a 3 element vector instead of a 2 element vector.&lt;/p&gt;&#xA;&lt;p&gt;You could also simply do all of those equations separately on the X, Y, and Z components of the pose vector at the same time. This could be implemented with 3 different threads running the same mathematical process. This is probably safer since you can then prioritize each axis exclusive of the others in case you have to navigate areas where one axis of motion is not going to require large position deltas.&lt;/p&gt;&#xA;&lt;p&gt;Does that help?&lt;/p&gt;&#xA;" OwnerUserId="23597" LastActivityDate="2021-05-25T18:48:18.140" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="22213" PostTypeId="1" CreationDate="2021-05-26T06:02:18.753" Score="0" ViewCount="14" Body="&lt;p&gt;This article contains section &lt;strong&gt;4. Optimization problem of the SPMs design&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://www.sciencedirect.com/science/article/abs/pii/S0921889014001250&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.sciencedirect.com/science/article/abs/pii/S0921889014001250&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Tell me please, are there any special programs for optimizing robots of this configuration, or do all the developers write programs themselves? (Matlab, Mathematica, etc.). Does anyone have any experience in optimizing such robots?&lt;/p&gt;&#xA;" OwnerUserId="24481" LastActivityDate="2021-05-26T06:02:18.753" Title="Optimization problem of the SPMs design" Tags="&lt;control&gt;&lt;robotic-arm&gt;&lt;optimization&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22214" PostTypeId="2" ParentId="22211" CreationDate="2021-05-26T11:58:40.833" Score="3" Body="&lt;p&gt;I think this is not really difficult trigonometry. Suppose we want the robot to move in a forward direction? We need to use the two front motors. (I tried to sketch this out in the pictures, I will now explain all this scribble). Due to the fact that the motors are not at right angles to the axis we need, therefore, we need to feed the motors a little higher speed so that it travels at the axial speed we need. To calculate how much you need to increase the speed for the motors so that the axial speed is necessary for us, we need trigonometry.&#xA;&lt;a href=&quot;https://i.stack.imgur.com/VcAVs.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/VcAVs.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Imagine that we need to move forward at an axial speed of &lt;code&gt;10&lt;/code&gt;. What speed must be applied to the left and right motors so that the entire robot moves forward at a speed of &lt;code&gt;10&lt;/code&gt;? Let's find out. &lt;code&gt;X&lt;/code&gt; is the required axial speed. The front wheels are off-axis by &lt;code&gt;30&lt;/code&gt; degrees. The side is adjacent, so we take the &lt;code&gt;cos&lt;/code&gt; of &lt;code&gt;30&lt;/code&gt; degrees. We get &lt;code&gt;10 / cos(30)&lt;/code&gt; is approximately &lt;code&gt;11.54&lt;/code&gt;. But we have two motors, so we just halve the speed and feed the motors. (I do not take into account the direction of rotation here).&lt;br /&gt;&#xA;Now it's more interesting how to move to the sides? In this case, all motors must move in the same axial direction. Let's start with the back motor. It stands parallel to the axis we need, so we don't need to change its speed. Well, just split it in half, because the top and bottom parts of the robot must move at the same speed.&lt;br /&gt;&#xA;&lt;a href=&quot;https://i.stack.imgur.com/6Zk5Q.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6Zk5Q.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&#xA;Now the front motors. They are located at an angle of &lt;code&gt;60&lt;/code&gt; degrees to the desired axis. The side is again adjacent, we take the &lt;code&gt;cosine&lt;/code&gt;. Next, we take half of the required speed, divide it by &lt;code&gt;cosine 60&lt;/code&gt;, then divide it in half again, because there are two motors in front and that's it. Well, an example. If we want to move at a speed of &lt;code&gt;10&lt;/code&gt; to the side, then we need to apply speed &lt;code&gt;5&lt;/code&gt; to the back motor, and &lt;code&gt;2.5&lt;/code&gt; to each of the front ones.&lt;br /&gt;&#xA;So that's why there is a &lt;code&gt;cos(60)&lt;/code&gt;.&lt;/p&gt;&#xA;" OwnerUserId="28792" LastActivityDate="2021-05-26T11:58:40.833" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="22215" PostTypeId="2" ParentId="22207" CreationDate="2021-05-26T12:16:09.787" Score="1" Body="&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$\frac{\partial\dot\omega}{\partial\omega} = [J]^{-1}\frac{\partial([\omega]_{\times}[J]\omega)}{\partial\omega}$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$= [J]^{-1} \frac{\partial(\omega\times[J]\omega)}{\partial\omega}$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$= [J]^{-1} \left (\frac{\partial\omega}{\partial\omega}\times[J]\omega + \omega \times [J]\frac{\partial\omega}{\partial \omega}\right)$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$$ = [J]^{-1} \left (1\times[J]\omega + [\omega]_\times[J] \right) $$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Using the two definitions:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$a \times b = [a]_{\times}b = [b]^{\intercal}_{\times}a$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;span class=&quot;math-container&quot;&gt;$[x]^{\intercal}_{\times} = -[x]_{\times}$&lt;/span&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;on the term &lt;span class=&quot;math-container&quot;&gt;$1\times[J]\omega$&lt;/span&gt; we find the correct answer:&#xA;&lt;span class=&quot;math-container&quot;&gt;$$ \frac{\partial\dot\omega}{\partial\omega} = [J]^{-1} \left ( [\omega]_{\times}[J] - \left [[J]\omega \right]_{\times} \right )$$&lt;/span&gt;&lt;/p&gt;&#xA;" OwnerUserId="28786" LastEditorUserId="28786" LastEditDate="2021-05-26T14:25:52.810" LastActivityDate="2021-05-26T14:25:52.810" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22216" PostTypeId="1" CreationDate="2021-05-27T14:03:10.847" Score="1" ViewCount="22" Body="&lt;p&gt;I'm in the process of creating a coordination system for a multi robot system. For that i currently have created a ROS based simulation in gazebo using &lt;a href=&quot;https://github.com/husarion/rosbot_description&quot; rel=&quot;nofollow noreferrer&quot;&gt;Rosbot2.0&lt;/a&gt; (Robot physically available as well). Following are the launch files i used.&lt;/p&gt;&#xA;&lt;p&gt;Template launch file for a single robot.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;launch&amp;gt;&#xA;&amp;lt;arg name=&amp;quot;tf_prefix&amp;quot; default=&amp;quot;&amp;quot;/&amp;gt;&#xA;&amp;lt;arg name=&amp;quot;init_pose&amp;quot; default=&amp;quot;-x 0.5 -y 0.5 -z 0 -R 0 -P 0 -Y 0&amp;quot;/&amp;gt;&#xA;&#xA;&amp;lt;!-- Load the joint space controller --&amp;gt;&#xA;&amp;lt;rosparam command=&amp;quot;load&amp;quot; file=&amp;quot;$(find joint_state_controller)/joint_state_controller.yaml&amp;quot; /&amp;gt;&#xA;&amp;lt;node name=&amp;quot;joint_state_controller_spawner&amp;quot; pkg=&amp;quot;controller_manager&amp;quot; type=&amp;quot;spawner&amp;quot; output=&amp;quot;screen&amp;quot; args=&amp;quot;joint_state_controller&amp;quot; /&amp;gt;&#xA;&#xA;&amp;lt;!-- load the model of the robot&amp;quot; --&amp;gt;&#xA;&amp;lt;param name=&amp;quot;robot_description&amp;quot; command=&amp;quot;&lt;span class=&quot;math-container&quot;&gt;$(find xacro)/xacro '$&lt;/span&gt;(find rosbot_description)/urdf/rosbot.xacro' robot_namespace:=$(arg tf_prefix)&amp;quot;/&amp;gt;&#xA;&#xA;&amp;lt;!-- Spawn the robot_state_publisher with the desired tf_prefix --&amp;gt;&#xA;&amp;lt;node name=&amp;quot;robot_state_publisher&amp;quot; pkg=&amp;quot;robot_state_publisher&amp;quot; type=&amp;quot;robot_state_publisher&amp;quot; output=&amp;quot;screen&amp;quot;&amp;gt;&#xA;    &amp;lt;param name=&amp;quot;tf_prefix&amp;quot; value=&amp;quot;$(arg tf_prefix)&amp;quot;/&amp;gt;&#xA;&amp;lt;/node&amp;gt;&#xA;&#xA;&amp;lt;!-- Spawn the robot in the desired pose given by &amp;quot;init_pose&amp;quot; variable&amp;quot; --&amp;gt;&#xA;&amp;lt;node name=&amp;quot;rosbot_spawn&amp;quot; pkg=&amp;quot;gazebo_ros&amp;quot; type=&amp;quot;spawn_model&amp;quot; output=&amp;quot;screen&amp;quot; args=&amp;quot;&lt;span class=&quot;math-container&quot;&gt;$(arg init_pose) -urdf -param robot_description -model $&lt;/span&gt;(arg tf_prefix)&amp;quot;/&amp;gt;&#xA;&#xA;&amp;lt;node pkg=&amp;quot;tf&amp;quot; type=&amp;quot;static_transform_publisher&amp;quot; name=&amp;quot;map_publisher&amp;quot; args=&amp;quot;0 0 0 0 0 0 map &lt;span class=&quot;math-container&quot;&gt;$(arg tf_prefix)/map 100&quot;/&amp;gt;&#xA;&amp;lt;node pkg=&quot;tf&quot; type=&quot;static_transform_publisher&quot; name=&quot;imu_publisher&quot; args=&quot;0 0 0.02 0 0 0 $&lt;/span&gt;(arg tf_prefix)/base_link $(arg tf_prefix)/imu_link 100&amp;quot;/&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Multi robot launch file&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;launch&amp;gt;&#xA;&amp;lt;!-- BEGIN ROBOT 1--&amp;gt;&#xA;&amp;lt;group ns=&amp;quot;rosbot1&amp;quot;&amp;gt;&#xA;    &amp;lt;include file=&amp;quot;$(find rosbot_description)/launch/single_rosbot.launch&amp;quot; &amp;gt;&#xA;        &amp;lt;arg name=&amp;quot;init_pose&amp;quot; value=&amp;quot;-x 0.5 -y 0.5 -z 0 -R 0 -P 0 -Y 0&amp;quot; /&amp;gt;&#xA;        &amp;lt;arg name=&amp;quot;tf_prefix&amp;quot; value=&amp;quot;rosbot1&amp;quot;/&amp;gt;&#xA;    &amp;lt;/include&amp;gt;&#xA;&amp;lt;/group&amp;gt;&#xA;&#xA;&amp;lt;!-- BEGIN ROBOT 2--&amp;gt;&#xA;&amp;lt;group ns=&amp;quot;rosbot2&amp;quot;&amp;gt;&#xA;    &amp;lt;include file=&amp;quot;$(find rosbot_description)/launch/single_rosbot.launch&amp;quot; &amp;gt;&#xA;        &amp;lt;arg name=&amp;quot;init_pose&amp;quot; value=&amp;quot;-x 4.5 -y 0.5 -z 0 -R 0 -P 0 -Y 1.57&amp;quot; /&amp;gt;&#xA;        &amp;lt;arg name=&amp;quot;tf_prefix&amp;quot; value=&amp;quot;rosbot2&amp;quot;/&amp;gt;&#xA;    &amp;lt;/include&amp;gt;&#xA;&amp;lt;/group&amp;gt;&#xA;&#xA;&amp;lt;!-- BEGIN ROBOT 2--&amp;gt;&#xA;&amp;lt;group ns=&amp;quot;rosbot3&amp;quot;&amp;gt;&#xA;    &amp;lt;include file=&amp;quot;$(find rosbot_description)/launch/single_rosbot.launch&amp;quot; &amp;gt;&#xA;        &amp;lt;arg name=&amp;quot;init_pose&amp;quot; value=&amp;quot;-x 0.5 -y 4.5 -z 0 -R 0 -P 0 -Y 0&amp;quot; /&amp;gt;&#xA;        &amp;lt;arg name=&amp;quot;tf_prefix&amp;quot; value=&amp;quot;rosbot3&amp;quot;/&amp;gt;&#xA;    &amp;lt;/include&amp;gt;&#xA;&amp;lt;/group&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;With these files i can load the robots into the simulation without an issue.&lt;/p&gt;&#xA;&lt;p&gt;My target is to create a multi robot coordination system that can work with robots without knowing their initial position. So to follow that premise, when simulated, each robot's odometry and TF both needs to be zero. But with the above approach,&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;robot 1 starting position 0.5 0.5 0&lt;/li&gt;&#xA;&lt;li&gt;robot 2 starting position 4.5 0.5 0&lt;/li&gt;&#xA;&lt;li&gt;robot 3 starting position 0.5 4.5 0&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;are reflected as is in odom and TF.&lt;/p&gt;&#xA;&lt;p&gt;Is there a way to keep the robots as mentioned above and still has the odom and TF to 0 0 0.&lt;/p&gt;&#xA;&lt;p&gt;To add to that, what i need to do is simulate real world where robots start position is considered origin. In rosbot real world usage, they use &lt;a href=&quot;https://github.com/husarion/rosbot_ekf&quot; rel=&quot;nofollow noreferrer&quot;&gt;rosbot_ekf&lt;/a&gt; to generate the odom so each robot start from 0 0 0 but actually in seperate position. I'm looking for a way to simulate that. Thanks&lt;/p&gt;&#xA;" OwnerUserId="21136" LastActivityDate="2021-05-27T17:36:06.303" Title="How to reset odom positions of robots while setting initial positions of robots in gazebo simulation through launch file" Tags="&lt;ros&gt;&lt;simulation&gt;&lt;odometry&gt;&lt;gazebo&gt;" AnswerCount="1" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22217" PostTypeId="2" ParentId="22216" CreationDate="2021-05-27T17:29:42.970" Score="1" Body="&lt;p&gt;Usually, robot's float a topic (eg &lt;code&gt;/mobile_base/commands/reset_odometry&lt;/code&gt; for TurtleBot) to reset the odometry.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&quot;https://github.com/husarion/rosbot_description/blob/master/src/rosbot_description/urdf/rosbot.gazebo&quot; rel=&quot;nofollow noreferrer&quot;&gt;URDF&lt;/a&gt; for the &lt;a href=&quot;https://husarion.com/manuals/rosbot/&quot; rel=&quot;nofollow noreferrer&quot;&gt;Rosbot2.0&lt;/a&gt; uses &lt;a href=&quot;https://github.com/ros-simulation/gazebo_ros_pkgs/blob/kinetic-devel/gazebo_plugins/src/gazebo_ros_skid_steer_drive.cpp&quot; rel=&quot;nofollow noreferrer&quot;&gt;Skid Steer plugin&lt;/a&gt;. This plugin does not expose a method for resetting the odometry of the robot. So you can't reset odometry by calling a topic or from launch file.&lt;/p&gt;&#xA;&lt;p&gt;But nothing stops you from internally keeping track of the robot's initial offset/transform and correcting this initial transform manually. Or else, you can use a different robot model that supports resetting odometry (Turtlebot).&lt;/p&gt;&#xA;" OwnerUserId="23497" LastEditorUserId="23497" LastEditDate="2021-05-27T17:36:06.303" LastActivityDate="2021-05-27T17:36:06.303" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="22218" PostTypeId="1" CreationDate="2021-05-27T20:55:45.200" Score="0" ViewCount="13" Body="&lt;p&gt;I have set up 2 Monocular Cameras as a stereo camera in ROS2. I successfully published the 2 rectified and calibrated images through the following formats:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;/left/camera_info&#xA;/left/image_rect&#xA;/parameter_events&#xA;/right/camera_info&#xA;/right/image_rect&#xA;/rosout&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;AND&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;/parameter_events&#xA;/rosout&#xA;/stereo/left/camera_info&#xA;/stereo/left/image_rect&#xA;/stereo/right/camera_info&#xA;/stereo/right/image_rect&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Then, I tried to make a disparity image by running this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;ros2 run stereo_image_proc disparity_node --ros-args --params-file disparity-params.yaml&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;NOTE: Here, I didn't know what to use for the &lt;code&gt;disparity-params.yaml&lt;/code&gt; so I just made a blank file called that.&lt;/p&gt;&#xA;&lt;p&gt;Then, I ran &lt;code&gt;ros2 topic list&lt;/code&gt; and I saw the &lt;code&gt;/disparity&lt;/code&gt; topic. To actually see the disparity, I ran &lt;code&gt;ros2 run image_view disparity_view --ros-args --remap image:=/disparity&lt;/code&gt; but this never displayed anything, not even a blank window. There was also no command-line output.&lt;/p&gt;&#xA;&lt;p&gt;Also, I tried using &lt;code&gt;stereo_view&lt;/code&gt; from the &lt;code&gt;image_view&lt;/code&gt; package to see if that works. I this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;ros2 run image_view stereo_view --ros-args --remap stereo:=stereo --ros-args --remap image:=image_rect&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This gives me the following error:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;terminate called after throwing an instance of 'rclcpp::exceptions::InvalidTopicNameError'&#xA;  what():  Invalid topic name: topic name must not contain repeated '/':&#xA;  '/stereo/left//image'&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Is there anything I can do to fix this problem? Also, let me know if there is any other information you need.&lt;/p&gt;&#xA;&lt;p&gt;Specs:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Ubuntu 20.04 64 bit VM&lt;/li&gt;&#xA;&lt;li&gt;ROS 2 Foxy&lt;/li&gt;&#xA;&lt;li&gt;Monocular USB Webcams&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;" OwnerUserId="26747" LastActivityDate="2021-05-27T20:55:45.200" Title="ROS2 Stereo View Fails And Stereo Image Proc Doesn't Show Anything" Tags="&lt;ros&gt;&lt;computer-vision&gt;&lt;cameras&gt;&lt;stereo-vision&gt;&lt;ros2&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22219" PostTypeId="2" ParentId="15916" CreationDate="2021-05-27T21:44:54.223" Score="0" Body="&lt;p&gt;I'm surpised nobody mentioned &lt;a href=&quot;https://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.transform.Rotation.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;Scipy&lt;/a&gt;. Easy to use, mature, great docs, huge community.&lt;/p&gt;&#xA;" OwnerUserId="19260" LastActivityDate="2021-05-27T21:44:54.223" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22220" PostTypeId="2" ParentId="22180" CreationDate="2021-05-28T01:25:53.077" Score="0" Body="&lt;p&gt;My experience-free book learning suggests that pre-loading the rack would eliminate backlash at the rack.&lt;/p&gt;&#xA;&lt;p&gt;First, visualize where the backlash arises. When the pinion moves the rack in direction A, one side of the pinion teeth will engage one side of the rack teeth. Call these the A sides. But when the pinion goes to move the rack in direction B, first it has to rotate a little, until the B sides of the teeth engage, before the rack moves.&lt;/p&gt;&#xA;&lt;p&gt;Now for the pre-loading: suppose you had a spring pulling the rack in direction B. When the pinion moves the rack in direction A, it has to stretch the spring, while again engaging the teeth on the A side. However, when the pinion goes to move the rack in direction B, the spring contracting actually does all the work, pulling the rack in direction B. The pinion's motion controls the rate of retraction, still fighting the spring. And all the while the A sides of the teeth remain engaged, eliminating the backlash.&lt;/p&gt;&#xA;&lt;p&gt;This doesn't come for free, of course. Besides moving the rack and its load, the motor and geartrain driving the pinion will need to be strong enough to stretch the spring to its greatest extension. At its least extension, the spring will still need enough tension to pull the rack and whatever it is carrying. (One could fantasize the complication of replacing the spring with a separately controlled motor/geartrain whose job was solely to fight against the main one.)&lt;/p&gt;&#xA;&lt;p&gt;Finally, backlash in the upstream geartrain won't be addressed by this scheme, unless the spring on the rack can somehow backdrive it all.&lt;/p&gt;&#xA;" OwnerUserId="27618" LastActivityDate="2021-05-28T01:25:53.077" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="22221" PostTypeId="1" CreationDate="2021-05-28T09:31:30.967" Score="0" ViewCount="24" Body="&lt;p&gt;Sorry for being a newbie. Can somebody explain me how many ticks a wheel encoder would deliver (based on one complete wheel rotation), if I have a slice with 500 windows? Is the assumption correct, that 1 tick is counted per window?&lt;/p&gt;&#xA;&lt;p&gt;Thanks&lt;/p&gt;&#xA;" OwnerUserId="28800" LastActivityDate="2021-05-29T00:32:34.693" Title="Wheel encoder Tick calculation" Tags="&lt;wheel&gt;&lt;quadrature-encoder&gt;" AnswerCount="2" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="22222" PostTypeId="2" ParentId="22221" CreationDate="2021-05-28T11:32:22.287" Score="0" Body="&lt;p&gt;That depends on what type of digital encoder you have.&#xA;A full quadrature encoder has 2 light (or magnetic) sensors detecting up and down pulses. A single light source encoder can only detect speed, but not velocity (speed and direction). A full quadrature encoder counts 2 up ticks per window and 2 down ticks for the same window. This is also how direction is calculated - which of the 2 sensors ticks up/down first determines which direction the encoder is rotating. This means there are 4 ticks for 1 window on a full-quadrature encoder.&lt;/p&gt;&#xA;" OwnerUserId="23597" LastActivityDate="2021-05-28T11:32:22.287" CommentCount="2" ContentLicense="CC BY-SA 4.0" />
  <row Id="22223" PostTypeId="1" CreationDate="2021-05-28T13:29:37.617" Score="0" ViewCount="17" Body="&lt;p&gt;A frame {b} is attached to the centre of a robot chassis. The planar configuration is given by &lt;span class=&quot;math-container&quot;&gt;$(x,y,\phi)$&lt;/span&gt; where &lt;span class=&quot;math-container&quot;&gt;$\phi$&lt;/span&gt; is the angle between the x axis in {b} and the x axis of a fixed reference frame {s}.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/YFcxO.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/YFcxO.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The robot has 4 wheels; the centre of each is given by &lt;span class=&quot;math-container&quot;&gt;$(x_i,y_i)$&lt;/span&gt; in {b} where i=1 to 4. The distance of the centre of the robot from the centre of each wheel is given by &lt;span class=&quot;math-container&quot;&gt;$l$&lt;/span&gt; along the x-axis and &lt;span class=&quot;math-container&quot;&gt;$w$&lt;/span&gt; along the y-axis.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/nyndB.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/nyndB.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The linear velocity of the centre of the &lt;span class=&quot;math-container&quot;&gt;$i$&lt;/span&gt;&lt;sup&gt;th&lt;/sup&gt; wheel is given by the following equation. How do I derive/understand the middle mapping matrix?&#xA;&lt;span class=&quot;math-container&quot;&gt;$$\begin{bmatrix}v_{x_i}\\v_{y_i}\end{bmatrix} = &#xA;\begin{bmatrix}-y_i&amp;amp;1&amp;amp;0\\x_i&amp;amp;0&amp;amp;1\end{bmatrix}&#xA;\begin{bmatrix}\dot\phi\\\dot x\\\dot y\end{bmatrix}$$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;I've seen the same equation in 2 places, both in a 4 mecanum wheeled mobile robot context:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://bit.ly/3vuOd0f&quot; rel=&quot;nofollow noreferrer&quot;&gt;Equation 7 in this paper&lt;/a&gt;. It says it has something to do with the motion being planar.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&quot;https://bit.ly/3oX13C5&quot; rel=&quot;nofollow noreferrer&quot;&gt;Equation 13.5 in the book Modern Robotics by Kevin Lynch &lt;/a&gt;. There are other matrices in the equation but I'm mainly focused on this particular mapping matrix.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;" OwnerUserId="9826" LastEditorUserId="9826" LastEditDate="2021-05-28T14:35:01.480" LastActivityDate="2021-05-28T14:35:01.480" Title="Calculating wheel linear velocity from body velocity" Tags="&lt;mobile-robot&gt;&lt;kinematics&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22224" PostTypeId="2" ParentId="18675" CreationDate="2021-05-28T16:45:58.470" Score="0" Body="&lt;p&gt;This is a great question, as it speaks to a key design choice in robotics. &lt;strong&gt;For EKF, once we have odometry, another direct input is where features (landmarks) are.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;For a hobbyist project, I'd say Lidar is easier to begin with. For EKF, one simple (and beginner-friendly) way is to assume everything has the same shape (cones), then use &amp;quot;circular regression&amp;quot; to recognize cones from the 2D lidar detections. The locations of the cones are ported to EKF as observations.&lt;/p&gt;&#xA;&lt;p&gt;For more complex environment, consider particle filters. I started off with an $100 2D Lidar off of amazon, and I used ROS's navigation package (gmapping, particle filters,etc.) to get a small mobile platform running.&lt;/p&gt;&#xA;&lt;p&gt;Depth Cameras (E.g, Intel Realsense, Microsoft Kinect) are more expensive, and 3D reconstruction can be tricky with regular cameras. I'd say for the proof of concept, Lidar is more beginner friendly and cheaper.&lt;/p&gt;&#xA;" OwnerUserId="28801" LastActivityDate="2021-05-28T16:45:58.470" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22225" PostTypeId="1" CreationDate="2021-05-28T16:51:29.027" Score="0" ViewCount="20" Body="&lt;p&gt;My robot is at a starting pose &lt;span class=&quot;math-container&quot;&gt;$s_0 = (x_0, y_0, \theta_0)$&lt;/span&gt; and, while moving, I receive a sequence of motion measurements &lt;span class=&quot;math-container&quot;&gt;$[\mu_1, \mu_2, \: ... \: \mu_n]$&lt;/span&gt;, where &lt;span class=&quot;math-container&quot;&gt;$\mu_i = (\Delta x_i, \Delta y_i, \Delta \theta_i)$&lt;/span&gt;, generating the path &lt;span class=&quot;math-container&quot;&gt;$[s_0, s_1, s_2, \: ... \: s_n]$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;At the first pose &lt;span class=&quot;math-container&quot;&gt;$s_0$&lt;/span&gt; a landmark &lt;span class=&quot;math-container&quot;&gt;$l$&lt;/span&gt; is measured with measurement &lt;span class=&quot;math-container&quot;&gt;$z_0 = (l_x, l_y)$&lt;/span&gt;, where &lt;span class=&quot;math-container&quot;&gt;$l_x$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$l_y$&lt;/span&gt; are the &lt;span class=&quot;math-container&quot;&gt;$x$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$y$&lt;/span&gt; coordinates of the landmark &lt;strong&gt;in the reference frame of &lt;span class=&quot;math-container&quot;&gt;$s_0$&lt;/span&gt;.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Here is an explanatory schema:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/HbBMF.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/HbBMF.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;What I need is to find the landmark measurement &lt;span class=&quot;math-container&quot;&gt;$z_0$&lt;/span&gt; in the reference frame of the last pose, &lt;span class=&quot;math-container&quot;&gt;$s_n$&lt;/span&gt;. In the image above, it would mean computing &lt;span class=&quot;math-container&quot;&gt;$z_3$&lt;/span&gt;, i.e. the measurement &lt;span class=&quot;math-container&quot;&gt;$z_0$&lt;/span&gt; in the reference frame of &lt;span class=&quot;math-container&quot;&gt;$s_3$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;My idea is to use homogeneous coordinates to get the matrix transformations between poses, i.e.&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;\begin{equation}&#xA;s_n = M_{n-1}^n  M_{n-2}^{n-1}\: ... \: M_0^1 s_0&#xA;\end{equation}&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;and do the backward chaining of inverses to find &lt;span class=&quot;math-container&quot;&gt;$z_3$&lt;/span&gt;. But I don't really know how these matrices should be, and how to do the second step using the inverses.&lt;/p&gt;&#xA;" OwnerUserId="24189" LastEditorUserId="24189" LastEditDate="2021-05-29T10:10:41.653" LastActivityDate="2021-05-29T10:10:41.653" Title="Calculate transform from different poses" Tags="&lt;slam&gt;&lt;mapping&gt;&lt;pose&gt;&lt;transformation&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22226" PostTypeId="1" CreationDate="2021-05-28T18:41:48.407" Score="1" ViewCount="17" Body="&lt;p&gt;&lt;a href=&quot;https://robotics.stackexchange.com/questions/22200/multidimensional-obstacle-avoidance&quot;&gt;Multidimensional obstacle avoidance&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://math.stackexchange.com/questions/4146255/multidimensional-obstacle-avoidance-in-ode&quot;&gt;https://math.stackexchange.com/questions/4146255/multidimensional-obstacle-avoidance-in-ode&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;For some time, I studied this question more closely and came to the conclusion that it is best to assign its own constraint for each selected coordinate. Here are the results.&lt;/p&gt;&#xA;&lt;p&gt;I choose those system of ODE:&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$F=\begin{cases} \dot{x}=g_x+\frac{d(U_{rep_1})}{dx} \\  \dot{g_x}=-g_x+\frac{df}{dx} \\ \dot{y}=g_y+\frac{d(U_{rep_2})}{dy} \\ \dot{g_y}=-g_y+\frac{df}{dy} \end{cases}$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;where &lt;span class=&quot;math-container&quot;&gt;$x,y,g_x,g_y$&lt;/span&gt; - variables;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$f=e^{-(x^2+y^2)}$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$U_{rep_1}=\begin{cases} \frac{1}{2}(\frac{1}{\rho_1}-\frac{1}{\rho_0})^2, &amp;amp; \mbox{if } \rho_1&amp;lt;=\rho_0\mbox{} \\ 0, &amp;amp; \mbox{if } \rho_1&amp;gt;\rho_0\mbox{} \end{cases}$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$U_{rep_2}=\begin{cases} \frac{1}{2}(\frac{1}{\rho_2}-\frac{1}{\rho_0})^2, &amp;amp; \mbox{if } \rho_2&amp;lt;=\rho_0\mbox{} \\ 0, &amp;amp; \mbox{if } \rho_2&amp;gt;\rho_0\mbox{} \end{cases}$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\rho_1=\sqrt{(x-\psi_1)^2}-d_{obs}$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\rho_2=\sqrt{(y-\psi_2)^2}-d_{obs}$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\psi_1=\delta +2 e^{-t T}$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\psi_2=\delta +\frac{1}{2.2}e^{-t T}$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\rho_0 = 0.15, T = 0.5, \delta = 0.35,d_{obs}=0.1$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;The figure below shows the results of numerical simulations from Mathematica. It can be seen that the selected variables cannot cross the selected barrier.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/wVhDB.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wVhDB.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The following is interesting. When a variable touches the barrier, it kind of &amp;quot;sticks&amp;quot; to it, holds on for a while, and then &amp;quot;unsticks&amp;quot;. At this time, &lt;span class=&quot;math-container&quot;&gt;$\frac{d(U_{rep_1})}{dx}$&lt;/span&gt; and &lt;span class=&quot;math-container&quot;&gt;$\frac{d(U_{rep_2})}{dy}$&lt;/span&gt; is not zero.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/w0MeJ.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/w0MeJ.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;In general, I ask for help with this task&lt;/strong&gt; - &lt;em&gt;how to quickly &amp;quot;detach&amp;quot; the variable from the barrier? Are there any tricks? Maybe experts in differential equations and dynamical systems can help. I will be glad to help.&lt;/em&gt;&lt;/p&gt;&#xA;" OwnerUserId="24481" LastActivityDate="2021-05-28T18:41:48.407" Title="Multidimensional obstacle avoidance in ODE. Part II" Tags="&lt;control&gt;&lt;dynamics&gt;&lt;dynamic-programming&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22227" PostTypeId="1" CreationDate="2021-05-28T20:00:18.223" Score="-5" ViewCount="24" Body="&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/yJqUu.jpg&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/yJqUu.jpg&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;solve please&#xA;Design Simulink that have gain, derivative, square signal, product and change colors then write the name of any block in the design.&lt;/p&gt;&#xA;" OwnerUserId="28802" LastEditorUserId="9720" LastEditDate="2021-05-28T21:34:24.457" LastActivityDate="2021-05-28T21:34:24.457" Title="Solve this matlab question please" Tags="&lt;matlab&gt;" AnswerCount="0" CommentCount="4" ContentLicense="CC BY-SA 4.0" />
  <row Id="22228" PostTypeId="2" ParentId="22221" CreationDate="2021-05-29T00:32:34.693" Score="0" Body="&lt;p&gt;This depends on your hardware and the software stack you are using.  A digital pulse will have two edges; rising and falling.  A simple slotted optical interrupter sensor has a single LED emitter/detector pair that can generates the signal (and so the rising/falling edges).  It does this as a disk passes by it that has slots in it.  So each slot will generate a rising and falling edge.  So the number of edges is 2 * number of slots.&lt;/p&gt;&#xA;&lt;p&gt;A quadrature encoder has two sensors.  The sensors my be optical, like the example above, in which case there is a disk with slots.  The sensors my be hall effect sensors, in which case the 'disk' has magnets that cause the hall effect sensors to generate rising and falling edges.  So if we think of those magnets as the same as optical disk 'slots' then we can say that for a quadrature encoder that the number of edges is 4 * number of slots per rotation.&lt;/p&gt;&#xA;&lt;p&gt;So the number of signal edges is determined by the number of sensors in the encoder and the number of 'slots' in the 'disk'.  However, if you are using a software stack to read the encoder, it may impose it's own semantics on 'ticks'; for instance, it may only count rising edges, or it may count a complete transition between rising/falling for all sensors as a single 'tick'.  So you should consult the documentation to determine what it is reporting. Also look at your encoder specification of PPR, pulses per rotation.&lt;/p&gt;&#xA;&lt;p&gt;See &lt;a href=&quot;https://dronebotworkshop.com/rotary-encoders-arduino/&quot; rel=&quot;nofollow noreferrer&quot;&gt;DroneBot Workshop&lt;/a&gt; for a good explanation of encoders.&lt;/p&gt;&#xA;" OwnerUserId="24763" LastActivityDate="2021-05-29T00:32:34.693" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22229" PostTypeId="1" CreationDate="2021-05-29T06:55:34.957" Score="0" ViewCount="15" Body="&lt;p&gt;I am currently working on a project aimed at simulating the conversation of two robots based on image recognition.&#xA;The process is conceived as a robotic quiz where one robot interrogates another. Each robot has four images in front of it that represent questions or answers. The first robot has four images in front of it, each image representing one question. After the robot points to the image, a message should be sent to the other robot about the question, and the other robot should select a suitable image that represents the answer to the question asked. After the answer, the information should be sent to the robot asking the questions and such a procedure should be repeated until the last question.&lt;/p&gt;&#xA;&lt;p&gt;Since I don't have much experience in robotics, I'm wondering what is the best way to make this project? How to send messages between robots? I was thinking about ROS but I am not sure how to simulate that &amp;quot;conversation&amp;quot; with ROS. I am trying to make it as simple as it can be.&lt;/p&gt;&#xA;&lt;p&gt;The project can be conducted at first just between two computers, how can I simulate &amp;quot;conversation&amp;quot; with scripted messages between two computers?&lt;/p&gt;&#xA;&lt;p&gt;Thank you for your answers in advance!&lt;/p&gt;&#xA;" OwnerUserId="28806" LastActivityDate="2021-05-29T19:53:52.960" Title="Robot quiz - how to simulate robot conversation?" Tags="&lt;computer-vision&gt;&lt;simulation&gt;&lt;python&gt;&lt;first-robotics&gt;&lt;communication&gt;" AnswerCount="1" CommentCount="1" ContentLicense="CC BY-SA 4.0" />
  <row Id="22230" PostTypeId="1" CreationDate="2021-05-29T10:14:35.433" Score="0" ViewCount="21" Body="&lt;p&gt;I'm trying to study the free body diagram of this differential-drive mobile robot:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/YLbG9aC.png&quot; alt=&quot;Text&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;So i started considering just a straight motion (torque on the right wheel is equal to the torque on the left wheel) and i wrote down the equilibrium equations about forces and torques.&#xA;For each active wheel i considered 5 forces acting on it (mg, vertical reaction due to the surface, friction force, horizontal reaction force at motor bearing, horizontal reaction force at motor bearing) and a torque generated by the electric motor.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/Mb9kVLr.png&quot; alt=&quot;Text&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/79BVVax.png&quot; alt=&quot;Text&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;A is the wheel center of mass, Fn = R, Ft = F. Since it must be a &lt;strong&gt;pure rolling motion&lt;/strong&gt;:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/So5iVaz.png&quot; alt=&quot;Text&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;I wrote the same equations also for the passive wheel, in which i did not have &amp;quot;tau&amp;quot; torque.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/ihf2vwi.png&quot; alt=&quot;Text&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/ItY7WKE.png&quot; alt=&quot;Text&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;B is the wheel center of mass.&lt;/p&gt;&#xA;&lt;p&gt;About the platform i have something like this:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/6DcJqgi.png&quot; alt=&quot;Text&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;Assuming that the robot is moving on a straight trajectory with the same torque applied on each active wheel, i have this equilibrium equation about the x-axis:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/N5Zb8F4.png&quot; alt=&quot;Text&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;From the equilibrium equations of the passive and active wheel, i got P and P1:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/UDtQmwS.png&quot; alt=&quot;Text&quot; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;I have three unknowns and just and equation. Am i doing something wrong?&lt;/p&gt;&#xA;" OwnerUserId="28808" LastEditorUserId="28808" LastEditDate="2021-05-29T12:49:39.190" LastActivityDate="2021-05-29T12:49:39.190" Title="Free body diagram and equilibrium of a differential-drive mobile robot" Tags="&lt;mobile-robot&gt;&lt;wheeled-robot&gt;&lt;dynamics&gt;&lt;torque&gt;&lt;force&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22231" PostTypeId="1" CreationDate="2021-05-29T11:29:17.213" Score="0" ViewCount="9" Body="&lt;p&gt;I am working on a flexible robotic arm. At a point (c) on its surface a wrench is exerted, causing the deformation of the arm. For rigid bodies it is possible to transform a wrench from one coordinate frame (c) to another (b) (e.g. see &amp;quot;A mathematical introduction to robotic manipulation&amp;quot;)  using&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\begin{bmatrix} F_b \newline&#xA;\tau_b \end{bmatrix}&#xA;= &#xA;\begin{bmatrix} {R^b_c}^\top &amp;amp; 0 \newline&#xA;-  {R^b_c}^\top \hat{p}^b_c  &amp;amp; {R^b_c}^\top\end{bmatrix}&#xA;\begin{bmatrix} F_c \newline&#xA;\tau_c \end{bmatrix}$&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;where &lt;span class=&quot;math-container&quot;&gt;$R$&lt;/span&gt; is the rotation matrix and&lt;/p&gt;&#xA;&lt;p&gt;&lt;span class=&quot;math-container&quot;&gt;$\hat{p}^b_c = \begin{bmatrix} 0 &amp;amp; −{p}^b_c(z) &amp;amp; {p}^b_c(y) &#xA;\newline&#xA;{p}^b_c(z) &amp;amp; 0 &amp;amp; -{p}^b_c(x)&#xA;\newline&#xA;-{p}^b_c(y) &amp;amp; {p}^b_c(x) &amp;amp; 0 \end{bmatrix}$&lt;/span&gt;.&lt;/p&gt;&#xA;&lt;p&gt;My question is the following. Can I use the same transformation when the body under consideration is &lt;strong&gt;flexible&lt;/strong&gt;? Or is it the case that, by doing so, the resulting deformation will be &lt;strong&gt;different&lt;/strong&gt; than the one resulting from the wrench applied on point c? Any source on this matter would be highly appreciated, too.&lt;/p&gt;&#xA;" OwnerUserId="13415" LastActivityDate="2021-05-29T11:29:17.213" Title="Expressing wrench on different location for a flexible structure" Tags="&lt;force&gt;&lt;transformation&gt;&lt;coordinate-system&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22232" PostTypeId="2" ParentId="22229" CreationDate="2021-05-29T18:47:13.970" Score="0" Body="&lt;p&gt;Start with requirements.   What messages need to be sent back and forth?  The requirement shouldn’t be “asks a question,” but rather, “sends a text string up to 30 characters long,” or “sends a character referring to which element of a list of questions is asked,” or “sends an integer between 1 and 4.”  The number of possible ways to do this is large - it’s your choice.&lt;/p&gt;&#xA;&lt;p&gt;Add the required functionality to the requirements - what will the recipient do to confirm receipt of the message?   How will the received message be parsed in order to execute logic for determining which picture to select?&lt;/p&gt;&#xA;&lt;p&gt;You can then define the API between the two systems, including how to connect, how to ask, and how to answer.   After that it is a straightforward programming exercise.&lt;/p&gt;&#xA;" OwnerUserId="11125" LastEditorUserId="11125" LastEditDate="2021-05-29T19:53:52.960" LastActivityDate="2021-05-29T19:53:52.960" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22233" PostTypeId="2" ParentId="15336" CreationDate="2021-05-29T22:04:38.717" Score="0" Body="&lt;p&gt;hey could you help me please if you linearized a system then found a state space for it&#xA;thankyou .&lt;/p&gt;&#xA;" OwnerUserId="28811" LastActivityDate="2021-05-29T22:04:38.717" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
  <row Id="22234" PostTypeId="1" CreationDate="2021-05-30T03:33:37.083" Score="0" ViewCount="1" Body="&lt;p&gt;I am somewhat new to robotics. As such, I might be unaware of the correct terms or lingo that I need to use. I am trying to find relevant information on robotic arm operations specifically in terms of relocating piles of semi-indistinguishable objects. The pile could be anything from a pile of stones, pebbles, sticks, etc.&lt;/p&gt;&#xA;&lt;p&gt;I am trying to find literature/ examples of similar operations that have been performed in order to get things started on my end. (I have already tried in a simulated environment - gazebo and VREP)&lt;/p&gt;&#xA;&lt;p&gt;I am able to understand how to relocate a single inanimate object from point A to point B, but when it comes to piles of the said object I am not sure where to start. The simulated arm has the capability to cluster pick multiple objects at the same time. (like a clamp)&lt;/p&gt;&#xA;&lt;p&gt;I have tried to look up online to see if I could find any related articles or research papers but I have been hitting a dead end. Not exactly even sure what I should be searching as the common terms I have used here didn't work.&lt;/p&gt;&#xA;&lt;p&gt;Any advise, articles, papers, or points in the correct direction would be greatly appreciated!&lt;/p&gt;&#xA;" OwnerUserId="28813" LastActivityDate="2021-05-30T03:33:37.083" Title="Robotic arm object/item pile relocation?" Tags="&lt;robotic-arm&gt;&lt;path-planning&gt;" AnswerCount="0" CommentCount="0" ContentLicense="CC BY-SA 4.0" />
</posts>